ZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKaW5kZXggZGZhYjEyZi4uZWJhOWJmOSAxMDA2NDQKLS0tIGEvLm1haWxtYXAKKysrIGIvLm1haWxtYXAKQEAgLTY2LDYgKzY2LDcgQEAKIEtvdXNoaWsgPHJhZ2hhdmVuZHJhLmtvdXNoaWtAbmV0ZXJpb24uY29tPgogTGVvbmlkIEkgQW5hbmlldiA8bGVvbmlkLmkuYW5hbmlldkBpbnRlbC5jb20+CiBMaW5hcyBWZXBzdGFzIDxsaW5hc0BhdXN0aW4uaWJtLmNvbT4KK01hcmsgQnJvd24gPGJyb29uaWVAc2lyZW5hLm9yZy51az4KIE1hdHRoaWV1IENBU1RFVCA8Y2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnI+CiBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgogTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGM2MmRjYjMuLjIzNTg4NDYgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMTY1MywxNCArMTY1MywxNCBAQAogUzogVVNBCiAKIE46IERhdmUgSm9uZXMKLUU6IGRhdmVqQGNvZGVtb25rZXkub3JnLnVrCitFOiBkYXZlakByZWRoYXQuY29tCiBXOiBodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrCi1EOiB4ODYgZXJyYXRhL3NldHVwIG1haW50ZW5hbmNlLgotRDogQUdQR0FSVCBkcml2ZXIuCitEOiBBc3NvcnRlZCBWSUEgeDg2IHN1cHBvcnQuCitEOiAyLjUgQUdQR0FSVCBvdmVyaGF1bC4KIEQ6IENQVUZSRVEgbWFpbnRlbmFuY2UuCi1EOiBCYWNrcG9ydC9Gb3J3YXJkcG9ydCBtZXJnZSBtb25rZXkuCi1EOiBWYXJpb3VzIEphbml0b3Igd29yay4KLVM6IFVuaXRlZCBLaW5nZG9tCitEOiBGZWRvcmEga2VybmVsIG1haW50YWluZW5jZS4KK0Q6IE1pc2MvT3RoZXIuCitTOiAzMTQgTGl0dGxldG9uIFJkLCBXZXN0Zm9yZCwgTUEgMDE4ODYsIFVTQQogCiBOOiBNYXJ0aW4gSm9zZnNzb24KIEU6IGdhbmRhbGZAd2x1Zy53ZXN0Ym8uc2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCmluZGV4IDQzODI3NzguLjcyODZhZDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWApAQCAtMjEsNiArMjEsOSBAQAogCS0gbGlzdCBvZiBjaGFuZ2VzIHRoYXQgYnJlYWsgb2xkZXIgc29mdHdhcmUgcGFja2FnZXMuCiBDb2RpbmdTdHlsZQogCS0gaG93IHRoZSBib3NzIGxpa2VzIHRoZSBDIGNvZGUgaW4gdGhlIGtlcm5lbCB0byBsb29rLgorZGV2ZWxvcG1lbnQtcHJvY2Vzcy8KKwktIEFuIGV4dGVuZGVkIHR1dG9yaWFsIG9uIGhvdyB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCBkZXZlbG9wbWVudAorCSAgcHJvY2Vzcy4KIERNQS1BUEkudHh0CiAJLSBETUEgQVBJLCBwY2lfIEFQSSAmIGV4dGVuc2lvbnMgZm9yIG5vbi1jb25zaXN0ZW50IG1lbW9yeSBtYWNoaW5lcy4KIERNQS1JU0EtTFBDLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWRyaXZlci11c2ItdXNidG1jIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWRyaXZlci11c2ItdXNidG1jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzVmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtZHJpdmVyLXVzYi11c2J0bWMKQEAgLTAsMCArMSw2MiBAQAorV2hhdDoJCS9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYnRtYy9kZXZpY2VzLyovaW50ZXJmYWNlX2NhcGFiaWxpdGllcworV2hhdDoJCS9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYnRtYy9kZXZpY2VzLyovZGV2aWNlX2NhcGFiaWxpdGllcworRGF0ZToJCUF1Z3VzdCAyMDA4CitDb250YWN0OglHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorRGVzY3JpcHRpb246CisJCVRoZXNlIGZpbGVzIHNob3cgdGhlIHZhcmlvdXMgVVNCIFRNQyBjYXBhYmlsaXRpZXMgYXMgZGVzY3JpYmVkCisJCWJ5IHRoZSBkZXZpY2UgaXRzZWxmLiAgVGhlIGZ1bGwgZGVzY3JpcHRpb24gb2YgdGhlIGJpdGZpZWxkcworCQljYW4gYmUgZm91bmQgaW4gdGhlIFVTQiBUTUMgZG9jdW1lbnRzIGZyb20gdGhlIFVTQi1JRiBlbnRpdGxlZAorCQkiVW5pdmVyc2FsIFNlcmlhbCBCdXMgVGVzdCBhbmQgTWVhc3VyZW1lbnQgQ2xhc3MgU3BlY2lmaWNhdGlvbgorCQkoVVNCVE1DKSBSZXZpc2lvbiAxLjAiIHNlY3Rpb24gNC4yLjEuOC4KKworCQlUaGUgZmlsZXMgYXJlIHJlYWQgb25seS4KKworCitXaGF0OgkJL3N5cy9idXMvdXNiL2RyaXZlcnMvdXNidG1jL2RldmljZXMvKi91c2I0ODhfaW50ZXJmYWNlX2NhcGFiaWxpdGllcworV2hhdDoJCS9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYnRtYy9kZXZpY2VzLyovdXNiNDg4X2RldmljZV9jYXBhYmlsaXRpZXMKK0RhdGU6CQlBdWd1c3QgMjAwOAorQ29udGFjdDoJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KK0Rlc2NyaXB0aW9uOgorCQlUaGVzZSBmaWxlcyBzaG93IHRoZSB2YXJpb3VzIFVTQiBUTUMgY2FwYWJpbGl0aWVzIGFzIGRlc2NyaWJlZAorCQlieSB0aGUgZGV2aWNlIGl0c2VsZi4gIFRoZSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBiaXRmaWVsZHMKKwkJY2FuIGJlIGZvdW5kIGluIHRoZSBVU0IgVE1DIGRvY3VtZW50cyBmcm9tIHRoZSBVU0ItSUYgZW50aXRsZWQKKwkJIlVuaXZlcnNhbCBTZXJpYWwgQnVzIFRlc3QgYW5kIE1lYXN1cmVtZW50IENsYXNzLCBTdWJjbGFzcworCQlVU0I0ODggU3BlY2lmaWNhdGlvbiAoVVNCVE1DLVVTQjQ4OCkgUmV2aXNpb24gMS4wIiBzZWN0aW9uCisJCTQuMi4yLgorCisJCVRoZSBmaWxlcyBhcmUgcmVhZCBvbmx5LgorCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZHJpdmVycy91c2J0bWMvZGV2aWNlcy8qL1Rlcm1DaGFyCitEYXRlOgkJQXVndXN0IDIwMDgKK0NvbnRhY3Q6CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBmaWxlIGlzIHRoZSBUZXJtQ2hhciB2YWx1ZSB0byBiZSBzZW50IHRvIHRoZSBVU0IgVE1DCisJCWRldmljZSBhcyBkZXNjcmliZWQgYnkgdGhlIGRvY3VtZW50LCAiVW5pdmVyc2FsIFNlcmlhbCBCdXMgVGVzdAorCQlhbmQgTWVhc3VyZW1lbnQgQ2xhc3MgU3BlY2lmaWNhdGlvbgorCQkoVVNCVE1DKSBSZXZpc2lvbiAxLjAiIGFzIHB1Ymxpc2hlZCBieSB0aGUgVVNCLUlGLgorCisJCU5vdGUgdGhhdCB0aGUgVGVybUNoYXJFbmFibGVkIGZpbGUgZGV0ZXJtaW5lcyBpZiB0aGlzIHZhbHVlIGlzCisJCXNlbnQgdG8gdGhlIGRldmljZSBvciBub3QuCisKKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYnRtYy9kZXZpY2VzLyovVGVybUNoYXJFbmFibGVkCitEYXRlOgkJQXVndXN0IDIwMDgKK0NvbnRhY3Q6CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBmaWxlIGRldGVybWluZXMgaWYgdGhlIFRlcm1DaGFyIGlzIHRvIGJlIHNlbnQgdG8gdGhlCisJCWRldmljZSBvbiBldmVyeSB0cmFuc2FjdGlvbiBvciBub3QuICBGb3IgbW9yZSBkZXRhaWxzIGFib3V0CisJCXRoaXMsIHBsZWFzZSBzZWUgdGhlIGRvY3VtZW50LCAiVW5pdmVyc2FsIFNlcmlhbCBCdXMgVGVzdCBhbmQKKwkJTWVhc3VyZW1lbnQgQ2xhc3MgU3BlY2lmaWNhdGlvbiAoVVNCVE1DKSBSZXZpc2lvbiAxLjAiIGFzCisJCXB1Ymxpc2hlZCBieSB0aGUgVVNCLUlGLgorCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZHJpdmVycy91c2J0bWMvZGV2aWNlcy8qL2F1dG9fYWJvcnQKK0RhdGU6CQlBdWd1c3QgMjAwOAorQ29udGFjdDoJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KK0Rlc2NyaXB0aW9uOgorCQlUaGlzIGZpbGUgZGV0ZXJtaW5lcyBpZiB0aGUgdGhlIHRyYW5zYWN0aW9uIG9mIHRoZSBVU0IgVE1DCisJCWRldmljZSBpcyB0byBiZSBhdXRvbWF0aWNhbGx5IGFib3J0ZWQgaWYgdGhlcmUgaXMgYW55IGVycm9yLgorCQlGb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoaXMsIHBsZWFzZSBzZWUgdGhlIGRvY3VtZW50LAorCQkiVW5pdmVyc2FsIFNlcmlhbCBCdXMgVGVzdCBhbmQgTWVhc3VyZW1lbnQgQ2xhc3MgU3BlY2lmaWNhdGlvbgorCQkoVVNCVE1DKSBSZXZpc2lvbiAxLjAiIGFzIHB1Ymxpc2hlZCBieSB0aGUgVVNCLUlGLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiCmluZGV4IDExYTNjMTYuLmRmNmM4YTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYgorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKQEAgLTg1LDMgKzg1LDE5IEBACiBVc2VyczoKIAkJUG93ZXJUT1AgPHBvd2VyQGJ1Z2hvc3Qub3JnPgogCQlodHRwOi8vd3d3Lmxlc3N3YXR0cy5vcmcvcHJvamVjdHMvcG93ZXJ0b3AvCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlLzxidXNudW0+LTxkZXZudW0+Li4uOjxjb25maWcgbnVtPi08aW50ZXJmYWNlIG51bT4vc3VwcG9ydHNfYXV0b3N1c3BlbmQKK0RhdGU6CQlKYW51YXJ5IDIwMDgKK0tlcm5lbFZlcnNpb246CTIuNi4yNworQ29udGFjdDoJU2FyYWggU2hhcnAgPHNhcmFoLmEuc2hhcnBAaW50ZWwuY29tPgorRGVzY3JpcHRpb246CisJCVdoZW4gcmVhZCwgdGhpcyBmaWxlIHJldHVybnMgMSBpZiB0aGUgaW50ZXJmYWNlIGRyaXZlcgorCQlmb3IgdGhpcyBpbnRlcmZhY2Ugc3VwcG9ydHMgYXV0b3N1c3BlbmQuICBJdCBhbHNvCisJCXJldHVybnMgMSBpZiBubyBkcml2ZXIgaGFzIGNsYWltZWQgdGhpcyBpbnRlcmZhY2UsIGFzIGFuCisJCXVuY2xhaW1lZCBpbnRlcmZhY2Ugd2lsbCBub3Qgc3RvcCB0aGUgZGV2aWNlIGZyb20gYmVpbmcKKwkJYXV0b3N1c3BlbmRlZCBpZiBhbGwgb3RoZXIgaW50ZXJmYWNlIGRyaXZlcnMgYXJlIGlkbGUuCisJCVRoZSBmaWxlIHJldHVybnMgMCBpZiBhdXRvc3VzcGVuZCBzdXBwb3J0IGhhcyBub3QgYmVlbgorCQlhZGRlZCB0byB0aGUgZHJpdmVyLgorVXNlcnM6CisJCVVTQiBQTSB0b29sCisJCWdpdDovL2dpdC5tb2JsaW4ub3JnL3VzZXJzL3NhcmFoL3VzYi1wbS10b29sLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiLWRldmljZXMtdXNic2V2c2VnIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiLWRldmljZXMtdXNic2V2c2VnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiODMwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2ItZGV2aWNlcy11c2JzZXZzZWcKQEAgLTAsMCArMSw0MyBAQAorV2hlcmU6CQkvc3lzL2J1cy91c2IvLi4uL3Bvd2VyZWQKK0RhdGU6CQlBdWd1c3QgMjAwOAorS2VybmVsIFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOglDb250cm9scyB3aGV0aGVyIHRoZSBkZXZpY2UncyBkaXNwbGF5IHdpbGwgcG93ZXJlZC4KKwkJQSB2YWx1ZSBvZiAwIGlzIG9mZiBhbmQgYSBub24temVybyB2YWx1ZSBpcyBvbi4KKworV2hlcmU6CQkvc3lzL2J1cy91c2IvLi4uL21vZGVfbXNiCitXaGVyZToJCS9zeXMvYnVzL3VzYi8uLi4vbW9kZV9sc2IKK0RhdGU6CQlBdWd1c3QgMjAwOAorS2VybmVsIFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOglDb250cm9scyB0aGUgZGV2aWNlcyBkaXNwbGF5IG1vZGUuCisJCUZvciBhIDYgY2hhcmFjdGVyIGRpc3BsYXkgdGhlIHZhbHVlcyBhcmUKKwkJCU1TQiAweDA2OyBMU0IgMHgzRiwgYW5kCisJCWZvciBhbiA4IGNoYXJhY3RlciBkaXNwbGF5IHRoZSB2YWx1ZXMgYXJlCisJCQlNU0IgMHgwODsgTFNCIDB4RkYuCisKK1doZXJlOgkJL3N5cy9idXMvdXNiLy4uLi90ZXh0bW9kZQorRGF0ZToJCUF1Z3VzdCAyMDA4CitLZXJuZWwgVmVyc2lvbjoJMi42LjI2CitDb250YWN0OglIYXJyaXNvbiBNZXR6Z2VyIDxoYXJyaXNvbm1ldHpAZ21haWwuY29tPgorRGVzY3JpcHRpb246CUNvbnRyb2xzIHRoZSB3YXkgdGhlIGRldmljZSBpbnRlcnByZXRzIGl0cyB0ZXh0IGJ1ZmZlci4KKwkJcmF3OgllYWNoIGNoYXJhY3RlciBjb250cm9scyBpdHMgc2VnbWVudCBtYW51YWxseQorCQloZXg6CWVhY2ggY2hhcmFjdGVyIGlzIGJldHdlZW4gMC0xNQorCQlhc2NpaToJZWFjaCBjaGFyYWN0ZXIgaXMgYmV0d2VlbiAnMCctJzknIGFuZCAnQSctJ0YnLgorCitXaGVyZToJCS9zeXMvYnVzL3VzYi8uLi4vdGV4dAorRGF0ZToJCUF1Z3VzdCAyMDA4CitLZXJuZWwgVmVyc2lvbjoJMi42LjI2CitDb250YWN0OglIYXJyaXNvbiBNZXR6Z2VyIDxoYXJyaXNvbm1ldHpAZ21haWwuY29tPgorRGVzY3JpcHRpb246CVRoZSB0ZXh0IChvciBkYXRhKSBmb3IgdGhlIGRldmljZSB0byBkaXNwbGF5CisKK1doZXJlOgkJL3N5cy9idXMvdXNiLy4uLi9kZWNpbWFscworRGF0ZToJCUF1Z3VzdCAyMDA4CitLZXJuZWwgVmVyc2lvbjoJMi42LjI2CitDb250YWN0OglIYXJyaXNvbiBNZXR6Z2VyIDxoYXJyaXNvbm1ldHpAZ21haWwuY29tPgorRGVzY3JpcHRpb246CUNvbnRyb2xzIHRoZSBkZWNpbWFsIHBsYWNlcyBvbiB0aGUgZGV2aWNlLgorCQlUbyBzZXQgdGhlIG50aCBkZWNpbWFsIHBsYWNlLCBnaXZlIHRoaXMgZmllbGQKKwkJdGhlIHZhbHVlIG9mIDEwICoqIG4uIEFzc3VtZSB0aGlzIGZpZWxkIGhhcworCQl0aGUgdmFsdWUgayBhbmQgaGFzIDEgb3IgbW9yZSBkZWNpbWFsIHBsYWNlcyBzZXQsCisJCXRvIHNldCB0aGUgbXRoIHBsYWNlICh3aGVyZSBtIGlzIG5vdCBhbHJlYWR5IHNldCksCisJCWNoYW5nZSB0aGlzIGZpZWxkcyB2YWx1ZSB0byBrICsgMTAgKiogbS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXJlZ3VsYXRvciBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtcmVndWxhdG9yCmluZGV4IDc5YTRhNzUuLjM3MzFmNmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtcmVndWxhdG9yCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtcmVndWxhdG9yCkBAIC0xLDcgKzEsNyBAQAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9zdGF0ZQogRGF0ZToJCUFwcmlsIDIwMDgKIEtlcm5lbFZlcnNpb246CTIuNi4yNgotQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KIERlc2NyaXB0aW9uOgogCQlFYWNoIHJlZ3VsYXRvciBkaXJlY3Rvcnkgd2lsbCBjb250YWluIGEgZmllbGQgY2FsbGVkCiAJCXN0YXRlLiBUaGlzIGhvbGRzIHRoZSByZWd1bGF0b3Igb3V0cHV0IHN0YXRlLgpAQCAtMjcsNyArMjcsNyBAQAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi90eXBlCiBEYXRlOgkJQXByaWwgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2Ci1Db250YWN0OglMaWFtIEdpcmR3b29kIDxsZ0BvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCUVhY2ggcmVndWxhdG9yIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJdHlwZS4gVGhpcyBob2xkcyB0aGUgcmVndWxhdG9yIHR5cGUuCkBAIC01MSw3ICs1MSw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL21pY3Jvdm9sdHMKIERhdGU6CQlBcHJpbCAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQltaWNyb3ZvbHRzLiBUaGlzIGhvbGRzIHRoZSByZWd1bGF0b3Igb3V0cHV0IHZvbHRhZ2Ugc2V0dGluZwpAQCAtNjUsNyArNjUsNyBAQAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9taWNyb2FtcHMKIERhdGU6CQlBcHJpbCAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQltaWNyb2FtcHMuIFRoaXMgaG9sZHMgdGhlIHJlZ3VsYXRvciBvdXRwdXQgY3VycmVudCBsaW1pdApAQCAtNzksNyArNzksNyBAQAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9vcG1vZGUKIERhdGU6CQlBcHJpbCAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQlvcG1vZGUuIFRoaXMgaG9sZHMgdGhlIHJlZ3VsYXRvciBvcGVyYXRpbmcgbW9kZSBzZXR0aW5nLgpAQCAtMTAyLDcgKzEwMiw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL21pbl9taWNyb3ZvbHRzCiBEYXRlOgkJQXByaWwgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2Ci1Db250YWN0OglMaWFtIEdpcmR3b29kIDxsZ0BvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCUVhY2ggcmVndWxhdG9yIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJbWluX21pY3Jvdm9sdHMuIFRoaXMgaG9sZHMgdGhlIG1pbmltdW0gc2FmZSB3b3JraW5nIHJlZ3VsYXRvcgpAQCAtMTE2LDcgKzExNiw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL21heF9taWNyb3ZvbHRzCiBEYXRlOgkJQXByaWwgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2Ci1Db250YWN0OglMaWFtIEdpcmR3b29kIDxsZ0BvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCUVhY2ggcmVndWxhdG9yIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJbWF4X21pY3Jvdm9sdHMuIFRoaXMgaG9sZHMgdGhlIG1heGltdW0gc2FmZSB3b3JraW5nIHJlZ3VsYXRvcgpAQCAtMTMwLDcgKzEzMCw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL21pbl9taWNyb2FtcHMKIERhdGU6CQlBcHJpbCAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQltaW5fbWljcm9hbXBzLiBUaGlzIGhvbGRzIHRoZSBtaW5pbXVtIHNhZmUgd29ya2luZyByZWd1bGF0b3IKQEAgLTE0NSw3ICsxNDUsNyBAQAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9tYXhfbWljcm9hbXBzCiBEYXRlOgkJQXByaWwgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2Ci1Db250YWN0OglMaWFtIEdpcmR3b29kIDxsZ0BvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCUVhY2ggcmVndWxhdG9yIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJbWF4X21pY3JvYW1wcy4gVGhpcyBob2xkcyB0aGUgbWF4aW11bSBzYWZlIHdvcmtpbmcgcmVndWxhdG9yCkBAIC0xNTcsMTAgKzE1NywyMyBAQAogCQlwbGF0Zm9ybSBjb2RlLgogCiAKK1doYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vbmFtZQorRGF0ZToJCU9jdG9iZXIgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI4CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgorRGVzY3JpcHRpb246CisJCUVhY2ggcmVndWxhdG9yIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKKwkJbmFtZS4gVGhpcyBob2xkcyBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgcmVndWxhdG9yIGZvcgorCQlkaXNwbGF5IHB1cnBvc2VzLgorCisJCU5PVEU6IHRoaXMgd2lsbCBiZSBlbXB0eSBpZiBubyBzdWl0YWJsZSBuYW1lIGlzIHByb3ZpZGVkCisJCWJ5IHBsYXRmb3JtIG9yIHJlZ3VsYXRvciBkcml2ZXJzLgorCisKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vbnVtX3VzZXJzCiBEYXRlOgkJQXByaWwgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2Ci1Db250YWN0OglMaWFtIEdpcmR3b29kIDxsZ0BvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCUVhY2ggcmVndWxhdG9yIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJbnVtX3VzZXJzLiBUaGlzIGhvbGRzIHRoZSBudW1iZXIgb2YgY29uc3VtZXIgZGV2aWNlcyB0aGF0CkBAIC0xNzAsNyArMTgzLDcgQEAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vcmVxdWVzdGVkX21pY3JvYW1wcwogRGF0ZToJCUFwcmlsIDIwMDgKIEtlcm5lbFZlcnNpb246CTIuNi4yNgotQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KIERlc2NyaXB0aW9uOgogCQlFYWNoIHJlZ3VsYXRvciBkaXJlY3Rvcnkgd2lsbCBjb250YWluIGEgZmllbGQgY2FsbGVkCiAJCXJlcXVlc3RlZF9taWNyb2FtcHMuIFRoaXMgaG9sZHMgdGhlIHRvdGFsIHJlcXVlc3RlZCBsb2FkCkBAIC0xODEsNyArMTk0LDcgQEAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vcGFyZW50CiBEYXRlOgkJQXByaWwgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2Ci1Db250YWN0OglMaWFtIEdpcmR3b29kIDxsZ0BvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCVNvbWUgcmVndWxhdG9yIGRpcmVjdG9yaWVzIHdpbGwgY29udGFpbiBhIGxpbmsgY2FsbGVkIHBhcmVudC4KIAkJVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBvciBzdXBwbHkgcmVndWxhdG9yIGlmIG9uZSBleGlzdHMuCkBAIC0xODksNyArMjAyLDcgQEAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vc3VzcGVuZF9tZW1fbWljcm92b2x0cwogRGF0ZToJCU1heSAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQlzdXNwZW5kX21lbV9taWNyb3ZvbHRzLiBUaGlzIGhvbGRzIHRoZSByZWd1bGF0b3Igb3V0cHV0CkBAIC0yMDMsNyArMjE2LDcgQEAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vc3VzcGVuZF9kaXNrX21pY3Jvdm9sdHMKIERhdGU6CQlNYXkgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2Ci1Db250YWN0OglMaWFtIEdpcmR3b29kIDxsZ0BvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCUVhY2ggcmVndWxhdG9yIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJc3VzcGVuZF9kaXNrX21pY3Jvdm9sdHMuIFRoaXMgaG9sZHMgdGhlIHJlZ3VsYXRvciBvdXRwdXQKQEAgLTIxNyw3ICsyMzAsNyBAQAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9zdXNwZW5kX3N0YW5kYnlfbWljcm92b2x0cwogRGF0ZToJCU1heSAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQlzdXNwZW5kX3N0YW5kYnlfbWljcm92b2x0cy4gVGhpcyBob2xkcyB0aGUgcmVndWxhdG9yIG91dHB1dApAQCAtMjMxLDcgKzI0NCw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL3N1c3BlbmRfbWVtX21vZGUKIERhdGU6CQlNYXkgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2Ci1Db250YWN0OglMaWFtIEdpcmR3b29kIDxsZ0BvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCUVhY2ggcmVndWxhdG9yIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJc3VzcGVuZF9tZW1fbW9kZS4gVGhpcyBob2xkcyB0aGUgcmVndWxhdG9yIG9wZXJhdGluZyBtb2RlCkBAIC0yNDUsNyArMjU4LDcgQEAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vc3VzcGVuZF9kaXNrX21vZGUKIERhdGU6CQlNYXkgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2Ci1Db250YWN0OglMaWFtIEdpcmR3b29kIDxsZ0BvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCUVhY2ggcmVndWxhdG9yIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJc3VzcGVuZF9kaXNrX21vZGUuIFRoaXMgaG9sZHMgdGhlIHJlZ3VsYXRvciBvcGVyYXRpbmcgbW9kZQpAQCAtMjU4LDcgKzI3MSw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL3N1c3BlbmRfc3RhbmRieV9tb2RlCiBEYXRlOgkJTWF5IDIwMDgKIEtlcm5lbFZlcnNpb246CTIuNi4yNgotQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KIERlc2NyaXB0aW9uOgogCQlFYWNoIHJlZ3VsYXRvciBkaXJlY3Rvcnkgd2lsbCBjb250YWluIGEgZmllbGQgY2FsbGVkCiAJCXN1c3BlbmRfc3RhbmRieV9tb2RlLiBUaGlzIGhvbGRzIHRoZSByZWd1bGF0b3Igb3BlcmF0aW5nIG1vZGUKQEAgLTI3Miw3ICsyODUsNyBAQAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9zdXNwZW5kX21lbV9zdGF0ZQogRGF0ZToJCU1heSAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQlzdXNwZW5kX21lbV9zdGF0ZS4gVGhpcyBob2xkcyB0aGUgcmVndWxhdG9yIG9wZXJhdGluZyBzdGF0ZQpAQCAtMjg3LDcgKzMwMCw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL3N1c3BlbmRfZGlza19zdGF0ZQogRGF0ZToJCU1heSAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQlzdXNwZW5kX2Rpc2tfc3RhdGUuIFRoaXMgaG9sZHMgdGhlIHJlZ3VsYXRvciBvcGVyYXRpbmcgc3RhdGUKQEAgLTMwMiw3ICszMTUsNyBAQAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9zdXNwZW5kX3N0YW5kYnlfc3RhdGUKIERhdGU6CQlNYXkgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2Ci1Db250YWN0OglMaWFtIEdpcmR3b29kIDxsZ0BvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCUVhY2ggcmVndWxhdG9yIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJc3VzcGVuZF9zdGFuZGJ5X3N0YXRlLiBUaGlzIGhvbGRzIHRoZSByZWd1bGF0b3Igb3BlcmF0aW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXByb2ZpbGluZyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcHJvZmlsaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMmQ4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXByb2ZpbGluZwpAQCAtMCwwICsxLDEzIEBACitXaGF0OgkJL3N5cy9rZXJuZWwvcHJvZmlsZQorRGF0ZToJCVNlcHRlbWJlciAyMDA4CitDb250YWN0OglEYXZlIEhhbnNlbiA8ZGF2ZUBsaW51eC52bmV0LmlibS5jb20+CitEZXNjcmlwdGlvbjoKKwkJL3N5cy9rZXJuZWwvcHJvZmlsZSBpcyB0aGUgcnVudGltZSBlcXVpdmFsZW50CisJCW9mIHRoZSBib290LXRpbWUgcHJvZmlsZT0gb3B0aW9uLgorCisJCVlvdSBjYW4gZ2V0IHRoZSBzYW1lIGVmZmVjdCBydW5uaW5nOgorCisJCQllY2hvIDIgPiAvc3lzL2tlcm5lbC9wcm9maWxlCisKKwkJYXMgeW91IHdvdWxkIGJ5IGlzc3VpbmcgcHJvZmlsZT0yIG9uIHRoZSBib290CisJCWNvbW1hbmQgbGluZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQppbmRleCAxNjE1MzUwLi5mYWJjMDY0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogIyBUbyBhZGQgYSBuZXcgYm9vayB0aGUgb25seSBzdGVwIHJlcXVpcmVkIGlzIHRvIGFkZCB0aGUgYm9vayB0byB0aGUKICMgbGlzdCBvZiBET0NCT09LUy4KIAotRE9DQk9PS1MgOj0gd2FuYm9vay54bWwgejg1MzBib29rLnhtbCBtY2Fib29rLnhtbCB2aWRlb2Jvb2sueG1sIFwKK0RPQ0JPT0tTIDo9IHdhbmJvb2sueG1sIHo4NTMwYm9vay54bWwgbWNhYm9vay54bWwgXAogCSAgICBrZXJuZWwtaGFja2luZy54bWwga2VybmVsLWxvY2tpbmcueG1sIGRldmljZWlvYm9vay54bWwgXAogCSAgICBwcm9jZnMtZ3VpZGUueG1sIHdyaXRpbmdfdXNiX2RyaXZlci54bWwgbmV0d29ya2luZy54bWwgXAogCSAgICBrZXJuZWwtYXBpLnhtbCBmaWxlc3lzdGVtcy54bWwgbHNtLnhtbCB1c2IueG1sIGtnZGIueG1sIFwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nYWRnZXQudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9nYWRnZXQudG1wbAppbmRleCBlYTNiYzk1Li42ZWYyZjAwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2FkZ2V0LnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dhZGdldC50bXBsCkBAIC01NTcsNiArNTU3LDkgQEAKIDwvcGFyYT4KIAogIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYworIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYworIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYworIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9vYmV4LmMKICFFZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc2VyaWFsLmMKIAogPC9zZWN0MT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnMtZ3VpZGUudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnMtZ3VpZGUudG1wbAppbmRleCA4YTVkYzZlLi45ZWJhNGI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzLWd1aWRlLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmcy1ndWlkZS50bXBsCkBAIC0xNCwxNyArMTQsMjAgQEAKIAk8b3RoZXJuYW1lPihKLkEuSy4pPC9vdGhlcm5hbWU+CiAJPHN1cm5hbWU+TW91dzwvc3VybmFtZT4KIAk8YWZmaWxpYXRpb24+Ci0JICA8b3JnbmFtZT5EZWxmdCBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3k8L29yZ25hbWU+Ci0JICA8b3JnZGl2PkZhY3VsdHkgb2YgSW5mb3JtYXRpb24gVGVjaG5vbG9neSBhbmQgU3lzdGVtczwvb3JnZGl2PgogCSAgPGFkZHJlc3M+Ci0gICAgICAgICAgICA8ZW1haWw+Si5BLksuTW91d0BpdHMudHVkZWxmdC5ubDwvZW1haWw+Ci0gICAgICAgICAgICA8cG9iPlBPIEJPWCA1MDMxPC9wb2I+Ci0gICAgICAgICAgICA8cG9zdGNvZGU+MjYwMCBHQTwvcG9zdGNvZGU+Ci0gICAgICAgICAgICA8Y2l0eT5EZWxmdDwvY2l0eT4KLSAgICAgICAgICAgIDxjb3VudHJ5PlRoZSBOZXRoZXJsYW5kczwvY291bnRyeT4KKyAgICAgICAgICAgIDxlbWFpbD5tb3V3QG5sLmxpbnV4Lm9yZzwvZW1haWw+CiAgICAgICAgICAgPC9hZGRyZXNzPgogCTwvYWZmaWxpYXRpb24+CiAgICAgICA8L2F1dGhvcj4KKyAgICAgIDxvdGhlcmNyZWRpdD4KKwk8Y29udHJpYj4KKwlUaGlzIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIHdlcmUgd3JpdHRlbiB3aGlsZSB3b3JraW5nIG9uIHRoZQorCUxBUlQgY29tcHV0aW5nIGJvYXJkCisJKDx1bGluayB1cmw9Imh0dHA6Ly93d3cubGFydG1ha2VyLm5sLyI+aHR0cDovL3d3dy5sYXJ0bWFrZXIubmwvPC91bGluaz4pLAorCXdoaWNoIHdhcyBzcG9uc29yZWQgYnkgdGhlIERlbHQgVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5IHByb2plY3RzCisJTW9iaWxlIE11bHRpLW1lZGlhIENvbW11bmljYXRpb25zIGFuZCBVYmlxdWl0b3VzIENvbW11bmljYXRpb25zLgorCTwvY29udHJpYj4KKyAgICAgIDwvb3RoZXJjcmVkaXQ+CiAgICAgPC9hdXRob3Jncm91cD4KIAogICAgIDxyZXZoaXN0b3J5PgpAQCAtMTA5LDE4ICsxMTIsNiBAQAogICAgIDwvcGFyYT4KIAogICAgIDxwYXJhPgotICAgICAgVGhpcyBkb2N1bWVudGF0aW9uIHdhcyB3cml0dGVuIHdoaWxlIHdvcmtpbmcgb24gdGhlIExBUlQKLSAgICAgIGNvbXB1dGluZyBib2FyZCAoPHVsaW5rCi0gICAgICB1cmw9Imh0dHA6Ly93d3cubGFydC50dWRlbGZ0Lm5sLyI+aHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvPC91bGluaz4pLAotICAgICAgd2hpY2ggaXMgc3BvbnNvcmVkIGJ5IHRoZSBNb2JpbGUgTXVsdGktbWVkaWEgQ29tbXVuaWNhdGlvbnMKLSAgICAgICg8dWxpbmsKLSAgICAgIHVybD0iaHR0cDovL3d3dy5tbWMudHVkZWxmdC5ubC8iPmh0dHA6Ly93d3cubW1jLnR1ZGVsZnQubmwvPC91bGluaz4pCi0gICAgICBhbmQgVWJpcXVpdG91cyBDb21tdW5pY2F0aW9ucyAoPHVsaW5rCi0gICAgICB1cmw9Imh0dHA6Ly93d3cudWJpY29tLnR1ZGVsZnQubmwvIj5odHRwOi8vd3d3LnViaWNvbS50dWRlbGZ0Lm5sLzwvdWxpbms+KQotICAgICAgcHJvamVjdHMuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+CiAgICAgICBFcmlrCiAgICAgPC9wYXJhPgogICA8L3ByZWZhY2U+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzX2V4YW1wbGUuYyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnNfZXhhbXBsZS5jCmluZGV4IDJmM2RlMGYuLjhjNjM5NmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnNfZXhhbXBsZS5jCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnNfZXhhbXBsZS5jCkBAIC0xLDI4ICsxLDE2IEBACiAvKgogICogcHJvY2ZzX2V4YW1wbGUuYzogYW4gZXhhbXBsZSBwcm9jIGludGVyZmFjZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSwgRXJpayBNb3V3IChKLkEuSy5Nb3V3QGl0cy50dWRlbGZ0Lm5sKQorICogQ29weXJpZ2h0IChDKSAyMDAxLCBFcmlrIE1vdXcgKG1vdXdAbmwubGludXgub3JnKQogICoKICAqIFRoaXMgZmlsZSBhY2NvbXBhbmllcyB0aGUgcHJvY2ZzLWd1aWRlIGluIHRoZSBMaW51eCBrZXJuZWwKICAqIHNvdXJjZS4gSXRzIG1haW4gdXNlIGlzIHRvIGRlbW9uc3RyYXRlIHRoZSBjb25jZXB0cyBhbmQKICAqIGZ1bmN0aW9ucyBkZXNjcmliZWQgaW4gdGhlIGd1aWRlLgogICoKICAqIFRoaXMgc29mdHdhcmUgaGFzIGJlZW4gZGV2ZWxvcGVkIHdoaWxlIHdvcmtpbmcgb24gdGhlIExBUlQKLSAqIGNvbXB1dGluZyBib2FyZCAoaHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvKSwgd2hpY2ggaXMKLSAqIHNwb25zb3JlZCBieSB0aGUgTW9iaWxlIE11bHRpLW1lZGlhIENvbW11bmljYXRpb25zCi0gKiAoaHR0cDovL3d3dy5tbWMudHVkZWxmdC5ubC8pIGFuZCBVYmlxdWl0b3VzIENvbW11bmljYXRpb25zIAotICogKGh0dHA6Ly93d3cudWJpY29tLnR1ZGVsZnQubmwvKSBwcm9qZWN0cy4KLSAqCi0gKiBUaGUgYXV0aG9yIGNhbiBiZSByZWFjaGVkIGF0OgotICoKLSAqICBFcmlrIE1vdXcKLSAqICBJbmZvcm1hdGlvbiBhbmQgQ29tbXVuaWNhdGlvbiBUaGVvcnkgR3JvdXAKLSAqICBGYWN1bHR5IG9mIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgYW5kIFN5c3RlbXMKLSAqICBEZWxmdCBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3kKLSAqICBQLk8uIEJveCA1MDMxCi0gKiAgMjYwMCBHQSBEZWxmdAotICogIFRoZSBOZXRoZXJsYW5kcwotICoKKyAqIGNvbXB1dGluZyBib2FyZCAoaHR0cDovL3d3dy5sYXJ0bWFrZXIubmwpLCB3aGljaCB3YXMgc3BvbnNvcmVkCisgKiBieSB0aGUgRGVsdCBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3kgcHJvamVjdHMgTW9iaWxlIE11bHRpLW1lZGlhCisgKiBDb21tdW5pY2F0aW9ucyBhbmQgVWJpcXVpdG91cyBDb21tdW5pY2F0aW9ucy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKICAqIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpZGVvYm9vay50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpZGVvYm9vay50bXBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmMyNTk0Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92aWRlb2Jvb2sudG1wbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgotCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+Ci0KLTxib29rIGlkPSJWNExHdWlkZSI+Ci0gPGJvb2tpbmZvPgotICA8dGl0bGU+VmlkZW80TGludXggUHJvZ3JhbW1pbmc8L3RpdGxlPgotICAKLSAgPGF1dGhvcmdyb3VwPgotICAgPGF1dGhvcj4KLSAgICA8Zmlyc3RuYW1lPkFsYW48L2ZpcnN0bmFtZT4KLSAgICA8c3VybmFtZT5Db3g8L3N1cm5hbWU+Ci0gICAgPGFmZmlsaWF0aW9uPgotICAgICA8YWRkcmVzcz4KLSAgICAgIDxlbWFpbD5hbGFuQHJlZGhhdC5jb208L2VtYWlsPgotICAgICA8L2FkZHJlc3M+Ci0gICAgPC9hZmZpbGlhdGlvbj4KLSAgIDwvYXV0aG9yPgotICA8L2F1dGhvcmdyb3VwPgotCi0gIDxjb3B5cmlnaHQ+Ci0gICA8eWVhcj4yMDAwPC95ZWFyPgotICAgPGhvbGRlcj5BbGFuIENveDwvaG9sZGVyPgotICA8L2NvcHlyaWdodD4KLQotICA8bGVnYWxub3RpY2U+Ci0gICA8cGFyYT4KLSAgICAgVGhpcyBkb2N1bWVudGF0aW9uIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCi0gICAgIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKLSAgICAgdmVyc2lvbi4KLSAgIDwvcGFyYT4KLSAgICAgIAotICAgPHBhcmE+Ci0gICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLSAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAotICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gICAgIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgIDwvcGFyYT4KLSAgICAgIAotICAgPHBhcmE+Ci0gICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gICAgIE1BIDAyMTExLTEzMDcgVVNBCi0gICA8L3BhcmE+Ci0gICAgICAKLSAgIDxwYXJhPgotICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBzb3VyY2UKLSAgICAgZGlzdHJpYnV0aW9uIG9mIExpbnV4LgotICAgPC9wYXJhPgotICA8L2xlZ2Fsbm90aWNlPgotIDwvYm9va2luZm8+Ci0KLTx0b2M+PC90b2M+Ci0KLSAgPGNoYXB0ZXIgaWQ9ImludHJvIj4KLSAgICAgIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgotICA8cGFyYT4KLSAgICAgICAgUGFydHMgb2YgdGhpcyBkb2N1bWVudCBmaXJzdCBhcHBlYXJlZCBpbiBMaW51eCBNYWdhemluZSB1bmRlciBhCi0gICAgICAgIG5pbmV0eSBkYXkgZXhjbHVzaXZpdHkuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFZpZGVvNExpbnV4IGlzIGludGVuZGVkIHRvIHByb3ZpZGUgYSBjb21tb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlCi0gICAgICAgIGZvciB0aGUgbWFueSBUViBhbmQgY2FwdHVyZSBjYXJkcyBub3cgb24gdGhlIG1hcmtldCwgYXMgd2VsbCBhcwotICAgICAgICBwYXJhbGxlbCBwb3J0IGFuZCBVU0IgdmlkZW8gY2FtZXJhcy4gUmFkaW8sIHRlbGV0ZXh0IGRlY29kZXJzIGFuZAotICAgICAgICB2ZXJ0aWNhbCBibGFua2luZyBkYXRhIGludGVyZmFjZXMgYXJlIGFsc28gcHJvdmlkZWQuCi0gIDwvcGFyYT4KLSAgPC9jaGFwdGVyPgotICA8Y2hhcHRlciBpZD0icmFkaW8iPgotICAgICAgICA8dGl0bGU+UmFkaW8gRGV2aWNlczwvdGl0bGU+Ci0gIDxwYXJhPgotICAgICAgICBUaGVyZSBhcmUgYSB3aWRlIHZhcmlldHkgb2YgcmFkaW8gaW50ZXJmYWNlcyBhdmFpbGFibGUgZm9yIFBDJ3MsIGFuZCB0aGVzZQotICAgICAgICBhcmUgZ2VuZXJhbGx5IHZlcnkgc2ltcGxlIHRvIHByb2dyYW0uIFRoZSBiaWdnZXN0IHByb2JsZW0gd2l0aCBzdXBwb3J0aW5nCi0gICAgICAgIHN1Y2ggZGV2aWNlcyBpcyBub3JtYWxseSBleHRyYWN0aW5nIGRvY3VtZW50YXRpb24gZnJvbSB0aGUgdmVuZG9yLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgcmFkaW8gaW50ZXJmYWNlIHN1cHBvcnRzIGEgc2ltcGxlIHNldCBvZiBjb250cm9sIGlvY3RscyBzdGFuZGFyZGlzZWQKLSAgICAgICAgYWNyb3NzIGFsbCByYWRpbyBhbmQgdHYgaW50ZXJmYWNlcy4gSXQgZG9lcyBub3Qgc3VwcG9ydCByZWFkIG9yIHdyaXRlLCB3aGljaAotICAgICAgICBhcmUgdXNlZCBmb3IgdmlkZW8gc3RyZWFtcy4gVGhlIHJlYXNvbiByYWRpbyBjYXJkcyBkbyBub3QgYWxsb3cgeW91IHRvIHJlYWQKLSAgICAgICAgdGhlIGF1ZGlvIHN0cmVhbSBpbnRvIGFuIGFwcGxpY2F0aW9uIGlzIHRoYXQgd2l0aG91dCBleGNlcHRpb24gdGhleSBwcm92aWRlCi0gICAgICAgIGEgY29ubmVjdGlvbiBvbiB0byBhIHNvdW5kY2FyZC4gU291bmRjYXJkcyBjYW4gYmUgdXNlZCB0byByZWFkIHRoZSByYWRpbwotICAgICAgICBkYXRhIGp1c3QgZmluZS4gCi0gIDwvcGFyYT4KLSAgPHNlY3QxIGlkPSJyZWdpc3RlcnJhZGlvIj4KLSAgPHRpdGxlPlJlZ2lzdGVyaW5nIFJhZGlvIERldmljZXM8L3RpdGxlPgotICA8cGFyYT4KLSAgICAgICAgVGhlIFZpZGVvNGxpbnV4IGNvcmUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciByZWdpc3RlcmluZyBkZXZpY2VzLiBUaGUKLSAgICAgICAgZmlyc3Qgc3RlcCBpbiB3cml0aW5nIG91ciByYWRpbyBjYXJkIGRyaXZlciBpcyB0byByZWdpc3RlciBpdC4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgbXlfcmFkaW8KLXsKLSAgICAgICAgIk15IHJhZGlvIiwKLSAgICAgICAgVklEX1RZUEVfVFVORVIsCi0gICAgICAgIHJhZGlvX29wZW4uCi0gICAgICAgIHJhZGlvX2Nsb3NlLAotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAvKiBubyByZWFkICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAvKiBubyB3cml0ZSAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAvKiBubyBwb2xsICovCi0gICAgICAgIHJhZGlvX2lvY3RsLAotICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAvKiBubyBzcGVjaWFsIGluaXQgZnVuY3Rpb24gKi8KLSAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAvKiBubyBwcml2YXRlIGRhdGEgKi8KLX07Ci0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhpcyBkZWNsYXJlcyBvdXIgdmlkZW80bGludXggZGV2aWNlIGRyaXZlciBpbnRlcmZhY2UuIFRoZSBWSURfVFlQRV8gdmFsdWUKLSAgICAgICAgZGVmaW5lcyB3aGF0IGtpbmQgb2YgYW4gaW50ZXJmYWNlIHdlIGFyZSwgYW5kIGRlZmluZXMgYmFzaWMgY2FwYWJpbGl0aWVzLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgb25seSBkZWZpbmVkIHZhbHVlIHJlbGV2YW50IGZvciBhIHJhZGlvIGNhcmQgaXMgVklEX1RZUEVfVFVORVIgd2hpY2gKLSAgICAgICAgaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSBjYW4gYmUgdHVuZWQuIENsZWFybHkgb3VyIHJhZGlvIGlzIGdvaW5nIHRvIGhhdmUgc29tZQotICAgICAgICB3YXkgdG8gY2hhbmdlIGNoYW5uZWwgc28gaXQgaXMgdHVuZWFibGUuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIGRlY2xhcmUgYW4gb3BlbiBhbmQgY2xvc2Ugcm91dGluZSwgYnV0IHdlIGRvIG5vdCBuZWVkIHJlYWQgb3Igd3JpdGUsCi0gICAgICAgIHdoaWNoIGFyZSB1c2VkIHRvIHJlYWQgYW5kIHdyaXRlIHZpZGVvIGRhdGEgdG8gb3IgZnJvbSB0aGUgY2FyZCBpdHNlbGYuIEFzCi0gICAgICAgIHdlIGhhdmUgbm8gcmVhZCBvciB3cml0ZSB0aGVyZSBpcyBubyBwb2xsIGZ1bmN0aW9uLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgcHJpdmF0ZSBpbml0aWFsaXNlIGZ1bmN0aW9uIGlzIHJ1biB3aGVuIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4gSW4KLSAgICAgICAgdGhpcyBkcml2ZXIgd2UndmUgYWxyZWFkeSBkb25lIGFsbCB0aGUgd29yayBuZWVkZWQuIFRoZSBmaW5hbCBwb2ludGVyIGlzIGEKLSAgICAgICAgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgZGV2aWNlIGRyaXZlciB0byBhdHRhY2ggYW5kCi0gICAgICAgIHJldHJpZXZlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzLiBXZSBzZXQgdGhpcyBmaWVsZCAicHJpdiIgdG8gTlVMTCBmb3IKLSAgICAgICAgdGhlIG1vbWVudC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgSGF2aW5nIHRoZSBzdHJ1Y3R1cmUgZGVmaW5lZCBpcyBhbGwgdmVyeSB3ZWxsIGJ1dCB3ZSBub3cgbmVlZCB0byByZWdpc3RlciBpdAotICAgICAgICB3aXRoIHRoZSBrZXJuZWwuIAotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi1zdGF0aWMgaW50IGlvID0gMHgzMjA7Ci0KLWludCBfX2luaXQgbXlyYWRpb19pbml0KHN0cnVjdCB2aWRlb19pbml0ICp2KQotewotICAgICAgICBpZighcmVxdWVzdF9yZWdpb24oaW8sIE1ZX0lPX1NJWkUsICJteXJhZGlvIikpCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgCi0gICAgICAgICAgICAgICAgICAgICJteXJhZGlvOiBwb3J0IDB4JTAzWCBpcyBpbiB1c2UuXG4iLCBpbyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmKHZpZGVvX2RldmljZV9yZWdpc3RlcigmYW1wO215X3JhZGlvLCBWRkxfVFlQRV9SQURJTyk9PS0xKSB7Ci0gICAgICAgICAgICAgICAgcmVsZWFzZV9yZWdpb24oaW8sIE1ZX0lPX1NJWkUpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9CQkKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBmaXJzdCBzdGFnZSBvZiB0aGUgaW5pdGlhbGlzYXRpb24sIGFzIGlzIG5vcm1hbGx5IHRoZSBjYXNlLCBpcyB0byBjaGVjayAKLSAgICAgICAgdGhhdCB0aGUgSS9PIHNwYWNlIHdlIGFyZSBhYm91dCB0byBmaWRkbGUgd2l0aCBkb2Vzbid0IGJlbG9uZyB0byBzb21lIG90aGVyIAotICAgICAgICBkcml2ZXIuIElmIGl0IGlzIHdlIGxlYXZlIHdlbGwgYWxvbmUuIElmIHRoZSB1c2VyIGdpdmVzIHRoZSBhZGRyZXNzIG9mIHRoZSAKLSAgICAgICAgd3JvbmcgZGV2aWNlIHRoZW4gd2Ugd2lsbCBzcG90IHRoaXMuIFRoZXNlIHBvbGljaWVzIHdpbGwgZ2VuZXJhbGx5IGF2b2lkIAotICAgICAgICBjcmFzaGluZyB0aGUgbWFjaGluZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgTm93IHdlIGFzayB0aGUgVmlkZW80TGludXggbGF5ZXIgdG8gcmVnaXN0ZXIgdGhlIGRldmljZSBmb3IgdXMuIFdlIGhhbmQgaXQKLSAgICAgICAgb3VyIGNhcmVmdWxseSBkZXNpZ25lZCB2aWRlb19kZXZpY2Ugc3RydWN0dXJlIGFuZCBhbHNvIHRlbGwgaXQgd2hpY2ggZ3JvdXAKLSAgICAgICAgb2YgZGV2aWNlcyB3ZSB3YW50IGl0IHJlZ2lzdGVyZWQgd2l0aC4gSW4gdGhpcyBjYXNlIFZGTF9UWVBFX1JBRElPLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgdHlwZXMgYXZhaWxhYmxlIGFyZQotICA8L3BhcmE+Ci0gICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9IkRldmljZV9UeXBlcyI+PHRpdGxlPkRldmljZSBUeXBlczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjMiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICAgICAgIDxlbnRyeT5WRkxfVFlQRV9SQURJTzwvZW50cnk+PGVudHJ5Pi9kZXYvcmFkaW97bn08L2VudHJ5PjxlbnRyeT4KLQotICAgICAgICBSYWRpbyBkZXZpY2VzIGFyZSBhc3NpZ25lZCBpbiB0aGlzIGJsb2NrLiBBcyB3aXRoIGFsbCBvZiB0aGVzZQotICAgICAgICBzZWxlY3Rpb25zIHRoZSBhY3R1YWwgbnVtYmVyIGFzc2lnbm1lbnQgaXMgZG9uZSBieSB0aGUgdmlkZW8gbGF5ZXIKLSAgICAgICAgYWNjb3JkaWpuZyB0byB3aGF0IGlzIGZyZWUuPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+VkZMX1RZUEVfR1JBQkJFUjwvZW50cnk+PGVudHJ5Pi9kZXYvdmlkZW97bn08L2VudHJ5PjxlbnRyeT4KLSAgICAgICAgVmlkZW8gY2FwdHVyZSBkZXZpY2VzIGFuZCBhbHNvIC0tIGNvdW50ZXItaW50dWl0aXZlbHkgZm9yIHRoZSBuYW1lIC0tCi0gICAgICAgIGhhcmR3YXJlIHZpZGVvIHBsYXliYWNrIGRldmljZXMgc3VjaCBhcyBNUEVHMiBjYXJkcy48L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WRkxfVFlQRV9WQkk8L2VudHJ5PjxlbnRyeT4vZGV2L3ZiaXtufTwvZW50cnk+PGVudHJ5PgotICAgICAgICBUaGUgVkJJIGRldmljZXMgY2FwdHVyZSB0aGUgaGlkZGVuIGxpbmVzIG9uIGEgdGVsZXZpc2lvbiBwaWN0dXJlCi0gICAgICAgIHRoYXQgY2FycnkgZnVydGhlciBpbmZvcm1hdGlvbiBsaWtlIGNsb3NlZCBjYXB0aW9uIGRhdGEsIHRlbGV0ZXh0Ci0gICAgICAgIChwcmltYXJpbHkgaW4gRXVyb3BlKSBhbmQgbm93IEludGVyY2FzdCBhbmQgdGhlIEFUVkVDIGludGVybmV0Ci0gICAgICAgIHRlbGV2aXNpb24gZW5jb2RpbmdzLjwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZGTF9UWVBFX1ZUWDwvZW50cnk+PGVudHJ5Pi9kZXYvdnR4W259PC9lbnRyeT48ZW50cnk+Ci0gICAgICAgIFZUWCBpcyAnVmlkZW90ZXh0JyBhbHNvIGtub3duIGFzICdUZWxldGV4dCcuIFRoaXMgaXMgYSBzeXN0ZW0gZm9yCi0gICAgICAgIHNlbmRpbmcgbnVtYmVyZWQsIDQweDI1LCBtb3N0bHkgdGV4dHVhbCBwYWdlIGltYWdlcyBvdmVyIHRoZSBoaWRkZW4KLSAgICAgICAgbGluZXMuIFVubGlrZSB0aGUgL2Rldi92YmkgaW50ZXJmYWNlcywgdGhpcyBpcyBmb3IgJ3NtYXJ0JyBkZWNvZGVyIAotICAgICAgICBjaGlwcy4gKFRoZSB1c2Ugb2YgdGhlIHdvcmQgc21hcnQgaGVyZSBoYXMgdG8gYmUgdGFrZW4gaW4gY29udGV4dCwKLSAgICAgICAgdGhlIHNtYXJ0ZXN0IHRlbGV0ZXh0IGNoaXBzIGFyZSBmYWlybHkgZHVtYiBwaWVjZXMgb2YgdGVjaG5vbG9neSkuCi0JPC9lbnRyeT4KLSAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0gIDxwYXJhPgotICAgICAgICBXZSBhcmUgbW9zdCBkZWZpbml0ZWx5IGEgcmFkaW8uCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIEZpbmFsbHkgd2UgYWxsb2NhdGUgb3VyIEkvTyBzcGFjZSBzbyB0aGF0IG5vYm9keSB0cmVhZHMgb24gdXMgYW5kIHJldHVybiAwCi0gICAgICAgIHRvIHNpZ25pZnkgZ2VuZXJhbCBoYXBwaW5lc3Mgd2l0aCB0aGUgc3RhdGUgb2YgdGhlIHVuaXZlcnNlLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0ib3BlbnJhZGlvIj4KLSAgPHRpdGxlPk9wZW5pbmcgQW5kIENsb3NpbmcgVGhlIFJhZGlvPC90aXRsZT4KLQotICA8cGFyYT4KLSAgICAgICAgVGhlIGZ1bmN0aW9ucyB3ZSBkZWNsYXJlZCBpbiBvdXIgdmlkZW9fZGV2aWNlIGFyZSBtb3N0bHkgdmVyeSBzaW1wbGUuCi0gICAgICAgIEZpcnN0bHkgd2UgY2FuIGRyb3AgaW4gd2hhdCBpcyBiYXNpY2FsbHkgc3RhbmRhcmQgY29kZSBmb3Igb3BlbiBhbmQgY2xvc2UuIAotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi1zdGF0aWMgaW50IHVzZXJzID0gMDsKLQotc3RhdGljIGludCByYWRpb19vcGVuKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgaW50IGZsYWdzKQotewotICAgICAgICBpZih1c2VycykKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICB1c2VycysrOwotICAgICAgICByZXR1cm4gMDsKLX0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgQXQgb3BlbiB0aW1lIHdlIG5lZWQgdG8gZG8gbm90aGluZyBidXQgY2hlY2sgaWYgc29tZW9uZSBlbHNlIGlzIGFsc28gdXNpbmcKLSAgICAgICAgdGhlIHJhZGlvIGNhcmQuIElmIG5vYm9keSBpcyB1c2luZyBpdCB3ZSBtYWtlIGEgbm90ZSB0aGF0IHdlIGFyZSB1c2luZyBpdCwKLSAgICAgICAgdGhlbiB3ZSBlbnN1cmUgdGhhdCBub2JvZHkgdW5sb2FkcyBvdXIgZHJpdmVyIG9uIHVzLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi1zdGF0aWMgaW50IHJhZGlvX2Nsb3NlKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldikKLXsKLSAgICAgICAgdXNlcnMtLTsKLX0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgQXQgY2xvc2UgdGltZSB3ZSBzaW1wbHkgbmVlZCB0byByZWR1Y2UgdGhlIHVzZXIgY291bnQgYW5kIGFsbG93IHRoZSBtb2R1bGUKLSAgICAgICAgdG8gYmVjb21lIHVubG9hZGFibGUuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIElmIHlvdSBhcmUgc2hhcnAgeW91IHdpbGwgaGF2ZSBub3RpY2VkIG5laXRoZXIgdGhlIG9wZW4gbm9yIHRoZSBjbG9zZQotICAgICAgICByb3V0aW5lcyBhdHRlbXB0IHRvIHJlc2V0IG9yIGNoYW5nZSB0aGUgcmFkaW8gc2V0dGluZ3MuIFRoaXMgaXMgaW50ZW50aW9uYWwuCi0gICAgICAgIEl0IGFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBzZXQgdXAgdGhlIHJhZGlvIGFuZCBleGl0LiBJdCBhdm9pZHMgYSB1c2VyCi0gICAgICAgIGhhdmluZyB0byBsZWF2ZSBhbiBhcHBsaWNhdGlvbiBydW5uaW5nIGFsbCB0aGUgdGltZSBqdXN0IHRvIGxpc3RlbiB0byB0aGUKLSAgICAgICAgcmFkaW8uIAotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0iaW9jdGxyYWRpbyI+Ci0gIDx0aXRsZT5UaGUgSW9jdGwgSW50ZXJmYWNlPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoaXMgbGVhdmVzIHRoZSBpb2N0bCByb3V0aW5lLCB3aXRob3V0IHdoaWNoIHRoZSBkcml2ZXIgd2lsbCBub3QgYmUKLSAgICAgICAgdGVycmlibHkgdXNlZnVsIHRvIGFueW9uZS4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotc3RhdGljIGludCByYWRpb19pb2N0bChzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLSAgICAgICAgc3dpdGNoKGNtZCkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0NBUDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSB2OwotICAgICAgICAgICAgICAgICAgICAgICAgdi50eXBlID0gVklEX1RZUEVfVFVORVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmNoYW5uZWxzID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuYXVkaW9zID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYubWF4d2lkdGggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5taW53aWR0aCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2Lm1heGhlaWdodCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2Lm1pbmhlaWdodCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi5uYW1lLCAiTXkgUmFkaW8iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfdG9fdXNlcihhcmcsICZhbXA7diwgc2l6ZW9mKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFZJRElPQ0dDQVAgaXMgdGhlIGZpcnN0IGlvY3RsIGFsbCB2aWRlbzRsaW51eCBkZXZpY2VzIG11c3Qgc3VwcG9ydC4gSXQKLSAgICAgICAgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbnMgdG8gZmluZCBvdXQgd2hhdCBzb3J0IG9mIGEgY2FyZCB0aGV5IGhhdmUgZm91bmQgYW5kCi0gICAgICAgIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGV5IHdhbnQgdG8gZG8gYWJvdXQgaXQuIFRoZSBmaWVsZHMgaW4gdGhlIHN0cnVjdHVyZSBhcmUKLSAgPC9wYXJhPgotICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ2aWRlb19jYXBhYmlsaXR5X2ZpZWxkcyI+PHRpdGxlPnN0cnVjdCB2aWRlb19jYXBhYmlsaXR5IGZpZWxkczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICAgICAgIDxlbnRyeT5uYW1lPC9lbnRyeT48ZW50cnk+VGhlIGRldmljZSB0ZXh0IG5hbWUuIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHRoZSB1c2VyLjwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PmNoYW5uZWxzPC9lbnRyeT48ZW50cnk+VGhlIG51bWJlciBvZiBkaWZmZXJlbnQgY2hhbm5lbHMgeW91IGNhbiB0dW5lIG9uCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGNhcmQuIEl0IGNvdWxkIGV2ZW4gYnkgemVybyBmb3IgYSBjYXJkIHRoYXQgaGFzCi0gICAgICAgICAgICAgICAgICAgICAgICBubyB0dW5pbmcgY2FwYWJpbGl0eS4gRm9yIG91ciBzaW1wbGUgRk0gcmFkaW8gaXQgaXMgMS4gCi0gICAgICAgICAgICAgICAgICAgICAgICBBbiBBTS9GTSByYWRpbyB3b3VsZCByZXBvcnQgMi48L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5hdWRpb3M8L2VudHJ5PjxlbnRyeT5UaGUgbnVtYmVyIG9mIGF1ZGlvIGlucHV0cyBvbiB0aGlzIGRldmljZS4gRm9yIG91cgotICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW8gdGhlcmUgaXMgb25seSBvbmUgYXVkaW8gaW5wdXQuPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+bWlud2lkdGgsbWluaGVpZ2h0PC9lbnRyeT48ZW50cnk+VGhlIHNtYWxsZXN0IHNpemUgdGhlIGNhcmQgaXMgY2FwYWJsZSBvZiBjYXB0dXJpbmcKLQkJICAgICAgICBpbWFnZXMgaW4uIFdlIHNldCB0aGVzZSB0byB6ZXJvLiBSYWRpb3MgZG8gbm90Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlIHBpY3R1cmVzPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+bWF4d2lkdGgsbWF4aGVpZ2h0PC9lbnRyeT48ZW50cnk+VGhlIGxhcmdlc3QgaW1hZ2Ugc2l6ZSB0aGUgY2FyZCBpcyBjYXBhYmxlIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmluZy4gRm9yIG91ciByYWRpbyB3ZSByZXBvcnQgMC4KLQkJCQk8L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT50eXBlPC9lbnRyeT48ZW50cnk+VGhpcyByZXBvcnRzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGRldmljZSwgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzIHRoZSBmaWVsZCB3ZSBmaWxsZWQgaW4gaW4gdGhlIHN0cnVjdAotICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fZGV2aWNlIHdoZW4gcmVnaXN0ZXJpbmcuPC9lbnRyeT4KLSAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0gIDxwYXJhPgotICAgICAgICBIYXZpbmcgZmlsbGVkIGluIHRoZSBmaWVsZHMsIHdlIHVzZSBjb3B5X3RvX3VzZXIgdG8gY29weSB0aGUgc3RydWN0dXJlIGludG8KLSAgICAgICAgdGhlIHVzZXJzIGJ1ZmZlci4gSWYgdGhlIGNvcHkgZmFpbHMgd2UgcmV0dXJuIGFuIEVGQVVMVCB0byB0aGUgYXBwbGljYXRpb24KLSAgICAgICAgc28gdGhhdCBpdCBrbm93cyBpdCB0cmllZCB0byBmZWVkIHVzIGdhcmJhZ2UuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBuZXh0IHBhaXIgb2YgaW9jdGwgb3BlcmF0aW9ucyBzZWxlY3Qgd2hpY2ggdHVuZXIgaXMgdG8gYmUgdXNlZCBhbmQgbGV0Ci0gICAgICAgIHRoZSBhcHBsaWNhdGlvbiBmaW5kIHRoZSB0dW5lciBwcm9wZXJ0aWVzLiBXZSBoYXZlIG9ubHkgYSBzaW5nbGUgRk0gYmFuZAotICAgICAgICB0dW5lciBpbiBvdXIgZXhhbXBsZSBkZXZpY2UuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dUVU5FUjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fdHVuZXIgdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpIT0wKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYudHVuZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5yYW5nZWxvdz0oODcqMTYwMDApOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5yYW5nZWhpZ2g9KDEwOCoxNjAwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmZsYWdzID0gVklERU9fVFVORVJfTE9XOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5tb2RlID0gVklERU9fTU9ERV9BVVRPOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5zaWduYWwgPSAweEZGRkY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi5uYW1lLCAiRk0iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfdG9fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSE9MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBWSURJT0NHVFVORVIgaW9jdGwgYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBxdWVyeSBhIHR1bmVyLiBUaGUgYXBwbGljYXRpb24KLSAgICAgICAgc2V0cyB0aGUgdHVuZXIgZmllbGQgdG8gdGhlIHR1bmVyIG51bWJlciBpdCB3aXNoZXMgdG8gcXVlcnkuIFRoZSBxdWVyeSBkb2VzCi0gICAgICAgIG5vdCBjaGFuZ2UgdGhlIHR1bmVyIHRoYXQgaXMgYmVpbmcgdXNlZCwgaXQgbWVyZWx5IGVucXVpcmVzIGFib3V0IHRoZSB0dW5lcgotICAgICAgICBpbiBxdWVzdGlvbi4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgV2UgaGF2ZSBleGFjdGx5IG9uZSB0dW5lciBzbyBhZnRlciBjb3B5aW5nIHRoZSB1c2VyIGJ1ZmZlciB0byBvdXIgdGVtcG9yYXJ5Ci0gICAgICAgIHN0cnVjdHVyZSB3ZSBjb21wbGFpbiBpZiB0aGV5IGFza2VkIGZvciBhIHR1bmVyIG90aGVyIHRoYW4gdHVuZXIgMC4gCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSB2aWRlb190dW5lciBzdHJ1Y3R1cmUgaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzCi0gIDwvcGFyYT4KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fdHVuZXJfZmllbGRzIj48dGl0bGU+c3RydWN0IHZpZGVvX3R1bmVyIGZpZWxkczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICAgICAgIDxlbnRyeT5pbnQgdHVuZXI8L2VudHJ5PjxlbnRyeT5UaGUgbnVtYmVyIG9mIHRoZSB0dW5lciBpbiBxdWVzdGlvbjwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+Y2hhciBuYW1lWzMyXTwvZW50cnk+PGVudHJ5PkEgdGV4dCBkZXNjcmlwdGlvbiBvZiB0aGlzIHR1bmVyLiAiRk0iIHdpbGwgZG8gZmluZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHRoZSBhcHBsaWNhdGlvbi48L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PnUzMiBmbGFnczwvZW50cnk+Ci0gICAgICAgIDxlbnRyeT5UdW5lciBjYXBhYmlsaXR5IGZsYWdzPC9lbnRyeT4KLSAgIDwvcm93PgotICAgPHJvdz4KLSAgICAgICAgPGVudHJ5PnUxNiBtb2RlPC9lbnRyeT48ZW50cnk+VGhlIGN1cnJlbnQgcmVjZXB0aW9uIG1vZGU8L2VudHJ5PgotCi0gICA8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+dTE2IHNpZ25hbDwvZW50cnk+PGVudHJ5PlRoZSBzaWduYWwgc3RyZW5ndGggc2NhbGVkIGJldHdlZW4gMCBhbmQgNjU1MzUuIElmCi0gICAgICAgICAgICAgICAgICAgICAgICBhIGRldmljZSBjYW5ub3QgdGVsbCB0aGUgc2lnbmFsIHN0cmVuZ3RoIGl0IHNob3VsZAotICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0IDY1NTM1LiBNYW55IHNpbXBsZSBjYXJkcyBjb250YWluIG9ubHkgYSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbC9ubyBzaWduYWwgYml0LiBTdWNoIGNhcmRzIHdpbGwgcmVwb3J0IGVpdGhlcgotICAgICAgICAgICAgICAgICAgICAgICAgMCBvciA2NTUzNS48L2VudHJ5PgotCi0gICA8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+dTMyIHJhbmdlbG93LCByYW5nZWhpZ2g8L2VudHJ5PjxlbnRyeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByYW5nZSBvZiBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgdGhlIHJhZGlvCi0gICAgICAgICAgICAgICAgICAgICAgICBvciBUVi4gSXQgaXMgc2NhbGVkIGFjY29yZGluZyB0byB0aGUgVklERU9fVFVORVJfTE9XCi0gICAgICAgICAgICAgICAgICAgICAgICBmbGFnLjwvZW50cnk+Ci0KLSAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fdHVuZXJfZmxhZ3MiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fdHVuZXIgZmxhZ3M8L3RpdGxlPgotICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICA8dGJvZHk+Ci0gICA8cm93PgotCTxlbnRyeT5WSURFT19UVU5FUl9QQUw8L2VudHJ5PjxlbnRyeT5BIFBBTCBUViB0dW5lcjwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX1RVTkVSX05UU0M8L2VudHJ5PjxlbnRyeT5BbiBOVFNDIChVUykgVFYgdHVuZXI8L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19UVU5FUl9TRUNBTTwvZW50cnk+PGVudHJ5PkEgU0VDQU0gKEZyZW5jaCkgVFYgdHVuZXI8L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19UVU5FUl9MT1c8L2VudHJ5PjxlbnRyeT4KLSAgICAgICAgICAgICBUaGUgdHVuZXIgZnJlcXVlbmN5IGlzIHNjYWxlZCBpbiAxLzE2dGggb2YgYSBLSHoKLSAgICAgICAgICAgICBzdGVwcy4gSWYgbm90IGl0IGlzIGluIDEvMTZ0aCBvZiBhIE1IeiBzdGVwcwotCTwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX1RVTkVSX05PUk08L2VudHJ5PjxlbnRyeT5UaGUgdHVuZXIgY2FuIHNldCBpdHMgZm9ybWF0PC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+VklERU9fVFVORVJfU1RFUkVPX09OPC9lbnRyeT48ZW50cnk+VGhlIHR1bmVyIGlzIGN1cnJlbnRseSByZWNlaXZpbmcgYSBzdGVyZW8gc2lnbmFsPC9lbnRyeT4KLSAgICAgICAgPC9yb3c+Ci0gICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotCi0gICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InZpZGVvX3R1bmVyX21vZGVzIj48dGl0bGU+c3RydWN0IHZpZGVvX3R1bmVyIG1vZGVzPC90aXRsZT4KLSAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgPHRib2R5PgotICAgPHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9QQUw8L2VudHJ5PjxlbnRyeT5QQUwgRm9ybWF0PC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX01PREVfTlRTQzwvZW50cnk+PGVudHJ5Pk5UU0MgRm9ybWF0IChVU0EpPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX01PREVfU0VDQU08L2VudHJ5PjxlbnRyeT5GcmVuY2ggRm9ybWF0PC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX01PREVfQVVUTzwvZW50cnk+PGVudHJ5PkEgZGV2aWNlIHRoYXQgZG9lcyBub3QgbmVlZCB0byBkbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWIGZvcm1hdCBzd2l0Y2hpbmc8L2VudHJ5PgotICAgPC9yb3c+Ci0gICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotICA8cGFyYT4KLSAgICAgICAgVGhlIHNldHRpbmdzIGZvciB0aGUgcmFkaW8gY2FyZCBhcmUgdGh1cyBmYWlybHkgc2ltcGxlLiBXZSByZXBvcnQgdGhhdCB3ZQotICAgICAgICBhcmUgYSB0dW5lciBjYWxsZWQgIkZNIiBmb3IgRk0gcmFkaW8uIEluIG9yZGVyIHRvIGdldCB0aGUgYmVzdCB0dW5pbmcKLSAgICAgICAgcmVzb2x1dGlvbiB3ZSByZXBvcnQgVklERU9fVFVORVJfTE9XIGFuZCBzZWxlY3QgdHVuaW5nIHRvIDEvMTZ0aCBvZiBLSHouIEl0cwotICAgICAgICB1bmxpa2VseSBvdXIgY2FyZCBjYW4gZG8gdGhhdCByZXNvbHV0aW9uIGJ1dCBpdCBpcyBhIGZhaXIgYmV0IHRoZSBjYXJkIGNhbgotICAgICAgICBkbyBiZXR0ZXIgdGhhbiAxLzE2dGggb2YgYSBNSHouIFZJREVPX1RVTkVSX0xPVyBpcyBhcHByb3ByaWF0ZSB0byBhbG1vc3QgYWxsCi0gICAgICAgIHJhZGlvIHVzYWdlLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBXZSByZXBvcnQgdGhhdCB0aGUgdHVuZXIgYXV0b21hdGljYWxseSBoYW5kbGVzIGRlY2lkaW5nIHdoYXQgZm9ybWF0IGl0IGlzCi0gICAgICAgIHJlY2VpdmluZyAtIHRydWUgZW5vdWdoIGFzIGl0IG9ubHkgaGFuZGxlcyBGTSByYWRpby4gT3VyIGV4YW1wbGUgY2FyZCBpcwotICAgICAgICBhbHNvIGluY2FwYWJsZSBvZiBkZXRlY3Rpbmcgc3RlcmVvIG9yIHNpZ25hbCBzdHJlbmd0aHMgc28gaXQgcmVwb3J0cyBhCi0gICAgICAgIHN0cmVuZ3RoIG9mIDB4RkZGRiAobWF4aW11bSkgYW5kIG5vIHN0ZXJlbyBkZXRlY3RlZC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVG8gZmluaXNoIG9mZiB3ZSBzZXQgdGhlIHJhbmdlIHRoYXQgY2FuIGJlIHR1bmVkIHRvIGJlIDg3LTEwOE1oeiwgdGhlIG5vcm1hbAotICAgICAgICBGTSBicm9hZGNhc3QgcmFkaW8gcmFuZ2UuIEl0IGlzIGltcG9ydGFudCB0byBmaW5kIG91dCB3aGF0IHRoZSBjYXJkIGlzCi0gICAgICAgIGFjdHVhbGx5IGNhcGFibGUgb2YgdHVuaW5nLiBJdCBpcyBlYXN5IGVub3VnaCB0byBzaW1wbHkgdXNlIHRoZSBGTSBicm9hZGNhc3QKLSAgICAgICAgcmFuZ2UuIFVuZm9ydHVuYXRlbHkgaWYgeW91IGRvIHRoaXMgeW91IHdpbGwgZGlzY292ZXIgdGhlIEZNIGJyb2FkY2FzdAotICAgICAgICByYW5nZXMgaW4gdGhlIFVTQSwgRXVyb3BlIGFuZCBKYXBhbiBhcmUgYWxsIHN1YnRseSBkaWZmZXJlbnQgYW5kIHNvbWUgdXNlcnMKLSAgICAgICAgY2Fubm90IHJlY2VpdmUgYWxsIHRoZSBzdGF0aW9ucyB0aGV5IHdpc2guCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBhcHBsaWNhdGlvbiBhbHNvIG5lZWRzIHRvIGJlIGFibGUgdG8gc2V0IHRoZSB0dW5lciBpdCB3aXNoZXMgdG8gdXNlLiBJbgotICAgICAgICBvdXIgY2FzZSwgd2l0aCBhIHNpbmdsZSB0dW5lciB0aGlzIGlzIHJhdGhlciBzaW1wbGUgdG8gYXJyYW5nZS4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NUVU5FUjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fdHVuZXIgdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYudHVuZXIgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIGNvcHkgdGhlIHVzZXIgc3VwcGxpZWQgc3RydWN0dXJlIGludG8ga2VybmVsIG1lbW9yeSBzbyB3ZSBjYW4gZXhhbWluZSBpdC4gCi0gICAgICAgIElmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhIHR1bmVyIG90aGVyIHRoYW4gemVybyB3ZSByZWplY3QgdGhlIHJlcXVlc3QuIElmIAotICAgICAgICB0aGV5IHdhbnRlZCB0dW5lciAwIHRoZW4sIHN1cnByaXNpbmdseSBlbm91Z2gsIHRoYXQgaXMgdGhlIGN1cnJlbnQgdHVuZXIgYWxyZWFkeS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIG5leHQgdHdvIGlvY3RscyB3ZSBuZWVkIHRvIHByb3ZpZGUgYXJlIHRvIGdldCBhbmQgc2V0IHRoZSBmcmVxdWVuY3kgb2YKLSAgICAgICAgdGhlIHJhZGlvLiBUaGVzZSBib3RoIHVzZSBhbiB1bnNpZ25lZCBsb25nIGFyZ3VtZW50IHdoaWNoIGlzIHRoZSBmcmVxdWVuY3kuCi0gICAgICAgIFRoZSBzY2FsZSBvZiB0aGUgZnJlcXVlbmN5IGRlcGVuZHMgb24gdGhlIFZJREVPX1RVTkVSX0xPVyBmbGFnIGFzIEkKLSAgICAgICAgbWVudGlvbmVkIGVhcmxpZXIgb24uIFNpbmNlIHdlIGhhdmUgVklERU9fVFVORVJfTE9XIHNldCB0aGlzIHdpbGwgYmUgaW4KLSAgICAgICAgMS8xNnRocyBvZiBhIEtIei4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGN1cnJlbnRfZnJlcTsKLQotCi0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dGUkVROgotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZywgJmFtcDtjdXJyZW50X2ZyZXEsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFF1ZXJ5aW5nIHRoZSBmcmVxdWVuY3kgaW4gb3VyIGNhc2UgaXMgcmVsYXRpdmVseSBzaW1wbGUuIE91ciByYWRpbyBjYXJkIGlzCi0gICAgICAgIHRvbyBkdW1iIHRvIGxldCB1cyBxdWVyeSB0aGUgc2lnbmFsIHN0cmVuZ3RoIHNvIHdlIHJlbWVtYmVyIG91ciBzZXR0aW5nIGlmIAotICAgICAgICB3ZSBrbm93IGl0LiBBbGwgd2UgaGF2ZSB0byBkbyBpcyBjb3B5IGl0IHRvIHRoZSB1c2VyLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTRlJFUToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1MzIgZnJlcTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKGFyZywgJmFtcDtmcmVxLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSE9MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihoYXJkd2FyZV9zZXRfZnJlcShmcmVxKSZsdDswKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZnJlcSA9IGZyZXE7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFNldHRpbmcgdGhlIGZyZXF1ZW5jeSBpcyBhIGxpdHRsZSBtb3JlIGNvbXBsZXguIFdlIGJlZ2luIGJ5IGNvcHlpbmcgdGhlCi0gICAgICAgIGRlc2lyZWQgZnJlcXVlbmN5IGludG8ga2VybmVsIHNwYWNlLiBOZXh0IHdlIGNhbGwgYSBoYXJkd2FyZSBzcGVjaWZpYyByb3V0aW5lCi0gICAgICAgIHRvIHNldCB0aGUgcmFkaW8gdXAuIFRoaXMgbWlnaHQgYmUgYXMgc2ltcGxlIGFzIHNvbWUgc2NhbGluZyBhbmQgYSBmZXcKLSAgICAgICAgd3JpdGVzIHRvIGFuIEkvTyBwb3J0LiBGb3IgbW9zdCByYWRpbyBjYXJkcyBpdCB0dXJucyBvdXQgYSBnb29kIGRlYWwgbW9yZQotICAgICAgICBjb21wbGljYXRlZCBhbmQgbWF5IGludm9sdmUgcHJvZ3JhbW1pbmcgdGhpbmdzIGxpa2UgYSBwaGFzZSBsb2NrZWQgbG9vcCBvbgotICAgICAgICB0aGUgY2FyZC4gVGhpcyBpcyB3aGF0IGRvY3VtZW50YXRpb24gaXMgZm9yLiAKLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGZpbmFsIHNldCBvZiBvcGVyYXRpb25zIHdlIG5lZWQgdG8gcHJvdmlkZSBmb3Igb3VyIHJhZGlvIGFyZSB0aGUgCi0gICAgICAgIHZvbHVtZSBjb250cm9scy4gTm90IGFsbCByYWRpbyBjYXJkcyBjYW4gZXZlbiBkbyB2b2x1bWUgY29udHJvbC4gQWZ0ZXIgYWxsCi0gICAgICAgIHRoZXJlIGlzIGEgcGVyZmVjdGx5IGdvb2Qgdm9sdW1lIGNvbnRyb2wgb24gdGhlIHNvdW5kIGNhcmQuIFdlIHdpbGwgYXNzdW1lCi0gICAgICAgIG91ciByYWRpbyBjYXJkIGhhcyBhIHNpbXBsZSA0IHN0ZXAgdm9sdW1lIGNvbnRyb2wuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZXJlIGFyZSB0d28gaW9jdGxzIHdpdGggYXVkaW8gd2UgbmVlZCB0byBzdXBwb3J0Ci0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi1zdGF0aWMgaW50IGN1cnJlbnRfdm9sdW1lPTA7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dBVURJTzoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYuYXVkaW8gIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LnZvbHVtZSA9IDE2Mzg0KmN1cnJlbnRfdm9sdW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5zdGVwID0gMTYzODQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi5uYW1lLCAiUmFkaW8iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYubW9kZSA9IFZJREVPX1NPVU5EX01PTk87Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmJhbGFuY2UgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5iYXNlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYudHJlYmxlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZy4gJmFtcDt2LCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgTXVjaCBsaWtlIHRoZSB0dW5lciB3ZSBzdGFydCBieSBjb3B5aW5nIHRoZSB1c2VyIHN0cnVjdHVyZSBpbnRvIGtlcm5lbAotICAgICAgICBzcGFjZS4gQWdhaW4gd2UgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIGFza2VkIGZvciBhIHZhbGlkIGF1ZGlvIGlucHV0LiBXZSBoYXZlCi0gICAgICAgIG9ubHkgaW5wdXQgMCBhbmQgd2UgcHVudCBpZiB0aGV5IGFzayBmb3IgYW5vdGhlciBpbnB1dC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlbiB3ZSBmaWxsIGluIHRoZSB2aWRlb19hdWRpbyBzdHJ1Y3R1cmUuIFRoaXMgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0Ci0gIDwvcGFyYT4KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fYXVkaW9fZmllbGRzIj48dGl0bGU+c3RydWN0IHZpZGVvX2F1ZGlvIGZpZWxkczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICA8ZW50cnk+YXVkaW88L2VudHJ5PjxlbnRyeT5UaGUgaW5wdXQgdGhlIHVzZXIgd2lzaGVzIHRvIHF1ZXJ5PC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+dm9sdW1lPC9lbnRyeT48ZW50cnk+VGhlIHZvbHVtZSBzZXR0aW5nIG9uIGEgc2NhbGUgb2YgMC02NTUzNTwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgPGVudHJ5PmJhc2U8L2VudHJ5PjxlbnRyeT5UaGUgYmFzZSBsZXZlbCBvbiBhIHNjYWxlIG9mIDAtNjU1MzU8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgIDxlbnRyeT50cmVibGU8L2VudHJ5PjxlbnRyeT5UaGUgdHJlYmxlIGxldmVsIG9uIGEgc2NhbGUgb2YgMC02NTUzNTwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgPGVudHJ5PmZsYWdzPC9lbnRyeT48ZW50cnk+VGhlIGZlYXR1cmVzIHRoaXMgYXVkaW8gZGV2aWNlIHN1cHBvcnRzCi0gICA8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgIDxlbnRyeT5uYW1lPC9lbnRyeT48ZW50cnk+QSB0ZXh0IG5hbWUgdG8gZGlzcGxheSB0byB0aGUgdXNlci4gV2UgcGlja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAiUmFkaW8iIGFzIGl0IGV4cGxhaW5zIHRoaW5ncyBxdWl0ZSBuaWNlbHkuPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+bW9kZTwvZW50cnk+PGVudHJ5PlRoZSBjdXJyZW50IHJlY2VwdGlvbiBtb2RlIGZvciB0aGUgYXVkaW8KLQotICAgICAgICAgICAgICAgIFdlIHJlcG9ydCBNT05PIGJlY2F1c2Ugb3VyIGNhcmQgaXMgdG9vIHN0dXBpZCB0byBrbm93IGlmIGl0IGlzIGluCi0gICAgICAgICAgICAgICAgbW9ubyBvciBzdGVyZW8uIAotICAgPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+YmFsYW5jZTwvZW50cnk+PGVudHJ5PlRoZSBzdGVyZW8gYmFsYW5jZSBvbiBhIHNjYWxlIG9mIDAtNjU1MzUsIDMyNzY4IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICBtaWRkbGUuPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+c3RlcDwvZW50cnk+PGVudHJ5PlRoZSBzdGVwIGJ5IHdoaWNoIHRoZSB2b2x1bWUgY29udHJvbCBqdW1wcy4gVGhpcyBpcwotICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBoZWxwIG1ha2UgaXQgZWFzeSBmb3IgYXBwbGljYXRpb25zIHRvIHNldCAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlciBiZWhhdmlvdXIuPC9lbnRyeT4KLSAgIDwvcm93PgotICAgPC90Ym9keT4KLSAgIDwvdGdyb3VwPgotICAgPC90YWJsZT4KLQotICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ2aWRlb19hdWRpb19mbGFncyI+PHRpdGxlPnN0cnVjdCB2aWRlb19hdWRpbyBmbGFnczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX0FVRElPX01VVEU8L2VudHJ5PjxlbnRyeT5UaGUgYXVkaW8gaXMgY3VycmVudGx5IG11dGVkLiBXZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdWxkIGZha2UgdGhpcyBpbiBvdXIgZHJpdmVyIGJ1dCB3ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob29zZSBub3QgdG8gYm90aGVyLjwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19BVURJT19NVVRBQkxFPC9lbnRyeT48ZW50cnk+VGhlIGlucHV0IGhhcyBhIG11dGUgb3B0aW9uPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX0FVRElPX1RSRUJMRTwvZW50cnk+PGVudHJ5PlRoZSAgaW5wdXQgaGFzIGEgdHJlYmxlIGNvbnRyb2w8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fQVVESU9fQkFTUzwvZW50cnk+PGVudHJ5PlRoZSBpbnB1dCBoYXMgYSBiYXNlIGNvbnRyb2w8L2VudHJ5PgotICAgPC9yb3c+Ci0gICA8L3Rib2R5PgotICAgPC90Z3JvdXA+Ci0gICA8L3RhYmxlPgotCi0gICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InZpZGVvX2F1ZGlvX21vZGVzIj48dGl0bGU+c3RydWN0IHZpZGVvX2F1ZGlvIG1vZGVzPC90aXRsZT4KLSAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgPHRib2R5PgotICAgPHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fU09VTkRfTU9OTzwvZW50cnk+PGVudHJ5Pk1vbm8gc291bmQ8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fU09VTkRfU1RFUkVPPC9lbnRyeT48ZW50cnk+U3RlcmVvIHNvdW5kPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX1NPVU5EX0xBTkcxPC9lbnRyeT48ZW50cnk+QWx0ZXJuYXRpdmUgbGFuZ3VhZ2UgMSAoVFYgc3BlY2lmaWMpPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX1NPVU5EX0xBTkcyPC9lbnRyeT48ZW50cnk+QWx0ZXJuYXRpdmUgbGFuZ3VhZ2UgMiAoVFYgc3BlY2lmaWMpPC9lbnRyeT4KLSAgIDwvcm93PgotICAgPC90Ym9keT4KLSAgIDwvdGdyb3VwPgotICAgPC90YWJsZT4KLSAgPHBhcmE+Ci0gICAgICAgIEhhdmluZyBmaWxsZWQgaW4gdGhlIHN0cnVjdHVyZSB3ZSBjb3B5IGl0IGJhY2sgdG8gdXNlciBzcGFjZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIFZJRElPQ1NBVURJTyBpb2N0bCBhbGxvd3MgdGhlIHVzZXIgdG8gc2V0IHRoZSBhdWRpbyBwYXJhbWV0ZXJzIGluIHRoZQotICAgICAgICB2aWRlb19hdWRpbyBzdHJ1Y3R1cmUuIFRoZSBkcml2ZXIgZG9lcyBpdHMgYmVzdCB0byBob25vdXIgdGhlIHJlcXVlc3QuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTQVVESU86Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX2F1ZGlvIHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2LmF1ZGlvKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdm9sdW1lID0gdi8xNjM4NDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3NldF92b2x1bWUoY3VycmVudF92b2x1bWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBJbiBvdXIgY2FzZSB0aGVyZSBpcyB2ZXJ5IGxpdHRsZSB0aGF0IHRoZSB1c2VyIGNhbiBzZXQuIFRoZSB2b2x1bWUgaXMKLSAgICAgICAgYmFzaWNhbGx5IHRoZSBsaW1pdC4gTm90ZSB0aGF0IHdlIGNvdWxkIHByZXRlbmQgdG8gaGF2ZSBhIG11dGUgZmVhdHVyZQotICAgICAgICBieSByZXdyaXRpbmcgdGhpcyB0byAKLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NBVURJTzoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYuYXVkaW8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF92b2x1bWUgPSB2LzE2Mzg0OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5mbGFncyZhbXA7VklERU9fQVVESU9fTVVURSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfc2V0X3ZvbHVtZSgwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfc2V0X3ZvbHVtZShjdXJyZW50X3ZvbHVtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X211dGVkID0gdi5mbGFncyAmYW1wOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSURFT19BVURJT19NVVRFOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBUaGlzIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0byB0aGUgVklESU9DR0FVRElPIGNvZGUgdG8gcmVwb3J0IHRoZQotICAgICAgICBzdGF0ZSBvZiB0aGUgbXV0ZSBmbGFnIHdlIHNhdmUgYW5kIHRvIHJlcG9ydCB0aGUgY2FyZCBoYXMgYSBtdXRlIGZ1bmN0aW9uLAotICAgICAgICB3aWxsIGFsbG93IGFwcGxpY2F0aW9ucyB0byB1c2UgYSBtdXRlIGZhY2lsaXR5IHdpdGggdGhpcyBjYXJkLiBJdCBpcwotICAgICAgICBxdWVzdGlvbmFibGUgd2hldGhlciB0aGlzIGlzIGEgZ29vZCBpZGVhIGhvd2V2ZXIuIFVzZXIgYXBwbGljYXRpb25zIGNhbiBhbHJlYWR5Ci0gICAgICAgIGZha2UgdGhpcyB0aGVtc2VsdmVzIGFuZCBrZXJuZWwgc3BhY2UgaXMgcHJlY2lvdXMuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIG5vdyBoYXZlIGEgd29ya2luZyByYWRpbyBpb2N0bCBoYW5kbGVyLiBTbyB3ZSBqdXN0IHdyYXAgdXAgdGhlIGZ1bmN0aW9uCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gLUVOT0lPQ1RMQ01EOwotfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBhbmQgcGFzcyB0aGUgVmlkZW80TGludXggbGF5ZXIgYmFjayBhbiBlcnJvciBzbyB0aGF0IGl0IGtub3dzIHdlIGRpZCBub3QKLSAgICAgICAgdW5kZXJzdGFuZCB0aGUgcmVxdWVzdCB3ZSBnb3QgcGFzc2VkLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0ibW9kcmFkaW8iPgotICA8dGl0bGU+TW9kdWxlIFdyYXBwZXI8L3RpdGxlPgotICA8cGFyYT4KLSAgICAgICAgRmluYWxseSB3ZSBhZGQgaW4gdGhlIHVzdWFsIG1vZHVsZSB3cmFwcGluZyBhbmQgdGhlIGRyaXZlciBpcyBkb25lLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotI2lmbmRlZiBNT0RVTEUKLQotc3RhdGljIGludCBpbyA9IDB4MzAwOwotCi0jZWxzZQotCi1zdGF0aWMgaW50IGlvID0gLTE7Ci0KLSNlbmRpZgotCi1NT0RVTEVfQVVUSE9SKCJBbGFuIENveCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgYW4gaW1hZ2luYXJ5IHJhZGlvIGNhcmQuIik7Ci1tb2R1bGVfcGFyYW0oaW8sIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIGNhcmQuIik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKLXsKLSAgICAgICAgaWYoaW89PS0xKQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSIAotICAgICAgICAgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4Pz8/XG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbXlyYWRpb19pbml0KE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCh2b2lkKQotewotICAgICAgICB2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmYW1wO215X3JhZGlvKTsKLSAgICAgICAgcmVsZWFzZV9yZWdpb24oaW8sIE1ZX0lPX1NJWkUpOwotfQotCi1tb2R1bGVfaW5pdChpbml0KTsKLW1vZHVsZV9leGl0KGNsZWFudXApOwotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBJbiB0aGlzIGV4YW1wbGUgd2Ugc2V0IHRoZSBJTyBiYXNlIGJ5IGRlZmF1bHQgaWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCBpbnRvCi0gICAgICAgIHRoZSBrZXJuZWw6IHlvdSBjYW4gc3RpbGwgc2V0IGl0IHVzaW5nICJteV9yYWRpby5pcnEiIGlmIHRoaXMgZmlsZSBpcyBjYWxsZWQgPGZpbGVuYW1lPm15X3JhZGlvLmM8L2ZpbGVuYW1lPi4gRm9yIHRoZSBtb2R1bGUgd2UgcmVxdWlyZSB0aGUKLSAgICAgICAgdXNlciBzZXRzIHRoZSBwYXJhbWV0ZXIuIFdlIHNldCBpbyB0byBhIG5vbnNlbnNlIHBvcnQgKC0xKSBzbyB0aGF0IHdlIGNhbgotICAgICAgICB0ZWxsIGlmIHRoZSB1c2VyIHN1cHBsaWVkIGFuIGlvIHBhcmFtZXRlciBvciBub3QuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIHVzZSBNT0RVTEVfIGRlZmluZXMgdG8gZ2l2ZSBhbiBhdXRob3IgZm9yIHRoZSBjYXJkIGRyaXZlciBhbmQgYQotICAgICAgICBkZXNjcmlwdGlvbi4gV2UgYWxzbyB1c2UgdGhlbSB0byBkZWNsYXJlIHRoYXQgaW8gaXMgYW4gaW50ZWdlciBhbmQgaXQgaXMgdGhlCi0gICAgICAgIGFkZHJlc3Mgb2YgdGhlIGNhcmQsIGFuZCBjYW4gYmUgcmVhZCBieSBhbnlvbmUgZnJvbSBzeXNmcy4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGNsZWFuLXVwIHJvdXRpbmUgdW5yZWdpc3RlcnMgdGhlIHZpZGVvX2RldmljZSB3ZSByZWdpc3RlcmVkLCBhbmQgZnJlZXMKLSAgICAgICAgdXAgdGhlIEkvTyBzcGFjZS4gTm90ZSB0aGF0IHRoZSB1bnJlZ2lzdGVyIHRha2VzIHRoZSBhY3R1YWwgdmlkZW9fZGV2aWNlCi0gICAgICAgIHN0cnVjdHVyZSBhcyBpdHMgYXJndW1lbnQuIFVubGlrZSB0aGUgZmlsZSBvcGVyYXRpb25zIHN0cnVjdHVyZSB3aGljaCBjYW4gYmUKLSAgICAgICAgc2hhcmVkIGJ5IGFsbCBpbnN0YW5jZXMgb2YgYSBkZXZpY2UgYSB2aWRlb19kZXZpY2Ugc3RydWN0dXJlIGFzIGFuIGFjdHVhbAotICAgICAgICBpbnN0YW5jZSBvZiB0aGUgZGV2aWNlLiBJZiB5b3UgYXJlIHJlZ2lzdGVyaW5nIG11bHRpcGxlIHJhZGlvIGRldmljZXMgeW91Ci0gICAgICAgIG5lZWQgdG8gZmlsbCBpbiBvbmUgc3RydWN0dXJlIHBlciBkZXZpY2UgKG1vc3QgbGlrZWx5IGJ5IHNldHRpbmcgdXAgYQotICAgICAgICB0ZW1wbGF0ZSBhbmQgY29weWluZyBpdCB0byBlYWNoIG9mIHRoZSBhY3R1YWwgZGV2aWNlIHN0cnVjdHVyZXMpLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDwvY2hhcHRlcj4KLSAgPGNoYXB0ZXIgaWQ9IlZpZGVvX0NhcHR1cmVfRGV2aWNlcyI+Ci0gICAgICAgIDx0aXRsZT5WaWRlbyBDYXB0dXJlIERldmljZXM8L3RpdGxlPgotICA8c2VjdDEgaWQ9ImludHJvdmlkIj4KLSAgPHRpdGxlPlZpZGVvIENhcHR1cmUgRGV2aWNlIFR5cGVzPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSB2aWRlbyBjYXB0dXJlIGRldmljZXMgc2hhcmUgdGhlIHNhbWUgaW50ZXJmYWNlcyBhcyByYWRpbyBkZXZpY2VzLiBJbgotICAgICAgICBvcmRlciB0byBleHBsYWluIHRoZSB2aWRlbyBjYXB0dXJlIGludGVyZmFjZSBJIHdpbGwgdXNlIHRoZSBleGFtcGxlIG9mIGEKLSAgICAgICAgY2FtZXJhIHRoYXQgaGFzIG5vIHR1bmVycyBvciBhdWRpbyBpbnB1dC4gVGhpcyBrZWVwcyB0aGUgZXhhbXBsZSByZWxhdGl2ZWx5Ci0gICAgICAgIGNsZWFuLiBUbyBnZXQgYm90aCBjb21iaW5lIHRoZSB0d28gZHJpdmVyIGV4YW1wbGVzLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBWaWRlbyBjYXB0dXJlIGRldmljZXMgZGl2aWRlIGludG8gZm91ciBjYXRlZ29yaWVzLiBBIGxpdHRsZSB0ZWNobm9sb2d5Ci0gICAgICAgIGJhY2tncm91bmRlci4gRnVsbCBtb3Rpb24gdmlkZW8gZXZlbiBhdCB0ZWxldmlzaW9uIHJlc29sdXRpb24gKHdoaWNoIGlzCi0gICAgICAgIGFjdHVhbGx5IGZhaXJseSBsb3cpIGlzIHByZXR0eSByZXNvdXJjZS1pbnRlbnNpdmUuIFlvdSBhcmUgY29udGludWFsbHkKLSAgICAgICAgcGFzc2luZyBtZWdhYnl0ZXMgb2YgZGF0YSBldmVyeSBzZWNvbmQgZnJvbSB0aGUgY2FwdHVyZSBjYXJkIHRvIHRoZSBkaXNwbGF5LiAKLSAgICAgICAgc2V2ZXJhbCBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzIGhhdmUgZW1lcmdlZCBiZWNhdXNlIGNvcHlpbmcgdGhpcyB0aHJvdWdoIHRoZSAKLSAgICAgICAgcHJvY2Vzc29yIGFuZCB0aGUgdXNlciBwcm9ncmFtIGlzIGEgcGFydGljdWxhcmx5IGJhZCBpZGVhIC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGZpcnN0IGlzIHRvIGFkZCB0aGUgdGVsZXZpc2lvbiBpbWFnZSBvbnRvIHRoZSB2aWRlbyBvdXRwdXQgZGlyZWN0bHkuCi0gICAgICAgIFRoaXMgaXMgYWxzbyBob3cgc29tZSAzRCBjYXJkcyB3b3JrLiBUaGVzZSBiYXNpYyBjYXJkcyBjYW4gZ2VuZXJhbGx5IGRyb3AgdGhlCi0gICAgICAgIHZpZGVvIGludG8gYW55IGNob3NlbiByZWN0YW5nbGUgb2YgdGhlIGRpc3BsYXkuIENhcmRzIGxpa2UgdGhpcywgd2hpY2gKLSAgICAgICAgaW5jbHVkZSBtb3N0IG1wZWcxIGNhcmRzIHRoYXQgdXNlZCB0aGUgZmVhdHVyZSBjb25uZWN0b3IsICBhcmVuJ3QgdmVyeQotICAgICAgICBmcmllbmRseSBpbiBhIHdpbmRvd2luZyBlbnZpcm9ubWVudC4gVGhleSBkb24ndCB1bmRlcnN0YW5kIHdpbmRvd3Mgb3IKLSAgICAgICAgY2xpcHBpbmcuIFRoZSB2aWRlbyB3aW5kb3cgaXMgYWx3YXlzIG9uIHRoZSB0b3Agb2YgdGhlIGRpc3BsYXkuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIENocm9tYSBrZXlpbmcgaXMgYSB0ZWNobmlxdWUgdXNlZCBieSBjYXJkcyB0byBnZXQgYXJvdW5kIHRoaXMuIEl0IGlzIGFuIG9sZAotICAgICAgICB0ZWxldmlzaW9uIG1peGluZyB0cmljayB3aGVyZSB5b3UgbWFyayBhbGwgdGhlIGFyZWFzIHlvdSB3aXNoIHRvIHJlcGxhY2UKLSAgICAgICAgd2l0aCBhIHNpbmdsZSBjbGVhciBjb2xvdXIgdGhhdCBpc24ndCB1c2VkIGluIHRoZSBpbWFnZSAtIFRWIHBlb3BsZSB1c2UgYW4KLSAgICAgICAgaW5jcmVkaWJseSBicmlnaHQgYmx1ZSB3aGlsZSBjb21wdXRpbmcgcGVvcGxlIG9mdGVuIHVzZSBhIHBhcnRpY3VsYXJseQotICAgICAgICB2aXJ1bGVudCBwdXJwbGUuIEJyaWdodCBibHVlIG9jY3VycyBvbiB0aGUgZGVza3RvcC4gQW55b25lIHdpdGggdmlydWxlbnQKLSAgICAgICAgcHVycGxlIHdpbmRvd3MgaGFzIGFub3RoZXIgcHJvYmxlbSBiZXNpZGVzIHRoZWlyIFRWIG92ZXJsYXkuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSB0aGlyZCBhcHByb2FjaCBpcyB0byBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIGNhcHR1cmUgY2FyZCB0byB0aGUgdmlkZW8KLSAgICAgICAgY2FyZCwgYnV0IHRvIGRvIGl0IGRpcmVjdGx5IGFjcm9zcyB0aGUgUENJIGJ1cy4gVGhpcyByZWxpZXZlcyB0aGUgcHJvY2Vzc29yCi0gICAgICAgIGZyb20gZG9pbmcgdGhlIHdvcmsgYnV0IGRvZXMgcmVxdWlyZSBzb21lIHNtYXJ0bmVzcyBvbiB0aGUgcGFydCBvZiB0aGUgdmlkZW8KLSAgICAgICAgY2FwdHVyZSBjaGlwLCBhcyB3ZWxsIGFzIGEgc3VpdGFibGUgdmlkZW8gY2FyZC4gUHJvZ3JhbW1pbmcgdGhpcyBraW5kIG9mCi0gICAgICAgIGNhcmQgYW5kIG1vcmUgc28gZGVidWdnaW5nIGl0IGNhbiBiZSBleHRyZW1lbHkgdHJpY2t5LiBUaGVyZSBhcmUgc29tZSBxdWl0ZQotICAgICAgICBjb21wbGljYXRlZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZGlzcGxheSBhbmQgeW91IG1heSBhbHNvIGhhdmUgdG8gY29wZSB3aXRoCi0gICAgICAgIHZhcmlvdXMgY2hpcHNldCBidWdzIHRoYXQgc2hvdyB1cCB3aGVuIFBDSSBjYXJkcyBzdGFydCB0YWxraW5nIHRvIGVhY2gKLSAgICAgICAgb3RoZXIuIAotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUbyBrZWVwIG91ciBleGFtcGxlIGZhaXJseSBzaW1wbGUgd2Ugd2lsbCBhc3N1bWUgYSBjYXJkIHRoYXQgc3VwcG9ydHMKLSAgICAgICAgb3ZlcmxheWluZyBhIGZsYXQgcmVjdGFuZ3VsYXIgaW1hZ2Ugb250byB0aGUgZnJhbWUgYnVmZmVyIG91dHB1dCwgYW5kIHdoaWNoCi0gICAgICAgIGNhbiBhbHNvIGNhcHR1cmUgc3R1ZmYgaW50byBwcm9jZXNzb3IgbWVtb3J5LgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0icmVndmlkIj4KLSAgPHRpdGxlPlJlZ2lzdGVyaW5nIFZpZGVvIENhcHR1cmUgRGV2aWNlczwvdGl0bGU+Ci0gIDxwYXJhPgotICAgICAgICBUaGlzIHRpbWUgd2UgbmVlZCB0byBhZGQgbW9yZSBmdW5jdGlvbnMgZm9yIG91ciBjYW1lcmEgZGV2aWNlLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIG15X2NhbWVyYQotewotICAgICAgICAiTXkgQ2FtZXJhIiwKLSAgICAgICAgVklEX1RZUEVfT1ZFUkxBWXxWSURfVFlQRV9TQ0FMRVN8XAotICAgICAgICBWSURfVFlQRV9DQVBUVVJFfFZJRF9UWVBFX0NIUk9NQUtFWSwKLSAgICAgICAgY2FtZXJhX29wZW4uCi0gICAgICAgIGNhbWVyYV9jbG9zZSwKLSAgICAgICAgY2FtZXJhX3JlYWQsICAgICAgLyogbm8gcmVhZCAqLwotICAgICAgICBOVUxMLCAgICAgICAgICAgICAvKiBubyB3cml0ZSAqLwotICAgICAgICBjYW1lcmFfcG9sbCwgICAgICAvKiBubyBwb2xsICovCi0gICAgICAgIGNhbWVyYV9pb2N0bCwKLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgLyogbm8gc3BlY2lhbCBpbml0IGZ1bmN0aW9uICovCi0gICAgICAgIE5VTEwgICAgICAgICAgICAgIC8qIG5vIHByaXZhdGUgZGF0YSAqLwotfTsKLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIG5lZWQgYSByZWFkKCkgZnVuY3Rpb24gd2hpY2ggaXMgdXNlZCBmb3IgY2FwdHVyaW5nIGRhdGEgZnJvbQotICAgICAgICB0aGUgY2FyZCwgYW5kIHdlIG5lZWQgYSBwb2xsIGZ1bmN0aW9uIHNvIHRoYXQgYSBkcml2ZXIgY2FuIHdhaXQgZm9yIHRoZSBuZXh0Ci0gICAgICAgIGZyYW1lIHRvIGJlIGNhcHR1cmVkLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBXZSB1c2UgdGhlIGV4dHJhIHZpZGVvIGNhcGFiaWxpdHkgZmxhZ3MgdGhhdCBkaWQgbm90IGFwcGx5IHRvIHRoZQotICAgICAgICByYWRpbyBpbnRlcmZhY2UuIFRoZSB2aWRlbyByZWxhdGVkIGZsYWdzIGFyZQotICA8L3BhcmE+Ci0gICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9IkNhcHR1cmVfQ2FwYWJpbGl0aWVzIj48dGl0bGU+Q2FwdHVyZSBDYXBhYmlsaXRpZXM8L3RpdGxlPgotICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICA8dGJvZHk+Ci0gICA8cm93PgotPGVudHJ5PlZJRF9UWVBFX0NBUFRVUkU8L2VudHJ5PjxlbnRyeT5XZSBzdXBwb3J0IGltYWdlIGNhcHR1cmU8L2VudHJ5PgotPC9yb3c+PHJvdz4KLTxlbnRyeT5WSURfVFlQRV9URUxFVEVYVDwvZW50cnk+PGVudHJ5PkEgdGVsZXRleHQgY2FwdHVyZSBkZXZpY2UgKHZiaXtuXSk8L2VudHJ5PgotPC9yb3c+PHJvdz4KLTxlbnRyeT5WSURfVFlQRV9PVkVSTEFZPC9lbnRyeT48ZW50cnk+VGhlIGltYWdlIGNhbiBiZSBkaXJlY3RseSBvdmVybGFpZCBvbnRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSBidWZmZXI8L2VudHJ5PgotPC9yb3c+PHJvdz4KLTxlbnRyeT5WSURfVFlQRV9DSFJPTUFLRVk8L2VudHJ5PjxlbnRyeT5DaHJvbWFrZXkgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHdoaWNoIHBhcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBpbWFnZSB0byBkaXNwbGF5PC9lbnRyeT4KLTwvcm93Pjxyb3c+Ci08ZW50cnk+VklEX1RZUEVfQ0xJUFBJTkc8L2VudHJ5PjxlbnRyeT5JdCBpcyBwb3NzaWJsZSB0byBnaXZlIHRoZSBib2FyZCBhIGxpc3Qgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlcyB0byBkcmF3IGFyb3VuZC4gPC9lbnRyeT4KLTwvcm93Pjxyb3c+Ci08ZW50cnk+VklEX1RZUEVfRlJBTUVSQU08L2VudHJ5PjxlbnRyeT5UaGUgdmlkZW8gY2FwdHVyZSBnb2VzIGludG8gdGhlIHZpZGVvIG1lbW9yeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYWN0dWFsbHkgY2hhbmdlcyBpdC4gQXBwbGljYXRpb25zIG5lZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8ga25vdyB0aGlzIHNvIHRoZXkgY2FuIGNsZWFuIHVwIGFmdGVyIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkPC9lbnRyeT4KLTwvcm93Pjxyb3c+Ci08ZW50cnk+VklEX1RZUEVfU0NBTEVTPC9lbnRyeT48ZW50cnk+VGhlIGltYWdlIGNhbiBiZSBzY2FsZWQgdG8gdmFyaW91cyBzaXplcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gYmVpbmcgYSBzaW5nbGUgZml4ZWQgc2l6ZS48L2VudHJ5PgotPC9yb3c+PHJvdz4KLTxlbnRyeT5WSURfVFlQRV9NT05PQ0hST01FPC9lbnRyeT48ZW50cnk+VGhlIGNhcHR1cmUgd2lsbCBiZSBtb25vY2hyb21lLiBUaGlzIGlzbid0IGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUgYW5zd2VyIHRvIHRoZSBxdWVzdGlvbiBzaW5jZSBhIG1vbm8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhIG9uIGEgY29sb3VyIGNhcHR1cmUgY2FyZCB3aWxsIHN0aWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2UgbW9ubyBvdXRwdXQuPC9lbnRyeT4KLTwvcm93Pjxyb3c+Ci08ZW50cnk+VklEX1RZUEVfU1VCQ0FQVFVSRTwvZW50cnk+PGVudHJ5PlRoZSBjYXJkIGFsbG93cyBvbmx5IHBhcnQgb2YgaXRzIGZpZWxkIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgdG8gYmUgY2FwdHVyZWQuIFRoaXMgZW5hYmxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMgdG8gYXZvaWQgY29weWluZyBhbGwgb2YgYSBsYXJnZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSBpbnRvIG1lbW9yeSB3aGVuIG9ubHkgc29tZSBzZWN0aW9uIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50LjwvZW50cnk+Ci0gICAgPC9yb3c+Ci0gICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotICA8cGFyYT4KLSAgICAgICAgV2Ugc2V0IFZJRF9UWVBFX0NBUFRVUkUgc28gdGhhdCB3ZSBhcmUgc2VlbiBhcyBhIGNhcHR1cmUgY2FyZCwKLSAgICAgICAgVklEX1RZUEVfQ0hST01BS0VZIHNvIHRoZSBhcHBsaWNhdGlvbiBrbm93cyBpdCBpcyB0aW1lIHRvIGRyYXcgaW4gdmlydWxlbnQKLSAgICAgICAgcHVycGxlLCBhbmQgVklEX1RZUEVfU0NBTEVTIGJlY2F1c2Ugd2UgY2FuIGJlIHJlc2l6ZWQuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIE91ciBzZXR1cCBpcyBmYWlybHkgc2ltaWxhci4gVGhpcyB0aW1lIHdlIGFsc28gd2FudCBhbiBpbnRlcnJ1cHQgbGluZQotICAgICAgICBmb3IgdGhlICdmcmFtZSBjYXB0dXJlZCcgc2lnbmFsLiBOb3QgYWxsIGNhcmRzIGhhdmUgdGhpcyBzbyBzb21lIG9mIHRoZW0KLSAgICAgICAgY2Fubm90IGhhbmRsZSBwb2xsKCkuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLXN0YXRpYyBpbnQgaW8gPSAweDMyMDsKLXN0YXRpYyBpbnQgaXJxID0gMTE7Ci0KLWludCBfX2luaXQgbXljYW1lcmFfaW5pdChzdHJ1Y3QgdmlkZW9faW5pdCAqdikKLXsKLSAgICAgICAgaWYoIXJlcXVlc3RfcmVnaW9uKGlvLCBNWV9JT19TSVpFLCAibXljYW1lcmEiKSkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAKLSAgICAgICAgICAgICAgICAgICAgICAibXljYW1lcmE6IHBvcnQgMHglMDNYIGlzIGluIHVzZS5cbiIsIGlvKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYodmlkZW9fZGV2aWNlX3JlZ2lzdGVyKCZhbXA7bXlfY2FtZXJhLCAKLSAgICAgICAgICAgIFZGTF9UWVBFX0dSQUJCRVIpPT0tMSkgewotICAgICAgICAgICAgICAgIHJlbGVhc2VfcmVnaW9uKGlvLCBNWV9JT19TSVpFKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLX0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhpcyBpcyBsaXR0bGUgY2hhbmdlZCBmcm9tIHRoZSBuZWVkcyBvZiB0aGUgcmFkaW8gY2FyZC4gV2Ugc3BlY2lmeQotICAgICAgICBWRkxfVFlQRV9HUkFCQkVSIHRoaXMgdGltZSBhcyB3ZSB3YW50IHRvIGJlIGFsbG9jYXRlZCBhIC9kZXYvdmlkZW8gbmFtZS4KLSAgPC9wYXJhPgotICA8L3NlY3QxPgotICA8c2VjdDEgaWQ9Im9wdmlkIj4KLSAgPHRpdGxlPk9wZW5pbmcgQW5kIENsb3NpbmcgVGhlIENhcHR1cmUgRGV2aWNlPC90aXRsZT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLXN0YXRpYyBpbnQgdXNlcnMgPSAwOwotCi1zdGF0aWMgaW50IGNhbWVyYV9vcGVuKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgaW50IGZsYWdzKQotewotICAgICAgICBpZih1c2VycykKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICBpZihyZXF1ZXN0X2lycShpcnEsIGNhbWVyYV9pcnEsIDAsICJjYW1lcmEiLCBkZXYpJmx0OzApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICAgICAgdXNlcnMrKzsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBjYW1lcmFfY2xvc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2KQotewotICAgICAgICB1c2Vycy0tOwotICAgICAgICBmcmVlX2lycShpcnEsIGRldik7Ci19Ci0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgb3BlbiBhbmQgY2xvc2Ugcm91dGluZXMgYXJlIGFsc28gcXVpdGUgc2ltaWxhci4gVGhlIG9ubHkgcmVhbCBjaGFuZ2UgaXMKLSAgICAgICAgdGhhdCB3ZSBub3cgcmVxdWVzdCBhbiBpbnRlcnJ1cHQgZm9yIHRoZSBjYW1lcmEgZGV2aWNlIGludGVycnVwdCBsaW5lLiBJZiB3ZQotICAgICAgICBjYW5ub3QgZ2V0IHRoZSBpbnRlcnJ1cHQgd2UgcmVwb3J0IEVCVVNZIHRvIHRoZSBhcHBsaWNhdGlvbiBhbmQgZ2l2ZSB1cC4KLSAgPC9wYXJhPgotICA8L3NlY3QxPgotICA8c2VjdDEgaWQ9ImlycXZpZCI+Ci0gIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxpbmc8L3RpdGxlPgotICA8cGFyYT4KLSAgICAgICAgT3VyIGV4YW1wbGUgaGFuZGxlciBpcyBmb3IgYW4gSVNBIGJ1cyBkZXZpY2UuIElmIGl0IHdhcyBQQ0kgeW91IHdvdWxkIGJlCi0gICAgICAgIGFibGUgdG8gc2hhcmUgdGhlIGludGVycnVwdCBhbmQgd291bGQgaGF2ZSBzZXQgSVJRRl9TSEFSRUQgdG8gaW5kaWNhdGUgYQotICAgICAgICBzaGFyZWQgSVJRLiBXZSBwYXNzIHRoZSBkZXZpY2UgcG9pbnRlciBhcyB0aGUgaW50ZXJydXB0IHJvdXRpbmUgYXJndW1lbnQuIFdlCi0gICAgICAgIGRvbid0IG5lZWQgdG8gc2luY2Ugd2Ugb25seSBzdXBwb3J0IG9uZSBjYXJkIGJ1dCBkb2luZyB0aGlzIHdpbGwgbWFrZSBpdAotICAgICAgICBlYXNpZXIgdG8gdXBncmFkZSB0aGUgZHJpdmVyIGZvciBtdWx0aXBsZSBkZXZpY2VzIGluIHRoZSBmdXR1cmUuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIE91ciBpbnRlcnJ1cHQgcm91dGluZSBuZWVkcyB0byBkbyBsaXR0bGUgaWYgd2UgYXNzdW1lIHRoZSBjYXJkIGNhbiBzaW1wbHkKLSAgICAgICAgcXVldWUgb25lIGZyYW1lIHRvIGJlIHJlYWQgYWZ0ZXIgaXQgY2FwdHVyZXMgaXQuIAotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi1zdGF0aWMgc3RydWN0IHdhaXRfcXVldWUgKmNhcHR1cmVfd2FpdDsKLXN0YXRpYyBpbnQgY2FwdHVyZV9yZWFkeSA9IDA7Ci0KLXN0YXRpYyB2b2lkIGNhbWVyYV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0gICAgICAgIGNhcHR1cmVfcmVhZHk9MTsKLSAgICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhbXA7Y2FwdHVyZV93YWl0KTsKLX0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBuaWNlIGFuZCBzaW1wbGUgZm9yIHRoaXMgY2FyZCBhcyB3ZSBhcmUgYXNzdW1pbmcKLSAgICAgICAgdGhlIGNhcmQgaXMgYnVmZmVyaW5nIHRoZSBmcmFtZSBmb3IgdXMuIFRoaXMgbWVhbnMgd2UgaGF2ZSBsaXR0bGUgdG8gZG8gYnV0Ci0gICAgICAgIHdha2UgdXAgICAgICAgIGFueWJvZHkgaW50ZXJlc3RlZC4gV2UgYWxzbyBzZXQgYSBjYXB0dXJlX3JlYWR5IGZsYWcsIGFzIHdlIG1heQotICAgICAgICBjYXB0dXJlIGEgZnJhbWUgYmVmb3JlIGFuIGFwcGxpY2F0aW9uIG5lZWRzIGl0LiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBrbm93Ci0gICAgICAgIHRoYXQgYSBmcmFtZSBpcyByZWFkeS4gSWYgd2UgaGFkIHRvIGNvbGxlY3QgdGhlIGZyYW1lIG9uIHRoZSBpbnRlcnJ1cHQgbGlmZQotICAgICAgICB3b3VsZCBiZSBtb3JlIGNvbXBsZXguCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSB0d28gbmV3IHJvdXRpbmVzIHdlIG5lZWQgdG8gc3VwcGx5IGFyZSBjYW1lcmFfcmVhZCB3aGljaCByZXR1cm5zIGEKLSAgICAgICAgZnJhbWUsIGFuZCBjYW1lcmFfcG9sbCB3aGljaCB3YWl0cyBmb3IgYSBmcmFtZSB0byBiZWNvbWUgcmVhZHkuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLXN0YXRpYyBpbnQgY2FtZXJhX3BvbGwoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCAKLQlzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGUgKndhaXQpCi17Ci0gICAgICAgIHBvbGxfd2FpdChmaWxlLCAmYW1wO2NhcHR1cmVfd2FpdCwgd2FpdCk7Ci0gICAgICAgIGlmKGNhcHR1cmVfcmVhZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gUE9MTElOfFBPTExSRE5PUk07Ci0gICAgICAgIHJldHVybiAwOwotfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBPdXIgd2FpdCBxdWV1ZSBmb3IgcG9sbGluZyBpcyB0aGUgY2FwdHVyZV93YWl0IHF1ZXVlLiBUaGlzIHdpbGwgY2F1c2UgdGhlCi0gICAgICAgIHRhc2sgdG8gYmUgd29rZW4gdXAgYnkgb3VyIGNhbWVyYV9pcnEgcm91dGluZS4gV2UgY2hlY2sgY2FwdHVyZV9yZWFkIHRvIHNlZQotICAgICAgICBpZiB0aGVyZSBpcyBhbiBpbWFnZSBwcmVzZW50IGFuZCBpZiBzbyByZXBvcnQgdGhhdCBpdCBpcyByZWFkYWJsZS4KLSAgPC9wYXJhPgotICA8L3NlY3QxPgotICA8c2VjdDEgaWQ9InJkdmlkIj4KLSAgPHRpdGxlPlJlYWRpbmcgVGhlIFZpZGVvIEltYWdlPC90aXRsZT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLXN0YXRpYyBsb25nIGNhbWVyYV9yZWFkKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50KQotewotICAgICAgICBzdHJ1Y3Qgd2FpdF9xdWV1ZSB3YWl0ID0geyBjdXJyZW50LCBOVUxMIH07Ci0gICAgICAgIHU4ICpwdHI7Ci0gICAgICAgIGludCBsZW47Ci0gICAgICAgIGludCBpOwotCi0gICAgICAgIGFkZF93YWl0X3F1ZXVlKCZhbXA7Y2FwdHVyZV93YWl0LCAmYW1wO3dhaXQpOwotCi0gICAgICAgIHdoaWxlKCFjYXB0dXJlX3JlYWR5KQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoZmlsZS0+ZmxhZ3MmYW1wO09fTkRFTEFZKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZhbXA7Y2FwdHVyZV93YWl0LCAmYW1wO3dhaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVXT1VMREJMT0NLOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZihzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfd2FpdF9xdWV1ZSgmYW1wO2NhcHR1cmVfd2FpdCwgJmFtcDt3YWl0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FUkVTVEFSVFNZUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2NoZWR1bGUoKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLSAgICAgICAgfQotICAgICAgICByZW1vdmVfd2FpdF9xdWV1ZSgmYW1wO2NhcHR1cmVfd2FpdCwgJmFtcDt3YWl0KTsKLSAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBmaXJzdCB0aGluZyB3ZSBoYXZlIHRvIGRvIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBhcHBsaWNhdGlvbiB3YWl0cyB1bnRpbAotICAgICAgICB0aGUgbmV4dCBmcmFtZSBpcyByZWFkeS4gVGhlIGNvZGUgaGVyZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBtb3VzZSBjb2RlCi0gICAgICAgIHdlIHVzZWQgZWFybGllciBpbiB0aGlzIGNoYXB0ZXIuIEl0IGlzIG9uZSBvZiB0aGUgY29tbW9uIGJ1aWxkaW5nIGJsb2NrcyBvZgotICAgICAgICBMaW51eCBkZXZpY2UgZHJpdmVyIGNvZGUgYW5kIHByb2JhYmx5IG9uZSB3aGljaCB5b3Ugd2lsbCBmaW5kIG9jY3VycyBpbiBhbnkKLSAgICAgICAgZHJpdmVycyB5b3Ugd3JpdGUuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIHdhaXQgZm9yIGEgZnJhbWUgdG8gYmUgcmVhZHksIG9yIGZvciBhIHNpZ25hbCB0byBpbnRlcnJ1cHQgb3VyIHdhaXRpbmcuIElmIGEKLSAgICAgICAgc2lnbmFsIG9jY3VycyB3ZSBuZWVkIHRvIHJldHVybiBmcm9tIHRoZSBzeXN0ZW0gY2FsbCBzbyB0aGF0IHRoZSBzaWduYWwgY2FuCi0gICAgICAgIGJlIHNlbnQgdG8gdGhlIGFwcGxpY2F0aW9uIGl0c2VsZi4gV2UgYWxzbyBjaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgYWN0dWFsbHkKLSAgICAgICAgd2FudGVkIHRvIGF2b2lkIHdhaXRpbmcgLSBpZSAgaWYgdGhleSBhcmUgdXNpbmcgbm9uLWJsb2NraW5nIEkvTyBhbmQgaGF2ZSBvdGhlciB0aGluZ3MgCi0gICAgICAgIHRvIGdldCBvbiB3aXRoLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBOZXh0IHdlIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgY2FyZCB0byB0aGUgdXNlciBhcHBsaWNhdGlvbi4gVGhpcyBpcyByYXJlbHkKLSAgICAgICAgYXMgZWFzeSBhcyBvdXIgZXhhbXBsZSBtYWtlcyBvdXQuIFdlIHdpbGwgYWRkIGNhcHR1cmVfdywgYW5kIGNhcHR1cmVfaCBoZXJlCi0gICAgICAgIHRvIGhvbGQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGNhcHR1cmVkIGltYWdlLiBXZSBhc3N1bWUgdGhlIGNhcmQgb25seQotICAgICAgICBzdXBwb3J0cyAyNGJpdCBSR0IgZm9yIG5vdy4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotCi0gICAgICAgIGNhcHR1cmVfcmVhZHkgPSAwOwotCi0gICAgICAgIHB0cj0odTggKilidWY7Ci0gICAgICAgIGxlbiA9IGNhcHR1cmVfdyAqIDMgKiBjYXB0dXJlX2g7IC8qIDI0Yml0IFJHQiAqLwotCi0gICAgICAgIGlmKGxlbj5jb3VudCkKLSAgICAgICAgICAgICAgICBsZW49Y291bnQ7ICAvKiBEb2Vzbid0IGFsbCBmaXQgKi8KLQotICAgICAgICBmb3IoaT0wOyBpJmx0O2xlbjsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHV0X3VzZXIoaW5iKGlvK0lNQUdFX0RBVEEpLCBwdHIpOwotICAgICAgICAgICAgICAgIHB0cisrOwotICAgICAgICB9Ci0KLSAgICAgICAgaGFyZHdhcmVfcmVzdGFydF9jYXB0dXJlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiBpOwotfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBGb3IgYSByZWFsIGhhcmR3YXJlIGRldmljZSB5b3Ugd291bGQgdHJ5IHRvIGF2b2lkIHRoZSBsb29wIHdpdGggcHV0X3VzZXIoKS4KLSAgICAgICAgRWFjaCBjYWxsIHRvIHB1dF91c2VyKCkgaGFzIGEgdGltZSBvdmVyaGVhZCBjaGVja2luZyB3aGV0aGVyIHRoZSBhY2Nlc3NlcyB0byB1c2VyCi0gICAgICAgIHNwYWNlIGFyZSBhbGxvd2VkLiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gcmVhZCBhIGxpbmUgaW50byBhIHRlbXBvcmFyeSBidWZmZXIKLSAgICAgICAgdGhlbiBjb3B5IHRoaXMgdG8gdXNlciBzcGFjZSBpbiBvbmUgZ28uCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIEhhdmluZyBjYXB0dXJlZCB0aGUgaW1hZ2UgYW5kIHB1dCBpdCBpbnRvIHVzZXIgc3BhY2Ugd2UgY2FuIGtpY2sgdGhlIGNhcmQgdG8KLSAgICAgICAgZ2V0IHRoZSBuZXh0IGZyYW1lIGFjcXVpcmVkLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0iaW9jdmlkIj4KLSAgPHRpdGxlPlZpZGVvIElvY3RsIEhhbmRsaW5nPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgICAgIEFzIHdpdGggdGhlIHJhZGlvIGRyaXZlciB0aGUgbWFqb3IgY29udHJvbCBpbnRlcmZhY2UgaXMgdmlhIHRoZSBpb2N0bCgpCi0gICAgICAgIGZ1bmN0aW9uLiBWaWRlbyBjYXB0dXJlIGRldmljZXMgc3VwcG9ydCB0aGUgc2FtZSB0dW5lciBjYWxscyBhcyBhIHJhZGlvCi0gICAgICAgIGRldmljZSBhbmQgYWxzbyBzdXBwb3J0IGFkZGl0aW9uYWwgY2FsbHMgdG8gY29udHJvbCBob3cgdGhlIHZpZGVvIGZ1bmN0aW9ucwotICAgICAgICBhcmUgaGFuZGxlZC4gSW4gdGhpcyBzaW1wbGUgZXhhbXBsZSB0aGUgY2FyZCBoYXMgbm8gdHVuZXJzIHRvIGF2b2lkIG1ha2luZwotICAgICAgICB0aGUgY29kZSBjb21wbGV4LiAKLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotCi1zdGF0aWMgaW50IGNhbWVyYV9pb2N0bChzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLSAgICAgICAgc3dpdGNoKGNtZCkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0NBUDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSB2OwotICAgICAgICAgICAgICAgICAgICAgICAgdi50eXBlID0gVklEX1RZUEVfQ0FQVFVSRXxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSURfVFlQRV9DSFJPTUFLRVl8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVklEX1RZUEVfU0NBTEVTfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZJRF9UWVBFX09WRVJMQVk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmNoYW5uZWxzID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuYXVkaW9zID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYubWF4d2lkdGggPSA2NDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2Lm1pbndpZHRoID0gMTY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2Lm1heGhlaWdodCA9IDQ4MDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYubWluaGVpZ2h0ID0gMTY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi5uYW1lLCAiTXkgQ2FtZXJhIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO3YsIHNpemVvZih2KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBmaXJzdCBpb2N0bCB3ZSBtdXN0IHN1cHBvcnQgYW5kIHdoaWNoIGFsbCB2aWRlbyBjYXB0dXJlIGFuZCByYWRpbwotICAgICAgICBkZXZpY2VzIGFyZSByZXF1aXJlZCB0byBzdXBwb3J0IGlzIFZJRElPQ0dDQVAuIFRoaXMgYmVoYXZlcyBleGFjdGx5IHRoZSBzYW1lCi0gICAgICAgIGFzIHdpdGggYSByYWRpbyBkZXZpY2UuIFRoaXMgdGltZSwgaG93ZXZlciwgd2UgcmVwb3J0IHRoZSBleHRyYSBjYXBhYmlsaXRpZXMKLSAgICAgICAgd2Ugb3V0bGluZWQgZWFybGllciBvbiB3aGVuIGRlZmluaW5nIG91ciB2aWRlb19kZXYgc3RydWN0dXJlLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBXZSBub3cgc2V0IHRoZSB2aWRlbyBmbGFncyBzYXlpbmcgdGhhdCB3ZSBzdXBwb3J0IG92ZXJsYXksIGNhcHR1cmUsCi0gICAgICAgIHNjYWxpbmcgYW5kIGNocm9tYWtleS4gV2UgYWxzbyByZXBvcnQgc2l6ZSBsaW1pdHMgLSBvdXIgc21hbGxlc3QgaW1hZ2UgaXMKLSAgICAgICAgMTZ4MTYgcGl4ZWxzLCBvdXIgbGFyZ2VzdCBpcyA2NDB4NDgwLiAKLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIHdlIHJlcG9ydCBubyBhdWRpbyBhbmQgbm8gdHVuaW5nIGNhcGFiaWxpdGllcyBhdCBhbGwuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPiAgICAgICAgCi0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dDSEFOOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19jaGFubmVsIHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2LmNoYW5uZWwgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmZsYWdzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYudHVuZXJzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYudHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5ub3JtID0gVklERU9fTU9ERV9BVVRPOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHYubmFtZSwgIkNhbWVyYSBJbnB1dCIpO2JyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBUaGlzIGZvbGxvd3Mgd2hhdCBpcyB2ZXJ5IG11Y2ggdGhlIHN0YW5kYXJkIHdheSBhbiBpb2N0bCBoYW5kbGVyIGxvb2tzCi0gICAgICAgIGluIExpbnV4LiBXZSBjb3B5IHRoZSBkYXRhIGludG8gYSBrZXJuZWwgc3BhY2UgdmFyaWFibGUgYW5kIHdlIGNoZWNrIHRoYXQgdGhlCi0gICAgICAgIHJlcXVlc3QgaXMgdmFsaWQgKGluIHRoaXMgY2FzZSB0aGF0IHRoZSBpbnB1dCBpcyAwKS4gRmluYWxseSB3ZSBjb3B5IHRoZQotICAgICAgICBjYW1lcmEgaW5mbyBiYWNrIHRvIHRoZSB1c2VyLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgVklESU9DR0NIQU4gaW9jdGwgYWxsb3dzIGEgdXNlciB0byBhc2sgYWJvdXQgdmlkZW8gY2hhbm5lbHMgKHRoYXQgaXMKLSAgICAgICAgaW5wdXRzIHRvIHRoZSB2aWRlbyBjYXJkKS4gT3VyIGV4YW1wbGUgY2FyZCBoYXMgYSBzaW5nbGUgY2FtZXJhIGlucHV0LiBUaGUKLSAgICAgICAgZmllbGRzIGluIHRoZSBzdHJ1Y3R1cmUgYXJlCi0gIDwvcGFyYT4KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fY2hhbm5lbF9maWVsZHMiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fY2hhbm5lbCBmaWVsZHM8L3RpdGxlPgotICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICA8dGJvZHk+Ci0gICA8cm93PgotCi0gICA8ZW50cnk+Y2hhbm5lbDwvZW50cnk+PGVudHJ5PlRoZSBjaGFubmVsIG51bWJlciB3ZSBhcmUgc2VsZWN0aW5nPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+bmFtZTwvZW50cnk+PGVudHJ5PlRoZSBuYW1lIGZvciB0aGlzIGNoYW5uZWwuIFRoaXMgaXMgaW50ZW5kZWQKLSAgICAgICAgICAgICAgICAgICB0byBkZXNjcmliZSB0aGUgcG9ydCB0byB0aGUgdXNlci4KLSAgICAgICAgICAgICAgICAgICBBcHByb3ByaWF0ZSBuYW1lcyBhcmUgdGhlcmVmb3JlIHRoaW5ncyBsaWtlCi0gICAgICAgICAgICAgICAgICAgIkNhbWVyYSIgIlNDQVJUIGlucHV0IjwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgPGVudHJ5PmZsYWdzPC9lbnRyeT48ZW50cnk+Q2hhbm5lbCBwcm9wZXJ0aWVzPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+dHlwZTwvZW50cnk+PGVudHJ5PklucHV0IHR5cGU8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgIDxlbnRyeT5ub3JtPC9lbnRyeT48ZW50cnk+VGhlIGN1cnJlbnQgdGVsZXZpc2lvbiBlbmNvZGluZyBiZWluZyB1c2VkCi0gICAgICAgICAgICAgICAgICAgaWYgcmVsZXZhbnQgZm9yIHRoaXMgY2hhbm5lbC4KLSAgICA8L2VudHJ5PgotICAgIDwvcm93PgotICAgIDwvdGJvZHk+Ci0gICAgPC90Z3JvdXA+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InZpZGVvX2NoYW5uZWxfZmxhZ3MiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fY2hhbm5lbCBmbGFnczwvdGl0bGU+Ci0gICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICAgPHRib2R5PgotICAgIDxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19WQ19UVU5FUjwvZW50cnk+PGVudHJ5PkNoYW5uZWwgaGFzIGEgdHVuZXIuPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19WQ19BVURJTzwvZW50cnk+PGVudHJ5PkNoYW5uZWwgaGFzIGF1ZGlvLjwvZW50cnk+Ci0gICAgPC9yb3c+Ci0gICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fY2hhbm5lbF90eXBlcyI+PHRpdGxlPnN0cnVjdCB2aWRlb19jaGFubmVsIHR5cGVzPC90aXRsZT4KLSAgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgICA8dGJvZHk+Ci0gICAgPHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX1RZUEVfVFY8L2VudHJ5PjxlbnRyeT5UZWxldmlzaW9uIGlucHV0LjwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+VklERU9fVFlQRV9DQU1FUkE8L2VudHJ5PjxlbnRyeT5GaXhlZCBjYW1lcmEgaW5wdXQuPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0JPGVudHJ5PjA8L2VudHJ5PjxlbnRyeT5UeXBlIGlzIHVua25vd24uPC9lbnRyeT4KLSAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ2aWRlb19jaGFubmVsX25vcm1zIj48dGl0bGU+c3RydWN0IHZpZGVvX2NoYW5uZWwgbm9ybXM8L3RpdGxlPgotICAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgIDx0Ym9keT4KLSAgICA8cm93PgotICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9QQUw8L2VudHJ5PjxlbnRyeT5QQUwgZW5jb2RlZCBUZWxldmlzaW9uPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19NT0RFX05UU0M8L2VudHJ5PjxlbnRyeT5OVFNDIChVUykgZW5jb2RlZCBUZWxldmlzaW9uPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19NT0RFX1NFQ0FNPC9lbnRyeT48ZW50cnk+U0VDQU0gKEZyZW5jaCkgVGVsZXZpc2lvbiA8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX01PREVfQVVUTzwvZW50cnk+PGVudHJ5PkF1dG9tYXRpYyBzd2l0Y2hpbmcsIG9yIGZvcm1hdCBkb2VzIG5vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXR0ZXI8L2VudHJ5PgotICAgIDwvcm93PgotICAgIDwvdGJvZHk+Ci0gICAgPC90Z3JvdXA+Ci0gICAgPC90YWJsZT4KLSAgICA8cGFyYT4KLSAgICAgICAgVGhlIGNvcnJlc3BvbmRpbmcgVklESU9DU0NIQU4gaW9jdGwgYWxsb3dzIGEgdXNlciB0byBjaGFuZ2UgY2hhbm5lbCBhbmQgdG8KLSAgICAgICAgcmVxdWVzdCB0aGUgbm9ybSBpcyBjaGFuZ2VkIC0gZm9yIGV4YW1wbGUgdG8gc3dpdGNoIGJldHdlZW4gYSBQQUwgb3IgYW4gTlRTQwotICAgICAgICBmb3JtYXQgY2FtZXJhLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTQ0hBTjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fY2hhbm5lbCB2OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5jaGFubmVsICE9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5ub3JtICE9IFZJREVPX01PREVfQVVUTykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgY2FsbCBpbiBvdXIgZHJpdmVyIGlzIHJlbWFya2FibHkgZWFzeS4gQmVjYXVzZSB3ZQotICAgICAgICBhcmUgYXNzdW1pbmcgZml4ZWQgZm9ybWF0IGhhcmR3YXJlIHdlIG5lZWQgb25seSBjaGVjayB0aGF0IHRoZSB1c2VyIGhhcyBub3QKLSAgICAgICAgdHJpZWQgdG8gY2hhbmdlIGFueXRoaW5nLiAKLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIHVzZXIgYWxzbyBuZWVkcyB0byBiZSBhYmxlIHRvIGNvbmZpZ3VyZSBhbmQgYWRqdXN0IHRoZSBwaWN0dXJlIHRoZXkgYXJlCi0gICAgICAgIHNlZWluZy4gVGhpcyBpcyBtdWNoIGxpa2UgYWRqdXN0aW5nIGEgdGVsZXZpc2lvbiBzZXQuIEEgdXNlciBhcHBsaWNhdGlvbgotICAgICAgICBhbHNvIG5lZWRzIHRvIGtub3cgdGhlIHBhbGV0dGUgYmVpbmcgdXNlZCBzbyB0aGF0IGl0IGtub3dzIGhvdyB0byBkaXNwbGF5Ci0gICAgICAgIHRoZSBpbWFnZSB0aGF0IGhhcyBiZWVuIGNhcHR1cmVkLiBUaGUgVklESU9DR1BJQ1QgYW5kIFZJRElPQ1NQSUNUIGlvY3RsCi0gICAgICAgIGNhbGxzIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbi4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR1BJQ1QKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fcGljdHVyZSB2OwotICAgICAgICAgICAgICAgICAgICAgICAgdi5icmlnaHRuZXNzID0gaGFyZHdhcmVfYnJpZ2h0bmVzcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5odWUgPSBoYXJkd2FyZV9odWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuY29sb3VyID0gaGFyZHdhcmVfc2F0dXJhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5jb250cmFzdCA9IGhhcmR3YXJlX2JyaWdodG5lc3MoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBzZXR0YWJsZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdi53aGl0ZW5lc3MgPSAzMjc2ODsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuZGVwdGggPSAyNDsgICAgICAgICAgIC8qIDI0Yml0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICB2LnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjI0OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKCZhbXA7diwgYXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGJyaWdodG5lc3MsIGh1ZSwgY29sb3IsIGFuZCBjb250cmFzdCBwcm92aWRlIHRoZSBwaWN0dXJlIGNvbnRyb2xzIHRoYXQKLSAgICAgICAgYXJlIGFraW4gdG8gYSBjb252ZW50aW9uYWwgdGVsZXZpc2lvbi4gV2hpdGVuZXNzIHByb3ZpZGVzIGFkZGl0aW9uYWwKLSAgICAgICAgY29udHJvbCBmb3IgZ3JleXNjYWxlIGltYWdlcy4gQWxsIG9mIHRoZXNlIHZhbHVlcyBhcmUgc2NhbGVkIGJldHdlZW4gMC02NTUzNQotICAgICAgICBhbmQgaGF2ZSAzMjc2OCBhcyB0aGUgbWlkIHBvaW50IHNldHRpbmcuIFRoZSBzY2FsaW5nIG1lYW5zIHRoYXQgYXBwbGljYXRpb25zCi0gICAgICAgIGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBjYXBhYmlsaXR5IHJhbmdlIG9mIHRoZSBoYXJkd2FyZSBidXQgY2FuIGxldAotICAgICAgICBpdCBtYWtlIGEgYmVzdCBlZmZvcnQgYXR0ZW1wdC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgT3VyIGRlcHRoIGlzIDI0LCBhcyB0aGlzIGlzIGluIGJpdHMuIFdlIHdpbGwgYmUgcmV0dXJuaW5nIFJHQjI0IGZvcm1hdC4gVGhpcwotICAgICAgICBoYXMgb25lIGJ5dGUgb2YgcmVkLCB0aGVuIG9uZSBvZiBncmVlbiwgdGhlbiBvbmUgb2YgYmx1ZS4gVGhpcyB0aGVuIHJlcGVhdHMKLSAgICAgICAgZm9yIGV2ZXJ5IG90aGVyIHBpeGVsIGluIHRoZSBpbWFnZS4gVGhlIG90aGVyIGNvbW1vbiBmb3JtYXRzIHRoZSBpbnRlcmZhY2UgCi0gICAgICAgIGRlZmluZXMgYXJlCi0gIDwvcGFyYT4KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0iRnJhbWVidWZmZXJfRW5jb2RpbmdzIj48dGl0bGU+RnJhbWVidWZmZXIgRW5jb2RpbmdzPC90aXRsZT4KLSAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgPHRib2R5PgotICAgPHJvdz4KLSAgIDxlbnRyeT5HUkVZPC9lbnRyeT48ZW50cnk+TGluZWFyIGdyZXlzY2FsZS4gVGhpcyBpcyBmb3Igc2ltcGxlIGNhbWVyYXMgYW5kIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgbGlrZTwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgPGVudHJ5PlJHQjU2NTwvZW50cnk+PGVudHJ5PlRoZSB0b3AgNSBiaXRzIGhvbGQgMzIgcmVkIGxldmVscywgdGhlIG5leHQgc2l4IGJpdHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQgZ3JlZW4gYW5kIHRoZSBsb3cgNSBiaXRzIGhvbGQgYmx1ZS4gPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+UkdCNTU1PC9lbnRyeT48ZW50cnk+VGhlIHRvcCBiaXQgaXMgY2xlYXIuIFRoZSByZWQgZ3JlZW4gYW5kIGJsdWUgbGV2ZWxzCi0gICAgICAgICAgICAgICAgICAgICAgICBlYWNoIG9jY3VweSBmaXZlIGJpdHMuPC9lbnRyeT4KLSAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0gIDxwYXJhPgotICAgICAgICBBZGRpdGlvbmFsIG1vZGVzIGFyZSBzdXBwb3J0IGZvciBZVVYgY2FwdHVyZSBmb3JtYXRzLiBUaGVzZSBhcmUgY29tbW9uIGZvcgotICAgICAgICBUViBhbmQgdmlkZW8gY29uZmVyZW5jaW5nIGFwcGxpY2F0aW9ucy4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIFZJRElPQ1NQSUNUIGlvY3RsIGFsbG93cyBhIHVzZXIgdG8gc2V0IHNvbWUgb2YgdGhlIHBpY3R1cmUgcGFyYW1ldGVycy4KLSAgICAgICAgRXhhY3RseSB3aGljaCBvbmVzIGFyZSBzdXBwb3J0ZWQgZGVwZW5kcyBoZWF2aWx5IG9uIHRoZSBjYXJkIGl0c2VsZi4gSXQgaXMKLSAgICAgICAgcG9zc2libGUgdG8gc3VwcG9ydCBtYW55IG1vZGVzIGFuZCBlZmZlY3RzIGluIHNvZnR3YXJlLiBJbiBnZW5lcmFsIGRvaW5nCi0gICAgICAgIHRoaXMgaW4gdGhlIGtlcm5lbCBpcyBhIGJhZCBpZGVhLiBWaWRlbyBjYXB0dXJlIGlzIGEgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlCi0gICAgICAgIGFwcGxpY2F0aW9uIGFuZCB0aGUgcHJvZ3JhbXMgY2FuIG9mdGVuIGRvIGJldHRlciBpZiB0aGV5IGFyZW4ndCBiZWluZwotICAgICAgICAnaGVscGVkJyBieSBhbiBvdmVya2VlbiBkcml2ZXIgd3JpdGVyLiBUaHVzIGZvciBvdXIgZGV2aWNlIHdlIHdpbGwgcmVwb3J0Ci0gICAgICAgIFJHQjI0IG9ubHkgYW5kIHJlZnVzZSB0byBhbGxvdyBhIGNoYW5nZS4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DU1BJQ1Q6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX3BpY3R1cmUgdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYuZGVwdGghPTI0IHx8IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5wYWxldHRlICE9IFZJREVPX1BBTEVUVEVfUkdCMjQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2hhcmR3YXJlX2JyaWdodG5lc3Modi5icmlnaHRuZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldF9oYXJkd2FyZV9odWUodi5odWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2hhcmR3YXJlX3NhdHVyYXRpb24odi5jb2xvdXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2hhcmR3YXJlX2JyaWdodG5lc3Modi5jb250cmFzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgV2UgY2hlY2sgdGhlIHVzZXIgaGFzIG5vdCB0cmllZCB0byBjaGFuZ2UgdGhlIHBhbGV0dGUgb3IgdGhlIGRlcHRoLiBXZSBkbwotICAgICAgICBub3Qgd2FudCB0byBjYXJyeSBvdXQgc29tZSBvZiB0aGUgY2hhbmdlcyBhbmQgdGhlbiByZXR1cm4gYW4gZXJyb3IuIFRoaXMgbWF5Ci0gICAgICAgIGNvbmZ1c2UgdGhlIGFwcGxpY2F0aW9uIHdoaWNoIHdpbGwgYmUgYXNzdW1pbmcgbm8gY2hhbmdlIG9jY3VycmVkLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBJbiBtdWNoIHRoZSBzYW1lIHdheSBhcyB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIHNldCB0aGUgcGljdHVyZSBjb250cm9scyB0bwotICAgICAgICBnZXQgdGhlIHJpZ2h0IGNhcHR1cmUgaW1hZ2VzLCBtYW55IGNhcmRzIG5lZWQgdG8ga25vdyB3aGF0IHRoZXkgYXJlCi0gICAgICAgIGRpc3BsYXlpbmcgb250byB3aGVuIGdlbmVyYXRpbmcgb3ZlcmxheSBvdXRwdXQuIEluIHNvbWUgY2FzZXMgZ2V0dGluZyB0aGlzCi0gICAgICAgIHdyb25nIGV2ZW4gbWFrZXMgYSBuYXN0eSBtZXNzIG9yIG1heSBjcmFzaCB0aGUgY29tcHV0ZXIuIEZvciB0aGF0IHJlYXNvbgotICAgICAgICB0aGUgVklESU9DU0JVRiBpb2N0bCB1c2VkIHRvIHNldCB1cCB0aGUgZnJhbWUgYnVmZmVyIGluZm9ybWF0aW9uIG1heSB3ZWxsCi0gICAgICAgIG9ubHkgYmUgdXNhYmxlIGJ5IHJvb3QuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIHdpbGwgYXNzdW1lIG91ciBjYXJkIGlzIG9uZSBvZiB0aGUgb2xkIElTQSBkZXZpY2VzIHdpdGggZmVhdHVyZSBjb25uZWN0b3IKLSAgICAgICAgYW5kIG9ubHkgc3VwcG9ydHMgYSBjb3VwbGUgb2Ygc3RhbmRhcmQgdmlkZW8gbW9kZXMuIFZlcnkgY29tbW9uIGZvciBvbGRlcgotICAgICAgICBjYXJkcyBhbHRob3VnaCB0aGUgUENJIGRldmljZXMgYXJlIHdheSBzbWFydGVyIHRoYW4gdGhpcy4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotc3RhdGljIHN0cnVjdCB2aWRlb19idWZmZXIgY2FwdHVyZV9mYjsKLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0ZCVUY6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZywgJmFtcDtjYXB0dXJlX2ZiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNhcHR1cmVfZmIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBXZSBrZWVwIHRoZSBmcmFtZSBidWZmZXIgaW5mb3JtYXRpb24gaW4gdGhlIGZvcm1hdCB0aGUgaW9jdGwgdXNlcy4gVGhpcwotICAgICAgICBtYWtlcyBpdCBuaWNlIGFuZCBlYXN5IHRvIHdvcmsgd2l0aCBpbiB0aGUgaW9jdGwgY2FsbHMuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTRkJVRjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fYnVmZmVyIHY7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2LndpZHRoIT0zMjAgJmFtcDsmYW1wOyB2LndpZHRoIT02NDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5oZWlnaHQhPTIwMCAmYW1wOyZhbXA7IHYuaGVpZ2h0IT0yNDAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbXA7JmFtcDsgdi5oZWlnaHQhPTQwMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYW1wOyZhbXA7IHYuaGVpZ2h0ICE9NDgwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmYW1wO2NhcHR1cmVfZmIsICZhbXA7diwgc2l6ZW9mKHYpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3NldF9mYigmYW1wO3YpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGNhcGFibGUoKSBmdW5jdGlvbiBjaGVja3MgYSB1c2VyIGhhcyB0aGUgcmVxdWlyZWQgY2FwYWJpbGl0eS4gVGhlIExpbnV4Ci0gICAgICAgIG9wZXJhdGluZyBzeXN0ZW0gaGFzIGEgc2V0IG9mIGFib3V0IDMwIGNhcGFiaWxpdGllcyBpbmRpY2F0aW5nIHByaXZpbGVnZWQKLSAgICAgICAgYWNjZXNzIHRvIHNlcnZpY2VzLiBUaGUgZGVmYXVsdCBzZXQgdXAgZ2l2ZXMgdGhlIHN1cGVydXNlciAodWlkIDApIGFsbCBvZgotICAgICAgICB0aGVtIGFuZCBub2JvZHkgZWxzZSBoYXMgYW55LgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBXZSBjaGVjayB0aGF0IHRoZSB1c2VyIGhhcyB0aGUgU1lTX0FETUlOIGNhcGFiaWxpdHksIHRoYXQgaXMgdGhleSBhcmUKLSAgICAgICAgYWxsb3dlZCB0byBvcGVyYXRlIGFzIHRoZSBtYWNoaW5lIGFkbWluaXN0cmF0b3IuIFdlIGRvbid0IHdhbnQgYW55b25lIGJ1dAotICAgICAgICB0aGUgYWRtaW5pc3RyYXRvciBtYWtpbmcgYSBtZXNzIG9mIHRoZSBkaXNwbGF5LgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBOZXh0IHdlIGNoZWNrIGZvciBzdGFuZGFyZCBQQyB2aWRlbyBtb2RlcyAoMzIwIG9yIDY0MCB3aWRlIHdpdGggZWl0aGVyCi0gICAgICAgIEVHQSBvciBWR0EgZGVwdGhzKS4gSWYgdGhlIG1vZGUgaXMgbm90IGEgc3RhbmRhcmQgdmlkZW8gbW9kZSB3ZSByZWplY3QgaXQgYXMKLSAgICAgICAgbm90IHN1cHBvcnRlZCBieSBvdXIgY2FyZC4gSWYgdGhlIG1vZGUgaXMgYWNjZXB0YWJsZSB3ZSBzYXZlIGl0IHNvIHRoYXQKLSAgICAgICAgVklESU9DRkJVRiB3aWxsIGdpdmUgdGhlIHJpZ2h0IGFuc3dlciBuZXh0IHRpbWUgaXQgaXMgY2FsbGVkLiAgVGhlCi0gICAgICAgIGhhcmR3YXJlX3NldF9mYigpIGZ1bmN0aW9uIGlzIHNvbWUgdW5kZXNjcmliZWQgY2FyZCBzcGVjaWZpYyBmdW5jdGlvbiB0bwotICAgICAgICBwcm9ncmFtIHRoZSBjYXJkIGZvciB0aGUgZGVzaXJlZCBtb2RlLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBCZWZvcmUgdGhlIGRyaXZlciBjYW4gZGlzcGxheSBhbiBvdmVybGF5IHdpbmRvdyBpdCBuZWVkcyB0byBrbm93IHdoZXJlIHRoZQotICAgICAgICB3aW5kb3cgc2hvdWxkIGJlIHBsYWNlZCwgYW5kIGFsc28gaG93IGxhcmdlIGl0IHNob3VsZCBiZS4gSWYgdGhlIGNhcmQKLSAgICAgICAgc3VwcG9ydHMgY2xpcHBpbmcgaXQgbmVlZHMgdG8ga25vdyB3aGljaCByZWN0YW5nbGVzIHRvIG9taXQgZnJvbSB0aGUKLSAgICAgICAgZGlzcGxheS4gVGhlIHZpZGVvX3dpbmRvdyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgd2F5IHRoZSBpbWFnZSAKLSAgICAgICAgc2hvdWxkIGJlIGRpc3BsYXllZC4gCi0gICA8L3BhcmE+Ci0gICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InZpZGVvX3dpbmRvd19maWVsZHMiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fd2luZG93IGZpZWxkczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICAgICAgIDxlbnRyeT53aWR0aDwvZW50cnk+PGVudHJ5PlRoZSB3aWR0aCBpbiBwaXhlbHMgb2YgdGhlIGRlc2lyZWQgaW1hZ2UuIFRoZSBjYXJkCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXkgdXNlIGEgc21hbGxlciBzaXplIGlmIHRoaXMgc2l6ZSBpcyBub3QgYXZhaWxhYmxlPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+aGVpZ2h0PC9lbnRyeT48ZW50cnk+VGhlIGhlaWdodCBvZiB0aGUgaW1hZ2UuIFRoZSBjYXJkIG1heSB1c2UgYSBzbWFsbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplIGlmIHRoaXMgc2l6ZSBpcyBub3QgYXZhaWxhYmxlLjwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5Png8L2VudHJ5PjxlbnRyeT4gICBUaGUgWCBwb3NpdGlvbiBvZiB0aGUgdG9wIGxlZnQgb2YgdGhlIHdpbmRvdy4gVGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgaXMgaW4gcGl4ZWxzIHJlbGF0aXZlIHRvIHRoZSBsZWZ0IGhhbmQgZWRnZSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpY3R1cmUuIE5vdCBhbGwgY2FyZHMgY2FuIGRpc3BsYXkgaW1hZ2VzIGFsaWduZWQgb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGFueSBwaXhlbCBib3VuZGFyeS4gSWYgdGhlIHBvc2l0aW9uIGlzIHVuc3VpdGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjYXJkIGFkanVzdHMgdGhlIGltYWdlIHJpZ2h0IGFuZCByZWR1Y2VzIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGguPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+eTwvZW50cnk+PGVudHJ5PiAgIFRoZSBZIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBvZiB0aGUgd2luZG93LiBUaGlzCi0gICAgICAgICAgICAgICAgICAgICAgICBpcyBjb3VudGVkIGluIHBpeGVscyByZWxhdGl2ZSB0byB0aGUgdG9wIGVkZ2Ugb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBwaWN0dXJlLiBBcyB3aXRoIHRoZSB3aWR0aCBpZiB0aGUgY2FyZCBjYW5ub3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgIHN0YXJ0aW5nIG9uIHRoaXMgbGluZSBpdCB3aWxsIGFkanVzdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy48L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5jaHJvbWFrZXk8L2VudHJ5PjxlbnRyeT5UaGUgY29sb3VyIChleHByZXNzZWQgaW4gUkdCMzIgZm9ybWF0KSBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWFrZXkgY29sb3VyIGlmIGNocm9tYSBrZXlpbmcgaXMgYmVpbmcgdXNlZC4gPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+Y2xpcHM8L2VudHJ5PjxlbnRyeT5BbiBhcnJheSBvZiByZWN0YW5nbGVzIHRoYXQgbXVzdCBub3QgYmUgZHJhd24KLQkJCW92ZXIuPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+Y2xpcGNvdW50PC9lbnRyeT48ZW50cnk+VGhlIG51bWJlciBvZiBjbGlwcyBpbiB0aGlzIGFycmF5LjwvZW50cnk+Ci0gICAgPC9yb3c+Ci0gICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotICAgIDxwYXJhPgotICAgICAgICBFYWNoIGNsaXAgaXMgYSBzdHJ1Y3QgdmlkZW9fY2xpcCB3aGljaCBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHMKLSAgIDwvcGFyYT4KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fY2xpcF9maWVsZHMiPjx0aXRsZT52aWRlb19jbGlwIGZpZWxkczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0gICAgICAgIDxlbnRyeT54LCB5PC9lbnRyeT48ZW50cnk+Q28tb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBkaXNwbGF5PC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+d2lkdGgsIGhlaWdodDwvZW50cnk+PGVudHJ5PldpZHRoIGFuZCBoZWlnaHQgaW4gcGl4ZWxzPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+bmV4dDwvZW50cnk+PGVudHJ5PkEgc3BhcmUgZmllbGQgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byB1c2U8L2VudHJ5PgotICAgIDwvcm93PgotICAgIDwvdGJvZHk+Ci0gICAgPC90Z3JvdXA+Ci0gICAgPC90YWJsZT4KLSAgICA8cGFyYT4KLSAgICAgICAgVGhlIGRyaXZlciBpcyByZXF1aXJlZCB0byBlbnN1cmUgaXQgYWx3YXlzIGRyYXdzIGluIHRoZSBhcmVhIHJlcXVlc3RlZCBvciBhICAgICAgICBzbWFsbGVyIGFyZWEsIGFuZCB0aGF0IGl0IG5ldmVyIGRyYXdzIGluIGFueSBvZiB0aGUgYXJlYXMgdGhhdCBhcmUgY2xpcHBlZC4KLSAgICAgICAgVGhpcyBtYXkgd2VsbCBtZWFuIGl0IGhhcyB0byBsZWF2ZSBhbG9uZS4gc21hbGwgYXJlYXMgdGhlIGFwcGxpY2F0aW9uIHdpc2hlZCB0byBiZQotICAgICAgICBkcmF3bi4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgT3VyIGV4YW1wbGUgY2FyZCB1c2VzIGNocm9tYWtleSBzbyBkb2VzIG5vdCBoYXZlIHRvIGFkZHJlc3MgbW9zdCBvZiB0aGUKLSAgICAgICAgY2xpcHBpbmcuICBXZSB3aWxsIGFkZCBhIHZpZGVvX3dpbmRvdyBzdHJ1Y3R1cmUgdG8gb3VyIGdsb2JhbCB2YXJpYWJsZXMgdG8KLSAgICAgICAgcmVtZW1iZXIgb3VyIHBhcmFtZXRlcnMsIGFzIHdlIGRpZCB3aXRoIHRoZSBmcmFtZSBidWZmZXIuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0dXSU46Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZywgJmFtcDtjYXB0dXJlX3dpbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNhcHR1cmVfd2luKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NXSU46Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX3dpbmRvdyB2OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi53aWR0aCAmZ3Q7IDY0MCB8fCB2LmhlaWdodCAmZ3Q7IDQ4MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2LndpZHRoICZsdDsgMTYgfHwgdi5oZWlnaHQgJmx0OyAxNikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9zZXRfa2V5KHYuY2hyb21ha2V5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3NldF93aW5kb3codik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJmFtcDtjYXB0dXJlX3dpbiwgJmFtcDt2LCBzaXplb2YodikpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZV93ID0gdi53aWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVfaCA9IHYuaGVpZ2h0OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIEJlY2F1c2Ugd2UgYXJlIHVzaW5nIENocm9tYWtleSBvdXIgc2V0dXAgaXMgZmFpcmx5IHNpbXBsZS4gTW9zdGx5IHdlIGhhdmUgdG8KLSAgICAgICAgY2hlY2sgdGhlIHZhbHVlcyBhcmUgc2FuZSBhbmQgbG9hZCB0aGVtIGludG8gdGhlIGNhcHR1cmUgY2FyZC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgV2l0aCBhbGwgdGhlIHNldHVwIGRvbmUgd2UgY2FuIG5vdyB0dXJuIG9uIHRoZSBhY3R1YWwgY2FwdHVyZS9vdmVybGF5LiBUaGlzCi0gICAgICAgIGlzIGRvbmUgd2l0aCB0aGUgVklESU9DQ0FQVFVSRSBpb2N0bC4gVGhpcyB0YWtlcyBhIHNpbmdsZSBpbnRlZ2VyIGFyZ3VtZW50Ci0gICAgICAgIHdoZXJlIDAgaXMgb24gYW5kIDEgaXMgb2ZmLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NDQVBUVVJFOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB2OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoZ2V0X3VzZXIodiwgKGludCAqKWFyZykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodj09MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfY2FwdHVyZV9vZmYoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FwdHVyZV9mYi53aWR0aCA9PSAwIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY2FwdHVyZV93ID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX2NhcHR1cmVfb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBXZSBncmFiIHRoZSBmbGFnIGZyb20gdXNlciBzcGFjZSBhbmQgZWl0aGVyIGVuYWJsZSBvciBkaXNhYmxlIGFjY29yZGluZyB0bwotICAgICAgICBpdHMgdmFsdWUuIFRoZXJlIGlzIG9uZSBzbWFsbCBjb3JuZXIgY2FzZSB3ZSBoYXZlIHRvIGNvbnNpZGVyIGhlcmUuIFN1cHBvc2UKLSAgICAgICAgdGhhdCB0aGUgY2FwdHVyZSB3YXMgcmVxdWVzdGVkIGJlZm9yZSB0aGUgdmlkZW8gd2luZG93IG9yIHRoZSBmcmFtZSBidWZmZXIKLSAgICAgICAgaGFkIGJlZW4gc2V0IHVwLiBJbiB0aG9zZSBjYXNlcyB0aGVyZSB3aWxsIGJlIHVuY29uZmlndXJlZCBmaWVsZHMgaW4gb3VyCi0gICAgICAgIGNhcmQgZGF0YSwgYXMgd2VsbCBhcyB1bmNvbmZpZ3VyZWQgaGFyZHdhcmUgc2V0dGluZ3MuIFdlIGNoZWNrIGZvciB0aGlzIGNhc2UgYW5kCi0gICAgICAgIHJldHVybiBhbiBlcnJvciBpZiB0aGUgZnJhbWUgYnVmZmVyIG9yIHRoZSBjYXB0dXJlIHdpbmRvdyB3aWR0aCBpcyB6ZXJvLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PSU9DVExDTUQ7Ci0gICAgICAgIH0KLX0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0KLSAgICAgICAgV2UgZG9uJ3QgbmVlZCB0byBzdXBwb3J0IGFueSBvdGhlciBpb2N0bHMsIHNvIGlmIHdlIGdldCB0aGlzIGZhciwgaXQgaXMgdGltZQotICAgICAgICB0byB0ZWxsIHRoZSB2aWRlbyBsYXllciB0aGF0IHdlIGRvbid0IG5vdyB3aGF0IHRoZSB1c2VyIGlzIHRhbGtpbmcgYWJvdXQuCi0gIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgPHNlY3QxIGlkPSJlbmR2aWQiPgotICA8dGl0bGU+T3RoZXIgRnVuY3Rpb25hbGl0eTwvdGl0bGU+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgVmlkZW80TGludXggbGF5ZXIgc3VwcG9ydHMgYWRkaXRpb25hbCBmZWF0dXJlcywgaW5jbHVkaW5nIGEgaGlnaAotICAgICAgICBwZXJmb3JtYW5jZSBtbWFwKCkgYmFzZWQgY2FwdHVyZSBtb2RlIGFuZCBjYXB0dXJpbmcgcGFydCBvZiB0aGUgaW1hZ2UuIAotICAgICAgICBUaGVzZSBmZWF0dXJlcyBhcmUgb3V0IG9mIHRoZSBzY29wZSBvZiB0aGUgYm9vay4gIFlvdSBzaG91bGQgaG93ZXZlciBoYXZlIGVub3VnaCAKLSAgICAgICAgZXhhbXBsZSBjb2RlIHRvIGltcGxlbWVudCBtb3N0IHNpbXBsZSB2aWRlbzRsaW51eCBkZXZpY2VzIGZvciByYWRpbyBhbmQgVFYKLSAgICAgICAgY2FyZHMuCi0gIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgPC9jaGFwdGVyPgotICA8Y2hhcHRlciBpZD0iYnVncyI+Ci0gICAgIDx0aXRsZT5Lbm93biBCdWdzIEFuZCBBc3N1bXB0aW9uczwvdGl0bGU+Ci0gIDxwYXJhPgotICA8dmFyaWFibGVsaXN0PgotICAgIDx2YXJsaXN0ZW50cnk+PHRlcm0+TXVsdGlwbGUgT3BlbnM8L3Rlcm0+Ci0gICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgICAgICBUaGUgZHJpdmVyIGFzc3VtZXMgbXVsdGlwbGUgb3BlbnMgc2hvdWxkIG5vdCBiZSBhbGxvd2VkLiBBIGRyaXZlcgotICAgICAgICBjYW4gd29yayBhcm91bmQgdGhpcyBidXQgbm90IGNsZWFubHkuCi0gICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci0KLSAgICA8dmFybGlzdGVudHJ5Pjx0ZXJtPkFQSSBEZWZpY2llbmNpZXM8L3Rlcm0+Ci0gICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPgotICAgICAgICBUaGUgZXhpc3RpbmcgQVBJIHBvb3JseSByZWZsZWN0cyBjb21wcmVzc2lvbiBjYXBhYmxlIGRldmljZXMuIFRoZXJlCi0gICAgICAgIGFyZSBwbGFucyBhZm9vdCB0byBtZXJnZSBWNEwsIFY0TDIgYW5kIHNvbWUgb3RoZXIgaWRlYXMgaW50byBhCi0gICAgICAgIGJldHRlciBpbnRlcmZhY2UuCi0gICAgPC9wYXJhPgotICAgIDwvbGlzdGl0ZW0+PC92YXJsaXN0ZW50cnk+Ci0gIDwvdmFyaWFibGVsaXN0PgotCi0gIDwvcGFyYT4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJwdWJmdW5jdGlvbnMiPgotICAgICA8dGl0bGU+UHVibGljIEZ1bmN0aW9ucyBQcm92aWRlZDwvdGl0bGU+Ci0hRWRyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYwotICA8L2NoYXB0ZXI+Ci0KLTwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vSE9XVE8gYi9Eb2N1bWVudGF0aW9uL0hPV1RPCmluZGV4IDQ4YTM5NTUuLjg0OTVmYzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vSE9XVE8KKysrIGIvRG9jdW1lbnRhdGlvbi9IT1dUTwpAQCAtMTEyLDcgKzExMiw3IEBACiAKICAgICBPdGhlciBleGNlbGxlbnQgZGVzY3JpcHRpb25zIG9mIGhvdyB0byBjcmVhdGUgcGF0Y2hlcyBwcm9wZXJseSBhcmU6CiAJIlRoZSBQZXJmZWN0IFBhdGNoIgotCQlodHRwOi8vd3d3LnppcC5jb20uYXUvfmFrcG0vbGludXgvcGF0Y2hlcy9zdHVmZi90cHAudHh0CisJCWh0dHA6Ly91c2Vyd2ViLmtlcm5lbC5vcmcvfmFrcG0vc3R1ZmYvdHBwLnR4dAogCSJMaW51eCBrZXJuZWwgcGF0Y2ggc3VibWlzc2lvbiBmb3JtYXQiCiAJCWh0dHA6Ly9saW51eC55eXoudXMvcGF0Y2gtZm9ybWF0Lmh0bWwKIApAQCAtNjIwLDcgKzYyMCw3IEBACiBGb3IgbW9yZSBkZXRhaWxzIG9uIHdoYXQgdGhpcyBzaG91bGQgYWxsIGxvb2sgbGlrZSwgcGxlYXNlIHNlZSB0aGUKIENoYW5nZUxvZyBzZWN0aW9uIG9mIHRoZSBkb2N1bWVudDoKICAgIlRoZSBQZXJmZWN0IFBhdGNoIgotICAgICAgaHR0cDovL3d3dy56aXAuY29tLmF1L35ha3BtL2xpbnV4L3BhdGNoZXMvc3R1ZmYvdHBwLnR4dAorICAgICAgaHR0cDovL3VzZXJ3ZWIua2VybmVsLm9yZy9+YWtwbS9zdHVmZi90cHAudHh0CiAKIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1NBSy50eHQgYi9Eb2N1bWVudGF0aW9uL1NBSy50eHQKaW5kZXggYjkwMTljYS4uNzRiZTE0NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TQUsudHh0CisrKyBiL0RvY3VtZW50YXRpb24vU0FLLnR4dApAQCAtMSw1ICsxLDUgQEAKIExpbnV4IDIuNC4yIFNlY3VyZSBBdHRlbnRpb24gS2V5IChTQUspIGhhbmRsaW5nCi0xOCBNYXJjaCAyMDAxLCBBbmRyZXcgTW9ydG9uIDxha3BtQG9zZGwub3JnPgorMTggTWFyY2ggMjAwMSwgQW5kcmV3IE1vcnRvbgogCiBBbiBvcGVyYXRpbmcgc3lzdGVtJ3MgU2VjdXJlIEF0dGVudGlvbiBLZXkgaXMgYSBzZWN1cml0eSB0b29sIHdoaWNoIGlzCiBwcm92aWRlZCBhcyBwcm90ZWN0aW9uIGFnYWluc3QgdHJvamFuIHBhc3N3b3JkIGNhcHR1cmluZyBwcm9ncmFtcy4gIEl0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdCBiL0RvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0CmluZGV4IDIxZjA3OTUuLmFjNWUwYjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0CisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0CkBAIC04NSwzICs4NSw2IEBACiAyMzogVGVzdGVkIGFmdGVyIGl0IGhhcyBiZWVuIG1lcmdlZCBpbnRvIHRoZSAtbW0gcGF0Y2hzZXQgdG8gbWFrZSBzdXJlCiAgICAgdGhhdCBpdCBzdGlsbCB3b3JrcyB3aXRoIGFsbCBvZiB0aGUgb3RoZXIgcXVldWVkIHBhdGNoZXMgYW5kIHZhcmlvdXMKICAgICBjaGFuZ2VzIGluIHRoZSBWTSwgVkZTLCBhbmQgb3RoZXIgc3Vic3lzdGVtcy4KKworMjQ6IEFsbCBtZW1vcnkgYmFycmllcnMge2UuZy4sIGJhcnJpZXIoKSwgcm1iKCksIHdtYigpfSBuZWVkIGEgY29tbWVudCBpbiB0aGUKKyAgICBzb3VyY2UgY29kZSB0aGF0IGV4cGxhaW5zIHRoZSBsb2dpYyBvZiB3aGF0IHRoZXkgYXJlIGRvaW5nIGFuZCB3aHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVycwppbmRleCAyNGYyZWI0Li45OWU3MmE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKQEAgLTQxLDcgKzQxLDcgQEAKIExpbnV4IDIuNjoKIAlUaGUgc2FtZSBydWxlcyBhcHBseSBhcyAyLjQgZXhjZXB0IHRoYXQgeW91IHNob3VsZCBmb2xsb3cgbGludXgta2VybmVsCiAJdG8gdHJhY2sgY2hhbmdlcyBpbiBBUEkncy4gVGhlIGZpbmFsIGNvbnRhY3QgcG9pbnQgZm9yIExpbnV4IDIuNgotCXN1Ym1pc3Npb25zIGlzIEFuZHJldyBNb3J0b24gPGFrcG1Ab3NkbC5vcmc+LgorCXN1Ym1pc3Npb25zIGlzIEFuZHJldyBNb3J0b24uCiAKIFdoYXQgQ3JpdGVyaWEgRGV0ZXJtaW5lIEFjY2VwdGFuY2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCmluZGV4IGY3OWFkOWYuLmYzMDlkM2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwpAQCAtNzcsNyArNzcsNyBAQAogaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvcXVpbHQKIAogQW5kcmV3IE1vcnRvbidzIHBhdGNoIHNjcmlwdHM6Ci1odHRwOi8vd3d3LnppcC5jb20uYXUvfmFrcG0vbGludXgvcGF0Y2hlcy8KK2h0dHA6Ly91c2Vyd2ViLmtlcm5lbC5vcmcvfmFrcG0vc3R1ZmYvcGF0Y2gtc2NyaXB0cy50YXIuZ3oKIEluc3RlYWQgb2YgdGhlc2Ugc2NyaXB0cywgcXVpbHQgaXMgdGhlIHJlY29tbWVuZGVkIHBhdGNoIG1hbmFnZW1lbnQKIHRvb2wgKHNlZSBhYm92ZSkuCiAKQEAgLTQwNSw3ICs0MDUsNyBAQAogaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHRoZSBkaXNjdXNzaW9uCiAKIAotMTQpIFVzaW5nIFRlc3QtYnk6IGFuZCBSZXZpZXdlZC1ieToKKzE0KSBVc2luZyBUZXN0ZWQtYnk6IGFuZCBSZXZpZXdlZC1ieToKIAogQSBUZXN0ZWQtYnk6IHRhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgcGF0Y2ggaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlc3RlZCAoaW4KIHNvbWUgZW52aXJvbm1lbnQpIGJ5IHRoZSBwZXJzb24gbmFtZWQuICBUaGlzIHRhZyBpbmZvcm1zIG1haW50YWluZXJzIHRoYXQKQEAgLTY1Myw3ICs2NTMsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBBbmRyZXcgTW9ydG9uLCAiVGhlIHBlcmZlY3QgcGF0Y2giICh0cHApLgotICA8aHR0cDovL3d3dy56aXAuY29tLmF1L35ha3BtL2xpbnV4L3BhdGNoZXMvc3R1ZmYvdHBwLnR4dD4KKyAgPGh0dHA6Ly91c2Vyd2ViLmtlcm5lbC5vcmcvfmFrcG0vc3R1ZmYvdHBwLnR4dD4KIAogSmVmZiBHYXJ6aWssICJMaW51eCBrZXJuZWwgcGF0Y2ggc3VibWlzc2lvbiBmb3JtYXQiLgogICA8aHR0cDovL2xpbnV4Lnl5ei51cy9wYXRjaC1mb3JtYXQuaHRtbD4KQEAgLTY3Miw0ICs2NzIsOSBAQAogCiBMaW51cyBUb3J2YWxkcydzIG1haWwgb24gdGhlIGNhbm9uaWNhbCBwYXRjaCBmb3JtYXQ6CiAgIDxodHRwOi8vbGttbC5vcmcvbGttbC8yMDA1LzQvNy8xODM+CisKK0FuZGkgS2xlZW4sICJPbiBzdWJtaXR0aW5nIGtlcm5lbCBwYXRjaGVzIgorICBTb21lIHN0cmF0ZWdpZXMgdG8gZ2V0IGRpZmZpY3VsdCBvciBjb250cm92ZXJzYWwgY2hhbmdlcyBpbi4KKyAgaHR0cDovL2hhbG9iYXRlcy5kZS9vbi1zdWJtaXR0aW5nLXBhdGNoZXMucGRmCisKIC0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL2tnZGIudHh0IGIvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi9rZ2RiLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRmNmE0OC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL2tnZGIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLQkJCUEgU2ltcGxlIEd1aWRlIHRvIENvbmZpZ3VyZSBLR0RCCi0KLQkJCVNvbmljIFpoYW5nIDxzb25pYy56aGFuZ0BhbmFsb2cuY29tPgotCQkJCUF1Zy4gMjR0aCAyMDA2Ci0KLQotVGhpcyBLR0RCIHBhdGNoIGVuYWJsZXMgdGhlIGtlcm5lbCBkZXZlbG9wZXIgdG8gZG8gc291cmNlIGxldmVsIGRlYnVnZ2luZyBvbgotdGhlIGtlcm5lbCBmb3IgdGhlIEJsYWNrZmluIGFyY2hpdGVjdHVyZS4gIFRoZSBkZWJ1Z2dpbmcgd29ya3Mgb3ZlciBlaXRoZXIgdGhlCi1ldGhlcm5ldCBpbnRlcmZhY2Ugb3Igb25lIG9mIHRoZSB1YXJ0cy4gIEJvdGggc29mdHdhcmUgYnJlYWtwb2ludHMgYW5kCi1oYXJkd2FyZSBicmVha3BvaW50cyBhcmUgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbi4KLWh0dHA6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWtnZGIKLQotCi0yIGtub3duIGlzc3VlczoKLTEuIFRoaXMgYnVnOgotICAgICAgIGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy90cmFja2VyL2luZGV4LnBocD9mdW5jPWRldGFpbCZhaWQ9NTQ0Jmdyb3VwX2lkPTE4JmF0aWQ9MTQ1Ci0gICBUaGUgR0RCIGNsaWVudCBmb3IgQmxhY2tmaW4gdUNsaW51eCBjYXVzZXMgaW5jb3JyZWN0IHZhbHVlcyBvZiBsb2NhbAotICAgdmFyaWFibGVzIHRvIGJlIGRpc3BsYXllZCB3aGVuIHRoZSB1c2VyIGJyZWFrcyB0aGUgcnVubmluZyBvZiBrZXJuZWwgaW4gR0RCLgotMi4gQmVjYXVzZSBvZiBhIGhhcmR3YXJlIGJ1ZyBpbiBCbGFja2ZpbiA1MzMgdjEuMC4zOgotICAgICAgIDA1MDAwMDY3IC0gV2F0Y2hwb2ludHMgKEhhcmR3YXJlIEJyZWFrcG9pbnRzKSBhcmUgbm90IHN1cHBvcnRlZAotICAgSGFyZHdhcmUgYnJlYWtwb2ludHMgY2Fubm90IGJlIHNldCBwcm9wZXJseS4KLQotCi1EZWJ1ZyBvdmVyIEV0aGVybmV0OgotIAotMS4gQ29tcGlsZSBhbmQgaW5zdGFsbCB0aGUgY3Jvc3MgcGxhdGZvcm0gdmVyc2lvbiBvZiBnZGIgZm9yIGJsYWNrZmluLCB3aGljaAotICAgY2FuIGJlIGZvdW5kIGF0ICQoQklOUk9PVCkvYmZpbi1lbGYtZ2RiLgotCi0yLiBBcHBseSB0aGlzIHBhdGNoIHRvIHRoZSAyLjYueCBrZXJuZWwuICBTZWxlY3QgdGhlIG1lbnVjb25maWcgb3B0aW9uIHVuZGVyCi0gICAiS2VybmVsIGhhY2tpbmciIC0+ICJLZXJuZWwgZGVidWdnaW5nIiAtPiAiS0dEQjoga2VybmVsIGRlYnVnIHdpdGggcmVtb3RlIGdkYiIuCi0gICBXaXRoIHRoaXMgc2VsZWN0ZWQsIG9wdGlvbiAiRnVsbCBTeW1ib2xpYy9Tb3VyY2UgRGVidWdnaW5nIHN1cHBvcnQiIGFuZCAKLSAgICJDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBmcmFtZSBwb2ludGVycyIgYXJlIGFsc28gc2VsZWN0ZWQuCi0KLTMuIFNlbGVjdCBvcHRpb24gIktHREI6IGNvbm5lY3Qgb3ZlciAoRXRoZXJuZXQpIi4gIEFkZCAia2dkYm9lPUB0YXJnZXQtSVAvLEBob3N0LUlQLyIgdG8KLSAgIHRoZSBvcHRpb24gIkNvbXBpbGVkLWluIEtlcm5lbCBCb290IFBhcmFtZXRlciIgdW5kZXIgIktlcm5lbCBoYWNraW5nIi4KLQotNC4gQ29ubmVjdCBtaW5pY29tIHRvIHRoZSBzZXJpYWwgcG9ydCBhbmQgYm9vdCB0aGUga2VybmVsIGltYWdlLgotCi01LiBDb25maWd1cmUgdGhlIElQICIvPiBpZmNvbmZpZyBldGgwIHRhcmdldC1JUCIKLQotNi4gU3RhcnQgR0RCIGNsaWVudCAiYmZpbi1lbGYtZ2RiIHZtbGludXgiLgotCi03LiBDb25uZWN0IHRvIHRoZSB0YXJnZXQgIihnZGIpIHRhcmdldCByZW1vdGUgdWRwOnRhcmdldC1JUDo2NDQzIi4KLQotOC4gU2V0IHNvZnR3YXJlIGJyZWFrcG9pbnQgIihnZGIpIGJyZWFrIHN5c19vcGVuIi4KLQotOS4gQ29udGludWUgIihnZGIpIGMiLgotCi0xMC4gUnVuIGxzIGluIHRoZSB0YXJnZXQgY29uc29sZSAiLz4gbHMiLgotCi0xMS4gQnJlYWtwb2ludCBoaXRzLiAiQnJlYWtwb2ludCAxOiBzeXNfb3BlbiguLi4iCi0KLTEyLiBEaXNwbGF5IGxvY2FsIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb24gcGFyYW10ZXJzLgotICAgICgqKSBUaGlzIG9wZXJhdGlvbiBnaXZlcyB3cm9uZyByZXN1bHRzLCBzZWUga25vd24gaXNzdWUgMS4KLQotMTMuIFNpbmdsZSBzdGVwcGluZyAiKGdkYikgc2kiLgotCi0xNC4gUmVtb3ZlIGJyZWFrcG9pbnQgMS4gIihnZGIpIGRlbCAxIgotCi0xNS4gU2V0IGhhcmR3YXJlIGJyZWFrcG9pbnQgIihnZGIpIGhicmVhayBzeXNfb3BlbiIuCi0KLTE2LiBDb250aW51ZSAiKGdkYikgYyIuCi0KLTE3LiBSdW4gbHMgaW4gdGhlIHRhcmdldCBjb25zb2xlICIvPiBscyIuCi0KLTE4LiBIYXJkd2FyZSBicmVha3BvaW50IGhpdHMuICJCcmVha3BvaW50IDE6IHN5c19vcGVuKC4uLiIuCi0gICAgKCopIFRoaXMgaGFyZHdhcmUgYnJlYWtwb2ludCB3aWxsIG5vdCBiZSBoaXQsIHNlZSBrbm93biBpc3N1ZSAyLgotCi0xOS4gQ29udGludWUgIihnZGIpIGMiLgotCi0yMC4gSW50ZXJydXB0IHRoZSB0YXJnZXQgaW4gR0RCICJDdHJsK0MiLgotCi0yMS4gRGV0YWNoIGZyb20gdGhlIHRhcmdldCAiKGdkYikgZGV0YWNoIi4KLQotMjIuIEV4aXQgR0RCICIoZ2RiKSBxdWl0Ii4KLQotCi1EZWJ1ZyBvdmVyIHRoZSBVQVJUOgotCi0xLiBDb21waWxlIGFuZCBpbnN0YWxsIHRoZSBjcm9zcyBwbGF0Zm9ybSB2ZXJzaW9uIG9mIGdkYiBmb3IgYmxhY2tmaW4sIHdoaWNoCi0gICBjYW4gYmUgZm91bmQgYXQgJChCSU5ST09UKS9iZmluLWVsZi1nZGIuCi0KLTIuIEFwcGx5IHRoaXMgcGF0Y2ggdG8gdGhlIDIuNi54IGtlcm5lbC4gIFNlbGVjdCB0aGUgbWVudWNvbmZpZyBvcHRpb24gdW5kZXIKLSAgICJLZXJuZWwgaGFja2luZyIgLT4gIktlcm5lbCBkZWJ1Z2dpbmciIC0+ICJLR0RCOiBrZXJuZWwgZGVidWcgd2l0aCByZW1vdGUgZ2RiIi4KLSAgIFdpdGggdGhpcyBzZWxlY3RlZCwgb3B0aW9uICJGdWxsIFN5bWJvbGljL1NvdXJjZSBEZWJ1Z2dpbmcgc3VwcG9ydCIgYW5kIAotICAgIkNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIGZyYW1lIHBvaW50ZXJzIiBhcmUgYWxzbyBzZWxlY3RlZC4KLQotMy4gU2VsZWN0IG9wdGlvbiAiS0dEQjogY29ubmVjdCBvdmVyIChVQVJUKSIuICBTZXQgIktHREI6IFVBUlQgcG9ydCBudW1iZXIiIHRvIGJlCi0gICBhIGRpZmZlcmVudCBvbmUgZnJvbSB0aGUgY29uc29sZS4gIERvbid0IGZvcmdldCB0byBjaGFuZ2UgdGhlIG1vZGUgb2YKLSAgIGJsYWNrZmluIHNlcmlhbCBkcml2ZXIgdG8gUElPLiAgT3RoZXJ3aXNlIGtnZGIgd29ya3MgaW5jb3JyZWN0bHkgb24gVUFSVC4KLSAKLTQuIElmIHlvdSB3YW50IGNvbm5lY3QgdG8ga2dkYiB3aGVuIHRoZSBrZXJuZWwgYm9vdHMsIGVuYWJsZQotICAgIktHREI6IFdhaXQgZm9yIGdkYiBjb25uZWN0aW9uIGVhcmx5IiAKLQotNS4gQ29tcGlsZSBrZXJuZWwuCi0KLTYuIENvbm5lY3QgbWluaWNvbSB0byB0aGUgc2VyaWFsIHBvcnQgb2YgdGhlIGNvbnNvbGUgYW5kIGJvb3QgdGhlIGtlcm5lbCBpbWFnZS4KLQotNy4gU3RhcnQgR0RCIGNsaWVudCAiYmZpbi1lbGYtZ2RiIHZtbGludXgiLgotCi04LiBTZXQgdGhlIGJhdWQgcmF0ZSBpbiBHREIgIihnZGIpIHNldCByZW1vdGViYXVkIDU3NjAwIi4KLQotOS4gQ29ubmVjdCB0byB0aGUgdGFyZ2V0IG9uIHRoZSBzZWNvbmQgc2VyaWFsIHBvcnQgIihnZGIpIHRhcmdldCByZW1vdGUgL2Rldi90dHlTMSIuCi0KLTEwLiBTZXQgc29mdHdhcmUgYnJlYWtwb2ludCAiKGdkYikgYnJlYWsgc3lzX29wZW4iLgotCi0xMS4gQ29udGludWUgIihnZGIpIGMiLiAKLQotMTIuIFJ1biBscyBpbiB0aGUgdGFyZ2V0IGNvbnNvbGUgIi8+IGxzIi4gCi0KLTEzLiBBIGJyZWFrcG9pbnQgaXMgaGl0LiAiQnJlYWtwb2ludCAxOiBzeXNfb3BlbiguLi4iCi0KLTE0LiBBbGwgb3RoZXIgb3BlcmF0aW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhhdCBpbiBLR0RCIG92ZXIgRXRoZXJuZXQuIAotCi0KLURlYnVnIG92ZXIgdGhlIHNhbWUgVUFSVCBhcyBjb25zb2xlOgotCi0xLiBDb21waWxlIGFuZCBpbnN0YWxsIHRoZSBjcm9zcyBwbGF0Zm9ybSB2ZXJzaW9uIG9mIGdkYiBmb3IgYmxhY2tmaW4sIHdoaWNoCi0gICBjYW4gYmUgZm91bmQgYXQgJChCSU5ST09UKS9iZmluLWVsZi1nZGIuCi0KLTIuIEFwcGx5IHRoaXMgcGF0Y2ggdG8gdGhlIDIuNi54IGtlcm5lbC4gIFNlbGVjdCB0aGUgbWVudWNvbmZpZyBvcHRpb24gdW5kZXIKLSAgICJLZXJuZWwgaGFja2luZyIgLT4gIktlcm5lbCBkZWJ1Z2dpbmciIC0+ICJLR0RCOiBrZXJuZWwgZGVidWcgd2l0aCByZW1vdGUgZ2RiIi4KLSAgIFdpdGggdGhpcyBzZWxlY3RlZCwgb3B0aW9uICJGdWxsIFN5bWJvbGljL1NvdXJjZSBEZWJ1Z2dpbmcgc3VwcG9ydCIgYW5kIAotICAgIkNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIGZyYW1lIHBvaW50ZXJzIiBhcmUgYWxzbyBzZWxlY3RlZC4KLQotMy4gU2VsZWN0IG9wdGlvbiAiS0dEQjogY29ubmVjdCBvdmVyIFVBUlQiLiAgU2V0ICJLR0RCOiBVQVJUIHBvcnQgbnVtYmVyIiB0byBjb25zb2xlLgotICAgRG9uJ3QgZm9yZ2V0IHRvIGNoYW5nZSB0aGUgbW9kZSBvZiBibGFja2ZpbiBzZXJpYWwgZHJpdmVyIHRvIFBJTy4KLSAgIE90aGVyd2lzZSBrZ2RiIHdvcmtzIGluY29ycmVjdGx5IG9uIFVBUlQuCi0gCi00LiBJZiB5b3Ugd2FudCBjb25uZWN0IHRvIGtnZGIgd2hlbiB0aGUga2VybmVsIGJvb3RzLCBlbmFibGUKLSAgICJLR0RCOiBXYWl0IGZvciBnZGIgY29ubmVjdGlvbiBlYXJseSIgCi0KLTUuIENvbm5lY3QgbWluaWNvbSB0byB0aGUgc2VyaWFsIHBvcnQgYW5kIGJvb3QgdGhlIGtlcm5lbCBpbWFnZS4gCi0KLTYuIChPcHRpb25hbCkgQXNrIHRhcmdldCB0byB3YWl0IGZvciBnZGIgY29ubmVjdGlvbiBieSBlbnRlcmluZyBDdHJsK0EuIEluIG1pbmljb20sIHlvdSBzaG91bGQgZW50ZXIgQ3RybCtBK0EuCi0KLTcuIFN0YXJ0IEdEQiBjbGllbnQgImJmaW4tZWxmLWdkYiB2bWxpbnV4Ii4KLQotOC4gU2V0IHRoZSBiYXVkIHJhdGUgaW4gR0RCICIoZ2RiKSBzZXQgcmVtb3RlYmF1ZCA1NzYwMCIuCi0KLTkuIENvbm5lY3QgdG8gdGhlIHRhcmdldCAiKGdkYikgdGFyZ2V0IHJlbW90ZSAvZGV2L3R0eVMwIi4KLQotMTAuIFNldCBzb2Z0d2FyZSBicmVha3BvaW50ICIoZ2RiKSBicmVhayBzeXNfb3BlbiIuCi0KLTExLiBDb250aW51ZSAiKGdkYikgYyIuIFRoZW4gZW50ZXIgQ3RybCtDIHR3aWNlIHRvIHN0b3AgR0RCIGNvbm5lY3Rpb24uCi0KLTEyLiBSdW4gbHMgaW4gdGhlIHRhcmdldCBjb25zb2xlICIvPiBscyIuIER1bW15IHN0cmluZyBjYW4gYmUgc2VlbiBvbiB0aGUgY29uc29sZS4KLQotMTMuIFRoZW4gY29ubmVjdCB0aGUgZ2RiIHRvIHRhcmdldCBhZ2Fpbi4gIihnZGIpIHRhcmdldCByZW1vdGUgL2Rldi90dHlTMCIuCi0gICAgTm93IHlvdSB3aWxsIGZpbmQgYSBicmVha3BvaW50IGlzIGhpdC4gIkJyZWFrcG9pbnQgMTogc3lzX29wZW4oLi4uIgotCi0xNC4gQWxsIG90aGVyIG9wZXJhdGlvbnMgYXJlIHRoZSBzYW1lIGFzIHRoYXQgaW4gS0dEQiBvdmVyIEV0aGVybmV0LiAgVGhlIG9ubHkKLSAgICBkaWZmZXJlbmNlIGlzIHRoYXQgYWZ0ZXIgY29udGludWUgY29tbWFuZCBpbiBHREIsIHBsZWFzZSBzdG9wIEdEQgotICAgIGNvbm5lY3Rpb24gYnkgMiAiQ3RybCtDInMgYW5kIGNvbm5lY3QgYWdhaW4gYWZ0ZXIgYnJlYWtwb2ludHMgYXJlIGhpdCBvcgotICAgIEN0cmwrQSBpcyBlbnRlcmVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9kYXRhLWludGVncml0eS50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2RhdGEtaW50ZWdyaXR5LnR4dAppbmRleCBlOWRjOGQ4Li5lOGNhMDQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2RhdGEtaW50ZWdyaXR5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2RhdGEtaW50ZWdyaXR5LnR4dApAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgICByZXRyaWV2ZSB0aGUgdGFnIGJ1ZmZlciB1c2luZyBiaW9faW50ZWdyaXR5X2dldF90YWcoKS4KIAogCi02LjMgUEFTU0lORyBFWElTVElORyBJTlRFR1JJVFkgTUVUQURBVEEKKzUuMyBQQVNTSU5HIEVYSVNUSU5HIElOVEVHUklUWSBNRVRBREFUQQogCiAgICAgRmlsZXN5c3RlbXMgdGhhdCBlaXRoZXIgZ2VuZXJhdGUgdGhlaXIgb3duIGludGVncml0eSBtZXRhZGF0YSBvcgogICAgIGFyZSBjYXBhYmxlIG9mIHRyYW5zZmVycmluZyBJTUQgZnJvbSB1c2VyIHNwYWNlIGNhbiB1c2UgdGhlCkBAIC0yODMsNyArMjgzLDcgQEAKICAgICAgIGludGVncml0eSB1cG9uIGNvbXBsZXRpb24uCiAKIAotNi40IFJFR0lTVEVSSU5HIEEgQkxPQ0sgREVWSUNFIEFTIENBUEFCTEUgT0YgRVhDSEFOR0lORyBJTlRFR1JJVFkKKzUuNCBSRUdJU1RFUklORyBBIEJMT0NLIERFVklDRSBBUyBDQVBBQkxFIE9GIEVYQ0hBTkdJTkcgSU5URUdSSVRZCiAgICAgTUVUQURBVEEKIAogICAgIFRvIGVuYWJsZSBpbnRlZ3JpdHkgZXhjaGFuZ2Ugb24gYSBibG9jayBkZXZpY2UgdGhlIGdlbmRpc2sgbXVzdCBiZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZnJlZXplci1zdWJzeXN0ZW0udHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2ZyZWV6ZXItc3Vic3lzdGVtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTBhYjU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2ZyZWV6ZXItc3Vic3lzdGVtLnR4dApAQCAtMCwwICsxLDk5IEBACisJVGhlIGNncm91cCBmcmVlemVyIGlzIHVzZWZ1bCB0byBiYXRjaCBqb2IgbWFuYWdlbWVudCBzeXN0ZW0gd2hpY2ggc3RhcnQKK2FuZCBzdG9wIHNldHMgb2YgdGFza3MgaW4gb3JkZXIgdG8gc2NoZWR1bGUgdGhlIHJlc291cmNlcyBvZiBhIG1hY2hpbmUKK2FjY29yZGluZyB0byB0aGUgZGVzaXJlcyBvZiBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yLiBUaGlzIHNvcnQgb2YgcHJvZ3JhbQoraXMgb2Z0ZW4gdXNlZCBvbiBIUEMgY2x1c3RlcnMgdG8gc2NoZWR1bGUgYWNjZXNzIHRvIHRoZSBjbHVzdGVyIGFzIGEKK3dob2xlLiBUaGUgY2dyb3VwIGZyZWV6ZXIgdXNlcyBjZ3JvdXBzIHRvIGRlc2NyaWJlIHRoZSBzZXQgb2YgdGFza3MgdG8KK2JlIHN0YXJ0ZWQvc3RvcHBlZCBieSB0aGUgYmF0Y2ggam9iIG1hbmFnZW1lbnQgc3lzdGVtLiBJdCBhbHNvIHByb3ZpZGVzCithIG1lYW5zIHRvIHN0YXJ0IGFuZCBzdG9wIHRoZSB0YXNrcyBjb21wb3NpbmcgdGhlIGpvYi4KKworCVRoZSBjZ3JvdXAgZnJlZXplciB3aWxsIGFsc28gYmUgdXNlZnVsIGZvciBjaGVja3BvaW50aW5nIHJ1bm5pbmcgZ3JvdXBzCitvZiB0YXNrcy4gVGhlIGZyZWV6ZXIgYWxsb3dzIHRoZSBjaGVja3BvaW50IGNvZGUgdG8gb2J0YWluIGEgY29uc2lzdGVudAoraW1hZ2Ugb2YgdGhlIHRhc2tzIGJ5IGF0dGVtcHRpbmcgdG8gZm9yY2UgdGhlIHRhc2tzIGluIGEgY2dyb3VwIGludG8gYQorcXVpZXNjZW50IHN0YXRlLiBPbmNlIHRoZSB0YXNrcyBhcmUgcXVpZXNjZW50IGFub3RoZXIgdGFzayBjYW4KK3dhbGsgL3Byb2Mgb3IgaW52b2tlIGEga2VybmVsIGludGVyZmFjZSB0byBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitxdWllc2NlZCB0YXNrcy4gQ2hlY2twb2ludGVkIHRhc2tzIGNhbiBiZSByZXN0YXJ0ZWQgbGF0ZXIgc2hvdWxkIGEKK3JlY292ZXJhYmxlIGVycm9yIG9jY3VyLiBUaGlzIGFsc28gYWxsb3dzIHRoZSBjaGVja3BvaW50ZWQgdGFza3MgdG8gYmUKK21pZ3JhdGVkIGJldHdlZW4gbm9kZXMgaW4gYSBjbHVzdGVyIGJ5IGNvcHlpbmcgdGhlIGdhdGhlcmVkIGluZm9ybWF0aW9uCit0byBhbm90aGVyIG5vZGUgYW5kIHJlc3RhcnRpbmcgdGhlIHRhc2tzIHRoZXJlLgorCisJU2VxdWVuY2VzIG9mIFNJR1NUT1AgYW5kIFNJR0NPTlQgYXJlIG5vdCBhbHdheXMgc3VmZmljaWVudCBmb3Igc3RvcHBpbmcKK2FuZCByZXN1bWluZyB0YXNrcyBpbiB1c2Vyc3BhY2UuIEJvdGggb2YgdGhlc2Ugc2lnbmFscyBhcmUgb2JzZXJ2YWJsZQorZnJvbSB3aXRoaW4gdGhlIHRhc2tzIHdlIHdpc2ggdG8gZnJlZXplLiBXaGlsZSBTSUdTVE9QIGNhbm5vdCBiZSBjYXVnaHQsCitibG9ja2VkLCBvciBpZ25vcmVkIGl0IGNhbiBiZSBzZWVuIGJ5IHdhaXRpbmcgb3IgcHRyYWNpbmcgcGFyZW50IHRhc2tzLgorU0lHQ09OVCBpcyBlc3BlY2lhbGx5IHVuc3VpdGFibGUgc2luY2UgaXQgY2FuIGJlIGNhdWdodCBieSB0aGUgdGFzay4gQW55Citwcm9ncmFtcyBkZXNpZ25lZCB0byB3YXRjaCBmb3IgU0lHU1RPUCBhbmQgU0lHQ09OVCBjb3VsZCBiZSBicm9rZW4gYnkKK2F0dGVtcHRpbmcgdG8gdXNlIFNJR1NUT1AgYW5kIFNJR0NPTlQgdG8gc3RvcCBhbmQgcmVzdW1lIHRhc2tzLiBXZSBjYW4KK2RlbW9uc3RyYXRlIHRoaXMgcHJvYmxlbSB1c2luZyBuZXN0ZWQgYmFzaCBzaGVsbHM6CisKKwkkIGVjaG8gJCQKKwkxNjY0NAorCSQgYmFzaAorCSQgZWNobyAkJAorCTE2NjkwCisKKwlGcm9tIGEgc2Vjb25kLCB1bnJlbGF0ZWQgYmFzaCBzaGVsbDoKKwkkIGtpbGwgLVNJR1NUT1AgMTY2OTAKKwkkIGtpbGwgLVNJR0NPTlQgMTY5OTAKKworCTxhdCB0aGlzIHBvaW50IDE2OTkwIGV4aXRzIGFuZCBjYXVzZXMgMTY2NDQgdG8gZXhpdCB0b28+CisKKwlUaGlzIGhhcHBlbnMgYmVjYXVzZSBiYXNoIGNhbiBvYnNlcnZlIGJvdGggc2lnbmFscyBhbmQgY2hvb3NlIGhvdyBpdAorcmVzcG9uZHMgdG8gdGhlbS4KKworCUFub3RoZXIgZXhhbXBsZSBvZiBhIHByb2dyYW0gd2hpY2ggY2F0Y2hlcyBhbmQgcmVzcG9uZHMgdG8gdGhlc2UKK3NpZ25hbHMgaXMgZ2RiLiBJbiBmYWN0IGFueSBwcm9ncmFtIGRlc2lnbmVkIHRvIHVzZSBwdHJhY2UgaXMgbGlrZWx5IHRvCitoYXZlIGEgcHJvYmxlbSB3aXRoIHRoaXMgbWV0aG9kIG9mIHN0b3BwaW5nIGFuZCByZXN1bWluZyB0YXNrcy4KKworCSBJbiBjb250cmFzdCwgdGhlIGNncm91cCBmcmVlemVyIHVzZXMgdGhlIGtlcm5lbCBmcmVlemVyIGNvZGUgdG8KK3ByZXZlbnQgdGhlIGZyZWV6ZS91bmZyZWV6ZSBjeWNsZSBmcm9tIGJlY29taW5nIHZpc2libGUgdG8gdGhlIHRhc2tzCitiZWluZyBmcm96ZW4uIFRoaXMgYWxsb3dzIHRoZSBiYXNoIGV4YW1wbGUgYWJvdmUgYW5kIGdkYiB0byBydW4gYXMKK2V4cGVjdGVkLgorCisJVGhlIGZyZWV6ZXIgc3Vic3lzdGVtIGluIHRoZSBjb250YWluZXIgZmlsZXN5c3RlbSBkZWZpbmVzIGEgZmlsZSBuYW1lZAorZnJlZXplci5zdGF0ZS4gV3JpdGluZyAiRlJPWkVOIiB0byB0aGUgc3RhdGUgZmlsZSB3aWxsIGZyZWV6ZSBhbGwgdGFza3MgaW4gdGhlCitjZ3JvdXAuIFN1YnNlcXVlbnRseSB3cml0aW5nICJUSEFXRUQiIHdpbGwgdW5mcmVlemUgdGhlIHRhc2tzIGluIHRoZSBjZ3JvdXAuCitSZWFkaW5nIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlLgorCisqIEV4YW1wbGVzIG9mIHVzYWdlIDoKKworICAgIyBta2RpciAvY29udGFpbmVycy9mcmVlemVyCisgICAjIG1vdW50IC10IGNncm91cCAtb2ZyZWV6ZXIgZnJlZXplciAgL2NvbnRhaW5lcnMKKyAgICMgbWtkaXIgL2NvbnRhaW5lcnMvMAorICAgIyBlY2hvICRzb21lX3BpZCA+IC9jb250YWluZXJzLzAvdGFza3MKKwordG8gZ2V0IHN0YXR1cyBvZiB0aGUgZnJlZXplciBzdWJzeXN0ZW0gOgorCisgICAjIGNhdCAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgIFRIQVdFRAorCit0byBmcmVlemUgYWxsIHRhc2tzIGluIHRoZSBjb250YWluZXIgOgorCisgICAjIGVjaG8gRlJPWkVOID4gL2NvbnRhaW5lcnMvMC9mcmVlemVyLnN0YXRlCisgICAjIGNhdCAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgIEZSRUVaSU5HCisgICAjIGNhdCAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgIEZST1pFTgorCit0byB1bmZyZWV6ZSBhbGwgdGFza3MgaW4gdGhlIGNvbnRhaW5lciA6CisKKyAgICMgZWNobyBUSEFXRUQgPiAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgICMgY2F0IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQorICAgVEhBV0VECisKK1RoaXMgaXMgdGhlIGJhc2ljIG1lY2hhbmlzbSB3aGljaCBzaG91bGQgZG8gdGhlIHJpZ2h0IHRoaW5nIGZvciB1c2VyIHNwYWNlIHRhc2sKK2luIGEgc2ltcGxlIHNjZW5hcmlvLgorCitJdCdzIGltcG9ydGFudCB0byBub3RlIHRoYXQgZnJlZXppbmcgY2FuIGJlIGluY29tcGxldGUuIEluIHRoYXQgY2FzZSB3ZSByZXR1cm4KK0VCVVNZLiBUaGlzIG1lYW5zIHRoYXQgc29tZSB0YXNrcyBpbiB0aGUgY2dyb3VwIGFyZSBidXN5IGRvaW5nIHNvbWV0aGluZyB0aGF0CitwcmV2ZW50cyB1cyBmcm9tIGNvbXBsZXRlbHkgZnJlZXppbmcgdGhlIGNncm91cCBhdCB0aGlzIHRpbWUuIEFmdGVyIEVCVVNZLAordGhlIGNncm91cCB3aWxsIHJlbWFpbiBwYXJ0aWFsbHkgZnJvemVuIC0tIHJlZmxlY3RlZCBieSBmcmVlemVyLnN0YXRlIHJlcG9ydGluZworIkZSRUVaSU5HIiB3aGVuIHJlYWQuIFRoZSBzdGF0ZSB3aWxsIHJlbWFpbiAiRlJFRVpJTkciIHVudGlsIG9uZSBvZiB0aGVzZQordGhpbmdzIGhhcHBlbnM6CisKKwkxKSBVc2Vyc3BhY2UgY2FuY2VscyB0aGUgZnJlZXppbmcgb3BlcmF0aW9uIGJ5IHdyaXRpbmcgIlRIQVdFRCIgdG8KKwkJdGhlIGZyZWV6ZXIuc3RhdGUgZmlsZQorCTIpIFVzZXJzcGFjZSByZXRyaWVzIHRoZSBmcmVlemluZyBvcGVyYXRpb24gYnkgd3JpdGluZyAiRlJPWkVOIiB0bworCQl0aGUgZnJlZXplci5zdGF0ZSBmaWxlICh3cml0aW5nICJGUkVFWklORyIgaXMgbm90IGxlZ2FsCisJCWFuZCByZXR1cm5zIEVJTykKKwkzKSBUaGUgdGFza3MgdGhhdCBibG9ja2VkIHRoZSBjZ3JvdXAgZnJvbSBlbnRlcmluZyB0aGUgIkZST1pFTiIKKwkJc3RhdGUgZGlzYXBwZWFyIGZyb20gdGhlIGNncm91cCdzIHNldCBvZiB0YXNrcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29udHJvbGxlcnMvbWVtb3J5LnR4dCBiL0RvY3VtZW50YXRpb24vY29udHJvbGxlcnMvbWVtb3J5LnR4dAppbmRleCA5YjUzZDU4Li4xYzA3NTQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbnRyb2xsZXJzL21lbW9yeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb250cm9sbGVycy9tZW1vcnkudHh0CkBAIC0xMTIsMTQgKzExMiwyMiBAQAogCiAyLjIuMSBBY2NvdW50aW5nIGRldGFpbHMKIAotQWxsIG1hcHBlZCBwYWdlcyAoUlNTKSBhbmQgdW5tYXBwZWQgdXNlciBwYWdlcyAoUGFnZSBDYWNoZSkgYXJlIGFjY291bnRlZC4KLVJTUyBwYWdlcyBhcmUgYWNjb3VudGVkIGF0IHRoZSB0aW1lIG9mIHBhZ2VfYWRkXypfcm1hcCgpIHVubGVzcyB0aGV5J3ZlIGFscmVhZHkKLWJlZW4gYWNjb3VudGVkIGZvciBlYXJsaWVyLiBBIGZpbGUgcGFnZSB3aWxsIGJlIGFjY291bnRlZCBmb3IgYXMgUGFnZSBDYWNoZTsKLWl0J3MgbWFwcGVkIGludG8gdGhlIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcywgZHVwbGljYXRlIGFjY291bnRpbmcgaXMgY2FyZWZ1bGx5Ci1hdm9pZGVkLiBQYWdlIENhY2hlIHBhZ2VzIGFyZSBhY2NvdW50ZWQgYXQgdGhlIHRpbWUgb2YgYWRkX3RvX3BhZ2VfY2FjaGUoKS4KLVRoZSBjb3JyZXNwb25kaW5nIHJvdXRpbmVzIHRoYXQgcmVtb3ZlIGEgcGFnZSBmcm9tIHRoZSBwYWdlIHRhYmxlcyBvciByZW1vdmVzCi1hIHBhZ2UgZnJvbSBQYWdlIENhY2hlIGlzIHVzZWQgdG8gZGVjcmVtZW50IHRoZSBhY2NvdW50aW5nIGNvdW50ZXJzIG9mIHRoZQotY2dyb3VwLgorQWxsIG1hcHBlZCBhbm9uIHBhZ2VzIChSU1MpIGFuZCBjYWNoZSBwYWdlcyAoUGFnZSBDYWNoZSkgYXJlIGFjY291bnRlZC4KKyhzb21lIHBhZ2VzIHdoaWNoIG5ldmVyIGJlIHJlY2xhaW1hYmxlIGFuZCB3aWxsIG5vdCBiZSBvbiBnbG9iYWwgTFJVCisgYXJlIG5vdCBhY2NvdW50ZWQuIHdlIGp1c3QgYWNjb3VudHMgcGFnZXMgdW5kZXIgdXN1YWwgdm0gbWFuYWdlbWVudC4pCisKK1JTUyBwYWdlcyBhcmUgYWNjb3VudGVkIGF0IHBhZ2VfZmF1bHQgdW5sZXNzIHRoZXkndmUgYWxyZWFkeSBiZWVuIGFjY291bnRlZAorZm9yIGVhcmxpZXIuIEEgZmlsZSBwYWdlIHdpbGwgYmUgYWNjb3VudGVkIGZvciBhcyBQYWdlIENhY2hlIHdoZW4gaXQncworaW5zZXJ0ZWQgaW50byBpbm9kZSAocmFkaXgtdHJlZSkuIFdoaWxlIGl0J3MgbWFwcGVkIGludG8gdGhlIHBhZ2UgdGFibGVzIG9mCitwcm9jZXNzZXMsIGR1cGxpY2F0ZSBhY2NvdW50aW5nIGlzIGNhcmVmdWxseSBhdm9pZGVkLgorCitBIFJTUyBwYWdlIGlzIHVuYWNjb3VudGVkIHdoZW4gaXQncyBmdWxseSB1bm1hcHBlZC4gQSBQYWdlQ2FjaGUgcGFnZSBpcwordW5hY2NvdW50ZWQgd2hlbiBpdCdzIHJlbW92ZWQgZnJvbSByYWRpeC10cmVlLgorCitBdCBwYWdlIG1pZ3JhdGlvbiwgYWNjb3VudGluZyBpbmZvcm1hdGlvbiBpcyBrZXB0LgorCitOb3RlOiB3ZSBqdXN0IGFjY291bnQgcGFnZXMtb24tbHJ1IGJlY2F1c2Ugb3VyIHB1cnBvc2UgaXMgdG8gY29udHJvbCBhbW91bnQKK29mIHVzZWQgcGFnZXMuIG5vdC1vbi1scnUgcGFnZXMgYXJlIHRlbmQgdG8gYmUgb3V0LW9mLWNvbnRyb2wgZnJvbSB2bSB2aWV3LgogCiAyLjMgU2hhcmVkIFBhZ2UgQWNjb3VudGluZwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dAppbmRleCA0N2U1NjhhLi41Yzg2YzI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQKQEAgLTQ4LDcgKzQ4LDcgQEAKIGpvYiBwbGFjZW1lbnQgb24gbGFyZ2Ugc3lzdGVtcy4KIAogQ3B1c2V0cyB1c2UgdGhlIGdlbmVyaWMgY2dyb3VwIHN1YnN5c3RlbSBkZXNjcmliZWQgaW4KLURvY3VtZW50YXRpb24vY2dyb3VwLnR4dC4KK0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dC4KIAogUmVxdWVzdHMgYnkgYSB0YXNrLCB1c2luZyB0aGUgc2NoZWRfc2V0YWZmaW5pdHkoMikgc3lzdGVtIGNhbGwgdG8KIGluY2x1ZGUgQ1BVcyBpbiBpdHMgQ1BVIGFmZmluaXR5IG1hc2ssIGFuZCB1c2luZyB0aGUgbWJpbmQoMikgYW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NyaXMvUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9jcmlzL1JFQURNRQppbmRleCA3OTVhMWRhLi5kOWIwODY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NyaXMvUkVBRE1FCisrKyBiL0RvY3VtZW50YXRpb24vY3Jpcy9SRUFETUUKQEAgLTI3LDcgKzI3LDcgQEAKIFRoZSBFVFJBWCAxMDBMWCBjaGlwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Gb3IgcmVmZXJlbmNlLCBwbGFzZSBzZWUgdGhlIHByZXNzLXJlbGVhc2U6CitGb3IgcmVmZXJlbmNlLCBwbGVhc2Ugc2VlIHRoZSBwcmVzcy1yZWxlYXNlOgogCiBodHRwOi8vd3d3LmF4aXMuY29tL25ld3MvdXMvMDAxMTAxX2V0cmF4Lmh0bQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvMS5JbnRybyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy8xLkludHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYzJjYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvMS5JbnRybwpAQCAtMCwwICsxLDI3NCBAQAorMTogQSBHVUlERSBUTyBUSEUgS0VSTkVMIERFVkVMT1BNRU5UIFBST0NFU1MKKworVGhlIHB1cnBvc2Ugb2YgdGhpcyBkb2N1bWVudCBpcyB0byBoZWxwIGRldmVsb3BlcnMgKGFuZCB0aGVpciBtYW5hZ2VycykKK3dvcmsgd2l0aCB0aGUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IHdpdGggYSBtaW5pbXVtIG9mIGZydXN0cmF0aW9uLiAgSXQgaXMKK2FuIGF0dGVtcHQgdG8gZG9jdW1lbnQgaG93IHRoaXMgY29tbXVuaXR5IHdvcmtzIGluIGEgd2F5IHdoaWNoIGlzCithY2Nlc3NpYmxlIHRvIHRob3NlIHdobyBhcmUgbm90IGludGltYXRlbHkgZmFtaWxpYXIgd2l0aCBMaW51eCBrZXJuZWwKK2RldmVsb3BtZW50IChvciwgaW5kZWVkLCBmcmVlIHNvZnR3YXJlIGRldmVsb3BtZW50IGluIGdlbmVyYWwpLiAgV2hpbGUKK3RoZXJlIGlzIHNvbWUgdGVjaG5pY2FsIG1hdGVyaWFsIGhlcmUsIHRoaXMgaXMgdmVyeSBtdWNoIGEgcHJvY2Vzcy1vcmllbnRlZAorZGlzY3Vzc2lvbiB3aGljaCBkb2VzIG5vdCByZXF1aXJlIGEgZGVlcCBrbm93bGVkZ2Ugb2Yga2VybmVsIHByb2dyYW1taW5nIHRvCit1bmRlcnN0YW5kLgorCisKKzEuMTogRVhFQ1VUSVZFIFNVTU1BUlkKKworVGhlIHJlc3Qgb2YgdGhpcyBzZWN0aW9uIGNvdmVycyB0aGUgc2NvcGUgb2YgdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzCithbmQgdGhlIGtpbmRzIG9mIGZydXN0cmF0aW9ucyB0aGF0IGRldmVsb3BlcnMgYW5kIHRoZWlyIGVtcGxveWVycyBjYW4KK2VuY291bnRlciB0aGVyZS4gIFRoZXJlIGFyZSBhIGdyZWF0IG1hbnkgcmVhc29ucyB3aHkga2VybmVsIGNvZGUgc2hvdWxkIGJlCittZXJnZWQgaW50byB0aGUgb2ZmaWNpYWwgKCJtYWlubGluZSIpIGtlcm5lbCwgaW5jbHVkaW5nIGF1dG9tYXRpYworYXZhaWxhYmlsaXR5IHRvIHVzZXJzLCBjb21tdW5pdHkgc3VwcG9ydCBpbiBtYW55IGZvcm1zLCBhbmQgdGhlIGFiaWxpdHkgdG8KK2luZmx1ZW5jZSB0aGUgZGlyZWN0aW9uIG9mIGtlcm5lbCBkZXZlbG9wbWVudC4gIENvZGUgY29udHJpYnV0ZWQgdG8gdGhlCitMaW51eCBrZXJuZWwgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciBhIEdQTC1jb21wYXRpYmxlIGxpY2Vuc2UuCisKK1NlY3Rpb24gMiBpbnRyb2R1Y2VzIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzLCB0aGUga2VybmVsIHJlbGVhc2UgY3ljbGUsIGFuZAordGhlIG1lY2hhbmljcyBvZiB0aGUgbWVyZ2Ugd2luZG93LiAgVGhlIHZhcmlvdXMgcGhhc2VzIGluIHRoZSBwYXRjaAorZGV2ZWxvcG1lbnQsIHJldmlldywgYW5kIG1lcmdpbmcgY3ljbGUgYXJlIGNvdmVyZWQuICBUaGVyZSBpcyBzb21lCitkaXNjdXNzaW9uIG9mIHRvb2xzIGFuZCBtYWlsaW5nIGxpc3RzLiAgRGV2ZWxvcGVycyB3YW50aW5nIHRvIGdldCBzdGFydGVkCit3aXRoIGtlcm5lbCBkZXZlbG9wbWVudCBhcmUgZW5jb3VyYWdlZCB0byB0cmFjayBkb3duIGFuZCBmaXggYnVncyBhcyBhbgoraW5pdGlhbCBleGVyY2lzZS4KKworU2VjdGlvbiAzIGNvdmVycyBlYXJseS1zdGFnZSBwcm9qZWN0IHBsYW5uaW5nLCB3aXRoIGFuIGVtcGhhc2lzIG9uCitpbnZvbHZpbmcgdGhlIGRldmVsb3BtZW50IGNvbW11bml0eSBhcyBzb29uIGFzIHBvc3NpYmxlLgorCitTZWN0aW9uIDQgaXMgYWJvdXQgdGhlIGNvZGluZyBwcm9jZXNzOyBzZXZlcmFsIHBpdGZhbGxzIHdoaWNoIGhhdmUgYmVlbgorZW5jb3VudGVyZWQgYnkgb3RoZXIgZGV2ZWxvcGVycyBhcmUgZGlzY3Vzc2VkLiAgU29tZSByZXF1aXJlbWVudHMgZm9yCitwYXRjaGVzIGFyZSBjb3ZlcmVkLCBhbmQgdGhlcmUgaXMgYW4gaW50cm9kdWN0aW9uIHRvIHNvbWUgb2YgdGhlIHRvb2xzCit3aGljaCBjYW4gaGVscCB0byBlbnN1cmUgdGhhdCBrZXJuZWwgcGF0Y2hlcyBhcmUgY29ycmVjdC4KKworU2VjdGlvbiA1IHRhbGtzIGFib3V0IHRoZSBwcm9jZXNzIG9mIHBvc3RpbmcgcGF0Y2hlcyBmb3IgcmV2aWV3LiAgVG8gYmUKK3Rha2VuIHNlcmlvdXNseSBieSB0aGUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5LCBwYXRjaGVzIG11c3QgYmUgcHJvcGVybHkKK2Zvcm1hdHRlZCBhbmQgZGVzY3JpYmVkLCBhbmQgdGhleSBtdXN0IGJlIHNlbnQgdG8gdGhlIHJpZ2h0IHBsYWNlLgorRm9sbG93aW5nIHRoZSBhZHZpY2UgaW4gdGhpcyBzZWN0aW9uIHNob3VsZCBoZWxwIHRvIGVuc3VyZSB0aGUgYmVzdAorcG9zc2libGUgcmVjZXB0aW9uIGZvciB5b3VyIHdvcmsuCisKK1NlY3Rpb24gNiBjb3ZlcnMgd2hhdCBoYXBwZW5zIGFmdGVyIHBvc3RpbmcgcGF0Y2hlczsgdGhlIGpvYiBpcyBmYXIgZnJvbQorZG9uZSBhdCB0aGF0IHBvaW50LiAgV29ya2luZyB3aXRoIHJldmlld2VycyBpcyBhIGNydWNpYWwgcGFydCBvZiB0aGUKK2RldmVsb3BtZW50IHByb2Nlc3M7IHRoaXMgc2VjdGlvbiBvZmZlcnMgYSBudW1iZXIgb2YgdGlwcyBvbiBob3cgdG8gYXZvaWQKK3Byb2JsZW1zIGF0IHRoaXMgaW1wb3J0YW50IHN0YWdlLiAgRGV2ZWxvcGVycyBhcmUgY2F1dGlvbmVkIGFnYWluc3QKK2Fzc3VtaW5nIHRoYXQgdGhlIGpvYiBpcyBkb25lIHdoZW4gYSBwYXRjaCBpcyBtZXJnZWQgaW50byB0aGUgbWFpbmxpbmUuCisKK1NlY3Rpb24gNyBpbnRyb2R1Y2VzIGEgY291cGxlIG9mICJhZHZhbmNlZCIgdG9waWNzOiBtYW5hZ2luZyBwYXRjaGVzIHdpdGgKK2dpdCBhbmQgcmV2aWV3aW5nIHBhdGNoZXMgcG9zdGVkIGJ5IG90aGVycy4KKworU2VjdGlvbiA4IGNvbmNsdWRlcyB0aGUgZG9jdW1lbnQgd2l0aCBwb2ludGVycyB0byBzb3VyY2VzIGZvciBtb3JlCitpbmZvcm1hdGlvbiBvbiBrZXJuZWwgZGV2ZWxvcG1lbnQuCisKKworMS4yOiBXSEFUIFRISVMgRE9DVU1FTlQgSVMgQUJPVVQKKworVGhlIExpbnV4IGtlcm5lbCwgYXQgb3ZlciA2IG1pbGxpb24gbGluZXMgb2YgY29kZSBhbmQgd2VsbCBvdmVyIDEwMDAgYWN0aXZlCitjb250cmlidXRvcnMsIGlzIG9uZSBvZiB0aGUgbGFyZ2VzdCBhbmQgbW9zdCBhY3RpdmUgZnJlZSBzb2Z0d2FyZSBwcm9qZWN0cworaW4gZXhpc3RlbmNlLiAgU2luY2UgaXRzIGh1bWJsZSBiZWdpbm5pbmcgaW4gMTk5MSwgdGhpcyBrZXJuZWwgaGFzIGV2b2x2ZWQKK2ludG8gYSBiZXN0LW9mLWJyZWVkIG9wZXJhdGluZyBzeXN0ZW0gY29tcG9uZW50IHdoaWNoIHJ1bnMgb24gcG9ja2V0LXNpemVkCitkaWdpdGFsIG11c2ljIHBsYXllcnMsIGRlc2t0b3AgUENzLCB0aGUgbGFyZ2VzdCBzdXBlcmNvbXB1dGVycyBpbgorZXhpc3RlbmNlLCBhbmQgYWxsIHR5cGVzIG9mIHN5c3RlbXMgaW4gYmV0d2Vlbi4gIEl0IGlzIGEgcm9idXN0LCBlZmZpY2llbnQsCithbmQgc2NhbGFibGUgc29sdXRpb24gZm9yIGFsbW9zdCBhbnkgc2l0dWF0aW9uLgorCitXaXRoIHRoZSBncm93dGggb2YgTGludXggaGFzIGNvbWUgYW4gaW5jcmVhc2UgaW4gdGhlIG51bWJlciBvZiBkZXZlbG9wZXJzCisoYW5kIGNvbXBhbmllcykgd2lzaGluZyB0byBwYXJ0aWNpcGF0ZSBpbiBpdHMgZGV2ZWxvcG1lbnQuICBIYXJkd2FyZQordmVuZG9ycyB3YW50IHRvIGVuc3VyZSB0aGF0IExpbnV4IHN1cHBvcnRzIHRoZWlyIHByb2R1Y3RzIHdlbGwsIG1ha2luZwordGhvc2UgcHJvZHVjdHMgYXR0cmFjdGl2ZSB0byBMaW51eCB1c2Vycy4gIEVtYmVkZGVkIHN5c3RlbXMgdmVuZG9ycywgd2hvCit1c2UgTGludXggYXMgYSBjb21wb25lbnQgaW4gYW4gaW50ZWdyYXRlZCBwcm9kdWN0LCB3YW50IExpbnV4IHRvIGJlIGFzCitjYXBhYmxlIGFuZCB3ZWxsLXN1aXRlZCB0byB0aGUgdGFzayBhdCBoYW5kIGFzIHBvc3NpYmxlLiAgRGlzdHJpYnV0b3JzIGFuZAorb3RoZXIgc29mdHdhcmUgdmVuZG9ycyB3aG8gYmFzZSB0aGVpciBwcm9kdWN0cyBvbiBMaW51eCBoYXZlIGEgY2xlYXIKK2ludGVyZXN0IGluIHRoZSBjYXBhYmlsaXRpZXMsIHBlcmZvcm1hbmNlLCBhbmQgcmVsaWFiaWxpdHkgb2YgdGhlIExpbnV4CitrZXJuZWwuICBBbmQgZW5kIHVzZXJzLCB0b28sIHdpbGwgb2Z0ZW4gd2lzaCB0byBjaGFuZ2UgTGludXggdG8gbWFrZSBpdAorYmV0dGVyIHN1aXQgdGhlaXIgbmVlZHMuCisKK09uZSBvZiB0aGUgbW9zdCBjb21wZWxsaW5nIGZlYXR1cmVzIG9mIExpbnV4IGlzIHRoYXQgaXQgaXMgYWNjZXNzaWJsZSB0bwordGhlc2UgZGV2ZWxvcGVyczsgYW55Ym9keSB3aXRoIHRoZSByZXF1aXNpdGUgc2tpbGxzIGNhbiBpbXByb3ZlIExpbnV4IGFuZAoraW5mbHVlbmNlIHRoZSBkaXJlY3Rpb24gb2YgaXRzIGRldmVsb3BtZW50LiAgUHJvcHJpZXRhcnkgcHJvZHVjdHMgY2Fubm90CitvZmZlciB0aGlzIGtpbmQgb2Ygb3Blbm5lc3MsIHdoaWNoIGlzIGEgY2hhcmFjdGVyaXN0aWMgb2YgdGhlIGZyZWUgc29mdHdhcmUKK3Byb2Nlc3MuICBCdXQsIGlmIGFueXRoaW5nLCB0aGUga2VybmVsIGlzIGV2ZW4gbW9yZSBvcGVuIHRoYW4gbW9zdCBvdGhlcgorZnJlZSBzb2Z0d2FyZSBwcm9qZWN0cy4gIEEgdHlwaWNhbCB0aHJlZS1tb250aCBrZXJuZWwgZGV2ZWxvcG1lbnQgY3ljbGUgY2FuCitpbnZvbHZlIG92ZXIgMTAwMCBkZXZlbG9wZXJzIHdvcmtpbmcgZm9yIG1vcmUgdGhhbiAxMDAgZGlmZmVyZW50IGNvbXBhbmllcworKG9yIGZvciBubyBjb21wYW55IGF0IGFsbCkuCisKK1dvcmtpbmcgd2l0aCB0aGUga2VybmVsIGRldmVsb3BtZW50IGNvbW11bml0eSBpcyBub3QgZXNwZWNpYWxseSBoYXJkLiAgQnV0LAordGhhdCBub3R3aXRoc3RhbmRpbmcsIG1hbnkgcG90ZW50aWFsIGNvbnRyaWJ1dG9ycyBoYXZlIGV4cGVyaWVuY2VkCitkaWZmaWN1bHRpZXMgd2hlbiB0cnlpbmcgdG8gZG8ga2VybmVsIHdvcmsuICBUaGUga2VybmVsIGNvbW11bml0eSBoYXMKK2V2b2x2ZWQgaXRzIG93biBkaXN0aW5jdCB3YXlzIG9mIG9wZXJhdGluZyB3aGljaCBhbGxvdyBpdCB0byBmdW5jdGlvbgorc21vb3RobHkgKGFuZCBwcm9kdWNlIGEgaGlnaC1xdWFsaXR5IHByb2R1Y3QpIGluIGFuIGVudmlyb25tZW50IHdoZXJlCit0aG91c2FuZHMgb2YgbGluZXMgb2YgY29kZSBhcmUgYmVpbmcgY2hhbmdlZCBldmVyeSBkYXkuICBTbyBpdCBpcyBub3QKK3N1cnByaXNpbmcgdGhhdCBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvY2VzcyBkaWZmZXJzIGdyZWF0bHkgZnJvbQorcHJvcHJpZXRhcnkgZGV2ZWxvcG1lbnQgbWV0aG9kcy4KKworVGhlIGtlcm5lbCdzIGRldmVsb3BtZW50IHByb2Nlc3MgbWF5IGNvbWUgYWNyb3NzIGFzIHN0cmFuZ2UgYW5kCitpbnRpbWlkYXRpbmcgdG8gbmV3IGRldmVsb3BlcnMsIGJ1dCB0aGVyZSBhcmUgZ29vZCByZWFzb25zIGFuZCBzb2xpZAorZXhwZXJpZW5jZSBiZWhpbmQgaXQuICBBIGRldmVsb3BlciB3aG8gZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUga2VybmVsCitjb21tdW5pdHkncyB3YXlzIChvciwgd29yc2UsIHdobyB0cmllcyB0byBmbG91dCBvciBjaXJjdW12ZW50IHRoZW0pIHdpbGwKK2hhdmUgYSBmcnVzdHJhdGluZyBleHBlcmllbmNlIGluIHN0b3JlLiAgVGhlIGRldmVsb3BtZW50IGNvbW11bml0eSwgd2hpbGUKK2JlaW5nIGhlbHBmdWwgdG8gdGhvc2Ugd2hvIGFyZSB0cnlpbmcgdG8gbGVhcm4sIGhhcyBsaXR0bGUgdGltZSBmb3IgdGhvc2UKK3dobyB3aWxsIG5vdCBsaXN0ZW4gb3Igd2hvIGRvIG5vdCBjYXJlIGFib3V0IHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzLgorCitJdCBpcyBob3BlZCB0aGF0IHRob3NlIHdobyByZWFkIHRoaXMgZG9jdW1lbnQgd2lsbCBiZSBhYmxlIHRvIGF2b2lkIHRoYXQKK2ZydXN0cmF0aW5nIGV4cGVyaWVuY2UuICBUaGVyZSBpcyBhIGxvdCBvZiBtYXRlcmlhbCBoZXJlLCBidXQgdGhlIGVmZm9ydAoraW52b2x2ZWQgaW4gcmVhZGluZyBpdCB3aWxsIGJlIHJlcGFpZCBpbiBzaG9ydCBvcmRlci4gIFRoZSBkZXZlbG9wbWVudAorY29tbXVuaXR5IGlzIGFsd2F5cyBpbiBuZWVkIG9mIGRldmVsb3BlcnMgd2hvIHdpbGwgaGVscCB0byBtYWtlIHRoZSBrZXJuZWwKK2JldHRlcjsgdGhlIGZvbGxvd2luZyB0ZXh0IHNob3VsZCBoZWxwIHlvdSAtIG9yIHRob3NlIHdobyB3b3JrIGZvciB5b3UgLQoram9pbiBvdXIgY29tbXVuaXR5LgorCisKKzEuMzogQ1JFRElUUworCitUaGlzIGRvY3VtZW50IHdhcyB3cml0dGVuIGJ5IEpvbmF0aGFuIENvcmJldCwgY29yYmV0QGx3bi5uZXQuICBJdCBoYXMgYmVlbgoraW1wcm92ZWQgYnkgY29tbWVudHMgZnJvbSBKb2hhbm5lcyBCZXJnLCBKYW1lcyBCZXJyeSwgQWxleCBDaGlhbmcsIFJvbGFuZAorRHJlaWVyLCBSYW5keSBEdW5sYXAsIEpha2UgRWRnZSwgSmlyaSBLb3NpbmEsIE1hdHQgTWFja2FsbCwgQXJ0aHVyIE1hcnNoLAorQW1hbmRhIE1jUGhlcnNvbiwgQW5kcmV3IE1vcnRvbiwgQW5kcmV3IFByaWNlLCBUc3VnaWthenUgU2hpYmF0YSwgYW5kCitKb2NoZW4gVm/Dny4gCisKK1RoaXMgd29yayB3YXMgc3VwcG9ydGVkIGJ5IHRoZSBMaW51eCBGb3VuZGF0aW9uOyB0aGFua3MgZXNwZWNpYWxseSB0bworQW1hbmRhIE1jUGhlcnNvbiwgd2hvIHNhdyB0aGUgdmFsdWUgb2YgdGhpcyBlZmZvcnQgYW5kIG1hZGUgaXQgYWxsIGhhcHBlbi4KKworCisxLjQ6IFRIRSBJTVBPUlRBTkNFIE9GIEdFVFRJTkcgQ09ERSBJTlRPIFRIRSBNQUlOTElORQorCitTb21lIGNvbXBhbmllcyBhbmQgZGV2ZWxvcGVycyBvY2Nhc2lvbmFsbHkgd29uZGVyIHdoeSB0aGV5IHNob3VsZCBib3RoZXIKK2xlYXJuaW5nIGhvdyB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCBjb21tdW5pdHkgYW5kIGdldCB0aGVpciBjb2RlIGludG8gdGhlCittYWlubGluZSBrZXJuZWwgKHRoZSAibWFpbmxpbmUiIGJlaW5nIHRoZSBrZXJuZWwgbWFpbnRhaW5lZCBieSBMaW51cworVG9ydmFsZHMgYW5kIHVzZWQgYXMgYSBiYXNlIGJ5IExpbnV4IGRpc3RyaWJ1dG9ycykuICBJbiB0aGUgc2hvcnQgdGVybSwKK2NvbnRyaWJ1dGluZyBjb2RlIGNhbiBsb29rIGxpa2UgYW4gYXZvaWRhYmxlIGV4cGVuc2U7IGl0IHNlZW1zIGVhc2llciB0bworanVzdCBrZWVwIHRoZSBjb2RlIHNlcGFyYXRlIGFuZCBzdXBwb3J0IHVzZXJzIGRpcmVjdGx5LiAgVGhlIHRydXRoIG9mIHRoZQorbWF0dGVyIGlzIHRoYXQga2VlcGluZyBjb2RlIHNlcGFyYXRlICgib3V0IG9mIHRyZWUiKSBpcyBhIGZhbHNlIGVjb25vbXkuCisKK0FzIGEgd2F5IG9mIGlsbHVzdHJhdGluZyB0aGUgY29zdHMgb2Ygb3V0LW9mLXRyZWUgY29kZSwgaGVyZSBhcmUgYSBmZXcKK3JlbGV2YW50IGFzcGVjdHMgb2YgdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzOyBtb3N0IG9mIHRoZXNlIHdpbGwgYmUKK2Rpc2N1c3NlZCBpbiBncmVhdGVyIGRldGFpbCBsYXRlciBpbiB0aGlzIGRvY3VtZW50LiAgQ29uc2lkZXI6CisKKy0gQ29kZSB3aGljaCBoYXMgYmVlbiBtZXJnZWQgaW50byB0aGUgbWFpbmxpbmUga2VybmVsIGlzIGF2YWlsYWJsZSB0byBhbGwKKyAgTGludXggdXNlcnMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcHJlc2VudCBvbiBhbGwgZGlzdHJpYnV0aW9ucyB3aGljaAorICBlbmFibGUgaXQuICBUaGVyZSBpcyBubyBuZWVkIGZvciBkcml2ZXIgZGlza3MsIGRvd25sb2Fkcywgb3IgdGhlIGhhc3NsZXMKKyAgb2Ygc3VwcG9ydGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBtdWx0aXBsZSBkaXN0cmlidXRpb25zOyBpdCBhbGwganVzdAorICB3b3JrcywgZm9yIHRoZSBkZXZlbG9wZXIgYW5kIGZvciB0aGUgdXNlci4gIEluY29ycG9yYXRpb24gaW50byB0aGUKKyAgbWFpbmxpbmUgc29sdmVzIGEgbGFyZ2UgbnVtYmVyIG9mIGRpc3RyaWJ1dGlvbiBhbmQgc3VwcG9ydCBwcm9ibGVtcy4KKworLSBXaGlsZSBrZXJuZWwgZGV2ZWxvcGVycyBzdHJpdmUgdG8gbWFpbnRhaW4gYSBzdGFibGUgaW50ZXJmYWNlIHRvIHVzZXIKKyAgc3BhY2UsIHRoZSBpbnRlcm5hbCBrZXJuZWwgQVBJIGlzIGluIGNvbnN0YW50IGZsdXguICBUaGUgbGFjayBvZiBhIHN0YWJsZQorICBpbnRlcm5hbCBpbnRlcmZhY2UgaXMgYSBkZWxpYmVyYXRlIGRlc2lnbiBkZWNpc2lvbjsgaXQgYWxsb3dzIGZ1bmRhbWVudGFsCisgIGltcHJvdmVtZW50cyB0byBiZSBtYWRlIGF0IGFueSB0aW1lIGFuZCByZXN1bHRzIGluIGhpZ2hlci1xdWFsaXR5IGNvZGUuCisgIEJ1dCBvbmUgcmVzdWx0IG9mIHRoYXQgcG9saWN5IGlzIHRoYXQgYW55IG91dC1vZi10cmVlIGNvZGUgcmVxdWlyZXMKKyAgY29uc3RhbnQgdXBrZWVwIGlmIGl0IGlzIHRvIHdvcmsgd2l0aCBuZXcga2VybmVscy4gIE1haW50YWluaW5nCisgIG91dC1vZi10cmVlIGNvZGUgcmVxdWlyZXMgc2lnbmlmaWNhbnQgYW1vdW50cyBvZiB3b3JrIGp1c3QgdG8ga2VlcCB0aGF0CisgIGNvZGUgd29ya2luZy4KKworICBDb2RlIHdoaWNoIGlzIGluIHRoZSBtYWlubGluZSwgaW5zdGVhZCwgZG9lcyBub3QgcmVxdWlyZSB0aGlzIHdvcmsgYXMgdGhlCisgIHJlc3VsdCBvZiBhIHNpbXBsZSBydWxlIHJlcXVpcmluZyBhbnkgZGV2ZWxvcGVyIHdobyBtYWtlcyBhbiBBUEkgY2hhbmdlCisgIHRvIGFsc28gZml4IGFueSBjb2RlIHRoYXQgYnJlYWtzIGFzIHRoZSByZXN1bHQgb2YgdGhhdCBjaGFuZ2UuICBTbyBjb2RlCisgIHdoaWNoIGhhcyBiZWVuIG1lcmdlZCBpbnRvIHRoZSBtYWlubGluZSBoYXMgc2lnbmlmaWNhbnRseSBsb3dlcgorICBtYWludGVuYW5jZSBjb3N0cy4KKworLSBCZXlvbmQgdGhhdCwgY29kZSB3aGljaCBpcyBpbiB0aGUga2VybmVsIHdpbGwgb2Z0ZW4gYmUgaW1wcm92ZWQgYnkgb3RoZXIKKyAgZGV2ZWxvcGVycy4gIFN1cnByaXNpbmcgcmVzdWx0cyBjYW4gY29tZSBmcm9tIGVtcG93ZXJpbmcgeW91ciB1c2VyCisgIGNvbW11bml0eSBhbmQgY3VzdG9tZXJzIHRvIGltcHJvdmUgeW91ciBwcm9kdWN0LgorCistIEtlcm5lbCBjb2RlIGlzIHN1YmplY3RlZCB0byByZXZpZXcsIGJvdGggYmVmb3JlIGFuZCBhZnRlciBtZXJnaW5nIGludG8KKyAgdGhlIG1haW5saW5lLiAgTm8gbWF0dGVyIGhvdyBzdHJvbmcgdGhlIG9yaWdpbmFsIGRldmVsb3BlcidzIHNraWxscyBhcmUsCisgIHRoaXMgcmV2aWV3IHByb2Nlc3MgaW52YXJpYWJseSBmaW5kcyB3YXlzIGluIHdoaWNoIHRoZSBjb2RlIGNhbiBiZQorICBpbXByb3ZlZC4gIE9mdGVuIHJldmlldyBmaW5kcyBzZXZlcmUgYnVncyBhbmQgc2VjdXJpdHkgcHJvYmxlbXMuICBUaGlzIGlzCisgIGVzcGVjaWFsbHkgdHJ1ZSBmb3IgY29kZSB3aGljaCBoYXMgYmVlbiBkZXZlbG9wZWQgaW4gYSBjbG9zZWQKKyAgZW52aXJvbm1lbnQ7IHN1Y2ggY29kZSBiZW5lZml0cyBzdHJvbmdseSBmcm9tIHJldmlldyBieSBvdXRzaWRlCisgIGRldmVsb3BlcnMuICBPdXQtb2YtdHJlZSBjb2RlIGlzIGxvd2VyLXF1YWxpdHkgY29kZS4KKworLSBQYXJ0aWNpcGF0aW9uIGluIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzIGlzIHlvdXIgd2F5IHRvIGluZmx1ZW5jZSB0aGUKKyAgZGlyZWN0aW9uIG9mIGtlcm5lbCBkZXZlbG9wbWVudC4gIFVzZXJzIHdobyBjb21wbGFpbiBmcm9tIHRoZSBzaWRlbGluZXMKKyAgYXJlIGhlYXJkLCBidXQgYWN0aXZlIGRldmVsb3BlcnMgaGF2ZSBhIHN0cm9uZ2VyIHZvaWNlIC0gYW5kIHRoZSBhYmlsaXR5CisgIHRvIGltcGxlbWVudCBjaGFuZ2VzIHdoaWNoIG1ha2UgdGhlIGtlcm5lbCB3b3JrIGJldHRlciBmb3IgdGhlaXIgbmVlZHMuCisKKy0gV2hlbiBjb2RlIGlzIG1haW50YWluZWQgc2VwYXJhdGVseSwgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYSB0aGlyZCBwYXJ0eQorICB3aWxsIGNvbnRyaWJ1dGUgYSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24gb2YgYSBzaW1pbGFyIGZlYXR1cmUgYWx3YXlzCisgIGV4aXN0cy4gIFNob3VsZCB0aGF0IGhhcHBlbiwgZ2V0dGluZyB5b3VyIGNvZGUgbWVyZ2VkIHdpbGwgYmVjb21lIG11Y2gKKyAgaGFyZGVyIC0gdG8gdGhlIHBvaW50IG9mIGltcG9zc2liaWxpdHkuICBUaGVuIHlvdSB3aWxsIGJlIGZhY2VkIHdpdGggdGhlCisgIHVucGxlYXNhbnQgYWx0ZXJuYXRpdmVzIG9mIGVpdGhlciAoMSkgbWFpbnRhaW5pbmcgYSBub25zdGFuZGFyZCBmZWF0dXJlCisgIG91dCBvZiB0cmVlIGluZGVmaW5pdGVseSwgb3IgKDIpIGFiYW5kb25pbmcgeW91ciBjb2RlIGFuZCBtaWdyYXRpbmcgeW91cgorICB1c2VycyBvdmVyIHRvIHRoZSBpbi10cmVlIHZlcnNpb24uCisKKy0gQ29udHJpYnV0aW9uIG9mIGNvZGUgaXMgdGhlIGZ1bmRhbWVudGFsIGFjdGlvbiB3aGljaCBtYWtlcyB0aGUgd2hvbGUKKyAgcHJvY2VzcyB3b3JrLiAgQnkgY29udHJpYnV0aW5nIHlvdXIgY29kZSB5b3UgY2FuIGFkZCBuZXcgZnVuY3Rpb25hbGl0eSB0bworICB0aGUga2VybmVsIGFuZCBwcm92aWRlIGNhcGFiaWxpdGllcyBhbmQgZXhhbXBsZXMgd2hpY2ggYXJlIG9mIHVzZSB0bworICBvdGhlciBrZXJuZWwgZGV2ZWxvcGVycy4gIElmIHlvdSBoYXZlIGRldmVsb3BlZCBjb2RlIGZvciBMaW51eCAob3IgYXJlCisgIHRoaW5raW5nIGFib3V0IGRvaW5nIHNvKSwgeW91IGNsZWFybHkgaGF2ZSBhbiBpbnRlcmVzdCBpbiB0aGUgY29udGludWVkCisgIHN1Y2Nlc3Mgb2YgdGhpcyBwbGF0Zm9ybTsgY29udHJpYnV0aW5nIGNvZGUgaXMgb25lIG9mIHRoZSBiZXN0IHdheXMgdG8KKyAgaGVscCBlbnN1cmUgdGhhdCBzdWNjZXNzLgorCitBbGwgb2YgdGhlIHJlYXNvbmluZyBhYm92ZSBhcHBsaWVzIHRvIGFueSBvdXQtb2YtdHJlZSBrZXJuZWwgY29kZSwKK2luY2x1ZGluZyBjb2RlIHdoaWNoIGlzIGRpc3RyaWJ1dGVkIGluIHByb3ByaWV0YXJ5LCBiaW5hcnktb25seSBmb3JtLgorVGhlcmUgYXJlLCBob3dldmVyLCBhZGRpdGlvbmFsIGZhY3RvcnMgd2hpY2ggc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudAorYmVmb3JlIGNvbnNpZGVyaW5nIGFueSBzb3J0IG9mIGJpbmFyeS1vbmx5IGtlcm5lbCBjb2RlIGRpc3RyaWJ1dGlvbi4gIFRoZXNlCitpbmNsdWRlOgorCistIFRoZSBsZWdhbCBpc3N1ZXMgYXJvdW5kIHRoZSBkaXN0cmlidXRpb24gb2YgcHJvcHJpZXRhcnkga2VybmVsIG1vZHVsZXMKKyAgYXJlIGNsb3VkeSBhdCBiZXN0OyBxdWl0ZSBhIGZldyBrZXJuZWwgY29weXJpZ2h0IGhvbGRlcnMgYmVsaWV2ZSB0aGF0CisgIG1vc3QgYmluYXJ5LW9ubHkgbW9kdWxlcyBhcmUgZGVyaXZlZCBwcm9kdWN0cyBvZiB0aGUga2VybmVsIGFuZCB0aGF0LCBhcworICBhIHJlc3VsdCwgdGhlaXIgZGlzdHJpYnV0aW9uIGlzIGEgdmlvbGF0aW9uIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgbGljZW5zZSAoYWJvdXQgd2hpY2ggbW9yZSB3aWxsIGJlIHNhaWQgYmVsb3cpLiAgWW91ciBhdXRob3IgaXMgbm90IGEKKyAgbGF3eWVyLCBhbmQgbm90aGluZyBpbiB0aGlzIGRvY3VtZW50IGNhbiBwb3NzaWJseSBiZSBjb25zaWRlcmVkIHRvIGJlCisgIGxlZ2FsIGFkdmljZS4gIFRoZSB0cnVlIGxlZ2FsIHN0YXR1cyBvZiBjbG9zZWQtc291cmNlIG1vZHVsZXMgY2FuIG9ubHkgYmUKKyAgZGV0ZXJtaW5lZCBieSB0aGUgY291cnRzLiAgQnV0IHRoZSB1bmNlcnRhaW50eSB3aGljaCBoYXVudHMgdGhvc2UgbW9kdWxlcworICBpcyB0aGVyZSByZWdhcmRsZXNzLgorCistIEJpbmFyeSBtb2R1bGVzIGdyZWF0bHkgaW5jcmVhc2UgdGhlIGRpZmZpY3VsdHkgb2YgZGVidWdnaW5nIGtlcm5lbAorICBwcm9ibGVtcywgdG8gdGhlIHBvaW50IHRoYXQgbW9zdCBrZXJuZWwgZGV2ZWxvcGVycyB3aWxsIG5vdCBldmVuIHRyeS4gIFNvCisgIHRoZSBkaXN0cmlidXRpb24gb2YgYmluYXJ5LW9ubHkgbW9kdWxlcyB3aWxsIG1ha2UgaXQgaGFyZGVyIGZvciB5b3VyCisgIHVzZXJzIHRvIGdldCBzdXBwb3J0IGZyb20gdGhlIGNvbW11bml0eS4KKworLSBTdXBwb3J0IGlzIGFsc28gaGFyZGVyIGZvciBkaXN0cmlidXRvcnMgb2YgYmluYXJ5LW9ubHkgbW9kdWxlcywgd2hvIG11c3QKKyAgcHJvdmlkZSBhIHZlcnNpb24gb2YgdGhlIG1vZHVsZSBmb3IgZXZlcnkgZGlzdHJpYnV0aW9uIGFuZCBldmVyeSBrZXJuZWwKKyAgdmVyc2lvbiB0aGV5IHdpc2ggdG8gc3VwcG9ydC4gIERvemVucyBvZiBidWlsZHMgb2YgYSBzaW5nbGUgbW9kdWxlIGNhbgorICBiZSByZXF1aXJlZCB0byBwcm92aWRlIHJlYXNvbmFibHkgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSwgYW5kIHlvdXIgdXNlcnMKKyAgd2lsbCBoYXZlIHRvIHVwZ3JhZGUgeW91ciBtb2R1bGUgc2VwYXJhdGVseSBldmVyeSB0aW1lIHRoZXkgdXBncmFkZSB0aGVpcgorICBrZXJuZWwuCisKKy0gRXZlcnl0aGluZyB0aGF0IHdhcyBzYWlkIGFib3ZlIGFib3V0IGNvZGUgcmV2aWV3IGFwcGxpZXMgZG91Ymx5IHRvCisgIGNsb3NlZC1zb3VyY2UgY29kZS4gIFNpbmNlIHRoaXMgY29kZSBpcyBub3QgYXZhaWxhYmxlIGF0IGFsbCwgaXQgY2Fubm90CisgIGhhdmUgYmVlbiByZXZpZXdlZCBieSB0aGUgY29tbXVuaXR5IGFuZCB3aWxsLCBiZXlvbmQgZG91YnQsIGhhdmUgc2VyaW91cworICBwcm9ibGVtcy4gCisKK01ha2VycyBvZiBlbWJlZGRlZCBzeXN0ZW1zLCBpbiBwYXJ0aWN1bGFyLCBtYXkgYmUgdGVtcHRlZCB0byBkaXNyZWdhcmQgbXVjaAorb2Ygd2hhdCBoYXMgYmVlbiBzYWlkIGluIHRoaXMgc2VjdGlvbiBpbiB0aGUgYmVsaWVmIHRoYXQgdGhleSBhcmUgc2hpcHBpbmcKK2Egc2VsZi1jb250YWluZWQgcHJvZHVjdCB3aGljaCB1c2VzIGEgZnJvemVuIGtlcm5lbCB2ZXJzaW9uIGFuZCByZXF1aXJlcyBubworbW9yZSBkZXZlbG9wbWVudCBhZnRlciBpdHMgcmVsZWFzZS4gIFRoaXMgYXJndW1lbnQgbWlzc2VzIHRoZSB2YWx1ZSBvZgord2lkZXNwcmVhZCBjb2RlIHJldmlldyBhbmQgdGhlIHZhbHVlIG9mIGFsbG93aW5nIHlvdXIgdXNlcnMgdG8gYWRkCitjYXBhYmlsaXRpZXMgdG8geW91ciBwcm9kdWN0LiAgQnV0IHRoZXNlIHByb2R1Y3RzLCB0b28sIGhhdmUgYSBsaW1pdGVkCitjb21tZXJjaWFsIGxpZmUsIGFmdGVyIHdoaWNoIGEgbmV3IHZlcnNpb24gbXVzdCBiZSByZWxlYXNlZC4gIEF0IHRoYXQKK3BvaW50LCB2ZW5kb3JzIHdob3NlIGNvZGUgaXMgaW4gdGhlIG1haW5saW5lIGFuZCB3ZWxsIG1haW50YWluZWQgd2lsbCBiZQorbXVjaCBiZXR0ZXIgcG9zaXRpb25lZCB0byBnZXQgdGhlIG5ldyBwcm9kdWN0IHJlYWR5IGZvciBtYXJrZXQgcXVpY2tseS4KKworCisxLjU6IExJQ0VOU0lORworCitDb2RlIGlzIGNvbnRyaWJ1dGVkIHRvIHRoZSBMaW51eCBrZXJuZWwgdW5kZXIgYSBudW1iZXIgb2YgbGljZW5zZXMsIGJ1dCBhbGwKK2NvZGUgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKEdQTHYyKSwgd2hpY2ggaXMgdGhlIGxpY2Vuc2UgY292ZXJpbmcgdGhlIGtlcm5lbCBkaXN0cmlidXRpb24gYXMgYSB3aG9sZS4KK0luIHByYWN0aWNlLCB0aGF0IG1lYW5zIHRoYXQgYWxsIGNvZGUgY29udHJpYnV0aW9ucyBhcmUgY292ZXJlZCBlaXRoZXIgYnkKK0dQTHYyICh3aXRoLCBvcHRpb25hbGx5LCBsYW5ndWFnZSBhbGxvd2luZyBkaXN0cmlidXRpb24gdW5kZXIgbGF0ZXIKK3ZlcnNpb25zIG9mIHRoZSBHUEwpIG9yIHRoZSB0aHJlZS1jbGF1c2UgQlNEIGxpY2Vuc2UuICBBbnkgY29udHJpYnV0aW9ucword2hpY2ggYXJlIG5vdCBjb3ZlcmVkIGJ5IGEgY29tcGF0aWJsZSBsaWNlbnNlIHdpbGwgbm90IGJlIGFjY2VwdGVkIGludG8gdGhlCitrZXJuZWwuCisKK0NvcHlyaWdodCBhc3NpZ25tZW50cyBhcmUgbm90IHJlcXVpcmVkIChvciByZXF1ZXN0ZWQpIGZvciBjb2RlIGNvbnRyaWJ1dGVkCit0byB0aGUga2VybmVsLiAgQWxsIGNvZGUgbWVyZ2VkIGludG8gdGhlIG1haW5saW5lIGtlcm5lbCByZXRhaW5zIGl0cworb3JpZ2luYWwgb3duZXJzaGlwOyBhcyBhIHJlc3VsdCwgdGhlIGtlcm5lbCBub3cgaGFzIHRob3VzYW5kcyBvZiBvd25lcnMuCisKK09uZSBpbXBsaWNhdGlvbiBvZiB0aGlzIG93bmVyc2hpcCBzdHJ1Y3R1cmUgaXMgdGhhdCBhbnkgYXR0ZW1wdCB0byBjaGFuZ2UKK3RoZSBsaWNlbnNpbmcgb2YgdGhlIGtlcm5lbCBpcyBkb29tZWQgdG8gYWxtb3N0IGNlcnRhaW4gZmFpbHVyZS4gIFRoZXJlIGFyZQorZmV3IHByYWN0aWNhbCBzY2VuYXJpb3Mgd2hlcmUgdGhlIGFncmVlbWVudCBvZiBhbGwgY29weXJpZ2h0IGhvbGRlcnMgY291bGQKK2JlIG9idGFpbmVkIChvciB0aGVpciBjb2RlIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsKS4gIFNvLCBpbiBwYXJ0aWN1bGFyLAordGhlcmUgaXMgbm8gcHJvc3BlY3Qgb2YgYSBtaWdyYXRpb24gdG8gdmVyc2lvbiAzIG9mIHRoZSBHUEwgaW4gdGhlCitmb3Jlc2VlYWJsZSBmdXR1cmUuCisKK0l0IGlzIGltcGVyYXRpdmUgdGhhdCBhbGwgY29kZSBjb250cmlidXRlZCB0byB0aGUga2VybmVsIGJlIGxlZ2l0aW1hdGVseQorZnJlZSBzb2Z0d2FyZS4gIEZvciB0aGF0IHJlYXNvbiwgY29kZSBmcm9tIGFub255bW91cyAob3IgcHNldWRvbnltb3VzKQorY29udHJpYnV0b3JzIHdpbGwgbm90IGJlIGFjY2VwdGVkLiAgQWxsIGNvbnRyaWJ1dG9ycyBhcmUgcmVxdWlyZWQgdG8gInNpZ24KK29mZiIgb24gdGhlaXIgY29kZSwgc3RhdGluZyB0aGF0IHRoZSBjb2RlIGNhbiBiZSBkaXN0cmlidXRlZCB3aXRoIHRoZQora2VybmVsIHVuZGVyIHRoZSBHUEwuICBDb2RlIHdoaWNoIGhhcyBub3QgYmVlbiBsaWNlbnNlZCBhcyBmcmVlIHNvZnR3YXJlIGJ5CitpdHMgb3duZXIsIG9yIHdoaWNoIHJpc2tzIGNyZWF0aW5nIGNvcHlyaWdodC1yZWxhdGVkIHByb2JsZW1zIGZvciB0aGUKK2tlcm5lbCAoc3VjaCBhcyBjb2RlIHdoaWNoIGRlcml2ZXMgZnJvbSByZXZlcnNlLWVuZ2luZWVyaW5nIGVmZm9ydHMgbGFja2luZworcHJvcGVyIHNhZmVndWFyZHMpIGNhbm5vdCBiZSBjb250cmlidXRlZC4KKworUXVlc3Rpb25zIGFib3V0IGNvcHlyaWdodC1yZWxhdGVkIGlzc3VlcyBhcmUgY29tbW9uIG9uIExpbnV4IGRldmVsb3BtZW50CittYWlsaW5nIGxpc3RzLiAgU3VjaCBxdWVzdGlvbnMgd2lsbCBub3JtYWxseSByZWNlaXZlIG5vIHNob3J0YWdlIG9mCithbnN3ZXJzLCBidXQgb25lIHNob3VsZCBiZWFyIGluIG1pbmQgdGhhdCB0aGUgcGVvcGxlIGFuc3dlcmluZyB0aG9zZQorcXVlc3Rpb25zIGFyZSBub3QgbGF3eWVycyBhbmQgY2Fubm90IHByb3ZpZGUgbGVnYWwgYWR2aWNlLiAgSWYgeW91IGhhdmUKK2xlZ2FsIHF1ZXN0aW9ucyByZWxhdGluZyB0byBMaW51eCBzb3VyY2UgY29kZSwgdGhlcmUgaXMgbm8gc3Vic3RpdHV0ZSBmb3IKK3RhbGtpbmcgd2l0aCBhIGxhd3llciB3aG8gdW5kZXJzdGFuZHMgdGhpcyBmaWVsZC4gIFJlbHlpbmcgb24gYW5zd2Vycworb2J0YWluZWQgb24gdGVjaG5pY2FsIG1haWxpbmcgbGlzdHMgaXMgYSByaXNreSBhZmZhaXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvMi5Qcm9jZXNzIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzIuUHJvY2VzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzUwMzIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzIuUHJvY2VzcwpAQCAtMCwwICsxLDQ1OSBAQAorMjogSE9XIFRIRSBERVZFTE9QTUVOVCBQUk9DRVNTIFdPUktTCisKK0xpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCBpbiB0aGUgZWFybHkgMTk5MCdzIHdhcyBhIHByZXR0eSBsb29zZSBhZmZhaXIsCit3aXRoIHJlbGF0aXZlbHkgc21hbGwgbnVtYmVycyBvZiB1c2VycyBhbmQgZGV2ZWxvcGVycyBpbnZvbHZlZC4gIFdpdGggYQordXNlciBiYXNlIGluIHRoZSBtaWxsaW9ucyBhbmQgd2l0aCBzb21lIDIsMDAwIGRldmVsb3BlcnMgaW52b2x2ZWQgb3ZlciB0aGUKK2NvdXJzZSBvZiBvbmUgeWVhciwgdGhlIGtlcm5lbCBoYXMgc2luY2UgaGFkIHRvIGV2b2x2ZSBhIG51bWJlciBvZgorcHJvY2Vzc2VzIHRvIGtlZXAgZGV2ZWxvcG1lbnQgaGFwcGVuaW5nIHNtb290aGx5LiAgQSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mCitob3cgdGhlIHByb2Nlc3Mgd29ya3MgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gYmUgYW4gZWZmZWN0aXZlIHBhcnQgb2YgaXQuCisKKworMi4xOiBUSEUgQklHIFBJQ1RVUkUKKworVGhlIGtlcm5lbCBkZXZlbG9wZXJzIHVzZSBhIGxvb3NlbHkgdGltZS1iYXNlZCByZWxlYXNlIHByb2Nlc3MsIHdpdGggYSBuZXcKK21ham9yIGtlcm5lbCByZWxlYXNlIGhhcHBlbmluZyBldmVyeSB0d28gb3IgdGhyZWUgbW9udGhzLiAgVGhlIHJlY2VudAorcmVsZWFzZSBoaXN0b3J5IGxvb2tzIGxpa2UgdGhpczoKKworCTIuNi4yNglKdWx5IDEzLCAyMDA4CisJMi42LjI1CUFwcmlsIDE2LCAyMDA4CisJMi42LjI0CUphbnVhcnkgMjQsIDIwMDgKKwkyLjYuMjMJT2N0b2JlciA5LCAyMDA3CisJMi42LjIyCUp1bHkgOCwgMjAwNworCTIuNi4yMQlBcHJpbCAyNSwgMjAwNworCTIuNi4yMAlGZWJydWFyeSA0LCAyMDA3CisKK0V2ZXJ5IDIuNi54IHJlbGVhc2UgaXMgYSBtYWpvciBrZXJuZWwgcmVsZWFzZSB3aXRoIG5ldyBmZWF0dXJlcywgaW50ZXJuYWwKK0FQSSBjaGFuZ2VzLCBhbmQgbW9yZS4gIEEgdHlwaWNhbCAyLjYgcmVsZWFzZSBjYW4gY29udGFpbiBvdmVyIDEwLDAwMAorY2hhbmdlc2V0cyB3aXRoIGNoYW5nZXMgdG8gc2V2ZXJhbCBodW5kcmVkIHRob3VzYW5kIGxpbmVzIG9mIGNvZGUuICAyLjYgaXMKK3RodXMgdGhlIGxlYWRpbmcgZWRnZSBvZiBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQ7IHRoZSBrZXJuZWwgdXNlcyBhCityb2xsaW5nIGRldmVsb3BtZW50IG1vZGVsIHdoaWNoIGlzIGNvbnRpbnVhbGx5IGludGVncmF0aW5nIG1ham9yIGNoYW5nZXMuCisKK0EgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZGlzY2lwbGluZSBpcyBmb2xsb3dlZCB3aXRoIHJlZ2FyZCB0byB0aGUKK21lcmdpbmcgb2YgcGF0Y2hlcyBmb3IgZWFjaCByZWxlYXNlLiAgQXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGRldmVsb3BtZW50CitjeWNsZSwgdGhlICJtZXJnZSB3aW5kb3ciIGlzIHNhaWQgdG8gYmUgb3Blbi4gIEF0IHRoYXQgdGltZSwgY29kZSB3aGljaCBpcworZGVlbWVkIHRvIGJlIHN1ZmZpY2llbnRseSBzdGFibGUgKGFuZCB3aGljaCBpcyBhY2NlcHRlZCBieSB0aGUgZGV2ZWxvcG1lbnQKK2NvbW11bml0eSkgaXMgbWVyZ2VkIGludG8gdGhlIG1haW5saW5lIGtlcm5lbC4gIFRoZSBidWxrIG9mIGNoYW5nZXMgZm9yIGEKK25ldyBkZXZlbG9wbWVudCBjeWNsZSAoYW5kIGFsbCBvZiB0aGUgbWFqb3IgY2hhbmdlcykgd2lsbCBiZSBtZXJnZWQgZHVyaW5nCit0aGlzIHRpbWUsIGF0IGEgcmF0ZSBhcHByb2FjaGluZyAxLDAwMCBjaGFuZ2VzICgicGF0Y2hlcywiIG9yICJjaGFuZ2VzZXRzIikKK3BlciBkYXkuCisKKyhBcyBhbiBhc2lkZSwgaXQgaXMgd29ydGggbm90aW5nIHRoYXQgdGhlIGNoYW5nZXMgaW50ZWdyYXRlZCBkdXJpbmcgdGhlCittZXJnZSB3aW5kb3cgZG8gbm90IGNvbWUgb3V0IG9mIHRoaW4gYWlyOyB0aGV5IGhhdmUgYmVlbiBjb2xsZWN0ZWQsIHRlc3RlZCwKK2FuZCBzdGFnZWQgYWhlYWQgb2YgdGltZS4gIEhvdyB0aGF0IHByb2Nlc3Mgd29ya3Mgd2lsbCBiZSBkZXNjcmliZWQgaW4KK2RldGFpbCBsYXRlciBvbikuCisKK1RoZSBtZXJnZSB3aW5kb3cgbGFzdHMgZm9yIHR3byB3ZWVrcy4gIEF0IHRoZSBlbmQgb2YgdGhpcyB0aW1lLCBMaW51cworVG9ydmFsZHMgd2lsbCBkZWNsYXJlIHRoYXQgdGhlIHdpbmRvdyBpcyBjbG9zZWQgYW5kIHJlbGVhc2UgdGhlIGZpcnN0IG9mCit0aGUgInJjIiBrZXJuZWxzLiAgRm9yIHRoZSBrZXJuZWwgd2hpY2ggaXMgZGVzdGluZWQgdG8gYmUgMi42LjI2LCBmb3IKK2V4YW1wbGUsIHRoZSByZWxlYXNlIHdoaWNoIGhhcHBlbnMgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2Ugd2luZG93IHdpbGwgYmUKK2NhbGxlZCAyLjYuMjYtcmMxLiAgVGhlIC1yYzEgcmVsZWFzZSBpcyB0aGUgc2lnbmFsIHRoYXQgdGhlIHRpbWUgdG8gbWVyZ2UKK25ldyBmZWF0dXJlcyBoYXMgcGFzc2VkLCBhbmQgdGhhdCB0aGUgdGltZSB0byBzdGFiaWxpemUgdGhlIG5leHQga2VybmVsIGhhcworYmVndW4uCisKK092ZXIgdGhlIG5leHQgc2l4IHRvIHRlbiB3ZWVrcywgb25seSBwYXRjaGVzIHdoaWNoIGZpeCBwcm9ibGVtcyBzaG91bGQgYmUKK3N1Ym1pdHRlZCB0byB0aGUgbWFpbmxpbmUuICBPbiBvY2Nhc2lvbiBhIG1vcmUgc2lnbmlmaWNhbnQgY2hhbmdlIHdpbGwgYmUKK2FsbG93ZWQsIGJ1dCBzdWNoIG9jY2FzaW9ucyBhcmUgcmFyZTsgZGV2ZWxvcGVycyB3aG8gdHJ5IHRvIG1lcmdlIG5ldworZmVhdHVyZXMgb3V0c2lkZSBvZiB0aGUgbWVyZ2Ugd2luZG93IHRlbmQgdG8gZ2V0IGFuIHVuZnJpZW5kbHkgcmVjZXB0aW9uLgorQXMgYSBnZW5lcmFsIHJ1bGUsIGlmIHlvdSBtaXNzIHRoZSBtZXJnZSB3aW5kb3cgZm9yIGEgZ2l2ZW4gZmVhdHVyZSwgdGhlCitiZXN0IHRoaW5nIHRvIGRvIGlzIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGRldmVsb3BtZW50IGN5Y2xlLiAgKEFuIG9jY2FzaW9uYWwKK2V4Y2VwdGlvbiBpcyBtYWRlIGZvciBkcml2ZXJzIGZvciBwcmV2aW91c2x5LXVuc3VwcG9ydGVkIGhhcmR3YXJlOyBpZiB0aGV5Cit0b3VjaCBubyBpbi10cmVlIGNvZGUsIHRoZXkgY2Fubm90IGNhdXNlIHJlZ3Jlc3Npb25zIGFuZCBzaG91bGQgYmUgc2FmZSB0bworYWRkIGF0IGFueSB0aW1lKS4KKworQXMgZml4ZXMgbWFrZSB0aGVpciB3YXkgaW50byB0aGUgbWFpbmxpbmUsIHRoZSBwYXRjaCByYXRlIHdpbGwgc2xvdyBvdmVyCit0aW1lLiAgTGludXMgcmVsZWFzZXMgbmV3IC1yYyBrZXJuZWxzIGFib3V0IG9uY2UgYSB3ZWVrOyBhIG5vcm1hbCBzZXJpZXMKK3dpbGwgZ2V0IHVwIHRvIHNvbWV3aGVyZSBiZXR3ZWVuIC1yYzYgYW5kIC1yYzkgYmVmb3JlIHRoZSBrZXJuZWwgaXMKK2NvbnNpZGVyZWQgdG8gYmUgc3VmZmljaWVudGx5IHN0YWJsZSBhbmQgdGhlIGZpbmFsIDIuNi54IHJlbGVhc2UgaXMgbWFkZS4KK0F0IHRoYXQgcG9pbnQgdGhlIHdob2xlIHByb2Nlc3Mgc3RhcnRzIG92ZXIgYWdhaW4uCisKK0FzIGFuIGV4YW1wbGUsIGhlcmUgaXMgaG93IHRoZSAyLjYuMjUgZGV2ZWxvcG1lbnQgY3ljbGUgd2VudCAoYWxsIGRhdGVzIGluCisyMDA4KTogCisKKwlKYW51YXJ5IDI0CTIuNi4yNCBzdGFibGUgcmVsZWFzZQorCUZlYnJ1YXJ5IDEwCTIuNi4yNS1yYzEsIG1lcmdlIHdpbmRvdyBjbG9zZXMKKwlGZWJydWFyeSAxNQkyLjYuMjUtcmMyCisJRmVicnVhcnkgMjQJMi42LjI1LXJjMworCU1hcmNoIDQJIAkyLjYuMjUtcmM0CisJTWFyY2ggOQkJMi42LjI1LXJjNQorCU1hcmNoIDE2CTIuNi4yNS1yYzYKKwlNYXJjaCAyNQkyLjYuMjUtcmM3CisJQXByaWwgMQkJMi42LjI1LXJjOAorCUFwcmlsIDExCTIuNi4yNS1yYzkKKwlBcHJpbCAxNgkyLjYuMjUgc3RhYmxlIHJlbGVhc2UKKworSG93IGRvIHRoZSBkZXZlbG9wZXJzIGRlY2lkZSB3aGVuIHRvIGNsb3NlIHRoZSBkZXZlbG9wbWVudCBjeWNsZSBhbmQgY3JlYXRlCit0aGUgc3RhYmxlIHJlbGVhc2U/ICBUaGUgbW9zdCBzaWduaWZpY2FudCBtZXRyaWMgdXNlZCBpcyB0aGUgbGlzdCBvZgorcmVncmVzc2lvbnMgZnJvbSBwcmV2aW91cyByZWxlYXNlcy4gIE5vIGJ1Z3MgYXJlIHdlbGNvbWUsIGJ1dCB0aG9zZSB3aGljaAorYnJlYWsgc3lzdGVtcyB3aGljaCB3b3JrZWQgaW4gdGhlIHBhc3QgYXJlIGNvbnNpZGVyZWQgdG8gYmUgZXNwZWNpYWxseQorc2VyaW91cy4gIEZvciB0aGlzIHJlYXNvbiwgcGF0Y2hlcyB3aGljaCBjYXVzZSByZWdyZXNzaW9ucyBhcmUgbG9va2VkIHVwb24KK3VuZmF2b3JhYmx5IGFuZCBhcmUgcXVpdGUgbGlrZWx5IHRvIGJlIHJldmVydGVkIGR1cmluZyB0aGUgc3RhYmlsaXphdGlvbgorcGVyaW9kLiAKKworVGhlIGRldmVsb3BlcnMnIGdvYWwgaXMgdG8gZml4IGFsbCBrbm93biByZWdyZXNzaW9ucyBiZWZvcmUgdGhlIHN0YWJsZQorcmVsZWFzZSBpcyBtYWRlLiAgSW4gdGhlIHJlYWwgd29ybGQsIHRoaXMga2luZCBvZiBwZXJmZWN0aW9uIGlzIGhhcmQgdG8KK2FjaGlldmU7IHRoZXJlIGFyZSBqdXN0IHRvbyBtYW55IHZhcmlhYmxlcyBpbiBhIHByb2plY3Qgb2YgdGhpcyBzaXplLgorVGhlcmUgY29tZXMgYSBwb2ludCB3aGVyZSBkZWxheWluZyB0aGUgZmluYWwgcmVsZWFzZSBqdXN0IG1ha2VzIHRoZSBwcm9ibGVtCit3b3JzZTsgdGhlIHBpbGUgb2YgY2hhbmdlcyB3YWl0aW5nIGZvciB0aGUgbmV4dCBtZXJnZSB3aW5kb3cgd2lsbCBncm93CitsYXJnZXIsIGNyZWF0aW5nIGV2ZW4gbW9yZSByZWdyZXNzaW9ucyB0aGUgbmV4dCB0aW1lIGFyb3VuZC4gIFNvIG1vc3QgMi42LngKK2tlcm5lbHMgZ28gb3V0IHdpdGggYSBoYW5kZnVsIG9mIGtub3duIHJlZ3Jlc3Npb25zIHRob3VnaCwgaG9wZWZ1bGx5LCBub25lCitvZiB0aGVtIGFyZSBzZXJpb3VzLgorCitPbmNlIGEgc3RhYmxlIHJlbGVhc2UgaXMgbWFkZSwgaXRzIG9uZ29pbmcgbWFpbnRlbmFuY2UgaXMgcGFzc2VkIG9mZiB0byB0aGUKKyJzdGFibGUgdGVhbSwiIGN1cnJlbnRseSBjb21wcmlzZWQgb2YgR3JlZyBLcm9haC1IYXJ0bWFuIGFuZCBDaHJpcyBXcmlnaHQuCitUaGUgc3RhYmxlIHRlYW0gd2lsbCByZWxlYXNlIG9jY2FzaW9uYWwgdXBkYXRlcyB0byB0aGUgc3RhYmxlIHJlbGVhc2UgdXNpbmcKK3RoZSAyLjYueC55IG51bWJlcmluZyBzY2hlbWUuICBUbyBiZSBjb25zaWRlcmVkIGZvciBhbiB1cGRhdGUgcmVsZWFzZSwgYQorcGF0Y2ggbXVzdCAoMSkgZml4IGEgc2lnbmlmaWNhbnQgYnVnLCBhbmQgKDIpIGFscmVhZHkgYmUgbWVyZ2VkIGludG8gdGhlCittYWlubGluZSBmb3IgdGhlIG5leHQgZGV2ZWxvcG1lbnQga2VybmVsLiAgQ29udGludWluZyBvdXIgMi42LjI1IGV4YW1wbGUsCit0aGUgaGlzdG9yeSAoYXMgb2YgdGhpcyB3cml0aW5nKSBpczoKKworCU1heSAxCQkyLjYuMjUuMQorCU1heSA2CQkyLjYuMjUuMiAKKwlNYXkgOQkJMi42LjI1LjMgCisJTWF5IDE1CQkyLjYuMjUuNAorCUp1bmUgNwkJMi42LjI1LjUKKwlKdW5lIDkJCTIuNi4yNS42CisJSnVuZSAxNgkJMi42LjI1LjcKKwlKdW5lIDIxCQkyLjYuMjUuOAorCUp1bmUgMjQJCTIuNi4yNS45CisKK1N0YWJsZSB1cGRhdGVzIGZvciBhIGdpdmVuIGtlcm5lbCBhcmUgbWFkZSBmb3IgYXBwcm94aW1hdGVseSBzaXggbW9udGhzOworYWZ0ZXIgdGhhdCwgdGhlIG1haW50ZW5hbmNlIG9mIHN0YWJsZSByZWxlYXNlcyBpcyBzb2xlbHkgdGhlIHJlc3BvbnNpYmlsaXR5CitvZiB0aGUgZGlzdHJpYnV0b3JzIHdoaWNoIGhhdmUgc2hpcHBlZCB0aGF0IHBhcnRpY3VsYXIga2VybmVsLgorCisKKzIuMjogVEhFIExJRkVDWUNMRSBPRiBBIFBBVENICisKK1BhdGNoZXMgZG8gbm90IGdvIGRpcmVjdGx5IGZyb20gdGhlIGRldmVsb3BlcidzIGtleWJvYXJkIGludG8gdGhlIG1haW5saW5lCitrZXJuZWwuICBUaGVyZSBpcywgaW5zdGVhZCwgYSBzb21ld2hhdCBpbnZvbHZlZCAoaWYgc29tZXdoYXQgaW5mb3JtYWwpCitwcm9jZXNzIGRlc2lnbmVkIHRvIGVuc3VyZSB0aGF0IGVhY2ggcGF0Y2ggaXMgcmV2aWV3ZWQgZm9yIHF1YWxpdHkgYW5kIHRoYXQKK2VhY2ggcGF0Y2ggaW1wbGVtZW50cyBhIGNoYW5nZSB3aGljaCBpcyBkZXNpcmFibGUgdG8gaGF2ZSBpbiB0aGUgbWFpbmxpbmUuCitUaGlzIHByb2Nlc3MgY2FuIGhhcHBlbiBxdWlja2x5IGZvciBtaW5vciBmaXhlcywgb3IsIGluIHRoZSBjYXNlIG9mIGxhcmdlCithbmQgY29udHJvdmVyc2lhbCBjaGFuZ2VzLCBnbyBvbiBmb3IgeWVhcnMuICBNdWNoIGRldmVsb3BlciBmcnVzdHJhdGlvbgorY29tZXMgZnJvbSBhIGxhY2sgb2YgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHByb2Nlc3Mgb3IgZnJvbSBhdHRlbXB0cyB0bworY2lyY3VtdmVudCBpdC4gIAorCitJbiB0aGUgaG9wZXMgb2YgcmVkdWNpbmcgdGhhdCBmcnVzdHJhdGlvbiwgdGhpcyBkb2N1bWVudCB3aWxsIGRlc2NyaWJlIGhvdworYSBwYXRjaCBnZXRzIGludG8gdGhlIGtlcm5lbC4gIFdoYXQgZm9sbG93cyBiZWxvdyBpcyBhbiBpbnRyb2R1Y3Rpb24gd2hpY2gKK2Rlc2NyaWJlcyB0aGUgcHJvY2VzcyBpbiBhIHNvbWV3aGF0IGlkZWFsaXplZCB3YXkuICBBIG11Y2ggbW9yZSBkZXRhaWxlZAordHJlYXRtZW50IHdpbGwgY29tZSBpbiBsYXRlciBzZWN0aW9ucy4KKworVGhlIHN0YWdlcyB0aGF0IGEgcGF0Y2ggZ29lcyB0aHJvdWdoIGFyZSwgZ2VuZXJhbGx5OgorCisgLSBEZXNpZ24uICBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHJlcXVpcmVtZW50cyBmb3IgdGhlIHBhdGNoIC0gYW5kIHRoZSB3YXkKKyAgIHRob3NlIHJlcXVpcmVtZW50cyB3aWxsIGJlIG1ldCAtIGFyZSBsYWlkIG91dC4gIERlc2lnbiB3b3JrIGlzIG9mdGVuCisgICBkb25lIHdpdGhvdXQgaW52b2x2aW5nIHRoZSBjb21tdW5pdHksIGJ1dCBpdCBpcyBiZXR0ZXIgdG8gZG8gdGhpcyB3b3JrCisgICBpbiB0aGUgb3BlbiBpZiBhdCBhbGwgcG9zc2libGU7IGl0IGNhbiBzYXZlIGEgbG90IG9mIHRpbWUgcmVkZXNpZ25pbmcKKyAgIHRoaW5ncyBsYXRlci4KKworIC0gRWFybHkgcmV2aWV3LiAgUGF0Y2hlcyBhcmUgcG9zdGVkIHRvIHRoZSByZWxldmFudCBtYWlsaW5nIGxpc3QsIGFuZAorICAgZGV2ZWxvcGVycyBvbiB0aGF0IGxpc3QgcmVwbHkgd2l0aCBhbnkgY29tbWVudHMgdGhleSBtYXkgaGF2ZS4gIFRoaXMKKyAgIHByb2Nlc3Mgc2hvdWxkIHR1cm4gdXAgYW55IG1ham9yIHByb2JsZW1zIHdpdGggYSBwYXRjaCBpZiBhbGwgZ29lcworICAgd2VsbC4KKworIC0gV2lkZXIgcmV2aWV3LiAgV2hlbiB0aGUgcGF0Y2ggaXMgZ2V0dGluZyBjbG9zZSB0byByZWFkeSBmb3IgbWFpbmxpbmUKKyAgIGluY2x1c2lvbiwgaXQgd2lsbCBiZSBhY2NlcHRlZCBieSBhIHJlbGV2YW50IHN1YnN5c3RlbSBtYWludGFpbmVyIC0KKyAgIHRob3VnaCB0aGlzIGFjY2VwdGFuY2UgaXMgbm90IGEgZ3VhcmFudGVlIHRoYXQgdGhlIHBhdGNoIHdpbGwgbWFrZSBpdAorICAgYWxsIHRoZSB3YXkgdG8gdGhlIG1haW5saW5lLiAgVGhlIHBhdGNoIHdpbGwgc2hvdyB1cCBpbiB0aGUgbWFpbnRhaW5lcidzCisgICBzdWJzeXN0ZW0gdHJlZSBhbmQgaW50byB0aGUgc3RhZ2luZyB0cmVlcyAoZGVzY3JpYmVkIGJlbG93KS4gIFdoZW4gdGhlCisgICBwcm9jZXNzIHdvcmtzLCB0aGlzIHN0ZXAgbGVhZHMgdG8gbW9yZSBleHRlbnNpdmUgcmV2aWV3IG9mIHRoZSBwYXRjaCBhbmQKKyAgIHRoZSBkaXNjb3Zlcnkgb2YgYW55IHByb2JsZW1zIHJlc3VsdGluZyBmcm9tIHRoZSBpbnRlZ3JhdGlvbiBvZiB0aGlzCisgICBwYXRjaCB3aXRoIHdvcmsgYmVpbmcgZG9uZSBieSBvdGhlcnMuCisKKyAtIE1lcmdpbmcgaW50byB0aGUgbWFpbmxpbmUuICBFdmVudHVhbGx5LCBhIHN1Y2Nlc3NmdWwgcGF0Y2ggd2lsbCBiZQorICAgbWVyZ2VkIGludG8gdGhlIG1haW5saW5lIHJlcG9zaXRvcnkgbWFuYWdlZCBieSBMaW51cyBUb3J2YWxkcy4gIE1vcmUKKyAgIGNvbW1lbnRzIGFuZC9vciBwcm9ibGVtcyBtYXkgc3VyZmFjZSBhdCB0aGlzIHRpbWU7IGl0IGlzIGltcG9ydGFudCB0aGF0CisgICB0aGUgZGV2ZWxvcGVyIGJlIHJlc3BvbnNpdmUgdG8gdGhlc2UgYW5kIGZpeCBhbnkgaXNzdWVzIHdoaWNoIGFyaXNlLgorCisgLSBTdGFibGUgcmVsZWFzZS4gIFRoZSBudW1iZXIgb2YgdXNlcnMgcG90ZW50aWFsbHkgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoCisgICBpcyBub3cgbGFyZ2UsIHNvLCBvbmNlIGFnYWluLCBuZXcgcHJvYmxlbXMgbWF5IGFyaXNlLgorCisgLSBMb25nLXRlcm0gbWFpbnRlbmFuY2UuICBXaGlsZSBpdCBpcyBjZXJ0YWlubHkgcG9zc2libGUgZm9yIGEgZGV2ZWxvcGVyCisgICB0byBmb3JnZXQgYWJvdXQgY29kZSBhZnRlciBtZXJnaW5nIGl0LCB0aGF0IHNvcnQgb2YgYmVoYXZpb3IgdGVuZHMgdG8KKyAgIGxlYXZlIGEgcG9vciBpbXByZXNzaW9uIGluIHRoZSBkZXZlbG9wbWVudCBjb21tdW5pdHkuICBNZXJnaW5nIGNvZGUKKyAgIGVsaW1pbmF0ZXMgc29tZSBvZiB0aGUgbWFpbnRlbmFuY2UgYnVyZGVuLCBpbiB0aGF0IG90aGVycyB3aWxsIGZpeAorICAgcHJvYmxlbXMgY2F1c2VkIGJ5IEFQSSBjaGFuZ2VzLiAgQnV0IHRoZSBvcmlnaW5hbCBkZXZlbG9wZXIgc2hvdWxkCisgICBjb250aW51ZSB0byB0YWtlIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgY29kZSBpZiBpdCBpcyB0byByZW1haW4gdXNlZnVsCisgICBpbiB0aGUgbG9uZ2VyIHRlcm0uCisKK09uZSBvZiB0aGUgbGFyZ2VzdCBtaXN0YWtlcyBtYWRlIGJ5IGtlcm5lbCBkZXZlbG9wZXJzIChvciB0aGVpciBlbXBsb3llcnMpCitpcyB0byB0cnkgdG8gY3V0IHRoZSBwcm9jZXNzIGRvd24gdG8gYSBzaW5nbGUgIm1lcmdpbmcgaW50byB0aGUgbWFpbmxpbmUiCitzdGVwLiAgVGhpcyBhcHByb2FjaCBpbnZhcmlhYmx5IGxlYWRzIHRvIGZydXN0cmF0aW9uIGZvciBldmVyeWJvZHkKK2ludm9sdmVkLgorCisKKzIuMzogSE9XIFBBVENIRVMgR0VUIElOVE8gVEhFIEtFUk5FTAorCitUaGVyZSBpcyBleGFjdGx5IG9uZSBwZXJzb24gd2hvIGNhbiBtZXJnZSBwYXRjaGVzIGludG8gdGhlIG1haW5saW5lIGtlcm5lbAorcmVwb3NpdG9yeTogTGludXMgVG9ydmFsZHMuICBCdXQsIG9mIHRoZSBvdmVyIDEyLDAwMCBwYXRjaGVzIHdoaWNoIHdlbnQKK2ludG8gdGhlIDIuNi4yNSBrZXJuZWwsIG9ubHkgMjUwIChhcm91bmQgMiUpIHdlcmUgZGlyZWN0bHkgY2hvc2VuIGJ5IExpbnVzCitoaW1zZWxmLiAgVGhlIGtlcm5lbCBwcm9qZWN0IGhhcyBsb25nIHNpbmNlIGdyb3duIHRvIGEgc2l6ZSB3aGVyZSBubyBzaW5nbGUKK2RldmVsb3BlciBjb3VsZCBwb3NzaWJseSBpbnNwZWN0IGFuZCBzZWxlY3QgZXZlcnkgcGF0Y2ggdW5hc3Npc3RlZC4gIFRoZQord2F5IHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBoYXZlIGFkZHJlc3NlZCB0aGlzIGdyb3d0aCBpcyB0aHJvdWdoIHRoZSB1c2Ugb2YKK2EgbGlldXRlbmFudCBzeXN0ZW0gYnVpbHQgYXJvdW5kIGEgY2hhaW4gb2YgdHJ1c3QuCisKK1RoZSBrZXJuZWwgY29kZSBiYXNlIGlzIGxvZ2ljYWxseSBicm9rZW4gZG93biBpbnRvIGEgc2V0IG9mIHN1YnN5c3RlbXM6CituZXR3b3JraW5nLCBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgc3VwcG9ydCwgbWVtb3J5IG1hbmFnZW1lbnQsIHZpZGVvCitkZXZpY2VzLCBldGMuICBNb3N0IHN1YnN5c3RlbXMgaGF2ZSBhIGRlc2lnbmF0ZWQgbWFpbnRhaW5lciwgYSBkZXZlbG9wZXIKK3dobyBoYXMgb3ZlcmFsbCByZXNwb25zaWJpbGl0eSBmb3IgdGhlIGNvZGUgd2l0aGluIHRoYXQgc3Vic3lzdGVtLiAgVGhlc2UKK3N1YnN5c3RlbSBtYWludGFpbmVycyBhcmUgdGhlIGdhdGVrZWVwZXJzIChpbiBhIGxvb3NlIHdheSkgZm9yIHRoZSBwb3J0aW9uCitvZiB0aGUga2VybmVsIHRoZXkgbWFuYWdlOyB0aGV5IGFyZSB0aGUgb25lcyB3aG8gd2lsbCAodXN1YWxseSkgYWNjZXB0IGEKK3BhdGNoIGZvciBpbmNsdXNpb24gaW50byB0aGUgbWFpbmxpbmUga2VybmVsLgorCitTdWJzeXN0ZW0gbWFpbnRhaW5lcnMgZWFjaCBtYW5hZ2UgdGhlaXIgb3duIHZlcnNpb24gb2YgdGhlIGtlcm5lbCBzb3VyY2UKK3RyZWUsIHVzdWFsbHkgKGJ1dCBjZXJ0YWlubHkgbm90IGFsd2F5cykgdXNpbmcgdGhlIGdpdCBzb3VyY2UgbWFuYWdlbWVudAordG9vbC4gIFRvb2xzIGxpa2UgZ2l0IChhbmQgcmVsYXRlZCB0b29scyBsaWtlIHF1aWx0IG9yIG1lcmN1cmlhbCkgYWxsb3cKK21haW50YWluZXJzIHRvIHRyYWNrIGEgbGlzdCBvZiBwYXRjaGVzLCBpbmNsdWRpbmcgYXV0aG9yc2hpcCBpbmZvcm1hdGlvbgorYW5kIG90aGVyIG1ldGFkYXRhLiAgQXQgYW55IGdpdmVuIHRpbWUsIHRoZSBtYWludGFpbmVyIGNhbiBpZGVudGlmeSB3aGljaAorcGF0Y2hlcyBpbiBoaXMgb3IgaGVyIHJlcG9zaXRvcnkgYXJlIG5vdCBmb3VuZCBpbiB0aGUgbWFpbmxpbmUuCisKK1doZW4gdGhlIG1lcmdlIHdpbmRvdyBvcGVucywgdG9wLWxldmVsIG1haW50YWluZXJzIHdpbGwgYXNrIExpbnVzIHRvICJwdWxsIgordGhlIHBhdGNoZXMgdGhleSBoYXZlIHNlbGVjdGVkIGZvciBtZXJnaW5nIGZyb20gdGhlaXIgcmVwb3NpdG9yaWVzLiAgSWYKK0xpbnVzIGFncmVlcywgdGhlIHN0cmVhbSBvZiBwYXRjaGVzIHdpbGwgZmxvdyB1cCBpbnRvIGhpcyByZXBvc2l0b3J5LAorYmVjb21pbmcgcGFydCBvZiB0aGUgbWFpbmxpbmUga2VybmVsLiAgVGhlIGFtb3VudCBvZiBhdHRlbnRpb24gdGhhdCBMaW51cworcGF5cyB0byBzcGVjaWZpYyBwYXRjaGVzIHJlY2VpdmVkIGluIGEgcHVsbCBvcGVyYXRpb24gdmFyaWVzLiAgSXQgaXMgY2xlYXIKK3RoYXQsIHNvbWV0aW1lcywgaGUgbG9va3MgcXVpdGUgY2xvc2VseS4gIEJ1dCwgYXMgYSBnZW5lcmFsIHJ1bGUsIExpbnVzCit0cnVzdHMgdGhlIHN1YnN5c3RlbSBtYWludGFpbmVycyB0byBub3Qgc2VuZCBiYWQgcGF0Y2hlcyB1cHN0cmVhbS4KKworU3Vic3lzdGVtIG1haW50YWluZXJzLCBpbiB0dXJuLCBjYW4gcHVsbCBwYXRjaGVzIGZyb20gb3RoZXIgbWFpbnRhaW5lcnMuCitGb3IgZXhhbXBsZSwgdGhlIG5ldHdvcmtpbmcgdHJlZSBpcyBidWlsdCBmcm9tIHBhdGNoZXMgd2hpY2ggYWNjdW11bGF0ZWQKK2ZpcnN0IGluIHRyZWVzIGRlZGljYXRlZCB0byBuZXR3b3JrIGRldmljZSBkcml2ZXJzLCB3aXJlbGVzcyBuZXR3b3JraW5nLAorZXRjLiAgVGhpcyBjaGFpbiBvZiByZXBvc2l0b3JpZXMgY2FuIGJlIGFyYml0cmFyaWx5IGxvbmcsIHRob3VnaCBpdCByYXJlbHkKK2V4Y2VlZHMgdHdvIG9yIHRocmVlIGxpbmtzLiAgU2luY2UgZWFjaCBtYWludGFpbmVyIGluIHRoZSBjaGFpbiB0cnVzdHMKK3Rob3NlIG1hbmFnaW5nIGxvd2VyLWxldmVsIHRyZWVzLCB0aGlzIHByb2Nlc3MgaXMga25vd24gYXMgdGhlICJjaGFpbiBvZgordHJ1c3QuIiAKKworQ2xlYXJseSwgaW4gYSBzeXN0ZW0gbGlrZSB0aGlzLCBnZXR0aW5nIHBhdGNoZXMgaW50byB0aGUga2VybmVsIGRlcGVuZHMgb24KK2ZpbmRpbmcgdGhlIHJpZ2h0IG1haW50YWluZXIuICBTZW5kaW5nIHBhdGNoZXMgZGlyZWN0bHkgdG8gTGludXMgaXMgbm90Citub3JtYWxseSB0aGUgcmlnaHQgd2F5IHRvIGdvLgorCisKKzIuNDogU1RBR0lORyBUUkVFUworCitUaGUgY2hhaW4gb2Ygc3Vic3lzdGVtIHRyZWVzIGd1aWRlcyB0aGUgZmxvdyBvZiBwYXRjaGVzIGludG8gdGhlIGtlcm5lbCwKK2J1dCBpdCBhbHNvIHJhaXNlcyBhbiBpbnRlcmVzdGluZyBxdWVzdGlvbjogd2hhdCBpZiBzb21lYm9keSB3YW50cyB0byBsb29rCithdCBhbGwgb2YgdGhlIHBhdGNoZXMgd2hpY2ggYXJlIGJlaW5nIHByZXBhcmVkIGZvciB0aGUgbmV4dCBtZXJnZSB3aW5kb3c/CitEZXZlbG9wZXJzIHdpbGwgYmUgaW50ZXJlc3RlZCBpbiB3aGF0IG90aGVyIGNoYW5nZXMgYXJlIHBlbmRpbmcgdG8gc2VlCit3aGV0aGVyIHRoZXJlIGFyZSBhbnkgY29uZmxpY3RzIHRvIHdvcnJ5IGFib3V0OyBhIHBhdGNoIHdoaWNoIGNoYW5nZXMgYQorY29yZSBrZXJuZWwgZnVuY3Rpb24gcHJvdG90eXBlLCBmb3IgZXhhbXBsZSwgd2lsbCBjb25mbGljdCB3aXRoIGFueSBvdGhlcgorcGF0Y2hlcyB3aGljaCB1c2UgdGhlIG9sZGVyIGZvcm0gb2YgdGhhdCBmdW5jdGlvbi4gIFJldmlld2VycyBhbmQgdGVzdGVycword2FudCBhY2Nlc3MgdG8gdGhlIGNoYW5nZXMgaW4gdGhlaXIgaW50ZWdyYXRlZCBmb3JtIGJlZm9yZSBhbGwgb2YgdGhvc2UKK2NoYW5nZXMgbGFuZCBpbiB0aGUgbWFpbmxpbmUga2VybmVsLiAgT25lIGNvdWxkIHB1bGwgY2hhbmdlcyBmcm9tIGFsbCBvZgordGhlIGludGVyZXN0aW5nIHN1YnN5c3RlbSB0cmVlcywgYnV0IHRoYXQgd291bGQgYmUgYSBiaWcgYW5kIGVycm9yLXByb25lCitqb2IuCisKK1RoZSBhbnN3ZXIgY29tZXMgaW4gdGhlIGZvcm0gb2Ygc3RhZ2luZyB0cmVlcywgd2hlcmUgc3Vic3lzdGVtIHRyZWVzIGFyZQorY29sbGVjdGVkIGZvciB0ZXN0aW5nIGFuZCByZXZpZXcuICBUaGUgb2xkZXIgb2YgdGhlc2UgdHJlZXMsIG1haW50YWluZWQgYnkKK0FuZHJldyBNb3J0b24sIGlzIGNhbGxlZCAiLW1tIiAoZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyBob3cgaXQgZ290CitzdGFydGVkKS4gIFRoZSAtbW0gdHJlZSBpbnRlZ3JhdGVzIHBhdGNoZXMgZnJvbSBhIGxvbmcgbGlzdCBvZiBzdWJzeXN0ZW0KK3RyZWVzOyBpdCBhbHNvIGhhcyBzb21lIHBhdGNoZXMgYWltZWQgYXQgaGVscGluZyB3aXRoIGRlYnVnZ2luZy4gIAorCitCZXlvbmQgdGhhdCwgLW1tIGNvbnRhaW5zIGEgc2lnbmlmaWNhbnQgY29sbGVjdGlvbiBvZiBwYXRjaGVzIHdoaWNoIGhhdmUKK2JlZW4gc2VsZWN0ZWQgYnkgQW5kcmV3IGRpcmVjdGx5LiAgVGhlc2UgcGF0Y2hlcyBtYXkgaGF2ZSBiZWVuIHBvc3RlZCBvbiBhCittYWlsaW5nIGxpc3QsIG9yIHRoZXkgbWF5IGFwcGx5IHRvIGEgcGFydCBvZiB0aGUga2VybmVsIGZvciB3aGljaCB0aGVyZSBpcworbm8gZGVzaWduYXRlZCBzdWJzeXN0ZW0gdHJlZS4gIEFzIGEgcmVzdWx0LCAtbW0gb3BlcmF0ZXMgYXMgYSBzb3J0IG9mCitzdWJzeXN0ZW0gdHJlZSBvZiBsYXN0IHJlc29ydDsgaWYgdGhlcmUgaXMgbm8gb3RoZXIgb2J2aW91cyBwYXRoIGZvciBhCitwYXRjaCBpbnRvIHRoZSBtYWlubGluZSwgaXQgaXMgbGlrZWx5IHRvIGVuZCB1cCBpbiAtbW0uICBNaXNjZWxsYW5lb3VzCitwYXRjaGVzIHdoaWNoIGFjY3VtdWxhdGUgaW4gLW1tIHdpbGwgZXZlbnR1YWxseSBlaXRoZXIgYmUgZm9yd2FyZGVkIG9uIHRvCithbiBhcHByb3ByaWF0ZSBzdWJzeXN0ZW0gdHJlZSBvciBiZSBzZW50IGRpcmVjdGx5IHRvIExpbnVzLiAgSW4gYSB0eXBpY2FsCitkZXZlbG9wbWVudCBjeWNsZSwgYXBwcm94aW1hdGVseSAxMCUgb2YgdGhlIHBhdGNoZXMgZ29pbmcgaW50byB0aGUgbWFpbmxpbmUKK2dldCB0aGVyZSB2aWEgLW1tLgorCitUaGUgY3VycmVudCAtbW0gcGF0Y2ggY2FuIGFsd2F5cyBiZSBmb3VuZCBmcm9tIHRoZSBmcm9udCBwYWdlIG9mCisKKwlodHRwOi8va2VybmVsLm9yZy8KKworVGhvc2Ugd2hvIHdhbnQgdG8gc2VlIHRoZSBjdXJyZW50IHN0YXRlIG9mIC1tbSBjYW4gZ2V0IHRoZSAiLW1tIG9mIHRoZQorbW9tZW50IiB0cmVlLCBmb3VuZCBhdDoKKworCWh0dHA6Ly91c2Vyd2ViLmtlcm5lbC5vcmcvfmFrcG0vbW1vdG0vCisKK1VzZSBvZiB0aGUgTU1PVE0gdHJlZSBpcyBsaWtlbHkgdG8gYmUgYSBmcnVzdHJhdGluZyBleHBlcmllbmNlLCB0aG91Z2g7Cit0aGVyZSBpcyBhIGRlZmluaXRlIGNoYW5jZSB0aGF0IGl0IHdpbGwgbm90IGV2ZW4gY29tcGlsZS4KKworVGhlIG90aGVyIHN0YWdpbmcgdHJlZSwgc3RhcnRlZCBtb3JlIHJlY2VudGx5LCBpcyBsaW51eC1uZXh0LCBtYWludGFpbmVkIGJ5CitTdGVwaGVuIFJvdGh3ZWxsLiAgVGhlIGxpbnV4LW5leHQgdHJlZSBpcywgYnkgZGVzaWduLCBhIHNuYXBzaG90IG9mIHdoYXQKK3RoZSBtYWlubGluZSBpcyBleHBlY3RlZCB0byBsb29rIGxpa2UgYWZ0ZXIgdGhlIG5leHQgbWVyZ2Ugd2luZG93IGNsb3Nlcy4KK0xpbnV4LW5leHQgdHJlZXMgYXJlIGFubm91bmNlZCBvbiB0aGUgbGludXgta2VybmVsIGFuZCBsaW51eC1uZXh0IG1haWxpbmcKK2xpc3RzIHdoZW4gdGhleSBhcmUgYXNzZW1ibGVkOyB0aGV5IGNhbiBiZSBkb3dubG9hZGVkIGZyb206CisKKwlodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvc2ZyL2xpbnV4LW5leHQvCisKK1NvbWUgaW5mb3JtYXRpb24gYWJvdXQgbGludXgtbmV4dCBoYXMgYmVlbiBnYXRoZXJlZCBhdDoKKworCWh0dHA6Ly9saW51eC5mLXNlaWRlbC5kZS9saW51eC1uZXh0L3Btd2lraS8KKworSG93IHRoZSBsaW51eC1uZXh0IHRyZWUgd2lsbCBmaXQgaW50byB0aGUgZGV2ZWxvcG1lbnQgcHJvY2VzcyBpcyBzdGlsbAorY2hhbmdpbmcuICBBcyBvZiB0aGlzIHdyaXRpbmcsIHRoZSBmaXJzdCBmdWxsIGRldmVsb3BtZW50IGN5Y2xlIGludm9sdmluZworbGludXgtbmV4dCAoMi42LjI2KSBpcyBjb21pbmcgdG8gYW4gZW5kOyB0aHVzIGZhciwgaXQgaGFzIHByb3ZlZCB0byBiZSBhCit2YWx1YWJsZSByZXNvdXJjZSBmb3IgZmluZGluZyBhbmQgZml4aW5nIGludGVncmF0aW9uIHByb2JsZW1zIGJlZm9yZSB0aGUKK2JlZ2lubmluZyBvZiB0aGUgbWVyZ2Ugd2luZG93LiAgU2VlIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzI4NzE1NS8gZm9yCittb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBsaW51eC1uZXh0IGhhcyB3b3JrZWQgdG8gc2V0IHVwIHRoZSAyLjYuMjcgbWVyZ2UKK3dpbmRvdy4KKworU29tZSBkZXZlbG9wZXJzIGhhdmUgYmVndW4gdG8gc3VnZ2VzdCB0aGF0IGxpbnV4LW5leHQgc2hvdWxkIGJlIHVzZWQgYXMgdGhlCit0YXJnZXQgZm9yIGZ1dHVyZSBkZXZlbG9wbWVudCBhcyB3ZWxsLiAgVGhlIGxpbnV4LW5leHQgdHJlZSBkb2VzIHRlbmQgdG8gYmUKK2ZhciBhaGVhZCBvZiB0aGUgbWFpbmxpbmUgYW5kIGlzIG1vcmUgcmVwcmVzZW50YXRpdmUgb2YgdGhlIHRyZWUgaW50byB3aGljaAorYW55IG5ldyB3b3JrIHdpbGwgYmUgbWVyZ2VkLiAgVGhlIGRvd25zaWRlIHRvIHRoaXMgaWRlYSBpcyB0aGF0IHRoZQordm9sYXRpbGl0eSBvZiBsaW51eC1uZXh0IHRlbmRzIHRvIG1ha2UgaXQgYSBkaWZmaWN1bHQgZGV2ZWxvcG1lbnQgdGFyZ2V0LgorU2VlIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzI4OTAxMy8gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyB0b3BpYywgYW5kCitzdGF5IHR1bmVkOyBtdWNoIGlzIHN0aWxsIGluIGZsdXggd2hlcmUgbGludXgtbmV4dCBpcyBpbnZvbHZlZC4KKworCisyLjU6IFRPT0xTCisKK0FzIGNhbiBiZSBzZWVuIGZyb20gdGhlIGFib3ZlIHRleHQsIHRoZSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvY2VzcyBkZXBlbmRzCitoZWF2aWx5IG9uIHRoZSBhYmlsaXR5IHRvIGhlcmQgY29sbGVjdGlvbnMgb2YgcGF0Y2hlcyBpbiB2YXJpb3VzCitkaXJlY3Rpb25zLiAgVGhlIHdob2xlIHRoaW5nIHdvdWxkIG5vdCB3b3JrIGFueXdoZXJlIG5lYXIgYXMgd2VsbCBhcyBpdAorZG9lcyB3aXRob3V0IHN1aXRhYmx5IHBvd2VyZnVsIHRvb2xzLiAgVHV0b3JpYWxzIG9uIGhvdyB0byB1c2UgdGhlc2UgdG9vbHMKK2FyZSB3ZWxsIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBkb2N1bWVudCwgYnV0IHRoZXJlIGlzIHNwYWNlIGZvciBhIGZldworcG9pbnRlcnMuCisKK0J5IGZhciB0aGUgZG9taW5hbnQgc291cmNlIGNvZGUgbWFuYWdlbWVudCBzeXN0ZW0gdXNlZCBieSB0aGUga2VybmVsCitjb21tdW5pdHkgaXMgZ2l0LiAgR2l0IGlzIG9uZSBvZiBhIG51bWJlciBvZiBkaXN0cmlidXRlZCB2ZXJzaW9uIGNvbnRyb2wKK3N5c3RlbXMgYmVpbmcgZGV2ZWxvcGVkIGluIHRoZSBmcmVlIHNvZnR3YXJlIGNvbW11bml0eS4gIEl0IGlzIHdlbGwgdHVuZWQKK2ZvciBrZXJuZWwgZGV2ZWxvcG1lbnQsIGluIHRoYXQgaXQgcGVyZm9ybXMgcXVpdGUgd2VsbCB3aGVuIGRlYWxpbmcgd2l0aAorbGFyZ2UgcmVwb3NpdG9yaWVzIGFuZCBsYXJnZSBudW1iZXJzIG9mIHBhdGNoZXMuICBJdCBhbHNvIGhhcyBhIHJlcHV0YXRpb24KK2ZvciBiZWluZyBkaWZmaWN1bHQgdG8gbGVhcm4gYW5kIHVzZSwgdGhvdWdoIGl0IGhhcyBnb3R0ZW4gYmV0dGVyIG92ZXIKK3RpbWUuICBTb21lIHNvcnQgb2YgZmFtaWxpYXJpdHkgd2l0aCBnaXQgaXMgYWxtb3N0IGEgcmVxdWlyZW1lbnQgZm9yIGtlcm5lbAorZGV2ZWxvcGVyczsgZXZlbiBpZiB0aGV5IGRvIG5vdCB1c2UgaXQgZm9yIHRoZWlyIG93biB3b3JrLCB0aGV5J2xsIG5lZWQgZ2l0Cit0byBrZWVwIHVwIHdpdGggd2hhdCBvdGhlciBkZXZlbG9wZXJzIChhbmQgdGhlIG1haW5saW5lKSBhcmUgZG9pbmcuCisKK0dpdCBpcyBub3cgcGFja2FnZWQgYnkgYWxtb3N0IGFsbCBMaW51eCBkaXN0cmlidXRpb25zLiAgVGhlcmUgaXMgYSBob21lCitwYWdlIGF0IAorCisJaHR0cDovL2dpdC5vci5jei8KKworVGhhdCBwYWdlIGhhcyBwb2ludGVycyB0byBkb2N1bWVudGF0aW9uIGFuZCB0dXRvcmlhbHMuICBPbmUgc2hvdWxkIGJlCithd2FyZSwgaW4gcGFydGljdWxhciwgb2YgdGhlIEtlcm5lbCBIYWNrZXIncyBHdWlkZSB0byBnaXQsIHdoaWNoIGhhcworaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8ga2VybmVsIGRldmVsb3BtZW50OgorCisJaHR0cDovL2xpbnV4Lnl5ei51cy9naXQtaG93dG8uaHRtbAorCitBbW9uZyB0aGUga2VybmVsIGRldmVsb3BlcnMgd2hvIGRvIG5vdCB1c2UgZ2l0LCB0aGUgbW9zdCBwb3B1bGFyIGNob2ljZSBpcworYWxtb3N0IGNlcnRhaW5seSBNZXJjdXJpYWw6CisKKwlodHRwOi8vd3d3LnNlbGVuaWMuY29tL21lcmN1cmlhbC8KKworTWVyY3VyaWFsIHNoYXJlcyBtYW55IGZlYXR1cmVzIHdpdGggZ2l0LCBidXQgaXQgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHdoaWNoCittYW55IGZpbmQgZWFzaWVyIHRvIHVzZS4KKworVGhlIG90aGVyIHRvb2wgd29ydGgga25vd2luZyBhYm91dCBpcyBRdWlsdDoKKworCWh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3F1aWx0LworCitRdWlsdCBpcyBhIHBhdGNoIG1hbmFnZW1lbnQgc3lzdGVtLCByYXRoZXIgdGhhbiBhIHNvdXJjZSBjb2RlIG1hbmFnZW1lbnQKK3N5c3RlbS4gIEl0IGRvZXMgbm90IHRyYWNrIGhpc3Rvcnkgb3ZlciB0aW1lOyBpdCBpcywgaW5zdGVhZCwgb3JpZW50ZWQKK3Rvd2FyZCB0cmFja2luZyBhIHNwZWNpZmljIHNldCBvZiBjaGFuZ2VzIGFnYWluc3QgYW4gZXZvbHZpbmcgY29kZSBiYXNlLgorU29tZSBtYWpvciBzdWJzeXN0ZW0gbWFpbnRhaW5lcnMgdXNlIHF1aWx0IHRvIG1hbmFnZSBwYXRjaGVzIGludGVuZGVkIHRvIGdvCit1cHN0cmVhbS4gIEZvciB0aGUgbWFuYWdlbWVudCBvZiBjZXJ0YWluIGtpbmRzIG9mIHRyZWVzICgtbW0sIGZvciBleGFtcGxlKSwKK3F1aWx0IGlzIHRoZSBiZXN0IHRvb2wgZm9yIHRoZSBqb2IuCisKKworMi42OiBNQUlMSU5HIExJU1RTCisKK0EgZ3JlYXQgZGVhbCBvZiBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQgd29yayBpcyBkb25lIGJ5IHdheSBvZiBtYWlsaW5nCitsaXN0cy4gIEl0IGlzIGhhcmQgdG8gYmUgYSBmdWxseS1mdW5jdGlvbmluZyBtZW1iZXIgb2YgdGhlIGNvbW11bml0eQord2l0aG91dCBqb2luaW5nIGF0IGxlYXN0IG9uZSBsaXN0IHNvbWV3aGVyZS4gIEJ1dCBMaW51eCBtYWlsaW5nIGxpc3RzIGFsc28KK3JlcHJlc2VudCBhIHBvdGVudGlhbCBoYXphcmQgdG8gZGV2ZWxvcGVycywgd2hvIHJpc2sgZ2V0dGluZyBidXJpZWQgdW5kZXIgYQorbG9hZCBvZiBlbGVjdHJvbmljIG1haWwsIHJ1bm5pbmcgYWZvdWwgb2YgdGhlIGNvbnZlbnRpb25zIHVzZWQgb24gdGhlIExpbnV4CitsaXN0cywgb3IgYm90aC4KKworTW9zdCBrZXJuZWwgbWFpbGluZyBsaXN0cyBhcmUgcnVuIG9uIHZnZXIua2VybmVsLm9yZzsgdGhlIG1hc3RlciBsaXN0IGNhbgorYmUgZm91bmQgYXQ6CisKKwlodHRwOi8vdmdlci5rZXJuZWwub3JnL3ZnZXItbGlzdHMuaHRtbAorCitUaGVyZSBhcmUgbGlzdHMgaG9zdGVkIGVsc2V3aGVyZSwgdGhvdWdoOyBhIG51bWJlciBvZiB0aGVtIGFyZSBhdAorbGlzdHMucmVkaGF0LmNvbS4KKworVGhlIGNvcmUgbWFpbGluZyBsaXN0IGZvciBrZXJuZWwgZGV2ZWxvcG1lbnQgaXMsIG9mIGNvdXJzZSwgbGludXgta2VybmVsLgorVGhpcyBsaXN0IGlzIGFuIGludGltaWRhdGluZyBwbGFjZSB0byBiZTsgdm9sdW1lIGNhbiByZWFjaCA1MDAgbWVzc2FnZXMgcGVyCitkYXksIHRoZSBhbW91bnQgb2Ygbm9pc2UgaXMgaGlnaCwgdGhlIGNvbnZlcnNhdGlvbiBjYW4gYmUgc2V2ZXJlbHkKK3RlY2huaWNhbCwgYW5kIHBhcnRpY2lwYW50cyBhcmUgbm90IGFsd2F5cyBjb25jZXJuZWQgd2l0aCBzaG93aW5nIGEgaGlnaAorZGVncmVlIG9mIHBvbGl0ZW5lc3MuICBCdXQgdGhlcmUgaXMgbm8gb3RoZXIgcGxhY2Ugd2hlcmUgdGhlIGtlcm5lbAorZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGNvbWVzIHRvZ2V0aGVyIGFzIGEgd2hvbGU7IGRldmVsb3BlcnMgd2hvIGF2b2lkIHRoaXMKK2xpc3Qgd2lsbCBtaXNzIGltcG9ydGFudCBpbmZvcm1hdGlvbi4KKworVGhlcmUgYXJlIGEgZmV3IGhpbnRzIHdoaWNoIGNhbiBoZWxwIHdpdGggbGludXgta2VybmVsIHN1cnZpdmFsOgorCistIEhhdmUgdGhlIGxpc3QgZGVsaXZlcmVkIHRvIGEgc2VwYXJhdGUgZm9sZGVyLCByYXRoZXIgdGhhbiB5b3VyIG1haW4KKyAgbWFpbGJveC4gIE9uZSBtdXN0IGJlIGFibGUgdG8gaWdub3JlIHRoZSBzdHJlYW0gZm9yIHN1c3RhaW5lZCBwZXJpb2RzIG9mCisgIHRpbWUuCisKKy0gRG8gbm90IHRyeSB0byBmb2xsb3cgZXZlcnkgY29udmVyc2F0aW9uIC0gbm9ib2R5IGVsc2UgZG9lcy4gIEl0IGlzCisgIGltcG9ydGFudCB0byBmaWx0ZXIgb24gYm90aCB0aGUgdG9waWMgb2YgaW50ZXJlc3QgKHRob3VnaCBub3RlIHRoYXQKKyAgbG9uZy1ydW5uaW5nIGNvbnZlcnNhdGlvbnMgY2FuIGRyaWZ0IGF3YXkgZnJvbSB0aGUgb3JpZ2luYWwgc3ViamVjdAorICB3aXRob3V0IGNoYW5naW5nIHRoZSBlbWFpbCBzdWJqZWN0IGxpbmUpIGFuZCB0aGUgcGVvcGxlIHdobyBhcmUKKyAgcGFydGljaXBhdGluZy4gIAorCistIERvIG5vdCBmZWVkIHRoZSB0cm9sbHMuICBJZiBzb21lYm9keSBpcyB0cnlpbmcgdG8gc3RpciB1cCBhbiBhbmdyeQorICByZXNwb25zZSwgaWdub3JlIHRoZW0uCisKKy0gV2hlbiByZXNwb25kaW5nIHRvIGxpbnV4LWtlcm5lbCBlbWFpbCAob3IgdGhhdCBvbiBvdGhlciBsaXN0cykgcHJlc2VydmUKKyAgdGhlIENjOiBoZWFkZXIgZm9yIGFsbCBpbnZvbHZlZC4gIEluIHRoZSBhYnNlbmNlIG9mIGEgc3Ryb25nIHJlYXNvbiAoc3VjaAorICBhcyBhbiBleHBsaWNpdCByZXF1ZXN0KSwgeW91IHNob3VsZCBuZXZlciByZW1vdmUgcmVjaXBpZW50cy4gIEFsd2F5cyBtYWtlCisgIHN1cmUgdGhhdCB0aGUgcGVyc29uIHlvdSBhcmUgcmVzcG9uZGluZyB0byBpcyBpbiB0aGUgQ2M6IGxpc3QuICBUaGlzCisgIGNvbnZlbnRpb24gYWxzbyBtYWtlcyBpdCB1bm5lY2Vzc2FyeSB0byBleHBsaWNpdGx5IGFzayB0byBiZSBjb3BpZWQgb24KKyAgcmVwbGllcyB0byB5b3VyIHBvc3RpbmdzLgorCistIFNlYXJjaCB0aGUgbGlzdCBhcmNoaXZlcyAoYW5kIHRoZSBuZXQgYXMgYSB3aG9sZSkgYmVmb3JlIGFza2luZworICBxdWVzdGlvbnMuICBTb21lIGRldmVsb3BlcnMgY2FuIGdldCBpbXBhdGllbnQgd2l0aCBwZW9wbGUgd2hvIGNsZWFybHkKKyAgaGF2ZSBub3QgZG9uZSB0aGVpciBob21ld29yay4KKworLSBBdm9pZCB0b3AtcG9zdGluZyAodGhlIHByYWN0aWNlIG9mIHB1dHRpbmcgeW91ciBhbnN3ZXIgYWJvdmUgdGhlIHF1b3RlZAorICB0ZXh0IHlvdSBhcmUgcmVzcG9uZGluZyB0bykuICBJdCBtYWtlcyB5b3VyIHJlc3BvbnNlIGhhcmRlciB0byByZWFkIGFuZAorICBtYWtlcyBhIHBvb3IgaW1wcmVzc2lvbi4KKworLSBBc2sgb24gdGhlIGNvcnJlY3QgbWFpbGluZyBsaXN0LiAgTGludXgta2VybmVsIG1heSBiZSB0aGUgZ2VuZXJhbCBtZWV0aW5nCisgIHBvaW50LCBidXQgaXQgaXMgbm90IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgZGV2ZWxvcGVycyBmcm9tIGFsbAorICBzdWJzeXN0ZW1zLgorCitUaGUgbGFzdCBwb2ludCAtIGZpbmRpbmcgdGhlIGNvcnJlY3QgbWFpbGluZyBsaXN0IC0gaXMgYSBjb21tb24gcGxhY2UgZm9yCitiZWdpbm5pbmcgZGV2ZWxvcGVycyB0byBnbyB3cm9uZy4gIFNvbWVib2R5IHdobyBhc2tzIGEgbmV0d29ya2luZy1yZWxhdGVkCitxdWVzdGlvbiBvbiBsaW51eC1rZXJuZWwgd2lsbCBhbG1vc3QgY2VydGFpbmx5IHJlY2VpdmUgYSBwb2xpdGUgc3VnZ2VzdGlvbgordG8gYXNrIG9uIHRoZSBuZXRkZXYgbGlzdCBpbnN0ZWFkLCBhcyB0aGF0IGlzIHRoZSBsaXN0IGZyZXF1ZW50ZWQgYnkgbW9zdAorbmV0d29ya2luZyBkZXZlbG9wZXJzLiAgT3RoZXIgbGlzdHMgZXhpc3QgZm9yIHRoZSBTQ1NJLCB2aWRlbzRsaW51eCwgSURFLAorZmlsZXN5c3RlbSwgZXRjLiBzdWJzeXN0ZW1zLiAgVGhlIGJlc3QgcGxhY2UgdG8gbG9vayBmb3IgbWFpbGluZyBsaXN0cyBpcworaW4gdGhlIE1BSU5UQUlORVJTIGZpbGUgcGFja2FnZWQgd2l0aCB0aGUga2VybmVsIHNvdXJjZS4KKworCisyLjc6IEdFVFRJTkcgU1RBUlRFRCBXSVRIIEtFUk5FTCBERVZFTE9QTUVOVAorCitRdWVzdGlvbnMgYWJvdXQgaG93IHRvIGdldCBzdGFydGVkIHdpdGggdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzIGFyZQorY29tbW9uIC0gZnJvbSBib3RoIGluZGl2aWR1YWxzIGFuZCBjb21wYW5pZXMuICBFcXVhbGx5IGNvbW1vbiBhcmUgbWlzc3RlcHMKK3doaWNoIG1ha2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGhhcmRlciB0aGFuIGl0IGhhcyB0byBiZS4KKworQ29tcGFuaWVzIG9mdGVuIGxvb2sgdG8gaGlyZSB3ZWxsLWtub3duIGRldmVsb3BlcnMgdG8gZ2V0IGEgZGV2ZWxvcG1lbnQKK2dyb3VwIHN0YXJ0ZWQuICBUaGlzIGNhbiwgaW4gZmFjdCwgYmUgYW4gZWZmZWN0aXZlIHRlY2huaXF1ZS4gIEJ1dCBpdCBhbHNvCit0ZW5kcyB0byBiZSBleHBlbnNpdmUgYW5kIGRvZXMgbm90IGRvIG11Y2ggdG8gZ3JvdyB0aGUgcG9vbCBvZiBleHBlcmllbmNlZAora2VybmVsIGRldmVsb3BlcnMuICBJdCBpcyBwb3NzaWJsZSB0byBicmluZyBpbi1ob3VzZSBkZXZlbG9wZXJzIHVwIHRvIHNwZWVkCitvbiBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQsIGdpdmVuIHRoZSBpbnZlc3RtZW50IG9mIGEgYml0IG9mIHRpbWUuICBUYWtpbmcKK3RoaXMgdGltZSBjYW4gZW5kb3cgYW4gZW1wbG95ZXIgd2l0aCBhIGdyb3VwIG9mIGRldmVsb3BlcnMgd2hvIHVuZGVyc3RhbmQKK3RoZSBrZXJuZWwgYW5kIHRoZSBjb21wYW55IGJvdGgsIGFuZCB3aG8gY2FuIGhlbHAgdG8gdHJhaW4gb3RoZXJzIGFzIHdlbGwuCitPdmVyIHRoZSBtZWRpdW0gdGVybSwgdGhpcyBpcyBvZnRlbiB0aGUgbW9yZSBwcm9maXRhYmxlIGFwcHJvYWNoLgorCitJbmRpdmlkdWFsIGRldmVsb3BlcnMgYXJlIG9mdGVuLCB1bmRlcnN0YW5kYWJseSwgYXQgYSBsb3NzIGZvciBhIHBsYWNlIHRvCitzdGFydC4gIEJlZ2lubmluZyB3aXRoIGEgbGFyZ2UgcHJvamVjdCBjYW4gYmUgaW50aW1pZGF0aW5nOyBvbmUgb2Z0ZW4gd2FudHMKK3RvIHRlc3QgdGhlIHdhdGVycyB3aXRoIHNvbWV0aGluZyBzbWFsbGVyIGZpcnN0LiAgVGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUKK3NvbWUgZGV2ZWxvcGVycyBqdW1wIGludG8gdGhlIGNyZWF0aW9uIG9mIHBhdGNoZXMgZml4aW5nIHNwZWxsaW5nIGVycm9ycyBvcgorbWlub3IgY29kaW5nIHN0eWxlIGlzc3Vlcy4gIFVuZm9ydHVuYXRlbHksIHN1Y2ggcGF0Y2hlcyBjcmVhdGUgYSBsZXZlbCBvZgorbm9pc2Ugd2hpY2ggaXMgZGlzdHJhY3RpbmcgZm9yIHRoZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgYXMgYSB3aG9sZSwgc28sCitpbmNyZWFzaW5nbHksIHRoZXkgYXJlIGxvb2tlZCBkb3duIHVwb24uICBOZXcgZGV2ZWxvcGVycyB3aXNoaW5nIHRvCitpbnRyb2R1Y2UgdGhlbXNlbHZlcyB0byB0aGUgY29tbXVuaXR5IHdpbGwgbm90IGdldCB0aGUgc29ydCBvZiByZWNlcHRpb24KK3RoZXkgd2lzaCBmb3IgYnkgdGhlc2UgbWVhbnMuCisKK0FuZHJldyBNb3J0b24gZ2l2ZXMgdGhpcyBhZHZpY2UgZm9yIGFzcGlyaW5nIGtlcm5lbCBkZXZlbG9wZXJzCisKKwlUaGUgIzEgcHJvamVjdCBmb3IgYWxsIGtlcm5lbCBiZWdpbm5lcnMgc2hvdWxkIHN1cmVseSBiZSAibWFrZSBzdXJlCisJdGhhdCB0aGUga2VybmVsIHJ1bnMgcGVyZmVjdGx5IGF0IGFsbCB0aW1lcyBvbiBhbGwgbWFjaGluZXMgd2hpY2gKKwl5b3UgY2FuIGxheSB5b3VyIGhhbmRzIG9uIi4gIFVzdWFsbHkgdGhlIHdheSB0byBkbyB0aGlzIGlzIHRvIHdvcmsKKwl3aXRoIG90aGVycyBvbiBnZXR0aW5nIHRoaW5ncyBmaXhlZCB1cCAodGhpcyBjYW4gcmVxdWlyZQorCXBlcnNpc3RlbmNlISkgYnV0IHRoYXQncyBmaW5lIC0gaXQncyBhIHBhcnQgb2Yga2VybmVsIGRldmVsb3BtZW50LgorCisoaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMjgzOTgyLykuCisKK0luIHRoZSBhYnNlbmNlIG9mIG9idmlvdXMgcHJvYmxlbXMgdG8gZml4LCBkZXZlbG9wZXJzIGFyZSBhZHZpc2VkIHRvIGxvb2sKK2F0IHRoZSBjdXJyZW50IGxpc3RzIG9mIHJlZ3Jlc3Npb25zIGFuZCBvcGVuIGJ1Z3MgaW4gZ2VuZXJhbC4gIFRoZXJlIGlzCituZXZlciBhbnkgc2hvcnRhZ2Ugb2YgaXNzdWVzIGluIG5lZWQgb2YgZml4aW5nOyBieSBhZGRyZXNzaW5nIHRoZXNlIGlzc3VlcywKK2RldmVsb3BlcnMgd2lsbCBnYWluIGV4cGVyaWVuY2Ugd2l0aCB0aGUgcHJvY2VzcyB3aGlsZSwgYXQgdGhlIHNhbWUgdGltZSwKK2J1aWxkaW5nIHJlc3BlY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzMuRWFybHktc3RhZ2UgYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvMy5FYXJseS1zdGFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDdhMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzMuRWFybHktc3RhZ2UKQEAgLTAsMCArMSwxOTUgQEAKKzM6IEVBUkxZLVNUQUdFIFBMQU5OSU5HCisKK1doZW4gY29udGVtcGxhdGluZyBhIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCBwcm9qZWN0LCBpdCBjYW4gYmUgdGVtcHRpbmcKK3RvIGp1bXAgcmlnaHQgaW4gYW5kIHN0YXJ0IGNvZGluZy4gIEFzIHdpdGggYW55IHNpZ25pZmljYW50IHByb2plY3QsCit0aG91Z2gsIG11Y2ggb2YgdGhlIGdyb3VuZHdvcmsgZm9yIHN1Y2Nlc3MgaXMgYmVzdCBsYWlkIGJlZm9yZSB0aGUgZmlyc3QKK2xpbmUgb2YgY29kZSBpcyB3cml0dGVuLiAgU29tZSB0aW1lIHNwZW50IGluIGVhcmx5IHBsYW5uaW5nIGFuZAorY29tbXVuaWNhdGlvbiBjYW4gc2F2ZSBmYXIgbW9yZSB0aW1lIGxhdGVyIG9uLgorCisKKzMuMTogU1BFQ0lGWUlORyBUSEUgUFJPQkxFTQorCitMaWtlIGFueSBlbmdpbmVlcmluZyBwcm9qZWN0LCBhIHN1Y2Nlc3NmdWwga2VybmVsIGVuaGFuY2VtZW50IHN0YXJ0cyB3aXRoIGEKK2NsZWFyIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9ibGVtIHRvIGJlIHNvbHZlZC4gIEluIHNvbWUgY2FzZXMsIHRoaXMgc3RlcCBpcworZWFzeTogd2hlbiBhIGRyaXZlciBpcyBuZWVkZWQgZm9yIGEgc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUsIGZvcgorZXhhbXBsZS4gIEluIG90aGVycywgdGhvdWdoLCBpdCBpcyB0ZW1wdGluZyB0byBjb25mdXNlIHRoZSByZWFsIHByb2JsZW0KK3dpdGggdGhlIHByb3Bvc2VkIHNvbHV0aW9uLCBhbmQgdGhhdCBjYW4gbGVhZCB0byBkaWZmaWN1bHRpZXMuCisKK0NvbnNpZGVyIGFuIGV4YW1wbGU6IHNvbWUgeWVhcnMgYWdvLCBkZXZlbG9wZXJzIHdvcmtpbmcgd2l0aCBMaW51eCBhdWRpbworc291Z2h0IGEgd2F5IHRvIHJ1biBhcHBsaWNhdGlvbnMgd2l0aG91dCBkcm9wb3V0cyBvciBvdGhlciBhcnRpZmFjdHMgY2F1c2VkCitieSBleGNlc3NpdmUgbGF0ZW5jeSBpbiB0aGUgc3lzdGVtLiAgVGhlIHNvbHV0aW9uIHRoZXkgYXJyaXZlZCBhdCB3YXMgYQora2VybmVsIG1vZHVsZSBpbnRlbmRlZCB0byBob29rIGludG8gdGhlIExpbnV4IFNlY3VyaXR5IE1vZHVsZSAoTFNNKQorZnJhbWV3b3JrOyB0aGlzIG1vZHVsZSBjb3VsZCBiZSBjb25maWd1cmVkIHRvIGdpdmUgc3BlY2lmaWMgYXBwbGljYXRpb25zCithY2Nlc3MgdG8gdGhlIHJlYWx0aW1lIHNjaGVkdWxlci4gIFRoaXMgbW9kdWxlIHdhcyBpbXBsZW1lbnRlZCBhbmQgc2VudCB0bwordGhlIGxpbnV4LWtlcm5lbCBtYWlsaW5nIGxpc3QsIHdoZXJlIGl0IGltbWVkaWF0ZWx5IHJhbiBpbnRvIHByb2JsZW1zLgorCitUbyB0aGUgYXVkaW8gZGV2ZWxvcGVycywgdGhpcyBzZWN1cml0eSBtb2R1bGUgd2FzIHN1ZmZpY2llbnQgdG8gc29sdmUgdGhlaXIKK2ltbWVkaWF0ZSBwcm9ibGVtLiAgVG8gdGhlIHdpZGVyIGtlcm5lbCBjb21tdW5pdHksIHRob3VnaCwgaXQgd2FzIHNlZW4gYXMgYQorbWlzdXNlIG9mIHRoZSBMU00gZnJhbWV3b3JrICh3aGljaCBpcyBub3QgaW50ZW5kZWQgdG8gY29uZmVyIHByaXZpbGVnZXMKK29udG8gcHJvY2Vzc2VzIHdoaWNoIHRoZXkgd291bGQgbm90IG90aGVyd2lzZSBoYXZlKSBhbmQgYSByaXNrIHRvIHN5c3RlbQorc3RhYmlsaXR5LiAgVGhlaXIgcHJlZmVycmVkIHNvbHV0aW9ucyBpbnZvbHZlZCByZWFsdGltZSBzY2hlZHVsaW5nIGFjY2VzcwordmlhIHRoZSBybGltaXQgbWVjaGFuaXNtIGZvciB0aGUgc2hvcnQgdGVybSwgYW5kIG9uZ29pbmcgbGF0ZW5jeSByZWR1Y3Rpb24KK3dvcmsgaW4gdGhlIGxvbmcgdGVybS4KKworVGhlIGF1ZGlvIGNvbW11bml0eSwgaG93ZXZlciwgY291bGQgbm90IHNlZSBwYXN0IHRoZSBwYXJ0aWN1bGFyIHNvbHV0aW9uCit0aGV5IGhhZCBpbXBsZW1lbnRlZDsgdGhleSB3ZXJlIHVud2lsbGluZyB0byBhY2NlcHQgYWx0ZXJuYXRpdmVzLiAgVGhlCityZXN1bHRpbmcgZGlzYWdyZWVtZW50IGxlZnQgdGhvc2UgZGV2ZWxvcGVycyBmZWVsaW5nIGRpc2lsbHVzaW9uZWQgd2l0aCB0aGUKK2VudGlyZSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvY2Vzczsgb25lIG9mIHRoZW0gd2VudCBiYWNrIHRvIGFuIGF1ZGlvIGxpc3QKK2FuZCBwb3N0ZWQgdGhpczoKKworCVRoZXJlIGFyZSBhIG51bWJlciBvZiB2ZXJ5IGdvb2QgTGludXgga2VybmVsIGRldmVsb3BlcnMsIGJ1dCB0aGV5CisJdGVuZCB0byBnZXQgb3V0c2hvdXRlZCBieSBhIGxhcmdlIGNyb3dkIG9mIGFycm9nYW50IGZvb2xzLiBUcnlpbmcKKwl0byBjb21tdW5pY2F0ZSB1c2VyIHJlcXVpcmVtZW50cyB0byB0aGVzZSBwZW9wbGUgaXMgYSB3YXN0ZSBvZgorCXRpbWUuIFRoZXkgYXJlIG11Y2ggdG9vICJpbnRlbGxpZ2VudCIgdG8gbGlzdGVuIHRvIGxlc3NlciBtb3J0YWxzLgorCisoaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMTMxNzc2LykuCisKK1RoZSByZWFsaXR5IG9mIHRoZSBzaXR1YXRpb24gd2FzIGRpZmZlcmVudDsgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIHdlcmUgZmFyCittb3JlIGNvbmNlcm5lZCBhYm91dCBzeXN0ZW0gc3RhYmlsaXR5LCBsb25nLXRlcm0gbWFpbnRlbmFuY2UsIGFuZCBmaW5kaW5nCit0aGUgcmlnaHQgc29sdXRpb24gdG8gdGhlIHByb2JsZW0gdGhhbiB0aGV5IHdlcmUgd2l0aCBhIHNwZWNpZmljIG1vZHVsZS4KK1RoZSBtb3JhbCBvZiB0aGUgc3RvcnkgaXMgdG8gZm9jdXMgb24gdGhlIHByb2JsZW0gLSBub3QgYSBzcGVjaWZpYyBzb2x1dGlvbgorLSBhbmQgdG8gZGlzY3VzcyBpdCB3aXRoIHRoZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgYmVmb3JlIGludmVzdGluZyBpbiB0aGUKK2NyZWF0aW9uIG9mIGEgYm9keSBvZiBjb2RlLgorCitTbywgd2hlbiBjb250ZW1wbGF0aW5nIGEga2VybmVsIGRldmVsb3BtZW50IHByb2plY3QsIG9uZSBzaG91bGQgb2J0YWluCithbnN3ZXJzIHRvIGEgc2hvcnQgc2V0IG9mIHF1ZXN0aW9uczoKKworIC0gV2hhdCwgZXhhY3RseSwgaXMgdGhlIHByb2JsZW0gd2hpY2ggbmVlZHMgdG8gYmUgc29sdmVkPworCisgLSBXaG8gYXJlIHRoZSB1c2VycyBhZmZlY3RlZCBieSB0aGlzIHByb2JsZW0/ICBXaGljaCB1c2UgY2FzZXMgc2hvdWxkIHRoZQorICAgc29sdXRpb24gYWRkcmVzcz8KKworIC0gSG93IGRvZXMgdGhlIGtlcm5lbCBmYWxsIHNob3J0IGluIGFkZHJlc3NpbmcgdGhhdCBwcm9ibGVtIG5vdz8KKworT25seSB0aGVuIGRvZXMgaXQgbWFrZSBzZW5zZSB0byBzdGFydCBjb25zaWRlcmluZyBwb3NzaWJsZSBzb2x1dGlvbnMuCisKKworMy4yOiBFQVJMWSBESVNDVVNTSU9OCisKK1doZW4gcGxhbm5pbmcgYSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvamVjdCwgaXQgbWFrZXMgZ3JlYXQgc2Vuc2UgdG8gaG9sZAorZGlzY3Vzc2lvbnMgd2l0aCB0aGUgY29tbXVuaXR5IGJlZm9yZSBsYXVuY2hpbmcgaW50byBpbXBsZW1lbnRhdGlvbi4gIEVhcmx5Citjb21tdW5pY2F0aW9uIGNhbiBzYXZlIHRpbWUgYW5kIHRyb3VibGUgaW4gYSBudW1iZXIgb2Ygd2F5czoKKworIC0gSXQgbWF5IHdlbGwgYmUgdGhhdCB0aGUgcHJvYmxlbSBpcyBhZGRyZXNzZWQgYnkgdGhlIGtlcm5lbCBpbiB3YXlzIHdoaWNoCisgICB5b3UgaGF2ZSBub3QgdW5kZXJzdG9vZC4gIFRoZSBMaW51eCBrZXJuZWwgaXMgbGFyZ2UgYW5kIGhhcyBhIG51bWJlciBvZgorICAgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyB3aGljaCBhcmUgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuICBOb3QgYWxsCisgICBrZXJuZWwgY2FwYWJpbGl0aWVzIGFyZSBkb2N1bWVudGVkIGFzIHdlbGwgYXMgb25lIG1pZ2h0IGxpa2UsIGFuZCBpdCBpcworICAgZWFzeSB0byBtaXNzIHRoaW5ncy4gIFlvdXIgYXV0aG9yIGhhcyBzZWVuIHRoZSBwb3N0aW5nIG9mIGEgY29tcGxldGUKKyAgIGRyaXZlciB3aGljaCBkdXBsaWNhdGVkIGFuIGV4aXN0aW5nIGRyaXZlciB0aGF0IHRoZSBuZXcgYXV0aG9yIGhhZCBiZWVuCisgICB1bmF3YXJlIG9mLiAgQ29kZSB3aGljaCByZWludmVudHMgZXhpc3Rpbmcgd2hlZWxzIGlzIG5vdCBvbmx5IHdhc3RlZnVsOworICAgaXQgd2lsbCBhbHNvIG5vdCBiZSBhY2NlcHRlZCBpbnRvIHRoZSBtYWlubGluZSBrZXJuZWwuCisKKyAtIFRoZXJlIG1heSBiZSBlbGVtZW50cyBvZiB0aGUgcHJvcG9zZWQgc29sdXRpb24gd2hpY2ggd2lsbCBub3QgYmUKKyAgIGFjY2VwdGFibGUgZm9yIG1haW5saW5lIG1lcmdpbmcuICBJdCBpcyBiZXR0ZXIgdG8gZmluZCBvdXQgYWJvdXQKKyAgIHByb2JsZW1zIGxpa2UgdGhpcyBiZWZvcmUgd3JpdGluZyB0aGUgY29kZS4KKworIC0gSXQncyBlbnRpcmVseSBwb3NzaWJsZSB0aGF0IG90aGVyIGRldmVsb3BlcnMgaGF2ZSB0aG91Z2h0IGFib3V0IHRoZQorICAgcHJvYmxlbTsgdGhleSBtYXkgaGF2ZSBpZGVhcyBmb3IgYSBiZXR0ZXIgc29sdXRpb24sIGFuZCBtYXkgYmUgd2lsbGluZworICAgdG8gaGVscCBpbiB0aGUgY3JlYXRpb24gb2YgdGhhdCBzb2x1dGlvbi4KKworWWVhcnMgb2YgZXhwZXJpZW5jZSB3aXRoIHRoZSBrZXJuZWwgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGhhdmUgdGF1Z2h0IGEKK2NsZWFyIGxlc3Nvbjoga2VybmVsIGNvZGUgd2hpY2ggaXMgZGVzaWduZWQgYW5kIGRldmVsb3BlZCBiZWhpbmQgY2xvc2VkCitkb29ycyBpbnZhcmlhYmx5IGhhcyBwcm9ibGVtcyB3aGljaCBhcmUgb25seSByZXZlYWxlZCB3aGVuIHRoZSBjb2RlIGlzCityZWxlYXNlZCBpbnRvIHRoZSBjb21tdW5pdHkuICBTb21ldGltZXMgdGhlc2UgcHJvYmxlbXMgYXJlIHNldmVyZSwKK3JlcXVpcmluZyBtb250aHMgb3IgeWVhcnMgb2YgZWZmb3J0IGJlZm9yZSB0aGUgY29kZSBjYW4gYmUgYnJvdWdodCB1cCB0bwordGhlIGtlcm5lbCBjb21tdW5pdHkncyBzdGFuZGFyZHMuICBTb21lIGV4YW1wbGVzIGluY2x1ZGU6CisKKyAtIFRoZSBEZXZpY2VzY2FwZSBuZXR3b3JrIHN0YWNrIHdhcyBkZXNpZ25lZCBhbmQgaW1wbGVtZW50ZWQgZm9yCisgICBzaW5nbGUtcHJvY2Vzc29yIHN5c3RlbXMuICBJdCBjb3VsZCBub3QgYmUgbWVyZ2VkIGludG8gdGhlIG1haW5saW5lCisgICB1bnRpbCBpdCB3YXMgbWFkZSBzdWl0YWJsZSBmb3IgbXVsdGlwcm9jZXNzb3Igc3lzdGVtcy4gIFJldHJvZml0dGluZworICAgbG9ja2luZyBhbmQgc3VjaCBpbnRvIGNvZGUgaXMgYSBkaWZmaWN1bHQgdGFzazsgYXMgYSByZXN1bHQsIHRoZSBtZXJnaW5nCisgICBvZiB0aGlzIGNvZGUgKG5vdyBjYWxsZWQgbWFjODAyMTEpIHdhcyBkZWxheWVkIGZvciBvdmVyIGEgeWVhci4KKworIC0gVGhlIFJlaXNlcjQgZmlsZXN5c3RlbSBpbmNsdWRlZCBhIG51bWJlciBvZiBjYXBhYmlsaXRpZXMgd2hpY2gsIGluIHRoZQorICAgY29yZSBrZXJuZWwgZGV2ZWxvcGVycycgb3Bpbmlvbiwgc2hvdWxkIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBpbiB0aGUKKyAgIHZpcnR1YWwgZmlsZXN5c3RlbSBsYXllciBpbnN0ZWFkLiAgSXQgYWxzbyBpbmNsdWRlZCBmZWF0dXJlcyB3aGljaCBjb3VsZAorICAgbm90IGVhc2lseSBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGV4cG9zaW5nIHRoZSBzeXN0ZW0gdG8gdXNlci1jYXVzZWQKKyAgIGRlYWRsb2Nrcy4gIFRoZSBsYXRlIHJldmVsYXRpb24gb2YgdGhlc2UgcHJvYmxlbXMgLSBhbmQgcmVmdXNhbCB0bworICAgYWRkcmVzcyBzb21lIG9mIHRoZW0gLSBoYXMgY2F1c2VkIFJlaXNlcjQgdG8gc3RheSBvdXQgb2YgdGhlIG1haW5saW5lCisgICBrZXJuZWwuCisKKyAtIFRoZSBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUgbWFkZSB1c2Ugb2YgaW50ZXJuYWwgdmlydHVhbCBmaWxlc3lzdGVtCisgICBkYXRhIHN0cnVjdHVyZXMgaW4gd2F5cyB3aGljaCB3ZXJlIGNvbnNpZGVyZWQgdG8gYmUgdW5zYWZlIGFuZAorICAgdW5yZWxpYWJsZS4gIFRoaXMgY29kZSBoYXMgc2luY2UgYmVlbiBzaWduaWZpY2FudGx5IHJld29ya2VkLCBidXQKKyAgIHJlbWFpbnMgb3V0c2lkZSBvZiB0aGUgbWFpbmxpbmUuCisKK0luIGVhY2ggb2YgdGhlc2UgY2FzZXMsIGEgZ3JlYXQgZGVhbCBvZiBwYWluIGFuZCBleHRyYSB3b3JrIGNvdWxkIGhhdmUgYmVlbgorYXZvaWRlZCB3aXRoIHNvbWUgZWFybHkgZGlzY3Vzc2lvbiB3aXRoIHRoZSBrZXJuZWwgZGV2ZWxvcGVycy4KKworCiszLjM6IFdITyBETyBZT1UgVEFMSyBUTz8KKworV2hlbiBkZXZlbG9wZXJzIGRlY2lkZSB0byB0YWtlIHRoZWlyIHBsYW5zIHB1YmxpYywgdGhlIG5leHQgcXVlc3Rpb24gd2lsbAorYmU6IHdoZXJlIGRvIHdlIHN0YXJ0PyAgVGhlIGFuc3dlciBpcyB0byBmaW5kIHRoZSByaWdodCBtYWlsaW5nIGxpc3QocykgYW5kCit0aGUgcmlnaHQgbWFpbnRhaW5lci4gIEZvciBtYWlsaW5nIGxpc3RzLCB0aGUgYmVzdCBhcHByb2FjaCBpcyB0byBsb29rIGluCit0aGUgTUFJTlRBSU5FUlMgZmlsZSBmb3IgYSByZWxldmFudCBwbGFjZSB0byBwb3N0LiAgSWYgdGhlcmUgaXMgYSBzdWl0YWJsZQorc3Vic3lzdGVtIGxpc3QsIHBvc3RpbmcgdGhlcmUgaXMgb2Z0ZW4gcHJlZmVyYWJsZSB0byBwb3N0aW5nIG9uCitsaW51eC1rZXJuZWw7IHlvdSBhcmUgbW9yZSBsaWtlbHkgdG8gcmVhY2ggZGV2ZWxvcGVycyB3aXRoIGV4cGVydGlzZSBpbiB0aGUKK3JlbGV2YW50IHN1YnN5c3RlbSBhbmQgdGhlIGVudmlyb25tZW50IG1heSBiZSBtb3JlIHN1cHBvcnRpdmUuCisKK0ZpbmRpbmcgbWFpbnRhaW5lcnMgY2FuIGJlIGEgYml0IGhhcmRlci4gIEFnYWluLCB0aGUgTUFJTlRBSU5FUlMgZmlsZSBpcwordGhlIHBsYWNlIHRvIHN0YXJ0LiAgVGhhdCBmaWxlIHRlbmRzIHRvIG5vdCBhbHdheXMgYmUgdXAgdG8gZGF0ZSwgdGhvdWdoLAorYW5kIG5vdCBhbGwgc3Vic3lzdGVtcyBhcmUgcmVwcmVzZW50ZWQgdGhlcmUuICBUaGUgcGVyc29uIGxpc3RlZCBpbiB0aGUKK01BSU5UQUlORVJTIGZpbGUgbWF5LCBpbiBmYWN0LCBub3QgYmUgdGhlIHBlcnNvbiB3aG8gaXMgYWN0dWFsbHkgYWN0aW5nIGluCit0aGF0IHJvbGUgY3VycmVudGx5LiAgU28sIHdoZW4gdGhlcmUgaXMgZG91YnQgYWJvdXQgd2hvIHRvIGNvbnRhY3QsIGEKK3VzZWZ1bCB0cmljayBpcyB0byB1c2UgZ2l0IChhbmQgImdpdCBsb2ciIGluIHBhcnRpY3VsYXIpIHRvIHNlZSB3aG8gaXMKK2N1cnJlbnRseSBhY3RpdmUgd2l0aGluIHRoZSBzdWJzeXN0ZW0gb2YgaW50ZXJlc3QuICBMb29rIGF0IHdobyBpcyB3cml0aW5nCitwYXRjaGVzLCBhbmQgd2hvLCBpZiBhbnlib2R5LCBpcyBhdHRhY2hpbmcgU2lnbmVkLW9mZi1ieSBsaW5lcyB0byB0aG9zZQorcGF0Y2hlcy4gIFRob3NlIGFyZSB0aGUgcGVvcGxlIHdobyB3aWxsIGJlIGJlc3QgcGxhY2VkIHRvIGhlbHAgd2l0aCBhIG5ldworZGV2ZWxvcG1lbnQgcHJvamVjdC4KKworSWYgYWxsIGVsc2UgZmFpbHMsIHRhbGtpbmcgdG8gQW5kcmV3IE1vcnRvbiBjYW4gYmUgYW4gZWZmZWN0aXZlIHdheSB0bwordHJhY2sgZG93biBhIG1haW50YWluZXIgZm9yIGEgc3BlY2lmaWMgcGllY2Ugb2YgY29kZS4KKworCiszLjQ6IFdIRU4gVE8gUE9TVD8KKworSWYgcG9zc2libGUsIHBvc3RpbmcgeW91ciBwbGFucyBkdXJpbmcgdGhlIGVhcmx5IHN0YWdlcyBjYW4gb25seSBiZQoraGVscGZ1bC4gIERlc2NyaWJlIHRoZSBwcm9ibGVtIGJlaW5nIHNvbHZlZCBhbmQgYW55IHBsYW5zIHRoYXQgaGF2ZSBiZWVuCittYWRlIG9uIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBkb25lLiAgQW55IGluZm9ybWF0aW9uIHlvdSBjYW4KK3Byb3ZpZGUgY2FuIGhlbHAgdGhlIGRldmVsb3BtZW50IGNvbW11bml0eSBwcm92aWRlIHVzZWZ1bCBpbnB1dCBvbiB0aGUKK3Byb2plY3QuCisKK09uZSBkaXNjb3VyYWdpbmcgdGhpbmcgd2hpY2ggY2FuIGhhcHBlbiBhdCB0aGlzIHN0YWdlIGlzIG5vdCBhIGhvc3RpbGUKK3JlYWN0aW9uLCBidXQsIGluc3RlYWQsIGxpdHRsZSBvciBubyByZWFjdGlvbiBhdCBhbGwuICBUaGUgc2FkIHRydXRoIG9mIHRoZQorbWF0dGVyIGlzICgxKSBrZXJuZWwgZGV2ZWxvcGVycyB0ZW5kIHRvIGJlIGJ1c3ksICgyKSB0aGVyZSBpcyBubyBzaG9ydGFnZQorb2YgcGVvcGxlIHdpdGggZ3JhbmQgcGxhbnMgYW5kIGxpdHRsZSBjb2RlIChvciBldmVuIHByb3NwZWN0IG9mIGNvZGUpIHRvCitiYWNrIHRoZW0gdXAsIGFuZCAoMykgbm9ib2R5IGlzIG9ibGlnYXRlZCB0byByZXZpZXcgb3IgY29tbWVudCBvbiBpZGVhcworcG9zdGVkIGJ5IG90aGVycy4gIElmIGEgcmVxdWVzdC1mb3ItY29tbWVudHMgcG9zdGluZyB5aWVsZHMgbGl0dGxlIGluIHRoZQord2F5IG9mIGNvbW1lbnRzLCBkbyBub3QgYXNzdW1lIHRoYXQgaXQgbWVhbnMgdGhlcmUgaXMgbm8gaW50ZXJlc3QgaW4gdGhlCitwcm9qZWN0LiAgVW5mb3J0dW5hdGVseSwgeW91IGFsc28gY2Fubm90IGFzc3VtZSB0aGF0IHRoZXJlIGFyZSBubyBwcm9ibGVtcword2l0aCB5b3VyIGlkZWEuICBUaGUgYmVzdCB0aGluZyB0byBkbyBpbiB0aGlzIHNpdHVhdGlvbiBpcyB0byBwcm9jZWVkLAora2VlcGluZyB0aGUgY29tbXVuaXR5IGluZm9ybWVkIGFzIHlvdSBnby4KKworCiszLjU6IEdFVFRJTkcgT0ZGSUNJQUwgQlVZLUlOCisKK0lmIHlvdXIgd29yayBpcyBiZWluZyBkb25lIGluIGEgY29ycG9yYXRlIGVudmlyb25tZW50IC0gYXMgbW9zdCBMaW51eAora2VybmVsIHdvcmsgaXMgLSB5b3UgbXVzdCwgb2J2aW91c2x5LCBoYXZlIHBlcm1pc3Npb24gZnJvbSBzdWl0YWJseQorZW1wb3dlcmVkIG1hbmFnZXJzIGJlZm9yZSB5b3UgY2FuIHBvc3QgeW91ciBjb21wYW55J3MgcGxhbnMgb3IgY29kZSB0byBhCitwdWJsaWMgbWFpbGluZyBsaXN0LiAgVGhlIHBvc3Rpbmcgb2YgY29kZSB3aGljaCBoYXMgbm90IGJlZW4gY2xlYXJlZCBmb3IKK3JlbGVhc2UgdW5kZXIgYSBHUEwtY29tcGF0aWJsZSBsaWNlbnNlIGNhbiBiZSBlc3BlY2lhbGx5IHByb2JsZW1hdGljOyB0aGUKK3Nvb25lciB0aGF0IGEgY29tcGFueSdzIG1hbmFnZW1lbnQgYW5kIGxlZ2FsIHN0YWZmIGNhbiBhZ3JlZSBvbiB0aGUgcG9zdGluZworb2YgYSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvamVjdCwgdGhlIGJldHRlciBvZmYgZXZlcnlib2R5IGludm9sdmVkIHdpbGwgYmUuCisKK1NvbWUgcmVhZGVycyBtYXkgYmUgdGhpbmtpbmcgYXQgdGhpcyBwb2ludCB0aGF0IHRoZWlyIGtlcm5lbCB3b3JrIGlzCitpbnRlbmRlZCB0byBzdXBwb3J0IGEgcHJvZHVjdCB3aGljaCBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBvZmZpY2lhbGx5CithY2tub3dsZWRnZWQgZXhpc3RlbmNlLiAgUmV2ZWFsaW5nIHRoZWlyIGVtcGxveWVyJ3MgcGxhbnMgb24gYSBwdWJsaWMKK21haWxpbmcgbGlzdCBtYXkgbm90IGJlIGEgdmlhYmxlIG9wdGlvbi4gIEluIGNhc2VzIGxpa2UgdGhpcywgaXQgaXMgd29ydGgKK2NvbnNpZGVyaW5nIHdoZXRoZXIgdGhlIHNlY3JlY3kgaXMgcmVhbGx5IG5lY2Vzc2FyeTsgdGhlcmUgaXMgb2Z0ZW4gbm8gcmVhbAorbmVlZCB0byBrZWVwIGRldmVsb3BtZW50IHBsYW5zIGJlaGluZCBjbG9zZWQgZG9vcnMuCisKK1RoYXQgc2FpZCwgdGhlcmUgYXJlIGFsc28gY2FzZXMgd2hlcmUgYSBjb21wYW55IGxlZ2l0aW1hdGVseSBjYW5ub3QKK2Rpc2Nsb3NlIGl0cyBwbGFucyBlYXJseSBpbiB0aGUgZGV2ZWxvcG1lbnQgcHJvY2Vzcy4gIENvbXBhbmllcyB3aXRoCitleHBlcmllbmNlZCBrZXJuZWwgZGV2ZWxvcGVycyBtYXkgY2hvb3NlIHRvIHByb2NlZWQgaW4gYW4gb3Blbi1sb29wIG1hbm5lcgorb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGV5IHdpbGwgYmUgYWJsZSB0byBhdm9pZCBzZXJpb3VzIGludGVncmF0aW9uCitwcm9ibGVtcyBsYXRlci4gIEZvciBjb21wYW5pZXMgd2l0aG91dCB0aGF0IHNvcnQgb2YgaW4taG91c2UgZXhwZXJ0aXNlLCB0aGUKK2Jlc3Qgb3B0aW9uIGlzIG9mdGVuIHRvIGhpcmUgYW4gb3V0c2lkZSBkZXZlbG9wZXIgdG8gcmV2aWV3IHRoZSBwbGFucyB1bmRlcgorYSBub24tZGlzY2xvc3VyZSBhZ3JlZW1lbnQuICBUaGUgTGludXggRm91bmRhdGlvbiBvcGVyYXRlcyBhbiBOREEgcHJvZ3JhbQorZGVzaWduZWQgdG8gaGVscCB3aXRoIHRoaXMgc29ydCBvZiBzaXR1YXRpb247IG1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kCithdDoKKworICAgIGh0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9lbi9OREFfcHJvZ3JhbQorCitUaGlzIGtpbmQgb2YgcmV2aWV3IGlzIG9mdGVuIGVub3VnaCB0byBhdm9pZCBzZXJpb3VzIHByb2JsZW1zIGxhdGVyIG9uCit3aXRob3V0IHJlcXVpcmluZyBwdWJsaWMgZGlzY2xvc3VyZSBvZiB0aGUgcHJvamVjdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy80LkNvZGluZyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy80LkNvZGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTRhY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzQuQ29kaW5nCkBAIC0wLDAgKzEsMzg0IEBACis0OiBHRVRUSU5HIFRIRSBDT0RFIFJJR0hUCisKK1doaWxlIHRoZXJlIGlzIG11Y2ggdG8gYmUgc2FpZCBmb3IgYSBzb2xpZCBhbmQgY29tbXVuaXR5LW9yaWVudGVkIGRlc2lnbgorcHJvY2VzcywgdGhlIHByb29mIG9mIGFueSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvamVjdCBpcyBpbiB0aGUgcmVzdWx0aW5nCitjb2RlLiAgSXQgaXMgdGhlIGNvZGUgd2hpY2ggd2lsbCBiZSBleGFtaW5lZCBieSBvdGhlciBkZXZlbG9wZXJzIGFuZCBtZXJnZWQKKyhvciBub3QpIGludG8gdGhlIG1haW5saW5lIHRyZWUuICBTbyBpdCBpcyB0aGUgcXVhbGl0eSBvZiB0aGlzIGNvZGUgd2hpY2gKK3dpbGwgZGV0ZXJtaW5lIHRoZSB1bHRpbWF0ZSBzdWNjZXNzIG9mIHRoZSBwcm9qZWN0LgorCitUaGlzIHNlY3Rpb24gd2lsbCBleGFtaW5lIHRoZSBjb2RpbmcgcHJvY2Vzcy4gIFdlJ2xsIHN0YXJ0IHdpdGggYSBsb29rIGF0IGEKK251bWJlciBvZiB3YXlzIGluIHdoaWNoIGtlcm5lbCBkZXZlbG9wZXJzIGNhbiBnbyB3cm9uZy4gIFRoZW4gdGhlIGZvY3VzCit3aWxsIHNoaWZ0IHRvd2FyZCBkb2luZyB0aGluZ3MgcmlnaHQgYW5kIHRoZSB0b29scyB3aGljaCBjYW4gaGVscCBpbiB0aGF0CitxdWVzdC4KKworCis0LjE6IFBJVEZBTExTCisKKyogQ29kaW5nIHN0eWxlCisKK1RoZSBrZXJuZWwgaGFzIGxvbmcgaGFkIGEgc3RhbmRhcmQgY29kaW5nIHN0eWxlLCBkZXNjcmliZWQgaW4KK0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUuICBGb3IgbXVjaCBvZiB0aGF0IHRpbWUsIHRoZSBwb2xpY2llcyBkZXNjcmliZWQKK2luIHRoYXQgZmlsZSB3ZXJlIHRha2VuIGFzIGJlaW5nLCBhdCBtb3N0LCBhZHZpc29yeS4gIEFzIGEgcmVzdWx0LCB0aGVyZSBpcworYSBzdWJzdGFudGlhbCBhbW91bnQgb2YgY29kZSBpbiB0aGUga2VybmVsIHdoaWNoIGRvZXMgbm90IG1lZXQgdGhlIGNvZGluZworc3R5bGUgZ3VpZGVsaW5lcy4gIFRoZSBwcmVzZW5jZSBvZiB0aGF0IGNvZGUgbGVhZHMgdG8gdHdvIGluZGVwZW5kZW50CitoYXphcmRzIGZvciBrZXJuZWwgZGV2ZWxvcGVycy4KKworVGhlIGZpcnN0IG9mIHRoZXNlIGlzIHRvIGJlbGlldmUgdGhhdCB0aGUga2VybmVsIGNvZGluZyBzdGFuZGFyZHMgZG8gbm90CittYXR0ZXIgYW5kIGFyZSBub3QgZW5mb3JjZWQuICBUaGUgdHJ1dGggb2YgdGhlIG1hdHRlciBpcyB0aGF0IGFkZGluZyBuZXcKK2NvZGUgdG8gdGhlIGtlcm5lbCBpcyB2ZXJ5IGRpZmZpY3VsdCBpZiB0aGF0IGNvZGUgaXMgbm90IGNvZGVkIGFjY29yZGluZyB0bwordGhlIHN0YW5kYXJkOyBtYW55IGRldmVsb3BlcnMgd2lsbCByZXF1ZXN0IHRoYXQgdGhlIGNvZGUgYmUgcmVmb3JtYXR0ZWQKK2JlZm9yZSB0aGV5IHdpbGwgZXZlbiByZXZpZXcgaXQuICBBIGNvZGUgYmFzZSBhcyBsYXJnZSBhcyB0aGUga2VybmVsCityZXF1aXJlcyBzb21lIHVuaWZvcm1pdHkgb2YgY29kZSB0byBtYWtlIGl0IHBvc3NpYmxlIGZvciBkZXZlbG9wZXJzIHRvCitxdWlja2x5IHVuZGVyc3RhbmQgYW55IHBhcnQgb2YgaXQuICBTbyB0aGVyZSBpcyBubyBsb25nZXIgcm9vbSBmb3IKK3N0cmFuZ2VseS1mb3JtYXR0ZWQgY29kZS4KKworT2NjYXNpb25hbGx5LCB0aGUga2VybmVsJ3MgY29kaW5nIHN0eWxlIHdpbGwgcnVuIGludG8gY29uZmxpY3Qgd2l0aCBhbgorZW1wbG95ZXIncyBtYW5kYXRlZCBzdHlsZS4gIEluIHN1Y2ggY2FzZXMsIHRoZSBrZXJuZWwncyBzdHlsZSB3aWxsIGhhdmUgdG8KK3dpbiBiZWZvcmUgdGhlIGNvZGUgY2FuIGJlIG1lcmdlZC4gIFB1dHRpbmcgY29kZSBpbnRvIHRoZSBrZXJuZWwgbWVhbnMKK2dpdmluZyB1cCBhIGRlZ3JlZSBvZiBjb250cm9sIGluIGEgbnVtYmVyIG9mIHdheXMgLSBpbmNsdWRpbmcgY29udHJvbCBvdmVyCitob3cgdGhlIGNvZGUgaXMgZm9ybWF0dGVkLgorCitUaGUgb3RoZXIgdHJhcCBpcyB0byBhc3N1bWUgdGhhdCBjb2RlIHdoaWNoIGlzIGFscmVhZHkgaW4gdGhlIGtlcm5lbCBpcwordXJnZW50bHkgaW4gbmVlZCBvZiBjb2Rpbmcgc3R5bGUgZml4ZXMuICBEZXZlbG9wZXJzIG1heSBzdGFydCB0byBnZW5lcmF0ZQorcmVmb3JtYXR0aW5nIHBhdGNoZXMgYXMgYSB3YXkgb2YgZ2FpbmluZyBmYW1pbGlhcml0eSB3aXRoIHRoZSBwcm9jZXNzLCBvcgorYXMgYSB3YXkgb2YgZ2V0dGluZyB0aGVpciBuYW1lIGludG8gdGhlIGtlcm5lbCBjaGFuZ2Vsb2dzIC0gb3IgYm90aC4gIEJ1dAorcHVyZSBjb2Rpbmcgc3R5bGUgZml4ZXMgYXJlIHNlZW4gYXMgbm9pc2UgYnkgdGhlIGRldmVsb3BtZW50IGNvbW11bml0eTsKK3RoZXkgdGVuZCB0byBnZXQgYSBjaGlsbHkgcmVjZXB0aW9uLiAgU28gdGhpcyB0eXBlIG9mIHBhdGNoIGlzIGJlc3QKK2F2b2lkZWQuICBJdCBpcyBuYXR1cmFsIHRvIGZpeCB0aGUgc3R5bGUgb2YgYSBwaWVjZSBvZiBjb2RlIHdoaWxlIHdvcmtpbmcKK29uIGl0IGZvciBvdGhlciByZWFzb25zLCBidXQgY29kaW5nIHN0eWxlIGNoYW5nZXMgc2hvdWxkIG5vdCBiZSBtYWRlIGZvcgordGhlaXIgb3duIHNha2UuCisKK1RoZSBjb2Rpbmcgc3R5bGUgZG9jdW1lbnQgYWxzbyBzaG91bGQgbm90IGJlIHJlYWQgYXMgYW4gYWJzb2x1dGUgbGF3IHdoaWNoCitjYW4gbmV2ZXIgYmUgdHJhbnNncmVzc2VkLiAgSWYgdGhlcmUgaXMgYSBnb29kIHJlYXNvbiB0byBnbyBhZ2FpbnN0IHRoZQorc3R5bGUgKGEgbGluZSB3aGljaCBiZWNvbWVzIGZhciBsZXNzIHJlYWRhYmxlIGlmIHNwbGl0IHRvIGZpdCB3aXRoaW4gdGhlCis4MC1jb2x1bW4gbGltaXQsIGZvciBleGFtcGxlKSwganVzdCBkbyBpdC4KKworCisqIEFic3RyYWN0aW9uIGxheWVycworCitDb21wdXRlciBTY2llbmNlIHByb2Zlc3NvcnMgdGVhY2ggc3R1ZGVudHMgdG8gbWFrZSBleHRlbnNpdmUgdXNlIG9mCithYnN0cmFjdGlvbiBsYXllcnMgaW4gdGhlIG5hbWUgb2YgZmxleGliaWxpdHkgYW5kIGluZm9ybWF0aW9uIGhpZGluZy4KK0NlcnRhaW5seSB0aGUga2VybmVsIG1ha2VzIGV4dGVuc2l2ZSB1c2Ugb2YgYWJzdHJhY3Rpb247IG5vIHByb2plY3QKK2ludm9sdmluZyBzZXZlcmFsIG1pbGxpb24gbGluZXMgb2YgY29kZSBjb3VsZCBkbyBvdGhlcndpc2UgYW5kIHN1cnZpdmUuCitCdXQgZXhwZXJpZW5jZSBoYXMgc2hvd24gdGhhdCBleGNlc3NpdmUgb3IgcHJlbWF0dXJlIGFic3RyYWN0aW9uIGNhbiBiZQoranVzdCBhcyBoYXJtZnVsIGFzIHByZW1hdHVyZSBvcHRpbWl6YXRpb24uICBBYnN0cmFjdGlvbiBzaG91bGQgYmUgdXNlZCB0bwordGhlIGxldmVsIHJlcXVpcmVkIGFuZCBubyBmdXJ0aGVyLgorCitBdCBhIHNpbXBsZSBsZXZlbCwgY29uc2lkZXIgYSBmdW5jdGlvbiB3aGljaCBoYXMgYW4gYXJndW1lbnQgd2hpY2ggaXMKK2Fsd2F5cyBwYXNzZWQgYXMgemVybyBieSBhbGwgY2FsbGVycy4gIE9uZSBjb3VsZCByZXRhaW4gdGhhdCBhcmd1bWVudCBqdXN0CitpbiBjYXNlIHNvbWVib2R5IGV2ZW50dWFsbHkgbmVlZHMgdG8gdXNlIHRoZSBleHRyYSBmbGV4aWJpbGl0eSB0aGF0IGl0Citwcm92aWRlcy4gIEJ5IHRoYXQgdGltZSwgdGhvdWdoLCBjaGFuY2VzIGFyZSBnb29kIHRoYXQgdGhlIGNvZGUgd2hpY2gKK2ltcGxlbWVudHMgdGhpcyBleHRyYSBhcmd1bWVudCBoYXMgYmVlbiBicm9rZW4gaW4gc29tZSBzdWJ0bGUgd2F5IHdoaWNoIHdhcworbmV2ZXIgbm90aWNlZCAtIGJlY2F1c2UgaXQgaGFzIG5ldmVyIGJlZW4gdXNlZC4gIE9yLCB3aGVuIHRoZSBuZWVkIGZvcgorZXh0cmEgZmxleGliaWxpdHkgYXJpc2VzLCBpdCBkb2VzIG5vdCBkbyBzbyBpbiBhIHdheSB3aGljaCBtYXRjaGVzIHRoZQorcHJvZ3JhbW1lcidzIGVhcmx5IGV4cGVjdGF0aW9uLiAgS2VybmVsIGRldmVsb3BlcnMgd2lsbCByb3V0aW5lbHkgc3VibWl0CitwYXRjaGVzIHRvIHJlbW92ZSB1bnVzZWQgYXJndW1lbnRzOyB0aGV5IHNob3VsZCwgaW4gZ2VuZXJhbCwgbm90IGJlIGFkZGVkCitpbiB0aGUgZmlyc3QgcGxhY2UuCisKK0Fic3RyYWN0aW9uIGxheWVycyB3aGljaCBoaWRlIGFjY2VzcyB0byBoYXJkd2FyZSAtIG9mdGVuIHRvIGFsbG93IHRoZSBidWxrCitvZiBhIGRyaXZlciB0byBiZSB1c2VkIHdpdGggbXVsdGlwbGUgb3BlcmF0aW5nIHN5c3RlbXMgLSBhcmUgZXNwZWNpYWxseQorZnJvd25lZCB1cG9uLiAgU3VjaCBsYXllcnMgb2JzY3VyZSB0aGUgY29kZSBhbmQgbWF5IGltcG9zZSBhIHBlcmZvcm1hbmNlCitwZW5hbHR5OyB0aGV5IGRvIG5vdCBiZWxvbmcgaW4gdGhlIExpbnV4IGtlcm5lbC4KKworT24gdGhlIG90aGVyIGhhbmQsIGlmIHlvdSBmaW5kIHlvdXJzZWxmIGNvcHlpbmcgc2lnbmlmaWNhbnQgYW1vdW50cyBvZiBjb2RlCitmcm9tIGFub3RoZXIga2VybmVsIHN1YnN5c3RlbSwgaXQgaXMgdGltZSB0byBhc2sgd2hldGhlciBpdCB3b3VsZCwgaW4gZmFjdCwKK21ha2Ugc2Vuc2UgdG8gcHVsbCBvdXQgc29tZSBvZiB0aGF0IGNvZGUgaW50byBhIHNlcGFyYXRlIGxpYnJhcnkgb3IgdG8KK2ltcGxlbWVudCB0aGF0IGZ1bmN0aW9uYWxpdHkgYXQgYSBoaWdoZXIgbGV2ZWwuICBUaGVyZSBpcyBubyB2YWx1ZSBpbgorcmVwbGljYXRpbmcgdGhlIHNhbWUgY29kZSB0aHJvdWdob3V0IHRoZSBrZXJuZWwuCisKKworKiAjaWZkZWYgYW5kIHByZXByb2Nlc3NvciB1c2UgaW4gZ2VuZXJhbAorCitUaGUgQyBwcmVwcm9jZXNzb3Igc2VlbXMgdG8gcHJlc2VudCBhIHBvd2VyZnVsIHRlbXB0YXRpb24gdG8gc29tZSBDCitwcm9ncmFtbWVycywgd2hvIHNlZSBpdCBhcyBhIHdheSB0byBlZmZpY2llbnRseSBlbmNvZGUgYSBncmVhdCBkZWFsIG9mCitmbGV4aWJpbGl0eSBpbnRvIGEgc291cmNlIGZpbGUuICBCdXQgdGhlIHByZXByb2Nlc3NvciBpcyBub3QgQywgYW5kIGhlYXZ5Cit1c2Ugb2YgaXQgcmVzdWx0cyBpbiBjb2RlIHdoaWNoIGlzIG11Y2ggaGFyZGVyIGZvciBvdGhlcnMgdG8gcmVhZCBhbmQKK2hhcmRlciBmb3IgdGhlIGNvbXBpbGVyIHRvIGNoZWNrIGZvciBjb3JyZWN0bmVzcy4gIEhlYXZ5IHByZXByb2Nlc3NvciB1c2UKK2lzIGFsbW9zdCBhbHdheXMgYSBzaWduIG9mIGNvZGUgd2hpY2ggbmVlZHMgc29tZSBjbGVhbnVwIHdvcmsuCisKK0NvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpdGggI2lmZGVmIGlzLCBpbmRlZWQsIGEgcG93ZXJmdWwgZmVhdHVyZSwgYW5kIGl0CitpcyB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiAgQnV0IHRoZXJlIGlzIGxpdHRsZSBkZXNpcmUgdG8gc2VlIGNvZGUgd2hpY2ggaXMKK3Nwcmlua2xlZCBsaWJlcmFsbHkgd2l0aCAjaWZkZWYgYmxvY2tzLiAgQXMgYSBnZW5lcmFsIHJ1bGUsICNpZmRlZiB1c2UKK3Nob3VsZCBiZSBjb25maW5lZCB0byBoZWFkZXIgZmlsZXMgd2hlbmV2ZXIgcG9zc2libGUuCitDb25kaXRpb25hbGx5LWNvbXBpbGVkIGNvZGUgY2FuIGJlIGNvbmZpbmVkIHRvIGZ1bmN0aW9ucyB3aGljaCwgaWYgdGhlIGNvZGUKK2lzIG5vdCB0byBiZSBwcmVzZW50LCBzaW1wbHkgYmVjb21lIGVtcHR5LiAgVGhlIGNvbXBpbGVyIHdpbGwgdGhlbiBxdWlldGx5CitvcHRpbWl6ZSBvdXQgdGhlIGNhbGwgdG8gdGhlIGVtcHR5IGZ1bmN0aW9uLiAgVGhlIHJlc3VsdCBpcyBmYXIgY2xlYW5lcgorY29kZSB3aGljaCBpcyBlYXNpZXIgdG8gZm9sbG93LgorCitDIHByZXByb2Nlc3NvciBtYWNyb3MgcHJlc2VudCBhIG51bWJlciBvZiBoYXphcmRzLCBpbmNsdWRpbmcgcG9zc2libGUKK211bHRpcGxlIGV2YWx1YXRpb24gb2YgZXhwcmVzc2lvbnMgd2l0aCBzaWRlIGVmZmVjdHMgYW5kIG5vIHR5cGUgc2FmZXR5LgorSWYgeW91IGFyZSB0ZW1wdGVkIHRvIGRlZmluZSBhIG1hY3JvLCBjb25zaWRlciBjcmVhdGluZyBhbiBpbmxpbmUgZnVuY3Rpb24KK2luc3RlYWQuICBUaGUgY29kZSB3aGljaCByZXN1bHRzIHdpbGwgYmUgdGhlIHNhbWUsIGJ1dCBpbmxpbmUgZnVuY3Rpb25zIGFyZQorZWFzaWVyIHRvIHJlYWQsIGRvIG5vdCBldmFsdWF0ZSB0aGVpciBhcmd1bWVudHMgbXVsdGlwbGUgdGltZXMsIGFuZCBhbGxvdwordGhlIGNvbXBpbGVyIHRvIHBlcmZvcm0gdHlwZSBjaGVja2luZyBvbiB0aGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWUuCisKKworKiBJbmxpbmUgZnVuY3Rpb25zCisKK0lubGluZSBmdW5jdGlvbnMgcHJlc2VudCBhIGhhemFyZCBvZiB0aGVpciBvd24sIHRob3VnaC4gIFByb2dyYW1tZXJzIGNhbgorYmVjb21lIGVuYW1vcmVkIG9mIHRoZSBwZXJjZWl2ZWQgZWZmaWNpZW5jeSBpbmhlcmVudCBpbiBhdm9pZGluZyBhIGZ1bmN0aW9uCitjYWxsIGFuZCBmaWxsIGEgc291cmNlIGZpbGUgd2l0aCBpbmxpbmUgZnVuY3Rpb25zLiAgVGhvc2UgZnVuY3Rpb25zLAoraG93ZXZlciwgY2FuIGFjdHVhbGx5IHJlZHVjZSBwZXJmb3JtYW5jZS4gIFNpbmNlIHRoZWlyIGNvZGUgaXMgcmVwbGljYXRlZAorYXQgZWFjaCBjYWxsIHNpdGUsIHRoZXkgZW5kIHVwIGJsb2F0aW5nIHRoZSBzaXplIG9mIHRoZSBjb21waWxlZCBrZXJuZWwuCitUaGF0LCBpbiB0dXJuLCBjcmVhdGVzIHByZXNzdXJlIG9uIHRoZSBwcm9jZXNzb3IncyBtZW1vcnkgY2FjaGVzLCB3aGljaCBjYW4KK3Nsb3cgZXhlY3V0aW9uIGRyYW1hdGljYWxseS4gIElubGluZSBmdW5jdGlvbnMsIGFzIGEgcnVsZSwgc2hvdWxkIGJlIHF1aXRlCitzbWFsbCBhbmQgcmVsYXRpdmVseSByYXJlLiAgVGhlIGNvc3Qgb2YgYSBmdW5jdGlvbiBjYWxsLCBhZnRlciBhbGwsIGlzIG5vdAordGhhdCBoaWdoOyB0aGUgY3JlYXRpb24gb2YgbGFyZ2UgbnVtYmVycyBvZiBpbmxpbmUgZnVuY3Rpb25zIGlzIGEgY2xhc3NpYworZXhhbXBsZSBvZiBwcmVtYXR1cmUgb3B0aW1pemF0aW9uLgorCitJbiBnZW5lcmFsLCBrZXJuZWwgcHJvZ3JhbW1lcnMgaWdub3JlIGNhY2hlIGVmZmVjdHMgYXQgdGhlaXIgcGVyaWwuICBUaGUKK2NsYXNzaWMgdGltZS9zcGFjZSB0cmFkZW9mZiB0YXVnaHQgaW4gYmVnaW5uaW5nIGRhdGEgc3RydWN0dXJlcyBjbGFzc2VzCitvZnRlbiBkb2VzIG5vdCBhcHBseSB0byBjb250ZW1wb3JhcnkgaGFyZHdhcmUuICBTcGFjZSAqaXMqIHRpbWUsIGluIHRoYXQgYQorbGFyZ2VyIHByb2dyYW0gd2lsbCBydW4gc2xvd2VyIHRoYW4gb25lIHdoaWNoIGlzIG1vcmUgY29tcGFjdC4KKworCisqIExvY2tpbmcKKworSW4gTWF5LCAyMDA2LCB0aGUgIkRldmljZXNjYXBlIiBuZXR3b3JraW5nIHN0YWNrIHdhcywgd2l0aCBncmVhdAorZmFuZmFyZSwgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCBhbmQgbWFkZSBhdmFpbGFibGUgZm9yIGluY2x1c2lvbiBpbiB0aGUKK21haW5saW5lIGtlcm5lbC4gIFRoaXMgZG9uYXRpb24gd2FzIHdlbGNvbWUgbmV3czsgc3VwcG9ydCBmb3Igd2lyZWxlc3MKK25ldHdvcmtpbmcgaW4gTGludXggd2FzIGNvbnNpZGVyZWQgc3Vic3RhbmRhcmQgYXQgYmVzdCwgYW5kIHRoZSBEZXZpY2VzY2FwZQorc3RhY2sgb2ZmZXJlZCB0aGUgcHJvbWlzZSBvZiBmaXhpbmcgdGhhdCBzaXR1YXRpb24uICBZZXQsIHRoaXMgY29kZSBkaWQgbm90CithY3R1YWxseSBtYWtlIGl0IGludG8gdGhlIG1haW5saW5lIHVudGlsIEp1bmUsIDIwMDcgKDIuNi4yMikuICBXaGF0CitoYXBwZW5lZD8KKworVGhpcyBjb2RlIHNob3dlZCBhIG51bWJlciBvZiBzaWducyBvZiBoYXZpbmcgYmVlbiBkZXZlbG9wZWQgYmVoaW5kCitjb3Jwb3JhdGUgZG9vcnMuICBCdXQgb25lIGxhcmdlIHByb2JsZW0gaW4gcGFydGljdWxhciB3YXMgdGhhdCBpdCB3YXMgbm90CitkZXNpZ25lZCB0byB3b3JrIG9uIG11bHRpcHJvY2Vzc29yIHN5c3RlbXMuICBCZWZvcmUgdGhpcyBuZXR3b3JraW5nIHN0YWNrCisobm93IGNhbGxlZCBtYWM4MDIxMSkgY291bGQgYmUgbWVyZ2VkLCBhIGxvY2tpbmcgc2NoZW1lIG5lZWRlZCB0byBiZQorcmV0cm9maXR0ZWQgb250byBpdC4gIAorCitPbmNlIHVwb24gYSB0aW1lLCBMaW51eCBrZXJuZWwgY29kZSBjb3VsZCBiZSBkZXZlbG9wZWQgd2l0aG91dCB0aGlua2luZworYWJvdXQgdGhlIGNvbmN1cnJlbmN5IGlzc3VlcyBwcmVzZW50ZWQgYnkgbXVsdGlwcm9jZXNzb3Igc3lzdGVtcy4gIE5vdywKK2hvd2V2ZXIsIHRoaXMgZG9jdW1lbnQgaXMgYmVpbmcgd3JpdHRlbiBvbiBhIGR1YWwtY29yZSBsYXB0b3AuICBFdmVuIG9uCitzaW5nbGUtcHJvY2Vzc29yIHN5c3RlbXMsIHdvcmsgYmVpbmcgZG9uZSB0byBpbXByb3ZlIHJlc3BvbnNpdmVuZXNzIHdpbGwKK3JhaXNlIHRoZSBsZXZlbCBvZiBjb25jdXJyZW5jeSB3aXRoaW4gdGhlIGtlcm5lbC4gIFRoZSBkYXlzIHdoZW4ga2VybmVsCitjb2RlIGNvdWxkIGJlIHdyaXR0ZW4gd2l0aG91dCB0aGlua2luZyBhYm91dCBsb2NraW5nIGFyZSBsb25nIHBhc3QuCisKK0FueSByZXNvdXJjZSAoZGF0YSBzdHJ1Y3R1cmVzLCBoYXJkd2FyZSByZWdpc3RlcnMsIGV0Yy4pIHdoaWNoIGNvdWxkIGJlCithY2Nlc3NlZCBjb25jdXJyZW50bHkgYnkgbW9yZSB0aGFuIG9uZSB0aHJlYWQgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgYSBsb2NrLgorTmV3IGNvZGUgc2hvdWxkIGJlIHdyaXR0ZW4gd2l0aCB0aGlzIHJlcXVpcmVtZW50IGluIG1pbmQ7IHJldHJvZml0dGluZworbG9ja2luZyBhZnRlciB0aGUgZmFjdCBpcyBhIHJhdGhlciBtb3JlIGRpZmZpY3VsdCB0YXNrLiAgS2VybmVsIGRldmVsb3BlcnMKK3Nob3VsZCB0YWtlIHRoZSB0aW1lIHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBsb2NraW5nIHByaW1pdGl2ZXMgd2VsbAorZW5vdWdoIHRvIHBpY2sgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoZSBqb2IuICBDb2RlIHdoaWNoIHNob3dzIGEgbGFjayBvZgorYXR0ZW50aW9uIHRvIGNvbmN1cnJlbmN5IHdpbGwgaGF2ZSBhIGRpZmZpY3VsdCBwYXRoIGludG8gdGhlIG1haW5saW5lLgorCisKKyogUmVncmVzc2lvbnMKKworT25lIGZpbmFsIGhhemFyZCB3b3J0aCBtZW50aW9uaW5nIGlzIHRoaXM6IGl0IGNhbiBiZSB0ZW1wdGluZyB0byBtYWtlIGEKK2NoYW5nZSAod2hpY2ggbWF5IGJyaW5nIGJpZyBpbXByb3ZlbWVudHMpIHdoaWNoIGNhdXNlcyBzb21ldGhpbmcgdG8gYnJlYWsKK2ZvciBleGlzdGluZyB1c2Vycy4gIFRoaXMga2luZCBvZiBjaGFuZ2UgaXMgY2FsbGVkIGEgInJlZ3Jlc3Npb24sIiBhbmQKK3JlZ3Jlc3Npb25zIGhhdmUgYmVjb21lIG1vc3QgdW53ZWxjb21lIGluIHRoZSBtYWlubGluZSBrZXJuZWwuICBXaXRoIGZldworZXhjZXB0aW9ucywgY2hhbmdlcyB3aGljaCBjYXVzZSByZWdyZXNzaW9ucyB3aWxsIGJlIGJhY2tlZCBvdXQgaWYgdGhlCityZWdyZXNzaW9uIGNhbm5vdCBiZSBmaXhlZCBpbiBhIHRpbWVseSBtYW5uZXIuICBGYXIgYmV0dGVyIHRvIGF2b2lkIHRoZQorcmVncmVzc2lvbiBpbiB0aGUgZmlyc3QgcGxhY2UuCisKK0l0IGlzIG9mdGVuIGFyZ3VlZCB0aGF0IGEgcmVncmVzc2lvbiBjYW4gYmUganVzdGlmaWVkIGlmIGl0IGNhdXNlcyB0aGluZ3MKK3RvIHdvcmsgZm9yIG1vcmUgcGVvcGxlIHRoYW4gaXQgY3JlYXRlcyBwcm9ibGVtcyBmb3IuICBXaHkgbm90IG1ha2UgYQorY2hhbmdlIGlmIGl0IGJyaW5ncyBuZXcgZnVuY3Rpb25hbGl0eSB0byB0ZW4gc3lzdGVtcyBmb3IgZWFjaCBvbmUgaXQKK2JyZWFrcz8gIFRoZSBiZXN0IGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHdhcyBleHByZXNzZWQgYnkgTGludXMgaW4gSnVseSwKKzIwMDc6CisKKwlTbyB3ZSBkb24ndCBmaXggYnVncyBieSBpbnRyb2R1Y2luZyBuZXcgcHJvYmxlbXMuICBUaGF0IHdheSBsaWVzCisJbWFkbmVzcywgYW5kIG5vYm9keSBldmVyIGtub3dzIGlmIHlvdSBhY3R1YWxseSBtYWtlIGFueSByZWFsCisJcHJvZ3Jlc3MgYXQgYWxsLiBJcyBpdCB0d28gc3RlcHMgZm9yd2FyZHMsIG9uZSBzdGVwIGJhY2ssIG9yIG9uZQorCXN0ZXAgZm9yd2FyZCBhbmQgdHdvIHN0ZXBzIGJhY2s/CisKKyhodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8yNDM0NjAvKS4KKworQW4gZXNwZWNpYWxseSB1bndlbGNvbWUgdHlwZSBvZiByZWdyZXNzaW9uIGlzIGFueSBzb3J0IG9mIGNoYW5nZSB0byB0aGUKK3VzZXItc3BhY2UgQUJJLiAgT25jZSBhbiBpbnRlcmZhY2UgaGFzIGJlZW4gZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSwgaXQgbXVzdAorYmUgc3VwcG9ydGVkIGluZGVmaW5pdGVseS4gIFRoaXMgZmFjdCBtYWtlcyB0aGUgY3JlYXRpb24gb2YgdXNlci1zcGFjZQoraW50ZXJmYWNlcyBwYXJ0aWN1bGFybHkgY2hhbGxlbmdpbmc6IHNpbmNlIHRoZXkgY2Fubm90IGJlIGNoYW5nZWQgaW4KK2luY29tcGF0aWJsZSB3YXlzLCB0aGV5IG11c3QgYmUgZG9uZSByaWdodCB0aGUgZmlyc3QgdGltZS4gIEZvciB0aGlzCityZWFzb24sIGEgZ3JlYXQgZGVhbCBvZiB0aG91Z2h0LCBjbGVhciBkb2N1bWVudGF0aW9uLCBhbmQgd2lkZSByZXZpZXcgZm9yCit1c2VyLXNwYWNlIGludGVyZmFjZXMgaXMgYWx3YXlzIHJlcXVpcmVkLgorCisKKworNC4yOiBDT0RFIENIRUNLSU5HIFRPT0xTCisKK0ZvciBub3csIGF0IGxlYXN0LCB0aGUgd3JpdGluZyBvZiBlcnJvci1mcmVlIGNvZGUgcmVtYWlucyBhbiBpZGVhbCB0aGF0IGZldworb2YgdXMgY2FuIHJlYWNoLiAgV2hhdCB3ZSBjYW4gaG9wZSB0byBkbywgdGhvdWdoLCBpcyB0byBjYXRjaCBhbmQgZml4IGFzCittYW55IG9mIHRob3NlIGVycm9ycyBhcyBwb3NzaWJsZSBiZWZvcmUgb3VyIGNvZGUgZ29lcyBpbnRvIHRoZSBtYWlubGluZQora2VybmVsLiAgVG8gdGhhdCBlbmQsIHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBoYXZlIHB1dCB0b2dldGhlciBhbiBpbXByZXNzaXZlCithcnJheSBvZiB0b29scyB3aGljaCBjYW4gY2F0Y2ggYSB3aWRlIHZhcmlldHkgb2Ygb2JzY3VyZSBwcm9ibGVtcyBpbiBhbgorYXV0b21hdGVkIHdheS4gIEFueSBwcm9ibGVtIGNhdWdodCBieSB0aGUgY29tcHV0ZXIgaXMgYSBwcm9ibGVtIHdoaWNoIHdpbGwKK25vdCBhZmZsaWN0IGEgdXNlciBsYXRlciBvbiwgc28gaXQgc3RhbmRzIHRvIHJlYXNvbiB0aGF0IHRoZSBhdXRvbWF0ZWQKK3Rvb2xzIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIHBvc3NpYmxlLgorCitUaGUgZmlyc3Qgc3RlcCBpcyBzaW1wbHkgdG8gaGVlZCB0aGUgd2FybmluZ3MgcHJvZHVjZWQgYnkgdGhlIGNvbXBpbGVyLgorQ29udGVtcG9yYXJ5IHZlcnNpb25zIG9mIGdjYyBjYW4gZGV0ZWN0IChhbmQgd2FybiBhYm91dCkgYSBsYXJnZSBudW1iZXIgb2YKK3BvdGVudGlhbCBlcnJvcnMuICBRdWl0ZSBvZnRlbiwgdGhlc2Ugd2FybmluZ3MgcG9pbnQgdG8gcmVhbCBwcm9ibGVtcy4KK0NvZGUgc3VibWl0dGVkIGZvciByZXZpZXcgc2hvdWxkLCBhcyBhIHJ1bGUsIG5vdCBwcm9kdWNlIGFueSBjb21waWxlcgord2FybmluZ3MuICBXaGVuIHNpbGVuY2luZyB3YXJuaW5ncywgdGFrZSBjYXJlIHRvIHVuZGVyc3RhbmQgdGhlIHJlYWwgY2F1c2UKK2FuZCB0cnkgdG8gYXZvaWQgImZpeGVzIiB3aGljaCBtYWtlIHRoZSB3YXJuaW5nIGdvIGF3YXkgd2l0aG91dCBhZGRyZXNzaW5nCitpdHMgY2F1c2UuCisKK05vdGUgdGhhdCBub3QgYWxsIGNvbXBpbGVyIHdhcm5pbmdzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuICBCdWlsZCB0aGUKK2tlcm5lbCB3aXRoICJtYWtlIEVYVFJBX0NGTEFHUz0tVyIgdG8gZ2V0IHRoZSBmdWxsIHNldC4KKworVGhlIGtlcm5lbCBwcm92aWRlcyBzZXZlcmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aGljaCB0dXJuIG9uIGRlYnVnZ2luZworZmVhdHVyZXM7IG1vc3Qgb2YgdGhlc2UgYXJlIGZvdW5kIGluIHRoZSAia2VybmVsIGhhY2tpbmciIHN1Ym1lbnUuICBTZXZlcmFsCitvZiB0aGVzZSBvcHRpb25zIHNob3VsZCBiZSB0dXJuZWQgb24gZm9yIGFueSBrZXJuZWwgdXNlZCBmb3IgZGV2ZWxvcG1lbnQgb3IKK3Rlc3RpbmcgcHVycG9zZXMuICBJbiBwYXJ0aWN1bGFyLCB5b3Ugc2hvdWxkIHR1cm4gb246CisKKyAtIEVOQUJMRV9XQVJOX0RFUFJFQ0FURUQsIEVOQUJMRV9NVVNUX0NIRUNLLCBhbmQgRlJBTUVfV0FSTiB0byBnZXQgYW4KKyAgIGV4dHJhIHNldCBvZiB3YXJuaW5ncyBmb3IgcHJvYmxlbXMgbGlrZSB0aGUgdXNlIG9mIGRlcHJlY2F0ZWQgaW50ZXJmYWNlcworICAgb3IgaWdub3JpbmcgYW4gaW1wb3J0YW50IHJldHVybiB2YWx1ZSBmcm9tIGEgZnVuY3Rpb24uICBUaGUgb3V0cHV0CisgICBnZW5lcmF0ZWQgYnkgdGhlc2Ugd2FybmluZ3MgY2FuIGJlIHZlcmJvc2UsIGJ1dCBvbmUgbmVlZCBub3Qgd29ycnkgYWJvdXQKKyAgIHdhcm5pbmdzIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KKworIC0gREVCVUdfT0JKRUNUUyB3aWxsIGFkZCBjb2RlIHRvIHRyYWNrIHRoZSBsaWZldGltZSBvZiB2YXJpb3VzIG9iamVjdHMKKyAgIGNyZWF0ZWQgYnkgdGhlIGtlcm5lbCBhbmQgd2FybiB3aGVuIHRoaW5ncyBhcmUgZG9uZSBvdXQgb2Ygb3JkZXIuICBJZgorICAgeW91IGFyZSBhZGRpbmcgYSBzdWJzeXN0ZW0gd2hpY2ggY3JlYXRlcyAoYW5kIGV4cG9ydHMpIGNvbXBsZXggb2JqZWN0cworICAgb2YgaXRzIG93biwgY29uc2lkZXIgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBvYmplY3QgZGVidWdnaW5nCisgICBpbmZyYXN0cnVjdHVyZS4KKworIC0gREVCVUdfU0xBQiBjYW4gZmluZCBhIHZhcmlldHkgb2YgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHVzZSBlcnJvcnM7IGl0CisgICBzaG91bGQgYmUgdXNlZCBvbiBtb3N0IGRldmVsb3BtZW50IGtlcm5lbHMuCisKKyAtIERFQlVHX1NQSU5MT0NLLCBERUJVR19TUElOTE9DS19TTEVFUCwgYW5kIERFQlVHX01VVEVYRVMgd2lsbCBmaW5kIGEKKyAgIG51bWJlciBvZiBjb21tb24gbG9ja2luZyBlcnJvcnMuCisKK1RoZXJlIGFyZSBxdWl0ZSBhIGZldyBvdGhlciBkZWJ1Z2dpbmcgb3B0aW9ucywgc29tZSBvZiB3aGljaCB3aWxsIGJlCitkaXNjdXNzZWQgYmVsb3cuICBTb21lIG9mIHRoZW0gaGF2ZSBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcGFjdCBhbmQKK3Nob3VsZCBub3QgYmUgdXNlZCBhbGwgb2YgdGhlIHRpbWUuICBCdXQgc29tZSB0aW1lIHNwZW50IGxlYXJuaW5nIHRoZQorYXZhaWxhYmxlIG9wdGlvbnMgd2lsbCBsaWtlbHkgYmUgcGFpZCBiYWNrIG1hbnkgdGltZXMgb3ZlciBpbiBzaG9ydCBvcmRlci4gCisKK09uZSBvZiB0aGUgaGVhdmllciBkZWJ1Z2dpbmcgdG9vbHMgaXMgdGhlIGxvY2tpbmcgY2hlY2tlciwgb3IgImxvY2tkZXAuIgorVGhpcyB0b29sIHdpbGwgdHJhY2sgdGhlIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIG9mIGV2ZXJ5IGxvY2sgKHNwaW5sb2NrIG9yCittdXRleCkgaW4gdGhlIHN5c3RlbSwgdGhlIG9yZGVyIGluIHdoaWNoIGxvY2tzIGFyZSBhY3F1aXJlZCByZWxhdGl2ZSB0bworZWFjaCBvdGhlciwgdGhlIGN1cnJlbnQgaW50ZXJydXB0IGVudmlyb25tZW50LCBhbmQgbW9yZS4gIEl0IGNhbiB0aGVuCitlbnN1cmUgdGhhdCBsb2NrcyBhcmUgYWx3YXlzIGFjcXVpcmVkIGluIHRoZSBzYW1lIG9yZGVyLCB0aGF0IHRoZSBzYW1lCitpbnRlcnJ1cHQgYXNzdW1wdGlvbnMgYXBwbHkgaW4gYWxsIHNpdHVhdGlvbnMsIGFuZCBzbyBvbi4gIEluIG90aGVyIHdvcmRzLAorbG9ja2RlcCBjYW4gZmluZCBhIG51bWJlciBvZiBzY2VuYXJpb3MgaW4gd2hpY2ggdGhlIHN5c3RlbSBjb3VsZCwgb24gcmFyZQorb2NjYXNpb24sIGRlYWRsb2NrLiAgVGhpcyBraW5kIG9mIHByb2JsZW0gY2FuIGJlIHBhaW5mdWwgKGZvciBib3RoCitkZXZlbG9wZXJzIGFuZCB1c2VycykgaW4gYSBkZXBsb3llZCBzeXN0ZW07IGxvY2tkZXAgYWxsb3dzIHRoZW0gdG8gYmUgZm91bmQKK2luIGFuIGF1dG9tYXRlZCBtYW5uZXIgYWhlYWQgb2YgdGltZS4gIENvZGUgd2l0aCBhbnkgc29ydCBvZiBub24tdHJpdmlhbAorbG9ja2luZyBzaG91bGQgYmUgcnVuIHdpdGggbG9ja2RlcCBlbmFibGVkIGJlZm9yZSBiZWluZyBzdWJtaXR0ZWQgZm9yCitpbmNsdXNpb24uIAorCitBcyBhIGRpbGlnZW50IGtlcm5lbCBwcm9ncmFtbWVyLCB5b3Ugd2lsbCwgYmV5b25kIGRvdWJ0LCBjaGVjayB0aGUgcmV0dXJuCitzdGF0dXMgb2YgYW55IG9wZXJhdGlvbiAoc3VjaCBhcyBhIG1lbW9yeSBhbGxvY2F0aW9uKSB3aGljaCBjYW4gZmFpbC4gIFRoZQorZmFjdCBvZiB0aGUgbWF0dGVyLCB0aG91Z2gsIGlzIHRoYXQgdGhlIHJlc3VsdGluZyBmYWlsdXJlIHJlY292ZXJ5IHBhdGhzCithcmUsIHByb2JhYmx5LCBjb21wbGV0ZWx5IHVudGVzdGVkLiAgVW50ZXN0ZWQgY29kZSB0ZW5kcyB0byBiZSBicm9rZW4gY29kZTsKK3lvdSBjb3VsZCBiZSBtdWNoIG1vcmUgY29uZmlkZW50IG9mIHlvdXIgY29kZSBpZiBhbGwgdGhvc2UgZXJyb3ItaGFuZGxpbmcKK3BhdGhzIGhhZCBiZWVuIGV4ZXJjaXNlZCBhIGZldyB0aW1lcy4KKworVGhlIGtlcm5lbCBwcm92aWRlcyBhIGZhdWx0IGluamVjdGlvbiBmcmFtZXdvcmsgd2hpY2ggY2FuIGRvIGV4YWN0bHkgdGhhdCwKK2VzcGVjaWFsbHkgd2hlcmUgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnZvbHZlZC4gIFdpdGggZmF1bHQgaW5qZWN0aW9uCitlbmFibGVkLCBhIGNvbmZpZ3VyYWJsZSBwZXJjZW50YWdlIG9mIG1lbW9yeSBhbGxvY2F0aW9ucyB3aWxsIGJlIG1hZGUgdG8KK2ZhaWw7IHRoZXNlIGZhaWx1cmVzIGNhbiBiZSByZXN0cmljdGVkIHRvIGEgc3BlY2lmaWMgcmFuZ2Ugb2YgY29kZS4KK1J1bm5pbmcgd2l0aCBmYXVsdCBpbmplY3Rpb24gZW5hYmxlZCBhbGxvd3MgdGhlIHByb2dyYW1tZXIgdG8gc2VlIGhvdyB0aGUKK2NvZGUgcmVzcG9uZHMgd2hlbiB0aGluZ3MgZ28gYmFkbHkuICBTZWUKK0RvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL2ZhdWx0LWluamVjdGlvbi50ZXh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uCitob3cgdG8gdXNlIHRoaXMgZmFjaWxpdHkuCisKK090aGVyIGtpbmRzIG9mIGVycm9ycyBjYW4gYmUgZm91bmQgd2l0aCB0aGUgInNwYXJzZSIgc3RhdGljIGFuYWx5c2lzIHRvb2wuCitXaXRoIHNwYXJzZSwgdGhlIHByb2dyYW1tZXIgY2FuIGJlIHdhcm5lZCBhYm91dCBjb25mdXNpb24gYmV0d2VlbgordXNlci1zcGFjZSBhbmQga2VybmVsLXNwYWNlIGFkZHJlc3NlcywgbWl4dHVyZSBvZiBiaWctZW5kaWFuIGFuZAorc21hbGwtZW5kaWFuIHF1YW50aXRpZXMsIHRoZSBwYXNzaW5nIG9mIGludGVnZXIgdmFsdWVzIHdoZXJlIGEgc2V0IG9mIGJpdAorZmxhZ3MgaXMgZXhwZWN0ZWQsIGFuZCBzbyBvbi4gIFNwYXJzZSBtdXN0IGJlIGluc3RhbGxlZCBzZXBhcmF0ZWx5IChpdCBjYW4KK2JlIGZvdW5kIGF0IGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvZGV2ZWwvc3BhcnNlLyBpZiB5b3VyCitkaXN0cmlidXRvciBkb2VzIG5vdCBwYWNrYWdlIGl0KTsgaXQgY2FuIHRoZW4gYmUgcnVuIG9uIHRoZSBjb2RlIGJ5IGFkZGluZworIkM9MSIgdG8geW91ciBtYWtlIGNvbW1hbmQuCisKK090aGVyIGtpbmRzIG9mIHBvcnRhYmlsaXR5IGVycm9ycyBhcmUgYmVzdCBmb3VuZCBieSBjb21waWxpbmcgeW91ciBjb2RlIGZvcgorb3RoZXIgYXJjaGl0ZWN0dXJlcy4gIElmIHlvdSBkbyBub3QgaGFwcGVuIHRvIGhhdmUgYW4gUy8zOTAgc3lzdGVtIG9yIGEKK0JsYWNrZmluIGRldmVsb3BtZW50IGJvYXJkIGhhbmR5LCB5b3UgY2FuIHN0aWxsIHBlcmZvcm0gdGhlIGNvbXBpbGF0aW9uCitzdGVwLiAgQSBsYXJnZSBzZXQgb2YgY3Jvc3MgY29tcGlsZXJzIGZvciB4ODYgc3lzdGVtcyBjYW4gYmUgZm91bmQgYXQgCisKKwlodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3Rvb2xzL2Nyb3NzdG9vbC8KKworU29tZSB0aW1lIHNwZW50IGluc3RhbGxpbmcgYW5kIHVzaW5nIHRoZXNlIGNvbXBpbGVycyB3aWxsIGhlbHAgYXZvaWQKK2VtYmFycmFzc21lbnQgbGF0ZXIuCisKKworNC4zOiBET0NVTUVOVEFUSU9OCisKK0RvY3VtZW50YXRpb24gaGFzIG9mdGVuIGJlZW4gbW9yZSB0aGUgZXhjZXB0aW9uIHRoYW4gdGhlIHJ1bGUgd2l0aCBrZXJuZWwKK2RldmVsb3BtZW50LiAgRXZlbiBzbywgYWRlcXVhdGUgZG9jdW1lbnRhdGlvbiB3aWxsIGhlbHAgdG8gZWFzZSB0aGUgbWVyZ2luZworb2YgbmV3IGNvZGUgaW50byB0aGUga2VybmVsLCBtYWtlIGxpZmUgZWFzaWVyIGZvciBvdGhlciBkZXZlbG9wZXJzLCBhbmQKK3dpbGwgYmUgaGVscGZ1bCBmb3IgeW91ciB1c2Vycy4gIEluIG1hbnkgY2FzZXMsIHRoZSBhZGRpdGlvbiBvZgorZG9jdW1lbnRhdGlvbiBoYXMgYmVjb21lIGVzc2VudGlhbGx5IG1hbmRhdG9yeS4KKworVGhlIGZpcnN0IHBpZWNlIG9mIGRvY3VtZW50YXRpb24gZm9yIGFueSBwYXRjaCBpcyBpdHMgYXNzb2NpYXRlZAorY2hhbmdlbG9nLiAgTG9nIGVudHJpZXMgc2hvdWxkIGRlc2NyaWJlIHRoZSBwcm9ibGVtIGJlaW5nIHNvbHZlZCwgdGhlIGZvcm0KK29mIHRoZSBzb2x1dGlvbiwgdGhlIHBlb3BsZSB3aG8gd29ya2VkIG9uIHRoZSBwYXRjaCwgYW55IHJlbGV2YW50CitlZmZlY3RzIG9uIHBlcmZvcm1hbmNlLCBhbmQgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGJlIG5lZWRlZCB0bwordW5kZXJzdGFuZCB0aGUgcGF0Y2guCisKK0FueSBjb2RlIHdoaWNoIGFkZHMgYSBuZXcgdXNlci1zcGFjZSBpbnRlcmZhY2UgLSBpbmNsdWRpbmcgbmV3IHN5c2ZzIG9yCisvcHJvYyBmaWxlcyAtIHNob3VsZCBpbmNsdWRlIGRvY3VtZW50YXRpb24gb2YgdGhhdCBpbnRlcmZhY2Ugd2hpY2ggZW5hYmxlcwordXNlci1zcGFjZSBkZXZlbG9wZXJzIHRvIGtub3cgd2hhdCB0aGV5IGFyZSB3b3JraW5nIHdpdGguICBTZWUKK0RvY3VtZW50YXRpb24vQUJJL1JFQURNRSBmb3IgYSBkZXNjcmlwdGlvbiBvZiBob3cgdGhpcyBkb2N1bWVudGF0aW9uIHNob3VsZAorYmUgZm9ybWF0dGVkIGFuZCB3aGF0IGluZm9ybWF0aW9uIG5lZWRzIHRvIGJlIHByb3ZpZGVkLgorCitUaGUgZmlsZSBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBkZXNjcmliZXMgYWxsIG9mIHRoZSBrZXJuZWwncworYm9vdC10aW1lIHBhcmFtZXRlcnMuICBBbnkgcGF0Y2ggd2hpY2ggYWRkcyBuZXcgcGFyYW1ldGVycyBzaG91bGQgYWRkIHRoZQorYXBwcm9wcmlhdGUgZW50cmllcyB0byB0aGlzIGZpbGUuCisKK0FueSBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgaGVscCB0ZXh0IHdoaWNoCitjbGVhcmx5IGV4cGxhaW5zIHRoZSBvcHRpb25zIGFuZCB3aGVuIHRoZSB1c2VyIG1pZ2h0IHdhbnQgdG8gc2VsZWN0IHRoZW0uIAorCitJbnRlcm5hbCBBUEkgaW5mb3JtYXRpb24gZm9yIG1hbnkgc3Vic3lzdGVtcyBpcyBkb2N1bWVudGVkIGJ5IHdheSBvZgorc3BlY2lhbGx5LWZvcm1hdHRlZCBjb21tZW50czsgdGhlc2UgY29tbWVudHMgY2FuIGJlIGV4dHJhY3RlZCBhbmQgZm9ybWF0dGVkCitpbiBhIG51bWJlciBvZiB3YXlzIGJ5IHRoZSAia2VybmVsLWRvYyIgc2NyaXB0LiAgSWYgeW91IGFyZSB3b3JraW5nIHdpdGhpbgorYSBzdWJzeXN0ZW0gd2hpY2ggaGFzIGtlcm5lbGRvYyBjb21tZW50cywgeW91IHNob3VsZCBtYWludGFpbiB0aGVtIGFuZCBhZGQKK3RoZW0sIGFzIGFwcHJvcHJpYXRlLCBmb3IgZXh0ZXJuYWxseS1hdmFpbGFibGUgZnVuY3Rpb25zLiAgRXZlbiBpbiBhcmVhcword2hpY2ggaGF2ZSBub3QgYmVlbiBzbyBkb2N1bWVudGVkLCB0aGVyZSBpcyBubyBoYXJtIGluIGFkZGluZyBrZXJuZWxkb2MKK2NvbW1lbnRzIGZvciB0aGUgZnV0dXJlOyBpbmRlZWQsIHRoaXMgY2FuIGJlIGEgdXNlZnVsIGFjdGl2aXR5IGZvcgorYmVnaW5uaW5nIGtlcm5lbCBkZXZlbG9wZXJzLiAgVGhlIGZvcm1hdCBvZiB0aGVzZSBjb21tZW50cywgYWxvbmcgd2l0aCBzb21lCitpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGtlcm5lbGRvYyB0ZW1wbGF0ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlCitEb2N1bWVudGF0aW9uL2tlcm5lbC1kb2MtbmFuby1IT1dUTy50eHQuCisKK0FueWJvZHkgd2hvIHJlYWRzIHRocm91Z2ggYSBzaWduaWZpY2FudCBhbW91bnQgb2YgZXhpc3Rpbmcga2VybmVsIGNvZGUgd2lsbAorbm90ZSB0aGF0LCBvZnRlbiwgY29tbWVudHMgYXJlIG1vc3Qgbm90YWJsZSBieSB0aGVpciBhYnNlbmNlLiAgT25jZSBhZ2FpbiwKK3RoZSBleHBlY3RhdGlvbnMgZm9yIG5ldyBjb2RlIGFyZSBoaWdoZXIgdGhhbiB0aGV5IHdlcmUgaW4gdGhlIHBhc3Q7CittZXJnaW5nIHVuY29tbWVudGVkIGNvZGUgd2lsbCBiZSBoYXJkZXIuICBUaGF0IHNhaWQsIHRoZXJlIGlzIGxpdHRsZSBkZXNpcmUKK2ZvciB2ZXJib3NlbHktY29tbWVudGVkIGNvZGUuICBUaGUgY29kZSBzaG91bGQsIGl0c2VsZiwgYmUgcmVhZGFibGUsIHdpdGgKK2NvbW1lbnRzIGV4cGxhaW5pbmcgdGhlIG1vcmUgc3VidGxlIGFzcGVjdHMuCisKK0NlcnRhaW4gdGhpbmdzIHNob3VsZCBhbHdheXMgYmUgY29tbWVudGVkLiAgVXNlcyBvZiBtZW1vcnkgYmFycmllcnMgc2hvdWxkCitiZSBhY2NvbXBhbmllZCBieSBhIGxpbmUgZXhwbGFpbmluZyB3aHkgdGhlIGJhcnJpZXIgaXMgbmVjZXNzYXJ5LiAgVGhlCitsb2NraW5nIHJ1bGVzIGZvciBkYXRhIHN0cnVjdHVyZXMgZ2VuZXJhbGx5IG5lZWQgdG8gYmUgZXhwbGFpbmVkIHNvbWV3aGVyZS4KK01ham9yIGRhdGEgc3RydWN0dXJlcyBuZWVkIGNvbXByZWhlbnNpdmUgZG9jdW1lbnRhdGlvbiBpbiBnZW5lcmFsLgorTm9uLW9idmlvdXMgZGVwZW5kZW5jaWVzIGJldHdlZW4gc2VwYXJhdGUgYml0cyBvZiBjb2RlIHNob3VsZCBiZSBwb2ludGVkCitvdXQuICBBbnl0aGluZyB3aGljaCBtaWdodCB0ZW1wdCBhIGNvZGUgamFuaXRvciB0byBtYWtlIGFuIGluY29ycmVjdAorImNsZWFudXAiIG5lZWRzIGEgY29tbWVudCBzYXlpbmcgd2h5IGl0IGlzIGRvbmUgdGhlIHdheSBpdCBpcy4gIEFuZCBzbyBvbi4KKworCis0LjQ6IElOVEVSTkFMIEFQSSBDSEFOR0VTCisKK1RoZSBiaW5hcnkgaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBrZXJuZWwgdG8gdXNlciBzcGFjZSBjYW5ub3QgYmUgYnJva2VuCitleGNlcHQgdW5kZXIgdGhlIG1vc3Qgc2V2ZXJlIGNpcmN1bXN0YW5jZXMuICBUaGUga2VybmVsJ3MgaW50ZXJuYWwKK3Byb2dyYW1taW5nIGludGVyZmFjZXMsIGluc3RlYWQsIGFyZSBoaWdobHkgZmx1aWQgYW5kIGNhbiBiZSBjaGFuZ2VkIHdoZW4KK3RoZSBuZWVkIGFyaXNlcy4gIElmIHlvdSBmaW5kIHlvdXJzZWxmIGhhdmluZyB0byB3b3JrIGFyb3VuZCBhIGtlcm5lbCBBUEksCitvciBzaW1wbHkgbm90IHVzaW5nIGEgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBiZWNhdXNlIGl0IGRvZXMgbm90IG1lZXQgeW91cgorbmVlZHMsIHRoYXQgbWF5IGJlIGEgc2lnbiB0aGF0IHRoZSBBUEkgbmVlZHMgdG8gY2hhbmdlLiAgQXMgYSBrZXJuZWwKK2RldmVsb3BlciwgeW91IGFyZSBlbXBvd2VyZWQgdG8gbWFrZSBzdWNoIGNoYW5nZXMuCisKK1RoZXJlIGFyZSwgb2YgY291cnNlLCBzb21lIGNhdGNoZXMuICBBUEkgY2hhbmdlcyBjYW4gYmUgbWFkZSwgYnV0IHRoZXkgbmVlZAordG8gYmUgd2VsbCBqdXN0aWZpZWQuICBTbyBhbnkgcGF0Y2ggbWFraW5nIGFuIGludGVybmFsIEFQSSBjaGFuZ2Ugc2hvdWxkIGJlCithY2NvbXBhbmllZCBieSBhIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIGNoYW5nZSBpcyBhbmQgd2h5IGl0IGlzCituZWNlc3NhcnkuICBUaGlzIGtpbmQgb2YgY2hhbmdlIHNob3VsZCBhbHNvIGJlIGJyb2tlbiBvdXQgaW50byBhIHNlcGFyYXRlCitwYXRjaCwgcmF0aGVyIHRoYW4gYnVyaWVkIHdpdGhpbiBhIGxhcmdlciBwYXRjaC4KKworVGhlIG90aGVyIGNhdGNoIGlzIHRoYXQgYSBkZXZlbG9wZXIgd2hvIGNoYW5nZXMgYW4gaW50ZXJuYWwgQVBJIGlzCitnZW5lcmFsbHkgY2hhcmdlZCB3aXRoIHRoZSB0YXNrIG9mIGZpeGluZyBhbnkgY29kZSB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlCit3aGljaCBpcyBicm9rZW4gYnkgdGhlIGNoYW5nZS4gIEZvciBhIHdpZGVseS11c2VkIGZ1bmN0aW9uLCB0aGlzIGR1dHkgY2FuCitsZWFkIHRvIGxpdGVyYWxseSBodW5kcmVkcyBvciB0aG91c2FuZHMgb2YgY2hhbmdlcyAtIG1hbnkgb2Ygd2hpY2ggYXJlCitsaWtlbHkgdG8gY29uZmxpY3Qgd2l0aCB3b3JrIGJlaW5nIGRvbmUgYnkgb3RoZXIgZGV2ZWxvcGVycy4gIE5lZWRsZXNzIHRvCitzYXksIHRoaXMgY2FuIGJlIGEgbGFyZ2Ugam9iLCBzbyBpdCBpcyBiZXN0IHRvIGJlIHN1cmUgdGhhdCB0aGUKK2p1c3RpZmljYXRpb24gaXMgc29saWQuCisKK1doZW4gbWFraW5nIGFuIGluY29tcGF0aWJsZSBBUEkgY2hhbmdlLCBvbmUgc2hvdWxkLCB3aGVuZXZlciBwb3NzaWJsZSwKK2Vuc3VyZSB0aGF0IGNvZGUgd2hpY2ggaGFzIG5vdCBiZWVuIHVwZGF0ZWQgaXMgY2F1Z2h0IGJ5IHRoZSBjb21waWxlci4gIAorVGhpcyB3aWxsIGhlbHAgeW91IHRvIGJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBmb3VuZCBhbGwgaW4tdHJlZSB1c2VzIG9mIHRoYXQKK2ludGVyZmFjZS4gIEl0IHdpbGwgYWxzbyBhbGVydCBkZXZlbG9wZXJzIG9mIG91dC1vZi10cmVlIGNvZGUgdGhhdCB0aGVyZSBpcworYSBjaGFuZ2UgdGhhdCB0aGV5IG5lZWQgdG8gcmVzcG9uZCB0by4gIFN1cHBvcnRpbmcgb3V0LW9mLXRyZWUgY29kZSBpcyBub3QKK3NvbWV0aGluZyB0aGF0IGtlcm5lbCBkZXZlbG9wZXJzIG5lZWQgdG8gYmUgd29ycmllZCBhYm91dCwgYnV0IHdlIGFsc28gZG8KK25vdCBoYXZlIHRvIG1ha2UgbGlmZSBoYXJkZXIgZm9yIG91dC1vZi10cmVlIGRldmVsb3BlcnMgdGhhbiBpdCBpdCBuZWVkcyB0bworYmUuIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzUuUG9zdGluZyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy81LlBvc3RpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ0ODEzMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy81LlBvc3RpbmcKQEAgLTAsMCArMSwyNzggQEAKKzU6IFBPU1RJTkcgUEFUQ0hFUworCitTb29uZXIgb3IgbGF0ZXIsIHRoZSB0aW1lIGNvbWVzIHdoZW4geW91ciB3b3JrIGlzIHJlYWR5IHRvIGJlIHByZXNlbnRlZCB0bwordGhlIGNvbW11bml0eSBmb3IgcmV2aWV3IGFuZCwgZXZlbnR1YWxseSwgaW5jbHVzaW9uIGludG8gdGhlIG1haW5saW5lCitrZXJuZWwuICBVbnN1cnByaXNpbmdseSwgdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBjb21tdW5pdHkgaGFzIGV2b2x2ZWQgYSBzZXQKK29mIGNvbnZlbnRpb25zIGFuZCBwcm9jZWR1cmVzIHdoaWNoIGFyZSB1c2VkIGluIHRoZSBwb3N0aW5nIG9mIHBhdGNoZXM7Citmb2xsb3dpbmcgdGhlbSB3aWxsIG1ha2UgbGlmZSBtdWNoIGVhc2llciBmb3IgZXZlcnlib2R5IGludm9sdmVkLiAgVGhpcworZG9jdW1lbnQgd2lsbCBhdHRlbXB0IHRvIGNvdmVyIHRoZXNlIGV4cGVjdGF0aW9ucyBpbiByZWFzb25hYmxlIGRldGFpbDsKK21vcmUgaW5mb3JtYXRpb24gY2FuIGFsc28gYmUgZm91bmQgaW4gdGhlIGZpbGVzIFN1Ym1pdHRpbmdQYXRjaGVzLAorU3VibWl0dGluZ0RyaXZlcnMsIGFuZCBTdWJtaXRDaGVja2xpc3QgaW4gdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uCitkaXJlY3RvcnkuCisKKworNS4xOiBXSEVOIFRPIFBPU1QKKworVGhlcmUgaXMgYSBjb25zdGFudCB0ZW1wdGF0aW9uIHRvIGF2b2lkIHBvc3RpbmcgcGF0Y2hlcyBiZWZvcmUgdGhleSBhcmUKK2NvbXBsZXRlbHkgInJlYWR5LiIgIEZvciBzaW1wbGUgcGF0Y2hlcywgdGhhdCBpcyBub3QgYSBwcm9ibGVtLiAgSWYgdGhlCit3b3JrIGJlaW5nIGRvbmUgaXMgY29tcGxleCwgdGhvdWdoLCB0aGVyZSBpcyBhIGxvdCB0byBiZSBnYWluZWQgYnkgZ2V0dGluZworZmVlZGJhY2sgZnJvbSB0aGUgY29tbXVuaXR5IGJlZm9yZSB0aGUgd29yayBpcyBjb21wbGV0ZS4gIFNvIHlvdSBzaG91bGQKK2NvbnNpZGVyIHBvc3RpbmcgaW4tcHJvZ3Jlc3Mgd29yaywgb3IgZXZlbiBtYWtpbmcgYSBnaXQgdHJlZSBhdmFpbGFibGUgc28KK3RoYXQgaW50ZXJlc3RlZCBkZXZlbG9wZXJzIGNhbiBjYXRjaCB1cCB3aXRoIHlvdXIgd29yayBhdCBhbnkgdGltZS4KKworV2hlbiBwb3N0aW5nIGNvZGUgd2hpY2ggaXMgbm90IHlldCBjb25zaWRlcmVkIHJlYWR5IGZvciBpbmNsdXNpb24sIGl0IGlzIGEKK2dvb2QgaWRlYSB0byBzYXkgc28gaW4gdGhlIHBvc3RpbmcgaXRzZWxmLiAgQWxzbyBtZW50aW9uIGFueSBtYWpvciB3b3JrCit3aGljaCByZW1haW5zIHRvIGJlIGRvbmUgYW5kIGFueSBrbm93biBwcm9ibGVtcy4gIEZld2VyIHBlb3BsZSB3aWxsIGxvb2sgYXQKK3BhdGNoZXMgd2hpY2ggYXJlIGtub3duIHRvIGJlIGhhbGYtYmFrZWQsIGJ1dCB0aG9zZSB3aG8gZG8gd2lsbCBjb21lIGluCit3aXRoIHRoZSBpZGVhIHRoYXQgdGhleSBjYW4gaGVscCB5b3UgZHJpdmUgdGhlIHdvcmsgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4KKworCis1LjI6IEJFRk9SRSBDUkVBVElORyBQQVRDSEVTCisKK1RoZXJlIGFyZSBhIG51bWJlciBvZiB0aGluZ3Mgd2hpY2ggc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHlvdSBjb25zaWRlcgorc2VuZGluZyBwYXRjaGVzIHRvIHRoZSBkZXZlbG9wbWVudCBjb21tdW5pdHkuICBUaGVzZSBpbmNsdWRlOgorCisgLSBUZXN0IHRoZSBjb2RlIHRvIHRoZSBleHRlbnQgdGhhdCB5b3UgY2FuLiAgTWFrZSB1c2Ugb2YgdGhlIGtlcm5lbCdzCisgICBkZWJ1Z2dpbmcgdG9vbHMsIGVuc3VyZSB0aGF0IHRoZSBrZXJuZWwgd2lsbCBidWlsZCB3aXRoIGFsbCByZWFzb25hYmxlCisgICBjb21iaW5hdGlvbnMgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zLCB1c2UgY3Jvc3MtY29tcGlsZXJzIHRvIGJ1aWxkIGZvcgorICAgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMsIGV0Yy4KKworIC0gTWFrZSBzdXJlIHlvdXIgY29kZSBpcyBjb21wbGlhbnQgd2l0aCB0aGUga2VybmVsIGNvZGluZyBzdHlsZQorICAgZ3VpZGVsaW5lcy4KKworIC0gRG9lcyB5b3VyIGNoYW5nZSBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucz8gIElmIHNvLCB5b3Ugc2hvdWxkIHJ1bgorICAgYmVuY2htYXJrcyBzaG93aW5nIHdoYXQgdGhlIGltcGFjdCAob3IgYmVuZWZpdCkgb2YgeW91ciBjaGFuZ2UgaXM7IGEKKyAgIHN1bW1hcnkgb2YgdGhlIHJlc3VsdHMgc2hvdWxkIGJlIGluY2x1ZGVkIHdpdGggdGhlIHBhdGNoLgorCisgLSBCZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHJpZ2h0IHRvIHBvc3QgdGhlIGNvZGUuICBJZiB0aGlzIHdvcmsgd2FzIGRvbmUKKyAgIGZvciBhbiBlbXBsb3llciwgdGhlIGVtcGxveWVyIGxpa2VseSBoYXMgYSByaWdodCB0byB0aGUgd29yayBhbmQgbXVzdCBiZQorICAgYWdyZWVhYmxlIHdpdGggaXRzIHJlbGVhc2UgdW5kZXIgdGhlIEdQTC4KKworQXMgYSBnZW5lcmFsIHJ1bGUsIHB1dHRpbmcgaW4gc29tZSBleHRyYSB0aG91Z2h0IGJlZm9yZSBwb3N0aW5nIGNvZGUgYWxtb3N0CithbHdheXMgcGF5cyBiYWNrIHRoZSBlZmZvcnQgaW4gc2hvcnQgb3JkZXIuCisKKworNS4zOiBQQVRDSCBQUkVQQVJBVElPTgorCitUaGUgcHJlcGFyYXRpb24gb2YgcGF0Y2hlcyBmb3IgcG9zdGluZyBjYW4gYmUgYSBzdXJwcmlzaW5nIGFtb3VudCBvZiB3b3JrLAorYnV0LCBvbmNlIGFnYWluLCBhdHRlbXB0aW5nIHRvIHNhdmUgdGltZSBoZXJlIGlzIG5vdCBnZW5lcmFsbHkgYWR2aXNhYmxlCitldmVuIGluIHRoZSBzaG9ydCB0ZXJtLgorCitQYXRjaGVzIG11c3QgYmUgcHJlcGFyZWQgYWdhaW5zdCBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIGtlcm5lbC4gIEFzIGEKK2dlbmVyYWwgcnVsZSwgYSBwYXRjaCBzaG91bGQgYmUgYmFzZWQgb24gdGhlIGN1cnJlbnQgbWFpbmxpbmUgYXMgZm91bmQgaW4KK0xpbnVzJ3MgZ2l0IHRyZWUuICBJdCBtYXkgYmVjb21lIG5lY2Vzc2FyeSB0byBtYWtlIHZlcnNpb25zIGFnYWluc3QgLW1tLAorbGludXgtbmV4dCwgb3IgYSBzdWJzeXN0ZW0gdHJlZSwgdGhvdWdoLCB0byBmYWNpbGl0YXRlIHdpZGVyIHRlc3RpbmcgYW5kCityZXZpZXcuICBEZXBlbmRpbmcgb24gdGhlIGFyZWEgb2YgeW91ciBwYXRjaCBhbmQgd2hhdCBpcyBnb2luZyBvbgorZWxzZXdoZXJlLCBiYXNpbmcgYSBwYXRjaCBhZ2FpbnN0IHRoZXNlIG90aGVyIHRyZWVzIGNhbiByZXF1aXJlIGEKK3NpZ25pZmljYW50IGFtb3VudCBvZiB3b3JrIHJlc29sdmluZyBjb25mbGljdHMgYW5kIGRlYWxpbmcgd2l0aCBBUEkKK2NoYW5nZXMuCisKK09ubHkgdGhlIG1vc3Qgc2ltcGxlIGNoYW5nZXMgc2hvdWxkIGJlIGZvcm1hdHRlZCBhcyBhIHNpbmdsZSBwYXRjaDsKK2V2ZXJ5dGhpbmcgZWxzZSBzaG91bGQgYmUgbWFkZSBhcyBhIGxvZ2ljYWwgc2VyaWVzIG9mIGNoYW5nZXMuICBTcGxpdHRpbmcKK3VwIHBhdGNoZXMgaXMgYSBiaXQgb2YgYW4gYXJ0OyBzb21lIGRldmVsb3BlcnMgc3BlbmQgYSBsb25nIHRpbWUgZmlndXJpbmcKK291dCBob3cgdG8gZG8gaXQgaW4gdGhlIHdheSB0aGF0IHRoZSBjb21tdW5pdHkgZXhwZWN0cy4gIFRoZXJlIGFyZSBhIGZldworcnVsZXMgb2YgdGh1bWIsIGhvd2V2ZXIsIHdoaWNoIGNhbiBoZWxwIGNvbnNpZGVyYWJseToKKworIC0gVGhlIHBhdGNoIHNlcmllcyB5b3UgcG9zdCB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgbm90IGJlIHRoZSBzZXJpZXMgb2YKKyAgIGNoYW5nZXMgZm91bmQgaW4geW91ciB3b3JraW5nIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtLiAgSW5zdGVhZCwgdGhlCisgICBjaGFuZ2VzIHlvdSBoYXZlIG1hZGUgbmVlZCB0byBiZSBjb25zaWRlcmVkIGluIHRoZWlyIGZpbmFsIGZvcm0sIHRoZW4KKyAgIHNwbGl0IGFwYXJ0IGluIHdheXMgd2hpY2ggbWFrZSBzZW5zZS4gIFRoZSBkZXZlbG9wZXJzIGFyZSBpbnRlcmVzdGVkIGluCisgICBkaXNjcmV0ZSwgc2VsZi1jb250YWluZWQgY2hhbmdlcywgbm90IHRoZSBwYXRoIHlvdSB0b29rIHRvIGdldCB0byB0aG9zZQorICAgY2hhbmdlcy4KKworIC0gRWFjaCBsb2dpY2FsbHkgaW5kZXBlbmRlbnQgY2hhbmdlIHNob3VsZCBiZSBmb3JtYXR0ZWQgYXMgYSBzZXBhcmF0ZQorICAgcGF0Y2guICBUaGVzZSBjaGFuZ2VzIGNhbiBiZSBzbWFsbCAoImFkZCBhIGZpZWxkIHRvIHRoaXMgc3RydWN0dXJlIikgb3IKKyAgIGxhcmdlIChhZGRpbmcgYSBzaWduaWZpY2FudCBuZXcgZHJpdmVyLCBmb3IgZXhhbXBsZSksIGJ1dCB0aGV5IHNob3VsZCBiZQorICAgY29uY2VwdHVhbGx5IHNtYWxsIGFuZCBhbWVuYWJsZSB0byBhIG9uZS1saW5lIGRlc2NyaXB0aW9uLiAgRWFjaCBwYXRjaAorICAgc2hvdWxkIG1ha2UgYSBzcGVjaWZpYyBjaGFuZ2Ugd2hpY2ggY2FuIGJlIHJldmlld2VkIG9uIGl0cyBvd24gYW5kCisgICB2ZXJpZmllZCB0byBkbyB3aGF0IGl0IHNheXMgaXQgZG9lcy4KKworIC0gQXMgYSB3YXkgb2YgcmVzdGF0aW5nIHRoZSBndWlkZWxpbmUgYWJvdmU6IGRvIG5vdCBtaXggZGlmZmVyZW50IHR5cGVzIG9mCisgICBjaGFuZ2VzIGluIHRoZSBzYW1lIHBhdGNoLiAgSWYgYSBzaW5nbGUgcGF0Y2ggZml4ZXMgYSBjcml0aWNhbCBzZWN1cml0eQorICAgYnVnLCByZWFycmFuZ2VzIGEgZmV3IHN0cnVjdHVyZXMsIGFuZCByZWZvcm1hdHMgdGhlIGNvZGUsIHRoZXJlIGlzIGEKKyAgIGdvb2QgY2hhbmNlIHRoYXQgaXQgd2lsbCBiZSBwYXNzZWQgb3ZlciBhbmQgdGhlIGltcG9ydGFudCBmaXggd2lsbCBiZQorICAgbG9zdC4KKworIC0gRWFjaCBwYXRjaCBzaG91bGQgeWllbGQgYSBrZXJuZWwgd2hpY2ggYnVpbGRzIGFuZCBydW5zIHByb3Blcmx5OyBpZiB5b3VyCisgICBwYXRjaCBzZXJpZXMgaXMgaW50ZXJydXB0ZWQgaW4gdGhlIG1pZGRsZSwgdGhlIHJlc3VsdCBzaG91bGQgc3RpbGwgYmUgYQorICAgd29ya2luZyBrZXJuZWwuICBQYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIGEgcGF0Y2ggc2VyaWVzIGlzIGEgY29tbW9uCisgICBzY2VuYXJpbyB3aGVuIHRoZSAiZ2l0IGJpc2VjdCIgdG9vbCBpcyB1c2VkIHRvIGZpbmQgcmVncmVzc2lvbnM7IGlmIHRoZQorICAgcmVzdWx0IGlzIGEgYnJva2VuIGtlcm5lbCwgeW91IHdpbGwgbWFrZSBsaWZlIGhhcmRlciBmb3IgZGV2ZWxvcGVycyBhbmQKKyAgIHVzZXJzIHdobyBhcmUgZW5nYWdpbmcgaW4gdGhlIG5vYmxlIHdvcmsgb2YgdHJhY2tpbmcgZG93biBwcm9ibGVtcy4KKworIC0gRG8gbm90IG92ZXJkbyBpdCwgdGhvdWdoLiAgT25lIGRldmVsb3BlciByZWNlbnRseSBwb3N0ZWQgYSBzZXQgb2YgZWRpdHMKKyAgIHRvIGEgc2luZ2xlIGZpbGUgYXMgNTAwIHNlcGFyYXRlIHBhdGNoZXMgLSBhbiBhY3Qgd2hpY2ggZGlkIG5vdCBtYWtlIGhpbQorICAgdGhlIG1vc3QgcG9wdWxhciBwZXJzb24gb24gdGhlIGtlcm5lbCBtYWlsaW5nIGxpc3QuICBBIHNpbmdsZSBwYXRjaCBjYW4KKyAgIGJlIHJlYXNvbmFibHkgbGFyZ2UgYXMgbG9uZyBhcyBpdCBzdGlsbCBjb250YWlucyBhIHNpbmdsZSAqbG9naWNhbCoKKyAgIGNoYW5nZS4gCisKKyAtIEl0IGNhbiBiZSB0ZW1wdGluZyB0byBhZGQgYSB3aG9sZSBuZXcgaW5mcmFzdHJ1Y3R1cmUgd2l0aCBhIHNlcmllcyBvZgorICAgcGF0Y2hlcywgYnV0IHRvIGxlYXZlIHRoYXQgaW5mcmFzdHJ1Y3R1cmUgdW51c2VkIHVudGlsIHRoZSBmaW5hbCBwYXRjaAorICAgaW4gdGhlIHNlcmllcyBlbmFibGVzIHRoZSB3aG9sZSB0aGluZy4gIFRoaXMgdGVtcHRhdGlvbiBzaG91bGQgYmUKKyAgIGF2b2lkZWQgaWYgcG9zc2libGU7IGlmIHRoYXQgc2VyaWVzIGFkZHMgcmVncmVzc2lvbnMsIGJpc2VjdGlvbiB3aWxsCisgICBmaW5nZXIgdGhlIGxhc3QgcGF0Y2ggYXMgdGhlIG9uZSB3aGljaCBjYXVzZWQgdGhlIHByb2JsZW0sIGV2ZW4gdGhvdWdoCisgICB0aGUgcmVhbCBidWcgaXMgZWxzZXdoZXJlLiAgV2hlbmV2ZXIgcG9zc2libGUsIGEgcGF0Y2ggd2hpY2ggYWRkcyBuZXcKKyAgIGNvZGUgc2hvdWxkIG1ha2UgdGhhdCBjb2RlIGFjdGl2ZSBpbW1lZGlhdGVseS4KKworV29ya2luZyB0byBjcmVhdGUgdGhlIHBlcmZlY3QgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhIGZydXN0cmF0aW5nIHByb2Nlc3MKK3doaWNoIHRha2VzIHF1aXRlIGEgYml0IG9mIHRpbWUgYW5kIHRob3VnaHQgYWZ0ZXIgdGhlICJyZWFsIHdvcmsiIGhhcyBiZWVuCitkb25lLiAgV2hlbiBkb25lIHByb3Blcmx5LCB0aG91Z2gsIGl0IGlzIHRpbWUgd2VsbCBzcGVudC4KKworCis1LjQ6IFBBVENIIEZPUk1BVFRJTkcKKworU28gbm93IHlvdSBoYXZlIGEgcGVyZmVjdCBzZXJpZXMgb2YgcGF0Y2hlcyBmb3IgcG9zdGluZywgYnV0IHRoZSB3b3JrIGlzCitub3QgZG9uZSBxdWl0ZSB5ZXQuICBFYWNoIHBhdGNoIG5lZWRzIHRvIGJlIGZvcm1hdHRlZCBpbnRvIGEgbWVzc2FnZSB3aGljaAorcXVpY2tseSBhbmQgY2xlYXJseSBjb21tdW5pY2F0ZXMgaXRzIHB1cnBvc2UgdG8gdGhlIHJlc3Qgb2YgdGhlIHdvcmxkLiAgVG8KK3RoYXQgZW5kLCBlYWNoIHBhdGNoIHdpbGwgYmUgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZzoKKworIC0gQW4gb3B0aW9uYWwgIkZyb20iIGxpbmUgbmFtaW5nIHRoZSBhdXRob3Igb2YgdGhlIHBhdGNoLiAgVGhpcyBsaW5lIGlzCisgICBvbmx5IG5lY2Vzc2FyeSBpZiB5b3UgYXJlIHBhc3Npbmcgb24gc29tZWJvZHkgZWxzZSdzIHBhdGNoIHZpYSBlbWFpbCwKKyAgIGJ1dCBpdCBuZXZlciBodXJ0cyB0byBhZGQgaXQgd2hlbiBpbiBkb3VidC4KKworIC0gQSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBwYXRjaCBkb2VzLiAgVGhpcyBtZXNzYWdlIHNob3VsZCBiZQorICAgZW5vdWdoIGZvciBhIHJlYWRlciB3aG8gc2VlcyBpdCB3aXRoIG5vIG90aGVyIGNvbnRleHQgdG8gZmlndXJlIG91dCB0aGUKKyAgIHNjb3BlIG9mIHRoZSBwYXRjaDsgaXQgaXMgdGhlIGxpbmUgdGhhdCB3aWxsIHNob3cgdXAgaW4gdGhlICJzaG9ydCBmb3JtIgorICAgY2hhbmdlbG9ncy4gIFRoaXMgbWVzc2FnZSBpcyB1c3VhbGx5IGZvcm1hdHRlZCB3aXRoIHRoZSByZWxldmFudAorICAgc3Vic3lzdGVtIG5hbWUgZmlyc3QsIGZvbGxvd2VkIGJ5IHRoZSBwdXJwb3NlIG9mIHRoZSBwYXRjaC4gIEZvcgorICAgZXhhbXBsZToKKworCWdwaW86IGZpeCBidWlsZCBvbiBDT05GSUdfR1BJT19TWVNGUz1uCisKKyAtIEEgYmxhbmsgbGluZSBmb2xsb3dlZCBieSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgIHBhdGNoLiAgVGhpcyBkZXNjcmlwdGlvbiBjYW4gYmUgYXMgbG9uZyBhcyBpcyByZXF1aXJlZDsgaXQgc2hvdWxkIHNheQorICAgd2hhdCB0aGUgcGF0Y2ggZG9lcyBhbmQgd2h5IGl0IHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBrZXJuZWwuCisKKyAtIE9uZSBvciBtb3JlIHRhZyBsaW5lcywgd2l0aCwgYXQgYSBtaW5pbXVtLCBvbmUgU2lnbmVkLW9mZi1ieTogbGluZSBmcm9tCisgICB0aGUgYXV0aG9yIG9mIHRoZSBwYXRjaC4gIFRhZ3Mgd2lsbCBiZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgYmVsb3cuCisKK1RoZSBhYm92ZSB0aHJlZSBpdGVtcyBzaG91bGQsIG5vcm1hbGx5LCBiZSB0aGUgdGV4dCB1c2VkIHdoZW4gY29tbWl0dGluZwordGhlIGNoYW5nZSB0byBhIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtLiAgVGhleSBhcmUgZm9sbG93ZWQgYnk6CisKKyAtIFRoZSBwYXRjaCBpdHNlbGYsIGluIHRoZSB1bmlmaWVkICgiLXUiKSBwYXRjaCBmb3JtYXQuICBVc2luZyB0aGUgIi1wIgorICAgb3B0aW9uIHRvIGRpZmYgd2lsbCBhc3NvY2lhdGUgZnVuY3Rpb24gbmFtZXMgd2l0aCBjaGFuZ2VzLCBtYWtpbmcgdGhlCisgICByZXN1bHRpbmcgcGF0Y2ggZWFzaWVyIGZvciBvdGhlcnMgdG8gcmVhZC4KKworWW91IHNob3VsZCBhdm9pZCBpbmNsdWRpbmcgY2hhbmdlcyB0byBpcnJlbGV2YW50IGZpbGVzICh0aG9zZSBnZW5lcmF0ZWQgYnkKK3RoZSBidWlsZCBwcm9jZXNzLCBmb3IgZXhhbXBsZSwgb3IgZWRpdG9yIGJhY2t1cCBmaWxlcykgaW4gdGhlIHBhdGNoLiAgVGhlCitmaWxlICJkb250ZGlmZiIgaW4gdGhlIERvY3VtZW50YXRpb24gZGlyZWN0b3J5IGNhbiBoZWxwIGluIHRoaXMgcmVnYXJkOworcGFzcyBpdCB0byBkaWZmIHdpdGggdGhlICItWCIgb3B0aW9uLgorCitUaGUgdGFncyBtZW50aW9uZWQgYWJvdmUgYXJlIHVzZWQgdG8gZGVzY3JpYmUgaG93IHZhcmlvdXMgZGV2ZWxvcGVycyBoYXZlCitiZWVuIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBwYXRjaC4gIFRoZXkgYXJlIGRlc2NyaWJlZCBpbgorZGV0YWlsIGluIHRoZSBTdWJtaXR0aW5nUGF0Y2hlcyBkb2N1bWVudDsgd2hhdCBmb2xsb3dzIGhlcmUgaXMgYSBicmllZgorc3VtbWFyeS4gIEVhY2ggb2YgdGhlc2UgbGluZXMgaGFzIHRoZSBmb3JtYXQ6CisKKwl0YWc6IEZ1bGwgTmFtZSA8ZW1haWwgYWRkcmVzcz4gIG9wdGlvbmFsLW90aGVyLXN0dWZmCisKK1RoZSB0YWdzIGluIGNvbW1vbiB1c2UgYXJlOgorCisgLSBTaWduZWQtb2ZmLWJ5OiB0aGlzIGlzIGEgZGV2ZWxvcGVyJ3MgY2VydGlmaWNhdGlvbiB0aGF0IGhlIG9yIHNoZSBoYXMKKyAgIHRoZSByaWdodCB0byBzdWJtaXQgdGhlIHBhdGNoIGZvciBpbmNsdXNpb24gaW50byB0aGUga2VybmVsLiAgSXQgaXMgYW4KKyAgIGFncmVlbWVudCB0byB0aGUgRGV2ZWxvcGVyJ3MgQ2VydGlmaWNhdGUgb2YgT3JpZ2luLCB0aGUgZnVsbCB0ZXh0IG9mCisgICB3aGljaCBjYW4gYmUgZm91bmQgaW4gRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcy4gIENvZGUgd2l0aG91dCBhCisgICBwcm9wZXIgc2lnbm9mZiBjYW5ub3QgYmUgbWVyZ2VkIGludG8gdGhlIG1haW5saW5lLgorCisgLSBBY2tlZC1ieTogaW5kaWNhdGVzIGFuIGFncmVlbWVudCBieSBhbm90aGVyIGRldmVsb3BlciAob2Z0ZW4gYQorICAgbWFpbnRhaW5lciBvZiB0aGUgcmVsZXZhbnQgY29kZSkgdGhhdCB0aGUgcGF0Y2ggaXMgYXBwcm9wcmlhdGUgZm9yCisgICBpbmNsdXNpb24gaW50byB0aGUga2VybmVsLgorCisgLSBUZXN0ZWQtYnk6IHN0YXRlcyB0aGF0IHRoZSBuYW1lZCBwZXJzb24gaGFzIHRlc3RlZCB0aGUgcGF0Y2ggYW5kIGZvdW5kCisgICBpdCB0byB3b3JrLgorCisgLSBSZXZpZXdlZC1ieTogdGhlIG5hbWVkIGRldmVsb3BlciBoYXMgcmV2aWV3ZWQgdGhlIHBhdGNoIGZvciBjb3JyZWN0bmVzczsKKyAgIHNlZSB0aGUgcmV2aWV3ZXIncyBzdGF0ZW1lbnQgaW4gRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBmb3IgbW9yZQorICAgZGV0YWlsLgorCisgLSBSZXBvcnRlZC1ieTogbmFtZXMgYSB1c2VyIHdobyByZXBvcnRlZCBhIHByb2JsZW0gd2hpY2ggaXMgZml4ZWQgYnkgdGhpcworICAgcGF0Y2g7IHRoaXMgdGFnIGlzIHVzZWQgdG8gZ2l2ZSBjcmVkaXQgdG8gdGhlIChvZnRlbiB1bmRlcmFwcHJlY2lhdGVkKQorICAgcGVvcGxlIHdobyB0ZXN0IG91ciBjb2RlIGFuZCBsZXQgdXMga25vdyB3aGVuIHRoaW5ncyBkbyBub3Qgd29yaworICAgY29ycmVjdGx5LgorCisgLSBDYzogdGhlIG5hbWVkIHBlcnNvbiByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIHBhdGNoIGFuZCBoYWQgdGhlCisgICBvcHBvcnR1bml0eSB0byBjb21tZW50IG9uIGl0LgorCitCZSBjYXJlZnVsIGluIHRoZSBhZGRpdGlvbiBvZiB0YWdzIHRvIHlvdXIgcGF0Y2hlczogb25seSBDYzogaXMgYXBwcm9wcmlhdGUKK2ZvciBhZGRpdGlvbiB3aXRob3V0IHRoZSBleHBsaWNpdCBwZXJtaXNzaW9uIG9mIHRoZSBwZXJzb24gbmFtZWQuCisKKworNS41OiBTRU5ESU5HIFRIRSBQQVRDSAorCitCZWZvcmUgeW91IG1haWwgeW91ciBwYXRjaGVzLCB0aGVyZSBhcmUgYSBjb3VwbGUgb2Ygb3RoZXIgdGhpbmdzIHlvdSBzaG91bGQKK3Rha2UgY2FyZSBvZjoKKworIC0gQXJlIHlvdSBzdXJlIHRoYXQgeW91ciBtYWlsZXIgd2lsbCBub3QgY29ycnVwdCB0aGUgcGF0Y2hlcz8gIFBhdGNoZXMKKyAgIHdoaWNoIGhhdmUgaGFkIGdyYXR1aXRvdXMgd2hpdGUtc3BhY2UgY2hhbmdlcyBvciBsaW5lIHdyYXBwaW5nIHBlcmZvcm1lZAorICAgYnkgdGhlIG1haWwgY2xpZW50IHdpbGwgbm90IGFwcGx5IGF0IHRoZSBvdGhlciBlbmQsIGFuZCBvZnRlbiB3aWxsIG5vdAorICAgYmUgZXhhbWluZWQgaW4gYW55IGRldGFpbC4gIElmIHRoZXJlIGlzIGFueSBkb3VidCBhdCBhbGwsIG1haWwgdGhlIHBhdGNoCisgICB0byB5b3Vyc2VsZiBhbmQgY29udmluY2UgeW91cnNlbGYgdGhhdCBpdCBzaG93cyB1cCBpbnRhY3QuICAKKworICAgRG9jdW1lbnRhdGlvbi9lbWFpbC1jbGllbnRzLnR4dCBoYXMgc29tZSBoZWxwZnVsIGhpbnRzIG9uIG1ha2luZworICAgc3BlY2lmaWMgbWFpbCBjbGllbnRzIHdvcmsgZm9yIHNlbmRpbmcgcGF0Y2hlcy4KKworIC0gQXJlIHlvdSBzdXJlIHlvdXIgcGF0Y2ggaXMgZnJlZSBvZiBzaWxseSBtaXN0YWtlcz8gIFlvdSBzaG91bGQgYWx3YXlzCisgICBydW4gcGF0Y2hlcyB0aHJvdWdoIHNjcmlwdHMvY2hlY2twYXRjaC5wbCBhbmQgYWRkcmVzcyB0aGUgY29tcGxhaW50cyBpdAorICAgY29tZXMgdXAgd2l0aC4gIFBsZWFzZSBiZWFyIGluIG1pbmQgdGhhdCBjaGVja3BhdGNoLnBsLCB3aGlsZSBiZWluZyB0aGUKKyAgIGVtYm9kaW1lbnQgb2YgYSBmYWlyIGFtb3VudCBvZiB0aG91Z2h0IGFib3V0IHdoYXQga2VybmVsIHBhdGNoZXMgc2hvdWxkCisgICBsb29rIGxpa2UsIGlzIG5vdCBzbWFydGVyIHRoYW4geW91LiAgSWYgZml4aW5nIGEgY2hlY2twYXRjaC5wbCBjb21wbGFpbnQKKyAgIHdvdWxkIG1ha2UgdGhlIGNvZGUgd29yc2UsIGRvbid0IGRvIGl0LgorCitQYXRjaGVzIHNob3VsZCBhbHdheXMgYmUgc2VudCBhcyBwbGFpbiB0ZXh0LiAgUGxlYXNlIGRvIG5vdCBzZW5kIHRoZW0gYXMKK2F0dGFjaG1lbnRzOyB0aGF0IG1ha2VzIGl0IG11Y2ggaGFyZGVyIGZvciByZXZpZXdlcnMgdG8gcXVvdGUgc2VjdGlvbnMgb2YKK3RoZSBwYXRjaCBpbiB0aGVpciByZXBsaWVzLiAgSW5zdGVhZCwganVzdCBwdXQgdGhlIHBhdGNoIGRpcmVjdGx5IGludG8geW91cgorbWVzc2FnZS4KKworV2hlbiBtYWlsaW5nIHBhdGNoZXMsIGl0IGlzIGltcG9ydGFudCB0byBzZW5kIGNvcGllcyB0byBhbnlib2R5IHdobyBtaWdodAorYmUgaW50ZXJlc3RlZCBpbiBpdC4gIFVubGlrZSBzb21lIG90aGVyIHByb2plY3RzLCB0aGUga2VybmVsIGVuY291cmFnZXMKK3Blb3BsZSB0byBlcnIgb24gdGhlIHNpZGUgb2Ygc2VuZGluZyB0b28gbWFueSBjb3BpZXM7IGRvbid0IGFzc3VtZSB0aGF0IHRoZQorcmVsZXZhbnQgcGVvcGxlIHdpbGwgc2VlIHlvdXIgcG9zdGluZyBvbiB0aGUgbWFpbGluZyBsaXN0cy4gIEluIHBhcnRpY3VsYXIsCitjb3BpZXMgc2hvdWxkIGdvIHRvOgorCisgLSBUaGUgbWFpbnRhaW5lcihzKSBvZiB0aGUgYWZmZWN0ZWQgc3Vic3lzdGVtKHMpLiAgQXMgZGVzY3JpYmVkIGVhcmxpZXIsCisgICB0aGUgTUFJTlRBSU5FUlMgZmlsZSBpcyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayBmb3IgdGhlc2UgcGVvcGxlLgorCisgLSBPdGhlciBkZXZlbG9wZXJzIHdobyBoYXZlIGJlZW4gd29ya2luZyBpbiB0aGUgc2FtZSBhcmVhIC0gZXNwZWNpYWxseQorICAgdGhvc2Ugd2hvIG1pZ2h0IGJlIHdvcmtpbmcgdGhlcmUgbm93LiAgVXNpbmcgZ2l0IHRvIHNlZSB3aG8gZWxzZSBoYXMKKyAgIG1vZGlmaWVkIHRoZSBmaWxlcyB5b3UgYXJlIHdvcmtpbmcgb24gY2FuIGJlIGhlbHBmdWwuCisKKyAtIElmIHlvdSBhcmUgcmVzcG9uZGluZyB0byBhIGJ1ZyByZXBvcnQgb3IgYSBmZWF0dXJlIHJlcXVlc3QsIGNvcHkgdGhlCisgICBvcmlnaW5hbCBwb3N0ZXIgYXMgd2VsbC4KKworIC0gU2VuZCBhIGNvcHkgdG8gdGhlIHJlbGV2YW50IG1haWxpbmcgbGlzdCwgb3IsIGlmIG5vdGhpbmcgZWxzZSBhcHBsaWVzLAorICAgdGhlIGxpbnV4LWtlcm5lbCBsaXN0LgorCisgLSBJZiB5b3UgYXJlIGZpeGluZyBhIGJ1ZywgdGhpbmsgYWJvdXQgd2hldGhlciB0aGUgZml4IHNob3VsZCBnbyBpbnRvIHRoZQorICAgbmV4dCBzdGFibGUgdXBkYXRlLiAgSWYgc28sIHN0YWJsZUBrZXJuZWwub3JnIHNob3VsZCBnZXQgYSBjb3B5IG9mIHRoZQorICAgcGF0Y2guICBBbHNvIGFkZCBhICJDYzogc3RhYmxlQGtlcm5lbC5vcmciIHRvIHRoZSB0YWdzIHdpdGhpbiB0aGUgcGF0Y2gKKyAgIGl0c2VsZjsgdGhhdCB3aWxsIGNhdXNlIHRoZSBzdGFibGUgdGVhbSB0byBnZXQgYSBub3RpZmljYXRpb24gd2hlbiB5b3VyCisgICBmaXggZ29lcyBpbnRvIHRoZSBtYWlubGluZS4KKworV2hlbiBzZWxlY3RpbmcgcmVjaXBpZW50cyBmb3IgYSBwYXRjaCwgaXQgaXMgZ29vZCB0byBoYXZlIGFuIGlkZWEgb2Ygd2hvCit5b3UgdGhpbmsgd2lsbCBldmVudHVhbGx5IGFjY2VwdCB0aGUgcGF0Y2ggYW5kIGdldCBpdCBtZXJnZWQuICBXaGlsZSBpdAoraXMgcG9zc2libGUgdG8gc2VuZCBwYXRjaGVzIGRpcmVjdGx5IHRvIExpbnVzIFRvcnZhbGRzIGFuZCBoYXZlIGhpbSBtZXJnZQordGhlbSwgdGhpbmdzIGFyZSBub3Qgbm9ybWFsbHkgZG9uZSB0aGF0IHdheS4gIExpbnVzIGlzIGJ1c3ksIGFuZCB0aGVyZSBhcmUKK3N1YnN5c3RlbSBtYWludGFpbmVycyB3aG8gd2F0Y2ggb3ZlciBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsLiAgVXN1YWxseQoreW91IHdpbGwgYmUgd2FudGluZyB0aGF0IG1haW50YWluZXIgdG8gbWVyZ2UgeW91ciBwYXRjaGVzLiAgSWYgdGhlcmUgaXMgbm8KK29idmlvdXMgbWFpbnRhaW5lciwgQW5kcmV3IE1vcnRvbiBpcyBvZnRlbiB0aGUgcGF0Y2ggdGFyZ2V0IG9mIGxhc3QgcmVzb3J0LgorCitQYXRjaGVzIG5lZWQgZ29vZCBzdWJqZWN0IGxpbmVzLiAgVGhlIGNhbm9uaWNhbCBmb3JtYXQgZm9yIGEgcGF0Y2ggbGluZSBpcworc29tZXRoaW5nIGxpa2U6CisKKwlbUEFUQ0ggbm4vbW1dIHN1YnN5czogb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHBhdGNoCisKK3doZXJlICJubiIgaXMgdGhlIG9yZGluYWwgbnVtYmVyIG9mIHRoZSBwYXRjaCwgIm1tIiBpcyB0aGUgdG90YWwgbnVtYmVyIG9mCitwYXRjaGVzIGluIHRoZSBzZXJpZXMsIGFuZCAic3Vic3lzIiBpcyB0aGUgbmFtZSBvZiB0aGUgYWZmZWN0ZWQgc3Vic3lzdGVtLgorQ2xlYXJseSwgbm4vbW0gY2FuIGJlIG9taXR0ZWQgZm9yIGEgc2luZ2xlLCBzdGFuZGFsb25lIHBhdGNoLiAgCisKK0lmIHlvdSBoYXZlIGEgc2lnbmlmaWNhbnQgc2VyaWVzIG9mIHBhdGNoZXMsIGl0IGlzIGN1c3RvbWFyeSB0byBzZW5kIGFuCitpbnRyb2R1Y3RvcnkgZGVzY3JpcHRpb24gYXMgcGFydCB6ZXJvLiAgVGhpcyBjb252ZW50aW9uIGlzIG5vdCB1bml2ZXJzYWxseQorZm9sbG93ZWQgdGhvdWdoOyBpZiB5b3UgdXNlIGl0LCByZW1lbWJlciB0aGF0IGluZm9ybWF0aW9uIGluIHRoZQoraW50cm9kdWN0aW9uIGRvZXMgbm90IG1ha2UgaXQgaW50byB0aGUga2VybmVsIGNoYW5nZWxvZ3MuICBTbyBwbGVhc2UgZW5zdXJlCit0aGF0IHRoZSBwYXRjaGVzLCB0aGVtc2VsdmVzLCBoYXZlIGNvbXBsZXRlIGNoYW5nZWxvZyBpbmZvcm1hdGlvbi4KKworSW4gZ2VuZXJhbCwgdGhlIHNlY29uZCBhbmQgZm9sbG93aW5nIHBhcnRzIG9mIGEgbXVsdGktcGFydCBwYXRjaCBzaG91bGQgYmUKK3NlbnQgYXMgYSByZXBseSB0byB0aGUgZmlyc3QgcGFydCBzbyB0aGF0IHRoZXkgYWxsIHRocmVhZCB0b2dldGhlciBhdCB0aGUKK3JlY2VpdmluZyBlbmQuICBUb29scyBsaWtlIGdpdCBhbmQgcXVpbHQgaGF2ZSBjb21tYW5kcyB0byBtYWlsIG91dCBhIHNldCBvZgorcGF0Y2hlcyB3aXRoIHRoZSBwcm9wZXIgdGhyZWFkaW5nLiAgSWYgeW91IGhhdmUgYSBsb25nIHNlcmllcywgdGhvdWdoLCBhbmQKK2FyZSB1c2luZyBnaXQsIHBsZWFzZSBwcm92aWRlIHRoZSAtLW5vLWNoYWluLXJlcGx5LXRvIG9wdGlvbiB0byBhdm9pZAorY3JlYXRpbmcgZXhjZXB0aW9uYWxseSBkZWVwIG5lc3RpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvNi5Gb2xsb3d0aHJvdWdoIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzYuRm9sbG93dGhyb3VnaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGZiYTNkOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy82LkZvbGxvd3Rocm91Z2gKQEAgLTAsMCArMSwyMDIgQEAKKzY6IEZPTExPV1RIUk9VR0gKKworQXQgdGhpcyBwb2ludCwgeW91IGhhdmUgZm9sbG93ZWQgdGhlIGd1aWRlbGluZXMgZ2l2ZW4gc28gZmFyIGFuZCwgd2l0aCB0aGUKK2FkZGl0aW9uIG9mIHlvdXIgb3duIGVuZ2luZWVyaW5nIHNraWxscywgaGF2ZSBwb3N0ZWQgYSBwZXJmZWN0IHNlcmllcyBvZgorcGF0Y2hlcy4gIE9uZSBvZiB0aGUgYmlnZ2VzdCBtaXN0YWtlcyB0aGF0IGV2ZW4gZXhwZXJpZW5jZWQga2VybmVsCitkZXZlbG9wZXJzIGNhbiBtYWtlIGlzIHRvIGNvbmNsdWRlIHRoYXQgdGhlaXIgd29yayBpcyBub3cgZG9uZS4gIEluIHRydXRoLAorcG9zdGluZyBwYXRjaGVzIGluZGljYXRlcyBhIHRyYW5zaXRpb24gaW50byB0aGUgbmV4dCBzdGFnZSBvZiB0aGUgcHJvY2VzcywKK3dpdGgsIHBvc3NpYmx5LCBxdWl0ZSBhIGJpdCBvZiB3b3JrIHlldCB0byBiZSBkb25lLgorCitJdCBpcyBhIHJhcmUgcGF0Y2ggd2hpY2ggaXMgc28gZ29vZCBhdCBpdHMgZmlyc3QgcG9zdGluZyB0aGF0IHRoZXJlIGlzIG5vCityb29tIGZvciBpbXByb3ZlbWVudC4gIFRoZSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvY2VzcyByZWNvZ25pemVzIHRoaXMgZmFjdCwKK2FuZCwgYXMgYSByZXN1bHQsIGlzIGhlYXZpbHkgb3JpZW50ZWQgdG93YXJkIHRoZSBpbXByb3ZlbWVudCBvZiBwb3N0ZWQKK2NvZGUuICBZb3UsIGFzIHRoZSBhdXRob3Igb2YgdGhhdCBjb2RlLCB3aWxsIGJlIGV4cGVjdGVkIHRvIHdvcmsgd2l0aCB0aGUKK2tlcm5lbCBjb21tdW5pdHkgdG8gZW5zdXJlIHRoYXQgeW91ciBjb2RlIGlzIHVwIHRvIHRoZSBrZXJuZWwncyBxdWFsaXR5CitzdGFuZGFyZHMuICBBIGZhaWx1cmUgdG8gcGFydGljaXBhdGUgaW4gdGhpcyBwcm9jZXNzIGlzIHF1aXRlIGxpa2VseSB0bworcHJldmVudCB0aGUgaW5jbHVzaW9uIG9mIHlvdXIgcGF0Y2hlcyBpbnRvIHRoZSBtYWlubGluZS4KKworCis2LjE6IFdPUktJTkcgV0lUSCBSRVZJRVdFUlMKKworQSBwYXRjaCBvZiBhbnkgc2lnbmlmaWNhbmNlIHdpbGwgcmVzdWx0IGluIGEgbnVtYmVyIG9mIGNvbW1lbnRzIGZyb20gb3RoZXIKK2RldmVsb3BlcnMgYXMgdGhleSByZXZpZXcgdGhlIGNvZGUuICBXb3JraW5nIHdpdGggcmV2aWV3ZXJzIGNhbiBiZSwgZm9yCittYW55IGRldmVsb3BlcnMsIHRoZSBtb3N0IGludGltaWRhdGluZyBwYXJ0IG9mIHRoZSBrZXJuZWwgZGV2ZWxvcG1lbnQKK3Byb2Nlc3MuICBMaWZlIGNhbiBiZSBtYWRlIG11Y2ggZWFzaWVyLCB0aG91Z2gsIGlmIHlvdSBrZWVwIGEgZmV3IHRoaW5ncyBpbgorbWluZDoKKworIC0gSWYgeW91IGhhdmUgZXhwbGFpbmVkIHlvdXIgcGF0Y2ggd2VsbCwgcmV2aWV3ZXJzIHdpbGwgdW5kZXJzdGFuZCBpdHMKKyAgIHZhbHVlIGFuZCB3aHkgeW91IHdlbnQgdG8gdGhlIHRyb3VibGUgb2Ygd3JpdGluZyBpdC4gIEJ1dCB0aGF0IHZhbHVlCisgICB3aWxsIG5vdCBrZWVwIHRoZW0gZnJvbSBhc2tpbmcgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbjogd2hhdCB3aWxsIGl0IGJlCisgICBsaWtlIHRvIG1haW50YWluIGEga2VybmVsIHdpdGggdGhpcyBjb2RlIGluIGl0IGZpdmUgb3IgdGVuIHllYXJzIGxhdGVyPworICAgTWFueSBvZiB0aGUgY2hhbmdlcyB5b3UgbWF5IGJlIGFza2VkIHRvIG1ha2UgLSBmcm9tIGNvZGluZyBzdHlsZSB0d2Vha3MKKyAgIHRvIHN1YnN0YW50aWFsIHJld3JpdGVzIC0gY29tZSBmcm9tIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgTGludXggd2lsbAorICAgc3RpbGwgYmUgYXJvdW5kIGFuZCB1bmRlciBkZXZlbG9wbWVudCBhIGRlY2FkZSBmcm9tIG5vdy4KKworIC0gQ29kZSByZXZpZXcgaXMgaGFyZCB3b3JrLCBhbmQgaXQgaXMgYSByZWxhdGl2ZWx5IHRoYW5rbGVzcyBvY2N1cGF0aW9uOworICAgcGVvcGxlIHJlbWVtYmVyIHdobyB3cm90ZSBrZXJuZWwgY29kZSwgYnV0IHRoZXJlIGlzIGxpdHRsZSBsYXN0aW5nIGZhbWUKKyAgIGZvciB0aG9zZSB3aG8gcmV2aWV3ZWQgaXQuICBTbyByZXZpZXdlcnMgY2FuIGdldCBncnVtcHksIGVzcGVjaWFsbHkgd2hlbgorICAgdGhleSBzZWUgdGhlIHNhbWUgbWlzdGFrZXMgYmVpbmcgbWFkZSBvdmVyIGFuZCBvdmVyIGFnYWluLiAgSWYgeW91IGdldCBhCisgICByZXZpZXcgd2hpY2ggc2VlbXMgYW5ncnksIGluc3VsdGluZywgb3Igb3V0cmlnaHQgb2ZmZW5zaXZlLCByZXNpc3QgdGhlCisgICBpbXB1bHNlIHRvIHJlc3BvbmQgaW4ga2luZC4gIENvZGUgcmV2aWV3IGlzIGFib3V0IHRoZSBjb2RlLCBub3QgYWJvdXQKKyAgIHRoZSBwZW9wbGUsIGFuZCBjb2RlIHJldmlld2VycyBhcmUgbm90IGF0dGFja2luZyB5b3UgcGVyc29uYWxseS4KKworIC0gU2ltaWxhcmx5LCBjb2RlIHJldmlld2VycyBhcmUgbm90IHRyeWluZyB0byBwcm9tb3RlIHRoZWlyIGVtcGxveWVycycKKyAgIGFnZW5kYXMgYXQgdGhlIGV4cGVuc2Ugb2YgeW91ciBvd24uICBLZXJuZWwgZGV2ZWxvcGVycyBvZnRlbiBleHBlY3QgdG8KKyAgIGJlIHdvcmtpbmcgb24gdGhlIGtlcm5lbCB5ZWFycyBmcm9tIG5vdywgYnV0IHRoZXkgdW5kZXJzdGFuZCB0aGF0IHRoZWlyCisgICBlbXBsb3llciBjb3VsZCBjaGFuZ2UuICBUaGV5IHRydWx5IGFyZSwgYWxtb3N0IHdpdGhvdXQgZXhjZXB0aW9uLAorICAgd29ya2luZyB0b3dhcmQgdGhlIGNyZWF0aW9uIG9mIHRoZSBiZXN0IGtlcm5lbCB0aGV5IGNhbjsgdGhleSBhcmUgbm90CisgICB0cnlpbmcgdG8gY3JlYXRlIGRpc2NvbWZvcnQgZm9yIHRoZWlyIGVtcGxveWVycycgY29tcGV0aXRvcnMuCisKK1doYXQgYWxsIG9mIHRoaXMgY29tZXMgZG93biB0byBpcyB0aGF0LCB3aGVuIHJldmlld2VycyBzZW5kIHlvdSBjb21tZW50cywKK3lvdSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gdGhlIHRlY2huaWNhbCBvYnNlcnZhdGlvbnMgdGhhdCB0aGV5IGFyZQorbWFraW5nLiAgRG8gbm90IGxldCB0aGVpciBmb3JtIG9mIGV4cHJlc3Npb24gb3IgeW91ciBvd24gcHJpZGUga2VlcCB0aGF0Citmcm9tIGhhcHBlbmluZy4gIFdoZW4geW91IGdldCByZXZpZXcgY29tbWVudHMgb24gYSBwYXRjaCwgdGFrZSB0aGUgdGltZSB0bwordW5kZXJzdGFuZCB3aGF0IHRoZSByZXZpZXdlciBpcyB0cnlpbmcgdG8gc2F5LiAgSWYgcG9zc2libGUsIGZpeCB0aGUgdGhpbmdzCit0aGF0IHRoZSByZXZpZXdlciBpcyBhc2tpbmcgeW91IHRvIGZpeC4gIEFuZCByZXNwb25kIGJhY2sgdG8gdGhlIHJldmlld2VyOgordGhhbmsgdGhlbSwgYW5kIGRlc2NyaWJlIGhvdyB5b3Ugd2lsbCBhbnN3ZXIgdGhlaXIgcXVlc3Rpb25zLgorCitOb3RlIHRoYXQgeW91IGRvIG5vdCBoYXZlIHRvIGFncmVlIHdpdGggZXZlcnkgY2hhbmdlIHN1Z2dlc3RlZCBieQorcmV2aWV3ZXJzLiAgSWYgeW91IGJlbGlldmUgdGhhdCB0aGUgcmV2aWV3ZXIgaGFzIG1pc3VuZGVyc3Rvb2QgeW91ciBjb2RlLAorZXhwbGFpbiB3aGF0IGlzIHJlYWxseSBnb2luZyBvbi4gIElmIHlvdSBoYXZlIGEgdGVjaG5pY2FsIG9iamVjdGlvbiB0byBhCitzdWdnZXN0ZWQgY2hhbmdlLCBkZXNjcmliZSBpdCBhbmQganVzdGlmeSB5b3VyIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtLiAgSWYKK3lvdXIgZXhwbGFuYXRpb25zIG1ha2Ugc2Vuc2UsIHRoZSByZXZpZXdlciB3aWxsIGFjY2VwdCB0aGVtLiAgU2hvdWxkIHlvdXIKK2V4cGxhbmF0aW9uIG5vdCBwcm92ZSBwZXJzdWFzaXZlLCB0aG91Z2gsIGVzcGVjaWFsbHkgaWYgb3RoZXJzIHN0YXJ0IHRvCithZ3JlZSB3aXRoIHRoZSByZXZpZXdlciwgdGFrZSBzb21lIHRpbWUgdG8gdGhpbmsgdGhpbmdzIG92ZXIgYWdhaW4uICBJdCBjYW4KK2JlIGVhc3kgdG8gYmVjb21lIGJsaW5kZWQgYnkgeW91ciBvd24gc29sdXRpb24gdG8gYSBwcm9ibGVtIHRvIHRoZSBwb2ludAordGhhdCB5b3UgZG9uJ3QgcmVhbGl6ZSB0aGF0IHNvbWV0aGluZyBpcyBmdW5kYW1lbnRhbGx5IHdyb25nIG9yLCBwZXJoYXBzLAoreW91J3JlIG5vdCBldmVuIHNvbHZpbmcgdGhlIHJpZ2h0IHByb2JsZW0uCisKK09uZSBmYXRhbCBtaXN0YWtlIGlzIHRvIGlnbm9yZSByZXZpZXcgY29tbWVudHMgaW4gdGhlIGhvcGUgdGhhdCB0aGV5IHdpbGwKK2dvIGF3YXkuICBUaGV5IHdpbGwgbm90IGdvIGF3YXkuICBJZiB5b3UgcmVwb3N0IGNvZGUgd2l0aG91dCBoYXZpbmcKK3Jlc3BvbmRlZCB0byB0aGUgY29tbWVudHMgeW91IGdvdCB0aGUgdGltZSBiZWZvcmUsIHlvdSdyZSBsaWtlbHkgdG8gZmluZAordGhhdCB5b3VyIHBhdGNoZXMgZ28gbm93aGVyZS4KKworU3BlYWtpbmcgb2YgcmVwb3N0aW5nIGNvZGU6IHBsZWFzZSBiZWFyIGluIG1pbmQgdGhhdCByZXZpZXdlcnMgYXJlIG5vdAorZ29pbmcgdG8gcmVtZW1iZXIgYWxsIHRoZSBkZXRhaWxzIG9mIHRoZSBjb2RlIHlvdSBwb3N0ZWQgdGhlIGxhc3QgdGltZQorYXJvdW5kLiAgU28gaXQgaXMgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHJlbWluZCByZXZpZXdlcnMgb2YgcHJldmlvdXNseQorcmFpc2VkIGlzc3VlcyBhbmQgaG93IHlvdSBkZWFsdCB3aXRoIHRoZW07IHRoZSBwYXRjaCBjaGFuZ2Vsb2cgaXMgYSBnb29kCitwbGFjZSBmb3IgdGhpcyBraW5kIG9mIGluZm9ybWF0aW9uLiAgUmV2aWV3ZXJzIHNob3VsZCBub3QgaGF2ZSB0byBzZWFyY2gKK3Rocm91Z2ggbGlzdCBhcmNoaXZlcyB0byBmYW1pbGlhcml6ZSB0aGVtc2VsdmVzIHdpdGggd2hhdCB3YXMgc2FpZCBsYXN0Cit0aW1lOyBpZiB5b3UgaGVscCB0aGVtIGdldCBhIHJ1bm5pbmcgc3RhcnQsIHRoZXkgd2lsbCBiZSBpbiBhIGJldHRlciBtb29kCit3aGVuIHRoZXkgcmV2aXNpdCB5b3VyIGNvZGUuCisKK1doYXQgaWYgeW91J3ZlIHRyaWVkIHRvIGRvIGV2ZXJ5dGhpbmcgcmlnaHQgYW5kIHRoaW5ncyBzdGlsbCBhcmVuJ3QgZ29pbmcKK2FueXdoZXJlPyAgTW9zdCB0ZWNobmljYWwgZGlzYWdyZWVtZW50cyBjYW4gYmUgcmVzb2x2ZWQgdGhyb3VnaCBkaXNjdXNzaW9uLAorYnV0IHRoZXJlIGFyZSB0aW1lcyB3aGVuIHNvbWVib2R5IHNpbXBseSBoYXMgdG8gbWFrZSBhIGRlY2lzaW9uLiAgSWYgeW91Citob25lc3RseSBiZWxpZXZlIHRoYXQgdGhpcyBkZWNpc2lvbiBpcyBnb2luZyBhZ2FpbnN0IHlvdSB3cm9uZ2x5LCB5b3UgY2FuCithbHdheXMgdHJ5IGFwcGVhbGluZyB0byBhIGhpZ2hlciBwb3dlci4gIEFzIG9mIHRoaXMgd3JpdGluZywgdGhhdCBoaWdoZXIKK3Bvd2VyIHRlbmRzIHRvIGJlIEFuZHJldyBNb3J0b24uICBBbmRyZXcgaGFzIGEgZ3JlYXQgZGVhbCBvZiByZXNwZWN0IGluIHRoZQora2VybmVsIGRldmVsb3BtZW50IGNvbW11bml0eTsgaGUgY2FuIG9mdGVuIHVuamFtIGEgc2l0dWF0aW9uIHdoaWNoIHNlZW1zIHRvCitiZSBob3BlbGVzc2x5IGJsb2NrZWQuICBBcHBlYWxpbmcgdG8gQW5kcmV3IHNob3VsZCBub3QgYmUgZG9uZSBsaWdodGx5LAordGhvdWdoLCBhbmQgbm90IGJlZm9yZSBhbGwgb3RoZXIgYWx0ZXJuYXRpdmVzIGhhdmUgYmVlbiBleHBsb3JlZC4gIEFuZCBiZWFyCitpbiBtaW5kLCBvZiBjb3Vyc2UsIHRoYXQgaGUgbWF5IG5vdCBhZ3JlZSB3aXRoIHlvdSBlaXRoZXIuCisKKworNi4yOiBXSEFUIEhBUFBFTlMgTkVYVAorCitJZiBhIHBhdGNoIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBnb29kIHRoaW5nIHRvIGFkZCB0byB0aGUga2VybmVsLCBhbmQgb25jZQorbW9zdCBvZiB0aGUgcmV2aWV3IGlzc3VlcyBoYXZlIGJlZW4gcmVzb2x2ZWQsIHRoZSBuZXh0IHN0ZXAgaXMgdXN1YWxseQorZW50cnkgaW50byBhIHN1YnN5c3RlbSBtYWludGFpbmVyJ3MgdHJlZS4gIEhvdyB0aGF0IHdvcmtzIHZhcmllcyBmcm9tIG9uZQorc3Vic3lzdGVtIHRvIHRoZSBuZXh0OyBlYWNoIG1haW50YWluZXIgaGFzIGhpcyBvciBoZXIgb3duIHdheSBvZiBkb2luZwordGhpbmdzLiAgSW4gcGFydGljdWxhciwgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgdHJlZSAtIG9uZSwgcGVyaGFwcywKK2RlZGljYXRlZCB0byBwYXRjaGVzIHBsYW5uZWQgZm9yIHRoZSBuZXh0IG1lcmdlIHdpbmRvdywgYW5kIGFub3RoZXIgZm9yCitsb25nZXItdGVybSB3b3JrLiAgCisKK0ZvciBwYXRjaGVzIGFwcGx5aW5nIHRvIGFyZWFzIGZvciB3aGljaCB0aGVyZSBpcyBubyBvYnZpb3VzIHN1YnN5c3RlbSB0cmVlCisobWVtb3J5IG1hbmFnZW1lbnQgcGF0Y2hlcywgZm9yIGV4YW1wbGUpLCB0aGUgZGVmYXVsdCB0cmVlIG9mdGVuIGVuZHMgdXAKK2JlaW5nIC1tbS4gIFBhdGNoZXMgd2hpY2ggYWZmZWN0IG11bHRpcGxlIHN1YnN5c3RlbXMgY2FuIGFsc28gZW5kIHVwIGdvaW5nCit0aHJvdWdoIHRoZSAtbW0gdHJlZS4KKworSW5jbHVzaW9uIGludG8gYSBzdWJzeXN0ZW0gdHJlZSBjYW4gYnJpbmcgYSBoaWdoZXIgbGV2ZWwgb2YgdmlzaWJpbGl0eSB0byBhCitwYXRjaC4gIE5vdyBvdGhlciBkZXZlbG9wZXJzIHdvcmtpbmcgd2l0aCB0aGF0IHRyZWUgd2lsbCBnZXQgdGhlIHBhdGNoIGJ5CitkZWZhdWx0LiAgU3Vic3lzdGVtIHRyZWVzIHR5cGljYWxseSBmZWVkIGludG8gLW1tIGFuZCBsaW51eC1uZXh0IGFzIHdlbGwsCittYWtpbmcgdGhlaXIgY29udGVudHMgdmlzaWJsZSB0byB0aGUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGFzIGEgd2hvbGUuICBBdAordGhpcyBwb2ludCwgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgeW91IHdpbGwgZ2V0IG1vcmUgY29tbWVudHMgZnJvbSBhCituZXcgc2V0IG9mIHJldmlld2VyczsgdGhlc2UgY29tbWVudHMgbmVlZCB0byBiZSBhbnN3ZXJlZCBhcyBpbiB0aGUgcHJldmlvdXMKK3JvdW5kLgorCitXaGF0IG1heSBhbHNvIGhhcHBlbiBhdCB0aGlzIHBvaW50LCBkZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiB5b3VyIHBhdGNoLAoraXMgdGhhdCBjb25mbGljdHMgd2l0aCB3b3JrIGJlaW5nIGRvbmUgYnkgb3RoZXJzIHR1cm4gdXAuICBJbiB0aGUgd29yc3QKK2Nhc2UsIGhlYXZ5IHBhdGNoIGNvbmZsaWN0cyBjYW4gcmVzdWx0IGluIHNvbWUgd29yayBiZWluZyBwdXQgb24gdGhlIGJhY2sKK2J1cm5lciBzbyB0aGF0IHRoZSByZW1haW5pbmcgcGF0Y2hlcyBjYW4gYmUgd29ya2VkIGludG8gc2hhcGUgYW5kIG1lcmdlZC4KK090aGVyIHRpbWVzLCBjb25mbGljdCByZXNvbHV0aW9uIHdpbGwgaW52b2x2ZSB3b3JraW5nIHdpdGggdGhlIG90aGVyCitkZXZlbG9wZXJzIGFuZCwgcG9zc2libHksIG1vdmluZyBzb21lIHBhdGNoZXMgYmV0d2VlbiB0cmVlcyB0byBlbnN1cmUgdGhhdAorZXZlcnl0aGluZyBhcHBsaWVzIGNsZWFubHkuICBUaGlzIHdvcmsgY2FuIGJlIGEgcGFpbiwgYnV0IGNvdW50IHlvdXIKK2JsZXNzaW5nczogYmVmb3JlIHRoZSBhZHZlbnQgb2YgdGhlIGxpbnV4LW5leHQgdHJlZSwgdGhlc2UgY29uZmxpY3RzIG9mdGVuCitvbmx5IHR1cm5lZCB1cCBkdXJpbmcgdGhlIG1lcmdlIHdpbmRvdyBhbmQgaGFkIHRvIGJlIGFkZHJlc3NlZCBpbiBhIGh1cnJ5LgorTm93IHRoZXkgY2FuIGJlIHJlc29sdmVkIGF0IGxlaXN1cmUsIGJlZm9yZSB0aGUgbWVyZ2Ugd2luZG93IG9wZW5zLgorCitTb21lIGRheSwgaWYgYWxsIGdvZXMgd2VsbCwgeW91J2xsIGxvZyBvbiBhbmQgc2VlIHRoYXQgeW91ciBwYXRjaCBoYXMgYmVlbgorbWVyZ2VkIGludG8gdGhlIG1haW5saW5lIGtlcm5lbC4gIENvbmdyYXR1bGF0aW9ucyEgIE9uY2UgdGhlIGNlbGVicmF0aW9uIGlzCitjb21wbGV0ZSAoYW5kIHlvdSBoYXZlIGFkZGVkIHlvdXJzZWxmIHRvIHRoZSBNQUlOVEFJTkVSUyBmaWxlKSwgdGhvdWdoLCBpdAoraXMgd29ydGggcmVtZW1iZXJpbmcgYW4gaW1wb3J0YW50IGxpdHRsZSBmYWN0OiB0aGUgam9iIHN0aWxsIGlzIG5vdCBkb25lLgorTWVyZ2luZyBpbnRvIHRoZSBtYWlubGluZSBicmluZ3MgaXRzIG93biBjaGFsbGVuZ2VzLgorCitUbyBiZWdpbiB3aXRoLCB0aGUgdmlzaWJpbGl0eSBvZiB5b3VyIHBhdGNoIGhhcyBpbmNyZWFzZWQgeWV0IGFnYWluLiAgVGhlcmUKK21heSBiZSBhIG5ldyByb3VuZCBvZiBjb21tZW50cyBmcm9tIGRldmVsb3BlcnMgd2hvIGhhZCBub3QgYmVlbiBhd2FyZSBvZgordGhlIHBhdGNoIGJlZm9yZS4gIEl0IG1heSBiZSB0ZW1wdGluZyB0byBpZ25vcmUgdGhlbSwgc2luY2UgdGhlcmUgaXMgbm8KK2xvbmdlciBhbnkgcXVlc3Rpb24gb2YgeW91ciBjb2RlIGJlaW5nIG1lcmdlZC4gIFJlc2lzdCB0aGF0IHRlbXB0YXRpb24sCit0aG91Z2g7IHlvdSBzdGlsbCBuZWVkIHRvIGJlIHJlc3BvbnNpdmUgdG8gZGV2ZWxvcGVycyB3aG8gaGF2ZSBxdWVzdGlvbnMgb3IKK3N1Z2dlc3Rpb25zLgorCitNb3JlIGltcG9ydGFudGx5LCB0aG91Z2g6IGluY2x1c2lvbiBpbnRvIHRoZSBtYWlubGluZSBwdXRzIHlvdXIgY29kZSBpbnRvCit0aGUgaGFuZHMgb2YgYSBtdWNoIGxhcmdlciBncm91cCBvZiB0ZXN0ZXJzLiAgRXZlbiBpZiB5b3UgaGF2ZSBjb250cmlidXRlZAorYSBkcml2ZXIgZm9yIGhhcmR3YXJlIHdoaWNoIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLCB5b3Ugd2lsbCBiZSBzdXJwcmlzZWQgYnkKK2hvdyBtYW55IHBlb3BsZSB3aWxsIGJ1aWxkIHlvdXIgY29kZSBpbnRvIHRoZWlyIGtlcm5lbHMuICBBbmQsIG9mIGNvdXJzZSwKK3doZXJlIHRoZXJlIGFyZSB0ZXN0ZXJzLCB0aGVyZSB3aWxsIGJlIGJ1ZyByZXBvcnRzLgorCitUaGUgd29yc3Qgc29ydCBvZiBidWcgcmVwb3J0cyBhcmUgcmVncmVzc2lvbnMuICBJZiB5b3VyIHBhdGNoIGNhdXNlcyBhCityZWdyZXNzaW9uLCB5b3UnbGwgZmluZCBhbiB1bmNvbWZvcnRhYmxlIG51bWJlciBvZiBleWVzIHVwb24geW91OworcmVncmVzc2lvbnMgbmVlZCB0byBiZSBmaXhlZCBhcyBzb29uIGFzIHBvc3NpYmxlLiAgSWYgeW91IGFyZSB1bndpbGxpbmcgb3IKK3VuYWJsZSB0byBmaXggdGhlIHJlZ3Jlc3Npb24gKGFuZCBub2JvZHkgZWxzZSBkb2VzIGl0IGZvciB5b3UpLCB5b3VyIHBhdGNoCit3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgcmVtb3ZlZCBkdXJpbmcgdGhlIHN0YWJpbGl6YXRpb24gcGVyaW9kLiAgQmV5b25kCituZWdhdGluZyBhbGwgb2YgdGhlIHdvcmsgeW91IGhhdmUgZG9uZSB0byBnZXQgeW91ciBwYXRjaCBpbnRvIHRoZSBtYWlubGluZSwKK2hhdmluZyBhIHBhdGNoIHB1bGxlZCBhcyB0aGUgcmVzdWx0IG9mIGEgZmFpbHVyZSB0byBmaXggYSByZWdyZXNzaW9uIGNvdWxkCit3ZWxsIG1ha2UgaXQgaGFyZGVyIGZvciB5b3UgdG8gZ2V0IHdvcmsgbWVyZ2VkIGluIHRoZSBmdXR1cmUuCisKK0FmdGVyIGFueSByZWdyZXNzaW9ucyBoYXZlIGJlZW4gZGVhbHQgd2l0aCwgdGhlcmUgbWF5IGJlIG90aGVyLCBvcmRpbmFyeQorYnVncyB0byBkZWFsIHdpdGguICBUaGUgc3RhYmlsaXphdGlvbiBwZXJpb2QgaXMgeW91ciBiZXN0IG9wcG9ydHVuaXR5IHRvCitmaXggdGhlc2UgYnVncyBhbmQgZW5zdXJlIHRoYXQgeW91ciBjb2RlJ3MgZGVidXQgaW4gYSBtYWlubGluZSBrZXJuZWwKK3JlbGVhc2UgaXMgYXMgc29saWQgYXMgcG9zc2libGUuICBTbywgcGxlYXNlLCBhbnN3ZXIgYnVnIHJlcG9ydHMsIGFuZCBmaXgKK3RoZSBwcm9ibGVtcyBpZiBhdCBhbGwgcG9zc2libGUuICBUaGF0J3Mgd2hhdCB0aGUgc3RhYmlsaXphdGlvbiBwZXJpb2QgaXMKK2ZvcjsgeW91IGNhbiBzdGFydCBjcmVhdGluZyBjb29sIG5ldyBwYXRjaGVzIG9uY2UgYW55IHByb2JsZW1zIHdpdGggdGhlIG9sZAorb25lcyBoYXZlIGJlZW4gdGFrZW4gY2FyZSBvZi4KKworQW5kIGRvbid0IGZvcmdldCB0aGF0IHRoZXJlIGFyZSBvdGhlciBtaWxlc3RvbmVzIHdoaWNoIG1heSBhbHNvIGNyZWF0ZSBidWcKK3JlcG9ydHM6IHRoZSBuZXh0IG1haW5saW5lIHN0YWJsZSByZWxlYXNlLCB3aGVuIHByb21pbmVudCBkaXN0cmlidXRvcnMgcGljawordXAgYSB2ZXJzaW9uIG9mIHRoZSBrZXJuZWwgY29udGFpbmluZyB5b3VyIHBhdGNoLCBldGMuICBDb250aW51aW5nIHRvCityZXNwb25kIHRvIHRoZXNlIHJlcG9ydHMgaXMgYSBtYXR0ZXIgb2YgYmFzaWMgcHJpZGUgaW4geW91ciB3b3JrLiAgSWYgdGhhdAoraXMgaW5zdWZmaWNpZW50IG1vdGl2YXRpb24sIHRob3VnaCwgaXQncyBhbHNvIHdvcnRoIGNvbnNpZGVyaW5nIHRoYXQgdGhlCitkZXZlbG9wbWVudCBjb21tdW5pdHkgcmVtZW1iZXJzIGRldmVsb3BlcnMgd2hvIGxvc2UgaW50ZXJlc3QgaW4gdGhlaXIgY29kZQorYWZ0ZXIgaXQncyBtZXJnZWQuICBUaGUgbmV4dCB0aW1lIHlvdSBwb3N0IGEgcGF0Y2gsIHRoZXkgd2lsbCBiZSBldmFsdWF0aW5nCitpdCB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IHdpbGwgbm90IGJlIGFyb3VuZCB0byBtYWludGFpbiBpdAorYWZ0ZXJ3YXJkLgorCisKKzYuMzogT1RIRVIgVEhJTkdTIFRIQVQgQ0FOIEhBUFBFTgorCitPbmUgZGF5LCB5b3UgbWF5IG9wZW4geW91ciBtYWlsIGNsaWVudCBhbmQgc2VlIHRoYXQgc29tZWJvZHkgaGFzIG1haWxlZCB5b3UKK2EgcGF0Y2ggdG8geW91ciBjb2RlLiAgVGhhdCBpcyBvbmUgb2YgdGhlIGFkdmFudGFnZXMgb2YgaGF2aW5nIHlvdXIgY29kZQorb3V0IHRoZXJlIGluIHRoZSBvcGVuLCBhZnRlciBhbGwuICBJZiB5b3UgYWdyZWUgd2l0aCB0aGUgcGF0Y2gsIHlvdSBjYW4KK2VpdGhlciBmb3J3YXJkIGl0IG9uIHRvIHRoZSBzdWJzeXN0ZW0gbWFpbnRhaW5lciAoYmUgc3VyZSB0byBpbmNsdWRlIGEKK3Byb3BlciBGcm9tOiBsaW5lIHNvIHRoYXQgdGhlIGF0dHJpYnV0aW9uIGlzIGNvcnJlY3QsIGFuZCBhZGQgYSBzaWdub2ZmIG9mCit5b3VyIG93biksIG9yIHNlbmQgYW4gQWNrZWQtYnk6IHJlc3BvbnNlIGJhY2sgYW5kIGxldCB0aGUgb3JpZ2luYWwgcG9zdGVyCitzZW5kIGl0IHVwd2FyZC4KKworSWYgeW91IGRpc2FncmVlIHdpdGggdGhlIHBhdGNoLCBzZW5kIGEgcG9saXRlIHJlc3BvbnNlIGV4cGxhaW5pbmcgd2h5LiAgSWYKK3Bvc3NpYmxlLCB0ZWxsIHRoZSBhdXRob3Igd2hhdCBjaGFuZ2VzIG5lZWQgdG8gYmUgbWFkZSB0byBtYWtlIHRoZSBwYXRjaAorYWNjZXB0YWJsZSB0byB5b3UuICBUaGVyZSBpcyBhIGNlcnRhaW4gcmVzaXN0YW5jZSB0byBtZXJnaW5nIHBhdGNoZXMgd2hpY2gKK2FyZSBvcHBvc2VkIGJ5IHRoZSBhdXRob3IgYW5kIG1haW50YWluZXIgb2YgdGhlIGNvZGUsIGJ1dCBpdCBvbmx5IGdvZXMgc28KK2Zhci4gIElmIHlvdSBhcmUgc2VlbiBhcyBuZWVkbGVzc2x5IGJsb2NraW5nIGdvb2Qgd29yaywgdGhvc2UgcGF0Y2hlcyB3aWxsCitldmVudHVhbGx5IGZsb3cgYXJvdW5kIHlvdSBhbmQgZ2V0IGludG8gdGhlIG1haW5saW5lIGFueXdheS4gIEluIHRoZSBMaW51eAora2VybmVsLCBub2JvZHkgaGFzIGFic29sdXRlIHZldG8gcG93ZXIgb3ZlciBhbnkgY29kZS4gIEV4Y2VwdCBtYXliZSBMaW51cy4KKworT24gdmVyeSByYXJlIG9jY2FzaW9uLCB5b3UgbWF5IHNlZSBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQ6IGFub3RoZXIKK2RldmVsb3BlciBwb3N0cyBhIGRpZmZlcmVudCBzb2x1dGlvbiB0byB5b3VyIHByb2JsZW0uICBBdCB0aGF0IHBvaW50LAorY2hhbmNlcyBhcmUgdGhhdCBvbmUgb2YgdGhlIHR3byBwYXRjaGVzIHdpbGwgbm90IGJlIG1lcmdlZCwgYW5kICJtaW5lIHdhcworaGVyZSBmaXJzdCIgaXMgbm90IGNvbnNpZGVyZWQgdG8gYmUgYSBjb21wZWxsaW5nIHRlY2huaWNhbCBhcmd1bWVudC4gIElmCitzb21lYm9keSBlbHNlJ3MgcGF0Y2ggZGlzcGxhY2VzIHlvdXJzIGFuZCBnZXRzIGludG8gdGhlIG1haW5saW5lLCB0aGVyZSBpcworcmVhbGx5IG9ubHkgb25lIHdheSB0byByZXNwb25kOiBiZSBwbGVhc2VkIHRoYXQgeW91ciBwcm9ibGVtIGdvdCBzb2x2ZWQgYW5kCitnZXQgb24gd2l0aCB5b3VyIHdvcmsuICBIYXZpbmcgb25lJ3Mgd29yayBzaG92ZWQgYXNpZGUgaW4gdGhpcyBtYW5uZXIgY2FuCitiZSBodXJ0ZnVsIGFuZCBkaXNjb3VyYWdpbmcsIGJ1dCB0aGUgY29tbXVuaXR5IHdpbGwgcmVtZW1iZXIgeW91ciByZWFjdGlvbgorbG9uZyBhZnRlciB0aGV5IGhhdmUgZm9yZ290dGVuIHdob3NlIHBhdGNoIGFjdHVhbGx5IGdvdCBtZXJnZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvNy5BZHZhbmNlZFRvcGljcyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy83LkFkdmFuY2VkVG9waWNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyY2Y3NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvNy5BZHZhbmNlZFRvcGljcwpAQCAtMCwwICsxLDE3MyBAQAorNzogQURWQU5DRUQgVE9QSUNTCisKK0F0IHRoaXMgcG9pbnQsIGhvcGVmdWxseSwgeW91IGhhdmUgYSBoYW5kbGUgb24gaG93IHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzCit3b3Jrcy4gIFRoZXJlIGlzIHN0aWxsIG1vcmUgdG8gbGVhcm4sIGhvd2V2ZXIhICBUaGlzIHNlY3Rpb24gd2lsbCBjb3ZlciBhCitudW1iZXIgb2YgdG9waWNzIHdoaWNoIGNhbiBiZSBoZWxwZnVsIGZvciBkZXZlbG9wZXJzIHdhbnRpbmcgdG8gYmVjb21lIGEKK3JlZ3VsYXIgcGFydCBvZiB0aGUgTGludXgga2VybmVsIGRldmVsb3BtZW50IHByb2Nlc3MuCisKKzcuMTogTUFOQUdJTkcgUEFUQ0hFUyBXSVRIIEdJVAorCitUaGUgdXNlIG9mIGRpc3RyaWJ1dGVkIHZlcnNpb24gY29udHJvbCBmb3IgdGhlIGtlcm5lbCBiZWdhbiBpbiBlYXJseSAyMDAyLAord2hlbiBMaW51cyBmaXJzdCBzdGFydGVkIHBsYXlpbmcgd2l0aCB0aGUgcHJvcHJpZXRhcnkgQml0S2VlcGVyCithcHBsaWNhdGlvbi4gIFdoaWxlIEJpdEtlZXBlciB3YXMgY29udHJvdmVyc2lhbCwgdGhlIGFwcHJvYWNoIHRvIHNvZnR3YXJlCit2ZXJzaW9uIG1hbmFnZW1lbnQgaXQgZW1ib2RpZWQgbW9zdCBjZXJ0YWlubHkgd2FzIG5vdC4gIERpc3RyaWJ1dGVkIHZlcnNpb24KK2NvbnRyb2wgZW5hYmxlZCBhbiBpbW1lZGlhdGUgYWNjZWxlcmF0aW9uIG9mIHRoZSBrZXJuZWwgZGV2ZWxvcG1lbnQKK3Byb2plY3QuICBJbiBjdXJyZW50IHRpbWVzLCB0aGVyZSBhcmUgc2V2ZXJhbCBmcmVlIGFsdGVybmF0aXZlcyB0bworQml0S2VlcGVyLiAgRm9yIGJldHRlciBvciBmb3Igd29yc2UsIHRoZSBrZXJuZWwgcHJvamVjdCBoYXMgc2V0dGxlZCBvbiBnaXQKK2FzIGl0cyB0b29sIG9mIGNob2ljZS4KKworTWFuYWdpbmcgcGF0Y2hlcyB3aXRoIGdpdCBjYW4gbWFrZSBsaWZlIG11Y2ggZWFzaWVyIGZvciB0aGUgZGV2ZWxvcGVyLAorZXNwZWNpYWxseSBhcyB0aGUgdm9sdW1lIG9mIHRob3NlIHBhdGNoZXMgZ3Jvd3MuICBHaXQgYWxzbyBoYXMgaXRzIHJvdWdoCitlZGdlcyBhbmQgcG9zZXMgY2VydGFpbiBoYXphcmRzOyBpdCBpcyBhIHlvdW5nIGFuZCBwb3dlcmZ1bCB0b29sIHdoaWNoIGlzCitzdGlsbCBiZWluZyBjaXZpbGl6ZWQgYnkgaXRzIGRldmVsb3BlcnMuICBUaGlzIGRvY3VtZW50IHdpbGwgbm90IGF0dGVtcHQgdG8KK3RlYWNoIHRoZSByZWFkZXIgaG93IHRvIHVzZSBnaXQ7IHRoYXQgd291bGQgYmUgc3VmZmljaWVudCBtYXRlcmlhbCBmb3IgYQorbG9uZyBkb2N1bWVudCBpbiBpdHMgb3duIHJpZ2h0LiAgSW5zdGVhZCwgdGhlIGZvY3VzIGhlcmUgd2lsbCBiZSBvbiBob3cgZ2l0CitmaXRzIGludG8gdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzIGluIHBhcnRpY3VsYXIuICBEZXZlbG9wZXJzIHdobword2lzaCB0byBjb21lIHVwIHRvIHNwZWVkIHdpdGggZ2l0IHdpbGwgZmluZCBtb3JlIGluZm9ybWF0aW9uIGF0OgorCisJaHR0cDovL2dpdC5vci5jei8KKworCWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzL3VzZXItbWFudWFsLmh0bWwKKworYW5kIG9uIHZhcmlvdXMgdHV0b3JpYWxzIGZvdW5kIG9uIHRoZSB3ZWIuCisKK1RoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyB0byByZWFkIHRoZSBhYm92ZSBzaXRlcyBhbmQgZ2V0IGEgc29saWQKK3VuZGVyc3RhbmRpbmcgb2YgaG93IGdpdCB3b3JrcyBiZWZvcmUgdHJ5aW5nIHRvIHVzZSBpdCB0byBtYWtlIHBhdGNoZXMKK2F2YWlsYWJsZSB0byBvdGhlcnMuICBBIGdpdC11c2luZyBkZXZlbG9wZXIgc2hvdWxkIGJlIGFibGUgdG8gb2J0YWluIGEgY29weQorb2YgdGhlIG1haW5saW5lIHJlcG9zaXRvcnksIGV4cGxvcmUgdGhlIHJldmlzaW9uIGhpc3RvcnksIGNvbW1pdCBjaGFuZ2VzIHRvCit0aGUgdHJlZSwgdXNlIGJyYW5jaGVzLCBldGMuICBBbiB1bmRlcnN0YW5kaW5nIG9mIGdpdCdzIHRvb2xzIGZvciB0aGUKK3Jld3JpdGluZyBvZiBoaXN0b3J5IChzdWNoIGFzIHJlYmFzZSkgaXMgYWxzbyB1c2VmdWwuICBHaXQgY29tZXMgd2l0aCBpdHMKK293biB0ZXJtaW5vbG9neSBhbmQgY29uY2VwdHM7IGEgbmV3IHVzZXIgb2YgZ2l0IHNob3VsZCBrbm93IGFib3V0IHJlZnMsCityZW1vdGUgYnJhbmNoZXMsIHRoZSBpbmRleCwgZmFzdC1mb3J3YXJkIG1lcmdlcywgcHVzaGVzIGFuZCBwdWxscywgZGV0YWNoZWQKK2hlYWRzLCBldGMuICBJdCBjYW4gYWxsIGJlIGEgbGl0dGxlIGludGltaWRhdGluZyBhdCB0aGUgb3V0c2V0LCBidXQgdGhlCitjb25jZXB0cyBhcmUgbm90IHRoYXQgaGFyZCB0byBncmFzcCB3aXRoIGEgYml0IG9mIHN0dWR5LgorCitVc2luZyBnaXQgdG8gZ2VuZXJhdGUgcGF0Y2hlcyBmb3Igc3VibWlzc2lvbiBieSBlbWFpbCBjYW4gYmUgYSBnb29kCitleGVyY2lzZSB3aGlsZSBjb21pbmcgdXAgdG8gc3BlZWQuCisKK1doZW4geW91IGFyZSByZWFkeSB0byBzdGFydCBwdXR0aW5nIHVwIGdpdCB0cmVlcyBmb3Igb3RoZXJzIHRvIGxvb2sgYXQsIHlvdQord2lsbCwgb2YgY291cnNlLCBuZWVkIGEgc2VydmVyIHRoYXQgY2FuIGJlIHB1bGxlZCBmcm9tLiAgU2V0dGluZyB1cCBzdWNoIGEKK3NlcnZlciB3aXRoIGdpdC1kYWVtb24gaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgaWYgeW91IGhhdmUgYSBzeXN0ZW0KK3doaWNoIGlzIGFjY2Vzc2libGUgdG8gdGhlIEludGVybmV0LiAgT3RoZXJ3aXNlLCBmcmVlLCBwdWJsaWMgaG9zdGluZyBzaXRlcworKEdpdGh1YiwgZm9yIGV4YW1wbGUpIGFyZSBzdGFydGluZyB0byBhcHBlYXIgb24gdGhlIG5ldC4gIEVzdGFibGlzaGVkCitkZXZlbG9wZXJzIGNhbiBnZXQgYW4gYWNjb3VudCBvbiBrZXJuZWwub3JnLCBidXQgdGhvc2UgYXJlIG5vdCBlYXN5IHRvIGNvbWUKK2J5OyBzZWUgaHR0cDovL2tlcm5lbC5vcmcvZmFxLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVGhlIG5vcm1hbCBnaXQgd29ya2Zsb3cgaW52b2x2ZXMgdGhlIHVzZSBvZiBhIGxvdCBvZiBicmFuY2hlcy4gIEVhY2ggbGluZQorb2YgZGV2ZWxvcG1lbnQgY2FuIGJlIHNlcGFyYXRlZCBpbnRvIGEgc2VwYXJhdGUgInRvcGljIGJyYW5jaCIgYW5kCittYWludGFpbmVkIGluZGVwZW5kZW50bHkuICBCcmFuY2hlcyBpbiBnaXQgYXJlIGNoZWFwLCB0aGVyZSBpcyBubyByZWFzb24gdG8KK25vdCBtYWtlIGZyZWUgdXNlIG9mIHRoZW0uICBBbmQsIGluIGFueSBjYXNlLCB5b3Ugc2hvdWxkIG5vdCBkbyB5b3VyCitkZXZlbG9wbWVudCBpbiBhbnkgYnJhbmNoIHdoaWNoIHlvdSBpbnRlbmQgdG8gYXNrIG90aGVycyB0byBwdWxsIGZyb20uCitQdWJsaWNseS1hdmFpbGFibGUgYnJhbmNoZXMgc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBjYXJlOyBtZXJnZSBpbiBwYXRjaGVzCitmcm9tIGRldmVsb3BtZW50IGJyYW5jaGVzIHdoZW4gdGhleSBhcmUgaW4gY29tcGxldGUgZm9ybSBhbmQgcmVhZHkgdG8gZ28gLQorbm90IGJlZm9yZS4KKworR2l0IHByb3ZpZGVzIHNvbWUgcG93ZXJmdWwgdG9vbHMgd2hpY2ggY2FuIGFsbG93IHlvdSB0byByZXdyaXRlIHlvdXIKK2RldmVsb3BtZW50IGhpc3RvcnkuICBBbiBpbmNvbnZlbmllbnQgcGF0Y2ggKG9uZSB3aGljaCBicmVha3MgYmlzZWN0aW9uLAorc2F5LCBvciB3aGljaCBoYXMgc29tZSBvdGhlciBzb3J0IG9mIG9idmlvdXMgYnVnKSBjYW4gYmUgZml4ZWQgaW4gcGxhY2Ugb3IKK21hZGUgdG8gZGlzYXBwZWFyIGZyb20gdGhlIGhpc3RvcnkgZW50aXJlbHkuICBBIHBhdGNoIHNlcmllcyBjYW4gYmUKK3Jld3JpdHRlbiBhcyBpZiBpdCBoYWQgYmVlbiB3cml0dGVuIG9uIHRvcCBvZiB0b2RheSdzIG1haW5saW5lLCBldmVuIHRob3VnaAoreW91IGhhdmUgYmVlbiB3b3JraW5nIG9uIGl0IGZvciBtb250aHMuICBDaGFuZ2VzIGNhbiBiZSB0cmFuc3BhcmVudGx5CitzaGlmdGVkIGZyb20gb25lIGJyYW5jaCB0byBhbm90aGVyLiAgQW5kIHNvIG9uLiAgSnVkaWNpb3VzIHVzZSBvZiBnaXQncworYWJpbGl0eSB0byByZXZpc2UgaGlzdG9yeSBjYW4gaGVscCBpbiB0aGUgY3JlYXRpb24gb2YgY2xlYW4gcGF0Y2ggc2V0cyB3aXRoCitmZXdlciBwcm9ibGVtcy4KKworRXhjZXNzaXZlIHVzZSBvZiB0aGlzIGNhcGFiaWxpdHkgY2FuIGxlYWQgdG8gb3RoZXIgcHJvYmxlbXMsIHRob3VnaCwgYmV5b25kCithIHNpbXBsZSBvYnNlc3Npb24gZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgcGVyZmVjdCBwcm9qZWN0IGhpc3RvcnkuCitSZXdyaXRpbmcgaGlzdG9yeSB3aWxsIHJld3JpdGUgdGhlIGNoYW5nZXMgY29udGFpbmVkIGluIHRoYXQgaGlzdG9yeSwKK3R1cm5pbmcgYSB0ZXN0ZWQgKGhvcGVmdWxseSkga2VybmVsIHRyZWUgaW50byBhbiB1bnRlc3RlZCBvbmUuICBCdXQsIGJleW9uZAordGhhdCwgZGV2ZWxvcGVycyBjYW5ub3QgZWFzaWx5IGNvbGxhYm9yYXRlIGlmIHRoZXkgZG8gbm90IGhhdmUgYSBzaGFyZWQKK3ZpZXcgb2YgdGhlIHByb2plY3QgaGlzdG9yeTsgaWYgeW91IHJld3JpdGUgaGlzdG9yeSB3aGljaCBvdGhlciBkZXZlbG9wZXJzCitoYXZlIHB1bGxlZCBpbnRvIHRoZWlyIHJlcG9zaXRvcmllcywgeW91IHdpbGwgbWFrZSBsaWZlIG11Y2ggbW9yZSBkaWZmaWN1bHQKK2ZvciB0aG9zZSBkZXZlbG9wZXJzLiAgU28gYSBzaW1wbGUgcnVsZSBvZiB0aHVtYiBhcHBsaWVzIGhlcmU6IGhpc3RvcnkKK3doaWNoIGhhcyBiZWVuIGV4cG9ydGVkIHRvIG90aGVycyBzaG91bGQgZ2VuZXJhbGx5IGJlIHNlZW4gYXMgaW1tdXRhYmxlCit0aGVyZWFmdGVyLgorCitTbywgb25jZSB5b3UgcHVzaCBhIHNldCBvZiBjaGFuZ2VzIHRvIHlvdXIgcHVibGljbHktYXZhaWxhYmxlIHNlcnZlciwgdGhvc2UKK2NoYW5nZXMgc2hvdWxkIG5vdCBiZSByZXdyaXR0ZW4uICBHaXQgd2lsbCBhdHRlbXB0IHRvIGVuZm9yY2UgdGhpcyBydWxlIGlmCit5b3UgdHJ5IHRvIHB1c2ggY2hhbmdlcyB3aGljaCBkbyBub3QgcmVzdWx0IGluIGEgZmFzdC1mb3J3YXJkIG1lcmdlCisoaS5lLiBjaGFuZ2VzIHdoaWNoIGRvIG5vdCBzaGFyZSB0aGUgc2FtZSBoaXN0b3J5KS4gIEl0IGlzIHBvc3NpYmxlIHRvCitvdmVycmlkZSB0aGlzIGNoZWNrLCBhbmQgdGhlcmUgbWF5IGJlIHRpbWVzIHdoZW4gaXQgaXMgbmVjZXNzYXJ5IHRvIHJld3JpdGUKK2FuIGV4cG9ydGVkIHRyZWUuICBNb3ZpbmcgY2hhbmdlc2V0cyBiZXR3ZWVuIHRyZWVzIHRvIGF2b2lkIGNvbmZsaWN0cyBpbgorbGludXgtbmV4dCBpcyBvbmUgZXhhbXBsZS4gIEJ1dCBzdWNoIGFjdGlvbnMgc2hvdWxkIGJlIHJhcmUuICBUaGlzIGlzIG9uZQorb2YgdGhlIHJlYXNvbnMgd2h5IGRldmVsb3BtZW50IHNob3VsZCBiZSBkb25lIGluIHByaXZhdGUgYnJhbmNoZXMgKHdoaWNoCitjYW4gYmUgcmV3cml0dGVuIGlmIG5lY2Vzc2FyeSkgYW5kIG9ubHkgbW92ZWQgaW50byBwdWJsaWMgYnJhbmNoZXMgd2hlbgoraXQncyBpbiBhIHJlYXNvbmFibHkgYWR2YW5jZWQgc3RhdGUuCisKK0FzIHRoZSBtYWlubGluZSAob3Igb3RoZXIgdHJlZSB1cG9uIHdoaWNoIGEgc2V0IG9mIGNoYW5nZXMgaXMgYmFzZWQpCithZHZhbmNlcywgaXQgaXMgdGVtcHRpbmcgdG8gbWVyZ2Ugd2l0aCB0aGF0IHRyZWUgdG8gc3RheSBvbiB0aGUgbGVhZGluZworZWRnZS4gIEZvciBhIHByaXZhdGUgYnJhbmNoLCByZWJhc2luZyBjYW4gYmUgYW4gZWFzeSB3YXkgdG8ga2VlcCB1cCB3aXRoCithbm90aGVyIHRyZWUsIGJ1dCByZWJhc2luZyBpcyBub3QgYW4gb3B0aW9uIG9uY2UgYSB0cmVlIGlzIGV4cG9ydGVkIHRvIHRoZQord29ybGQuICBPbmNlIHRoYXQgaGFwcGVucywgYSBmdWxsIG1lcmdlIG11c3QgYmUgZG9uZS4gIE1lcmdpbmcgb2NjYXNpb25hbGx5CittYWtlcyBnb29kIHNlbnNlLCBidXQgb3Zlcmx5IGZyZXF1ZW50IG1lcmdlcyBjYW4gY2x1dHRlciB0aGUgaGlzdG9yeQorbmVlZGxlc3NseS4gIFN1Z2dlc3RlZCB0ZWNobmlxdWUgaW4gdGhpcyBjYXNlIGlzIHRvIG1lcmdlIGluZnJlcXVlbnRseSwgYW5kCitnZW5lcmFsbHkgb25seSBhdCBzcGVjaWZpYyByZWxlYXNlIHBvaW50cyAoc3VjaCBhcyBhIG1haW5saW5lIC1yYworcmVsZWFzZSkuICBJZiB5b3UgYXJlIG5lcnZvdXMgYWJvdXQgc3BlY2lmaWMgY2hhbmdlcywgeW91IGNhbiBhbHdheXMKK3BlcmZvcm0gdGVzdCBtZXJnZXMgaW4gYSBwcml2YXRlIGJyYW5jaC4gIFRoZSBnaXQgInJlcmVyZSIgdG9vbCBjYW4gYmUKK3VzZWZ1bCBpbiBzdWNoIHNpdHVhdGlvbnM7IGl0IHJlbWVtYmVycyBob3cgbWVyZ2UgY29uZmxpY3RzIHdlcmUgcmVzb2x2ZWQKK3NvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gZG8gdGhlIHNhbWUgd29yayB0d2ljZS4KKworT25lIG9mIHRoZSBiaWdnZXN0IHJlY3VycmluZyBjb21wbGFpbnRzIGFib3V0IHRvb2xzIGxpa2UgZ2l0IGlzIHRoaXM6IHRoZQorbWFzcyBtb3ZlbWVudCBvZiBwYXRjaGVzIGZyb20gb25lIHJlcG9zaXRvcnkgdG8gYW5vdGhlciBtYWtlcyBpdCBlYXN5IHRvCitzbGlwIGluIGlsbC1hZHZpc2VkIGNoYW5nZXMgd2hpY2ggZ28gaW50byB0aGUgbWFpbmxpbmUgYmVsb3cgdGhlIHJldmlldworcmFkYXIuICBLZXJuZWwgZGV2ZWxvcGVycyB0ZW5kIHRvIGdldCB1bmhhcHB5IHdoZW4gdGhleSBzZWUgdGhhdCBraW5kIG9mCit0aGluZyBoYXBwZW5pbmc7IHB1dHRpbmcgdXAgYSBnaXQgdHJlZSB3aXRoIHVucmV2aWV3ZWQgb3Igb2ZmLXRvcGljIHBhdGNoZXMKK2NhbiBhZmZlY3QgeW91ciBhYmlsaXR5IHRvIGdldCB0cmVlcyBwdWxsZWQgaW4gdGhlIGZ1dHVyZS4gIFF1b3RpbmcgTGludXM6CisKKwlZb3UgY2FuIHNlbmQgbWUgcGF0Y2hlcywgYnV0IGZvciBtZSB0byBwdWxsIGEgZ2l0IHBhdGNoIGZyb20geW91LCBJCisJbmVlZCB0byBrbm93IHRoYXQgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcsIGFuZCBJIG5lZWQgdG8gYmUgYWJsZQorCXRvIHRydXN0IHRoaW5ncyAqd2l0aG91dCogdGhlbiBoYXZpbmcgdG8gZ28gYW5kIGNoZWNrIGV2ZXJ5CisJaW5kaXZpZHVhbCBjaGFuZ2UgYnkgaGFuZC4KKworKGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzIyNDEzNS8pLiAgCisKK1RvIGF2b2lkIHRoaXMga2luZCBvZiBzaXR1YXRpb24sIGVuc3VyZSB0aGF0IGFsbCBwYXRjaGVzIHdpdGhpbiBhIGdpdmVuCiticmFuY2ggc3RpY2sgY2xvc2VseSB0byB0aGUgYXNzb2NpYXRlZCB0b3BpYzsgYSAiZHJpdmVyIGZpeGVzIiBicmFuY2gKK3Nob3VsZCBub3QgYmUgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gIEFuZCwgbW9zdAoraW1wb3J0YW50bHksIGRvIG5vdCB1c2UgYSBnaXQgdHJlZSB0byBieXBhc3MgdGhlIHJldmlldyBwcm9jZXNzLiAgUG9zdCBhbgorb2NjYXNpb25hbCBzdW1tYXJ5IG9mIHRoZSB0cmVlIHRvIHRoZSByZWxldmFudCBsaXN0LCBhbmQsIHdoZW4gdGhlIHRpbWUgaXMKK3JpZ2h0LCByZXF1ZXN0IHRoYXQgdGhlIHRyZWUgYmUgaW5jbHVkZWQgaW4gbGludXgtbmV4dC4KKworSWYgYW5kIHdoZW4gb3RoZXJzIHN0YXJ0IHRvIHNlbmQgcGF0Y2hlcyBmb3IgaW5jbHVzaW9uIGludG8geW91ciB0cmVlLAorZG9uJ3QgZm9yZ2V0IHRvIHJldmlldyB0aGVtLiAgQWxzbyBlbnN1cmUgdGhhdCB5b3UgbWFpbnRhaW4gdGhlIGNvcnJlY3QKK2F1dGhvcnNoaXAgaW5mb3JtYXRpb247IHRoZSBnaXQgImFtIiB0b29sIGRvZXMgaXRzIGJlc3QgaW4gdGhpcyByZWdhcmQsIGJ1dAoreW91IG1heSBoYXZlIHRvIGFkZCBhICJGcm9tOiIgbGluZSB0byB0aGUgcGF0Y2ggaWYgaXQgaGFzIGJlZW4gcmVsYXllZCB0bworeW91IHZpYSBhIHRoaXJkIHBhcnR5LgorCitXaGVuIHJlcXVlc3RpbmcgYSBwdWxsLCBiZSBzdXJlIHRvIGdpdmUgYWxsIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbjogd2hlcmUKK3lvdXIgdHJlZSBpcywgd2hhdCBicmFuY2ggdG8gcHVsbCwgYW5kIHdoYXQgY2hhbmdlcyB3aWxsIHJlc3VsdCBmcm9tIHRoZQorcHVsbC4gIFRoZSBnaXQgcmVxdWVzdC1wdWxsIGNvbW1hbmQgY2FuIGJlIGhlbHBmdWwgaW4gdGhpcyByZWdhcmQ7IGl0IHdpbGwKK2Zvcm1hdCB0aGUgcmVxdWVzdCBhcyBvdGhlciBkZXZlbG9wZXJzIGV4cGVjdCwgYW5kIHdpbGwgYWxzbyBjaGVjayB0byBiZQorc3VyZSB0aGF0IHlvdSBoYXZlIHJlbWVtYmVyZWQgdG8gcHVzaCB0aG9zZSBjaGFuZ2VzIHRvIHRoZSBwdWJsaWMgc2VydmVyLiAKKworCis3LjI6IFJFVklFV0lORyBQQVRDSEVTCisKK1NvbWUgcmVhZGVycyB3aWxsIGNlcnRhaW5seSBvYmplY3QgdG8gcHV0dGluZyB0aGlzIHNlY3Rpb24gd2l0aCAiYWR2YW5jZWQKK3RvcGljcyIgb24gdGhlIGdyb3VuZHMgdGhhdCBldmVuIGJlZ2lubmluZyBrZXJuZWwgZGV2ZWxvcGVycyBzaG91bGQgYmUKK3Jldmlld2luZyBwYXRjaGVzLiAgSXQgaXMgY2VydGFpbmx5IHRydWUgdGhhdCB0aGVyZSBpcyBubyBiZXR0ZXIgd2F5IHRvCitsZWFybiBob3cgdG8gcHJvZ3JhbSBpbiB0aGUga2VybmVsIGVudmlyb25tZW50IHRoYW4gYnkgbG9va2luZyBhdCBjb2RlCitwb3N0ZWQgYnkgb3RoZXJzLiAgSW4gYWRkaXRpb24sIHJldmlld2VycyBhcmUgZm9yZXZlciBpbiBzaG9ydCBzdXBwbHk7IGJ5Citsb29raW5nIGF0IGNvZGUgeW91IGNhbiBtYWtlIGEgc2lnbmlmaWNhbnQgY29udHJpYnV0aW9uIHRvIHRoZSBwcm9jZXNzIGFzIGEKK3dob2xlLgorCitSZXZpZXdpbmcgY29kZSBjYW4gYmUgYW4gaW50aW1pZGF0aW5nIHByb3NwZWN0LCBlc3BlY2lhbGx5IGZvciBhIG5ldyBrZXJuZWwKK2RldmVsb3BlciB3aG8gbWF5IHdlbGwgZmVlbCBuZXJ2b3VzIGFib3V0IHF1ZXN0aW9uaW5nIGNvZGUgLSBpbiBwdWJsaWMgLQord2hpY2ggaGFzIGJlZW4gcG9zdGVkIGJ5IHRob3NlIHdpdGggbW9yZSBleHBlcmllbmNlLiAgRXZlbiBjb2RlIHdyaXR0ZW4gYnkKK3RoZSBtb3N0IGV4cGVyaWVuY2VkIGRldmVsb3BlcnMgY2FuIGJlIGltcHJvdmVkLCB0aG91Z2guICBQZXJoYXBzIHRoZSBiZXN0CitwaWVjZSBvZiBhZHZpY2UgZm9yIHJldmlld2VycyAoYWxsIHJldmlld2VycykgaXMgdGhpczogcGhyYXNlIHJldmlldworY29tbWVudHMgYXMgcXVlc3Rpb25zIHJhdGhlciB0aGFuIGNyaXRpY2lzbXMuICBBc2tpbmcgImhvdyBkb2VzIHRoZSBsb2NrCitnZXQgcmVsZWFzZWQgaW4gdGhpcyBwYXRoPyIgd2lsbCBhbHdheXMgd29yayBiZXR0ZXIgdGhhbiBzdGF0aW5nICJ0aGUKK2xvY2tpbmcgaGVyZSBpcyB3cm9uZy4iCisKK0RpZmZlcmVudCBkZXZlbG9wZXJzIHdpbGwgcmV2aWV3IGNvZGUgZnJvbSBkaWZmZXJlbnQgcG9pbnRzIG9mIHZpZXcuICBTb21lCithcmUgbW9zdGx5IGNvbmNlcm5lZCB3aXRoIGNvZGluZyBzdHlsZSBhbmQgd2hldGhlciBjb2RlIGxpbmVzIGhhdmUgdHJhaWxpbmcKK3doaXRlIHNwYWNlLiAgT3RoZXJzIHdpbGwgZm9jdXMgcHJpbWFyaWx5IG9uIHdoZXRoZXIgdGhlIGNoYW5nZSBpbXBsZW1lbnRlZAorYnkgdGhlIHBhdGNoIGFzIGEgd2hvbGUgaXMgYSBnb29kIHRoaW5nIGZvciB0aGUga2VybmVsIG9yIG5vdC4gIFlldCBvdGhlcnMKK3dpbGwgY2hlY2sgZm9yIHByb2JsZW1hdGljIGxvY2tpbmcsIGV4Y2Vzc2l2ZSBzdGFjayB1c2FnZSwgcG9zc2libGUKK3NlY3VyaXR5IGlzc3VlcywgZHVwbGljYXRpb24gb2YgY29kZSBmb3VuZCBlbHNld2hlcmUsIGFkZXF1YXRlCitkb2N1bWVudGF0aW9uLCBhZHZlcnNlIGVmZmVjdHMgb24gcGVyZm9ybWFuY2UsIHVzZXItc3BhY2UgQUJJIGNoYW5nZXMsIGV0Yy4KK0FsbCB0eXBlcyBvZiByZXZpZXcsIGlmIHRoZXkgbGVhZCB0byBiZXR0ZXIgY29kZSBnb2luZyBpbnRvIHRoZSBrZXJuZWwsIGFyZQord2VsY29tZSBhbmQgd29ydGh3aGlsZS4KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvOC5Db25jbHVzaW9uIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzguQ29uY2x1c2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTkwYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzguQ29uY2x1c2lvbgpAQCAtMCwwICsxLDc0IEBACis4OiBGT1IgTU9SRSBJTkZPUk1BVElPTgorCitUaGVyZSBhcmUgbnVtZXJvdXMgc291cmNlcyBvZiBpbmZvcm1hdGlvbiBvbiBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQgYW5kCityZWxhdGVkIHRvcGljcy4gIEZpcnN0IGFtb25nIHRob3NlIHdpbGwgYWx3YXlzIGJlIHRoZSBEb2N1bWVudGF0aW9uCitkaXJlY3RvcnkgZm91bmQgaW4gdGhlIGtlcm5lbCBzb3VyY2UgZGlzdHJpYnV0aW9uLiAgVGhlIHRvcC1sZXZlbCBIT1dUTworZmlsZSBpcyBhbiBpbXBvcnRhbnQgc3RhcnRpbmcgcG9pbnQ7IFN1Ym1pdHRpbmdQYXRjaGVzIGFuZAorU3VibWl0dGluZ0RyaXZlcnMgYXJlIGFsc28gc29tZXRoaW5nIHdoaWNoIGFsbCBrZXJuZWwgZGV2ZWxvcGVycyBzaG91bGQKK3JlYWQuICBNYW55IGludGVybmFsIGtlcm5lbCBBUElzIGFyZSBkb2N1bWVudGVkIHVzaW5nIHRoZSBrZXJuZWxkb2MKK21lY2hhbmlzbTsgIm1ha2UgaHRtbGRvY3MiIG9yICJtYWtlIHBkZmRvY3MiIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHRob3NlCitkb2N1bWVudHMgaW4gSFRNTCBvciBQREYgZm9ybWF0ICh0aG91Z2ggdGhlIHZlcnNpb24gb2YgVGVYIHNoaXBwZWQgYnkgc29tZQorZGlzdHJpYnV0aW9ucyBydW5zIGludG8gaW50ZXJuYWwgbGltaXRzIGFuZCBmYWlscyB0byBwcm9jZXNzIHRoZSBkb2N1bWVudHMKK3Byb3Blcmx5KS4KKworVmFyaW91cyB3ZWIgc2l0ZXMgZGlzY3VzcyBrZXJuZWwgZGV2ZWxvcG1lbnQgYXQgYWxsIGxldmVscyBvZiBkZXRhaWwuICBZb3VyCithdXRob3Igd291bGQgbGlrZSB0byBodW1ibHkgc3VnZ2VzdCBodHRwOi8vbHduLm5ldC8gYXMgYSBzb3VyY2U7CitpbmZvcm1hdGlvbiBvbiBtYW55IHNwZWNpZmljIGtlcm5lbCB0b3BpY3MgY2FuIGJlIGZvdW5kIHZpYSB0aGUgTFdOIGtlcm5lbAoraW5kZXggYXQ6CisKKwlodHRwOi8vbHduLm5ldC9LZXJuZWwvSW5kZXgvCisKK0JleW9uZCB0aGF0LCBhIHZhbHVhYmxlIHJlc291cmNlIGZvciBrZXJuZWwgZGV2ZWxvcGVycyBpczoKKworCWh0dHA6Ly9rZXJuZWxuZXdiaWVzLm9yZy8KKworSW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbnV4LW5leHQgdHJlZSBnYXRoZXJzIGF0OgorCisJaHR0cDovL2xpbnV4LmYtc2VpZGVsLmRlL2xpbnV4LW5leHQvcG13aWtpLworCitBbmQsIG9mIGNvdXJzZSwgb25lIHNob3VsZCBub3QgZm9yZ2V0IGh0dHA6Ly9rZXJuZWwub3JnLywgdGhlIGRlZmluaXRpdmUKK2xvY2F0aW9uIGZvciBrZXJuZWwgcmVsZWFzZSBpbmZvcm1hdGlvbi4KKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGJvb2tzIG9uIGtlcm5lbCBkZXZlbG9wbWVudDoKKworCUxpbnV4IERldmljZSBEcml2ZXJzLCAzcmQgRWRpdGlvbiAoSm9uYXRoYW4gQ29yYmV0LCBBbGVzc2FuZHJvCisJUnViaW5pLCBhbmQgR3JlZyBLcm9haC1IYXJ0bWFuKS4gIE9ubGluZSBhdAorCWh0dHA6Ly9sd24ubmV0L0tlcm5lbC9MREQzLy4KKworCUxpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCAoUm9iZXJ0IExvdmUpLgorCisJVW5kZXJzdGFuZGluZyB0aGUgTGludXggS2VybmVsIChEYW5pZWwgQm92ZXQgYW5kIE1hcmNvIENlc2F0aSkuCisKK0FsbCBvZiB0aGVzZSBib29rcyBzdWZmZXIgZnJvbSBhIGNvbW1vbiBmYXVsdCwgdGhvdWdoOiB0aGV5IHRlbmQgdG8gYmUKK3NvbWV3aGF0IG9ic29sZXRlIGJ5IHRoZSB0aW1lIHRoZXkgaGl0IHRoZSBzaGVsdmVzLCBhbmQgdGhleSBoYXZlIGJlZW4gb24KK3RoZSBzaGVsdmVzIGZvciBhIHdoaWxlIG5vdy4gIFN0aWxsLCB0aGVyZSBpcyBxdWl0ZSBhIGJpdCBvZiBnb29kCitpbmZvcm1hdGlvbiB0byBiZSBmb3VuZCB0aGVyZS4KKworRG9jdW1lbnRhdGlvbiBmb3IgZ2l0IGNhbiBiZSBmb3VuZCBhdDoKKworCWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzLworCisJaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MvdXNlci1tYW51YWwuaHRtbAorCisKKzk6IENPTkNMVVNJT04KKworQ29uZ3JhdHVsYXRpb25zIHRvIGFueWJvZHkgd2hvIGhhcyBtYWRlIGl0IHRocm91Z2ggdGhpcyBsb25nLXdpbmRlZAorZG9jdW1lbnQuICBIb3BlZnVsbHkgaXQgaGFzIHByb3ZpZGVkIGEgaGVscGZ1bCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUKK0xpbnV4IGtlcm5lbCBpcyBkZXZlbG9wZWQgYW5kIGhvdyB5b3UgY2FuIHBhcnRpY2lwYXRlIGluIHRoYXQgcHJvY2Vzcy4KKworSW4gdGhlIGVuZCwgaXQncyB0aGUgcGFydGljaXBhdGlvbiB0aGF0IG1hdHRlcnMuICBBbnkgb3BlbiBzb3VyY2Ugc29mdHdhcmUKK3Byb2plY3QgaXMgbm8gbW9yZSB0aGFuIHRoZSBzdW0gb2Ygd2hhdCBpdHMgY29udHJpYnV0b3JzIHB1dCBpbnRvIGl0LiAgVGhlCitMaW51eCBrZXJuZWwgaGFzIHByb2dyZXNzZWQgYXMgcXVpY2tseSBhbmQgYXMgd2VsbCBhcyBpdCBoYXMgYmVjYXVzZSBpdCBoYXMKK2JlZW4gaGVscGVkIGJ5IGFuIGltcHJlc3NpdmVseSBsYXJnZSBncm91cCBvZiBkZXZlbG9wZXJzLCBhbGwgb2Ygd2hvbSBhcmUKK3dvcmtpbmcgdG8gbWFrZSBpdCBiZXR0ZXIuICBUaGUga2VybmVsIGlzIGEgcHJlbWllciBleGFtcGxlIG9mIHdoYXQgY2FuIGJlCitkb25lIHdoZW4gdGhvdXNhbmRzIG9mIHBlb3BsZSB3b3JrIHRvZ2V0aGVyIHRvd2FyZCBhIGNvbW1vbiBnb2FsLgorCitUaGUga2VybmVsIGNhbiBhbHdheXMgYmVuZWZpdCBmcm9tIGEgbGFyZ2VyIGRldmVsb3BlciBiYXNlLCB0aG91Z2guICBUaGVyZQoraXMgYWx3YXlzIG1vcmUgd29yayB0byBkby4gIEJ1dCwganVzdCBhcyBpbXBvcnRhbnRseSwgbW9zdCBvdGhlcgorcGFydGljaXBhbnRzIGluIHRoZSBMaW51eCBlY29zeXN0ZW0gY2FuIGJlbmVmaXQgdGhyb3VnaCBjb250cmlidXRpbmcgdG8gdGhlCitrZXJuZWwuICBHZXR0aW5nIGNvZGUgaW50byB0aGUgbWFpbmxpbmUgaXMgdGhlIGtleSB0byBoaWdoZXIgY29kZSBxdWFsaXR5LAorbG93ZXIgbWFpbnRlbmFuY2UgYW5kIGRpc3RyaWJ1dGlvbiBjb3N0cywgYSBoaWdoZXIgbGV2ZWwgb2YgaW5mbHVlbmNlIG92ZXIKK3RoZSBkaXJlY3Rpb24gb2Yga2VybmVsIGRldmVsb3BtZW50LCBhbmQgbW9yZS4gIEl0IGlzIGEgc2l0dWF0aW9uIHdoZXJlCitldmVyeWJvZHkgaW52b2x2ZWQgd2lucy4gIEZpcmUgdXAgeW91ciBlZGl0b3IgYW5kIGNvbWUgam9pbiB1czsgeW91IHdpbGwgYmUKK21vcmUgdGhhbiB3ZWxjb21lLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKaW5kZXggMDVjODA2NC4uMmJlMDgyNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CkBAIC0yNTcxLDYgKzI1NzEsOSBAQAogCQkxNjAgPSAvZGV2L3VzYi9sZWdvdXNidG93ZXIwCTFzdCBVU0IgTGVnb3Rvd2VyIGRldmljZQogCQkgICAgLi4uCiAJCTE3NSA9IC9kZXYvdXNiL2xlZ291c2J0b3dlcjE1CTE2dGggVVNCIExlZ290b3dlciBkZXZpY2UKKwkJMTc2ID0gL2Rldi91c2IvdXNidG1jMQlGaXJzdCBVU0IgVE1DIGRldmljZQorCQkgICAuLi4KKwkJMTkyID0gL2Rldi91c2IvdXNidG1jMTYJMTZ0aCBVU0IgVE1DIGRldmljZQogCQkyNDAgPSAvZGV2L3VzYi9kYWJ1c2IwCUZpcnN0IGRhdWJ1c2IgZGV2aWNlCiAJCSAgICAuLi4KIAkJMjQzID0gL2Rldi91c2IvZGFidXNiMwlGb3VydGggZGFidXNiIGRldmljZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZiBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKaW5kZXggMjc4MDkzNS4uMWU4OWE1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgorKysgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCkBAIC0yLDExICsyLDEzIEBACiAqLmF1eAogKi5iaW4KICouY3BpbwotKi5jc3MKKyouY3NwCisqLmRzcAogKi5kdmkKKyouZWxmCiAqLmVwcwotKi5mdy5nZW4uUwogKi5mdworKi5nZW4uUwogKi5naWYKICouZ3JlcAogKi5ncnAKQEAgLTMwLDYgKzMyLDcgQEAKICoucwogKi5zZ21sCiAqLnNvCisqLnNvLmRiZwogKi5zeW10eXBlcwogKi50YWIuYwogKi50YWIuaApAQCAtMzgsMjQgKzQxLDE3IEBACiAqLnhtbAogKl9NT0RVTEVTCiAqX3ZnYTE2LmMKLSpjc2NvcGUqCiAqfgogKi45CiAqLjkuZ3oKIC4qCi0uY3Njb3BlCi0uZ2l0aWdub3JlCi0ubWFpbG1hcAogLm1tCiA1M2M3MDBfZC5oCi01M2M4eHhfZC5oKgotQ09QWUlORwotQ1JFRElUUwogQ1ZTCiBDaGFuZ2VTZXQKIEltYWdlCiBLZXJudHlwZXMKLU1PRFMudHh0CitNb2R1bGUubWFya2VycwogTW9kdWxlLnN5bXZlcnMKIFBFTkRJTkcKIFNDQ1MKQEAgLTczLDcgKzY5LDkgQEAKIGJib290c2VjdAogYmluMmMKIGJpbmtlcm5lbC5zcGVjCitiaW5vZmZzZXQKIGJvb3RzZWN0Citib3VuZHMuaAogYnNldHVwCiBidGZpeHVwcHJlcAogYnVpbGQKQEAgLTg5LDM5ICs4NywzNiBAQAogY29uZmlnX2RhdGEuZ3oqCiBjb25tYWtlaGFzaAogY29uc29sZW1hcF9kZWZ0YmwuYyoKK2NwdXN0ci5oCiBjcmMzMnRhYmxlLmgqCiBjc2NvcGUuKgotZGVma2V5bWFwLmMqCitkZWZrZXltYXAuYwogZGV2bGlzdC5oKgogZG9jcHJvYwotZHVtbXlfc3ltLmMqCiBlbGYyZWNvZmYKIGVsZmNvbmZpZy5oKgotZmlsZWxpc3QKIGZpeGRlcAogZm9yZTIwMGVfbWtmaXJtCiBmb3JlMjAwZV9wY2FfZncuYyoKIGdjb25mCiBnZW4tZGV2bGlzdAotZ2VuLWtkYl9jbWRzLmMqCiBnZW5fY3JjMzJ0YWJsZQogZ2VuX2luaXRfY3BpbwogZ2Vua3N5bXMKLWdlbnRibAogKl9ncmF5MjU2LmMKK2loZXgyZncKIGlrY29uZmlnLmgqCiBpbml0cmFtZnNfZGF0YS5jcGlvCiBpbml0cmFtZnNfZGF0YS5jcGlvLmd6CiBpbml0cmFtZnNfbGlzdAoga2FsbHN5bXMKIGtjb25maWcKLWtjb25maWcudGsKLWtleXdvcmRzLmMqCitrZXl3b3Jkcy5jCiBrc3ltLmMqCiBrc3ltLmgqCiBreGdldHRleHQKIGxrY19kZWZzLmgKLWxleC5jKgorbGV4LmMKIGxleC4qLmMKIGxvZ29fKi5jCiBsb2dvXypfY2x1dDIyNC5jCkBAIC0xMzAsNyArMTI1LDYgQEAKIG1hY2gtdHlwZXMKIG1hY2gtdHlwZXMuaAogbWFjaHR5cGVzLmgKLW1ha2VfdGltZXNfaAogbWFwCiBtYXVpX2Jvb3QuaAogbWNvbmYKQEAgLTEzOCw2ICsxMzIsNyBAQAogbWtfZWxmY29uZmlnCiBta2Jvb3QKIG1rYnVnYm9vdAorbWtjcHVzdHIKIG1rZGVwCiBta3ByZXAKIG1rdGFibGVzCkBAIC0xNDUsMTEgKzE0MCwxMiBAQAogbW9kcG9zdAogbW9kdWxlcy5vcmRlcgogbW9kdmVyc2lvbnMuaCoKK25jc2NvcGUuKgogb2Zmc2V0LmgKIG9mZnNldHMuaAogb3VpLmMqCi1wYXJzZS5jKgotcGFyc2UuaCoKK3BhcnNlLmMKK3BhcnNlLmgKIHBhdGNoZXMqCiBwY2EyMDBlLmJpbgogcGNhMjAwZV9lY2QuYmluMgpAQCAtMTU3LDcgKzE1Myw3IEBACiBwaWdneWJhY2sKIHBubXRvbG9nbwogcHBjX2RlZnMuaCoKLXByb21jb25fdGJsLmMqCitwcm9tY29uX3RibC5jCiBwc3NfYm9vdC5oCiBxY29uZgogcmFpZDZhbHRpdmVjKi5jCkBAIC0xNjgsMjcgKzE2NCwzOCBAQAogc2V0dXAKIHNldHVwLmJpbgogc2V0dXAuZWxmCi1zaW03MTBfZC5oKgogc0ltYWdlCiBzbV90YmwqCiBzcGxpdC1pbmNsdWRlCitzeXNjYWxsdGFiLmgKIHRhZ3MKIHRmdHBib290LmltZwogdGltZWNvbnN0LmgKIHRpbWVzLmgqCi10a3BhcnNlCiB0cml4X2Jvb3QuaAogdXRzcmVsZWFzZS5oKgordmRzby1zeW1zLmxkcwogdmRzby5sZHMKK3Zkc28zMi1pbnQ4MC1zeW1zLmxkcwordmRzbzMyLXN5bXMubGRzCit2ZHNvMzItc3lzY2FsbC1zeW1zLmxkcwordmRzbzMyLXN5c2VudGVyLXN5bXMubGRzCit2ZHNvMzIubGRzCit2ZHNvMzIuc28uZGJnCit2ZHNvNjQubGRzCit2ZHNvNjQuc28uZGJnCiB2ZXJzaW9uLmgqCiB2bWxpbnV4CiB2bWxpbnV4LSoKIHZtbGludXguYW91dAotdm1saW51eCoubGRzKgotdm1saW51eCouc2NyCit2bWxpbnV4LmxkcwogdnN5c2NhbGwubGRzCit2c3lzY2FsbF8zMi5sZHMKIHdhbnhsZncuaW5jCiB1SW1hZ2UKIHVuaWZkZWYKK3dha2V1cC5iaW4KK3dha2V1cC5lbGYKK3dha2V1cC5sZHMKIHpJbWFnZSoKIHpjb25mLmhhc2guYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9pbnRlbGZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvaW50ZWxmYi50eHQKaW5kZXggMjdhMzE2MC4uZGQ5ZTk0NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYi9pbnRlbGZiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL2ludGVsZmIudHh0CkBAIC0xNCw2ICsxNCw3IEBACiAJSW50ZWwgOTE1R00KIAlJbnRlbCA5NDVHCiAJSW50ZWwgOTQ1R00KKwlJbnRlbCA5NDVHTUUKIAlJbnRlbCA5NjVHCiAJSW50ZWwgOTY1R00KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi91dmVzYWZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvdXZlc2FmYi50eHQKaW5kZXggYmNmYzIzMy4uN2FjM2M0MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYi91dmVzYWZiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL3V2ZXNhZmIudHh0CkBAIC01Miw3ICs1Miw3IEBACiAKICB2aWRlbz11dmVzYWZiOjEwMjR4NzY4LTMyLG10cnI6Myx5d3JhcCAoY29tcGlsZWQgaW50byB0aGUga2VybmVsKQogCi0gIyBtb2Rwcm9iZSB1dmVzYWZiIG1vZGU9MTAyNHg3NjgtMzIgbXRycj0zIHNjcm9sbD15d3JhcCAgKG1vZHVsZSkKKyAjIG1vZHByb2JlIHV2ZXNhZmIgbW9kZV9vcHRpb249MTAyNHg3NjgtMzIgbXRycj0zIHNjcm9sbD15d3JhcCAgKG1vZHVsZSkKIAogQWNjZXB0ZWQgb3B0aW9uczoKIApAQCAtMTA1LDcgKzEwNSw3IEBACiA8bW9kZT4gIFRoZSBtb2RlIHlvdSB3YW50IHRvIHNldCwgaW4gdGhlIHN0YW5kYXJkIG1vZGVkYiBmb3JtYXQuICBSZWZlciB0bwogICAgICAgICBtb2RlZGIudHh0IGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uLiAgV2hlbiB1dmVzYWZiIGlzIGNvbXBpbGVkIGFzCiAgICAgICAgIGEgbW9kdWxlLCB0aGUgbW9kZSBzdHJpbmcgc2hvdWxkIGJlIHByb3ZpZGVkIGFzIGEgdmFsdWUgb2YgdGhlCi0gICAgICAgICdtb2RlJyBvcHRpb24uCisgICAgICAgICdtb2RlX29wdGlvbicgb3B0aW9uLgogCiB2YmVtb2RlOngKICAgICAgICAgRm9yY2UgdGhlIHVzZSBvZiBWQkUgbW9kZSB4LiAgVGhlIG1vZGUgd2lsbCBvbmx5IGJlIHNldCBpZiBpdCdzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL3ZpYWZiLm1vZGVzIGIvRG9jdW1lbnRhdGlvbi9mYi92aWFmYi5tb2RlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmU1YjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi92aWFmYi5tb2RlcwpAQCAtMCwwICsxLDg3MCBAQAorIworIworIyAgIFRoZXNlIGRhdGEgYXJlIGJhc2VkIG9uIHRoZSBDUlRDIHBhcmFtZXRlcnMgaW4KKyMKKyMgICAgICAgVklBIEludGVncmF0aW9uIEdyYXBoaWNzIENoaXAKKyMgICAgICAgKEMpIDIwMDQgVklBIFRlY2hub2xvZ2llcyBJbmMuCisjCisKKyMKKyMgICA2NDB4NDgwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDI1LjE3NSBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgNjQwICAgICA0ODAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDMxLjQ2OSBrSHogIDU5Ljk0IEh6CisjICAgU3luYyBXaWR0aCAgICAgIDMuODEzIHVzICAgIDAuMDY0IG1zCisjICAgICAgICAgICAgICAgMTIgY2hhcnMgICAgMiBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjYzNiB1cyAgICAwLjMxOCAgbXMKKyMgICAgICAgICAgICAgICAyIGNoYXJzICAgICAxMCBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAxLjkwNyB1cyAgICAxLjA0OCAgbXMKKyMgICAgICAgICAgICAgICA2IGNoYXJzICAgICAzMyBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAyNS40MjIgdXMgICAxNS4yNTMgbXMKKyMgICAgICAgICAgICAgICA4MCBjaGFycyAgICA0ODAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNi4zNTYgdXMgICAgMS40MzAgbXMKKyMgICAgICAgICAgICAgICAyMCBjaGFycyAgICA0NSBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBuZWdhdGl2ZSAgICBuZWdhdGl2ZQorIworCittb2RlICI2NDB4NDgwLTYwIgorIyBEOiAyNS4xNzUgTUh6LCBIOiAzMS40Njkga0h6LCBWOiA1OS45NCBIegorICAgIGdlb21ldHJ5IDY0MCA0ODAgNjQwIDQ4MCAzMgorICAgIHRpbWluZ3MgMzk3MjIgNDggMTYgMzMgMTAgOTYgMiBlbmRtb2RlIG1vZGUgIjQ4MHg2NDAtNjAiCisjIEQ6IDI0LjgyMyBNSHosIEg6IDM5Ljc4MCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgNDgwIDY0MCA0ODAgNjQwIDMyIHRpbWluZ3MgMzk3MjIgNzIgMjQgMTkgMSA0OCAzIGVuZG1vZGUKKyMKKyMgICA2NDB4NDgwLCA3NSBIeiwgTm9uLUludGVybGFjZWQgKDMxLjUwIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA2NDAgICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgMzcuNTAwIGtIeiAgNzUuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMi4wMzIgdXMgICAgMC4wODAgbXMKKyMgICAgICAgICAgICAgICA4IGNoYXJzICAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNTA4IHVzICAgIDAuMDI3IG1zCisjICAgICAgICAgICAgICAgMiBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAzLjgxMCB1cyAgICAwLjQyNyBtcworIyAgICAgICAgICAgICAgIDE1IGNoYXJzICAgIDE2IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDIwLjMxNyB1cyAgIDEyLjgwMCBtcworIyAgICAgICAgICAgICAgIDgwIGNoYXJzICAgIDQ4MCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA2LjM0OSB1cyAgICAwLjUzMyBtcworIyAgICAgICAgICAgICAgIDI1IGNoYXJzICAgIDIwIGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIG5lZ2F0aXZlCisjCisgICAgbW9kZSAiNjQweDQ4MC03NSIKKyMgRDogMzEuNTAgTUh6LCBIOiAzNy41MDAga0h6LCBWOiA3NS4wMCBIegorICAgIGdlb21ldHJ5IDY0MCA0ODAgNjQwIDQ4MCAzMiB0aW1pbmdzIDMxNzQ3IDEyMCAxNiAxNiAxIDY0IDMgZW5kbW9kZQorIworIyAgIDY0MHg0ODAsIDg1IEh6LCBOb24tSW50ZXJsYWNlZCAoMzYuMDAwIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA2NDAgICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICA0My4yNjkga0h6ICA4NS4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjU1NiB1cyAgICAwLjA2OSBtcworIyAgICAgICAgICAgICAgIDcgY2hhcnMgICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMS41NTYgdXMgICAgMC4wMjMgbXMKKyMgICAgICAgICAgICAgICA3IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuMjIyIHVzICAgIDAuNTc4IG1zCisjICAgICAgICAgICAgICAgMTAgY2hhcnMgICAgMjUgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTcuNzc4IHVzICAgMTEuMDkzIG1zCisjICAgICAgICAgICAgICAgODAgY2hhcnMgICAgNDgwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDUuMzMzIHVzICAgIDAuNjcwIG1zCisjICAgICAgICAgICAgICAgMjQgY2hhcnMgICAgMjkgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgbmVnYXRpdmUgICAgbmVnYXRpdmUKKyMKKyAgICBtb2RlICI2NDB4NDgwLTg1IgorIyBEOiAzNi4wMDAgTUh6LCBIOiA0My4yNjkga0h6LCBWOiA4NS4wMCBIegorICAgIGdlb21ldHJ5IDY0MCA0ODAgNjQwIDQ4MCAzMiB0aW1pbmdzIDI3Nzc3IDgwIDU2IDI1IDEgNTYgMyBlbmRtb2RlCisjCisjICAgNjQweDQ4MCwgMTAwIEh6LCBOb24tSW50ZXJsYWNlZCAoNDMuMTYzIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA2NDAgICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNTAuOTAwIGtIeiAgMTAwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuNDgzIHVzICAgIDAuMDU4IG1zCisjICAgICAgICAgICAgICAgOCBjaGFycyAgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjkyNyB1cyAgICAwLjAxOSBtcworIyAgICAgICAgICAgICAgIDUgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi40MDkgdXMgICAgMC40NzUgbXMKKyMgICAgICAgICAgICAgICAxMyBjaGFycyAgICAyNSBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxNC44MjcgdXMgICA5LjQzMCBtcworIyAgICAgICAgICAgICAgIDgwIGNoYXJzICAgIDQ4MCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA0LjgxOSB1cyAgICAwLjU3MCBtcworIyAgICAgICAgICAgICAgIDI2IGNoYXJzICAgIDI5IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiNjQweDQ4MC0xMDAiCisjIEQ6IDQzLjE2MyBNSHosIEg6IDUwLjkwMCBrSHosIFY6IDEwMC4wMCBIegorICAgIGdlb21ldHJ5IDY0MCA0ODAgNjQwIDQ4MCAzMiB0aW1pbmdzIDIzMTY4IDEwNCA0MCAyNSAxIDY0IDMgZW5kbW9kZQorIworIyAgIDY0MHg0ODAsIDEyMCBIeiwgTm9uLUludGVybGFjZWQgKDUyLjQwNiBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgNjQwICAgICA0ODAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDYxLjgwMCBrSHogIDEyMC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjIyMSB1cyAgICAwLjA0OCBtcworIyAgICAgICAgICAgICAgIDggY2hhcnMgICAgICAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNzYzIHVzICAgIDAuMDE2IG1zCisjICAgICAgICAgICAgICAgNSBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAxLjk4NCB1cyAgICAwLjQ5NiBtcworIyAgICAgICAgICAgICAgIDEzIGNoYXJzICAgIDMxIGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDEyLjIxMiB1cyAgIDcuNzY3IG1zCisjICAgICAgICAgICAgICAgODAgY2hhcnMgICAgNDgwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDMuOTY5IHVzICAgIDAuNTY2IG1zCisjICAgICAgICAgICAgICAgMjYgY2hhcnMgICAgMzUgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI2NDB4NDgwLTEyMCIKKyMgRDogNTIuNDA2IE1IeiwgSDogNjEuODAwIGtIeiwgVjogMTIwLjAwIEh6CisgICAgZ2VvbWV0cnkgNjQwIDQ4MCA2NDAgNDgwIDMyIHRpbWluZ3MgMTkwODEgMTA0IDQwIDMxIDEgNjQgMyBlbmRtb2RlCisjCisjICAgNzIweDQ4MCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgyNi44ODAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDcyMCAgICAgNDgwCisjICAgU2NhbiBGcmVxdWVuY3kgICAgICAzMC4wMDAga0h6ICA2MC4yNDEgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMi42NzkgdXMgICAgMC4wOTkgbXMKKyMgICAgICAgICAgICAgICA5IGNoYXJzICAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNTk1IHVzICAgIDAuMDMzIG1zCisjICAgICAgICAgICAgICAgMiBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAzLjI3NCB1cyAgICAwLjQ2MiBtcworIyAgICAgICAgICAgICAgIDExIGNoYXJzICAgIDE0IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDI2Ljc4NiB1cyAgIDE2LjAwMCBtcworIyAgICAgICAgICAgICAgIDkwIGNoYXJzICAgIDQ4MCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA2LjU0OCB1cyAgICAwLjYwMCBtcworIyAgICAgICAgICAgICAgIDIyIGNoYXJzICAgIDE4IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiNzIweDQ4MC02MCIKKyMgRDogMjYuODgwIE1IeiwgSDogMzAuMDAwIGtIeiwgVjogNjAuMjQgSHoKKyAgICBnZW9tZXRyeSA3MjAgNDgwIDcyMCA0ODAgMzIgdGltaW5ncyAzNzIwMiA4OCAxNiAxNCAxIDcyIDMgZW5kbW9kZQorIworIyAgIDgwMHg0ODAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMjkuNTgxIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICAgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDgwMCAgICAgICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAyOS44OTIga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAyLjcwNCB1cyAgICAxMDAuNjA0IHVzCisjICAgICAgICAgICAgICAgICAgIDEwIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC41NDEgdXMgICAgMzMuNTM1IHVzCisjICAgICAgICAgICAgICAgICAgIDIgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMy4yNDUgdXMgICAgNDM1Ljk0OSB1cworIyAgICAgICAgICAgICAgICAgICAxMiBjaGFycyAgICAxMyBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAyNy4wNDQgdXMgICAxNi4wOTcgbXMKKyMgICAgICAgICAgICAgICAgICAgMTAwIGNoYXJzICAgNDgwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDYuNDkxIHVzICAgIDAuNTcwIG1zCisjICAgICAgICAgICAgICAgICAgIDI0IGNoYXJzICAgIDE3IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiODAweDQ4MC02MCIKKyMgRDogMjkuNTAwIE1IeiwgSDogMjkuNzM4IGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSA4MDAgNDgwIDgwMCA0ODAgMzIgdGltaW5ncyAzMzgwNSA5NiAyNCAxMCAzIDcyIDcgZW5kbW9kZQorIworIyAgIDcyMHg1NzYsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMzIuNjY4IE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA3MjAgICAgIDU3NgorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgMzUuODIwIGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMi4yMDQgdXMgICAgMC4wODMgbXMKKyMgICAgICAgICAgICAgICA5IGNoYXJzICAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNzM1IHVzICAgIDAuMDI3IG1zCisjICAgICAgICAgICAgICAgMyBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjkzOSB1cyAgICAwLjQ1OSBtcworIyAgICAgICAgICAgICAgIDEyIGNoYXJzICAgIDE3IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDIyLjA0MCB1cyAgIDE2LjA4MCBtcworIyAgICAgICAgICAgICAgIDkwIGNoYXJzICAgIDQ3NiBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA1Ljg3NyB1cyAgICAwLjU4NiBtcworIyAgICAgICAgICAgICAgIDI0IGNoYXJzICAgIDIxIGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiNzIweDU3Ni02MCIKKyMgRDogMzIuNjY4IE1IeiwgSDogMzUuODIwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSA3MjAgNTc2IDcyMCA1NzYgMzIgdGltaW5ncyAzMDYxMSA5NiAyNCAxNyAxIDcyIDMgZW5kbW9kZQorIworIyAgIDgwMHg2MDAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoNDAuMDAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDgwMCAgICAgNjAwCisjICAgU2NhbiBGcmVxdWVuY3kgICAgICAzNy44Nzkga0h6ICA2MC4zMiBIegorIyAgIFN5bmMgV2lkdGggICAgICAzLjIwMCB1cyAgICAwLjEwNiBtcworIyAgICAgICAgICAgICAgIDE2IGNoYXJzICAgIDQgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMS4wMDAgdXMgICAgMC4wMjYgbXMKKyMgICAgICAgICAgICAgICA1IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuMjAwIHVzICAgIDAuNjA3IG1zCisjICAgICAgICAgICAgICAgMTEgY2hhcnMgICAgMjMgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMjAuMDAwIHVzICAgMTUuODQwIG1zCisjICAgICAgICAgICAgICAgMTAwIGNoYXJzICAgNjAwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDYuNDAwIHVzICAgIDAuNzM5IG1zCisjICAgICAgICAgICAgICAgMzIgY2hhcnMgICAgMjggbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI4MDB4NjAwLTYwIgorIyBEOiA0MC4wMCBNSHosIEg6IDM3Ljg3OSBrSHosIFY6IDYwLjMyIEh6CisgICAgZ2VvbWV0cnkgODAwIDYwMCA4MDAgNjAwIDMyCisgICAgdGltaW5ncyAyNTAwMCA4OCA0MCAyMyAxIDEyOCA0IGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgODAweDYwMCwgNzUgSHosIE5vbi1JbnRlcmxhY2VkICg0OS41MCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgODAwICAgICA2MDAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDQ2Ljg3NSBrSHogIDc1LjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuNjE2IHVzICAgIDAuMDY0IG1zCisjICAgICAgICAgICAgICAgMTAgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjMyMyB1cyAgICAwLjAyMSBtcworIyAgICAgICAgICAgICAgIDIgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMy4yMzIgdXMgICAgMC40NDggbXMKKyMgICAgICAgICAgICAgICAyMCBjaGFycyAgICAyMSBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxNi4xNjIgdXMgICAxMi44MDAgbXMKKyMgICAgICAgICAgICAgICAxMDAgY2hhcnMgICA2MDAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNS4xNzIgdXMgICAgMC41MzMgbXMKKyMgICAgICAgICAgICAgICAzMiBjaGFycyAgICAyNSBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjgwMHg2MDAtNzUiCisjIEQ6IDQ5LjUwIE1IeiwgSDogNDYuODc1IGtIeiwgVjogNzUuMDAgSHoKKyAgICBnZW9tZXRyeSA4MDAgNjAwIDgwMCA2MDAgMzIKKyAgICB0aW1pbmdzIDIwMjAzIDE2MCAxNiAyMSAxIDgwIDMgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUKKyMKKyMgICA4MDB4NjAwLCA4NSBIeiwgTm9uLUludGVybGFjZWQgKDU2LjI1IE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA4MDAgICAgIDYwMAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNTMuNjc0IGtIeiAgODUuMDYxIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMTM4IHVzICAgIDAuMDU2IG1zCisjICAgICAgICAgICAgICAgOCBjaGFycyAgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjU2OSB1cyAgICAwLjAxOSBtcworIyAgICAgICAgICAgICAgIDQgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi43MDIgdXMgICAgMC41MDMgbXMKKyMgICAgICAgICAgICAgICAxOSBjaGFycyAgICAyNyBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxNC4yMjIgdXMgICAxMS4xNzkgbXMKKyMgICAgICAgICAgICAgICAxMDAgY2hhcnMgICA2MDAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNC40MDkgdXMgICAgMC41NzggbXMKKyMgICAgICAgICAgICAgICAzMSBjaGFycyAgICAzMSBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjgwMHg2MDAtODUiCisjIEQ6IDU2LjI1IE1IeiwgSDogNTMuNjc0IGtIeiwgVjogODUuMDYxIEh6CisgICAgZ2VvbWV0cnkgODAwIDYwMCA4MDAgNjAwIDMyCisgICAgdGltaW5ncyAxNzc3NyAxNTIgMzIgMjcgMSA2NCAzIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgODAweDYwMCwgMTAwIEh6LCBOb24tSW50ZXJsYWNlZCAoNjcuNTAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDgwMCAgICAgNjAwCisjICAgU2NhbiBGcmVxdWVuY3kgICAgICA2Mi41MDAga0h6ICAxMDAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMC45NDggdXMgICAgMC4wNjQgbXMKKyMgICAgICAgICAgICAgICA4IGNoYXJzICAgICA0IGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuMDAwIHVzICAgIDAuMTEyIG1zCisjICAgICAgICAgICAgICAgMCBjaGFycyAgICAgNyBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAzLjIwMCB1cyAgICAwLjIyNCBtcworIyAgICAgICAgICAgICAgIDI3IGNoYXJzICAgIDE0IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDExLjg1MiB1cyAgIDkuNjAwIG1zCisjICAgICAgICAgICAgICAgMTAwIGNoYXJzICAgNjAwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDQuMTQ4IHVzICAgIDAuNDAwIG1zCisjICAgICAgICAgICAgICAgMzUgY2hhcnMgICAgMjUgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI4MDB4NjAwLTEwMCIKKyMgRDogNjcuNTAgTUh6LCBIOiA2Mi41MDAga0h6LCBWOiAxMDAuMDAgSHoKKyAgICBnZW9tZXRyeSA4MDAgNjAwIDgwMCA2MDAgMzIKKyAgICB0aW1pbmdzIDE0NjY3IDIxNiAwIDE0IDcgNjQgNCBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDgwMHg2MDAsIDEyMCBIeiwgTm9uLUludGVybGFjZWQgKDgzLjk1MCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgODAwICAgICA2MDAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgNzcuMTYwIGtIeiAgMTIwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMDQ4IHVzICAgIDAuMDM5IG1zCisjICAgICAgICAgICAgICAgMTEgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjY2NyB1cyAgICAwLjAxMyBtcworIyAgICAgICAgICAgICAgIDcgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMS43MTUgdXMgICAgMC41MDcgbXMKKyMgICAgICAgICAgICAgICAxOCBjaGFycyAgICAzOSBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICA5LjUyOSB1cyAgICA3Ljc3NiBtcworIyAgICAgICAgICAgICAgIDEwMCBjaGFycyAgIDYwMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAzLjQzMSB1cyAgICAwLjU1NyBtcworIyAgICAgICAgICAgICAgIDM2IGNoYXJzICAgIDQzIGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiODAweDYwMC0xMjAiCisjIEQ6IDgzLjk1MCBNSHosIEg6IDc3LjE2MCBrSHosIFY6IDEyMC4wMCBIegorICAgIGdlb21ldHJ5IDgwMCA2MDAgODAwIDYwMCAzMgorICAgIHRpbWluZ3MgMTE5MTIgMTQ0IDU2IDM5IDEgODggMyBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDg0OHg0ODAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMzEuNDkwIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA4NDggICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAyOS44MjAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAyLjc5NSB1cyAgICAwLjA5OSBtcworIyAgICAgICAgICAgICAgIDExIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC41MDggdXMgICAgMC4wMzMgbXMKKyMgICAgICAgICAgICAgICAyIGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDMuMzAzIHVzICAgIDAuNDI5IG1zCisjICAgICAgICAgICAgICAgMTMgY2hhcnMgICAgMTMgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMjYuOTI5IHVzICAgMTYuMDk3IG1zCisjICAgICAgICAgICAgICAgMTA2IGNoYXJzICAgNDgwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDYuNjA1IHVzICAgIDAuNTcwIG1zCisjICAgICAgICAgICAgICAgMjYgY2hhcnMgICAgMTcgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI4NDh4NDgwLTYwIgorIyBEOiAzMS41MDAgTUh6LCBIOiAyOS44MzAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDg0OCA0ODAgODQ4IDQ4MCAzMgorICAgIHRpbWluZ3MgMzE3NDYgMTA0IDI0IDEyIDMgODAgNSBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDg1Nng0ODAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMzEuNzI4IE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA4NTYgICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAyOS44MjAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAyLjc3NCB1cyAgICAwLjA5OSBtcworIyAgICAgICAgICAgICAgIDExIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC41MDQgdXMgICAgMC4wMzMgbXMKKyMgICAgICAgICAgICAgICAyIGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDMuNzI4IHVzICAgIDAuNDI5IG1zCisjICAgICAgICAgICAgICAgMTMgY2hhcnMgICAgMTMgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMjYuOTc5IHVzICAgMTYuMDk3IG1zCisjICAgICAgICAgICAgICAgMTA3IGNoYXJzICAgNDgwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDYuNTU2IHVzICAgIDAuNTcwIG1zCisjICAgICAgICAgICAgICAgMjYgY2hhcnMgICAgMTcgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI4NTZ4NDgwLTYwIgorIyBEOiAzMS43MjggTUh6LCBIOiAyOS44MjAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDg1NiA0ODAgODU2IDQ4MCAzMgorICAgIHRpbWluZ3MgMzE1MTggMTA0IDE2IDEzIDEgODggMworICAgIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlIG1vZGUgIjk2MHg2MDAtNjAiCisjIEQ6IDQ1LjI1MCBNSHosIEg6IDM3LjIxMiBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgOTYwIDYwMCA5NjAgNjAwIDMyIHRpbWluZ3MgMjIwOTkgMTI4IDMyIDE1IDMgOTYgNiBlbmRtb2RlCisjCisjICAgMTAwMHg2MDAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoNDguMDY4IE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxMDAwICAgICA2MDAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgMzcuMzIwIGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMi4xNjQgdXMgICAgMC4wODAgbXMKKyMgICAgICAgICAgICAgICAxMyBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuODMyIHVzICAgIDAuMDI3IG1zCisjICAgICAgICAgICAgICAgNSBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjk5NiB1cyAgICAwLjQ4MyBtcworIyAgICAgICAgICAgICAgIDE4IGNoYXJzICAgIDE4IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDIwLjgwNCB1cyAgIDE2LjA3NyBtcworIyAgICAgICAgICAgICAgIDEyNSBjaGFycyAgIDYwMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA1Ljk5MSB1cyAgICAwLjU4OSBtcworIyAgICAgICAgICAgICAgIDM2IGNoYXJzICAgIDIyIGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiMTAwMHg2MDAtNjAiCisjIEQ6IDQ4LjA2OCBNSHosIEg6IDM3LjMyMCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTAwMCA2MDAgMTAwMCA2MDAgMzIKKyAgICB0aW1pbmdzIDIwODM0IDE0NCA0MCAxOCAxIDEwNCAzIGVuZG1vZGUgbW9kZSAiMTAyNHg1NzYtNjAiCisjIEQ6IDQ2Ljk5NiBNSHosIEg6IDM1LjgyMCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTAyNCA1NzYgMTAyNCA1NzYgMzIKKyAgICB0aW1pbmdzIDIxMjc4IDE0NCA0MCAxNyAxIDEwNCAzIGVuZG1vZGUgbW9kZSAiMTAyNHg2MDAtNjAiCisjIEQ6IDQ4Ljk2NCBNSHosIEg6IDM3LjMyMCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTAyNCA2MDAgMTAyNCA2MDAgMzIKKyAgICB0aW1pbmdzIDIwNDYxIDE0NCA0MCAxOCAxIDEwNCAzIGVuZG1vZGUgbW9kZSAiMTA4OHg2MTItNjAiCisjIEQ6IDUyLjk1MiBNSHosIEg6IDM4LjA0MCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTA4OCA2MTIgMTA4OCA2MTIgMzIgdGltaW5ncyAxODg3NyAxNTIgNDggMTYgMyAxMDQgNSBlbmRtb2RlCisjCisjICAgMTAyNHg1MTIsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoNDEuMjkxIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxMDI0ICAgIDUxMgorIyAgIFNjYW4gRnJlcXVlbmN5ICAzMS44NjAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAyLjUxOSB1cyAgICAwLjA5NCBtcworIyAgICAgICAgICAgICAgIDEzIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC43NzUgdXMgICAgMC4wMzEgbXMKKyMgICAgICAgICAgICAgICA0IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDMuMjk0IHVzICAgIDAuNDY1IG1zCisjICAgICAgICAgICAgICAgMTcgY2hhcnMgICAgMTUgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMjQuODAwIHVzICAgMTYuMDcwIG1zCisjICAgICAgICAgICAgICAgMTI4IGNoYXJzICAgNTEyIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDYuNTg3IHVzICAgIDAuNTk2IG1zCisjICAgICAgICAgICAgICAgMzQgY2hhcnMgICAgMTkgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMDI0eDUxMi02MCIKKyMgRDogNDEuMjkxIE1IeiwgSDogMzEuODYwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMDI0IDUxMiAxMDI0IDUxMiAzMgorICAgIHRpbWluZ3MgMjQyMTggMTI2IDMyIDE1IDEgMTA0IDMgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUKKyMKKyMgICAxMDI0eDYwMCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICg0OC44NzUgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgICAgICAxMDI0ICAgICAgICA3NjgKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDM3LjI1MiBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgICAgICAyLjEyOCB1cyAgICA4MC41MzJ1cworIyAgICAgICAgICAgICAgICAgICAgICAgMTMgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAgICAwLjgxOCB1cyAgICAgMjYuODQ0IHVzCisjICAgICAgICAgICAgICAgICAgICAgICA1IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgICAgICAyLjk0NiB1cyAgICA0ODMuMTkyIHVzCisjICAgICAgICAgICAgICAgICAgICAgICAxOCBjaGFycyAgICAxOCBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAgICAgMjAuOTUxIHVzICAgMTYuNjk3IG1zCisjICAgICAgICAgICAgICAgICAgICAgICAxMjggY2hhcnMgICA2MjIgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgICAgIDUuODkzIHVzICAgIDAuNTkxIG1zCisjICAgICAgICAgICAgICAgICAgICAgICAzNiBjaGFycyAgICAyMiBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICAgICAgbmVnYXRpdmUgICAgcG9zaXRpdmUKKyMKKyNtb2RlICIxMDI0eDYwMC02MCIKKyMgICAgICMgRDogNDguODc1IE1IeiwgSDogMzcuMjUyIGtIeiwgVjogNjAuMDAgSHoKKyMgICAgIGdlb21ldHJ5IDEwMjQgNjAwIDEwMjQgNjAwIDMyCisjICAgIHRpbWluZ3MgMjA0NjAgIDE0NCA0MCAxOCAxIDEwNCAgMworIyBlbmRtb2RlCisjCisjICAgMTAyNHg3NjgsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoNjUuMDAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEwMjQgICAgICAgIDc2OAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNDguMzYzIGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMi4wOTIgdXMgICAgMC4xMjQgbXMKKyMgICAgICAgICAgICAgICAxNyBjaGFycyAgICA2IGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuMzY5IHVzICAgIDAuMDYyIG1zCisjICAgICAgICAgICAgICAgMyBjaGFycyAgICAgMyBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjQ2MiB1cyAgICAwLjYwMSBtcworIyAgICAgICAgICAgICAgIDIwIGNoYXJzICAgIDI5IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDE1Ljc1NCB1cyAgIDE1Ljg4MCBtcworIyAgICAgICAgICAgICAgIDEyOCBjaGFycyAgIDc2OCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA0LjkyMyB1cyAgICAwLjc4NiBtcworIyAgICAgICAgICAgICAgIDQwIGNoYXJzICAgIDM4IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIG5lZ2F0aXZlCisjCisgICAgbW9kZSAiMTAyNHg3NjgtNjAiCisjIEQ6IDY1LjAwIE1IeiwgSDogNDguMzYzIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMDI0IDc2OCAxMDI0IDc2OCAzMiB0aW1pbmdzIDE1Mzg1IDE2MCAyNCAyOSAzIDEzNiA2IGVuZG1vZGUKKyMKKyMgICAxMDI0eDc2OCwgNzUgSHosIE5vbi1JbnRlcmxhY2VkICg3OC43NSBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTAyNCAgICAgICAgNzY4CisjICAgU2NhbiBGcmVxdWVuY3kgICAgICA2MC4wMjMga0h6ICA3NS4wMyBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjIxOSB1cyAgICAwLjA1MCBtcworIyAgICAgICAgICAgICAgIDEyIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC4yMDMgdXMgICAgMC4wMTcgbXMKKyMgICAgICAgICAgICAgICAyIGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuMjM1IHVzICAgIDAuNDY2IG1zCisjICAgICAgICAgICAgICAgMjIgY2hhcnMgICAgMjggbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTMuMDAzIHVzICAgMTIuNzk1IG1zCisjICAgICAgICAgICAgICAgMTI4IGNoYXJzICAgNzY4IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDMuNjU3IHVzICAgIDAuNTMzIG1zCisjICAgICAgICAgICAgICAgMzYgY2hhcnMgICAgMzIgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMDI0eDc2OC03NSIKKyMgRDogNzguNzUgTUh6LCBIOiA2MC4wMjMga0h6LCBWOiA3NS4wMyBIegorICAgIGdlb21ldHJ5IDEwMjQgNzY4IDEwMjQgNzY4IDMyCisgICAgdGltaW5ncyAxMjY5OSAxNzYgMTYgMjggMSA5NiAzIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgMTAyNHg3NjgsIDg1IEh6LCBOb24tSW50ZXJsYWNlZCAoOTQuNTAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEwMjQgICAgICAgIDc2OAorIyAgIFNjYW4gRnJlcXVlbmN5ICA2OC42Nzcga0h6ICA4NS4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjAxNiB1cyAgICAwLjA0NCBtcworIyAgICAgICAgICAgICAgIDEyIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC41MDggdXMgICAgMC4wMTUgbXMKKyMgICAgICAgICAgICAgICA2IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuMjAxIHVzICAgIDAuNTI0IG1zCisjICAgICAgICAgICAgICAgMjYgY2hhcnMgICAgMzYgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTAuODM2IHVzICAgMTEuMTgzIG1zCisjICAgICAgICAgICAgICAgMTI4IGNoYXJzICAgNzY4IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDMuNzI1IHVzICAgIDAuNTgyIG1zCisjICAgICAgICAgICAgICAgNDQgY2hhcnMgICAgNDAgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMDI0eDc2OC04NSIKKyMgRDogOTQuNTAgTUh6LCBIOiA2OC42Nzcga0h6LCBWOiA4NS4wMCBIegorICAgIGdlb21ldHJ5IDEwMjQgNzY4IDEwMjQgNzY4IDMyCisgICAgdGltaW5ncyAxMDU4MiAyMDggNDggMzYgMSA5NiAzIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgMTAyNHg3NjgsIDEwMCBIeiwgTm9uLUludGVybGFjZWQgKDExMC4wIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxMDI0ICAgICAgICA3NjgKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDc5LjAyMyBrSHogIDk5Ljc4IEh6CisjICAgU3luYyBXaWR0aCAgICAgIDAuODAwIHVzICAgIDAuMTAxIG1zCisjICAgICAgICAgICAgICAgMTEgY2hhcnMgICAgOCBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjAwMCB1cyAgICAwLjAwMCBtcworIyAgICAgICAgICAgICAgIDAgY2hhcnMgICAgIDAgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi41NDUgdXMgICAgMC4yMDIgbXMKKyMgICAgICAgICAgICAgICAzNSBjaGFycyAgICAxNiBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICA5LjMwOSB1cyAgICA5LjcxOSBtcworIyAgICAgICAgICAgICAgIDEyOCBjaGFycyAgIDc2OCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAzLjM0NSB1cyAgICAwLjMwNCBtcworIyAgICAgICAgICAgICAgIDQ2IGNoYXJzICAgIDI0IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIG5lZ2F0aXZlCisjCisgICAgbW9kZSAiMTAyNHg3NjgtMTAwIgorIyBEOiAxMTMuMyBNSHosIEg6IDc5LjAyMyBrSHosIFY6IDk5Ljc4IEh6CisgICAgZ2VvbWV0cnkgMTAyNCA3NjggMTAyNCA3NjggMzIKKyAgICB0aW1pbmdzIDg4MjUgMjgwIDAgMTYgMCA4OCA4IGVuZG1vZGUgbW9kZSAiMTE1Mng3MjAtNjAiCisjIEQ6IDY2Ljc1MCBNSHosIEg6IDQ0Ljg1OSBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTE1MiA3MjAgMTE1MiA3MjAgMzIgdGltaW5ncyAxNDk4MSAxNjggNTYgMTkgMyAxMTIgNiBlbmRtb2RlCisjCisjICAgMTE1Mng4NjQsIDc1IEh6LCBOb24tSW50ZXJsYWNlZCAoMTEwLjAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDExNTIgICAgICAgIDg2NAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNzUuMTM3IGtIeiAgNzQuOTkgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS4zMDkgdXMgICAgMC4xMDYgbXMKKyMgICAgICAgICAgICAgICAxOCBjaGFycyAgICA4IGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuMjQ1IHVzICAgIDAuNTk5IG1zCisjICAgICAgICAgICAgICAgMyBjaGFycyAgICAgNDUgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMS4yODIgdXMgICAgMS4xMzIgbXMKKyMgICAgICAgICAgICAgICAxOCBjaGFycyAgICA4NSBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxMC40NzMgdXMgICAxMS40OTkgbXMKKyMgICAgICAgICAgICAgICAxNDQgY2hhcnMgICA4NjQgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgMi44MzYgdXMgICAgMS44MzcgbXMKKyMgICAgICAgICAgICAgICAzOSBjaGFycyAgICAxMzggbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMTUyeDg2NC03NSIKKyMgRDogMTEwLjAgTUh6LCBIOiA3NS4xMzcga0h6LCBWOiA3NC45OSBIegorICAgIGdlb21ldHJ5IDExNTIgODY0IDExNTIgODY0IDMyCisgICAgdGltaW5ncyA5MjU5IDE0NCAyNCA4NSA0NSAxNDQgOAorICAgIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlIG1vZGUgIjEyMDB4NzIwLTYwIgorIyBEOiA3MC4xODQgTUh6LCBIOiA0NC43NjAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDEyMDAgNzIwIDEyMDAgNzIwIDMyCisgICAgdGltaW5ncyAxNDI1MyAxODQgMjggMjIgMSAxMjggMyBlbmRtb2RlIG1vZGUgIjEyODB4NjAwLTYwIgorIyBEOiA2MS41MDMgTUh6LCBIOiAzNy4zMjAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDEyODAgNjAwIDEyODAgNjAwIDMyCisgICAgdGltaW5ncyAxNjI2MCAxODQgMjggMTggMSAxMjggMyBlbmRtb2RlIG1vZGUgIjEyODB4NzIwLTUwIgorIyBEOiA2MC40NjYgTUh6LCBIOiAzNy4wNTAga0h6LCBWOiA1MC4wMCBIegorICAgIGdlb21ldHJ5IDEyODAgNzIwIDEyODAgNzIwIDMyCisgICAgdGltaW5ncyAxNjUzOCAxNzYgNDggMTcgMSAxMjggMyBlbmRtb2RlIG1vZGUgIjEyODB4NzY4LTUwIgorIyBEOiA2NS4xNzggTUh6LCBIOiAzOS41NTAga0h6LCBWOiA1MC4wMCBIegorICAgIGdlb21ldHJ5IDEyODAgNzY4IDEyODAgNzY4IDMyIHRpbWluZ3MgMTUzNDIgMTg0IDI4IDE5IDEgMTI4IDMgZW5kbW9kZQorIworIyAgIDEyODB4NzY4LCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDgwLjEzNiBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTI4MCAgICA3NjgKKyMgICBTY2FuIEZyZXF1ZW5jeSAgNDcuNzAwIGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS42OTcgdXMgICAgMC4wNjMgbXMKKyMgICAgICAgICAgICAgICAxNyBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNzk5IHVzICAgIDAuMDIxIG1zCisjICAgICAgICAgICAgICAgOCBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjQ5NiB1cyAgICAwLjQ4MyBtcworIyAgICAgICAgICAgICAgIDI1IGNoYXJzICAgIDIzIGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDE1Ljk3MyB1cyAgIDE2LjEwMSBtcworIyAgICAgICAgICAgICAgIDE2MCBjaGFycyAgIDc2OCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA0Ljk5MiB1cyAgICAwLjU2NiBtcworIyAgICAgICAgICAgICAgIDUwIGNoYXJzICAgIDI3IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiMTI4MHg3NjgtNjAiCisjIEQ6IDgwLjEzIE1IeiwgSDogNDcuNzAwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMjgwIDc2OCAxMjgwIDc2OCAzMgorICAgIHRpbWluZ3MgMTI0ODAgMjAwIDQ4IDIzIDEgMTI2IDMgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUKKyMKKyMgICAxMjgweDgwMCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICg4My4zNzUgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEyODAgICAgODAwCisjICAgU2NhbiBGcmVxdWVuY3kgIDQ5LjYyOCBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuNjMxIHVzICAgIDYwLjQ1MCB1cworIyAgICAgICAgICAgICAgICAgICAxNyBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNzY4IHVzICAgIDIwLjE1IHVzCisjICAgICAgICAgICAgICAgICAgIDggY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi4zOTkgdXMgICAgMC40ODMgbXMKKyMgICAgICAgICAgICAgICAgICAgMjUgY2hhcnMgICAgMjQgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTUuMzUyIHVzICAgMTYuMTIwIG1zCisjICAgICAgICAgICAgICAgICAgIDE2MCBjaGFycyAgIDgwMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA0Ljc5OCB1cyAgICAwLjU2NCBtcworIyAgICAgICAgICAgICAgICAgICA1MCBjaGFycyAgICAyOCBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBuZWd0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiMTI4MHg4MDAtNjAiCisjIEQ6IDgzLjUwMCBNSHosIEg6IDQ5LjcwMiBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTI4MCA4MDAgMTI4MCA4MDAgMzIgdGltaW5ncyAxMTk5NCAyMDAgNzIgMjIgMyAxMjggNiBlbmRtb2RlCisjCisjICAgMTI4MHg5NjAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMTA4LjAwIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxMjgwICAgIDk2MAorIyAgIFNjYW4gRnJlcXVlbmN5ICA2MC4wMDAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjAzNyB1cyAgICAwLjA1MCBtcworIyAgICAgICAgICAgICAgIDE0IGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC44ODkgdXMgICAgMC4wMTcgbXMKKyMgICAgICAgICAgICAgICAxMiBjaGFycyAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuODg5IHVzICAgIDAuNjAwIG1zCisjICAgICAgICAgICAgICAgMzkgY2hhcnMgICAgMzYgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTEuODUyIHVzICAgMTYuMDAwIG1zCisjICAgICAgICAgICAgICAgMTYwIGNoYXJzICAgOTYwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDQuODE1IHVzICAgIDAuNjY3IG1zCisjICAgICAgICAgICAgICAgNjUgY2hhcnMgICAgNDAgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMjgweDk2MC02MCIKKyMgRDogMTA4LjAwIE1IeiwgSDogNjAuMDAwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMjgwIDk2MCAxMjgwIDk2MCAzMgorICAgIHRpbWluZ3MgOTI1OSAzMTIgOTYgMzYgMSAxMTIgMyBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDEyODB4MTAyNCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgxMDguMDAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEyODAgICAgICAgIDEwMjQKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDYzLjk4MSBrSHogIDYwLjAyIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMDM3IHVzICAgIDAuMDQ3IG1zCisjICAgICAgICAgICAgICAgMTQgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjQ0NCB1cyAgICAwLjAxNSBtcworIyAgICAgICAgICAgICAgIDYgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi4yOTcgdXMgICAgMC41OTQgbXMKKyMgICAgICAgICAgICAgICAzMSBjaGFycyAgICAzOCBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxMS44NTIgdXMgICAxNi4wMDUgbXMKKyMgICAgICAgICAgICAgICAxNjAgY2hhcnMgICAxMDI0IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDMuNzc4IHVzICAgIDAuNjU2IG1zCisjICAgICAgICAgICAgICAgNTEgY2hhcnMgICAgNDIgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMjgweDEwMjQtNjAiCisjIEQ6IDEwOC4wMCBNSHosIEg6IDYzLjk4MSBrSHosIFY6IDYwLjAyIEh6CisgICAgZ2VvbWV0cnkgMTI4MCAxMDI0IDEyODAgMTAyNCAzMgorICAgIHRpbWluZ3MgOTI2MCAyNDggNDggMzggMSAxMTIgMyBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDEyODB4MTAyNCwgNzUgSHosIE5vbi1JbnRlcmxhY2VkICgxMzUuMDAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEyODAgICAgICAgIDEwMjQKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDc5Ljk3NiBrSHogIDc1LjAyIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMDY3IHVzICAgIDAuMDM4IG1zCisjICAgICAgICAgICAgICAgMTggY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjExOSB1cyAgICAwLjAxMiBtcworIyAgICAgICAgICAgICAgIDIgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMS44MzcgdXMgICAgMC40NzUgbXMKKyMgICAgICAgICAgICAgICAzMSBjaGFycyAgICAzOCBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICA5LjQ4MSB1cyAgICAxMi44MDQgbXMKKyMgICAgICAgICAgICAgICAxNjAgY2hhcnMgICAxMDI0IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDMuMDIyIHVzICAgIDAuNTI1IG1zCisjICAgICAgICAgICAgICAgNTEgY2hhcnMgICAgNDIgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMjgweDEwMjQtNzUiCisjIEQ6IDEzNS4wMCBNSHosIEg6IDc5Ljk3NiBrSHosIFY6IDc1LjAyIEh6CisgICAgZ2VvbWV0cnkgMTI4MCAxMDI0IDEyODAgMTAyNCAzMgorICAgIHRpbWluZ3MgNzQwOCAyNDggMTYgMzggMSAxNDQgMyBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDEyODB4MTAyNCwgODUgSHosIE5vbi1JbnRlcmxhY2VkICgxNTcuNTAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEyODAgICAgICAgIDEwMjQKKyMgICBTY2FuIEZyZXF1ZW5jeSAgOTEuMTQ2IGtIeiAgODUuMDIgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS4wMTYgdXMgICAgMC4wMzMgbXMKKyMgICAgICAgICAgICAgICAyMCBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNDA2IHVzICAgIDAuMDExIG1zCisjICAgICAgICAgICAgICAgOCBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAxLjQyMiB1cyAgICAwLjQ4MyBtcworIyAgICAgICAgICAgICAgIDI4IGNoYXJzICAgIDQ0IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDguMTI3IHVzICAgIDExLjIzNSBtcworIyAgICAgICAgICAgICAgIDE2MCBjaGFycyAgIDEwMjQgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgMi44NDQgdXMgICAgMC41MjcgbXMKKyMgICAgICAgICAgICAgICA1NiBjaGFycyAgICA0OCBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjEyODB4MTAyNC04NSIKKyMgRDogMTU3LjUwIE1IeiwgSDogOTEuMTQ2IGtIeiwgVjogODUuMDIgSHoKKyAgICBnZW9tZXRyeSAxMjgwIDEwMjQgMTI4MCAxMDI0IDMyCisgICAgdGltaW5ncyA2MzQ5IDIyNCA2NCA0NCAxIDE2MCAzCisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMTQ0MHg5MDAtNjAiCisjIEQ6IDEwNi41MDAgTUh6LCBIOiA1NS45MzUga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDE0NDAgOTAwIDE0NDAgOTAwIDMyCisgICAgdGltaW5ncyA5MzkwIDIzMiA4MCAyNSAzIDE1MiA2CisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMTQ0MHg5MDAtNzUiCisjIEQ6IDEzNi43NTAgTUh6LCBIOiA3MC42MzUga0h6LCBWOiA3NS4wMCBIegorICAgIGdlb21ldHJ5IDE0NDAgOTAwIDE0NDAgOTAwIDMyCisgICAgdGltaW5ncyA3MzE1IDI0OCA5NiAzMyAzIDE1MiA2IGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgMTQ0MHgxMDUwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDEyNS4xMCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTQ0MCAgICAgICAgMTA1MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNjUuMjIwIGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS4yMDQgdXMgICAgMC4wNDYgbXMKKyMgICAgICAgICAgICAgICAxOSBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNzYwIHVzICAgIDAuMDE1IG1zCisjICAgICAgICAgICAgICAgMTIgY2hhcnMgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAxLjk2NCB1cyAgICAwLjQ5NSBtcworIyAgICAgICAgICAgICAgIDMxIGNoYXJzICAgIDMzIGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDExLjQwNSB1cyAgIDE2LjA5OSBtcworIyAgICAgICAgICAgICAgIDE4MCBjaGFycyAgIDEwNTAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgMy45MjggdXMgICAgMC41NjcgbXMKKyMgICAgICAgICAgICAgICA2MiBjaGFycyAgICAzNyBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjE0NDB4MTA1MC02MCIKKyMgRDogMTI1LjEwIE1IeiwgSDogNjUuMjIwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxNDQwIDEwNTAgMTQ0MCAxMDUwIDMyCisgICAgdGltaW5ncyA3OTkzIDI0OCA5NiAzMyAxIDE1MiAzCisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMTYwMHg5MDAtNjAiCisjIEQ6IDExOC4yNTAgTUh6LCBIOiA1NS45OTAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDE2MDAgOTAwIDE2MDAgOTAwIDMyCisgICAgdGltaW5ncyA4NDE1IDI1NiA4OCAyNiAzIDE2OCA1IGVuZG1vZGUgbW9kZSAiMTYwMHgxMDI0LTYwIgorIyBEOiAxMzYuMzU4IE1IeiwgSDogNjMuNjAwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxNjAwIDEwMjQgMTYwMCAxMDI0IDMyIHRpbWluZ3MgNzMxNSAyNzIgMTA0IDMyIDEgMTY4IDMgZW5kbW9kZQorIworIyAgIDE2MDB4MTIwMCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgxNTYuMDAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDE2MDAgICAgICAgIDEyMDAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDc2LjIwMCBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMDI2IHVzICAgIDAuMTA1IG1zCisjICAgICAgICAgICAgICAgMjAgY2hhcnMgICAgOCBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjIwNSB1cyAgICAwLjEzMSBtcworIyAgICAgICAgICAgICAgIDQgY2hhcnMgICAgIDEwIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDEuNjM2IHVzICAgIDAuNjgyIG1zCisjICAgICAgICAgICAgICAgMzIgY2hhcnMgICAgNTIgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTAuMjU2IHVzICAgMTUuNzQ4IG1zCisjICAgICAgICAgICAgICAgMjAwIGNoYXJzICAgMTIwMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAyLjg3MiB1cyAgICAwLjg2NiBtcworIyAgICAgICAgICAgICAgIDU2IGNoYXJzICAgIDY2IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIG5lZ2F0aXZlCisjCisgICAgbW9kZSAiMTYwMHgxMjAwLTYwIgorIyBEOiAxNTYuMDAgTUh6LCBIOiA3Ni4yMDAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDE2MDAgMTIwMCAxNjAwIDEyMDAgMzIgdGltaW5ncyA2MTcyIDI1NiAzMiA1MiAxMCAxNjAgOCBlbmRtb2RlCisjCisjICAgMTYwMHgxMjAwLCA3NSBIeiwgTm9uLUludGVybGFjZWQgKDIwMi41MCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTYwMCAgICAgICAgMTIwMAorIyAgIFNjYW4gRnJlcXVlbmN5ICA5My43NTAga0h6ICA3NS4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAwLjk0OCB1cyAgICAwLjAzMiBtcworIyAgICAgICAgICAgICAgIDI0IGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC4zMTYgdXMgICAgMC4wMTEgbXMKKyMgICAgICAgICAgICAgICA4IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDEuNTAxIHVzICAgIDAuNDkxIG1zCisjICAgICAgICAgICAgICAgMzggY2hhcnMgICAgNDYgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgNy45MDEgdXMgICAgMTIuODAwIG1zCisjICAgICAgICAgICAgICAgMjAwIGNoYXJzICAgMTIwMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAyLjc2NSB1cyAgICAwLjUzMyBtcworIyAgICAgICAgICAgICAgIDcwIGNoYXJzICAgIDUwIGxpbmVzCisjICAgUG9sYXJpdHkgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxNjAweDEyMDAtNzUiCisjIEQ6IDIwMi41MCBNSHosIEg6IDkzLjc1MCBrSHosIFY6IDc1LjAwIEh6CisgICAgZ2VvbWV0cnkgMTYwMCAxMjAwIDE2MDAgMTIwMCAzMgorICAgIHRpbWluZ3MgNDkzOCAzMDQgNjQgNDYgMSAxOTIgMworICAgIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlIG1vZGUgIjE2ODB4MTA1MC02MCIKKyMgRDogMTQ2LjI1MCBNSHosIEg6IDY1LjI5MCBrSHosIFY6IDU5Ljk1NCBIegorICAgIGdlb21ldHJ5IDE2ODAgMTA1MCAxNjgwIDEwNTAgMzIKKyAgICB0aW1pbmdzIDY4MTQgMjgwIDEwNCAzMCAzIDE3NiA2CisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMTY4MHgxMDUwLTc1IgorIyBEOiAxODcuMDAwIE1IeiwgSDogODIuMzA2IGtIeiwgVjogNzQuODkyIEh6CisgICAgZ2VvbWV0cnkgMTY4MCAxMDUwIDE2ODAgMTA1MCAzMgorICAgIHRpbWluZ3MgNTM0OCAyOTYgMTIwIDQwIDMgMTc2IDYKKyAgICBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZSBtb2RlICIxNzkyeDEzNDQtNjAiCisjIEQ6IDIwMi45NzUgTUh6LCBIOiA4My40NjAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDE3OTIgMTM0NCAxNzkyIDEzNDQgMzIKKyAgICB0aW1pbmdzIDQ5MDIgMzIwIDEyOCA0MyAxIDE5MiAzCisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMTg1NngxMzkyLTYwIgorIyBEOiAyMTguNTcxIE1IeiwgSDogODYuNDYwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxODU2IDEzOTIgMTg1NiAxMzkyIDMyCisgICAgdGltaW5ncyA0NTc3IDMzNiAxMzYgNDUgMSAyMDAgMworICAgIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlIG1vZGUgIjE5MjB4MTIwMC02MCIKKyMgRDogMTkzLjI1MCBNSHosIEg6IDc0LjU1NiBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTkyMCAxMjAwIDE5MjAgMTIwMCAzMgorICAgIHRpbWluZ3MgNTE3MyAzMzYgMTM2IDM2IDMgMjAwIDYKKyAgICBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZSBtb2RlICIxOTIweDE0NDAtNjAiCisjIEQ6IDIzNC4wMDAgTUh6LCBIOjkwLjAwMCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTkyMCAxNDQwIDE5MjAgMTQ0MCAzMgorICAgIHRpbWluZ3MgNDI3NCAzNDQgMTI4IDU2IDEgMjA4IDMKKyAgICBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZSBtb2RlICIxOTIweDE0NDAtNzUiCisjIEQ6IDI5Ny4wMDAgTUh6LCBIOjExMi41MDAga0h6LCBWOiA3NS4wMCBIegorICAgIGdlb21ldHJ5IDE5MjAgMTQ0MCAxOTIwIDE0NDAgMzIKKyAgICB0aW1pbmdzIDMzNjcgMzUyIDE0NCA1NiAxIDIyNCAzCisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMjA0OHgxNTM2LTYwIgorIyBEOiAyNjcuMjUwIE1IeiwgSDogOTUuNDQ2IGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAyMDQ4IDE1MzYgMjA0OCAxNTM2IDMyCisgICAgdGltaW5ncyAzNzQyIDM3NiAxNTIgNDkgMyAyMjQgNCBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDEyODB4NzIwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDc0LjQ4MSBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTI4MCAgICAgICAgNzIwCisjICAgU2NhbiBGcmVxdWVuY3kgICAgICA0NC43NjAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjgyNiB1cyAgICA2Ny4wMjQgbXMKKyMgICAgICAgICAgICAgICAxNyBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNzUyIHVzICAgIDIyLjM0MSBtcworIyAgICAgICAgICAgICAgIDcgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi41NzggdXMgICAgNDkxLjUxMCBtcworIyAgICAgICAgICAgICAgIDI0IGNoYXJzICAgIDIyIGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDE3LjE4NiB1cyAgIDE2LjA4NiBtcworIyAgICAgICAgICAgICAgIDE2MCBjaGFycyAgIDcyMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA1LjE1NiB1cyAgICAwLjU4MSBtcworIyAgICAgICAgICAgICAgIDQ4IGNoYXJzICAgIDI2IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIG5lZ2F0aXZlCisjCisgICAgbW9kZSAiMTI4MHg3MjAtNjAiCisjIEQ6IDc0LjQ4MSBNSHosIEg6IDQ0Ljc2MCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTI4MCA3MjAgMTI4MCA3MjAgMzIgdGltaW5ncyAxMzQyNiAxOTIgNjQgMjIgMSAxMzYgMyBlbmRtb2RlCisjCisjICAgMTkyMHgxMDgwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDE3Mi43OTggTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDE5MjAgICAgICAgIDEwODAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDY3LjA4MCBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMjA0IHVzICAgIDQ0LjcyMyBtcworIyAgICAgICAgICAgICAgIDI2IGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC42OTQgdXMgICAgMTQuOTA4IG1zCisjICAgICAgICAgICAgICAgMTUgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMS44OTggdXMgICAgNTA2Ljg1NyBtcworIyAgICAgICAgICAgICAgIDQxIGNoYXJzICAgIDM0IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDExLjExMSB1cyAgIDE2LjEwMCBtcworIyAgICAgICAgICAgICAgIDI0MCBjaGFycyAgIDEwODAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgMy43OTYgdXMgICAgMC41NjYgbXMKKyMgICAgICAgICAgICAgICA4MiBjaGFycyAgICAzOCBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBuZWdhdGl2ZSAgICBuZWdhdGl2ZQorIworICAgIG1vZGUgIjE5MjB4MTA4MC02MCIKKyMgRDogNzQuNDgxIE1IeiwgSDogNjcuMDgwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxOTIwIDEwODAgMTkyMCAxMDgwIDMyIHRpbWluZ3MgNTc4NyAzMjggMTIwIDM0IDEgMjA4IDMgZW5kbW9kZQorIworIyAgIDE0MDB4MTA1MCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgxMjIuNjEgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDE0MDAgICAgICAgIDEwNTAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDY1LjIxOCBrSHogIDU5Ljk5IEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMDM3IHVzICAgIDAuMDQ3IG1zCisjICAgICAgICAgICAgICAgMTkgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjQ0NCB1cyAgICAwLjAxNSBtcworIyAgICAgICAgICAgICAgIDExIGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDEuMTg1IHVzICAgIDAuMTg4IG1zCisjICAgICAgICAgICAgICAgMzAgY2hhcnMgICAgMzMgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTIuOTYzIHVzICAgMTYuNDExIG1zCisjICAgICAgICAgICAgICAgMTc1IGNoYXJzICAgMTA1MCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAyLjY2NyB1cyAgICAwLjI1MCBtcworIyAgICAgICAgICAgICAgIDYwIGNoYXJzICAgIDM3IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiMTQwMHgxMDUwLTYwIgorIyBEOiAxMjIuNzUwIE1IeiwgSDogNjUuMzE3IGtIeiwgVjogNTkuOTkgSHoKKyAgICBnZW9tZXRyeSAxNDAwIDEwNTAgMTQwOCAxMDUwIDMyCisgICAgdGltaW5ncyA4MjE0IDIzMiA4OCAzMiAzIDE0NCA0IGVuZG1vZGUgbW9kZSAiMTQwMHgxMDUwLTc1IgorIyBEOiAxNTYuMDAwIE1IeiwgSDogODIuMjc4IGtIeiwgVjogNzQuODY3IEh6CisgICAgZ2VvbWV0cnkgMTQwMCAxMDUwIDE0MDggMTA1MCAzMiB0aW1pbmdzIDY0MTAgMjQ4IDEwNCA0MiAzIDE0NCA0IGVuZG1vZGUKKyMKKyMgICAxMzY2eDc2OCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICg4NS44NiBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTM2NiAgICAgICAgNzY4CisjICAgU2NhbiBGcmVxdWVuY3kgICAgICA0Ny43MDAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjY3NyB1cyAgICAwLjA2MyBtcworIyAgICAgICAgICAgICAgIDE4IGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC44MzkgdXMgICAgMC4wMjEgbXMKKyMgICAgICAgICAgICAgICA5IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuNTE2IHVzICAgIDAuNDgyIG1zCisjICAgICAgICAgICAgICAgMjcgY2hhcnMgICAgMjMgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTUuOTMzIHVzICAgMTYuMTAxIG1zCisjICAgICAgICAgICAgICAgMTcxIGNoYXJzICAgNzY4IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDUuMDMxIHVzICAgIDAuNTY2IG1zCisjICAgICAgICAgICAgICAgNTQgY2hhcnMgICAgMjcgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgbmVnYXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMzYweDc2OC02MCIKKyMgRDogODQuNzUwIE1IeiwgSDogNDcuNzIwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMzYwIDc2OCAxMzYwIDc2OCAzMgorICAgIHRpbWluZ3MgMTE3OTkgMjA4IDcyIDIyIDMgMTM2IDUgZW5kbW9kZSBtb2RlICIxMzY2eDc2OC02MCIKKyMgRDogODUuODYgTUh6LCBIOiA0Ny43MDAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDEzNjYgNzY4IDEzNjYgNzY4IDMyCisgICAgdGltaW5ncyAxMTY0NyAyMTYgNzIgMjMgMSAxNDQgMyBlbmRtb2RlIG1vZGUgIjEzNjZ4NzY4LTUwIgorIyBEOiA2OSw5MjQgTUh6LCBIOiAzOS41NTAga0h6LCBWOiA1MC4wMCBIegorICAgIGdlb21ldHJ5IDEzNjYgNzY4IDEzNjYgNzY4IDMyIHRpbWluZ3MgMTQzMDEgMjAwIDU2IDE5IDEgMTQ0IDMgZW5kbW9kZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi92aWFmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL3ZpYWZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2RiZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi92aWFmYi50eHQKQEAgLTAsMCArMSwyMTQgQEAKKworICAgICAgICBWSUEgSW50ZWdyYXRpb24gR3JhcGhpYyBDaGlwIENvbnNvbGUgRnJhbWVidWZmZXIgRHJpdmVyCisKK1tQbGF0Zm9ybV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgVGhlIGNvbnNvbGUgZnJhbWVidWZmZXIgZHJpdmVyIGlzIGZvciBncmFwaGljcyBjaGlwcyBvZgorICAgIFZJQSBVbmlDaHJvbWUgRmFtaWx5KENMRTI2NiwgUE04MDAgLyBDTjQwMCAvIENOMzAwLAorICAgICAgICAgICAgICAgICAgICAgICAgUDRNODAwQ0UgLyBQNE04MDBQcm8gLyBDTjcwMCAvIFZOODAwLAorICAgICAgICAgICAgICAgICAgICAgICAgQ1g3MDAgLyBWWDcwMCwgSzhNODkwLCBQNE04OTAsCisgICAgICAgICAgICAgICAgICAgICAgICBDTjg5NiAvIFA0TTkwMCwgVlg4MDApCisKK1tEcml2ZXIgZmVhdHVyZXNdCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBEZXZpY2U6IENSVCwgTENELCBEVkkKKworICAgIFN1cHBvcnQgdmlhZmJfbW9kZToKKyAgICAgICAgQ1JUOgorICAgICAgICAgICAgNjQweDQ4MCg2MCwgNzUsIDg1LCAxMDAsIDEyMCBIeiksIDcyMHg0ODAoNjAgSHopLAorICAgICAgICAgICAgNzIweDU3Nig2MCBIeiksIDgwMHg2MDAoNjAsIDc1LCA4NSwgMTAwLCAxMjAgSHopLAorICAgICAgICAgICAgODQ4eDQ4MCg2MCBIeiksIDg1Nng0ODAoNjAgSHopLCAxMDI0eDUxMig2MCBIeiksCisgICAgICAgICAgICAxMDI0eDc2OCg2MCwgNzUsIDg1LCAxMDAgSHopLCAxMTUyeDg2NCg3NSBIeiksCisgICAgICAgICAgICAxMjgweDc2OCg2MCBIeiksIDEyODB4OTYwKDYwIEh6KSwgMTI4MHgxMDI0KDYwLCA3NSwgODUgSHopLAorICAgICAgICAgICAgMTQ0MHgxMDUwKDYwIEh6KSwgMTYwMHgxMjAwKDYwLCA3NSBIeiksIDEyODB4NzIwKDYwIEh6KSwKKyAgICAgICAgICAgIDE5MjB4MTA4MCg2MCBIeiksIDE0MDB4MTA1MCg2MCBIeiksIDgwMHg0ODAoNjAgSHopCisKKyAgICBjb2xvciBkZXB0aDogOCBicHAsIDE2IGJwcCwgMzIgYnBwIHN1cHBvcnRzLgorCisgICAgU3VwcG9ydCAyRCBoYXJkd2FyZSBhY2NlbGVyYXRvci4KKworW1VzaW5nIHRoZSB2aWFmYiBtb2R1bGVdCistLSAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFN0YXJ0IHZpYWZiIHdpdGggZGVmYXVsdCBzZXR0aW5nczoKKyAgICAgICAgI21vZHByb2JlIHZpYWZiCisKKyAgICBTdGFydCB2aWFmYiB3aXRoIHdpdGggdXNlciBvcHRpb25zOgorICAgICAgICAjbW9kcHJvYmUgdmlhZmIgdmlhZmJfbW9kZT04MDB4NjAwIHZpYWZiX2JwcD0xNiB2aWFmYl9yZWZyZXNoPTYwCisgICAgICAgICAgICAgICAgICB2aWFmYl9hY3RpdmVfZGV2PUNSVCtEVkkgdmlhZmJfZHZpX3BvcnQ9RFZQMQorICAgICAgICAgICAgICAgICAgdmlhZmJfbW9kZTE9MTAyNHg3NjggdmlhZmJfYnBwPTE2IHZpYWZiX3JlZnJlc2gxPTYwCisgICAgICAgICAgICAgICAgICB2aWFmYl9TQU1NX09OPTEKKworICAgIHZpYWZiX21vZGU6CisgICAgICAgIDY0MHg0ODAgKGRlZmF1bHQpCisgICAgICAgIDcyMHg0ODAKKyAgICAgICAgODAweDYwMAorICAgICAgICAxMDI0eDc2OAorICAgICAgICAuLi4uLi4KKworICAgIHZpYWZiX2JwcDoKKyAgICAgICAgOCwgMTYsIDMyIChkZWZhdWx0OjMyKQorCisgICAgdmlhZmJfcmVmcmVzaDoKKyAgICAgICAgNjAsIDc1LCA4NSwgMTAwLCAxMjAgKGRlZmF1bHQ6NjApCisKKyAgICB2aWFmYl9sY2RfZHNwX21ldGhvZDoKKyAgICAgICAgMCA6IGV4cGFuc2lvbiAoZGVmYXVsdCkKKyAgICAgICAgMSA6IGNlbnRlcmluZworCisgICAgdmlhZmJfbGNkX21vZGU6CisgICAgICAgIDAgOiBMQ0QgcGFuZWwgd2l0aCBMU0IgZGF0YSBmb3JtYXQgaW5wdXQgKGRlZmF1bHQpCisgICAgICAgIDEgOiBMQ0QgcGFuZWwgd2l0aCBNU0IgZGF0YSBmb3JtYXQgaW5wdXQKKworICAgIHZpYWZiX2xjZF9wYW5lbF9pZDoKKyAgICAgICAgMCA6IFJlc29sdXRpb246IDY0MHg0ODAsIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUKKyAgICAgICAgMSA6IFJlc29sdXRpb246IDgwMHg2MDAsIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUKKyAgICAgICAgMiA6IFJlc29sdXRpb246IDEwMjR4NzY4LCBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRW5hYmxlIChkZWZhdWx0KQorICAgICAgICAzIDogUmVzb2x1dGlvbjogMTI4MHg3NjgsIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUKKyAgICAgICAgNCA6IFJlc29sdXRpb246IDEyODB4MTAyNCwgQ2hhbm5lbDogZHVhbCwgRGl0aGVyaW5nOiBFbmFibGUKKyAgICAgICAgNSA6IFJlc29sdXRpb246IDE0MDB4MTA1MCwgQ2hhbm5lbDogZHVhbCwgRGl0aGVyaW5nOiBFbmFibGUKKyAgICAgICAgNiA6IFJlc29sdXRpb246IDE2MDB4MTIwMCwgQ2hhbm5lbDogZHVhbCwgRGl0aGVyaW5nOiBFbmFibGUKKworICAgICAgICA4IDogUmVzb2x1dGlvbjogODAweDQ4MCwgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZQorICAgICAgICA5IDogUmVzb2x1dGlvbjogMTAyNHg3NjgsIENoYW5uZWw6IGR1YWwsIERpdGhlcmluZzogRW5hYmxlCisgICAgICAgIDEwOiBSZXNvbHV0aW9uOiAxMDI0eDc2OCwgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IERpc2FibGUKKyAgICAgICAgMTE6IFJlc29sdXRpb246IDEwMjR4NzY4LCBDaGFubmVsOiBkdWFsLCBEaXRoZXJpbmc6IERpc2FibGUKKyAgICAgICAgMTI6IFJlc29sdXRpb246IDEyODB4NzY4LCBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRGlzYWJsZQorICAgICAgICAxMzogUmVzb2x1dGlvbjogMTI4MHgxMDI0LCBDaGFubmVsOiBkdWFsLCBEaXRoZXJpbmc6IERpc2FibGUKKyAgICAgICAgMTQ6IFJlc29sdXRpb246IDE0MDB4MTA1MCwgQ2hhbm5lbDogZHVhbCwgRGl0aGVyaW5nOiBEaXNhYmxlCisgICAgICAgIDE1OiBSZXNvbHV0aW9uOiAxNjAweDEyMDAsIENoYW5uZWw6IGR1YWwsIERpdGhlcmluZzogRGlzYWJsZQorICAgICAgICAxNjogUmVzb2x1dGlvbjogMTM2Nng3NjgsIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBEaXNhYmxlCisgICAgICAgIDE3OiBSZXNvbHV0aW9uOiAxMDI0eDYwMCwgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZQorICAgICAgICAxODogUmVzb2x1dGlvbjogMTI4MHg3NjgsIENoYW5uZWw6IGR1YWwsIERpdGhlcmluZzogRW5hYmxlCisgICAgICAgIDE5OiBSZXNvbHV0aW9uOiAxMjgweDgwMCwgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZQorCisgICAgdmlhZmJfYWNjZWw6CisgICAgICAgIDAgOiBObyAyRCBIYXJkd2FyZSBBY2NlbGVyYXRpb24KKyAgICAgICAgMSA6IDJEIEhhcmR3YXJlIEFjY2VsZXJhdGlvbiAoZGVmYXVsdCkKKworICAgIHZpYWZiX1NBTU1fT046CisgICAgICAgIDAgOiB2aWFmYl9TQU1NX09OIGRpc2FibGUgKGRlZmF1bHQpCisgICAgICAgIDEgOiB2aWFmYl9TQU1NX09OIGVuYWJsZQorCisgICAgdmlhZmJfbW9kZTE6IChzZWNvbmRhcnkgZGlzcGxheSBkZXZpY2UpCisgICAgICAgIDY0MHg0ODAgKGRlZmF1bHQpCisgICAgICAgIDcyMHg0ODAKKyAgICAgICAgODAweDYwMAorICAgICAgICAxMDI0eDc2OAorICAgICAgICAuLi4gLi4uCisKKyAgICB2aWFmYl9icHAxOiAoc2Vjb25kYXJ5IGRpc3BsYXkgZGV2aWNlKQorICAgICAgICA4LCAxNiwgMzIgKGRlZmF1bHQ6MzIpCisKKyAgICB2aWFmYl9yZWZyZXNoMTogKHNlY29uZGFyeSBkaXNwbGF5IGRldmljZSkKKyAgICAgICAgNjAsIDc1LCA4NSwgMTAwLCAxMjAgKGRlZmF1bHQ6NjApCisKKyAgICB2aWFmYl9hY3RpdmVfZGV2OgorICAgICAgICBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgYWN0aXZlIGRldmljZXMuKENSVCwgRFZJLCBDUlQrTENELi4uKQorICAgICAgICBEVkkgc3RhbmRzIGZvciBEVkkgb3IgSERNSSwgRS5nLiwgSWYgeW91IHdhbnQgdG8gZW5hYmxlIEhETUksCisgICAgICAgIHNldCB2aWFmYl9hY3RpdmVfZGV2PURWSS4gSW4gU0FNTSBjYXNlLCB0aGUgcHJldmlvdXMgb2YKKyAgICAgICAgdmlhZmJfYWN0aXZlX2RldiBpcyBwcmltYXJ5IGRldmljZSwgYW5kIHRoZSBmb2xsb3dpbmcgaXMKKyAgICAgICAgc2Vjb25kYXJ5IGRldmljZS4KKworICAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICAgVG8gZW5hYmxlIG9uZSBkZXZpY2UsIHN1Y2ggYXMgRFZJIG9ubHksIHdlIGNhbiB1c2U6CisgICAgICAgICAgICBtb2Rwcm9iZSB2aWFmYiB2aWFmYl9hY3RpdmVfZGV2PURWSQorICAgICAgICBUbyBlbmFibGUgdHdvIGRldmljZXMsIHN1Y2ggYXMgQ1JUK0RWSToKKyAgICAgICAgICAgIG1vZHByb2JlIHZpYWZiIHZpYWZiX2FjdGl2ZV9kZXY9Q1JUK0RWSTsKKworICAgICAgICBGb3IgRHVvVmlldyBjYXNlLCB3ZSBjYW4gdXNlOgorICAgICAgICAgICAgbW9kcHJvYmUgdmlhZmIgdmlhZmJfYWN0aXZlX2Rldj1DUlQrRFZJCisgICAgICAgICAgICBPUgorICAgICAgICAgICAgbW9kcHJvYmUgdmlhZmIgdmlhZmJfYWN0aXZlX2Rldj1EVkkrQ1JULi4uCisKKyAgICAgICAgRm9yIFNBTU0gY2FzZToKKyAgICAgICAgSWYgQ1JUIGlzIHByaW1hcnkgYW5kIERWSSBpcyBzZWNvbmRhcnksIHdlIHNob3VsZCB1c2U6CisgICAgICAgICAgICBtb2Rwcm9iZSB2aWFmYiB2aWFmYl9hY3RpdmVfZGV2PUNSVCtEVkkgdmlhZmJfU0FNTV9PTj0xLi4uCisgICAgICAgIElmIERWSSBpcyBwcmltYXJ5IGFuZCBDUlQgaXMgc2Vjb25kYXJ5LCB3ZSBzaG91bGQgdXNlOgorICAgICAgICAgICAgbW9kcHJvYmUgdmlhZmIgdmlhZmJfYWN0aXZlX2Rldj1EVkkrQ1JUIHZpYWZiX1NBTU1fT049MS4uLgorCisgICAgdmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQ6CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSBkaXNwbGF5IGhhcmR3YXJlIGxheW91dCBmb3IgQ1g3MDAgY2hpcC4KKyAgICAgICAgMSA6IExDRCBvbmx5CisgICAgICAgIDIgOiBEVkkgb25seQorICAgICAgICAzIDogTENEK0RWSSAoZGVmYXVsdCkKKyAgICAgICAgNCA6IExDRDErTENEMiAoaW50ZXJuYWwgKyBpbnRlcm5hbCkKKyAgICAgICAgMTY6IExDRDErRXh0ZXJuYWxMQ0QyIChpbnRlcm5hbCArIGV4dGVybmFsKQorCisgICAgdmlhZmJfc2Vjb25kX3NpemU6CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gc2V0IHNlY29uZCBkZXZpY2UgbWVtb3J5IHNpemUoTUIpIGluIFNBTU0gY2FzZS4KKyAgICAgICAgVGhlIG1pbmltYWwgc2l6ZSBpcyAxNi4KKworICAgIHZpYWZiX3BsYXRmb3JtX2VwaWFfZHZpOgorICAgICAgICBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBEVkkgb24gRVBJQSAtIE0KKyAgICAgICAgMCA6IE5vIERWSSBvbiBFUElBIC0gTSAoZGVmYXVsdCkKKyAgICAgICAgMSA6IERWSSBvbiBFUElBIC0gTQorCisgICAgdmlhZmJfYnVzX3dpZHRoOgorICAgICAgICBXaGVuIHVzaW5nIDI0IC0gQml0IEJ1cyBXaWR0aCBEaWdpdGFsIEludGVyZmFjZSwKKyAgICAgICAgdGhpcyBvcHRpb24gc2hvdWxkIGJlIHNldC4KKyAgICAgICAgMTI6IDEyLUJpdCBMVkRTIG9yIDEyLUJpdCBUTURTIChkZWZhdWx0KQorICAgICAgICAyNDogMjQtQml0IExWRFMgb3IgMjQtQml0IFRNRFMKKworICAgIHZpYWZiX2RldmljZV9sY2RfZHVhbGVkZ2U6CisgICAgICAgIFdoZW4gdXNpbmcgRHVhbCBFZGdlIFBhbmVsLCB0aGlzIG9wdGlvbiBzaG91bGQgYmUgc2V0LgorICAgICAgICAwIDogTm8gRHVhbCBFZGdlIFBhbmVsIChkZWZhdWx0KQorICAgICAgICAxIDogRHVhbCBFZGdlIFBhbmVsCisKKyAgICB2aWFmYl92aWRlb19kZXY6CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB2aWRlbyBvdXRwdXQgZGV2aWNlcyhDUlQsIERWSSwgTENEKSBmb3IKKyAgICAgICAgZHVvdmlldyBjYXNlLgorICAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICAgVG8gb3V0cHV0IHZpZGVvIG9uIERWSSwgd2Ugc2hvdWxkIHVzZToKKyAgICAgICAgICAgIG1vZHByb2JlIHZpYWZiIHZpYWZiX3ZpZGVvX2Rldj1EVkkuLi4KKworICAgIHZpYWZiX2xjZF9wb3J0OgorICAgICAgICBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgTENEIG91dHB1dCBwb3J0LAorICAgICAgICBhdmFpbGFibGUgdmFsdWVzIGFyZSAiRFZQMCIgIkRWUDEiICJERlBfSElHSExPVyIgIkRGUF9ISUdIIiAiREZQX0xPVyIuCisgICAgICAgIGZvciBleHRlcm5hbCBMQ0QgKyBleHRlcm5hbCBEVkkgb24gQ1g3MDAoRXh0ZXJuYWwgTENEIGlzIG9uIERWUDApLAorICAgICAgICB3ZSBzaG91bGQgdXNlOgorICAgICAgICAgICAgbW9kcHJvYmUgdmlhZmIgdmlhZmJfbGNkX3BvcnQ9RFZQMC4uLgorCitOb3RlczoKKyAgICAxLiBDUlQgbWF5IG5vdCBkaXNwbGF5IHByb3Blcmx5IGZvciBEdW9WaWV3IENSVCAmIERWSSBkaXNwbGF5IGF0CisgICAgICAgdGhlICI2NDB4NDgwIiBQQUwgbW9kZSB3aXRoIERWSSBvdmVyc2NhbiBlbmFibGVkLgorICAgIDIuIFNBTU0gc3RhbmRzIGZvciBzaW5nbGUgYWRhcHRlciBtdWx0aSBtb25pdG9ycy4gSXQgaXMgZGlmZmVyZW50IGZyb20KKyAgICAgICBtdWx0aS1oZWFkIHNpbmNlIFNBTU0gc3VwcG9ydCBtdWx0aSBtb25pdG9yIGF0IGRyaXZlciBsYXllcnMsIHRodXMgZmJjb24KKyAgICAgICBsYXllciBkb2Vzbid0IGV2ZW4ga25vdyBhYm91dCBpdDsgU0FNTSdzIHNlY29uZCBzY3JlZW4gZG9lc24ndCBoYXZlIGEKKyAgICAgICBkZXZpY2Ugbm9kZSBmaWxlLCB0aHVzIGEgdXNlciBtb2RlIGFwcGxpY2F0aW9uIGNhbid0IGFjY2VzcyBpdCBkaXJlY3RseS4KKyAgICAgICBXaGVuIFNBTU0gaXMgZW5hYmxlZCwgdmlhZmJfbW9kZSBhbmQgdmlhZmJfbW9kZTEsIHZpYWZiX2JwcCBhbmQKKyAgICAgICB2aWFmYl9icHAxLCB2aWFmYl9yZWZyZXNoIGFuZCB2aWFmYl9yZWZyZXNoMSBjYW4gYmUgZGlmZmVyZW50LgorICAgIDMuIFdoZW4gY29uc29sZSBpcyBkZXBlbmRpbmcgb24gdmlhZmJpbmZvMSwgZHluYW1pY2FsbHkgY2hhbmdlIHJlc29sdXRpb24KKyAgICAgICBhbmQgYnBwLCBuZWVkIHRvIGNhbGwgVklBRkIgc3BlY2lmaWVkIGlvY3RsIGludGVyZmFjZSBWSUFGQl9TRVRfREVWSUNFCisgICAgICAgaW5zdGVhZCBvZiBjYWxsaW5nIGNvbW1vbiBpb2N0bCBmdW5jdGlvbiBGQklPUFVUX1ZTQ1JFRU5JTkZPIHNpbmNlCisgICAgICAgdmlhZmIgZG9lc24ndCBzdXBwb3J0IG11bHRpLWhlYWQgd2VsbCwgb3IgaXQgd2lsbCBjYXVzZSBzY3JlZW4gY3J1c2guCisgICAgNC4gVlg4MDAgMkQgYWNjZWxlcmF0b3IgaGFzbid0IGJlZW4gc3VwcG9ydGVkIGluIHRoaXMgZHJpdmVyIHlldC4gV2hlbgorICAgICAgIHVzaW5nIGRyaXZlciBvbiBWWDgwMCwgdGhlIGRyaXZlciB3aWxsIGRpc2FibGUgdGhlIGFjY2VsZXJhdGlvbgorICAgICAgIGZ1bmN0aW9uIGFzIGRlZmF1bHQuCisKKworW0NvbmZpZ3VyZSB2aWFmYiB3aXRoICJmYnNldCIgdG9vbF0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgImZic2V0IiBpcyBhbiBpbmJveCB1dGlsaXR5IG9mIExpbnV4LgorICAgIDEuIElucXVpcmUgY3VycmVudCB2aWFmYiBpbmZvcm1hdGlvbiwgdHlwZSwKKyAgICAgICAgICAgIyBmYnNldCAtaQorCisgICAgMi4gU2V0IHZhcmlvdXMgcmVzb2x1dGlvbnMgYW5kIHZpYWZiX3JlZnJlc2ggcmF0ZXMsCisgICAgICAgICAgICMgZmJzZXQgPHJlc29sdXRpb24tdmVydGljYWxfc3luYz4KKworICAgICAgIGV4YW1wbGUsCisgICAgICAgICAgICMgZmJzZXQgIjEwMjR4NzY4LTc1IgorICAgICAgIG9yCisgICAgICAgICAgICMgZmJzZXQgLWcgMTAyNCA3NjggMTAyNCA3NjggMzIKKyAgICAgICBDaGVjayB0aGUgZmlsZSAiL2V0Yy9mYi5tb2RlcyIgdG8gZmluZCBkaXNwbGF5IG1vZGVzIGF2YWlsYWJsZS4KKworICAgIDMuIFNldCB0aGUgY29sb3IgZGVwdGgsCisgICAgICAgICAgICMgZmJzZXQgLWRlcHRoIDx2YWx1ZT4KKworICAgICAgIGV4YW1wbGUsCisgICAgICAgICAgICMgZmJzZXQgLWRlcHRoIDE2CisKK1tCb290dXAgd2l0aCB2aWFmYl06CistLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91ciBncnViLmNvbmY6CisgICAgYXBwZW5kID0gInZpZGVvPXZpYWZiOnZpYWZiX21vZGU9MTAyNHg3NjgsdmlhZmJfYnBwPTMyLHZpYWZiX3JlZnJlc2g9ODUiCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCBjYzgwOTNjLi5mNWY4MTJkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0yODcsNiArMjg3LDIyIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OglyZW1vdmUgSElEIGNvbXBhdCBzdXBwb3J0CitXaGVuOgkyLjYuMjkKK1doeToJbmVlZGVkIG9ubHkgYXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdW50aWwgZGlzdHJvcyBmaXggdGhlbXNlbHZlcyB1cAorV2hvOglKaXJpIFNsYWJ5IDxqaXJpc2xhYnlAZ21haWwuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDogcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woKQorV2hlbjogT2N0b2JlciAyMDA5CitXaHk6ICBUaGUgJXBGIHZzcHJpbnRmIGZvcm1hdCBwcm92aWRlcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGluIGEKKyAgICAgIHNpbXBsZXIgd2F5LiAgcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woKSBpcyBkZXByZWNhdGVkIGJ1dAorICAgICAgc3RpbGwgcHJlc2VudCB0byBnaXZlIG91dC1vZi10cmVlIG1vZHVsZXMgdGltZSB0byBjaGFuZ2UuCitXaG86ICBCam9ybiBIZWxnYWFzIDxiam9ybi5oZWxnYWFzQGhwLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFdoYXQ6CS9zeXMvbzJjYiBzeW1saW5rCiBXaGVuOglKYW51YXJ5IDIwMTAKIFdoeToJL3N5cy9mcy9vMmNiIGlzIHRoZSBwcm9wZXIgbG9jYXRpb24gZm9yIHRoaXMgaW5mb3JtYXRpb24gLSAvc3lzL28yY2IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYXV0b2ZzNC1tb3VudC1jb250cm9sLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYXV0b2ZzNC1tb3VudC1jb250cm9sLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjM0MTc0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hdXRvZnM0LW1vdW50LWNvbnRyb2wudHh0CkBAIC0wLDAgKzEsMzkzIEBACisKK01pc2NlbGxhbmVvdXMgRGV2aWNlIGNvbnRyb2wgb3BlcmF0aW9ucyBmb3IgdGhlIGF1dG9mczQga2VybmVsIG1vZHVsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHByb2JsZW0KKz09PT09PT09PT09CisKK1RoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIGFjdGl2ZSByZXN0YXJ0cyBpbiBhdXRvZnMgKHRoYXQgaXMgdG8gc2F5CityZXN0YXJ0aW5nIGF1dG9mcyB3aGVuIHRoZXJlIGFyZSBidXN5IG1vdW50cykuCisKK0R1cmluZyBub3JtYWwgb3BlcmF0aW9uIGF1dG9mcyB1c2VzIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW5lZCBvbiB0aGUKK2RpcmVjdG9yeSB0aGF0IGlzIGJlaW5nIG1hbmFnZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBpc3N1ZSBjb250cm9sCitvcGVyYXRpb25zLiBVc2luZyBhIGZpbGUgZGVzY3JpcHRvciBnaXZlcyBpb2N0bCBvcGVyYXRpb25zIGFjY2VzcyB0bworYXV0b2ZzIHNwZWNpZmljIGluZm9ybWF0aW9uIHN0b3JlZCBpbiB0aGUgc3VwZXIgYmxvY2suIFRoZSBvcGVyYXRpb25zCithcmUgdGhpbmdzIHN1Y2ggYXMgc2V0dGluZyBhbiBhdXRvZnMgbW91bnQgY2F0YXRvbmljLCBzZXR0aW5nIHRoZQorZXhwaXJlIHRpbWVvdXQgYW5kIHJlcXVlc3RpbmcgZXhwaXJlIGNoZWNrcy4gQXMgaXMgZXhwbGFpbmVkIGJlbG93LAorY2VydGFpbiB0eXBlcyBvZiBhdXRvZnMgdHJpZ2dlcmVkIG1vdW50cyBjYW4gZW5kIHVwIGNvdmVyaW5nIGFuIGF1dG9mcworbW91bnQgaXRzZWxmIHdoaWNoIHByZXZlbnRzIHVzIGJlaW5nIGFibGUgdG8gdXNlIG9wZW4oMikgdG8gb2J0YWluIGEKK2ZpbGUgZGVzY3JpcHRvciBmb3IgdGhlc2Ugb3BlcmF0aW9ucyBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgb25lIG9wZW4uCisKK0N1cnJlbnRseSBhdXRvZnMgdXNlcyAidW1vdW50IC1sIiAobGF6eSB1bW91bnQpIHRvIGNsZWFyIGFjdGl2ZSBtb3VudHMKK2F0IHJlc3RhcnQuIFdoaWxlIHVzaW5nIGxhenkgdW1vdW50IHdvcmtzIGZvciBtb3N0IGNhc2VzLCBhbnl0aGluZyB0aGF0CituZWVkcyB0byB3YWxrIGJhY2sgdXAgdGhlIG1vdW50IHRyZWUgdG8gY29uc3RydWN0IGEgcGF0aCwgc3VjaCBhcworZ2V0Y3dkKDIpIGFuZCB0aGUgcHJvYyBmaWxlIHN5c3RlbSAvcHJvYy88cGlkPi9jd2QsIG5vIGxvbmdlciB3b3JrcworYmVjYXVzZSB0aGUgcG9pbnQgZnJvbSB3aGljaCB0aGUgcGF0aCBpcyBjb25zdHJ1Y3RlZCBoYXMgYmVlbiBkZXRhY2hlZAorZnJvbSB0aGUgbW91bnQgdHJlZS4KKworVGhlIGFjdHVhbCBwcm9ibGVtIHdpdGggYXV0b2ZzIGlzIHRoYXQgaXQgY2FuJ3QgcmVjb25uZWN0IHRvIGV4aXN0aW5nCittb3VudHMuIEltbWVkaWF0ZWx5IG9uZSB0aGlua3Mgb2YganVzdCBhZGRpbmcgdGhlIGFiaWxpdHkgdG8gcmVtb3VudAorYXV0b2ZzIGZpbGUgc3lzdGVtcyB3b3VsZCBzb2x2ZSBpdCwgYnV0IGFsYXMsIHRoYXQgY2FuJ3Qgd29yay4gVGhpcyBpcworYmVjYXVzZSBhdXRvZnMgZGlyZWN0IG1vdW50cyBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mICJvbiBkZW1hbmQgbW91bnQKK2FuZCBleHBpcmUiIG9mIG5lc3RlZCBtb3VudCB0cmVlcyBoYXZlIHRoZSBmaWxlIHN5c3RlbSBtb3VudGVkIGRpcmVjdGx5CitvbiB0b3Agb2YgdGhlIG1vdW50IHRyaWdnZXIgZGlyZWN0b3J5IGRlbnRyeS4KKworRm9yIGV4YW1wbGUsIHRoZXJlIGFyZSB0d28gdHlwZXMgb2YgYXV0b21vdW50IG1hcHMsIGRpcmVjdCAoaW4gdGhlIGtlcm5lbAorbW9kdWxlIHNvdXJjZSB5b3Ugd2lsbCBzZWUgYSB0aGlyZCB0eXBlIGNhbGxlZCBhbiBvZmZzZXQsIHdoaWNoIGlzIGp1c3QKK2EgZGlyZWN0IG1vdW50IGluIGRpc2d1aXNlKSBhbmQgaW5kaXJlY3QuCisKK0hlcmUgaXMgYSBtYXN0ZXIgbWFwIHdpdGggZGlyZWN0IGFuZCBpbmRpcmVjdCBtYXAgZW50cmllczoKKworLy0gICAgICAvZXRjL2F1dG8uZGlyZWN0CisvdGVzdCAgIC9ldGMvYXV0by5pbmRpcmVjdAorCithbmQgdGhlIGNvcnJlc3BvbmRpbmcgbWFwIGZpbGVzOgorCisvZXRjL2F1dG8uZGlyZWN0OgorCisvYXV0b21vdW50L2RwYXJzZS9nNiAgYnVkZ2llOi9hdXRvZnMvZXhwb3J0MQorL2F1dG9tb3VudC9kcGFyc2UvZzEgIHNoYXJrOi9hdXRvZnMvZXhwb3J0MQorYW5kIHNvIG9uLgorCisvZXRjL2F1dG8uaW5kaXJlY3Q6CisKK2cxICAgIHNoYXJrOi9hdXRvZnMvZXhwb3J0MQorZzYgICAgYnVkZ2llOi9hdXRvZnMvZXhwb3J0MQorYW5kIHNvIG9uLgorCitGb3IgdGhlIGFib3ZlIGluZGlyZWN0IG1hcCBhbiBhdXRvZnMgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCBvbiAvdGVzdCBhbmQKK21vdW50cyBhcmUgdHJpZ2dlcmVkIGZvciBlYWNoIHN1Yi1kaXJlY3Rvcnkga2V5IGJ5IHRoZSBpbm9kZSBsb29rdXAKK29wZXJhdGlvbi4gU28gd2Ugc2VlIGEgbW91bnQgb2Ygc2hhcms6L2F1dG9mcy9leHBvcnQxIG9uIC90ZXN0L2cxLCBmb3IKK2V4YW1wbGUuCisKK1RoZSB3YXkgdGhhdCBkaXJlY3QgbW91bnRzIGFyZSBoYW5kbGVkIGlzIGJ5IG1ha2luZyBhbiBhdXRvZnMgbW91bnQgb24KK2VhY2ggZnVsbCBwYXRoLCBzdWNoIGFzIC9hdXRvbW91bnQvZHBhcnNlL2cxLCBhbmQgdXNpbmcgaXQgYXMgYSBtb3VudAordHJpZ2dlci4gU28gd2hlbiB3ZSB3YWxrIG9uIHRoZSBwYXRoIHdlIG1vdW50IHNoYXJrOi9hdXRvZnMvZXhwb3J0MSAib24KK3RvcCBvZiB0aGlzIG1vdW50IHBvaW50Ii4gU2luY2UgdGhlc2UgYXJlIGFsd2F5cyBkaXJlY3RvcmllcyB3ZSBjYW4KK3VzZSB0aGUgZm9sbG93X2xpbmsgaW5vZGUgb3BlcmF0aW9uIHRvIHRyaWdnZXIgdGhlIG1vdW50LgorCitCdXQsIGVhY2ggZW50cnkgaW4gZGlyZWN0IGFuZCBpbmRpcmVjdCBtYXBzIGNhbiBoYXZlIG9mZnNldHMgKG1ha2luZwordGhlbSBtdWx0aS1tb3VudCBtYXAgZW50cmllcykuCisKK0ZvciBleGFtcGxlLCBhbiBpbmRpcmVjdCBtb3VudCBtYXAgZW50cnkgY291bGQgYWxzbyBiZToKKworZzEgIFwKKyAgIC8gICAgICAgIHNoYXJrOi9hdXRvZnMvZXhwb3J0NS90ZXN0aW5nL3Rlc3QgXAorICAgL3MxICAgICAgc2hhcms6L2F1dG9mcy9leHBvcnQvdGVzdGluZy90ZXN0L3MxIFwKKyAgIC9zMiAgICAgIHNoYXJrOi9hdXRvZnMvZXhwb3J0NS90ZXN0aW5nL3Rlc3QvczIgXAorICAgL3MxL3NzMSAgc2hhcms6L2F1dG9mcy9leHBvcnQxIFwKKyAgIC9zMi9zczIgIHNoYXJrOi9hdXRvZnMvZXhwb3J0MgorCithbmQgYSBzaW1pbGFybHkgYSBkaXJlY3QgbW91bnQgbWFwIGVudHJ5IGNvdWxkIGFsc28gYmU6CisKKy9hdXRvbW91bnQvZHBhcnNlL2cxIFwKKyAgICAvICAgICAgIHNoYXJrOi9hdXRvZnMvZXhwb3J0NS90ZXN0aW5nL3Rlc3QgXAorICAgIC9zMSAgICAgc2hhcms6L2F1dG9mcy9leHBvcnQvdGVzdGluZy90ZXN0L3MxIFwKKyAgICAvczIgICAgIHNoYXJrOi9hdXRvZnMvZXhwb3J0NS90ZXN0aW5nL3Rlc3QvczIgXAorICAgIC9zMS9zczEgc2hhcms6L2F1dG9mcy9leHBvcnQyIFwKKyAgICAvczIvc3MyIHNoYXJrOi9hdXRvZnMvZXhwb3J0MgorCitPbmUgb2YgdGhlIGlzc3VlcyB3aXRoIHZlcnNpb24gNCBvZiBhdXRvZnMgd2FzIHRoYXQsIHdoZW4gbW91bnRpbmcgYW4KK2VudHJ5IHdpdGggYSBsYXJnZSBudW1iZXIgb2Ygb2Zmc2V0cywgcG9zc2libHkgd2l0aCBuZXN0aW5nLCB3ZSBuZWVkZWQKK3RvIG1vdW50IGFuZCB1bW91bnQgYWxsIG9mIHRoZSBvZmZzZXRzIGFzIGEgc2luZ2xlIHVuaXQuIE5vdCByZWFsbHkgYQorcHJvYmxlbSwgZXhjZXB0IGZvciBwZW9wbGUgd2l0aCBhIGxhcmdlIG51bWJlciBvZiBvZmZzZXRzIGluIG1hcCBlbnRyaWVzLgorVGhpcyBtZWNoYW5pc20gaXMgdXNlZCBmb3IgdGhlIHdlbGwga25vd24gImhvc3RzIiBtYXAgYW5kIHdlIGhhdmUgc2VlbgorY2FzZXMgKGluIDIuNCkgd2hlcmUgdGhlIGF2YWlsYWJsZSBudW1iZXIgb2YgbW91bnRzIGFyZSBleGhhdXN0ZWQgb3IKK3doZXJlIHRoZSBudW1iZXIgb2YgcHJpdmlsZWdlZCBwb3J0cyBhdmFpbGFibGUgaXMgZXhoYXVzdGVkLgorCitJbiB2ZXJzaW9uIDUgd2UgbW91bnQgb25seSBhcyB3ZSBnbyBkb3duIHRoZSB0cmVlIG9mIG9mZnNldHMgYW5kCitzaW1pbGFybHkgZm9yIGV4cGlyaW5nIHRoZW0gd2hpY2ggcmVzb2x2ZXMgdGhlIGFib3ZlIHByb2JsZW0uIFRoZXJlIGlzCitzb21ld2hhdCBtb3JlIGRldGFpbCB0byB0aGUgaW1wbGVtZW50YXRpb24gYnV0IGl0IGlzbid0IG5lZWRlZCBmb3IgdGhlCitzYWtlIG9mIHRoZSBwcm9ibGVtIGV4cGxhbmF0aW9uLiBUaGUgb25lIGltcG9ydGFudCBkZXRhaWwgaXMgdGhhdCB0aGVzZQorb2Zmc2V0cyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIHNhbWUgbWVjaGFuaXNtIGFzIHRoZSBkaXJlY3QgbW91bnRzCithYm92ZSBhbmQgc28gdGhlIG1vdW50IHBvaW50cyBjYW4gYmUgY292ZXJlZCBieSBhIG1vdW50LgorCitUaGUgY3VycmVudCBhdXRvZnMgaW1wbGVtZW50YXRpb24gdXNlcyBhbiBpb2N0bCBmaWxlIGRlc2NyaXB0b3Igb3BlbmVkCitvbiB0aGUgbW91bnQgcG9pbnQgZm9yIGNvbnRyb2wgb3BlcmF0aW9ucy4gVGhlIHJlZmVyZW5jZXMgaGVsZCBieSB0aGUKK2Rlc2NyaXB0b3IgYXJlIGFjY291bnRlZCBmb3IgaW4gY2hlY2tzIG1hZGUgdG8gZGV0ZXJtaW5lIGlmIGEgbW91bnQgaXMKK2luIHVzZSBhbmQgaXMgYWxzbyB1c2VkIHRvIGFjY2VzcyBhdXRvZnMgZmlsZSBzeXN0ZW0gaW5mb3JtYXRpb24gaGVsZAoraW4gdGhlIG1vdW50IHN1cGVyIGJsb2NrLiBTbyB0aGUgdXNlIG9mIGEgZmlsZSBoYW5kbGUgbmVlZHMgdG8gYmUKK3JldGFpbmVkLgorCisKK1RoZSBTb2x1dGlvbgorPT09PT09PT09PT09CisKK1RvIGJlIGFibGUgdG8gcmVzdGFydCBhdXRvZnMgbGVhdmluZyBleGlzdGluZyBkaXJlY3QsIGluZGlyZWN0IGFuZAorb2Zmc2V0IG1vdW50cyBpbiBwbGFjZSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gb2J0YWluIGEgZmlsZSBoYW5kbGUKK2ZvciB0aGVzZSBwb3RlbnRpYWxseSBjb3ZlcmVkIGF1dG9mcyBtb3VudCBwb2ludHMuIFJhdGhlciB0aGFuIGp1c3QKK2ltcGxlbWVudCBhbiBpc29sYXRlZCBvcGVyYXRpb24gaXQgd2FzIGRlY2lkZWQgdG8gcmUtaW1wbGVtZW50IHRoZQorZXhpc3RpbmcgaW9jdGwgaW50ZXJmYWNlIGFuZCBhZGQgbmV3IG9wZXJhdGlvbnMgdG8gcHJvdmlkZSB0aGlzCitmdW5jdGlvbmFsaXR5LgorCitJbiBhZGRpdGlvbiwgdG8gYmUgYWJsZSB0byByZWNvbnN0cnVjdCBhIG1vdW50IHRyZWUgdGhhdCBoYXMgYnVzeSBtb3VudHMsCit0aGUgdWlkIGFuZCBnaWQgb2YgdGhlIGxhc3QgdXNlciB0aGF0IHRyaWdnZXJlZCB0aGUgbW91bnQgbmVlZHMgdG8gYmUKK2F2YWlsYWJsZSBiZWNhdXNlIHRoZXNlIGNhbiBiZSB1c2VkIGFzIG1hY3JvIHN1YnN0aXR1dGlvbiB2YXJpYWJsZXMgaW4KK2F1dG9mcyBtYXBzLiBUaGV5IGFyZSByZWNvcmRlZCBhdCBtb3VudCByZXF1ZXN0IHRpbWUgYW5kIGFuIG9wZXJhdGlvbgoraGFzIGJlZW4gYWRkZWQgdG8gcmV0cmlldmUgdGhlbS4KKworU2luY2Ugd2UncmUgcmUtaW1wbGVtZW50aW5nIHRoZSBjb250cm9sIGludGVyZmFjZSwgYSBjb3VwbGUgb2Ygb3RoZXIKK3Byb2JsZW1zIHdpdGggdGhlIGV4aXN0aW5nIGludGVyZmFjZSBoYXZlIGJlZW4gYWRkcmVzc2VkLiBGaXJzdCwgd2hlbgorYSBtb3VudCBvciBleHBpcmUgb3BlcmF0aW9uIGNvbXBsZXRlcyBhIHN0YXR1cyBpcyByZXR1cm5lZCB0byB0aGUKK2tlcm5lbCBieSBlaXRoZXIgYSAic2VuZCByZWFkeSIgb3IgYSAic2VuZCBmYWlsIiBvcGVyYXRpb24uIFRoZQorInNlbmQgZmFpbCIgb3BlcmF0aW9uIG9mIHRoZSBpb2N0bCBpbnRlcmZhY2UgY291bGQgb25seSBldmVyIHNlbmQKK0VOT0VOVCBzbyB0aGUgcmUtaW1wbGVtZW50YXRpb24gYWxsb3dzIHVzZXIgc3BhY2UgdG8gc2VuZCBhbiBhY3R1YWwKK3N0YXR1cy4gQW5vdGhlciBleHBlbnNpdmUgb3BlcmF0aW9uIGluIHVzZXIgc3BhY2UsIGZvciB0aG9zZSB1c2luZwordmVyeSBsYXJnZSBtYXBzLCBpcyBkaXNjb3ZlcmluZyBpZiBhIG1vdW50IGlzIHByZXNlbnQuIFVzdWFsbHkgdGhpcworaW52b2x2ZXMgc2Nhbm5pbmcgL3Byb2MvbW91bnRzIGFuZCBzaW5jZSBpdCBuZWVkcyB0byBiZSBkb25lIHF1aXRlCitvZnRlbiBpdCBjYW4gaW50cm9kdWNlIHNpZ25pZmljYW50IG92ZXJoZWFkIHdoZW4gdGhlcmUgYXJlIG1hbnkgZW50cmllcworaW4gdGhlIG1vdW50IHRhYmxlLiBBbiBvcGVyYXRpb24gdG8gbG9va3VwIHRoZSBtb3VudCBzdGF0dXMgb2YgYSBtb3VudAorcG9pbnQgZGVudHJ5IChjb3ZlcmVkIG9yIG5vdCkgaGFzIGFsc28gYmVlbiBhZGRlZC4KKworQ3VycmVudCBrZXJuZWwgZGV2ZWxvcG1lbnQgcG9saWN5IHJlY29tbWVuZHMgYXZvaWRpbmcgdGhlIHVzZSBvZiB0aGUKK2lvY3RsIG1lY2hhbmlzbSBpbiBmYXZvciBvZiBzeXN0ZW1zIHN1Y2ggYXMgTmV0bGluay4gQW4gaW1wbGVtZW50YXRpb24KK3VzaW5nIHRoaXMgc3lzdGVtIHdhcyBhdHRlbXB0ZWQgdG8gZXZhbHVhdGUgaXRzIHN1aXRhYmlsaXR5IGFuZCBpdCB3YXMKK2ZvdW5kIHRvIGJlIGluYWRlcXVhdGUsIGluIHRoaXMgY2FzZS4gVGhlIEdlbmVyaWMgTmV0bGluayBzeXN0ZW0gd2FzCit1c2VkIGZvciB0aGlzIGFzIHJhdyBOZXRsaW5rIHdvdWxkIGxlYWQgdG8gYSBzaWduaWZpY2FudCBpbmNyZWFzZSBpbgorY29tcGxleGl0eS4gVGhlcmUncyBubyBxdWVzdGlvbiB0aGF0IHRoZSBHZW5lcmljIE5ldGxpbmsgc3lzdGVtIGlzIGFuCitlbGVnYW50IHNvbHV0aW9uIGZvciBjb21tb24gY2FzZSBpb2N0bCBmdW5jdGlvbnMgYnV0IGl0J3Mgbm90IGEgY29tcGxldGUKK3JlcGxhY2VtZW50IHByb2JhYmx5IGJlY2F1c2UgaXQncyBwcmltYXJ5IHB1cnBvc2UgaW4gbGlmZSBpcyB0byBiZSBhCittZXNzYWdlIGJ1cyBpbXBsZW1lbnRhdGlvbiByYXRoZXIgdGhhbiBzcGVjaWZpY2FsbHkgYW4gaW9jdGwgcmVwbGFjZW1lbnQuCitXaGlsZSBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byB3b3JrIGFyb3VuZCB0aGlzIHRoZXJlIGlzIG9uZSBjb25jZXJuCit0aGF0IGxlYWQgdG8gdGhlIGRlY2lzaW9uIHRvIG5vdCB1c2UgaXQuIFRoaXMgaXMgdGhhdCB0aGUgYXV0b2ZzCitleHBpcmUgaW4gdGhlIGRhZW1vbiBoYXMgYmVjb21lIGZhciB0byBjb21wbGV4IGJlY2F1c2UgdW1vdW50CitjYW5kaWRhdGVzIGFyZSBlbnVtZXJhdGVkLCBhbG1vc3QgZm9yIG5vIG90aGVyIHJlYXNvbiB0aGFuIHRvICJjb3VudCIKK3RoZSBudW1iZXIgb2YgdGltZXMgdG8gY2FsbCB0aGUgZXhwaXJlIGlvY3RsLiBUaGlzIGludm9sdmVzIHNjYW5uaW5nCit0aGUgbW91bnQgdGFibGUgd2hpY2ggaGFzIHByb3ZlZCB0byBiZSBhIGJpZyBvdmVyaGVhZCBmb3IgdXNlcnMgd2l0aAorbGFyZ2UgbWFwcy4gVGhlIGJlc3Qgd2F5IHRvIGltcHJvdmUgdGhpcyBpcyB0cnkgYW5kIGdldCBiYWNrIHRvIHRoZQord2F5IHRoZSBleHBpcmUgd2FzIGRvbmUgbG9uZyBhZ28uIFRoYXQgaXMsIHdoZW4gYW4gZXhwaXJlIHJlcXVlc3QgaXMKK2lzc3VlZCBmb3IgYSBtb3VudCAoZmlsZSBoYW5kbGUpIHdlIHNob3VsZCBjb250aW51YWxseSBjYWxsIGJhY2sgdG8KK3RoZSBkYWVtb24gdW50aWwgd2UgY2FuJ3QgdW1vdW50IGFueSBtb3JlIG1vdW50cywgdGhlbiByZXR1cm4gdGhlCithcHByb3ByaWF0ZSBzdGF0dXMgdG8gdGhlIGRhZW1vbi4gQXQgdGhlIG1vbWVudCB3ZSBqdXN0IGV4cGlyZSBvbmUKK21vdW50IGF0IGEgdGltZS4gQSBHZW5lcmljIE5ldGxpbmsgaW1wbGVtZW50YXRpb24gd291bGQgZXhjbHVkZSB0aGlzCitwb3NzaWJpbGl0eSBmb3IgZnV0dXJlIGRldmVsb3BtZW50IGR1ZSB0byB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZQorbWVzc2FnZSBidXMgYXJjaGl0ZWN0dXJlLgorCisKK2F1dG9mczQgTWlzY2VsbGFuZW91cyBEZXZpY2UgbW91bnQgY29udHJvbCBpbnRlcmZhY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGNvbnRyb2wgaW50ZXJmYWNlIGlzIG9wZW5pbmcgYSBkZXZpY2Ugbm9kZSwgdHlwaWNhbGx5IC9kZXYvYXV0b2ZzLgorCitBbGwgdGhlIGlvY3RscyB1c2UgYSBjb21tb24gc3RydWN0dXJlIHRvIHBhc3MgdGhlIG5lZWRlZCBwYXJhbWV0ZXIKK2luZm9ybWF0aW9uIGFuZCByZXR1cm4gb3BlcmF0aW9uIHJlc3VsdHM6CisKK3N0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIHsKKwlfX3UzMiB2ZXJfbWFqb3I7CisJX191MzIgdmVyX21pbm9yOworCV9fdTMyIHNpemU7ICAgICAgICAgICAgIC8qIHRvdGFsIHNpemUgb2YgZGF0YSBwYXNzZWQgaW4KKwkJCQkgKiBpbmNsdWRpbmcgdGhpcyBzdHJ1Y3QgKi8KKwlfX3MzMiBpb2N0bGZkOyAgICAgICAgICAvKiBhdXRvbW91bnQgY29tbWFuZCBmZCAqLworCisJX191MzIgYXJnMTsgICAgICAgICAgICAgLyogQ29tbWFuZCBwYXJhbWV0ZXJzICovCisJX191MzIgYXJnMjsKKworCWNoYXIgcGF0aFswXTsKK307CisKK1RoZSBpb2N0bGZkIGZpZWxkIGlzIGEgbW91bnQgcG9pbnQgZmlsZSBkZXNjcmlwdG9yIG9mIGFuIGF1dG9mcyBtb3VudAorcG9pbnQuIEl0IGlzIHJldHVybmVkIGJ5IHRoZSBvcGVuIGNhbGwgYW5kIGlzIHVzZWQgYnkgYWxsIGNhbGxzIGV4Y2VwdAordGhlIGNoZWNrIGZvciB3aGV0aGVyIGEgZ2l2ZW4gcGF0aCBpcyBhIG1vdW50IHBvaW50LCB3aGVyZSBpdCBtYXkKK29wdGlvbmFsbHkgYmUgdXNlZCB0byBjaGVjayBhIHNwZWNpZmljIG1vdW50IGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbgorbW91bnQgcG9pbnQgZmlsZSBkZXNjcmlwdG9yLCBhbmQgd2hlbiByZXF1ZXN0aW5nIHRoZSB1aWQgYW5kIGdpZCBvZiB0aGUKK2xhc3Qgc3VjY2Vzc2Z1bCBtb3VudCBvbiBhIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGF1dG9mcyBmaWxlIHN5c3RlbS4KKworVGhlIGZpZWxkcyBhcmcxIGFuZCBhcmcyIGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHBhcmFtZXRlcnMgYW5kIHJlc3VsdHMgb2YKK2NhbGxzIG1hZGUgYXMgZGVzY3JpYmVkIGJlbG93LgorCitUaGUgcGF0aCBmaWVsZCBpcyB1c2VkIHRvIHBhc3MgYSBwYXRoIHdoZXJlIGl0IGlzIG5lZWRlZCBhbmQgdGhlIHNpemUgZmllbGQKK2lzIHVzZWQgYWNjb3VudCBmb3IgdGhlIGluY3JlYXNlZCBzdHJ1Y3R1cmUgbGVuZ3RoIHdoZW4gdHJhbnNsYXRpbmcgdGhlCitzdHJ1Y3R1cmUgc2VudCBmcm9tIHVzZXIgc3BhY2UuCisKK1RoaXMgc3RydWN0dXJlIGNhbiBiZSBpbml0aWFsaXplZCBiZWZvcmUgc2V0dGluZyBzcGVjaWZpYyBmaWVsZHMgYnkgdXNpbmcKK3RoZSB2b2lkIGZ1bmN0aW9uIGNhbGwgaW5pdF9hdXRvZnNfZGV2X2lvY3RsKHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICopLgorCitBbGwgb2YgdGhlIGlvY3RscyBwZXJmb3JtIGEgY29weSBvZiB0aGlzIHN0cnVjdHVyZSBmcm9tIHVzZXIgc3BhY2UgdG8KK2tlcm5lbCBzcGFjZSBhbmQgcmV0dXJuIC1FSU5WQUwgaWYgdGhlIHNpemUgcGFyYW1ldGVyIGlzIHNtYWxsZXIgdGhhbgordGhlIHN0cnVjdHVyZSBzaXplIGl0c2VsZiwgLUVOT01FTSBpZiB0aGUga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzCitvciAtRUZBVUxUIGlmIHRoZSBjb3B5IGl0c2VsZiBmYWlscy4gT3RoZXIgY2hlY2tzIGluY2x1ZGUgYSB2ZXJzaW9uIGNoZWNrCitvZiB0aGUgY29tcGlsZWQgaW4gdXNlciBzcGFjZSB2ZXJzaW9uIGFnYWluc3QgdGhlIG1vZHVsZSB2ZXJzaW9uIGFuZCBhCittaXNtYXRjaCByZXN1bHRzIGluIGEgLUVJTlZBTCByZXR1cm4uIElmIHRoZSBzaXplIGZpZWxkIGlzIGdyZWF0ZXIgdGhhbgordGhlIHN0cnVjdHVyZSBzaXplIHRoZW4gYSBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgcHJlc2VudCBhbmQgaXMgY2hlY2tlZCB0bworZW5zdXJlIGl0IGJlZ2lucyB3aXRoIGEgIi8iIGFuZCBpcyBOVUxMIHRlcm1pbmF0ZWQsIG90aGVyd2lzZSAtRUlOVkFMIGlzCityZXR1cm5lZC4gRm9sbG93aW5nIHRoZXNlIGNoZWNrcywgZm9yIGFsbCBpb2N0bCBjb21tYW5kcyBleGNlcHQKK0FVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9DTUQsIEFVVE9GU19ERVZfSU9DVExfT1BFTk1PVU5UX0NNRCBhbmQKK0FVVE9GU19ERVZfSU9DVExfQ0xPU0VNT1VOVF9DTUQgdGhlIGlvY3RsZmQgaXMgdmFsaWRhdGVkIGFuZCBpZiBpdCBpcworbm90IGEgdmFsaWQgZGVzY3JpcHRvciBvciBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW4gYXV0b2ZzIG1vdW50IHBvaW50CithbiBlcnJvciBvZiAtRUJBREYsIC1FTk9UVFkgb3IgLUVJTlZBTCAobm90IGFuIGF1dG9mcyBkZXNjcmlwdG9yKSBpcworcmV0dXJuZWQuCisKKworVGhlIGlvY3RscworPT09PT09PT09PQorCitBbiBleGFtcGxlIG9mIGFuIGltcGxlbWVudGF0aW9uIHdoaWNoIHVzZXMgdGhpcyBpbnRlcmZhY2UgY2FuIGJlIHNlZW4KK2luIGF1dG9mcyB2ZXJzaW9uIDUuMC40IGFuZCBsYXRlciBpbiBmaWxlIGxpYi9kZXYtaW9jdGwtbGliLmMgb2YgdGhlCitkaXN0cmlidXRpb24gdGFyIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgZnJvbSBrZXJuZWwub3JnIGluIGRpcmVjdG9yeQorL3B1Yi9saW51eC9kYWVtb25zL2F1dG9mcy92NS4KKworVGhlIGRldmljZSBub2RlIGlvY3RsIG9wZXJhdGlvbnMgaW1wbGVtZW50ZWQgYnkgdGhpcyBpbnRlcmZhY2UgYXJlOgorCisKK0FVVE9GU19ERVZfSU9DVExfVkVSU0lPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dldCB0aGUgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gb2YgdGhlIGF1dG9mczQgZGV2aWNlIGlvY3RsIGtlcm5lbCBtb2R1bGUKK2ltcGxlbWVudGF0aW9uLiBJdCByZXF1aXJlcyBhbiBpbml0aWFsaXplZCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCBhcyBhbgoraW5wdXQgcGFyYW1ldGVyIGFuZCBzZXRzIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGluIHRoZSBwYXNzZWQgaW4gc3RydWN0dXJlLgorSXQgcmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgdGhlIGVycm9yIC1FSU5WQUwgaWYgYSB2ZXJzaW9uIG1pc21hdGNoIGlzCitkZXRlY3RlZC4KKworCitBVVRPRlNfREVWX0lPQ1RMX1BST1RPVkVSX0NNRCBhbmQgQVVUT0ZTX0RFVl9JT0NUTF9QUk9UT1NVQlZFUl9DTUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHZXQgdGhlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG9mIHRoZSBhdXRvZnM0IHByb3RvY29sIHZlcnNpb24gdW5kZXJzdG9vZAorYnkgbG9hZGVkIG1vZHVsZS4gVGhpcyBjYWxsIHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsCit3aXRoIHRoZSBpb2N0bGZkIGZpZWxkIHNldCB0byBhIHZhbGlkIGF1dG9mcyBtb3VudCBwb2ludCBkZXNjcmlwdG9yCithbmQgc2V0cyB0aGUgcmVxdWVzdGVkIHZlcnNpb24gbnVtYmVyIGluIHN0cnVjdHVyZSBmaWVsZCBhcmcxLiBUaGVzZQorY29tbWFuZHMgcmV0dXJuIDAgb24gc3VjY2VzcyBvciBvbmUgb2YgdGhlIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGlmCit2YWxpZGF0aW9uIGZhaWxzLgorCisKK0FVVE9GU19ERVZfSU9DVExfT1BFTk1PVU5UIGFuZCBBVVRPRlNfREVWX0lPQ1RMX0NMT1NFTU9VTlQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT2J0YWluIGFuZCByZWxlYXNlIGEgZmlsZSBkZXNjcmlwdG9yIGZvciBhbiBhdXRvZnMgbWFuYWdlZCBtb3VudCBwb2ludAorcGF0aC4gVGhlIG9wZW4gY2FsbCByZXF1aXJlcyBhbiBpbml0aWFsaXplZCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCB3aXRoCit0aGUgdGhlIHBhdGggZmllbGQgc2V0IGFuZCB0aGUgc2l6ZSBmaWVsZCBhZGp1c3RlZCBhcHByb3ByaWF0ZWx5IGFzIHdlbGwKK2FzIHRoZSBhcmcxIGZpZWxkIHNldCB0byB0aGUgZGV2aWNlIG51bWJlciBvZiB0aGUgYXV0b2ZzIG1vdW50LiBUaGUKK2RldmljZSBudW1iZXIgY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIG1vdW50IG9wdGlvbnMgc2hvd24gaW4KKy9wcm9jL21vdW50cy4gVGhlIGNsb3NlIGNhbGwgcmVxdWlyZXMgYW4gaW5pdGlhbGl6ZWQgc3RydWN0CithdXRvZnNfZGV2X2lvY3Qgd2l0aCB0aGUgaW9jdGxmZCBmaWVsZCBzZXQgdG8gdGhlIGRlc2NyaXB0b3Igb2J0YWluZWQKK2Zyb20gdGhlIG9wZW4gY2FsbC4gVGhlIHJlbGVhc2Ugb2YgdGhlIGZpbGUgZGVzY3JpcHRvciBjYW4gYWxzbyBiZSBkb25lCit3aXRoIGNsb3NlKDIpIHNvIGFueSBvcGVuIGRlc2NyaXB0b3JzIHdpbGwgYWxzbyBiZSBjbG9zZWQgYXQgcHJvY2VzcyBleGl0LgorVGhlIGNsb3NlIGNhbGwgaXMgaW5jbHVkZWQgaW4gdGhlIGltcGxlbWVudGVkIG9wZXJhdGlvbnMgbGFyZ2VseSBmb3IKK2NvbXBsZXRlbmVzcyBhbmQgdG8gcHJvdmlkZSBmb3IgYSBjb25zaXN0ZW50IHVzZXIgc3BhY2UgaW1wbGVtZW50YXRpb24uCisKKworQVVUT0ZTX0RFVl9JT0NUTF9SRUFEWV9DTUQgYW5kIEFVVE9GU19ERVZfSU9DVExfRkFJTF9DTUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JldHVybiBtb3VudCBhbmQgZXhwaXJlIHJlc3VsdCBzdGF0dXMgZnJvbSB1c2VyIHNwYWNlIHRvIHRoZSBrZXJuZWwuCitCb3RoIG9mIHRoZXNlIGNhbGxzIHJlcXVpcmUgYW4gaW5pdGlhbGl6ZWQgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwKK3dpdGggdGhlIGlvY3RsZmQgZmllbGQgc2V0IHRvIHRoZSBkZXNjcmlwdG9yIG9idGFpbmVkIGZyb20gdGhlIG9wZW4KK2NhbGwgYW5kIHRoZSBhcmcxIGZpZWxkIHNldCB0byB0aGUgd2FpdCBxdWV1ZSB0b2tlbiBudW1iZXIsIHJlY2VpdmVkCitieSB1c2VyIHNwYWNlIGluIHRoZSBmb3JlZ29pbmcgbW91bnQgb3IgZXhwaXJlIHJlcXVlc3QuIFRoZSBhcmcyIGZpZWxkCitpcyBzZXQgdG8gdGhlIHN0YXR1cyB0byBiZSByZXR1cm5lZC4gRm9yIHRoZSByZWFkeSBjYWxsIHRoaXMgaXMgYWx3YXlzCiswIGFuZCBmb3IgdGhlIGZhaWwgY2FsbCBpdCBpcyBzZXQgdG8gdGhlIGVycm5vIG9mIHRoZSBvcGVyYXRpb24uCisKKworQVVUT0ZTX0RFVl9JT0NUTF9TRVRQSVBFRkRfQ01ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2V0IHRoZSBwaXBlIGZpbGUgZGVzY3JpcHRvciB1c2VkIGZvciBrZXJuZWwgY29tbXVuaWNhdGlvbiB0byB0aGUgZGFlbW9uLgorTm9ybWFsbHkgdGhpcyBpcyBzZXQgYXQgbW91bnQgdGltZSB1c2luZyBhbiBvcHRpb24gYnV0IHdoZW4gcmVjb25uZWN0aW5nCit0byBhIGV4aXN0aW5nIG1vdW50IHdlIG5lZWQgdG8gdXNlIHRoaXMgdG8gdGVsbCB0aGUgYXV0b2ZzIG1vdW50IGFib3V0Cit0aGUgbmV3IGtlcm5lbCBwaXBlIGRlc2NyaXB0b3IuIEluIG9yZGVyIHRvIHByb3RlY3QgbW91bnRzIGFnYWluc3QKK2luY29ycmVjdGx5IHNldHRpbmcgdGhlIHBpcGUgZGVzY3JpcHRvciB3ZSBhbHNvIHJlcXVpcmUgdGhhdCB0aGUgYXV0b2ZzCittb3VudCBiZSBjYXRhdG9uaWMgKHNlZSBuZXh0IGNhbGwpLgorCitUaGUgY2FsbCByZXF1aXJlcyBhbiBpbml0aWFsaXplZCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCB3aXRoIHRoZQoraW9jdGxmZCBmaWVsZCBzZXQgdG8gdGhlIGRlc2NyaXB0b3Igb2J0YWluZWQgZnJvbSB0aGUgb3BlbiBjYWxsIGFuZAordGhlIGFyZzEgZmllbGQgc2V0IHRvIGRlc2NyaXB0b3Igb2YgdGhlIHBpcGUuIE9uIHN1Y2Nlc3MgdGhlIGNhbGwKK2Fsc28gc2V0cyB0aGUgcHJvY2VzcyBncm91cCBpZCB1c2VkIHRvIGlkZW50aWZ5IHRoZSBjb250cm9sbGluZyBwcm9jZXNzCisoZWcuIHRoZSBvd25pbmcgYXV0b21vdW50KDgpIGRhZW1vbikgdG8gdGhlIHByb2Nlc3MgZ3JvdXAgb2YgdGhlIGNhbGxlci4KKworCitBVVRPRlNfREVWX0lPQ1RMX0NBVEFUT05JQ19DTUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYWtlIHRoZSBhdXRvZnMgbW91bnQgcG9pbnQgY2F0YXRvbmljLiBUaGUgYXV0b2ZzIG1vdW50IHdpbGwgbm8gbG9uZ2VyCitpc3N1ZSBtb3VudCByZXF1ZXN0cywgdGhlIGtlcm5lbCBjb21tdW5pY2F0aW9uIHBpcGUgZGVzY3JpcHRvciBpcyByZWxlYXNlZAorYW5kIGFueSByZW1haW5pbmcgd2FpdHMgaW4gdGhlIHF1ZXVlIHJlbGVhc2VkLgorCitUaGUgY2FsbCByZXF1aXJlcyBhbiBpbml0aWFsaXplZCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCB3aXRoIHRoZQoraW9jdGxmZCBmaWVsZCBzZXQgdG8gdGhlIGRlc2NyaXB0b3Igb2J0YWluZWQgZnJvbSB0aGUgb3BlbiBjYWxsLgorCisKK0FVVE9GU19ERVZfSU9DVExfVElNRU9VVF9DTUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2V0IHRoZSBleHBpcmUgdGltZW91dCBmb3IgbW91bnRzIHdpdGhpbmcgYW4gYXV0b2ZzIG1vdW50IHBvaW50LgorCitUaGUgY2FsbCByZXF1aXJlcyBhbiBpbml0aWFsaXplZCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCB3aXRoIHRoZQoraW9jdGxmZCBmaWVsZCBzZXQgdG8gdGhlIGRlc2NyaXB0b3Igb2J0YWluZWQgZnJvbSB0aGUgb3BlbiBjYWxsLgorCisKK0FVVE9GU19ERVZfSU9DVExfUkVRVUVTVEVSX0NNRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JldHVybiB0aGUgdWlkIGFuZCBnaWQgb2YgdGhlIGxhc3QgcHJvY2VzcyB0byBzdWNjZXNzZnVsbHkgdHJpZ2dlciBhIHRoZQorbW91bnQgb24gdGhlIGdpdmVuIHBhdGggZGVudHJ5LgorCitUaGUgY2FsbCByZXF1aXJlcyBhbiBpbml0aWFsaXplZCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCB3aXRoIHRoZSBwYXRoCitmaWVsZCBzZXQgdG8gdGhlIG1vdW50IHBvaW50IGluIHF1ZXN0aW9uIGFuZCB0aGUgc2l6ZSBmaWVsZCBhZGp1c3RlZAorYXBwcm9wcmlhdGVseSBhcyB3ZWxsIGFzIHRoZSBhcmcxIGZpZWxkIHNldCB0byB0aGUgZGV2aWNlIG51bWJlciBvZiB0aGUKK2NvbnRhaW5pbmcgYXV0b2ZzIG1vdW50LiBVcG9uIHJldHVybiB0aGUgc3RydWN0IGZpZWxkIGFyZzEgY29udGFpbnMgdGhlCit1aWQgYW5kIGFyZzIgdGhlIGdpZC4KKworV2hlbiByZWNvbnN0cnVjdGluZyBhbiBhdXRvZnMgbW91bnQgdHJlZSB3aXRoIGFjdGl2ZSBtb3VudHMgd2UgbmVlZCB0bworcmUtY29ubmVjdCB0byBtb3VudHMgdGhhdCBtYXkgaGF2ZSB1c2VkIHRoZSBvcmlnaW5hbCBwcm9jZXNzIHVpZCBhbmQKK2dpZCAob3Igc3RyaW5nIHZhcmlhdGlvbnMgb2YgdGhlbSkgZm9yIG1vdW50IGxvb2t1cHMgd2l0aGluIHRoZSBtYXAgZW50cnkuCitUaGlzIGNhbGwgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gb2J0YWluIHRoaXMgdWlkIGFuZCBnaWQgc28gdGhleSBtYXkgYmUKK3VzZWQgYnkgdXNlciBzcGFjZSBmb3IgdGhlIG1vdW50IG1hcCBsb29rdXBzLgorCisKK0FVVE9GU19ERVZfSU9DVExfRVhQSVJFX0NNRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lzc3VlIGFuIGV4cGlyZSByZXF1ZXN0IHRvIHRoZSBrZXJuZWwgZm9yIGFuIGF1dG9mcyBtb3VudC4gVHlwaWNhbGx5Cit0aGlzIGlvY3RsIGlzIGNhbGxlZCB1bnRpbCBubyBmdXJ0aGVyIGV4cGlyZSBjYW5kaWRhdGVzIGFyZSBmb3VuZC4KKworVGhlIGNhbGwgcmVxdWlyZXMgYW4gaW5pdGlhbGl6ZWQgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgd2l0aCB0aGUKK2lvY3RsZmQgZmllbGQgc2V0IHRvIHRoZSBkZXNjcmlwdG9yIG9idGFpbmVkIGZyb20gdGhlIG9wZW4gY2FsbC4gSW4KK2FkZGl0aW9uIGFuIGltbWVkaWF0ZSBleHBpcmUsIGluZGVwZW5kZW50IG9mIHRoZSBtb3VudCB0aW1lb3V0LCBjYW4gYmUKK3JlcXVlc3RlZCBieSBzZXR0aW5nIHRoZSBhcmcxIGZpZWxkIHRvIDEuIElmIG5vIGV4cGlyZSBjYW5kaWRhdGVzIGNhbgorYmUgZm91bmQgdGhlIGlvY3RsIHJldHVybnMgLTEgd2l0aCBlcnJubyBzZXQgdG8gRUFHQUlOLgorCitUaGlzIGNhbGwgY2F1c2VzIHRoZSBrZXJuZWwgbW9kdWxlIHRvIGNoZWNrIHRoZSBtb3VudCBjb3JyZXNwb25kaW5nCit0byB0aGUgZ2l2ZW4gaW9jdGxmZCBmb3IgbW91bnRzIHRoYXQgY2FuIGJlIGV4cGlyZWQsIGlzc3VlcyBhbiBleHBpcmUKK3JlcXVlc3QgYmFjayB0byB0aGUgZGFlbW9uIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvbi4KKworQVVUT0ZTX0RFVl9JT0NUTF9BU0tVTU9VTlRfQ01ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hlY2tzIGlmIGFuIGF1dG9mcyBtb3VudCBwb2ludCBpcyBpbiB1c2UuCisKK1RoZSBjYWxsIHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIHdpdGggdGhlCitpb2N0bGZkIGZpZWxkIHNldCB0byB0aGUgZGVzY3JpcHRvciBvYnRhaW5lZCBmcm9tIHRoZSBvcGVuIGNhbGwgYW5kCitpdCByZXR1cm5zIHRoZSByZXN1bHQgaW4gdGhlIGFyZzEgZmllbGQsIDEgZm9yIGJ1c3kgYW5kIDAgb3RoZXJ3aXNlLgorCisKK0FVVE9GU19ERVZfSU9DVExfSVNNT1VOVFBPSU5UX0NNRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoZWNrIGlmIHRoZSBnaXZlbiBwYXRoIGlzIGEgbW91bnRwb2ludC4KKworVGhlIGNhbGwgcmVxdWlyZXMgYW4gaW5pdGlhbGl6ZWQgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwuIFRoZXJlIGFyZSB0d28KK3Bvc3NpYmxlIHZhcmlhdGlvbnMuIEJvdGggdXNlIHRoZSBwYXRoIGZpZWxkIHNldCB0byB0aGUgcGF0aCBvZiB0aGUgbW91bnQKK3BvaW50IHRvIGNoZWNrIGFuZCB0aGUgc2l6ZSBmaWVsZCBhZGp1c3RlZCBhcHByb3ByaWF0ZWx5LiBPbmUgdXNlcyB0aGUKK2lvY3RsZmQgZmllbGQgdG8gaWRlbnRpZnkgYSBzcGVjaWZpYyBtb3VudCBwb2ludCB0byBjaGVjayB3aGlsZSB0aGUgb3RoZXIKK3ZhcmlhdGlvbiB1c2VzIHRoZSBwYXRoIGFuZCBvcHRpb25hbHkgYXJnMSBzZXQgdG8gYW4gYXV0b2ZzIG1vdW50IHR5cGUuCitUaGUgY2FsbCByZXR1cm5zIDEgaWYgdGhpcyBpcyBhIG1vdW50IHBvaW50IGFuZCBzZXRzIGFyZzEgdG8gdGhlIGRldmljZQorbnVtYmVyIG9mIHRoZSBtb3VudCBhbmQgZmllbGQgYXJnMiB0byB0aGUgcmVsZXZhbnQgc3VwZXIgYmxvY2sgbWFnaWMKK251bWJlciAoZGVzY3JpYmVkIGJlbG93KSBvciAwIGlmIGl0IGlzbid0IGEgbW91bnRwb2ludC4gSW4gYm90aCBjYXNlcwordGhlIHRoZSBkZXZpY2UgbnVtYmVyIChhcyByZXR1cm5lZCBieSBuZXdfZW5jb2RlX2RldigpKSBpcyByZXR1cm5lZAoraW4gZmllbGQgYXJnMS4KKworSWYgc3VwcGxpZWQgd2l0aCBhIGZpbGUgZGVzY3JpcHRvciB3ZSdyZSBsb29raW5nIGZvciBhIHNwZWNpZmljIG1vdW50LAorbm90IG5lY2Vzc2FyaWx5IGF0IHRoZSB0b3Agb2YgdGhlIG1vdW50ZWQgc3RhY2suIEluIHRoaXMgY2FzZSB0aGUgcGF0aAordGhlIGRlc2NyaXB0b3IgY29ycmVzcG9uZHMgdG8gaXMgY29uc2lkZXJlZCBhIG1vdW50cG9pbnQgaWYgaXQgaXMgaXRzZWxmCithIG1vdW50cG9pbnQgb3IgY29udGFpbnMgYSBtb3VudCwgc3VjaCBhcyBhIG11bHRpLW1vdW50IHdpdGhvdXQgYSByb290Cittb3VudC4gSW4gdGhpcyBjYXNlIHdlIHJldHVybiAxIGlmIHRoZSBkZXNjcmlwdG9yIGNvcnJlc3BvbmRzIHRvIGEgbW91bnQKK3BvaW50IGFuZCBhbmQgYWxzbyByZXR1cm5zIHRoZSBzdXBlciBtYWdpYyBvZiB0aGUgY292ZXJpbmcgbW91bnQgaWYgdGhlcmUKK2lzIG9uZSBvciAwIGlmIGl0IGlzbid0IGEgbW91bnRwb2ludC4KKworSWYgYSBwYXRoIGlzIHN1cHBsaWVkIChhbmQgdGhlIGlvY3RsZmQgZmllbGQgaXMgc2V0IHRvIC0xKSB0aGVuIHRoZSBwYXRoCitpcyBsb29rZWQgdXAgYW5kIGlzIGNoZWNrZWQgdG8gc2VlIGlmIGl0IGlzIHRoZSByb290IG9mIGEgbW91bnQuIElmIGEKK3R5cGUgaXMgYWxzbyBnaXZlbiB3ZSBhcmUgbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIGF1dG9mcyBtb3VudCBhbmQgaWYKK2EgbWF0Y2ggaXNuJ3QgZm91bmQgYSBmYWlsIGlzIHJldHVybmVkLiBJZiB0aGUgdGhlIGxvY2F0ZWQgcGF0aCBpcyB0aGUKK3Jvb3Qgb2YgYSBtb3VudCAxIGlzIHJldHVybmVkIGFsb25nIHdpdGggdGhlIHN1cGVyIG1hZ2ljIG9mIHRoZSBtb3VudAorb3IgMCBvdGhlcndpc2UuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CmluZGV4IGI0NWYzYzFiLi45ZGQyYTNiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKQEAgLTk2LDYgKzk2LDExIEBACiBlcnJvcnM9Y29udGludWUJCUtlZXAgZ29pbmcgb24gYSBmaWxlc3lzdGVtIGVycm9yLgogZXJyb3JzPXBhbmljCQlQYW5pYyBhbmQgaGFsdCB0aGUgbWFjaGluZSBpZiBhbiBlcnJvciBvY2N1cnMuCiAKK2RhdGFfZXJyPWlnbm9yZSgqKQlKdXN0IHByaW50IGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJzCisJCQlpbiBhIGZpbGUgZGF0YSBidWZmZXIgaW4gb3JkZXJlZCBtb2RlLgorZGF0YV9lcnI9YWJvcnQJCUFib3J0IHRoZSBqb3VybmFsIGlmIGFuIGVycm9yIG9jY3VycyBpbiBhIGZpbGUKKwkJCWRhdGEgYnVmZmVyIGluIG9yZGVyZWQgbW9kZS4KKwogZ3JwaWQJCQlHaXZlIG9iamVjdHMgdGhlIHNhbWUgZ3JvdXAgSUQgYXMgdGhlaXIgY3JlYXRvci4KIGJzZGdyb3VwcwogCkBAIC0xOTMsNiArMTk4LDUgQEAKIHByb2dyYW1zOiAJaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCiAJCWh0dHA6Ly9leHQycmVzaXplLnNvdXJjZWZvcmdlLm5ldAogCi11c2VmdWwgbGlua3M6CWh0dHA6Ly93d3cuemlwLmNvbS5hdS9+YWtwbS9saW51eC9leHQzL2V4dDMtdXNhZ2UuaHRtbAotCQlodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL2xpbnV4L2xpYnJhcnkvbC1mczcvCit1c2VmdWwgbGlua3M6CWh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvbGludXgvbGlicmFyeS9sLWZzNy8KIAkJaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saWJyYXJ5L2wtZnM4LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKaW5kZXggZWIxNTRlZi4uMTc0ZWFmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CkBAIC0yLDE5ICsyLDI0IEBACiBFeHQ0IEZpbGVzeXN0ZW0KID09PT09PT09PT09PT09PQogCi1UaGlzIGlzIGEgZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtLCBhbiBhZHZhbmNlZCBsZXZlbAotb2YgdGhlIGV4dDMgZmlsZXN5c3RlbSB3aGljaCBpbmNvcnBvcmF0ZXMgc2NhbGFiaWxpdHkgYW5kIHJlbGlhYmlsaXR5Ci1lbmhhbmNlbWVudHMgZm9yIHN1cHBvcnRpbmcgbGFyZ2UgZmlsZXN5c3RlbXMgKDY0IGJpdCkgaW4ga2VlcGluZyB3aXRoCi1pbmNyZWFzaW5nIGRpc2sgY2FwYWNpdGllcyBhbmQgc3RhdGUtb2YtdGhlLWFydCBmZWF0dXJlIHJlcXVpcmVtZW50cy4KK0V4dDQgaXMgYW4gYW4gYWR2YW5jZWQgbGV2ZWwgb2YgdGhlIGV4dDMgZmlsZXN5c3RlbSB3aGljaCBpbmNvcnBvcmF0ZXMKK3NjYWxhYmlsaXR5IGFuZCByZWxpYWJpbGl0eSBlbmhhbmNlbWVudHMgZm9yIHN1cHBvcnRpbmcgbGFyZ2UgZmlsZXN5c3RlbXMKKyg2NCBiaXQpIGluIGtlZXBpbmcgd2l0aCBpbmNyZWFzaW5nIGRpc2sgY2FwYWNpdGllcyBhbmQgc3RhdGUtb2YtdGhlLWFydAorZmVhdHVyZSByZXF1aXJlbWVudHMuCiAKLU1haWxpbmcgbGlzdDogbGludXgtZXh0NEB2Z2VyLmtlcm5lbC5vcmcKK01haWxpbmcgbGlzdDoJbGludXgtZXh0NEB2Z2VyLmtlcm5lbC5vcmcKK1dlYiBzaXRlOglodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcKIAogCiAxLiBRdWljayB1c2FnZSBpbnN0cnVjdGlvbnM6CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorTm90ZTogTW9yZSBleHRlbnNpdmUgaW5mb3JtYXRpb24gZm9yIGdldHRpbmcgc3RhcnRlZCB3aXRoIGV4dDQgY2FuIGJlCisgICAgICBmb3VuZCBhdCB0aGUgZXh0NCB3aWtpIHNpdGUgYXQgdGhlIFVSTDoKKyAgICAgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvRXh0NF9Ib3d0bworCiAgIC0gQ29tcGlsZSBhbmQgaW5zdGFsbCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZTJmc3Byb2dzIChhcyBvZiB0aGlzCi0gICAgd3JpdGluZyB2ZXJzaW9uIDEuNDEpIGZyb206CisgICAgd3JpdGluZyB2ZXJzaW9uIDEuNDEuMykgZnJvbToKIAogICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTI0MDYKIAkKQEAgLTM2LDExICs0MSw5IEBACiAKICAgICAJIyBta2UyZnMgLXQgZXh0NCAvZGV2L2hkYTEKIAotICAgIE9yIGNvbmZpZ3VyZSBhbiBleGlzdGluZyBleHQzIGZpbGVzeXN0ZW0gdG8gc3VwcG9ydCBleHRlbnRzIGFuZCBzZXQKLSAgICB0aGUgdGVzdF9mcyBmbGFnIHRvIGluZGljYXRlIHRoYXQgaXQncyBvayBmb3IgYW4gaW4tZGV2ZWxvcG1lbnQKLSAgICBmaWxlc3lzdGVtIHRvIHRvdWNoIHRoaXMgZmlsZXN5c3RlbToKKyAgICBPciB0byBjb25maWd1cmUgYW4gZXhpc3RpbmcgZXh0MyBmaWxlc3lzdGVtIHRvIHN1cHBvcnQgZXh0ZW50czogCiAKLQkjIHR1bmUyZnMgLU8gZXh0ZW50cyAtRSB0ZXN0X2ZzIC9kZXYvaGRhMQorCSMgdHVuZTJmcyAtTyBleHRlbnRzIC9kZXYvaGRhMQogCiAgICAgSWYgdGhlIGZpbGVzeXN0ZW0gd2FzIGNyZWF0ZWQgd2l0aCAxMjggYnl0ZSBpbm9kZXMsIGl0IGNhbiBiZQogICAgIGNvbnZlcnRlZCB0byB1c2UgMjU2IGJ5dGUgZm9yIGdyZWF0ZXIgZWZmaWNpZW5jeSB2aWE6CkBAIC0xMDQsOCArMTA3LDggQEAKIFRoZSBiaWcgcGVyZm9ybWFuY2Ugd2luIHdpbGwgY29tZSB3aXRoIG1iYWxsb2MsIGRlbGFsbG9jIGFuZCBmbGV4X2JnCiBncm91cGluZyBvZiBiaXRtYXBzIGFuZCBpbm9kZSB0YWJsZXMuICBTb21lIHRlc3QgcmVzdWx0cyBhdmFpbGFibGUgaGVyZToKIAotIC0gaHR0cDovL3d3dy5idWxsb3BlbnNvdXJjZS5vcmcvZXh0NC8yMDA4MDUzMC9mZnNiLXdyaXRlLTIuNi4yNi1yYzIuaHRtbAotIC0gaHR0cDovL3d3dy5idWxsb3BlbnNvdXJjZS5vcmcvZXh0NC8yMDA4MDUzMC9mZnNiLXJlYWR3cml0ZS0yLjYuMjYtcmMyLmh0bWwKKyAtIGh0dHA6Ly93d3cuYnVsbG9wZW5zb3VyY2Uub3JnL2V4dDQvMjAwODA4MTgtZmZzYi9mZnNiLXdyaXRlLTIuNi4yNy1yYzEuaHRtbAorIC0gaHR0cDovL3d3dy5idWxsb3BlbnNvdXJjZS5vcmcvZXh0NC8yMDA4MDgxOC1mZnNiL2Zmc2ItcmVhZHdyaXRlLTIuNi4yNy1yYzEuaHRtbAogCiAzLiBPcHRpb25zCiA9PT09PT09PT09CkBAIC0yMTQsOSArMjE3LDYgQEAKIGJzZGRmCQkoKikJTWFrZSAnZGYnIGFjdCBsaWtlIEJTRC4KIG1pbml4ZGYJCQlNYWtlICdkZicgYWN0IGxpa2UgTWluaXguCiAKLWNoZWNrPW5vbmUJCURvbid0IGRvIGV4dHJhIGNoZWNraW5nIG9mIGJpdG1hcHMgb24gbW91bnQuCi1ub2NoZWNrCi0KIGRlYnVnCQkJRXh0cmEgZGVidWdnaW5nIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gc3lzbG9nLgogCiBlcnJvcnM9cmVtb3VudC1ybygqKQlSZW1vdW50IHRoZSBmaWxlc3lzdGVtIHJlYWQtb25seSBvbiBhbiBlcnJvci4KQEAgLTI1Myw4ICsyNTMsNiBAQAogCQkJIm5vYmgiIG9wdGlvbiB0cmllcyB0byBhdm9pZCBhc3NvY2lhdGluZyBidWZmZXIKIAkJCWhlYWRzIChzdXBwb3J0ZWQgb25seSBmb3IgIndyaXRlYmFjayIgbW9kZSkuCiAKLW1iYWxsb2MJCSgqKQlVc2UgdGhlIG11bHRpcGxlIGJsb2NrIGFsbG9jYXRvciBmb3IgYmxvY2sgYWxsb2NhdGlvbgotbm9tYmFsbG9jCQlkaXNhYmxlZCBtdWx0aXBsZSBibG9jayBhbGxvY2F0b3IgZm9yIGJsb2NrIGFsbG9jYXRpb24uCiBzdHJpcGU9bgkJTnVtYmVyIG9mIGZpbGVzeXN0ZW0gYmxvY2tzIHRoYXQgbWJhbGxvYyB3aWxsIHRyeQogCQkJdG8gdXNlIGZvciBhbGxvY2F0aW9uIHNpemUgYW5kIGFsaWdubWVudC4gRm9yIFJBSUQ1LzYKIAkJCXN5c3RlbXMgdGhpcyBzaG91bGQgYmUgdGhlIG51bWJlciBvZiBkYXRhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dAppbmRleCAzMWIzMjkxLi42OGJhZGRmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQKQEAgLTE2OSw3ICsxNjksNyBAQAogMy4xKSAgQm9vdGluZyBmcm9tIGEgZmxvcHB5IHVzaW5nIHN5c2xpbnV4CiAKIAlXaGVuIGJ1aWxkaW5nIGtlcm5lbHMsIGFuIGVhc3kgd2F5IHRvIGNyZWF0ZSBhIGJvb3QgZmxvcHB5IHRoYXQgdXNlcwotCXN5c2xpbnV4IGlzIHRvIHVzZSB0aGUgemRpc2sgb3IgYnpkaXNrIG1ha2UgdGFyZ2V0cyB3aGljaCB1c2UKKwlzeXNsaW51eCBpcyB0byB1c2UgdGhlIHpkaXNrIG9yIGJ6ZGlzayBtYWtlIHRhcmdldHMgd2hpY2ggdXNlIHppbWFnZQogICAgICAgCWFuZCBiemltYWdlIGltYWdlcyByZXNwZWN0aXZlbHkuIEJvdGggdGFyZ2V0cyBhY2NlcHQgdGhlCiAgICAgIAlGREFSR1MgcGFyYW1ldGVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9vY2ZzMi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dAppbmRleCBjMzE4YThiLi40MzQwY2M4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dApAQCAtNzYsMyArNzYsOSBAQAogCQkJbGFyZ2UsIHRoZSBmcyB3aWxsIHNpbGVudGx5IHJldmVydCBpdCB0byB0aGUgZGVmYXVsdC4KIAkJCUxvY2FsYWxsb2MgaXMgbm90IGVuYWJsZWQgZm9yIGxvY2FsIG1vdW50cy4KIGxvY2FsZmxvY2tzCQlUaGlzIGRpc2FibGVzIGNsdXN0ZXIgYXdhcmUgZmxvY2suCitpbm9kZTY0CQkJSW5kaWNhdGVzIHRoYXQgT2NmczIgaXMgYWxsb3dlZCB0byBjcmVhdGUgaW5vZGVzIGF0CisJCQlhbnkgbG9jYXRpb24gaW4gdGhlIGZpbGVzeXN0ZW0sIGluY2x1ZGluZyB0aG9zZSB3aGljaAorCQkJd2lsbCByZXN1bHQgaW4gaW5vZGUgbnVtYmVycyBvY2N1cHlpbmcgbW9yZSB0aGFuIDMyCisJCQliaXRzIG9mIHNpZ25pZmljYW5jZS4KK3VzZXJfeGF0dHIJKCopCUVuYWJsZXMgRXh0ZW5kZWQgVXNlciBBdHRyaWJ1dGVzLgorbm91c2VyX3hhdHRyCQlEaXNhYmxlcyBFeHRlbmRlZCBVc2VyIEF0dHJpYnV0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCBkODMxZDI0Li5iY2NlYjk5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTEzMjEsNiArMTMyMSwxOCBAQAogTk1JIHN3aXRjaCB0aGF0IG1vc3QgSUEzMiBzZXJ2ZXJzIGhhdmUgZmlyZXMgdW5rbm93biBOTUkgdXAsIGZvciBleGFtcGxlLgogSWYgYSBzeXN0ZW0gaGFuZ3MgdXAsIHRyeSBwcmVzc2luZyB0aGUgTk1JIHN3aXRjaC4KIAorcGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgTGludXggYmVoYXZpb3VyIG9uIGFuIE5NSSBvZiBlaXRoZXIgbWVtb3J5IG9yIHVua25vd24gaXMgdG8gY29udGludWUKK29wZXJhdGlvbi4gRm9yIG1hbnkgZW52aXJvbm1lbnRzIHN1Y2ggYXMgc2NpZW50aWZpYyBjb21wdXRpbmcgaXQgaXMgcHJlZmVyYWJsZQordGhhdCB0aGUgYm94IGlzIHRha2VuIG91dCBhbmQgdGhlIGVycm9yIGRlYWx0IHdpdGggdGhhbiBhbiB1bmNvcnJlY3RlZAorcGFyaXR5L0VDQyBlcnJvciBnZXQgcHJvcG9nYXRlZC4KKworQSBzbWFsbCBudW1iZXIgb2Ygc3lzdGVtcyBkbyBnZW5lcmF0ZSBOTUkncyBmb3IgYml6YXJyZSByYW5kb20gcmVhc29ucyBzdWNoIGFzCitwb3dlciBtYW5hZ2VtZW50IHNvIHRoZSBkZWZhdWx0IGlzIG9mZi4gVGhhdCBzeXNjdGwgd29ya3MgbGlrZSB0aGUgZXhpc3RpbmcKK3BhbmljIGNvbnRyb2xzIGFscmVhZHkgaW4gdGhhdCBkaXJlY3RvcnkuCisKIG5taV93YXRjaGRvZwogLS0tLS0tLS0tLS0tCiAKQEAgLTEzMzEsMTMgKzEzNDMsNiBAQAogQmVjYXVzZSB0aGUgTk1JIHdhdGNoZG9nIHNoYXJlcyByZWdpc3RlcnMgd2l0aCBvcHJvZmlsZSwgYnkgZGlzYWJsaW5nIHRoZSBOTUkKIHdhdGNoZG9nLCBvcHJvZmlsZSBtYXkgaGF2ZSBtb3JlIHJlZ2lzdGVycyB0byB1dGlsaXplLgogCi1tYXBzX3Byb3RlY3QKLS0tLS0tLS0tLS0tLQotCi1FbmFibGVzL0Rpc2FibGVzIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSBwZXItcHJvY2VzcyBwcm9jIGVudHJpZXMgIm1hcHMiIGFuZAotInNtYXBzIi4gIFdoZW4gZW5hYmxlZCwgdGhlIGNvbnRlbnRzIG9mIHRoZXNlIGZpbGVzIGFyZSB2aXNpYmxlIG9ubHkgdG8KLXJlYWRlcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBwdHJhY2UoKSB0aGUgZ2l2ZW4gcHJvY2Vzcy4KLQogbXNnbW5pCiAtLS0tLS0KIApAQCAtMTM3OSwxNSArMTM4NCwxOCBAQAogZGlydHlfYmFja2dyb3VuZF9yYXRpbwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIHN5c3RlbSBtZW1vcnksIHRoZSBudW1iZXIgb2YgcGFnZXMgYXQgd2hpY2gKLXRoZSBwZGZsdXNoIGJhY2tncm91bmQgd3JpdGViYWNrIGRhZW1vbiB3aWxsIHN0YXJ0IHdyaXRpbmcgb3V0IGRpcnR5IGRhdGEuCitDb250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBkaXJ0eWFibGUgc3lzdGVtIG1lbW9yeSAoZnJlZSBwYWdlcyArIG1hcHBlZAorcGFnZXMgKyBmaWxlIGNhY2hlLCBub3QgaW5jbHVkaW5nIGxvY2tlZCBwYWdlcyBhbmQgSHVnZVBhZ2VzKSwgdGhlIG51bWJlciBvZgorcGFnZXMgYXQgd2hpY2ggdGhlIHBkZmx1c2ggYmFja2dyb3VuZCB3cml0ZWJhY2sgZGFlbW9uIHdpbGwgc3RhcnQgd3JpdGluZyBvdXQKK2RpcnR5IGRhdGEuCiAKIGRpcnR5X3JhdGlvCiAtLS0tLS0tLS0tLS0tLS0tLQogCi1Db250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIHN5c3RlbSBtZW1vcnksIHRoZSBudW1iZXIgb2YgcGFnZXMgYXQgd2hpY2gKLWEgcHJvY2VzcyB3aGljaCBpcyBnZW5lcmF0aW5nIGRpc2sgd3JpdGVzIHdpbGwgaXRzZWxmIHN0YXJ0IHdyaXRpbmcgb3V0IGRpcnR5Ci1kYXRhLgorQ29udGFpbnMsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgZGlydHlhYmxlIHN5c3RlbSBtZW1vcnkgKGZyZWUgcGFnZXMgKyBtYXBwZWQKK3BhZ2VzICsgZmlsZSBjYWNoZSwgbm90IGluY2x1ZGluZyBsb2NrZWQgcGFnZXMgYW5kIEh1Z2VQYWdlcyksIHRoZSBudW1iZXIgb2YKK3BhZ2VzIGF0IHdoaWNoIGEgcHJvY2VzcyB3aGljaCBpcyBnZW5lcmF0aW5nIGRpc2sgd3JpdGVzIHdpbGwgaXRzZWxmIHN0YXJ0Cit3cml0aW5nIG91dCBkaXJ0eSBkYXRhLgogCiBkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNDA3LDI0ICsyNDE1LDI5IEBACiBvZiBtZW1vcnkgdHlwZXMuIElmIGEgYml0IG9mIHRoZSBiaXRtYXNrIGlzIHNldCwgbWVtb3J5IHNlZ21lbnRzIG9mIHRoZQogY29ycmVzcG9uZGluZyBtZW1vcnkgdHlwZSBhcmUgZHVtcGVkLCBvdGhlcndpc2UgdGhleSBhcmUgbm90IGR1bXBlZC4KIAotVGhlIGZvbGxvd2luZyA0IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgorVGhlIGZvbGxvd2luZyA3IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgogICAtIChiaXQgMCkgYW5vbnltb3VzIHByaXZhdGUgbWVtb3J5CiAgIC0gKGJpdCAxKSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeQogICAtIChiaXQgMikgZmlsZS1iYWNrZWQgcHJpdmF0ZSBtZW1vcnkKICAgLSAoYml0IDMpIGZpbGUtYmFja2VkIHNoYXJlZCBtZW1vcnkKICAgLSAoYml0IDQpIEVMRiBoZWFkZXIgcGFnZXMgaW4gZmlsZS1iYWNrZWQgcHJpdmF0ZSBtZW1vcnkgYXJlYXMgKGl0IGlzCiAgICAgICAgICAgICBlZmZlY3RpdmUgb25seSBpZiB0aGUgYml0IDIgaXMgY2xlYXJlZCkKKyAgLSAoYml0IDUpIGh1Z2V0bGIgcHJpdmF0ZSBtZW1vcnkKKyAgLSAoYml0IDYpIGh1Z2V0bGIgc2hhcmVkIG1lbW9yeQogCiAgIE5vdGUgdGhhdCBNTUlPIHBhZ2VzIHN1Y2ggYXMgZnJhbWUgYnVmZmVyIGFyZSBuZXZlciBkdW1wZWQgYW5kIHZEU08gcGFnZXMKICAgYXJlIGFsd2F5cyBkdW1wZWQgcmVnYXJkbGVzcyBvZiB0aGUgYml0bWFzayBzdGF0dXMuCiAKLURlZmF1bHQgdmFsdWUgb2YgY29yZWR1bXBfZmlsdGVyIGlzIDB4MzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeQotc2VnbWVudHMgYXJlIGR1bXBlZC4KKyAgTm90ZSBiaXQgMC00IGRvZXNuJ3QgZWZmZWN0IGFueSBodWdldGxiIG1lbW9yeS4gaHVnZXRsYiBtZW1vcnkgYXJlIG9ubHkKKyAgZWZmZWN0ZWQgYnkgYml0IDUtNi4KKworRGVmYXVsdCB2YWx1ZSBvZiBjb3JlZHVtcF9maWx0ZXIgaXMgMHgyMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeQorc2VnbWVudHMgYW5kIGh1Z2V0bGIgcHJpdmF0ZSBtZW1vcnkgYXJlIGR1bXBlZC4KIAogSWYgeW91IGRvbid0IHdhbnQgdG8gZHVtcCBhbGwgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBhdHRhY2hlZCB0byBwaWQgMTIzNCwKLXdyaXRlIDEgdG8gdGhlIHByb2Nlc3MncyBwcm9jIGZpbGUuCit3cml0ZSAweDIxIHRvIHRoZSBwcm9jZXNzJ3MgcHJvYyBmaWxlLgogCi0gICQgZWNobyAweDEgPiAvcHJvYy8xMjM0L2NvcmVkdW1wX2ZpbHRlcgorICAkIGVjaG8gMHgyMSA+IC9wcm9jLzEyMzQvY29yZWR1bXBfZmlsdGVyCiAKIFdoZW4gYSBuZXcgcHJvY2VzcyBpcyBjcmVhdGVkLCB0aGUgcHJvY2VzcyBpbmhlcml0cyB0aGUgYml0bWFzayBzdGF0dXMgZnJvbSBpdHMKIHBhcmVudC4gSXQgaXMgdXNlZnVsIHRvIHNldCB1cCBjb3JlZHVtcF9maWx0ZXIgYmVmb3JlIHRoZSBwcm9ncmFtIHJ1bnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JhbWZzLXJvb3Rmcy1pbml0cmFtZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9yYW1mcy1yb290ZnMtaW5pdHJhbWZzLnR4dAppbmRleCA3YmUyMzJiLi42MmZlOWIxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JhbWZzLXJvb3Rmcy1pbml0cmFtZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcmFtZnMtcm9vdGZzLWluaXRyYW1mcy50eHQKQEAgLTI2Myw3ICsyNjMsNyBAQAogICAgIHNsZWVwKDk5OTk5OTk5OSk7CiAgIH0KICAgRU9GCi0gIGdjYyAtc3RhdGljIGhlbGxvMi5jIC1vIGluaXQKKyAgZ2NjIC1zdGF0aWMgaGVsbG8uYyAtbyBpbml0CiAgIGVjaG8gaW5pdCB8IGNwaW8gLW8gLUggbmV3YyB8IGd6aXAgPiB0ZXN0LmNwaW8uZ3oKICAgIyBUZXN0aW5nIGV4dGVybmFsIGluaXRyYW1mcyB1c2luZyB0aGUgaW5pdHJkIGxvYWRpbmcgbWVjaGFuaXNtLgogICBxZW11IC1rZXJuZWwgL2Jvb3Qvdm1saW51eiAtaW5pdHJkIHRlc3QuY3Bpby5neiAvZGV2L3plcm8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91Ymlmcy50eHQKaW5kZXggNmEwZDcwYS4uZGQ4NGVhMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91Ymlmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91Ymlmcy50eHQKQEAgLTg2LDYgKzg2LDE1IEBACiBmYXN0X3VubW91bnQJCWRvIG5vdCBjb21taXQgb24gdW5tb3VudDsgdGhpcyBvcHRpb24gbWFrZXMKIAkJCXVubW91bnQgZmFzdGVyLCBidXQgdGhlIG5leHQgbW91bnQgc2xvd2VyCiAJCQliZWNhdXNlIG9mIHRoZSBuZWVkIHRvIHJlcGxheSB0aGUgam91cm5hbC4KK2J1bGtfcmVhZAkJcmVhZCBtb3JlIGluIG9uZSBnbyB0byB0YWtlIGFkdmFudGFnZSBvZiBmbGFzaAorCQkJbWVkaWEgdGhhdCByZWFkIGZhc3RlciBzZXF1ZW50aWFsbHkKK25vX2J1bGtfcmVhZCAoKikJZG8gbm90IGJ1bGstcmVhZAorbm9fY2hrX2RhdGFfY3JjCQlza2lwIGNoZWNraW5nIG9mIENSQ3Mgb24gZGF0YSBub2RlcyBpbiBvcmRlciB0bworCQkJaW1wcm92ZSByZWFkIHBlcmZvcm1hbmNlLiBVc2UgdGhpcyBvcHRpb24gb25seQorCQkJaWYgdGhlIGZsYXNoIG1lZGlhIGlzIGhpZ2hseSByZWxpYWJsZS4gVGhlIGVmZmVjdAorCQkJb2YgdGhpcyBvcHRpb24gaXMgdGhhdCBjb3JydXB0aW9uIG9mIHRoZSBjb250ZW50cworCQkJb2YgYSBmaWxlIGNhbiBnbyB1bm5vdGljZWQuCitjaGtfZGF0YV9jcmMgKCopCWRvIG5vdCBza2lwIGNoZWNraW5nIENSQ3Mgb24gZGF0YSBub2RlcwogCiAKIFF1aWNrIHVzYWdlIGluc3RydWN0aW9ucwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dCBiL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKaW5kZXggMTgwMjJlMi4uYjFiOTg4NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CkBAIC0yNDAsNiArMjQwLDEwIEBACiBuZWVkZWQgdG8gbWFuYWdlIGEgc2lnbmFsIHRoYXQncyBpbiBhY3RpdmUgdXNlLiAgVGhhdCBpcywgcmVxdWVzdGluZyBhCiBHUElPIGNhbiBzZXJ2ZSBhcyBhIGtpbmQgb2YgbG9jay4KIAorU29tZSBwbGF0Zm9ybXMgbWF5IGFsc28gdXNlIGtub3dsZWRnZSBhYm91dCB3aGF0IEdQSU9zIGFyZSBhY3RpdmUgZm9yCitwb3dlciBtYW5hZ2VtZW50LCBzdWNoIGFzIGJ5IHBvd2VyaW5nIGRvd24gdW51c2VkIGNoaXAgc2VjdG9ycyBhbmQsIG1vcmUKK2Vhc2lseSwgZ2F0aW5nIG9mZiB1bnVzZWQgY2xvY2tzLgorCiBUaGVzZSB0d28gY2FsbHMgYXJlIG9wdGlvbmFsIGJlY2F1c2Ugbm90IG5vdCBhbGwgY3VycmVudCBMaW51eCBwbGF0Zm9ybXMKIG9mZmVyIHN1Y2ggZnVuY3Rpb25hbGl0eSBpbiB0aGVpciBHUElPIHN1cHBvcnQ7IGEgdmFsaWQgaW1wbGVtZW50YXRpb24KIGNvdWxkIHJldHVybiBzdWNjZXNzIGZvciBhbGwgZ3Bpb19yZXF1ZXN0KCkgY2FsbHMuICBVbmxpa2UgdGhlIG90aGVyIGNhbGxzLApAQCAtMjY0LDcgKzI2OCw3IEBACiAJLyogbWFwIEdQSU8gbnVtYmVycyB0byBJUlEgbnVtYmVycyAqLwogCWludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKTsKIAotCS8qIG1hcCBJUlEgbnVtYmVycyB0byBHUElPIG51bWJlcnMgKi8KKwkvKiBtYXAgSVJRIG51bWJlcnMgdG8gR1BJTyBudW1iZXJzIChhdm9pZCB1c2luZyB0aGlzKSAqLwogCWludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpOwogCiBUaG9zZSByZXR1cm4gZWl0aGVyIHRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBpbiB0aGUgb3RoZXIgbmFtZXNwYWNlLCBvcgpAQCAtMjg0LDcgKzI4OCw4IEBACiAKIE5vbi1lcnJvciB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBpcnFfdG9fZ3BpbygpIHdvdWxkIG1vc3QgY29tbW9ubHkgYmUgdXNlZAogd2l0aCBncGlvX2dldF92YWx1ZSgpLCBmb3IgZXhhbXBsZSB0byBpbml0aWFsaXplIG9yIHVwZGF0ZSBkcml2ZXIgc3RhdGUKLXdoZW4gdGhlIElSUSBpcyBlZGdlLXRyaWdnZXJlZC4KK3doZW4gdGhlIElSUSBpcyBlZGdlLXRyaWdnZXJlZC4gIE5vdGUgdGhhdCBzb21lIHBsYXRmb3JtcyBkb24ndCBzdXBwb3J0Cit0aGlzIHJldmVyc2UgbWFwcGluZywgc28geW91IHNob3VsZCBhdm9pZCB1c2luZyBpdC4KIAogCiBFbXVsYXRpbmcgT3BlbiBEcmFpbiBTaWduYWxzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkdDc0NzAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkdDc0NzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkMTNjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vYWR0NzQ3MApAQCAtMCwwICsxLDc2IEBACitLZXJuZWwgZHJpdmVyIGFkdDc0NzAKKz09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogQW5hbG9nIERldmljZXMgQURUNzQ3MAorICAgIFByZWZpeDogJ2FkdDc0NzAnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDJDLCAweDJFLCAweDJGCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIEFuYWxvZyBEZXZpY2VzIHdlYnNpdGUKKworQXV0aG9yOiBEYXJyaWNrIEouIFdvbmcKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzIEFEVDc0NzAgY2hpcC4gIFRoZXJlIG1heQorYmUgb3RoZXIgY2hpcHMgdGhhdCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuCisKK1RoZSBBRFQ3NDcwIHVzZXMgdGhlIDItd2lyZSBpbnRlcmZhY2UgY29tcGF0aWJsZSB3aXRoIHRoZSBTTUJ1cyAyLjAKK3NwZWNpZmljYXRpb24uIFVzaW5nIGFuIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlciBpdCBtZWFzdXJlcyB1cCB0byB0ZW4gKDEwKQorZXh0ZXJuYWwgdGVtcGVyYXR1cmVzLiBJdCBoYXMgZm91ciAoNCkgMTYtYml0IGNvdW50ZXJzIGZvciBtZWFzdXJpbmcgZmFuIHNwZWVkLgorVGhlcmUgYXJlIGZvdXIgKDQpIFBXTSBvdXRwdXRzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29udHJvbCBmYW4gc3BlZWQuCisKK0Egc29waGlzdGljYXRlZCBjb250cm9sIHN5c3RlbSBmb3IgdGhlIFBXTSBvdXRwdXRzIGlzIGRlc2lnbmVkIGludG8gdGhlIEFEVDc0NzAKK3RoYXQgYWxsb3dzIGZhbiBzcGVlZCB0byBiZSBhZGp1c3RlZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIGFueSBvZiB0aGUgdGVuCit0ZW1wZXJhdHVyZSBzZW5zb3JzLiBFYWNoIFBXTSBvdXRwdXQgaXMgaW5kaXZpZHVhbGx5IGFkanVzdGFibGUgYW5kCitwcm9ncmFtbWFibGUuIE9uY2UgY29uZmlndXJlZCwgdGhlIEFEVDc0NzAgd2lsbCBhZGp1c3QgdGhlIFBXTSBvdXRwdXRzIGluCityZXNwb25zZSB0byB0aGUgbWVhc3VyZWQgdGVtcGVyYXR1cmVzIHdpdGggZnVydGhlciBob3N0IGludGVydmVudGlvbi4gIFRoaXMKK2ZlYXR1cmUgY2FuIGFsc28gYmUgZGlzYWJsZWQgZm9yIG1hbnVhbCBjb250cm9sIG9mIHRoZSBQV00ncy4KKworRWFjaCBvZiB0aGUgbWVhc3VyZWQgaW5wdXRzICh0ZW1wZXJhdHVyZSwgZmFuIHNwZWVkKSBoYXMgY29ycmVzcG9uZGluZyBoaWdoL2xvdworbGltaXQgdmFsdWVzLiBUaGUgQURUNzQ3MCB3aWxsIHNpZ25hbCBhbiBBTEFSTSBpZiBhbnkgbWVhc3VyZWQgdmFsdWUgZXhjZWVkcworZWl0aGVyIGxpbWl0LgorCitUaGUgQURUNzQ3MCBET0VTIE5PVCBzYW1wbGUgYWxsIGlucHV0cyBjb250aW51b3VzbHkuICBBIHNpbmdsZSBwaW4gb24gdGhlCitBRFQ3NDcwIGlzIGNvbm5lY3RlZCB0byBhIG11bHRpdHVkZSBvZiB0aGVybWFsIGRpb2RlcywgYnV0IHRoZSBjaGlwIG11c3QgYmUKK2luc3RydWN0ZWQgZXhwbGljaXRseSB0byByZWFkIHRoZSBtdWx0aXR1ZGUgb2YgZGlvZGVzLiAgSWYgeW91IHdhbnQgdG8gdXNlCithdXRvbWF0aWMgZmFuIGNvbnRyb2wgbW9kZSwgeW91IG11c3QgbWFudWFsbHkgcmVhZCBhbnkgb2YgdGhlIHRlbXBlcmF0dXJlCitzZW5zb3JzIG9yIHRoZSBmYW4gY29udHJvbCBhbGdvcml0aG0gd2lsbCBub3QgcnVuLiAgVGhlIGNoaXAgV0lMTCBOT1QgRE8gVEhJUworQVVUT01BVElDQUxMWTsgdGhpcyBtdXN0IGJlIGRvbmUgZnJvbSB1c2Vyc3BhY2UuICBUaGlzIG1heSBiZSBhIGJ1ZyBpbiB0aGUgY2hpcAorZGVzaWduLCBnaXZlbiB0aGF0IG1hbnkgb3RoZXIgQUQgY2hpcHMgdGFrZSBjYXJlIG9mIHRoaXMuICBUaGUgZHJpdmVyIHdpbGwgbm90CityZWFkIHRoZSByZWdpc3RlcnMgbW9yZSBvZnRlbiB0aGFuIG9uY2UgZXZlcnkgNSBzZWNvbmRzLiAgRnVydGhlciwKK2NvbmZpZ3VyYXRpb24gZGF0YSBpcyBvbmx5IHJlYWQgb25jZSBwZXIgbWludXRlLgorCitTcGVjaWFsIEZlYXR1cmVzCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBBRFQ3NDcwIGhhcyBhIDgtYml0IEFEQyBhbmQgaXMgY2FwYWJsZSBvZiBtZWFzdXJpbmcgdGVtcGVyYXR1cmVzIHdpdGggMQorZGVnQyByZXNvbHV0aW9uLgorCitUaGUgQW5hbG9nIERldmljZXMgZGF0YXNoZWV0IGlzIHZlcnkgZGV0YWlsZWQgYW5kIGRlc2NyaWJlcyBhIHByb2NlZHVyZSBmb3IKK2RldGVybWluaW5nIGFuIG9wdGltYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGF1dG9tYXRpYyBQV00gY29udHJvbC4KKworQ29uZmlndXJhdGlvbiBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZXNpZGVzIHN0YW5kYXJkIGludGVyZmFjZXMgZHJpdmVyIGFkZHMgdGhlIGZvbGxvd2luZzoKKworKiBQV00gQ29udHJvbAorCisqIHB3bSNfYXV0b19wb2ludDFfcHdtIGFuZCBwd20jX2F1dG9fcG9pbnQxX3RlbXAgYW5kCisqIHB3bSNfYXV0b19wb2ludDJfcHdtIGFuZCBwd20jX2F1dG9fcG9pbnQyX3RlbXAgLQorCitwb2ludDE6IFNldCB0aGUgcHdtIHNwZWVkIGF0IGEgbG93ZXIgdGVtcGVyYXR1cmUgYm91bmQuCitwb2ludDI6IFNldCB0aGUgcHdtIHNwZWVkIGF0IGEgaGlnaGVyIHRlbXBlcmF0dXJlIGJvdW5kLgorCitUaGUgQURUNzQ3MCB3aWxsIHNjYWxlIHRoZSBwd20gYmV0d2VlbiB0aGUgbG93ZXIgYW5kIGhpZ2hlciBwd20gc3BlZWQgd2hlbgordGhlIHRlbXBlcmF0dXJlIGlzIGJldHdlZW4gdGhlIHR3byB0ZW1wZXJhdHVyZSBib3VuZGFyaWVzLiAgUFdNIHZhbHVlcyByYW5nZQorZnJvbSAwIChvZmYpIHRvIDI1NSAoZnVsbCBzcGVlZCkuICBGYW4gc3BlZWQgd2lsbCBiZSBzZXQgdG8gbWF4aW11bSB3aGVuIHRoZQordGVtcGVyYXR1cmUgc2Vuc29yIGFzc29jaWF0ZWQgd2l0aCB0aGUgUFdNIGNvbnRyb2wgZXhjZWVkcworcHdtI19hdXRvX3BvaW50Ml90ZW1wLgorCitOb3RlcworLS0tLS0KKworQXMgc3RhdGVkIGFib3ZlLCB0aGUgdGVtcGVyYXR1cmUgaW5wdXRzIG11c3QgYmUgcmVhZCBwZXJpb2RpY2FsbHkgZnJvbQordXNlcnNwYWNlIGluIG9yZGVyIGZvciB0aGUgYXV0b21hdGljIHB3bSBhbGdvcml0aG0gdG8gcnVuLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3IGIvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3CmluZGV4IDM0OTZiNzAuLjA0MmMwNDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vaXQ4NworKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcKQEAgLTEzNiwxMCArMTM2LDEwIEBACiBUaGUgSVQ4N3h4IG9ubHkgdXBkYXRlcyBpdHMgdmFsdWVzIGVhY2ggMS41IHNlY29uZHM7IHJlYWRpbmcgaXQgbW9yZSBvZnRlbgogd2lsbCBkbyBubyBoYXJtLCBidXQgd2lsbCByZXR1cm4gJ29sZCcgdmFsdWVzLgogCi1UbyBjaGFuZ2Ugc2Vuc29yIE4gdG8gYSB0aGVybWlzdG9yLCAnZWNobyAyID4gdGVtcE5fdHlwZScgd2hlcmUgTiBpcyAxLCAyLAorVG8gY2hhbmdlIHNlbnNvciBOIHRvIGEgdGhlcm1pc3RvciwgJ2VjaG8gNCA+IHRlbXBOX3R5cGUnIHdoZXJlIE4gaXMgMSwgMiwKIG9yIDMuIFRvIGNoYW5nZSBzZW5zb3IgTiB0byBhIHRoZXJtYWwgZGlvZGUsICdlY2hvIDMgPiB0ZW1wTl90eXBlJy4KIEdpdmUgMCBmb3IgdW51c2VkIHNlbnNvci4gQW55IG90aGVyIHZhbHVlIGlzIGludmFsaWQuIFRvIGNvbmZpZ3VyZSB0aGlzIGF0Ci1zdGFydHVwLCBjb25zdWx0IGxtX3NlbnNvcnMncyAvZXRjL3NlbnNvcnMuY29uZi4gKDIgPSB0aGVybWlzdG9yOworc3RhcnR1cCwgY29uc3VsdCBsbV9zZW5zb3JzJ3MgL2V0Yy9zZW5zb3JzLmNvbmYuICg0ID0gdGhlcm1pc3RvcjsKIDMgPSB0aGVybWFsIGRpb2RlKQogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG04NSBiL0RvY3VtZW50YXRpb24vaHdtb24vbG04NQppbmRleCA2ZDQxZGI3Li40MDA2MjA3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg1CkBAIC0xNjMsMTYgKzE2Myw2IEBACiAqIHB3bSNfYXV0b19wd21fbWluIC0gdGhpcyBzcGVjaWZpZXMgdGhlIFBXTSB2YWx1ZSBmb3IgdGVtcCNfYXV0b190ZW1wX29mZgogICAgICAgICAgICAgICAgICAgICAgIHRlbXBlcmF0dXJlLiAoUFdNIHZhbHVlIGZyb20gMCB0byAyNTUpCiAKLSogcHdtI19hdXRvX3B3bV9mcmVxIC0gc2VsZWN0IGJhc2UgZnJlcXVlbmN5IG9mIFBXTSBvdXRwdXQuIFlvdSBjYW4gc2VsZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgIGluIHJhbmdlIG9mIDEwLjAgdG8gOTQuMCBIeiBpbiAuMSBIeiB1bml0cy4KLQkJICAgICAgIChWYWx1ZXMgMTAwIHRvIDk0MCkuCi0KLVRoZSBwd20jX2F1dG9fcHdtX2ZyZXEgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZyA4IHZhbHVlcy4gU2V0dGluZyB0aGUKLWZyZXF1ZW5jeSB0byBhIHZhbHVlIG5vdCBvbiB0aGlzIGxpc3QsIHdpbGwgcmVzdWx0IGluIHRoZSBuZXh0IGhpZ2hlciBmcmVxdWVuY3kKLWJlaW5nIHNlbGVjdGVkLiBUaGUgYWN0dWFsIGRldmljZSBmcmVxdWVuY3kgbWF5IHZhcnkgc2xpZ2h0bHkgZnJvbSB0aGlzCi1zcGVjaWZpY2F0aW9uIGFzIGRlc2lnbmVkIGJ5IHRoZSBtYW51ZmFjdHVyZXIuIENvbnN1bHQgdGhlIGRhdGFzaGVldCBmb3IgbW9yZQotZGV0YWlscy4gKFBXTSBGcmVxdWVuY3kgdmFsdWVzOiAgMTAwLCAxNTAsIDIzMCwgMzAwLCAzODAsIDQ3MCwgNjIwLCA5NDApCi0KICogcHdtI19hdXRvX3B3bV9taW5jdGwgLSB0aGlzIGZsYWdzIHNlbGVjdHMgZm9yIHRlbXAjX2F1dG9fdGVtcF9vZmYgdGVtcGVyYXR1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYmFoYXZpb3VyIG9mIGZhbnMuIFdyaXRlIDEgdG8gbGV0IGZhbnMgc3Bpbm5pbmcgYXQKIAkJCSBwd20jX2F1dG9fcHdtX21pbiBvciB3cml0ZSAwIHRvIGxldCB0aGVtIG9mZi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG04NyBiL0RvY3VtZW50YXRpb24vaHdtb24vbG04NwppbmRleCBlYzI3YWExLi42YjQ3YjY3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODcKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg3CkBAIC02NSwxMSArNjUsMTAgQEAKIGRlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KIAogU29tZSBmdW5jdGlvbnMgc2hhcmUgcGlucywgc28gbm90IGFsbCBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBhdCB0aGUgc2FtZQotdGltZS4gV2hpY2ggYXJlIGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlIHNldHVwLiBUaGlzIGRyaXZlciBhc3N1bWVzIHRoYXQKLXRoZSBCSU9TIGNvbmZpZ3VyZWQgdGhlIGNoaXAgY29ycmVjdGx5LiBJbiB0aGF0IHJlc3BlY3QsIGl0IGRpZmZlcnMgZnJvbQotdGhlIG9yaWdpbmFsIGRyaXZlciAoZnJvbSBsbV9zZW5zb3JzIGZvciBMaW51eCAyLjQpLCB3aGljaCB3b3VsZCBmb3JjZSB0aGUKLUxNODcgdG8gYW4gYXJiaXRyYXJ5LCBjb21waWxlLXRpbWUgY2hvc2VuIG1vZGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdHVhbAotY2hpcHNldCB3aXJpbmcuCit0aW1lLiBXaGljaCBhcmUgZGVwZW5kcyBvbiB0aGUgaGFyZHdhcmUgc2V0dXAuIFRoaXMgZHJpdmVyIG5vcm1hbGx5Cithc3N1bWVzIHRoYXQgZmlybXdhcmUgY29uZmlndXJlZCB0aGUgY2hpcCBjb3JyZWN0bHkuIFdoZXJlIHRoaXMgaXMgbm90Cit0aGUgY2FzZSwgcGxhdGZvcm0gY29kZSBtdXN0IHNldCB0aGUgSTJDIGNsaWVudCdzIHBsYXRmb3JtX2RhdGEgdG8gcG9pbnQKK3RvIGEgdTggdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgY2hhbm5lbCByZWdpc3Rlci4KIAogRm9yIHJlZmVyZW5jZSwgaGVyZSBpcyB0aGUgbGlzdCBvZiBleGNsdXNpdmUgZnVuY3Rpb25zOgogIC0gaW4wK2luNSAoZGVmYXVsdCkgb3IgdGVtcDMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05MCBiL0RvY3VtZW50YXRpb24vaHdtb24vbG05MAppbmRleCBhYTRhMGVjLi5lMGQ1MjA2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwCkBAIC0xMSw3ICsxMSw3IEBACiAgICAgUHJlZml4OiAnbG05OScKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMgYW5kIDB4NGQKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciB3ZWJzaXRlCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTg5Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL21wZi9MTS9MTTg5Lmh0bWwKICAgKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTkKICAgICBQcmVmaXg6ICdsbTk5JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YyBhbmQgMHg0ZApAQCAtMjEsMTggKzIxLDMyIEBACiAgICAgUHJlZml4OiAnbG04NicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciB3ZWJzaXRlCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTg2Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL21wZi9MTS9MTTg2Lmh0bWwKICAgKiBBbmFsb2cgRGV2aWNlcyBBRE0xMDMyCiAgICAgUHJlZml4OiAnYWRtMTAzMicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMgYW5kIDB4NGQKLSAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgQW5hbG9nIERldmljZXMgd2Vic2l0ZQotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hbmFsb2cuY29tL2VuL3Byb2QvMCwyODc3LEFETTEwMzIsMDAuaHRtbAorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBPTiBTZW1pY29uZHVjdG9yIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cub25zZW1pLmNvbS9Qb3dlclNvbHV0aW9ucy9wcm9kdWN0LmRvP2lkPUFETTEwMzIKICAgKiBBbmFsb2cgRGV2aWNlcyBBRFQ3NDYxCiAgICAgUHJlZml4OiAnYWR0NzQ2MScKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMgYW5kIDB4NGQKLSAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgQW5hbG9nIERldmljZXMgd2Vic2l0ZQotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hbmFsb2cuY29tL2VuL3Byb2QvMCwyODc3LEFEVDc0NjEsMDAuaHRtbAotICAgIE5vdGU6IE9ubHkgaWYgaW4gQURNMTAzMiBjb21wYXRpYmlsaXR5IG1vZGUKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgT04gU2VtaWNvbmR1Y3RvciB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm9uc2VtaS5jb20vUG93ZXJTb2x1dGlvbnMvcHJvZHVjdC5kbz9pZD1BRFQ3NDYxCisgICogTWF4aW0gTUFYNjY0NgorICAgIFByZWZpeDogJ21heDY2NDYnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRkCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE1heGltIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubWF4aW0taWMuY29tL3F1aWNrX3ZpZXcyLmNmbS9xdl9way8zNDk3CisgICogTWF4aW0gTUFYNjY0NworICAgIFByZWZpeDogJ21heDY2NDYnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRlCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE1heGltIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubWF4aW0taWMuY29tL3F1aWNrX3ZpZXcyLmNmbS9xdl9way8zNDk3CisgICogTWF4aW0gTUFYNjY0OQorICAgIFByZWZpeDogJ21heDY2NDYnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE1heGltIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubWF4aW0taWMuY29tL3F1aWNrX3ZpZXcyLmNmbS9xdl9way8zNDk3CiAgICogTWF4aW0gTUFYNjY1NwogICAgIFByZWZpeDogJ21heDY2NTcnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjCkBAIC03MCwyNSArODQsMjEgQEAKIAogVGhlIExNOTAgaXMgYSBkaWdpdGFsIHRlbXBlcmF0dXJlIHNlbnNvci4gSXQgc2Vuc2VzIGl0cyBvd24gdGVtcGVyYXR1cmUgYXMKIHdlbGwgYXMgdGhlIHRlbXBlcmF0dXJlIG9mIHVwIHRvIG9uZSBleHRlcm5hbCBkaW9kZS4gSXQgaXMgY29tcGF0aWJsZQotd2l0aCBtYW55IG90aGVyIGRldmljZXMgc3VjaCBhcyB0aGUgTE04NiwgdGhlIExNODksIHRoZSBMTTk5LCB0aGUgQURNMTAzMiwKLXRoZSBNQVg2NjU3LCBNQVg2NjU4LCBNQVg2NjU5LCBNQVg2NjgwIGFuZCB0aGUgTUFYNjY4MSBhbGwgb2Ygd2hpY2ggYXJlCi1zdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuCit3aXRoIG1hbnkgb3RoZXIgZGV2aWNlcywgbWFueSBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgogCiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSBNQVg2NjU3LAogTUFYNjY1OCBhbmQgTUFYNjY1OSB2YXJpYW50cy4gVGhlIGV4dHJhIGFkZHJlc3MgYW5kIGZlYXR1cmVzIG9mIHRoZQogTUFYNjY1OSBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4gVGhlIE1BWDY2ODAgYW5kIE1BWDY2ODEgb25seQogZGlmZmVyIGluIHRoZWlyIHBpbm91dCwgdGhlcmVmb3JlIHRoZXkgb2J2aW91c2x5IGNhbid0IChhbmQgZG9uJ3QgbmVlZCB0bykKLWJlIGRpc3Rpbmd1aXNoZWQuIEFkZGl0aW9uYWxseSwgdGhlIEFEVDc0NjEgaXMgc3VwcG9ydGVkIGlmIGZvdW5kIGluCi1BRE0xMDMyIGNvbXBhdGliaWxpdHkgbW9kZS4KK2JlIGRpc3Rpbmd1aXNoZWQuCiAKIFRoZSBzcGVjaWZpY2l0eSBvZiB0aGlzIGZhbWlseSBvZiBjaGlwc2V0cyBvdmVyIHRoZSBBRE0xMDIxL0xNODQKIGZhbWlseSBpcyB0aGF0IGl0IGZlYXR1cmVzIGNyaXRpY2FsIGxpbWl0cyB3aXRoIGh5c3RlcmVzaXMsIGFuZCBhbgogaW5jcmVhc2VkIHJlc29sdXRpb24gb2YgdGhlIHJlbW90ZSB0ZW1wZXJhdHVyZSBtZWFzdXJlbWVudC4KIAogVGhlIGRpZmZlcmVudCBjaGlwc2V0cyBvZiB0aGUgZmFtaWx5IGFyZSBub3Qgc3RyaWN0bHkgaWRlbnRpY2FsLCBhbHRob3VnaAotdmVyeSBzaW1pbGFyLiBUaGlzIGRyaXZlciBkb2Vzbid0IGhhbmRsZSBhbnkgc3BlY2lmaWMgZmVhdHVyZSBmb3Igbm93LAotd2l0aCB0aGUgZXhjZXB0aW9uIG9mIFNNQnVzIFBFQy4gRm9yIHJlZmVyZW5jZSwgaGVyZSBjb21lcyBhIG5vbi1leGhhdXN0aXZlCi1saXN0IG9mIHNwZWNpZmljIGZlYXR1cmVzOgordmVyeSBzaW1pbGFyLiBGb3IgcmVmZXJlbmNlLCBoZXJlIGNvbWVzIGEgbm9uLWV4aGF1c3RpdmUgbGlzdCBvZiBzcGVjaWZpYworZmVhdHVyZXM6CiAKIExNOTA6CiAgICogRmlsdGVyIGFuZCBhbGVydCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGF0IDB4QkYuCkBAIC0xMTQsOSArMTI0LDExIEBACiAgICogTG93ZXIgcmVzb2x1dGlvbiBmb3IgcmVtb3RlIHRlbXBlcmF0dXJlCiAKIE1BWDY2NTcgYW5kIE1BWDY2NTg6CisgICogQmV0dGVyIGxvY2FsIHJlc29sdXRpb24KICAgKiBSZW1vdGUgc2Vuc29yIHR5cGUgc2VsZWN0aW9uCiAKIE1BWDY2NTk6CisgICogQmV0dGVyIGxvY2FsIHJlc29sdXRpb24KICAgKiBTZWxlY3RhYmxlIGFkZHJlc3MKICAgKiBTZWNvbmQgY3JpdGljYWwgdGVtcGVyYXR1cmUgbGltaXQKICAgKiBSZW1vdGUgc2Vuc29yIHR5cGUgc2VsZWN0aW9uCkBAIC0xMjcsNyArMTM5LDggQEAKIAogQWxsIHRlbXBlcmF0dXJlIHZhbHVlcyBhcmUgZ2l2ZW4gaW4gZGVncmVlcyBDZWxzaXVzLiBSZXNvbHV0aW9uCiBpcyAxLjAgZGVncmVlIGZvciB0aGUgbG9jYWwgdGVtcGVyYXR1cmUsIDAuMTI1IGRlZ3JlZSBmb3IgdGhlIHJlbW90ZQotdGVtcGVyYXR1cmUuCit0ZW1wZXJhdHVyZSwgZXhjZXB0IGZvciB0aGUgTUFYNjY1NywgTUFYNjY1OCBhbmQgTUFYNjY1OSB3aGljaCBoYXZlIGEKK3Jlc29sdXRpb24gb2YgMC4xMjUgZGVncmVlIGZvciBib3RoIHRlbXBlcmF0dXJlcy4KIAogRWFjaCBzZW5zb3IgaGFzIGl0cyBvd24gaGlnaCBhbmQgbG93IGxpbWl0cywgcGx1cyBhIGNyaXRpY2FsIGxpbWl0LgogQWRkaXRpb25hbGx5LCB0aGVyZSBpcyBhIHJlbGF0aXZlIGh5c3RlcmVzaXMgdmFsdWUgY29tbW9uIHRvIGJvdGggY3JpdGljYWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzM2MCBiL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzM2MAppbmRleCA4OWE4ZmNmLi5jYmFjMzJiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODczNjAKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3MzYwCkBAIC01LDEyICs1LDcgQEAKICAgKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDODczNjAsIFBDODczNjMsIFBDODczNjQsIFBDODczNjUgYW5kIFBDODczNjYKICAgICBQcmVmaXhlczogJ3BjODczNjAnLCAncGM4NzM2MycsICdwYzg3MzY0JywgJ3BjODczNjUnLCAncGM4NzM2NicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogbm9uZSwgYWRkcmVzcyByZWFkIGZyb20gU3VwZXIgSS9PIGNvbmZpZyBzcGFjZQotICAgIERhdGFzaGVldHM6Ci0gICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL1BDL1BDODczNjAuaHRtbAotICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9QQy9QQzg3MzYzLmh0bWwKLSAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvUEMvUEM4NzM2NC5odG1sCi0gICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL1BDL1BDODczNjUuaHRtbAotICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9QQy9QQzg3MzY2Lmh0bWwKKyAgICBEYXRhc2hlZXRzOiBObyBsb25nZXIgYXZhaWxhYmxlCiAKIEF1dGhvcnM6IEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODc0MjcgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODc0MjcKaW5kZXggOWEwNzA4Zi4uZDFlYmJlNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3NDI3CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzQyNwpAQCAtNSw3ICs1LDcgQEAKICAgKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDODc0MjcKICAgICBQcmVmaXg6ICdwYzg3NDI3JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lLCBhZGRyZXNzIHJlYWQgZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vd3d3LndpbmJvbmQuY29tLnR3L0UtV0lOQk9OREhUTS9wYXJ0bmVyL2FwY18wMDcuaHRtbAorICAgIERhdGFzaGVldDogTm8gbG9uZ2VyIGF2YWlsYWJsZQogCiBBdXRob3I6IEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc4MWQgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc4MWQKaW5kZXggNmY4MDBhMC4uYzkxZTBiNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3ODFkCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzgxZApAQCAtMzUzLDcgKzM1Myw3IEBACiAKICMgUFdNCiAKLUFkZGl0aW9uYWwgaW5mbyBhYm91dCBQV00gb24gdGhlIEFTOTkxMjdGIChtYXkgYXBwbHkgdG8gb3RoZXIgQXN1cworKiBBZGRpdGlvbmFsIGluZm8gYWJvdXQgUFdNIG9uIHRoZSBBUzk5MTI3RiAobWF5IGFwcGx5IHRvIG90aGVyIEFzdXMKIGNoaXBzIGFzIHdlbGwpIGJ5IEplYW4gRGVsdmFyZSBhcyBvZiAyMDA0LTA0LTA5OgogCiBBUzk5MTI3RiByZXZpc2lvbiAyIHNlZW1zIHRvIGhhdmUgdHdvIFBXTSByZWdpc3RlcnMgYXQgMHg1OSBhbmQgMHg1QSwKQEAgLTM5Niw3ICszOTYsNyBAQAogbG9uZyBhcyB3ZSBkb24ndCBrbm93IG1vcmUsIHRoZSB3ODM3ODFkIGRyaXZlciBkb2Vzbid0IGhhbmRsZSBQV00gb24KIEFTOTkxMjdGIGNoaXBzIGF0IGFsbC4KIAotQWRkaXRpb25hbCBpbmZvIGFib3V0IFBXTSBvbiB0aGUgQVM5OTEyN0YgcmV2LjEgYnkgSGVjdG9yIE1hcnRpbjoKKyogQWRkaXRpb25hbCBpbmZvIGFib3V0IFBXTSBvbiB0aGUgQVM5OTEyN0YgcmV2LjEgYnkgSGVjdG9yIE1hcnRpbjoKIAogSSd2ZSBiZWVuIGZpZGRsaW5nIGFyb3VuZCB3aXRoIHRoZSAoaW4pZmFtb3VzIDB4NTkgcmVnaXN0ZXIgYW5kCiBmb3VuZCBvdXQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZG8gd29yayBhcyBhIGZvcm0gb2YgY29hcnNlIHB3bToKQEAgLTQxOCwzICs0MTgsMzYgQEAKIE15IG1vYm8gaXMgYW4gQVNVUyBBN1YyNjYtRS4gVGhpcyBiZWhhdmlvciBpcyBzaW1pbGFyIHRvIHdoYXQgSSBnb3QKIHdpdGggc3BlZWRmYW4gdW5kZXIgV2luZG93cywgd2hlcmUgMC0xNSUgd291bGQgYmUgb2ZmLCAxNS0yeCUgKGNhbid0CiByZW1lbWJlciB0aGUgZXhhY3QgdmFsdWUpIHdvdWxkIGJlIDcwJSBhbmQgaGlnaGVyIHdvdWxkIGJlIGZ1bGwgb24uCisKKyogQWRkaXRpb25hbCBpbmZvIGFib3V0IFBXTSBvbiB0aGUgQVM5OTEyN0YgcmV2LjEgZnJvbSBsbS1zZW5zb3JzCisgIHRpY2tldCAjMjM1MDoKKworSSBjb25kdWN0ZWQgc29tZSBleHBlcmltZW50IG9uIEFzdXMgUDNCLUYgbW90aGVyYm9hcmQgd2l0aCBBUzk5MTI3RgorKFZlci4gMSkuCisKK0kgY29uZmlybSB0aGF0IDB4NTkgcmVnaXN0ZXIgY29udHJvbCB0aGUgQ1BVX0ZhbiBIZWFkZXIgb24gdGhpcworbW90aGVyYm9hcmQsIGFuZCAweDVhIHJlZ2lzdGVyIGNvbnRyb2wgUFdSX0Zhbi4KKworSW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBkZXBlbmRlbmN5IG9mIHNwZWNpZmljIGZhbiwgdGhlIG1lYXN1cmVtZW50IGlzCitjb25kdWN0ZWQgd2l0aCBhIGRpZ2l0YWwgc2NvcGUgd2l0aG91dCBmYW4gY29ubmVjdGVkLiBJIGZvdW5kIG91dCB0aGF0CitQM0ItRiBhY3R1YWxseSBvdXRwdXQgdmFyaWFibGUgREMgdm9sdGFnZSBvbiBmYW4gaGVhZGVyIGNlbnRlciBwaW4sCitsb29rcyBsaWtlIFBXTSBpcyBmaWx0ZXJlZCBvbiB0aGlzIG1vdGhlcmJvYXJkLgorCitIZXJlIGFyZSBzb21lIG9mIG1lYXN1cmVtZW50czoKKworMHg4MCAgICAgMjAgbVYKKzB4ODEgICAgIDIwIG1WCisweDgyICAgIDIzMiBtVgorMHg4MyAgIDEuMiAgVgorMHg4NCAgIDIuMzEgVgorMHg4NSAgIDMuNDQgVgorMHg4NiAgIDQuNjIgVgorMHg4NyAgIDUuODEgVgorMHg4OCAgIDcuMDEgVgorOXg4OSAgIDguMjIgVgorMHg4YSAgIDkuNDIgVgorMHg4YiAgMTAuNiAgVgorMHg4YyAgMTEuOSAgVgorMHg4ZCAgMTIuNCAgVgorMHg4ZSAgMTIuNCAgVgorMHg4ZiAgMTIuNCAgVgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTFkIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTFkCmluZGV4IGE2N2QzYjcuLjU2NjNlNDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkxZAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MWQKQEAgLTU4LDI5ICs1OCwzNSBAQAogY3VycmVudGx5IHNlbGVjdGVkKS4gSWYgeW91IGtub3cgdGhlIGFkZHJlc3Mgb2YgdGhlIGNoaXAsIHVzZSBhICdmb3JjZScKIHBhcmFtZXRlcjsgdGhpcyB3aWxsIHB1dCBpdCBpbnRvIGEgbW9yZSB3ZWxsLWJlaGF2ZWQgc3RhdGUgZmlyc3QuCiAKLVRoZSBkcml2ZXIgaW1wbGVtZW50cyB0aHJlZSB0ZW1wZXJhdHVyZSBzZW5zb3JzLCBmaXZlIGZhbiByb3RhdGlvbiBzcGVlZAotc2Vuc29ycywgYW5kIHRlbiB2b2x0YWdlIHNlbnNvcnMuCitUaGUgZHJpdmVyIGltcGxlbWVudHMgdGhyZWUgdGVtcGVyYXR1cmUgc2Vuc29ycywgdGVuIHZvbHRhZ2Ugc2Vuc29ycywKK2ZpdmUgZmFuIHJvdGF0aW9uIHNwZWVkIHNlbnNvcnMgYW5kIG1hbnVhbCBQV00gY29udHJvbCBvZiBlYWNoIGZhbi4KIAogVGVtcGVyYXR1cmVzIGFyZSBtZWFzdXJlZCBpbiBkZWdyZWVzIENlbHNpdXMgYW5kIG1lYXN1cmVtZW50IHJlc29sdXRpb24gaXMgMQogZGVnQyBmb3IgdGVtcDEgYW5kIDAuNSBkZWdDIGZvciB0ZW1wMiBhbmQgdGVtcDMuIEFuIGFsYXJtIGlzIHRyaWdnZXJlZCB3aGVuCiB0aGUgdGVtcGVyYXR1cmUgZ2V0cyBoaWdoZXIgdGhhbiB0aGUgT3ZlcnRlbXBlcmF0dXJlIFNodXRkb3duIHZhbHVlOyBpdCBzdGF5cwogb24gdW50aWwgdGhlIHRlbXBlcmF0dXJlIGZhbGxzIGJlbG93IHRoZSBIeXN0ZXJlc2lzIHZhbHVlLgogCitWb2x0YWdlIHNlbnNvcnMgKGFsc28ga25vd24gYXMgSU4gc2Vuc29ycykgcmVwb3J0IHRoZWlyIHZhbHVlcyBpbiBtaWxsaXZvbHRzLgorQW4gYWxhcm0gaXMgdHJpZ2dlcmVkIGlmIHRoZSB2b2x0YWdlIGhhcyBjcm9zc2VkIGEgcHJvZ3JhbW1hYmxlIG1pbmltdW0KK29yIG1heGltdW0gbGltaXQuCisKIEZhbiByb3RhdGlvbiBzcGVlZHMgYXJlIHJlcG9ydGVkIGluIFJQTSAocm90YXRpb25zIHBlciBtaW51dGUpLiBBbiBhbGFybSBpcwogdHJpZ2dlcmVkIGlmIHRoZSByb3RhdGlvbiBzcGVlZCBoYXMgZHJvcHBlZCBiZWxvdyBhIHByb2dyYW1tYWJsZSBsaW1pdC4gRmFuCiByZWFkaW5ncyBjYW4gYmUgZGl2aWRlZCBieSBhIHByb2dyYW1tYWJsZSBkaXZpZGVyICgxLCAyLCA0LCA4LCAxNiwKIDMyLCA2NCBvciAxMjggZm9yIGFsbCBmYW5zKSB0byBnaXZlIHRoZSByZWFkaW5ncyBtb3JlIHJhbmdlIG9yIGFjY3VyYWN5LgogCi1Wb2x0YWdlIHNlbnNvcnMgKGFsc28ga25vd24gYXMgSU4gc2Vuc29ycykgcmVwb3J0IHRoZWlyIHZhbHVlcyBpbiBtaWxsaXZvbHRzLgotQW4gYWxhcm0gaXMgdHJpZ2dlcmVkIGlmIHRoZSB2b2x0YWdlIGhhcyBjcm9zc2VkIGEgcHJvZ3JhbW1hYmxlIG1pbmltdW0KLW9yIG1heGltdW0gbGltaXQuCitFYWNoIGZhbiBjb250cm9sbGVkIGlzIGNvbnRyb2xsZWQgYnkgUFdNLiBUaGUgUFdNIGR1dHkgY3ljbGUgY2FuIGJlIHJlYWQgYW5kCitzZXQgZm9yIGVhY2ggZmFuIHNlcGFyYXRlbHkuIFZhbGlkIHZhbHVlcyByYW5nZSBmcm9tIDAgKHN0b3ApIHRvIDI1NSAoZnVsbCkuCitQV00gMS0zIHN1cHBvcnQgVGhlcm1hbCBDcnVpc2UgbW9kZSwgaW4gd2hpY2ggdGhlIFBXTXMgYXJlIGF1dG9tYXRpY2FsbHkKK3JlZ3VsYXRlZCB0byBrZWVwIHJlc3BlY3RpdmVseSB0ZW1wIDEtMyBhdCBhIGNlcnRhaW4gdGFyZ2V0IHRlbXBlcmF0dXJlLgorU2VlIGJlbG93IGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHN5c2ZzLWludGVyZmFjZS4KIAogVGhlIHc4Mzc5MWQgaGFzIGEgZ2xvYmFsIGJpdCB1c2VkIHRvIGVuYWJsZSBiZWVwaW5nIGZyb20gdGhlIHNwZWFrZXIgd2hlbiBhbgogYWxhcm0gaXMgdHJpZ2dlcmVkIGFzIHdlbGwgYXMgYSBiaXRtYXNrIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBiZWVwIGZvcgogc3BlY2lmaWMgYWxhcm1zLiBZb3UgbmVlZCBib3RoIHRoZSBnbG9iYWwgYmVlcCBlbmFibGUgYml0IGFuZCB0aGUKIGNvcnJlc3BvbmRpbmcgYmVlcCBiaXQgdG8gYmUgb24gZm9yIGEgdHJpZ2dlcmVkIGFsYXJtIHRvIHNvdW5kIGEgYmVlcC4KIAotVGhlIHN5c2ZzIGludGVyZmFjZSB0byB0aGUgZ2xvYWJhbCBlbmFibGUgaXMgdmlhIHRoZSBzeXNmcyBiZWVwX2VuYWJsZSBmaWxlLgorVGhlIHN5c2ZzIGludGVyZmFjZSB0byB0aGUgZ2xvYmFsIGVuYWJsZSBpcyB2aWEgdGhlIHN5c2ZzIGJlZXBfZW5hYmxlIGZpbGUuCiBUaGlzIGZpbGUgaXMgdXNlZCBmb3IgYm90aCBsZWdhY3kgYW5kIG5ldyBjb2RlLgogCiBUaGUgc3lzZnMgaW50ZXJmYWNlIHRvIHRoZSBiZWVwIGJpdG1hc2sgaGFzIG1pZ3JhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGxlZ2FjeQpAQCAtMTA1LDYgKzExMSwyNyBAQAogVGhlIGRyaXZlciByZWFkcyB0aGUgaGFyZHdhcmUgY2hpcCB2YWx1ZXMgYXQgbW9zdCBvbmNlIGV2ZXJ5IHRocmVlIHNlY29uZHMuCiBVc2VyIG1vZGUgY29kZSByZXF1ZXN0aW5nIHZhbHVlcyBtb3JlIG9mdGVuIHdpbGwgcmVjZWl2ZSBjYWNoZWQgdmFsdWVzLgogCisvc3lzIGZpbGVzCistLS0tLS0tLS0tCitUaGUgc3lzZnMtaW50ZXJmYWNlIGlzIGRvY3VtZW50ZWQgaW4gdGhlICdzeXNmcy1pbnRlcmZhY2UnIGZpbGUuIE9ubHkKK2NoaXAtc3BlY2lmaWMgb3B0aW9ucyBhcmUgZG9jdW1lbnRlZCBoZXJlLgorCitwd21bMS0zXV9lbmFibGUgLQl0aGlzIGZpbGUgY29udHJvbHMgbW9kZSBvZiBmYW4vdGVtcGVyYXR1cmUgY29udHJvbCBmb3IKKwkJCWZhbiAxLTMuIEZhbi9QV00gNC01IG9ubHkgc3VwcG9ydCBtYW51YWwgbW9kZS4KKwkJICAgICAgICAgICAgKiAxIE1hbnVhbCBtb2RlCisJCSAgICAgICAgICAgICogMiBUaGVybWFsIENydWlzZSBtb2RlCisJCSAgICAgICAgICAgICogMyBGYW4gU3BlZWQgQ3J1aXNlIG1vZGUgKG5vIGZ1cnRoZXIgc3VwcG9ydCkKKwordGVtcFsxLTNdX3RhcmdldCAtCWRlZmluZXMgdGhlIHRhcmdldCB0ZW1wZXJhdHVyZSBmb3IgVGhlcm1hbCBDcnVpc2UgbW9kZS4KKwkJCVVuaXQ6IG1pbGxpZGVncmVlIENlbHNpdXMKKwkJCVJXCisKK3RlbXBbMS0zXV90b2xlcmFuY2UgLQl0ZW1wZXJhdHVyZSB0b2xlcmFuY2UgZm9yIFRoZXJtYWwgQ3J1aXNlIG1vZGUuCisJCQlTcGVjaWZpZXMgYW4gaW50ZXJ2YWwgYXJvdW5kIHRoZSB0YXJnZXQgdGVtcGVyYXR1cmUKKwkJCWluIHdoaWNoIHRoZSBmYW4gc3BlZWQgaXMgbm90IGNoYW5nZWQuCisJCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCisJCQlSVworCiBBbGFybXMgYml0bWFwIHZzLiBiZWVwX21hc2sgYml0bWFzawogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBGb3IgbGVnYWN5IGNvZGUgdXNpbmcgdGhlIGFsYXJtcyBhbmQgYmVlcF9tYXNrIGZpbGVzOgpAQCAtMTMyLDcgKzE1OSwzIEBACiB0YXJ0MyAgICAgICAgOiAgYWxhcm1zOiAweDA0MDAwMCBiZWVwX21hc2s6IDB4MTAwMDAwIDw9PSBtaXNtYXRjaAogY2FzZV9vcGVuICAgIDogIGFsYXJtczogMHgwMDEwMDAgYmVlcF9tYXNrOiAweDAwMTAwMAogZ2xvYmFsX2VuYWJsZTogIGFsYXJtczogLS0tLS0tLS0gYmVlcF9tYXNrOiAweDgwMDAwMCAobW9kaWZpZWQgdmlhIGJlZXBfZW5hYmxlKQotCi1XODM3OTFEIFRPRE86Ci0tLS0tLS0tLS0tLS0tLS0KLVByb3ZpZGUgYSBwYXRjaCBmb3Igc21hcnQtZmFuIGNvbnRyb2wgKHN0aWxsIG5lZWQgYXBwcm9wcmlhdGUgbW90aGVyYm9hcmQvZmFucykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhcHJvIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWFwcm8KaW5kZXggMTQwNWZiNi4uMjJlZmVkZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWFwcm8KKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWFwcm8KQEAgLTE2LDYgKzE2LDkgQEAKICAgKiBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIENYNzAwCiAgICAgRGF0YXNoZWV0OiBhdmFpbGFibGUgb24gcmVxdWVzdCBhbmQgdW5kZXIgTkRBIGZyb20gVklBCiAKKyAgKiBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIFZYODAwL1ZYODIwCisgICAgRGF0YXNoZWV0OiBhdmFpbGFibGUgb24gaHR0cDovL2xpbnV4LnZpYS5jb20udHcKKwogQXV0aG9yczoKIAlLecO2c3RpIE3DpGxra2kgPGttYWxra2lAY2MuaHV0LmZpPiwKIAlNYXJrIEQuIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+LApAQCAtNDksNiArNTIsNyBAQAogIGRldmljZSAxMTA2OjMzNzIgICAoVlQ4MjM3UykKICBkZXZpY2UgMTEwNjozMjg3ICAgKFZUODI1MSkKICBkZXZpY2UgMTEwNjo4MzI0ICAgKENYNzAwKQorIGRldmljZSAxMTA2OjgzNTMgICAoVlg4MDAvVlg4MjApCiAKIElmIG5vbmUgb2YgdGhlc2Ugc2hvdyB1cCwgeW91IHNob3VsZCBsb29rIGluIHRoZSBCSU9TIGZvciBzZXR0aW5ncyBsaWtlCiBlbmFibGUgQUNQSSAvIFNNQnVzIG9yIGV2ZW4gVVNCLgpAQCAtNTcsNSArNjEsNSBAQAogVlQ4MjMxKSwgdGhpcyBkcml2ZXIgc3VwcG9ydHMgSTJDIGJsb2NrIHRyYW5zYWN0aW9ucy4gU3VjaCB0cmFuc2FjdGlvbnMKIGFyZSBtYWlubHkgdXNlZnVsIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gRUVQUk9Ncy4KIAotVGhlIENYNzAwIGFkZGl0aW9uYWxseSBhcHBlYXJzIHRvIHN1cHBvcnQgU01CdXMgUEVDLCBhbHRob3VnaCB0aGlzIGRyaXZlcgotZG9lc24ndCBpbXBsZW1lbnQgaXQgeWV0LgorVGhlIENYNzAwL1ZYODAwL1ZYODIwIGFkZGl0aW9uYWxseSBhcHBlYXJzIHRvIHN1cHBvcnQgU01CdXMgUEVDLCBhbHRob3VnaAordGhpcyBkcml2ZXIgZG9lc24ndCBpbXBsZW1lbnQgaXQgeWV0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvZGV2LWludGVyZmFjZSBiL0RvY3VtZW50YXRpb24vaTJjL2Rldi1pbnRlcmZhY2UKaW5kZXggOWRkNzkxMi4uM2U3NDJiYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvZGV2LWludGVyZmFjZQorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9kZXYtaW50ZXJmYWNlCkBAIC00LDYgKzQsMTAgQEAKIAogRWFjaCByZWdpc3RlcmVkIGkyYyBhZGFwdGVyIGdldHMgYSBudW1iZXIsIGNvdW50aW5nIGZyb20gMC4gWW91IGNhbgogZXhhbWluZSAvc3lzL2NsYXNzL2kyYy1kZXYvIHRvIHNlZSB3aGF0IG51bWJlciBjb3JyZXNwb25kcyB0byB3aGljaCBhZGFwdGVyLgorQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBydW4gImkyY2RldGVjdCAtbCIgdG8gb2J0YWluIGEgZm9ybWF0ZWQgbGlzdCBvZiBhbGwKK2kyYyBhZGFwdGVycyBwcmVzZW50IG9uIHlvdXIgc3lzdGVtIGF0IGEgZ2l2ZW4gdGltZS4gaTJjZGV0ZWN0IGlzIHBhcnQgb2YKK3RoZSBpMmMtdG9vbHMgcGFja2FnZS4KKwogSTJDIGRldmljZSBmaWxlcyBhcmUgY2hhcmFjdGVyIGRldmljZSBmaWxlcyB3aXRoIG1ham9yIGRldmljZSBudW1iZXIgODkKIGFuZCBhIG1pbm9yIGRldmljZSBudW1iZXIgY29ycmVzcG9uZGluZyB0byB0aGUgbnVtYmVyIGFzc2lnbmVkIGFzIAogZXhwbGFpbmVkIGFib3ZlLiBUaGV5IHNob3VsZCBiZSBjYWxsZWQgImkyYy0lZCIgKGkyYy0wLCBpMmMtMSwgLi4uLCAKQEAgLTE3LDMwICsyMSwzNCBAQAogZmlyc3QgdGhpbmcgdG8gZG8gaXMgIiNpbmNsdWRlIDxsaW51eC9pMmMtZGV2Lmg+Ii4gUGxlYXNlIG5vdGUgdGhhdAogdGhlcmUgYXJlIHR3byBmaWxlcyBuYW1lZCAiaTJjLWRldi5oIiBvdXQgdGhlcmUsIG9uZSBpcyBkaXN0cmlidXRlZAogd2l0aCB0aGUgTGludXgga2VybmVsIGFuZCBpcyBtZWFudCB0byBiZSBpbmNsdWRlZCBmcm9tIGtlcm5lbAotZHJpdmVyIGNvZGUsIHRoZSBvdGhlciBvbmUgaXMgZGlzdHJpYnV0ZWQgd2l0aCBsbV9zZW5zb3JzIGFuZCBpcworZHJpdmVyIGNvZGUsIHRoZSBvdGhlciBvbmUgaXMgZGlzdHJpYnV0ZWQgd2l0aCBpMmMtdG9vbHMgYW5kIGlzCiBtZWFudCB0byBiZSBpbmNsdWRlZCBmcm9tIHVzZXItc3BhY2UgcHJvZ3JhbXMuIFlvdSBvYnZpb3VzbHkgd2FudAogdGhlIHNlY29uZCBvbmUgaGVyZS4KIAogTm93LCB5b3UgaGF2ZSB0byBkZWNpZGUgd2hpY2ggYWRhcHRlciB5b3Ugd2FudCB0byBhY2Nlc3MuIFlvdSBzaG91bGQKLWluc3BlY3QgL3N5cy9jbGFzcy9pMmMtZGV2LyB0byBkZWNpZGUgdGhpcy4gQWRhcHRlciBudW1iZXJzIGFyZSBhc3NpZ25lZAotc29tZXdoYXQgZHluYW1pY2FsbHksIHNvIHlvdSBjYW4gbm90IGV2ZW4gYXNzdW1lIC9kZXYvaTJjLTAgaXMgdGhlCi1maXJzdCBhZGFwdGVyLgoraW5zcGVjdCAvc3lzL2NsYXNzL2kyYy1kZXYvIG9yIHJ1biAiaTJjZGV0ZWN0IC1sIiB0byBkZWNpZGUgdGhpcy4KK0FkYXB0ZXIgbnVtYmVycyBhcmUgYXNzaWduZWQgc29tZXdoYXQgZHluYW1pY2FsbHksIHNvIHlvdSBjYW4gbm90Cithc3N1bWUgbXVjaCBhYm91dCB0aGVtLiBUaGV5IGNhbiBldmVuIGNoYW5nZSBmcm9tIG9uZSBib290IHRvIHRoZSBuZXh0LgogCiBOZXh0IHRoaW5nLCBvcGVuIHRoZSBkZXZpY2UgZmlsZSwgYXMgZm9sbG93czoKKwogICBpbnQgZmlsZTsKICAgaW50IGFkYXB0ZXJfbnIgPSAyOyAvKiBwcm9iYWJseSBkeW5hbWljYWxseSBkZXRlcm1pbmVkICovCiAgIGNoYXIgZmlsZW5hbWVbMjBdOwogICAKLSAgc3ByaW50ZihmaWxlbmFtZSwiL2Rldi9pMmMtJWQiLGFkYXB0ZXJfbnIpOwotICBpZiAoKGZpbGUgPSBvcGVuKGZpbGVuYW1lLE9fUkRXUikpIDwgMCkgeworICBzbnByaW50ZihmaWxlbmFtZSwgMTksICIvZGV2L2kyYy0lZCIsIGFkYXB0ZXJfbnIpOworICBmaWxlID0gb3BlbihmaWxlbmFtZSwgT19SRFdSKTsKKyAgaWYgKGZpbGUgPCAwKSB7CiAgICAgLyogRVJST1IgSEFORExJTkc7IHlvdSBjYW4gY2hlY2sgZXJybm8gdG8gc2VlIHdoYXQgd2VudCB3cm9uZyAqLwogICAgIGV4aXQoMSk7CiAgIH0KIAogV2hlbiB5b3UgaGF2ZSBvcGVuZWQgdGhlIGRldmljZSwgeW91IG11c3Qgc3BlY2lmeSB3aXRoIHdoYXQgZGV2aWNlCiBhZGRyZXNzIHlvdSB3YW50IHRvIGNvbW11bmljYXRlOgorCiAgIGludCBhZGRyID0gMHg0MDsgLyogVGhlIEkyQyBhZGRyZXNzICovCi0gIGlmIChpb2N0bChmaWxlLEkyQ19TTEFWRSxhZGRyKSA8IDApIHsKKworICBpZiAoaW9jdGwoZmlsZSwgSTJDX1NMQVZFLCBhZGRyKSA8IDApIHsKICAgICAvKiBFUlJPUiBIQU5ETElORzsgeW91IGNhbiBjaGVjayBlcnJubyB0byBzZWUgd2hhdCB3ZW50IHdyb25nICovCiAgICAgZXhpdCgxKTsKICAgfQpAQCAtNDgsMzEgKzU2LDQxIEBACiBXZWxsLCB5b3UgYXJlIGFsbCBzZXQgdXAgbm93LiBZb3UgY2FuIG5vdyB1c2UgU01CdXMgY29tbWFuZHMgb3IgcGxhaW4KIEkyQyB0byBjb21tdW5pY2F0ZSB3aXRoIHlvdXIgZGV2aWNlLiBTTUJ1cyBjb21tYW5kcyBhcmUgcHJlZmVycmVkIGlmCiB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZW0uIEJvdGggYXJlIGlsbHVzdHJhdGVkIGJlbG93LgorCiAgIF9fdTggcmVnaXN0ZXIgPSAweDEwOyAvKiBEZXZpY2UgcmVnaXN0ZXIgdG8gYWNjZXNzICovCiAgIF9fczMyIHJlczsKICAgY2hhciBidWZbMTBdOworCiAgIC8qIFVzaW5nIFNNQnVzIGNvbW1hbmRzICovCi0gIHJlcyA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShmaWxlLHJlZ2lzdGVyKTsKKyAgcmVzID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGZpbGUsIHJlZ2lzdGVyKTsKICAgaWYgKHJlcyA8IDApIHsKICAgICAvKiBFUlJPUiBIQU5ETElORzogaTJjIHRyYW5zYWN0aW9uIGZhaWxlZCAqLwogICB9IGVsc2UgewogICAgIC8qIHJlcyBjb250YWlucyB0aGUgcmVhZCB3b3JkICovCiAgIH0KKwogICAvKiBVc2luZyBJMkMgV3JpdGUsIGVxdWl2YWxlbnQgb2YgCi0gICAgICAgICAgIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoZmlsZSxyZWdpc3RlciwweDY1NDMpICovCisgICAgIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoZmlsZSwgcmVnaXN0ZXIsIDB4NjU0MykgKi8KICAgYnVmWzBdID0gcmVnaXN0ZXI7CiAgIGJ1ZlsxXSA9IDB4NDM7CiAgIGJ1ZlsyXSA9IDB4NjU7Ci0gIGlmICggd3JpdGUoZmlsZSxidWYsMykgIT0gMykgeworICBpZiAod3JpdGUoZmlsZSwgYnVmLCAzKSAhID0zKSB7CiAgICAgLyogRVJST1IgSEFORExJTkc6IGkyYyB0cmFuc2FjdGlvbiBmYWlsZWQgKi8KICAgfQorCiAgIC8qIFVzaW5nIEkyQyBSZWFkLCBlcXVpdmFsZW50IG9mIGkyY19zbWJ1c19yZWFkX2J5dGUoZmlsZSkgKi8KLSAgaWYgKHJlYWQoZmlsZSxidWYsMSkgIT0gMSkgeworICBpZiAocmVhZChmaWxlLCBidWYsIDEpICE9IDEpIHsKICAgICAvKiBFUlJPUiBIQU5ETElORzogaTJjIHRyYW5zYWN0aW9uIGZhaWxlZCAqLwogICB9IGVsc2UgewogICAgIC8qIGJ1ZlswXSBjb250YWlucyB0aGUgcmVhZCBieXRlICovCiAgIH0KIAorTm90ZSB0aGF0IG9ubHkgYSBzdWJzZXQgb2YgdGhlIEkyQyBhbmQgU01CdXMgcHJvdG9jb2xzIGNhbiBiZSBhY2hpZXZlZCBieQordGhlIG1lYW5zIG9mIHJlYWQoKSBhbmQgd3JpdGUoKSBjYWxscy4gSW4gcGFydGljdWxhciwgc28tY2FsbGVkIGNvbWJpbmVkCit0cmFuc2FjdGlvbnMgKG1peGluZyByZWFkIGFuZCB3cml0ZSBtZXNzYWdlcyBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbikKK2FyZW4ndCBzdXBwb3J0ZWQuIEZvciB0aGlzIHJlYXNvbiwgdGhpcyBpbnRlcmZhY2UgaXMgYWxtb3N0IG5ldmVyIHVzZWQgYnkKK3VzZXItc3BhY2UgcHJvZ3JhbXMuCisKIElNUE9SVEFOVDogYmVjYXVzZSBvZiB0aGUgdXNlIG9mIGlubGluZSBmdW5jdGlvbnMsIHlvdSAqaGF2ZSogdG8gdXNlCiAnLU8nIG9yIHNvbWUgdmFyaWF0aW9uIHdoZW4geW91IGNvbXBpbGUgeW91ciBwcm9ncmFtIQogCkBAIC04MCwzMSArOTgsMjkgQEAKIEZ1bGwgaW50ZXJmYWNlIGRlc2NyaXB0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgZm9sbG93aW5nIElPQ1RMcyBhcmUgZGVmaW5lZCBhbmQgZnVsbHkgc3VwcG9ydGVkIAotKHNlZSBhbHNvIGkyYy1kZXYuaCk6CitUaGUgZm9sbG93aW5nIElPQ1RMcyBhcmUgZGVmaW5lZDoKIAotaW9jdGwoZmlsZSxJMkNfU0xBVkUsbG9uZyBhZGRyKQoraW9jdGwoZmlsZSwgSTJDX1NMQVZFLCBsb25nIGFkZHIpCiAgIENoYW5nZSBzbGF2ZSBhZGRyZXNzLiBUaGUgYWRkcmVzcyBpcyBwYXNzZWQgaW4gdGhlIDcgbG93ZXIgYml0cyBvZiB0aGUKICAgYXJndW1lbnQgKGV4Y2VwdCBmb3IgMTAgYml0IGFkZHJlc3NlcywgcGFzc2VkIGluIHRoZSAxMCBsb3dlciBiaXRzIGluIHRoaXMKICAgY2FzZSkuCiAKLWlvY3RsKGZpbGUsSTJDX1RFTkJJVCxsb25nIHNlbGVjdCkKK2lvY3RsKGZpbGUsIEkyQ19URU5CSVQsIGxvbmcgc2VsZWN0KQogICBTZWxlY3RzIHRlbiBiaXQgYWRkcmVzc2VzIGlmIHNlbGVjdCBub3QgZXF1YWxzIDAsIHNlbGVjdHMgbm9ybWFsIDcgYml0CiAgIGFkZHJlc3NlcyBpZiBzZWxlY3QgZXF1YWxzIDAuIERlZmF1bHQgMC4gIFRoaXMgcmVxdWVzdCBpcyBvbmx5IHZhbGlkCiAgIGlmIHRoZSBhZGFwdGVyIGhhcyBJMkNfRlVOQ18xMEJJVF9BRERSLgogCi1pb2N0bChmaWxlLEkyQ19QRUMsbG9uZyBzZWxlY3QpCitpb2N0bChmaWxlLCBJMkNfUEVDLCBsb25nIHNlbGVjdCkKICAgU2VsZWN0cyBTTUJ1cyBQRUMgKHBhY2tldCBlcnJvciBjaGVja2luZykgZ2VuZXJhdGlvbiBhbmQgdmVyaWZpY2F0aW9uCiAgIGlmIHNlbGVjdCBub3QgZXF1YWxzIDAsIGRpc2FibGVzIGlmIHNlbGVjdCBlcXVhbHMgMC4gRGVmYXVsdCAwLgogICBVc2VkIG9ubHkgZm9yIFNNQnVzIHRyYW5zYWN0aW9ucy4gIFRoaXMgcmVxdWVzdCBvbmx5IGhhcyBhbiBlZmZlY3QgaWYgdGhlCiAgIHRoZSBhZGFwdGVyIGhhcyBJMkNfRlVOQ19TTUJVU19QRUM7IGl0IGlzIHN0aWxsIHNhZmUgaWYgbm90LCBpdCBqdXN0CiAgIGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0LgogCi1pb2N0bChmaWxlLEkyQ19GVU5DUyx1bnNpZ25lZCBsb25nICpmdW5jcykKK2lvY3RsKGZpbGUsIEkyQ19GVU5DUywgdW5zaWduZWQgbG9uZyAqZnVuY3MpCiAgIEdldHMgdGhlIGFkYXB0ZXIgZnVuY3Rpb25hbGl0eSBhbmQgcHV0cyBpdCBpbiAqZnVuY3MuCiAKLWlvY3RsKGZpbGUsSTJDX1JEV1Isc3RydWN0IGkyY19yZHdyX2lvY3RsX2RhdGEgKm1zZ3NldCkKLQoraW9jdGwoZmlsZSwgSTJDX1JEV1IsIHN0cnVjdCBpMmNfcmR3cl9pb2N0bF9kYXRhICptc2dzZXQpCiAgIERvIGNvbWJpbmVkIHJlYWQvd3JpdGUgdHJhbnNhY3Rpb24gd2l0aG91dCBzdG9wIGluIGJldHdlZW4uCiAgIE9ubHkgdmFsaWQgaWYgdGhlIGFkYXB0ZXIgaGFzIEkyQ19GVU5DX0kyQy4gIFRoZSBhcmd1bWVudCBpcwogICBhIHBvaW50ZXIgdG8gYQpAQCAtMTIwLDEwICsxMzYsOSBAQAogICBUaGUgc2xhdmUgYWRkcmVzcyBhbmQgd2hldGhlciB0byB1c2UgdGVuIGJpdCBhZGRyZXNzIG1vZGUgaGFzIHRvIGJlCiAgIHNldCBpbiBlYWNoIG1lc3NhZ2UsIG92ZXJyaWRpbmcgdGhlIHZhbHVlcyBzZXQgd2l0aCB0aGUgYWJvdmUgaW9jdGwncy4KIAotCi1PdGhlciB2YWx1ZXMgYXJlIE5PVCBzdXBwb3J0ZWQgYXQgdGhpcyBtb21lbnQsIGV4Y2VwdCBmb3IgSTJDX1NNQlVTLAotd2hpY2ggeW91IHNob3VsZCBuZXZlciBkaXJlY3RseSBjYWxsOyBpbnN0ZWFkLCB1c2UgdGhlIGFjY2VzcyBmdW5jdGlvbnMKLWJlbG93LgoraW9jdGwoZmlsZSwgSTJDX1NNQlVTLCBzdHJ1Y3QgaTJjX3NtYnVzX2lvY3RsX2RhdGEgKmFyZ3MpCisgIE5vdCBtZWFudCB0byBiZSBjYWxsZWQgIGRpcmVjdGx5OyBpbnN0ZWFkLCB1c2UgdGhlIGFjY2VzcyBmdW5jdGlvbnMKKyAgYmVsb3cuCiAKIFlvdSBjYW4gZG8gcGxhaW4gaTJjIHRyYW5zYWN0aW9ucyBieSB1c2luZyByZWFkKDIpIGFuZCB3cml0ZSgyKSBjYWxscy4KIFlvdSBkbyBub3QgbmVlZCB0byBwYXNzIHRoZSBhZGRyZXNzIGJ5dGU7IGluc3RlYWQsIHNldCBpdCB0aHJvdWdoCkBAIC0xNDgsNyArMTYzLDUyIEBACiByZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIHJlYWQuIFRoZSBibG9jayBidWZmZXJzIG5lZWQgbm90IGJlIGxvbmdlcgogdGhhbiAzMiBieXRlcy4KIAotVGhlIGFib3ZlIGZ1bmN0aW9ucyBhcmUgYWxsIG1hY3JvcywgdGhhdCByZXNvbHZlIHRvIGNhbGxzIHRvIHRoZQotaTJjX3NtYnVzX2FjY2VzcyBmdW5jdGlvbiwgdGhhdCBvbiBpdHMgdHVybiBjYWxscyBhIHNwZWNpZmljIGlvY3RsCitUaGUgYWJvdmUgZnVuY3Rpb25zIGFyZSBhbGwgaW5saW5lIGZ1bmN0aW9ucywgdGhhdCByZXNvbHZlIHRvIGNhbGxzIHRvCit0aGUgaTJjX3NtYnVzX2FjY2VzcyBmdW5jdGlvbiwgdGhhdCBvbiBpdHMgdHVybiBjYWxscyBhIHNwZWNpZmljIGlvY3RsCiB3aXRoIHRoZSBkYXRhIGluIGEgc3BlY2lmaWMgZm9ybWF0LiBSZWFkIHRoZSBzb3VyY2UgY29kZSBpZiB5b3UKIHdhbnQgdG8ga25vdyB3aGF0IGhhcHBlbnMgYmVoaW5kIHRoZSBzY3JlZW5zLgorCisKK0ltcGxlbWVudGF0aW9uIGRldGFpbHMKKz09PT09PT09PT09PT09PT09PT09PT0KKworRm9yIHRoZSBpbnRlcmVzdGVkLCBoZXJlJ3MgdGhlIGNvZGUgZmxvdyB3aGljaCBoYXBwZW5zIGluc2lkZSB0aGUga2VybmVsCit3aGVuIHlvdSB1c2UgdGhlIC9kZXYgaW50ZXJmYWNlIHRvIEkyQzoKKworMSogWW91ciBwcm9ncmFtIG9wZW5zIC9kZXYvaTJjLU4gYW5kIGNhbGxzIGlvY3RsKCkgb24gaXQsIGFzIGRlc2NyaWJlZCBpbgorc2VjdGlvbiAiQyBleGFtcGxlIiBhYm92ZS4KKworMiogVGhlc2Ugb3BlbigpIGFuZCBpb2N0bCgpIGNhbGxzIGFyZSBoYW5kbGVkIGJ5IHRoZSBpMmMtZGV2IGtlcm5lbAorZHJpdmVyOiBzZWUgaTJjLWRldi5jOmkyY2Rldl9vcGVuKCkgYW5kIGkyYy1kZXYuYzppMmNkZXZfaW9jdGwoKSwKK3Jlc3BlY3RpdmVseS4gWW91IGNhbiB0aGluayBvZiBpMmMtZGV2IGFzIGEgZ2VuZXJpYyBJMkMgY2hpcCBkcml2ZXIKK3RoYXQgY2FuIGJlIHByb2dyYW1tZWQgZnJvbSB1c2VyLXNwYWNlLgorCiszKiBTb21lIGlvY3RsKCkgY2FsbHMgYXJlIGZvciBhZG1pbmlzdHJhdGl2ZSB0YXNrcyBhbmQgYXJlIGhhbmRsZWQgYnkKK2kyYy1kZXYgZGlyZWN0bHkuIEV4YW1wbGVzIGluY2x1ZGUgSTJDX1NMQVZFIChzZXQgdGhlIGFkZHJlc3Mgb2YgdGhlCitkZXZpY2UgeW91IHdhbnQgdG8gYWNjZXNzKSBhbmQgSTJDX1BFQyAoZW5hYmxlIG9yIGRpc2FibGUgU01CdXMgZXJyb3IKK2NoZWNraW5nIG9uIGZ1dHVyZSB0cmFuc2FjdGlvbnMuKQorCis0KiBPdGhlciBpb2N0bCgpIGNhbGxzIGFyZSBjb252ZXJ0ZWQgdG8gaW4ta2VybmVsIGZ1bmN0aW9uIGNhbGxzIGJ5CitpMmMtZGV2LiBFeGFtcGxlcyBpbmNsdWRlIEkyQ19GVU5DUywgd2hpY2ggcXVlcmllcyB0aGUgSTJDIGFkYXB0ZXIKK2Z1bmN0aW9uYWxpdHkgdXNpbmcgaTJjLmg6aTJjX2dldF9mdW5jdGlvbmFsaXR5KCksIGFuZCBJMkNfU01CVVMsIHdoaWNoCitwZXJmb3JtcyBhbiBTTUJ1cyB0cmFuc2FjdGlvbiB1c2luZyBpMmMtY29yZS5jOmkyY19zbWJ1c194ZmVyKCkuCisKK1RoZSBpMmMtZGV2IGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgY2hlY2tpbmcgYWxsIHRoZSBwYXJhbWV0ZXJzIHRoYXQKK2NvbWUgZnJvbSB1c2VyLXNwYWNlIGZvciB2YWxpZGl0eS4gQWZ0ZXIgdGhpcyBwb2ludCwgdGhlcmUgaXMgbm8KK2RpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSBjYWxscyB0aGF0IGNhbWUgZnJvbSB1c2VyLXNwYWNlIHRocm91Z2ggaTJjLWRldgorYW5kIGNhbGxzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCBieSBrZXJuZWwgSTJDIGNoaXAgZHJpdmVycworZGlyZWN0bHkuIFRoaXMgbWVhbnMgdGhhdCBJMkMgYnVzIGRyaXZlcnMgZG9uJ3QgbmVlZCB0byBpbXBsZW1lbnQKK2FueXRoaW5nIHNwZWNpYWwgdG8gc3VwcG9ydCBhY2Nlc3MgZnJvbSB1c2VyLXNwYWNlLgorCis1KiBUaGVzZSBpMmMtY29yZS5jL2kyYy5oIGZ1bmN0aW9ucyBhcmUgd3JhcHBlcnMgdG8gdGhlIGFjdHVhbAoraW1wbGVtZW50YXRpb24gb2YgeW91ciBJMkMgYnVzIGRyaXZlci4gRWFjaCBhZGFwdGVyIG11c3QgZGVjbGFyZQorY2FsbGJhY2sgZnVuY3Rpb25zIGltcGxlbWVudGluZyB0aGVzZSBzdGFuZGFyZCBjYWxscy4KK2kyYy5oOmkyY19nZXRfZnVuY3Rpb25hbGl0eSgpIGNhbGxzIGkyY19hZGFwdGVyLmFsZ28tPmZ1bmN0aW9uYWxpdHkoKSwKK3doaWxlIGkyYy1jb3JlLmM6aTJjX3NtYnVzX3hmZXIoKSBjYWxscyBlaXRoZXIKK2FkYXB0ZXIuYWxnby0+c21idXNfeGZlcigpIGlmIGl0IGlzIGltcGxlbWVudGVkLCBvciBpZiBub3QsCitpMmMtY29yZS5jOmkyY19zbWJ1c194ZmVyX2VtdWxhdGVkKCkgd2hpY2ggaW4gdHVybiBjYWxscworaTJjX2FkYXB0ZXIuYWxnby0+bWFzdGVyX3hmZXIoKS4KKworQWZ0ZXIgeW91ciBJMkMgYnVzIGRyaXZlciBoYXMgcHJvY2Vzc2VkIHRoZXNlIHJlcXVlc3RzLCBleGVjdXRpb24gcnVucwordXAgdGhlIGNhbGwgY2hhaW4sIHdpdGggYWxtb3N0IG5vIHByb2Nlc3NpbmcgZG9uZSwgZXhjZXB0IGJ5IGkyYy1kZXYgdG8KK3BhY2thZ2UgdGhlIHJldHVybmVkIGRhdGEsIGlmIGFueSwgaW4gc3VpdGFibGUgZm9ybWF0IGZvciB0aGUgaW9jdGwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9zbWJ1cy1wcm90b2NvbCBiL0RvY3VtZW50YXRpb24vaTJjL3NtYnVzLXByb3RvY29sCmluZGV4IDI0YmZiNjUuLjlkZjQ3NDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL3NtYnVzLXByb3RvY29sCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL3NtYnVzLXByb3RvY29sCkBAIC0xMDksOCArMTA5LDggQEAKIFMgQWRkciBXciBbQV0gQ29tbSBbQV0gRGF0YUxvdyBbQV0gRGF0YUhpZ2ggW0FdIFAKIAogCi1TTUJ1cyBQcm9jZXNzIENhbGwKLT09PT09PT09PT09PT09PT09PQorU01CdXMgUHJvY2VzcyBDYWxsOiAgaTJjX3NtYnVzX3Byb2Nlc3NfY2FsbCgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogVGhpcyBjb21tYW5kIHNlbGVjdHMgYSBkZXZpY2UgcmVnaXN0ZXIgKHRocm91Z2ggdGhlIENvbW0gYnl0ZSksIHNlbmRzCiAxNiBiaXRzIG9mIGRhdGEgdG8gaXQsIGFuZCByZWFkcyAxNiBiaXRzIG9mIGRhdGEgaW4gcmV0dXJuLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzIGIvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzCmluZGV4IDZiNjFiM2EuLmQ3M2VlMTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cworKysgYi9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMKQEAgLTYwNiw2ICs2MDYsOCBAQAogICBleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwgdTggY29tbWFuZCk7CiAgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHUxNiB2YWx1ZSk7CisgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3Byb2Nlc3NfY2FsbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTE2IHZhbHVlKTsKICAgZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF9ibG9ja19kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggKnZhbHVlcyk7CiAgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCkBAIC02MjEsOCArNjIzLDYgQEAKIGJlIGFkZGVkIGJhY2sgbGF0ZXIgaWYgbmVlZGVkOgogCiAgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX3F1aWNrKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LCB1OCB2YWx1ZSk7Ci0gIGV4dGVybiBzMzIgaTJjX3NtYnVzX3Byb2Nlc3NfY2FsbChzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHUxNiB2YWx1ZSk7CiAgIGV4dGVybiBzMzIgaTJjX3NtYnVzX2Jsb2NrX3Byb2Nlc3NfY2FsbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnZhbHVlcykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaWE2NC9rdm0udHh0IGIvRG9jdW1lbnRhdGlvbi9pYTY0L2t2bS50eHQKaW5kZXggOTE0ZDA3Zi4uODRmN2NiMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pYTY0L2t2bS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pYTY0L2t2bS50eHQKQEAgLTEsNyArMSw4IEBACi1DdXJyZW50bHksIGt2bSBtb2R1bGUgaW4gRVhQRVJJTUVOVEFMIHN0YWdlIG9uIElBNjQuIFRoaXMgbWVhbnMgdGhhdAotaW50ZXJmYWNlcyBhcmUgbm90IHN0YWJsZSBlbm91Z2ggdG8gdXNlLiBTbywgcGxhc2UgaGFkIGJldHRlciBkb24ndCBydW4KLWNyaXRpY2FsIGFwcGxpY2F0aW9ucyBpbiB2aXJ0dWFsIG1hY2hpbmUuIFdlIHdpbGwgdHJ5IG91ciBiZXN0IHRvIG1ha2UgaXQKLXN0cm9uZyBpbiBmdXR1cmUgdmVyc2lvbnMhCitDdXJyZW50bHksIGt2bSBtb2R1bGUgaXMgaW4gRVhQRVJJTUVOVEFMIHN0YWdlIG9uIElBNjQuIFRoaXMgbWVhbnMgdGhhdAoraW50ZXJmYWNlcyBhcmUgbm90IHN0YWJsZSBlbm91Z2ggdG8gdXNlLiBTbywgcGxlYXNlIGRvbid0IHJ1biBjcml0aWNhbAorYXBwbGljYXRpb25zIGluIHZpcnR1YWwgbWFjaGluZS4KK1dlIHdpbGwgdHJ5IG91ciBiZXN0IHRvIGltcHJvdmUgaXQgaW4gZnV0dXJlIHZlcnNpb25zIQorCiAJCQkJR3VpZGU6IEhvdyB0byBib290IHVwIGd1ZXN0cyBvbiBrdm0vaWE2NAogCiBUaGlzIGd1aWRlIGlzIHRvIGRlc2NyaWJlIGhvdyB0byBlbmFibGUga3ZtIHN1cHBvcnQgZm9yIElBLTY0IHN5c3RlbXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lvY3RsLW51bWJlci50eHQgYi9Eb2N1bWVudGF0aW9uL2lvY3RsLW51bWJlci50eHQKaW5kZXggMWM2YjU0NS4uYjg4MGNlNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW9jdGwtbnVtYmVyLnR4dApAQCAtOTIsNiArOTIsNyBAQAogJ0onCTAwLTFGCWRyaXZlcnMvc2NzaS9nZHRoX2lvY3RsLmgKICdLJwlhbGwJbGludXgva2QuaAogJ0wnCTAwLTFGCWxpbnV4L2xvb3AuaAorJ0wnCTIwLTJGCWRyaXZlci91c2IvbWlzYy92c3R1c2IuaAogJ0wnCUUwLUZGCWxpbnV4L3BwZGQuaAkJZW5jcnlwdGVkIGRpc2sgZGV2aWNlIGRyaXZlcgogCQkJCQk8aHR0cDovL2xpbnV4MDEuZ3dkZy5kZS9+YWxhdGhhbS9wcGRkLmh0bWw+CiAnTScJYWxsCWxpbnV4L3NvdW5kY2FyZC5oCkBAIC0xMTAsNiArMTExLDggQEAKICdXJwkwMC0xRglsaW51eC93YW5yb3V0ZXIuaAljb25mbGljdCEKICdYJwlhbGwJbGludXgveGZzX2ZzLmgKICdZJwlhbGwJbGludXgvY3ljbGFkZXMuaAorJ1snCTAwLTA3CWxpbnV4L3VzYi91c2J0bWMuaAlVU0IgVGVzdCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlcworCQkJCQk8bWFpbHRvOmdyZWdraEBzdXNlLmRlPgogJ2EnCWFsbAkJCQlBVE0gb24gbGludXgKIAkJCQkJPGh0dHA6Ly9scmN3d3cuZXBmbC5jaC9saW51eC1hdG0vbWFnaWMuaHRtbD4KICdiJwkwMC1GRgkJCQliaXQzIHZtZSBob3N0IGJyaWRnZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCAyNDQzZjViLi4wZjE1NDRmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNjkwLDcgKzY5MCw3IEBACiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9ibG9jay9hcy1pb3NjaGVkLnR4dCBhbmQKIAkJCURvY3VtZW50YXRpb24vYmxvY2svZGVhZGxpbmUtaW9zY2hlZC50eHQgZm9yIGRldGFpbHMuCiAKLQllbGZjb3JlaGRyPQlbWDg2LTMyLCBYODZfNjRdCisJZWxmY29yZWhkcj0JW0lBNjQsUFBDLFNILFg4Ni0zMixYODZfNjRdCiAJCQlTcGVjaWZpZXMgcGh5c2ljYWwgYWRkcmVzcyBvZiBzdGFydCBvZiBrZXJuZWwgY29yZQogCQkJaW1hZ2UgZWxmIGhlYWRlci4gR2VuZXJhbGx5IGtleGVjIGxvYWRlciB3aWxsCiAJCQlwYXNzIHRoaXMgb3B0aW9uIHRvIGNhcHR1cmUga2VybmVsLgpAQCAtNzk2LDYgKzc5Niw5IEBACiAJCQlEZWZhdWx0cyB0byB0aGUgZGVmYXVsdCBhcmNoaXRlY3R1cmUncyBodWdlIHBhZ2Ugc2l6ZQogCQkJaWYgbm90IHNwZWNpZmllZC4KIAorCWhsdAkJW0JVR1M9QVJNLFNIXQorCisJaTgwNDIuZGVidWcJW0hXXSBUb2dnbGUgaTgwNDIgZGVidWcgbW9kZQogCWk4MDQyLmRpcmVjdAlbSFddIFB1dCBrZXlib2FyZCBwb3J0IGludG8gbm9uLXRyYW5zbGF0ZWQgbW9kZQogCWk4MDQyLmR1bWJrYmQJW0hXXSBQcmV0ZW5kIHRoYXQgY29udHJvbGxlciBjYW4gb25seSByZWFkIGRhdGEgZnJvbQogCQkJICAgICBrZXlib2FyZCBhbmQgY2Fubm90IGNvbnRyb2wgaXRzIHN0YXRlCkBAIC0xMjEwLDYgKzEyMTMsMTAgQEAKIAltZW09bm9wZW50aXVtCVtCVUdTPVg4Ni0zMl0gRGlzYWJsZSB1c2FnZSBvZiA0TUIgcGFnZXMgZm9yIGtlcm5lbAogCQkJbWVtb3J5LgogCisJbWVtY2h1bms9bm5bS01HXQorCQkJW0tOTCxTSF0gQWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBzaXplIGZvcgorCQkJcGVyLWRldmljZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgRE1BIGJ1ZmZlcnMuCisKIAltZW1tYXA9ZXhhY3RtYXAJW0tOTCxYODYtMzIsWDg2XzY0XSBFbmFibGUgc2V0dGluZyBvZiBhbiBleGFjdAogCQkJRTgyMCBtZW1vcnkgbWFwLCBhcyBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCiAJCQlTdWNoIG1lbW1hcD1leGFjdG1hcCBsaW5lcyBjYW4gYmUgY29uc3RydWN0ZWQgYmFzZWQgb24KQEAgLTEzOTIsNiArMTM5OSw4IEBACiAKIAlub2Rpc2Nvbm5lY3QJW0hXLFNDU0ksTTY4S10gRGlzYWJsZXMgU0NTSSBkaXNjb25uZWN0cy4KIAorCW5vZHNwCQlbU0hdIERpc2FibGUgaGFyZHdhcmUgRFNQIGF0IGJvb3QgdGltZS4KKwogCW5vZWZpCQlbWDg2LTMyLFg4Ni02NF0gRGlzYWJsZSBFRkkgcnVudGltZSBzZXJ2aWNlcyBzdXBwb3J0LgogCiAJbm9leGVjCQlbSUEtNjRdCkBAIC0xNDA4LDEzICsxNDE3LDE1IEBACiAJCQlub2V4ZWMzMj1vZmY6IGRpc2FibGUgbm9uLWV4ZWN1dGFibGUgbWFwcGluZ3MKIAkJCQlyZWFkIGltcGxpZXMgZXhlY3V0YWJsZSBtYXBwaW5ncwogCisJbm9mcHUJCVtTSF0gRGlzYWJsZSBoYXJkd2FyZSBGUFUgYXQgYm9vdCB0aW1lLgorCiAJbm9meHNyCQlbQlVHUz1YODYtMzJdIERpc2FibGVzIHg4NiBmbG9hdGluZyBwb2ludCBleHRlbmRlZAogCQkJcmVnaXN0ZXIgc2F2ZSBhbmQgcmVzdG9yZS4gVGhlIGtlcm5lbCB3aWxsIG9ubHkgc2F2ZQogCQkJbGVnYWN5IGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBvbiB0YXNrIHN3aXRjaC4KIAogCW5vY2xmbHVzaAlbQlVHUz1YODZdIERvbid0IHVzZSB0aGUgQ0xGTFVTSCBpbnN0cnVjdGlvbgogCi0Jbm9obHQJCVtCVUdTPUFSTV0KKwlub2hsdAkJW0JVR1M9QVJNLFNIXQogCiAJbm8taGx0CQlbQlVHUz1YODYtMzJdIFRlbGxzIHRoZSBrZXJuZWwgdGhhdCB0aGUgaGx0CiAJCQlpbnN0cnVjdGlvbiBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IGFuZCBub3QgdG8KQEAgLTE3MTMsNiArMTcyNCwxMSBAQAogCQkJYXV0b2NvbmZpZ3VyYXRpb24uCiAJCQlSYW5nZXMgYXJlIGluIHBhaXJzIChtZW1vcnkgYmFzZSBhbmQgc2l6ZSkuCiAKKwlkeW5hbWljX3ByaW50aworCQkJRW5hYmxlcyBwcl9kZWJ1ZygpL2Rldl9kYmcoKSBjYWxscyBpZgorCQkJQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGhhcyBiZWVuIGVuYWJsZWQuIFRoZXNlIGNhbiBhbHNvCisJCQliZSBzd2l0Y2hlZCBvbi9vZmYgdmlhIDxkZWJ1Z2ZzPi9keW5hbWljX3ByaW50ay9tb2R1bGVzCisKIAlwcmludC1mYXRhbC1zaWduYWxzPQogCQkJW0tOTF0gZGVidWc6IHByaW50IGZhdGFsIHNpZ25hbHMKIAkJCXByaW50LWZhdGFsLXNpZ25hbHM9MTogcHJpbnQgc2VnZmF1bHQgaW5mbyB0bwpAQCAtMjI0Nyw2ICsyMjYzLDI1IEBACiAJCQlhdXRvc3VzcGVuZGVkLiAgRGV2aWNlcyBmb3Igd2hpY2ggdGhlIGRlbGF5IGlzIHNldAogCQkJdG8gYSBuZWdhdGl2ZSB2YWx1ZSB3b24ndCBiZSBhdXRvc3VzcGVuZGVkIGF0IGFsbC4KIAorCXVzYmNvcmUudXNiZnNfc25vb3A9CisJCQlbVVNCXSBTZXQgdG8gbG9nIGFsbCB1c2JmcyB0cmFmZmljIChkZWZhdWx0IDAgPSBvZmYpLgorCisJdXNiY29yZS5ibGlua2VubGlnaHRzPQorCQkJW1VTQl0gU2V0IHRvIGN5Y2xlIGxlZHMgb24gaHVicyAoZGVmYXVsdCAwID0gb2ZmKS4KKworCXVzYmNvcmUub2xkX3NjaGVtZV9maXJzdD0KKwkJCVtVU0JdIFN0YXJ0IHdpdGggdGhlIG9sZCBkZXZpY2UgaW5pdGlhbGl6YXRpb24KKwkJCXNjaGVtZSAoZGVmYXVsdCAwID0gb2ZmKS4KKworCXVzYmNvcmUudXNlX2JvdGhfc2NoZW1lcz0KKwkJCVtVU0JdIFRyeSB0aGUgb3RoZXIgZGV2aWNlIGluaXRpYWxpemF0aW9uIHNjaGVtZQorCQkJaWYgdGhlIGZpcnN0IG9uZSBmYWlscyAoZGVmYXVsdCAxID0gZW5hYmxlZCkuCisKKwl1c2Jjb3JlLmluaXRpYWxfZGVzY3JpcHRvcl90aW1lb3V0PQorCQkJW1VTQl0gU3BlY2lmaWVzIHRpbWVvdXQgZm9yIHRoZSBpbml0aWFsIDY0LWJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1IgcmVxdWVzdCBpbiBtaWxsaXNlY29uZHMKKwkJCShkZWZhdWx0IDUwMDAgPSA1LjAgc2Vjb25kcykuCisKIAl1c2JoaWQubW91c2Vwb2xsPQogCQkJW1VTQkhJRF0gVGhlIGludGVydmFsIHdoaWNoIG1pY2UgYXJlIHRvIGJlIHBvbGxlZCBhdC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rb2JqZWN0LnR4dCBiL0RvY3VtZW50YXRpb24va29iamVjdC50eHQKaW5kZXggNTFhODAyMS4uZjVkMmFhZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rb2JqZWN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tvYmplY3QudHh0CkBAIC0xMTgsNiArMTE4LDEwIEBACiAKICAgICBpbnQga29iamVjdF9yZW5hbWUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKm5ld19uYW1lKTsKIAorTm90ZSBrb2JqZWN0X3JlbmFtZSBkb2VzIHBlcmZvcm0gYW55IGxvY2tpbmcgb3IgaGF2ZSBhIHNvbGlkIG5vdGlvbiBvZgord2hhdCBuYW1lcyBhcmUgdmFsaWQgc28gdGhlIHByb3ZpZGUgbXVzdCBwcm92aWRlIHRoZWlyIG93biBzYW5pdHkgY2hlY2tpbmcKK2FuZCBzZXJpYWxpemF0aW9uLgorCiBUaGVyZSBpcyBhIGZ1bmN0aW9uIGNhbGxlZCBrb2JqZWN0X3NldF9uYW1lKCkgYnV0IHRoYXQgaXMgbGVnYWN5IGNydWZ0IGFuZAogaXMgYmVpbmcgcmVtb3ZlZC4gIElmIHlvdXIgY29kZSBuZWVkcyB0byBjYWxsIHRoaXMgZnVuY3Rpb24sIGl0IGlzCiBpbmNvcnJlY3QgYW5kIG5lZWRzIHRvIGJlIGZpeGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2Rpc2stc2hvY2stcHJvdGVjdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvZGlzay1zaG9jay1wcm90ZWN0aW9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTZiYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2Rpc2stc2hvY2stcHJvdGVjdGlvbi50eHQKQEAgLTAsMCArMSwxNDkgQEAKK0hhcmQgZGlzayBzaG9jayBwcm90ZWN0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBdXRob3I6IEVsaWFzIE9sdG1hbm5zIDxlb0BuZWJlbnNhY2hlbi5kZT4KK0xhc3QgbW9kaWZpZWQ6IDIwMDgtMTAtMDMKKworCiswLiBDb250ZW50cworLS0tLS0tLS0tLS0KKworMS4gSW50cm8KKzIuIFRoZSBpbnRlcmZhY2UKKzMuIFJlZmVyZW5jZXMKKzQuIENSRURJVFMKKworCisxLiBJbnRybworLS0tLS0tLS0KKworQVRBL0FUQVBJLTcgc3BlY2lmaWVzIHRoZSBJRExFIElNTUVESUFURSBjb21tYW5kIHdpdGggdW5sb2FkIGZlYXR1cmUuCitJc3N1aW5nIHRoaXMgY29tbWFuZCBzaG91bGQgY2F1c2UgdGhlIGRyaXZlIHRvIHN3aXRjaCB0byBpZGxlIG1vZGUgYW5kCit1bmxvYWQgZGlzayBoZWFkcy4gVGhpcyBmZWF0dXJlIGlzIGJlaW5nIHVzZWQgaW4gbW9kZXJuIGxhcHRvcHMgaW4KK2Nvbmp1bmN0aW9uIHdpdGggYWNjZWxlcm9tZXRlcnMgYW5kIGFwcHJvcHJpYXRlIHNvZnR3YXJlIHRvIGltcGxlbWVudAorYSBzaG9jayBwcm90ZWN0aW9uIGZhY2lsaXR5LiBUaGUgaWRlYSBpcyB0byBzdG9wIGFsbCBJL08gb3BlcmF0aW9ucyBvbgordGhlIGludGVybmFsIGhhcmQgZHJpdmUgYW5kIHBhcmsgaXRzIGhlYWRzIG9uIHRoZSByYW1wIHdoZW4gY3JpdGljYWwKK3NpdHVhdGlvbnMgYXJlIGFudGljaXBhdGVkLiBUaGUgZGVzaXJlIHRvIGhhdmUgc3VjaCBhIGZlYXR1cmUKK2F2YWlsYWJsZSBvbiBHTlUvTGludXggc3lzdGVtcyBoYXMgYmVlbiB0aGUgb3JpZ2luYWwgbW90aXZhdGlvbiB0bworaW1wbGVtZW50IGEgZ2VuZXJpYyBkaXNrIGhlYWQgcGFya2luZyBpbnRlcmZhY2UgaW4gdGhlIExpbnV4IGtlcm5lbC4KK1BsZWFzZSBub3RlLCBob3dldmVyLCB0aGF0IG90aGVyIGNvbXBvbmVudHMgaGF2ZSB0byBiZSBzZXQgdXAgb24geW91cgorc3lzdGVtIGluIG9yZGVyIHRvIGdldCBkaXNrIHNob2NrIHByb3RlY3Rpb24gd29ya2luZyAoc2VlCitzZWN0aW9uIDMuIFJlZmVyZW5jZXMgYmVsb3cgZm9yIHBvaW50ZXJzIHRvIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKK3RoYXQpLgorCisKKzIuIFRoZSBpbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGVhY2ggQVRBIGRldmljZSwgdGhlIGtlcm5lbCBleHBvcnRzIHRoZSBmaWxlCitibG9jay8qL2RldmljZS91bmxvYWRfaGVhZHMgaW4gc3lzZnMgKGhlcmUgYXNzdW1lZCB0byBiZSBtb3VudGVkIHVuZGVyCisvc3lzKS4gQWNjZXNzIHRvIC9zeXMvYmxvY2svKi9kZXZpY2UvdW5sb2FkX2hlYWRzIGlzIGRlbmllZCB3aXRoCistRU9QTk9UU1VQUCBpZiB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhlIHVubG9hZCBmZWF0dXJlLgorT3RoZXJ3aXNlLCB3cml0aW5nIGFuIGludGVnZXIgdmFsdWUgdG8gdGhpcyBmaWxlIHdpbGwgdGFrZSB0aGUgaGVhZHMKK29mIHRoZSByZXNwZWN0aXZlIGRyaXZlIG9mZiB0aGUgcGxhdHRlciBhbmQgYmxvY2sgYWxsIEkvTyBvcGVyYXRpb25zCitmb3IgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLiBXaGVuIHRoZSB0aW1lb3V0IGV4cGlyZXMgYW5kCitubyBmdXJ0aGVyIGRpc2sgaGVhZCBwYXJrIHJlcXVlc3QgaGFzIGJlZW4gaXNzdWVkIGluIHRoZSBtZWFudGltZSwKK25vcm1hbCBvcGVyYXRpb24gd2lsbCBiZSByZXN1bWVkLiBUaGUgbWF4aW1hbCB2YWx1ZSBhY2NlcHRlZCBmb3IgYQordGltZW91dCBpcyAzMDAwMCBtaWxsaXNlY29uZHMuIEV4Y2VlZGluZyB0aGlzIGxpbWl0IHdpbGwgcmV0dXJuCistRU9WRVJGTE9XLCBidXQgaGVhZHMgd2lsbCBiZSBwYXJrZWQgYW55d2F5IGFuZCB0aGUgdGltZW91dCB3aWxsIGJlCitzZXQgdG8gMzAgc2Vjb25kcy4gSG93ZXZlciwgeW91IGNhbiBhbHdheXMgY2hhbmdlIGEgdGltZW91dCB0byBhbnkKK3ZhbHVlIGJldHdlZW4gMCBhbmQgMzAwMDAgYnkgaXNzdWluZyBhIHN1YnNlcXVlbnQgaGVhZCBwYXJrIHJlcXVlc3QKK2JlZm9yZSB0aGUgdGltZW91dCBvZiB0aGUgcHJldmlvdXMgb25lIGhhcyBleHBpcmVkLiBJbiBwYXJ0aWN1bGFyLCB0aGUKK3RvdGFsIHRpbWVvdXQgY2FuIGV4Y2VlZCAzMCBzZWNvbmRzIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgeW91IGNhbgorY2FuY2VsIGEgcHJldmlvdXNseSBzZXQgdGltZW91dCBhbmQgcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24KK2ltbWVkaWF0ZWx5IGJ5IHNwZWNpZnlpbmcgYSB0aW1lb3V0IG9mIDAuIFZhbHVlcyBiZWxvdyAtMiBhcmUgcmVqZWN0ZWQKK3dpdGggLUVJTlZBTCAoc2VlIGJlbG93IGZvciB0aGUgc3BlY2lhbCBtZWFuaW5nIG9mIC0xIGFuZCAtMikuIElmIHRoZQordGltZW91dCBzcGVjaWZpZWQgZm9yIGEgcmVjZW50IGhlYWQgcGFyayByZXF1ZXN0IGhhcyBub3QgeWV0IGV4cGlyZWQsCityZWFkaW5nIGZyb20gL3N5cy9ibG9jay8qL2RldmljZS91bmxvYWRfaGVhZHMgd2lsbCByZXBvcnQgdGhlIG51bWJlcgorb2YgbWlsbGlzZWNvbmRzIHJlbWFpbmluZyB1bnRpbCBub3JtYWwgb3BlcmF0aW9uIHdpbGwgYmUgcmVzdW1lZDsKK290aGVyd2lzZSwgcmVhZGluZyB0aGUgdW5sb2FkX2hlYWRzIGF0dHJpYnV0ZSB3aWxsIHJldHVybiAwLgorCitGb3IgZXhhbXBsZSwgZG8gdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBwYXJrIHRoZSBoZWFkcyBvZiBkcml2ZQorL2Rldi9zZGEgYW5kIHN0b3AgYWxsIEkvTyBvcGVyYXRpb25zIGZvciBmaXZlIHNlY29uZHM6CisKKyMgZWNobyA1MDAwID4gL3N5cy9ibG9jay9zZGEvZGV2aWNlL3VubG9hZF9oZWFkcworCitBIHNpbXBsZQorCisjIGNhdCAvc3lzL2Jsb2NrL3NkYS9kZXZpY2UvdW5sb2FkX2hlYWRzCisKK3dpbGwgc2hvdyB5b3UgaG93IG1hbnkgbWlsbGlzZWNvbmRzIGFyZSBsZWZ0IGJlZm9yZSBub3JtYWwgb3BlcmF0aW9uCit3aWxsIGJlIHJlc3VtZWQuCisKK0Egd29yZCBvZiBjYXV0aW9uOiBUaGUgZmFjdCB0aGF0IHRoZSBpbnRlcmZhY2Ugb3BlcmF0ZXMgb24gYSBiYXNpcyBvZgorbWlsbGlzZWNvbmRzIG1heSByYWlzZSBleHBlY3RhdGlvbnMgdGhhdCBjYW5ub3QgYmUgc2F0aXNmaWVkIGluCityZWFsaXR5LiBJbiBmYWN0LCB0aGUgQVRBIHNwZWNzIGNsZWFybHkgc3RhdGUgdGhhdCB0aGUgdGltZSBmb3IgYW4KK3VubG9hZCBvcGVyYXRpb24gdG8gY29tcGxldGUgaXMgdmVuZG9yIHNwZWNpZmljLiBUaGUgaGludCBpbiBBVEEtNwordGhhdCB0aGlzIHdpbGwgdHlwaWNhbGx5IGJlIHdpdGhpbiA1MDAgbWlsbGlzZWNvbmRzIGFwcGFyZW50bHkgaGFzCitiZWVuIGRyb3BwZWQgaW4gQVRBLTguCisKK1RoZXJlIGlzIGEgdGVjaG5pY2FsIGRldGFpbCBvZiB0aGlzIGltcGxlbWVudGF0aW9uIHRoYXQgbWF5IGNhdXNlIHNvbWUKK2NvbmZ1c2lvbiBhbmQgc2hvdWxkIGJlIGRpc2N1c3NlZCBoZXJlLiBXaGVuIGEgaGVhZCBwYXJrIHJlcXVlc3QgaGFzCitiZWVuIGlzc3VlZCB0byBhIGRldmljZSBzdWNjZXNzZnVsbHksIGFsbCBJL08gb3BlcmF0aW9ucyBvbiB0aGUKK2NvbnRyb2xsZXIgcG9ydCB0aGlzIGRldmljZSBpcyBhdHRhY2hlZCB0byB3aWxsIGJlIGRlZmVycmVkLiBUaGF0IGlzCit0byBzYXksIGFueSBvdGhlciBkZXZpY2UgdGhhdCBtYXkgYmUgY29ubmVjdGVkIHRvIHRoZSBzYW1lIHBvcnQgd2lsbAorYmUgYWZmZWN0ZWQgdG9vLiBUaGUgb25seSBleGNlcHRpb24gaXMgdGhhdCBhIHN1YnNlcXVlbnQgaGVhZCB1bmxvYWQKK3JlcXVlc3QgdG8gdGhhdCBvdGhlciBkZXZpY2Ugd2lsbCBiZSBleGVjdXRlZCBpbW1lZGlhdGVseS4gRnVydGhlcgorb3BlcmF0aW9ucyBvbiB0aGF0IHBvcnQgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgdGltZW91dCBzcGVjaWZpZWQKK2ZvciBlaXRoZXIgZGV2aWNlIG9uIHRoZSBwb3J0IGhhcyBleHBpcmVkLiBBcyBmYXIgYXMgUEFUQSAob2xkIHN0eWxlCitJREUpIGNvbmZpZ3VyYXRpb25zIGFyZSBjb25jZXJuZWQsIHRoZXJlIGNhbiBvbmx5IGJlIHR3byBkZXZpY2VzCithdHRhY2hlZCB0byBhbnkgc2luZ2xlIHBvcnQuIEluIFNBVEEgd29ybGQgd2UgaGF2ZSBwb3J0IG11bHRpcGxpZXJzCit3aGljaCBtZWFucyB0aGF0IGEgdXNlci1pc3N1ZWQgaGVhZCBwYXJraW5nIHJlcXVlc3QgdG8gb25lIGRldmljZSBtYXkKK2FjdHVhbGx5IHJlc3VsdCBpbiBzdG9wcGluZyBJL08gdG8gYSB3aG9sZSBidW5jaCBvZiBkZXZpY2VzLiBIb3dldmVyLAorc2luY2UgdGhpcyBmZWF0dXJlIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgb24gbGFwdG9wcyBhbmQgZG9lcyBub3Qgc2VlbQordG8gYmUgdmVyeSB1c2VmdWwgaW4gYW55IG90aGVyIGVudmlyb25tZW50LCB0aGVyZSB3aWxsIGJlIG1vc3RseSBvbmUKK2RldmljZSBwZXIgcG9ydC4gRXZlbiBpZiB0aGUgQ0QvRFZEIHdyaXRlciBoYXBwZW5zIHRvIGJlIGNvbm5lY3RlZCB0bwordGhlIHNhbWUgcG9ydCBhcyB0aGUgaGFyZCBkcml2ZSwgaXQgZ2VuZXJhbGx5ICpzaG91bGQqIHJlY292ZXIganVzdAorZmluZSBmcm9tIHRoZSBvY2Nhc2lvbmFsIGJ1ZmZlciB1bmRlci1ydW4gaW5jdXJyZWQgYnkgYSBoZWFkIHBhcmsKK3JlcXVlc3QgdG8gdGhlIEhELiBBY3R1YWxseSwgd2hlbiB5b3UgYXJlIHVzaW5nIGFuIGlkZSBkcml2ZXIgcmF0aGVyCit0aGFuIGl0cyBsaWJhdGEgY291bnRlcnBhcnQgKGkuZS4geW91ciBkaXNrIGlzIGNhbGxlZCAvZGV2L2hkYQoraW5zdGVhZCBvZiAvZGV2L3NkYSksIHRoZW4gcGFya2luZyB0aGUgaGVhZHMgb2Ygb25lIGRyaXZlIChkcml2ZSBYKQord2lsbCBnZW5lcmFsbHkgbm90IGFmZmVjdCB0aGUgbW9kZSBvZiBvcGVyYXRpb24gb2YgYW5vdGhlciBkcml2ZQorKGRyaXZlIFkpIG9uIHRoZSBzYW1lIHBvcnQgYXMgZGVzY3JpYmVkIGFib3ZlLiBJdCBpcyBvbmx5IHdoZW4gYSBwb3J0CityZXNldCBpcyByZXF1aXJlZCB0byByZWNvdmVyIGZyb20gYW4gZXhjZXB0aW9uIG9uIGRyaXZlIFkgdGhhdCBmdXJ0aGVyCitJL08gb3BlcmF0aW9ucyBvbiB0aGF0IGRyaXZlIChhbmQgdGhlIHJlc2V0IGl0c2VsZikgd2lsbCBiZSBkZWxheWVkCit1bnRpbCBkcml2ZSBYIGlzIG5vIGxvbmdlciBpbiB0aGUgcGFya2VkIHN0YXRlLgorCitGaW5hbGx5LCB0aGVyZSBhcmUgc29tZSBoYXJkIGRyaXZlcyB0aGF0IG9ubHkgY29tcGx5IHdpdGggYW4gZWFybGllcgordmVyc2lvbiBvZiB0aGUgQVRBIHN0YW5kYXJkIHRoYW4gQVRBLTcsIGJ1dCBkbyBzdXBwb3J0IHRoZSB1bmxvYWQKK2ZlYXR1cmUgbm9uZXRoZWxlc3MuIFVuZm9ydHVuYXRlbHksIHRoZXJlIGlzIG5vIHNhZmUgd2F5IExpbnV4IGNhbgorZGV0ZWN0IHRoZXNlIGRldmljZXMsIHNvIHlvdSB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIHRoZQordW5sb2FkX2hlYWRzIGF0dHJpYnV0ZS4gSWYgeW91IGtub3cgdGhhdCB5b3VyIGRldmljZSByZWFsbHkgZG9lcworc3VwcG9ydCB0aGUgdW5sb2FkIGZlYXR1cmUgKGZvciBpbnN0YW5jZSwgYmVjYXVzZSB0aGUgdmVuZG9yIG9mIHlvdXIKK2xhcHRvcCBvciB0aGUgaGFyZCBkcml2ZSBpdHNlbGYgdG9sZCB5b3Ugc28pLCB0aGVuIHlvdSBjYW4gdGVsbCB0aGUKK2tlcm5lbCB0byBlbmFibGUgdGhlIHVzYWdlIG9mIHRoaXMgZmVhdHVyZSBmb3IgdGhhdCBkcml2ZSBieSB3cml0aW5nCit0aGUgc3BlY2lhbCB2YWx1ZSAtMSB0byB0aGUgdW5sb2FkX2hlYWRzIGF0dHJpYnV0ZToKKworIyBlY2hvIC0xID4gL3N5cy9ibG9jay9zZGEvZGV2aWNlL3VubG9hZF9oZWFkcworCit3aWxsIGVuYWJsZSB0aGUgZmVhdHVyZSBmb3IgL2Rldi9zZGEsIGFuZCBnaXZpbmcgLTIgaW5zdGVhZCBvZiAtMSB3aWxsCitkaXNhYmxlIGl0IGFnYWluLgorCisKKzMuIFJlZmVyZW5jZXMKKy0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIHNldmVyYWwgbGFwdG9wcyBmcm9tIGRpZmZlcmVudCB2ZW5kb3JzIGZlYXR1cmluZyBzaG9jaworcHJvdGVjdGlvbiBjYXBhYmlsaXRpZXMuIEFzIG1hbnVmYWN0dXJlcnMgaGF2ZSByZWZ1c2VkIHRvIHN1cHBvcnQgb3Blbgorc291cmNlIGRldmVsb3BtZW50IG9mIHRoZSByZXF1aXJlZCBzb2Z0d2FyZSBjb21wb25lbnRzIHNvIGZhciwgTGludXgKK3N1cHBvcnQgZm9yIHNob2NrIHByb3RlY3Rpb24gdmFyaWVzIGNvbnNpZGVyYWJseSBiZXR3ZWVuIGRpZmZlcmVudAoraGFyZHdhcmUgaW1wbGVtZW50YXRpb25zLiBJZGVhbGx5LCB0aGlzIHNlY3Rpb24gc2hvdWxkIGNvbnRhaW4gYSBsaXN0CitvZiBwb2ludGVycyBhdCBkaWZmZXJlbnQgcHJvamVjdHMgYWltaW5nIGF0IGFuIGltcGxlbWVudGF0aW9uIG9mIHNob2NrCitwcm90ZWN0aW9uIG9uIGRpZmZlcmVudCBzeXN0ZW1zLiBVbmZvcnR1bmF0ZWx5LCBJIG9ubHkga25vdyBvZiBhCitzaW5nbGUgcHJvamVjdCB3aGljaCwgYWx0aG91Z2ggc3RpbGwgY29uc2lkZXJlZCBleHBlcmltZW50YWwsIGlzIGZpdAorZm9yIHVzZS4gUGxlYXNlIGZlZWwgZnJlZSB0byBhZGQgcHJvamVjdHMgdGhhdCBoYXZlIGJlZW4gdGhlIHZpY3RpbXMKK29mIG15IGlnbm9yYW5jZS4KKworLSBodHRwOi8vd3d3LnRoaW5rd2lraS5vcmcvd2lraS9IREFQUworICBTZWUgdGhpcyBwYWdlIGZvciBpbmZvcm1hdGlvbiBhYm91dCBMaW51eCBzdXBwb3J0IG9mIHRoZSBoYXJkIGRpc2sKKyAgYWN0aXZlIHByb3RlY3Rpb24gc3lzdGVtIGFzIGltcGxlbWVudGVkIGluIElCTS9MZW5vdm8gVGhpbmtwYWRzLgorCisKKzQuIENSRURJVFMKKy0tLS0tLS0tLS0KKworVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBkaXNrIGhlYWQgcGFya2luZyBoYXMgYmVlbiBpbnNwaXJlZCBieSBhIHBhdGNoCitvcmlnaW5hbGx5IHB1Ymxpc2hlZCBieSBKb24gRXNjb21iZSA8bGlzdHNAZHJlc2NvLmNvLnVrPi4gTXkgZWZmb3J0cwordG8gZGV2ZWxvcCBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZlYXR1cmUgdGhhdCBpcyBmaXQgdG8gYmUgbWVyZ2VkCitpbnRvIG1haW5saW5lIGhhdmUgYmVlbiBhaWRlZCBieSB2YXJpb3VzIGtlcm5lbCBkZXZlbG9wZXJzLCBpbgorcGFydGljdWxhciBieSBUZWp1biBIZW8gYW5kIEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3ouCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL210ZC9uYW5kX2VjYy50eHQgYi9Eb2N1bWVudGF0aW9uL210ZC9uYW5kX2VjYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmOTNiNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbXRkL25hbmRfZWNjLnR4dApAQCAtMCwwICsxLDcxNCBAQAorSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworSGF2aW5nIGxvb2tlZCBhdCB0aGUgbGludXggbXRkL25hbmQgZHJpdmVyIGFuZCBtb3JlIHNwZWNpZmljIGF0IG5hbmRfZWNjLmMKK0kgZmVsdCB0aGVyZSB3YXMgcm9vbSBmb3Igb3B0aW1pc2F0aW9uLiBJIGJhc2hlZCB0aGUgY29kZSBmb3IgYSBmZXcgaG91cnMKK3BlcmZvcm1pbmcgdHJpY2tzIGxpa2UgdGFibGUgbG9va3VwIHJlbW92aW5nIHN1cGVyZmx1b3VzIGNvZGUgZXRjLgorQWZ0ZXIgdGhhdCB0aGUgc3BlZWQgd2FzIGluY3JlYXNlZCBieSAzNS00MCUuCitTdGlsbCBJIHdhcyBub3QgdG9vIGhhcHB5IGFzIEkgZmVsdCB0aGVyZSB3YXMgYWRkaXRpb25hbCByb29tIGZvciBpbXByb3ZlbWVudC4KKworQmFkISBJIHdhcyBob29rZWQuCitJIGRlY2lkZWQgdG8gYW5ub3RhdGUgbXkgc3RlcHMgaW4gdGhpcyBmaWxlLiBQZXJoYXBzIGl0IGlzIHVzZWZ1bCB0byBzb21lb25lCitvciBzb21lb25lIGxlYXJucyBzb21ldGhpbmcgZnJvbSBpdC4KKworCitUaGUgcHJvYmxlbQorPT09PT09PT09PT0KKworTkFORCBmbGFzaCAoYXQgbGVhc3QgU0xDIG9uZSkgdHlwaWNhbGx5IGhhcyBzZWN0b3JzIG9mIDI1NiBieXRlcy4KK0hvd2V2ZXIgTkFORCBmbGFzaCBpcyBub3QgZXh0cmVtZWx5IHJlbGlhYmxlIHNvIHNvbWUgZXJyb3IgZGV0ZWN0aW9uCisoYW5kIHNvbWV0aW1lcyBjb3JyZWN0aW9uKSBpcyBuZWVkZWQuCisKK1RoaXMgaXMgZG9uZSBieSBtZWFucyBvZiBhIEhhbW1pbmcgY29kZS4gSSdsbCB0cnkgdG8gZXhwbGFpbiBpdCBpbgorbGF5bWFucyB0ZXJtcyAoYW5kIGFwb2xvZ2llcyB0byBhbGwgdGhlIHBybydzIGluIHRoZSBmaWVsZCBpbiBjYXNlIEkgZG8KK25vdCB1c2UgdGhlIHJpZ2h0IHRlcm1pbm9sb2d5LCBteSBjb2RpbmcgdGhlb3J5IGNsYXNzIHdhcyBhbG1vc3QgMzAKK3llYXJzIGFnbywgYW5kIEkgbXVzdCBhZG1pdCBpdCB3YXMgbm90IG9uZSBvZiBteSBmYXZvdXJpdGVzKS4KKworQXMgSSBzYWlkIGJlZm9yZSB0aGUgZWNjIGNhbGN1bGF0aW9uIGlzIHBlcmZvcm1lZCBvbiBzZWN0b3JzIG9mIDI1NgorYnl0ZXMuIFRoaXMgaXMgZG9uZSBieSBjYWxjdWxhdGluZyBzZXZlcmFsIHBhcml0eSBiaXRzIG92ZXIgdGhlIHJvd3MgYW5kCitjb2x1bW5zLiBUaGUgcGFyaXR5IHVzZWQgaXMgZXZlbiBwYXJpdHkgd2hpY2ggbWVhbnMgdGhhdCB0aGUgcGFyaXR5IGJpdCA9IDEKK2lmIHRoZSBkYXRhIG92ZXIgd2hpY2ggdGhlIHBhcml0eSBpcyBjYWxjdWxhdGVkIGlzIDEgYW5kIHRoZSBwYXJpdHkgYml0ID0gMAoraWYgdGhlIGRhdGEgb3ZlciB3aGljaCB0aGUgcGFyaXR5IGlzIGNhbGN1bGF0ZWQgaXMgMC4gU28gdGhlIHRvdGFsCitudW1iZXIgb2YgYml0cyBvdmVyIHRoZSBkYXRhIG92ZXIgd2hpY2ggdGhlIHBhcml0eSBpcyBjYWxjdWxhdGVkICsgdGhlCitwYXJpdHkgYml0IGlzIGV2ZW4uIChzZWUgd2lraXBlZGlhIGlmIHlvdSBjYW4ndCBmb2xsb3cgdGhpcykuCitQYXJpdHkgaXMgb2Z0ZW4gY2FsY3VsYXRlZCBieSBtZWFucyBvZiBhbiBleGNsdXNpdmUgb3Igb3BlcmF0aW9uLAorc29tZXRpbWVzIGFsc28gcmVmZXJyZWQgdG8gYXMgeG9yLiBJbiBDIHRoZSBvcGVyYXRvciBmb3IgeG9yIGlzIF4KKworQmFjayB0byBlY2MuCitMZXQncyBnaXZlIGEgc21hbGwgZmlndXJlOgorCitieXRlICAgMDogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMCBycDIgcnA0IC4uLiBycDE0CitieXRlICAgMTogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMSBycDIgcnA0IC4uLiBycDE0CitieXRlICAgMjogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMCBycDMgcnA0IC4uLiBycDE0CitieXRlICAgMzogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMSBycDMgcnA0IC4uLiBycDE0CitieXRlICAgNDogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMCBycDIgcnA1IC4uLiBycDE0CisuLi4uCitieXRlIDI1NDogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMCBycDMgcnA1IC4uLiBycDE1CitieXRlIDI1NTogIGJpdDcgYml0NiBiaXQ1IGJpdDQgYml0MyBiaXQyIGJpdDEgYml0MCAgIHJwMSBycDMgcnA1IC4uLiBycDE1CisgICAgICAgICAgIGNwMSAgY3AwICBjcDEgIGNwMCAgY3AxICBjcDAgIGNwMSAgY3AwCisgICAgICAgICAgIGNwMyAgY3AzICBjcDIgIGNwMiAgY3AzICBjcDMgIGNwMiAgY3AyCisgICAgICAgICAgIGNwNSAgY3A1ICBjcDUgIGNwNSAgY3A0ICBjcDQgIGNwNCAgY3A0CisKK1RoaXMgZmlndXJlIHJlcHJlc2VudHMgYSBzZWN0b3Igb2YgMjU2IGJ5dGVzLgorY3AgaXMgbXkgYWJicmV2aWF0b24gZm9yIGNvbHVtbiBwYXJpdHksIHJwIGZvciByb3cgcGFyaXR5LgorCitMZXQncyBzdGFydCB0byBleHBsYWluIGNvbHVtbiBwYXJpdHkuCitjcDAgaXMgdGhlIHBhcml0eSB0aGF0IGJlbG9uZ3MgdG8gYWxsIGJpdDAsIGJpdDIsIGJpdDQsIGJpdDYuCitzbyB0aGUgc3VtIG9mIGFsbCBiaXQwLCBiaXQyLCBiaXQ0IGFuZCBiaXQ2IHZhbHVlcyArIGNwMCBpdHNlbGYgaXMgZXZlbi4KK1NpbWlsYXJseSBjcDEgaXMgdGhlIHN1bSBvZiBhbGwgYml0MSwgYml0MywgYml0NSBhbmQgYml0Ny4KK2NwMiBpcyB0aGUgcGFyaXR5IG92ZXIgYml0MCwgYml0MSwgYml0NCBhbmQgYml0NQorY3AzIGlzIHRoZSBwYXJpdHkgb3ZlciBiaXQyLCBiaXQzLCBiaXQ2IGFuZCBiaXQ3LgorY3A0IGlzIHRoZSBwYXJpdHkgb3ZlciBiaXQwLCBiaXQxLCBiaXQyIGFuZCBiaXQzLgorY3A1IGlzIHRoZSBwYXJpdHkgb3ZlciBiaXQ0LCBiaXQ1LCBiaXQ2IGFuZCBiaXQ3LgorTm90ZSB0aGF0IGVhY2ggb2YgY3AwIC4uIGNwNSBpcyBleGFjdGx5IG9uZSBiaXQuCisKK1JvdyBwYXJpdHkgYWN0dWFsbHkgd29ya3MgYWxtb3N0IHRoZSBzYW1lLgorcnAwIGlzIHRoZSBwYXJpdHkgb2YgYWxsIGV2ZW4gYnl0ZXMgKDAsIDIsIDQsIDYsIC4uLiAyNTIsIDI1NCkKK3JwMSBpcyB0aGUgcGFyaXR5IG9mIGFsbCBvZGQgYnl0ZXMgKDEsIDMsIDUsIDcsIC4uLiwgMjUzLCAyNTUpCitycDIgaXMgdGhlIHBhcml0eSBvZiBhbGwgYnl0ZXMgMCwgMSwgNCwgNSwgOCwgOSwgLi4uCisoc28gaGFuZGxlIHR3byBieXRlcywgdGhlbiBza2lwIDIgYnl0ZXMpLgorcnAzIGlzIGNvdmVycyB0aGUgaGFsZiBycDIgZG9lcyBub3QgY292ZXIgKGJ5dGVzIDIsIDMsIDYsIDcsIDEwLCAxMSwgLi4uKQorZm9yIHJwNCB0aGUgcnVsZSBpcyBjb3ZlciA0IGJ5dGVzLCBza2lwIDQgYnl0ZXMsIGNvdmVyIDQgYnl0ZXMsIHNraXAgNCBldGMuCitzbyBycDQgY2FsY3VsYXRlcyBwYXJpdHkgb3ZlciBieXRlcyAwLCAxLCAyLCAzLCA4LCA5LCAxMCwgMTEsIDE2LCAuLi4pCithbmQgcnA1IGNvdmVycyB0aGUgb3RoZXIgaGFsZiwgc28gYnl0ZXMgNCwgNSwgNiwgNywgMTIsIDEzLCAxNCwgMTUsIDIwLCAuLgorVGhlIHN0b3J5IG5vdyBiZWNvbWVzIHF1aXRlIGJvcmluZy4gSSBndWVzcyB5b3UgZ2V0IHRoZSBpZGVhLgorcnA2IGNvdmVycyA4IGJ5dGVzIHRoZW4gc2tpcHMgOCBldGMKK3JwNyBza2lwcyA4IGJ5dGVzIHRoZW4gY292ZXJzIDggZXRjCitycDggY292ZXJzIDE2IGJ5dGVzIHRoZW4gc2tpcHMgMTYgZXRjCitycDkgc2tpcHMgMTYgYnl0ZXMgdGhlbiBjb3ZlcnMgMTYgZXRjCitycDEwIGNvdmVycyAzMiBieXRlcyB0aGVuIHNraXBzIDMyIGV0YworcnAxMSBza2lwcyAzMiBieXRlcyB0aGVuIGNvdmVycyAzMiBldGMKK3JwMTIgY292ZXJzIDY0IGJ5dGVzIHRoZW4gc2tpcHMgNjQgZXRjCitycDEzIHNraXBzIDY0IGJ5dGVzIHRoZW4gY292ZXJzIDY0IGV0YworcnAxNCBjb3ZlcnMgMTI4IGJ5dGVzIHRoZW4gc2tpcHMgMTI4CitycDE1IHNraXBzIDEyOCBieXRlcyB0aGVuIGNvdmVycyAxMjgKKworSW4gdGhlIGVuZCB0aGUgcGFyaXR5IGJpdHMgYXJlIGdyb3VwZWQgdG9nZXRoZXIgaW4gdGhyZWUgYnl0ZXMgYXMKK2ZvbGxvd3M6CitFQ0MgICAgQml0IDcgQml0IDYgQml0IDUgQml0IDQgQml0IDMgQml0IDIgQml0IDEgQml0IDAKK0VDQyAwICAgcnAwNyAgcnAwNiAgcnAwNSAgcnAwNCAgcnAwMyAgcnAwMiAgcnAwMSAgcnAwMAorRUNDIDEgICBycDE1ICBycDE0ICBycDEzICBycDEyICBycDExICBycDEwICBycDA5ICBycDA4CitFQ0MgMiAgIGNwNSAgIGNwNCAgIGNwMyAgIGNwMiAgIGNwMSAgIGNwMCAgICAgIDEgICAgIDEKKworSSBkZXRlY3RlZCBhZnRlciB3cml0aW5nIHRoaXMgdGhhdCBTVCBhcHBsaWNhdGlvbiBub3RlIEFOMTgyMworKGh0dHA6Ly93d3cuc3QuY29tL3N0b25saW5lL2Jvb2tzL3BkZi9kb2NzLzEwMTIzLnBkZikgZ2l2ZXMgYSBtdWNoCituaWNlciBwaWN0dXJlLihidXQgdGhleSB1c2UgbGluZSBwYXJpdHkgYXMgdGVybSB3aGVyZSBJIHVzZSByb3cgcGFyaXR5KQorT2ggd2VsbCwgSSdtIGdyYXBoaWNhbGx5IGNoYWxsZW5nZWQsIHNvIHN1ZmZlciB3aXRoIG1lIGZvciBhIG1vbWVudCA6LSkKK0FuZCBJIGNvdWxkIG5vdCByZXVzZSB0aGUgU1QgcGljdHVyZSBhbnl3YXkgZm9yIGNvcHlyaWdodCByZWFzb25zLgorCisKK0F0dGVtcHQgMAorPT09PT09PT09CisKK0ltcGxlbWVudGluZyB0aGUgcGFyaXR5IGNhbGN1bGF0aW9uIGlzIHByZXR0eSBzaW1wbGUuCitJbiBDIHBzZXVkb2NvZGU6Citmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCit7CisgICAgaWYgKGkgJiAweDAxKQorICAgICAgIHJwMSA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxOworICAgIGVsc2UKKyAgICAgICBycDAgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMTsKKyAgICBpZiAoaSAmIDB4MDIpCisgICAgICAgcnAzID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDM7CisgICAgZWxzZQorICAgICAgIHJwMiA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAyOworICAgIGlmIChpICYgMHgwNCkKKyAgICAgIHJwNSA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnA1OworICAgIGVsc2UKKyAgICAgIHJwNCA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnA0OworICAgIGlmIChpICYgMHgwOCkKKyAgICAgIHJwNyA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnA3OworICAgIGVsc2UKKyAgICAgIHJwNiA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnA2OworICAgIGlmIChpICYgMHgxMCkKKyAgICAgIHJwOSA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnA5OworICAgIGVsc2UKKyAgICAgIHJwOCA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnA4OworICAgIGlmIChpICYgMHgyMCkKKyAgICAgIHJwMTEgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMTE7CisgICAgZWxzZQorICAgIHJwMTAgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMTA7CisgICAgaWYgKGkgJiAweDQwKQorICAgICAgcnAxMyA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxMzsKKyAgICBlbHNlCisgICAgICBycDEyID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDEyOworICAgIGlmIChpICYgMHg4MCkKKyAgICAgIHJwMTUgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMTU7CisgICAgZWxzZQorICAgICAgcnAxNCA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxNDsKKyAgICBjcDAgPSBiaXQ2IF4gYml0NCBeIGJpdDIgXiBiaXQwIF4gY3AwOworICAgIGNwMSA9IGJpdDcgXiBiaXQ1IF4gYml0MyBeIGJpdDEgXiBjcDE7CisgICAgY3AyID0gYml0NSBeIGJpdDQgXiBiaXQxIF4gYml0MCBeIGNwMjsKKyAgICBjcDMgPSBiaXQ3IF4gYml0NiBeIGJpdDMgXiBiaXQyIF4gY3AzCisgICAgY3A0ID0gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIGNwNAorICAgIGNwNSA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBjcDUKK30KKworCitBbmFseXNpcyAwCis9PT09PT09PT09CisKK0MgZG9lcyBoYXZlIGJpdHdpc2Ugb3BlcmF0b3JzIGJ1dCBub3QgcmVhbGx5IG9wZXJhdG9ycyB0byBkbyB0aGUgYWJvdmUKK2VmZmljaWVudGx5IChhbmQgbW9zdCBoYXJkd2FyZSBoYXMgbm8gc3VjaCBpbnN0cnVjdGlvbnMgZWl0aGVyKS4KK1RoZXJlZm9yZSB3aXRob3V0IGltcGxlbWVudGluZyB0aGlzIGl0IHdhcyBjbGVhciB0aGF0IHRoZSBjb2RlIGFib3ZlIHdhcworbm90IGdvaW5nIHRvIGJyaW5nIG1lIGEgTm9iZWwgcHJpemUgOi0pCisKK0ZvcnR1bmF0ZWx5IHRoZSBleGNsdXNpdmUgb3Igb3BlcmF0aW9uIGlzIGNvbW11dGF0aXZlLCBzbyB3ZSBjYW4gY29tYmluZQordGhlIHZhbHVlcyBpbiBhbnkgb3JkZXIuIFNvIGluc3RlYWQgb2YgY2FsY3VsYXRpbmcgYWxsIHRoZSBiaXRzCitpbmRpdmlkdWFsbHksIGxldCB1cyB0cnkgdG8gcmVhcnJhbmdlIHRoaW5ncy4KK0ZvciB0aGUgY29sdW1uIHBhcml0eSB0aGlzIGlzIGVhc3kuIFdlIGNhbiBqdXN0IHhvciB0aGUgYnl0ZXMgYW5kIGluIHRoZQorZW5kIGZpbHRlciBvdXQgdGhlIHJlbGV2YW50IGJpdHMuIFRoaXMgaXMgcHJldHR5IG5pY2UgYXMgaXQgd2lsbCBicmluZworYWxsIGNwIGNhbGN1bGF0aW9uIG91dCBvZiB0aGUgaWYgbG9vcC4KKworU2ltaWxhcmx5IHdlIGNhbiBmaXJzdCB4b3IgdGhlIGJ5dGVzIGZvciB0aGUgdmFyaW91cyByb3dzLgorVGhpcyBsZWFkcyB0bzoKKworCitBdHRlbXB0IDEKKz09PT09PT09PQorCitjb25zdCBjaGFyIHBhcml0eVsyNTZdID0geworICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKyAgICAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKyAgICAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAKK307CisKK3ZvaWQgZWNjMShjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmNvZGUpCit7CisgICAgaW50IGk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnAgPSBidWY7CisgICAgdW5zaWduZWQgY2hhciBjdXI7CisgICAgdW5zaWduZWQgY2hhciBycDAsIHJwMSwgcnAyLCBycDMsIHJwNCwgcnA1LCBycDYsIHJwNzsKKyAgICB1bnNpZ25lZCBjaGFyIHJwOCwgcnA5LCBycDEwLCBycDExLCBycDEyLCBycDEzLCBycDE0LCBycDE1OworICAgIHVuc2lnbmVkIGNoYXIgcGFyOworCisgICAgcGFyID0gMDsKKyAgICBycDAgPSAwOyBycDEgPSAwOyBycDIgPSAwOyBycDMgPSAwOworICAgIHJwNCA9IDA7IHJwNSA9IDA7IHJwNiA9IDA7IHJwNyA9IDA7CisgICAgcnA4ID0gMDsgcnA5ID0gMDsgcnAxMCA9IDA7IHJwMTEgPSAwOworICAgIHJwMTIgPSAwOyBycDEzID0gMDsgcnAxNCA9IDA7IHJwMTUgPSAwOworCisgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIHsKKyAgICAgICAgY3VyID0gKmJwKys7CisgICAgICAgIHBhciBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMSkgcnAxIF49IGN1cjsgZWxzZSBycDAgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDIpIHJwMyBePSBjdXI7IGVsc2UgcnAyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA0KSBycDUgXj0gY3VyOyBlbHNlIHJwNCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwOCkgcnA3IF49IGN1cjsgZWxzZSBycDYgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MTApIHJwOSBePSBjdXI7IGVsc2UgcnA4IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIwKSBycDExIF49IGN1cjsgZWxzZSBycDEwIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDQwKSBycDEzIF49IGN1cjsgZWxzZSBycDEyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDgwKSBycDE1IF49IGN1cjsgZWxzZSBycDE0IF49IGN1cjsKKyAgICB9CisgICAgY29kZVswXSA9CisgICAgICAgIChwYXJpdHlbcnA3XSA8PCA3KSB8CisgICAgICAgIChwYXJpdHlbcnA2XSA8PCA2KSB8CisgICAgICAgIChwYXJpdHlbcnA1XSA8PCA1KSB8CisgICAgICAgIChwYXJpdHlbcnA0XSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcnAzXSA8PCAzKSB8CisgICAgICAgIChwYXJpdHlbcnAyXSA8PCAyKSB8CisgICAgICAgIChwYXJpdHlbcnAxXSA8PCAxKSB8CisgICAgICAgIChwYXJpdHlbcnAwXSk7CisgICAgY29kZVsxXSA9CisgICAgICAgIChwYXJpdHlbcnAxNV0gPDwgNykgfAorICAgICAgICAocGFyaXR5W3JwMTRdIDw8IDYpIHwKKyAgICAgICAgKHBhcml0eVtycDEzXSA8PCA1KSB8CisgICAgICAgIChwYXJpdHlbcnAxMl0gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3JwMTFdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtycDEwXSA8PCAyKSB8CisgICAgICAgIChwYXJpdHlbcnA5XSAgPDwgMSkgfAorICAgICAgICAocGFyaXR5W3JwOF0pOworICAgIGNvZGVbMl0gPQorICAgICAgICAocGFyaXR5W3BhciAmIDB4ZjBdIDw8IDcpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweDBmXSA8PCA2KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhjY10gPDwgNSkgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4MzNdIDw8IDQpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweGFhXSA8PCAzKSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHg1NV0gPDwgMik7CisgICAgY29kZVswXSA9IH5jb2RlWzBdOworICAgIGNvZGVbMV0gPSB+Y29kZVsxXTsKKyAgICBjb2RlWzJdID0gfmNvZGVbMl07Cit9CisKK1N0aWxsIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBsYXN0IHRocmVlIGludmVydCBzdGF0ZW1lbnRzIGFyZSB0aGVyZSB0bworZ2l2ZSBhIGNoZWNrc3VtIG9mIDB4ZmYgMHhmZiAweGZmIGZvciBhbiBlbXB0eSBmbGFzaC4gSW4gYW4gZW1wdHkgZmxhc2gKK2FsbCBkYXRhIGlzIDB4ZmYsIHNvIHRoZSBjaGVja3N1bSB0aGVuIG1hdGNoZXMuCisKK0kgYWxzbyBpbnRyb2R1Y2VkIHRoZSBwYXJpdHkgbG9va3VwLiBJIGV4cGVjdGVkIHRoaXMgdG8gYmUgdGhlIGZhc3Rlc3QKK3dheSB0byBjYWxjdWxhdGUgdGhlIHBhcml0eSwgYnV0IEkgd2lsbCBpbnZlc3RpZ2F0ZSBhbHRlcm5hdGl2ZXMgbGF0ZXIKK29uLgorCisKK0FuYWx5c2lzIDEKKz09PT09PT09PT0KKworVGhlIGNvZGUgd29ya3MsIGJ1dCBpcyBub3QgdGVycmlibHkgZWZmaWNpZW50LiBPbiBteSBzeXN0ZW0gaXQgdG9vaworYWxtb3N0IDQgdGltZXMgYXMgbXVjaCB0aW1lIGFzIHRoZSBsaW51eCBkcml2ZXIgY29kZS4gQnV0IGhleSwgaWYgaXQgd2FzCisqdGhhdCogZWFzeSB0aGlzIHdvdWxkIGhhdmUgYmVlbiBkb25lIGxvbmcgYmVmb3JlLgorTm8gcGFpbi4gbm8gZ2Fpbi4KKworRm9ydHVuYXRlbHkgdGhlcmUgaXMgcGxlbnR5IG9mIHJvb20gZm9yIGltcHJvdmVtZW50LgorCitJbiBzdGVwIDEgd2UgbW92ZWQgZnJvbSBiaXQtd2lzZSBjYWxjdWxhdGlvbiB0byBieXRlLXdpc2UgY2FsY3VsYXRpb24uCitIb3dldmVyIGluIEMgd2UgY2FuIGFsc28gdXNlIHRoZSB1bnNpZ25lZCBsb25nIGRhdGEgdHlwZSBhbmQgdmlydHVhbGx5CitldmVyeSBtb2Rlcm4gbWljcm9wcm9jZXNzb3Igc3VwcG9ydHMgMzIgYml0IG9wZXJhdGlvbnMsIHNvIHdoeSBub3QgdHJ5Cit0byB3cml0ZSBvdXIgY29kZSBpbiBzdWNoIGEgd2F5IHRoYXQgd2UgcHJvY2VzcyBkYXRhIGluIDMyIGJpdCBjaHVua3MuCisKK09mIGNvdXJzZSB0aGlzIG1lYW5zIHNvbWUgbW9kaWZpY2F0aW9uIGFzIHRoZSByb3cgcGFyaXR5IGlzIGJ5dGUgYnkKK2J5dGUuIEEgcXVpY2sgYW5hbHlzaXM6Citmb3IgdGhlIGNvbHVtbiBwYXJpdHkgd2UgdXNlIHRoZSBwYXIgdmFyaWFibGUuIFdoZW4gZXh0ZW5kaW5nIHRvIDMyIGJpdHMKK3dlIGNhbiBpbiB0aGUgZW5kIGVhc2lseSBjYWxjdWxhdGUgcDAgYW5kIHAxIGZyb20gaXQuCisoYmVjYXVzZSBwYXIgbm93IGNvbnNpc3RzIG9mIDQgYnl0ZXMsIGNvbnRyaWJ1dGluZyB0byBycDEsIHJwMCwgcnAxLCBycDAKK3Jlc3BlY3RpdmVseSkKK2Fsc28gcnAyIGFuZCBycDMgY2FuIGJlIGVhc2lseSByZXRyaWV2ZWQgZnJvbSBwYXIgYXMgcnAzIGNvdmVycyB0aGUKK2ZpcnN0IHR3byBieXRlcyBhbmQgcnAyIHRoZSBsYXN0IHR3byBieXRlcy4KKworTm90ZSB0aGF0IG9mIGNvdXJzZSBub3cgdGhlIGxvb3AgaXMgZXhlY3V0ZWQgb25seSA2NCB0aW1lcyAoMjU2LzQpLgorQW5kIG5vdGUgdGhhdCBjYXJlIG11c3QgdGFrZW4gd3J0IGJ5dGUgb3JkZXJpbmcuIFRoZSB3YXkgYnl0ZXMgYXJlCitvcmRlcmVkIGluIGEgbG9uZyBpcyBtYWNoaW5lIGRlcGVuZGVudCwgYW5kIG1pZ2h0IGFmZmVjdCB1cy4KK0FueXdheSwgaWYgdGhlcmUgaXMgYW4gaXNzdWU6IHRoaXMgY29kZSBpcyBkZXZlbG9wZWQgb24geDg2ICh0byBiZQorcHJlY2lzZTogYSBERUxMIFBDIHdpdGggYSBEOTIwIEludGVsIENQVSkKKworQW5kIG9mIGNvdXJzZSB0aGUgcGVyZm9ybWFuY2UgbWlnaHQgZGVwZW5kIG9uIGFsaWdubWVudCwgYnV0IEkgZXhwZWN0Cit0aGF0IHRoZSBJL08gYnVmZmVycyBpbiB0aGUgbmFuZCBkcml2ZXIgYXJlIGFsaWduZWQgcHJvcGVybHkgKGFuZAorb3RoZXJ3aXNlIHRoYXQgc2hvdWxkIGJlIGZpeGVkIHRvIGdldCBtYXhpbXVtIHBlcmZvcm1hbmNlKS4KKworTGV0J3MgZ2l2ZSBpdCBhIHRyeS4uLgorCisKK0F0dGVtcHQgMgorPT09PT09PT09CisKK2V4dGVybiBjb25zdCBjaGFyIHBhcml0eVsyNTZdOworCit2b2lkIGVjYzIoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpjb2RlKQoreworICAgIGludCBpOworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJwID0gKHVuc2lnbmVkIGxvbmcgKilidWY7CisgICAgdW5zaWduZWQgbG9uZyBjdXI7CisgICAgdW5zaWduZWQgbG9uZyBycDAsIHJwMSwgcnAyLCBycDMsIHJwNCwgcnA1LCBycDYsIHJwNzsKKyAgICB1bnNpZ25lZCBsb25nIHJwOCwgcnA5LCBycDEwLCBycDExLCBycDEyLCBycDEzLCBycDE0LCBycDE1OworICAgIHVuc2lnbmVkIGxvbmcgcGFyOworCisgICAgcGFyID0gMDsKKyAgICBycDAgPSAwOyBycDEgPSAwOyBycDIgPSAwOyBycDMgPSAwOworICAgIHJwNCA9IDA7IHJwNSA9IDA7IHJwNiA9IDA7IHJwNyA9IDA7CisgICAgcnA4ID0gMDsgcnA5ID0gMDsgcnAxMCA9IDA7IHJwMTEgPSAwOworICAgIHJwMTIgPSAwOyBycDEzID0gMDsgcnAxNCA9IDA7IHJwMTUgPSAwOworCisgICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsKKyAgICAgICAgcGFyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDUgXj0gY3VyOyBlbHNlIHJwNCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMikgcnA3IF49IGN1cjsgZWxzZSBycDYgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDQpIHJwOSBePSBjdXI7IGVsc2UgcnA4IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA4KSBycDExIF49IGN1cjsgZWxzZSBycDEwIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDEwKSBycDEzIF49IGN1cjsgZWxzZSBycDEyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIwKSBycDE1IF49IGN1cjsgZWxzZSBycDE0IF49IGN1cjsKKyAgICB9CisgICAgLyoKKyAgICAgICB3ZSBuZWVkIHRvIGFkYXB0IHRoZSBjb2RlIGdlbmVyYXRpb24gZm9yIHRoZSBmYWN0IHRoYXQgcnAgdmFycyBhcmUgbm93CisgICAgICAgbG9uZzsgYWxzbyB0aGUgY29sdW1uIHBhcml0eSBjYWxjdWxhdGlvbiBuZWVkcyB0byBiZSBjaGFuZ2VkLgorICAgICAgIHdlJ2xsIGJyaW5nIHJwNCB0byAxNSBiYWNrIHRvIHNpbmdsZSBieXRlIGVudGl0aWVzIGJ5IHNoaWZ0aW5nIGFuZAorICAgICAgIHhvcmluZworICAgICovCisgICAgcnA0IF49IChycDQgPj4gMTYpOyBycDQgXj0gKHJwNCA+PiA4KTsgcnA0ICY9IDB4ZmY7CisgICAgcnA1IF49IChycDUgPj4gMTYpOyBycDUgXj0gKHJwNSA+PiA4KTsgcnA1ICY9IDB4ZmY7CisgICAgcnA2IF49IChycDYgPj4gMTYpOyBycDYgXj0gKHJwNiA+PiA4KTsgcnA2ICY9IDB4ZmY7CisgICAgcnA3IF49IChycDcgPj4gMTYpOyBycDcgXj0gKHJwNyA+PiA4KTsgcnA3ICY9IDB4ZmY7CisgICAgcnA4IF49IChycDggPj4gMTYpOyBycDggXj0gKHJwOCA+PiA4KTsgcnA4ICY9IDB4ZmY7CisgICAgcnA5IF49IChycDkgPj4gMTYpOyBycDkgXj0gKHJwOSA+PiA4KTsgcnA5ICY9IDB4ZmY7CisgICAgcnAxMCBePSAocnAxMCA+PiAxNik7IHJwMTAgXj0gKHJwMTAgPj4gOCk7IHJwMTAgJj0gMHhmZjsKKyAgICBycDExIF49IChycDExID4+IDE2KTsgcnAxMSBePSAocnAxMSA+PiA4KTsgcnAxMSAmPSAweGZmOworICAgIHJwMTIgXj0gKHJwMTIgPj4gMTYpOyBycDEyIF49IChycDEyID4+IDgpOyBycDEyICY9IDB4ZmY7CisgICAgcnAxMyBePSAocnAxMyA+PiAxNik7IHJwMTMgXj0gKHJwMTMgPj4gOCk7IHJwMTMgJj0gMHhmZjsKKyAgICBycDE0IF49IChycDE0ID4+IDE2KTsgcnAxNCBePSAocnAxNCA+PiA4KTsgcnAxNCAmPSAweGZmOworICAgIHJwMTUgXj0gKHJwMTUgPj4gMTYpOyBycDE1IF49IChycDE1ID4+IDgpOyBycDE1ICY9IDB4ZmY7CisgICAgcnAzID0gKHBhciA+PiAxNik7IHJwMyBePSAocnAzID4+IDgpOyBycDMgJj0gMHhmZjsKKyAgICBycDIgPSBwYXIgJiAweGZmZmY7IHJwMiBePSAocnAyID4+IDgpOyBycDIgJj0gMHhmZjsKKyAgICBwYXIgXj0gKHBhciA+PiAxNik7CisgICAgcnAxID0gKHBhciA+PiA4KTsgcnAxICY9IDB4ZmY7CisgICAgcnAwID0gKHBhciAmIDB4ZmYpOworICAgIHBhciBePSAocGFyID4+IDgpOyBwYXIgJj0gMHhmZjsKKworICAgIGNvZGVbMF0gPQorICAgICAgICAocGFyaXR5W3JwN10gPDwgNykgfAorICAgICAgICAocGFyaXR5W3JwNl0gPDwgNikgfAorICAgICAgICAocGFyaXR5W3JwNV0gPDwgNSkgfAorICAgICAgICAocGFyaXR5W3JwNF0gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3JwM10gPDwgMykgfAorICAgICAgICAocGFyaXR5W3JwMl0gPDwgMikgfAorICAgICAgICAocGFyaXR5W3JwMV0gPDwgMSkgfAorICAgICAgICAocGFyaXR5W3JwMF0pOworICAgIGNvZGVbMV0gPQorICAgICAgICAocGFyaXR5W3JwMTVdIDw8IDcpIHwKKyAgICAgICAgKHBhcml0eVtycDE0XSA8PCA2KSB8CisgICAgICAgIChwYXJpdHlbcnAxM10gPDwgNSkgfAorICAgICAgICAocGFyaXR5W3JwMTJdIDw8IDQpIHwKKyAgICAgICAgKHBhcml0eVtycDExXSA8PCAzKSB8CisgICAgICAgIChwYXJpdHlbcnAxMF0gPDwgMikgfAorICAgICAgICAocGFyaXR5W3JwOV0gIDw8IDEpIHwKKyAgICAgICAgKHBhcml0eVtycDhdKTsKKyAgICBjb2RlWzJdID0KKyAgICAgICAgKHBhcml0eVtwYXIgJiAweGYwXSA8PCA3KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHgwZl0gPDwgNikgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4Y2NdIDw8IDUpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweDMzXSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhhYV0gPDwgMykgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4NTVdIDw8IDIpOworICAgIGNvZGVbMF0gPSB+Y29kZVswXTsKKyAgICBjb2RlWzFdID0gfmNvZGVbMV07CisgICAgY29kZVsyXSA9IH5jb2RlWzJdOworfQorCitUaGUgcGFyaXR5IGFycmF5IGlzIG5vdCBzaG93biBhbnkgbW9yZS4gTm90ZSBhbHNvIHRoYXQgZm9yIHRoZXNlCitleGFtcGxlcyBJIGtpbmRhIGRldmlhdGVkIGZyb20gbXkgcmVndWxhciBwcm9ncmFtbWluZyBzdHlsZSBieSBhbGxvd2luZworbXVsdGlwbGUgc3RhdGVtZW50cyBvbiBhIGxpbmUsIG5vdCB1c2luZyB7IH0gaW4gdGhlbiBhbmQgZWxzZSBibG9ja3MKK3dpdGggb25seSBhIHNpbmdsZSBzdGF0ZW1lbnQgYW5kIGJ5IHVzaW5nIG9wZXJhdG9ycyBsaWtlIF49CisKKworQW5hbHlzaXMgMgorPT09PT09PT09PQorCitUaGUgY29kZSAob2YgY291cnNlKSB3b3JrcywgYW5kIGh1cnJheTogd2UgYXJlIGEgbGl0dGxlIGJpdCBmYXN0ZXIgdGhhbgordGhlIGxpbnV4IGRyaXZlciBjb2RlIChhYm91dCAxNSUpLiBCdXQgd2FpdCwgZG9uJ3QgY2hlZXIgdG9vIHF1aWNrbHkuCitUSGVyZSBpcyBtb3JlIHRvIGJlIGdhaW5lZC4KK0lmIHdlIGxvb2sgYXQgZS5nLiBycDE0IGFuZCBycDE1IHdlIHNlZSB0aGF0IHdlIGVpdGhlciB4b3Igb3VyIGRhdGEgd2l0aAorcnAxNCBvciB3aXRoIHJwMTUuIEhvd2V2ZXIgd2UgYWxzbyBoYXZlIHBhciB3aGljaCBnb2VzIG92ZXIgYWxsIGRhdGEuCitUaGlzIG1lYW5zIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsY3VsYXRlIHJwMTQgYXMgaXQgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbQorcnAxNSB0aHJvdWdoIHJwMTQgPSBwYXIgXiBycDE1OworKG9yIGlmIGRlc2lyZWQgd2UgY2FuIGF2b2lkIGNhbGN1bGF0aW5nIHJwMTUgYW5kIGNhbGN1bGF0ZSBpdCBmcm9tCitycDE0KS4gIFRoYXQgaXMgd2h5IHNvbWUgcGxhY2VzIHJlZmVyIHRvIGludmVyc2UgcGFyaXR5LgorT2YgY291cnNlIHRoZSBzYW1lIHRoaW5nIGhvbGRzIGZvciBycDQvNSwgcnA2LzcsIHJwOC85LCBycDEwLzExIGFuZCBycDEyLzEzLgorRWZmZWN0aXZlbHkgdGhpcyBtZWFucyB3ZSBjYW4gZWxpbWluYXRlIHRoZSBlbHNlIGNsYXVzZSBmcm9tIHRoZSBpZgorc3RhdGVtZW50cy4gQWxzbyB3ZSBjYW4gb3B0aW1pc2UgdGhlIGNhbGN1bGF0aW9uIGluIHRoZSBlbmQgYSBsaXR0bGUgYml0CitieSBnb2luZyBmcm9tIGxvbmcgdG8gYnl0ZSBmaXJzdC4gQWN0dWFsbHkgd2UgY2FuIGV2ZW4gYXZvaWQgdGhlIHRhYmxlCitsb29rdXBzCisKK0F0dGVtcHQgMworPT09PT09PT09CisKK09kZCByZXBsYWNlZDoKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDUgXj0gY3VyOyBlbHNlIHJwNCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMikgcnA3IF49IGN1cjsgZWxzZSBycDYgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDQpIHJwOSBePSBjdXI7IGVsc2UgcnA4IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA4KSBycDExIF49IGN1cjsgZWxzZSBycDEwIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDEwKSBycDEzIF49IGN1cjsgZWxzZSBycDEyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIwKSBycDE1IF49IGN1cjsgZWxzZSBycDE0IF49IGN1cjsKK3dpdGgKKyAgICAgICAgaWYgKGkgJiAweDAxKSBycDUgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDIpIHJwNyBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwNCkgcnA5IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA4KSBycDExIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDEwKSBycDEzIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIwKSBycDE1IF49IGN1cjsKKworICAgICAgICBhbmQgb3V0c2lkZSB0aGUgbG9vcCBhZGRlZDoKKyAgICBycDQgID0gcGFyIF4gcnA1OworICAgIHJwNiAgPSBwYXIgXiBycDc7CisgICAgcnA4ICA9IHBhciBeIHJwOTsKKyAgICBycDEwICA9IHBhciBeIHJwMTE7CisgICAgcnAxMiAgPSBwYXIgXiBycDEzOworICAgIHJwMTQgID0gcGFyIF4gcnAxNTsKKworQW5kIGFmdGVyIHRoYXQgdGhlIGNvZGUgdGFrZXMgYWJvdXQgMzAlIG1vcmUgdGltZSwgYWx0aG91Z2ggdGhlIG51bWJlciBvZgorc3RhdGVtZW50cyBpcyByZWR1Y2VkLiBUaGlzIGlzIGFsc28gcmVmbGVjdGVkIGluIHRoZSBhc3NlbWJseSBjb2RlLgorCisKK0FuYWx5c2lzIDMKKz09PT09PT09PT0KKworVmVyeSB3ZWlyZC4gR3Vlc3MgaXQgaGFzIHRvIGRvIHdpdGggY2FjaGluZyBvciBpbnN0cnVjdGlvbiBwYXJhbGxlbGxpc20KK29yIHNvLiBJIGFsc28gdHJpZWQgb24gYW4gZWVlUEMgKENlbGVyb24sIGNsb2NrZWQgYXQgOTAwIE1oeikuIEludGVyZXN0aW5nCitvYnNlcnZhdGlvbiB3YXMgdGhhdCB0aGlzIG9uZSBpcyBvbmx5IDMwJSBzbG93ZXIgKGFjY29yZGluZyB0byB0aW1lKQorZXhlY3V0aW5nIHRoZSBjb2RlIGFzIG15IDNHaHogRDkyMCBwcm9jZXNzb3IuCisKK1dlbGwsIGl0IHdhcyBleHBlY3RlZCBub3QgdG8gYmUgZWFzeSBzbyBtYXliZSBpbnN0ZWFkIG1vdmUgdG8gYQorZGlmZmVyZW50IHRyYWNrOiBsZXQncyBtb3ZlIGJhY2sgdG8gdGhlIGNvZGUgZnJvbSBhdHRlbXB0MiBhbmQgZG8gc29tZQorbG9vcCB1bnJvbGxpbmcuIFRoaXMgd2lsbCBlbGltaW5hdGUgYSBmZXcgaWYgc3RhdGVtZW50cy4gSSdsbCB0cnkKK2RpZmZlcmVudCBhbW91bnRzIG9mIHVucm9sbGluZyB0byBzZWUgd2hhdCB3b3JrcyBiZXN0LgorCisKK0F0dGVtcHQgNAorPT09PT09PT09CisKK1Vucm9sbGVkIHRoZSBsb29wIDEsIDIsIDMgYW5kIDQgdGltZXMuCitGb3IgNCB0aGUgY29kZSBzdGFydHMgd2l0aDoKKworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsKKyAgICAgICAgcGFyIF49IGN1cjsKKyAgICAgICAgcnA0IF49IGN1cjsKKyAgICAgICAgcnA2IF49IGN1cjsKKyAgICAgICAgcnA4IF49IGN1cjsKKyAgICAgICAgcnAxMCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgxKSBycDEzIF49IGN1cjsgZWxzZSBycDEyIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDIpIHJwMTUgXj0gY3VyOyBlbHNlIHJwMTQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsKKyAgICAgICAgcGFyIF49IGN1cjsKKyAgICAgICAgcnA1IF49IGN1cjsKKyAgICAgICAgcnA2IF49IGN1cjsKKyAgICAgICAgLi4uCisKKworQW5hbHlzaXMgNAorPT09PT09PT09PQorCitVbnJvbGxpbmcgb25jZSBnYWlucyBhYm91dCAxNSUKK1Vucm9sbGluZyB0d2ljZSBrZWVwcyB0aGUgZ2FpbiBhdCBhYm91dCAxNSUKK1Vucm9sbGluZyB0aHJlZSB0aW1lcyBnaXZlcyBhIGdhaW4gb2YgMzAlIGNvbXBhcmVkIHRvIGF0dGVtcHQgMi4KK1Vucm9sbGluZyBmb3VyIHRpbWVzIGdpdmVzIGEgbWFyZ2luYWwgaW1wcm92ZW1lbnQgY29tcGFyZWQgdG8gdW5yb2xsaW5nCit0aHJlZSB0aW1lcy4KKworSSBkZWNpZGVkIHRvIHByb2NlZWQgd2l0aCBhIGZvdXIgdGltZSB1bnJvbGxlZCBsb29wIGFueXdheS4gSXQgd2FzIG15IGd1dAorZmVlbGluZyB0aGF0IGluIHRoZSBuZXh0IHN0ZXBzIEkgd291bGQgb2J0YWluIGFkZGl0aW9uYWwgZ2FpbiBmcm9tIGl0LgorCitUaGUgbmV4dCBzdGVwIHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGZhY3QgdGhhdCBwYXIgY29udGFpbnMgdGhlIHhvciBvZiBhbGwKK2J5dGVzIGFuZCBycDQgYW5kIHJwNSBlYWNoIGNvbnRhaW4gdGhlIHhvciBvZiBoYWxmIG9mIHRoZSBieXRlcy4KK1NvIGluIGVmZmVjdCBwYXIgPSBycDQgXiBycDUuIEJ1dCBhcyB4b3IgaXMgY29tbXV0YXRpdmUgd2UgY2FuIGFsc28gc2F5Cit0aGF0IHJwNSA9IHBhciBeIHJwNC4gU28gbm8gbmVlZCB0byBrZWVwIGJvdGggcnA0IGFuZCBycDUgYXJvdW5kLiBXZSBjYW4KK2VsaW1pbmF0ZSBycDUgKG9yIHJwNCwgYnV0IEkgYWxyZWFkeSBmb3Jlc2F3IGFub3RoZXIgb3B0aW1pc2F0aW9uKS4KK1RoZSBzYW1lIGhvbGRzIGZvciBycDYvNywgcnA4LzksIHJwMTAvMTEgcnAxMi8xMyBhbmQgcnAxNC8xNS4KKworCitBdHRlbXB0IDUKKz09PT09PT09PQorCitFZmZlY3RpdmVseSBzbyBhbGwgb2RkIGRpZ2l0IHJwIGFzc2lnbm1lbnRzIGluIHRoZSBsb29wIHdlcmUgcmVtb3ZlZC4KK1RoaXMgaW5jbHVkZWQgdGhlIGVsc2UgY2xhdXNlIG9mIHRoZSBpZiBzdGF0ZW1lbnRzLgorT2YgY291cnNlIGFmdGVyIHRoZSBsb29wIHdlIG5lZWQgdG8gY29ycmVjdCB0aGluZ3MgYnkgYWRkaW5nIGNvZGUgbGlrZToKKyAgICBycDUgPSBwYXIgXiBycDQ7CitBbHNvIHRoZSBpbml0aWFsIGFzc2lnbm1lbnRzIChycDUgPSAwOyBldGMpIGNvdWxkIGJlIHJlbW92ZWQuCitBbG9uZyB0aGUgbGluZSBJIGFsc28gcmVtb3ZlZCB0aGUgaW5pdGlhbGlzYXRpb24gb2YgcnAwLzEvMi8zLgorCisKK0FuYWx5c2lzIDUKKz09PT09PT09PT0KKworTWVhc3VyZW1lbnRzIHNob3dlZCB0aGlzIHdhcyBhIGdvb2QgbW92ZS4gVGhlIHJ1bi10aW1lIHJvdWdobHkgaGFsdmVkCitjb21wYXJlZCB3aXRoIGF0dGVtcHQgNCB3aXRoIDQgdGltZXMgdW5yb2xsZWQsIGFuZCB3ZSBvbmx5IHJlcXVpcmUgMS8zcmQKK29mIHRoZSBwcm9jZXNzb3IgdGltZSBjb21wYXJlZCB0byB0aGUgY3VycmVudCBjb2RlIGluIHRoZSBsaW51eCBrZXJuZWwuCisKK0hvd2V2ZXIsIHN0aWxsIEkgdGhvdWdodCB0aGVyZSB3YXMgbW9yZS4gSSBkaWRuJ3QgbGlrZSBhbGwgdGhlIGlmCitzdGF0ZW1lbnRzLiBXaHkgbm90IGtlZXAgYSBydW5uaW5nIHBhcml0eSBhbmQgb25seSBrZWVwIHRoZSBsYXN0IGlmCitzdGF0ZW1lbnQuIFRpbWUgZm9yIHlldCBhbm90aGVyIHZlcnNpb24hCisKKworQXR0ZW1wdCA2Cis9PT09PT09PT0KKworVEhlIGNvZGUgd2l0aGluIHRoZSBmb3IgbG9vcCB3YXMgY2hhbmdlZCB0bzoKKworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgeworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyICA9IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSB0bXBwYXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA4IF49IHRtcHBhcjsKKworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsgcnA2IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSBjdXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnAxMCBePSB0bXBwYXI7CisKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7IHJwNiBePSBjdXI7IHJwOCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gY3VyOyBycDggXj0gY3VyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsgcnA4IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwOCBePSBjdXI7CisKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7IHJwNiBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7CisKKwkgICAgcGFyIF49IHRtcHBhcjsKKyAgICAgICAgaWYgKChpICYgMHgxKSA9PSAwKSBycDEyIF49IHRtcHBhcjsKKyAgICAgICAgaWYgKChpICYgMHgyKSA9PSAwKSBycDE0IF49IHRtcHBhcjsKKyAgICB9CisKK0FzIHlvdSBjYW4gc2VlIHRtcHBhciBpcyB1c2VkIHRvIGFjY3VtdWxhdGUgdGhlIHBhcml0eSB3aXRoaW4gYSBmb3IKK2l0ZXJhdGlvbi4gSW4gdGhlIGxhc3QgMyBzdGF0ZW1lbnRzIGlzIGlzIGFkZGVkIHRvIHBhciBhbmQsIGlmIG5lZWRlZCwKK3RvIHJwMTIgYW5kIHJwMTQuCisKK1doaWxlIG1ha2luZyB0aGUgY2hhbmdlcyBJIGFsc28gZm91bmQgdGhhdCBJIGNvdWxkIGV4cGxvaXQgdGhhdCB0bXBwYXIKK2NvbnRhaW5zIHRoZSBydW5uaW5nIHBhcml0eSBmb3IgdGhpcyBpdGVyYXRpb24uIFNvIGluc3RlYWQgb2YgaGF2aW5nOgorcnA0IF49IGN1cjsgcnA2ID0gY3VyOworSSByZW1vdmVkIHRoZSBycDYgPSBjdXI7IHN0YXRlbWVudCBhbmQgZGlkIHJwNiBePSB0bXBwYXI7IG9uIG5leHQKK3N0YXRlbWVudC4gQSBzaW1pbGFyIGNoYW5nZSB3YXMgZG9uZSBmb3IgcnA4IGFuZCBycDEwCisKKworQW5hbHlzaXMgNgorPT09PT09PT09PQorCitNZWFzdXJpbmcgdGhpcyBjb2RlIGFnYWluIHNob3dlZCBiaWcgZ2Fpbi4gV2hlbiBleGVjdXRpbmcgdGhlIG9yaWdpbmFsCitsaW51eCBjb2RlIDEgbWlsbGlvbiB0aW1lcywgdGhpcyB0b29rIGFib3V0IDEgc2Vjb25kIG9uIG15IHN5c3RlbS4KKyh1c2luZyB0aW1lIHRvIG1lYXN1cmUgdGhlIHBlcmZvcm1hbmNlKS4gQWZ0ZXIgdGhpcyBpdGVyYXRpb24gSSB3YXMgYmFjawordG8gMC4wNzUgc2VjLiBBY3R1YWxseSBJIGhhZCB0byBkZWNpZGUgdG8gc3RhcnQgbWVhc3VyaW5nIG92ZXIgMTAKK21pbGxpb24gaW50ZXJhdGlvbnMgaW4gb3JkZXIgbm90IHRvIGxvb3NlIHRvbyBtdWNoIGFjY3VyYWN5LiBUaGlzIG9uZQorZGVmaW5pdGVseSBzZWVtZWQgdG8gYmUgdGhlIGphY2twb3QhCisKK1RoZXJlIGlzIGEgbGl0dGxlIGJpdCBtb3JlIHJvb20gZm9yIGltcHJvdmVtZW50IHRob3VnaC4gVGhlcmUgYXJlIHRocmVlCitwbGFjZXMgd2l0aCBzdGF0ZW1lbnRzOgorcnA0IF49IGN1cjsgcnA2IF49IGN1cjsKK0l0IHNlZW1zIG1vcmUgZWZmaWNpZW50IHRvIGFsc28gbWFpbnRhaW4gYSB2YXJpYWJsZSBycDRfNiBpbiB0aGUgd2hpbGUKK2xvb3A7IFRoaXMgZWxpbWluYXRlcyAzIHN0YXRlbWVudHMgcGVyIGxvb3AuIE9mIGNvdXJzZSBhZnRlciB0aGUgbG9vcCB3ZQorbmVlZCB0byBjb3JyZWN0IGJ5IGFkZGluZzoKKyAgICBycDQgXj0gcnA0XzY7CisgICAgcnA2IF49IHJwNF82CitGdXJ0aGVybW9yZSB0aGVyZSBhcmUgNCBzZXF1ZW50aWFsIGFzc2luZ21lbnRzIHRvIHJwOC4gVGhpcyBjYW4gYmUKK2VuY29kZWQgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgYnkgc2F2aW5nIHRtcHBhciBiZWZvcmUgdGhvc2UgNCBsaW5lcworYW5kIGxhdGVyIGRvIHJwOCA9IHJwOCBeIHRtcHBhciBeIG5vdHJwODsKKyh3aGVyZSBub3RycDggaXMgdGhlIHZhbHVlIG9mIHJwOCBiZWZvcmUgdGhvc2UgNCBsaW5lcykuCitBZ2FpbiBhIHVzZSBvZiB0aGUgY29tbXV0YXRpdmUgcHJvcGVydHkgb2YgeG9yLgorVGltZSBmb3IgYSBuZXcgdGVzdCEKKworCitBdHRlbXB0IDcKKz09PT09PT09PQorCitUaGUgbmV3IGNvZGUgbm93IGxvb2tzIGxpa2U6CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAgIHsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciAgPSBjdXI7IHJwNCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gdG1wcGFyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwOCBePSB0bXBwYXI7CisKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNF82IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSBjdXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnAxMCBePSB0bXBwYXI7CisKKwkgICAgbm90cnA4ID0gdG1wcGFyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0XzYgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOworCSAgICBycDggPSBycDggXiB0bXBwYXIgXiBub3RycDg7CisKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNF82IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsKKworCSAgICBwYXIgXj0gdG1wcGFyOworICAgICAgICBpZiAoKGkgJiAweDEpID09IDApIHJwMTIgXj0gdG1wcGFyOworICAgICAgICBpZiAoKGkgJiAweDIpID09IDApIHJwMTQgXj0gdG1wcGFyOworICAgIH0KKyAgICBycDQgXj0gcnA0XzY7CisgICAgcnA2IF49IHJwNF82OworCisKK05vdCBhIGJpZyBjaGFuZ2UsIGJ1dCBldmVyeSBwZW5ueSBjb3VudHMgOi0pCisKKworQW5hbHlzaXMgNworPT09PT09PT09PQorCitBY3V0YWxseSB0aGlzIG1hZGUgdGhpbmdzIHdvcnNlLiBOb3QgdmVyeSBtdWNoLCBidXQgSSBkb24ndCB3YW50IHRvIG1vdmUKK2ludG8gdGhlIHdyb25nIGRpcmVjdGlvbi4gTWF5YmUgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGxhdGVyLiBDb3VsZAoraGF2ZSB0byBkbyB3aXRoIGNhY2hpbmcgYWdhaW4uCisKK0d1ZXNzIHRoYXQgaXMgd2hhdCB0aGVyZSBpcyB0byB3aW4gd2l0aGluIHRoZSBsb29wLiBNYXliZSB1bnJvbGxpbmcgb25lCittb3JlIHRpbWUgd2lsbCBoZWxwLiBJJ2xsIGtlZXAgdGhlIG9wdGltaXNhdGlvbnMgZnJvbSA3IGZvciBub3cuCisKKworQXR0ZW1wdCA4Cis9PT09PT09PT0KKworVW5yb2xsZWQgdGhlIGxvb3Agb25lIG1vcmUgdGltZS4KKworCitBbmFseXNpcyA4Cis9PT09PT09PT09CisKK1RoaXMgbWFrZXMgdGhpbmdzIHdvcnNlLiBMZXQncyBzdGljayB3aXRoIGF0dGVtcHQgNiBhbmQgY29udGludWUgZnJvbSB0aGVyZS4KK0FsdGhvdWdoIGl0IHNlZW1zIHRoYXQgdGhlIGNvZGUgd2l0aGluIHRoZSBsb29wIGNhbm5vdCBiZSBvcHRpbWlzZWQKK2Z1cnRoZXIgdGhlcmUgaXMgc3RpbGwgcm9vbSB0byBvcHRpbWl6ZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgZWNjIGNvZGVzLgorV2UgY2FuIHNpbXBseSBjYWxjdWFsYXRlIHRoZSB0b3RhbCBwYXJpdHkuIElmIHRoaXMgaXMgMCB0aGVuIHJwNCA9IHJwNQorZXRjLiBJZiB0aGUgcGFyaXR5IGlzIDEsIHRoZW4gcnA0ID0gIXJwNTsKK0J1dCBpZiBycDQgPSBycDUgd2UgZG8gbm90IG5lZWQgcnA1IGV0Yy4gV2UgY2FuIGp1c3Qgd3JpdGUgdGhlIGV2ZW4gYml0cworaW4gdGhlIHJlc3VsdCBieXRlIGFuZCB0aGVuIGRvIHNvbWV0aGluZyBsaWtlCisgICAgY29kZVswXSB8PSAoY29kZVswXSA8PCAxKTsKK0xldHMgdGVzdCB0aGlzLgorCisKK0F0dGVtcHQgOQorPT09PT09PT09CisKK0NoYW5nZWQgdGhlIGNvZGUgYnV0IGFnYWluIHRoaXMgc2xpZ2h0bHkgZGVncmFkZXMgcGVyZm9ybWFuY2UuIFRyaWVkIGFsbAora2luZCBvZiBvdGhlciB0aGluZ3MsIGxpa2UgaGF2aW5nIGRlZGljYXRlZCBwYXJpdHkgYXJyYXlzIHRvIGF2b2lkIHRoZQorc2hpZnQgYWZ0ZXIgcGFyaXR5W3JwN10gPDwgNzsgTm8gZ2Fpbi4KK0NoYW5nZSB0aGUgbG9va3VwIHVzaW5nIHRoZSBwYXJpdHkgYXJyYXkgYnkgdXNpbmcgc2hpZnQgb3BlcmF0b3JzIChlLmcuCityZXBsYWNlIHBhcml0eVtycDddIDw8IDcgd2l0aDoKK3JwNyBePSAocnA3IDw8IDQpOworcnA3IF49IChycDcgPDwgMik7CitycDcgXj0gKHJwNyA8PCAxKTsKK3JwNyAmPSAweDgwOworTm8gZ2Fpbi4KKworVGhlIG9ubHkgbWFyZ2luYWwgY2hhbmdlIHdhcyBpbnZlcnRpbmcgdGhlIHBhcml0eSBiaXRzLCBzbyB3ZSBjYW4gcmVtb3ZlCit0aGUgbGFzdCB0aHJlZSBpbnZlcnQgc3RhdGVtZW50cy4KKworQWggd2VsbCwgcGl0eSB0aGlzIGRvZXMgbm90IGRlbGl2ZXIgbW9yZS4gVGhlbiBhZ2FpbiAxMCBtaWxsaW9uCitpdGVyYXRpb25zIHVzaW5nIHRoZSBsaW51eCBkcml2ZXIgY29kZSB0YWtlcyBiZXR3ZWVuIDEzIGFuZCAxMy41CitzZWNvbmRzLCB3aGVyZWFzIG15IGNvZGUgbm93IHRha2VzIGFib3V0IDAuNzMgc2Vjb25kcyBmb3IgdGhvc2UgMTAKK21pbGxpb24gaXRlcmF0aW9ucy4gU28gYmFzaWNhbGx5IEkndmUgaW1wcm92ZWQgdGhlIHBlcmZvcm1hbmNlIGJ5IGEKK2ZhY3RvciAxOCBvbiBteSBzeXN0ZW0uIE5vdCB0aGF0IGJhZC4gT2YgY291cnNlIG9uIGRpZmZlcmVudCBoYXJkd2FyZQoreW91IHdpbGwgZ2V0IGRpZmZlcmVudCByZXN1bHRzLiBObyB3YXJyYW50aWVzIQorCitCdXQgb2YgY291cnNlIHRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgYSBmcmVlIGx1bmNoLiBUaGUgY29kZXNpemUgYWxtb3N0Cit0cmlwbGVkIChmcm9tIDU2MiBieXRlcyB0byAxNDM0IGJ5dGVzKS4gVGhlbiBhZ2FpbiwgaXQgaXMgbm90IHRoYXQgbXVjaC4KKworCitDb3JyZWN0aW5nIGVycm9ycworPT09PT09PT09PT09PT09PT0KKworRm9yIGNvcnJlY3RpbmcgZXJyb3JzIEkgYWdhaW4gdXNlZCB0aGUgU1QgYXBwbGljYXRpb24gbm90ZSBhcyBhIHN0YXJ0ZXIsCitidXQgSSBhbHNvIHBlZWtlZCBhdCB0aGUgZXhpc3RpbmcgY29kZS4KK1RoZSBhbGdvcml0aG0gaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEp1c3QgeG9yIHRoZSBnaXZlbiBhbmQKK3RoZSBjYWxjdWxhdGVkIGVjYy4gSWYgYWxsIGJ5dGVzIGFyZSAwIHRoZXJlIGlzIG5vIHByb2JsZW0uIElmIDExIGJpdHMKK2FyZSAxIHdlIGhhdmUgb25lIGNvcnJlY3RhYmxlIGJpdCBlcnJvci4gSWYgdGhlcmUgaXMgMSBiaXQgMSwgd2UgaGF2ZSBhbgorZXJyb3IgaW4gdGhlIGdpdmVuIGVjYyBjb2RlLgorSXQgcHJvdmVkIHRvIGJlIGZhc3Rlc3QgdG8gZG8gc29tZSB0YWJsZSBsb29rdXBzLiBQZXJmb3JtYW5jZSBnYWluCitpbnRyb2R1Y2VkIGJ5IHRoaXMgaXMgYWJvdXQgYSBmYWN0b3IgMiBvbiBteSBzeXN0ZW0gd2hlbiBhIHJlcGFpciBoYWQgdG8KK2JlIGRvbmUsIGFuZCAxJSBvciBzbyBpZiBubyByZXBhaXIgaGFkIHRvIGJlIGRvbmUuCitDb2RlIHNpemUgaW5jcmVhc2VkIGZyb20gMzMwIGJ5dGVzIHRvIDY4NiBieXRlcyBmb3IgdGhpcyBmdW5jdGlvbi4KKyhnY2MgNC4yLCAtTzMpCisKKworQ29uY2x1c2lvbgorPT09PT09PT09PQorCitUaGUgZ2FpbiB3aGVuIGNhbGN1bGF0aW5nIHRoZSBlY2MgaXMgdHJlbWVuZG91cy4gT20gbXkgZGV2ZWxvcG1lbnQgaGFyZHdhcmUKK2Egc3BlZWR1cCBvZiBhIGZhY3RvciBvZiAxOCBmb3IgZWNjIGNhbGN1bGF0aW9uIHdhcyBhY2hpZXZlZC4gT24gYSB0ZXN0IG9uIGFuCitlbWJlZGRlZCBzeXN0ZW0gd2l0aCBhIE1JUFMgY29yZSBhIGZhY3RvciA3IHdhcyBvYnRhaW5lZC4KK09uICBhIHRlc3Qgd2l0aCBhIExpbmtzeXMgTlNMVTIgKEFSTXY1VEUgcHJvY2Vzc29yKSB0aGUgc3BlZWR1cCB3YXMgYSBmYWN0b3IKKzUgKGJpZyBlbmRpYW4gbW9kZSwgZ2NjIDQuMS4yLCAtTzMpCitGb3IgY29ycmVjdGlvbiBub3QgbXVjaCBnYWluIGNvdWxkIGJlIG9idGFpbmVkIChhcyBiaXRmbGlwcyBhcmUgcmFyZSkuIFRoZW4KK2FnYWluIHRoZXJlIGFyZSBhbHNvIG11Y2ggbGVzcyBjeWNsZXMgc3BlbnQgdGhlcmUuCisKK0l0IHNlZW1zIHRoZXJlIGlzIG5vdCBtdWNoIG1vcmUgZ2FpbiBwb3NzaWJsZSBpbiB0aGlzLCBhdCBsZWFzdCB3aGVuCitwcm9ncmFtbWVkIGluIEMuIE9mIGNvdXJzZSBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBzcXVlZXplIHNvbWV0aGluZyBtb3JlCitvdXQgb2YgaXQgd2l0aCBhbiBhc3NlbWJsZXIgcHJvZ3JhbSwgYnV0IGR1ZSB0byBwaXBlbGluZSBiZWhhdmlvdXIgZXRjCit0aGlzIGlzIHZlcnkgdHJpY2t5IChhdCBsZWFzdCBmb3IgaW50ZWwgaHcpLgorCitBdXRob3I6IEZyYW5zIE1ldWxlbmJyb2VrcworQ29weXJpZ2h0IChDKSAyMDA4IEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTlYuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY3M4OXgwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jczg5eDAudHh0CmluZGV4IDYzODdkM2QuLmM3MjVkMzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jczg5eDAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jczg5eDAudHh0CkBAIC0zLDcgKzMsNyBAQAogLS0tLQogCiBUaGlzIGRvY3VtZW50IHdhcyBjb250cmlidXRlZCBieSBDaXJydXMgTG9naWMgZm9yIGtlcm5lbCAyLjIuNS4gIFRoaXMgdmVyc2lvbgotaGFzIGJlZW4gdXBkYXRlZCBmb3IgMi4zLjQ4IGJ5IEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4KK2hhcyBiZWVuIHVwZGF0ZWQgZm9yIDIuMy40OCBieSBBbmRyZXcgTW9ydG9uLgogCiBDaXJydXMgbWFrZSBhIGNvcHkgb2YgdGhpcyBkcml2ZXIgYXZhaWxhYmxlIGF0IHRoZWlyIHdlYnNpdGUsIGFzCiBkZXNjcmliZWQgYmVsb3cuICBJbiBnZW5lcmFsLCB5b3Ugc2hvdWxkIHVzZSB0aGUgZHJpdmVyIHZlcnNpb24gd2hpY2gKQEAgLTY5MCw3ICs2OTAsNyBAQAogNi40IEN1cnJlbnQgbWFpbnRhaW5lcgogCiBJbiBGZWJydWFyeSAyMDAwIHRoZSBtYWludGVuYW5jZSBvZiB0aGlzIGRyaXZlciB3YXMgYXNzdW1lZCBieSBBbmRyZXcKLU1vcnRvbiA8YWtwbUB6aXAuY29tLmF1PgorTW9ydG9uLgogCiA2LjUgS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXJzCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waG9uZXQudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Bob25ldC50eHQKaW5kZXggMGU2ZTU5Mi4uNmEwN2U0NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Bob25ldC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Bob25ldC50eHQKQEAgLTE0Niw4ICsxNDYsOCBAQAogV2hlbiBwb2xsaW5nIGEgY29ubmVjdGVkIHBpcGUgc29ja2V0IGZvciB3cml0YWJpbGl0eSwgdGhlcmUgaXMgYW4KIGludHJpbnNpYyByYWNlIGNvbmRpdGlvbiB3aGVyZWJ5IHdyaXRhYmlsaXR5IG1pZ2h0IGJlIGxvc3QgYmV0d2VlbiB0aGUKIHBvbGxpbmcgYW5kIHRoZSB3cml0aW5nIHN5c3RlbSBjYWxscy4gSW4gdGhpcyBjYXNlLCB0aGUgc29ja2V0IHdpbGwKLWJsb2NrIHVudGlsIHdyaXRlIGJlY2F1c2UgcG9zc2libGUgYWdhaW4sIHVubGVzcyBub24tYmxvY2tpbmcgbW9kZQotYmVjb21lcyBlbmFibGVkLgorYmxvY2sgdW50aWwgd3JpdGUgYmVjb21lcyBwb3NzaWJsZSBhZ2FpbiwgdW5sZXNzIG5vbi1ibG9ja2luZyBtb2RlCitpcyBlbmFibGVkLgogCiAKIFRoZSBwaXBlIHByb3RvY29sIHByb3ZpZGVzIHR3byBzb2NrZXQgb3B0aW9ucyBhdCB0aGUgU09MX1BOUElQRSBsZXZlbDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92b3J0ZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3ZvcnRleC50eHQKaW5kZXggNjM1NmQzZi4uYmQ3MDk3NmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92b3J0ZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92b3J0ZXgudHh0CkBAIC0xLDUgKzEsNSBAQAogRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3ZvcnRleC50eHQKLUFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4KK0FuZHJldyBNb3J0b24KIDMwIEFwcmlsIDIwMDAKIAogCkBAIC0xMSw3ICsxMSw3IEBACiBEb24gaXMgbm8gbG9uZ2VyIHRoZSBwcmltZSBtYWludGFpbmVyIG9mIHRoaXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLiAKIFBsZWFzZSByZXBvcnQgcHJvYmxlbXMgdG8gb25lIG9yIG1vcmUgb2Y6CiAKLSAgQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4KKyAgQW5kcmV3IE1vcnRvbgogICBOZXRkZXYgbWFpbGluZyBsaXN0IDxuZXRkZXZAdmdlci5rZXJuZWwub3JnPgogICBMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgogCkBAIC0zMDUsMTEgKzMwNSw2IEBACiAKIAlmdHA6Ly9mdHAuM2NvbS5jb20vcHViL25pYy8zYzkweC8zYzkweHgyLmV4ZQogCi1Ecml2ZXIgdXBkYXRlcyBhbmQgYSBkZXRhaWxlZCBjaGFuZ2Vsb2cgZm9yIHRoZSBtb2RpZmljYXRpb25zIHdoaWNoCi13ZXJlIG1hZGUgZm9yIHRoZSAyLjMvMiw0IHNlcmllcyBrZXJuZWwgaXMgYXZhaWxhYmxlIGF0Ci0KLSAgICAgaHR0cDovL3d3dy56aXAuY29tLmF1L35ha3BtL2xpbnV4LyMzYzU5eC1iYwotCiAKIEF1dG9uZWdvdGlhdGlvbiBub3RlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BjbWNpYS9kcml2ZXItY2hhbmdlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3BjbWNpYS9kcml2ZXItY2hhbmdlcy50eHQKaW5kZXggOTZmMTU1ZS4uMDU5OTM0MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wY21jaWEvZHJpdmVyLWNoYW5nZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcGNtY2lhL2RyaXZlci1jaGFuZ2VzLnR4dApAQCAtMSw1ICsxLDExIEBACiBUaGlzIGZpbGUgZGV0YWlscyBjaGFuZ2VzIGluIDIuNiB3aGljaCBhZmZlY3QgUENNQ0lBIGNhcmQgZHJpdmVyIGF1dGhvcnM6CiAKKyogTmV3IGNvbmZpZ3VyYXRpb24gbG9vcCBoZWxwZXIgKGFzIG9mIDIuNi4yOCkKKyAgIEJ5IGNhbGxpbmcgcGNtY2lhX2xvb3BfY29uZmlnKCksIGEgZHJpdmVyIGNhbiBpdGVyYXRlIG92ZXIgYWxsIGF2YWlsYWJsZQorICAgY29uZmlndXJhdGlvbiBvcHRpb25zLiBEdXJpbmcgYSBkcml2ZXIncyBwcm9iZSgpIHBoYXNlLCBvbmUgZG9lc24ndCBuZWVkCisgICB0byB1c2UgcGNtY2lhX2dldF97Zmlyc3QsbmV4dH1fdHVwbGUsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YSBhbmQKKyAgIHBjbWNpYV9wYXJzZV90dXBsZSBkaXJlY3RseSBpbiBtb3N0IGlmIG5vdCBhbGwgY2FzZXMuCisKICogTmV3IHJlbGVhc2UgaGVscGVyIChhcyBvZiAyLjYuMTcpCiAgICBJbnN0ZWFkIG9mIGNhbGxpbmcgcGNtY2lhX3JlbGVhc2Vfe2NvbmZpZ3VyYXRpb24saW8saXJxLHdpbn0sIGFsbCB0aGF0J3MKICAgIG5lY2Vzc2FyeSBub3cgaXMgY2FsbGluZyBwY21jaWFfZGlzYWJsZV9kZXZpY2UuIEFzIHRoZXJlIGlzIG5vIHZhbGlkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3JlZ3VsYXRvci9tYWNoaW5lLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL21hY2hpbmUudHh0CmluZGV4IGM5YTM1NjYuLmNlMzQ4N2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL21hY2hpbmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL21hY2hpbmUudHh0CkBAIC0yLDE3ICsyLDggQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFRoZSByZWd1bGF0b3IgbWFjaGluZSBkcml2ZXIgaW50ZXJmYWNlIGlzIGludGVuZGVkIGZvciBib2FyZC9tYWNoaW5lIHNwZWNpZmljCi1pbml0aWFsaXNhdGlvbiBjb2RlIHRvIGNvbmZpZ3VyZSB0aGUgcmVndWxhdG9yIHN1YnN5c3RlbS4gVHlwaWNhbCB0aGluZ3MgdGhhdAotbWFjaGluZSBkcml2ZXJzIHdvdWxkIGRvIGFyZSA6LQoraW5pdGlhbGlzYXRpb24gY29kZSB0byBjb25maWd1cmUgdGhlIHJlZ3VsYXRvciBzdWJzeXN0ZW0uCiAKLSAxLiBSZWd1bGF0b3IgLT4gRGV2aWNlIG1hcHBpbmcuCi0gMi4gUmVndWxhdG9yIHN1cHBseSBjb25maWd1cmF0aW9uLgotIDMuIFBvd2VyIERvbWFpbiBjb25zdHJhaW50IHNldHRpbmcuCi0KLQotCi0xLiBSZWd1bGF0b3IgLT4gZGV2aWNlIG1hcHBpbmcKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBtYWNoaW5lIDotCiAKICAgUmVndWxhdG9yLTEgLSstPiBSZWd1bGF0b3ItMiAtLT4gW0NvbnN1bWVyIEEgQCAxLjggLSAyLjBWXQpAQCAtMjEsODEgKzEyLDgyIEBACiAKIFRoZSBkcml2ZXJzIGZvciBjb25zdW1lcnMgQSAmIEIgbXVzdCBiZSBtYXBwZWQgdG8gdGhlIGNvcnJlY3QgcmVndWxhdG9yIGluCiBvcmRlciB0byBjb250cm9sIHRoZWlyIHBvd2VyIHN1cHBseS4gVGhpcyBtYXBwaW5nIGNhbiBiZSBhY2hpZXZlZCBpbiBtYWNoaW5lCi1pbml0aWFsaXNhdGlvbiBjb2RlIGJ5IGNhbGxpbmcgOi0KK2luaXRpYWxpc2F0aW9uIGNvZGUgYnkgY3JlYXRpbmcgYSBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBmb3IKK2VhY2ggcmVndWxhdG9yLgogCi1pbnQgcmVndWxhdG9yX3NldF9kZXZpY2Vfc3VwcGx5KGNvbnN0IGNoYXIgKnJlZ3VsYXRvciwgc3RydWN0IGRldmljZSAqZGV2LAotCQkJCWNvbnN0IGNoYXIgKnN1cHBseSk7CitzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB7CisJc3RydWN0IGRldmljZSAqZGV2OwkvKiBjb25zdW1lciAqLworCWNvbnN0IGNoYXIgKnN1cHBseTsJLyogY29uc3VtZXIgc3VwcGx5IC0gZS5nLiAidmNjIiAqLworfTsKIAotYW5kIGlzIHNob3duIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlIDotCitlLmcuIGZvciB0aGUgbWFjaGluZSBhYm92ZQogCi1yZWd1bGF0b3Jfc2V0X2RldmljZV9zdXBwbHkoIlJlZ3VsYXRvci0xIiwgZGV2QiwgIlZjYyIpOwotcmVndWxhdG9yX3NldF9kZXZpY2Vfc3VwcGx5KCJSZWd1bGF0b3ItMiIsIGRldkEsICJWY2MiKTsKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByZWd1bGF0b3IxX2NvbnN1bWVyc1tdID0geworeworCS5kZXYJPSAmcGxhdGZvcm1fY29uc3VtZXJCX2RldmljZS5kZXYsCisJLnN1cHBseQk9ICJWY2MiLAorfSx9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcmVndWxhdG9yMl9jb25zdW1lcnNbXSA9IHsKK3sKKwkuZGV2CT0gJnBsYXRmb3JtX2NvbnN1bWVyQV9kZXZpY2UuZGV2LAorCS5zdXBwbHkJPSAiVmNjIiwKK30sfTsKIAogVGhpcyBtYXBzIFJlZ3VsYXRvci0xIHRvIHRoZSAnVmNjJyBzdXBwbHkgZm9yIENvbnN1bWVyIEIgYW5kIG1hcHMgUmVndWxhdG9yLTIKIHRvIHRoZSAnVmNjJyBzdXBwbHkgZm9yIENvbnN1bWVyIEEuCiAKK0NvbnN0cmFpbnRzIGNhbiBub3cgYmUgcmVnaXN0ZXJlZCBieSBkZWZpbmluZyBhIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCitmb3IgZWFjaCByZWd1bGF0b3IgcG93ZXIgZG9tYWluLiBUaGlzIHN0cnVjdHVyZSBhbHNvIG1hcHMgdGhlIGNvbnN1bWVycwordG8gdGhlaXIgc3VwcGx5IHJlZ3VsYXRvciA6LQogCi0yLiBSZWd1bGF0b3Igc3VwcGx5IGNvbmZpZ3VyYXRpb24uCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Db25zaWRlciB0aGUgZm9sbG93aW5nIG1hY2hpbmUgKGFnYWluKSA6LQotCi0gIFJlZ3VsYXRvci0xIC0rLT4gUmVndWxhdG9yLTIgLS0+IFtDb25zdW1lciBBIEAgMS44IC0gMi4wVl0KLSAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICstPiBbQ29uc3VtZXIgQiBAIDMuM1ZdCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcmVndWxhdG9yMV9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91ViA9IDMzMDAwMDAsCisJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHJlZ3VsYXRvcjFfY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSByZWd1bGF0b3IxX2NvbnN1bWVycywKK307CiAKIFJlZ3VsYXRvci0xIHN1cHBsaWVzIHBvd2VyIHRvIFJlZ3VsYXRvci0yLiBUaGlzIHJlbGF0aW9uc2hpcCBtdXN0IGJlIHJlZ2lzdGVyZWQKIHdpdGggdGhlIGNvcmUgc28gdGhhdCBSZWd1bGF0b3ItMSBpcyBhbHNvIGVuYWJsZWQgd2hlbiBDb25zdW1lciBBIGVuYWJsZXMgaXQncwotc3VwcGx5IChSZWd1bGF0b3ItMikuCitzdXBwbHkgKFJlZ3VsYXRvci0yKS4gVGhlIHN1cHBseSByZWd1bGF0b3IgaXMgc2V0IGJ5IHRoZSBzdXBwbHlfcmVndWxhdG9yX2RldgorZmllbGQgYmVsb3c6LQogCi1UaGlzIHJlbGF0aW9uc2hpcCBjYW4gYmUgcmVnaXN0ZXIgd2l0aCB0aGUgY29yZSB2aWEgOi0KLQotaW50IHJlZ3VsYXRvcl9zZXRfc3VwcGx5KGNvbnN0IGNoYXIgKnJlZ3VsYXRvciwgY29uc3QgY2hhciAqcmVndWxhdG9yX3N1cHBseSk7Ci0KLUluIHRoaXMgZXhhbXBsZSB3ZSB3b3VsZCB1c2UgdGhlIGZvbGxvd2luZyBjb2RlIDotCi0KLXJlZ3VsYXRvcl9zZXRfc3VwcGx5KCJSZWd1bGF0b3ItMiIsICJSZWd1bGF0b3ItMSIpOwotCi1SZWxhdGlvbnNoaXBzIGNhbiBiZSBxdWVyaWVkIGJ5IGNhbGxpbmcgOi0KLQotY29uc3QgY2hhciAqcmVndWxhdG9yX2dldF9zdXBwbHkoY29uc3QgY2hhciAqcmVndWxhdG9yKTsKLQotCi0zLiBQb3dlciBEb21haW4gY29uc3RyYWludCBzZXR0aW5nLgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUVhY2ggcG93ZXIgZG9tYWluIHdpdGhpbiBhIHN5c3RlbSBoYXMgcGh5c2ljYWwgY29uc3RyYWludHMgb24gdm9sdGFnZSBhbmQKLWN1cnJlbnQuIFRoaXMgbXVzdCBiZSBkZWZpbmVkIGluIHNvZnR3YXJlIHNvIHRoYXQgdGhlIHBvd2VyIGRvbWFpbiBpcyBhbHdheXMKLW9wZXJhdGVkIHdpdGhpbiBzcGVjaWZpY2F0aW9ucy4KLQotQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBtYWNoaW5lIChhZ2FpbikgOi0KLQotICBSZWd1bGF0b3ItMSAtKy0+IFJlZ3VsYXRvci0yIC0tPiBbQ29uc3VtZXIgQSBAIDEuOCAtIDIuMFZdCi0gICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICArLT4gW0NvbnN1bWVyIEIgQCAzLjNWXQotCi1UaGlzIGdpdmVzIHVzIHR3byByZWd1bGF0b3JzIGFuZCB0d28gcG93ZXIgZG9tYWluczoKLQotICAgICAgICAgICAgICAgICAgIERvbWFpbiAxOiBSZWd1bGF0b3ItMiwgQ29uc3VtZXIgQi4KLSAgICAgICAgICAgICAgICAgICBEb21haW4gMjogQ29uc3VtZXIgQS4KLQotQ29uc3RyYWludHMgY2FuIGJlIHJlZ2lzdGVyZWQgYnkgY2FsbGluZyA6LQotCi1pbnQgcmVndWxhdG9yX3NldF9wbGF0Zm9ybV9jb25zdHJhaW50cyhjb25zdCBjaGFyICpyZWd1bGF0b3IsCi0Jc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgKmNvbnN0cmFpbnRzKTsKLQotVGhlIGV4YW1wbGUgaXMgZGVmaW5lZCBhcyBmb2xsb3dzIDotCi0KLXN0cnVjdCByZWd1bGF0aW9uX2NvbnN0cmFpbnRzIGRvbWFpbl8xID0gewotCS5taW5fdVYgPSAzMzAwMDAwLAotCS5tYXhfdVYgPSAzMzAwMDAwLAotCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJlZ3VsYXRvcjJfZGF0YSA9IHsKKwkuc3VwcGx5X3JlZ3VsYXRvcl9kZXYgPSAmcGxhdGZvcm1fcmVndWxhdG9yMV9kZXZpY2UuZGV2LAorCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91ViA9IDE4MDAwMDAsCisJCS5tYXhfdVYgPSAyMDAwMDAwLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUocmVndWxhdG9yMl9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IHJlZ3VsYXRvcjJfY29uc3VtZXJzLAogfTsKIAotc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgZG9tYWluXzIgPSB7Ci0JLm1pbl91ViA9IDE4MDAwMDAsCi0JLm1heF91ViA9IDIwMDAwMDAsCi0JLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFLAotCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAotfTsKK0ZpbmFsbHkgdGhlIHJlZ3VsYXRvciBkZXZpY2VzIG11c3QgYmUgcmVnaXN0ZXJlZCBpbiB0aGUgdXN1YWwgbWFubmVyLgogCi1yZWd1bGF0b3Jfc2V0X3BsYXRmb3JtX2NvbnN0cmFpbnRzKCJSZWd1bGF0b3ItMSIsICZkb21haW5fMSk7Ci1yZWd1bGF0b3Jfc2V0X3BsYXRmb3JtX2NvbnN0cmFpbnRzKCJSZWd1bGF0b3ItMiIsICZkb21haW5fMik7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWd1bGF0b3JfZGV2aWNlc1tdID0geworeworCS5uYW1lID0gInJlZ3VsYXRvciIsCisJLmlkID0gRENEQ18xLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnJlZ3VsYXRvcjFfZGF0YSwKKwl9LAorfSwKK3sKKwkubmFtZSA9ICJyZWd1bGF0b3IiLAorCS5pZCA9IERDRENfMiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZyZWd1bGF0b3IyX2RhdGEsCisJfSwKK30sCit9OworLyogcmVnaXN0ZXIgcmVndWxhdG9yIDEgZGV2aWNlICovCitwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndtODM1MF9yZWd1bGF0b3JfZGV2aWNlc1swXSk7CisKKy8qIHJlZ2lzdGVyIHJlZ3VsYXRvciAyIGRldmljZSAqLworcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3bTgzNTBfcmVndWxhdG9yX2RldmljZXNbMV0pOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQKaW5kZXggYTY5MDUwMS4uNDIwMGFjYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3JlZ3VsYXRvci9yZWd1bGF0b3IudHh0CkBAIC0xMCwxMSArMTAsMTEgQEAKIAogRHJpdmVycyBjYW4gcmVnaXN0ZXIgYSByZWd1bGF0b3IgYnkgY2FsbGluZyA6LQogCi1zdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqcmVndWxhdG9yX2Rlc2MsCi0JCQkJCSAgdm9pZCAqcmVnX2RhdGEpOworc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJlZ3VsYXRvcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpyZWd1bGF0b3JfZGVzYyk7CiAKLVRoaXMgd2lsbCByZWdpc3RlciB0aGUgcmVndWxhdG9ycyBjYXBhYmlsaXRpZXMgYW5kIG9wZXJhdGlvbnMgdGhlIHJlZ3VsYXRvcgotY29yZS4gVGhlIGNvcmUgZG9lcyBub3QgdG91Y2ggcmVnX2RhdGEgKHByaXZhdGUgdG8gcmVndWxhdG9yIGRyaXZlcikuCitUaGlzIHdpbGwgcmVnaXN0ZXIgdGhlIHJlZ3VsYXRvcnMgY2FwYWJpbGl0aWVzIGFuZCBvcGVyYXRpb25zIHRvIHRoZSByZWd1bGF0b3IKK2NvcmUuCiAKIFJlZ3VsYXRvcnMgY2FuIGJlIHVucmVnaXN0ZXJlZCBieSBjYWxsaW5nIDotCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvczJyYW0udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zMnJhbS50eHQKaW5kZXggYjA1ZjUxMi4uMmViZGM2MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zMnJhbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zMnJhbS50eHQKQEAgLTU0LDMgKzU0LDIxIEBACiB0aGF0ICJyYWRlb25mYiIgc2ltcGx5IGNhbm5vdCByZXN1bWUgdGhhdCBkZXZpY2UgLSBpdCB0cmllcyB0byBzZXQgdGhlCiBQTEwncywgYW5kIGl0IGp1c3QgX2hhbmdzXy4gVXNpbmcgdGhlIHJlZ3VsYXIgVkdBIGNvbnNvbGUgYW5kIGxldHRpbmcgWAogcmVzdW1lIGl0IGluc3RlYWQgd29ya3MgZmluZS4KKworTk9URQorPT09PQorcG1fdHJhY2UgdXNlcyB0aGUgc3lzdGVtJ3MgUmVhbCBUaW1lIENsb2NrIChSVEMpIHRvIHNhdmUgdGhlIG1hZ2ljIG51bWJlci4KK1JlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZSBSVEMgaXMgdGhlIG9ubHkgcmVsaWFibHkgYXZhaWxhYmxlIHBpZWNlIG9mCitoYXJkd2FyZSBkdXJpbmcgcmVzdW1lIG9wZXJhdGlvbnMgd2hlcmUgYSB2YWx1ZSBjYW4gYmUgc2V0IHRoYXQgd2lsbAorc3Vydml2ZSBhIHJlYm9vdC4KKworQ29uc2VxdWVuY2UgaXMgdGhhdCBhZnRlciBhIHJlc3VtZSAoZXZlbiBpZiBpdCBpcyBzdWNjZXNzZnVsKSB5b3VyIHN5c3RlbQorY2xvY2sgd2lsbCBoYXZlIGEgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFnaWMgbXVtYmVyIGluc3RlYWQgb2YgdGhlCitjb3JyZWN0IGRhdGUvdGltZSEgSXQgaXMgdGhlcmVmb3JlIGFkdmlzYWJsZSB0byB1c2UgYSBwcm9ncmFtIGxpa2UgbnRwLWRhdGUKK29yIHJkYXRlIHRvIHJlc2V0IHRoZSBjb3JyZWN0IGRhdGUvdGltZSBmcm9tIGFuIGV4dGVybmFsIHRpbWUgc291cmNlIHdoZW4KK3VzaW5nIHRoaXMgdHJhY2Ugb3B0aW9uLgorCitBcyB0aGUgY2xvY2sga2VlcHMgdGlja2luZyBpdCBpcyBhbHNvIGVzc2VudGlhbCB0aGF0IHRoZSByZWJvb3QgaXMgZG9uZQorcXVpY2tseSBhZnRlciB0aGUgcmVzdW1lIGZhaWx1cmUuIFRoZSB0cmFjZSBvcHRpb24gZG9lcyBub3QgdXNlIHRoZSBzZWNvbmRzCitvciB0aGUgbG93IG9yZGVyIGJpdHMgb2YgdGhlIG1pbnV0ZXMgb2YgdGhlIFJUQywgYnV0IGEgdG9vIGxvbmcgZGVsYXkgd2lsbAorY29ycnVwdCB0aGUgbWFnaWMgdmFsdWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvMDAtSU5ERVgKaW5kZXggMjlkODM5Yy4uZTM5NjBiOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy8wMC1JTkRFWApAQCAtMTgsMTAgKzE4LDYgQEAKIAktIExpbnV4IDIuNi54IG9uIE1QQzUyeHggZmFtaWx5CiBtcGM1Mnh4LWRldmljZS10cmVlLWJpbmRpbmdzLnR4dAogCS0gTVBDNTIwMCBEZXZpY2UgVHJlZSBCaW5kaW5ncwotcHBjX2h0YWIudHh0Ci0JLSBpbmZvIGFib3V0IHRoZSBMaW51eC9QUEMgL3Byb2MvcHBjX2h0YWIgZW50cnkKLXNtcC50eHQKLQktIHVzZSBhbmQgc3RhdGUgaW5mbyBhYm91dCBMaW51eC9QUEMgb24gTVAgbWFjaGluZXMKIHNvdW5kLnR4dAogCS0gaW5mbyBvbiBzb3VuZCBzdXBwb3J0IHVuZGVyIExpbnV4L1BQQwogekltYWdlX2xheW91dC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsLzgzeHgtNTEyeC1wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvODN4eC01MTJ4LXBjaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhNDY1MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsLzgzeHgtNTEyeC1wY2kudHh0CkBAIC0wLDAgKzEsNDAgQEAKKyogRnJlZXNjYWxlIDgzeHggYW5kIDUxMnggUENJIGJyaWRnZXMKKworRnJlZXNjYWxlIDgzeHggYW5kIDUxMnggU09DcyBpbmNsdWRlIHRoZSBzYW1lIHBjaSBicmlkZ2UgY29yZS4KKworODN4eC81MTJ4IHNwZWNpZmljIG5vdGVzOgorLSByZWc6IHNob3VsZCBjb250YWluIHR3byBhZGRyZXNzIGxlbmd0aCB0dXBsZXMKKyAgICBUaGUgZmlyc3QgaXMgZm9yIHRoZSBpbnRlcm5hbCBwY2kgYnJpZGdlIHJlZ2lzdGVycworICAgIFRoZSBzZWNvbmQgaXMgZm9yIHRoZSBwY2kgY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMKKworRXhhbXBsZSAoTVBDODMxM0VSREIpCisJcGNpMDogcGNpQGUwMDA4NTAwIHsKKwkJY2VsbC1pbmRleCA9IDwxPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkJLyogSURTRUwgMHgwRSAtbWluaSBQQ0kgKi8KKwkJCQkgMHg3MDAwIDB4MCAweDAgMHgxICZpcGljIDE4IDB4OAorCQkJCSAweDcwMDAgMHgwIDB4MCAweDIgJmlwaWMgMTggMHg4CisJCQkJIDB4NzAwMCAweDAgMHgwIDB4MyAmaXBpYyAxOCAweDgKKwkJCQkgMHg3MDAwIDB4MCAweDAgMHg0ICZpcGljIDE4IDB4OAorCisJCQkJLyogSURTRUwgMHgwRiAtIFBDSSBzbG90ICovCisJCQkJIDB4NzgwMCAweDAgMHgwIDB4MSAmaXBpYyAxNyAweDgKKwkJCQkgMHg3ODAwIDB4MCAweDAgMHgyICZpcGljIDE4IDB4OAorCQkJCSAweDc4MDAgMHgwIDB4MCAweDMgJmlwaWMgMTcgMHg4CisJCQkJIDB4NzgwMCAweDAgMHgwIDB4NCAmaXBpYyAxOCAweDg+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJaW50ZXJydXB0cyA9IDw2NiAweDg+OworCQlidXMtcmFuZ2UgPSA8MHgwIDB4MD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKKwkJCSAgMHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMjAwMDAwMCAweDAgMHgwMDEwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC84eHh4X2dwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvOHh4eF9ncGlvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDE1ZGNlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvOHh4eF9ncGlvLnR4dApAQCAtMCwwICsxLDQwIEBACitHUElPIGNvbnRyb2xsZXJzIG9uIE1QQzh4eHggU29DcworCitUaGlzIGlzIGZvciB0aGUgbm9uLVFFL0NQTS9HVVRzIEdQSU8gY29udHJvbGxlcnMgYXMgZm91bmQgb24KKzgzNDksIDg1NzIsIDg2MTAgYW5kIGNvbXBhdGlibGUuCisKK0V2ZXJ5IEdQSU8gY29udHJvbGxlciBub2RlIG11c3QgaGF2ZSAjZ3Bpby1jZWxscyBwcm9wZXJ0eSBkZWZpbmVkLAordGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgdG8gdHJhbnNsYXRlIGdwaW8tc3BlY2lmaWVycy4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZSA6ICJmc2wsPENISVA+LWdwaW8iIGZvbGxvd2VkIGJ5ICJmc2wsbXBjODM0OS1ncGlvIiBmb3IKKyAgODN4eCwgImZzbCxtcGM4NTcyLWdwaW8iIGZvciA4NXh4IGFuZCAiZnNsLG1wYzg2MTAtZ3BpbyIgZm9yIDg2eHguCistICNncGlvLWNlbGxzIDogU2hvdWxkIGJlIHR3by4gVGhlIGZpcnN0IGNlbGwgaXMgdGhlIHBpbiBudW1iZXIgYW5kIHRoZQorICBzZWNvbmQgY2VsbCBpcyB1c2VkIHRvIHNwZWNpZnkgb3B0aW9uYWwgcGFyYW1ldGVycyAoY3VycmVudGx5IHVudXNlZCkuCisgLSBpbnRlcnJ1cHRzIDogSW50ZXJydXB0IG1hcHBpbmcgZm9yIEdQSU8gSVJRIChjdXJyZW50bHkgdW51c2VkKS4KKyAtIGludGVycnVwdC1wYXJlbnQgOiBQaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdGhhdAorICAgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCistIGdwaW8tY29udHJvbGxlciA6IE1hcmtzIHRoZSBwb3J0IGFzIEdQSU8gY29udHJvbGxlci4KKworRXhhbXBsZSBvZiBncGlvLWNvbnRyb2xsZXIgbm9kZXMgZm9yIGEgTVBDODM0NyBTb0M6CisKKwlncGlvMTogZ3Bpby1jb250cm9sbGVyQGMwMCB7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ3LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCXJlZyA9IDwweGMwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8NzQgMHg4PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCWdwaW8tY29udHJvbGxlcjsKKwl9OworCisJZ3BpbzI6IGdwaW8tY29udHJvbGxlckBkMDAgeworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0Ny1ncGlvIiwgImZzbCxtcGM4MzQ5LWdwaW8iOworCQlyZWcgPSA8MHhkMDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPDc1IDB4OD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQlncGlvLWNvbnRyb2xsZXI7CisJfTsKKworU2VlIGJvb3Rpbmctd2l0aG91dC1vZi50eHQgZm9yIGRldGFpbHMgb2YgaG93IHRvIHNwZWNpZnkgR1BJTworaW5mb3JtYXRpb24gZm9yIGRldmljZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dAppbmRleCA4NjgyNmRmLi5jYzQ1MzExIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RtYS50eHQKQEAgLTIwLDcgKzIwLDcgQEAKICAgICAgICAgLSBjb21wYXRpYmxlICAgICAgICA6IGNvbXBhdGlibGUgbGlzdCwgY29udGFpbnMgMiBlbnRyaWVzLCBmaXJzdCBpcwogCQkJICJmc2wsQ0hJUC1kbWEtY2hhbm5lbCIsIHdoZXJlIENISVAgaXMgdGhlIHByb2Nlc3NvcgogCQkJIChtcGM4MzQ5LCBtcGM4MzUwLCBldGMuKSBhbmQgdGhlIHNlY29uZCBpcwotCQkJICJmc2wsZWxvLWRtYS1jaGFubmVsIgorCQkJICJmc2wsZWxvLWRtYS1jaGFubmVsIi4gSG93ZXZlciwgc2VlIG5vdGUgYmVsb3cuCiAgICAgICAgIC0gcmVnICAgICAgICAgICAgICAgOiA8cmVnaXN0ZXJzIG1hcHBpbmcgZm9yIGNoYW5uZWw+CiAgICAgICAgIC0gY2VsbC1pbmRleCAgICAgICAgOiBkbWEgY2hhbm5lbCBpbmRleCBzdGFydHMgYXQgMC4KIApAQCAtODIsNyArODIsNyBAQAogICAgICAgICAtIGNvbXBhdGlibGUgICAgICAgIDogY29tcGF0aWJsZSBsaXN0LCBjb250YWlucyAyIGVudHJpZXMsIGZpcnN0IGlzCiAJCQkgImZzbCxDSElQLWRtYS1jaGFubmVsIiwgd2hlcmUgQ0hJUCBpcyB0aGUgcHJvY2Vzc29yCiAJCQkgKG1wYzg1NDAsIG1wYzg1NjAsIGV0Yy4pIGFuZCB0aGUgc2Vjb25kIGlzCi0JCQkgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIgorCQkJICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCIuIEhvd2V2ZXIsIHNlZSBub3RlIGJlbG93LgogICAgICAgICAtIGNlbGwtaW5kZXggICAgICAgIDogZG1hIGNoYW5uZWwgaW5kZXggc3RhcnRzIGF0IDAuCiAgICAgICAgIC0gcmVnICAgICAgICAgICAgICAgOiA8cmVnaXN0ZXJzIG1hcHBpbmcgZm9yIGNoYW5uZWw+CiAgICAgICAgIC0gaW50ZXJydXB0cyAgICAgICAgOiA8aW50ZXJydXB0IG1hcHBpbmcgZm9yIERNQSBjaGFubmVsIElSUT4KQEAgLTEyNSwzICsxMjUsMTIgQEAKIAkJCWludGVycnVwdHMgPSA8MTcgMj47CiAJCX07CiAJfTsKKworTm90ZSBvbiBETUEgY2hhbm5lbCBjb21wYXRpYmxlIHByb3BlcnRpZXM6IFRoZSBjb21wYXRpYmxlIHByb3BlcnR5IG11c3Qgc2F5CisiZnNsLGVsby1kbWEtY2hhbm5lbCIgb3IgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIiB0byBiZSB1c2VkIGJ5IHRoZSBFbG8gRE1BCitkcml2ZXIgKGZzbGRtYSkuICBBbnkgRE1BIGNoYW5uZWwgdXNlZCBieSBmc2xkbWEgY2Fubm90IGJlIHVzZWQgYnkgYW5vdGhlcgorRE1BIGRyaXZlciwgc3VjaCBhcyB0aGUgU1NJIHNvdW5kIGRyaXZlcnMgZm9yIHRoZSBNUEM4NjEwLiAgVGhlcmVmb3JlLCBhbnkgRE1BCitjaGFubmVsIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGFub3RoZXIgZHJpdmVyIHNob3VsZCBub3QgdXNlCisiZnNsLGVsby1kbWEtY2hhbm5lbCIgb3IgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIi4gIEZvciB0aGUgU1NJIGRyaXZlcnMsIGZvcgorZXhhbXBsZSwgdGhlIGNvbXBhdGlibGUgcHJvcGVydHkgc2hvdWxkIGJlICJmc2wsc3NpLWRtYS1jaGFubmVsIi4gIFNlZSBzc2kudHh0Citmb3IgbW9yZSBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NzaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zc2kudHh0CmluZGV4IGQxMDA1NTUuLmEyZDk2MzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NzaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3NpLnR4dApAQCAtMjQsNiArMjQsMTIgQEAKIAkJICAgICJyai1tYXN0ZXIiIC0gci5qLiwgU1NJIGlzIGNsb2NrIG1hc3RlcgogCQkgICAgImFjOTctc2xhdmUiIC0gQUM5NyBtb2RlLCBTU0kgaXMgY2xvY2sgc2xhdmUKIAkJICAgICJhYzk3LW1hc3RlciIgLSBBQzk3IG1vZGUsIFNTSSBpcyBjbG9jayBtYXN0ZXIKKy0gZnNsLHBsYXliYWNrLWRtYTogcGhhbmRsZSB0byBhIG5vZGUgZm9yIHRoZSBETUEgY2hhbm5lbCB0byB1c2UgZm9yCisgICAgICAgICAgICAgICAgICAgIHBsYXliYWNrIG9mIGF1ZGlvLiAgVGhpcyBpcyB0eXBpY2FsbHkgZGljdGF0ZWQgYnkgU09DCisgICAgICAgICAgICAgICAgICAgIGRlc2lnbi4gIFNlZSB0aGUgbm90ZXMgYmVsb3cuCistIGZzbCxjYXB0dXJlLWRtYTogIHBoYW5kbGUgdG8gYSBub2RlIGZvciB0aGUgRE1BIGNoYW5uZWwgdG8gdXNlIGZvcgorICAgICAgICAgICAgICAgICAgICBjYXB0dXJlIChyZWNvcmRpbmcpIG9mIGF1ZGlvLiAgVGhpcyBpcyB0eXBpY2FsbHkgZGljdGF0ZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgU09DIGRlc2lnbi4gIFNlZSB0aGUgbm90ZXMgYmVsb3cuCiAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAtIGNvZGVjLWhhbmRsZQkgIDogcGhhbmRsZSB0byBhICdjb2RlYycgbm9kZSB0aGF0IGRlZmluZXMgYW4gYXVkaW8KQEAgLTM2LDMgKzQyLDIwIEBACiBDaGlsZCAnY29kZWMnIG5vZGUgb3B0aW9uYWwgcHJvcGVydGllczoKIC0gY2xvY2stZnJlcXVlbmN5ICA6IFRoZSBmcmVxdWVuY3kgb2YgdGhlIGlucHV0IGNsb2NrLCB3aGljaCB0eXBpY2FsbHkKICAgICAgICAgICAgICAgICAgICAgIGNvbWVzIGZyb20gYW4gb24tYm9hcmQgZGVkaWNhdGVkIG9zY2lsbGF0b3IuCisKK05vdGVzIG9uIGZzbCxwbGF5YmFjay1kbWEgYW5kIGZzbCxjYXB0dXJlLWRtYToKKworT24gU09DcyB0aGF0IGhhdmUgYW4gU1NJLCBzcGVjaWZpYyBETUEgY2hhbm5lbHMgYXJlIGhhcmQtd2lyZWQgZm9yIHBsYXliYWNrCithbmQgY2FwdHVyZS4gIE9uIHRoZSBNUEM4NjEwLCBmb3IgZXhhbXBsZSwgU1NJMSBtdXN0IHVzZSBETUEgY2hhbm5lbCAwIGZvcgorcGxheWJhY2sgYW5kIERNQSBjaGFubmVsIDEgZm9yIGNhcHR1cmUuICBTU0kyIG11c3QgdXNlIERNQSBjaGFubmVsIDIgZm9yCitwbGF5YmFjayBhbmQgRE1BIGNoYW5uZWwgMyBmb3IgY2FwdHVyZS4gIFRoZSBkZXZlbG9wZXIgY2FuIGNob29zZSB3aGljaAorRE1BIGNvbnRyb2xsZXIgdG8gdXNlLCBidXQgdGhlIGNoYW5uZWxzIHRoZW1zZWx2ZXMgYXJlIGhhcmQtd2lyZWQuICBUaGUKK3B1cnBvc2Ugb2YgdGhlc2UgdHdvIHByb3BlcnRpZXMgaXMgdG8gcmVwcmVzZW50IHRoaXMgaGFyZHdhcmUgZGVzaWduLgorCitUaGUgZGV2aWNlIHRyZWUgbm9kZXMgZm9yIHRoZSBETUEgY2hhbm5lbHMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieQorImZzbCxwbGF5YmFjay1kbWEiIGFuZCAiZnNsLGNhcHR1cmUtZG1hIiBtdXN0IGJlIG1hcmtlZCBhcyBjb21wYXRpYmxlIHdpdGgKKyJmc2wsc3NpLWRtYS1jaGFubmVsIi4gIFRoZSBTT0Mtc3BlY2lmaWMgY29tcGF0aWJsZSBzdHJpbmcgKGUuZy4KKyJmc2wsbXBjODYxMC1kbWEtY2hhbm5lbCIpIGNhbiByZW1haW4uICBJZiB0aGVzZSBub2RlcyBhcmUgbGVmdCBhcworImZzbCxlbG8tZG1hLWNoYW5uZWwiIG9yICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCIsIHRoZW4gdGhlIGdlbmVyaWMgRWxvIERNQQorZHJpdmVycyAoZnNsZG1hKSB3aWxsIGF0dGVtcHQgdG8gdXNlIHRoZW0sIGFuZCBpdCB3aWxsIGNvbmZsaWN0IHdpdGggdGhlCitzb3VuZCBkcml2ZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3BwY19odGFiLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9wcGNfaHRhYi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiOGM3ZGYuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3BwY19odGFiLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0gICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IC9wcm9jL3BwY19odGFiCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhpcyBkb2N1bWVudCBhbmQgdGhlIHJlbGF0ZWQgY29kZSB3YXMgd3JpdHRlbiBieSBtZSAoQ29ydCBEb3VnYW4pLCBwbGVhc2UKLWVtYWlsIG1lIChjb3J0QGZzbWxhYnMuY29tKSBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMsIGNvbW1lbnRzIG9yIGNvcnJlY3Rpb25zLgotCi1MYXN0IENoYW5nZTogMi4xNi45OAotCi1UaGlzIGVudHJ5IGluIHRoZSBwcm9jIGRpcmVjdG9yeSBpcyByZWFkYWJsZSBieSBhbGwgdXNlcnMgYnV0IG9ubHkKLXdyaXRhYmxlIGJ5IHJvb3QuCi0KLVRoZSBwcGNfaHRhYiBpbnRlcmZhY2UgaXMgYSB1c2VyIGxldmVsIHdheSBvZiBhY2Nlc3NpbmcgdGhlCi1wZXJmb3JtYW5jZSBtb25pdG9yaW5nIHJlZ2lzdGVycyBhcyB3ZWxsIGFzIHByb3ZpZGluZyBpbmZvcm1hdGlvbgotYWJvdXQgdGhlIFBURSBoYXNoIHRhYmxlLgotCi0xLiBSZWFkaW5nCi0KLSAgUmVhZGluZyB0aGlzIGZpbGUgd2lsbCBnaXZlIHlvdSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQKLSAgaGFzaCB0YWJsZSB0aGF0IHNlcnZlcyBhcyBhbiBleHRlbmRlZCB0bGIgZm9yIHBhZ2UgdHJhbnNsYXRpb24gb24gdGhlCi0gIHBvd2VycGMuICBJdCB3aWxsIGFsc28gZ2l2ZSB5b3UgaW5mb3JtYXRpb24gYWJvdXQgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQKLSAgc3BlY2lmaWMgdG8gdGhlIGNwdSB0aGF0IHlvdSBhcmUgdXNpbmcuCi0KLSAgRXhwbGFuYXRpb24gb2YgdGhlIDYwNCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIEZpZWxkczoKLSAgICBNTUNSMCAtIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBNTUNSMCByZWdpc3RlcgotICAgIFBNQzEKLSAgICBQTUMyIC0gdGhlIHZhbHVlIG9mIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhbmQgYQotICAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB3aGF0IGV2ZW50cyB0aGV5IGFyZSBjb3VudGluZwotICAgICAgICAgICB3aGljaCBhcmUgYmFzZWQgb24gTU1DUjAgYml0IHNldHRpbmdzLgotICBFeHBsYW5hdGlvbiBvZiB0aGUgUFRFIEhhc2ggVGFibGUgZmllbGRzOgotCi0gICAgU2l6ZSAtIGhhc2ggdGFibGUgc2l6ZSBpbiBLYi4KLSAgICBCdWNrZXRzIC0gIG51bWJlciBvZiBidWNrZXRzIGluIHRoZSB0YWJsZS4KLSAgICBBZGRyZXNzIC0gdGhlIHZpcnR1YWwga2VybmVsIGFkZHJlc3Mgb2YgdGhlIGhhc2ggdGFibGUgYmFzZS4KLSAgICBFbnRyaWVzIC0gdGhlIG51bWJlciBvZiBwdGVzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgaGFzaCB0YWJsZS4KLSAgICBVc2VyL0tlcm5lbCAtIGhvdyBtYW55IHB0ZSdzIGFyZSBpbiB1c2UgYnkgdGhlIGtlcm5lbCBvciB1c2VyIGF0IHRoYXQgdGltZS4KLSAgICBPdmVyZmxvd3MgLSBIb3cgbWFueSBvZiB0aGUgZW50cmllcyBhcmUgaW4gdGhlaXIgc2Vjb25kYXJ5IGhhc2ggbG9jYXRpb24uCi0gICAgUGVyY2VudCBmdWxsIC0gcmF0aW8gb2YgZnJlZSBwdGUgZW50cmllcyB0byBpbiB1c2UgZW50cmllcy4KLSAgICBSZWxvYWRzIC0gQ291bnQgb2YgaG93IG1hbnkgaGFzaCB0YWJsZSBtaXNzZXMgaGF2ZSBvY2N1cnJlZAotICAgICAgICAgICAgICB0aGF0IHdlcmUgZml4ZWQgd2l0aCBhIHJlbG9hZCBmcm9tIHRoZSBsaW51eCB0YWJsZXMuCi0gICAgICAgICAgICAgIFNob3VsZCBhbHdheXMgYmUgMCBvbiA2MDMgYmFzZWQgbWFjaGluZXMuCi0gICAgTm9uLWVycm9yIE1pc3NlcyAtIENvdW50IG9mIGhvdyBtYW55IGhhc2ggdGFibGUgbWlzc2VzIGhhdmUgb2NjdXJyZWQKLSAgICAgICAgICAgICAgdGhhdCB3ZXJlIGNvbXBsZXRlZCB3aXRoIHRoZSBjcmVhdGlvbiBvZiBhIHB0ZSBpbiB0aGUgbGludXgKLSAgICAgICAgICAgICAgdGFibGVzIHdpdGggYSBjYWxsIHRvIGRvX3BhZ2VfZmF1bHQoKS4KLSAgICBFcnJvciBNaXNzZXMgLSBOdW1iZXIgb2YgbWlzc2VzIGR1ZSB0byBlcnJvcnMgc3VjaCBhcyBiYWQgYWRkcmVzcwotICAgICAgICAgICAgICBhbmQgcGVybWlzc2lvbiB2aW9sYXRpb25zLiAgVGhpcyBpbmNsdWRlcyBrZXJuZWwgYWNjZXNzIG9mCi0gICAgICAgICAgICAgIGJhZCB1c2VyIGFkZHJlc3NlcyB0aGF0IGFyZSBmaXhlZCB1cCBieSB0aGUgdHJhcCBoYW5kbGVyLgotCi0gIE5vdGUgdGhhdCBjYWxjdWxhdGlvbiBvZiB0aGUgZGF0YSBkaXNwbGF5ZWQgZnJvbSAvcHJvYy9wcGNfaHRhYiB0YWtlcwotICBhIGxvbmcgdGltZSBhbmQgc3BlbmRzIGEgZ3JlYXQgZGVhbCBvZiB0aW1lIGluIHRoZSBrZXJuZWwuICBJdCB3b3VsZAotICBiZSBxdWl0ZSBoYXJkIG9uIHBlcmZvcm1hbmNlIHRvIHJlYWQgdGhpcyBmaWxlIGNvbnN0YW50bHkuICBJbiB0aW1lCi0gIHRoZXJlIG1heSBiZSBhIGNvdW50ZXIgaW4gdGhlIGtlcm5lbCB0aGF0IGFsbG93cyBzdWNjZXNzaXZlIHJlYWRzIGZyb20KLSAgdGhpcyBmaWxlIG9ubHkgYWZ0ZXIgYSBnaXZlbiBhbW91bnQgb2YgdGltZSBoYXMgcGFzc2VkIHRvIHJlZHVjZSB0aGUKLSAgcG9zc2liaWxpdHkgb2YgYSB1c2VyIHNsb3dpbmcgdGhlIHN5c3RlbSBieSByZWFkaW5nIHRoaXMgZmlsZS4KLQotMi4gV3JpdGluZwotCi0gIFdyaXRpbmcgdG8gdGhlIHBwY19odGFiIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YKLSAgdGhlIHBvd2VycGMgUFRFIGhhc2ggdGFibGUgYW5kIHNldHVwIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuCi0KLSAgUmVzaXppbmcgdGhlIFBURSBoYXNoIHRhYmxlIGlzIG5vdCBlbmFibGVkIHJpZ2h0IG5vdyBkdWUgdG8gbWFueQotICBjb21wbGljYXRpb25zIHdpdGggbW92aW5nIHRoZSBoYXNoIHRhYmxlLCByZWhhc2hpbmcgdGhlIGVudHJpZXMKLSAgYW5kIG1hbnkgbWFueSBTTVAgaXNzdWVzIHRoYXQgd291bGQgaGF2ZSB0byBiZSBkZWFsdCB3aXRoLgotCi0gIFdyaXRlIG9wdGlvbnMgdG8gcHBjX2h0YWI6Ci0gIAotICAgLSBUbyBzZXQgdGhlIHNpemUgb2YgdGhlIGhhc2ggdGFibGUgdG8gNjRLYjoKLQotICAgICAgZWNobyAnc2l6ZSA2NCcgPiAvcHJvYy9wcGNfaHRhYgotCi0gICAgIFRoZSBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NCBhbmQgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KLSAgICAgNjQuCi0KLSAgIC0gVG8gdHVybiBvZmYgcGVyZm9ybWFuY2UgbW9uaXRvcmluZzoKLQotICAgICAgZWNobyAnb2ZmJyA+IC9wcm9jL3BwY19odGFiCi0KLSAgIC0gVG8gcmVzZXQgdGhlIGNvdW50ZXJzIHdpdGhvdXQgY2hhbmdpbmcgd2hhdCB0aGV5J3JlIGNvdW50aW5nOgotCi0gICAgICBlY2hvICdyZXNldCcgPiAvcHJvYy9wcGNfaHRhYgotCi0gICAgIE5vdGUgdGhhdCBjb3VudGluZyB3aWxsIGNvbnRpbnVlIGFmdGVyIHRoZSByZXNldCBpZiBpdCBpcyBlbmFibGVkLgotCi0gICAtIFRvIGNvdW50IG9ubHkgZXZlbnRzIGluIHVzZXIgbW9kZSBvciBvbmx5IGluIGtlcm5lbCBtb2RlOgotCi0gICAgICBlY2hvICd1c2VyJyA+IC9wcm9jL3BwY19odGFiCi0gICAgICAgLi4ub3IuLi4KLSAgICAgIGVjaG8gJ2tlcm5lbCcgPiAvcHJvYy9wcGNfaHRhYgotCi0gICAgIE5vdGUgdGhhdCB0aGVzZSB0d28gb3B0aW9ucyBhcmUgZXhjbHVzaXZlIG9mIG9uZSBhbm90aGVyIGFuZCB0aGUKLSAgICAgbGFjayBvZiBlaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucyBjb3VudHMgdXNlciBhbmQga2VybmVsLgotICAgICBVc2luZyAncmVzZXQnIGFuZCAnb2ZmJyByZXNldCB0aGVzZSBmbGFncy4KLQotICAgLSBUaGUgNjA0IGhhcyAyIHBlcmZvcm1hbmNlIGNvdW50ZXJzIHdoaWNoIGNhbiBlYWNoIGNvdW50IGV2ZW50cyBmcm9tCi0gICAgIGEgc3BlY2lmaWMgc2V0IG9mIGV2ZW50cy4gIFRoZXNlIHNldHMgYXJlIGRpc2pvaW50IHNvIGl0IGlzIG5vdAotICAgICBwb3NzaWJsZSB0byBjb3VudCBfYW55XyBjb21iaW5hdGlvbiBvZiAyIGV2ZW50cy4gIE9uZSBldmVudCBjYW4KLSAgICAgYmUgY291bnRlZCBieSBQTUMxIGFuZCBvbmUgYnkgUE1DMi4KLQotICAgICBUbyBzdGFydCBjb3VudGluZyBhIHBhcnRpY3VsYXIgZXZlbnQgdXNlOgotCi0gICAgICBlY2hvICdldmVudCcgPiAvcHJvYy9wcGNfaHRhYgotCi0gICAgIGFuZCBjaG9vc2UgZnJvbSB0aGVzZSBldmVudHM6Ci0KLSAgICAgUE1DMQotICAgICAtLS0tCi0gICAgICAnaWMgbWlzcycgLSBpbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMKLSAgICAgICdkdGxiJyAtIGRhdGEgdGxiIG1pc3NlcyAobm90IGhhc2ggdGFibGUgbWlzc2VzKQotCi0gICAgIFBNQzIKLSAgICAgLS0tLQotICAgICAgJ2RjIG1pc3MnIC0gZGF0YSBjYWNoZSBtaXNzZXMKLSAgICAgICdpdGxiJyAtIGluc3RydWN0aW9uIHRsYiBtaXNzZXMgKG5vdCBoYXNoIHRhYmxlIG1pc3NlcykKLSAgICAgICdsb2FkIG1pc3MgdGltZScgLSBjeWNsZXMgdG8gY29tcGxldGUgYSBsb2FkIG1pc3MKLQotMy4gQnVncwotCi0gIFRoZSBQTUMxIGFuZCBQTUMyIGNvdW50ZXJzIGNhbiBvdmVyZmxvdyBhbmQgZ2l2ZSBubyBpbmRpY2F0aW9uIG9mIHRoYXQKLSAgaW4gL3Byb2MvcHBjX2h0YWIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvc21wLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9zbXAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjU4MWI4Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9zbXAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCBMaW51eC9QUEMgU01QIG1vZGUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGlzIGRvY3VtZW50IGFuZCB0aGUgcmVsYXRlZCBjb2RlIHdhcyB3cml0dGVuIGJ5IG1lCi0oQ29ydCBEb3VnYW4sIGNvcnRAZnNtbGFicy5jb20pIHBsZWFzZSBlbWFpbCBtZSBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMsCi1jb21tZW50cyBvciBjb3JyZWN0aW9ucy4KLQotTGFzdCBDaGFuZ2U6IDMuMzEuOTkKLQotSWYgeW91IHdhbnQgdG8gaGVscCBieSB3cml0aW5nIGNvZGUgb3IgdGVzdGluZyBkaWZmZXJlbnQgaGFyZHdhcmUgcGxlYXNlCi1lbWFpbCBtZSEKLQotMS4gU3RhdGUgb2YgU3VwcG9ydGVkIEhhcmR3YXJlCi0KLSAgUG93ZXJTdXJnZSBBcmNoaXRlY3R1cmUgLSB0ZXN0ZWQgb24gVU1BWCBzOTAwLCBBcHBsZSA5NjAwCi0gICAgVGhlIHNlY29uZCBwcm9jZXNzb3Igb24gdGhpcyBtYWNoaW5lIGJvb3RzIHVwIGp1c3QgZmluZSBhbmQKLSAgICBlbnRlcnMgaXRzIGlkbGUgbG9vcC4gIEhvcGVmdWxseSBhIGNvbXBsZXRlbHkgd29ya2luZyBTTVAga2VybmVsCi0gICAgb24gdGhpcyBtYWNoaW5lIHdpbGwgYmUgZG9uZSBzaG9ydGx5LgotCi0gICAgVGhlIGNvZGUgbWFrZXMgdGhlIGFzc3VtcHRpb24gb2Ygb25seSB0d28gcHJvY2Vzc29ycy4gIFRoZSBjaGFuZ2VzCi0gICAgbmVjZXNzYXJ5IHRvIHdvcmsgd2l0aCBhbnkgbnVtYmVyIHdvdWxkIG5vdCBiZSBvdmVybHkgZGlmZmljdWx0IGJ1dAotICAgIEkgZG9uJ3QgaGF2ZSBhbnkgbWFjaGluZXMgd2l0aCA+MiBwcm9jZXNzb3JzIHNvIGl0J3Mgbm90IGhpZ2ggb24gbXkKLSAgICBsaXN0IG9mIHByaW9yaXRpZXMuICBJZiBhbnlvbmUgZWxzZSB3b3VsZCBsaWtlIGRvIHRvIHRoZSB3b3JrIGVtYWlsCi0gICAgbWUgYW5kIEkgY2FuIHBvaW50IG91dCB0aGUgcGxhY2VzIHRoYXQgbmVlZCBjaGFuZ2VkLiAgSWYgeW91IGhhdmUgPjIKLSAgICBwcm9jZXNzb3JzIGFuZCBkb24ndCB3YW50IHRvIGFkZCBzdXBwb3J0IHlvdXJzZWxmIGxldCBtZSBrbm93IGFuZCBJCi0gICAgY2FuIHRha2UgYSBsb29rIGludG8gaXQuCi0KLSAgQmVCb3gKLSAgICBCZUJveCBzdXBwb3J0IGhhc24ndCBiZWVuIGFkZGVkIHRvIHRoZSAyLjEuWCBrZXJuZWxzIGZyb20gMi4wLlgKLSAgICBidXQgd29yayBpcyBiZWluZyBkb25lIGFuZCBTTVAgc3VwcG9ydCBmb3IgQmVCb3ggaXMgaW4gdGhlIHdvcmtzLgotCi0gIENIUlAKLSAgICBDSFJQIFNNUCB3b3JrcyBhbmQgaXMgZmFpcmx5IHNvbGlkLiAgSXQncyBiZWVuIHRlc3RlZCBvbiB0aGUgSUJNIEY1MAotICAgIHdpdGggNCBwcm9jZXNzb3JzIGZvciBxdWl0ZSBzb21lIHRpbWUgbm93LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZCBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQKaW5kZXggMzc3OTZmZS4uZWFhNDgwMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCkBAIC00MDksNyArNDA5LDcgQEAKIAltZWdhcmFpZF9tYm94X3ByZXBhcmVfcHRocnUsIG1lZ2FyYWlkX21ib3hfcHJlcGFyZV9lcHRocnUsCiAJbWVnYXJhaWRfYnVzeXdhaXRfbWJveAogCi0JCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJLSBBbmRyZXcgTW9ydG9uLCAwOC4xOS4yMDA0CiAJCWxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CiAKIAkiU29tZXRoaW5nIGVsc2UgdG8gY2xlYW4gdXAgYWZ0ZXIgaW5jbHVzaW9uOiBldmVyeSBpbnN0YW5jZSBvZiBhbgpAQCAtNDcxLDEzICs0NzEsMTMgQEAKIHZpaS4JTW92ZSB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB0aGUgbWFuYWdlbWVudCBtb2R1bGUgZnJvbQogCW1lZ2FyYWlkX21tLmggdG8gbWVnYXJhaWRfbW0uYwogCi0JCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJLSBBbmRyZXcgTW9ydG9uLCAwOC4xOS4yMDA0CiAJCWxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CiAKIHZpaWkuCUNoYW5nZSBkZWZhdWx0IHZhbHVlcyBmb3IgTUVHQVJBSURfTkVXR0VOLCBNRUdBUkFJRF9NTSwgYW5kCiAJTUVHQVJBSURfTUFJTEJPWCB0byAnbicgaW4gS2NvbmZpZy5tZWdhcmFpZAogCi0JCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJLSBBbmRyZXcgTW9ydG9uLCAwOC4xOS4yMDA0CiAJCWxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CiAKIGl4LglyZXBsYWNlIHVkZWxheSB3aXRoIG1zbGVlcApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zcGkvcHhhMnh4IGIvRG9jdW1lbnRhdGlvbi9zcGkvcHhhMnh4CmluZGV4IGJiZThkZWUuLjZiYjkxNmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eAorKysgYi9Eb2N1bWVudGF0aW9uL3NwaS9weGEyeHgKQEAgLTk2LDcgKzk2LDcgQEAKIGluZm9ybWF0aW9uIHZpYSB0aGUgc3RydWN0dXJlICJweGEyeHhfc3BpX2NoaXAiIGZvdW5kIGluCiAiYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eF9zcGkuaCIuICBUaGUgcHhhMnh4X3NwaSBtYXN0ZXIgY29udHJvbGxlciBkcml2ZXIKIHdpbGwgdXNlcyB0aGUgY29uZmlndXJhdGlvbiB3aGVuZXZlciB0aGUgZHJpdmVyIGNvbW11bmljYXRlcyB3aXRoIHRoZSBzbGF2ZQotZGV2aWNlLgorZGV2aWNlLiBBbGwgZmllbGRzIGFyZSBvcHRpb25hbC4KIAogc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCB7CiAJdTggdHhfdGhyZXNob2xkOwpAQCAtMTEyLDE0ICsxMTIsMTcgQEAKIHBlcmZvcm1hbmNlIG9mIHB4YTJ4eF9zcGkgZHJpdmVyIGFuZCBtaXNjb25maWd1cmF0aW9uIHdpbGwgcmVzdWx0IGluIHJ4CiBmaWZvIG92ZXJydW5zIChlc3BlY2lhbGx5IGluIFBJTyBtb2RlIHRyYW5zZmVycykuIEdvb2QgZGVmYXVsdCB2YWx1ZXMgYXJlCiAKLQkudHhfdGhyZXNob2xkID0gMTIsCi0JLnJ4X3RocmVzaG9sZCA9IDQsCisJLnR4X3RocmVzaG9sZCA9IDgsCisJLnJ4X3RocmVzaG9sZCA9IDgsCisKK1RoZSByYW5nZSBpcyAxIHRvIDE2IHdoZXJlIHplcm8gaW5kaWNhdGVzICJ1c2UgZGVmYXVsdCIuCiAKIFRoZSAicHhhMnh4X3NwaV9jaGlwLmRtYV9idXJzdF9zaXplIiBmaWVsZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBQWEEyeHggRE1BCiBlbmdpbmUgYW5kIGlzIHJlbGF0ZWQgdGhlICJzcGlfZGV2aWNlLmJpdHNfcGVyX3dvcmQiIGZpZWxkLiAgUmVhZCBhbmQgdW5kZXJzdGFuZAogdGhlIFBYQTJ4eCAiRGV2ZWxvcGVyIE1hbnVhbCIgc2VjdGlvbnMgb24gdGhlIERNQSBjb250cm9sbGVyIGFuZCBTU1AgQ29udHJvbGxlcnMKIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCB2YWx1ZS4gQW4gU1NQIGNvbmZpZ3VyZWQgZm9yIGJ5dGUtd2lkZSB0cmFuc2ZlcnMgd291bGQKLXVzZSBhIHZhbHVlIG9mIDguCit1c2UgYSB2YWx1ZSBvZiA4LiBUaGUgZHJpdmVyIHdpbGwgZGV0ZXJtaW5lIGEgcmVhc29uYWJsZSBkZWZhdWx0IGlmCitkbWFfYnVyc3Rfc2l6ZSA9PSAwLgogCiBUaGUgInB4YTJ4eF9zcGlfY2hpcC50aW1lb3V0IiBmaWVsZHMgaXMgdXNlZCB0byBlZmZpY2llbnRseSBoYW5kbGUKIHRyYWlsaW5nIGJ5dGVzIGluIHRoZSBTU1AgcmVjZWl2ZXIgZmlmby4gIFRoZSBjb3JyZWN0IHZhbHVlIGZvciB0aGlzIGZpZWxkIGlzCkBAIC0xMzcsNyArMTQwLDEzIEBACiBOVUxMLCB0aGUgcHhhMnh4X3NwaSBtYXN0ZXIgY29udHJvbGxlciBkcml2ZXIgYXNzdW1lcyB0aGF0IHRoZSBTU1AgcG9ydCBpcwogY29uZmlndXJlZCB0byB1c2UgU1NQRlJNIGluc3RlYWQuCiAKLU5TU1AgU0FMVkUgU0FNUExFCitOT1RFOiB0aGUgU1BJIGRyaXZlciBjYW5ub3QgY29udHJvbCB0aGUgY2hpcCBzZWxlY3QgaWYgU1NQRlJNIGlzIHVzZWQsIHNvIHRoZQorY2hpcHNlbGVjdCBpcyBkcm9wcGVkIGFmdGVyIGVhY2ggc3BpX3RyYW5zZmVyLiAgTW9zdCBkZXZpY2VzIG5lZWQgY2hpcCBzZWxlY3QKK2Fzc2VydGVkIGFyb3VuZCB0aGUgY29tcGxldGUgbWVzc2FnZS4gIFVzZSBTU1BGUk0gYXMgYSBHUElPICh0aHJvdWdoIGNzX2NvbnRyb2wpCit0byBhY2NvbW9kYXRlIHRoZXNlIGNoaXBzLgorCisKK05TU1AgU0xBVkUgU0FNUExFCiAtLS0tLS0tLS0tLS0tLS0tLQogVGhlIHB4YTJ4eF9zcGlfY2hpcCBzdHJ1Y3R1cmUgaXMgcGFzc2VkIHRvIHRoZSBweGEyeHhfc3BpIGRyaXZlciBpbiB0aGUKICJzcGlfYm9hcmRfaW5mby5jb250cm9sbGVyX2RhdGEiIGZpZWxkLiBCZWxvdyBpcyBhIHNhbXBsZSBjb25maWd1cmF0aW9uIHVzaW5nCkBAIC0yMDYsMTggKzIxNSwyMSBAQAogCiBETUEgYW5kIFBJTyBJL08gU3VwcG9ydAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBweGEyeHhfc3BpIGRyaXZlciBzdXBwb3J0IGJvdGggRE1BIGFuZCBpbnRlcnJ1cHQgZHJpdmVuIFBJTyBtZXNzYWdlCi10cmFuc2ZlcnMuICBUaGUgZHJpdmVyIGRlZmF1bHRzIHRvIFBJTyBtb2RlIGFuZCBETUEgdHJhbnNmZXJzIG11c3QgZW5hYmxlZCBieQotc2V0dGluZyB0aGUgImVuYWJsZV9kbWEiIGZsYWcgaW4gdGhlICJweGEyeHhfc3BpX21hc3RlciIgc3RydWN0dXJlIGFuZAotZW5zdXJpbmcgdGhhdCB0aGUgInB4YTJ4eF9zcGlfY2hpcC5kbWFfYnVyc3Rfc2l6ZSIgZmllbGQgaXMgbm9uLXplcm8uICBUaGUgRE1BCi1tb2RlIHN1cHBvcnQgYm90aCBjb2hlcmVudCBhbmQgc3RyZWFtIGJhc2VkIERNQSBtYXBwaW5ncy4KK1RoZSBweGEyeHhfc3BpIGRyaXZlciBzdXBwb3J0cyBib3RoIERNQSBhbmQgaW50ZXJydXB0IGRyaXZlbiBQSU8gbWVzc2FnZQordHJhbnNmZXJzLiAgVGhlIGRyaXZlciBkZWZhdWx0cyB0byBQSU8gbW9kZSBhbmQgRE1BIHRyYW5zZmVycyBtdXN0IGJlIGVuYWJsZWQKK2J5IHNldHRpbmcgdGhlICJlbmFibGVfZG1hIiBmbGFnIGluIHRoZSAicHhhMnh4X3NwaV9tYXN0ZXIiIHN0cnVjdHVyZS4gIFRoZSBETUEKK21vZGUgc3VwcG9ydHMgYm90aCBjb2hlcmVudCBhbmQgc3RyZWFtIGJhc2VkIERNQSBtYXBwaW5ncy4KIAogVGhlIGZvbGxvd2luZyBsb2dpYyBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBJL08gdG8gYmUgdXNlZCBvbgogYSBwZXIgInNwaV90cmFuc2ZlciIgYmFzaXM6CiAKLWlmICFlbmFibGVfZG1hIG9yIGRtYV9idXJzdF9zaXplID09IDAgdGhlbgoraWYgIWVuYWJsZV9kbWEgdGhlbgogCWFsd2F5cyB1c2UgUElPIHRyYW5zZmVycwogCitpZiBzcGlfbWVzc2FnZS5sZW4gPiA4MTkxIHRoZW4KKwlwcmludCAicmF0ZSBsaW1pdGVkIiB3YXJuaW5nCisJdXNlIFBJTyB0cmFuc2ZlcnMKKwogaWYgc3BpX21lc3NhZ2UuaXNfZG1hX21hcHBlZCBhbmQgcnhfZG1hX2J1ZiAhPSAwIGFuZCB0eF9kbWFfYnVmICE9IDAgdGhlbgogCXVzZSBjb2hlcmVudCBETUEgbW9kZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAppbmRleCBlMWZmMGQ5Li5iZGU3OTllIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKQEAgLTM2OSw0ICszNjksNSBAQAogICAyIC0gQSBtb2R1bGUgd2FzIGZvcmNlIGxvYWRlZCBieSBpbnNtb2QgLWYuCiAgICAgICBTZXQgYnkgbW9kdXRpbHMgPj0gMi40LjkgYW5kIG1vZHVsZS1pbml0LXRvb2xzLgogICA0IC0gVW5zYWZlIFNNUCBwcm9jZXNzb3JzOiBTTVAgd2l0aCBDUFVzIG5vdCBkZXNpZ25lZCBmb3IgU01QLgorIDY0IC0gQSBtb2R1bGUgZnJvbSBkcml2ZXJzL3N0YWdpbmcgd2FzIGxvYWRlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dAppbmRleCA1Y2UwOTUyLi4xMGEwMjYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dApAQCAtOTUsNyArOTUsOSBAQAogCiAncCcgICAgIC0gV2lsbCBkdW1wIHRoZSBjdXJyZW50IHJlZ2lzdGVycyBhbmQgZmxhZ3MgdG8geW91ciBjb25zb2xlLgogCi0ncScgICAgIC0gV2lsbCBkdW1wIGEgbGlzdCBvZiBhbGwgcnVubmluZyB0aW1lcnMuCisncScgICAgIC0gV2lsbCBkdW1wIHBlciBDUFUgbGlzdHMgb2YgYWxsIGFybWVkIGhydGltZXJzIChidXQgTk9UIHJlZ3VsYXIKKyAgICAgICAgICB0aW1lcl9saXN0IHRpbWVycykgYW5kIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGFsbAorICAgICAgICAgIGNsb2NrZXZlbnQgZGV2aWNlcy4KIAogJ3InICAgICAtIFR1cm5zIG9mZiBrZXlib2FyZCByYXcgbW9kZSBhbmQgc2V0cyBpdCB0byBYTEFURS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvYW5jaG9ycy50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9hbmNob3JzLnR4dAppbmRleCA1ZTZiNjRjLi42ZjI0ZjU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9hbmNob3JzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9hbmNob3JzLnR4dApAQCAtNTIsNiArNTIsMTEgQEAKIHRoZSBjYWxsIHJldHVybnMuIFRoZXkgbWF5IGJlIHVubGlua2VkIGxhdGVyIGJ1dCB3aWxsIGJlIHVubGlua2VkIGluCiBmaW5pdGUgdGltZS4KIAordXNiX3NjdXR0bGVfYW5jaG9yZWRfdXJicygpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIFVSQnMgb2YgYW4gYW5jaG9yIGFyZSB1bmFuY2hvcmVkIGVuIG1hc3NlLgorCiB1c2Jfd2FpdF9hbmNob3JfZW1wdHlfdGltZW91dCgpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTU5LDQgKzY0LDE2IEBACiBvciBhIHRpbWVvdXQsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsIHRlbGwgeW91CiB3aGV0aGVyIHRoZSB0aW1lb3V0IHdhcyByZWFjaGVkLgogCit1c2JfYW5jaG9yX2VtcHR5KCkKKy0tLS0tLS0tLS0tLS0tLS0tLQogCitSZXR1cm5zIHRydWUgaWYgbm8gVVJCcyBhcmUgYXNzb2NpYXRlZCB3aXRoIGFuIGFuY2hvci4gTG9ja2luZworaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5LgorCit1c2JfZ2V0X2Zyb21fYW5jaG9yKCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXR1cm5zIHRoZSBvbGRlc3QgYW5jaG9yZWQgVVJCIG9mIGFuIGFuY2hvci4gVGhlIFVSQiBpcyB1bmFuY2hvcmVkCithbmQgcmV0dXJuZWQgd2l0aCBhIHJlZmVyZW5jZS4gQXMgeW91IG1heSBtaXggVVJCcyB0byBzZXZlcmFsCitkZXN0aW5hdGlvbnMgaW4gb25lIGFuY2hvciB5b3UgaGF2ZSBubyBndWFyYW50ZWUgdGhlIGNocm9ub2xvZ2ljYWxseQorZmlyc3Qgc3VibWl0dGVkIFVSQiBpcyByZXR1cm5lZC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9taXNjX3VzYnNldnNlZy50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9taXNjX3VzYnNldnNlZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY2YmU0ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL21pc2NfdXNic2V2c2VnLnR4dApAQCAtMCwwICsxLDQ2IEBACitVU0IgNy1TZWdtZW50IE51bWVyaWMgRGlzcGxheQorTWFudWZhY3R1cmVkIGJ5IERlbGNvbSBFbmdpbmVlcmluZworCitEZXZpY2UgSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLQorVVNCIFZFTkRPUl9JRAkweDBmYzUKK1VTQiBQUk9EVUNUX0lECTB4MTIyNworQm90aCB0aGUgNiBjaGFyYWN0ZXIgYW5kIDggY2hhcmFjdGVyIGRpc3BsYXlzIGhhdmUgUFJPRFVDVF9JRCwKK2FuZCBhY2NvcmRpbmcgdG8gRGVsY29tIEVuZ2luZWVyaW5nIG5vIHF1ZXJ5YWJsZSBpbmZvcm1hdGlvbgorY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIGRldmljZSB0byB0ZWxsIHRoZW0gYXBhcnQuCisKK0RldmljZSBNb2RlcworLS0tLS0tLS0tLS0tCitCeSBkZWZhdWx0LCB0aGUgZHJpdmVyIGFzc3VtZXMgdGhlIGRpc3BsYXkgaXMgb25seSA2IGNoYXJhY3RlcnMKK1RoZSBtb2RlIGZvciA2IGNoYXJhY3RlcnMgaXM6CisJTVNCIDB4MDY7IExTQiAweDNmCitGb3IgdGhlIDggY2hhcmFjdGVyIGRpc3BsYXk6CisJTVNCIDB4MDg7IExTQiAweGZmCitUaGUgZGV2aWNlIGNhbiBhY2NlcHQgInRleHQiIGVpdGhlciBpbiByYXcsIGhleCwgb3IgYXNjaWkgdGV4dG1vZGUuCityYXcgY29udHJvbHMgZWFjaCBzZWdtZW50IG1hbnVhbGx5LAoraGV4IGV4cGVjdHMgYSB2YWx1ZSBiZXR3ZWVuIDAtMTUgcGVyIGNoYXJhY3RlciwKK2FzY2lpIGV4cGVjdHMgYSB2YWx1ZSBiZXR3ZWVuICcwJy0nOScgYW5kICdBJy0nRicuCitUaGUgZGVmYXVsdCBpcyBhc2NpaS4KKworRGV2aWNlIE9wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLQorMS4JVHVybiBvbiB0aGUgZGV2aWNlOgorCWVjaG8gMSA+IC9zeXMvYnVzL3VzYi8uLi4vcG93ZXJlZAorMi4JU2V0IHRoZSBkZXZpY2UncyBtb2RlOgorCWVjaG8gJG1vZGVfbXNiID4gL3N5cy9idXMvdXNiLy4uLi9tb2RlX21zYgorCWVjaG8gJG1vZGVfbHNiID4gL3N5cy9idXMvdXNiLy4uLi9tb2RlX2xzYgorMy4JU2V0IHRoZSB0ZXh0bW9kZToKKwllY2hvICR0ZXh0bW9kZSA+IC9zeXMvYnVzL3VzYi8uLi4vdGV4dG1vZGUKKzQuCXNldCB0aGUgdGV4dCAoZm9yIGV4YW1wbGUpOgorCWVjaG8gIjEyM0FCQyIgPiAvc3lzL2J1cy91c2IvLi4uL3RleHQgKGFzY2lpKQorCWVjaG8gIkExQjIiID4gL3N5cy9idXMvdXNiLy4uLi90ZXh0IChhc2NpaSkKKwllY2hvIC1uZSAiXHgwMVx4MDJceDAzIiA+IC9zeXMvYnVzL3VzYi8uLi4vdGV4dCAoaGV4KQorNS4JU2V0IHRoZSBkZWNpbWFsIHBsYWNlcy4KKwlUaGUgZGV2aWNlIGhhcyBlaXRoZXIgNiBvciA4IGRlY2ltYWwgcG9pbnRzLgorCXRvIHNldCB0aGUgbnRoIGRlY2ltYWwgcGxhY2UgY2FsY3VsYXRlIDEwICoqIG4KKwlhbmQgZWNobyBpdCBpbiB0byAvc3lzL2J1cy91c2IvLi4uL2RlY2ltYWxzCisJVG8gc2V0IG11bHRpcGxlIGRlY2ltYWxzIHBvaW50cyBzdW0gdXAgZWFjaCBwb3dlci4KKwlGb3IgZXhhbXBsZSwgdG8gc2V0IHRoZSAwdGggYW5kIDNyZCBkZWNpbWFsIHBsYWNlCisJZWNobyAxMDAxID4gL3N5cy9idXMvdXNiLy4uLi9kZWNpbWFscworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQKaW5kZXggOWQzMTE0MC4uZTQ4ZWExZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvcG93ZXItbWFuYWdlbWVudC50eHQKQEAgLTM1MCwxMiArMzUwLDEyIEBACiAKIFRoZXJlIGFsc28gYXJlIGEgY291cGxlIG9mIHV0aWxpdHkgcm91dGluZXMgZHJpdmVycyBjYW4gdXNlOgogCi0JdXNiX2F1dG9wbV9lbmFibGUoKSBzZXRzIHBtX3VzYWdlX2NudCB0byAxIGFuZCB0aGVuIGNhbGxzCi0JdXNiX2F1dG9wbV9zZXRfaW50ZXJmYWNlKCksIHdoaWNoIHdpbGwgYXR0ZW1wdCBhbiBhdXRvcmVzdW1lLgotCi0JdXNiX2F1dG9wbV9kaXNhYmxlKCkgc2V0cyBwbV91c2FnZV9jbnQgdG8gMCBhbmQgdGhlbiBjYWxscworCXVzYl9hdXRvcG1fZW5hYmxlKCkgc2V0cyBwbV91c2FnZV9jbnQgdG8gMCBhbmQgdGhlbiBjYWxscwogCXVzYl9hdXRvcG1fc2V0X2ludGVyZmFjZSgpLCB3aGljaCB3aWxsIGF0dGVtcHQgYW4gYXV0b3N1c3BlbmQuCiAKKwl1c2JfYXV0b3BtX2Rpc2FibGUoKSBzZXRzIHBtX3VzYWdlX2NudCB0byAxIGFuZCB0aGVuIGNhbGxzCisJdXNiX2F1dG9wbV9zZXRfaW50ZXJmYWNlKCksIHdoaWNoIHdpbGwgYXR0ZW1wdCBhbiBhdXRvcmVzdW1lLgorCiBUaGUgY29udmVudGlvbmFsIHVzYWdlIHBhdHRlcm4gaXMgdGhhdCBhIGRyaXZlciBjYWxscwogdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKCkgaW4gaXRzIG9wZW4gcm91dGluZSBhbmQKIHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZSgpIGluIGl0cyBjbG9zZSBvciByZWxlYXNlIHJvdXRpbmUuICBCdXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYXUwODI4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5hdTA4MjgKaW5kZXggYWEwNWU1Yi4uZDVjYjRlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5hdTA4MjgKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5hdTA4MjgKQEAgLTEsNSArMSw1IEBACiAgIDAgLT4gVW5rbm93biBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXUwODI4KQotICAxIC0+IEhhdXBwYXVnZSBIVlI5NTBRICAgICAgICAgICAgICAgICAgICAgICAgKGF1MDgyOCkgICAgICAgIFsyMDQwOjcyMDAsMjA0MDo3MjEwLDIwNDA6NzIxNywyMDQwOjcyMWIsMjA0MDo3MjFmLDIwNDA6NzI4MCwwZmQ5OjAwMDhdCisgIDEgLT4gSGF1cHBhdWdlIEhWUjk1MFEgICAgICAgICAgICAgICAgICAgICAgICAoYXUwODI4KSAgICAgICAgWzIwNDA6NzIwMCwyMDQwOjcyMTAsMjA0MDo3MjE3LDIwNDA6NzIxYiwyMDQwOjcyMWUsMjA0MDo3MjFmLDIwNDA6NzI4MCwwZmQ5OjAwMDhdCiAgIDIgLT4gSGF1cHBhdWdlIEhWUjg1MCAgICAgICAgICAgICAgICAgICAgICAgICAoYXUwODI4KSAgICAgICAgWzIwNDA6NzI0MF0KICAgMyAtPiBEVmlDTyBGdXNpb25IRFRWIFVTQiAgICAgICAgICAgICAgICAgICAgIChhdTA4MjgpICAgICAgICBbMGZlOTpkNjIwXQogICA0IC0+IEhhdXBwYXVnZSBIVlI5NTBRIHJldiB4eEY4ICAgICAgICAgICAgICAgKGF1MDgyOCkgICAgICAgIFsyMDQwOjcyMDEsMjA0MDo3MjExLDIwNDA6NzI4MV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0diBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgppbmRleCBmMzJlZmI2Li42MGJhNjY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2CkBAIC0xNTAsMyArMTUwLDQgQEAKIDE0OSAtPiBUeXBob29uIFRWLVR1bmVyIFBDSSAoNTA2ODQpCiAxNTAgLT4gR2VvdmlzaW9uIEdWLTYwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDhhOjc2M2NdCiAxNTEgLT4gS296dW1pIEtUVi0wMUMKKzE1MiAtPiBFbmNvcmUgRU5MIFRWLUZNLTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwMDA6MTgwMV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQppbmRleCBmMGU2MTNiLi42NDgyM2NjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CkBAIC05LDMgKzksNSBAQAogICA4IC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIxNzAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDo4MTAxXQogICA5IC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIxNDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDo4MDEwXQogIDEwIC0+IERWaUNPIEZ1c2lvbkhEVFY3IER1YWwgRXhwcmVzcyAgICAgICAgICAgICAgICAgICAgICBbMThhYzpkNjE4XQorIDExIC0+IERWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgRHVhbCBFeHByZXNzICAgICAgICAgICAgICAgICBbMThhYzpkYjc4XQorIDEyIC0+IExlYWR0ZWsgV2luZmFzdCBQeERWUjMyMDAgSCAgICAgICAgICAgICAgICAgICAgICAgICBbMTA3ZDo2NjgxXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CmluZGV4IDdjZjU2ODUuLmE1MjI3ZTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKQEAgLTY2LDMgKzY2LDExIEBACiAgNjUgLT4gRFZpQ08gRnVzaW9uSERUViA3IEdvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmQ2MTBdCiAgNjYgLT4gUHJvbGluayBQaXhlbHZpZXcgTVBFRyA4MDAwR1QgICAgICAgICAgICAgICAgICAgICAgIFsxNTU0OjQ5MzVdCiAgNjcgLT4gS3dvcmxkIFBsdXNUViBIRCBQQ0kgMTIwIChBVFNDIDEyMCkgICAgICAgICAgICAgICAgIFsxN2RlOjA4YzFdCisgNjggLT4gSGF1cHBhdWdlIFdpblRWLUhWUjQwMDAgRFZCLVMvUzIvVC9IeWJyaWQgICAgICAgICAgIFswMDcwOjY5MDAsMDA3MDo2OTA0LDAwNzA6NjkwMl0KKyA2OSAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSNDAwMChMaXRlKSBEVkItUy9TMiAgICAgICAgICAgICAgWzAwNzA6NjkwNSwwMDcwOjY5MDZdCisgNzAgLT4gVGVWaWkgUzQ2MCBEVkItUy9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkNDYwOjkwMjJdCisgNzEgLT4gT21pY29tIFNTNCBEVkItUy9TMiBQQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBMDQ0OjIwMTFdCisgNzIgLT4gVEJTIDg5MjAgRFZCLVMvUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs4OTIwOjg4ODhdCisgNzMgLT4gVGVWaWkgUzQyMCBEVkItUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkNDIwOjkwMjJdCisgNzQgLT4gUHJvbGluayBQaXhlbHZpZXcgR2xvYmFsIEV4dHJlbWUgICAgICAgICAgICAgICAgICAgIFsxNTU0OjQ5NzZdCisgNzUgLT4gUFJPRiA3MzAwIERWQi1TL1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtCMDMzOjMwMzNdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CmluZGV4IDUzNDQ5Y2IuLjE4N2NjNDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CkBAIC0xLDUgKzEsNSBAQAogICAwIC0+IFVua25vd24gRU0yODAwIHZpZGVvIGdyYWJiZXIgICAgICAgICAgICAgKGVtMjgwMCkgICAgICAgIFtlYjFhOjI4MDBdCi0gIDEgLT4gVW5rbm93biBFTTI3NTAvMjh4eCB2aWRlbyBncmFiYmVyICAgICAgICAoZW0yODIwL2VtMjg0MCkgW2ViMWE6MjgyMCxlYjFhOjI4MjEsZWIxYToyODYwLGViMWE6Mjg2MSxlYjFhOjI4NzAsZWIxYToyODgxLGViMWE6Mjg4M10KKyAgMSAtPiBVbmtub3duIEVNMjc1MC8yOHh4IHZpZGVvIGdyYWJiZXIgICAgICAgIChlbTI4MjAvZW0yODQwKSBbZWIxYToyODIwLGViMWE6Mjg2MCxlYjFhOjI4NjEsZWIxYToyODcwLGViMWE6Mjg4MSxlYjFhOjI4ODNdCiAgIDIgLT4gVGVycmF0ZWMgQ2luZXJneSAyNTAgVVNCICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzBjY2Q6MDAzNl0KICAgMyAtPiBQaW5uYWNsZSBQQ1RWIFVTQiAyICAgICAgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKSBbMjMwNDowMjA4XQogICA0IC0+IEhhdXBwYXVnZSBXaW5UViBVU0IgMiAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFsyMDQwOjQyMDAsMjA0MDo0MjAxXQpAQCAtMTIsNyArMTIsNyBAQAogIDExIC0+IFRlcnJhdGVjIEh5YnJpZCBYUyAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg4MCkgICAgICAgIFswY2NkOjAwNDJdCiAgMTIgLT4gS3dvcmxkIFBWUiBUViAyODAwIFJGICAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkKICAxMyAtPiBUZXJyYXRlYyBQcm9kaWd5IFhTICAgICAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMGNjZDowMDQ3XQotIDE0IC0+IFBpeGVsdmlldyBQcm9saW5rIFBsYXlUViBVU0IgMi4wICAgICAgICAgKGVtMjgyMC9lbTI4NDApCisgMTQgLT4gUGl4ZWx2aWV3IFByb2xpbmsgUGxheVRWIFVTQiAyLjAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgW2ViMWE6MjgyMV0KICAxNSAtPiBWLUdlYXIgUG9ja2V0VFYgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4MDApCiAgMTYgLT4gSGF1cHBhdWdlIFdpblRWIEhWUiA5NTAgICAgICAgICAgICAgICAgICAoZW0yODgzKSAgICAgICAgWzIwNDA6NjUxMywyMDQwOjY1MTcsMjA0MDo2NTFiLDIwNDA6NjUxZl0KICAxNyAtPiBQaW5uYWNsZSBQQ1RWIEhEIFBybyBTdGljayAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMjMwNDowMjI3XQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CmluZGV4IDM5ODY4YWYuLmRjNjdlZWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKQEAgLTc2LDcgKzc2LDcgQEAKICA3NSAtPiBBVmVyTWVkaWEgQVZlclRWSEQgTUNFIEExODAgICAgICAgICAgICAgIFsxNDYxOjEwNDRdCiAgNzYgLT4gU0tOZXQgTW9uc3RlclRWIE1vYmlsZSAgICAgICAgICAgICAgICAgICBbMTEzMTo0ZWU5XQogIDc3IC0+IFBpbm5hY2xlIFBDVFYgNDBpLzUwaS8xMTBpIChzYWE3MTMzKSAgICAgWzExYmQ6MDAyZV0KLSA3OCAtPiBBU1VTVGVLIFA3MTMxIER1YWwgICAgICAgICAgICAgICAgICAgICAgIFsxMDQzOjQ4NjIsMTA0Mzo0ODU3XQorIDc4IC0+IEFTVVNUZUsgUDcxMzEgRHVhbCAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDg2Ml0KICA3OSAtPiBTZWRuYS9NdWNoVFYgUEMgVFYgQ2FyZGJ1cyBUVi9SYWRpbyAoSVRPMjUgUmV2OjJCKQogIDgwIC0+IEFTVVMgRGlnaW1hdHJpeCBUViAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6MDIxMF0KICA4MSAtPiBQaGlsaXBzIFRpZ2VyIHJlZmVyZW5jZSBkZXNpZ24gICAgICAgICAgIFsxMTMxOjIwMThdCkBAIC0xNDUsMyArMTQ1LDkgQEAKIDE0NCAtPiBCZWhvbGRlciBCZWhvbGRUViBNNiBFeHRyYSAgICAgICAgICAgICAgIFs1YWNlOjYxOTNdCiAxNDUgLT4gQVZlck1lZGlhIE1pbmlQQ0kgRFZCLVQgSHlicmlkIE0xMDMgICAgICBbMTQ2MTpmNjM2XQogMTQ2IC0+IEFTVVNUZUsgUDcxMzEgQW5hbG9nCisxNDcgLT4gQXN1cyBUaWdlciAzaW4xICAgICAgICAgICAgICAgICAgICAgICAgICBbMTA0Mzo0ODc4XQorMTQ4IC0+IEVuY29yZSBFTkxUVi1GTSB2NS4zICAgICAgICAgICAgICAgICAgICAgWzFhN2Y6MjAwOF0KKzE0OSAtPiBBdmVybWVkaWEgUENJIHB1cmUgYW5hbG9nIChNMTM1QSkgICAgICAgIFsxNDYxOmYxMWRdCisxNTAgLT4gWm9naXMgUmVhbCBBbmdlbCAyMjAKKzE1MSAtPiBBRFMgVGVjaCBJbnN0YW50IEhEVFYgICAgICAgICAgICAgICAgICAgIFsxNDIxOjAzODBdCisxNTIgLT4gQXN1cyBUaWdlciBSZXY6MS4wMCAgICAgICAgICAgICAgICAgICAgICBbMTA0Mzo0ODU3XQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lciBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKaW5kZXggMGUyMzk0Ni4uNjkxZDJmMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCkBAIC03NCwzICs3NCw1IEBACiB0dW5lcj03MyAtIFNhbXN1bmcgVENQRyA2MTIxUDMwQQogdHVuZXI9NzUgLSBQaGlsaXBzIFRFQTU3NjEgRk0gUmFkaW8KIHR1bmVyPTc2IC0gWGNlaXZlIDUwMDAgdHVuZXIKK3R1bmVyPTc3IC0gVENMIHR1bmVyIE1GMDJHSVAtNU4tRQordHVuZXI9NzggLSBQaGlsaXBzIEZNRDEyMTZNRVggTUszIEh5YnJpZCBUdW5lcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dAppbmRleCA5YTNlNGQ3Li4wMDQ4MThmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dApAQCAtNyw2ICs3LDcgQEAKIHh4eHgJCXZlbmQ6cHJvZAogLS0tLQogc3BjYTUwMQkJMDAwMDowMDAwCU15c3RGcm9tT3JpIFVua25vdyBDYW1lcmEKK201NjAyCQkwNDAyOjU2MDIJQUxpIFZpZGVvIENhbWVyYSBDb250cm9sbGVyCiBzcGNhNTAxCQkwNDBhOjAwMDIJS29kYWsgRFZDLTMyNQogc3BjYTUwMAkJMDQwYTowMzAwCUtvZGFrIEVaMjAwCiB6YzN4eAkJMDQxZTowNDFlCUNyZWF0aXZlIFdlYkNhbSBMaXZlIQpAQCAtNDIsNiArNDMsNyBAQAogemMzeHgJCTA0NTg6NzAwYwlHZW5pdXMgVmlkZW9DYW0gVjMKIHpjM3h4CQkwNDU4OjcwMGYJR2VuaXVzIFZpZGVvQ2FtIFdlYiBWMgogc29uaXhqCQkwNDU4OjcwMjUJR2VuaXVzIEV5ZSAzMTFRCitzb25peGoJCTA0NTg6NzAyZQlHZW5pdXMgU2xpbSAzMTAgTkIKIHNvbml4agkJMDQ1ZTowMGY1CU1pY3JvU29mdCBWWDMwMDAKIHNvbml4agkJMDQ1ZTowMGY3CU1pY3JvU29mdCBWWDEwMDAKIG92NTE5CQkwNDVlOjAyOGMJTWljcm8kb2Z0IHhib3ggY2FtCkBAIC04MSw3ICs4Myw3IEBACiBzcGNhNTYxCQkwNDZkOjA5MmMJTG9naXRlY2ggUUMgY2hhdCBFbGNoMgogc3BjYTU2MQkJMDQ2ZDowOTJkCUxvZ2l0ZWNoIFFDIEVsY2gyCiBzcGNhNTYxCQkwNDZkOjA5MmUJTG9naXRlY2ggUUMgRWxjaDIKLXNwY2E1NjEJCTA0NmQ6MDkyZglMb2dpdGVjaCBRQyBFbGNoMgorc3BjYTU2MQkJMDQ2ZDowOTJmCUxvZ2l0ZWNoICBRdWlja0NhbSBFeHByZXNzIFBsdXMKIHN1bnBsdXMJCTA0NmQ6MDk2MAlMb2dpdGVjaCBDbGlja1NtYXJ0IDQyMAogc3VucGx1cwkJMDQ3MTowMzIyCVBoaWxpcHMgRE1WQzEzMDBLCiB6YzN4eAkJMDQ3MTowMzI1CVBoaWxpcHMgU1BDIDIwMCBOQwpAQCAtOTYsNiArOTgsMjkgQEAKIHN1bnBsdXMJCTA0YTU6MzAwOAlCZW5xIERDIDE1MDAKIHN1bnBsdXMJCTA0YTU6MzAwYQlCZW5xIERDIDM0MTAKIHNwY2E1MDAJCTA0YTU6MzAwYwlCZW5xIERDIDEwMTYKK2ZpbmVwaXgJCTA0Y2I6MDEwNAlGdWppZmlsbSBGaW5lUGl4IDQ4MDAKK2ZpbmVwaXgJCTA0Y2I6MDEwOQlGdWppZmlsbSBGaW5lUGl4IEEyMDIKK2ZpbmVwaXgJCTA0Y2I6MDEwYglGdWppZmlsbSBGaW5lUGl4IEEyMDMKK2ZpbmVwaXgJCTA0Y2I6MDEwZglGdWppZmlsbSBGaW5lUGl4IEEyMDQKK2ZpbmVwaXgJCTA0Y2I6MDExMQlGdWppZmlsbSBGaW5lUGl4IEEyMDUKK2ZpbmVwaXgJCTA0Y2I6MDExMwlGdWppZmlsbSBGaW5lUGl4IEEyMTAKK2ZpbmVwaXgJCTA0Y2I6MDExNQlGdWppZmlsbSBGaW5lUGl4IEEzMDMKK2ZpbmVwaXgJCTA0Y2I6MDExNwlGdWppZmlsbSBGaW5lUGl4IEEzMTAKK2ZpbmVwaXgJCTA0Y2I6MDExOQlGdWppZmlsbSBGaW5lUGl4IEY0MDEKK2ZpbmVwaXgJCTA0Y2I6MDExYglGdWppZmlsbSBGaW5lUGl4IEY0MDIKK2ZpbmVwaXgJCTA0Y2I6MDExZAlGdWppZmlsbSBGaW5lUGl4IEY0MTAKK2ZpbmVwaXgJCTA0Y2I6MDEyMQlGdWppZmlsbSBGaW5lUGl4IEY2MDEKK2ZpbmVwaXgJCTA0Y2I6MDEyMwlGdWppZmlsbSBGaW5lUGl4IEY3MDAKK2ZpbmVwaXgJCTA0Y2I6MDEyNQlGdWppZmlsbSBGaW5lUGl4IE02MDMKK2ZpbmVwaXgJCTA0Y2I6MDEyNwlGdWppZmlsbSBGaW5lUGl4IFMzMDAKK2ZpbmVwaXgJCTA0Y2I6MDEyOQlGdWppZmlsbSBGaW5lUGl4IFMzMDQKK2ZpbmVwaXgJCTA0Y2I6MDEyYglGdWppZmlsbSBGaW5lUGl4IFM1MDAKK2ZpbmVwaXgJCTA0Y2I6MDEyZAlGdWppZmlsbSBGaW5lUGl4IFM2MDIKK2ZpbmVwaXgJCTA0Y2I6MDEyZglGdWppZmlsbSBGaW5lUGl4IFM3MDAKK2ZpbmVwaXgJCTA0Y2I6MDEzMQlGdWppZmlsbSBGaW5lUGl4IHVua25vd24gbW9kZWwKK2ZpbmVwaXgJCTA0Y2I6MDEzYglGdWppZmlsbSBGaW5lUGl4IHVua25vd24gbW9kZWwKK2ZpbmVwaXgJCTA0Y2I6MDEzZAlGdWppZmlsbSBGaW5lUGl4IHVua25vd24gbW9kZWwKK2ZpbmVwaXgJCTA0Y2I6MDEzZglGdWppZmlsbSBGaW5lUGl4IEY0MjAKIHN1bnBsdXMJCTA0ZjE6MTAwMQlKVkMgR0MgQTUwCiBzcGNhNTYxCQkwNGZjOjA1NjEJRmxleGNhbSAxMDAKIHN1bnBsdXMJCTA0ZmM6NTAwYwlTdW5wbHVzIENBNTAwQwpAQCAtMTgxLDYgKzIwNiw3IEBACiBwYWMyMDcJCTA5M2E6MjQ3MAlHZW5pdXMgR0YxMTIKIHBhYzIwNwkJMDkzYToyNDcxCUdlbml1cyBWaWRlb0NhbSBnZTExMQogcGFjMjA3CQkwOTNhOjI0NzIJR2VuaXVzIFZpZGVvQ2FtIGdlMTEwCitwYWMyMDcJCTA5M2E6MjQ3NglHZW5pdXMgZS1NZXNzZW5nZXIgMTEyCiBwYWM3MzExCQkwOTNhOjI2MDAJUEFDNzMxMSBUeXBob29uCiBwYWM3MzExCQkwOTNhOjI2MDEJUGhpbGlwcyBTUEMgNjEwIE5DCiBwYWM3MzExCQkwOTNhOjI2MDMJUEFDNzMxMgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9tNTYwMi50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L201NjAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDUwYWIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9tNTYwMi50eHQKQEAgLTAsMCArMSwxMiBAQAorVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIEFMaSBtNTYwMiBicmlkZ2UgY29ubmVjdGVkCit0byB0aGUgZm9sbG93aW5nIHN1cHBvcnRlZCBzZW5zb3JzOgorT21uaVZpc2lvbiBPVjk2NTAsCitTYW1zdW5nIHM1azgzYSwKK1NhbXN1bmcgczVrNGFhLAorTWljcm9uIG10OW0xMTEsCitQaXhlbCBwbHVzIFBPMTAzMAorCitUaGlzIGRyaXZlciBtaW1pY3MgdGhlIHdpbmRvd3MgZHJpdmVycywgd2hpY2ggaGF2ZSBhIGJyYWluZGVhZCBpbXBsZW1lbnRhdGlvbiBzZW5kaW5nIGJheWVyLWVuY29kZWQgZnJhbWVzIGF0IFZHQSByZXNvbHV0aW9uLgorSW4gYSBwZXJmZWN0IHdvcmxkIHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcHJvZ3JhbSB0aGUgbTU2MDIgYW5kIHRoZSBjb25uZWN0ZWQgc2Vuc29yIGluIGhhcmR3YXJlIGluc3RlYWQsIHN1cHBvcnRpbmcgYSByYW5nZSBvZiByZXNvbHV0aW9ucyBhbmQgcGl4ZWxmb3JtYXRzCisKK0FueXdheSwgaGF2ZSBmdW4gYW5kIHBsZWFzZSByZXBvcnQgYW55IGJ1Z3MgdG8gbTU2MHgtZHJpdmVyLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zb2MtY2FtZXJhLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc29jLWNhbWVyYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4ZWYzYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc29jLWNhbWVyYS50eHQKQEAgLTAsMCArMSwxMjAgQEAKKwkJCVNvYy1DYW1lcmEgU3Vic3lzdGVtCisJCQk9PT09PT09PT09PT09PT09PT09PQorCitUZXJtaW5vbG9neQorLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyB0ZXJtcyBhcmUgdXNlZCBpbiB0aGlzIGRvY3VtZW50OgorIC0gY2FtZXJhIC8gY2FtZXJhIGRldmljZSAvIGNhbWVyYSBzZW5zb3IgLSBhIHZpZGVvLWNhbWVyYSBzZW5zb3IgY2hpcCwgY2FwYWJsZQorICAgb2YgY29ubmVjdGluZyB0byBhIHZhcmlldHkgb2Ygc3lzdGVtcyBhbmQgaW50ZXJmYWNlcywgdHlwaWNhbGx5IHVzZXMgaTJjIGZvcgorICAgY29udHJvbCBhbmQgY29uZmlndXJhdGlvbiwgYW5kIGEgcGFyYWxsZWwgb3IgYSBzZXJpYWwgYnVzIGZvciBkYXRhLgorIC0gY2FtZXJhIGhvc3QgLSBhbiBpbnRlcmZhY2UsIHRvIHdoaWNoIGEgY2FtZXJhIGlzIGNvbm5lY3RlZC4gVHlwaWNhbGx5IGEKKyAgIHNwZWNpYWxpc2VkIGludGVyZmFjZSwgcHJlc2VudCBvbiBtYW55IFNvQ3MsIGUuZy4sIFBYQTI3eCBhbmQgUFhBM3h4LCBTdXBlckgsCisgICBBVlIzMiwgaS5NWDI3LCBpLk1YMzEuCisgLSBjYW1lcmEgaG9zdCBidXMgLSBhIGNvbm5lY3Rpb24gYmV0d2VlbiBhIGNhbWVyYSBob3N0IGFuZCBhIGNhbWVyYS4gQ2FuIGJlCisgICBwYXJhbGxlbCBvciBzZXJpYWwsIGNvbnNpc3RzIG9mIGRhdGEgYW5kIGNvbnRyb2wgbGluZXMsIGUuZy4sIGNsb2NrLCB2ZXJ0aWNhbAorICAgYW5kIGhvcml6b250YWwgc3luY2hyb25pemF0aW9uIHNpZ25hbHMuCisKK1B1cnBvc2Ugb2YgdGhlIHNvYy1jYW1lcmEgc3Vic3lzdGVtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc29jLWNhbWVyYSBzdWJzeXN0ZW0gcHJvdmlkZXMgYSB1bmlmaWVkIEFQSSBiZXR3ZWVuIGNhbWVyYSBob3N0IGRyaXZlcnMgYW5kCitjYW1lcmEgc2Vuc29yIGRyaXZlcnMuIEl0IGltcGxlbWVudHMgYSBWNEwyIGludGVyZmFjZSB0byB0aGUgdXNlciwgY3VycmVudGx5Citvbmx5IHRoZSBtbWFwIG1ldGhvZCBpcyBzdXBwb3J0ZWQuCisKK1RoaXMgc3Vic3lzdGVtIGhhcyBiZWVuIHdyaXR0ZW4gdG8gY29ubmVjdCBkcml2ZXJzIGZvciBTeXN0ZW0tb24tQ2hpcCAoU29DKQordmlkZW8gY2FwdHVyZSBpbnRlcmZhY2VzIHdpdGggZHJpdmVycyBmb3IgQ01PUyBjYW1lcmEgc2Vuc29yIGNoaXBzIHRvIGVuYWJsZQordGhlIHJldXNlIG9mIHNlbnNvciBkcml2ZXJzIHdpdGggdmFyaW91cyBob3N0cy4gVGhlIHN1YnN5c3RlbSBoYXMgYmVlbiBkZXNpZ25lZAordG8gc3VwcG9ydCBtdWx0aXBsZSBjYW1lcmEgaG9zdCBpbnRlcmZhY2VzIGFuZCBtdWx0aXBsZSBjYW1lcmFzIHBlciBpbnRlcmZhY2UsCithbHRob3VnaCBtb3N0IGFwcGxpY2F0aW9ucyBoYXZlIG9ubHkgb25lIGNhbWVyYSBzZW5zb3IuCisKK0V4aXN0aW5nIGRyaXZlcnMKKy0tLS0tLS0tLS0tLS0tLS0KKworQXMgb2YgMi42LjI3LXJjNCB0aGVyZSBhcmUgdHdvIGhvc3QgZHJpdmVycyBpbiB0aGUgbWFpbmxpbmU6IHB4YV9jYW1lcmEuYyBmb3IKK1BYQTI3eCBTb0NzIGFuZCBzaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGZvciBTdXBlckggU29DcywgYW5kIGZvdXIgc2Vuc29yIGRyaXZlcnM6CittdDltMDAxLmMsIG10OW0xMTEuYywgbXQ5djAyMi5jIGFuZCBhIGdlbmVyaWMgc29jX2NhbWVyYV9wbGF0Zm9ybS5jIGRyaXZlci4gVGhpcworbGlzdCBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgdXBkYXRlZCwgbG9vayBmb3IgbW9yZSBleGFtcGxlcyBpbiB5b3VyIHRyZWUuCisKK0NhbWVyYSBob3N0IEFQSQorLS0tLS0tLS0tLS0tLS0tCisKK0EgaG9zdCBjYW1lcmEgZHJpdmVyIGlzIHJlZ2lzdGVyZWQgdXNpbmcgdGhlCisKK3NvY19jYW1lcmFfaG9zdF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICopOworCitmdW5jdGlvbi4gVGhlIGhvc3Qgb2JqZWN0IGNhbiBiZSBpbml0aWFsaXplZCBhcyBmb2xsb3dzOgorCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfaG9zdCBweGFfc29jX2NhbWVyYV9ob3N0ID0geworCS5kcnZfbmFtZQk9IFBYQV9DQU1fRFJWX05BTUUsCisJLm9wcwkJPSAmcHhhX3NvY19jYW1lcmFfaG9zdF9vcHMsCit9OworCitBbGwgY2FtZXJhIGhvc3QgbWV0aG9kcyBhcmUgcGFzc2VkIGluIGEgc3RydWN0IHNvY19jYW1lcmFfaG9zdF9vcHM6CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0X29wcyBweGFfc29jX2NhbWVyYV9ob3N0X29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmFkZAkJPSBweGFfY2FtZXJhX2FkZF9kZXZpY2UsCisJLnJlbW92ZQkJPSBweGFfY2FtZXJhX3JlbW92ZV9kZXZpY2UsCisJLnN1c3BlbmQJPSBweGFfY2FtZXJhX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBweGFfY2FtZXJhX3Jlc3VtZSwKKwkuc2V0X2ZtdF9jYXAJPSBweGFfY2FtZXJhX3NldF9mbXRfY2FwLAorCS50cnlfZm10X2NhcAk9IHB4YV9jYW1lcmFfdHJ5X2ZtdF9jYXAsCisJLmluaXRfdmlkZW9idWYJPSBweGFfY2FtZXJhX2luaXRfdmlkZW9idWYsCisJLnJlcWJ1ZnMJPSBweGFfY2FtZXJhX3JlcWJ1ZnMsCisJLnBvbGwJCT0gcHhhX2NhbWVyYV9wb2xsLAorCS5xdWVyeWNhcAk9IHB4YV9jYW1lcmFfcXVlcnljYXAsCisJLnRyeV9idXNfcGFyYW0JPSBweGFfY2FtZXJhX3RyeV9idXNfcGFyYW0sCisJLnNldF9idXNfcGFyYW0JPSBweGFfY2FtZXJhX3NldF9idXNfcGFyYW0sCit9OworCisuYWRkIGFuZCAucmVtb3ZlIG1ldGhvZHMgYXJlIGNhbGxlZCB3aGVuIGEgc2Vuc29yIGlzIGF0dGFjaGVkIHRvIG9yIGRldGFjaGVkCitmcm9tIHRoZSBob3N0LCBhcGFydCBmcm9tIHBlcmZvcm1pbmcgaG9zdC1pbnRlcm5hbCB0YXNrcyB0aGV5IHNoYWxsIGFsc28gY2FsbAorc2Vuc29yIGRyaXZlcidzIC5pbml0IGFuZCAucmVsZWFzZSBtZXRob2RzIHJlc3BlY3RpdmVseS4gLnN1c3BlbmQgYW5kIC5yZXN1bWUKK21ldGhvZHMgaW1wbGVtZW50IGhvc3QncyBwb3dlci1tYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHkgYW5kIGl0cyB0aGVpcgorcmVzcG9uc2liaWxpdHkgdG8gY2FsbCByZXNwZWN0aXZlIHNlbnNvcidzIG1ldGhvZHMuIC50cnlfYnVzX3BhcmFtIGFuZAorLnNldF9idXNfcGFyYW0gYXJlIHVzZWQgdG8gbmVnb3RpYXRlIHBoeXNpY2FsIGNvbm5lY3Rpb24gcGFyYW1ldGVycyBiZXR3ZWVuIHRoZQoraG9zdCBhbmQgdGhlIHNlbnNvci4gLmluaXRfdmlkZW9idWYgaXMgY2FsbGVkIGJ5IHNvYy1jYW1lcmEgY29yZSB3aGVuIGEKK3ZpZGVvLWRldmljZSBpcyBvcGVuZWQsIGZ1cnRoZXIgdmlkZW8tYnVmZmVyIG1hbmFnZW1lbnQgaXMgaW1wbGVtZW50ZWQgY29tcGxldGVseQorYnkgdGhlIHNwZWNpZmljIGNhbWVyYSBob3N0IGRyaXZlci4gVGhlIHJlc3Qgb2YgdGhlIG1ldGhvZHMgYXJlIGNhbGxlZCBmcm9tCityZXNwZWN0aXZlIFY0TDIgb3BlcmF0aW9ucy4KKworQ2FtZXJhIEFQSQorLS0tLS0tLS0tLQorCitTZW5zb3IgZHJpdmVycyBjYW4gdXNlIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmssIHR5cGljYWxseSBwcm92aWRlZCBieSB0aGUKK3BsYXRmb3JtLCBhbmQgdXNlZCB0byBzcGVjaWZ5IHRvIHdoaWNoIGNhbWVyYSBob3N0IGJ1cyB0aGUgc2Vuc29yIGlzIGNvbm5lY3RlZCwKK2FuZCBhcmJpdHJhcmlseSBwcm92aWRlIHBsYXRmb3JtIC5wb3dlciBhbmQgLnJlc2V0IG1ldGhvZHMgZm9yIHRoZSBjYW1lcmEuCitzb2NfY2FtZXJhX2RldmljZV9yZWdpc3RlcigpIGFuZCBzb2NfY2FtZXJhX2RldmljZV91bnJlZ2lzdGVyKCkgZnVuY3Rpb25zIGFyZQordXNlZCB0byBhZGQgYSBzZW5zb3IgZHJpdmVyIHRvIG9yIHJlbW92ZSBvbmUgZnJvbSB0aGUgc3lzdGVtLiBUaGUgcmVnaXN0cmF0aW9uCitmdW5jdGlvbiB0YWtlcyBhIHBvaW50ZXIgdG8gc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlIGFzIHRoZSBvbmx5IHBhcmFtZXRlci4KK1RoaXMgc3RydWN0IGNhbiBiZSBpbml0aWFsaXplZCBhcyBmb2xsb3dzOgorCisJLyogbGluayB0byBkcml2ZXIgb3BlcmF0aW9ucyAqLworCWljZC0+b3BzCT0gJm10OW0wMDFfb3BzOworCS8qIGxpbmsgdG8gdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgKGUuZy4sIGkyYykgZGV2aWNlICovCisJaWNkLT5jb250cm9sCT0gJmNsaWVudC0+ZGV2OworCS8qIHdpbmRvdyBnZW9tZXRyeSAqLworCWljZC0+eF9taW4JPSAyMDsKKwlpY2QtPnlfbWluCT0gMTI7CisJaWNkLT54X2N1cnJlbnQJPSAyMDsKKwlpY2QtPnlfY3VycmVudAk9IDEyOworCWljZC0+d2lkdGhfbWluCT0gNDg7CisJaWNkLT53aWR0aF9tYXgJPSAxMjgwOworCWljZC0+aGVpZ2h0X21pbgk9IDMyOworCWljZC0+aGVpZ2h0X21heAk9IDEwMjQ7CisJaWNkLT55X3NraXBfdG9wCT0gMTsKKwkvKiBjYW1lcmEgYnVzIElELCB0eXBpY2FsbHkgb2J0YWluZWQgZnJvbSBwbGF0Zm9ybSBkYXRhICovCisJaWNkLT5pZmFjZQk9IGljbC0+YnVzX2lkOworCitzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgcHJvdmlkZXMgLnByb2JlIGFuZCAucmVtb3ZlIG1ldGhvZHMsIHdoaWNoIGFyZSBjYWxsZWQgYnkKK3RoZSBzb2MtY2FtZXJhIGNvcmUsIHdoZW4gYSBjYW1lcmEgaXMgbWF0Y2hlZCBhZ2FpbnN0IG9yIHJlbW92ZWQgZnJvbSBhIGNhbWVyYQoraG9zdCBidXMsIC5pbml0LCAucmVsZWFzZSwgLnN1c3BlbmQsIGFuZCAucmVzdW1lIGFyZSBjYWxsZWQgZnJvbSB0aGUgY2FtZXJhIGhvc3QKK2RyaXZlciBhcyBkaXNjdXNzZWQgYWJvdmUuIE90aGVyIG1lbWJlcnMgb2YgdGhpcyBzdHJ1Y3QgcHJvdmlkZSByZXNwZWN0aXZlIFY0TDIKK2Z1bmN0aW9uYWxpdHkuCisKK3N0cnVjdCBzb2NfY2FtZXJhX2RldmljZSBhbHNvIGxpbmtzIHRvIGFuIGFycmF5IG9mIHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0LAorbGlzdGluZyBwaXhlbCBmb3JtYXRzLCBzdXBwb3J0ZWQgYnkgdGhlIGNhbWVyYS4KKworLS0KK0F1dGhvcjogR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3VuZXZpY3RhYmxlLWxydS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL3VuZXZpY3RhYmxlLWxydS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI1ZWVkNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdm0vdW5ldmljdGFibGUtbHJ1LnR4dApAQCAtMCwwICsxLDYxNSBAQAorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgTGludXggbWVtb3J5IG1hbmFnZW1lbnQgIlVuZXZpY3RhYmxlIExSVSIKK2luZnJhc3RydWN0dXJlIGFuZCB0aGUgdXNlIG9mIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgdG8gbWFuYWdlIHNldmVyYWwgdHlwZXMKK29mICJ1bmV2aWN0YWJsZSIgcGFnZXMuICBUaGUgZG9jdW1lbnQgYXR0ZW1wdHMgdG8gcHJvdmlkZSB0aGUgb3ZlcmFsbAorcmF0aW9uYWxlIGJlaGluZCB0aGlzIG1lY2hhbmlzbSBhbmQgdGhlIHJhdGlvbmFsZSBmb3Igc29tZSBvZiB0aGUgZGVzaWduCitkZWNpc2lvbnMgdGhhdCBkcm92ZSB0aGUgaW1wbGVtZW50YXRpb24uICBUaGUgbGF0dGVyIGRlc2lnbiByYXRpb25hbGUgaXMKK2Rpc2N1c3NlZCBpbiB0aGUgY29udGV4dCBvZiBhbiBpbXBsZW1lbnRhdGlvbiBkZXNjcmlwdGlvbi4gIEFkbWl0dGVkbHksIG9uZQorY2FuIG9idGFpbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy0tdGhlICJ3aGF0IGRvZXMgaXQgZG8/Ii0tYnkgcmVhZGluZyB0aGUKK2NvZGUuICBPbmUgaG9wZXMgdGhhdCB0aGUgZGVzY3JpcHRpb25zIGJlbG93IGFkZCB2YWx1ZSBieSBwcm92aWRlIHRoZSBhbnN3ZXIKK3RvICJ3aHkgZG9lcyBpdCBkbyB0aGF0PyIuCisKK1VuZXZpY3RhYmxlIExSVSBJbmZyYXN0cnVjdHVyZToKKworVGhlIFVuZXZpY3RhYmxlIExSVSBhZGRzIGFuIGFkZGl0aW9uYWwgTFJVIGxpc3QgdG8gdHJhY2sgdW5ldmljdGFibGUgcGFnZXMKK2FuZCB0byBoaWRlIHRoZXNlIHBhZ2VzIGZyb20gdm1zY2FuLiAgVGhpcyBtZWNoYW5pc20gaXMgYmFzZWQgb24gYSBwYXRjaCBieQorTGFycnkgV29vZG1hbiBvZiBSZWQgSGF0IHRvIGFkZHJlc3Mgc2V2ZXJhbCBzY2FsYWJpbGl0eSBwcm9ibGVtcyB3aXRoIHBhZ2UKK3JlY2xhaW0gaW4gTGludXguICBUaGUgcHJvYmxlbXMgaGF2ZSBiZWVuIG9ic2VydmVkIGF0IGN1c3RvbWVyIHNpdGVzIG9uIGxhcmdlCittZW1vcnkgeDg2XzY0IHN5c3RlbXMuICBGb3IgZXhhbXBsZSwgYSBub24tbnVtYWwgeDg2XzY0IHBsYXRmb3JtIHdpdGggMTI4R0IKK29mIG1haW4gbWVtb3J5IHdpbGwgaGF2ZSBvdmVyIDMyIG1pbGxpb24gNGsgcGFnZXMgaW4gYSBzaW5nbGUgem9uZS4gIFdoZW4gYQorbGFyZ2UgZnJhY3Rpb24gb2YgdGhlc2UgcGFnZXMgYXJlIG5vdCBldmljdGFibGUgZm9yIGFueSByZWFzb24gW3NlZSBiZWxvd10sCit2bXNjYW4gd2lsbCBzcGVuZCBhIGxvdCBvZiB0aW1lIHNjYW5uaW5nIHRoZSBMUlUgbGlzdHMgbG9va2luZyBmb3IgdGhlIHNtYWxsCitmcmFjdGlvbiBvZiBwYWdlcyB0aGF0IGFyZSBldmljdGFibGUuICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaXR1YXRpb24gd2hlcmUKK2FsbCBjcHVzIGFyZSBzcGVuZGluZyAxMDAlIG9mIHRoZWlyIHRpbWUgaW4gdm1zY2FuIGZvciBob3VycyBvciBkYXlzIG9uIGVuZCwKK3dpdGggdGhlIHN5c3RlbSBjb21wbGV0ZWx5IHVucmVzcG9uc2l2ZS4KKworVGhlIFVuZXZpY3RhYmxlIExSVSBpbmZyYXN0cnVjdHVyZSBhZGRyZXNzZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzIG9mCit1bmV2aWN0YWJsZSBwYWdlczoKKworKyBwYWdlIG93bmVkIGJ5IHJhbWZzCisrIHBhZ2UgbWFwcGVkIGludG8gU0hNX0xPQ0tlZCBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMKKysgcGFnZSBtYXBwZWQgaW50byBWTV9MT0NLRUQgW21sb2NrKCllZF0gdm1hcworCitUaGUgaW5mcmFzdHJ1Y3R1cmUgbWlnaHQgYmUgYWJsZSB0byBoYW5kbGUgb3RoZXIgY29uZGl0aW9ucyB0aGF0IG1ha2UgcGFnZXMKK3VuZXZpY3RhYmxlLCBlaXRoZXIgYnkgZGVmaW5pdGlvbiBvciBieSBjaXJjdW1zdGFuY2UsIGluIHRoZSBmdXR1cmUuCisKKworVGhlIFVuZXZpY3RhYmxlIExSVSBMaXN0CisKK1RoZSBVbmV2aWN0YWJsZSBMUlUgaW5mcmFzdHJ1Y3R1cmUgY29uc2lzdHMgb2YgYW4gYWRkaXRpb25hbCwgcGVyLXpvbmUsIExSVSBsaXN0CitjYWxsZWQgdGhlICJ1bmV2aWN0YWJsZSIgbGlzdCBhbmQgYW4gYXNzb2NpYXRlZCBwYWdlIGZsYWcsIFBHX3VuZXZpY3RhYmxlLCB0bworaW5kaWNhdGUgdGhhdCB0aGUgcGFnZSBpcyBiZWluZyBtYW5hZ2VkIG9uIHRoZSB1bmV2aWN0YWJsZSBsaXN0LiAgVGhlCitQR191bmV2aWN0YWJsZSBmbGFnIGlzIGFuYWxvZ291cyB0bywgYW5kIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoLCB0aGUgUEdfYWN0aXZlCitmbGFnIGluIHRoYXQgaXQgaW5kaWNhdGVzIG9uIHdoaWNoIExSVSBsaXN0IGEgcGFnZSByZXNpZGVzIHdoZW4gUEdfbHJ1IGlzIHNldC4KK1RoZSB1bmV2aWN0YWJsZSBMUlUgbGlzdCBpcyBzb3VyY2UgY29uZmlndXJhYmxlIGJhc2VkIG9uIHRoZSBVTkVWSUNUQUJMRV9MUlUKK0tjb25maWcgb3B0aW9uLgorCitUaGUgVW5ldmljdGFibGUgTFJVIGluZnJhc3RydWN0dXJlIG1haW50YWlucyB1bmV2aWN0YWJsZSBwYWdlcyBvbiBhbiBhZGRpdGlvbmFsCitMUlUgbGlzdCBmb3IgYSBmZXcgcmVhc29uczoKKworMSkgV2UgZ2V0IHRvICJ0cmVhdCB1bmV2aWN0YWJsZSBwYWdlcyBqdXN0IGxpa2Ugd2UgdHJlYXQgb3RoZXIgcGFnZXMgaW4gdGhlCisgICBzeXN0ZW0sIHdoaWNoIG1lYW5zIHdlIGdldCB0byB1c2UgdGhlIHNhbWUgY29kZSB0byBtYW5pcHVsYXRlIHRoZW0sIHRoZQorICAgc2FtZSBjb2RlIHRvIGlzb2xhdGUgdGhlbSAoZm9yIG1pZ3JhdGUsIGV0Yy4pLCB0aGUgc2FtZSBjb2RlIHRvIGtlZXAgdHJhY2sKKyAgIG9mIHRoZSBzdGF0aXN0aWNzLCBldGMuLi4iIFtSaWsgdmFuIFJpZWxdCisKKzIpIFdlIHdhbnQgdG8gYmUgYWJsZSB0byBtaWdyYXRlIHVuZXZpY3RhYmxlIHBhZ2VzIGJldHdlZW4gbm9kZXMtLWZvciBtZW1vcnkKKyAgIGRlZnJhZ21lbnRhdGlvbiwgd29ya2xvYWQgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGhvdHBsdWcuICBUaGUgbGludXgga2VybmVsCisgICBjYW4gb25seSBtaWdyYXRlIHBhZ2VzIHRoYXQgaXQgY2FuIHN1Y2Nlc3NmdWxseSBpc29sYXRlIGZyb20gdGhlIGxydSBsaXN0cy4KKyAgIElmIHdlIHdlcmUgdG8gbWFpbnRhaW4gcGFnZXMgZWxzZXdpc2UgdGhhbiBvbiBhbiBscnUtbGlrZSBsaXN0LCB3aGVyZSB0aGV5CisgICBjYW4gYmUgZm91bmQgYnkgaXNvbGF0ZV9scnVfcGFnZSgpLCB3ZSB3b3VsZCBwcmV2ZW50IHRoZWlyIG1pZ3JhdGlvbiwgdW5sZXNzCisgICB3ZSByZXdvcmtlZCBtaWdyYXRpb24gY29kZSB0byBmaW5kIHRoZSB1bmV2aWN0YWJsZSBwYWdlcy4KKworCitUaGUgdW5ldmljdGFibGUgTFJVIGxpc3QgZG9lcyBub3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGZpbGUgYmFja2VkIGFuZCBzd2FwCitiYWNrZWQgW2Fub25dIHBhZ2VzLiAgVGhpcyBkaWZmZXJlbnRpYXRpb24gaXMgb25seSBpbXBvcnRhbnQgd2hpbGUgdGhlIHBhZ2VzCithcmUsIGluIGZhY3QsIGV2aWN0YWJsZS4KKworVGhlIHVuZXZpY3RhYmxlIExSVSBsaXN0IGJlbmVmaXRzIGZyb20gdGhlICJhcnJheWlmaWNhdGlvbiIgb2YgdGhlIHBlci16b25lCitMUlUgbGlzdHMgYW5kIHN0YXRpc3RpY3Mgb3JpZ2luYWxseSBwcm9wb3NlZCBhbmQgcG9zdGVkIGJ5IENocmlzdG9waCBMYW1ldGVyLgorCitUaGUgdW5ldmljdGFibGUgbGlzdCBkb2VzIG5vdCB1c2UgdGhlIGxydSBwYWdldmVjIG1lY2hhbmlzbS4gUmF0aGVyLAordW5ldmljdGFibGUgcGFnZXMgYXJlIHBsYWNlZCBkaXJlY3RseSBvbiB0aGUgcGFnZSdzIHpvbmUncyB1bmV2aWN0YWJsZQorbGlzdCB1bmRlciB0aGUgem9uZSBscnVfbG9jay4gIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdG8gcHJldmVudCBzdHJhbmRpbmcKK29mIHBhZ2VzIG9uIHRoZSB1bmV2aWN0YWJsZSBsaXN0IHdoZW4gb25lIHRhc2sgaGFzIHRoZSBwYWdlIGlzb2xhdGVkIGZyb20gdGhlCitscnUgYW5kIG90aGVyIHRhc2tzIGFyZSBjaGFuZ2luZyB0aGUgImV2aWN0YWJpbGl0eSIgc3RhdGUgb2YgdGhlIHBhZ2UuCisKKworVW5ldmljdGFibGUgTFJVIGFuZCBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmFjdGlvbgorCitUaGUgbWVtb3J5IGNvbnRyb2xsZXIgZGF0YSBzdHJ1Y3R1cmUgYXV0b21hdGljYWxseSBnZXRzIGEgcGVyIHpvbmUgdW5ldmljdGFibGUKK2xydSBsaXN0IGFzIGEgcmVzdWx0IG9mIHRoZSAiYXJyYXlpZmljYXRpb24iIG9mIHRoZSBwZXItem9uZSBMUlUgbGlzdHMuICBUaGUKK21lbW9yeSBjb250cm9sbGVyIHRyYWNrcyB0aGUgbW92ZW1lbnQgb2YgcGFnZXMgdG8gYW5kIGZyb20gdGhlIHVuZXZpY3RhYmxlIGxpc3QuCitXaGVuIGEgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgY29tZXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCB0aGUgY29udHJvbGxlciB3aWxsCitub3QgYXR0ZW1wdCB0byByZWNsYWltIHBhZ2VzIG9uIHRoZSB1bmV2aWN0YWJsZSBsaXN0LiAgVGhpcyBoYXMgYSBjb3VwbGUgb2YKK2VmZmVjdHMuICBCZWNhdXNlIHRoZSBwYWdlcyBhcmUgImhpZGRlbiIgZnJvbSByZWNsYWltIG9uIHRoZSB1bmV2aWN0YWJsZSBsaXN0LAordGhlIHJlY2xhaW0gcHJvY2VzcyBjYW4gYmUgbW9yZSBlZmZpY2llbnQsIGRlYWxpbmcgb25seSB3aXRoIHBhZ2VzIHRoYXQgaGF2ZQorYSBjaGFuY2Ugb2YgYmVpbmcgcmVjbGFpbWVkLiAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHRvbyBtYW55IG9mIHRoZSBwYWdlcworY2hhcmdlZCB0byB0aGUgY29udHJvbCBncm91cCBhcmUgdW5ldmljdGFibGUsIHRoZSBldmljdGFibGUgcG9ydGlvbiBvZiB0aGUKK3dvcmtpbmcgc2V0IG9mIHRoZSB0YXNrcyBpbiB0aGUgY29udHJvbCBncm91cCBtYXkgbm90IGZpdCBpbnRvIHRoZSBhdmFpbGFibGUKK21lbW9yeS4gIFRoaXMgY2FuIGNhdXNlIHRoZSBjb250cm9sIGdyb3VwIHRvIHRocmFzaCBvciB0byBvb20ta2lsbCB0YXNrcy4KKworCitVbmV2aWN0YWJsZSBMUlU6ICBEZXRlY3RpbmcgVW5ldmljdGFibGUgUGFnZXMKKworVGhlIGZ1bmN0aW9uIHBhZ2VfZXZpY3RhYmxlKHBhZ2UsIHZtYSkgaW4gdm1zY2FuLmMgZGV0ZXJtaW5lcyB3aGV0aGVyIGEKK3BhZ2UgaXMgZXZpY3RhYmxlIG9yIG5vdC4gIEZvciByYW1mcyBwYWdlcyBhbmQgcGFnZXMgaW4gU0hNX0xPQ0tlZCByZWdpb25zLAorcGFnZV9ldmljdGFibGUoKSB0ZXN0cyBhIG5ldyBhZGRyZXNzIHNwYWNlIGZsYWcsIEFTX1VORVZJQ1RBQkxFLCBpbiB0aGUgcGFnZSdzCithZGRyZXNzIHNwYWNlIHVzaW5nIGEgd3JhcHBlciBmdW5jdGlvbi4gIFdyYXBwZXIgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHNldCwKK2NsZWFyIGFuZCB0ZXN0IHRoZSBmbGFnIHRvIHJlZHVjZSB0aGUgcmVxdWlyZW1lbnQgZm9yICNpZmRlZidzIHRocm91Z2hvdXQgdGhlCitzb3VyY2UgY29kZS4gIEFTX1VORVZJQ1RBQkxFIGlzIHNldCBvbiByYW1mcyBpbm9kZS9tYXBwaW5nIHdoZW4gaXQgaXMgY3JlYXRlZC4KK1RoaXMgZmxhZyByZW1haW5zIGZvciB0aGUgbGlmZSBvZiB0aGUgaW5vZGUuCisKK0ZvciBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIEFTX1VORVZJQ1RBQkxFIGlzIHNldCB3aGVuIGFuIGFwcGxpY2F0aW9uCitzdWNjZXNzZnVsbHkgU0hNX0xPQ0tzIHRoZSByZWdpb24gYW5kIGlzIHJlbW92ZWQgd2hlbiB0aGUgcmVnaW9uIGlzCitTSE1fVU5MT0NLZWQuICBOb3RlIHRoYXQgc2htY3RsKFNITV9MT0NLLCAuLi4pIGRvZXMgbm90IHBvcHVsYXRlIHRoZSBwYWdlCit0YWJsZXMgZm9yIHRoZSByZWdpb24gYXMgZG9lcywgZm9yIGV4YW1wbGUsIG1sb2NrKCkuICAgU28sIHdlIG1ha2Ugbm8gc3BlY2lhbAorZWZmb3J0IHRvIHB1c2ggYW55IHBhZ2VzIGluIHRoZSBTSE1fTE9DS2VkIHJlZ2lvbiB0byB0aGUgdW5ldmljdGFibGUgbGlzdC4KK1Ztc2NhbiB3aWxsIGRvIHRoaXMgd2hlbi9pZiBpdCBlbmNvdW50ZXJzIHRoZSBwYWdlcyBkdXJpbmcgcmVjbGFpbS4gIE9uCitTSE1fVU5MT0NLLCBzaG1jdGwoKSBzY2FucyB0aGUgcGFnZXMgaW4gdGhlIHJlZ2lvbiBhbmQgInJlc2N1ZXMiIHRoZW0gZnJvbSB0aGUKK3VuZXZpY3RhYmxlIGxpc3QgaWYgbm8gb3RoZXIgY29uZGl0aW9uIGtlZXBzIHRoZW0gdW5ldmljdGFibGUuICBJZiBhIFNITV9MT0NLZWQKK3JlZ2lvbiBpcyBkZXN0cm95ZWQsIHRoZSBwYWdlcyBhcmUgYWxzbyAicmVzY3VlZCIgZnJvbSB0aGUgdW5ldmljdGFibGUgbGlzdCBpbgordGhlIHByb2Nlc3Mgb2YgZnJlZWluZyB0aGVtLgorCitwYWdlX2V2aWN0YWJsZSgpIGRldGVjdHMgbWxvY2soKWVkIHBhZ2VzIGJ5IHRlc3RpbmcgYW4gYWRkaXRpb25hbCBwYWdlIGZsYWcsCitQR19tbG9ja2VkIHZpYSB0aGUgUGFnZU1sb2NrZWQoKSB3cmFwcGVyLiAgSWYgdGhlIHBhZ2UgaXMgTk9UIG1sb2NrZWQsIGFuZCBhCitub24tTlVMTCB2bWEgaXMgc3VwcGxpZWQsIHBhZ2VfZXZpY3RhYmxlKCkgd2lsbCBjaGVjayB3aGV0aGVyIHRoZSB2bWEgaXMKK1ZNX0xPQ0tFRCB2aWEgaXNfbWxvY2tlZF92bWEoKS4gIGlzX21sb2NrZWRfdm1hKCkgd2lsbCBTZXRQYWdlTWxvY2tlZCgpIGFuZAordXBkYXRlIHRoZSBhcHByb3ByaWF0ZSBzdGF0aXN0aWNzIGlmIHRoZSB2bWEgaXMgVk1fTE9DS0VELiAgVGhpcyBtZXRob2QgYWxsb3dzCitlZmZpY2llbnQgImN1bGxpbmciIG9mIHBhZ2VzIGluIHRoZSBmYXVsdCBwYXRoIHRoYXQgYXJlIGJlaW5nIGZhdWx0ZWQgaW4gdG8KK1ZNX0xPQ0tFRCB2bWFzLgorCisKK1VuZXZpY3RhYmxlIFBhZ2VzIGFuZCBWbXNjYW4gW3Nocmlua18qX2xpc3QoKV0KKworSWYgdW5ldmljdGFibGUgcGFnZXMgYXJlIGN1bGxlZCBpbiB0aGUgZmF1bHQgcGF0aCwgb3IgbW92ZWQgdG8gdGhlIHVuZXZpY3RhYmxlCitsaXN0IGF0IG1sb2NrKCkgb3IgbW1hcCgpIHRpbWUsIHZtc2NhbiB3aWxsIG5ldmVyIGVuY291bnRlciB0aGUgcGFnZXMgdW50aWwKK3RoZXkgaGF2ZSBiZWNvbWUgZXZpY3RhYmxlIGFnYWluLCBmb3IgZXhhbXBsZSwgdmlhIG11bmxvY2soKSBhbmQgaGF2ZSBiZWVuCisicmVzY3VlZCIgZnJvbSB0aGUgdW5ldmljdGFibGUgbGlzdC4gIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBzaXR1YXRpb25zIHdoZXJlIHdlCitkZWNpZGUsIGZvciB0aGUgc2FrZSBvZiBleHBlZGllbmN5LCB0byBsZWF2ZSBhIHVuZXZpY3RhYmxlIHBhZ2Ugb24gb25lIG9mIHRoZQorcmVndWxhciBhY3RpdmUvaW5hY3RpdmUgTFJVIGxpc3RzIGZvciB2bXNjYW4gdG8gZGVhbCB3aXRoLiAgVm1zY2FuIGNoZWNrcyBmb3IKK3N1Y2ggcGFnZXMgaW4gYWxsIG9mIHRoZSBzaHJpbmtfe2FjdGl2ZXxpbmFjdGl2ZXxwYWdlfV9saXN0KCkgZnVuY3Rpb25zIGFuZAord2lsbCAiY3VsbCIgc3VjaCBwYWdlcyB0aGF0IGl0IGVuY291bnRlcnMtLXRoYXQgaXMsIGl0IGRpdmVydHMgdGhvc2UgcGFnZXMgdG8KK3RoZSB1bmV2aWN0YWJsZSBsaXN0IGZvciB0aGUgem9uZSBiZWluZyBzY2FubmVkLgorCitUaGVyZSBtYXkgYmUgc2l0dWF0aW9ucyB3aGVyZSBhIHBhZ2UgaXMgbWFwcGVkIGludG8gYSBWTV9MT0NLRUQgdm1hLCBidXQgdGhlCitwYWdlIGlzIG5vdCBtYXJrZWQgYXMgUGFnZU1sb2NrZWQuICBTdWNoIHBhZ2VzIHdpbGwgbWFrZSBpdCBhbGwgdGhlIHdheSB0bworc2hyaW5rX3BhZ2VfbGlzdCgpIHdoZXJlIHRoZXkgd2lsbCBiZSBkZXRlY3RlZCB3aGVuIHZtc2NhbiB3YWxrcyB0aGUgcmV2ZXJzZQorbWFwIGluIHRyeV90b191bm1hcCgpLiAgSWYgdHJ5X3RvX3VubWFwKCkgcmV0dXJucyBTV0FQX01MT0NLLCBzaHJpbmtfcGFnZV9saXN0KCkKK3dpbGwgY3VsbCB0aGUgcGFnZSBhdCB0aGF0IHBvaW50LgorCitOb3RlIHRoYXQgZm9yIGFub255bW91cyBwYWdlcywgc2hyaW5rX3BhZ2VfbGlzdCgpIGF0dGVtcHRzIHRvIGFkZCB0aGUgcGFnZSB0bwordGhlIHN3YXAgY2FjaGUgYmVmb3JlIGl0IHRyaWVzIHRvIHVubWFwIHRoZSBwYWdlLiAgVG8gYXZvaWQgdGhpcyB1bm5lY2Vzc2FyeQorY29uc3VtcHRpb24gb2Ygc3dhcCBzcGFjZSwgc2hyaW5rX3BhZ2VfbGlzdCgpIGNhbGxzIHRyeV90b19tdW5sb2NrKCkgdG8gY2hlY2sKK3doZXRoZXIgYW55IFZNX0xPQ0tFRCB2bWFzIG1hcCB0aGUgcGFnZSB3aXRob3V0IGF0dGVtcHRpbmcgdG8gdW5tYXAgdGhlIHBhZ2UuCitJZiB0cnlfdG9fbXVubG9jaygpIHJldHVybnMgU1dBUF9NTE9DSywgc2hyaW5rX3BhZ2VfbGlzdCgpIHdpbGwgY3VsbCB0aGUgcGFnZQord2l0aG91dCBjb25zdW1pbmcgc3dhcCBzcGFjZS4gIHRyeV90b19tdW5sb2NrKCkgd2lsbCBiZSBkZXNjcmliZWQgYmVsb3cuCisKK1RvICJjdWxsIiBhbiB1bmV2aWN0YWJsZSBwYWdlLCB2bXNjYW4gc2ltcGx5IHB1dHMgdGhlIHBhZ2UgYmFjayBvbiB0aGUgbHJ1CitsaXN0IHVzaW5nIHB1dGJhY2tfbHJ1X3BhZ2UoKS0tdGhlIGludmVyc2Ugb3BlcmF0aW9uIHRvIGlzb2xhdGVfbHJ1X3BhZ2UoKS0tCithZnRlciBkcm9wcGluZyB0aGUgcGFnZSBsb2NrLiAgQmVjYXVzZSB0aGUgY29uZGl0aW9uIHdoaWNoIG1ha2VzIHRoZSBwYWdlCit1bmV2aWN0YWJsZSBtYXkgY2hhbmdlIG9uY2UgdGhlIHBhZ2UgaXMgdW5sb2NrZWQsIHB1dGJhY2tfbHJ1X3BhZ2UoKSB3aWxsCityZWNoZWNrIHRoZSB1bmV2aWN0YWJsZSBzdGF0ZSBvZiBhIHBhZ2UgdGhhdCBpdCBwbGFjZXMgb24gdGhlIHVuZXZpY3RhYmxlIGxydQorbGlzdC4gIElmIHRoZSBwYWdlIGhhcyBiZWNvbWUgdW5ldmljdGFibGUsIHB1dGJhY2tfbHJ1X3BhZ2UoKSByZW1vdmVzIGl0IGZyb20KK3RoZSBsaXN0IGFuZCByZXRyaWVzLCBpbmNsdWRpbmcgdGhlIHBhZ2VfdW5ldmljdGFibGUoKSB0ZXN0LiAgQmVjYXVzZSBzdWNoIGEKK3JhY2UgaXMgYSByYXJlIGV2ZW50IGFuZCBtb3ZlbWVudCBvZiBwYWdlcyBvbnRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0IHNob3VsZCBiZQorcmFyZSwgdGhlc2UgZXh0cmEgZXZpY3RhYmlsdHkgY2hlY2tzIHNob3VsZCBub3Qgb2NjdXIgaW4gdGhlIG1ham9yaXR5IG9mIGNhbGxzCit0byBwdXRiYWNrX2xydV9wYWdlKCkuCisKKworTWxvY2tlZCBQYWdlOiAgUHJpb3IgV29yaworCitUaGUgIlVuZXZpY3RhYmxlIE1sb2NrZWQgUGFnZXMiIGluZnJhc3RydWN0dXJlIGlzIGJhc2VkIG9uIHdvcmsgb3JpZ2luYWxseQorcG9zdGVkIGJ5IE5pY2sgUGlnZ2luIGluIGFuIFJGQyBwYXRjaCBlbnRpdGxlZCAibW06IG1sb2NrZWQgcGFnZXMgb2ZmIExSVSIuCitOaWNrIHBvc3RlZCBoaXMgcGF0Y2ggYXMgYW4gYWx0ZXJuYXRpdmUgdG8gYSBwYXRjaCBwb3N0ZWQgYnkgQ2hyaXN0b3BoCitMYW1ldGVyIHRvIGFjaGlldmUgdGhlIHNhbWUgb2JqZWN0aXZlLS1oaWRpbmcgbWxvY2tlZCBwYWdlcyBmcm9tIHZtc2Nhbi4KK0luIE5pY2sncyBwYXRjaCwgaGUgdXNlZCBvbmUgb2YgdGhlIHN0cnVjdCBwYWdlIGxydSBsaXN0IGxpbmsgZmllbGRzIGFzIGEgY291bnQKK29mIFZNX0xPQ0tFRCB2bWFzIHRoYXQgbWFwIHRoZSBwYWdlLiAgVGhpcyB1c2Ugb2YgdGhlIGxpbmsgZmllbGQgZm9yIGEgY291bnQKK3ByZXZlbnRlZCB0aGUgbWFuYWdlbWVudCBvZiB0aGUgcGFnZXMgb24gYW4gTFJVIGxpc3QuICBUaHVzLCBtbG9ja2VkIHBhZ2VzIHdlcmUKK25vdCBtaWdyYXRhYmxlIGFzIGlzb2xhdGVfbHJ1X3BhZ2UoKSBjb3VsZCBub3QgZmluZCB0aGVtIGFuZCB0aGUgbHJ1IGxpc3QgbGluaworZmllbGQgd2FzIG5vdCBhdmFpbGFibGUgdG8gdGhlIG1pZ3JhdGlvbiBzdWJzeXN0ZW0uICBOaWNrIHJlc29sdmVkIHRoaXMgYnkKK3B1dHRpbmcgbWxvY2tlZCBwYWdlcyBiYWNrIG9uIHRoZSBscnUgbGlzdCBiZWZvcmUgYXR0ZW1wdGluZyB0byBpc29sYXRlIHRoZW0sCit0aHVzIGFiYW5kb25pbmcgdGhlIGNvdW50IG9mIFZNX0xPQ0tFRCB2bWFzLiAgV2hlbiBOaWNrJ3MgcGF0Y2ggd2FzIGludGVncmF0ZWQKK3dpdGggdGhlIFVuZXZpY3RhYmxlIExSVSB3b3JrLCB0aGUgY291bnQgd2FzIHJlcGxhY2VkIGJ5IHdhbGtpbmcgdGhlIHJldmVyc2UKK21hcCB0byBkZXRlcm1pbmUgd2hldGhlciBhbnkgVk1fTE9DS0VEIHZtYXMgbWFwcGVkIHRoZSBwYWdlLiAgTW9yZSBvbiB0aGlzCitiZWxvdy4KKworCitNbG9ja2VkIFBhZ2VzOiAgQmFzaWMgTWFuYWdlbWVudAorCitNbG9ja2VkIHBhZ2VzLS1wYWdlcyBtYXBwZWQgaW50byBhIFZNX0xPQ0tFRCB2bWEtLXJlcHJlc2VudCBvbmUgY2xhc3Mgb2YKK3VuZXZpY3RhYmxlIHBhZ2VzLiAgV2hlbiBzdWNoIGEgcGFnZSBoYXMgYmVlbiAibm90aWNlZCIgYnkgdGhlIG1lbW9yeQorbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHRoZSBwYWdlIGlzIG1hcmtlZCB3aXRoIHRoZSBQR19tbG9ja2VkIFtQYWdlTWxvY2tlZCgpXQorZmxhZy4gIEEgUGFnZU1sb2NrZWQoKSBwYWdlIHdpbGwgYmUgcGxhY2VkIG9uIHRoZSB1bmV2aWN0YWJsZSBMUlUgbGlzdCB3aGVuCitpdCBpcyBhZGRlZCB0byB0aGUgTFJVLiAgIFBhZ2VzIGNhbiBiZSAibm90aWNlZCIgYnkgbWVtb3J5IG1hbmFnZW1lbnQgaW4KK3NldmVyYWwgcGxhY2VzOgorCisxKSBpbiB0aGUgbWxvY2soKS9tbG9ja2FsbCgpIHN5c3RlbSBjYWxsIGhhbmRsZXJzLgorMikgaW4gdGhlIG1tYXAoKSBzeXN0ZW0gY2FsbCBoYW5kbGVyIHdoZW4gbW1hcCgpaW5nIGEgcmVnaW9uIHdpdGggdGhlCisgICBNQVBfTE9DS0VEIGZsYWcsIG9yIG1tYXAoKWluZyBhIHJlZ2lvbiBpbiBhIHRhc2sgdGhhdCBoYXMgY2FsbGVkCisgICBtbG9ja2FsbCgpIHdpdGggdGhlIE1DTF9GVVRVUkUgZmxhZy4gIEJvdGggb2YgdGhlc2UgY29uZGl0aW9ucyByZXN1bHQKKyAgIGluIHRoZSBWTV9MT0NLRUQgZmxhZyBiZWluZyBzZXQgZm9yIHRoZSB2bWEuCiszKSBpbiB0aGUgZmF1bHQgcGF0aCwgaWYgbWxvY2tlZCBwYWdlcyBhcmUgImN1bGxlZCIgaW4gdGhlIGZhdWx0IHBhdGgsCisgICBhbmQgd2hlbiBhIFZNX0xPQ0tFRCBzdGFjayBzZWdtZW50IGlzIGV4cGFuZGVkLgorNCkgYXMgbWVudGlvbmVkIGFib3ZlLCBpbiB2bXNjYW46c2hyaW5rX3BhZ2VfbGlzdCgpIHdpdGggYXR0ZW1wdGluZyB0bworICAgcmVjbGFpbSBhIHBhZ2UgaW4gYSBWTV9MT0NLRUQgdm1hLS12aWEgdHJ5X3RvX3VubWFwKCkgb3IgdHJ5X3RvX211bmxvY2soKS4KKworTWxvY2tlZCBwYWdlcyBiZWNvbWUgdW5sb2NrZWQgYW5kIHJlc2N1ZWQgZnJvbSB0aGUgdW5ldmljdGFibGUgbGlzdCB3aGVuOgorCisxKSBtYXBwZWQgaW4gYSByYW5nZSB1bmxvY2tlZCB2aWEgdGhlIG11bmxvY2soKS9tdW5sb2NrYWxsKCkgc3lzdGVtIGNhbGxzLgorMikgbXVubWFwcGVkKCkgb3V0IG9mIHRoZSBsYXN0IFZNX0xPQ0tFRCB2bWEgdGhhdCBtYXBzIHRoZSBwYWdlLCBpbmNsdWRpbmcKKyAgIHVubWFwcGluZyBhdCB0YXNrIGV4aXQuCiszKSB3aGVuIHRoZSBwYWdlIGlzIHRydW5jYXRlZCBmcm9tIHRoZSBsYXN0IFZNX0xPQ0tFRCB2bWEgb2YgYW4gbW1hcCgpZWQgZmlsZS4KKzQpIGJlZm9yZSBhIHBhZ2UgaXMgQ09XZWQgaW4gYSBWTV9MT0NLRUQgdm1hLgorCisKK01sb2NrZWQgUGFnZXM6ICBtbG9jaygpL21sb2NrYWxsKCkgU3lzdGVtIENhbGwgSGFuZGxpbmcKKworQm90aCBbZG9fXW1sb2NrKCkgYW5kIFtkb19dbWxvY2thbGwoKSBzeXN0ZW0gY2FsbCBoYW5kbGVycyBjYWxsIG1sb2NrX2ZpeHVwKCkKK2ZvciBlYWNoIHZtYSBpbiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBjYWxsLiAgSW4gdGhlIGNhc2Ugb2YgbWxvY2thbGwoKSwKK3RoaXMgaXMgdGhlIGVudGlyZSBhY3RpdmUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgdGFzay4gIE5vdGUgdGhhdCBtbG9ja19maXh1cCgpCitpcyB1c2VkIGZvciBib3RoIG1sb2NrKClpbmcgYW5kIG11bmxvY2soKWluZyBhIHJhbmdlIG9mIG1lbW9yeS4gIEEgY2FsbCB0bworbWxvY2soKSBhbiBhbHJlYWR5IFZNX0xPQ0tFRCB2bWEsIG9yIHRvIG11bmxvY2soKSBhIHZtYSB0aGF0IGlzIG5vdCBWTV9MT0NLRUQKK2lzIHRyZWF0ZWQgYXMgYSBuby1vcC0tbWxvY2tfZml4dXAoKSBzaW1wbHkgcmV0dXJucy4KKworSWYgdGhlIHZtYSBwYXNzZXMgc29tZSBmaWx0ZXJpbmcgZGVzY3JpYmVkIGluICJNbG9ja2VkIFBhZ2VzOiAgRmlsdGVyaW5nIFZtYXMiCitiZWxvdywgbWxvY2tfZml4dXAoKSB3aWxsIGF0dGVtcHQgdG8gbWVyZ2UgdGhlIHZtYSB3aXRoIGl0cyBuZWlnaGJvcnMgb3Igc3BsaXQKK29mZiBhIHN1YnNldCBvZiB0aGUgdm1hIGlmIHRoZSByYW5nZSBkb2VzIG5vdCBjb3ZlciB0aGUgZW50aXJlIHZtYS4gIE9uY2UgdGhlCit2bWEgaGFzIGJlZW4gbWVyZ2VkIG9yIHNwbGl0IG9yIG5laXRoZXIsIG1sb2NrX2ZpeHVwKCkgd2lsbCBjYWxsCitfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHRvIGZhdWx0IGluIHRoZSBwYWdlcyB2aWEgZ2V0X3VzZXJfcGFnZXMoKSBhbmQKK3RvIG1hcmsgdGhlIHBhZ2VzIGFzIG1sb2NrZWQgdmlhIG1sb2NrX3ZtYV9wYWdlKCkuCisKK05vdGUgdGhhdCB0aGUgdm1hIGJlaW5nIG1sb2NrZWQgbWlnaHQgYmUgbWFwcGVkIHdpdGggUFJPVF9OT05FLiAgSW4gdGhpcyBjYXNlLAorZ2V0X3VzZXJfcGFnZXMoKSB3aWxsIGJlIHVuYWJsZSB0byBmYXVsdCBpbiB0aGUgcGFnZXMuICBUaGF0J3MgT0suICBJZiBwYWdlcworZG8gZW5kIHVwIGdldHRpbmcgZmF1bHRlZCBpbnRvIHRoaXMgVk1fTE9DS0VEIHZtYSwgd2UnbGwgaGFuZGxlIHRoZW0gaW4gdGhlCitmYXVsdCBwYXRoIG9yIGluIHZtc2Nhbi4KKworQWxzbyBub3RlIHRoYXQgYSBwYWdlIHJldHVybmVkIGJ5IGdldF91c2VyX3BhZ2VzKCkgY291bGQgYmUgdHJ1bmNhdGVkIG9yCittaWdyYXRlZCBvdXQgZnJvbSB1bmRlciB1cywgd2hpbGUgd2UncmUgdHJ5aW5nIHRvIG1sb2NrIGl0LiAgVG8gZGV0ZWN0Cit0aGlzLCBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHRlc3RzIHRoZSBwYWdlX21hcHBpbmcgYWZ0ZXIgYWNxdWlyaW5nCit0aGUgcGFnZSBsb2NrLiAgSWYgdGhlIHBhZ2UgaXMgc3RpbGwgYXNzb2NpYXRlZCB3aXRoIGl0cyBtYXBwaW5nLCB3ZSdsbAorZ28gYWhlYWQgYW5kIGNhbGwgbWxvY2tfdm1hX3BhZ2UoKS4gIElmIHRoZSBtYXBwaW5nIGlzIGdvbmUsIHdlIGp1c3QKK3VubG9jayB0aGUgcGFnZSBhbmQgbW92ZSBvbi4gIFdvcnNlIGNhc2UsIHRoaXMgcmVzdWx0cyBpbiBwYWdlIG1hcHBlZAoraW4gYSBWTV9MT0NLRUQgdm1hIHJlbWFpbmluZyBvbiBhIG5vcm1hbCBMUlUgbGlzdCB3aXRob3V0IGJlaW5nCitQYWdlTWxvY2tlZCgpLiAgQWdhaW4sIHZtc2NhbiB3aWxsIGRldGVjdCBhbmQgY3VsbCBzdWNoIHBhZ2VzLgorCittbG9ja192bWFfcGFnZSgpLCBjYWxsZWQgd2l0aCB0aGUgcGFnZSBsb2NrZWQgW04uQi4sIG5vdCAibWxvY2tlZCJdLCB3aWxsCitUZXN0U2V0UGFnZU1sb2NrZWQoKSBmb3IgZWFjaCBwYWdlIHJldHVybmVkIGJ5IGdldF91c2VyX3BhZ2VzKCkuICBXZSB1c2UKK1Rlc3RTZXRQYWdlTWxvY2tlZCgpIGJlY2F1c2UgdGhlIHBhZ2UgbWlnaHQgYWxyZWFkeSBiZSBtbG9ja2VkIGJ5IGFub3RoZXIKK3Rhc2svdm1hIGFuZCB3ZSBkb24ndCB3YW50IHRvIGRvIGV4dHJhIHdvcmsuICBXZSBlc3BlY2lhbGx5IGRvIG5vdCB3YW50IHRvCitjb3VudCBhbiBtbG9ja2VkIHBhZ2UgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHN0YXRpc3RpY3MuICBJZiB0aGUgcGFnZSB3YXMKK2FscmVhZHkgbWxvY2tlZCwgbWxvY2tfdm1hX3BhZ2UoKSBpcyBkb25lLgorCitJZiB0aGUgcGFnZSB3YXMgTk9UIGFscmVhZHkgbWxvY2tlZCwgbWxvY2tfdm1hX3BhZ2UoKSBhdHRlbXB0cyB0byBpc29sYXRlIHRoZQorcGFnZSBmcm9tIHRoZSBMUlUsIGFzIGl0IGlzIGxpa2VseSBvbiB0aGUgYXBwcm9wcmlhdGUgYWN0aXZlIG9yIGluYWN0aXZlIGxpc3QKK2F0IHRoYXQgdGltZS4gIElmIHRoZSBpc29sYXRlX2xydV9wYWdlKCkgc3VjY2VlZHMsIG1sb2NrX3ZtYV9wYWdlKCkgd2lsbAorcHV0YmFjayB0aGUgcGFnZS0tcHV0YmFja19scnVfcGFnZSgpLS13aGljaCB3aWxsIG5vdGljZSB0aGF0IHRoZSBwYWdlIGlzIG5vdworbWxvY2tlZCBhbmQgZGl2ZXJ0IHRoZSBwYWdlIHRvIHRoZSB6b25lJ3MgdW5ldmljdGFibGUgTFJVIGxpc3QuICBJZgorbWxvY2tfdm1hX3BhZ2UoKSBpcyB1bmFibGUgdG8gaXNvbGF0ZSB0aGUgcGFnZSBmcm9tIHRoZSBMUlUsIHZtc2NhbiB3aWxsIGhhbmRsZQoraXQgbGF0ZXIgaWYvd2hlbiBpdCBhdHRlbXB0cyB0byByZWNsYWltIHRoZSBwYWdlLgorCisKK01sb2NrZWQgUGFnZXM6ICBGaWx0ZXJpbmcgU3BlY2lhbCBWbWFzCisKK21sb2NrX2ZpeHVwKCkgZmlsdGVycyBzZXZlcmFsIGNsYXNzZXMgb2YgInNwZWNpYWwiIHZtYXM6CisKKzEpIHZtYXMgd2l0aCBWTV9JT3xWTV9QRk5NQVAgc2V0IGFyZSBza2lwcGVkIGVudGlyZWx5LiAgVGhlIHBhZ2VzIGJlaGluZAorICAgdGhlc2UgbWFwcGluZ3MgYXJlIGluaGVyZW50bHkgcGlubmVkLCBzbyB3ZSBkb24ndCBuZWVkIHRvIG1hcmsgdGhlbSBhcworICAgbWxvY2tlZC4gIEluIGFueSBjYXNlLCBtb3N0IG9mIHRoZSBwYWdlcyBoYXZlIG5vIHN0cnVjdCBwYWdlIGluIHdoaWNoIHRvCisgICBzbyBtYXJrIHRoZSBwYWdlLiAgQmVjYXVzZSBvZiB0aGlzLCBnZXRfdXNlcl9wYWdlcygpIHdpbGwgZmFpbCBmb3IgdGhlc2UKKyAgIHZtYXMsIHNvIHRoZXJlIGlzIG5vIHNlbnNlIGluIGF0dGVtcHRpbmcgdG8gdmlzaXQgdGhlbS4KKworMikgdm1hcyBtYXBwaW5nIGh1Z2V0bGJmcyBwYWdlIGFyZSBhbHJlYWR5IGVmZmVjdGl2ZWx5IHBpbm5lZCBpbnRvIG1lbW9yeS4KKyAgIFdlIGRvbid0IG5lZWQgbm9yIHdhbnQgdG8gbWxvY2soKSB0aGVzZSBwYWdlcy4gIEhvd2V2ZXIsIHRvIHByZXNlcnZlIHRoZQorICAgcHJpb3IgYmVoYXZpb3Igb2YgbWxvY2soKS0tYmVmb3JlIHRoZSB1bmV2aWN0YWJsZS9tbG9jayBjaGFuZ2VzLS1tbG9ja19maXh1cCgpCisgICB3aWxsIGNhbGwgbWFrZV9wYWdlc19wcmVzZW50KCkgaW4gdGhlIGh1Z2V0bGJmcyB2bWEgcmFuZ2UgdG8gYWxsb2NhdGUgdGhlCisgICBodWdlIHBhZ2VzIGFuZCBwb3B1bGF0ZSB0aGUgcHRlcy4KKworMykgdm1hcyB3aXRoIFZNX0RPTlRFWFBBTkR8Vk1fUkVTRVJWRUQgYXJlIGdlbmVyYWxseSB1c2VyIHNwYWNlIG1hcHBpbmdzIG9mCisgICBrZXJuZWwgcGFnZXMsIHN1Y2ggYXMgdGhlIHZkc28gcGFnZSwgcmVsYXkgY2hhbm5lbCBwYWdlcywgZXRjLiAgVGhlc2UgcGFnZXMKKyAgIGFyZSBpbmhlcmVudGx5IHVuZXZpY3RhYmxlIGFuZCBhcmUgbm90IG1hbmFnZWQgb24gdGhlIExSVSBsaXN0cy4KKyAgIG1sb2NrX2ZpeHVwKCkgdHJlYXRzIHRoZXNlIHZtYXMgdGhlIHNhbWUgYXMgaHVnZXRsYmZzIHZtYXMuICBJdCBjYWxscworICAgbWFrZV9wYWdlc19wcmVzZW50KCkgdG8gcG9wdWxhdGUgdGhlIHB0ZXMuCisKK05vdGUgdGhhdCBmb3IgYWxsIG9mIHRoZXNlIHNwZWNpYWwgdm1hcywgbWxvY2tfZml4dXAoKSBkb2VzIG5vdCBzZXQgdGhlCitWTV9MT0NLRUQgZmxhZy4gIFRoZXJlZm9yZSwgd2Ugd29uJ3QgaGF2ZSB0byBkZWFsIHdpdGggdGhlbSBsYXRlciBkdXJpbmcKK211bmxvY2soKSBvciBtdW5tYXAoKS0tZm9yIGV4YW1wbGUsIGF0IHRhc2sgZXhpdC4gIE5laXRoZXIgZG9lcyBtbG9ja19maXh1cCgpCithY2NvdW50IHRoZXNlIHZtYXMgYWdhaW5zdCB0aGUgdGFzaydzICJsb2NrZWRfdm0iLgorCitNbG9ja2VkIFBhZ2VzOiAgRG93bmdyYWRpbmcgdGhlIE1tYXAgU2VtYXBob3JlLgorCittbG9ja19maXh1cCgpIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG1tYXAgc2VtYXBob3JlIGhlbGQgZm9yIHdyaXRlLCBiZWNhdXNlCitpdCBtYXkgaGF2ZSB0byBtZXJnZSBvciBzcGxpdCB2bWFzLiAgSG93ZXZlciwgbWxvY2tpbmcgYSBsYXJnZSByZWdpb24gb2YKK21lbW9yeSBjYW4gdGFrZSBhIGxvbmcgdGltZS0tZXNwZWNpYWxseSBpZiB2bXNjYW4gbXVzdCByZWNsYWltIHBhZ2VzIHRvCitzYXRpc2Z5IHRoZSByZWdpb25zIHJlcXVpcmVtZW50cy4gIEZhdWx0aW5nIGluIGEgbGFyZ2UgcmVnaW9uIHdpdGggdGhlIG1tYXAKK3NlbWFwaG9yZSBoZWxkIGZvciB3cml0ZSBjYW4gaG9sZCBvZmYgb3RoZXIgZmF1bHRzIG9uIHRoZSBhZGRyZXNzIHNwYWNlLCBpbgordGhlIGNhc2Ugb2YgYSBtdWx0aS10aHJlYWRlZCB0YXNrLiAgSXQgY2FuIGFsc28gaG9sZCBvZmYgc2NhbnMgb2YgdGhlIHRhc2sncworYWRkcmVzcyBzcGFjZSB2aWEgL3Byb2MuICBXaGlsZSB0ZXN0aW5nIHVuZGVyIGhlYXZ5IGxvYWQsIGl0IHdhcyBvYnNlcnZlZCB0aGF0Cit0aGUgcHMoMSkgY29tbWFuZCBjb3VsZCBiZSBoZWxkIG9mZiBmb3IgbWFueSBtaW51dGVzIHdoaWxlIGEgbGFyZ2Ugc2VnbWVudCB3YXMKK21sb2NrKCllZCBkb3duLgorCitUbyBhZGRyZXNzIHRoaXMgaXNzdWUsIGFuZCB0byBtYWtlIHRoZSBzeXN0ZW0gbW9yZSByZXNwb25zaXZlIGR1cmluZyBtbG9jaygpaW5nCitvZiBsYXJnZSBzZWdtZW50cywgbWxvY2tfZml4dXAoKSBkb3duZ3JhZGVzIHRoZSBtbWFwIHNlbWFwaG9yZSB0byByZWFkIG1vZGUKK2R1cmluZyB0aGUgY2FsbCB0byBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpLiAgVGhpcyB3b3JrcyBmaW5lLiAgSG93ZXZlciwgdGhlCitjYWxsZXJzIG9mIG1sb2NrX2ZpeHVwKCkgZXhwZWN0IHRoZSBzZW1hcGhvcmUgdG8gYmUgcmV0dXJuZWQgaW4gd3JpdGUgbW9kZS4KK1NvLCBtbG9ja19maXh1cCgpICJ1cGdyYWRlcyIgdGhlIHNlbXBob3JlIHRvIHdyaXRlIG1vZGUuICBMaW51eCBkb2VzIG5vdAorc3VwcG9ydCBhbiBhdG9taWMgdXBncmFkZV9zZW0oKSBjYWxsLCBzbyBtbG9ja19maXh1cCgpIG11c3QgZHJvcCB0aGUgc2VtYXBob3JlCithbmQgcmVhY3F1aXJlIGl0IGluIHdyaXRlIG1vZGUuICBJbiBhIG11bHRpLXRocmVhZGVkIHRhc2ssIGl0IGlzIHBvc3NpYmxlIGZvcgordGhlIHRhc2sgbWVtb3J5IG1hcCB0byBjaGFuZ2Ugd2hpbGUgdGhlIHNlbWFwaG9yZSBpcyBkcm9wcGVkLiAgVGhlcmVmb3JlLAorbWxvY2tfZml4dXAoKSBsb29rcyB1cCB0aGUgdm1hIGF0IHRoZSByYW5nZSBzdGFydCBhZGRyZXNzIGFmdGVyIHJlYWNxdWlyaW5nCit0aGUgc2VtYXBob3JlIGluIHdyaXRlIG1vZGUgYW5kIHZlcmlmaWVzIHRoYXQgaXQgc3RpbGwgY292ZXJzIHRoZSBvcmlnaW5hbAorcmFuZ2UuICBJZiBub3QsIG1sb2NrX2ZpeHVwKCkgcmV0dXJucyBhbiBlcnJvciBbLUVBR0FJTl0uICBBbGwgY2FsbGVycyBvZgorbWxvY2tfZml4dXAoKSBoYXZlIGJlZW4gY2hhbmdlZCB0byBkZWFsIHdpdGggdGhpcyBuZXcgZXJyb3IgY29uZGl0aW9uLgorCitOb3RlOiAgd2hlbiBtdW5sb2NraW5nIGEgcmVnaW9uLCBhbGwgb2YgdGhlIHBhZ2VzIHNob3VsZCBhbHJlYWR5IGJlIHJlc2lkZW50LS0KK3VubGVzcyB3ZSBoYXZlIHJhY2luZyB0aHJlYWRzIG1sb2NraW5nKCkgYW5kIG11bmxvY2tpbmcoKSByZWdpb25zLiAgU28sCit1bmxvY2tpbmcgc2hvdWxkIG5vdCBoYXZlIHRvIHdhaXQgZm9yIHBhZ2UgYWxsb2NhdGlvbnMgbm9yIGZhdWx0cyAgb2YgYW55IGtpbmQuCitUaGVyZWZvcmUgbWxvY2tfZml4dXAoKSBkb2VzIG5vdCBkb3duZ3JhZGUgdGhlIHNlbWFwaG9yZSBmb3IgbXVubG9jaygpLgorCisKK01sb2NrZWQgUGFnZXM6ICBtdW5sb2NrKCkvbXVubG9ja2FsbCgpIFN5c3RlbSBDYWxsIEhhbmRsaW5nCisKK1RoZSBtdW5sb2NrKCkgYW5kIG11bmxvY2thbGwoKSBzeXN0ZW0gY2FsbHMgYXJlIGhhbmRsZWQgYnkgdGhlIHNhbWUgZnVuY3Rpb25zLS0KK2RvX21sb2NrW2FsbF0oKS0tYXMgdGhlIG1sb2NrKCkgYW5kIG1sb2NrYWxsKCkgc3lzdGVtIGNhbGxzIHdpdGggdGhlIHVubG9jawordnMgbG9jayBvcGVyYXRpb24gaW5kaWNhdGVkIGJ5IGFuIGFyZ3VtZW50LiAgU28sIHRoZXNlIHN5c3RlbSBjYWxscyBhcmUgYWxzbworaGFuZGxlZCBieSBtbG9ja19maXh1cCgpLiAgQWdhaW4sIGlmIGNhbGxlZCBmb3IgYW4gYWxyZWFkeSBtdW5sb2NrKCllZCB2bWEsCittbG9ja19maXh1cCgpIHNpbXBseSByZXR1cm5zLiAgQmVjYXVzZSBvZiB0aGUgdm1hIGZpbHRlcmluZyBkaXNjdXNzZWQgYWJvdmUsCitWTV9MT0NLRUQgd2lsbCBub3QgYmUgc2V0IGluIGFueSAic3BlY2lhbCIgdm1hcy4gIFNvLCB0aGVzZSB2bWFzIHdpbGwgYmUKK2lnbm9yZWQgZm9yIG11bmxvY2suCisKK0lmIHRoZSB2bWEgaXMgVk1fTE9DS0VELCBtbG9ja19maXh1cCgpIGFnYWluIGF0dGVtcHRzIHRvIG1lcmdlIG9yIHNwbGl0IG9mZgordGhlIHNwZWNpZmllZCByYW5nZS4gIFRoZSByYW5nZSBpcyB0aGVuIG11bmxvY2tlZCB2aWEgdGhlIGZ1bmN0aW9uCitfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpLS10aGUgc2FtZSBmdW5jdGlvbiB1c2VkIHRvIG1sb2NrIGEgdm1hIHJhbmdlLS0KK3Bhc3NpbmcgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQgbXVubG9jaygpIGlzIGJlaW5nIHBlcmZvcm1lZC4KKworQmVjYXVzZSB0aGUgdm1hIGFjY2VzcyBwcm90ZWN0aW9ucyBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCB0byBQUk9UX05PTkUgYWZ0ZXIKK2ZhdWx0aW5nIGluIGFuZCBtbG9ja2luZyBzb21lIHBhZ2VzLCBnZXRfdXNlcl9wYWdlcygpIHdhcyB1bnJlbGlhYmxlIGZvciB2aXNpdGluZwordGhlc2UgcGFnZXMgZm9yIG11bmxvY2tpbmcuICBCZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gbGVhdmUgcGFnZXMgbWxvY2tlZCgpLAorZ2V0X3VzZXJfcGFnZXMoKSB3YXMgZW5oYW5jZWQgdG8gYWNjZXB0IGEgZmxhZyB0byBpZ25vcmUgdGhlIHBlcm1pc3Npb25zIHdoZW4KK2ZldGNoaW5nIHRoZSBwYWdlcy0tYWxsIG9mIHdoaWNoIHNob3VsZCBiZSByZXNpZGVudCBhcyBhIHJlc3VsdCBvZiBwcmV2aW91cworbWxvY2soKWluZy4KKworRm9yIG11bmxvY2soKSwgX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKSB1bmxvY2tzIGluZGl2aWR1YWwgcGFnZXMgYnkgY2FsbGluZworbXVubG9ja192bWFfcGFnZSgpLiAgbXVubG9ja192bWFfcGFnZSgpIHVuY29uZGl0aW9uYWxseSBjbGVhcnMgdGhlIFBHX21sb2NrZWQKK2ZsYWcgdXNpbmcgVGVzdENsZWFyUGFnZU1sb2NrZWQoKS4gIEFzIHdpdGggbWxvY2tfdm1hX3BhZ2UoKSwgbXVubG9ja192bWFfcGFnZSgpCit1c2UgdGhlIFRlc3QqUGFnZU1sb2NrZWQoKSBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHBhZ2UgbWlnaHQKK2hhdmUgYWxyZWFkeSBiZWVuIHVubG9ja2VkIGJ5IGFub3RoZXIgdGFzay4gIElmIHRoZSBwYWdlIHdhcyBtbG9ja2VkLAorbXVubG9ja192bWFfcGFnZSgpIHVwZGF0ZXMgdGhhdCB6b25lIHN0YXRpc3RpY3MgZm9yIHRoZSBudW1iZXIgb2YgbWxvY2tlZAorcGFnZXMuICBOb3RlLCBob3dldmVyLCB0aGF0IGF0IHRoaXMgcG9pbnQgd2UgaGF2ZW4ndCBjaGVja2VkIHdoZXRoZXIgdGhlIHBhZ2UKK2lzIG1hcHBlZCBieSBvdGhlciBWTV9MT0NLRUQgdm1hcy4KKworV2UgY2FuJ3QgY2FsbCB0cnlfdG9fbXVubG9jaygpLCB0aGUgZnVuY3Rpb24gdGhhdCB3YWxrcyB0aGUgcmV2ZXJzZSBtYXAgdG8gY2hlY2sKK2ZvciBvdGhlciBWTV9MT0NLRUQgdm1hcywgd2l0aG91dCBmaXJzdCBpc29sYXRpbmcgdGhlIHBhZ2UgZnJvbSB0aGUgTFJVLgordHJ5X3RvX211bmxvY2soKSBpcyBhIHZhcmlhbnQgb2YgdHJ5X3RvX3VubWFwKCkgYW5kIHRodXMgcmVxdWlyZXMgdGhhdCB0aGUgcGFnZQorbm90IGJlIG9uIGFuIGxydSBsaXN0LiAgW01vcmUgb24gdGhlc2UgYmVsb3cuXSAgSG93ZXZlciwgdGhlIGNhbGwgdG8KK2lzb2xhdGVfbHJ1X3BhZ2UoKSBjb3VsZCBmYWlsLCBpbiB3aGljaCBjYXNlIHdlIGNvdWxkbid0IHRyeV90b19tdW5sb2NrKCkuCitTbywgd2UgZ28gYWhlYWQgYW5kIGNsZWFyIFBHX21sb2NrZWQgdXAgZnJvbnQsIGFzIHRoaXMgbWlnaHQgYmUgdGhlIG9ubHkgY2hhbmNlCit3ZSBoYXZlLiAgSWYgd2UgY2FuIHN1Y2Nlc3NmdWxseSBpc29sYXRlIHRoZSBwYWdlLCB3ZSBnbyBhaGVhZCBhbmQKK3RyeV90b19tdW5sb2NrKCksIHdoaWNoIHdpbGwgcmVzdG9yZSB0aGUgUEdfbWxvY2tlZCBmbGFnIGFuZCB1cGRhdGUgdGhlIHpvbmUKK3BhZ2Ugc3RhdGlzdGljcyBpZiBpdCBmaW5kcyBhbm90aGVyIHZtYSBob2xkaW5nIHRoZSBwYWdlIG1sb2NrZWQuICBJZiB3ZSBmYWlsCit0byBpc29sYXRlIHRoZSBwYWdlLCB3ZSdsbCBoYXZlIGxlZnQgYSBwb3RlbnRpYWxseSBtbG9ja2VkIHBhZ2Ugb24gdGhlIExSVS4KK1RoaXMgaXMgZmluZSwgYmVjYXVzZSB3ZSdsbCBjYXRjaCBpdCBsYXRlciB3aGVuL2lmIHZtc2NhbiB0cmllcyB0byByZWNsYWltIHRoZQorcGFnZS4gIFRoaXMgc2hvdWxkIGJlIHJlbGF0aXZlbHkgcmFyZS4KKworTWxvY2tlZCBQYWdlczogIE1pZ3JhdGluZyBUaGVtLi4uCisKK0EgcGFnZSB0aGF0IGlzIGJlaW5nIG1pZ3JhdGVkIGhhcyBiZWVuIGlzb2xhdGVkIGZyb20gdGhlIGxydSBsaXN0cyBhbmQgaXMKK2hlbGQgbG9ja2VkIGFjcm9zcyB1bm1hcHBpbmcgb2YgdGhlIHBhZ2UsIHVwZGF0aW5nIHRoZSBwYWdlJ3MgbWFwcGluZworW2FkZHJlc3Nfc3BhY2VdIGVudHJ5IGFuZCBjb3B5aW5nIHRoZSBjb250ZW50cyBhbmQgc3RhdGUsIHVudGlsIHRoZQorcGFnZSB0YWJsZSBlbnRyeSBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGFuIGVudHJ5IHRoYXQgcmVmZXJzIHRvIHRoZSBuZXcKK3BhZ2UuICBMaW51eCBzdXBwb3J0cyBtaWdyYXRpb24gb2YgbWxvY2tlZCBwYWdlcyBhbmQgb3RoZXIgdW5ldmljdGFibGUKK3BhZ2VzLiAgVGhpcyBpbnZvbHZlcyBzaW1wbHkgbW92aW5nIHRoZSBQYWdlTWxvY2tlZCBhbmQgUGFnZVVuZXZpY3RhYmxlIHN0YXRlcworZnJvbSB0aGUgb2xkIHBhZ2UgdG8gdGhlIG5ldyBwYWdlLgorCitOb3RlIHRoYXQgcGFnZSBtaWdyYXRpb24gY2FuIHJhY2Ugd2l0aCBtbG9ja2luZyBvciBtdW5sb2NraW5nIG9mIHRoZSBzYW1lCitwYWdlLiAgVGhpcyBoYXMgYmVlbiBkaXNjdXNzZWQgZnJvbSB0aGUgbWxvY2svbXVubG9jayBwZXJzcGVjdGl2ZSBpbiB0aGUKK3Jlc3BlY3RpdmUgc2VjdGlvbnMgYWJvdmUuICBCb3RoIHByb2Nlc3NlcyBbbWlncmF0aW9uLCBtW3VuXWxvY2tpbmddLCBob2xkCit0aGUgcGFnZSBsb2NrZWQuICBUaGlzIHByb3ZpZGVzIHRoZSBmaXJzdCBsZXZlbCBvZiBzeW5jaHJvbml6YXRpb24uICBQYWdlCittaWdyYXRpb24gemVyb3Mgb3V0IHRoZSBwYWdlX21hcHBpbmcgb2YgdGhlIG9sZCBwYWdlIGJlZm9yZSB1bmxvY2tpbmcgaXQsCitzbyBtW3VuXWxvY2sgY2FuIHNraXAgdGhlc2UgcGFnZXMgYnkgdGVzdGluZyB0aGUgcGFnZSBtYXBwaW5nIHVuZGVyIHBhZ2UKK2xvY2suCisKK1doZW4gY29tcGxldGluZyBwYWdlIG1pZ3JhdGlvbiwgd2UgcGxhY2UgdGhlIG5ldyBhbmQgb2xkIHBhZ2VzIGJhY2sgb250byB0aGUKK2xydSBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSBsb2NrLiAgVGhlICJ1bm5lZWRlZCIgcGFnZS0tb2xkIHBhZ2Ugb24gc3VjY2VzcywKK25ldyBwYWdlIG9uIGZhaWx1cmUtLXdpbGwgYmUgZnJlZWQgd2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50IGhlbGQgYnkgdGhlCittaWdyYXRpb24gcHJvY2VzcyBpcyByZWxlYXNlZC4gIFRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IHN0cmFuZCBwYWdlcyBvbiB0aGUKK3VuZXZpY3RhYmxlIGxpc3QgYmVjYXVzZSBvZiBhIHJhY2UgYmV0d2VlbiBtdW5sb2NrIGFuZCBtaWdyYXRpb24sIHBhZ2UKK21pZ3JhdGlvbiB1c2VzIHRoZSBwdXRiYWNrX2xydV9wYWdlKCkgZnVuY3Rpb24gdG8gYWRkIG1pZ3JhdGVkIHBhZ2VzIGJhY2sgdG8KK3RoZSBscnUuCisKKworTWxvY2tlZCBQYWdlczogIG1tYXAoTUFQX0xPQ0tFRCkgU3lzdGVtIENhbGwgSGFuZGxpbmcKKworSW4gYWRkaXRpb24gdGhlIHRoZSBtbG9jaygpL21sb2NrYWxsKCkgc3lzdGVtIGNhbGxzLCBhbiBhcHBsaWNhdGlvbiBjYW4gcmVxdWVzdAordGhhdCBhIHJlZ2lvbiBvZiBtZW1vcnkgYmUgbWxvY2tlZCB1c2luZyB0aGUgTUFQX0xPQ0tFRCBmbGFnIHdpdGggdGhlIG1tYXAoKQorY2FsbC4gIEZ1cnRoZXJtb3JlLCBhbnkgbW1hcCgpIGNhbGwgb3IgYnJrKCkgY2FsbCB0aGF0IGV4cGFuZHMgdGhlIGhlYXAgYnkgYQordGFzayB0aGF0IGhhcyBwcmV2aW91c2x5IGNhbGxlZCBtbG9ja2FsbCgpIHdpdGggdGhlIE1DTF9GVVRVUkUgZmxhZyB3aWxsIHJlc3VsdAoraW4gdGhlIG5ld2x5IG1hcHBlZCBtZW1vcnkgYmVpbmcgbWxvY2tlZC4gIEJlZm9yZSB0aGUgdW5ldmljdGFibGUvbWxvY2sgY2hhbmdlcywKK3RoZSBrZXJuZWwgc2ltcGx5IGNhbGxlZCBtYWtlX3BhZ2VzX3ByZXNlbnQoKSB0byBhbGxvY2F0ZSBwYWdlcyBhbmQgcG9wdWxhdGUKK3RoZSBwYWdlIHRhYmxlLgorCitUbyBtbG9jayBhIHJhbmdlIG9mIG1lbW9yeSB1bmRlciB0aGUgdW5ldmljdGFibGUvbWxvY2sgaW5mcmFzdHJ1Y3R1cmUsIHRoZQorbW1hcCgpIGhhbmRsZXIgYW5kIHRhc2sgYWRkcmVzcyBzcGFjZSBleHBhbnNpb24gZnVuY3Rpb25zIGNhbGwKK21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHNwZWNpZnlpbmcgdGhlIHZtYSBhbmQgdGhlIGFkZHJlc3MgcmFuZ2UgdG8gbWxvY2suCittbG9ja192bWFfcGFnZXNfcmFuZ2UoKSBmaWx0ZXJzIHZtYXMgbGlrZSBtbG9ja19maXh1cCgpLCBhcyBkZXNjcmliZWQgYWJvdmUgaW4KKyJNbG9ja2VkIFBhZ2VzOiAgRmlsdGVyaW5nIFZtYXMiLiAgSXQgd2lsbCBjbGVhciB0aGUgVk1fTE9DS0VEIGZsYWcsIHdoaWNoIHdpbGwKK2hhdmUgYWxyZWFkeSBiZWVuIHNldCBieSB0aGUgY2FsbGVyLCBpbiBmaWx0ZXJlZCB2bWFzLiAgVGh1cyB0aGVzZSB2bWEncyBuZWVkCitub3QgYmUgdmlzaXRlZCBmb3IgbXVubG9jayB3aGVuIHRoZSByZWdpb24gaXMgdW5tYXBwZWQuCisKK0ZvciAibm9ybWFsIiB2bWFzLCBtbG9ja192bWFfcGFnZXNfcmFuZ2UoKSBjYWxscyBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHRvCitmYXVsdC9hbGxvY2F0ZSB0aGUgcGFnZXMgYW5kIG1sb2NrIHRoZW0uICBBZ2FpbiwgbGlrZSBtbG9ja19maXh1cCgpLAorbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgZG93bmdyYWRlcyB0aGUgbW1hcCBzZW1hcGhvcmUgdG8gcmVhZCBtb2RlIGJlZm9yZQorYXR0ZW1wdGluZyB0byBmYXVsdC9hbGxvY2F0ZSBhbmQgbWxvY2sgdGhlIHBhZ2VzOyBhbmQgInVwZ3JhZGVzIiB0aGUgc2VtYXBob3JlCitiYWNrIHRvIHdyaXRlIG1vZGUgYmVmb3JlIHJldHVybmluZy4KKworVGhlIGNhbGxlcnMgb2YgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgd2lsbCBoYXZlIGFscmVhZHkgYWRkZWQgdGhlIG1lbW9yeQorcmFuZ2UgdG8gYmUgbWxvY2tlZCB0byB0aGUgdGFzaydzICJsb2NrZWRfdm0iLiAgVG8gYWNjb3VudCBmb3IgZmlsdGVyZWQgdm1hcywKK21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHJldHVybnMgdGhlIG51bWJlciBvZiBwYWdlcyBOT1QgbWxvY2tlZC4gIEFsbCBvZiB0aGUKK2NhbGxlcnMgdGhlbiBzdWJ0cmFjdCBhIG5vbi1uZWdhdGl2ZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgdGFzaydzIGxvY2tlZF92bS4KK0EgbmVnYXRpdmUgcmV0dXJuIHZhbHVlIHJlcHJlc2VudCBhbiBlcnJvci0tZm9yIGV4YW1wbGUsIGZyb20gZ2V0X3VzZXJfcGFnZXMoKQorYXR0ZW1wdGluZyB0byBmYXVsdCBpbiBhIHZtYSB3aXRoIFBST1RfTk9ORSBhY2Nlc3MuICBJbiB0aGlzIGNhc2UsIHdlIGxlYXZlCit0aGUgbWVtb3J5IHJhbmdlIGFjY291bnRlZCBhcyBsb2NrZWRfdm0sIGFzIHRoZSBwcm90ZWN0aW9ucyBjb3VsZCBiZSBjaGFuZ2VkCitsYXRlciBhbmQgcGFnZXMgYWxsb2NhdGVkIGludG8gdGhhdCByZWdpb24uCisKKworTWxvY2tlZCBQYWdlczogIG11bm1hcCgpL2V4aXQoKS9leGVjKCkgU3lzdGVtIENhbGwgSGFuZGxpbmcKKworV2hlbiB1bm1hcHBpbmcgYW4gbWxvY2tlZCByZWdpb24gb2YgbWVtb3J5LCB3aGV0aGVyIGJ5IGFuIGV4cGxpY2l0IGNhbGwgdG8KK211bm1hcCgpIG9yIHZpYSBhbiBpbnRlcm5hbCB1bm1hcCBmcm9tIGV4aXQoKSBvciBleGVjKCkgcHJvY2Vzc2luZywgd2UgbXVzdAorbXVubG9jayB0aGUgcGFnZXMgaWYgd2UncmUgcmVtb3ZpbmcgdGhlIGxhc3QgVk1fTE9DS0VEIHZtYSB0aGF0IG1hcHMgdGhlIHBhZ2VzLgorQmVmb3JlIHRoZSB1bmV2aWN0YWJsZS9tbG9jayBjaGFuZ2VzLCBtbG9ja2luZyBkaWQgbm90IG1hcmsgdGhlIHBhZ2VzIGluIGFueSB3YXksCitzbyB1bm1hcHBpbmcgdGhlbSByZXF1aXJlZCBubyBwcm9jZXNzaW5nLgorCitUbyBtdW5sb2NrIGEgcmFuZ2Ugb2YgbWVtb3J5IHVuZGVyIHRoZSB1bmV2aWN0YWJsZS9tbG9jayBpbmZyYXN0cnVjdHVyZSwgdGhlCittdW5tYXAoKSBoYW5kZXIgYW5kIHRhc2sgYWRkcmVzcyBzcGFjZSB0ZWFyIGRvd24gZnVuY3Rpb24gY2FsbAorbXVubG9ja192bWFfcGFnZXNfYWxsKCkuICBUaGUgbmFtZSByZWZsZWN0cyB0aGUgb2JzZXJ2YXRpb24gdGhhdCBvbmUgYWx3YXlzCitzcGVjaWZpZXMgdGhlIGVudGlyZSB2bWEgcmFuZ2Ugd2hlbiBtdW5sb2NrKClpbmcgZHVyaW5nIHVubWFwIG9mIGEgcmVnaW9uLgorQmVjYXVzZSBvZiB0aGUgdm1hIGZpbHRlcmluZyB3aGVuIG1sb2NraW5nKCkgcmVnaW9ucywgb25seSAibm9ybWFsIiB2bWFzIHRoYXQKK2FjdHVhbGx5IGNvbnRhaW4gbWxvY2tlZCBwYWdlcyB3aWxsIGJlIHBhc3NlZCB0byBtdW5sb2NrX3ZtYV9wYWdlc19hbGwoKS4KKworbXVubG9ja192bWFfcGFnZXNfYWxsKCkgY2xlYXJzIHRoZSBWTV9MT0NLRUQgdm1hIGZsYWcgYW5kLCBsaWtlIG1sb2NrX2ZpeHVwKCkKK2ZvciB0aGUgbXVubG9jayBjYXNlLCBjYWxscyBfX211bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgdG8gd2FsayB0aGUgcGFnZSB0YWJsZQorZm9yIHRoZSB2bWEncyBtZW1vcnkgcmFuZ2UgYW5kIG11bmxvY2tfdm1hX3BhZ2UoKSBlYWNoIHJlc2lkZW50IHBhZ2UgbWFwcGVkIGJ5Cit0aGUgdm1hLiAgVGhpcyBlZmZlY3RpdmVseSBtdW5sb2NrcyB0aGUgcGFnZSwgb25seSBpZiB0aGlzIGlzIHRoZSBsYXN0CitWTV9MT0NLRUQgdm1hIHRoYXQgbWFwcyB0aGUgcGFnZS4KKworCitNbG9ja2VkIFBhZ2U6ICB0cnlfdG9fdW5tYXAoKQorCitbTm90ZTogIHRoZSBjb2RlIGNoYW5nZXMgcmVwcmVzZW50ZWQgYnkgdGhpcyBzZWN0aW9uIGFyZSByZWFsbHkgcXVpdGUgc21hbGwKK2NvbXBhcmVkIHRvIHRoZSB0ZXh0IHRvIGRlc2NyaWJlIHdoYXQgaGFwcGVuaW5nIGFuZCB3aHksIGFuZCB0byBkaXNjdXNzIHRoZQoraW1wbGljYXRpb25zLl0KKworUGFnZXMgY2FuLCBvZiBjb3Vyc2UsIGJlIG1hcHBlZCBpbnRvIG11bHRpcGxlIHZtYXMuICBTb21lIG9mIHRoZXNlIHZtYXMgbWF5CitoYXZlIFZNX0xPQ0tFRCBmbGFnIHNldC4gIEl0IGlzIHBvc3NpYmxlIGZvciBhIHBhZ2UgbWFwcGVkIGludG8gb25lIG9yIG1vcmUKK1ZNX0xPQ0tFRCB2bWFzIG5vdCB0byBoYXZlIHRoZSBQR19tbG9ja2VkIGZsYWcgc2V0IGFuZCB0aGVyZWZvcmUgcmVzaWRlIG9uIG9uZQorb2YgdGhlIGFjdGl2ZSBvciBpbmFjdGl2ZSBMUlUgbGlzdHMuICBUaGlzIGNvdWxkIGhhcHBlbiBpZiwgZm9yIGV4YW1wbGUsIGEKK3Rhc2sgaW4gdGhlIHByb2Nlc3Mgb2YgbXVubG9jaygpaW5nIHRoZSBwYWdlIGNvdWxkIG5vdCBpc29sYXRlIHRoZSBwYWdlIGZyb20KK3RoZSBMUlUuICBBcyBhIHJlc3VsdCwgdm1zY2FuL3Nocmlua19wYWdlX2xpc3QoKSBtaWdodCBlbmNvdW50ZXIgc3VjaCBhIHBhZ2UKK2FzIGRlc2NyaWJlZCBpbiAiVW5ldmljdGFibGUgUGFnZXMgYW5kIFZtc2NhbiBbc2hyaW5rXypfbGlzdCgpXSIuICBUbworaGFuZGxlIHRoaXMgc2l0dWF0aW9uLCB0cnlfdG9fdW5tYXAoKSBoYXMgYmVlbiBlbmhhbmNlZCB0byBjaGVjayBmb3IgVk1fTE9DS0VECit2bWFzIHdoaWxlIGl0IGlzIHdhbGtpbmcgYSBwYWdlJ3MgcmV2ZXJzZSBtYXAuCisKK3RyeV90b191bm1hcCgpIGlzIGFsd2F5cyBjYWxsZWQsIGJ5IGVpdGhlciB2bXNjYW4gZm9yIHJlY2xhaW0gb3IgZm9yIHBhZ2UKK21pZ3JhdGlvbiwgd2l0aCB0aGUgYXJndW1lbnQgcGFnZSBsb2NrZWQgYW5kIGlzb2xhdGVkIGZyb20gdGhlIExSVS4gIEJVR19PTigpCithc3NlcnRpb25zIGVuZm9yY2UgdGhpcyByZXF1aXJlbWVudC4gIFNlcGFyYXRlIGZ1bmN0aW9ucyBoYW5kbGUgYW5vbnltb3VzIGFuZAorbWFwcGVkIGZpbGUgcGFnZXMsIGFzIHRoZXNlIHR5cGVzIG9mIHBhZ2VzIGhhdmUgZGlmZmVyZW50IHJldmVyc2UgbWFwCittZWNoYW5pc21zLgorCisJdHJ5X3RvX3VubWFwX2Fub24oKQorCitUbyB1bm1hcCBhbm9ueW1vdXMgcGFnZXMsIGVhY2ggdm1hIGluIHRoZSBsaXN0IGFuY2hvcmVkIGluIHRoZSBhbm9uX3ZtYSBtdXN0IGJlCit2aXNpdGVkLS1hdCBsZWFzdCB1bnRpbCBhIFZNX0xPQ0tFRCB2bWEgaXMgZW5jb3VudGVyZWQuICBJZiB0aGUgcGFnZSBpcyBiZWluZwordW5tYXBwZWQgZm9yIG1pZ3JhdGlvbiwgVk1fTE9DS0VEIHZtYXMgZG8gbm90IHN0b3AgdGhlIHByb2Nlc3MgYmVjYXVzZSBtbG9ja2VkCitwYWdlcyBhcmUgbWlncmF0YWJsZS4gIEhvd2V2ZXIsIGZvciByZWNsYWltLCBpZiB0aGUgcGFnZSBpcyBtYXBwZWQgaW50byBhCitWTV9MT0NLRUQgdm1hLCB0aGUgc2NhbiBzdG9wcy4gIHRyeV90b191bm1hcCgpIGF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIG1tYXAKK3NlbXBob3JlIG9mIHRoZSBtbV9zdHJ1Y3QgdG8gd2hpY2ggdGhlIHZtYSBiZWxvbmdzIGluIHJlYWQgbW9kZS4gIElmIHRoaXMgaXMKK3N1Y2Nlc3NmdWwsIHRyeV90b191bm1hcCgpIHdpbGwgbWxvY2sgdGhlIHBhZ2UgdmlhIG1sb2NrX3ZtYV9wYWdlKCktLXdlCit3b3VsZG4ndCBoYXZlIGdvdHRlbiB0byB0cnlfdG9fdW5tYXAoKSBpZiB0aGUgcGFnZSB3ZXJlIGFscmVhZHkgbWxvY2tlZC0tYW5kCit3aWxsIHJldHVybiBTV0FQX01MT0NLLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHBhZ2UgaXMgdW5ldmljdGFibGUuICBJZiB0aGUKK21tYXAgc2VtYXBob3JlIGNhbm5vdCBiZSBhY3F1aXJlZCwgd2UgYXJlIG5vdCBzdXJlIHdoZXRoZXIgdGhlIHBhZ2UgaXMgcmVhbGx5Cit1bmV2aWN0YWJsZSBvciBub3QuICBJbiB0aGlzIGNhc2UsIHRyeV90b191bm1hcCgpIHdpbGwgcmV0dXJuIFNXQVBfQUdBSU4uCisKKwl0cnlfdG9fdW5tYXBfZmlsZSgpIC0tIGxpbmVhciBtYXBwaW5ncworCitVbm1hcHBpbmcgb2YgYSBtYXBwZWQgZmlsZSBwYWdlIHdvcmtzIHRoZSBzYW1lLCBleGNlcHQgdGhhdCB0aGUgc2NhbiB2aXNpdHMKK2FsbCB2bWFzIHRoYXQgbWFwcyB0aGUgcGFnZSdzIGluZGV4L3BhZ2Ugb2Zmc2V0IGluIHRoZSBwYWdlJ3MgbWFwcGluZydzCityZXZlcnNlIG1hcCBwcmlvcml0eSBzZWFyY2ggdHJlZS4gIEl0IG11c3QgYWxzbyB2aXNpdCBlYWNoIHZtYSBpbiB0aGUgcGFnZSdzCittYXBwaW5nJ3Mgbm9uLWxpbmVhciBsaXN0LCBpZiB0aGUgbGlzdCBpcyBub24tZW1wdHkuICBBcyBmb3IgYW5vbnltb3VzIHBhZ2VzLAorb24gZW5jb3VudGVyaW5nIGEgVk1fTE9DS0VEIHZtYSBmb3IgYSBtYXBwZWQgZmlsZSBwYWdlLCB0cnlfdG9fdW5tYXAoKSB3aWxsCithdHRlbXB0IHRvIGFjcXVpcmUgdGhlIGFzc29jaWF0ZWQgbW1fc3RydWN0J3MgbW1hcCBzZW1hcGhvcmUgdG8gbWxvY2sgdGhlIHBhZ2UsCityZXR1cm5pbmcgU1dBUF9NTE9DSyBpZiB0aGlzIGlzIHN1Y2Nlc3NmdWwsIGFuZCBTV0FQX0FHQUlOLCBpZiBub3QuCisKKwl0cnlfdG9fdW5tYXBfZmlsZSgpIC0tIG5vbi1saW5lYXIgbWFwcGluZ3MKKworSWYgYSBwYWdlJ3MgbWFwcGluZyBjb250YWlucyBhIG5vbi1lbXB0eSBub24tbGluZWFyIG1hcHBpbmcgdm1hIGxpc3QsIHRoZW4KK3RyeV90b191bnttYXB8bG9ja30oKSBtdXN0IGFsc28gdmlzaXQgZWFjaCB2bWEgaW4gdGhhdCBsaXN0IHRvIGRldGVybWluZQord2hldGhlciB0aGUgcGFnZSBpcyBtYXBwZWQgaW4gYSBWTV9MT0NLRUQgdm1hLiAgQWdhaW4sIHRoZSBzY2FuIG11c3QgdmlzaXQKK2FsbCB2bWFzIGluIHRoZSBub24tbGluZWFyIGxpc3QgdG8gZW5zdXJlIHRoYXQgdGhlIHBhZ2VzIGlzIG5vdC9zaG91bGQgbm90IGJlCittbG9ja2VkLiAgSWYgYSBWTV9MT0NLRUQgdm1hIGlzIGZvdW5kIGluIHRoZSBsaXN0LCB0aGUgc2NhbiBjb3VsZCB0ZXJtaW5hdGUuCitIb3dldmVyLCB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgcGFnZSBpcyBhY3R1YWxseSBtYXBwZWQKK2luIGEgZ2l2ZW4gdm1hLS1laXRoZXIgZm9yIHVubWFwcGluZyBvciB0ZXN0aW5nIHdoZXRoZXIgdGhlIFZNX0xPQ0tFRCB2bWEKK2FjdHVhbGx5IHBpbnMgdGhlIHBhZ2UuCisKK1NvLCB0cnlfdG9fdW5tYXBfZmlsZSgpIGhhbmRsZXMgbm9uLWxpbmVhciBtYXBwaW5ncyBieSBzY2FubmluZyBhIGNlcnRhaW4KK251bWJlciBvZiBwYWdlcy0tYSAiY2x1c3RlciItLWluIGVhY2ggbm9uLWxpbmVhciB2bWEgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWdlJ3MKK21hcHBpbmcsIGZvciBlYWNoIGZpbGUgbWFwcGVkIHBhZ2UgdGhhdCB2bXNjYW4gdHJpZXMgdG8gdW5tYXAuICBJZiB0aGlzIGhhcHBlbnMKK3RvIHVubWFwIHRoZSBwYWdlIHdlJ3JlIHRyeWluZyB0byB1bm1hcCwgdHJ5X3RvX3VubWFwKCkgd2lsbCBub3RpY2UgdGhpcyBvbgorcmV0dXJuLS0ocGFnZV9tYXBjb3VudChwYWdlKSA9PSAwKS0tYW5kIHJldHVybiBTV0FQX1NVQ0NFU1MuICBPdGhlcndpc2UsIGl0Cit3aWxsIHJldHVybiBTV0FQX0FHQUlOLCBjYXVzaW5nIHZtc2NhbiB0byByZWNpcmN1bGF0ZSB0aGlzIHBhZ2UuICBXZSB0YWtlCithZHZhbnRhZ2Ugb2YgdGhlIGNsdXN0ZXIgc2NhbiBpbiB0cnlfdG9fdW5tYXBfY2x1c3RlcigpIGFzIGZvbGxvd3M6CisKK0ZvciBlYWNoIG5vbi1saW5lYXIgdm1hLCB0cnlfdG9fdW5tYXBfY2x1c3RlcigpIGF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIG1tYXAKK3NlbWFwaG9yZSBvZiB0aGUgYXNzb2NpYXRlZCBtbV9zdHJ1Y3QgZm9yIHJlYWQgd2l0aG91dCBibG9ja2luZy4gIElmIHRoaXMKK2F0dGVtcHQgaXMgc3VjY2Vzc2Z1bCBhbmQgdGhlIHZtYSBpcyBWTV9MT0NLRUQsIHRyeV90b191bm1hcF9jbHVzdGVyKCkgd2lsbAorcmV0YWluIHRoZSBtbWFwIHNlbWFwaG9yZSBmb3IgdGhlIHNjYW47IG90aGVyd2lzZSBpdCBkcm9wcyBpdCBoZXJlLiAgVGhlbiwKK2ZvciBlYWNoIHBhZ2UgaW4gdGhlIGNsdXN0ZXIsIGlmIHdlJ3JlIGhvbGRpbmcgdGhlIG1tYXAgc2VtYXBob3JlIGZvciBhIGxvY2tlZAordm1hLCB0cnlfdG9fdW5tYXBfY2x1c3RlcigpIGNhbGxzIG1sb2NrX3ZtYV9wYWdlKCkgdG8gbWxvY2sgdGhlIHBhZ2UuICBUaGlzCitjYWxsIGlzIGEgbm8tb3AgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBsb2NrZWQsIGJ1dCB3aWxsIG1sb2NrIGFueSBwYWdlcyBpbgordGhlIG5vbi1saW5lYXIgbWFwcGluZyB0aGF0IGhhcHBlbiB0byBiZSB1bmxvY2tlZC4gIElmIG9uZSBvZiB0aGUgcGFnZXMgc28KK21sb2NrZWQgaXMgdGhlIHBhZ2UgcGFzc2VkIGluIHRvIHRyeV90b191bm1hcCgpLCB0cnlfdG9fdW5tYXBfY2x1c3RlcigpIHdpbGwKK3JldHVybiBTV0FQX01MT0NLLCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBTV0FQX0FHQUlOLiAgVGhpcyB3aWxsIGFsbG93IHZtc2NhbgordG8gY3VsbCB0aGUgcGFnZSwgcmF0aGVyIHRoYW4gcmVjaXJjdWxhdGluZyBpdCBvbiB0aGUgaW5hY3RpdmUgbGlzdC4gIEFnYWluLAoraWYgdHJ5X3RvX3VubWFwX2NsdXN0ZXIoKSBjYW5ub3QgYWNxdWlyZSB0aGUgdm1hJ3MgbW1hcCBzZW0sIGl0IHJldHVybnMKK1NXQVBfQUdBSU4sIGluZGljYXRpbmcgdGhhdCB0aGUgcGFnZSBpcyBtYXBwZWQgYnkgYSBWTV9MT0NLRUQgdm1hLCBidXQKK2NvdWxkbid0IGJlIG1sb2NrZWQuCisKKworTWxvY2tlZCBwYWdlczogIHRyeV90b19tdW5sb2NrKCkgUmV2ZXJzZSBNYXAgU2NhbgorCitUT0RPL0ZJWE1FOiAgYSBiZXR0ZXIgbmFtZSBtaWdodCBiZSBwYWdlX21sb2NrZWQoKS0tYW5hbG9nb3VzIHRvIHRoZQorcGFnZV9yZWZlcmVuY2VkKCkgcmV2ZXJzZSBtYXAgd2Fsa2VyLS1lc3BlY2lhbGx5IGlmIHdlIGNvbnRpbnVlIHRvIGNhbGwgdGhpcworZnJvbSBzaHJpbmtfcGFnZV9saXN0KCkuICBTZWUgcmVsYXRlZCBUT0RPL0ZJWE1FIGJlbG93LgorCitXaGVuIG11bmxvY2tfdm1hX3BhZ2UoKS0tc2VlICJNbG9ja2VkIFBhZ2VzOiAgbXVubG9jaygpL211bmxvY2thbGwoKSBTeXN0ZW0KK0NhbGwgSGFuZGxpbmciIGFib3ZlLS10cmllcyB0byBtdW5sb2NrIGEgcGFnZSwgb3Igd2hlbiBzaHJpbmtfcGFnZV9saXN0KCkKK2VuY291bnRlcnMgYW4gYW5vbnltb3VzIHBhZ2UgdGhhdCBpcyBub3QgeWV0IGluIHRoZSBzd2FwIGNhY2hlLCB0aGV5IG5lZWQgdG8KK2RldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGUgcGFnZSBpcyBtYXBwZWQgYnkgYW55IFZNX0xPQ0tFRCB2bWEsIHdpdGhvdXQKK2FjdHVhbGx5IGF0dGVtcHRpbmcgdG8gdW5tYXAgYWxsIHB0ZXMgZnJvbSB0aGUgcGFnZS4gIEZvciB0aGlzIHB1cnBvc2UsIHRoZQordW5ldmljdGFibGUvbWxvY2sgaW5mcmFzdHJ1Y3R1cmUgaW50cm9kdWNlZCBhIHZhcmlhbnQgb2YgdHJ5X3RvX3VubWFwKCkgY2FsbGVkCit0cnlfdG9fbXVubG9jaygpLgorCit0cnlfdG9fbXVubG9jaygpIGNhbGxzIHRoZSBzYW1lIGZ1bmN0aW9ucyBhcyB0cnlfdG9fdW5tYXAoKSBmb3IgYW5vbnltb3VzIGFuZAorbWFwcGVkIGZpbGUgcGFnZXMgd2l0aCBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmluZyB1bmxvY2sgdmVyc3VzIHVubWFwCitwcm9jZXNzaW5nLiAgQWdhaW4sIHRoZXNlIGZ1bmN0aW9ucyB3YWxrIHRoZSByZXNwZWN0aXZlIHJldmVyc2UgbWFwcyBsb29raW5nCitmb3IgVk1fTE9DS0VEIHZtYXMuICBXaGVuIHN1Y2ggYSB2bWEgaXMgZm91bmQgZm9yIGFub255bW91cyBwYWdlcyBhbmQgZmlsZQorcGFnZXMgbWFwcGVkIGluIGxpbmVhciBWTUFzLCBhcyBpbiB0aGUgdHJ5X3RvX3VubWFwKCkgY2FzZSwgdGhlIGZ1bmN0aW9ucworYXR0ZW1wdCB0byBhY3F1aXJlIHRoZSBhc3NvY2lhdGVkIG1tYXAgc2VtcGhvcmUsIG1sb2NrIHRoZSBwYWdlIHZpYQorbWxvY2tfdm1hX3BhZ2UoKSBhbmQgcmV0dXJuIFNXQVBfTUxPQ0suICBUaGlzIGVmZmVjdGl2ZWx5IHVuZG9lcyB0aGUKK3ByZS1jbGVhcmluZyBvZiB0aGUgcGFnZSdzIFBHX21sb2NrZWQgZG9uZSBieSBtdW5sb2NrX3ZtYV9wYWdlKCkgYW5kIGluZm9ybXMKK3Nocmlua19wYWdlX2xpc3QoKSB0aGF0IHRoZSBhbm9ueW1vdXMgcGFnZSBzaG91bGQgYmUgY3VsbGVkIHJhdGhlciB0aGFuIGFkZGVkCit0byB0aGUgc3dhcCBjYWNoZSBpbiBwcmVwYXJhdGlvbiBmb3IgYSB0cnlfdG9fdW5tYXAoKSB0aGF0IHdpbGwgYWxtb3N0CitjZXJ0YWlubHkgZmFpbC4KKworSWYgdHJ5X3RvX3VubWFwKCkgaXMgdW5hYmxlIHRvIGFjcXVpcmUgYSBWTV9MT0NLRUQgdm1hJ3MgYXNzb2NpYXRlZCBtbWFwCitzZW1hcGhvcmUsIGl0IHdpbGwgcmV0dXJuIFNXQVBfQUdBSU4uICBUaGlzIHdpbGwgYWxsb3cgc2hyaW5rX3BhZ2VfbGlzdCgpCit0byByZWN5Y2xlIHRoZSBwYWdlIG9uIHRoZSBpbmFjdGl2ZSBsaXN0IGFuZCBob3BlIHRoYXQgaXQgaGFzIGJldHRlciBsdWNrCit3aXRoIHRoZSBwYWdlIG5leHQgdGltZS4KKworRm9yIGZpbGUgcGFnZXMgbWFwcGVkIGludG8gbm9uLWxpbmVhciB2bWFzLCB0aGUgdHJ5X3RvX211bmxvY2soKSBsb2dpYyB3b3Jrcworc2xpZ2h0bHkgZGlmZmVyZW50bHkuICBPbiBlbmNvdW50ZXJpbmcgYSBWTV9MT0NLRUQgbm9uLWxpbmVhciB2bWEgdGhhdCBtaWdodAorbWFwIHRoZSBwYWdlLCB0cnlfdG9fbXVubG9jaygpIHJldHVybnMgU1dBUF9BR0FJTiB3aXRob3V0IGFjdHVhbGx5IG1sb2NraW5nCit0aGUgcGFnZS4gIG11bmxvY2tfdm1hX3BhZ2UoKSB3aWxsIGp1c3QgbGVhdmUgdGhlIHBhZ2UgdW5sb2NrZWQgYW5kIGxldAordm1zY2FuIGRlYWwgd2l0aCBpdC0tdGhlIHVzdWFsIGZhbGxiYWNrIHBvc2l0aW9uLgorCitOb3RlIHRoYXQgdHJ5X3RvX211bmxvY2soKSdzIHJldmVyc2UgbWFwIHdhbGsgbXVzdCB2aXNpdCBldmVyeSB2bWEgaW4gYSBwYWdlcycKK3JldmVyc2UgbWFwIHRvIGRldGVybWluZSB0aGF0IGEgcGFnZSBpcyBOT1QgbWFwcGVkIGludG8gYW55IFZNX0xPQ0tFRCB2bWEuCitIb3dldmVyLCB0aGUgc2NhbiBjYW4gdGVybWluYXRlIHdoZW4gaXQgZW5jb3VudGVycyBhIFZNX0xPQ0tFRCB2bWEgYW5kIGNhbgorc3VjY2Vzc2Z1bGx5IGFjcXVpcmUgdGhlIHZtYSdzIG1tYXAgc2VtcGhvcmUgZm9yIHJlYWQgYW5kIG1sb2NrIHRoZSBwYWdlLgorQWx0aG91Z2ggdHJ5X3RvX211bmxvY2soKSBjYW4gYmUgY2FsbGVkIG1hbnkgW3ZlcnkgbWFueSFdIHRpbWVzIHdoZW4KK211bmxvY2soKWluZyBhIGxhcmdlIHJlZ2lvbiBvciB0ZWFyaW5nIGRvd24gYSBsYXJnZSBhZGRyZXNzIHNwYWNlIHRoYXQgaGFzIGJlZW4KK21sb2NrZWQgdmlhIG1sb2NrYWxsKCksIG92ZXJhbGwgdGhpcyBpcyBhIGZhaXJseSByYXJlIGV2ZW50LiAgSW4gYWRkaXRpb24sCithbHRob3VnaCBzaHJpbmtfcGFnZV9saXN0KCkgY2FsbHMgdHJ5X3RvX211bmxvY2soKSBmb3IgZXZlcnkgYW5vbnltb3VzIHBhZ2UgdGhhdAoraXQgaGFuZGxlcyB0aGF0IGlzIG5vdCB5ZXQgaW4gdGhlIHN3YXAgY2FjaGUsIG9uIGF2ZXJhZ2UgYW5vbnltb3VzIHBhZ2VzIHdpbGwKK2hhdmUgdmVyeSBzaG9ydCByZXZlcnNlIG1hcCBsaXN0cy4KKworTWxvY2tlZCBQYWdlOiAgUGFnZSBSZWNsYWltIGluIHNocmlua18qX2xpc3QoKQorCitzaHJpbmtfYWN0aXZlX2xpc3QoKSBjdWxscyBhbnkgb2J2aW91c2x5IHVuZXZpY3RhYmxlIHBhZ2VzLS1pLmUuLAorIXBhZ2VfZXZpY3RhYmxlKHBhZ2UsIE5VTEwpLS1kaXZlcnRpbmcgdGhlc2UgdG8gdGhlIHVuZXZpY3RhYmxlIGxydQorbGlzdC4gIEhvd2V2ZXIsIHNocmlua19hY3RpdmVfbGlzdCgpIG9ubHkgc2VlcyB1bmV2aWN0YWJsZSBwYWdlcyB0aGF0CittYWRlIGl0IG9udG8gdGhlIGFjdGl2ZS9pbmFjdGl2ZSBscnUgbGlzdHMuICBOb3RlIHRoYXQgdGhlc2UgcGFnZXMgZG8gbm90CitoYXZlIFBhZ2VVbmV2aWN0YWJsZSBzZXQtLW90aGVyd2lzZSwgdGhleSB3b3VsZCBiZSBvbiB0aGUgdW5ldmljdGFibGUgbGlzdCBhbmQKK3Nocmlua19hY3RpdmVfbGlzdCB3b3VsZCBuZXZlciBzZWUgdGhlbS4KKworU29tZSBleGFtcGxlcyBvZiB0aGVzZSB1bmV2aWN0YWJsZSBwYWdlcyBvbiB0aGUgTFJVIGxpc3RzIGFyZToKKworMSkgcmFtZnMgcGFnZXMgdGhhdCBoYXZlIGJlZW4gcGxhY2VkIG9uIHRoZSBscnUgbGlzdHMgd2hlbiBmaXJzdCBhbGxvY2F0ZWQuCisKKzIpIFNITV9MT0NLZWQgc2hhcmVkIG1lbW9yeSBwYWdlcy4gIHNobWN0bChTSE1fTE9DSykgZG9lcyBub3QgYXR0ZW1wdCB0bworICAgYWxsb2NhdGUgb3IgZmF1bHQgaW4gdGhlIHBhZ2VzIGluIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbi4gIFRoaXMgaGFwcGVucworICAgd2hlbiBhbiBhcHBsaWNhdGlvbiBhY2Nlc3NlcyB0aGUgcGFnZSB0aGUgZmlyc3QgdGltZSBhZnRlciBTSE1fTE9DS2luZworICAgdGhlIHNlZ21lbnQuCisKKzMpIE1sb2NrZWQgcGFnZXMgdGhhdCBjb3VsZCBub3QgYmUgaXNvbGF0ZWQgZnJvbSB0aGUgbHJ1IGFuZCBtb3ZlZCB0byB0aGUKKyAgIHVuZXZpY3RhYmxlIGxpc3QgaW4gbWxvY2tfdm1hX3BhZ2UoKS4KKworMykgUGFnZXMgbWFwcGVkIGludG8gbXVsdGlwbGUgVk1fTE9DS0VEIHZtYXMsIGJ1dCB0cnlfdG9fbXVubG9jaygpIGNvdWxkbid0CisgICBhY3F1aXJlIHRoZSB2bWEncyBtbWFwIHNlbWFwaG9yZSB0byB0ZXN0IHRoZSBmbGFncyBhbmQgc2V0IFBhZ2VNbG9ja2VkLgorICAgbXVubG9ja192bWFfcGFnZSgpIHdhcyBmb3JjZWQgdG8gbGV0IHRoZSBwYWdlIGJhY2sgb24gdG8gdGhlIG5vcm1hbAorICAgTFJVIGxpc3QgZm9yIHZtc2NhbiB0byBoYW5kbGUuCisKK3Nocmlua19pbmFjdGl2ZV9saXN0KCkgYWxzbyBjdWxscyBhbnkgdW5ldmljdGFibGUgcGFnZXMgdGhhdCBpdCBmaW5kcworb24gdGhlIGluYWN0aXZlIGxpc3RzLCBhZ2FpbiBkaXZlcnRpbmcgdGhlbSB0byB0aGUgYXBwcm9wcmlhdGUgem9uZSdzIHVuZXZpY3RhYmxlCitscnUgbGlzdC4gIHNocmlua19pbmFjdGl2ZV9saXN0KCkgc2hvdWxkIG9ubHkgc2VlIFNITV9MT0NLZWQgcGFnZXMgdGhhdCBiZWNhbWUKK1NITV9MT0NLZWQgYWZ0ZXIgc2hyaW5rX2FjdGl2ZV9saXN0KCkgaGFkIG1vdmVkIHRoZW0gdG8gdGhlIGluYWN0aXZlIGxpc3QsIG9yCitwYWdlcyBtYXBwZWQgaW50byBWTV9MT0NLRUQgdm1hcyB0aGF0IG11bmxvY2tfdm1hX3BhZ2UoKSBjb3VsZG4ndCBpc29sYXRlIGZyb20KK3RoZSBscnUgdG8gcmVjaGVjayB2aWEgdHJ5X3RvX211bmxvY2soKS4gIHNocmlua19pbmFjdGl2ZV9saXN0KCkgd29uJ3Qgbm90aWNlCit0aGUgbGF0dGVyLCBidXQgd2lsbCBwYXNzIG9uIHRvIHNocmlua19wYWdlX2xpc3QoKS4KKworc2hyaW5rX3BhZ2VfbGlzdCgpIGFnYWluIGN1bGxzIG9idmlvdXNseSB1bmV2aWN0YWJsZSBwYWdlcyB0aGF0IGl0IGNvdWxkCitlbmNvdW50ZXIgZm9yIHNpbWlsYXIgcmVhc29uIHRvIHNocmlua19pbmFjdGl2ZV9saXN0KCkuICBBcyBhbHJlYWR5IGRpc2N1c3NlZCwKK3Nocmlua19wYWdlX2xpc3QoKSBwcm9hY3RpdmVseSBsb29rcyBmb3IgYW5vbnltb3VzIHBhZ2VzIHRoYXQgc2hvdWxkIGhhdmUKK1BHX21sb2NrZWQgc2V0IGJ1dCBkb24ndC0tdGhlc2Ugd291bGQgbm90IGJlIGRldGVjdGVkIGJ5IHBhZ2VfZXZpY3RhYmxlKCktLXRvCithdm9pZCBhZGRpbmcgdGhlbSB0byB0aGUgc3dhcCBjYWNoZSB1bm5lY2Vzc2FyaWx5LiAgRmlsZSBwYWdlcyBtYXBwZWQgaW50bworVk1fTE9DS0VEIHZtYXMgYnV0IHdpdGhvdXQgUEdfbWxvY2tlZCBzZXQgd2lsbCBtYWtlIGl0IGFsbCB0aGUgd2F5IHRvCit0cnlfdG9fdW5tYXAoKS4gIHNocmlua19wYWdlX2xpc3QoKSB3aWxsIGRpdmVydCB0aGVtIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0IHdoZW4KK3RyeV90b191bm1hcCgpIHJldHVybnMgU1dBUF9NTE9DSywgYXMgZGlzY3Vzc2VkIGFib3ZlLgorCitUT0RPL0ZJWE1FOiAgSWYgd2UgY2FuIGVuaGFuY2UgdGhlIHN3YXAgY2FjaGUgdG8gcmVsaWFibHkgcmVtb3ZlIGVudHJpZXMKK3dpdGggcGFnZV9jb3VudChwYWdlKSA+IDIsIGFzIGxvbmcgYXMgYWxsIHB0ZXMgYXJlIG1hcHBlZCB0byB0aGUgcGFnZSBhbmQKK25vdCB0aGUgc3dhcCBlbnRyeSwgd2UgY2FuIHByb2JhYmx5IHJlbW92ZSB0aGUgY2FsbCB0byB0cnlfdG9fbXVubG9jaygpIGluCitzaHJpbmtfcGFnZV9saXN0KCkgYW5kIGp1c3QgcmVtb3ZlIHRoZSBwYWdlIGZyb20gdGhlIHN3YXAgY2FjaGUgd2hlbgordHJ5X3RvX3VubWFwKCkgcmV0dXJucyBTV0FQX01MT0NLLiAgIEN1cnJlbnRseSwgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2UoKQorZG9lc24ndCBzZWVtIHRvIGFsbG93IHRoYXQuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vdzEvMDAtSU5ERVgKaW5kZXggNTI3MGNmNC4uY2I0OTgwMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi93MS8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL3cxLzAwLUlOREVYCkBAIC0xLDUgKzEsNyBAQAogMDAtSU5ERVgKIAktIFRoaXMgZmlsZQorc2xhdmVzLworCS0gRHJpdmVycyB0aGF0IHByb3ZpZGUgc3VwcG9ydCBmb3Igc3BlY2lmaWMgZmFtaWx5IGNvZGVzLgogbWFzdGVycy8KIAktIEluZGl2aWR1YWwgY2hpcHMgcHJvdmlkaW5nIDEtd2lyZSBidXNzZXMuCiB3MS5nZW5lcmljCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDkwIGIvRG9jdW1lbnRhdGlvbi93MS9tYXN0ZXJzL2RzMjQ5MAppbmRleCAyMzlmOWFlLi4yODE3NmRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDkwCisrKyBiL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9kczI0OTAKQEAgLTE2LDMgKzE2LDU1IEBACiBEUzk0OTAoUikgaXMgYSBVU0IgPC0+IFcxIGJ1cyBtYXN0ZXIgZGV2aWNlCiB3aGljaCBoYXMgMHg4MSBmYW1pbHkgSUQgaW50ZWdyYXRlZCBjaGlwIGFuZCBEUzI0OTAKIGxvdy1sZXZlbCBvcGVyYXRpb25hbCBjaGlwLgorCitOb3RlcyBhbmQgbGltaXRhdGlvbnMuCistIFRoZSB3ZWFrIHB1bGx1cCBjdXJyZW50IGlzIGEgbWluaW11bSBvZiAwLjltQSBhbmQgbWF4aW11bSBvZiA2LjBtQS4KKy0gVGhlIDVWIHN0cm9uZyBwdWxsdXAgaXMgc3VwcG9ydGVkIHdpdGggYSBtaW5pbXVtIG9mIDUuOW1BIGFuZCBhCisgIG1heGltdW0gb2YgMzAuNCBtQS4gIChGcm9tIERTMjQ5MC5wZGYpCistIFdoaWxlIHRoZSBkczI0OTAgc3VwcG9ydHMgYSBoYXJkd2FyZSBzZWFyY2ggdGhlIGNvZGUgZG9lc24ndCB0YWtlCisgIGFkdmFudGFnZSBvZiBpdCAoaW4gdGVzdGVkIGNhc2UgaXQgb25seSByZXR1cm5lZCBmaXJzdCBkZXZpY2UpLgorLSBUaGUgaGFyZHdhcmUgd2lsbCBkZXRlY3Qgd2hlbiBkZXZpY2VzIGFyZSBhdHRhY2hlZCB0byB0aGUgYnVzIG9uIHRoZQorICBuZXh0IGJ1cyAocmVzZXQ/KSBvcGVyYXRpb24sIGhvd2V2ZXIgb25seSBhIG1lc3NhZ2UgaXMgcHJpbnRlZCBhcworICB0aGUgY29yZSB3MSBjb2RlIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgdGhlIGluZm9ybWF0aW9uLiAgQ29ubmVjdGluZworICBvbmUgZGV2aWNlIHRlbmRzIHRvIGdpdmUgbXVsdGlwbGUgbmV3IGRldmljZSBub3RpZmljYXRpb25zLgorLSBUaGUgbnVtYmVyIG9mIFVTQiBidXMgdHJhbnNhY3Rpb25zIGNvdWxkIGJlIHJlZHVjZWQgaWYgdzFfcmVzZXRfc2VuZAorICB3YXMgYWRkZWQgdG8gdGhlIEFQSS4gIFRoZSBuYW1lIGlzIGp1c3QgYSBzdWdnZXN0aW9uLiAgSXQgd291bGQgdGFrZQorICBhIHdyaXRlIGJ1ZmZlciBhbmQgYSByZWFkIGJ1ZmZlciAoYWxvbmcgd2l0aCBzaXplcykgYXMgYXJndW1lbnRzLgorICBUaGUgZHMyNDkwIGJsb2NrIEkvTyBjb21tYW5kIHN1cHBvcnRzIHJlc2V0LCB3cml0ZSBidWZmZXIsIHJlYWQKKyAgYnVmZmVyLCBhbmQgc3Ryb25nIHB1bGx1cCBhbGwgaW4gb25lIGNvbW1hbmQsIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQKKyAgMSByZXNldCBidXMsIDIgd3JpdGUgdGhlIG1hdGNoIHJvbSBjb21tYW5kIGFuZCBzbGF2ZSByb20gaWQsIDMgYmxvY2sKKyAgd3JpdGUgYW5kIHJlYWQgZGF0YS4gIFRoZSB3cml0ZSBidWZmZXIgbmVlZHMgdG8gaGF2ZSB0aGUgbWF0Y2ggcm9tCisgIGNvbW1hbmQgYW5kIHNsYXZlIHJvbSBpZCBwcmVwZW5kZWQgdG8gdGhlIGZyb250IG9mIHRoZSByZXF1ZXN0ZWQKKyAgd3JpdGUgYnVmZmVyLCBib3RoIG9mIHdoaWNoIGFyZSBrbm93biB0byB0aGUgZHJpdmVyLgorLSBUaGUgaGFyZHdhcmUgc3VwcG9ydHMgbm9ybWFsLCBmbGV4aWJsZSwgYW5kIG92ZXJkcml2ZSBidXMKKyAgY29tbXVuaWNhdGlvbiBzcGVlZHMsIGJ1dCBvbmx5IHRoZSBub3JtYWwgaXMgc3VwcG9ydGVkLgorLSBUaGUgcmVnaXN0ZXJlZCB3MV9idXNfbWFzdGVyIGZ1bmN0aW9ucyBkb24ndCBkZWZpbmUgZXJyb3IKKyAgY29uZGl0aW9ucy4gIElmIGEgYnVzIHNlYXJjaCBpcyBpbiBwcm9ncmVzcyBhbmQgdGhlIGRzMjQ5MCBpcworICByZW1vdmVkIGl0IGNhbiBwcm9kdWNlIGEgZ29vZCBhbW91bnQgb2YgZXJyb3Igb3V0cHV0IGJlZm9yZSB0aGUgYnVzCisgIHNlYXJjaCBmaW5pc2hlcy4KKy0gVGhlIGhhcmR3YXJlIHN1cHBvcnRzIGRldGVjdGluZyBzb21lIGVycm9yIGNvbmRpdGlvbnMsIHN1Y2ggYXMKKyAgc2hvcnQsIGFsYXJtaW5nIHByZXNlbmNlIG9uIHJlc2V0LCBhbmQgbm8gcHJlc2VuY2Ugb24gcmVzZXQsIGJ1dCB0aGUKKyAgZHJpdmVyIGRvZXNuJ3QgcXVlcnkgdGhvc2UgdmFsdWVzLgorLSBUaGUgZHMyNDkwIHNwZWNpZmljYXRpb24gZG9lc24ndCBjb3ZlciBzaG9ydCBidWxrIGluIHJlYWRzIGluCisgIGRldGFpbCwgYnV0IG15IG9ic2VydmF0aW9uIGlzIGlmIGZld2VyIGJ5dGVzIGFyZSByZXF1ZXN0ZWQgdGhhbiBhcmUKKyAgYXZhaWxhYmxlLCB0aGUgYnVsayByZWFkIHdpbGwgcmV0dXJuIGFuIGVycm9yIGFuZCB0aGUgaGFyZHdhcmUgd2lsbAorICBjbGVhciB0aGUgZW50aXJlIGJ1bGsgaW4gYnVmZmVyLiAgSXQgd291bGQgYmUgcG9zc2libGUgdG8gcmVhZCB0aGUKKyAgbWF4aW11bSBidWZmZXIgc2l6ZSB0byBub3QgcnVuIGludG8gdGhpcyBlcnJvciBjb25kaXRpb24sIG9ubHkgZXh0cmEKKyAgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBpcyBhIGxvZ2ljIGVycm9yIGluIHRoZSBkcml2ZXIuICBUaGUgY29kZSBzaG91bGQKKyAgc2hvdWxkIG1hdGNoIHJlYWRzIGFuZCB3cml0ZXMgYXMgd2VsbCBhcyBkYXRhIHNpemVzLiAgUmVhZHMgYW5kCisgIHdyaXRlcyBhcmUgc2VyaWFsaXplZCBhbmQgdGhlIHN0YXR1cyB2ZXJpZmllcyB0aGF0IHRoZSBjaGlwIGlzIGlkbGUKKyAgKGFuZCBkYXRhIGlzIGF2YWlsYWJsZSkgYmVmb3JlIHRoZSByZWFkIGlzIGV4ZWN1dGVkLCBzbyBpdCBzaG91bGQKKyAgbm90IGhhcHBlbi4KKy0gUnVubmluZyB4ODZfNjQgMi42LjI0IFVIQ0kgdW5kZXIgcWVtdSAwLjkuMCB1bmRlciB4ODZfNjQgMi42LjIyLXJjNgorICB3aXRoIGEgT0hDSSBjb250cm9sbGVyLCBkczI0OTAgcnVubmluZyBpbiB0aGUgZ3Vlc3Qgd291bGQgb3BlcmF0ZQorICBub3JtYWxseSB0aGUgZmlyc3QgdGltZSB0aGUgbW9kdWxlIHdhcyBsb2FkZWQgYWZ0ZXIgcWVtdSBhdHRhY2hlZAorICB0aGUgZHMyNDkwIGhhcmR3YXJlLCBidXQgaWYgdGhlIG1vZHVsZSB3YXMgdW5sb2FkZWQsIHRoZW4gcmVsb2FkZWQKKyAgbW9zdCBvZiB0aGUgdGltZSBvbmUgb2YgdGhlIGJ1bGsgb3V0IG9yIGluLCBhbmQgdXN1YWxseSB0aGUgYnVsayBpbgorICB3b3VsZCBmYWlsLiAgcWVtdSBzZXRzIGEgNTBtcyB0aW1lb3V0IGFuZCB0aGUgYnVsayBpbiB3b3VsZCB0aW1lb3V0CisgIGV2ZW4gd2hlbiB0aGUgc3RhdHVzIHNob3dzIGRhdGEgYXZhaWxhYmxlLiAgQSBidWxrIG91dCB3cml0ZSB3b3VsZAorICBzaG93IGEgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCBidXQgdGhlIGRzMjQ5MCBzdGF0dXMgcmVnaXN0ZXIgd291bGQKKyAgc2hvdyAwIGJ5dGVzIHdyaXR0ZW4uICBEZXRhY2hpbmcgcWVtdSBmcm9tIHRoZSBkczI0OTAgaGFyZHdhcmUgYW5kCisgIHJlYXR0YWNoaW5nIHdvdWxkIGNsZWFyIHRoZSBwcm9ibGVtLiAgdXNibW9uIG91dHB1dCBpbiB0aGUgZ3Vlc3QgYW5kCisgIGhvc3QgZGlkIG5vdCBleHBsYWluIHRoZSBwcm9ibGVtLiAgTXkgZ3Vlc3MgaXMgYSBidWcgaW4gZWl0aGVyIHFlbXUKKyAgb3IgdGhlIGhvc3QgT1MgYW5kIG1vcmUgbGlrZWx5IHRoZSBob3N0IE9TLgorLS0gMDMtMDYtMjAwOCBEYXZpZCBGcmllcyA8RGF2aWRARnJpZXMubmV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3cxL3NsYXZlcy8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODEwMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvMDAtSU5ERVgKQEAgLTAsMCArMSw0IEBACiswMC1JTkRFWAorCS0gVGhpcyBmaWxlCit3MV90aGVybQorCS0gVGhlIE1heGltL0RhbGxhcyBTZW1pY29uZHVjdG9yIGRzMTgqMjAgdGVtcGVyYXR1cmUgc2Vuc29yLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvdzFfdGhlcm0gYi9Eb2N1bWVudGF0aW9uL3cxL3NsYXZlcy93MV90aGVybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDAzYWFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvdzFfdGhlcm0KQEAgLTAsMCArMSw0MSBAQAorS2VybmVsIGRyaXZlciB3MV90aGVybQorPT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIE1heGltIGRzMTgqMjAgYmFzZWQgdGVtcGVyYXR1cmUgc2Vuc29ycy4KKworQXV0aG9yOiBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCit3MV90aGVybSBwcm92aWRlcyBiYXNpYyB0ZW1wZXJhdHVyZSBjb252ZXJzaW9uIGZvciBkczE4KjIwIGRldmljZXMuCitzdXBwb3J0ZWQgZmFtaWx5IGNvZGVzOgorVzFfVEhFUk1fRFMxOFMyMAkweDEwCitXMV9USEVSTV9EUzE4MjIJCTB4MjIKK1cxX1RIRVJNX0RTMThCMjAJMHgyOAorCitTdXBwb3J0IGlzIHByb3ZpZGVkIHRocm91Z2ggdGhlIHN5c2ZzIHcxX3NsYXZlIGZpbGUuICBFYWNoIG9wZW4gYW5kCityZWFkIHNlcXVlbmNlIHdpbGwgaW5pdGlhdGUgYSB0ZW1wZXJhdHVyZSBjb252ZXJzaW9uIHRoZW4gcHJvdmlkZSB0d28KK2xpbmVzIG9mIEFTQ0lJIG91dHB1dC4gIFRoZSBmaXJzdCBsaW5lIGNvbnRhaW5zIHRoZSBuaW5lIGhleCBieXRlcworcmVhZCBhbG9uZyB3aXRoIGEgY2FsY3VsYXRlZCBjcmMgdmFsdWUgYW5kIFlFUyBvciBOTyBpZiBpdCBtYXRjaGVkLgorSWYgdGhlIGNyYyBtYXRjaGVkIHRoZSByZXR1cm5lZCB2YWx1ZXMgYXJlIHJldGFpbmVkLiAgVGhlIHNlY29uZCBsaW5lCitkaXNwbGF5cyB0aGUgcmV0YWluZWQgdmFsdWVzIGFsb25nIHdpdGggYSB0ZW1wZXJhdHVyZSBpbiBtaWxsaWRlZ3JlZXMKK0NlbnRpZ3JhZGUgYWZ0ZXIgdD0uCisKK1BhcmFzaXRlIHBvd2VyZWQgZGV2aWNlcyBhcmUgbGltaXRlZCB0byBvbmUgc2xhdmUgcGVyZm9ybWluZyBhCit0ZW1wZXJhdHVyZSBjb252ZXJzaW9uIGF0IGEgdGltZS4gIElmIG5vbmUgb2YgdGhlIGRldmljZXMgYXJlIHBhcmFzaXRlCitwb3dlcmVkIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGNvbnZlcnQgYWxsIHRoZSBkZXZpY2VzIGF0IHRoZSBzYW1lCit0aW1lIGFuZCB0aGVuIGdvIGJhY2sgdG8gcmVhZCBpbmRpdmlkdWFsIHNlbnNvcnMuICBUaGF0IGlzbid0CitjdXJyZW50bHkgc3VwcG9ydGVkLiAgVGhlIGRyaXZlciBhbHNvIGRvZXNuJ3Qgc3VwcG9ydCByZWR1Y2VkCitwcmVjaXNpb24gKHdoaWNoIHdvdWxkIGFsc28gcmVkdWNlIHRoZSBjb252ZXJzaW9uIHRpbWUpLgorCitUaGUgbW9kdWxlIHBhcmFtZXRlciBzdHJvbmdfcHVsbHVwIGNhbiBiZSBzZXQgdG8gMCB0byBkaXNhYmxlIHRoZQorc3Ryb25nIHB1bGx1cCBvciAxIHRvIGVuYWJsZS4gIElmIGVuYWJsZWQgdGhlIDVWIHN0cm9uZyBwdWxsdXAgd2lsbCBiZQorZW5hYmxlZCB3aGVuIHRoZSBjb252ZXJzaW9uIGlzIHRha2luZyBwbGFjZSBwcm92aWRlZCB0aGUgbWFzdGVyIGRyaXZlcgorbXVzdCBzdXBwb3J0IHRoZSBzdHJvbmcgcHVsbHVwIChvciBpdCBmYWxscyBiYWNrIHRvIGEgcHVsbHVwCityZXNpc3RvcikuICBUaGUgRFMxOGIyMCB0ZW1wZXJhdHVyZSBzZW5zb3Igc3BlY2lmaWNhdGlvbiBsaXN0cyBhCittYXhpbXVtIGN1cnJlbnQgZHJhdyBvZiAxLjVtQSBhbmQgdGhhdCBhIDVrIHB1bGx1cCByZXNpc3RvciBpcyBub3QKK3N1ZmZpY2llbnQuICBUaGUgc3Ryb25nIHB1bGx1cCBpcyBkZXNpZ25lZCB0byBwcm92aWRlIHRoZSBhZGRpdGlvbmFsCitjdXJyZW50IHJlcXVpcmVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS93MS5nZW5lcmljIGIvRG9jdW1lbnRhdGlvbi93MS93MS5nZW5lcmljCmluZGV4IDRjNjUwOWQuLmUzMzMzZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdzEvdzEuZ2VuZXJpYworKysgYi9Eb2N1bWVudGF0aW9uL3cxL3cxLmdlbmVyaWMKQEAgLTc5LDEwICs3OSwxMyBAQAogPHh4LXh4eHh4eHh4eHh4eHg+IC0gYSBkaXJlY3RvcnkgZm9yIGEgZm91bmQgZGV2aWNlLiBUaGUgZm9ybWF0IGlzIGZhbWlseS1zZXJpYWwKIGJ1cyAgICAgICAgICAgICAgICAtIChzdGFuZGFyZCkgc3ltbGluayB0byB0aGUgdzEgYnVzCiBkcml2ZXIgICAgICAgICAgICAgLSAoc3RhbmRhcmQpIHN5bWxpbmsgdG8gdGhlIHcxIGRyaXZlcgordzFfbWFzdGVyX2FkZCAgICAgIC0gTWFudWFsbHkgcmVnaXN0ZXIgYSBzbGF2ZSBkZXZpY2UKIHcxX21hc3Rlcl9hdHRlbXB0cyAtIHRoZSBudW1iZXIgb2YgdGltZXMgYSBzZWFyY2ggd2FzIGF0dGVtcHRlZAogdzFfbWFzdGVyX21heF9zbGF2ZV9jb3VudAogICAgICAgICAgICAgICAgICAgIC0gdGhlIG1heGltdW0gc2xhdmVzIHRoYXQgbWF5IGJlIGF0dGFjaGVkIHRvIGEgbWFzdGVyCiB3MV9tYXN0ZXJfbmFtZSAgICAgLSB0aGUgbmFtZSBvZiB0aGUgZGV2aWNlICh3MV9idXNfbWFzdGVyWCkKK3cxX21hc3Rlcl9wdWxsdXAgICAtIDVWIHN0cm9uZyBwdWxsdXAgMCBlbmFibGVkLCAxIGRpc2FibGVkCit3MV9tYXN0ZXJfcmVtb3ZlICAgLSBNYW51YWxseSByZW1vdmUgYSBzbGF2ZSBkZXZpY2UKIHcxX21hc3Rlcl9zZWFyY2ggICAtIHRoZSBudW1iZXIgb2Ygc2VhcmNoZXMgbGVmdCB0byBkbywgLTE9Y29udGludWFsIChkZWZhdWx0KQogdzFfbWFzdGVyX3NsYXZlX2NvdW50CiAgICAgICAgICAgICAgICAgICAgLSB0aGUgbnVtYmVyIG9mIHNsYXZlcyBmb3VuZApAQCAtOTAsNyArOTMsMTMgQEAKIHcxX21hc3Rlcl90aW1lb3V0ICAtIHRoZSBkZWxheSBpbiBzZWNvbmRzIGJldHdlZW4gc2VhcmNoZXMKIAogSWYgeW91IGhhdmUgYSB3MSBidXMgdGhhdCBuZXZlciBjaGFuZ2VzICh5b3UgZG9uJ3QgYWRkIG9yIHJlbW92ZSBkZXZpY2VzKSwKLXlvdSBjYW4gc2V0IHcxX21hc3Rlcl9zZWFyY2ggdG8gYSBwb3NpdGl2ZSB2YWx1ZSB0byBkaXNhYmxlIHNlYXJjaGVzLgoreW91IGNhbiBzZXQgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgc2VhcmNoX2NvdW50IHRvIGEgc21hbGwgcG9zaXRpdmUgbnVtYmVyCitmb3IgYW4gaW5pdGlhbGx5IHNtYWxsIG51bWJlciBvZiBidXMgc2VhcmNoZXMuICBBbHRlcm5hdGl2ZWx5IGl0IGNvdWxkIGJlCitzZXQgdG8gemVybywgdGhlbiBtYW51YWxseSBhZGQgdGhlIHNsYXZlIGRldmljZSBzZXJpYWwgbnVtYmVycyBieQordzFfbWFzdGVyX2FkZCBkZXZpY2UgZmlsZS4gIFRoZSB3MV9tYXN0ZXJfYWRkIGFuZCB3MV9tYXN0ZXJfcmVtb3ZlIGZpbGVzCitnZW5lcmFsbHkgb25seSBtYWtlIHNlbnNlIHdoZW4gc2VhcmNoaW5nIGlzIGRpc2FibGVkLCBhcyBhIHNlYXJjaCB3aWxsCityZWRldGVjdCBtYW51YWxseSByZW1vdmVkIGRldmljZXMgdGhhdCBhcmUgcHJlc2VudCBhbmQgdGltZW91dCBtYW51YWxseQorYWRkZWQgZGV2aWNlcyB0aGF0IGFyZW4ndCBvbiB0aGUgYnVzLgogCiAKIHcxIHNsYXZlIHN5c2ZzIGludGVyZmFjZQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA3NGI4MDgyLi41YzNmNzljIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNzIsOCArNzIsOCBAQAogTDogTWFpbGluZyBsaXN0IHRoYXQgaXMgcmVsZXZhbnQgdG8gdGhpcyBhcmVhCiBXOiBXZWItcGFnZSB3aXRoIHN0YXR1cy9pbmZvCiBUOiBTQ00gdHJlZSB0eXBlIGFuZCBsb2NhdGlvbi4gIFR5cGUgaXMgb25lIG9mOiBnaXQsIGhnLCBxdWlsdC4KLVM6IFN0YXR1cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiBGOiBBcHBsaWNhYmxlIGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcworUzogU3RhdHVzLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKIAogCVN1cHBvcnRlZDoJU29tZW9uZSBpcyBhY3R1YWxseSBwYWlkIHRvIGxvb2sgYWZ0ZXIgdGhpcy4KIAlNYWludGFpbmVkOglTb21lb25lIGFjdHVhbGx5IGxvb2tzIGFmdGVyIGl0LgpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKIAogQ1BVIEZSRVFVRU5DWSBEUklWRVJTCiBQOglEYXZlIEpvbmVzCi1NOglkYXZlakBjb2RlbW9ua2V5Lm9yZy51aworTToJZGF2ZWpAcmVkaGF0LmNvbQogTDoJY3B1ZnJlcUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cuY29kZW1vbmtleS5vcmcudWsvcHJvamVjdHMvY3B1ZnJlcS8KIFQ6CWdpdCBrZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kYXZlai9jcHVmcmVxLmdpdApAQCAtMTYyOSw2ICsxNjI5LDExIEBACiBNOgljaEBtdXJnYXRyb2lkLmNvbSwgY2hAaHBsLmhwLmNvbQogUzoJTWFpbnRhaW5lZAogCitFUFNPTiBTMUQxM1hYWCBGUkFNRUJVRkZFUiBEUklWRVIKK1A6CUtyaXN0b2ZmZXIgRXJpY3NvbgorTToJa3Jpc3RvZmZlci5lcmljc29uQGdtYWlsLmNvbQorUzoJTWFpbnRhaW5lZAorCiBFVEhFUkVYUFJFU1MtMTYgTkVUV09SSyBEUklWRVIKIFA6CVBoaWxpcCBCbHVuZGVsbAogTToJcGhpbGJAZ251Lm9yZwpAQCAtMjQ0Myw3ICsyNDQ4LDE0IEBACiAKIEtFUk5FTCBWSVJUVUFMIE1BQ0hJTkUgKEtWTSkKIFA6CUF2aSBLaXZpdHkKLU06CWF2aUBxdW1yYW5ldC5jb20KK006CWF2aUByZWRoYXQuY29tCitMOglrdm1Admdlci5rZXJuZWwub3JnCitXOglodHRwOi8va3ZtLnF1bXJhbmV0LmNvbQorUzoJU3VwcG9ydGVkCisKK0tFUk5FTCBWSVJUVUFMIE1BQ0hJTkUgKEtWTSkgRk9SIEFNRC1WCitQOglKb2VyZyBSb2VkZWwKK006CWpvZXJnLnJvZWRlbEBhbWQuY29tCiBMOglrdm1Admdlci5rZXJuZWwub3JnCiBXOglodHRwOi8va3ZtLnF1bXJhbmV0LmNvbQogUzoJU3VwcG9ydGVkCkBAIC0zOTI1LDcgKzM5MzcsNyBAQAogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCi1TVEFCTEUgQlJBTkNIOgorU1RBQkxFIEJSQU5DSAogUDoJR3JlZyBLcm9haC1IYXJ0bWFuCiBNOglncmVnQGtyb2FoLmNvbQogUDoJQ2hyaXMgV3JpZ2h0CkBAIC0zOTMzLDYgKzM5NDUsMTMgQEAKIEw6CXN0YWJsZUBrZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKK1NUQUdJTkcgU1VCU1lTVEVNCitQOglHcmVnIEtyb2FoLUhhcnRtYW4KK006CWdyZWdraEBzdXNlLmRlCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitUOglxdWlsdCBrZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2dyZWdraC9ncmVna2gtMi42LworUzoJTWFpbnRhaW5lZAorCiBTVEFSRklSRS9EVVJBTEFOIE5FVFdPUksgRFJJVkVSCiBQOglJb24gQmFkdWxlc2N1CiBNOglpb251dEBjcy5jb2x1bWJpYS5lZHUKQEAgLTQwODksNyArNDEwOCw3IEBACiBQOglNYXJjZWwgU2VsaG9yc3QKIE06CXRwbUBzZWxob3JzdC5uZXQKIFc6CWh0dHA6Ly93d3cucHJvc2VjLnJ1Yi5kZS90cG0vCi1MOgl0cG1kZC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CXRwbWRkLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKIFRSSVZJQUwgUEFUQ0hFUwpAQCAtNDQ4MCw2ICs0NDk5LDEzIEBACiBUOglnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL3V0aWwtbGludXgtbmcvdXRpbC1saW51eC1uZy5naXQKIFM6CU1haW50YWluZWQKIAorVVZFU0FGQiBEUklWRVIKK1A6CU1pY2hhbCBKYW51c3pld3NraQorTToJc3BvY2tAZ2VudG9vLm9yZworTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK1c6CWh0dHA6Ly9kZXYuZ2VudG9vLm9yZy9+c3BvY2svcHJvamVjdHMvdXZlc2FmYi8KK1M6CU1haW50YWluZWQKKwogVkZBVC9GQVQvTVNET1MgRklMRVNZU1RFTQogUDoJT0dBV0EgSGlyb2Z1bWkKIE06CWhpcm9mdW1pQG1haWwucGFya25ldC5jby5qcApAQCAtNDQ5Nyw2ICs0NTIzLDE0IEBACiBMOglpMmNAbG0tc2Vuc29ycy5vcmcKIFM6CU1haW50YWluZWQKIAorVklBIFVOSUNIUk9NRShQUk8pL0NIUk9NRTkgRlJBTUVCVUZGRVIgRFJJVkVSCitQOglKb3NlcGggQ2hhbgorTToJSm9zZXBoQ2hhbkB2aWEuY29tLnR3CitQOglTY290dCBGYW5nCitNOglTY290dEZhbmdAdmlhdGVjaC5jb20uY24KK0w6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitTOglNYWludGFpbmVkCisKIFZJQSBWRUxPQ0lUWSBORVRXT1JLIERSSVZFUgogUDoJRnJhbmNvaXMgUm9taWV1CiBNOglyb21pZXVAZnIuem9yZWlsLmNvbQpAQCAtNDUyMCwxMCArNDU1NCwxMSBAQAogCiBWT0xUQUdFIEFORCBDVVJSRU5UIFJFR1VMQVRPUiBGUkFNRVdPUksKIFA6CUxpYW0gR2lyZHdvb2QKLU06CWxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbQorTToJbHJnQHNsaW1sb2dpYy5jby51awogUDoJTWFyayBCcm93bgogTToJYnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20KIFc6CWh0dHA6Ly9vcGVuc291cmNlLndvbGZzb25taWNyby5jb20vbm9kZS8xNQorVzoJaHR0cDovL3d3dy5zbGltbG9naWMuY28udWsvP3BhZ2VfaWQ9NQogVDoJZ2l0IGtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xyZy92b2x0YWdlLTIuNi5naXQKIFM6CVN1cHBvcnRlZAogCkBAIC00NTk3LDcgKzQ2MzIsNyBAQAogUDoJTWFyayBCcm93bgogTToJYnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20KIFA6CUxpYW0gR2lyZHdvb2QKLU06CWxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbQorTToJbHJnQHNsaW1sb2dpYy5jby51awogTDoJbGludXgtaW5wdXRAdmdlci5rZXJuZWwub3JnCiBUOglnaXQgZ2l0Oi8vb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tL2xpbnV4LTIuNi10b3VjaAogVzoJaHR0cDovL29wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbS9ub2RlLzcKZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZwppbmRleCAwMjY3YmFiLi5lNmFiNTUwIDEwMDY0NAotLS0gYS9hcmNoL0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC0yOCw3ICsyOCw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgSEFWRV9PUFJPRklMRQotCWRlZl9ib29sIG4KKwlib29sCiAKIGNvbmZpZyBLUFJPQkVTCiAJYm9vbCAiS3Byb2JlcyIKQEAgLTQyLDcgKzQyLDcgQEAKIAkgIElmIGluIGRvdWJ0LCBzYXkgIk4iLgogCiBjb25maWcgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUwotCWRlZl9ib29sIG4KKwlib29sCiAJaGVscAogCSAgU29tZSBhcmNoaXRlY3R1cmVzIGFyZSB1bmFibGUgdG8gcGVyZm9ybSB1bmFsaWduZWQgYWNjZXNzZXMKIAkgIHdpdGhvdXQgdGhlIHVzZSBvZiBnZXRfdW5hbGlnbmVkL3B1dF91bmFsaWduZWQuIE90aGVycyBhcmUKQEAgLTY1LDEzICs2NSwxMyBAQAogCWRlcGVuZHMgb24gS1BST0JFUyAmJiBIQVZFX0tSRVRQUk9CRVMKIAogY29uZmlnIEhBVkVfSU9SRU1BUF9QUk9UCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAogY29uZmlnIEhBVkVfS1BST0JFUwotCWRlZl9ib29sIG4KKwlib29sCiAKIGNvbmZpZyBIQVZFX0tSRVRQUk9CRVMKLQlkZWZfYm9vbCBuCisJYm9vbAogCiAjCiAjIEFuIGFyY2ggc2hvdWxkIHNlbGVjdCB0aGlzIGlmIGl0IHByb3ZpZGVzIGFsbCB0aGVzZSB0aGluZ3M6CkBAIC04OSwxNiArODksMTYgQEAKICMJc2lnbmFsIGRlbGl2ZXJ5CQljYWxscyB0cmFjZWhvb2tfc2lnbmFsX2hhbmRsZXIoKQogIwogY29uZmlnIEhBVkVfQVJDSF9UUkFDRUhPT0sKLQlkZWZfYm9vbCBuCisJYm9vbAogCiBjb25maWcgSEFWRV9ETUFfQVRUUlMKLQlkZWZfYm9vbCBuCisJYm9vbAogCiBjb25maWcgVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMKLQlkZWZfYm9vbCBuCisJYm9vbAogCiBjb25maWcgSEFWRV9DTEsKLQlkZWZfYm9vbCBuCisJYm9vbAogCWhlbHAKIAkgIFRoZSA8bGludXgvY2xrLmg+IGNhbGxzIHN1cHBvcnQgc29mdHdhcmUgY2xvY2sgZ2F0aW5nIGFuZAogCSAgdGh1cyBhcmUgYSBrZXkgcG93ZXIgbWFuYWdlbWVudCB0b29sIG9uIG1hbnkgc3lzdGVtcy4KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZwppbmRleCAxYmVjNTVkLi42MTEwMTk3IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL0tjb25maWcKKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnCkBAIC01LDYgKzUsNyBAQAogY29uZmlnIEFMUEhBCiAJYm9vbAogCWRlZmF1bHQgeQorCXNlbGVjdCBIQVZFX0FPVVQKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCWhlbHAKQEAgLTY4LDEwICs2OSw4IEBACiAJZGVwZW5kcyBvbiBTTVAKIAlkZWZhdWx0IHkKIAotY29uZmlnIEFSQ0hfU1VQUE9SVFNfQU9VVAotCWRlZl9ib29sIHkKLQogc291cmNlICJpbml0L0tjb25maWciCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCiAKIAogbWVudSAiU3lzdGVtIHNldHVwIgpAQCAtMjI0LDggKzIyMyw3IEBACiAJYm9vbCAiTWlhdGEiCiAJaGVscAogCSAgVGhlIERpZ2l0YWwgUGVyc29uYWxXb3JrU3RhdGlvbiAoUFdTIDQzM2EsIDQzM2F1LCA1MDBhLCA1MDBhdSwgNjAwYSwKLQkgIG9yIDYwMGF1KS4gIFRoZXJlIGlzIGFuIEluc3RhbGxhdGlvbiBIT1dUTyBmb3IgdGhpcyBoYXJkd2FyZSBhdAotCSAgPGh0dHA6Ly9laWprLmhvbWVsaW51eC5vcmcvfnN0ZWZhbi9taWF0YS5odG1sPi4KKwkgIG9yIDYwMGF1KS4KIAogY29uZmlnIEFMUEhBX01JS0FTQQogCWJvb2wgIk1pa2FzYSIKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYS5vdXQuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYS5vdXQuaAppbmRleCAwMmNlODQ3Li5hY2RjNjgxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2Eub3V0LmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9hLm91dC5oCkBAIC05NSw3ICs5NSw3IEBACiAgICBXb3JzZSwgd2UgaGF2ZSB0byBub3RpY2UgdGhlIHN0YXJ0IGFkZHJlc3MgYmVmb3JlIHN3YXBwaW5nIHRvIHVzZQogICAgL3NiaW4vbG9hZGVyLCB3aGljaCBvZiBjb3Vyc2UgaXMgX25vdF8gYSBUQVNPIGFwcGxpY2F0aW9uLiAgKi8KICNkZWZpbmUgU0VUX0FPVVRfUEVSU09OQUxJVFkoQkZQTSwgRVgpIFwKLQlzZXRfcGVyc29uYWxpdHkgKCgoQkZQTS0+c2hfYmFuZyB8fCBFWC5haC5lbnRyeSA8IDB4MTAwMDAwMDAwTCBcCisJc2V0X3BlcnNvbmFsaXR5ICgoKEJGUE0tPnRhc28gfHwgRVguYWguZW50cnkgPCAweDEwMDAwMDAwMEwgXAogCQkJICAgPyBBRERSX0xJTUlUXzMyQklUIDogMCkgfCBQRVJfT1NGNCkpCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBmYzEwMDJlLi41Yzc1YzFiIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTE0NCw5ICsxNDQsOSBAQAogCTogYW1hc2sgKEFNQVNLX0NJWCkgPyAiZXY2IiA6ICJldjY3Iik7CVwKIH0pCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKEVYLCBJQkNTMikJCQkJXAorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoRVgpCQkJCQlcCiAJc2V0X3BlcnNvbmFsaXR5KCgoRVgpLmVfZmxhZ3MgJiBFRl9BTFBIQV8zMkJJVCkJCVwKLQkgICA/IFBFUl9MSU5VWF8zMkJJVCA6IChJQkNTMikgPyBQRVJfU1ZSNCA6IFBFUl9MSU5VWCkKKwkgICA/IFBFUl9MSU5VWF8zMkJJVCA6IFBFUl9MSU5VWCkKIAogZXh0ZXJuIGludCBhbHBoYV9sMWlfY2FjaGVzaGFwZTsKIGV4dGVybiBpbnQgYWxwaGFfbDFkX2NhY2hlc2hhcGU7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N0YXRmcy5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zdGF0ZnMuaAppbmRleCBhZDE1ODMwLi5kZTM1Y2Q0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N0YXRmcy5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmgKQEAgLTEsNiArMSwxMCBAQAogI2lmbmRlZiBfQUxQSEFfU1RBVEZTX0gKICNkZWZpbmUgX0FMUEhBX1NUQVRGU19ICiAKKy8qIEFscGhhIGlzIHRoZSBvbmx5IDY0LWJpdCBwbGF0Zm9ybSB3aXRoIDMyLWJpdCBzdGF0ZnMuIEFuZCBkb2Vzbid0CisgICBldmVuIHNlZW0gdG8gaW1wbGVtZW50IHN0YXRmczY0ICovCisjZGVmaW5lIF9fc3RhdGZzX3dvcmQgX191MzIKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAxNWZkYTQzLi5kMDY5NTI2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC03NCwxMiArNzQsMTQgQEAKICNkZWZpbmUgVElGX1VBQ19TSUdCVVMJCTcKICNkZWZpbmUgVElGX01FTURJRQkJOAogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTkJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTYJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogLyogV29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybi4gICovCiAjZGVmaW5lIF9USUZfV09SS19NQVNLCQkoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9ORUVEX1JFU0NIRUQpCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYwppbmRleCAwNGRjYzVlLi45Y2Q4ZGNhIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMKQEAgLTY1NSw3ICs2NTUsNyBAQAogCiAJY2FzZSAweDcxOgkJCQkJLyogUlRDX1BPUlQoMSkgKi8KIAkJcnRjX2FjY2Vzcy5pbmRleCA9IGluZGV4OwotCQlydGNfYWNjZXNzLmRhdGEgPSBCQ0RfVE9fQklOKGIpOworCQlydGNfYWNjZXNzLmRhdGEgPSBiY2QyYmluKGIpOwogCQlydGNfYWNjZXNzLmZ1bmN0aW9uID0gMHg0OCArICF3cml0ZTsJLyogR0VUL1BVVF9UT1kgKi8KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTY2OCw3ICs2NjgsNyBAQAogI2Vsc2UKIAkJX19tYXJ2ZWxfYWNjZXNzX3J0YygmcnRjX2FjY2Vzcyk7CiAjZW5kaWYKLQkJcmV0ID0gQklOX1RPX0JDRChydGNfYWNjZXNzLmRhdGEpOworCQlyZXQgPSBiaW4yYmNkKHJ0Y19hY2Nlc3MuZGF0YSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKaW5kZXggMjE3OWM2MC4uYjkwOTRkYSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKQEAgLTQxLDEzICs0MSw2IEBACiAJcmV0dXJuIChwYWRkciA+PiAoUEFHRV9TSElGVC0xKSkgfCAxOwogfQogCi1zdGF0aWMgaW5saW5lIGxvbmcKLWNhbGNfbnBhZ2VzKGxvbmcgYnl0ZXMpCi17Ci0JcmV0dXJuIChieXRlcyArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7Ci19Ci0MCi0KIC8qIFJldHVybiB0aGUgbWluaW11bSBvZiBNQVggb3IgdGhlIGZpcnN0IHBvd2VyIG9mIHR3byBsYXJnZXIKICAgIHRoYW4gbWFpbiBtZW1vcnkuICAqLwogCkBAIC0yODcsNyArMjgwLDcgQEAKIAlpZiAoIWFyZW5hIHx8IGFyZW5hLT5kbWFfYmFzZSArIGFyZW5hLT5zaXplIC0gMSA+IG1heF9kbWEpCiAJCWFyZW5hID0gaG9zZS0+c2dfaXNhOwogCi0JbnBhZ2VzID0gY2FsY19ucGFnZXMoKHBhZGRyICYgflBBR0VfTUFTSykgKyBzaXplKTsKKwlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMocGFkZHIsIHNpemUsIFBBR0VfU0laRSk7CiAKIAkvKiBGb3JjZSBhbGxvY2F0aW9uIHRvIDY0S0IgYm91bmRhcnkgZm9yIElTQSBicmlkZ2VzLiAqLwogCWlmIChwZGV2ICYmIHBkZXYgPT0gaXNhX2JyaWRnZSkKQEAgLTM4Nyw3ICszODAsNyBAQAogCQlCVUcoKTsKIAl9CiAKLQlucGFnZXMgPSBjYWxjX25wYWdlcygoZG1hX2FkZHIgJiB+UEFHRV9NQVNLKSArIHNpemUpOworCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfYWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhcmVuYS0+bG9jaywgZmxhZ3MpOwogCkBAIC01ODAsNyArNTczLDcgQEAKIAkgICBjb250aWd1b3VzLiAgKi8KIAogCXBhZGRyICY9IH5QQUdFX01BU0s7Ci0JbnBhZ2VzID0gY2FsY19ucGFnZXMocGFkZHIgKyBzaXplKTsKKwlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMocGFkZHIsIHNpemUsIFBBR0VfU0laRSk7CiAJZG1hX29mcyA9IGlvbW11X2FyZW5hX2FsbG9jKGRldiwgYXJlbmEsIG5wYWdlcywgMCk7CiAJaWYgKGRtYV9vZnMgPCAwKSB7CiAJCS8qIElmIHdlIGF0dGVtcHRlZCBhIGRpcmVjdCBtYXAgYWJvdmUgYnV0IGZhaWxlZCwgZGllLiAgKi8KQEAgLTYxNiw3ICs2MDksNyBAQAogCQkJc2crKzsKIAkJfQogCi0JCW5wYWdlcyA9IGNhbGNfbnBhZ2VzKChwYWRkciAmIH5QQUdFX01BU0spICsgc2l6ZSk7CisJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKIAogCQlwYWRkciAmPSBQQUdFX01BU0s7CiAJCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7ICsraSwgcGFkZHIgKz0gUEFHRV9TSVpFKQpAQCAtNzc1LDcgKzc2OCw3IEBACiAJCURCR0EoIiAgICAoJWxkKSBzZyBbJWx4LCVseF1cbiIsCiAJCSAgICAgc2cgLSBlbmQgKyBuZW50cywgYWRkciwgc2l6ZSk7CiAKLQkJbnBhZ2VzID0gY2FsY19ucGFnZXMoKGFkZHIgJiB+UEFHRV9NQVNLKSArIHNpemUpOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoYWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKIAkJb2ZzID0gKGFkZHIgLSBhcmVuYS0+ZG1hX2Jhc2UpID4+IFBBR0VfU0hJRlQ7CiAJCWlvbW11X2FyZW5hX2ZyZWUoYXJlbmEsIG9mcywgbnBhZ2VzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYwppbmRleCAwNmI2ZmRhLi5lNjU3YzQ1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogCiAjaW5jbHVkZSA8YXNtL2h3cnBiLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3NhYmxlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYwppbmRleCA5OWE3ZjE5Li5hNDU1NWY0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYwpAQCAtNDcsNyArNDcsNyBAQAogCiBzdGF0aWMgaXJxX3N3aXp6bGVfdCAqc2FibGVfbHlueF9pcnFfc3dpenpsZTsKIAotc3RhdGljIHZvaWQgc2FibGVfbHlueF9pbml0X2lycShpbnQgbnJfaXJxcyk7CitzdGF0aWMgdm9pZCBzYWJsZV9seW54X2luaXRfaXJxKGludCBucl9vZl9pcnFzKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0FMUEhBX0dFTkVSSUMpIHx8IGRlZmluZWQoQ09ORklHX0FMUEhBX1NBQkxFKQogCkBAIC01MzAsMTEgKzUzMCwxMSBAQAogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQKLXNhYmxlX2x5bnhfaW5pdF9pcnEoaW50IG5yX2lycXMpCitzYWJsZV9seW54X2luaXRfaXJxKGludCBucl9vZl9pcnFzKQogewogCWxvbmcgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2ZfaXJxczsgKytpKSB7CiAJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9ESVNBQkxFRCB8IElSUV9MRVZFTDsKIAkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZzYWJsZV9seW54X2lycV90eXBlOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYwppbmRleCA3NTQ4MGNhLi5lNmEyMzE0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCkBAIC0zNDYsMTIgKzM0NiwxMiBAQAogCXllYXIgPSBDTU9TX1JFQUQoUlRDX1lFQVIpOwogCiAJaWYgKCEoQ01PU19SRUFEKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJDRF9UT19CSU4oc2VjKTsKLQkJQkNEX1RPX0JJTihtaW4pOwotCQlCQ0RfVE9fQklOKGhvdXIpOwotCQlCQ0RfVE9fQklOKGRheSk7Ci0JCUJDRF9UT19CSU4obW9uKTsKLQkJQkNEX1RPX0JJTih5ZWFyKTsKKwkJc2VjID0gYmNkMmJpbihzZWMpOworCQltaW4gPSBiY2QyYmluKG1pbik7CisJCWhvdXIgPSBiY2QyYmluKGhvdXIpOworCQlkYXkgPSBiY2QyYmluKGRheSk7CisJCW1vbiA9IGJjZDJiaW4obW9uKTsKKwkJeWVhciA9IGJjZDJiaW4oeWVhcik7CiAJfQogCiAJLyogUEMtbGlrZSBpcyBzdGFuZGFyZDsgdXNlZCBmb3IgeWVhciA+PSA3MCAqLwpAQCAtNTI1LDcgKzUyNSw3IEBACiAKIAljbW9zX21pbnV0ZXMgPSBDTU9TX1JFQUQoUlRDX01JTlVURVMpOwogCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCQ0RfVE9fQklOKGNtb3NfbWludXRlcyk7CisJCWNtb3NfbWludXRlcyA9IGJjZDJiaW4oY21vc19taW51dGVzKTsKIAogCS8qCiAJICogc2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywKQEAgLTU0Myw4ICs1NDMsOCBAQAogCiAJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKIAkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKLQkJCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKKwkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcyxSVENfU0VDT05EUyk7CiAJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLFJUQ19NSU5VVEVTKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IGVmZWVkNjUuLmRmMzlkMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtOCw2ICs4LDcgQEAKIGNvbmZpZyBBUk0KIAlib29sCiAJZGVmYXVsdCB5CisJc2VsZWN0IEhBVkVfQU9VVAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBSVENfTElCCiAJc2VsZWN0IFNZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OCkBAIC0xNDAsOSArMTQxLDYgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBBUkNIX1NVUFBPUlRTX0FPVVQKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBBUkNIX01BWV9IQVZFX1BDX0ZEQwogCWJvb2wKIApAQCAtMTk0LDYgKzE5Miw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlN5c3RlbSBUeXBlIgogCiBjaG9pY2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggZTIyNzRiYy4uN2Q1MTIxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTExOCw5ICsxMTgsMTAgQEAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfSVhQMjNYWCkgICAgOj0gaXhwMjN4eAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9PTUFQMSkJICAgOj0gb21hcDEKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfT01BUDIpCSAgIDo9IG9tYXAyCisgbWFjaGluZS0kKENPTkZJR19BUkNIX09NQVAzKQkgICA6PSBvbWFwMgogICAgIHBsYXQtJChDT05GSUdfQVJDSF9PTUFQKQkgICA6PSBvbWFwCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1MzQzI0MTApCSAgIDo9IHMzYzI0MTAgczNjMjQwMCBzM2MyNDEyIHMzYzI0NDAgczNjMjQ0MiBzM2MyNDQzCi0gICAgcGxhdC0kKENPTkZJR19QTEFUX1MzQzI0WFgpCSAgIDo9IHMzYzI0eHgKKyAgICBwbGF0LSQoQ09ORklHX1BMQVRfUzNDMjRYWCkJICAgOj0gczNjMjR4eCBzM2MKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTEg3QTQwWCkJICAgOj0gbGg3YTQweAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9WRVJTQVRJTEUpICA6PSB2ZXJzYXRpbGUKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfSU1YKQkgICA6PSBpbXgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDQyZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTMyMSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjOAorIyBXZWQgT2N0ICAxIDE3OjE0OjIyIDIwMDgKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQPXkKKyMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAorCisjCisjIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCisjCitDT05GSUdfQVJDSF9PTUFQX09URz15CisjIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfT01BUDM9eQorCisjCisjIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9NQ0JTUCBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CitDT05GSUdfT01BUF8zMktfVElNRVI9eQorQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAorQ09ORklHX09NQVBfRE1fVElNRVI9eQorIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMSBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzPXkKK0NPTkZJR19BUkNIX09NQVAzNFhYPXkKK0NPTkZJR19BUkNIX09NQVAzNDMwPXkKKworIworIyBPTUFQIEJvYXJkIFR5cGUKKyMKK0NPTkZJR19NQUNIX09NQVAzX0JFQUdMRT15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfMzJ2Nks9eQorQ09ORklHX0NQVV9WNz15CitDT05GSUdfQ1BVXzMydjc9eQorQ09ORklHX0NQVV9BQlJUX0VWNz15CitDT05GSUdfQ1BVX1BBQlJUX0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WNz15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQorQ09ORklHX0NQVV9DT1BZX1Y2PXkKK0NPTkZJR19DUFVfVExCX1Y3PXkKK0NPTkZJR19DUFVfSEFTX0FTSUQ9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19BUk1fVEhVTUJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVNfVExTX1JFRz15CisjIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTI4CitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PTE5Mi4xNjguMC4xOi9ob21lL3VzZXIvYnVpbGRyb290IGlwPTE5Mi4xNjguMC4yOjE5Mi4xNjguMC4xOjE5Mi4xNjguMC4xOjI1NS4yNTUuMjU1LjA6dGd0OmV0aDA6b2ZmIHJ3IGNvbnNvbGU9dHR5UzIsMTE1MjAwbjgiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorQ09ORklHX1ZGUD15CitDT05GSUdfVkZQdjM9eQorIyBDT05GSUdfTkVPTiBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CitDT05GSUdfSTJDX09NQVA9eQorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTVVTQl9IRFJDPXkKK0NPTkZJR19VU0JfTVVTQl9TT0M9eQorCisjCisjIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX01VU0JfSE9TVD15CisjIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQorIyBDT05GSUdfTVVTQl9QSU9fT05MWSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0lOVkVOVFJBX0RNQT15CisjIENPTkZJR19VU0JfVElfQ1BQSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKK0NPTkZJR19VU0JfTTY2NTkyPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPW0KK0NPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCisjCisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UgaXMgbm90IHNldAorQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CitDT05GSUdfUUZNVF9WMj15CitDT05GSUdfUVVPVEFDVEw9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfbGRwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDhhMjEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKQEAgLTAsMCArMSwxMDQ0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM1CisjIEZyaSBPY3QgMTAgMTE6NDk6NDEgMjAwOAorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQPXkKKyMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAorCisjCisjIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCisjCitDT05GSUdfQVJDSF9PTUFQX09URz15CisjIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfT01BUDM9eQorCisjCisjIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAorQ09ORklHX09NQVBfTVVYPXkKK0NPTkZJR19PTUFQX01VWF9ERUJVRz15CitDT05GSUdfT01BUF9NVVhfV0FSTklOR1M9eQorQ09ORklHX09NQVBfTUNCU1A9eQorIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAorQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKK0NPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKK0NPTkZJR19PTUFQX0RNX1RJTUVSPXkKKyMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0CitDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMz15CitDT05GSUdfT01BUF9TRVJJQUxfV0FLRT15CitDT05GSUdfQVJDSF9PTUFQMzRYWD15CitDT05GSUdfQVJDSF9PTUFQMzQzMD15CisKKyMKKyMgT01BUCBCb2FyZCBUeXBlCisjCisjIENPTkZJR19NQUNIX09NQVAzX0JFQUdMRSBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9PTUFQX0xEUD15CisjIENPTkZJR19NQUNIX09WRVJPIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV8zMnY2Sz15CitDT05GSUdfQ1BVX1Y3PXkKK0NPTkZJR19DUFVfMzJ2Nz15CitDT05GSUdfQ1BVX0FCUlRfRVY3PXkKK0NPTkZJR19DUFVfUEFCUlRfSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKK0NPTkZJR19DUFVfQ0FDSEVfVklQVD15CitDT05GSUdfQ1BVX0NPUFlfVjY9eQorQ09ORklHX0NQVV9UTEJfVjc9eQorQ09ORklHX0NQVV9IQVNfQVNJRD15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0FSTV9USFVNQkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0hBU19UTFNfUkVHPXkKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTI4CitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyBuZnNyb290PTE5Mi4xNjguMC4xOi9ob21lL3VzZXIvYnVpbGRyb290IGlwPTE5Mi4xNjguMC4yOjE5Mi4xNjguMC4xOjE5Mi4xNjguMC4xOjI1NS4yNTUuMjU1LjA6dGd0OmV0aDA6b2ZmIHJ3IGNvbnNvbGU9dHR5UzIsMTE1MjAwbjgiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKK0NPTkZJR19WRlA9eQorQ09ORklHX1ZGUHYzPXkKKyMgQ09ORklHX05FT04gaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPXkKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CitDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19PTUFQPXkKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfT01BUDI0WFg9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorQ09ORklHX1cxPXkKKworIworIyAxLXdpcmUgQnVzIE1hc3RlcnMKKyMKKyMgQ09ORklHX1cxX01BU1RFUl9EUzI0ODIgaXMgbm90IHNldAorIyBDT05GSUdfVzFfTUFTVEVSX0RTMVdNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX01BU1RFUl9HUElPIGlzIG5vdCBzZXQKKworIworIyAxLXdpcmUgU2xhdmVzCisjCisjIENPTkZJR19XMV9TTEFWRV9USEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX0RTMjQzMyBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9TTEFWRV9EUzI3NjAgaXMgbm90IHNldAorQ09ORklHX1BPV0VSX1NVUFBMWT15CisjIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CitDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX1NQST15CisjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKKyMKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKK0NPTkZJR19RVU9UQT15CitDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YyPXkKK0NPTkZJR19RVU9UQUNUTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfVDEwRElGPXkKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Zlcm9fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vdmVyb19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkyMDA5NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb3Zlcm9fZGVmY29uZmlnCkBAIC0wLDAgKzEsMTg4NSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjOAorIyBGcmkgT2N0ICAzIDExOjUwOjM0IDIwMDgKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfT1BST0ZJTEVfQVJNVjc9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CisjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisjIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTFNGPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfT01BUD15CisjIENPTkZJR19BUkNIX01TTTdYMDBBIGlzIG5vdCBzZXQKKworIworIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucworIworQ09ORklHX0FSQ0hfT01BUF9PVEc9eQorIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVAzPXkKKworIworIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucworIworIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfTVVYIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX01DQlNQPXkKKyMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQXzMyS19USU1FUj15CitDT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CitDT05GSUdfT01BUF9ETV9USU1FUj15CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAorQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDM9eQorQ09ORklHX0FSQ0hfT01BUDM0WFg9eQorQ09ORklHX0FSQ0hfT01BUDM0MzA9eQorCisjCisjIE9NQVAgQm9hcmQgVHlwZQorIworIyBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUgaXMgbm90IHNldAorQ09ORklHX01BQ0hfT1ZFUk89eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVXzMydjZLPXkKK0NPTkZJR19DUFVfVjc9eQorQ09ORklHX0NQVV8zMnY3PXkKK0NPTkZJR19DUFVfQUJSVF9FVjc9eQorQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNz15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorQ09ORklHX0FSTV9USFVNQkVFPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0hBU19UTFNfUkVHPXkKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMjgKK0NPTkZJR19BRUFCST15CisjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19MRURTPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSIgZGVidWcgIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfS0VYRUM9eQorQ09ORklHX0FUQUdTX1BST0M9eQorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKK0NPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFM9eQorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX1ZGUD15CitDT05GSUdfVkZQdjM9eQorQ09ORklHX05FT049eQorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPW0KK0NPTkZJR19CSU5GTVRfTUlTQz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPW0KK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CitDT05GSUdfQlQ9eQorQ09ORklHX0JUX0wyQ0FQPXkKK0NPTkZJR19CVF9TQ089eQorQ09ORklHX0JUX1JGQ09NTT15CitDT05GSUdfQlRfUkZDT01NX1RUWT15CitDT05GSUdfQlRfQk5FUD15CitDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQorQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKK0NPTkZJR19CVF9ISURQPXkKKworIworIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19CVF9IQ0lVU0I9bQorQ09ORklHX0JUX0hDSVVTQl9TQ089eQorIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9IQ0lVQVJUPXkKK0NPTkZJR19CVF9IQ0lVQVJUX0g0PXkKK0NPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQorIyBDT05GSUdfQlRfSENJVUFSVF9MTCBpcyBub3Qgc2V0CitDT05GSUdfQlRfSENJQkNNMjAzWD15CitDT05GSUdfQlRfSENJQlBBMTBYPXkKKyMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCitDT05GSUdfQ0ZHODAyMTE9eQorQ09ORklHX05MODAyMTE9eQorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKK0NPTkZJR19NQUM4MDIxMT15CisKKyMKKyMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KKyMKK0NPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQorQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEPXkKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJwaWQiCisjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9MRURTPXkKKyMgQ09ORklHX01BQzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfREVCVUdfTUVOVSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExPXkKKyMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD15CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9eQorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPXkKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKK0NPTkZJR19FRVBST01fOTNDWDY9bQorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19SQUlEX0FUVFJTPW0KK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9bQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCitDT05GSUdfTURfUkFJRDEwPW0KK0NPTkZJR19NRF9SQUlENDU2PW0KK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorQ09ORklHX01EX0ZBVUxUWT1tCitDT05GSUdfQkxLX0RFVl9ETT1tCisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorQ09ORklHX0RNX01VTFRJUEFUSD1tCitDT05GSUdfRE1fREVMQVk9bQorIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorQ09ORklHX01JST15CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTl84MDIxMT15CitDT05GSUdfTElCRVJUQVM9eQorQ09ORklHX0xJQkVSVEFTX1VTQj15CitDT05GSUdfTElCRVJUQVNfU0RJTz15CitDT05GSUdfTElCRVJUQVNfREVCVUc9eQorQ09ORklHX1VTQl9aRDEyMDE9bQorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKK0NPTkZJR19SVEw4MTg3PW0KKyMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKK0NPTkZJR19QNTRfQ09NTU9OPW0KK0NPTkZJR19QNTRfVVNCPW0KKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfSE9TVEFQPW0KK0NPTkZJR19IT1NUQVBfRklSTVdBUkU9eQorQ09ORklHX0hPU1RBUF9GSVJNV0FSRV9OVlJBTT15CisjIENPTkZJR19CNDMgaXMgbm90IHNldAorIyBDT05GSUdfQjQzTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKK0NPTkZJR19VU0JfQ0FUQz1tCitDT05GSUdfVVNCX0tBV0VUSD1tCitDT05GSUdfVVNCX1BFR0FTVVM9bQorQ09ORklHX1VTQl9SVEw4MTUwPW0KK0NPTkZJR19VU0JfVVNCTkVUPXkKK0NPTkZJR19VU0JfTkVUX0FYODgxN1g9eQorQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9eQorQ09ORklHX1VTQl9ORVRfRE05NjAxPW0KK0NPTkZJR19VU0JfTkVUX0dMNjIwQT1tCitDT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KK0NPTkZJR19VU0JfTkVUX1BMVVNCPW0KK0NPTkZJR19VU0JfTkVUX01DUzc4MzA9bQorQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVD1tCitDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUPW0KK0NPTkZJR19VU0JfQUxJX001NjMyPXkKK0NPTkZJR19VU0JfQU4yNzIwPXkKK0NPTkZJR19VU0JfQkVMS0lOPXkKK0NPTkZJR19VU0JfQVJNTElOVVg9eQorQ09ORklHX1VTQl9FUFNPTjI4ODg9eQorQ09ORklHX1VTQl9LQzIxOTA9eQorQ09ORklHX1VTQl9ORVRfWkFVUlVTPW0KKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX01QUEU9bQorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CitDT05GSUdfSTJDX09NQVA9eQorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0VFUFJPTT15CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX09NQVAyNFhYPXkKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorQ09ORklHX0RFQlVHX0dQSU89eQorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorQ09ORklHX1BPV0VSX1NVUFBMWT1tCisjIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCitDT05GSUdfVklERU9fREVWPW0KK0NPTkZJR19WSURFT19WNEwyX0NPTU1PTj1tCitDT05GSUdfVklERU9fQUxMT1dfVjRMMT15CitDT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQorQ09ORklHX0RWQl9DT1JFPW0KK0NPTkZJR19WSURFT19NRURJQT1tCisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfTUVESUFfQVRUQUNIPXkKK0NPTkZJR19NRURJQV9UVU5FUj1tCisjIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JWkUgaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCitDT05GSUdfTUVESUFfVFVORVJfVERBODI5MD1tCitDT05GSUdfTUVESUFfVFVORVJfVERBODI3WD1tCitDT05GSUdfTUVESUFfVFVORVJfVERBMTgyNzE9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCitDT05GSUdfTUVESUFfVFVORVJfTVQyMDYwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9NVDIyNjY9bQorQ09ORklHX01FRElBX1RVTkVSX1FUMTAxMD1tCitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQorQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDVTPW0KK0NPTkZJR19WSURFT19WNEwyPW0KK0NPTkZJR19WSURFT19WNEwxPW0KK0NPTkZJR19WSURFT19UVkVFUFJPTT1tCitDT05GSUdfVklERU9fVFVORVI9bQorQ09ORklHX1ZJREVPX0NBUFRVUkVfRFJJVkVSUz15CisjIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPPXkKK0NPTkZJR19WSURFT19NU1AzNDAwPW0KK0NPTkZJR19WSURFT19DUzUzTDMyQT1tCitDT05GSUdfVklERU9fV004Nzc1PW0KK0NPTkZJR19WSURFT19TQUE3MTFYPW0KK0NPTkZJR19WSURFT19DWDI1ODQwPW0KK0NPTkZJR19WSURFT19DWDIzNDFYPW0KKyMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUElBMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTkVSXzMwMzYgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQVUwODI4IGlzIG5vdCBzZXQKK0NPTkZJR19WNExfVVNCX0RSSVZFUlM9eQorQ09ORklHX1VTQl9WSURFT19DTEFTUz1tCitDT05GSUdfVVNCX1ZJREVPX0NMQVNTX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX1VTQl9HU1BDQSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fUFZSVVNCMj1tCitDT05GSUdfVklERU9fUFZSVVNCMl9TWVNGUz15CitDT05GSUdfVklERU9fUFZSVVNCMl9EVkI9eQorIyBDT05GSUdfVklERU9fUFZSVVNCMl9ERUJVR0lGQyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19FTTI4WFggaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1VTQlZJU0lPTj1tCitDT05GSUdfVklERU9fVVNCVklERU89bQorQ09ORklHX1VTQl9WSUNBTT1tCitDT05GSUdfVVNCX0lCTUNBTT1tCitDT05GSUdfVVNCX0tPTklDQVdDPW0KK0NPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSPW0KKyMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1ZDQU1DSElQPW0KK0NPTkZJR19VU0JfVzk5NjhDRj1tCitDT05GSUdfVVNCX09WNTExPW0KK0NPTkZJR19VU0JfU0U0MDE9bQorQ09ORklHX1VTQl9TTjlDMTAyPW0KK0NPTkZJR19VU0JfU1RWNjgwPW0KKyMgQ09ORklHX1VTQl9aQzAzMDEgaXMgbm90IHNldAorQ09ORklHX1VTQl9QV0M9bQorIyBDT05GSUdfVVNCX1BXQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1pSMzY0WFg9bQorIyBDT05GSUdfVVNCX1NUS1dFQkNBTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUzIyNTUgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVIGlzIG5vdCBzZXQKK0NPTkZJR19SQURJT19BREFQVEVSUz15CisjIENPTkZJR19VU0JfRFNCUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0k0NzBYIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfQ0FQVFVSRV9EUklWRVJTPXkKKyMgQ09ORklHX1RUUENJX0VFUFJPTSBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycworIworQ09ORklHX0RWQl9VU0I9bQorIyBDT05GSUdfRFZCX1VTQl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1VTQl9BODAwPW0KK0NPTkZJR19EVkJfVVNCX0RJQlVTQl9NQj1tCisjIENPTkZJR19EVkJfVVNCX0RJQlVTQl9NQl9GQVVMVFkgaXMgbm90IHNldAorQ09ORklHX0RWQl9VU0JfRElCVVNCX01DPW0KK0NPTkZJR19EVkJfVVNCX0RJQjA3MDA9bQorQ09ORklHX0RWQl9VU0JfVU1UXzAxMD1tCitDT05GSUdfRFZCX1VTQl9DWFVTQj1tCitDT05GSUdfRFZCX1VTQl9NOTIwWD1tCitDT05GSUdfRFZCX1VTQl9HTDg2MT1tCitDT05GSUdfRFZCX1VTQl9BVTY2MTA9bQorQ09ORklHX0RWQl9VU0JfRElHSVRWPW0KK0NPTkZJR19EVkJfVVNCX1ZQNzA0NT1tCitDT05GSUdfRFZCX1VTQl9WUDcwMlg9bQorQ09ORklHX0RWQl9VU0JfR1A4UFNLPW0KK0NPTkZJR19EVkJfVVNCX05PVkFfVF9VU0IyPW0KK0NPTkZJR19EVkJfVVNCX1RUVVNCMj1tCitDT05GSUdfRFZCX1VTQl9EVFQyMDBVPW0KK0NPTkZJR19EVkJfVVNCX09QRVJBMT1tCitDT05GSUdfRFZCX1VTQl9BRjkwMDU9bQorQ09ORklHX0RWQl9VU0JfQUY5MDA1X1JFTU9URT1tCisjIENPTkZJR19EVkJfVVNCX0RXMjEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVVNCX0FOWVNFRSBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1RUVVNCX0JVREdFVD1tCitDT05GSUdfRFZCX1RUVVNCX0RFQz1tCitDT05GSUdfRFZCX0NJTkVSR1lUMj1tCisjIENPTkZJR19EVkJfQ0lORVJHWVQyX1RVTklORyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU0lBTk9fU01TMVhYWCBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIEZsZXhDb3BJSSAoQjJDMikgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1AgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCisjCisKKyMKKyMgQ3VzdG9taXNlIERWQiBGcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9GRV9DVVNUT01JU0UgaXMgbm90IHNldAorCisjCisjIERWQi1TIChzYXRlbGxpdGUpIGZyb250ZW5kcworIworQ09ORklHX0RWQl9DWDI0MTEwPW0KK0NPTkZJR19EVkJfQ1gyNDEyMz1tCitDT05GSUdfRFZCX01UMzEyPW0KK0NPTkZJR19EVkJfUzVIMTQyMD1tCitDT05GSUdfRFZCX1NUVjAyOTk9bQorQ09ORklHX0RWQl9UREE4MDgzPW0KK0NPTkZJR19EVkJfVERBMTAwODY9bQorQ09ORklHX0RWQl9WRVMxWDkzPW0KK0NPTkZJR19EVkJfVFVORVJfSVREMTAwMD1tCitDT05GSUdfRFZCX1REQTgyNlg9bQorQ09ORklHX0RWQl9UVUE2MTAwPW0KKworIworIyBEVkItVCAodGVycmVzdHJpYWwpIGZyb250ZW5kcworIworQ09ORklHX0RWQl9TUDg4NzA9bQorQ09ORklHX0RWQl9TUDg4N1g9bQorQ09ORklHX0RWQl9DWDIyNzAwPW0KK0NPTkZJR19EVkJfQ1gyMjcwMj1tCisjIENPTkZJR19EVkJfRFJYMzk3WEQgaXMgbm90IHNldAorQ09ORklHX0RWQl9MNjQ3ODE9bQorQ09ORklHX0RWQl9UREExMDA0WD1tCitDT05GSUdfRFZCX05YVDYwMDA9bQorQ09ORklHX0RWQl9NVDM1Mj1tCitDT05GSUdfRFZCX1pMMTAzNTM9bQorQ09ORklHX0RWQl9ESUIzMDAwTUI9bQorQ09ORklHX0RWQl9ESUIzMDAwTUM9bQorQ09ORklHX0RWQl9ESUI3MDAwTT1tCitDT05GSUdfRFZCX0RJQjcwMDBQPW0KK0NPTkZJR19EVkJfVERBMTAwNDg9bQorCisjCisjIERWQi1DIChjYWJsZSkgZnJvbnRlbmRzCisjCitDT05GSUdfRFZCX1ZFUzE4MjA9bQorQ09ORklHX0RWQl9UREExMDAyMT1tCitDT05GSUdfRFZCX1REQTEwMDIzPW0KK0NPTkZJR19EVkJfU1RWMDI5Nz1tCisKKyMKKyMgQVRTQyAoTm9ydGggQW1lcmljYW4vS29yZWFuIFRlcnJlc3RyaWFsL0NhYmxlIERUVikgZnJvbnRlbmRzCisjCitDT05GSUdfRFZCX05YVDIwMFg9bQorIyBDT05GSUdfRFZCX09SNTEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX09SNTExMzIgaXMgbm90IHNldAorQ09ORklHX0RWQl9CQ00zNTEwPW0KK0NPTkZJR19EVkJfTEdEVDMzMFg9bQorQ09ORklHX0RWQl9TNUgxNDA5PW0KK0NPTkZJR19EVkJfQVU4NTIyPW0KK0NPTkZJR19EVkJfUzVIMTQxMT1tCisKKyMKKyMgRGlnaXRhbCB0ZXJyZXN0cmlhbCBvbmx5IHR1bmVycy9QTEwKKyMKK0NPTkZJR19EVkJfUExMPW0KK0NPTkZJR19EVkJfVFVORVJfRElCMDA3MD1tCisKKyMKKyMgU0VDIGNvbnRyb2wgZGV2aWNlcyBmb3IgRFZCLVMKKyMKK0NPTkZJR19EVkJfTE5CUDIxPW0KKyMgQ09ORklHX0RWQl9JU0w2NDA1IGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfSVNMNjQyMT1tCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSFdERVA9eQorQ09ORklHX1NORF9SQVdNSURJPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSPW0KKyMgQ09ORklHX1NORF9TRVFfRFVNTVkgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CitDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15CitDT05GSUdfU05EX0RFQlVHPXkKKyMgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQVJNPXkKK0NPTkZJR19TTkRfU1BJPXkKK0NPTkZJR19TTkRfVVNCPXkKK0NPTkZJR19TTkRfVVNCX0FVRElPPXkKK0NPTkZJR19TTkRfVVNCX0NBSUFRPW0KK0NPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRF9ERUJVRz15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CitDT05GSUdfVVNCX0RFQlVHPXkKK0NPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfU09DPXkKKworIworIyBPTUFQIDM0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9NVVNCX0hPU1Q9eQorIyBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9PVEcgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEPXkKK0NPTkZJR19NVVNCX1BJT19PTkxZPXkKKyMgQ09ORklHX1VTQl9NVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfQUNNPW0KK0NPTkZJR19VU0JfUFJJTlRFUj1tCitDT05GSUdfVVNCX1dETT15CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCitDT05GSUdfVVNCX1NFUklBTD1tCisjIENPTkZJR19VU0JfRVpVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9YSVJDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfRU1JNjI9bQorQ09ORklHX1VTQl9FTUkyNj1tCisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorQ09ORklHX1VTQl9MRUdPVE9XRVI9bQorQ09ORklHX1VTQl9MQ0Q9bQorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0xFRD1tCisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUU9eQorCisjCisjIE1NQy9TRCBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorQ09ORklHX1NESU9fVUFSVD15CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19HUElPPXkKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKKyMKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UgaXMgbm90IHNldAorQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CitDT05GSUdfUUZNVF9WMj15CitDT05GSUdfUVVPVEFDVEw9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZVU0VfRlM9bQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorQ09ORklHX0pGRlMyX0ZTX1hBVFRSPXkKK0NPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorQ09ORklHX1NDSEVEU1RBVFM9eQorQ09ORklHX1RJTUVSX1NUQVRTPXkKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX1hPUl9CTE9DS1M9bQorQ09ORklHX0FTWU5DX0NPUkU9bQorQ09ORklHX0FTWU5DX01FTUNQWT1tCitDT05GSUdfQVNZTkNfWE9SPW0KK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19DUllQVEQ9bQorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19MUlc9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz1tCitDT05GSUdfQ1JZUFRPX1hDQkM9bQorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz15CitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9eQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0NDSVRUPXkKK0NPTkZJR19DUkMxNj1tCitDT05GSUdfQ1JDX1QxMERJRj15CitDT05GSUdfQ1JDX0lUVV9UPXkKK0NPTkZJR19DUkMzMj15CitDT05GSUdfQ1JDNz15CitDT05GSUdfTElCQ1JDMzJDPXkKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDViZTAxNjkuLmE1ODM3OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xMDcsNiArMTA3LDYgQEAKICNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQkoX3IpLT5BUk1fcjAgPSAwCiAKIGV4dGVybiB2b2lkIGVsZl9zZXRfcGVyc29uYWxpdHkoY29uc3Qgc3RydWN0IGVsZjMyX2hkciAqKTsKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikJZWxmX3NldF9wZXJzb25hbGl0eSgmKGV4KSkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KQllbGZfc2V0X3BlcnNvbmFsaXR5KCYoZXgpKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N0YXRmcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3RhdGZzLmgKaW5kZXggYTAyZTZhOC4uMDc5NDQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3RhdGZzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3RhdGZzLmgKQEAgLTEsNDIgKzEsMTIgQEAKICNpZm5kZWYgX0FTTUFSTV9TVEFURlNfSAogI2RlZmluZSBfQVNNQVJNX1NUQVRGU19ICiAKLSNpZm5kZWYgX19LRVJORUxfU1RSSUNUX05BTUVTCi0jIGluY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci10eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAlmc2lkX3Q7Ci0jZW5kaWYKLQotc3RydWN0IHN0YXRmcyB7Ci0JX191MzIgZl90eXBlOwotCV9fdTMyIGZfYnNpemU7Ci0JX191MzIgZl9ibG9ja3M7Ci0JX191MzIgZl9iZnJlZTsKLQlfX3UzMiBmX2JhdmFpbDsKLQlfX3UzMiBmX2ZpbGVzOwotCV9fdTMyIGZfZmZyZWU7Ci0JX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKLQlfX3UzMiBmX25hbWVsZW47Ci0JX191MzIgZl9mcnNpemU7Ci0JX191MzIgZl9zcGFyZVs1XTsKLX07Ci0KIC8qCiAgKiBXaXRoIEVBQkkgdGhlcmUgaXMgNCBieXRlcyBvZiBwYWRkaW5nIGFkZGVkIHRvIHRoaXMgc3RydWN0dXJlLgogICogTGV0J3MgcGFjayBpdCBzbyB0aGUgcGFkZGluZyBnb2VzIGF3YXkgdG8gc2ltcGxpZnkgZHVhbCBBQkkgc3VwcG9ydC4KICAqIE5vdGUgdGhhdCB1c2VyIHNwYWNlIGRvZXMgTk9UIGhhdmUgdG8gcGFjayB0aGlzIHN0cnVjdHVyZS4KICAqLwotc3RydWN0IHN0YXRmczY0IHsKLQlfX3UzMiBmX3R5cGU7Ci0JX191MzIgZl9ic2l6ZTsKLQlfX3U2NCBmX2Jsb2NrczsKLQlfX3U2NCBmX2JmcmVlOwotCV9fdTY0IGZfYmF2YWlsOwotCV9fdTY0IGZfZmlsZXM7Ci0JX191NjQgZl9mZnJlZTsKLQlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotCV9fdTMyIGZfbmFtZWxlbjsKLQlfX3UzMiBmX2Zyc2l6ZTsKLQlfX3UzMiBmX3NwYXJlWzVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLGFsaWduZWQoNCkpKTsKKyNkZWZpbmUgQVJDSF9QQUNLX1NUQVRGUzY0IF9fYXR0cmlidXRlX18oKHBhY2tlZCxhbGlnbmVkKDQpKSkKIAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZG1hLmMgYi9hcmNoL2FybS9rZXJuZWwvZG1hLmMKaW5kZXggYmE5OWEyMC4uZDAwNjA4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2RtYS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9kbWEuYwpAQCAtMjYsMjMgKzI2LDYgQEAKIHN0YXRpYyBkbWFfdCBkbWFfY2hhbltNQVhfRE1BX0NIQU5ORUxTXTsKIAogLyoKLSAqIEdldCBkbWEgbGlzdCBmb3IgL3Byb2MvZG1hCi0gKi8KLWludCBnZXRfZG1hX2xpc3QoY2hhciAqYnVmKQotewotCWRtYV90ICpkbWE7Ci0JY2hhciAqcCA9IGJ1ZjsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDAsIGRtYSA9IGRtYV9jaGFuOyBpIDwgTUFYX0RNQV9DSEFOTkVMUzsgaSsrLCBkbWErKykKLQkJaWYgKGRtYS0+bG9jaykKLQkJCXAgKz0gc3ByaW50ZihwLCAiJTJkOiAlMTRzICVzXG4iLCBpLAotCQkJCSAgICAgZG1hLT5kX29wcy0+dHlwZSwgZG1hLT5kZXZpY2VfaWQpOwotCi0JcmV0dXJuIHAgLSBidWY7Ci19Ci0KLS8qCiAgKiBSZXF1ZXN0IERNQSBjaGFubmVsCiAgKgogICogT24gY2VydGFpbiBwbGF0Zm9ybXMsIHdlIGhhdmUgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0IGFzIHdlbGwuLi4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jcHUuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jcHUuYwppbmRleCBlNGY3MmQyLi40NGQ0YzJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY3B1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NwdS5jCkBAIC0xODQsNyArMTg0LDYgQEAKIHsKIAogCS8qIHNldCBkZWZhdWx0IHBvbGljeSBhbmQgY3B1aW5mbyAqLwotCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CiAJcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gMTYwMDAwOwogCXBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSA9IDEyMDAwOwogCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwMDAwOyAvKiAxIG1zLCBhc3N1bWVkICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDJ4MDAuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jCmluZGV4IGIwNjUzYTguLjMwNDUxMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkudW5tYXNrCT0gaXhkcDJ4MDBfaXJxX3VubWFzawogfTsKIAotdm9pZCBfX2luaXQgaXhkcDJ4MDBfaW5pdF9pcnEodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqc3RhdF9yZWcsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKm1hc2tfcmVnLCB1bnNpZ25lZCBsb25nIG5yX2lycXMpCit2b2lkIF9faW5pdCBpeGRwMngwMF9pbml0X2lycSh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpzdGF0X3JlZywgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqbWFza19yZWcsIHVuc2lnbmVkIGxvbmcgbnJfb2ZfaXJxcykKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCkBAIC0xNTQsNyArMTU0LDcgQEAKIAogCWJvYXJkX2lycV9zdGF0ID0gc3RhdF9yZWc7CiAJYm9hcmRfaXJxX21hc2sgPSBtYXNrX3JlZzsKLQlib2FyZF9pcnFfY291bnQgPSBucl9pcnFzOworCWJvYXJkX2lycV9jb3VudCA9IG5yX29mX2lycXM7CiAKIAkqYm9hcmRfaXJxX21hc2sgPSAweGZmZmZmZmZmOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKaW5kZXggMmNlZDZkOS4uYWRmY2Q3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwpAQCAtNDc2LDYgKzQ3NiwxMCBAQAogCQlJMkNfQk9BUkRfSU5GTygidHBzNjUwMTMiLCAweDQ4KSwKICAgICAgICAgICAgICAgIC8qIC5pcnEgICAgICAgICA9IE9NQVBfR1BJT19JUlEoPz8pLCAqLwogICAgICAgIH0sCisJeworCQlJMkNfQk9BUkRfSU5GTygiaXNwMTMwMV9vbWFwIiwgMHgyZCksCisJCS5pcnEJCT0gT01BUF9HUElPX0lSUSgxNCksCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ncGlvX3N3aXRjaCBoM19ncGlvX3N3aXRjaGVzW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwppbmRleCA0NzhjMmM5Li41ZmJhMjA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwYXJlbnQgPSBjbGstPnBhcmVudDsKLQlpZiAodW5saWtlbHkocGFyZW50ID09IDApKQorCWlmICh1bmxpa2VseShwYXJlbnQgPT0gTlVMTCkpCiAJCXJldHVybiAtRUlPOwogCiAJcmVhbHJhdGUgPSBwYXJlbnQtPnJhdGU7CkBAIC00OTksNyArNDk5LDcgQEAKIAlpZiAoY2xrLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKQogCQlyZXR1cm4gMDsKIAotCWlmICh1bmxpa2VseShjbGstPmVuYWJsZV9yZWcgPT0gMCkpIHsKKwlpZiAodW5saWtlbHkoY2xrLT5lbmFibGVfcmVnID09IE5VTEwpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2xvY2suYzogRW5hYmxlIGZvciAlcyB3aXRob3V0IGVuYWJsZSBjb2RlXG4iLAogCQkgICAgICAgY2xrLT5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MzUsNyArNTM1LDcgQEAKIAlfX3UxNiByZWd2YWwxNjsKIAlfX3UzMiByZWd2YWwzMjsKIAotCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gMCkKKwlpZiAoY2xrLT5lbmFibGVfcmVnID09IE5VTEwpCiAJCXJldHVybjsKIAogCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgewpAQCAtNTc3LDcgKzU3Nyw3IEBACiAJCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKIAl9CiAKLQlpZihjbGstPnJvdW5kX3JhdGUgIT0gMCkKKwlpZiAoY2xrLT5yb3VuZF9yYXRlICE9IE5VTEwpCiAJCXJldHVybiBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKIAogCXJldHVybiBjbGstPnJhdGU7CkBAIC02MjUsNyArNjI1LDcgQEAKIAogCS8qIENsb2NrcyBpbiB0aGUgRFNQIGRvbWFpbiBuZWVkIGFwaV9jay4gSnVzdCBhc3N1bWUgYm9vdGxvYWRlcgogCSAqIGhhcyBub3QgZW5hYmxlZCBhbnkgRFNQIGNsb2NrcyAqLwotCWlmICgodTMyKWNsay0+ZW5hYmxlX3JlZyA9PSBEU1BfSURMRUNUMikgeworCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gRFNQX0lETEVDVDIpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiU2tpcHBpbmcgcmVzZXQgY2hlY2sgZm9yIERTUCBkb21haW4gIgogCQkgICAgICAgImNsb2NrIFwiJXNcIlxuIiwgY2xrLT5uYW1lKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCmluZGV4IDZlYWRmNzIuLjU2MzViNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmgKQEAgLTMyNCw3ICszMjQsNyBAQAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzEwIHwgQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CiAJCQkgIFJBVEVfQ0tDVEwgfCBWSVJUVUFMX0lPX0FERFJFU1MsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRFNQX0lETEVDVDIsCisJLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKIAkuZW5hYmxlX2JpdAk9IEVOX1BFUkNLLAogCS5yYXRlX29mZnNldAk9IENLQ1RMX1BFUkRJVl9PRkZTRVQsCiAJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4sCkBAIC0zMzgsNyArMzM4LDcgQEAKIAkucGFyZW50CQk9ICZja19yZWYsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKIAkJCSAgVklSVFVBTF9JT19BRERSRVNTLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKURTUF9JRExFQ1QyLAorCS5lbmFibGVfcmVnCT0gRFNQX0lETEVDVDIsCiAJLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIAkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4sCkBAIC0zNTAsNyArMzUwLDcgQEAKIAkucGFyZW50CQk9ICZja19yZWYsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKIAkJCSAgVklSVFVBTF9JT19BRERSRVNTLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKURTUF9JRExFQ1QyLAorCS5lbmFibGVfcmVnCT0gRFNQX0lETEVDVDIsCiAJLmVuYWJsZV9iaXQJPSBFTl9EU1BUSU1DSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKaW5kZXggOTk5ODJkMy4uZTM4MmI0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9TVEkpCiAKLSNkZWZpbmUgT01BUDFfU1RJX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZlYTAwMCkKKyNkZWZpbmUgT01BUDFfU1RJX0JBU0UJCTB4ZmZmZWEwMDAKICNkZWZpbmUgT01BUDFfU1RJX0NIQU5ORUxfQkFTRQkoT01BUDFfU1RJX0JBU0UgKyAweDQwMCkKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzdGlfcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMKaW5kZXggMmJhZWFlYi4uN2RlN2M2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYwpAQCAtMTAzLDMwICsxMDMsNiBAQAogeyB9CiAjZW5kaWYKIAotc3RhdGljIGludCBvbWFwMV9tY2JzcF9jaGVjayh1bnNpZ25lZCBpbnQgaWQpCi17Ci0JLyogUkVWSVNJVDogQ2hlY2sgY29ycmVjdGx5IGZvciBudW1iZXIgb2YgcmVnaXN0ZXJlZCBNY0JTUHMgKi8KLQlpZiAoY3B1X2lzX29tYXA3MzAoKSkgewotCQlpZiAoaWQgPiBPTUFQX01BWF9NQ0JTUF9DT1VOVCAtIDIpIHsKLQkJICAgICAgIHByaW50ayhLRVJOX0VSUiAiT01BUC1NY0JTUDogTWNCU1AlZCBkb2Vzbid0IGV4aXN0XG4iLAotCQkJCWlkICsgMSk7Ci0JCSAgICAgICByZXR1cm4gLUVOT0RFVjsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY3B1X2lzX29tYXAxNXh4KCkgfHwgY3B1X2lzX29tYXAxNnh4KCkpIHsKLQkJaWYgKGlkID4gT01BUF9NQVhfTUNCU1BfQ09VTlQgLSAxKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIk9NQVAtTWNCU1A6IE1jQlNQJWQgZG9lc24ndCBleGlzdFxuIiwKLQkJCQlpZCArIDEpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KIHN0YXRpYyB2b2lkIG9tYXAxX21jYnNwX3JlcXVlc3QodW5zaWduZWQgaW50IGlkKQogewogCS8qCkBAIC0xNTEsNyArMTI3LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX29wcyBvbWFwMV9tY2JzcF9vcHMgPSB7Ci0JLmNoZWNrCQk9IG9tYXAxX21jYnNwX2NoZWNrLAogCS5yZXF1ZXN0CT0gb21hcDFfbWNic3BfcmVxdWVzdCwKIAkuZnJlZQkJPSBvbWFwMV9tY2JzcF9mcmVlLAogfTsKQEAgLTE2MCw3ICsxMzUsNiBAQAogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDczMF9tY2JzcF9wZGF0YVtdID0gewogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVA3MzBfTUNCU1AxX0JBU0UsCi0JCS52aXJ0X2Jhc2UJPSBpb19wMnYoT01BUDczMF9NQ0JTUDFfQkFTRSksCiAJCS5kbWFfcnhfc3luYwk9IE9NQVBfRE1BX01DQlNQMV9SWCwKIAkJLmRtYV90eF9zeW5jCT0gT01BUF9ETUFfTUNCU1AxX1RYLAogCQkucnhfaXJxCQk9IElOVF83MzBfTWNCU1AxUlgsCkBAIC0xNjksNyArMTQzLDYgQEAKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVA3MzBfTUNCU1AyX0JBU0UsCi0JCS52aXJ0X2Jhc2UJPSBpb19wMnYoT01BUDczMF9NQ0JTUDJfQkFTRSksCiAJCS5kbWFfcnhfc3luYwk9IE9NQVBfRE1BX01DQlNQM19SWCwKIAkJLmRtYV90eF9zeW5jCT0gT01BUF9ETUFfTUNCU1AzX1RYLAogCQkucnhfaXJxCQk9IElOVF83MzBfTWNCU1AyUlgsCkBAIC0xODcsNyArMTYwLDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhIG9tYXAxNXh4X21jYnNwX3BkYXRhW10gPSB7CiAJewogCQkucGh5c19iYXNlCT0gT01BUDE1MTBfTUNCU1AxX0JBU0UsCi0JCS52aXJ0X2Jhc2UJPSBPTUFQMTUxMF9NQ0JTUDFfQkFTRSwKIAkJLmRtYV9yeF9zeW5jCT0gT01BUF9ETUFfTUNCU1AxX1JYLAogCQkuZG1hX3R4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDFfVFgsCiAJCS5yeF9pcnEJCT0gSU5UX01jQlNQMVJYLApAQCAtMTk3LDcgKzE2OSw2IEBACiAJCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDE1MTBfTUNCU1AyX0JBU0UsCi0JCS52aXJ0X2Jhc2UJPSBpb19wMnYoT01BUDE1MTBfTUNCU1AyX0JBU0UpLAogCQkuZG1hX3J4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDJfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVBfRE1BX01DQlNQMl9UWCwKIAkJLnJ4X2lycQkJPSBJTlRfMTUxMF9TUElfUlgsCkBAIC0yMDYsNyArMTc3LDYgQEAKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAxNTEwX01DQlNQM19CQVNFLAotCQkudmlydF9iYXNlCT0gT01BUDE1MTBfTUNCU1AzX0JBU0UsCiAJCS5kbWFfcnhfc3luYwk9IE9NQVBfRE1BX01DQlNQM19SWCwKIAkJLmRtYV90eF9zeW5jCT0gT01BUF9ETUFfTUNCU1AzX1RYLAogCQkucnhfaXJxCQk9IElOVF9NY0JTUDNSWCwKQEAgLTIyNSw3ICsxOTUsNiBAQAogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDE2eHhfbWNic3BfcGRhdGFbXSA9IHsKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMTYxMF9NQ0JTUDFfQkFTRSwKLQkJLnZpcnRfYmFzZQk9IE9NQVAxNjEwX01DQlNQMV9CQVNFLAogCQkuZG1hX3J4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDFfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVBfRE1BX01DQlNQMV9UWCwKIAkJLnJ4X2lycQkJPSBJTlRfTWNCU1AxUlgsCkBAIC0yMzUsNyArMjA0LDYgQEAKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAxNjEwX01DQlNQMl9CQVNFLAotCQkudmlydF9iYXNlCT0gaW9fcDJ2KE9NQVAxNjEwX01DQlNQMl9CQVNFKSwKIAkJLmRtYV9yeF9zeW5jCT0gT01BUF9ETUFfTUNCU1AyX1JYLAogCQkuZG1hX3R4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDJfVFgsCiAJCS5yeF9pcnEJCT0gSU5UXzE2MTBfTWNCU1AyX1JYLApAQCAtMjQ0LDcgKzIxMiw2IEBACiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMTYxMF9NQ0JTUDNfQkFTRSwKLQkJLnZpcnRfYmFzZQk9IE9NQVAxNjEwX01DQlNQM19CQVNFLAogCQkuZG1hX3J4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDNfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVBfRE1BX01DQlNQM19UWCwKIAkJLnJ4X2lycQkJPSBJTlRfTWNCU1AzUlgsCkBAIC0yNzEsNiArMjM4LDE4IEBACiAJfQogCiAJaWYgKGNwdV9pc19vbWFwNzMwKCkpCisJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQNzMwX01DQlNQX1BEQVRBX1NaOworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkKKwkJb21hcF9tY2JzcF9jb3VudCA9IE9NQVAxNVhYX01DQlNQX1BEQVRBX1NaOworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJb21hcF9tY2JzcF9jb3VudCA9IE9NQVAxNlhYX01DQlNQX1BEQVRBX1NaOworCisJbWNic3BfcHRyID0ga3phbGxvYyhvbWFwX21jYnNwX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBvbWFwX21jYnNwICopLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIW1jYnNwX3B0cikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkKIAkJb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcob21hcDczMF9tY2JzcF9wZGF0YSwKIAkJCQkJCU9NQVA3MzBfTUNCU1BfUERBVEFfU1opOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwppbmRleCBhZWZjOTY3Li41Mjg2OTFkNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwpAQCAtNjcsOCArNjcsOCBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJewotCQkubWVtYmFzZQk9IChjaGFyKilJT19BRERSRVNTKE9NQVBfVUFSVDFfQkFTRSksCi0JCS5tYXBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpT01BUF9VQVJUMV9CQVNFLAorCQkubWVtYmFzZQk9IElPX0FERFJFU1MoT01BUF9VQVJUMV9CQVNFKSwKKwkJLm1hcGJhc2UJPSBPTUFQX1VBUlQxX0JBU0UsCiAJCS5pcnEJCT0gSU5UX1VBUlQxLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS5pb3R5cGUJCT0gVVBJT19NRU0sCkBAIC03Niw4ICs3Niw4IEBACiAJCS51YXJ0Y2xrCT0gT01BUDE2WFhfQkFTRV9CQVVEICogMTYsCiAJfSwKIAl7Ci0JCS5tZW1iYXNlCT0gKGNoYXIqKUlPX0FERFJFU1MoT01BUF9VQVJUMl9CQVNFKSwKLQkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQyX0JBU0UsCisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQyX0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDJfQkFTRSwKIAkJLmlycQkJPSBJTlRfVUFSVDIsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLmlvdHlwZQkJPSBVUElPX01FTSwKQEAgLTg1LDggKzg1LDggQEAKIAkJLnVhcnRjbGsJPSBPTUFQMTZYWF9CQVNFX0JBVUQgKiAxNiwKIAl9LAogCXsKLQkJLm1lbWJhc2UJPSAoY2hhciopSU9fQUREUkVTUyhPTUFQX1VBUlQzX0JBU0UpLAotCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKU9NQVBfVUFSVDNfQkFTRSwKKwkJLm1lbWJhc2UJPSBJT19BRERSRVNTKE9NQVBfVUFSVDNfQkFTRSksCisJCS5tYXBiYXNlCT0gT01BUF9VQVJUM19CQVNFLAogCQkuaXJxCQk9IElOVF9VQVJUMywKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCmluZGV4IDcwNjljOWQuLjQ4MzJmY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTE1LDggKzE1LDE3IEBACiAJYm9vbCAiT01BUDI0MzAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDI0WFgKIAorY29uZmlnIEFSQ0hfT01BUDM0WFgKKwlib29sICJPTUFQMzR4eCBCYXNlZCBTeXN0ZW0iCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzCisKK2NvbmZpZyBBUkNIX09NQVAzNDMwCisJYm9vbCAiT01BUDM0MzAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCXNlbGVjdCBBUkNIX09NQVBfT1RHCisKIGNvbW1lbnQgIk9NQVAgQm9hcmQgVHlwZSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIgfHwgQVJDSF9PTUFQMwogCiBjb25maWcgTUFDSF9PTUFQX0dFTkVSSUMKIAlib29sICJHZW5lcmljIE9NQVAgYm9hcmQiCkBAIC0zNSwzICs0NCwxNCBAQAogCWJvb2wgIk9NQVAgMjQzMCBTRFAgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKIAorY29uZmlnIE1BQ0hfT01BUDNfQkVBR0xFCisJYm9vbCAiT01BUDMgQkVBR0xFIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisKK2NvbmZpZyBNQUNIX09NQVBfTERQCisJYm9vbCAiT01BUDMgTERQIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisKK2NvbmZpZyBNQUNIX09WRVJPCisJYm9vbCAiR3Vtc3RpeCBPdmVybyBib2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKaW5kZXggOTNlZTk5MC4uYzY5MzkyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCkBAIC00LDE2ICs0LDIxIEBACiAKICMgQ29tbW9uIHN1cHBvcnQKIG9iai15IDo9IGlycS5vIGlkLm8gaW8ubyBtZW1vcnkubyBjb250cm9sLm8gcHJjbS5vIGNsb2NrLm8gbXV4Lm8gXAotCQlkZXZpY2VzLm8gc2VyaWFsLm8gZ3BtYy5vIHRpbWVyLWdwLm8KKwkJZGV2aWNlcy5vIHNlcmlhbC5vIGdwbWMubyB0aW1lci1ncC5vIHBvd2VyZG9tYWluLm8gXAorCQljbG9ja2RvbWFpbi5vCiAKIG9iai0kKENPTkZJR19PTUFQX01DQlNQKSArPSBtY2JzcC5vCiAKICMgRnVuY3Rpb25zIGxvYWRlZCB0byBTUkFNCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMjQyMCkJCSs9IHNyYW0yNDJ4Lm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAyNDMwKQkJKz0gc3JhbTI0M3gubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBzcmFtMzR4eC5vCiAKICMgUG93ZXIgTWFuYWdlbWVudAotb2JqLSQoQ09ORklHX1BNKSArPSBwbS5vIHNsZWVwLm8KK2lmZXEgKCQoQ09ORklHX1BNKSx5KQorb2JqLXkJCQkJCSs9IHBtLm8KK29iai0kKENPTkZJR19BUkNIX09NQVAyNFhYKQkJKz0gc2xlZXAyNHh4Lm8KK2VuZGlmCiAKICMgQ2xvY2sgZnJhbWV3b3JrCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IGNsb2NrMjR4eC5vCkBAIC0yNCw0ICsyOSw3IEBACiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0g0KQkJKz0gYm9hcmQtaDQubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF8yNDMwU0RQKQkJKz0gYm9hcmQtMjQzMHNkcC5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0FQT0xMT04pCQkrPSBib2FyZC1hcG9sbG9uLm8KK29iai0kKENPTkZJR19NQUNIX09NQVAzX0JFQUdMRSkJCSs9IGJvYXJkLW9tYXAzYmVhZ2xlLm8KK29iai0kKENPTkZJR19NQUNIX09NQVBfTERQKQkJKz0gYm9hcmQtbGRwLm8KK29iai0kKENPTkZJR19NQUNIX09WRVJPKQkJKz0gYm9hcmQtb3Zlcm8ubwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKaW5kZXggZDRlM2I2Zi4uMmZlZjJjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgpAQCAtMzkxLDYgKzM5MiwxMyBAQAogCXsgT01BUF9UQUdfTENELAkJJmg0X2xjZF9jb25maWcgfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBoNF9pMmNfYm9hcmRfaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImlzcDEzMDFfb21hcCIsIDB4MmQpLAorCQkuaXJxCQk9IE9NQVBfR1BJT19JUlEoMTI1KSwKKwl9LAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaDRfaW5pdCh2b2lkKQogewogCS8qCkBAIC00MTEsNiArNDE5LDkgQEAKIAl9CiAjZW5kaWYKIAorCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGg0X2kyY19ib2FyZF9pbmZvLAorCQkJQVJSQVlfU0laRShoNF9pMmNfYm9hcmRfaW5mbykpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoaDRfZGV2aWNlcywgQVJSQVlfU0laRShoNF9kZXZpY2VzKSk7CiAJb21hcF9ib2FyZF9jb25maWcgPSBoNF9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaDRfY29uZmlnKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYTU5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqIE5pc2hhbnQgS2FtYXQgPG5za2FtYXRAdGkuY29tPgorICoKKyAqIE1vZGlmaWVkIGZyb20gbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC1sZHAuaD4KKyNpbmNsdWRlIDxtYWNoL21jc3BpLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbGRwX2luaXRfaXJxKHZvaWQpCit7CisJb21hcDJfaW5pdF9jb21tb25faHcoKTsKKwlvbWFwX2luaXRfaXJxKCk7CisJb21hcF9ncGlvX2luaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIGxkcF91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzCT0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBsZHBfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwl7IE9NQVBfVEFHX1VBUlQsCSZsZHBfdWFydF9jb25maWcgfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfaTJjX2luaXQodm9pZCkKK3sKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMjYwMCwgTlVMTCwgMCk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDQwMCwgTlVMTCwgMCk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2xkcF9pbml0KHZvaWQpCit7CisJb21hcF9pMmNfaW5pdCgpOworCW9tYXBfYm9hcmRfY29uZmlnID0gbGRwX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShsZHBfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2xkcF9tYXBfaW8odm9pZCkKK3sKKwlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7CisJb21hcDJfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE9NQVBfTERQLCAiT01BUCBMRFAgYm9hcmQiKQorCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gb21hcF9sZHBfbWFwX2lvLAorCS5pbml0X2lycQk9IG9tYXBfbGRwX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBvbWFwX2xkcF9pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhNzk2NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIE1vZGlmaWVkIGZyb20gbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKyAqCisgKiBJbml0aWFsIGNvZGU6IFN5ZWQgTW9oYW1tZWQgS2hhc2ltCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KKyNpbmNsdWRlIDxtYWNoL25hbmQuaD4KKworCisjZGVmaW5lIEdQTUNfQ1MwX0JBU0UgIDB4NjAKKyNkZWZpbmUgR1BNQ19DU19TSVpFICAgMHgzMAorCisjZGVmaW5lIE5BTkRfQkxPQ0tfU0laRQkJU1pfMTI4SworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb21hcDNiZWFnbGVfbmFuZF9wYXJ0aXRpb25zW10gPSB7CisJLyogQWxsIHRoZSBwYXJ0aXRpb24gc2l6ZXMgYXJlIGxpc3RlZCBpbiB0ZXJtcyBvZiBOQU5EIGJsb2NrIHNpemUgKi8KKwl7CisJCS5uYW1lCQk9ICJYLUxvYWRlciIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gNCAqIE5BTkRfQkxPQ0tfU0laRSwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gIlUtQm9vdCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDgwMDAwICovCisJCS5zaXplCQk9IDE1ICogTkFORF9CTE9DS19TSVpFLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiVS1Cb290IEVudiIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDI2MDAwMCAqLworCQkuc2l6ZQkJPSAxICogTkFORF9CTE9DS19TSVpFLAorCX0sCisJeworCQkubmFtZQkJPSAiS2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MjgwMDAwICovCisJCS5zaXplCQk9IDMyICogTkFORF9CTE9DS19TSVpFLAorCX0sCisJeworCQkubmFtZQkJPSAiRmlsZSBTeXN0ZW0iLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHg2ODAwMDAgKi8KKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSBvbWFwM2JlYWdsZV9uYW5kX2RhdGEgPSB7CisJLm9wdGlvbnMJPSBOQU5EX0JVU1dJRFRIXzE2LAorCS5wYXJ0cwkJPSBvbWFwM2JlYWdsZV9uYW5kX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShvbWFwM2JlYWdsZV9uYW5kX3BhcnRpdGlvbnMpLAorCS5kbWFfY2hhbm5lbAk9IC0xLAkJLyogZGlzYWJsZSBETUEgaW4gT01BUCBOQU5EIGRyaXZlciAqLworCS5uYW5kX3NldHVwCT0gTlVMTCwKKwkuZGV2X3JlYWR5CT0gTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDNiZWFnbGVfbmFuZF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwM2JlYWdsZV9uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcDItbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZvbWFwM2JlYWdsZV9uYW5kX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJm9tYXAzYmVhZ2xlX25hbmRfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgb21hcDNfYmVhZ2xlX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMJPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19iZWFnbGVfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwMl9pbml0X2NvbW1vbl9odygpOworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwM19iZWFnbGVfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcDNiZWFnbGVfbGNkIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBvbWFwM19iZWFnbGVfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBncGlvX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAiYmVhZ2xlYm9hcmQ6OnVzcjAiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJCS5ncGlvCQkJPSAxNTAsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiYmVhZ2xlYm9hcmQ6OnVzcjEiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm1tYzAiLAorCQkuZ3BpbwkJCT0gMTQ5LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZ3Bpb19sZWRfaW5mbyA9IHsKKwkubGVkcwkJPSBncGlvX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShncGlvX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19ncGlvID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZ3Bpb19sZWRfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGdwaW9fYnV0dG9uc1tdID0geworCXsKKwkJLmNvZGUJCQk9IEJUTl9FWFRSQSwKKwkJLmdwaW8JCQk9IDcsCisJCS5kZXNjCQkJPSAidXNlciIsCisJCS53YWtldXAJCQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZ3Bpb19rZXlfaW5mbyA9IHsKKwkuYnV0dG9ucwk9IGdwaW9fYnV0dG9ucywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGdwaW9fYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBrZXlzX2dwaW8gPSB7CisJLm5hbWUJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZncGlvX2tleV9pbmZvLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBvbWFwM19iZWFnbGVfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwl7IE9NQVBfVEFHX1VBUlQsCSZvbWFwM19iZWFnbGVfdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCSZvbWFwM19iZWFnbGVfbGNkX2NvbmZpZyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9tYXAzX2JlYWdsZV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmb21hcDNfYmVhZ2xlX2xjZF9kZXZpY2UsCisJJmxlZHNfZ3BpbywKKwkma2V5c19ncGlvLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAzYmVhZ2xlX2ZsYXNoX2luaXQodm9pZCkKK3sKKwl1OCBjcyA9IDA7CisJdTggbmFuZGNzID0gR1BNQ19DU19OVU0gKyAxOworCisJdTMyIGdwbWNfYmFzZV9hZGQgPSBPTUFQMzRYWF9HUE1DX1ZJUlQ7CisKKwkvKiBmaW5kIG91dCB0aGUgY2hpcC1zZWxlY3Qgb24gd2hpY2ggTkFORCBleGlzdHMgKi8KKwl3aGlsZSAoY3MgPCBHUE1DX0NTX05VTSkgeworCQl1MzIgcmV0ID0gMDsKKwkJcmV0ID0gZ3BtY19jc19yZWFkX3JlZyhjcywgR1BNQ19DU19DT05GSUcxKTsKKworCQlpZiAoKHJldCAmIDB4QzAwKSA9PSAweDgwMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgTkFORCBvbiBDUyVkXG4iLCBjcyk7CisJCQlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pCisJCQkJbmFuZGNzID0gY3M7CisJCX0KKwkJY3MrKzsKKwl9CisKKwlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTkFORDogVW5hYmxlIHRvIGZpbmQgY29uZmlndXJhdGlvbiAiCisJCQkJICJpbiBHUE1DXG4gIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAobmFuZGNzIDwgR1BNQ19DU19OVU0pIHsKKwkJb21hcDNiZWFnbGVfbmFuZF9kYXRhLmNzID0gbmFuZGNzOworCQlvbWFwM2JlYWdsZV9uYW5kX2RhdGEuZ3BtY19jc19iYXNlYWRkciA9ICh2b2lkICopCisJCQkoZ3BtY19iYXNlX2FkZCArIEdQTUNfQ1MwX0JBU0UgKyBuYW5kY3MgKiBHUE1DX0NTX1NJWkUpOworCQlvbWFwM2JlYWdsZV9uYW5kX2RhdGEuZ3BtY19iYXNlYWRkciA9ICh2b2lkICopIChncG1jX2Jhc2VfYWRkKTsKKworCQlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmluZyBOQU5EIG9uIENTJWRcbiIsIG5hbmRjcyk7CisJCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAzYmVhZ2xlX25hbmRfZGV2aWNlKSA8IDApCisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBOQU5EIGRldmljZVxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfYmVhZ2xlX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhvbWFwM19iZWFnbGVfZGV2aWNlcywKKwkJCUFSUkFZX1NJWkUob21hcDNfYmVhZ2xlX2RldmljZXMpKTsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IG9tYXAzX2JlYWdsZV9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUob21hcDNfYmVhZ2xlX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOworCW9tYXAzYmVhZ2xlX2ZsYXNoX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2JlYWdsZV9tYXBfaW8odm9pZCkKK3sKKwlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7CisJb21hcDJfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE9NQVAzX0JFQUdMRSwgIk9NQVAzIEJlYWdsZSBCb2FyZCIpCisJLyogTWFpbnRhaW5lcjogU3llZCBNb2hhbW1lZCBLaGFzaW0gLSBodHRwOi8vYmVhZ2xlYm9hcmQub3JnICovCisJLnBoeXNfaW8JPSAweDQ4MDAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhkODAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCisJLm1hcF9pbwkJPSBvbWFwM19iZWFnbGVfbWFwX2lvLAorCS5pbml0X2lycQk9IG9tYXAzX2JlYWdsZV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gb21hcDNfYmVhZ2xlX2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDlhYTU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogYm9hcmQtb3Zlcm8uYyAoR3Vtc3RpeCBPdmVybykKKyAqCisgKiBJbml0aWFsIGNvZGU6IFN0ZXZlIFNha29tYW4gPHN0ZXZlQHNha29tYW4uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvYm9hcmQtb3Zlcm8uaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9uYW5kLmg+CisKKyNkZWZpbmUgTkFORF9CTE9DS19TSVpFIFNaXzEyOEsKKyNkZWZpbmUgR1BNQ19DUzBfQkFTRSAgMHg2MAorI2RlZmluZSBHUE1DX0NTX1NJWkUgICAweDMwCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBvdmVyb19uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJ4bG9hZGVyIiwKKwkJLm9mZnNldCAgICAgICAgID0gMCwJCQkvKiBPZmZzZXQgPSAweDAwMDAwICovCisJCS5zaXplICAgICAgICAgICA9IDQgKiBOQU5EX0JMT0NLX1NJWkUsCisJCS5tYXNrX2ZsYWdzICAgICA9IE1URF9XUklURUFCTEUKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgICAgID0gInVib290IiwKKwkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDgwMDAwICovCisJCS5zaXplICAgICAgICAgICA9IDE0ICogTkFORF9CTE9DS19TSVpFLAorCX0sCisJeworCQkubmFtZSAgICAgICAgICAgPSAidWJvb3QgZW52aXJvbm1lbnQiLAorCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MjQwMDAwICovCisJCS5zaXplICAgICAgICAgICA9IDIgKiBOQU5EX0JMT0NLX1NJWkUsCisJfSwKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJsaW51eCIsCisJCS5vZmZzZXQgICAgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgyODAwMDAgKi8KKwkJLnNpemUgICAgICAgICAgID0gMzIgKiBOQU5EX0JMT0NLX1NJWkUsCisJfSwKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJyb290ZnMiLAorCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4NjgwMDAwICovCisJCS5zaXplICAgICAgICAgICA9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgb3Zlcm9fbmFuZF9kYXRhID0geworCS5wYXJ0cyA9IG92ZXJvX25hbmRfcGFydGl0aW9ucywKKwkubnJfcGFydHMgPSBBUlJBWV9TSVpFKG92ZXJvX25hbmRfcGFydGl0aW9ucyksCisJLmRtYV9jaGFubmVsID0gLTEsCS8qIGRpc2FibGUgRE1BIGluIE9NQVAgTkFORCBkcml2ZXIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3Zlcm9fbmFuZF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvdmVyb19uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcDItbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZvdmVyb19uYW5kX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJm92ZXJvX25hbmRfcmVzb3VyY2UsCit9OworCisKK3N0YXRpYyB2b2lkIF9faW5pdCBvdmVyb19mbGFzaF9pbml0KHZvaWQpCit7CisJdTggY3MgPSAwOworCXU4IG5hbmRjcyA9IEdQTUNfQ1NfTlVNICsgMTsKKworCXUzMiBncG1jX2Jhc2VfYWRkID0gT01BUDM0WFhfR1BNQ19WSVJUOworCisJLyogZmluZCBvdXQgdGhlIGNoaXAtc2VsZWN0IG9uIHdoaWNoIE5BTkQgZXhpc3RzICovCisJd2hpbGUgKGNzIDwgR1BNQ19DU19OVU0pIHsKKwkJdTMyIHJldCA9IDA7CisJCXJldCA9IGdwbWNfY3NfcmVhZF9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHMSk7CisKKwkJaWYgKChyZXQgJiAweEMwMCkgPT0gMHg4MDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIE5BTkQgb24gQ1MlZFxuIiwgY3MpOworCQkJaWYgKG5hbmRjcyA+IEdQTUNfQ1NfTlVNKQorCQkJCW5hbmRjcyA9IGNzOworCQl9CisJCWNzKys7CisJfQorCisJaWYgKG5hbmRjcyA+IEdQTUNfQ1NfTlVNKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk5BTkQ6IFVuYWJsZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gIgorCQkJCSAiaW4gR1BNQ1xuICIpOworCQlyZXR1cm47CisJfQorCisJaWYgKG5hbmRjcyA8IEdQTUNfQ1NfTlVNKSB7CisJCW92ZXJvX25hbmRfZGF0YS5jcyA9IG5hbmRjczsKKwkJb3Zlcm9fbmFuZF9kYXRhLmdwbWNfY3NfYmFzZWFkZHIgPSAodm9pZCAqKQorCQkJKGdwbWNfYmFzZV9hZGQgKyBHUE1DX0NTMF9CQVNFICsgbmFuZGNzICogR1BNQ19DU19TSVpFKTsKKwkJb3Zlcm9fbmFuZF9kYXRhLmdwbWNfYmFzZWFkZHIgPSAodm9pZCAqKSAoZ3BtY19iYXNlX2FkZCk7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUmVnaXN0ZXJpbmcgTkFORCBvbiBDUyVkXG4iLCBuYW5kY3MpOworCQlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvdmVyb19uYW5kX2RldmljZSkgPCAwKQorCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgTkFORCBkZXZpY2VcbiIpOworCX0KK30KK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBvdmVyb191YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzCT0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvdmVyb19pMmNfaW5pdCh2b2lkKQoreworCS8qIGkyYzIgcGlucyBhcmUgdXNlZCBmb3IgZ3BpbyAqLworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCA0MDAsIE5VTEwsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb3Zlcm9faW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwMl9pbml0X2NvbW1vbl9odygpOworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvdmVyb19sY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJvdmVyb19sY2QiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIG92ZXJvX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG92ZXJvX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJeyBPTUFQX1RBR19VQVJULAkmb3Zlcm9fdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCSZvdmVyb19sY2RfY29uZmlnIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3Zlcm9fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm92ZXJvX2xjZF9kZXZpY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb3Zlcm9faW5pdCh2b2lkKQoreworCW92ZXJvX2kyY19pbml0KCk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMob3Zlcm9fZGV2aWNlcywgQVJSQVlfU0laRShvdmVyb19kZXZpY2VzKSk7CisJb21hcF9ib2FyZF9jb25maWcgPSBvdmVyb19jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUob3Zlcm9fY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CisJb3Zlcm9fZmxhc2hfaW5pdCgpOworCisJaWYgKChncGlvX3JlcXVlc3QoT1ZFUk9fR1BJT19XMldfTlJFU0VULAorCQkJICAiT1ZFUk9fR1BJT19XMldfTlJFU0VUIikgPT0gMCkgJiYKKwkgICAgKGdwaW9fZGlyZWN0aW9uX291dHB1dChPVkVST19HUElPX1cyV19OUkVTRVQsIDEpID09IDApKSB7CisJCWdwaW9fZXhwb3J0KE9WRVJPX0dQSU9fVzJXX05SRVNFVCwgMCk7CisJCWdwaW9fc2V0X3ZhbHVlKE9WRVJPX0dQSU9fVzJXX05SRVNFVCwgMCk7CisJCXVkZWxheSgxMCk7CisJCWdwaW9fc2V0X3ZhbHVlKE9WRVJPX0dQSU9fVzJXX05SRVNFVCwgMSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yICIKKwkJCQkJIk9WRVJPX0dQSU9fVzJXX05SRVNFVFxuIik7CisJfQorCisJaWYgKChncGlvX3JlcXVlc3QoT1ZFUk9fR1BJT19CVF9YR0FURSwgIk9WRVJPX0dQSU9fQlRfWEdBVEUiKSA9PSAwKSAmJgorCSAgICAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9WRVJPX0dQSU9fQlRfWEdBVEUsIDApID09IDApKQorCQlncGlvX2V4cG9ydChPVkVST19HUElPX0JUX1hHQVRFLCAwKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiY291bGQgbm90IG9idGFpbiBncGlvIGZvciBPVkVST19HUElPX0JUX1hHQVRFXG4iKTsKKworCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX0dQSU9fQlRfTlJFU0VULCAiT1ZFUk9fR1BJT19CVF9OUkVTRVQiKSA9PSAwKSAmJgorCSAgICAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9WRVJPX0dQSU9fQlRfTlJFU0VULCAxKSA9PSAwKSkgeworCQlncGlvX2V4cG9ydChPVkVST19HUElPX0JUX05SRVNFVCwgMCk7CisJCWdwaW9fc2V0X3ZhbHVlKE9WRVJPX0dQSU9fQlRfTlJFU0VULCAwKTsKKwkJbWRlbGF5KDYpOworCQlncGlvX3NldF92YWx1ZShPVkVST19HUElPX0JUX05SRVNFVCwgMSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yICIKKwkJCQkJIk9WRVJPX0dQSU9fQlRfTlJFU0VUXG4iKTsKKwl9CisKKwlpZiAoKGdwaW9fcmVxdWVzdChPVkVST19HUElPX1VTQkhfQ1BFTiwgIk9WRVJPX0dQSU9fVVNCSF9DUEVOIikgPT0gMCkgJiYKKwkgICAgKGdwaW9fZGlyZWN0aW9uX291dHB1dChPVkVST19HUElPX1VTQkhfQ1BFTiwgMSkgPT0gMCkpCisJCWdwaW9fZXhwb3J0KE9WRVJPX0dQSU9fVVNCSF9DUEVOLCAwKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiY291bGQgbm90IG9idGFpbiBncGlvIGZvciAiCisJCQkJCSJPVkVST19HUElPX1VTQkhfQ1BFTlxuIik7CisKKwlpZiAoKGdwaW9fcmVxdWVzdChPVkVST19HUElPX1VTQkhfTlJFU0VULAorCQkJICAiT1ZFUk9fR1BJT19VU0JIX05SRVNFVCIpID09IDApICYmCisJICAgIChncGlvX2RpcmVjdGlvbl9vdXRwdXQoT1ZFUk9fR1BJT19VU0JIX05SRVNFVCwgMSkgPT0gMCkpCisJCWdwaW9fZXhwb3J0KE9WRVJPX0dQSU9fVVNCSF9OUkVTRVQsIDApOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yICIKKwkJCQkJIk9WRVJPX0dQSU9fVVNCSF9OUkVTRVRcbiIpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb3Zlcm9fbWFwX2lvKHZvaWQpCit7CisJb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOworCW9tYXAyX21hcF9jb21tb25faW8oKTsKK30KKworTUFDSElORV9TVEFSVChPVkVSTywgIkd1bXN0aXggT3Zlcm8iKQorCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gb3Zlcm9fbWFwX2lvLAorCS5pbml0X2lycQk9IG92ZXJvX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBvdmVyb19pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKaW5kZXggOTdjZGUzZDMuLmFkNzIxZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2Nsb2NrZG9tYWluLmg+CiAjaW5jbHVkZSA8bWFjaC9zcmFtLmg+CiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTYxLDEwICs2MiwzNiBAQAogdTggY3B1X21hc2s7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogT21hcDIgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCisgKiBPTUFQMi8zIHNwZWNpZmljIGNsb2NrIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoqCisgKiBvbWFwMl9pbml0X2Nsa19jbGtkbSAtIGxvb2sgdXAgYSBjbG9ja2RvbWFpbiBuYW1lLCBzdG9yZSBwb2ludGVyIGluIGNsaworICogQGNsazogT01BUCBjbG9jayBzdHJ1Y3QgcHRyIHRvIHVzZQorICoKKyAqIENvbnZlcnQgYSBjbG9ja2RvbWFpbiBuYW1lIHN0b3JlZCBpbiBhIHN0cnVjdCBjbGsgJ2NsaycgaW50byBhCisgKiBjbG9ja2RvbWFpbiBwb2ludGVyLCBhbmQgc2F2ZSBpdCBpbnRvIHRoZSBzdHJ1Y3QgY2xrLiAgSW50ZW5kZWQgdG8gYmUKKyAqIGNhbGxlZCBkdXJpbmcgY2xrX3JlZ2lzdGVyKCkuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3ZvaWQgb21hcDJfaW5pdF9jbGtfY2xrZG0oc3RydWN0IGNsayAqY2xrKQoreworCXN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG07CisKKwlpZiAoIWNsay0+Y2xrZG1fbmFtZSkKKwkJcmV0dXJuOworCisJY2xrZG0gPSBjbGtkbV9sb29rdXAoY2xrLT5jbGtkbV9uYW1lKTsKKwlpZiAoY2xrZG0pIHsKKwkJcHJfZGVidWcoImNsb2NrOiBhc3NvY2lhdGVkIGNsayAlcyB0byBjbGtkbSAlc1xuIiwKKwkJCSBjbGstPm5hbWUsIGNsay0+Y2xrZG1fbmFtZSk7CisJCWNsay0+Y2xrZG0gPSBjbGtkbTsKKwl9IGVsc2UgeworCQlwcl9kZWJ1ZygiY2xvY2s6IGNvdWxkIG5vdCBhc3NvY2lhdGUgY2xrICVzIHRvICIKKwkJCSAiY2xrZG0gJXNcbiIsIGNsay0+bmFtZSwgY2xrLT5jbGtkbV9uYW1lKTsKKwl9Cit9CisKKy8qKgogICogb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50IC0gc2V0IGEgY2xrc2VsIGNsaydzIHBhcmVudCBmaWVsZCBmcm9tIHRoZSBoYXJkd2FyZQogICogQGNsazogT01BUCBjbG9jayBzdHJ1Y3QgcHRyIHRvIHVzZQogICoKQEAgLTI1MCw3ICsyNzcsNyBAQAogCWlmIChjbGstPmVuYWJsZSkKIAkJcmV0dXJuIGNsay0+ZW5hYmxlKGNsayk7CiAKLQlpZiAodW5saWtlbHkoY2xrLT5lbmFibGVfcmVnID09IDApKSB7CisJaWYgKHVubGlrZWx5KGNsay0+ZW5hYmxlX3JlZyA9PSBOVUxMKSkgewogCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKIAkJICAgICAgIGNsay0+bmFtZSk7CiAJCXJldHVybiAwOyAvKiBSRVZJU0lUOiAtRUlOVkFMICovCkBAIC0yODIsNyArMzA5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gMCkgeworCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gTlVMTCkgewogCQkvKgogCQkgKiAnSW5kZXBlbmRlbnQnIGhlcmUgcmVmZXJzIHRvIGEgY2xvY2sgd2hpY2ggaXMgbm90CiAJCSAqIGNvbnRyb2xsZWQgYnkgaXRzIHBhcmVudC4KQEAgLTMwNyw2ICszMzQsOSBAQAogCQlfb21hcDJfY2xrX2Rpc2FibGUoY2xrKTsKIAkJaWYgKGxpa2VseSgodTMyKWNsay0+cGFyZW50KSkKIAkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKKwkJaWYgKGNsay0+Y2xrZG0pCisJCQlvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShjbGstPmNsa2RtLCBjbGspOworCiAJfQogfQogCkBAIC0zMjMsMTEgKzM1MywxOSBAQAogCQkJcmV0dXJuIHJldDsKIAkJfQogCisJCWlmIChjbGstPmNsa2RtKQorCQkJb21hcDJfY2xrZG1fY2xrX2VuYWJsZShjbGstPmNsa2RtLCBjbGspOworCiAJCXJldCA9IF9vbWFwMl9jbGtfZW5hYmxlKGNsayk7CiAKLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSAmJiBjbGstPnBhcmVudCkgewotCQkJb21hcDJfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOwotCQkJY2xrLT51c2Vjb3VudC0tOworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCQlpZiAoY2xrLT5jbGtkbSkKKwkJCQlvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShjbGstPmNsa2RtLCBjbGspOworCisJCQlpZiAoY2xrLT5wYXJlbnQpIHsKKwkJCQlvbWFwMl9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CisJCQkJY2xrLT51c2Vjb3VudC0tOworCQkJfQogCQl9CiAJfQogCkBAIC00NzYsNyArNTE0LDcgQEAKIC8qIEdpdmVuIGEgY2xvY2sgYW5kIGEgcmF0ZSBhcHBseSBhIGNsb2NrIHNwZWNpZmljIHJvdW5kaW5nIGZ1bmN0aW9uICovCiBsb25nIG9tYXAyX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewotCWlmIChjbGstPnJvdW5kX3JhdGUgIT0gMCkKKwlpZiAoY2xrLT5yb3VuZF9yYXRlICE9IE5VTEwpCiAJCXJldHVybiBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKIAogCWlmIChjbGstPmZsYWdzICYgUkFURV9GSVhFRCkKQEAgLTU2NSw3ICs2MDMsNyBAQAogICovCiB2b2lkIF9faW9tZW0gKm9tYXAyX2dldF9jbGtzZWwoc3RydWN0IGNsayAqY2xrLCB1MzIgKmZpZWxkX21hc2spCiB7Ci0JaWYgKHVubGlrZWx5KChjbGstPmNsa3NlbF9yZWcgPT0gMCkgfHwgKGNsay0+Y2xrc2VsX21hc2sgPT0gMCkpKQorCWlmICh1bmxpa2VseSgoY2xrLT5jbGtzZWxfcmVnID09IE5VTEwpIHx8IChjbGstPmNsa3NlbF9tYXNrID09IE5VTEwpKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAkqZmllbGRfbWFzayA9IGNsay0+Y2xrc2VsX21hc2s7CkBAIC01ODUsNyArNjIzLDcgQEAKIAl2b2lkIF9faW9tZW0gKmRpdl9hZGRyOwogCiAJZGl2X2FkZHIgPSBvbWFwMl9nZXRfY2xrc2VsKGNsaywgJmZpZWxkX21hc2spOwotCWlmIChkaXZfYWRkciA9PSAwKQorCWlmIChkaXZfYWRkciA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAogCWZpZWxkX3ZhbCA9IF9fcmF3X3JlYWRsKGRpdl9hZGRyKSAmIGZpZWxkX21hc2s7CkBAIC02MDQsNyArNjQyLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkaXZfYWRkciA9IG9tYXAyX2dldF9jbGtzZWwoY2xrLCAmZmllbGRfbWFzayk7Ci0JaWYgKGRpdl9hZGRyID09IDApCisJaWYgKGRpdl9hZGRyID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZmllbGRfdmFsID0gb21hcDJfZGl2aXNvcl90b19jbGtzZWwoY2xrLCBuZXdfZGl2KTsKQEAgLTY0Miw3ICs2ODAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGRwbGxfY2ssIGNvcmVfY2ssIHZpcnRfcHJjbV9zZXQ7IHBsdXMgYWxsIGNsa3NlbCBjbG9ja3MgKi8KLQlpZiAoY2xrLT5zZXRfcmF0ZSAhPSAwKQorCWlmIChjbGstPnNldF9yYXRlICE9IE5VTEwpCiAJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCByYXRlKTsKIAogCWlmICh1bmxpa2VseShyZXQgPT0gMCAmJiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpKQpAQCAtNjYzLDcgKzcwMSw3IEBACiAJY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOwogCiAJKnBhcmVudF9kaXYgPSAwOwotCSpzcmNfYWRkciA9IDA7CisJKnNyY19hZGRyID0gTlVMTDsKIAogCWNsa3MgPSBvbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChjbGssIHNyY19jbGspOwogCWlmIChjbGtzID09IE5VTEwpCkBAIC03MDQsNyArNzQyLDcgQEAKIAogCWZpZWxkX3ZhbCA9IG9tYXAyX2Nsa3NlbF9nZXRfc3JjX2ZpZWxkKCZzcmNfYWRkciwgbmV3X3BhcmVudCwKIAkJCQkJICAgICAgICZmaWVsZF9tYXNrLCBjbGssICZwYXJlbnRfZGl2KTsKLQlpZiAoc3JjX2FkZHIgPT0gMCkKKwlpZiAoc3JjX2FkZHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY2xrLT51c2Vjb3VudCA+IDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKaW5kZXggNjI2ZTVmYS4uMWZiMzMwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaApAQCAtMjEsNiArMjEsNyBAQAogLyogVGhlIG1heGltdW0gZXJyb3IgYmV0d2VlbiBhIHRhcmdldCBEUExMIHJhdGUgYW5kIHRoZSByb3VuZGVkIHJhdGUgaW4gSHogKi8KICNkZWZpbmUgREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCTUwMDAwCiAKK2ludCBvbWFwMl9jbGtfaW5pdCh2b2lkKTsKIGludCBvbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7CiB2b2lkIG9tYXAyX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7CiBsb25nIG9tYXAyX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKQEAgLTM2LDYgKzM3LDcgQEAKICNlbmRpZgogCiB2b2lkIG9tYXAyX2Nsa3NlbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3ZvaWQgb21hcDJfaW5pdF9jbGtfY2xrZG0oc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50KHN0cnVjdCBjbGsgKmNsayk7CiB1MzIgb21hcDJfY2xrc2VsX2dldF9kaXZpc29yKHN0cnVjdCBjbGsgKmNsayk7CiB1MzIgb21hcDJfY2xrc2VsX3JvdW5kX3JhdGVfZGl2KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5oCmluZGV4IGJlNGUyNTUuLjI0MmExOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguaApAQCAtNjI2LDYgKzYyNiw3IEBACiAJLnJhdGUJCT0gMzIwMDAsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfRklYRUQgfCBBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKIH07CiAKQEAgLTYzNCwxNyArNjM1LDE5IEBACiAJLm5hbWUJCT0gIm9zY19jayIsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlCQk9ICZvbWFwMl9lbmFibGVfb3NjX2NrLAogCS5kaXNhYmxlCT0gJm9tYXAyX2Rpc2FibGVfb3NjX2NrLAogCS5yZWNhbGMJCT0gJm9tYXAyX29zY19jbGtfcmVjYWxjLAogfTsKIAotLyogV2l0aCBvdXQgbW9kZW0gbGlrZWx5IDEyTUh6LCB3aXRoIG1vZGVtIGxpa2VseSAxM01IeiAqLworLyogV2l0aG91dCBtb2RlbSBsaWtlbHkgMTJNSHosIHdpdGggbW9kZW0gbGlrZWx5IDEzTUh6ICovCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsIDI2LCAzOC40KU1IeiAqLwogCS5uYW1lCQk9ICJzeXNfY2siLAkJLyogfiByZWZfY2xrIGFsc28gKi8KIAkucGFyZW50CQk9ICZvc2NfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCUFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX3N5c19jbGtfcmVjYWxjLAogfTsKIApAQCAtNjUzLDYgKzY1Niw3IEBACiAJLnJhdGUJCT0gNTQwMDAwMDAsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfRklYRUQgfCBBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKIH07CiAKQEAgLTY4NCw2ICs2ODgsNyBAQAogCS5kcGxsX2RhdGEJPSAmZHBsbF9kZCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfZHBsbGNvcmVfcmVjYWxjLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9yZXByb2dyYW1fZHBsbGNvcmUsCiB9OwpAQCAtNjk0LDYgKzY5OSw3IEBACiAJLnJhdGUJCT0gOTYwMDAwMDAsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfCBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl85Nk1fUExMX1NISUZULAogCS5lbmFibGUJCT0gJm9tYXAyX2Nsa19maXhlZF9lbmFibGUsCkBAIC03MDcsNiArNzEzLDcgQEAKIAkucmF0ZQkJPSA1NDAwMDAwMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzU0TV9QTExfU0hJRlQsCiAJLmVuYWJsZQkJPSAmb21hcDJfY2xrX2ZpeGVkX2VuYWJsZSwKQEAgLTc0MSw2ICs3NDgsNyBAQAogCS5wYXJlbnQJCT0gJmFwbGw1NF9jaywJLyogY2FuIGFsc28gYmUgYWx0X2NsayAqLwogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlSQVRFX1BST1BBR0FURVMgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF81NE1fU09VUkNFLApAQCAtNzUzLDYgKzc2MSw3IEBACiAJLnBhcmVudAkJPSAmZHBsbF9jaywJCS8qIGNhbiBhbHNvIGJlIDMyayAqLwogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtNzc5LDYgKzc4OCw3IEBACiAJLnBhcmVudAkJPSAmYXBsbDk2X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlSQVRFX1BST1BBR0FURVMgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjQzMF85Nk1fU09VUkNFLApAQCAtODExLDYgKzgyMSw3IEBACiAJLnBhcmVudAkJPSAmYXBsbDk2X2NrLAkgLyogOTZNIG9yIEFsdCAqLwogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlSQVRFX1BST1BBR0FURVMgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF80OE1fU09VUkNFLApAQCAtODI2LDYgKzgzNyw3IEBACiAJLmZpeGVkX2Rpdgk9IDQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfUFJPUEFHQVRFUyB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYywKIH07CiAKQEAgLTg3OCw2ICs4OTAsNyBAQAogCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlSQVRFX1BST1BBR0FURVMsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ0xLT1VUX0VOX1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC05MDgsNiArOTIxLDcgQEAKIAkucGFyZW50CQk9ICZzeXNfY2xrb3V0X3NyYywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5jbGtzZWxfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtPVVRfRElWX01BU0ssCiAJLmNsa3NlbAkJPSBzeXNfY2xrb3V0X2Nsa3NlbCwKQEAgLTkyMSw2ICs5MzUsNyBAQAogCS5uYW1lCQk9ICJzeXNfY2xrb3V0Ml9zcmMiLAogCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9DTEtPVVQyX0VOX1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC05NDIsNiArOTU3LDcgQEAKIAkubmFtZQkJPSAic3lzX2Nsa291dDIiLAogCS5wYXJlbnQJCT0gJnN5c19jbGtvdXQyX3NyYywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmNsa3NlbF9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyNDIwX0NMS09VVDJfRElWX01BU0ssCiAJLmNsa3NlbAkJPSBzeXNfY2xrb3V0Ml9jbGtzZWwsCkBAIC05NTQsNiArOTcwLDcgQEAKIAkubmFtZQkJPSAiZW11bF9jayIsCiAJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtFTVVMX0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTVVMQVRJT05fRU5fU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTk5MCwxMiArMTAwNywxMyBAQAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlBTFdBWVNfRU5BQkxFRCB8IERFTEFZRURfQVBQIHwKIAkJCQlDT05GSUdfUEFSVElDSVBBTlQgfCBSQVRFX1BST1BBR0FURVMsCisJLmNsa2RtX25hbWUJPSAibXB1X2Nsa2RtIiwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX01QVV9NQVNLLAogCS5jbGtzZWwJCT0gbXB1X2Nsa3NlbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlICAgICA9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCiB9OwogCkBAIC0xMDMxLDYgKzEwNDksNyBAQAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfCBERUxBWUVEX0FQUCB8CiAJCQkJQ09ORklHX1BBUlRJQ0lQQU5UIHwgUkFURV9QUk9QQUdBVEVTLAorCS5jbGtkbV9uYW1lCT0gImRzcF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0NNX0ZDTEtFTl9EU1BfRU5fRFNQX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0NMS1NFTCksCkBAIC0xMDU0LDEwICsxMDczLDcgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CiAKLS8qCi0gKiBUaGlzIGNsb2NrIGRvZXMgbm90IGV4aXN0IGFzIHN1Y2ggaW4gdGhlIFRSTSwgYnV0IGlzIGFkZGVkIHRvCi0gKiBzZXBhcmF0ZSBzb3VyY2Ugc2VsZWN0aW9uIGZyb20gIFhYWAotICovCisvKiBUaGlzIGNsb2NrIGRvZXMgbm90IGV4aXN0IGFzIHN1Y2ggaW4gdGhlIFRSTS4gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9pcmF0ZV9pY2sgPSB7CiAJLm5hbWUJCT0gImRzcF9pcmF0ZV9pY2siLAogCS5wYXJlbnQJCT0gJmRzcF9mY2ssCkBAIC0xMDg5LDExICsxMTA1LDE3IEBACiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKIH07CiAKKy8qCisgKiBUaGUgSVZBMSBpcyBhbiBBUk03IGNvcmUgb24gdGhlIDI0MjAgdGhhdCBoYXMgbm90aGluZyB0byBkbyB3aXRoCisgKiB0aGUgQzU0eCwgYnV0IHdoaWNoIGlzIGNvbnRhaW5lZCBpbiB0aGUgRFNQIHBvd2VyZG9tYWluLiAgRG9lcyBub3QKKyAqIGV4aXN0IG9uIGxhdGVyIE9NQVBzLgorICovCiBzdGF0aWMgc3RydWN0IGNsayBpdmExX2lmY2sgPSB7CiAJLm5hbWUJCT0gIml2YTFfaWZjayIsCiAJLnBhcmVudAkJPSAmY29yZV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDT05GSUdfUEFSVElDSVBBTlQgfAogCQkJCVJBVEVfUFJPUEFHQVRFUyB8IERFTEFZRURfQVBQLAorCS5jbGtkbV9uYW1lCT0gIml2YTFfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JVkFfQ09QX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0NMS1NFTCksCkBAIC0xMTA5LDYgKzExMzEsNyBAQAogCS5uYW1lCQk9ICJpdmExX21wdV9pbnRfaWZjayIsCiAJLnBhcmVudAkJPSAmaXZhMV9pZmNrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJpdmExX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSVZBX01QVV9TSElGVCwKIAkuZml4ZWRfZGl2CT0gMiwKQEAgLTExNTYsNiArMTE3OSw3IEBACiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCUFMV0FZU19FTkFCTEVEIHwgREVMQVlFRF9BUFAgfAogCQkJCUNPTkZJR19QQVJUSUNJUEFOVCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0wzX01BU0ssCiAJLmNsa3NlbAkJPSBjb3JlX2wzX2Nsa3NlbCwKQEAgLTExNzcsMTEgKzEyMDEsMTMgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCisvKiBJdCBpcyB1bmNsZWFyIGZyb20gVFJNIHdoZXRoZXIgdXNiX2w0X2ljayBpcyByZWFsbHkgaW4gTDMgb3IgTDQgY2xrZG0gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9sNF9pY2sgPSB7CS8qIEZTLVVTQiBpbnRlcmZhY2UgY2xvY2sgKi8KIAkubmFtZQkJPSAidXNiX2w0X2ljayIsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVVNCX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKQEAgLTExOTMsMTAgKzEyMTksNDIgQEAKIH07CiAKIC8qCisgKiBMNCBjbG9jayBtYW5hZ2VtZW50IGRvbWFpbgorICoKKyAqIFRoaXMgZG9tYWluIGNvbnRhaW5zIGxvdHMgb2YgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBpbnRlcmZhY2UsIHNvbWUKKyAqIGZ1bmN0aW9uYWwgY2xvY2tzLglGaXhlZCBBUExMIGZ1bmN0aW9uYWwgc291cmNlIGNsb2NrcyBhcmUgbWFuYWdlZCBpbgorICogdGhpcyBkb21haW4uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgbDRfY29yZV9sM19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBsNF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9sM19jaywgLnJhdGVzID0gbDRfY29yZV9sM19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbDRfY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYW4gaWNrIGFuZCBmY2sgKi8KKwkubmFtZQkJPSAibDRfY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUFMV0FZU19FTkFCTEVEIHwgREVMQVlFRF9BUFAgfCBSQVRFX1BST1BBR0FURVMsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9MNF9NQVNLLAorCS5jbGtzZWwJCT0gbDRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworLyoKICAqIFNTSSBpcyBpbiBMMyBtYW5hZ2VtZW50IGRvbWFpbiwgaXRzIGRpcmVjdCBwYXJlbnQgaXMgY29yZSBub3QgbDMsCiAgKiBtYW55IGNvcmUgcG93ZXIgZG9tYWluIGVudGl0aWVzIGFyZSBncm91cGVkIGludG8gdGhlIEwzIGNsb2NrCiAgKiBkb21haW4uCi0gKiBTU0lfU1NSX0ZDTEssIFNTSV9TU1RfRkNMSywgU1NJX0w0X0NMSUsKKyAqIFNTSV9TU1JfRkNMSywgU1NJX1NTVF9GQ0xLLCBTU0lfTDRfSUNMSwogICoKICAqIHNzciA9IGNvcmUvMS8yLzMvNC81LCBzc3QgPSAxLzIgc3NyLgogICovCkBAIC0xMjIxLDYgKzEyNzksNyBAQAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCURFTEFZRURfQVBQLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCkBAIC0xMjMxLDYgKzEyOTAsNyBAQAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKIH07CiAKKwogLyoKICAqIEdGWCBjbG9jayBkb21haW4KICAqCUNsb2NrczoKQEAgLTEyNTQsNiArMTMxNCw3IEBACiAJLm5hbWUJCT0gImdmeF8zZF9mY2siLAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fM0RfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fQ0xLU0VMKSwKQEAgLTEyNjgsNiArMTMyOSw3IEBACiAJLm5hbWUJCT0gImdmeF8yZF9mY2siLAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fMkRfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fQ0xLU0VMKSwKQEAgLTEyODIsNiArMTM0NCw3IEBACiAJLm5hbWUJCT0gImdmeF9pY2siLAkJLyogRnJvbSBsMyAqLwogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUF9FTl9HRlhfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTEzMTEsNiArMTM3NCw3IEBACiAJLm5hbWUJCT0gIm1kbV9pY2siLAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmNsa2RtX25hbWUJPSAibWRtX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfQ01fSUNMS0VOX01ETV9FTl9NRE1fU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fQ0xLU0VMKSwKQEAgLTEzMjUsNTIgKzEzODksMTMgQEAKIAkubmFtZQkJPSAibWRtX29zY19jayIsCiAJLnBhcmVudAkJPSAmb3NjX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJtZG1fY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNDMwX01ETV9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9PU0NfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIC8qCi0gKiBMNCBjbG9jayBtYW5hZ2VtZW50IGRvbWFpbgotICoKLSAqIFRoaXMgZG9tYWluIGNvbnRhaW5zIGxvdHMgb2YgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBpbnRlcmZhY2UsIHNvbWUKLSAqIGZ1bmN0aW9uYWwgY2xvY2tzLglGaXhlZCBBUExMIGZ1bmN0aW9uYWwgc291cmNlIGNsb2NrcyBhcmUgbWFuYWdlZCBpbgotICogdGhpcyBkb21haW4uCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgbDRfY29yZV9sM19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBsNF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV9sM19jaywgLnJhdGVzID0gbDRfY29yZV9sM19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbDRfY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYW4gaWNrIGFuZCBmY2sgKi8KLQkubmFtZQkJPSAibDRfY2siLAotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUFMV0FZU19FTkFCTEVEIHwgREVMQVlFRF9BUFAgfCBSQVRFX1BST1BBR0FURVMsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9MNF9NQVNLLAotCS5jbGtzZWwJCT0gbDRfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKLQkubmFtZQkJPSAic3NpX2w0X2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU1NJX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKgogICogRFNTIGNsb2NrIGRvbWFpbgogICogQ0xPQ0tzOgogICogRFNTX0w0X0lDTEssIERTU19MM19JQ0xLLApAQCAtMTQwOSw2ICsxNDM0LDcgQEAKIAkubmFtZQkJPSAiZHNzX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCS8qIHJlYWxseSBib3RoIGwzIGFuZCBsNCAqLwogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRFNTMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTQxOSw2ICsxNDQ1LDcgQEAKIAkucGFyZW50CQk9ICZjb3JlX2NrLAkJLyogQ29yZSBvciBzeXMgKi8KIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJREVMQVlFRF9BUFAsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNDUxLDYgKzE0NzgsNyBAQAogCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIGZpeGVkIGF0IHN5c19jayBvciA0OE1IeiAqLwogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlERUxBWUVEX0FQUCwKKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzJfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE0NjQsNiArMTQ5Miw3IEBACiAJLm5hbWUJCT0gImRzc181NG1fZmNrIiwJLyogNTRtIHR2IGNsayAqLwogCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVFZfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE0OTEsNiArMTUyMCw3IEBACiAJLm5hbWUJCT0gImdwdDFfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE1MDAsNiArMTUzMCw3IEBACiAJLm5hbWUJCT0gImdwdDFfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE1MTUsNiArMTU0Niw3IEBACiAJLm5hbWUJCT0gImdwdDJfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNTI0LDYgKzE1NTYsNyBAQAogCS5uYW1lCQk9ICJncHQyX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMl9TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTUzNyw2ICsxNTcwLDcgQEAKIAkubmFtZQkJPSAiZ3B0M19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE1NDYsNiArMTU4MCw3IEBACiAJLm5hbWUJCT0gImdwdDNfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQzX1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNTU5LDYgKzE1OTQsNyBAQAogCS5uYW1lCQk9ICJncHQ0X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTU2OCw2ICsxNjA0LDcgQEAKIAkubmFtZQkJPSAiZ3B0NF9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDRfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE1ODEsNiArMTYxOCw3IEBACiAJLm5hbWUJCT0gImdwdDVfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ1X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNTkwLDYgKzE2MjgsNyBAQAogCS5uYW1lCQk9ICJncHQ1X2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNV9TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTYwMyw2ICsxNjQyLDcgQEAKIAkubmFtZQkJPSAiZ3B0Nl9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDZfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE2MTIsNiArMTY1Miw3IEBACiAJLm5hbWUJCT0gImdwdDZfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNjM0LDYgKzE2NzUsNyBAQAogCS5uYW1lCQk9ICJncHQ3X2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUN19TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTY0Nyw2ICsxNjg5LDcgQEAKIAkubmFtZQkJPSAiZ3B0OF9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDhfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE2NTYsNiArMTY5OSw3IEBACiAJLm5hbWUJCT0gImdwdDhfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ4X1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNjY5LDYgKzE3MTMsNyBAQAogCS5uYW1lCQk9ICJncHQ5X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTY3OCw2ICsxNzIzLDcgQEAKIAkubmFtZQkJPSAiZ3B0OV9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDlfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE2OTEsNiArMTczNyw3IEBACiAJLm5hbWUJCT0gImdwdDEwX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE3MDAsNiArMTc0Nyw3IEBACiAJLm5hbWUJCT0gImdwdDEwX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE3MTMsNiArMTc2MSw3IEBACiAJLm5hbWUJCT0gImdwdDExX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE3MjIsNiArMTc3MSw3IEBACiAJLm5hbWUJCT0gImdwdDExX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE3MzUsNiArMTc4NSw3IEBACiAJLm5hbWUJCT0gImdwdDEyX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTJfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE3NDQsNiArMTc5NSw3IEBACiAJLm5hbWUJCT0gImdwdDEyX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTJfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE3NTgsNiArMTgxMCw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNzY4LDYgKzE4MjEsNyBAQAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DQlNQMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTc3OCw2ICsxODMyLDcgQEAKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDJfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE3ODgsNiArMTg0Myw3IEBACiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNzk4LDYgKzE4NTQsNyBAQAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE4MDgsNiArMTg2NSw3IEBACiAJLmlkCQk9IDMsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQM19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTgxOCw2ICsxODc2LDcgQEAKIAkuaWQJCT0gNCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A0X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xODI4LDYgKzE4ODcsNyBAQAogCS5pZAkJPSA0LAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDRfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE4MzgsNiArMTg5OCw3IEBACiAJLmlkCQk9IDUsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQNV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTg0OCw2ICsxOTA5LDcgQEAKIAkuaWQJCT0gNSwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A1X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xODU3LDYgKzE5MTksNyBAQAogCS5uYW1lCQk9ICJtY3NwaV9pY2siLAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVCwKQEAgLTE4NjgsNiArMTkzMSw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xODc4LDYgKzE5NDIsNyBAQAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTg4OCw2ICsxOTUzLDcgQEAKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTJfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE4OTgsNiArMTk2NCw3IEBACiAJLmlkCQk9IDMsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DU1BJM19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTkwOCw2ICsxOTc1LDcgQEAKIAkuaWQJCT0gMywKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNTUEkzX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTE3LDYgKzE5ODUsNyBAQAogCS5uYW1lCQk9ICJ1YXJ0MV9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTI2LDYgKzE5OTUsNyBAQAogCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTM1LDYgKzIwMDUsNyBAQAogCS5uYW1lCQk9ICJ1YXJ0Ml9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTQ0LDYgKzIwMTUsNyBAQAogCS5uYW1lCQk9ICJ1YXJ0Ml9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTUzLDYgKzIwMjUsNyBAQAogCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQzX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTYyLDYgKzIwMzUsNyBAQAogCS5uYW1lCQk9ICJ1YXJ0M19mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQzX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTcxLDYgKzIwNDUsNyBAQAogCS5uYW1lCQk9ICJncGlvc19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BJT1NfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE5ODAsNiArMjA1NSw3IEBACiAJLm5hbWUJCT0gImdwaW9zX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUElPU19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTk4OSw2ICsyMDY1LDcgQEAKIAkubmFtZQkJPSAibXB1X3dkdF9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTk5OCw2ICsyMDc1LDcgQEAKIAkubmFtZQkJPSAibXB1X3dkdF9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjAwNiwzMSArMjA4NCw0MCBAQAogc3RhdGljIHN0cnVjdCBjbGsgc3luY18zMmtfaWNrID0gewogCS5uYW1lCQk9ICJzeW5jXzMya19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgRU5BQkxFX09OX0lOSVQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fMzJLU1lOQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKKwogc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9pY2sgPSB7CiAJLm5hbWUJCT0gIndkdDFfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CisKIHN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBjdHJsX2ljayA9IHsKIAkubmFtZQkJPSAib21hcGN0cmxfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8IEVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX09NQVBDVFJMX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OworCiBzdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0gewogCS5uYW1lCQk9ICJpY3JfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9JQ1JfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIwNDAsMTUgKzIxMjcsMjIgQEAKIAkubmFtZQkJPSAiY2FtX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fQ0FNX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCisvKgorICogY2FtX2ZjayBjb250cm9scyBib3RoIENBTV9NQ0xLIGFuZCBDQU1fRkNMSy4gIEl0IHNob3VsZCBwcm9iYWJseSBiZQorICogc3BsaXQgaW50byB0d28gc2VwYXJhdGUgY2xvY2tzLCBzaW5jZSB0aGUgcGFyZW50IGNsb2NrcyBhcmUgZGlmZmVyZW50CisgKiBhbmQgdGhlIGNsb2NrZG9tYWlucyBhcmUgYWxzbyBkaWZmZXJlbnQuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9mY2sgPSB7CiAJLm5hbWUJCT0gImNhbV9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0NBTV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjA1OCw2ICsyMTUyLDcgQEAKIAkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUFJTEJPWEVTX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMDY3LDYgKzIxNjIsNyBAQAogCS5uYW1lCQk9ICJ3ZHQ0X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUNF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjA3Niw2ICsyMTcyLDcgQEAKIAkubmFtZQkJPSAid2R0NF9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDRfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIwODUsNiArMjE4Miw3IEBACiAJLm5hbWUJCT0gIndkdDNfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fV0RUM19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjA5NCw2ICsyMTkyLDcgQEAKIAkubmFtZQkJPSAid2R0M19mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9XRFQzX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTAzLDYgKzIyMDIsNyBAQAogCS5uYW1lCQk9ICJtc3Byb19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01TUFJPX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTEyLDYgKzIyMTIsNyBAQAogCS5uYW1lCQk9ICJtc3Byb19mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01TUFJPX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTIxLDYgKzIyMjIsNyBAQAogCS5uYW1lCQk9ICJtbWNfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fTU1DX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTMwLDYgKzIyMzIsNyBAQAogCS5uYW1lCQk9ICJtbWNfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fTU1DX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTM5LDYgKzIyNDIsNyBAQAogCS5uYW1lCQk9ICJmYWNfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9GQUNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIxNDgsNiArMjI1Miw3IEBACiAJLm5hbWUJCT0gImZhY19mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0ZBQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjE1Nyw2ICsyMjYyLDcgQEAKIAkubmFtZQkJPSAiZWFjX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0VBQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjE2Niw2ICsyMjcyLDcgQEAKIAkubmFtZQkJPSAiZWFjX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0VBQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjE3NSw2ICsyMjgyLDcgQEAKIAkubmFtZQkJPSAiaGRxX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fSERRX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTg0LDYgKzIyOTIsNyBAQAogCS5uYW1lCQk9ICJoZHFfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9IRFFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIxOTQsNiArMjMwMyw3IEBACiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjIwNCw2ICsyMzE0LDcgQEAKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjIxNCw2ICsyMzI1LDcgQEAKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fSTJDSFMyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMjI0LDYgKzIzMzYsNyBAQAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIyMzQsNiArMjM0Nyw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIyNDQsNiArMjM1OCw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0kyQ0hTMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjI1Miw3ICsyMzY3LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwbWNfZmNrID0gewogCS5uYW1lCQk9ICJncG1jX2ZjayIsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8IEVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjI2MCw2ICsyMzc3LDcgQEAKIAkubmFtZQkJPSAic2RtYV9mY2siLAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIyNjcsNiArMjM4NSw3IEBACiAJLm5hbWUJCT0gInNkbWFfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjI3NCw2ICsyMzkzLDcgQEAKIAkubmFtZQkJPSAidmx5bnFfaWNrIiwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9WTFlOUV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjMwOCw2ICsyNDI4LDcgQEAKIAkubmFtZQkJPSAidmx5bnFfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBERUxBWUVEX0FQUCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9WTFlOUV9TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMjMyMyw2ICsyNDQ0LDcgQEAKIAkubmFtZQkJPSAic2RyY19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX1NEUkNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIzMzIsNiArMjQ1NCw3IEBACiAJLm5hbWUJCT0gImRlc19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RFU19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjM0MSw2ICsyNDY0LDcgQEAKIAkubmFtZQkJPSAic2hhX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU0hBX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMzUwLDYgKzI0NzQsNyBAQAogCS5uYW1lCQk9ICJybmdfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9STkdfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIzNTksNiArMjQ4NCw3IEBACiAJLm5hbWUJCT0gImFlc19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0FFU19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjM2OCw2ICsyNDk0LDcgQEAKIAkubmFtZQkJPSAicGthX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUEtBX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMzc3LDYgKzI1MDQsNyBAQAogCS5uYW1lCQk9ICJ1c2JfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VU0JfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIzODYsNiArMjUxNCw3IEBACiAJLm5hbWUJCT0gInVzYmhzX2ljayIsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fVVNCSFNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIzOTYsNiArMjUyNSw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjQwNiw2ICsyNTM2LDcgQEAKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yNDE2LDYgKzI1NDcsNyBAQAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIUzJfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTI0MzUsNiArMjU2Nyw3IEBACiAJLm5hbWUJCT0gImdwaW81X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0dQSU81X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yNDQ0LDYgKzI1NzcsNyBAQAogCS5uYW1lCQk9ICJncGlvNV9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9HUElPNV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjQ1Myw2ICsyNTg3LDcgQEAKIAkubmFtZQkJPSAibWRtX2ludGNfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTURNX0lOVENfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTI0NjMsNiArMjU5OCw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTREIxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yNDczLDYgKzI2MDksNyBAQAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIU0RCMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjU1MSw3ICsyNjg4LDYgQEAKIAkmdXNiX2w0X2ljaywKIAkvKiBMNCBkb21haW4gY2xvY2tzICovCiAJJmw0X2NrLAkJCS8qIHVzZWQgYXMgYm90aCBjb3JlX2w0IGFuZCB3dV9sNCAqLwotCSZzc2lfbDRfaWNrLAogCS8qIHZpcnR1YWwgbWV0YS1ncm91cCBjbG9jayAqLwogCSZ2aXJ0X3ByY21fc2V0LAogCS8qIGdlbmVyYWwgbDQgaW50ZXJmYWNlIGNrLCBtdWx0aS1wYXJlbnQgZnVuY3Rpb25hbCBjbGsgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCmluZGV4IGU1YjQ3NWYuLjA4NGUxMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYwpAQCAtNjIsMTEgKzYyLDE0IEBACiBzdGF0aWMgdm9pZCBfb21hcDNfZHBsbF93cml0ZV9jbGtlbihzdHJ1Y3QgY2xrICpjbGssIHU4IGNsa2VuX2JpdHMpCiB7CiAJY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisJdTMyIHY7CiAKIAlkZCA9IGNsay0+ZHBsbF9kYXRhOwogCi0JY21fcm13X3JlZ19iaXRzKGRkLT5lbmFibGVfbWFzaywgY2xrZW5fYml0cyA8PCBfX2ZmcyhkZC0+ZW5hYmxlX21hc2spLAotCQkJZGQtPmNvbnRyb2xfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKTsKKwl2ICY9IH5kZC0+ZW5hYmxlX21hc2s7CisJdiB8PSBjbGtlbl9iaXRzIDw8IF9fZmZzKGRkLT5lbmFibGVfbWFzayk7CisJX19yYXdfd3JpdGVsKHYsIGRkLT5jb250cm9sX3JlZyk7CiB9CiAKIC8qIF9vbWFwM193YWl0X2RwbGxfc3RhdHVzOiB3YWl0IGZvciBhIERQTEwgdG8gZW50ZXIgYSBzcGVjaWZpYyBzdGF0ZSAqLwpAQCAtODIsNyArODUsNyBAQAogCXN0YXRlIDw8PSBkZC0+aWRsZXN0X2JpdDsKIAlpZGxlc3RfbWFzayA9IDEgPDwgZGQtPmlkbGVzdF9iaXQ7CiAKLQl3aGlsZSAoKChjbV9yZWFkX3JlZyhkZC0+aWRsZXN0X3JlZykgJiBpZGxlc3RfbWFzaykgIT0gc3RhdGUpICYmCisJd2hpbGUgKCgoX19yYXdfcmVhZGwoZGQtPmlkbGVzdF9yZWcpICYgaWRsZXN0X21hc2spICE9IHN0YXRlKSAmJgogCSAgICAgICBpIDwgTUFYX0RQTExfV0FJVF9UUklFUykgewogCQlpKys7CiAJCXVkZWxheSgxKTsKQEAgLTI4NSw3ICsyODgsNyBAQAogCiAJZGQgPSBjbGstPmRwbGxfZGF0YTsKIAotCXYgPSBjbV9yZWFkX3JlZyhkZC0+YXV0b2lkbGVfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoZGQtPmF1dG9pZGxlX3JlZyk7CiAJdiAmPSBkZC0+YXV0b2lkbGVfbWFzazsKIAl2ID4+PSBfX2ZmcyhkZC0+YXV0b2lkbGVfbWFzayk7CiAKQEAgLTMwNCw2ICszMDcsNyBAQAogc3RhdGljIHZvaWQgb21hcDNfZHBsbF9hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwl1MzIgdjsKIAogCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKIAkJcmV0dXJuOwpAQCAtMzE1LDkgKzMxOSwxMCBAQAogCSAqIGJ5IHdyaXRpbmcgMHg1IGluc3RlYWQgb2YgMHgxLiAgQWRkIHNvbWUgbWVjaGFuaXNtIHRvCiAJICogb3B0aW9uYWxseSBlbnRlciB0aGlzIG1vZGUuCiAJICovCi0JY21fcm13X3JlZ19iaXRzKGRkLT5hdXRvaWRsZV9tYXNrLAotCQkJRFBMTF9BVVRPSURMRV9MT1dfUE9XRVJfU1RPUCA8PCBfX2ZmcyhkZC0+YXV0b2lkbGVfbWFzayksCi0JCQlkZC0+YXV0b2lkbGVfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoZGQtPmF1dG9pZGxlX3JlZyk7CisJdiAmPSB+ZGQtPmF1dG9pZGxlX21hc2s7CisJdiB8PSBEUExMX0FVVE9JRExFX0xPV19QT1dFUl9TVE9QIDw8IF9fZmZzKGRkLT5hdXRvaWRsZV9tYXNrKTsKKwlfX3Jhd193cml0ZWwodiwgZGQtPmF1dG9pZGxlX3JlZyk7CiB9CiAKIC8qKgpAQCAtMzI5LDE1ICszMzQsMTcgQEAKIHN0YXRpYyB2b2lkIG9tYXAzX2RwbGxfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwl1MzIgdjsKIAogCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKIAkJcmV0dXJuOwogCiAJZGQgPSBjbGstPmRwbGxfZGF0YTsKIAotCWNtX3Jtd19yZWdfYml0cyhkZC0+YXV0b2lkbGVfbWFzaywKLQkJCURQTExfQVVUT0lETEVfRElTQUJMRSA8PCBfX2ZmcyhkZC0+YXV0b2lkbGVfbWFzayksCi0JCQlkZC0+YXV0b2lkbGVfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoZGQtPmF1dG9pZGxlX3JlZyk7CisJdiAmPSB+ZGQtPmF1dG9pZGxlX21hc2s7CisJdiB8PSBEUExMX0FVVE9JRExFX0RJU0FCTEUgPDwgX19mZnMoZGQtPmF1dG9pZGxlX21hc2spOworCV9fcmF3X3dyaXRlbCh2LCBkZC0+YXV0b2lkbGVfcmVnKTsKIH0KIAogLyogQ2xvY2sgY29udHJvbCBmb3IgRFBMTCBvdXRwdXRzICovCkBAIC00ODIsOCArNDg5LDEwIEBACiAJZm9yIChjbGtwID0gb25jaGlwXzM0eHhfY2xrczsKIAkgICAgIGNsa3AgPCBvbmNoaXBfMzR4eF9jbGtzICsgQVJSQVlfU0laRShvbmNoaXBfMzR4eF9jbGtzKTsKIAkgICAgIGNsa3ArKykgewotCQlpZiAoKCpjbGtwKS0+ZmxhZ3MgJiBjcHVfY2xrZmxnKQorCQlpZiAoKCpjbGtwKS0+ZmxhZ3MgJiBjcHVfY2xrZmxnKSB7CiAJCQljbGtfcmVnaXN0ZXIoKmNsa3ApOworCQkJb21hcDJfaW5pdF9jbGtfY2xrZG0oKmNsa3ApOworCQl9CiAJfQogCiAJLyogUkVWSVNJVDogTm90IHlldCByZWFkeSBmb3IgT01BUDMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCmluZGV4IGVjNjY0NDUuLmMzOGE4YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaApAQCAtNDc4LDcgKzQ3OCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjb3JlX2NrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssICAgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGwzX20yX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKQEAgLTQ5NSw3ICs0OTUsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHBsbDNfbTJ4Ml9ja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZkcGxsM194Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CkBAIC01NDEsNyArNTQxLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGVtdV9jb3JlX2Fsd29uX2NrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssICAgICAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZkcGxsM19tM3gyX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKQEAgLTYzMyw3ICs2MzMsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF85Nm1fYWx3b25fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssICAgICAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZkcGxsNF9tMngyX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKQEAgLTY1OSw3ICs2NTksNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY21fOTZtX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgICAgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSAmZHBsbDRfbTJ4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CkBAIC03MDEsNyArNzAxLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHZpcnRfb21hcF81NG1fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssICAgICAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZkcGxsNF9tM3gyX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKQEAgLTkxMSw3ICs5MTEsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF8xMjBtX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZkcGxsNV9tMl9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CkBAIC05MTksMTMgKzkxOSwxMyBAQAogc3RhdGljIHN0cnVjdCBjbGsgb21hcF8xMjBtX2ZjayA9IHsKIAkubmFtZQkJPSAib21hcF8xMjBtX2ZjayIsCiAJLnBhcmVudAkJPSAmZHBsbDVfbTJfY2ssCi0JLmluaXQgICAgICAgICAgID0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZyAgICAgPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUMiksCi0JLmNsa3NlbF9tYXNrICAgID0gT01BUDM0MzBFUzJfU1RfUEVSSVBIMl9DTEtfTUFTSywKLQkuY2xrc2VsICAgICAgICAgPSBvbWFwXzEyMG1fZmNrX2Nsa3NlbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX1NUX1BFUklQSDJfQ0xLX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwXzEyMG1fZmNrX2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIgfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKLQkucmVjYWxjICAgICAgICAgPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogLyogQ00gRVhURVJOQUwgQ0xPQ0sgT1VUUFVUUyAqLwpAQCAtMTAzNCw3ICsxMDM0LDcgQEAKICAqIGNhbGxlZCAnZHBsbDFfZmNrJwogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtcHVfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwxX2ZjaywgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGwxX2ZjaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGwxX3gybTJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwpAQCAtMTA0OCw2ICsxMDQ4LDcgQEAKIAkuY2xrc2VsCQk9IG1wdV9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKIAkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAibXB1X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMTA3NSw2ICsxMDc2LDggQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAorLyogWFhYIFdoYXQgYWJvdXQgbmVvbl9jbGtkbSA/ICovCisKIC8qCiAgKiBSRVZJU0lUOiBUaGlzIGNsb2NrIGlzIG5ldmVyIHNwZWNpZmljYWxseSBkZWZpbmVkIGluIHRoZSAzNDMwIFRSTSwKICAqIGFsdGhvdWdoIGl0IGlzIHJlZmVyZW5jZWQgLSBzbyB0aGlzIGlzIGEgZ3Vlc3MKQEAgLTExMDcsNyArMTExMCw3IEBACiAgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgaXZhMl9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbDJfZmNrLCAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGwyX2ZjaywJICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZkcGxsMl9tMl9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CkBAIC0xMTIzLDYgKzExMjYsNyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX0lWQTJfQ0xLX01BU0ssCiAJLmNsa3NlbAkJPSBpdmEyX2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMsCisJLmNsa2RtX25hbWUJPSAiaXZhMl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTExMzcsNiArMTE0MSw3IEBACiAJLmNsa3NlbAkJPSBkaXYyX2NvcmVfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0xMTU0LDYgKzExNTksNyBAQAogCS5jbGtzZWwJCT0gZGl2Ml9sM19jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKIAkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAogfTsKQEAgLTExODMsNDMgKzExODksNTcgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19mY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF9sM19mY2siLAorLyogVmlydHVhbCBwYXJlbnQgY2xvY2sgZm9yIGdmeF9sM19pY2sgYW5kIGdmeF9sM19mY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19jayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2wzX2NrIiwKIAkucGFyZW50CQk9ICZsM19pY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUF9FTl9HRlhfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfZmNrID0geworCS5uYW1lCQk9ICJnZnhfbDNfZmNrIiwKKwkucGFyZW50CQk9ICZnZnhfbDNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAogCS5jbGtzZWwJCT0gZ2Z4X2wzX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEgfCBSQVRFX1BST1BBR0FURVMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfaWNrID0gewogCS5uYW1lCQk9ICJnZnhfbDNfaWNrIiwKLQkucGFyZW50CQk9ICZsM19pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVBfRU5fR0ZYX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKKwkucGFyZW50CQk9ICZnZnhfbDNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImdmeF8zNDMwZXMxX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2NnMV9jayA9IHsKIAkubmFtZQkJPSAiZ2Z4X2NnMV9jayIsCiAJLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOXzJEX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKKwkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jZzJfY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9jZzJfY2siLAogCS5wYXJlbnQJCT0gJmdmeF9sM19mY2ssIC8qIFJFVklTSVQ6IGNvcnJlY3Q/ICovCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl8zRF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCisJLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xMjUyLDE1ICsxMjcyLDE4IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzJfQ0xLU0VMX1NHWF9NQVNLLAogCS5jbGtzZWwJCT0gc2d4X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLmNsa2RtX25hbWUJPSAic2d4X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc2d4X2ljayA9IHsKIAkubmFtZQkJPSAic2d4X2ljayIsCiAJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9TR1hfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fU0dYX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKKwkuY2xrZG1fbmFtZQk9ICJzZ3hfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xMjY5LDkgKzEyOTIsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGQyZF8yNm1fZmNrID0gewogCS5uYW1lCQk9ICJkMmRfMjZtX2ZjayIsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9EMkRfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAorCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTEyOTEsNiArMTMxNiw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDEwX01BU0ssCiAJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMTMwNCw2ICsxMzMwLDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMTFfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0xMzQxLDYgKzEzNjgsNyBAQAogCS5wYXJlbnQJCT0gJm9tYXBfOTZtX2ZjaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTM1MSw2ICsxMzc5LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9NTUMzX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTM2MSw2ICsxMzkwLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMyX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTM3MCw2ICsxNDAwLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NU1BST19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTEzODAsNiArMTQxMSw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTEzOTAsMTYgKzE0MjIsMTggQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMzX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7CiAJLm5hbWUJCT0gImkyY19mY2siLAotCS5pZCAJCT0gMiwKKwkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE0MTAsNiArMTQ0NCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE0NDMsNiArMTQ3OCw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1A1X0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzE1X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTE0NTYsNiArMTQ5Miw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AxX0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzE1X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTE0NjYsNiArMTUwMyw3IEBACiAJLnBhcmVudAkJPSAmb21hcF80OG1fZmNrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNTQzLDYgKzE1ODEsNyBAQAogCS5wYXJlbnQJCT0gJm9tYXBfMTJtX2ZjaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTU4MSw2ICsxNjIwLDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfU1NJX01BU0ssCiAJLmNsa3NlbAkJPSBzc2lfc3NyX2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTE1OTYsMTEgKzE2MzYsMTcgQEAKIAogLyogQ09SRV9MM19JQ0sgYmFzZWQgY2xvY2tzICovCiAKKy8qCisgKiBYWFggbXVzdCBhZGQgY2xrX2VuYWJsZS9jbGtfZGlzYWJsZSBmb3IgdGhlc2UgaWYgc3RhbmRhcmQgY29kZSB3b24ndAorICogaGFuZGxlIGl0CisgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDNfaWNrID0gewogCS5uYW1lCQk9ICJjb3JlX2wzX2ljayIsCiAJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTYxMCw2ICsxNjU2LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IU09UR1VTQl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE2MTksNiArMTY2Niw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0RSQ19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTYyNyw2ICsxNjc1LDcgQEAKIAkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0sgfAogCQkJCUVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNjU0LDggKzE3MDMsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDRfaWNrID0gewogCS5uYW1lCQk9ICJjb3JlX2w0X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTY2NSw2ICsxNzE2LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JUTExfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNjc1LDYgKzE3MjcsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX01NQzNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNjg1LDYgKzE3MzgsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0lDUl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE2OTQsNiArMTc0OCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQUVTMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE3MDMsNiArMTc1OCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0hBMTJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzEyLDYgKzE3NjgsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0RFUzJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzIyLDYgKzE3NzksNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzMyLDYgKzE3OTAsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzFfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzQxLDYgKzE4MDAsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01TUFJPX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTc1MCw2ICsxODEwLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IRFFfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzYwLDYgKzE4MjEsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJNF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE3NzAsNiArMTgzMiw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkzX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTc4MCw2ICsxODQzLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzkwLDYgKzE4NTQsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4MDAsNiArMTg2NSw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDM19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4MTAsNiArMTg3Niw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4MjAsNiArMTg4Nyw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4MjksNiArMTg5Nyw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xODM4LDYgKzE5MDcsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQxX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTg0Nyw2ICsxOTE3LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4NTYsNiArMTkyNyw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTBfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xODY2LDYgKzE5MzgsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQNV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4NzYsNiArMTk0OSw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AxX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTg4NSw2ICsxOTU5LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9GQUNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xODk0LDYgKzE5NjksNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01BSUxCT1hFU19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE5MTMsNiArMTk4OSw3IEBACiAJLnBhcmVudAkJPSAmbDRfaWNrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xOTIyLDYgKzE5OTksNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NTSV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE5OTYsNyArMjA3NCw3IEBACiAKIC8qIERTUyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHNzMV9hbHdvbl9mY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywgICAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGw0X200eDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwpAQCAtMjAxMSwzMyArMjA4OSw0MCBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX1BFUklQSF9DTEtfTUFTSywKIAkuY2xrc2VsCQk9IGRzczFfYWx3b25fZmNrX2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNzX3R2X2ZjayA9IHsKIAkubmFtZQkJPSAiZHNzX3R2X2ZjayIsCiAJLnBhcmVudAkJPSAmb21hcF81NG1fZmNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVFZfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzc185Nm1fZmNrID0gewogCS5uYW1lCQk9ICJkc3NfOTZtX2ZjayIsCiAJLnBhcmVudAkJPSAmb21hcF85Nm1fZmNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVFZfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzczJfYWx3b25fZmNrID0gewogCS5uYW1lCQk9ICJkc3MyX2Fsd29uX2ZjayIsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fRFNTMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjA0NSwxNiArMjEzMCwxOCBAQAogCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCiAJLm5hbWUJCT0gImRzc19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiAvKiBDQU0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY2FtX21jbGtfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywgICAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGw0X201eDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwpAQCAtMjA2OSwyNCArMjE1NiwxOSBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9DQU1fU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNhbV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9sM19pY2sgPSB7Ci0JLm5hbWUJCT0gImNhbV9sM19pY2siLAotCS5wYXJlbnQJCT0gJmwzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ0FNX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2FtX2w0X2ljayA9IHsKLQkubmFtZQkJPSAiY2FtX2w0X2ljayIsCitzdGF0aWMgc3RydWN0IGNsayBjYW1faWNrID0geworCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCisJLm5hbWUJCT0gImNhbV9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NBTV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY2FtX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjA5NSw0NSArMjE3Nyw0NSBAQAogc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF8xMjBtX2ZjayA9IHsKIAkubmFtZQkJPSAidXNiaG9zdF8xMjBtX2ZjayIsCiAJLnBhcmVudAkJPSAmb21hcF8xMjBtX2ZjaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfNDhtX2ZjayA9IHsKIAkubmFtZQkJPSAidXNiaG9zdF80OG1fZmNrIiwKIAkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVDFfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayB1c2Job3N0X2wzX2ljayA9IHsKLQkubmFtZQkJPSAidXNiaG9zdF9sM19pY2siLAotCS5wYXJlbnQJCT0gJmwzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1RfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2Job3N0X2w0X2ljayA9IHsKLQkubmFtZQkJPSAidXNiaG9zdF9sNF9pY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF9pY2sgPSB7CisJLyogSGFuZGxlcyBib3RoIEwzIGFuZCBMNCBjbG9ja3MgKi8KKwkubmFtZQkJPSAidXNiaG9zdF9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKKwkuY2xrZG1fbmFtZQk9ICJ1c2Job3N0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF9zYXJfZmNrID0gewogCS5uYW1lCQk9ICJ1c2Job3N0X3Nhcl9mY2siLAogCS5wYXJlbnQJCT0gJm9zY19zeXNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgUE1fUFdTVENUUkwpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfU0FWRUFORFJFU1RPUkVfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMTc1LDYgKzIyNTcsNyBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCisvKiBYWFggc2hvdWxkIGdwdDEncyBjbGtzZWwgaGF2ZSB3a3VwXzMya19mY2sgYXMgdGhlIDMyayBvcHQ/ICovCiBzdGF0aWMgc3RydWN0IGNsayBncHQxX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0MV9mY2siLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0yMTg0LDEzICsyMjY3LDE2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDFfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB3a3VwXzMya19mY2sgPSB7CiAJLm5hbWUJCT0gIndrdXBfMzJrX2ZjayIsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjIwMCw2ICsyMjg2LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8xX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjIwOSw2ICsyMjk2LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjE2LDYgKzIzMDQsNyBAQAogCS5uYW1lCQk9ICJ3a3VwX2w0X2ljayIsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjI3LDYgKzIzMTYsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNJTU9DUF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIyMzYsNiArMjMyNiw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQyX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjI0NSw2ICsyMzM2LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDFfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjU0LDYgKzIzNDYsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjYzLDE1ICsyMzU2LDE4IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl8zMktTWU5DX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAorLyogWFhYIFRoaXMgY2xvY2sgbm8gbG9uZ2VyIGV4aXN0cyBpbiAzNDMwIFRSTSByZXYgRiAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfaWNrID0gewogCS5uYW1lCQk9ICJncHQxMl9pY2siLAogCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjgxLDYgKzIzNzcsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIyOTEsMTYgKzIzODgsMjAgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBlcl85Nm1fZmNrID0gewogCS5uYW1lCQk9ICJwZXJfOTZtX2ZjayIsCiAJLnBhcmVudAkJPSAmb21hcF85Nm1fYWx3b25fZmNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBwZXJfNDhtX2ZjayA9IHsKIAkubmFtZQkJPSAicGVyXzQ4bV9mY2siLAogCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKIAkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjMxMCw2ICsyNDExLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIzMjIsNiArMjQyNCw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDJfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIzMzQsNiArMjQzNyw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDNfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIzNDYsNiArMjQ1MCw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDRfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIzNTgsNiArMjQ2Myw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDVfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIzNzAsNiArMjQ3Niw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDZfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIzODIsNiArMjQ4OSw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDdfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIzOTQsNiArMjUwMiw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDhfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI0MDYsMTIgKzI1MTUsMTQgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOV9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcGVyXzMya19hbHdvbl9mY2sgPSB7CiAJLm5hbWUJCT0gInBlcl8zMmtfYWx3b25fZmNrIiwKIAkucGFyZW50CQk9ICZvbWFwXzMya19mY2ssCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKQEAgLTI0MjIsNiArMjUzMyw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU82X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNDMxLDYgKzI1NDMsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjQ0MCw2ICsyNTUzLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzRfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI0NDksNiArMjU2Myw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8zX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNDU4LDYgKzI1NzMsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjQ2Nyw2ICsyNTgzLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUM19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjQ3NSw2ICsyNTkyLDcgQEAKIAkucGFyZW50CQk9ICZsNF9pY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKIAkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjQ4NCw2ICsyNjAyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI0OTMsNiArMjYxMiw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU81X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNTAyLDYgKzI2MjIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjUxMSw2ICsyNjMyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI1MjAsNiArMjY0Miw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8yX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNTI5LDYgKzI2NTIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQzX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNTM4LDYgKzI2NjIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUM19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjU0Nyw2ICsyNjcyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUOV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjU1Niw2ICsyNjgyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUOF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjU2NSw2ICsyNjkyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUN19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjU3NCw2ICsyNzAyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjU4Myw2ICsyNzEyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjU5Miw2ICsyNzIyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjYwMSw2ICsyNzMyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUM19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjYxMCw2ICsyNzQyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjYyMCw2ICsyNzUzLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AyX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNjMwLDYgKzI3NjQsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI2NDAsMTIgKzI3NzUsMTMgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A0X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtY2JzcF8yMzRfY2xrc2VsW10gPSB7CiAJeyAucGFyZW50ID0gJnBlcl85Nm1fZmNrLCAucmF0ZXMgPSBjb21tb25fbWNic3BfOTZtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJm1jYnNwX2Nsa3MsICAgLnJhdGVzID0gY29tbW9uX21jYnNwX21jYnNwX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJm1jYnNwX2Nsa3MsICAucmF0ZXMgPSBjb21tb25fbWNic3BfbWNic3BfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CiAKQEAgLTI2NTksNiArMjc5NSw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AyX0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI2NzIsNiArMjgwOSw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AzX0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI2ODUsNiArMjgyMyw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1A0X0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI3MzIsNiArMjg3MSw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVVYX0NUUkxfTUFTSywKIAkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI3NTUsNiArMjg5NSw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1BDTEtfTUFTSywKIAkuY2xrc2VsCQk9IHBjbGtfZW11X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkuY2xrZG1fbmFtZQk9ICJlbXVfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0yNzc3LDYgKzI5MTgsNyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9QQ0xLWDJfTUFTSywKIAkuY2xrc2VsCQk9IHBjbGt4Ml9lbXVfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI3OTIsNiArMjkzNCw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0FUQ0xLX01BU0ssCiAJLmNsa3NlbAkJPSBhdGNsa19lbXVfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI4MDIsNiArMjk0NSw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfVFJBQ0VfTVVYX0NUUkxfTUFTSywKIAkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI4MjQsNiArMjk2OCw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1RSQUNFQ0xLX01BU0ssCiAJLmNsa3NlbAkJPSB0cmFjZWNsa19jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgQUxXQVlTX0VOQUJMRUQsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjg1MywxMSArMjk5OCwxMyBAQAogCS5uYW1lCQk9ICJzcl9sNF9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2ljaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIC8qIFNFQ1VSRV8zMktfRkNLIGNsb2NrcyAqLwogCisvKiBYWFggVGhpcyBjbG9jayBubyBsb25nZXIgZXhpc3RzIGluIDM0MzAgVFJNIHJldiBGICovCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMl9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEyX2ZjayIsCiAJLnBhcmVudAkJPSAmc2VjdXJlXzMya19mY2ssCkBAIC0yOTMzLDYgKzMwODAsNyBAQAogCSZsM19pY2ssCiAJJmw0X2ljaywKIAkmcm1faWNrLAorCSZnZnhfbDNfY2ssCiAJJmdmeF9sM19mY2ssCiAJJmdmeF9sM19pY2ssCiAJJmdmeF9jZzFfY2ssCkBAIC0zMDE0LDEyICszMTYyLDEwIEBACiAJJmRzczJfYWx3b25fZmNrLAogCSZkc3NfaWNrLAogCSZjYW1fbWNsaywKLQkmY2FtX2wzX2ljaywKLQkmY2FtX2w0X2ljaywKKwkmY2FtX2ljaywKIAkmdXNiaG9zdF8xMjBtX2ZjaywKIAkmdXNiaG9zdF80OG1fZmNrLAotCSZ1c2Job3N0X2wzX2ljaywKLQkmdXNiaG9zdF9sNF9pY2ssCisJJnVzYmhvc3RfaWNrLAogCSZ1c2Job3N0X3Nhcl9mY2ssCiAJJnVzaW1fZmNrLAogCSZncHQxX2ZjaywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzNjZTljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCkBAIC0wLDAgKzEsNjIzIEBACisvKgorICogT01BUDIvMyBjbG9ja2RvbWFpbiBmcmFtZXdvcmsgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkgYW5kIEpvdW5pIEjDtmdhbmRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZmRlZiBDT05GSUdfT01BUF9ERUJVR19DTE9DS0RPTUFJTgorIyAgZGVmaW5lIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKKyNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CisKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAiY20uaCIKKworI2luY2x1ZGUgPG1hY2gvcG93ZXJkb21haW4uaD4KKyNpbmNsdWRlIDxtYWNoL2Nsb2NrZG9tYWluLmg+CisKKy8qIGNsa2RtX2xpc3QgY29udGFpbnMgYWxsIHJlZ2lzdGVyZWQgc3RydWN0IGNsb2NrZG9tYWlucyAqLworc3RhdGljIExJU1RfSEVBRChjbGtkbV9saXN0KTsKKworLyogY2xrZG1fbXV0ZXggcHJvdGVjdHMgY2xrZG1fbGlzdCBhZGQgYW5kIGRlbCBvcHMgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoY2xrZG1fbXV0ZXgpOworCisvKiBhcnJheSBvZiBwb3dlcmRvbWFpbiBkZXBzIHRvIGJlIGFkZGVkL3JlbW92ZWQgd2hlbiBjbGtkbSBpbiBod3N1cCBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKmF1dG9kZXBzOworCisKKy8qIFByaXZhdGUgZnVuY3Rpb25zICovCisKKy8qCisgKiBfYXV0b2RlcF9sb29rdXAgLSByZXNvbHZlIGF1dG9kZXAgcHdyZG0gbmFtZXMgdG8gcHdyZG0gcG9pbnRlcnM7IHN0b3JlCisgKiBAYXV0b2RlcDogc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKiB0byByZXNvbHZlCisgKgorICogUmVzb2x2ZSBhdXRvZGVwIHBvd2VyZG9tYWluIG5hbWVzIHRvIHBvd2VyZG9tYWluIHBvaW50ZXJzIHZpYQorICogcHdyZG1fbG9va3VwKCkgYW5kIHN0b3JlIHRoZSBwb2ludGVycyBpbiB0aGUgYXV0b2RlcCBzdHJ1Y3R1cmUuICBBbgorICogImF1dG9kZXAiIGlzIGEgcG93ZXJkb21haW4gc2xlZXAvd2FrZXVwIGRlcGVuZGVuY3kgdGhhdCBpcworICogYXV0b21hdGljYWxseSBhZGRlZCBhbmQgcmVtb3ZlZCB3aGVuZXZlciBjbG9ja3MgaW4gdGhlIGFzc29jaWF0ZWQKKyAqIGNsb2NrZG9tYWluIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIChyZXNwZWN0aXZlbHkpIHdoZW4gdGhlCisgKiBjbG9ja2RvbWFpbiBpcyBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkIG1vZGUuCU1lYW50IHRvIGJlIGNhbGxlZAorICogb25jZSBhdCBjbG9ja2RvbWFpbiBsYXllciBpbml0aWFsaXphdGlvbiwgc2luY2UgdGhlc2Ugc2hvdWxkIHJlbWFpbgorICogZml4ZWQgZm9yIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIF9hdXRvZGVwX2xvb2t1cChzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcCkKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOworCisJaWYgKCFhdXRvZGVwKQorCQlyZXR1cm47CisKKwlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQorCQlyZXR1cm47CisKKwlwd3JkbSA9IHB3cmRtX2xvb2t1cChhdXRvZGVwLT5wd3JkbV9uYW1lKTsKKwlpZiAoIXB3cmRtKSB7CisJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogX2F1dG9kZXBfbG9va3VwOiBwb3dlcmRvbWFpbiAlcyAiCisJCQkgImRvZXMgbm90IGV4aXN0XG4iLCBhdXRvZGVwLT5wd3JkbV9uYW1lKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKwlhdXRvZGVwLT5wd3JkbSA9IHB3cmRtOworCisJcmV0dXJuOworfQorCisvKgorICogX2Nsa2RtX2FkZF9hdXRvZGVwcyAtIGFkZCBhdXRvIHNsZWVwZGVwcy93a2RlcHMgdG8gY2xrZG0gdXBvbiBjbG9jayBlbmFibGUKKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqCisgKiBBZGQgdGhlICJhdXRvZGVwIiBzbGVlcCAmIHdha2V1cCBkZXBlbmRlbmNpZXMgdG8gY2xvY2tkb21haW4gJ2Nsa2RtJworICogaW4gaGFyZHdhcmUtc3VwZXJ2aXNlZCBtb2RlLiAgTWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gY2xvY2sgZnJhbWV3b3JrCisgKiB3aGVuIGEgY2xvY2sgaW5zaWRlIGNsb2NrZG9tYWluICdjbGtkbScgaXMgZW5hYmxlZC4JTm8gcmV0dXJuIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBfY2xrZG1fYWRkX2F1dG9kZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKmF1dG9kZXA7CisKKwlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG1fbmFtZTsgYXV0b2RlcCsrKSB7CisJCWlmICghYXV0b2RlcC0+cHdyZG0pCisJCQljb250aW51ZTsKKworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGFkZGluZyAlcyBzbGVlcGRlcC93a2RlcCBmb3IgIgorCQkJICJwd3JkbSAlc1xuIiwgYXV0b2RlcC0+cHdyZG1fbmFtZSwKKwkJCSBjbGtkbS0+cHdyZG0tPm5hbWUpOworCisJCXB3cmRtX2FkZF9zbGVlcGRlcChjbGtkbS0+cHdyZG0sIGF1dG9kZXAtPnB3cmRtKTsKKwkJcHdyZG1fYWRkX3drZGVwKGNsa2RtLT5wd3JkbSwgYXV0b2RlcC0+cHdyZG0pOworCX0KK30KKworLyoKKyAqIF9jbGtkbV9hZGRfYXV0b2RlcHMgLSByZW1vdmUgYXV0byBzbGVlcGRlcHMvd2tkZXBzIGZyb20gY2xrZG0KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqCisgKiBSZW1vdmUgdGhlICJhdXRvZGVwIiBzbGVlcCAmIHdha2V1cCBkZXBlbmRlbmNpZXMgZnJvbSBjbG9ja2RvbWFpbiAnY2xrZG0nCisgKiBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkIG1vZGUuICBNZWFudCB0byBiZSBjYWxsZWQgZnJvbSBjbG9jayBmcmFtZXdvcmsKKyAqIHdoZW4gYSBjbG9jayBpbnNpZGUgY2xvY2tkb21haW4gJ2Nsa2RtJyBpcyBkaXNhYmxlZC4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgX2Nsa2RtX2RlbF9hdXRvZGVwcyhzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCXN0cnVjdCBjbGtkbV9wd3JkbV9hdXRvZGVwICphdXRvZGVwOworCisJZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPnB3cmRtX25hbWU7IGF1dG9kZXArKykgeworCQlpZiAoIWF1dG9kZXAtPnB3cmRtKQorCQkJY29udGludWU7CisKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiByZW1vdmluZyAlcyBzbGVlcGRlcC93a2RlcCBmb3IgIgorCQkJICJwd3JkbSAlc1xuIiwgYXV0b2RlcC0+cHdyZG1fbmFtZSwKKwkJCSBjbGtkbS0+cHdyZG0tPm5hbWUpOworCisJCXB3cmRtX2RlbF9zbGVlcGRlcChjbGtkbS0+cHdyZG0sIGF1dG9kZXAtPnB3cmRtKTsKKwkJcHdyZG1fZGVsX3drZGVwKGNsa2RtLT5wd3JkbSwgYXV0b2RlcC0+cHdyZG0pOworCX0KK30KKworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluICpfY2xrZG1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgKnRlbXBfY2xrZG07CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJY2xrZG0gPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wX2Nsa2RtLCAmY2xrZG1fbGlzdCwgbm9kZSkgeworCQlpZiAoIXN0cmNtcChuYW1lLCB0ZW1wX2Nsa2RtLT5uYW1lKSkgeworCQkJY2xrZG0gPSB0ZW1wX2Nsa2RtOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gY2xrZG07Cit9CisKKworLyogUHVibGljIGZ1bmN0aW9ucyAqLworCisvKioKKyAqIGNsa2RtX2luaXQgLSBzZXQgdXAgdGhlIGNsb2NrZG9tYWluIGxheWVyCisgKiBAY2xrZG1zOiBvcHRpb25hbCBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGNsb2NrZG9tYWlucyB0byByZWdpc3RlcgorICogQGluaXRfYXV0b2RlcHM6IG9wdGlvbmFsIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgYXV0b2RlcHMgdG8gcmVnaXN0ZXIKKyAqCisgKiBTZXQgdXAgaW50ZXJuYWwgc3RhdGUuICBJZiBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY2xvY2tkb21haW5zCisgKiB3YXMgc3VwcGxpZWQsIGxvb3AgdGhyb3VnaCB0aGUgbGlzdCBvZiBjbG9ja2RvbWFpbnMsIHJlZ2lzdGVyIGFsbAorICogdGhhdCBhcmUgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLglTaW1pbGFybHksIGlmIGEKKyAqIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY2xvY2tkb21haW4tcG93ZXJkb21haW4gYXV0b2RlcGVuZGVuY2llcyB3YXMKKyAqIHByb3ZpZGVkLCByZWdpc3RlciB0aG9zZS4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBjbGtkbV9pbml0KHN0cnVjdCBjbG9ja2RvbWFpbiAqKmNsa2RtcywKKwkJc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKmluaXRfYXV0b2RlcHMpCit7CisJc3RydWN0IGNsb2NrZG9tYWluICoqYyA9IE5VTEw7CisJc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKmF1dG9kZXAgPSBOVUxMOworCisJaWYgKGNsa2RtcykKKwkJZm9yIChjID0gY2xrZG1zOyAqYzsgYysrKQorCQkJY2xrZG1fcmVnaXN0ZXIoKmMpOworCisJYXV0b2RlcHMgPSBpbml0X2F1dG9kZXBzOworCWlmIChhdXRvZGVwcykKKwkJZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPnB3cmRtX25hbWU7IGF1dG9kZXArKykKKwkJCV9hdXRvZGVwX2xvb2t1cChhdXRvZGVwKTsKK30KKworLyoqCisgKiBjbGtkbV9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgY2xvY2tkb21haW4KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICogdG8gcmVnaXN0ZXIKKyAqCisgKiBBZGRzIGEgY2xvY2tkb21haW4gdG8gdGhlIGludGVybmFsIGNsb2NrZG9tYWluIGxpc3QuCisgKiBSZXR1cm5zIC1FSU5WQUwgaWYgZ2l2ZW4gYSBudWxsIHBvaW50ZXIsIC1FRVhJU1QgaWYgYSBjbG9ja2RvbWFpbiBpcworICogYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHRoZSBwcm92aWRlZCBuYW1lLCBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IGNsa2RtX3JlZ2lzdGVyKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTsKKworCWlmICghY2xrZG0gfHwgIWNsa2RtLT5uYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghb21hcF9jaGlwX2lzKGNsa2RtLT5vbWFwX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXB3cmRtID0gcHdyZG1fbG9va3VwKGNsa2RtLT5wd3JkbV9uYW1lKTsKKwlpZiAoIXB3cmRtKSB7CisJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogY2xrZG1fcmVnaXN0ZXIgJXM6IHBvd2VyZG9tYWluICVzICIKKwkJCSAiZG9lcyBub3QgZXhpc3RcbiIsIGNsa2RtLT5uYW1lLCBjbGtkbS0+cHdyZG1fbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljbGtkbS0+cHdyZG0gPSBwd3JkbTsKKworCW11dGV4X2xvY2soJmNsa2RtX211dGV4KTsKKwkvKiBWZXJpZnkgdGhhdCB0aGUgY2xvY2tkb21haW4gaXMgbm90IGFscmVhZHkgcmVnaXN0ZXJlZCAqLworCWlmIChfY2xrZG1fbG9va3VwKGNsa2RtLT5uYW1lKSkgeworCQlyZXQgPSAtRUVYSVNUOworCQlnb3RvIGNyX3VubG9jazsKKwl9OworCisJbGlzdF9hZGQoJmNsa2RtLT5ub2RlLCAmY2xrZG1fbGlzdCk7CisKKwlwd3JkbV9hZGRfY2xrZG0ocHdyZG0sIGNsa2RtKTsKKworCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogcmVnaXN0ZXJlZCAlc1xuIiwgY2xrZG0tPm5hbWUpOworCXJldCA9IDA7CisKK2NyX3VubG9jazoKKwltdXRleF91bmxvY2soJmNsa2RtX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogY2xrZG1fdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBjbG9ja2RvbWFpbgorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKiB0byB1bnJlZ2lzdGVyCisgKgorICogUmVtb3ZlcyBhIGNsb2NrZG9tYWluIGZyb20gdGhlIGludGVybmFsIGNsb2NrZG9tYWluIGxpc3QuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIGNsa2RtIGFyZ3VtZW50IGlzIE5VTEwuCisgKi8KK2ludCBjbGtkbV91bnJlZ2lzdGVyKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJaWYgKCFjbGtkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwd3JkbV9kZWxfY2xrZG0oY2xrZG0tPnB3cmRtLCBjbGtkbSk7CisKKwltdXRleF9sb2NrKCZjbGtkbV9tdXRleCk7CisJbGlzdF9kZWwoJmNsa2RtLT5ub2RlKTsKKwltdXRleF91bmxvY2soJmNsa2RtX211dGV4KTsKKworCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogdW5yZWdpc3RlcmVkICVzXG4iLCBjbGtkbS0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjbGtkbV9sb29rdXAgLSBsb29rIHVwIGEgY2xvY2tkb21haW4gYnkgbmFtZSwgcmV0dXJuIGEgcG9pbnRlcgorICogQG5hbWU6IG5hbWUgb2YgY2xvY2tkb21haW4KKyAqCisgKiBGaW5kIGEgcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbiBieSBpdHMgbmFtZS4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZQorICogc3RydWN0IGNsb2NrZG9tYWluIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCAqdGVtcF9jbGtkbTsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwljbGtkbSA9IE5VTEw7CisKKwltdXRleF9sb2NrKCZjbGtkbV9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wX2Nsa2RtLCAmY2xrZG1fbGlzdCwgbm9kZSkgeworCQlpZiAoIXN0cmNtcChuYW1lLCB0ZW1wX2Nsa2RtLT5uYW1lKSkgeworCQkJY2xrZG0gPSB0ZW1wX2Nsa2RtOworCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZjbGtkbV9tdXRleCk7CisKKwlyZXR1cm4gY2xrZG07Cit9CisKKy8qKgorICogY2xrZG1fZm9yX2VhY2ggLSBjYWxsIGZ1bmN0aW9uIG9uIGVhY2ggcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbgorICogQGZuOiBjYWxsYmFjayBmdW5jdGlvbiAqCisgKgorICogQ2FsbCB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gZm9yIGVhY2ggcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbi4KKyAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwKKyAqIG91dCBlYXJseSBmcm9tIHRoZSBpdGVyYXRvci4gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aAorICogdGhlIGNsa2RtX211dGV4IGhlbGQsIHNvIG5vIGNsb2NrZG9tYWluIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24KKyAqIGZ1bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIGNhbGxiYWNrLCBhbHRob3VnaCBoYXJkd2FyZQorICogY2xvY2tkb21haW4gY29udHJvbCBmdW5jdGlvbnMgYXJlIGZpbmUuICBSZXR1cm5zIHRoZSBsYXN0IHJldHVybgorICogdmFsdWUgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgYmUgMCBmb3Igc3VjY2VzcyBvcgorICogYW55dGhpbmcgZWxzZSB0byBpbmRpY2F0ZSBmYWlsdXJlOyBvciAtRUlOVkFMIGlmIHRoZSBmdW5jdGlvbiBwb2ludGVyCisgKiBpcyBudWxsLgorICovCitpbnQgY2xrZG1fZm9yX2VhY2goaW50ICgqZm4pKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pKQoreworCXN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG07CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWZuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmNsa2RtX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa2RtLCAmY2xrZG1fbGlzdCwgbm9kZSkgeworCQlyZXQgPSAoKmZuKShjbGtkbSk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjbGtkbV9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgorICogY2xrZG1fZ2V0X3B3cmRtIC0gcmV0dXJuIGEgcHRyIHRvIHRoZSBwd3JkbSB0aGF0IHRoaXMgY2xrZG0gcmVzaWRlcyBpbgorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBwb3dlcmRvbWFpbiB0aGF0IHRoZSBzcGVjaWZpZWQgY2xvY2tkb21haW4KKyAqICdjbGtkbScgZXhpc3RzIGluLCBvciByZXR1cm5zIE5VTEwgaWYgY2xrZG0gYXJndW1lbnQgaXMgTlVMTC4KKyAqLworc3RydWN0IHBvd2VyZG9tYWluICpjbGtkbV9nZXRfcHdyZG0oc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlpZiAoIWNsa2RtKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBjbGtkbS0+cHdyZG07Cit9CisKKworLyogSGFyZHdhcmUgY2xvY2tkb21haW4gY29udHJvbCAqLworCisvKioKKyAqIG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkIC0gcmVhZCB0aGUgY2xrZG0ncyBjdXJyZW50IHN0YXRlIHRyYW5zaXRpb24gbW9kZQorICogQGNsazogc3RydWN0IGNsayAqIG9mIGEgY2xvY2tkb21haW4KKyAqCisgKiBSZXR1cm4gdGhlIGNsb2NrZG9tYWluJ3MgY3VycmVudCBzdGF0ZSB0cmFuc2l0aW9uIG1vZGUgZnJvbSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgZG9tYWluIENNX0NMS1NUQ1RSTCByZWdpc3Rlci4JUmV0dXJucyAtRUlOVkFMIGlmIGNsaworICogaXMgTlVMTCBvciB0aGUgY3VycmVudCBtb2RlIHVwb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCXUzMiB2OworCisJaWYgKCFjbGtkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2ID0gY21fcmVhZF9tb2RfcmVnKGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCXYgJj0gY2xrZG0tPmNsa3RyY3RybF9tYXNrOworCXYgPj49IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayk7CisKKwlyZXR1cm4gdjsKK30KKworLyoqCisgKiBvbWFwMl9jbGtkbV9zbGVlcCAtIGZvcmNlIGNsb2NrZG9tYWluIHNsZWVwIHRyYW5zaXRpb24KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqCisgKiBJbnN0cnVjdCB0aGUgQ00gdG8gZm9yY2UgYSBzbGVlcCB0cmFuc2l0aW9uIG9uIHRoZSBzcGVjaWZpZWQKKyAqIGNsb2NrZG9tYWluICdjbGtkbScuICBSZXR1cm5zIC1FSU5WQUwgaWYgY2xrIGlzIE5VTEwgb3IgaWYKKyAqIGNsb2NrZG9tYWluIGRvZXMgbm90IHN1cHBvcnQgc29mdHdhcmUtaW5pdGlhdGVkIHNsZWVwOyAwIHVwb24KKyAqIHN1Y2Nlc3MuCisgKi8KK2ludCBvbWFwMl9jbGtkbV9zbGVlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCWlmICghY2xrZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCEoY2xrZG0tPmZsYWdzICYgQ0xLRE1fQ0FOX0ZPUkNFX1NMRUVQKSkgeworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46ICVzIGRvZXMgbm90IHN1cHBvcnQgZm9yY2luZyAiCisJCQkgInNsZWVwIHZpYSBzb2Z0d2FyZVxuIiwgY2xrZG0tPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGZvcmNpbmcgc2xlZXAgb24gJXNcbiIsIGNsa2RtLT5uYW1lKTsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCisJCWNtX3NldF9tb2RfcmVnX2JpdHMoT01BUDI0WFhfRk9SQ0VTVEFURSwKKwkJCQkgICAgY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RDVFJMKTsKKworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKworCQl1MzIgdiA9IChPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfU0xFRVAgPDwKKwkJCSBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spKTsKKworCQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywgdiwKKwkJCQkgICAgY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CisKKwl9IGVsc2UgeworCQlCVUcoKTsKKwl9OworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb21hcDJfY2xrZG1fd2FrZXVwIC0gZm9yY2UgY2xvY2tkb21haW4gd2FrZXVwIHRyYW5zaXRpb24KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqCisgKiBJbnN0cnVjdCB0aGUgQ00gdG8gZm9yY2UgYSB3YWtldXAgdHJhbnNpdGlvbiBvbiB0aGUgc3BlY2lmaWVkCisgKiBjbG9ja2RvbWFpbiAnY2xrZG0nLiAgUmV0dXJucyAtRUlOVkFMIGlmIGNsa2RtIGlzIE5VTEwgb3IgaWYgdGhlCisgKiBjbG9ja2RvbWFpbiBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbnRyb2xsZWQgd2FrZXVwOyAwIHVwb24KKyAqIHN1Y2Nlc3MuCisgKi8KK2ludCBvbWFwMl9jbGtkbV93YWtldXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlpZiAoIWNsa2RtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKGNsa2RtLT5mbGFncyAmIENMS0RNX0NBTl9GT1JDRV9XQUtFVVApKSB7CisJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogJXMgZG9lcyBub3Qgc3VwcG9ydCBmb3JjaW5nICIKKwkJCSAid2FrZXVwIHZpYSBzb2Z0d2FyZVxuIiwgY2xrZG0tPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGZvcmNpbmcgd2FrZXVwIG9uICVzXG4iLCBjbGtkbS0+bmFtZSk7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKworCQljbV9jbGVhcl9tb2RfcmVnX2JpdHMoT01BUDI0WFhfRk9SQ0VTVEFURSwKKwkJCQkgICAgICBjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOworCisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCisJCXUzMiB2ID0gKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9XQUtFVVAgPDwKKwkJCSBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spKTsKKworCQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywgdiwKKwkJCQkgICAgY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CisKKwl9IGVsc2UgeworCQlCVUcoKTsKKwl9OworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb21hcDJfY2xrZG1fYWxsb3dfaWRsZSAtIGVuYWJsZSBod3N1cCBpZGxlIHRyYW5zaXRpb25zIGZvciBjbGtkbQorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICoKKyAqIEFsbG93IHRoZSBoYXJkd2FyZSB0byBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0aGUgY2xvY2tkb21haW4gaW50bworICogYWN0aXZlIG9yIGlkbGUgc3RhdGVzLCBhcyBuZWVkZWQgYnkgZG93bnN0cmVhbSBjbG9ja3MuICBJZiB0aGUKKyAqIGNsb2NrZG9tYWluIGhhcyBhbnkgZG93bnN0cmVhbSBjbG9ja3MgZW5hYmxlZCBpbiB0aGUgY2xvY2sKKyAqIGZyYW1ld29yaywgd2tkZXAvc2xlZXBkZXAgYXV0b2RlcGVuZGVuY2llcyBhcmUgYWRkZWQ7IHRoaXMgaXMgc28KKyAqIGRldmljZSBkcml2ZXJzIGNhbiByZWFkIGFuZCB3cml0ZSB0byB0aGUgZGV2aWNlLiAgTm8gcmV0dXJuIHZhbHVlLgorICovCit2b2lkIG9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwl1MzIgdjsKKworCWlmICghY2xrZG0pCisJCXJldHVybjsKKworCWlmICghKGNsa2RtLT5mbGFncyAmIENMS0RNX0NBTl9FTkFCTEVfQVVUTykpIHsKKwkJcHJfZGVidWcoImNsb2NrOiBhdXRvbWF0aWMgaWRsZSB0cmFuc2l0aW9ucyBjYW5ub3QgYmUgZW5hYmxlZCAiCisJCQkgIm9uIGNsb2NrZG9tYWluICVzXG4iLCBjbGtkbS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGVuYWJsaW5nIGF1dG9tYXRpYyBpZGxlIHRyYW5zaXRpb25zIGZvciAlc1xuIiwKKwkJIGNsa2RtLT5uYW1lKTsKKworCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCisJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQl2ID0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQorCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOworCWVsc2UKKwkJQlVHKCk7CisKKworCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAorCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKKwkJCSAgICBjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywKKwkJCSAgICBDTV9DTEtTVENUUkwpOworfQorCisvKioKKyAqIG9tYXAyX2Nsa2RtX2RlbnlfaWRsZSAtIGRpc2FibGUgaHdzdXAgaWRsZSB0cmFuc2l0aW9ucyBmb3IgY2xrZG0KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqCisgKiBQcmV2ZW50IHRoZSBoYXJkd2FyZSBmcm9tIGF1dG9tYXRpY2FsbHkgc3dpdGNoaW5nIHRoZSBjbG9ja2RvbWFpbgorICogaW50byBpbmFjdGl2ZSBvciBpZGxlIHN0YXRlcy4gIElmIHRoZSBjbG9ja2RvbWFpbiBoYXMgZG93bnN0cmVhbQorICogY2xvY2tzIGVuYWJsZWQgaW4gdGhlIGNsb2NrIGZyYW1ld29yaywgd2tkZXAvc2xlZXBkZXAKKyAqIGF1dG9kZXBlbmRlbmNpZXMgYXJlIHJlbW92ZWQuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3ZvaWQgb21hcDJfY2xrZG1fZGVueV9pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJdTMyIHY7CisKKwlpZiAoIWNsa2RtKQorCQlyZXR1cm47CisKKwlpZiAoIShjbGtkbS0+ZmxhZ3MgJiBDTEtETV9DQU5fRElTQUJMRV9BVVRPKSkgeworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGF1dG9tYXRpYyBpZGxlIHRyYW5zaXRpb25zIGNhbm5vdCBiZSAiCisJCQkgImRpc2FibGVkIG9uICVzXG4iLCBjbGtkbS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGRpc2FibGluZyBhdXRvbWF0aWMgaWRsZSB0cmFuc2l0aW9ucyBmb3IgJXNcbiIsCisJCSBjbGtkbS0+bmFtZSk7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQorCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTzsKKwllbHNlCisJCUJVRygpOworCisJY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssCisJCQkgICAgdiA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spLAorCQkJICAgIGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCisJaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKKwkJX2Nsa2RtX2RlbF9hdXRvZGVwcyhjbGtkbSk7Cit9CisKKworLyogQ2xvY2tkb21haW4tdG8tY2xvY2sgZnJhbWV3b3JrIGludGVyZmFjZSBjb2RlICovCisKKy8qKgorICogb21hcDJfY2xrZG1fY2xrX2VuYWJsZSAtIGFkZCBhbiBlbmFibGVkIGRvd25zdHJlYW0gY2xvY2sgdG8gdGhpcyBjbGtkbQorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBlbmFibGVkIGRvd25zdHJlYW0gY2xvY2sKKyAqCisgKiBJbmNyZW1lbnQgdGhlIHVzZWNvdW50IG9mIHRoaXMgY2xvY2tkb21haW4gJ2Nsa2RtJyBhbmQgZW5zdXJlIHRoYXQKKyAqIGl0IGlzIGF3YWtlLiAgSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGJ5IGNsa19lbmFibGUoKSBjb2RlLiAgSWYgdGhlCisgKiBjbG9ja2RvbWFpbiBpcyBpbiBzb2Z0d2FyZS1zdXBlcnZpc2VkIGlkbGUgbW9kZSwgZm9yY2UgdGhlCisgKiBjbG9ja2RvbWFpbiB0byB3YWtlLiAgSWYgdGhlIGNsb2NrZG9tYWluIGlzIGluIGhhcmR3YXJlLXN1cGVydmlzZWQKKyAqIGlkbGUgbW9kZSwgYWRkIGNsa2RtLXB3cmRtIGF1dG9kZXBlbmRlbmNpZXMsIHRvIGVuc3VyZSB0aGF0IGRldmljZXMKKyAqIGluIHRoZSBjbG9ja2RvbWFpbiBjYW4gYmUgcmVhZCBmcm9tL3dyaXR0ZW4gdG8gYnkgb24tY2hpcCBwcm9jZXNzb3JzLgorICogUmV0dXJucyAtRUlOVkFMIGlmIHBhc3NlZCBudWxsIHBvaW50ZXJzOyByZXR1cm5zIDAgdXBvbiBzdWNjZXNzIG9yCisgKiBpZiB0aGUgY2xvY2tkb21haW4gaXMgaW4gaHdzdXAgaWRsZSBtb2RlLgorICovCitpbnQgb21hcDJfY2xrZG1fY2xrX2VuYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHY7CisKKwkvKgorCSAqIFhYWCBSZXdyaXRlIHRoaXMgY29kZSB0byBtYWludGFpbiBhIGxpc3Qgb2YgZW5hYmxlZAorCSAqIGRvd25zdHJlYW0gY2xvY2tzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXM/CisJICovCisKKwlpZiAoIWNsa2RtIHx8ICFjbGspCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZjbGtkbS0+dXNlY291bnQpID4gMSkKKwkJcmV0dXJuIDA7CisKKwkvKiBDbG9ja2RvbWFpbiBub3cgaGFzIG9uZSBlbmFibGVkIGRvd25zdHJlYW0gY2xvY2sgKi8KKworCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogY2xrZG0gJXM6IGNsayAlcyBub3cgZW5hYmxlZFxuIiwgY2xrZG0tPm5hbWUsCisJCSBjbGstPm5hbWUpOworCisJdiA9IG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkKGNsa2RtKTsKKworCWlmICgoY3B1X2lzX29tYXAzNHh4KCkgJiYgdiA9PSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pIHx8CisJICAgIChjcHVfaXNfb21hcDI0eHgoKSAmJiB2ID09IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykpCisJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOworCWVsc2UKKwkJb21hcDJfY2xrZG1fd2FrZXVwKGNsa2RtKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlIC0gcmVtb3ZlIGFuIGVuYWJsZWQgZG93bnN0cmVhbSBjbG9jayBmcm9tIHRoaXMgY2xrZG0KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgZGlzYWJsZWQgZG93bnN0cmVhbSBjbG9jaworICoKKyAqIERlY3JlbWVudCB0aGUgdXNlY291bnQgb2YgdGhpcyBjbG9ja2RvbWFpbiAnY2xrZG0nLiBJbnRlbmRlZCB0byBiZQorICogY2FsbGVkIGJ5IGNsa19kaXNhYmxlKCkgY29kZS4gIElmIHRoZSB1c2Vjb3VudCBnb2VzIHRvIDAsIHB1dCB0aGUKKyAqIGNsb2NrZG9tYWluIHRvIHNsZWVwIChzb2Z0d2FyZS1zdXBlcnZpc2VkIG1vZGUpIG9yIHJlbW92ZSB0aGUKKyAqIGNsa2RtLXB3cmRtIGF1dG9kZXBlbmRlbmNpZXMgKGhhcmR3YXJlLXN1cGVydmlzZWQgbW9kZSkuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIHBhc3NlZCBudWxsIHBvaW50ZXJzOyAtRVJBTkdFIGlmIHRoZSBjbGtkbSB1c2Vjb3VudAorICogdW5kZXJmbG93cyBhbmQgZGVidWdnaW5nIGlzIGVuYWJsZWQ7IG9yIHJldHVybnMgMCB1cG9uIHN1Y2Nlc3Mgb3IKKyAqIGlmIHRoZSBjbG9ja2RvbWFpbiBpcyBpbiBod3N1cCBpZGxlIG1vZGUuCisgKi8KK2ludCBvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHY7CisKKwkvKgorCSAqIFhYWCBSZXdyaXRlIHRoaXMgY29kZSB0byBtYWludGFpbiBhIGxpc3Qgb2YgZW5hYmxlZAorCSAqIGRvd25zdHJlYW0gY2xvY2tzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXM/CisJICovCisKKwlpZiAoIWNsa2RtIHx8ICFjbGspCisJCXJldHVybiAtRUlOVkFMOworCisjaWZkZWYgREVCVUcKKwlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPT0gMCkgeworCQlXQVJOX09OKDEpOyAvKiB1bmRlcmZsb3cgKi8KKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorI2VuZGlmCisKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmNsa2RtLT51c2Vjb3VudCkgPiAwKQorCQlyZXR1cm4gMDsKKworCS8qIEFsbCBkb3duc3RyZWFtIGNsb2NrcyBvZiB0aGlzIGNsb2NrZG9tYWluIGFyZSBub3cgZGlzYWJsZWQgKi8KKworCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogY2xrZG0gJXM6IGNsayAlcyBub3cgZGlzYWJsZWRcbiIsIGNsa2RtLT5uYW1lLAorCQkgY2xrLT5uYW1lKTsKKworCXYgPSBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChjbGtkbSk7CisKKwlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHYgPT0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSB8fAorCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKQorCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKKwllbHNlCisJCW9tYXAyX2Nsa2RtX3NsZWVwKGNsa2RtKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWlucy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDg2ZGNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMuaApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIE9NQVAyLzMgY2xvY2tkb21haW5zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS0RPTUFJTlNfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tET01BSU5TX0gKKworI2luY2x1ZGUgPG1hY2gvY2xvY2tkb21haW4uaD4KKworLyoKKyAqIE9NQVAyLzMtY29tbW9uIGNsb2NrZG9tYWlucworICovCisKKy8qIFRoaXMgaXMgYW4gaW1wbGljaXQgY2xvY2tkb21haW4gLSBpdCBpcyBuZXZlciBkZWZpbmVkIGFzIHN1Y2ggaW4gVFJNICovCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHdrdXBfY2xrZG0gPSB7CisJLm5hbWUJCT0gIndrdXBfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gIndrdXBfcHdyZG0iLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwgQ0hJUF9JU19PTUFQMzQzMCksCit9OworCisvKgorICogMjQyMC1vbmx5IGNsb2NrZG9tYWlucworICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKQorCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdV8yNDIwX2Nsa2RtID0geworCS5uYW1lCQk9ICJtcHVfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gIm1wdV9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfTVBVX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBpdmExXzI0MjBfY2xrZG0gPSB7CisJLm5hbWUJCT0gIml2YTFfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImRzcF9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjQyMF9BVVRPU1RBVEVfSVZBX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworI2VuZGlmICAvKiBDT05GSUdfQVJDSF9PTUFQMjQyMCAqLworCisKKy8qCisgKiAyNDMwLW9ubHkgY2xvY2tkb21haW5zCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzI0MzBfY2xrZG0gPSB7CisJLm5hbWUJCT0gIm1wdV9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAibXB1X3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9NUFVfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1kbV9jbGtkbSA9IHsKKwkubmFtZQkJPSAibWRtX2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJtZG1fcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0MzBfQVVUT1NUQVRFX01ETV9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKK307CisKKyNlbmRpZiAgICAvKiBDT05GSUdfQVJDSF9PTUFQMjQzMCAqLworCisKKy8qCisgKiAyNFhYLW9ubHkgY2xvY2tkb21haW5zCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNwX2Nsa2RtID0geworCS5uYW1lCQk9ICJkc3BfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImRzcF9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNQX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBnZnhfMjR4eF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZ2Z4X2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJnZnhfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0dGWF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sM18yNHh4X2Nsa2RtID0geworCS5uYW1lCQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MM19NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8yNHh4X2Nsa2RtID0geworCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MNF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNzXzI0eHhfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRzc19jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAiY29yZV9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNTX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAorfTsKKworI2VuZGlmICAgLyogQ09ORklHX0FSQ0hfT01BUDI0WFggKi8KKworCisvKgorICogMzR4eCBjbG9ja2RvbWFpbnMKKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtcHVfMzR4eF9jbGtkbSA9IHsKKwkubmFtZQkJPSAibXB1X2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJtcHVfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAgfCBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9NUFVfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG5lb25fY2xrZG0gPSB7CisJLm5hbWUJCT0gIm5lb25fY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gIm5lb25fcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX05FT05fTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGl2YTJfY2xrZG0gPSB7CisJLm5hbWUJCT0gIml2YTJfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gIml2YTJfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0lWQTJfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGdmeF8zNDMwZXMxX2Nsa2RtID0geworCS5uYW1lCQk9ICJnZnhfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImdmeF9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMEVTMV9DTEtUUkNUUkxfR0ZYX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzEpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBzZ3hfY2xrZG0gPSB7CisJLm5hbWUJCT0gInNneF9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAic2d4X3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9TR1hfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMiksCit9OworCisvKgorICogVGhlIGRpZS10by1kaWUgY2xvY2tkb21haW4gd2FzIGRvY3VtZW50ZWQgaW4gdGhlIDM0eHggRVMxIFRSTSwgYnV0CisgKiB0aGVuIHRoYXQgaW5mb3JtYXRpb24gd2FzIHJlbW92ZWQgZnJvbSB0aGUgMzR4eCBFUzIrIFRSTS4gIEl0IGlzCisgKiB1bmNsZWFyIHdoZXRoZXIgdGhlIGNvcmUgaXMgc3RpbGwgdGhlcmUsIGJ1dCB0aGUgY2xvY2tkb21haW4gbG9naWMKKyAqIGlzIHRoZXJlLCBhbmQgbXVzdCBiZSBwcm9ncmFtbWVkIHRvIGFuIGFwcHJvcHJpYXRlIHN0YXRlIGlmIHRoZQorICogQ09SRSBjbG9ja2RvbWFpbiBpcyB0byBiZWNvbWUgaW5hY3RpdmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZDJkX2Nsa2RtID0geworCS5uYW1lCQk9ICJkMmRfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImNvcmVfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBFUzFfQ0xLVFJDVFJMX0QyRF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sM18zNHh4X2Nsa2RtID0geworCS5uYW1lCQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9MM19NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8zNHh4X2Nsa2RtID0geworCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9MNF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNzXzM0eHhfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRzc19jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAiZHNzX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9EU1NfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNhbV9jbGtkbSA9IHsKKwkubmFtZQkJPSAiY2FtX2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJjYW1fcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0NBTV9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gdXNiaG9zdF9jbGtkbSA9IHsKKwkubmFtZQkJPSAidXNiaG9zdF9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAidXNiaG9zdF9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMEVTMl9DTEtUUkNUUkxfVVNCSE9TVF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gcGVyX2Nsa2RtID0geworCS5uYW1lCQk9ICJwZXJfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gInBlcl9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfUEVSX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBlbXVfY2xrZG0gPSB7CisJLm5hbWUJCT0gImVtdV9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAiZW11X3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0VOQUJMRV9BVVRPIHwgQ0xLRE1fQ0FOX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9FTVVfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCisjZW5kaWYgICAvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLworCisvKgorICogQ2xvY2tkb21haW4tcG93ZXJkb21haW4gaHdzdXAgZGVwZW5kZW5jaWVzICgzNFhYIG9ubHkpCisgKi8KKworc3RhdGljIHN0cnVjdCBjbGtkbV9wd3JkbV9hdXRvZGVwIGNsa2RtX3B3cmRtX2F1dG9kZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAiaXZhMl9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0KK307CisKKy8qCisgKgorICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsb2NrZG9tYWluc19vbWFwW10gPSB7CisKKwkmd2t1cF9jbGtkbSwKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCisJJm1wdV8yNDIwX2Nsa2RtLAorCSZpdmExXzI0MjBfY2xrZG0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCisJJm1wdV8yNDMwX2Nsa2RtLAorCSZtZG1fY2xrZG0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisJJmRzcF9jbGtkbSwKKwkmZ2Z4XzI0eHhfY2xrZG0sCisJJmNvcmVfbDNfMjR4eF9jbGtkbSwKKwkmY29yZV9sNF8yNHh4X2Nsa2RtLAorCSZkc3NfMjR4eF9jbGtkbSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKwkmbXB1XzM0eHhfY2xrZG0sCisJJm5lb25fY2xrZG0sCisJJml2YTJfY2xrZG0sCisJJmdmeF8zNDMwZXMxX2Nsa2RtLAorCSZzZ3hfY2xrZG0sCisJJmQyZF9jbGtkbSwKKwkmY29yZV9sM18zNHh4X2Nsa2RtLAorCSZjb3JlX2w0XzM0eHhfY2xrZG0sCisJJmRzc18zNHh4X2Nsa2RtLAorCSZjYW1fY2xrZG0sCisJJnVzYmhvc3RfY2xrZG0sCisJJnBlcl9jbGtkbSwKKwkmZW11X2Nsa2RtLAorI2VuZGlmCisKKwlOVUxMLAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMjR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTI0eHguaAppbmRleCAyMGFjMzgxLi4xMDk4ZWNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMjR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmgKQEAgLTYzLDcgKzYzLDggQEAKICNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX01QVV9NQVNLCQkJKDB4MWYgPDwgMCkKIAogLyogQ01fQ0xLU1RDVFJMX01QVSAqLwotI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfTVBVCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9NUFVfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9NUFVfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0ZDTEtFTjFfQ09SRSBzcGVjaWZpYyBiaXRzKi8KICNkZWZpbmUgT01BUDI0WFhfRU5fVFZfU0hJRlQJCQkJMgpAQCAtMjM4LDkgKzIzOSwxMiBAQAogI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfR1BUMl9NQVNLCQkJKDB4MyA8PCAyKQogCiAvKiBDTV9DTEtTVENUUkxfQ09SRSAqLwotI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNTCQkJCSgxIDw8IDIpCi0jZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9MNAkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfTDMJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0RTU19TSElGVAkJCTIKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0RTU19NQVNLCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0w0X1NISUZUCQkJMQorI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfTDRfTUFTSwkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9MM19TSElGVAkJCTAKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0wzX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU5fR0ZYICovCiAjZGVmaW5lIE9NQVAyNFhYX0VOXzNEX1NISUZUCQkJCTIKQEAgLTI1NSw3ICsyNTksOCBAQAogLyogQ01fQ0xLU0VMX0dGWCBzcGVjaWZpYyBiaXRzICovCiAKIC8qIENNX0NMS1NUQ1RSTF9HRlggKi8KLSNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0dGWAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfR0ZYX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfR0ZYX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU5fV0tVUCBzcGVjaWZpYyBiaXRzICovCiAKQEAgLTM2Nyw4ICszNzIsMTAgQEAKICNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0RTUF9NQVNLCQkJKDB4MWYgPDwgMCkKIAogLyogQ01fQ0xLU1RDVFJMX0RTUCAqLwotI2RlZmluZSBPTUFQMjQyMF9BVVRPU1RBVEVfSVZBCQkJCSgxIDw8IDgpCi0jZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9EU1AJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDI0MjBfQVVUT1NUQVRFX0lWQV9TSElGVAkJCTgKKyNkZWZpbmUgT01BUDI0MjBfQVVUT1NUQVRFX0lWQV9NQVNLCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0RTUF9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0RTUF9NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fRkNMS0VOX01ETSAqLwogLyogMjQzMCBvbmx5ICovCkBAIC0zOTYsNiArNDAzLDcgQEAKIAogLyogQ01fQ0xLU1RDVFJMX01ETSAqLwogLyogMjQzMCBvbmx5ICovCi0jZGVmaW5lIE9NQVAyNDMwX0FVVE9TVEFURV9NRE0JCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDI0MzBfQVVUT1NUQVRFX01ETV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDI0MzBfQVVUT1NUQVRFX01ETV9NQVNLCQkJKDEgPDwgMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaAppbmRleCBlZTRjMGNhLi4yMTlmNWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgKQEAgLTk2LDcgKzk2LDggQEAKICNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX0lWQTJfTUFTSwkJCSgweDMgPDwgMCkKIAogLyogQ01fQ0xLU1RTVF9JVkEyICovCi0jZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0lWQTIJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9JVkEyX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9JVkEyX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9SRVZJU0lPTiBzcGVjaWZpYyBiaXRzICovCiAKQEAgLTE0MCw3ICsxNDEsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfTVBVX01BU0sJCQkoMHgzIDw8IDApCiAKIC8qIENNX0NMS1NUU1RfTVBVICovCi0jZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX01QVQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX01QVV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfTVBVX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU4xX0NPUkUgc3BlY2lmaWMgYml0cyAqLwogCkBAIC0zMDAsOSArMzAyLDEyIEBACiAjZGVmaW5lIE9NQVAzNDMwX0NMS1RSQ1RSTF9MM19NQVNLCQkJKDB4MyA8PCAwKQogCiAvKiBDTV9DTEtTVFNUX0NPUkUgKi8KLSNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLQUNUSVZJVFlfRDJECQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfTDQJCQkJKDEgPDwgMSkKLSNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfTDMJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLQUNUSVZJVFlfRDJEX1NISUZUCQkyCisjZGVmaW5lIE9NQVAzNDMwRVMxX0NMS0FDVElWSVRZX0QyRF9NQVNLCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9MNF9TSElGVAkJCTEKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfTDRfTUFTSwkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0wzX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9MM19NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fRkNMS0VOX0dGWCAqLwogI2RlZmluZSBPTUFQMzQzMEVTMV9FTl8zRAkJCQkoMSA8PCAyKQpAQCAtMzIzLDcgKzMyOCw4IEBACiAjZGVmaW5lIE9NQVAzNDMwRVMxX0NMS1RSQ1RSTF9HRlhfTUFTSwkJCSgweDMgPDwgMCkKIAogLyogQ01fQ0xLU1RTVF9HRlggKi8KLSNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLQUNUSVZJVFlfR0ZYCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLQUNUSVZJVFlfR0ZYX1NISUZUCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMxX0NMS0FDVElWSVRZX0dGWF9NQVNLCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU5fU0dYICovCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1NHWF9TSElGVAkJCTEKQEAgLTMzMyw2ICszMzksMTQgQEAKICNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLU0VMX1NHWF9TSElGVAkJCTAKICNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLU0VMX1NHWF9NQVNLCQkJKDB4NyA8PCAwKQogCisvKiBDTV9DTEtTVENUUkxfU0dYICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9TR1hfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9TR1hfTUFTSwkJCSgweDMgPDwgMCkKKworLyogQ01fQ0xLU1RTVF9TR1ggKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLQUNUSVZJVFlfU0dYX1NISUZUCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NMS0FDVElWSVRZX1NHWF9NQVNLCQkoMSA8PCAwKQorCiAvKiBDTV9GQ0xLRU5fV0tVUCBzcGVjaWZpYyBiaXRzICovCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1VTSU1PQ1BfU0hJRlQJCQk5CiAKQEAgLTQ5OCw3ICs1MTIsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfRFNTX01BU0sJCQkoMHgzIDw8IDApCiAKIC8qIENNX0NMS1NUU1RfRFNTICovCi0jZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0RTUwkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0RTU19TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfRFNTX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU5fQ0FNIHNwZWNpZmljIGJpdHMgKi8KIApAQCAtNTIyLDcgKzUzNyw4IEBACiAjZGVmaW5lIE9NQVAzNDMwX0NMS1RSQ1RSTF9DQU1fTUFTSwkJCSgweDMgPDwgMCkKIAogLyogQ01fQ0xLU1RTVF9DQU0gKi8KLSNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfQ0FNCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfQ0FNX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9DQU1fTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0ZDTEtFTl9QRVIgc3BlY2lmaWMgYml0cyAqLwogCkBAIC01OTgsNyArNjE0LDggQEAKICNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX1BFUl9NQVNLCQkJKDB4MyA8PCAwKQogCiAvKiBDTV9DTEtTVFNUX1BFUiAqLwotI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9QRVIJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9QRVJfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX1BFUl9NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fQ0xLU0VMMV9FTVUgKi8KICNkZWZpbmUgT01BUDM0MzBfRElWX0RQTEw0X1NISUZUCQkJMjQKQEAgLTYyMyw3ICs2NDAsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfRU1VX01BU0sJCQkoMHgzIDw8IDApCiAKIC8qIENNX0NMS1NUU1RfRU1VICovCi0jZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0VNVQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0VNVV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfRU1VX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9DTEtTRUwyX0VNVSBzcGVjaWZpYyBiaXRzICovCiAjZGVmaW5lIE9NQVAzNDMwX0NPUkVfRFBMTF9FTVVfTVVMVF9TSElGVAkJOApAQCAtNjczLDYgKzY5MSw4IEBACiAjZGVmaW5lIE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9VU0JIT1NUX1NISUZUCQkwCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9VU0JIT1NUX01BU0sJCSgzIDw8IDApCiAKLQorLyogQ01fQ0xLU1RTVF9VU0JIT1NUICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NMS0FDVElWSVRZX1VTQkhPU1RfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLQUNUSVZJVFlfVVNCSE9TVF9NQVNLCQkoMSA8PCAwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20uaAppbmRleCA4N2E0NGM3Li42NWZkZjc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oCkBAIC0xOCw3ICsxOCw3IEBACiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwogI2RlZmluZSBPTUFQX0NNX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCQlcCi0JKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDJfQ01fQkFTRSArIChtb2R1bGUpICsgKHJlZykpCisJCQlJT19BRERSRVNTKE9NQVAyX0NNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQogI2Vsc2UKICNkZWZpbmUgT01BUDI0MjBfQ01fUkVHQUREUihtb2R1bGUsIHJlZykJCQkJXAogCQkJSU9fQUREUkVTUyhPTUFQMjQyMF9DTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggMmVlOTU0YS4uOTBhZjJhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTIzLDUwICsyMyw3IEBACiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+Ci0KLSNpZglkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQotCi0jZGVmaW5lIE9NQVAyX0kyQ19CQVNFMgkJMHg0ODA3MjAwMAotI2RlZmluZSBPTUFQMl9JMkNfSU5UMgkJNTcKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfcmVzb3VyY2VzMltdID0gewotCXsKLQkJLnN0YXJ0CQk9IE9NQVAyX0kyQ19CQVNFMiwKLQkJLmVuZAkJPSBPTUFQMl9JMkNfQkFTRTIgKyAweDNmLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7Ci0JCS5zdGFydAkJPSBPTUFQMl9JMkNfSU5UMiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2kyY19kZXZpY2UyID0gewotCS5uYW1lICAgICAgICAgICA9ICJpMmNfb21hcCIsCi0JLmlkICAgICAgICAgICAgID0gMiwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlczIpLAotCS5yZXNvdXJjZQk9IGkyY19yZXNvdXJjZXMyLAotfTsKLQotLyogU2VlIGFsc28gYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyBmb3IgZmlyc3QgSTJDIG9uIDI0eHggKi8KLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkKLXsKLQkvKiBSRVZJU0lUOiBTZWNvbmQgSTJDIG5vdCBpbiB1c2Ugb24gSDQ/ICovCi0JaWYgKG1hY2hpbmVfaXNfb21hcF9oNCgpKQotCQlyZXR1cm47Ci0KLQlpZiAoIWNwdV9pc19vbWFwMjQzMCgpKSB7Ci0JCW9tYXBfY2ZnX3JlZyhKMTVfMjRYWF9JMkMyX1NDTCk7Ci0JCW9tYXBfY2ZnX3JlZyhIMTlfMjRYWF9JMkMyX1NEQSk7Ci0JfQotCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfaTJjX2RldmljZTIpOwotfQotCi0jZWxzZQotCi1zdGF0aWMgdm9pZCBvbWFwX2luaXRfaTJjKHZvaWQpIHt9Ci0KLSNlbmRpZgorI2luY2x1ZGUgPG1hY2gvZWFjLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0RTUCkgfHwgZGVmaW5lZChDT05GSUdfT01BUF9EU1BfTU9EVUxFKQogI2RlZmluZSBPTUFQMl9NQk9YX0JBU0UJCUlPX0FERFJFU1MoT01BUDI0WFhfTUFJTEJPWF9CQVNFKQpAQCAtMTA0LDcgKzYxLDkgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX09NQVBfU1RJKQogCi0jZGVmaW5lIE9NQVAyX1NUSV9CQVNFCQlJT19BRERSRVNTKDB4NDgwNjgwMDApCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKKworI2RlZmluZSBPTUFQMl9TVElfQkFTRQkJMHg0ODA2ODAwMAogI2RlZmluZSBPTUFQMl9TVElfQ0hBTk5FTF9CQVNFCTB4NTQwMDAwMDAKICNkZWZpbmUgT01BUDJfU1RJX0lSUQkJNAogCkBAIC0xMjQsNiArODMsMjUgQEAKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAogCX0KIH07CisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorCisjZGVmaW5lIE9NQVAzX1NEVElfQkFTRQkJMHg1NDUwMDAwMAorI2RlZmluZSBPTUFQM19TRFRJX0NIQU5ORUxfQkFTRQkweDU0NjAwMDAwCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3RpX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE9NQVAzX1NEVElfQkFTRSwKKwkJLmVuZAkJPSBPTUFQM19TRFRJX0JBU0UgKyAweEZGRiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUDNfU0RUSV9DSEFOTkVMX0JBU0UsCisJCS5lbmQJCT0gT01BUDNfU0RUSV9DSEFOTkVMX0JBU0UgKyBTWl8xTSAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RpX2RldmljZSA9IHsKIAkubmFtZQkJPSAic3RpIiwKQEAgLTE0MCwxMiArMTE4LDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X3N0aSh2b2lkKSB7fQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfT01BUDI0WFgpCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19TUElfT01BUDI0WFhfTU9EVUxFKQogCiAjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgogCiAjZGVmaW5lIE9NQVAyX01DU1BJMV9CQVNFCQkweDQ4MDk4MDAwCiAjZGVmaW5lIE9NQVAyX01DU1BJMl9CQVNFCQkweDQ4MDlhMDAwCisjZGVmaW5lIE9NQVAyX01DU1BJM19CQVNFCQkweDQ4MGI4MDAwCisjZGVmaW5lIE9NQVAyX01DU1BJNF9CQVNFCQkweDQ4MGJhMDAwCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfcGxhdGZvcm1fY29uZmlnIG9tYXAyX21jc3BpMV9jb25maWcgPSB7CiAJLm51bV9jcwkJPSA0LApAQCAtMTU5LDcgKzEzOSw3IEBACiAJfSwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDJfbWNzcGkxID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDJfbWNzcGkxID0gewogCS5uYW1lCQk9ICJvbWFwMl9tY3NwaSIsCiAJLmlkCQk9IDEsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9tYXAyX21jc3BpMV9yZXNvdXJjZXMpLApAQCAtMTgxLDcgKzE2MSw3IEBACiAJfSwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDJfbWNzcGkyID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDJfbWNzcGkyID0gewogCS5uYW1lCQk9ICJvbWFwMl9tY3NwaSIsCiAJLmlkCQk9IDIsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9tYXAyX21jc3BpMl9yZXNvdXJjZXMpLApAQCAtMTkxLDE2ICsxNzEsMTYyIEBACiAJfSwKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9wbGF0Zm9ybV9jb25maWcgb21hcDJfbWNzcGkzX2NvbmZpZyA9IHsKKwkubnVtX2NzCQk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXAyX21jc3BpM19yZXNvdXJjZXNbXSA9IHsKKwl7CisJLnN0YXJ0CQk9IE9NQVAyX01DU1BJM19CQVNFLAorCS5lbmQJCT0gT01BUDJfTUNTUEkzX0JBU0UgKyAweGZmLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDJfbWNzcGkzID0geworCS5uYW1lCQk9ICJvbWFwMl9tY3NwaSIsCisJLmlkCQk9IDMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9tYXAyX21jc3BpM19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG9tYXAyX21jc3BpM19yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm9tYXAyX21jc3BpM19jb25maWcsCisJfSwKK307CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX3BsYXRmb3JtX2NvbmZpZyBvbWFwMl9tY3NwaTRfY29uZmlnID0geworCS5udW1fY3MJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDJfbWNzcGk0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE9NQVAyX01DU1BJNF9CQVNFLAorCQkuZW5kCQk9IE9NQVAyX01DU1BJNF9CQVNFICsgMHhmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwMl9tY3NwaTQgPSB7CisJLm5hbWUJCT0gIm9tYXAyX21jc3BpIiwKKwkuaWQJCT0gNCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob21hcDJfbWNzcGk0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gb21hcDJfbWNzcGk0X3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDJfbWNzcGk0X2NvbmZpZywKKwl9LAorfTsKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBvbWFwX2luaXRfbWNzcGkodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpMSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTIpOworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTMpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpNCk7CisjZW5kaWYKIH0KIAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfbWNzcGkodm9pZCkge30KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1NORF9PTUFQMjRYWF9FQUMKKworI2RlZmluZSBPTUFQMl9FQUNfQkFTRQkJCTB4NDgwOTAwMDAKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwMl9lYWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUDJfRUFDX0JBU0UsCisJCS5lbmQJCT0gT01BUDJfRUFDX0JBU0UgKyAweDEwOSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwMl9lYWNfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwMjR4eC1lYWMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob21hcDJfZWFjX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gb21hcDJfZWFjX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCisJfSwKK307CisKK3ZvaWQgb21hcF9pbml0X2VhYyhzdHJ1Y3QgZWFjX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCW9tYXAyX2VhY19kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBwZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX2VhY19kZXZpY2UpOworfQorCisjZWxzZQordm9pZCBvbWFwX2luaXRfZWFjKHN0cnVjdCBlYWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpIHt9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19PTUFQX1NIQTFfTUQ1CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoYTFfbWQ1X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gT01BUDI0WFhfU0VDX1NIQTFNRDVfQkFTRSwKKwkJLmVuZAk9IE9NQVAyNFhYX1NFQ19TSEExTUQ1X0JBU0UgKyAweDY0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU5UXzI0WFhfU0hBMU1ENSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hhMV9tZDVfZGV2aWNlID0geworCS5uYW1lCQk9ICJPTUFQIFNIQTEvTUQ1IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoYTFfbWQ1X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2hhMV9tZDVfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHZvaWQgb21hcF9pbml0X3NoYTFfbWQ1KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzaGExX21kNV9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfc2hhMV9tZDUodm9pZCkgeyB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0hEUV9NQVNURVJfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSERRX01BU1RFUl9PTUFQX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQorI2RlZmluZSBPTUFQX0hEUV9CQVNFCTB4NDgwQjIwMDAKKyNlbmRpZgorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwX2hkcV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQX0hEUV9CQVNFLAorCQkuZW5kCQk9IE9NQVBfSERRX0JBU0UgKyAweDFDLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBJTlRfMjRYWF9IRFFfSVJRLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2hkcV9kZXYgPSB7CisJLm5hbWUgPSAib21hcF9oZHEiLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9tYXBfaGRxX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gb21hcF9oZHFfcmVzb3VyY2VzLAorfTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2hkcV9pbml0KHZvaWQpCit7CisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9oZHFfZGV2KTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9oZHFfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXAyX2luaXRfZGV2aWNlcyh2b2lkKQpAQCAtMjA4LDEwICszMzQsMTEgQEAKIAkvKiBwbGVhc2Uga2VlcCB0aGVzZSBjYWxscywgYW5kIHRoZWlyIGltcGxlbWVudGF0aW9ucyBhYm92ZSwKIAkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgogCSAqLwotCW9tYXBfaW5pdF9pMmMoKTsKIAlvbWFwX2luaXRfbWJveCgpOwogCW9tYXBfaW5pdF9tY3NwaSgpOworCW9tYXBfaGRxX2luaXQoKTsKIAlvbWFwX2luaXRfc3RpKCk7CisJb21hcF9pbml0X3NoYTFfbWQ1KCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKaW5kZXggYWYxMDgxYS4uNzYzYmRiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKQEAgLTksNiArOSw4IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KKyN1bmRlZiBERUJVRworCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtMTYsMjAgKzE4LDE0IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KIAotI3VuZGVmIERFQlVHCisjaW5jbHVkZSA8bWFjaC9zZHJjLmg+CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAotI2RlZmluZSBHUE1DX0JBU0UJCTB4NjgwMGEwMDAKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKLSNkZWZpbmUgR1BNQ19CQVNFCQkweDZFMDAwMDAwCi0jZW5kaWYKLQorLyogR1BNQyByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIEdQTUNfUkVWSVNJT04JCTB4MDAKICNkZWZpbmUgR1BNQ19TWVNDT05GSUcJCTB4MTAKICNkZWZpbmUgR1BNQ19TWVNTVEFUVVMJCTB4MTQKQEAgLTUxLDcgKzQ3LDYgQEAKICNkZWZpbmUgR1BNQ19DUzAJCTB4NjAKICNkZWZpbmUgR1BNQ19DU19TSVpFCQkweDMwCiAKLSNkZWZpbmUgR1BNQ19DU19OVU0JCTgKICNkZWZpbmUgR1BNQ19NRU1fU1RBUlQJCTB4MDAwMDAwMDAKICNkZWZpbmUgR1BNQ19NRU1fRU5ECQkweDNGRkZGRkZGCiAjZGVmaW5lIEJPT1RfUk9NX1NQQUNFCQkweDEwMDAwMAkvKiAxTUIgKi8KQEAgLTY0LDEyICs1OSw5IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwbWNfbWVtX2xvY2spOwogc3RhdGljIHVuc2lnbmVkCQlncG1jX2NzX21hcDsKIAotc3RhdGljIHZvaWQgX19pb21lbSAqZ3BtY19iYXNlID0KLQkodm9pZCBfX2lvbWVtICopIElPX0FERFJFU1MoR1BNQ19CQVNFKTsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKmdwbWNfY3NfYmFzZSA9Ci0JKHZvaWQgX19pb21lbSAqKSBJT19BRERSRVNTKEdQTUNfQkFTRSkgKyBHUE1DX0NTMDsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmdwbWNfYmFzZTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKmdwbWNfZmNrOworc3RhdGljIHN0cnVjdCBjbGsgKmdwbWNfbDNfY2xrOwogCiBzdGF0aWMgdm9pZCBncG1jX3dyaXRlX3JlZyhpbnQgaWR4LCB1MzIgdmFsKQogewpAQCAtODUsMTkgKzc3LDMyIEBACiB7CiAJdm9pZCBfX2lvbWVtICpyZWdfYWRkcjsKIAotCXJlZ19hZGRyID0gZ3BtY19jc19iYXNlICsgKGNzICogR1BNQ19DU19TSVpFKSArIGlkeDsKKwlyZWdfYWRkciA9IGdwbWNfYmFzZSArIEdQTUNfQ1MwICsgKGNzICogR1BNQ19DU19TSVpFKSArIGlkeDsKIAlfX3Jhd193cml0ZWwodmFsLCByZWdfYWRkcik7CiB9CiAKIHUzMiBncG1jX2NzX3JlYWRfcmVnKGludCBjcywgaW50IGlkeCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwoZ3BtY19jc19iYXNlICsgKGNzICogR1BNQ19DU19TSVpFKSArIGlkeCk7CisJdm9pZCBfX2lvbWVtICpyZWdfYWRkcjsKKworCXJlZ19hZGRyID0gZ3BtY19iYXNlICsgR1BNQ19DUzAgKyAoY3MgKiBHUE1DX0NTX1NJWkUpICsgaWR4OworCXJldHVybiBfX3Jhd19yZWFkbChyZWdfYWRkcik7CiB9CiAKKy8qIFRPRE86IEFkZCBzdXBwb3J0IGZvciBncG1jX2ZjayB0byBjbG9jayBmcmFtZXdvcmsgYW5kIHVzZSBpdCAqLwogdW5zaWduZWQgbG9uZyBncG1jX2dldF9mY2xrX3BlcmlvZCh2b2lkKQogewotCS8qIEluIHBpY29zZWNvbmRzICovCi0JcmV0dXJuIDEwMDAwMDAwMDAgLyAoKGNsa19nZXRfcmF0ZShncG1jX2ZjaykpIC8gMTAwMCk7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGdwbWNfbDNfY2xrKTsKKworCWlmIChyYXRlID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZ3BtY19sM19jbGsgbm90IGVuYWJsZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyYXRlIC89IDEwMDA7CisJcmF0ZSA9IDEwMDAwMDAwMDAgLyByYXRlOwkvKiBJbiBwaWNvc2Vjb25kcyAqLworCisJcmV0dXJuIHJhdGU7CiB9CiAKIHVuc2lnbmVkIGludCBncG1jX25zX3RvX3RpY2tzKHVuc2lnbmVkIGludCB0aW1lX25zKQpAQCAtMTEwLDYgKzExNSwxMSBAQAogCXJldHVybiAodGltZV9ucyAqIDEwMDAgKyB0aWNrX3BzIC0gMSkgLyB0aWNrX3BzOwogfQogCit1bnNpZ25lZCBpbnQgZ3BtY190aWNrc190b19ucyh1bnNpZ25lZCBpbnQgdGlja3MpCit7CisJcmV0dXJuIHRpY2tzICogZ3BtY19nZXRfZmNsa19wZXJpb2QoKSAvIDEwMDA7Cit9CisKIHVuc2lnbmVkIGludCBncG1jX3JvdW5kX25zX3RvX3RpY2tzKHVuc2lnbmVkIGludCB0aW1lX25zKQogewogCXVuc2lnbmVkIGxvbmcgdGlja3MgPSBncG1jX25zX3RvX3RpY2tzKHRpbWVfbnMpOwpAQCAtMjEwLDYgKzIyMCwxMSBAQAogCiAJR1BNQ19TRVRfT05FKEdQTUNfQ1NfQ09ORklHNSwgMjQsIDI3LCBwYWdlX2J1cnN0X2FjY2Vzcyk7CiAKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJR1BNQ19TRVRfT05FKEdQTUNfQ1NfQ09ORklHNiwgMTYsIDE5LCB3cl9kYXRhX211eF9idXMpOworCQlHUE1DX1NFVF9PTkUoR1BNQ19DU19DT05GSUc2LCAyNCwgMjgsIHdyX2FjY2Vzcyk7CisJfQorCiAJLyogY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGhhdmUgaW5pdGlhbGl6ZWQgQ09ORklHMSB0byBjb3ZlcgogCSAqIGF0IGxlYXN0IHN5bmMgdnMgYXN5bmMKIAkgKi8KQEAgLTM1MCw2ICszNjUsNyBAQAogCXNwaW5fdW5sb2NrKCZncG1jX21lbV9sb2NrKTsKIAlyZXR1cm4gcjsKIH0KK0VYUE9SVF9TWU1CT0woZ3BtY19jc19yZXF1ZXN0KTsKIAogdm9pZCBncG1jX2NzX2ZyZWUoaW50IGNzKQogewpAQCAtMzY1LDggKzM4MSw5IEBACiAJZ3BtY19jc19zZXRfcmVzZXJ2ZWQoY3MsIDApOwogCXNwaW5fdW5sb2NrKCZncG1jX21lbV9sb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0woZ3BtY19jc19mcmVlKTsKIAotdm9pZCBfX2luaXQgZ3BtY19tZW1faW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGdwbWNfbWVtX2luaXQodm9pZCkKIHsKIAlpbnQgY3M7CiAJdW5zaWduZWQgbG9uZyBib290X3JvbV9zcGFjZSA9IDA7CkBAIC0zOTYsMTIgKzQxMywzMyBAQAogdm9pZCBfX2luaXQgZ3BtY19pbml0KHZvaWQpCiB7CiAJdTMyIGw7CisJY2hhciAqY2s7CiAKLQlncG1jX2ZjayA9IGNsa19nZXQoTlVMTCwgImdwbWNfZmNrIik7IC8qIEFsd2F5cyBvbiBFTkFCTEVfT05fSU5JVCAqLwotCWlmIChJU19FUlIoZ3BtY19mY2spKQotCQlXQVJOX09OKDEpOwotCWVsc2UKLQkJY2xrX2VuYWJsZShncG1jX2Zjayk7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWNrID0gImNvcmVfbDNfY2siOworCQlpZiAoY3B1X2lzX29tYXAyNDIwKCkpCisJCQlsID0gT01BUDI0MjBfR1BNQ19CQVNFOworCQllbHNlCisJCQlsID0gT01BUDM0WFhfR1BNQ19CQVNFOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJY2sgPSAiZ3BtY19mY2siOworCQlsID0gT01BUDM0WFhfR1BNQ19CQVNFOworCX0KKworCWdwbWNfbDNfY2xrID0gY2xrX2dldChOVUxMLCBjayk7CisJaWYgKElTX0VSUihncG1jX2wzX2NsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0IEdQTUMgY2xvY2sgJXNcbiIsIGNrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZ3BtY19iYXNlID0gaW9yZW1hcChsLCBTWl80Syk7CisJaWYgKCFncG1jX2Jhc2UpIHsKKwkJY2xrX3B1dChncG1jX2wzX2Nsayk7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBHUE1DIHJlZ2lzdGVyIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCUJVR19PTihJU19FUlIoZ3BtY19sM19jbGspKTsKIAogCWwgPSBncG1jX3JlYWRfcmVnKEdQTUNfUkVWSVNJT04pOwogCXByaW50ayhLRVJOX0lORk8gIkdQTUMgcmV2aXNpb24gJWQuJWRcbiIsIChsID4+IDQpICYgMHgwZiwgbCAmIDB4MGYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCmluZGV4IDIwOTE3N2MuLmJmNDVmZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKQEAgLTE4LDI0ICsxOCwxNSBAQAogCiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KIAorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9jb250cm9sLmg+CiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCi0jZGVmaW5lIFRBUF9CQVNFCWlvX3AydigweDQ4MDE0MDAwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKLSNkZWZpbmUgVEFQX0JBU0UJaW9fcDJ2KDB4NDkwMEEwMDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQotI2RlZmluZSBUQVBfQkFTRQlpb19wMnYoMHg0ODMwQTAwMCkKLSNlbmRpZgorc3RhdGljIHUzMiBjbGFzczsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnRhcF9iYXNlOworc3RhdGljIHUxNiB0YXBfcHJvZF9pZDsKIAogI2RlZmluZSBPTUFQX1RBUF9JRENPREUJCTB4MDIwNAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCi0jZGVmaW5lIE9NQVBfVEFQX1BST0RfSUQJMHgwMjEwCi0jZWxzZQotI2RlZmluZSBPTUFQX1RBUF9QUk9EX0lECTB4MDIwOAotI2VuZGlmCi0KICNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzAJMHgwMjE4CiAjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8xCTB4MDIxQwogI2RlZmluZSBPTUFQX1RBUF9ESUVfSURfMgkweDAyMjAKQEAgLTk0LDE4ICs4NSwyNCBAQAogCSAqIGl0IG1lYW5zIGl0cyBDb3J0ZXggcjBwMCB3aGljaCBpcyAzNDMwIEVTMQogCSAqLwogCWlmICgoKChjcHVpZCA+PiA0KSAmIDB4RkZGKSA9PSAweEMwOCkgJiYgKChjcHVpZCAmIDB4RikgPT0gMHgwKSkgeworCisJCWlmIChyZWcgPT0gdGFwX3Byb2RfaWQpIHsKKwkJCXJlZ3ZhbCA9IDB4MDAwRjAwRjA7CisJCQlnb3RvIG91dDsKKwkJfQorCiAJCXN3aXRjaCAocmVnKSB7CiAJCWNhc2UgT01BUF9UQVBfSURDT0RFICA6IHJlZ3ZhbCA9IDB4MEI3QUUwMkY7IGJyZWFrOwogCQkvKiBNYWtpbmcgRGV2VHlwZSBhcyAweEYgaW4gRVMxIHRvIGRpZmZlciBmcm9tIEVTMiAqLwotCQljYXNlIE9NQVBfVEFQX1BST0RfSUQgOiByZWd2YWwgPSAweDAwMEYwMEYwOyBicmVhazsKIAkJY2FzZSBPTUFQX1RBUF9ESUVfSURfMDogcmVndmFsID0gMHgwMTAwMDAwMDsgYnJlYWs7CiAJCWNhc2UgT01BUF9UQVBfRElFX0lEXzE6IHJlZ3ZhbCA9IDB4MTAxMmQ2ODc7IGJyZWFrOwogCQljYXNlIE9NQVBfVEFQX0RJRV9JRF8yOglyZWd2YWwgPSAweDAwMDAwMDAwOyBicmVhazsKIAkJY2FzZSBPTUFQX1RBUF9ESUVfSURfMzoJcmVndmFsID0gMHgyZDJjMDAwMDsgYnJlYWs7CiAJCX0KIAl9IGVsc2UKLQkJcmVndmFsID0gX19yYXdfcmVhZGwoVEFQX0JBU0UgKyByZWcpOworCQlyZWd2YWwgPSBfX3Jhd19yZWFkbCh0YXBfYmFzZSArIHJlZyk7CiAKK291dDoKIAlyZXR1cm4gcmVndmFsOwogCiB9CkBAIC0yMDQsNyArMjAxLDcgQEAKIAl1OCAgcmV2OwogCiAJaWRjb2RlID0gcmVhZF90YXBfcmVnKE9NQVBfVEFQX0lEQ09ERSk7Ci0JcHJvZF9pZCA9IHJlYWRfdGFwX3JlZyhPTUFQX1RBUF9QUk9EX0lEKTsKKwlwcm9kX2lkID0gcmVhZF90YXBfcmVnKHRhcF9wcm9kX2lkKTsKIAloYXdrZXllID0gKGlkY29kZSA+PiAxMikgJiAweGZmZmY7CiAJcmV2ID0gKGlkY29kZSA+PiAyOCkgJiAweDBmOwogCWRldl90eXBlID0gKHByb2RfaWQgPj4gMTYpICYgMHgwZjsKQEAgLTI2OSwzICsyNjYsMTMgQEAKIAogfQogCit2b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc190YXAoc3RydWN0IG9tYXBfZ2xvYmFscyAqb21hcDJfZ2xvYmFscykKK3sKKwljbGFzcyA9IG9tYXAyX2dsb2JhbHMtPmNsYXNzOworCXRhcF9iYXNlID0gb21hcDJfZ2xvYmFscy0+dGFwOworCisJaWYgKGNsYXNzID09IDB4MzQzMCkKKwkJdGFwX3Byb2RfaWQgPSAweDAyMTA7CisJZWxzZQorCQl0YXBfcHJvZF9pZCA9IDB4MDIwODsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwppbmRleCA3YzNkNjI4Li41ZWE2NGY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCkBAIC00LDggKzQsMTEgQEAKICAqIE9NQVAyIEkvTyBtYXBwaW5nIGNvZGUKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KLSAqIEF1dGhvcjogSnVoYSBZcmr2bOQgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KLSAqIFVwZGF0ZWQgbWFwIGRlc2MgdG8gYWRkIDI0MzAgc3VwcG9ydCA6IDx4MGtoYXNpbUB0aS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBBdXRob3I6CisgKglKdWhhIFlyam9sYSA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICoJU3llZCBLaGFzaW0gPHgwa2hhc2ltQHRpLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTIzLDE5ICsyNiwyNiBAQAogCiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgorI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgogCi1leHRlcm4gdm9pZCBvbWFwX3NyYW1faW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgb21hcDJfY2xrX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBvbWFwMl9jaGVja19yZXZpc2lvbih2b2lkKTsKLWV4dGVybiB2b2lkIG9tYXAyX2luaXRfbWVtb3J5KHZvaWQpOwotZXh0ZXJuIHZvaWQgZ3BtY19pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgb21hcGZiX3Jlc2VydmVfc2RyYW0odm9pZCk7CisjaW5jbHVkZSAibWVtb3J5LmgiCisKKyNpbmNsdWRlICJjbG9jay5oIgorCisjaW5jbHVkZSA8bWFjaC9wb3dlcmRvbWFpbi5oPgorCisjaW5jbHVkZSAicG93ZXJkb21haW5zLmgiCisKKyNpbmNsdWRlIDxtYWNoL2Nsb2NrZG9tYWluLmg+CisjaW5jbHVkZSAiY2xvY2tkb21haW5zLmgiCiAKIC8qCiAgKiBUaGUgbWFjaGluZSBzcGVjaWZpYyBjb2RlIG1heSBwcm92aWRlIHRoZSBleHRyYSBtYXBwaW5nIGJlc2lkZXMgdGhlCiAgKiBkZWZhdWx0IG1hcHBpbmcgcHJvdmlkZWQgaGVyZS4KICAqLwotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMl9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAyNHh4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLnZpcnR1YWwJPSBMM18yNFhYX1ZJUlQsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMM18yNFhYX1BIWVMpLApAQCAtNDMsMjUgKzUzLDE1IEBACiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sCiAJewotCQkudmlydHVhbCAgICAgICAgPSBMNF8yNFhYX1ZJUlQsCi0JCS5wZm4gICAgICAgICAgICA9IF9fcGh5c190b19wZm4oTDRfMjRYWF9QSFlTKSwKLQkJLmxlbmd0aCAgICAgICAgID0gTDRfMjRYWF9TSVpFLAotCQkudHlwZSAgICAgICAgICAgPSBNVF9ERVZJQ0UKLQl9LAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCi0JewotCQkudmlydHVhbAk9IEw0X1dLXzI0M1hfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEw0X1dLXzI0M1hfUEhZUyksCi0JCS5sZW5ndGgJCT0gTDRfV0tfMjQzWF9TSVpFLAorCQkudmlydHVhbAk9IEw0XzI0WFhfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEw0XzI0WFhfUEhZUyksCisJCS5sZW5ndGgJCT0gTDRfMjRYWF9TSVpFLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LAotCXsKLQkJLnZpcnR1YWwJPSBPTUFQMjQzWF9HUE1DX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihPTUFQMjQzWF9HUE1DX1BIWVMpLAotCQkubGVuZ3RoCQk9IE9NQVAyNDNYX0dQTUNfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwKLSNlbmRpZgorfTsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAyNDJ4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLnZpcnR1YWwJPSBEU1BfTUVNXzI0WFhfVklSVCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERTUF9NRU1fMjRYWF9QSFlTKSwKQEAgLTc5LDEyICs3OSwxMDkgQEAKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERTUF9NTVVfMjRYWF9QSFlTKSwKIAkJLmxlbmd0aAkJPSBEU1BfTU1VXzI0WFhfU0laRSwKIAkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfQorCX0sCiB9OwogCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAyNDN4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBMNF9XS18yNDNYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMNF9XS18yNDNYX1BIWVMpLAorCQkubGVuZ3RoCQk9IEw0X1dLXzI0M1hfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gT01BUDI0M1hfR1BNQ19WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDI0M1hfR1BNQ19QSFlTKSwKKwkJLmxlbmd0aAkJPSBPTUFQMjQzWF9HUE1DX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IE9NQVAyNDNYX1NEUkNfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVAyNDNYX1NEUkNfUEhZUyksCisJCS5sZW5ndGgJCT0gT01BUDI0M1hfU0RSQ19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBPTUFQMjQzWF9TTVNfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVAyNDNYX1NNU19QSFlTKSwKKwkJLmxlbmd0aAkJPSBPTUFQMjQzWF9TTVNfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKK307CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX0FSQ0hfT01BUDM0WFgKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcDM0eHhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IEwzXzM0WFhfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEwzXzM0WFhfUEhZUyksCisJCS5sZW5ndGgJCT0gTDNfMzRYWF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBMNF8zNFhYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMNF8zNFhYX1BIWVMpLAorCQkubGVuZ3RoCQk9IEw0XzM0WFhfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gTDRfV0tfMzRYWF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTDRfV0tfMzRYWF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBMNF9XS18zNFhYX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IE9NQVAzNFhYX0dQTUNfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVAzNFhYX0dQTUNfUEhZUyksCisJCS5sZW5ndGgJCT0gT01BUDM0WFhfR1BNQ19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBPTUFQMzQzWF9TTVNfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVAzNDNYX1NNU19QSFlTKSwKKwkJLmxlbmd0aAkJPSBPTUFQMzQzWF9TTVNfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gT01BUDM0M1hfU0RSQ19WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDM0M1hfU0RSQ19QSFlTKSwKKwkJLmxlbmd0aAkJPSBPTUFQMzQzWF9TRFJDX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IEw0X1BFUl8zNFhYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMNF9QRVJfMzRYWF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBMNF9QRVJfMzRYWF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBMNF9FTVVfMzRYWF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTDRfRU1VXzM0WFhfUEhZUyksCisJCS5sZW5ndGgJCT0gTDRfRU1VXzM0WFhfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKK307CisjZW5kaWYKKwogdm9pZCBfX2luaXQgb21hcDJfbWFwX2NvbW1vbl9pbyh2b2lkKQogewotCWlvdGFibGVfaW5pdChvbWFwMl9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyX2lvX2Rlc2MpKTsKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKQorCWlvdGFibGVfaW5pdChvbWFwMjR4eF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyNHh4X2lvX2Rlc2MpKTsKKwlpb3RhYmxlX2luaXQob21hcDI0MnhfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMjQyeF9pb19kZXNjKSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCisJaW90YWJsZV9pbml0KG9tYXAyNHh4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDI0eHhfaW9fZGVzYykpOworCWlvdGFibGVfaW5pdChvbWFwMjQzeF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyNDN4X2lvX2Rlc2MpKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKwlpb3RhYmxlX2luaXQob21hcDM0eHhfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMzR4eF9pb19kZXNjKSk7CisjZW5kaWYKIAogCS8qIE5vcm1hbGx5IGRldmljZW1hcHNfaW5pdCgpIHdvdWxkIGZsdXNoIGNhY2hlcyBhbmQgdGxiIGFmdGVyCiAJICogbWRlc2MtPm1hcF9pbygpLCBidXQgd2UgbXVzdCBhbHNvIGRvIGl0IGhlcmUgYmVjYXVzZSBvZiB0aGUgQ1BVCkBAIC0xMDEsMTIgKzE5OCw5IEBACiB2b2lkIF9faW5pdCBvbWFwMl9pbml0X2NvbW1vbl9odyh2b2lkKQogewogCW9tYXAyX211eF9pbml0KCk7CisJcHdyZG1faW5pdChwb3dlcmRvbWFpbnNfb21hcCk7CisJY2xrZG1faW5pdChjbG9ja2RvbWFpbnNfb21hcCwgY2xrZG1fcHdyZG1fYXV0b2RlcHMpOwogCW9tYXAyX2Nsa19pbml0KCk7Ci0vKgotICogTmVlZCB0byBGaXggdGhpcyBmb3IgMjQzMAotICovCi0jaWZuZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCiAJb21hcDJfaW5pdF9tZW1vcnkoKTsKLSNlbmRpZgogCWdwbWNfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKaW5kZXggMTk2YTk1Ni4uYzQwZmMzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCkBAIC0xNiwxNCArMTYsMjAgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNkZWZpbmUgSU5UQ19SRVZJU0lPTgkweDAwMDAKLSNkZWZpbmUgSU5UQ19TWVNDT05GSUcJMHgwMDEwCi0jZGVmaW5lIElOVENfU1lTU1RBVFVTCTB4MDAxNAotI2RlZmluZSBJTlRDX0NPTlRST0wJMHgwMDQ4Ci0jZGVmaW5lIElOVENfTUlSX0NMRUFSMAkweDAwODgKLSNkZWZpbmUgSU5UQ19NSVJfU0VUMAkweDAwOGMKKworLyogc2VsZWN0ZWQgSU5UQyByZWdpc3RlciBvZmZzZXRzICovCisKKyNkZWZpbmUgSU5UQ19SRVZJU0lPTgkJMHgwMDAwCisjZGVmaW5lIElOVENfU1lTQ09ORklHCQkweDAwMTAKKyNkZWZpbmUgSU5UQ19TWVNTVEFUVVMJCTB4MDAxNAorI2RlZmluZSBJTlRDX0NPTlRST0wJCTB4MDA0OAorI2RlZmluZSBJTlRDX01JUl9DTEVBUjAJCTB4MDA4OAorI2RlZmluZSBJTlRDX01JUl9TRVQwCQkweDAwOGMKKyNkZWZpbmUgSU5UQ19QRU5ESU5HX0lSUTAJMHgwMDk4CisKKy8qIE51bWJlciBvZiBJUlEgc3RhdGUgYml0cyBpbiBlYWNoIE1JUiByZWdpc3RlciAqLworI2RlZmluZSBJUlFfQklUU19QRVJfUkVHCTMyCiAKIC8qCiAgKiBPTUFQMiBoYXMgYSBudW1iZXIgb2YgZGlmZmVyZW50IGludGVycnVwdCBjb250cm9sbGVycywgZWFjaCBpbnRlcnJ1cHQKQEAgLTMyLDQ4ICszOCw1MCBAQAogICogZm9yIGVhY2ggYmFuay4uIHdoZW4gaW4gZG91YnQsIGNvbnN1bHQgdGhlIFRSTS4KICAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rIHsKLQl1bnNpZ25lZCBsb25nIGJhc2VfcmVnOworCXZvaWQgX19pb21lbSAqYmFzZV9yZWc7CiAJdW5zaWduZWQgaW50IG5yX2lycXM7CiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDQpKSkgaXJxX2JhbmtzW10gPSB7CiAJewogCQkvKiBNUFUgSU5UQyAqLwotCQkuYmFzZV9yZWcJPSBJT19BRERSRVNTKE9NQVAyNFhYX0lDX0JBU0UpLAorCQkuYmFzZV9yZWcJPSAwLAogCQkubnJfaXJxcwk9IDk2LAotCX0sIHsKLQkJLyogWFhYOiBEU1AgSU5UQyAqLwotCX0KKwl9LAogfTsKIAorLyogSU5UQyBiYW5rIHJlZ2lzdGVyIGdldC9zZXQgKi8KKworc3RhdGljIHZvaWQgaW50Y19iYW5rX3dyaXRlX3JlZyh1MzIgdmFsLCBzdHJ1Y3Qgb21hcF9pcnFfYmFuayAqYmFuaywgdTE2IHJlZykKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBiYW5rLT5iYXNlX3JlZyArIHJlZyk7Cit9CisKK3N0YXRpYyB1MzIgaW50Y19iYW5rX3JlYWRfcmVnKHN0cnVjdCBvbWFwX2lycV9iYW5rICpiYW5rLCB1MTYgcmVnKQoreworCXJldHVybiBfX3Jhd19yZWFkbChiYW5rLT5iYXNlX3JlZyArIHJlZyk7Cit9CisKIC8qIFhYWDogRklRIGFuZCBhZGRpdGlvbmFsIElOVEMgc3VwcG9ydCAob25seSBNUFUgYXQgdGhlIG1vbWVudCkgKi8KIHN0YXRpYyB2b2lkIG9tYXBfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCV9fcmF3X3dyaXRlbCgweDEsIGlycV9iYW5rc1swXS5iYXNlX3JlZyArIElOVENfQ09OVFJPTCk7CisJaW50Y19iYW5rX3dyaXRlX3JlZygweDEsICZpcnFfYmFua3NbMF0sIElOVENfQ09OVFJPTCk7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlpbnQgb2Zmc2V0ID0gKGlycSA+PiA1KSA8PCA1OworCWludCBvZmZzZXQgPSBpcnEgJiAofihJUlFfQklUU19QRVJfUkVHIC0gMSkpOwogCi0JaWYgKGlycSA+PSA2NCkgewotCQlpcnEgJT0gNjQ7Ci0JfSBlbHNlIGlmIChpcnEgPj0gMzIpIHsKLQkJaXJxICU9IDMyOwotCX0KKwlpcnEgJj0gKElSUV9CSVRTX1BFUl9SRUcgLSAxKTsKIAotCV9fcmF3X3dyaXRlbCgxIDw8IGlycSwgaXJxX2JhbmtzWzBdLmJhc2VfcmVnICsgSU5UQ19NSVJfU0VUMCArIG9mZnNldCk7CisJaW50Y19iYW5rX3dyaXRlX3JlZygxIDw8IGlycSwgJmlycV9iYW5rc1swXSwgSU5UQ19NSVJfU0VUMCArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCWludCBvZmZzZXQgPSAoaXJxID4+IDUpIDw8IDU7CisJaW50IG9mZnNldCA9IGlycSAmICh+KElSUV9CSVRTX1BFUl9SRUcgLSAxKSk7CiAKLQlpZiAoaXJxID49IDY0KSB7Ci0JCWlycSAlPSA2NDsKLQl9IGVsc2UgaWYgKGlycSA+PSAzMikgewotCQlpcnEgJT0gMzI7Ci0JfQorCWlycSAmPSAoSVJRX0JJVFNfUEVSX1JFRyAtIDEpOwogCi0JX19yYXdfd3JpdGVsKDEgPDwgaXJxLCBpcnFfYmFua3NbMF0uYmFzZV9yZWcgKyBJTlRDX01JUl9DTEVBUjAgKyBvZmZzZXQpOworCWludGNfYmFua193cml0ZV9yZWcoMSA8PCBpcnEsICZpcnFfYmFua3NbMF0sIElOVENfTUlSX0NMRUFSMCArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfbWFza19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC05Myw0NSArMTAxLDQ2IEBACiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKLQl0bXAgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlX3JlZyArIElOVENfUkVWSVNJT04pICYgMHhmZjsKLQlwcmludGsoS0VSTl9JTkZPICJJUlE6IEZvdW5kIGFuIElOVEMgYXQgMHglMDhseCAiCisJdG1wID0gaW50Y19iYW5rX3JlYWRfcmVnKGJhbmssIElOVENfUkVWSVNJT04pICYgMHhmZjsKKwlwcmludGsoS0VSTl9JTkZPICJJUlE6IEZvdW5kIGFuIElOVEMgYXQgMHglcCAiCiAJCQkgIihyZXZpc2lvbiAlbGQuJWxkKSB3aXRoICVkIGludGVycnVwdHNcbiIsCiAJCQkgYmFuay0+YmFzZV9yZWcsIHRtcCA+PiA0LCB0bXAgJiAweGYsIGJhbmstPm5yX2lycXMpOwogCi0JdG1wID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZV9yZWcgKyBJTlRDX1NZU0NPTkZJRyk7CisJdG1wID0gaW50Y19iYW5rX3JlYWRfcmVnKGJhbmssIElOVENfU1lTQ09ORklHKTsKIAl0bXAgfD0gMSA8PCAxOwkvKiBzb2Z0IHJlc2V0ICovCi0JX19yYXdfd3JpdGVsKHRtcCwgYmFuay0+YmFzZV9yZWcgKyBJTlRDX1NZU0NPTkZJRyk7CisJaW50Y19iYW5rX3dyaXRlX3JlZyh0bXAsIGJhbmssIElOVENfU1lTQ09ORklHKTsKIAotCXdoaWxlICghKF9fcmF3X3JlYWRsKGJhbmstPmJhc2VfcmVnICsgSU5UQ19TWVNTVEFUVVMpICYgMHgxKSkKKwl3aGlsZSAoIShpbnRjX2JhbmtfcmVhZF9yZWcoYmFuaywgSU5UQ19TWVNTVEFUVVMpICYgMHgxKSkKIAkJLyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUgKi87CiAKIAkvKiBFbmFibGUgYXV0b2lkbGUgKi8KLQlfX3Jhd193cml0ZWwoMSA8PCAwLCBiYW5rLT5iYXNlX3JlZyArIElOVENfU1lTQ09ORklHKTsKKwlpbnRjX2Jhbmtfd3JpdGVfcmVnKDEgPDwgMCwgYmFuaywgSU5UQ19TWVNDT05GSUcpOwogfQogCiB2b2lkIF9faW5pdCBvbWFwX2luaXRfaXJxKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBucl9pcnFzID0gMDsKKwl1bnNpZ25lZCBsb25nIG5yX29mX2lycXMgPSAwOwogCXVuc2lnbmVkIGludCBucl9iYW5rcyA9IDA7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcnFfYmFua3MpOyBpKyspIHsKIAkJc3RydWN0IG9tYXBfaXJxX2JhbmsgKmJhbmsgPSBpcnFfYmFua3MgKyBpOwogCi0JCS8qIFhYWCAqLwotCQlpZiAoIWJhbmstPmJhc2VfcmVnKQotCQkJY29udGludWU7CisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJCWJhbmstPmJhc2VfcmVnID0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjRYWF9JQ19CQVNFKTsKKwkJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCQliYW5rLT5iYXNlX3JlZyA9IE9NQVAyX0lPX0FERFJFU1MoT01BUDM0WFhfSUNfQkFTRSk7CiAKIAkJb21hcF9pcnFfYmFua19pbml0X29uZShiYW5rKTsKIAotCQlucl9pcnFzICs9IGJhbmstPm5yX2lycXM7CisJCW5yX29mX2lycXMgKz0gYmFuay0+bnJfaXJxczsKIAkJbnJfYmFua3MrKzsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJUb3RhbCBvZiAlbGQgaW50ZXJydXB0cyBvbiAlZCBhY3RpdmUgY29udHJvbGxlciVzXG4iLAotCSAgICAgICBucl9pcnFzLCBucl9iYW5rcywgbnJfYmFua3MgPiAxID8gInMiIDogIiIpOworCSAgICAgICBucl9vZl9pcnFzLCBucl9iYW5rcywgbnJfYmFua3MgPiAxID8gInMiIDogIiIpOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX2lycXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBucl9vZl9pcnFzOyBpKyspIHsKIAkJc2V0X2lycV9jaGlwKGksICZvbWFwX2lycV9jaGlwKTsKIAkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOwogCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCmluZGV4IGIyNjFmMWYuLmNhZTNlYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKQEAgLTg5LDYgKzg5LDMwIEBACiAJCQkuZGlzYWJsZQk9IG9tYXBfbWNic3BfY2xrX2Rpc2FibGUsCiAJCX0sCiAJfSwKKwl7CisJCS5jbGsgPSB7CisJCQkubmFtZQkJPSAibWNic3BfY2xrIiwKKwkJCS5pZAkJPSAzLAorCQkJLmVuYWJsZQkJPSBvbWFwX21jYnNwX2Nsa19lbmFibGUsCisJCQkuZGlzYWJsZQk9IG9tYXBfbWNic3BfY2xrX2Rpc2FibGUsCisJCX0sCisJfSwKKwl7CisJCS5jbGsgPSB7CisJCQkubmFtZQkJPSAibWNic3BfY2xrIiwKKwkJCS5pZAkJPSA0LAorCQkJLmVuYWJsZQkJPSBvbWFwX21jYnNwX2Nsa19lbmFibGUsCisJCQkuZGlzYWJsZQk9IG9tYXBfbWNic3BfY2xrX2Rpc2FibGUsCisJCX0sCisJfSwKKwl7CisJCS5jbGsgPSB7CisJCQkubmFtZQkJPSAibWNic3BfY2xrIiwKKwkJCS5pZAkJPSA1LAorCQkJLmVuYWJsZQkJPSBvbWFwX21jYnNwX2Nsa19lbmFibGUsCisJCQkuZGlzYWJsZQk9IG9tYXBfbWNic3BfY2xrX2Rpc2FibGUsCisJCX0sCisJfSwKIH07CiAKICNkZWZpbmUgb21hcF9tY2JzcF9jbGtzX3NpemUJQVJSQVlfU0laRShvbWFwX21jYnNwX2Nsa3MpCkBAIC0xMTcsMjUgKzE0MSwxNCBAQAogCQlvbWFwMl9tY2JzcDJfbXV4X3NldHVwKCk7CiB9CiAKLXN0YXRpYyBpbnQgb21hcDJfbWNic3BfY2hlY2sodW5zaWduZWQgaW50IGlkKQotewotCWlmIChpZCA+IE9NQVBfTUFYX01DQlNQX0NPVU5UIC0gMSkgewotCQlwcmludGsoS0VSTl9FUlIgIk9NQVAtTWNCU1A6IE1jQlNQJWQgZG9lc24ndCBleGlzdFxuIiwgaWQgKyAxKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IG9tYXBfbWNic3Bfb3BzIG9tYXAyX21jYnNwX29wcyA9IHsKIAkucmVxdWVzdAk9IG9tYXAyX21jYnNwX3JlcXVlc3QsCi0JLmNoZWNrCQk9IG9tYXAyX21jYnNwX2NoZWNrLAogfTsKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCi1zdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSBvbWFwMjR4eF9tY2JzcF9wZGF0YVtdID0geworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCitzdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSBvbWFwMjQyMF9tY2JzcF9wZGF0YVtdID0gewogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAyNFhYX01DQlNQMV9CQVNFLAotCQkudmlydF9iYXNlCT0gSU9fQUREUkVTUyhPTUFQMjRYWF9NQ0JTUDFfQkFTRSksCiAJCS5kbWFfcnhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDFfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFgsCiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9SWCwKQEAgLTE0NSw3ICsxNTgsNiBAQAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDI0WFhfTUNCU1AyX0JBU0UsCi0JCS52aXJ0X2Jhc2UJPSBJT19BRERSRVNTKE9NQVAyNFhYX01DQlNQMl9CQVNFKSwKIAkJLmRtYV9yeF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQMl9SWCwKIAkJLmRtYV90eF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQMl9UWCwKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1JYLApAQCAtMTU0LDE3ICsxNjYsNzAgQEAKIAkJLmNsa19uYW1lCT0gIm1jYnNwX2NsayIsCiAJfSwKIH07Ci0jZGVmaW5lIE9NQVAyNFhYX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAyNHh4X21jYnNwX3BkYXRhKQorI2RlZmluZSBPTUFQMjQyMF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwMjQyMF9tY2JzcF9wZGF0YSkKICNlbHNlCi0jZGVmaW5lIG9tYXAyNHh4X21jYnNwX3BkYXRhCQlOVUxMCi0jZGVmaW5lIE9NQVAyNFhYX01DQlNQX1BEQVRBX1NaCQkwCisjZGVmaW5lIG9tYXAyNDIwX21jYnNwX3BkYXRhCQlOVUxMCisjZGVmaW5lIE9NQVAyNDIwX01DQlNQX1BEQVRBX1NaCQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCitzdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSBvbWFwMjQzMF9tY2JzcF9wZGF0YVtdID0geworCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNFhYX01DQlNQMV9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNFhYX01DQlNQMl9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AyX1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AyX1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMl9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNDMwX01DQlNQM19CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AzX1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AzX1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQM19JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNDMwX01DQlNQNF9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A0X1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A0X1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNF9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A0X0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNDMwX01DQlNQNV9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A1X1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A1X1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNV9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A1X0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorfTsKKyNkZWZpbmUgT01BUDI0MzBfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDI0MzBfbWNic3BfcGRhdGEpCisjZWxzZQorI2RlZmluZSBvbWFwMjQzMF9tY2JzcF9wZGF0YQkJTlVMTAorI2RlZmluZSBPTUFQMjQzMF9NQ0JTUF9QREFUQV9TWgkJMAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDM0eHhfbWNic3BfcGRhdGFbXSA9IHsKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMzRYWF9NQ0JTUDFfQkFTRSwKLQkJLnZpcnRfYmFzZQk9IElPX0FERFJFU1MoT01BUDM0WFhfTUNCU1AxX0JBU0UpLAogCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1JYLAogCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1RYLAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfUlgsCkBAIC0xNzQsNyArMjM5LDYgQEAKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQMl9CQVNFLAotCQkudmlydF9iYXNlCT0gSU9fQUREUkVTUyhPTUFQMzRYWF9NQ0JTUDJfQkFTRSksCiAJCS5kbWFfcnhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDJfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDJfVFgsCiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCwKQEAgLTE4Miw2ICsyNDYsMzMgQEAKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAogCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKIAl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQM19CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AzX1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AzX1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQM19JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQNF9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A0X1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A0X1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNF9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A0X0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQNV9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A1X1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A1X1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNV9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A1X0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAogfTsKICNkZWZpbmUgT01BUDM0WFhfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDM0eHhfbWNic3BfcGRhdGEpCiAjZWxzZQpAQCAtMTg5LDcgKzI4MCw3IEBACiAjZGVmaW5lIE9NQVAzNFhYX01DQlNQX1BEQVRBX1NaCQkwCiAjZW5kaWYKIAotaW50IF9faW5pdCBvbWFwMl9tY2JzcF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9tY2JzcF9pbml0KHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTE5OSwxMCArMjkwLDI0IEBACiAJCWNsa19yZWdpc3Rlcigmb21hcF9tY2JzcF9jbGtzW2ldLmNsayk7CiAJfQogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQlvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhvbWFwMjR4eF9tY2JzcF9wZGF0YSwKLQkJCQkJCU9NQVAyNFhYX01DQlNQX1BEQVRBX1NaKTsKKwlpZiAoY3B1X2lzX29tYXAyNDIwKCkpCisJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMjQyMF9NQ0JTUF9QREFUQV9TWjsKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMjQzMF9NQ0JTUF9QREFUQV9TWjsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMzRYWF9NQ0JTUF9QREFUQV9TWjsKIAorCW1jYnNwX3B0ciA9IGt6YWxsb2Mob21hcF9tY2JzcF9jb3VudCAqIHNpemVvZihzdHJ1Y3Qgb21hcF9tY2JzcCAqKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFtY2JzcF9wdHIpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKQorCQlvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhvbWFwMjQyMF9tY2JzcF9wZGF0YSwKKwkJCQkJCU9NQVAyNDIwX01DQlNQX1BEQVRBX1NaKTsKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCW9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKG9tYXAyNDMwX21jYnNwX3BkYXRhLAorCQkJCQkJT01BUDI0MzBfTUNCU1BfUERBVEFfU1opOwogCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKIAkJb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcob21hcDM0eHhfbWNic3BfcGRhdGEsCiAJCQkJCQlPTUFQMzRYWF9NQ0JTUF9QREFUQV9TWik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuYwppbmRleCBhYjE0NjJiLi44ODJjNzAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMKQEAgLTEwMSw2ICsxMDEsMTcgQEAKIAlyZXR1cm4gcHJldjsKIH0KIAorI2lmICFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQordm9pZCBvbWFwMl9zcmFtX2Rkcl9pbml0KHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCisJCQkJdTMyIGJhc2VfY3MsIHUzMiBmb3JjZV91bmxvY2spCit7Cit9Cit2b2lkIG9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmModTMyIHBlcmZfbGV2ZWwsIHUzMiBkbGxfdmFsLAorCQkJCSAgICAgIHUzMiBtZW1fdHlwZSkKK3sKK30KKyNlbmRpZgorCiB2b2lkIG9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGRsbF9jbnQ7CkBAIC0xNjUsNiArMTc2LDkgQEAKIHsKIAl1MzIgbDsKIAorCWlmICghY3B1X2lzX29tYXAyNDIwKCkpCisJCXJldHVybjsKKwogCWwgPSBzbXNfcmVhZF9yZWcoU01TX1NZU0NPTkZJRyk7CiAJbCAmPSB+KDB4MyA8PCAzKTsKIAlsIHw9ICgweDIgPDwgMyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuaAppbmRleCA5YTI4MGI1Li5iYjNkYjgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmgKQEAgLTE0LDYgKzE0LDkgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpZm5kZWYgQVJDSF9BUk1fTUFDSF9PTUFQMl9NRU1PUllfSAorI2RlZmluZSBBUkNIX0FSTV9NQUNIX09NQVAyX01FTU9SWV9ICisKIC8qIE1lbW9yeSB0aW1pbmdzICovCiAjZGVmaW5lIE1fRERSCQkxCiAjZGVmaW5lIE1fTE9DS19DVFJMCSgxIDw8IDIpCkBAIC0zNCwzICszNyw3IEBACiBleHRlcm4gdTMyIG9tYXAyX21lbW9yeV9nZXRfdHlwZSh2b2lkKTsKIHUzMiBvbWFwMl9kbGxfZm9yY2VfbmVlZGVkKHZvaWQpOwogdTMyIG9tYXAyX3JlcHJvZ3JhbV9zZHJjKHUzMiBsZXZlbCwgdTMyIGZvcmNlKTsKK3ZvaWQgX19pbml0IG9tYXAyX2luaXRfbWVtb3J5KHZvaWQpOwordm9pZCBfX2luaXQgZ3BtY19pbml0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCmluZGV4IDZiN2Q2NzIuLmIxMzkzNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCiAgKgotICogT01BUDIgcGluIG11bHRpcGxleGluZyBjb25maWd1cmF0aW9ucworICogT01BUDIgYW5kIE9NQVAzIHBpbiBtdWx0aXBsZXhpbmcgY29uZmlndXJhdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IFRleGFzIEluc3RydW1lbnRzIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDggTm9raWEgQ29ycG9yYXRpb24KQEAgLTIyMCwxNiArMjIwLDIyMiBAQAogI2RlZmluZSBPTUFQMjRYWF9QSU5TX1NaCTAKICNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMjRYWCAqLwogCi0jZGVmaW5lIE9NQVAyNFhYX1BVTExfRU5BCSgxIDw8IDMpCi0jZGVmaW5lIE9NQVAyNFhYX1BVTExfVVAJKDEgPDwgNCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorc3RhdGljIHN0cnVjdCBwaW5fY29uZmlnIF9faW5pdGRhdGFfb3JfbW9kdWxlIG9tYXAzNHh4X3BpbnNbXSA9IHsKKy8qCisgKgkJTmFtZSwgcmVnLW9mZnNldCwKKyAqCQltdXgtbW9kZSB8IFthY3RpdmUtbW9kZSB8IG9mZi1tb2RlXQorICovCisKKy8qIDM0eHggSTJDICovCitNVVhfQ0ZHXzM0WFgoIksyMV8zNFhYX0kyQzFfU0NMIiwgMHgxYmEsCisJCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCitNVVhfQ0ZHXzM0WFgoIkoyMV8zNFhYX0kyQzFfU0RBIiwgMHgxYmMsCisJCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCitNVVhfQ0ZHXzM0WFgoIkFGMTVfMzRYWF9JMkMyX1NDTCIsIDB4MWJlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQorTVVYX0NGR18zNFhYKCJBRTE1XzM0WFhfSTJDMl9TREEiLCAweDFjMCwKKwkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKK01VWF9DRkdfMzRYWCgiQUYxNF8zNFhYX0kyQzNfU0NMIiwgMHgxYzIsCisJCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCitNVVhfQ0ZHXzM0WFgoIkFHMTRfMzRYWF9JMkMzX1NEQSIsIDB4MWM0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQorTVVYX0NGR18zNFhYKCJBRDI2XzM0WFhfSTJDNF9TQ0wiLCAweGEwMCwKKwkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKK01VWF9DRkdfMzRYWCgiQUUyNl8zNFhYX0kyQzRfU0RBIiwgMHhhMDIsCisJCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCisKKy8qIFBIWSAtIEhTVVNCOiAxMi1waW4gVUxQSSBQSFk6IFBvcnQgMSovCitNVVhfQ0ZHXzM0WFgoIlk4XzM0MzBfVVNCMUhTX1BIWV9DTEsiLCAweDVkYSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX09VVFBVVCkKK01VWF9DRkdfMzRYWCgiWTlfMzQzMF9VU0IxSFNfUEhZX1NUUCIsIDB4NWQ4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQorTVVYX0NGR18zNFhYKCJBQTE0XzM0MzBfVVNCMUhTX1BIWV9ESVIiLCAweDVlYywKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQTExXzM0MzBfVVNCMUhTX1BIWV9OWFQiLCAweDVlZSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXMTNfMzQzMF9VU0IxSFNfUEhZX0QwIiwgMHg1ZGMsCisJCU9NQVAzNFhYX01VWF9NT0RFMyB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzEyXzM0MzBfVVNCMUhTX1BIWV9EMSIsIDB4NWRlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlcxMV8zNDMwX1VTQjFIU19QSFlfRDIiLCAweDVlMCwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJZMTFfMzQzMF9VU0IxSFNfUEhZX0QzIiwgMHg1ZWEsCisJCU9NQVAzNFhYX01VWF9NT0RFMyB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzlfMzQzMF9VU0IxSFNfUEhZX0Q0IiwgMHg1ZTQsCisJCU9NQVAzNFhYX01VWF9NT0RFMyB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiWTEyXzM0MzBfVVNCMUhTX1BIWV9ENSIsIDB4NWU2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlc4XzM0MzBfVVNCMUhTX1BIWV9ENiIsIDB4NWU4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlkxM18zNDMwX1VTQjFIU19QSFlfRDciLCAweDVlMiwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorCisvKiBQSFkgLSBIU1VTQjogMTItcGluIFVMUEkgUEhZOiBQb3J0IDIqLworTVVYX0NGR18zNFhYKCJBQThfMzQzMF9VU0IySFNfUEhZX0NMSyIsIDB4NWYwLAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQorTVVYX0NGR18zNFhYKCJBQTEwXzM0MzBfVVNCMkhTX1BIWV9TVFAiLCAweDVmMiwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX09VVFBVVCkKK01VWF9DRkdfMzRYWCgiQUE5XzM0MzBfVVNCMkhTX1BIWV9ESVIiLCAweDVmNCwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQjExXzM0MzBfVVNCMkhTX1BIWV9OWFQiLCAweDVmNiwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQjEwXzM0MzBfVVNCMkhTX1BIWV9EMCIsIDB4NWY4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFCOV8zNDMwX1VTQjJIU19QSFlfRDEiLCAweDVmYSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXM18zNDMwX1VTQjJIU19QSFlfRDIiLCAweDFkNCwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJUNF8zNDMwX1VTQjJIU19QSFlfRDMiLCAweDFkZSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJUM18zNDMwX1VTQjJIU19QSFlfRDQiLCAweDFkOCwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJSM18zNDMwX1VTQjJIU19QSFlfRDUiLCAweDFkYSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJSNF8zNDMwX1VTQjJIU19QSFlfRDYiLCAweDFkYywKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJUMl8zNDMwX1VTQjJIU19QSFlfRDciLCAweDFkNiwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorCisvKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDEqLworTVVYX0NGR18zNFhYKCJZOF8zNDMwX1VTQjFIU19UTExfQ0xLIiwgMHg1ZGEsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiWTlfMzQzMF9VU0IxSFNfVExMX1NUUCIsIDB4NWQ4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQorTVVYX0NGR18zNFhYKCJBQTE0XzM0MzBfVVNCMUhTX1RMTF9ESVIiLCAweDVlYywKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQTExXzM0MzBfVVNCMUhTX1RMTF9OWFQiLCAweDVlZSwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXMTNfMzQzMF9VU0IxSFNfVExMX0QwIiwgMHg1ZGMsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzEyXzM0MzBfVVNCMUhTX1RMTF9EMSIsIDB4NWRlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlcxMV8zNDMwX1VTQjFIU19UTExfRDIiLCAweDVlMCwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJZMTFfMzQzMF9VU0IxSFNfVExMX0QzIiwgMHg1ZWEsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzlfMzQzMF9VU0IxSFNfVExMX0Q0IiwgMHg1ZTQsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiWTEyXzM0MzBfVVNCMUhTX1RMTF9ENSIsIDB4NWU2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlc4XzM0MzBfVVNCMUhTX1RMTF9ENiIsIDB4NWU4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlkxM18zNDMwX1VTQjFIU19UTExfRDciLCAweDVlMiwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorCisvKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDIqLworTVVYX0NGR18zNFhYKCJBQThfMzQzMF9VU0IySFNfVExMX0NMSyIsIDB4NWYwLAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFBMTBfMzQzMF9VU0IySFNfVExMX1NUUCIsIDB4NWYyLAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQorTVVYX0NGR18zNFhYKCJBQTlfMzQzMF9VU0IySFNfVExMX0RJUiIsIDB4NWY0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFCMTFfMzQzMF9VU0IySFNfVExMX05YVCIsIDB4NWY2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFCMTBfMzQzMF9VU0IySFNfVExMX0QwIiwgMHg1ZjgsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUI5XzM0MzBfVVNCMkhTX1RMTF9EMSIsIDB4NWZhLAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlczXzM0MzBfVVNCMkhTX1RMTF9EMiIsIDB4MWQ0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlQ0XzM0MzBfVVNCMkhTX1RMTF9EMyIsIDB4MWRlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlQzXzM0MzBfVVNCMkhTX1RMTF9ENCIsIDB4MWQ4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlIzXzM0MzBfVVNCMkhTX1RMTF9ENSIsIDB4MWRhLAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlI0XzM0MzBfVVNCMkhTX1RMTF9ENiIsIDB4MWRjLAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlQyXzM0MzBfVVNCMkhTX1RMTF9ENyIsIDB4MWQ2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCisKKy8qIFRMTCAtIEhTVVNCOiAxMi1waW4gVExMIFBvcnQgMyovCitNVVhfQ0ZHXzM0WFgoIkFBNl8zNDMwX1VTQjNIU19UTExfQ0xLIiwgMHgxODAsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUIzXzM0MzBfVVNCM0hTX1RMTF9TVFAiLCAweDE2NiwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKK01VWF9DRkdfMzRYWCgiQUEzXzM0MzBfVVNCM0hTX1RMTF9ESVIiLCAweDE2OCwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJZM18zNDMwX1VTQjNIU19UTExfTlhUIiwgMHgxNmEsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUE1XzM0MzBfVVNCM0hTX1RMTF9EMCIsIDB4MTg2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlk0XzM0MzBfVVNCM0hTX1RMTF9EMSIsIDB4MTg0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlk1XzM0MzBfVVNCM0hTX1RMTF9EMiIsIDB4MTg4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlc1XzM0MzBfVVNCM0hTX1RMTF9EMyIsIDB4MThhLAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFCMTJfMzQzMF9VU0IzSFNfVExMX0Q0IiwgMHgxNmMsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUIxM18zNDMwX1VTQjNIU19UTExfRDUiLCAweDE2ZSwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQTEzXzM0MzBfVVNCM0hTX1RMTF9ENiIsIDB4MTcwLAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFBMTJfMzQzMF9VU0IzSFNfVExMX0Q3IiwgMHgxNzIsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKKworLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMSAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KK01VWF9DRkdfMzRYWCgiQUYxMF8zNDMwX1VTQjFGU19QSFlfTU0xX1JYRFAiLCAweDVkOCwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBRzlfMzQzMF9VU0IxRlNfUEhZX01NMV9SWERNIiwgMHg1ZWUsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzEzXzM0MzBfVVNCMUZTX1BIWV9NTTFfUlhSQ1YiLCAweDVkYywKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXMTJfMzQzMF9VU0IxRlNfUEhZX01NMV9UWFNFMCIsIDB4NWRlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlcxMV8zNDMwX1VTQjFGU19QSFlfTU0xX1RYREFUIiwgMHg1ZTAsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiWTExXzM0MzBfVVNCMUZTX1BIWV9NTTFfVFhFTl9OIiwgMHg1ZWEsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCisKKy8qIFBIWSBGU1VTQjogRlMgU2VyaWFsIGZvciBQb3J0IDIgKG11bHRpcGxlIFBIWSBtb2RlcyBzdXBwb3J0ZWQpICovCitNVVhfQ0ZHXzM0WFgoIkFGN18zNDMwX1VTQjJGU19QSFlfTU0yX1JYRFAiLCAweDVmMiwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBSDdfMzQzMF9VU0IyRlNfUEhZX01NMl9SWERNIiwgMHg1ZjYsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUIxMF8zNDMwX1VTQjJGU19QSFlfTU0yX1JYUkNWIiwgMHg1ZjgsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUI5XzM0MzBfVVNCMkZTX1BIWV9NTTJfVFhTRTAiLCAweDVmYSwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXM18zNDMwX1VTQjJGU19QSFlfTU0yX1RYREFUIiwgMHgxZDQsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVDRfMzQzMF9VU0IyRlNfUEhZX01NMl9UWEVOX04iLCAweDFkZSwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX09VVFBVVCkKKworLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMyAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KK01VWF9DRkdfMzRYWCgiQUgzXzM0MzBfVVNCM0ZTX1BIWV9NTTNfUlhEUCIsIDB4MTY2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFFM18zNDMwX1VTQjNGU19QSFlfTU0zX1JYRE0iLCAweDE2YSwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBRDFfMzQzMF9VU0IzRlNfUEhZX01NM19SWFJDViIsIDB4MTg2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFFMV8zNDMwX1VTQjNGU19QSFlfTU0zX1RYU0UwIiwgMHgxODQsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUQyXzM0MzBfVVNCM0ZTX1BIWV9NTTNfVFhEQVQiLCAweDE4OCwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQzFfMzQzMF9VU0IzRlNfUEhZX01NM19UWEVOX04iLCAweDE4YSwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX09VVFBVVCkKKworfTsKKworI2RlZmluZSBPTUFQMzRYWF9QSU5TX1NaCUFSUkFZX1NJWkUob21hcDM0eHhfcGlucykKKworI2Vsc2UKKyNkZWZpbmUgb21hcDM0eHhfcGlucwkJTlVMTAorI2RlZmluZSBPTUFQMzRYWF9QSU5TX1NaCTAKKyNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9NVVhfREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTKQotdm9pZCBfX2luaXRfb3JfbW9kdWxlIG9tYXAyX2NmZ19kZWJ1Zyhjb25zdCBzdHJ1Y3QgcGluX2NvbmZpZyAqY2ZnLCB1OCByZWcpCitzdGF0aWMgdm9pZCBfX2luaXRfb3JfbW9kdWxlIG9tYXAyX2NmZ19kZWJ1Zyhjb25zdCBzdHJ1Y3QgcGluX2NvbmZpZyAqY2ZnLCB1MTYgcmVnKQogewogCXUxNiBvcmlnOwogCXU4IHdhcm4gPSAwLCBkZWJ1ZyA9IDA7CiAKLQlvcmlnID0gb21hcF9jdHJsX3JlYWRiKGNmZy0+bXV4X3JlZyk7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvcmlnID0gb21hcF9jdHJsX3JlYWRiKGNmZy0+bXV4X3JlZyk7CisJZWxzZQorCQlvcmlnID0gb21hcF9jdHJsX3JlYWR3KGNmZy0+bXV4X3JlZyk7CiAKICNpZmRlZglDT05GSUdfT01BUF9NVVhfREVCVUcKIAlkZWJ1ZyA9IGNmZy0+ZGVidWc7CkBAIC0yNTUsOSArNDYxLDkgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOwogCXJlZyB8PSBjZmctPm1hc2sgJiAweDc7CiAJaWYgKGNmZy0+cHVsbF92YWwpCi0JCXJlZyB8PSBPTUFQMjRYWF9QVUxMX0VOQTsKKwkJcmVnIHw9IE9NQVAyX1BVTExfRU5BOwogCWlmIChjZmctPnB1X3BkX3ZhbCkKLQkJcmVnIHw9IE9NQVAyNFhYX1BVTExfVVA7CisJCXJlZyB8PSBPTUFQMl9QVUxMX1VQOwogCW9tYXAyX2NmZ19kZWJ1ZyhjZmcsIHJlZyk7CiAJb21hcF9jdHJsX3dyaXRlYihyZWcsIGNmZy0+bXV4X3JlZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOwpAQCAtMjY1LDcgKzQ3MSwyNiBAQAogCXJldHVybiAwOwogfQogI2Vsc2UKLSNkZWZpbmUgb21hcDI0eHhfY2ZnX3JlZwkwCisjZGVmaW5lIG9tYXAyNHh4X2NmZ19yZWcJTlVMTAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorc3RhdGljIGludCBfX2luaXRfb3JfbW9kdWxlIG9tYXAzNHh4X2NmZ19yZWcoY29uc3Qgc3RydWN0IHBpbl9jb25maWcgKmNmZykKK3sKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG11eF9zcGluX2xvY2spOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IHJlZyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOworCXJlZyB8PSBjZmctPm11eF92YWw7CisJb21hcDJfY2ZnX2RlYnVnKGNmZywgcmVnKTsKKwlvbWFwX2N0cmxfd3JpdGV3KHJlZywgY2ZnLT5tdXhfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXhfc3Bpbl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIG9tYXAzNHh4X2NmZ19yZWcJTlVMTAogI2VuZGlmCiAKIGludCBfX2luaXQgb21hcDJfbXV4X2luaXQodm9pZCkKQEAgLTI3NCw2ICs0OTksMTAgQEAKIAkJYXJjaF9tdXhfY2ZnLnBpbnMJPSBvbWFwMjR4eF9waW5zOwogCQlhcmNoX211eF9jZmcuc2l6ZQk9IE9NQVAyNFhYX1BJTlNfU1o7CiAJCWFyY2hfbXV4X2NmZy5jZmdfcmVnCT0gb21hcDI0eHhfY2ZnX3JlZzsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCWFyY2hfbXV4X2NmZy5waW5zCT0gb21hcDM0eHhfcGluczsKKwkJYXJjaF9tdXhfY2ZnLnNpemUJPSBPTUFQMzRYWF9QSU5TX1NaOworCQlhcmNoX211eF9jZmcuY2ZnX3JlZwk9IG9tYXAzNHh4X2NmZ19yZWc7CiAJfQogCiAJcmV0dXJuIG9tYXBfbXV4X3JlZ2lzdGVyKCZhcmNoX211eF9jZmcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZTI5NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKQEAgLTAsMCArMSwxMTEzIEBACisvKgorICogT01BUCBwb3dlcmRvbWFpbiBjb250cm9sCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmZGVmIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOCisjIGRlZmluZSBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCisKKyNpbmNsdWRlIDxtYWNoL2NwdS5oPgorI2luY2x1ZGUgPG1hY2gvcG93ZXJkb21haW4uaD4KKyNpbmNsdWRlIDxtYWNoL2Nsb2NrZG9tYWluLmg+CisKKy8qIHB3cmRtX2xpc3QgY29udGFpbnMgYWxsIHJlZ2lzdGVyZWQgc3RydWN0IHBvd2VyZG9tYWlucyAqLworc3RhdGljIExJU1RfSEVBRChwd3JkbV9saXN0KTsKKworLyoKKyAqIHB3cmRtX3J3bG9jayBwcm90ZWN0cyBwd3JkbV9saXN0IGFkZCBhbmQgZGVsIG9wcyAtIGFsc28gcmV1c2VkIHRvCisgKiBwcm90ZWN0IHB3cmRtX2Nsa2Rtc1tdIGR1cmluZyBjbGtkbSBhZGQvZGVsIG9wcworICovCitzdGF0aWMgREVGSU5FX1JXTE9DSyhwd3JkbV9yd2xvY2spOworCisKKy8qIFByaXZhdGUgZnVuY3Rpb25zICovCisKK3N0YXRpYyB1MzIgcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQoczE2IGRvbWFpbiwgczE2IGlkeCwgdTMyIG1hc2spCit7CisJdTMyIHY7CisKKwl2ID0gcHJtX3JlYWRfbW9kX3JlZyhkb21haW4sIGlkeCk7CisJdiAmPSBtYXNrOworCXYgPj49IF9fZmZzKG1hc2spOworCisJcmV0dXJuIHY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gKl9wd3JkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCAqdGVtcF9wd3JkbTsKKworCXB3cmRtID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcF9wd3JkbSwgJnB3cmRtX2xpc3QsIG5vZGUpIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgdGVtcF9wd3JkbS0+bmFtZSkpIHsKKwkJCXB3cmRtID0gdGVtcF9wd3JkbTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHB3cmRtOworfQorCisvKiBfcHdyZG1fZGVwc19sb29rdXAgLSBsb29rIHVwIHRoZSBzcGVjaWZpZWQgcG93ZXJkb21haW4gaW4gYSBwd3JkbSBsaXN0ICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpfcHdyZG1fZGVwc19sb29rdXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwKKwkJCQkJICAgICAgc3RydWN0IHB3cmRtX2RlcCAqZGVwcykKK3sKKwlzdHJ1Y3QgcHdyZG1fZGVwICpwZDsKKworCWlmICghcHdyZG0gfHwgIWRlcHMgfHwgIW9tYXBfY2hpcF9pcyhwd3JkbS0+b21hcF9jaGlwKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlmb3IgKHBkID0gZGVwczsgcGQ7IHBkKyspIHsKKworCQlpZiAoIW9tYXBfY2hpcF9pcyhwZC0+b21hcF9jaGlwKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghcGQtPnB3cmRtICYmIHBkLT5wd3JkbV9uYW1lKQorCQkJcGQtPnB3cmRtID0gcHdyZG1fbG9va3VwKHBkLT5wd3JkbV9uYW1lKTsKKworCQlpZiAocGQtPnB3cmRtID09IHB3cmRtKQorCQkJYnJlYWs7CisKKwl9CisKKwlpZiAoIXBkKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKworCXJldHVybiBwZC0+cHdyZG07Cit9CisKKworLyogUHVibGljIGZ1bmN0aW9ucyAqLworCisvKioKKyAqIHB3cmRtX2luaXQgLSBzZXQgdXAgdGhlIHBvd2VyZG9tYWluIGxheWVyCisgKgorICogTG9vcCB0aHJvdWdoIHRoZSBsaXN0IG9mIHBvd2VyZG9tYWlucywgcmVnaXN0ZXJpbmcgYWxsIHRoYXQgYXJlCisgKiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgQ1BVLiBJZiBwd3JkbV9saXN0IGlzIHN1cHBsaWVkIGFuZCBub3QKKyAqIG51bGwsIGFsbCBvZiB0aGUgcmVmZXJlbmNlZCBwb3dlcmRvbWFpbnMgd2lsbCBiZSByZWdpc3RlcmVkLiAgTm8KKyAqIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBwd3JkbV9pbml0KHN0cnVjdCBwb3dlcmRvbWFpbiAqKnB3cmRtX2xpc3QpCit7CisJc3RydWN0IHBvd2VyZG9tYWluICoqcCA9IE5VTEw7CisKKwlpZiAocHdyZG1fbGlzdCkKKwkJZm9yIChwID0gcHdyZG1fbGlzdDsgKnA7IHArKykKKwkJCXB3cmRtX3JlZ2lzdGVyKCpwKTsKK30KKworLyoqCisgKiBwd3JkbV9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgcG93ZXJkb21haW4KKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gcmVnaXN0ZXIKKyAqCisgKiBBZGRzIGEgcG93ZXJkb21haW4gdG8gdGhlIGludGVybmFsIHBvd2VyZG9tYWluIGxpc3QuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIGdpdmVuIGEgbnVsbCBwb2ludGVyLCAtRUVYSVNUIGlmIGEgcG93ZXJkb21haW4gaXMKKyAqIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB0aGUgcHJvdmlkZWQgbmFtZSwgb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWdpc3RlcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghb21hcF9jaGlwX2lzKHB3cmRtLT5vbWFwX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CisJaWYgKF9wd3JkbV9sb29rdXAocHdyZG0tPm5hbWUpKSB7CisJCXJldCA9IC1FRVhJU1Q7CisJCWdvdG8gcHJfdW5sb2NrOworCX0KKworCWxpc3RfYWRkKCZwd3JkbS0+bm9kZSwgJnB3cmRtX2xpc3QpOworCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiByZWdpc3RlcmVkICVzXG4iLCBwd3JkbS0+bmFtZSk7CisJcmV0ID0gMDsKKworcHJfdW5sb2NrOgorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcHdyZG1fdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBwb3dlcmRvbWFpbgorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byB1bnJlZ2lzdGVyCisgKgorICogUmVtb3ZlcyBhIHBvd2VyZG9tYWluIGZyb20gdGhlIGludGVybmFsIHBvd2VyZG9tYWluIGxpc3QuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIHB3cmRtIGFyZ3VtZW50IGlzIE5VTEwuCisgKi8KK2ludCBwd3JkbV91bnJlZ2lzdGVyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmcHdyZG0tPm5vZGUpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogdW5yZWdpc3RlcmVkICVzXG4iLCBwd3JkbS0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9sb29rdXAgLSBsb29rIHVwIGEgcG93ZXJkb21haW4gYnkgbmFtZSwgcmV0dXJuIGEgcG9pbnRlcgorICogQG5hbWU6IG5hbWUgb2YgcG93ZXJkb21haW4KKyAqCisgKiBGaW5kIGEgcmVnaXN0ZXJlZCBwb3dlcmRvbWFpbiBieSBpdHMgbmFtZS4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZQorICogc3RydWN0IHBvd2VyZG9tYWluIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCXB3cmRtID0gX3B3cmRtX2xvb2t1cChuYW1lKTsKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBwd3JkbTsKK30KKworLyoqCisgKiBwd3JkbV9mb3JfZWFjaCAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCisgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKKyAqCisgKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBmb3IgZWFjaCByZWdpc3RlcmVkIHBvd2VyZG9tYWluLiAgVGhlCisgKiBjYWxsYmFjayBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwgb3V0IGVhcmx5IGZyb20KKyAqIHRoZSBpdGVyYXRvci4gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgcHdyZG1fcndsb2NrCisgKiBoZWxkIGZvciByZWFkaW5nLCBzbyBubyBwb3dlcmRvbWFpbiBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uCisgKiBmdW5jdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBjYWxsYmFjaywgYWx0aG91Z2ggaGFyZHdhcmUKKyAqIHBvd2VyZG9tYWluIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSBmaW5lLiAgUmV0dXJucyB0aGUgbGFzdCByZXR1cm4KKyAqIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIDAgZm9yIHN1Y2Nlc3Mgb3IKKyAqIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZTsgb3IgLUVJTlZBTCBpZiB0aGUgZnVuY3Rpb24KKyAqIHBvaW50ZXIgaXMgbnVsbC4KKyAqLworaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKSkKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnRlbXBfcHdyZG07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZm4pCisJCXJldHVybiAtRUlOVkFMOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcF9wd3JkbSwgJnB3cmRtX2xpc3QsIG5vZGUpIHsKKwkJcmV0ID0gKCpmbikodGVtcF9wd3JkbSk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHB3cmRtX2FkZF9jbGtkbSAtIGFkZCBhIGNsb2NrZG9tYWluIHRvIGEgcG93ZXJkb21haW4KKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gYWRkIHRoZSBjbG9ja2RvbWFpbiB0bworICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKiB0byBhc3NvY2lhdGUgd2l0aCBhIHBvd2VyZG9tYWluCisgKgorICogQXNzb2NpYXRlIHRoZSBjbG9ja2RvbWFpbiAnY2xrZG0nIHdpdGggYSBwb3dlcmRvbWFpbiAncHdyZG0nLiAgVGhpcworICogZW5hYmxlcyB0aGUgdXNlIG9mIHB3cmRtX2Zvcl9lYWNoX2Nsa2RtKCkuICBSZXR1cm5zIC1FSU5WQUwgaWYKKyAqIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG9pbnRlcnM7IC1FTk9NRU0gaWYgbWVtb3J5IGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ7CisgKiBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX2FkZF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoIXB3cmRtIHx8ICFjbGtkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IGFzc29jaWF0aW5nIGNsb2NrZG9tYWluICVzIHdpdGggcG93ZXJkb21haW4gIgorCQkgIiVzXG4iLCBjbGtkbS0+bmFtZSwgcHdyZG0tPm5hbWUpOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBQV1JETV9NQVhfQ0xLRE1TOyBpKyspIHsKKwkJaWYgKCFwd3JkbS0+cHdyZG1fY2xrZG1zW2ldKQorCQkJYnJlYWs7CisjaWZkZWYgREVCVUcKKwkJaWYgKHB3cmRtLT5wd3JkbV9jbGtkbXNbaV0gPT0gY2xrZG0pIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHBhY19leGl0OworCQl9CisjZW5kaWYKKwl9CisKKwlpZiAoaSA9PSBQV1JETV9NQVhfQ0xLRE1TKSB7CisJCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaW5jcmVhc2UgUFdSRE1fTUFYX0NMS0RNUyBmb3IgIgorCQkJICJwd3JkbSAlcyBjbGtkbSAlc1xuIiwgcHdyZG0tPm5hbWUsIGNsa2RtLT5uYW1lKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBwYWNfZXhpdDsKKwl9CisKKwlwd3JkbS0+cHdyZG1fY2xrZG1zW2ldID0gY2xrZG07CisKKwlyZXQgPSAwOworCitwYWNfZXhpdDoKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHB3cmRtX2RlbF9jbGtkbSAtIHJlbW92ZSBhIGNsb2NrZG9tYWluIGZyb20gYSBwb3dlcmRvbWFpbgorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBhZGQgdGhlIGNsb2NrZG9tYWluIHRvCisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqIHRvIGFzc29jaWF0ZSB3aXRoIGEgcG93ZXJkb21haW4KKyAqCisgKiBEaXNzb2NpYXRlIHRoZSBjbG9ja2RvbWFpbiAnY2xrZG0nIGZyb20gdGhlIHBvd2VyZG9tYWluCisgKiAncHdyZG0nLiBSZXR1cm5zIC1FSU5WQUwgaWYgcHJlc2VudGVkIHdpdGggaW52YWxpZCBwb2ludGVyczsKKyAqIC1FTk9FTlQgaWYgdGhlIGNsa2RtIHdhcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3dlcmRvbWFpbiwgb3IgMAorICogdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fZGVsX2Nsa2RtKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgaTsKKworCWlmICghcHdyZG0gfHwgIWNsa2RtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogZGlzc29jaWF0aW5nIGNsb2NrZG9tYWluICVzIGZyb20gcG93ZXJkb21haW4gIgorCQkgIiVzXG4iLCBjbGtkbS0+bmFtZSwgcHdyZG0tPm5hbWUpOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBQV1JETV9NQVhfQ0xLRE1TOyBpKyspCisJCWlmIChwd3JkbS0+cHdyZG1fY2xrZG1zW2ldID09IGNsa2RtKQorCQkJYnJlYWs7CisKKwlpZiAoaSA9PSBQV1JETV9NQVhfQ0xLRE1TKSB7CisJCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogY2xrZG0gJXMgbm90IGFzc29jaWF0ZWQgd2l0aCBwd3JkbSAiCisJCQkgIiVzID8hXG4iLCBjbGtkbS0+bmFtZSwgcHdyZG0tPm5hbWUpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIHBkY19leGl0OworCX0KKworCXB3cmRtLT5wd3JkbV9jbGtkbXNbaV0gPSBOVUxMOworCisJcmV0ID0gMDsKKworcGRjX2V4aXQ6CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwd3JkbV9mb3JfZWFjaF9jbGtkbSAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCBjbGtkbSBpbiBhIHB3cmRtCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGl0ZXJhdGUgb3ZlcgorICogQGZuOiBjYWxsYmFjayBmdW5jdGlvbiAqCisgKgorICogQ2FsbCB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gZm9yIGVhY2ggY2xvY2tkb21haW4gaW4gdGhlIHBvd2VyZG9tYWluCisgKiAncHdyZG0nLiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiByZXR1cm4gYW55dGhpbmcgYnV0IDAgdG8gYmFpbAorICogb3V0IGVhcmx5IGZyb20gdGhlIGl0ZXJhdG9yLiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoCisgKiB0aGUgcHdyZG1fcndsb2NrIGhlbGQgZm9yIHJlYWRpbmcsIHNvIG5vIHBvd2VyZG9tYWluIHN0cnVjdHVyZQorICogbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIGNhbGxiYWNrLCBhbHRob3VnaAorICogaGFyZHdhcmUgcG93ZXJkb21haW4gY29udHJvbCBmdW5jdGlvbnMgYXJlIGZpbmUuICBSZXR1cm5zIC1FSU5WQUwKKyAqIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG9pbnRlcnM7IG9yIHBhc3NlcyBhbG9uZyB0aGUgbGFzdCByZXR1cm4KKyAqIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIDAgZm9yIHN1Y2Nlc3Mgb3IKKyAqIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZS4KKyAqLworaW50IHB3cmRtX2Zvcl9lYWNoX2Nsa2RtKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sCisJCQkgaW50ICgqZm4pKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sCisJCQkJICAgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCWlmICghZm4pCisJCXJldHVybiAtRUlOVkFMOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IFBXUkRNX01BWF9DTEtETVMgJiYgIXJldDsgaSsrKQorCQlyZXQgPSAoKmZuKShwd3JkbSwgcHdyZG0tPnB3cmRtX2Nsa2Rtc1tpXSk7CisKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyoqCisgKiBwd3JkbV9hZGRfd2tkZXAgLSBhZGQgYSB3YWtldXAgZGVwZW5kZW5jeSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKKyAqIEBwd3JkbTE6IHdha2UgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB1cCAoZGVwZW5kZW50KQorICogQHB3cmRtMjogd2hlbiB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIHdha2VzIHVwIChzb3VyY2UpCisgKgorICogV2hlbiB0aGUgcG93ZXJkb21haW4gcmVwcmVzZW50ZWQgYnkgcHdyZG0yIHdha2VzIHVwIChkdWUgdG8gYW4KKyAqIGludGVycnVwdCksIHdha2UgdXAgcHdyZG0xLglJbXBsZW1lbnRlZCBpbiBoYXJkd2FyZSBvbiB0aGUgT01BUCwKKyAqIHRoaXMgZmVhdHVyZSBpcyBkZXNpZ25lZCB0byByZWR1Y2Ugd2FrZXVwIGxhdGVuY3kgb2YgdGhlIGRlcGVuZGVudAorICogcG93ZXJkb21haW4uICBSZXR1cm5zIC1FSU5WQUwgaWYgcHJlc2VudGVkIHdpdGggaW52YWxpZCBwb3dlcmRvbWFpbgorICogcG9pbnRlcnMsIC1FTk9FTlQgaWYgcHdyZG0yIGNhbm5vdCB3YWtlIHVwIHB3cmRtMSBpbiBoYXJkd2FyZSwgb3IKKyAqIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fYWRkX3drZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMikKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnA7CisKKwlpZiAoIXB3cmRtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwID0gX3B3cmRtX2RlcHNfbG9va3VwKHB3cmRtMiwgcHdyZG0xLT53a2RlcF9zcmNzKTsKKwlpZiAoSVNfRVJSKHApKSB7CisJCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciB3YWtlIHVwIG9mICIKKwkJCSAiJXMgd2hlbiAlcyB3YWtlcyB1cFxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOworCQlyZXR1cm4gSVNfRVJSKHApOworCX0KKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaGFyZHdhcmUgd2lsbCB3YWtlIHVwICVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsCisJCSBwd3JkbTEtPm5hbWUsIHB3cmRtMi0+bmFtZSk7CisKKwlwcm1fc2V0X21vZF9yZWdfYml0cygoMSA8PCBwd3JkbTItPmRlcF9iaXQpLAorCQkJICAgICBwd3JkbTEtPnByY21fb2ZmcywgUE1fV0tERVApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1fZGVsX3drZGVwIC0gcmVtb3ZlIGEgd2FrZXVwIGRlcGVuZGVuY3kgZnJvbSBwd3JkbTIgdG8gcHdyZG0xCisgKiBAcHdyZG0xOiB3YWtlIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogdXAgKGRlcGVuZGVudCkKKyAqIEBwd3JkbTI6IHdoZW4gdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB3YWtlcyB1cCAoc291cmNlKQorICoKKyAqIFJlbW92ZSBhIHdha2V1cCBkZXBlbmRlbmN5IHRoYXQgY2F1c2VzIHB3cmRtMSB0byB3YWtlIHVwIHdoZW4gcHdyZG0yCisgKiB3YWtlcyB1cC4gIFJldHVybnMgLUVJTlZBTCBpZiBwcmVzZW50ZWQgd2l0aCBpbnZhbGlkIHBvd2VyZG9tYWluCisgKiBwb2ludGVycywgLUVOT0VOVCBpZiBwd3JkbTIgY2Fubm90IHdha2UgdXAgcHdyZG0xIGluIGhhcmR3YXJlLCBvcgorICogMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9kZWxfd2tkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKQoreworCXN0cnVjdCBwb3dlcmRvbWFpbiAqcDsKKworCWlmICghcHdyZG0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXAgPSBfcHdyZG1fZGVwc19sb29rdXAocHdyZG0yLCBwd3JkbTEtPndrZGVwX3NyY3MpOworCWlmIChJU19FUlIocCkpIHsKKwkJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHdha2UgdXAgb2YgIgorCQkJICIlcyB3aGVuICVzIHdha2VzIHVwXG4iLCBwd3JkbTEtPm5hbWUsIHB3cmRtMi0+bmFtZSk7CisJCXJldHVybiBJU19FUlIocCk7CisJfQorCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSB3aWxsIG5vIGxvbmdlciB3YWtlIHVwICVzIGFmdGVyICVzICIKKwkJICJ3YWtlcyB1cFxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOworCisJcHJtX2NsZWFyX21vZF9yZWdfYml0cygoMSA8PCBwd3JkbTItPmRlcF9iaXQpLAorCQkJICAgICAgIHB3cmRtMS0+cHJjbV9vZmZzLCBQTV9XS0RFUCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9yZWFkX3drZGVwIC0gcmVhZCB3YWtldXAgZGVwZW5kZW5jeSBzdGF0ZSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKKyAqIEBwd3JkbTE6IHdha2UgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB1cCAoZGVwZW5kZW50KQorICogQHB3cmRtMjogd2hlbiB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIHdha2VzIHVwIChzb3VyY2UpCisgKgorICogUmV0dXJuIDEgaWYgYSBoYXJkd2FyZSB3YWtldXAgZGVwZW5kZW5jeSBleGlzdHMgd2hlcmVpbiBwd3JkbTEgd2lsbCBiZQorICogYXdva2VuIHdoZW4gcHdyZG0yIHdha2VzIHVwOyAwIGlmIGRlcGVuZGVuY3kgaXMgbm90IHNldDsgLUVJTlZBTAorICogaWYgZWl0aGVyIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgaW52YWxpZDsgb3IgLUVOT0VOVCBpZiB0aGUgaGFyZHdhcmUKKyAqIGlzIGluY2FwYWJsZS4KKyAqCisgKiBSRVZJU0lUOiBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiBvbmx5IHJlcHJlc2VudHMgc29mdHdhcmUtY29udHJvbGxhYmxlCisgKiB3YWtldXAgZGVwZW5kZW5jaWVzLiAgV2FrZXVwIGRlcGVuZGVuY2llcyBmaXhlZCBpbiBoYXJkd2FyZSBhcmUgbm90CisgKiB5ZXQgaGFuZGxlZCBoZXJlLgorICovCitpbnQgcHdyZG1fcmVhZF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpCit7CisJc3RydWN0IHBvd2VyZG9tYWluICpwOworCisJaWYgKCFwd3JkbTEpCisJCXJldHVybiAtRUlOVkFMOworCisJcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+d2tkZXBfc3Jjcyk7CisJaWYgKElTX0VSUihwKSkgeworCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgd2FrZSB1cCBvZiAiCisJCQkgIiVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKKwkJcmV0dXJuIElTX0VSUihwKTsKKwl9CisKKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0xLT5wcmNtX29mZnMsIFBNX1dLREVQLAorCQkJCQkoMSA8PCBwd3JkbTItPmRlcF9iaXQpKTsKK30KKworLyoqCisgKiBwd3JkbV9hZGRfc2xlZXBkZXAgLSBhZGQgYSBzbGVlcCBkZXBlbmRlbmN5IGZyb20gcHdyZG0yIHRvIHB3cmRtMQorICogQHB3cmRtMTogcHJldmVudCB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIGZyb20gc2xlZXBpbmcgKGRlcGVuZGVudCkKKyAqIEBwd3JkbTI6IHdoZW4gdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiBpcyBhY3RpdmUgKHNvdXJjZSkKKyAqCisgKiBQcmV2ZW50IHB3cmRtMSBmcm9tIGF1dG9tYXRpY2FsbHkgZ29pbmcgaW5hY3RpdmUgKGFuZCB0aGVuIHRvCisgKiByZXRlbnRpb24gb3Igb2ZmKSBpZiBwd3JkbTIgaXMgc3RpbGwgYWN0aXZlLgkgUmV0dXJucyAtRUlOVkFMIGlmCisgKiBwcmVzZW50ZWQgd2l0aCBpbnZhbGlkIHBvd2VyZG9tYWluIHBvaW50ZXJzIG9yIGNhbGxlZCBvbiBhIG1hY2hpbmUKKyAqIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBzb2Z0d2FyZS1jb25maWd1cmFibGUgaGFyZHdhcmUgc2xlZXAgZGVwZW5kZW5jaWVzLAorICogLUVOT0VOVCBpZiB0aGUgc3BlY2lmaWVkIGRlcGVuZGVuY3kgY2Fubm90IGJlIHNldCBpbiBoYXJkd2FyZSwgb3IKKyAqIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fYWRkX3NsZWVwZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMikKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnA7CisKKwlpZiAoIXB3cmRtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXAgPSBfcHdyZG1fZGVwc19sb29rdXAocHdyZG0yLCBwd3JkbTEtPnNsZWVwZGVwX3NyY3MpOworCWlmIChJU19FUlIocCkpIHsKKwkJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHNsZWVwICIKKwkJCSAiZGVwZW5kZW5jeSBhZmZlY3RpbmcgJXMgZnJvbSAlc1xuIiwgcHdyZG0xLT5uYW1lLAorCQkJIHB3cmRtMi0+bmFtZSk7CisJCXJldHVybiBJU19FUlIocCk7CisJfQorCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiB3aWxsIHByZXZlbnQgJXMgZnJvbSBzbGVlcGluZyBpZiAlcyBpcyBhY3RpdmVcbiIsCisJCSBwd3JkbTEtPm5hbWUsIHB3cmRtMi0+bmFtZSk7CisKKwljbV9zZXRfbW9kX3JlZ19iaXRzKCgxIDw8IHB3cmRtMi0+ZGVwX2JpdCksCisJCQkgICAgcHdyZG0xLT5wcmNtX29mZnMsIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHB3cmRtX2RlbF9zbGVlcGRlcCAtIHJlbW92ZSBhIHNsZWVwIGRlcGVuZGVuY3kgZnJvbSBwd3JkbTIgdG8gcHdyZG0xCisgKiBAcHdyZG0xOiBwcmV2ZW50IHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogZnJvbSBzbGVlcGluZyAoZGVwZW5kZW50KQorICogQHB3cmRtMjogd2hlbiB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIGlzIGFjdGl2ZSAoc291cmNlKQorICoKKyAqIEFsbG93IHB3cmRtMSB0byBhdXRvbWF0aWNhbGx5IGdvIGluYWN0aXZlIChhbmQgdGhlbiB0byByZXRlbnRpb24gb3IKKyAqIG9mZiksIGluZGVwZW5kZW50IG9mIHRoZSBhY3Rpdml0eSBzdGF0ZSBvZiBwd3JkbTIuICBSZXR1cm5zIC1FSU5WQUwKKyAqIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG93ZXJkb21haW4gcG9pbnRlcnMgb3IgY2FsbGVkIG9uIGEgbWFjaGluZQorICogdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbmZpZ3VyYWJsZSBoYXJkd2FyZSBzbGVlcCBkZXBlbmRlbmNpZXMsCisgKiAtRU5PRU5UIGlmIHRoZSBzcGVjaWZpZWQgZGVwZW5kZW5jeSBjYW5ub3QgYmUgY2xlYXJlZCBpbiBoYXJkd2FyZSwgb3IKKyAqIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fZGVsX3NsZWVwZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMikKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnA7CisKKwlpZiAoIXB3cmRtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXAgPSBfcHdyZG1fZGVwc19sb29rdXAocHdyZG0yLCBwd3JkbTEtPnNsZWVwZGVwX3NyY3MpOworCWlmIChJU19FUlIocCkpIHsKKwkJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHNsZWVwICIKKwkJCSAiZGVwZW5kZW5jeSBhZmZlY3RpbmcgJXMgZnJvbSAlc1xuIiwgcHdyZG0xLT5uYW1lLAorCQkJIHB3cmRtMi0+bmFtZSk7CisJCXJldHVybiBJU19FUlIocCk7CisJfQorCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiB3aWxsIG5vIGxvbmdlciBwcmV2ZW50ICVzIGZyb20gc2xlZXBpbmcgaWYgIgorCQkgIiVzIGlzIGFjdGl2ZVxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOworCisJY21fY2xlYXJfbW9kX3JlZ19iaXRzKCgxIDw8IHB3cmRtMi0+ZGVwX2JpdCksCisJCQkgICAgICBwd3JkbTEtPnByY21fb2ZmcywgT01BUDM0MzBfQ01fU0xFRVBERVApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1fcmVhZF9zbGVlcGRlcCAtIHJlYWQgc2xlZXAgZGVwZW5kZW5jeSBzdGF0ZSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKKyAqIEBwd3JkbTE6IHByZXZlbnQgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiBmcm9tIHNsZWVwaW5nIChkZXBlbmRlbnQpCisgKiBAcHdyZG0yOiB3aGVuIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogaXMgYWN0aXZlIChzb3VyY2UpCisgKgorICogUmV0dXJuIDEgaWYgYSBoYXJkd2FyZSBzbGVlcCBkZXBlbmRlbmN5IGV4aXN0cyB3aGVyZWluIHB3cmRtMSB3aWxsCisgKiBub3QgYmUgYWxsb3dlZCB0byBhdXRvbWF0aWNhbGx5IGdvIGluYWN0aXZlIGlmIHB3cmRtMiBpcyBhY3RpdmU7CisgKiAwIGlmIHB3cmRtMSdzIGF1dG9tYXRpYyBwb3dlciBzdGF0ZSBpbmFjdGl2aXR5IHRyYW5zaXRpb24gaXMgaW5kZXBlbmRlbnQKKyAqIG9mIHB3cmRtMidzOyAtRUlOVkFMIGlmIGVpdGhlciBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIGludmFsaWQgb3IgY2FsbGVkCisgKiBvbiBhIG1hY2hpbmUgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbmZpZ3VyYWJsZSBoYXJkd2FyZSBzbGVlcAorICogZGVwZW5kZW5jaWVzOyBvciAtRU5PRU5UIGlmIHRoZSBoYXJkd2FyZSBpcyBpbmNhcGFibGUuCisgKgorICogUkVWSVNJVDogQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gb25seSByZXByZXNlbnRzIHNvZnR3YXJlLWNvbnRyb2xsYWJsZQorICogc2xlZXAgZGVwZW5kZW5jaWVzLglTbGVlcCBkZXBlbmRlbmNpZXMgZml4ZWQgaW4gaGFyZHdhcmUgYXJlIG5vdAorICogeWV0IGhhbmRsZWQgaGVyZS4KKyAqLworaW50IHB3cmRtX3JlYWRfc2xlZXBkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKQoreworCXN0cnVjdCBwb3dlcmRvbWFpbiAqcDsKKworCWlmICghcHdyZG0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+c2xlZXBkZXBfc3Jjcyk7CisJaWYgKElTX0VSUihwKSkgeworCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgc2xlZXAgIgorCQkJICJkZXBlbmRlbmN5IGFmZmVjdGluZyAlcyBmcm9tICVzXG4iLCBwd3JkbTEtPm5hbWUsCisJCQkgcHdyZG0yLT5uYW1lKTsKKwkJcmV0dXJuIElTX0VSUihwKTsKKwl9CisKKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0xLT5wcmNtX29mZnMsIE9NQVAzNDMwX0NNX1NMRUVQREVQLAorCQkJCQkoMSA8PCBwd3JkbTItPmRlcF9iaXQpKTsKK30KKworLyoqCisgKiBwd3JkbV9nZXRfbWVtX2JhbmtfY291bnQgLSBnZXQgbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyBpbiB0aGlzIHBvd2VyZG9tYWluCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY29udHJvbGxhYmxlIG1lbW9yeSBiYW5rcyBpbiBwb3dlcmRvbWFpbiBwd3JkbSwKKyAqIHN0YXJ0aW5nIHdpdGggMS4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsLgorICovCitpbnQgcHdyZG1fZ2V0X21lbV9iYW5rX2NvdW50KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcHdyZG0tPmJhbmtzOworfQorCisvKioKKyAqIHB3cmRtX3NldF9uZXh0X3B3cnN0IC0gc2V0IG5leHQgcG93ZXJkb21haW4gcG93ZXIgc3RhdGUKKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gc2V0CisgKiBAcHdyc3Q6IG9uZSBvZiB0aGUgUFdSRE1fUE9XRVJfKiBtYWNyb3MKKyAqCisgKiBTZXQgdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgbmV4dCBwb3dlciBzdGF0ZSB0byBwd3JzdC4gIFRoZSBwb3dlcmRvbWFpbgorICogbWF5IG5vdCBlbnRlciB0aGlzIHN0YXRlIGltbWVkaWF0ZWx5IGlmIHRoZSBwcmVjb25kaXRpb25zIGZvciB0aGlzIHN0YXRlCisgKiBoYXZlIG5vdCBiZWVuIHNhdGlzZmllZC4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcworICogbnVsbCBvciBpZiB0aGUgcG93ZXIgc3RhdGUgaXMgaW52YWxpZCBmb3IgdGhlIHBvd2VyZG9taW4sIG9yIHJldHVybnMgMAorICogdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fc2V0X25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggcHdyc3QpCit7CisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIShwd3JkbS0+cHdyc3RzICYgKDEgPDwgcHdyc3QpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IHNldHRpbmcgbmV4dCBwb3dlcnN0YXRlIGZvciAlcyB0byAlMHhcbiIsCisJCSBwd3JkbS0+bmFtZSwgcHdyc3QpOworCisJcHJtX3Jtd19tb2RfcmVnX2JpdHMoT01BUF9QT1dFUlNUQVRFX01BU0ssCisJCQkgICAgIChwd3JzdCA8PCBPTUFQX1BPV0VSU1RBVEVfU0hJRlQpLAorCQkJICAgICBwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9yZWFkX25leHRfcHdyc3QgLSBnZXQgbmV4dCBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcG93ZXIgc3RhdGUKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgbmV4dCBwb3dlciBzdGF0ZS4gIFJldHVybnMgLUVJTlZBTAorICogaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZSBuZXh0IHBvd2VyIHN0YXRlCisgKiB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWFkX25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCwKKwkJCQkJT01BUF9QT1dFUlNUQVRFX01BU0spOworfQorCisvKioKKyAqIHB3cmRtX3JlYWRfcHdyc3QgLSBnZXQgY3VycmVudCBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcG93ZXIgc3RhdGUKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgY3VycmVudCBwb3dlciBzdGF0ZS4JUmV0dXJucyAtRUlOVkFMCisgKiBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIHJldHVybnMgdGhlIGN1cnJlbnQgcG93ZXIgc3RhdGUKKyAqIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX3JlYWRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUU1QsCisJCQkJCU9NQVBfUE9XRVJTVEFURVNUX01BU0spOworfQorCisvKioKKyAqIHB3cmRtX3JlYWRfcHJldl9wd3JzdCAtIGdldCBwcmV2aW91cyBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcHJldmlvdXMgcG93ZXIgc3RhdGUKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgcHJldmlvdXMgcG93ZXIgc3RhdGUuICBSZXR1cm5zIC1FSU5WQUwKKyAqIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgcmV0dXJucyB0aGUgcHJldmlvdXMgcG93ZXIgc3RhdGUKKyAqIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX3JlYWRfcHJldl9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIE9NQVAzNDMwX1BNX1BSRVBXU1RTVCwKKwkJCQkJT01BUDM0MzBfTEFTVFBPV0VSU1RBVEVFTlRFUkVEX01BU0spOworfQorCisvKioKKyAqIHB3cmRtX3NldF9sb2dpY19yZXRzdCAtIHNldCBwb3dlcmRvbWFpbiBsb2dpYyBwb3dlciBzdGF0ZSB1cG9uIHJldGVudGlvbgorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBzZXQKKyAqIEBwd3JzdDogb25lIG9mIHRoZSBQV1JETV9QT1dFUl8qIG1hY3JvcworICoKKyAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSB0aGF0IHRoZSBsb2dpYyBwb3J0aW9uIG9mIHRoZSBwb3dlcmRvbWFpbgorICogcHdyZG0gd2lsbCBlbnRlciB3aGVuIHRoZSBwb3dlcmRvbWFpbiBlbnRlcnMgcmV0ZW50aW9uLiAgVGhpcyB3aWxsCisgKiBiZSBlaXRoZXIgUkVURU5USU9OIG9yIE9GRiwgaWYgc3VwcG9ydGVkLiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZQorICogcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIHRoZSB0YXJnZXQgcG93ZXIgc3RhdGUgaXMgbm90IG5vdAorICogc3VwcG9ydGVkLCBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fc2V0X2xvZ2ljX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IHB3cnN0KQoreworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCEocHdyZG0tPnB3cnN0c19sb2dpY19yZXQgJiAoMSA8PCBwd3JzdCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogc2V0dGluZyBuZXh0IGxvZ2ljIHBvd2Vyc3RhdGUgZm9yICVzIHRvICUweFxuIiwKKwkJIHB3cmRtLT5uYW1lLCBwd3JzdCk7CisKKwkvKgorCSAqIFRoZSByZWdpc3RlciBiaXQgbmFtZXMgYmVsb3cgbWF5IG5vdCBjb3JyZXNwb25kIHRvIHRoZQorCSAqIGFjdHVhbCBuYW1lcyBvZiB0aGUgYml0cyBpbiBlYWNoIHBvd2VyZG9tYWluJ3MgcmVnaXN0ZXIsCisJICogYnV0IHRoZSB0eXBlIG9mIHZhbHVlIHJldHVybmVkIGlzIHRoZSBzYW1lIGZvciBlYWNoCisJICogcG93ZXJkb21haW4uCisJICovCisJcHJtX3Jtd19tb2RfcmVnX2JpdHMoT01BUDM0MzBfTE9HSUNMMUNBQ0hFUkVUU1RBVEUsCisJCQkgICAgIChwd3JzdCA8PCBfX2ZmcyhPTUFQMzQzMF9MT0dJQ0wxQ0FDSEVSRVRTVEFURSkpLAorCQkJICAgICBwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9zZXRfbWVtX29uc3QgLSBzZXQgbWVtb3J5IHBvd2VyIHN0YXRlIHdoaWxlIHBvd2VyZG9tYWluIE9OCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIHNldAorICogQGJhbms6IG1lbW9yeSBiYW5rIG51bWJlciB0byBzZXQgKDAtMykKKyAqIEBwd3JzdDogb25lIG9mIHRoZSBQV1JETV9QT1dFUl8qIG1hY3JvcworICoKKyAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSB0aGF0IG1lbW9yeSBiYW5rIHggb2YgdGhlIHBvd2VyZG9tYWluCisgKiBwd3JkbSB3aWxsIGVudGVyIHdoZW4gdGhlIHBvd2VyZG9tYWluIGVudGVycyB0aGUgT04gc3RhdGUuICBCYW5rCisgKiB3aWxsIGJlIGEgbnVtYmVyIGZyb20gMCB0byAzLCBhbmQgcmVwcmVzZW50cyBkaWZmZXJlbnQgdHlwZXMgb2YKKyAqIG1lbW9yeSwgZGVwZW5kaW5nIG9uIHRoZSBwb3dlcmRvbWFpbi4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUKKyAqIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdCBub3QKKyAqIHN1cHBvcnRlZCBmb3IgdGhpcyBtZW1vcnkgYmFuaywgLUVFWElTVCBpZiB0aGUgdGFyZ2V0IG1lbW9yeSBiYW5rCisgKiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fc2V0X21lbV9vbnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmssIHU4IHB3cnN0KQoreworCXUzMiBtOworCisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocHdyZG0tPmJhbmtzIDwgKGJhbmsgKyAxKSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlpZiAoIShwd3JkbS0+cHdyc3RzX21lbV9vbltiYW5rXSAmICgxIDw8IHB3cnN0KSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiBzZXR0aW5nIG5leHQgbWVtb3J5IHBvd2Vyc3RhdGUgZm9yIGRvbWFpbiAlcyAiCisJCSAiYmFuayAlMHggd2hpbGUgcHdyZG0tT04gdG8gJTB4XG4iLCBwd3JkbS0+bmFtZSwgYmFuaywgcHdyc3QpOworCisJLyoKKwkgKiBUaGUgcmVnaXN0ZXIgYml0IG5hbWVzIGJlbG93IG1heSBub3QgY29ycmVzcG9uZCB0byB0aGUKKwkgKiBhY3R1YWwgbmFtZXMgb2YgdGhlIGJpdHMgaW4gZWFjaCBwb3dlcmRvbWFpbidzIHJlZ2lzdGVyLAorCSAqIGJ1dCB0aGUgdHlwZSBvZiB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBmb3IgZWFjaAorCSAqIHBvd2VyZG9tYWluLgorCSAqLworCXN3aXRjaCAoYmFuaykgeworCWNhc2UgMDoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUT05TVEFURV9NQVNLOworCQlicmVhazsKKwljYXNlIDE6CisJCW0gPSBPTUFQMzQzMF9MMUZMQVRNRU1PTlNUQVRFX01BU0s7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwyQ0FDSEVGTEFUT05TVEFURV9NQVNLOworCQlicmVhazsKKwljYXNlIDM6CisJCW0gPSBPTUFQMzQzMF9MMkZMQVRNRU1PTlNUQVRFX01BU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJcHJtX3Jtd19tb2RfcmVnX2JpdHMobSwgKHB3cnN0IDw8IF9fZmZzKG0pKSwKKwkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1fc2V0X21lbV9yZXRzdCAtIHNldCBtZW1vcnkgcG93ZXIgc3RhdGUgd2hpbGUgcG93ZXJkb21haW4gaW4gUkVUCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIHNldAorICogQGJhbms6IG1lbW9yeSBiYW5rIG51bWJlciB0byBzZXQgKDAtMykKKyAqIEBwd3JzdDogb25lIG9mIHRoZSBQV1JETV9QT1dFUl8qIG1hY3JvcworICoKKyAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSB0aGF0IG1lbW9yeSBiYW5rIHggb2YgdGhlIHBvd2VyZG9tYWluCisgKiBwd3JkbSB3aWxsIGVudGVyIHdoZW4gdGhlIHBvd2VyZG9tYWluIGVudGVycyB0aGUgUkVURU5USU9OIHN0YXRlLgorICogQmFuayB3aWxsIGJlIGEgbnVtYmVyIGZyb20gMCB0byAzLCBhbmQgcmVwcmVzZW50cyBkaWZmZXJlbnQgdHlwZXMKKyAqIG9mIG1lbW9yeSwgZGVwZW5kaW5nIG9uIHRoZSBwb3dlcmRvbWFpbi4gIHB3cnN0IHdpbGwgYmUgZWl0aGVyCisgKiBSRVRFTlRJT04gb3IgT0ZGLCBpZiBzdXBwb3J0ZWQuIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4KKyAqIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdCBub3Qgc3VwcG9ydGVkIGZvcgorICogdGhpcyBtZW1vcnkgYmFuaywgLUVFWElTVCBpZiB0aGUgdGFyZ2V0IG1lbW9yeSBiYW5rIGRvZXMgbm90IGV4aXN0CisgKiBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fc2V0X21lbV9yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rLCB1OCBwd3JzdCkKK3sKKwl1MzIgbTsKKworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHB3cmRtLT5iYW5rcyA8IChiYW5rICsgMSkpCisJCXJldHVybiAtRUVYSVNUOworCisJaWYgKCEocHdyZG0tPnB3cnN0c19tZW1fcmV0W2JhbmtdICYgKDEgPDwgcHdyc3QpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IHNldHRpbmcgbmV4dCBtZW1vcnkgcG93ZXJzdGF0ZSBmb3IgZG9tYWluICVzICIKKwkJICJiYW5rICUweCB3aGlsZSBwd3JkbS1SRVQgdG8gJTB4XG4iLCBwd3JkbS0+bmFtZSwgYmFuaywgcHdyc3QpOworCisJLyoKKwkgKiBUaGUgcmVnaXN0ZXIgYml0IG5hbWVzIGJlbG93IG1heSBub3QgY29ycmVzcG9uZCB0byB0aGUKKwkgKiBhY3R1YWwgbmFtZXMgb2YgdGhlIGJpdHMgaW4gZWFjaCBwb3dlcmRvbWFpbidzIHJlZ2lzdGVyLAorCSAqIGJ1dCB0aGUgdHlwZSBvZiB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBmb3IgZWFjaAorCSAqIHBvd2VyZG9tYWluLgorCSAqLworCXN3aXRjaCAoYmFuaykgeworCWNhc2UgMDoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUUkVUU1RBVEU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbSA9IE9NQVAzNDMwX0wxRkxBVE1FTVJFVFNUQVRFOworCQlicmVhazsKKwljYXNlIDI6CisJCW0gPSBPTUFQMzQzMF9TSEFSRURMMkNBQ0hFRkxBVFJFVFNUQVRFOworCQlicmVhazsKKwljYXNlIDM6CisJCW0gPSBPTUFQMzQzMF9MMkZMQVRNRU1SRVRTVEFURTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisKKwlwcm1fcm13X21vZF9yZWdfYml0cyhtLCAocHdyc3QgPDwgX19mZnMobSkpLCBwd3JkbS0+cHJjbV9vZmZzLAorCQkJICAgICBQTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9yZWFkX2xvZ2ljX3B3cnN0IC0gZ2V0IGN1cnJlbnQgcG93ZXJkb21haW4gbG9naWMgcmV0ZW50aW9uIHBvd2VyIHN0YXRlCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGdldCBjdXJyZW50IGxvZ2ljIHJldGVudGlvbiBwb3dlciBzdGF0ZQorICoKKyAqIFJldHVybiB0aGUgY3VycmVudCBwb3dlciBzdGF0ZSB0aGF0IHRoZSBsb2dpYyBwb3J0aW9uIG9mCisgKiBwb3dlcmRvbWFpbiBwd3JkbSB3aWxsIGVudGVyCisgKiBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZQorICogY3VycmVudCBsb2dpYyByZXRlbnRpb24gcG93ZXIgc3RhdGUgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fcmVhZF9sb2dpY19wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RTVCwKKwkJCQkJT01BUDM0MzBfTE9HSUNTVEFURVNUKTsKK30KKworLyoqCisgKiBwd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3QgLSBnZXQgcHJldmlvdXMgcG93ZXJkb21haW4gbG9naWMgcG93ZXIgc3RhdGUKKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gZ2V0IHByZXZpb3VzIGxvZ2ljIHBvd2VyIHN0YXRlCisgKgorICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBwd3JkbSdzIGxvZ2ljIHBvd2VyIHN0YXRlLiAgUmV0dXJucyAtRUlOVkFMCisgKiBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIHJldHVybnMgdGhlIHByZXZpb3VzIGxvZ2ljCisgKiBwb3dlciBzdGF0ZSB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogVGhlIHJlZ2lzdGVyIGJpdCBuYW1lcyBiZWxvdyBtYXkgbm90IGNvcnJlc3BvbmQgdG8gdGhlCisJICogYWN0dWFsIG5hbWVzIG9mIHRoZSBiaXRzIGluIGVhY2ggcG93ZXJkb21haW4ncyByZWdpc3RlciwKKwkgKiBidXQgdGhlIHR5cGUgb2YgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHNhbWUgZm9yIGVhY2gKKwkgKiBwb3dlcmRvbWFpbi4KKwkgKi8KKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0tPnByY21fb2ZmcywgT01BUDM0MzBfUE1fUFJFUFdTVFNULAorCQkJCQlPTUFQMzQzMF9MQVNUTE9HSUNTVEFURUVOVEVSRUQpOworfQorCisvKioKKyAqIHB3cmRtX3JlYWRfbWVtX3B3cnN0IC0gZ2V0IGN1cnJlbnQgbWVtb3J5IGJhbmsgcG93ZXIgc3RhdGUKKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gZ2V0IGN1cnJlbnQgbWVtb3J5IGJhbmsgcG93ZXIgc3RhdGUKKyAqIEBiYW5rOiBtZW1vcnkgYmFuayBudW1iZXIgKDAtMykKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgY3VycmVudCBtZW1vcnkgcG93ZXIgc3RhdGUgZm9yIGJhbmsKKyAqIHguICBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCwgLUVFWElTVCBpZgorICogdGhlIHRhcmdldCBtZW1vcnkgYmFuayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvcgorICogcmV0dXJucyB0aGUgY3VycmVudCBtZW1vcnkgcG93ZXIgc3RhdGUgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fcmVhZF9tZW1fcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaykKK3sKKwl1MzIgbTsKKworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHB3cmRtLT5iYW5rcyA8IChiYW5rICsgMSkpCisJCXJldHVybiAtRUVYSVNUOworCisJLyoKKwkgKiBUaGUgcmVnaXN0ZXIgYml0IG5hbWVzIGJlbG93IG1heSBub3QgY29ycmVzcG9uZCB0byB0aGUKKwkgKiBhY3R1YWwgbmFtZXMgb2YgdGhlIGJpdHMgaW4gZWFjaCBwb3dlcmRvbWFpbidzIHJlZ2lzdGVyLAorCSAqIGJ1dCB0aGUgdHlwZSBvZiB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBmb3IgZWFjaAorCSAqIHBvd2VyZG9tYWluLgorCSAqLworCXN3aXRjaCAoYmFuaykgeworCWNhc2UgMDoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUU1RBVEVTVF9NQVNLOworCQlicmVhazsKKwljYXNlIDE6CisJCW0gPSBPTUFQMzQzMF9MMUZMQVRNRU1TVEFURVNUX01BU0s7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwyQ0FDSEVGTEFUU1RBVEVTVF9NQVNLOworCQlicmVhazsKKwljYXNlIDM6CisJCW0gPSBPTUFQMzQzMF9MMkZMQVRNRU1TVEFURVNUX01BU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RTVCwgbSk7Cit9CisKKy8qKgorICogcHdyZG1fcmVhZF9wcmV2X21lbV9wd3JzdCAtIGdldCBwcmV2aW91cyBtZW1vcnkgYmFuayBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcHJldmlvdXMgbWVtb3J5IGJhbmsgcG93ZXIgc3RhdGUKKyAqIEBiYW5rOiBtZW1vcnkgYmFuayBudW1iZXIgKDAtMykKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgcHJldmlvdXMgbWVtb3J5IHBvd2VyIHN0YXRlIGZvciBiYW5rCisgKiB4LiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwsIC1FRVhJU1QgaWYKKyAqIHRoZSB0YXJnZXQgbWVtb3J5IGJhbmsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGNvbnRyb2xsYWJsZSwgb3IKKyAqIHJldHVybnMgdGhlIHByZXZpb3VzIG1lbW9yeSBwb3dlciBzdGF0ZSB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWFkX3ByZXZfbWVtX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspCit7CisJdTMyIG07CisKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwd3JkbS0+YmFua3MgPCAoYmFuayArIDEpKQorCQlyZXR1cm4gLUVFWElTVDsKKworCS8qCisJICogVGhlIHJlZ2lzdGVyIGJpdCBuYW1lcyBiZWxvdyBtYXkgbm90IGNvcnJlc3BvbmQgdG8gdGhlCisJICogYWN0dWFsIG5hbWVzIG9mIHRoZSBiaXRzIGluIGVhY2ggcG93ZXJkb21haW4ncyByZWdpc3RlciwKKwkgKiBidXQgdGhlIHR5cGUgb2YgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHNhbWUgZm9yIGVhY2gKKwkgKiBwb3dlcmRvbWFpbi4KKwkgKi8KKwlzd2l0Y2ggKGJhbmspIHsKKwljYXNlIDA6CisJCW0gPSBPTUFQMzQzMF9MQVNUTUVNMVNUQVRFRU5URVJFRF9NQVNLOworCQlicmVhazsKKwljYXNlIDE6CisJCW0gPSBPTUFQMzQzMF9MQVNUTUVNMlNUQVRFRU5URVJFRF9NQVNLOworCQlicmVhazsKKwljYXNlIDI6CisJCW0gPSBPTUFQMzQzMF9MQVNUU0hBUkVETDJDQUNIRUZMQVRTVEFURUVOVEVSRURfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQltID0gT01BUDM0MzBfTEFTVEwyRkxBVE1FTVNUQVRFRU5URVJFRF9NQVNLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCXJldHVybiAtRUVYSVNUOworCX0KKworCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLAorCQkJCQlPTUFQMzQzMF9QTV9QUkVQV1NUU1QsIG0pOworfQorCisvKioKKyAqIHB3cmRtX2NsZWFyX2FsbF9wcmV2X3B3cnN0IC0gY2xlYXIgcHJldmlvdXMgcG93ZXJzdGF0ZSByZWdpc3RlciBmb3IgYSBwd3JkbQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBjbGVhcgorICoKKyAqIENsZWFyIHRoZSBwb3dlcmRvbWFpbidzIHByZXZpb3VzIHBvd2VyIHN0YXRlIHJlZ2lzdGVyLiAgQ2xlYXJzIHRoZQorICogZW50aXJlIHJlZ2lzdGVyLCBpbmNsdWRpbmcgbG9naWMgYW5kIG1lbW9yeSBiYW5rIHByZXZpb3VzIHBvd2VyIHN0YXRlcy4KKyAqIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsLCBvciByZXR1cm5zIDAgdXBvbgorICogc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX2NsZWFyX2FsbF9wcmV2X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFhYWCBzaG91bGQgZ2V0IHRoZSBwb3dlcmRvbWFpbidzIGN1cnJlbnQgc3RhdGUgaGVyZTsKKwkgKiB3YXJuICYgZmFpbCBpZiBpdCBpcyBub3QgT04uCisJICovCisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IGNsZWFyaW5nIHByZXZpb3VzIHBvd2VyIHN0YXRlIHJlZyBmb3IgJXNcbiIsCisJCSBwd3JkbS0+bmFtZSk7CisKKwlwcm1fd3JpdGVfbW9kX3JlZygwLCBwd3JkbS0+cHJjbV9vZmZzLCBPTUFQMzQzMF9QTV9QUkVQV1NUU1QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1fZW5hYmxlX2hkd3Jfc2FyIC0gZW5hYmxlIGF1dG9tYXRpYyBoYXJkd2FyZSBTQVIgZm9yIGEgcHdyZG0KKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICoKKyAqCisgKiBFbmFibGUgYXV0b21hdGljIGNvbnRleHQgc2F2ZS1hbmQtcmVzdG9yZSB1cG9uIHBvd2VyIHN0YXRlIGNoYW5nZQorICogZm9yIHNvbWUgZGV2aWNlcyBpbiBhIHBvd2VyZG9tYWluLiAgV2FybmluZzogdGhpcyBvbmx5IGFmZmVjdHMgYQorICogc3Vic2V0IG9mIGRldmljZXMgaW4gYSBwb3dlcmRvbWFpbjsgY2hlY2sgdGhlIFRSTSBjbG9zZWx5LiAgUmV0dXJucworICogLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIGlmIHRoZSBwb3dlcmRvbWFpbgorICogZG9lcyBub3Qgc3VwcG9ydCBhdXRvbWF0aWMgc2F2ZS1hbmQtcmVzdG9yZSwgb3IgcmV0dXJucyAwIHVwb24KKyAqIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9lbmFibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKHB3cmRtLT5mbGFncyAmIFBXUkRNX0hBU19IRFdSX1NBUikpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiAlczogc2V0dGluZyBTQVZFQU5EUkVTVE9SRSBiaXRcbiIsCisJCSBwd3JkbS0+bmFtZSk7CisKKwlwcm1fcm13X21vZF9yZWdfYml0cygwLCAxIDw8IE9NQVAzNDMwRVMyX1NBVkVBTkRSRVNUT1JFX1NISUZULAorCQkJICAgICBwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9kaXNhYmxlX2hkd3Jfc2FyIC0gZGlzYWJsZSBhdXRvbWF0aWMgaGFyZHdhcmUgU0FSIGZvciBhIHB3cmRtCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqCisgKgorICogRGlzYWJsZSBhdXRvbWF0aWMgY29udGV4dCBzYXZlLWFuZC1yZXN0b3JlIHVwb24gcG93ZXIgc3RhdGUgY2hhbmdlCisgKiBmb3Igc29tZSBkZXZpY2VzIGluIGEgcG93ZXJkb21haW4uICBXYXJuaW5nOiB0aGlzIG9ubHkgYWZmZWN0cyBhCisgKiBzdWJzZXQgb2YgZGV2aWNlcyBpbiBhIHBvd2VyZG9tYWluOyBjaGVjayB0aGUgVFJNIGNsb3NlbHkuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgaWYgdGhlIHBvd2VyZG9tYWluCisgKiBkb2VzIG5vdCBzdXBwb3J0IGF1dG9tYXRpYyBzYXZlLWFuZC1yZXN0b3JlLCBvciByZXR1cm5zIDAgdXBvbgorICogc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX2Rpc2FibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKHB3cmRtLT5mbGFncyAmIFBXUkRNX0hBU19IRFdSX1NBUikpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiAlczogY2xlYXJpbmcgU0FWRUFORFJFU1RPUkUgYml0XG4iLAorCQkgcHdyZG0tPm5hbWUpOworCisJcHJtX3Jtd19tb2RfcmVnX2JpdHMoMSA8PCBPTUFQMzQzMEVTMl9TQVZFQU5EUkVTVE9SRV9TSElGVCwgMCwKKwkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1faGFzX2hkd3Jfc2FyIC0gdGVzdCB3aGV0aGVyIHBvd2VyZG9tYWluIHN1cHBvcnRzIGhhcmR3YXJlIFNBUgorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKgorICoKKyAqIFJldHVybnMgMSBpZiBwb3dlcmRvbWFpbiAncHdyZG0nIHN1cHBvcnRzIGhhcmR3YXJlIHNhdmUtYW5kLXJlc3RvcmUKKyAqIGZvciBzb21lIGRldmljZXMsIG9yIDAgaWYgaXQgZG9lcyBub3QuCisgKi8KK2Jvb2wgcHdyZG1faGFzX2hkd3Jfc2FyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJcmV0dXJuIChwd3JkbSAmJiBwd3JkbS0+ZmxhZ3MgJiBQV1JETV9IQVNfSERXUl9TQVIpID8gMSA6IDA7Cit9CisKKy8qKgorICogcHdyZG1fd2FpdF90cmFuc2l0aW9uIC0gd2FpdCBmb3IgcG93ZXJkb21haW4gcG93ZXIgdHJhbnNpdGlvbiB0byBmaW5pc2gKKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gd2FpdCBmb3IKKyAqCisgKiBJZiB0aGUgcG93ZXJkb21haW4gcHdyZG0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYSBzdGF0ZSB0cmFuc2l0aW9uLAorICogc3BpbiB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIHBvd2VyIHRyYW5zaXRpb24sIG9yIHVudGlsIGFuIGl0ZXJhdGlvbgorICogYmFpbG91dCB2YWx1ZSBpcyByZWFjaGVkLiBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluCisgKiBwb2ludGVyIGlzIG51bGwsIC1FQUdBSU4gaWYgdGhlIGJhaWxvdXQgdmFsdWUgd2FzIHJlYWNoZWQsIG9yCisgKiByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fd2FpdF90cmFuc2l0aW9uKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJdTMyIGMgPSAwOworCisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFJFVklTSVQ6IHB3cmRtX3dhaXRfdHJhbnNpdGlvbigpIG1heSBiZSBiZXR0ZXIgaW1wbGVtZW50ZWQKKwkgKiB2aWEgYSBjYWxsYmFjayBhbmQgYSBwZXJpb2RpYyB0aW1lciBjaGVjayAtLSBob3cgbG9uZyBkbyB3ZSBleHBlY3QKKwkgKiBwb3dlcmRvbWFpbiB0cmFuc2l0aW9ucyB0byB0YWtlPworCSAqLworCisJLyogWFhYIElzIHRoaXMgdWRlbGF5KCkgdmFsdWUgbWVhbmluZ2Z1bD8gKi8KKwl3aGlsZSAoKHBybV9yZWFkX21vZF9yZWcocHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVFNUKSAmCisJCU9NQVBfSU5UUkFOU0lUSU9OKSAmJgorCSAgICAgICAoYysrIDwgUFdSRE1fVFJBTlNJVElPTl9CQUlMT1VUKSkKKwkJdWRlbGF5KDEpOworCisJaWYgKGMgPj0gUFdSRE1fVFJBTlNJVElPTl9CQUlMT1VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAicG93ZXJkb21haW46IHdhaXRlZCB0b28gbG9uZyBmb3IgIgorCQkgICAgICAgInBvd2VyZG9tYWluICVzIHRvIGNvbXBsZXRlIHRyYW5zaXRpb25cbiIsIHB3cmRtLT5uYW1lKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiBjb21wbGV0ZWQgdHJhbnNpdGlvbiBpbiAlZCBsb29wc1xuIiwgYyk7CisKKwlyZXR1cm4gMDsKK30KKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTE1MWZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIE9NQVAyLzMgY29tbW9uIHBvd2VyZG9tYWluIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy04IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKiBEZWJ1Z2dpbmcgYW5kIGludGVncmF0aW9uIGZpeGVzIGJ5IEpvdW5pIEjDtmdhbmRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBBUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOUworI2RlZmluZSBBUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOUworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBvZiB0aGUgcG93ZXJkb21haW5zIHRoYXQgaGF2ZSBzb21lIGVsZW1lbnQKKyAqIG9mIHNvZnR3YXJlIGNvbnRyb2wgZm9yIHRoZSBPTUFQMjR4eCBhbmQgT01BUDM0WFggY2hpcHMuCisgKgorICogQSBmZXcgbm90ZXM6CisgKgorICogVGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0aW5nIG9mIHBvd2VyZG9tYWlucyBvbiB0aGUgY2hpcHM7IG9ubHkKKyAqIHBvd2VyZG9tYWlucyB0aGF0IGNhbiBiZSBjb250cm9sbGVkIGluIHNvZnR3YXJlLgorICoKKyAqIEEgdXNlZnVsIHZhbGlkYXRpb24gcnVsZSBmb3Igc3RydWN0IHBvd2VyZG9tYWluOgorICogQW55IHBvd2VyZG9tYWluIHJlZmVyZW5jZWQgYnkgYSB3a2RlcF9zcmNzIG9yIHNsZWVwZGVwX3NyY3MgYXJyYXkKKyAqIG11c3QgaGF2ZSBhIGRlcF9iaXQgYXNzaWduZWQuICBTbyB3a2RlcF9zcmNzL3NsZWVwZGVwX3NyY3MgYXJlIHJlYWxseQorICoganVzdCBzb2Z0d2FyZS1jb250cm9sbGFibGUgZGVwZW5kZW5jaWVzLiAgTm9uLXNvZnR3YXJlLWNvbnRyb2xsYWJsZQorICogZGVwZW5kZW5jaWVzIGRvIGV4aXN0LCBidXQgdGhleSBhcmUgbm90IGVuY29kZWQgYmVsb3cgKHlldCkuCisgKgorICogMjR4eCBkb2VzIG5vdCBzdXBwb3J0IHByb2dyYW1tYWJsZSBzbGVlcCBkZXBlbmRlbmNpZXMgKFNMRUVQREVQKQorICoKKyAqLworCisvKgorICogVGhlIG5hbWVzIGZvciB0aGUgRFNQL0lWQTIgcG93ZXJkb21haW5zIGFyZSBjb25mdXNpbmcuCisgKgorICogTW9zdCBPTUFQIGNoaXBzIGhhdmUgYW4gb24tYm9hcmQgRFNQLgorICoKKyAqIE9uIHRoZSAyNDIwLCB0aGlzIGlzIGEgJ0M1NSBEU1AgY2FsbGVkLCBzaW1wbHksIHRoZSBEU1AuICBJdHMKKyAqIHBvd2VyZG9tYWluIGlzIGNhbGxlZCB0aGUgIkRTUCBwb3dlciBkb21haW4uIiAgT24gdGhlIDI0MzAsIHRoZQorICogb24tYm9hcmQgRFNQIGlzIGEgJ0M2NCBEU1AsIG5vdyBjYWxsZWQgdGhlIElWQTIgb3IgSVZBMi4xLiAgSXRzCisgKiBwb3dlcmRvbWFpbiBpcyBzdGlsbCBjYWxsZWQgdGhlICJEU1AgcG93ZXIgZG9tYWluLiIJT24gdGhlIDM0MzAsCisgKiB0aGUgRFNQIGlzIGEgJ0M2NCBEU1AgbGlrZSB0aGUgMjQzMCwgYWxzbyBrbm93biBhcyB0aGUgSVZBMjsgYnV0CisgKiBpdHMgcG93ZXJkb21haW4gaXMgbm93IGNhbGxlZCB0aGUgIklWQTIgcG93ZXIgZG9tYWluLiIKKyAqCisgKiBUaGUgMjQyMCBhbHNvIGhhcyBzb21ldGhpbmcgY2FsbGVkIHRoZSBJVkEsIHdoaWNoIGlzIGEgc2VwYXJhdGUgQVJNCisgKiBjb3JlLCBhbmQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgRFNQL0lWQTIuCisgKgorICogSWRlYWxseSB0aGUgRFNQL0lWQTIgY291bGQganVzdCBiZSB0aGUgc2FtZSBwb3dlcmRvbWFpbiwgYnV0IHRoZSBQUkNNCisgKiBhZGRyZXNzIG9mZnNldCBpcyBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgQzU1IGFuZCBDNjQgRFNQcy4KKyAqCisgKiBUaGUgb3Zlcmx5LXNwZWNpZmljIGRlcF9iaXQgbmFtZXMgYXJlIGR1ZSB0byBhIGJpdCBuYW1lIGNvbGxpc2lvbgorICogd2l0aCBDTV9GQ0xLRU5fe0RTUCxJVkEyfS4gIFRoZSBEU1AvSVZBMiBQTV9XS0RFUCBhbmQgQ01fU0xFRVBERVAgc2hpZnQKKyAqIHZhbHVlIGFyZSB0aGUgc2FtZSBmb3IgYWxsIHBvd2VyZG9tYWluczogMgorICovCisKKy8qCisgKiBYWFggc2hvdWxkIGRlcF9iaXQgYmUgYSBtYXNrLCBzbyB3ZSBjYW4gdGVzdCB0byBzZWUgaWYgaXQgaXMgMCBhcyBhCisgKiBzYW5pdHkgY2hlY2s/CisgKiBYWFggZW5jb2RlIGhhcmR3YXJlIGZpeGVkIHdha2V1cCBkZXBlbmRlbmNpZXMgLS0gZXNwLiBmb3IgMzQzMCBDT1JFCisgKi8KKworI2luY2x1ZGUgPG1hY2gvcG93ZXJkb21haW4uaD4KKworI2luY2x1ZGUgInByY20tY29tbW9uLmgiCisjaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAiY20uaCIKKworLyogT01BUDIvMy1jb21tb24gcG93ZXJkb21haW5zIGFuZCB3YWtldXAgZGVwZW5kZW5jaWVzICovCisKKy8qCisgKiAyNDIwLzI0MzAgUE1fV0tERVBfR0ZYOiBDT1JFLCBNUFUsIFdLVVAKKyAqIDM0MzBFUzEgUE1fV0tERVBfR0ZYOiBhZGRzIElWQTIsIHJlbW92ZXMgQ09SRQorICogMzQzMEVTMiBQTV9XS0RFUF9TR1g6IGFkZHMgSVZBMiwgcmVtb3ZlcyBDT1JFCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGdmeF9zZ3hfd2tkZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJjb3JlX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIml2YTJfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfAorCQkJCQkgICAgQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAid2t1cF9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwKKwkJCQkJICAgIENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qCisgKiAzNDMwOiBDTV9TTEVFUERFUF9DQU06IE1QVQorICogMzQzMEVTMTogQ01fU0xFRVBERVBfR0ZYOiBNUFUKKyAqIDM0MzBFUzI6IENNX1NMRUVQREVQX1NHWDogTVBVCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGNhbV9nZnhfc2xlZXBkZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworCisjaW5jbHVkZSAicG93ZXJkb21haW5zMjR4eC5oIgorI2luY2x1ZGUgInBvd2VyZG9tYWluczM0eHguaCIKKworCisvKgorICogT01BUDIvMyBjb21tb24gcG93ZXJkb21haW5zCisgKi8KKworLyoKKyAqIFRoZSBHRlggcG93ZXJkb21haW4gaXMgbm90IHByZXNlbnQgb24gMzQzMEVTMiwgYnV0IGN1cnJlbnRseSB3ZSBkbyBub3QKKyAqIGhhdmUgYSBtYWNybyB0byBmaWx0ZXIgaXQgb3V0IGF0IGNvbXBpbGUtdGltZS4KKyAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBnZnhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiZ2Z4X3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBHRlhfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfAorCQkJCQkgICBDSElQX0lTX09NQVAzNDMwRVMxKSwKKwkud2tkZXBfc3JjcwkgID0gZ2Z4X3NneF93a2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJICA9IGNhbV9nZnhfc2xlZXBkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiB3a3VwX3B3cmRtID0geworCS5uYW1lCQk9ICJ3a3VwX3B3cmRtIiwKKwkucHJjbV9vZmZzCT0gV0tVUF9NT0QsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfCBDSElQX0lTX09NQVAzNDMwKSwKKwkuZGVwX2JpdAk9IE9NQVBfRU5fV0tVUF9TSElGVCwKK307CisKKworCisvKiBBcyBwb3dlcmRvbWFpbnMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgYWJvdmUsIHRoaXMgbGlzdCBtdXN0IGFsc28gYmUgY2hhbmdlZCAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqcG93ZXJkb21haW5zX29tYXBbXSBfX2luaXRkYXRhID0geworCisJJmdmeF9wd3JkbSwKKwkmd2t1cF9wd3JkbSwKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisJJmRzcF9wd3JkbSwKKwkmbXB1XzI0eHhfcHdyZG0sCisJJmNvcmVfMjR4eF9wd3JkbSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKKwkmbWRtX3B3cmRtLAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorCSZpdmEyX3B3cmRtLAorCSZtcHVfMzR4eF9wd3JkbSwKKwkmbmVvbl9wd3JkbSwKKwkmY29yZV8zNHh4X3B3cmRtLAorCSZjYW1fcHdyZG0sCisJJmRzc19wd3JkbSwKKwkmcGVyX3B3cmRtLAorCSZlbXVfcHdyZG0sCisJJnNneF9wd3JkbSwKKwkmdXNiaG9zdF9wd3JkbSwKKyNlbmRpZgorCisJTlVMTAorfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMjR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwOGRjMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMjR4eC5oCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogT01BUDI0WFggcG93ZXJkb21haW4gZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqIERlYnVnZ2luZyBhbmQgaW50ZWdyYXRpb24gZml4ZXMgYnkgSm91bmkgSMO2Z2FuZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIEFSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TMjRYWAorI2RlZmluZSBBUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOUzI0WFgKKworLyoKKyAqIE4uQi4gSWYgcG93ZXJkb21haW5zIGFyZSBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhpcyBmaWxlLCB1cGRhdGUKKyAqIHRoZSBhcnJheSBpbiBtYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oLgorICovCisKKyNpbmNsdWRlIDxtYWNoL3Bvd2VyZG9tYWluLmg+CisKKyNpbmNsdWRlICJwcmNtLWNvbW1vbi5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgorCisvKiAyNFhYIHBvd2VyZG9tYWlucyBhbmQgZGVwZW5kZW5jaWVzICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAorCisKKy8qIFdha2V1cCBkZXBlbmRlbmN5IHNvdXJjZSBhcnJheXMgKi8KKworLyoKKyAqIDI0MjAvMjQzMCBQTV9XS0RFUF9EU1A6IENPUkUsIE1QVSwgV0tVUAorICogMjQzMCBQTV9XS0RFUF9NRE06IHNhbWUgYXMgYWJvdmUKKyAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgZHNwX21kbV8yNHh4X3drZGVwc1tdID0geworCXsKKwkJLnB3cmRtX25hbWUgPSAiY29yZV9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAid2t1cF9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKgorICogMjQyMCBQTV9XS0RFUF9NUFU6IENPUkUsIERTUCwgV0tVUAorICogMjQzMCBhZGRzIE1ETQorICovCitzdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBtcHVfMjR4eF93a2RlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAiZHNwX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAibWRtX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qCisgKiAyNDIwIFBNX1dLREVQX0NPUkU6IERTUCwgR0ZYLCBNUFUsIFdLVVAKKyAqIDI0MzAgYWRkcyBNRE0KKyAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgY29yZV8yNHh4X3drZGVwc1tdID0geworCXsKKwkJLnB3cmRtX25hbWUgPSAiZHNwX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gImdmeF9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAid2t1cF9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJtZG1fcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworCisvKiBQb3dlcmRvbWFpbnMgKi8KKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkc3BfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiZHNwX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQMjRYWF9EU1BfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAorCS5kZXBfYml0CSAgPSBPTUFQMjRYWF9QTV9XS0RFUF9NUFVfRU5fRFNQX1NISUZULAorCS53a2RlcF9zcmNzCSAgPSBkc3BfbWRtXzI0eHhfd2tkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBtcHVfMjR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJtcHVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE1QVV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCisJLmRlcF9iaXQJICA9IE9NQVAyNFhYX0VOX01QVV9TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gbXB1XzI0eHhfd2tkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwKKwl9LAorCS5wd3JzdHNfbWVtX29uCSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfMjR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKKwkud2tkZXBfc3JjcwkgID0gY29yZV8yNHh4X3drZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLmRlcF9iaXQJICA9IE9NQVAyNFhYX0VOX0NPUkVfU0hJRlQsCisJLmJhbmtzCQkgID0gMywKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9SRVQsCSAvKiBNRU0xUkVUU1RBVEUgKi8KKwkJWzFdID0gUFdSU1RTX09GRl9SRVQsCSAvKiBNRU0yUkVUU1RBVEUgKi8KKwkJWzJdID0gUFdSU1RTX09GRl9SRVQsCSAvKiBNRU0zUkVUU1RBVEUgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVUX09OLCAvKiBNRU0xT05TVEFURSAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVF9PTiwgLyogTUVNMk9OU1RBVEUgKi8KKwkJWzJdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTNPTlNUQVRFICovCisJfSwKK307CisKKyNlbmRpZgkgICAvKiBDT05GSUdfQVJDSF9PTUFQMjRYWCAqLworCisKKworLyoKKyAqIDI0MzAtc3BlY2lmaWMgcG93ZXJkb21haW5zCisgKi8KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCisKKy8qIFhYWCAyNDMwIEtJTExET01BSU5XS1VQIGJpdD8gIE5vIGN1cnJlbnQgdXNlcnMgYXBwYXJlbnRseSAqLworCisvKiBBbm90aGVyIGNhc2Ugb2YgYml0IG5hbWUgY29sbGlzaW9ucyBiZXR3ZWVuIHNldmVyYWwgcmVnaXN0ZXJzOiBFTl9NRE0gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbWRtX3B3cmRtID0geworCS5uYW1lCQkgID0gIm1kbV9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDI0MzBfTURNX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKKwkuZGVwX2JpdAkgID0gT01BUDI0MzBfUE1fV0tERVBfTVBVX0VOX01ETV9TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gZHNwX21kbV8yNHh4X3drZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCisJfSwKK307CisKKyNlbmRpZiAgICAgLyogQ09ORklHX0FSQ0hfT01BUDI0MzAgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU3M2Y3MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogT01BUDM0WFggcG93ZXJkb21haW4gZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqIERlYnVnZ2luZyBhbmQgaW50ZWdyYXRpb24gZml4ZXMgYnkgSm91bmkgSMO2Z2FuZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIEFSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TMzRYWAorI2RlZmluZSBBUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOUzM0WFgKKworLyoKKyAqIE4uQi4gSWYgcG93ZXJkb21haW5zIGFyZSBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhpcyBmaWxlLCB1cGRhdGUKKyAqIHRoZSBhcnJheSBpbiBtYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oLgorICovCisKKyNpbmNsdWRlIDxtYWNoL3Bvd2VyZG9tYWluLmg+CisKKyNpbmNsdWRlICJwcmNtLWNvbW1vbi5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgorCisvKgorICogMzRYWC1zcGVjaWZpYyBwb3dlcmRvbWFpbnMsIGRlcGVuZGVuY2llcworICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorCisvKgorICogMzQzMDogUE1fV0tERVBfe1BFUixVU0JIT1NUfTogQ09SRSwgSVZBMiwgTVBVLCBXS1VQCisgKiAoVVNCSE9TVCBpcyBFUzIgb25seSkKKyAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgcGVyX3VzYmhvc3Rfd2tkZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJjb3JlX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIml2YTJfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyoKKyAqIDM0MzAgUE1fV0tERVBfTVBVOiBDT1JFLCBJVkEyLCBEU1MsIFBFUgorICovCitzdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBtcHVfMzR4eF93a2RlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAiaXZhMl9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJkc3NfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAicGVyX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qCisgKiAzNDMwIFBNX1dLREVQX0lWQTI6IENPUkUsIE1QVSwgV0tVUCwgRFNTLCBQRVIKKyAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgaXZhMl93a2RlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAiZHNzX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gInBlcl9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisKKy8qIDM0MzAgUE1fV0tERVBfe0NBTSxEU1N9OiBJVkEyLCBNUFUsIFdLVVAgKi8KK3N0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGNhbV9kc3Nfd2tkZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJpdmEyX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJ3a3VwX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qIDM0MzA6IFBNX1dLREVQX05FT046IE1QVSAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgbmVvbl93a2RlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisKKy8qIFNsZWVwIGRlcGVuZGVuY3kgc291cmNlIGFycmF5cyBmb3IgMzR4eC1zcGVjaWZpYyBwd3JkbXMgLSAzNFhYIG9ubHkgKi8KKworLyoKKyAqIDM0MzA6IENNX1NMRUVQREVQX3tEU1MsUEVSfTogTVBVLCBJVkEKKyAqIDM0MzBFUzI6IENNX1NMRUVQREVQX1VTQkhPU1Q6IE1QVSwgSVZBCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGRzc19wZXJfdXNiaG9zdF9zbGVlcGRlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJpdmEyX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKworLyoKKyAqIFBvd2VyZG9tYWlucworICovCisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gaXZhMl9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJpdmEyX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9JVkEyX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKKwkuZGVwX2JpdAkgID0gT01BUDM0MzBfUE1fV0tERVBfTVBVX0VOX0lWQTJfU0hJRlQsCisJLndrZGVwX3NyY3MJICA9IGl2YTJfd2tkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDQsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVULAorCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwKKwkJWzJdID0gUFdSU1RTX09GRl9SRVQsCisJCVszXSA9IFBXUlNUU19PRkZfUkVULAorCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sCisJCVsxXSA9IFBXUkRNX1BPV0VSX09OLAorCQlbMl0gPSBQV1JTVFNfT0ZGX09OLAorCQlbM10gPSBQV1JETV9QT1dFUl9PTiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBtcHVfMzR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJtcHVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE1QVV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLmRlcF9iaXQJICA9IE9NQVAzNDMwX0VOX01QVV9TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gbXB1XzM0eHhfd2tkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVULAorCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9PTiwKKwl9LAorfTsKKworLyogTm8gd2tkZXBzIG9yIHNsZWVwZGVwcyBmb3IgMzR4eCBjb3JlIGFwcGFyZW50bHkgKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY29yZV8zNHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImNvcmVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IENPUkVfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkuZGVwX2JpdAkgID0gT01BUDM0MzBfRU5fQ09SRV9TSElGVCwKKwkuYmFua3MJCSAgPSAyLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwJIC8qIE1FTTFSRVRTVEFURSAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJIC8qIE1FTTJSRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTFPTlNUQVRFICovCisJCVsxXSA9IFBXUlNUU19PRkZfUkVUX09OLCAvKiBNRU0yT05TVEFURSAqLworCX0sCit9OworCisvKiBBbm90aGVyIGNhc2Ugb2YgYml0IG5hbWUgY29sbGlzaW9ucyBiZXR3ZWVuIHNldmVyYWwgcmVnaXN0ZXJzOiBFTl9EU1MgKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHNzX3B3cmRtID0geworCS5uYW1lCQkgID0gImRzc19wd3JkbSIsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLnByY21fb2ZmcwkgID0gT01BUDM0MzBfRFNTX01PRCwKKwkuZGVwX2JpdAkgID0gT01BUDM0MzBfUE1fV0tERVBfTVBVX0VOX0RTU19TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gY2FtX2Rzc193a2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJICA9IGRzc19wZXJfdXNiaG9zdF9zbGVlcGRlcHMsCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwgLyogTUVNUkVUU1RBVEUgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLCAgLyogTUVNT05TVEFURSAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIHNneF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJzZ3hfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwRVMyX1NHWF9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMiksCisJLndrZGVwX3NyY3MJICA9IGdmeF9zZ3hfd2tkZXBzLAorCS5zbGVlcGRlcF9zcmNzCSAgPSBjYW1fZ2Z4X3NsZWVwZGVwcywKKwkvKiBYWFggVGhpcyBpcyBhY2N1cmF0ZSBmb3IgMzQzMCBTR1gsIGJ1dCB3aGF0IGFib3V0IEdGWD8gKi8KKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY2FtX3B3cmRtID0geworCS5uYW1lCQkgID0gImNhbV9wd3JkbSIsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLnByY21fb2ZmcwkgID0gT01BUDM0MzBfQ0FNX01PRCwKKwkud2tkZXBfc3JjcwkgID0gY2FtX2Rzc193a2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJICA9IGNhbV9nZnhfc2xlZXBkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBwZXJfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAicGVyX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9QRVJfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorCS5kZXBfYml0CSAgPSBPTUFQMzQzMF9FTl9QRVJfU0hJRlQsCisJLndrZGVwX3NyY3MJICA9IHBlcl91c2Job3N0X3drZGVwcywKKwkuc2xlZXBkZXBfc3JjcwkgID0gZHNzX3Blcl91c2Job3N0X3NsZWVwZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBlbXVfcHdyZG0gPSB7CisJLm5hbWUJCT0gImVtdV9wd3JkbSIsCisJLnByY21fb2Zmcwk9IE9NQVAzNDMwX0VNVV9NT0QsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBuZW9uX3B3cmRtID0geworCS5uYW1lCQkgID0gIm5lb25fcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwX05FT05fTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorCS53a2RlcF9zcmNzCSAgPSBuZW9uX3drZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIHVzYmhvc3RfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAidXNiaG9zdF9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMiksCisJLndrZGVwX3NyY3MJICA9IHBlcl91c2Job3N0X3drZGVwcywKKwkuc2xlZXBkZXBfc3JjcwkgID0gZHNzX3Blcl91c2Job3N0X3NsZWVwZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCisJfSwKK307CisKKyNlbmRpZiAgICAvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCmluZGV4IDU0YzMyZjQuLjRhMzI4MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKQEAgLTMxMiw3ICszMTIsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQyCQkJCSgxIDw8IDMpCiAKIC8qIENNX1NMRUVQREVQX1BFUiwgUE1fV0tERVBfSVZBMiwgUE1fV0tERVBfTVBVLCBQTV9XS0RFUF9QRVIgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDM0MzBfRU5fQ09SRQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMF9FTl9DT1JFX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUDM0MzBfRU5fQ09SRV9NQVNLCQkJCSgxIDw8IDApCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTI0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMjR4eC5oCmluZGV4IGM2ZDE3YTMuLjQwMDIwNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMjR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMjR4eC5oCkBAIC0yOSw4ICsyOSwxMCBAQAogI2RlZmluZSBPTUFQMjRYWF9XS1VQMV9FTgkJCQkoMSA8PCAwKQogCiAvKiBQTV9XS0RFUF9HRlgsIFBNX1dLREVQX01QVSwgUE1fV0tERVBfRFNQLCBQTV9XS0RFUF9NRE0gc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDI0WFhfRU5fTVBVCQkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMjRYWF9FTl9DT1JFCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAyNFhYX0VOX01QVV9TSElGVAkJCQkxCisjZGVmaW5lIE9NQVAyNFhYX0VOX01QVV9NQVNLCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNFhYX0VOX0NPUkVfU0hJRlQgCQkJCTAKKyNkZWZpbmUgT01BUDI0WFhfRU5fQ09SRV9NQVNLCQkJCSgxIDw8IDApCiAKIC8qCiAgKiBQTV9QV1NUQ1RSTF9NUFUsIFBNX1BXU1RDVFJMX0dGWCwgUE1fUFdTVENUUkxfRFNQLCBQTV9QV1NUQ1RSTF9NRE0KQEAgLTE0MCw4ICsxNDIsMTAgQEAKIC8qIDI0MzAgY2FsbHMgR0xPQkFMV01QVV9SU1QgIkdMT0JBTFdBUk1fUlNUIiBpbnN0ZWFkICovCiAKIC8qIFBNX1dLREVQX01QVSBzcGVjaWZpYyBiaXRzICovCi0jZGVmaW5lIE9NQVAyNDMwX1BNX1dLREVQX01QVV9FTl9NRE0JCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMjRYWF9QTV9XS0RFUF9NUFVfRU5fRFNQCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0MzBfUE1fV0tERVBfTVBVX0VOX01ETV9TSElGVAkJNQorI2RlZmluZSBPTUFQMjQzMF9QTV9XS0RFUF9NUFVfRU5fTURNX01BU0sJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAyNFhYX1BNX1dLREVQX01QVV9FTl9EU1BfU0hJRlQJCTIKKyNkZWZpbmUgT01BUDI0WFhfUE1fV0tERVBfTVBVX0VOX0RTUF9NQVNLCQkoMSA8PCAyKQogCiAvKiBQTV9FVkdFTkNUUkxfTVBVIHNwZWNpZmljIGJpdHMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaAppbmRleCBiNDY4NmJjLi41YjVlY2ZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaApAQCAtNjgsNyArNjgsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9WUElOSURMRQkJCQkoMSA8PCAwKQogCiAvKiBQTV9XS0RFUF9JVkEyLCBQTV9XS0RFUF9NUFUgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDM0MzBfRU5fUEVSCQkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMzQzMF9FTl9QRVJfU0hJRlQJCQkJNworI2RlZmluZSBPTUFQMzQzMF9FTl9QRVJfTUFTSwkJCQkoMSA8PCA3KQogCiAvKiBQTV9QV1NUQ1RSTF9JVkEyLCBQTV9QV1NUQ1RSTF9NUFUsIFBNX1BXU1RDVFJMX0NPUkUgc2hhcmVkIGJpdHMgKi8KICNkZWZpbmUgT01BUDM0MzBfTUVNT1JZQ0hBTkdFCQkJCSgxIDw8IDMpCkBAIC03Nyw3ICs3OCw3IEBACiAjZGVmaW5lIE9NQVAzNDMwX0xPR0lDU1RBVEVTVAkJCQkoMSA8PCAyKQogCiAvKiBQTV9QUkVQV1NUU1RfSVZBMiwgUE1fUFJFUFdTVFNUX0NPUkUgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDM0MzBfTEFTVExPR0lDU1RBVEVFTlRFUkVECQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX0xBU1RMT0dJQ1NUQVRFRU5URVJFRAkJCSgxIDw8IDIpCiAKIC8qCiAgKiBQTV9QUkVQV1NUU1RfSVZBMiwgUE1fUFJFUFdTVFNUX01QVSwgUE1fUFJFUFdTVFNUX0NPUkUsCkBAIC0yNzgsOCArMjc5LDEwIEBACiAjZGVmaW5lIE9NQVAzNDMwX0VNVUxBVElPTl9NUFVfUlNUCQkJKDEgPDwgMTEpCiAKIC8qIFBNX1dLREVQX01QVSBzcGVjaWZpYyBiaXRzICovCi0jZGVmaW5lIE9NQVAzNDMwX1BNX1dLREVQX01QVV9FTl9EU1MJCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fSVZBMgkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX1BNX1dLREVQX01QVV9FTl9EU1NfU0hJRlQJCTUKKyNkZWZpbmUgT01BUDM0MzBfUE1fV0tERVBfTVBVX0VOX0RTU19NQVNLCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fSVZBMl9TSElGVAkJMgorI2RlZmluZSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fSVZBMl9NQVNLCQkoMSA8PCAyKQogCiAvKiBQTV9FVkdFTkNUUkxfTVBVICovCiAjZGVmaW5lIE9NQVAzNDMwX09GRkxPQURNT0RFX1NISUZUCQkJMwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmgKaW5kZXggYmJmNDFmYy4uZTRkYzRiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCkBAIC0xOCw3ICsxOCw3IEBACiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwogI2RlZmluZSBPTUFQX1BSTV9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQkJXAotCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyX1BSTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKKwkJCUlPX0FERFJFU1MoT01BUDJfUFJNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQogI2Vsc2UKICNkZWZpbmUgT01BUDI0MjBfUFJNX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCVwKIAkJCUlPX0FERFJFU1MoT01BUDI0MjBfUFJNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQpAQCAtMzA1LDcgKzMwNSw4IEBACiAgKiAzNDMwOiBQTV9XS0RFUF9JVkEyLCBQTV9XS0RFUF9HRlgsIFBNX1dLREVQX0RTUywgUE1fV0tERVBfQ0FNLAogICoJIFBNX1dLREVQX1BFUgogICovCi0jZGVmaW5lIE9NQVBfRU5fV0tVUAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUF9FTl9XS1VQX1NISUZUCQkJCTQKKyNkZWZpbmUgT01BUF9FTl9XS1VQX01BU0sJCQkJKDEgPDwgNCkKIAogLyoKICAqIDI0WFg6IFBNX1BXU1RDVFJMX01QVSwgUE1fUFdTVENUUkxfQ09SRSwgUE1fUFdTVENUUkxfR0ZYLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKaW5kZXggN2Q5NDQ0YS4uNGRjZjM5YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBPTUFQMiBzZXJpYWwgc3VwcG9ydC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IE5va2lhIENvcnBvcmF0aW9uCiAgKiBBdXRob3I6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgogICoKICAqIEJhc2VkIG9mZiBvZiBhcmNoL2FybS9tYWNoLW9tYXAvb21hcDEvc2VyaWFsLmMKQEAgLTIyLDM4ICsyMiwzNCBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogCi1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2ljayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2ZjayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQyX2ljayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQyX2ZjayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQzX2ljayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQzX2ZjayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqdWFydF9pY2tbT01BUF9NQVhfTlJfUE9SVFNdOworc3RhdGljIHN0cnVjdCBjbGsgKnVhcnRfZmNrW09NQVBfTUFYX05SX1BPUlRTXTsKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKLQkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUMV9CQVNFKSwKLQkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQxX0JBU0UsCisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQxX0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDFfQkFTRSwKIAkJLmlycQkJPSA3MiwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLAogCQkucmVnc2hpZnQJPSAyLAotCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAogCX0sIHsKLQkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUMl9CQVNFKSwKLQkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQyX0JBU0UsCisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQyX0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDJfQkFTRSwKIAkJLmlycQkJPSA3MywKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLAogCQkucmVnc2hpZnQJPSAyLAotCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAogCX0sIHsKLQkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUM19CQVNFKSwKLQkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQzX0JBU0UsCisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQzX0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDNfQkFTRSwKIAkJLmlycQkJPSA3NCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLAogCQkucmVnc2hpZnQJPSAyLAotCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAogCX0sIHsKIAkJLmZsYWdzCQk9IDAKIAl9CkBAIC03MCw3ICs2Niw3IEBACiAJCQkJICAgIGludCB2YWx1ZSkKIHsKIAlvZmZzZXQgPDw9IHAtPnJlZ3NoaWZ0OwotCV9fcmF3X3dyaXRlYih2YWx1ZSwgKHVuc2lnbmVkIGxvbmcpKHAtPm1lbWJhc2UgKyBvZmZzZXQpKTsKKwlfX3Jhd193cml0ZWIodmFsdWUsIHAtPm1lbWJhc2UgKyBvZmZzZXQpOwogfQogCiAvKgpAQCAtODYsMTAgKzgyLDI3IEBACiAJc2VyaWFsX3dyaXRlX3JlZyhwLCBVQVJUX09NQVBfU1lTQywgKDB4MDIgPDwgMykgfCAoMSA8PCAyKSB8ICgxIDw8IDApKTsKIH0KIAotdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdCgpCit2b2lkIG9tYXBfc2VyaWFsX2VuYWJsZV9jbG9ja3MoaW50IGVuYWJsZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgT01BUF9NQVhfTlJfUE9SVFM7IGkrKykgeworCQlpZiAodWFydF9pY2tbaV0gJiYgdWFydF9mY2tbaV0pIHsKKwkJCWlmIChlbmFibGUpIHsKKwkJCQljbGtfZW5hYmxlKHVhcnRfaWNrW2ldKTsKKwkJCQljbGtfZW5hYmxlKHVhcnRfZmNrW2ldKTsKKwkJCX0gZWxzZSB7CisJCQkJY2xrX2Rpc2FibGUodWFydF9pY2tbaV0pOworCQkJCWNsa19kaXNhYmxlKHVhcnRfZmNrW2ldKTsKKwkJCX0KKwkJfQorCX0KK30KKwordm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdCh2b2lkKQogewogCWludCBpOwogCWNvbnN0IHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnICppbmZvOworCWNoYXIgbmFtZVsxNl07CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGUgc2VyaWFsIHBvcnRzIGFyZSBtdXhlZCBvbiBhdCB0aGlzIHBvaW50LgpAQCAtOTcsOCArMTEwLDcgQEAKIAkgKiBpZiBub3QgbmVlZGVkLgogCSAqLwogCi0JaW5mbyA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19VQVJULAotCQkJICAgICAgIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnKTsKKwlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1VBUlQsIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnKTsKIAogCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTEwNyw1OCArMTE5LDI2IEBACiAJCXN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcCA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhICsgaTsKIAogCQlpZiAoIShpbmZvLT5lbmFibGVkX3VhcnRzICYgKDEgPDwgaSkpKSB7Ci0JCQlwLT5tZW1iYXNlID0gMDsKKwkJCXAtPm1lbWJhc2UgPSBOVUxMOwogCQkJcC0+bWFwYmFzZSA9IDA7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCXN3aXRjaCAoaSkgewotCQljYXNlIDA6Ci0JCQl1YXJ0MV9pY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0MV9pY2siKTsKLQkJCWlmIChJU19FUlIodWFydDFfaWNrKSkKLQkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDFfaWNrXG4iKTsKLQkJCWVsc2UgewotCQkJCWNsa19lbmFibGUodWFydDFfaWNrKTsKLQkJCX0KKwkJc3ByaW50ZihuYW1lLCAidWFydCVkX2ljayIsIGkrMSk7CisJCXVhcnRfaWNrW2ldID0gY2xrX2dldChOVUxMLCBuYW1lKTsKKwkJaWYgKElTX0VSUih1YXJ0X2lja1tpXSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCB1YXJ0JWRfaWNrXG4iLCBpKzEpOworCQkJdWFydF9pY2tbaV0gPSBOVUxMOworCQl9IGVsc2UKKwkJCWNsa19lbmFibGUodWFydF9pY2tbaV0pOwogCi0JCQl1YXJ0MV9mY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0MV9mY2siKTsKLQkJCWlmIChJU19FUlIodWFydDFfZmNrKSkKLQkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDFfZmNrXG4iKTsKLQkJCWVsc2UgewotCQkJCWNsa19lbmFibGUodWFydDFfZmNrKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQl1YXJ0Ml9pY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Ml9pY2siKTsKLQkJCWlmIChJU19FUlIodWFydDJfaWNrKSkKLQkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDJfaWNrXG4iKTsKLQkJCWVsc2UgewotCQkJCWNsa19lbmFibGUodWFydDJfaWNrKTsKLQkJCX0KLQotCQkJdWFydDJfZmNrID0gY2xrX2dldChOVUxMLCAidWFydDJfZmNrIik7Ci0JCQlpZiAoSVNfRVJSKHVhcnQyX2ZjaykpCi0JCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQyX2Zja1xuIik7Ci0JCQllbHNlIHsKLQkJCQljbGtfZW5hYmxlKHVhcnQyX2Zjayk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJdWFydDNfaWNrID0gY2xrX2dldChOVUxMLCAidWFydDNfaWNrIik7Ci0JCQlpZiAoSVNfRVJSKHVhcnQzX2ljaykpCi0JCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQzX2lja1xuIik7Ci0JCQllbHNlIHsKLQkJCQljbGtfZW5hYmxlKHVhcnQzX2ljayk7Ci0JCQl9Ci0KLQkJCXVhcnQzX2ZjayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2ZjayIpOwotCQkJaWYgKElTX0VSUih1YXJ0M19mY2spKQotCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0M19mY2tcbiIpOwotCQkJZWxzZSB7Ci0JCQkJY2xrX2VuYWJsZSh1YXJ0M19mY2spOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KKwkJc3ByaW50ZihuYW1lLCAidWFydCVkX2ZjayIsIGkrMSk7CisJCXVhcnRfZmNrW2ldID0gY2xrX2dldChOVUxMLCBuYW1lKTsKKwkJaWYgKElTX0VSUih1YXJ0X2Zja1tpXSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCB1YXJ0JWRfZmNrXG4iLCBpKzEpOworCQkJdWFydF9mY2tbaV0gPSBOVUxMOworCQl9IGVsc2UKKwkJCWNsa19lbmFibGUodWFydF9mY2tbaV0pOwogCiAJCW9tYXBfc2VyaWFsX3Jlc2V0KHApOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdhNzA2Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAuUwotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNAotICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgotICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KLSNpbmNsdWRlIDxtYWNoL2lvLmg+Ci0jaW5jbHVkZSA8bWFjaC9wbS5oPgotCi0jaW5jbHVkZSAic2RyYy5oIgotCi0vKiBGaXJzdCBhZGRyZXNzIG9mIHJlc2VydmVkIGFkZHJlc3Mgc3BhY2U/ICBhcHBhcmVudGx5IHZhbGlkIGZvciBPTUFQMiAmIDMgKi8KLSNkZWZpbmUgQV9TRFJDMF9WCQkoMHhDMDAwMDAwMCkKLQotCS50ZXh0Ci0KLS8qCi0gKiBGb3JjZXMgT01BUCBpbnRvIGlkbGUgc3RhdGUKLSAqCi0gKiBvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZCgpIC0gVGhpcyBiaXQgb2YgY29kZSBqdXN0IGV4ZWN1dGVzIHRoZSBXRkkKLSAqIGZvciBub3JtYWwgaWRsZXMuCi0gKgotICogTm90ZTogVGhpcyBjb2RlIGdldCdzIGNvcGllZCB0byBpbnRlcm5hbCBTUkFNIGF0IGJvb3QuIFdoZW4gdGhlIE9NQVAKLSAqCSB3YWtlcyB1cCBpdCBjb250aW51ZXMgZXhlY3V0aW9uIGF0IHRoZSBwb2ludCBpdCB3ZW50IHRvIHNsZWVwLgotICovCi1FTlRSWShvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZCkKLQlzdG1mZAlzcCEsIHtyMCwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCi0JbW92CXIwLCAjMAkJCUAgY2xlYXIgZm9yIG1jciBzZXR1cAotCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDQJQCB3YWl0IGZvciBpbnRlcnJ1cHQKLQlsZG1mZAlzcCEsIHtyMCwgcGN9CQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCi0KLUVOVFJZKG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kX3N6KQotCS53b3JkCS4gLSBvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZAotCi0vKgotICogb21hcDI0MnhfY3B1X3N1c3BlbmQoKSAtIEZvcmNlcyBPTUFQIGludG8gZGVlcCBzbGVlcCBzdGF0ZSBieSBjb21wbGV0aW5nCi0gKiBTRFJDIHNodXRkb3duIHRoZW4gQVJNIHNodXRkb3duLiAgVXBvbiB3YWtlIE1QVSBpcyBiYWNrIG9uIHNvIGp1c3QgcmVzdG9yZQotICogU0RSQy4KLSAqCi0gKiBJbnB1dDoKLSAqIFIwIDoJRExMIGN0cmwgdmFsdWUgcHJlLVNsZWVwCi0gKiBSMSA6IFByb2Nlc3NvcitSZXZpc2lvbgotICoJMjQyMDogMHgyMSA9IDI0MnhFUzEsIDB4MjYgPSAyNDJ4RVMyLjIKLSAqCTI0MzA6IDB4MzEgPSAyNDMwRVMxLCAweDMyID0gMjQzMEVTMgotICoKLSAqIFRoZSBpZiB0aGUgRFBMTCBpcyBnb2luZyB0byBBdXRvSWRsZS4gSXQgc2VlbXMgbGlrZSB0aGUgRFBMTCBtYXkgYmUgYmFjayBvbgotICogd2hlbiB3ZSBnZXQgY2FsbGVkLCBidXQgdGhlIERMTCBwcm9iYWJseSBpc24ndC4gIFdlIHdpbGwgd2FpdCBhIGJpdCBtb3JlIGluCi0gKiBjYXNlIHRoZSBEUExMIGlzbid0IHF1aXRlIHRoZXJlIHlldC4gVGhlIGNvZGUgd2lsbCB3YWl0IG9uIERMTCBmb3IgRERSIGV2ZW4KLSAqIGlmIGluIHVubG9ja2VkIG1vZGUuCi0gKgotICogRm9yIGxlc3MgdGhhbiAyNDJ4LUVTMi4yIHVwb24gd2FrZSBmcm9tIGEgc2xlZXAgbW9kZSB3aGVyZSB0aGUgZXh0ZXJuYWwKLSAqIG9zY2lsbGF0b3Igd2FzIHN0b3BwZWQsIGEgdGltaW5nIGJ1ZyBleGlzdHMgd2hlcmUgYSBub24tc3RhYmlsaXplZCAxMk1IegotICogY2xvY2sgY2FuIHBhc3MgaW50byB0aGUgUFJDTSBjYW4gY2F1c2UgcHJvYmxlbXMgYXQgRFNQIGFuZCBJVkEuCi0gKiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBjb2RlIHdpbGwgc3dpdGNoIHRvIHRoZSAzMmtIeiBzb3VyY2UgcHJpb3IgdG8gc2xlZXAuCi0gKiBQb3N0IHNsZWVwIHdlIHdpbGwgc2hpZnQgYmFjayB0byB1c2luZyB0aGUgRFBMTC4gIEFwcGFyZW50bHksCi0gKiBDTV9JRExFU1RfQ0xLR0VOIGRvZXMgbm90IHJlZmxlY3QgdGhlIGZ1bGwgY2xvY2sgY2hhbmdlIHNvIHlvdSBuZWVkIHRvIHdhaXQKLSAqIDN4MTJNSHogKyAzeDMya0h6IGNsb2NrcyBmb3IgYSBmdWxsIHN3aXRjaC4KLSAqCi0gKiBUaGUgRExMIGxvYWQgdmFsdWUgaXMgbm90IGtlcHQgaW4gUkVURU5USU9OIG9yIE9GRi4JSXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQKLSAqIGF0IHdha2UKLSAqLwotRU5UUlkob21hcDI0eHhfY3B1X3N1c3BlbmQpCi0Jc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCi0JbW92CXIzLCAjMHgwCQlAIGNsZWFyIGZvciBtcmMgY2FsbAotCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CUAgbWVtb3J5IGJhcnJpZXIsIGhvcGUgU0RSL0REUiBmaW5pc2hlZAotCW5vcAotCW5vcAotCWxkcglyMywgQV9TRFJDX1BPV0VSCUAgYWRkciBvZiBzZHJjIHBvd2VyCi0JbGRyCXI0LCBbcjNdCQlAIHZhbHVlIG9mIHNkcmMgcG93ZXIKLQlvcnIJcjQsIHI0LCAjMHg0MAkJQCBlbmFibGUgc2VsZiByZWZyZXNoIG9uIGlkbGUgcmVxCi0JbW92CXI1LCAjMHgyMDAwCQlAIHNldCBkZWxheSAoRFBMTCByZWxvY2sgKyBETEwgcmVsb2NrKQotCXN0cglyNCwgW3IzXQkJQCBtYWtlIGl0IHNvCi0JbW92CXIyLCAjMAotCW5vcAotCW1jcglwMTUsIDAsIHIyLCBjNywgYzAsIDQJQCB3YWl0IGZvciBpbnRlcnJ1cHQKLQlub3AKLWxvb3A6Ci0Jc3VicwlyNSwgcjUsICMweDEJCUAgYXdha2UsIHdhaXQganVzdCBhIGJpdAotCWJuZQlsb29wCi0KLQkvKiBUaGUgRFBMTCBoYXMgb24gYmVmb3JlIHdlIHRha2UgdGhlIEREUiBvdXQgb2Ygc2VsZiByZWZyZXNoICovCi0JYmljCXI0LCByNCwgIzB4NDAJCUAgbm93IGNsZWFyIHNlbGYgcmVmcmVzaCBiaXQuCi0Jc3RyCXI0LCBbcjNdCQlAIHB1dCB2bGF1ZSBiYWNrLgotCWxkcglyNCwgQV9TRFJDMAkJQCBtYWtlIGEgY2xvY2sgaGFwcGVuCi0JbGRyCXI0LCBbcjRdCi0Jbm9wCQkJCUAgc3RhcnQgYXV0byByZWZyZXNoIG9ubHkgYWZ0ZXIgY2xrIG9rCi0JbW92cwlyMCwgcjAJCQlAIHNlZSBpZiBERFIgb3IgU0RSCi0JbGRybmUJcjEsIEFfU0RSQ19ETExBX0NUUkxfUwlAIGdldCBhZGRyIG9mIERMTCBjdHJsCi0Jc3RybmUJcjAsIFtyMV0JCUAgcmV3cml0ZSBETExBIHRvIGZvcmNlIERMTCByZWxvYWQKLQlhZGRuZQlyMSwgcjEsICMweDgJCUAgbW92ZSB0byBETExCCi0Jc3RybmUJcjAsIFtyMV0JCUAgcmV3cml0ZSBETExCIHRvIGZvcmNlIERMTCByZWxvYWQKLQotCW1vdglyNSwgIzB4MTAwMAotbG9vcDI6Ci0Jc3VicwlyNSwgcjUsICMweDEKLQlibmUJbG9vcDIKLQkvKiByZXN1bWUqLwotCWxkbWZkCXNwISwge3IwIC0gcjEyLCBwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgotCi1BX1NEUkNfUE9XRVI6Ci0JLndvcmQgT01BUDI0MlhfU0RSQ19SRUdBRERSKFNEUkNfUE9XRVIpCi1BX1NEUkMwOgotCS53b3JkIEFfU0RSQzBfVgotQV9TRFJDX0RMTEFfQ1RSTF9TOgotCS53b3JkIE9NQVAyNDJYX1NEUkNfUkVHQUREUihTRFJDX0RMTEFfQ1RSTCkKLQotRU5UUlkob21hcDI0eHhfY3B1X3N1c3BlbmRfc3opCi0JLndvcmQJLiAtIG9tYXAyNHh4X2NwdV9zdXNwZW5kCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAyNHh4LlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMjR4eC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMzM2YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMjR4eC5TCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcC5TCisgKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogKEMpIENvcHlyaWdodCAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKiBGaXhlZCBpZGxlIGxvb3Agc2xlZXAKKyAqIElnb3IgU3RvcHBhIDxpZ29yLnN0b3BwYUBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIC9QVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPG1hY2gvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3BtLmg+CisKKyNpbmNsdWRlIDxtYWNoL29tYXAyNHh4Lmg+CisKKyNpbmNsdWRlICJzZHJjLmgiCisKKy8qIEZpcnN0IGFkZHJlc3Mgb2YgcmVzZXJ2ZWQgYWRkcmVzcyBzcGFjZT8gIGFwcGFyZW50bHkgdmFsaWQgZm9yIE9NQVAyICYgMyAqLworI2RlZmluZSBBX1NEUkMwX1YJCSgweEMwMDAwMDAwKQorCisJLnRleHQKKworLyoKKyAqIEZvcmNlcyBPTUFQIGludG8gaWRsZSBzdGF0ZQorICoKKyAqIG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kKCkgLSBUaGlzIGJpdCBvZiBjb2RlIGp1c3QgZXhlY3V0ZXMgdGhlIFdGSQorICogZm9yIG5vcm1hbCBpZGxlcy4KKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgZ2V0J3MgY29waWVkIHRvIGludGVybmFsIFNSQU0gYXQgYm9vdC4gV2hlbiB0aGUgT01BUAorICoJIHdha2VzIHVwIGl0IGNvbnRpbnVlcyBleGVjdXRpb24gYXQgdGhlIHBvaW50IGl0IHdlbnQgdG8gc2xlZXAuCisgKi8KK0VOVFJZKG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kKQorCXN0bWZkCXNwISwge3IwLCBscn0JCUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKwltb3YJcjAsICMwCQkJQCBjbGVhciBmb3IgbWNyIHNldHVwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgNAlAIHdhaXQgZm9yIGludGVycnVwdAorCWxkbWZkCXNwISwge3IwLCBwY30JCUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKworRU5UUlkob21hcDI0eHhfaWRsZV9sb29wX3N1c3BlbmRfc3opCisJLndvcmQJLiAtIG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kCisKKy8qCisgKiBvbWFwMjR4eF9jcHVfc3VzcGVuZCgpIC0gRm9yY2VzIE9NQVAgaW50byBkZWVwIHNsZWVwIHN0YXRlIGJ5IGNvbXBsZXRpbmcKKyAqIFNEUkMgc2h1dGRvd24gdGhlbiBBUk0gc2h1dGRvd24uICBVcG9uIHdha2UgTVBVIGlzIGJhY2sgb24gc28ganVzdCByZXN0b3JlCisgKiBTRFJDLgorICoKKyAqIElucHV0OgorICogUjAgOglETEwgY3RybCB2YWx1ZSBwcmUtU2xlZXAKKyAqIFIxIDogU0RSQ19ETExBX0NUUkwKKyAqIFIyIDogU0RSQ19QT1dFUgorICoKKyAqIFRoZSBpZiB0aGUgRFBMTCBpcyBnb2luZyB0byBBdXRvSWRsZS4gSXQgc2VlbXMgbGlrZSB0aGUgRFBMTCBtYXkgYmUgYmFjayBvbgorICogd2hlbiB3ZSBnZXQgY2FsbGVkLCBidXQgdGhlIERMTCBwcm9iYWJseSBpc24ndC4gIFdlIHdpbGwgd2FpdCBhIGJpdCBtb3JlIGluCisgKiBjYXNlIHRoZSBEUExMIGlzbid0IHF1aXRlIHRoZXJlIHlldC4gVGhlIGNvZGUgd2lsbCB3YWl0IG9uIERMTCBmb3IgRERSIGV2ZW4KKyAqIGlmIGluIHVubG9ja2VkIG1vZGUuCisgKgorICogRm9yIGxlc3MgdGhhbiAyNDJ4LUVTMi4yIHVwb24gd2FrZSBmcm9tIGEgc2xlZXAgbW9kZSB3aGVyZSB0aGUgZXh0ZXJuYWwKKyAqIG9zY2lsbGF0b3Igd2FzIHN0b3BwZWQsIGEgdGltaW5nIGJ1ZyBleGlzdHMgd2hlcmUgYSBub24tc3RhYmlsaXplZCAxMk1IegorICogY2xvY2sgY2FuIHBhc3MgaW50byB0aGUgUFJDTSBjYW4gY2F1c2UgcHJvYmxlbXMgYXQgRFNQIGFuZCBJVkEuCisgKiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBjb2RlIHdpbGwgc3dpdGNoIHRvIHRoZSAzMmtIeiBzb3VyY2UgcHJpb3IgdG8gc2xlZXAuCisgKiBQb3N0IHNsZWVwIHdlIHdpbGwgc2hpZnQgYmFjayB0byB1c2luZyB0aGUgRFBMTC4gIEFwcGFyZW50bHksCisgKiBDTV9JRExFU1RfQ0xLR0VOIGRvZXMgbm90IHJlZmxlY3QgdGhlIGZ1bGwgY2xvY2sgY2hhbmdlIHNvIHlvdSBuZWVkIHRvIHdhaXQKKyAqIDN4MTJNSHogKyAzeDMya0h6IGNsb2NrcyBmb3IgYSBmdWxsIHN3aXRjaC4KKyAqCisgKiBUaGUgRExMIGxvYWQgdmFsdWUgaXMgbm90IGtlcHQgaW4gUkVURU5USU9OIG9yIE9GRi4JSXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQKKyAqIGF0IHdha2UKKyAqLworRU5UUlkob21hcDI0eHhfY3B1X3N1c3BlbmQpCisJc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisJbW92CXIzLCAjMHgwCQlAIGNsZWFyIGZvciBtY3IgY2FsbAorCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CUAgbWVtb3J5IGJhcnJpZXIsIGhvcGUgU0RSL0REUiBmaW5pc2hlZAorCW5vcAorCW5vcAorCWxkcglyNCwgW3IyXQkJQCByZWFkIFNEUkNfUE9XRVIKKwlvcnIJcjQsIHI0LCAjMHg0MAkJQCBlbmFibGUgc2VsZiByZWZyZXNoIG9uIGlkbGUgcmVxCisJbW92CXI1LCAjMHgyMDAwCQlAIHNldCBkZWxheSAoRFBMTCByZWxvY2sgKyBETEwgcmVsb2NrKQorCXN0cglyNCwgW3IyXQkJQCBtYWtlIGl0IHNvCisJbW92CXIyLCAjMAorCW5vcAorCW1jcglwMTUsIDAsIHIyLCBjNywgYzAsIDQJQCB3YWl0IGZvciBpbnRlcnJ1cHQKKwlub3AKK2xvb3A6CisJc3VicwlyNSwgcjUsICMweDEJCUAgYXdha2UsIHdhaXQganVzdCBhIGJpdAorCWJuZQlsb29wCisKKwkvKiBUaGUgRFBMTCBoYXMgdG8gYmUgb24gYmVmb3JlIHdlIHRha2UgdGhlIEREUiBvdXQgb2Ygc2VsZiByZWZyZXNoICovCisJYmljCXI0LCByNCwgIzB4NDAJCUAgbm93IGNsZWFyIHNlbGYgcmVmcmVzaCBiaXQuCisJc3RyCXI0LCBbcjJdCQlAIHdyaXRlIHRvIFNEUkNfUE9XRVIKKwlsZHIJcjQsIEFfU0RSQzAJCUAgbWFrZSBhIGNsb2NrIGhhcHBlbgorCWxkcglyNCwgW3I0XQkJQCByZWFkIEFfU0RSQzAKKwlub3AJCQkJQCBzdGFydCBhdXRvIHJlZnJlc2ggb25seSBhZnRlciBjbGsgb2sKKwltb3ZzCXIwLCByMAkJCUAgc2VlIGlmIEREUiBvciBTRFIKKwlzdHJuZQlyMCwgW3IxXQkJQCByZXdyaXRlIERMTEEgdG8gZm9yY2UgRExMIHJlbG9hZAorCWFkZG5lCXIxLCByMSwgIzB4OAkJQCBtb3ZlIHRvIERMTEIKKwlzdHJuZQlyMCwgW3IxXQkJQCByZXdyaXRlIERMTEIgdG8gZm9yY2UgRExMIHJlbG9hZAorCisJbW92CXI1LCAjMHgxMDAwCitsb29wMjoKKwlzdWJzCXI1LCByNSwgIzB4MQorCWJuZQlsb29wMgorCS8qIHJlc3VtZSovCisJbGRtZmQJc3AhLCB7cjAgLSByMTIsIHBjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisKK0FfU0RSQzA6CisJLndvcmQgQV9TRFJDMF9WCisKK0VOVFJZKG9tYXAyNHh4X2NwdV9zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBvbWFwMjR4eF9jcHVfc3VzcGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMzR4eC5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMzR4eC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNzE0NjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0zNHh4LlMKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAzL3NyYW0uUworICoKKyAqIE9tYXAzIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcnVuIGluIGludGVybmFsIFNSQU0KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDcKKyAqIFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqIFJhamVuZHJhIE5heWFrIDxybmF5YWtAdGkuY29tPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2lvLmg+CisKKyNpbmNsdWRlICJzZHJjLmgiCisjaW5jbHVkZSAiY20uaCIKKworCS50ZXh0CisKKy8qCisgKiBDaGFuZ2UgZnJlcXVlbmN5IG9mIGNvcmUgZHBsbAorICogcjAgPSBzZHJjX3Jmcl9jdHJsIHIxID0gc2RyY19hY3RpbV9jdHJsYSByMiA9IHNkcmNfYWN0aW1fY3RybGIgcjMgPSBNMgorICovCitFTlRSWShvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwpCisJc3RtZmQJc3AhLCB7cjEtcjEyLCBscn0JQCBzdG9yZSByZWdzIHRvIHN0YWNrCisJY21wCXIzLCAjMHgyCisJYmxuZQljb25maWd1cmVfc2RyYworCWNtcAlyMywgIzB4MgorCWJsbmUJbG9ja19kbGwKKwljbXAJcjMsICMweDEKKwlibG5lCXVubG9ja19kbGwKKwlibAlzZHJhbV9pbl9zZWxmcmVmcmVzaAlAIHB1dCB0aGUgU0RSQU0gaW4gc2VsZiByZWZyZXNoCisJYmwgCWNvbmZpZ3VyZV9jb3JlX2RwbGwKKwlibAllbmFibGVfc2RyYworCWNtcAlyMywgIzB4MQorCWJsbmUJd2FpdF9kbGxfdW5sb2NrCisJY21wCXIzLCAjMHgyCisJYmxuZQl3YWl0X2RsbF9sb2NrCisJY21wCXIzLCAjMHgxCisJYmxuZQljb25maWd1cmVfc2RyYworCW1vdiAJcjAsICMwIAkJCUAgcmV0dXJuIHZhbHVlCisJbGRtZmQJc3AhLCB7cjEtcjEyLCBwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgordW5sb2NrX2RsbDoKKwlsZHIJcjQsIG9tYXAzX3NkcmNfZGxsYV9jdHJsCisJbGRyCXI1LCBbcjRdCisJb3JyCXI1LCByNSwgIzB4NAorCXN0cglyNSwgW3I0XQorCWJ4CWxyCitsb2NrX2RsbDoKKwlsZHIJcjQsIG9tYXAzX3NkcmNfZGxsYV9jdHJsCisJbGRyCXI1LCBbcjRdCisJYmljCXI1LCByNSwgIzB4NAorCXN0cglyNSwgW3I0XQorCWJ4CWxyCitzZHJhbV9pbl9zZWxmcmVmcmVzaDoKKwltb3YJcjUsICMweDAJCUAgTW92ZSAwIHRvIFI1CisJbWNyCXAxNSwgMCwgcjUsIGM3LCBjMTAsIDUJQCBtZW1vcnkgYmFycmllcgorCWxkcglyNCwgb21hcDNfc2RyY19wb3dlcglAIHJlYWQgdGhlIFNEUkNfUE9XRVIgcmVnaXN0ZXIKKwlsZHIJcjUsIFtyNF0JCUAgcmVhZCB0aGUgY29udGVudHMgb2YgU0RSQ19QT1dFUgorCW9yciAJcjUsIHI1LCAjMHg0MAkJQCBlbmFibGUgc2VsZiByZWZyZXNoIG9uIGlkbGUgcmVxCisJc3RyIAlyNSwgW3I0XQkJQCB3cml0ZSBiYWNrIHRvIFNEUkNfUE9XRVIgcmVnaXN0ZXIKKwlsZHIJcjQsIG9tYXAzX2NtX2ljbGtlbjFfY29yZQlAIHJlYWQgdGhlIENNX0lDTEtFTjFfQ09SRSByZWcKKwlsZHIJcjUsIFtyNF0KKwliaWMJcjUsIHI1LCAjMHgyCQlAIGRpc2FibGUgaWNsayBiaXQgZm9yIFNSREMKKwlzdHIgCXI1LCBbcjRdCit3YWl0X3NkcmNfaWRsZToKKwlsZHIgCXI0LCBvbWFwM19jbV9pZGxlc3QxX2NvcmUKKwlsZHIgCXI1LCBbcjRdCisJYW5kIAlyNSwgcjUsICMweDIJCUAgY2hlY2sgZm9yIFNEUkMgaWRsZQorCWNtcCAJcjUsICMyCisJYm5lIAl3YWl0X3NkcmNfaWRsZQorCWJ4IAlscgorY29uZmlndXJlX2NvcmVfZHBsbDoKKwlsZHIgCXI0LCBvbWFwM19jbV9jbGtzZWwxX3BsbAorCWxkcglyNSwgW3I0XQorCWxkcglyNiwgY29yZV9tMl9tYXNrX3ZhbAlAIG1vZGlmeSBtMiBmb3IgY29yZSBkcGxsCisJYW5kCXI1LCByNSwgcjYKKwlvcnIJcjUsIHI1LCByMywgbHNsICMweDFCCUAgcjMgY29udGFpbnMgdGhlIE0yIHZhbAorCXN0cglyNSwgW3I0XQorCW1vdiAJcjUsICMweDgwMAkJQCB3YWl0IGZvciB0aGUgY2xvY2sgdG8gc3RhYmlsaXNlCisJY21wCXIzLCAjMgorCWJuZQl3YWl0X2Nsa19zdGFibGUKKwlieAlscgord2FpdF9jbGtfc3RhYmxlOgorCXN1YnMgCXI1LCByNSwgIzEKKwlibmUJd2FpdF9jbGtfc3RhYmxlCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJYngJbHIKK2VuYWJsZV9zZHJjOgorCWxkciAJcjQsIG9tYXAzX2NtX2ljbGtlbjFfY29yZQorCWxkcglyNSwgW3I0XQorCW9yciAJcjUsIHI1LCAjMHgyCQlAIGVuYWJsZSBpY2xrIGJpdCBmb3IgU0RSQworCXN0ciAJcjUsIFtyNF0KK3dhaXRfc2RyY19pZGxlMToKKwlsZHIgCXI0LCBvbWFwM19jbV9pZGxlc3QxX2NvcmUKKwlsZHIJcjUsIFtyNF0KKwlhbmQgCXI1LCByNSwgIzB4MgorCWNtcAlyNSwgIzAKKwlibmUJd2FpdF9zZHJjX2lkbGUxCisJbGRyCXI0LCBvbWFwM19zZHJjX3Bvd2VyCisJbGRyCXI1LCBbcjRdCisJYmljIAlyNSwgcjUsICMweDQwCisJc3RyIAlyNSwgW3I0XQorCWJ4CWxyCit3YWl0X2RsbF9sb2NrOgorCWxkcglyNCwgb21hcDNfc2RyY19kbGxhX3N0YXR1cworCWxkcglyNSwgW3I0XQorCWFuZCAJcjUsIHI1LCAjMHg0CisJY21wCXI1LCAjMHg0CisJYm5lCXdhaXRfZGxsX2xvY2sKKwlieAlscgord2FpdF9kbGxfdW5sb2NrOgorCWxkcglyNCwgb21hcDNfc2RyY19kbGxhX3N0YXR1cworCWxkcglyNSwgW3I0XQorCWFuZAlyNSwgcjUsICMweDQKKwljbXAJcjUsICMweDAKKwlibmUJd2FpdF9kbGxfdW5sb2NrCisJYngJbHIKK2NvbmZpZ3VyZV9zZHJjOgorCWxkcglyNCwgb21hcDNfc2RyY19yZnJfY3RybAorCXN0cglyMCwgW3I0XQorCWxkcglyNCwgb21hcDNfc2RyY19hY3RpbV9jdHJsYQorCXN0cglyMSwgW3I0XQorCWxkcglyNCwgb21hcDNfc2RyY19hY3RpbV9jdHJsYgorCXN0cglyMiwgW3I0XQorCWJ4CWxyCisKK29tYXAzX3NkcmNfcG93ZXI6CisJLndvcmQgT01BUDM0WFhfU0RSQ19SRUdBRERSKFNEUkNfUE9XRVIpCitvbWFwM19jbV9jbGtzZWwxX3BsbDoKKwkud29yZCBPTUFQMzRYWF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpCitvbWFwM19jbV9pZGxlc3QxX2NvcmU6CisJLndvcmQgT01BUDM0WFhfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSURMRVNUKQorb21hcDNfY21faWNsa2VuMV9jb3JlOgorCS53b3JkIE9NQVAzNFhYX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpCitvbWFwM19zZHJjX3Jmcl9jdHJsOgorCS53b3JkIE9NQVAzNFhYX1NEUkNfUkVHQUREUihTRFJDX1JGUl9DVFJMXzApCitvbWFwM19zZHJjX2FjdGltX2N0cmxhOgorCS53b3JkIE9NQVAzNFhYX1NEUkNfUkVHQUREUihTRFJDX0FDVElNX0NUUkxfQV8wKQorb21hcDNfc2RyY19hY3RpbV9jdHJsYjoKKwkud29yZCBPTUFQMzRYWF9TRFJDX1JFR0FERFIoU0RSQ19BQ1RJTV9DVFJMX0JfMCkKK29tYXAzX3NkcmNfZGxsYV9zdGF0dXM6CisJLndvcmQgT01BUDM0WFhfU0RSQ19SRUdBRERSKFNEUkNfRExMQV9TVEFUVVMpCitvbWFwM19zZHJjX2RsbGFfY3RybDoKKwkud29yZCBPTUFQMzRYWF9TRFJDX1JFR0FERFIoU0RSQ19ETExBX0NUUkwpCitjb3JlX20yX21hc2tfdmFsOgorCS53b3JkIDB4MDdGRkZGRkYKKworRU5UUlkob21hcDNfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsX3N6KQorCS53b3JkCS4gLSBvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYwppbmRleCBhODJkYWQxLi5kZjgzYjk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCkBAIC0xNjIsNyArMTYyLDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNteDI3MF9ydGNfZGV2aWNlKTsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY214Mnh4X2luaXRfcnRjKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgY214MjcwX2luaXRfcnRjKHZvaWQpIHt9CiAjZW5kaWYKIAogLyogMjcwMEcgZ3JhcGhpY3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCmluZGV4IGQ4MjUyOGUuLjFmMjcyZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYwpAQCAtMzM1LDkgKzMzNSw2IEBACiAJCXB4YTI3eF9ndWVzc19tYXhfZnJlcSgpOwogCiAJLyogc2V0IGRlZmF1bHQgcG9saWN5IGFuZCBjcHVpbmZvICovCi0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKLQlpZiAoY3B1X2lzX3B4YTI1eCgpKQotCQlwb2xpY3ktPnBvbGljeSA9IENQVUZSRVFfUE9MSUNZX1BFUkZPUk1BTkNFOwogCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwOyAvKiBGSVhNRTogMSBtcywgYXNzdW1lZCAqLwogCXBvbGljeS0+Y3VyID0gZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KDApOwkgICAvKiBjdXJyZW50IGZyZXEgKi8KIAlwb2xpY3ktPm1pbiA9IHBvbGljeS0+bWF4ID0gcG9saWN5LT5jdXI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEzeHguYwppbmRleCAxZWEwYzljLi45NjhjODMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhM3h4LmMKQEAgLTIxMCw3ICsyMTAsNiBAQAogCWludCByZXQgPSAtRUlOVkFMOwogCiAJLyogc2V0IGRlZmF1bHQgcG9saWN5IGFuZCBjcHVpbmZvICovCi0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAlwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEgPSAxMDQwMDA7CiAJcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gKGNwdV9pc19weGEzMjAoKSkgPyA4MDYwMDAgOiA2MjQwMDA7CiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwMDA7IC8qIEZJWE1FOiAxIG1zLCBhc3N1bWVkICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY2FtZXJhLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY2FtZXJhLmgKaW5kZXggMzk1MTZjZS4uMzFhYmU2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NhbWVyYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jYW1lcmEuaApAQCAtMzYsOCArMzYsNiBAQAogCiBzdHJ1Y3QgcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEgewogCWludCAoKmluaXQpKHN0cnVjdCBkZXZpY2UgKik7Ci0JaW50ICgqcG93ZXIpKHN0cnVjdCBkZXZpY2UgKiwgaW50KTsKLQlpbnQgKCpyZXNldCkoc3RydWN0IGRldmljZSAqLCBpbnQpOwogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG1jbGtfMTBraHo7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4X25hbmQuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHhfbmFuZC5oCmluZGV4IGViNGIxOTAuLmViMzVmY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHhfbmFuZC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHhfbmFuZC5oCkBAIC00LDYgKzQsNDMgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KIAorc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyB7CisJdW5zaWduZWQgaW50CXRDSDsgIC8qIEVuYWJsZSBzaWduYWwgaG9sZCB0aW1lICovCisJdW5zaWduZWQgaW50CXRDUzsgIC8qIEVuYWJsZSBzaWduYWwgc2V0dXAgdGltZSAqLworCXVuc2lnbmVkIGludAl0V0g7ICAvKiBORF9uV0UgaGlnaCBkdXJhdGlvbiAqLworCXVuc2lnbmVkIGludAl0V1A7ICAvKiBORF9uV0UgcHVsc2UgdGltZSAqLworCXVuc2lnbmVkIGludAl0Ukg7ICAvKiBORF9uUkUgaGlnaCBkdXJhdGlvbiAqLworCXVuc2lnbmVkIGludAl0UlA7ICAvKiBORF9uUkUgcHVsc2Ugd2lkdGggKi8KKwl1bnNpZ25lZCBpbnQJdFI7ICAgLyogTkRfbldFIGhpZ2ggdG8gTkRfblJFIGxvdyBmb3IgcmVhZCAqLworCXVuc2lnbmVkIGludAl0V0hSOyAvKiBORF9uV0UgaGlnaCB0byBORF9uUkUgbG93IGZvciBzdGF0dXMgcmVhZCAqLworCXVuc2lnbmVkIGludAl0QVI7ICAvKiBORF9BTEUgbG93IHRvIE5EX25SRSBsb3cgZGVsYXkgKi8KK307CisKK3N0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgeworCXVpbnQxNl90CXJlYWQxOworCXVpbnQxNl90CXJlYWQyOworCXVpbnQxNl90CXByb2dyYW07CisJdWludDE2X3QJcmVhZF9zdGF0dXM7CisJdWludDE2X3QJcmVhZF9pZDsKKwl1aW50MTZfdAllcmFzZTsKKwl1aW50MTZfdAlyZXNldDsKKwl1aW50MTZfdAlsb2NrOworCXVpbnQxNl90CXVubG9jazsKKwl1aW50MTZfdAlsb2NrX3N0YXR1czsKK307CisKK3N0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCB7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyAqdGltaW5nOyAvKiBOQU5EIEZsYXNoIHRpbWluZyAqLworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldDsKKworCXVpbnQzMl90IHBhZ2VfcGVyX2Jsb2NrOy8qIFBhZ2VzIHBlciBibG9jayAoUEdfUEVSX0JMSykgKi8KKwl1aW50MzJfdCBwYWdlX3NpemU7CS8qIFBhZ2Ugc2l6ZSBpbiBieXRlcyAoUEFHRV9TWikgKi8KKwl1aW50MzJfdCBmbGFzaF93aWR0aDsJLyogV2lkdGggb2YgRmxhc2ggbWVtb3J5IChEV0lEVEhfTSkgKi8KKwl1aW50MzJfdCBkZmNfd2lkdGg7CS8qIFdpZHRoIG9mIGZsYXNoIGNvbnRyb2xsZXIoRFdJRFRIX0MpICovCisJdWludDMyX3QgbnVtX2Jsb2NrczsJLyogTnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrcyBpbiBGbGFzaCAqLworCXVpbnQzMl90IGNoaXBfaWQ7Cit9OworCiBzdHJ1Y3QgcHhhM3h4X25hbmRfcGxhdGZvcm1fZGF0YSB7CiAKIAkvKiB0aGUgZGF0YSBmbGFzaCBidXMgaXMgc2hhcmVkIGJldHdlZW4gdGhlIFN0YXRpYyBNZW1vcnkKQEAgLTEyLDggKzQ5LDExIEBACiAJICovCiAJaW50CWVuYWJsZV9hcmJpdGVyOwogCi0Jc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwotCXVuc2lnbmVkIGludAlucl9wYXJ0czsKKwljb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkJKnBhcnRzOworCXVuc2lnbmVkIGludAkJCQlucl9wYXJ0czsKKworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqIAlmbGFzaDsKKwlzaXplX3QJCQkJCW51bV9mbGFzaDsKIH07CiAKIGV4dGVybiB2b2lkIHB4YTN4eF9zZXRfbmFuZF9pbmZvKHN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhICppbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90b3NhLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdG9zYS5oCmluZGV4IGE3MjgwM2YuLjhiY2U2ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90b3NhLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3Rvc2EuaApAQCAtNTksOCArNTksNiBAQAogICogVEM2MzkzWEIgR1BJT3MKICAqLwogI2RlZmluZSBUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRQkJKE5SX0JVSUxUSU5fR1BJTyArIDIgKiAxMikKLSNkZWZpbmUgVE9TQV9UQzYzOTNYQl9HUElPKGkpCQkoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UgKyAoaSkpCi0jZGVmaW5lIFRPU0FfVEM2MzkzWEJfR1BJT19CSVQoZ3BpbykJKDEgPDwgKGdwaW8gLSBUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSkpCiAKICNkZWZpbmUgVE9TQV9HUElPX1RHX09OCQkJKFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFICsgMCkKICNkZWZpbmUgVE9TQV9HUElPX0xfTVVURQkJKFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFICsgMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCAxMzBlMzdlLi5hNmM0Njk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC03MDYsMTYgKzcwNiwzOSBAQAogCS5iYWRibG9ja19wYXR0ZXJuID0gJnRvc2FfdGM2MzkzeGJfbmFuZF9iYnQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgdG9zYV90YzYzOTN4Yl9zZXR1cCA9IHsKK3N0YXRpYyBpbnQgdG9zYV90YzYzOTN4Yl9zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJjOworCisJcmMgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX0NBUkRfVkNDX09OLCAiQ0FSRF9WQ0NfT04iKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX3JlcTsKKworCXJjID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFRPU0FfR1BJT19DQVJEX1ZDQ19PTiwgMSk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9kaXI7CisKKwlyZXR1cm4gcmM7CisKK2Vycl9kaXI6CisJZ3Bpb19mcmVlKFRPU0FfR1BJT19DQVJEX1ZDQ19PTik7CitlcnJfcmVxOgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgdG9zYV90YzYzOTN4Yl90ZWFyZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJZ3Bpb19mcmVlKFRPU0FfR1BJT19DQVJEX1ZDQ19PTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGM2MzkzeGJfcGxhdGZvcm1fZGF0YSB0b3NhX3RjNjM5M3hiX2RhdGEgPSB7CiAJLnNjcl9wbGwyY3IJPSAweDBjYzEsCiAJLnNjcl9ncGVyCT0gMHgzMzAwLAotCS5zY3JfZ3BvX2Rzcgk9Ci0JCVRPU0FfVEM2MzkzWEJfR1BJT19CSVQoVE9TQV9HUElPX0NBUkRfVkNDX09OKSwKLQkuc2NyX2dwb19kb2Vjcgk9Ci0JCVRPU0FfVEM2MzkzWEJfR1BJT19CSVQoVE9TQV9HUElPX0NBUkRfVkNDX09OKSwKIAogCS5pcnFfYmFzZQk9IElSUV9CT0FSRF9TVEFSVCwKIAkuZ3Bpb19iYXNlCT0gVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UsCisJLnNldHVwCQk9IHRvc2FfdGM2MzkzeGJfc2V0dXAsCisJLnRlYXJkb3duCT0gdG9zYV90YzYzOTN4Yl90ZWFyZG93biwKIAogCS5lbmFibGUJCT0gdG9zYV90YzYzOTN4Yl9lbmFibGUsCiAJLmRpc2FibGUJPSB0b3NhX3RjNjM5M3hiX2Rpc2FibGUsCkBAIC03MjMsNiArNzQ2LDggQEAKIAkucmVzdW1lCQk9IHRvc2FfdGM2MzkzeGJfcmVzdW1lLAogCiAJLm5hbmRfZGF0YQk9ICZ0b3NhX3RjNjM5M3hiX25hbmRfY29uZmlnLAorCisJLnJlc3VtZV9yZXN0b3JlID0gMSwKIH07CiAKIApAQCAtNzMwLDcgKzc1NSw3IEBACiAJLm5hbWUJPSAidGM2MzkzeGIiLAogCS5pZAk9IC0xLAogCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRvc2FfdGM2MzkzeGJfc2V0dXAsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnRvc2FfdGM2MzkzeGJfZGF0YSwKIAl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0YzYzOTN4Yl9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHRjNjM5M3hiX3Jlc291cmNlcywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS92aXBlci5jCmluZGV4IGQ3NjMyZjYuLjRiMzEyMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYwpAQCAtMjA0LDI1ICsyMDQsNTQgQEAKIAogLyogSW50ZXJydXB0IGhhbmRsaW5nICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB2aXBlcl9pcnFfZW5hYmxlZF9tYXNrOworc3RhdGljIGNvbnN0IGludCB2aXBlcl9pc2FfaXJxc1tdID0geyAzLCA0LCA1LCA2LCA3LCAxMCwgMTEsIDEyLCA5LCAxNCwgMTUgfTsKK3N0YXRpYyBjb25zdCBpbnQgdmlwZXJfaXNhX2lycV9tYXBbXSA9IHsKKwkwLAkJLyogSVNBIGlycSAjMCwgaW52YWxpZCAqLworCTAsCQkvKiBJU0EgaXJxICMxLCBpbnZhbGlkICovCisJMCwJCS8qIElTQSBpcnEgIzIsIGludmFsaWQgKi8KKwkxIDw8IDAsCQkvKiBJU0EgaXJxICMzICovCisJMSA8PCAxLAkJLyogSVNBIGlycSAjNCAqLworCTEgPDwgMiwJCS8qIElTQSBpcnEgIzUgKi8KKwkxIDw8IDMsCQkvKiBJU0EgaXJxICM2ICovCisJMSA8PCA0LAkJLyogSVNBIGlycSAjNyAqLworCTAsCQkvKiBJU0EgaXJxICM4LCBpbnZhbGlkICovCisJMSA8PCA4LAkJLyogSVNBIGlycSAjOSAqLworCTEgPDwgNSwJCS8qIElTQSBpcnEgIzEwICovCisJMSA8PCA2LAkJLyogSVNBIGlycSAjMTEgKi8KKwkxIDw8IDcsCQkvKiBJU0EgaXJxICMxMiAqLworCTAsCQkvKiBJU0EgaXJxICMxMywgaW52YWxpZCAqLworCTEgPDwgOSwJCS8qIElTQSBpcnEgIzE0ICovCisJMSA8PCAxMCwJLyogSVNBIGlycSAjMTUgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHZpcGVyX2lycV90b19iaXRtYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIHZpcGVyX2lzYV9pcnFfbWFwW2lycSAtIFBYQV9JU0FfSVJRKDApXTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmlwZXJfYml0X3RvX2lycShpbnQgYml0KQoreworCXJldHVybiB2aXBlcl9pc2FfaXJxc1tiaXRdICsgUFhBX0lTQV9JUlEoMCk7Cit9CiAKIHN0YXRpYyB2b2lkIHZpcGVyX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlpbnQgdmlwZXJfaXJxID0gaXJxIC0gUFhBX0lTQV9JUlEoMCk7CisJaW50IHZpcGVyX2lycSA9IHZpcGVyX2lycV90b19iaXRtYXNrKGlycSk7CiAKLQlpZiAodmlwZXJfaXJxIDwgOCkKLQkJVklQRVJfTE9fSVJRX1NUQVRVUyA9IDEgPDwgdmlwZXJfaXJxOworCWlmICh2aXBlcl9pcnEgJiAweGZmKQorCQlWSVBFUl9MT19JUlFfU1RBVFVTID0gdmlwZXJfaXJxOwogCWVsc2UKLQkJVklQRVJfSElfSVJRX1NUQVRVUyA9IDEgPDwgKHZpcGVyX2lycSAtIDgpOworCQlWSVBFUl9ISV9JUlFfU1RBVFVTID0gKHZpcGVyX2lycSA+PiA4KTsKIH0KIAogc3RhdGljIHZvaWQgdmlwZXJfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2aXBlcl9pcnFfZW5hYmxlZF9tYXNrICY9IH4oMSA8PCAoaXJxIC0gUFhBX0lTQV9JUlEoMCkpKTsKKwl2aXBlcl9pcnFfZW5hYmxlZF9tYXNrICY9IH4odmlwZXJfaXJxX3RvX2JpdG1hc2soaXJxKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZpcGVyX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2aXBlcl9pcnFfZW5hYmxlZF9tYXNrIHw9ICgxIDw8IChpcnEgLSBQWEFfSVNBX0lSUSgwKSkpOworCXZpcGVyX2lycV9lbmFibGVkX21hc2sgfD0gdmlwZXJfaXJxX3RvX2JpdG1hc2soaXJxKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcGVyX2lycV9wZW5kaW5nKHZvaWQpCkBAIC0yMzcsOCArMjY2LDEyIEBACiAKIAlwZW5kaW5nID0gdmlwZXJfaXJxX3BlbmRpbmcoKTsKIAlkbyB7CisJCS8qIHdlJ3JlIGluIGEgY2hhaW5lZCBpcnEgaGFuZGxlciwKKwkJICogc28gYWNrIHRoZSBpbnRlcnJ1cHQgYnkgaGFuZCAqLworCQlHRURSKFZJUEVSX0NQTERfR1BJTykgPSBHUElPX2JpdChWSVBFUl9DUExEX0dQSU8pOworCiAJCWlmIChsaWtlbHkocGVuZGluZykpIHsKLQkJCWlycSA9IFBYQV9JU0FfSVJRKDApICsgX19mZnMocGVuZGluZyk7CisJCQlpcnEgPSB2aXBlcl9iaXRfdG9faXJxKF9fZmZzKHBlbmRpbmcpKTsKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwogCQl9CiAJCXBlbmRpbmcgPSB2aXBlcl9pcnFfcGVuZGluZygpOwpAQCAtMjU0LDE1ICsyODcsMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHZpcGVyX2luaXRfaXJxKHZvaWQpCiB7Ci0JY29uc3QgaW50IGlzYV9pcnFzW10gPSB7IDMsIDQsIDUsIDYsIDcsIDEwLCAxMSwgMTIsIDksIDE0LCAxNSB9OwotCWludCBpcnE7CisJaW50IGxldmVsOwogCWludCBpc2FfaXJxOwogCiAJcHhhMjV4X2luaXRfaXJxKCk7CiAKIAkvKiBzZXR1cCBJU0EgSVJRcyAqLwotCWZvciAoaXJxID0gMDsgaXJxIDwgQVJSQVlfU0laRShpc2FfaXJxcyk7IGlycSsrKSB7Ci0JCWlzYV9pcnEgPSBpc2FfaXJxc1tpcnFdOworCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IEFSUkFZX1NJWkUodmlwZXJfaXNhX2lycXMpOyBsZXZlbCsrKSB7CisJCWlzYV9pcnEgPSB2aXBlcl9iaXRfdG9faXJxKGxldmVsKTsKIAkJc2V0X2lycV9jaGlwKGlzYV9pcnEsICZ2aXBlcl9pcnFfY2hpcCk7CiAJCXNldF9pcnFfaGFuZGxlcihpc2FfaXJxLCBoYW5kbGVfZWRnZV9pcnEpOwogCQlzZXRfaXJxX2ZsYWdzKGlzYV9pcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKaW5kZXggNzU3MzgwMC4uOWEzN2M4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxtYWNoL2Jhc3QtbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9iYXN0LWlycS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9pcnEuaD4KKyNpbmNsdWRlIDxwbGF0L2lycS5oPgogCiAjaWYgMAogI2luY2x1ZGUgPGFzbS9kZWJ1Zy1sbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwppbmRleCBmZWY2NDZjLi40ZTA3OTQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwpAQCAtMzcsMTMgKzM3LDEzIEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiBpbnQgczNjMjQxMF9jbGtjb25fZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwppbmRleCA4NzMwNzk3Li43ZDkxNGE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCkBAIC0yMCwxMCArMjAsMTAgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kbWEuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDY4MmRmMjMuLjRjMjlhODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE0LDcgKzE0LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKICNkZWZpbmUgUzNDMjQxMF9VQVJUMV9PRkYgKDB4NDAwMCkKICNkZWZpbmUgU0hJRlRfMjQ0MFRYRiAoMTQtOSkKQEAgLTk5LDQgKzk5LDQgQEAKIAogLyogaW5jbHVkZSB0aGUgcmVzZXQgb2YgdGhlIGNvZGUgd2hpY2ggd2lsbCBkbyB0aGUgd29yayAqLwogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL2RlYnVnLW1hY3JvLlM+CisjaW5jbHVkZSA8cGxhdC9kZWJ1Zy1tYWNyby5TPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggNjRiZjdlOS4uMjNjNDcwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0xMyw3ICsxMyw3IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUFQX0gKICNkZWZpbmUgX19BU01fQVJDSF9NQVBfSAogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvbWFwLmg+CiAKICNkZWZpbmUgUzNDMjQxMF9BRERSKHgpCQlTM0NfQUREUih4KQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3NwaS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zcGkuaAppbmRleCA5MjFiMTNiLi40NmQ0NmY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3NwaS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3BpLmgKQEAgLTE4LDYgKzE4LDcgQEAKIAl1bnNpZ25lZCBpbnQJCSBudW1fY3M7CS8qIHRvdGFsIGNoaXBzZWxlY3RzICovCiAJaW50CQkJIGJ1c19udW07ICAgICAgIC8qIGJ1cyBudW1iZXIgdG8gdXNlLiAqLwogCisJdm9pZCAoKmdwaW9fc2V0dXApKHN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpzcGksIGludCBlbmFibGUpOwogCXZvaWQgKCpzZXRfY3MpKHN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpzcGksIGludCBjcywgaW50IHBvbCk7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmluZGV4IDcwOGU0NzQuLmFiMzk0OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0yMSw3ICsyMSw3IEBACiAjdW5kZWYgUzNDMjQxMF9HUElPUkVHCiAjZGVmaW5lIFMzQzI0MTBfR1BJT1JFRyh4KSAoKFMzQzI0WFhfUEFfR1BJTyArICh4KSkpCiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvdW5jb21wcmVzcy5oPgorI2luY2x1ZGUgPHBsYXQvdW5jb21wcmVzcy5oPgogCiBzdGF0aWMgaW5saW5lIGludCBpc19hcm05MjYodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYwppbmRleCBmNWM1YzUzLi45MjE1MDM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAogc3RhdGljIGludCBzM2MyNDEwX2lycV9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbWxtNTkwMC5jCmluZGV4IDUyN2Y4OGEuLmQwNjFmZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW1sbTU5MDAuYwpAQCAtNDgsMTIgKzQ4LDEyIEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2ZiLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCmluZGV4IGU0MzY4ZTYuLjhkYjljNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAvLyNpbmNsdWRlIDxhc20vZGVidWctbGwuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgpAQCAtNTUsOSArNTUsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAjaW5jbHVkZSAidXNiLXNpbXRlYy5oIgogI2luY2x1ZGUgIm5vci1zaW10ZWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCmluZGV4IDg1ZTcxMGYuLjk4NzE2ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgpAQCAtNDAsMTAgKzQwLDEwIEBACiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvdWRjLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGgxOTQwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwppbmRleCAzZWNlMmQwLi44MjUwNTUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwpAQCAtNDEsMTIgKzQxLDEyIEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvaWljLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC91ZGMuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBuMzBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYwppbmRleCBjNGRmZTNlLi5kODI1NWNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jCkBAIC0yOSwxMyArMjksMTMgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb3RvbTExX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAgIC8qIERldmljZSBhcmVhICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCmluZGV4IDk3YzEzMTkuLjY2MTgwN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCkBAIC00OCwxNyArNDgsMTcgQEAKIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9sZWRzLWdwaW8uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9uYW5kLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvc3BpLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi1zbWRrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcXQyNDEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGUwMDAwMDAwLCBfX3BoeXNfdG9fcGZuKFMzQzI0MTBfQ1MzKzB4MDEwMDAwMDApLCBTWl8xTSwgTVRfREVWSUNFIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCmluZGV4IGQ0OWU1OGEuLjE1MjUyN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYwpAQCAtNDYsMTIgKzQ2LDEyIEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmg+CisjaW5jbHVkZSA8cGxhdC9jb21tb24tc21kay5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGsyNDEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAgIC8qIG5vdGhpbmcgaGVyZSB5ZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXRjdF9oYW1tZXIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXRjdF9oYW1tZXIuYwppbmRleCBjYzJlNzlmLi4zMDlkY2Y0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC10Y3RfaGFtbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdGN0X2hhbW1lci5jCkBAIC00NCw5ICs0NCw5IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKaW5kZXggZWQzYWNiMC4uOTQxMzUzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKQEAgLTQwLDEzICs0MCwxMyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9sZWRzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAjaW5jbHVkZSAidXNiLXNpbXRlYy5oIgogI2luY2x1ZGUgIm5vci1zaW10ZWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKaW5kZXggNzMzZjhhMi4uYTY5NzBmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKQEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvaDE5NDAuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcKIGV4dGVybiB2b2lkIHBtX2RiZyhjb25zdCBjaGFyICpmbXQsIC4uLik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYwppbmRleCBiMWU2NThjLi5hYzc5YjUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKQEAgLTI5LDEyICsyOSwxMiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogCiAvKiBJbml0aWFsIElPIG1hcHBpbmdzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKaW5kZXggYmUzN2YyMi4uZGQ1YjYzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKIAkvKiBzM2MyNDEwX2NwdV9zdXNwZW5kCiAJICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCmluZGV4IGViNmZjMGIuLjYwNzhmMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCiAKIC8qIGNvbnRyb2wgcG93ZXIgYW5kIG1vbml0b3Igb3Zlci1jdXJyZW50IGV2ZW50cyBvbiB2YXJpb3VzIFNpbXRlYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYwppbmRleCA1ZmJhYWM2Li45NmQ5ZWIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYwpAQCAtMzcsMTMgKzM3LDEzIEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMi5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMi5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAvKiBXZSBjdXJyZW50bHkgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcKICAqIGZyb20gdGhlIFhUUGxsIGlucHV0LCBhbmQgdGhhdCBhbGwgKioqUkVGQ0xLcyBhcmUgYmVpbmcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYwppbmRleCBkY2ZmZjZiLi5iYTA1OTFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCkBAIC0yMSwxMCArMjEsMTAgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2lycS5jCmluZGV4IDQxNzIwZjIuLjYwMDBjYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvaXJxLmMKQEAgLTM1LDkgKzM1LDkgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1wb3dlci5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2lycS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvaXJxLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjZGVmaW5lIElOVE1TSyhzdGFydCwgZW5kKSAoKDEgPDwgKChlbmQpICsgMSAtIChzdGFydCkpKSAtIDEpCiAjZGVmaW5lIElOVE1TS19TVUIoc3RhcnQsIGVuZCkgKElOVE1TSyhzdGFydCwgZW5kKSA8PCAoKHN0YXJ0IC0gUzNDMjQxMF9JUlFTVUIoMCkpKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYwppbmRleCBhZDk4MGExLi5iMDhmMThjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1qaXZlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtaml2ZS5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjL25hbmQuaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvaWljLmg+CiAKQEAgLTQ4LDEwICs0OCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvdWRjLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgaml2ZV9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtc21kazI0MTMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXNtZGsyNDEzLmMKaW5kZXggOGY4ZDkxMS4uYzcxOWI1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXNtZGsyNDEzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtc21kazI0MTMuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKIC8vI2luY2x1ZGUgPGFzbS9kZWJ1Zy1sbC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KIApAQCAtNDAsMTMgKzQwLDEzIEBACiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL2ZiLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTIuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MTAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MTIuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuaD4KKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi1zbWRrLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc21kazI0MTNfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC12c3Rtcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtdnN0bXMuYwppbmRleCBiYjliZjYzLi40Y2ZhMTlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC12c3Rtcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXZzdG1zLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KIApAQCAtNDEsMTEgKzQxLDExIEBACiAKICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvbmFuZC5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEyLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEyLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB2c3Rtc19pb2Rlc2NbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3BtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvcG0uYwppbmRleCA5NTQwZWY3Li4yMTdlOWU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvcG0uYwpAQCAtMjgsMTAgKzI4LDEwIEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZHNjLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMi5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMi5oPgogCiBleHRlcm4gdm9pZCBzM2MyNDEyX3NsZWVwX2VudGVyKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYwppbmRleCA0MjQ0MGZjLi4zMTM3NTljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9zM2MyNDEyLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxtYWNoL2lkbGUuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtcG93ZXIuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvai5oPgpAQCAtNDIsMTEgKzQyLDExIEBACiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLXNwaS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDEyLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTIuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEyLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjaWZuZGVmIENPTkZJR19DUFVfUzNDMjQxMl9PTkxZCiB2b2lkIF9faW9tZW0gKnMzYzI0eHhfdmFfZ3BpbzIgPSBTM0MyNFhYX1ZBX0dQSU87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9jbG9jay5jCmluZGV4IDQwNTAzYTYuLmQxYzI5YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9jbG9jay5jCkBAIC00MSw4ICs0MSw4IEBACiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAvKiBTM0MyNDQwIGV4dGVuZGVkIGNsb2NrIHN1cHBvcnQgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCmluZGV4IGNkZDRlNmUuLjMyMzAzZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMKQEAgLTIwLDEwICsyMCwxMCBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kbWEuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLWFjOTcuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZHNjLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZHNjLmMKaW5kZXggNGY3ZDA2Yi4uNTU0MDQ0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RzYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kc2MuYwpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWRzYy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDAuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgogCiBpbnQgczNjMjQ0MF9zZXRfZHNjKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9pcnEuYwppbmRleCAzM2UzZWRlLi42M2M1YWI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2lycS5jCkBAIC0zNCw5ICszNCw5IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2lycS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvaXJxLmg+CiAKIC8qIFdEVC9BQzk3ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWFudWJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYW51YmlzLmMKaW5kZXggMTllYjBlNS4uZTJiZWNhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYW51YmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYW51YmlzLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CkBAIC00OCw5ICs0OCw5IEBACiAKICNpbmNsdWRlIDxuZXQvYXg4ODc5Ni5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKICNkZWZpbmUgQ09QWVJJR0hUICIsIChjKSAyMDA1IFNpbXRlYyBFbGVjdHJvbmljcyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYXQyNDQwZXZiLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1hdDI0NDBldmIuYwppbmRleCBmMGYwY2M2Li42Njg3NmM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1hdDI0NDBldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1hdDI0NDBldmIuYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KQEAgLTQyLDkgKzQyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgYXQyNDQwZXZiX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJLyogTm90aGluZyBoZXJlICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1uZXhjb2Rlci5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbmV4Y29kZXIuYwppbmRleCA0OWU4MjhkLi5hNTQ2MzA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1uZXhjb2Rlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW5leGNvZGVyLmMKQEAgLTM2LDEzICszNiwxMyBAQAogCiAvLyNpbmNsdWRlIDxhc20vZGVidWctbGwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQ0MC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG5leGNvZGVyX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJLyogbm90aGluZyBoZXJlIHlldCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYwppbmRleCA4NTE0NGFhLi4yMzYxZDYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYwpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KQEAgLTQ0LDkgKzQ0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIC8qIG9uYm9hcmQgcGVyaWhwZXJhbCBtYXAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtcngzNzE1LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYwppbmRleCBhNGM2OTA0Li40ZDE0YzdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogCkBAIC00NSwxMCArNDUsMTAgQEAKICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvbmFuZC5oPgogI2luY2x1ZGUgPG1hY2gvZmIuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcngzNzE1X2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJLyogZHVtcCBJU0Egc3BhY2Ugc29tZXdoZXJlIHVudXNlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtc21kazI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXNtZGsyNDQwLmMKaW5kZXggN2FjNjBiOC4uZmVmZWFhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtc21kazI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1zbWRrMjQ0MC5jCkBAIC0zMSwyMCArMzEsMjAgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KIAogI2luY2x1ZGUgPG1hY2gvaWRsZS5oPgogI2luY2x1ZGUgPG1hY2gvZmIuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQ0MC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jb21tb24tc21kay5oPgorI2luY2x1ZGUgPHBsYXQvY29tbW9uLXNtZGsuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzbWRrMjQ0MF9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewogCS8qIElTQSBJTyBTcGFjZSBtYXAgKG1lbW9yeSBzcGFjZSBzZWxlY3RlZCBieSBBMjQpICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDAuYwppbmRleCBjODFjZGIzLi5hYzFmN2VhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQwLmMKQEAgLTI5LDkgKzI5LDkgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0NDAuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiBzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgczNjMjQ0MF9zeXNkZXYgPSB7CiAJLmNscwkJPSAmczNjMjQ0MF9zeXNjbGFzcywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL2Nsb2NrLmMKaW5kZXggMThmMmNlNC4uZWExYWExZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL2Nsb2NrLmMKQEAgLTQxLDggKzQxLDggQEAKIAogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIC8qIFMzQzI0NDIgZXh0ZW5kZWQgY2xvY2sgc3VwcG9ydCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDIvczNjMjQ0Mi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL3MzYzI0NDIuYwppbmRleCBmYmY4MjY0Li40NjYzYmRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDIvczNjMjQ0Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9zM2MyNDQyLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQyLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0NDIuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiBzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgczNjMjQ0Ml9zeXNkZXYgPSB7CiAJLmNscwkJPSAmczNjMjQ0Ml9zeXNjbGFzcywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2Nsb2NrLmMKaW5kZXggNjAzYjVlYS4uMmY2MGJmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2Nsb2NrLmMKQEAgLTM5LDkgKzM5LDkgQEAKIAogI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDQzLWNsb2NrLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0NDMuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogLyogV2UgY3VycmVudGx5IGhhdmUgdG8gYXNzdW1lIHRoYXQgdGhlIHN5c3RlbSBpcyBydW5uaW5nCiAgKiBmcm9tIHRoZSBYVFBsbCBpbnB1dCwgYW5kIHRoYXQgYWxsICoqKlJFRkNMS3MgYXJlIGJlaW5nCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKaW5kZXggNWQ5ZWU3Ny4uZjczY2NiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYwpAQCAtMjEsMTAgKzIxLDEwIEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RtYS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kbWEuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3MtYWM5Ny5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9pcnEuYwppbmRleCBlNDQzNDFkLi4wZTBkNjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2lycS5jCkBAIC0zNCw5ICszNCw5IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2lycS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvaXJxLmg+CiAKICNkZWZpbmUgSU5UTVNLKHN0YXJ0LCBlbmQpICgoMSA8PCAoKGVuZCkgKyAxIC0gKHN0YXJ0KSkpIC0gMSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL21hY2gtc21kazI0NDMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9tYWNoLXNtZGsyNDQzLmMKaW5kZXggZjBkMTE5ZC4uYTdmZTY1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL21hY2gtc21kazI0NDMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvbWFjaC1zbWRrMjQ0My5jCkBAIC0zMSwyMCArMzEsMjAgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KIAogI2luY2x1ZGUgPG1hY2gvaWRsZS5oPgogI2luY2x1ZGUgPG1hY2gvZmIuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQ0MC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jb21tb24tc21kay5oPgorI2luY2x1ZGUgPHBsYXQvY29tbW9uLXNtZGsuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzbWRrMjQ0M19pb2Rlc2NbXSBfX2luaXRkYXRhID0gewogCS8qIElTQSBJTyBTcGFjZSBtYXAgKG1lbW9yeSBzcGFjZSBzZWxlY3RlZCBieSBBMjQpICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvczNjMjQ0My5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL3MzYzI0NDMuYwppbmRleCBjOTczYjY4Li5iYmVkZGY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvczNjMjQ0My5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9zM2MyNDQzLmMKQEAgLTMyLDkgKzMyLDkgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtczNjMjQ0My1jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQ0My5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDQzLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzM2MyNDQzX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJSU9ERVNDX0VOVChXQVRDSERPRyksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTAwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jcHUtc2ExMTAwLmMKaW5kZXggZjdmYTAzNC4uMjQ0ZDU5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY3B1LXNhMTEwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYwpAQCAtMjI0LDcgKzIyNCw2IEBACiAJaWYgKHBvbGljeS0+Y3B1ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCXBvbGljeS0+Y3VyID0gcG9saWN5LT5taW4gPSBwb2xpY3ktPm1heCA9IHNhMTF4MF9nZXRzcGVlZCgwKTsKLQlwb2xpY3ktPmdvdmVybm9yID0gQ1BVRlJFUV9ERUZBVUxUX0dPVkVSTk9SOwogCXBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSA9IDU5MDAwOwogCXBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSA9IDI4NzAwMDsKIAlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gQ1BVRlJFUV9FVEVSTkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lkZS5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lkZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yzk5YzhmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaWRlLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggSHVnbyBGaWVubmVzICYgTmljb2xhcyBQaXRyZQotICoKLSAqIDE4LWF1Zy0yMDAwOiBDbGVhbnVwIGJ5IEVyaWsgTW91dyAoSi5BLksuTW91d0BpdHMudHVkZWxmdC5ubCkKLSAqICAgICAgICAgICAgICBHZXQgcmlkIG9mIHRoZSBzcGVjaWFsIGlkZV9pbml0X2h3aWZfcG9ydHMoKSBmdW5jdGlvbnMKLSAqICAgICAgICAgICAgICBhbmQgbWFrZSBhIGdlbmVyYWxpc2VkIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgYnkgYWxsCi0gKiAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcy4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jZXJyb3IgIlRoaXMgY29kZSBpcyBicm9rZW4gYW5kIG5lZWRzIHVwZGF0ZSB0byBtYXRjaCB3aXRoIGN1cnJlbnQgaWRlIHN1cHBvcnQiCi0KLQotLyoKLSAqIFNldCB1cCBhIGh3IHN0cnVjdHVyZSBmb3IgYSBzcGVjaWZpZWQgZGF0YSBwb3J0LCBjb250cm9sIHBvcnQgYW5kIElSUS4KLSAqIFRoaXMgc2hvdWxkIGZvbGxvdyB3aGF0ZXZlciB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgdXNlcy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGlkZV9pbml0X2h3aWZfcG9ydHMoaHdfcmVnc190ICpodywgdW5zaWduZWQgbG9uZyBkYXRhX3BvcnQsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY3RybF9wb3J0LCBpbnQgKmlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZyA9IGRhdGFfcG9ydDsKLQlpbnQgaTsKLQlpbnQgcmVnaW5jciA9IDE7Ci0KLQkvKiBUaGUgRW1wZWcgYm9hcmQgaGFzIHRoZSBmaXJzdCB0d28gYWRkcmVzcyBsaW5lcyB1bnVzZWQgKi8KLQlpZiAobWFjaGluZV9pc19lbXBlZygpKQotCQlyZWdpbmNyID0gMSA8PCAyOwotCi0JLyogVGhlIExBUlQgZG9lc24ndCB1c2UgQTAgZm9yIElERSAqLwotCWlmIChtYWNoaW5lX2lzX2xhcnQoKSkKLQkJcmVnaW5jciA9IDEgPDwgMTsKLQotCW1lbXNldChodywgMCwgc2l6ZW9mKCpodykpOwotCi0JZm9yIChpID0gMDsgaSA8PSA3OyBpKyspIHsKLQkJaHctPmlvX3BvcnRzX2FycmF5W2ldID0gcmVnOwotCQlyZWcgKz0gcmVnaW5jcjsKLQl9Ci0KLQlody0+aW9fcG9ydHMuY3RsX2FkZHIgPSBjdHJsX3BvcnQ7Ci0KLQlpZiAoaXJxKQotCQkqaXJxID0gMDsKLX0KLQotLyoKLSAqIFRoaXMgcmVnaXN0ZXJzIHRoZSBzdGFuZGFyZCBwb3J0cyBmb3IgdGhpcyBhcmNoaXRlY3R1cmUgd2l0aCB0aGUgSURFCi0gKiBkcml2ZXIuCi0gKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLWlkZV9pbml0X2RlZmF1bHRfaHdpZnModm9pZCkKLXsKLSAgICBpZiAobWFjaGluZV9pc19sYXJ0KCkpIHsKLSNpZmRlZiBDT05GSUdfU0ExMTAwX0xBUlQKLSAgICAgICAgaHdfcmVnc190IGh3OwotCi0gICAgICAgIC8qIEVuYWJsZSBHUElPIGFzIGludGVycnVwdCBsaW5lICovCi0gICAgICAgIEdQRFIgJj0gfkxBUlRfR1BJT19JREU7Ci0Jc2V0X2lycV90eXBlKExBUlRfSVJRX0lERSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOwotCi0gICAgICAgIC8qIHNldCBQQ01DSUEgaW50ZXJmYWNlIHRpbWluZyAqLwotICAgICAgICBNRUNSID0gMHgwMDA2MDAwNjsKLQotICAgICAgICAvKiBpbml0IHRoZSBpbnRlcmZhY2UgKi8KLQlpZGVfaW5pdF9od2lmX3BvcnRzKCZodywgUENNQ0lBX0lPXzBfQkFTRSArIDB4MDAwMCwgUENNQ0lBX0lPXzBfQkFTRSArIDB4MTAwMCwgTlVMTCk7Ci0gICAgICAgIGh3LmlycSA9IExBUlRfSVJRX0lERTsKLSAgICAgICAgaWRlX3JlZ2lzdGVyX2h3KCZodyk7Ci0jZW5kaWYKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCAzMzA4MTRkLi5kMTE5Mzg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTQyOCw3ICs0MjgsNyBAQAogIyBBUk12NwogY29uZmlnIENQVV9WNwogCWJvb2wgIlN1cHBvcnQgQVJNIFY3IHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCCisJZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBBUkNIX09NQVAzCiAJc2VsZWN0IENQVV8zMnY2SwogCXNlbGVjdCBDUFVfMzJ2NwogCXNlbGVjdCBDUFVfQUJSVF9FVjcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfbmFuZC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y19uYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5NzJkZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfbmFuZC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBTYXNjaGEgSGF1ZXIsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9OQU5EX0gKKyNkZWZpbmUgX19BU01fQVJDSF9OQU5EX0gKKworc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgeworCWludCB3aWR0aDsJLyogZGF0YSBidXMgd2lkdGggaW4gYnl0ZXMgKi8KKwlpbnQgaHdfZWNjOwkvKiAwIGlmIHN1cHJlc3MgaGFyZHdhcmUgRUNDICovCit9OworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTkFORF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCmluZGV4IGI5MTcyMDYuLmE5NGYwYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCkBAIC0xNSw2ICsxNSw5IEBACiBjb25maWcgQVJDSF9PTUFQMgogCWJvb2wgIlRJIE9NQVAyIgogCitjb25maWcgQVJDSF9PTUFQMworCWJvb2wgIlRJIE9NQVAzIgorCiBlbmRjaG9pY2UKIAogY29tbWVudCAiT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMiCkBAIC0yOSw2ICszMiwzMCBAQAogCWRlcGVuZHMgb24gT01BUF9ERUJVR19ERVZJQ0VTCiAJZGVmYXVsdCB5IGlmIExFRFMgfHwgTEVEU19PTUFQX0RFQlVHCiAKK2NvbmZpZyBPTUFQX0RFQlVHX1BPV0VSRE9NQUlOCisJYm9vbCAiRW1pdCBkZWJ1ZyBtZXNzYWdlcyBmcm9tIHBvd2VyZG9tYWluIGxheWVyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb21waWxlIGluIHBvd2VyZG9tYWluIGxheWVyCisJICBkZWJ1Z2dpbmcgbWVzc2FnZXMgZm9yIE9NQVAyLzMuICAgVGhlc2UgbWVzc2FnZXMgY2FuCisJICBwcm92aWRlIG1vcmUgZGV0YWlsIGFzIHRvIHdoeSBzb21lIHBvd2VyZG9tYWluIGNhbGxzCisJICBtYXkgYmUgZmFpbGluZywgYW5kIHdpbGwgYWxzbyBlbWl0IGEgZGVzY3JpcHRpdmUgbWVzc2FnZQorCSAgZm9yIGV2ZXJ5IHBvd2VyZG9tYWluIHJlZ2lzdGVyIHdyaXRlLiAgSG93ZXZlciwgdGhlCisJICBleHRyYSBkZXRhaWwgY29zdHMgc29tZSBtZW1vcnkuCisKK2NvbmZpZyBPTUFQX0RFQlVHX0NMT0NLRE9NQUlOCisJYm9vbCAiRW1pdCBkZWJ1ZyBtZXNzYWdlcyBmcm9tIGNsb2NrZG9tYWluIGxheWVyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb21waWxlIGluIGNsb2NrZG9tYWluIGxheWVyCisJICBkZWJ1Z2dpbmcgbWVzc2FnZXMgZm9yIE9NQVAyLzMuICAgVGhlc2UgbWVzc2FnZXMgY2FuCisJICBwcm92aWRlIG1vcmUgZGV0YWlsIGFzIHRvIHdoeSBzb21lIGNsb2NrZG9tYWluIGNhbGxzCisJICBtYXkgYmUgZmFpbGluZywgYW5kIHdpbGwgYWxzbyBlbWl0IGEgZGVzY3JpcHRpdmUgbWVzc2FnZQorCSAgZm9yIGV2ZXJ5IGNsb2NrZG9tYWluIHJlZ2lzdGVyIHdyaXRlLiAgSG93ZXZlciwgdGhlCisJICBleHRyYSBkZXRhaWwgY29zdHMgc29tZSBtZW1vcnkuCisKIGNvbmZpZyBPTUFQX1JFU0VUX0NMT0NLUwogCWJvb2wgIlJlc2V0IHVudXNlZCBjbG9ja3MgZHVyaW5nIGJvb3QiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAKQEAgLTg4LDEzICsxMTUsMTMgQEAKIAogY29uZmlnIE9NQVBfMzJLX1RJTUVSCiAJYm9vbCAiVXNlIDMyS0h6IHRpbWVyIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDI0WFggfHwgQVJDSF9PTUFQMzRYWAogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlIE9NQVAgMzJLSHogdGltZXIuCiAJICBUaGlzIHRpbWVyIHNhdmVzIHBvd2VyIGNvbXBhcmVkIHRvIHRoZSBPTUFQX01QVV9USU1FUiwgYW5kIGhhcwogCSAgc3VwcG9ydCBmb3Igbm8gdGljayBkdXJpbmcgaWRsZS4gVGhlIDMyS0h6IHRpbWVyIHByb3ZpZGVzIGxlc3MKIAkgIGludHJhLXRpY2sgcmVzb2x1dGlvbiB0aGFuIE9NQVBfTVBVX1RJTUVSLiBUaGUgMzJLSHogdGltZXIgaXMKLQkgIGN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgT01BUDE2WFggYW5kIDI0WFguCisJICBjdXJyZW50bHkgb25seSBhdmFpbGFibGUgZm9yIE9NQVAxNlhYLCAyNFhYIGFuZCAzNFhYLgogCiBlbmRjaG9pY2UKIApAQCAtMTA5LDcgKzEzNiw3IEBACiAKIGNvbmZpZyBPTUFQX0RNX1RJTUVSCiAJYm9vbCAiVXNlIGR1YWwtbW9kZSB0aW1lciIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMjRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyNFhYIHx8IEFSQ0hfT01BUDM0WFgKIAloZWxwCiAJIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgT01BUCBEdWFsLU1vZGUgdGltZXJzLgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKaW5kZXggMmM0MDUxYy4uZGVhZmY1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogIyBDb21tb24gc3VwcG9ydAogb2JqLXkgOj0gY29tbW9uLm8gc3JhbS5vIGNsb2NrLm8gZGV2aWNlcy5vIGRtYS5vIG11eC5vIGdwaW8ubyBcCi0JIHVzYi5vIGZiLm8KKwkgdXNiLm8gZmIubyBpby5vCiBvYmotbSA6PQogb2JqLW4gOj0KIG9iai0gIDo9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKaW5kZXggOGJkZjBlYS4uMDg0M2I4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwpAQCAtMjQ4LDYgKzI0OCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBfX29tYXAyX3NldF9nbG9iYWxzKHZvaWQpCiB7CisJb21hcDJfc2V0X2dsb2JhbHNfdGFwKG9tYXAyX2dsb2JhbHMpOwogCW9tYXAyX3NldF9nbG9iYWxzX21lbW9yeShvbWFwMl9nbG9iYWxzKTsKIAlvbWFwMl9zZXRfZ2xvYmFsc19jb250cm9sKG9tYXAyX2dsb2JhbHMpOwogCW9tYXAyX3NldF9nbG9iYWxzX3ByY20ob21hcDJfZ2xvYmFscyk7CkBAIC0yNTgsMTIgKzI1OSwxMyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9nbG9iYWxzIG9tYXAyNDJ4X2dsb2JhbHMgPSB7Ci0JLnRhcAk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoMHg0ODAxNDAwMCksCi0JLnNkcmMJPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAyNDIwX1NEUkNfQkFTRSksCi0JLnNtcwk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDI0MjBfU01TX0JBU0UpLAotCS5jdHJsCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMjQyMF9DVFJMX0JBU0UpLAotCS5wcm0JPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAyNDIwX1BSTV9CQVNFKSwKLQkuY20JPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAyNDIwX0NNX0JBU0UpLAorCS5jbGFzcwk9IE9NQVAyNDJYX0NMQVNTLAorCS50YXAJPSBPTUFQMl9JT19BRERSRVNTKDB4NDgwMTQwMDApLAorCS5zZHJjCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjQyMF9TRFJDX0JBU0UpLAorCS5zbXMJPSBPTUFQMl9JT19BRERSRVNTKE9NQVAyNDIwX1NNU19CQVNFKSwKKwkuY3RybAk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDI0MjBfQ1RSTF9CQVNFKSwKKwkucHJtCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjQyMF9QUk1fQkFTRSksCisJLmNtCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjQyMF9DTV9CQVNFKSwKIH07CiAKIHZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzXzI0Mngodm9pZCkKQEAgLTI3NiwxMiArMjc4LDEzIEBACiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKIAogc3RhdGljIHN0cnVjdCBvbWFwX2dsb2JhbHMgb21hcDI0M3hfZ2xvYmFscyA9IHsKLQkudGFwCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUygweDQ5MDBhMDAwKSwKLQkuc2RyYwk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDI0M1hfU0RSQ19CQVNFKSwKLQkuc21zCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMjQzWF9TTVNfQkFTRSksCi0JLmN0cmwJPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAyNDNYX0NUUkxfQkFTRSksCi0JLnBybQk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDI0MzBfUFJNX0JBU0UpLAotCS5jbQk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDI0MzBfQ01fQkFTRSksCisJLmNsYXNzCT0gT01BUDI0M1hfQ0xBU1MsCisJLnRhcAk9IE9NQVAyX0lPX0FERFJFU1MoMHg0OTAwYTAwMCksCisJLnNkcmMJPSBPTUFQMl9JT19BRERSRVNTKE9NQVAyNDNYX1NEUkNfQkFTRSksCisJLnNtcwk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDI0M1hfU01TX0JBU0UpLAorCS5jdHJsCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjQzWF9DVFJMX0JBU0UpLAorCS5wcm0JPSBPTUFQMl9JT19BRERSRVNTKE9NQVAyNDMwX1BSTV9CQVNFKSwKKwkuY20JPSBPTUFQMl9JT19BRERSRVNTKE9NQVAyNDMwX0NNX0JBU0UpLAogfTsKIAogdm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfMjQzeCh2b2lkKQpAQCAtMjk0LDEyICsyOTcsMTMgQEAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQogCiBzdGF0aWMgc3RydWN0IG9tYXBfZ2xvYmFscyBvbWFwMzQzeF9nbG9iYWxzID0gewotCS50YXAJPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKDB4NDgzMEEwMDApLAotCS5zZHJjCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMzQzWF9TRFJDX0JBU0UpLAotCS5zbXMJPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAzNDNYX1NNU19CQVNFKSwKLQkuY3RybAk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDM0M1hfQ1RSTF9CQVNFKSwKLQkucHJtCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMzQzMF9QUk1fQkFTRSksCi0JLmNtCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMzQzMF9DTV9CQVNFKSwKKwkuY2xhc3MJPSBPTUFQMzQzWF9DTEFTUywKKwkudGFwCT0gT01BUDJfSU9fQUREUkVTUygweDQ4MzBBMDAwKSwKKwkuc2RyYwk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDM0M1hfU0RSQ19CQVNFKSwKKwkuc21zCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMzQzWF9TTVNfQkFTRSksCisJLmN0cmwJPSBPTUFQMl9JT19BRERSRVNTKE9NQVAzNDNYX0NUUkxfQkFTRSksCisJLnBybQk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDM0MzBfUFJNX0JBU0UpLAorCS5jbQk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDM0MzBfQ01fQkFTRSksCiB9OwogCiB2b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwppbmRleCA5NzE4N2ZhLi4wY2IyYjIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTIwLDE3ICsyMCwxNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8bWFjaC90Yy5oPgorI2luY2x1ZGUgPG1hY2gvY29udHJvbC5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9tZW5lbGF1cy5oPgogI2luY2x1ZGUgPG1hY2gvbWNic3AuaD4KKyNpbmNsdWRlIDxtYWNoL2RzcF9jb21tb24uaD4KIAogI2lmCWRlZmluZWQoQ09ORklHX09NQVBfRFNQKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0RTUF9NT0RVTEUpCiAKLSNpbmNsdWRlICIuLi9wbGF0LW9tYXAvZHNwL2RzcF9jb21tb24uaCIKLQogc3RhdGljIHN0cnVjdCBkc3BfcGxhdGZvcm1fZGF0YSBkc3BfcGRhdGEgPSB7CiAJLmtkZXZfbGlzdCA9IExJU1RfSEVBRF9JTklUKGRzcF9wZGF0YS5rZGV2X2xpc3QpLAogfTsKQEAgLTc2LDcgKzc2LDcgQEAKIHsKIAlzdGF0aWMgREVGSU5FX01VVEVYKGRzcF9wZGF0YV9sb2NrKTsKIAotCW11dGV4X2luaXQoJmtkZXYtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZrZGV2LT5sb2NrKTsKIAogCW11dGV4X2xvY2soJmRzcF9wZGF0YV9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZrZGV2LT5lbnRyeSwgJmRzcF9wZGF0YS5rZGV2X2xpc3QpOwpAQCAtOTUsNiArOTUsMTAgQEAKIAogc3RhdGljIHZvaWQgb21hcF9pbml0X2twKHZvaWQpCiB7CisJLyogMjQzMCBhbmQgMzR4eCBrZXlwYWQgaXMgb24gVFdMNDAzMCAqLworCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkKKwkJcmV0dXJuOworCiAJaWYgKG1hY2hpbmVfaXNfb21hcF9oMigpIHx8IG1hY2hpbmVfaXNfb21hcF9oMygpKSB7CiAJCW9tYXBfY2ZnX3JlZyhGMThfMTYxMF9LQkMwKTsKIAkJb21hcF9jZmdfcmVnKEQyMF8xNjEwX0tCQzEpOwpAQCAtMTU2LDEzICsxNjAsNiBAQAogewogCWludCBpOwogCi0JaWYgKHNpemUgPiBPTUFQX01BWF9NQ0JTUF9DT1VOVCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJSZWdpc3RlcmVkIHRvbyBtYW55IE1jQlNQcyBwbGF0Zm9ybV9kYXRhLiIKLQkJCSIgVXNpbmcgbWF4aW11bSAoJWQpIGF2YWlsYWJsZS5cbiIsCi0JCQlPTUFQX01BWF9NQ0JTUF9DT1VOVCk7Ci0JCXNpemUgPSBPTUFQX01BWF9NQ0JTUF9DT1VOVDsKLQl9Ci0KIAlvbWFwX21jYnNwX2RldmljZXMgPSBremFsbG9jKHNpemUgKiBzaXplb2Yoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKSwKIAkJCQkgICAgIEdGUF9LRVJORUwpOwogCWlmICghb21hcF9tY2JzcF9kZXZpY2VzKSB7CkBAIC01MzAsMTAgKzUyNyw2IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaW5pdF9kZXZpY2VzKHZvaWQpCiB7Ci0vKgotICogTmVlZCB0byBlbmFibGUgcmVsZXZhbnQgb25jZSBmb3IgMjQzMCBTRFAKLSAqLwotI2lmbmRlZiBDT05GSUdfTUFDSF9PTUFQXzI0MzBTRFAKIAkvKiBwbGVhc2Uga2VlcCB0aGVzZSBjYWxscywgYW5kIHRoZWlyIGltcGxlbWVudGF0aW9ucyBhYm92ZSwKIAkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgogCSAqLwpAQCAtNTQzLDcgKzUzNiw2IEBACiAJb21hcF9pbml0X3V3aXJlKCk7CiAJb21hcF9pbml0X3dkdCgpOwogCW9tYXBfaW5pdF9ybmcoKTsKLSNlbmRpZgogCXJldHVybiAwOwogfQogYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggYTYzYjY0NC4uNTBmOGI0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtMTIzMyw3ICsxMjMzLDcgQEAKIAkvKiByZXF1ZXN0IGFuZCByZXNlcnZlIERNQSBjaGFubmVscyBmb3IgdGhlIGNoYWluICovCiAJZm9yIChpID0gMDsgaSA8IG5vX29mX2NoYW5zOyBpKyspIHsKIAkJZXJyID0gb21hcF9yZXF1ZXN0X2RtYShkZXZfaWQsIGRldl9uYW1lLAotCQkJCQljYWxsYmFjaywgMCwgJmNoYW5uZWxzW2ldKTsKKwkJCQkJY2FsbGJhY2ssIE5VTEwsICZjaGFubmVsc1tpXSk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlpbnQgajsKIAkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCkBAIC0yMjk3LDEzICsyMjk3LDEzIEBACiAJaW50IGNoLCByOwogCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7Ci0JCW9tYXBfZG1hX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMV9ETUFfQkFTRSk7CisJCW9tYXBfZG1hX2Jhc2UgPSBJT19BRERSRVNTKE9NQVAxX0RNQV9CQVNFKTsKIAkJZG1hX2xjaF9jb3VudCA9IE9NQVAxX0xPR0lDQUxfRE1BX0NIX0NPVU5UOwogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJb21hcF9kbWFfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyNFhYX0RNQTRfQkFTRSk7CisJCW9tYXBfZG1hX2Jhc2UgPSBJT19BRERSRVNTKE9NQVAyNFhYX0RNQTRfQkFTRSk7CiAJCWRtYV9sY2hfY291bnQgPSBPTUFQX0RNQTRfTE9HSUNBTF9ETUFfQ0hfQ09VTlQ7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQlvbWFwX2RtYV9iYXNlID0gKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDM0WFhfRE1BNF9CQVNFKTsKKwkJb21hcF9kbWFfYmFzZSA9IElPX0FERFJFU1MoT01BUDM0WFhfRE1BNF9CQVNFKTsKIAkJZG1hX2xjaF9jb3VudCA9IE9NQVBfRE1BNF9MT0dJQ0FMX0RNQV9DSF9DT1VOVDsKIAl9IGVsc2UgewogCQlwcl9lcnIoIkRNQSBpbml0IGZhaWxlZCBmb3IgdW5zdXBwb3J0ZWQgb21hcFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYwppbmRleCA2MDZmY2ZmLi45NjNjMzFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKQEAgLTY5Myw3ICs2OTMsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGRtX3RpbWVyX2NvdW50OyBpKyspIHsKIAkJdGltZXIgPSAmZG1fdGltZXJzW2ldOwotCQl0aW1lci0+aW9fYmFzZSA9ICh2b2lkIF9faW9tZW0gKilpb19wMnYodGltZXItPnBoeXNfYmFzZSk7CisJCXRpbWVyLT5pb19iYXNlID0gSU9fQUREUkVTUyh0aW1lci0+cGh5c19iYXNlKTsKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCQlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKIAkJCWNoYXIgY2xrX25hbWVbMTZdOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggNTkzNWFlNC4uODY3OWZiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC0yOCw3ICsyOCw3IEBACiAvKgogICogT01BUDE1MTAgR1BJTyByZWdpc3RlcnMKICAqLwotI2RlZmluZSBPTUFQMTUxMF9HUElPX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmNlMDAwCisjZGVmaW5lIE9NQVAxNTEwX0dQSU9fQkFTRQkJSU9fQUREUkVTUygweGZmZmNlMDAwKQogI2RlZmluZSBPTUFQMTUxMF9HUElPX0RBVEFfSU5QVVQJMHgwMAogI2RlZmluZSBPTUFQMTUxMF9HUElPX0RBVEFfT1VUUFVUCTB4MDQKICNkZWZpbmUgT01BUDE1MTBfR1BJT19ESVJfQ09OVFJPTAkweDA4CkBAIC00MiwxMCArNDIsMTAgQEAKIC8qCiAgKiBPTUFQMTYxMCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycwogICovCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU8xX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJlNDAwCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU8yX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJlYzAwCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU8zX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJiNDAwCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU80X0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJiYzAwCisjZGVmaW5lIE9NQVAxNjEwX0dQSU8xX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiZTQwMCkKKyNkZWZpbmUgT01BUDE2MTBfR1BJTzJfQkFTRQkJSU9fQUREUkVTUygweGZmZmJlYzAwKQorI2RlZmluZSBPTUFQMTYxMF9HUElPM19CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmI0MDApCisjZGVmaW5lIE9NQVAxNjEwX0dQSU80X0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiYmMwMCkKICNkZWZpbmUgT01BUDE2MTBfR1BJT19SRVZJU0lPTgkJMHgwMDAwCiAjZGVmaW5lIE9NQVAxNjEwX0dQSU9fU1lTQ09ORklHCQkweDAwMTAKICNkZWZpbmUgT01BUDE2MTBfR1BJT19TWVNTVEFUVVMJCTB4MDAxNApAQCAtNjcsMTIgKzY3LDEyIEBACiAvKgogICogT01BUDczMCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycwogICovCi0jZGVmaW5lIE9NQVA3MzBfR1BJTzFfQkFTRQkJKHZvaWQgX19pb21lbSAqKTB4ZmZmYmMwMDAKLSNkZWZpbmUgT01BUDczMF9HUElPMl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHhmZmZiYzgwMAotI2RlZmluZSBPTUFQNzMwX0dQSU8zX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJkMDAwCi0jZGVmaW5lIE9NQVA3MzBfR1BJTzRfQkFTRQkJKHZvaWQgX19pb21lbSAqKTB4ZmZmYmQ4MDAKLSNkZWZpbmUgT01BUDczMF9HUElPNV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHhmZmZiZTAwMAotI2RlZmluZSBPTUFQNzMwX0dQSU82X0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJlODAwCisjZGVmaW5lIE9NQVA3MzBfR1BJTzFfQkFTRQkJSU9fQUREUkVTUygweGZmZmJjMDAwKQorI2RlZmluZSBPTUFQNzMwX0dQSU8yX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiYzgwMCkKKyNkZWZpbmUgT01BUDczMF9HUElPM19CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmQwMDApCisjZGVmaW5lIE9NQVA3MzBfR1BJTzRfQkFTRQkJSU9fQUREUkVTUygweGZmZmJkODAwKQorI2RlZmluZSBPTUFQNzMwX0dQSU81X0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiZTAwMCkKKyNkZWZpbmUgT01BUDczMF9HUElPNl9CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmU4MDApCiAjZGVmaW5lIE9NQVA3MzBfR1BJT19EQVRBX0lOUFVUCQkweDAwCiAjZGVmaW5lIE9NQVA3MzBfR1BJT19EQVRBX09VVFBVVAkweDA0CiAjZGVmaW5lIE9NQVA3MzBfR1BJT19ESVJfQ09OVFJPTAkweDA4CkBAIC04MywxNiArODMsMTYgQEAKIC8qCiAgKiBvbWFwMjR4eCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycwogICovCi0jZGVmaW5lIE9NQVAyNDJYX0dQSU8xX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweDQ4MDE4MDAwCi0jZGVmaW5lIE9NQVAyNDJYX0dQSU8yX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweDQ4MDFhMDAwCi0jZGVmaW5lIE9NQVAyNDJYX0dQSU8zX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweDQ4MDFjMDAwCi0jZGVmaW5lIE9NQVAyNDJYX0dQSU80X0JBU0UJCSh2b2lkIF9faW9tZW0gKikweDQ4MDFlMDAwCisjZGVmaW5lIE9NQVAyNDJYX0dQSU8xX0JBU0UJCUlPX0FERFJFU1MoMHg0ODAxODAwMCkKKyNkZWZpbmUgT01BUDI0MlhfR1BJTzJfQkFTRQkJSU9fQUREUkVTUygweDQ4MDFhMDAwKQorI2RlZmluZSBPTUFQMjQyWF9HUElPM19CQVNFCQlJT19BRERSRVNTKDB4NDgwMWMwMDApCisjZGVmaW5lIE9NQVAyNDJYX0dQSU80X0JBU0UJCUlPX0FERFJFU1MoMHg0ODAxZTAwMCkKIAotI2RlZmluZSBPTUFQMjQzWF9HUElPMV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTAwQzAwMAotI2RlZmluZSBPTUFQMjQzWF9HUElPMl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTAwRTAwMAotI2RlZmluZSBPTUFQMjQzWF9HUElPM19CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTAxMDAwMAotI2RlZmluZSBPTUFQMjQzWF9HUElPNF9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTAxMjAwMAotI2RlZmluZSBPTUFQMjQzWF9HUElPNV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0ODBCNjAwMAorI2RlZmluZSBPTUFQMjQzWF9HUElPMV9CQVNFCQlJT19BRERSRVNTKDB4NDkwMEMwMDApCisjZGVmaW5lIE9NQVAyNDNYX0dQSU8yX0JBU0UJCUlPX0FERFJFU1MoMHg0OTAwRTAwMCkKKyNkZWZpbmUgT01BUDI0M1hfR1BJTzNfQkFTRQkJSU9fQUREUkVTUygweDQ5MDEwMDAwKQorI2RlZmluZSBPTUFQMjQzWF9HUElPNF9CQVNFCQlJT19BRERSRVNTKDB4NDkwMTIwMDApCisjZGVmaW5lIE9NQVAyNDNYX0dQSU81X0JBU0UJCUlPX0FERFJFU1MoMHg0ODBCNjAwMCkKIAogI2RlZmluZSBPTUFQMjRYWF9HUElPX1JFVklTSU9OCQkweDAwMDAKICNkZWZpbmUgT01BUDI0WFhfR1BJT19TWVNDT05GSUcJCTB4MDAxMApAQCAtMTIyLDEzICsxMjIsMTQgQEAKICAqIG9tYXAzNHh4IHNwZWNpZmljIEdQSU8gcmVnaXN0ZXJzCiAgKi8KIAotI2RlZmluZSBPTUFQMzRYWF9HUElPMV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0ODMxMDAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPMl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1MDAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPM19CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1MjAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPNF9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1NDAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPNV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1NjAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPNl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1ODAwMAorI2RlZmluZSBPTUFQMzRYWF9HUElPMV9CQVNFCQlJT19BRERSRVNTKDB4NDgzMTAwMDApCisjZGVmaW5lIE9NQVAzNFhYX0dQSU8yX0JBU0UJCUlPX0FERFJFU1MoMHg0OTA1MDAwMCkKKyNkZWZpbmUgT01BUDM0WFhfR1BJTzNfQkFTRQkJSU9fQUREUkVTUygweDQ5MDUyMDAwKQorI2RlZmluZSBPTUFQMzRYWF9HUElPNF9CQVNFCQlJT19BRERSRVNTKDB4NDkwNTQwMDApCisjZGVmaW5lIE9NQVAzNFhYX0dQSU81X0JBU0UJCUlPX0FERFJFU1MoMHg0OTA1NjAwMCkKKyNkZWZpbmUgT01BUDM0WFhfR1BJTzZfQkFTRQkJSU9fQUREUkVTUygweDQ5MDU4MDAwKQogCisjZGVmaW5lIE9NQVBfTVBVSU9fVkJBU0UJCUlPX0FERFJFU1MoT01BUF9NUFVJT19CQVNFKQogCiBzdHJ1Y3QgZ3Bpb19iYW5rIHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CkBAIC0xNjAsNyArMTYxLDcgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMTYxMFs1XSA9IHsKLQl7IE9NQVBfTVBVSU9fQkFTRSwgICAgIElOVF9NUFVJTywJICAgIElIX01QVUlPX0JBU0UsICAgICBNRVRIT0RfTVBVSU99LAorCXsgT01BUF9NUFVJT19WQkFTRSwgICAgSU5UX01QVUlPLAkgICAgSUhfTVBVSU9fQkFTRSwgICAgIE1FVEhPRF9NUFVJT30sCiAJeyBPTUFQMTYxMF9HUElPMV9CQVNFLCBJTlRfR1BJT19CQU5LMSwJICAgIElIX0dQSU9fQkFTRSwgICAgICBNRVRIT0RfR1BJT18xNjEwIH0sCiAJeyBPTUFQMTYxMF9HUElPMl9CQVNFLCBJTlRfMTYxMF9HUElPX0JBTksyLCBJSF9HUElPX0JBU0UgKyAxNiwgTUVUSE9EX0dQSU9fMTYxMCB9LAogCXsgT01BUDE2MTBfR1BJTzNfQkFTRSwgSU5UXzE2MTBfR1BJT19CQU5LMywgSUhfR1BJT19CQVNFICsgMzIsIE1FVEhPRF9HUElPXzE2MTAgfSwKQEAgLTE3MCwxNCArMTcxLDE0IEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzE1MTBbMl0gPSB7Ci0JeyBPTUFQX01QVUlPX0JBU0UsICAgIElOVF9NUFVJTywgICAgICBJSF9NUFVJT19CQVNFLCBNRVRIT0RfTVBVSU8gfSwKKwl7IE9NQVBfTVBVSU9fVkJBU0UsICAgSU5UX01QVUlPLCAgICAgIElIX01QVUlPX0JBU0UsIE1FVEhPRF9NUFVJTyB9LAogCXsgT01BUDE1MTBfR1BJT19CQVNFLCBJTlRfR1BJT19CQU5LMSwgSUhfR1BJT19CQVNFLCAgTUVUSE9EX0dQSU9fMTUxMCB9CiB9OwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfNzMwWzddID0gewotCXsgT01BUF9NUFVJT19CQVNFLCAgICAgSU5UXzczMF9NUFVJTywJICAgIElIX01QVUlPX0JBU0UsCU1FVEhPRF9NUFVJTyB9LAorCXsgT01BUF9NUFVJT19WQkFTRSwgICAgSU5UXzczMF9NUFVJTywJICAgIElIX01QVUlPX0JBU0UsCU1FVEhPRF9NUFVJTyB9LAogCXsgT01BUDczMF9HUElPMV9CQVNFLCAgSU5UXzczMF9HUElPX0JBTksxLCAgSUhfR1BJT19CQVNFLAlNRVRIT0RfR1BJT183MzAgfSwKIAl7IE9NQVA3MzBfR1BJTzJfQkFTRSwgIElOVF83MzBfR1BJT19CQU5LMiwgIElIX0dQSU9fQkFTRSArIDMyLAlNRVRIT0RfR1BJT183MzAgfSwKIAl7IE9NQVA3MzBfR1BJTzNfQkFTRSwgIElOVF83MzBfR1BJT19CQU5LMywgIElIX0dQSU9fQkFTRSArIDY0LAlNRVRIT0RfR1BJT183MzAgfSwKQEAgLTEzODksNyArMTM5MCw3IEBACiAKIAkJZ3Bpb19iYW5rX2NvdW50ID0gNTsKIAkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzE2MTA7Ci0JCXJldiA9IG9tYXBfcmVhZHcoZ3Bpb19iYW5rWzFdLmJhc2UgKyBPTUFQMTYxMF9HUElPX1JFVklTSU9OKTsKKwkJcmV2ID0gX19yYXdfcmVhZHcoZ3Bpb19iYW5rWzFdLmJhc2UgKyBPTUFQMTYxMF9HUElPX1JFVklTSU9OKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBHUElPIGhhcmR3YXJlIHZlcnNpb24gJWQuJWRcbiIsCiAJCSAgICAgICAocmV2ID4+IDQpICYgMHgwZiwgcmV2ICYgMHgwZik7CiAJfQpAQCAtMTQwOCw3ICsxNDA5LDcgQEAKIAogCQlncGlvX2JhbmtfY291bnQgPSA0OwogCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfMjQyeDsKLQkJcmV2ID0gb21hcF9yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOworCQlyZXYgPSBfX3Jhd19yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOwogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQMjQyeCBHUElPIGhhcmR3YXJlIHZlcnNpb24gJWQuJWRcbiIsCiAJCQkocmV2ID4+IDQpICYgMHgwZiwgcmV2ICYgMHgwZik7CiAJfQpAQCAtMTQxNyw3ICsxNDE4LDcgQEAKIAogCQlncGlvX2JhbmtfY291bnQgPSA1OwogCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfMjQzeDsKLQkJcmV2ID0gb21hcF9yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOworCQlyZXYgPSBfX3Jhd19yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOwogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQMjQzeCBHUElPIGhhcmR3YXJlIHZlcnNpb24gJWQuJWRcbiIsCiAJCQkocmV2ID4+IDQpICYgMHgwZiwgcmV2ICYgMHgwZik7CiAJfQpAQCAtMTQyOCw3ICsxNDI5LDcgQEAKIAogCQlncGlvX2JhbmtfY291bnQgPSBPTUFQMzRYWF9OUl9HUElPUzsKIAkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzM0eHg7Ci0JCXJldiA9IG9tYXBfcmVhZGwoZ3Bpb19iYW5rWzBdLmJhc2UgKyBPTUFQMjRYWF9HUElPX1JFVklTSU9OKTsKKwkJcmV2ID0gX19yYXdfcmVhZGwoZ3Bpb19iYW5rWzBdLmJhc2UgKyBPTUFQMjRYWF9HUElPX1JFVklTSU9OKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUDM0eHggR1BJTyBoYXJkd2FyZSB2ZXJzaW9uICVkLiVkXG4iLAogCQkJKHJldiA+PiA0KSAmIDB4MGYsIHJldiAmIDB4MGYpOwogCX0KQEAgLTE0MzcsMTAgKzE0MzgsOSBAQAogCQlpbnQgaiwgZ3Bpb19jb3VudCA9IDE2OwogCiAJCWJhbmsgPSAmZ3Bpb19iYW5rW2ldOwotCQliYW5rLT5iYXNlID0gSU9fQUREUkVTUyhiYW5rLT5iYXNlKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmJhbmstPmxvY2spOwogCQlpZiAoYmFua19pc19tcHVpbyhiYW5rKSkKLQkJCW9tYXBfd3JpdGV3KDB4RkZGRiwgT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19HUElPX01BU0tJVCk7CisJCQlfX3Jhd193cml0ZXcoMHhmZmZmLCBiYW5rLT5iYXNlICsgT01BUF9NUFVJT19HUElPX01BU0tJVCk7CiAJCWlmIChjcHVfaXNfb21hcDE1eHgoKSAmJiBiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTUxMCkgewogCQkJX19yYXdfd3JpdGV3KDB4ZmZmZiwgYmFuay0+YmFzZSArIE9NQVAxNTEwX0dQSU9fSU5UX01BU0spOwogCQkJX19yYXdfd3JpdGV3KDB4MDAwMCwgYmFuay0+YmFzZSArIE9NQVAxNTEwX0dQSU9fSU5UX1NUQVRVUyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLTI0MzBzZHAuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtMjQzMHNkcC5oCmluZGV4IGNmMWRjMDIuLjEwZDQ0OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtMjQzMHNkcC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtMjQzMHNkcC5oCkBAIC0zMCwxMCArMzAsMTIgQEAKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQXzI0MzBTRFBfSAogCiAvKiBQbGFjZWhvbGRlciBmb3IgMjQzMFNEUCBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIE9NQVAyNFhYX0VUSFJfU1RBUlQJCSAweDA4MDAwMzAwCisjZGVmaW5lIE9NQVAyNFhYX0VUSFJfU1RBUlQJCTB4MDgwMDAzMDAKICNkZWZpbmUgT01BUDI0WFhfRVRIUl9HUElPX0lSUQkJMTQ5CiAjZGVmaW5lIFNEUDI0MzBfQ1MwX0JBU0UJCTB4MDQwMDAwMDAKIAotI2RlZmluZSBUV0w0MDMwX0lSUU5VTQkJCUlOVF8yNFhYX1NZU19OSVJRCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCitleHRlcm4gdm9pZCBzZHAyNDMwX2ZsYXNoX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzZHAyNDMwX3VzYl9pbml0KHZvaWQpOwogCiAjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQXzI0MzBTRFBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1hcG9sbG9uLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaAppbmRleCBkNmYyYThlLi43MzFjODU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaApAQCAtMzEsNiArMzEsMTIgQEAKIAogZXh0ZXJuIHZvaWQgYXBvbGxvbl9tbWNfaW5pdCh2b2lkKTsKIAorc3RhdGljIGlubGluZSBpbnQgYXBvbGxvbl9wbHVzKHZvaWQpCit7CisJLyogVGhlIGFwb2xsb24gcGx1cyBoYXMgSURDT0RFIHJldmlzaW9uIDUgKi8KKwlyZXR1cm4gc3lzdGVtX3JldiAmIDB4YzA7Cit9CisKIC8qIFBsYWNlaG9sZGVyIGZvciBBUE9MTE9OIHNwZWNpZmljIGRlZmluZXMgKi8KICNkZWZpbmUgQVBPTExPTl9FVEhSX0dQSU9fSVJRCQk3NAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWg0LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWg0LmgKaW5kZXggMTQ3MGNkMy4uN2MzZmEwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oNC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDQuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWg0LmgKICAqCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDE2MTAgSDQgYm9hcmQuCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDI0MjAgSDQgYm9hcmQuCiAgKgogICogSW5pdGlhbCBjcmVhdGlvbiBieSBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4KICAqCkBAIC0yOSw2ICsyOSw5IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9INF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9INF9ICiAKKy8qIE1NQyBQcm90b3R5cGVzICovCitleHRlcm4gdm9pZCBoNF9tbWNfaW5pdCh2b2lkKTsKKwogLyogUGxhY2Vob2xkZXIgZm9yIEg0IHNwZWNpZmljIGRlZmluZXMgKi8KICNkZWZpbmUgT01BUDI0WFhfRVRIUl9HUElPX0lSUQkJOTIKICNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQX0g0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtbGRwLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWxkcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZTI3NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWxkcC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWxkcC5oCisgKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVAzIExEUC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0xEUF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9MRFBfSAorCitleHRlcm4gdm9pZCB0d2w0MDMwX2JjaV9iYXR0ZXJ5X2luaXQodm9pZCk7CisKKyNkZWZpbmUgVFdMNDAzMF9JUlFOVU0JCUlOVF8zNFhYX1NZU19OSVJRCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVBfTERQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb21hcDNiZWFnbGUuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb21hcDNiZWFnbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDgwZDUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vbWFwM2JlYWdsZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW9tYXAzYmVhZ2xlLmgKKyAqCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDMgQkVBR0xFLgorICoKKyAqIEluaXRpYWwgY3JlYXRpb24gYnkgU3llZCBNb2hhbW1lZCBLaGFzaW0gPGtoYXNpbUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCisgKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAzX0JFQUdMRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUDNfQkVBR0xFX0gKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUDNfQkVBR0xFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vdmVyby5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vdmVyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlY2FlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW92ZXJvLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIGJvYXJkLW92ZXJvLmggKEd1bXN0aXggT3Zlcm8pCisgKgorICogSW5pdGlhbCBjb2RlOiBTdGV2ZSBTYWtvbWFuIDxzdGV2ZUBzYWtvbWFuLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX09WRVJPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PVkVST19ICisKKyNkZWZpbmUgT1ZFUk9fR1BJT19CVF9YR0FURQkxNQorI2RlZmluZSBPVkVST19HUElPX1cyV19OUkVTRVQJMTYKKyNkZWZpbmUgT1ZFUk9fR1BJT19CVF9OUkVTRVQJMTY0CisjZGVmaW5lIE9WRVJPX0dQSU9fVVNCSF9DUEVOCTE2OAorI2RlZmluZSBPVkVST19HUElPX1VTQkhfTlJFU0VUCTE4MworCisjZW5kaWYgLyogX19fX0FTTV9BUkNIX09WRVJPX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oCmluZGV4IDU0NDQ1NjQuLmMyM2MxMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKQEAgLTQ1LDYgKzQ1LDggQEAKIAl1bnNpZ25lZCBjb3ZlcjoxOwogCS8qIDQgd2lyZSBzaWduYWxpbmcgaXMgb3B0aW9uYWwsIGFuZCBpcyBvbmx5IHVzZWQgZm9yIFNEL1NESU8gKi8KIAl1bnNpZ25lZCB3aXJlNDoxOworCS8qIHVzZSB0aGUgaW50ZXJuYWwgY2xvY2sgKi8KKwl1bnNpZ25lZCBpbnRlcm5hbF9jbG9jazoxOwogCXMxNiBwb3dlcl9waW47CiAJczE2IHN3aXRjaF9waW47CiAJczE2IHdwX3BpbjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2suaAppbmRleCA5MmY3YzcyLi43MTkyOTg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9jay5oCkBAIC0xNSw2ICsxNSw3IEBACiAKIHN0cnVjdCBtb2R1bGU7CiBzdHJ1Y3QgY2xrOworc3RydWN0IGNsb2NrZG9tYWluOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIApAQCAtNzksNiArODAsOCBAQAogCXUzMgkJCWNsa3NlbF9tYXNrOwogCWNvbnN0IHN0cnVjdCBjbGtzZWwJKmNsa3NlbDsKIAlzdHJ1Y3QgZHBsbF9kYXRhCSpkcGxsX2RhdGE7CisJY29uc3QgY2hhcgkJKmNsa2RtX25hbWU7CisJc3RydWN0IGNsb2NrZG9tYWluCSpjbGtkbTsKICNlbHNlCiAJX191OAkJCXJhdGVfb2Zmc2V0OwogCV9fdTgJCQlzcmNfb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9ja2RvbWFpbi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9ja2RvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTFmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrZG9tYWluLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrZG9tYWluLmgKKyAqCisgKiBPTUFQMi8zIGNsb2NrZG9tYWluIGZyYW1ld29yayBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9PTUFQX0NMT0NLRE9NQUlOX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfT01BUF9DTE9DS0RPTUFJTl9ICisKKyNpbmNsdWRlIDxtYWNoL3Bvd2VyZG9tYWluLmg+CisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CisKKy8qIENsb2NrZG9tYWluIGNhcGFiaWxpdHkgZmxhZ3MgKi8KKyNkZWZpbmUgQ0xLRE1fQ0FOX0ZPUkNFX1NMRUVQCQkJKDEgPDwgMCkKKyNkZWZpbmUgQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUAkJCSgxIDw8IDEpCisjZGVmaW5lIENMS0RNX0NBTl9FTkFCTEVfQVVUTwkJCSgxIDw8IDIpCisjZGVmaW5lIENMS0RNX0NBTl9ESVNBQkxFX0FVVE8JCQkoMSA8PCAzKQorCisjZGVmaW5lIENMS0RNX0NBTl9IV1NVUAkJKENMS0RNX0NBTl9FTkFCTEVfQVVUTyB8IENMS0RNX0NBTl9ESVNBQkxFX0FVVE8pCisjZGVmaW5lIENMS0RNX0NBTl9TV1NVUAkJKENMS0RNX0NBTl9GT1JDRV9TTEVFUCB8IENMS0RNX0NBTl9GT1JDRV9XQUtFVVApCisjZGVmaW5lIENMS0RNX0NBTl9IV1NVUF9TV1NVUAkoQ0xLRE1fQ0FOX1NXU1VQIHwgQ0xLRE1fQ0FOX0hXU1VQKQorCisvKiBPTUFQMjRYWCBDTV9DTEtTVENUUkxfKi5BVVRPU1RBVEVfKiByZWdpc3RlciBiaXQgdmFsdWVzICovCisjZGVmaW5lIE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE8JCTB4MAorI2RlZmluZSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8JCTB4MQorCisvKiBPTUFQM1hYWCBDTV9DTEtTVENUUkxfKi5DTEtUUkNUUkxfKiByZWdpc3RlciBiaXQgdmFsdWVzICovCisjZGVmaW5lIE9NQVAzNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE8JCTB4MAorI2RlZmluZSBPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfU0xFRVAJCTB4MQorI2RlZmluZSBPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfV0FLRVVQCQkweDIKKyNkZWZpbmUgT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPCQkweDMKKworLyoKKyAqIHN0cnVjdCBjbGtkbV9wd3JkbV9hdXRvZGVwIC0gYSBwb3dlcmRvbWFpbiB0aGF0IHNob3VsZCBoYXZlIHdrZGVwcworICogYW5kIHNsZWVwZGVwcyBhZGRlZCB3aGVuIGEgcG93ZXJkb21haW4gc2hvdWxkIHN0YXkgYWN0aXZlIGluIGh3c3VwIG1vZGU7CisgKiBhbmQgY29udmVyc2VseSwgcmVtb3ZlZCB3aGVuIHRoZSBwb3dlcmRvbWFpbiBzaG91bGQgYmUgYWxsb3dlZCB0byBnbworICogaW5hY3RpdmUgaW4gaHdzdXAgbW9kZS4KKyAqLworc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgeworCisJLyogTmFtZSBvZiB0aGUgcG93ZXJkb21haW4gdG8gYWRkIGEgd2tkZXAvc2xlZXBkZXAgb24gKi8KKwljb25zdCBjaGFyICpwd3JkbV9uYW1lOworCisJLyogUG93ZXJkb21haW4gcG9pbnRlciAobG9va2VkIHVwIGF0IGNsa2RtX2luaXQoKSB0aW1lKSAqLworCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG07CisKKwkvKiBPTUFQIGNoaXAgdHlwZXMgdGhhdCB0aGlzIGNsb2NrZG9tYWluIGRlcCBpcyB2YWxpZCBvbiAqLworCWNvbnN0IHN0cnVjdCBvbWFwX2NoaXBfaWQgb21hcF9jaGlwOworCit9OworCitzdHJ1Y3QgY2xvY2tkb21haW4geworCisJLyogQ2xvY2tkb21haW4gbmFtZSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkvKiBQb3dlcmRvbWFpbiBlbmNsb3NpbmcgdGhpcyBjbG9ja2RvbWFpbiAqLworCWNvbnN0IGNoYXIgKnB3cmRtX25hbWU7CisKKwkvKiBDTEtUUkNUUkwvQVVUT1NUQVRFIGZpZWxkIG1hc2sgaW4gQ01fQ0xLU1RDVFJMIHJlZyAqLworCWNvbnN0IHUxNiBjbGt0cmN0cmxfbWFzazsKKworCS8qIENsb2NrZG9tYWluIGNhcGFiaWxpdHkgZmxhZ3MgKi8KKwljb25zdCB1OCBmbGFnczsKKworCS8qIE9NQVAgY2hpcCB0eXBlcyB0aGF0IHRoaXMgY2xvY2tkb21haW4gaXMgdmFsaWQgb24gKi8KKwljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKKworCS8qIFVzZWNvdW50IHRyYWNraW5nICovCisJYXRvbWljX3QgdXNlY291bnQ7CisKKwkvKiBQb3dlcmRvbWFpbiBwb2ludGVyIGFzc2lnbmVkIGF0IGNsa2RtX3JlZ2lzdGVyKCkgKi8KKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOworCisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCit9OworCit2b2lkIGNsa2RtX2luaXQoc3RydWN0IGNsb2NrZG9tYWluICoqY2xrZG1zLCBzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcHMpOworaW50IGNsa2RtX3JlZ2lzdGVyKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworaW50IGNsa2RtX3VucmVnaXN0ZXIoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CitzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKTsKKworaW50IGNsa2RtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKSk7CitzdHJ1Y3QgcG93ZXJkb21haW4gKmNsa2RtX2dldF9wd3JkbShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKKwordm9pZCBvbWFwMl9jbGtkbV9hbGxvd19pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOwordm9pZCBvbWFwMl9jbGtkbV9kZW55X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CisKK2ludCBvbWFwMl9jbGtkbV93YWtldXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CitpbnQgb21hcDJfY2xrZG1fc2xlZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CisKK2ludCBvbWFwMl9jbGtkbV9jbGtfZW5hYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0cnVjdCBjbGsgKmNsayk7CitpbnQgb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgc3RydWN0IGNsayAqY2xrKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NvbW1vbi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb21tb24uaAppbmRleCAwNjA5MzExLi5lZjcwZTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29tbW9uLmgKQEAgLTM0LDYgKzM0LDcgQEAKIGV4dGVybiB2b2lkIG9tYXBfbWFwX2NvbW1vbl9pbyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXI7CiBleHRlcm4gdm9pZCBvbWFwX3NlcmlhbF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcF9zZXJpYWxfZW5hYmxlX2Nsb2NrcyhpbnQgZW5hYmxlKTsKICNpZmRlZiBDT05GSUdfSTJDX09NQVAKIGV4dGVybiBpbnQgb21hcF9yZWdpc3Rlcl9pMmNfYnVzKGludCBidXNfaWQsIHUzMiBjbGtyYXRlLAogCQkJCSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gY29uc3QgKmluZm8sCkBAIC00OSw2ICs1MCw3IEBACiAKIC8qIElPIGJhc2VzIGZvciB2YXJpb3VzIE9NQVAgcHJvY2Vzc29ycyAqLwogc3RydWN0IG9tYXBfZ2xvYmFscyB7CisJdTMyCQljbGFzczsJCS8qIE9NQVAgY2xhc3MgdG8gZGV0ZWN0ICovCiAJdm9pZCBfX2lvbWVtCSp0YXA7CQkvKiBDb250cm9sIG1vZHVsZSBJRCBjb2RlICovCiAJdm9pZCBfX2lvbWVtCSpzZHJjOwkJLyogU0RSQU0gQ29udHJvbGxlciAqLwogCXZvaWQgX19pb21lbQkqc21zOwkJLyogU0RSQU0gTWVtb3J5IFNjaGVkdWxlciAqLwpAQCAtNjIsNiArNjQsNyBAQAogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KHZvaWQpOwogCiAvKiBUaGVzZSBnZXQgY2FsbGVkIGZyb20gb21hcDJfc2V0X2dsb2JhbHNfeHh4eCgpLCBkbyBub3QgY2FsbCB0aGVzZSAqLwordm9pZCBvbWFwMl9zZXRfZ2xvYmFsc190YXAoc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKIHZvaWQgb21hcDJfc2V0X2dsb2JhbHNfbWVtb3J5KHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7CiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX2NvbnRyb2woc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKIHZvaWQgb21hcDJfc2V0X2dsb2JhbHNfcHJjbShzdHJ1Y3Qgb21hcF9nbG9iYWxzICopOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb250cm9sLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NvbnRyb2wuaAppbmRleCBlM2ZkNjJkLi5kYzk4ODY3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb250cm9sLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb250cm9sLmgKQEAgLTEsMTMgKzEsMTAgQEAKLSNpZm5kZWYgX19BU01fQVJDSF9DT05UUk9MX0gKLSNkZWZpbmUgX19BU01fQVJDSF9DT05UUk9MX0gKLQogLyoKICAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29udHJvbC5oCiAgKgogICogT01BUDIvMyBTeXN0ZW0gQ29udHJvbCBNb2R1bGUgZGVmaW5pdGlvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CiAgKgpAQCAtMTYsMTQgKzEzLDIzIEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpZm5kZWYgX19BU01fQVJDSF9DT05UUk9MX0gKKyNkZWZpbmUgX19BU01fQVJDSF9DT05UUk9MX0gKKwogI2luY2x1ZGUgPG1hY2gvaW8uaD4KIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KICNkZWZpbmUgT01BUDI0MlhfQ1RSTF9SRUdBRERSKHJlZykJCQkJCVwKLQkodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMjQyWF9DVFJMX0JBU0UgKyAocmVnKSkKKwlJT19BRERSRVNTKE9NQVAyNDJYX0NUUkxfQkFTRSArIChyZWcpKQogI2RlZmluZSBPTUFQMjQzWF9DVFJMX1JFR0FERFIocmVnKQkJCQkJXAotCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyNDNYX0NUUkxfQkFTRSArIChyZWcpKQorCUlPX0FERFJFU1MoT01BUDI0M1hfQ1RSTF9CQVNFICsgKHJlZykpCiAjZGVmaW5lIE9NQVAzNDNYX0NUUkxfUkVHQUREUihyZWcpCQkJCQlcCi0JKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDM0M1hfQ1RSTF9CQVNFICsgKHJlZykpCisJSU9fQUREUkVTUyhPTUFQMzQzWF9DVFJMX0JBU0UgKyAocmVnKSkKKyNlbHNlCisjZGVmaW5lIE9NQVAyNDJYX0NUUkxfUkVHQUREUihyZWcpCUlPX0FERFJFU1MoT01BUDI0MlhfQ1RSTF9CQVNFICsgKHJlZykpCisjZGVmaW5lIE9NQVAyNDNYX0NUUkxfUkVHQUREUihyZWcpCUlPX0FERFJFU1MoT01BUDI0M1hfQ1RSTF9CQVNFICsgKHJlZykpCisjZGVmaW5lIE9NQVAzNDNYX0NUUkxfUkVHQUREUihyZWcpCUlPX0FERFJFU1MoT01BUDM0M1hfQ1RSTF9CQVNFICsgKHJlZykpCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKIC8qCiAgKiBBcyBlbHNld2hlcmUsIHRoZSAiT01BUDJfIiBwcmVmaXggaW5kaWNhdGVzIHRoYXQgdGhlIG1hY3JvIGlzIHZhbGlkIGZvcgpAQCAtMTM0LDYgKzE0MCw3IEBACiAjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfVEVTVF9LRVlfMTMJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBmYykKICNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9JVkEyX0JPT1RBRERSCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAxOTApCiAjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfSVZBMl9CT09UTU9ECShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAxOTQpCisjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfVEVNUF9TRU5TT1IJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDJiNCkKIAogLyoKICAqIFJFVklTSVQ6IFRoaXMgbGlzdCBvZiByZWdpc3RlcnMgaXMgbm90IGNvbXByZWhlbnNpdmUgLSB0aGVyZSBhcmUgbW9yZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmgKaW5kZXggMDVhZWUwZS4uZTA0NjQxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC0zNDYsOSArMzQ2LDE0IEBACiAJCWdldF9zaWxfcmV2aXNpb24oc3lzdGVtX3JldikKIAogLyogVmFyaW91cyBzaWxpY29uIG1hY3JvcyBkZWZpbmVkIGhlcmUgKi8KKyNkZWZpbmUgT01BUDI0MlhfQ0xBU1MJCTB4MjQyMDAwMDAKICNkZWZpbmUgT01BUDI0MjBfUkVWX0VTMV8wCTB4MjQyMDAwMDAKICNkZWZpbmUgT01BUDI0MjBfUkVWX0VTMl8wCTB4MjQyMDEwMDAKKworI2RlZmluZSBPTUFQMjQzWF9DTEFTUwkJMHgyNDMwMDAwMAogI2RlZmluZSBPTUFQMjQzMF9SRVZfRVMxXzAJMHgyNDMwMDAwMAorCisjZGVmaW5lIE9NQVAzNDNYX0NMQVNTCQkweDM0MzAwMDAwCiAjZGVmaW5lIE9NQVAzNDMwX1JFVl9FUzFfMAkweDM0MzAwMDAwCiAjZGVmaW5lIE9NQVAzNDMwX1JFVl9FUzJfMAkweDM0MzAxMDAwCiAjZGVmaW5lIE9NQVAzNDMwX1JFVl9FUzJfMQkweDM0MzAyMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMWIwMDM5Yi4uMWIxMWY1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMzUsNiArMzUsMTggQEAKICNpZmRlZiBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMwogCQlhZGQJXHJ4LCBccngsICMweDAwMDA0MDAwCUAgVUFSVCAzCiAjZW5kaWYKKworI2VsaWYJQ09ORklHX0FSQ0hfT01BUDMKKwkJbW92ZXEJXHJ4LCAjMHg0ODAwMDAwMAlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcworCQltb3ZuZQlccngsICMweGQ4MDAwMDAwCUAgdmlydHVhbCBiYXNlCisJCW9ycglccngsIFxyeCwgIzB4MDAwNmEwMDAKKyNpZmRlZiBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMgorCQlhZGQJXHJ4LCBccngsICMweDAwMDAyMDAwCUAgVUFSVCAyCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMworCQlhZGQJXHJ4LCBccngsICMweDAwZmIwMDAwCUAgVUFSVCAzCisJCWFkZAlccngsIFxyeCwgIzB4MDAwMDYwMDAKKyNlbmRpZgogI2VuZGlmCiAJCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCBkNGU5MDQzLi4wMzAxMThlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC01NSw5ICs1NSwxNyBAQAogMTUxMDoKIAkJLmVuZG0KIAotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQogI2luY2x1ZGUgPG1hY2gvb21hcDI0eHguaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjaW5jbHVkZSA8bWFjaC9vbWFwMzR4eC5oPgorI2VuZGlmCisKKyNkZWZpbmUgSU5UQ1BTX1NJUl9JUlFfT0ZGU0VUCTB4MDA0MAkJLyogQWN0aXZlIGludGVycnVwdCBudW1iZXIgKi8KIAogCQkubWFjcm8JZGlzYWJsZV9maXEKIAkJLmVuZG0KQEAgLTc5LDcgKzg3LDcgQEAKIAkJbGRyCVxpcnFuciwgW1xiYXNlLCAjMHhkOF0gLyogSVJRIHBlbmRpbmcgcmVnIDMgKi8KIAkJY21wCVxpcnFuciwgIzB4MAogMjIyMjoKLQkJbGRybmUJXGlycW5yLCBbXGJhc2UsICNJUlFfU0lSX0lSUV0KKwkJbGRybmUJXGlycW5yLCBbXGJhc2UsICNJTlRDUFNfU0lSX0lSUV9PRkZTRVRdCiAKIAkJLmVuZG0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9mcGdhLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2ZwZ2EuaAppbmRleCBjOTJlNGI0Li5mMTg2NGE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2ZwZ2EuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2ZwZ2EuaApAQCAtMzQsOSArMzQsOSBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIC8qIG1hcHMgaW4gdGhlIEZQR0EgcmVnaXN0ZXJzIGFuZCB0aGUgRVRIUiByZWdpc3RlcnMgKi8KLSNkZWZpbmUgSDJQMl9EQkdfRlBHQV9CQVNFCQkweEU4MDAwMDAwCS8qIFZBICovCi0jZGVmaW5lIEgyUDJfREJHX0ZQR0FfU0laRQkJU1pfNEsJCS8qIFNJWkUgKi8KLSNkZWZpbmUgSDJQMl9EQkdfRlBHQV9TVEFSVAkJMHgwNDAwMDAwMAkvKiBQQSAqLworI2RlZmluZSBIMlAyX0RCR19GUEdBX0JBU0UJCUlPTUVNKDB4RTgwMDAwMDApCS8qIFZBICovCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfU0laRQkJU1pfNEsJCQkvKiBTSVpFICovCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfU1RBUlQJCTB4MDQwMDAwMDAJCS8qIFBBICovCiAKICNkZWZpbmUgSDJQMl9EQkdfRlBHQV9FVEhSX1NUQVJUCShIMlAyX0RCR19GUEdBX1NUQVJUICsgMHgzMDApCiAjZGVmaW5lIEgyUDJfREJHX0ZQR0FfRlBHQV9SRVYJCShIMlAyX0RCR19GUEdBX0JBU0UgKyAweDEwKQkvKiBGUEdBIFJldmlzaW9uICovCkBAIC04NSw5ICs4NSw5IEBACiAgKiAgT01BUC0xNTEwIEZQR0EKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi0jZGVmaW5lIE9NQVAxNTEwX0ZQR0FfQkFTRQkJCTB4RTgwMDAwMDAJLyogVmlydHVhbCAqLwotI2RlZmluZSBPTUFQMTUxMF9GUEdBX1NJWkUJCQlTWl80SwotI2RlZmluZSBPTUFQMTUxMF9GUEdBX1NUQVJUCQkJMHgwODAwMDAwMAkvKiBQaHlzaWNhbCAqLworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0JBU0UJCUlPTUVNKDB4RTgwMDAwMDApCS8qIFZBICovCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfU0laRQkJU1pfNEsKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9TVEFSVAkJMHgwODAwMDAwMAkJLyogUEEgKi8KIAogLyogUmV2aXNpb24gKi8KICNkZWZpbmUgT01BUDE1MTBfRlBHQV9SRVZfTE9XCQkJKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggOGM3MWUyOC4uOThlOTAwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogCi0jZGVmaW5lIE9NQVBfTVBVSU9fQkFTRQkJCSh2b2lkIF9faW9tZW0gKikweGZmZmI1MDAwCisjZGVmaW5lIE9NQVBfTVBVSU9fQkFTRQkJCTB4ZmZmYjUwMDAKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVA3MzAKICNkZWZpbmUgT01BUF9NUFVJT19JTlBVVF9MQVRDSAkJMHgwMApAQCAtNzYsNiArNzYsOCBAQAogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oaW50IGdwaW8sIGludCBpc19pbnB1dCk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9ncGlvX2RhdGFvdXQoaW50IGdwaW8sIGludCBlbmFibGUpOwogZXh0ZXJuIGludCBvbWFwX2dldF9ncGlvX2RhdGFpbihpbnQgZ3Bpbyk7CitleHRlcm4gdm9pZCBvbWFwMl9ncGlvX3ByZXBhcmVfZm9yX3JldGVudGlvbih2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXAyX2dwaW9fcmVzdW1lX2FmdGVyX3JldGVudGlvbih2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2dwaW9fZGVib3VuY2UoaW50IGdwaW8sIGludCBlbmFibGUpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZ3Bpb19kZWJvdW5jZV90aW1lKGludCBncGlvLCBpbnQgZW5hYmxlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2dwbWMuaAppbmRleCA2YThlMDdmLi40NWI2Nzg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2dwbWMuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2dwbWMuaApAQCAtMTEsNiArMTEsOSBAQAogI2lmbmRlZiBfX09NQVAyX0dQTUNfSAogI2RlZmluZSBfX09NQVAyX0dQTUNfSAogCisvKiBNYXhpbXVtIE51bWJlciBvZiBDaGlwIFNlbGVjdHMgKi8KKyNkZWZpbmUgR1BNQ19DU19OVU0JCTgKKwogI2RlZmluZSBHUE1DX0NTX0NPTkZJRzEJCTB4MDAKICNkZWZpbmUgR1BNQ19DU19DT05GSUcyCQkweDA0CiAjZGVmaW5lIEdQTUNfQ1NfQ09ORklHMwkJMHgwOApAQCAtMjIsNiArMjUsOSBAQAogI2RlZmluZSBHUE1DX0NTX05BTkRfQUREUkVTUwkweDIwCiAjZGVmaW5lIEdQTUNfQ1NfTkFORF9EQVRBCTB4MjQKIAorI2RlZmluZSBHUE1DX0NPTkZJRwkJMHg1MAorI2RlZmluZSBHUE1DX1NUQVRVUwkJMHg1NAorCiAjZGVmaW5lIEdQTUNfQ09ORklHMV9XUkFQQlVSU1RfU1VQUCAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIEdQTUNfQ09ORklHMV9SRUFETVVMVElQTEVfU1VQUCAgKDEgPDwgMzApCiAjZGVmaW5lIEdQTUNfQ09ORklHMV9SRUFEVFlQRV9BU1lOQyAgICAgKDAgPDwgMjkpCkBAIC03OCw5ICs4NCwxNCBAQAogCXUxNiBhY2Nlc3M7CQkvKiBTdGFydC1jeWNsZSB0byBmaXJzdCBkYXRhIHZhbGlkIGRlbGF5ICovCiAJdTE2IHJkX2N5Y2xlOwkJLyogVG90YWwgcmVhZCBjeWNsZSB0aW1lICovCiAJdTE2IHdyX2N5Y2xlOwkJLyogVG90YWwgd3JpdGUgY3ljbGUgdGltZSAqLworCisJLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSBvbiBPTUFQMzQzMCAqLworCXUxNiB3cl9hY2Nlc3M7CQkvKiBXUkFDQ0VTU1RJTUUgKi8KKwl1MTYgd3JfZGF0YV9tdXhfYnVzOwkvKiBXUkRBVEFPTkFETVVYQlVTICovCiB9OwogCiBleHRlcm4gdW5zaWduZWQgaW50IGdwbWNfbnNfdG9fdGlja3ModW5zaWduZWQgaW50IHRpbWVfbnMpOworZXh0ZXJuIHVuc2lnbmVkIGludCBncG1jX3RpY2tzX3RvX25zKHVuc2lnbmVkIGludCB0aWNrcyk7CiBleHRlcm4gdW5zaWduZWQgaW50IGdwbWNfcm91bmRfbnNfdG9fdGlja3ModW5zaWduZWQgaW50IHRpbWVfbnMpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ3BtY19nZXRfZmNsa19wZXJpb2Qodm9pZCk7CiAKQEAgLTkyLDUgKzEwMyw2IEBACiBleHRlcm4gdm9pZCBncG1jX2NzX2ZyZWUoaW50IGNzKTsKIGV4dGVybiBpbnQgZ3BtY19jc19zZXRfcmVzZXJ2ZWQoaW50IGNzLCBpbnQgcmVzZXJ2ZWQpOwogZXh0ZXJuIGludCBncG1jX2NzX3Jlc2VydmVkKGludCBjcyk7CitleHRlcm4gdm9pZCBncG1jX2luaXQodm9pZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDA3ZjVkN2YuLjY1ODlkZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTg5LDcgKzg5LDcgQEAKICNkZWZpbmUgRFBMTF9DVEwJCSgweGZmZmVjZjAwKQogCiAvKiBEU1AgY2xvY2sgY29udHJvbC4gTXVzdCB1c2UgX19yYXdfcmVhZHcoKSBhbmQgX19yYXdfd3JpdGV3KCkgd2l0aCB0aGVzZSAqLwotI2RlZmluZSBEU1BfQ09ORklHX1JFR19CQVNFICAgICAoMHhlMTAwODAwMCkKKyNkZWZpbmUgRFNQX0NPTkZJR19SRUdfQkFTRSAgICAgSU9NRU0oMHhlMTAwODAwMCkKICNkZWZpbmUgRFNQX0NLQ1RMCQkoRFNQX0NPTkZJR19SRUdfQkFTRSArIDB4MCkKICNkZWZpbmUgRFNQX0lETEVDVDEJCShEU1BfQ09ORklHX1JFR19CQVNFICsgMHg0KQogI2RlZmluZSBEU1BfSURMRUNUMgkJKERTUF9DT05GSUdfUkVHX0JBU0UgKyAweDgpCkBAIC0yODIsOCArMjgyLDggQEAKIAogI2luY2x1ZGUgIm9tYXA3MzAuaCIKICNpbmNsdWRlICJvbWFwMTUxMC5oIgotI2luY2x1ZGUgIm9tYXAyNHh4LmgiCiAjaW5jbHVkZSAib21hcDE2eHguaCIKKyNpbmNsdWRlICJvbWFwMjR4eC5oIgogI2luY2x1ZGUgIm9tYXAzNHh4LmgiCiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwpAQCAtMzIyLDYgKzMyMiwxNCBAQAogI2luY2x1ZGUgImJvYXJkLTI0MzBzZHAuaCIKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFCisjaW5jbHVkZSAiYm9hcmQtb21hcDNiZWFnbGUuaCIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfT01BUF9MRFAKKyNpbmNsdWRlICJib2FyZC1sZHAuaCIKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX01BQ0hfT01BUF9BUE9MTE9OCiAjaW5jbHVkZSAiYm9hcmQtYXBvbGxvbi5oIgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggMmEzMGI3ZC4uYWRjODNiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaW8uaApAQCAtNTUsMTQgKzU1LDEzIEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKQogCi0jZGVmaW5lIElPX1BIWVMJCTB4RkZGQjAwMDAKLSNkZWZpbmUgSU9fT0ZGU0VUCTB4MDEwMDAwMDAJLyogVmlydHVhbCBJTyA9IDB4ZmVmYjAwMDAgKi8KLSNkZWZpbmUgSU9fU0laRQkJMHg0MDAwMAotI2RlZmluZSBJT19WSVJUCQkoSU9fUEhZUyAtIElPX09GRlNFVCkKLSNkZWZpbmUgSU9fQUREUkVTUyhwYSkJKChwYSkgLSBJT19PRkZTRVQpCi0jZGVmaW5lIE9NQVAxX0lPX0FERFJFU1MocGEpCSgocGEpIC0gSU9fT0ZGU0VUKQotI2RlZmluZSBpb19wMnYocGEpCSgocGEpIC0gSU9fT0ZGU0VUKQotI2RlZmluZSBpb192MnAodmEpCSgodmEpICsgSU9fT0ZGU0VUKQorI2RlZmluZSBJT19QSFlTCQkJMHhGRkZCMDAwMAorI2RlZmluZSBJT19PRkZTRVQJCTB4MDEwMDAwMDAJLyogVmlydHVhbCBJTyA9IDB4ZmVmYjAwMDAgKi8KKyNkZWZpbmUgSU9fU0laRQkJCTB4NDAwMDAKKyNkZWZpbmUgSU9fVklSVAkJCShJT19QSFlTIC0gSU9fT0ZGU0VUKQorI2RlZmluZSBfX0lPX0FERFJFU1MocGEpCSgocGEpIC0gSU9fT0ZGU0VUKQorI2RlZmluZSBfX09NQVAxX0lPX0FERFJFU1MocGEpCSgocGEpIC0gSU9fT0ZGU0VUKQorI2RlZmluZSBpb192MnAodmEpCQkoKHZhKSArIElPX09GRlNFVCkKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKIApAQCAtNzQsNyArNzMsNiBAQAogI2RlZmluZSBMNF8yNFhYX1ZJUlQJMHhkODAwMDAwMAogI2RlZmluZSBMNF8yNFhYX1NJWkUJU1pfMU0JCS8qIDFNQiBvZiAxMjhNQiB1c2VkLCB3YW50IDFNQiBzZWN0ICovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAogI2RlZmluZSBMNF9XS18yNDNYX1BIWVMJCUw0X1dLXzI0M1hfQkFTRQkJLyogMHg0OTAwMDAwMCAqLwogI2RlZmluZSBMNF9XS18yNDNYX1ZJUlQJCTB4ZDkwMDAwMDAKICNkZWZpbmUgTDRfV0tfMjQzWF9TSVpFCQlTWl8xTQpAQCAtODgsMTMgKzg2LDEwIEBACiAjZGVmaW5lIE9NQVAyNDNYX1NNU19WSVJUCTB4RkMwMDAwMDAKICNkZWZpbmUgT01BUDI0M1hfU01TX1NJWkUJU1pfMU0KIAotI2VuZGlmCi0KLSNkZWZpbmUgSU9fT0ZGU0VUCTB4OTAwMDAwMDAKLSNkZWZpbmUgSU9fQUREUkVTUyhwYSkJKChwYSkgKyBJT19PRkZTRVQpCS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KLSNkZWZpbmUgT01BUDJfSU9fQUREUkVTUyhwYSkJKChwYSkgKyBJT19PRkZTRVQpCS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KLSNkZWZpbmUgaW9fcDJ2KHBhKQkoKHBhKSArIElPX09GRlNFVCkJLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLwotI2RlZmluZSBpb192MnAodmEpCSgodmEpIC0gSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCisjZGVmaW5lIElPX09GRlNFVAkJMHg5MDAwMDAwMAorI2RlZmluZSBfX0lPX0FERFJFU1MocGEpCSgocGEpICsgSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCisjZGVmaW5lIF9fT01BUDJfSU9fQUREUkVTUyhwYSkJKChwYSkgKyBJT19PRkZTRVQpCS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KKyNkZWZpbmUgaW9fdjJwKHZhKQkJKCh2YSkgLSBJT19PRkZTRVQpCS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KIAogLyogRFNQICovCiAjZGVmaW5lIERTUF9NRU1fMjRYWF9QSFlTCU9NQVAyNDIwX0RTUF9NRU1fQkFTRQkvKiAweDU4MDAwMDAwICovCkBAIC0xNDksOSArMTQ0LDggQEAKIAogCiAjZGVmaW5lIElPX09GRlNFVAkJMHg5MDAwMDAwMAotI2RlZmluZSBJT19BRERSRVNTKHBhKQkJKChwYSkgKyBJT19PRkZTRVQpLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLwotI2RlZmluZSBPTUFQMl9JT19BRERSRVNTKHBhKQkoKHBhKSArIElPX09GRlNFVCkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCi0jZGVmaW5lIGlvX3AydihwYSkJCSgocGEpICsgSU9fT0ZGU0VUKS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KKyNkZWZpbmUgX19JT19BRERSRVNTKHBhKQkoKHBhKSArIElPX09GRlNFVCkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCisjZGVmaW5lIF9fT01BUDJfSU9fQUREUkVTUyhwYSkJKChwYSkgKyBJT19PRkZTRVQpLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLwogI2RlZmluZSBpb192MnAodmEpCQkoKHZhKSAtIElPX09GRlNFVCkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCiAKIC8qIERTUCAqLwpAQCAtMTY3LDcgKzE2MSwxNCBAQAogCiAjZW5kaWYKIAotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisjZGVmaW5lIElPX0FERFJFU1MocGEpCQlJT01FTShfX0lPX0FERFJFU1MocGEpKQorI2RlZmluZSBPTUFQMV9JT19BRERSRVNTKHBhKQlJT01FTShfX09NQVAxX0lPX0FERFJFU1MocGEpKQorI2RlZmluZSBPTUFQMl9JT19BRERSRVNTKHBhKQlJT01FTShfX09NQVAyX0lPX0FERFJFU1MocGEpKQorCisjaWZkZWYgX19BU1NFTUJMRVJfXworI2RlZmluZSBJT01FTSh4KQkJeAorI2Vsc2UKKyNkZWZpbmUgSU9NRU0oeCkJCSgodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikoeCkpCiAKIC8qCiAgKiBGdW5jdGlvbnMgdG8gYWNjZXNzIHRoZSBPTUFQIElPIHJlZ2lvbgpAQCAtMTc4LDEzICsxNzksMTMgQEAKICAqCSAtIERPIE5PVCB1c2UgaGFyZGNvZGVkIHZpcnR1YWwgYWRkcmVzc2VzIHRvIGFsbG93IGNoYW5naW5nIHRoZQogICoJICAgSU8gYWRkcmVzcyBzcGFjZSBhZ2FpbiBpZiBuZWVkZWQKICAqLwotI2RlZmluZSBvbWFwX3JlYWRiKGEpCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqKUlPX0FERFJFU1MoYSkpCi0jZGVmaW5lIG9tYXBfcmVhZHcoYSkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopSU9fQUREUkVTUyhhKSkKLSNkZWZpbmUgb21hcF9yZWFkbChhKQkJKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICAgKilJT19BRERSRVNTKGEpKQorI2RlZmluZSBvbWFwX3JlYWRiKGEpCQlfX3Jhd19yZWFkYihJT19BRERSRVNTKGEpKQorI2RlZmluZSBvbWFwX3JlYWR3KGEpCQlfX3Jhd19yZWFkdyhJT19BRERSRVNTKGEpKQorI2RlZmluZSBvbWFwX3JlYWRsKGEpCQlfX3Jhd19yZWFkbChJT19BRERSRVNTKGEpKQogCi0jZGVmaW5lIG9tYXBfd3JpdGViKHYsYSkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKilJT19BRERSRVNTKGEpID0gKHYpKQotI2RlZmluZSBvbWFwX3dyaXRldyh2LGEpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopSU9fQUREUkVTUyhhKSA9ICh2KSkKLSNkZWZpbmUgb21hcF93cml0ZWwodixhKQkoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgICAqKUlPX0FERFJFU1MoYSkgPSAodikpCisjZGVmaW5lIG9tYXBfd3JpdGViKHYsYSkJX19yYXdfd3JpdGViKHYsIElPX0FERFJFU1MoYSkpCisjZGVmaW5lIG9tYXBfd3JpdGV3KHYsYSkJX19yYXdfd3JpdGV3KHYsIElPX0FERFJFU1MoYSkpCisjZGVmaW5lIG9tYXBfd3JpdGVsKHYsYSkJX19yYXdfd3JpdGVsKHYsIElPX0FERFJFU1MoYSkpCiAKIGV4dGVybiB2b2lkIG9tYXAxX21hcF9jb21tb25faW8odm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMV9pbml0X2NvbW1vbl9odyh2b2lkKTsKQEAgLTE5Miw2ICsxOTMsMTIgQEAKIGV4dGVybiB2b2lkIG9tYXAyX21hcF9jb21tb25faW8odm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMl9pbml0X2NvbW1vbl9odyh2b2lkKTsKIAorI2RlZmluZSBfX2FyY2hfaW9yZW1hcChwLHMsdCkJb21hcF9pb3JlbWFwKHAscyx0KQorI2RlZmluZSBfX2FyY2hfaW91bm1hcCh2KQlvbWFwX2lvdW5tYXAodikKKwordm9pZCBfX2lvbWVtICpvbWFwX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IHR5cGUpOwordm9pZCBvbWFwX2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCA2MmFhN2RmLi5hMjkyOWFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMTI1LDYgKzEyNSw3IEBACiAjZGVmaW5lIElOVF9VQVJUMgkJKDE1ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF9CVF9NQ1NJMVRYCQkoMTYgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX0JUX01DU0kxUlgJCSgxNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfU09TU0lfTUFUQ0gJCSgxOSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfVVNCX1cyRkMJCSgyMCArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfMVdJUkUJCSgyMSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfT1NfVElNRVIJCSgyMiArIElIMl9CQVNFKQpAQCAtMTc2LDYgKzE3Nyw3IEBACiAjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDE0CSg2MSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfMTYxMF9ETUFfQ0gxNQkoNjIgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfTkFORAkJKDYzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX1NIQTFNRDUJKDkxICsgSUgyX0JBU0UpCiAKIC8qCiAgKiBPTUFQLTczMCBzcGVjaWZpYyBJUlEgbnVtYmVycyBmb3IgaW50ZXJydXB0IGhhbmRsZXIgMgpAQCAtMjYzLDEyICsyNjUsMTggQEAKICNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjEwCTQ2CiAjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIxMQk0NwogI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMTIJNDgKKyNkZWZpbmUgSU5UXzI0WFhfU0hBMU1ENQk1MQorI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1RYCTU0CisjZGVmaW5lIElOVF8yNFhYX01DQlNQNF9JUlFfUlgJNTUKICNkZWZpbmUgSU5UXzI0WFhfSTJDMV9JUlEJNTYKICNkZWZpbmUgSU5UXzI0WFhfSTJDMl9JUlEJNTcKKyNkZWZpbmUgSU5UXzI0WFhfSERRX0lSUQk1OAogI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1RYCTU5CiAjZGVmaW5lIElOVF8yNFhYX01DQlNQMV9JUlFfUlgJNjAKICNkZWZpbmUgSU5UXzI0WFhfTUNCU1AyX0lSUV9UWAk2MgogI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1JYCTYzCisjZGVmaW5lIElOVF8yNFhYX1NQSTFfSVJRCTY1CisjZGVmaW5lIElOVF8yNFhYX1NQSTJfSVJRCTY2CiAjZGVmaW5lIElOVF8yNFhYX1VBUlQxX0lSUQk3MgogI2RlZmluZSBJTlRfMjRYWF9VQVJUMl9JUlEJNzMKICNkZWZpbmUgSU5UXzI0WFhfVUFSVDNfSVJRCTc0CkBAIC0yNzgsNyArMjg2LDU4IEBACiAjZGVmaW5lIElOVF8yNFhYX1VTQl9JUlFfSEdFTgk3OAogI2RlZmluZSBJTlRfMjRYWF9VU0JfSVJRX0hTT0YJNzkKICNkZWZpbmUgSU5UXzI0WFhfVVNCX0lSUV9PVEcJODAKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1A1X0lSUV9UWAk4MQorI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDVfSVJRX1JYCTgyCiAjZGVmaW5lIElOVF8yNFhYX01NQ19JUlEJODMKKyNkZWZpbmUgSU5UXzI0WFhfTU1DMl9JUlEJODYKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1AzX0lSUV9UWAk4OQorI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDNfSVJRX1JYCTkwCisjZGVmaW5lIElOVF8yNFhYX1NQSTNfSVJRCTkxCisKKyNkZWZpbmUgSU5UXzI0M1hfTUNCU1AyX0lSUQkxNgorI2RlZmluZSBJTlRfMjQzWF9NQ0JTUDNfSVJRCTE3CisjZGVmaW5lIElOVF8yNDNYX01DQlNQNF9JUlEJMTgKKyNkZWZpbmUgSU5UXzI0M1hfTUNCU1A1X0lSUQkxOQorI2RlZmluZSBJTlRfMjQzWF9NQ0JTUDFfSVJRCTY0CisjZGVmaW5lIElOVF8yNDNYX0hTX1VTQl9NQwk5MgorI2RlZmluZSBJTlRfMjQzWF9IU19VU0JfRE1BCTkzCisjZGVmaW5lIElOVF8yNDNYX0NBUktJVF9JUlEJOTQKKworI2RlZmluZSBJTlRfMzRYWF9CRU5DSF9NUFVfRU1VTAkzCisjZGVmaW5lIElOVF8zNFhYX1NUX01DQlNQMl9JUlEJNAorI2RlZmluZSBJTlRfMzRYWF9TVF9NQ0JTUDNfSVJRCTUKKyNkZWZpbmUgSU5UXzM0WFhfU1NNX0FCT1JUX0lSUQk2CisjZGVmaW5lIElOVF8zNFhYX1NZU19OSVJRCTcKKyNkZWZpbmUgSU5UXzM0WFhfRDJEX0ZXX0lSUQk4CisjZGVmaW5lIElOVF8zNFhYX1BSQ01fTVBVX0lSUQkxMQorI2RlZmluZSBJTlRfMzRYWF9NQ0JTUDFfSVJRCTE2CisjZGVmaW5lIElOVF8zNFhYX01DQlNQMl9JUlEJMTcKKyNkZWZpbmUgSU5UXzM0WFhfTUNCU1AzX0lSUQkyMgorI2RlZmluZSBJTlRfMzRYWF9NQ0JTUDRfSVJRCTIzCisjZGVmaW5lIElOVF8zNFhYX0NBTV9JUlEJMjQKKyNkZWZpbmUgSU5UXzM0WFhfTUNCU1A1X0lSUQkyNworI2RlZmluZSBJTlRfMzRYWF9HUElPX0JBTksxCTI5CisjZGVmaW5lIElOVF8zNFhYX0dQSU9fQkFOSzIJMzAKKyNkZWZpbmUgSU5UXzM0WFhfR1BJT19CQU5LMwkzMQorI2RlZmluZSBJTlRfMzRYWF9HUElPX0JBTks0CTMyCisjZGVmaW5lIElOVF8zNFhYX0dQSU9fQkFOSzUJMzMKKyNkZWZpbmUgSU5UXzM0WFhfR1BJT19CQU5LNgkzNAorI2RlZmluZSBJTlRfMzRYWF9VU0lNX0lSUQkzNQorI2RlZmluZSBJTlRfMzRYWF9XRFQzX0lSUQkzNgorI2RlZmluZSBJTlRfMzRYWF9TUEk0X0lSUQk0OAorI2RlZmluZSBJTlRfMzRYWF9TSEExTUQ1Ml9JUlEJNDkKKyNkZWZpbmUgSU5UXzM0WFhfRlBLQV9SRUFEWV9JUlEJNTAKKyNkZWZpbmUgSU5UXzM0WFhfU0hBMU1ENTFfSVJRCTUxCisjZGVmaW5lIElOVF8zNFhYX1JOR19JUlEJNTIKKyNkZWZpbmUgSU5UXzM0WFhfSTJDM19JUlEJNjEKKyNkZWZpbmUgSU5UXzM0WFhfRlBLQV9FUlJPUl9JUlEJNjQKKyNkZWZpbmUgSU5UXzM0WFhfUEJJQVNfSVJRCTc1CisjZGVmaW5lIElOVF8zNFhYX09IQ0lfSVJRCTc2CisjZGVmaW5lIElOVF8zNFhYX0VIQ0lfSVJRCTc3CisjZGVmaW5lIElOVF8zNFhYX1RMTF9JUlEJNzgKKyNkZWZpbmUgSU5UXzM0WFhfUEFSVEhBU0hfSVJRCTc5CisjZGVmaW5lIElOVF8zNFhYX01NQzNfSVJRCTk0CisjZGVmaW5lIElOVF8zNFhYX0dQVDEyX0lSUQk5NQogCiAjZGVmaW5lCUlOVF8zNFhYX0JFTkNIX01QVV9FTVVMCTMKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tY2JzcC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tY2JzcC5oCmluZGV4IDhmZGI5NWUuLjZhMGQxYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWNic3AuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21jYnNwLmgKQEAgLTQzLDkgKzQzLDE1IEBACiAKICNkZWZpbmUgT01BUDI0WFhfTUNCU1AxX0JBU0UJMHg0ODA3NDAwMAogI2RlZmluZSBPTUFQMjRYWF9NQ0JTUDJfQkFTRQkweDQ4MDc2MDAwCisjZGVmaW5lIE9NQVAyNDMwX01DQlNQM19CQVNFCTB4NDgwOGMwMDAKKyNkZWZpbmUgT01BUDI0MzBfTUNCU1A0X0JBU0UJMHg0ODA4ZTAwMAorI2RlZmluZSBPTUFQMjQzMF9NQ0JTUDVfQkFTRQkweDQ4MDk2MDAwCiAKICNkZWZpbmUgT01BUDM0WFhfTUNCU1AxX0JBU0UJMHg0ODA3NDAwMAogI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDJfQkFTRQkweDQ5MDIyMDAwCisjZGVmaW5lIE9NQVAzNFhYX01DQlNQM19CQVNFCTB4NDkwMjQwMDAKKyNkZWZpbmUgT01BUDM0WFhfTUNCU1A0X0JBU0UJMHg0OTAyNjAwMAorI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDVfQkFTRQkweDQ4MDk2MDAwCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCiAKQEAgLTgxLDkgKzg3LDYgQEAKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENFUkcJMHgzQQogI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0VSSAkweDNDCiAKLSNkZWZpbmUgT01BUF9NQVhfTUNCU1BfQ09VTlQJMwotI2RlZmluZSBNQVhfTUNCU1BfQ0xPQ0tTCTMKLQogI2RlZmluZSBBVURJT19NQ0JTUF9EQVRBV1JJVEUJKE9NQVAxNTEwX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSMSkKICNkZWZpbmUgQVVESU9fTUNCU1BfREFUQVJFQUQJKE9NQVAxNTEwX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSMSkKIApAQCAtOTEsMTIgKzk0LDE0IEBACiAjZGVmaW5lIEFVRElPX0RNQV9UWAkJT01BUF9ETUFfTUNCU1AxX1RYCiAjZGVmaW5lIEFVRElPX0RNQV9SWAkJT01BUF9ETUFfTUNCU1AxX1JYCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RSUjIJMHgwMAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19EUlIxCTB4MDQKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFhSMgkweDA4CiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RYUjEJMHgwQworI2RlZmluZSBPTUFQX01DQlNQX1JFR19EUlIJMHgwMAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19EWFIJMHgwOAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19TUENSMgkweDEwCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1NQQ1IxCTB4MTQKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNSMgkweDE4CkBAIC0xMjQsOSArMTI5LDkgQEAKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNFUkgJMHg3MAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0VSRwkweDc0CiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDRVJICTB4NzgKLQotI2RlZmluZSBPTUFQX01BWF9NQ0JTUF9DT1VOVAkyCi0jZGVmaW5lIE1BWF9NQ0JTUF9DTE9DS1MJMgorI2RlZmluZSBPTUFQX01DQlNQX1JFR19TWVNDT04JMHg4QworI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0NSCTB4QUMKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfUkNDUgkweEIwCiAKICNkZWZpbmUgQVVESU9fTUNCU1BfREFUQVdSSVRFCShPTUFQMjRYWF9NQ0JTUDJfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUjEpCiAjZGVmaW5lIEFVRElPX01DQlNQX0RBVEFSRUFECShPTUFQMjRYWF9NQ0JTUDJfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUjEpCkBAIC0xMzcsMTAgKzE0Miw2IEBACiAKICNlbmRpZgogCi0jZGVmaW5lIE9NQVBfTUNCU1BfUkVBRChiYXNlLCByZWcpCQlfX3Jhd19yZWFkdygoYmFzZSkgKyBPTUFQX01DQlNQX1JFR18jI3JlZykKLSNkZWZpbmUgT01BUF9NQ0JTUF9XUklURShiYXNlLCByZWcsIHZhbCkJX19yYXdfd3JpdGV3KCh2YWwpLCAoYmFzZSkgKyBPTUFQX01DQlNQX1JFR18jI3JlZykKLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgU1BDUjEgYml0IGRlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBSUlNUCQkJMHgwMDAxCiAjZGVmaW5lIFJSRFkJCQkweDAwMDIKQEAgLTE1MSw2ICsxNTIsNyBAQAogI2RlZmluZSBEWEVOQQkJCTB4MDA4MAogI2RlZmluZSBDTEtTVFAodmFsdWUpCQkoKHZhbHVlKTw8MTEpCS8qIGJpdHMgMTE6MTIgKi8KICNkZWZpbmUgUkpVU1QodmFsdWUpCQkoKHZhbHVlKTw8MTMpCS8qIGJpdHMgMTM6MTQgKi8KKyNkZWZpbmUgQUxCCQkJMHg4MDAwCiAjZGVmaW5lIERMQgkJCTB4ODAwMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgU1BDUjIgYml0IGRlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjI4LDYgKzIzMCwxNyBAQAogI2RlZmluZSBYUEFCTEsodmFsdWUpCQkoKHZhbHVlKTw8NSkJLyogQml0cyA1OjYgKi8KICNkZWZpbmUgWFBCQkxLKHZhbHVlKQkJKCh2YWx1ZSk8PDcpCS8qIEJpdHMgNzo4ICovCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKiBNY0JTUCBYQ0NSIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBESUxCCQkJMHgwMDIwCisjZGVmaW5lIFhETUFFTgkJCTB4MDAwOAorI2RlZmluZSBYRElTQUJMRQkJMHgwMDAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFJDQ1IgYml0IGRlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJETUFFTgkJCTB4MDAwOAorI2RlZmluZSBSRElTQUJMRQkJMHgwMDAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFNZU0NPTkZJRyBiaXQgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNPRlRSU1QJCQkweDAwMDIKIAogLyogd2UgZG9uJ3QgZG8gbXVsdGljaGFubmVsIGZvciBub3cgKi8KIHN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcgewpAQCAtMjYwLDYgKzI3Myw4IEBACiAJT01BUF9NQ0JTUDEgPSAwLAogCU9NQVBfTUNCU1AyLAogCU9NQVBfTUNCU1AzLAorCU9NQVBfTUNCU1A0LAorCU9NQVBfTUNCU1A1CiB9IG9tYXBfbWNic3BfaWQ7CiAKIHR5cGVkZWYgaW50IF9fYml0d2lzZSBvbWFwX21jYnNwX2lvX3R5cGVfdDsKQEAgLTMxMSwxMiArMzI2LDEwIEBACiBzdHJ1Y3Qgb21hcF9tY2JzcF9vcHMgewogCXZvaWQgKCpyZXF1ZXN0KSh1bnNpZ25lZCBpbnQpOwogCXZvaWQgKCpmcmVlKSh1bnNpZ25lZCBpbnQpOwotCWludCAoKmNoZWNrKSh1bnNpZ25lZCBpbnQpOwogfTsKIAogc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSB7CiAJdW5zaWduZWQgbG9uZyBwaHlzX2Jhc2U7Ci0JdTMyIHZpcnRfYmFzZTsKIAl1OCBkbWFfcnhfc3luYywgZG1hX3R4X3N5bmM7CiAJdTE2IHJ4X2lycSwgdHhfaXJxOwogCXN0cnVjdCBvbWFwX21jYnNwX29wcyAqb3BzOwpAQCAtMzI2LDcgKzMzOSw3IEBACiBzdHJ1Y3Qgb21hcF9tY2JzcCB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOwotCXUzMiBpb19iYXNlOworCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKIAl1OCBpZDsKIAl1OCBmcmVlOwogCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggcnhfd29yZF9sZW5ndGg7CkBAIC0zNTQsNiArMzY3LDggQEAKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgY2xrICpjbGs7CiB9OworZXh0ZXJuIHN0cnVjdCBvbWFwX21jYnNwICoqbWNic3BfcHRyOworZXh0ZXJuIGludCBvbWFwX21jYnNwX2NvdW50OwogCiBpbnQgb21hcF9tY2JzcF9pbml0KHZvaWQpOwogdm9pZCBvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhICpjb25maWcsCkBAIC0zNzgsNSArMzkzLDYgQEAKIC8qIFBvbGxlZCByZWFkL3dyaXRlIGZ1bmN0aW9ucyAqLwogaW50IG9tYXBfbWNic3BfcG9sbHJlYWQodW5zaWduZWQgaW50IGlkLCB1MTYgKiBidWYpOwogaW50IG9tYXBfbWNic3BfcG9sbHdyaXRlKHVuc2lnbmVkIGludCBpZCwgdTE2IGJ1Zik7CitpbnQgb21hcF9tY2JzcF9zZXRfaW9fdHlwZSh1bnNpZ25lZCBpbnQgaWQsIG9tYXBfbWNic3BfaW9fdHlwZV90IGlvX3R5cGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGEzMjVjYWYuLmQ0MGNhYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMzgsNyArMzgsNyBAQAogICovCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4MTAwMDAwMDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ODAwMDAwMDApCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmgKaW5kZXggNjE0YjJjMS4uNmJiZjE3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oCkBAIC0xMjUsMjAgKzEyNSw2NCBAQAogCS5wdV9wZF92YWwJPSBwdWxsX21vZGUsCQkJCVwKIH0sCiAKKy8qIDI0eHgvMzR4eCBtdXggYml0IGRlZmluZXMgKi8KKyNkZWZpbmUgT01BUDJfUFVMTF9FTkEJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAyX1BVTExfVVAJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAyX0FMVEVMRUNUUklDQUxTRUwJKDEgPDwgNSkKIAotI2RlZmluZSBQVUxMX0RJU0FCTEVECTAKLSNkZWZpbmUgUFVMTF9FTkFCTEVECTEKKy8qIDM0eHggc3BlY2lmaWMgbXV4IGJpdCBkZWZpbmVzICovCisjZGVmaW5lIE9NQVAzX0lOUFVUX0VOCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQM19PRkZfRU4JCSgxIDw8IDkpCisjZGVmaW5lIE9NQVAzX09GRk9VVF9FTgkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVAzX09GRk9VVF9WQUwJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAzX09GRl9QVUxMX0VOCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQM19PRkZfUFVMTF9VUAkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDNfV0FLRVVQX0VOCQkoMSA8PCAxNCkKIAotI2RlZmluZSBQVUxMX0RPV04JMAotI2RlZmluZSBQVUxMX1VQCQkxCisvKiAzNHh4IG11eCBtb2RlIG9wdGlvbnMgZm9yIGVhY2ggcGluLiBTZWUgVFJNIGZvciBvcHRpb25zICovCisjZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFMAkwCisjZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFMQkxCisjZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFMgkyCisjZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFMwkzCisjZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFNAk0CisjZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFNQk1CisjZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFNgk2CisjZGVmaW5lCU9NQVAzNFhYX01VWF9NT0RFNwk3CisKKy8qIDM0eHggYWN0aXZlIHBpbiBzdGF0ZXMgKi8KKyNkZWZpbmUgT01BUDM0WFhfUElOX09VVFBVVAkJMAorI2RlZmluZSBPTUFQMzRYWF9QSU5fSU5QVVQJCU9NQVAzX0lOUFVUX0VOCisjZGVmaW5lIE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVAJKE9NQVAyX1BVTExfRU5BIHwgT01BUDNfSU5QVVRfRU4gXAorCQkJCQkJfCBPTUFQMl9QVUxMX1VQKQorI2RlZmluZSBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04JKE9NQVAyX1BVTExfRU5BIHwgT01BUDNfSU5QVVRfRU4pCisKKy8qIDM0eHggb2ZmIG1vZGUgc3RhdGVzICovCisjZGVmaW5lIE9NQVAzNFhYX1BJTl9PRkZfTk9ORSAgICAgICAgICAgMAorI2RlZmluZSBPTUFQMzRYWF9QSU5fT0ZGX09VVFBVVF9ISUdICShPTUFQM19PRkZfRU4gfCBPTUFQM19PRkZPVVRfRU4gXAorCQkJCQkJfCBPTUFQM19PRkZPVVRfVkFMKQorI2RlZmluZSBPTUFQMzRYWF9QSU5fT0ZGX09VVFBVVF9MT1cJKE9NQVAzX09GRl9FTiB8IE9NQVAzX09GRk9VVF9FTikKKyNkZWZpbmUgT01BUDM0WFhfUElOX09GRl9JTlBVVF9QVUxMVVAJKE9NQVAzX09GRl9FTiB8IE9NQVAzX09GRl9QVUxMX0VOIFwKKwkJCQkJCXwgT01BUDNfT0ZGX1BVTExfVVApCisjZGVmaW5lIE9NQVAzNFhYX1BJTl9PRkZfSU5QVVRfUFVMTERPV04JKE9NQVAzX09GRl9FTiB8IE9NQVAzX09GRl9QVUxMX0VOKQorI2RlZmluZSBPTUFQMzRYWF9QSU5fT0ZGX1dBS0VVUEVOQUJMRQlPTUFQM19XQUtFVVBfRU4KKworI2RlZmluZSBNVVhfQ0ZHXzM0WFgoZGVzYywgcmVnX29mZnNldCwgbXV4X3ZhbHVlKSB7CQlcCisJLm5hbWUJCT0gZGVzYywJCQkJCVwKKwkuZGVidWcJCT0gMCwJCQkJCVwKKwkubXV4X3JlZwk9IHJlZ19vZmZzZXQsCQkJCVwKKwkubXV4X3ZhbAk9IG11eF92YWx1ZQkJCQlcCit9LAogCiBzdHJ1Y3QgcGluX2NvbmZpZyB7Ci0JY2hhciAqbmFtZTsKLQl1bnNpZ25lZCBjaGFyIGJ1c3k7Ci0JdW5zaWduZWQgY2hhciBkZWJ1ZzsKKwljaGFyIAkJCSpuYW1lOworCWNvbnN0IHVuc2lnbmVkIGludCAJbXV4X3JlZzsKKwl1bnNpZ25lZCBjaGFyCQlkZWJ1ZzsKIAotCWNvbnN0IGNoYXIgKm11eF9yZWdfbmFtZTsKLQljb25zdCB1bnNpZ25lZCBpbnQgbXV4X3JlZzsKKyNpZglkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorCXUxNgkJCW11eF92YWw7IC8qIFdha2UtdXAsIG9mZiBtb2RlLCBwdWxsLCBtdXggbW9kZSAqLworI2VuZGlmCisKKyNpZglkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQogCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFza19vZmZzZXQ7CiAJY29uc3QgdW5zaWduZWQgY2hhciBtYXNrOwogCkBAIC0xNTAsNiArMTk0LDEyIEBACiAJY29uc3QgY2hhciAqcHVfcGRfbmFtZTsKIAljb25zdCB1bnNpZ25lZCBpbnQgcHVfcGRfcmVnOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgcHVfcGRfdmFsOworI2VuZGlmCisKKyNpZglkZWZpbmVkKENPTkZJR19PTUFQX01VWF9ERUJVRykgfHwgZGVmaW5lZChDT05GSUdfT01BUF9NVVhfV0FSTklOR1MpCisJY29uc3QgY2hhciAqbXV4X3JlZ19uYW1lOworI2VuZGlmCisKIH07CiAKIGVudW0gb21hcDczMF9pbmRleCB7CkBAIC01OTMsNiArNjQzLDExNCBAQAogCiB9OwogCitlbnVtIG9tYXAzNHh4X2luZGV4IHsKKwkvKiAzNHh4IEkyQyAqLworCUsyMV8zNFhYX0kyQzFfU0NMLAorCUoyMV8zNFhYX0kyQzFfU0RBLAorCUFGMTVfMzRYWF9JMkMyX1NDTCwKKwlBRTE1XzM0WFhfSTJDMl9TREEsCisJQUYxNF8zNFhYX0kyQzNfU0NMLAorCUFHMTRfMzRYWF9JMkMzX1NEQSwKKwlBRDI2XzM0WFhfSTJDNF9TQ0wsCisJQUUyNl8zNFhYX0kyQzRfU0RBLAorCisJLyogUEhZIC0gSFNVU0I6IDEyLXBpbiBVTFBJIFBIWTogUG9ydCAxKi8KKwlZOF8zNDMwX1VTQjFIU19QSFlfQ0xLLAorCVk5XzM0MzBfVVNCMUhTX1BIWV9TVFAsCisJQUExNF8zNDMwX1VTQjFIU19QSFlfRElSLAorCUFBMTFfMzQzMF9VU0IxSFNfUEhZX05YVCwKKwlXMTNfMzQzMF9VU0IxSFNfUEhZX0RBVEEwLAorCVcxMl8zNDMwX1VTQjFIU19QSFlfREFUQTEsCisJVzExXzM0MzBfVVNCMUhTX1BIWV9EQVRBMiwKKwlZMTFfMzQzMF9VU0IxSFNfUEhZX0RBVEEzLAorCVc5XzM0MzBfVVNCMUhTX1BIWV9EQVRBNCwKKwlZMTJfMzQzMF9VU0IxSFNfUEhZX0RBVEE1LAorCVc4XzM0MzBfVVNCMUhTX1BIWV9EQVRBNiwKKwlZMTNfMzQzMF9VU0IxSFNfUEhZX0RBVEE3LAorCisJLyogUEhZIC0gSFNVU0I6IDEyLXBpbiBVTFBJIFBIWTogUG9ydCAyKi8KKwlBQThfMzQzMF9VU0IySFNfUEhZX0NMSywKKwlBQTEwXzM0MzBfVVNCMkhTX1BIWV9TVFAsCisJQUE5XzM0MzBfVVNCMkhTX1BIWV9ESVIsCisJQUIxMV8zNDMwX1VTQjJIU19QSFlfTlhULAorCUFCMTBfMzQzMF9VU0IySFNfUEhZX0RBVEEwLAorCUFCOV8zNDMwX1VTQjJIU19QSFlfREFUQTEsCisJVzNfMzQzMF9VU0IySFNfUEhZX0RBVEEyLAorCVQ0XzM0MzBfVVNCMkhTX1BIWV9EQVRBMywKKwlUM18zNDMwX1VTQjJIU19QSFlfREFUQTQsCisJUjNfMzQzMF9VU0IySFNfUEhZX0RBVEE1LAorCVI0XzM0MzBfVVNCMkhTX1BIWV9EQVRBNiwKKwlUMl8zNDMwX1VTQjJIU19QSFlfREFUQTcsCisKKworCS8qIFRMTCAtIEhTVVNCOiAxMi1waW4gVExMIFBvcnQgMSovCisJWThfMzQzMF9VU0IxSFNfVExMX0NMSywKKwlZOV8zNDMwX1VTQjFIU19UTExfU1RQLAorCUFBMTRfMzQzMF9VU0IxSFNfVExMX0RJUiwKKwlBQTExXzM0MzBfVVNCMUhTX1RMTF9OWFQsCisJVzEzXzM0MzBfVVNCMUhTX1RMTF9EQVRBMCwKKwlXMTJfMzQzMF9VU0IxSFNfVExMX0RBVEExLAorCVcxMV8zNDMwX1VTQjFIU19UTExfREFUQTIsCisJWTExXzM0MzBfVVNCMUhTX1RMTF9EQVRBMywKKwlXOV8zNDMwX1VTQjFIU19UTExfREFUQTQsCisJWTEyXzM0MzBfVVNCMUhTX1RMTF9EQVRBNSwKKwlXOF8zNDMwX1VTQjFIU19UTExfREFUQTYsCisJWTEzXzM0MzBfVVNCMUhTX1RMTF9EQVRBNywKKworCS8qIFRMTCAtIEhTVVNCOiAxMi1waW4gVExMIFBvcnQgMiovCisJQUE4XzM0MzBfVVNCMkhTX1RMTF9DTEssCisJQUExMF8zNDMwX1VTQjJIU19UTExfU1RQLAorCUFBOV8zNDMwX1VTQjJIU19UTExfRElSLAorCUFCMTFfMzQzMF9VU0IySFNfVExMX05YVCwKKwlBQjEwXzM0MzBfVVNCMkhTX1RMTF9EQVRBMCwKKwlBQjlfMzQzMF9VU0IySFNfVExMX0RBVEExLAorCVczXzM0MzBfVVNCMkhTX1RMTF9EQVRBMiwKKwlUNF8zNDMwX1VTQjJIU19UTExfREFUQTMsCisJVDNfMzQzMF9VU0IySFNfVExMX0RBVEE0LAorCVIzXzM0MzBfVVNCMkhTX1RMTF9EQVRBNSwKKwlSNF8zNDMwX1VTQjJIU19UTExfREFUQTYsCisJVDJfMzQzMF9VU0IySFNfVExMX0RBVEE3LAorCisJLyogVExMIC0gSFNVU0I6IDEyLXBpbiBUTEwgUG9ydCAzKi8KKwlBQTZfMzQzMF9VU0IzSFNfVExMX0NMSywKKwlBQjNfMzQzMF9VU0IzSFNfVExMX1NUUCwKKwlBQTNfMzQzMF9VU0IzSFNfVExMX0RJUiwKKwlZM18zNDMwX1VTQjNIU19UTExfTlhULAorCUFBNV8zNDMwX1VTQjNIU19UTExfREFUQTAsCisJWTRfMzQzMF9VU0IzSFNfVExMX0RBVEExLAorCVk1XzM0MzBfVVNCM0hTX1RMTF9EQVRBMiwKKwlXNV8zNDMwX1VTQjNIU19UTExfREFUQTMsCisJQUIxMl8zNDMwX1VTQjNIU19UTExfREFUQTQsCisJQUIxM18zNDMwX1VTQjNIU19UTExfREFUQTUsCisJQUExM18zNDMwX1VTQjNIU19UTExfREFUQTYsCisJQUExMl8zNDMwX1VTQjNIU19UTExfREFUQTcsCisKKwkvKiBQSFkgRlNVU0I6IEZTIFNlcmlhbCBmb3IgUG9ydCAxIChtdWx0aXBsZSBQSFkgbW9kZXMgc3VwcG9ydGVkKSAqLworCUFGMTBfMzQzMF9VU0IxRlNfUEhZX01NMV9SWERQLAorCUFHOV8zNDMwX1VTQjFGU19QSFlfTU0xX1JYRE0sCisJVzEzXzM0MzBfVVNCMUZTX1BIWV9NTTFfUlhSQ1YsCisJVzEyXzM0MzBfVVNCMUZTX1BIWV9NTTFfVFhTRTAsCisJVzExXzM0MzBfVVNCMUZTX1BIWV9NTTFfVFhEQVQsCisJWTExXzM0MzBfVVNCMUZTX1BIWV9NTTFfVFhFTl9OLAorCisJLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMiAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KKwlBRjdfMzQzMF9VU0IyRlNfUEhZX01NMl9SWERQLAorCUFIN18zNDMwX1VTQjJGU19QSFlfTU0yX1JYRE0sCisJQUIxMF8zNDMwX1VTQjJGU19QSFlfTU0yX1JYUkNWLAorCUFCOV8zNDMwX1VTQjJGU19QSFlfTU0yX1RYU0UwLAorCVczXzM0MzBfVVNCMkZTX1BIWV9NTTJfVFhEQVQsCisJVDRfMzQzMF9VU0IyRlNfUEhZX01NMl9UWEVOX04sCisKKwkvKiBQSFkgRlNVU0I6IEZTIFNlcmlhbCBmb3IgUG9ydCAzIChtdWx0aXBsZSBQSFkgbW9kZXMgc3VwcG9ydGVkKSAqLworCUFIM18zNDMwX1VTQjNGU19QSFlfTU0zX1JYRFAsCisJQUUzXzM0MzBfVVNCM0ZTX1BIWV9NTTNfUlhETSwKKwlBRDFfMzQzMF9VU0IzRlNfUEhZX01NM19SWFJDViwKKwlBRTFfMzQzMF9VU0IzRlNfUEhZX01NM19UWFNFMCwKKwlBRDJfMzQzMF9VU0IzRlNfUEhZX01NM19UWERBVCwKKwlBQzFfMzQzMF9VU0IzRlNfUEhZX01NM19UWEVOX04sCisKK307CisKIHN0cnVjdCBvbWFwX211eF9jZmcgewogCXN0cnVjdCBwaW5fY29uZmlnCSpwaW5zOwogCXVuc2lnbmVkIGxvbmcJCXNpemU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAxNTEwLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAxNTEwLmgKaW5kZXggNTA1YTM4YS4uZDI0MDA0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMTUxMC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDE1MTAuaApAQCAtNDQsNSArNDQsNyBAQAogI2RlZmluZSBPTUFQMTUxMF9EU1BSRUdfU0laRQlTWl8xMjhLCiAjZGVmaW5lIE9NQVAxNTEwX0RTUFJFR19TVEFSVAkweEUxMDAwMDAwCiAKKyNkZWZpbmUgT01BUDE1MTBfRFNQX01NVV9CQVNFCSgweGZmZmVkMjAwKQorCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUDE1WFhfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAxNnh4LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAxNnh4LmgKaW5kZXggYzZjOTNhZi4uMGU2OWI1MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMTZ4eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDE2eHguaApAQCAtNDQsNiArNDQsMTEgQEAKICNkZWZpbmUgT01BUDE2WFhfRFNQUkVHX1NJWkUJU1pfMTI4SwogI2RlZmluZSBPTUFQMTZYWF9EU1BSRUdfU1RBUlQJMHhFMTAwMDAwMAogCisjZGVmaW5lIE9NQVAxNlhYX1NFQ19CQVNFCTB4RkZGRTQwMDAKKyNkZWZpbmUgT01BUDE2WFhfU0VDX0RFUwkoT01BUDE2WFhfU0VDX0JBU0UgKyAweDAwMDApCisjZGVmaW5lIE9NQVAxNlhYX1NFQ19TSEExTUQ1CShPTUFQMTZYWF9TRUNfQkFTRSArIDB4MDgwMCkKKyNkZWZpbmUgT01BUDE2WFhfU0VDX1JORwkoT01BUDE2WFhfU0VDX0JBU0UgKyAweDEwMDApCisKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEludGVycnVwdHMKQEAgLTE5MCw3ICsxOTUsNyBAQAogI2RlZmluZSBXU1BSX0RJU0FCTEVfMCAgICAgICAgICgweDAwMDBhYWFhKQogI2RlZmluZSBXU1BSX0RJU0FCTEVfMSAgICAgICAgICgweDAwMDA1NTU1KQogCi0vKiBNYWlsYm94ICovCisjZGVmaW5lIE9NQVAxNlhYX0RTUF9NTVVfQkFTRQkoMHhmZmZlZDIwMCkKICNkZWZpbmUgT01BUDE2WFhfTUFJTEJPWF9CQVNFCSgweGZmZmNmMDAwKQogCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUDE2WFhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMjR4eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMjR4eC5oCmluZGV4IGJiODMxOWQuLjI0MzM1ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDI0eHguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAyNHh4LmgKQEAgLTM5LDcgKzM5LDYgQEAKIC8qIGludGVycnVwdCBjb250cm9sbGVyICovCiAjZGVmaW5lIE9NQVAyNFhYX0lDX0JBU0UJKEw0XzI0WFhfQkFTRSArIDB4ZmUwMDApCiAjZGVmaW5lIE9NQVAyNFhYX0lWQV9JTlRDX0JBU0UJMHg0MDAwMDAwMAotI2RlZmluZSBJUlFfU0lSX0lSUQkJMHgwMDQwCiAKICNkZWZpbmUgT01BUDI0MjBfQ1RSTF9CQVNFCUw0XzI0WFhfQkFTRQogI2RlZmluZSBPTUFQMjQyMF8zMktTWU5DVF9CQVNFCShMNF8yNFhYX0JBU0UgKyAweDQwMDApCkBAIC00OCw2ICs0Nyw3IEBACiAjZGVmaW5lIE9NQVAyNDIwX1BSTV9CQVNFCU9NQVAyNDIwX0NNX0JBU0UKICNkZWZpbmUgT01BUDI0MjBfU0RSQ19CQVNFCShMM18yNFhYX0JBU0UgKyAweDkwMDApCiAjZGVmaW5lIE9NQVAyNDIwX1NNU19CQVNFCTB4NjgwMDgwMDAKKyNkZWZpbmUgT01BUDI0MjBfR1BNQ19CQVNFCTB4NjgwMGEwMDAKIAogI2RlZmluZSBPTUFQMjQzMF8zMktTWU5DVF9CQVNFCShMNF9XS18yNDNYX0JBU0UgKyAweDIwMDAwKQogI2RlZmluZSBPTUFQMjQzMF9QUkNNX0JBU0UJKEw0X1dLXzI0M1hfQkFTRSArIDB4NjAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcGZiLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXBmYi5oCmluZGV4IGNhZTAzN2QuLmVjNjdmYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcGZiLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwZmIuaApAQCAtNjIsNiArNjIsNyBAQAogI2RlZmluZSBPTUFQRkJfQ0FQU19XSU5ET1dfUElYRUxfRE9VQkxFCTB4MDAwMTAwMDAKICNkZWZpbmUgT01BUEZCX0NBUFNfV0lORE9XX1NDQUxFCTB4MDAwMjAwMDAKICNkZWZpbmUgT01BUEZCX0NBUFNfV0lORE9XX09WRVJMQVkJMHgwMDA0MDAwMAorI2RlZmluZSBPTUFQRkJfQ0FQU19XSU5ET1dfUk9UQVRFCTB4MDAwODAwMDAKICNkZWZpbmUgT01BUEZCX0NBUFNfU0VUX0JBQ0tMSUdIVAkweDAxMDAwMDAwCiAKIC8qIFZhbHVlcyBmcm9tIERTUCBtdXN0IG1hcCB0byBsb3dlciAxNi1iaXRzICovCkBAIC0zMDUsNiArMzA2LDcgQEAKIAkJCQkJICAgaW50IHNjcmVlbl93aWR0aCwKIAkJCQkJICAgaW50IHBvc194LCBpbnQgcG9zX3ksIGludCB3aWR0aCwKIAkJCQkJICAgaW50IGhlaWdodCwgaW50IGNvbG9yX21vZGUpOworCWludAkJKCpzZXRfcm90YXRlKQkgIChpbnQgYW5nbGUpOwogCWludAkJKCpzZXR1cF9tZW0pCSAgKGludCBwbGFuZSwgc2l6ZV90IHNpemUsCiAJCQkJCSAgIGludCBtZW1fdHlwZSwgdW5zaWduZWQgbG9uZyAqcGFkZHIpOwogCWludAkJKCptbWFwKQkJICAoc3RydWN0IGZiX2luZm8gKmluZm8sCkBAIC0zNzQsNiArMzc2LDcgQEAKIGV4dGVybiBzdHJ1Y3QgbGNkX2N0cmwgb21hcDJfZGlzcF9jdHJsOwogI2VuZGlmCiAKK2V4dGVybiB2b2lkIG9tYXBmYl9yZXNlcnZlX3NkcmFtKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcGZiX3JlZ2lzdGVyX3BhbmVsKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKTsKIGV4dGVybiB2b2lkIG9tYXBmYl93cml0ZV9maXJzdF9waXhlbChzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYsIHUxNiBwaXh2YWwpOwogZXh0ZXJuIHZvaWQgb21hcGZiX25vdGlmeV9jbGllbnRzKHN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb25lbmFuZC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbmVuYW5kLmgKaW5kZXggZDU3ZjIwMi4uNDY0OWQzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbmVuYW5kLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbmVuYW5kLmgKQEAgLTE2LDYgKzE2LDEwIEBACiAJaW50CQkJZ3Bpb19pcnE7CiAJc3RydWN0IG10ZF9wYXJ0aXRpb24JKnBhcnRzOwogCWludAkJCW5yX3BhcnRzOwotCWludCAgICAgICAgICAgICAgICAgICAgICgqb25lbmFuZF9zZXR1cCkodm9pZCBfX2lvbWVtICopOworCWludCAgICAgICAgICAgICAgICAgICAgICgqb25lbmFuZF9zZXR1cCkodm9pZCBfX2lvbWVtICosIGludCBmcmVxKTsKIAlpbnQJCQlkbWFfY2hhbm5lbDsKIH07CisKK2ludCBvbWFwMl9vbmVuYW5kX3JlcGhhc2Uodm9pZCk7CisKKyNkZWZpbmUgT05FTkFORF9NQVhfUEFSVElUSU9OUyA4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3BtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3BtLmgKaW5kZXggYmZhMDkzMi4uNzY4ZWI2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG0uaApAQCAtMzksMTEgKzM5LDExIEBACiAgKiBSZWdpc3RlciBhbmQgb2Zmc2V0IGRlZmluaXRpb25zIHRvIGJlIHVzZWQgaW4gUE0gYXNzZW1ibGVyIGNvZGUKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotI2RlZmluZSBDTEtHRU5fUkVHX0FTTV9CQVNFCQlpb19wMnYoMHhmZmZlY2UwMCkKKyNkZWZpbmUgQ0xLR0VOX1JFR19BU01fQkFTRQkJSU9fQUREUkVTUygweGZmZmVjZTAwKQogI2RlZmluZSBBUk1fSURMRUNUMV9BU01fT0ZGU0VUCQkweDA0CiAjZGVmaW5lIEFSTV9JRExFQ1QyX0FTTV9PRkZTRVQJCTB4MDgKIAotI2RlZmluZSBUQ01JRl9BU01fQkFTRQkJCWlvX3AydigweGZmZmVjYzAwKQorI2RlZmluZSBUQ01JRl9BU01fQkFTRQkJCUlPX0FERFJFU1MoMHhmZmZlY2MwMCkKICNkZWZpbmUgRU1JRlNfQ09ORklHX0FTTV9PRkZTRVQJCTB4MGMKICNkZWZpbmUgRU1JRkZfU0RSQU1fQ09ORklHX0FTTV9PRkZTRVQJMHgyMAogCkBAIC0xMzUsNyArMTM1LDggQEAKIGV4dGVybiB2b2lkIG9tYXA3MzBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKIGV4dGVybiB2b2lkIG9tYXAxNTEwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBvbWFwMTYxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwotZXh0ZXJuIHZvaWQgb21hcDI0eHhfY3B1X3N1c3BlbmQodTMyIGRsbF9jdHJsLCB1MzIgY3B1X3JldmlzaW9uKTsKK2V4dGVybiB2b2lkIG9tYXAyNHh4X2NwdV9zdXNwZW5kKHUzMiBkbGxfY3RybCwgdm9pZCBfX2lvbWVtICpzZHJjX2RsbGFfY3RybCwKKwkJCQkJdm9pZCBfX2lvbWVtICpzZHJjX3Bvd2VyKTsKIGV4dGVybiB2b2lkIG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MDZhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3Bvd2VyZG9tYWluLmgKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBPTUFQMi8zIHBvd2VyZG9tYWluIGNvbnRyb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgQVNNX0FSTV9BUkNIX09NQVBfUE9XRVJET01BSU4KKyNkZWZpbmUgQVNNX0FSTV9BUkNIX09NQVBfUE9XRVJET01BSU4KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjaW5jbHVkZSA8bWFjaC9jcHUuaD4KKworCisvKiBQb3dlcmRvbWFpbiBiYXNpYyBwb3dlciBzdGF0ZXMgKi8KKyNkZWZpbmUgUFdSRE1fUE9XRVJfT0ZGCQkweDAKKyNkZWZpbmUgUFdSRE1fUE9XRVJfUkVUCQkweDEKKyNkZWZpbmUgUFdSRE1fUE9XRVJfSU5BQ1RJVkUJMHgyCisjZGVmaW5lIFBXUkRNX1BPV0VSX09OCQkweDMKKworLyogUG93ZXJkb21haW4gYWxsb3dhYmxlIHN0YXRlIGJpdGZpZWxkcyAqLworI2RlZmluZSBQV1JTVFNfT0ZGX09OCQkoKDEgPDwgUFdSRE1fUE9XRVJfT0ZGKSB8IFwKKwkJCQkgKDEgPDwgUFdSRE1fUE9XRVJfT04pKQorCisjZGVmaW5lIFBXUlNUU19PRkZfUkVUCQkoKDEgPDwgUFdSRE1fUE9XRVJfT0ZGKSB8IFwKKwkJCQkgKDEgPDwgUFdSRE1fUE9XRVJfUkVUKSkKKworI2RlZmluZSBQV1JTVFNfT0ZGX1JFVF9PTgkoUFdSU1RTX09GRl9SRVQgfCAoMSA8PCBQV1JETV9QT1dFUl9PTikpCisKKworLyogUG93ZXJkb21haW4gZmxhZ3MgKi8KKyNkZWZpbmUgUFdSRE1fSEFTX0hEV1JfU0FSCSgxIDw8IDApIC8qIGhhcmR3YXJlIHNhdmUtYW5kLXJlc3RvcmUgc3VwcG9ydCAqLworCisKKy8qCisgKiBOdW1iZXIgb2YgbWVtb3J5IGJhbmtzIHRoYXQgYXJlIHBvd2VyLWNvbnRyb2xsYWJsZS4JT24gT01BUDM0MzAsIHRoZQorICogbWF4aW11bSBpcyA0LgorICovCisjZGVmaW5lIFBXUkRNX01BWF9NRU1fQkFOS1MJNAorCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgY2xvY2tkb21haW5zIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhIHBvd2VyZG9tYWluLgorICogQ09SRSBwb3dlcmRvbWFpbiBpcyBwcm9iYWJseSB0aGUgd29yc3QgY2FzZS4KKyAqLworI2RlZmluZSBQV1JETV9NQVhfQ0xLRE1TCTMKKworLyogWFhYIEEgY29tcGxldGVseSBhcmJpdHJhcnkgbnVtYmVyLiBXaGF0IGlzIHJlYXNvbmFibGUgaGVyZT8gKi8KKyNkZWZpbmUgUFdSRE1fVFJBTlNJVElPTl9CQUlMT1VUIDEwMDAwMAorCitzdHJ1Y3QgY2xvY2tkb21haW47CitzdHJ1Y3QgcG93ZXJkb21haW47CisKKy8qIEVuY29kZXMgZGVwZW5kZW5jaWVzIGJldHdlZW4gcG93ZXJkb21haW5zIC0gc3RhdGljYWxseSBkZWZpbmVkICovCitzdHJ1Y3QgcHdyZG1fZGVwIHsKKworCS8qIFBvd2VyZG9tYWluIG5hbWUgKi8KKwljb25zdCBjaGFyICpwd3JkbV9uYW1lOworCisJLyogUG93ZXJkb21haW4gcG9pbnRlciAtIHJlc29sdmVkIGJ5IHRoZSBwb3dlcmRvbWFpbiBjb2RlICovCisJc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTsKKworCS8qIEZsYWdzIHRvIG1hcmsgT01BUCBjaGlwIHJlc3RyaWN0aW9ucywgZXRjLiAqLworCWNvbnN0IHN0cnVjdCBvbWFwX2NoaXBfaWQgb21hcF9jaGlwOworCit9OworCitzdHJ1Y3QgcG93ZXJkb21haW4geworCisJLyogUG93ZXJkb21haW4gbmFtZSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkvKiB0aGUgYWRkcmVzcyBvZmZzZXQgZnJvbSBDTV9CQVNFL1BSTV9CQVNFICovCisJY29uc3QgczE2IHByY21fb2ZmczsKKworCS8qIFVzZWQgdG8gcmVwcmVzZW50IHRoZSBPTUFQIGNoaXAgdHlwZXMgY29udGFpbmluZyB0aGlzIHB3cmRtICovCisJY29uc3Qgc3RydWN0IG9tYXBfY2hpcF9pZCBvbWFwX2NoaXA7CisKKwkvKiBCaXQgc2hpZnQgb2YgdGhpcyBwb3dlcmRvbWFpbidzIFBNX1dLREVQL0NNX1NMRUVQREVQIGJpdCAqLworCWNvbnN0IHU4IGRlcF9iaXQ7CisKKwkvKiBQb3dlcmRvbWFpbnMgdGhhdCBjYW4gYmUgdG9sZCB0byB3YWtlIHRoaXMgcG93ZXJkb21haW4gdXAgKi8KKwlzdHJ1Y3QgcHdyZG1fZGVwICp3a2RlcF9zcmNzOworCisJLyogUG93ZXJkb21haW5zIHRoYXQgY2FuIGJlIHRvbGQgdG8ga2VlcCB0aGlzIHB3cmRtIGZyb20gaW5hY3Rpdml0eSAqLworCXN0cnVjdCBwd3JkbV9kZXAgKnNsZWVwZGVwX3NyY3M7CisKKwkvKiBQb3NzaWJsZSBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZXMgKi8KKwljb25zdCB1OCBwd3JzdHM7CisKKwkvKiBQb3NzaWJsZSBsb2dpYyBwb3dlciBzdGF0ZXMgd2hlbiBwd3JkbSBpbiBSRVRFTlRJT04gKi8KKwljb25zdCB1OCBwd3JzdHNfbG9naWNfcmV0OworCisJLyogUG93ZXJkb21haW4gZmxhZ3MgKi8KKwljb25zdCB1OCBmbGFnczsKKworCS8qIE51bWJlciBvZiBzb2Z0d2FyZS1jb250cm9sbGFibGUgbWVtb3J5IGJhbmtzIGluIHRoaXMgcG93ZXJkb21haW4gKi8KKwljb25zdCB1OCBiYW5rczsKKworCS8qIFBvc3NpYmxlIG1lbW9yeSBiYW5rIHB3cnN0YXRlcyB3aGVuIHB3cmRtIGluIFJFVEVOVElPTiAqLworCWNvbnN0IHU4IHB3cnN0c19tZW1fcmV0W1BXUkRNX01BWF9NRU1fQkFOS1NdOworCisJLyogUG9zc2libGUgbWVtb3J5IGJhbmsgcHdyc3RhdGVzIHdoZW4gcHdyZG0gaXMgT04gKi8KKwljb25zdCB1OCBwd3JzdHNfbWVtX29uW1BXUkRNX01BWF9NRU1fQkFOS1NdOworCisJLyogQ2xvY2tkb21haW5zIGluIHRoaXMgcG93ZXJkb21haW4gKi8KKwlzdHJ1Y3QgY2xvY2tkb21haW4gKnB3cmRtX2Nsa2Rtc1tQV1JETV9NQVhfQ0xLRE1TXTsKKworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKworfTsKKworCit2b2lkIHB3cmRtX2luaXQoc3RydWN0IHBvd2VyZG9tYWluICoqcHdyZG1fbGlzdCk7CisKK2ludCBwd3JkbV9yZWdpc3RlcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2ludCBwd3JkbV91bnJlZ2lzdGVyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CisKK2ludCBwd3JkbV9mb3JfZWFjaChpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkpOworCitpbnQgcHdyZG1fYWRkX2Nsa2RtKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworaW50IHB3cmRtX2RlbF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKK2ludCBwd3JkbV9mb3JfZWFjaF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLAorCQkJIGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLAorCQkJCSAgIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pKTsKKworaW50IHB3cmRtX2FkZF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpOworaW50IHB3cmRtX2RlbF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpOworaW50IHB3cmRtX3JlYWRfd2tkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKTsKK2ludCBwd3JkbV9hZGRfc2xlZXBkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKTsKK2ludCBwd3JkbV9kZWxfc2xlZXBkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKTsKK2ludCBwd3JkbV9yZWFkX3NsZWVwZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMik7CisKK2ludCBwd3JkbV9nZXRfbWVtX2JhbmtfY291bnQoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CisKK2ludCBwd3JkbV9zZXRfbmV4dF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBwd3JzdCk7CitpbnQgcHdyZG1fcmVhZF9uZXh0X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworaW50IHB3cmRtX3JlYWRfcHJldl9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2ludCBwd3JkbV9jbGVhcl9hbGxfcHJldl9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKKworaW50IHB3cmRtX3NldF9sb2dpY19yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBwd3JzdCk7CitpbnQgcHdyZG1fc2V0X21lbV9vbnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmssIHU4IHB3cnN0KTsKK2ludCBwd3JkbV9zZXRfbWVtX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmssIHU4IHB3cnN0KTsKKworaW50IHB3cmRtX3JlYWRfbG9naWNfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CitpbnQgcHdyZG1fcmVhZF9wcmV2X2xvZ2ljX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworaW50IHB3cmRtX3JlYWRfbWVtX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspOworaW50IHB3cmRtX3JlYWRfcHJldl9tZW1fcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuayk7CisKK2ludCBwd3JkbV9lbmFibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CitpbnQgcHdyZG1fZGlzYWJsZV9oZHdyX3NhcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2Jvb2wgcHdyZG1faGFzX2hkd3Jfc2FyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworCitpbnQgcHdyZG1fd2FpdF90cmFuc2l0aW9uKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zZHJjLmgKaW5kZXggNzg3YjdhYy4uYTk4YzZjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zZHJjLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zZHJjLmgKQEAgLTI1LDYgKzI1LDggQEAKICNkZWZpbmUgU0RSQ19ETExCX1NUQVRVUwkweDA2QwogI2RlZmluZSBTRFJDX1BPV0VSCQkweDA3MAogI2RlZmluZSBTRFJDX01SXzAJCTB4MDg0CisjZGVmaW5lIFNEUkNfQUNUSU1fQ1RSTF9BXzAJMHgwOWMKKyNkZWZpbmUgU0RSQ19BQ1RJTV9DVFJMX0JfMAkweDBhMAogI2RlZmluZSBTRFJDX1JGUl9DVFJMXzAJCTB4MGE0CiAKIC8qCkBAIC02Myw5ICs2NSw5IEBACiAgKi8KIAogCi0jZGVmaW5lIE9NQVAyNDJYX1NNU19SRUdBRERSKHJlZykJKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDI0MjBfU01TX0JBU0UgKyByZWcpCi0jZGVmaW5lIE9NQVAyNDNYX1NNU19SRUdBRERSKHJlZykJKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDI0M1hfU01TX0JBU0UgKyByZWcpCi0jZGVmaW5lIE9NQVAzNDNYX1NNU19SRUdBRERSKHJlZykJKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDM0M1hfU01TX0JBU0UgKyByZWcpCisjZGVmaW5lIE9NQVAyNDJYX1NNU19SRUdBRERSKHJlZykJSU9fQUREUkVTUyhPTUFQMjQyMF9TTVNfQkFTRSArIHJlZykKKyNkZWZpbmUgT01BUDI0M1hfU01TX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAyNDNYX1NNU19CQVNFICsgcmVnKQorI2RlZmluZSBPTUFQMzQzWF9TTVNfUkVHQUREUihyZWcpCUlPX0FERFJFU1MoT01BUDM0M1hfU01TX0JBU0UgKyByZWcpCiAKIC8qIFNNUyByZWdpc3RlciBvZmZzZXRzIC0gcmVhZC93cml0ZSB3aXRoIHNtc197cmVhZCx3cml0ZX1fcmVnKCkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zZXJpYWwuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2VyaWFsLmgKaW5kZXggY2M2YmZhNS4uOGE2NzZhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zZXJpYWwuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NlcmlhbC5oCkBAIC0yMCwxOCArMjAsMjQgQEAKICNkZWZpbmUgT01BUF9VQVJUMV9CQVNFCQkweDQ4MDZhMDAwCiAjZGVmaW5lIE9NQVBfVUFSVDJfQkFTRQkJMHg0ODA2YzAwMAogI2RlZmluZSBPTUFQX1VBUlQzX0JBU0UJCTB4NDgwNmUwMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisvKiBPTUFQMyBzZXJpYWwgcG9ydHMgKi8KKyNkZWZpbmUgT01BUF9VQVJUMV9CQVNFCQkweDQ4MDZhMDAwCisjZGVmaW5lIE9NQVBfVUFSVDJfQkFTRQkJMHg0ODA2YzAwMAorI2RlZmluZSBPTUFQX1VBUlQzX0JBU0UJCTB4NDkwMjAwMDAKICNlbmRpZgogCiAjZGVmaW5lIE9NQVBfTUFYX05SX1BPUlRTCTMKICNkZWZpbmUgT01BUDE1MTBfQkFTRV9CQVVECSgxMjAwMDAwMC8xNikKICNkZWZpbmUgT01BUDE2WFhfQkFTRV9CQVVECSg0ODAwMDAwMC8xNikKKyNkZWZpbmUgT01BUDI0WFhfQkFTRV9CQVVECSg0ODAwMDAwMC8xNikKIAotI2RlZmluZSBpc19vbWFwX3BvcnQocCkJKHtpbnQgX19yZXQgPSAwOwkJCVwKLQkJCWlmIChwID09IElPX0FERFJFU1MoT01BUF9VQVJUMV9CQVNFKSB8fAlcCi0JCQkgICAgcCA9PSBJT19BRERSRVNTKE9NQVBfVUFSVDJfQkFTRSkgfHwJXAotCQkJICAgIHAgPT0gSU9fQUREUkVTUyhPTUFQX1VBUlQzX0JBU0UpKQlcCi0JCQkJX19yZXQgPSAxOwkJCVwKLQkJCV9fcmV0OwkJCQkJXAorI2RlZmluZSBpc19vbWFwX3BvcnQocHQpCSh7aW50IF9fcmV0ID0gMDsJCQlcCisJCQlpZiAoKHB0KS0+cG9ydC5tYXBiYXNlID09IE9NQVBfVUFSVDFfQkFTRSB8fAlcCisJCQkgICAgKHB0KS0+cG9ydC5tYXBiYXNlID09IE9NQVBfVUFSVDJfQkFTRSB8fAlcCisJCQkgICAgKHB0KS0+cG9ydC5tYXBiYXNlID09IE9NQVBfVUFSVDNfQkFTRSkJXAorCQkJCV9fcmV0ID0gMTsJCQkJXAorCQkJX19yZXQ7CQkJCQkJXAogCQkJfSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NyYW0uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc3JhbS5oCmluZGV4IGUwOTMyMzQuLmFiMzVkNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc3JhbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc3JhbS5oCkBAIC0yMSw2ICsyMSwxMCBAQAogCQkJCSAgICAgIHUzMiBtZW1fdHlwZSk7CiBleHRlcm4gdTMyIG9tYXAyX3NldF9wcmNtKHUzMiBkcGxsX2N0cmxfdmFsLCB1MzIgc2RyY19yZnJfdmFsLCBpbnQgYnlwYXNzKTsKIAorZXh0ZXJuIHUzMiBvbWFwM19jb25maWd1cmVfY29yZV9kcGxsKHUzMiBzZHJjX3Jmcl9jdHJsLAorCQkJCSAgICAgdTMyIHNkcmNfYWN0aW1fY3RybGEsCisJCQkJICAgICB1MzIgc2RyY19hY3RpbV9jdHJsYiwgdTMyIG0yKTsKKwogLyogRG8gbm90IHVzZSB0aGVzZSAqLwogZXh0ZXJuIHZvaWQgb21hcDFfc3JhbV9yZXByb2dyYW1fY2xvY2sodTMyIGNrY3RsLCB1MzIgZHBsbGN0bCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBvbWFwMV9zcmFtX3JlcHJvZ3JhbV9jbG9ja19zejsKQEAgLTUzLDQgKzU3LDEwIEBACiAJCQkJCQl1MzIgbWVtX3R5cGUpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb21hcDI0M3hfc3JhbV9yZXByb2dyYW1fc2RyY19zejsKIAorCitleHRlcm4gdTMyIG9tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCh1MzIgc2RyY19yZnJfY3RybCwKKwkJCQkJICB1MzIgc2RyY19hY3RpbV9jdHJsYSwKKwkJCQkJICB1MzIgc2RyY19hY3RpbV9jdHJsYiwgdTMyIG0yKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG9tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbF9zejsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAwNmEyOGM3Li4wNjkyM2YyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTQwLDcgKzQwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQogewotCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJaWYgKCFjcHVfY2xhc3NfaXNfb21hcDIoKSkKIAkJb21hcDFfYXJjaF9yZXNldChtb2RlKTsKIAllbHNlCiAJCW9tYXBfcHJjbV9hcmNoX3Jlc2V0KG1vZGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjMyNmVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvLmMKQEAgLTAsMCArMSwxMDcgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxtYWNoL29tYXA3MzAuaD4KKyNpbmNsdWRlIDxtYWNoL29tYXAxNTEwLmg+CisjaW5jbHVkZSA8bWFjaC9vbWFwMTZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvb21hcDI0eHguaD4KKyNpbmNsdWRlIDxtYWNoL29tYXAzNHh4Lmg+CisKKyNkZWZpbmUgQkVUV0VFTihwLHN0LHN6KQkoKHApID49IChzdCkgJiYgKHApIDwgKChzdCkgKyAoc3opKSkKKyNkZWZpbmUgWExBVEUocCxwc3QsdnN0KQkoKHZvaWQgX19pb21lbSAqKSgocCkgLSAocHN0KSArICh2c3QpKSkKKworLyoKKyAqIEludGVyY2VwdCBpb3JlbWFwKCkgcmVxdWVzdHMgZm9yIGFkZHJlc3NlcyBpbiBvdXIgZml4ZWQgbWFwcGluZyByZWdpb25zLgorICovCit2b2lkIF9faW9tZW0gKm9tYXBfaW9yZW1hcCh1bnNpZ25lZCBsb25nIHAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQorCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlpZiAoQkVUV0VFTihwLCBJT19QSFlTLCBJT19TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBJT19QSFlTLCBJT19WSVJUKTsKKwl9CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJaWYgKEJFVFdFRU4ocCwgT01BUDczMF9EU1BfQkFTRSwgT01BUDczMF9EU1BfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDczMF9EU1BfQkFTRSwgT01BUDczMF9EU1BfU1RBUlQpOworCisJCWlmIChCRVRXRUVOKHAsIE9NQVA3MzBfRFNQUkVHX0JBU0UsIE9NQVA3MzBfRFNQUkVHX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVA3MzBfRFNQUkVHX0JBU0UsCisJCQkJCU9NQVA3MzBfRFNQUkVHX1NUQVJUKTsKKwl9CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCWlmIChCRVRXRUVOKHAsIE9NQVAxNTEwX0RTUF9CQVNFLCBPTUFQMTUxMF9EU1BfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDE1MTBfRFNQX0JBU0UsIE9NQVAxNTEwX0RTUF9TVEFSVCk7CisKKwkJaWYgKEJFVFdFRU4ocCwgT01BUDE1MTBfRFNQUkVHX0JBU0UsIE9NQVAxNTEwX0RTUFJFR19TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBPTUFQMTUxMF9EU1BSRUdfQkFTRSwKKwkJCQkJT01BUDE1MTBfRFNQUkVHX1NUQVJUKTsKKwl9CisJaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCWlmIChCRVRXRUVOKHAsIE9NQVAxNlhYX0RTUF9CQVNFLCBPTUFQMTZYWF9EU1BfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDE2WFhfRFNQX0JBU0UsIE9NQVAxNlhYX0RTUF9TVEFSVCk7CisKKwkJaWYgKEJFVFdFRU4ocCwgT01BUDE2WFhfRFNQUkVHX0JBU0UsIE9NQVAxNlhYX0RTUFJFR19TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBPTUFQMTZYWF9EU1BSRUdfQkFTRSwKKwkJCQkJT01BUDE2WFhfRFNQUkVHX1NUQVJUKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgorCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpZiAoQkVUV0VFTihwLCBMM18yNFhYX1BIWVMsIEwzXzI0WFhfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgTDNfMjRYWF9QSFlTLCBMM18yNFhYX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBMNF8yNFhYX1BIWVMsIEw0XzI0WFhfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgTDRfMjRYWF9QSFlTLCBMNF8yNFhYX1ZJUlQpOworCX0KKwlpZiAoY3B1X2lzX29tYXAyNDIwKCkpIHsKKwkJaWYgKEJFVFdFRU4ocCwgRFNQX01FTV8yNFhYX1BIWVMsIERTUF9NRU1fMjRYWF9TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBEU1BfTUVNXzI0WFhfUEhZUywgRFNQX01FTV8yNFhYX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBEU1BfSVBJXzI0WFhfUEhZUywgRFNQX0lQSV8yNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIERTUF9JUElfMjRYWF9QSFlTLCBEU1BfSVBJXzI0WFhfU0laRSk7CisJCWlmIChCRVRXRUVOKHAsIERTUF9NTVVfMjRYWF9QSFlTLCBEU1BfTU1VXzI0WFhfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgRFNQX01NVV8yNFhYX1BIWVMsIERTUF9NTVVfMjRYWF9WSVJUKTsKKwl9CisJaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7CisJCWlmIChCRVRXRUVOKHAsIEw0X1dLXzI0M1hfUEhZUywgTDRfV0tfMjQzWF9TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBMNF9XS18yNDNYX1BIWVMsIEw0X1dLXzI0M1hfVklSVCk7CisJCWlmIChCRVRXRUVOKHAsIE9NQVAyNDNYX0dQTUNfUEhZUywgT01BUDI0M1hfR1BNQ19TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBPTUFQMjQzWF9HUE1DX1BIWVMsIE9NQVAyNDNYX0dQTUNfVklSVCk7CisJCWlmIChCRVRXRUVOKHAsIE9NQVAyNDNYX1NEUkNfUEhZUywgT01BUDI0M1hfU0RSQ19TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBPTUFQMjQzWF9TRFJDX1BIWVMsIE9NQVAyNDNYX1NEUkNfVklSVCk7CisJCWlmIChCRVRXRUVOKHAsIE9NQVAyNDNYX1NNU19QSFlTLCBPTUFQMjQzWF9TTVNfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDI0M1hfU01TX1BIWVMsIE9NQVAyNDNYX1NNU19WSVJUKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlpZiAoQkVUV0VFTihwLCBMM18zNFhYX1BIWVMsIEwzXzM0WFhfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgTDNfMzRYWF9QSFlTLCBMM18zNFhYX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBMNF8zNFhYX1BIWVMsIEw0XzM0WFhfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgTDRfMzRYWF9QSFlTLCBMNF8zNFhYX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBMNF9XS18zNFhYX1BIWVMsIEw0X1dLXzM0WFhfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgTDRfV0tfMzRYWF9QSFlTLCBMNF9XS18zNFhYX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBPTUFQMzRYWF9HUE1DX1BIWVMsIE9NQVAzNFhYX0dQTUNfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDM0WFhfR1BNQ19QSFlTLCBPTUFQMzRYWF9HUE1DX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBPTUFQMzQzWF9TTVNfUEhZUywgT01BUDM0M1hfU01TX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVAzNDNYX1NNU19QSFlTLCBPTUFQMzQzWF9TTVNfVklSVCk7CisJCWlmIChCRVRXRUVOKHAsIE9NQVAzNDNYX1NEUkNfUEhZUywgT01BUDM0M1hfU0RSQ19TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBPTUFQMzQzWF9TRFJDX1BIWVMsIE9NQVAzNDNYX1NEUkNfVklSVCk7CisJCWlmIChCRVRXRUVOKHAsIEw0X1BFUl8zNFhYX1BIWVMsIEw0X1BFUl8zNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIEw0X1BFUl8zNFhYX1BIWVMsIEw0X1BFUl8zNFhYX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBMNF9FTVVfMzRYWF9QSFlTLCBMNF9FTVVfMzRYWF9TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBMNF9FTVVfMzRYWF9QSFlTLCBMNF9FTVVfMzRYWF9WSVJUKTsKKwl9CisjZW5kaWYKKworCXJldHVybiBfX2FybV9pb3JlbWFwKHAsIHNpemUsIHR5cGUpOworfQorRVhQT1JUX1NZTUJPTChvbWFwX2lvcmVtYXApOworCit2b2lkIG9tYXBfaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyB2aXJ0ID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKKworCWlmICh2aXJ0ID49IFZNQUxMT0NfU1RBUlQgJiYgdmlydCA8IFZNQUxMT0NfRU5EKQorCQlfX2lvdW5tYXAoYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfaW91bm1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCmluZGV4IDAxNGQyNjUuLmFmMzNmYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jCkBAIC0yNyw0MyArMjcsNjUgQEAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvbWNic3AuaD4KIAotc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwIG1jYnNwW09NQVBfTUFYX01DQlNQX0NPVU5UXTsKK3N0cnVjdCBvbWFwX21jYnNwICoqbWNic3BfcHRyOworaW50IG9tYXBfbWNic3BfY291bnQ7CiAKLSNkZWZpbmUgb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkJKG1jYnNwW2lkXS5wZGF0YSAmJiBcCi0JCQkJCW1jYnNwW2lkXS5wZGF0YS0+b3BzICYmIFwKLQkJCQkJbWNic3BbaWRdLnBkYXRhLT5vcHMtPmNoZWNrICYmIFwKLQkJCQkJKG1jYnNwW2lkXS5wZGF0YS0+b3BzLT5jaGVjayhpZCkgPT0gMCkpCit2b2lkIG9tYXBfbWNic3Bfd3JpdGUodm9pZCBfX2lvbWVtICppb19iYXNlLCB1MTYgcmVnLCB1MzIgdmFsKQoreworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSB8fCBjcHVfaXNfb21hcDI0MjAoKSkKKwkJX19yYXdfd3JpdGV3KCh1MTYpdmFsLCBpb19iYXNlICsgcmVnKTsKKwllbHNlCisJCV9fcmF3X3dyaXRlbCh2YWwsIGlvX2Jhc2UgKyByZWcpOworfQorCitpbnQgb21hcF9tY2JzcF9yZWFkKHZvaWQgX19pb21lbSAqaW9fYmFzZSwgdTE2IHJlZykKK3sKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkgfHwgY3B1X2lzX29tYXAyNDIwKCkpCisJCXJldHVybiBfX3Jhd19yZWFkdyhpb19iYXNlICsgcmVnKTsKKwllbHNlCisJCXJldHVybiBfX3Jhd19yZWFkbChpb19iYXNlICsgcmVnKTsKK30KKworI2RlZmluZSBPTUFQX01DQlNQX1JFQUQoYmFzZSwgcmVnKSBcCisJCQlvbWFwX21jYnNwX3JlYWQoYmFzZSwgT01BUF9NQ0JTUF9SRUdfIyNyZWcpCisjZGVmaW5lIE9NQVBfTUNCU1BfV1JJVEUoYmFzZSwgcmVnLCB2YWwpIFwKKwkJCW9tYXBfbWNic3Bfd3JpdGUoYmFzZSwgT01BUF9NQ0JTUF9SRUdfIyNyZWcsIHZhbCkKKworI2RlZmluZSBvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKQkoaWQgPCBvbWFwX21jYnNwX2NvdW50KQorI2RlZmluZSBpZF90b19tY2JzcF9wdHIoaWQpCQltY2JzcF9wdHJbaWRdOwogCiBzdGF0aWMgdm9pZCBvbWFwX21jYnNwX2R1bXBfcmVnKHU4IGlkKQogewotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIioqKiogTWNCU1AlZCByZWdzICoqKipcbiIsIG1jYnNwW2lkXS5pZCk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiRFJSMjogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgRFJSMikpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIkRSUjE6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIERSUjEpKTsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICJEWFIyOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBEWFIyKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiRFhSMTogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgRFhSMSkpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIlNQQ1IyOiAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIFNQQ1IyKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiU1BDUjE6IDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgU1BDUjEpKTsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICJSQ1IyOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBSQ1IyKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiUkNSMTogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgUkNSMSkpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIlhDUjI6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIFhDUjIpKTsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICJYQ1IxOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBYQ1IxKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiU1JHUjI6IDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgU1JHUjIpKTsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICJTUkdSMTogMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBTUkdSMSkpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIlBDUjA6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIFBDUjApKTsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICIqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKKworCWRldl9kYmcobWNic3AtPmRldiwgIioqKiogTWNCU1AlZCByZWdzICoqKipcbiIsIG1jYnNwLT5pZCk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiRFJSMjogIDB4JTA0eFxuIiwKKwkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgRFJSMikpOworCWRldl9kYmcobWNic3AtPmRldiwgIkRSUjE6ICAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIERSUjEpKTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICJEWFIyOiAgMHglMDR4XG4iLAorCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBEWFIyKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiRFhSMTogIDB4JTA0eFxuIiwKKwkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgRFhSMSkpOworCWRldl9kYmcobWNic3AtPmRldiwgIlNQQ1IyOiAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFNQQ1IyKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiU1BDUjE6IDB4JTA0eFxuIiwKKwkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgU1BDUjEpKTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICJSQ1IyOiAgMHglMDR4XG4iLAorCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBSQ1IyKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiUkNSMTogIDB4JTA0eFxuIiwKKwkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgUkNSMSkpOworCWRldl9kYmcobWNic3AtPmRldiwgIlhDUjI6ICAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFhDUjIpKTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICJYQ1IxOiAgMHglMDR4XG4iLAorCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBYQ1IxKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiU1JHUjI6IDB4JTA0eFxuIiwKKwkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgU1JHUjIpKTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICJTUkdSMTogMHglMDR4XG4iLAorCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBTUkdSMSkpOworCWRldl9kYmcobWNic3AtPmRldiwgIlBDUjA6ICAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFBDUjApKTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICIqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBvbWFwX21jYnNwX3R4X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTEyNiwxNiArMTQ4LDE4IEBACiAgKi8KIHZvaWQgb21hcF9tY2JzcF9jb25maWcodW5zaWduZWQgaW50IGlkLCBjb25zdCBzdHJ1Y3Qgb21hcF9tY2JzcF9yZWdfY2ZnICpjb25maWcpCiB7Ci0JdTMyIGlvX2Jhc2U7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOworCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKIAogCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKIAkJcmV0dXJuOwogCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKLQlpb19iYXNlID0gbWNic3BbaWRdLmlvX2Jhc2U7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiQ29uZmlndXJpbmcgTWNCU1AlZCAgaW9fYmFzZTogMHglOHhcbiIsCi0JCQltY2JzcFtpZF0uaWQsIGlvX2Jhc2UpOworCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICJDb25maWd1cmluZyBNY0JTUCVkICBwaHlzX2Jhc2U6IDB4JTA4bHhcbiIsCisJCQltY2JzcC0+aWQsIG1jYnNwLT5waHlzX2Jhc2UpOwogCiAJLyogV2Ugd3JpdGUgdGhlIGdpdmVuIGNvbmZpZyAqLwogCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIGNvbmZpZy0+c3BjcjIpOwpAQCAtMTU4LDIzICsxODIsMjYgQEAKICAqLwogaW50IG9tYXBfbWNic3Bfc2V0X2lvX3R5cGUodW5zaWduZWQgaW50IGlkLCBvbWFwX21jYnNwX2lvX3R5cGVfdCBpb190eXBlKQogeworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwogCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKIAotCXNwaW5fbG9jaygmbWNic3BbaWRdLmxvY2spOworCXNwaW5fbG9jaygmbWNic3AtPmxvY2spOwogCi0JaWYgKCFtY2JzcFtpZF0uZnJlZSkgewotCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJNY0JTUCVkIGlzIGN1cnJlbnRseSBpbiB1c2VcbiIsCi0JCQltY2JzcFtpZF0uaWQpOwotCQlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOworCWlmICghbWNic3AtPmZyZWUpIHsKKwkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AlZCBpcyBjdXJyZW50bHkgaW4gdXNlXG4iLAorCQkJbWNic3AtPmlkKTsKKwkJc3Bpbl91bmxvY2soJm1jYnNwLT5sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbWNic3BbaWRdLmlvX3R5cGUgPSBpb190eXBlOworCW1jYnNwLT5pb190eXBlID0gaW9fdHlwZTsKIAotCXNwaW5fdW5sb2NrKCZtY2JzcFtpZF0ubG9jayk7CisJc3Bpbl91bmxvY2soJm1jYnNwLT5sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTgyLDUzICsyMDksNjAgQEAKIAogaW50IG9tYXBfbWNic3BfcmVxdWVzdCh1bnNpZ25lZCBpbnQgaWQpCiB7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwogCWludCBlcnI7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKLQlpZiAobWNic3BbaWRdLnBkYXRhLT5vcHMtPnJlcXVlc3QpCi0JCW1jYnNwW2lkXS5wZGF0YS0+b3BzLT5yZXF1ZXN0KGlkKTsKKwlpZiAobWNic3AtPnBkYXRhICYmIG1jYnNwLT5wZGF0YS0+b3BzICYmIG1jYnNwLT5wZGF0YS0+b3BzLT5yZXF1ZXN0KQorCQltY2JzcC0+cGRhdGEtPm9wcy0+cmVxdWVzdChpZCk7CiAKLQljbGtfZW5hYmxlKG1jYnNwW2lkXS5jbGspOworCWNsa19lbmFibGUobWNic3AtPmNsayk7CiAKLQlzcGluX2xvY2soJm1jYnNwW2lkXS5sb2NrKTsKLQlpZiAoIW1jYnNwW2lkXS5mcmVlKSB7Ci0JCWRldl9lcnIobWNic3BbaWRdLmRldiwgIk1jQlNQJWQgaXMgY3VycmVudGx5IGluIHVzZVxuIiwKLQkJCW1jYnNwW2lkXS5pZCk7Ci0JCXNwaW5fdW5sb2NrKCZtY2JzcFtpZF0ubG9jayk7CisJc3Bpbl9sb2NrKCZtY2JzcC0+bG9jayk7CisJaWYgKCFtY2JzcC0+ZnJlZSkgeworCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJNY0JTUCVkIGlzIGN1cnJlbnRseSBpbiB1c2VcbiIsCisJCQltY2JzcC0+aWQpOworCQlzcGluX3VubG9jaygmbWNic3AtPmxvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JbWNic3BbaWRdLmZyZWUgPSAwOwotCXNwaW5fdW5sb2NrKCZtY2JzcFtpZF0ubG9jayk7CisJbWNic3AtPmZyZWUgPSAwOworCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7CiAKLQlpZiAobWNic3BbaWRdLmlvX3R5cGUgPT0gT01BUF9NQ0JTUF9JUlFfSU8pIHsKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IHRyYW5zbWl0dGVyLCByZWNlaXZlciBhbmQgc2FtcGxlLXJhdGUgZ2VuZXJhdG9yIGFyZQorCSAqIG5vdCBydW5uaW5nIGJlZm9yZSBhY3RpdmF0aW5nIElSUXMuCisJICovCisJT01BUF9NQ0JTUF9XUklURShtY2JzcC0+aW9fYmFzZSwgU1BDUjEsIDApOworCU9NQVBfTUNCU1BfV1JJVEUobWNic3AtPmlvX2Jhc2UsIFNQQ1IyLCAwKTsKKworCWlmIChtY2JzcC0+aW9fdHlwZSA9PSBPTUFQX01DQlNQX0lSUV9JTykgewogCQkvKiBXZSBuZWVkIHRvIGdldCBJUlFzIGhlcmUgKi8KLQkJZXJyID0gcmVxdWVzdF9pcnEobWNic3BbaWRdLnR4X2lycSwgb21hcF9tY2JzcF90eF9pcnFfaGFuZGxlciwKLQkJCQkJMCwgIk1jQlNQIiwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKKwkJaW5pdF9jb21wbGV0aW9uKCZtY2JzcC0+dHhfaXJxX2NvbXBsZXRpb24pOworCQllcnIgPSByZXF1ZXN0X2lycShtY2JzcC0+dHhfaXJxLCBvbWFwX21jYnNwX3R4X2lycV9oYW5kbGVyLAorCQkJCQkwLCAiTWNCU1AiLCAodm9pZCAqKW1jYnNwKTsKIAkJaWYgKGVyciAhPSAwKSB7Ci0JCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCBUWCBJUlEgJWQgIgotCQkJCQkiZm9yIE1jQlNQJWRcbiIsIG1jYnNwW2lkXS50eF9pcnEsCi0JCQkJCW1jYnNwW2lkXS5pZCk7CisJCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCBUWCBJUlEgJWQgIgorCQkJCQkiZm9yIE1jQlNQJWRcbiIsIG1jYnNwLT50eF9pcnEsCisJCQkJCW1jYnNwLT5pZCk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKLQkJaW5pdF9jb21wbGV0aW9uKCYobWNic3BbaWRdLnR4X2lycV9jb21wbGV0aW9uKSk7Ci0KLQkJZXJyID0gcmVxdWVzdF9pcnEobWNic3BbaWRdLnJ4X2lycSwgb21hcF9tY2JzcF9yeF9pcnFfaGFuZGxlciwKLQkJCQkJMCwgIk1jQlNQIiwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKKwkJaW5pdF9jb21wbGV0aW9uKCZtY2JzcC0+cnhfaXJxX2NvbXBsZXRpb24pOworCQllcnIgPSByZXF1ZXN0X2lycShtY2JzcC0+cnhfaXJxLCBvbWFwX21jYnNwX3J4X2lycV9oYW5kbGVyLAorCQkJCQkwLCAiTWNCU1AiLCAodm9pZCAqKW1jYnNwKTsKIAkJaWYgKGVyciAhPSAwKSB7Ci0JCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCBSWCBJUlEgJWQgIgotCQkJCQkiZm9yIE1jQlNQJWRcbiIsIG1jYnNwW2lkXS5yeF9pcnEsCi0JCQkJCW1jYnNwW2lkXS5pZCk7Ci0JCQlmcmVlX2lycShtY2JzcFtpZF0udHhfaXJxLCAodm9pZCAqKSAoJm1jYnNwW2lkXSkpOworCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgUlggSVJRICVkICIKKwkJCQkJImZvciBNY0JTUCVkXG4iLCBtY2JzcC0+cnhfaXJxLAorCQkJCQltY2JzcC0+aWQpOworCQkJZnJlZV9pcnEobWNic3AtPnR4X2lycSwgKHZvaWQgKiltY2JzcCk7CiAJCQlyZXR1cm4gZXJyOwogCQl9Ci0KLQkJaW5pdF9jb21wbGV0aW9uKCYobWNic3BbaWRdLnJ4X2lycV9jb21wbGV0aW9uKSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMzcsMzEgKzI3MSwzNCBAQAogCiB2b2lkIG9tYXBfbWNic3BfZnJlZSh1bnNpZ25lZCBpbnQgaWQpCiB7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOworCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOwogCQlyZXR1cm47CiAJfQorCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKIAotCWlmIChtY2JzcFtpZF0ucGRhdGEtPm9wcy0+ZnJlZSkKLQkJbWNic3BbaWRdLnBkYXRhLT5vcHMtPmZyZWUoaWQpOworCWlmIChtY2JzcC0+cGRhdGEgJiYgbWNic3AtPnBkYXRhLT5vcHMgJiYgbWNic3AtPnBkYXRhLT5vcHMtPmZyZWUpCisJCW1jYnNwLT5wZGF0YS0+b3BzLT5mcmVlKGlkKTsKIAotCWNsa19kaXNhYmxlKG1jYnNwW2lkXS5jbGspOworCWNsa19kaXNhYmxlKG1jYnNwLT5jbGspOwogCi0Jc3Bpbl9sb2NrKCZtY2JzcFtpZF0ubG9jayk7Ci0JaWYgKG1jYnNwW2lkXS5mcmVlKSB7Ci0JCWRldl9lcnIobWNic3BbaWRdLmRldiwgIk1jQlNQJWQgd2FzIG5vdCByZXNlcnZlZFxuIiwKLQkJCW1jYnNwW2lkXS5pZCk7Ci0JCXNwaW5fdW5sb2NrKCZtY2JzcFtpZF0ubG9jayk7CisJc3Bpbl9sb2NrKCZtY2JzcC0+bG9jayk7CisJaWYgKG1jYnNwLT5mcmVlKSB7CisJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgd2FzIG5vdCByZXNlcnZlZFxuIiwKKwkJCW1jYnNwLT5pZCk7CisJCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7CiAJCXJldHVybjsKIAl9CiAKLQltY2JzcFtpZF0uZnJlZSA9IDE7Ci0Jc3Bpbl91bmxvY2soJm1jYnNwW2lkXS5sb2NrKTsKKwltY2JzcC0+ZnJlZSA9IDE7CisJc3Bpbl91bmxvY2soJm1jYnNwLT5sb2NrKTsKIAotCWlmIChtY2JzcFtpZF0uaW9fdHlwZSA9PSBPTUFQX01DQlNQX0lSUV9JTykgeworCWlmIChtY2JzcC0+aW9fdHlwZSA9PSBPTUFQX01DQlNQX0lSUV9JTykgewogCQkvKiBGcmVlIElSUXMgKi8KLQkJZnJlZV9pcnEobWNic3BbaWRdLnJ4X2lycSwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKLQkJZnJlZV9pcnEobWNic3BbaWRdLnR4X2lycSwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKKwkJZnJlZV9pcnEobWNic3AtPnJ4X2lycSwgKHZvaWQgKiltY2JzcCk7CisJCWZyZWVfaXJxKG1jYnNwLT50eF9pcnEsICh2b2lkICopbWNic3ApOwogCX0KIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9mcmVlKTsKQEAgLTI3MywxOCArMzEwLDE5IEBACiAgKi8KIHZvaWQgb21hcF9tY2JzcF9zdGFydCh1bnNpZ25lZCBpbnQgaWQpCiB7Ci0JdTMyIGlvX2Jhc2U7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOworCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKIAl1MTYgdzsKIAogCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKIAkJcmV0dXJuOwogCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisJaW9fYmFzZSA9IG1jYnNwLT5pb19iYXNlOwogCi0JaW9fYmFzZSA9IG1jYnNwW2lkXS5pb19iYXNlOwotCi0JbWNic3BbaWRdLnJ4X3dvcmRfbGVuZ3RoID0gKE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBSQ1IxKSA+PiA1KSAmIDB4NzsKLQltY2JzcFtpZF0udHhfd29yZF9sZW5ndGggPSAoT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFhDUjEpID4+IDUpICYgMHg3OworCW1jYnNwLT5yeF93b3JkX2xlbmd0aCA9IChPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgUkNSMSkgPj4gNSkgJiAweDc7CisJbWNic3AtPnR4X3dvcmRfbGVuZ3RoID0gKE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBYQ1IxKSA+PiA1KSAmIDB4NzsKIAogCS8qIFN0YXJ0IHRoZSBzYW1wbGUgZ2VuZXJhdG9yICovCiAJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMik7CkBAIC0zMTAsNyArMzQ4LDggQEAKIAogdm9pZCBvbWFwX21jYnNwX3N0b3AodW5zaWduZWQgaW50IGlkKQogewotCXUzMiBpb19iYXNlOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJdTE2IHc7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CkBAIC0zMTgsNyArMzU3LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWlvX2Jhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisJaW9fYmFzZSA9IG1jYnNwLT5pb19iYXNlOwogCiAJLyogUmVzZXQgdHJhbnNtaXR0ZXIgKi8KIAl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKQEAgLTMzNywxNCArMzc3LDE3IEBACiAvKiBwb2xsZWQgbWNic3AgaS9vIG9wZXJhdGlvbnMgKi8KIGludCBvbWFwX21jYnNwX3BvbGx3cml0ZSh1bnNpZ25lZCBpbnQgaWQsIHUxNiBidWYpCiB7Ci0JdTMyIGJhc2U7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOworCXZvaWQgX19pb21lbSAqYmFzZTsKIAogCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JYmFzZSA9IG1jYnNwW2lkXS5pb19iYXNlOworCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKKwliYXNlID0gbWNic3AtPmlvX2Jhc2U7CisKIAl3cml0ZXcoYnVmLCBiYXNlICsgT01BUF9NQ0JTUF9SRUdfRFhSMSk7CiAJLyogaWYgZnJhbWUgc3luYyBlcnJvciAtIGNsZWFyIHRoZSBlcnJvciAqLwogCWlmIChyZWFkdyhiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjIpICYgWFNZTkNfRVJSKSB7CkBAIC0zNjYsOCArNDA5LDggQEAKIAkJCQkgICAgICAgKFhSU1QpLAogCQkJCSAgICAgICBiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjIpOwogCQkJCXVkZWxheSgxMCk7Ci0JCQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiQ291bGQgbm90IHdyaXRlIHRvIgotCQkJCQkiIE1jQlNQJWQgUmVnaXN0ZXJcbiIsIG1jYnNwW2lkXS5pZCk7CisJCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiQ291bGQgbm90IHdyaXRlIHRvIgorCQkJCQkiIE1jQlNQJWQgUmVnaXN0ZXJcbiIsIG1jYnNwLT5pZCk7CiAJCQkJcmV0dXJuIC0yOwogCQkJfQogCQl9CkBAIC0zNzksMTQgKzQyMiwxNiBAQAogCiBpbnQgb21hcF9tY2JzcF9wb2xscmVhZCh1bnNpZ25lZCBpbnQgaWQsIHUxNiAqYnVmKQogewotCXUzMiBiYXNlOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKLQliYXNlID0gbWNic3BbaWRdLmlvX2Jhc2U7CisJYmFzZSA9IG1jYnNwLT5pb19iYXNlOwogCS8qIGlmIGZyYW1lIHN5bmMgZXJyb3IgLSBjbGVhciB0aGUgZXJyb3IgKi8KIAlpZiAocmVhZHcoYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IxKSAmIFJTWU5DX0VSUikgewogCQkvKiBjbGVhciBlcnJvciAqLwpAQCAtNDA3LDggKzQ1Miw4IEBACiAJCQkJICAgICAgIChSUlNUKSwKIAkJCQkgICAgICAgYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IxKTsKIAkJCQl1ZGVsYXkoMTApOwotCQkJCWRldl9lcnIobWNic3BbaWRdLmRldiwgIkNvdWxkIG5vdCByZWFkIGZyb20iCi0JCQkJCSIgTWNCU1AlZCBSZWdpc3RlclxuIiwgbWNic3BbaWRdLmlkKTsKKwkJCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJDb3VsZCBub3QgcmVhZCBmcm9tIgorCQkJCQkiIE1jQlNQJWQgUmVnaXN0ZXJcbiIsIG1jYnNwLT5pZCk7CiAJCQkJcmV0dXJuIC0yOwogCQkJfQogCQl9CkBAIC00MjQsNyArNDY5LDggQEAKICAqLwogdm9pZCBvbWFwX21jYnNwX3htaXRfd29yZCh1bnNpZ25lZCBpbnQgaWQsIHUzMiB3b3JkKQogewotCXUzMiBpb19iYXNlOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJb21hcF9tY2JzcF93b3JkX2xlbmd0aCB3b3JkX2xlbmd0aDsKIAogCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKQEAgLTQzMiwxMCArNDc4LDExIEBACiAJCXJldHVybjsKIAl9CiAKLQlpb19iYXNlID0gbWNic3BbaWRdLmlvX2Jhc2U7Ci0Jd29yZF9sZW5ndGggPSBtY2JzcFtpZF0udHhfd29yZF9sZW5ndGg7CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKKwl3b3JkX2xlbmd0aCA9IG1jYnNwLT50eF93b3JkX2xlbmd0aDsKIAotCXdhaXRfZm9yX2NvbXBsZXRpb24oJihtY2JzcFtpZF0udHhfaXJxX2NvbXBsZXRpb24pKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtY2JzcC0+dHhfaXJxX2NvbXBsZXRpb24pOwogCiAJaWYgKHdvcmRfbGVuZ3RoID4gT01BUF9NQ0JTUF9XT1JEXzE2KQogCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIERYUjIsIHdvcmQgPj4gMTYpOwpAQCAtNDQ1LDcgKzQ5Miw4IEBACiAKIHUzMiBvbWFwX21jYnNwX3JlY3Zfd29yZCh1bnNpZ25lZCBpbnQgaWQpCiB7Ci0JdTMyIGlvX2Jhc2U7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOworCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKIAl1MTYgd29yZF9sc2IsIHdvcmRfbXNiID0gMDsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHdvcmRfbGVuZ3RoOwogCkBAIC00NTMsMTEgKzUwMSwxMiBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCi0Jd29yZF9sZW5ndGggPSBtY2JzcFtpZF0ucnhfd29yZF9sZW5ndGg7Ci0JaW9fYmFzZSA9IG1jYnNwW2lkXS5pb19iYXNlOworCXdvcmRfbGVuZ3RoID0gbWNic3AtPnJ4X3dvcmRfbGVuZ3RoOworCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAotCXdhaXRfZm9yX2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfaXJxX2NvbXBsZXRpb24pKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtY2JzcC0+cnhfaXJxX2NvbXBsZXRpb24pOwogCiAJaWYgKHdvcmRfbGVuZ3RoID4gT01BUF9NQ0JTUF9XT1JEXzE2KQogCQl3b3JkX21zYiA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBEUlIyKTsKQEAgLTQ2OSw3ICs1MTgsOCBAQAogCiBpbnQgb21hcF9tY2JzcF9zcGlfbWFzdGVyX3htaXRfd29yZF9wb2xsKHVuc2lnbmVkIGludCBpZCwgdTMyIHdvcmQpCiB7Ci0JdTMyIGlvX2Jhc2U7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOworCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHR4X3dvcmRfbGVuZ3RoOwogCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggcnhfd29yZF9sZW5ndGg7CiAJdTE2IHNwY3IyLCBzcGNyMSwgYXR0ZW1wdHMgPSAwLCB3b3JkX2xzYiwgd29yZF9tc2IgPSAwOwpAQCAtNDc4LDEwICs1MjgsMTAgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCi0JaW9fYmFzZSA9IG1jYnNwW2lkXS5pb19iYXNlOwotCXR4X3dvcmRfbGVuZ3RoID0gbWNic3BbaWRdLnR4X3dvcmRfbGVuZ3RoOwotCXJ4X3dvcmRfbGVuZ3RoID0gbWNic3BbaWRdLnJ4X3dvcmRfbGVuZ3RoOworCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKKwlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CisJdHhfd29yZF9sZW5ndGggPSBtY2JzcC0+dHhfd29yZF9sZW5ndGg7CisJcnhfd29yZF9sZW5ndGggPSBtY2JzcC0+cnhfd29yZF9sZW5ndGg7CiAKIAlpZiAodHhfd29yZF9sZW5ndGggIT0gcnhfd29yZF9sZW5ndGgpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDk2LDggKzU0Niw4IEBACiAJCQl1ZGVsYXkoMTApOwogCQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMiwgc3BjcjIgfCBYUlNUKTsKIAkJCXVkZWxheSgxMCk7Ci0JCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJNY0JTUCVkIHRyYW5zbWl0dGVyIG5vdCAiCi0JCQkJInJlYWR5XG4iLCBtY2JzcFtpZF0uaWQpOworCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AlZCB0cmFuc21pdHRlciBub3QgIgorCQkJCSJyZWFkeVxuIiwgbWNic3AtPmlkKTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAJfQpAQCAtNTE3LDggKzU2Nyw4IEBACiAJCQl1ZGVsYXkoMTApOwogCQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMSwgc3BjcjEgfCBSUlNUKTsKIAkJCXVkZWxheSgxMCk7Ci0JCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJNY0JTUCVkIHJlY2VpdmVyIG5vdCAiCi0JCQkJInJlYWR5XG4iLCBtY2JzcFtpZF0uaWQpOworCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AlZCByZWNlaXZlciBub3QgIgorCQkJCSJyZWFkeVxuIiwgbWNic3AtPmlkKTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAJfQpAQCAtNTM0LDcgKzU4NCw5IEBACiAKIGludCBvbWFwX21jYnNwX3NwaV9tYXN0ZXJfcmVjdl93b3JkX3BvbGwodW5zaWduZWQgaW50IGlkLCB1MzIgKndvcmQpCiB7Ci0JdTMyIGlvX2Jhc2UsIGNsb2NrX3dvcmQgPSAwOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl1MzIgY2xvY2tfd29yZCA9IDA7CisJdm9pZCBfX2lvbWVtICppb19iYXNlOwogCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggdHhfd29yZF9sZW5ndGg7CiAJb21hcF9tY2JzcF93b3JkX2xlbmd0aCByeF93b3JkX2xlbmd0aDsKIAl1MTYgc3BjcjIsIHNwY3IxLCBhdHRlbXB0cyA9IDAsIHdvcmRfbHNiLCB3b3JkX21zYiA9IDA7CkBAIC01NDQsOSArNTk2LDExIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlvX2Jhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKLQl0eF93b3JkX2xlbmd0aCA9IG1jYnNwW2lkXS50eF93b3JkX2xlbmd0aDsKLQlyeF93b3JkX2xlbmd0aCA9IG1jYnNwW2lkXS5yeF93b3JkX2xlbmd0aDsKKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisJaW9fYmFzZSA9IG1jYnNwLT5pb19iYXNlOworCisJdHhfd29yZF9sZW5ndGggPSBtY2JzcC0+dHhfd29yZF9sZW5ndGg7CisJcnhfd29yZF9sZW5ndGggPSBtY2JzcC0+cnhfd29yZF9sZW5ndGg7CiAKIAlpZiAodHhfd29yZF9sZW5ndGggIT0gcnhfd29yZF9sZW5ndGgpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTYxLDggKzYxNSw4IEBACiAJCQl1ZGVsYXkoMTApOwogCQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMiwgc3BjcjIgfCBYUlNUKTsKIAkJCXVkZWxheSgxMCk7Ci0JCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJNY0JTUCVkIHRyYW5zbWl0dGVyIG5vdCAiCi0JCQkJInJlYWR5XG4iLCBtY2JzcFtpZF0uaWQpOworCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AlZCB0cmFuc21pdHRlciBub3QgIgorCQkJCSJyZWFkeVxuIiwgbWNic3AtPmlkKTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAJfQpAQCAtNTgyLDggKzYzNiw4IEBACiAJCQl1ZGVsYXkoMTApOwogCQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMSwgc3BjcjEgfCBSUlNUKTsKIAkJCXVkZWxheSgxMCk7Ci0JCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJNY0JTUCVkIHJlY2VpdmVyIG5vdCAiCi0JCQkJInJlYWR5XG4iLCBtY2JzcFtpZF0uaWQpOworCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AlZCByZWNlaXZlciBub3QgIgorCQkJCSJyZWFkeVxuIiwgbWNic3AtPmlkKTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAJfQpAQCAtNjA5LDYgKzY2Myw3IEBACiBpbnQgb21hcF9tY2JzcF94bWl0X2J1ZmZlcih1bnNpZ25lZCBpbnQgaWQsIGRtYV9hZGRyX3QgYnVmZmVyLAogCQkJCXVuc2lnbmVkIGludCBsZW5ndGgpCiB7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwogCWludCBkbWFfdHhfY2g7CiAJaW50IHNyY19wb3J0ID0gMDsKIAlpbnQgZGVzdF9wb3J0ID0gMDsKQEAgLTYxOCw1MCArNjczLDUxIEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKLQlpZiAob21hcF9yZXF1ZXN0X2RtYShtY2JzcFtpZF0uZG1hX3R4X3N5bmMsICJNY0JTUCBUWCIsCisJaWYgKG9tYXBfcmVxdWVzdF9kbWEobWNic3AtPmRtYV90eF9zeW5jLCAiTWNCU1AgVFgiLAogCQkJCW9tYXBfbWNic3BfdHhfZG1hX2NhbGxiYWNrLAotCQkJCSZtY2JzcFtpZF0sCisJCQkJbWNic3AsCiAJCQkJJmRtYV90eF9jaCkpIHsKLQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiIFVuYWJsZSB0byByZXF1ZXN0IERNQSBjaGFubmVsIGZvciAiCisJCWRldl9lcnIobWNic3AtPmRldiwgIiBVbmFibGUgdG8gcmVxdWVzdCBETUEgY2hhbm5lbCBmb3IgIgogCQkJCSJNY0JTUCVkIFRYLiBUcnlpbmcgSVJRIGJhc2VkIFRYXG4iLAotCQkJCW1jYnNwW2lkXS5pZCk7CisJCQkJbWNic3AtPmlkKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQotCW1jYnNwW2lkXS5kbWFfdHhfbGNoID0gZG1hX3R4X2NoOworCW1jYnNwLT5kbWFfdHhfbGNoID0gZG1hX3R4X2NoOwogCi0JZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiTWNCU1AlZCBUWCBETUEgb24gY2hhbm5lbCAlZFxuIiwgbWNic3BbaWRdLmlkLAorCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgVFggRE1BIG9uIGNoYW5uZWwgJWRcbiIsIG1jYnNwLT5pZCwKIAkJZG1hX3R4X2NoKTsKIAotCWluaXRfY29tcGxldGlvbigmKG1jYnNwW2lkXS50eF9kbWFfY29tcGxldGlvbikpOworCWluaXRfY29tcGxldGlvbigmbWNic3AtPnR4X2RtYV9jb21wbGV0aW9uKTsKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewogCQlzcmNfcG9ydCA9IE9NQVBfRE1BX1BPUlRfVElQQjsKIAkJZGVzdF9wb3J0ID0gT01BUF9ETUFfUE9SVF9FTUlGRjsKIAl9CiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKQotCQlzeW5jX2RldiA9IG1jYnNwW2lkXS5kbWFfdHhfc3luYzsKKwkJc3luY19kZXYgPSBtY2JzcC0+ZG1hX3R4X3N5bmM7CiAKLQlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKG1jYnNwW2lkXS5kbWFfdHhfbGNoLAorCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMobWNic3AtPmRtYV90eF9sY2gsCiAJCQkJICAgICBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2LAogCQkJCSAgICAgbGVuZ3RoID4+IDEsIDEsCiAJCQkJICAgICBPTUFQX0RNQV9TWU5DX0VMRU1FTlQsCiAJIHN5bmNfZGV2LCAwKTsKIAotCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhtY2JzcFtpZF0uZG1hX3R4X2xjaCwKKwlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMobWNic3AtPmRtYV90eF9sY2gsCiAJCQkJIHNyY19wb3J0LAogCQkJCSBPTUFQX0RNQV9BTU9ERV9DT05TVEFOVCwKLQkJCQkgbWNic3BbaWRdLnBoeXNfYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RYUjEsCisJCQkJIG1jYnNwLT5waHlzX2Jhc2UgKyBPTUFQX01DQlNQX1JFR19EWFIxLAogCQkJCSAwLCAwKTsKIAotCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKG1jYnNwW2lkXS5kbWFfdHhfbGNoLAorCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKG1jYnNwLT5kbWFfdHhfbGNoLAogCQkJCWRlc3RfcG9ydCwKIAkJCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKIAkJCQlidWZmZXIsCiAJCQkJMCwgMCk7CiAKLQlvbWFwX3N0YXJ0X2RtYShtY2JzcFtpZF0uZG1hX3R4X2xjaCk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmKG1jYnNwW2lkXS50eF9kbWFfY29tcGxldGlvbikpOworCW9tYXBfc3RhcnRfZG1hKG1jYnNwLT5kbWFfdHhfbGNoKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtY2JzcC0+dHhfZG1hX2NvbXBsZXRpb24pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NzAsNiArNzI2LDcgQEAKIGludCBvbWFwX21jYnNwX3JlY3ZfYnVmZmVyKHVuc2lnbmVkIGludCBpZCwgZG1hX2FkZHJfdCBidWZmZXIsCiAJCQkJdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CiAJaW50IGRtYV9yeF9jaDsKIAlpbnQgc3JjX3BvcnQgPSAwOwogCWludCBkZXN0X3BvcnQgPSAwOwpAQCAtNjc5LDUwICs3MzYsNTEgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKIAotCWlmIChvbWFwX3JlcXVlc3RfZG1hKG1jYnNwW2lkXS5kbWFfcnhfc3luYywgIk1jQlNQIFJYIiwKKwlpZiAob21hcF9yZXF1ZXN0X2RtYShtY2JzcC0+ZG1hX3J4X3N5bmMsICJNY0JTUCBSWCIsCiAJCQkJb21hcF9tY2JzcF9yeF9kbWFfY2FsbGJhY2ssCi0JCQkJJm1jYnNwW2lkXSwKKwkJCQltY2JzcCwKIAkJCQkmZG1hX3J4X2NoKSkgewotCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCBETUEgY2hhbm5lbCBmb3IgIgorCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCBETUEgY2hhbm5lbCBmb3IgIgogCQkJCSJNY0JTUCVkIFJYLiBUcnlpbmcgSVJRIGJhc2VkIFJYXG4iLAotCQkJCW1jYnNwW2lkXS5pZCk7CisJCQkJbWNic3AtPmlkKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQotCW1jYnNwW2lkXS5kbWFfcnhfbGNoID0gZG1hX3J4X2NoOworCW1jYnNwLT5kbWFfcnhfbGNoID0gZG1hX3J4X2NoOwogCi0JZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiTWNCU1AlZCBSWCBETUEgb24gY2hhbm5lbCAlZFxuIiwgbWNic3BbaWRdLmlkLAorCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgUlggRE1BIG9uIGNoYW5uZWwgJWRcbiIsIG1jYnNwLT5pZCwKIAkJZG1hX3J4X2NoKTsKIAotCWluaXRfY29tcGxldGlvbigmKG1jYnNwW2lkXS5yeF9kbWFfY29tcGxldGlvbikpOworCWluaXRfY29tcGxldGlvbigmbWNic3AtPnJ4X2RtYV9jb21wbGV0aW9uKTsKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewogCQlzcmNfcG9ydCA9IE9NQVBfRE1BX1BPUlRfVElQQjsKIAkJZGVzdF9wb3J0ID0gT01BUF9ETUFfUE9SVF9FTUlGRjsKIAl9CiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKQotCQlzeW5jX2RldiA9IG1jYnNwW2lkXS5kbWFfcnhfc3luYzsKKwkJc3luY19kZXYgPSBtY2JzcC0+ZG1hX3J4X3N5bmM7CiAKLQlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKG1jYnNwW2lkXS5kbWFfcnhfbGNoLAorCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMobWNic3AtPmRtYV9yeF9sY2gsCiAJCQkJCU9NQVBfRE1BX0RBVEFfVFlQRV9TMTYsCiAJCQkJCWxlbmd0aCA+PiAxLCAxLAogCQkJCQlPTUFQX0RNQV9TWU5DX0VMRU1FTlQsCiAJCQkJCXN5bmNfZGV2LCAwKTsKIAotCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKG1jYnNwW2lkXS5kbWFfcnhfbGNoLAorCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKG1jYnNwLT5kbWFfcnhfbGNoLAogCQkJCXNyY19wb3J0LAogCQkJCU9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAotCQkJCW1jYnNwW2lkXS5waHlzX2Jhc2UgKyBPTUFQX01DQlNQX1JFR19EUlIxLAorCQkJCW1jYnNwLT5waHlzX2Jhc2UgKyBPTUFQX01DQlNQX1JFR19EUlIxLAogCQkJCTAsIDApOwogCi0Jb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKG1jYnNwW2lkXS5kbWFfcnhfbGNoLAorCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhtY2JzcC0+ZG1hX3J4X2xjaCwKIAkJCQkJZGVzdF9wb3J0LAogCQkJCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKIAkJCQkJYnVmZmVyLAogCQkJCQkwLCAwKTsKIAotCW9tYXBfc3RhcnRfZG1hKG1jYnNwW2lkXS5kbWFfcnhfbGNoKTsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCYobWNic3BbaWRdLnJ4X2RtYV9jb21wbGV0aW9uKSk7CisJb21hcF9zdGFydF9kbWEobWNic3AtPmRtYV9yeF9sY2gpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1jYnNwLT5yeF9kbWFfY29tcGxldGlvbik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTczNywxMiArNzk1LDE0IEBACiB2b2lkIG9tYXBfbWNic3Bfc2V0X3NwaV9tb2RlKHVuc2lnbmVkIGludCBpZCwKIAkJCQljb25zdCBzdHJ1Y3Qgb21hcF9tY2JzcF9zcGlfY2ZnICpzcGlfY2ZnKQogeworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9yZWdfY2ZnIG1jYnNwX2NmZzsKIAogCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKIAkJcmV0dXJuOwogCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKIAltZW1zZXQoJm1jYnNwX2NmZywgMCwgc2l6ZW9mKHN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcpKTsKIApAQCAtODAzLDkgKzg2MywxMCBAQAogICogTWNCU1AxIGFuZCBNY0JTUDMgYXJlIGRpcmVjdGx5IG1hcHBlZCBvbiAxNjEwIGFuZCAxNTEwLgogICogNzMwIGhhcyBvbmx5IDIgTWNCU1AsIGFuZCBib3RoIG9mIHRoZW0gYXJlIE1QVSBwZXJpcGhlcmFscy4KICAqLwotc3RhdGljIGludCBfX2luaXQgb21hcF9tY2JzcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgb21hcF9tY2JzcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwogCWludCBpZCA9IHBkZXYtPmlkIC0gMTsKIAlpbnQgcmV0ID0gMDsKIApAQCAtODE4LDQ3ICs4NzksNjMgQEAKIAogCWRldl9kYmcoJnBkZXYtPmRldiwgIkluaXRpYWxpemluZyBPTUFQIE1jQlNQICglZCkuXG4iLCBwZGV2LT5pZCk7CiAKLQlpZiAoaWQgPj0gT01BUF9NQVhfTUNCU1BfQ09VTlQpIHsKKwlpZiAoaWQgPj0gb21hcF9tY2JzcF9jb3VudCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIE1jQlNQIGRldmljZSBpZCAoJWQpXG4iLCBpZCk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlzcGluX2xvY2tfaW5pdCgmbWNic3BbaWRdLmxvY2spOwotCW1jYnNwW2lkXS5pZCA9IGlkICsgMTsKLQltY2JzcFtpZF0uZnJlZSA9IDE7Ci0JbWNic3BbaWRdLmRtYV90eF9sY2ggPSAtMTsKLQltY2JzcFtpZF0uZG1hX3J4X2xjaCA9IC0xOwotCi0JbWNic3BbaWRdLnBoeXNfYmFzZSA9IHBkYXRhLT5waHlzX2Jhc2U7Ci0JbWNic3BbaWRdLmlvX2Jhc2UgPSBwZGF0YS0+dmlydF9iYXNlOwotCS8qIERlZmF1bHQgSS9PIGlzIElSUSBiYXNlZCAqLwotCW1jYnNwW2lkXS5pb190eXBlID0gT01BUF9NQ0JTUF9JUlFfSU87Ci0JbWNic3BbaWRdLnR4X2lycSA9IHBkYXRhLT50eF9pcnE7Ci0JbWNic3BbaWRdLnJ4X2lycSA9IHBkYXRhLT5yeF9pcnE7Ci0JbWNic3BbaWRdLmRtYV9yeF9zeW5jID0gcGRhdGEtPmRtYV9yeF9zeW5jOwotCW1jYnNwW2lkXS5kbWFfdHhfc3luYyA9IHBkYXRhLT5kbWFfdHhfc3luYzsKLQotCWlmIChwZGF0YS0+Y2xrX25hbWUpCi0JCW1jYnNwW2lkXS5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIHBkYXRhLT5jbGtfbmFtZSk7Ci0JaWYgKElTX0VSUihtY2JzcFtpZF0uY2xrKSkgewotCQltY2JzcFtpZF0uZnJlZSA9IDA7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJJbnZhbGlkIGNsb2NrIGNvbmZpZ3VyYXRpb24gZm9yIE1jQlNQJWQuXG4iLAotCQkJbWNic3BbaWRdLmlkKTsKLQkJcmV0ID0gLUVJTlZBTDsKKwltY2JzcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX21jYnNwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtY2JzcCkgeworCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXQ7CiAJfQorCW1jYnNwX3B0cltpZF0gPSBtY2JzcDsKIAotCW1jYnNwW2lkXS5wZGF0YSA9IHBkYXRhOwotCW1jYnNwW2lkXS5kZXYgPSAmcGRldi0+ZGV2OwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsICZtY2JzcFtpZF0pOworCXNwaW5fbG9ja19pbml0KCZtY2JzcC0+bG9jayk7CisJbWNic3AtPmlkID0gaWQgKyAxOworCW1jYnNwLT5mcmVlID0gMTsKKwltY2JzcC0+ZG1hX3R4X2xjaCA9IC0xOworCW1jYnNwLT5kbWFfcnhfbGNoID0gLTE7CiAKKwltY2JzcC0+cGh5c19iYXNlID0gcGRhdGEtPnBoeXNfYmFzZTsKKwltY2JzcC0+aW9fYmFzZSA9IGlvcmVtYXAocGRhdGEtPnBoeXNfYmFzZSwgU1pfNEspOworCWlmICghbWNic3AtPmlvX2Jhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwkvKiBEZWZhdWx0IEkvTyBpcyBJUlEgYmFzZWQgKi8KKwltY2JzcC0+aW9fdHlwZSA9IE9NQVBfTUNCU1BfSVJRX0lPOworCW1jYnNwLT50eF9pcnEgPSBwZGF0YS0+dHhfaXJxOworCW1jYnNwLT5yeF9pcnEgPSBwZGF0YS0+cnhfaXJxOworCW1jYnNwLT5kbWFfcnhfc3luYyA9IHBkYXRhLT5kbWFfcnhfc3luYzsKKwltY2JzcC0+ZG1hX3R4X3N5bmMgPSBwZGF0YS0+ZG1hX3R4X3N5bmM7CisKKwlpZiAocGRhdGEtPmNsa19uYW1lKQorCQltY2JzcC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBwZGF0YS0+Y2xrX25hbWUpOworCWlmIChJU19FUlIobWNic3AtPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkludmFsaWQgY2xvY2sgY29uZmlndXJhdGlvbiBmb3IgTWNCU1AlZC5cbiIsCisJCQltY2JzcC0+aWQpOworCQlyZXQgPSBQVFJfRVJSKG1jYnNwLT5jbGspOworCQlnb3RvIGVycl9jbGs7CisJfQorCisJbWNic3AtPnBkYXRhID0gcGRhdGE7CisJbWNic3AtPmRldiA9ICZwZGV2LT5kZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWNic3ApOworCXJldHVybiAwOworCitlcnJfY2xrOgorCWlvdW5tYXAobWNic3AtPmlvX2Jhc2UpOworZXJyX2lvcmVtYXA6CisJbWNic3AtPmZyZWUgPSAwOwogZXhpdDoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9tYXBfbWNic3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBvbWFwX21jYnNwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCkBAIC04NzIsNiArOTQ5LDggQEAKIAkJY2xrX2Rpc2FibGUobWNic3AtPmNsayk7CiAJCWNsa19wdXQobWNic3AtPmNsayk7CiAKKwkJaW91bm1hcChtY2JzcC0+aW9fYmFzZSk7CisKIAkJbWNic3AtPmNsayA9IE5VTEw7CiAJCW1jYnNwLT5mcmVlID0gMDsKIAkJbWNic3AtPmRldiA9IE5VTEw7CkBAIC04ODIsNyArOTYxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9tY2JzcF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9tYXBfbWNic3BfcHJvYmUsCi0JLnJlbW92ZQkJPSBvbWFwX21jYnNwX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG9tYXBfbWNic3BfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAib21hcC1tY2JzcCIsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IGUwMDAzZTAuLjlmOWE5MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtMjcxLDcgKzI3MSw3IEBACiAjZGVmaW5lIG9tYXAxX3NyYW1faW5pdCgpCWRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCiAKIHN0YXRpYyB2b2lkICgqX29tYXAyX3NyYW1fZGRyX2luaXQpKHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCiAJCQkgICAgICB1MzIgYmFzZV9jcywgdTMyIGZvcmNlX3VubG9jayk7CkBAIC0zNTIsMjMgKzM1MiwxOSBAQAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKIAotc3RhdGljIHUzMiAoKl9vbWFwMl9zcmFtX3JlcHJvZ3JhbV9ncG1jKSh1MzIgcGVyZl9sZXZlbCk7Ci11MzIgb21hcDJfc3JhbV9yZXByb2dyYW1fZ3BtYyh1MzIgcGVyZl9sZXZlbCkKK3N0YXRpYyB1MzIgKCpfb21hcDNfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsKSh1MzIgc2RyY19yZnJfY3RybCwKKwkJCQkJICAgICAgdTMyIHNkcmNfYWN0aW1fY3RybGEsCisJCQkJCSAgICAgIHUzMiBzZHJjX2FjdGltX2N0cmxiLAorCQkJCQkgICAgICB1MzIgbTIpOwordTMyIG9tYXAzX2NvbmZpZ3VyZV9jb3JlX2RwbGwodTMyIHNkcmNfcmZyX2N0cmwsIHUzMiBzZHJjX2FjdGltX2N0cmxhLAorCQkJICAgICAgdTMyIHNkcmNfYWN0aW1fY3RybGIsIHUzMiBtMikKIHsKLQlpZiAoIV9vbWFwMl9zcmFtX3JlcHJvZ3JhbV9ncG1jKQorCWlmICghX29tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCkKIAkJb21hcF9zcmFtX2Vycm9yKCk7CiAKLQlyZXR1cm4gX29tYXAyX3NyYW1fcmVwcm9ncmFtX2dwbWMocGVyZl9sZXZlbCk7Ci19Ci0KLXN0YXRpYyB1MzIgKCpfb21hcDJfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsKSh1MzIgbSwgdTMyIG4sCi0JCQkJCQl1MzIgZnJlcXNlbCwgdTMyIG0yKTsKLXUzMiBvbWFwMl9zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwodTMyIG0sIHUzMiBuLCB1MzIgZnJlcXNlbCwgdTMyIG0yKQotewotCWlmICghX29tYXAyX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCkKLQkJb21hcF9zcmFtX2Vycm9yKCk7Ci0KLQlyZXR1cm4gX29tYXAyX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbChtLCBuLCBmcmVxc2VsLCBtMik7CisJcmV0dXJuIF9vbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwoc2RyY19yZnJfY3RybCwKKwkJCQkJICAgICAgIHNkcmNfYWN0aW1fY3RybGEsCisJCQkJCSAgICAgICBzZHJjX2FjdGltX2N0cmxiLCBtMik7CiB9CiAKIC8qIFJFVklTSVQ6IFNob3VsZCB0aGlzIGJlIHNhbWUgYXMgb21hcDM0eHhfc3JhbV9pbml0KCkgYWZ0ZXIgb2ZmLWlkbGU/ICovCkBAIC0zNzYsMzEgKzM3MiwxNiBAQAogewogCW9tYXBfc3JhbV9jZWlsID0gb21hcF9zcmFtX2Jhc2UgKyBvbWFwX3NyYW1fc2l6ZTsKIAotCV9vbWFwMl9zcmFtX3JlcHJvZ3JhbV9ncG1jID0gb21hcF9zcmFtX3B1c2gob21hcDM0eHhfc3JhbV9yZXByb2dyYW1fZ3BtYywKLQkJb21hcDM0eHhfc3JhbV9yZXByb2dyYW1fZ3BtY19zeik7Ci0KLQlfb21hcDJfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsID0KLQkJCW9tYXBfc3JhbV9wdXNoKG9tYXAzNHh4X3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCwKLQkJCQkJb21hcDM0eHhfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsX3N6KTsKKwlfb21hcDNfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsID0KKwkJb21hcF9zcmFtX3B1c2gob21hcDNfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsLAorCQkJICAgICAgIG9tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbF9zeik7CiB9CiAKIGludCBfX2luaXQgb21hcDM0eHhfc3JhbV9pbml0KHZvaWQpCiB7Ci0JX29tYXAyX3NyYW1fZGRyX2luaXQgPSBvbWFwX3NyYW1fcHVzaChvbWFwMzR4eF9zcmFtX2Rkcl9pbml0LAotCQkJCQlvbWFwMzR4eF9zcmFtX2Rkcl9pbml0X3N6KTsKLQotCV9vbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjID0gb21hcF9zcmFtX3B1c2gob21hcDM0eHhfc3JhbV9yZXByb2dyYW1fc2RyYywKLQkJCQkJb21hcDM0eHhfc3JhbV9yZXByb2dyYW1fc2RyY19zeik7Ci0KLQlfb21hcDJfc2V0X3ByY20gPSBvbWFwX3NyYW1fcHVzaChvbWFwMzR4eF9zcmFtX3NldF9wcmNtLAotCQkJCQlvbWFwMzR4eF9zcmFtX3NldF9wcmNtX3N6KTsKLQotCV9vbWFwMl9zcmFtX3JlcHJvZ3JhbV9ncG1jID0gb21hcF9zcmFtX3B1c2gob21hcDM0eHhfc3JhbV9yZXByb2dyYW1fZ3BtYywKLQkJCQkJb21hcDM0eHhfc3JhbV9yZXByb2dyYW1fZ3BtY19zeik7Ci0KLQlfb21hcDJfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsID0KLQkJCQlvbWFwX3NyYW1fcHVzaChvbWFwMzR4eF9zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwsCi0JCQkJCW9tYXAzNHh4X3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbF9zeik7CisJX29tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCA9CisJCW9tYXBfc3JhbV9wdXNoKG9tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCwKKwkJCSAgICAgICBvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGxfc3opOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtczNjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwM2Q3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKKyMgZHVtbXkgbWFrZWZpbGUsIGN1cnJlbnRseSBqdXN0IGluY2x1ZGluZyBhc20vYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdAorCitvYmotbgk6PSBkdW1teS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYTdlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDc1IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvZGVidWctbWFjcm8uUworICoKKyAqIENvcHlyaWdodCAyMDA1LCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKworLyogVGhlIFMzQzI0NDAgaW1wbGVtZW50YXRpb25zIGFyZSB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhleSBhcmUgdGhlCisgKiBtb3N0IHdpZGVseSByZS11c2VkICovCisKKwkubWFjcm8gZmlmb19sZXZlbF9zM2MyNDQwIHJkLCByeAorCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VGU1RBVCBdCisJCWFuZAlccmQsIFxyZCwgI1MzQzI0NDBfVUZTVEFUX1RYTUFTSworCS5lbmRtCisKKyNpZm5kZWYgZmlmb19sZXZlbAorI2RlZmluZSBmaWZvX2xldmVsIGZpZm9fbGV2ZWxfczNjMjQxMAorI2VuZGlmCisKKwkubWFjcm8gIGZpZm9fZnVsbF9zM2MyNDQwIHJkLCByeAorCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VGU1RBVCBdCisJCXRzdAlccmQsICNTM0MyNDQwX1VGU1RBVF9UWEZVTEwKKwkuZW5kbQorCisjaWZuZGVmIGZpZm9fZnVsbAorI2RlZmluZSBmaWZvX2Z1bGwgZmlmb19mdWxsX3MzYzI0NDAKKyNlbmRpZgorCisJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CisJCXN0cmIgCVxyZCwgW1xyeCwgIyBTM0MyNDEwX1VUWEggXQorCS5lbmRtCisKKwkubWFjcm8JYnVzeXVhcnQsIHJkLCByeAorCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VGQ09OIF0KKwkJdHN0CVxyZCwgI1MzQzI0MTBfVUZDT05fRklGT01PREUJQCBmaWZvIGVuYWJsZWQ/CisJCWJlcQkxMDAxZgkJCQlACisJCUAgRklGTyBlbmFibGVkLi4uCisxMDAzOgorCQlmaWZvX2Z1bGwgXHJkLCBccngKKwkJYm5lCTEwMDNiCisJCWIJMTAwMmYKKworMTAwMToKKwkJQCBidXN5IHdhaXRpbmcgZm9yIG5vbiBmaWZvCisJCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVVRSU1RBVCBdCisJCXRzdAlccmQsICNTM0MyNDEwX1VUUlNUQVRfVFhGRQorCQliZXEJMTAwMWIKKworMTAwMjoJCUAgZXhpdCBidXN5dWFydAorCS5lbmRtCisKKwkubWFjcm8Jd2FpdHVhcnQscmQscngKKwkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRkNPTiBdCisJCXRzdAlccmQsICNTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCUAgZmlmbyBlbmFibGVkPworCQliZXEJMTAwMWYJCQkJQAorCQlAIEZJRk8gZW5hYmxlZC4uLgorMTAwMzoKKwkJZmlmb19sZXZlbCBccmQsIFxyeAorCQl0ZXEJXHJkLCAjMAorCQlibmUJMTAwM2IKKwkJYgkxMDAyZgorMTAwMToKKwkJQCBpZGxlIHdhaXRpbmcgZm9yIG5vbiBmaWZvCisJCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVVRSU1RBVCBdCisJCXRzdAlccmQsICNTM0MyNDEwX1VUUlNUQVRfVFhGRQorCQliZXEJMTAwMWIKKworMTAwMjoJCUAgZXhpdCBidXN5dWFydAorCS5lbmRtCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvbWFwLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvbWFwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9tYXAuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L21hcC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvcmVncy1hZGMuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLWFkYy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvcmVncy1hZGMuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtYWRjLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3Mtc2VyaWFsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zZXJpYWwuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3JlZ3MtdGltZXIuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXRpbWVyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9yZWdzLXRpbWVyLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXRpbWVyLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZjAwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsMTU1IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvdW5jb21wcmVzcy5oCisgKgorICogQ29weXJpZ2h0IDIwMDMsIDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQyAtIHVuY29tcHJlc3MgY29kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX1BMQVRfVU5DT01QUkVTU19ICisjZGVmaW5lIF9fQVNNX1BMQVRfVU5DT01QUkVTU19ICisKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVwZl90OwkvKiBjYW5ub3QgaW5jbHVkZSBsaW51eC9zZXJpYWxfY29yZS5oICovCisKKy8qIHVhcnQgc2V0dXAgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBmaWZvX21hc2s7CitzdGF0aWMgdW5zaWduZWQgaW50IGZpZm9fbWF4OworCisvKiBmb3J3YXJkIGRlY2xlcmF0aW9ucyAqLworCitzdGF0aWMgdm9pZCBhcmNoX2RldGVjdF9jcHUodm9pZCk7CisKKy8qIGRlZmluZXMgZm9yIFVBUlQgcmVnaXN0ZXJzICovCisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtd2F0Y2hkb2cuaD4KKworLyogd29ya2luZyBpbiBwaHlzaWNhbCBzcGFjZS4uLiAqLworI3VuZGVmIFMzQzI0MTBfV0RPR1JFRworI2RlZmluZSBTM0MyNDEwX1dET0dSRUcoeCkgKChTM0MyNFhYX1BBX1dBVENIRE9HICsgKHgpKSkKKworLyogaG93IG1hbnkgYnl0ZXMgd2UgYWxsb3cgaW50byB0aGUgRklGTyBhdCBhIHRpbWUgaW4gRklGTyBtb2RlICovCisjZGVmaW5lIEZJRk9fTUFYCSAoMTQpCisKKyNkZWZpbmUgdWFydF9iYXNlIFMzQzI0WFhfUEFfVUFSVCArICgweDQwMDAqQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK3VhcnRfd3IodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnB0cjsKKworCXB0ciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikocmVnICsgdWFydF9iYXNlKTsKKwkqcHRyID0gdmFsOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQKK3VhcnRfcmQodW5zaWduZWQgaW50IHJlZykKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnB0cjsKKworCXB0ciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikocmVnICsgdWFydF9iYXNlKTsKKwlyZXR1cm4gKnB0cjsKK30KKworLyogd2UgY2FuIGRlYWwgd2l0aCB0aGUgY2FzZSB0aGUgVUFSVHMgYXJlIGJlaW5nIHJ1bgorICogaW4gRklGTyBtb2RlLCBzbyB0aGF0IHdlIGRvbid0IGhvbGQgdXAgb3VyIGV4ZWN1dGlvbgorICogd2FpdGluZyBmb3IgdHggdG8gaGFwcGVuLi4uCisqLworCitzdGF0aWMgdm9pZCBwdXRjKGludCBjaCkKK3sKKwlpZiAodWFydF9yZChTM0MyNDEwX1VGQ09OKSAmIFMzQzI0MTBfVUZDT05fRklGT01PREUpIHsKKwkJaW50IGxldmVsOworCisJCXdoaWxlICgxKSB7CisJCQlsZXZlbCA9IHVhcnRfcmQoUzNDMjQxMF9VRlNUQVQpOworCQkJbGV2ZWwgJj0gZmlmb19tYXNrOworCisJCQlpZiAobGV2ZWwgPCBmaWZvX21heCkKKwkJCQlicmVhazsKKwkJfQorCisJfSBlbHNlIHsKKwkJLyogbm90IHVzaW5nIGZpZm9zICovCisKKwkJd2hpbGUgKCh1YXJ0X3JkKFMzQzI0MTBfVVRSU1RBVCkgJiBTM0MyNDEwX1VUUlNUQVRfVFhFKSAhPSBTM0MyNDEwX1VUUlNUQVRfVFhFKQorCQkJYmFycmllcigpOworCX0KKworCS8qIHdyaXRlIGJ5dGUgdG8gdHJhbnNtaXNzaW9uIHJlZ2lzdGVyICovCisJdWFydF93cihTM0MyNDEwX1VUWEgsIGNoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCit7Cit9CisKKyNkZWZpbmUgX19yYXdfd3JpdGVsKGQsYWQpIGRvIHsgKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKGFkKSkgPSAoZCk7IH0gd2hpbGUoMCkKKworLyogQ09ORklHX1MzQ19CT09UX1dBVENIRE9HCisgKgorICogU2ltcGxlIGJvb3QtdGltZSB3YXRjaGRvZyBzZXR1cCwgdG8gcmVib290IHRoZSBzeXN0ZW0gaWYgdGhlcmUgaXMKKyAqIGFueSBwcm9ibGVtIHdpdGggdGhlIGJvb3QgcHJvY2VzcworKi8KKworI2lmZGVmIENPTkZJR19TM0NfQk9PVF9XQVRDSERPRworCisjZGVmaW5lIFdET0dfQ09VTlQgKDB4ZmYwMCkKKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3dkb2codm9pZCkKK3sKKwlfX3Jhd193cml0ZWwoV0RPR19DT1VOVCwgUzNDMjQxMF9XVENOVCk7Cit9CisKK3N0YXRpYyB2b2lkIGFyY2hfZGVjb21wX3dkb2dfc3RhcnQodm9pZCkKK3sKKwlfX3Jhd193cml0ZWwoV0RPR19DT1VOVCwgUzNDMjQxMF9XVERBVCk7CisJX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1RDTlQpOworCV9fcmF3X3dyaXRlbChTM0MyNDEwX1dUQ09OX0VOQUJMRSB8IFMzQzI0MTBfV1RDT05fRElWMTI4IHwgUzNDMjQxMF9XVENPTl9SU1RFTiB8IFMzQzI0MTBfV1RDT05fUFJFU0NBTEUoMHg4MCksIFMzQzI0MTBfV1RDT04pOworfQorCisjZWxzZQorI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nX3N0YXJ0KCkKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TM0NfQk9PVF9FUlJPUl9SRVNFVAorCitzdGF0aWMgdm9pZCBhcmNoX2RlY29tcF9lcnJvcihjb25zdCBjaGFyICp4KQoreworCXB1dHN0cigiXG5cbiIpOworCXB1dHN0cih4KTsKKwlwdXRzdHIoIlxuXG4gLS0gU3lzdGVtIHJlc2V0dGluZ1xuIik7CisKKwlfX3Jhd193cml0ZWwoMHg0MDAwLCBTM0MyNDEwX1dUREFUKTsKKwlfX3Jhd193cml0ZWwoMHg0MDAwLCBTM0MyNDEwX1dUQ05UKTsKKwlfX3Jhd193cml0ZWwoUzNDMjQxMF9XVENPTl9FTkFCTEUgfCBTM0MyNDEwX1dUQ09OX0RJVjEyOCB8IFMzQzI0MTBfV1RDT05fUlNURU4gfCBTM0MyNDEwX1dUQ09OX1BSRVNDQUxFKDB4NDApLCBTM0MyNDEwX1dUQ09OKTsKKworCXdoaWxlKDEpOworfQorCisjZGVmaW5lIGFyY2hfZXJyb3IgYXJjaF9kZWNvbXBfZXJyb3IKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBlcnJvcihjaGFyICplcnIpOworCitzdGF0aWMgdm9pZAorYXJjaF9kZWNvbXBfc2V0dXAodm9pZCkKK3sKKwkvKiB3ZSBtYXkgbmVlZCB0byBzZXR1cCB0aGUgdWFydChzKSBoZXJlIGlmIHdlIGFyZSBub3QgcnVubmluZworCSAqIG9uIGFuIEJBU1QuLi4gdGhlIEJBU1Qgd2lsbCBoYXZlIGxlZnQgdGhlIHVhcnRzIGNvbmZpZ3VyZWQKKwkgKiBhZnRlciBjYWxsaW5nIGxpbnV4LgorCSAqLworCisJYXJjaF9kZXRlY3RfY3B1KCk7CisJYXJjaF9kZWNvbXBfd2RvZ19zdGFydCgpOworfQorCisKKyNlbmRpZiAvKiBfX0FTTV9QTEFUX1VOQ09NUFJFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYwppbmRleCA0MDA1NDEzLi5hMDA1ZGRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYwpAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogLyogY2xvY2sgaW5mb3JtYXRpb24gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYwppbmRleCBkNTI4ZjQ2Li4zMDk4NzM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYwpAQCAtNDAsOSArNDAsOSBAQAogCiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjL25hbmQuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9jb21tb24tc21kay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAogLyogTEVEIGRldmljZXMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCmluZGV4IDljNjA3YmIuLjIyYTMyOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKQEAgLTQyLDE4ICs0MiwxOCBAQAogI2luY2x1ZGUgPG1hY2gvc3lzdGVtLXJlc2V0Lmg+CiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQwMC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMi5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQwMC5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMi5oPgogI2luY2x1ZGUgInMzYzI0NHguaCIKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDAuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDIuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDMuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0NDAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0NDIuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0NDMuaD4KIAogc3RydWN0IGNwdV90YWJsZSB7CiAJdW5zaWduZWQgbG9uZwlpZGNvZGU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYwppbmRleCA2YjEzYjU0Li5lOTNmOGJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKQEAgLTI4LDExICsyOCwxMSBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC91ZGMuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3Mtc3BpLmg+CiAKIC8qIFNlcmlhbCBwb3J0IHJlZ2lzdHJhdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwppbmRleCBkNjM0NDQ2Li4xYmFmOTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZG1hLmg+CisjaW5jbHVkZSA8cGxhdC9kbWEuaD4KIAogLyogaW8gbWFwIGZvciBkbWEgKi8KIHN0YXRpYyB2b2lkIF9faW9tZW0gKmRtYV9iYXNlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jbG9jay5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY2xvY2suaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9jb21tb24tc21kay5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jb21tb24tc21kay5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY29tbW9uLXNtZGsuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9jcHUuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvY3B1LmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvZGV2cy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9kZXZzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvZGV2cy5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2RldnMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9kbWEuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvZG1hLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvZG1hLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvZG1hLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvaXJxLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2lycS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2lycS5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2lycS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3BtLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3BtLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcG0uaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MDAuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQwMC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MDAuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDAwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDEyLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDEyLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQ0MC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDQwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQ0Mi5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDQyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQ0Mi5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0NDIuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQzLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0NDMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQzLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQ0My5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKaW5kZXggNTkwZmM1YS4uOTYzZjdhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYwpAQCAtNjUsOSArNjUsOSBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9pcnEuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2lycS5oPgogCiAvKiB3YWtldXAgaXJxIGNvbnRyb2wgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLXNpbXRlYy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLXNpbXRlYy5jCmluZGV4IDBhMDc0ZDMuLjIxZGZhNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS1zaW10ZWMuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0tc2ltdGVjLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjZGVmaW5lIENPUFlSSUdIVCAiLCAoYykgMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMKaW5kZXggZDM5MzRiMS4uOGVmYjU3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KQEAgLTQ4LDcgKzQ4LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CiAKIC8qIGZvciBleHRlcm5hbCB1c2UgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3B3bS1jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3B3bS1jbG9jay5jCmluZGV4IDMwNmNjOWMuLmI4ZTg1NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20tY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLWNsb2NrLmMKQEAgLTI0LDEwICsyNCwxMCBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXRpbWVyLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+CiAKIC8qIEVhY2ggb2YgdGhlIHRpbWVycyAwIHRocm91Z2ggNSBnbyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcKICAqIGNsb2NrIHRyZWUsIHdpdGggdGhlIGlucHV0cyBkZXBlbmRpbmcgb24gdGhlIHRpbWVycy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20uYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20uYwppbmRleCA3YTkyYzkzLi5mZWI3NzBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3B3bS5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wd20uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXRpbWVyLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+CiAKIHN0cnVjdCBwd21fZGV2aWNlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCSBsaXN0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHgtY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWNsb2NrLmMKaW5kZXggMTE5NjQ3YS4uN2MwOTc3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHgtY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC1jbG9jay5jCkBAIC00MSw4ICs0MSw4IEBACiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiBzdGF0aWMgaW50IHMzYzI0NDBfc2V0cGFyZW50X2FybWNsayhzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWlycS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHgtaXJxLmMKaW5kZXggMDYwMWM1Zi4uMDkwMmFmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHgtaXJxLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHgtaXJxLmMKQEAgLTM0LDkgKzM0LDkgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvaXJxLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9pcnEuaD4KIAogLyogY2FtZXJhIGlycSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYwppbmRleCAxNDY4NjNhLi5jMDM0NGZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMKQEAgLTMwLDE4ICszMCwxOCBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvai5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1kc2MuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQ0MC5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgogI2luY2x1ZGUgInMzYzI0NHguaCIKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHMzYzI0NHhfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAlJT0RFU0NfRU5UKENMS1BXUiksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TCmluZGV4IDQ5ODFhMDguLjc2NTk0YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogCiAvKiBDT05GSUdfREVCVUdfUkVTVU1FIGlzIGRhbmdlcm91cyBpZiB5b3VyIGJvb3Rsb2FkZXIgZG9lcyBub3QKICAqIHJlc2V0IHRoZSBVQVJUIGNvbmZpZ3VyYXRpb24sIG9ubHkgZW5hYmxlIGlmIHlvdSByZWFsbHkgbmVlZCB0aGlzIQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3RpbWUuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC90aW1lLmMKaW5kZXggNjRiZmExOS4uYzUxOTE2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3RpbWUuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvdGltZS5jCkBAIC0zMywxMiArMzMsMTIgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXRpbWVyLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9zdGFydHZhbDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3VzZWNfdGlja3M7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL0tjb25maWcgYi9hcmNoL2F2cjMyL0tjb25maWcKaW5kZXggN2MyMzlhOS4uMzNhNWIyOSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9LY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvS2NvbmZpZwpAQCAtNzIsNiArNzIsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBtZW51ICJTeXN0ZW0gVHlwZSBhbmQgZmVhdHVyZXMiCiAKIHNvdXJjZSAia2VybmVsL3RpbWUvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vYS5vdXQuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vYS5vdXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ2Mzc1YS4uMDAwMDAwMAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2Eub3V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jaWZuZGVmIF9fQVNNX0FWUjMyX0FfT1VUX0gKLSNkZWZpbmUgX19BU01fQVZSMzJfQV9PVVRfSAotCi1zdHJ1Y3QgZXhlYwotewotICB1bnNpZ25lZCBsb25nIGFfaW5mbzsJCS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MgKi8KLSAgdW5zaWduZWQgYV90ZXh0OwkJLyogbGVuZ3RoIG9mIHRleHQsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfZGF0YTsJCS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2JzczsJCS8qIGxlbmd0aCBvZiB1bmluaXRpYWxpemVkIGRhdGEgYXJlYSBmb3IgZmlsZSwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9zeW1zOwkJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSBkYXRhIGluIGZpbGUsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfZW50cnk7CQkvKiBzdGFydCBhZGRyZXNzICovCi0gIHVuc2lnbmVkIGFfdHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgdGV4dCwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9kcnNpemU7CQkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciBkYXRhLCBpbiBieXRlcyAqLwotfTsKLQotI2RlZmluZSBOX1RSU0laRShhKQkoKGEpLmFfdHJzaXplKQotI2RlZmluZSBOX0RSU0laRShhKQkoKGEpLmFfZHJzaXplKQotI2RlZmluZSBOX1NZTVNJWkUoYSkJKChhKS5hX3N5bXMpCi0KLSNlbmRpZiAvKiBfX0FTTV9BVlIzMl9BX09VVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA2NGNlNDBlLi5kNWQxZDQxIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTEwMyw2ICsxMDMsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWF8zMkJJVCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYXzMyQklUKQogCiAjZW5kaWYgLyogX19BU01fQVZSMzJfRUxGX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAyOTRiMjVmLi40NDQyZjhkIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC05Niw2ICs5Niw3IEBACiAjZGVmaW5lIF9USUZfTUVNRElFCQkoMSA8PCBUSUZfTUVNRElFKQogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMSA8PCBUSUZfUkVTVE9SRV9TSUdNQVNLKQogI2RlZmluZSBfVElGX0NQVV9HT0lOR19UT19TTEVFUCAoMSA8PCBUSUZfQ1BVX0dPSU5HX1RPX1NMRUVQKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDEgPDwgVElGX0ZSRUVaRSkKIAogLyogTm90ZTogVGhlIG1hc2tzIGJlbG93IG11c3QgbmV2ZXIgc3BhbiBtb3JlIHRoYW4gMTYgYml0cyEgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jcHVmcmVxLmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2NwdWZyZXEuYwppbmRleCA1ZGQ4ZDI1Li5kODRlZmU0IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2NwdWZyZXEuYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2NwdWZyZXEuYwpAQCAtODcsNyArODcsNiBAQAogCXBvbGljeS0+Y3VyID0gYXQzMl9nZXRfc3BlZWQoMCk7CiAJcG9saWN5LT5taW4gPSBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXE7CiAJcG9saWN5LT5tYXggPSBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXE7Ci0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAogCXByaW50aygiY3B1ZnJlcTogQVQzMkFQIENQVSBmcmVxdWVuY3kgZHJpdmVyXG4iKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9leHRpbnQuYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvZXh0aW50LmMKaW5kZXggYzM2YTZkNS4uMzEwNDc3YiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9leHRpbnQuYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2V4dGludC5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlzdHJ1Y3QgZWljICplaWM7CiAJc3RydWN0IHJlc291cmNlICpyZWdzOwogCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBucl9pcnFzOworCXVuc2lnbmVkIGludCBucl9vZl9pcnFzOwogCXVuc2lnbmVkIGludCBpbnRfaXJxOwogCWludCByZXQ7CiAJdTMyIHBhdHRlcm47CkBAIC0yMjQsNyArMjI0LDcgQEAKIAllaWNfd3JpdGVsKGVpYywgSURSLCB+MFVMKTsKIAllaWNfd3JpdGVsKGVpYywgTU9ERSwgfjBVTCk7CiAJcGF0dGVybiA9IGVpY19yZWFkbChlaWMsIE1PREUpOwotCW5yX2lycXMgPSBmbHMocGF0dGVybik7CisJbnJfb2ZfaXJxcyA9IGZscyhwYXR0ZXJuKTsKIAogCS8qIFRyaWdnZXIgb24gbG93IGxldmVsIHVubGVzcyBvdmVycmlkZGVuIGJ5IGRyaXZlciAqLwogCWVpY193cml0ZWwoZWljLCBFREdFLCAwVUwpOwpAQCAtMjMyLDcgKzIzMiw3IEBACiAKIAllaWMtPmNoaXAgPSAmZWljX2NoaXA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5yX29mX2lycXM7IGkrKykgewogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoZWljLT5maXJzdF9pcnEgKyBpLCAmZWljX2NoaXAsCiAJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJc2V0X2lycV9jaGlwX2RhdGEoZWljLT5maXJzdF9pcnEgKyBpLCBlaWMpOwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJCSBlaWMtPnJlZ3MsIGludF9pcnEpOwogCWRldl9pbmZvKCZwZGV2LT5kZXYsCiAJCSAiSGFuZGxpbmcgJXUgZXh0ZXJuYWwgSVJRcywgc3RhcnRpbmcgd2l0aCBJUlEgJXVcbiIsCi0JCSBucl9pcnFzLCBlaWMtPmZpcnN0X2lycSk7CisJCSBucl9vZl9pcnFzLCBlaWMtPmZpcnN0X2lycSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCmluZGV4IDQxNTRmZjEuLjI5ZTcxZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKQEAgLTY0LDggKzY0LDExIEBACiAJZGVwZW5kcyBvbiBPUFJPRklMRQogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKKwogc291cmNlICJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0IgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIkJsYWNrZmluIFByb2Nlc3NvciBPcHRpb25zIgogCiBjb21tZW50ICJQcm9jZXNzb3IgYW5kIEJvYXJkIFNldHRpbmdzIgpAQCAtMTYyLDE2ICsxNjUsMjggQEAKIGNvbmZpZyBCRjU2MQogCWJvb2wgIkJGNTYxIgogCWhlbHAKLQkgIE5vdCBTdXBwb3J0ZWQgWWV0IC0gV29yayBpbiBwcm9ncmVzcyAtIEJGNTYxIFByb2Nlc3NvciBTdXBwb3J0LgorCSAgQkY1NjEgUHJvY2Vzc29yIFN1cHBvcnQuCiAKIGVuZGNob2ljZQogCitjb25maWcgQkZfUkVWX01JTgorCWludAorCWRlZmF1bHQgMCBpZiAoQkY1MnggfHwgQkY1NHgpCisJZGVmYXVsdCAyIGlmIChCRjUzNyB8fCBCRjUzNiB8fCBCRjUzNCkKKwlkZWZhdWx0IDMgaWYgKEJGNTYxIHx8QkY1MzMgfHwgQkY1MzIgfHwgQkY1MzEpCisKK2NvbmZpZyBCRl9SRVZfTUFYCisJaW50CisJZGVmYXVsdCAyIGlmIChCRjUyeCB8fCBCRjU0eCkKKwlkZWZhdWx0IDMgaWYgKEJGNTM3IHx8IEJGNTM2IHx8IEJGNTM0KQorCWRlZmF1bHQgNSBpZiAoQkY1NjEpCisJZGVmYXVsdCA2IGlmIChCRjUzMyB8fCBCRjUzMiB8fCBCRjUzMSkKKwogY2hvaWNlCiAJcHJvbXB0ICJTaWxpY29uIFJldiIKLQlkZWZhdWx0IEJGX1JFVl8wXzEgaWYgQkY1MjcKLQlkZWZhdWx0IEJGX1JFVl8wXzIgaWYgQkY1MzcKLQlkZWZhdWx0IEJGX1JFVl8wXzMgaWYgQkY1MzMKLQlkZWZhdWx0IEJGX1JFVl8wXzAgaWYgQkY1NDkKKwlkZWZhdWx0IEJGX1JFVl8wXzEgaWYgKEJGNTJ4IHx8IEJGNTR4KQorCWRlZmF1bHQgQkZfUkVWXzBfMiBpZiAoQkY1MzQgfHwgQkY1MzYgfHwgQkY1MzcpCisJZGVmYXVsdCBCRl9SRVZfMF8zIGlmIChCRjUzMSB8fCBCRjUzMiB8fCBCRjUzMyB8fCBCRjU2MSkKIAogY29uZmlnIEJGX1JFVl8wXzAKIAlib29sICIwLjAiCkBAIC0xODMsNyArMTk4LDcgQEAKIAogY29uZmlnIEJGX1JFVl8wXzIKIAlib29sICIwLjIiCi0JZGVwZW5kcyBvbiAoQkY1MzcgfHwgQkY1MzYgfHwgQkY1MzQpCisJZGVwZW5kcyBvbiAoQkY1MnggfHwgQkY1MzcgfHwgQkY1MzYgfHwgQkY1MzQgfHwgQkY1NHgpCiAKIGNvbmZpZyBCRl9SRVZfMF8zCiAJYm9vbCAiMC4zIgpAQCAtMTk3LDYgKzIxMiwxMCBAQAogCWJvb2wgIjAuNSIKIAlkZXBlbmRzIG9uIChCRjU2MSB8fCBCRjUzMyB8fCBCRjUzMiB8fCBCRjUzMSkKIAorY29uZmlnIEJGX1JFVl8wXzYKKwlib29sICIwLjYiCisJZGVwZW5kcyBvbiAoQkY1MzMgfHwgQkY1MzIgfHwgQkY1MzEpCisKIGNvbmZpZyBCRl9SRVZfQU5ZCiAJYm9vbCAiYW55IgogCkBAIC0yNDksNyArMjY4LDcgQEAKIAogY29uZmlnIE1FTV9NVDQ4TEMzMk0xNkEyVEdfNzUKIAlib29sCi0JZGVwZW5kcyBvbiAoQkZJTjUyN19FWktJVCB8fCBCRklONTMyX0lQMFggfHwgQkxBQ0tTVEFNUCkKKwlkZXBlbmRzIG9uIChCRklONTI3X0VaS0lUIHx8IEJGSU41MzJfSVAwWCB8fCBCTEFDS1NUQU1QIHx8IEJGSU41MjZfRVpCUkQpCiAJZGVmYXVsdCB5CiAKIHNvdXJjZSAiYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L0tjb25maWciCkBAIC0yODYsMTMgKzMwNSwyMCBAQAogCSAgbWVtb3J5IHJlZ2lvbiBpcyB1c2VkIHRvIGNhcHR1cmUgTlVMTCBwb2ludGVyIHJlZmVyZW5jZXMgYXMgd2VsbAogCSAgYXMgc29tZSBjb3JlIGtlcm5lbCBmdW5jdGlvbnMuCiAKK2NvbmZpZyBST01fQkFTRQorCWhleCAiS2VybmVsIFJPTSBCYXNlIgorCWRlZmF1bHQgIjB4MjAwNDAwMDAiCisJcmFuZ2UgMHgyMDAwMDAwMCAweDIwNDAwMDAwIGlmICEoQkY1NHggfHwgQkY1NjEpCisJcmFuZ2UgMHgyMDAwMDAwMCAweDMwMDAwMDAwIGlmIChCRjU0eCB8fCBCRjU2MSkKKwloZWxwCisKIGNvbW1lbnQgIkNsb2NrL1BMTCBTZXR1cCIKIAogY29uZmlnIENMS0lOX0haCiAJaW50ICJGcmVxdWVuY3kgb2YgdGhlIGNyeXN0YWwgb24gdGhlIGJvYXJkIGluIEh6IgogCWRlZmF1bHQgIjExMDU5MjAwIiBpZiBCRklONTMzX1NUQU1QCiAJZGVmYXVsdCAiMjcwMDAwMDAiIGlmIEJGSU41MzNfRVpLSVQKLQlkZWZhdWx0ICIyNTAwMDAwMCIgaWYgKEJGSU41MzdfU1RBTVAgfHwgQkZJTjUyN19FWktJVCB8fCBIODYwNl9IVlNJU1RFTUFTIHx8IEJMQUNLU1RBTVApCisJZGVmYXVsdCAiMjUwMDAwMDAiIGlmIChCRklONTM3X1NUQU1QIHx8IEJGSU41MjdfRVpLSVQgfHwgSDg2MDZfSFZTSVNURU1BUyB8fCBCTEFDS1NUQU1QIHx8IEJGSU41MjZfRVpCUkQpCiAJZGVmYXVsdCAiMzAwMDAwMDAiIGlmIEJGSU41NjFfRVpLSVQKIAlkZWZhdWx0ICIyNDU3NjAwMCIgaWYgUE5BVjEwCiAJZGVmYXVsdCAiMTAwMDAwMDAiIGlmIEJGSU41MzJfSVAwWApAQCAtMzMyLDcgKzM1OCw3IEBACiAJZGVmYXVsdCAiMjIiIGlmIEJGSU41MzNfQkxVRVRFQ0hOSVhfQ00KIAlkZWZhdWx0ICIyMCIgaWYgKEJGSU41MzdfQkxVRVRFQ0hOSVhfQ00gfHwgQkZJTjUyN19CTFVFVEVDSE5JWF9DTSB8fCBCRklONTYxX0JMVUVURUNITklYX0NNKQogCWRlZmF1bHQgIjIwIiBpZiBCRklONTYxX0VaS0lUCi0JZGVmYXVsdCAiMTYiIGlmIChIODYwNl9IVlNJU1RFTUFTIHx8IEJMQUNLU1RBTVApCisJZGVmYXVsdCAiMTYiIGlmIChIODYwNl9IVlNJU1RFTUFTIHx8IEJMQUNLU1RBTVAgfHwgQkZJTjUyNl9FWkJSRCkKIAloZWxwCiAJICBUaGlzIGNvbnRyb2xzIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG9uLWNoaXAgUExMLiBUaGlzIGNhbiBiZSBiZXR3ZWVuIDEgYW5kIDY0LgogCSAgUExMIEZyZXF1ZW5jeSA9IChDcnlzdGFsIEZyZXF1ZW5jeSkgKiAodGhpcyBzZXR0aW5nKQpAQCAtMzY4LDE0ICszOTQsNiBAQAogCSAgVGhpcyBjYW4gYmUgYmV0d2VlbiAxIGFuZCAxNQogCSAgU3lzdGVtIENsb2NrID0gKFBMTCBmcmVxdWVuY3kpIC8gKHRoaXMgc2V0dGluZykKIAotY29uZmlnIE1BWF9NRU1fU0laRQotCWludCAiTWF4IFNEUkFNIE1lbW9yeSBTaXplIGluIE1CeXRlcyIKLQlkZXBlbmRzIG9uICFNUFUKLQlkZWZhdWx0IDUxMgotCWhlbHAKLQkgIFRoaXMgaXMgdGhlIG1heCBtZW1vcnkgc2l6ZSB0aGF0IHRoZSBrZXJuZWwgd2lsbCBjcmVhdGUgQ1BMQgotCSAgdGFibGVzIGZvci4gIFlvdXIgc3lzdGVtIHdpbGwgbm90IGJlIGFibGUgdG8gaGFuZGxlIGFueSBtb3JlLgotCiBjaG9pY2UKIAlwcm9tcHQgIkREUiBTRFJBTSBDaGlwIFR5cGUiCiAJZGVwZW5kcyBvbiBCRklOX0tFUk5FTF9DTE9DSwpAQCAtMzg5LDYgKzQwNywxNCBAQAogCWJvb2wgIk1UNDZWMzJNMTZfNUIiCiBlbmRjaG9pY2UKIAorY29uZmlnIE1BWF9NRU1fU0laRQorCWludCAiTWF4IFNEUkFNIE1lbW9yeSBTaXplIGluIE1CeXRlcyIKKwlkZXBlbmRzIG9uICFNUFUKKwlkZWZhdWx0IDUxMgorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIG1heCBtZW1vcnkgc2l6ZSB0aGF0IHRoZSBrZXJuZWwgd2lsbCBjcmVhdGUgQ1BMQgorCSAgdGFibGVzIGZvci4gIFlvdXIgc3lzdGVtIHdpbGwgbm90IGJlIGFibGUgdG8gaGFuZGxlIGFueSBtb3JlLgorCiAjCiAjIE1heCAmIE1pbiBTcGVlZHMgZm9yIHZhcmlvdXMgQ2hpcHMKICMKQEAgLTQ1NSw4ICs0ODEsNiBAQAogCiBzb3VyY2Uga2VybmVsL3RpbWUvS2NvbmZpZwogCi1jb21tZW50ICJNZW1vcnkgU2V0dXAiCi0KIGNvbW1lbnQgIk1pc2MiCiAKIGNob2ljZQpAQCAtNjIyLDYgKzY0NiwxNSBAQAogCSAgSWYgZW5hYmxlZCwgdGhlIENQTEIgU3dpdGNoIFRhYmxlcyBhcmUgbGlua2VkCiAJICBpbnRvIEwxIGRhdGEgbWVtb3J5LiAobGVzcyBsYXRlbmN5KQogCitjb25maWcgQVBQX1NUQUNLX0wxCisJYm9vbCAiU3VwcG9ydCBsb2NhdGluZyBhcHBsaWNhdGlvbiBzdGFjayBpbiBMMSBTY3JhdGNoIE1lbW9yeSIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJZiBlbmFibGVkIHRoZSBhcHBsaWNhdGlvbiBzdGFjayBjYW4gYmUgbG9jYXRlZCBpbiBMMQorCSAgc2NyYXRjaCBtZW1vcnkgKGxlc3MgbGF0ZW5jeSkuCisKKwkgIEN1cnJlbnRseSBvbmx5IHdvcmtzIHdpdGggRkxBVCBiaW5hcmllcy4KKwogY29tbWVudCAiU3BlZWQgT3B0aW1pemF0aW9ucyIKIGNvbmZpZyBCRklOX0lOU19MT1dPVkVSSEVBRAogCWJvb2wgImluc1tid2xdIGxvdyBvdmVyaGVhZCwgaGlnaGVyIGludGVycnVwdCBsYXRlbmN5IgpAQCAtNzU1LDYgKzc4OCwxMyBAQAogCiBlbmRjaG9pY2UKIAorY29uZmlnIEJGSU5fTDJfQ0FDSEVBQkxFCisJYm9vbCAiQ2FjaGUgTDIgU1JBTSIKKwlkZXBlbmRzIG9uIChCRklOX0RDQUNIRSB8fCBCRklOX0lDQUNIRSkgJiYgKEJGNTR4IHx8IEJGNTYxKQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNlbGVjdCB0byBtYWtlIEwyIFNSQU0gY2FjaGVhYmxlIGluIEwxIGRhdGEgYW5kIGluc3RydWN0aW9uIGNhY2hlLgorCiBjb25maWcgTVBVCiAJYm9vbCAiRW5hYmxlIHRoZSBtZW1vcnkgcHJvdGVjdGlvbiB1bml0IChFWFBFUklNRU5UQUwpIgogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnLmRlYnVnIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnLmRlYnVnCmluZGV4IGM0Njg2MjQuLjNhZDI1OTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2JsYWNrZmluL0tjb25maWcuZGVidWcKQEAgLTIsNiArMiwyMiBAQAogCiBzb3VyY2UgImxpYi9LY29uZmlnLmRlYnVnIgogCitjb25maWcgSEFWRV9BUkNIX0tHREIKKyAgICAgICBkZWZfYm9vbCB5CisKK2NvbmZpZyBERUJVR19WRVJCT1NFCisJYm9vbCAiVmVyYm9zZSBmYXVsdCBtZXNzYWdlcyIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgUFJJTlRLCisJaGVscAorCSAgV2hlbiBhIHByb2dyYW0gY3Jhc2hlcyBkdWUgdG8gYW4gZXhjZXB0aW9uLCBvciB0aGUga2VybmVsIGRldGVjdHMKKwkgIGFuIGludGVybmFsIGVycm9yLCB0aGUga2VybmVsIGNhbiBwcmludCBhIG5vdCBzbyBicmllZiBtZXNzYWdlCisJICBleHBsYWluaW5nIHdoYXQgdGhlIHByb2JsZW0gd2FzLiBUaGlzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcworCSAgdXNlZnVsIHRvIGRldmVsb3BlcnMgYW5kIGtlcm5lbCBoYWNrZXJzIHdoZW4gdHJhY2tpbmcgZG93biBwcm9ibGVtcywKKwkgIGJ1dCBtb3N0bHkgbWVhbmluZ2xlc3MgdG8gb3RoZXIgcGVvcGxlLiBUaGlzIGlzIGFsd2F5cyBoZWxwZnVsIGZvcgorCSAgZGVidWdnaW5nIGJ1dCBzZXJ2ZXMgbm8gcHVycG9zZSBvbiBhIHByb2R1Y3Rpb24gc3lzdGVtLgorCSAgTW9zdCBwZW9wbGUgc2hvdWxkIHNheSBOIGhlcmUuCisKIGNvbmZpZyBERUJVR19NTVJTCiAJYm9vbCAiR2VuZXJhdGUgQmxhY2tmaW4gTU1SIHRyZWUiCiAJc2VsZWN0IERFQlVHX0ZTCkBAIC0yMiw2ICszOCw0NCBAQAogCSAgaGFyZHdhcmUgZXJyb3IgaW50ZXJydXB0cyBhbmQgbmVlZCB0byBrbm93IHdoZXJlIHRoZXkgYXJlIGNvbWluZwogCSAgZnJvbS4KIAorY29uZmlnIERFQlVHX0RPVUJMRUZBVUxUCisJYm9vbCAiRGVidWcgRG91YmxlIEZhdWx0cyIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJZiBhbiBleGNlcHRpb24gaXMgY2F1c2VkIHdoaWxlIGV4ZWN1dGluZyBjb2RlIHdpdGhpbiB0aGUgZXhjZXB0aW9uCisJICBoYW5kbGVyLCB0aGUgTk1JIGhhbmRsZXIsIHRoZSByZXNldCB2ZWN0b3IsIG9yIGluIGVtdWxhdG9yIG1vZGUsCisJICBhIGRvdWJsZSBmYXVsdCBvY2N1cnMuIE9uIHRoZSBCbGFja2ZpbiwgdGhpcyBpcyBhIHVucmVjb3ZlcmFibGUKKwkgIGV2ZW50LiBZb3UgaGF2ZSB0d28gb3B0aW9uczoKKwkgIC0gUkVTRVQgZXhhY3RseSB3aGVuIGRvdWJsZSBmYXVsdCBvY2N1cnMuIFRoZSBleGNlcHRpbmcKKwkgICAgaW5zdHJ1Y3Rpb24gYWRkcmVzcyBpcyBzdG9yZWQgaW4gUkVUWCwgd2hlcmUgdGhlIG5leHQga2VybmVsCisJICAgIGJvb3Qgd2lsbCBwcmludCBpdCBvdXQuCisJICAtIFByaW50IGRlYnVnIG1lc3NhZ2UuIFRoaXMgaXMgbXVjaCBtb3JlIGVycm9yIHByb25lLCBhbHRob3VnaAorCSAgICBlYXNpZXIgdG8gaGFuZGxlLiBJdCBpcyBlcnJvciBwcm9uZSBzaW5jZToKKwkgICAgLSBUaGUgZXhjZXB0aW5nIGluc3RydWN0aW9uIGlzIG5vdCBjb21taXR0ZWQuCisJICAgIC0gQWxsIHdyaXRlYmFja3MgZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gYXJlIHByZXZlbnRlZC4KKwkgICAgLSBUaGUgZ2VuZXJhdGVkIGV4Y2VwdGlvbiBpcyBub3QgdGFrZW4uCisJICAgIC0gVGhlIEVYQ0FVU0UgZmllbGQgaXMgdXBkYXRlZCB3aXRoIGFuIHVucmVjb3ZlcmFibGUgZXZlbnQKKwkgICAgVGhlIG9ubHkgd2F5IHRvIGNoZWNrIHRoaXMgaXMgdG8gc2VlIGlmIEVYQ0FVU0UgY29udGFpbnMgdGhlCisJICAgIHVucmVjb3ZlcmFibGUgZXZlbnQgdmFsdWUgYXQgZXZlcnkgZXhjZXB0aW9uIHJldHVybi4gQnkgc2VsZWN0aW5nCisJICAgIHRoaXMgb3B0aW9uLCB5b3UgYXJlIHNraXBwaW5nIG92ZXIgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uLCBhbmQgCisJICAgIGhvcGluZyB0aGluZ3Mgc3RheSB0b2dldGhlciBlbm91Z2ggdG8gcHJpbnQgb3V0IGEgZGVidWcgbWVzc2FnZS4KKworCSAgVGhpcyBkb2VzIGFkZCBhIGxpdHRsZSBrZXJuZWwgY29kZSwgYnV0IGlzIHRoZSBvbmx5IG1ldGhvZCB0byBkZWJ1ZworCSAgZG91YmxlIGZhdWx0cyAtIGlmIHVuc3VyZSBzYXkgIlkiCisKK2Nob2ljZQorCXByb21wdCAiRG91YmxlIEZhdWx0IEZhaWx1cmUgTWV0aG9kIgorCWRlZmF1bHQgREVCVUdfRE9VQkxFRkFVTFRfUFJJTlQKKwlkZXBlbmRzIG9uIERFQlVHX0RPVUJMRUZBVUxUCisKK2NvbmZpZyBERUJVR19ET1VCTEVGQVVMVF9QUklOVAorCWJvb2wgIlByaW50IgorCitjb25maWcgREVCVUdfRE9VQkxFRkFVTFRfUkVTRVQKKwlib29sICJSZXNldCIKKworZW5kY2hvaWNlCisKIGNvbmZpZyBERUJVR19JQ0FDSEVfQ0hFQ0sKIAlib29sICJDaGVjayBJbnN0cnVjdGlvbiBjYWNoZSBjb2hlcmVuY3kiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKQEAgLTE0Myw2ICsxOTcsNyBAQAogY29uZmlnIEVBUkxZX1BSSU5USwogCWJvb2wgIkVhcmx5IHByaW50ayIgCiAJZGVmYXVsdCBuCisJc2VsZWN0IFNFUklBTF9DT1JFX0NPTlNPTEUKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHNwZWNpYWwgY29uc29sZSBkcml2ZXJzIHdoaWNoIGFsbG93IHRoZSBrZXJuZWwKIAkgIHRvIHByaW50IG1lc3NhZ2VzIHZlcnkgZWFybHkgaW4gdGhlIGJvb3R1cCBwcm9jZXNzLgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9NYWtlZmlsZSBiL2FyY2gvYmxhY2tmaW4vTWFrZWZpbGUKaW5kZXggZWFjMDUzMy4uNmJmNTA5NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9NYWtlZmlsZQorKysgYi9hcmNoL2JsYWNrZmluL01ha2VmaWxlCkBAIC02Nyw2ICs2Nyw3IEBACiByZXYtJChDT05GSUdfQkZfUkVWXzBfMykgIDo9IDAuMwogcmV2LSQoQ09ORklHX0JGX1JFVl8wXzQpICA6PSAwLjQKIHJldi0kKENPTkZJR19CRl9SRVZfMF81KSAgOj0gMC41CityZXYtJChDT05GSUdfQkZfUkVWXzBfNikgIDo9IDAuNgogcmV2LSQoQ09ORklHX0JGX1JFVl9OT05FKSA6PSBub25lCiByZXYtJChDT05GSUdfQkZfUkVWX0FOWSkgIDo9IGFueQogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjYtRVpCUkRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI2LUVaQlJEX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDQzYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI2LUVaQlJEX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE0MjcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNi4zCisjIFRodSBBdWcgMjggMTY6NDk6NTMgMjAwOAorIworIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0CitDT05GSUdfQkxBQ0tGSU49eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNAorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfVElOWV9TSE1FTT15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisKKyMKKyMgQmxhY2tmaW4gUHJvY2Vzc29yIE9wdGlvbnMKKyMKKworIworIyBQcm9jZXNzb3IgYW5kIEJvYXJkIFNldHRpbmdzCisjCisjIENPTkZJR19CRjUyMiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUyMyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUyNCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUyNSBpcyBub3Qgc2V0CitDT05GSUdfQkY1MjY9eQorIyBDT05GSUdfQkY1MjcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzEgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzMgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzYgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDggaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDkgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NjEgaXMgbm90IHNldAorQ09ORklHX0JGX1JFVl8wXzA9eQorIyBDT05GSUdfQkZfUkVWXzBfMSBpcyBub3Qgc2V0CisjIENPTkZJR19CRl9SRVZfMF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGX1JFVl8wXzMgaXMgbm90IHNldAorIyBDT05GSUdfQkZfUkVWXzBfNCBpcyBub3Qgc2V0CisjIENPTkZJR19CRl9SRVZfMF81IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGX1JFVl9BTlkgaXMgbm90IHNldAorIyBDT05GSUdfQkZfUkVWX05PTkUgaXMgbm90IHNldAorQ09ORklHX0JGNTJ4PXkKK0NPTkZJR19NRU1fTVQ0OExDMzJNMTZBMlRHXzc1PXkKKyMgQ09ORklHX0JGSU41MjdfRVpLSVQgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjUyN19CTFVFVEVDSE5JWF9DTSBpcyBub3Qgc2V0CitDT05GSUdfQkZJTjUyNl9FWkJSRD15CisKKyMKKyMgQkY1MjcgU3BlY2lmaWMgQ29uZmlndXJhdGlvbgorIworCisjCisjIEFsdGVybmF0aXZlIE11bHRpcGxleGluZyBTY2hlbWUKKyMKKyMgQ09ORklHX0JGNTI3X1NQT1JUMF9QT1JURiBpcyBub3Qgc2V0CitDT05GSUdfQkY1MjdfU1BPUlQwX1BPUlRHPXkKK0NPTkZJR19CRjUyN19TUE9SVDBfVFNDTEtfUEcxMD15CisjIENPTkZJR19CRjUyN19TUE9SVDBfVFNDTEtfUEcxNCBpcyBub3Qgc2V0CitDT05GSUdfQkY1MjdfVUFSVDFfUE9SVEY9eQorIyBDT05GSUdfQkY1MjdfVUFSVDFfUE9SVEcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MjdfTkFORF9EX1BPUlRGIGlzIG5vdCBzZXQKK0NPTkZJR19CRjUyN19OQU5EX0RfUE9SVEg9eQorCisjCisjIEludGVycnVwdCBQcmlvcml0eSBBc3NpZ25tZW50CisjCisKKyMKKyMgUHJpb3JpdHkKKyMKK0NPTkZJR19JUlFfUExMX1dBS0VVUD03CitDT05GSUdfSVJRX0RNQTBfRVJST1I9NworQ09ORklHX0lSUV9ETUFSMF9CTEs9NworQ09ORklHX0lSUV9ETUFSMV9CTEs9NworQ09ORklHX0lSUV9ETUFSMF9PVlI9NworQ09ORklHX0lSUV9ETUFSMV9PVlI9NworQ09ORklHX0lSUV9QUElfRVJST1I9NworQ09ORklHX0lSUV9NQUNfRVJST1I9NworQ09ORklHX0lSUV9TUE9SVDBfRVJST1I9NworQ09ORklHX0lSUV9TUE9SVDFfRVJST1I9NworQ09ORklHX0lSUV9VQVJUMF9FUlJPUj03CitDT05GSUdfSVJRX1VBUlQxX0VSUk9SPTcKK0NPTkZJR19JUlFfUlRDPTgKK0NPTkZJR19JUlFfUFBJPTgKK0NPTkZJR19JUlFfU1BPUlQwX1JYPTkKK0NPTkZJR19JUlFfU1BPUlQwX1RYPTkKK0NPTkZJR19JUlFfU1BPUlQxX1JYPTkKK0NPTkZJR19JUlFfU1BPUlQxX1RYPTkKK0NPTkZJR19JUlFfVFdJPTEwCitDT05GSUdfSVJRX1NQST0xMAorQ09ORklHX0lSUV9VQVJUMF9SWD0xMAorQ09ORklHX0lSUV9VQVJUMF9UWD0xMAorQ09ORklHX0lSUV9VQVJUMV9SWD0xMAorQ09ORklHX0lSUV9VQVJUMV9UWD0xMAorQ09ORklHX0lSUV9PUFRTRUM9MTEKK0NPTkZJR19JUlFfQ05UPTExCitDT05GSUdfSVJRX01BQ19SWD0xMQorQ09ORklHX0lSUV9QT1JUSF9JTlRBPTExCitDT05GSUdfSVJRX01BQ19UWD0xMQorQ09ORklHX0lSUV9QT1JUSF9JTlRCPTExCitDT05GSUdfSVJRX1RNUjA9MTIKK0NPTkZJR19JUlFfVE1SMT0xMgorQ09ORklHX0lSUV9UTVIyPTEyCitDT05GSUdfSVJRX1RNUjM9MTIKK0NPTkZJR19JUlFfVE1SND0xMgorQ09ORklHX0lSUV9UTVI1PTEyCitDT05GSUdfSVJRX1RNUjY9MTIKK0NPTkZJR19JUlFfVE1SNz0xMgorQ09ORklHX0lSUV9QT1JUR19JTlRBPTEyCitDT05GSUdfSVJRX1BPUlRHX0lOVEI9MTIKK0NPTkZJR19JUlFfTUVNX0RNQTA9MTMKK0NPTkZJR19JUlFfTUVNX0RNQTE9MTMKK0NPTkZJR19JUlFfV0FUQ0g9MTMKK0NPTkZJR19JUlFfUE9SVEZfSU5UQT0xMworQ09ORklHX0lSUV9QT1JURl9JTlRCPTEzCitDT05GSUdfSVJRX1NQSV9FUlJPUj03CitDT05GSUdfSVJRX05GQ19FUlJPUj03CitDT05GSUdfSVJRX0hETUFfRVJST1I9NworQ09ORklHX0lSUV9IRE1BPTcKK0NPTkZJR19JUlFfVVNCX0VJTlQ9MTAKK0NPTkZJR19JUlFfVVNCX0lOVDA9MTEKK0NPTkZJR19JUlFfVVNCX0lOVDE9MTEKK0NPTkZJR19JUlFfVVNCX0lOVDI9MTEKK0NPTkZJR19JUlFfVVNCX0RNQT0xMQorCisjCisjIEJvYXJkIGN1c3RvbWl6YXRpb25zCisjCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0JPT1RfTE9BRD0weDEwMDAKKworIworIyBDbG9jay9QTEwgU2V0dXAKKyMKK0NPTkZJR19DTEtJTl9IWj0yNTAwMDAwMAorIyBDT05GSUdfQkZJTl9LRVJORUxfQ0xPQ0sgaXMgbm90IHNldAorQ09ORklHX01BWF9NRU1fU0laRT01MTIKK0NPTkZJR19NQVhfVkNPX0haPTQwMDAwMDAwMAorQ09ORklHX01JTl9WQ09fSFo9NTAwMDAwMDAKK0NPTkZJR19NQVhfU0NMS19IWj0xMzMzMzMzMzMKK0NPTkZJR19NSU5fU0NMS19IWj0yNzAwMDAwMAorCisjCisjIEtlcm5lbCBUaW1lci9TY2hlZHVsZXIKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX0NZQ0xFU19DTE9DS1NPVVJDRSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBNZW1vcnkgU2V0dXAKKyMKKworIworIyBNaXNjCisjCitDT05GSUdfQkZJTl9TQ1JBVENIX1JFR19SRVROPXkKKyMgQ09ORklHX0JGSU5fU0NSQVRDSF9SRUdfUkVURSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1NDUkFUQ0hfUkVHX0NZQ0xFUyBpcyBub3Qgc2V0CisKKyMKKyMgQmxhY2tmaW4gS2VybmVsIE9wdGltaXphdGlvbnMKKyMKKworIworIyBNZW1vcnkgT3B0aW1pemF0aW9ucworIworQ09ORklHX0lfRU5UUllfTDE9eQorQ09ORklHX0VYQ1BUX0lSUV9TWVNDX0wxPXkKK0NPTkZJR19ET19JUlFfTDE9eQorQ09ORklHX0NPUkVfVElNRVJfSVJRX0wxPXkKK0NPTkZJR19JRExFX0wxPXkKKyMgQ09ORklHX1NDSEVEVUxFX0wxIGlzIG5vdCBzZXQKK0NPTkZJR19BUklUSE1FVElDX09QU19MMT15CitDT05GSUdfQUNDRVNTX09LX0wxPXkKKyMgQ09ORklHX01FTVNFVF9MMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1DUFlfTDEgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0JGSU5fU1BJTkxPQ0tfTDEgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQ0hFQ0tTVU1fTDEgaXMgbm90IHNldAorQ09ORklHX0NBQ0hFTElORV9BTElHTkVEX0wxPXkKKyMgQ09ORklHX1NZU0NBTExfVEFCX0wxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTEJfU1dJVENIX1RBQl9MMSBpcyBub3Qgc2V0CisKKyMKKyMgU3BlZWQgT3B0aW1pemF0aW9ucworIworQ09ORklHX0JGSU5fSU5TX0xPV09WRVJIRUFEPXkKK0NPTkZJR19SQU1LRVJORUw9eQorIyBDT05GSUdfUk9NS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0JGSU5fR1BUSU1FUlM9eQorQ09ORklHX0JGSU5fRE1BXzVYWD15CisjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAorIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKK0NPTkZJR19ETUFfVU5DQUNIRURfMU09eQorIyBDT05GSUdfRE1BX1VOQ0FDSEVEX05PTkUgaXMgbm90IHNldAorCisjCisjIENhY2hlIFN1cHBvcnQKKyMKK0NPTkZJR19CRklOX0lDQUNIRT15CitDT05GSUdfQkZJTl9EQ0FDSEU9eQorIyBDT05GSUdfQkZJTl9EQ0FDSEVfQkFOS0EgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTl9JQ0FDSEVfTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9XQj15CisjIENPTkZJR19CRklOX1dUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QVSBpcyBub3Qgc2V0CisKKyMKKyMgQXN5bmNob25vdXMgTWVtb3J5IENvbmZpZ3VyYXRpb24KKyMKKworIworIyBFQklVX0FNR0NUTCBHbG9iYWwgQ29udHJvbAorIworQ09ORklHX0NfQU1DS0VOPXkKK0NPTkZJR19DX0NEUFJJTz15CisjIENPTkZJR19DX0FNQkVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NfQU1CRU5fQjAgaXMgbm90IHNldAorIyBDT05GSUdfQ19BTUJFTl9CMF9CMSBpcyBub3Qgc2V0CisjIENPTkZJR19DX0FNQkVOX0IwX0IxX0IyIGlzIG5vdCBzZXQKK0NPTkZJR19DX0FNQkVOX0FMTD15CisKKyMKKyMgRUJJVV9BTUJDVEwgQ29udHJvbAorIworQ09ORklHX0JBTktfMD0weDdCQjAKK0NPTkZJR19CQU5LXzE9MHg1NTU0CitDT05GSUdfQkFOS18yPTB4N0JCMAorQ09ORklHX0JBTktfMz0weEZGQzAKKworIworIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIE1DQSwgSVNBKQorIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEZfRkRQSUM9eQorQ09ORklHX0JJTkZNVF9GTEFUPXkKK0NPTkZJR19CSU5GTVRfWkZMQVQ9eQorIyBDT05GSUdfQklORk1UX1NIQVJFRF9GTEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorIyBDT05GSUdfUE1fV0FLRVVQX0JZX0dQSU8gaXMgbm90IHNldAorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9bQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorQ09ORklHX01URF9KRURFQ1BST0JFPW0KK0NPTkZJR19NVERfR0VOX1BST0JFPW0KKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9SQU09eQorQ09ORklHX01URF9ST009bQorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1VDTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9bQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfQkZJTj1tCitDT05GSUdfQkZJTl9OQU5EX0JBU0U9MHgyMDIxMjAwMAorQ09ORklHX0JGSU5fTkFORF9DTEU9MgorQ09ORklHX0JGSU5fTkFORF9BTEU9MQorQ09ORklHX0JGSU5fTkFORF9SRUFEWT0zCitDT05GSUdfTVREX05BTkRfSURTPW0KKyMgQ09ORklHX01URF9OQU5EX0JGNVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX0JGSU5fTUFDPXkKK0NPTkZJR19CRklOX1RYX0RFU0NfTlVNPTEwCitDT05GSUdfQkZJTl9SWF9ERVNDX05VTT0yMAorQ09ORklHX0JGSU5fTUFDX1JNSUk9eQorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19BWDg4MTgwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0lfS0VZUEFEIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfQUQ5OTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9BRENfQkY1MzMgaXMgbm90IHNldAorIyBDT05GSUdfQkY1eHhfUFBJRkNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fU0lNUExFX1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNXh4X1BQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1NQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fVElNRVJfTEFURU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19UV0lfTENEIGlzIG5vdCBzZXQKK0NPTkZJR19TSU1QTEVfR1BJTz1tCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0JGSU49eQorQ09ORklHX1NFUklBTF9CRklOX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9CRklOX0RNQT15CisjIENPTkZJR19TRVJJQUxfQkZJTl9QSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0JGSU5fVUFSVDAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9CRklOX1VBUlQxPXkKKyMgQ09ORklHX0JGSU5fVUFSVDFfQ1RTUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorQ09ORklHX0JGSU5fT1RQPXkKKyMgQ09ORklHX0JGSU5fT1RQX1dSSVRFX0VOQUJMRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0FOLCB0aGUgY2FyIGJ1cyBhbmQgaW5kdXN0cmlhbCBmaWVsZGJ1cworIworIyBDT05GSUdfQ0FONExJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0k9eQorQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0lfQ0xLX0tIWj01MAorIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDUyNTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9CRklOPXkKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0JGSU5fV0RUPXkKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCitDT05GSUdfU09VTkQ9bQorCisjCisjIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIworQ09ORklHX1NORD1tCitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIGRldmljZXMKKyMKKworIworIyBBTFNBIEJsYWNrZmluIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9CTEFDS0ZJTl9BRDE4MzYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JGSU5fQUQ3MzMxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQkZJTl9BRDczMzIyIGlzIG5vdCBzZXQKKworIworIyBVU0IgZGV2aWNlcworIworIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0CisjCitDT05GSUdfU05EX1NPQz1tCitDT05GSUdfU05EX0JGNVhYX0kyUz1tCitDT05GSUdfU05EX0JGNVhYX1NPQ19TU00yNjAyPW0KKyMgQ09ORklHX1NORF9CRjVYWF9BQzk3IGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQkY1WFhfU09DX1NQT1JUPW0KK0NPTkZJR19TTkRfQkY1WFhfU09DX0kyUz1tCitDT05GSUdfU05EX0JGNVhYX1NQT1JUX05VTT0wCisKKyMKKyMgQUxTQSBTb0MgYXVkaW8gZm9yIEZyZWVzY2FsZSBTT0NzCisjCisKKyMKKyMgU29DIEF1ZGlvIGZvciB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgT01BUAorIworQ09ORklHX1NORF9TT0NfU1NNMjYwMj1tCisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCPXkKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfU09DPXkKKworIworIyBCbGFja2ZpbiBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX01VU0JfSE9TVD15CisjIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX09URyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQorQ09ORklHX01VU0JfUElPX09OTFk9eQorQ09ORklHX1VTQl9NVVNCX0xPR0xFVkVMPTAKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQkZJTj15CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1lBRkZTX0ZTPW0KK0NPTkZJR19ZQUZGU19ZQUZGUzE9eQorIyBDT05GSUdfWUFGRlNfOUJZVEVfVEFHUyBpcyBub3Qgc2V0CisjIENPTkZJR19ZQUZGU19ET0VTX0VDQyBpcyBub3Qgc2V0CitDT05GSUdfWUFGRlNfWUFGRlMyPXkKK0NPTkZJR19ZQUZGU19BVVRPX1lBRkZTMj15CisjIENPTkZJR19ZQUZGU19ESVNBQkxFX0xBWllfTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19ZQUZGU19ESVNBQkxFX1dJREVfVE5PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lBRkZTX0FMV0FZU19DSEVDS19DSFVOS19FUkFTRUQgaXMgbm90IHNldAorQ09ORklHX1lBRkZTX1NIT1JUX05BTUVTX0lOX1JBTT15CitDT05GSUdfSkZGUzJfRlM9bQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9bQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KKyMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPW0KK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01NUlM9eQorQ09ORklHX0RFQlVHX0hVTlRfRk9SX1pFUk89eQorQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9PTj15CitDT05GSUdfREVCVUdfQkZJTl9IV1RSQUNFX0NPTVBSRVNTSU9OX09GRj15CisjIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfQ09NUFJFU1NJT05fT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTl9UV08gaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTj0wCisjIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfRVhQQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JGSU5fTk9fS0VSTl9IV1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0NQTEJfSU5GTz15CitDT05GSUdfQUNDRVNTX0NIRUNLPXkKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWT15CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTAKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorQ09ORklHX0NSQ19DQ0lUVD1tCisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZwppbmRleCA2Njg1NGE4Li40YTJhNjYwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcKQEAgLTc3Miw3ICs3NzIsNyBAQAogIwogIyBDT05GSUdfQ0FONExJTlVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcKaW5kZXggNmJjMTFkYi4uZGVlYjVlNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtRVpLSVRfZGVmY29uZmlnCkBAIC02NzQsNyArNjc0LDcgQEAKICMKICMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTc0MCw3ICs3NDAsNyBAQAogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZwppbmRleCBkNzdkOTkxLi5jMjMyNjdlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1TVEFNUF9kZWZjb25maWcKQEAgLTY4MSw3ICs2ODEsNyBAQAogIwogIyBDT05GSUdfQ0FONExJTlVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcKaW5kZXggNWZkN2M0Yi4uNjNhMGY4NSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnCkBAIC03MzEsNyArNzMxLDcgQEAKICMgQ09ORklHX0NBTl9VTkNUV0lOQ0FOIGlzIG5vdCBzZXQKIENPTkZJR19DQU5fQkxBQ0tGSU49bQogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC04NzEsNyArODcxLDcgQEAKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcKaW5kZXggMzkwNjY5ZS4uYmY2MzY2MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnCkBAIC04NTUsNyArODU1LDcgQEAKICMKICMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTEwMDEsNyArMTAwMSw3IEBACiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15CisjIENPTkZJR19EQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnCmluZGV4IDk3NmE0ZDcuLjNjNzBkNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZwpAQCAtNzE5LDcgKzcxOSw3IEBACiAjCiAjIENPTkZJR19DQU40TElOVVggaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC03ODUsNyArNzg1LDcgQEAKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUyN19kZWZjb25maWcKaW5kZXggMDc5OWFhOS4uYjZhMTQ2MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MjdfZGVmY29uZmlnCkBAIC02NzksNyArNjc5LDcgQEAKICMKICMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzM19kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzNfZGVmY29uZmlnCmluZGV4IDA5ZGVlYTQuLmMzYmE5MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzM19kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTMzX2RlZmNvbmZpZwpAQCAtNjcyLDcgKzY3Miw3IEBACiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15CisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN0VfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcKaW5kZXggMjE5ZmMzNC4uY2RjNmI3ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcKQEAgLTcwMyw3ICs3MDMsNyBAQAogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdVX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCmluZGV4IDk4NzNkNTguLmYwNzRiZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCkBAIC02ODMsNyArNjgzLDcgQEAKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU0OF9kZWZjb25maWcKaW5kZXggMGUzNjA1Zi4uNWM0NGZkYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnCkBAIC03NjIsNyArNzYyLDcgQEAKICMKICMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTkwOSw3ICs5MDksNyBAQAogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NjFfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTYxX2RlZmNvbmZpZwppbmRleCA1OWM3Y2RiLi4wODZmZTVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NjFfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU2MV9kZWZjb25maWcKQEAgLTY4NCw3ICs2ODQsNyBAQAogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSDg2MDZfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0g4NjA2X2RlZmNvbmZpZwppbmRleCBiYTBiZWU5Li4xZmMzMWYxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSDg2MDZfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9IODYwNl9kZWZjb25maWcKQEAgLTEsNiArMSw2IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjIuMTIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMi4xNAogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CkBAIC0xOTIsNyArMTkyLDcgQEAKICMgQ09ORklHX0JGSU5fS0VSTkVMX0NMT0NLIGlzIG5vdCBzZXQKIENPTkZJR19NQVhfVkNPX0haPTQwMDAwMDAwMAogQ09ORklHX01JTl9WQ09fSFo9NTAwMDAwMDAKLUNPTkZJR19NQVhfU0NMS19IWj0xMzMwMDAwMDAKK0NPTkZJR19NQVhfU0NMS19IWj0xMzMzMzMzMzMKIENPTkZJR19NSU5fU0NMS19IWj0yNzAwMDAwMAogCiAjCkBAIC01MTYsNyArNTE2LDcgQEAKICMKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogQ09ORklHX01URF9NMjVQODA9eQotQ09ORklHX00yNVBYWF9VU0VfRkFTVF9SRUFEPXkKKyMgQ09ORklHX00yNVBYWF9VU0VfRkFTVF9SRUFEIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MzUsMjUgKzYzNSwyNSBAQAogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9FVkRFVj1tCitDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfR1BJTz15CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01JU0M9eQotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAotIyBDT05GSUdfQkY1M1hfUEZCVVRUT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwpAQCAtNjgxLDcgKzY4MSwxNSBAQAogIwogIyBTZXJpYWwgZHJpdmVycwogIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CisjIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAogCiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYS5vdXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYS5vdXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMzZDY1Mi4uMDAwMDAwMAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Eub3V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jaWZuZGVmIF9fQkZJTl9BX09VVF9IX18KLSNkZWZpbmUgX19CRklOX0FfT1VUX0hfXwotCi1zdHJ1Y3QgZXhlYyB7Ci0JdW5zaWduZWQgbG9uZyBhX2luZm87CS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MgKi8KLQl1bnNpZ25lZCBhX3RleHQ7CS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGFfZGF0YTsJLyogbGVuZ3RoIG9mIGRhdGEsIGluIGJ5dGVzICovCi0JdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCi0JdW5zaWduZWQgYV9zeW1zOwkvKiBsZW5ndGggb2Ygc3ltYm9sIHRhYmxlIGRhdGEgaW4gZmlsZSwgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBhX2VudHJ5OwkvKiBzdGFydCBhZGRyZXNzICovCi0JdW5zaWduZWQgYV90cnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCi0JdW5zaWduZWQgYV9kcnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIGRhdGEsIGluIGJ5dGVzICovCi19OwotCi0jZGVmaW5lIE5fVFJTSVpFKGEpCSgoYSkuYV90cnNpemUpCi0jZGVmaW5lIE5fRFJTSVpFKGEpCSgoYSkuYV9kcnNpemUpCi0jZGVmaW5lIE5fU1lNU0laRShhKQkoKGEpLmFfc3ltcykKLQotI2VuZGlmCQkJCS8qIF9fQkZJTl9BX09VVF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbi1nbG9iYWwuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbi1nbG9iYWwuaAppbmRleCA3YmE3MGRlLi41NmRjYjBhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW4tZ2xvYmFsLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluLWdsb2JhbC5oCkBAIC02Myw3ICs2Myw2IEBACiBleHRlcm4gdm9pZCBpbml0X2V4Y2VwdGlvbl92ZWN0b3JzKHZvaWQpOwogZXh0ZXJuIHZvaWQgcHJvZ3JhbV9JQVIodm9pZCk7CiAKLWV4dGVybiB2b2lkIGJmaW5fcmVzZXQodm9pZCk7CiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIGxvd2VyX3RvX2lycTE0KHZvaWQpOwogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBiZmluX3JldHVybl9mcm9tX2V4Y2VwdGlvbih2b2lkKTsKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgZXZ0MTRfc29mdGlycSh2b2lkKTsKQEAgLTkyLDYgKzkxLDggQEAKIGV4dGVybiB2b2lkICpzcmFtX2FsbG9jX3dpdGhfbHNsKHNpemVfdCwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gaW50IHNyYW1fZnJlZV93aXRoX2xzbChjb25zdCB2b2lkKik7CiAKK2V4dGVybiB2b2lkICppc3JhbV9tZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7CisKIGV4dGVybiBjb25zdCBjaGFyIGJmaW5fYm9hcmRfbmFtZVtdOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBiZmluX3NpY19pd3JbXTsKQEAgLTEwNCw3ICsxMDUsNyBAQAogCV9zdGV4dF9sMltdLCBfZXRleHRfbDJbXSwgX3NkYXRhX2wyW10sIF9lZGF0YV9sMltdLCBfc2Jzc19sMltdLAogCV9lYnNzX2wyW10sIF9sMl9sbWFfc3RhcnRbXTsKIAotLyogb25seSB1c2VkIHdoZW4gQ09ORklHX01URF9VQ0xJTlVYICovCisvKiBvbmx5IHVzZWQgd2hlbiBNVERfVUNMSU5VWCAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X210ZF9zdGFydCwgbWVtb3J5X210ZF9lbmQsIG10ZF9zaXplOwogCiAjaWZkZWYgQ09ORklHX0JGSU5fSUNBQ0hFX0xPQ0sKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZyb20uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZyb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmU4MDI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZnJvbS5oCkBAIC0wLDAgKzEsODUgQEAKKy8qIEJsYWNrZmluIG9uLWNoaXAgUk9NIEFQSQorICoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2lmbmRlZiBfX0JGUk9NX0hfXworI2RlZmluZSBfX0JGUk9NX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogUG9zc2libGUgc3lzY29udHJvbCBhY3Rpb24gZmxhZ3MgKi8KKyNkZWZpbmUgU1lTQ1RSTF9SRUFEICAgICAgICAweDAwMDAwMDAwICAgIC8qIHJlYWQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNZU0NUUkxfV1JJVEUgICAgICAgMHgwMDAwMDAwMSAgICAvKiB3cml0ZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1lTQ1RSTF9TWVNSRVNFVCAgICAweDAwMDAwMDAyICAgIC8qIHBlcmZvcm0gc3lzdGVtIHJlc2V0ICovCisjZGVmaW5lIFNZU0NUUkxfQ09SRVJFU0VUICAgMHgwMDAwMDAwNCAgICAvKiBwZXJmb3JtIGNvcmUgcmVzZXQgKi8KKyNkZWZpbmUgU1lTQ1RSTF9TT0ZUUkVTRVQgICAweDAwMDAwMDA2ICAgIC8qIHBlcmZvcm0gY29yZSBhbmQgc3lzdGVtIHJlc2V0ICovCisjZGVmaW5lIFNZU0NUUkxfVlJDVEwgICAgICAgMHgwMDAwMDAxMCAgICAvKiByZWFkL3dyaXRlIFZSX0NUTCByZWdpc3RlciAqLworI2RlZmluZSBTWVNDVFJMX0VYVFZPTFRBR0UgIDB4MDAwMDAwMjAgICAgLyogVkRESU5UIHN1cHBsaWVkIGV4dGVybmFsbHkgKi8KKyNkZWZpbmUgU1lTQ1RSTF9JTlRWT0xUQUdFICAweDAwMDAwMDAwICAgIC8qIFZERElOVCBnZW5lcmF0ZWQgYnkgb24tY2hpcCByZWd1bGF0b3IgKi8KKyNkZWZpbmUgU1lTQ1RSTF9PVFBWT0xUQUdFICAweDAwMDAwMDQwICAgIC8qIEZvciBGYWN0b3J5IFB1cnBvc2VzIE9ubHkgKi8KKyNkZWZpbmUgU1lTQ1RSTF9QTExDVEwgICAgICAweDAwMDAwMTAwICAgIC8qIHJlYWQvd3JpdGUgUExMX0NUTCByZWdpc3RlciAqLworI2RlZmluZSBTWVNDVFJMX1BMTERJViAgICAgIDB4MDAwMDAyMDAgICAgLyogcmVhZC93cml0ZSBQTExfRElWIHJlZ2lzdGVyICovCisjZGVmaW5lIFNZU0NUUkxfTE9DS0NOVCAgICAgMHgwMDAwMDQwMCAgICAvKiByZWFkL3dyaXRlIFBMTF9MT0NLQ05UIHJlZ2lzdGVyICovCisjZGVmaW5lIFNZU0NUUkxfUExMU1RBVCAgICAgMHgwMDAwMDgwMCAgICAvKiByZWFkL3dyaXRlIFBMTF9TVEFUIHJlZ2lzdGVyICovCisKK3R5cGVkZWYgc3RydWN0IEFESV9TWVNDVFJMX1ZBTFVFUyB7CisJdWludDE2X3QgdXdWckN0bDsKKwl1aW50MTZfdCB1d1BsbEN0bDsKKwl1aW50MTZfdCB1d1BsbERpdjsKKwl1aW50MTZfdCB1d1BsbExvY2tDbnQ7CisJdWludDE2X3QgdXdQbGxTdGF0OworfSBBRElfU1lTQ1RSTF9WQUxVRVM7CisKK3N0YXRpYyB1aW50MzJfdCAoKiBjb25zdCBiZnJvbV9TeXNDb250cm9sKSh1aW50MzJfdCBhY3Rpb25fZmxhZ3MsIEFESV9TWVNDVFJMX1ZBTFVFUyAqcG93ZXJfc2V0dGluZ3MsIHZvaWQgKnJlc2VydmVkKSA9ICh2b2lkICopMHhFRjAwMDAzODsKKworLyogV2UgbmVlZCBhIGRlZGljYXRlZCBmdW5jdGlvbiBzaW5jZSB3ZSBuZWVkIHRvIHNjcmV3IHdpdGggdGhlIHN0YWNrIHBvaW50ZXIKKyAqIHdoZW4gcmVzZXR0aW5nLiAgVGhlIG9uLWNoaXAgUk9NIHdpbGwgc2F2ZS9yZXN0b3JlIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2sKKyAqIHdoZW4gZG9pbmcgYSBzeXN0ZW0gcmVzZXQsIHNvIHRoZSBzdGFjayBjYW5ub3QgYmUgb3V0c2lkZSBvZiB0aGUgY2hpcC4KKyAqLworX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZnJvbV9Tb2Z0UmVzZXQodm9pZCAqbmV3X3N0YWNrKQoreworCXdoaWxlICgxKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJCSJzcCA9ICVbc3RhY2tdOyIKKwkJCSJqdW1wICglW2Jmcm9tX3N5c2NvbnRyb2xdKTsiCisJCQk6IDogW2Jmcm9tX3N5c2NvbnRyb2xdICJwIihiZnJvbV9TeXNDb250cm9sKSwKKwkJCQkicTAiKFNZU0NUUkxfU09GVFJFU0VUKSwKKwkJCQkicTEiKDApLAorCQkJCSJxMiIoTlVMTCksCisJCQkJW3N0YWNrXSAicCIobmV3X3N0YWNrKQorCQkpOworfQorCisvKiBPVFAgRnVuY3Rpb25zICovCitzdGF0aWMgdWludDMyX3QgKCogY29uc3QgYmZyb21fT3RwQ29tbWFuZCkodWludDMyX3QgY29tbWFuZCwgdWludDMyX3QgdmFsdWUpID0gKHZvaWQgKikweEVGMDAwMDE4Oworc3RhdGljIHVpbnQzMl90ICgqIGNvbnN0IGJmcm9tX090cFJlYWQpKHVpbnQzMl90IHBhZ2UsIHVpbnQzMl90IGZsYWdzLCB1aW50NjRfdCAqcGFnZV9jb250ZW50KSA9ICh2b2lkICopMHhFRjAwMDAxQTsKK3N0YXRpYyB1aW50MzJfdCAoKiBjb25zdCBiZnJvbV9PdHBXcml0ZSkodWludDMyX3QgcGFnZSwgdWludDMyX3QgZmxhZ3MsIHVpbnQ2NF90ICpwYWdlX2NvbnRlbnQpID0gKHZvaWQgKikweEVGMDAwMDFDOworCisvKiBvdHAgY29tbWFuZDogZGVmaW5lcyBmb3IgImNvbW1hbmQiICovCisjZGVmaW5lIE9UUF9JTklUICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE9UUF9DTE9TRSAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisKKy8qIG90cCByZWFkL3dyaXRlOiBkZWZpbmVzIGZvciAiZmxhZ3MiICovCisjZGVmaW5lIE9UUF9MT1dFUl9IQUxGICAgICAgICAgICAweDAwMDAwMDAwIC8qIHNlbGVjdCB1cHBlci9sb3dlciA2NC1iaXQgaGFsZiAoYml0IDApICovCisjZGVmaW5lIE9UUF9VUFBFUl9IQUxGICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE9UUF9OT19FQ0MgICAgICAgICAgICAgICAweDAwMDAwMDEwIC8qIGRvIG5vdCB1c2UgRUNDICovCisjZGVmaW5lIE9UUF9MT0NLICAgICAgICAgICAgICAgICAweDAwMDAwMDIwIC8qIHNldHMgcGFnZSBwcm90ZWN0aW9uIGJpdCBmb3IgcGFnZSAqLworI2RlZmluZSBPVFBfQ0hFQ0tfRk9SX1BSRVZfV1JJVEUgMHgwMDAwMDA4MAorCisvKiBSZXR1cm4gdmFsdWVzIGZvciBhbGwgZnVuY3Rpb25zICovCisjZGVmaW5lIE9UUF9TVUNDRVNTICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgT1RQX01BU1RFUl9FUlJPUiAgICAgMHgwMDEKKyNkZWZpbmUgT1RQX1dSSVRFX0VSUk9SICAgICAgMHgwMDMKKyNkZWZpbmUgT1RQX1JFQURfRVJST1IgICAgICAgMHgwMDUKKyNkZWZpbmUgT1RQX0FDQ19WSU9fRVJST1IgICAgMHgwMDkKKyNkZWZpbmUgT1RQX0RBVEFfTVVMVF9FUlJPUiAgMHgwMTEKKyNkZWZpbmUgT1RQX0VDQ19NVUxUX0VSUk9SICAgMHgwMjEKKyNkZWZpbmUgT1RQX1BSRVZfV1JfRVJST1IgICAgMHgwNDEKKyNkZWZpbmUgT1RQX0RBVEFfU0JfV0FSTiAgICAgMHgxMDAKKyNkZWZpbmUgT1RQX0VDQ19TQl9XQVJOICAgICAgMHgyMDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IGQ4MWE3NzUuLjQ0MDM0MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0zMCwxMyArMzAsMTEgQEAKICNpZm5kZWYgX0JMQUNLRklOX0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfQkxBQ0tGSU5fQ0FDSEVGTFVTSF9ICiAKLSNpbmNsdWRlIDxhc20vY3BsYi5oPgotCi1leHRlcm4gdm9pZCBibGFja2Zpbl9pY2FjaGVfZGNhY2hlX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGJsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBibGFja2Zpbl9kY2FjaGVfZmx1c2hfcmFuZ2UodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgYmxhY2tmaW5fZGNhY2hlX2ludmFsaWRhdGVfcmFuZ2UodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgYmxhY2tmaW5fZGZsdXNoX3BhZ2Uodm9pZCAqKTsKK2V4dGVybiB2b2lkIGJsYWNrZmluX2ljYWNoZV9kY2FjaGVfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZF9hZGRyZXNzKTsKK2V4dGVybiB2b2lkIGJsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kX2FkZHJlc3MpOworZXh0ZXJuIHZvaWQgYmxhY2tmaW5fZGNhY2hlX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzcywgdW5zaWduZWQgbG9uZyBlbmRfYWRkcmVzcyk7CitleHRlcm4gdm9pZCBibGFja2Zpbl9kY2FjaGVfaW52YWxpZGF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kX2FkZHJlc3MpOworZXh0ZXJuIHZvaWQgYmxhY2tmaW5fZGZsdXNoX3BhZ2Uodm9pZCAqcGFnZSk7CiAKICNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQpAQCAtODcsNCArODUsMjEgQEAKICMgZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJlc2VydmVkX21lbV9kY2FjaGVfb247CitleHRlcm4gdW5zaWduZWQgbG9uZyByZXNlcnZlZF9tZW1faWNhY2hlX29uOworCitzdGF0aWMgaW5saW5lIGludCBiZmluX2FkZHJfZGNhY2hhYmxlKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyNpZmRlZiBDT05GSUdfQkZJTl9EQ0FDSEUKKwlpZiAoYWRkciA8IChfcmFtZW5kIC0gRE1BX1VOQ0FDSEVEX1JFR0lPTikpCisJCXJldHVybiAxOworI2VuZGlmCisKKwlpZiAocmVzZXJ2ZWRfbWVtX2RjYWNoZV9vbiAmJgorCQlhZGRyID49IF9yYW1lbmQgJiYgYWRkciA8IHBoeXNpY2FsX21lbV9lbmQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKICNlbmRpZgkJCQkvKiBfQkxBQ0tGSU5fSUNBQ0hFRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGIuaAppbmRleCAwNWQ2ZjA1Li45ZThiNDAzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGIuaApAQCAtNTUsNyArNTUsMTMgQEAKICNlbmRpZgogCiAjZGVmaW5lIEwxX0RNRU1PUlkgICAgICAgKENQTEJfTE9DSyB8IENQTEJfQ09NTU9OKQotI2RlZmluZSBMMl9NRU1PUlkgICAgICAgIChDUExCX0NPTU1PTikKKyNpZmRlZiBDT05GSUdfQkZJTl9MMl9DQUNIRUFCTEUKKyNkZWZpbmUgTDJfSU1FTU9SWSAgICAgICAgKFNEUkFNX0lHRU5FUklDKQorI2RlZmluZSBMMl9ETUVNT1JZICAgICAgICAoU0RSQU1fREdFTkVSSUMpCisjZWxzZQorI2RlZmluZSBMMl9JTUVNT1JZICAgICAgICAoQ1BMQl9DT01NT04pCisjZGVmaW5lIEwyX0RNRU1PUlkgICAgICAgIChDUExCX0NPTU1PTikKKyNlbmRpZgogI2RlZmluZSBTRFJBTV9ETk9OX0NIQkwgIChDUExCX0NPTU1PTikKICNkZWZpbmUgU0RSQU1fRUJJVSAgICAgICAoQ1BMQl9DT01NT04pCiAjZGVmaW5lIFNEUkFNX09PUFMgICAgICAgKENQTEJfVkFMSUQgfCBBTk9NQUxZXzA1MDAwMTU4X1dPUktBUk9VTkQgfCBDUExCX0xPQ0sgfCBDUExCX0RJUlRZKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiaW5pdC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiaW5pdC5oCmluZGV4IDBlYjFjMWIuLmY4NDViNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYmluaXQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGJpbml0LmgKQEAgLTg3LDkgKzg3LDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19NUFUgKi8KIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfbWVtX2RjYWNoZV9vbjsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHJlc2VydmVkX21lbV9pY2FjaGVfb247Ci0KLWV4dGVybiB2b2lkIGdlbmVyYXRlX2NwbF90YWJsZXModm9pZCk7CitleHRlcm4gdm9pZCBnZW5lcmF0ZV9jcGxiX3RhYmxlcyh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwdW1hc2suaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3B1bWFzay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjBhOGU5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3B1bWFzay5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9BU01fQkxBQ0tGSU5fQ1BVTUFTS19ICi0jZGVmaW5lIF9BU01fQkxBQ0tGSU5fQ1BVTUFTS19ICi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHVtYXNrLmg+Ci0KLSNlbmRpZgkJCQkvKiBfQVNNX0JMQUNLRklOX0NQVU1BU0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDFhMTNjMmYuLmVkZTc0OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTgwLDQgKzgwLDE1IEBACiBleHRlcm4gdm9pZCBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAogCQkgICAgICBpbnQgbmh3ZW50cmllcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKIAorc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJZG1hX2FkZHJfdCBoYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCWRtYV9hZGRyX3QgaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworfQogI2VuZGlmCQkJCS8qIF9CTEFDS0ZJTl9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA2N2EwM2E4Li5jZGJmY2ZjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWxmLmgKQEAgLTEyMiw2ICsxMjIsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oCmluZGV4IGNiYmY3ZmYuLjdkYzc3YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTEzNCw2ICsxMzQsMzYgQEAKIGV4dGVybiB2b2lkIGRtYV9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgc2hvcnQgY291bnQpOwogZXh0ZXJuIHZvaWQgZG1hX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBzaG9ydCBjb3VudCk7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkc2woY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJaW5zbCgodW5zaWduZWQgbG9uZylhZGRyLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkc3coY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJaW5zdygodW5zaWduZWQgbG9uZylhZGRyLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkc2IoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJaW5zYigodW5zaWduZWQgbG9uZylhZGRyLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXNsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCW91dHNsKCh1bnNpZ25lZCBsb25nKWFkZHIsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlc3coY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4pCit7CisJb3V0c3coKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVzYihjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwlvdXRzYigodW5zaWduZWQgbG9uZylhZGRyLCBidWYsIGxlbik7Cit9CisKIC8qCiAgKiBNYXAgc29tZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIGludG8gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2tnZGIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20va2dkYi5oCmluZGV4IDBmNzM4NDcuLjI2ZWJhYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20va2dkYi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20va2dkYi5oCkBAIC0xMjQsOSArMTI0LDE2IEBACiAvKiBOdW1iZXIgb2YgYnl0ZXMgb2YgcmVnaXN0ZXJzLiAgKi8KICNkZWZpbmUgTlVNUkVHQllURVMgQkZJTl9OVU1fUkVHUyo0CiAKLSNkZWZpbmUgQlJFQUtQT0lOVCgpIGFzbSgiICAgRVhDUFQgMjsiKTsKLSNkZWZpbmUgQlJFQUtfSU5TVFJfU0laRSAgICAgICAyCi0jZGVmaW5lIEhXX0JSRUFLUE9JTlRfTlVNCQk2CitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9rZ2RiX2JyZWFrcG9pbnQodm9pZCkKK3sKKwlhc20oIiAgIEVYQ1BUIDI7Iik7Cit9CisjZGVmaW5lIEJSRUFLX0lOU1RSX1NJWkUJMgorI2RlZmluZSBDQUNIRV9GTFVTSF9JU19TQUZFCTEKKyNkZWZpbmUgSFdfSU5TVF9XQVRDSFBPSU5UX05VTQk2CisjZGVmaW5lIEhXX1dBVENIUE9JTlRfTlVNCTgKKyNkZWZpbmUgVFlQRV9JTlNUX1dBVENIUE9JTlQJMAorI2RlZmluZSBUWVBFX0RBVEFfV0FUQ0hQT0lOVAkxCiAKIC8qIEluc3RydWN0aW9uIHdhdGNocG9pbnQgYWRkcmVzcyBjb250cm9sIHJlZ2lzdGVyIGJpdHMgbWFzayAqLwogI2RlZmluZSBXUFBXUgkJMHgxCkBAIC0xNjMsMTAgKzE3MCwxMSBAQAogI2RlZmluZSBXUERBRU4xCQkweDgKICNkZWZpbmUgV1BEQ05URU4wCTB4MTAKICNkZWZpbmUgV1BEQ05URU4xCTB4MjAKKwogI2RlZmluZSBXUERTUkMwCQkweGMwCi0jZGVmaW5lIFdQREFDQzAJCTB4MzAwCisjZGVmaW5lIFdQREFDQzBfT0ZGU0VUCTgKICNkZWZpbmUgV1BEU1JDMQkJMHhjMDAKLSNkZWZpbmUgV1BEQUNDMQkJMHgzMDAwCisjZGVmaW5lIFdQREFDQzFfT0ZGU0VUCTEyCiAKIC8qIFdhdGNocG9pbnQgc3RhdHVzIHJlZ2lzdGVyIGJpdHMgbWFzayAqLwogI2RlZmluZSBTVEFUSUEwCQkweDEKQEAgLTE3OCw3ICsxODYsNCBAQAogI2RlZmluZSBTVEFUREEwCQkweDQwCiAjZGVmaW5lIFNUQVREQTEJCTB4ODAKIAotZXh0ZXJuIHZvaWQga2dkYl9wcmludChjb25zdCBjaGFyICpmbXQsIC4uLik7Ci1leHRlcm4gdm9pZCBpbml0X2tnZGJfdWFydCh2b2lkKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggODUyOTU1Mi4uMzU1OTNkZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtNDUsNDkgKzQ1LDEyIEBACiBleHRlcm4gaW50IGwxc3JhbV9mcmVlKGNvbnN0IHZvaWQqKTsKIGV4dGVybiB2b2lkICpsMXNyYW1fYWxsb2NfbWF4KHZvaWQqKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLX0KLQotLyogQ2FsbGVkIHdoZW4gY3JlYXRpbmcgYSBuZXcgY29udGV4dCBkdXJpbmcgZm9yaygpIG9yIGV4ZWN2ZSgpLiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1pbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLSNpZmRlZiBDT05GSUdfTVBVCi0JdW5zaWduZWQgbG9uZyBwID0gX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlX21hc2tfb3JkZXIpOwotCW1tLT5jb250ZXh0LnBhZ2Vfcnd4X21hc2sgPSAodW5zaWduZWQgbG9uZyAqKXA7Ci0JbWVtc2V0KG1tLT5jb250ZXh0LnBhZ2Vfcnd4X21hc2ssIDAsCi0JICAgICAgIHBhZ2VfbWFza19uZWx0cyAqIDMgKiBzaXplb2YobG9uZykpOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2wxc3RhY2sodm9pZCkKIHsKIAlucl9sMXN0YWNrX3Rhc2tzLS07CiAJaWYgKG5yX2wxc3RhY2tfdGFza3MgPT0gMCkKIAkJbDFzcmFtX2ZyZWUobDFfc3RhY2tfYmFzZSk7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXN0cnVjdCBzcmFtX2xpc3Rfc3RydWN0ICp0bXA7Ci0KLQlpZiAoY3VycmVudF9sMV9zdGFja19zYXZlID09IG1tLT5jb250ZXh0LmwxX3N0YWNrX3NhdmUpCi0JCWN1cnJlbnRfbDFfc3RhY2tfc2F2ZSA9IE5VTEw7Ci0JaWYgKG1tLT5jb250ZXh0LmwxX3N0YWNrX3NhdmUpCi0JCWZyZWVfbDFzdGFjaygpOwotCi0Jd2hpbGUgKCh0bXAgPSBtbS0+Y29udGV4dC5zcmFtX2xpc3QpKSB7Ci0JCW1tLT5jb250ZXh0LnNyYW1fbGlzdCA9IHRtcC0+bmV4dDsKLQkJc3JhbV9mcmVlKHRtcC0+YWRkcik7Ci0JCWtmcmVlKHRtcCk7Ci0JfQotI2lmZGVmIENPTkZJR19NUFUKLQlpZiAoY3VycmVudF9yd3hfbWFzayA9PSBtbS0+Y29udGV4dC5wYWdlX3J3eF9tYXNrKQotCQljdXJyZW50X3J3eF9tYXNrID0gTlVMTDsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW1tLT5jb250ZXh0LnBhZ2Vfcnd4X21hc2ssIHBhZ2VfbWFza19vcmRlcik7Ci0jZW5kaWYKLX0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCiBhbGxvY19sMXN0YWNrKHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCB1bnNpZ25lZCBsb25nICpzdGFja19iYXNlKQpAQCAtMTM0LDYgKzk3LDcgQEAKIAl9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUFBfU1RBQ0tfTDEKIAkvKiBMMSBzdGFjayBzd2l0Y2hpbmcuICAqLwogCWlmICghbmV4dF9tbS0+Y29udGV4dC5sMV9zdGFja19zYXZlKQogCQlyZXR1cm47CkBAIC0xNDQsNiArMTA4LDcgQEAKIAl9CiAJY3VycmVudF9sMV9zdGFja19zYXZlID0gbmV4dF9tbS0+Y29udGV4dC5sMV9zdGFja19zYXZlOwogCW1lbWNweShsMV9zdGFja19iYXNlLCBjdXJyZW50X2wxX3N0YWNrX3NhdmUsIGwxX3N0YWNrX2xlbik7CisjZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19NUFUKQEAgLTE4MCw0ICsxNDUsNDQgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCisvKiBDYWxsZWQgd2hlbiBjcmVhdGluZyBhIG5ldyBjb250ZXh0IGR1cmluZyBmb3JrKCkgb3IgZXhlY3ZlKCkuICAqLworc3RhdGljIGlubGluZSBpbnQKK2luaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworI2lmZGVmIENPTkZJR19NUFUKKwl1bnNpZ25lZCBsb25nIHAgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIHBhZ2VfbWFza19vcmRlcik7CisJbW0tPmNvbnRleHQucGFnZV9yd3hfbWFzayA9ICh1bnNpZ25lZCBsb25nICopcDsKKwltZW1zZXQobW0tPmNvbnRleHQucGFnZV9yd3hfbWFzaywgMCwKKwkgICAgICAgcGFnZV9tYXNrX25lbHRzICogMyAqIHNpemVvZihsb25nKSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzdHJ1Y3Qgc3JhbV9saXN0X3N0cnVjdCAqdG1wOworCisjaWZkZWYgQ09ORklHX0FQUF9TVEFDS19MMQorCWlmIChjdXJyZW50X2wxX3N0YWNrX3NhdmUgPT0gbW0tPmNvbnRleHQubDFfc3RhY2tfc2F2ZSkKKwkJY3VycmVudF9sMV9zdGFja19zYXZlID0gMDsKKwlpZiAobW0tPmNvbnRleHQubDFfc3RhY2tfc2F2ZSkKKwkJZnJlZV9sMXN0YWNrKCk7CisjZW5kaWYKKworCXdoaWxlICgodG1wID0gbW0tPmNvbnRleHQuc3JhbV9saXN0KSkgeworCQltbS0+Y29udGV4dC5zcmFtX2xpc3QgPSB0bXAtPm5leHQ7CisJCXNyYW1fZnJlZSh0bXAtPmFkZHIpOworCQlrZnJlZSh0bXApOworCX0KKyNpZmRlZiBDT05GSUdfTVBVCisJaWYgKGN1cnJlbnRfcnd4X21hc2sgPT0gbW0tPmNvbnRleHQucGFnZV9yd3hfbWFzaykKKwkJY3VycmVudF9yd3hfbWFzayA9IE5VTEw7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyltbS0+Y29udGV4dC5wYWdlX3J3eF9tYXNrLCBwYWdlX21hc2tfb3JkZXIpOworI2VuZGlmCit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggNmYzOTk1Yi4uZTNlOWI0MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xMzQsNiArMTM0LDEyIEBACiAJcmV0dXJuIHJldmlkOwogfQogCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IF9fcHVyZSBiZmluX2NwdWlkKHZvaWQpCit7CisJcmV0dXJuIChiZmluX3JlYWRfQ0hJUElEKCkgJiBDSElQSURfRkFNSUxZKSA+PiAxMjsKKworfQorCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IF9fcHVyZSBiZmluX2NvbXBpbGVkX3JldmlkKHZvaWQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfQkZfUkVWXzBfMCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGE0NWE4MGUuLmUzZjA4NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMTU4LDYgKzE1OCw4IEBACiAjZGVmaW5lIFBUX1NFUVNUQVQgOAogI2RlZmluZSBQVF9JUEVORCA0CiAKKyNkZWZpbmUgUFRfT1JJR19SMCAyMDgKKyNkZWZpbmUgUFRfT1JJR19QMCAyMTIKICNkZWZpbmUgUFRfU1lTQ0ZHIDIxNgogI2RlZmluZSBQVF9URVhUX0FERFIgMjIwCiAjZGVmaW5lIFBUX1RFWFRfRU5EX0FERFIgMjI0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RpbWV4LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RpbWV4LmgKaW5kZXggMjJiMDgwNi4uMjQ4YWViMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGltZXguaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RpbWV4LmgKQEAgLTE2LDcgKzE2LDcgQEAKIHN0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdG1wLCB0bXAyOwotCV9fYXNtX18oIiUwID0gY3ljbGVzOyAlMSA9IGN5Y2xlczI7IiA6ICI9ZCIodG1wKSwgIj1kIih0bXAyKSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIiUwID0gY3ljbGVzOyAlMSA9IGN5Y2xlczI7IiA6ICI9ZCIodG1wKSwgIj1kIih0bXAyKSk7CiAJcmV0dXJuIHRtcCB8ICgoY3ljbGVzX3QpdG1wMiA8PCAzMik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhcHMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhcHMuaAppbmRleCBmMGU1Zjk0Li4zNGY3Mjk1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYXBzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFwcy5oCkBAIC01OSw2ICs1OSw5IEBACiAJbGV2ZWwgIiAgIG9yIGEgMTYtYml0IHJlZ2lzdGVyIGlzIGFjY2Vzc2VkIHdpdGggYSAzMi1iaXQgaW5zdHJ1Y3Rpb24uXG4iCiAjZGVmaW5lIEhXQ194MyhsZXZlbCkgXAogCSJFeHRlcm5hbCBNZW1vcnkgQWRkcmVzc2luZyBFcnJvclxuIgorI2RlZmluZSBFWENfMHgwNChsZXZlbCkgXAorCSJVbmltcGxtZW50ZWQgZXhjZXB0aW9uIG9jY3VyZWRcbiIgXAorCWxldmVsICIgLSBNYXliZSB5b3UgZm9yZ290IHRvIGluc3RhbGwgYSBjdXN0b20gZXhjZXB0aW9uIGhhbmRsZXI/XG4iCiAjZGVmaW5lIEhXQ194MTIobGV2ZWwpIFwKIAkiUGVyZm9ybWFuY2UgTW9uaXRvciBPdmVyZmxvd1xuIgogI2RlZmluZSBIV0NfeDE4KGxldmVsKSBcCkBAIC04NCw3ICs4Nyw3IEBACiAJbGV2ZWwgIiAgIGEgcGFydGljdWxhciBwcm9jZXNzb3IgaW1wbGVtZW50YXRpb24uXG4iCiAjZGVmaW5lIEVYQ18weDIyKGxldmVsKSBcCiAJIklsbGVnYWwgaW5zdHJ1Y3Rpb24gY29tYmluYXRpb25cbiIgXAotCWxldmVsICIgLSBTZWUgc2VjdGlvbiBmb3IgbXVsdGktaXNzdWUgcnVsZXMgaW4gdGhlIEFEU1AtQkY1M3ggQmxhY2tmaW5cbiIgXAorCWxldmVsICIgLSBTZWUgc2VjdGlvbiBmb3IgbXVsdGktaXNzdWUgcnVsZXMgaW4gdGhlIEJsYWNrZmluXG4iIFwKIAlsZXZlbCAiICAgUHJvY2Vzc29yIEluc3RydWN0aW9uIFNldCBSZWZlcmVuY2UuXG4iCiAjZGVmaW5lIEVYQ18weDIzKGxldmVsKSBcCiAJIkRhdGEgYWNjZXNzIENQTEIgcHJvdGVjdGlvbiB2aW9sYXRpb25cbiIgXApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggODgxYWZlOS4uOWJiODVkZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC02MCw2ICs2MCw3IEBACiAJREVGSU5FKEtFUk5FTF9TVEFDS19TSVpFLCBUSFJFQURfU0laRSk7CiAKIAkvKiBvZmZzZXRzIGludG8gdGhlIHB0X3JlZ3MgKi8KKwlERUZJTkUoUFRfT1JJR19SMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIG9yaWdfcjApKTsKIAlERUZJTkUoUFRfT1JJR19QMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIG9yaWdfcDApKTsKIAlERUZJTkUoUFRfT1JJR19QQywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIG9yaWdfcGMpKTsKIAlERUZJTkUoUFRfUjAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCByMCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYwppbmRleCBlY2JkMTQxLi42ZTA4ZjQyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYwpAQCAtMjMxLDE0ICsyMzEsMTQgQEAKIH0KICNlbmRpZgogCi12b2lkIGdwaW9fZXJyb3IodW5zaWduZWQgZ3BpbykKK3N0YXRpYyB2b2lkIGdwaW9fZXJyb3IodW5zaWduZWQgZ3BpbykKIHsKIAlwcmludGsoS0VSTl9FUlIgImJmaW4tZ3BpbzogR1BJTyAlZCB3YXNuJ3QgcmVxdWVzdGVkIVxuIiwgZ3Bpbyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9sYWJlbCh1bnNpZ25lZCBzaG9ydCBpZGVudCwgY29uc3QgY2hhciAqbGFiZWwpCiB7Ci0JaWYgKGxhYmVsICYmIHN0cl9pZGVudCkgeworCWlmIChsYWJlbCkgewogCQlzdHJuY3B5KHN0cl9pZGVudFtpZGVudF0ubmFtZSwgbGFiZWwsCiAJCQkgUkVTT1VSQ0VfTEFCRUxfU0laRSk7CiAJCXN0cl9pZGVudFtpZGVudF0ubmFtZVtSRVNPVVJDRV9MQUJFTF9TSVpFIC0gMV0gPSAwOwpAQCAtMjQ3LDkgKzI0Nyw2IEBACiAKIHN0YXRpYyBjaGFyICpnZXRfbGFiZWwodW5zaWduZWQgc2hvcnQgaWRlbnQpCiB7Ci0JaWYgKCFzdHJfaWRlbnQpCi0JCXJldHVybiAiVU5LTk9XTiI7Ci0KIAlyZXR1cm4gKCpzdHJfaWRlbnRbaWRlbnRdLm5hbWUgPyBzdHJfaWRlbnRbaWRlbnRdLm5hbWUgOiAiVU5LTk9XTiIpOwogfQogCkBAIC0yNjAsNyArMjU3LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJQbGVhc2UgcHJvdmlkZSBub25lLW51bGwgbGFiZWxcbiIpOwogCX0KIAotCWlmIChsYWJlbCAmJiBzdHJfaWRlbnQpCisJaWYgKGxhYmVsKQogCQlyZXR1cm4gc3RybmNtcChzdHJfaWRlbnRbaWRlbnRdLm5hbWUsCiAJCQkJIGxhYmVsLCBzdHJsZW4obGFiZWwpKTsKIAllbHNlCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxiaW5pdC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYmluaXQuYwppbmRleCA0ODA2MDEwLi41NWFmNzI5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxiaW5pdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMKQEAgLTM2LDcgKzM2LDcgQEAKIGludCBmaXJzdF9zd2l0Y2hlZF9pY3BsYiwgZmlyc3Rfc3dpdGNoZWRfZGNwbGI7CiBpbnQgZmlyc3RfbWFza19kY3BsYjsKIAotdm9pZCBfX2luaXQgZ2VuZXJhdGVfY3BsX3RhYmxlcyh2b2lkKQordm9pZCBfX2luaXQgZ2VuZXJhdGVfY3BsYl90YWJsZXModm9pZCkKIHsKIAlpbnQgaV9kLCBpX2k7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwpAQCAtODMsOCArODMsMTggQEAKIAlkY3BsYl90YmxbaV9kXS5hZGRyID0gTDFfREFUQV9BX1NUQVJUOwogCWRjcGxiX3RibFtpX2QrK10uZGF0YSA9IEwxX0RNRU1PUlkgfCBQQUdFX1NJWkVfNE1COwogI2VuZGlmCisjaWYgTDFfQ09ERV9MRU5HVEggPiAwCiAJaWNwbGJfdGJsW2lfaV0uYWRkciA9IEwxX0NPREVfU1RBUlQ7CiAJaWNwbGJfdGJsW2lfaSsrXS5kYXRhID0gTDFfSU1FTU9SWSB8IFBBR0VfU0laRV80TUI7CisjZW5kaWYKKworCS8qIENvdmVyIEwyIG1lbW9yeSAqLworI2lmIEwyX0xFTkdUSCA+IDAKKwlkY3BsYl90YmxbaV9kXS5hZGRyID0gTDJfU1RBUlQ7CisJZGNwbGJfdGJsW2lfZCsrXS5kYXRhID0gTDJfRE1FTU9SWSB8IFBBR0VfU0laRV8xTUI7CisJaWNwbGJfdGJsW2lfaV0uYWRkciA9IEwyX1NUQVJUOworCWljcGxiX3RibFtpX2krK10uZGF0YSA9IEwyX0lNRU1PUlkgfCBQQUdFX1NJWkVfMU1COworI2VuZGlmCiAKIAlmaXJzdF9tYXNrX2RjcGxiID0gaV9kOwogCWZpcnN0X3N3aXRjaGVkX2RjcGxiID0gaV9kICsgKDEgPDwgcGFnZV9tYXNrX29yZGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJtZ3IuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJtZ3IuYwppbmRleCA5OWYyODMxLi5iYWE1MmUyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2NwbGJpbml0Lmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKQEAgLTE0NCw5ICsxNDUsNyBAQAogCiAJZF9kYXRhID0gQ1BMQl9TVVBWX1dSIHwgQ1BMQl9WQUxJRCB8IENQTEJfRElSVFkgfCBQQUdFX1NJWkVfNEtCOwogI2lmZGVmIENPTkZJR19CRklOX0RDQUNIRQotCWlmIChhZGRyIDwgX3JhbWVuZCAtIERNQV9VTkNBQ0hFRF9SRUdJT04gfHwKLQkgICAgKHJlc2VydmVkX21lbV9kY2FjaGVfb24gJiYgYWRkciA+PSBfcmFtZW5kICYmCi0JICAgICBhZGRyIDwgcGh5c2ljYWxfbWVtX2VuZCkpIHsKKwlpZiAoYmZpbl9hZGRyX2RjYWNoYWJsZShhZGRyKSkgewogCQlkX2RhdGEgfD0gQ1BMQl9MMV9DSEJMIHwgQU5PTUFMWV8wNTAwMDE1OF9XT1JLQVJPVU5EOwogI2lmZGVmIENPTkZJR19CRklOX1dUCiAJCWRfZGF0YSB8PSBDUExCX0wxX0FPVyB8IENQTEJfV1Q7CkBAIC0zMjIsOSArMzIxLDExIEBACiB2b2lkIGZsdXNoX3N3aXRjaGVkX2NwbGJzKHZvaWQpCiB7CiAJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW5yX2NwbGJfZmx1c2grKzsKIAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlkaXNhYmxlX2ljcGxiKCk7CiAJZm9yIChpID0gZmlyc3Rfc3dpdGNoZWRfaWNwbGI7IGkgPCBNQVhfQ1BMQlM7IGkrKykgewogCQlpY3BsYl90YmxbaV0uZGF0YSA9IDA7CkBAIC0zMzgsNiArMzM5LDggQEAKIAkJYmZpbl93cml0ZTMyKERDUExCX0RBVEEwICsgaSAqIDQsIDApOwogCX0KIAllbmFibGVfZGNwbGIoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIH0KIAogdm9pZCBzZXRfbWFza19kY3BsYnModW5zaWduZWQgbG9uZyAqbWFza3MpCkBAIC0zNDUsMTAgKzM0OCwxNSBAQAogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKW1hc2tzOwogCXVuc2lnbmVkIGxvbmcgZF9kYXRhOwotCWN1cnJlbnRfcnd4X21hc2sgPSBtYXNrczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFtYXNrcykKKwlpZiAoIW1hc2tzKSB7CisJCWN1cnJlbnRfcnd4X21hc2sgPSBtYXNrczsKIAkJcmV0dXJuOworCX0KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljdXJyZW50X3J3eF9tYXNrID0gbWFza3M7CiAKIAlkX2RhdGEgPSBDUExCX1NVUFZfV1IgfCBDUExCX1ZBTElEIHwgQ1BMQl9ESVJUWSB8IFBBR0VfU0laRV80S0I7CiAjaWZkZWYgQ09ORklHX0JGSU5fRENBQ0hFCkBAIC0zNjcsNCArMzc1LDUgQEAKIAkJYWRkciArPSBQQUdFX1NJWkU7CiAJfQogCWVuYWJsZV9kY3BsYigpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYwppbmRleCA3MjhmNzA4Li41MTJmOGM5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJpbml0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxiaW5pdC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9jcGxiLmg+CiAjaW5jbHVkZSA8YXNtL2NwbGJpbml0Lmg+CiAKQEAgLTE2OCw4ICsxNjksOCBAQAogCQkuZW5kID0gTDJfU1RBUlQgKyBMMl9MRU5HVEgsCiAJCS5wc2l6ZSA9IFNJWkVfMU0sCiAJCS5hdHRyID0gU1dJVENIX1QgfCBJX0NQTEIgfCBEX0NQTEIsCi0JCS5pX2NvbmYgPSBMMl9NRU1PUlksCi0JCS5kX2NvbmYgPSBMMl9NRU1PUlksCisJCS5pX2NvbmYgPSBMMl9JTUVNT1JZLAorCQkuZF9jb25mID0gTDJfRE1FTU9SWSwKIAkJLnZhbGlkID0gKEwyX0xFTkdUSCA+IDApLAogCQkubmFtZSA9ICJMMiBNZW1vcnkiLAogCX0sCkBAIC0zMDgsNyArMzA5LDcgQEAKIAl9CiB9CiAKLXZvaWQgX19pbml0IGdlbmVyYXRlX2NwbF90YWJsZXModm9pZCkKK3ZvaWQgX19pbml0IGdlbmVyYXRlX2NwbGJfdGFibGVzKHZvaWQpCiB7CiAKIAl1MTYgaSwgaiwgcHJvY2VzczsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggNjBmNjdmOS4uMWY0ZTNkMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTM1LDYgKzM1LDkgQEAKIGV4dGVybiBzdHJ1Y3QgY29uc29sZSAqYmZpbl9lYXJseXNlcmlhbF9pbml0KHVuc2lnbmVkIGludCBwb3J0LAogCQkJCQkJdW5zaWduZWQgaW50IGNmbGFnKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19CRklOX0pUQUdfQ09NTQorZXh0ZXJuIHN0cnVjdCBjb25zb2xlICpiZmluX2pjX2Vhcmx5X2luaXQodm9pZCk7CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBjb25zb2xlICplYXJseV9jb25zb2xlOwogCkBAIC0xNDIsNiArMTQ1LDE1IEBACiAJCWVhcmx5X2NvbnNvbGUgPSBlYXJseXNlcmlhbF9pbml0KGJ1Zik7CiAJfQogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQkZJTl9KVEFHX0NPTU0KKwkvKiBDaGVjayBmb3IgQmxhY2tmaW4gSlRBRyAqLworCWlmICghc3RybmNtcChidWYsICJqdGFnIiwgNCkpIHsKKwkJYnVmICs9IDQ7CisJCWVhcmx5X2NvbnNvbGUgPSBiZmluX2pjX2Vhcmx5X2luaXQoKTsKKwl9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19GQgogCQkvKiBUT0RPOiBhZGQgZnJhbWVidWZmZXIgY29uc29sZSBzdXBwb3J0ICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYwppbmRleCBhMWY5NjQxLi5iNzk1YTIwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYi5jCkBAIC0xLDMyICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIFNvbmljIFpoYW5nCisgKiBhcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiLmMgLSBCbGFja2ZpbiBrZ2RiIHBpZWNlcwogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIFJldjogICAgICAgICAgJElkOiBrZ2RiX2JmaW5fbGludXgtMi42LngucGF0Y2ggNDkzNCAyMDA3LTAyLTEzIDA5OjMyOjExWiBzb25pY3ogJAotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNS0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0zOSwyNCArMTYsMjkgQEAKICNpbmNsdWRlIDxsaW51eC9rZ2RiLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2dlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CiAKIC8qIFB1dCB0aGUgZXJyb3IgY29kZSBoZXJlIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBjYXJlcy4gICovCi1pbnQgZ2RiX2JmNTMzZXJyY29kZTsKK2ludCBnZGJfYmZpbl9lcnJjb2RlOwogLyogTGlrZXdpc2UsIHRoZSB2ZWN0b3IgbnVtYmVyIGhlcmUgKHNpbmNlIEdEQiBvbmx5IGdldHMgdGhlIHNpZ25hbAogICAgbnVtYmVyIHRocm91Z2ggdGhlIHVzdWFsIG1lYW5zLCBhbmQgdGhhdCdzIG5vdCB2ZXJ5IHNwZWNpZmljKS4gICovCi1pbnQgZ2RiX2JmNTMzdmVjdG9yID0gLTE7CitpbnQgZ2RiX2JmaW5fdmVjdG9yID0gLTE7CiAKICNpZiBLR0RCX01BWF9OT19DUFVTICE9IDgKICNlcnJvciBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2Ygc2xhdmVjcHVsb2NrcwogI2VuZGlmCiAKLXZvaWQgcmVnc190b19nZGJfcmVncyh1bnNpZ25lZCBsb25nICpnZGJfcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisjaWZkZWYgQ09ORklHX0JGSU5fV0RUCisjIGVycm9yICJQbGVhc2UgdW5zZWxlY3QgYmxhY2tmaW4gd2F0Y2hkb2cgZHJpdmVyIGJlZm9yZSBidWlsZCBLR0RCLiIKKyNlbmRpZgorCit2b2lkIHB0X3JlZ3NfdG9fZ2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWdkYl9yZWdzW0JGSU5fUjBdID0gcmVncy0+cjA7CiAJZ2RiX3JlZ3NbQkZJTl9SMV0gPSByZWdzLT5yMTsKQEAgLTEzMyw3ICsxMTUsNyBAQAogCWdkYl9yZWdzW0JGSU5fU0VRU1RBVF0gPSBwLT50aHJlYWQuc2Vxc3RhdDsKIH0KIAotdm9pZCBnZGJfcmVnc190b19yZWdzKHVuc2lnbmVkIGxvbmcgKmdkYl9yZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgZ2RiX3JlZ3NfdG9fcHRfcmVncyh1bnNpZ25lZCBsb25nICpnZGJfcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcmVncy0+cjAgPSBnZGJfcmVnc1tCRklOX1IwXTsKIAlyZWdzLT5yMSA9IGdkYl9yZWdzW0JGSU5fUjFdOwpAQCAtMTk5LDE3MSArMTgxLDIwOCBAQAogCXVuc2lnbmVkIGludCBkYXRhYWNjOjI7CiAJdW5zaWduZWQgc2hvcnQgY291bnQ7CiAJdW5zaWduZWQgaW50IGFkZHI7Ci19IGJyZWFraW5mb1tIV19CUkVBS1BPSU5UX05VTV07Cit9IGJyZWFraW5mb1tIV19XQVRDSFBPSU5UX05VTV07CiAKLWludCBrZ2RiX2FyY2hfaW5pdCh2b2lkKQotewotCWRlYnVnZ2VyX3N0ZXAgPSAwOwotCi0Ja2dkYl9yZW1vdmVfYWxsX2h3X2JyZWFrKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBrZ2RiX3NldF9od19icmVhayh1bnNpZ25lZCBsb25nIGFkZHIpCitpbnQgYmZpbl9zZXRfaHdfYnJlYWsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuLCBlbnVtIGtnZGJfYnB0eXBlIHR5cGUpCiB7CiAJaW50IGJyZWFrbm87Ci0JZm9yIChicmVha25vID0gMDsgYnJlYWtubyA8IEhXX0JSRUFLUE9JTlRfTlVNOyBicmVha25vKyspCi0JCWlmICghYnJlYWtpbmZvW2JyZWFrbm9dLm9jY3VwaWVkKSB7CisJaW50IGJmaW5fdHlwZTsKKwlpbnQgZGF0YWFjYyA9IDA7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEJQX0hBUkRXQVJFX0JSRUFLUE9JTlQ6CisJCWJmaW5fdHlwZSA9IFRZUEVfSU5TVF9XQVRDSFBPSU5UOworCQlicmVhazsKKwljYXNlIEJQX1dSSVRFX1dBVENIUE9JTlQ6CisJCWRhdGFhY2MgPSAxOworCQliZmluX3R5cGUgPSBUWVBFX0RBVEFfV0FUQ0hQT0lOVDsKKwkJYnJlYWs7CisJY2FzZSBCUF9SRUFEX1dBVENIUE9JTlQ6CisJCWRhdGFhY2MgPSAyOworCQliZmluX3R5cGUgPSBUWVBFX0RBVEFfV0FUQ0hQT0lOVDsKKwkJYnJlYWs7CisJY2FzZSBCUF9BQ0NFU1NfV0FUQ0hQT0lOVDoKKwkJZGF0YWFjYyA9IDM7CisJCWJmaW5fdHlwZSA9IFRZUEVfREFUQV9XQVRDSFBPSU5UOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwkvKiBCZWNhc3VlIGhhcmR3YXJlIGRhdGEgd2F0Y2hwb2ludCBpbXBlbGVtZW50ZWQgaW4gY3VycmVudAorCSAqIEJsYWNrZmluIGNhbiBub3QgdHJpZ2dlciBhbiBleGNlcHRpb24gZXZlbnQgYXMgdGhlIGhhcmR3YXJlCisJICogaW5zdHJjdGlvbiB3YXRjaHBvaW50IGRvZXMsIHdlIGlnbmFvcmUgYWxsIGRhdGEgd2F0Y2ggcG9pbnQgaGVyZS4KKwkgKiBUaGV5IGNhbiBiZSB0dXJuZWQgb24gZWFzaWx5IGFmdGVyIGZ1dHVyZSBibGFja2ZpbiBkZXNpZ24KKwkgKiBzdXBwb3J0cyB0aGlzIGZlYXR1cmUuCisJICovCisJZm9yIChicmVha25vID0gMDsgYnJlYWtubyA8IEhXX0lOU1RfV0FUQ0hQT0lOVF9OVU07IGJyZWFrbm8rKykKKwkJaWYgKGJmaW5fdHlwZSA9PSBicmVha2luZm9bYnJlYWtub10udHlwZQorCQkJJiYgIWJyZWFraW5mb1ticmVha25vXS5vY2N1cGllZCkgewogCQkJYnJlYWtpbmZvW2JyZWFrbm9dLm9jY3VwaWVkID0gMTsKIAkJCWJyZWFraW5mb1ticmVha25vXS5lbmFibGVkID0gMTsKLQkJCWJyZWFraW5mb1ticmVha25vXS50eXBlID0gMTsKIAkJCWJyZWFraW5mb1ticmVha25vXS5hZGRyID0gYWRkcjsKKwkJCWJyZWFraW5mb1ticmVha25vXS5kYXRhYWNjID0gZGF0YWFjYzsKKwkJCWJyZWFraW5mb1ticmVha25vXS5jb3VudCA9IDA7CiAJCQlyZXR1cm4gMDsKIAkJfQogCiAJcmV0dXJuIC1FTk9TUEM7CiB9CiAKLWludCBrZ2RiX3JlbW92ZV9od19icmVhayh1bnNpZ25lZCBsb25nIGFkZHIpCitpbnQgYmZpbl9yZW1vdmVfaHdfYnJlYWsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuLCBlbnVtIGtnZGJfYnB0eXBlIHR5cGUpCiB7CiAJaW50IGJyZWFrbm87Ci0JZm9yIChicmVha25vID0gMDsgYnJlYWtubyA8IEhXX0JSRUFLUE9JTlRfTlVNOyBicmVha25vKyspCi0JCWlmIChicmVha2luZm9bYnJlYWtub10uYWRkciA9PSBhZGRyKQotCQkJbWVtc2V0KCYoYnJlYWtpbmZvW2JyZWFrbm9dKSwgMCwgc2l6ZW9mKHN0cnVjdCBod19icmVha3BvaW50KSk7CisJaW50IGJmaW5fdHlwZTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQlBfSEFSRFdBUkVfQlJFQUtQT0lOVDoKKwkJYmZpbl90eXBlID0gVFlQRV9JTlNUX1dBVENIUE9JTlQ7CisJCWJyZWFrOworCWNhc2UgQlBfV1JJVEVfV0FUQ0hQT0lOVDoKKwljYXNlIEJQX1JFQURfV0FUQ0hQT0lOVDoKKwljYXNlIEJQX0FDQ0VTU19XQVRDSFBPSU5UOgorCQliZmluX3R5cGUgPSBUWVBFX0RBVEFfV0FUQ0hQT0lOVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCWZvciAoYnJlYWtubyA9IDA7IGJyZWFrbm8gPCBIV19XQVRDSFBPSU5UX05VTTsgYnJlYWtubysrKQorCQlpZiAoYmZpbl90eXBlID09IGJyZWFraW5mb1ticmVha25vXS50eXBlCisJCQkmJiBicmVha2luZm9bYnJlYWtub10ub2NjdXBpZWQKKwkJCSYmIGJyZWFraW5mb1ticmVha25vXS5hZGRyID09IGFkZHIpIHsKKwkJCWJyZWFraW5mb1ticmVha25vXS5vY2N1cGllZCA9IDA7CisJCQlicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCA9IDA7CisJCX0KIAogCXJldHVybiAwOwogfQogCi12b2lkIGtnZGJfcmVtb3ZlX2FsbF9od19icmVhayh2b2lkKQotewotCW1lbXNldChicmVha2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgaHdfYnJlYWtwb2ludCkqOCk7Ci19Ci0KLS8qCi12b2lkIGtnZGJfc2hvd19pbmZvKHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgImh3ZDogd3BpYTA9MHgleCwgd3BpYWNudDA9JWQsIHdwaWFjdGw9MHgleCwgd3BzdGF0PTB4JXhcbiIsCi0JCWJmaW5fcmVhZF9XUElBMCgpLCBiZmluX3JlYWRfV1BJQUNOVDAoKSwKLQkJYmZpbl9yZWFkX1dQSUFDVEwoKSwgYmZpbl9yZWFkX1dQU1RBVCgpKTsKLX0KLSovCi0KLXZvaWQga2dkYl9jb3JyZWN0X2h3X2JyZWFrKHZvaWQpCit2b2lkIGJmaW5fcmVtb3ZlX2FsbF9od19icmVhayh2b2lkKQogewogCWludCBicmVha25vOwotCWludCBjb3JyZWN0aXQ7Ci0JdWludDMyX3Qgd3BkYWN0bCA9IGJmaW5fcmVhZF9XUERBQ1RMKCk7CiAKLQljb3JyZWN0aXQgPSAwOwotCWZvciAoYnJlYWtubyA9IDA7IGJyZWFrbm8gPCBIV19CUkVBS1BPSU5UX05VTTsgYnJlYWtubysrKSB7Ci0JCWlmIChicmVha2luZm9bYnJlYWtub10udHlwZSA9PSAxKSB7CisJbWVtc2V0KGJyZWFraW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBod19icmVha3BvaW50KSpIV19XQVRDSFBPSU5UX05VTSk7CisKKwlmb3IgKGJyZWFrbm8gPSAwOyBicmVha25vIDwgSFdfSU5TVF9XQVRDSFBPSU5UX05VTTsgYnJlYWtubysrKQorCQlicmVha2luZm9bYnJlYWtub10udHlwZSA9IFRZUEVfSU5TVF9XQVRDSFBPSU5UOworCWZvciAoOyBicmVha25vIDwgSFdfV0FUQ0hQT0lOVF9OVU07IGJyZWFrbm8rKykKKwkJYnJlYWtpbmZvW2JyZWFrbm9dLnR5cGUgPSBUWVBFX0RBVEFfV0FUQ0hQT0lOVDsKK30KKwordm9pZCBiZmluX2NvcnJlY3RfaHdfYnJlYWsodm9pZCkKK3sKKwlpbnQgYnJlYWtubzsKKwl1bnNpZ25lZCBpbnQgd3BpYWN0bCA9IDA7CisJdW5zaWduZWQgaW50IHdwZGFjdGwgPSAwOworCWludCBlbmFibGVfd3AgPSAwOworCisJZm9yIChicmVha25vID0gMDsgYnJlYWtubyA8IEhXX1dBVENIUE9JTlRfTlVNOyBicmVha25vKyspCisJCWlmIChicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCkgeworCQkJZW5hYmxlX3dwID0gMTsKKwogCQkJc3dpdGNoIChicmVha25vKSB7CiAJCQljYXNlIDA6Ci0JCQkJaWYgKGJyZWFraW5mb1ticmVha25vXS5lbmFibGVkICYmICEod3BkYWN0bCAmIFdQSUFFTjApKSB7Ci0JCQkJCWNvcnJlY3RpdCA9IDE7Ci0JCQkJCXdwZGFjdGwgJj0gfihXUElSRU4wMXxFTVVTVzApOwotCQkJCQl3cGRhY3RsIHw9IFdQSUFFTjB8V1BJQ05URU4wOwotCQkJCQliZmluX3dyaXRlX1dQSUEwKGJyZWFraW5mb1ticmVha25vXS5hZGRyKTsKLQkJCQkJYmZpbl93cml0ZV9XUElBQ05UMChicmVha2luZm9bYnJlYWtub10uc2tpcCk7Ci0JCQkJfSBlbHNlIGlmICghYnJlYWtpbmZvW2JyZWFrbm9dLmVuYWJsZWQgJiYgKHdwZGFjdGwgJiBXUElBRU4wKSkgewotCQkJCQljb3JyZWN0aXQgPSAxOwotCQkJCQl3cGRhY3RsICY9IH5XUElBRU4wOwotCQkJCX0KKwkJCQl3cGlhY3RsIHw9IFdQSUFFTjB8V1BJQ05URU4wOworCQkJCWJmaW5fd3JpdGVfV1BJQTAoYnJlYWtpbmZvW2JyZWFrbm9dLmFkZHIpOworCQkJCWJmaW5fd3JpdGVfV1BJQUNOVDAoYnJlYWtpbmZvW2JyZWFrbm9dLmNvdW50CisJCQkJCSsgYnJlYWtpbmZvLT5za2lwKTsKIAkJCQlicmVhazsKLQogCQkJY2FzZSAxOgotCQkJCWlmIChicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCAmJiAhKHdwZGFjdGwgJiBXUElBRU4xKSkgewotCQkJCQljb3JyZWN0aXQgPSAxOwotCQkJCQl3cGRhY3RsICY9IH4oV1BJUkVOMDF8RU1VU1cxKTsKLQkJCQkJd3BkYWN0bCB8PSBXUElBRU4xfFdQSUNOVEVOMTsKLQkJCQkJYmZpbl93cml0ZV9XUElBMShicmVha2luZm9bYnJlYWtub10uYWRkcik7Ci0JCQkJCWJmaW5fd3JpdGVfV1BJQUNOVDEoYnJlYWtpbmZvW2JyZWFrbm9dLnNraXApOwotCQkJCX0gZWxzZSBpZiAoIWJyZWFraW5mb1ticmVha25vXS5lbmFibGVkICYmICh3cGRhY3RsICYgV1BJQUVOMSkpIHsKLQkJCQkJY29ycmVjdGl0ID0gMTsKLQkJCQkJd3BkYWN0bCAmPSB+V1BJQUVOMTsKLQkJCQl9CisJCQkJd3BpYWN0bCB8PSBXUElBRU4xfFdQSUNOVEVOMTsKKwkJCQliZmluX3dyaXRlX1dQSUExKGJyZWFraW5mb1ticmVha25vXS5hZGRyKTsKKwkJCQliZmluX3dyaXRlX1dQSUFDTlQxKGJyZWFraW5mb1ticmVha25vXS5jb3VudAorCQkJCQkrIGJyZWFraW5mby0+c2tpcCk7CiAJCQkJYnJlYWs7Ci0KIAkJCWNhc2UgMjoKLQkJCQlpZiAoYnJlYWtpbmZvW2JyZWFrbm9dLmVuYWJsZWQgJiYgISh3cGRhY3RsICYgV1BJQUVOMikpIHsKLQkJCQkJY29ycmVjdGl0ID0gMTsKLQkJCQkJd3BkYWN0bCAmPSB+KFdQSVJFTjIzfEVNVVNXMik7Ci0JCQkJCXdwZGFjdGwgfD0gV1BJQUVOMnxXUElDTlRFTjI7Ci0JCQkJCWJmaW5fd3JpdGVfV1BJQTIoYnJlYWtpbmZvW2JyZWFrbm9dLmFkZHIpOwotCQkJCQliZmluX3dyaXRlX1dQSUFDTlQyKGJyZWFraW5mb1ticmVha25vXS5za2lwKTsKLQkJCQl9IGVsc2UgaWYgKCFicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCAmJiAod3BkYWN0bCAmIFdQSUFFTjIpKSB7Ci0JCQkJCWNvcnJlY3RpdCA9IDE7Ci0JCQkJCXdwZGFjdGwgJj0gfldQSUFFTjI7Ci0JCQkJfQorCQkJCXdwaWFjdGwgfD0gV1BJQUVOMnxXUElDTlRFTjI7CisJCQkJYmZpbl93cml0ZV9XUElBMihicmVha2luZm9bYnJlYWtub10uYWRkcik7CisJCQkJYmZpbl93cml0ZV9XUElBQ05UMihicmVha2luZm9bYnJlYWtub10uY291bnQKKwkJCQkJKyBicmVha2luZm8tPnNraXApOwogCQkJCWJyZWFrOwotCiAJCQljYXNlIDM6Ci0JCQkJaWYgKGJyZWFraW5mb1ticmVha25vXS5lbmFibGVkICYmICEod3BkYWN0bCAmIFdQSUFFTjMpKSB7Ci0JCQkJCWNvcnJlY3RpdCA9IDE7Ci0JCQkJCXdwZGFjdGwgJj0gfihXUElSRU4yM3xFTVVTVzMpOwotCQkJCQl3cGRhY3RsIHw9IFdQSUFFTjN8V1BJQ05URU4zOwotCQkJCQliZmluX3dyaXRlX1dQSUEzKGJyZWFraW5mb1ticmVha25vXS5hZGRyKTsKLQkJCQkJYmZpbl93cml0ZV9XUElBQ05UMyhicmVha2luZm9bYnJlYWtub10uc2tpcCk7Ci0JCQkJfSBlbHNlIGlmICghYnJlYWtpbmZvW2JyZWFrbm9dLmVuYWJsZWQgJiYgKHdwZGFjdGwgJiBXUElBRU4zKSkgewotCQkJCQljb3JyZWN0aXQgPSAxOwotCQkJCQl3cGRhY3RsICY9IH5XUElBRU4zOwotCQkJCX0KKwkJCQl3cGlhY3RsIHw9IFdQSUFFTjN8V1BJQ05URU4zOworCQkJCWJmaW5fd3JpdGVfV1BJQTMoYnJlYWtpbmZvW2JyZWFrbm9dLmFkZHIpOworCQkJCWJmaW5fd3JpdGVfV1BJQUNOVDMoYnJlYWtpbmZvW2JyZWFrbm9dLmNvdW50CisJCQkJCSsgYnJlYWtpbmZvLT5za2lwKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgNDoKLQkJCQlpZiAoYnJlYWtpbmZvW2JyZWFrbm9dLmVuYWJsZWQgJiYgISh3cGRhY3RsICYgV1BJQUVONCkpIHsKLQkJCQkJY29ycmVjdGl0ID0gMTsKLQkJCQkJd3BkYWN0bCAmPSB+KFdQSVJFTjQ1fEVNVVNXNCk7Ci0JCQkJCXdwZGFjdGwgfD0gV1BJQUVONHxXUElDTlRFTjQ7Ci0JCQkJCWJmaW5fd3JpdGVfV1BJQTQoYnJlYWtpbmZvW2JyZWFrbm9dLmFkZHIpOwotCQkJCQliZmluX3dyaXRlX1dQSUFDTlQ0KGJyZWFraW5mb1ticmVha25vXS5za2lwKTsKLQkJCQl9IGVsc2UgaWYgKCFicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCAmJiAod3BkYWN0bCAmIFdQSUFFTjQpKSB7Ci0JCQkJCWNvcnJlY3RpdCA9IDE7Ci0JCQkJCXdwZGFjdGwgJj0gfldQSUFFTjQ7Ci0JCQkJfQorCQkJCXdwaWFjdGwgfD0gV1BJQUVONHxXUElDTlRFTjQ7CisJCQkJYmZpbl93cml0ZV9XUElBNChicmVha2luZm9bYnJlYWtub10uYWRkcik7CisJCQkJYmZpbl93cml0ZV9XUElBQ05UNChicmVha2luZm9bYnJlYWtub10uY291bnQKKwkJCQkJKyBicmVha2luZm8tPnNraXApOwogCQkJCWJyZWFrOwogCQkJY2FzZSA1OgotCQkJCWlmIChicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCAmJiAhKHdwZGFjdGwgJiBXUElBRU41KSkgewotCQkJCQljb3JyZWN0aXQgPSAxOwotCQkJCQl3cGRhY3RsICY9IH4oV1BJUkVONDV8RU1VU1c1KTsKLQkJCQkJd3BkYWN0bCB8PSBXUElBRU41fFdQSUNOVEVONTsKLQkJCQkJYmZpbl93cml0ZV9XUElBNShicmVha2luZm9bYnJlYWtub10uYWRkcik7Ci0JCQkJCWJmaW5fd3JpdGVfV1BJQUNOVDUoYnJlYWtpbmZvW2JyZWFrbm9dLnNraXApOwotCQkJCX0gZWxzZSBpZiAoIWJyZWFraW5mb1ticmVha25vXS5lbmFibGVkICYmICh3cGRhY3RsICYgV1BJQUVONSkpIHsKLQkJCQkJY29ycmVjdGl0ID0gMTsKLQkJCQkJd3BkYWN0bCAmPSB+V1BJQUVONTsKLQkJCQl9CisJCQkJd3BpYWN0bCB8PSBXUElBRU41fFdQSUNOVEVONTsKKwkJCQliZmluX3dyaXRlX1dQSUE1KGJyZWFraW5mb1ticmVha25vXS5hZGRyKTsKKwkJCQliZmluX3dyaXRlX1dQSUFDTlQ1KGJyZWFraW5mb1ticmVha25vXS5jb3VudAorCQkJCQkrIGJyZWFraW5mby0+c2tpcCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDY6CisJCQkJd3BkYWN0bCB8PSBXUERBRU4wfFdQRENOVEVOMHxXUERTUkMwOworCQkJCXdwZGFjdGwgfD0gYnJlYWtpbmZvW2JyZWFrbm9dLmRhdGFhY2MKKwkJCQkJPDwgV1BEQUNDMF9PRkZTRVQ7CisJCQkJYmZpbl93cml0ZV9XUERBMChicmVha2luZm9bYnJlYWtub10uYWRkcik7CisJCQkJYmZpbl93cml0ZV9XUERBQ05UMChicmVha2luZm9bYnJlYWtub10uY291bnQKKwkJCQkJKyBicmVha2luZm8tPnNraXApOworCQkJCWJyZWFrOworCQkJY2FzZSA3OgorCQkJCXdwZGFjdGwgfD0gV1BEQUVOMXxXUERDTlRFTjF8V1BEU1JDMTsKKwkJCQl3cGRhY3RsIHw9IGJyZWFraW5mb1ticmVha25vXS5kYXRhYWNjCisJCQkJCTw8IFdQREFDQzFfT0ZGU0VUOworCQkJCWJmaW5fd3JpdGVfV1BEQTEoYnJlYWtpbmZvW2JyZWFrbm9dLmFkZHIpOworCQkJCWJmaW5fd3JpdGVfV1BEQUNOVDEoYnJlYWtpbmZvW2JyZWFrbm9dLmNvdW50CisJCQkJCSsgYnJlYWtpbmZvLT5za2lwKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCX0KLQlpZiAoY29ycmVjdGl0KSB7Ci0JCXdwZGFjdGwgJj0gfldQQU5EOwotCQl3cGRhY3RsIHw9IFdQUFdSOwotCQkvKnByaW50aygiY29ycmVjdF9od19icmVhazogd3BkYWN0bD0weCV4XG4iLCB3cGRhY3RsKTsqLworCisJLyogU2hvdWxkIGVuYWJsZSBXUFBXUiBiaXQgZmlyc3QgYmVmb3JlIHNldCBhbnkgb3RoZXIKKwkgKiBXUElBQ1RMIGFuZCBXUERBQ1RMIGJpdHMgKi8KKwlpZiAoZW5hYmxlX3dwKSB7CisJCWJmaW5fd3JpdGVfV1BJQUNUTChXUFBXUik7CisJCUNTWU5DKCk7CisJCWJmaW5fd3JpdGVfV1BJQUNUTCh3cGlhY3RsfFdQUFdSKTsKIAkJYmZpbl93cml0ZV9XUERBQ1RMKHdwZGFjdGwpOwogCQlDU1lOQygpOwotCQkvKmtnZGJfc2hvd19pbmZvKCk7Ki8KIAl9CiB9CiAKIHZvaWQga2dkYl9kaXNhYmxlX2h3X2RlYnVnKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCS8qIERpc2FibGUgaGFyZHdhcmUgZGVidWdnaW5nIHdoaWxlIHdlIGFyZSBpbiBrZ2RiICovCi0JYmZpbl93cml0ZV9XUElBQ1RMKGJmaW5fcmVhZF9XUElBQ1RMKCkgJiB+MHgxKTsKKwliZmluX3dyaXRlX1dQSUFDVEwoMCk7CisJYmZpbl93cml0ZV9XUERBQ1RMKDApOwogCUNTWU5DKCk7CiB9CiAKLXZvaWQga2dkYl9wb3N0X21hc3Rlcl9jb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZVZlY3RvciwgaW50IGVycl9jb2RlKQorI2lmZGVmIENPTkZJR19TTVAKK3ZvaWQga2dkYl9wYXNzaXZlX2NwdV9jYWxsYmFjayh2b2lkICppbmZvKQogewotCS8qIE1hc3RlciBwcm9jZXNzb3IgaXMgY29tcGxldGVseSBpbiB0aGUgZGVidWdnZXIgKi8KLQlnZGJfYmY1MzN2ZWN0b3IgPSBlVmVjdG9yOwotCWdkYl9iZjUzM2VycmNvZGUgPSBlcnJfY29kZTsKKwlrZ2RiX25taWNhbGxiYWNrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCksIGdldF9pcnFfcmVncygpKTsKIH0KIAotaW50IGtnZGJfYXJjaF9oYW5kbGVfZXhjZXB0aW9uKGludCBleGNlcHRpb25WZWN0b3IsIGludCBzaWdubywKK3ZvaWQga2dkYl9yb3VuZHVwX2NwdXModW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzbXBfY2FsbF9mdW5jdGlvbihrZ2RiX3Bhc3NpdmVfY3B1X2NhbGxiYWNrLCBOVUxMLCAwLCAwKTsKK30KKwordm9pZCBrZ2RiX3JvdW5kdXBfY3B1KGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwga2dkYl9wYXNzaXZlX2NwdV9jYWxsYmFjaywgTlVMTCwgMCwgMCk7Cit9CisjZW5kaWYKKwordm9pZCBrZ2RiX3Bvc3RfcHJpbWFyeV9jb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZVZlY3RvciwgaW50IGVycl9jb2RlKQoreworCS8qIE1hc3RlciBwcm9jZXNzb3IgaXMgY29tcGxldGVseSBpbiB0aGUgZGVidWdnZXIgKi8KKwlnZGJfYmZpbl92ZWN0b3IgPSBlVmVjdG9yOworCWdkYl9iZmluX2VycmNvZGUgPSBlcnJfY29kZTsKK30KKworaW50IGtnZGJfYXJjaF9oYW5kbGVfZXhjZXB0aW9uKGludCB2ZWN0b3IsIGludCBzaWdubywKIAkJCSAgICAgICBpbnQgZXJyX2NvZGUsIGNoYXIgKnJlbWNvbV9pbl9idWZmZXIsCiAJCQkgICAgICAgY2hhciAqcmVtY29tX291dF9idWZmZXIsCi0JCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKmxpbnV4X3JlZ3MpCisJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJbG9uZyBhZGRyOwogCWxvbmcgYnJlYWtubzsKQEAgLTM4NSw0NCArNDA0LDQwIEBACiAJCS8qIHRyeSB0byByZWFkIG9wdGlvbmFsIHBhcmFtZXRlciwgcGMgdW5jaGFuZ2VkIGlmIG5vIHBhcm0gKi8KIAkJcHRyID0gJnJlbWNvbV9pbl9idWZmZXJbMV07CiAJCWlmIChrZ2RiX2hleDJsb25nKCZwdHIsICZhZGRyKSkgewotCQkJbGludXhfcmVncy0+cmV0eCA9IGFkZHI7CisJCQlyZWdzLT5yZXR4ID0gYWRkcjsKIAkJfQotCQluZXdQQyA9IGxpbnV4X3JlZ3MtPnJldHg7CisJCW5ld1BDID0gcmVncy0+cmV0eDsKIAogCQkvKiBjbGVhciB0aGUgdHJhY2UgYml0ICovCi0JCWxpbnV4X3JlZ3MtPnN5c2NmZyAmPSAweGZmZmZmZmZlOworCQlyZWdzLT5zeXNjZmcgJj0gMHhmZmZmZmZmZTsKIAogCQkvKiBzZXQgdGhlIHRyYWNlIGJpdCBpZiB3ZSdyZSBzdGVwcGluZyAqLwogCQlpZiAocmVtY29tX2luX2J1ZmZlclswXSA9PSAncycpIHsKLQkJCWxpbnV4X3JlZ3MtPnN5c2NmZyB8PSAweDE7Ci0JCQlkZWJ1Z2dlcl9zdGVwID0gbGludXhfcmVncy0+aXBlbmQ7Ci0JCQlkZWJ1Z2dlcl9zdGVwID4+PSA2OwotCQkJZm9yIChpID0gMTA7IGkgPiAwOyBpLS0sIGRlYnVnZ2VyX3N0ZXAgPj49IDEpCi0JCQkJaWYgKGRlYnVnZ2VyX3N0ZXAgJiAxKQorCQkJcmVncy0+c3lzY2ZnIHw9IDB4MTsKKwkJCWtnZGJfc2luZ2xlX3N0ZXAgPSByZWdzLT5pcGVuZDsKKwkJCWtnZGJfc2luZ2xlX3N0ZXAgPj49IDY7CisJCQlmb3IgKGkgPSAxMDsgaSA+IDA7IGktLSwga2dkYl9zaW5nbGVfc3RlcCA+Pj0gMSkKKwkJCQlpZiAoa2dkYl9zaW5nbGVfc3RlcCAmIDEpCiAJCQkJCWJyZWFrOwogCQkJLyogaSBpbmRpY2F0ZSBldmVudCBwcmlvcml0eSBvZiBjdXJyZW50IHN0b3BwZWQgaW5zdHJ1Y3Rpb24KIAkJCSAqIHVzZXIgc3BhY2UgaW5zdHJ1Y3Rpb24gaXMgMCwgSVZHMTUgaXMgMSwgSVZUTVIgaXMgMTAuCi0JCQkgKiBkZWJ1Z2dlcl9zdGVwID4gMCBtZWFucyBpbiBzaW5nbGUgc3RlcCBtb2RlCisJCQkgKiBrZ2RiX3NpbmdsZV9zdGVwID4gMCBtZWFucyBpbiBzaW5nbGUgc3RlcCBtb2RlCiAJCQkgKi8KLQkJCWRlYnVnZ2VyX3N0ZXAgPSBpICsgMTsKLQkJfSBlbHNlIHsKLQkJCWRlYnVnZ2VyX3N0ZXAgPSAwOworCQkJa2dkYl9zaW5nbGVfc3RlcCA9IGkgKyAxOwogCQl9CiAKLQkJd3Bfc3RhdHVzID0gYmZpbl9yZWFkX1dQU1RBVCgpOwotCQlDU1lOQygpOwotCi0JCWlmIChleGNlcHRpb25WZWN0b3IgPT0gVkVDX1dBVENIKSB7Ci0JCQlmb3IgKGJyZWFrbm8gPSAwOyBicmVha25vIDwgNjsgKyticmVha25vKSB7CisJCWlmICh2ZWN0b3IgPT0gVkVDX1dBVENIKSB7CisJCQl3cF9zdGF0dXMgPSBiZmluX3JlYWRfV1BTVEFUKCk7CisJCQlmb3IgKGJyZWFrbm8gPSAwOyBicmVha25vIDwgSFdfV0FUQ0hQT0lOVF9OVU07IGJyZWFrbm8rKykgewogCQkJCWlmICh3cF9zdGF0dXMgJiAoMSA8PCBicmVha25vKSkgewogCQkJCQlicmVha2luZm8tPnNraXAgPSAxOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CisJCQliZmluX3dyaXRlX1dQU1RBVCgwKTsKIAkJfQotCQlrZ2RiX2NvcnJlY3RfaHdfYnJlYWsoKTsKIAotCQliZmluX3dyaXRlX1dQU1RBVCgwKTsKKwkJYmZpbl9jb3JyZWN0X2h3X2JyZWFrKCk7CiAKIAkJcmV0dXJuIDA7CiAJfQkJCS8qIHN3aXRjaCAqLwpAQCAtNDMxLDUgKzQ0NiwzODUgQEAKIAogc3RydWN0IGtnZGJfYXJjaCBhcmNoX2tnZGJfb3BzID0gewogCS5nZGJfYnB0X2luc3RyID0gezB4YTF9LAorI2lmZGVmIENPTkZJR19TTVAKKwkuZmxhZ3MgPSBLR0RCX0hXX0JSRUFLUE9JTlR8S0dEQl9USFJfUFJPQ19TV0FQLAorI2Vsc2UKIAkuZmxhZ3MgPSBLR0RCX0hXX0JSRUFLUE9JTlQsCisjZW5kaWYKKwkuc2V0X2h3X2JyZWFrcG9pbnQgPSBiZmluX3NldF9od19icmVhaywKKwkucmVtb3ZlX2h3X2JyZWFrcG9pbnQgPSBiZmluX3JlbW92ZV9od19icmVhaywKKwkucmVtb3ZlX2FsbF9od19icmVhayA9IGJmaW5fcmVtb3ZlX2FsbF9od19icmVhaywKKwkuY29ycmVjdF9od19icmVhayA9IGJmaW5fY29ycmVjdF9od19icmVhaywKIH07CisKK3N0YXRpYyBpbnQgaGV4KGNoYXIgY2gpCit7CisJaWYgKChjaCA+PSAnYScpICYmIChjaCA8PSAnZicpKQorCQlyZXR1cm4gY2ggLSAnYScgKyAxMDsKKwlpZiAoKGNoID49ICcwJykgJiYgKGNoIDw9ICc5JykpCisJCXJldHVybiBjaCAtICcwJzsKKwlpZiAoKGNoID49ICdBJykgJiYgKGNoIDw9ICdGJykpCisJCXJldHVybiBjaCAtICdBJyArIDEwOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCB2YWxpZGF0ZV9tZW1vcnlfYWNjZXNzX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgc2l6ZSkKK3sKKwlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChzaXplIDwgMCkKKwkJcmV0dXJuIEVGQVVMVDsKKwlpZiAoYWRkciA+PSAweDEwMDAgJiYgKGFkZHIgKyBzaXplKSA8PSBwaHlzaWNhbF9tZW1fZW5kKQorCQlyZXR1cm4gMDsKKwlpZiAoYWRkciA+PSBTWVNNTVJfQkFTRSkKKwkJcmV0dXJuIDA7CisJaWYgKGFkZHIgPj0gQVNZTkNfQkFOSzBfQkFTRQorCSAgICYmIGFkZHIgKyBzaXplIDw9IEFTWU5DX0JBTkszX0JBU0UgKyBBU1lOQ19CQU5LM19TSVpFKQorCQlyZXR1cm4gMDsKKwlpZiAoY3B1ID09IDApIHsKKwkJaWYgKGFkZHIgPj0gTDFfU0NSQVRDSF9TVEFSVAorCQkgICAmJiAoYWRkciArIHNpemUgPD0gTDFfU0NSQVRDSF9TVEFSVCArIEwxX1NDUkFUQ0hfTEVOR1RIKSkKKwkJCXJldHVybiAwOworI2lmIEwxX0NPREVfTEVOR1RIICE9IDAKKwkJaWYgKGFkZHIgPj0gTDFfQ09ERV9TVEFSVAorCQkgICAmJiAoYWRkciArIHNpemUgPD0gTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIKSkKKwkJCXJldHVybiAwOworI2VuZGlmCisjaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCisJCWlmIChhZGRyID49IEwxX0RBVEFfQV9TVEFSVAorCQkgICAmJiAoYWRkciArIHNpemUgPD0gTDFfREFUQV9BX1NUQVJUICsgTDFfREFUQV9BX0xFTkdUSCkpCisJCQlyZXR1cm4gMDsKKyNlbmRpZgorI2lmIEwxX0RBVEFfQl9MRU5HVEggIT0gMAorCQlpZiAoYWRkciA+PSBMMV9EQVRBX0JfU1RBUlQKKwkJICAgJiYgKGFkZHIgKyBzaXplIDw9IEwxX0RBVEFfQl9TVEFSVCArIEwxX0RBVEFfQl9MRU5HVEgpKQorCQkJcmV0dXJuIDA7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU01QCisJfSBlbHNlIGlmIChjcHUgPT0gMSkgeworCQlpZiAoYWRkciA+PSBDT1JFQl9MMV9TQ1JBVENIX1NUQVJUCisJCSAgICYmIChhZGRyICsgc2l6ZSA8PSBDT1JFQl9MMV9TQ1JBVENIX1NUQVJUCisJCSAgICsgTDFfU0NSQVRDSF9MRU5HVEgpKQorCQkJcmV0dXJuIDA7CisjIGlmIEwxX0NPREVfTEVOR1RIICE9IDAKKwkJaWYgKGFkZHIgPj0gQ09SRUJfTDFfQ09ERV9TVEFSVAorCQkgICAmJiAoYWRkciArIHNpemUgPD0gQ09SRUJfTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIKSkKKwkJCXJldHVybiAwOworIyBlbmRpZgorIyBpZiBMMV9EQVRBX0FfTEVOR1RIICE9IDAKKwkJaWYgKGFkZHIgPj0gQ09SRUJfTDFfREFUQV9BX1NUQVJUCisJCSAgICYmIChhZGRyICsgc2l6ZSA8PSBDT1JFQl9MMV9EQVRBX0FfU1RBUlQgKyBMMV9EQVRBX0FfTEVOR1RIKSkKKwkJCXJldHVybiAwOworIyBlbmRpZgorIyBpZiBMMV9EQVRBX0JfTEVOR1RIICE9IDAKKwkJaWYgKGFkZHIgPj0gQ09SRUJfTDFfREFUQV9CX1NUQVJUCisJCSAgICYmIChhZGRyICsgc2l6ZSA8PSBDT1JFQl9MMV9EQVRBX0JfU1RBUlQgKyBMMV9EQVRBX0JfTEVOR1RIKSkKKwkJCXJldHVybiAwOworIyBlbmRpZgorI2VuZGlmCisJfQorCisjaWYgTDJfTEVOR1RIICE9IDAKKwlpZiAoYWRkciA+PSBMMl9TVEFSVAorCSAgICYmIGFkZHIgKyBzaXplIDw9IEwyX1NUQVJUICsgTDJfTEVOR1RIKQorCQlyZXR1cm4gMDsKKyNlbmRpZgorCisJcmV0dXJuIEVGQVVMVDsKK30KKworLyoKKyAqIENvbnZlcnQgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IG1lbSBpbnRvIGhleCwgcGxhY2luZyByZXN1bHQgaW4gYnVmLgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbGFzdCBjaGFyIHB1dCBpbiBidWYgKG51bGwpLiBNYXkgcmV0dXJuIGFuIGVycm9yLgorICovCitpbnQga2dkYl9tZW0yaGV4KGNoYXIgKm1lbSwgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJY2hhciAqdG1wOworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGNoYXIgKnBjaDsKKwl1bnNpZ25lZCBzaG9ydCBtbXIxNjsKKwl1bnNpZ25lZCBsb25nIG1tcjMyOworCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKHZhbGlkYXRlX21lbW9yeV9hY2Nlc3NfYWRkcmVzcygodW5zaWduZWQgbG9uZyltZW0sIGNvdW50KSkKKwkJcmV0dXJuIEVGQVVMVDsKKworCS8qCisJICogV2UgdXNlIHRoZSB1cHBlciBoYWxmIG9mIGJ1ZiBhcyBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyIGZvciB0aGUKKwkgKiByYXcgbWVtb3J5IGNvcHkuICBIZXggY29udmVyc2lvbiB3aWxsIHdvcmsgYWdhaW5zdCB0aGlzIG9uZS4KKwkgKi8KKwl0bXAgPSBidWYgKyBjb3VudDsKKworCWlmICgodW5zaWduZWQgaW50KW1lbSA+PSBTWVNNTVJfQkFTRSkgeyAvKmFjY2VzcyBNTVIgcmVnaXN0ZXJzKi8KKwkJc3dpdGNoIChjb3VudCkgeworCQljYXNlIDI6CisJCQlpZiAoKHVuc2lnbmVkIGludCltZW0gJSAyID09IDApIHsKKwkJCQltbXIxNiA9ICoodW5zaWduZWQgc2hvcnQgKiltZW07CisJCQkJcGNoID0gKHVuc2lnbmVkIGNoYXIgKikmbW1yMTY7CisJCQkJKnRtcCsrID0gKnBjaCsrOworCQkJCSp0bXArKyA9ICpwY2grKzsKKwkJCQl0bXAgLT0gMjsKKwkJCX0gZWxzZQorCQkJCWVyciA9IEVGQVVMVDsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlpZiAoKHVuc2lnbmVkIGludCltZW0gJSA0ID09IDApIHsKKwkJCQltbXIzMiA9ICoodW5zaWduZWQgbG9uZyAqKW1lbTsKKwkJCQlwY2ggPSAodW5zaWduZWQgY2hhciAqKSZtbXIzMjsKKwkJCQkqdG1wKysgPSAqcGNoKys7CisJCQkJKnRtcCsrID0gKnBjaCsrOworCQkJCSp0bXArKyA9ICpwY2grKzsKKwkJCQkqdG1wKysgPSAqcGNoKys7CisJCQkJdG1wIC09IDQ7CisJCQl9IGVsc2UKKwkJCQllcnIgPSBFRkFVTFQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciA9IEVGQVVMVDsKKwkJfQorCX0gZWxzZSBpZiAoY3B1ID09IDAgJiYgKHVuc2lnbmVkIGludCltZW0gPj0gTDFfQ09ERV9TVEFSVCAmJgorCQkodW5zaWduZWQgaW50KShtZW0gKyBjb3VudCkgPD0gTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RICisjaWZkZWYgQ09ORklHX1NNUAorCQl8fCBjcHUgPT0gMSAmJiAodW5zaWduZWQgaW50KW1lbSA+PSBDT1JFQl9MMV9DT0RFX1NUQVJUICYmCisJCSh1bnNpZ25lZCBpbnQpKG1lbSArIGNvdW50KSA8PQorCQlDT1JFQl9MMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgKKyNlbmRpZgorCQkpIHsKKwkJLyogYWNjZXNzIEwxIGluc3RydWN0aW9uIFNSQU0qLworCQlpZiAoZG1hX21lbWNweSh0bXAsIG1lbSwgY291bnQpID09IE5VTEwpCisJCQllcnIgPSBFRkFVTFQ7CisJfSBlbHNlCisJCWVyciA9IHByb2JlX2tlcm5lbF9yZWFkKHRtcCwgbWVtLCBjb3VudCk7CisKKwlpZiAoIWVycikgeworCQl3aGlsZSAoY291bnQgPiAwKSB7CisJCQlidWYgPSBwYWNrX2hleF9ieXRlKGJ1ZiwgKnRtcCk7CisJCQl0bXArKzsKKwkJCWNvdW50LS07CisJCX0KKworCQkqYnVmID0gMDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ29weSB0aGUgYmluYXJ5IGFycmF5IHBvaW50ZWQgdG8gYnkgYnVmIGludG8gbWVtLiAgRml4ICQsICMsIGFuZAorICogMHg3ZCBlc2NhcGVkIHdpdGggMHg3ZC4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBhZnRlcgorICogdGhlIGxhc3QgYnl0ZSB3cml0dGVuLgorICovCitpbnQga2dkYl9lYmluMm1lbShjaGFyICpidWYsIGNoYXIgKm1lbSwgaW50IGNvdW50KQoreworCWNoYXIgKnRtcF9vbGQ7CisJY2hhciAqdG1wX25ldzsKKwl1bnNpZ25lZCBzaG9ydCAqbW1yMTY7CisJdW5zaWduZWQgbG9uZyAqbW1yMzI7CisJaW50IGVyciA9IDA7CisJaW50IHNpemUgPSAwOworCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJdG1wX29sZCA9IHRtcF9uZXcgPSBidWY7CisKKwl3aGlsZSAoY291bnQtLSA+IDApIHsKKwkJaWYgKCp0bXBfb2xkID09IDB4N2QpCisJCQkqdG1wX25ldyA9ICooKyt0bXBfb2xkKSBeIDB4MjA7CisJCWVsc2UKKwkJCSp0bXBfbmV3ID0gKnRtcF9vbGQ7CisJCXRtcF9uZXcrKzsKKwkJdG1wX29sZCsrOworCQlzaXplKys7CisJfQorCisJaWYgKHZhbGlkYXRlX21lbW9yeV9hY2Nlc3NfYWRkcmVzcygodW5zaWduZWQgbG9uZyltZW0sIHNpemUpKQorCQlyZXR1cm4gRUZBVUxUOworCisJaWYgKCh1bnNpZ25lZCBpbnQpbWVtID49IFNZU01NUl9CQVNFKSB7IC8qYWNjZXNzIE1NUiByZWdpc3RlcnMqLworCQlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSAyOgorCQkJaWYgKCh1bnNpZ25lZCBpbnQpbWVtICUgMiA9PSAwKSB7CisJCQkJbW1yMTYgPSAodW5zaWduZWQgc2hvcnQgKilidWY7CisJCQkJKih1bnNpZ25lZCBzaG9ydCAqKW1lbSA9ICptbXIxNjsKKwkJCX0gZWxzZQorCQkJCXJldHVybiBFRkFVTFQ7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJaWYgKCh1bnNpZ25lZCBpbnQpbWVtICUgNCA9PSAwKSB7CisJCQkJbW1yMzIgPSAodW5zaWduZWQgbG9uZyAqKWJ1ZjsKKwkJCQkqKHVuc2lnbmVkIGxvbmcgKiltZW0gPSAqbW1yMzI7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm4gRUZBVUxUOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gRUZBVUxUOworCQl9CisJfSBlbHNlIGlmIChjcHUgPT0gMCAmJiAodW5zaWduZWQgaW50KW1lbSA+PSBMMV9DT0RFX1NUQVJUICYmCisJCSh1bnNpZ25lZCBpbnQpKG1lbSArIGNvdW50KSA8IEwxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSAorI2lmZGVmIENPTkZJR19TTVAKKwkJfHwgY3B1ID09IDEgJiYgKHVuc2lnbmVkIGludCltZW0gPj0gQ09SRUJfTDFfQ09ERV9TVEFSVCAmJgorCQkodW5zaWduZWQgaW50KShtZW0gKyBjb3VudCkgPD0KKwkJQ09SRUJfTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RICisjZW5kaWYKKwkJKSB7CisJCS8qIGFjY2VzcyBMMSBpbnN0cnVjdGlvbiBTUkFNICovCisJCWlmIChkbWFfbWVtY3B5KG1lbSwgYnVmLCBzaXplKSA9PSBOVUxMKQorCQkJZXJyID0gRUZBVUxUOworCX0gZWxzZQorCQllcnIgPSBwcm9iZV9rZXJuZWxfd3JpdGUobWVtLCBidWYsIHNpemUpOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIENvbnZlcnQgdGhlIGhleCBhcnJheSBwb2ludGVkIHRvIGJ5IGJ1ZiBpbnRvIGJpbmFyeSB0byBiZSBwbGFjZWQgaW4gbWVtLgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIEFGVEVSIHRoZSBsYXN0IGJ5dGUgd3JpdHRlbi4KKyAqIE1heSByZXR1cm4gYW4gZXJyb3IuCisgKi8KK2ludCBrZ2RiX2hleDJtZW0oY2hhciAqYnVmLCBjaGFyICptZW0sIGludCBjb3VudCkKK3sKKwljaGFyICp0bXBfcmF3OworCWNoYXIgKnRtcF9oZXg7CisJdW5zaWduZWQgc2hvcnQgKm1tcjE2OworCXVuc2lnbmVkIGxvbmcgKm1tcjMyOworCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKHZhbGlkYXRlX21lbW9yeV9hY2Nlc3NfYWRkcmVzcygodW5zaWduZWQgbG9uZyltZW0sIGNvdW50KSkKKwkJcmV0dXJuIEVGQVVMVDsKKworCS8qCisJICogV2UgdXNlIHRoZSB1cHBlciBoYWxmIG9mIGJ1ZiBhcyBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyIGZvciB0aGUKKwkgKiByYXcgbWVtb3J5IHRoYXQgaXMgY29udmVydGVkIGZyb20gaGV4LgorCSAqLworCXRtcF9yYXcgPSBidWYgKyBjb3VudCAqIDI7CisKKwl0bXBfaGV4ID0gdG1wX3JhdyAtIDE7CisJd2hpbGUgKHRtcF9oZXggPj0gYnVmKSB7CisJCXRtcF9yYXctLTsKKwkJKnRtcF9yYXcgPSBoZXgoKnRtcF9oZXgtLSk7CisJCSp0bXBfcmF3IHw9IGhleCgqdG1wX2hleC0tKSA8PCA0OworCX0KKworCWlmICgodW5zaWduZWQgaW50KW1lbSA+PSBTWVNNTVJfQkFTRSkgeyAvKmFjY2VzcyBNTVIgcmVnaXN0ZXJzKi8KKwkJc3dpdGNoIChjb3VudCkgeworCQljYXNlIDI6CisJCQlpZiAoKHVuc2lnbmVkIGludCltZW0gJSAyID09IDApIHsKKwkJCQltbXIxNiA9ICh1bnNpZ25lZCBzaG9ydCAqKXRtcF9yYXc7CisJCQkJKih1bnNpZ25lZCBzaG9ydCAqKW1lbSA9ICptbXIxNjsKKwkJCX0gZWxzZQorCQkJCXJldHVybiBFRkFVTFQ7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJaWYgKCh1bnNpZ25lZCBpbnQpbWVtICUgNCA9PSAwKSB7CisJCQkJbW1yMzIgPSAodW5zaWduZWQgbG9uZyAqKXRtcF9yYXc7CisJCQkJKih1bnNpZ25lZCBsb25nICopbWVtID0gKm1tcjMyOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIEVGQVVMVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIEVGQVVMVDsKKwkJfQorCX0gZWxzZSBpZiAoY3B1ID09IDAgJiYgKHVuc2lnbmVkIGludCltZW0gPj0gTDFfQ09ERV9TVEFSVCAmJgorCQkodW5zaWduZWQgaW50KShtZW0gKyBjb3VudCkgPD0gTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RICisjaWZkZWYgQ09ORklHX1NNUAorCQl8fCBjcHUgPT0gMSAmJiAodW5zaWduZWQgaW50KW1lbSA+PSBDT1JFQl9MMV9DT0RFX1NUQVJUICYmCisJCSh1bnNpZ25lZCBpbnQpKG1lbSArIGNvdW50KSA8PQorCQlDT1JFQl9MMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgKKyNlbmRpZgorCQkpIHsKKwkJLyogYWNjZXNzIEwxIGluc3RydWN0aW9uIFNSQU0gKi8KKwkJaWYgKGRtYV9tZW1jcHkobWVtLCB0bXBfcmF3LCBjb3VudCkgPT0gTlVMTCkKKwkJCXJldHVybiBFRkFVTFQ7CisJfSBlbHNlCisJCXJldHVybiBwcm9iZV9rZXJuZWxfd3JpdGUobWVtLCB0bXBfcmF3LCBjb3VudCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBrZ2RiX3ZhbGlkYXRlX2JyZWFrX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQoreworCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKGFkZHIgPj0gMHgxMDAwICYmIChhZGRyICsgQlJFQUtfSU5TVFJfU0laRSkgPD0gcGh5c2ljYWxfbWVtX2VuZCkKKwkJcmV0dXJuIDA7CisJaWYgKGFkZHIgPj0gQVNZTkNfQkFOSzBfQkFTRQorCSAgICYmIGFkZHIgKyBCUkVBS19JTlNUUl9TSVpFIDw9IEFTWU5DX0JBTkszX0JBU0UgKyBBU1lOQ19CQU5LM19CQVNFKQorCQlyZXR1cm4gMDsKKyNpZiBMMV9DT0RFX0xFTkdUSCAhPSAwCisJaWYgKGNwdSA9PSAwICYmIGFkZHIgPj0gTDFfQ09ERV9TVEFSVAorCSAgICYmIGFkZHIgKyBCUkVBS19JTlNUUl9TSVpFIDw9IEwxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSCkKKwkJcmV0dXJuIDA7CisjIGlmZGVmIENPTkZJR19TTVAKKwllbHNlIGlmIChjcHUgPT0gMSAmJiBhZGRyID49IENPUkVCX0wxX0NPREVfU1RBUlQKKwkgICAmJiBhZGRyICsgQlJFQUtfSU5TVFJfU0laRSA8PSBDT1JFQl9MMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgpCisJCXJldHVybiAwOworIyBlbmRpZgorI2VuZGlmCisjaWYgTDJfTEVOR1RIICE9IDAKKwlpZiAoYWRkciA+PSBMMl9TVEFSVAorCSAgICYmIGFkZHIgKyBCUkVBS19JTlNUUl9TSVpFIDw9IEwyX1NUQVJUICsgTDJfTEVOR1RIKQorCQlyZXR1cm4gMDsKKyNlbmRpZgorCisJcmV0dXJuIEVGQVVMVDsKK30KKworaW50IGtnZGJfYXJjaF9zZXRfYnJlYWtwb2ludCh1bnNpZ25lZCBsb25nIGFkZHIsIGNoYXIgKnNhdmVkX2luc3RyKQoreworCWludCBlcnI7CisJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoKGNwdSA9PSAwICYmICh1bnNpZ25lZCBpbnQpYWRkciA+PSBMMV9DT0RFX1NUQVJUCisJCSYmICh1bnNpZ25lZCBpbnQpKGFkZHIgKyBCUkVBS19JTlNUUl9TSVpFKQorCQk8IEwxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSCkKKyNpZmRlZiBDT05GSUdfU01QCisJCXx8IChjcHUgPT0gMSAmJiAodW5zaWduZWQgaW50KWFkZHIgPj0gQ09SRUJfTDFfQ09ERV9TVEFSVAorCQkmJiAodW5zaWduZWQgaW50KShhZGRyICsgQlJFQUtfSU5TVFJfU0laRSkKKwkJPCBDT1JFQl9MMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgpCisjZW5kaWYKKwkJKSB7CisJCS8qIGFjY2VzcyBMMSBpbnN0cnVjdGlvbiBTUkFNICovCisJCWlmIChkbWFfbWVtY3B5KHNhdmVkX2luc3RyLCAodm9pZCAqKWFkZHIsIEJSRUFLX0lOU1RSX1NJWkUpCisJCQk9PSBOVUxMKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGRtYV9tZW1jcHkoKHZvaWQgKilhZGRyLCBhcmNoX2tnZGJfb3BzLmdkYl9icHRfaW5zdHIsCisJCQlCUkVBS19JTlNUUl9TSVpFKSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJZXJyID0gcHJvYmVfa2VybmVsX3JlYWQoc2F2ZWRfaW5zdHIsIChjaGFyICopYWRkciwKKwkJCUJSRUFLX0lOU1RSX1NJWkUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlyZXR1cm4gcHJvYmVfa2VybmVsX3dyaXRlKChjaGFyICopYWRkciwKKwkJCWFyY2hfa2dkYl9vcHMuZ2RiX2JwdF9pbnN0ciwgQlJFQUtfSU5TVFJfU0laRSk7CisJfQorfQorCitpbnQga2dkYl9hcmNoX3JlbW92ZV9icmVha3BvaW50KHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqYnVuZGxlKQoreworCWlmICgodW5zaWduZWQgaW50KWFkZHIgPj0gTDFfQ09ERV9TVEFSVCAmJgorCQkodW5zaWduZWQgaW50KShhZGRyICsgQlJFQUtfSU5TVFJfU0laRSkgPAorCQkJTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIKSB7CisJCS8qIGFjY2VzcyBMMSBpbnN0cnVjdGlvbiBTUkFNICovCisJCWlmIChkbWFfbWVtY3B5KCh2b2lkICopYWRkciwgYnVuZGxlLCBCUkVBS19JTlNUUl9TSVpFKSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiBwcm9iZV9rZXJuZWxfd3JpdGUoKGNoYXIgKilhZGRyLAorCQkJCShjaGFyICopYnVuZGxlLCBCUkVBS19JTlNUUl9TSVpFKTsKK30KKworaW50IGtnZGJfYXJjaF9pbml0KHZvaWQpCit7CisJa2dkYl9zaW5nbGVfc3RlcCA9IDA7CisKKwliZmluX3JlbW92ZV9hbGxfaHdfYnJlYWsoKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBrZ2RiX2FyY2hfZXhpdCh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYwppbmRleCBiZjFhNTFkLi4xNDBiZjAwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vZml4ZWRfY29kZS5oPgogCi0jZGVmaW5lIE1BWF9TSEFSRURfTElCUyAzCiAjZGVmaW5lIFRFWFRfT0ZGU0VUIDAKIC8qCiAgKiBkb2VzIG5vdCB5ZXQgY2F0Y2ggc2lnbmFscyBzZW50IHdoZW4gdGhlIGNoaWxkIGRpZXMuCkBAIC0xNjEsMjEgKzE2MCwzMiBAQAogCXN0cnVjdCB2bV9saXN0X3N0cnVjdCAqdm1sOwogCXN0cnVjdCBzcmFtX2xpc3Rfc3RydWN0ICpzcmFtbDsKIAorCS8qIG92ZXJmbG93ICovCisJaWYgKHN0YXJ0ICsgbGVuIDwgc3RhcnQpCisJCXJldHVybiAtRUlPOworCiAJZm9yICh2bWwgPSBjaGlsZC0+bW0tPmNvbnRleHQudm1saXN0OyB2bWw7IHZtbCA9IHZtbC0+bmV4dCkKLQkJaWYgKHN0YXJ0ID49IHZtbC0+dm1hLT52bV9zdGFydCAmJiBzdGFydCArIGxlbiA8PSB2bWwtPnZtYS0+dm1fZW5kKQorCQlpZiAoc3RhcnQgPj0gdm1sLT52bWEtPnZtX3N0YXJ0ICYmIHN0YXJ0ICsgbGVuIDwgdm1sLT52bWEtPnZtX2VuZCkKIAkJCXJldHVybiAwOwogCiAJZm9yIChzcmFtbCA9IGNoaWxkLT5tbS0+Y29udGV4dC5zcmFtX2xpc3Q7IHNyYW1sOyBzcmFtbCA9IHNyYW1sLT5uZXh0KQogCQlpZiAoc3RhcnQgPj0gKHVuc2lnbmVkIGxvbmcpc3JhbWwtPmFkZHIKLQkJICAgICYmIHN0YXJ0ICsgbGVuIDw9ICh1bnNpZ25lZCBsb25nKXNyYW1sLT5hZGRyICsgc3JhbWwtPmxlbmd0aCkKKwkJICAgICYmIHN0YXJ0ICsgbGVuIDwgKHVuc2lnbmVkIGxvbmcpc3JhbWwtPmFkZHIgKyBzcmFtbC0+bGVuZ3RoKQogCQkJcmV0dXJuIDA7CiAKLQlpZiAoc3RhcnQgPj0gRklYRURfQ09ERV9TVEFSVCAmJiBzdGFydCArIGxlbiA8PSBGSVhFRF9DT0RFX0VORCkKKwlpZiAoc3RhcnQgPj0gRklYRURfQ09ERV9TVEFSVCAmJiBzdGFydCArIGxlbiA8IEZJWEVEX0NPREVfRU5EKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAtRUlPOwogfQogCit2b2lkIHB0cmFjZV9lbmFibGUoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwl0bXAgPSBnZXRfcmVnKGNoaWxkLCBQVF9TWVNDRkcpIHwgKFRSQUNFX0JJVFMpOworCXB1dF9yZWcoY2hpbGQsIFBUX1NZU0NGRywgdG1wKTsKK30KKwogLyoKICAqIENhbGxlZCBieSBrZXJuZWwvcHRyYWNlLmMgd2hlbiBkZXRhY2hpbmcuLgogICoKQEAgLTE5MiwxNCArMjAyLDEyIEBACiBsb25nIGFyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpCiB7CiAJaW50IHJldDsKLQlpbnQgYWRkID0gMDsKIAl1bnNpZ25lZCBsb25nIF9fdXNlciAqZGF0YXAgPSAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhOwogCiAJc3dpdGNoIChyZXF1ZXN0KSB7CiAJCS8qIHdoZW4gSSBhbmQgRCBzcGFjZSBhcmUgc2VwYXJhdGUsIHRoZXNlIHdpbGwgbmVlZCB0byBiZSBmaXhlZC4gKi8KIAljYXNlIFBUUkFDRV9QRUVLREFUQToKIAkJcHJfZGVidWcoInB0cmFjZTogUEVFS0RBVEFcbiIpOwotCQlhZGQgPSBNQVhfU0hBUkVEX0xJQlMgKiA0OwkvKiBzcGFjZSBiZXR3ZWVuIHRleHQgYW5kIGRhdGEgKi8KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBQVFJBQ0VfUEVFS1RFWFQ6CS8qIHJlYWQgd29yZCBhdCBsb2NhdGlvbiBhZGRyLiAqLwogCQl7CkBAIC0yMDcsNDAgKzIxNSwzNSBAQAogCQkJaW50IGNvcGllZDsKIAogCQkJcmV0ID0gLUVJTzsKLQkJCXByX2RlYnVnKCJwdHJhY2U6IFBFRUtURVhUIGF0IGFkZHIgMHglMDhseCArIGFkZCAlZCAlbGRcbiIsIGFkZHIsIGFkZCwKLQkJCSAgICAgICAgIHNpemVvZihkYXRhKSk7Ci0JCQlpZiAoaXNfdXNlcl9hZGRyX3ZhbGlkKGNoaWxkLCBhZGRyICsgYWRkLCBzaXplb2YodG1wKSkgPCAwKQorCQkJcHJfZGVidWcoInB0cmFjZTogUEVFS1RFWFQgYXQgYWRkciAweCUwOGx4ICsgJWxkXG4iLCBhZGRyLCBzaXplb2YoZGF0YSkpOworCQkJaWYgKGlzX3VzZXJfYWRkcl92YWxpZChjaGlsZCwgYWRkciwgc2l6ZW9mKHRtcCkpIDwgMCkKIAkJCQlicmVhazsKIAkJCXByX2RlYnVnKCJwdHJhY2U6IHVzZXIgYWRkcmVzcyBpcyB2YWxpZFxuIik7CiAKLSNpZiBMMV9DT0RFX0xFTkdUSCAhPSAwCi0JCQlpZiAoYWRkciArIGFkZCA+PSBMMV9DT0RFX1NUQVJUCi0JCQkgICAgJiYgYWRkciArIGFkZCArIHNpemVvZih0bXApIDw9IEwxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSCkgewotCQkJCXNhZmVfZG1hX21lbWNweSAoJnRtcCwgKGNvbnN0IHZvaWQgKikoYWRkciArIGFkZCksIHNpemVvZih0bXApKTsKKwkJCWlmIChMMV9DT0RFX0xFTkdUSCAhPSAwICYmIGFkZHIgPj0gTDFfQ09ERV9TVEFSVAorCQkJICAgICYmIGFkZHIgKyBzaXplb2YodG1wKSA8PSBMMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgpIHsKKwkJCQlzYWZlX2RtYV9tZW1jcHkgKCZ0bXAsIChjb25zdCB2b2lkICopKGFkZHIpLCBzaXplb2YodG1wKSk7CiAJCQkJY29waWVkID0gc2l6ZW9mKHRtcCk7Ci0JCQl9IGVsc2UKLSNlbmRpZgotI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAotCQkJaWYgKGFkZHIgKyBhZGQgPj0gTDFfREFUQV9BX1NUQVJUCi0JCQkgICAgJiYgYWRkciArIGFkZCArIHNpemVvZih0bXApIDw9IEwxX0RBVEFfQV9TVEFSVCArIEwxX0RBVEFfQV9MRU5HVEgpIHsKLQkJCQltZW1jcHkoJnRtcCwgKGNvbnN0IHZvaWQgKikoYWRkciArIGFkZCksIHNpemVvZih0bXApKTsKKworCQkJfSBlbHNlIGlmIChMMV9EQVRBX0FfTEVOR1RIICE9IDAgJiYgYWRkciA+PSBMMV9EQVRBX0FfU1RBUlQKKwkJCSAgICAmJiBhZGRyICsgc2l6ZW9mKHRtcCkgPD0gTDFfREFUQV9BX1NUQVJUICsgTDFfREFUQV9BX0xFTkdUSCkgeworCQkJCW1lbWNweSgmdG1wLCAoY29uc3Qgdm9pZCAqKShhZGRyKSwgc2l6ZW9mKHRtcCkpOwogCQkJCWNvcGllZCA9IHNpemVvZih0bXApOwotCQkJfSBlbHNlCi0jZW5kaWYKLSNpZiBMMV9EQVRBX0JfTEVOR1RIICE9IDAKLQkJCWlmIChhZGRyICsgYWRkID49IEwxX0RBVEFfQl9TVEFSVAotCQkJICAgICYmIGFkZHIgKyBhZGQgKyBzaXplb2YodG1wKSA8PSBMMV9EQVRBX0JfU1RBUlQgKyBMMV9EQVRBX0JfTEVOR1RIKSB7Ci0JCQkJbWVtY3B5KCZ0bXAsIChjb25zdCB2b2lkICopKGFkZHIgKyBhZGQpLCBzaXplb2YodG1wKSk7CisKKwkJCX0gZWxzZSBpZiAoTDFfREFUQV9CX0xFTkdUSCAhPSAwICYmIGFkZHIgPj0gTDFfREFUQV9CX1NUQVJUCisJCQkgICAgJiYgYWRkciArIHNpemVvZih0bXApIDw9IEwxX0RBVEFfQl9TVEFSVCArIEwxX0RBVEFfQl9MRU5HVEgpIHsKKwkJCQltZW1jcHkoJnRtcCwgKGNvbnN0IHZvaWQgKikoYWRkciksIHNpemVvZih0bXApKTsKIAkJCQljb3BpZWQgPSBzaXplb2YodG1wKTsKLQkJCX0gZWxzZQotI2VuZGlmCi0JCQlpZiAoYWRkciArIGFkZCA+PSBGSVhFRF9DT0RFX1NUQVJUCi0JCQkgICAgJiYgYWRkciArIGFkZCArIHNpemVvZih0bXApIDw9IEZJWEVEX0NPREVfRU5EKSB7Ci0JCQkJbWVtY3B5KCZ0bXAsIChjb25zdCB2b2lkICopKGFkZHIgKyBhZGQpLCBzaXplb2YodG1wKSk7CisKKwkJCX0gZWxzZSBpZiAoYWRkciA+PSBGSVhFRF9DT0RFX1NUQVJUCisJCQkgICAgJiYgYWRkciArIHNpemVvZih0bXApIDw9IEZJWEVEX0NPREVfRU5EKSB7CisJCQkJbWVtY3B5KCZ0bXAsIChjb25zdCB2b2lkICopKGFkZHIpLCBzaXplb2YodG1wKSk7CiAJCQkJY29waWVkID0gc2l6ZW9mKHRtcCk7CisKIAkJCX0gZWxzZQotCQkJCWNvcGllZCA9IGFjY2Vzc19wcm9jZXNzX3ZtKGNoaWxkLCBhZGRyICsgYWRkLCAmdG1wLAorCQkJCWNvcGllZCA9IGFjY2Vzc19wcm9jZXNzX3ZtKGNoaWxkLCBhZGRyLCAmdG1wLAogCQkJCQkJCSAgIHNpemVvZih0bXApLCAwKTsKKwogCQkJcHJfZGVidWcoInB0cmFjZTogY29waWVkIHNpemUgJWQgWzB4JTA4bHhdXG4iLCBjb3BpZWQsIHRtcCk7CiAJCQlpZiAoY29waWVkICE9IHNpemVvZih0bXApKQogCQkJCWJyZWFrOwpAQCAtMjg0LDQ3ICsyODcsNDMgQEAKIAogCQkvKiB3aGVuIEkgYW5kIEQgc3BhY2UgYXJlIHNlcGFyYXRlLCB0aGlzIHdpbGwgaGF2ZSB0byBiZSBmaXhlZC4gKi8KIAljYXNlIFBUUkFDRV9QT0tFREFUQToKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJwdHJhY2U6IFBUUkFDRV9QRUVLREFUQVxuIik7CisJCXByX2RlYnVnKCJwdHJhY2U6IFBUUkFDRV9QRUVLREFUQVxuIik7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgUFRSQUNFX1BPS0VURVhUOgkvKiB3cml0ZSB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyLiAqLwogCQl7CiAJCQlpbnQgY29waWVkOwogCiAJCQlyZXQgPSAtRUlPOwotCQkJcHJfZGVidWcoInB0cmFjZTogUE9LRVRFWFQgYXQgYWRkciAweCUwOGx4ICsgYWRkICVkICVsZCBieXRlcyAlbHhcbiIsCi0JCQkgICAgICAgICBhZGRyLCBhZGQsIHNpemVvZihkYXRhKSwgZGF0YSk7Ci0JCQlpZiAoaXNfdXNlcl9hZGRyX3ZhbGlkKGNoaWxkLCBhZGRyICsgYWRkLCBzaXplb2YoZGF0YSkpIDwgMCkKKwkJCXByX2RlYnVnKCJwdHJhY2U6IFBPS0VURVhUIGF0IGFkZHIgMHglMDhseCArICVsZCBieXRlcyAlbHhcbiIsCisJCQkgICAgICAgICBhZGRyLCBzaXplb2YoZGF0YSksIGRhdGEpOworCQkJaWYgKGlzX3VzZXJfYWRkcl92YWxpZChjaGlsZCwgYWRkciwgc2l6ZW9mKGRhdGEpKSA8IDApCiAJCQkJYnJlYWs7CiAJCQlwcl9kZWJ1ZygicHRyYWNlOiB1c2VyIGFkZHJlc3MgaXMgdmFsaWRcbiIpOwogCi0jaWYgTDFfQ09ERV9MRU5HVEggIT0gMAotCQkJaWYgKGFkZHIgKyBhZGQgPj0gTDFfQ09ERV9TVEFSVAotCQkJICAgICYmIGFkZHIgKyBhZGQgKyBzaXplb2YoZGF0YSkgPD0gTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIKSB7Ci0JCQkJc2FmZV9kbWFfbWVtY3B5ICgodm9pZCAqKShhZGRyICsgYWRkKSwgJmRhdGEsIHNpemVvZihkYXRhKSk7CisJCQlpZiAoTDFfQ09ERV9MRU5HVEggIT0gMCAmJiBhZGRyID49IEwxX0NPREVfU1RBUlQKKwkJCSAgICAmJiBhZGRyICsgc2l6ZW9mKGRhdGEpIDw9IEwxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSCkgeworCQkJCXNhZmVfZG1hX21lbWNweSAoKHZvaWQgKikoYWRkciksICZkYXRhLCBzaXplb2YoZGF0YSkpOwogCQkJCWNvcGllZCA9IHNpemVvZihkYXRhKTsKLQkJCX0gZWxzZQotI2VuZGlmCi0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi0JCQlpZiAoYWRkciArIGFkZCA+PSBMMV9EQVRBX0FfU1RBUlQKLQkJCSAgICAmJiBhZGRyICsgYWRkICsgc2l6ZW9mKGRhdGEpIDw9IEwxX0RBVEFfQV9TVEFSVCArIEwxX0RBVEFfQV9MRU5HVEgpIHsKLQkJCQltZW1jcHkoKHZvaWQgKikoYWRkciArIGFkZCksICZkYXRhLCBzaXplb2YoZGF0YSkpOworCisJCQl9IGVsc2UgaWYgKEwxX0RBVEFfQV9MRU5HVEggIT0gMCAmJiBhZGRyID49IEwxX0RBVEFfQV9TVEFSVAorCQkJICAgICYmIGFkZHIgKyBzaXplb2YoZGF0YSkgPD0gTDFfREFUQV9BX1NUQVJUICsgTDFfREFUQV9BX0xFTkdUSCkgeworCQkJCW1lbWNweSgodm9pZCAqKShhZGRyKSwgJmRhdGEsIHNpemVvZihkYXRhKSk7CiAJCQkJY29waWVkID0gc2l6ZW9mKGRhdGEpOwotCQkJfSBlbHNlCi0jZW5kaWYKLSNpZiBMMV9EQVRBX0JfTEVOR1RIICE9IDAKLQkJCWlmIChhZGRyICsgYWRkID49IEwxX0RBVEFfQl9TVEFSVAotCQkJICAgICYmIGFkZHIgKyBhZGQgKyBzaXplb2YoZGF0YSkgPD0gTDFfREFUQV9CX1NUQVJUICsgTDFfREFUQV9CX0xFTkdUSCkgewotCQkJCW1lbWNweSgodm9pZCAqKShhZGRyICsgYWRkKSwgJmRhdGEsIHNpemVvZihkYXRhKSk7CisKKwkJCX0gZWxzZSBpZiAoTDFfREFUQV9CX0xFTkdUSCAhPSAwICYmIGFkZHIgPj0gTDFfREFUQV9CX1NUQVJUCisJCQkgICAgJiYgYWRkciArIHNpemVvZihkYXRhKSA8PSBMMV9EQVRBX0JfU1RBUlQgKyBMMV9EQVRBX0JfTEVOR1RIKSB7CisJCQkJbWVtY3B5KCh2b2lkICopKGFkZHIpLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKIAkJCQljb3BpZWQgPSBzaXplb2YoZGF0YSk7Ci0JCQl9IGVsc2UKLSNlbmRpZgotCQkJaWYgKGFkZHIgKyBhZGQgPj0gRklYRURfQ09ERV9TVEFSVAotCQkJICAgICYmIGFkZHIgKyBhZGQgKyBzaXplb2YoZGF0YSkgPD0gRklYRURfQ09ERV9FTkQpIHsKLQkJCQltZW1jcHkoKHZvaWQgKikoYWRkciArIGFkZCksICZkYXRhLCBzaXplb2YoZGF0YSkpOworCisJCQl9IGVsc2UgaWYgKGFkZHIgPj0gRklYRURfQ09ERV9TVEFSVAorCQkJICAgICYmIGFkZHIgKyBzaXplb2YoZGF0YSkgPD0gRklYRURfQ09ERV9FTkQpIHsKKwkJCQltZW1jcHkoKHZvaWQgKikoYWRkciksICZkYXRhLCBzaXplb2YoZGF0YSkpOwogCQkJCWNvcGllZCA9IHNpemVvZihkYXRhKTsKKwogCQkJfSBlbHNlCi0JCQkJY29waWVkID0gYWNjZXNzX3Byb2Nlc3Nfdm0oY2hpbGQsIGFkZHIgKyBhZGQsICZkYXRhLAorCQkJCWNvcGllZCA9IGFjY2Vzc19wcm9jZXNzX3ZtKGNoaWxkLCBhZGRyLCAmZGF0YSwKIAkJCQkJCQkgICBzaXplb2YoZGF0YSksIDEpOworCiAJCQlwcl9kZWJ1ZygicHRyYWNlOiBjb3BpZWQgc2l6ZSAlZFxuIiwgY29waWVkKTsKIAkJCWlmIChjb3BpZWQgIT0gc2l6ZW9mKGRhdGEpKQogCQkJCWJyZWFrOwpAQCAtMzUxLDI5ICszNTAsMjIgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFBUUkFDRV9TWVNDQUxMOgkvKiBjb250aW51ZSBhbmQgc3RvcCBhdCBuZXh0IChyZXR1cm4gZnJvbSkgc3lzY2FsbCAqLwotCWNhc2UgUFRSQUNFX0NPTlQ6Ci0JCXsJCS8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsLiAqLwotCQkJbG9uZyB0bXA7CisJY2FzZSBQVFJBQ0VfQ09OVDoJLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCisJCXByX2RlYnVnKCJwdHJhY2U6IHN5c2NhbGwvY29udFxuIik7CiAKLQkJCXByX2RlYnVnKCJwdHJhY2VfY29udFxuIik7Ci0KLQkJCXJldCA9IC1FSU87Ci0JCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKLQkJCQlicmVhazsKLQkJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKQotCQkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKLQkJCWVsc2UKLQkJCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKLQotCQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7Ci0JCQkvKiBtYWtlIHN1cmUgdGhlIHNpbmdsZSBzdGVwIGJpdCBpcyBub3Qgc2V0LiAqLwotCQkJdG1wID0gZ2V0X3JlZyhjaGlsZCwgUFRfU1lTQ0ZHKSAmIH4oVFJBQ0VfQklUUyk7Ci0JCQlwdXRfcmVnKGNoaWxkLCBQVF9TWVNDRkcsIHRtcCk7Ci0JCQlwcl9kZWJ1ZygiYmVmb3JlIHdha2VfdXBfcHJvY2Vzc1xuIik7Ci0JCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQkJcmV0ID0gMDsKKwkJcmV0ID0gLUVJTzsKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKLQkJfQorCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkKKwkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKKwkJZWxzZQorCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CisJCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOworCQlwdHJhY2VfZGlzYWJsZShjaGlsZCk7CisJCXByX2RlYnVnKCJwdHJhY2U6IGJlZm9yZSB3YWtlX3VwX3Byb2Nlc3NcbiIpOworCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOworCQlyZXQgPSAwOworCQlicmVhazsKIAogCS8qCiAJICogbWFrZSB0aGUgY2hpbGQgZXhpdC4gIEJlc3QgSSBjYW4gZG8gaXMgc2VuZCBpdCBhIHNpZ2tpbGwuCkBAIC0zODEsNTUgKzM3MywzNyBAQAogCSAqIGV4aXQuCiAJICovCiAJY2FzZSBQVFJBQ0VfS0lMTDoKLQkJewotCQkJbG9uZyB0bXA7Ci0JCQlyZXQgPSAwOwotCQkJaWYgKGNoaWxkLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFKQkvKiBhbHJlYWR5IGRlYWQgKi8KLQkJCQlicmVhazsKLQkJCWNoaWxkLT5leGl0X2NvZGUgPSBTSUdLSUxMOwotCQkJLyogbWFrZSBzdXJlIHRoZSBzaW5nbGUgc3RlcCBiaXQgaXMgbm90IHNldC4gKi8KLQkJCXRtcCA9IGdldF9yZWcoY2hpbGQsIFBUX1NZU0NGRykgJiB+KFRSQUNFX0JJVFMpOwotCQkJcHV0X3JlZyhjaGlsZCwgUFRfU1lTQ0ZHLCB0bXApOwotCQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKKwkJcmV0ID0gMDsKKwkJaWYgKGNoaWxkLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFKQkvKiBhbHJlYWR5IGRlYWQgKi8KIAkJCWJyZWFrOwotCQl9CisJCWNoaWxkLT5leGl0X2NvZGUgPSBTSUdLSUxMOworCQlwdHJhY2VfZGlzYWJsZShjaGlsZCk7CisJCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7CisJCWJyZWFrOwogCi0JY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDoKLQkJewkJLyogc2V0IHRoZSB0cmFwIGZsYWcuICovCi0JCQlsb25nIHRtcDsKLQotCQkJcHJfZGVidWcoInNpbmdsZSBzdGVwXG4iKTsKLQkJCXJldCA9IC1FSU87Ci0JCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKLQkJCQlicmVhazsKLQkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCi0JCQl0bXAgPSBnZXRfcmVnKGNoaWxkLCBQVF9TWVNDRkcpIHwgKFRSQUNFX0JJVFMpOwotCQkJcHV0X3JlZyhjaGlsZCwgUFRfU1lTQ0ZHLCB0bXApOwotCi0JCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQkJCS8qIGdpdmUgaXQgYSBjaGFuY2UgdG8gcnVuLiAqLwotCQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQkJCXJldCA9IDA7CisJY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDoJLyogc2V0IHRoZSB0cmFwIGZsYWcuICovCisJCXByX2RlYnVnKCJwdHJhY2U6IHNpbmdsZSBzdGVwXG4iKTsKKwkJcmV0ID0gLUVJTzsKKwkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCiAJCQlicmVhazsKLQkJfQorCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKKwkJcHRyYWNlX2VuYWJsZShjaGlsZCk7CisJCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOworCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOworCQlyZXQgPSAwOworCQlicmVhazsKIAogCWNhc2UgUFRSQUNFX0dFVFJFR1M6Ci0JCXsKLQotCQkJLyogR2V0IGFsbCBncCByZWdzIGZyb20gdGhlIGNoaWxkLiAqLwotCQkJcmV0ID0gcHRyYWNlX2dldHJlZ3MoY2hpbGQsIGRhdGFwKTsKLQkJCWJyZWFrOwotCQl9CisJCS8qIEdldCBhbGwgZ3AgcmVncyBmcm9tIHRoZSBjaGlsZC4gKi8KKwkJcmV0ID0gcHRyYWNlX2dldHJlZ3MoY2hpbGQsIGRhdGFwKTsKKwkJYnJlYWs7CiAKIAljYXNlIFBUUkFDRV9TRVRSRUdTOgotCQl7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJCSAgICAgICAicHRyYWNlOiBTRVRSRUdTOiAqKioqIE5PVCBJTVBMRU1FTlRFRCAqKipcbiIpOwotCQkJLyogU2V0IGFsbCBncCByZWdzIGluIHRoZSBjaGlsZC4gKi8KLQkJCXJldCA9IDA7Ci0JCQlicmVhazsKLQkJfQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJwdHJhY2U6IFNFVFJFR1M6ICoqKiogTk9UIElNUExFTUVOVEVEICoqKlxuIik7CisJCS8qIFNldCBhbGwgZ3AgcmVncyBpbiB0aGUgY2hpbGQuICovCisJCXJldCA9IDA7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcmV0ID0gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwogCQlicmVhazsKQEAgLTQ0MCw3ICs0MTQsNiBAQAogCiBhc21saW5rYWdlIHZvaWQgc3lzY2FsbF90cmFjZSh2b2lkKQogewotCiAJaWYgKCF0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3JlYm9vdC5jCmluZGV4IDM2N2UyZGMuLmFlOTdjYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3JlYm9vdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3JlYm9vdC5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8YXNtL2JmaW4tZ2xvYmFsLmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYmZyb20uaD4KIAogLyogQSBzeXN0ZW0gc29mdCByZXNldCBtYWtlcyBleHRlcm5hbCBtZW1vcnkgdW51c2FibGUgc28gZm9yY2UKICAqIHRoaXMgZnVuY3Rpb24gaW50byBMMS4gIFdlIHVzZSB0aGUgY29tcGlsZXIgc3N5bmMgaGVyZSByYXRoZXIKQEAgLTIwLDcgKzIxLDcgQEAKICAqIHRoZSBjb3JlIHJlc2V0LgogICovCiBfX2F0dHJpYnV0ZV9fKChsMV90ZXh0KSkKLXZvaWQgYmZpbl9yZXNldCh2b2lkKQorc3RhdGljIHZvaWQgYmZpbl9yZXNldCh2b2lkKQogewogCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgInN5c3RlbSIgZXZlbnRzIHN1Y2ggYXMgY2FjaGUgbGluZQogCSAqIGxpbmUgZmlsbHMgc28gdGhhdCB3ZSBhdm9pZCBpbmZpbml0ZSBzdGFsbHMgbGF0ZXIgb24gYXMKQEAgLTM0LDE1ICszNSwxNSBAQAogCQliZmluX3dyaXRlX1NXUlNUKDB4Nyk7CiAKIAkJLyogRHVlIHRvIHRoZSB3YXkgcmVzZXQgaXMgaGFuZGxlZCBpbiB0aGUgaGFyZHdhcmUsIHdlIG5lZWQKLQkJICogdG8gZGVsYXkgZm9yIDcgU0NMS1MuICBUaGUgb25seSByZWxpYWJsZSB3YXkgdG8gZG8gdGhpcyBpcwotCQkgKiB0byBjYWxjdWxhdGUgdGhlIENDTEsvU0NMSyByYXRpbyBhbmQgbXVsdGlwbHkgNy4gIEZvciBub3csCisJCSAqIHRvIGRlbGF5IGZvciAxMCBTQ0xLUy4gIFRoZSBvbmx5IHJlbGlhYmxlIHdheSB0byBkbyB0aGlzIGlzCisJCSAqIHRvIGNhbGN1bGF0ZSB0aGUgQ0NMSy9TQ0xLIHJhdGlvIGFuZCBtdWx0aXBseSAxMC4gIEZvciBub3csCiAJCSAqIHdlJ2xsIGFzc3VtZSB3b3JzZSBjYXNlIHdoaWNoIGlzIGEgMToxNSByYXRpby4KIAkJICovCiAJCWFzbSgKIAkJCSJMU0VUVVAgKDFmLCAxZikgTEMwID0gJTBcbiIKIAkJCSIxOiBub3A7IgogCQkJOgotCQkJOiAiYSIgKDE1ICogNykKKwkJCTogImEiICgxNSAqIDEwKQogCQkJOiAiTEMwIiwgIkxCMCIsICJMVDAiCiAJCSk7CiAKQEAgLTc0LDcgKzc1LDE0IEBACiB7CiAJbmF0aXZlX21hY2hpbmVfcmVzdGFydChjbWQpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JYmZpbl9yZXNldCgpOworCWlmIChBTk9NQUxZXzA1MDAwMzUzIHx8IEFOT01BTFlfMDUwMDAzODYpCisJCWJmaW5fcmVzZXQoKTsKKwllbHNlCisJCS8qIHRoZSBib290cm9tIGNoZWNrcyB0byBzZWUgaG93IGl0IHdhcyByZXNldCBhbmQgd2lsbAorCQkgKiBhdXRvbWF0aWNhbGx5IHBlcmZvcm0gYSBzb2Z0d2FyZSByZXNldCBmb3IgdXMgd2hlbgorCQkgKiBpdCBzdGFydHMgZXhlY3V0aW5nIGJvb3QKKwkJICovCisJCWFzbSgicmFpc2UgMTsiKTsKIH0KIAogX19hdHRyaWJ1dGVfXygod2VhaykpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYwppbmRleCA3YTgyZDEwLi43ZjM1ZDEwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKQEAgLTQyLDYgKzQyLDcgQEAKIEVYUE9SVF9TWU1CT0wobWVtb3J5X2VuZCk7CiBFWFBPUlRfU1lNQk9MKHBoeXNpY2FsX21lbV9lbmQpOwogRVhQT1JUX1NZTUJPTChfcmFtZW5kKTsKK0VYUE9SVF9TWU1CT0wocmVzZXJ2ZWRfbWVtX2RjYWNoZV9vbik7CiAKICNpZmRlZiBDT05GSUdfTVREX1VDTElOVVgKIHVuc2lnbmVkIGxvbmcgbWVtb3J5X210ZF9lbmQsIG1lbW9yeV9tdGRfc3RhcnQsIG10ZF9zaXplOwpAQCAtNTIsNyArNTMsOCBAQAogI2VuZGlmCiAKIGNoYXIgX19pbml0ZGF0YSBjb21tYW5kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkVdOwotdW5zaWduZWQgaW50IF9faW5pdGRhdGEgKl9fcmV0eDsKK3ZvaWQgX19pbml0ZGF0YSAqaW5pdF9yZXR4LCAqaW5pdF9zYXZlZF9yZXR4LCAqaW5pdF9zYXZlZF9zZXFzdGF0LAorCSppbml0X3NhdmVkX2ljcGxiX2ZhdWx0X2FkZHIsICppbml0X3NhdmVkX2RjcGxiX2ZhdWx0X2FkZHI7CiAKIC8qIGJvb3QgbWVtbWFwLCBmb3IgcGFyc2luZyAibWVtbWFwPSIgKi8KICNkZWZpbmUgQkZJTl9NRU1NQVBfTUFYCQkxMjggLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gYmZpbl9tZW1tYXAgKi8KQEAgLTc3LDEwICs3OSwxMCBAQAogc3RhdGljIHN0cnVjdCBiZmluX21lbW1hcF9lbnRyeSAqb3ZlcmxhcF9saXN0W0JGSU5fTUVNTUFQX01BWF0gX19pbml0ZGF0YTsKIHN0YXRpYyBzdHJ1Y3QgYmZpbl9tZW1tYXBfZW50cnkgbmV3X21hcFtCRklOX01FTU1BUF9NQVhdIF9faW5pdGRhdGE7CiAKLXZvaWQgX19pbml0IGJmNTN4X2NhY2hlX2luaXQodm9pZCkKK3ZvaWQgX19pbml0IGJmaW5fY2FjaGVfaW5pdCh2b2lkKQogewogI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fRENBQ0hFKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX0lDQUNIRSkKLQlnZW5lcmF0ZV9jcGxfdGFibGVzKCk7CisJZ2VuZXJhdGVfY3BsYl90YWJsZXMoKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0JGSU5fSUNBQ0hFCkBAIC0xMDAsNyArMTAyLDcgQEAKICNlbmRpZgogfQogCi12b2lkIF9faW5pdCBiZjUzeF9yZWxvY2F0ZV9sMV9tZW0odm9pZCkKK3ZvaWQgX19pbml0IGJmaW5fcmVsb2NhdGVfbDFfbWVtKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBsMV9jb2RlX2xlbmd0aDsKIAl1bnNpZ25lZCBsb25nIGwxX2RhdGFfYV9sZW5ndGg7CkBAIC00MTAsNyArNDEyLDcgQEAKICAqICBbX3JhbWJhc2UsIF9yYW1zdGFydF06CQlrZXJuZWwgaW1hZ2UKICAqICBbbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kXToJCWR5bmFtaWMgbWVtb3J5IG1hbmFnZWQgYnkga2VybmVsCiAgKiAgW21lbW9yeV9lbmQsIF9yYW1lbmRdOgkJcmVzZXJ2ZWQgbWVtb3J5Ci0gKiAgCVttZW9yeV9tdGRfc3RhcnQobWVtb3J5X2VuZCksCisgKiAgCVttZW1vcnlfbXRkX3N0YXJ0KG1lbW9yeV9lbmQpLAogICogIAkJbWVtb3J5X210ZF9zdGFydCArIG10ZF9zaXplXToJcm9vdGZzIChpZiBhbnkpCiAgKglbX3JhbWVuZCAtIERNQV9VTkNBQ0hFRF9SRUdJT04sCiAgKgkJX3JhbWVuZF06CQkJdW5jYWNoZWQgRE1BIHJlZ2lvbgpAQCAtNzgyLDE2ICs3ODQsMjUgQEAKIAogCV9iZmluX3N3cnN0ID0gYmZpbl9yZWFkX1NXUlNUKCk7CiAKLQkvKiBJZiB3ZSBkb3VibGUgZmF1bHQsIHJlc2V0IHRoZSBzeXN0ZW0gLSBvdGhlcndpc2Ugd2UgaGFuZyBmb3JldmVyICovCi0JYmZpbl93cml0ZV9TV1JTVChET1VCTEVfRkFVTFQpOworI2lmZGVmIENPTkZJR19ERUJVR19ET1VCTEVGQVVMVF9QUklOVAorCWJmaW5fd3JpdGVfU1dSU1QoX2JmaW5fc3dyc3QgJiB+RE9VQkxFX0ZBVUxUKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ERUJVR19ET1VCTEVGQVVMVF9SRVNFVAorCWJmaW5fd3JpdGVfU1dSU1QoX2JmaW5fc3dyc3QgfCBET1VCTEVfRkFVTFQpOworI2VuZGlmCiAKLQlpZiAoX2JmaW5fc3dyc3QgJiBSRVNFVF9ET1VCTEUpCi0JCS8qCi0JCSAqIGRvbid0IGRlY29kZSB0aGUgYWRkcmVzcywgc2luY2UgeW91IGRvbid0IGtub3cgaWYgdGhpcwotCQkgKiBrZXJuZWwncyBzeW1ib2wgbWFwIGlzIHRoZSBzYW1lIGFzIHRoZSBjcmFzaGluZyBrZXJuZWwKLQkJICovCi0JCXByaW50ayhLRVJOX0lORk8gIlJlY292ZXJpbmcgZnJvbSBEb3VibGUgRmF1bHQgZXZlbnQgYXQgJXBGXG4iLCBfX3JldHgpOwotCWVsc2UgaWYgKF9iZmluX3N3cnN0ICYgUkVTRVRfV0RPRykKKwlpZiAoX2JmaW5fc3dyc3QgJiBSRVNFVF9ET1VCTEUpIHsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIlJlY292ZXJpbmcgZnJvbSBET1VCTEUgRkFVTFQgZXZlbnRcbiIpOworI2lmZGVmIENPTkZJR19ERUJVR19ET1VCTEVGQVVMVAorCQkvKiBXZSBhc3N1bWUgdGhlIGNyYXNoaW5nIGtlcm5lbCwgYW5kIHRoZSBjdXJyZW50IHN5bWJvbCB0YWJsZSBtYXRjaCAqLworCQlwcmludGsoS0VSTl9FTUVSRyAiIFdoaWxlIGhhbmRsaW5nIGV4Y2VwdGlvbiAoRVhDQVVTRSA9IDB4JXgpIGF0ICVwRlxuIiwKKwkJCShpbnQpaW5pdF9zYXZlZF9zZXFzdGF0ICYgU0VRU1RBVF9FWENBVVNFLCBpbml0X3NhdmVkX3JldHgpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIiAgIERDUExCX0ZBVUxUX0FERFI6ICVwRlxuIiwgaW5pdF9zYXZlZF9kY3BsYl9mYXVsdF9hZGRyKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICIgICBJQ1BMQl9GQVVMVF9BRERSOiAlcEZcbiIsIGluaXRfc2F2ZWRfaWNwbGJfZmF1bHRfYWRkcik7CisjZW5kaWYKKwkJcHJpbnRrKEtFUk5fTk9USUNFICIgVGhlIGluc3RydWN0aW9uIGF0ICVwRiBjYXVzZWQgYSBkb3VibGUgZXhjZXB0aW9uXG4iLAorCQkJaW5pdF9yZXR4KTsKKwl9IGVsc2UgaWYgKF9iZmluX3N3cnN0ICYgUkVTRVRfV0RPRykKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUmVjb3ZlcmluZyBmcm9tIFdhdGNoZG9nIGV2ZW50XG4iKTsKIAllbHNlIGlmIChfYmZpbl9zd3JzdCAmIFJFU0VUX1NPRlRXQVJFKQogCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJlc2V0IGNhdXNlZCBieSBTb2Z0d2FyZSByZXNldFxuIik7CkBAIC04MDMsMTcgKzgxNCwyNCBAQAogCQlwcmludGsoS0VSTl9JTkZPICJDb21waWxlZCBmb3IgQURTUC0lcyBSZXYgbm9uZVxuIiwgQ1BVKTsKIAllbHNlCiAJCXByaW50ayhLRVJOX0lORk8gIkNvbXBpbGVkIGZvciBBRFNQLSVzIFJldiAwLiVkXG4iLCBDUFUsIGJmaW5fY29tcGlsZWRfcmV2aWQoKSk7Ci0JaWYgKGJmaW5fcmV2aWQoKSAhPSBiZmluX2NvbXBpbGVkX3JldmlkKCkpIHsKLQkJaWYgKGJmaW5fY29tcGlsZWRfcmV2aWQoKSA9PSAtMSkKLQkJCXByaW50ayhLRVJOX0VSUiAiV2FybmluZzogQ29tcGlsZWQgZm9yIFJldiBub25lLCBidXQgcnVubmluZyBvbiBSZXYgJWRcbiIsCi0JCQkgICAgICAgYmZpbl9yZXZpZCgpKTsKLQkJZWxzZSBpZiAoYmZpbl9jb21waWxlZF9yZXZpZCgpICE9IDB4ZmZmZikKLQkJCXByaW50ayhLRVJOX0VSUiAiV2FybmluZzogQ29tcGlsZWQgZm9yIFJldiAlZCwgYnV0IHJ1bm5pbmcgb24gUmV2ICVkXG4iLAotCQkJICAgICAgIGJmaW5fY29tcGlsZWRfcmV2aWQoKSwgYmZpbl9yZXZpZCgpKTsKKworCWlmICh1bmxpa2VseShDUFVJRCAhPSBiZmluX2NwdWlkKCkpKQorCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBOb3QgcnVubmluZyBvbiBBRFNQLSVzOiB1bmtub3duIENQVUlEIDB4JTA0eCBSZXYgMC4lZFxuIiwKKwkJCUNQVSwgYmZpbl9jcHVpZCgpLCBiZmluX3JldmlkKCkpOworCWVsc2UgeworCQlpZiAoYmZpbl9yZXZpZCgpICE9IGJmaW5fY29tcGlsZWRfcmV2aWQoKSkgeworCQkJaWYgKGJmaW5fY29tcGlsZWRfcmV2aWQoKSA9PSAtMSkKKwkJCQlwcmludGsoS0VSTl9FUlIgIldhcm5pbmc6IENvbXBpbGVkIGZvciBSZXYgbm9uZSwgYnV0IHJ1bm5pbmcgb24gUmV2ICVkXG4iLAorCQkJCSAgICAgICBiZmluX3JldmlkKCkpOworCQkJZWxzZSBpZiAoYmZpbl9jb21waWxlZF9yZXZpZCgpICE9IDB4ZmZmZikKKwkJCQlwcmludGsoS0VSTl9FUlIgIldhcm5pbmc6IENvbXBpbGVkIGZvciBSZXYgJWQsIGJ1dCBydW5uaW5nIG9uIFJldiAlZFxuIiwKKwkJCQkgICAgICAgYmZpbl9jb21waWxlZF9yZXZpZCgpLCBiZmluX3JldmlkKCkpOworCQl9CisJCWlmIChiZmluX3JldmlkKCkgPD0gQ09ORklHX0JGX1JFVl9NSU4gfHwgYmZpbl9yZXZpZCgpID4gQ09ORklHX0JGX1JFVl9NQVgpCisJCQlwcmludGsoS0VSTl9FUlIgIldhcm5pbmc6IFVuc3VwcG9ydGVkIENoaXAgUmV2aXNpb24gQURTUC0lcyBSZXYgMC4lZCBkZXRlY3RlZFxuIiwKKwkJCSAgICAgICBDUFUsIGJmaW5fcmV2aWQoKSk7CiAJfQotCWlmIChiZmluX3JldmlkKCkgPCBTVVBQT1JURURfUkVWSUQpCi0JCXByaW50ayhLRVJOX0VSUiAiV2FybmluZzogVW5zdXBwb3J0ZWQgQ2hpcCBSZXZpc2lvbiBBRFNQLSVzIFJldiAwLiVkIGRldGVjdGVkXG4iLAotCQkgICAgICAgQ1BVLCBiZmluX3JldmlkKCkpOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiQmxhY2tmaW4gTGludXggc3VwcG9ydCBieSBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvXG4iKTsKIAogCXByaW50ayhLRVJOX0lORk8gIlByb2Nlc3NvciBTcGVlZDogJWx1IE1IeiBjb3JlIGNsb2NrIGFuZCAlbHUgTUh6IFN5c3RlbSBDbG9ja1xuIiwKQEAgLTg1MCw3ICs4NjgsNyBAQAogCQkhPSBTQUZFX1VTRVJfSU5TVFJVQ1RJT04gLSBGSVhFRF9DT0RFX1NUQVJUKTsKIAogCWluaXRfZXhjZXB0aW9uX3ZlY3RvcnMoKTsKLQliZjUzeF9jYWNoZV9pbml0KCk7CisJYmZpbl9jYWNoZV9pbml0KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHRvcG9sb2d5X2luaXQodm9pZCkKQEAgLTk4NiwxMyArMTAwNCwxOCBAQAogCX0KIAogCXNlcV9wcmludGYobSwgInByb2Nlc3Nvclx0OiAlZFxuIgotCQkidmVuZG9yX2lkXHQ6ICVzXG4iCi0JCSJjcHUgZmFtaWx5XHQ6IDB4JXhcbiIKLQkJIm1vZGVsIG5hbWVcdDogQURTUC0lcyAlbHUoTUh6IENDTEspICVsdShNSHogU0NMSykgKCVzKVxuIgorCQkidmVuZG9yX2lkXHQ6ICVzXG4iLAorCQkqKHVuc2lnbmVkIGludCAqKXYsCisJCXZlbmRvcik7CisKKwlpZiAoQ1BVSUQgPT0gYmZpbl9jcHVpZCgpKQorCQlzZXFfcHJpbnRmKG0sICJjcHUgZmFtaWx5XHQ6IDB4JTA0eFxuIiwgQ1BVSUQpOworCWVsc2UKKwkJc2VxX3ByaW50ZihtLCAiY3B1IGZhbWlseVx0OiBDb21waWxlZCBmb3I6MHglMDR4LCBydW5uaW5nIG9uOjB4JTA0eFxuIiwKKwkJCUNQVUlELCBiZmluX2NwdWlkKCkpOworCisJc2VxX3ByaW50ZihtLCAibW9kZWwgbmFtZVx0OiBBRFNQLSVzICVsdShNSHogQ0NMSykgJWx1KE1IeiBTQ0xLKSAoJXMpXG4iCiAJCSJzdGVwcGluZ1x0OiAlZFxuIiwKLQkJMCwKLQkJdmVuZG9yLAotCQkoYmZpbl9yZWFkX0NISVBJRCgpICYgQ0hJUElEX0ZBTUlMWSksCiAJCWNwdSwgY2Nsay8xMDAwMDAwLCBzY2xrLzEwMDAwMDAsCiAjaWZkZWYgQ09ORklHX01QVQogCQkibXB1IG9uIiwKQEAgLTEwMzgsNyArMTA2MSw3IEBACiAJaWYgKChiZmluX3JlYWRfRE1FTV9DT05UUk9MKCkgJiAoRU5EQ1BMQiB8IERNQ19FTkFCTEUpKSAhPSAoRU5EQ1BMQiB8IERNQ19FTkFCTEUpKQogCQlkY2FjaGVfc2l6ZSA9IDA7CiAKLQlpZiAoKGJmaW5fcmVhZF9JTUVNX0NPTlRST0woKSAmIChJTUMgfCBFTklDUExCKSkgPT0gKElNQyB8IEVOSUNQTEIpKQorCWlmICgoYmZpbl9yZWFkX0lNRU1fQ09OVFJPTCgpICYgKElNQyB8IEVOSUNQTEIpKSAhPSAoSU1DIHwgRU5JQ1BMQikpCiAJCWljYWNoZV9zaXplID0gMDsKIAogCXNlcV9wcmludGYobSwgImNhY2hlIHNpemVcdDogJWQgS0IoTDEgaWNhY2hlKSAiCkBAIC0xMTI3LDEyICsxMTUwLDE4IEBACiAKIHN0YXRpYyB2b2lkICpjX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiB7Ci0JcmV0dXJuICpwb3MgPCBOUl9DUFVTID8gKCh2b2lkICopMHgxMjM0NTY3OCkgOiBOVUxMOworCWlmICgqcG9zID09IDApCisJCSpwb3MgPSBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApOworCWlmICgqcG9zID49IG51bV9vbmxpbmVfY3B1cygpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBwb3M7CiB9CiAKIHN0YXRpYyB2b2lkICpjX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQkrKypwb3M7CisJKnBvcyA9IG5leHRfY3B1KCpwb3MsIGNwdV9vbmxpbmVfbWFwKTsKKwogCXJldHVybiBjX3N0YXJ0KG0sIHBvcyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jCmluZGV4IDlhOWQ1MDguLjFhYTJjNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYwpAQCAtMzQsMjAgKzM0LDE5IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9jcGxiLmg+CiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3RyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2ZpeGVkX2NvZGUuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+CiAKICNpZmRlZiBDT05GSUdfS0dEQgotIyBpbmNsdWRlIDxsaW51eC9kZWJ1Z2dlci5oPgogIyBpbmNsdWRlIDxsaW51eC9rZ2RiLmg+CiAKICMgZGVmaW5lIENIS19ERUJVR0dFUl9UUkFQKCkgXAogCWRvIHsgXAotCQlDSEtfREVCVUdHRVIodHJhcG5yLCBzaWcsIGluZm8uc2lfY29kZSwgZnAsICk7IFwKKwkJa2dkYl9oYW5kbGVfZXhjZXB0aW9uKHRyYXBuciwgc2lnLCBpbmZvLnNpX2NvZGUsIGZwKTsgXAogCX0gd2hpbGUgKDApCiAjIGRlZmluZSBDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpIFwKIAlkbyB7IFwKQEAgLTU5LDYgKzU4LDE1IEBACiAjIGRlZmluZSBDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCisKKyNpZmRlZiBDT05GSUdfVkVSQk9TRV9ERUJVRworI2RlZmluZSB2ZXJib3NlX3ByaW50ayhmbXQsIGFyZy4uLikgXAorCXByaW50ayhmbXQsICMjYXJnKQorI2Vsc2UKKyNkZWZpbmUgdmVyYm9zZV9wcmludGsoZm10LCBhcmcuLi4pIFwKKwkoeyBpZiAoMCkgcHJpbnRrKGZtdCwgIyNhcmcpOyAwOyB9KQorI2VuZGlmCisKIC8qIEluaXRpYXRlIHRoZSBldmVudCB0YWJsZSBoYW5kbGVyICovCiB2b2lkIF9faW5pdCB0cmFwX2luaXQodm9pZCkKIHsKQEAgLTY3LDEwICs3NSwxOSBAQAogCUNTWU5DKCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgc2F2ZWRfaWNwbGJfZmF1bHRfYWRkciwgc2F2ZWRfZGNwbGJfZmF1bHRfYWRkcjsKKy8qCisgKiBVc2VkIHRvIHNhdmUgdGhlIFJFVFgsIFNFUVNUQVQsIEkvRCBDUExCIEZBVUxUIEFERFIKKyAqIHZhbHVlcyBhY3Jvc3MgdGhlIHRyYW5zaXRpb24gZnJvbSBleGNlcHRpb24gdG8gSVJRNS4KKyAqIFdlIHB1dCB0aGVzZSBpbiBMMSwgc28gdGhleSBhcmUgZ29pbmcgdG8gYmUgaW4gYSB2YWxpZAorICogbG9jYXRpb24gZHVyaW5nIGV4Y2VwdGlvbiBjb250ZXh0CisgKi8KK19fYXR0cmlidXRlX18oKGwxX2RhdGEpKQordW5zaWduZWQgbG9uZyBzYXZlZF9yZXR4LCBzYXZlZF9zZXFzdGF0LAorCXNhdmVkX2ljcGxiX2ZhdWx0X2FkZHIsIHNhdmVkX2RjcGxiX2ZhdWx0X2FkZHI7CiAKIHN0YXRpYyB2b2lkIGRlY29kZV9hZGRyZXNzKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogeworI2lmZGVmIENPTkZJR19ERUJVR19WRVJCT1NFCiAJc3RydWN0IHZtX2xpc3Rfc3RydWN0ICp2bWw7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwpAQCAtMTc4LDE2ICsxOTUsMzkgQEAKIAogZG9uZToKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmdGFza2xpc3RfbG9jaywgZmxhZ3MpOworI2Vsc2UKKwlzcHJpbnRmKGJ1ZiwgIiAiKTsKKyNlbmRpZgogfQogCiBhc21saW5rYWdlIHZvaWQgZG91YmxlX2ZhdWx0X2Moc3RydWN0IHB0X3JlZ3MgKmZwKQogewogCWNvbnNvbGVfdmVyYm9zZSgpOwogCW9vcHNfaW5fcHJvZ3Jlc3MgPSAxOworI2lmZGVmIENPTkZJR19ERUJVR19WRVJCT1NFCiAJcHJpbnRrKEtFUk5fRU1FUkcgIlxuIiBLRVJOX0VNRVJHICJEb3VibGUgRmF1bHRcbiIpOwotCWR1bXBfYmZpbl9wcm9jZXNzKGZwKTsKLQlkdW1wX2JmaW5fbWVtKGZwKTsKLQlzaG93X3JlZ3MoZnApOworI2lmZGVmIENPTkZJR19ERUJVR19ET1VCTEVGQVVMVF9QUklOVAorCWlmICgoKGxvbmcpZnAtPnNlcXN0YXQgJiAgU0VRU1RBVF9FWENBVVNFKSA9PSBWRUNfVU5DT1YpIHsKKwkJY2hhciBidWZbMTUwXTsKKwkJZGVjb2RlX2FkZHJlc3MoYnVmLCBzYXZlZF9yZXR4KTsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIldoaWxlIGhhbmRsaW5nIGV4Y2VwdGlvbiAoRVhDQVVTRSA9IDB4JXgpIGF0ICVzOlxuIiwKKwkJCShpbnQpc2F2ZWRfc2Vxc3RhdCAmIFNFUVNUQVRfRVhDQVVTRSwgYnVmKTsKKwkJZGVjb2RlX2FkZHJlc3MoYnVmLCBzYXZlZF9kY3BsYl9mYXVsdF9hZGRyKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICIgICBEQ1BMQl9GQVVMVF9BRERSOiAlc1xuIiwgYnVmKTsKKwkJZGVjb2RlX2FkZHJlc3MoYnVmLCBzYXZlZF9pY3BsYl9mYXVsdF9hZGRyKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICIgICBJQ1BMQl9GQVVMVF9BRERSOiAlc1xuIiwgYnVmKTsKKworCQlkZWNvZGVfYWRkcmVzcyhidWYsIGZwLT5yZXR4KTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJUaGUgaW5zdHJ1Y3Rpb24gYXQgJXMgY2F1c2VkIGEgZG91YmxlIGV4Y2VwdGlvblxuIiwKKwkJCWJ1Zik7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCWR1bXBfYmZpbl9wcm9jZXNzKGZwKTsKKwkJZHVtcF9iZmluX21lbShmcCk7CisJCXNob3dfcmVncyhmcCk7CisJfQorI2VuZGlmCiAJcGFuaWMoIkRvdWJsZSBGYXVsdCAtIHVucmVjb3ZlcmFibGUgZXZlbnRcbiIpOwogCiB9CkBAIC0yNTksMzQgKzI5OSw0MiBAQAogCQkJcmV0dXJuOwogCQllbHNlCiAJCQlicmVhazsKLSNpZmRlZiBDT05GSUdfS0dEQgotCWNhc2UgVkVDX0VYQ1BUMDIgOgkJIC8qIGdkYiBjb25uZWN0aW9uICovCi0JCWluZm8uc2lfY29kZSA9IFRSQVBfSUxMVFJBUDsKLQkJc2lnID0gU0lHVFJBUDsKLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKLQkJcmV0dXJuOwotI2Vsc2UKLQkvKiAweDAyIC0gVXNlciBEZWZpbmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLwotI2VuZGlmCiAJLyogMHgwMyAtIFVzZXIgRGVmaW5lZCwgdXNlcnNwYWNlIHN0YWNrIG92ZXJmbG93ICovCiAJY2FzZSBWRUNfRVhDUFQwMzoKIAkJaW5mby5zaV9jb2RlID0gU0VHVl9TVEFDS0ZMT1c7CiAJCXNpZyA9IFNJR1NFR1Y7Ci0JCXByaW50ayhLRVJOX05PVElDRSBFWENfMHgwMyhLRVJOX05PVElDRSkpOwotCQlDSEtfREVCVUdHRVJfVFJBUCgpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSBFWENfMHgwMyhLRVJOX05PVElDRSkpOworCQlDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpOwogCQlicmVhazsKLQkvKiAweDA0IC0gVXNlciBEZWZpbmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLwotCS8qIDB4MDUgLSBVc2VyIERlZmluZWQsIENhdWdodCBieSBkZWZhdWx0ICovCi0JLyogMHgwNiAtIFVzZXIgRGVmaW5lZCwgQ2F1Z2h0IGJ5IGRlZmF1bHQgKi8KLQkvKiAweDA3IC0gVXNlciBEZWZpbmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLwotCS8qIDB4MDggLSBVc2VyIERlZmluZWQsIENhdWdodCBieSBkZWZhdWx0ICovCi0JLyogMHgwOSAtIFVzZXIgRGVmaW5lZCwgQ2F1Z2h0IGJ5IGRlZmF1bHQgKi8KLQkvKiAweDBBIC0gVXNlciBEZWZpbmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLwotCS8qIDB4MEIgLSBVc2VyIERlZmluZWQsIENhdWdodCBieSBkZWZhdWx0ICovCi0JLyogMHgwQyAtIFVzZXIgRGVmaW5lZCwgQ2F1Z2h0IGJ5IGRlZmF1bHQgKi8KLQkvKiAweDBEIC0gVXNlciBEZWZpbmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLwotCS8qIDB4MEUgLSBVc2VyIERlZmluZWQsIENhdWdodCBieSBkZWZhdWx0ICovCi0JLyogMHgwRiAtIFVzZXIgRGVmaW5lZCwgQ2F1Z2h0IGJ5IGRlZmF1bHQgKi8KKwkvKiAweDAyIC0gS0dEQiBpbml0aWFsIGNvbm5lY3Rpb24gYW5kIGJyZWFrIHNpZ25hbCB0cmFwICovCisJY2FzZSBWRUNfRVhDUFQwMjoKKyNpZmRlZiBDT05GSUdfS0dEQgorCQlpbmZvLnNpX2NvZGUgPSBUUkFQX0lMTFRSQVA7CisJCXNpZyA9IFNJR1RSQVA7CisJCUNIS19ERUJVR0dFUl9UUkFQKCk7CisJCXJldHVybjsKKyNlbmRpZgorCS8qIDB4MDQgLSBVc2VyIERlZmluZWQgKi8KKwkvKiAweDA1IC0gVXNlciBEZWZpbmVkICovCisJLyogMHgwNiAtIFVzZXIgRGVmaW5lZCAqLworCS8qIDB4MDcgLSBVc2VyIERlZmluZWQgKi8KKwkvKiAweDA4IC0gVXNlciBEZWZpbmVkICovCisJLyogMHgwOSAtIFVzZXIgRGVmaW5lZCAqLworCS8qIDB4MEEgLSBVc2VyIERlZmluZWQgKi8KKwkvKiAweDBCIC0gVXNlciBEZWZpbmVkICovCisJLyogMHgwQyAtIFVzZXIgRGVmaW5lZCAqLworCS8qIDB4MEQgLSBVc2VyIERlZmluZWQgKi8KKwkvKiAweDBFIC0gVXNlciBEZWZpbmVkICovCisJLyogMHgwRiAtIFVzZXIgRGVmaW5lZCAqLworCS8qIElmIHdlIGdvdCBoZXJlLCBpdCBpcyBtb3N0IGxpa2VseSB0aGF0IHNvbWVvbmUgd2FzIHRyeWluZyB0byB1c2UgYQorCSAqIGN1c3RvbSBleGNlcHRpb24gaGFuZGxlciwgYW5kIGl0IGlzIG5vdCBhY3R1YWxseSBpbnN0YWxsZWQgcHJvcGVybHkKKwkgKi8KKwljYXNlIFZFQ19FWENQVDA0IC4uLiBWRUNfRVhDUFQxNToKKwkJaW5mby5zaV9jb2RlID0gSUxMX0lMTFBBUkFPUDsKKwkJc2lnID0gU0lHSUxMOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSBFWENfMHgwNChLRVJOX05PVElDRSkpOworCQlDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpOworCQlicmVhazsKIAkvKiAweDEwIEhXIFNpbmdsZSBzdGVwLCBoYW5kbGVkIGhlcmUgKi8KIAljYXNlIFZFQ19TVEVQOgogCQlpbmZvLnNpX2NvZGUgPSBUUkFQX1NURVA7CkBAIC0zMDEsOCArMzQ5LDggQEAKIAljYXNlIFZFQ19PVkZMT1c6CiAJCWluZm8uc2lfY29kZSA9IFRSQVBfVFJBQ0VGTE9XOwogCQlzaWcgPSBTSUdUUkFQOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MTEoS0VSTl9OT1RJQ0UpKTsKLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MTEoS0VSTl9OT1RJQ0UpKTsKKwkJQ0hLX0RFQlVHR0VSX1RSQVBfTUFZQkUoKTsKIAkJYnJlYWs7CiAJLyogMHgxMiAtIFJlc2VydmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLwogCS8qIDB4MTMgLSBSZXNlcnZlZCwgQ2F1Z2h0IGJ5IGRlZmF1bHQgKi8KQEAgLTMyMyw0NCArMzcxLDQzIEBACiAJY2FzZSBWRUNfVU5ERUZfSToKIAkJaW5mby5zaV9jb2RlID0gSUxMX0lMTE9QQzsKIAkJc2lnID0gU0lHSUxMOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MjEoS0VSTl9OT1RJQ0UpKTsKLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MjEoS0VSTl9OT1RJQ0UpKTsKKwkJQ0hLX0RFQlVHR0VSX1RSQVBfTUFZQkUoKTsKIAkJYnJlYWs7CiAJLyogMHgyMiAtIElsbGVnYWwgSW5zdHJ1Y3Rpb24gQ29tYmluYXRpb24sIGhhbmRsZWQgaGVyZSAqLwogCWNhc2UgVkVDX0lMR0FMX0k6CiAJCWluZm8uc2lfY29kZSA9IElMTF9JTExQQVJBT1A7CiAJCXNpZyA9IFNJR0lMTDsKLQkJcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDIyKEtFUk5fTk9USUNFKSk7Ci0JCUNIS19ERUJVR0dFUl9UUkFQKCk7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDIyKEtFUk5fTk9USUNFKSk7CisJCUNIS19ERUJVR0dFUl9UUkFQX01BWUJFKCk7CiAJCWJyZWFrOwogCS8qIDB4MjMgLSBEYXRhIENQTEIgcHJvdGVjdGlvbiB2aW9sYXRpb24sIGhhbmRsZWQgaGVyZSAqLwogCWNhc2UgVkVDX0NQTEJfVkw6CiAJCWluZm8uc2lfY29kZSA9IElMTF9DUExCX1ZJOwogCQlzaWcgPSBTSUdCVVM7Ci0JCXByaW50ayhLRVJOX05PVElDRSBFWENfMHgyMyhLRVJOX05PVElDRSkpOwotCQlDSEtfREVCVUdHRVJfVFJBUCgpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSBFWENfMHgyMyhLRVJOX05PVElDRSkpOworCQlDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpOwogCQlicmVhazsKIAkvKiAweDI0IC0gRGF0YSBhY2Nlc3MgbWlzYWxpZ25lZCwgaGFuZGxlZCBoZXJlICovCiAJY2FzZSBWRUNfTUlTQUxJX0Q6CiAJCWluZm8uc2lfY29kZSA9IEJVU19BRFJBTE47CiAJCXNpZyA9IFNJR0JVUzsKLQkJcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDI0KEtFUk5fTk9USUNFKSk7Ci0JCUNIS19ERUJVR0dFUl9UUkFQKCk7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDI0KEtFUk5fTk9USUNFKSk7CisJCUNIS19ERUJVR0dFUl9UUkFQX01BWUJFKCk7CiAJCWJyZWFrOwogCS8qIDB4MjUgLSBVbnJlY292ZXJhYmxlIEV2ZW50LCBoYW5kbGVkIGhlcmUgKi8KIAljYXNlIFZFQ19VTkNPVjoKIAkJaW5mby5zaV9jb2RlID0gSUxMX0lMTEVYQ1BUOwogCQlzaWcgPSBTSUdJTEw7Ci0JCXByaW50ayhLRVJOX05PVElDRSBFWENfMHgyNShLRVJOX05PVElDRSkpOwotCQlDSEtfREVCVUdHRVJfVFJBUCgpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSBFWENfMHgyNShLRVJOX05PVElDRSkpOworCQlDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpOwogCQlicmVhazsKIAkvKiAweDI2IC0gRGF0YSBDUExCIE1pc3MsIG5vcm1hbCBjYXNlIGlzIGhhbmRsZWQgaW4gX2NwbGJfaGRyLAogCQllcnJvciBjYXNlIGlzIGhhbmRsZWQgaGVyZSAqLwogCWNhc2UgVkVDX0NQTEJfTToKIAkJaW5mby5zaV9jb2RlID0gQlVTX0FEUkFMTjsKIAkJc2lnID0gU0lHQlVTOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MjYoS0VSTl9OT1RJQ0UpKTsKLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MjYoS0VSTl9OT1RJQ0UpKTsKIAkJYnJlYWs7CiAJLyogMHgyNyAtIERhdGEgQ1BMQiBNdWx0aXBsZSBIaXRzIC0gTGludXggVHJhcCBaZXJvLCBoYW5kbGVkIGhlcmUgKi8KIAljYXNlIFZFQ19DUExCX01ISVQ6CkBAIC0zNjgsMTEgKzQxNSwxMSBAQAogCQlzaWcgPSBTSUdTRUdWOwogI2lmZGVmIENPTkZJR19ERUJVR19IVU5UX0ZPUl9aRVJPCiAJCWlmIChzYXZlZF9kY3BsYl9mYXVsdF9hZGRyIDwgRklYRURfQ09ERV9TVEFSVCkKLQkJCXByaW50ayhLRVJOX05PVElDRSAiTlVMTCBwb2ludGVyIGFjY2Vzc1xuIik7CisJCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiTlVMTCBwb2ludGVyIGFjY2Vzc1xuIik7CiAJCWVsc2UKICNlbmRpZgotCQkJcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDI3KEtFUk5fTk9USUNFKSk7Ci0JCUNIS19ERUJVR0dFUl9UUkFQKCk7CisJCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSBFWENfMHgyNyhLRVJOX05PVElDRSkpOworCQlDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpOwogCQlicmVhazsKIAkvKiAweDI4IC0gRW11bGF0aW9uIFdhdGNocG9pbnQsIGhhbmRsZWQgaGVyZSAqLwogCWNhc2UgVkVDX1dBVENIOgpAQCAtMzkwLDggKzQzNyw4IEBACiAJY2FzZSBWRUNfSVNUUlVfVkw6ICAgICAgLyogQURTUC1CRjUzNSBvbmx5IChNSCkgKi8KIAkJaW5mby5zaV9jb2RlID0gQlVTX09QRkVUQ0g7CiAJCXNpZyA9IFNJR0JVUzsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJCRjUzNTogVkVDX0lTVFJVX1ZMXG4iKTsKLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIkJGNTM1OiBWRUNfSVNUUlVfVkxcbiIpOworCQlDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpOwogCQlicmVhazsKICNlbHNlCiAJLyogMHgyOSAtIFJlc2VydmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLwpAQCAtNDAwLDIyICs0NDcsMjEgQEAKIAljYXNlIFZFQ19NSVNBTElfSToKIAkJaW5mby5zaV9jb2RlID0gQlVTX0FEUkFMTjsKIAkJc2lnID0gU0lHQlVTOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MkEoS0VSTl9OT1RJQ0UpKTsKLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MkEoS0VSTl9OT1RJQ0UpKTsKKwkJQ0hLX0RFQlVHR0VSX1RSQVBfTUFZQkUoKTsKIAkJYnJlYWs7CiAJLyogMHgyQiAtIEluc3RydWN0aW9uIENQTEIgcHJvdGVjdGlvbiB2aW9sYXRpb24sIGhhbmRsZWQgaGVyZSAqLwogCWNhc2UgVkVDX0NQTEJfSV9WTDoKIAkJaW5mby5zaV9jb2RlID0gSUxMX0NQTEJfVkk7CiAJCXNpZyA9IFNJR0JVUzsKLQkJcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDJCKEtFUk5fTk9USUNFKSk7Ci0JCUNIS19ERUJVR0dFUl9UUkFQKCk7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDJCKEtFUk5fTk9USUNFKSk7CisJCUNIS19ERUJVR0dFUl9UUkFQX01BWUJFKCk7CiAJCWJyZWFrOwogCS8qIDB4MkMgLSBJbnN0cnVjdGlvbiBDUExCIG1pc3MsIGhhbmRsZWQgaW4gX2NwbGJfaGRyICovCiAJY2FzZSBWRUNfQ1BMQl9JX006CiAJCWluZm8uc2lfY29kZSA9IElMTF9DUExCX01JU1M7CiAJCXNpZyA9IFNJR0JVUzsKLQkJcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDJDKEtFUk5fTk9USUNFKSk7Ci0JCUNIS19ERUJVR0dFUl9UUkFQKCk7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDJDKEtFUk5fTk9USUNFKSk7CiAJCWJyZWFrOwogCS8qIDB4MkQgLSBJbnN0cnVjdGlvbiBDUExCIE11bHRpcGxlIEhpdHMsIGhhbmRsZWQgaGVyZSAqLwogCWNhc2UgVkVDX0NQTEJfSV9NSElUOgpAQCAtNDIzLDE4ICs0NjksMTggQEAKIAkJc2lnID0gU0lHU0VHVjsKICNpZmRlZiBDT05GSUdfREVCVUdfSFVOVF9GT1JfWkVSTwogCQlpZiAoc2F2ZWRfaWNwbGJfZmF1bHRfYWRkciA8IEZJWEVEX0NPREVfU1RBUlQpCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIkp1bXAgdG8gTlVMTCBhZGRyZXNzXG4iKTsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJKdW1wIHRvIE5VTEwgYWRkcmVzc1xuIik7CiAJCWVsc2UKICNlbmRpZgotCQkJcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDJEKEtFUk5fTk9USUNFKSk7Ci0JCUNIS19ERUJVR0dFUl9UUkFQKCk7CisJCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSBFWENfMHgyRChLRVJOX05PVElDRSkpOworCQlDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpOwogCQlicmVhazsKIAkvKiAweDJFIC0gSWxsZWdhbCB1c2Ugb2YgU3VwZXJ2aXNvciBSZXNvdXJjZSwgaGFuZGxlZCBoZXJlICovCiAJY2FzZSBWRUNfSUxMX1JFUzoKIAkJaW5mby5zaV9jb2RlID0gSUxMX1BSVk9QQzsKIAkJc2lnID0gU0lHSUxMOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MkUoS0VSTl9OT1RJQ0UpKTsKLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MkUoS0VSTl9OT1RJQ0UpKTsKKwkJQ0hLX0RFQlVHR0VSX1RSQVBfTUFZQkUoKTsKIAkJYnJlYWs7CiAJLyogMHgyRiAtIFJlc2VydmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLwogCS8qIDB4MzAgLSBSZXNlcnZlZCwgQ2F1Z2h0IGJ5IGRlZmF1bHQgKi8KQEAgLTQ2MSwxNyArNTA3LDE3IEBACiAJCWNhc2UgKFNFUVNUQVRfSFdFUlJDQVVTRV9TWVNURU1fTU1SKToKIAkJCWluZm8uc2lfY29kZSA9IEJVU19BRFJBTE47CiAJCQlzaWcgPSBTSUdCVVM7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgSFdDX3gyKEtFUk5fTk9USUNFKSk7CisJCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSBIV0NfeDIoS0VSTl9OT1RJQ0UpKTsKIAkJCWJyZWFrOwogCQkvKiBFeHRlcm5hbCBNZW1vcnkgQWRkcmVzc2luZyBFcnJvciAqLwogCQljYXNlIChTRVFTVEFUX0hXRVJSQ0FVU0VfRVhURVJOX0FERFIpOgogCQkJaW5mby5zaV9jb2RlID0gQlVTX0FEUkVSUjsKIAkJCXNpZyA9IFNJR0JVUzsKLQkJCXByaW50ayhLRVJOX05PVElDRSBIV0NfeDMoS0VSTl9OT1RJQ0UpKTsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFIEhXQ194MyhLRVJOX05PVElDRSkpOwogCQkJYnJlYWs7CiAJCS8qIFBlcmZvcm1hbmNlIE1vbml0b3IgT3ZlcmZsb3cgKi8KIAkJY2FzZSAoU0VRU1RBVF9IV0VSUkNBVVNFX1BFUkZfRkxPVyk6Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgSFdDX3gxMihLRVJOX05PVElDRSkpOworCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgSFdDX3gxMihLRVJOX05PVElDRSkpOwogCQkJYnJlYWs7CiAJCS8qIFJBSVNFIDUgaW5zdHJ1Y3Rpb24gKi8KIAkJY2FzZSAoU0VRU1RBVF9IV0VSUkNBVVNFX1JBSVNFXzUpOgpAQCAtNDgxLDIxICs1MjcsMjUgQEAKIAkJCXByaW50ayhLRVJOX05PVElDRSBIV0NfZGVmYXVsdChLRVJOX05PVElDRSkpOwogCQkJYnJlYWs7CiAJCX0KLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJQ0hLX0RFQlVHR0VSX1RSQVBfTUFZQkUoKTsKIAkJYnJlYWs7CisJLyoKKwkgKiBXZSBzaG91bGQgYmUgaGFuZGxpbmcgYWxsIGtub3duIGV4Y2VwdGlvbiB0eXBlcyBhYm92ZSwKKwkgKiBpZiB3ZSBnZXQgaGVyZSB3ZSBoaXQgYSByZXNlcnZlZCBvbmUsIHNvIHBhbmljCisJICovCiAJZGVmYXVsdDoKLQkJaW5mby5zaV9jb2RlID0gVFJBUF9JTExUUkFQOwotCQlzaWcgPSBTSUdUUkFQOwotCQlwcmludGsoS0VSTl9FTUVSRyAiQ2F1Z2h0IFVuaGFuZGxlZCBFeGNlcHRpb24sIGNvZGUgPSAlMDhseFxuIiwKKwkJb29wc19pbl9wcm9ncmVzcyA9IDE7CisJCWluZm8uc2lfY29kZSA9IElMTF9JTExQQVJBT1A7CisJCXNpZyA9IFNJR0lMTDsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9FTUVSRyAiQ2F1Z2h0IFVuaGFuZGxlZCBFeGNlcHRpb24sIGNvZGUgPSAlMDhseFxuIiwKIAkJCShmcC0+c2Vxc3RhdCAmIFNFUVNUQVRfRVhDQVVTRSkpOwotCQlDSEtfREVCVUdHRVJfVFJBUCgpOworCQlDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpOwogCQlicmVhazsKIAl9CiAKIAlCVUdfT04oc2lnID09IDApOwogCiAJaWYgKHNpZyAhPSBTSUdUUkFQKSB7Ci0JCXVuc2lnbmVkIGxvbmcgKnN0YWNrOwogCQlkdW1wX2JmaW5fcHJvY2VzcyhmcCk7CiAJCWR1bXBfYmZpbl9tZW0oZnApOwogCQlzaG93X3JlZ3MoZnApOwpAQCAtNTAzLDcgKzU1Myw3IEBACiAJCS8qIFByaW50IG91dCB0aGUgdHJhY2UgYnVmZmVyIGlmIGl0IG1ha2VzIHNlbnNlICovCiAjaWZuZGVmIENPTkZJR19ERUJVR19CRklOX05PX0tFUk5fSFdUUkFDRQogCQlpZiAodHJhcG5yID09IFZFQ19DUExCX0lfTSB8fCB0cmFwbnIgPT0gVkVDX0NQTEJfTSkKLQkJCXByaW50ayhLRVJOX05PVElDRSAiTm8gdHJhY2Ugc2luY2UgeW91IGRvIG5vdCBoYXZlICIKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJObyB0cmFjZSBzaW5jZSB5b3UgZG8gbm90IGhhdmUgIgogCQkJCSJDT05GSUdfREVCVUdfQkZJTl9OT19LRVJOX0hXVFJBQ0UgZW5hYmxlZFxuIgogCQkJCUtFUk5fTk9USUNFICJcbiIpOwogCQllbHNlCkBAIC01MTIsMjAgKzU2MiwyMiBAQAogCiAJCWlmIChvb3BzX2luX3Byb2dyZXNzKSB7CiAJCQkvKiBEdW1wIHRoZSBjdXJyZW50IGtlcm5lbCBzdGFjayAqLwotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJcbiIgS0VSTl9OT1RJQ0UgIktlcm5lbCBTdGFja1xuIik7CisJCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiXG4iIEtFUk5fTk9USUNFICJLZXJuZWwgU3RhY2tcbiIpOwogCQkJc2hvd19zdGFjayhjdXJyZW50LCBOVUxMKTsKLQogCQkJcHJpbnRfbW9kdWxlcygpOwogI2lmbmRlZiBDT05GSUdfQUNDRVNTX0NIRUNLCi0JCQlwcmludGsoS0VSTl9FTUVSRyAiUGxlYXNlIHR1cm4gb24gIgorCQkJdmVyYm9zZV9wcmludGsoS0VSTl9FTUVSRyAiUGxlYXNlIHR1cm4gb24gIgogCQkJICAgICAgICJDT05GSUdfQUNDRVNTX0NIRUNLXG4iKTsKICNlbmRpZgogCQkJcGFuaWMoIktlcm5lbCBleGNlcHRpb24iKTsKIAkJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfVkVSQk9TRV9ERUJVRworCQkJdW5zaWduZWQgbG9uZyAqc3RhY2s7CiAJCQkvKiBEdW1wIHRoZSB1c2VyIHNwYWNlIHN0YWNrICovCiAJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopcmR1c3AoKTsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiVXNlcnNwYWNlIFN0YWNrXG4iKTsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJVc2Vyc3BhY2UgU3RhY2tcbiIpOwogCQkJc2hvd19zdGFjayhOVUxMLCBzdGFjayk7CisjZW5kaWYKIAkJfQogCX0KIApAQCAtNTQ2LDcgKzU5OCw3IEBACiAgKiBTaW1pbGFyIHRvIGdldF91c2VyLCBkbyBzb21lIGFkZHJlc3MgY2hlY2tpbmcsIHRoZW4gZGVyZWZlcmVuY2UKICAqIFJldHVybiB0cnVlIG9uIHN1Y2VzcywgZmFsc2Ugb24gYmFkIGFkZHJlc3MKICAqLwotYm9vbCBnZXRfaW5zdHJ1Y3Rpb24odW5zaWduZWQgc2hvcnQgKnZhbCwgdW5zaWduZWQgc2hvcnQgKmFkZHJlc3MpCitzdGF0aWMgYm9vbCBnZXRfaW5zdHJ1Y3Rpb24odW5zaWduZWQgc2hvcnQgKnZhbCwgdW5zaWduZWQgc2hvcnQgKmFkZHJlc3MpCiB7CiAKIAl1bnNpZ25lZCBsb25nIGFkZHI7CkBAIC01OTIsNyArNjQ0LDcgQEAKIAogI2lmIEwxX0NPREVfTEVOR1RIICE9IDAKIAlpZiAoYWRkciA+PSBMMV9DT0RFX1NUQVJUICYmIChhZGRyICsgMikgPD0gKEwxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSCkpIHsKLQkJZG1hX21lbWNweSh2YWwsIGFkZHJlc3MsIDIpOworCQlpc3JhbV9tZW1jcHkodmFsLCBhZGRyZXNzLCAyKTsKIAkJcmV0dXJuIHRydWU7CiAJfQogI2VuZGlmCkBAIC02MDcsNDUgKzY1OSw0OCBAQAogICogVGhlc2UgYXJlIHRoZSBub3JtYWwgaW5zdHJ1Y3Rpb25zIHdoaWNoIGNhdXNlIGNoYW5nZSBvZiBmbG93LCB3aGljaAogICogd291bGQgYmUgYXQgdGhlIHNvdXJjZSBvZiB0aGUgdHJhY2UgYnVmZmVyCiAgKi8KLXZvaWQgZGVjb2RlX2luc3RydWN0aW9uKHVuc2lnbmVkIHNob3J0ICphZGRyZXNzKQorI2lmZGVmIENPTkZJR19ERUJVR19WRVJCT1NFCitzdGF0aWMgdm9pZCBkZWNvZGVfaW5zdHJ1Y3Rpb24odW5zaWduZWQgc2hvcnQgKmFkZHJlc3MpCiB7CiAJdW5zaWduZWQgc2hvcnQgb3Bjb2RlOwogCiAJaWYgKGdldF9pbnN0cnVjdGlvbigmb3Bjb2RlLCBhZGRyZXNzKSkgewogCQlpZiAob3Bjb2RlID09IDB4MDAxMCkKLQkJCXByaW50aygiUlRTIik7CisJCQl2ZXJib3NlX3ByaW50aygiUlRTIik7CiAJCWVsc2UgaWYgKG9wY29kZSA9PSAweDAwMTEpCi0JCQlwcmludGsoIlJUSSIpOworCQkJdmVyYm9zZV9wcmludGsoIlJUSSIpOwogCQllbHNlIGlmIChvcGNvZGUgPT0gMHgwMDEyKQotCQkJcHJpbnRrKCJSVFgiKTsKKwkJCXZlcmJvc2VfcHJpbnRrKCJSVFgiKTsKIAkJZWxzZSBpZiAob3Bjb2RlID49IDB4MDA1MCAmJiBvcGNvZGUgPD0gMHgwMDU3KQotCQkJcHJpbnRrKCJKVU1QIChQJWkpIiwgb3Bjb2RlICYgNyk7CisJCQl2ZXJib3NlX3ByaW50aygiSlVNUCAoUCVpKSIsIG9wY29kZSAmIDcpOwogCQllbHNlIGlmIChvcGNvZGUgPj0gMHgwMDYwICYmIG9wY29kZSA8PSAweDAwNjcpCi0JCQlwcmludGsoIkNBTEwgKFAlaSkiLCBvcGNvZGUgJiA3KTsKKwkJCXZlcmJvc2VfcHJpbnRrKCJDQUxMIChQJWkpIiwgb3Bjb2RlICYgNyk7CiAJCWVsc2UgaWYgKG9wY29kZSA+PSAweDAwNzAgJiYgb3Bjb2RlIDw9IDB4MDA3NykKLQkJCXByaW50aygiQ0FMTCAoUEMrUCVpKSIsIG9wY29kZSAmIDcpOworCQkJdmVyYm9zZV9wcmludGsoIkNBTEwgKFBDK1AlaSkiLCBvcGNvZGUgJiA3KTsKIAkJZWxzZSBpZiAob3Bjb2RlID49IDB4MDA4MCAmJiBvcGNvZGUgPD0gMHgwMDg3KQotCQkJcHJpbnRrKCJKVU1QIChQQytQJWkpIiwgb3Bjb2RlICYgNyk7CisJCQl2ZXJib3NlX3ByaW50aygiSlVNUCAoUEMrUCVpKSIsIG9wY29kZSAmIDcpOwogCQllbHNlIGlmICgob3Bjb2RlID49IDB4MTAwMCAmJiBvcGNvZGUgPD0gMHgxM0ZGKSB8fCAob3Bjb2RlID49IDB4MTgwMCAmJiBvcGNvZGUgPD0gMHgxQkZGKSkKLQkJCXByaW50aygiSUYgIUNDIEpVTVAiKTsKKwkJCXZlcmJvc2VfcHJpbnRrKCJJRiAhQ0MgSlVNUCIpOwogCQllbHNlIGlmICgob3Bjb2RlID49IDB4MTQwMCAmJiBvcGNvZGUgPD0gMHgxN2ZmKSB8fCAob3Bjb2RlID49IDB4MWMwMCAmJiBvcGNvZGUgPD0gMHgxZmZmKSkKLQkJCXByaW50aygiSUYgQ0MgSlVNUCIpOworCQkJdmVyYm9zZV9wcmludGsoIklGIENDIEpVTVAiKTsKIAkJZWxzZSBpZiAob3Bjb2RlID49IDB4MjAwMCAmJiBvcGNvZGUgPD0gMHgyZmZmKQotCQkJcHJpbnRrKCJKVU1QLlMiKTsKKwkJCXZlcmJvc2VfcHJpbnRrKCJKVU1QLlMiKTsKIAkJZWxzZSBpZiAob3Bjb2RlID49IDB4ZTA4MCAmJiBvcGNvZGUgPD0gMHhlMGZmKQotCQkJcHJpbnRrKCJMU0VUVVAiKTsKKwkJCXZlcmJvc2VfcHJpbnRrKCJMU0VUVVAiKTsKIAkJZWxzZSBpZiAob3Bjb2RlID49IDB4ZTIwMCAmJiBvcGNvZGUgPD0gMHhlMmZmKQotCQkJcHJpbnRrKCJKVU1QLkwiKTsKKwkJCXZlcmJvc2VfcHJpbnRrKCJKVU1QLkwiKTsKIAkJZWxzZSBpZiAob3Bjb2RlID49IDB4ZTMwMCAmJiBvcGNvZGUgPD0gMHhlM2ZmKQotCQkJcHJpbnRrKCJDQUxMIHBjcmVsIik7CisJCQl2ZXJib3NlX3ByaW50aygiQ0FMTCBwY3JlbCIpOwogCQllbHNlCi0JCQlwcmludGsoIjB4JTA0eCIsIG9wY29kZSk7CisJCQl2ZXJib3NlX3ByaW50aygiMHglMDR4Iiwgb3Bjb2RlKTsKIAl9CiAKIH0KKyNlbmRpZgogCiB2b2lkIGR1bXBfYmZpbl90cmFjZV9idWZmZXIodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfREVCVUdfVkVSQk9TRQogI2lmZGVmIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfT04KIAlpbnQgdGZsYWdzLCBpID0gMDsKIAljaGFyIGJ1ZlsxNTBdOwpAQCAtNzAxLDYgKzc1Niw3IEBACiAKIAl0cmFjZV9idWZmZXJfcmVzdG9yZSh0ZmxhZ3MpOwogI2VuZGlmCisjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0woZHVtcF9iZmluX3RyYWNlX2J1ZmZlcik7CiAKQEAgLTcwOCw3ICs3NjQsNyBAQAogICogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgYWRkcmVzcyBwb2ludGVkIHRvIGlzIGVpdGhlciBhCiAgKiAxNi1iaXQgQ0FMTCBpbnN0cnVjdGlvbiwgb3IgYSAzMi1iaXQgQ0FMTCBpbnN0cnVjdGlvbgogICovCi1ib29sIGlzX2JmaW5fY2FsbCh1bnNpZ25lZCBzaG9ydCAqYWRkcikKK3N0YXRpYyBib29sIGlzX2JmaW5fY2FsbCh1bnNpZ25lZCBzaG9ydCAqYWRkcikKIHsKIAl1bnNpZ25lZCBzaG9ydCBvcGNvZGUgPSAwLCAqaW5zX2FkZHI7CiAJaW5zX2FkZHIgPSAodW5zaWduZWQgc2hvcnQgKilhZGRyOwpAQCAtNzMwLDggKzc4NiwxMCBAQAogCXJldHVybiBmYWxzZTsKIAogfQorCiB2b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzdGFjaykKIHsKKyNpZmRlZiBDT05GSUdfUFJJTlRLCiAJdW5zaWduZWQgaW50ICphZGRyLCAqZW5kc3RhY2ssICpmcCA9IDAsICpmcmFtZTsKIAl1bnNpZ25lZCBzaG9ydCAqaW5zX2FkZHI7CiAJY2hhciBidWZbMTUwXTsKQEAgLTc1Niw4ICs4MTQsMTAgQEAKIAl9IGVsc2UKIAkJZW5kc3RhY2sgPSAodW5zaWduZWQgaW50ICopUEFHRV9BTElHTigodW5zaWduZWQgaW50KXN0YWNrKTsKIAorCXByaW50ayhLRVJOX05PVElDRSAiU3RhY2sgaW5mbzpcbiIpOwogCWRlY29kZV9hZGRyZXNzKGJ1ZiwgKHVuc2lnbmVkIGludClzdGFjayk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICJTdGFjayBpbmZvOlxuIiBLRVJOX05PVElDRSAiIFNQOiBbMHglcF0gJXNcbiIsIHN0YWNrLCBidWYpOworCXByaW50ayhLRVJOX05PVElDRSAiIFNQOiBbMHglcF0gJXNcbiIsIHN0YWNrLCBidWYpOworCiAJYWRkciA9ICh1bnNpZ25lZCBpbnQgKikoKHVuc2lnbmVkIGludClzdGFjayAmIH4weDNGKTsKIAogCS8qIEZpcnN0IHRoaW5nIGlzIHRvIGxvb2sgZm9yIGEgZnJhbWUgcG9pbnRlciAqLwpAQCAtODQ4LDcgKzkwOCw3IEBACiAJCWlmICghaikKIAkJCXByaW50aygiXG4iKTsKIAl9Ci0KKyNlbmRpZgogfQogCiB2b2lkIGR1bXBfc3RhY2sodm9pZCkKQEAgLTg2NiwzOCArOTI2LDM5IEBACiAKIHZvaWQgZHVtcF9iZmluX3Byb2Nlc3Moc3RydWN0IHB0X3JlZ3MgKmZwKQogeworI2lmZGVmIENPTkZJR19ERUJVR19WRVJCT1NFCiAJLyogV2Ugc2hvdWxkIGJlIGFibGUgdG8gbG9vayBhdCBmcC0+aXBlbmQsIGJ1dCB3ZSBkb24ndCBwdXNoIGl0IG9uIHRoZQogCSAqIHN0YWNrIGFsbCB0aGUgdGltZSwgc28gZG8gdGhpcyB1bnRpbCB3ZSBmaXggdGhhdCAqLwogCXVuc2lnbmVkIGludCBjb250ZXh0ID0gYmZpbl9yZWFkX0lQRU5EKCk7CiAKIAlpZiAob29wc19pbl9wcm9ncmVzcykKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIktlcm5lbCBPT1BTIGluIHByb2dyZXNzXG4iKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9FTUVSRyAiS2VybmVsIE9PUFMgaW4gcHJvZ3Jlc3NcbiIpOwogCiAJaWYgKGNvbnRleHQgJiAweDAwMjAgJiYgKGZwLT5zZXFzdGF0ICYgU0VRU1RBVF9FWENBVVNFKSA9PSBWRUNfSFdFUlIpCi0JCXByaW50ayhLRVJOX05PVElDRSAiSFcgRXJyb3IgY29udGV4dFxuIik7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJIVyBFcnJvciBjb250ZXh0XG4iKTsKIAllbHNlIGlmIChjb250ZXh0ICYgMHgwMDIwKQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIkRlZmVycmVkIEV4Y2VwdGlvbiBjb250ZXh0XG4iKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIkRlZmVycmVkIEV4Y2VwdGlvbiBjb250ZXh0XG4iKTsKIAllbHNlIGlmIChjb250ZXh0ICYgMHgzRkMwKQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIkludGVycnVwdCBjb250ZXh0XG4iKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIkludGVycnVwdCBjb250ZXh0XG4iKTsKIAllbHNlIGlmIChjb250ZXh0ICYgMHg0MDAwKQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIkRlZmVycmVkIEludGVycnVwdCBjb250ZXh0XG4iKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIkRlZmVycmVkIEludGVycnVwdCBjb250ZXh0XG4iKTsKIAllbHNlIGlmIChjb250ZXh0ICYgMHg4MDAwKQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIktlcm5lbCBwcm9jZXNzIGNvbnRleHRcbiIpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiS2VybmVsIHByb2Nlc3MgY29udGV4dFxuIik7CiAKIAkvKiBCZWNhdXNlIHdlIGFyZSBjcmFzaGluZywgYW5kIHBvaW50ZXJzIGNvdWxkIGJlIGJhZCwgd2UgY2hlY2sgdGhpbmdzCiAJICogcHJldHR5IGNsb3NlbHkgYmVmb3JlIHdlIHVzZSB0aGVtCiAJICovCiAJaWYgKCh1bnNpZ25lZCBsb25nKWN1cnJlbnQgPj0gRklYRURfQ09ERV9TVEFSVCAmJgogCSAgICAhKCh1bnNpZ25lZCBsb25nKWN1cnJlbnQgJiAweDMpICYmIGN1cnJlbnQtPnBpZCkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNVUlJFTlQgUFJPQ0VTUzpcbiIpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiQ1VSUkVOVCBQUk9DRVNTOlxuIik7CiAJCWlmIChjdXJyZW50LT5jb21tID49IChjaGFyICopRklYRURfQ09ERV9TVEFSVCkKLQkJCXByaW50ayhLRVJOX05PVElDRSAiQ09NTT0lcyBQSUQ9JWRcbiIsCisJCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiQ09NTT0lcyBQSUQ9JWRcbiIsCiAJCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKIAkJZWxzZQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJDT01NPSBpbnZhbGlkXG4iKTsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJDT01NPSBpbnZhbGlkXG4iKTsKIAogCQlpZiAoISgodW5zaWduZWQgbG9uZyljdXJyZW50LT5tbSAmIDB4MykgJiYgKHVuc2lnbmVkIGxvbmcpY3VycmVudC0+bW0gPj0gRklYRURfQ09ERV9TVEFSVCkKLQkJCXByaW50ayhLRVJOX05PVElDRSAgIlRFWFQgPSAweCVwLTB4JXAgICAgICAgIERBVEEgPSAweCVwLTB4JXBcbiIKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICAiVEVYVCA9IDB4JXAtMHglcCAgICAgICAgREFUQSA9IDB4JXAtMHglcFxuIgogCQkJCUtFUk5fTk9USUNFICIgQlNTID0gMHglcC0weCVwICBVU0VSLVNUQUNLID0gMHglcFxuIgogCQkJCUtFUk5fTk9USUNFICJcbiIsCiAJCQkJKHZvaWQgKiljdXJyZW50LT5tbS0+c3RhcnRfY29kZSwKQEAgLTkwOCwzOCArOTY5LDQwIEBACiAJCQkJKHZvaWQgKiljdXJyZW50LT5tbS0+YnJrLAogCQkJCSh2b2lkICopY3VycmVudC0+bW0tPnN0YXJ0X3N0YWNrKTsKIAkJZWxzZQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJpbnZhbGlkIG1tXG4iKTsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJpbnZhbGlkIG1tXG4iKTsKIAl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJcbiIgS0VSTl9OT1RJQ0UKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIlxuIiBLRVJOX05PVElDRQogCQkgICAgICJObyBWYWxpZCBwcm9jZXNzIGluIGN1cnJlbnQgY29udGV4dFxuIik7CisjZW5kaWYKIH0KIAogdm9pZCBkdW1wX2JmaW5fbWVtKHN0cnVjdCBwdF9yZWdzICpmcCkKIHsKKyNpZmRlZiBDT05GSUdfREVCVUdfVkVSQk9TRQogCXVuc2lnbmVkIHNob3J0ICphZGRyLCAqZXJyYWRkciwgdmFsID0gMCwgZXJyID0gMDsKIAljaGFyIHN0aSA9IDAsIGJ1Zls2XTsKIAogCWVycmFkZHIgPSAodm9pZCAqKWZwLT5wYzsKIAotCXByaW50ayhLRVJOX05PVElDRSAicmV0dXJuIGFkZHJlc3M6IFsweCVwXTsgY29udGVudHMgb2Y6IiwgZXJyYWRkcik7CisJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgInJldHVybiBhZGRyZXNzOiBbMHglcF07IGNvbnRlbnRzIG9mOiIsIGVycmFkZHIpOwogCiAJZm9yIChhZGRyID0gKHVuc2lnbmVkIHNob3J0ICopKCh1bnNpZ25lZCBsb25nKWVycmFkZHIgJiB+MHhGKSAtIDB4MTA7CiAJICAgICBhZGRyIDwgKHVuc2lnbmVkIHNob3J0ICopKCh1bnNpZ25lZCBsb25nKWVycmFkZHIgJiB+MHhGKSArIDB4MTA7CiAJICAgICBhZGRyKyspIHsKIAkJaWYgKCEoKHVuc2lnbmVkIGxvbmcpYWRkciAmIDB4RikpCi0JCQlwcmludGsoIlxuIiBLRVJOX05PVElDRSAiMHglcDogIiwgYWRkcik7CisJCQl2ZXJib3NlX3ByaW50aygiXG4iIEtFUk5fTk9USUNFICIweCVwOiAiLCBhZGRyKTsKIAotCQlpZiAoZ2V0X2luc3RydWN0aW9uKCZ2YWwsIGFkZHIpKSB7CisJCWlmICghZ2V0X2luc3RydWN0aW9uKCZ2YWwsIGFkZHIpKSB7CiAJCQkJdmFsID0gMDsKIAkJCQlzcHJpbnRmKGJ1ZiwgIj8/Pz8iKTsKIAkJfSBlbHNlCiAJCQlzcHJpbnRmKGJ1ZiwgIiUwNHgiLCB2YWwpOwogCiAJCWlmIChhZGRyID09IGVycmFkZHIpIHsKLQkJCXByaW50aygiWyVzXSIsIGJ1Zik7CisJCQl2ZXJib3NlX3ByaW50aygiWyVzXSIsIGJ1Zik7CiAJCQllcnIgPSB2YWw7CiAJCX0gZWxzZQotCQkJcHJpbnRrKCIgJXMgIiwgYnVmKTsKKwkJCXZlcmJvc2VfcHJpbnRrKCIgJXMgIiwgYnVmKTsKIAogCQkvKiBEbyBhbnkgcHJldmlvdXMgaW5zdHJ1Y3Rpb25zIHR1cm4gb24gaW50ZXJydXB0cz8gKi8KIAkJaWYgKGFkZHIgPD0gZXJyYWRkciAmJgkJCQkvKiBpbiB0aGUgcGFzdCAqLwpAQCAtOTQ4LDE0ICsxMDExLDE0IEBACiAJCQlzdGkgPSAxOwogCX0KIAotCXByaW50aygiXG4iKTsKKwl2ZXJib3NlX3ByaW50aygiXG4iKTsKIAogCS8qIEhhcmR3YXJlIGVycm9yIGludGVycnVwdHMgY2FuIGJlIGRlZmVycmVkICovCiAJaWYgKHVubGlrZWx5KHN0aSAmJiAoZnAtPnNlcXN0YXQgJiBTRVFTVEFUX0VYQ0FVU0UpID09IFZFQ19IV0VSUiAmJgogCSAgICBvb3BzX2luX3Byb2dyZXNzKSl7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiTG9va3MgbGlrZSB0aGlzIHdhcyBhIGRlZmVycmVkIGVycm9yIC0gc29ycnlcbiIpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiTG9va3MgbGlrZSB0aGlzIHdhcyBhIGRlZmVycmVkIGVycm9yIC0gc29ycnlcbiIpOwogI2lmbmRlZiBDT05GSUdfREVCVUdfSFdFUlIKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJUaGUgcmVtYWluaW5nIG1lc3NhZ2UgbWF5IGJlIG1lYW5pbmdsZXNzXG4iCisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJUaGUgcmVtYWluaW5nIG1lc3NhZ2UgbWF5IGJlIG1lYW5pbmdsZXNzXG4iCiAJCQlLRVJOX05PVElDRSAiWW91IHNob3VsZCBlbmFibGUgQ09ORklHX0RFQlVHX0hXRVJSIHRvIGdldCBhIgogCQkJICIgYmV0dGVyIGlkZWEgd2hlcmUgaXQgY2FtZSBmcm9tXG4iKTsKICNlbHNlCkBAIC05NjksMzQgKzEwMzIsNDcgQEAKIAkJCS8qIEFuZCB0aGUgbGFzdCBSRVRJIHBvaW50cyB0byB0aGUgY3VycmVudCB1c2Vyc3BhY2UgY29udGV4dCAqLwogCQkJaWYgKChmcCArIDEpLT5wYyA+PSBjdXJyZW50LT5tbS0+c3RhcnRfY29kZSAmJgogCQkJICAgIChmcCArIDEpLT5wYyA8PSBjdXJyZW50LT5tbS0+ZW5kX2NvZGUpIHsKLQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkl0IG1pZ2h0IGJlIGJldHRlciB0byBsb29rIGFyb3VuZCBoZXJlIDogXG4iKTsKLQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJJdCBtaWdodCBiZSBiZXR0ZXIgdG8gbG9vayBhcm91bmQgaGVyZSA6IFxuIik7CisJCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCQkJCXNob3dfcmVncyhmcCArIDEpOwotCQkJCXByaW50ayhLRVJOX05PVElDRSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCQkJfQogCQl9CiAjZW5kaWYKIAl9CisjZW5kaWYKIH0KIAogdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKmZwKQogeworI2lmZGVmIENPTkZJR19ERUJVR19WRVJCT1NFCiAJY2hhciBidWYgWzE1MF07CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgIlxuIiBLRVJOX05PVElDRSAiU0VRVUVOQ0VSIFNUQVRVUzpcdFx0JXNcbiIsIHByaW50X3RhaW50ZWQoKSk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgU0VRU1RBVDogJTA4bHggIElQRU5EOiAlMDRseCAgU1lTQ0ZHOiAlMDRseFxuIiwKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiXG4iIEtFUk5fTk9USUNFICJTRVFVRU5DRVIgU1RBVFVTOlx0XHQlc1xuIiwgcHJpbnRfdGFpbnRlZCgpKTsKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIFNFUVNUQVQ6ICUwOGx4ICBJUEVORDogJTA0bHggIFNZU0NGRzogJTA0bHhcbiIsCiAJCShsb25nKWZwLT5zZXFzdGF0LCBmcC0+aXBlbmQsIGZwLT5zeXNjZmcpOwotCXByaW50ayhLRVJOX05PVElDRSAiICBIV0VSUkNBVVNFOiAweCVseFxuIiwKLQkJKGZwLT5zZXFzdGF0ICYgU0VRU1RBVF9IV0VSUkNBVVNFKSA+PiAxNCk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgIEVYQ0FVU0UgICA6IDB4JWx4XG4iLAorCWlmICgoZnAtPnNlcXN0YXQgJiBTRVFTVEFUX0VYQ0FVU0UpID09IFZFQ19IV0VSUikgeworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiICBIV0VSUkNBVVNFOiAweCVseFxuIiwKKwkJCShmcC0+c2Vxc3RhdCAmIFNFUVNUQVRfSFdFUlJDQVVTRSkgPj4gMTQpOworI2lmZGVmIEVCSVVfRVJSTVNUCisJCS8qIElmIHRoZSBlcnJvciB3YXMgZnJvbSB0aGUgRUJJVSwgcHJpbnQgaXQgb3V0ICovCisJCWlmIChiZmluX3JlYWRfRUJJVV9FUlJNU1QoKSAmIENPUkVfRVJST1IpIHsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgIEVCSVUgRXJyb3IgUmVhc29uICA6IDB4JTA0eFxuIiwKKwkJCQliZmluX3JlYWRfRUJJVV9FUlJNU1QoKSk7CisJCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiICBFQklVIEVycm9yIEFkZHJlc3MgOiAweCUwOHhcbiIsCisJCQkJYmZpbl9yZWFkX0VCSVVfRVJSQUREKCkpOworCQl9CisjZW5kaWYKKwl9CisJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIiAgRVhDQVVTRSAgIDogMHglbHhcbiIsCiAJCWZwLT5zZXFzdGF0ICYgU0VRU1RBVF9FWENBVVNFKTsKIAlmb3IgKGkgPSA2OyBpIDw9IDE1IDsgaSsrKSB7CiAJCWlmIChmcC0+aXBlbmQgJiAoMSA8PCBpKSkgewogCQkJZGVjb2RlX2FkZHJlc3MoYnVmLCBiZmluX3JlYWQzMihFVlQwICsgNCppKSk7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIiAgcGh5c2ljYWwgSVZHJWkgYXNzZXJ0ZWQgOiAlc1xuIiwgaSwgYnVmKTsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgIHBoeXNpY2FsIElWRyVpIGFzc2VydGVkIDogJXNcbiIsIGksIGJ1Zik7CiAJCX0KIAl9CiAKQEAgLTEwMDksNjQgKzEwODUsNjUgQEAKIAkJCQlnb3RvIHVubG9jazsKIAogCQkJZGVjb2RlX2FkZHJlc3MoYnVmLCAodW5zaWduZWQgaW50KWFjdGlvbi0+aGFuZGxlcik7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIiAgbG9naWNhbCBpcnEgJTNkIG1hcHBlZCAgOiAlcyIsIGksIGJ1Zik7CisJCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiICBsb2dpY2FsIGlycSAlM2QgbWFwcGVkICA6ICVzIiwgaSwgYnVmKTsKIAkJCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkgewogCQkJCWRlY29kZV9hZGRyZXNzKGJ1ZiwgKHVuc2lnbmVkIGludClhY3Rpb24tPmhhbmRsZXIpOwotCQkJCXByaW50aygiLCAlcyIsIGJ1Zik7CisJCQkJdmVyYm9zZV9wcmludGsoIiwgJXMiLCBidWYpOwogCQkJfQotCQkJcHJpbnRrKCJcbiIpOworCQkJdmVyYm9zZV9wcmludGsoIlxuIik7CiB1bmxvY2s6CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7CiAJCX0KIAl9CiAKIAlkZWNvZGVfYWRkcmVzcyhidWYsIGZwLT5yZXRlKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiBSRVRFOiAlc1xuIiwgYnVmKTsKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIFJFVEU6ICVzXG4iLCBidWYpOwogCWRlY29kZV9hZGRyZXNzKGJ1ZiwgZnAtPnJldG4pOwotCXByaW50ayhLRVJOX05PVElDRSAiIFJFVE46ICVzXG4iLCBidWYpOworCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgUkVUTjogJXNcbiIsIGJ1Zik7CiAJZGVjb2RlX2FkZHJlc3MoYnVmLCBmcC0+cmV0eCk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgUkVUWDogJXNcbiIsIGJ1Zik7CisJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIiBSRVRYOiAlc1xuIiwgYnVmKTsKIAlkZWNvZGVfYWRkcmVzcyhidWYsIGZwLT5yZXRzKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiBSRVRTOiAlc1xuIiwgYnVmKTsKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIFJFVFM6ICVzXG4iLCBidWYpOwogCWRlY29kZV9hZGRyZXNzKGJ1ZiwgZnAtPnBjKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiBQQyAgOiAlc1xuIiwgYnVmKTsKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIFBDICA6ICVzXG4iLCBidWYpOwogCiAJaWYgKCgobG9uZylmcC0+c2Vxc3RhdCAmICBTRVFTVEFUX0VYQ0FVU0UpICYmCiAJICAgICgoKGxvbmcpZnAtPnNlcXN0YXQgJiBTRVFTVEFUX0VYQ0FVU0UpICE9IFZFQ19IV0VSUikpIHsKIAkJZGVjb2RlX2FkZHJlc3MoYnVmLCBzYXZlZF9kY3BsYl9mYXVsdF9hZGRyKTsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJEQ1BMQl9GQVVMVF9BRERSOiAlc1xuIiwgYnVmKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIkRDUExCX0ZBVUxUX0FERFI6ICVzXG4iLCBidWYpOwogCQlkZWNvZGVfYWRkcmVzcyhidWYsIHNhdmVkX2ljcGxiX2ZhdWx0X2FkZHIpOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIklDUExCX0ZBVUxUX0FERFI6ICVzXG4iLCBidWYpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiSUNQTEJfRkFVTFRfQUREUjogJXNcbiIsIGJ1Zik7CiAJfQogCi0JcHJpbnRrKEtFUk5fTk9USUNFICJcbiIgS0VSTl9OT1RJQ0UgIlBST0NFU1NPUiBTVEFURTpcbiIpOwotCXByaW50ayhLRVJOX05PVElDRSAiIFIwIDogJTA4bHggICAgUjEgOiAlMDhseCAgICBSMiA6ICUwOGx4ICAgIFIzIDogJTA4bHhcbiIsCisJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIlxuIiBLRVJOX05PVElDRSAiUFJPQ0VTU09SIFNUQVRFOlxuIik7CisJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIiBSMCA6ICUwOGx4ICAgIFIxIDogJTA4bHggICAgUjIgOiAlMDhseCAgICBSMyA6ICUwOGx4XG4iLAogCQlmcC0+cjAsIGZwLT5yMSwgZnAtPnIyLCBmcC0+cjMpOwotCXByaW50ayhLRVJOX05PVElDRSAiIFI0IDogJTA4bHggICAgUjUgOiAlMDhseCAgICBSNiA6ICUwOGx4ICAgIFI3IDogJTA4bHhcbiIsCisJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIiBSNCA6ICUwOGx4ICAgIFI1IDogJTA4bHggICAgUjYgOiAlMDhseCAgICBSNyA6ICUwOGx4XG4iLAogCQlmcC0+cjQsIGZwLT5yNSwgZnAtPnI2LCBmcC0+cjcpOwotCXByaW50ayhLRVJOX05PVElDRSAiIFAwIDogJTA4bHggICAgUDEgOiAlMDhseCAgICBQMiA6ICUwOGx4ICAgIFAzIDogJTA4bHhcbiIsCisJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIiBQMCA6ICUwOGx4ICAgIFAxIDogJTA4bHggICAgUDIgOiAlMDhseCAgICBQMyA6ICUwOGx4XG4iLAogCQlmcC0+cDAsIGZwLT5wMSwgZnAtPnAyLCBmcC0+cDMpOwotCXByaW50ayhLRVJOX05PVElDRSAiIFA0IDogJTA4bHggICAgUDUgOiAlMDhseCAgICBGUCA6ICUwOGx4ICAgIFNQIDogJTA4bHhcbiIsCisJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIiBQNCA6ICUwOGx4ICAgIFA1IDogJTA4bHggICAgRlAgOiAlMDhseCAgICBTUCA6ICUwOGx4XG4iLAogCQlmcC0+cDQsIGZwLT5wNSwgZnAtPmZwLCAobG9uZylmcCk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgTEIwOiAlMDhseCAgICBMVDA6ICUwOGx4ICAgIExDMDogJTA4bHhcbiIsCisJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIiBMQjA6ICUwOGx4ICAgIExUMDogJTA4bHggICAgTEMwOiAlMDhseFxuIiwKIAkJZnAtPmxiMCwgZnAtPmx0MCwgZnAtPmxjMCk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgTEIxOiAlMDhseCAgICBMVDE6ICUwOGx4ICAgIExDMTogJTA4bHhcbiIsCisJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIiBMQjE6ICUwOGx4ICAgIExUMTogJTA4bHggICAgTEMxOiAlMDhseFxuIiwKIAkJZnAtPmxiMSwgZnAtPmx0MSwgZnAtPmxjMSk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgQjAgOiAlMDhseCAgICBMMCA6ICUwOGx4ICAgIE0wIDogJTA4bHggICAgSTAgOiAlMDhseFxuIiwKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIEIwIDogJTA4bHggICAgTDAgOiAlMDhseCAgICBNMCA6ICUwOGx4ICAgIEkwIDogJTA4bHhcbiIsCiAJCWZwLT5iMCwgZnAtPmwwLCBmcC0+bTAsIGZwLT5pMCk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgQjEgOiAlMDhseCAgICBMMSA6ICUwOGx4ICAgIE0xIDogJTA4bHggICAgSTEgOiAlMDhseFxuIiwKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIEIxIDogJTA4bHggICAgTDEgOiAlMDhseCAgICBNMSA6ICUwOGx4ICAgIEkxIDogJTA4bHhcbiIsCiAJCWZwLT5iMSwgZnAtPmwxLCBmcC0+bTEsIGZwLT5pMSk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgQjIgOiAlMDhseCAgICBMMiA6ICUwOGx4ICAgIE0yIDogJTA4bHggICAgSTIgOiAlMDhseFxuIiwKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIEIyIDogJTA4bHggICAgTDIgOiAlMDhseCAgICBNMiA6ICUwOGx4ICAgIEkyIDogJTA4bHhcbiIsCiAJCWZwLT5iMiwgZnAtPmwyLCBmcC0+bTIsIGZwLT5pMik7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgQjMgOiAlMDhseCAgICBMMyA6ICUwOGx4ICAgIE0zIDogJTA4bHggICAgSTMgOiAlMDhseFxuIiwKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIEIzIDogJTA4bHggICAgTDMgOiAlMDhseCAgICBNMyA6ICUwOGx4ICAgIEkzIDogJTA4bHhcbiIsCiAJCWZwLT5iMywgZnAtPmwzLCBmcC0+bTMsIGZwLT5pMyk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICJBMC53OiAlMDhseCAgIEEwLng6ICUwOGx4ICAgQTEudzogJTA4bHggICBBMS54OiAlMDhseFxuIiwKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiQTAudzogJTA4bHggICBBMC54OiAlMDhseCAgIEExLnc6ICUwOGx4ICAgQTEueDogJTA4bHhcbiIsCiAJCWZwLT5hMHcsIGZwLT5hMHgsIGZwLT5hMXcsIGZwLT5hMXgpOwogCi0JcHJpbnRrKEtFUk5fTk9USUNFICJVU1AgOiAlMDhseCAgQVNUQVQ6ICUwOGx4XG4iLAorCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJVU1AgOiAlMDhseCAgQVNUQVQ6ICUwOGx4XG4iLAogCQlyZHVzcCgpLCBmcC0+YXN0YXQpOwogCi0JcHJpbnRrKEtFUk5fTk9USUNFICJcbiIpOworCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJcbiIpOworI2VuZGlmCiB9CiAKICNpZmRlZiBDT05GSUdfU1lTX0JGSU5fU1BJTkxPQ0tfTDEKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvS2NvbmZpZyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvS2NvbmZpZwppbmRleCA4YmY5ZTU4Li5kZjIyNGQwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL0tjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9LY29uZmlnCkBAIC0xNCw0ICsxNCw5IEBACiAJaGVscAogCSAgQ00tQkY1Mjcgc3VwcG9ydCBmb3IgRVZBTC0gYW5kIERFVi1Cb2FyZC4KIAorY29uZmlnIEJGSU41MjZfRVpCUkQKKwlib29sICJCRjUyNi1FWkJSRCIKKwloZWxwCisJICBCRjUyNi1FWkJSRC9FWktJVCBMaXRlIGJvYXJkIHN1cHBvcnQuCisKIGVuZGNob2ljZQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9NYWtlZmlsZSBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvTWFrZWZpbGUKaW5kZXggN2JhN2QyNS4uZWI2ZWQzMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9NYWtlZmlsZQorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL01ha2VmaWxlCkBAIC00LDMgKzQsNCBAQAogCiBvYmotJChDT05GSUdfQkZJTjUyN19FWktJVCkgICAgICAgICAgICArPSBlemtpdC5vCiBvYmotJChDT05GSUdfQkZJTjUyN19CTFVFVEVDSE5JWF9DTSkgICArPSBjbV9iZjUyNy5vCitvYmotJChDT05GSUdfQkZJTjUyNl9FWkJSRCkgICAgICAgICAgICArPSBlemJyZC5vCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMKaW5kZXggZDIyYmM3Ny4uOWVhNDQwYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbV9iZjUyNy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYwpAQCAtNDMsMTAgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2w4MTEuaD4KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9IRFJDKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9IRFJDX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC91c2IvbXVzYi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8YXNtL2NwbGIuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2JmaW41eHhfc3BpLmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgpAQCAtMTMwLDYgKzEyNywxNiBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG11c2JfaGRyY19jb25maWcgbXVzYl9jb25maWcgPSB7CisJLm11bHRpcG9pbnQJPSAwLAorCS5keW5fZmlmbwk9IDAsCisJLnNvZnRfY29uCT0gMSwKKwkuZG1hCQk9IDEsCisJLm51bV9lcHMJPSA3LAorCS5kbWFfY2hhbm5lbHMJPSA3LAorCS5ncGlvX3Zyc2VsCT0gR1BJT19QRjExLAorfTsKKwogc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSBtdXNiX3BsYXQgPSB7CiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfT1RHKQogCS5tb2RlCQk9IE1VU0JfT1RHLApAQCAtMTM4LDcgKzE0NSw3IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQykKIAkubW9kZQkJPSBNVVNCX1BFUklQSEVSQUwsCiAjZW5kaWYKLQkubXVsdGlwb2ludAk9IDAsCisJLmNvbmZpZwkJPSAmbXVzYl9jb25maWcsCiB9OwogCiBzdGF0aWMgdTY0IG11c2JfZG1hbWFzayA9IH4odTMyKTA7CkBAIC0yMDEsNyArMjA4LDcgQEAKIAl7CiAJCS5uYW1lID0gImxpbnV4IGtlcm5lbChuYW5kKSIsCiAJCS5vZmZzZXQgPSAwLAotCQkuc2l6ZSA9IDQgKiBTSVpFXzFNLAorCQkuc2l6ZSA9IDQgKiAxMDI0ICogMTAyNCwKIAl9LAogCXsKIAkJLm5hbWUgPSAiZmlsZSBzeXN0ZW0obmFuZCkiLApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Yzg3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKQEAgLTAsMCArMSw3MzQgQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpicmQuYworICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKKyAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqCisgKiBDcmVhdGVkOgorICogRGVzY3JpcHRpb246CisgKgorICogTW9kaWZpZWQ6CisgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCisgKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvbXVzYi5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vYmZpbjV4eF9zcGkuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL25hbmQuaD4KKyNpbmNsdWRlIDxhc20vcG9ydG11eC5oPgorI2luY2x1ZGUgPGFzbS9kcG1jLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2FkNzg3Ny5oPgorCisvKgorICogTmFtZSB0aGUgQm9hcmQgZm9yIHRoZSAvcHJvYy9jcHVpbmZvCisgKi8KK2NvbnN0IGNoYXIgYmZpbl9ib2FyZF9uYW1lW10gPSAiQkY1MjYtRVpCUkQiOworCisvKgorICogIERyaXZlciBuZWVkcyB0byBrbm93IGFkZHJlc3MsIGlycSBhbmQgZmxhZyBwaW4uCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hEUkMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hEUkNfTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdXNiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHhmZmMwMzgwMCwKKwkJLmVuZAk9IDB4ZmZjMDNjZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0gewkvKiBnZW5lcmFsIElSUSAqLworCQkuc3RhcnQJPSBJUlFfVVNCX0lOVDAsCisJCS5lbmQJPSBJUlFfVVNCX0lOVDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSExFVkVMLAorCX0sCisJWzJdID0gewkvKiBETUEgSVJRICovCisJCS5zdGFydAk9IElSUV9VU0JfRE1BLAorCQkuZW5kCT0gSVJRX1VTQl9ETUEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSExFVkVMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG11c2JfaGRyY19jb25maWcgbXVzYl9jb25maWcgPSB7CisJLm11bHRpcG9pbnQJPSAwLAorCS5keW5fZmlmbwk9IDAsCisJLnNvZnRfY29uCT0gMSwKKwkuZG1hCQk9IDEsCisJLm51bV9lcHMJPSA3LAorCS5kbWFfY2hhbm5lbHMJPSA3LAorCS5ncGlvX3Zyc2VsCT0gR1BJT19QRzEzLAorfTsKKworc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSBtdXNiX3BsYXQgPSB7CisjaWYgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfT1RHKQorCS5tb2RlCQk9IE1VU0JfT1RHLAorI2VsaWYgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfSERSQ19IQ0QpCisJLm1vZGUJCT0gTVVTQl9IT1NULAorI2VsaWYgZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMpCisJLm1vZGUJCT0gTVVTQl9QRVJJUEhFUkFMLAorI2VuZGlmCisJLmNvbmZpZwkJPSAmbXVzYl9jb25maWcsCit9OworCitzdGF0aWMgdTY0IG11c2JfZG1hbWFzayA9IH4odTMyKTA7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG11c2JfZGV2aWNlID0geworCS5uYW1lCQk9ICJtdXNiX2hkcmMiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmbXVzYl9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmbXVzYl9wbGF0LAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG11c2JfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtdXNiX3Jlc291cmNlcywKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZXpicmRfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgICAgICAgPSAiYm9vdGxvYWRlcihub3IpIiwKKwkJLnNpemUgICAgICAgPSAweDQwMDAwLAorCQkub2Zmc2V0ICAgICA9IDAsCisJfSwgeworCQkubmFtZSAgICAgICA9ICJsaW51eCBrZXJuZWwobm9yKSIsCisJCS5zaXplICAgICAgID0gMHgxQzAwMDAsCisJCS5vZmZzZXQgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0sIHsKKwkJLm5hbWUgICAgICAgPSAiZmlsZSBzeXN0ZW0obm9yKSIsCisJCS5zaXplICAgICAgID0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldCAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZXpicmRfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGggICAgICA9IDIsCisJLnBhcnRzICAgICAgPSBlemJyZF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cyAgID0gQVJSQVlfU0laRShlemJyZF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXpicmRfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ID0gMHgyMDAwMDAwMCwKKwkuZW5kICAgPSAweDIwM2ZmZmZmLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXpicmRfZmxhc2hfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgID0gInBoeXNtYXAtZmxhc2giLAorCS5pZCAgICAgICAgICAgID0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZlemJyZF9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMgPSAxLAorCS5yZXNvdXJjZSAgICAgID0gJmV6YnJkX2ZsYXNoX3Jlc291cmNlLAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQkY1WFgpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX0JGNVhYX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdID0geworCXsKKwkJLm5hbWUgPSAibGludXgga2VybmVsKG5hbmQpIiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gNCAqIDEwMjQgKiAxMDI0LAorCX0sCisJeworCQkubmFtZSA9ICJmaWxlIHN5c3RlbShuYW5kKSIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBiZjV4eF9uYW5kX3BsYXRmb3JtIGJmNXh4X25hbmRfcGxhdGZvcm0gPSB7CisJLnBhZ2Vfc2l6ZSA9IE5GQ19QR19TSVpFXzI1NiwKKwkuZGF0YV93aWR0aCA9IE5GQ19OV0lEVEhfOCwKKwkucGFydGl0aW9ucyA9IHBhcnRpdGlvbl9pbmZvLAorCS5ucl9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShwYXJ0aXRpb25faW5mbyksCisJLnJkX2RseSA9IDMsCisJLndyX2RseSA9IDMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmNXh4X25hbmRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBORkNfQ1RMLAorCQkuZW5kID0gTkZDX0RBVEFfUkQgKyAyLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gQ0hfTkZDLAorCQkuZW5kID0gQ0hfTkZDLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmY1eHhfbmFuZF9kZXZpY2UgPSB7CisJLm5hbWUgPSAiYmY1eHgtbmFuZCIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoYmY1eHhfbmFuZF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IGJmNXh4X25hbmRfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmJmNXh4X25hbmRfcGxhdGZvcm0sCisJfSwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19kZXZpY2UgPSB7CisJLm5hbWUgPSAicnRjLWJmaW4iLAorCS5pZCAgID0gLTEsCit9OworI2VuZGlmCisKKworI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fTUFDKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX01BQ19NT0RVTEUpCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX21hY19kZXZpY2UgPSB7CisJLm5hbWUgPSAiYmZpbl9tYWMiLAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTVREX00yNVA4MCkgXAorCXx8IGRlZmluZWQoQ09ORklHX01URF9NMjVQODBfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGJmaW5fc3BpX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lID0gImJvb3Rsb2FkZXIoc3BpKSIsCisJCS5zaXplID0gMHgwMDA0MDAwMCwKKwkJLm9mZnNldCA9IDAsCisJCS5tYXNrX2ZsYWdzID0gTVREX0NBUF9ST00KKwl9LCB7CisJCS5uYW1lID0gImxpbnV4IGtlcm5lbChzcGkpIiwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBiZmluX3NwaV9mbGFzaF9kYXRhID0geworCS5uYW1lID0gIm0yNXA4MCIsCisJLnBhcnRzID0gYmZpbl9zcGlfZmxhc2hfcGFydGl0aW9ucywKKwkubnJfcGFydHMgPSBBUlJBWV9TSVpFKGJmaW5fc3BpX2ZsYXNoX3BhcnRpdGlvbnMpLAorCS50eXBlID0gIm0yNXAxNiIsCit9OworCisvKiBTUEkgZmxhc2ggY2hpcCAobTI1cDY0KSAqLworc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9mbGFzaF9jaGlwX2luZm8gPSB7CisJLmVuYWJsZV9kbWEgPSAwLCAgICAgICAgIC8qIHVzZSBkbWEgdHJhbnNmZXIgd2l0aCB0aGlzIGNoaXAqLworCS5iaXRzX3Blcl93b3JkID0gOCwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BRENfQkY1MzMpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TUElfQURDX0JGNTMzX01PRFVMRSkKKy8qIFNQSSBBREMgY2hpcCAqLworc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZGNfY2hpcF9pbmZvID0geworCS5lbmFibGVfZG1hID0gMSwgICAgICAgICAvKiB1c2UgZG1hIHRyYW5zZmVyIHdpdGggdGhpcyBjaGlwKi8KKwkuYml0c19wZXJfd29yZCA9IDE2LAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01NQykgfHwgZGVmaW5lZChDT05GSUdfU1BJX01NQ19NT0RVTEUpCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX21tY19jaGlwX2luZm8gPSB7CisJLmVuYWJsZV9kbWEgPSAxLAorCS5iaXRzX3Blcl93b3JkID0gOCwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1BCWCkKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfc2kzeHh4X2NoaXBfaW5mbyA9IHsKKwkuY3RsX3JlZwk9IDB4NCwgLyogc2VuZCB6ZXJvICovCisJLmVuYWJsZV9kbWEJPSAwLAorCS5iaXRzX3Blcl93b3JkCT0gOCwKKwkuY3NfY2hhbmdlX3Blcl93b3JkID0gMSwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NykgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3X01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfYWQ3ODc3X2NoaXBfaW5mbyA9IHsKKwkuZW5hYmxlX2RtYSA9IDAsCisJLmJpdHNfcGVyX3dvcmQgPSAxNiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWQ3ODc3X3BsYXRmb3JtX2RhdGEgYmZpbl9hZDc4NzdfdHNfaW5mbyA9IHsKKwkubW9kZWwJCQk9IDc4NzcsCisJLnZyZWZfZGVsYXlfdXNlY3MJPSA1MCwJLyogaW50ZXJuYWwsIG5vIGNhcGFjaXRvciAqLworCS54X3BsYXRlX29obXMJCT0gNDE5LAorCS55X3BsYXRlX29obXMJCT0gNDg2LAorCS5wcmVzc3VyZV9tYXgJCT0gMTAwMCwKKwkucHJlc3N1cmVfbWluCQk9IDAsCisJLnN0b3BhY3FfcG9sYXJpdHkgCT0gMSwKKwkuZmlyc3RfY29udmVyc2lvbl9kZWxheSA9IDMsCisJLmFjcXVpc2l0aW9uX3RpbWUgCT0gMSwKKwkuYXZlcmFnaW5nIAkJPSAxLAorCS5wZW5fZG93bl9hY2NfaW50ZXJ2YWwgCT0gMSwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NORF9TT0NfV004NzMxKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfU09DX1dNODczMV9NT0RVTEUpIFwKKwkgJiYgZGVmaW5lZChDT05GSUdfU05EX1NPQ19XTTg3MzFfU1BJKQorc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV93bTg3MzFfY2hpcF9pbmZvID0geworCS5lbmFibGVfZG1hID0gMCwKKwkuYml0c19wZXJfd29yZCA9IDE2LAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX1NQSURFVikgfHwgZGVmaW5lZChDT05GSUdfU1BJX1NQSURFVl9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpZGV2X2NoaXBfaW5mbyA9IHsKKwkuZW5hYmxlX2RtYSA9IDAsCisJLmJpdHNfcGVyX3dvcmQgPSA4LAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl9MUTAzNVExKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOX0xRMDM1UTFfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIGxxMDM1cTFfc3BpX2NoaXBfaW5mbyA9IHsKKwkuZW5hYmxlX2RtYSA9IDAsCisJLmJpdHNfcGVyX3dvcmQgPSA4LAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGJmaW5fc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworI2lmIGRlZmluZWQoQ09ORklHX01URF9NMjVQODApIFwKKwl8fCBkZWZpbmVkKENPTkZJR19NVERfTTI1UDgwX01PRFVMRSkKKwl7CisJCS8qIHRoZSBtb2RhbGlhcyBtdXN0IGJlIHRoZSBzYW1lIGFzIHNwaSBkZXZpY2UgZHJpdmVyIG5hbWUgKi8KKwkJLm1vZGFsaWFzID0gIm0yNXA4MCIsIC8qIE5hbWUgb2Ygc3BpX2RyaXZlciBmb3IgdGhpcyBkZXZpY2UgKi8KKwkJLm1heF9zcGVlZF9oeiA9IDI1MDAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLworCQkuYnVzX251bSA9IDAsIC8qIEZyYW1ld29yayBidXMgbnVtYmVyICovCisJCS5jaGlwX3NlbGVjdCA9IDEsIC8qIEZyYW1ld29yayBjaGlwIHNlbGVjdC4gT24gU1RBTVA1MzcgaXQgaXMgU1BJU1NFTDEqLworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX3NwaV9mbGFzaF9kYXRhLAorCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9mbGFzaF9jaGlwX2luZm8sCisJCS5tb2RlID0gU1BJX01PREVfMywKKwl9LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfQURDX0JGNTMzKSBcCisJfHwgZGVmaW5lZChDT05GSUdfU1BJX0FEQ19CRjUzM19NT0RVTEUpCisJeworCQkubW9kYWxpYXMgPSAiYmZpbl9zcGlfYWRjIiwgLyogTmFtZSBvZiBzcGlfZHJpdmVyIGZvciB0aGlzIGRldmljZSAqLworCQkubWF4X3NwZWVkX2h6ID0gNjI1MDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KKwkJLmJ1c19udW0gPSAwLCAvKiBGcmFtZXdvcmsgYnVzIG51bWJlciAqLworCQkuY2hpcF9zZWxlY3QgPSAxLCAvKiBGcmFtZXdvcmsgY2hpcCBzZWxlY3QuICovCisJCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwgLyogTm8gc3BpX2RyaXZlciBzcGVjaWZpYyBjb25maWcgKi8KKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfYWRjX2NoaXBfaW5mbywKKwl9LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKKwl7CisJCS5tb2RhbGlhcyA9ICJzcGlfbW1jX2R1bW15IiwKKwkJLm1heF9zcGVlZF9oeiA9IDI1MDAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLworCQkuYnVzX251bSA9IDAsCisJCS5jaGlwX3NlbGVjdCA9IDAsCisJCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfbW1jX2NoaXBfaW5mbywKKwkJLm1vZGUgPSBTUElfTU9ERV8zLAorCX0sCisJeworCQkubW9kYWxpYXMgPSAic3BpX21tYyIsCisJCS5tYXhfc3BlZWRfaHogPSAyNTAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KKwkJLmJ1c19udW0gPSAwLAorCQkuY2hpcF9zZWxlY3QgPSBDT05GSUdfU1BJX01NQ19DU19DSEFOLAorCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX21tY19jaGlwX2luZm8sCisJCS5tb2RlID0gU1BJX01PREVfMywKKwl9LAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfUEJYKQorCXsKKwkJLm1vZGFsaWFzID0gImZ4cy1zcGkiLAorCQkubWF4X3NwZWVkX2h6ID0gMTI1MDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCisJCS5idXNfbnVtID0gMCwKKwkJLmNoaXBfc2VsZWN0ID0gOCAtIENPTkZJR19KMTFfSlVNUEVSLAorCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9zaTN4eHhfY2hpcF9pbmZvLAorCQkubW9kZSA9IFNQSV9NT0RFXzMsCisJfSwKKwl7CisJCS5tb2RhbGlhcyA9ICJmeG8tc3BpIiwKKwkJLm1heF9zcGVlZF9oeiA9IDEyNTAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLworCQkuYnVzX251bSA9IDAsCisJCS5jaGlwX3NlbGVjdCA9IDggLSBDT05GSUdfSjE5X0pVTVBFUiwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfc2kzeHh4X2NoaXBfaW5mbywKKwkJLm1vZGUgPSBTUElfTU9ERV8zLAorCX0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3N19NT0RVTEUpCisJeworCQkubW9kYWxpYXMJCT0gImFkNzg3NyIsCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZiZmluX2FkNzg3N190c19pbmZvLAorCQkuaXJxCQkJPSBJUlFfUEY4LAorCQkubWF4X3NwZWVkX2h6CT0gMTI1MDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCisJCS5idXNfbnVtCT0gMCwKKwkJLmNoaXBfc2VsZWN0ICA9IDIsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX2FkNzg3N19jaGlwX2luZm8sCisJfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NORF9TT0NfV004NzMxKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfU09DX1dNODczMV9NT0RVTEUpIFwKKwkgJiYgZGVmaW5lZChDT05GSUdfU05EX1NPQ19XTTg3MzFfU1BJKQorCXsKKwkJLm1vZGFsaWFzCT0gIndtODczMSIsCisJCS5tYXhfc3BlZWRfaHoJPSAzMTI1MDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLworCQkuYnVzX251bQk9IDAsCisJCS5jaGlwX3NlbGVjdCAgICA9IDUsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX3dtODczMV9jaGlwX2luZm8sCisJCS5tb2RlID0gU1BJX01PREVfMCwKKwl9LAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX1NQSURFVikgfHwgZGVmaW5lZChDT05GSUdfU1BJX1NQSURFVl9NT0RVTEUpCisJeworCQkubW9kYWxpYXMgPSAic3BpZGV2IiwKKwkJLm1heF9zcGVlZF9oeiA9IDMxMjUwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCisJCS5idXNfbnVtID0gMCwKKwkJLmNoaXBfc2VsZWN0ID0gMSwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlkZXZfY2hpcF9pbmZvLAorCX0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOX0xRMDM1UTEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMV9NT0RVTEUpCisJeworCQkubW9kYWxpYXMgPSAiYmZpbi1scTAzNXExLXNwaSIsCisJCS5tYXhfc3BlZWRfaHogPSAyMDAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KKwkJLmJ1c19udW0gPSAwLAorCQkuY2hpcF9zZWxlY3QgPSAxLAorCQkuY29udHJvbGxlcl9kYXRhID0gJmxxMDM1cTFfc3BpX2NoaXBfaW5mbywKKwkJLm1vZGUgPSBTUElfQ1BIQSB8IFNQSV9DUE9MLAorCX0sCisjZW5kaWYKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU1BJX0JGSU5fTU9EVUxFKQorLyogU1BJIGNvbnRyb2xsZXIgZGF0YSAqLworc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9tYXN0ZXIgYmZpbl9zcGkwX2luZm8gPSB7CisJLm51bV9jaGlwc2VsZWN0ID0gOCwKKwkuZW5hYmxlX2RtYSA9IDEsICAvKiBtYXN0ZXIgaGFzIHRoZSBhYmlsaXR5IHRvIGRvIGRtYSB0cmFuc2ZlciAqLworCS5waW5fcmVxID0ge1BfU1BJMF9TQ0ssIFBfU1BJMF9NSVNPLCBQX1NQSTBfTU9TSSwgMH0sCit9OworCisvKiBTUEkgKDApICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fc3BpMF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gU1BJMF9SRUdCQVNFLAorCQkuZW5kICAgPSBTUEkwX1JFR0JBU0UgKyAweEZGLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IENIX1NQSSwKKwkJLmVuZCAgID0gQ0hfU1BJLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zcGkwX2RldmljZSA9IHsKKwkubmFtZSA9ICJiZmluLXNwaSIsCisJLmlkID0gMCwgLyogQnVzIG51bWJlciAqLworCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZmluX3NwaTBfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSA9IGJmaW5fc3BpMF9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX3NwaTBfaW5mbywgLyogUGFzc2VkIHRvIGRyaXZlciAqLworCX0sCit9OworI2VuZGlmICAvKiBzcGkgbWFzdGVyIGFuZCBkZXZpY2VzICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3VhcnRfcmVzb3VyY2VzW10gPSB7CisjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX1VBUlQwCisJeworCQkuc3RhcnQgPSAweEZGQzAwNDAwLAorCQkuZW5kID0gMHhGRkMwMDRGRiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9VQVJUMQorCXsKKwkJLnN0YXJ0ID0gMHhGRkMwMjAwMCwKKwkJLmVuZCA9IDB4RkZDMDIwRkYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fdWFydF9kZXZpY2UgPSB7CisJLm5hbWUgPSAiYmZpbi11YXJ0IiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZmluX3VhcnRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBiZmluX3VhcnRfcmVzb3VyY2VzLAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9TSVIpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fU0lSX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9zaXJfcmVzb3VyY2VzW10gPSB7CisjaWZkZWYgQ09ORklHX0JGSU5fU0lSMAorCXsKKwkJLnN0YXJ0ID0gMHhGRkMwMDQwMCwKKwkJLmVuZCA9IDB4RkZDMDA0RkYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQkZJTl9TSVIxCisJeworCQkuc3RhcnQgPSAweEZGQzAyMDAwLAorCQkuZW5kID0gMHhGRkMwMjBGRiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9zaXJfZGV2aWNlID0geworCS5uYW1lID0gImJmaW5fc2lyIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZmluX3Npcl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IGJmaW5fc2lyX3Jlc291cmNlcywKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0kpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0lfTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3R3aTBfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFRXSTBfUkVHQkFTRSwKKwkJLmVuZCAgID0gVFdJMF9SRUdCQVNFLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1RXSSwKKwkJLmVuZCAgID0gSVJRX1RXSSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGkyY19iZmluX3R3aV9kZXZpY2UgPSB7CisJLm5hbWUgPSAiaTJjLWJmaW4tdHdpIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZmluX3R3aTBfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSA9IGJmaW5fdHdpMF9yZXNvdXJjZSwKK307CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JMkNfQk9BUkRJTkZPCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgYmZpbl9pMmNfYm9hcmRfaW5mb1tdID0geworI2lmIGRlZmluZWQoQ09ORklHX1RXSV9MQ0QpIHx8IGRlZmluZWQoQ09ORklHX1RXSV9MQ0RfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NzRfbGNkIiwgMHgyMiksCisJfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1RXSV9LRVlQQUQpIHx8IGRlZmluZWQoQ09ORklHX1RXSV9LRVlQQURfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NzRfa2V5cGFkIiwgMHgyNyksCisJCS5pcnEgPSBJUlFfUEY4LAorCX0sCisjZW5kaWYKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MF91YXJ0X2RldmljZSA9IHsKKwkubmFtZSA9ICJiZmluLXNwb3J0LXVhcnQiLAorCS5pZCA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Nwb3J0MV91YXJ0X2RldmljZSA9IHsKKwkubmFtZSA9ICJiZmluLXNwb3J0LXVhcnQiLAorCS5pZCA9IDEsCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gYmZpbl9ncGlvX2tleXNfdGFibGVbXSA9IHsKKwl7QlROXzAsIEdQSU9fUEcwLCAxLCAiZ3Bpby1rZXlzOiBCVE4wIn0sCisJe0JUTl8xLCBHUElPX1BHMTMsIDEsICJncGlvLWtleXM6IEJUTjEifSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgYmZpbl9ncGlvX2tleXNfZGF0YSA9IHsKKwkuYnV0dG9ucyAgICAgICAgPSBiZmluX2dwaW9fa2V5c190YWJsZSwKKwkubmJ1dHRvbnMgICAgICAgPSBBUlJBWV9TSVpFKGJmaW5fZ3Bpb19rZXlzX3RhYmxlKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZGV2aWNlX2dwaW9rZXlzID0geworCS5uYW1lICAgICAgPSAiZ3Bpby1rZXlzIiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX2dwaW9fa2V5c19kYXRhLAorCX0sCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7CisJLnN0YXJ0ID0gMCwKKwkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7CisJLm5hbWUgPSAic2ltcGxlLWdwaW8iLAorCS5pZCA9IC0xLAorCS5udW1fcmVzb3VyY2VzID0gMSwKKwkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNjbGtfdmxldl9kYXRhc2hlZXRbXSA9Cit7CisJVlJQQUlSKFZMRVZfMTAwLCA0MDAwMDAwMDApLAorCVZSUEFJUihWTEVWXzEwNSwgNDI2MDAwMDAwKSwKKwlWUlBBSVIoVkxFVl8xMTAsIDUwMDAwMDAwMCksCisJVlJQQUlSKFZMRVZfMTE1LCA1MzMwMDAwMDApLAorCVZSUEFJUihWTEVWXzEyMCwgNjAwMDAwMDAwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmZpbl9kcG1jX3BsYXRmb3JtX2RhdGEgYmZpbl9kbXBjX3ZyZWdfZGF0YSA9IHsKKwkudHVwbGVfdGFiID0gY2Nsa192bGV2X2RhdGFzaGVldCwKKwkudGFic2l6ZSA9IEFSUkFZX1NJWkUoY2Nsa192bGV2X2RhdGFzaGVldCksCisJLnZyX3NldHRsaW5nX3RpbWUgPSAyNSAvKiB1cyAqLywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZHBtYyA9IHsKKwkubmFtZSA9ICJiZmluIGRwbWMiLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmJmaW5fZG1wY192cmVnX2RhdGEsCisJfSwKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOX0xRMDM1UTEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMV9NT0RVTEUpCisjaW5jbHVkZSA8YXNtL2JmaW4tbHEwMzVxMS5oPgorCitzdGF0aWMgc3RydWN0IGJmaW5fbHEwMzVxMWZiX2Rpc3BfaW5mbyBiZmluX2xxMDM1cTFfZGF0YSA9IHsKKwkubW9kZSA9IAlMUTAzNV9OT1JNIHwgTFEwMzVfUkdCIHwgTFEwMzVfUkwgfCBMUTAzNV9UQiwKKwkudXNlX2JsID0gCTEsCisJLmdwaW9fYmwgPQlHUElPX1BHMTIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fbHEwMzVxMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IElSUV9QUElfRVJST1IsCisJCS5lbmQgPSBJUlFfUFBJX0VSUk9SLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9scTAzNXExX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYmZpbi1scTAzNXExIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMgCT0gQVJSQVlfU0laRShiZmluX2xxMDM1cTFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgCT0gYmZpbl9scTAzNXExX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYmZpbl9scTAzNXExX2RhdGEsCisJfSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnN0YW1wX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCisJJmJmaW5fZHBtYywKKworI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0JGNVhYKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9CRjVYWF9NT0RVTEUpCisJJmJmNXh4X25hbmRfZGV2aWNlLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTl9NT0RVTEUpCisJJnJ0Y19kZXZpY2UsCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hEUkMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hEUkNfTU9EVUxFKQorCSZtdXNiX2RldmljZSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9NQUMpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTUFDX01PRFVMRSkKKwkmYmZpbl9tYWNfZGV2aWNlLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU1BJX0JGSU5fTU9EVUxFKQorCSZiZmluX3NwaTBfZGV2aWNlLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQorCSZiZmluX3VhcnRfZGV2aWNlLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOX0xRMDM1UTEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMV9NT0RVTEUpCisJJmJmaW5fbHEwMzVxMV9kZXZpY2UsCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fU0lSKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX1NJUl9NT0RVTEUpCisJJmJmaW5fc2lyX2RldmljZSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDX0JMQUNLRklOX1RXSSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0JMQUNLRklOX1RXSV9NT0RVTEUpCisJJmkyY19iZmluX3R3aV9kZXZpY2UsCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVF9NT0RVTEUpCisJJmJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlLAorCSZiZmluX3Nwb3J0MV91YXJ0X2RldmljZSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCisJJmJmaW5fZGV2aWNlX2dwaW9rZXlzLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQorCSZlemJyZF9mbGFzaF9kZXZpY2UsCisjZW5kaWYKKworCSZiZmluX2dwaW9zX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN0YW1wX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlcygpOiByZWdpc3RlcmluZyBkZXZpY2UgcmVzb3VyY2VzXG4iLCBfX2Z1bmNfXyk7CisKKyNpZmRlZiBDT05GSUdfSTJDX0JPQVJESU5GTworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGJmaW5faTJjX2JvYXJkX2luZm8sCisJCQkJQVJSQVlfU0laRShiZmluX2kyY19ib2FyZF9pbmZvKSk7CisjZW5kaWYKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHN0YW1wX2RldmljZXMsIEFSUkFZX1NJWkUoc3RhbXBfZGV2aWNlcykpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGJmaW5fc3BpX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoYmZpbl9zcGlfYm9hcmRfaW5mbykpOworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKHN0YW1wX2luaXQpOworCit2b2lkIG5hdGl2ZV9tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY21kKQoreworCS8qIHdvcmthcm91bmQgcmVib290IGhhbmcgd2hlbiBib290aW5nIGZyb20gU1BJICovCisJaWYgKChiZmluX3JlYWRfU1lTQ1IoKSAmIDB4NykgPT0gMHgzKQorCQliZmluX2dwaW9fcmVzZXRfc3BpMF9zc2VsMSgpOworfQorCit2b2lkIGJmaW5fZ2V0X2V0aGVyX2FkZHIoY2hhciAqYWRkcikKK3sKKwkvKiB0aGUgTUFDIGlzIHN0b3JlZCBpbiBPVFAgbWVtb3J5IHBhZ2UgMHhERiAqLworCXUzMiByZXQ7CisJdTY0IG90cF9tYWM7CisJdTMyICgqb3RwX3JlYWQpKHUzMiBwYWdlLCB1MzIgZmxhZ3MsIHU2NCAqcGFnZV9jb250ZW50KSA9ICh2b2lkICopMHhFRjAwMDAxQTsKKworCXJldCA9IG90cF9yZWFkKDB4REYsIDB4MDAsICZvdHBfbWFjKTsKKwlpZiAoIShyZXQgJiAweDEpKSB7CisJCWNoYXIgKm90cF9tYWNfcCA9IChjaGFyICopJm90cF9tYWM7CisJCWZvciAocmV0ID0gMDsgcmV0IDwgNjsgKytyZXQpCisJCQlhZGRyW3JldF0gPSBvdHBfbWFjX3BbNSAtIHJldF07CisJfQorfQorRVhQT1JUX1NZTUJPTChiZmluX2dldF9ldGhlcl9hZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwppbmRleCA3NjJmNzU0Li44ZWUyYjc0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemtpdC5jCkBAIC00MiwxMCArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zbDgxMS5oPgotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hEUkMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hEUkNfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3VzYi9tdXNiLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxhc20vY3BsYi5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vYmZpbjV4eF9zcGkuaD4KICNpbmNsdWRlIDxhc20vcmVib290Lmg+CkBAIC0xMjksNiArMTI2LDE2IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZyBtdXNiX2NvbmZpZyA9IHsKKwkubXVsdGlwb2ludAk9IDAsCisJLmR5bl9maWZvCT0gMCwKKwkuc29mdF9jb24JPSAxLAorCS5kbWEJCT0gMSwKKwkubnVtX2Vwcwk9IDcsCisJLmRtYV9jaGFubmVscwk9IDcsCisJLmdwaW9fdnJzZWwJPSBHUElPX1BHMTMsCit9OworCiBzdGF0aWMgc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhIG11c2JfcGxhdCA9IHsKICNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9PVEcpCiAJLm1vZGUJCT0gTVVTQl9PVEcsCkBAIC0xMzcsNyArMTQ0LDcgQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDKQogCS5tb2RlCQk9IE1VU0JfUEVSSVBIRVJBTCwKICNlbmRpZgotCS5tdWx0aXBvaW50CT0gMCwKKwkuY29uZmlnCQk9ICZtdXNiX2NvbmZpZywKIH07CiAKIHN0YXRpYyB1NjQgbXVzYl9kbWFtYXNrID0gfih1MzIpMDsKQEAgLTIxOCw3ICsyMjUsNyBAQAogCXsKIAkJLm5hbWUgPSAibGludXgga2VybmVsKG5hbmQpIiwKIAkJLm9mZnNldCA9IDAsCi0JCS5zaXplID0gNCAqIFNJWkVfMU0sCisJCS5zaXplID0gNCAqIDEwMjQgKiAxMDI0LAogCX0sCiAJewogCQkubmFtZSA9ICJmaWxlIHN5c3RlbShuYW5kKSIsCkBAIC04NDYsNiArODUzLDM4IEBACiB9OwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19KT1lTVElDS19CRklOX1JPVEFSWSkgfHwgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfQkZJTl9ST1RBUllfTU9EVUxFKQorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8YXNtL2JmaW5fcm90YXJ5Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgYmZpbl9yb3RhcnlfcGxhdGZvcm1fZGF0YSBiZmluX3JvdGFyeV9kYXRhID0geworCS8qLnJvdGFyeV91cF9rZXkgICAgID0gS0VZX1VQLCovCisJLyoucm90YXJ5X2Rvd25fa2V5ICAgPSBLRVlfRE9XTiwqLworCS5yb3RhcnlfcmVsX2NvZGUgICA9IFJFTF9XSEVFTCwKKwkucm90YXJ5X2J1dHRvbl9rZXkgPSBLRVlfRU5URVIsCisJLmRlYm91bmNlCSAgID0gMTAsCS8qIDAuLjE3ICovCisJLm1vZGUJCSAgID0gUk9UX1FVQURfRU5DIHwgUk9UX0RFQkUsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fcm90YXJ5X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gSVJRX0NOVCwKKwkJLmVuZCA9IElSUV9DTlQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3JvdGFyeV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImJmaW4tcm90YXJ5IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMgCT0gQVJSQVlfU0laRShiZmluX3JvdGFyeV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAJPSBiZmluX3JvdGFyeV9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmJmaW5fcm90YXJ5X2RhdGEsCisJfSwKK307CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKIAkuc3RhcnQgPSAwLAogCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCkBAIC05NjIsNiArMTAwMSwxMCBAQAogCSZiZmluX2RldmljZV9ncGlva2V5cywKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfQkZJTl9ST1RBUlkpIHx8IGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX0JGSU5fUk9UQVJZX01PRFVMRSkKKwkmYmZpbl9yb3RhcnlfZGV2aWNlLAorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZlemtpdF9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9oZWFkLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaGVhZC5TCmluZGV4IDI4YzQ4NjEuLjBlYjFkYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9oZWFkLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2hlYWQuUwpAQCAtODcsNiArODcsOSBAQAogCXIxID0gUExMX0JZUEFTUzsgICAgICAgICAgICAgICAgIC8qIEJ5cGFzcyB0aGUgUExMPyAgICAgICAgICAgICAgICAgKi8KIAlyMSA9IHIxIDw8IDg7ICAgICAgICAgICAgICAgICAgICAvKiBTaGlmdCBpdCBvdmVyICAgICAgICAgICAgICAgICAgICovCiAJcjAgPSByMSB8IHIwOyAgICAgICAgICAgICAgICAgICAgLyogYWRkIHRoZW0gYWxsIHRvZ2V0aGVyICAgICAgICAgICAqLworI2lmZGVmIEFOT01BTFlfMDUwMDAyNjUKKwlCSVRTRVQocjAsIDE1KTsgICAgICAgICAgICAgICAgICAvKiBBZGQgMjUwIG1WIG9mIGh5c3RlcmVzaXMgdG8gU1BPUlQgaW5wdXQgcGlucyAqLworI2VuZGlmCiAKIAlwMC5oID0gaGkoUExMX0NUTCk7CiAJcDAubCA9IGxvKFBMTF9DVEwpOyAgICAgICAgICAgICAgLyogTG9hZCB0aGUgYWRkcmVzcyAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAppbmRleCBiN2IxNjZmLi42MjM3M2U2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaApAQCAtNywxMiArNywyNCBAQAogICovCiAKIC8qIFRoaXMgZmlsZSBzaG91bGUgYmUgdXAgdG8gZGF0ZSB3aXRoOgotICogIC0gUmV2aXNpb24gQywgMDEvMjUvMjAwODsgQURTUC1CRjUyNyBCbGFja2ZpbiBQcm9jZXNzb3IgQW5vbWFseSBMaXN0CisgKiAgLSBSZXZpc2lvbiBCLCAwOC8xMi8yMDA4OyBBRFNQLUJGNTI2IEJsYWNrZmluIFByb2Nlc3NvciBBbm9tYWx5IExpc3QKKyAqICAtIFJldmlzaW9uIEUsIDA4LzE4LzIwMDg7IEFEU1AtQkY1MjcgQmxhY2tmaW4gUHJvY2Vzc29yIEFub21hbHkgTGlzdAogICovCiAKICNpZm5kZWYgX01BQ0hfQU5PTUFMWV9IXwogI2RlZmluZSBfTUFDSF9BTk9NQUxZX0hfCiAKKyNpZiBkZWZpbmVkKF9fQURTUEJGNTIyX18pIHx8IGRlZmluZWQoX19BRFNQQkY1MjRfXykgfHwgZGVmaW5lZChfX0FEU1BCRjUyNl9fKQorIyBkZWZpbmUgQU5PTUFMWV9CRjUyNiAxCisjZWxzZQorIyBkZWZpbmUgQU5PTUFMWV9CRjUyNiAwCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQURTUEJGNTIzX18pIHx8IGRlZmluZWQoX19BRFNQQkY1MjVfXykgfHwgZGVmaW5lZChfX0FEU1BCRjUyN19fKQorIyBkZWZpbmUgQU5PTUFMWV9CRjUyNyAxCisjZWxzZQorIyBkZWZpbmUgQU5PTUFMWV9CRjUyNyAwCisjZW5kaWYKKwogLyogTXVsdGktSXNzdWUgSW5zdHJ1Y3Rpb24gd2l0aCBkc3AzMnNoaWZ0aW1tIGluIHNsb3QxIGFuZCBQLXJlZyBTdG9yZSBpbiBzbG90MiBOb3QgU3VwcG9ydGVkICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAwNzQgKDEpCiAvKiBETUFfUlVOIEJpdCBJcyBOb3QgVmFsaWQgYWZ0ZXIgYSBQZXJpcGhlcmFsIFJlY2VpdmUgQ2hhbm5lbCBETUEgU3RvcHMgKi8KQEAgLTIzLDY4ICszNSwxMjQgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI0NSAoMSkKIC8qIFNlbnNpdGl2aXR5IFRvIE5vaXNlIHdpdGggU2xvdyBJbnB1dCBFZGdlIFJhdGVzIG9uIEV4dGVybmFsIFNQT1JUIFRYIGFuZCBSWCBDbG9ja3MgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2NSAoMSkKLS8qIE5ldyBGZWF0dXJlOiBFTUFDIFRYIERNQSBXb3JkIEFsaWdubWVudCAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMjg1ICgxKQorLyogRmFsc2UgSGFyZHdhcmUgRXJyb3JzIENhdXNlZCBieSBGZXRjaGVzIGF0IHRoZSBCb3VuZGFyeSBvZiBSZXNlcnZlZCBNZW1vcnkgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMCAoMSkKIC8qIEVycm9ycyB3aGVuIFNTWU5DLCBDU1lOQywgb3IgTG9hZHMgdG8gTFQsIExCIGFuZCBMQyBSZWdpc3RlcnMgQXJlIEludGVycnVwdGVkICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzMTIgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzMTIgKEFOT01BTFlfQkY1MjcpCisvKiBQUEkgSXMgTGV2ZWwtU2Vuc2l0aXZlIG9uIEZpcnN0IFRyYW5zZmVyIEluIFNpbmdsZSBGcmFtZSBTeW5jIE1vZGVzICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzMTMgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKIC8qIEluY29ycmVjdCBBY2Nlc3Mgb2YgT1RQX1NUQVRVUyBEdXJpbmcgb3RwX3dyaXRlKCkgRnVuY3Rpb24gKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDMyOCAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDMyOCAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCiAvKiBEaXNhbGxvd2VkIENvbmZpZ3VyYXRpb24gUHJldmVudHMgU3Vic2VxdWVudCBBbGxvd2VkIENvbmZpZ3VyYXRpb24gb24gSG9zdCBETUEgUG9ydCAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzM3ICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzM3IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKIC8qIEV0aGVybmV0IE1BQyBNRElPIFJlYWRzIERvIE5vdCBNZWV0IElFRUUgU3BlY2lmaWNhdGlvbiAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzQxICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzQxIChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKIC8qIFRXSSBNYXkgTm90IE9wZXJhdGUgQ29ycmVjdGx5IFVuZGVyIENlcnRhaW4gU2lnbmFsIFRlcm1pbmF0aW9uIENvbmRpdGlvbnMgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM0MiAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM0MiAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCiAvKiBVU0IgQ2FsaWJyYXRpb24gVmFsdWUgSXMgTm90IEluaXRpYWxpemVkICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzNDYgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNDYgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogVVNCIENhbGlicmF0aW9uIFZhbHVlIHRvIHVzZSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzQ2X3ZhbHVlIDB4RTUxMAogLyogUHJlYm9vdCBSb3V0aW5lIEluY29ycmVjdGx5IEFsdGVycyBSZXNldCBWYWx1ZSBvZiBVU0IgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM0NyAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM0NyAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCiAvKiBTZWN1cml0eSBGZWF0dXJlcyBBcmUgTm90IEZ1bmN0aW9uYWwgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM0OCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzQ4IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKKy8qIGJmcm9tX1N5c0NvbnRyb2woKSBGaXJtd2FyZSBGdW5jdGlvbiBQZXJmb3JtcyBJbXByb3BlciBTeXN0ZW0gUmVzZXQgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1MyAoQU5PTUFMWV9CRjUyNikKIC8qIFJlZ3VsYXRvciBQcm9ncmFtbWluZyBCbG9ja2VkIHdoZW4gSGliZXJuYXRlIFdha2V1cCBTb3VyY2UgUmVtYWlucyBBY3RpdmUgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1NSAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1NSAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCiAvKiBTZXJpYWwgUG9ydCAoU1BPUlQpIE11bHRpY2hhbm5lbCBUcmFuc21pdCBGYWlsdXJlIHdoZW4gQ2hhbm5lbCAwIElzIERpc2FibGVkICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzNTcgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNTcgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQogLyogSW5jb3JyZWN0IFJldmlzaW9uIE51bWJlciBpbiBEU1BJRCBSZWdpc3RlciAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzY0IChfX1NJTElDT05fUkVWSVNJT05fXyA+IDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNjQgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPT0gMSkKIC8qIFBQSSBVbmRlcmZsb3cgRXJyb3IgR29lcyBVbmRldGVjdGVkIGluIElUVS1SIDY1NiBNb2RlICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNjYgKDEpCi0vKiBOZXcgRmVhdHVyZTogSGlnaGVyIERlZmF1bHQgQ0NMSyBSYXRlICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzNjggKDEpCisvKiBJbmNvcnJlY3QgRGVmYXVsdCBDU0VMIFZhbHVlIGluIFBMTF9ESVYgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM2OCAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCiAvKiBQb3NzaWJsZSBSRVRTIFJlZ2lzdGVyIENvcnJ1cHRpb24gd2hlbiBTdWJyb3V0aW5lIElzIHVuZGVyIDUgQ3ljbGVzIGluIER1cmF0aW9uICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzNzEgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNzEgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQogLyogQXV0aGVudGljYXRpb24gRmFpbHMgVG8gSW5pdGlhdGUgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM3NiAoX19TSUxJQ09OX1JFVklTSU9OX18gPiAwKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzc2IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKIC8qIERhdGEgUmVhZCBGcm9tIEwzIE1lbW9yeSBieSBVU0IgRE1BIE1heSBiZSBDb3JydXB0ZWQgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4MCAoMSkKLS8qIFVTQiBGdWxsLXNwZWVkIE1vZGUgbm90IEZ1bGx5IFRlc3RlZCAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzgxICgxKQotLyogTmV3IEZlYXR1cmU6IEJvb3QgZnJvbSBPVFAgTWVtb3J5ICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzODUgKDEpCi0vKiBOZXcgRmVhdHVyZTogYmZyb21fU3lzQ29udHJvbCgpIFJvdXRpbmUgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4NiAoMSkKLS8qIE5ldyBGZWF0dXJlOiBQcm9ncmFtbWFibGUgUHJlYm9vdCBTZXR0aW5ncyAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzg3ICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzgwIChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIDgtQml0IE5BTkQgRmxhc2ggQm9vdCBNb2RlIE5vdCBGdW5jdGlvbmFsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODIgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIEhvc3QgTXVzdCBOb3QgUmVhZCBCYWNrIER1cmluZyBIb3N0IERNQSBCb290ICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODQgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogQm9vdCBmcm9tIE9UUCBNZW1vcnkgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4NSAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBiZnJvbV9TeXNDb250cm9sKCkgRmlybXdhcmUgUm91dGluZSBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzg2IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIFByb2dyYW1tYWJsZSBQcmVib290IFNldHRpbmdzIE5vdCBGdW5jdGlvbmFsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODcgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogQ1JDMzIgQ2hlY2tzdW0gU3VwcG9ydCBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzg4IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCiAvKiBSZXNldCBWZWN0b3IgTXVzdCBOb3QgQmUgaW4gU0RSQU0gTWVtb3J5IFNwYWNlICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzODkgKDEpCi0vKiBOZXcgRmVhdHVyZTogcFRlbXBDdXJyZW50IEFkZGVkIHRvIEFESV9CT09UX0RBVEEgU3RydWN0dXJlICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzOTIgKDEpCi0vKiBOZXcgRmVhdHVyZTogZFRlbXBCeXRlQ291bnQgVmFsdWUgSW5jcmVhc2VkIGluIEFESV9CT09UX0RBVEEgU3RydWN0dXJlICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzOTMgKDEpCi0vKiBOZXcgRmVhdHVyZTogTG9nIEJ1ZmZlciBGdW5jdGlvbmFsaXR5ICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzOTQgKDEpCi0vKiBOZXcgRmVhdHVyZTogSG9vayBSb3V0aW5lIEZ1bmN0aW9uYWxpdHkgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5NSAoMSkKLS8qIE5ldyBGZWF0dXJlOiBIZWFkZXIgSW5kaXJlY3QgQml0ICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzOTYgKDEpCi0vKiBOZXcgRmVhdHVyZTogQktfT05FUywgQktfWkVST1MsIGFuZCBCS19EQVRFQ09ERSBDb25zdGFudHMgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5NyAoMSkKLS8qIE5ldyBGZWF0dXJlOiBTV1JFU0VULCBERlJFU0VUIGFuZCBXRFJFU0VUIEJpdHMgQWRkZWQgdG8gU1lTQ1IgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5OCAoMSkKLS8qIE5ldyBGZWF0dXJlOiBCQ09ERV9OT0JPT1QgQWRkZWQgdG8gQkNPREUgRmllbGQgb2YgU1lTQ1IgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5OSAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4OSAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBwVGVtcEN1cnJlbnQgTm90IFByZXNlbnQgaW4gQURJX0JPT1RfREFUQSBTdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5MiAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBEZXByZWNhdGVkIFZhbHVlIG9mIGRUZW1wQnl0ZUNvdW50IGluIEFESV9CT09UX0RBVEEgU3RydWN0dXJlICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzOTMgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogTG9nIEJ1ZmZlciBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzk0IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIEhvb2sgUm91dGluZSBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzk1IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIEhlYWRlciBJbmRpcmVjdCBCaXQgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5NiAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBCS19PTkVTLCBCS19aRVJPUywgYW5kIEJLX0RBVEVDT0RFIENvbnN0YW50cyBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzk3IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIFNXUkVTRVQsIERGUkVTRVQgYW5kIFdEUkVTRVQgQml0cyBpbiB0aGUgU1lTQ1IgUmVnaXN0ZXIgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5OCAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBCQ09ERV9OT0JPT1QgaW4gQkNPREUgRmllbGQgb2YgU1lTQ1IgUmVnaXN0ZXIgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5OSAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCiAvKiBQUEkgRGF0YSBTaWduYWxzIEQwIGFuZCBEOCBkbyBub3QgVHJpc3RhdGUgQWZ0ZXIgRGlzYWJsaW5nIFBQSSAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwNDAxICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwNDAxIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBMZXZlbC1TZW5zaXRpdmUgRXh0ZXJuYWwgR1BJTyBXYWtldXBzIE1heSBDYXVzZSBJbmRlZmluaXRlIFN0YWxsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MDMgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIExvY2tib3ggU0VTUiBEaXNhbGxvd3MgQ2VydGFpbiBVc2VyIEludGVycnVwdHMgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQwNCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogTG9ja2JveCBTRVNSIEZpcm13YXJlIERvZXMgTm90IFNhdmUvUmVzdG9yZSBGdWxsIENvbnRleHQgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQwNSAoMSkKKy8qIExvY2tib3ggU0VTUiBGaXJtd2FyZSBBcmd1bWVudHMgQXJlIE5vdCBSZXRhaW5lZCBBZnRlciBGaXJzdCBJbml0aWFsaXphdGlvbiAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDA3IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBMb2NrYm94IEZpcm13YXJlIE1lbW9yeSBDbGVhbnVwIFJvdXRpbmUgRG9lcyBub3QgQ2xlYXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MDggKDEpCisvKiBMb2NrYm94IGZpcm13YXJlIGxlYXZlcyBNRE1BMCBjaGFubmVsIGVuYWJsZWQgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQwOSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogSW5jb3JyZWN0IERlZmF1bHQgSW50ZXJuYWwgVm9sdGFnZSBSZWd1bGF0b3IgU2V0dGluZyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDEwIChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIGJmcm9tX1N5c0NvbnRyb2woKSBGaXJtd2FyZSBGdW5jdGlvbiBDYW5ub3QgYmUgVXNlZCB0byBFbnRlciBQb3dlciBTYXZpbmcgTW9kZXMgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQxMSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogT1RQX0NIRUNLX0ZPUl9QUkVWX1dSSVRFIEJpdCBpcyBOb3QgRnVuY3Rpb25hbCBpbiBiZnJvbV9PdHBXcml0ZSgpIEFQSSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDE0IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBERUIyX1VSR0VOVCBCaXQgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQxNSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogU3BlY3VsYXRpdmUgRmV0Y2hlcyBDYW4gQ2F1c2UgVW5kZXNpcmVkIEV4dGVybmFsIEZJRk8gT3BlcmF0aW9ucyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDE2ICgxKQorLyogU1BPUlQwIElnbm9yZXMgRXh0ZXJuYWwgVFNDTEswIG9uIFBHMTQgV2hlbiBUTVI2IGlzIGFuIE91dHB1dCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDE3IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIHRTRlNQRSBhbmQgdEhGU1BFIERvIE5vdCBNZWV0IERhdGEgU2hlZXQgU3BlY2lmaWNhdGlvbnMgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQxOCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogVVNCIFBMTF9TVEFCTEUgQml0IE1heSBOb3QgQWNjdXJhdGVseSBSZWZsZWN0IHRoZSBVU0IgUExMJ3MgU3RhdHVzICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MjAgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIFRXSSBGYWxsIFRpbWUgKFRvZikgTWF5IFZpb2xhdGUgdGhlIE1pbmltdW0gSTJDIFNwZWNpZmljYXRpb24gKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQyMSAoMSkKKy8qIFRXSSBJbnB1dCBDYXBhY2l0YW5jZSAoQ2kpIE1heSBWaW9sYXRlIHRoZSBNYXhpbXVtIEkyQyBTcGVjaWZpY2F0aW9uICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MjIgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPiAxKQorLyogQ2VydGFpbiBFdGhlcm5ldCBGcmFtZXMgV2l0aCBFcnJvcnMgYXJlIE1pc2NsYXNzaWZpZWQgaW4gUk1JSSBNb2RlICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MjMgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIEludGVybmFsIFZvbHRhZ2UgUmVndWxhdG9yIE5vdCBUcmltbWVkICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MjQgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogTXVsdGljaGFubmVsIFNQT1JUIENoYW5uZWwgTWlzYWxpZ25tZW50IFVuZGVyIFNwZWNpZmljIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQyNSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogU3BlY3VsYXRpdmUgRmV0Y2hlcyBvZiBJbmRpcmVjdC1Qb2ludGVyIEluc3RydWN0aW9ucyBDYW4gQ2F1c2UgU3B1cmlvdXMgSGFyZHdhcmUgRXJyb3JzICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MjYgKDEpCisvKiBXQl9FREdFIEJpdCBpbiBORkNfSVJRU1RBVCBJbmNvcnJlY3RseSBSZWZsZWN0cyBCdWZmZXIgU3RhdHVzIEluc3RlYWQgb2YgSVJRIFN0YXR1cyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDI5IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBTb2Z0d2FyZSBTeXN0ZW0gUmVzZXQgQ29ycnVwdHMgUExMX0xPQ0tDTlQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQzMCAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA+IDEpCisvKiBiZnJvbV9TeXNDb250cm9sKCkgRG9lcyBOb3QgQ2xlYXIgU0lDX0lXUjEgQmVmb3JlIEV4ZWN1dGluZyBQTEwgUHJvZ3JhbW1pbmcgU2VxdWVuY2UgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQzMiAoQU5PTUFMWV9CRjUyNikKIAogLyogQW5vbWFsaWVzIHRoYXQgZG9uJ3QgZXhpc3Qgb24gdGhpcyBwcm9jICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAxMjUgKDApCkBAIC05Nyw2ICsxNjUsOCBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjYzICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjY2ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjczICgwKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMjg1ICgwKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzA3ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzExICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzIzICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzYzICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZjUyNy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZjUyNy5oCmluZGV4IDA1NmViNGIuLjE0NGYwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmY1MjcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmNTI3LmgKQEAgLTMwLDggKzMwLDYgQEAKICNpZm5kZWYgX19NQUNIX0JGNTI3X0hfXwogI2RlZmluZSBfX01BQ0hfQkY1MjdfSF9fCiAKLSNkZWZpbmUgU1VQUE9SVEVEX1JFVklEIDIKLQogI2RlZmluZSBPRkZTRVRfKHgpICgoeCkgJiAweDAwMDBGRkZGKQogCiAvKnNvbWUgbWlzYyBkZWZpbmVzKi8KQEAgLTExMiwxNiArMTEwLDMxIEBACiAKICNpZmRlZiBDT05GSUdfQkY1MjcKICNkZWZpbmUgQ1BVICJCRjUyNyIKKyNkZWZpbmUgQ1BVSUQgMHgyN2U0CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQkY1MjYKKyNkZWZpbmUgQ1BVICJCRjUyNiIKKyNkZWZpbmUgQ1BVSUQgMHgyN2U0CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQkY1MjUKICNkZWZpbmUgQ1BVICJCRjUyNSIKKyNkZWZpbmUgQ1BVSUQgMHgyN2U0CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQkY1MjQKKyNkZWZpbmUgQ1BVICJCRjUyNCIKKyNkZWZpbmUgQ1BVSUQgMHgyN2U0CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQkY1MjMKKyNkZWZpbmUgQ1BVICJCRjUyMyIKKyNkZWZpbmUgQ1BVSUQgMHgyN2U0CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQkY1MjIKICNkZWZpbmUgQ1BVICJCRjUyMiIKKyNkZWZpbmUgQ1BVSUQgMHgyN2U0CiAjZW5kaWYKKwogI2lmbmRlZiBDUFUKLSNkZWZpbmUJQ1BVICJVTktOT1dOIgotI2RlZmluZSBDUFVJRCAweDAKKyNlcnJvciBVbmtub3duIENQVSB0eXBlIC0gVGhpcyBrZXJuZWwgZG9lc24ndCBzZWVtIHRvIGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkKICNlbmRpZgogCiAjZW5kaWYJCQkJLyogX19NQUNIX0JGNTI3X0hfXyAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MnhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKaW5kZXggNmFjMmVkNy4uNjhiNTVkMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKQEAgLTE4NDAsNiArMTg0MCwzMyBAQAogCiAjZGVmaW5lICAgICAgICAgICAgICAgICBEUFJFU0NBTEUgIDB4ZiAgICAgICAgLyogTG9hZCBDb3VudGVyIFJlZ2lzdGVyICovCiAKKy8qIENOVF9DT01NQU5EIGJpdCBmaWVsZCBvcHRpb25zICovCisKKyNkZWZpbmUgVzFMQ05UX1pFUk8gICAweDAwMDEgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX0NPVU5URVIgd2l0aCB6ZXJvICovCisjZGVmaW5lIFcxTENOVF9NSU4gICAgMHgwMDA0ICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9DT1VOVEVSIGZyb20gQ05UX01JTiAqLworI2RlZmluZSBXMUxDTlRfTUFYICAgIDB4MDAwOCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfQ09VTlRFUiBmcm9tIENOVF9NQVggKi8KKworI2RlZmluZSBXMUxNSU5fWkVSTyAgIDB4MDAxMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUlOIHdpdGggemVybyAqLworI2RlZmluZSBXMUxNSU5fQ05UICAgIDB4MDAyMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUlOIGZyb20gQ05UX0NPVU5URVIgKi8KKyNkZWZpbmUgVzFMTUlOX01BWCAgICAweDAwODAgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01JTiBmcm9tIENOVF9NQVggKi8KKworI2RlZmluZSBXMUxNQVhfWkVSTyAgIDB4MDEwMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUFYIHdpdGggemVybyAqLworI2RlZmluZSBXMUxNQVhfQ05UICAgIDB4MDIwMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUFYIGZyb20gQ05UX0NPVU5URVIgKi8KKyNkZWZpbmUgVzFMTUFYX01JTiAgICAweDA0MDAgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01BWCBmcm9tIENOVF9NSU4gKi8KKworLyogQ05UX0NPTkZJRyBiaXQgZmllbGQgb3B0aW9ucyAqLworCisjZGVmaW5lIENOVE1PREVfUVVBREVOQyAgMHgwMDAwICAvKiBxdWFkcmF0dXJlIGVuY29kZXIgbW9kZSAqLworI2RlZmluZSBDTlRNT0RFX0JJTkVOQyAgIDB4MDEwMCAgLyogYmluYXJ5IGVuY29kZXIgbW9kZSAqLworI2RlZmluZSBDTlRNT0RFX1VEQ05UICAgIDB4MDIwMCAgLyogdXAvZG93biBjb3VudGVyIG1vZGUgKi8KKyNkZWZpbmUgQ05UTU9ERV9ESVJDTlQgICAweDA0MDAgIC8qIGRpcmVjdGlvbiBjb3VudGVyIG1vZGUgKi8KKyNkZWZpbmUgQ05UTU9ERV9ESVJUTVIgICAweDA1MDAgIC8qIGRpcmVjdGlvbiB0aW1lciBtb2RlICovCisKKyNkZWZpbmUgQk5ETU9ERV9DT01QICAgICAweDAwMDAgIC8qIGJvdW5kYXJ5IGNvbXBhcmUgbW9kZSAqLworI2RlZmluZSBCTkRNT0RFX1pFUk8gICAgIDB4MTAwMCAgLyogYm91bmRhcnkgY29tcGFyZSBhbmQgemVybyBtb2RlICovCisjZGVmaW5lIEJORE1PREVfQ0FQVCAgICAgMHgyMDAwICAvKiBib3VuZGFyeSBjYXB0dXJlIG1vZGUgKi8KKyNkZWZpbmUgQk5ETU9ERV9BRVhUICAgICAweDMwMDAgIC8qIGJvdW5kYXJ5IGF1dG8tZXh0ZW5kIG1vZGUgKi8KKwogLyogQml0IG1hc2tzIGZvciBPVFBfQ09OVFJPTCAqLwogCiAjZGVmaW5lICAgICAgICAgICAgICAgIEZVU0VfRkFERFIgIDB4MWZmICAgICAgLyogT1RQL0Z1c2UgQWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAppbmRleCBhZTRkMjA1Li43ZjZkYTJjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaApAQCAtNjcsNiArNjcsMTAgQEAKICNkZWZpbmUgUF9VQVJUMV9SWAkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BHMTMpIHwgUF9GVU5DVCgxKSkKICNlbmRpZgogCisjZGVmaW5lIFBfQ05UX0NaTQkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BGMTEpIHwgUF9GVU5DVCgzKSkKKyNkZWZpbmUgUF9DTlRfQ0RHCShQX0RFRklORUQgfCBQX0lERU5UKEdQSU9fUEYxMikgfCBQX0ZVTkNUKDMpKQorI2RlZmluZSBQX0NOVF9DVUQJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRjEzKSB8IFBfRlVOQ1QoMykpCisKICNkZWZpbmUgUF9IV0FJVAkJKFBfRE9OVENBUkUpCiAKICNkZWZpbmUgUF9TUEkwX1NTCShQX0RFRklORUQgfCBQX0lERU5UKEdQSU9fUEcxKSB8IFBfRlVOQ1QoMCkpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0g4NjA2LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0g4NjA2LmMKaW5kZXggYzY2YTY4Zi4uNzJhYzNhYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYwpAQCAtOSw3ICs5LDcgQEAKICAqIE1vZGlmaWVkOgogICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKICAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMKLSAqCQkgQ29weXJpZ2h0IDIwMDcgSFYgU2lzdGVtYXMgUy5MLgorICoJCSBDb3B5cmlnaHQgMjAwNywyMDA4IEhWIFNpc3RlbWFzIFMuTC4KICAqCiAgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwogICoKQEAgLTY0LDE4ICs2NCwxOCBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDBfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSAweDIwMzAwMDAwLAotCQkuZW5kCT0gMHgyMDMwMDAwMCArIDEsCisJCS5lbmQJPSAweDIwMzAwMDAyLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CT0gMHgyMDMwMDAwMCArIDQsCi0JCS5lbmQJPSAweDIwMzAwMDAwICsgNSwKKwkJLnN0YXJ0CT0gMHgyMDMwMDAwNCwKKwkJLmVuZAk9IDB4MjAzMDAwMDYsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzJdID0gewogCQkuc3RhcnQJPSBJUlFfUEYxMCwKIAkJLmVuZAk9IElSUV9QRjEwLAotCQkuZmxhZ3MJPSAoSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSksCisJCS5mbGFncwk9IChJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFIHwgSVJRRl9TSEFSRUQgfCBJUlFGX1RSSUdHRVJfSElHSCksCiAJfSwKIH07CiAKQEAgLTE0MCwxOCArMTQwLDIyIEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX00yNVA4MCkgfHwgZGVmaW5lZChDT05GSUdfTVREX00yNVA4MF9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYmZpbl9zcGlfZmxhc2hfcGFydGl0aW9uc1tdID0gewogCXsKLQkJLm5hbWUgPSAiYm9vdGxvYWRlcihzcGkpIiwKLQkJLnNpemUgPSAweDAwMDYwMDAwLAorCQkubmFtZSA9ICJib290bG9hZGVyIChzcGkpIiwKKwkJLnNpemUgPSAweDQwMDAwLAogCQkub2Zmc2V0ID0gMCwKIAkJLm1hc2tfZmxhZ3MgPSBNVERfQ0FQX1JPTQogCX0sIHsKLQkJLm5hbWUgPSAibGludXgga2VybmVsKHNwaSkiLAotCQkuc2l6ZSA9IDB4MTAwMDAwLAotCQkub2Zmc2V0ID0gMHg2MDAwMAorCQkubmFtZSA9ICJmcGdhIChzcGkpIiwKKwkJLnNpemUgPSAgIDB4MzAwMDAsCisJCS5vZmZzZXQgPSAweDQwMDAwCiAJfSwgewotCQkubmFtZSA9ICJmaWxlIHN5c3RlbShzcGkpIiwKLQkJLnNpemUgPSAweDZhMDAwMCwKLQkJLm9mZnNldCA9IDB4MDAxNjAwMDAsCisJCS5uYW1lID0gImxpbnV4IGtlcm5lbCAoc3BpKSIsCisJCS5zaXplID0gICAweDE1MDAwMCwKKwkJLm9mZnNldCA9ICAweDcwMDAwCisJfSwgeworCQkubmFtZSA9ICJqZmZzMiByb290IGZpbGUgc3lzdGVtIChzcGkpIiwKKwkJLnNpemUgPSAgIDB4NjQwMDAwLAorCQkub2Zmc2V0ID0gMHgxYzAwMDAsCiAJfQogfTsKIApAQCAtMzQwLDcgKzM0NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsODI1MF9wbGF0Zm9ybV9kYXRhIFtdID0gewogCXsKLQkJLm1lbWJhc2UgPSAweDIwMjAwMDAwLAorCQkubWVtYmFzZSA9ICh2b2lkICopMHgyMDIwMDAwMCwKIAkJLm1hcGJhc2UgPSAweDIwMjAwMDAwLAogCQkuaXJxID0gSVJRX1BGOCwKIAkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVQVJUX0NPTkZJR19UWVBFLApAQCAtMzQ4LDcgKzM1Miw3IEBACiAJCS5yZWdzaGlmdCA9IDEsCiAJCS51YXJ0Y2xrID0gNjY2NjY2NjcsCiAJfSwgewotCQkubWVtYmFzZSA9IDB4MjAyMDAwMTAsCisJCS5tZW1iYXNlID0gKHZvaWQgKikweDIwMjAwMDEwLAogCQkubWFwYmFzZSA9IDB4MjAyMDAwMTAsCiAJCS5pcnEgPSBJUlFfUEY4LAogCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVBUlRfQ09ORklHX1RZUEUsCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaGVhZC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2hlYWQuUwppbmRleCAwMWIyYjdlLi45ZmM5NWFhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaGVhZC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9oZWFkLlMKQEAgLTc4LDYgKzc4LDkgQEAKIAlyMSA9IFBMTF9CWVBBU1M7ICAgICAgICAgICAgICAgICAvKiBCeXBhc3MgdGhlIFBMTD8gICAgICAgICAgICAgICAgICovCiAJcjEgPSByMSA8PCA4OyAgICAgICAgICAgICAgICAgICAgLyogU2hpZnQgaXQgb3ZlciAgICAgICAgICAgICAgICAgICAqLwogCXIwID0gcjEgfCByMDsgICAgICAgICAgICAgICAgICAgIC8qIGFkZCB0aGVtIGFsbCB0b2dldGhlciAgICAgICAgICAgKi8KKyNpZmRlZiBBTk9NQUxZXzA1MDAwMjY1CisJQklUU0VUKHIwLCAxNSk7ICAgICAgICAgICAgICAgICAgLyogQWRkIDI1MCBtViBvZiBoeXN0ZXJlc2lzIHRvIFNQT1JUIGlucHV0IHBpbnMgKi8KKyNlbmRpZgogCiAJcDAuaCA9IGhpKFBMTF9DVEwpOwogCXAwLmwgPSBsbyhQTExfQ1RMKTsgICAgICAgICAgICAgIC8qIExvYWQgdGhlIGFkZHJlc3MgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYW5vbWFseS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKaW5kZXggOGY3ZWExMS4uZjU0NGZjNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKQEAgLTcsNyArNyw3IEBACiAgKi8KIAogLyogVGhpcyBmaWxlIHNob3VsZSBiZSB1cCB0byBkYXRlIHdpdGg6Ci0gKiAgLSBSZXZpc2lvbiBDLCAwMi8wOC8yMDA4OyBBRFNQLUJGNTMxL0JGNTMyL0JGNTMzIEJsYWNrZmluIFByb2Nlc3NvciBBbm9tYWx5IExpc3QKKyAqICAtIFJldmlzaW9uIEQsIDA2LzE4LzIwMDg7IEFEU1AtQkY1MzEvQkY1MzIvQkY1MzMgQmxhY2tmaW4gUHJvY2Vzc29yIEFub21hbHkgTGlzdAogICovCiAKICNpZm5kZWYgX01BQ0hfQU5PTUFMWV9IXwpAQCAtOTcsMTEgKzk3LDExIEBACiAvKiBVQVJUIFNUQiBCaXQgSW5jb3JyZWN0bHkgQWZmZWN0cyBSZWNlaXZlciBTZXR0aW5nICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyMzEgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKIC8qIFBQSV9GUzMgSXMgTm90IERyaXZlbiBpbiAyIG9yIDMgSW50ZXJuYWwgRnJhbWUgU3luYyBUcmFuc21pdCBNb2RlcyAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMjMzIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDQpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyMzMgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIEluY29ycmVjdCBSZXZpc2lvbiBOdW1iZXIgaW4gRFNQSUQgUmVnaXN0ZXIgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIzNCAoX19TSUxJQ09OX1JFVklTSU9OX18gPT0gNCkKIC8qIERGIEJpdCBpbiBQTExfQ1RMIFJlZ2lzdGVyIERvZXMgTm90IFJlc3BvbmQgdG8gSGFyZHdhcmUgUmVzZXQgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDI0MiAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA0KQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMjQyIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDUpCiAvKiBJZiBJLUNhY2hlIElzIE9uLCBDU1lOQy9TU1lOQy9JRExFIEFyb3VuZCBDaGFuZ2Ugb2YgQ29udHJvbCBDYXVzZXMgRmFpbHVyZXMgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI0NCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA1KQogLyogU3B1cmlvdXMgSGFyZHdhcmUgRXJyb3IgZnJvbSBhbiBBY2Nlc3MgaW4gdGhlIFNoYWRvdyBvZiBhIENvbmRpdGlvbmFsIEJyYW5jaCAqLwpAQCAtMTMxLDcgKzEzMSw3IEBACiAvKiBDU1lOQy9TU1lOQy9JRExFIENhdXNlcyBJbmZpbml0ZSBTdGFsbCBpbiBQZW51bHRpbWF0ZSBJbnN0cnVjdGlvbiBpbiBIYXJkd2FyZSBMb29wICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNjQgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKIC8qIFNlbnNpdGl2aXR5IFRvIE5vaXNlIHdpdGggU2xvdyBJbnB1dCBFZGdlIFJhdGVzIG9uIEV4dGVybmFsIFNQT1JUIFRYIGFuZCBSWCBDbG9ja3MgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2NSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA1KQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMjY1ICgxKQogLyogSGlnaCBJL08gQWN0aXZpdHkgQ2F1c2VzIE91dHB1dCBWb2x0YWdlIG9mIEludGVybmFsIFZvbHRhZ2UgUmVndWxhdG9yIChWZGRpbnQpIHRvIEluY3JlYXNlICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNjkgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKIC8qIEhpZ2ggSS9PIEFjdGl2aXR5IENhdXNlcyBPdXRwdXQgVm9sdGFnZSBvZiBJbnRlcm5hbCBWb2x0YWdlIFJlZ3VsYXRvciAoVmRkaW50KSB0byBEZWNyZWFzZSAqLwpAQCAtMTQxLDU2ICsxNDEsNTkgQEAKIC8qIENlcnRhaW4gRGF0YSBDYWNoZSBXcml0ZXRocm91Z2ggTW9kZXMgRmFpbCBmb3IgVmRkaW50IDw9IDAuOVYgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3MiAoMSkKIC8qIFdyaXRlcyB0byBTeW5jaHJvbm91cyBTRFJBTSBNZW1vcnkgTWF5IEJlIExvc3QgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3MyAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3MyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA2KQogLyogVGltaW5nIFJlcXVpcmVtZW50cyBDaGFuZ2UgZm9yIEV4dGVybmFsIEZyYW1lIFN5bmMgUFBJIE1vZGVzIHdpdGggTm9uLVplcm8gUFBJX0RFTEFZICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNzYgKDEpCiAvKiBXcml0ZXMgdG8gYW4gSS9PIERhdGEgUmVnaXN0ZXIgT25lIFNDTEsgQ3ljbGUgYWZ0ZXIgYW4gRWRnZSBJcyBEZXRlY3RlZCBNYXkgQ2xlYXIgSW50ZXJydXB0ICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAyNzcgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyNzcgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIERpc2FibGluZyBQZXJpcGhlcmFscyB3aXRoIERNQSBSdW5uaW5nIE1heSBDYXVzZSBETUEgU3lzdGVtIEluc3RhYmlsaXR5ICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAyNzggKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyNzggKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIEZhbHNlIEhhcmR3YXJlIEVycm9yIEV4Y2VwdGlvbiBXaGVuIElTUiBDb250ZXh0IElzIE5vdCBSZXN0b3JlZCAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMjgxICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMjgxIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDYpCiAvKiBNZW1vcnkgRE1BIENvcnJ1cHRpb24gd2l0aCAzMi1CaXQgRGF0YSBhbmQgVHJhZmZpYyBDb250cm9sICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAyODIgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyODIgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIFN5c3RlbSBNTVIgV3JpdGUgSXMgU3RhbGxlZCBJbmRlZmluaXRlbHkgV2hlbiBLaWxsZWQgaW4gYSBQYXJ0aWN1bGFyIFN0YWdlICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAyODMgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyODMgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIFNQT1JUcyBNYXkgUmVjZWl2ZSBCYWQgRGF0YSBJZiBGSUZPcyBGaWxsIFVwICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAyODggKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyODggKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIE1lbW9yeS1Uby1NZW1vcnkgRE1BIFNvdXJjZS9EZXN0aW5hdGlvbiBEZXNjcmlwdG9ycyBNdXN0IEJlIGluIFNhbWUgTWVtb3J5IFNwYWNlICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzMDEgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzMDEgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIFNTWU5DcyBBZnRlciBXcml0ZXMgVG8gRE1BIE1NUiBSZWdpc3RlcnMgTWF5IE5vdCBCZSBIYW5kbGVkIENvcnJlY3RseSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzAyIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDUpCiAvKiBOZXcgRmVhdHVyZTogQWRkaXRpb25hbCBIeXN0ZXJlc2lzIG9uIFNQT1JUIElucHV0IFBpbnMgKE5vdCBBdmFpbGFibGUgT24gT2xkZXIgU2lsaWNvbikgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMwNSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA1KQogLyogTmV3IEZlYXR1cmU6IEFkZGl0aW9uYWwgUFBJIEZyYW1lIFN5bmMgU2FtcGxpbmcgT3B0aW9ucyAoTm90IEF2YWlsYWJsZSBPbiBPbGRlciBTaWxpY29uKSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzA2IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDUpCisvKiBTQ0tFTE9XIEJpdCBEb2VzIE5vdCBNYWludGFpbiBTdGF0ZSBUaHJvdWdoIEhpYmVybmF0ZSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzA3ICgxKQogLyogRmFsc2UgSGFyZHdhcmUgRXJyb3JzIENhdXNlZCBieSBGZXRjaGVzIGF0IHRoZSBCb3VuZGFyeSBvZiBSZXNlcnZlZCBNZW1vcnkgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMCAoMSkKIC8qIEVycm9uZW91cyBGbGFnIChHUElPKSBQaW4gT3BlcmF0aW9ucyB1bmRlciBTcGVjaWZpYyBTZXF1ZW5jZXMgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMSAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA2KQogLyogRXJyb3JzIFdoZW4gU1NZTkMsIENTWU5DLCBvciBMb2FkcyB0byBMVCwgTEIgYW5kIExDIFJlZ2lzdGVycyBBcmUgSW50ZXJydXB0ZWQgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMiAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMiAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA2KQogLyogUFBJIElzIExldmVsLVNlbnNpdGl2ZSBvbiBGaXJzdCBUcmFuc2ZlciAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzEzICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzEzIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDYpCiAvKiBLaWxsZWQgU3lzdGVtIE1NUiBXcml0ZSBDb21wbGV0ZXMgRXJyb25lb3VzbHkgT24gTmV4dCBTeXN0ZW0gTU1SIEFjY2VzcyAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzE1ICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzE1IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDYpCiAvKiBJbnRlcm5hbCBWb2x0YWdlIFJlZ3VsYXRvciBWYWx1ZXMgb2YgMS4wNVYsIDEuMTBWIGFuZCAxLjE1ViBOb3QgQWxsb3dlZCBmb3IgTFFGUCBQYWNrYWdlcyAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzE5IChBTk9NQUxZX0JGNTMxIHx8IEFOT01BTFlfQkY1MzIpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzMTkgKChBTk9NQUxZX0JGNTMxIHx8IEFOT01BTFlfQkY1MzIpICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIFNlcmlhbCBQb3J0IChTUE9SVCkgTXVsdGljaGFubmVsIFRyYW5zbWl0IEZhaWx1cmUgd2hlbiBDaGFubmVsIDAgSXMgRGlzYWJsZWQgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1NyAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1NyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA2KQogLyogVUFSVCBCcmVhayBTaWduYWwgSXNzdWVzICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNjMgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKIC8qIFBQSSBVbmRlcmZsb3cgRXJyb3IgR29lcyBVbmRldGVjdGVkIGluIElUVS1SIDY1NiBNb2RlICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNjYgKDEpCiAvKiBQb3NzaWJsZSBSRVRTIFJlZ2lzdGVyIENvcnJ1cHRpb24gd2hlbiBTdWJyb3V0aW5lIElzIHVuZGVyIDUgQ3ljbGVzIGluIER1cmF0aW9uICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzNzEgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNzEgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIFBQSSBEb2VzIE5vdCBTdGFydCBQcm9wZXJseSBJbiBTcGVjaWZpYyBNb2RlICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDA0MDAgKF9fU0lMSUNPTl9SRVZJU0lPTl9fID49IDUpCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MDAgKF9fU0lMSUNPTl9SRVZJU0lPTl9fID09IDUpCiAvKiBTU1lOQyBTdGFsbHMgUHJvY2Vzc29yIHdoZW4gRXhlY3V0ZWQgZnJvbSBOb24tQ2FjaGVhYmxlIE1lbW9yeSAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwNDAyIChfX1NJTElDT05fUkVWSVNJT05fXyA+PSA1KQorI2RlZmluZSBBTk9NQUxZXzA1MDAwNDAyIChfX1NJTElDT05fUkVWSVNJT05fXyA9PSA1KQogLyogTGV2ZWwtU2Vuc2l0aXZlIEV4dGVybmFsIEdQSU8gV2FrZXVwcyBNYXkgQ2F1c2UgSW5kZWZpbml0ZSBTdGFsbCAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDAzICgxKQotCisvKiBTcGVjdWxhdGl2ZSBGZXRjaGVzIENhbiBDYXVzZSBVbmRlc2lyZWQgRXh0ZXJuYWwgRklGTyBPcGVyYXRpb25zICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MTYgKDEpCiAKIC8qIFRoZXNlIGFub21hbGllcyBoYXZlIGJlZW4gInBoYXNlZCIgb3V0IG9mIGFuYWxvZy5jb20gYW5vbWFseSBzaGVldHMgYW5kIGFyZQogICogaGVyZSB0byBzaG93IHJ1bm5pbmcgb24gb2xkZXIgc2lsaWNvbiBqdXN0IGlzbid0IGZlYXNpYmxlLgpAQCAtMjY4LDUgKzI3MSw3IEBACiAvKiBBbm9tYWxpZXMgdGhhdCBkb24ndCBleGlzdCBvbiB0aGlzIHByb2MgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2NiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMyMyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1MyAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4NiAoMSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmNTMzLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmNTMzLmgKaW5kZXggMTJhNDE2OS4uZGZjOGMxYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZjUzMy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmY1MzMuaApAQCAtMzAsOCArMzAsNiBAQAogI2lmbmRlZiBfX01BQ0hfQkY1MzNfSF9fCiAjZGVmaW5lIF9fTUFDSF9CRjUzM19IX18KIAotI2RlZmluZSBTVVBQT1JURURfUkVWSUQgMgotCiAjZGVmaW5lIE9GRlNFVF8oeCkgKCh4KSAmIDB4MDAwMEZGRkYpCiAKIC8qc29tZSBtaXNjIGRlZmluZXMqLwpAQCAtMTQzLDE5ICsxNDEsMTkgQEAKIAogI2lmZGVmIENPTkZJR19CRjUzMwogI2RlZmluZSBDUFUgIkJGNTMzIgotI2RlZmluZSBDUFVJRCAweDAyN2E1MDAwCisjZGVmaW5lIENQVUlEIDB4MjdhNQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JGNTMyCiAjZGVmaW5lIENQVSAiQkY1MzIiCi0jZGVmaW5lIENQVUlEIDB4MDI3NUEwMDAKKyNkZWZpbmUgQ1BVSUQgMHgyNzVBCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQkY1MzEKICNkZWZpbmUgQ1BVICJCRjUzMSIKLSNkZWZpbmUgQ1BVSUQgMHgwMjdhNTAwMAorI2RlZmluZSBDUFVJRCAweDI3YTUKICNlbmRpZgorCiAjaWZuZGVmIENQVQotI2RlZmluZQlDUFUgIlVOS05PV04iCi0jZGVmaW5lIENQVUlEIDB4MAorI2Vycm9yIFVua25vd24gQ1BVIHR5cGUgLSBUaGlzIGtlcm5lbCBkb2Vzbid0IHNlZW0gdG8gYmUgY29uZmlndXJlZCBwcm9wZXJseQogI2VuZGlmCiAKICNlbmRpZgkJCQkvKiBfX01BQ0hfQkY1MzNfSF9fICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggODE1YmZlNS4uZjNkOWU0OSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC04NSw3ICs4NSw3IEBACiAJdW5zaWduZWQgaW50CQlyeF9kbWFfY2hhbm5lbDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdHhfZG1hX3dvcmtxdWV1ZTsKICNlbHNlCi0jIGlmIEFOT01BTFlfMDUwMDAyMzAKKyMgaWYgQU5PTUFMWV8wNTAwMDM2MwogCXVuc2lnbmVkIGludCBhbm9tYWx5X3RocmVzaG9sZDsKICMgZW5kaWYKICNlbmRpZgpAQCAtMTU4LDcgKzE1OCw3IEBACiAJfQogCWlmICh1YXJ0LT5ydHNfcGluID49IDApIHsKIAkJZ3Bpb19yZXF1ZXN0KHVhcnQtPnJ0c19waW4sIERSSVZFUl9OQU1FKTsKLQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQodWFydC0+cnRzX3BpbiwgMCk7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dCh1YXJ0LT5ydHNfcGluLCAwKTsKIAl9CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwppbmRleCA4NDgyZDIyLi44ZDM5NDM5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2RwbWMuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvYWQ3ODc3Lmg+CiAKIC8qCiAgKiBOYW1lIHRoZSBCb2FyZCBmb3IgdGhlIC9wcm9jL2NwdWluZm8KQEAgLTU1NSw2ICs1NTQsNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3N19NT0RVTEUpCisjaW5jbHVkZSA8bGludXgvc3BpL2FkNzg3Ny5oPgogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZDc4NzdfY2hpcF9pbmZvID0gewogCS5lbmFibGVfZG1hID0gMCwKIAkuYml0c19wZXJfd29yZCA9IDE2LApAQCAtNTc1LDYgKzU3NSwzMCBAQAogfTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfTU9EVUxFKQorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZDc4NzkuaD4KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWQ3ODc5X3BsYXRmb3JtX2RhdGEgYmZpbl9hZDc4NzlfdHNfaW5mbyA9IHsKKwkubW9kZWwJCQk9IDc4NzksCS8qIE1vZGVsID0gQUQ3ODc5ICovCisJLnhfcGxhdGVfb2htcwkJPSA2MjAsCS8qIDYyMCBPaG0gZnJvbSB0aGUgdG91Y2ggZGF0YXNoZWV0ICovCisJLnByZXNzdXJlX21heAkJPSAxMDAwMCwKKwkucHJlc3N1cmVfbWluCQk9IDAsCisJLmZpcnN0X2NvbnZlcnNpb25fZGVsYXkgPSAzLAkvKiB3YWl0IDUxMnVzIGJlZm9yZSBkbyBhIGZpcnN0IGNvbnZlcnNpb24gKi8KKwkuYWNxdWlzaXRpb25fdGltZSAJPSAxLAkvKiA0dXMgYWNxdWlzaXRpb24gdGltZSBwZXIgc2FtcGxlICovCisJLm1lZGlhbgkJCT0gMiwJLyogZG8gOCBtZWFzdXJlbWVudHMgKi8KKwkuYXZlcmFnaW5nIAkJPSAxLAkvKiB0YWtlIHRoZSBhdmVyYWdlIG9mIDQgbWlkZGxlIHNhbXBsZXMgKi8KKwkucGVuX2Rvd25fYWNjX2ludGVydmFsIAk9IDI1NSwJLyogOS40IG1zICovCisJLmdwaW9fb3V0cHV0CQk9IDEsCS8qIGNvbmZpZ3VyZSBBVVgvVkJBVC9HUElPIGFzIEdQSU8gb3V0cHV0ICovCisJLmdwaW9fZGVmYXVsdCAJCT0gMSwJLyogRHVyaW5nIGluaXRpYWxpemF0aW9uIHNldCBHUElPID0gSElHSCAqLworfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSkgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2FkNzg3OV9jaGlwX2luZm8gPSB7CisJLmVuYWJsZV9kbWEgPSAwLAorCS5iaXRzX3Blcl93b3JkID0gMTYsCit9OworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19TUElfU1BJREVWKSB8fCBkZWZpbmVkKENPTkZJR19TUElfU1BJREVWX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlkZXZfY2hpcF9pbmZvID0gewogCS5lbmFibGVfZG1hID0gMCwKQEAgLTU4Miw2ICs2MDYsMTMgQEAKIH07CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMSkgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl9MUTAzNVExX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBscTAzNXExX3NwaV9jaGlwX2luZm8gPSB7CisJLmVuYWJsZV9kbWEJPSAwLAorCS5iaXRzX3Blcl93b3JkCT0gOCwKK307CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0gpIFwKIAl8fCBkZWZpbmVkKENPTkZJR19NVERfREFUQUZMQVNIX01PRFVMRSkKIApAQCAtNzIxLDYgKzc1MiwxOCBAQAogCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9hZDc4NzdfY2hpcF9pbmZvLAogCX0sCiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJX01PRFVMRSkKKwl7CisJCS5tb2RhbGlhcyA9ICJhZDc4NzkiLAorCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX2FkNzg3OV90c19pbmZvLAorCQkuaXJxID0gSVJRX1BGNywKKwkJLm1heF9zcGVlZF9oeiA9IDUwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCisJCS5idXNfbnVtID0gMCwKKwkJLmNoaXBfc2VsZWN0ID0gMSwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfYWQ3ODc5X2NoaXBfaW5mbywKKwkJLm1vZGUgPSBTUElfQ1BIQSB8IFNQSV9DUE9MLAorCX0sCisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19TUElfU1BJREVWKSB8fCBkZWZpbmVkKENPTkZJR19TUElfU1BJREVWX01PRFVMRSkKIAl7CiAJCS5tb2RhbGlhcyA9ICJzcGlkZXYiLApAQCAtNzMwLDYgKzc3MywxNiBAQAogCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaWRldl9jaGlwX2luZm8sCiAJfSwKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMSkgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl9MUTAzNVExX01PRFVMRSkKKwl7CisJCS5tb2RhbGlhcyA9ICJiZmluLWxxMDM1cTEtc3BpIiwKKwkJLm1heF9zcGVlZF9oeiA9IDIwMDAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLworCQkuYnVzX251bSA9IDAsCisJCS5jaGlwX3NlbGVjdCA9IDIsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmbHEwMzVxMV9zcGlfY2hpcF9pbmZvLAorCQkubW9kZSA9IFNQSV9DUEhBIHwgU1BJX0NQT0wsCisJfSwKKyNlbmRpZgogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9NT0RVTEUpCkBAIC03NzcsNiArODMwLDM0IEBACiB9OwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOX0xRMDM1UTEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMV9NT0RVTEUpCisjaW5jbHVkZSA8YXNtL2JmaW4tbHEwMzVxMS5oPgorCitzdGF0aWMgc3RydWN0IGJmaW5fbHEwMzVxMWZiX2Rpc3BfaW5mbyBiZmluX2xxMDM1cTFfZGF0YSA9IHsKKwkubW9kZSA9IAlMUTAzNV9OT1JNIHwgTFEwMzVfUkdCIHwgTFEwMzVfUkwgfCBMUTAzNV9UQiwKKwkudXNlX2JsID0gCTAsCS8qIGxldCBzb21ldGhpbmcgZWxzZSBjb250cm9sIHRoZSBMQ0QgQmxhY2tsaWdodCAqLworCS5ncGlvX2JsID0JR1BJT19QRjcsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fbHEwMzVxMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IElSUV9QUElfRVJST1IsCisJCS5lbmQgPSBJUlFfUFBJX0VSUk9SLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9scTAzNXExX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYmZpbi1scTAzNXExIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMgCT0gQVJSQVlfU0laRShiZmluX2xxMDM1cTFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgCT0gYmZpbl9scTAzNXExX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYmZpbl9scTAzNXExX2RhdGEsCisJfSwKK307CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fdWFydF9yZXNvdXJjZXNbXSA9IHsKICNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fVUFSVDAKQEAgLTg1Niw3ICs5MzcsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX0FENzE0MikgfHwgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfQUQ3MTQyX01PRFVMRSkKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJhZDcxNDJfam95c3RpY2siLCAweDJDKSwKLQkJLmlycSA9IDU1LAorCQkuaXJxID0gSVJRX1BGNSwKIAl9LAogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfVFdJX0xDRCkgfHwgZGVmaW5lZChDT05GSUdfVFdJX0xDRF9NT0RVTEUpCkBAIC04NjcsNyArOTQ4LDE0IEBACiAjaWYgZGVmaW5lZChDT05GSUdfVFdJX0tFWVBBRCkgfHwgZGVmaW5lZChDT05GSUdfVFdJX0tFWVBBRF9NT0RVTEUpCiAJewogCQlJMkNfQk9BUkRfSU5GTygicGNmODU3NF9rZXlwYWQiLCAweDI3KSwKLQkJLmlycSA9IDcyLAorCQkuaXJxID0gSVJRX1BHNiwKKwl9LAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQykgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQ19NT0RVTEUpCisJeworCQlJMkNfQk9BUkRfSU5GTygiYWQ3ODc5IiwgMHgyRiksCisJCS5pcnEgPSBJUlFfUEc1LAorCQkucGxhdGZvcm1fZGF0YSA9ICh2b2lkICopJmJmaW5fYWQ3ODc5X3RzX2luZm8sCiAJfSwKICNlbmRpZgogfTsKQEAgLTk5Nyw2ICsxMDg1LDEwIEBACiAJJmJmaW5fZmJfZGV2aWNlLAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOX0xRMDM1UTEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMV9NT0RVTEUpCisJJmJmaW5fbHEwMzVxMV9kZXZpY2UsCisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKIAkmYmZpbl9mYl9hZHY3MzkzX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2hlYWQuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9oZWFkLlMKaW5kZXggMTJlYjVjYy4uZjVjOTRiZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2hlYWQuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaGVhZC5TCkBAIC04Nyw2ICs4Nyw5IEBACiAJcjEgPSBQTExfQllQQVNTOyAgICAgICAgICAgICAgICAgLyogQnlwYXNzIHRoZSBQTEw/ICAgICAgICAgICAgICAgICAqLwogCXIxID0gcjEgPDwgODsgICAgICAgICAgICAgICAgICAgIC8qIFNoaWZ0IGl0IG92ZXIgICAgICAgICAgICAgICAgICAgKi8KIAlyMCA9IHIxIHwgcjA7ICAgICAgICAgICAgICAgICAgICAvKiBhZGQgdGhlbSBhbGwgdG9nZXRoZXIgICAgICAgICAgICovCisjaWZkZWYgQU5PTUFMWV8wNTAwMDI2NQorCUJJVFNFVChyMCwgMTUpOyAgICAgICAgICAgICAgICAgIC8qIEFkZCAyNTAgbVYgb2YgaHlzdGVyZXNpcyB0byBTUE9SVCBpbnB1dCBwaW5zICovCisjZW5kaWYKIAogCXAwLmggPSBoaShQTExfQ1RMKTsKIAlwMC5sID0gbG8oUExMX0NUTCk7ICAgICAgICAgICAgICAvKiBMb2FkIHRoZSBhZGRyZXNzICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IDg0NjBhYjkuLmM2ODk5MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC0xNTgsNiArMTU4LDggQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2NiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMyMyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1MyAoMSkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM2MyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4NiAoMSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmNTM3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmNTM3LmgKaW5kZXggY2ZlMmEyMi4uMjRkNWM5ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZjUzNy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmY1MzcuaApAQCAtMzAsOCArMzAsNiBAQAogI2lmbmRlZiBfX01BQ0hfQkY1MzdfSF9fCiAjZGVmaW5lIF9fTUFDSF9CRjUzN19IX18KIAotI2RlZmluZSBTVVBQT1JURURfUkVWSUQgMgotCiAvKiBNYXNrcyBmb3IgZ2VuZXJpYyBFUlJPUiBJUlEgZGVtdWx0aXBsZXhpbmcgdXNlZCBpbiBpbnQtcHJpb3JpdHktc2MuYyAqLwogCiAjZGVmaW5lIFNQSV9FUlJfTUFTSyAoVFhDT0wgfCBSQlNZIHwgTU9ERiB8IFRYRSkJLyogU1BJX1NUQVQgKi8KQEAgLTEyMywxOSArMTIxLDE5IEBACiAKICNpZmRlZiBDT05GSUdfQkY1MzcKICNkZWZpbmUgQ1BVICJCRjUzNyIKLSNkZWZpbmUgQ1BVSUQgMHgwMjdjODAwMAorI2RlZmluZSBDUFVJRCAweDI3YzgKICNlbmRpZgogI2lmZGVmIENPTkZJR19CRjUzNgogI2RlZmluZSBDUFUgIkJGNTM2IgotI2RlZmluZSBDUFVJRCAweDAyN2M4MDAwCisjZGVmaW5lIENQVUlEIDB4MjdjOAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JGNTM0CiAjZGVmaW5lIENQVSAiQkY1MzQiCi0jZGVmaW5lIENQVUlEIDB4MDI3YzYwMDAKKyNkZWZpbmUgQ1BVSUQgMHgyN2M2CiAjZW5kaWYKKwogI2lmbmRlZiBDUFUKLSNkZWZpbmUJQ1BVICJVTktOT1dOIgotI2RlZmluZSBDUFVJRCAweDAKKyNlcnJvciBVbmtub3duIENQVSB0eXBlIC0gVGhpcyBrZXJuZWwgZG9lc24ndCBzZWVtIHRvIGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkKICNlbmRpZgogCiAjZW5kaWYJCQkJLyogX19NQUNIX0JGNTM3X0hfXyAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvY21fYmY1NDguYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvY21fYmY1NDguYwppbmRleCBjZTkzNGVlLi4yNDE5MmFhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9jbV9iZjU0OC5jCkBAIC0zNiwxMSArMzYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hEUkMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hEUkNfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3VzYi9tdXNiLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxhc20vYmZpbjV4eF9zcGkuaD4KLSNpbmNsdWRlIDxhc20vY3BsYi5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9uYW5kLmg+CkBAIC0xNzUsNiArMTcyLDcgQEAKIAl7CiAJCS5zdGFydCA9IDB4RkZDMDMxMDAsCiAJCS5lbmQgPSAweEZGQzAzMUZGLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogI2VuZGlmCiB9OwpAQCAtMjY4LDYgKzI2NiwxNiBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG11c2JfaGRyY19jb25maWcgbXVzYl9jb25maWcgPSB7CisJLm11bHRpcG9pbnQJPSAwLAorCS5keW5fZmlmbwk9IDAsCisJLnNvZnRfY29uCT0gMSwKKwkuZG1hCQk9IDEsCisJLm51bV9lcHMJPSA3LAorCS5kbWFfY2hhbm5lbHMJPSA3LAorCS5ncGlvX3Zyc2VsCT0gR1BJT19QSDYsCit9OworCiBzdGF0aWMgc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhIG11c2JfcGxhdCA9IHsKICNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9PVEcpCiAJLm1vZGUJCT0gTVVTQl9PVEcsCkBAIC0yNzYsNyArMjg0LDcgQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDKQogCS5tb2RlCQk9IE1VU0JfUEVSSVBIRVJBTCwKICNlbmRpZgotCS5tdWx0aXBvaW50CT0gMCwKKwkuY29uZmlnCQk9ICZtdXNiX2NvbmZpZywKIH07CiAKIHN0YXRpYyB1NjQgbXVzYl9kbWFtYXNrID0gfih1MzIpMDsKQEAgLTMyMSwxMiArMzI5LDEyIEBACiAJewogCQkubmFtZSA9ICJsaW51eCBrZXJuZWwobmFuZCkiLAogCQkub2Zmc2V0ID0gMCwKLQkJLnNpemUgPSA0ICogU0laRV8xTSwKKwkJLnNpemUgPSA0ICogMTAyNCAqIDEwMjQsCiAJfSwKIAl7CiAJCS5uYW1lID0gImZpbGUgc3lzdGVtKG5hbmQpIiwKLQkJLm9mZnNldCA9IDQgKiBTSVpFXzFNLAotCQkuc2l6ZSA9ICgyNTYgLSA0KSAqIFNJWkVfMU0sCisJCS5vZmZzZXQgPSA0ICogMTAyNCAqIDEwMjQsCisJCS5zaXplID0gKDI1NiAtIDQpICogMTAyNCAqIDEwMjQsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwppbmRleCAzOTM1NzY5Li41Mjg4MTg3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jCkBAIC0zOCwxMSArMzgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hEUkMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hEUkNfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3VzYi9tdXNiLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxhc20vYmZpbjV4eF9zcGkuaD4KLSNpbmNsdWRlIDxhc20vY3BsYi5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9uYW5kLmg+CkBAIC0xODYsNiArMTgzLDM3IEBACiB9OwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19KT1lTVElDS19CRklOX1JPVEFSWSkgfHwgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfQkZJTl9ST1RBUllfTU9EVUxFKQorI2luY2x1ZGUgPGFzbS9iZmluX3JvdGFyeS5oPgorCitzdGF0aWMgc3RydWN0IGJmaW5fcm90YXJ5X3BsYXRmb3JtX2RhdGEgYmZpbl9yb3RhcnlfZGF0YSA9IHsKKwkvKi5yb3RhcnlfdXBfa2V5ICAgICA9IEtFWV9VUCwqLworCS8qLnJvdGFyeV9kb3duX2tleSAgID0gS0VZX0RPV04sKi8KKwkucm90YXJ5X3JlbF9jb2RlICAgPSBSRUxfV0hFRUwsCisJLnJvdGFyeV9idXR0b25fa2V5ID0gS0VZX0VOVEVSLAorCS5kZWJvdW5jZQkgICA9IDEwLAkvKiAwLi4xNyAqLworCS5tb2RlCQkgICA9IFJPVF9RVUFEX0VOQyB8IFJPVF9ERUJFLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3JvdGFyeV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IElSUV9DTlQsCisJCS5lbmQgPSBJUlFfQ05ULAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9yb3RhcnlfZGV2aWNlID0geworCS5uYW1lCQk9ICJiZmluLXJvdGFyeSIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzIAk9IEFSUkFZX1NJWkUoYmZpbl9yb3RhcnlfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgCT0gYmZpbl9yb3RhcnlfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX3JvdGFyeV9kYXRhLAorCX0sCit9OworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBydGNfZGV2aWNlID0gewogCS5uYW1lID0gInJ0Yy1iZmluIiwKQEAgLTMxNCw2ICszNDIsMTYgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfY29uZmlnIG11c2JfY29uZmlnID0geworCS5tdWx0aXBvaW50CT0gMCwKKwkuZHluX2ZpZm8JPSAwLAorCS5zb2Z0X2Nvbgk9IDEsCisJLmRtYQkJPSAxLAorCS5udW1fZXBzCT0gNywKKwkuZG1hX2NoYW5uZWxzCT0gNywKKwkuZ3Bpb192cnNlbAk9IEdQSU9fUEU3LAorfTsKKwogc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSBtdXNiX3BsYXQgPSB7CiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfT1RHKQogCS5tb2RlCQk9IE1VU0JfT1RHLApAQCAtMzIyLDcgKzM2MCw3IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQykKIAkubW9kZQkJPSBNVVNCX1BFUklQSEVSQUwsCiAjZW5kaWYKLQkubXVsdGlwb2ludAk9IDAsCisJLmNvbmZpZwkJPSAmbXVzYl9jb25maWcsCiB9OwogCiBzdGF0aWMgdTY0IG11c2JfZG1hbWFzayA9IH4odTMyKTA7CkBAIC0zNjcsNyArNDA1LDcgQEAKIAl7CiAJCS5uYW1lID0gImxpbnV4IGtlcm5lbChuYW5kKSIsCiAJCS5vZmZzZXQgPSAwLAotCQkuc2l6ZSA9IDQgKiBTSVpFXzFNLAorCQkuc2l6ZSA9IDQgKiAxMDI0ICogMTAyNCwKIAl9LAogCXsKIAkJLm5hbWUgPSAiZmlsZSBzeXN0ZW0obmFuZCkiLApAQCAtNDI0LDcgKzQ2Miw3IEBACiAJCS5vZmZzZXQgICAgID0gMCwKIAl9LCB7CiAJCS5uYW1lICAgICAgID0gImxpbnV4IGtlcm5lbChub3IpIiwKLQkJLnNpemUgICAgICAgPSAweDFDMDAwMCwKKwkJLnNpemUgICAgICAgPSAweDQwMDAwMCwKIAkJLm9mZnNldCAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCiAJfSwgewogCQkubmFtZSAgICAgICA9ICJmaWxlIHN5c3RlbShub3IpIiwKQEAgLTQ0MSw3ICs0NzksNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGV6a2l0X2ZsYXNoX3Jlc291cmNlID0gewogCS5zdGFydCA9IDB4MjAwMDAwMDAsCi0JLmVuZCAgID0gMHgyMGZmZmZmZiwKKwkuZW5kICAgPSAweDIxZmZmZmZmLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogfTsKIApAQCAtNTUxLDcgKzU4OSw3IEBACiB7CiAJLm1vZGFsaWFzCQk9ICJhZDc4NzciLAogCS5wbGF0Zm9ybV9kYXRhCQk9ICZiZmluX2FkNzg3N190c19pbmZvLAotCS5pcnEJCQk9IElSUV9QSjExLAorCS5pcnEJCQk9IElSUV9QSjExLAkvKiBuZXdlciBib2FyZHMgKFJldiAxLjQrKSB1c2UgSVJRX1BCNCAqLwogCS5tYXhfc3BlZWRfaHoJCT0gMTI1MDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCiAJLmJ1c19udW0JCT0gMCwKIAkuY2hpcF9zZWxlY3QgIAkJPSAyLApAQCAtODEwLDYgKzg0OCwxMCBAQAogCSZiZjU0eF9rcGFkX2RldmljZSwKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfQkZJTl9ST1RBUlkpIHx8IGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX0JGSU5fUk9UQVJZX01PRFVMRSkKKwkmYmZpbl9yb3RhcnlfZGV2aWNlLAorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19JMkNfQkxBQ0tGSU5fVFdJKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfQkxBQ0tGSU5fVFdJX01PRFVMRSkKIAkmaTJjX2JmaW5fdHdpMF9kZXZpY2UsCiAjaWYgIWRlZmluZWQoQ09ORklHX0JGNTQyKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2hlYWQuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9oZWFkLlMKaW5kZXggNGQ1Y2ZlYS4uOTNiMzYxZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2hlYWQuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaGVhZC5TCkBAIC03MywyNSArNzMsMTkgQEAKIAl3W3AwXSA9IHIwLmw7CiAJc3N5bmM7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19CRjU0eCkKKwkvKiBlbmFibGUgc2VsZiByZWZyZXNoIHZpYSBTUlJFUSAqLwogCVAyLkggPSBoaShFQklVX1JTVENUTCk7CiAJUDIuTCA9IGxvKEVCSVVfUlNUQ1RMKTsKIAlSMCA9IFtQMl07CiAJQklUU0VUIChSMCwgMyk7Ci0jZWxzZQotCVAyLkggPSBoaShFQklVX1NER0NUTCk7Ci0JUDIuTCA9IGxvKEVCSVVfU0RHQ1RMKTsKLQlSMCA9IFtQMl07Ci0JQklUU0VUIChSMCwgMjQpOwotI2VuZGlmCiAJW1AyXSA9IFIwOwogCVNTWU5DOwotI2lmIGRlZmluZWQoQ09ORklHX0JGNTR4KQorCisJLyogd2FpdCBmb3IgU1JBQ0sgYml0IHRvIGJlIHNldCAqLwogLkxTUlJfTU9ERToKIAlSMCA9IFtQMl07CiAJQ0MgPSBCSVRUU1QoUjAsIDQpOwogCWlmICFDQyBKVU1QIC5MU1JSX01PREU7Ci0jZW5kaWYKIAogCXIwID0gQ09ORklHX1ZDT19NVUxUICYgNjM7ICAgICAgIC8qIExvYWQgdGhlIFZDTyBtdWx0aXBsaWVyICAgICAgICAgKi8KIAlyMCA9IHIwIDw8IDk7ICAgICAgICAgICAgICAgICAgICAvKiBTaGlmdCBpdCBvdmVyLCAgICAgICAgICAgICAgICAgICovCkBAIC0xMDAsNiArOTQsOSBAQAogCXIxID0gUExMX0JZUEFTUzsgICAgICAgICAgICAgICAgIC8qIEJ5cGFzcyB0aGUgUExMPyAgICAgICAgICAgICAgICAgKi8KIAlyMSA9IHIxIDw8IDg7ICAgICAgICAgICAgICAgICAgICAvKiBTaGlmdCBpdCBvdmVyICAgICAgICAgICAgICAgICAgICovCiAJcjAgPSByMSB8IHIwOyAgICAgICAgICAgICAgICAgICAgLyogYWRkIHRoZW0gYWxsIHRvZ2V0aGVyICAgICAgICAgICAqLworI2lmZGVmIEFOT01BTFlfMDUwMDAyNjUKKwlCSVRTRVQocjAsIDE1KTsgICAgICAgICAgICAgICAgICAvKiBBZGQgMjUwIG1WIG9mIGh5c3RlcmVzaXMgdG8gU1BPUlQgaW5wdXQgcGlucyAqLworI2VuZGlmCiAKIAlwMC5oID0gaGkoUExMX0NUTCk7CiAJcDAubCA9IGxvKFBMTF9DVEwpOyAgICAgICAgICAgICAgLyogTG9hZCB0aGUgYWRkcmVzcyAgICAgICAgICAgICAgICAqLwpAQCAtMTIzLDcgKzEyMCw3IEBACiAJd1twMF0gPSByMC5sOwogCXNzeW5jOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQkY1NHgpCisJLyogZGlzYWJsZSBzZWxmIHJlZnJlc2ggYnkgY2xlYXJpbmcgU1JSRVEgKi8KIAlQMi5IID0gaGkoRUJJVV9SU1RDVEwpOwogCVAyLkwgPSBsbyhFQklVX1JTVENUTCk7CiAJUjAgPSBbUDJdOwpAQCAtMTU1LDQxICsxNTIsNiBAQAogCXIwLmggPSBoaShtZW1fRERSQ1RMMik7CiAJW3AwXSA9IHIwOwogCXNzeW5jOwotI2Vsc2UKLQlwMC5sID0gbG8oRUJJVV9TRFJSQyk7Ci0JcDAuaCA9IGhpKEVCSVVfU0RSUkMpOwotCXIwID0gbWVtX1NEUlJDOwotCXdbcDBdID0gcjAubDsKLQlzc3luYzsKLQotCXAwLmwgPSBMTyhFQklVX1NEQkNUTCk7Ci0JcDAuaCA9IEhJKEVCSVVfU0RCQ1RMKTsgICAgIC8qIFNEUkFNIE1lbW9yeSBCYW5rIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlyMCA9IG1lbV9TREJDVEw7Ci0Jd1twMF0gPSByMC5sOwotCXNzeW5jOwotCi0JUDIuSCA9IGhpKEVCSVVfU0RHQ1RMKTsKLQlQMi5MID0gbG8oRUJJVV9TREdDVEwpOwotCVIwID0gW1AyXTsKLQlCSVRDTFIgKFIwLCAyNCk7Ci0JcDAuaCA9IGhpKEVCSVVfU0RTVEFUKTsKLQlwMC5sID0gbG8oRUJJVV9TRFNUQVQpOwotCXIyLmwgPSB3W3AwXTsKLQljYyA9IGJpdHRzdChyMiwzKTsKLQlpZiAhY2MganVtcCAuTHNraXA7Ci0JTk9QOwotCUJJVFNFVCAoUjAsIDIzKTsKLS5Mc2tpcDoKLQlbUDJdID0gUjA7Ci0JU1NZTkM7Ci0KLQlSMC5MID0gbG8obWVtX1NER0NUTCk7Ci0JUjAuSCA9IGhpKG1lbV9TREdDVEwpOwotCVIxID0gW3AyXTsKLQlSMSA9IFIxIHwgUjA7Ci0JW1AyXSA9IFIxOwotCVNTWU5DOwotI2VuZGlmCiAKIAlSVFM7CiBFTkRQUk9DKF9zdGFydF9kbWFfY29kZSkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYW5vbWFseS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKaW5kZXggM2FkNTk2NS4uODE2YjA5MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKQEAgLTIsMTggKzIsMTggQEAKICAqIEZpbGU6IGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvYW5vbWFseS5oCiAgKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogLyogVGhpcyBmaWxlIHNob3VsZSBiZSB1cCB0byBkYXRlIHdpdGg6Ci0gKiAgLSBSZXZpc2lvbiBFLCAxMS8yOC8yMDA3OyBBRFNQLUJGNTQyL0JGNTQ0L0JGNTQ3L0JGNTQ4L0JGNTQ5IEJsYWNrZmluIFByb2Nlc3NvciBBbm9tYWx5IExpc3QKKyAqICAtIFJldmlzaW9uIEcsIDA4LzA3LzIwMDg7IEFEU1AtQkY1NDIvQkY1NDQvQkY1NDcvQkY1NDgvQkY1NDkgQmxhY2tmaW4gUHJvY2Vzc29yIEFub21hbHkgTGlzdAogICovCiAKICNpZm5kZWYgX01BQ0hfQU5PTUFMWV9IXwogI2RlZmluZSBfTUFDSF9BTk9NQUxZX0hfCiAKLS8qIE11bHRpLUlzc3VlIEluc3RydWN0aW9uIHdpdGggZHNwMzJzaGlmdGltbSBpbiBzbG90MSBhbmQgUC1yZWcgU3RvcmUgaW4gc2xvdCAyIE5vdCBTdXBwb3J0ZWQgKi8KKy8qIE11bHRpLUlzc3VlIEluc3RydWN0aW9uIHdpdGggZHNwMzJzaGlmdGltbSBpbiBzbG90MSBhbmQgUC1yZWcgU3RvcmUgaW4gc2xvdDIgTm90IFN1cHBvcnRlZCAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMDc0ICgxKQogLyogRE1BX1JVTiBCaXQgSXMgTm90IFZhbGlkIGFmdGVyIGEgUGVyaXBoZXJhbCBSZWNlaXZlIENoYW5uZWwgRE1BIFN0b3BzICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAxMTkgKDEpCkBAIC0zNiwxNCArMzYsMTQgQEAKIC8qIFRXSSBTbGF2ZSBCb290IE1vZGUgSXMgTm90IEZ1bmN0aW9uYWwgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMyNCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQogLyogRXh0ZXJuYWwgRklGTyBCb290IE1vZGUgSXMgTm90IEZ1bmN0aW9uYWwgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDMyNSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzI1IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCiAvKiBEYXRhIExvc3QgV2hlbiBDb3JlIGFuZCBETUEgQWNjZXNzZXMgQXJlIE1hZGUgdG8gdGhlIFVTQiBGSUZPIFNpbXVsdGFuZW91c2x5ICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMjcgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKIC8qIEluY29ycmVjdCBBY2Nlc3Mgb2YgT1RQX1NUQVRVUyBEdXJpbmcgb3RwX3dyaXRlKCkgRnVuY3Rpb24gKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMyOCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQogLyogU3luY2hyb25vdXMgQnVyc3QgRmxhc2ggQm9vdCBNb2RlIElzIE5vdCBGdW5jdGlvbmFsICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMjkgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKLS8qIEhvc3QgRE1BIEJvb3QgTW9kZSBJcyBOb3QgRnVuY3Rpb25hbCAqLworLyogSG9zdCBETUEgQm9vdCBNb2RlcyBBcmUgTm90IEZ1bmN0aW9uYWwgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMzMCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQogLyogSW5hZGVxdWF0ZSBUaW1pbmcgTWFyZ2lucyBvbiBERFIgRFFTIHRvIERRIGFuZCBEUU0gU2tldyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzM0IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCkBAIC02MSwyNiArNjEsMTAyIEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNDQgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKIC8qIFVTQiBDYWxpYnJhdGlvbiBWYWx1ZSBJcyBOb3QgSW50aWFsaXplZCAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzQ2IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCi0vKiBCb290IFJPTSBLZXJuZWwgSW5jb3JyZWN0bHkgQWx0ZXJzIFJlc2V0IFZhbHVlIG9mIFVTQiBSZWdpc3RlciAqLworLyogVVNCIENhbGlicmF0aW9uIFZhbHVlIHRvIHVzZSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzQ2X3ZhbHVlIDB4NTQxMQorLyogUHJlYm9vdCBSb3V0aW5lIEluY29ycmVjdGx5IEFsdGVycyBSZXNldCBWYWx1ZSBvZiBVU0IgUmVnaXN0ZXIgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM0NyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQogLyogRGF0YSBMb3N0IHdoZW4gQ29yZSBSZWFkcyBTREggRGF0YSBGSUZPICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNDkgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKIC8qIFBMTCBTdGF0dXMgUmVnaXN0ZXIgSXMgSW5hY2N1cmF0ZSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzUxIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCisvKiBiZnJvbV9TeXNDb250cm9sKCkgRmlybXdhcmUgRnVuY3Rpb24gUGVyZm9ybXMgSW1wcm9wZXIgU3lzdGVtIFJlc2V0ICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNTMgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIFJlZ3VsYXRvciBQcm9ncmFtbWluZyBCbG9ja2VkIHdoZW4gSGliZXJuYXRlIFdha2V1cCBTb3VyY2UgUmVtYWlucyBBY3RpdmUgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1NSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorLyogU3lzdGVtIFN0YWxsZWQgRHVyaW5nIEEgQ29yZSBBY2Nlc3MgVG8gQU1DIFdoaWxlIEEgQ29yZSBBY2Nlc3MgVG8gTkZDIEZJRk8gSXMgUmVxdWlyZWQgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1NiAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQogLyogU2VyaWFsIFBvcnQgKFNQT1JUKSBNdWx0aWNoYW5uZWwgVHJhbnNtaXQgRmFpbHVyZSB3aGVuIENoYW5uZWwgMCBJcyBEaXNhYmxlZCAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzU3ICgxKQogLyogRXh0ZXJuYWwgTWVtb3J5IFJlYWQgQWNjZXNzIEhhbmdzIENvcmUgV2l0aCBQTEwgQnlwYXNzICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNjAgKDEpCiAvKiBETUFzIHRoYXQgR28gVXJnZW50IGR1cmluZyBUaWdodCBDb3JlIFdyaXRlcyB0byBFeHRlcm5hbCBNZW1vcnkgQXJlIEJsb2NrZWQgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM2NSAoMSkKKy8qIFdVUkVTRVQgQml0IEluIFNZU0NSIFJlZ2lzdGVyIERvZXMgTm90IFByb3Blcmx5IEluZGljYXRlIEhpYmVybmF0ZSBXYWtlLVVwICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNjcgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKIC8qIEFkZHJlc3NpbmcgQ29uZmxpY3QgYmV0d2VlbiBCb290IFJPTSBhbmQgQXN5bmNocm9ub3VzIE1lbW9yeSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzY5ICgxKQorLyogRGVmYXVsdCBQTEwgTVNFTCBhbmQgU1NFTCBTZXR0aW5ncyBDYW4gQ2F1c2UgNDAwTUh6IFByb2R1Y3QgVG8gVmlvbGF0ZSBTcGVjaWZpY2F0aW9ucyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzcwIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCiAvKiBQb3NzaWJsZSBSRVRTIFJlZ2lzdGVyIENvcnJ1cHRpb24gd2hlbiBTdWJyb3V0aW5lIElzIHVuZGVyIDUgQ3ljbGVzIGluIER1cmF0aW9uICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzNzEgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNzEgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIFVTQiBEUC9ETSBEYXRhIFBpbnMgTWF5IExvc2UgU3RhdGUgV2hlbiBFbnRlcmluZyBIaWJlcm5hdGUgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM3MiAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQogLyogTW9iaWxlIEREUiBPcGVyYXRpb24gTm90IEZ1bmN0aW9uYWwgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM3NyAoMSkKIC8qIFNlY3VyaXR5L0F1dGhlbnRpY2F0aW9uIFNwZWVkcGF0aCBDYXVzZXMgQXV0aGVudGljYXRpb24gVG8gRmFpbCBUbyBJbml0aWF0ZSAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzc4ICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzc4IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiAxNi1CaXQgTkFORCBGTEFTSCBCb290IE1vZGUgSXMgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM3OSAoMSkKKy8qIDgtQml0IE5BTkQgRmxhc2ggQm9vdCBNb2RlIE5vdCBGdW5jdGlvbmFsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODIgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKKy8qIFNvbWUgQVRBUEkgTW9kZXMgQXJlIE5vdCBGdW5jdGlvbmFsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODMgKDEpCisvKiBCb290IGZyb20gT1RQIE1lbW9yeSBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzg1IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCisvKiBiZnJvbV9TeXNDb250cm9sKCkgRmlybXdhcmUgUm91dGluZSBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzg2IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCisvKiBQcm9ncmFtbWFibGUgUHJlYm9vdCBTZXR0aW5ncyBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzg3IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCisvKiBDUkMzMiBDaGVja3N1bSBTdXBwb3J0IE5vdCBGdW5jdGlvbmFsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODggKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKKy8qIFJlc2V0IFZlY3RvciBNdXN0IE5vdCBCZSBpbiBTRFJBTSBNZW1vcnkgU3BhY2UgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4OSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorLyogQ2hhbmdlZCBNZWFuaW5nIG9mIEJDT0RFIEZpZWxkIGluIFNZU0NSIFJlZ2lzdGVyICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzOTAgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKKy8qIFJlcGVhdGVkIEJvb3QgZnJvbSBQYWdlLU1vZGUgb3IgQnVyc3QtTW9kZSBGbGFzaCBNZW1vcnkgTWF5IEZhaWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5MSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorLyogcFRlbXBDdXJyZW50IE5vdCBQcmVzZW50IGluIEFESV9CT09UX0RBVEEgU3RydWN0dXJlICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzOTIgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKKy8qIERlcHJlY2F0ZWQgVmFsdWUgb2YgZFRlbXBCeXRlQ291bnQgaW4gQURJX0JPT1RfREFUQSBTdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5MyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorLyogTG9nIEJ1ZmZlciBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzk0IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCisvKiBIb29rIFJvdXRpbmUgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5NSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorLyogSGVhZGVyIEluZGlyZWN0IEJpdCBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzk2IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCisvKiBCS19PTkVTLCBCS19aRVJPUywgYW5kIEJLX0RBVEVDT0RFIENvbnN0YW50cyBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzk3IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCisvKiBMb2NrYm94IFNFU1IgRGlzYWxsb3dzIENlcnRhaW4gVXNlciBJbnRlcnJ1cHRzICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MDQgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIExvY2tib3ggU0VTUiBGaXJtd2FyZSBEb2VzIE5vdCBTYXZlL1Jlc3RvcmUgRnVsbCBDb250ZXh0ICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MDUgKDEpCisvKiBMb2NrYm94IFNFU1IgQXJndW1lbnQgQ2hlY2tpbmcgRG9lcyBOb3QgQ2hlY2sgTDIgTWVtb3J5IFByb3RlY3Rpb24gUmFuZ2UgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQwNiAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogTG9ja2JveCBTRVNSIEZpcm13YXJlIEFyZ3VtZW50cyBBcmUgTm90IFJldGFpbmVkIEFmdGVyIEZpcnN0IEluaXRpYWxpemF0aW9uICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MDcgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIExvY2tib3ggRmlybXdhcmUgTWVtb3J5IENsZWFudXAgUm91dGluZSBEb2VzIG5vdCBDbGVhciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQwOCAoMSkKKy8qIExvY2tib3ggZmlybXdhcmUgbGVhdmVzIE1ETUEwIGNoYW5uZWwgZW5hYmxlZCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDA5IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBiZnJvbV9TeXNDb250cm9sKCkgRmlybXdhcmUgRnVuY3Rpb24gQ2Fubm90IGJlIFVzZWQgdG8gRW50ZXIgUG93ZXIgU2F2aW5nIE1vZGVzICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MTEgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIE5BTkQgQm9vdCBNb2RlIE5vdCBDb21wYXRpYmxlIFdpdGggU29tZSBOQU5EIEZsYXNoIERldmljZXMgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQxMyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogT1RQX0NIRUNLX0ZPUl9QUkVWX1dSSVRFIEJpdCBpcyBOb3QgRnVuY3Rpb25hbCBpbiBiZnJvbV9PdHBXcml0ZSgpIEFQSSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDE0IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBTcGVjdWxhdGl2ZSBGZXRjaGVzIENhbiBDYXVzZSBVbmRlc2lyZWQgRXh0ZXJuYWwgRklGTyBPcGVyYXRpb25zICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MTYgKDEpCisvKiBNdWx0aWNoYW5uZWwgU1BPUlQgQ2hhbm5lbCBNaXNhbGlnbm1lbnQgVW5kZXIgU3BlY2lmaWMgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDI1ICgxKQorLyogU3BlY3VsYXRpdmUgRmV0Y2hlcyBvZiBJbmRpcmVjdC1Qb2ludGVyIEluc3RydWN0aW9ucyBDYW4gQ2F1c2UgU3B1cmlvdXMgSGFyZHdhcmUgRXJyb3JzICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MjYgKDEpCisvKiBDT1JFX0VQUElfUFJJTyBiaXQgYW5kIFNZU19FUFBJX1BSSU8gYml0IGluIHRoZSBITURNQTFfQ09OVFJPTCByZWdpc3RlciBhcmUgbm90IGZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQyNyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogV0JfRURHRSBCaXQgaW4gTkZDX0lSUVNUQVQgSW5jb3JyZWN0bHkgQmVoYXZlcyBhcyBhIEJ1ZmZlciBTdGF0dXMgQml0IEluc3RlYWQgb2YgYW4gSVJRIFN0YXR1cyBCaXQgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQyOSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogU29mdHdhcmUgU3lzdGVtIFJlc2V0IENvcnJ1cHRzIFBMTF9MT0NLQ05UIFJlZ2lzdGVyICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MzAgKF9fU0lMSUNPTl9SRVZJU0lPTl9fID49IDIpCiAKIC8qIEFub21hbGllcyB0aGF0IGRvbid0IGV4aXN0IG9uIHRoaXMgcHJvYyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMTI1ICgwKQpAQCAtOTMsNiArMTY5LDcgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2MyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2NiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3MyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDMwNyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMyMyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM2MyAoMCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NDguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NDguaAppbmRleCBlNzQ4NTg4Li40OWY5YjQwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTQ4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0OC5oCkBAIC0zMCw4ICszMCw2IEBACiAjaWZuZGVmIF9fTUFDSF9CRjU0OF9IX18KICNkZWZpbmUgX19NQUNIX0JGNTQ4X0hfXwogCi0jZGVmaW5lIFNVUFBPUlRFRF9SRVZJRCAwCi0KICNkZWZpbmUgT0ZGU0VUXyh4KSAoKHgpICYgMHgwMDAwRkZGRikKIAogLypzb21lIG1pc2MgZGVmaW5lcyovCkBAIC0xMDgsMjAgKzEwNiwyMyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfQkY1NDIpCiAjIGRlZmluZSBDUFUgICAiQkY1NDIiCi0jIGRlZmluZSBDUFVJRCAweDAyN2M4MDAwCisjIGRlZmluZSBDUFVJRCAweDI3ZGUKICNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTQ0KQotIyBkZWZpbmUgQ1BVICJCRjU0NCIKLSMgZGVmaW5lIENQVUlEIDB4MDI3YzgwMDAKKyMgZGVmaW5lIENQVSAgICJCRjU0NCIKKyMgZGVmaW5lIENQVUlEIDB4MjdkZQogI2VsaWYgZGVmaW5lZChDT05GSUdfQkY1NDcpCi0jIGRlZmluZSBDUFUgIkJGNTQ3IgorIyBkZWZpbmUgQ1BVICAgIkJGNTQ3IgorIyBkZWZpbmUgQ1BVSUQgMHgyN2RlCiAjZWxpZiBkZWZpbmVkKENPTkZJR19CRjU0OCkKLSMgZGVmaW5lIENQVSAiQkY1NDgiCi0jIGRlZmluZSBDUFVJRCAweDAyN2M2MDAwCisjIGRlZmluZSBDUFUgICAiQkY1NDgiCisjIGRlZmluZSBDUFVJRCAweDI3ZGUKICNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTQ5KQotIyBkZWZpbmUgQ1BVICJCRjU0OSIKLSNlbHNlCi0jIGRlZmluZSBDUFUgIlVOS05PV04iCi0jIGRlZmluZSBDUFVJRCAweDAKKyMgZGVmaW5lIENQVSAgICJCRjU0OSIKKyMgZGVmaW5lIENQVUlEIDB4MjdkZQorI2VuZGlmCisKKyNpZm5kZWYgQ1BVCisjZXJyb3IgVW5rbm93biBDUFUgdHlwZSAtIFRoaXMga2VybmVsIGRvZXNuJ3Qgc2VlbSB0byBiZSBjb25maWd1cmVkIHByb3Blcmx5CiAjZW5kaWYKIAogI2VuZGlmCS8qIF9fTUFDSF9CRjQ4X0hfXyAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvbWVtX21hcC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9tZW1fbWFwLmgKaW5kZXggZjk5ZjQ3Yi4uYTIyMjg0MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9tZW1fbWFwLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9tZW1fbWFwLmgKQEAgLTk0LDEzICs5NCwxMyBAQAogI2VuZGlmIC8qQ09ORklHX0JGSU5fRENBQ0hFKi8KIAogLyogTGV2ZWwgMiBNZW1vcnkgKi8KLSNpZiAhZGVmaW5lZChDT05GSUdfQkY1NDIpCi0jIGRlZmluZSBMMl9TVEFSVCAgICAgICAgICAweEZFQjAwMDAwCi0jIGlmIGRlZmluZWQoQ09ORklHX0JGNTQ0KQotIyAgZGVmaW5lIEwyX0xFTkdUSCAgICAgICAgMHgxMDAwMAotIyBlbHNlCi0jICBkZWZpbmUgTDJfTEVOR1RIICAgICAgICAweDIwMDAwCi0jIGVuZGlmCisjZGVmaW5lIEwyX1NUQVJUICAgICAgICAgICAgMHhGRUIwMDAwMAorI2lmIGRlZmluZWQoQ09ORklHX0JGNTQyKQorIyBkZWZpbmUgTDJfTEVOR1RIICAgICAgICAgIDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTQ0KQorIyBkZWZpbmUgTDJfTEVOR1RIICAgICAgICAgIDB4MTAwMDAKKyNlbHNlCisjIGRlZmluZSBMMl9MRU5HVEggICAgICAgICAgMHgyMDAwMAogI2VuZGlmCiAKIC8qIFNjcmF0Y2ggUGFkIE1lbW9yeSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2hlYWQuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9oZWFkLlMKaW5kZXggNzVlYTZhOS4uMzFhNzc3YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2hlYWQuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaGVhZC5TCkBAIC03Nyw2ICs3Nyw5IEBACiAJcjEgPSBQTExfQllQQVNTOyAgICAgICAgICAgICAgICAgLyogQnlwYXNzIHRoZSBQTEw/ICAgICAgICAgICAgICAgICAqLwogCXIxID0gcjEgPDwgODsgICAgICAgICAgICAgICAgICAgIC8qIFNoaWZ0IGl0IG92ZXIgICAgICAgICAgICAgICAgICAgKi8KIAlyMCA9IHIxIHwgcjA7ICAgICAgICAgICAgICAgICAgICAvKiBhZGQgdGhlbSBhbGwgdG9nZXRoZXIgICAgICAgICAgICovCisjaWZkZWYgQU5PTUFMWV8wNTAwMDI2NQorCUJJVFNFVChyMCwgMTUpOyAgICAgICAgICAgICAgICAgIC8qIEFkZCAyNTAgbVYgb2YgaHlzdGVyZXNpcyB0byBTUE9SVCBpbnB1dCBwaW5zICovCisjZW5kaWYKIAogCXAwLmggPSBoaShQTExfQ1RMKTsKIAlwMC5sID0gbG8oUExMX0NUTCk7ICAgICAgICAgICAgICAvKiBMb2FkIHRoZSBhZGRyZXNzICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IDVjNWQ3ZDcuLjIyOTkwZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC0yNzAsNSArMjcwLDcgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDE4MyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3MyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMSAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1MyAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4NiAoMSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmNTYxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmNTYxLmgKaW5kZXggM2VmOWU1Zi4uMThiMWIzYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZjU2MS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmY1NjEuaApAQCAtMzAsOCArMzAsNiBAQAogI2lmbmRlZiBfX01BQ0hfQkY1NjFfSF9fCiAjZGVmaW5lIF9fTUFDSF9CRjU2MV9IX18KIAotI2RlZmluZSBTVVBQT1JURURfUkVWSUQJCTB4MwotCiAjZGVmaW5lIE9GRlNFVF8oeCkgKCh4KSAmIDB4MDAwMEZGRkYpCiAKIC8qc29tZSBtaXNjIGRlZmluZXMqLwpAQCAtMjEzLDExICsyMTEsMTEgQEAKIAogI2lmZGVmIENPTkZJR19CRjU2MQogI2RlZmluZSBDUFUgIkJGNTYxIgotI2RlZmluZSBDUFVJRCAweDAyN2JiMDAwCisjZGVmaW5lIENQVUlEIDB4MjdiYgogI2VuZGlmCisKICNpZm5kZWYgQ1BVCi0jZGVmaW5lIENQVSAiVU5LTk9XTiIKLSNkZWZpbmUgQ1BVSUQgMHgwCisjZXJyb3IgVW5rbm93biBDUFUgdHlwZSAtIFRoaXMga2VybmVsIGRvZXNuJ3Qgc2VlbSB0byBiZSBjb25maWd1cmVkIHByb3Blcmx5CiAjZW5kaWYKIAogI2VuZGlmCQkJCS8qIF9fTUFDSF9CRjU2MV9IX18gICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCBlMGNlMGMxLi4wNDNiZmNmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTg1LDcgKzg1LDcgQEAKIAl1bnNpZ25lZCBpbnQJCXJ4X2RtYV9jaGFubmVsOwogCXN0cnVjdCB3b3JrX3N0cnVjdAl0eF9kbWFfd29ya3F1ZXVlOwogI2Vsc2UKLSMgaWYgQU5PTUFMWV8wNTAwMDIzMAorIyBpZiBBTk9NQUxZXzA1MDAwMzYzCiAJdW5zaWduZWQgaW50IGFub21hbHlfdGhyZXNob2xkOwogIyBlbmRpZgogI2VuZGlmCkBAIC0xNTgsNyArMTU4LDcgQEAKIAl9CiAJaWYgKHVhcnQtPnJ0c19waW4gPj0gMCkgewogCQlncGlvX3JlcXVlc3QodWFydC0+cnRzX3BpbiwgRFJJVkVSX05BTUUpOwotCQlncGlvX2RpcmVjdGlvbl9pbnB1dCh1YXJ0LT5ydHNfcGluLCAwKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVhcnQtPnJ0c19waW4sIDApOwogCX0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9tZW1fbWFwLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL21lbV9tYXAuaAppbmRleCBjMjZkODQ4Li5mMWQ0YzA2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL21lbV9tYXAuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL21lbV9tYXAuaApAQCAtMzUsOSArMzUsMTYgQEAKIC8qIE1lbW9yeSBNYXAgZm9yIEFEU1AtQkY1NjEgcHJvY2Vzc29ycyAqLwogCiAjaWZkZWYgQ09ORklHX0JGNTYxCi0jZGVmaW5lIEwxX0NPREVfU1RBUlQgICAgIDB4RkZBMDAwMDAKLSNkZWZpbmUgTDFfREFUQV9BX1NUQVJUICAgICAweEZGODAwMDAwCi0jZGVmaW5lIEwxX0RBVEFfQl9TVEFSVCAgICAgMHhGRjkwMDAwMAorI2RlZmluZSBDT1JFQV9MMV9DT0RFX1NUQVJUICAgICAgIDB4RkZBMDAwMDAKKyNkZWZpbmUgQ09SRUFfTDFfREFUQV9BX1NUQVJUICAgICAweEZGODAwMDAwCisjZGVmaW5lIENPUkVBX0wxX0RBVEFfQl9TVEFSVCAgICAgMHhGRjkwMDAwMAorI2RlZmluZSBDT1JFQl9MMV9DT0RFX1NUQVJUICAgICAgIDB4RkY2MDAwMDAKKyNkZWZpbmUgQ09SRUJfTDFfREFUQV9BX1NUQVJUICAgICAweEZGNDAwMDAwCisjZGVmaW5lIENPUkVCX0wxX0RBVEFfQl9TVEFSVCAgICAgMHhGRjUwMDAwMAorCisjZGVmaW5lIEwxX0NPREVfU1RBUlQgICAgICAgQ09SRUFfTDFfQ09ERV9TVEFSVAorI2RlZmluZSBMMV9EQVRBX0FfU1RBUlQgICAgIENPUkVBX0wxX0RBVEFfQV9TVEFSVAorI2RlZmluZSBMMV9EQVRBX0JfU1RBUlQgICAgIENPUkVBX0wxX0RBVEFfQl9TVEFSVAogCiAjZGVmaW5lIEwxX0NPREVfTEVOR1RIICAgICAgMHg0MDAwCiAKQEAgLTcyLDcgKzc5LDEwIEBACiAKIC8qIFNjcmF0Y2ggUGFkIE1lbW9yeSAqLwogCi0jZGVmaW5lIEwxX1NDUkFUQ0hfU1RBUlQJMHhGRkIwMDAwMAorI2RlZmluZSBDT1JFQV9MMV9TQ1JBVENIX1NUQVJUCTB4RkZCMDAwMDAKKyNkZWZpbmUgQ09SRUJfTDFfU0NSQVRDSF9TVEFSVAkweEZGNzAwMDAwCisKKyNkZWZpbmUgTDFfU0NSQVRDSF9TVEFSVAlDT1JFQV9MMV9TQ1JBVENIX1NUQVJUCiAjZGVmaW5lIEwxX1NDUkFUQ0hfTEVOR1RICTB4MTAwMAogCiAjZW5kaWYJCQkJLyogX01FTV9NQVBfNTMzX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKaW5kZXggODVmOGM3OS4uZGI1MzIxOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUwpAQCAtMSwxNDggKzEsOTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIExHIFNvZnQgSW5kaWEKKyAqIEJsYWNrZmluIGNhY2hlIGNvbnRyb2wgY29kZQogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIGNhY2hlIGNvbnRyb2wgc3VwcG9ydAorICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgorICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiAgKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxhc20vY3BsYi5oPgotI2luY2x1ZGUgPGFzbS9lbnRyeS5oPgogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC50ZXh0CiAKLS8qCi0gKiBibGFja2Zpbl9jYWNoZV9mbHVzaF9yYW5nZShzdGFydCwgZW5kKQotICogSW52YWxpZGF0ZSBhbGwgY2FjaGUgbGluZXMgYXNzb2NvaWF0ZWQgd2l0aCB0aGlzCi0gKiBhcmVhIG9mIG1lbW9yeS4KKy8qIFNpbmNlIGFsbCBMMSBjYWNoZXMgd29yayB0aGUgc2FtZSB3YXksIHdlIHVzZSB0aGUgc2FtZSBtZXRob2QgZm9yIGZsdXNoaW5nCisgKiB0aGVtLiAgT25seSB0aGUgYWN0dWFsIGZsdXNoIGluc3RydWN0aW9uIGRpZmZlcnMuICBXZSB3cml0ZSB0aGlzIGluIGFzbSBhcworICogR0NDIGNhbiBiZSBoYXJkIHRvIGNvYXggaW50byB3cml0aW5nIG5pY2UgaGFyZHdhcmUgbG9vcHMuCiAgKgotICogc3RhcnQ6CVN0YXJ0IGFkZHJlc3MKLSAqIGVuZDoJCUVuZCBhZGRyZXNzCisgKiBBbHNvLCB3ZSBhc3N1bWUgdGhlIGZvbGxvd2luZyByZWdpc3RlciBzZXR1cDoKKyAqIFIwID0gc3RhcnQgYWRkcmVzcworICogUjEgPSBlbmQgYWRkcmVzcwogICovCi1FTlRSWShfYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlKQorLm1hY3JvIGRvX2ZsdXNoIGZsdXNoaW5zOnJlcSBvcHRmbHVzaGlucyBvcHRub3BpbnMgbGFiZWwKKworCS8qIGVuZCA9ICgoZW5kIC0gMSkgJiAtTDFfQ0FDSEVfQllURVMpICsgTDFfQ0FDSEVfQllURVM7ICovCisJUjEgKz0gLTE7CiAJUjIgPSAtTDFfQ0FDSEVfQllURVM7Ci0JUjIgPSBSMCAmIFIyOwotCVAwID0gUjI7Ci0JUDEgPSBSMTsKLQlDU1lOQyhSMyk7Ci0JSUZMVVNIIFtQMF07CisJUjEgPSBSMSAmIFIyOworCVIxICs9IEwxX0NBQ0hFX0JZVEVTOworCisJLyogY291bnQgPSAoZW5kIC0gc3RhcnQpID4+IEwxX0NBQ0hFX1NISUZUICovCisJUjIgPSBSMSAtIFIwOworCVIyID4+PSBMMV9DQUNIRV9TSElGVDsKKwlQMSA9IFIyOworCisuaWZuYiBcbGFiZWwKK1xsYWJlbCA6CisuZW5kaWYKKwlQMCA9IFIwOworCUxTRVRVUCAoMWYsIDJmKSBMQzEgPSBQMTsKIDE6Ci0JSUZMVVNIIFtQMCsrXTsKLQlDQyA9IFAwIDwgUDEgKGl1KTsKLQlJRiBDQyBKVU1QIDFiIChicCk7Ci0JSUZMVVNIIFtQMF07Ci0JU1NZTkMoUjMpOworLmlmbmIgXG9wdGZsdXNoaW5zCisJXG9wdGZsdXNoaW5zIFtQMF07CisuZW5kaWYKKy5pZmIgXG9wdG5vcGlucworMjoKKy5lbmRpZgorCVxmbHVzaGlucyBbUDArK107CisuaWZuYiBcb3B0bm9waW5zCisyOiBcb3B0bm9waW5zOworLmVuZGlmCisKIAlSVFM7CisuZW5kbQorCisvKiBJbnZhbGlkYXRlIGFsbCBpbnN0cnVjdGlvbiBjYWNoZSBsaW5lcyBhc3NvY29pYXRlZCB3aXRoIHRoaXMgbWVtb3J5IGFyZWEgKi8KK0VOVFJZKF9ibGFja2Zpbl9pY2FjaGVfZmx1c2hfcmFuZ2UpCisJZG9fZmx1c2ggSUZMVVNILCAsIG5vcAogRU5EUFJPQyhfYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlKQogCi0vKgotICogYmxhY2tmaW5faWNhY2hlX2RjYWNoZV9mbHVzaF9yYW5nZShzdGFydCwgZW5kKQotICogRkxVU0ggYWxsIGNhY2hlIGxpbmVzIGFzc29jb2lhdGVkIHdpdGggdGhpcwotICogYXJlYSBvZiBtZW1vcnkuCi0gKgotICogc3RhcnQ6CVN0YXJ0IGFkZHJlc3MKLSAqIGVuZDoJCUVuZCBhZGRyZXNzCi0gKi8KLQorLyogRmx1c2ggYWxsIGNhY2hlIGxpbmVzIGFzc29jb2lhdGVkIHdpdGggdGhpcyBhcmVhIG9mIG1lbW9yeS4gKi8KIEVOVFJZKF9ibGFja2Zpbl9pY2FjaGVfZGNhY2hlX2ZsdXNoX3JhbmdlKQotCVIyID0gLUwxX0NBQ0hFX0JZVEVTOwotCVIyID0gUjAgJiBSMjsKLQlQMCA9IFIyOwotCVAxID0gUjE7Ci0JQ1NZTkMoUjMpOwotCUlGTFVTSCBbUDBdOwotMToKLQlGTFVTSCBbUDBdOwotCUlGTFVTSCBbUDArK107Ci0JQ0MgPSBQMCA8IFAxIChpdSk7Ci0JSUYgQ0MgSlVNUCAxYiAoYnApOwotCUlGTFVTSCBbUDBdOwotCUZMVVNIIFtQMF07Ci0JU1NZTkMoUjMpOwotCVJUUzsKKwlkb19mbHVzaCBJRkxVU0gsIEZMVVNICiBFTkRQUk9DKF9ibGFja2Zpbl9pY2FjaGVfZGNhY2hlX2ZsdXNoX3JhbmdlKQogCiAvKiBUaHJvdyBhd2F5IGFsbCBELWNhY2hlZCBkYXRhIGluIHNwZWNpZmllZCByZWdpb24gd2l0aG91dCBhbnkgb2JsaWdhdGlvbiB0bwotICogd3JpdGUgdGhlbSBiYWNrLiBIb3dldmVyLCB3ZSBtdXN0IGNsZWFuIHRoZSBELWNhY2hlZCBlbnRyaWVzIGFyb3VuZCB0aGUKLSAqIGJvdW5kYXJpZXMgb2YgdGhlIHN0YXJ0IGFuZC9vciBlbmQgYWRkcmVzcyBpcyBub3QgY2FjaGUgYWxpZ25lZC4KLSAqCi0gKiBTdGFydDogc3RhcnQgYWRkcmVzcywKLSAqIGVuZCAgOiBlbmQgYWRkcmVzcy4KKyAqIHdyaXRlIHRoZW0gYmFjay4gIFNpbmNlIHRoZSBCbGFja2ZpbiBJU0EgZG9lcyBub3QgaGF2ZSBhbiAiaW52YWxpZGF0ZSIKKyAqIGluc3RydWN0aW9uLCB3ZSB1c2UgZmx1c2gvaW52YWxpZGF0ZS4gIFBlcmhhcHMgYXMgYSBzcGVlZCBvcHRpbWl6YXRpb24gd2UKKyAqIGNvdWxkIGJhbmcgb24gdGhlIERURVNUIE1NUnMgLi4uCiAgKi8KLQogRU5UUlkoX2JsYWNrZmluX2RjYWNoZV9pbnZhbGlkYXRlX3JhbmdlKQotCVIyID0gLUwxX0NBQ0hFX0JZVEVTOwotCVIyID0gUjAgJiBSMjsKLQlQMCA9IFIyOwotCVAxID0gUjE7Ci0JQ1NZTkMoUjMpOwotCUZMVVNISU5WW1AwXTsKLTE6Ci0JRkxVU0hJTlZbUDArK107Ci0JQ0MgPSBQMCA8IFAxIChpdSk7Ci0JSUYgQ0MgSlVNUCAxYiAoYnApOwotCi0JLyogSWYgdGhlIGRhdGEgY3Jvc3NlcyBhIGNhY2hlIGxpbmUsIHRoZW4gd2UnbGwgYmUgcG9pbnRpbmcgdG8KLQkgKiB0aGUgbGFzdCBjYWNoZSBsaW5lLCBidXQgd29uJ3QgaGF2ZSBmbHVzaGVkL2ludmFsaWRhdGVkIGl0IHlldCwKLQkgKiBzbyBkbyBvbmUgbW9yZS4KLQkgKi8KLQlGTFVTSElOVltQMF07Ci0JU1NZTkMoUjMpOwotCVJUUzsKKwlkb19mbHVzaCBGTFVTSElOVgogRU5EUFJPQyhfYmxhY2tmaW5fZGNhY2hlX2ludmFsaWRhdGVfcmFuZ2UpCiAKKy8qIEZsdXNoIGFsbCBkYXRhIGNhY2hlIGxpbmVzIGFzc29jb2lhdGVkIHdpdGggdGhpcyBtZW1vcnkgYXJlYSAqLwogRU5UUlkoX2JsYWNrZmluX2RjYWNoZV9mbHVzaF9yYW5nZSkKLQlSMiA9IC1MMV9DQUNIRV9CWVRFUzsKLQlSMiA9IFIwICYgUjI7Ci0JUDAgPSBSMjsKLQlQMSA9IFIxOwotCUNTWU5DKFIzKTsKLQlGTFVTSFtQMF07Ci0xOgotCUZMVVNIW1AwKytdOwotCUNDID0gUDAgPCBQMSAoaXUpOwotCUlGIENDIEpVTVAgMWIgKGJwKTsKLQotCS8qIElmIHRoZSBkYXRhIGNyb3NzZXMgYSBjYWNoZSBsaW5lLCB0aGVuIHdlJ2xsIGJlIHBvaW50aW5nIHRvCi0JICogdGhlIGxhc3QgY2FjaGUgbGluZSwgYnV0IHdvbid0IGhhdmUgZmx1c2hlZCBpdCB5ZXQsIHNvIGRvCi0JICogb25lIG1vcmUuCi0JICovCi0JRkxVU0hbUDBdOwotCVNTWU5DKFIzKTsKLQlSVFM7CisJZG9fZmx1c2ggRkxVU0gsICwgLCAuTGRmcgogRU5EUFJPQyhfYmxhY2tmaW5fZGNhY2hlX2ZsdXNoX3JhbmdlKQogCisvKiBPdXIgaGVhZGVycyBjb252ZXJ0IHRoZSBwYWdlIHN0cnVjdHVyZSB0byBhbiBhZGRyZXNzLCBzbyBqdXN0IG5lZWQgdG8gZmx1c2gKKyAqIGl0cyBjb250ZW50cyBsaWtlIG5vcm1hbC4gIFdlIGtub3cgdGhlIHN0YXJ0IGFkZHJlc3MgaXMgcGFnZSBhbGlnbmVkICh3aGljaAorICogZ3JlYXRlciB0aGFuIG91ciBjYWNoZSBhbGlnbm1lbnQpLCBhcyBpcyB0aGUgZW5kIGFkZHJlc3MuICBTbyBqdXN0IGp1bXAgaW50bworICogdGhlIG1pZGRsZSBvZiB0aGUgZGNhY2hlIGZsdXNoIGZ1bmN0aW9uLgorICovCiBFTlRSWShfYmxhY2tmaW5fZGZsdXNoX3BhZ2UpCiAJUDEgPSAxIDw8IChQQUdFX1NISUZUIC0gTDFfQ0FDSEVfU0hJRlQpOwotCVAwID0gUjA7Ci0JQ1NZTkMoUjMpOwotCUZMVVNIW1AwXTsKLQlMU0VUVVAgKC5MZmwxLCAuTGZsMSkgTEMwID0gUDE7Ci0uTGZsMToJRkxVU0ggW1AwKytdOwotCVNTWU5DKFIzKTsKLQlSVFM7CisJanVtcCAuTGRmcjsKIEVORFBST0MoX2JsYWNrZmluX2RmbHVzaF9wYWdlKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jcHVmcmVxLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYwppbmRleCA3NWNkYWQyLi5jMjJjNDdiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYwpAQCAtMTU4LDggKzE1OCw2IEBACiAJCQkJCQkgZHBtX3N0YXRlX3RhYmxlW2luZGV4XS50c2NhbGUpOwogCX0KIAotCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7Ci0KIAlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gKGJmaW5fcmVhZF9QTExfTE9DS0NOVCgpIC8gKHNjbGsgLyAxMDAwMDAwKSkgKiAxMDAwOwogCS8qTm93ICxvbmx5IHN1cHBvcnQgb25lIGNwdSAqLwogCXBvbGljeS0+Y3VyID0gY2NsazsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwppbmRleCA4NDdjMTcyLi5jMTNmYThkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCkBAIC0xMjksNiArMTI5LDE4IEBACiAjZWxzZQogCWNhbGwgX19jcGxiX2hkcjsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX0RFQlVHX0RPVUJMRUZBVUxUCisJLyogV2hpbGUgd2Ugd2VyZSBwcm9jZXNzaW5nIHRoaXMsIGRpZCB3ZSBkb3VibGUgZmF1bHQ/ICovCisJcjcgPSBTRVFTVEFUOyAgICAgICAgICAgLyogcmVhc29uIGNvZGUgaXMgaW4gYml0IDU6MCAqLworCXI2LmwgPSBsbyhTRVFTVEFUX0VYQ0FVU0UpOworCXI2LmggPSBoaShTRVFTVEFUX0VYQ0FVU0UpOworCXI3ID0gcjcgJiByNjsKKwlyNiA9IDB4MjU7CisJQ0MgPSBSNyA9PSBSNjsKKwlpZiBDQyBKVU1QIF9kb3VibGVfZmF1bHQ7CisjZW5kaWYKKwogCURFQlVHX0hXVFJBQ0VfUkVTVE9SRShwNSwgcjcpCiAJUkVTVE9SRV9BTExfU1lTCiAJU1AgPSBFWF9TQ1JBVENIX1JFRzsKQEAgLTEzNiwxMSArMTQ4LDggQEAKIEVORFBST0MoX2V4X2ljcGxiX21pc3MpCiAKIEVOVFJZKF9leF9zeXNjYWxsKQotCShSNzo2LFA1OjQpID0gW3NwKytdOwotCUFTVEFUID0gW3NwKytdOwogCXJhaXNlIDE1OwkJLyogaW52b2tlZCBieSBUUkFQICMwLCBmb3Igc3lzIGNhbGwgKi8KLQlzcCA9IEVYX1NDUkFUQ0hfUkVHOwotCXJ0eAorCWp1bXAucyBfYmZpbl9yZXR1cm5fZnJvbV9leGNlcHRpb247CiBFTkRQUk9DKF9leF9zeXNjYWxsKQogCiBFTlRSWShfZXhfc29mdF9icCkKQEAgLTE4MSw4ICsxOTAsOCBAQAogCWlmIGNjIGp1bXAgLkxmaW5kX3ByaW9yaXR5X2RvbmU7CiAJanVtcC5zIC5MZmluZF9wcmlvcml0eV9zdGFydDsKIC5MZmluZF9wcmlvcml0eV9kb25lOgotCXA0LmwgPSBfZGVidWdnZXJfc3RlcDsKLQlwNC5oID0gX2RlYnVnZ2VyX3N0ZXA7CisJcDQubCA9IF9rZ2RiX3NpbmdsZV9zdGVwOworCXA0LmggPSBfa2dkYl9zaW5nbGVfc3RlcDsKIAlyNiA9IFtwNF07CiAJY2MgPSByNiA9PSAwOwogCWlmIGNjIGp1bXAgLkxkb19zaW5nbGVfc3RlcDsKQEAgLTI1MCw2ICsyNTksMjkgQEAKIAlSNz1MQzE7CiAJTEMxPVI3OwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfREVCVUdfRE9VQkxFRkFVTFQKKwkvKiBXaGlsZSB3ZSB3ZXJlIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLAorCSAqIGRpZCB3ZSBjYXVzZSBhbm90aGVyLCBhbmQgZG91YmxlIGZhdWx0PworCSAqLworCXI3ID0gU0VRU1RBVDsgICAgICAgICAgIC8qIHJlYXNvbiBjb2RlIGlzIGluIGJpdCA1OjAgKi8KKwlyNi5sID0gbG8oU0VRU1RBVF9FWENBVVNFKTsKKwlyNi5oID0gaGkoU0VRU1RBVF9FWENBVVNFKTsKKwlyNyA9IHI3ICYgcjY7CisJcjYgPSAweDI1OworCUNDID0gUjcgPT0gUjY7CisJaWYgQ0MgSlVNUCBfZG91YmxlX2ZhdWx0OworCisJLyogRGlkIHdlIGNhdXNlIGEgSFcgZXJyb3I/ICovCisJcDUubCA9IGxvKElMQVQpOworCXA1LmggPSBoaShJTEFUKTsKKwlyNiA9IFtwNV07CisJcjcgPSAweDIwOwkJLyogRGlkIEkganVzdCBjYXVzZSBhbnRoZXIgSFcgZXJyb3I/ICovCisJcjcgPSByNyAmIHIxOworCUNDID0gUjcgPT0gUjY7CisJaWYgQ0MgSlVNUCBfZG91YmxlX2ZhdWx0OworI2VuZGlmCisKIAkoUjc6NixQNTo0KSA9IFtzcCsrXTsKIAlBU1RBVCA9IFtzcCsrXTsKIAlzcCA9IEVYX1NDUkFUQ0hfUkVHOwpAQCAtMjkyLDYgKzMyNCwxNCBAQAogCVtwNF0gPSBwNTsKIAljc3luYzsKIAorI2lmbmRlZiBDT05GSUdfREVCVUdfRE9VQkxFRkFVTFQKKwkvKgorCSAqIFNhdmUgdGhlc2UgcmVnaXN0ZXJzLCBhcyB0aGV5IGFyZSBvbmx5IHZhbGlkIGluIGV4Y2VwdGlvbiBjb250ZXh0CisJICogICh3aGVyZSB3ZSBhcmUgbm93IC0gYXMgc29vbiBhcyB3ZSBkZWZlciB0byBJUlE1LCB0aGV5IGNhbiBjaGFuZ2UpCisJICogRENQTEJfU1RBVFVTIGFuZCBJQ1BMQl9TVEFUVVMgYXJlIGFsc28gb25seSB2YWxpZCBpbiBFVlQzLAorCSAqIGJ1dCB0aGV5IGFyZSBub3QgdmVyeSBpbnRlcmVzdGluZywgc28gZG9uJ3Qgc2F2ZSB0aGVtCisJICovCisKIAlwNC5sID0gbG8oRENQTEJfRkFVTFRfQUREUik7CiAJcDQuaCA9IGhpKERDUExCX0ZBVUxUX0FERFIpOwogCXI3ID0gW3A0XTsKQEAgLTMwNCwxMiArMzQ0LDExIEBACiAJcDUubCA9IF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyOwogCVtwNV0gPSByNzsKIAotCXA0LmwgPSBfZXhjcHRfc2F2ZWRfc3R1ZmY7Ci0JcDQuaCA9IF9leGNwdF9zYXZlZF9zdHVmZjsKLQogCXI2ID0gcmV0eDsKKwlwNC5sID0gX3NhdmVkX3JldHg7CisJcDQuaCA9IF9zYXZlZF9yZXR4OwogCVtwNF0gPSByNjsKLQorI2VuZGlmCiAJcjYgPSBTWVNDRkc7CiAJW3A0ICsgNF0gPSByNjsKIAlCSVRDTFIocjYsIDApOwpAQCAtMzI3LDU5ICszNjYsNTYgQEAKIAlyNiA9IDB4M2Y7CiAJc3RpIHI2OwogCi0JKFI3OjYsUDU6NCkgPSBbc3ArK107Ci0JQVNUQVQgPSBbc3ArK107Ci0JU1AgPSBFWF9TQ1JBVENIX1JFRzsKIAlyYWlzZSA1OwotCXJ0eDsKKwlqdW1wLnMgX2JmaW5fcmV0dXJuX2Zyb21fZXhjZXB0aW9uOwogRU5EUFJPQyhfZXhfdHJhcF9jKQogCiAvKiBXZSBqdXN0IHJlYWxpemVkIHdlIGdvdCBhbiBleGNlcHRpb24sIHdoaWxlIHdlIHdlcmUgcHJvY2Vzc2luZyBhIGRpZmZlcmVudAogICogZXhjZXB0aW9uLiBUaGlzIGlzIGEgdW5yZWNvdmVyYWJsZSBldmVudCwgc28gY3Jhc2gKICAqLwogRU5UUlkoX2RvdWJsZV9mYXVsdCkKLSAgICAgICAgLyogVHVybiBjYWNoZXMgJiBwcm90ZWN0aW9uIG9mZiwgdG8gZW5zdXJlIHdlIGRvbid0IGdldCBhbnkgbW9yZQotICAgICAgICAgKiBkb3VibGUgZXhjZXB0aW9ucwotICAgICAgICAgKi8KKwkvKiBUdXJuIGNhY2hlcyAmIHByb3RlY3Rpb24gb2ZmLCB0byBlbnN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBtb3JlCisJICogZG91YmxlIGV4Y2VwdGlvbnMKKwkgKi8KIAotICAgICAgICBQNC5MID0gTE8oSU1FTV9DT05UUk9MKTsKLSAgICAgICAgUDQuSCA9IEhJKElNRU1fQ09OVFJPTCk7CisJUDQuTCA9IExPKElNRU1fQ09OVFJPTCk7CisJUDQuSCA9IEhJKElNRU1fQ09OVFJPTCk7CiAKLSAgICAgICAgUjUgPSBbUDRdOyAgICAgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciovCi0gICAgICAgIEJJVENMUihSNSxFTklDUExCX1ApOwotICAgICAgICBTU1lOQzsgICAgICAgICAgLyogU1NZTkMgcmVxdWlyZWQgYmVmb3JlIHdyaXRpbmcgdG8gSU1FTV9DT05UUk9MLiAqLwotICAgICAgICAuYWxpZ24gODsKLSAgICAgICAgW1A0XSA9IFI1OwotICAgICAgICBTU1lOQzsKKwlSNSA9IFtQNF07ICAgICAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyKi8KKwlCSVRDTFIoUjUsRU5JQ1BMQl9QKTsKKwlTU1lOQzsgICAgICAgICAgLyogU1NZTkMgcmVxdWlyZWQgYmVmb3JlIHdyaXRpbmcgdG8gSU1FTV9DT05UUk9MLiAqLworCS5hbGlnbiA4OworCVtQNF0gPSBSNTsKKwlTU1lOQzsKIAotICAgICAgICBQNC5MID0gTE8oRE1FTV9DT05UUk9MKTsKLSAgICAgICAgUDQuSCA9IEhJKERNRU1fQ09OVFJPTCk7Ci0gICAgICAgIFI1ID0gW1A0XTsKLSAgICAgICAgQklUQ0xSKFI1LEVORENQTEJfUCk7Ci0gICAgICAgIFNTWU5DOyAgICAgICAgICAvKiBTU1lOQyByZXF1aXJlZCBiZWZvcmUgd3JpdGluZyB0byBETUVNX0NPTlRST0wuICovCi0gICAgICAgIC5hbGlnbiA4OwotICAgICAgICBbUDRdID0gUjU7Ci0gICAgICAgIFNTWU5DOworCVA0LkwgPSBMTyhETUVNX0NPTlRST0wpOworCVA0LkggPSBISShETUVNX0NPTlRST0wpOworCVI1ID0gW1A0XTsKKwlCSVRDTFIoUjUsRU5EQ1BMQl9QKTsKKwlTU1lOQzsgICAgICAgICAgLyogU1NZTkMgcmVxdWlyZWQgYmVmb3JlIHdyaXRpbmcgdG8gRE1FTV9DT05UUk9MLiAqLworCS5hbGlnbiA4OworCVtQNF0gPSBSNTsKKwlTU1lOQzsKIAotICAgICAgICAvKiBGaXggdXAgdGhlIHN0YWNrICovCi0gICAgICAgIChSNzo2LFA1OjQpID0gW3NwKytdOwotICAgICAgICBBU1RBVCA9IFtzcCsrXTsKLSAgICAgICAgU1AgPSBFWF9TQ1JBVENIX1JFRzsKKwkvKiBGaXggdXAgdGhlIHN0YWNrICovCisJKFI3OjYsUDU6NCkgPSBbc3ArK107CisJQVNUQVQgPSBbc3ArK107CisJU1AgPSBFWF9TQ1JBVENIX1JFRzsKIAotICAgICAgICAvKiBXZSBzaG91bGQgYmUgb3V0IG9mIHRoZSBleGNlcHRpb24gc3RhY2ssIGFuZCBiYWNrIGRvd24gaW50bwotICAgICAgICAgKiBrZXJuZWwgb3IgdXNlciBzcGFjZSBzdGFjawotICAgICAgICAgKi8KLSAgICAgICAgU0FWRV9BTExfU1lTCisJLyogV2Ugc2hvdWxkIGJlIG91dCBvZiB0aGUgZXhjZXB0aW9uIHN0YWNrLCBhbmQgYmFjayBkb3duIGludG8KKwkgKiBrZXJuZWwgb3IgdXNlciBzcGFjZSBzdGFjaworCSAqLworCVNBVkVfQUxMX1NZUwogCiAJLyogVGhlIGR1bXBpbmcgZnVuY3Rpb25zIGV4cGVjdCB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gdGhlIFJFVEkKIAkgKiBzbG90LiAgKi8KIAlyNiA9IHJldHg7CiAJW3NwICsgUFRfUENdID0gcjY7CiAKLSAgICAgICAgcjAgPSBzcDsgICAgICAgIC8qIHN0YWNrIGZyYW1lIHB0X3JlZ3MgcG9pbnRlciBhcmd1bWVudCA9PT4gcjAgKi8KLSAgICAgICAgU1AgKz0gLTEyOwotICAgICAgICBjYWxsIF9kb3VibGVfZmF1bHRfYzsKLSAgICAgICAgU1AgKz0gMTI7CisJcjAgPSBzcDsgICAgICAgIC8qIHN0YWNrIGZyYW1lIHB0X3JlZ3MgcG9pbnRlciBhcmd1bWVudCA9PT4gcjAgKi8KKwlTUCArPSAtMTI7CisJY2FsbCBfZG91YmxlX2ZhdWx0X2M7CisJU1AgKz0gMTI7CiAuTF9kb3VibGVfZmF1bHRfcGFuaWM6CiAgICAgICAgIEpVTVAgLkxfZG91YmxlX2ZhdWx0X3BhbmljCiAKQEAgLTM4OCw4ICs0MjQsOCBAQAogRU5UUlkoX2V4Y2VwdGlvbl90b19sZXZlbDUpCiAJU0FWRV9BTExfU1lTCiAKLQlwNC5sID0gX2V4Y3B0X3NhdmVkX3N0dWZmOwotCXA0LmggPSBfZXhjcHRfc2F2ZWRfc3R1ZmY7CisJcDQubCA9IF9zYXZlZF9yZXR4OworCXA0LmggPSBfc2F2ZWRfcmV0eDsKIAlyNiA9IFtwNF07CiAJW3NwICsgUFRfUENdID0gcjY7CiAKQEAgLTQyMCw2ICs0NTYsMTcgQEAKIAljYWxsIF90cmFwX2M7CiAJU1AgKz0gMTI7CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfRE9VQkxFRkFVTFQKKwkvKiBHcmFiIElMQVQgKi8KKwlwMi5sID0gbG8oSUxBVCk7CisJcDIuaCA9IGhpKElMQVQpOworCXIwID0gW3AyXTsKKwlyMSA9IDB4MjA7ICAvKiBEaWQgSSBqdXN0IGNhdXNlIGFudGhlciBIVyBlcnJvcj8gKi8KKwlyMCA9IHIwICYgcjE7CisJQ0MgPSBSMCA9PSBSMTsKKwlpZiBDQyBKVU1QIF9kb3VibGVfZmF1bHQ7CisjZW5kaWYKKwogCWNhbGwgX3JldF9mcm9tX2V4Y2VwdGlvbjsKIAlSRVNUT1JFX0FMTF9TWVMKIAlydGk7CkBAIC00MzYsNyArNDgzLDQ4IEBACiAJLyogVHJ5IHRvIGRlYWwgd2l0aCBzeXNjYWxscyBxdWlja2x5LiAgKi8KIAlbLS1zcF0gPSBBU1RBVDsKIAlbLS1zcF0gPSAoUjc6NixQNTo0KTsKKworI2lmIEFOT01BTFlfMDUwMDAyODMgfHwgQU5PTUFMWV8wNTAwMDMxNQorCWNjID0gcjcgPT0gcjc7CisJcDUuaCA9IEhJKENISVBJRCk7CisJcDUubCA9IExPKENISVBJRCk7CisJaWYgY2MganVtcCAxZjsKKwlyNy5sID0gV1twNV07CisxOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfREVCVUdfRE9VQkxFRkFVTFQKKwkvKgorCSAqIFNhdmUgdGhlc2UgcmVnaXN0ZXJzLCBhcyB0aGV5IGFyZSBvbmx5IHZhbGlkIGluIGV4Y2VwdGlvbiBjb250ZXh0CisJICogKHdoZXJlIHdlIGFyZSBub3cgLSBhcyBzb29uIGFzIHdlIGRlZmVyIHRvIElSUTUsIHRoZXkgY2FuIGNoYW5nZSkKKwkgKiBEQ1BMQl9TVEFUVVMgYW5kIElDUExCX1NUQVRVUyBhcmUgYWxzbyBvbmx5IHZhbGlkIGluIEVWVDMsCisJICogYnV0IHRoZXkgYXJlIG5vdCB2ZXJ5IGludGVyZXN0aW5nLCBzbyBkb24ndCBzYXZlIHRoZW0KKwkgKi8KKworCXA0LmwgPSBsbyhEQ1BMQl9GQVVMVF9BRERSKTsKKwlwNC5oID0gaGkoRENQTEJfRkFVTFRfQUREUik7CisJcjcgPSBbcDRdOworCXA1LmggPSBfc2F2ZWRfZGNwbGJfZmF1bHRfYWRkcjsKKwlwNS5sID0gX3NhdmVkX2RjcGxiX2ZhdWx0X2FkZHI7CisJW3A1XSA9IHI3OworCisJcjcgPSBbcDQgKyAoSUNQTEJfRkFVTFRfQUREUiAtIERDUExCX0ZBVUxUX0FERFIpXTsKKwlwNS5oID0gX3NhdmVkX2ljcGxiX2ZhdWx0X2FkZHI7CisJcDUubCA9IF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyOworCVtwNV0gPSByNzsKKworCXA0LmwgPSBfc2F2ZWRfcmV0eDsKKwlwNC5oID0gX3NhdmVkX3JldHg7CisJcjYgPSByZXR4OworCVtwNF0gPSByNjsKKwogCXI3ID0gU0VRU1RBVDsJCS8qIHJlYXNvbiBjb2RlIGlzIGluIGJpdCA1OjAgKi8KKwlwNC5sID0gX3NhdmVkX3NlcXN0YXQ7CisJcDQuaCA9IF9zYXZlZF9zZXFzdGF0OworCVtwNF0gPSByNzsKKyNlbHNlCisJcjcgPSBTRVFTVEFUOyAgICAgICAgICAgLyogcmVhc29uIGNvZGUgaXMgaW4gYml0IDU6MCAqLworI2VuZGlmCiAJcjYubCA9IGxvKFNFUVNUQVRfRVhDQVVTRSk7CiAJcjYuaCA9IGhpKFNFUVNUQVRfRVhDQVVTRSk7CiAJcjcgPSByNyAmIHI2OwpAQCAtNjE2LDYgKzcwNCw5IEBACiAJcnRzOwogRU5EUFJPQyhfc3lzdGVtX2NhbGwpCiAKKy8qIERvIG5vdCBtYXJrIGFzIEVOVFJZKCkgdG8gYXZvaWQgZXJyb3IgaW4gYXNzZW1ibGVyIC4uLgorICogdGhpcyBzeW1ib2wgbmVlZCBub3QgYmUgZ2xvYmFsIGFueXdheXMsIHNvIC4uLgorICovCiBfc3lzX3RyYWNlOgogCWNhbGwgX3N5c2NhbGxfdHJhY2U7CiAKQEAgLTk0MSw2ICsxMDMyLDE1IEBACiAJU0FWRV9BTExfU1lTCiAJdHJhY2VfYnVmZmVyX3N0b3AocDAscjApOwogCisjaWYgQU5PTUFMWV8wNTAwMDI4MyB8fCBBTk9NQUxZXzA1MDAwMzE1CisJY2MgPSByNSA9PSByNTsKKwlwNC5oID0gSEkoQ0hJUElEKTsKKwlwNC5sID0gTE8oQ0hJUElEKTsKKwlpZiBjYyBqdW1wIDFmOworCXI1LmwgPSBXW3A0XTsKKzE6CisjZW5kaWYKKwogCS8qIFR1cm4gY2FjaGVzIG9mZiwgdG8gZW5zdXJlIHdlIGRvbid0IGdldCBkb3VibGUgZXhjZXB0aW9ucyAqLwogCiAJUDQuTCA9IExPKElNRU1fQ09OVFJPTCk7CkBAIC05OTIsNyArMTA5MiwxMiBAQAogCSAqLwogCS5sb25nIF9leF9zeXNjYWxsICAgICAgIC8qIDB4MDAgLSBVc2VyIERlZmluZWQgLSBMaW51eCBTeXNjYWxsICovCiAJLmxvbmcgX2V4X3NvZnRfYnAgICAgICAgLyogMHgwMSAtIFVzZXIgRGVmaW5lZCAtIFNvZnR3YXJlIGJyZWFrcG9pbnQgKi8KKyNpZmRlZglDT05GSUdfS0dEQgorCS5sb25nIF9leF90cmFwX2MJLyogMHgwMiAtIFVzZXIgRGVmaW5lZCAtIEtHREIgaW5pdGlhbCBjb25uZWN0aW9uCisJCQkJCQkJIGFuZCBicmVhayBzaWduYWwgdHJhcCAqLworI2Vsc2UKIAkubG9uZyBfZXhfcmVwbGFjZWFibGUgICAvKiAweDAyIC0gVXNlciBEZWZpbmVkICovCisjZW5kaWYKIAkubG9uZyBfZXhfdHJhcF9jICAgICAgICAvKiAweDAzIC0gVXNlciBEZWZpbmVkIC0gdXNlcnNwYWNlIHN0YWNrIG92ZXJmbG93ICovCiAJLmxvbmcgX2V4X3RyYXBfYyAgICAgICAgLyogMHgwNCAtIFVzZXIgRGVmaW5lZCAtIGR1bXAgdHJhY2UgYnVmZmVyICovCiAJLmxvbmcgX2V4X3JlcGxhY2VhYmxlICAgLyogMHgwNSAtIFVzZXIgRGVmaW5lZCAqLwpAQCAtMTQzMiwxNSArMTUzNyw3IEBACiAJLnJlcHQgTlJfc3lzY2FsbHMtKC4tX3N5c19jYWxsX3RhYmxlKS80CiAJLmxvbmcgX3N5c19uaV9zeXNjYWxsCiAJLmVuZHIKLQotCS8qCi0JICogVXNlZCB0byBzYXZlIHRoZSByZWFsIFJFVFgsIElNQVNLIGFuZCBTWVNDRkcgd2hlbiB0ZW1wb3JhcmlseQotCSAqIHN0b3Jpbmcgc2FmZSB2YWx1ZXMgYWNyb3NzIHRoZSB0cmFuc2l0aW9uIGZyb20gZXhjZXB0aW9uIHRvIElSUTUuCi0JICovCi1fZXhjcHRfc2F2ZWRfc3R1ZmY6Ci0JLmxvbmcgMDsKLQkubG9uZyAwOwotCS5sb25nIDA7CitFTkQoX3N5c19jYWxsX3RhYmxlKQogCiBfZXhjZXB0aW9uX3N0YWNrOgogCS5yZXB0IDEwMjQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKaW5kZXggMTkxYjRlOS4uZjEyM2E2MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKQEAgLTY4LDYgKzY4LDE2IEBACiAJTTIgPSByMDsKIAlNMyA9IHIwOwogCisJLyoKKwkgKiBDbGVhciBJVEVTVF9DT01NQU5EIGFuZCBEVEVTVF9DT01NQU5EIHJlZ2lzdGVycywKKwkgKiBMZWF2aW5nIHRoZXNlIGFzIG5vbi16ZXJvIGNhbiBjb25mdXNlIHRoZSBlbXVsYXRvcgorCSAqLworCXAwLkwgPSBMTyhEVEVTVF9DT01NQU5EKTsKKwlwMC5IID0gSEkoRFRFU1RfQ09NTUFORCk7CisJW3AwXSA9IFIwOworCVtwMCArIChJVEVTVF9DT01NQU5EIC0gRFRFU1RfQ09NTUFORCldID0gUjA7CisJQ1NZTkM7CisKIAl0cmFjZV9idWZmZXJfaW5pdChwMCxyMCk7CiAJUDAgPSBSMTsKIAlSMCA9IFIxOwpAQCAtOTAsMTIgKzEwMCw0NiBAQAogCVtwMF0gPSBSMDsKIAlTU1lOQzsKIAotCS8qIFNhdmUgUkVUWCwgaW4gY2FzZSBvZiBkb3VibGVmYXVsdCAqLwotCXAwLmwgPSBfX19yZXR4OwotCXAwLmggPSBfX19yZXR4OworCS8qIGluIGNhc2Ugb2YgZG91YmxlIGZhdWx0cywgc2F2ZSBhIGZldyB0aGluZ3MgKi8KKwlwMC5sID0gX2luaXRfcmV0eDsKKwlwMC5oID0gX2luaXRfcmV0eDsKIAlSMCA9IFJFVFg7CiAJW1AwXSA9IFIwOwogCisjaWZkZWYgQ09ORklHX0RFQlVHX0RPVUJMRUZBVUxUCisJLyogT25seSBzYXZlIHRoZXNlIGlmIHdlIGFyZSBzdG9yaW5nIHRoZW0sCisJICogVGhpcyBoYXBwZW5zIGhlcmUsIHNpbmNlIEwxIGdldHMgY2xvYmJlcmVkCisJICogYmVsb3cKKwkgKi8KKwlwMC5sID0gX3NhdmVkX3JldHg7CisJcDAuaCA9IF9zYXZlZF9yZXR4OworCXAxLmwgPSBfaW5pdF9zYXZlZF9yZXR4OworCXAxLmggPSBfaW5pdF9zYXZlZF9yZXR4OworCXIwID0gW3AwXTsKKwlbcDFdID0gcjA7CisKKwlwMC5sID0gX3NhdmVkX2RjcGxiX2ZhdWx0X2FkZHI7CisJcDAuaCA9IF9zYXZlZF9kY3BsYl9mYXVsdF9hZGRyOworCXAxLmwgPSBfaW5pdF9zYXZlZF9kY3BsYl9mYXVsdF9hZGRyOworCXAxLmggPSBfaW5pdF9zYXZlZF9kY3BsYl9mYXVsdF9hZGRyOworCXIwID0gW3AwXTsKKwlbcDFdID0gcjA7CisKKwlwMC5sID0gX3NhdmVkX2ljcGxiX2ZhdWx0X2FkZHI7CisJcDAuaCA9IF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyOworCXAxLmwgPSBfaW5pdF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyOworCXAxLmggPSBfaW5pdF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyOworCXIwID0gW3AwXTsKKwlbcDFdID0gcjA7CisKKwlwMC5sID0gX3NhdmVkX3NlcXN0YXQ7CisJcDAuaCA9IF9zYXZlZF9zZXFzdGF0OworCXAxLmwgPSBfaW5pdF9zYXZlZF9zZXFzdGF0OworCXAxLmggPSBfaW5pdF9zYXZlZF9zZXFzdGF0OworCXIwID0gW3AwXTsKKwlbcDFdID0gcjA7CisjZW5kaWYKKwogCS8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlciAqLwogCXNwLmwgPSBsbyhJTklUSUFMX1NUQUNLKTsKIAlzcC5oID0gaGkoSU5JVElBTF9TVEFDSyk7CkBAIC0xMDcsNyArMTUxLDcgQEAKICNlbmRpZgogCiAJLyogUHV0IFRoZSBDb2RlIGZvciBQTEwgUHJvZ3JhbW1pbmcgYW5kIFNEUkFNIFByb2dyYW1taW5nIGluIEwxIElTUkFNICovCi0JY2FsbCBfYmY1M3hfcmVsb2NhdGVfbDFfbWVtOworCWNhbGwgX2JmaW5fcmVsb2NhdGVfbDFfbWVtOwogI2lmZGVmIENPTkZJR19CRklOX0tFUk5FTF9DTE9DSwogCWNhbGwgX3N0YXJ0X2RtYV9jb2RlOwogI2VuZGlmCkBAIC0xNjIsNiArMjA2LDYwIEBACiAJd1twMF0gPSByMDsKIAlzc3luYzsKIAorI2lmIEwxX0RBVEFfQV9MRU5HVEggPiAwCisJcjEubCA9IF9fc2Jzc19sMTsKKwlyMS5oID0gX19zYnNzX2wxOworCXIyLmwgPSBfX2Vic3NfbDE7CisJcjIuaCA9IF9fZWJzc19sMTsKKwlyMCA9IDAgKHopOworCXIyID0gcjIgLSByMTsKKwljYyA9IHIyID09IDA7CisJaWYgY2MganVtcCAuTF9hX2wxX2RvbmU7CisJcjIgPj49IDI7CisJcDEgPSByMTsKKwlwMiA9IHIyOworCWxzZXR1cCAoLkxfY2xlYXJfYV9sMSwgLkxfY2xlYXJfYV9sMSApIGxjMCA9IHAyOworLkxfY2xlYXJfYV9sMToKKwlbcDErK10gPSByMDsKKy5MX2FfbDFfZG9uZToKKyNlbmRpZgorCisjaWYgTDFfREFUQV9CX0xFTkdUSCA+IDAKKwlyMS5sID0gX19zYnNzX2JfbDE7CisJcjEuaCA9IF9fc2Jzc19iX2wxOworCXIyLmwgPSBfX2Vic3NfYl9sMTsKKwlyMi5oID0gX19lYnNzX2JfbDE7CisJcjAgPSAwICh6KTsKKwlyMiA9IHIyIC0gcjE7CisJY2MgPSByMiA9PSAwOworCWlmIGNjIGp1bXAgLkxfYl9sMV9kb25lOworCXIyID4+PSAyOworCXAxID0gcjE7CisJcDIgPSByMjsKKwlsc2V0dXAgKC5MX2NsZWFyX2JfbDEsIC5MX2NsZWFyX2JfbDEgKSBsYzAgPSBwMjsKKy5MX2NsZWFyX2JfbDE6CisJW3AxKytdID0gcjA7CisuTF9iX2wxX2RvbmU6CisjZW5kaWYKKworI2lmIEwyX0xFTkdUSCA+IDAKKwlyMS5sID0gX19zYnNzX2wyOworCXIxLmggPSBfX3Nic3NfbDI7CisJcjIubCA9IF9fZWJzc19sMjsKKwlyMi5oID0gX19lYnNzX2wyOworCXIwID0gMCAoeik7CisJcjIgPSByMiAtIHIxOworCWNjID0gcjIgPT0gMDsKKwlpZiBjYyBqdW1wIC5MX2wyX2RvbmU7CisJcjIgPj49IDI7CisJcDEgPSByMTsKKwlwMiA9IHIyOworCWxzZXR1cCAoLkxfY2xlYXJfbDIsIC5MX2NsZWFyX2wyICkgbGMwID0gcDI7CisuTF9jbGVhcl9sMjoKKwlbcDErK10gPSByMDsKKy5MX2wyX2RvbmU6CisjZW5kaWYKKwogCS8qIFplcm8gb3V0IHRoZSBic3MgcmVnaW9uCiAJICogTm90ZTogdGhpcyB3aWxsIGZhaWwgaWYgYnNzIGlzIDAgYnl0ZXMgLi4uCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRlcnJ1cHQuUwppbmRleCBiMjdlNTlkLi40YTJlYzdhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCWZwID0gMDsKICNlbmRpZgogCi0jaWYgQU5PTUFMWV8wNTAwMDI4MworI2lmIEFOT01BTFlfMDUwMDAyODMgfHwgQU5PTUFMWV8wNTAwMDMxNQogCWNjID0gcjcgPT0gcjc7CiAJcDUuaCA9IEhJKENISVBJRCk7CiAJcDUubCA9IExPKENISVBJRCk7CkBAIC0xNzksNyArMTc5LDE2IEBACiAJY2FsbCBfdHJhcF9jOwogCVNQICs9IDEyOwogCisjaWZkZWYgRUJJVV9FUlJNU1QKKwkvKiBtYWtlIHN1cmUgRUJJVV9FUlJNU1QgaXMgY2xlYXIgKi8KKwlwMC5sID0gTE8oRUJJVV9FUlJNU1QpOworCXAwLmggPSBISShFQklVX0VSUk1TVCk7CisJcjAubCA9IChDT1JFX0VSUk9SIHwgQ09SRV9NRVJST1IpOworCXdbcDBdID0gcjAubDsKKyNlbmRpZgorCiAJY2FsbCBfcmV0X2Zyb21fZXhjZXB0aW9uOworCiAuTGNvbW1vbl9yZXN0b3JlX2FsbF9zeXM6CiAJUkVTVE9SRV9BTExfU1lTCiAJcnRpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYwppbmRleCA1ZmE1MzY3Li4zNGU4YTcyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYwpAQCAtMjQzLDEyICsyNDMsMTQgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGJmaW5fY29yZV9pcnFjaGlwID0geworCS5uYW1lID0gIkNPUkUiLAogCS5hY2sgPSBiZmluX2Fja19ub29wLAogCS5tYXNrID0gYmZpbl9jb3JlX21hc2tfaXJxLAogCS51bm1hc2sgPSBiZmluX2NvcmVfdW5tYXNrX2lycSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmZpbl9pbnRlcm5hbF9pcnFjaGlwID0geworCS5uYW1lID0gIklOVE4iLAogCS5hY2sgPSBiZmluX2Fja19ub29wLAogCS5tYXNrID0gYmZpbl9pbnRlcm5hbF9tYXNrX2lycSwKIAkudW5tYXNrID0gYmZpbl9pbnRlcm5hbF91bm1hc2tfaXJxLApAQCAtMjc4LDYgKzI4MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmZpbl9nZW5lcmljX2Vycm9yX2lycWNoaXAgPSB7CisJLm5hbWUgPSAiRVJST1IiLAogCS5hY2sgPSBiZmluX2Fja19ub29wLAogCS5tYXNrX2FjayA9IGJmaW5fZ2VuZXJpY19lcnJvcl9tYXNrX2lycSwKIAkubWFzayA9IGJmaW5fZ2VuZXJpY19lcnJvcl9tYXNrX2lycSwKQEAgLTM2MSw2ICszNjQsMTQgQEAKIH0KICNlbmRpZgkJCQkvKiBCRjUzN19HRU5FUklDX0VSUk9SX0lOVF9ERU1VWCAqLwogCitzdGF0aWMgaW5saW5lIHZvaWQgYmZpbl9zZXRfaXJxX2hhbmRsZXIodW5zaWduZWQgaXJxLCBpcnFfZmxvd19oYW5kbGVyX3QgaGFuZGxlKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCS8qIE1heSBub3QgY2FsbCBnZW5lcmljIHNldF9pcnFfaGFuZGxlcigpIGR1ZSB0byBzcGlubG9jaworCSAgIHJlY3Vyc2lvbi4gKi8KKwlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlOworfQorCiAjaWYgIWRlZmluZWQoQ09ORklHX0JGNTR4KQogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ3Bpb19lbmFibGVkW2dwaW9fYmFuayhNQVhfQkxBQ0tGSU5fR1BJT1MpXTsKQEAgLTQ3Myw5ICs0ODQsOSBAQAogCVNTWU5DKCk7CiAKIAlpZiAodHlwZSAmIChJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORykpCi0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJCWJmaW5fc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKIAllbHNlCi0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQliZmluX3NldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00OTUsNiArNTA2LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGJmaW5fZ3Bpb19pcnFjaGlwID0geworCS5uYW1lID0gIkdQSU8iLAogCS5hY2sgPSBiZmluX2dwaW9fYWNrX2lycSwKIAkubWFzayA9IGJmaW5fZ3Bpb19tYXNrX2lycSwKIAkubWFza19hY2sgPSBiZmluX2dwaW9fbWFza19hY2tfaXJxLApAQCAtODA0LDEwICs4MTYsMTAgQEAKIAogCWlmICh0eXBlICYgKElSUV9UWVBFX0VER0VfUklTSU5HIHwgSVJRX1RZUEVfRURHRV9GQUxMSU5HKSkgewogCQlwaW50W2JhbmtdLT5lZGdlX3NldCA9IHBpbnRiaXQ7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJCWJmaW5fc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKIAl9IGVsc2UgewogCQlwaW50W2JhbmtdLT5lZGdlX2NsZWFyID0gcGludGJpdDsKLQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CisJCWJmaW5fc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CiAJfQogCiAJU1NZTkMoKTsKQEAgLTg4NCw2ICs4OTYsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmZpbl9ncGlvX2lycWNoaXAgPSB7CisJLm5hbWUgPSAiR1BJTyIsCiAJLmFjayA9IGJmaW5fZ3Bpb19hY2tfaXJxLAogCS5tYXNrID0gYmZpbl9ncGlvX21hc2tfaXJxLAogCS5tYXNrX2FjayA9IGJmaW5fZ3Bpb19tYXNrX2Fja19pcnEsCkBAIC0xMTM2LDggKzExNDksNCBAQAogCQl2ZWMgPSBpdmctPmlycW5vOwogCX0KIAlhc21fZG9fSVJRKHZlYywgZnApOwotCi0jaWZkZWYgQ09ORklHX0tHREIKLQlrZ2RiX3Byb2Nlc3NfYnJlYWtwb2ludCgpOwotI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL01ha2VmaWxlIGIvYXJjaC9ibGFja2Zpbi9tbS9NYWtlZmlsZQppbmRleCAyYTcyMDJjLi5kNDg5Zjg5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21tL01ha2VmaWxlCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vTWFrZWZpbGUKQEAgLTIsNCArMiw0IEBACiAjIGFyY2gvYmxhY2tmaW4vbW0vTWFrZWZpbGUKICMKIAotb2JqLXkgOj0gYmxhY2tmaW5fc3JhbS5vIGluaXQubworb2JqLXkgOj0gc3JhbS1hbGxvYy5vIGlzcmFtLWRyaXZlci5vIGluaXQubwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9ibGFja2Zpbl9zcmFtLmMgYi9hcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY1ZTg4Ny4uMDAwMDAwMAotLS0gYS9hcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uYworKysgL2Rldi9udWxsCkBAIC0xLDgwNiArMCwwIEBACi0vKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6Ci0gKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU1JBTSBkcml2ZXIgZm9yIEJsYWNrZmluIEFEU1AtQkY1eHgKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9ydGMuaD4KLSNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KLSNpbmNsdWRlICJibGFja2Zpbl9zcmFtLmgiCi0KLXN0YXRpYyBzcGlubG9ja190IGwxc3JhbV9sb2NrLCBsMV9kYXRhX3NyYW1fbG9jaywgbDFfaW5zdF9zcmFtX2xvY2s7Ci1zdGF0aWMgc3BpbmxvY2tfdCBsMl9zcmFtX2xvY2s7Ci0KLS8qIHRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgTDEgc2NyYXRjaHBhZCBhbmQgREFUQSBTUkFNICovCi1zdHJ1Y3Qgc3JhbV9waWVjZSB7Ci0Jdm9pZCAqcGFkZHI7Ci0JaW50IHNpemU7Ci0JcGlkX3QgcGlkOwotCXN0cnVjdCBzcmFtX3BpZWNlICpuZXh0OwotfTsKLQotc3RhdGljIHN0cnVjdCBzcmFtX3BpZWNlIGZyZWVfbDFfc3NyYW1faGVhZCwgdXNlZF9sMV9zc3JhbV9oZWFkOwotCi0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi1zdGF0aWMgc3RydWN0IHNyYW1fcGllY2UgZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLCB1c2VkX2wxX2RhdGFfQV9zcmFtX2hlYWQ7Ci0jZW5kaWYKLQotI2lmIEwxX0RBVEFfQl9MRU5HVEggIT0gMAotc3RhdGljIHN0cnVjdCBzcmFtX3BpZWNlIGZyZWVfbDFfZGF0YV9CX3NyYW1faGVhZCwgdXNlZF9sMV9kYXRhX0Jfc3JhbV9oZWFkOwotI2VuZGlmCi0KLSNpZiBMMV9DT0RFX0xFTkdUSCAhPSAwCi1zdGF0aWMgc3RydWN0IHNyYW1fcGllY2UgZnJlZV9sMV9pbnN0X3NyYW1faGVhZCwgdXNlZF9sMV9pbnN0X3NyYW1faGVhZDsKLSNlbmRpZgotCi0jaWYgTDJfTEVOR1RIICE9IDAKLXN0YXRpYyBzdHJ1Y3Qgc3JhbV9waWVjZSBmcmVlX2wyX3NyYW1faGVhZCwgdXNlZF9sMl9zcmFtX2hlYWQ7Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpzcmFtX3BpZWNlX2NhY2hlOwotCi0vKiBMMSBTY3JhdGNocGFkIFNSQU0gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBsMXNyYW1faW5pdCh2b2lkKQotewotCWZyZWVfbDFfc3NyYW1faGVhZC5uZXh0ID0KLQkJa21lbV9jYWNoZV9hbGxvYyhzcmFtX3BpZWNlX2NhY2hlLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZyZWVfbDFfc3NyYW1faGVhZC5uZXh0KSB7Ci0JCXByaW50ayhLRVJOX0lORk8iRmFpbCB0byBpbml0aWFsaXplIFNjcmF0Y2hwYWQgZGF0YSBTUkFNLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmcmVlX2wxX3NzcmFtX2hlYWQubmV4dC0+cGFkZHIgPSAodm9pZCAqKUwxX1NDUkFUQ0hfU1RBUlQ7Ci0JZnJlZV9sMV9zc3JhbV9oZWFkLm5leHQtPnNpemUgPSBMMV9TQ1JBVENIX0xFTkdUSDsKLQlmcmVlX2wxX3NzcmFtX2hlYWQubmV4dC0+cGlkID0gMDsKLQlmcmVlX2wxX3NzcmFtX2hlYWQubmV4dC0+bmV4dCA9IE5VTEw7Ci0KLQl1c2VkX2wxX3NzcmFtX2hlYWQubmV4dCA9IE5VTEw7Ci0KLQkvKiBtdXRleCBpbml0aWFsaXplICovCi0Jc3Bpbl9sb2NrX2luaXQoJmwxc3JhbV9sb2NrKTsKLQotCXByaW50ayhLRVJOX0lORk8gIkJsYWNrZmluIFNjcmF0Y2hwYWQgZGF0YSBTUkFNOiAlZCBLQlxuIiwKLQkgICAgICAgTDFfU0NSQVRDSF9MRU5HVEggPj4gMTApOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbDFfZGF0YV9zcmFtX2luaXQodm9pZCkKLXsKLSNpZiBMMV9EQVRBX0FfTEVOR1RIICE9IDAKLQlmcmVlX2wxX2RhdGFfQV9zcmFtX2hlYWQubmV4dCA9Ci0JCWttZW1fY2FjaGVfYWxsb2Moc3JhbV9waWVjZV9jYWNoZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmcmVlX2wxX2RhdGFfQV9zcmFtX2hlYWQubmV4dCkgewotCQlwcmludGsoS0VSTl9JTkZPIkZhaWwgdG8gaW5pdGlhbGl6ZSBMMSBEYXRhIEEgU1JBTS5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPnBhZGRyID0KLQkJKHZvaWQgKilMMV9EQVRBX0FfU1RBUlQgKyAoX2Vic3NfbDEgLSBfc2RhdGFfbDEpOwotCWZyZWVfbDFfZGF0YV9BX3NyYW1faGVhZC5uZXh0LT5zaXplID0KLQkJTDFfREFUQV9BX0xFTkdUSCAtIChfZWJzc19sMSAtIF9zZGF0YV9sMSk7Ci0JZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPnBpZCA9IDA7Ci0JZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPm5leHQgPSBOVUxMOwotCi0JdXNlZF9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQgPSBOVUxMOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiQmxhY2tmaW4gTDEgRGF0YSBBIFNSQU06ICVkIEtCICglZCBLQiBmcmVlKVxuIiwKLQkJTDFfREFUQV9BX0xFTkdUSCA+PiAxMCwKLQkJZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPnNpemUgPj4gMTApOwotI2VuZGlmCi0jaWYgTDFfREFUQV9CX0xFTkdUSCAhPSAwCi0JZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQgPQotCQlrbWVtX2NhY2hlX2FsbG9jKHNyYW1fcGllY2VfY2FjaGUsIEdGUF9LRVJORUwpOwotCWlmICghZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyJGYWlsIHRvIGluaXRpYWxpemUgTDEgRGF0YSBCIFNSQU0uXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWZyZWVfbDFfZGF0YV9CX3NyYW1faGVhZC5uZXh0LT5wYWRkciA9Ci0JCSh2b2lkICopTDFfREFUQV9CX1NUQVJUICsgKF9lYnNzX2JfbDEgLSBfc2RhdGFfYl9sMSk7Ci0JZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQtPnNpemUgPQotCQlMMV9EQVRBX0JfTEVOR1RIIC0gKF9lYnNzX2JfbDEgLSBfc2RhdGFfYl9sMSk7Ci0JZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQtPnBpZCA9IDA7Ci0JZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQtPm5leHQgPSBOVUxMOwotCi0JdXNlZF9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQgPSBOVUxMOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiQmxhY2tmaW4gTDEgRGF0YSBCIFNSQU06ICVkIEtCICglZCBLQiBmcmVlKVxuIiwKLQkJTDFfREFUQV9CX0xFTkdUSCA+PiAxMCwKLQkJZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQtPnNpemUgPj4gMTApOwotI2VuZGlmCi0KLQkvKiBtdXRleCBpbml0aWFsaXplICovCi0Jc3Bpbl9sb2NrX2luaXQoJmwxX2RhdGFfc3JhbV9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGwxX2luc3Rfc3JhbV9pbml0KHZvaWQpCi17Ci0jaWYgTDFfQ09ERV9MRU5HVEggIT0gMAotCWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dCA9Ci0JCWttZW1fY2FjaGVfYWxsb2Moc3JhbV9waWVjZV9jYWNoZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmcmVlX2wxX2luc3Rfc3JhbV9oZWFkLm5leHQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyJGYWlsIHRvIGluaXRpYWxpemUgTDEgSW5zdHJ1Y3Rpb24gU1JBTS5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZnJlZV9sMV9pbnN0X3NyYW1faGVhZC5uZXh0LT5wYWRkciA9Ci0JCSh2b2lkICopTDFfQ09ERV9TVEFSVCArIChfZXRleHRfbDEgLSBfc3RleHRfbDEpOwotCWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dC0+c2l6ZSA9Ci0JCUwxX0NPREVfTEVOR1RIIC0gKF9ldGV4dF9sMSAtIF9zdGV4dF9sMSk7Ci0JZnJlZV9sMV9pbnN0X3NyYW1faGVhZC5uZXh0LT5waWQgPSAwOwotCWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dC0+bmV4dCA9IE5VTEw7Ci0KLQl1c2VkX2wxX2luc3Rfc3JhbV9oZWFkLm5leHQgPSBOVUxMOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiQmxhY2tmaW4gTDEgSW5zdHJ1Y3Rpb24gU1JBTTogJWQgS0IgKCVkIEtCIGZyZWUpXG4iLAotCQlMMV9DT0RFX0xFTkdUSCA+PiAxMCwKLQkJZnJlZV9sMV9pbnN0X3NyYW1faGVhZC5uZXh0LT5zaXplID4+IDEwKTsKLSNlbmRpZgotCi0JLyogbXV0ZXggaW5pdGlhbGl6ZSAqLwotCXNwaW5fbG9ja19pbml0KCZsMV9pbnN0X3NyYW1fbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBsMl9zcmFtX2luaXQodm9pZCkKLXsKLSNpZiBMMl9MRU5HVEggIT0gMAotCWZyZWVfbDJfc3JhbV9oZWFkLm5leHQgPQotCQlrbWVtX2NhY2hlX2FsbG9jKHNyYW1fcGllY2VfY2FjaGUsIEdGUF9LRVJORUwpOwotCWlmICghZnJlZV9sMl9zcmFtX2hlYWQubmV4dCkgewotCQlwcmludGsoS0VSTl9JTkZPIkZhaWwgdG8gaW5pdGlhbGl6ZSBMMiBTUkFNLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmcmVlX2wyX3NyYW1faGVhZC5uZXh0LT5wYWRkciA9ICh2b2lkICopTDJfU1RBUlQgKwotCQkoX2V0ZXh0X2wyIC0gX3N0ZXh0X2wyKSArIChfZWRhdGFfbDIgLSBfc2RhdGFfbDIpOwotCWZyZWVfbDJfc3JhbV9oZWFkLm5leHQtPnNpemUgPSBMMl9MRU5HVEggLQotCQkoX2V0ZXh0X2wyIC0gX3N0ZXh0X2wyKSArIChfZWRhdGFfbDIgLSBfc2RhdGFfbDIpOwotCWZyZWVfbDJfc3JhbV9oZWFkLm5leHQtPnBpZCA9IDA7Ci0JZnJlZV9sMl9zcmFtX2hlYWQubmV4dC0+bmV4dCA9IE5VTEw7Ci0KLQl1c2VkX2wyX3NyYW1faGVhZC5uZXh0ID0gTlVMTDsKLQotCXByaW50ayhLRVJOX0lORk8gIkJsYWNrZmluIEwyIFNSQU06ICVkIEtCICglZCBLQiBmcmVlKVxuIiwKLQkJTDJfTEVOR1RIID4+IDEwLAotCQlmcmVlX2wyX3NyYW1faGVhZC5uZXh0LT5zaXplID4+IDEwKTsKLSNlbmRpZgotCi0JLyogbXV0ZXggaW5pdGlhbGl6ZSAqLwotCXNwaW5fbG9ja19pbml0KCZsMl9zcmFtX2xvY2spOwotfQotdm9pZCBfX2luaXQgYmZpbl9zcmFtX2luaXQodm9pZCkKLXsKLQlzcmFtX3BpZWNlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInNyYW1fcGllY2VfY2FjaGUiLAotCQkJCXNpemVvZihzdHJ1Y3Qgc3JhbV9waWVjZSksCi0JCQkJMCwgU0xBQl9QQU5JQywgTlVMTCk7Ci0KLQlsMXNyYW1faW5pdCgpOwotCWwxX2RhdGFfc3JhbV9pbml0KCk7Ci0JbDFfaW5zdF9zcmFtX2luaXQoKTsKLQlsMl9zcmFtX2luaXQoKTsKLX0KLQotLyogU1JBTSBhbGxvY2F0ZSBmdW5jdGlvbiAqLwotc3RhdGljIHZvaWQgKl9zcmFtX2FsbG9jKHNpemVfdCBzaXplLCBzdHJ1Y3Qgc3JhbV9waWVjZSAqcGZyZWVfaGVhZCwKLQkJc3RydWN0IHNyYW1fcGllY2UgKnB1c2VkX2hlYWQpCi17Ci0Jc3RydWN0IHNyYW1fcGllY2UgKnBzbG90LCAqcGxhc3QsICpwYXZhaWw7Ci0KLQlpZiAoc2l6ZSA8PSAwIHx8ICFwZnJlZV9oZWFkIHx8ICFwdXNlZF9oZWFkKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIEFsaWduIHRoZSBzaXplICovCi0Jc2l6ZSA9IChzaXplICsgMykgJiB+MzsKLQotCXBzbG90ID0gcGZyZWVfaGVhZC0+bmV4dDsKLQlwbGFzdCA9IHBmcmVlX2hlYWQ7Ci0KLQkvKiBzZWFyY2ggYW4gYXZhaWxhYmxlIHBpZWNlIHNsb3QgKi8KLQl3aGlsZSAocHNsb3QgIT0gTlVMTCAmJiBzaXplID4gcHNsb3QtPnNpemUpIHsKLQkJcGxhc3QgPSBwc2xvdDsKLQkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKLQl9Ci0KLQlpZiAoIXBzbG90KQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChwc2xvdC0+c2l6ZSA9PSBzaXplKSB7Ci0JCXBsYXN0LT5uZXh0ID0gcHNsb3QtPm5leHQ7Ci0JCXBhdmFpbCA9IHBzbG90OwotCX0gZWxzZSB7Ci0JCXBhdmFpbCA9IGttZW1fY2FjaGVfYWxsb2Moc3JhbV9waWVjZV9jYWNoZSwgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCFwYXZhaWwpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlwYXZhaWwtPnBhZGRyID0gcHNsb3QtPnBhZGRyOwotCQlwYXZhaWwtPnNpemUgPSBzaXplOwotCQlwc2xvdC0+cGFkZHIgKz0gc2l6ZTsKLQkJcHNsb3QtPnNpemUgLT0gc2l6ZTsKLQl9Ci0KLQlwYXZhaWwtPnBpZCA9IGN1cnJlbnQtPnBpZDsKLQotCXBzbG90ID0gcHVzZWRfaGVhZC0+bmV4dDsKLQlwbGFzdCA9IHB1c2VkX2hlYWQ7Ci0KLQkvKiBpbnNlcnQgbmV3IHBpZWNlIGludG8gdXNlZCBwaWVjZSBsaXN0ICEhISAqLwotCXdoaWxlIChwc2xvdCAhPSBOVUxMICYmIHBhdmFpbC0+cGFkZHIgPCBwc2xvdC0+cGFkZHIpIHsKLQkJcGxhc3QgPSBwc2xvdDsKLQkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKLQl9Ci0KLQlwYXZhaWwtPm5leHQgPSBwc2xvdDsKLQlwbGFzdC0+bmV4dCA9IHBhdmFpbDsKLQotCXJldHVybiBwYXZhaWwtPnBhZGRyOwotfQotCi0vKiBBbGxvY2F0ZSB0aGUgbGFyZ2VzdCBhdmFpbGFibGUgYmxvY2suICAqLwotc3RhdGljIHZvaWQgKl9zcmFtX2FsbG9jX21heChzdHJ1Y3Qgc3JhbV9waWVjZSAqcGZyZWVfaGVhZCwKLQkJCQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHVzZWRfaGVhZCwKLQkJCQl1bnNpZ25lZCBsb25nICpwc2l6ZSkKLXsKLQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHNsb3QsICpwbWF4OwotCi0JaWYgKCFwZnJlZV9oZWFkIHx8ICFwdXNlZF9oZWFkKQotCQlyZXR1cm4gTlVMTDsKLQotCXBtYXggPSBwc2xvdCA9IHBmcmVlX2hlYWQtPm5leHQ7Ci0KLQkvKiBzZWFyY2ggYW4gYXZhaWxhYmxlIHBpZWNlIHNsb3QgKi8KLQl3aGlsZSAocHNsb3QgIT0gTlVMTCkgewotCQlpZiAocHNsb3QtPnNpemUgPiBwbWF4LT5zaXplKQotCQkJcG1heCA9IHBzbG90OwotCQlwc2xvdCA9IHBzbG90LT5uZXh0OwotCX0KLQotCWlmICghcG1heCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkqcHNpemUgPSBwbWF4LT5zaXplOwotCi0JcmV0dXJuIF9zcmFtX2FsbG9jKCpwc2l6ZSwgcGZyZWVfaGVhZCwgcHVzZWRfaGVhZCk7Ci19Ci0KLS8qIFNSQU0gZnJlZSBmdW5jdGlvbiAqLwotc3RhdGljIGludCBfc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIsCi0JCQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcGZyZWVfaGVhZCwKLQkJCXN0cnVjdCBzcmFtX3BpZWNlICpwdXNlZF9oZWFkKQotewotCXN0cnVjdCBzcmFtX3BpZWNlICpwc2xvdCwgKnBsYXN0LCAqcGF2YWlsOwotCi0JaWYgKCFwZnJlZV9oZWFkIHx8ICFwdXNlZF9oZWFkKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBzZWFyY2ggdGhlIHJlbGV2YW50IG1lbW9yeSBzbG90ICovCi0JcHNsb3QgPSBwdXNlZF9oZWFkLT5uZXh0OwotCXBsYXN0ID0gcHVzZWRfaGVhZDsKLQotCS8qIHNlYXJjaCBhbiBhdmFpbGFibGUgcGllY2Ugc2xvdCAqLwotCXdoaWxlIChwc2xvdCAhPSBOVUxMICYmIHBzbG90LT5wYWRkciAhPSBhZGRyKSB7Ci0JCXBsYXN0ID0gcHNsb3Q7Ci0JCXBzbG90ID0gcHNsb3QtPm5leHQ7Ci0JfQotCi0JaWYgKCFwc2xvdCkKLQkJcmV0dXJuIC0xOwotCi0JcGxhc3QtPm5leHQgPSBwc2xvdC0+bmV4dDsKLQlwYXZhaWwgPSBwc2xvdDsKLQlwYXZhaWwtPnBpZCA9IDA7Ci0KLQkvKiBpbnNlcnQgZnJlZSBwaWVjZXMgYmFjayB0byB0aGUgZnJlZSBsaXN0ICovCi0JcHNsb3QgPSBwZnJlZV9oZWFkLT5uZXh0OwotCXBsYXN0ID0gcGZyZWVfaGVhZDsKLQotCXdoaWxlIChwc2xvdCAhPSBOVUxMICYmIGFkZHIgPiBwc2xvdC0+cGFkZHIpIHsKLQkJcGxhc3QgPSBwc2xvdDsKLQkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKLQl9Ci0KLQlpZiAocGxhc3QgIT0gcGZyZWVfaGVhZCAmJiBwbGFzdC0+cGFkZHIgKyBwbGFzdC0+c2l6ZSA9PSBwYXZhaWwtPnBhZGRyKSB7Ci0JCXBsYXN0LT5zaXplICs9IHBhdmFpbC0+c2l6ZTsKLQkJa21lbV9jYWNoZV9mcmVlKHNyYW1fcGllY2VfY2FjaGUsIHBhdmFpbCk7Ci0JfSBlbHNlIHsKLQkJcGF2YWlsLT5uZXh0ID0gcGxhc3QtPm5leHQ7Ci0JCXBsYXN0LT5uZXh0ID0gcGF2YWlsOwotCQlwbGFzdCA9IHBhdmFpbDsKLQl9Ci0KLQlpZiAocHNsb3QgJiYgcGxhc3QtPnBhZGRyICsgcGxhc3QtPnNpemUgPT0gcHNsb3QtPnBhZGRyKSB7Ci0JCXBsYXN0LT5zaXplICs9IHBzbG90LT5zaXplOwotCQlwbGFzdC0+bmV4dCA9IHBzbG90LT5uZXh0OwotCQlrbWVtX2NhY2hlX2ZyZWUoc3JhbV9waWVjZV9jYWNoZSwgcHNsb3QpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIpCi17Ci0JaWYgKDApIHt9Ci0jaWYgTDFfQ09ERV9MRU5HVEggIT0gMAotCWVsc2UgaWYgKGFkZHIgPj0gKHZvaWQgKilMMV9DT0RFX1NUQVJUCi0JCSAmJiBhZGRyIDwgKHZvaWQgKikoTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIKSkKLQkJcmV0dXJuIGwxX2luc3Rfc3JhbV9mcmVlKGFkZHIpOwotI2VuZGlmCi0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi0JZWxzZSBpZiAoYWRkciA+PSAodm9pZCAqKUwxX0RBVEFfQV9TVEFSVAotCQkgJiYgYWRkciA8ICh2b2lkICopKEwxX0RBVEFfQV9TVEFSVCArIEwxX0RBVEFfQV9MRU5HVEgpKQotCQlyZXR1cm4gbDFfZGF0YV9BX3NyYW1fZnJlZShhZGRyKTsKLSNlbmRpZgotI2lmIEwxX0RBVEFfQl9MRU5HVEggIT0gMAotCWVsc2UgaWYgKGFkZHIgPj0gKHZvaWQgKilMMV9EQVRBX0JfU1RBUlQKLQkJICYmIGFkZHIgPCAodm9pZCAqKShMMV9EQVRBX0JfU1RBUlQgKyBMMV9EQVRBX0JfTEVOR1RIKSkKLQkJcmV0dXJuIGwxX2RhdGFfQl9zcmFtX2ZyZWUoYWRkcik7Ci0jZW5kaWYKLSNpZiBMMl9MRU5HVEggIT0gMAotCWVsc2UgaWYgKGFkZHIgPj0gKHZvaWQgKilMMl9TVEFSVAotCQkgJiYgYWRkciA8ICh2b2lkICopKEwyX1NUQVJUICsgTDJfTEVOR1RIKSkKLQkJcmV0dXJuIGwyX3NyYW1fZnJlZShhZGRyKTsKLSNlbmRpZgotCWVsc2UKLQkJcmV0dXJuIC0xOwotfQotRVhQT1JUX1NZTUJPTChzcmFtX2ZyZWUpOwotCi12b2lkICpsMV9kYXRhX0Ffc3JhbV9hbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgKmFkZHIgPSBOVUxMOwotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOwotCi0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi0JYWRkciA9IF9zcmFtX2FsbG9jKHNpemUsICZmcmVlX2wxX2RhdGFfQV9zcmFtX2hlYWQsCi0JCQkmdXNlZF9sMV9kYXRhX0Ffc3JhbV9oZWFkKTsKLSNlbmRpZgotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwxX2RhdGFfc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlwcl9kZWJ1ZygiQWxsb2NhdGVkIGFkZHJlc3MgaW4gbDFfZGF0YV9BX3NyYW1fYWxsb2MgaXMgMHglbHgrMHglbHhcbiIsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkciwgc2l6ZSk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLUVYUE9SVF9TWU1CT0wobDFfZGF0YV9BX3NyYW1fYWxsb2MpOwotCi1pbnQgbDFfZGF0YV9BX3NyYW1fZnJlZShjb25zdCB2b2lkICphZGRyKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbDFfZGF0YV9zcmFtX2xvY2ssIGZsYWdzKTsKLQotI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAotCXJldCA9IF9zcmFtX2ZyZWUoYWRkciwgJmZyZWVfbDFfZGF0YV9BX3NyYW1faGVhZCwKLQkJCSZ1c2VkX2wxX2RhdGFfQV9zcmFtX2hlYWQpOwotI2Vsc2UKLQlyZXQgPSAtMTsKLSNlbmRpZgotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwxX2RhdGFfc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChsMV9kYXRhX0Ffc3JhbV9mcmVlKTsKLQotdm9pZCAqbDFfZGF0YV9CX3NyYW1fYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0jaWYgTDFfREFUQV9CX0xFTkdUSCAhPSAwCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl2b2lkICphZGRyOwotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JYWRkciA9IF9zcmFtX2FsbG9jKHNpemUsICZmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQsCi0JCQkmdXNlZF9sMV9kYXRhX0Jfc3JhbV9oZWFkKTsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcHJfZGVidWcoIkFsbG9jYXRlZCBhZGRyZXNzIGluIGwxX2RhdGFfQl9zcmFtX2FsbG9jIGlzIDB4JWx4KzB4JWx4XG4iLAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWFkZHIsIHNpemUpOwotCi0JcmV0dXJuIGFkZHI7Ci0jZWxzZQotCXJldHVybiBOVUxMOwotI2VuZGlmCi19Ci1FWFBPUlRfU1lNQk9MKGwxX2RhdGFfQl9zcmFtX2FsbG9jKTsKLQotaW50IGwxX2RhdGFfQl9zcmFtX2ZyZWUoY29uc3Qgdm9pZCAqYWRkcikKLXsKLSNpZiBMMV9EQVRBX0JfTEVOR1RIICE9IDAKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmwxX2RhdGFfc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXQgPSBfc3JhbV9mcmVlKGFkZHIsICZmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQsCi0JCQkmdXNlZF9sMV9kYXRhX0Jfc3JhbV9oZWFkKTsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLSNlbHNlCi0JcmV0dXJuIC0xOwotI2VuZGlmCi19Ci1FWFBPUlRfU1lNQk9MKGwxX2RhdGFfQl9zcmFtX2ZyZWUpOwotCi12b2lkICpsMV9kYXRhX3NyYW1fYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0Jdm9pZCAqYWRkciA9IGwxX2RhdGFfQV9zcmFtX2FsbG9jKHNpemUpOwotCi0JaWYgKCFhZGRyKQotCQlhZGRyID0gbDFfZGF0YV9CX3NyYW1fYWxsb2Moc2l6ZSk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLUVYUE9SVF9TWU1CT0wobDFfZGF0YV9zcmFtX2FsbG9jKTsKLQotdm9pZCAqbDFfZGF0YV9zcmFtX3phbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLQl2b2lkICphZGRyID0gbDFfZGF0YV9zcmFtX2FsbG9jKHNpemUpOwotCi0JaWYgKGFkZHIpCi0JCW1lbXNldChhZGRyLCAweDAwLCBzaXplKTsKLQotCXJldHVybiBhZGRyOwotfQotRVhQT1JUX1NZTUJPTChsMV9kYXRhX3NyYW1femFsbG9jKTsKLQotaW50IGwxX2RhdGFfc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIpCi17Ci0JaW50IHJldDsKLQlyZXQgPSBsMV9kYXRhX0Ffc3JhbV9mcmVlKGFkZHIpOwotCWlmIChyZXQgPT0gLTEpCi0JCXJldCA9IGwxX2RhdGFfQl9zcmFtX2ZyZWUoYWRkcik7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wobDFfZGF0YV9zcmFtX2ZyZWUpOwotCi12b2lkICpsMV9pbnN0X3NyYW1fYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0jaWYgTDFfQ09ERV9MRU5HVEggIT0gMAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jdm9pZCAqYWRkcjsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbDFfaW5zdF9zcmFtX2xvY2ssIGZsYWdzKTsKLQotCWFkZHIgPSBfc3JhbV9hbGxvYyhzaXplLCAmZnJlZV9sMV9pbnN0X3NyYW1faGVhZCwKLQkJCSZ1c2VkX2wxX2luc3Rfc3JhbV9oZWFkKTsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9pbnN0X3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcHJfZGVidWcoIkFsbG9jYXRlZCBhZGRyZXNzIGluIGwxX2luc3Rfc3JhbV9hbGxvYyBpcyAweCVseCsweCVseFxuIiwKLQkJIChsb25nIHVuc2lnbmVkIGludClhZGRyLCBzaXplKTsKLQotCXJldHVybiBhZGRyOwotI2Vsc2UKLQlyZXR1cm4gTlVMTDsKLSNlbmRpZgotfQotRVhQT1JUX1NZTUJPTChsMV9pbnN0X3NyYW1fYWxsb2MpOwotCi1pbnQgbDFfaW5zdF9zcmFtX2ZyZWUoY29uc3Qgdm9pZCAqYWRkcikKLXsKLSNpZiBMMV9DT0RFX0xFTkdUSCAhPSAwCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0OwotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZsMV9pbnN0X3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0ID0gX3NyYW1fZnJlZShhZGRyLCAmZnJlZV9sMV9pbnN0X3NyYW1faGVhZCwKLQkJCSZ1c2VkX2wxX2luc3Rfc3JhbV9oZWFkKTsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9pbnN0X3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLSNlbHNlCi0JcmV0dXJuIC0xOwotI2VuZGlmCi19Ci1FWFBPUlRfU1lNQk9MKGwxX2luc3Rfc3JhbV9mcmVlKTsKLQotLyogTDEgU2NyYXRjaHBhZCBtZW1vcnkgYWxsb2NhdGUgZnVuY3Rpb24gKi8KLXZvaWQgKmwxc3JhbV9hbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgKmFkZHI7Ci0KLQkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlhZGRyID0gX3NyYW1fYWxsb2Moc2l6ZSwgJmZyZWVfbDFfc3NyYW1faGVhZCwKLQkJCSZ1c2VkX2wxX3NzcmFtX2hlYWQpOwotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotLyogTDEgU2NyYXRjaHBhZCBtZW1vcnkgYWxsb2NhdGUgZnVuY3Rpb24gKi8KLXZvaWQgKmwxc3JhbV9hbGxvY19tYXgoc2l6ZV90ICpwc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgKmFkZHI7Ci0KLQkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlhZGRyID0gX3NyYW1fYWxsb2NfbWF4KCZmcmVlX2wxX3NzcmFtX2hlYWQsCi0JCQkmdXNlZF9sMV9zc3JhbV9oZWFkLCBwc2l6ZSk7Ci0KLQkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDFzcmFtX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBhZGRyOwotfQotCi0vKiBMMSBTY3JhdGNocGFkIG1lbW9yeSBmcmVlIGZ1bmN0aW9uICovCi1pbnQgbDFzcmFtX2ZyZWUoY29uc3Qgdm9pZCAqYWRkcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXQgPSBfc3JhbV9mcmVlKGFkZHIsICZmcmVlX2wxX3NzcmFtX2hlYWQsCi0JCQkmdXNlZF9sMV9zc3JhbV9oZWFkKTsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMXNyYW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCAqbDJfc3JhbV9hbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLSNpZiBMMl9MRU5HVEggIT0gMAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jdm9pZCAqYWRkcjsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbDJfc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlhZGRyID0gX3NyYW1fYWxsb2Moc2l6ZSwgJmZyZWVfbDJfc3JhbV9oZWFkLAotCQkJJnVzZWRfbDJfc3JhbV9oZWFkKTsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMl9zcmFtX2xvY2ssIGZsYWdzKTsKLQotCXByX2RlYnVnKCJBbGxvY2F0ZWQgYWRkcmVzcyBpbiBsMl9zcmFtX2FsbG9jIGlzIDB4JWx4KzB4JWx4XG4iLAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWFkZHIsIHNpemUpOwotCi0JcmV0dXJuIGFkZHI7Ci0jZWxzZQotCXJldHVybiBOVUxMOwotI2VuZGlmCi19Ci1FWFBPUlRfU1lNQk9MKGwyX3NyYW1fYWxsb2MpOwotCi12b2lkICpsMl9zcmFtX3phbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLQl2b2lkICphZGRyID0gbDJfc3JhbV9hbGxvYyhzaXplKTsKLQotCWlmIChhZGRyKQotCQltZW1zZXQoYWRkciwgMHgwMCwgc2l6ZSk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLUVYUE9SVF9TWU1CT0wobDJfc3JhbV96YWxsb2MpOwotCi1pbnQgbDJfc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIpCi17Ci0jaWYgTDJfTEVOR1RIICE9IDAKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmwyX3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0ID0gX3NyYW1fZnJlZShhZGRyLCAmZnJlZV9sMl9zcmFtX2hlYWQsCi0JCQkmdXNlZF9sMl9zcmFtX2hlYWQpOwotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwyX3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLSNlbHNlCi0JcmV0dXJuIC0xOwotI2VuZGlmCi19Ci1FWFBPUlRfU1lNQk9MKGwyX3NyYW1fZnJlZSk7Ci0KLWludCBzcmFtX2ZyZWVfd2l0aF9sc2woY29uc3Qgdm9pZCAqYWRkcikKLXsKLQlzdHJ1Y3Qgc3JhbV9saXN0X3N0cnVjdCAqbHNsLCAqKnRtcDsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwotCi0JZm9yICh0bXAgPSAmbW0tPmNvbnRleHQuc3JhbV9saXN0OyAqdG1wOyB0bXAgPSAmKCp0bXApLT5uZXh0KQotCQlpZiAoKCp0bXApLT5hZGRyID09IGFkZHIpCi0JCQlnb3RvIGZvdW5kOwotCXJldHVybiAtMTsKLWZvdW5kOgotCWxzbCA9ICp0bXA7Ci0Jc3JhbV9mcmVlKGFkZHIpOwotCSp0bXAgPSBsc2wtPm5leHQ7Ci0Ja2ZyZWUobHNsKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChzcmFtX2ZyZWVfd2l0aF9sc2wpOwotCi12b2lkICpzcmFtX2FsbG9jX3dpdGhfbHNsKHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXZvaWQgKmFkZHIgPSBOVUxMOwotCXN0cnVjdCBzcmFtX2xpc3Rfc3RydWN0ICpsc2wgPSBOVUxMOwotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0KLQlsc2wgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3JhbV9saXN0X3N0cnVjdCksIEdGUF9LRVJORUwpOwotCWlmICghbHNsKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChmbGFncyAmIEwxX0lOU1RfU1JBTSkKLQkJYWRkciA9IGwxX2luc3Rfc3JhbV9hbGxvYyhzaXplKTsKLQotCWlmIChhZGRyID09IE5VTEwgJiYgKGZsYWdzICYgTDFfREFUQV9BX1NSQU0pKQotCQlhZGRyID0gbDFfZGF0YV9BX3NyYW1fYWxsb2Moc2l6ZSk7Ci0KLQlpZiAoYWRkciA9PSBOVUxMICYmIChmbGFncyAmIEwxX0RBVEFfQl9TUkFNKSkKLQkJYWRkciA9IGwxX2RhdGFfQl9zcmFtX2FsbG9jKHNpemUpOwotCi0JaWYgKGFkZHIgPT0gTlVMTCAmJiAoZmxhZ3MgJiBMMl9TUkFNKSkKLQkJYWRkciA9IGwyX3NyYW1fYWxsb2Moc2l6ZSk7Ci0KLQlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGxzbCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlsc2wtPmFkZHIgPSBhZGRyOwotCWxzbC0+bGVuZ3RoID0gc2l6ZTsKLQlsc2wtPm5leHQgPSBtbS0+Y29udGV4dC5zcmFtX2xpc3Q7Ci0JbW0tPmNvbnRleHQuc3JhbV9saXN0ID0gbHNsOwotCXJldHVybiBhZGRyOwotfQotRVhQT1JUX1NZTUJPTChzcmFtX2FsbG9jX3dpdGhfbHNsKTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0vKiBPbmNlIHdlIGdldCBhIHJlYWwgYWxsb2NhdG9yLCB3ZSdsbCB0aHJvdyBhbGwgb2YgdGhpcyBhd2F5LgotICogVW50aWwgdGhlbiwgd2UgbmVlZCBzb21lIHNvcnQgb2YgdmlzaWJpbGl0eSBpbnRvIHRoZSBMMSBhbGxvYy4KLSAqLwotLyogTmVlZCB0byBrZWVwIGxpbmUgb2Ygb3V0cHV0IHRoZSBzYW1lLiAgQ3VycmVudGx5LCB0aGF0IGlzIDQ0IGJ5dGVzCi0gKiAoaW5jbHVkaW5nIG5ld2xpbmUpLgotICovCi1zdGF0aWMgaW50IF9zcmFtX3Byb2NfcmVhZChjaGFyICpidWYsIGludCAqbGVuLCBpbnQgY291bnQsIGNvbnN0IGNoYXIgKmRlc2MsCi0JCXN0cnVjdCBzcmFtX3BpZWNlICpwZnJlZV9oZWFkLAotCQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHVzZWRfaGVhZCkKLXsKLQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHNsb3Q7Ci0KLQlpZiAoIXBmcmVlX2hlYWQgfHwgIXB1c2VkX2hlYWQpCi0JCXJldHVybiAtMTsKLQotCSpsZW4gKz0gc3ByaW50ZigmYnVmWypsZW5dLCAiLS0tIFNSQU0gJS0xNHMgU2l6ZSAgIFBJRCBTdGF0ZSAgICAgXG4iLCBkZXNjKTsKLQotCS8qIHNlYXJjaCB0aGUgcmVsZXZhbnQgbWVtb3J5IHNsb3QgKi8KLQlwc2xvdCA9IHB1c2VkX2hlYWQtPm5leHQ7Ci0KLQl3aGlsZSAocHNsb3QgIT0gTlVMTCkgewotCQkqbGVuICs9IHNwcmludGYoJmJ1ZlsqbGVuXSwgIiVwLSVwICUxMGkgJTVpICUtMTBzXG4iLAotCQkJcHNsb3QtPnBhZGRyLCBwc2xvdC0+cGFkZHIgKyBwc2xvdC0+c2l6ZSwKLQkJCXBzbG90LT5zaXplLCBwc2xvdC0+cGlkLCAiQUxMT0NBVEVEIik7Ci0KLQkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKLQl9Ci0KLQlwc2xvdCA9IHBmcmVlX2hlYWQtPm5leHQ7Ci0KLQl3aGlsZSAocHNsb3QgIT0gTlVMTCkgewotCQkqbGVuICs9IHNwcmludGYoJmJ1ZlsqbGVuXSwgIiVwLSVwICUxMGkgJTVpICUtMTBzXG4iLAotCQkJcHNsb3QtPnBhZGRyLCBwc2xvdC0+cGFkZHIgKyBwc2xvdC0+c2l6ZSwKLQkJCXBzbG90LT5zaXplLCBwc2xvdC0+cGlkLCAiRlJFRSIpOwotCi0JCXBzbG90ID0gcHNsb3QtPm5leHQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW50IHNyYW1fcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBjb3VudCwKLQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGxlbiA9IDA7Ci0KLQlpZiAoX3NyYW1fcHJvY19yZWFkKGJ1ZiwgJmxlbiwgY291bnQsICJTY3JhdGNocGFkIiwKLQkJCSZmcmVlX2wxX3NzcmFtX2hlYWQsICZ1c2VkX2wxX3NzcmFtX2hlYWQpKQotCQlnb3RvIG5vdF9kb25lOwotI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAotCWlmIChfc3JhbV9wcm9jX3JlYWQoYnVmLCAmbGVuLCBjb3VudCwgIkwxIERhdGEgQSIsCi0JCQkmZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLAotCQkJJnVzZWRfbDFfZGF0YV9BX3NyYW1faGVhZCkpCi0JCWdvdG8gbm90X2RvbmU7Ci0jZW5kaWYKLSNpZiBMMV9EQVRBX0JfTEVOR1RIICE9IDAKLQlpZiAoX3NyYW1fcHJvY19yZWFkKGJ1ZiwgJmxlbiwgY291bnQsICJMMSBEYXRhIEIiLAotCQkJJmZyZWVfbDFfZGF0YV9CX3NyYW1faGVhZCwKLQkJCSZ1c2VkX2wxX2RhdGFfQl9zcmFtX2hlYWQpKQotCQlnb3RvIG5vdF9kb25lOwotI2VuZGlmCi0jaWYgTDFfQ09ERV9MRU5HVEggIT0gMAotCWlmIChfc3JhbV9wcm9jX3JlYWQoYnVmLCAmbGVuLCBjb3VudCwgIkwxIEluc3RydWN0aW9uIiwKLQkJCSZmcmVlX2wxX2luc3Rfc3JhbV9oZWFkLCAmdXNlZF9sMV9pbnN0X3NyYW1faGVhZCkpCi0JCWdvdG8gbm90X2RvbmU7Ci0jZW5kaWYKLSNpZiBMMl9MRU5HVEggIT0gMAotCWlmIChfc3JhbV9wcm9jX3JlYWQoYnVmLCAmbGVuLCBjb3VudCwgIkwyIiwKLQkJCSZmcmVlX2wyX3NyYW1faGVhZCwgJnVzZWRfbDJfc3JhbV9oZWFkKSkKLQkJZ290byBub3RfZG9uZTsKLSNlbmRpZgotCi0JKmVvZiA9IDE7Ci0gbm90X2RvbmU6Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludCBfX2luaXQgc3JhbV9wcm9jX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnB0cjsKLQlwdHIgPSBjcmVhdGVfcHJvY19lbnRyeSgic3JhbSIsIFNfSUZSRUcgfCBTX0lSVUdPLCBOVUxMKTsKLQlpZiAoIXB0cikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1bmFibGUgdG8gY3JlYXRlIC9wcm9jL3NyYW1cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXB0ci0+b3duZXIgPSBUSElTX01PRFVMRTsKLQlwdHItPnJlYWRfcHJvYyA9IHNyYW1fcHJvY19yZWFkOwotCXJldHVybiAwOwotfQotbGF0ZV9pbml0Y2FsbChzcmFtX3Byb2NfaW5pdCk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbW0vaXNyYW0tZHJpdmVyLmMgYi9hcmNoL2JsYWNrZmluL21tL2lzcmFtLWRyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTEzZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL21tL2lzcmFtLWRyaXZlci5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogRGVzY3JpcHRpb246IEluc3RydWN0aW9uIFNSQU0gYWNjZXNzb3IgZnVuY3Rpb25zIGZvciB0aGUgQmxhY2tmaW4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCisgKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KKworLyoKKyAqIElNUE9SVEFOVCBXQVJOSU5HIEFCT1VUIFRIRVNFIEZVTkNUSU9OUworICoKKyAqIFRoZSBlbXVsYXRvciB3aWxsIG5vdCBmdW5jdGlvbiBjb3JyZWN0bHkgaWYgYSB3cml0ZSBjb21tYW5kIGlzIGxlZnQgaW4KKyAqIElURVNUX0NPTU1BTkQgb3IgRFRFU1RfQ09NTUFORCBBTkQgYWNjZXNzIHRvIGNhY2hlIG1lbW9yeSBpcyBuZWVkZWQgYnkKKyAqIHRoZSBlbXVsYXRvci4gVG8gYXZvaWQgc3VjaCBwcm9ibGVtcywgZW5zdXJlIHRoYXQgYm90aCBJVEVTVF9DT01NQU5ECisgKiBhbmQgRFRFU1RfQ09NTUFORCBhcmUgemVybyB3aGVuIGV4aXRpbmcgdGhlc2UgZnVuY3Rpb25zLgorICovCisKKworLyoKKyAqIE9uIHRoZSBCbGFja2ZpbiwgTDEgaW5zdHJ1Y3Rpb24gc3JhbSAod2hpY2ggb3BlcmF0ZXMgYXQgY29yZSBzcGVlZHMpIGNhbiBub3QKKyAqIGJlIGFjY2Vzc2VkIGJ5IGEgbm9ybWFsIGNvcmUgbG9hZCwgc28gd2UgbmVlZCB0byBnbyB0aHJvdWdoIGEgZmV3IGhvb3BzIHRvCisgKiByZWFkL3dyaXRlIGl0LgorICogVG8gdHJ5IHRvIG1ha2UgaXQgZWFzaWVyIC0gd2UgZXhwb3J0IGEgbWVtY3B5IGludGVyZmFjZSwgd2hlcmUgZWl0aGVyIHNyYyBvcgorICogZGVzdCBjYW4gYmUgaW4gdGhpcyBzcGVjaWFsIEwxIG1lbW9yeSBhcmVhLgorICogVGhlIGxvdyBsZXZlbCByZWFkL3dyaXRlIGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIGV4cG9zZWQgdG8gdGhlIHJlc3Qgb2YgdGhlCisgKiBrZXJuZWwsIHNpbmNlIHRoZXkgb3BlcmF0ZSBvbiA2NC1iaXQgZGF0YSwgYW5kIG5lZWQgc3BlY2lmaWMgYWRkcmVzcyBhbGlnbm1lbnQKKyAqLworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGR0ZXN0X2xvY2spOworCisvKiBUYWtlcyBhIHZvaWQgcG9pbnRlciAqLworI2RlZmluZSBJQUREUjJEVEVTVCh4KSBcCisJKHsgdW5zaWduZWQgbG9uZyBfX2FkZHIgPSAodW5zaWduZWQgbG9uZykoeCk7IFwKKwkJKF9fYWRkciAmIDB4NDdGOCkgICAgICAgIHwgLyogYWRkcmVzcyBiaXRzIDE0ICYgMTA6MyAqLyBcCisJCShfX2FkZHIgJiAweDA4MDApIDw8IDE1ICB8IC8qIGFkZHJlc3MgYml0ICAxMSAgICAgICAgKi8gXAorCQkoX19hZGRyICAmIDB4MzAwMCkgPDwgNCAgfCAvKiBhZGRyZXNzIGJpdHMgMTM6MTIgICAgICovIFwKKwkJKF9fYWRkciAgJiAweDgwMDApIDw8IDggIHwgLyogYWRkcmVzcyBiaXQgIDE1ICAgICAgICAqLyBcCisJCSgweDEwMDAwMDQpOyAgICAgICAgICAgICAgIC8qIGlzcmFtIGFjY2VzcyAgICAgICAgICAgKi8gXAorCX0pCisKKy8qIFRha2VzIGEgcG9pbnRlciwgYW5kIHJldHVybnMgdGhlIG9mZnNldCAoaW4gYml0cykgd2hpY2ggdGhpbmdzIHNob3VsZCBiZSBzaGlmdGVkICovCisjZGVmaW5lIEFERFIyT0ZGU0VUKHgpICgoKCh1bnNpZ25lZCBsb25nKSh4KSkgJiAweDcpICogOCkKKworLyogVGFrZXMgYSBwb2ludGVyLCBkZXRlcm1pbmVzIGlmIGl0IGlzIHRoZSBsYXN0IGJ5dGUgaW4gdGhlIGlzcmFtIDY0LWJpdCBkYXRhIHR5cGUgKi8KKyNkZWZpbmUgQUREUjJMQVNUKHgpICgoKCh1bnNpZ25lZCBsb25nKXgpICYgMHg3KSA9PSAweDcpCisKK3N0YXRpYyB2b2lkIGlzcmFtX3dyaXRlKGNvbnN0IHZvaWQgKmFkZHIsIHVpbnQ2NF90IGRhdGEpCit7CisJdWludDMyX3QgY21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoYWRkciA+PSAodm9pZCAqKShMMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgpKQorCQlyZXR1cm47CisKKwljbWQgPSBJQUREUjJEVEVTVChhZGRyKSB8IDE7ICAgICAgICAgICAgIC8qIHdyaXRlICovCisKKwkvKgorCSAqIFdyaXRlcyB0byBEVEVTVF9EQVRBWzA6MV0gbmVlZCB0byBiZSBhdG9taWMgd2l0aCB3cml0ZSB0byBEVEVTVF9DT01NQU5ECisJICogV2hpbGUgaW4gZXhjZXB0aW9uIGNvbnRleHQgLSBhdG9taWNpdHkgaXMgZ3VhcmFudGVlZCBvciBkb3VibGUgZmF1bHQKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHRlc3RfbG9jaywgZmxhZ3MpOworCisJYmZpbl93cml0ZV9EVEVTVF9EQVRBMChkYXRhICYgMHhGRkZGRkZGRik7CisJYmZpbl93cml0ZV9EVEVTVF9EQVRBMShkYXRhID4+IDMyKTsKKworCS8qIHVzZSB0aGUgYnVpbHRpbiwgc2luY2UgaW50ZXJydXB0cyBhcmUgYWxyZWFkeSB0dXJuZWQgb2ZmICovCisJX19idWlsdGluX2JmaW5fY3N5bmMoKTsKKwliZmluX3dyaXRlX0RURVNUX0NPTU1BTkQoY21kKTsKKwlfX2J1aWx0aW5fYmZpbl9jc3luYygpOworCisJYmZpbl93cml0ZV9EVEVTVF9DT01NQU5EKDApOworCV9fYnVpbHRpbl9iZmluX2NzeW5jKCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkdGVzdF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBpc3JhbV9yZWFkKGNvbnN0IHZvaWQgKmFkZHIpCit7CisJdWludDMyX3QgY21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdWludDY0X3QgcmV0OworCisJaWYgKGFkZHIgPiAodm9pZCAqKShMMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgpKQorCQlyZXR1cm4gMDsKKworCWNtZCA9IElBRERSMkRURVNUKGFkZHIpIHwgMDsgICAgICAgICAgICAgIC8qIHJlYWQgKi8KKworCS8qCisJICogUmVhZHMgb2YgRFRFU1RfREFUQVswOjFdIG5lZWQgdG8gYmUgYXRvbWljIHdpdGggd3JpdGUgdG8gRFRFU1RfQ09NTUFORAorCSAqIFdoaWxlIGluIGV4Y2VwdGlvbiBjb250ZXh0IC0gYXRvbWljaXR5IGlzIGd1YXJhbnRlZWQgb3IgZG91YmxlIGZhdWx0CisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmR0ZXN0X2xvY2ssIGZsYWdzKTsKKwkvKiB1c2UgdGhlIGJ1aWx0aW4sIHNpbmNlIGludGVycnVwdHMgYXJlIGFscmVhZHkgdHVybmVkIG9mZiAqLworCV9fYnVpbHRpbl9iZmluX2NzeW5jKCk7CisJYmZpbl93cml0ZV9EVEVTVF9DT01NQU5EKGNtZCk7CisJX19idWlsdGluX2JmaW5fY3N5bmMoKTsKKwlyZXQgPSBiZmluX3JlYWRfRFRFU1RfREFUQTAoKSB8ICgodWludDY0X3QpYmZpbl9yZWFkX0RURVNUX0RBVEExKCkgPDwgMzIpOworCisJYmZpbl93cml0ZV9EVEVTVF9DT01NQU5EKDApOworCV9fYnVpbHRpbl9iZmluX2NzeW5jKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHRlc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGJvb2wgaXNyYW1fY2hlY2tfYWRkcihjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbikKK3sKKwlpZiAoKGFkZHIgPj0gKHZvaWQgKilMMV9DT0RFX1NUQVJUKSAmJgorCSAgICAoYWRkciA8ICh2b2lkICopKEwxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSCkpKSB7CisJCWlmICgoYWRkciArIG4pID49ICh2b2lkICopKEwxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSCkpIHsKKwkJCXNob3dfc3RhY2soTlVMTCwgTlVMTCk7CisJCQlwcmludGsoS0VSTl9FUlIgImlzcmFtX21lbWNweTogY29weSBpbnZvbHZpbmcgJXAgbGVuZ3RoICIKKwkJCQkJIiglenUpIHRvbyBsb25nXG4iLCBhZGRyLCBuKTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogVGhlIGlzcmFtX21lbWNweSgpIGZ1bmN0aW9uIGNvcGllcyBuIGJ5dGVzIGZyb20gbWVtb3J5IGFyZWEgc3JjIHRvIG1lbW9yeSBhcmVhIGRlc3QuCisgKiBUaGUgaXNyYW1fbWVtY3B5KCkgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gZGVzdC4KKyAqIEVpdGhlciBkZXN0IG9yIHNyYyBjYW4gYmUgaW4gTDEgaW5zdHJ1Y3Rpb24gc3JhbS4KKyAqLwordm9pZCAqaXNyYW1fbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCit7CisJdWludDY0X3QgZGF0YV9pbiA9IDAsIGRhdGFfb3V0ID0gMDsKKwlzaXplX3QgY291bnQ7CisJYm9vbCBkZXN0X2luX2wxLCBzcmNfaW5fbDEsIG5lZWRfZGF0YSwgcHV0X2RhdGE7CisJdW5zaWduZWQgY2hhciBieXRlLCAqc3JjX2J5dGUsICpkZXN0X2J5dGU7CisKKwlzcmNfYnl0ZSA9ICh1bnNpZ25lZCBjaGFyICopc3JjOworCWRlc3RfYnl0ZSA9ICh1bnNpZ25lZCBjaGFyICopZGVzdDsKKworCWRlc3RfaW5fbDEgPSBpc3JhbV9jaGVja19hZGRyKGRlc3QsIG4pOworCXNyY19pbl9sMSA9IGlzcmFtX2NoZWNrX2FkZHIoc3JjLCBuKTsKKworCW5lZWRfZGF0YSA9IHRydWU7CisJcHV0X2RhdGEgPSB0cnVlOworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG47IGNvdW50KyspIHsKKwkJaWYgKHNyY19pbl9sMSkgeworCQkJaWYgKG5lZWRfZGF0YSkgeworCQkJCWRhdGFfaW4gPSBpc3JhbV9yZWFkKHNyYyArIGNvdW50KTsKKwkJCQluZWVkX2RhdGEgPSBmYWxzZTsKKwkJCX0KKworCQkJaWYgKEFERFIyTEFTVChzcmMgKyBjb3VudCkpCisJCQkJbmVlZF9kYXRhID0gdHJ1ZTsKKworCQkJYnl0ZSA9ICh1bnNpZ25lZCBjaGFyKSgoZGF0YV9pbiA+PiBBRERSMk9GRlNFVChzcmMgKyBjb3VudCkpICYgMHhmZik7CisKKwkJfSBlbHNlIHsKKwkJCS8qIHNyYyBpcyBpbiBMMiBvciBMMyAtIHNvIGp1c3QgZGVyZWZlcmVuY2UqLworCQkJYnl0ZSA9IHNyY19ieXRlW2NvdW50XTsKKwkJfQorCisJCWlmIChkZXN0X2luX2wxKSB7CisJCQlpZiAocHV0X2RhdGEpIHsKKwkJCQlkYXRhX291dCA9IGlzcmFtX3JlYWQoZGVzdCArIGNvdW50KTsKKwkJCQlwdXRfZGF0YSA9IGZhbHNlOworCQkJfQorCisJCQlkYXRhX291dCAmPSB+KCh1aW50NjRfdCkweGZmIDw8IEFERFIyT0ZGU0VUKGRlc3QgKyBjb3VudCkpOworCQkJZGF0YV9vdXQgfD0gKCh1aW50NjRfdClieXRlIDw8IEFERFIyT0ZGU0VUKGRlc3QgKyBjb3VudCkpOworCisJCQlpZiAoQUREUjJMQVNUKGRlc3QgKyBjb3VudCkpIHsKKwkJCQlwdXRfZGF0YSA9IHRydWU7CisJCQkJaXNyYW1fd3JpdGUoZGVzdCArIGNvdW50LCBkYXRhX291dCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBkZXN0IGluIEwyIG9yIEwzIC0gc28ganVzdCBkZXJlZmVyZW5jZSAqLworCQkJZGVzdF9ieXRlW2NvdW50XSA9IGJ5dGU7CisJCX0KKwl9CisKKwkvKiBtYWtlIHN1cmUgd2UgZHVtcCB0aGUgbGFzdCBieXRlIGlmIG5lY2Vzc2FyeSAqLworCWlmIChkZXN0X2luX2wxICYmICFwdXRfZGF0YSkKKwkJaXNyYW1fd3JpdGUoZGVzdCArIGNvdW50LCBkYXRhX291dCk7CisKKwlyZXR1cm4gZGVzdDsKK30KK0VYUE9SVF9TWU1CT0woaXNyYW1fbWVtY3B5KTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMgYi9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjFjYTY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMKQEAgLTAsMCArMSw4MDkgQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCisgKiBCYXNlZCBvbjoKKyAqIEF1dGhvcjoKKyAqCisgKiBDcmVhdGVkOgorICogRGVzY3JpcHRpb246ICBTUkFNIGFsbG9jYXRvciBmb3IgQmxhY2tmaW4gTDEgYW5kIEwyIG1lbW9yeQorICoKKyAqIE1vZGlmaWVkOgorICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCisgKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgorI2luY2x1ZGUgImJsYWNrZmluX3NyYW0uaCIKKworc3RhdGljIHNwaW5sb2NrX3QgbDFzcmFtX2xvY2ssIGwxX2RhdGFfc3JhbV9sb2NrLCBsMV9pbnN0X3NyYW1fbG9jazsKK3N0YXRpYyBzcGlubG9ja190IGwyX3NyYW1fbG9jazsKKworLyogdGhlIGRhdGEgc3RydWN0dXJlIGZvciBMMSBzY3JhdGNocGFkIGFuZCBEQVRBIFNSQU0gKi8KK3N0cnVjdCBzcmFtX3BpZWNlIHsKKwl2b2lkICpwYWRkcjsKKwlpbnQgc2l6ZTsKKwlwaWRfdCBwaWQ7CisJc3RydWN0IHNyYW1fcGllY2UgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IHNyYW1fcGllY2UgZnJlZV9sMV9zc3JhbV9oZWFkLCB1c2VkX2wxX3NzcmFtX2hlYWQ7CisKKyNpZiBMMV9EQVRBX0FfTEVOR1RIICE9IDAKK3N0YXRpYyBzdHJ1Y3Qgc3JhbV9waWVjZSBmcmVlX2wxX2RhdGFfQV9zcmFtX2hlYWQsIHVzZWRfbDFfZGF0YV9BX3NyYW1faGVhZDsKKyNlbmRpZgorCisjaWYgTDFfREFUQV9CX0xFTkdUSCAhPSAwCitzdGF0aWMgc3RydWN0IHNyYW1fcGllY2UgZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLCB1c2VkX2wxX2RhdGFfQl9zcmFtX2hlYWQ7CisjZW5kaWYKKworI2lmIEwxX0NPREVfTEVOR1RIICE9IDAKK3N0YXRpYyBzdHJ1Y3Qgc3JhbV9waWVjZSBmcmVlX2wxX2luc3Rfc3JhbV9oZWFkLCB1c2VkX2wxX2luc3Rfc3JhbV9oZWFkOworI2VuZGlmCisKKyNpZiBMMl9MRU5HVEggIT0gMAorc3RhdGljIHN0cnVjdCBzcmFtX3BpZWNlIGZyZWVfbDJfc3JhbV9oZWFkLCB1c2VkX2wyX3NyYW1faGVhZDsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnNyYW1fcGllY2VfY2FjaGU7CisKKy8qIEwxIFNjcmF0Y2hwYWQgU1JBTSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgX19pbml0IGwxc3JhbV9pbml0KHZvaWQpCit7CisJZnJlZV9sMV9zc3JhbV9oZWFkLm5leHQgPQorCQlrbWVtX2NhY2hlX2FsbG9jKHNyYW1fcGllY2VfY2FjaGUsIEdGUF9LRVJORUwpOworCWlmICghZnJlZV9sMV9zc3JhbV9oZWFkLm5leHQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmFpbGVkIHRvIGluaXRpYWxpemUgU2NyYXRjaHBhZCBkYXRhIFNSQU1cbiIpOworCQlyZXR1cm47CisJfQorCisJZnJlZV9sMV9zc3JhbV9oZWFkLm5leHQtPnBhZGRyID0gKHZvaWQgKilMMV9TQ1JBVENIX1NUQVJUOworCWZyZWVfbDFfc3NyYW1faGVhZC5uZXh0LT5zaXplID0gTDFfU0NSQVRDSF9MRU5HVEg7CisJZnJlZV9sMV9zc3JhbV9oZWFkLm5leHQtPnBpZCA9IDA7CisJZnJlZV9sMV9zc3JhbV9oZWFkLm5leHQtPm5leHQgPSBOVUxMOworCisJdXNlZF9sMV9zc3JhbV9oZWFkLm5leHQgPSBOVUxMOworCisJLyogbXV0ZXggaW5pdGlhbGl6ZSAqLworCXNwaW5fbG9ja19pbml0KCZsMXNyYW1fbG9jayk7CisKKwlwcmludGsoS0VSTl9JTkZPICJCbGFja2ZpbiBTY3JhdGNocGFkIGRhdGEgU1JBTTogJWQgS0JcbiIsCisJICAgICAgIEwxX1NDUkFUQ0hfTEVOR1RIID4+IDEwKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGwxX2RhdGFfc3JhbV9pbml0KHZvaWQpCit7CisjaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCisJZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQgPQorCQlrbWVtX2NhY2hlX2FsbG9jKHNyYW1fcGllY2VfY2FjaGUsIEdGUF9LRVJORUwpOworCWlmICghZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmFpbGVkIHRvIGluaXRpYWxpemUgTDEgRGF0YSBBIFNSQU1cbiIpOworCQlyZXR1cm47CisJfQorCisJZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPnBhZGRyID0KKwkJKHZvaWQgKilMMV9EQVRBX0FfU1RBUlQgKyAoX2Vic3NfbDEgLSBfc2RhdGFfbDEpOworCWZyZWVfbDFfZGF0YV9BX3NyYW1faGVhZC5uZXh0LT5zaXplID0KKwkJTDFfREFUQV9BX0xFTkdUSCAtIChfZWJzc19sMSAtIF9zZGF0YV9sMSk7CisJZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPnBpZCA9IDA7CisJZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPm5leHQgPSBOVUxMOworCisJdXNlZF9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQgPSBOVUxMOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQmxhY2tmaW4gTDEgRGF0YSBBIFNSQU06ICVkIEtCICglZCBLQiBmcmVlKVxuIiwKKwkJTDFfREFUQV9BX0xFTkdUSCA+PiAxMCwKKwkJZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPnNpemUgPj4gMTApOworI2VuZGlmCisjaWYgTDFfREFUQV9CX0xFTkdUSCAhPSAwCisJZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQgPQorCQlrbWVtX2NhY2hlX2FsbG9jKHNyYW1fcGllY2VfY2FjaGUsIEdGUF9LRVJORUwpOworCWlmICghZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmFpbGVkIHRvIGluaXRpYWxpemUgTDEgRGF0YSBCIFNSQU1cbiIpOworCQlyZXR1cm47CisJfQorCisJZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQtPnBhZGRyID0KKwkJKHZvaWQgKilMMV9EQVRBX0JfU1RBUlQgKyAoX2Vic3NfYl9sMSAtIF9zZGF0YV9iX2wxKTsKKwlmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQubmV4dC0+c2l6ZSA9CisJCUwxX0RBVEFfQl9MRU5HVEggLSAoX2Vic3NfYl9sMSAtIF9zZGF0YV9iX2wxKTsKKwlmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQubmV4dC0+cGlkID0gMDsKKwlmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQubmV4dC0+bmV4dCA9IE5VTEw7CisKKwl1c2VkX2wxX2RhdGFfQl9zcmFtX2hlYWQubmV4dCA9IE5VTEw7CisKKwlwcmludGsoS0VSTl9JTkZPICJCbGFja2ZpbiBMMSBEYXRhIEIgU1JBTTogJWQgS0IgKCVkIEtCIGZyZWUpXG4iLAorCQlMMV9EQVRBX0JfTEVOR1RIID4+IDEwLAorCQlmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQubmV4dC0+c2l6ZSA+PiAxMCk7CisjZW5kaWYKKworCS8qIG11dGV4IGluaXRpYWxpemUgKi8KKwlzcGluX2xvY2tfaW5pdCgmbDFfZGF0YV9zcmFtX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbDFfaW5zdF9zcmFtX2luaXQodm9pZCkKK3sKKyNpZiBMMV9DT0RFX0xFTkdUSCAhPSAwCisJZnJlZV9sMV9pbnN0X3NyYW1faGVhZC5uZXh0ID0KKwkJa21lbV9jYWNoZV9hbGxvYyhzcmFtX3BpZWNlX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dCkgeworCQlwcmludGsoS0VSTl9JTkZPICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBMMSBJbnN0cnVjdGlvbiBTUkFNXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dC0+cGFkZHIgPQorCQkodm9pZCAqKUwxX0NPREVfU1RBUlQgKyAoX2V0ZXh0X2wxIC0gX3N0ZXh0X2wxKTsKKwlmcmVlX2wxX2luc3Rfc3JhbV9oZWFkLm5leHQtPnNpemUgPQorCQlMMV9DT0RFX0xFTkdUSCAtIChfZXRleHRfbDEgLSBfc3RleHRfbDEpOworCWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dC0+cGlkID0gMDsKKwlmcmVlX2wxX2luc3Rfc3JhbV9oZWFkLm5leHQtPm5leHQgPSBOVUxMOworCisJdXNlZF9sMV9pbnN0X3NyYW1faGVhZC5uZXh0ID0gTlVMTDsKKworCXByaW50ayhLRVJOX0lORk8gIkJsYWNrZmluIEwxIEluc3RydWN0aW9uIFNSQU06ICVkIEtCICglZCBLQiBmcmVlKVxuIiwKKwkJTDFfQ09ERV9MRU5HVEggPj4gMTAsCisJCWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dC0+c2l6ZSA+PiAxMCk7CisjZW5kaWYKKworCS8qIG11dGV4IGluaXRpYWxpemUgKi8KKwlzcGluX2xvY2tfaW5pdCgmbDFfaW5zdF9zcmFtX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbDJfc3JhbV9pbml0KHZvaWQpCit7CisjaWYgTDJfTEVOR1RIICE9IDAKKwlmcmVlX2wyX3NyYW1faGVhZC5uZXh0ID0KKwkJa21lbV9jYWNoZV9hbGxvYyhzcmFtX3BpZWNlX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZyZWVfbDJfc3JhbV9oZWFkLm5leHQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmFpbGVkIHRvIGluaXRpYWxpemUgTDIgU1JBTVxuIik7CisJCXJldHVybjsKKwl9CisKKwlmcmVlX2wyX3NyYW1faGVhZC5uZXh0LT5wYWRkciA9ICh2b2lkICopTDJfU1RBUlQgKworCQkoX2V0ZXh0X2wyIC0gX3N0ZXh0X2wyKSArIChfZWRhdGFfbDIgLSBfc2RhdGFfbDIpOworCWZyZWVfbDJfc3JhbV9oZWFkLm5leHQtPnNpemUgPSBMMl9MRU5HVEggLQorCQkoX2V0ZXh0X2wyIC0gX3N0ZXh0X2wyKSArIChfZWRhdGFfbDIgLSBfc2RhdGFfbDIpOworCWZyZWVfbDJfc3JhbV9oZWFkLm5leHQtPnBpZCA9IDA7CisJZnJlZV9sMl9zcmFtX2hlYWQubmV4dC0+bmV4dCA9IE5VTEw7CisKKwl1c2VkX2wyX3NyYW1faGVhZC5uZXh0ID0gTlVMTDsKKworCXByaW50ayhLRVJOX0lORk8gIkJsYWNrZmluIEwyIFNSQU06ICVkIEtCICglZCBLQiBmcmVlKVxuIiwKKwkJTDJfTEVOR1RIID4+IDEwLAorCQlmcmVlX2wyX3NyYW1faGVhZC5uZXh0LT5zaXplID4+IDEwKTsKKyNlbmRpZgorCisJLyogbXV0ZXggaW5pdGlhbGl6ZSAqLworCXNwaW5fbG9ja19pbml0KCZsMl9zcmFtX2xvY2spOworfQordm9pZCBfX2luaXQgYmZpbl9zcmFtX2luaXQodm9pZCkKK3sKKwlzcmFtX3BpZWNlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInNyYW1fcGllY2VfY2FjaGUiLAorCQkJCXNpemVvZihzdHJ1Y3Qgc3JhbV9waWVjZSksCisJCQkJMCwgU0xBQl9QQU5JQywgTlVMTCk7CisKKwlsMXNyYW1faW5pdCgpOworCWwxX2RhdGFfc3JhbV9pbml0KCk7CisJbDFfaW5zdF9zcmFtX2luaXQoKTsKKwlsMl9zcmFtX2luaXQoKTsKK30KKworLyogU1JBTSBhbGxvY2F0ZSBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgKl9zcmFtX2FsbG9jKHNpemVfdCBzaXplLCBzdHJ1Y3Qgc3JhbV9waWVjZSAqcGZyZWVfaGVhZCwKKwkJc3RydWN0IHNyYW1fcGllY2UgKnB1c2VkX2hlYWQpCit7CisJc3RydWN0IHNyYW1fcGllY2UgKnBzbG90LCAqcGxhc3QsICpwYXZhaWw7CisKKwlpZiAoc2l6ZSA8PSAwIHx8ICFwZnJlZV9oZWFkIHx8ICFwdXNlZF9oZWFkKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEFsaWduIHRoZSBzaXplICovCisJc2l6ZSA9IChzaXplICsgMykgJiB+MzsKKworCXBzbG90ID0gcGZyZWVfaGVhZC0+bmV4dDsKKwlwbGFzdCA9IHBmcmVlX2hlYWQ7CisKKwkvKiBzZWFyY2ggYW4gYXZhaWxhYmxlIHBpZWNlIHNsb3QgKi8KKwl3aGlsZSAocHNsb3QgIT0gTlVMTCAmJiBzaXplID4gcHNsb3QtPnNpemUpIHsKKwkJcGxhc3QgPSBwc2xvdDsKKwkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKKwl9CisKKwlpZiAoIXBzbG90KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChwc2xvdC0+c2l6ZSA9PSBzaXplKSB7CisJCXBsYXN0LT5uZXh0ID0gcHNsb3QtPm5leHQ7CisJCXBhdmFpbCA9IHBzbG90OworCX0gZWxzZSB7CisJCXBhdmFpbCA9IGttZW1fY2FjaGVfYWxsb2Moc3JhbV9waWVjZV9jYWNoZSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFwYXZhaWwpCisJCQlyZXR1cm4gTlVMTDsKKworCQlwYXZhaWwtPnBhZGRyID0gcHNsb3QtPnBhZGRyOworCQlwYXZhaWwtPnNpemUgPSBzaXplOworCQlwc2xvdC0+cGFkZHIgKz0gc2l6ZTsKKwkJcHNsb3QtPnNpemUgLT0gc2l6ZTsKKwl9CisKKwlwYXZhaWwtPnBpZCA9IGN1cnJlbnQtPnBpZDsKKworCXBzbG90ID0gcHVzZWRfaGVhZC0+bmV4dDsKKwlwbGFzdCA9IHB1c2VkX2hlYWQ7CisKKwkvKiBpbnNlcnQgbmV3IHBpZWNlIGludG8gdXNlZCBwaWVjZSBsaXN0ICEhISAqLworCXdoaWxlIChwc2xvdCAhPSBOVUxMICYmIHBhdmFpbC0+cGFkZHIgPCBwc2xvdC0+cGFkZHIpIHsKKwkJcGxhc3QgPSBwc2xvdDsKKwkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKKwl9CisKKwlwYXZhaWwtPm5leHQgPSBwc2xvdDsKKwlwbGFzdC0+bmV4dCA9IHBhdmFpbDsKKworCXJldHVybiBwYXZhaWwtPnBhZGRyOworfQorCisvKiBBbGxvY2F0ZSB0aGUgbGFyZ2VzdCBhdmFpbGFibGUgYmxvY2suICAqLworc3RhdGljIHZvaWQgKl9zcmFtX2FsbG9jX21heChzdHJ1Y3Qgc3JhbV9waWVjZSAqcGZyZWVfaGVhZCwKKwkJCQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHVzZWRfaGVhZCwKKwkJCQl1bnNpZ25lZCBsb25nICpwc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHNsb3QsICpwbWF4OworCisJaWYgKCFwZnJlZV9oZWFkIHx8ICFwdXNlZF9oZWFkKQorCQlyZXR1cm4gTlVMTDsKKworCXBtYXggPSBwc2xvdCA9IHBmcmVlX2hlYWQtPm5leHQ7CisKKwkvKiBzZWFyY2ggYW4gYXZhaWxhYmxlIHBpZWNlIHNsb3QgKi8KKwl3aGlsZSAocHNsb3QgIT0gTlVMTCkgeworCQlpZiAocHNsb3QtPnNpemUgPiBwbWF4LT5zaXplKQorCQkJcG1heCA9IHBzbG90OworCQlwc2xvdCA9IHBzbG90LT5uZXh0OworCX0KKworCWlmICghcG1heCkKKwkJcmV0dXJuIE5VTEw7CisKKwkqcHNpemUgPSBwbWF4LT5zaXplOworCisJcmV0dXJuIF9zcmFtX2FsbG9jKCpwc2l6ZSwgcGZyZWVfaGVhZCwgcHVzZWRfaGVhZCk7Cit9CisKKy8qIFNSQU0gZnJlZSBmdW5jdGlvbiAqLworc3RhdGljIGludCBfc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIsCisJCQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcGZyZWVfaGVhZCwKKwkJCXN0cnVjdCBzcmFtX3BpZWNlICpwdXNlZF9oZWFkKQoreworCXN0cnVjdCBzcmFtX3BpZWNlICpwc2xvdCwgKnBsYXN0LCAqcGF2YWlsOworCisJaWYgKCFwZnJlZV9oZWFkIHx8ICFwdXNlZF9oZWFkKQorCQlyZXR1cm4gLTE7CisKKwkvKiBzZWFyY2ggdGhlIHJlbGV2YW50IG1lbW9yeSBzbG90ICovCisJcHNsb3QgPSBwdXNlZF9oZWFkLT5uZXh0OworCXBsYXN0ID0gcHVzZWRfaGVhZDsKKworCS8qIHNlYXJjaCBhbiBhdmFpbGFibGUgcGllY2Ugc2xvdCAqLworCXdoaWxlIChwc2xvdCAhPSBOVUxMICYmIHBzbG90LT5wYWRkciAhPSBhZGRyKSB7CisJCXBsYXN0ID0gcHNsb3Q7CisJCXBzbG90ID0gcHNsb3QtPm5leHQ7CisJfQorCisJaWYgKCFwc2xvdCkKKwkJcmV0dXJuIC0xOworCisJcGxhc3QtPm5leHQgPSBwc2xvdC0+bmV4dDsKKwlwYXZhaWwgPSBwc2xvdDsKKwlwYXZhaWwtPnBpZCA9IDA7CisKKwkvKiBpbnNlcnQgZnJlZSBwaWVjZXMgYmFjayB0byB0aGUgZnJlZSBsaXN0ICovCisJcHNsb3QgPSBwZnJlZV9oZWFkLT5uZXh0OworCXBsYXN0ID0gcGZyZWVfaGVhZDsKKworCXdoaWxlIChwc2xvdCAhPSBOVUxMICYmIGFkZHIgPiBwc2xvdC0+cGFkZHIpIHsKKwkJcGxhc3QgPSBwc2xvdDsKKwkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKKwl9CisKKwlpZiAocGxhc3QgIT0gcGZyZWVfaGVhZCAmJiBwbGFzdC0+cGFkZHIgKyBwbGFzdC0+c2l6ZSA9PSBwYXZhaWwtPnBhZGRyKSB7CisJCXBsYXN0LT5zaXplICs9IHBhdmFpbC0+c2l6ZTsKKwkJa21lbV9jYWNoZV9mcmVlKHNyYW1fcGllY2VfY2FjaGUsIHBhdmFpbCk7CisJfSBlbHNlIHsKKwkJcGF2YWlsLT5uZXh0ID0gcGxhc3QtPm5leHQ7CisJCXBsYXN0LT5uZXh0ID0gcGF2YWlsOworCQlwbGFzdCA9IHBhdmFpbDsKKwl9CisKKwlpZiAocHNsb3QgJiYgcGxhc3QtPnBhZGRyICsgcGxhc3QtPnNpemUgPT0gcHNsb3QtPnBhZGRyKSB7CisJCXBsYXN0LT5zaXplICs9IHBzbG90LT5zaXplOworCQlwbGFzdC0+bmV4dCA9IHBzbG90LT5uZXh0OworCQlrbWVtX2NhY2hlX2ZyZWUoc3JhbV9waWVjZV9jYWNoZSwgcHNsb3QpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIpCit7CisKKyNpZiBMMV9DT0RFX0xFTkdUSCAhPSAwCisJaWYgKGFkZHIgPj0gKHZvaWQgKilMMV9DT0RFX1NUQVJUCisJCSAmJiBhZGRyIDwgKHZvaWQgKikoTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIKSkKKwkJcmV0dXJuIGwxX2luc3Rfc3JhbV9mcmVlKGFkZHIpOworCWVsc2UKKyNlbmRpZgorI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAorCWlmIChhZGRyID49ICh2b2lkICopTDFfREFUQV9BX1NUQVJUCisJCSAmJiBhZGRyIDwgKHZvaWQgKikoTDFfREFUQV9BX1NUQVJUICsgTDFfREFUQV9BX0xFTkdUSCkpCisJCXJldHVybiBsMV9kYXRhX0Ffc3JhbV9mcmVlKGFkZHIpOworCWVsc2UKKyNlbmRpZgorI2lmIEwxX0RBVEFfQl9MRU5HVEggIT0gMAorCWlmIChhZGRyID49ICh2b2lkICopTDFfREFUQV9CX1NUQVJUCisJCSAmJiBhZGRyIDwgKHZvaWQgKikoTDFfREFUQV9CX1NUQVJUICsgTDFfREFUQV9CX0xFTkdUSCkpCisJCXJldHVybiBsMV9kYXRhX0Jfc3JhbV9mcmVlKGFkZHIpOworCWVsc2UKKyNlbmRpZgorI2lmIEwyX0xFTkdUSCAhPSAwCisJaWYgKGFkZHIgPj0gKHZvaWQgKilMMl9TVEFSVAorCQkgJiYgYWRkciA8ICh2b2lkICopKEwyX1NUQVJUICsgTDJfTEVOR1RIKSkKKwkJcmV0dXJuIGwyX3NyYW1fZnJlZShhZGRyKTsKKwllbHNlCisjZW5kaWYKKwkJcmV0dXJuIC0xOworfQorRVhQT1JUX1NZTUJPTChzcmFtX2ZyZWUpOworCit2b2lkICpsMV9kYXRhX0Ffc3JhbV9hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmFkZHIgPSBOVUxMOworCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOworCisjaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCisJYWRkciA9IF9zcmFtX2FsbG9jKHNpemUsICZmcmVlX2wxX2RhdGFfQV9zcmFtX2hlYWQsCisJCQkmdXNlZF9sMV9kYXRhX0Ffc3JhbV9oZWFkKTsKKyNlbmRpZgorCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwxX2RhdGFfc3JhbV9sb2NrLCBmbGFncyk7CisKKwlwcl9kZWJ1ZygiQWxsb2NhdGVkIGFkZHJlc3MgaW4gbDFfZGF0YV9BX3NyYW1fYWxsb2MgaXMgMHglbHgrMHglbHhcbiIsCisJCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkciwgc2l6ZSk7CisKKwlyZXR1cm4gYWRkcjsKK30KK0VYUE9SVF9TWU1CT0wobDFfZGF0YV9BX3NyYW1fYWxsb2MpOworCitpbnQgbDFfZGF0YV9BX3NyYW1fZnJlZShjb25zdCB2b2lkICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbDFfZGF0YV9zcmFtX2xvY2ssIGZsYWdzKTsKKworI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAorCXJldCA9IF9zcmFtX2ZyZWUoYWRkciwgJmZyZWVfbDFfZGF0YV9BX3NyYW1faGVhZCwKKwkJCSZ1c2VkX2wxX2RhdGFfQV9zcmFtX2hlYWQpOworI2Vsc2UKKwlyZXQgPSAtMTsKKyNlbmRpZgorCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwxX2RhdGFfc3JhbV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChsMV9kYXRhX0Ffc3JhbV9mcmVlKTsKKwordm9pZCAqbDFfZGF0YV9CX3NyYW1fYWxsb2Moc2l6ZV90IHNpemUpCit7CisjaWYgTDFfREFUQV9CX0xFTkdUSCAhPSAwCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICphZGRyOworCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOworCisJYWRkciA9IF9zcmFtX2FsbG9jKHNpemUsICZmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQsCisJCQkmdXNlZF9sMV9kYXRhX0Jfc3JhbV9oZWFkKTsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOworCisJcHJfZGVidWcoIkFsbG9jYXRlZCBhZGRyZXNzIGluIGwxX2RhdGFfQl9zcmFtX2FsbG9jIGlzIDB4JWx4KzB4JWx4XG4iLAorCQkgKGxvbmcgdW5zaWduZWQgaW50KWFkZHIsIHNpemUpOworCisJcmV0dXJuIGFkZHI7CisjZWxzZQorCXJldHVybiBOVUxMOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKGwxX2RhdGFfQl9zcmFtX2FsbG9jKTsKKworaW50IGwxX2RhdGFfQl9zcmFtX2ZyZWUoY29uc3Qgdm9pZCAqYWRkcikKK3sKKyNpZiBMMV9EQVRBX0JfTEVOR1RIICE9IDAKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmwxX2RhdGFfc3JhbV9sb2NrLCBmbGFncyk7CisKKwlyZXQgPSBfc3JhbV9mcmVlKGFkZHIsICZmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQsCisJCQkmdXNlZF9sMV9kYXRhX0Jfc3JhbV9oZWFkKTsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKKyNlbHNlCisJcmV0dXJuIC0xOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKGwxX2RhdGFfQl9zcmFtX2ZyZWUpOworCit2b2lkICpsMV9kYXRhX3NyYW1fYWxsb2Moc2l6ZV90IHNpemUpCit7CisJdm9pZCAqYWRkciA9IGwxX2RhdGFfQV9zcmFtX2FsbG9jKHNpemUpOworCisJaWYgKCFhZGRyKQorCQlhZGRyID0gbDFfZGF0YV9CX3NyYW1fYWxsb2Moc2l6ZSk7CisKKwlyZXR1cm4gYWRkcjsKK30KK0VYUE9SVF9TWU1CT0wobDFfZGF0YV9zcmFtX2FsbG9jKTsKKwordm9pZCAqbDFfZGF0YV9zcmFtX3phbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkICphZGRyID0gbDFfZGF0YV9zcmFtX2FsbG9jKHNpemUpOworCisJaWYgKGFkZHIpCisJCW1lbXNldChhZGRyLCAweDAwLCBzaXplKTsKKworCXJldHVybiBhZGRyOworfQorRVhQT1JUX1NZTUJPTChsMV9kYXRhX3NyYW1femFsbG9jKTsKKworaW50IGwxX2RhdGFfc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIpCit7CisJaW50IHJldDsKKwlyZXQgPSBsMV9kYXRhX0Ffc3JhbV9mcmVlKGFkZHIpOworCWlmIChyZXQgPT0gLTEpCisJCXJldCA9IGwxX2RhdGFfQl9zcmFtX2ZyZWUoYWRkcik7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobDFfZGF0YV9zcmFtX2ZyZWUpOworCit2b2lkICpsMV9pbnN0X3NyYW1fYWxsb2Moc2l6ZV90IHNpemUpCit7CisjaWYgTDFfQ09ERV9MRU5HVEggIT0gMAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqYWRkcjsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbDFfaW5zdF9zcmFtX2xvY2ssIGZsYWdzKTsKKworCWFkZHIgPSBfc3JhbV9hbGxvYyhzaXplLCAmZnJlZV9sMV9pbnN0X3NyYW1faGVhZCwKKwkJCSZ1c2VkX2wxX2luc3Rfc3JhbV9oZWFkKTsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9pbnN0X3NyYW1fbG9jaywgZmxhZ3MpOworCisJcHJfZGVidWcoIkFsbG9jYXRlZCBhZGRyZXNzIGluIGwxX2luc3Rfc3JhbV9hbGxvYyBpcyAweCVseCsweCVseFxuIiwKKwkJIChsb25nIHVuc2lnbmVkIGludClhZGRyLCBzaXplKTsKKworCXJldHVybiBhZGRyOworI2Vsc2UKKwlyZXR1cm4gTlVMTDsKKyNlbmRpZgorfQorRVhQT1JUX1NZTUJPTChsMV9pbnN0X3NyYW1fYWxsb2MpOworCitpbnQgbDFfaW5zdF9zcmFtX2ZyZWUoY29uc3Qgdm9pZCAqYWRkcikKK3sKKyNpZiBMMV9DT0RFX0xFTkdUSCAhPSAwCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZsMV9pbnN0X3NyYW1fbG9jaywgZmxhZ3MpOworCisJcmV0ID0gX3NyYW1fZnJlZShhZGRyLCAmZnJlZV9sMV9pbnN0X3NyYW1faGVhZCwKKwkJCSZ1c2VkX2wxX2luc3Rfc3JhbV9oZWFkKTsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9pbnN0X3NyYW1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKKyNlbHNlCisJcmV0dXJuIC0xOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKGwxX2luc3Rfc3JhbV9mcmVlKTsKKworLyogTDEgU2NyYXRjaHBhZCBtZW1vcnkgYWxsb2NhdGUgZnVuY3Rpb24gKi8KK3ZvaWQgKmwxc3JhbV9hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmFkZHI7CisKKwkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7CisKKwlhZGRyID0gX3NyYW1fYWxsb2Moc2l6ZSwgJmZyZWVfbDFfc3NyYW1faGVhZCwKKwkJCSZ1c2VkX2wxX3NzcmFtX2hlYWQpOworCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gYWRkcjsKK30KKworLyogTDEgU2NyYXRjaHBhZCBtZW1vcnkgYWxsb2NhdGUgZnVuY3Rpb24gKi8KK3ZvaWQgKmwxc3JhbV9hbGxvY19tYXgoc2l6ZV90ICpwc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmFkZHI7CisKKwkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7CisKKwlhZGRyID0gX3NyYW1fYWxsb2NfbWF4KCZmcmVlX2wxX3NzcmFtX2hlYWQsCisJCQkmdXNlZF9sMV9zc3JhbV9oZWFkLCBwc2l6ZSk7CisKKwkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDFzcmFtX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBhZGRyOworfQorCisvKiBMMSBTY3JhdGNocGFkIG1lbW9yeSBmcmVlIGZ1bmN0aW9uICovCitpbnQgbDFzcmFtX2ZyZWUoY29uc3Qgdm9pZCAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7CisKKwlyZXQgPSBfc3JhbV9mcmVlKGFkZHIsICZmcmVlX2wxX3NzcmFtX2hlYWQsCisJCQkmdXNlZF9sMV9zc3JhbV9oZWFkKTsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMXNyYW1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCAqbDJfc3JhbV9hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyNpZiBMMl9MRU5HVEggIT0gMAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqYWRkcjsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbDJfc3JhbV9sb2NrLCBmbGFncyk7CisKKwlhZGRyID0gX3NyYW1fYWxsb2Moc2l6ZSwgJmZyZWVfbDJfc3JhbV9oZWFkLAorCQkJJnVzZWRfbDJfc3JhbV9oZWFkKTsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMl9zcmFtX2xvY2ssIGZsYWdzKTsKKworCXByX2RlYnVnKCJBbGxvY2F0ZWQgYWRkcmVzcyBpbiBsMl9zcmFtX2FsbG9jIGlzIDB4JWx4KzB4JWx4XG4iLAorCQkgKGxvbmcgdW5zaWduZWQgaW50KWFkZHIsIHNpemUpOworCisJcmV0dXJuIGFkZHI7CisjZWxzZQorCXJldHVybiBOVUxMOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKGwyX3NyYW1fYWxsb2MpOworCit2b2lkICpsMl9zcmFtX3phbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkICphZGRyID0gbDJfc3JhbV9hbGxvYyhzaXplKTsKKworCWlmIChhZGRyKQorCQltZW1zZXQoYWRkciwgMHgwMCwgc2l6ZSk7CisKKwlyZXR1cm4gYWRkcjsKK30KK0VYUE9SVF9TWU1CT0wobDJfc3JhbV96YWxsb2MpOworCitpbnQgbDJfc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIpCit7CisjaWYgTDJfTEVOR1RIICE9IDAKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmwyX3NyYW1fbG9jaywgZmxhZ3MpOworCisJcmV0ID0gX3NyYW1fZnJlZShhZGRyLCAmZnJlZV9sMl9zcmFtX2hlYWQsCisJCQkmdXNlZF9sMl9zcmFtX2hlYWQpOworCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwyX3NyYW1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKKyNlbHNlCisJcmV0dXJuIC0xOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKGwyX3NyYW1fZnJlZSk7CisKK2ludCBzcmFtX2ZyZWVfd2l0aF9sc2woY29uc3Qgdm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3Qgc3JhbV9saXN0X3N0cnVjdCAqbHNsLCAqKnRtcDsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCisJZm9yICh0bXAgPSAmbW0tPmNvbnRleHQuc3JhbV9saXN0OyAqdG1wOyB0bXAgPSAmKCp0bXApLT5uZXh0KQorCQlpZiAoKCp0bXApLT5hZGRyID09IGFkZHIpCisJCQlnb3RvIGZvdW5kOworCXJldHVybiAtMTsKK2ZvdW5kOgorCWxzbCA9ICp0bXA7CisJc3JhbV9mcmVlKGFkZHIpOworCSp0bXAgPSBsc2wtPm5leHQ7CisJa2ZyZWUobHNsKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzcmFtX2ZyZWVfd2l0aF9sc2wpOworCit2b2lkICpzcmFtX2FsbG9jX3dpdGhfbHNsKHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXZvaWQgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBzcmFtX2xpc3Rfc3RydWN0ICpsc2wgPSBOVUxMOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisKKwlsc2wgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3JhbV9saXN0X3N0cnVjdCksIEdGUF9LRVJORUwpOworCWlmICghbHNsKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChmbGFncyAmIEwxX0lOU1RfU1JBTSkKKwkJYWRkciA9IGwxX2luc3Rfc3JhbV9hbGxvYyhzaXplKTsKKworCWlmIChhZGRyID09IE5VTEwgJiYgKGZsYWdzICYgTDFfREFUQV9BX1NSQU0pKQorCQlhZGRyID0gbDFfZGF0YV9BX3NyYW1fYWxsb2Moc2l6ZSk7CisKKwlpZiAoYWRkciA9PSBOVUxMICYmIChmbGFncyAmIEwxX0RBVEFfQl9TUkFNKSkKKwkJYWRkciA9IGwxX2RhdGFfQl9zcmFtX2FsbG9jKHNpemUpOworCisJaWYgKGFkZHIgPT0gTlVMTCAmJiAoZmxhZ3MgJiBMMl9TUkFNKSkKKwkJYWRkciA9IGwyX3NyYW1fYWxsb2Moc2l6ZSk7CisKKwlpZiAoYWRkciA9PSBOVUxMKSB7CisJCWtmcmVlKGxzbCk7CisJCXJldHVybiBOVUxMOworCX0KKwlsc2wtPmFkZHIgPSBhZGRyOworCWxzbC0+bGVuZ3RoID0gc2l6ZTsKKwlsc2wtPm5leHQgPSBtbS0+Y29udGV4dC5zcmFtX2xpc3Q7CisJbW0tPmNvbnRleHQuc3JhbV9saXN0ID0gbHNsOworCXJldHVybiBhZGRyOworfQorRVhQT1JUX1NZTUJPTChzcmFtX2FsbG9jX3dpdGhfbHNsKTsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisvKiBPbmNlIHdlIGdldCBhIHJlYWwgYWxsb2NhdG9yLCB3ZSdsbCB0aHJvdyBhbGwgb2YgdGhpcyBhd2F5LgorICogVW50aWwgdGhlbiwgd2UgbmVlZCBzb21lIHNvcnQgb2YgdmlzaWJpbGl0eSBpbnRvIHRoZSBMMSBhbGxvYy4KKyAqLworLyogTmVlZCB0byBrZWVwIGxpbmUgb2Ygb3V0cHV0IHRoZSBzYW1lLiAgQ3VycmVudGx5LCB0aGF0IGlzIDQ0IGJ5dGVzCisgKiAoaW5jbHVkaW5nIG5ld2xpbmUpLgorICovCitzdGF0aWMgaW50IF9zcmFtX3Byb2NfcmVhZChjaGFyICpidWYsIGludCAqbGVuLCBpbnQgY291bnQsIGNvbnN0IGNoYXIgKmRlc2MsCisJCXN0cnVjdCBzcmFtX3BpZWNlICpwZnJlZV9oZWFkLAorCQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHVzZWRfaGVhZCkKK3sKKwlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHNsb3Q7CisKKwlpZiAoIXBmcmVlX2hlYWQgfHwgIXB1c2VkX2hlYWQpCisJCXJldHVybiAtMTsKKworCSpsZW4gKz0gc3ByaW50ZigmYnVmWypsZW5dLCAiLS0tIFNSQU0gJS0xNHMgU2l6ZSAgIFBJRCBTdGF0ZSAgICAgXG4iLCBkZXNjKTsKKworCS8qIHNlYXJjaCB0aGUgcmVsZXZhbnQgbWVtb3J5IHNsb3QgKi8KKwlwc2xvdCA9IHB1c2VkX2hlYWQtPm5leHQ7CisKKwl3aGlsZSAocHNsb3QgIT0gTlVMTCkgeworCQkqbGVuICs9IHNwcmludGYoJmJ1ZlsqbGVuXSwgIiVwLSVwICUxMGkgJTVpICUtMTBzXG4iLAorCQkJcHNsb3QtPnBhZGRyLCBwc2xvdC0+cGFkZHIgKyBwc2xvdC0+c2l6ZSwKKwkJCXBzbG90LT5zaXplLCBwc2xvdC0+cGlkLCAiQUxMT0NBVEVEIik7CisKKwkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKKwl9CisKKwlwc2xvdCA9IHBmcmVlX2hlYWQtPm5leHQ7CisKKwl3aGlsZSAocHNsb3QgIT0gTlVMTCkgeworCQkqbGVuICs9IHNwcmludGYoJmJ1ZlsqbGVuXSwgIiVwLSVwICUxMGkgJTVpICUtMTBzXG4iLAorCQkJcHNsb3QtPnBhZGRyLCBwc2xvdC0+cGFkZHIgKyBwc2xvdC0+c2l6ZSwKKwkJCXBzbG90LT5zaXplLCBwc2xvdC0+cGlkLCAiRlJFRSIpOworCisJCXBzbG90ID0gcHNsb3QtPm5leHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IHNyYW1fcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBjb3VudCwKKwkJaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50IGxlbiA9IDA7CisKKwlpZiAoX3NyYW1fcHJvY19yZWFkKGJ1ZiwgJmxlbiwgY291bnQsICJTY3JhdGNocGFkIiwKKwkJCSZmcmVlX2wxX3NzcmFtX2hlYWQsICZ1c2VkX2wxX3NzcmFtX2hlYWQpKQorCQlnb3RvIG5vdF9kb25lOworI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAorCWlmIChfc3JhbV9wcm9jX3JlYWQoYnVmLCAmbGVuLCBjb3VudCwgIkwxIERhdGEgQSIsCisJCQkmZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLAorCQkJJnVzZWRfbDFfZGF0YV9BX3NyYW1faGVhZCkpCisJCWdvdG8gbm90X2RvbmU7CisjZW5kaWYKKyNpZiBMMV9EQVRBX0JfTEVOR1RIICE9IDAKKwlpZiAoX3NyYW1fcHJvY19yZWFkKGJ1ZiwgJmxlbiwgY291bnQsICJMMSBEYXRhIEIiLAorCQkJJmZyZWVfbDFfZGF0YV9CX3NyYW1faGVhZCwKKwkJCSZ1c2VkX2wxX2RhdGFfQl9zcmFtX2hlYWQpKQorCQlnb3RvIG5vdF9kb25lOworI2VuZGlmCisjaWYgTDFfQ09ERV9MRU5HVEggIT0gMAorCWlmIChfc3JhbV9wcm9jX3JlYWQoYnVmLCAmbGVuLCBjb3VudCwgIkwxIEluc3RydWN0aW9uIiwKKwkJCSZmcmVlX2wxX2luc3Rfc3JhbV9oZWFkLCAmdXNlZF9sMV9pbnN0X3NyYW1faGVhZCkpCisJCWdvdG8gbm90X2RvbmU7CisjZW5kaWYKKyNpZiBMMl9MRU5HVEggIT0gMAorCWlmIChfc3JhbV9wcm9jX3JlYWQoYnVmLCAmbGVuLCBjb3VudCwgIkwyIiwKKwkJCSZmcmVlX2wyX3NyYW1faGVhZCwgJnVzZWRfbDJfc3JhbV9oZWFkKSkKKwkJZ290byBub3RfZG9uZTsKKyNlbmRpZgorCisJKmVvZiA9IDE7Cisgbm90X2RvbmU6CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBfX2luaXQgc3JhbV9wcm9jX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnB0cjsKKwlwdHIgPSBjcmVhdGVfcHJvY19lbnRyeSgic3JhbSIsIFNfSUZSRUcgfCBTX0lSVUdPLCBOVUxMKTsKKwlpZiAoIXB0cikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1bmFibGUgdG8gY3JlYXRlIC9wcm9jL3NyYW1cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXB0ci0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlwdHItPnJlYWRfcHJvYyA9IHNyYW1fcHJvY19yZWFkOworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChzcmFtX3Byb2NfaW5pdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9LY29uZmlnIGIvYXJjaC9jcmlzL0tjb25maWcKaW5kZXggOTM4OWQzOC4uMDczMzVlNyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL0tjb25maWcKKysrIGIvYXJjaC9jcmlzL0tjb25maWcKQEAgLTYyLDYgKzYyLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiR2VuZXJhbCBzZXR1cCIKIAogc291cmNlICJmcy9LY29uZmlnLmJpbmZtdCIKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9NYWtlZmlsZSBiL2FyY2gvY3Jpcy9NYWtlZmlsZQppbmRleCA4MzhjZDJhLi5jNmY1ZjVhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvTWFrZWZpbGUKKysrIGIvYXJjaC9jcmlzL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw4IEBACiAjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICMgZm9yIG1vcmUgZGV0YWlscy4KIAorS0JVSUxEX0RFRkNPTkZJRyA6PSBldHJheC0xMDBseF92Ml9kZWZjb25maWcKKwogYXJjaC15IDo9IHYxMAogYXJjaC0kKENPTkZJR19FVFJBWF9BUkNIX1YxMCkgOj0gdjEwCiBhcmNoLSQoQ09ORklHX0VUUkFYX0FSQ0hfVjMyKSA6PSB2MzIKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDA4ZDk0M2MuLjZmZTBmZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogYXNmbGFncy15ICs9ICQoTElOVVhJTkNMVURFKQogY2NmbGFncy15ICs9IC1PMiAkKExJTlVYSU5DTFVERSkKLWxkZmxhZ3MteSArPSAtVCAkKHNyY3RyZWUpLyQob2JqKS9kZWNvbXByZXNzLmxkCitsZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKHNyYykvZGVjb21wcmVzcy5sZHMKIE9CSkVDVFMgPSAkKG9iaikvaGVhZC5vICQob2JqKS9taXNjLm8KIE9CSkNPUFlGTEFHUyA9IC1PIGJpbmFyeSAtLXJlbW92ZS1zZWN0aW9uPS5ic3MKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkCnJlbmFtZSB0byBhcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL2RlY29tcHJlc3MubGRzCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvTWFrZWZpbGUgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvTWFrZWZpbGUKaW5kZXggMDc2ODhkYS4uODJhYjU5YiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogY2NmbGFncy15ICs9IC1PMiAkKExJTlVYSU5DTFVERSkKIGFzZmxhZ3MteSArPSAkKExJTlVYSU5DTFVERSkKLWxkZmxhZ3MteSArPSAtVCAkKHNyY3RyZWUpLyQob2JqKS9yZXNjdWUubGQKK2xkZmxhZ3MteSArPSAtVCAkKHNyY3RyZWUpLyQoc3JjKS9yZXNjdWUubGRzCiBPQkpDT1BZRkxBR1MgPSAtTyBiaW5hcnkgLS1yZW1vdmUtc2VjdGlvbj0uYnNzCiBvYmotJChDT05GSUdfRVRSQVhfQVhJU0ZMQVNITUFQKSA9IGhlYWQubwogT0JKRUNUIDo9ICQob2JqKS9oZWFkLm8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9yZXNjdWUubGQgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvcmVzY3VlLmxkcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL3Jlc2N1ZS5sZApyZW5hbWUgdG8gYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL3Jlc2N1ZS5sZHMKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Rvb2xzL2J1aWxkLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC90b29scy9idWlsZC5jCmluZGV4IDJmOWJiYjIuLmM4YWRlZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Rvb2xzL2J1aWxkLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvdG9vbHMvYnVpbGQuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4JLyogY29udGFpbnMgcmVhZC93cml0ZSAqLwogI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogCiAjZGVmaW5lIE1JTklYX0hFQURFUiAzMgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvZHMxMzAyLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9kczEzMDIuYwppbmRleCBjOWFhMzkwLi4zYmRmYWY0IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9kczEzMDIuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9kczEzMDIuYwpAQCAtMjE1LDEyICsyMTUsMTIgQEAKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fc2VjKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWluKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1faG91cik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21kYXkpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tb24pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV95ZWFyKTsKKwlydGNfdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnRjX3RtLT50bV9zZWMpOworCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJcnRjX3RtLT50bV9ob3VyID0gYmNkMmJpbihydGNfdG0tPnRtX2hvdXIpOworCXJ0Y190bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX3RtLT50bV9tZGF5KTsKKwlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCXJ0Y190bS0+dG1feWVhciA9IGJjZDJiaW4ocnRjX3RtLT50bV95ZWFyKTsKIAogCS8qCiAJICogQWNjb3VudCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBob3cgdGhlIFJUQyB1c2VzIHRoZSB2YWx1ZXMKQEAgLTI5NSwxMiArMjk1LDEyIEBACiAJCQllbHNlCiAJCQkJeXJzIC09IDE5MDA7CS8qIFJUQyAoNzAsIDcxLCAuLi4gOTkpICovCiAKLQkJCUJJTl9UT19CQ0Qoc2VjKTsKLQkJCUJJTl9UT19CQ0QobWluKTsKLQkJCUJJTl9UT19CQ0QoaHJzKTsKLQkJCUJJTl9UT19CQ0QoZGF5KTsKLQkJCUJJTl9UT19CQ0QobW9uKTsKLQkJCUJJTl9UT19CQ0QoeXJzKTsKKwkJCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwkJCW1pbiA9IGJpbjJiY2QobWluKTsKKwkJCWhycyA9IGJpbjJiY2QoaHJzKTsKKwkJCWRheSA9IGJpbjJiY2QoZGF5KTsKKwkJCW1vbiA9IGJpbjJiY2QobW9uKTsKKwkJCXlycyA9IGJpbjJiY2QoeXJzKTsKIAogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQkJQ01PU19XUklURSh5cnMsIFJUQ19ZRUFSKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYwppbmRleCA4NzY5ZGM5Li4xZTkwYzFhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9wY2Y4NTYzLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkJICAgICAgICJpbmZvcm1hdGlvbiBpcyBubyBsb25nZXIgZ3VhcmFudGVlZCFcbiIsIFBDRjg1NjNfTkFNRSk7CiAJfQogCi0JdG0tPnRtX3llYXIgID0gQkNEX1RPX0JJTih0bS0+dG1feWVhcikgKworCXRtLT50bV95ZWFyICA9IGJjZDJiaW4odG0tPnRtX3llYXIpICsKIAkJICAgICAgICgodG0tPnRtX21vbiAmIDB4ODApID8gMTAwIDogMCk7CiAJdG0tPnRtX3NlYyAgJj0gMHg3RjsKIAl0bS0+dG1fbWluICAmPSAweDdGOwpAQCAtMTMxLDExICsxMzEsMTEgQEAKIAl0bS0+dG1fd2RheSAmPSAweDA3OyAvKiBOb3QgY29kZWQgaW4gQkNELiAqLwogCXRtLT50bV9tb24gICY9IDB4MUY7CiAKLQlCQ0RfVE9fQklOKHRtLT50bV9zZWMpOwotCUJDRF9UT19CSU4odG0tPnRtX21pbik7Ci0JQkNEX1RPX0JJTih0bS0+dG1faG91cik7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbWRheSk7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbW9uKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbih0bS0+dG1fc2VjKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbih0bS0+dG1fbWluKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4odG0tPnRtX2hvdXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbih0bS0+dG1fbWRheSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4odG0tPnRtX21vbik7CiAJdG0tPnRtX21vbi0tOyAvKiBNb250aCBpcyAxLi4xMiBpbiBSVEMgYnV0IDAuLjExIGluIGxpbnV4ICovCiB9CiAKQEAgLTI4MiwxMiArMjgyLDEyIEBACiAJCWNlbnR1cnkgPSAodG0udG1feWVhciA+PSAyMDAwKSA/IDB4ODAgOiAwOwogCQl0bS50bV95ZWFyID0gdG0udG1feWVhciAlIDEwMDsKIAotCQlCSU5fVE9fQkNEKHRtLnRtX3llYXIpOwotCQlCSU5fVE9fQkNEKHRtLnRtX21vbik7Ci0JCUJJTl9UT19CQ0QodG0udG1fbWRheSk7Ci0JCUJJTl9UT19CQ0QodG0udG1faG91cik7Ci0JCUJJTl9UT19CQ0QodG0udG1fbWluKTsKLQkJQklOX1RPX0JDRCh0bS50bV9zZWMpOworCQl0bS50bV95ZWFyID0gYmluMmJjZCh0bS50bV95ZWFyKTsKKwkJdG0udG1fbW9uID0gYmluMmJjZCh0bS50bV9tb24pOworCQl0bS50bV9tZGF5ID0gYmluMmJjZCh0bS50bV9tZGF5KTsKKwkJdG0udG1faG91ciA9IGJpbjJiY2QodG0udG1faG91cik7CisJCXRtLnRtX21pbiA9IGJpbjJiY2QodG0udG1fbWluKTsKKwkJdG0udG1fc2VjID0gYmluMmJjZCh0bS50bV9zZWMpOwogCQl0bS50bV9tb24gfD0gY2VudHVyeTsKIAogCQltdXRleF9sb2NrKCZydGNfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCBkNjMzNWYyLi41YTFiMzFjIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIGFzZmxhZ3MteSArPSAtSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL21hY2gvIC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vYXJjaAogY2NmbGFncy15ICs9IC1PMiAtSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL21hY2gvIC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vYXJjaAotbGRmbGFncy15ICs9IC1UICQoc3JjdHJlZSkvJChvYmopL2RlY29tcHJlc3MubGQKK2xkZmxhZ3MteSArPSAtVCAkKHNyY3RyZWUpLyQoc3JjKS9kZWNvbXByZXNzLmxkcwogT0JKRUNUUyA9ICQob2JqKS9oZWFkLm8gJChvYmopL21pc2MubwogT0JKQ09QWUZMQUdTID0gLU8gYmluYXJ5IC0tcmVtb3ZlLXNlY3Rpb249LmJzcwogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL2RlY29tcHJlc3MubGQgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL2RlY29tcHJlc3MubGRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL2RlY29tcHJlc3MubGQKcmVuYW1lIHRvIGFyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5sZHMKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9NYWtlZmlsZSBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9NYWtlZmlsZQppbmRleCA0NGFlMGFkLi41NjZhYWM2IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvTWFrZWZpbGUKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogCQktSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL2FyY2gKIGFzZmxhZ3MteSArPSAtSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL2FyY2gvbWFjaC8gLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoCiBMRCA9IGdjYy1jcmlzIC1tbGludXggLW1hcmNoPXYzMiAtbm9zdGRsaWIKLWxkZmxhZ3MteSArPSAtVCAkKHNyY3RyZWUpLyQob2JqKS9yZXNjdWUubGQKK2xkZmxhZ3MteSArPSAtVCAkKHNyY3RyZWUpLyQoc3JjKS9yZXNjdWUubGRzCiBMRFBPU1RGTEFHUyA9IC1sZ2NjCiBPQkpDT1BZRkxBR1MgPSAtTyBiaW5hcnkgLS1yZW1vdmUtc2VjdGlvbj0uYnNzCiBvYmotJChDT05GSUdfRVRSQVhfQVhJU0ZMQVNITUFQKSA9IGhlYWQubwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL3Jlc2N1ZS5sZCBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9yZXNjdWUubGRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvcmVzY3VlLmxkCnJlbmFtZSB0byBhcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvcmVzY3VlLmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jCmluZGV4IGYyNjNhYjUuLmY0NDc4NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogCQkgICAgICAgImluZm9ybWF0aW9uIGlzIG5vIGxvbmdlciBndWFyYW50ZWVkIVxuIiwgUENGODU2M19OQU1FKTsKIAl9CiAKLQl0bS0+dG1feWVhciAgPSBCQ0RfVE9fQklOKHRtLT50bV95ZWFyKSArCisJdG0tPnRtX3llYXIgID0gYmNkMmJpbih0bS0+dG1feWVhcikgKwogCQkgICAgICAgKCh0bS0+dG1fbW9uICYgMHg4MCkgPyAxMDAgOiAwKTsKIAl0bS0+dG1fc2VjICAmPSAweDdGOwogCXRtLT50bV9taW4gICY9IDB4N0Y7CkBAIC0xMjcsMTEgKzEyNywxMSBAQAogCXRtLT50bV93ZGF5ICY9IDB4MDc7IC8qIE5vdCBjb2RlZCBpbiBCQ0QuICovCiAJdG0tPnRtX21vbiAgJj0gMHgxRjsKIAotCUJDRF9UT19CSU4odG0tPnRtX3NlYyk7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbWluKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9ob3VyKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9tZGF5KTsKLQlCQ0RfVE9fQklOKHRtLT50bV9tb24pOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHRtLT50bV9taW4pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbih0bS0+dG1faG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbih0bS0+dG1fbW9uKTsKIAl0bS0+dG1fbW9uLS07IC8qIE1vbnRoIGlzIDEuLjEyIGluIFJUQyBidXQgMC4uMTEgaW4gbGludXggKi8KIH0KIApAQCAtMjc5LDEyICsyNzksMTIgQEAKIAkJY2VudHVyeSA9ICh0bS50bV95ZWFyID49IDIwMDApID8gMHg4MCA6IDA7CiAJCXRtLnRtX3llYXIgPSB0bS50bV95ZWFyICUgMTAwOwogCi0JCUJJTl9UT19CQ0QodG0udG1feWVhcik7Ci0JCUJJTl9UT19CQ0QodG0udG1fbW9uKTsKLQkJQklOX1RPX0JDRCh0bS50bV9tZGF5KTsKLQkJQklOX1RPX0JDRCh0bS50bV9ob3VyKTsKLQkJQklOX1RPX0JDRCh0bS50bV9taW4pOwotCQlCSU5fVE9fQkNEKHRtLnRtX3NlYyk7CisJCXRtLnRtX3llYXIgPSBiaW4yYmNkKHRtLnRtX3llYXIpOworCQl0bS50bV9tb24gPSBiaW4yYmNkKHRtLnRtX21vbik7CisJCXRtLnRtX21kYXkgPSBiaW4yYmNkKHRtLnRtX21kYXkpOworCQl0bS50bV9ob3VyID0gYmluMmJjZCh0bS50bV9ob3VyKTsKKwkJdG0udG1fbWluID0gYmluMmJjZCh0bS50bV9taW4pOworCQl0bS50bV9zZWMgPSBiaW4yYmNkKHRtLnRtX3NlYyk7CiAJCXRtLnRtX21vbiB8PSBjZW50dXJ5OwogCiAJCW11dGV4X2xvY2soJnJ0Y19sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2NwdWZyZXEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2NwdWZyZXEuYwppbmRleCA4ZTVhM2NhLi5lZTM5MWVjIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9jcHVmcmVxLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvY3B1ZnJlcS5jCkBAIC04NSw3ICs4NSw2IEBACiAJaW50IHJlc3VsdDsKIAogCS8qIGNwdWluZm8gYW5kIGRlZmF1bHQgcG9saWN5IHZhbHVlcyAqLwotCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwMDAwMDA7IC8qIDFtcyAqLwogCXBvbGljeS0+Y3VyID0gY3Jpc19mcmVxX2dldF9jcHVfZnJlcXVlbmN5KDApOwogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9jcHVmcmVxLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9jcHVmcmVxLmMKaW5kZXggZDU3NjMxYy4uNThiZDcxZSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvY3B1ZnJlcS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2NwdWZyZXEuYwpAQCAtODEsNyArODEsNiBAQAogCWludCByZXN1bHQ7CiAKIAkvKiBjcHVpbmZvIGFuZCBkZWZhdWx0IHBvbGljeSB2YWx1ZXMgKi8KLQlwb2xpY3ktPmdvdmVybm9yID0gQ1BVRlJFUV9ERUZBVUxUX0dPVkVSTk9SOwogCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwMDAwOwkvKiAxbXMgKi8KIAlwb2xpY3ktPmN1ciA9IGNyaXNfZnJlcV9nZXRfY3B1X2ZyZXF1ZW5jeSgwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FydHBlY18zX2RlZmNvbmZpZyBiL2FyY2gvY3Jpcy9jb25maWdzL2FydHBlY18zX2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9jcmlzL2FydHBlY18zX2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9jcmlzL2NvbmZpZ3MvYXJ0cGVjXzNfZGVmY29uZmlnCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvZGVmY29uZmlnIGIvYXJjaC9jcmlzL2NvbmZpZ3MvZXRyYXgtMTAwbHhfZGVmY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2NyaXMvYXJjaC12MTAvZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL2NyaXMvY29uZmlncy9ldHJheC0xMDBseF9kZWZjb25maWcKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9kZWZjb25maWcgYi9hcmNoL2NyaXMvY29uZmlncy9ldHJheC0xMDBseF92Ml9kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvY3Jpcy9jb25maWdzL2V0cmF4LTEwMGx4X3YyX2RlZmNvbmZpZwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2V0cmF4ZnNfZGVmY29uZmlnIGIvYXJjaC9jcmlzL2NvbmZpZ3MvZXRyYXhmc19kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9ldHJheGZzX2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9jcmlzL2NvbmZpZ3MvZXRyYXhmc19kZWZjb25maWcKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMKaW5kZXggZmY0YzZhYS4uMDc0ZmU3ZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCQlyZXR1cm4gMDsKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7Ci0JQkNEX1RPX0JJTihjbW9zX21pbnV0ZXMpOworCWNtb3NfbWludXRlcyA9IGJjZDJiaW4oY21vc19taW51dGVzKTsKIAogCS8qCiAJICogc2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywKQEAgLTE0Miw4ICsxNDIsOCBAQAogCXJlYWxfbWludXRlcyAlPSA2MDsKIAogCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7Ci0JCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKLQkJQklOX1RPX0JDRChyZWFsX21pbnV0ZXMpOworCQlyZWFsX3NlY29uZHMgPSBiaW4yYmNkKHJlYWxfc2Vjb25kcyk7CisJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJQ01PU19XUklURShyZWFsX3NlY29uZHMsUlRDX1NFQ09ORFMpOwogCQlDTU9TX1dSSVRFKHJlYWxfbWludXRlcyxSVENfTUlOVVRFUyk7CiAJfSBlbHNlIHsKQEAgLTE3MCwxMiArMTcwLDEyIEBACiAJbW9uID0gQ01PU19SRUFEKFJUQ19NT05USCk7CiAJeWVhciA9IENNT1NfUkVBRChSVENfWUVBUik7CiAKLQlCQ0RfVE9fQklOKHNlYyk7Ci0JQkNEX1RPX0JJTihtaW4pOwotCUJDRF9UT19CSU4oaG91cik7Ci0JQkNEX1RPX0JJTihkYXkpOwotCUJDRF9UT19CSU4obW9uKTsKLQlCQ0RfVE9fQklOKHllYXIpOworCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwltaW4gPSBiY2QyYmluKG1pbik7CisJaG91ciA9IGJjZDJiaW4oaG91cik7CisJZGF5ID0gYmNkMmJpbihkYXkpOworCW1vbiA9IGJjZDJiaW4obW9uKTsKKwl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKIAogCWlmICgoeWVhciArPSAxOTAwKSA8IDE5NzApCiAJCXllYXIgKz0gMTAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvS2NvbmZpZyBiL2FyY2gvZnJ2L0tjb25maWcKaW5kZXggYTVhYWMxYi4uOWQxNTUyYSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvS2NvbmZpZworKysgYi9hcmNoL2Zydi9LY29uZmlnCkBAIC02Niw2ICs2Niw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIAogbWVudSAiRnVqaXRzdSBGUi1WIHN5c3RlbSBzZXR1cCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3BtLmMgYi9hcmNoL2Zydi9rZXJuZWwvcG0uYwppbmRleCBkMTExM2M1Li5iZTcyMmZjIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvcG0uYworKysgYi9hcmNoL2Zydi9rZXJuZWwvcG0uYwpAQCAtMjExLDcgKzIxMSw3IEBACiAJcmV0dXJuIHRyeV9zZXRfY21vZGUobmV3X2Ntb2RlKT86KmxlbnA7CiB9CiAKLXN0YXRpYyBpbnQgY21vZGVfc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorc3RhdGljIGludCBjbW9kZV9zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwKIAkJCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMzE0LDcgKzMxNCw3IEBACiAJcmV0dXJuIHRyeV9zZXRfcDAobmV3X3AwKT86KmxlbnA7CiB9CiAKLXN0YXRpYyBpbnQgcDBfc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorc3RhdGljIGludCBwMF9zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwKIAkJICAgICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkgICAgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0zNTgsNyArMzU4LDcgQEAKIAlyZXR1cm4gdHJ5X3NldF9jbShuZXdfY20pPzoqbGVucDsKIH0KIAotc3RhdGljIGludCBjbV9zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IGNtX3N5c2N0bChjdGxfdGFibGUgKnRhYmxlLAogCQkgICAgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCSAgICAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZG1hLW5vbW11LmMgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWRtYS1ub21tdS5jCmluZGV4IDY0ZWU1OGQuLjUyZmY5YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZG1hLW5vbW11LmMKKysrIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1kbWEtbm9tbXUuYwpAQCAtMTExLDcgKzExMSw3IEBACiAgKiBUaGUgMzItYml0IGJ1cyBhZGRyZXNzIHRvIHVzZSBpcyByZXR1cm5lZC4KICAqCiAgKiBPbmNlIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gdGhlIGRtYSBhZGRyZXNzLCB0aGUgZGV2aWNlIG93bnMgdGhpcyBtZW1vcnkKLSAqIHVudGlsIGVpdGhlciBwY2lfdW5tYXBfc2luZ2xlIG9yIHBjaV9kbWFfc3luY19zaW5nbGUgaXMgcGVyZm9ybWVkLgorICogdW50aWwgZWl0aGVyIGRtYV91bm1hcF9zaW5nbGUgb3IgcGNpX2RtYV9zeW5jX3NpbmdsZSBpcyBwZXJmb3JtZWQuCiAgKi8KIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAogCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCkBAIC0xMjksNyArMTI5LDcgQEAKIC8qCiAgKiBNYXAgYSBzZXQgb2YgYnVmZmVycyBkZXNjcmliZWQgYnkgc2NhdHRlcmxpc3QgaW4gc3RyZWFtaW5nCiAgKiBtb2RlIGZvciBETUEuICBUaGlzIGlzIHRoZSBzY2F0aGVyLWdhdGhlciB2ZXJzaW9uIG9mIHRoZQotICogYWJvdmUgcGNpX21hcF9zaW5nbGUgaW50ZXJmYWNlLiAgSGVyZSB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdAorICogYWJvdmUgZG1hX21hcF9zaW5nbGUgaW50ZXJmYWNlLiAgSGVyZSB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdAogICogZWxlbWVudHMgYXJlIGVhY2ggdGFnZ2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRtYSBhZGRyZXNzCiAgKiBhbmQgbGVuZ3RoLiAgVGhleSBhcmUgb2J0YWluZWQgdmlhIHNnX2RtYV97YWRkcmVzcyxsZW5ndGh9KFNHKS4KICAqCkBAIC0xMzksNyArMTM5LDcgQEAKICAqICAgICAgIFRoZSByb3V0aW5lIHJldHVybnMgdGhlIG51bWJlciBvZiBhZGRyL2xlbmd0aCBwYWlycyBhY3R1YWxseQogICogICAgICAgdXNlZCwgYXQgbW9zdCBuZW50cy4KICAqCi0gKiBEZXZpY2Ugb3duZXJzaGlwIGlzc3VlcyBhcyBtZW50aW9uZWQgYWJvdmUgZm9yIHBjaV9tYXBfc2luZ2xlIGFyZQorICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBkbWFfbWFwX3NpbmdsZSBhcmUKICAqIHRoZSBzYW1lIGhlcmUuCiAgKi8KIGludCBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLApAQCAtMTU4LDMgKzE1OCwyMCBAQAogfQogCiBFWFBPUlRfU1lNQk9MKGRtYV9tYXBfc2cpOworCisvKgorICogTWFwIGEgc2luZ2xlIHBhZ2Ugb2YgdGhlIGluZGljYXRlZCBzaXplIGZvciBETUEgaW4gc3RyZWFtaW5nIG1vZGUuCisgKiBUaGUgMzItYml0IGJ1cyBhZGRyZXNzIHRvIHVzZSBpcyByZXR1cm5lZC4KKyAqCisgKiBEZXZpY2Ugb3duZXJzaGlwIGlzc3VlcyBhcyBtZW50aW9uZWQgYWJvdmUgZm9yIGRtYV9tYXBfc2luZ2xlIGFyZQorICogdGhlIHNhbWUgaGVyZS4KKyAqLworZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCXJldHVybiAoZG1hX2FkZHJfdCkgcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0OworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9tYXBfcGFnZSk7CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWRtYS5jIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1kbWEuYwppbmRleCA2NjJmN2IxLi4zZGRlZGViIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWRtYS5jCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZG1hLmMKQEAgLTYxLDcgKzYxLDcgQEAKIC8qCiAgKiBNYXAgYSBzZXQgb2YgYnVmZmVycyBkZXNjcmliZWQgYnkgc2NhdHRlcmxpc3QgaW4gc3RyZWFtaW5nCiAgKiBtb2RlIGZvciBETUEuICBUaGlzIGlzIHRoZSBzY2F0aGVyLWdhdGhlciB2ZXJzaW9uIG9mIHRoZQotICogYWJvdmUgcGNpX21hcF9zaW5nbGUgaW50ZXJmYWNlLiAgSGVyZSB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdAorICogYWJvdmUgZG1hX21hcF9zaW5nbGUgaW50ZXJmYWNlLiAgSGVyZSB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdAogICogZWxlbWVudHMgYXJlIGVhY2ggdGFnZ2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRtYSBhZGRyZXNzCiAgKiBhbmQgbGVuZ3RoLiAgVGhleSBhcmUgb2J0YWluZWQgdmlhIHNnX2RtYV97YWRkcmVzcyxsZW5ndGh9KFNHKS4KICAqCkBAIC03MSw3ICs3MSw3IEBACiAgKiAgICAgICBUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWRkci9sZW5ndGggcGFpcnMgYWN0dWFsbHkKICAqICAgICAgIHVzZWQsIGF0IG1vc3QgbmVudHMuCiAgKgotICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBwY2lfbWFwX3NpbmdsZSBhcmUKKyAqIERldmljZSBvd25lcnNoaXAgaXNzdWVzIGFzIG1lbnRpb25lZCBhYm92ZSBmb3IgZG1hX21hcF9zaW5nbGUgYXJlCiAgKiB0aGUgc2FtZSBoZXJlLgogICovCiBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKQEAgLTEwNSw2ICsxMDUsMTMgQEAKIAogRVhQT1JUX1NZTUJPTChkbWFfbWFwX3NnKTsKIAorLyoKKyAqIE1hcCBhIHNpbmdsZSBwYWdlIG9mIHRoZSBpbmRpY2F0ZWQgc2l6ZSBmb3IgRE1BIGluIHN0cmVhbWluZyBtb2RlLgorICogVGhlIDMyLWJpdCBidXMgYWRkcmVzcyB0byB1c2UgaXMgcmV0dXJuZWQuCisgKgorICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBkbWFfbWFwX3NpbmdsZSBhcmUKKyAqIHRoZSBzYW1lIGhlcmUuCisgKi8KIGRtYV9hZGRyX3QgZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5jCmluZGV4IGVkYWUxMTcuLjQzZDY3NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMKKysrIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYwpAQCAtMjAxLDM4ICsyMDEsNiBAQAogCXBjaWJpb3NfYXNzaWduX3Jlc291cmNlcygpOwogfQogCi1pbnQgcGNpYmlvc19lbmFibGVfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBtYXNrKQotewotCXUxNiBjbWQsIG9sZF9jbWQ7Ci0JaW50IGlkeDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLQlvbGRfY21kID0gY21kOwotCWZvcihpZHg9MDsgaWR4PDY7IGlkeCsrKSB7Ci0JCS8qIE9ubHkgc2V0IHVwIHRoZSByZXF1ZXN0ZWQgc3R1ZmYgKi8KLQkJaWYgKCEobWFzayAmICgxPDxpZHgpKSkKLQkJCWNvbnRpbnVlOwotCi0JCXIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOwotCQlpZiAoIXItPnN0YXJ0ICYmIHItPmVuZCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IERldmljZSAlcyBub3QgYXZhaWxhYmxlIGJlY2F1c2Ugb2YgcmVzb3VyY2UgY29sbGlzaW9uc1xuIiwgcGNpX25hbWUoZGV2KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQotCQkJY21kIHw9IFBDSV9DT01NQU5EX0lPOwotCQlpZiAoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkKLQkJCWNtZCB8PSBQQ0lfQ09NTUFORF9NRU1PUlk7Ci0JfQotCWlmIChkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLnN0YXJ0KQotCQljbWQgfD0gUENJX0NPTU1BTkRfTUVNT1JZOwotCWlmIChjbWQgIT0gb2xkX2NtZCkgewotCQlwcmludGsoIlBDSTogRW5hYmxpbmcgZGV2aWNlICVzICglMDR4IC0+ICUwNHgpXG4iLCBwY2lfbmFtZShkZXYpLCBvbGRfY21kLCBjbWQpOwotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiAgSWYgd2Ugc2V0IHVwIGEgZGV2aWNlIGZvciBidXMgbWFzdGVyaW5nLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBsYXRlbmN5CiAgKiAgdGltZXIgYXMgY2VydGFpbiBjcmFwcHkgQklPU2VzIGZvcmdldCB0byBzZXQgaXQgcHJvcGVybHkuCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5oIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuaAppbmRleCAwYzdiZjM5Li5mM2ZlNTU5IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5oCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmgKQEAgLTI5LDcgKzI5LDYgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgcGNpYmlvc19tYXhfbGF0ZW5jeTsKIAogdm9pZCBwY2liaW9zX3Jlc291cmNlX3N1cnZleSh2b2lkKTsKLWludCBwY2liaW9zX2VuYWJsZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKiwgaW50KTsKIAogLyogcGNpLXZkay5jICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktdmRrLmMgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLXZkay5jCmluZGV4IGYwMDNjZmEuLjBmNDFjM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktdmRrLmMKKysrIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS12ZGsuYwpAQCAtNDEyLDcgKzQxMiw3IEBACiB7CiAJaW50IGVycjsKIAotCWlmICgoZXJyID0gcGNpYmlvc19lbmFibGVfcmVzb3VyY2VzKGRldiwgbWFzaykpIDwgMCkKKwlpZiAoKGVyciA9IHBjaV9lbmFibGVfcmVzb3VyY2VzKGRldiwgbWFzaykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlpZiAoIWRldi0+bXNpX2VuYWJsZWQpCiAJCXBjaWJpb3NfZW5hYmxlX2lycShkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbW0vaW5pdC5jIGIvYXJjaC9mcnYvbW0vaW5pdC5jCmluZGV4IDFiODUxZGIuLjA3MDgyODQgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21tL2luaXQuYworKysgYi9hcmNoL2Zydi9tbS9pbml0LmMKQEAgLTg3LDggKzg3LDYgQEAKIAogCQlwa21hcF9wYWdlX3RhYmxlID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOwogCi0JCW1lbXNldChwa21hcF9wYWdlX3RhYmxlLCAwLCBQQUdFX1NJWkUpOwotCiAJCXBnZSA9IHN3YXBwZXJfcGdfZGlyICsgcGdkX2luZGV4X2soUEtNQVBfQkFTRSk7CiAJCXB1ZSA9IHB1ZF9vZmZzZXQocGdlLCBQS01BUF9CQVNFKTsKIAkJcG1lID0gcG1kX29mZnNldChwdWUsIFBLTUFQX0JBU0UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9LY29uZmlnIGIvYXJjaC9oODMwMC9LY29uZmlnCmluZGV4IDM5NmFiMDUuLmJkMTk5NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvS2NvbmZpZworKysgYi9hcmNoL2g4MzAwL0tjb25maWcKQEAgLTYyLDEzICs2MiwxNCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfQlVHCisgICAgICAgIGJvb2wKKyAgICAgICAgZGVwZW5kcyBvbiBCVUcKKwogY29uZmlnIFRJTUVfTE9XX1JFUwogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEFSQ0hfU1VQUE9SVFNfQU9VVAotCWRlZl9ib29sIHkKLQogY29uZmlnIE5PX0lPUE9SVAogCWRlZl9ib29sIHkKIApAQCAtODksNiArOTAsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBzb3VyY2UgImFyY2gvaDgzMDAvS2NvbmZpZy5jcHUiCiAKIG1lbnUgIkV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzIgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9LY29uZmlnLmNwdSBiL2FyY2gvaDgzMDAvS2NvbmZpZy5jcHUKaW5kZXggNTgyNzk3ZC4uYjY1ZGNmZSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9LY29uZmlnLmNwdQorKysgYi9hcmNoL2g4MzAwL0tjb25maWcuY3B1CkBAIC0xLDUgKzEsNyBAQAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCitzb3VyY2UgImtlcm5lbC90aW1lL0tjb25maWciCisKIGNob2ljZQogCXByb21wdCAiSDgvMzAwIHBsYXRmb3JtIgogCWRlZmF1bHQgSDgzMDBIX0dFTkVSSUMKQEAgLTExLDYgKzEzLDcgQEAKIAogY29uZmlnIEg4MzAwSF9BS0kzMDY4TkVUCiAJYm9vbCAiQUUtMzA2OC82OSIKKwlzZWxlY3QgQ09ORklHX0g4MzA2OAogCWhlbHAKIAkgIEFLSS1IOC8zMDY4RiAvIEFLSS1IOC8zMDY5RiBGbGFzaG1pY29tIExBTiBCb2FyZCBTdXBwb3J0CiAJICBNb3JlIEluZm9ybWF0aW9uLiAoSmFwYW5lc2UgT25seSkKQEAgLTIxLDYgKzI0LDcgQEAKIAogY29uZmlnIEg4MzAwSF9IOE1BWAogCWJvb2wgIkg4TUFYIgorCXNlbGVjdCBDT05GSUdfSDgzMDY4CiAJaGVscAogCSAgSDhNQVggRXZhbHVhdGlvbiBCb2FyZCBTdXBwb3J0CiAJICBNb3JlIEluZm9ybWF0aW9uLiAoSmFwYW5lc2UgT25seSkKQEAgLTI4LDYgKzMyLDcgQEAKIAogY29uZmlnIEg4MzAwSF9TSU0KIAlib29sICJIOC8zMDBIIFNpbXVsYXRvciIKKwlzZWxlY3QgQ09ORklHX0g4MzAwNwogCWhlbHAKIAkgIEdEQiBTaW11bGF0b3IgU3VwcG9ydAogCSAgTW9yZSBJbmZvcm1hdGlvbi4KQEAgLTQwLDYgKzQ1LDcgQEAKIAogY29uZmlnIEg4U19FRE9TSzI2NzQKIAlib29sICJFRE9TSy0yNjc0IgorCXNlbGVjdCBDT05GSUdfSDhTMjc2OAogCWhlbHAKIAkgIFJlbmVzYXMgRURPU0stMjY3NCBFdmFsdWF0aW9uIEJvYXJkIFN1cHBvcnQKIAkgIE1vcmUgSW5mb3JtYXRpb24uCkBAIC01NSw0NCArNjEsMzcgQEAKIAogZW5kY2hvaWNlCiAKLWlmIChIODMwMEhfR0VORVJJQyB8fCBIOFNfR0VORVJJQykKLW1lbnUgIkRldGFpbCBTZWxlY3Rpb24iCi1pZiAoSDgzMDBIX0dFTkVSSUMpCiBjaG9pY2UKIAlwcm9tcHQgIkNQVSBTZWxlY3Rpb24iCiAKIGNvbmZpZyBIODMwMDIKIAlib29sICJIOC8zMDAxLDMwMDIsMzAwMyIKKwlzZWxlY3QgQ1BVX0g4MzAwSAogCiBjb25maWcgSDgzMDA3CiAJYm9vbCAiSDgvMzAwNiwzMDA3IgorCXNlbGVjdCBDUFVfSDgzMDBICiAKIGNvbmZpZyBIODMwNDgKIAlib29sICJIOC8zMDQ0LDMwNDUsMzA0NiwzMDQ3LDMwNDgsMzA1MiIKKwlzZWxlY3QgQ1BVX0g4MzAwSAogCiBjb25maWcgSDgzMDY4CiAJYm9vbCAiSDgvMzA2NSwzMDY2LDMwNjcsMzA2OCwzMDY5IgotZW5kY2hvaWNlCi1lbmRpZgotCi1pZiAoSDhTX0dFTkVSSUMpCi1jaG9pY2UKLQlwcm9tcHQgIkNQVSBTZWxlY3Rpb24iCisJc2VsZWN0IENQVV9IODMwMEgKIAogY29uZmlnIEg4UzI2NzgKIAlib29sICJIOFMvMjY3MCwyNjczLDI2NzRSLDI2NzUsMjY3NiIKKwlzZWxlY3QgQ1BVX0g4UworCiBlbmRjaG9pY2UKLWVuZGlmCiAKIGNvbmZpZyBDUFVfQ0xPQ0sKIAlpbnQgIkNQVSBDbG9jayBGcmVxdWVuY3kgKC8xS0h6KSIKIAlkZWZhdWx0ICIyMDAwMCIKIAloZWxwCiAJICBDUFUgQ2xvY2sgRnJlcXVlbmN5IGRpdmlkZSB0byAxMDAwCi1lbmRtZW51Ci1lbmRpZgogCi1pZiAoSDgzMDBIX0dFTkVSSUMgfHwgSDhTX0dFTkVSSUMgfHwgSDgzMDBIX1NJTSB8fCBIOFNfU0lNIHx8IEg4U19FRE9TSzI2NzQpCiBjaG9pY2UKIAlwcm9tcHQgIktlcm5lbCBleGVjdXRlcyBmcm9tIgogCS0tLWhlbHAtLS0KQEAgLTEwNyw2NSArMTA2LDggQEAKIAlib29sICJST00iCiAJaGVscAogCSAgVGhlIGtlcm5lbCB3aWxsIGJlIHJlc2lkZW50IGluIEZMQVNIL1JPTSB3aGVuIHJ1bm5pbmcuCi0KIGVuZGNob2ljZQotZW5kaWYKIAotaWYgKEg4MzAwSF9BS0kzMDY4TkVUKQotY29uZmlnIEg4MzA2OAotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIENQVV9DTE9DSwotCWludAotCWRlZmF1bHQgIjIwMDAwIgotCi1jb25maWcgUkFNS0VSTkVMCi0JYm9vbAotCWRlZmF1bHQgeQotZW5kaWYKLQotaWYgKEg4MzAwSF9IOE1BWCkKLWNvbmZpZyBIODMwNjgKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBDUFVfQ0xPQ0sKLQlpbnQKLQlkZWZhdWx0IDI1MDAwCi0KLWNvbmZpZyBSQU1LRVJORUwKLQlib29sCi0JZGVmYXVsdCB5Ci1lbmRpZgotCi1pZiAoSDgzMDBIX1NJTSkKLWNvbmZpZyBIODMwMDcKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBDUFVfQ0xPQ0sKLQlpbnQKLQlkZWZhdWx0ICIxNjAwMCIKLWVuZGlmCi0KLWlmIChIOFNfRURPU0syNjc0KQotY29uZmlnIEg4UzI2NzgKLQlib29sCi0JZGVmYXVsdCB5Ci1jb25maWcgQ1BVX0NMT0NLCi0JaW50Ci0JZGVmYXVsdCAzMzAwMAotZW5kaWYKLQotaWYgKEg4U19TSU0pCi1jb25maWcgSDhTMjY3OAotCWJvb2wKLQlkZWZhdWx0IHkKLWNvbmZpZyBDUFVfQ0xPQ0sKLQlpbnQKLQlkZWZhdWx0IDMzMDAwCi1lbmRpZgogCiBjb25maWcgQ1BVX0g4MzAwSAogCWJvb2wKQEAgLTE3Nyw2ICsxMTksNDkgQEAKIAlkZXBlbmRzIG9uIEg4UzI2NzgKIAlkZWZhdWx0IHkKIAorY2hvaWNlCisJcHJvbXB0ICJUaW1lciIKK2NvbmZpZyBIODMwMF9USU1FUjgKKwlib29sICI4Yml0IHRpbWVyICgyY2ggY2FzY2FkZSkiCisJZGVwZW5kcyBvbiAoSDgzMDA3IHx8IEg4MzA2OCB8fCBIOFMyNjc4KQorCitjb25maWcgSDgzMDBfVElNRVIxNgorCWJvb2wgIjE2Yml0IHRpbWVyIgorCWRlcGVuZHMgb24gKEg4MzAwNyB8fCBIODMwNjgpCisKK2NvbmZpZyBIODMwMF9JVFUKKwlib29sICJJVFUiCisJZGVwZW5kcyBvbiAoSDgzMDAyIHx8IEg4MzA0OCkKKworY29uZmlnIEg4MzAwX1RQVQorCWJvb2wgIlRQVSIKKwlkZXBlbmRzIG9uIEg4UzI2NzgKK2VuZGNob2ljZQorCitpZiBIODMwMF9USU1FUjgKK2Nob2ljZQorCXByb21wdCAiVGltZXIgQ2hhbm5lbCIKK2NvbmZpZyBIODMwMF9USU1FUjhfQ0gwCisJYm9vbCAiQ2hhbm5lbCAwIgorY29uZmlnIEg4MzAwX1RJTUVSOF9DSDIKKwlib29sICJDaGFubmVsIDIiCisJZGVwZW5kcyBvbiBDUFVfSDgzMDBICitlbmRjaG9pY2UKK2VuZGlmCisKK2NvbmZpZyBIODMwMF9USU1FUjE2X0NICisJaW50ICIxNmJpdCB0aW1lciBjaGFubmVsICgwIC0gMikiCisJZGVwZW5kcyBvbiBIODMwMF9USU1FUjE2CisJcmFuZ2UgMCAyCisKK2NvbmZpZyBIODMwMF9JVFVfQ0gKKwlpbnQgIklUVSBjaGFubmVsIgorCWRlcGVuZHMgb24gSDgzMDBfSVRVCisKK2NvbmZpZyBIODMwMF9UUFVfQ0gKKwlpbnQgIlRQVSBjaGFubmVsIgorCWRlcGVuZHMgb24gSDgzMDBfVFBVCisKIGNvbmZpZyBQUkVFTVBUCiAJYm9vbCAiUHJlZW1wdGlibGUgS2VybmVsIgogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9hLm91dC5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9hLm91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWQ3ODBmLi4wMDAwMDAwCi0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vYS5vdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSNpZm5kZWYgX19IODMwMF9BX09VVF9IX18KLSNkZWZpbmUgX19IODMwMF9BX09VVF9IX18KLQotc3RydWN0IGV4ZWMKLXsKLSAgdW5zaWduZWQgbG9uZyBhX2luZm87CQkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCi0gIHVuc2lnbmVkIGFfdGV4dDsJCS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2RhdGE7CQkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfc3ltczsJCS8qIGxlbmd0aCBvZiBzeW1ib2wgdGFibGUgZGF0YSBpbiBmaWxlLCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2VudHJ5OwkJLyogc3RhcnQgYWRkcmVzcyAqLwotICB1bnNpZ25lZCBhX3Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfZHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgZGF0YSwgaW4gYnl0ZXMgKi8KLX07Ci0KLSNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKLSNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKLSNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQotCi0jZW5kaWYgLyogX19IODMwMF9BX09VVF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2J1Zy5oCmluZGV4IGVkZGRmNWIuLjg4N2MxOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vYnVnLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9idWcuaApAQCAtMSw0ICsxLDggQEAKICNpZm5kZWYgX0g4MzAwX0JVR19ICiAjZGVmaW5lIF9IODMwMF9CVUdfSAorCisvKiBhbHdheXMgdHJ1ZSAqLworI2RlZmluZSBpc192YWxpZF9idWdhZGRyKGFkZHIpICgxKQorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGE4YjU3ZDEuLjk0ZTIyODQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9lbGYuaApAQCAtNTUsNyArNTUsNyBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQogCiAjZGVmaW5lIFJfSDhfTk9ORSAgICAgICAwCiAjZGVmaW5lIFJfSDhfRElSMzIgICAgICAxCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMjZkYzZjYy4uMzNlODQyZiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vaW8uaApAQCAtMjk1LDYgKzI5NSw0MCBAQAogICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKWFkZHIgPSBiOwogfQogCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGN0cmxfYmNscihpbnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChiKSkKKwkJc3dpdGNoIChiKSB7CisJCWNhc2UgMDogX19hc21fXygiYmNsciAjMCxAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSAxOiBfX2FzbV9fKCJiY2xyICMxLEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDI6IF9fYXNtX18oImJjbHIgIzIsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgMzogX19hc21fXygiYmNsciAjMyxAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSA0OiBfX2FzbV9fKCJiY2xyICM0LEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDU6IF9fYXNtX18oImJjbHIgIzUsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgNjogX19hc21fXygiYmNsciAjNixAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSA3OiBfX2FzbV9fKCJiY2xyICM3LEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQl9CisJZWxzZQorCQlfX2FzbV9fKCJiY2xyICV3MCxAJTEiOjoiciIoYiksICJyIihhZGRyKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY3RybF9ic2V0KGludCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGIpKQorCQlzd2l0Y2ggKGIpIHsKKwkJY2FzZSAwOiBfX2FzbV9fKCJic2V0ICMwLEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDE6IF9fYXNtX18oImJzZXQgIzEsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgMjogX19hc21fXygiYnNldCAjMixAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSAzOiBfX2FzbV9fKCJic2V0ICMzLEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDQ6IF9fYXNtX18oImJzZXQgIzQsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgNTogX19hc21fXygiYnNldCAjNSxAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSA2OiBfX2FzbV9fKCJic2V0ICM2LEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDc6IF9fYXNtX18oImJzZXQgIzcsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCX0KKwllbHNlCisJCV9fYXNtX18oImJzZXQgJXcwLEAlMSI6OiJyIihiKSwgInIiKGFkZHIpKTsKK30KKwogLyogUGFnZXMgdG8gcGh5c2ljYWwgYWRkcmVzcy4uLiAqLwogI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkgICAgICAoKHBhZ2UgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBwYWdlX3RvX2J1cyhwYWdlKSAgICAgICAoKHBhZ2UgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9tZC5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9tZC5oCmluZGV4IDFhNDdkYzYuLjFiNzMwMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vbWQuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL21kLmgKQEAgLTEsNCArMSw0IEBACi0vKiAkSWQ6IG1kLmgsdiAxLjEgMjAwMi8xMS8xOSAwMjowOToyNiBnZXJnIEV4cCAkCisvKgogICogbWQuaDogSGlnaCBzcGVlZCB4b3JfYmxvY2sgb3BlcmF0aW9uIGZvciBSQUlENC81IAogICoKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggNGI4ZTQ3NS4uZDk4ZDk3NiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xNTUsNCArMTU1LDYgQEAKIAogI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQogCit2b2lkIGRpZShjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpmcCwgdW5zaWduZWQgbG9uZyBlcnIpOworCiAjZW5kaWYgLyogX0g4MzAwX1NZU1RFTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggYWFmZDRkMy4uNzAwMDE0ZCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtODksNiArODksNyBAQAogCQkJCQkgICBUSUZfTkVFRF9SRVNDSEVEICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTQKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk1CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTYJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogLyogYXMgYWJvdmUsIGJ1dCBhcyBiaXQgdmFsdWVzICovCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCkBAIC05Niw2ICs5Nyw3IEBACiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCTB4MDAwMEZGRkUJLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaDgzMDAva2VybmVsL01ha2VmaWxlCmluZGV4IDZjMjQ4YzMuLjhkNGQyYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL01ha2VmaWxlCkBAIC03LDYgKzcsNiBAQAogb2JqLXkgOj0gcHJvY2Vzcy5vIHRyYXBzLm8gcHRyYWNlLm8gaXJxLm8gXAogCSBzeXNfaDgzMDAubyB0aW1lLm8gc2lnbmFsLm8gXAogICAgICAgICAgc2V0dXAubyBncGlvLm8gaW5pdF90YXNrLm8gc3lzY2FsbHMubyBcCi0JIGVudHJ5Lm8KKwkgZW50cnkubyB0aW1lci8KIAogb2JqLSQoQ09ORklHX01PRFVMRVMpICs9IG1vZHVsZS5vIGg4MzAwX2tzeW1zLm8gCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvaDgzMDAva2VybmVsL21vZHVsZS5jCmluZGV4IDRmZDcxMzguLmNmYzkxMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL21vZHVsZS5jCkBAIC0xMTQsOSArMTE0LDEwIEBACiAJCSAgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKIAkJICAgIHN0cnVjdCBtb2R1bGUgKm1lKQogewotCXJldHVybiAwOworCXJldHVybiBtb2R1bGVfYnVnX2ZpbmFsaXplKGhkciwgc2VjaGRycywgbWUpOwogfQogCiB2b2lkIG1vZHVsZV9hcmNoX2NsZWFudXAoc3RydWN0IG1vZHVsZSAqbW9kKQogeworCW1vZHVsZV9idWdfY2xlYW51cChtb2QpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9oODMwMC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGRmYmU3YWIuLmE4ZWY2NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgotI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWUuYyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWUuYwppbmRleCBlMzdjODM1Li43ZjJkNmNmIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZS5jCkBAIC0yNywyNyArMjcsMjEgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdGFyZ2V0X3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KIAogI2RlZmluZQlUSUNLX1NJWkUgKHRpY2tfbnNlYyAvIDEwMDApCiAKLS8qCi0gKiB0aW1lcl9pbnRlcnJ1cHQoKSBuZWVkcyB0byBrZWVwIHVwIHRoZSByZWFsLXRpbWUgY2xvY2ssCi0gKiBhcyB3ZWxsIGFzIGNhbGwgdGhlICJkb190aW1lcigpIiByb3V0aW5lIGV2ZXJ5IGNsb2NrdGljawotICovCi1zdGF0aWMgdm9pZCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZHVtbXksIHN0cnVjdCBwdF9yZWdzICogcmVncykKK3ZvaWQgaDgzMDBfdGltZXJfdGljayh2b2lkKQogewotCS8qIG1heSBuZWVkIHRvIGtpY2sgdGhlIGhhcmR3YXJlIHRpbWVyICovCi0JcGxhdGZvcm1fdGltZXJfZW9pKCk7Ci0KKwlpZiAoY3VycmVudC0+cGlkKQorCQlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORyk7CisJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAJZG9fdGltZXIoMSk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUocmVncykpOwotI2VuZGlmCi0JcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKGdldF9pcnFfcmVncygpKSk7CiB9CiAKLXZvaWQgdGltZV9pbml0KHZvaWQpCit2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjOwogCkBAIC01NywxMiArNTEsMTMgQEAKIAl5ZWFyID0gMTk4MDsKIAltb24gPSBkYXkgPSAxOwogCWhvdXIgPSBtaW4gPSBzZWMgPSAwOwotCXBsYXRmb3JtX2dldHRvZCAoJnllYXIsICZtb24sICZkYXksICZob3VyLCAmbWluLCAmc2VjKTsKLQorI2lmZGVmIENPTkZJR19IODMwMF9HRVRUT0QKKwloODMwMF9nZXR0b2QgKCZ5ZWFyLCAmbW9uLCAmZGF5LCAmaG91ciwgJm1pbiwgJnNlYyk7CisjZW5kaWYKIAlpZiAoKHllYXIgKz0gMTkwMCkgPCAxOTcwKQogCQl5ZWFyICs9IDEwMDsKIAl4dGltZS50dl9zZWMgPSBta3RpbWUoeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKIAl4dGltZS50dl9uc2VjID0gMDsKIAotCXBsYXRmb3JtX3RpbWVyX3NldHVwKHRpbWVyX2ludGVycnVwdCk7CisJaDgzMDBfdGltZXJfc2V0dXAoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL01ha2VmaWxlIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmMDUxMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorIyBoODMwMCBpbnRlcm5hbCB0aW1lciBoYW5kbGVyCisKK29iai0kKENPTkZJR19IODMwMF9USU1FUjgpICA6PSB0aW1lcjgubworb2JqLSQoQ09ORklHX0g4MzAwX1RJTUVSMTYpIDo9IHRpbWVyMTYubworb2JqLSQoQ09ORklHX0g4MzAwX0lUVSkgICAgIDo9IGl0dS5vCitvYmotJChDT05GSUdfSDgzMDBfVFBVKSAgICAgOj0gdHB1Lm8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL2l0dS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvaXR1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjOTI2NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL2l0dS5jCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvaXR1LmMKKyAqCisgKiAgWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvZ2UuanA+CisgKgorICogIElUVSBUaW1lciBIYW5kbGVyCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorCisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3JlZ3MzMDZ4Lmg+CisKKyNpZiBDT05GSUdfSDgzMDBfSVRVX0NIID09IDAKKyNkZWZpbmUgSVRVQkFTRQkweGZmZmY2NAorI2RlZmluZSBJVFVJUlEJMjQKKyNlbGlmIENPTkZJR19IODMwMF9JVFVfQ0ggPT0gMQorI2RlZmluZSBJVFVCQVNFCTB4ZmZmZjZlCisjZGVmaW5lIElUVUlSUQkyOAorI2VsaWYgQ09ORklHX0g4MzAwX0lUVV9DSCA9PSAyCisjZGVmaW5lIElUVUJBU0UJMHhmZmZmNzgKKyNkZWZpbmUgSVRVSVJRCTMyCisjZWxpZiBDT05GSUdfSDgzMDBfSVRVX0NIID09IDMKKyNkZWZpbmUgSVRVQkFTRQkweGZmZmY4MgorI2RlZmluZSBJVFVJUlEJMzYKKyNlbGlmIENPTkZJR19IODMwMF9JVFVfQ0ggPT0gNAorI2RlZmluZSBJVFVCQVNFCTB4ZmZmZjkyCisjZGVmaW5lIElUVUlSUQk0MAorI2Vsc2UKKyNlcnJvciBVbmtub3duIHRpbWVyIGNoYW5uZWwuCisjZW5kaWYKKworI2RlZmluZSBUQ1IJMAorI2RlZmluZSBUSU9SCTEKKyNkZWZpbmUgVElFUgkyCisjZGVmaW5lIFRTUgkzCisjZGVmaW5lIFRDTlQJNAorI2RlZmluZSBHUkEJNgorI2RlZmluZSBHUkIJOAorCitzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwloODMwMF90aW1lcl90aWNrKCk7CisJY3RybF9iY2xyKElNRkEsIElUVUJBU0UgKyBUU1IpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXR1X2lycSA9IHsKKwkubmFtZQkJPSAiaXR1IiwKKwkuaGFuZGxlcgk9IHRpbWVyX2ludGVycnVwdCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBkaXZpZGVfcmF0ZVtdID0gezEsIDIsIDQsIDh9OworCit2b2lkIF9faW5pdCBoODMwMF90aW1lcl9zZXR1cCh2b2lkKQoreworCXVuc2lnbmVkIGludCBkaXY7CisJdW5zaWduZWQgaW50IGNudDsKKworCWNhbGNfcGFyYW0oY250LCBkaXYsIGRpdmlkZV9yYXRlLCAweDEwMDAwKTsKKworCXNldHVwX2lycShJVFVJUlEsICZpdHVfaXJxKTsKKworCS8qIGluaXRhbGl6ZSB0aW1lciAqLworCWN0cmxfb3V0YigwLCBUU1RSKTsKKwljdHJsX291dGIoQ0NMUjAgfCBkaXYsIElUVUJBU0UgKyBUQ1IpOworCWN0cmxfb3V0YigweDAxLCBJVFVCQVNFICsgVElFUik7CisJY3RybF9vdXR3KGNudCwgSVRVQkFTRSArIEdSQSk7CisJY3RybF9ic2V0KENPTkZJR19IODMwMF9JVFVfQ0gsIFRTVFIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXIxNi5jIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXIxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNDI3MWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90aW1lcjE2LmMKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90aW1lcjE2LmMKKyAqCisgKiAgWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvZ2UuanA+CisgKgorICogIDE2Yml0IFRpbWVyIEhhbmRsZXIKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisKKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcmVnczMwNnguaD4KKworLyogMTZiaXQgdGltZXIgKi8KKyNpZiBDT05GSUdfSDgzMDBfVElNRVIxNl9DSCA9PSAwCisjZGVmaW5lIF8xNkJBU0UJMHhmZmZmNzgKKyNkZWZpbmUgXzE2SVJRCTI0CisjZWxpZiBDT05GSUdfSDgzMDBfVElNRVIxNl9DSCA9PSAxCisjZGVmaW5lIF8xNkJBU0UJMHhmZmZmODAKKyNkZWZpbmUgXzE2SVJRCTI4CisjZWxpZiBDT05GSUdfSDgzMDBfVElNRVIxNl9DSCA9PSAyCisjZGVmaW5lIF8xNkJBU0UJMHhmZmZmODgKKyNkZWZpbmUgXzE2SVJRCTMyCisjZWxzZQorI2Vycm9yIFVua25vd24gdGltZXIgY2hhbm5lbC4KKyNlbmRpZgorCisjZGVmaW5lIFRDUgkwCisjZGVmaW5lIFRJT1IJMQorI2RlZmluZSBUQ05UCTIKKyNkZWZpbmUgR1JBCTQKKyNkZWZpbmUgR1JCCTYKKworI2RlZmluZSBIODMwMF9USU1FUl9GUkVRIENPTkZJR19DUFVfQ0xPQ0sqMTAwMDAgLyogVGltZXIgaW5wdXQgZnJlcS4gKi8KKworc3RhdGljIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaDgzMDBfdGltZXJfdGljaygpOworCWN0cmxfYmNscihDT05GSUdfSDgzMDBfVElNRVIxNl9DSCwgVElTUkEpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXIxNl9pcnEgPSB7CisJLm5hbWUJCT0gInRpbWVyLTE2IiwKKwkuaGFuZGxlcgk9IHRpbWVyX2ludGVycnVwdCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBkaXZpZGVfcmF0ZVtdID0gezEsIDIsIDQsIDh9OworCit2b2lkIF9faW5pdCBoODMwMF90aW1lcl9zZXR1cCh2b2lkKQoreworCXVuc2lnbmVkIGludCBkaXY7CisJdW5zaWduZWQgaW50IGNudDsKKworCWNhbGNfcGFyYW0oY250LCBkaXYsIGRpdmlkZV9yYXRlLCAweDEwMDAwKTsKKworCXNldHVwX2lycShfMTZJUlEsICZ0aW1lcjE2X2lycSk7CisKKwkvKiBpbml0YWxpemUgdGltZXIgKi8KKwljdHJsX291dGIoMCwgVFNUUik7CisJY3RybF9vdXRiKENDTFIwIHwgZGl2LCBfMTZCQVNFICsgVENSKTsKKwljdHJsX291dHcoY250LCBfMTZCQVNFICsgR1JBKTsKKwljdHJsX2JzZXQoNCArIENPTkZJR19IODMwMF9USU1FUjE2X0NILCBUSVNSQSk7CisJY3RybF9ic2V0KENPTkZJR19IODMwMF9USU1FUjE2X0NILCBUU1RSKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyOC5jIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1NmQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyOC5jCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogIGxpbnV4L2FyY2gvaDgzMDAva2VybmVsL2NwdS90aW1lci90aW1lcjguYworICoKKyAqICBZb3NoaW5vcmkgU2F0byA8eXNhdG9AdXNlcnMuc291cmNlZm9nZS5qcD4KKyAqCisgKiAgOGJpdCBUaW1lciBIYW5kbGVyCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0g4MzAwSCkKKyNpbmNsdWRlIDxhc20vcmVnczMwNnguaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9IOFMpCisjaW5jbHVkZSA8YXNtL3JlZ3MyNjd4Lmg+CisjZW5kaWYKKworLyogOGJpdCB0aW1lciB4MiAqLworI2RlZmluZSBDTUZBCTYKKworI2lmIGRlZmluZWQoQ09ORklHX0g4MzAwX1RJTUVSOF9DSDApCisjZGVmaW5lIF84QkFTRQlfOFRDUjAKKyNpZmRlZiBDT05GSUdfQ1BVX0g4MzAwSAorI2RlZmluZSBfOElSUQkzNgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0NQVV9IOFMKKyNkZWZpbmUgXzhJUlEJNzIKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChDT05GSUdfSDgzMDBfVElNRVI4X0NIMikKKyNpZmRlZiBDT05GSUdfQ1BVX0g4MzAwSAorI2RlZmluZSBfOEJBU0UJXzhUQ1IyCisjZGVmaW5lIF84SVJRCTQwCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF84QkFTRQorI2Vycm9yIFVua25vd24gdGltZXIgY2hhbm5lbC4KKyNlbmRpZgorCisjZGVmaW5lIF84VENSCTAKKyNkZWZpbmUgXzhUQ1NSCTIKKyNkZWZpbmUgVENPUkEJNAorI2RlZmluZSBUQ09SQgk2CisjZGVmaW5lIF84VENOVAk4CisKKyNkZWZpbmUgQ01JRUEJMHg0MAorI2RlZmluZSBDQ0xSX0NNQSAweDA4CisjZGVmaW5lIENLUzIJMHgwNAorCisvKgorICogdGltZXJfaW50ZXJydXB0KCkgbmVlZHMgdG8ga2VlcCB1cCB0aGUgcmVhbC10aW1lIGNsb2NrLAorICogYXMgd2VsbCBhcyBjYWxsIHRoZSAiZG9fdGltZXIoKSIgcm91dGluZSBldmVyeSBjbG9ja3RpY2sKKyAqLworCitzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwloODMwMF90aW1lcl90aWNrKCk7CisJY3RybF9iY2xyKENNRkEsIF84QkFTRSArIF84VENTUik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0aW1lcjhfaXJxID0geworCS5uYW1lCQk9ICJ0aW1lci04IiwKKwkuaGFuZGxlcgk9IHRpbWVyX2ludGVycnVwdCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBkaXZpZGVfcmF0ZVtdID0gezgsIDY0LCA4MTkyfTsKKwordm9pZCBfX2luaXQgaDgzMDBfdGltZXJfc2V0dXAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2OworCXVuc2lnbmVkIGludCBjbnQ7CisKKwljYWxjX3BhcmFtKGNudCwgZGl2LCBkaXZpZGVfcmF0ZSwgMHgxMDAwMCk7CisJZGl2Kys7CisKKwlzZXR1cF9pcnEoXzhJUlEsICZ0aW1lcjhfaXJxKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9IOFMpCisJLyogVGltZXIgbW9kdWxlIGVuYWJsZSAqLworCWN0cmxfYmNscigwLCBNU1RQQ1JMKQorI2VuZGlmCisKKwkvKiBpbml0YWxpemUgdGltZXIgKi8KKwljdHJsX291dHcoY250LCBfOEJBU0UgKyBUQ09SQSk7CisJY3RybF9vdXR3KDB4MDAwMCwgXzhCQVNFICsgXzhUQ1NSKTsKKwljdHJsX291dHcoKENNSUVBfENDTFJfQ01BfENLUzIpIDw8IDggfCBkaXYsCisJCSAgXzhCQVNFICsgXzhUQ1IpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdHB1LmMgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90cHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjdmNDUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdHB1LmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiAgbGludXgvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdHB1LmMKKyAqCisgKiAgWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvcmdlLmpwPgorICoKKyAqICBUUFUgVGltZXIgSGFuZGxlcgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKworI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9yZWdzMjY3eC5oPgorCisvKiBUUFUgKi8KKyNpZiBDT05GSUdfSDgzMDBfVFBVX0NIID09IDAKKyNkZWZpbmUgVFBVQkFTRQkweGZmZmZkMAorI2RlZmluZSBUUFVJUlEJNDAKKyNlbGlmIENPTkZJR19IODMwMF9UUFVfQ0ggPT0gMQorI2RlZmluZSBUUFVCQVNFCTB4ZmZmZmUwCisjZGVmaW5lIFRQVUlSUQk0OAorI2VsaWYgQ09ORklHX0g4MzAwX1RQVV9DSCA9PSAyCisjZGVmaW5lIFRQVUJBU0UJMHhmZmZmZjAKKyNkZWZpbmUgVFBVSVJRCTUyCisjZWxpZiBDT05GSUdfSDgzMDBfVFBVX0NIID09IDMKKyNkZWZpbmUgVFBVQkFTRQkweGZmZmU4MAorI2RlZmluZSBUUFVJUlEJNTYKKyNlbGlmIENPTkZJR19IODMwMF9UUFVfQ0ggPT0gNAorI2RlZmluZSBUUFVCQVNFCTB4ZmZmZTkwCisjZGVmaW5lIFRQVUlSUQk2NAorI2Vsc2UKKyNlcnJvciBVbmtub3duIHRpbWVyIGNoYW5uZWwuCisjZW5kaWYKKworI2RlZmluZSBfVENSCTAKKyNkZWZpbmUgX1RNRFIJMQorI2RlZmluZSBfVElPUgkyCisjZGVmaW5lIF9USUVSCTQKKyNkZWZpbmUgX1RTUgk1CisjZGVmaW5lIF9UQ05UCTYKKyNkZWZpbmUgX0dSQQk4CisjZGVmaW5lIF9HUkIJMTAKKworI2RlZmluZSBDQ0xSMAkweDIwCisKK3N0YXRpYyBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWg4MzAwX3RpbWVyX3RpY2soKTsKKwljdHJsX2JjbHIoMCwgVFBVQkFTRSArIF9UU1IpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdHB1X2lycSA9IHsKKwkubmFtZQkJPSAidHB1IiwKKwkuaGFuZGxlcgk9IHRpbWVyX2ludGVycnVwdCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKK307CisKK2NvbnN0IHN0YXRpYyBpbnQgX19pbml0ZGF0YSBkaXZpZGVfcmF0ZVtdID0geworI2lmIENPTkZJR19IODMwMF9UUFVfQ0ggPT0gMAorCTEsNCwxNiw2NCwwLDAsMCwwLAorI2VsaWYgKENPTkZJR19IODMwMF9UUFVfQ0ggPT0gMSkgfHwgKENPTkZJR19IODMwMF9UUFVfQ0ggPT0gNSkKKwkxLDQsMTYsNjQsMCwwLDI1NiwwLAorI2VsaWYgKENPTkZJR19IODMwMF9UUFVfQ0ggPT0gMikgfHwgKENPTkZJR19IODMwMF9UUFVfQ0ggPT0gNCkKKwkxLDQsMTYsNjQsMCwwLDAsMTAyNCwKKyNlbGlmIENPTkZJR19IODMwMF9UUFVfQ0ggPT0gMworCTEsNCwxNiw2NCwwLDEwMjQsMjU2LDQwOTYsCisjZW5kaWYKK307CisKK3ZvaWQgX19pbml0IGg4MzAwX3RpbWVyX3NldHVwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGNudDsKKwl1bnNpZ25lZCBpbnQgZGl2OworCisJY2FsY19wYXJhbShjbnQsIGRpdiwgZGl2aWRlX3JhdGUsIDB4MTAwMDApOworCisJc2V0dXBfaXJxKFRQVUlSUSwgJnRwdV9pcnEpOworCisJLyogVFBVIG1vZHVsZSBlbmFibGVkICovCisJY3RybF9iY2xyKDMsIE1TVFBDUkgpOworCisJY3RybF9vdXRiKDAsIFRTVFIpOworCWN0cmxfb3V0YihDQ0xSMCB8IGRpdiwgVFBVQkFTRSArIF9UQ1IpOworCWN0cmxfb3V0YigwLCBUUFVCQVNFICsgX1RNRFIpOworCWN0cmxfb3V0dygwLCBUUFVCQVNFICsgX1RJT1IpOworCWN0cmxfb3V0YigweDAxLCBUUFVCQVNFICsgX1RJRVIpOworCWN0cmxfb3V0dyhjbnQsIFRQVUJBU0UgKyBfR1JBKTsKKwljdHJsX2JzZXQoQ09ORklHX0g4MzAwX1RQVV9DSCwgVFNUUik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9oODMwMC9rZXJuZWwvdHJhcHMuYwppbmRleCBmOGY3ZDdlYS4uM2MwYjY2YiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90cmFwcy5jCkBAIC0yMCwxMiArMjAsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRpZV9sb2NrKTsKIAogLyoKICAqIHRoaXMgbXVzdCBiZSBjYWxsZWQgdmVyeSBlYXJseSBhcyB0aGUga2VybmVsIG1pZ2h0CkBAIC05NCwxNiArOTYsMTkgQEAKIAlwcmludGsoIlxuXG4iKTsKIH0KIAotdm9pZCBkaWVfaWZfa2VybmVsIChjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpmcCwgaW50IG5yKQordm9pZCBkaWUoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqZnAsIHVuc2lnbmVkIGxvbmcgZXJyKQogewotCWV4dGVybiBpbnQgY29uc29sZV9sb2dsZXZlbDsKKwlzdGF0aWMgaW50IGRpZWNvdW50OwogCi0JaWYgKCEoZnAtPmNjciAmIFBTX1MpKQotCQlyZXR1cm47CisJb29wc19lbnRlcigpOwogCi0JY29uc29sZV9sb2dsZXZlbCA9IDE1OworCWNvbnNvbGVfdmVyYm9zZSgpOworCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKKwlyZXBvcnRfYnVnKGZwLT5wYywgZnApOworCXByaW50ayhLRVJOX0VNRVJHICIlczogJTA0bHggWyMlZF0gIiwgc3RyLCBlcnIgJiAweGZmZmYsICsrZGllY291bnQpOwogCWR1bXAoZnApOwogCisJc3Bpbl91bmxvY2tfaXJxKCZkaWVfbG9jayk7CiAJZG9fZXhpdChTSUdTRUdWKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9tbS9mYXVsdC5jIGIvYXJjaC9oODMwMC9tbS9mYXVsdC5jCmluZGV4IDI5ZTlhZjkuLjFkMDkyYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvbW0vZmF1bHQuYworKysgYi9hcmNoL2g4MzAwL21tL2ZhdWx0LmMKQEAgLTIwLDggKzIwLDYgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAotZXh0ZXJuIHZvaWQgZGllX2lmX2tlcm5lbChjaGFyICosIHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotCiAvKgogICogVGhpcyByb3V0aW5lIGhhbmRsZXMgcGFnZSBmYXVsdHMuICBJdCBkZXRlcm1pbmVzIHRoZSBwcm9ibGVtLCBhbmQKICAqIHRoZW4gcGFzc2VzIGl0IG9mZiB0byBvbmUgb2YgdGhlIGFwcHJvcHJpYXRlIHJvdXRpbmVzLgpAQCAtNTAsNyArNDgsOCBAQAogCX0gZWxzZQogCQlwcmludGsoS0VSTl9BTEVSVCAiVW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgYWNjZXNzIik7CiAJcHJpbnRrKCIgYXQgdmlydHVhbCBhZGRyZXNzICUwOGx4XG4iLGFkZHJlc3MpOwotCWRpZV9pZl9rZXJuZWwoIk9vcHMiLCByZWdzLCBlcnJvcl9jb2RlKTsKKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkKKwkJZGllKCJPb3BzIiwgcmVncywgZXJyb3JfY29kZSk7CiAJZG9fZXhpdChTSUdLSUxMKTsKIAogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvYWtpMzA2OG5ldC9NYWtlZmlsZSBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2FraTMwNjhuZXQvTWFrZWZpbGUKaW5kZXggYjAzYzMyOC4uYjdmZjc4MCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvYWtpMzA2OG5ldC9NYWtlZmlsZQorKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9ha2kzMDY4bmV0L01ha2VmaWxlCkBAIC0zLDQgKzMsMyBAQAogIwogCiBleHRyYS15IDo9IGNydDBfcmFtLm8KLW9iai15IDo9IHRpbWVyLm8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2FraTMwNjhuZXQvdGltZXIuYyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2FraTMwNjhuZXQvdGltZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdjZDg1ZC4uMDAwMDAwMAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9ha2kzMDY4bmV0L3RpbWVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2FraTMwNjhuZXQvdGltZXIuYwotICoKLSAqICBZb3NoaW5vcmkgU2F0byA8eXNhdG9AdXNlcnMuc291cmNlZm9nZS5qcD4KLSAqCi0gKiAgUGxhdGZvcm0gZGVwZW5kIFRpbWVyIEhhbmRsZXIKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vcmVnczMwNnguaD4KLQotI2RlZmluZSBDTUZBIDYKLQotI2RlZmluZSBDTUlFQSAweDQwCi0jZGVmaW5lIENDTFJfQ01BIDB4MDgKLSNkZWZpbmUgQ0xLX0RJVjgxOTIgMHgwMwotCi0jZGVmaW5lIEg4MzAwX1RJTUVSX0ZSRVEgQ09ORklHX0NQVV9DTE9DSyoxMDAwLzgxOTIgLyogVGltZXIgaW5wdXQgZnJlcS4gKi8KLQotdm9pZCBfX2luaXQgcGxhdGZvcm1fdGltZXJfc2V0dXAoaXJxcmV0dXJuX3QgKCp0aW1lcl9pbnQpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKLXsKLQkvKiBzZXR1cCA4Yml0IHRpbWVyIGNoMiAqLwotCWN0cmxfb3V0YihIODMwMF9USU1FUl9GUkVRIC8gSFosIFRDT1JBMik7ICAgICAgLyogc2V0IGludGVydmFsICovCi0JY3RybF9vdXRiKDB4MDAsIF84VENTUjIpOyAgICAgICAgICAgICAgICAgICAgICAvKiBubyBvdXRwdXQgKi8KLQlyZXF1ZXN0X2lycSg0MCwgdGltZXJfaW50LCAwLCAidGltZXIiLCAwKTsKLQljdHJsX291dGIoQ01JRUF8Q0NMUl9DTUF8Q0xLX0RJVjgxOTIsIF84VENSMik7IC8qIHN0YXJ0IGNvdW50ICovCi19Ci0KLXZvaWQgcGxhdGZvcm1fdGltZXJfZW9pKHZvaWQpCi17Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopXzhUQ1NSMiAmPSB+KDEgPDwgQ01GQSk7Ci19Ci0KLXZvaWQgcGxhdGZvcm1fZ2V0dG9kKGludCAqeWVhciwgaW50ICptb24sIGludCAqZGF5LCBpbnQgKmhvdXIsCi0JCSBpbnQgKm1pbiwgaW50ICpzZWMpCi17Ci0JKnllYXIgPSAqbW9uID0gKmRheSA9ICpob3VyID0gKm1pbiA9ICpzZWMgPSAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvZ2VuZXJpYy9NYWtlZmlsZSBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2dlbmVyaWMvTWFrZWZpbGUKaW5kZXggMzJiOTY0YS4uMmIxMmExNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvZ2VuZXJpYy9NYWtlZmlsZQorKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL01ha2VmaWxlCkBAIC0zLDQgKzMsMyBAQAogIwogCiBleHRyYS15IDo9ICBjcnQwXyQoTU9ERUwpLm8KLW9iai15IDo9IHRpbWVyLm8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2dlbmVyaWMvdGltZXIuYyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2dlbmVyaWMvdGltZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY1Y2VmZTAuLjAwMDAwMDAKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvZ2VuZXJpYy90aW1lci5jCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL3RpbWVyLmMKLSAqCi0gKiAgWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvcmdlLmpwPgotICoKLSAqICBQbGF0Zm9ybSBkZXBlbmQgVGltZXIgSGFuZGxlcgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KLQotI2lmIGRlZmluZWQoQ09ORklHX0g4MzAwNykgfHwgZGVmaW5lZChDT05GSUdfSDgzMDY4KQotI2luY2x1ZGUgPGFzbS9yZWdzMzA2eC5oPgotI2RlZmluZSBDTUZBIDYKLQotI2RlZmluZSBDTUlFQSAweDQwCi0jZGVmaW5lIENDTFJfQ01BIDB4MDgKLSNkZWZpbmUgQ0xLX0RJVjgxOTIgMHgwMwotCi0jZGVmaW5lIEg4MzAwX1RJTUVSX0ZSRVEgQ09ORklHX0NQVV9DTE9DSyoxMDAwLzgxOTIgLyogVGltZXIgaW5wdXQgZnJlcS4gKi8KLQotdm9pZCBfX2luaXQgcGxhdGZvcm1fdGltZXJfc2V0dXAoaXJxcmV0dXJuX3QgKCp0aW1lcl9pbnQpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKLXsKLQkvKiBzZXR1cCA4Yml0IHRpbWVyIGNoMiAqLwotCWN0cmxfb3V0YihIODMwMF9USU1FUl9GUkVRIC8gSFosIFRDT1JBMik7ICAgICAgLyogc2V0IGludGVydmFsICovCi0JY3RybF9vdXRiKDB4MDAsIF84VENTUjIpOyAgICAgICAgICAgICAgICAgICAgICAvKiBubyBvdXRwdXQgKi8KLQlyZXF1ZXN0X2lycSg0MCwgdGltZXJfaW50LCAwLCAidGltZXIiLCAwKTsKLQljdHJsX291dGIoQ01JRUF8Q0NMUl9DTUF8Q0xLX0RJVjgxOTIsIF84VENSMik7IC8qIHN0YXJ0IGNvdW50ICovCi19Ci0KLXZvaWQgcGxhdGZvcm1fdGltZXJfZW9pKHZvaWQpCi17Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopXzhUQ1NSMiAmPSB+KDEgPDwgQ01GQSk7Ci19Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0g4MzAwMikgfHwgZGVmaW5lZChDT05GSUdfSDgzMDQ4KQotLyogRklYTUUhICovCi0jZGVmaW5lIFRTVFIgMHgwMGZmZmY2MAotI2RlZmluZSBUU05DIDB4MDBmZmZmNjEKLSNkZWZpbmUgVE1EUiAweDAwZmZmZjYyCi0jZGVmaW5lIFRGQ1IgMHgwMGZmZmY2MwotI2RlZmluZSBUT0VSIDB4MDBmZmZmOTAKLSNkZWZpbmUgVE9DUiAweDAwZmZmZjkxCi0vKiBJVFUwICovCi0jZGVmaW5lIFRDUiAgMHgwMGZmZmY2NAotI2RlZmluZSBUSU9SIDB4MDBmZmZmNjUKLSNkZWZpbmUgVElFUiAweDAwZmZmZjY2Ci0jZGVmaW5lIFRTUiAgMHgwMGZmZmY2NwotI2RlZmluZSBUQ05UIDB4MDBmZmZmNjgKLSNkZWZpbmUgR1JBICAweDAwZmZmZjZhCi0jZGVmaW5lIEdSQiAgMHgwMGZmZmY2YwotCi0jZGVmaW5lIENDTFJfQ01HUkEgMHgyMAotI2RlZmluZSBDTEtfRElWOCAweDAzCi0KLSNkZWZpbmUgSDgzMDBfVElNRVJfRlJFUSBDT05GSUdfQ1BVX0NMT0NLKjEwMDAvOCAvKiBUaW1lciBpbnB1dCBmcmVxLiAqLwotCi12b2lkIF9faW5pdCBwbGF0Zm9ybV90aW1lcl9zZXR1cChpcnFyZXR1cm5fdCAoKnRpbWVyX2ludCkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKQotewotCSoodW5zaWduZWQgc2hvcnQgKilHUkE9IEg4MzAwX1RJTUVSX0ZSRVEgLyBIWjsgIC8qIHNldCBpbnRlcnZhbCAqLwotCSoodW5zaWduZWQgc2hvcnQgKilUQ05UPTA7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNsZWFyIGNvdW50ZXIgKi8KLQljdHJsX291dGIoMHg4MHxDQ0xSX0NNR1JBfENMS19ESVY4LCBUQ1IpOyAgICAgICAvKiBzZXQgSVRVMCBjbG9jayAqLwotCWN0cmxfb3V0YigweDg4LCBUSU9SKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIG91dHB1dCAqLwotCXJlcXVlc3RfaXJxKDI2LCB0aW1lcl9pbnQsIDAsICJ0aW1lciIsIDApOwotCWN0cmxfb3V0YigweGY5LCBUSUVSKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbXBhcmUgbWF0Y2ggR1JBIGludGVycnVwdCAqLwotCWN0cmxfb3V0YihjdHJsX2luYihUU05DKSAmIH4weDAxLCBUU05DKTsgICAgICAgIC8qIElUVTAgYXN5bmMgKi8KLQljdHJsX291dGIoY3RybF9pbmIoVE1EUikgJiB+MHgwMSwgVE1EUik7ICAgICAgICAvKiBJVFUwIG5vcm1hbCBtb2RlICovCi0JY3RybF9vdXRiKGN0cmxfaW5iKFRTVFIpIHwgMHgwMSwgVFNUUik7ICAgICAgICAgLyogSVRVMCBTdGFydCAqLwotCXJldHVybiAwOwotfQotCi12b2lkIHBsYXRmb3JtX3RpbWVyX2VvaSh2b2lkKQotewotCWN0cmxfb3V0YihjdHJsX2luYihUU1IpICYgfjB4MDEsVFNSKTsKLX0KLSNlbmRpZgotCi12b2lkIHBsYXRmb3JtX2dldHRvZChpbnQgKnllYXIsIGludCAqbW9uLCBpbnQgKmRheSwgaW50ICpob3VyLAotCQkgaW50ICptaW4sIGludCAqc2VjKQotewotCSp5ZWFyID0gKm1vbiA9ICpkYXkgPSAqaG91ciA9ICptaW4gPSAqc2VjID0gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2g4bWF4L01ha2VmaWxlIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvTWFrZWZpbGUKaW5kZXggYjAzYzMyOC4uYjdmZjc4MCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvTWFrZWZpbGUKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvTWFrZWZpbGUKQEAgLTMsNCArMywzIEBACiAjCiAKIGV4dHJhLXkgOj0gY3J0MF9yYW0ubwotb2JqLXkgOj0gdGltZXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvdGltZXIuYyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2g4bWF4L3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1YTU3NGEuLjAwMDAwMDAKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvdGltZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvaDhtYXgvdGltZXIuYwotICoKLSAqICBZb3NoaW5vcmkgU2F0byA8eXNhdG9AdXNlcnMuc291cmNlZm9nZS5qcD4KLSAqCi0gKiAgUGxhdGZvcm0gZGVwZW5kIFRpbWVyIEhhbmRsZXIKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vcmVnczMwNnguaD4KLQotI2RlZmluZSBDTUZBIDYKLQotI2RlZmluZSBDTUlFQSAweDQwCi0jZGVmaW5lIENDTFJfQ01BIDB4MDgKLSNkZWZpbmUgQ0xLX0RJVjgxOTIgMHgwMwotCi0jZGVmaW5lIEg4MzAwX1RJTUVSX0ZSRVEgQ09ORklHX0NQVV9DTE9DSyoxMDAwLzgxOTIgLyogVGltZXIgaW5wdXQgZnJlcS4gKi8KLQotdm9pZCBfX2luaXQgcGxhdGZvcm1fdGltZXJfc2V0dXAoaXJxcmV0dXJuX3QgKCp0aW1lcl9pbnQpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKLXsKLQkvKiBzZXR1cCA4Yml0IHRpbWVyIGNoMiAqLwotCWN0cmxfb3V0YihIODMwMF9USU1FUl9GUkVRIC8gSFosIFRDT1JBMik7ICAgICAgLyogc2V0IGludGVydmFsICovCi0JY3RybF9vdXRiKDB4MDAsIF84VENTUjIpOyAgICAgICAgICAgICAgICAgICAgICAvKiBubyBvdXRwdXQgKi8KLQlyZXF1ZXN0X2lycSg0MCwgdGltZXJfaW50LCAwLCAidGltZXIiLCAwKTsKLQljdHJsX291dGIoQ01JRUF8Q0NMUl9DTUF8Q0xLX0RJVjgxOTIsIF84VENSMik7IC8qIHN0YXJ0IGNvdW50ICovCi19Ci0KLXZvaWQgcGxhdGZvcm1fdGltZXJfZW9pKHZvaWQpCi17Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopXzhUQ1NSMiAmPSB+KDEgPDwgQ01GQSk7Ci19Ci0KLXZvaWQgcGxhdGZvcm1fZ2V0dG9kKGludCAqeWVhciwgaW50ICptb24sIGludCAqZGF5LCBpbnQgKmhvdXIsCi0JCSBpbnQgKm1pbiwgaW50ICpzZWMpCi17Ci0JKnllYXIgPSAqbW9uID0gKmRheSA9ICpob3VyID0gKm1pbiA9ICpzZWMgPSAwOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9lZG9zazI2NzQvTWFrZWZpbGUgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9lZG9zazI2NzQvTWFrZWZpbGUKaW5kZXggZjc2MzY1NC4uOGUzNDk3MiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L01ha2VmaWxlCisrKyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2Vkb3NrMjY3NC9NYWtlZmlsZQpAQCAtMyw0ICszLDMgQEAKICMKIAogZXh0cmEteSA6PSBjcnQwXyQoTU9ERUwpLm8KLW9iai15IDo9IHRpbWVyLm8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2Vkb3NrMjY3NC90aW1lci5jIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYjE0MjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L3RpbWVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2Vkb3NrMjY3NC90aW1lci5jCi0gKgotICogIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vycy5zb3VyY2Vmb3JnZS5qcD4KLSAqCi0gKiAgUGxhdGZvcm0gZGVwZW5kIFRpbWVyIEhhbmRsZXIKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vcmVnczI2N3guaD4KLQotI2RlZmluZSBDTUZBIDYKLQotI2RlZmluZSBDTUlFQSAweDQwCi0jZGVmaW5lIENDTFJfQ01BIDB4MDgKLSNkZWZpbmUgQ0xLX0RJVjgxOTIgMHgwMwotCi0jZGVmaW5lIEg4MzAwX1RJTUVSX0ZSRVEgQ09ORklHX0NQVV9DTE9DSyoxMDAwLzgxOTIgLyogVGltZXIgaW5wdXQgZnJlcS4gKi8KLQotdm9pZCBfX2luaXQgcGxhdGZvcm1fdGltZXJfc2V0dXAoaXJxcmV0dXJuX3QgKCp0aW1lcl9pbnQpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKLXsKLQkvKiA4Yml0IHRpbWVyIG1vZHVsZSBlbmFibGVkICovCi0JY3RybF9vdXRiKGN0cmxfaW5iKE1TVFBDUkwpICYgfjB4MDEsIE1TVFBDUkwpOwotCS8qIHNldHVwIDhiaXQgdGltZXIgY2gxICovCi0JY3RybF9vdXRiKEg4MzAwX1RJTUVSX0ZSRVEgLyBIWiwgXzhUQ09SQTEpOyAgICAgIC8qIHNldCBpbnRlcnZhbCAqLwotCWN0cmxfb3V0YigweDAwLCBfOFRDU1IxKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBvdXRwdXQgKi8KLQlyZXF1ZXN0X2lycSg3NiwgdGltZXJfaW50LCAwLCAidGltZXIiICwwKTsKLQljdHJsX291dGIoQ01JRUF8Q0NMUl9DTUF8Q0xLX0RJVjgxOTIsIF84VENSMSk7ICAgLyogc3RhcnQgY291bnQgKi8KLX0KLQotdm9pZCBwbGF0Zm9ybV90aW1lcl9lb2kodm9pZCkKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilfOFRDU1IxICY9IH4oMSA8PCBDTUZBKTsKLX0KLQotdm9pZCBwbGF0Zm9ybV9nZXR0b2QoaW50ICp5ZWFyLCBpbnQgKm1vbiwgaW50ICpkYXksIGludCAqaG91ciwKLQkJIGludCAqbWluLCBpbnQgKnNlYykKLXsKLS8qIEZJWE1FISBub3QgUlRDIHN1cHBvcnQgKi8KLQkqeWVhciA9ICptb24gPSAqZGF5ID0gKmhvdXIgPSAqbWluID0gKnNlYyA9IDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL01ha2VmaWxlIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy9NYWtlZmlsZQppbmRleCAwNTVkNTNhLi40NGI0Njg1IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL01ha2VmaWxlCisrKyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2dlbmVyaWMvTWFrZWZpbGUKQEAgLTMsNCArMywzIEBACiAjCiAKIGV4dHJhLXkgPSAgY3J0MF8kKE1PREVMKS5vCi1vYmoteSA6PSB0aW1lci5vCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL3RpbWVyLmMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMjExYzYuLjAwMDAwMDAKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy90aW1lci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL3RpbWVyLmMKLSAqCi0gKiAgWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvcmdlLmpwPgotICoKLSAqICBQbGF0Zm9ybSBkZXBlbmQgVGltZXIgSGFuZGxlcgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KLQotI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9yZWdzMjY3eC5oPgotCi0jZGVmaW5lIENNRkEgNgotCi0jZGVmaW5lIENNSUVBIDB4NDAKLSNkZWZpbmUgQ0NMUl9DTUEgMHgwOAotI2RlZmluZSBDTEtfRElWODE5MiAweDAzCi0KLSNkZWZpbmUgSDgzMDBfVElNRVJfRlJFUSBDT05GSUdfQ1BVX0NMT0NLKjEwMDAvODE5MiAvKiBUaW1lciBpbnB1dCBmcmVxLiAqLwotCi12b2lkIF9faW5pdCBwbGF0Zm9ybV90aW1lcl9zZXR1cChpcnFyZXR1cm5fdCAoKnRpbWVyX2ludCkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKQotewotCS8qIDhiaXQgdGltZXIgbW9kdWxlIGVuYWJsZWQgKi8KLQljdHJsX291dGIoY3RybF9pbmIoTVNUUENSTCkgJiB+MHgwMSwgTVNUUENSTCk7Ci0JLyogc2V0dXAgOGJpdCB0aW1lciBjaDEgKi8KLQljdHJsX291dGIoSDgzMDBfVElNRVJfRlJFUSAvIEhaLCBfOFRDT1JBMSk7ICAgICAgLyogc2V0IGludGVydmFsICovCi0JY3RybF9vdXRiKDB4MDAsIF84VENTUjEpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIG91dHB1dCAqLwotCXJlcXVlc3RfaXJxKDc2LCB0aW1lcl9pbnQsIDAsICJ0aW1lciIgLDApOwotCWN0cmxfb3V0YihDTUlFQXxDQ0xSX0NNQXxDTEtfRElWODE5MiwgXzhUQ1IxKTsgICAvKiBzdGFydCBjb3VudCAqLwotfQotCi12b2lkIHBsYXRmb3JtX3RpbWVyX2VvaSh2b2lkKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKV84VENTUjEgJj0gfigxIDw8IENNRkEpOwotfQotCi12b2lkIHBsYXRmb3JtX2dldHRvZChpbnQgKnllYXIsIGludCAqbW9uLCBpbnQgKmRheSwgaW50ICpob3VyLAotCQkgaW50ICptaW4sIGludCAqc2VjKQotewotCSp5ZWFyID0gKm1vbiA9ICpkYXkgPSAqaG91ciA9ICptaW4gPSAqc2VjID0gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggNDhlNDk2Zi4uOTEyYzU3ZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTcsNiArNyw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIAogY29uZmlnIElBNjQKQEAgLTYwLDE0ICs2Miw2IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCi1jb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCi0JYm9vbAotCWRlZmF1bHQgbgotCi1jb25maWcgQVJDSF9IQVNfSUxPRzJfVTY0Ci0JYm9vbAotCWRlZmF1bHQgbgotCiBjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEUKIAlib29sCiAJZGVwZW5kcyBvbiBIVUdFVExCX1BBR0UKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMgYi9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCmluZGV4IDQ5NTZiZTQuLmQ5OGYwZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwpAQCAtMjA3MCwxNCArMjA3MCwxMyBAQAogCWlmICghaWE2NF9wbGF0Zm9ybV9pcygiaHB6eDEiKSAmJiAhaWE2NF9wbGF0Zm9ybV9pcygiaHB6eDFfc3dpb3RsYiIpKQogCQlyZXR1cm4gMDsKIAotI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfR0VORVJJQykgJiYgZGVmaW5lZChDT05GSUdfQ1JBU0hfRFVNUCkgJiYgXAotICAgICAgICBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQorI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfR0VORVJJQykKIAkvKiBJZiB3ZSBhcmUgYm9vdGluZyBhIGtkdW1wIGtlcm5lbCwgdGhlIHNiYV9pb21tdSB3aWxsCiAJICogY2F1c2UgZGV2aWNlcyB0aGF0IHdlcmUgbm90IHNodXRkb3duIHByb3Blcmx5IHRvIE1DQQogCSAqIGFzIHNvb24gYXMgdGhleSBhcmUgdHVybmVkIGJhY2sgb24uICBPdXIgb25seSBvcHRpb24gZm9yCiAJICogYSBzdWNjZXNzZnVsIGtkdW1wIGtlcm5lbCBib290IGlzIHRvIHVzZSB0aGUgc3dpb3RsYi4KIAkgKi8KLQlpZiAoZWxmY29yZWhkcl9hZGRyIDwgRUxGQ09SRV9BRERSX01BWCkgeworCWlmIChpc19rZHVtcF9rZXJuZWwoKSkgewogCQlpZiAoc3dpb3RsYl9sYXRlX2luaXRfd2l0aF9kZWZhdWx0X3NpemUoNjQgKiAoMTw8MjApKSAhPSAwKQogCQkJcGFuaWMoIlVuYWJsZSB0byBpbml0aWFsaXplIHNvZnR3YXJlIEkvTyBUTEI6IgogCQkJCSAgIiBUcnkgbWFjaHZlYz1kaWcgYm9vdCBvcHRpb24iKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKaW5kZXggNGYwYzMwYy4uZjkyYmRhYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKKysrIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgZWxmX21hcAkJCQllbGYzMl9tYXAKIAogI3VuZGVmIFNFVF9QRVJTT05BTElUWQotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQllbGYzMl9zZXRfcGVyc29uYWxpdHkoKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCWVsZjMyX3NldF9wZXJzb25hbGl0eSgpCiAKICNkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LCBoYXZlX3B0X2dudV9zdGFjaykJKCEoaGF2ZV9wdF9nbnVfc3RhY2spKQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMKaW5kZXggZmY4OGM0OC4uNTM1MDViYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJfZW50cnkuUwpAQCAtMjUxLDggKzI1MSw4IEBACiAJZGF0YTggY29tcGF0X3N5c19zZXRybGltaXQJICAvKiA3NSAqLwogCWRhdGE4IGNvbXBhdF9zeXNfb2xkX2dldHJsaW1pdAogCWRhdGE4IGNvbXBhdF9zeXNfZ2V0cnVzYWdlCi0JZGF0YTggc3lzMzJfZ2V0dGltZW9mZGF5Ci0JZGF0YTggc3lzMzJfc2V0dGltZW9mZGF5CisJZGF0YTggY29tcGF0X3N5c19nZXR0aW1lb2ZkYXkKKwlkYXRhOCBjb21wYXRfc3lzX3NldHRpbWVvZmRheQogCWRhdGE4IHN5czMyX2dldGdyb3VwczE2CSAgLyogODAgKi8KIAlkYXRhOCBzeXMzMl9zZXRncm91cHMxNgogCWRhdGE4IHN5czMyX29sZF9zZWxlY3QKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2lhMzJwcml2LmggYi9hcmNoL2lhNjQvaWEzMi9pYTMycHJpdi5oCmluZGV4IGRkMGM1MzYuLjBmMTUzNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pYTMyL2lhMzJwcml2LmgKKysrIGIvYXJjaC9pYTY0L2lhMzIvaWEzMnByaXYuaApAQCAtMzMyLDggKzMzMiw4IEBACiAjZGVmaW5lIEVMRl9QTEFURk9STQlOVUxMCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jIGRlZmluZSBTRVRfUEVSU09OQUxJVFkoRVgsSUJDUzIpCQkJCVwKLQkoY3VycmVudC0+cGVyc29uYWxpdHkgPSAoSUJDUzIpID8gUEVSX1NWUjQgOiBQRVJfTElOVVgpCisjIGRlZmluZSBTRVRfUEVSU09OQUxJVFkoRVgpCQkJCVwKKwkoY3VycmVudC0+cGVyc29uYWxpdHkgPSBQRVJfTElOVVgpCiAjZW5kaWYKIAogI2RlZmluZSBJQTMyX0VGTEFHCTB4MjAwCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jIGIvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYwppbmRleCBiZjE5NmNiLi5mNDQzMGJiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jCisrKyBiL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKQEAgLTExOCw0MSArMTE4LDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWludCBjcF9jb21wYXRfc3RhdChzdHJ1Y3Qga3N0YXQgKnN0YXQsIHN0cnVjdCBjb21wYXRfc3RhdCBfX3VzZXIgKnVidWYpCi17Ci0JY29tcGF0X2lub190IGlubzsKLQlpbnQgZXJyOwotCi0JaWYgKCh1NjQpIHN0YXQtPnNpemUgPiBNQVhfTk9OX0xGUyB8fAotCSAgICAhb2xkX3ZhbGlkX2RldihzdGF0LT5kZXYpIHx8Ci0JICAgICFvbGRfdmFsaWRfZGV2KHN0YXQtPnJkZXYpKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWlubyA9IHN0YXQtPmlubzsKLQlpZiAoc2l6ZW9mKGlubykgPCBzaXplb2Yoc3RhdC0+aW5vKSAmJiBpbm8gIT0gc3RhdC0+aW5vKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWlmIChjbGVhcl91c2VyKHVidWYsIHNpemVvZigqdWJ1ZikpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWVyciAgPSBfX3B1dF91c2VyKG9sZF9lbmNvZGVfZGV2KHN0YXQtPmRldiksICZ1YnVmLT5zdF9kZXYpOwotCWVyciB8PSBfX3B1dF91c2VyKGlubywgJnVidWYtPnN0X2lubyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+bW9kZSwgJnVidWYtPnN0X21vZGUpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm5saW5rLCAmdWJ1Zi0+c3RfbmxpbmspOwotCWVyciB8PSBfX3B1dF91c2VyKGhpZ2gybG93dWlkKHN0YXQtPnVpZCksICZ1YnVmLT5zdF91aWQpOwotCWVyciB8PSBfX3B1dF91c2VyKGhpZ2gybG93Z2lkKHN0YXQtPmdpZCksICZ1YnVmLT5zdF9naWQpOwotCWVyciB8PSBfX3B1dF91c2VyKG9sZF9lbmNvZGVfZGV2KHN0YXQtPnJkZXYpLCAmdWJ1Zi0+c3RfcmRldik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+c2l6ZSwgJnVidWYtPnN0X3NpemUpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmF0aW1lLnR2X3NlYywgJnVidWYtPnN0X2F0aW1lKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5hdGltZS50dl9uc2VjLCAmdWJ1Zi0+c3RfYXRpbWVfbnNlYyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfbXRpbWUpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm10aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9tdGltZV9uc2VjKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5jdGltZS50dl9zZWMsICZ1YnVmLT5zdF9jdGltZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+Y3RpbWUudHZfbnNlYywgJnVidWYtPnN0X2N0aW1lX25zZWMpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmJsa3NpemUsICZ1YnVmLT5zdF9ibGtzaXplKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5ibG9ja3MsICZ1YnVmLT5zdF9ibG9ja3MpOwotCXJldHVybiBlcnI7Ci19CiAKICNpZiBQQUdFX1NISUZUID4gSUEzMl9QQUdFX1NISUZUCiAKQEAgLTExNDgsNjggKzExMTMsMTIgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW5saW5lIGxvbmcKLWdldF90djMyIChzdHJ1Y3QgdGltZXZhbCAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKLXsKLQlyZXR1cm4gKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGksIHNpemVvZigqaSkpIHx8Ci0JCShfX2dldF91c2VyKG8tPnR2X3NlYywgJmktPnR2X3NlYykgfCBfX2dldF91c2VyKG8tPnR2X3VzZWMsICZpLT50dl91c2VjKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcKLXB1dF90djMyIChzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICpvLCBzdHJ1Y3QgdGltZXZhbCAqaSkKLXsKLQlyZXR1cm4gKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBvLCBzaXplb2YoKm8pKSB8fAotCQkoX19wdXRfdXNlcihpLT50dl9zZWMsICZvLT50dl9zZWMpIHwgX19wdXRfdXNlcihpLT50dl91c2VjLCAmby0+dHZfdXNlYykpKTsKLX0KLQogYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nCiBzeXMzMl9hbGFybSAodW5zaWduZWQgaW50IHNlY29uZHMpCiB7CiAJcmV0dXJuIGFsYXJtX3NldGl0aW1lcihzZWNvbmRzKTsKIH0KIAotLyogVHJhbnNsYXRpb25zIGR1ZSB0byB0aW1lX3Qgc2l6ZSBkaWZmZXJlbmNlcy4gIFdoaWNoIGFmZmVjdHMgYWxsCi0gICBzb3J0cyBvZiB0aGluZ3MsIGxpa2UgdGltZXZhbCBhbmQgaXRpbWVydmFsLiAgKi8KLQotZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBzeXNfdHo7Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfZ2V0dGltZW9mZGF5IChzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0JaWYgKHR2KSB7Ci0JCXN0cnVjdCB0aW1ldmFsIGt0djsKLQkJZG9fZ2V0dGltZW9mZGF5KCZrdHYpOwotCQlpZiAocHV0X3R2MzIodHYsICZrdHYpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmICh0eikgewotCQlpZiAoY29weV90b191c2VyKHR6LCAmc3lzX3R6LCBzaXplb2Yoc3lzX3R6KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZwotc3lzMzJfc2V0dGltZW9mZGF5IChzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0Jc3RydWN0IHRpbWV2YWwga3R2OwotCXN0cnVjdCB0aW1lc3BlYyBrdHM7Ci0Jc3RydWN0IHRpbWV6b25lIGt0ejsKLQotCWlmICh0dikgewotCQlpZiAoZ2V0X3R2MzIoJmt0diwgdHYpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWt0cy50dl9zZWMgPSBrdHYudHZfc2VjOwotCQlrdHMudHZfbnNlYyA9IGt0di50dl91c2VjICogMTAwMDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigma3R6LCB0eiwgc2l6ZW9mKGt0eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIGRvX3N5c19zZXR0aW1lb2ZkYXkodHYgPyAma3RzIDogTlVMTCwgdHogPyAma3R6IDogTlVMTCk7Ci19Ci0KIHN0cnVjdCBzZWxfYXJnX3N0cnVjdCB7CiAJdW5zaWduZWQgaW50IG47CiAJdW5zaWduZWQgaW50IGlucDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hLm91dC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2Eub3V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5M2RjZmIuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2Eub3V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jaWZuZGVmIF9BU01fSUE2NF9BX09VVF9ICi0jZGVmaW5lIF9BU01fSUE2NF9BX09VVF9ICi0KLS8qCi0gKiBObyBhLm91dCBmb3JtYXQgaGFzIGJlZW4gKG9yIHNob3VsZCBiZSkgZGVmaW5lZCBzbyB0aGlzIGZpbGUgaXMKLSAqIGp1c3QgYSBkdW1teSB0aGF0IGFsbG93cyB1cyB0byBnZXQgYmluZm10X2VsZiBjb21waWxlZC4gIEl0Ci0gKiBwcm9iYWJseSB3b3VsZCBiZSBiZXR0ZXIgdG8gY2xlYW4gdXAgYmluZm10X2VsZi5jIHNvIGl0IGRvZXMgbm90Ci0gKiBuZWNlc3NhcmlseSBkZXBlbmQgb24gdGhlcmUgYmVpbmcgYS5vdXQgc3VwcG9ydC4KLSAqCi0gKiBNb2RpZmllZCAxOTk4LTIwMDIKLSAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4sIEhld2xldHQtUGFja2FyZCBDby4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotc3RydWN0IGV4ZWMgewotCXVuc2lnbmVkIGxvbmcgYV9pbmZvOwotCXVuc2lnbmVkIGxvbmcgYV90ZXh0OwotCXVuc2lnbmVkIGxvbmcgYV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgYV9ic3M7Ci0JdW5zaWduZWQgbG9uZyBhX2VudHJ5OwotfTsKLQotI2RlZmluZSBOX1RYVEFERFIoeCkJMAotI2RlZmluZSBOX0RBVEFERFIoeCkJMAotI2RlZmluZSBOX0JTU0FERFIoeCkJMAotI2RlZmluZSBOX0RSU0laRSh4KQkwCi0jZGVmaW5lIE5fVFJTSVpFKHgpCTAKLSNkZWZpbmUgTl9TWU1TSVpFKHgpCTAKLSNkZWZpbmUgTl9UWFRPRkYoeCkJMAotCi0jZW5kaWYgLyogX0FTTV9JQTY0X0FfT1VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCAyYWNiNmI2Li44NmVkZGVlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0yMDIsNyArMjAyLDcgQEAKICAgIHJlbGV2YW50IHVudGlsIHdlIGhhdmUgcmVhbCBoYXJkd2FyZSB0byBwbGF5IHdpdGguLi4gKi8KICNkZWZpbmUgRUxGX1BMQVRGT1JNCU5VTEwKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQlzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAjZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCwgZXhlY3V0YWJsZV9zdGFjaykJCQkJCVwKIAkoKGV4ZWN1dGFibGVfc3RhY2shPUVYU1RBQ0tfRElTQUJMRV9YKSAmJiAoKGV4KS5lX2ZsYWdzICYgRUZfSUFfNjRfTElOVVhfRVhFQ1VUQUJMRV9TVEFDSykgIT0gMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAxZWZlNTEzLi44NWRiMTI0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTMyLDcgKzEzMiw3IEBACiAjZGVmaW5lIEdQRk5fSU9TQVBJQyAgICAgICAgKDRVTCA8PCA2MCkgLyogSU9TQVBJQyBiYXNlICovCiAjZGVmaW5lIEdQRk5fTEVHQUNZX0lPICAgICAgKDVVTCA8PCA2MCkgLyogTGVnYWN5IEkvTyBiYXNlICovCiAjZGVmaW5lIEdQRk5fR0ZXICAgICAgICAoNlVMIDw8IDYwKSAvKiBHdWVzdCBGaXJtd2FyZSAqLwotI2RlZmluZSBHUEZOX0hJR0hfTU1JTyAgICAgICg3VUwgPDwgNjApIC8qIEhpZ2ggTU1JTyByYW5nZSAqLworI2RlZmluZSBHUEZOX1BIWVNfTU1JTyAgICAgICg3VUwgPDwgNjApIC8qIERpcmVjdGVkIE1NSU8gUmFuZ2UgKi8KIAogI2RlZmluZSBHUEZOX0lPX01BU0sgICAgICAgICg3VUwgPDwgNjApIC8qIEd1ZXN0IHBmbiBpcyBJL08gdHlwZSAqLwogI2RlZmluZSBHUEZOX0lOVl9NQVNLICAgICAgICgxVUwgPDwgNjMpIC8qIEd1ZXN0IHBmbiBpcyBpbnZhbGlkICovCkBAIC00MTMsNiArNDEzLDEwIEBACiAJc3RydWN0IGt2bV9pb2FwaWMgKnZpb2FwaWM7CiAJc3RydWN0IGt2bV92bV9zdGF0IHN0YXQ7CiAJc3RydWN0IGt2bV9zYWxfZGF0YSByZHZfc2FsX2RhdGE7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFzc2lnbmVkX2Rldl9oZWFkOworCXN0cnVjdCBkbWFyX2RvbWFpbiAqaW50ZWxfaW9tbXVfZG9tYWluOworCXN0cnVjdCBobGlzdF9oZWFkIGlycV9hY2tfbm90aWZpZXJfbGlzdDsKIH07CiAKIHVuaW9uIGNwdWlkM190IHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zdGF0ZnMuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zdGF0ZnMuaAppbmRleCA4MTEwOTc5Li4xZTU4OTY2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3RhdGZzLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N0YXRmcy5oCkBAIC04LDU1ICs4LDEzIEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28KICAqLwogCi0jaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUwotIyBpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotdHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJZnNpZF90OwotI2VuZGlmCi0KIC8qCi0gKiBUaGlzIGlzIHVnbHkgLS0tIHdlJ3JlIGFscmVhZHkgNjQtYml0LCBzbyBqdXN0IGR1cGxpY2F0ZSB0aGUgZGVmaW5pdGlvbnMKKyAqIFdlIG5lZWQgY29tcGF0X3N0YXRmczY0IHRvIGJlIHBhY2tlZCwgYmVjYXVzZSB0aGUgaTM4NiBBQkkgd29uJ3QKKyAqIGFkZCBwYWRkaW5nIGF0IHRoZSBlbmQgdG8gYnJpbmcgaXQgdG8gYSBtdWx0aXBsZSBvZiA4IGJ5dGVzLCBidXQKKyAqIHRoZSBJQTY0IEFCSSB3aWxsLgogICovCi1zdHJ1Y3Qgc3RhdGZzIHsKLQlsb25nIGZfdHlwZTsKLQlsb25nIGZfYnNpemU7Ci0JbG9uZyBmX2Jsb2NrczsKLQlsb25nIGZfYmZyZWU7Ci0JbG9uZyBmX2JhdmFpbDsKLQlsb25nIGZfZmlsZXM7Ci0JbG9uZyBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JbG9uZyBmX25hbWVsZW47Ci0JbG9uZyBmX2Zyc2l6ZTsKLQlsb25nIGZfc3BhcmVbNV07Ci19OworI2RlZmluZSBBUkNIX1BBQ0tfQ09NUEFUX1NUQVRGUzY0IF9fYXR0cmlidXRlX18oKHBhY2tlZCxhbGlnbmVkKDQpKSkKIAotCi1zdHJ1Y3Qgc3RhdGZzNjQgewotCWxvbmcgZl90eXBlOwotCWxvbmcgZl9ic2l6ZTsKLQlsb25nIGZfYmxvY2tzOwotCWxvbmcgZl9iZnJlZTsKLQlsb25nIGZfYmF2YWlsOwotCWxvbmcgZl9maWxlczsKLQlsb25nIGZfZmZyZWU7Ci0JX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKLQlsb25nIGZfbmFtZWxlbjsKLQlsb25nIGZfZnJzaXplOwotCWxvbmcgZl9zcGFyZVs1XTsKLX07Ci0KLXN0cnVjdCBjb21wYXRfc3RhdGZzNjQgewotCV9fdTMyIGZfdHlwZTsKLQlfX3UzMiBmX2JzaXplOwotCV9fdTY0IGZfYmxvY2tzOwotCV9fdTY0IGZfYmZyZWU7Ci0JX191NjQgZl9iYXZhaWw7Ci0JX191NjQgZl9maWxlczsKLQlfX3U2NCBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JX191MzIgZl9uYW1lbGVuOwotCV9fdTMyIGZfZnJzaXplOwotCV9fdTMyIGZfc3BhcmVbNV07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgogCiAjZW5kaWYgLyogX0FTTV9JQTY0X1NUQVRGU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2NyYXNoX2R1bXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvY3Jhc2hfZHVtcC5jCmluZGV4IGRhNjBlOTAuLjIzZTkxMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvY3Jhc2hfZHVtcC5jCkBAIC04LDEwICs4LDE0IEBACiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCisvKiBTdG9yZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmIGhlYWRlciBvZiBjcmFzaCBpbWFnZS4gKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOworCiAvKioKICAqIGNvcHlfb2xkbWVtX3BhZ2UgLSBjb3B5IG9uZSBwYWdlIGZyb20gIm9sZG1lbSIKICAqIEBwZm46IHBhZ2UgZnJhbWUgbnVtYmVyIHRvIGJlIGNvcGllZApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKaW5kZXggNTFiNzVjZS4uZWZhZmYxNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2VmaS5jCkBAIC0xMzM1LDcgKzEzMzUsNyBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKKyNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAogLyogbG9jYXRlIHRoZSBzaXplIGZpbmQgYSB0aGUgZGVzY3JpcHRvciBhdCBhIGNlcnRhaW4gYWRkcmVzcyAqLwogdW5zaWduZWQgbG9uZyBfX2luaXQKIHZtY29yZV9maW5kX2Rlc2NyaXB0b3Jfc2l6ZSAodW5zaWduZWQgbG9uZyBhZGRyZXNzKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IGRlNjM2YjIuLjkxNmJhODkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKQEAgLTM1Miw3ICszNTIsNyBAQAogCX0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BST0NfVk1DT1JFCisjaWZkZWYgQ09ORklHX0NSQVNIX0tFUk5FTAogCWlmIChyZXNlcnZlX2VsZmNvcmVoZHIoJnJzdmRfcmVnaW9uW25dLnN0YXJ0LAogCQkJICAgICAgICZyc3ZkX3JlZ2lvbltuXS5lbmQpID09IDApCiAJCW4rKzsKQEAgLTQ3OCw3ICs0NzgsMTIgQEAKIH0KIGVhcmx5X3BhcmFtKCJub21jYSIsIHNldHVwX25vbWNhKTsKIAotI2lmZGVmIENPTkZJR19QUk9DX1ZNQ09SRQorLyoKKyAqIE5vdGU6IGVsZmNvcmVoZHJfYWRkciBpcyBub3QganVzdCBsaW1pdGVkIHRvIHZtY29yZS4gSXQgaXMgYWxzbyB1c2VkIGJ5CisgKiBpc19rZHVtcF9rZXJuZWwoKSB0byBkZXRlcm1pbmUgaWYgd2UgYXJlIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYy4gSGVuY2UKKyAqIGlmZGVmIGl0IHVuZGVyIENPTkZJR19DUkFTSF9EVU1QIGFuZCBub3QgQ09ORklHX1BST0NfVk1DT1JFLgorICovCisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKIC8qIGVsZmNvcmVoZHI9IHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgZWxmIGNvcmUgaGVhZGVyCiAgKiBzdG9yZWQgYnkgdGhlIGNyYXNoZWQga2VybmVsLgogICovCkBAIC01MDIsMTEgKzUwNywxMSBAQAogCSAqIHRvIHdvcmsgcHJvcGVybHkuCiAJICovCiAKLQlpZiAoZWxmY29yZWhkcl9hZGRyID49IEVMRkNPUkVfQUREUl9NQVgpCisJaWYgKCFpc192bWNvcmVfdXNhYmxlKCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKChsZW5ndGggPSB2bWNvcmVfZmluZF9kZXNjcmlwdG9yX3NpemUoZWxmY29yZWhkcl9hZGRyKSkgPT0gMCkgewotCQllbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOworCQl2bWNvcmVfdW51c2FibGUoKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL0tjb25maWcgYi9hcmNoL2lhNjQva3ZtL0tjb25maWcKaW5kZXggNzkxNGU0OC4uOGU5OWZlZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9rdm0vS2NvbmZpZwpAQCAtNDYsNCArNDYsNiBAQAogY29uZmlnIEtWTV9UUkFDRQogICAgICAgIGJvb2wKIAorc291cmNlIGRyaXZlcnMvdmlydGlvL0tjb25maWcKKwogZW5kaWYgIyBWSVJUVUFMSVpBVElPTgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rdm0vTWFrZWZpbGUKaW5kZXggYmYyMmZiOS4uY2YzN2Y4ZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva3ZtL01ha2VmaWxlCkBAIC00NCw3ICs0NCwxMSBAQAogRVhUUkFfQUZMQUdTICs9IC1JdmlydC9rdm0gLUlhcmNoL2lhNjQva3ZtLwogCiBjb21tb24tb2JqcyA9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywga3ZtX21haW4ubyBpb2FwaWMubyBcCi0JCWNvYWxlc2NlZF9tbWlvLm8pCisJCWNvYWxlc2NlZF9tbWlvLm8gaXJxX2NvbW0ubykKKworaWZlcSAoJChDT05GSUdfRE1BUikseSkKK2NvbW1vbi1vYmpzICs9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywgdnRkLm8pCitlbmRpZgogCiBrdm0tb2JqcyA6PSAkKGNvbW1vbi1vYmpzKSBrdm0taWE2NC5vIGt2bV9mdy5vCiBvYmotJChDT05GSUdfS1ZNKSArPSBrdm0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9pcnEuaCBiL2FyY2gvaWE2NC9rdm0vaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3ODZlOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9rdm0vaXJxLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGlycS5oOiBJbi1rZXJuZWwgaW50ZXJydXB0IGNvbnRyb2xsZXIgcmVsYXRlZCBkZWZpbml0aW9ucworICogQ29weXJpZ2h0IChjKSAyMDA4LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQorICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgWGlhbnRhbyBaaGFuZyA8eGlhbnRhby56aGFuZ0BpbnRlbC5jb20+CisgKgorICovCisKKyNpZm5kZWYgX19JUlFfSAorI2RlZmluZSBfX0lSUV9ICisKK3N0YXRpYyBpbmxpbmUgaW50IGlycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSkKK3sKKwlyZXR1cm4gMTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKaW5kZXggY2QwZDFhNy4uYzA2OTlmMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCisrKyBiL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2djY19pbnRyaW4uaD4KQEAgLTQ1LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJpb2Rldi5oIgogI2luY2x1ZGUgImlvYXBpYy5oIgogI2luY2x1ZGUgImxhcGljLmgiCisjaW5jbHVkZSAiaXJxLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV92bW1fYmFzZTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV92c2FfYmFzZTsKQEAgLTE3OSwxMiArMTgxLDE2IEBACiAJc3dpdGNoIChleHQpIHsKIAljYXNlIEtWTV9DQVBfSVJRQ0hJUDoKIAljYXNlIEtWTV9DQVBfVVNFUl9NRU1PUlk6CisJY2FzZSBLVk1fQ0FQX01QX1NUQVRFOgogCiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU86CiAJCXIgPSBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQ7CiAJCWJyZWFrOworCWNhc2UgS1ZNX0NBUF9JT01NVToKKwkJciA9IGludGVsX2lvbW11X2ZvdW5kKCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXIgPSAwOwogCX0KQEAgLTc3MSw2ICs3NzcsNyBAQAogCSAqLwogCWt2bV9idWlsZF9pb19wbXQoa3ZtKTsKIAorCUlOSVRfTElTVF9IRUFEKCZrdm0tPmFyY2guYXNzaWduZWRfZGV2X2hlYWQpOwogfQogCiBzdHJ1Y3QgIGt2bSAqa3ZtX2FyY2hfY3JlYXRlX3ZtKHZvaWQpCkBAIC0xMzM0LDYgKzEzNDEsMTAgQEAKIAogdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSkKIHsKKwlrdm1faW9tbXVfdW5tYXBfZ3Vlc3Qoa3ZtKTsKKyNpZmRlZiAgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVAorCWt2bV9mcmVlX2FsbF9hc3NpZ25lZF9kZXZpY2VzKGt2bSk7CisjZW5kaWYKIAlrZnJlZShrdm0tPmFyY2gudmlvYXBpYyk7CiAJa3ZtX3JlbGVhc2Vfdm1fcGFnZXMoa3ZtKTsKIAlrdm1fZnJlZV9waHlzbWVtKGt2bSk7CkBAIC0xNDM1LDE3ICsxNDQ2LDI0IEBACiAJCWludCB1c2VyX2FsbG9jKQogewogCXVuc2lnbmVkIGxvbmcgaTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBsb25nIHBmbjsKIAlpbnQgbnBhZ2VzID0gbWVtLT5tZW1vcnlfc2l6ZSA+PiBQQUdFX1NISUZUOwogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QgPSAma3ZtLT5tZW1zbG90c1ttZW0tPnNsb3RdOwogCXVuc2lnbmVkIGxvbmcgYmFzZV9nZm4gPSBtZW1zbG90LT5iYXNlX2dmbjsKIAogCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgewotCQlwYWdlID0gZ2ZuX3RvX3BhZ2Uoa3ZtLCBiYXNlX2dmbiArIGkpOwotCQlrdm1fc2V0X3BtdF9lbnRyeShrdm0sIGJhc2VfZ2ZuICsgaSwKLQkJCQlwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZULAotCQkJCV9QQUdFX0FSX1JXWHxfUEFHRV9NQV9XQik7Ci0JCW1lbXNsb3QtPnJtYXBbaV0gPSAodW5zaWduZWQgbG9uZylwYWdlOworCQlwZm4gPSBnZm5fdG9fcGZuKGt2bSwgYmFzZV9nZm4gKyBpKTsKKwkJaWYgKCFrdm1faXNfbW1pb19wZm4ocGZuKSkgeworCQkJa3ZtX3NldF9wbXRfZW50cnkoa3ZtLCBiYXNlX2dmbiArIGksCisJCQkJCXBmbiA8PCBQQUdFX1NISUZULAorCQkJCV9QQUdFX0FSX1JXWCB8IF9QQUdFX01BX1dCKTsKKwkJCW1lbXNsb3QtPnJtYXBbaV0gPSAodW5zaWduZWQgbG9uZylwZm5fdG9fcGFnZShwZm4pOworCQl9IGVsc2UgeworCQkJa3ZtX3NldF9wbXRfZW50cnkoa3ZtLCBiYXNlX2dmbiArIGksCisJCQkJCUdQRk5fUEhZU19NTUlPIHwgKHBmbiA8PCBQQUdFX1NISUZUKSwKKwkJCQkJX1BBR0VfTUFfVUMpOworCQkJbWVtc2xvdC0+cm1hcFtpXSA9IDA7CisJCQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNzg5LDExICsxODA3LDQzIEBACiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfbXBzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRlKQogewotCXJldHVybiAtRUlOVkFMOworCXZjcHVfbG9hZCh2Y3B1KTsKKwltcF9zdGF0ZS0+bXBfc3RhdGUgPSB2Y3B1LT5hcmNoLm1wX3N0YXRlOworCXZjcHVfcHV0KHZjcHUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWludCByOworCWxvbmcgcHNyOworCWxvY2FsX2lycV9zYXZlKHBzcik7CisJciA9IGt2bV9pbnNlcnRfdm1tX21hcHBpbmcodmNwdSk7CisJaWYgKHIpCisJCWdvdG8gZmFpbDsKKworCXZjcHUtPmFyY2gubGF1bmNoZWQgPSAwOworCWt2bV9hcmNoX3ZjcHVfdW5pbml0KHZjcHUpOworCXIgPSBrdm1fYXJjaF92Y3B1X2luaXQodmNwdSk7CisJaWYgKHIpCisJCWdvdG8gZmFpbDsKKworCWt2bV9wdXJnZV92bW1fbWFwcGluZyh2Y3B1KTsKKwlyID0gMDsKK2ZhaWw6CisJbG9jYWxfaXJxX3Jlc3RvcmUocHNyKTsKKwlyZXR1cm4gcjsKIH0KIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgICBzdHJ1Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSkKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlpbnQgciA9IDA7CisKKwl2Y3B1X2xvYWQodmNwdSk7CisJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9IG1wX3N0YXRlLT5tcF9zdGF0ZTsKKwlpZiAodmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfVU5JTklUSUFMSVpFRCkKKwkJciA9IHZjcHVfcmVzZXQodmNwdSk7CisJdmNwdV9wdXQodmNwdSk7CisJcmV0dXJuIHI7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2t2bV9taW5zdGF0ZS5oIGIvYXJjaC9pYTY0L2t2bS9rdm1fbWluc3RhdGUuaAppbmRleCAxMzk4MGQ5Li4yY2M0MWQxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL2t2bV9taW5zdGF0ZS5oCisrKyBiL2FyY2gvaWE2NC9rdm0va3ZtX21pbnN0YXRlLmgKQEAgLTUwLDI3ICs1MCwxOCBAQAogCiAjZGVmaW5lIFBBTF9WU0FfU1lOQ19SRUFECQkJCQkJXAogCS8qIGJlZ2luIHRvIGNhbGwgcGFsIHZwcyBzeW5jX3JlYWQgKi8JCQkJXAorey5taWk7CQkJCQkJCQkJXAogCWFkZCByMjUgPSBWTU1fVlBEX0JBU0VfT0ZGU0VULCByMjE7CQkJCVwKLQlhZGRzIHIyMCA9IFZNTV9WQ1BVX1ZTQV9CQVNFX09GRlNFVCwgcjIxOyAgLyogZW50cnkgcG9pbnQgKi8JXAotCTs7CQkJCQkJCQlcCi0JbGQ4IHIyNSA9IFtyMjVdOyAgICAgIC8qIHJlYWQgdnBkIGJhc2UgKi8JCQlcCi0JbGQ4IHIyMCA9IFtyMjBdOwkJCQkJCVwKLQk7OwkJCQkJCQkJXAotCWFkZCByMjAgPSBQQUxfVlBTX1NZTkNfUkVBRCxyMjA7CQkJCVwKLQk7OwkJCQkJCQkJXAoteyAubWlpOwkJCQkJCQkJCVwKIAlub3AgMHgwOwkJCQkJCQlcCi0JbW92IHIyNCA9IGlwOwkJCQkJCQlcCi0JbW92IGIwID0gcjIwOwkJCQkJCQlcCisJbW92IHIyND1pcDsJCQkJCQkJXAorCTs7CQkJCQkJCQlcCit9CQkJCQkJCQkJXAorey5tbWIJCQkJCQkJCQlcCisJYWRkIHIyND0weDIwLCByMjQ7CQkJCQkJXAorCWxkOCByMjUgPSBbcjI1XTsgICAgICAvKiByZWFkIHZwZCBiYXNlICovCQkJXAorCWJyLmNvbmQuc3B0ayBrdm1fdnBzX3N5bmNfcmVhZDsJCS8qY2FsbCB0aGUgc2VydmljZSovCVwKIAk7OwkJCQkJCQkJXAogfTsJCQkJCQkJCQlcCi17IC5tbWI7CQkJCQkJCQkJXAotCWFkZCByMjQgPSAweDIwLCByMjQ7CQkJCQkJXAotCW5vcCAweDA7CQkJCQkJCVwKLQlici5jb25kLnNwdGsgYjA7ICAgICAgICAvKiAgY2FsbCB0aGUgc2VydmljZSAqLwkJCVwKLQk7OwkJCQkJCQkJXAotfTsKLQogCiAKICNkZWZpbmUgS1ZNX01JTlNUQVRFX0dFVF9DVVJSRU5UKHJlZykgICBtb3YgcmVnPXIyMQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9vcHR2ZmF1bHQuUyBiL2FyY2gvaWE2NC9rdm0vb3B0dmZhdWx0LlMKaW5kZXggZTRmMTVkNi4uNjM0YWJhZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9vcHR2ZmF1bHQuUworKysgYi9hcmNoL2lhNjQva3ZtL29wdHZmYXVsdC5TCkBAIC0xLDkgKzEsMTIgQEAKIC8qCi0gKiBhcmNoL2lhNjQvdm14L29wdHZmYXVsdC5TCisgKiBhcmNoL2lhNjQva3ZtL29wdHZmYXVsdC5TCiAgKiBvcHRpbWl6ZSB2aXJ0dWFsaXphdGlvbiBmYXVsdCBoYW5kbGVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEludGVsIENvCiAgKglYdWVmZWkgWHUgKEFudGhvbnkgWHUpIDxhbnRob255Lnh1QGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJbnRlbCBDbworICogICAgICBBZGQgdGhlIHN1cHBvcnQgZm9yIFR1a3dpbGEgcHJvY2Vzc29ycy4KKyAqCVhpYW50YW8gWmhhbmcgPHhpYW50YW8uemhhbmdAaW50ZWwuY29tPgogICovCiAKICNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KQEAgLTIwLDYgKzIzLDk4IEBACiAjZGVmaW5lIEFDQ0VfTU9WX1RPX1BTUgogI2RlZmluZSBBQ0NFX1RIQVNICiAKKyNkZWZpbmUgVk1YX1ZQU19TWU5DX1JFQUQJCQlcCisJYWRkIHIxNj1WTU1fVlBEX0JBU0VfT0ZGU0VULHIyMTsJXAorCW1vdiByMTcgPSBiMDsJCQkJXAorCW1vdiByMTggPSByMjQ7CQkJCVwKKwltb3YgcjE5ID0gcjI1OwkJCQlcCisJbW92IHIyMCA9IHIzMTsJCQkJXAorCTs7CQkJCQlcCit7Lm1paTsJCQkJCQlcCisJbGQ4IHIxNiA9IFtyMTZdOwkJCVwKKwlub3AgMHgwOwkJCQlcCisJbW92IHIyNCA9IGlwOwkJCQlcCisJOzsJCQkJCVwKK307CQkJCQkJXAorey5tbWI7CQkJCQkJXAorCWFkZCByMjQ9MHgyMCwgcjI0OwkJCVwKKwltb3YgcjI1ID1yMTY7CQkJCVwKKwlici5zcHRrLm1hbnkga3ZtX3Zwc19zeW5jX3JlYWQ7CQlcCit9OwkJCQkJCVwKKwltb3YgYjAgPSByMTc7CQkJCVwKKwltb3YgcjI0ID0gcjE4OwkJCQlcCisJbW92IHIyNSA9IHIxOTsJCQkJXAorCW1vdiByMzEgPSByMjAKKworRU5UUlkoa3ZtX3Zwc19lbnRyeSkKKwlhZGRzIHIyOSA9IFZNTV9WQ1BVX1ZTQV9CQVNFX09GRlNFVCxyMjEKKwk7OworCWxkOCByMjkgPSBbcjI5XQorCTs7CisJYWRkIHIyOSA9IHIyOSwgcjMwCisJOzsKKwltb3YgYjAgPSByMjkKKwlici5zcHRrLm1hbnkgYjAKK0VORChrdm1fdnBzX2VudHJ5KQorCisvKgorICoJSW5wdXRzOgorICoJcjI0IDogcmV0dXJuIGFkZHJlc3MKKyAqICAJcjI1IDogdnBkCisgKglyMjkgOiBzY3JhdGNoCisgKgorICovCitHTE9CQUxfRU5UUlkoa3ZtX3Zwc19zeW5jX3JlYWQpCisJbW92bCByMzAgPSBQQUxfVlBTX1NZTkNfUkVBRAorCTs7CisJYnIuc3B0ay5tYW55IGt2bV92cHNfZW50cnkKK0VORChrdm1fdnBzX3N5bmNfcmVhZCkKKworLyoKKyAqCUlucHV0czoKKyAqCXIyNCA6IHJldHVybiBhZGRyZXNzCisgKiAgCXIyNSA6IHZwZAorICoJcjI5IDogc2NyYXRjaAorICoKKyAqLworR0xPQkFMX0VOVFJZKGt2bV92cHNfc3luY193cml0ZSkKKwltb3ZsIHIzMCA9IFBBTF9WUFNfU1lOQ19XUklURQorCTs7CisJYnIuc3B0ay5tYW55IGt2bV92cHNfZW50cnkKK0VORChrdm1fdnBzX3N5bmNfd3JpdGUpCisKKy8qCisgKglJbnB1dHM6CisgKglyMjMgOiBwcgorICoJcjI0IDogZ3Vlc3QgYjAKKyAqICAJcjI1IDogdnBkCisgKgorICovCitHTE9CQUxfRU5UUlkoa3ZtX3Zwc19yZXN1bWVfbm9ybWFsKQorCW1vdmwgcjMwID0gUEFMX1ZQU19SRVNVTUVfTk9STUFMCisJOzsKKwltb3YgcHI9cjIzLC0yCisJYnIuc3B0ay5tYW55IGt2bV92cHNfZW50cnkKK0VORChrdm1fdnBzX3Jlc3VtZV9ub3JtYWwpCisKKy8qCisgKglJbnB1dHM6CisgKglyMjMgOiBwcgorICoJcjI0IDogZ3Vlc3QgYjAKKyAqICAJcjI1IDogdnBkCisgKglyMTcgOiBpc3IKKyAqLworR0xPQkFMX0VOVFJZKGt2bV92cHNfcmVzdW1lX2hhbmRsZXIpCisJbW92bCByMzAgPSBQQUxfVlBTX1JFU1VNRV9IQU5ETEVSCisJOzsKKwlsZDggcjI3PVtyMjVdCisJc2hyIHIxNz1yMTcsSUE2NF9JU1JfSVJfQklUCisJOzsKKwlkZXAgcjI3PXIxNyxyMjcsNjMsMSAgIC8vIGJpdCA2MyBvZiByMjcgaW5kaWNhdGUgd2hldGhlciBlbmFibGUgQ0ZMRQorCW1vdiBwcj1yMjMsLTIKKwlici5zcHRrLm1hbnkga3ZtX3Zwc19lbnRyeQorRU5EKGt2bV92cHNfcmVzdW1lX2hhbmRsZXIpCisKIC8vbW92IHIxPWFyMwogR0xPQkFMX0VOVFJZKGt2bV9hc21fbW92X2Zyb21fYXIpCiAjaWZuZGVmIEFDQ0VfTU9WX0ZST01fQVIKQEAgLTE1NywxMSArMjUyLDExIEBACiAjaWZuZGVmIEFDQ0VfUlNNCiAJYnIubWFueSBrdm1fdmlydHVhbGl6YXRpb25fZmF1bHRfYmFjawogI2VuZGlmCi0JYWRkIHIxNj1WTU1fVlBEX0JBU0VfT0ZGU0VULHIyMQorCVZNWF9WUFNfU1lOQ19SRUFECisJOzsKIAlleHRyLnUgcjI2PXIyNSw2LDIxCiAJZXh0ci51IHIyNz1yMjUsMzEsMgogCTs7Ci0JbGQ4IHIxNj1bcjE2XQogCWV4dHIudSByMjg9cjI1LDM2LDEKIAlkZXAgcjI2PXIyNyxyMjYsMjEsMgogCTs7CkBAIC0xOTYsNyArMjkxLDcgQEAKIAl0Yml0Lm56IHA2LHAwPXIyMywwCiAJOzsKIAl0Yml0Lnoub3IgcDYscDA9cjI2LElBNjRfUFNSX0RUX0JJVAotCShwNikgYnIuZHB0ayBrdm1fcmVzdW1lX3RvX2d1ZXN0CisJKHA2KSBici5kcHRrIGt2bV9yZXN1bWVfdG9fZ3Vlc3Rfd2l0aF9zeW5jCiAJOzsKIAlhZGQgcjI2PVZNTV9WQ1BVX01FVEFfUlIwX09GRlNFVCxyMjEKIAlhZGQgcjI3PVZNTV9WQ1BVX01FVEFfUlIwX09GRlNFVCs4LHIyMQpAQCAtMjEyLDcgKzMwNyw3IEBACiAJbW92IHJyW3IyOF09cjI3CiAJOzsKIAlzcmx6LmQKLQlici5tYW55IGt2bV9yZXN1bWVfdG9fZ3Vlc3QKKwlici5tYW55IGt2bV9yZXN1bWVfdG9fZ3Vlc3Rfd2l0aF9zeW5jCiBFTkQoa3ZtX2FzbV9yc20pCiAKIApAQCAtMjIxLDExICszMTYsMTEgQEAKICNpZm5kZWYgQUNDRV9TU00KIAlici5tYW55IGt2bV92aXJ0dWFsaXphdGlvbl9mYXVsdF9iYWNrCiAjZW5kaWYKLQlhZGQgcjE2PVZNTV9WUERfQkFTRV9PRkZTRVQscjIxCisJVk1YX1ZQU19TWU5DX1JFQUQKKwk7OwogCWV4dHIudSByMjY9cjI1LDYsMjEKIAlleHRyLnUgcjI3PXIyNSwzMSwyCiAJOzsKLQlsZDggcjE2PVtyMTZdCiAJZXh0ci51IHIyOD1yMjUsMzYsMQogCWRlcCByMjY9cjI3LHIyNiwyMSwyCiAJOzsgIC8vcjI2IGlzIGltbTI0CkBAIC0yNzEsNyArMzY2LDcgQEAKIAl0Yml0Lm56IHA2LHAwPXIyOSxJQTY0X1BTUl9JX0JJVAogCTs7CiAJdGJpdC56Lm9yIHA2LHAwPXIxOSxJQTY0X1BTUl9JX0JJVAotCShwNikgYnIuZHB0ayBrdm1fcmVzdW1lX3RvX2d1ZXN0CisJKHA2KSBici5kcHRrIGt2bV9yZXN1bWVfdG9fZ3Vlc3Rfd2l0aF9zeW5jCiAJOzsKIAlhZGQgcjI5PVZQRF9WVFBSX1NUQVJUX09GRlNFVCxyMTYKIAlhZGQgcjMwPVZQRF9WSFBJX1NUQVJUX09GRlNFVCxyMTYKQEAgLTI4Niw3ICszODEsNyBAQAogCTs7CiAJY21wLmd0IHA2LHAwPXIzMCxyMTcKIAkocDYpIGJyLmRwbnQuZmV3IGt2bV9hc21fZGlzcGF0Y2hfdmV4aXJxCi0JYnIubWFueSBrdm1fcmVzdW1lX3RvX2d1ZXN0CisJYnIubWFueSBrdm1fcmVzdW1lX3RvX2d1ZXN0X3dpdGhfc3luYwogRU5EKGt2bV9hc21fc3NtKQogCiAKQEAgLTI5NSwxMCArMzkwLDkgQEAKICNpZm5kZWYgQUNDRV9NT1ZfVE9fUFNSCiAJYnIubWFueSBrdm1fdmlydHVhbGl6YXRpb25fZmF1bHRfYmFjawogI2VuZGlmCi0JYWRkIHIxNj1WTU1fVlBEX0JBU0VfT0ZGU0VULHIyMQotCWV4dHIudSByMjY9cjI1LDEzLDcgLy9yMgorCVZNWF9WUFNfU1lOQ19SRUFECiAJOzsKLQlsZDggcjE2PVtyMTZdCisJZXh0ci51IHIyNj1yMjUsMTMsNyAvL3IyCiAJYWRkbCByMjA9QGdwcmVsKGFzbV9tb3ZfZnJvbV9yZWcpLGdwCiAJOzsKIAlhZGRzIHIzMD1rdm1fYXNtX21vdl90b19wc3JfYmFjay1hc21fbW92X2Zyb21fcmVnLHIyMApAQCAtMzc0LDcgKzQ2OCw3IEBACiAJOzsKIAl0Yml0Lm56Lm9yIHA2LHAwPXIxNyxJQTY0X1BTUl9JX0JJVAogCXRiaXQuei5vciBwNixwMD1yMzAsSUE2NF9QU1JfSV9CSVQKLQkocDYpIGJyLmRwbnQuZmV3IGt2bV9yZXN1bWVfdG9fZ3Vlc3QKKwkocDYpIGJyLmRwbnQuZmV3IGt2bV9yZXN1bWVfdG9fZ3Vlc3Rfd2l0aF9zeW5jCiAJOzsKIAlhZGQgcjI5PVZQRF9WVFBSX1NUQVJUX09GRlNFVCxyMTYKIAlhZGQgcjMwPVZQRF9WSFBJX1NUQVJUX09GRlNFVCxyMTYKQEAgLTM4OSwxMyArNDgzLDI5IEBACiAJOzsKIAljbXAuZ3QgcDYscDA9cjMwLHIxNwogCShwNikgYnIuZHBudC5mZXcga3ZtX2FzbV9kaXNwYXRjaF92ZXhpcnEKLQlici5tYW55IGt2bV9yZXN1bWVfdG9fZ3Vlc3QKKwlici5tYW55IGt2bV9yZXN1bWVfdG9fZ3Vlc3Rfd2l0aF9zeW5jCiBFTkQoa3ZtX2FzbV9tb3ZfdG9fcHNyKQogCiAKIEVOVFJZKGt2bV9hc21fZGlzcGF0Y2hfdmV4aXJxKQogLy9pbmNyZW1lbnQgaWlwCisJbW92IHIxNyA9IGIwCisJbW92IHIxOCA9IHIzMQorey5taWkKKwlhZGQgcjI1PVZNTV9WUERfQkFTRV9PRkZTRVQscjIxCisJbm9wIDB4MAorCW1vdiByMjQgPSBpcAorCTs7Cit9Cit7Lm1tYgorCWFkZCByMjQgPSAweDIwLCByMjQKKwlsZDggcjI1ID0gW3IyNV0KKwlici5zcHRrLm1hbnkga3ZtX3Zwc19zeW5jX3dyaXRlCit9CisJbW92IGIwID1yMTcKIAltb3YgcjE2PWNyLmlwc3IKKwltb3YgcjMxID0gcjE4CisJbW92IHIxOSA9IDM3CiAJOzsKIAlleHRyLnUgcjE3PXIxNixJQTY0X1BTUl9SSV9CSVQsMgogCXRiaXQubnogcDYscDc9cjE2LElBNjRfUFNSX1JJX0JJVCsxCkBAIC00MzUsMjUgKzU0NSwzMSBAQAogCTs7CiBrdm1fYXNtX3RoYXNoX2JhY2sxOgogCXNoci51IHIyMz1yMTksNjEJCS8vIGdldCBSUiBudW1iZXIKLQlhZGRzIHIyNT1WTU1fVkNQVV9WUlIwX09GRlNFVCxyMjEJLy8gZ2V0IHZjcHUtPmFyY2gudnJyWzBdJ3MgYWRkcgorCWFkZHMgcjI4PVZNTV9WQ1BVX1ZSUjBfT0ZGU0VULHIyMQkvLyBnZXQgdmNwdS0+YXJjaC52cnJbMF0ncyBhZGRyCiAJYWRkcyByMTY9Vk1NX1ZQRF9WUFRBX09GRlNFVCxyMTYJLy8gZ2V0IHZwdGEKIAk7OwotCXNobGFkZCByMjc9cjIzLDMscjI1CS8vIGdldCB2Y3B1LT5hcmNoLnZycltyMjNdJ3MgYWRkcgorCXNobGFkZCByMjc9cjIzLDMscjI4CS8vIGdldCB2Y3B1LT5hcmNoLnZycltyMjNdJ3MgYWRkcgogCWxkOCByMTc9W3IxNl0JCS8vIGdldCBQVEEKIAltb3YgcjI2PTEKIAk7OwotCWV4dHIudSByMjk9cjE3LDIsNgkJLy8gZ2V0IHB0YS5zaXplCi0JbGQ4IHIyNT1bcjI3XQkJLy8gZ2V0IHZjcHUtPmFyY2gudnJyW3IyM10ncyB2YWx1ZQorCWV4dHIudSByMjk9cjE3LDIsNgkvLyBnZXQgcHRhLnNpemUKKwlsZDggcjI4PVtyMjddCQkvLyBnZXQgdmNwdS0+YXJjaC52cnJbcjIzXSdzIHZhbHVlCiAJOzsKLQlleHRyLnUgcjI1PXIyNSwyLDYJCS8vIGdldCByci5wcworCW1vdiBiMD1yMjQKKwkvL0ZhbGxiYWNrIHRvIEMgaWYgcHRhLnZmIGlzIHNldAorCXRiaXQubnogcDYscDA9cjE3LCA4CisJOzsKKwkocDYpIG1vdiByMjQ9RVZFTlRfVEhBU0gKKwkocDYpIGJyLmNvbmQuZHBudC5tYW55IGt2bV92aXJ0dWFsaXphdGlvbl9mYXVsdF9iYWNrCisJZXh0ci51IHIyOD1yMjgsMiw2CS8vIGdldCByci5wcwogCXNobCByMjI9cjI2LHIyOQkJLy8gMVVMIDw8IHB0YS5zaXplCiAJOzsKLQlzaHIudSByMjM9cjE5LHIyNQkJLy8gdmFkZHIgPj4gcnIucHMKKwlzaHIudSByMjM9cjE5LHIyOAkvLyB2YWRkciA+PiByci5wcwogCWFkZHMgcjI2PTMscjI5CQkvLyBwdGEuc2l6ZSArIDMKIAlzaGwgcjI3PXIxNywzCQkvLyBwdGEgPDwgMwogCTs7CiAJc2hsIHIyMz1yMjMsMwkJLy8gKHZhZGRyID4+IHJyLnBzKSA8PCAzCi0Jc2hyLnUgcjI3PXIyNyxyMjYJCS8vIChwdGEgPDwgMykgPj4gKHB0YS5zaXplKzMpCisJc2hyLnUgcjI3PXIyNyxyMjYJLy8gKHB0YSA8PCAzKSA+PiAocHRhLnNpemUrMykKIAltb3ZsIHIxNj03PDw2MQogCTs7CiAJYWRkcyByMjI9LTEscjIyCQkvLyAoMVVMIDw8IHB0YS5zaXplKSAtIDEKQEAgLTcyNCw2ICs4NDAsMjkgQEAKICAqIHIzMTogcHIKICAqIHIyNDogYjAKICAqLworRU5UUlkoa3ZtX3Jlc3VtZV90b19ndWVzdF93aXRoX3N5bmMpCisJYWRkcyByMTk9Vk1NX1ZQRF9CQVNFX09GRlNFVCxyMjEKKwltb3YgcjE2ID0gcjMxCisJbW92IHIxNyA9IHIyNAorCTs7Cit7Lm1paQorCWxkOCByMjUgPVtyMTldCisJbm9wIDB4MAorCW1vdiByMjQgPSBpcAorCTs7Cit9Cit7Lm1tYgorCWFkZCByMjQgPTB4MjAsIHIyNAorCW5vcCAweDAKKwlici5zcHRrLm1hbnkga3ZtX3Zwc19zeW5jX3dyaXRlCit9CisKKwltb3YgcjMxID0gcjE2CisJbW92IHIyNCA9cjE3CisJOzsKKwlici5zcHRrLm1hbnkga3ZtX3Jlc3VtZV90b19ndWVzdAorRU5EKGt2bV9yZXN1bWVfdG9fZ3Vlc3Rfd2l0aF9zeW5jKQorCiBFTlRSWShrdm1fcmVzdW1lX3RvX2d1ZXN0KQogCWFkZHMgcjE2ID0gVk1NX1ZDUFVfU0FWRURfR1BfT0ZGU0VULHIyMQogCTs7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3Byb2Nlc3MuYyBiL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jCmluZGV4IDVhMzNmN2UuLjM0MTc3ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jCisrKyBiL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jCkBAIC05NjIsOSArOTYyLDkgQEAKIHZvaWQgdm1tX3RyYW5zaXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWlhNjRfY2FsbF92c2EoUEFMX1ZQU19TQVZFLCAodW5zaWduZWQgbG9uZyl2Y3B1LT5hcmNoLnZwZCwKLQkJCTAsIDAsIDAsIDAsIDAsIDApOworCQkJMSwgMCwgMCwgMCwgMCwgMCk7CiAJdm1tX3RyYW1wb2xpbmUoJnZjcHUtPmFyY2guZ3Vlc3QsICZ2Y3B1LT5hcmNoLmhvc3QpOwogCWlhNjRfY2FsbF92c2EoUEFMX1ZQU19SRVNUT1JFLCAodW5zaWduZWQgbG9uZyl2Y3B1LT5hcmNoLnZwZCwKLQkJCQkJCTAsIDAsIDAsIDAsIDAsIDApOworCQkJCQkJMSwgMCwgMCwgMCwgMCwgMCk7CiAJa3ZtX2RvX3Jlc3VtZV9vcCh2Y3B1KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vdmNwdS5oIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmgKaW5kZXggYjBmY2ZiNi4uMzQxZTNmZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92Y3B1LmgKKysrIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmgKQEAgLTMxMywyMSArMzEzLDIxIEBACiAJdHJwLT5yaWQgPSByaWQ7CiB9CiAKLWV4dGVybiB1NjQga3ZtX2xvb2t1cF9tcGEodTY0IGdwZm4pOwotZXh0ZXJuIHU2NCBrdm1fZ3BhX3RvX21wYSh1NjQgZ3BhKTsKK2V4dGVybiB1NjQga3ZtX2dldF9tcHRfZW50cnkodTY0IGdwZm4pOwogCi0vKiBSZXR1cm4gSS9PIHR5cGUgaWYgdHJ5ZSAqLwotI2RlZmluZSBfX2dwZm5faXNfaW8oZ3BmbikJCQlcCi0JKHsJCQkJCQlcCi0JIHU2NCBwdGUsIHJldCA9IDA7CQkJXAotCSBwdGUgPSBrdm1fbG9va3VwX21wYShncGZuKTsJCVwKLQkgaWYgKCEocHRlICYgR1BGTl9JTlZfTUFTSykpCQlcCi0JIHJldCA9IHB0ZSAmIEdQRk5fSU9fTUFTSzsJXAotCSByZXQ7CQkJCQlcCi0JIH0pCi0KKy8qIFJldHVybiBJLyAqLworc3RhdGljIGlubGluZSB1NjQgX19ncGZuX2lzX2lvKHU2NCBncGZuKQoreworCXU2NCAgcHRlOworCXB0ZSA9IGt2bV9nZXRfbXB0X2VudHJ5KGdwZm4pOworCWlmICghKHB0ZSAmIEdQRk5fSU5WX01BU0spKSB7CisJCXB0ZSA9IHB0ZSAmIEdQRk5fSU9fTUFTSzsKKwkJaWYgKHB0ZSAhPSBHUEZOX1BIWVNfTU1JTykKKwkJCXJldHVybiBwdGU7CisJfQorCXJldHVybiAwOworfQogI2VuZGlmCi0KICNkZWZpbmUgSUE2NF9OT19GQVVMVAkwCiAjZGVmaW5lIElBNjRfRkFVTFQJMQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3ZtbV9pdnQuUyBiL2FyY2gvaWE2NC9rdm0vdm1tX2l2dC5TCmluZGV4IDNlZTVmNDguLmMxZDcyNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vdm1tX2l2dC5TCisrKyBiL2FyY2gvaWE2NC9rdm0vdm1tX2l2dC5TCkBAIC0xMjYxLDExICsxMjYxLDYgQEAKICAgICBhZGRzIHIxOT1WTU1fVlBEX1ZQU1JfT0ZGU0VULHIxOAogICAgIDs7CiAgICAgbGQ4IHIxOT1bcjE5XSAgICAgICAgLy92cHNyCi0gICAgYWRkcyByMjA9Vk1NX1ZDUFVfVlNBX0JBU0VfT0ZGU0VULHIyMQotICAgIDs7Ci0gICAgbGQ4IHIyMD1bcjIwXQotICAgIDs7Ci0vL3ZzYV9zeW5jX3dyaXRlX3N0YXJ0CiAgICAgbW92IHIyNT1yMTgKICAgICBhZGRzIHIxNj0gVk1NX1ZDUFVfR1BfT0ZGU0VULHIyMQogICAgIDs7CkBAIC0xMjc0LDEwICsxMjY5LDcgQEAKICAgICA7OwogICAgIGFkZCAgcjI0PXIyNCxyMTYKICAgICA7OwotICAgIGFkZCByMTY9UEFMX1ZQU19TWU5DX1dSSVRFLHIyMAotICAgIDs7Ci0gICAgbW92IGIwPXIxNgotICAgIGJyLmNvbmQuc3B0ayBiMCAgICAgICAgIC8vIGNhbGwgdGhlIHNlcnZpY2UKKyAgICBici5zcHRrLm1hbnkgIGt2bV92cHNfc3luY193cml0ZSAgICAgICAvLyBjYWxsIHRoZSBzZXJ2aWNlCiAgICAgOzsKIEVORChpYTY0X2xlYXZlX2h5cGVydmlzb3IpCiAvLyBmYWxsIHRocm91Z2gKQEAgLTEyODgsMjggKzEyODAsMTUgQEAKICAqICByMTc6Y3IuaXNyCiAgKiAgcjE4OnZwZAogICogIHIxOTp2cHNyCi0gKiAgcjIwOl9fdnNhX2Jhc2UKICAqICByMjI6YjAKICAqICByMjM6cHJlZGljYXRlCiAgKi8KICAgICBtb3YgcjI0PXIyMgogICAgIG1vdiByMjU9cjE4CiAgICAgdGJpdC5ueiBwMSxwMiA9IHIxOSxJQTY0X1BTUl9JQ19CSVQgICAgICAgIC8vIHAxPXZwc3IuaWMKKyAgICAocDEpIGJyLmNvbmQuc3B0ay5mZXcga3ZtX3Zwc19yZXN1bWVfbm9ybWFsCisgICAgKHAyKSBici5jb25kLnNwdGsubWFueSBrdm1fdnBzX3Jlc3VtZV9oYW5kbGVyCiAgICAgOzsKLSAgICAocDEpIGFkZCByMjk9UEFMX1ZQU19SRVNVTUVfTk9STUFMLHIyMAotICAgIChwMSkgYnIuc3B0ay5tYW55IGlhNjRfdm1tX2VudHJ5X291dAotICAgIDs7Ci0gICAgdGJpdC5ueiBwMSxwMiA9IHIxNyxJQTY0X0lTUl9JUl9CSVQJCS8vcDE9Y3IuaXNyLmlyCi0gICAgOzsKLSAgICAocDEpIGFkZCByMjk9UEFMX1ZQU19SRVNVTUVfTk9STUFMLHIyMAotICAgIChwMikgYWRkIHIyOT1QQUxfVlBTX1JFU1VNRV9IQU5ETEVSLHIyMAotICAgIChwMikgbGQ4IHIyNj1bcjI1XQotICAgIDs7Ci1pYTY0X3ZtbV9lbnRyeV9vdXQ6Ci0gICAgbW92IHByPXIyMywtMgotICAgIG1vdiBiMD1yMjkKLSAgICA7OwotICAgIGJyLmNvbmQuc3B0ayBiMCAgICAgICAgICAgICAvLyBjYWxsIHBhbCBzZXJ2aWNlCiBFTkQoaWE2NF92bW1fZW50cnkpCiAKIApAQCAtMTM3Niw2ICsxMzU1LDkgQEAKICAgICAvL3NldCB1cCBpcHNyLCBpaXAsIHZwZC52cHNyLCBkY3IKICAgICAvLyBGb3IgSVBTUjogaXQvZHQvcnQ9MSwgaS9pYz0xLCBzaT0xLCB2bS9ibj0xCiAgICAgLy8gRm9yIERDUjogYWxsIGJpdHMgMAorICAgIGJzdy4wCisgICAgOzsKKyAgICBtb3YgcjIxID1yMTMKICAgICBhZGRzIHIxND0tVk1NX1BUX1JFR1NfU0laRSwgcjEyCiAgICAgOzsKICAgICBtb3ZsIHI2PTB4NTAxMDA4ODI2MDAwICAgICAgLy8gSVBTUiBkdC9ydC9pdDoxO2kvaWM6MSwgc2k6MSwgdm0vYm46MQpAQCAtMTM4NywxMiArMTM2OSw2IEBACiAgICAgOzsKICAgICBzcmx6LmkKICAgICA7OwotICAgIGJzdy4wCi0gICAgOzsKLSAgICBtb3YgcjIxID1yMTMKLSAgICA7OwotICAgIGJzdy4xCi0gICAgOzsKICAgICBtb3YgYXIucnNjID0gMAogICAgIDs7CiAgICAgZmx1c2hycwpAQCAtMTQwNiwxMiArMTM4Miw5IEBACiAgICAgbGQ4IHIxID0gW3IyMF0KICAgICA7OwogICAgIG1vdiBjci5paXA9cjQKLSAgICA7OwogICAgIGFkZHMgcjE2PVZNTV9WUERfQkFTRV9PRkZTRVQscjEzCi0gICAgYWRkcyByMjA9Vk1NX1ZDUFVfVlNBX0JBU0VfT0ZGU0VULHIxMwogICAgIDs7CiAgICAgbGQ4IHIxOD1bcjE2XQotICAgIGxkOCByMjA9W3IyMF0KICAgICA7OwogICAgIGFkZHMgcjE5PVZNTV9WUERfVlBTUl9PRkZTRVQscjE4CiAgICAgOzsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vdnRsYi5jIGIvYXJjaC9pYTY0L2t2bS92dGxiLmMKaW5kZXggZGVmNDU3Ni4uZTIyYjkzMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92dGxiLmMKKysrIGIvYXJjaC9pYTY0L2t2bS92dGxiLmMKQEAgLTM5MCw3ICszOTAsNyBAQAogCiB1NjQgdHJhbnNsYXRlX3BoeV9wdGUodTY0ICpwdGUsIHU2NCBpdGlyLCB1NjQgdmEpCiB7Ci0JdTY0IHBzLCBwc19tYXNrLCBwYWRkciwgbWFkZHI7CisJdTY0IHBzLCBwc19tYXNrLCBwYWRkciwgbWFkZHIsIGlvX21hc2s7CiAJdW5pb24gcHRlX2ZsYWdzIHBoeV9wdGU7CiAKIAlwcyA9IGl0aXJfcHMoaXRpcik7CkBAIC0zOTgsOCArMzk4LDkgQEAKIAlwaHlfcHRlLnZhbCA9ICpwdGU7CiAJcGFkZHIgPSAqcHRlOwogCXBhZGRyID0gKChwYWRkciAmIF9QQUdFX1BQTl9NQVNLKSAmIHBzX21hc2spIHwgKHZhICYgfnBzX21hc2spOwotCW1hZGRyID0ga3ZtX2xvb2t1cF9tcGEocGFkZHIgPj4gUEFHRV9TSElGVCk7Ci0JaWYgKG1hZGRyICYgR1BGTl9JT19NQVNLKSB7CisJbWFkZHIgPSBrdm1fZ2V0X21wdF9lbnRyeShwYWRkciA+PiBQQUdFX1NISUZUKTsKKwlpb19tYXNrID0gbWFkZHIgJiBHUEZOX0lPX01BU0s7CisJaWYgKGlvX21hc2sgJiYgKGlvX21hc2sgIT0gR1BGTl9QSFlTX01NSU8pKSB7CiAJCSpwdGUgfD0gVlRMQl9QVEVfSU87CiAJCXJldHVybiAtMTsKIAl9CkBAIC00MTgsNyArNDE5LDcgQEAKIAkJCQkJCXU2NCBpZmEsIGludCB0eXBlKQogewogCXU2NCBwczsKLQl1NjQgcGh5X3B0ZTsKKwl1NjQgcGh5X3B0ZSwgaW9fbWFzaywgaW5kZXg7CiAJdW5pb24gaWE2NF9yciB2cnIsIG1ycjsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNDI2LDEzICs0MjcsMTYgQEAKIAl2cnIudmFsID0gdmNwdV9nZXRfcnIodiwgaWZhKTsKIAltcnIudmFsID0gaWE2NF9nZXRfcnIoaWZhKTsKIAorCWluZGV4ID0gKHB0ZSAmIF9QQUdFX1BQTl9NQVNLKSA+PiBQQUdFX1NISUZUOworCWlvX21hc2sgPSBrdm1fZ2V0X21wdF9lbnRyeShpbmRleCkgJiBHUEZOX0lPX01BU0s7CiAJcGh5X3B0ZSA9IHRyYW5zbGF0ZV9waHlfcHRlKCZwdGUsIGl0aXIsIGlmYSk7CiAKIAkvKiBFbnN1cmUgV0IgYXR0cmlidXRlIGlmIHB0ZSBpcyByZWxhdGVkIHRvIGEgbm9ybWFsIG1lbSBwYWdlLAogCSAqIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IHZnYSBhY2NlbGVyYXRpb24gc2luY2UgcWVtdSBtYXBzIHNoYXJlZAogCSAqIHZyYW0gYnVmZmVyIHdpdGggV0IuCiAJICovCi0JaWYgKCEocHRlICYgVlRMQl9QVEVfSU8pICYmICgocHRlICYgX1BBR0VfTUFfTUFTSykgIT0gX1BBR0VfTUFfTkFUKSkgeworCWlmICghKHB0ZSAmIFZUTEJfUFRFX0lPKSAmJiAoKHB0ZSAmIF9QQUdFX01BX01BU0spICE9IF9QQUdFX01BX05BVCkgJiYKKwkJCWlvX21hc2sgIT0gR1BGTl9QSFlTX01NSU8pIHsKIAkJcHRlICY9IH5fUEFHRV9NQV9NQVNLOwogCQlwaHlfcHRlICY9IH5fUEFHRV9NQV9NQVNLOwogCX0KQEAgLTU2NiwxMiArNTcwLDE5IEBACiAJfQogfQogCi11NjQga3ZtX2xvb2t1cF9tcGEodTY0IGdwZm4pCit1NjQga3ZtX2dldF9tcHRfZW50cnkodTY0IGdwZm4pCiB7CiAJdTY0ICpiYXNlID0gKHU2NCAqKSBLVk1fUDJNX0JBU0U7CiAJcmV0dXJuICooYmFzZSArIGdwZm4pOwogfQogCit1NjQga3ZtX2xvb2t1cF9tcGEodTY0IGdwZm4pCit7CisJdTY0IG1hZGRyOworCW1hZGRyID0ga3ZtX2dldF9tcHRfZW50cnkoZ3Bmbik7CisJcmV0dXJuIG1hZGRyJl9QQUdFX1BQTl9NQVNLOworfQorCiB1NjQga3ZtX2dwYV90b19tcGEodTY0IGdwYSkKIHsKIAl1NjQgcHRlID0ga3ZtX2xvb2t1cF9tcGEoZ3BhID4+IFBBR0VfU0hJRlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2luaXQuYyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKaW5kZXggMjAwMTAwZS4uMDU0YmNkOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2luaXQuYworKysgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KIAotI2luY2x1ZGUgPGFzbS9hLm91dC5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vaWEzMi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNzAxLDIzICs3MDAsNiBAQAogCiAJcmV0dXJuIHJldDsKIH0KLSNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRQotaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAxMjAgKiBIWjsKLQlpbnQgcmV0OwotCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0JZW5kX3BmbiA9IHN0YXJ0X3BmbiArIChzaXplID4+IFBBR0VfU0hJRlQpOwotCXJldCA9IG9mZmxpbmVfcGFnZXMoc3RhcnRfcGZuLCBlbmRfcGZuLCB0aW1lb3V0KTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQkvKiB3ZSBjYW4gZnJlZSBtZW1fbWFwIGF0IHRoaXMgcG9pbnQgKi8KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmVtb3ZlX21lbW9yeSk7Ci0jZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL0tjb25maWcgYi9hcmNoL20zMnIvS2NvbmZpZwppbmRleCBmNTcxMTNmLi5kYmFlZDRhIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvS2NvbmZpZworKysgYi9hcmNoL20zMnIvS2NvbmZpZwpAQCAtMzYsMTUgKzM2LDE0IEBACiBjb25maWcgTk9fRE1BCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgQVJDSF9TVVBQT1JUU19BT1VUCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgSFoKIAlpbnQKIAlkZWZhdWx0IDEwMAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiAKIG1lbnUgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYwppbmRleCA1YmU0ZmFhLi43MTAzZDkxIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTEsNyArMTEsNyBAQAogI3VuZGVmIERFQlVHX1BST0NFU1MKICNpZmRlZiBERUJVR19QUk9DRVNTCiAjZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKSAgcHJpbnRrKCIlczolZDolczogIiBmbXQsIF9fRklMRV9fLCBfX0xJTkVfXywgXAotICBfX0ZVTkNUSU9OX18sICMjYXJncykKKyAgX19mdW5jX18sICMjYXJncykKICNlbHNlCiAjZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGZjMjk5NDguLjM5Y2I2ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jCkBAIC00MCw2ICs0MCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jCmluZGV4IGNiYzNjNGMuLjdkYWY4OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9kaXNjb250aWcuYworKysgYi9hcmNoL20zMnIvbW0vZGlzY29udGlnLmMKQEAgLTExMSw5ICsxMTEsOSBAQAogCQkJCWluaXRyZF9zdGFydCwgSU5JVFJEX1NJWkUpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKCJpbml0cmQgZXh0ZW5kcyBiZXlvbmQgZW5kIG9mIG1lbW9yeSAiCi0JCQkJIigweCUwOGx4ID4gMHglMDhseClcbmRpc2FibGluZyBpbml0cmRcbiIsCisJCQkJIigweCUwOGx4ID4gMHglMDhsbHgpXG5kaXNhYmxpbmcgaW5pdHJkXG4iLAogCQkJCUlOSVRSRF9TVEFSVCArIElOSVRSRF9TSVpFLAotCQkJCVBGTl9QSFlTKG1heF9sb3dfcGZuKSk7CisJCQkgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpUEZOX1BIWVMobWF4X2xvd19wZm4pKTsKIAogCQkJaW5pdHJkX3N0YXJ0ID0gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCA4YzVlMWRlLi44MzZmYjY2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZworKysgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtNSw2ICs1LDcgQEAKIGNvbmZpZyBNNjhLCiAJYm9vbAogCWRlZmF1bHQgeQorCXNlbGVjdCBIQVZFX0FPVVQKIAlzZWxlY3QgSEFWRV9JREUKIAogY29uZmlnIE1NVQpAQCAtNTMsOSArNTQsNiBAQAogY29uZmlnIE5PX0RNQQogCWRlZl9ib29sIFNVTjMKIAotY29uZmlnIEFSQ0hfU1VQUE9SVFNfQU9VVAotCWRlZl9ib29sIHkKLQogY29uZmlnIEhaCiAJaW50CiAJZGVmYXVsdCAxMDAKQEAgLTY0LDYgKzYyLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwIgogCiBjb25maWcgRUlTQQpAQCAtMTA3LDIxICsxMDcsOSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBtb2R1bGVzLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZXMgd2lsbCBiZSBjYWxsZWQgcGNtY2lhX2NvcmUgYW5kIGRzLgogCi1jb25maWcgU1VOMwotCWJvb2wgIlN1bjMgc3VwcG9ydCIKLQlzZWxlY3QgTTY4MDIwCi0Jc2VsZWN0IE1NVV9TVU4zIGlmIE1NVQotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFN1biAzIHNlcmllcyBvZiB3b3Jrc3RhdGlvbnMKLQkgICgzLzUwLCAzLzYwLCAzLzF4eCwgMy8yeHggc3lzdGVtcykuIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHJlcXVpcmVzCi0JICB0aGF0IGFsbCBvdGhlciBoYXJkd2FyZSB0eXBlcyBtdXN0IGJlIGRpc2FibGVkLCBhcyBTdW4gMyBrZXJuZWxzCi0JICBhcmUgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIG02OGsgdGFyZ2V0cyAoaW5jbHVkaW5nIFN1biAzeCEpLgotCi0JICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBjb21waWxlIGEga2VybmVsIGV4Y2x1c2l2ZWx5IGZvciBhIFN1biAzLCBzYXkgTi4KLQogY29uZmlnIEFNSUdBCiAJYm9vbCAiQW1pZ2Egc3VwcG9ydCIKLQlkZXBlbmRzIG9uICFNTVVfU1VOMworCXNlbGVjdCBNTVVfTU9UT1JPTEEgaWYgTU1VCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQW1pZ2Egc2VyaWVzIG9mIGNvbXB1dGVycy4gSWYKIAkgIHlvdSBwbGFuIHRvIHVzZSB0aGlzIGtlcm5lbCBvbiBhbiBBbWlnYSwgc2F5IFkgaGVyZSBhbmQgYnJvd3NlIHRoZQpAQCAtMTI5LDMzICsxMTcsMTYgQEAKIAogY29uZmlnIEFUQVJJCiAJYm9vbCAiQXRhcmkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uICFNTVVfU1VOMworCXNlbGVjdCBNTVVfTU9UT1JPTEEgaWYgTU1VCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgNjgwMDAtYmFzZWQgQXRhcmkgc2VyaWVzIG9mCiAJICBjb21wdXRlcnMgKGluY2x1ZGluZyB0aGUgVFQsIEZhbGNvbiBhbmQgTWVkdXNhKS4gSWYgeW91IHBsYW4gdG8gdXNlCiAJICB0aGlzIGtlcm5lbCBvbiBhbiBBdGFyaSwgc2F5IFkgaGVyZSBhbmQgYnJvd3NlIHRoZSBtYXRlcmlhbAogCSAgYXZhaWxhYmxlIGluIDxmaWxlOkRvY3VtZW50YXRpb24vbTY4az47IG90aGVyd2lzZSBzYXkgTi4KIAotY29uZmlnIEhBREVTCi0JYm9vbCAiSGFkZXMgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFUQVJJICYmIEJST0tFTgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEhhZGVzIEF0YXJpIGNsb25lLiBJZiB5b3UgcGxhbgotCSAgdG8gdXNlIHRoaXMga2VybmVsIG9uIGEgSGFkZXMsIHNheSBZIGhlcmU7IG90aGVyd2lzZSBzYXkgTi4KLQotY29uZmlnIFBDSQotCWJvb2wKLQlkZXBlbmRzIG9uIEhBREVTCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgRmluZCBvdXQgd2hldGhlciB5b3UgaGF2ZSBhIFBDSSBtb3RoZXJib2FyZC4gUENJIGlzIHRoZSBuYW1lIG9mIGEKLQkgIGJ1cyBzeXN0ZW0sIGkuZS4gdGhlIHdheSB0aGUgQ1BVIHRhbGtzIHRvIHRoZSBvdGhlciBzdHVmZiBpbnNpZGUKLQkgIHlvdXIgYm94LiBPdGhlciBidXMgc3lzdGVtcyBhcmUgSVNBLCBFSVNBLCBNaWNyb0NoYW5uZWwgKE1DQSkgb3IKLQkgIFZFU0EuIElmIHlvdSBoYXZlIFBDSSwgc2F5IFksIG90aGVyd2lzZSBOLgotCiBjb25maWcgTUFDCiAJYm9vbCAiTWFjaW50b3NoIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwlzZWxlY3QgTU1VX01PVE9ST0xBIGlmIE1NVQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFwcGxlIE1hY2ludG9zaCBzZXJpZXMgb2YKIAkgIGNvbXB1dGVycyAoeWVzLCB0aGVyZSBpcyBleHBlcmltZW50YWwgc3VwcG9ydCBub3csIGF0IGxlYXN0IGZvciBwYXJ0CkBAIC0xNzYsMTQgKzE0NywxNCBAQAogCiBjb25maWcgQVBPTExPCiAJYm9vbCAiQXBvbGxvIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwlzZWxlY3QgTU1VX01PVE9ST0xBIGlmIE1NVQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gcnVuIExpbnV4IG9uIGFuIE1DNjgweDAtYmFzZWQgQXBvbGxvCiAJICBEb21haW4gd29ya3N0YXRpb24gc3VjaCBhcyB0aGUgRE4zNTAwLgogCiBjb25maWcgVk1FCiAJYm9vbCAiVk1FIChNb3Rvcm9sYSBhbmQgQlZNKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gIU1NVV9TVU4zCisJc2VsZWN0IE1NVV9NT1RPUk9MQSBpZiBNTVUKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIGEga2VybmVsIGZvciBhIDY4MHgwIGJhc2VkIFZNRQogCSAgYm9hcmQuICBCb2FyZHMgY3VycmVudGx5IHN1cHBvcnRlZCBpbmNsdWRlIE1vdG9yb2xhIGJvYXJkcyBNVk1FMTQ3LApAQCAtMjIwLDcgKzE5MSw3IEBACiAKIGNvbmZpZyBIUDMwMAogCWJvb2wgIkhQOTAwMC8zMDAgYW5kIEhQOTAwMC80MDAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uICFNTVVfU1VOMworCXNlbGVjdCBNTVVfTU9UT1JPTEEgaWYgTU1VCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgSFA5MDAwLzMwMCBhbmQgSFA5MDAwLzQwMCBzZXJpZXMKIAkgIG9mIHdvcmtzdGF0aW9ucy4gU3VwcG9ydCBmb3IgdGhlc2UgbWFjaGluZXMgaXMgc3RpbGwgc29tZXdoYXQKQEAgLTIzOSw3ICsyMTAsNyBAQAogCiBjb25maWcgU1VOM1gKIAlib29sICJTdW4zeCBzdXBwb3J0IgotCWRlcGVuZHMgb24gIU1NVV9TVU4zCisJc2VsZWN0IE1NVV9NT1RPUk9MQSBpZiBNTVUKIAlzZWxlY3QgTTY4MDMwCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgU3VuIDN4IHNlcmllcyBvZiB3b3Jrc3RhdGlvbnMuCkBAIC0yNTIsNyArMjIzLDcgQEAKIAogY29uZmlnIFE0MAogCWJvb2wgIlE0MC9RNjAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uICFNTVVfU1VOMworCXNlbGVjdCBNTVVfTU9UT1JPTEEgaWYgTU1VCiAJaGVscAogCSAgVGhlIFE0MCBpcyBhIE1vdG9yb2xhIDY4MDQwLWJhc2VkIHN1Y2Nlc3NvciB0byB0aGUgU2luY2xhaXIgUUwKIAkgIG1hbnVmYWN0dXJlZCBpbiBHZXJtYW55LiAgVGhlcmUgaXMgYW4gb2ZmaWNpYWwgUTQwIGhvbWUgcGFnZSBhdApAQCAtMjYwLDYgKzIzMSwxOSBAQAogCSAgUTYwLiBTZWxlY3QgeW91ciBDUFUgYmVsb3cuICBGb3IgNjhMQzA2MCBkb24ndCBmb3JnZXQgdG8gZW5hYmxlIEZQVQogCSAgZW11bGF0aW9uLgogCitjb25maWcgU1VOMworCWJvb2wgIlN1bjMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFNTVVfTU9UT1JPTEEKKwlzZWxlY3QgTU1VX1NVTjMgaWYgTU1VCisJc2VsZWN0IE02ODAyMAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFN1biAzIHNlcmllcyBvZiB3b3Jrc3RhdGlvbnMKKwkgICgzLzUwLCAzLzYwLCAzLzF4eCwgMy8yeHggc3lzdGVtcykuIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHJlcXVpcmVzCisJICB0aGF0IGFsbCBvdGhlciBoYXJkd2FyZSB0eXBlcyBtdXN0IGJlIGRpc2FibGVkLCBhcyBTdW4gMyBrZXJuZWxzCisJICBhcmUgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIG02OGsgdGFyZ2V0cyAoaW5jbHVkaW5nIFN1biAzeCEpLgorCisJICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBjb21waWxlIGEga2VybmVsIGV4Y2x1c2l2ZWx5IGZvciBhIFN1biAzLCBzYXkgTi4KKwogY29tbWVudCAiUHJvY2Vzc29yIHR5cGUiCiAKIGNvbmZpZyBNNjgwMjAKQEAgLTI5NywxMCArMjgxLDEwIEBACiBjb25maWcgTU1VX01PVE9ST0xBCiAJYm9vbAogCWRlcGVuZHMgb24gTU1VICYmICFNTVVfU1VOMwotCWRlZmF1bHQgeQogCiBjb25maWcgTU1VX1NVTjMKIAlib29sCisJZGVwZW5kcyBvbiBNTVUgJiYgIU1NVV9NT1RPUk9MQQogCiBjb25maWcgTTY4S0ZQVV9FTVUKIAlib29sICJNYXRoIGVtdWxhdGlvbiBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCmluZGV4IGRmNjc5ZDkuLjBhM2Y5ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYworKysgYi9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC96b3Jyby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tleWJvYXJkLmg+CiAKICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTk4NCwzICs5ODUsMTEgQEAKIAogCXJldHVybiBsZW47CiB9CisKKy8qCisgKiBUaGUgQW1pZ2Ega2V5Ym9hcmQgZHJpdmVyIG5lZWRzIGtleV9tYXBzLCBidXQgd2UgY2Fubm90IGV4cG9ydCBpdCBpbgorICogZHJpdmVycy9jaGFyL2RlZmtleW1hcC5jLCBhcyBpdCBpcyBhdXRvZ2VuZXJhdGVkCisgKi8KKyNpZmRlZiBDT05GSUdfSFdfQ09OU09MRQorRVhQT1JUX1NZTUJPTF9HUEwoa2V5X21hcHMpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvTWFrZWZpbGUgYi9hcmNoL202OGsvYXRhcmkvTWFrZWZpbGUKaW5kZXggMmNkOTA1ZS4uMGNhYzcyMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL01ha2VmaWxlCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9NYWtlZmlsZQpAQCAtNSw3ICs1LDQgQEAKIG9iai15CQk6PSBjb25maWcubyB0aW1lLm8gZGVidWcubyBhdGFpbnRzLm8gc3RkbWEubyBcCiAJCQlhdGFzb3VuZC5vIHN0cmFtLm8KIAotaWZlcSAoJChDT05GSUdfUENJKSx5KQotb2JqLSQoQ09ORklHX0hBREVTKQkrPSBoYWRlcy1wY2kubwotZW5kaWYKIG9iai0kKENPTkZJR19BVEFSSV9LQkRfQ09SRSkJKz0gYXRha2V5Yi5vCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvYXRhaW50cy5jIGIvYXJjaC9tNjhrL2F0YXJpL2F0YWludHMuYwppbmRleCBiNDU1OTNhLi5kYmE0YWZhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvYXRhaW50cy5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMKQEAgLTQwNywxMCArNDA3LDggQEAKIAkJICogZ2V0cyBvdmVycnVucykKIAkJICovCiAKLQkJaWYgKCFNQUNIX0lTX0hBREVTKSB7Ci0JCQl2ZWN0b3JzW1ZFQ19JTlQyXSA9IGZhbGNvbl9oYmxoYW5kbGVyOwotCQkJdmVjdG9yc1tWRUNfSU5UNF0gPSBmYWxjb25faGJsaGFuZGxlcjsKLQkJfQorCQl2ZWN0b3JzW1ZFQ19JTlQyXSA9IGZhbGNvbl9oYmxoYW5kbGVyOworCQl2ZWN0b3JzW1ZFQ19JTlQ0XSA9IGZhbGNvbl9oYmxoYW5kbGVyOwogCX0KIAogCWlmIChBVEFSSUhXX1BSRVNFTlQoUENNXzhCSVQpICYmIEFUQVJJSFdfUFJFU0VOVChNSUNST1dJUkUpKSB7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvYXRha2V5Yi5jIGIvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYwppbmRleCBiYjk1OWZiLi5jMDM4YjdjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvYXRha2V5Yi5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFrZXliLmMKQEAgLTYzNSwxNSArNjM1LDMgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGF0YXJpX2tleWJfaW5pdCk7Ci0KLWludCBhdGFyaV9rYmRfdHJhbnNsYXRlKHVuc2lnbmVkIGNoYXIga2V5Y29kZSwgdW5zaWduZWQgY2hhciAqa2V5Y29kZXAsIGNoYXIgcmF3X21vZGUpCi17Ci0jaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi0JLyogQUxUK0hFTFAgcHJlc3NlZD8gKi8KLQlpZiAoKGtleWNvZGUgPT0gOTgpICYmICgoc2hpZnRfc3RhdGUgJiAweGZmKSA9PSA4KSkKLQkJKmtleWNvZGVwID0gMHhmZjsKLQllbHNlCi0jZW5kaWYKLQkJKmtleWNvZGVwID0ga2V5Y29kZTsKLQlyZXR1cm4gMTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYwppbmRleCA1OTQ1ZTE1Li5hZjAzMTg1IDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAkgKi8KIAogCXByaW50aygiQXRhcmkgaGFyZHdhcmUgZm91bmQ6ICIpOwotCWlmIChNQUNIX0lTX01FRFVTQSB8fCBNQUNIX0lTX0hBREVTKSB7CisJaWYgKE1BQ0hfSVNfTUVEVVNBKSB7CiAJCS8qIFRoZXJlJ3Mgbm8gQXRhcmkgdmlkZW8gaGFyZHdhcmUgb24gdGhlIE1lZHVzYSwgYnV0IGFsbCB0aGUKIAkJICogYWRkcmVzc2VzIGJlbG93IGdlbmVyYXRlIGEgRFRBQ0sgc28gbm8gYnVzIGVycm9yIG9jY3VycyEgKi8KIAl9IGVsc2UgaWYgKGh3cmVnX3ByZXNlbnQoZjAzMF94cmVnKSkgewpAQCAtMjY5LDEwICsyNjksNiBAQAogCQlBVEFSSUhXX1NFVChTQ1NJX0RNQSk7CiAJCXByaW50aygiVFRfU0NTSV9ETUEgIik7CiAJfQotCWlmICghTUFDSF9JU19IQURFUyAmJiBod3JlZ19wcmVzZW50KCZzdF9kbWEuZG1hX2hpKSkgewotCQlBVEFSSUhXX1NFVChTVE5EX0RNQSk7Ci0JCXByaW50aygiU1RORF9ETUEgIik7Ci0JfQogCS8qCiAJICogVGhlIFNULURNQSBhZGRyZXNzIHJlZ2lzdGVycyBhcmVuJ3QgcmVhZGFibGUKIAkgKiBvbiBhbGwgTWVkdXNhcywgc28gdGhlIHRlc3QgYmVsb3cgbWF5IGZhaWwKQEAgLTI5NCwxMiArMjkwLDExIEBACiAJCUFUQVJJSFdfU0VUKFlNXzIxNDkpOwogCQlwcmludGsoIllNMjE0OSAiKTsKIAl9Ci0JaWYgKCFNQUNIX0lTX01FRFVTQSAmJiAhTUFDSF9JU19IQURFUyAmJgotCQlod3JlZ19wcmVzZW50KCZ0dF9kbWFzbmQuY3RybCkpIHsKKwlpZiAoIU1BQ0hfSVNfTUVEVVNBICYmIGh3cmVnX3ByZXNlbnQoJnR0X2RtYXNuZC5jdHJsKSkgewogCQlBVEFSSUhXX1NFVChQQ01fOEJJVCk7CiAJCXByaW50aygiUENNICIpOwogCX0KLQlpZiAoIU1BQ0hfSVNfSEFERVMgJiYgaHdyZWdfcHJlc2VudCgmZmFsY29uX2NvZGVjLnVudXNlZDUpKSB7CisJaWYgKGh3cmVnX3ByZXNlbnQoJmZhbGNvbl9jb2RlYy51bnVzZWQ1KSkgewogCQlBVEFSSUhXX1NFVChDT0RFQyk7CiAJCXByaW50aygiQ09ERUMgIik7CiAJfQpAQCAtMzEzLDcgKzMwOCw3IEBACiAJICAgICh0dF9zY2NfZG1hLmRtYV9jdHJsID0gMHgwMSwgKHR0X3NjY19kbWEuZG1hX2N0cmwgJiAxKSA9PSAxKSAmJgogCSAgICAodHRfc2NjX2RtYS5kbWFfY3RybCA9IDB4MDAsICh0dF9zY2NfZG1hLmRtYV9jdHJsICYgMSkgPT0gMCkKICNlbHNlCi0JICAgICFNQUNIX0lTX01FRFVTQSAmJiAhTUFDSF9JU19IQURFUworCSAgICAhTUFDSF9JU19NRURVU0EKICNlbmRpZgogCSAgICApIHsKIAkJQVRBUklIV19TRVQoU0NDX0RNQSk7CkBAIC0zMjcsMTAgKzMyMiw3IEBACiAJCUFUQVJJSFdfU0VUKFNUX0VTQ0MpOwogCQlwcmludGsoIlNUX0VTQ0MgIik7CiAJfQotCWlmIChNQUNIX0lTX0hBREVTKSB7Ci0JCUFUQVJJSFdfU0VUKFZNRSk7Ci0JCXByaW50aygiVk1FICIpOwotCX0gZWxzZSBpZiAoaHdyZWdfcHJlc2VudCgmdHRfc2N1LnN5c19tYXNrKSkgeworCWlmIChod3JlZ19wcmVzZW50KCZ0dF9zY3Uuc3lzX21hc2spKSB7CiAJCUFUQVJJSFdfU0VUKFNDVSk7CiAJCS8qIEFzc3VtZSBhIFZNRSBidXMgaWYgdGhlcmUncyBhIFNDVSAqLwogCQlBVEFSSUhXX1NFVChWTUUpOwpAQCAtMzQwLDcgKzMzMiw3IEBACiAJCUFUQVJJSFdfU0VUKEFOQUxPR19KT1kpOwogCQlwcmludGsoIkFOQUxPR19KT1kgIik7CiAJfQotCWlmICghTUFDSF9JU19IQURFUyAmJiBod3JlZ19wcmVzZW50KGJsaXR0ZXIuaGFsZnRvbmUpKSB7CisJaWYgKGh3cmVnX3ByZXNlbnQoYmxpdHRlci5oYWxmdG9uZSkpIHsKIAkJQVRBUklIV19TRVQoQkxJVFRFUik7CiAJCXByaW50aygiQkxJVFRFUiAiKTsKIAl9CkBAIC0zNDksOCArMzQxLDcgQEAKIAkJcHJpbnRrKCJJREUgIik7CiAJfQogI2lmIDEgLyogVGhpcyBtYXliZSB3cm9uZyAqLwotCWlmICghTUFDSF9JU19NRURVU0EgJiYgIU1BQ0hfSVNfSEFERVMgJiYKLQkgICAgaHdyZWdfcHJlc2VudCgmdHRfbWljcm93aXJlLmRhdGEpICYmCisJaWYgKCFNQUNIX0lTX01FRFVTQSAmJiBod3JlZ19wcmVzZW50KCZ0dF9taWNyb3dpcmUuZGF0YSkgJiYKIAkgICAgaHdyZWdfcHJlc2VudCgmdHRfbWljcm93aXJlLm1hc2spICYmCiAJICAgICh0dF9taWNyb3dpcmUubWFzayA9IDB4N2ZmLAogCSAgICAgdWRlbGF5KDEpLApAQCAtMzY5LDE5ICszNjAsMTggQEAKIAkJbWFjaF9od2NsayA9IGF0YXJpX3R0X2h3Y2xrOwogCQltYWNoX3NldF9jbG9ja19tbXNzID0gYXRhcmlfdHRfc2V0X2Nsb2NrX21tc3M7CiAJfQotCWlmICghTUFDSF9JU19IQURFUyAmJiBod3JlZ19wcmVzZW50KCZtc3RlX3J0Yy5zZWNfb25lcykpIHsKKwlpZiAoaHdyZWdfcHJlc2VudCgmbXN0ZV9ydGMuc2VjX29uZXMpKSB7CiAJCUFUQVJJSFdfU0VUKE1TVEVfQ0xLKTsKIAkJcHJpbnRrKCJNU1RFX0NMSyAiKTsKIAkJbWFjaF9od2NsayA9IGF0YXJpX21zdGVfaHdjbGs7CiAJCW1hY2hfc2V0X2Nsb2NrX21tc3MgPSBhdGFyaV9tc3RlX3NldF9jbG9ja19tbXNzOwogCX0KLQlpZiAoIU1BQ0hfSVNfTUVEVVNBICYmICFNQUNIX0lTX0hBREVTICYmCi0JICAgIGh3cmVnX3ByZXNlbnQoJmRtYV93ZC5mZGNfc3BlZWQpICYmCisJaWYgKCFNQUNIX0lTX01FRFVTQSAmJiBod3JlZ19wcmVzZW50KCZkbWFfd2QuZmRjX3NwZWVkKSAmJgogCSAgICBod3JlZ193cml0ZSgmZG1hX3dkLmZkY19zcGVlZCwgMCkpIHsKIAkJQVRBUklIV19TRVQoRkRDU1BFRUQpOwogCQlwcmludGsoIkZEQ19TUEVFRCAiKTsKIAl9Ci0JaWYgKCFNQUNIX0lTX0hBREVTICYmICFBVEFSSUhXX1BSRVNFTlQoU1RfU0NTSSkpIHsKKwlpZiAoIUFUQVJJSFdfUFJFU0VOVChTVF9TQ1NJKSkgewogCQlBVEFSSUhXX1NFVChBQ1NJKTsKIAkJcHJpbnRrKCJBQ1NJICIpOwogCX0KQEAgLTQ0OSw3ICs0MzksNyBAQAogCSAqIDB4RkZ4eHh4eHggLT4gMHgwMHh4eHh4eCwgc28gdGhhdCB0aGUgZmlyc3QgMTZNQiBpcyBhY2Nlc3NpYmxlCiAJICogaW4gdGhlIGxhc3QgMTZNQiBvZiB0aGUgYWRkcmVzcyBzcGFjZS4KIAkgKi8KLQl0b3NfdmVyc2lvbiA9IChNQUNIX0lTX01FRFVTQSB8fCBNQUNIX0lTX0hBREVTKSA/CisJdG9zX3ZlcnNpb24gPSAoTUFDSF9JU19NRURVU0EpID8KIAkJCTB4ZmZmIDogKih1bnNpZ25lZCBzaG9ydCAqKTB4ZmYwMDAwMDI7CiAJYXRhcmlfcnRjX3llYXJfb2Zmc2V0ID0gKHRvc192ZXJzaW9uIDwgMHgzMDYpID8gNzAgOiA2ODsKIH0KQEAgLTUxMSw4ICs1MDEsNyBAQAogCSAqIE9uIHRoZSBNZWR1c2EsIHBoeXMuIDB4NCBtYXkgY29udGFpbiBnYXJiYWdlIGJlY2F1c2UgaXQncyBubwogCSAqIFJPTS4gIFNlZSBhYm92ZSBmb3IgZXhwbGFuYXRpb24gd2h5IHdlIGNhbm5vdCB1c2UgUFRPVig0KS4KIAkgKi8KLQlyZXNldF9hZGRyID0gTUFDSF9JU19IQURFUyA/IDB4N2ZlMDAwMzAgOgotCQkgICAgIE1BQ0hfSVNfTUVEVVNBIHx8IE1BQ0hfSVNfQUI0MCA/IDB4ZTAwMDMwIDoKKwlyZXNldF9hZGRyID0gTUFDSF9JU19NRURVU0EgfHwgTUFDSF9JU19BQjQwID8gMHhlMDAwMzAgOgogCQkgICAgICoodW5zaWduZWQgbG9uZyAqKSAweGZmMDAwMDA0OwogCiAJLyogcmVzZXQgQUNJQSBmb3Igc3dpdGNoIG9mZiBPdmVyU2NhbiwgaWYgaXQncyBhY3RpdmUgKi8KQEAgLTYwNiw4ICs1OTUsNiBAQAogCQlpZiAoTUFDSF9JU19NRURVU0EpCiAJCQkvKiBNZWR1c2EgaGFzIFRUIF9NQ0ggY29va2llICovCiAJCQlzdHJjYXQobW9kZWwsICJNZWR1c2EiKTsKLQkJZWxzZSBpZiAoTUFDSF9JU19IQURFUykKLQkJCXN0cmNhdChtb2RlbCwgIkhhZGVzIik7CiAJCWVsc2UKIAkJCXN0cmNhdChtb2RlbCwgIlRUIik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2hhZGVzLXBjaS5jIGIvYXJjaC9tNjhrL2F0YXJpL2hhZGVzLXBjaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmJhYmMwLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9hdGFyaS9oYWRlcy1wY2kuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0MCArMCwwIEBACi0vKgotICogaGFkZXMtcGNpLmMgLSBIYXJkd2FyZSBzcGVjaWZpYyBQQ0kgQklPUyBmdW5jdGlvbnMgdGhlIEhhZGVzIEF0YXJpIGNsb25lLgotICoKLSAqIFdyaXR0ZW4gYnkgV291dCBLbGFyZW4uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2lmIDAKLSMgZGVmaW5lIERCR19ERVZTKGFyZ3MpCQlwcmludGsgYXJncwotI2Vsc2UKLSMgZGVmaW5lIERCR19ERVZTKGFyZ3MpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfSEFERVMpCi0KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLQotI2luY2x1ZGUgPGFzbS9hdGFyaWh3Lmg+Ci0jaW5jbHVkZSA8YXNtL2F0YXJpaW50cy5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLSNpbmNsdWRlIDxhc20vcGNpLmg+Ci0KLSNkZWZpbmUgSEFERVNfTUVNX0JBU0UJCTB4ODAwMDAwMDAKLSNkZWZpbmUgSEFERVNfTUVNX1NJWkUJCTB4MjAwMDAwMDAKLSNkZWZpbmUgSEFERVNfQ09ORklHX0JBU0UJMHhBMDAwMDAwMAotI2RlZmluZSBIQURFU19DT05GSUdfU0laRQkweDEwMDAwMDAwCi0jZGVmaW5lIEhBREVTX0lPX0JBU0UJCTB4QjAwMDAwMDAKLSNkZWZpbmUgSEFERVNfSU9fU0laRQkJMHgxMDAwMDAwMAotI2RlZmluZSBIQURFU19WSVJUX0lPX1NJWkUJMHgwMDAxMDAwMAkvKiBPbmx5IDY0ayBpcyByZW1hcHBlZCBhbmQgYWN0dWFsbHkgdXNlZC4gKi8KLQotI2RlZmluZSBOX1NMT1RTCQkJCTQJCQkvKiBOdW1iZXIgb2YgUENJIHNsb3RzLiAqLwotCi1zdGF0aWMgY29uc3QgY2hhciBwY2lfbWVtX25hbWVbXSA9ICJQQ0kgbWVtb3J5IHNwYWNlIjsKLXN0YXRpYyBjb25zdCBjaGFyIHBjaV9pb19uYW1lW10gPSAiUENJIEkvTyBzcGFjZSI7Ci1zdGF0aWMgY29uc3QgY2hhciBwY2lfY29uZmlnX25hbWVbXSA9ICJQQ0kgY29uZmlnIHNwYWNlIjsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb25maWdfc3BhY2UgPSB7Ci0gICAgLm5hbWUgPSBwY2lfY29uZmlnX25hbWUsCi0gICAgLnN0YXJ0ID0gSEFERVNfQ09ORklHX0JBU0UsCi0gICAgLmVuZCA9IEhBREVTX0NPTkZJR19CQVNFICsgSEFERVNfQ09ORklHX1NJWkUgLSAxCi19Owotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpb19zcGFjZSA9IHsKLSAgICAubmFtZSA9IHBjaV9pb19uYW1lLAotICAgIC5zdGFydCA9IEhBREVTX0lPX0JBU0UsCi0gICAgLmVuZCA9IEhBREVTX0lPX0JBU0UgKyBIQURFU19JT19TSVpFIC0gMQotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgcGNpX2NvbmZfYmFzZV9waHlzW10gPSB7Ci0gICAgMHhBMDA4MDAwMCwgMHhBMDA0MDAwMCwgMHhBMDAyMDAwMCwgMHhBMDAxMDAwMAotfTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBjaV9jb25mX2Jhc2VfdmlydFtOX1NMT1RTXTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBjaV9pb19iYXNlX3ZpcnQ7Ci0KLS8qCi0gKiBzdGF0aWMgdm9pZCAqbWtfY29uZl9hZGRyKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25lZCBjaGFyIGRldmljZV9mbiwKLSAqCQkJICAgICB1bnNpZ25lZCBjaGFyIHdoZXJlKQotICoKLSAqIENhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgUENJIGNvbmZpZ3VyYXRpb24gYXJlYSBvZiB0aGUgZ2l2ZW4KLSAqIGRldmljZS4KLSAqCi0gKiBCVUc6IGJvYXJkcyB3aXRoIG11bHRpcGxlIGZ1bmN0aW9ucyBhcmUgcHJvYmFibHkgbm90IGNvcnJlY3RseQotICogc3VwcG9ydGVkLgotICovCi0KLXN0YXRpYyB2b2lkICpta19jb25mX2FkZHIoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlKQotewotCWludCBkZXZpY2UgPSBkZXYtPmRldmZuID4+IDMsIGZ1bmN0aW9uID0gZGV2LT5kZXZmbiAmIDc7Ci0Jdm9pZCAqcmVzdWx0OwotCi0JREJHX0RFVlMoKCJta19jb25mX2FkZHIoYnVzPSVkICxkZXZpY2VfZm49MHgleCwgd2hlcmU9MHgleCwgcGNpX2FkZHI9MHglcClcbiIsCi0JCSAgZGV2LT5idXMtPm51bWJlciwgZGV2LT5kZXZmbiwgd2hlcmUsIHBjaV9hZGRyKSk7Ci0KLQlpZiAoZGV2aWNlID4gMykKLQl7Ci0JCURCR19ERVZTKCgibWtfY29uZl9hZGRyOiBkZXZpY2UgKCVkKSA+IDMsIHJldHVybmluZyBOVUxMXG4iLCBkZXZpY2UpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKGRldi0+YnVzLT5udW1iZXIgIT0gMCkKLQl7Ci0JCURCR19ERVZTKCgibWtfY29uZl9hZGRyOiBidXMgKCVkKSA+IDAsIHJldHVybmluZyBOVUxMXG4iLCBkZXZpY2UpKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmVzdWx0ID0gKHZvaWQgKikgKHBjaV9jb25mX2Jhc2VfdmlydFtkZXZpY2VdIHwgKGZ1bmN0aW9uIDw8IDgpIHwgKHdoZXJlKSk7Ci0JREJHX0RFVlMoKCJta19jb25mX2FkZHI6IHJldHVybmluZyBwY2lfYWRkciAweCVseFxuIiwgKHVuc2lnbmVkIGxvbmcpIHJlc3VsdCkpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQgaGFkZXNfcmVhZF9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHU4ICp2YWx1ZSkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwY2lfYWRkcjsKLQotCSp2YWx1ZSA9IDB4ZmY7Ci0KLQlpZiAoKHBjaV9hZGRyID0gKHVuc2lnbmVkIGNoYXIgKikgbWtfY29uZl9hZGRyKGRldiwgd2hlcmUpKSA9PSBOVUxMKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JKnZhbHVlID0gKnBjaV9hZGRyOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCBoYWRlc19yZWFkX2NvbmZpZ193b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTE2ICp2YWx1ZSkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcGNpX2FkZHI7Ci0KLQkqdmFsdWUgPSAweGZmZmY7Ci0KLQlpZiAod2hlcmUgJiAweDEpCi0JCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7Ci0KLQlpZiAoKHBjaV9hZGRyID0gKHVuc2lnbmVkIHNob3J0ICopIG1rX2NvbmZfYWRkcihkZXYsIHdoZXJlKSkgPT0gTlVMTCkKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCSp2YWx1ZSA9IGxlMTZfdG9fY3B1KCpwY2lfYWRkcik7Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IGhhZGVzX3JlYWRfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTMyICp2YWx1ZSkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnBjaV9hZGRyOwotCXVuc2lnbmVkIGNoYXIgaGVhZGVyX3R5cGU7Ci0JaW50IHJlc3VsdDsKLQotCSp2YWx1ZSA9IDB4ZmZmZmZmZmY7Ci0KLQlpZiAod2hlcmUgJiAweDMpCi0JCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7Ci0KLQlpZiAoKHBjaV9hZGRyID0gKHVuc2lnbmVkIGludCAqKSBta19jb25mX2FkZHIoZGV2LCB3aGVyZSkpID09IE5VTEwpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQkqdmFsdWUgPSBsZTMyX3RvX2NwdSgqcGNpX2FkZHIpOwotCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYW4gYWRkcmVzcyBvbiB0aGUgYnVzLiBJZiB0cnVlLCBhZGQgdGhlCi0JICogYmFzZSBhZGRyZXNzIG9mIHRoZSBQQ0kgbWVtb3J5IG9yIFBDSSBJL08gYXJlYSBvbiB0aGUgSGFkZXMuCi0JICovCi0KLQlpZiAoKHJlc3VsdCA9IGhhZGVzX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSEVBREVSX1RZUEUsCi0JCQkJCSAgICAgJmhlYWRlcl90eXBlKSkgIT0gUENJQklPU19TVUNDRVNTRlVMKQotCQlyZXR1cm4gcmVzdWx0OwotCi0JaWYgKCgod2hlcmUgPj0gUENJX0JBU0VfQUREUkVTU18wKSAmJiAod2hlcmUgPD0gUENJX0JBU0VfQUREUkVTU18xKSkgfHwKLQkgICAgKChoZWFkZXJfdHlwZSAhPSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSAmJiAoKHdoZXJlID49IFBDSV9CQVNFX0FERFJFU1NfMikgJiYKLQkJCQkJCQkgKHdoZXJlIDw9IFBDSV9CQVNFX0FERFJFU1NfNSkpKSkKLQl7Ci0JCWlmICgoKnZhbHVlICYgUENJX0JBU0VfQUREUkVTU19TUEFDRSkgPT0gUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTykKLQkJewotCQkJLyoKLQkJCSAqIEJhc2UgYWRkcmVzcyByZWdpc3RlciB0aGF0IGNvbnRhaW5zIGFuIEkvTyBhZGRyZXNzLiBJZiB0aGUKLQkJCSAqIGFkZHJlc3MgaXMgdmFsaWQgb24gdGhlIEhhZGVzICgwIDw9ICp2YWx1ZSA8IEhBREVTX1ZJUlRfSU9fU0laRSksCi0JCQkgKiBhZGQgJ3BjaV9pb19iYXNlX3ZpcnQnIHRvIHRoZSB2YWx1ZS4KLQkJCSAqLwotCi0JCQlpZiAoKnZhbHVlIDwgSEFERVNfVklSVF9JT19TSVpFKQotCQkJCSp2YWx1ZSArPSBwY2lfaW9fYmFzZV92aXJ0OwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyoKLQkJCSAqIEJhc2UgYWRkcmVzcyByZWdpc3RlciB0aGF0IGNvbnRhaW5zIGFuIG1lbW9yeSBhZGRyZXNzLiBJZiB0aGUKLQkJCSAqIGFkZHJlc3MgaXMgdmFsaWQgb24gdGhlIEhhZGVzICgwIDw9ICp2YWx1ZSA8IEhBREVTX01FTV9TSVpFKSwKLQkJCSAqIGFkZCBIQURFU19NRU1fQkFTRSB0byB0aGUgdmFsdWUuCi0JCQkgKi8KLQotCQkJaWYgKCp2YWx1ZSA9PSAwKQotCQkJewotCQkJCS8qCi0JCQkJICogQmFzZSBhZGRyZXNzIGlzIDAuIFRlc3QgaWYgdGhpcyBiYXNlCi0JCQkJICogYWRkcmVzcyByZWdpc3RlciBpcyB1c2VkLgotCQkJCSAqLwotCi0JCQkJKnBjaV9hZGRyID0gMHhmZmZmZmZmZjsKLQkJCQlpZiAoKnBjaV9hZGRyICE9IDApCi0JCQkJewotCQkJCQkqcGNpX2FkZHIgPSAqdmFsdWU7Ci0JCQkJCWlmICgqdmFsdWUgPCBIQURFU19NRU1fU0laRSkKLQkJCQkJCSp2YWx1ZSArPSBIQURFU19NRU1fQkFTRTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJaWYgKCp2YWx1ZSA8IEhBREVTX01FTV9TSVpFKQotCQkJCQkqdmFsdWUgKz0gSEFERVNfTUVNX0JBU0U7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IGhhZGVzX3dyaXRlX2NvbmZpZ19ieXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTggdmFsdWUpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcGNpX2FkZHI7Ci0KLQlpZiAoKHBjaV9hZGRyID0gKHVuc2lnbmVkIGNoYXIgKikgbWtfY29uZl9hZGRyKGRldiwgd2hlcmUpKSA9PSBOVUxMKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JKnBjaV9hZGRyID0gdmFsdWU7Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IGhhZGVzX3dyaXRlX2NvbmZpZ193b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTE2IHZhbHVlKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpwY2lfYWRkcjsKLQotCWlmICgocGNpX2FkZHIgPSAodW5zaWduZWQgc2hvcnQgKikgbWtfY29uZl9hZGRyKGRldiwgd2hlcmUpKSA9PSBOVUxMKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JKnBjaV9hZGRyID0gY3B1X3RvX2xlMTYodmFsdWUpOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCBoYWRlc193cml0ZV9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1MzIgdmFsdWUpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwY2lfYWRkcjsKLQl1bnNpZ25lZCBjaGFyIGhlYWRlcl90eXBlOwotCWludCByZXN1bHQ7Ci0KLQlpZiAoKHBjaV9hZGRyID0gKHVuc2lnbmVkIGludCAqKSBta19jb25mX2FkZHIoZGV2LCB3aGVyZSkpID09IE5VTEwpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQkvKgotCSAqIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyBhbiBhZGRyZXNzIG9uIHRoZSBidXMuIElmIHRydWUsIHN1YnRyYWN0IHRoZQotCSAqIGJhc2UgYWRkcmVzcyBvZiB0aGUgUENJIG1lbW9yeSBvciBQQ0kgSS9PIGFyZWEgb24gdGhlIEhhZGVzLgotCSAqLwotCi0JaWYgKChyZXN1bHQgPSBoYWRlc19yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0hFQURFUl9UWVBFLAotCQkJCQkgICAgICZoZWFkZXJfdHlwZSkpICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKLQkJcmV0dXJuIHJlc3VsdDsKLQotCWlmICgoKHdoZXJlID49IFBDSV9CQVNFX0FERFJFU1NfMCkgJiYgKHdoZXJlIDw9IFBDSV9CQVNFX0FERFJFU1NfMSkpIHx8Ci0JICAgICgoaGVhZGVyX3R5cGUgIT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgJiYgKCh3aGVyZSA+PSBQQ0lfQkFTRV9BRERSRVNTXzIpICYmCi0JCQkJCQkJICh3aGVyZSA8PSBQQ0lfQkFTRV9BRERSRVNTXzUpKSkpCi0JewotCQlpZiAoKHZhbHVlICYgUENJX0JBU0VfQUREUkVTU19TUEFDRSkgPT0KLQkJICAgIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pCi0JCXsKLQkJCS8qCi0JCQkgKiBJL08gYWRkcmVzcy4gQ2hlY2sgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQgYWRkcmVzcyBvbgotCQkJICogdGhlIEhhZGVzIChwY2lfaW9fYmFzZV92aXJ0IDw9IHZhbHVlIDwgcGNpX2lvX2Jhc2VfdmlydCArCi0JCQkgKiBIQURFU19WSVJUX0lPX1NJWkUpIG9yIGlmIHRoZSB2YWx1ZSBpcyAweGZmZmZmZmZmLiBJZiBub3QKLQkJCSAqIHRydWUgZG8gbm90IHdyaXRlIHRoZSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIuIElmIGl0IGlzIGEKLQkJCSAqIHZhbGlkIGJhc2UgYWRkcmVzcyBzdWJ0cmFjdCAncGNpX2lvX2Jhc2VfdmlydCcgZnJvbSB0aGUgdmFsdWUuCi0JCQkgKi8KLQotCQkJaWYgKCh2YWx1ZSA+PSBwY2lfaW9fYmFzZV92aXJ0KSAmJiAodmFsdWUgPCAocGNpX2lvX2Jhc2VfdmlydCArCi0JCQkJCQkJCQkJCQkJCSBIQURFU19WSVJUX0lPX1NJWkUpKSkKLQkJCQl2YWx1ZSAtPSBwY2lfaW9fYmFzZV92aXJ0OwotCQkJZWxzZQotCQkJewotCQkJCWlmICh2YWx1ZSAhPSAweGZmZmZmZmZmKQotCQkJCQlyZXR1cm4gUENJQklPU19TRVRfRkFJTEVEOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyoKLQkJCSAqIE1lbW9yeSBhZGRyZXNzLiBDaGVjayBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZCBhZGRyZXNzIG9uCi0JCQkgKiB0aGUgSGFkZXMgKEhBREVTX01FTV9CQVNFIDw9IHZhbHVlIDwgSEFERVNfTUVNX0JBU0UgKyBIQURFU19NRU1fU0laRSkgb3IKLQkJCSAqIGlmIHRoZSB2YWx1ZSBpcyAweGZmZmZmZmZmLiBJZiBub3QgdHJ1ZSBkbyBub3Qgd3JpdGUKLQkJCSAqIHRoZSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIuIElmIGl0IGlzIGEgdmFsaWQgYmFzZSBhZGRyZXNzCi0JCQkgKiBzdWJ0cmFjdCBIQURFU19NRU1fQkFTRSBmcm9tIHRoZSB2YWx1ZS4KLQkJCSAqLwotCi0JCQlpZiAoKHZhbHVlID49IEhBREVTX01FTV9CQVNFKSAmJiAodmFsdWUgPCAoSEFERVNfTUVNX0JBU0UgKyBIQURFU19NRU1fU0laRSkpKQotCQkJCXZhbHVlIC09IEhBREVTX01FTV9CQVNFOwotCQkJZWxzZQotCQkJewotCQkJCWlmICh2YWx1ZSAhPSAweGZmZmZmZmZmKQotCQkJCQlyZXR1cm4gUENJQklPU19TRVRfRkFJTEVEOwotCQkJfQotCQl9Ci0JfQotCi0JKnBjaV9hZGRyID0gY3B1X3RvX2xlMzIodmFsdWUpOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotLyoKLSAqIHN0YXRpYyBpbmxpbmUgdm9pZCBoYWRlc19maXh1cCh2b2lkKQotICoKLSAqIEFzc2lnbiBJUlEgbnVtYmVycyBhcyB1c2VkIGJ5IExpbnV4IHRvIHRoZSBpbnRlcnJ1cHQgcGlucwotICogb2YgdGhlIFBDSSBjYXJkcy4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgaGFkZXNfZml4dXAoaW50IHBjaV9tb2RpZnkpCi17Ci0JY2hhciBpcnFfdGFiWzRdID0gewotCQlbMF0gPSBJUlFfVFRfTUZQX0lPMCwJCS8qIFNsb3QgMC4gKi8KLQkJWzFdID0gSVJRX1RUX01GUF9JTzEsCQkvKiBTbG90IDEuICovCi0JCVsyXSA9IElSUV9UVF9NRlBfU0NDLAkJLyogU2xvdCAyLiAqLwotCQlbM10gPSBJUlFfVFRfTUZQX1NDU0lETUEJLyogU2xvdCAzLiAqLwotCX07Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7Ci0JdW5zaWduZWQgY2hhciBzbG90OwotCi0JLyoKLQkgKiBHbyB0aHJvdWdoIGFsbCBkZXZpY2VzLCBmaXhpbmcgdXAgaXJxcyBhcyB3ZSBzZWUgZml0OgotCSAqLwotCi0Jd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKQotCXsKLQkJaWYgKGRldi0+Y2xhc3MgPj4gMTYgIT0gUENJX0JBU0VfQ0xBU1NfQlJJREdFKQotCQl7Ci0JCQlzbG90ID0gUENJX1NMT1QoZGV2LT5kZXZmbik7CS8qIERldGVybWluZSBzbG90IG51bWJlci4gKi8KLQkJCWRldi0+aXJxID0gaXJxX3RhYltzbG90XTsKLQkJCWlmIChwY2lfbW9kaWZ5KQotCQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgZGV2LT5pcnEpOwotCQl9Ci0JfQotfQotCi0vKgotICogc3RhdGljIHZvaWQgaGFkZXNfY29uZl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKLSAqCi0gKiBNYWNoaW5lIGRlcGVuZGVudCBDb25maWd1cmUgdGhlIGdpdmVuIGRldmljZS4KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoKLSAqIGRldgkJLSB0aGUgcGNpIGRldmljZS4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgaGFkZXNfY29uZl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfb3BzIGhhZGVzX3BjaV9vcHMgPSB7Ci0JLnJlYWRfYnl0ZSA9CWhhZGVzX3JlYWRfY29uZmlnX2J5dGUsCi0JLnJlYWRfd29yZCA9CWhhZGVzX3JlYWRfY29uZmlnX3dvcmQsCi0JLnJlYWRfZHdvcmQgPQloYWRlc19yZWFkX2NvbmZpZ19kd29yZCwKLQkud3JpdGVfYnl0ZSA9CWhhZGVzX3dyaXRlX2NvbmZpZ19ieXRlLAotCS53cml0ZV93b3JkID0JaGFkZXNfd3JpdGVfY29uZmlnX3dvcmQsCi0JLndyaXRlX2R3b3JkID0JaGFkZXNfd3JpdGVfY29uZmlnX2R3b3JkCi19OwotCi0vKgotICogc3RydWN0IHBjaV9idXNfaW5mbyAqaW5pdF9oYWRlc19wY2kodm9pZCkKLSAqCi0gKiBNYWNoaW5lIHNwZWNpZmljIGluaXRpYWxpc2F0aW9uOgotICoKLSAqIC0gQWxsb2NhdGUgYW5kIGluaXRpYWxpc2UgYSAncGNpX2J1c19pbmZvJyBzdHJ1Y3R1cmUKLSAqIC0gSW5pdGlhbGlzZSBoYXJkd2FyZQotICoKLSAqIFJlc3VsdDogcG9pbnRlciB0byAncGNpX2J1c19pbmZvJyBzdHJ1Y3R1cmUuCi0gKi8KLQotc3RydWN0IHBjaV9idXNfaW5mbyAqIF9faW5pdCBpbml0X2hhZGVzX3BjaSh2b2lkKQotewotCXN0cnVjdCBwY2lfYnVzX2luZm8gKmJ1czsKLQlpbnQgaTsKLQotCS8qCi0JICogUmVtYXAgSS9PIGFuZCBjb25maWd1cmF0aW9uIHNwYWNlLgotCSAqLwotCi0JcGNpX2lvX2Jhc2VfdmlydCA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwKEhBREVTX0lPX0JBU0UsIEhBREVTX1ZJUlRfSU9fU0laRSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTl9TTE9UUzsgaSsrKQotCQlwY2lfY29uZl9iYXNlX3ZpcnRbaV0gPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcChwY2lfY29uZl9iYXNlX3BoeXNbaV0sIDB4MTAwMDApOwotCi0JLyoKLQkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1cyBpbmZvIHN0cnVjdHVyZS4KLQkgKi8KLQotCWJ1cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfYnVzX2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkoIWJ1cykpCi0JCWdvdG8gaW91bm1hcF9iYXNlX3ZpcnQ7Ci0KLQkvKgotCSAqIENsYWltIHJlc291cmNlcy4gVGhlIG02OGsgaGFzIG5vIHNlcGFyYXRlIEkvTyBzcGFjZSwgYm90aAotCSAqIFBDSSBtZW1vcnkgc3BhY2UgYW5kIFBDSSBJL08gc3BhY2UgYXJlIGluIG1lbW9yeSBzcGFjZS4gVGhlcmVmb3JlCi0JICogdGhlIEkvTyByZXNvdXJjZXMgYXJlIHJlcXVlc3RlZCBpbiBtZW1vcnkgc3BhY2UgYXMgd2VsbC4KLQkgKi8KLQotCWlmICh1bmxpa2VseShyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmNvbmZpZ19zcGFjZSkgIT0gMCkpCi0JCWdvdG8gZnJlZV9idXM7Ci0KLQlpZiAodW5saWtlbHkocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZpb19zcGFjZSkgIT0gMCkpCi0JCWdvdG8gcmVsZWFzZV9jb25maWdfc3BhY2U7Ci0KLQlidXMtPm1lbV9zcGFjZS5zdGFydCA9IEhBREVTX01FTV9CQVNFOwotCWJ1cy0+bWVtX3NwYWNlLmVuZCA9IEhBREVTX01FTV9CQVNFICsgSEFERVNfTUVNX1NJWkUgLSAxOwotCWJ1cy0+bWVtX3NwYWNlLm5hbWUgPSBwY2lfbWVtX25hbWU7Ci0jaWYgMQotCWlmICh1bmxpa2VseShyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmJ1cy0+bWVtX3NwYWNlKSAhPSAwKSkKLQkJZ290byByZWxlYXNlX2lvX3NwYWNlOwotI2VuZGlmCi0JYnVzLT5pb19zcGFjZS5zdGFydCA9IHBjaV9pb19iYXNlX3ZpcnQ7Ci0JYnVzLT5pb19zcGFjZS5lbmQgPSBwY2lfaW9fYmFzZV92aXJ0ICsgSEFERVNfVklSVF9JT19TSVpFIC0gMTsKLQlidXMtPmlvX3NwYWNlLm5hbWUgPSBwY2lfaW9fbmFtZTsKLSNpZiAxCi0JaWYgKHVubGlrZWx5KHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJmJ1cy0+aW9fc3BhY2UpICE9IDApKQotCQlnb3RvIHJlbGVhc2VfYnVzX21lbV9zcGFjZTsKLSNlbmRpZgotCS8qCi0JICogU2V0IGhhcmR3YXJlIGRlcGVuZGVudCBmdW5jdGlvbnMuCi0JICovCi0KLQlidXMtPm02OGtfcGNpX29wcyA9ICZoYWRlc19wY2lfb3BzOwotCWJ1cy0+Zml4dXAgPSBoYWRlc19maXh1cDsKLQlidXMtPmNvbmZfZGV2aWNlID0gaGFkZXNfY29uZl9kZXZpY2U7Ci0KLQkvKgotCSAqIFNlbGVjdCBoaWdoIHRvIGxvdyBlZGdlIGZvciBQQ0kgaW50ZXJydXB0cy4KLQkgKi8KLQotCXR0X21mcC5hY3RpdmVfZWRnZSAmPSB+MHgyNzsKLQotCXJldHVybiBidXM7Ci0KLXJlbGVhc2VfYnVzX21lbV9zcGFjZToKLQlyZWxlYXNlX3Jlc291cmNlKCZidXMtPm1lbV9zcGFjZSk7Ci1yZWxlYXNlX2lvX3NwYWNlOgotCXJlbGVhc2VfcmVzb3VyY2UoJmlvX3NwYWNlKTsKLXJlbGVhc2VfY29uZmlnX3NwYWNlOgotCXJlbGVhc2VfcmVzb3VyY2UoJmNvbmZpZ19zcGFjZSk7Ci1mcmVlX2J1czoKLQlrZnJlZShidXMpOwotaW91bm1hcF9iYXNlX3ZpcnQ6Ci0JaW91bm1hcCgodm9pZCAqKXBjaV9pb19iYXNlX3ZpcnQpOwotCi0JZm9yIChpID0gMDsgaSA8IE5fU0xPVFM7IGkrKykKLQkJaW91bm1hcCgodm9pZCAqKXBjaV9jb25mX2Jhc2VfdmlydFtpXSk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL3RpbWUuYyBiL2FyY2gvbTY4ay9hdGFyaS90aW1lLmMKaW5kZXggZTBkM2M4Yi4uMWVkZGUyNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL3RpbWUuYworKysgYi9hcmNoL202OGsvYXRhcmkvdGltZS5jCkBAIC0yMCw2ICsyMCw5IEBACiAKICNpbmNsdWRlIDxhc20vYXRhcmlpbnRzLmg+CiAKK0RFRklORV9TUElOTE9DSyhydGNfbG9jayk7CitFWFBPUlRfU1lNQk9MX0dQTChydGNfbG9jayk7CisKIHZvaWQgX19pbml0CiBhdGFyaV9zY2hlZF9pbml0KGlycV9oYW5kbGVyX3QgdGltZXJfcm91dGluZSkKIHsKQEAgLTE5MSwxMyArMTk0LDE0IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIShjdHJsICYgUlRDX0RNX0JJTkFSWSkpIHsKLSAgICAgICAgICAgIEJJTl9UT19CQ0Qoc2VjKTsKLSAgICAgICAgICAgIEJJTl9UT19CQ0QobWluKTsKLSAgICAgICAgICAgIEJJTl9UT19CQ0QoaG91cik7Ci0gICAgICAgICAgICBCSU5fVE9fQkNEKGRheSk7Ci0gICAgICAgICAgICBCSU5fVE9fQkNEKG1vbik7Ci0gICAgICAgICAgICBCSU5fVE9fQkNEKHllYXIpOwotICAgICAgICAgICAgaWYgKHdkYXkgPj0gMCkgQklOX1RPX0JDRCh3ZGF5KTsKKwkgICAgc2VjID0gYmluMmJjZChzZWMpOworCSAgICBtaW4gPSBiaW4yYmNkKG1pbik7CisJICAgIGhvdXIgPSBiaW4yYmNkKGhvdXIpOworCSAgICBkYXkgPSBiaW4yYmNkKGRheSk7CisJICAgIG1vbiA9IGJpbjJiY2QobW9uKTsKKwkgICAgeWVhciA9IGJpbjJiY2QoeWVhcik7CisJICAgIGlmICh3ZGF5ID49IDApCisJCXdkYXkgPSBiaW4yYmNkKHdkYXkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNTIsMTMgKzI1NiwxMyBAQAogCX0KIAogCWlmICghKGN0cmwgJiBSVENfRE1fQklOQVJZKSkgewotICAgICAgICAgICAgQkNEX1RPX0JJTihzZWMpOwotICAgICAgICAgICAgQkNEX1RPX0JJTihtaW4pOwotICAgICAgICAgICAgQkNEX1RPX0JJTihob3VyKTsKLSAgICAgICAgICAgIEJDRF9UT19CSU4oZGF5KTsKLSAgICAgICAgICAgIEJDRF9UT19CSU4obW9uKTsKLSAgICAgICAgICAgIEJDRF9UT19CSU4oeWVhcik7Ci0gICAgICAgICAgICBCQ0RfVE9fQklOKHdkYXkpOworCSAgICBzZWMgPSBiY2QyYmluKHNlYyk7CisJICAgIG1pbiA9IGJjZDJiaW4obWluKTsKKwkgICAgaG91ciA9IGJjZDJiaW4oaG91cik7CisJICAgIGRheSA9IGJjZDJiaW4oZGF5KTsKKwkgICAgbW9uID0gYmNkMmJpbihtb24pOworCSAgICB5ZWFyID0gYmNkMmJpbih5ZWFyKTsKKwkgICAgd2RheSA9IGJjZDJiaW4od2RheSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIShjdHJsICYgUlRDXzI0SCkpIHsKQEAgLTMxOCw3ICszMjIsNyBAQAogCiAgICAgcnRjX21pbnV0ZXMgPSBSVENfUkVBRCAoUlRDX01JTlVURVMpOwogICAgIGlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpKQotICAgICAgICBCQ0RfVE9fQklOIChydGNfbWludXRlcyk7CisJcnRjX21pbnV0ZXMgPSBiY2QyYmluKHJ0Y19taW51dGVzKTsKIAogICAgIC8qIFNpbmNlIHdlJ3JlIG9ubHkgYWRqdXN0aW5nIG1pbnV0ZXMgYW5kIHNlY29uZHMsIGRvbid0IGludGVyZmVyZQogICAgICAgIHdpdGggaG91ciBvdmVyZmxvdy4gIFRoaXMgYXZvaWRzIG1lc3Npbmcgd2l0aCB1bmtub3duIHRpbWUgem9uZXMKQEAgLTMyOSw4ICszMzMsOCBAQAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEJJTl9UT19CQ0QgKHJlYWxfc2Vjb25kcyk7Ci0gICAgICAgICAgICAgICAgICAgIEJJTl9UT19CQ0QgKHJlYWxfbWludXRlcyk7CisJCSAgICByZWFsX3NlY29uZHMgPSBiaW4yYmNkKHJlYWxfc2Vjb25kcyk7CisJCSAgICByZWFsX21pbnV0ZXMgPSBiaW4yYmNkKHJlYWxfbWludXRlcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgUlRDX1dSSVRFIChSVENfU0VDT05EUywgcmVhbF9zZWNvbmRzKTsKICAgICAgICAgICAgIFJUQ19XUklURSAoUlRDX01JTlVURVMsIHJlYWxfbWludXRlcyk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYnZtZTYwMDAvY29uZmlnLmMgYi9hcmNoL202OGsvYnZtZTYwMDAvY29uZmlnLmMKaW5kZXggOTQzM2E4OC4uNjVjOTIwNCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2J2bWU2MDAwL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9idm1lNjAwMC9jb25maWcuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAKICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC00Niw5ICs0Nyw2IEBACiBleHRlcm4gdm9pZCBidm1lNjAwMF93YWl0YnV0KHZvaWQpOwogdm9pZCBidm1lNjAwMF9zZXRfdmVjdG9ycyAodm9pZCk7CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJjZDJiaW4gKHVuc2lnbmVkIGNoYXIgYik7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBiaW4yYmNkICh1bnNpZ25lZCBjaGFyIGIpOwotCiAvKiBTYXZlIHRpY2sgaGFuZGxlciByb3V0aW5lIHBvaW50ZXIsIHdpbGwgcG9pbnQgdG8gZG9fdGltZXIoKSBpbgogICoga2VybmVsL3NjaGVkLmMsIGNhbGxlZCB2aWEgYnZtZTYwMDBfcHJvY2Vzc19pbnQoKSAqLwogCkBAIC0yNjQsMTcgKzI2Miw2IEBACiAgICAgcmV0dXJuIHY7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJjZDJiaW4gKHVuc2lnbmVkIGNoYXIgYikKLXsKLQlyZXR1cm4gKChiPj40KSoxMCArIChiJjE1KSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJpbjJiY2QgKHVuc2lnbmVkIGNoYXIgYikKLXsKLQlyZXR1cm4gKCgoYi8xMCkqMTYpICsgKGIlMTApKTsKLX0KLQotCiAvKgogICogTG9va3MgbGlrZSBvcCBpcyBub24temVybyBmb3Igc2V0dGluZyB0aGUgY2xvY2ssIGFuZCB6ZXJvIGZvcgogICogcmVhZGluZyB0aGUgY2xvY2suCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYnZtZTYwMDAvcnRjLmMgYi9hcmNoL202OGsvYnZtZTYwMDAvcnRjLmMKaW5kZXggZThhYzNmNy4uYzUwYmVjOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2J2bWU2MDAwL3J0Yy5jCisrKyBiL2FyY2gvbTY4ay9idm1lNjAwMC9ydGMuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgkvKiBGb3Igc3RydWN0IHJ0Y190aW1lIGFuZCBpb2N0bHMsIGV0YyAqLwotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAjaW5jbHVkZSA8YXNtL2J2bWU2MDAwaHcuaD4KIApAQCAtNTcsMTYgKzU2LDE2IEBACiAJCXJ0Yy0+bXNyID0gMHg0MDsKIAkJbWVtc2V0KCZ3dGltZSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOwogCQlkbyB7Ci0JCQl3dGltZS50bV9zZWMgPSAgQkNEMkJJTihydGMtPmJjZF9zZWMpOwotCQkJd3RpbWUudG1fbWluID0gIEJDRDJCSU4ocnRjLT5iY2RfbWluKTsKLQkJCXd0aW1lLnRtX2hvdXIgPSBCQ0QyQklOKHJ0Yy0+YmNkX2hyKTsKLQkJCXd0aW1lLnRtX21kYXkgPSAgQkNEMkJJTihydGMtPmJjZF9kb20pOwotCQkJd3RpbWUudG1fbW9uID0gIEJDRDJCSU4ocnRjLT5iY2RfbXRoKS0xOwotCQkJd3RpbWUudG1feWVhciA9IEJDRDJCSU4ocnRjLT5iY2RfeWVhcik7CisJCQl3dGltZS50bV9zZWMgPSAgYmNkMmJpbihydGMtPmJjZF9zZWMpOworCQkJd3RpbWUudG1fbWluID0gIGJjZDJiaW4ocnRjLT5iY2RfbWluKTsKKwkJCXd0aW1lLnRtX2hvdXIgPSBiY2QyYmluKHJ0Yy0+YmNkX2hyKTsKKwkJCXd0aW1lLnRtX21kYXkgPSAgYmNkMmJpbihydGMtPmJjZF9kb20pOworCQkJd3RpbWUudG1fbW9uID0gIGJjZDJiaW4ocnRjLT5iY2RfbXRoKS0xOworCQkJd3RpbWUudG1feWVhciA9IGJjZDJiaW4ocnRjLT5iY2RfeWVhcik7CiAJCQlpZiAod3RpbWUudG1feWVhciA8IDcwKQogCQkJCXd0aW1lLnRtX3llYXIgKz0gMTAwOwotCQkJd3RpbWUudG1fd2RheSA9IEJDRDJCSU4ocnRjLT5iY2RfZG93KS0xOwotCQl9IHdoaWxlICh3dGltZS50bV9zZWMgIT0gQkNEMkJJTihydGMtPmJjZF9zZWMpKTsKKwkJCXd0aW1lLnRtX3dkYXkgPSBiY2QyYmluKHJ0Yy0+YmNkX2RvdyktMTsKKwkJfSB3aGlsZSAod3RpbWUudG1fc2VjICE9IGJjZDJiaW4ocnRjLT5iY2Rfc2VjKSk7CiAJCXJ0Yy0+bXNyID0gbXNyOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJnd0aW1lLCBzaXplb2Ygd3RpbWUpID8KQEAgLTExNCwxNCArMTEzLDE0IEBACiAKIAkJcnRjLT50MGNyX3J0bXIgPSB5cnMlNDsKIAkJcnRjLT5iY2RfdGVubXMgPSAwOwotCQlydGMtPmJjZF9zZWMgICA9IEJJTjJCQ0Qoc2VjKTsKLQkJcnRjLT5iY2RfbWluICAgPSBCSU4yQkNEKG1pbik7Ci0JCXJ0Yy0+YmNkX2hyICAgID0gQklOMkJDRChocnMpOwotCQlydGMtPmJjZF9kb20gICA9IEJJTjJCQ0QoZGF5KTsKLQkJcnRjLT5iY2RfbXRoICAgPSBCSU4yQkNEKG1vbik7Ci0JCXJ0Yy0+YmNkX3llYXIgID0gQklOMkJDRCh5cnMlMTAwKTsKKwkJcnRjLT5iY2Rfc2VjICAgPSBiaW4yYmNkKHNlYyk7CisJCXJ0Yy0+YmNkX21pbiAgID0gYmluMmJjZChtaW4pOworCQlydGMtPmJjZF9ociAgICA9IGJpbjJiY2QoaHJzKTsKKwkJcnRjLT5iY2RfZG9tICAgPSBiaW4yYmNkKGRheSk7CisJCXJ0Yy0+YmNkX210aCAgID0gYmluMmJjZChtb24pOworCQlydGMtPmJjZF95ZWFyICA9IGJpbjJiY2QoeXJzJTEwMCk7CiAJCWlmIChydGNfdG0udG1fd2RheSA+PSAwKQotCQkJcnRjLT5iY2RfZG93ID0gQklOMkJDRChydGNfdG0udG1fd2RheSsxKTsKKwkJCXJ0Yy0+YmNkX2RvdyA9IGJpbjJiY2QocnRjX3RtLnRtX3dkYXkrMSk7CiAJCXJ0Yy0+dDBjcl9ydG1yID0geXJzJTQgfCAweDA4OwogCiAJCXJ0Yy0+bXNyID0gbXNyOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGUKaW5kZXggM2E3ZjYyMi4uNTVkNWQ2YiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL202OGsva2VybmVsL01ha2VmaWxlCkBAIC0xNCw1ICsxNCw0IEBACiAKIGRldnJlcy15ID0gLi4vLi4vLi4va2VybmVsL2lycS9kZXZyZXMubwogCi1vYmotJChDT05GSUdfUENJKQkrPSBiaW9zMzIubwogb2JqLXkkKENPTkZJR19NTVVfU1VOMykgKz0gZG1hLm8JIyBubywgaXQncyBub3QgYSB0eXBvCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2Jpb3MzMi5jIGIvYXJjaC9tNjhrL2tlcm5lbC9iaW9zMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYxNzBjMi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsva2VybmVsL2Jpb3MzMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTE0ICswLDAgQEAKLS8qCi0gKiBiaW9zMzIuYyAtIFBDSSBCSU9TIGZ1bmN0aW9ucyBmb3IgbTY4ayBzeXN0ZW1zLgotICoKLSAqIFdyaXR0ZW4gYnkgV291dCBLbGFyZW4uCi0gKgotICogQmFzZWQgb24gdGhlIERFQyBBbHBoYSBiaW9zMzIuYyBieSBEYXZlIFJ1c2xpbmcgYW5kIERhdmlkIE1vc2Jlcmdlci4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotCi0jaWYgMAotIyBkZWZpbmUgREJHX0RFVlMoYXJncykJCXByaW50ayBhcmdzCi0jZWxzZQotIyBkZWZpbmUgREJHX0RFVlMoYXJncykKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BDSQotCi0vKgotICogUENJIHN1cHBvcnQgZm9yIExpbnV4L202OGsuIEN1cnJlbnRseSBvbmx5IHRoZSBIYWRlcyBpcyBzdXBwb3J0ZWQuCi0gKgotICogVGhlIHN1cHBvcnQgZm9yIFBDSSBicmlkZ2VzIGluIHRoZSBERUMgQWxwaGEgdmVyc2lvbiBoYXMKLSAqIGJlZW4gcmVtb3ZlZCBpbiB0aGlzIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BjaS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNkZWZpbmUgS0IJCTEwMjQKLSNkZWZpbmUgTUIJCSgxMDI0KktCKQotI2RlZmluZSBHQgkJKDEwMjQqTUIpCi0KLSNkZWZpbmUgTUFKT1JfUkVWCTAKLSNkZWZpbmUgTUlOT1JfUkVWCTUKLQotLyoKLSAqIEFsaWduIFZBTCB0byBBTElHTiwgd2hpY2ggbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KLSAqLwotCi0jZGVmaW5lIEFMSUdOKHZhbCxhbGlnbikJKCgodmFsKSArICgoYWxpZ24pIC0gMSkpICYgfigoYWxpZ24pIC0gMSkpCi0KLS8qCi0gKiBPZmZzZXRzIHJlbGF0aXZlIHRvIHRoZSBJL08gYW5kIG1lbW9yeSBiYXNlIGFkZHJlc3NlcyBmcm9tIHdoZXJlIHJlc291cmNlcwotICogYXJlIGFsbG9jYXRlZC4KLSAqLwotCi0jZGVmaW5lIElPX0FMTE9DX09GRlNFVAkJMHgwMDAwNDAwMAotI2RlZmluZSBNRU1fQUxMT0NfT0ZGU0VUCTB4MDQwMDAwMDAKLQotLyoKLSAqIERlY2xhcmF0aW9ucyBvZiBoYXJkd2FyZSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMuCi0gKi8KLQotZXh0ZXJuIHN0cnVjdCBwY2lfYnVzX2luZm8gKmluaXRfaGFkZXNfcGNpKHZvaWQpOwotCi0vKgotICogQnVzIGluZm8gc3RydWN0dXJlIG9mIHRoZSBQQ0kgYnVzLiBBIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgaXMKLSAqIHB1dCBpbiB0aGUgc3lzZGF0YSBtZW1iZXIgb2YgdGhlIHBjaV9idXMgc3RydWN0dXJlLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2J1c19pbmZvICpidXNfaW5mbzsKLQotc3RhdGljIGludCBwY2lfbW9kaWZ5ID0gMTsJCS8qIElmIHNldCwgbGF5b3V0IHRoZSBQQ0kgYnVzIG91cnNlbGYuICovCi1zdGF0aWMgaW50IHNraXBfdmdhOwkJCS8qIElmIHNldCBkbyBub3QgbW9kaWZ5IGJhc2UgYWRkcmVzc2VzCi0JCQkJCSAgIG9mIHZnYSBjYXJkcy4qLwotc3RhdGljIGludCBkaXNhYmxlX3BjaV9idXJzdDsJCS8qIElmIHNldCBkbyBub3QgYWxsb3cgUENJIGJ1cnN0cy4gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBpb19iYXNlOwotc3RhdGljIHVuc2lnbmVkIGludCBtZW1fYmFzZTsKLQotLyoKLSAqIHN0YXRpYyB2b2lkIGRpc2FibGVfZGV2KHN0cnVjdCBwY2lfZGV2ICpkZXYpCi0gKgotICogRGlzYWJsZSBQQ0kgZGV2aWNlIERFViBzbyB0aGF0IGl0IGRvZXMgbm90IHJlc3BvbmQgdG8gSS9PIG9yIG1lbW9yeQotICogYWNjZXNzZXMuCi0gKgotICogUGFyYW1ldGVyczoKLSAqCi0gKiBkZXYJLSBkZXZpY2UgdG8gZGlzYWJsZS4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgZGlzYWJsZV9kZXYoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQl1bnNpZ25lZCBzaG9ydCBjbWQ7Ci0KLQlpZiAoKChkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX05PVF9ERUZJTkVEX1ZHQSkgfHwKLQkgICAgIChkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBKSB8fAotCSAgICAgKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfRElTUExBWV9YR0EpKSAmJiBza2lwX3ZnYSkKLQkJcmV0dXJuOwotCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0KLQljbWQgJj0gKH5QQ0lfQ09NTUFORF9JTyAmIH5QQ0lfQ09NTUFORF9NRU1PUlkgJiB+UENJX0NPTU1BTkRfTUFTVEVSKTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKLX0KLQotLyoKLSAqIHN0YXRpYyB2b2lkIGxheW91dF9kZXYoc3RydWN0IHBjaV9kZXYgKmRldikKLSAqCi0gKiBMYXlvdXQgbWVtb3J5IGFuZCBJL08gZm9yIGEgZGV2aWNlLgotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKgotICogZGV2aWNlCS0gZGV2aWNlIHRvIGxheW91dCBtZW1vcnkgYW5kIEkvTyBmb3IuCi0gKi8KLQotc3RhdGljIHZvaWQgX19pbml0IGxheW91dF9kZXYoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQl1bnNpZ25lZCBzaG9ydCBjbWQ7Ci0JdW5zaWduZWQgaW50IGJhc2UsIG1hc2ssIHNpemUsIHJlZzsKLQl1bnNpZ25lZCBpbnQgYWxpZ250bzsKLQlpbnQgaTsKLQotCS8qCi0JICogU2tpcCB2aWRlbyBjYXJkcyBpZiByZXF1ZXN0ZWQuCi0JICovCi0KLQlpZiAoKChkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX05PVF9ERUZJTkVEX1ZHQSkgfHwKLQkgICAgIChkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBKSB8fAotCSAgICAgKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfRElTUExBWV9YR0EpKSAmJiBza2lwX3ZnYSkKLQkJcmV0dXJuOwotCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0KLQlmb3IgKHJlZyA9IFBDSV9CQVNFX0FERFJFU1NfMCwgaSA9IDA7IHJlZyA8PSBQQ0lfQkFTRV9BRERSRVNTXzU7IHJlZyArPSA0LCBpKyspCi0JewotCQkvKgotCQkgKiBGaWd1cmUgb3V0IGhvdyBtdWNoIHNwYWNlIGFuZCBvZiB3aGF0IHR5cGUgdGhpcwotCQkgKiBkZXZpY2Ugd2FudHMuCi0JCSAqLwotCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCByZWcsIDB4ZmZmZmZmZmYpOwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCByZWcsICZiYXNlKTsKLQotCQlpZiAoIWJhc2UpCi0JCXsKLQkJCS8qIHRoaXMgYmFzZS1hZGRyZXNzIHJlZ2lzdGVyIGlzIHVudXNlZCAqLwotCQkJZGV2LT5yZXNvdXJjZVtpXS5zdGFydCA9IDA7Ci0JCQlkZXYtPnJlc291cmNlW2ldLmVuZCA9IDA7Ci0JCQlkZXYtPnJlc291cmNlW2ldLmZsYWdzID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICogV2UndmUgcmVhZCB0aGUgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyIGJhY2sgYWZ0ZXIKLQkJICogd3JpdGluZyBhbGwgb25lcyBhbmQgc28gbm93IHdlIG11c3QgZGVjb2RlIGl0LgotCQkgKi8KLQotCQlpZiAoYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pCi0JCXsKLQkJCS8qCi0JCQkgKiBJL08gc3BhY2UgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyLgotCQkJICovCi0KLQkJCWNtZCB8PSBQQ0lfQ09NTUFORF9JTzsKLQotCQkJYmFzZSAmPSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7Ci0JCQltYXNrID0gKH5iYXNlIDw8IDEpIHwgMHgxOwotCQkJc2l6ZSA9IChtYXNrICYgYmFzZSkgJiAweGZmZmZmZmZmOwotCi0JCQkvKgotCQkJICogQWxpZ24gdG8gbXVsdGlwbGUgb2Ygc2l6ZSBvZiBtaW5pbXVtIGJhc2UuCi0JCQkgKi8KLQotCQkJYWxpZ250byA9IG1heF90KHVuc2lnbmVkIGludCwgMHgwNDAsIHNpemUpOwotCQkJYmFzZSA9IEFMSUdOKGlvX2Jhc2UsIGFsaWdudG8pOwotCQkJaW9fYmFzZSA9IGJhc2UgKyBzaXplOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHJlZywgYmFzZSB8IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pOwotCi0JCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0ID0gYmFzZTsKLQkJCWRldi0+cmVzb3VyY2VbaV0uZW5kID0gZGV2LT5yZXNvdXJjZVtpXS5zdGFydCArIHNpemUgLSAxOwotCQkJZGV2LT5yZXNvdXJjZVtpXS5mbGFncyA9IElPUkVTT1VSQ0VfSU8gfCBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPOwotCi0JCQlEQkdfREVWUygoImxheW91dF9kZXY6IElPIGFkZHJlc3M6ICVsWFxuIiwgYmFzZSkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJdW5zaWduZWQgaW50IHR5cGU7Ci0KLQkJCS8qCi0JCQkgKiBNZW1vcnkgc3BhY2UgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyLgotCQkJICovCi0KLQkJCWNtZCB8PSBQQ0lfQ09NTUFORF9NRU1PUlk7Ci0JCQl0eXBlID0gYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfTUFTSzsKLQkJCWJhc2UgJj0gUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKLQkJCW1hc2sgPSAofmJhc2UgPDwgMSkgfCAweDE7Ci0JCQlzaXplID0gKG1hc2sgJiBiYXNlKSAmIDB4ZmZmZmZmZmY7Ci0JCQlzd2l0Y2ggKHR5cGUpCi0JCQl7Ci0JCQljYXNlIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfMzI6Ci0JCQljYXNlIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfNjQ6Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8xTToKLQkJCQlwcmludGsoImJpb3MzMiBXQVJOSU5HOiBzbG90ICVkLCBmdW5jdGlvbiAlZCAiCi0JCQkJICAgICAgICJyZXF1ZXN0cyBtZW1vcnkgYmVsb3cgMU1CLS0tZG9uJ3QgIgotCQkJCSAgICAgICAia25vdyBob3cgdG8gZG8gdGhhdC5cbiIsCi0JCQkJICAgICAgIFBDSV9TTE9UKGRldi0+ZGV2Zm4pLAotCQkJCSAgICAgICBQQ0lfRlVOQyhkZXYtPmRldmZuKSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBBbGlnbiB0byBtdWx0aXBsZSBvZiBzaXplIG9mIG1pbmltdW0gYmFzZS4KLQkJCSAqLwotCi0JCQlhbGlnbnRvID0gbWF4X3QodW5zaWduZWQgaW50LCAweDEwMDAsIHNpemUpOwotCQkJYmFzZSA9IEFMSUdOKG1lbV9iYXNlLCBhbGlnbnRvKTsKLQkJCW1lbV9iYXNlID0gYmFzZSArIHNpemU7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcmVnLCBiYXNlKTsKLQotCQkJZGV2LT5yZXNvdXJjZVtpXS5zdGFydCA9IGJhc2U7Ci0JCQlkZXYtPnJlc291cmNlW2ldLmVuZCA9IGRldi0+cmVzb3VyY2VbaV0uc3RhcnQgKyBzaXplIC0gMTsKLQkJCWRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKLQotCQkJaWYgKHR5cGUgPT0gUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NCkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIDY0LWJpdCBhZGRyZXNzLCBzZXQgdGhlIGhpZ2hlc3QgMzIgYml0cwotCQkJCSAqIHRvIHplcm8uCi0JCQkJICovCi0KLQkJCQlyZWcgKz0gNDsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcmVnLCAwKTsKLQotCQkJCWkrKzsKLQkJCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0ID0gMDsKLQkJCQlkZXYtPnJlc291cmNlW2ldLmVuZCA9IDA7Ci0JCQkJZGV2LT5yZXNvdXJjZVtpXS5mbGFncyA9IDA7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIEVuYWJsZSBkZXZpY2U6Ci0JICovCi0KLQlpZiAoZGV2LT5jbGFzcyA+PiA4ID09IFBDSV9DTEFTU19OT1RfREVGSU5FRCB8fAotCSAgICBkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX05PVF9ERUZJTkVEX1ZHQSB8fAotCSAgICBkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBIHx8Ci0JICAgIGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfRElTUExBWV9YR0EpCi0JewotCQkvKgotCQkgKiBBbGwgb2YgdGhlc2UgKG1heSkgaGF2ZSBJL08gc2NhdHRlcmVkIGFsbCBhcm91bmQKLQkJICogYW5kIG1heSBub3QgdXNlIGkvby1iYXNlIGFkZHJlc3MgcmVnaXN0ZXJzIGF0IGFsbC4KLQkJICogU28gd2UganVzdCBoYXZlIHRvIGFsd2F5cyBlbmFibGUgSS9PIHRvIHRoZXNlCi0JCSAqIGRldmljZXMuCi0JCSAqLwotCQljbWQgfD0gUENJX0NPTU1BTkRfSU87Ci0JfQotCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsIGNtZCB8IFBDSV9DT01NQU5EX01BU1RFUik7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgKGRpc2FibGVfcGNpX2J1cnN0KSA/IDAgOiAzMik7Ci0KLQlpZiAoYnVzX2luZm8gIT0gTlVMTCkKLQkJYnVzX2luZm8tPmNvbmZfZGV2aWNlKGRldik7CS8qIE1hY2hpbmUgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb24uICovCi0KLQlEQkdfREVWUygoImxheW91dF9kZXY6IGJ1cyAlZCAgc2xvdCAweCV4ICBWSUQgMHgleCAgRElEIDB4JXggIGNsYXNzIDB4JXhcbiIsCi0JCSAgZGV2LT5idXMtPm51bWJlciwgUENJX1NMT1QoZGV2LT5kZXZmbiksIGRldi0+dmVuZG9yLCBkZXYtPmRldmljZSwgZGV2LT5jbGFzcykpOwotfQotCi0vKgotICogc3RhdGljIHZvaWQgbGF5b3V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotICoKLSAqIExheW91dCBtZW1vcnkgYW5kIEkvTyBmb3IgYWxsIGRldmljZXMgb24gdGhlIGdpdmVuIGJ1cy4KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoKLSAqIGJ1cwktIGJ1cy4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgbGF5b3V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCXVuc2lnbmVkIGludCBiaW8sIGJtZW07Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQotCURCR19ERVZTKCgibGF5b3V0X2J1czogc3RhcnRpbmcgYnVzICVkXG4iLCBidXMtPm51bWJlcikpOwotCi0JaWYgKCFidXMtPmRldmljZXMgJiYgIWJ1cy0+Y2hpbGRyZW4pCi0JCXJldHVybjsKLQotCS8qCi0JICogQWxpZ24gdGhlIGN1cnJlbnQgYmFzZXMgb24gYXBwcm9wcmlhdGUgYm91bmRhcmllcyAoNEsgZm9yCi0JICogSU8gYW5kIDFNQiBmb3IgbWVtb3J5KS4KLQkgKi8KLQotCWJpbyA9IGlvX2Jhc2UgPSBBTElHTihpb19iYXNlLCA0KktCKTsKLQlibWVtID0gbWVtX2Jhc2UgPSBBTElHTihtZW1fYmFzZSwgMSpNQik7Ci0KLQkvKgotCSAqIFBDSSBkZXZpY2VzIG1pZ2h0IGhhdmUgYmVlbiBzZXR1cCBieSBhIFBDSSBCSU9TIGVtdWxhdGlvbgotCSAqIHJ1bm5pbmcgdW5kZXIgVE9TLiBJbiB0aGVzZSBjYXNlcyB0aGVyZSBpcyBhCi0JICogd2luZG93IGR1cmluZyB3aGljaCB0d28gZGV2aWNlcyBtYXkgaGF2ZSBhbiBvdmVybGFwcGluZwotCSAqIGFkZHJlc3MgcmFuZ2UuIFRvIGF2b2lkIHRoaXMgY2F1c2luZyB0cm91YmxlLCB3ZSBmaXJzdAotCSAqIHR1cm4gb2ZmIHRoZSBJL08gYW5kIG1lbW9yeSBhZGRyZXNzIGRlY29kZXJzIGZvciBhbGwgUENJCi0JICogZGV2aWNlcy4gIFRoZXknbGwgYmUgcmUtZW5hYmxlZCBvbmx5IG9uY2UgYWxsIGFkZHJlc3MKLQkgKiBkZWNvZGVycyBhcmUgcHJvZ3JhbW1lZCBjb25zaXN0ZW50bHkuCi0JICovCi0KLQlEQkdfREVWUygoImxheW91dF9idXM6IGRpc2FibGVfZGV2IGZvciBidXMgJWRcbiIsIGJ1cy0+bnVtYmVyKSk7Ci0KLQlmb3IgKGRldiA9IGJ1cy0+ZGV2aWNlczsgZGV2OyBkZXYgPSBkZXYtPnNpYmxpbmcpCi0JewotCQlpZiAoKGRldi0+Y2xhc3MgPj4gMTYgIT0gUENJX0JBU0VfQ0xBU1NfQlJJREdFKSB8fAotCQkgICAgKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfQlJJREdFX1BDTUNJQSkpCi0JCQlkaXNhYmxlX2RldihkZXYpOwotCX0KLQotCS8qCi0JICogQWxsb2NhdGUgc3BhY2UgdG8gZWFjaCBkZXZpY2U6Ci0JICovCi0KLQlEQkdfREVWUygoImxheW91dF9idXM6IHN0YXJ0aW5nIGJ1cyAlZCBkZXZpY2VzXG4iLCBidXMtPm51bWJlcikpOwotCi0JZm9yIChkZXYgPSBidXMtPmRldmljZXM7IGRldjsgZGV2ID0gZGV2LT5zaWJsaW5nKQotCXsKLQkJaWYgKChkZXYtPmNsYXNzID4+IDE2ICE9IFBDSV9CQVNFX0NMQVNTX0JSSURHRSkgfHwKLQkJICAgIChkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX0JSSURHRV9QQ01DSUEpKQotCQkJbGF5b3V0X2RldihkZXYpOwotCX0KLQotCURCR19ERVZTKCgibGF5b3V0X2J1czogYnVzICVkIGZpbmlzaGVkXG4iLCBidXMtPm51bWJlcikpOwotfQotCi0vKgotICogc3RhdGljIHZvaWQgcGNpYmlvc19maXh1cCh2b2lkKQotICoKLSAqIExheW91dCBtZW1vcnkgYW5kIEkvTyBvZiBhbGwgZGV2aWNlcyBvbiB0aGUgUENJIGJ1cyBpZiAncGNpX21vZGlmeScgaXMKLSAqIHRydWUuIFRoaXMgbWlnaHQgYmUgbmVjZXNzYXJ5IGJlY2F1c2Ugbm90IGV2ZXJ5IG02OGsgbWFjaGluZSB3aXRoIGEgUENJCi0gKiBidXMgaGFzIGEgUENJIEJJT1MuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCByaWdodCBhZnRlcgotICogcGNpX3NjYW5fYnVzKCkgaW4gcGNpYmlvc19pbml0KCkuCi0gKi8KLQotc3RhdGljIHZvaWQgX19pbml0IHBjaWJpb3NfZml4dXAodm9pZCkKLXsKLQlpZiAocGNpX21vZGlmeSkKLQl7Ci0JCS8qCi0JCSAqIFNldCBiYXNlIGFkZHJlc3NlcyBmb3IgYWxsb2NhdGlvbiBvZiBJL08gYW5kIG1lbW9yeSBzcGFjZS4KLQkJICovCi0KLQkJaW9fYmFzZSA9IGJ1c19pbmZvLT5pb19zcGFjZS5zdGFydCArIElPX0FMTE9DX09GRlNFVDsKLQkJbWVtX2Jhc2UgPSBidXNfaW5mby0+bWVtX3NwYWNlLnN0YXJ0ICsgTUVNX0FMTE9DX09GRlNFVDsKLQotCQkvKgotCQkgKiBTY2FuIHRoZSB0cmVlLCBhbGxvY2F0aW5nIFBDSSBtZW1vcnkgYW5kIEkvTyBzcGFjZS4KLQkJICovCi0KLQkJbGF5b3V0X2J1cyhwY2lfYnVzX2IocGNpX3Jvb3QubmV4dCkpOwotCX0KLQotCS8qCi0JICogRml4IGludGVycnVwdCBhc3NpZ25tZW50cywgZXRjLgotCSAqLwotCi0JYnVzX2luZm8tPmZpeHVwKHBjaV9tb2RpZnkpOwotfQotCi0vKgotICogc3RhdGljIHZvaWQgcGNpYmlvc19jbGFpbV9yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cykKLSAqCi0gKiBDbGFpbSBhbGwgcmVzb3VyY2VzIHRoYXQgYXJlIGFzc2lnbmVkIHRvIGRldmljZXMgb24gdGhlIGdpdmVuIGJ1cy4KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoKLSAqIGJ1cwktIGJ1cy4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNpYmlvc19jbGFpbV9yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCWludCBpOwotCi0Jd2hpbGUgKGJ1cykKLQl7Ci0JCWZvciAoZGV2ID0gYnVzLT5kZXZpY2VzOyAoZGV2ICE9IE5VTEwpOyBkZXYgPSBkZXYtPnNpYmxpbmcpCi0JCXsKLQkJCWZvciAoaSA9IDA7IGkgPCBQQ0lfTlVNX1JFU09VUkNFUzsgaSsrKQotCQkJewotCQkJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZkZXYtPnJlc291cmNlW2ldOwotCQkJCXN0cnVjdCByZXNvdXJjZSAqcHI7Ci0JCQkJc3RydWN0IHBjaV9idXNfaW5mbyAqYnVzX2luZm8gPSAoc3RydWN0IHBjaV9idXNfaW5mbyAqKSBkZXYtPnN5c2RhdGE7Ci0KLQkJCQlpZiAoKHItPnN0YXJ0ID09IDApIHx8IChyLT5wYXJlbnQgIT0gTlVMTCkpCi0JCQkJCWNvbnRpbnVlOwotI2lmIDEKLQkJCQlpZiAoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQotCQkJCQlwciA9ICZidXNfaW5mby0+aW9fc3BhY2U7Ci0JCQkJZWxzZQotCQkJCQlwciA9ICZidXNfaW5mby0+bWVtX3NwYWNlOwotI2Vsc2UKLQkJCQlpZiAoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQotCQkJCQlwciA9ICZpb3BvcnRfcmVzb3VyY2U7Ci0JCQkJZWxzZQotCQkJCQlwciA9ICZpb21lbV9yZXNvdXJjZTsKLSNlbmRpZgotCQkJCWlmIChyZXF1ZXN0X3Jlc291cmNlKHByLCByKSA8IDApCi0JCQkJewotCQkJCQlwcmludGsoS0VSTl9FUlIgIlBDSTogQWRkcmVzcyBzcGFjZSBjb2xsaXNpb24gb24gcmVnaW9uICVkIG9mIGRldmljZSAlc1xuIiwgaSwgZGV2LT5uYW1lKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlpZiAoYnVzLT5jaGlsZHJlbikKLQkJCXBjaWJpb3NfY2xhaW1fcmVzb3VyY2VzKGJ1cy0+Y2hpbGRyZW4pOwotCi0JCWJ1cyA9IGJ1cy0+bmV4dDsKLQl9Ci19Ci0KLS8qCi0gKiBpbnQgcGNpYmlvc19hc3NpZ25fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGkpCi0gKgotICogQXNzaWduIGEgbmV3IGFkZHJlc3MgdG8gYSBQQ0kgcmVzb3VyY2UuCi0gKgotICogUGFyYW1ldGVyczoKLSAqCi0gKiBkZXYJLSBkZXZpY2UuCi0gKiBpCS0gcmVzb3VyY2UuCi0gKgotICogUmVzdWx0OiAwIGlmIHN1Y2Nlc3NmdWwuCi0gKi8KLQotaW50IF9faW5pdCBwY2liaW9zX2Fzc2lnbl9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaSkKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpXTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnByID0gcGNpX2ZpbmRfcGFyZW50X3Jlc291cmNlKGRldiwgcik7Ci0JdW5zaWduZWQgbG9uZyBzaXplID0gci0+ZW5kICsgMTsKLQotCWlmICghcHIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKLQl7Ci0JCWlmIChzaXplID4gMHgxMDApCi0JCQlyZXR1cm4gLUVGQklHOwotCi0JCWlmIChhbGxvY2F0ZV9yZXNvdXJjZShwciwgciwgc2l6ZSwgYnVzX2luZm8tPmlvX3NwYWNlLnN0YXJ0ICsKLQkJCQkgICAgICBJT19BTExPQ19PRkZTRVQsICBidXNfaW5mby0+aW9fc3BhY2UuZW5kLCAxMDI0KSkKLQkJCXJldHVybiAtRUJVU1k7Ci0JfQotCWVsc2UKLQl7Ci0JCWlmIChhbGxvY2F0ZV9yZXNvdXJjZShwciwgciwgc2l6ZSwgYnVzX2luZm8tPm1lbV9zcGFjZS5zdGFydCArCi0JCQkJICAgICAgTUVNX0FMTE9DX09GRlNFVCwgYnVzX2luZm8tPm1lbV9zcGFjZS5lbmQsIHNpemUpKQotCQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlpZiAoaSA8IDYpCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAgKyA0ICogaSwgci0+c3RhcnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19pbml0IHBjaWJpb3NfZml4dXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQl2b2lkICpzeXNkYXRhOwotCi0Jc3lzZGF0YSA9IChidXMtPnBhcmVudCkgPyBidXMtPnBhcmVudC0+c3lzZGF0YSA6IGJ1cy0+c3lzZGF0YTsKLQotCWZvciAoZGV2ID0gYnVzLT5kZXZpY2VzOyAoZGV2ICE9IE5VTEwpOyBkZXYgPSBkZXYtPnNpYmxpbmcpCi0JCWRldi0+c3lzZGF0YSA9IHN5c2RhdGE7Ci19Ci0KLXZvaWQgX19pbml0IHBjaWJpb3NfaW5pdCh2b2lkKQotewotCXByaW50aygiTGludXgvbTY4ayBQQ0kgQklPUzMyIHJldmlzaW9uICV4LiUwMnhcbiIsIE1BSk9SX1JFViwgTUlOT1JfUkVWKTsKLQotCWJ1c19pbmZvID0gTlVMTDsKLSNpZmRlZiBDT05GSUdfSEFERVMKLQlpZiAoTUFDSF9JU19IQURFUykKLQkJYnVzX2luZm8gPSBpbml0X2hhZGVzX3BjaSgpOwotI2VuZGlmCi0JaWYgKGJ1c19pbmZvICE9IE5VTEwpCi0JewotCQlwcmludGsoIlBDSTogUHJvYmluZyBQQ0kgaGFyZHdhcmVcbiIpOwotCQlwY2lfc2Nhbl9idXMoMCwgYnVzX2luZm8tPm02OGtfcGNpX29wcywgYnVzX2luZm8pOwotCQlwY2liaW9zX2ZpeHVwKCk7Ci0JCXBjaWJpb3NfY2xhaW1fcmVzb3VyY2VzKHBjaV9yb290KTsKLQl9Ci0JZWxzZQotCQlwcmludGsoIlBDSTogTm8gUENJIGJ1cyBkZXRlY3RlZFxuIik7Ci19Ci0KLWNoYXIgKiBfX2luaXQgcGNpYmlvc19zZXR1cChjaGFyICpzdHIpCi17Ci0JaWYgKCFzdHJjbXAoc3RyLCAibm9tb2RpZnkiKSkKLQl7Ci0JCXBjaV9tb2RpZnkgPSAwOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JZWxzZSBpZiAoIXN0cmNtcChzdHIsICJza2lwdmdhIikpCi0JewotCQlza2lwX3ZnYSA9IDE7Ci0JCXJldHVybiBOVUxMOwotCX0KLQllbHNlIGlmICghc3RyY21wKHN0ciwgIm5vYnVyc3QiKSkKLQl7Ci0JCWRpc2FibGVfcGNpX2J1cnN0ID0gMTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIHN0cjsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUENJICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2RtYS5jIGIvYXJjaC9tNjhrL2tlcm5lbC9kbWEuYwppbmRleCA2ZjhjMDgwLi4yYmI0MjQ1IDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL2RtYS5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvZG1hLmMKQEAgLTY2LDggKzY2LDggQEAKIH0KIEVYUE9SVF9TWU1CT0woZG1hX2ZyZWVfY29oZXJlbnQpOwogCi1pbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQordm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlLAorCQkJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJc3dpdGNoIChkaXIpIHsKIAljYXNlIERNQV9UT19ERVZJQ0U6CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2ludHMuYyBiL2FyY2gvbTY4ay9rZXJuZWwvaW50cy5jCmluZGV4IGRlZDdkZDIuLjdlOGEwZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvaW50cy5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvaW50cy5jCkBAIC00MjksOCArNDI5LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCiB2b2lkIGluaXRfaXJxX3Byb2Modm9pZCkKIHsKIAkvKiBJbnNlcnQgL3Byb2MvaXJxIGRyaXZlciBoZXJlICovCiB9Ci0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYwppbmRleCA3ODg4Y2RmLi4zMDQyYzJiIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYwpAQCAtNzgsNyArNzgsNyBAQAogc3RhdGljIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCiB7CiAJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKLSNpZiBkZWZpbmVkKE1BQ0hfQVRBUklfT05MWSkgJiYgIWRlZmluZWQoQ09ORklHX0hBREVTKQorI2lmIGRlZmluZWQoTUFDSF9BVEFSSV9PTkxZKQogCQkvKiBibG9jayBvdXQgSFNZTkMgb24gdGhlIGF0YXJpIChmYWxjb24pICovCiAJCV9fYXNtX18oInN0b3AgIzB4MjIwMCIgOiA6IDogImNjIik7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC90cmFwcy5jCmluZGV4IDc1YjgzNDAuLjZkODEzZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL202OGsva2VybmVsL3RyYXBzLmMKQEAgLTg4Myw4ICs4ODMsNyBAQAogCQkJaWYgKGkgJSA1ID09IDApCiAJCQkJcHJpbnRrKCJcbiAgICAgICAiKTsKICNlbmRpZgotCQkJcHJpbnRrKCIgWzwlMDhseD5dIiwgYWRkcik7Ci0JCQlwcmludF9zeW1ib2woIiAlc1xuIiwgYWRkcik7CisJCQlwcmludGsoIiBbPCUwOGx4Pl0gJXBTXG4iLCBhZGRyLCAodm9pZCAqKWFkZHIpOwogCQkJaSsrOwogCQl9CiAJfQpAQCAtOTAwLDEwICs4OTksOCBAQAogCWludCBpOwogCiAJcHJpbnRfbW9kdWxlcygpOwotCXByaW50aygiUEM6IFs8JTA4bHg+XSIscmVncy0+cGMpOwotCXByaW50X3N5bWJvbCgiICVzIiwgcmVncy0+cGMpOwotCXByaW50aygiXG5TUjogJTA0eCAgU1A6ICVwICBhMjogJTA4bHhcbiIsCi0JICAgICAgIHJlZ3MtPnNyLCByZWdzLCByZWdzLT5hMik7CisJcHJpbnRrKCJQQzogWzwlMDhseD5dICVwU1xuIiwgcmVncy0+cGMsICh2b2lkICopcmVncy0+cGMpOworCXByaW50aygiU1I6ICUwNHggIFNQOiAlcCAgYTI6ICUwOGx4XG4iLCByZWdzLT5zciwgcmVncywgcmVncy0+YTIpOwogCXByaW50aygiZDA6ICUwOGx4ICAgIGQxOiAlMDhseCAgICBkMjogJTA4bHggICAgZDM6ICUwOGx4XG4iLAogCSAgICAgICByZWdzLT5kMCwgcmVncy0+ZDEsIHJlZ3MtPmQyLCByZWdzLT5kMyk7CiAJcHJpbnRrKCJkNDogJTA4bHggICAgZDU6ICUwOGx4ICAgIGEwOiAlMDhseCAgICBhMTogJTA4bHhcbiIsCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdGQubGRzCmluZGV4IDk5YjA3ODQuLmY4NDZkNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdGQubGRzCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdGQubGRzCkBAIC0zNCwxMCArMzQsMTAgQEAKIAlDT05TVFJVQ1RPUlMKIAl9CiAKLSAgLmJzcyA6IHsgKiguYnNzKSB9CQkvKiBCU1MgKi8KLQogICAuID0gQUxJR04oMTYpOwotICAuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IHsgKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgfSA6ZGF0YQorICAuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IHsgKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgfQorCisgIC5ic3MgOiB7ICooLmJzcykgfQkJLyogQlNTICovCiAKICAgX2VkYXRhID0gLjsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCiAKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlfc2luaXR0ZXh0ID0gLjsKIAlJTklUX1RFWFQKIAlfZWluaXR0ZXh0ID0gLjsKLSAgfQorICB9IDpkYXRhCiAgIC5pbml0LmRhdGEgOiB7IElOSVRfREFUQSB9CiAgIC4gPSBBTElHTigxNik7CiAgIF9fc2V0dXBfc3RhcnQgPSAuOwpAQCAtNzQsNiArNzQsNyBAQAogICAuaW5pdC5yYW1mcyA6IHsgKiguaW5pdC5yYW1mcykgfQogICBfX2luaXRyYW1mc19lbmQgPSAuOwogI2VuZGlmCisgIE5PVEVTCiAgIC4gPSBBTElHTig4MTkyKTsKICAgX19pbml0X2VuZCA9IC47CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9rbWFwLmMgYi9hcmNoL202OGsvbW0va21hcC5jCmluZGV4IDQ2YjdkNjAuLmRmNjIwYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tbS9rbWFwLmMKKysrIGIvYXJjaC9tNjhrL21tL2ttYXAuYwpAQCAtNjYsOCArNjYsMTAgQEAKIAlmb3IgKHAgPSAmaW9saXN0OyAodG1wID0gKnApIDsgcCA9ICZ0bXAtPm5leHQpIHsKIAkJaWYgKHNpemUgKyBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyKQogCQkJYnJlYWs7Ci0JCWlmIChhZGRyID4gS01BUF9FTkQtc2l6ZSkKKwkJaWYgKGFkZHIgPiBLTUFQX0VORC1zaXplKSB7CisJCQlrZnJlZShhcmVhKTsKIAkJCXJldHVybiBOVUxMOworCQl9CiAJCWFkZHIgPSB0bXAtPnNpemUgKyAodW5zaWduZWQgbG9uZyl0bXAtPmFkZHI7CiAJfQogCWFyZWEtPmFkZHIgPSAodm9pZCAqKWFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbXZtZTE2eC9ydGMuYyBiL2FyY2gvbTY4ay9tdm1lMTZ4L3J0Yy5jCmluZGV4IDQzMmE5ZjEuLmNlYTVlM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tdm1lMTZ4L3J0Yy5jCisrKyBiL2FyY2gvbTY4ay9tdm1lMTZ4L3J0Yy5jCkBAIC01MiwxNSArNTIsMTUgQEAKIAkJLyogRW5zdXJlIGNsb2NrIGFuZCByZWFsLXRpbWUtbW9kZS1yZWdpc3RlciBhcmUgYWNjZXNzaWJsZSAqLwogCQlydGMtPmN0cmwgPSBSVENfUkVBRDsKIAkJbWVtc2V0KCZ3dGltZSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOwotCQl3dGltZS50bV9zZWMgPSAgQkNEMkJJTihydGMtPmJjZF9zZWMpOwotCQl3dGltZS50bV9taW4gPSAgQkNEMkJJTihydGMtPmJjZF9taW4pOwotCQl3dGltZS50bV9ob3VyID0gQkNEMkJJTihydGMtPmJjZF9ocik7Ci0JCXd0aW1lLnRtX21kYXkgPSAgQkNEMkJJTihydGMtPmJjZF9kb20pOwotCQl3dGltZS50bV9tb24gPSAgQkNEMkJJTihydGMtPmJjZF9tdGgpLTE7Ci0JCXd0aW1lLnRtX3llYXIgPSBCQ0QyQklOKHJ0Yy0+YmNkX3llYXIpOworCQl3dGltZS50bV9zZWMgPSAgYmNkMmJpbihydGMtPmJjZF9zZWMpOworCQl3dGltZS50bV9taW4gPSAgYmNkMmJpbihydGMtPmJjZF9taW4pOworCQl3dGltZS50bV9ob3VyID0gYmNkMmJpbihydGMtPmJjZF9ocik7CisJCXd0aW1lLnRtX21kYXkgPSAgYmNkMmJpbihydGMtPmJjZF9kb20pOworCQl3dGltZS50bV9tb24gPSAgYmNkMmJpbihydGMtPmJjZF9tdGgpLTE7CisJCXd0aW1lLnRtX3llYXIgPSBiY2QyYmluKHJ0Yy0+YmNkX3llYXIpOwogCQlpZiAod3RpbWUudG1feWVhciA8IDcwKQogCQkJd3RpbWUudG1feWVhciArPSAxMDA7Ci0JCXd0aW1lLnRtX3dkYXkgPSBCQ0QyQklOKHJ0Yy0+YmNkX2RvdyktMTsKKwkJd3RpbWUudG1fd2RheSA9IGJjZDJiaW4ocnRjLT5iY2RfZG93KS0xOwogCQlydGMtPmN0cmwgPSAwOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJnd0aW1lLCBzaXplb2Ygd3RpbWUpID8KQEAgLTEwNCwxMiArMTA0LDEyIEBACiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJcnRjLT5jdHJsICAgICA9IFJUQ19XUklURTsKIAotCQlydGMtPmJjZF9zZWMgID0gQklOMkJDRChzZWMpOwotCQlydGMtPmJjZF9taW4gID0gQklOMkJDRChtaW4pOwotCQlydGMtPmJjZF9ociAgID0gQklOMkJDRChocnMpOwotCQlydGMtPmJjZF9kb20gID0gQklOMkJDRChkYXkpOwotCQlydGMtPmJjZF9tdGggID0gQklOMkJDRChtb24pOwotCQlydGMtPmJjZF95ZWFyID0gQklOMkJDRCh5cnMlMTAwKTsKKwkJcnRjLT5iY2Rfc2VjICA9IGJpbjJiY2Qoc2VjKTsKKwkJcnRjLT5iY2RfbWluICA9IGJpbjJiY2QobWluKTsKKwkJcnRjLT5iY2RfaHIgICA9IGJpbjJiY2QoaHJzKTsKKwkJcnRjLT5iY2RfZG9tICA9IGJpbjJiY2QoZGF5KTsKKwkJcnRjLT5iY2RfbXRoICA9IGJpbjJiY2QobW9uKTsKKwkJcnRjLT5iY2RfeWVhciA9IGJpbjJiY2QoeXJzJTEwMCk7CiAKIAkJcnRjLT5jdHJsICAgICA9IDA7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9xNDAvY29uZmlnLmMgYi9hcmNoL202OGsvcTQwL2NvbmZpZy5jCmluZGV4IGJlOWRlMmYuLjljN2VlZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9xNDAvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL3E0MC9jb25maWcuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KICNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcnRjLmg+CkBAIC0yMTYsMTcgKzIxNyw2IEBACiB9CiAKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGJjZDJiaW4odW5zaWduZWQgY2hhciBiKQotewotCXJldHVybiAoYiA+PiA0KSAqIDEwICsgKGIgJiAxNSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBiaW4yYmNkKHVuc2lnbmVkIGNoYXIgYikKLXsKLQlyZXR1cm4gKGIgLyAxMCkgKiAxNiArIChiICUgMTApOwotfQotCi0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHE0MF9nZXR0aW1lb2Zmc2V0KHZvaWQpCiB7CiAJcmV0dXJuIDUwMDAgKiAocWxfdGlja3MgIT0gMCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuM3gvdGltZS5jIGIvYXJjaC9tNjhrL3N1bjN4L3RpbWUuYwppbmRleCBmNWVhYWZiLi41MzZhMDRhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvc3VuM3gvdGltZS5jCisrKyBiL2FyY2gvbTY4ay9zdW4zeC90aW1lLmMKQEAgLTQ3LDIzICs0NywyMyBAQAogCiAJaWYoc2V0KSB7CiAJCWgtPmNzciB8PSBDX1dSSVRFOwotCQloLT5zZWMgPSBCSU4yQkNEKHQtPnRtX3NlYyk7Ci0JCWgtPm1pbiA9IEJJTjJCQ0QodC0+dG1fbWluKTsKLQkJaC0+aG91ciA9IEJJTjJCQ0QodC0+dG1faG91cik7Ci0JCWgtPndkYXkgPSBCSU4yQkNEKHQtPnRtX3dkYXkpOwotCQloLT5tZGF5ID0gQklOMkJDRCh0LT50bV9tZGF5KTsKLQkJaC0+bW9udGggPSBCSU4yQkNEKHQtPnRtX21vbik7Ci0JCWgtPnllYXIgPSBCSU4yQkNEKHQtPnRtX3llYXIpOworCQloLT5zZWMgPSBiaW4yYmNkKHQtPnRtX3NlYyk7CisJCWgtPm1pbiA9IGJpbjJiY2QodC0+dG1fbWluKTsKKwkJaC0+aG91ciA9IGJpbjJiY2QodC0+dG1faG91cik7CisJCWgtPndkYXkgPSBiaW4yYmNkKHQtPnRtX3dkYXkpOworCQloLT5tZGF5ID0gYmluMmJjZCh0LT50bV9tZGF5KTsKKwkJaC0+bW9udGggPSBiaW4yYmNkKHQtPnRtX21vbik7CisJCWgtPnllYXIgPSBiaW4yYmNkKHQtPnRtX3llYXIpOwogCQloLT5jc3IgJj0gfkNfV1JJVEU7CiAJfSBlbHNlIHsKIAkJaC0+Y3NyIHw9IENfUkVBRDsKLQkJdC0+dG1fc2VjID0gQkNEMkJJTihoLT5zZWMpOwotCQl0LT50bV9taW4gPSBCQ0QyQklOKGgtPm1pbik7Ci0JCXQtPnRtX2hvdXIgPSBCQ0QyQklOKGgtPmhvdXIpOwotCQl0LT50bV93ZGF5ID0gQkNEMkJJTihoLT53ZGF5KTsKLQkJdC0+dG1fbWRheSA9IEJDRDJCSU4oaC0+bWRheSk7Ci0JCXQtPnRtX21vbiA9IEJDRDJCSU4oaC0+bW9udGgpOwotCQl0LT50bV95ZWFyID0gQkNEMkJJTihoLT55ZWFyKTsKKwkJdC0+dG1fc2VjID0gYmNkMmJpbihoLT5zZWMpOworCQl0LT50bV9taW4gPSBiY2QyYmluKGgtPm1pbik7CisJCXQtPnRtX2hvdXIgPSBiY2QyYmluKGgtPmhvdXIpOworCQl0LT50bV93ZGF5ID0gYmNkMmJpbihoLT53ZGF5KTsKKwkJdC0+dG1fbWRheSA9IGJjZDJiaW4oaC0+bWRheSk7CisJCXQtPnRtX21vbiA9IGJjZDJiaW4oaC0+bW9udGgpOworCQl0LT50bV95ZWFyID0gYmNkMmJpbihoLT55ZWFyKTsKIAkJaC0+Y3NyICY9IH5DX1JFQUQ7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9LY29uZmlnIGIvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZwppbmRleCAyZTc1MTVlLi43NmI2NmZlIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9LY29uZmlnCisrKyBiL2FyY2gvbTY4a25vbW11L0tjb25maWcKQEAgLTczLDExICs3MywxMCBAQAogY29uZmlnIE5PX0lPUE9SVAogCWRlZl9ib29sIHkKIAotY29uZmlnIEFSQ0hfU1VQUE9SVFNfQU9VVAotCWRlZl9ib29sIHkKLQogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCiBjaG9pY2UKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL2Eub3V0LmggYi9hcmNoL202OGtub21tdS9pbmNsdWRlL2FzbS9hLm91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTE4ZWY5Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL2Eub3V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSA8YXNtLW02OGsvYS5vdXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9tNjhrbm9tbXUvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggMjdmMGVjNy4uYjgwNDY4MyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9tNjhrbm9tbXUvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTEwNSw2ICsxMDUsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggMGM5YmMwOS4uODI1MjlmNCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL202OGtub21tdS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC04NCwxMiArODQsMTQgQEAKICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTMJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nCiAJCQkJCSAgIFRJRl9ORUVEX1JFU0NIRUQgKi8KICNkZWZpbmUgVElGX01FTURJRQkJNAorI2RlZmluZSBUSUZfRlJFRVpFCQkxNgkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAvKiBhcyBhYm92ZSwgYnV0IGFzIGJpdCB2YWx1ZXMgKi8KICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJMHgwMDAwRkZGRQkvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDQ3NTAyZDUuLjNmMmQ3NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+Ci0jaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3RyYXBzLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvdHJhcHMuYwppbmRleCA0NmY4ZjlkLi41ZDVkNTZiIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvdHJhcHMuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IGNkNWZiZjYuLjVmMTQ5YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC01Miw2ICs1Miw3IEBACiAJc2VsZWN0IFNTQgogCXNlbGVjdCBTU0JfRFJJVkVSX01JUFMKIAlzZWxlY3QgU1NCX0RSSVZFUl9FWFRJRgorCXNlbGVjdCBTU0JfRU1CRURERUQKIAlzZWxlY3QgU1NCX1BDSUNPUkVfSE9TVE1PREUgaWYgUENJCiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwpAQCAtMTg4NCw2ICsxODg1LDggQEAKIAkgIGFkZCBpbml0cmQgb3IgaW5pdHJhbWZzIGltYWdlIHRvIHRoZSBrZXJuZWwgaW1hZ2UuCiAJICBPdGhlcndpc2UsIHNheSBOLgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIkJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykiCiAKIGNvbmZpZyBIV19IQVNfRUlTQQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTQ3eHgvZ3Bpby5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvZ3Bpby5jCmluZGV4IGY1YTUzYWMuLjliNzk4ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY200N3h4L2dwaW8uYworKysgYi9hcmNoL21pcHMvYmNtNDd4eC9ncGlvLmMKQEAgLTEyLDY4ICsxMiw1MSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLWJjbTQ3eHgvYmNtNDd4eC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWJjbTQ3eHgvZ3Bpby5oPgogCi1pbnQgYmNtNDd4eF9ncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQorI2lmIChCQ000N1hYX0NISVBDT19HUElPX0xJTkVTID4gQkNNNDdYWF9FWFRJRl9HUElPX0xJTkVTKQorc3RhdGljIERFQ0xBUkVfQklUTUFQKGdwaW9faW5fdXNlLCBCQ000N1hYX0NISVBDT19HUElPX0xJTkVTKTsKKyNlbHNlCitzdGF0aWMgREVDTEFSRV9CSVRNQVAoZ3Bpb19pbl91c2UsIEJDTTQ3WFhfRVhUSUZfR1BJT19MSU5FUyk7CisjZW5kaWYKKworaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICp0YWcpCiB7Ci0JaWYgKHNzYl9iY200N3h4LmNoaXBjby5kZXYpCisJaWYgKHNzYl9jaGlwY29fYXZhaWxhYmxlKCZzc2JfYmNtNDd4eC5jaGlwY28pICYmCisJICAgICgodW5zaWduZWQpZ3BpbyA+PSBCQ000N1hYX0NISVBDT19HUElPX0xJTkVTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3NiX2V4dGlmX2F2YWlsYWJsZSgmc3NiX2JjbTQ3eHguZXh0aWYpICYmCisJICAgICgodW5zaWduZWQpZ3BpbyA+PSBCQ000N1hYX0VYVElGX0dQSU9fTElORVMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KGdwaW8sIGdwaW9faW5fdXNlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChncGlvX3JlcXVlc3QpOworCit2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQoreworCWlmIChzc2JfY2hpcGNvX2F2YWlsYWJsZSgmc3NiX2JjbTQ3eHguY2hpcGNvKSAmJgorCSAgICAoKHVuc2lnbmVkKWdwaW8gPj0gQkNNNDdYWF9DSElQQ09fR1BJT19MSU5FUykpCisJCXJldHVybjsKKworCWlmIChzc2JfZXh0aWZfYXZhaWxhYmxlKCZzc2JfYmNtNDd4eC5leHRpZikgJiYKKwkgICAgKCh1bnNpZ25lZClncGlvID49IEJDTTQ3WFhfRVhUSUZfR1BJT19MSU5FUykpCisJCXJldHVybjsKKworCWNsZWFyX2JpdChncGlvLCBncGlvX2luX3VzZSk7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZnJlZSk7CisKK2ludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQoreworCWlmIChzc2JfY2hpcGNvX2F2YWlsYWJsZSgmc3NiX2JjbTQ3eHguY2hpcGNvKSkKIAkJcmV0dXJuIHNzYl9taXBzX2lycShzc2JfYmNtNDd4eC5jaGlwY28uZGV2KSArIDI7Ci0JZWxzZSBpZiAoc3NiX2JjbTQ3eHguZXh0aWYuZGV2KQorCWVsc2UgaWYgKHNzYl9leHRpZl9hdmFpbGFibGUoJnNzYl9iY200N3h4LmV4dGlmKSkKIAkJcmV0dXJuIHNzYl9taXBzX2lycShzc2JfYmNtNDd4eC5leHRpZi5kZXYpICsgMjsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoYmNtNDd4eF9ncGlvX3RvX2lycSk7Ci0KLWludCBiY200N3h4X2dwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKHNzYl9iY200N3h4LmNoaXBjby5kZXYpCi0JCXJldHVybiBzc2JfY2hpcGNvX2dwaW9faW4oJnNzYl9iY200N3h4LmNoaXBjbywgMSA8PCBncGlvKTsKLQllbHNlIGlmIChzc2JfYmNtNDd4eC5leHRpZi5kZXYpCi0JCXJldHVybiBzc2JfZXh0aWZfZ3Bpb19pbigmc3NiX2JjbTQ3eHguZXh0aWYsIDEgPDwgZ3Bpbyk7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJjbTQ3eHhfZ3Bpb19nZXRfdmFsdWUpOwotCi12b2lkIGJjbTQ3eHhfZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCWlmIChzc2JfYmNtNDd4eC5jaGlwY28uZGV2KQotCQlzc2JfY2hpcGNvX2dwaW9fb3V0KCZzc2JfYmNtNDd4eC5jaGlwY28sCi0JCQkJICAgIDEgPDwgZ3BpbywKLQkJCQkgICAgdmFsdWUgPyAxIDw8IGdwaW8gOiAwKTsKLQllbHNlIGlmIChzc2JfYmNtNDd4eC5leHRpZi5kZXYpCi0JCXNzYl9leHRpZl9ncGlvX291dCgmc3NiX2JjbTQ3eHguZXh0aWYsCi0JCQkJICAgMSA8PCBncGlvLAotCQkJCSAgIHZhbHVlID8gMSA8PCBncGlvIDogMCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChiY200N3h4X2dwaW9fc2V0X3ZhbHVlKTsKLQotaW50IGJjbTQ3eHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKLXsKLQlpZiAoc3NiX2JjbTQ3eHguY2hpcGNvLmRldiAmJiAoZ3BpbyA8IEJDTTQ3WFhfQ0hJUENPX0dQSU9fTElORVMpKQotCQlzc2JfY2hpcGNvX2dwaW9fb3V0ZW4oJnNzYl9iY200N3h4LmNoaXBjbywKLQkJCQkgICAgICAxIDw8IGdwaW8sIDApOwotCWVsc2UgaWYgKHNzYl9iY200N3h4LmV4dGlmLmRldiAmJiAoZ3BpbyA8IEJDTTQ3WFhfRVhUSUZfR1BJT19MSU5FUykpCi0JCXNzYl9leHRpZl9ncGlvX291dGVuKCZzc2JfYmNtNDd4eC5leHRpZiwKLQkJCQkgICAgIDEgPDwgZ3BpbywgMCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJjbTQ3eHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQpOwotCi1pbnQgYmNtNDd4eF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCWJjbTQ3eHhfZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOwotCi0JaWYgKHNzYl9iY200N3h4LmNoaXBjby5kZXYgJiYgKGdwaW8gPCBCQ000N1hYX0NISVBDT19HUElPX0xJTkVTKSkKLQkJc3NiX2NoaXBjb19ncGlvX291dGVuKCZzc2JfYmNtNDd4eC5jaGlwY28sCi0JCQkJICAgICAgMSA8PCBncGlvLCAxIDw8IGdwaW8pOwotCWVsc2UgaWYgKHNzYl9iY200N3h4LmV4dGlmLmRldiAmJiAoZ3BpbyA8IEJDTTQ3WFhfRVhUSUZfR1BJT19MSU5FUykpCi0JCXNzYl9leHRpZl9ncGlvX291dGVuKCZzc2JfYmNtNDd4eC5leHRpZiwKLQkJCQkgICAgIDEgPDwgZ3BpbywgMSA8PCBncGlvKTsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoYmNtNDd4eF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQpOworRVhQT1JUX1NZTUJPTF9HUEwoZ3Bpb190b19pcnEpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvc2V0dXAuYwppbmRleCA4ZDM2ZjE4Li4yZjU4MGZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3NiL3NzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2JfZW1iZWRkZWQuaD4KICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KICNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KQEAgLTQxLDcgKzQyLDcgQEAKIAlwcmludGsoS0VSTl9BTEVSVCAiUGxlYXNlIHN0YW5kIGJ5IHdoaWxlIHJlYm9vdGluZyB0aGUgc3lzdGVtLi4uXG4iKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCS8qIFNldCB0aGUgd2F0Y2hkb2cgdGltZXIgdG8gcmVzZXQgaW1tZWRpYXRlbHkgKi8KLQlzc2JfY2hpcGNvX3dhdGNoZG9nX3RpbWVyX3NldCgmc3NiX2JjbTQ3eHguY2hpcGNvLCAxKTsKKwlzc2Jfd2F0Y2hkb2dfdGltZXJfc2V0KCZzc2JfYmNtNDd4eCwgMSk7CiAJd2hpbGUgKDEpCiAJCWNwdV9yZWxheCgpOwogfQpAQCAtNTAsNyArNTEsNyBAQAogewogCS8qIERpc2FibGUgaW50ZXJydXB0cyBhbmQgd2F0Y2hkb2cgYW5kIHNwaW4gZm9yZXZlciAqLwogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0Jc3NiX2NoaXBjb193YXRjaGRvZ190aW1lcl9zZXQoJnNzYl9iY200N3h4LmNoaXBjbywgMCk7CisJc3NiX3dhdGNoZG9nX3RpbWVyX3NldCgmc3NiX2JjbTQ3eHgsIDApOwogCXdoaWxlICgxKQogCQljcHVfcmVsYXgoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3dndDYzNHUuYyBiL2FyY2gvbWlwcy9iY200N3h4L3dndDYzNHUuYwppbmRleCBkMWQ5MGM5Li5lZjAwZTdmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC93Z3Q2MzR1LmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jCkBAIC0xMSw2ICsxMSw5IEBACiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3NiL3NzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaC1iY200N3h4L2JjbTQ3eHguaD4KIAogLyogR1BJTyBkZWZpbml0aW9ucyBmb3IgdGhlIFdHVDYzNFUgKi8KQEAgLTk5LDYgKzEwMiwzMCBAQAogCSZ3Z3Q2MzR1X2dwaW9fbGVkcywKIH07CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCBncGlvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICppZ25vcmVkKQoreworCWludCBzdGF0ZTsKKworCS8qIEludGVycnVwdHMgYXJlIHNoYXJlZCwgY2hlY2sgaWYgdGhlIGN1cnJlbnQgb25lIGlzCisJICAgYSBHUElPIGludGVycnVwdC4gKi8KKwlpZiAoIXNzYl9jaGlwY29faXJxX3N0YXR1cygmc3NiX2JjbTQ3eHguY2hpcGNvLAorCQkJCSAgIFNTQl9DSElQQ09fSVJRX0dQSU8pKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlzdGF0ZSA9IGdwaW9fZ2V0X3ZhbHVlKFdHVDYzNFVfR1BJT19SRVNFVCk7CisKKwkvKiBJbnRlcnJ1cHQgYXJlIGxldmVsIHRyaWdnZXJlZCwgcmV2ZXJ0IHRoZSBpbnRlcnJ1cHQgcG9sYXJpdHkKKwkgICB0byBjbGVhciB0aGUgaW50ZXJydXB0LiAqLworCWdwaW9fcG9sYXJpdHkoV0dUNjM0VV9HUElPX1JFU0VULCBzdGF0ZSk7CisKKwlpZiAoIXN0YXRlKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlJlc2V0IGJ1dHRvbiBwcmVzc2VkIik7CisJCWN0cmxfYWx0X2RlbCgpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogc3RhdGljIGludCBfX2luaXQgd2d0NjM0dV9pbml0KHZvaWQpCiB7CiAJLyogVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZGV0ZWN0IHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gYSBXR1Q2MzRVCkBAIC0xMTIsNiArMTM5LDE5IEBACiAJICAgICgoZXQwbWFjWzFdID09IDB4MDkgJiYgZXQwbWFjWzJdID09IDB4NWIpIHx8CiAJICAgICAoZXQwbWFjWzFdID09IDB4MGYgJiYgZXQwbWFjWzJdID09IDB4YjUpKSkgewogCQlzdHJ1Y3Qgc3NiX21pcHNjb3JlICptY29yZSA9ICZzc2JfYmNtNDd4eC5taXBzY29yZTsKKworCQlwcmludGsoS0VSTl9JTkZPICJXR1Q2MzRVIG1hY2hpbmUgZGV0ZWN0ZWQuXG4iKTsKKworCQlpZiAoIXJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKFdHVDYzNFVfR1BJT19SRVNFVCksCisJCQkJIGdwaW9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCQkgIldHVDYzNFUgR1BJTyIsICZzc2JfYmNtNDd4eC5jaGlwY28pKSB7CisJCQlncGlvX2RpcmVjdGlvbl9pbnB1dChXR1Q2MzRVX0dQSU9fUkVTRVQpOworCQkJZ3Bpb19pbnRtYXNrKFdHVDYzNFVfR1BJT19SRVNFVCwgMSk7CisJCQlzc2JfY2hpcGNvX2lycV9tYXNrKCZzc2JfYmNtNDd4eC5jaGlwY28sCisJCQkJCSAgICBTU0JfQ0hJUENPX0lSUV9HUElPLAorCQkJCQkgICAgU1NCX0NISVBDT19JUlFfR1BJTyk7CisJCX0KKwogCQl3Z3Q2MzR1X2ZsYXNoX2RhdGEud2lkdGggPSBtY29yZS0+Zmxhc2hfYnVzd2lkdGg7CiAJCXdndDYzNHVfZmxhc2hfcmVzb3VyY2Uuc3RhcnQgPSBtY29yZS0+Zmxhc2hfd2luZG93OwogCQl3Z3Q2MzR1X2ZsYXNoX3Jlc291cmNlLmVuZCA9IG1jb3JlLT5mbGFzaF93aW5kb3cKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvdGltZS5jIGIvYXJjaC9taXBzL2RlYy90aW1lLmMKaW5kZXggMzk2NWZkYS4uMTM1OWMwMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy90aW1lLmMKKysrIGIvYXJjaC9taXBzL2RlYy90aW1lLmMKQEAgLTQ1LDEyICs0NSwxMiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CiAKIAlpZiAoIShDTU9TX1JFQUQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJc2VjID0gQkNEMkJJTihzZWMpOwotCQltaW4gPSBCQ0QyQklOKG1pbik7Ci0JCWhvdXIgPSBCQ0QyQklOKGhvdXIpOwotCQlkYXkgPSBCQ0QyQklOKGRheSk7Ci0JCW1vbiA9IEJDRDJCSU4obW9uKTsKLQkJeWVhciA9IEJDRDJCSU4oeWVhcik7CisJCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwkJbWluID0gYmNkMmJpbihtaW4pOworCQlob3VyID0gYmNkMmJpbihob3VyKTsKKwkJZGF5ID0gYmNkMmJpbihkYXkpOworCQltb24gPSBiY2QyYmluKG1vbik7CisJCXllYXIgPSBiY2QyYmluKHllYXIpOwogCX0KIAogCXllYXIgKz0gcmVhbF95ZWFyIC0gNzIgKyAyMDAwOwpAQCAtODMsNyArODMsNyBAQAogCiAJY21vc19taW51dGVzID0gQ01PU19SRUFEKFJUQ19NSU5VVEVTKTsKIAlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkKLQkJY21vc19taW51dGVzID0gQkNEMkJJTihjbW9zX21pbnV0ZXMpOworCQljbW9zX21pbnV0ZXMgPSBiY2QyYmluKGNtb3NfbWludXRlcyk7CiAKIAkvKgogCSAqIHNpbmNlIHdlJ3JlIG9ubHkgYWRqdXN0aW5nIG1pbnV0ZXMgYW5kIHNlY29uZHMsCkBAIC05OSw4ICs5OSw4IEBACiAKIAlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewogCQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQkJcmVhbF9zZWNvbmRzID0gQklOMkJDRChyZWFsX3NlY29uZHMpOwotCQkJcmVhbF9taW51dGVzID0gQklOMkJDRChyZWFsX21pbnV0ZXMpOworCQkJcmVhbF9zZWNvbmRzID0gYmluMmJjZChyZWFsX3NlY29uZHMpOworCQkJcmVhbF9taW51dGVzID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOwogCQl9CiAJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLCBSVENfU0VDT05EUyk7CiAJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLCBSVENfTUlOVVRFUyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vaXJxLmMKaW5kZXggZDk1NjA0Ny4uOTFjYmQ5NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL2lycS5jCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9pcnEuYwpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL3Byb20uYyBiL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9wcm9tLmMKaW5kZXggNWU5MmIzYS4uZTE0YTJlMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL3Byb20uYworKysgYi9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vcHJvbS5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9lbW1hMnJoL2VtbWEycmguaD4KLSNpbmNsdWRlIDxhc20vZGVidWcuaD4KIAogY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvcGxhdGZvcm0uYwppbmRleCBkNzA2MjdkLi5mYjljZGEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL3BsYXRmb3JtLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL2VtbWEycmgvZW1tYTJyaC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYS5vdXQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hLm91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWQ4MzcxLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hLm91dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NCAtIDE5OTksIDIwMDMgYnkgUmFsZiBCYWVjaGxlCi0gKi8KLSNpZm5kZWYgX0FTTV9BX09VVF9ICi0jZGVmaW5lIF9BU01fQV9PVVRfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0KLSNlbmRpZgotCi1zdHJ1Y3QgZXhlYwotewotCXVuc2lnbmVkIGxvbmcgYV9pbmZvOwkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCi0JdW5zaWduZWQgYV90ZXh0OwkvKiBsZW5ndGggb2YgdGV4dCwgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBhX2RhdGE7CS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGFfYnNzOwkJLyogbGVuZ3RoIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmVhIGZvcgotCQkJCSAgICBmaWxlLCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGFfc3ltczsJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSBkYXRhIGluIGZpbGUsCi0JCQkJICAgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBhX2VudHJ5OwkvKiBzdGFydCBhZGRyZXNzICovCi0JdW5zaWduZWQgYV90cnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluCi0JCQkJICAgIGJ5dGVzICovCi0JdW5zaWduZWQgYV9kcnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIGRhdGEsIGluIGJ5dGVzICovCi19OwotCi0jZGVmaW5lIE5fVFJTSVpFKGEpCSgoYSkuYV90cnNpemUpCi0jZGVmaW5lIE5fRFJTSVpFKGEpCSgoYSkuYV9kcnNpemUpCi0jZGVmaW5lIE5fU1lNU0laRShhKQkoKGEpLmFfc3ltcykKLQotI2VuZGlmIC8qIF9BU01fQV9PVVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jZXZ0LXI0ay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NldnQtcjRrLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLW1pcHMvY2V2dC1yNGsuaApyZW5hbWUgdG8gYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NldnQtcjRrLmgKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBmNjlmN2FjLi5hOGVhYzE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0yNDcsMTAgKzI0Nyw4IEBACiAKICNpZmRlZiBDT05GSUdfMzJCSVQKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJCQkJXAorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpZiAoaWJjczIpCQkJCQkJCVwKLQkJc2V0X3BlcnNvbmFsaXR5KFBFUl9TVlI0KTsJCQkJXAogCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpOwkJCQkJXAogCQkJCQkJCQkJXAogCWN1cnJlbnQtPnRocmVhZC5hYmkgPSAmbWlwc19hYmk7CQkJCVwKQEAgLTI5Niw3ICsyOTQsNyBAQAogI2RlZmluZSBfX1NFVF9QRVJTT05BTElUWTMyKGV4KQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJCQkJXAorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAljbGVhcl90aHJlYWRfZmxhZyhUSUZfMzJCSVRfUkVHUyk7CQkJCVwKIAljbGVhcl90aHJlYWRfZmxhZyhUSUZfMzJCSVRfQUREUik7CQkJCVwKQEAgLTMwNiw5ICszMDQsNyBAQAogCWVsc2UJCQkJCQkJCVwKIAkJY3VycmVudC0+dGhyZWFkLmFiaSA9ICZtaXBzX2FiaTsJCQlcCiAJCQkJCQkJCQlcCi0JaWYgKGliY3MyKQkJCQkJCQlcCi0JCXNldF9wZXJzb25hbGl0eShQRVJfU1ZSNCk7CQkJCVwKLQllbHNlIGlmIChjdXJyZW50LT5wZXJzb25hbGl0eSAhPSBQRVJfTElOVVgzMikJCQlcCisJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQkJCVwKIAkJc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCk7CQkJCVwKIH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTQ3eHgvZ3Bpby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9ncGlvLmgKaW5kZXggY2ZjOGY0ZC4uZDhmZjRjZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9ncGlvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9ncGlvLmgKQEAgLTksNDcgKzksNDYgQEAKICNpZm5kZWYgX19CQ000N1hYX0dQSU9fSAogI2RlZmluZSBfX0JDTTQ3WFhfR1BJT19ICiAKKyNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiX2VtYmVkZGVkLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYmNtNDd4eC9iY200N3h4Lmg+CisKICNkZWZpbmUgQkNNNDdYWF9FWFRJRl9HUElPX0xJTkVTCTUKICNkZWZpbmUgQkNNNDdYWF9DSElQQ09fR1BJT19MSU5FUwkxNgogCi1leHRlcm4gaW50IGJjbTQ3eHhfZ3Bpb190b19pcnEodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gaW50IGJjbTQ3eHhfZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gdm9pZCBiY200N3h4X2dwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci1leHRlcm4gaW50IGJjbTQ3eHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gaW50IGJjbTQ3eHhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKLXsKLSAgICAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiBiY200N3h4X2dwaW9fdG9faXJxKGdwaW8pOwotfQorZXh0ZXJuIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOworZXh0ZXJuIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pOworZXh0ZXJuIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKTsKIAogc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKIHsKLQlyZXR1cm4gYmNtNDd4eF9ncGlvX2dldF92YWx1ZShncGlvKTsKKwlyZXR1cm4gc3NiX2dwaW9faW4oJnNzYl9iY200N3h4LCAxIDw8IGdwaW8pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewotCWJjbTQ3eHhfZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOworCXNzYl9ncGlvX291dCgmc3NiX2JjbTQ3eHgsIDEgPDwgZ3BpbywgdmFsdWUgPyAxIDw8IGdwaW8gOiAwKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKIHsKLQlyZXR1cm4gYmNtNDd4eF9ncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKKwlyZXR1cm4gc3NiX2dwaW9fb3V0ZW4oJnNzYl9iY200N3h4LCAxIDw8IGdwaW8sIDApOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewotCXJldHVybiBiY200N3h4X2dwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLCB2YWx1ZSk7CisJcmV0dXJuIHNzYl9ncGlvX291dGVuKCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLCAxIDw8IGdwaW8pOworfQorCitzdGF0aWMgaW50IGdwaW9faW50bWFzayh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJcmV0dXJuIHNzYl9ncGlvX2ludG1hc2soJnNzYl9iY200N3h4LCAxIDw8IGdwaW8sCisJCQkJdmFsdWUgPyAxIDw8IGdwaW8gOiAwKTsKK30KKworc3RhdGljIGludCBncGlvX3BvbGFyaXR5KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gc3NiX2dwaW9fcG9sYXJpdHkoJnNzYl9iY200N3h4LCAxIDw8IGdwaW8sCisJCQkJIHZhbHVlID8gMSA8PCBncGlvIDogMCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC93YXIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTQ3eHgvd2FyLmgKaW5kZXggNGEyYjc5OC4uODdjZDQ2NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC93YXIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L3dhci5oCkBAIC01LDggKzUsOCBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNyBieSBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CiAgKi8KLSNpZm5kZWYgX19BU01fTUlQU19NQUNIX0JDTTk0N1hYX1dBUl9ICi0jZGVmaW5lIF9fQVNNX01JUFNfTUFDSF9CQ005NDdYWF9XQVJfSAorI2lmbmRlZiBfX0FTTV9NSVBTX01BQ0hfQkNNNDdYWF9XQVJfSAorI2RlZmluZSBfX0FTTV9NSVBTX01BQ0hfQkNNNDdYWF9XQVJfSAogCiAjZGVmaW5lIFI0NjAwX1YxX0lOREVYX0lDQUNIRU9QX1dBUgkwCiAjZGVmaW5lIFI0NjAwX1YxX0hJVF9DQUNIRU9QX1dBUgkwCkBAIC0yMiw0ICsyMiw0IEBACiAjZGVmaW5lIFIxMDAwMF9MTFNDX1dBUgkJCTAKICNkZWZpbmUgTUlQUzM0S19NSVNTRURfSVRMQl9XQVIJCTAKIAotI2VuZGlmIC8qIF9fQVNNX01JUFNfTUFDSF9CQ005NDdYWF9XQVJfSCAqLworI2VuZGlmIC8qIF9fQVNNX01JUFNfTUFDSF9CQ000N1hYX1dBUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL2lkZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9pZGUuaAppbmRleCA3MzAwOGY3Li45YzkzYTViIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL2lkZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvaWRlLmgKQEAgLTE5LDM1ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgaWRlX3Byb2JlX2xlZ2FjeSh2b2lkKQotewotI2lmZGVmIENPTkZJR19QQ0kKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCS8qCi0JICogVGhpcyBjYW4gYmUgY2FsbGVkIG9uIHRoZSBpZGVfc2V0dXAoKSBwYXRoLCBzdXBlci1lYXJseSBpbgotCSAqIGJvb3QuICBCdXQgdGhlIGRvd25fcmVhZCgpIHdpbGwgZW5hYmxlIGxvY2FsIGludGVycnVwdHMsCi0JICogd2hpY2ggY2FuIGNhdXNlIHNvbWUgbWFjaGluZXMgdG8gY3Jhc2guICBTbyBoZXJlIHdlIGRldGVjdAotCSAqIGFuZCBmbGFnIHRoYXQgc2l0dWF0aW9uIGFuZCBiYWlsIG91dCBlYXJseS4KLQkgKi8KLQlpZiAobm9fcGNpX2RldmljZXMoKSkKLQkJcmV0dXJuIDA7Ci0JZGV2ID0gcGNpX2dldF9jbGFzcyhQQ0lfQ0xBU1NfQlJJREdFX0VJU0EgPDwgOCwgTlVMTCk7Ci0JaWYgKGRldikKLQkJZ290byBmb3VuZDsKLQlkZXYgPSBwY2lfZ2V0X2NsYXNzKFBDSV9DTEFTU19CUklER0VfSVNBIDw8IDgsIE5VTEwpOwotCWlmIChkZXYpCi0JCWdvdG8gZm91bmQ7Ci0JcmV0dXJuIDA7Ci1mb3VuZDoKLQlwY2lfZGV2X3B1dChkZXYpOwotCXJldHVybiAxOwotI2VsaWYgZGVmaW5lZChDT05GSUdfRUlTQSkgfHwgZGVmaW5lZChDT05GSUdfSVNBKQotCXJldHVybiAxOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgotfQotCiAvKiBNSVBTIHBvcnQgYW5kIG1lbW9yeS1tYXBwZWQgSS9PIHN0cmluZyBvcGVyYXRpb25zLiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lkZV9mbHVzaF9wcm9sb2d1ZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyMi9kczEyODYuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjIvZHMxMjg2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxOWYxZWEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyMi9kczEyODYuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDEsIDAzIGJ5IFJhbGYgQmFlY2hsZQotICoKLSAqIFJUQyByb3V0aW5lcyBmb3IgUEMgc3R5bGUgYXR0YWNoZWQgRGFsbGFzIGNoaXAuCi0gKi8KLSNpZm5kZWYgX19BU01fTUFDSF9JUDIyX0RTMTI4Nl9ICi0jZGVmaW5lIF9fQVNNX01BQ0hfSVAyMl9EUzEyODZfSAotCi0jaW5jbHVkZSA8YXNtL3NnaS9ocGMzLmg+Ci0KLSNkZWZpbmUgcnRjX3JlYWQocmVnKQkJKGhwYzNjMC0+cnRjcmVnc1socmVnKV0gJiAweGZmKQotI2RlZmluZSBydGNfd3JpdGUoZGF0YSwgcmVnKQlkbyB7IGhwYzNjMC0+cnRjcmVnc1socmVnKV0gPSAoZGF0YSk7IH0gd2hpbGUoMCkKLQotI2VuZGlmIC8qIF9fQVNNX01BQ0hfSVAyMl9EUzEyODZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyOC9kczEyODYuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjgvZHMxMjg2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MWJiOWEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyOC9kczEyODYuaAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9NQUNIX0lQMjhfRFMxMjg2X0gKLSNkZWZpbmUgX19BU01fTUFDSF9JUDI4X0RTMTI4Nl9ICi0jaW5jbHVkZSA8YXNtL21hY2gtaXAyMi9kczEyODYuaD4KLSNlbmRpZiAvKiBfX0FTTV9NQUNIX0lQMjhfRFMxMjg2X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYzE0NjgxOC10aW1lLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWMxNDY4MTgtdGltZS5oCmluZGV4IGNkYzM3OWEuLjE5OWI0NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYzE0NjgxOC10aW1lLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21jMTQ2ODE4LXRpbWUuaApAQCAtNDQsNyArNDQsNyBAQAogCiAJY21vc19taW51dGVzID0gQ01PU19SRUFEKFJUQ19NSU5VVEVTKTsKIAlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkKLQkJQkNEX1RPX0JJTihjbW9zX21pbnV0ZXMpOworCQljbW9zX21pbnV0ZXMgPSBiY2QyYmluKGNtb3NfbWludXRlcyk7CiAKIAkvKgogCSAqIHNpbmNlIHdlJ3JlIG9ubHkgYWRqdXN0aW5nIG1pbnV0ZXMgYW5kIHNlY29uZHMsCkBAIC02MCw4ICs2MCw4IEBACiAKIAlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewogCQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQkJQklOX1RPX0JDRChyZWFsX3NlY29uZHMpOwotCQkJQklOX1RPX0JDRChyZWFsX21pbnV0ZXMpOworCQkJcmVhbF9zZWNvbmRzID0gYmluMmJjZChyZWFsX3NlY29uZHMpOworCQkJcmVhbF9taW51dGVzID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOwogCQl9CiAJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLCBSVENfU0VDT05EUyk7CiAJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLCBSVENfTUlOVVRFUyk7CkBAIC0xMDMsMTIgKzEwMywxMiBAQAogCX0gd2hpbGUgKHNlYyAhPSBDTU9TX1JFQUQoUlRDX1NFQ09ORFMpKTsKIAogCWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlCQ0RfVE9fQklOKHNlYyk7Ci0JCUJDRF9UT19CSU4obWluKTsKLQkJQkNEX1RPX0JJTihob3VyKTsKLQkJQkNEX1RPX0JJTihkYXkpOwotCQlCQ0RfVE9fQklOKG1vbik7Ci0JCUJDRF9UT19CSU4oeWVhcik7CisJCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwkJbWluID0gYmNkMmJpbihtaW4pOworCQlob3VyID0gYmNkMmJpbihob3VyKTsKKwkJZGF5ID0gYmNkMmJpbihkYXkpOworCQltb24gPSBiY2QyYmluKG1vbik7CisJCXllYXIgPSBiY2QyYmluKHllYXIpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCXllYXIgPSBtYzE0NjgxOF9kZWNvZGVfeWVhcih5ZWFyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggNWQ5OGEzYy4uMWExZjMyMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCQkiCW9yaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgyMDAwCQlcbiIKIAkJIgl4b3JpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDIwMDAJCVxuIgogCQkiCXNjCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYmVxemwJJVt0aWNrZXRdLCAyZgkJCQlcbiIKKwkJIgliZXF6bAklW3RpY2tldF0sIDFiCQkJCVxuIgogCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKIAkJICBbdGlja2V0XSAiPSZyIiAodG1wKSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggMmZlZmIxNC4uYWEyYzU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTYzLDQxICs2Myw2IEBACiAjZGVmaW5lIG1lcmdlXzY0KHIxLCByMikgKCgoKHIyKSAmIDB4ZmZmZmZmZmZVTCkgPDwgMzIpICsgKChyMSkgJiAweGZmZmZmZmZmVUwpKQogI2VuZGlmCiAKLS8qCi0gKiBSZXZhbGlkYXRlIHRoZSBpbm9kZS4gVGhpcyBpcyByZXF1aXJlZCBmb3IgcHJvcGVyIE5GUyBhdHRyaWJ1dGUgY2FjaGluZy4KLSAqLwotCi1pbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICpzdGF0YnVmKQotewotCXN0cnVjdCBjb21wYXRfc3RhdCB0bXA7Ci0KLQlpZiAoIW5ld192YWxpZF9kZXYoc3RhdC0+ZGV2KSB8fCAhbmV3X3ZhbGlkX2RldihzdGF0LT5yZGV2KSkKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0KLQltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOwotCXRtcC5zdF9kZXYgPSBuZXdfZW5jb2RlX2RldihzdGF0LT5kZXYpOwotCXRtcC5zdF9pbm8gPSBzdGF0LT5pbm87Ci0JaWYgKHNpemVvZih0bXAuc3RfaW5vKSA8IHNpemVvZihzdGF0LT5pbm8pICYmIHRtcC5zdF9pbm8gIT0gc3RhdC0+aW5vKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQl0bXAuc3RfbW9kZSA9IHN0YXQtPm1vZGU7Ci0JdG1wLnN0X25saW5rID0gc3RhdC0+bmxpbms7Ci0JU0VUX1VJRCh0bXAuc3RfdWlkLCBzdGF0LT51aWQpOwotCVNFVF9HSUQodG1wLnN0X2dpZCwgc3RhdC0+Z2lkKTsKLQl0bXAuc3RfcmRldiA9IG5ld19lbmNvZGVfZGV2KHN0YXQtPnJkZXYpOwotCXRtcC5zdF9zaXplID0gc3RhdC0+c2l6ZTsKLQl0bXAuc3RfYXRpbWUgPSBzdGF0LT5hdGltZS50dl9zZWM7Ci0JdG1wLnN0X210aW1lID0gc3RhdC0+bXRpbWUudHZfc2VjOwotCXRtcC5zdF9jdGltZSA9IHN0YXQtPmN0aW1lLnR2X3NlYzsKLSNpZmRlZiBTVEFUX0hBVkVfTlNFQwotCXRtcC5zdF9hdGltZV9uc2VjID0gc3RhdC0+YXRpbWUudHZfbnNlYzsKLQl0bXAuc3RfbXRpbWVfbnNlYyA9IHN0YXQtPm10aW1lLnR2X25zZWM7Ci0JdG1wLnN0X2N0aW1lX25zZWMgPSBzdGF0LT5jdGltZS50dl9uc2VjOwotI2VuZGlmCi0JdG1wLnN0X2Jsb2NrcyA9IHN0YXQtPmJsb2NrczsKLQl0bXAuc3RfYmxrc2l6ZSA9IHN0YXQtPmJsa3NpemU7Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcihzdGF0YnVmLCAmdG1wLCBzaXplb2YodG1wKSkgPyAtRUZBVUxUIDogMDsKLX0KLQogYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nCiBzeXMzMl9tbWFwMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQpAQCAtMTY4LDcyICsxMzMsNiBAQAogCXJldHVybiBzeXNfZnRydW5jYXRlKGZkLCBtZXJnZV82NChhMiwgYTMpKTsKIH0KIAotc3RhdGljIGlubGluZSBsb25nCi1nZXRfdHYzMihzdHJ1Y3QgdGltZXZhbCAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKLXsKLQlyZXR1cm4gKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGksIHNpemVvZigqaSkpIHx8Ci0JCShfX2dldF91c2VyKG8tPnR2X3NlYywgJmktPnR2X3NlYykgfAotCQkgX19nZXRfdXNlcihvLT50dl91c2VjLCAmaS0+dHZfdXNlYykpKTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nCi1wdXRfdHYzMihzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICpvLCBzdHJ1Y3QgdGltZXZhbCAqaSkKLXsKLQlyZXR1cm4gKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBvLCBzaXplb2YoKm8pKSB8fAotCQkoX19wdXRfdXNlcihpLT50dl9zZWMsICZvLT50dl9zZWMpIHwKLQkJIF9fcHV0X3VzZXIoaS0+dHZfdXNlYywgJm8tPnR2X3VzZWMpKSk7Ci19Ci0KLWV4dGVybiBzdHJ1Y3QgdGltZXpvbmUgc3lzX3R6OwotCi1hc21saW5rYWdlIGludAotc3lzMzJfZ2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlpZiAodHYpIHsKLQkJc3RydWN0IHRpbWV2YWwga3R2OwotCQlkb19nZXR0aW1lb2ZkYXkoJmt0dik7Ci0JCWlmIChwdXRfdHYzMih0diwgJmt0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIodHosICZzeXNfdHosIHNpemVvZihzeXNfdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGdldF90czMyKHN0cnVjdCB0aW1lc3BlYyAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKLXsKLQlsb25nIHVzZWM7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgaSwgc2l6ZW9mKCppKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChfX2dldF91c2VyKG8tPnR2X3NlYywgJmktPnR2X3NlYykpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChfX2dldF91c2VyKHVzZWMsICZpLT50dl91c2VjKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jby0+dHZfbnNlYyA9IHVzZWMgKiAxMDAwOwotCQlyZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSBpbnQKLXN5czMyX3NldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0Jc3RydWN0IHRpbWVzcGVjIGt0czsKLQlzdHJ1Y3QgdGltZXpvbmUga3R6OwotCi0gCWlmICh0dikgewotCQlpZiAoZ2V0X3RzMzIoJmt0cywgdHYpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmICh0eikgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmt0eiwgdHosIHNpemVvZihrdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldHVybiBkb19zeXNfc2V0dGltZW9mZGF5KHR2ID8gJmt0cyA6IE5VTEwsIHR6ID8gJmt0eiA6IE5VTEwpOwotfQotCiBhc21saW5rYWdlIGludCBzeXMzMl9sbHNlZWsodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgb2Zmc2V0X2hpZ2gsCiAJCQkgICAgdW5zaWduZWQgaW50IG9mZnNldF9sb3csIGxvZmZfdCBfX3VzZXIgKiByZXN1bHQsCiAJCQkgICAgdW5zaWduZWQgaW50IG9yaWdpbikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvYy5jIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jLmMKaW5kZXggNzViYjEzMC4uMjY3NjBjYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAlzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3JcdFx0OiAlbGRcbiIsIG4pOwogCXNwcmludGYoZm10LCAiY3B1IG1vZGVsXHRcdDogJSVzIFYlJWQuJSVkJXNcbiIsCiAJICAgICAgICBjcHVfZGF0YVtuXS5vcHRpb25zICYgTUlQU19DUFVfRlBVID8gIiAgRlBVIFYlZC4lZCIgOiAiIik7Ci0Jc2VxX3ByaW50ZihtLCBmbXQsIF9fY3B1X25hbWVbc21wX3Byb2Nlc3Nvcl9pZCgpXSwKKwlzZXFfcHJpbnRmKG0sIGZtdCwgX19jcHVfbmFtZVtuXSwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiA+PiA0KSAmIDB4MGYsIHZlcnNpb24gJiAweDBmLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcF92ZXJzID4+IDQpICYgMHgwZiwgZnBfdmVycyAmIDB4MGYpOwogCXNlcV9wcmludGYobSwgIkJvZ29NSVBTXHRcdDogJWx1LiUwMmx1XG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYwppbmRleCAyMmZjMTliLi5jYTJlNDAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgotI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwppbmRleCBkZmQ4NjhiLi40Y2U5M2FhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3J0bHguYworKysgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwpAQCAtNTIyLDggKzUyMiw4IEBACiAJCWF0b21pY19zZXQoJmNoYW5uZWxfd3FzW2ldLmluX29wZW4sIDApOwogCQltdXRleF9pbml0KCZjaGFubmVsX3dxc1tpXS5tdXRleCk7CiAKLQkJZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKG10X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgaSksCi0JCQkJCSAgICBOVUxMLCAiJXMlZCIsIG1vZHVsZV9uYW1lLCBpKTsKKwkJZGV2ID0gZGV2aWNlX2NyZWF0ZShtdF9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIGkpLCBOVUxMLAorCQkJCSAgICAiJXMlZCIsIG1vZHVsZV9uYW1lLCBpKTsKIAkJaWYgKElTX0VSUihkZXYpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGRldik7CiAJCQlnb3RvIG91dF9jaHJkZXY7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggMzI0YzU0OS4uZTI2NmIzYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJUFRSCXN5c19mY2hvd24KIAlQVFIJc3lzX2xjaG93bgogCVBUUglzeXNfdW1hc2sKLQlQVFIJc3lzMzJfZ2V0dGltZW9mZGF5CisJUFRSCWNvbXBhdF9zeXNfZ2V0dGltZW9mZGF5CiAJUFRSCWNvbXBhdF9zeXNfZ2V0cmxpbWl0CQkvKiA2MDk1ICovCiAJUFRSCWNvbXBhdF9zeXNfZ2V0cnVzYWdlCiAJUFRSCWNvbXBhdF9zeXNfc3lzaW5mbwpAQCAtMjc5LDcgKzI3OSw3IEBACiAJUFRSCXN5c19jaHJvb3QKIAlQVFIJc3lzX3N5bmMKIAlQVFIJc3lzX2FjY3QKLQlQVFIJc3lzMzJfc2V0dGltZW9mZGF5CisJUFRSCWNvbXBhdF9zeXNfc2V0dGltZW9mZGF5CiAJUFRSCWNvbXBhdF9zeXNfbW91bnQJCS8qIDYxNjAgKi8KIAlQVFIJc3lzX3Vtb3VudAogCVBUUglzeXNfc3dhcG9uCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggODVmZWRhYy4uNmM3ZWY4MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMjgzLDggKzI4Myw4IEBACiAJUFRSCWNvbXBhdF9zeXNfc2V0cmxpbWl0CQkvKiA0MDc1ICovCiAJUFRSCWNvbXBhdF9zeXNfZ2V0cmxpbWl0CiAJUFRSCWNvbXBhdF9zeXNfZ2V0cnVzYWdlCi0JUFRSCXN5czMyX2dldHRpbWVvZmRheQotCVBUUglzeXMzMl9zZXR0aW1lb2ZkYXkKKwlQVFIJY29tcGF0X3N5c19nZXR0aW1lb2ZkYXkKKwlQVFIJY29tcGF0X3N5c19zZXR0aW1lb2ZkYXkKIAlQVFIJc3lzX2dldGdyb3VwcwkJCS8qIDQwODAgKi8KIAlQVFIJc3lzX3NldGdyb3VwcwogCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIG9sZF9zZWxlY3QgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggMzQzMDE1YS4uMzc5NzBkOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDAxIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBhZmIxMTlmLi41ODczOGM4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xMDQsNyArMTA0LDcgQEAKIAkuID0gQUxJR04oX1BBR0VfU0laRSk7CiAJX19ub3NhdmVfZW5kID0gLjsKIAotCS4gPSBBTElHTigzMik7CisJLiA9IEFMSUdOKDEgPDwgQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQpOwogCS5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogewogCQkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9zeXNjdGwuYyBiL2FyY2gvbWlwcy9sYXNhdC9zeXNjdGwuYwppbmRleCA4NjY4ODFlLi44Zjg4ODg2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGFzYXQvc3lzY3RsLmMKKysrIGIvYXJjaC9taXBzL2xhc2F0L3N5c2N0bC5jCkBAIC0zOCwxNCArMzgsMTMgQEAKICNlbmRpZgogCiAvKiBTdHJhdGVneSBmdW5jdGlvbiB0byB3cml0ZSBFRVBST00gYWZ0ZXIgY2hhbmdpbmcgc3RyaW5nIGVudHJ5ICovCi1pbnQgc3lzY3RsX2xhc2F0c3RyaW5nKGN0bF90YWJsZSAqdGFibGUsIGludCAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX2xhc2F0c3RyaW5nKGN0bF90YWJsZSAqdGFibGUsCiAJCXZvaWQgKm9sZHZhbCwgc2l6ZV90ICpvbGRsZW5wLAogCQl2b2lkICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJaW50IHI7CiAKLQlyID0gc3lzY3RsX3N0cmluZyh0YWJsZSwgbmFtZSwKLQkJCSAgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CisJciA9IHN5c2N0bF9zdHJpbmcodGFibGUsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCWlmIChyIDwgMCkKIAkJcmV0dXJuIHI7CiAKQEAgLTExMywxMyArMTEyLDEzIEBACiAjZW5kaWYKIAogLyogU3lzY3RsIGZvciBzZXR0aW5nIHRoZSBJUCBhZGRyZXNzZXMgKi8KLWludCBzeXNjdGxfbGFzYXRfaW50dmVjKGN0bF90YWJsZSAqdGFibGUsIGludCAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX2xhc2F0X2ludHZlYyhjdGxfdGFibGUgKnRhYmxlLAogCQkgICAgdm9pZCAqb2xkdmFsLCBzaXplX3QgKm9sZGxlbnAsCiAJCSAgICB2b2lkICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJaW50IHI7CiAKLQlyID0gc3lzY3RsX2ludHZlYyh0YWJsZSwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CisJciA9IHN5c2N0bF9pbnR2ZWModGFibGUsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCWlmIChyIDwgMCkKIAkJcmV0dXJuIHI7CiAKQEAgLTEzMSw3ICsxMzAsNyBAQAogCiAjaWZkZWYgQ09ORklHX0RTMTYwMwogLyogU2FtZSBmb3IgUlRDICovCi1pbnQgc3lzY3RsX2xhc2F0X3J0YyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9sYXNhdF9ydGMoY3RsX3RhYmxlICp0YWJsZSwKIAkJICAgIHZvaWQgKm9sZHZhbCwgc2l6ZV90ICpvbGRsZW5wLAogCQkgICAgdm9pZCAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMTQwLDcgKzEzOSw3IEBACiAJcnRjdG1wID0gcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKCk7CiAJaWYgKHJ0Y3RtcCA8IDApCiAJCXJ0Y3RtcCA9IDA7Ci0JciA9IHN5c2N0bF9pbnR2ZWModGFibGUsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOworCXIgPSBzeXNjdGxfaW50dmVjKHRhYmxlLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAlpZiAociA8IDApCiAJCXJldHVybiByOwogCWlmIChuZXd2YWwgJiYgbmV3bGVuKQpAQCAtMjExLDEzICsyMTAsMTMgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHN5c2N0bF9sYXNhdF9wcmlkKGN0bF90YWJsZSAqdGFibGUsIGludCAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IHN5c2N0bF9sYXNhdF9wcmlkKGN0bF90YWJsZSAqdGFibGUsCiAJCQkJICAgICB2b2lkICpvbGR2YWwsIHNpemVfdCAqb2xkbGVucCwKIAkJCQkgICAgIHZvaWQgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlpbnQgcjsKIAotCXIgPSBzeXNjdGxfaW50dmVjKHRhYmxlLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKKwlyID0gc3lzY3RsX2ludHZlYyh0YWJsZSwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJaWYgKHIgPCAwKQogCQlyZXR1cm4gcjsKIAlpZiAobmV3dmFsICYmIG5ld2xlbikgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1lbW1hMnJoLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWVtbWEycmguYwppbmRleCBhMjcwNTg5Li44NDZlYWU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWVtbWEycmguYworKysgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWVtbWEycmguYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vZW1tYTJyaC9lbW1hMnJoLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLXBueDg1NTAuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLXBueDg1NTAuYwppbmRleCAwZTE2MGQ5Li4xZTYyMTNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL29wcy1wbng4NTUwLmMKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtcG54ODU1MC5jCkBAIC0yOSw4ICsyOSw2IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC1wbng4NTUwL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXBueDg1NTAvZ2xiLmg+Ci0jaW5jbHVkZSA8YXNtL2RlYnVnLmg+Ci0KIAogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3N0YXR1cyh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2ktZW1tYTJyaC5jIGIvYXJjaC9taXBzL3BjaS9wY2ktZW1tYTJyaC5jCmluZGV4IGQ5OTU5MWEuLjc3MmUyODMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLWVtbWEycmguYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS1lbW1hMnJoLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL2VtbWEycmgvZW1tYTJyaC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS5jIGIvYXJjaC9taXBzL3BjaS9wY2kuYwppbmRleCBjN2ZlNmVjLi5hMzc3ZTlkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLmMKQEAgLTM0LDYgKzM0LDggQEAKIHVuc2lnbmVkIGxvbmcgUENJQklPU19NSU5fSU8JPSAweDAwMDA7CiB1bnNpZ25lZCBsb25nIFBDSUJJT1NfTUlOX01FTQk9IDA7CiAKK3N0YXRpYyBpbnQgcGNpX2luaXRpYWxpemVkOworCiAvKgogICogV2UgbmVlZCB0byBhdm9pZCBjb2xsaXNpb25zIHdpdGggYG1pcnJvcmVkJyBWR0EgcG9ydHMKICAqIGFuZCBvdGhlciBzdHJhbmdlIElTQSBoYXJkd2FyZSwgc28gd2UgYWx3YXlzIHdhbnQgdGhlCkBAIC03NCw2ICs3Niw0MiBAQAogCXJlcy0+c3RhcnQgPSBzdGFydDsKIH0KIAorc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaWJpb3Nfc2NhbmJ1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisJc3RhdGljIGludCBuZXh0X2J1c25vOworCXN0YXRpYyBpbnQgbmVlZF9kb21haW5faW5mbzsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzOworCisJaWYgKCFob3NlLT5pb21tdSkKKwkJUENJX0RNQV9CVVNfSVNfUEhZUyA9IDE7CisKKwlpZiAoaG9zZS0+Z2V0X2J1c25vICYmIHBjaV9wcm9iZV9vbmx5KQorCQluZXh0X2J1c25vID0gKCpob3NlLT5nZXRfYnVzbm8pKCk7CisKKwlidXMgPSBwY2lfc2Nhbl9idXMobmV4dF9idXNubywgaG9zZS0+cGNpX29wcywgaG9zZSk7CisJaG9zZS0+YnVzID0gYnVzOworCisJbmVlZF9kb21haW5faW5mbyA9IG5lZWRfZG9tYWluX2luZm8gfHwgaG9zZS0+aW5kZXg7CisJaG9zZS0+bmVlZF9kb21haW5faW5mbyA9IG5lZWRfZG9tYWluX2luZm87CisJaWYgKGJ1cykgeworCQluZXh0X2J1c25vID0gYnVzLT5zdWJvcmRpbmF0ZSArIDE7CisJCS8qIERvbid0IGFsbG93IDgtYml0IGJ1cyBudW1iZXIgb3ZlcmZsb3cgaW5zaWRlIHRoZSBob3NlIC0KKwkJICAgcmVzZXJ2ZSBzb21lIHNwYWNlIGZvciBicmlkZ2VzLiAqLworCQlpZiAobmV4dF9idXNubyA+IDIyNCkgeworCQkJbmV4dF9idXNubyA9IDA7CisJCQluZWVkX2RvbWFpbl9pbmZvID0gMTsKKwkJfQorCisJCWlmICghcGNpX3Byb2JlX29ubHkpIHsKKwkJCXBjaV9idXNfc2l6ZV9icmlkZ2VzKGJ1cyk7CisJCQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzKTsKKwkJCXBjaV9lbmFibGVfYnJpZGdlcyhidXMpOworCQl9CisJfQorfQorCitzdGF0aWMgREVGSU5FX01VVEVYKHBjaV9zY2FuX211dGV4KTsKKwogdm9pZCBfX2RldmluaXQgcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQogewogCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgaG9zZS0+bWVtX3Jlc291cmNlKSA8IDApCkBAIC05Myw2ICsxMzEsMTcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgInJlZ2lzdGVyaW5nIFBDSSBjb250cm9sbGVyIHdpdGggaW9fbWFwX2Jhc2UgdW5zZXRcbiIpOwogCX0KKworCS8qCisJICogU2NhbiB0aGUgYnVzIGlmIGl0IGlzIHJlZ2lzdGVyIGFmdGVyIHRoZSBQQ0kgc3Vic3lzdGVtCisJICogaW5pdGlhbGl6YXRpb24uCisJICovCisJaWYgKHBjaV9pbml0aWFsaXplZCkgeworCQltdXRleF9sb2NrKCZwY2lfc2Nhbl9tdXRleCk7CisJCXBjaWJpb3Nfc2NhbmJ1cyhob3NlKTsKKwkJbXV0ZXhfdW5sb2NrKCZwY2lfc2Nhbl9tdXRleCk7CisJfQorCiAJcmV0dXJuOwogCiBvdXQ6CkBAIC0xMjUsMzggKzE3NCwxNSBAQAogc3RhdGljIGludCBfX2luaXQgcGNpYmlvc19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCXN0cnVjdCBwY2lfYnVzICpidXM7Ci0JaW50IG5leHRfYnVzbm87Ci0JaW50IG5lZWRfZG9tYWluX2luZm8gPSAwOwogCiAJLyogU2NhbiBhbGwgb2YgdGhlIHJlY29yZGVkIFBDSSBjb250cm9sbGVycy4gICovCi0JZm9yIChuZXh0X2J1c25vID0gMCwgaG9zZSA9IGhvc2VfaGVhZDsgaG9zZTsgaG9zZSA9IGhvc2UtPm5leHQpIHsKKwlmb3IgKGhvc2UgPSBob3NlX2hlYWQ7IGhvc2U7IGhvc2UgPSBob3NlLT5uZXh0KQorCQlwY2liaW9zX3NjYW5idXMoaG9zZSk7CiAKLQkJaWYgKCFob3NlLT5pb21tdSkKLQkJCVBDSV9ETUFfQlVTX0lTX1BIWVMgPSAxOwotCi0JCWlmIChob3NlLT5nZXRfYnVzbm8gJiYgcGNpX3Byb2JlX29ubHkpCi0JCQluZXh0X2J1c25vID0gKCpob3NlLT5nZXRfYnVzbm8pKCk7Ci0KLQkJYnVzID0gcGNpX3NjYW5fYnVzKG5leHRfYnVzbm8sIGhvc2UtPnBjaV9vcHMsIGhvc2UpOwotCQlob3NlLT5idXMgPSBidXM7Ci0JCW5lZWRfZG9tYWluX2luZm8gPSBuZWVkX2RvbWFpbl9pbmZvIHx8IGhvc2UtPmluZGV4OwotCQlob3NlLT5uZWVkX2RvbWFpbl9pbmZvID0gbmVlZF9kb21haW5faW5mbzsKLQkJaWYgKGJ1cykgewotCQkJbmV4dF9idXNubyA9IGJ1cy0+c3Vib3JkaW5hdGUgKyAxOwotCQkJLyogRG9uJ3QgYWxsb3cgOC1iaXQgYnVzIG51bWJlciBvdmVyZmxvdyBpbnNpZGUgdGhlIGhvc2UgLQotCQkJICAgcmVzZXJ2ZSBzb21lIHNwYWNlIGZvciBicmlkZ2VzLiAqLwotCQkJaWYgKG5leHRfYnVzbm8gPiAyMjQpIHsKLQkJCQluZXh0X2J1c25vID0gMDsKLQkJCQluZWVkX2RvbWFpbl9pbmZvID0gMTsKLQkJCX0KLQkJfQotCX0KLQotCWlmICghcGNpX3Byb2JlX29ubHkpCi0JCXBjaV9hc3NpZ25fdW5hc3NpZ25lZF9yZXNvdXJjZXMoKTsKIAlwY2lfZml4dXBfaXJxcyhjb21tb25fc3dpenpsZSwgcGNpYmlvc19tYXBfaXJxKTsKIAorCXBjaV9pbml0aWFsaXplZCA9IDE7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc2V0dXAuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NldHVwLmMKaW5kZXggNjUzN2Q5MC4uMmQzYzBkYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc2V0dXAuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zZXR1cC5jCkBAIC03OSwxNCArNzksMTQgQEAKIAkvKiBTdG9wIHRoZSB1cGRhdGUgdG8gdGhlIHRpbWUgKi8KIAltNDh0MzdfYmFzZS0+Y29udHJvbCA9IDB4NDA7CiAKLQl5ZWFyID0gQkNEMkJJTihtNDh0MzdfYmFzZS0+eWVhcik7Ci0JeWVhciArPSBCQ0QyQklOKG00OHQzN19iYXNlLT5jZW50dXJ5KSAqIDEwMDsKKwl5ZWFyID0gYmNkMmJpbihtNDh0MzdfYmFzZS0+eWVhcik7CisJeWVhciArPSBiY2QyYmluKG00OHQzN19iYXNlLT5jZW50dXJ5KSAqIDEwMDsKIAotCW1vbnRoID0gQkNEMkJJTihtNDh0MzdfYmFzZS0+bW9udGgpOwotCWRheSA9IEJDRDJCSU4obTQ4dDM3X2Jhc2UtPmRhdGUpOwotCWhvdXIgPSBCQ0QyQklOKG00OHQzN19iYXNlLT5ob3VyKTsKLQltaW4gPSBCQ0QyQklOKG00OHQzN19iYXNlLT5taW4pOwotCXNlYyA9IEJDRDJCSU4obTQ4dDM3X2Jhc2UtPnNlYyk7CisJbW9udGggPSBiY2QyYmluKG00OHQzN19iYXNlLT5tb250aCk7CisJZGF5ID0gYmNkMmJpbihtNDh0MzdfYmFzZS0+ZGF0ZSk7CisJaG91ciA9IGJjZDJiaW4obTQ4dDM3X2Jhc2UtPmhvdXIpOworCW1pbiA9IGJjZDJiaW4obTQ4dDM3X2Jhc2UtPm1pbik7CisJc2VjID0gYmNkMmJpbihtNDh0MzdfYmFzZS0+c2VjKTsKIAogCS8qIFN0YXJ0IHRoZSB1cGRhdGUgdG8gdGhlIHRpbWUgYWdhaW4gKi8KIAltNDh0MzdfYmFzZS0+Y29udHJvbCA9IDB4MDA7CkBAIC0xMTMsMjIgKzExMywyMiBAQAogCW00OHQzN19iYXNlLT5jb250cm9sID0gMHg4MDsKIAogCS8qIHllYXIgKi8KLQltNDh0MzdfYmFzZS0+eWVhciA9IEJJTjJCQ0QodG0udG1feWVhciAlIDEwMCk7Ci0JbTQ4dDM3X2Jhc2UtPmNlbnR1cnkgPSBCSU4yQkNEKHRtLnRtX3llYXIgLyAxMDApOworCW00OHQzN19iYXNlLT55ZWFyID0gYmluMmJjZCh0bS50bV95ZWFyICUgMTAwKTsKKwltNDh0MzdfYmFzZS0+Y2VudHVyeSA9IGJpbjJiY2QodG0udG1feWVhciAvIDEwMCk7CiAKIAkvKiBtb250aCAqLwotCW00OHQzN19iYXNlLT5tb250aCA9IEJJTjJCQ0QodG0udG1fbW9uKTsKKwltNDh0MzdfYmFzZS0+bW9udGggPSBiaW4yYmNkKHRtLnRtX21vbik7CiAKIAkvKiBkYXkgKi8KLQltNDh0MzdfYmFzZS0+ZGF0ZSA9IEJJTjJCQ0QodG0udG1fbWRheSk7CisJbTQ4dDM3X2Jhc2UtPmRhdGUgPSBiaW4yYmNkKHRtLnRtX21kYXkpOwogCiAJLyogaG91ci9taW4vc2VjICovCi0JbTQ4dDM3X2Jhc2UtPmhvdXIgPSBCSU4yQkNEKHRtLnRtX2hvdXIpOwotCW00OHQzN19iYXNlLT5taW4gPSBCSU4yQkNEKHRtLnRtX21pbik7Ci0JbTQ4dDM3X2Jhc2UtPnNlYyA9IEJJTjJCQ0QodG0udG1fc2VjKTsKKwltNDh0MzdfYmFzZS0+aG91ciA9IGJpbjJiY2QodG0udG1faG91cik7CisJbTQ4dDM3X2Jhc2UtPm1pbiA9IGJpbjJiY2QodG0udG1fbWluKTsKKwltNDh0MzdfYmFzZS0+c2VjID0gYmluMmJjZCh0bS50bV9zZWMpOwogCiAJLyogZGF5IG9mIHdlZWsgLS0gbm90IHJlYWxseSB1c2VkLCBidXQgbGV0J3Mga2VlcCBpdCB1cC10by1kYXRlICovCi0JbTQ4dDM3X2Jhc2UtPmRheSA9IEJJTjJCQ0QodG0udG1fd2RheSArIDEpOworCW00OHQzN19iYXNlLT5kYXkgPSBiaW4yYmNkKHRtLnRtX3dkYXkgKyAxKTsKIAogCS8qIGRpc2FibGUgd3JpdGluZyAqLwogCW00OHQzN19iYXNlLT5jb250cm9sID0gMHgwMDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9yYjUzMi90aW1lLmMgYi9hcmNoL21pcHMvcmI1MzIvdGltZS5jCmluZGV4IDhlN2E0NjguLjEzNzdkNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9yYjUzMi90aW1lLmMKKysrIGIvYXJjaC9taXBzL3JiNTMyL3RpbWUuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAKICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vZGVidWcuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXJjMzI0MzQvcmMzMjQzNC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItcGxhdGZvcm0uYwppbmRleCA1MjQ4NmM0Li5kZWRkYmYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMKQEAgLTE5MiwzICsxOTIsMTggQEAKIH0KIAogZGV2aWNlX2luaXRjYWxsKHNnaV9idXR0b25fZGV2aW5pdCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHNnaV9kczEyODZfZGV2aW5pdCh2b2lkKQoreworCXN0cnVjdCByZXNvdXJjZSByZXM7CisKKwltZW1zZXQoJnJlcywgMCwgc2l6ZW9mKHJlcykpOworCXJlcy5zdGFydCA9IEhQQzNfQ0hJUDBfQkFTRSArIG9mZnNldG9mKHN0cnVjdCBocGMzX3JlZ3MsIHJ0Y3JlZ3MpOworCXJlcy5lbmQgPSByZXMuc3RhcnQgKyBzaXplb2YoaHBjM2MwLT5ydGNyZWdzKSAtIDE7CisJcmVzLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisKKwlyZXR1cm4gSVNfRVJSKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJ0Yy1kczEyODYiLCAtMSwKKwkJCQkJCSAgICAgICZyZXMsIDEpKTsKK30KKworZGV2aWNlX2luaXRjYWxsKHNnaV9kczEyODZfZGV2aW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItc2V0dXAuYwppbmRleCA4OTZhMWVmLi5iOWE5MzEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXNldHVwLmMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTggUmFsZiBCYWVjaGxlIChyYWxmQGdudS5vcmcpCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9kczEyODYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMKaW5kZXggMTBlNTA1NC4uM2RjYjI3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItdGltZS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYwpAQCAtMTAsNyArMTAsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDAzLCAwNiBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCiAgKi8KICNpbmNsdWRlIDxsaW51eC9iY2QuaD4KLSNpbmNsdWRlIDxsaW51eC9kczEyODYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yOSw2OSArMjgsNiBAQAogI2luY2x1ZGUgPGFzbS9zZ2kvaHBjMy5oPgogI2luY2x1ZGUgPGFzbS9zZ2kvaXAyMi5oPgogCi0vKgotICogTm90ZSB0aGF0IG1rdGltZSB1c2VzIG1vbnRoIGZyb20gMSB0byAxMiB3aGlsZSBydGNfdGltZV90b190bQotICogdXNlcyAwIHRvIDExLgotICovCi11bnNpZ25lZCBsb25nIHJlYWRfcGVyc2lzdGVudF9jbG9jayh2b2lkKQotewotCXVuc2lnbmVkIGludCB5cnMsIG1vbiwgZGF5LCBocnMsIG1pbiwgc2VjOwotCXVuc2lnbmVkIGludCBzYXZlX2NvbnRyb2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwotCXNhdmVfY29udHJvbCA9IGhwYzNjMC0+cnRjcmVnc1tSVENfQ01EXSAmIDB4ZmY7Ci0JaHBjM2MwLT5ydGNyZWdzW1JUQ19DTURdID0gc2F2ZV9jb250cm9sIHwgUlRDX1RFOwotCi0Jc2VjID0gQkNEMkJJTihocGMzYzAtPnJ0Y3JlZ3NbUlRDX1NFQ09ORFNdICYgMHhmZik7Ci0JbWluID0gQkNEMkJJTihocGMzYzAtPnJ0Y3JlZ3NbUlRDX01JTlVURVNdICYgMHhmZik7Ci0JaHJzID0gQkNEMkJJTihocGMzYzAtPnJ0Y3JlZ3NbUlRDX0hPVVJTXSAmIDB4M2YpOwotCWRheSA9IEJDRDJCSU4oaHBjM2MwLT5ydGNyZWdzW1JUQ19EQVRFXSAmIDB4ZmYpOwotCW1vbiA9IEJDRDJCSU4oaHBjM2MwLT5ydGNyZWdzW1JUQ19NT05USF0gJiAweDFmKTsKLQl5cnMgPSBCQ0QyQklOKGhwYzNjMC0+cnRjcmVnc1tSVENfWUVBUl0gJiAweGZmKTsKLQotCWhwYzNjMC0+cnRjcmVnc1tSVENfQ01EXSA9IHNhdmVfY29udHJvbDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHlycyA8IDQ1KQotCQl5cnMgKz0gMzA7Ci0JaWYgKCh5cnMgKz0gNDApIDwgNzApCi0JCXlycyArPSAxMDA7Ci0KLQlyZXR1cm4gbWt0aW1lKHlycyArIDE5MDAsIG1vbiwgZGF5LCBocnMsIG1pbiwgc2VjKTsKLX0KLQotaW50IHJ0Y19taXBzX3NldF90aW1lKHVuc2lnbmVkIGxvbmcgdGltKQotewotCXN0cnVjdCBydGNfdGltZSB0bTsKLQl1bnNpZ25lZCBpbnQgc2F2ZV9jb250cm9sOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlydGNfdGltZV90b190bSh0aW0sICZ0bSk7Ci0KLQl0bS50bV9tb24gKz0gMTsJCS8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLwotCXRtLnRtX3llYXIgLT0gNDA7Ci0JaWYgKHRtLnRtX3llYXIgPj0gMTAwKQotCQl0bS50bV95ZWFyIC09IDEwMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwotCXNhdmVfY29udHJvbCA9IGhwYzNjMC0+cnRjcmVnc1tSVENfQ01EXSAmIDB4ZmY7Ci0JaHBjM2MwLT5ydGNyZWdzW1JUQ19DTURdID0gc2F2ZV9jb250cm9sIHwgUlRDX1RFOwotCi0JaHBjM2MwLT5ydGNyZWdzW1JUQ19ZRUFSXSA9IEJJTjJCQ0QodG0udG1feWVhcik7Ci0JaHBjM2MwLT5ydGNyZWdzW1JUQ19NT05USF0gPSBCSU4yQkNEKHRtLnRtX21vbik7Ci0JaHBjM2MwLT5ydGNyZWdzW1JUQ19EQVRFXSA9IEJJTjJCQ0QodG0udG1fbWRheSk7Ci0JaHBjM2MwLT5ydGNyZWdzW1JUQ19IT1VSU10gPSBCSU4yQkNEKHRtLnRtX2hvdXIpOwotCWhwYzNjMC0+cnRjcmVnc1tSVENfTUlOVVRFU10gPSBCSU4yQkNEKHRtLnRtX21pbik7Ci0JaHBjM2MwLT5ydGNyZWdzW1JUQ19TRUNPTkRTXSA9IEJJTjJCQ0QodG0udG1fc2VjKTsKLQlocGMzYzAtPnJ0Y3JlZ3NbUlRDX0hVTkRSRURUSF9TRUNPTkRdID0gMDsKLQotCWhwYzNjMC0+cnRjcmVnc1tSVENfQ01EXSA9IHNhdmVfY29udHJvbDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRvc2FtcGxlKHZvaWQpCiB7CiAJdTMyIGN0MCwgY3QxOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKaW5kZXggOGI0ZTg1NC4uMTMyN2MyNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCkBAIC0xMywxMiArMTMsMTIgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zZ2lhbGliLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2lvYzMuaD4KLSNpbmNsdWRlIDxhc20vbTQ4dDM1Lmg+CiAjaW5jbHVkZSA8YXNtL3NuL2tsY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2FyY2guaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KQEAgLTI4LDUxICsyOCw2IEBACiAKICNkZWZpbmUgVElDS19TSVpFICh0aWNrX25zZWMgLyAxMDAwKQogCi0jaWYgMAotc3RhdGljIGludCBzZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKQotewotCWludCByZXR2YWwgPSAwOwotCWludCByZWFsX3NlY29uZHMsIHJlYWxfbWludXRlcywgY21vc19taW51dGVzOwotCXN0cnVjdCBtNDh0MzVfcnRjICpydGM7Ci0JbmFzaWRfdCBuaWQ7Ci0KLQluaWQgPSBnZXRfbmFzaWQoKTsKLQlydGMgPSAoc3RydWN0IG00OHQzNV9ydGMgKikoS0xfQ09ORklHX0NIX0NPTlNfSU5GTyhuaWQpLT5tZW1vcnlfYmFzZSArCi0JCQkJCQkJSU9DM19CWVRFQlVTX0RFVjApOwotCi0JcnRjLT5jb250cm9sIHw9IE00OFQzNV9SVENfUkVBRDsKLQljbW9zX21pbnV0ZXMgPSBCQ0QyQklOKHJ0Yy0+bWluKTsKLQlydGMtPmNvbnRyb2wgJj0gfk00OFQzNV9SVENfUkVBRDsKLQotCS8qCi0JICogU2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywgZG9uJ3QgaW50ZXJmZXJlIHdpdGgKLQkgKiBob3VyIG92ZXJmbG93LiBUaGlzIGF2b2lkcyBtZXNzaW5nIHdpdGggdW5rbm93biB0aW1lIHpvbmVzIGJ1dAotCSAqIHJlcXVpcmVzIHlvdXIgUlRDIG5vdCB0byBiZSBvZmYgYnkgbW9yZSB0aGFuIDE1IG1pbnV0ZXMKLQkgKi8KLQlyZWFsX3NlY29uZHMgPSBub3d0aW1lICUgNjA7Ci0JcmVhbF9taW51dGVzID0gbm93dGltZSAvIDYwOwotCWlmICgoKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpICsgMTUpLzMwKSAmIDEpCi0JCXJlYWxfbWludXRlcyArPSAzMDsJLyogY29ycmVjdCBmb3IgaGFsZiBob3VyIHRpbWUgem9uZSAqLwotCXJlYWxfbWludXRlcyAlPSA2MDsKLQotCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7Ci0JCXJlYWxfc2Vjb25kcyA9IEJJTjJCQ0QocmVhbF9zZWNvbmRzKTsKLQkJcmVhbF9taW51dGVzID0gQklOMkJDRChyZWFsX21pbnV0ZXMpOwotCQlydGMtPmNvbnRyb2wgfD0gTTQ4VDM1X1JUQ19TRVQ7Ci0JCXJ0Yy0+c2VjID0gcmVhbF9zZWNvbmRzOwotCQlydGMtPm1pbiA9IHJlYWxfbWludXRlczsKLQkJcnRjLT5jb250cm9sICY9IH5NNDhUMzVfUlRDX1NFVDsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAic2V0X3J0Y19tbXNzOiBjYW4ndCB1cGRhdGUgZnJvbSAlZCB0byAlZFxuIiwKLQkJICAgICAgIGNtb3NfbWludXRlcywgcmVhbF9taW51dGVzKTsKLQkJcmV0dmFsID0gLTE7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLSNlbmRpZgotCiAvKiBJbmNsdWRlcyBmb3IgaW9jM19pbml0KCkuICAqLwogI2luY2x1ZGUgPGFzbS9zbi90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbjAvYWRkcnMuaD4KQEAgLTgwLDM3ICszNSw2IEBACiAjaW5jbHVkZSA8YXNtL3NuL3NuMC9odWJpby5oPgogI2luY2x1ZGUgPGFzbS9wY2kvYnJpZGdlLmg+CiAKLXVuc2lnbmVkIGxvbmcgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHZvaWQpCi17Ci0gICAgICAgIHVuc2lnbmVkIGludCB5ZWFyLCBtb250aCwgZGF0ZSwgaG91ciwgbWluLCBzZWM7Ci0Jc3RydWN0IG00OHQzNV9ydGMgKnJ0YzsKLQluYXNpZF90IG5pZDsKLQotCW5pZCA9IGdldF9uYXNpZCgpOwotCXJ0YyA9IChzdHJ1Y3QgbTQ4dDM1X3J0YyAqKShLTF9DT05GSUdfQ0hfQ09OU19JTkZPKG5pZCktPm1lbW9yeV9iYXNlICsKLQkJCQkJCQlJT0MzX0JZVEVCVVNfREVWMCk7Ci0KLQlydGMtPmNvbnRyb2wgfD0gTTQ4VDM1X1JUQ19SRUFEOwotCXNlYyA9IHJ0Yy0+c2VjOwotCW1pbiA9IHJ0Yy0+bWluOwotCWhvdXIgPSBydGMtPmhvdXI7Ci0JZGF0ZSA9IHJ0Yy0+ZGF0ZTsKLQltb250aCA9IHJ0Yy0+bW9udGg7Ci0JeWVhciA9IHJ0Yy0+eWVhcjsKLQlydGMtPmNvbnRyb2wgJj0gfk00OFQzNV9SVENfUkVBRDsKLQotICAgICAgICBzZWMgPSBCQ0QyQklOKHNlYyk7Ci0gICAgICAgIG1pbiA9IEJDRDJCSU4obWluKTsKLSAgICAgICAgaG91ciA9IEJDRDJCSU4oaG91cik7Ci0gICAgICAgIGRhdGUgPSBCQ0QyQklOKGRhdGUpOwotICAgICAgICBtb250aCA9IEJDRDJCSU4obW9udGgpOwotICAgICAgICB5ZWFyID0gQkNEMkJJTih5ZWFyKTsKLQotICAgICAgICB5ZWFyICs9IDE5NzA7Ci0KLSAgICAgICAgcmV0dXJuIG1rdGltZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91ciwgbWluLCBzZWMpOwotfQotCiBzdGF0aWMgdm9pZCBlbmFibGVfcnRfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiB9CkBAIC0yODYsNiArMjEwLDcgQEAKIAogdm9pZCBfX2NwdWluaXQgaHViX3J0Y19pbml0KGNub2RlaWRfdCBjbm9kZSkKIHsKKwogCS8qCiAJICogV2Ugb25seSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGN1cnJlbnQgbm9kZS4KIAkgKiBJZiB0aGlzIGlzIG5vdCB0aGUgY3VycmVudCBub2RlIHRoZW4gaXQgaXMgYSBjcHVsZXNzCkBAIC0zMDEsMyArMjI2LDIzIEBACiAJCUxPQ0FMX0hVQl9TKFBJX1JUX1BFTkRfQiwgMCk7CiAJfQogfQorCitzdGF0aWMgaW50IF9faW5pdCBzZ2lfaXAyN19ydGNfZGV2aW5pdCh2b2lkKQoreworCXN0cnVjdCByZXNvdXJjZSByZXM7CisKKwltZW1zZXQoJnJlcywgMCwgc2l6ZW9mKHJlcykpOworCXJlcy5zdGFydCA9IFhQSFlTQUREUihLTF9DT05GSUdfQ0hfQ09OU19JTkZPKG1hc3Rlcl9uYXNpZCktPm1lbW9yeV9iYXNlICsKKwkJCSAgICAgIElPQzNfQllURUJVU19ERVYwKTsKKwlyZXMuZW5kID0gcmVzLnN0YXJ0ICsgMzI3Njc7CisJcmVzLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisKKwlyZXR1cm4gSVNfRVJSKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJ0Yy1tNDh0MzUiLCAtMSwKKwkJCQkJCSAgICAgICZyZXMsIDEpKTsKK30KKworLyoKKyAqIGtsdWRnZSBtYWtlIHRoaXMgYSBkZXZpY2VfaW5pdGNhbGwgYWZ0ZXIgaW9jMyByZXNvdXJjZSBjb25mbGljdHMKKyAqIGFyZSByZXNvbHZlZAorICovCitsYXRlX2luaXRjYWxsKHNnaV9pcDI3X3J0Y19kZXZpbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXBsYXRmb3JtLmMgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1wbGF0Zm9ybS5jCmluZGV4IDNkNjM3MjEuLjUxMWU5ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXBsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItcGxhdGZvcm0uYwpAQCAtOTAsNiArOTAsMjIgQEAKIAogZGV2aWNlX2luaXRjYWxsKHNnaW8yYnRuc19kZXZpbml0KTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzZ2lvMl9jbW9zX3JzcmNbXSA9IHsKKwl7CisJCS5zdGFydCA9IDB4NzAsCisJCS5lbmQgICA9IDB4NzEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8KKwl9Cit9OworCitzdGF0aWMgX19pbml0IGludCBzZ2lvMl9jbW9zX2RldmluaXQodm9pZCkKK3sKKwlyZXR1cm4gSVNfRVJSKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJ0Y19jbW9zIiwgLTEsCisJCQkJCQkgICAgICBzZ2lvMl9jbW9zX3JzcmMsIDEpKTsKK30KKworZGV2aWNlX2luaXRjYWxsKHNnaW8yX2Ntb3NfZGV2aW5pdCk7CisKIE1PRFVMRV9BVVRIT1IoIlJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiODI1MCBVQVJUIHByb2JlIGRyaXZlciBmb3IgU0dJIElQMzIgYWthIE8yIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1zZXR1cC5jIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYwppbmRleCAxMDI0YmY0Li5jNWE1ZDRhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXNldHVwLmMKQEAgLTYyLDExICs2Miw2IEBACiB9CiAjZW5kaWYKIAotdW5zaWduZWQgbG9uZyByZWFkX3BlcnNpc3RlbnRfY2xvY2sodm9pZCkKLXsKLQlyZXR1cm4gbWMxNDY4MThfZ2V0X2Ntb3NfdGltZSgpOwotfQotCiAvKiBBbiBhcmJpdHJhcnkgdGltZTsgdGhpcyBjYW4gYmUgZGVjcmVhc2VkIGlmIHJlbGlhYmlsaXR5IGxvb2tzIGdvb2QgKi8KICNkZWZpbmUgV0FJVF9NUyAxMAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9zYl90YnByb2YuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCmluZGV4IDY2ZTNlM2YuLjYzN2ExOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCkBAIC01NzYsOCArNTc2LDcgQEAKIAogCXRiX2NsYXNzID0gdGJjOwogCi0JZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHRiYywgTlVMTCwgTUtERVYoU0JQUk9GX1RCX01BSk9SLCAwKSwKLQkJCQkgICAgTlVMTCwgInRiIik7CisJZGV2ID0gZGV2aWNlX2NyZWF0ZSh0YmMsIE5VTEwsIE1LREVWKFNCUFJPRl9UQl9NQUpPUiwgMCksIE5VTEwsICJ0YiIpOwogCWlmIChJU19FUlIoZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRldik7CiAJCWdvdG8gb3V0X2NsYXNzOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfbTQxdDgxLmMgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y19tNDF0ODEuYwppbmRleCAyNmZiZmY0Li5iNzMyNjAwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y19tNDF0ODEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y19tNDF0ODEuYwpAQCAtMTU2LDMyICsxNTYsMzIgQEAKIAkgKi8KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwotCXRtLnRtX3NlYyA9IEJJTjJCQ0QodG0udG1fc2VjKTsKKwl0bS50bV9zZWMgPSBiaW4yYmNkKHRtLnRtX3NlYyk7CiAJbTQxdDgxX3dyaXRlKE00MVQ4MVJFR19TQywgdG0udG1fc2VjKTsKIAotCXRtLnRtX21pbiA9IEJJTjJCQ0QodG0udG1fbWluKTsKKwl0bS50bV9taW4gPSBiaW4yYmNkKHRtLnRtX21pbik7CiAJbTQxdDgxX3dyaXRlKE00MVQ4MVJFR19NTiwgdG0udG1fbWluKTsKIAotCXRtLnRtX2hvdXIgPSBCSU4yQkNEKHRtLnRtX2hvdXIpOworCXRtLnRtX2hvdXIgPSBiaW4yYmNkKHRtLnRtX2hvdXIpOwogCXRtLnRtX2hvdXIgPSAodG0udG1faG91ciAmIDB4M2YpIHwgKG00MXQ4MV9yZWFkKE00MVQ4MVJFR19IUikgJiAweGMwKTsKIAltNDF0ODFfd3JpdGUoTTQxVDgxUkVHX0hSLCB0bS50bV9ob3VyKTsKIAogCS8qIHRtX3dkYXkgc3RhcnRzIGZyb20gMCB0byA2ICovCiAJaWYgKHRtLnRtX3dkYXkgPT0gMCkgdG0udG1fd2RheSA9IDc7Ci0JdG0udG1fd2RheSA9IEJJTjJCQ0QodG0udG1fd2RheSk7CisJdG0udG1fd2RheSA9IGJpbjJiY2QodG0udG1fd2RheSk7CiAJbTQxdDgxX3dyaXRlKE00MVQ4MVJFR19EWSwgdG0udG1fd2RheSk7CiAKLQl0bS50bV9tZGF5ID0gQklOMkJDRCh0bS50bV9tZGF5KTsKKwl0bS50bV9tZGF5ID0gYmluMmJjZCh0bS50bV9tZGF5KTsKIAltNDF0ODFfd3JpdGUoTTQxVDgxUkVHX0RULCB0bS50bV9tZGF5KTsKIAogCS8qIHRtX21vbiBzdGFydHMgZnJvbSAwLCAqaWNrKiAqLwogCXRtLnRtX21vbiArKzsKLQl0bS50bV9tb24gPSBCSU4yQkNEKHRtLnRtX21vbik7CisJdG0udG1fbW9uID0gYmluMmJjZCh0bS50bV9tb24pOwogCW00MXQ4MV93cml0ZShNNDFUODFSRUdfTU8sIHRtLnRtX21vbik7CiAKIAkvKiB3ZSBkb24ndCBkbyBjZW50dXJ5LCBldmVyeXRoaW5nIGlzIGJleW9uZCAyMDAwICovCiAJdG0udG1feWVhciAlPSAxMDA7Ci0JdG0udG1feWVhciA9IEJJTjJCQ0QodG0udG1feWVhcik7CisJdG0udG1feWVhciA9IGJpbjJiY2QodG0udG1feWVhcik7CiAJbTQxdDgxX3dyaXRlKE00MVQ4MVJFR19ZUiwgdG0udG1feWVhcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIApAQCAtMjA5LDEyICsyMDksMTIgQEAKIAl5ZWFyID0gbTQxdDgxX3JlYWQoTTQxVDgxUkVHX1lSKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCi0Jc2VjID0gQkNEMkJJTihzZWMpOwotCW1pbiA9IEJDRDJCSU4obWluKTsKLQlob3VyID0gQkNEMkJJTihob3VyKTsKLQlkYXkgPSBCQ0QyQklOKGRheSk7Ci0JbW9uID0gQkNEMkJJTihtb24pOwotCXllYXIgPSBCQ0QyQklOKHllYXIpOworCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwltaW4gPSBiY2QyYmluKG1pbik7CisJaG91ciA9IGJjZDJiaW4oaG91cik7CisJZGF5ID0gYmNkMmJpbihkYXkpOworCW1vbiA9IGJjZDJiaW4obW9uKTsKKwl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKIAogCXllYXIgKz0gMjAwMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfeGljb3IxMjQxLmMgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y194aWNvcjEyNDEuYwppbmRleCBmZjNlNWRhLi40NDM4YjIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y194aWNvcjEyNDEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y194aWNvcjEyNDEuYwpAQCAtMTI0LDE4ICsxMjQsMTggQEAKIAl4aWNvcl93cml0ZShYMTI0MVJFR19TUiwgWDEyNDFSRUdfU1JfV0VMIHwgWDEyNDFSRUdfU1JfUldFTCk7CiAKIAkvKiB0cml2aWFsIG9uZXMgKi8KLQl0bS50bV9zZWMgPSBCSU4yQkNEKHRtLnRtX3NlYyk7CisJdG0udG1fc2VjID0gYmluMmJjZCh0bS50bV9zZWMpOwogCXhpY29yX3dyaXRlKFgxMjQxUkVHX1NDLCB0bS50bV9zZWMpOwogCi0JdG0udG1fbWluID0gQklOMkJDRCh0bS50bV9taW4pOworCXRtLnRtX21pbiA9IGJpbjJiY2QodG0udG1fbWluKTsKIAl4aWNvcl93cml0ZShYMTI0MVJFR19NTiwgdG0udG1fbWluKTsKIAotCXRtLnRtX21kYXkgPSBCSU4yQkNEKHRtLnRtX21kYXkpOworCXRtLnRtX21kYXkgPSBiaW4yYmNkKHRtLnRtX21kYXkpOwogCXhpY29yX3dyaXRlKFgxMjQxUkVHX0RULCB0bS50bV9tZGF5KTsKIAogCS8qIHRtX21vbiBzdGFydHMgZnJvbSAwLCAqaWNrKiAqLwogCXRtLnRtX21vbiArKzsKLQl0bS50bV9tb24gPSBCSU4yQkNEKHRtLnRtX21vbik7CisJdG0udG1fbW9uID0gYmluMmJjZCh0bS50bV9tb24pOwogCXhpY29yX3dyaXRlKFgxMjQxUkVHX01PLCB0bS50bV9tb24pOwogCiAJLyogeWVhciBpcyBzcGxpdCAqLwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJdG1wID0geGljb3JfcmVhZChYMTI0MVJFR19IUik7CiAJaWYgKHRtcCAmIFgxMjQxUkVHX0hSX01JTCkgewogCQkvKiAyNCBob3VyIGZvcm1hdCAqLwotCQl0bS50bV9ob3VyID0gQklOMkJDRCh0bS50bV9ob3VyKTsKKwkJdG0udG1faG91ciA9IGJpbjJiY2QodG0udG1faG91cik7CiAJCXRtcCA9ICh0bXAgJiB+MHgzZikgfCAodG0udG1faG91ciAmIDB4M2YpOwogCX0gZWxzZSB7CiAJCS8qIDEyIGhvdXIgZm9ybWF0LCB3aXRoIDB4MiBmb3IgcG0gKi8KQEAgLTE1Nyw3ICsxNTcsNyBAQAogCQkJdG1wIHw9IDB4MjA7CiAJCQl0bS50bV9ob3VyIC09IDEyOwogCQl9Ci0JCXRtLnRtX2hvdXIgPSBCSU4yQkNEKHRtLnRtX2hvdXIpOworCQl0bS50bV9ob3VyID0gYmluMmJjZCh0bS50bV9ob3VyKTsKIAkJdG1wIHw9IHRtLnRtX2hvdXI7CiAJfQogCXhpY29yX3dyaXRlKFgxMjQxUkVHX0hSLCB0bXApOwpAQCAtMTkxLDEzICsxOTEsMTMgQEAKIAl5MmsgPSB4aWNvcl9yZWFkKFgxMjQxUkVHX1kySyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIAotCXNlYyA9IEJDRDJCSU4oc2VjKTsKLQltaW4gPSBCQ0QyQklOKG1pbik7Ci0JaG91ciA9IEJDRDJCSU4oaG91cik7Ci0JZGF5ID0gQkNEMkJJTihkYXkpOwotCW1vbiA9IEJDRDJCSU4obW9uKTsKLQl5ZWFyID0gQkNEMkJJTih5ZWFyKTsKLQl5MmsgPSBCQ0QyQklOKHkyayk7CisJc2VjID0gYmNkMmJpbihzZWMpOworCW1pbiA9IGJjZDJiaW4obWluKTsKKwlob3VyID0gYmNkMmJpbihob3VyKTsKKwlkYXkgPSBiY2QyYmluKGRheSk7CisJbW9uID0gYmNkMmJpbihtb24pOworCXllYXIgPSBiY2QyYmluKHllYXIpOworCXkyayA9IGJjZDJiaW4oeTJrKTsKIAogCXllYXIgKz0gKHkyayAqIDEwMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9LY29uZmlnIGIvYXJjaC9tbjEwMzAwL0tjb25maWcKaW5kZXggZTg1NjIxOC4uOWE5ZjQzMyAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL0tjb25maWcKKysrIGIvYXJjaC9tbjEwMzAwL0tjb25maWcKQEAgLTUzLDkgKzUzLDYgQEAKIGNvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBBUkNIX1NVUFBPUlRTX0FPVVQKLQlkZWZfYm9vbCBuCi0KICMgVXNlIHRoZSBnZW5lcmljIGludGVycnVwdCBoYW5kbGluZyBjb2RlIGluIGtlcm5lbC9pcnEvCiBjb25maWcgR0VORVJJQ19IQVJESVJRUwogCWRlZl9ib29sIHkKQEAgLTcxLDYgKzY4LDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogCiBtZW51ICJNYXRzdXNoaXRhIE1OMTAzMDAgc3lzdGVtIHNldHVwIgogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL3J0Yy5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9ydGMuYwppbmRleCAwNDJmNzkyLi43OTc4NDcwIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3J0Yy5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvcnRjLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJDRF9UT19CSU4oY21vc19taW51dGVzKTsKKwkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtODQsOCArODQsOCBAQAogCiAJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKIAkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKLQkJCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKKwkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcywgUlRDX1NFQ09ORFMpOwogCQlDTU9TX1dSSVRFKHJlYWxfbWludXRlcywgUlRDX01JTlVURVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL0tjb25maWcKaW5kZXggYTdkNGZkMzUuLjJiZDFmNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtNzYsOSArNzYsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEFSQ0hfU1VQUE9SVFNfQU9VVAotCWRlZl9ib29sIHkKLQogIyB1bmxlc3MgeW91IHdhbnQgdG8gaW1wbGVtZW50IEFDUEkgb24gUEEtUklTQyAuLi4gOy0pCiBjb25maWcgUE0KIAlib29sCkBAIC05Myw2ICs5MCw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvYmluZm10X2VsZjMyLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvYmluZm10X2VsZjMyLmMKaW5kZXggZWNiMTBhNC4uZjYxNjkyZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2JpbmZtdF9lbGYzMi5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9iaW5mbXRfZWxmMzIuYwpAQCAtODUsNyArODUsNyBAQAogICogY291bGQgc2V0IGEgcHJvY2Vzc29yIGRlcGVuZGVudCBmbGFnIGluIHRoZSB0aHJlYWRfc3RydWN0LgogICovCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgXAorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIFwKIAlzZXRfdGhyZWFkX2ZsYWcoVElGXzMyQklUKTsgXAogCWN1cnJlbnQtPnRocmVhZC5tYXBfYmFzZSA9IERFRkFVTFRfTUFQX0JBU0UzMjsgXAogCWN1cnJlbnQtPnRocmVhZC50YXNrX3NpemUgPSBERUZBVUxUX1RBU0tfU0laRTMyIFwKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjMzIuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjMzIuYwppbmRleCA3MWVmZDZhLi4wODM4MTU1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYzMyLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MzMi5jCkBAIC0xNzksMTExICsxNzksNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQKLXB1dF9jb21wYXRfdGltZXZhbChzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp1LCBzdHJ1Y3QgdGltZXZhbCAqdCkKLXsKLQlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgdDMyOwotCXQzMi50dl9zZWMgPSB0LT50dl9zZWM7Ci0JdDMyLnR2X3VzZWMgPSB0LT50dl91c2VjOwotCXJldHVybiBjb3B5X3RvX3VzZXIodSwgJnQzMiwgc2l6ZW9mIHQzMik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBnZXRfdHMzMihzdHJ1Y3QgdGltZXNwZWMgKm8sIHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKmkpCi17Ci0JbG9uZyB1c2VjOwotCi0JaWYgKF9fZ2V0X3VzZXIoby0+dHZfc2VjLCAmaS0+dHZfc2VjKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKF9fZ2V0X3VzZXIodXNlYywgJmktPnR2X3VzZWMpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlvLT50dl9uc2VjID0gdXNlYyAqIDEwMDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgaW50Ci1zeXMzMl9nZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsIHN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQotewotICAgIGV4dGVybiB2b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpOwotCi0gICAgaWYgKHR2KSB7Ci0JICAgIHN0cnVjdCB0aW1ldmFsIGt0djsKLQkgICAgZG9fZ2V0dGltZW9mZGF5KCZrdHYpOwotCSAgICBpZiAocHV0X2NvbXBhdF90aW1ldmFsKHR2LCAma3R2KSkKLQkJICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLSAgICBpZiAodHopIHsKLQkgICAgZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBzeXNfdHo7Ci0JICAgIGlmIChjb3B5X3RvX3VzZXIodHosICZzeXNfdHosIHNpemVvZihzeXNfdHopKSkKLQkJICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSAKLWludCBzeXMzMl9zZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsIHN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQotewotCXN0cnVjdCB0aW1lc3BlYyBrdHM7Ci0Jc3RydWN0IHRpbWV6b25lIGt0ejsKLQotIAlpZiAodHYpIHsKLQkJaWYgKGdldF90czMyKCZrdHMsIHR2KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAodHopIHsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZrdHosIHR6LCBzaXplb2Yoa3R6KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXR1cm4gZG9fc3lzX3NldHRpbWVvZmRheSh0diA/ICZrdHMgOiBOVUxMLCB0eiA/ICZrdHogOiBOVUxMKTsKLX0KLQotaW50IGNwX2NvbXBhdF9zdGF0KHN0cnVjdCBrc3RhdCAqc3RhdCwgc3RydWN0IGNvbXBhdF9zdGF0IF9fdXNlciAqc3RhdGJ1ZikKLXsKLQljb21wYXRfaW5vX3QgaW5vOwotCWludCBlcnI7Ci0KLQlpZiAoc3RhdC0+c2l6ZSA+IE1BWF9OT05fTEZTIHx8ICFuZXdfdmFsaWRfZGV2KHN0YXQtPmRldikgfHwKLQkgICAgIW5ld192YWxpZF9kZXYoc3RhdC0+cmRldikpCi0JCXJldHVybiAtRU9WRVJGTE9XOwotCi0JaW5vID0gc3RhdC0+aW5vOwotCWlmIChzaXplb2YoaW5vKSA8IHNpemVvZihzdGF0LT5pbm8pICYmIGlubyAhPSBzdGF0LT5pbm8pCi0JCXJldHVybiAtRU9WRVJGTE9XOwotCi0JZXJyICA9IHB1dF91c2VyKG5ld19lbmNvZGVfZGV2KHN0YXQtPmRldiksICZzdGF0YnVmLT5zdF9kZXYpOwotCWVyciB8PSBwdXRfdXNlcihpbm8sICZzdGF0YnVmLT5zdF9pbm8pOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5tb2RlLCAmc3RhdGJ1Zi0+c3RfbW9kZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm5saW5rLCAmc3RhdGJ1Zi0+c3RfbmxpbmspOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+c3RfcmVzZXJ2ZWQxKTsKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPnN0X3Jlc2VydmVkMik7Ci0JZXJyIHw9IHB1dF91c2VyKG5ld19lbmNvZGVfZGV2KHN0YXQtPnJkZXYpLCAmc3RhdGJ1Zi0+c3RfcmRldik7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPnNpemUsICZzdGF0YnVmLT5zdF9zaXplKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+YXRpbWUudHZfc2VjLCAmc3RhdGJ1Zi0+c3RfYXRpbWUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5hdGltZS50dl9uc2VjLCAmc3RhdGJ1Zi0+c3RfYXRpbWVfbnNlYyk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm10aW1lLnR2X3NlYywgJnN0YXRidWYtPnN0X210aW1lKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfbnNlYywgJnN0YXRidWYtPnN0X210aW1lX25zZWMpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5jdGltZS50dl9zZWMsICZzdGF0YnVmLT5zdF9jdGltZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmN0aW1lLnR2X25zZWMsICZzdGF0YnVmLT5zdF9jdGltZV9uc2VjKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+Ymxrc2l6ZSwgJnN0YXRidWYtPnN0X2Jsa3NpemUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5ibG9ja3MsICZzdGF0YnVmLT5zdF9ibG9ja3MpOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+X191bnVzZWQxKTsKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPl9fdW51c2VkMik7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5fX3VudXNlZDMpOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+X191bnVzZWQ0KTsKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPl9fdW51c2VkNSk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5zdF9mc3R5cGUpOyAvKiBub3QgYXZhaWwgKi8KLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPnN0X3JlYWxkZXYpOyAvKiBub3QgYXZhaWwgKi8KLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPnN0X2Jhc2Vtb2RlKTsgLyogbm90IGF2YWlsICovCi0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5zdF9zcGFyZXNob3J0KTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+dWlkLCAmc3RhdGJ1Zi0+c3RfdWlkKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+Z2lkLCAmc3RhdGJ1Zi0+c3RfZ2lkKTsKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPnN0X3NwYXJlNFswXSk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5zdF9zcGFyZTRbMV0pOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+c3Rfc3BhcmU0WzJdKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIC8qKiogY29waWVkIGZyb20gbWlwczY0ICoqKi8KIC8qCiAgKiBPb28sIG5hc3R5LiAgV2UgbmVlZCBoZXJlIHRvIGZyb2IgMzItYml0IHVuc2lnbmVkIGxvbmdzIHRvCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCA2YjVhYzM4Li5jN2U1OWY1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTE0OSw4ICsxNDksOCBAQAogCUVOVFJZX0NPTVAoZ2V0cmxpbWl0KQogCUVOVFJZX0NPTVAoZ2V0cnVzYWdlKQogCS8qIHN0cnVjdCB0aW1ldmFsIGFuZCB0aW1lem9uZSBhcmUgbWF5YmU/PyBjb25zaXN0ZW50IHdpZGUgYW5kIG5hcnJvdyAqLwotCUVOVFJZX0RJRkYoZ2V0dGltZW9mZGF5KQotCUVOVFJZX0RJRkYoc2V0dGltZW9mZGF5KQorCUVOVFJZX0NPTVAoZ2V0dGltZW9mZGF5KQorCUVOVFJZX0NPTVAoc2V0dGltZW9mZGF5KQogCUVOVFJZX1NBTUUoZ2V0Z3JvdXBzKQkJLyogODAgKi8KIAlFTlRSWV9TQU1FKHNldGdyb3VwcykKIAkvKiBzdHJ1Y3Qgc29ja2V0YWRkci4uLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCA1ODdkYTVlLi45MzkxMTk5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMjIsNiArMjIsOSBAQAogY29uZmlnIFBQQ19NRVJHRQogCWRlZl9ib29sIHkKIAorY29uZmlnIEFSQ0hfUEhZU19BRERSX1RfNjRCSVQKKyAgICAgICBkZWZfYm9vbCBQUEM2NCB8fCBQSFlTXzY0QklUCisKIGNvbmZpZyBNTVUKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0yMjcsNiArMjMwLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogc291cmNlICJhcmNoL3Bvd2VycGMvc3lzZGV2L0tjb25maWciCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZyIKIApAQCAtNDE1LDggKzQyMCwxMSBAQAogCiBjb25maWcgRk9SQ0VfTUFYX1pPTkVPUkRFUgogCWludCAiTWF4aW11bSB6b25lIG9yZGVyIgorCXJhbmdlIDkgNjQgaWYgUFBDXzY0S19QQUdFUwogCWRlZmF1bHQgIjkiIGlmIFBQQ182NEtfUEFHRVMKKwlyYW5nZSAxMyA2NCBpZiBQUEM2NCAmJiAhUFBDXzY0S19QQUdFUwogCWRlZmF1bHQgIjEzIiBpZiBQUEM2NCAmJiAhUFBDXzY0S19QQUdFUworCXJhbmdlIDExIDY0CiAJZGVmYXVsdCAiMTEiCiAJaGVscAogCSAgVGhlIGtlcm5lbCBtZW1vcnkgYWxsb2NhdG9yIGRpdmlkZXMgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeQpAQCAtODA2LDYgKzgxNCwxOSBAQAogZW5kbWVudQogCiBpZiBQUEM2NAorY29uZmlnIFJFTE9DQVRBQkxFCisJYm9vbCAiQnVpbGQgYSByZWxvY2F0YWJsZSBrZXJuZWwiCisJaGVscAorCSAgVGhpcyBidWlsZHMgYSBrZXJuZWwgaW1hZ2UgdGhhdCBpcyBjYXBhYmxlIG9mIHJ1bm5pbmcgYW55d2hlcmUKKwkgIGluIHRoZSBSTUEgKHJlYWwgbWVtb3J5IGFyZWEpIGF0IGFueSAxNmstYWxpZ25lZCBiYXNlIGFkZHJlc3MuCisJICBUaGUga2VybmVsIGlzIGxpbmtlZCBhcyBhIHBvc2l0aW9uLWluZGVwZW5kZW50IGV4ZWN1dGFibGUgKFBJRSkKKwkgIGFuZCBjb250YWlucyBkeW5hbWljIHJlbG9jYXRpb25zIHdoaWNoIGFyZSBwcm9jZXNzZWQgZWFybHkKKwkgIGluIHRoZSBib290dXAgcHJvY2Vzcy4KKworCSAgT25lIHVzZSBpcyBmb3IgdGhlIGtleGVjIG9uIHBhbmljIGNhc2Ugd2hlcmUgdGhlIHJlY292ZXJ5IGtlcm5lbAorCSAgbXVzdCBsaXZlIGF0IGEgZGlmZmVyZW50IHBoeXNpY2FsIGFkZHJlc3MgdGhhbiB0aGUgcHJpbWFyeQorCSAga2VybmVsLgorCiBjb25maWcgUEFHRV9PRkZTRVQKIAloZXgKIAlkZWZhdWx0ICIweGMwMDAwMDAwMDAwMDAwMDAiCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCmluZGV4IDRlYmM1MmEuLjE1ZWIyNzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCkBAIC01MSw2ICs1MSwxMSBAQAogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJZGVmYXVsdCBuCiAKK2NvbmZpZyBNU0lfQklUTUFQX1NFTEZURVNUCisJYm9vbCAiUnVuIHNlbGYtdGVzdHMgb2YgdGhlIE1TSSBiaXRtYXAgY29kZS4iCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwlkZWZhdWx0IG4KKwogY29uZmlnIFhNT04KIAlib29sICJJbmNsdWRlIHhtb24ga2VybmVsIGRlYnVnZ2VyIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKaW5kZXggYzZiZTE5ZS4uMjRkZDFhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQpAQCAtNjMsNyArNjMsOSBAQAogb3ZlcnJpZGUgQVIJOj0gR05VVEFSR0VUPWVsZiQoQ09ORklHX1dPUkRfU0laRSktcG93ZXJwYyAkKEFSKQogZW5kaWYKIAotTERGTEFHU192bWxpbnV4CTo9IC1Cc3RhdGljCitMREZMQUdTX3ZtbGludXgteXkgOj0gLUJzdGF0aWMKK0xERkxBR1Nfdm1saW51eC0kKENPTkZJR19QUEM2NCkkKENPTkZJR19SRUxPQ0FUQUJMRSkgOj0gLXBpZQorTERGTEFHU192bWxpbnV4CTo9ICQoTERGTEFHU192bWxpbnV4LXl5KQogCiBDRkxBR1MtJChDT05GSUdfUFBDNjQpCTo9IC1tbWluaW1hbC10b2MgLW10cmFjZWJhY2s9bm9uZSAgLW1jYWxsLWFpeGRlc2MKIENGTEFHUy0kKENPTkZJR19QUEMzMikJOj0gLWZmaXhlZC1yMiAtbW11bHRpcGxlCkBAIC0xMDIsNyArMTA0LDEwIEBACiBLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLW1uby1hbHRpdmVjKQogCiAjIE5vIFNQRSBpbnN0cnVjdGlvbiB3aGVuIGJ1aWxkaW5nIGtlcm5lbAorIyAoV2UgdXNlIGFsbCBhdmFpbGFibGUgb3B0aW9ucyB0byBoZWxwIHNlbWktYnJva2VuIGNvbXBpbGVycykKIEtCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtbW5vLXNwZSkKK0tCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtbXNwZT1ubykKK0tCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFiaT1uby1zcGUpCiAKICMgRW5hYmxlIHVuaXQtYXQtYS10aW1lIG1vZGUgd2hlbiBwb3NzaWJsZS4gSXQgc2hyaW5rcyB0aGUKICMga2VybmVsIGNvbnNpZGVyYWJseS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKaW5kZXggNjVkMWE4NC4uYWFjMTQwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKQEAgLTMxMCw4ICszMTAsMTEgQEAKICQob2JqKS92bWxpbnV4LnN0cmlwOiB2bWxpbnV4CiAJJChTVFJJUCkgLXMgLVIgLmNvbW1lbnQgJDwgLW8gJEAKIAorIyBUaGUgaXNlcmllcyBoeXBlcnZpc29yIHdvbid0IHRha2UgYW4gRVRfRFlOIGV4ZWN1dGFibGUsIHNvIHRoaXMKKyMgY2hhbmdlcyB0aGUgdHlwZSAoYnl0ZSAxNykgaW4gdGhlIGZpbGUgdG8gRVRfRVhFQyAoMikuCiAkKG9iaikvekltYWdlLmlzZXJpZXM6IHZtbGludXgKIAkkKFNUUklQKSAtcyAtUiAuY29tbWVudCAkPCAtbyAkQAorCXByaW50ZiAiXHgwMiIgfCBkZCBvZj0kQCBjb252PW5vdHJ1bmMgYnM9MSBzZWVrPTE3CiAKICQob2JqKS91SW1hZ2U6IHZtbGludXggJCh3cmFwcGVyYml0cykKIAkkKGNhbGwgaWZfY2hhbmdlZCx3cmFwLHVib290KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvYWRkbm90ZS5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvYWRkbm90ZS5jCmluZGV4IGIxZTU2MTEuLmRjYzlhYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2FkZG5vdGUuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9hZGRub3RlLmMKQEAgLTExLDcgKzExLDEyIEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogVXNhZ2U6IGFkZG5vdGUgekltYWdlCisgKiBVc2FnZTogYWRkbm90ZSB6SW1hZ2UgW25vdGUuZWxmXQorICoKKyAqIElmIG5vdGUuZWxmIGlzIHN1cHBsaWVkLCBpdCBpcyB0aGUgbmFtZSBvZiBhbiBFTEYgZmlsZSB0aGF0IGNvbnRhaW5zCisgKiBhbiBSUEEgbm90ZSB0byB1c2UgaW5zdGVhZCBvZiB0aGUgYnVpbHQtaW4gb25lLiAgQWx0ZXJuYXRpdmVseSwgdGhlCisgKiBub3RlLmVsZiBmaWxlIG1heSBiZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSB0aGUgYnVpbHQtaW4gUlBBIG5vdGUgaXMKKyAqIHVzZWQgKHRoaXMgaXMgdG8gc2ltcGxpZnkgaG93IHRoaXMgaXMgaW52b2tlZCBmcm9tIHRoZSB3cmFwcGVyIHNjcmlwdCkuCiAgKi8KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNDMsMjcgKzQ4LDI5IEBACiAgKi8KICNkZWZpbmUgTl9SUEFfREVTQ1IJOAogdW5zaWduZWQgaW50IHJwYW5vdGVbTl9SUEFfREVTQ1JdID0gewotCTAsCQkJLyogbHBhcmFmZmluaXR5ICovCi0JNjQsCQkJLyogbWluX3Jtb19zaXplICovCisJMSwJCQkvKiBscGFyYWZmaW5pdHkgKi8KKwkxMjgsCQkJLyogbWluX3Jtb19zaXplICovCiAJMCwJCQkvKiBtaW5fcm1vX3BlcmNlbnQgKi8KLQk0MCwJCQkvKiBtYXhfcGZ0X3NpemUgKi8KKwk0NiwJCQkvKiBtYXhfcGZ0X3NpemUgKi8KIAkxLAkJCS8qIHNwbHBhciAqLwogCS0xLAkJCS8qIG1pbl9sb2FkICovCi0JMCwJCQkvKiBuZXdfbWVtX2RlZiAqLwotCTEsCQkJLyogaWdub3JlX215X2NsaWVudF9jb25maWcgKi8KKwkxLAkJCS8qIG5ld19tZW1fZGVmICovCisJMCwJCQkvKiBpZ25vcmVfbXlfY2xpZW50X2NvbmZpZyAqLwogfTsKIAogI2RlZmluZSBST1VORFVQKGxlbikJKCgobGVuKSArIDMpICYgfjMpCiAKIHVuc2lnbmVkIGNoYXIgYnVmWzUxMl07Cit1bnNpZ25lZCBjaGFyIG5vdGVidWZbNTEyXTsKIAotI2RlZmluZSBHRVRfMTZCRShvZmYpCSgoYnVmW29mZl0gPDwgOCkgKyAoYnVmWyhvZmYpKzFdKSkKLSNkZWZpbmUgR0VUXzMyQkUob2ZmKQkoKEdFVF8xNkJFKG9mZikgPDwgMTYpICsgR0VUXzE2QkUoKG9mZikrMikpCisjZGVmaW5lIEdFVF8xNkJFKGIsIG9mZikJKCgoYilbb2ZmXSA8PCA4KSArICgoYilbKG9mZikrMV0pKQorI2RlZmluZSBHRVRfMzJCRShiLCBvZmYpCSgoR0VUXzE2QkUoKGIpLCAob2ZmKSkgPDwgMTYpICsgXAorCQkJCSBHRVRfMTZCRSgoYiksIChvZmYpKzIpKQogCi0jZGVmaW5lIFBVVF8xNkJFKG9mZiwgdikJKGJ1ZltvZmZdID0gKCh2KSA+PiA4KSAmIDB4ZmYsIFwKLQkJCQkgYnVmWyhvZmYpICsgMV0gPSAodikgJiAweGZmKQotI2RlZmluZSBQVVRfMzJCRShvZmYsIHYpCShQVVRfMTZCRSgob2ZmKSwgKHYpID4+IDE2KSwgXAotCQkJCSBQVVRfMTZCRSgob2ZmKSArIDIsICh2KSkpCisjZGVmaW5lIFBVVF8xNkJFKGIsIG9mZiwgdikJKChiKVtvZmZdID0gKCh2KSA+PiA4KSAmIDB4ZmYsIFwKKwkJCQkgKGIpWyhvZmYpICsgMV0gPSAodikgJiAweGZmKQorI2RlZmluZSBQVVRfMzJCRShiLCBvZmYsIHYpCShQVVRfMTZCRSgoYiksIChvZmYpLCAodikgPj4gMTYpLCBcCisJCQkJIFBVVF8xNkJFKChiKSwgKG9mZikgKyAyLCAodikpKQogCiAvKiBTdHJ1Y3R1cmUgb2YgYW4gRUxGIGZpbGUgKi8KICNkZWZpbmUgRV9JREVOVAkJMAkvKiBFTEYgaGVhZGVyICovCkBAIC04OCwxNSArOTUsNzEgQEAKIAogdW5zaWduZWQgY2hhciBlbGZfbWFnaWNbNF0gPSB7IDB4N2YsICdFJywgJ0wnLCAnRicgfTsKIAordW5zaWduZWQgY2hhciAqcmVhZF9ycGFub3RlKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgKm5ucCkKK3sKKwlpbnQgbm90ZWZkLCBuciwgaTsKKwlpbnQgcGgsIHBzLCBucDsKKwlpbnQgbm90ZSwgbm90ZXNpemU7CisKKwlub3RlZmQgPSBvcGVuKGZuYW1lLCBPX1JET05MWSk7CisJaWYgKG5vdGVmZCA8IDApIHsKKwkJcGVycm9yKGZuYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisJbnIgPSByZWFkKG5vdGVmZCwgbm90ZWJ1Ziwgc2l6ZW9mKG5vdGVidWYpKTsKKwlpZiAobnIgPCAwKSB7CisJCXBlcnJvcigicmVhZCBub3RlIik7CisJCWV4aXQoMSk7CisJfQorCWlmIChuciA9PSAwKQkJLyogZW1wdHkgZmlsZSAqLworCQlyZXR1cm4gTlVMTDsKKwlpZiAobnIgPCBFX0hTSVpFIHx8CisJICAgIG1lbWNtcCgmbm90ZWJ1ZltFX0lERU5UK0VJX01BR0lDXSwgZWxmX21hZ2ljLCA0KSAhPSAwIHx8CisJICAgIG5vdGVidWZbRV9JREVOVCtFSV9DTEFTU10gIT0gRUxGQ0xBU1MzMiB8fAorCSAgICBub3RlYnVmW0VfSURFTlQrRUlfREFUQV0gIT0gRUxGREFUQTJNU0IpCisJCWdvdG8gbm90ZWxmOworCWNsb3NlKG5vdGVmZCk7CisKKwkvKiBub3cgbG9vayBmb3IgdGhlIFJQQS1ub3RlICovCisJcGggPSBHRVRfMzJCRShub3RlYnVmLCBFX1BIT0ZGKTsKKwlwcyA9IEdFVF8xNkJFKG5vdGVidWYsIEVfUEhFTlRTSVpFKTsKKwlucCA9IEdFVF8xNkJFKG5vdGVidWYsIEVfUEhOVU0pOworCWlmIChwaCA8IEVfSFNJWkUgfHwgcHMgPCBQSF9IU0laRSB8fCBucCA8IDEpCisJCWdvdG8gbm90ZWxmOworCisJZm9yIChpID0gMDsgaSA8IG5wOyArK2ksIHBoICs9IHBzKSB7CisJCWlmIChHRVRfMzJCRShub3RlYnVmLCBwaCArIFBIX1RZUEUpICE9IFBUX05PVEUpCisJCQljb250aW51ZTsKKwkJbm90ZSA9IEdFVF8zMkJFKG5vdGVidWYsIHBoICsgUEhfT0ZGU0VUKTsKKwkJbm90ZXNpemUgPSBHRVRfMzJCRShub3RlYnVmLCBwaCArIFBIX0ZJTEVTWik7CisJCWlmIChub3Rlc2l6ZSA8IDM0IHx8IG5vdGUgKyBub3Rlc2l6ZSA+IG5yKQorCQkJY29udGludWU7CisJCWlmIChHRVRfMzJCRShub3RlYnVmLCBub3RlKSAhPSBzdHJsZW4ocnBhbmFtZSkgKyAxIHx8CisJCSAgICBHRVRfMzJCRShub3RlYnVmLCBub3RlICsgOCkgIT0gMHgxMjc1OTk5OSB8fAorCQkgICAgc3RyY21wKChjaGFyICopJm5vdGVidWZbbm90ZSArIDEyXSwgcnBhbmFtZSkgIT0gMCkKKwkJCWNvbnRpbnVlOworCQkvKiBsb29rcyBsaWtlIGFuIFJQQSBub3RlLCByZXR1cm4gaXQgKi8KKwkJKm5ucCA9IG5vdGVzaXplOworCQlyZXR1cm4gJm5vdGVidWZbbm90ZV07CisJfQorCS8qIG5vIFJQQSBub3RlIGZvdW5kICovCisJcmV0dXJuIE5VTEw7CisKKyBub3RlbGY6CisJZnByaW50ZihzdGRlcnIsICIlcyBpcyBub3QgYSBiaWctZW5kaWFuIDMyLWJpdCBFTEYgaW1hZ2VcbiIsIGZuYW1lKTsKKwlleGl0KDEpOworfQorCiBpbnQKIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiB7CiAJaW50IGZkLCBuLCBpOwogCWludCBwaCwgcHMsIG5wOwogCWludCBubm90ZSwgbm5vdGUyLCBuczsKKwl1bnNpZ25lZCBjaGFyICpycGFwOwogCi0JaWYgKGFjICE9IDIpIHsKLQkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZWxmLWZpbGVcbiIsIGF2WzBdKTsKKwlpZiAoYWMgIT0gMiAmJiBhYyAhPSAzKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIGVsZi1maWxlIFtycGFub3RlLmVsZl1cbiIsIGF2WzBdKTsKIAkJZXhpdCgxKTsKIAl9CiAJZmQgPSBvcGVuKGF2WzFdLCBPX1JEV1IpOwpAQCAtMTA3LDYgKzE3MCw3IEBACiAKIAlubm90ZSA9IDEyICsgUk9VTkRVUChzdHJsZW4oYXJjaCkgKyAxKSArIHNpemVvZihkZXNjcik7CiAJbm5vdGUyID0gMTIgKyBST1VORFVQKHN0cmxlbihycGFuYW1lKSArIDEpICsgc2l6ZW9mKHJwYW5vdGUpOworCXJwYXAgPSBOVUxMOwogCiAJbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCWlmIChuIDwgMCkgewpAQCAtMTI0LDE2ICsxODgsMTkgQEAKIAkJZXhpdCgxKTsKIAl9CiAKLQlwaCA9IEdFVF8zMkJFKEVfUEhPRkYpOwotCXBzID0gR0VUXzE2QkUoRV9QSEVOVFNJWkUpOwotCW5wID0gR0VUXzE2QkUoRV9QSE5VTSk7CisJaWYgKGFjID09IDMpCisJCXJwYXAgPSByZWFkX3JwYW5vdGUoYXZbMl0sICZubm90ZTIpOworCisJcGggPSBHRVRfMzJCRShidWYsIEVfUEhPRkYpOworCXBzID0gR0VUXzE2QkUoYnVmLCBFX1BIRU5UU0laRSk7CisJbnAgPSBHRVRfMTZCRShidWYsIEVfUEhOVU0pOwogCWlmIChwaCA8IEVfSFNJWkUgfHwgcHMgPCBQSF9IU0laRSB8fCBucCA8IDEpCiAJCWdvdG8gbm90ZWxmOwogCWlmIChwaCArIChucCArIDIpICogcHMgKyBubm90ZSArIG5ub3RlMiA+IG4pCiAJCWdvdG8gbm9zcGFjZTsKIAogCWZvciAoaSA9IDA7IGkgPCBucDsgKytpKSB7Ci0JCWlmIChHRVRfMzJCRShwaCArIFBIX1RZUEUpID09IFBUX05PVEUpIHsKKwkJaWYgKEdFVF8zMkJFKGJ1ZiwgcGggKyBQSF9UWVBFKSA9PSBQVF9OT1RFKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIGFscmVhZHkgaGFzIGEgbm90ZSBlbnRyeVxuIiwKIAkJCQlhdlsxXSk7CiAJCQlleGl0KDApOwpAQCAtMTQ4LDM3ICsyMTUsNDIgQEAKIAogCS8qIGZpbGwgaW4gdGhlIHByb2dyYW0gaGVhZGVyIGVudHJ5ICovCiAJbnMgPSBwaCArIDIgKiBwczsKLQlQVVRfMzJCRShwaCArIFBIX1RZUEUsIFBUX05PVEUpOwotCVBVVF8zMkJFKHBoICsgUEhfT0ZGU0VULCBucyk7Ci0JUFVUXzMyQkUocGggKyBQSF9GSUxFU1osIG5ub3RlKTsKKwlQVVRfMzJCRShidWYsIHBoICsgUEhfVFlQRSwgUFRfTk9URSk7CisJUFVUXzMyQkUoYnVmLCBwaCArIFBIX09GRlNFVCwgbnMpOworCVBVVF8zMkJFKGJ1ZiwgcGggKyBQSF9GSUxFU1osIG5ub3RlKTsKIAogCS8qIGZpbGwgaW4gdGhlIG5vdGUgYXJlYSB3ZSBwb2ludCB0byAqLwogCS8qIFhYWCB3ZSBzaG91bGQgcHJvYmFibHkgbWFrZSB0aGlzIGEgcHJvcGVyIHNlY3Rpb24gKi8KLQlQVVRfMzJCRShucywgc3RybGVuKGFyY2gpICsgMSk7Ci0JUFVUXzMyQkUobnMgKyA0LCBOX0RFU0NSICogNCk7Ci0JUFVUXzMyQkUobnMgKyA4LCAweDEyNzUpOworCVBVVF8zMkJFKGJ1ZiwgbnMsIHN0cmxlbihhcmNoKSArIDEpOworCVBVVF8zMkJFKGJ1ZiwgbnMgKyA0LCBOX0RFU0NSICogNCk7CisJUFVUXzMyQkUoYnVmLCBucyArIDgsIDB4MTI3NSk7CiAJc3RyY3B5KChjaGFyICopICZidWZbbnMgKyAxMl0sIGFyY2gpOwogCW5zICs9IDEyICsgc3RybGVuKGFyY2gpICsgMTsKIAlmb3IgKGkgPSAwOyBpIDwgTl9ERVNDUjsgKytpLCBucyArPSA0KQotCQlQVVRfMzJCRShucywgZGVzY3JbaV0pOworCQlQVVRfMzJCRShidWYsIG5zLCBkZXNjcltpXSk7CiAKIAkvKiBmaWxsIGluIHRoZSBzZWNvbmQgcHJvZ3JhbSBoZWFkZXIgZW50cnkgYW5kIHRoZSBSUEEgbm90ZSBhcmVhICovCiAJcGggKz0gcHM7Ci0JUFVUXzMyQkUocGggKyBQSF9UWVBFLCBQVF9OT1RFKTsKLQlQVVRfMzJCRShwaCArIFBIX09GRlNFVCwgbnMpOwotCVBVVF8zMkJFKHBoICsgUEhfRklMRVNaLCBubm90ZTIpOworCVBVVF8zMkJFKGJ1ZiwgcGggKyBQSF9UWVBFLCBQVF9OT1RFKTsKKwlQVVRfMzJCRShidWYsIHBoICsgUEhfT0ZGU0VULCBucyk7CisJUFVUXzMyQkUoYnVmLCBwaCArIFBIX0ZJTEVTWiwgbm5vdGUyKTsKIAogCS8qIGZpbGwgaW4gdGhlIG5vdGUgYXJlYSB3ZSBwb2ludCB0byAqLwotCVBVVF8zMkJFKG5zLCBzdHJsZW4ocnBhbmFtZSkgKyAxKTsKLQlQVVRfMzJCRShucyArIDQsIHNpemVvZihycGFub3RlKSk7Ci0JUFVUXzMyQkUobnMgKyA4LCAweDEyNzU5OTk5KTsKLQlzdHJjcHkoKGNoYXIgKikgJmJ1ZltucyArIDEyXSwgcnBhbmFtZSk7Ci0JbnMgKz0gMTIgKyBST1VORFVQKHN0cmxlbihycGFuYW1lKSArIDEpOwotCWZvciAoaSA9IDA7IGkgPCBOX1JQQV9ERVNDUjsgKytpLCBucyArPSA0KQotCQlQVVRfMzJCRShucywgcnBhbm90ZVtpXSk7CisJaWYgKHJwYXApIHsKKwkJLyogUlBBIG5vdGUgc3VwcGxpZWQgaW4gZmlsZSwganVzdCBjb3B5IHRoZSB3aG9sZSB0aGluZyBvdmVyICovCisJCW1lbWNweShidWYgKyBucywgcnBhcCwgbm5vdGUyKTsKKwl9IGVsc2UgeworCQlQVVRfMzJCRShidWYsIG5zLCBzdHJsZW4ocnBhbmFtZSkgKyAxKTsKKwkJUFVUXzMyQkUoYnVmLCBucyArIDQsIHNpemVvZihycGFub3RlKSk7CisJCVBVVF8zMkJFKGJ1ZiwgbnMgKyA4LCAweDEyNzU5OTk5KTsKKwkJc3RyY3B5KChjaGFyICopICZidWZbbnMgKyAxMl0sIHJwYW5hbWUpOworCQlucyArPSAxMiArIFJPVU5EVVAoc3RybGVuKHJwYW5hbWUpICsgMSk7CisJCWZvciAoaSA9IDA7IGkgPCBOX1JQQV9ERVNDUjsgKytpLCBucyArPSA0KQorCQkJUFVUXzMyQkUoYnVmLCBucywgcnBhbm90ZVtpXSk7CisJfQogCiAJLyogVXBkYXRlIHRoZSBudW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXJzICovCi0JUFVUXzE2QkUoRV9QSE5VTSwgbnAgKyAyKTsKKwlQVVRfMTZCRShidWYsIEVfUEhOVU0sIG5wICsgMik7CiAKIAkvKiB3cml0ZSBiYWNrICovCiAJbHNlZWsoZmQsIChsb25nKSAwLCBTRUVLX1NFVCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL01ha2VmaWxlLmR0YyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvTWFrZWZpbGUuZHRjCmluZGV4IGQ2MDdmZGIuLjZkZGY5ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvTWFrZWZpbGUuZHRjCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvTWFrZWZpbGUuZHRjCkBAIC01LDIxICs1LDUgQEAKICMKIERUQ19TUkNTID0gZHRjLmMgZmxhdHRyZWUuYyBmc3RyZWUuYyBkYXRhLmMgbGl2ZXRyZWUuYyB0cmVlc291cmNlLmMgc3JjcG9zLmMgXAogCWNoZWNrcy5jCi1EVENfRVhUUkEgPSBkdGMuaCBzcmNwb3MuaAotRFRDX0xFWEZJTEVTID0gZHRjLWxleGVyLmwKLURUQ19CSVNPTkZJTEVTID0gZHRjLXBhcnNlci55Ci0KLURUQ19MRVhfU1JDUyA9ICQoRFRDX0xFWEZJTEVTOiUubD0lLmxleC5jKQotRFRDX0JJU09OX1NSQ1MgPSAkKERUQ19CSVNPTkZJTEVTOiUueT0lLnRhYi5jKQotRFRDX0JJU09OX0lOQ0xVREVTID0gJChEVENfQklTT05GSUxFUzolLnk9JS50YWIuaCkKLQotRFRDX0dFTl9TUkNTID0gJChEVENfTEVYX1NSQ1MpICQoRFRDX0JJU09OX1NSQ1MpCi1EVENfR0VOX0FMTCA9ICQoRFRDX0dFTl9TUkNTKSAkKERUQ19CSVNPTl9JTkNMVURFUykKK0RUQ19HRU5fU1JDUyA9IGR0Yy1sZXhlci5sZXguYyBkdGMtcGFyc2VyLnRhYi5jCiBEVENfT0JKUyA9ICQoRFRDX1NSQ1M6JS5jPSUubykgJChEVENfR0VOX1NSQ1M6JS5jPSUubykKLQotRFRDX0NMRUFORklMRVMgPSAkKERUQ19HRU5fQUxMKQotCi0jIFdlIGFzc3VtZSB0aGUgY29udGFpbmluZyBNYWtlZmlsZSBzeXN0ZW0gY2FuIGRvIGF1dG8tZGVwZW5kZW5jaWVzIGZvciBtb3N0Ci0jIHRoaW5ncywgYnV0IHdlIHN1cHBseSB0aGUgZGVwZW5kZW5jaWVzIG9uIGdlbmVyYXRlZCBoZWFkZXIgZmlsZXMgZXhwbGljaXRseQotCi0kKGFkZHByZWZpeCAkKERUQ19vYmpkaXIpLywkKERUQ19HRU5fU1JDUzolLmM9JS5vKSk6ICQoYWRkcHJlZml4ICQoRFRDX29iamRpcikvLCQoRFRDX0JJU09OX0lOQ0xVREVTKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvY2hlY2tzLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2NoZWNrcy5jCmluZGV4IDJjZTk2MWMuLjk1NDg1NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvY2hlY2tzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9jaGVja3MuYwpAQCAtMjQyLDYgKzI0Miw0MiBAQAogfQogTk9ERV9DSEVDSyhkdXBsaWNhdGVfcHJvcGVydHlfbmFtZXMsIE5VTEwsIEVSUk9SKTsKIAorI2RlZmluZSBMT1dFUkNBU0UJImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorI2RlZmluZSBVUFBFUkNBU0UJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorI2RlZmluZSBESUdJVFMJCSIwMTIzNDU2Nzg5IgorI2RlZmluZSBQUk9QTk9ERUNIQVJTCUxPV0VSQ0FTRSBVUFBFUkNBU0UgRElHSVRTICIsLl8rKiM/LSIKKworc3RhdGljIHZvaWQgY2hlY2tfbm9kZV9uYW1lX2NoYXJzKHN0cnVjdCBjaGVjayAqYywgc3RydWN0IG5vZGUgKmR0LAorCQkJCSAgc3RydWN0IG5vZGUgKm5vZGUpCit7CisJaW50IG4gPSBzdHJzcG4obm9kZS0+bmFtZSwgYy0+ZGF0YSk7CisKKwlpZiAobiA8IHN0cmxlbihub2RlLT5uYW1lKSkKKwkJRkFJTChjLCAiQmFkIGNoYXJhY3RlciAnJWMnIGluIG5vZGUgJXMiLAorCQkgICAgIG5vZGUtPm5hbWVbbl0sIG5vZGUtPmZ1bGxwYXRoKTsKK30KK05PREVfQ0hFQ0sobm9kZV9uYW1lX2NoYXJzLCBQUk9QTk9ERUNIQVJTICJAIiwgRVJST1IpOworCitzdGF0aWMgdm9pZCBjaGVja19ub2RlX25hbWVfZm9ybWF0KHN0cnVjdCBjaGVjayAqYywgc3RydWN0IG5vZGUgKmR0LAorCQkJCSAgIHN0cnVjdCBub2RlICpub2RlKQoreworCWlmIChzdHJjaHIoZ2V0X3VuaXRuYW1lKG5vZGUpLCAnQCcpKQorCQlGQUlMKGMsICJOb2RlICVzIGhhcyBtdWx0aXBsZSAnQCcgY2hhcmFjdGVycyBpbiBuYW1lIiwKKwkJICAgICBub2RlLT5mdWxscGF0aCk7Cit9CitOT0RFX0NIRUNLKG5vZGVfbmFtZV9mb3JtYXQsIE5VTEwsIEVSUk9SLCAmbm9kZV9uYW1lX2NoYXJzKTsKKworc3RhdGljIHZvaWQgY2hlY2tfcHJvcGVydHlfbmFtZV9jaGFycyhzdHJ1Y3QgY2hlY2sgKmMsIHN0cnVjdCBub2RlICpkdCwKKwkJCQkgICAgICBzdHJ1Y3Qgbm9kZSAqbm9kZSwgc3RydWN0IHByb3BlcnR5ICpwcm9wKQoreworCWludCBuID0gc3Ryc3BuKHByb3AtPm5hbWUsIGMtPmRhdGEpOworCisJaWYgKG4gPCBzdHJsZW4ocHJvcC0+bmFtZSkpCisJCUZBSUwoYywgIkJhZCBjaGFyYWN0ZXIgJyVjJyBpbiBwcm9wZXJ0eSBuYW1lIFwiJXNcIiwgbm9kZSAlcyIsCisJCSAgICAgcHJvcC0+bmFtZVtuXSwgcHJvcC0+bmFtZSwgbm9kZS0+ZnVsbHBhdGgpOworfQorUFJPUF9DSEVDSyhwcm9wZXJ0eV9uYW1lX2NoYXJzLCBQUk9QTk9ERUNIQVJTLCBFUlJPUik7CisKIHN0YXRpYyB2b2lkIGNoZWNrX2V4cGxpY2l0X3BoYW5kbGVzKHN0cnVjdCBjaGVjayAqYywgc3RydWN0IG5vZGUgKnJvb3QsCiAJCQkJCSAgc3RydWN0IG5vZGUgKm5vZGUpCiB7CkBAIC0yODAsMTYgKzMxNiwyOSBAQAogc3RhdGljIHZvaWQgY2hlY2tfbmFtZV9wcm9wZXJ0aWVzKHN0cnVjdCBjaGVjayAqYywgc3RydWN0IG5vZGUgKnJvb3QsCiAJCQkJICBzdHJ1Y3Qgbm9kZSAqbm9kZSkKIHsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHByb3BlcnR5ICoqcHAsICpwcm9wID0gTlVMTDsKIAotCXByb3AgPSBnZXRfcHJvcGVydHkobm9kZSwgIm5hbWUiKTsKKwlmb3IgKHBwID0gJm5vZGUtPnByb3BsaXN0OyAqcHA7IHBwID0gJigoKnBwKS0+bmV4dCkpCisJCWlmIChzdHJlcSgoKnBwKS0+bmFtZSwgIm5hbWUiKSkgeworCQkJcHJvcCA9ICpwcDsKKwkJCWJyZWFrOworCQl9CisKIAlpZiAoIXByb3ApCiAJCXJldHVybjsgLyogTm8gbmFtZSBwcm9wZXJ0eSwgdGhhdCdzIGZpbmUgKi8KIAogCWlmICgocHJvcC0+dmFsLmxlbiAhPSBub2RlLT5iYXNlbmFtZWxlbisxKQotCSAgICB8fCAobWVtY21wKHByb3AtPnZhbC52YWwsIG5vZGUtPm5hbWUsIG5vZGUtPmJhc2VuYW1lbGVuKSAhPSAwKSkKKwkgICAgfHwgKG1lbWNtcChwcm9wLT52YWwudmFsLCBub2RlLT5uYW1lLCBub2RlLT5iYXNlbmFtZWxlbikgIT0gMCkpIHsKIAkJRkFJTChjLCAiXCJuYW1lXCIgcHJvcGVydHkgaW4gJXMgaXMgaW5jb3JyZWN0IChcIiVzXCIgaW5zdGVhZCIKIAkJICAgICAiIG9mIGJhc2Ugbm9kZSBuYW1lKSIsIG5vZGUtPmZ1bGxwYXRoLCBwcm9wLT52YWwudmFsKTsKKwl9IGVsc2UgeworCQkvKiBUaGUgbmFtZSBwcm9wZXJ0eSBpcyBjb3JyZWN0LCBhbmQgdGhlcmVmb3JlIHJlZHVuZGFudC4KKwkJICogRGVsZXRlIGl0ICovCisJCSpwcCA9IHByb3AtPm5leHQ7CisJCWZyZWUocHJvcC0+bmFtZSk7CisJCWRhdGFfZnJlZShwcm9wLT52YWwpOworCQlmcmVlKHByb3ApOworCX0KIH0KIENIRUNLX0lTX1NUUklORyhuYW1lX2lzX3N0cmluZywgIm5hbWUiLCBFUlJPUik7CiBOT0RFX0NIRUNLKG5hbWVfcHJvcGVydGllcywgTlVMTCwgRVJST1IsICZuYW1lX2lzX3N0cmluZyk7CkBAIC0zMDEsMjMgKzM1MCwyMyBAQAogc3RhdGljIHZvaWQgZml4dXBfcGhhbmRsZV9yZWZlcmVuY2VzKHN0cnVjdCBjaGVjayAqYywgc3RydWN0IG5vZGUgKmR0LAogCQkJCSAgICAgc3RydWN0IG5vZGUgKm5vZGUsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKIHsKLSAgICAgIHN0cnVjdCBtYXJrZXIgKm0gPSBwcm9wLT52YWwubWFya2VyczsKLSAgICAgIHN0cnVjdCBub2RlICpyZWZub2RlOwotICAgICAgY2VsbF90IHBoYW5kbGU7CisJc3RydWN0IG1hcmtlciAqbSA9IHByb3AtPnZhbC5tYXJrZXJzOworCXN0cnVjdCBub2RlICpyZWZub2RlOworCWNlbGxfdCBwaGFuZGxlOwogCi0gICAgICBmb3JfZWFjaF9tYXJrZXJfb2ZfdHlwZShtLCBSRUZfUEhBTkRMRSkgewotCSAgICAgIGFzc2VydChtLT5vZmZzZXQgKyBzaXplb2YoY2VsbF90KSA8PSBwcm9wLT52YWwubGVuKTsKKwlmb3JfZWFjaF9tYXJrZXJfb2ZfdHlwZShtLCBSRUZfUEhBTkRMRSkgeworCQlhc3NlcnQobS0+b2Zmc2V0ICsgc2l6ZW9mKGNlbGxfdCkgPD0gcHJvcC0+dmFsLmxlbik7CiAKLQkgICAgICByZWZub2RlID0gZ2V0X25vZGVfYnlfcmVmKGR0LCBtLT5yZWYpOwotCSAgICAgIGlmICghIHJlZm5vZGUpIHsKLQkJICAgICAgRkFJTChjLCAiUmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBub2RlIG9yIGxhYmVsIFwiJXNcIlxuIiwKLQkJCSAgIG0tPnJlZik7Ci0JCSAgICAgIGNvbnRpbnVlOwotCSAgICAgIH0KKwkJcmVmbm9kZSA9IGdldF9ub2RlX2J5X3JlZihkdCwgbS0+cmVmKTsKKwkJaWYgKCEgcmVmbm9kZSkgeworCQkJRkFJTChjLCAiUmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBub2RlIG9yIGxhYmVsIFwiJXNcIlxuIiwKKwkJCSAgICAgbS0+cmVmKTsKKwkJCWNvbnRpbnVlOworCQl9CiAKLQkgICAgICBwaGFuZGxlID0gZ2V0X25vZGVfcGhhbmRsZShkdCwgcmVmbm9kZSk7Ci0JICAgICAgKigoY2VsbF90ICopKHByb3AtPnZhbC52YWwgKyBtLT5vZmZzZXQpKSA9IGNwdV90b19iZTMyKHBoYW5kbGUpOwotICAgICAgfQorCQlwaGFuZGxlID0gZ2V0X25vZGVfcGhhbmRsZShkdCwgcmVmbm9kZSk7CisJCSooKGNlbGxfdCAqKShwcm9wLT52YWwudmFsICsgbS0+b2Zmc2V0KSkgPSBjcHVfdG9fZmR0MzIocGhhbmRsZSk7CisJfQogfQogQ0hFQ0socGhhbmRsZV9yZWZlcmVuY2VzLCBOVUxMLCBOVUxMLCBmaXh1cF9waGFuZGxlX3JlZmVyZW5jZXMsIE5VTEwsIEVSUk9SLAogICAgICAgJmR1cGxpY2F0ZV9ub2RlX25hbWVzLCAmZXhwbGljaXRfcGhhbmRsZXMpOwpAQCAtNDk4LDYgKzU0Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2hlY2sgKmNoZWNrX3RhYmxlW10gPSB7CiAJJmR1cGxpY2F0ZV9ub2RlX25hbWVzLCAmZHVwbGljYXRlX3Byb3BlcnR5X25hbWVzLAorCSZub2RlX25hbWVfY2hhcnMsICZub2RlX25hbWVfZm9ybWF0LCAmcHJvcGVydHlfbmFtZV9jaGFycywKIAkmbmFtZV9pc19zdHJpbmcsICZuYW1lX3Byb3BlcnRpZXMsCiAJJmV4cGxpY2l0X3BoYW5kbGVzLAogCSZwaGFuZGxlX3JlZmVyZW5jZXMsICZwYXRoX3JlZmVyZW5jZXMsCkBAIC01MTEsMTAgKzU2MSw3IEBACiAJJm9ic29sZXRlX2Nob3Nlbl9pbnRlcnJ1cHRfY29udHJvbGxlciwKIH07CiAKLWludCBjaGVja19zZW1hbnRpY3Moc3RydWN0IG5vZGUgKmR0LCBpbnQgb3V0dmVyc2lvbiwgaW50IGJvb3RfY3B1aWRfcGh5cyk7Ci0KLXZvaWQgcHJvY2Vzc19jaGVja3MoaW50IGZvcmNlLCBzdHJ1Y3QgYm9vdF9pbmZvICpiaSwKLQkJICAgIGludCBjaGVja2ZsYWcsIGludCBvdXR2ZXJzaW9uLCBpbnQgYm9vdF9jcHVpZF9waHlzKQordm9pZCBwcm9jZXNzX2NoZWNrcyhpbnQgZm9yY2UsIHN0cnVjdCBib290X2luZm8gKmJpKQogewogCXN0cnVjdCBub2RlICpkdCA9IGJpLT5kdDsKIAlpbnQgaTsKQEAgLTUzNywyMTQgKzU4NCw0IEBACiAJCQkJIm91dHB1dCBmb3JjZWRcbiIpOwogCQl9CiAJfQotCi0JaWYgKGNoZWNrZmxhZykgewotCQlpZiAoZXJyb3IpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiV2FybmluZzogU2tpcHBpbmcgc2VtYW50aWMgY2hlY2tzIGR1ZSB0byBzdHJ1Y3R1cmFsIGVycm9yc1xuIik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoIWNoZWNrX3NlbWFudGljcyhiaS0+ZHQsIG91dHZlcnNpb24sCi0JCQkJCSAgICAgYm9vdF9jcHVpZF9waHlzKSkKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IElucHV0IHRyZWUgaGFzIHNlbWFudGljIGVycm9yc1xuIik7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBTZW1hbnRpYyBjaGVjayBmdW5jdGlvbnMKLSAqLwotCi0jZGVmaW5lIEVSUk1TRyguLi4pIGlmIChxdWlldCA8IDIpIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICIgX19WQV9BUkdTX18pCi0jZGVmaW5lIFdBUk5NU0coLi4uKSBpZiAocXVpZXQgPCAxKSBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6ICIgX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgRE9fRVJSKC4uLikgZG8ge0VSUk1TRyhfX1ZBX0FSR1NfXyk7IG9rID0gMDsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBDSEVDS19IQVZFKG5vZGUsIHByb3BuYW1lKSBcCi0JZG8geyBcCi0JCWlmICghIChwcm9wID0gZ2V0X3Byb3BlcnR5KChub2RlKSwgKHByb3BuYW1lKSkpKSBcCi0JCQlET19FUlIoIk1pc3NpbmcgXCIlc1wiIHByb3BlcnR5IGluICVzXG4iLCAocHJvcG5hbWUpLCBcCi0JCQkJKG5vZGUpLT5mdWxscGF0aCk7IFwKLQl9IHdoaWxlICgwKTsKLQotI2RlZmluZSBDSEVDS19IQVZFX1dBUk4obm9kZSwgcHJvcG5hbWUpIFwKLQlkbyB7IFwKLQkJaWYgKCEgKHByb3AgID0gZ2V0X3Byb3BlcnR5KChub2RlKSwgKHByb3BuYW1lKSkpKSBcCi0JCQlXQVJOTVNHKCIlcyBoYXMgbm8gXCIlc1wiIHByb3BlcnR5XG4iLCBcCi0JCQkJKG5vZGUpLT5mdWxscGF0aCwgKHByb3BuYW1lKSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIENIRUNLX0hBVkVfU1RSSU5HKG5vZGUsIHByb3BuYW1lKSBcCi0JZG8geyBcCi0JCUNIRUNLX0hBVkUoKG5vZGUpLCAocHJvcG5hbWUpKTsgXAotCQlpZiAocHJvcCAmJiAhZGF0YV9pc19vbmVfc3RyaW5nKHByb3AtPnZhbCkpIFwKLQkJCURPX0VSUigiXCIlc1wiIHByb3BlcnR5IGluICVzIGlzIG5vdCBhIHN0cmluZ1xuIiwgXAotCQkJCShwcm9wbmFtZSksIChub2RlKS0+ZnVsbHBhdGgpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBDSEVDS19IQVZFX1NUUkVRKG5vZGUsIHByb3BuYW1lLCB2YWx1ZSkgXAotCWRvIHsgXAotCQlDSEVDS19IQVZFX1NUUklORygobm9kZSksIChwcm9wbmFtZSkpOyBcCi0JCWlmIChwcm9wICYmICFzdHJlcShwcm9wLT52YWwudmFsLCAodmFsdWUpKSkgXAotCQkJRE9fRVJSKCIlcyBoYXMgd3JvbmcgJXMsICVzIChzaG91bGQgYmUgJXNcbiIsIFwKLQkJCQkobm9kZSktPmZ1bGxwYXRoLCAocHJvcG5hbWUpLCBcCi0JCQkJcHJvcC0+dmFsLnZhbCwgKHZhbHVlKSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIENIRUNLX0hBVkVfT05FQ0VMTChub2RlLCBwcm9wbmFtZSkgXAotCWRvIHsgXAotCQlDSEVDS19IQVZFKChub2RlKSwgKHByb3BuYW1lKSk7IFwKLQkJaWYgKHByb3AgJiYgKHByb3AtPnZhbC5sZW4gIT0gc2l6ZW9mKGNlbGxfdCkpKSBcCi0JCQlET19FUlIoIlwiJXNcIiBwcm9wZXJ0eSBpbiAlcyBoYXMgd3Jvbmcgc2l6ZSAlZCAoc2hvdWxkIGJlIDEgY2VsbClcbiIsIChwcm9wbmFtZSksIChub2RlKS0+ZnVsbHBhdGgsIHByb3AtPnZhbC5sZW4pOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBDSEVDS19IQVZFX1dBUk5fT05FQ0VMTChub2RlLCBwcm9wbmFtZSkgXAotCWRvIHsgXAotCQlDSEVDS19IQVZFX1dBUk4oKG5vZGUpLCAocHJvcG5hbWUpKTsgXAotCQlpZiAocHJvcCAmJiAocHJvcC0+dmFsLmxlbiAhPSBzaXplb2YoY2VsbF90KSkpIFwKLQkJCURPX0VSUigiXCIlc1wiIHByb3BlcnR5IGluICVzIGhhcyB3cm9uZyBzaXplICVkIChzaG91bGQgYmUgMSBjZWxsKVxuIiwgKHByb3BuYW1lKSwgKG5vZGUpLT5mdWxscGF0aCwgcHJvcC0+dmFsLmxlbik7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIENIRUNLX0hBVkVfV0FSTl9QSEFORExFKHhub2RlLCBwcm9wbmFtZSwgcm9vdCkgXAotCWRvIHsgXAotCQlzdHJ1Y3Qgbm9kZSAqcmVmOyBcCi0JCUNIRUNLX0hBVkVfV0FSTl9PTkVDRUxMKCh4bm9kZSksIChwcm9wbmFtZSkpOyBcCi0JCWlmIChwcm9wKSB7XAotCQkJY2VsbF90IHBoYW5kbGUgPSBwcm9wdmFsX2NlbGwocHJvcCk7IFwKLQkJCWlmICgocGhhbmRsZSA9PSAwKSB8fCAocGhhbmRsZSA9PSAtMSkpIHsgXAotCQkJCURPX0VSUigiXCIlc1wiIHByb3BlcnR5IGluICVzIGNvbnRhaW5zIGFuIGludmFsaWQgcGhhbmRsZSAleFxuIiwgKHByb3BuYW1lKSwgKHhub2RlKS0+ZnVsbHBhdGgsIHBoYW5kbGUpOyBcCi0JCQl9IGVsc2UgeyBcCi0JCQkJcmVmID0gZ2V0X25vZGVfYnlfcGhhbmRsZSgocm9vdCksIHByb3B2YWxfY2VsbChwcm9wKSk7IFwKLQkJCQlpZiAoISByZWYpIFwKLQkJCQkJRE9fRVJSKCJcIiVzXCIgcHJvcGVydHkgaW4gJXMgcmVmZXJzIHRvIG5vbi1leGlzdGFudCBwaGFuZGxlICV4XG4iLCAocHJvcG5hbWUpLCAoeG5vZGUpLT5mdWxscGF0aCwgcHJvcHZhbF9jZWxsKHByb3ApKTsgXAotCQkJfSBcCi0JCX0gXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQ0hFQ0tfSEFWRV9XQVJOX1NUUklORyhub2RlLCBwcm9wbmFtZSkgXAotCWRvIHsgXAotCQlDSEVDS19IQVZFX1dBUk4oKG5vZGUpLCAocHJvcG5hbWUpKTsgXAotCQlpZiAocHJvcCAmJiAhZGF0YV9pc19vbmVfc3RyaW5nKHByb3AtPnZhbCkpIFwKLQkJCURPX0VSUigiXCIlc1wiIHByb3BlcnR5IGluICVzIGlzIG5vdCBhIHN0cmluZ1xuIiwgXAotCQkJCShwcm9wbmFtZSksIChub2RlKS0+ZnVsbHBhdGgpOyBcCi0JfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCBjaGVja19yb290KHN0cnVjdCBub2RlICpyb290KQotewotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlpbnQgb2sgPSAxOwotCi0JQ0hFQ0tfSEFWRV9TVFJJTkcocm9vdCwgIm1vZGVsIik7Ci0JQ0hFQ0tfSEFWRV9XQVJOKHJvb3QsICJjb21wYXRpYmxlIik7Ci0KLQlyZXR1cm4gb2s7Ci19Ci0KLXN0YXRpYyBpbnQgY2hlY2tfY3B1cyhzdHJ1Y3Qgbm9kZSAqcm9vdCwgaW50IG91dHZlcnNpb24sIGludCBib290X2NwdWlkX3BoeXMpCi17Ci0Jc3RydWN0IG5vZGUgKmNwdXMsICpjcHU7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCXN0cnVjdCBub2RlICpib290Y3B1ID0gTlVMTDsKLQlpbnQgb2sgPSAxOwotCi0JY3B1cyA9IGdldF9zdWJub2RlKHJvb3QsICJjcHVzIik7Ci0JaWYgKCEgY3B1cykgewotCQlFUlJNU0coIk1pc3NpbmcgL2NwdXMgbm9kZVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjcHVzLT5hZGRyX2NlbGxzICE9IDEpCi0JCURPX0VSUigiJXMgaGFzIGJhZCAjYWRkcmVzcy1jZWxscyB2YWx1ZSAlZCAoc2hvdWxkIGJlIDEpXG4iLAotCQkgICAgICAgY3B1cy0+ZnVsbHBhdGgsIGNwdXMtPmFkZHJfY2VsbHMpOwotCWlmIChjcHVzLT5zaXplX2NlbGxzICE9IDApCi0JCURPX0VSUigiJXMgaGFzIGJhZCAjc2l6ZS1jZWxscyB2YWx1ZSAlZCAoc2hvdWxkIGJlIDApXG4iLAotCQkgICAgICAgY3B1cy0+ZnVsbHBhdGgsIGNwdXMtPnNpemVfY2VsbHMpOwotCi0JZm9yX2VhY2hfY2hpbGQoY3B1cywgY3B1KSB7Ci0JCUNIRUNLX0hBVkVfU1RSRVEoY3B1LCAiZGV2aWNlX3R5cGUiLCAiY3B1Iik7Ci0KLQkJQ0hFQ0tfSEFWRV9PTkVDRUxMKGNwdSwgInJlZyIpOwotCQlpZiAocHJvcCkgewotCQkJY2VsbF90IHVuaXRudW07Ci0JCQljaGFyICplcHRyOwotCi0JCQl1bml0bnVtID0gc3RydG9sKGdldF91bml0bmFtZShjcHUpLCAmZXB0ciwgMTYpOwotCQkJaWYgKCplcHRyKSB7Ci0JCQkJV0FSTk1TRygiJXMgaGFzIGJhZCBmb3JtYXQgdW5pdCBuYW1lICVzIChzaG91bGQgYmUgQ1BVIG51bWJlclxuIiwKLQkJCQkJY3B1LT5mdWxscGF0aCwgZ2V0X3VuaXRuYW1lKGNwdSkpOwotCQkJfSBlbHNlIGlmICh1bml0bnVtICE9IHByb3B2YWxfY2VsbChwcm9wKSkgewotCQkJCVdBUk5NU0coIiVzIHVuaXQgbmFtZSBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggXCJyZWdcIiBwcm9wZXJ0eSA8JXg+XG4iLAotCQkJCSAgICAgICBjcHUtPmZ1bGxwYXRoLCBnZXRfdW5pdG5hbWUoY3B1KSwKLQkJCQkgICAgICAgcHJvcHZhbF9jZWxsKHByb3ApKTsKLQkJCX0KLQkJfQotCi0vKiAJCUNIRUNLX0hBVkVfT05FQ0VMTChjcHUsICJkLWNhY2hlLWxpbmUtc2l6ZSIpOyAqLwotLyogCQlDSEVDS19IQVZFX09ORUNFTEwoY3B1LCAiaS1jYWNoZS1saW5lLXNpemUiKTsgKi8KLQkJQ0hFQ0tfSEFWRV9PTkVDRUxMKGNwdSwgImQtY2FjaGUtc2l6ZSIpOwotCQlDSEVDS19IQVZFX09ORUNFTEwoY3B1LCAiaS1jYWNoZS1zaXplIik7Ci0KLQkJQ0hFQ0tfSEFWRV9XQVJOX09ORUNFTEwoY3B1LCAiY2xvY2stZnJlcXVlbmN5Iik7Ci0JCUNIRUNLX0hBVkVfV0FSTl9PTkVDRUxMKGNwdSwgInRpbWViYXNlLWZyZXF1ZW5jeSIpOwotCi0JCXByb3AgPSBnZXRfcHJvcGVydHkoY3B1LCAibGludXgsYm9vdC1jcHUiKTsKLQkJaWYgKHByb3ApIHsKLQkJCWlmIChwcm9wLT52YWwubGVuKQotCQkJCVdBUk5NU0coIlwibGludXgsYm9vdC1jcHVcIiBwcm9wZXJ0eSBpbiAlcyBpcyBub24tZW1wdHlcbiIsCi0JCQkJCWNwdS0+ZnVsbHBhdGgpOwotCQkJaWYgKGJvb3RjcHUpCi0JCQkJRE9fRVJSKCJNdWx0aXBsZSBib290IGNwdXMgKCVzIGFuZCAlcylcbiIsCi0JCQkJICAgICAgIGJvb3RjcHUtPmZ1bGxwYXRoLCBjcHUtPmZ1bGxwYXRoKTsKLQkJCWVsc2UKLQkJCQlib290Y3B1ID0gY3B1OwotCQl9Ci0JfQotCi0JaWYgKG91dHZlcnNpb24gPCAyKSB7Ci0JCWlmICghIGJvb3RjcHUpCi0JCQlXQVJOTVNHKCJObyBjcHUgaGFzIFwibGludXgsYm9vdC1jcHVcIiBwcm9wZXJ0eVxuIik7Ci0JfSBlbHNlIHsKLQkJaWYgKGJvb3RjcHUpCi0JCQlXQVJOTVNHKCJcImxpbnV4LGJvb3QtY3B1XCIgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBpbiBibG9iIHZlcnNpb24gMiBvciBoaWdoZXJcbiIpOwotCQlpZiAoYm9vdF9jcHVpZF9waHlzID09IDB4ZmVlZGJlZWYpCi0JCQlXQVJOTVNHKCJwaHlzaWNhbCBib290IENQVSBub3Qgc2V0LiAgVXNlIC1iIG9wdGlvbiB0byBzZXRcbiIpOwotCX0KLQotCXJldHVybiBvazsKLX0KLQotc3RhdGljIGludCBjaGVja19tZW1vcnkoc3RydWN0IG5vZGUgKnJvb3QpCi17Ci0Jc3RydWN0IG5vZGUgKm1lbTsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0JaW50IG5ub2RlcyA9IDA7Ci0JaW50IG9rID0gMTsKLQotCWZvcl9lYWNoX2NoaWxkKHJvb3QsIG1lbSkgewotCQlpZiAoISBzdHJuZXEobWVtLT5uYW1lLCAibWVtb3J5IiwgbWVtLT5iYXNlbmFtZWxlbikpCi0JCQljb250aW51ZTsKLQotCQlubm9kZXMrKzsKLQotCQlDSEVDS19IQVZFX1NUUkVRKG1lbSwgImRldmljZV90eXBlIiwgIm1lbW9yeSIpOwotCQlDSEVDS19IQVZFKG1lbSwgInJlZyIpOwotCX0KLQotCWlmIChubm9kZXMgPT0gMCkgewotCQlFUlJNU0coIk5vIG1lbW9yeSBub2Rlc1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiBvazsKLX0KLQotaW50IGNoZWNrX3NlbWFudGljcyhzdHJ1Y3Qgbm9kZSAqZHQsIGludCBvdXR2ZXJzaW9uLCBpbnQgYm9vdF9jcHVpZF9waHlzKQotewotCWludCBvayA9IDE7Ci0KLQlvayA9IG9rICYmIGNoZWNrX3Jvb3QoZHQpOwotCW9rID0gb2sgJiYgY2hlY2tfY3B1cyhkdCwgb3V0dmVyc2lvbiwgYm9vdF9jcHVpZF9waHlzKTsKLQlvayA9IG9rICYmIGNoZWNrX21lbW9yeShkdCk7Ci0JaWYgKCEgb2spCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2RhdGEuYyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZGF0YS5jCmluZGV4IGE5NDcxOGMuLmRkMmUzZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZGF0YS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZGF0YS5jCkBAIC0zMiw4ICszMiw2IEBACiAJCW0gPSBubTsKIAl9CiAKLQlhc3NlcnQoIWQudmFsIHx8IGQuYXNpemUpOwotCiAJaWYgKGQudmFsKQogCQlmcmVlKGQudmFsKTsKIH0KQEAgLTQzLDkgKzQxLDYgQEAKIAlzdHJ1Y3QgZGF0YSBuZDsKIAlpbnQgbmV3c2l6ZTsKIAotCS8qIHdlIG11c3Qgc3RhcnQgd2l0aCBhbiBhbGxvY2F0ZWQgZGF0dW0gKi8KLQlhc3NlcnQoIWQudmFsIHx8IGQuYXNpemUpOwotCiAJaWYgKHhsZW4gPT0gMCkKIAkJcmV0dXJuIGQ7CiAKQEAgLTU2LDExICs1MSw4IEBACiAJd2hpbGUgKChkLmxlbiArIHhsZW4pID4gbmV3c2l6ZSkKIAkJbmV3c2l6ZSAqPSAyOwogCi0JbmQuYXNpemUgPSBuZXdzaXplOwogCW5kLnZhbCA9IHhyZWFsbG9jKGQudmFsLCBuZXdzaXplKTsKIAotCWFzc2VydChuZC5hc2l6ZSA+PSAoZC5sZW4gKyB4bGVuKSk7Ci0KIAlyZXR1cm4gbmQ7CiB9CiAKQEAgLTgzLDE2ICs3NSwxMSBAQAogCWxvbmcgdmFsOwogCiAJeFszXSA9ICdcMCc7Ci0JeFswXSA9IHNbKCppKV07Ci0JaWYgKHhbMF0pIHsKLQkJeFsxXSA9IHNbKCppKSsxXTsKLQkJaWYgKHhbMV0pCi0JCQl4WzJdID0gc1soKmkpKzJdOwotCX0KKwlzdHJuY3B5KHgsIHMgKyAqaSwgMyk7CiAKIAl2YWwgPSBzdHJ0b2woeCwgJmVuZHgsIDgpOwotCWlmICgoZW5keCAtIHgpID09IDApCi0JCWZwcmludGYoc3RkZXJyLCAiRW1wdHkgXFxubm4gZXNjYXBlXG4iKTsKKworCWFzc2VydChlbmR4ID4geCk7CiAKIAkoKmkpICs9IGVuZHggLSB4OwogCXJldHVybiB2YWw7CkBAIC0xMDUsMTMgKzkyLDExIEBACiAJbG9uZyB2YWw7CiAKIAl4WzJdID0gJ1wwJzsKLQl4WzBdID0gc1soKmkpXTsKLQlpZiAoeFswXSkKLQkJeFsxXSA9IHNbKCppKSsxXTsKKwlzdHJuY3B5KHgsIHMgKyAqaSwgMik7CiAKIAl2YWwgPSBzdHJ0b2woeCwgJmVuZHgsIDE2KTsKLQlpZiAoKGVuZHggLSB4KSA9PSAwKQotCQlmcHJpbnRmKHN0ZGVyciwgIkVtcHR5IFxceCBlc2NhcGVcbiIpOworCWlmICghKGVuZHggID4geCkpCisJCWRpZSgiXFx4IHVzZWQgd2l0aCBubyBmb2xsb3dpbmcgaGV4IGRpZ2l0c1xuIik7CiAKIAkoKmkpICs9IGVuZHggLSB4OwogCXJldHVybiB2YWw7CkBAIC0xODIsMTQgKzE2NywyOSBAQAogCXJldHVybiBkOwogfQogCi1zdHJ1Y3QgZGF0YSBkYXRhX2NvcHlfZmlsZShGSUxFICpmLCBzaXplX3QgbGVuKQorc3RydWN0IGRhdGEgZGF0YV9jb3B5X2ZpbGUoRklMRSAqZiwgc2l6ZV90IG1heGxlbikKIHsKLQlzdHJ1Y3QgZGF0YSBkOworCXN0cnVjdCBkYXRhIGQgPSBlbXB0eV9kYXRhOwogCi0JZCA9IGRhdGFfZ3Jvd19mb3IoZW1wdHlfZGF0YSwgbGVuKTsKKwl3aGlsZSAoIWZlb2YoZikgJiYgKGQubGVuIDwgbWF4bGVuKSkgeworCQlzaXplX3QgY2h1bmtzaXplLCByZXQ7CiAKLQlkLmxlbiA9IGxlbjsKLQlmcmVhZChkLnZhbCwgbGVuLCAxLCBmKTsKKwkJaWYgKG1heGxlbiA9PSAtMSkKKwkJCWNodW5rc2l6ZSA9IDQwOTY7CisJCWVsc2UKKwkJCWNodW5rc2l6ZSA9IG1heGxlbiAtIGQubGVuOworCisJCWQgPSBkYXRhX2dyb3dfZm9yKGQsIGNodW5rc2l6ZSk7CisJCXJldCA9IGZyZWFkKGQudmFsICsgZC5sZW4sIDEsIGNodW5rc2l6ZSwgZik7CisKKwkJaWYgKGZlcnJvcihmKSkKKwkJCWRpZSgiRXJyb3IgcmVhZGluZyBmaWxlIGludG8gZGF0YTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCisJCWlmIChkLmxlbiArIHJldCA8IGQubGVuKQorCQkJZGllKCJPdmVyZmxvdyByZWFkaW5nIGZpbGUgaW50byBkYXRhXG4iKTsKKworCQlkLmxlbiArPSByZXQ7CisJfQogCiAJcmV0dXJuIGQ7CiB9CkBAIC0yNDcsNyArMjQ3LDcgQEAKIAogc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfY2VsbChzdHJ1Y3QgZGF0YSBkLCBjZWxsX3Qgd29yZCkKIHsKLQljZWxsX3QgYmV3b3JkID0gY3B1X3RvX2JlMzIod29yZCk7CisJY2VsbF90IGJld29yZCA9IGNwdV90b19mZHQzMih3b3JkKTsKIAogCXJldHVybiBkYXRhX2FwcGVuZF9kYXRhKGQsICZiZXdvcmQsIHNpemVvZihiZXdvcmQpKTsKIH0KQEAgLTI1NiwxNSArMjU2LDE1IEBACiB7CiAJc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5IGJlcmU7CiAKLQliZXJlLmFkZHJlc3MgPSBjcHVfdG9fYmU2NChyZS0+YWRkcmVzcyk7Ci0JYmVyZS5zaXplID0gY3B1X3RvX2JlNjQocmUtPnNpemUpOworCWJlcmUuYWRkcmVzcyA9IGNwdV90b19mZHQ2NChyZS0+YWRkcmVzcyk7CisJYmVyZS5zaXplID0gY3B1X3RvX2ZkdDY0KHJlLT5zaXplKTsKIAogCXJldHVybiBkYXRhX2FwcGVuZF9kYXRhKGQsICZiZXJlLCBzaXplb2YoYmVyZSkpOwogfQogCi1zdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9hZGRyKHN0cnVjdCBkYXRhIGQsIHU2NCBhZGRyKQorc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfYWRkcihzdHJ1Y3QgZGF0YSBkLCB1aW50NjRfdCBhZGRyKQogewotCXU2NCBiZWFkZHIgPSBjcHVfdG9fYmU2NChhZGRyKTsKKwl1aW50NjRfdCBiZWFkZHIgPSBjcHVfdG9fZmR0NjQoYWRkcik7CiAKIAlyZXR1cm4gZGF0YV9hcHBlbmRfZGF0YShkLCAmYmVhZGRyLCBzaXplb2YoYmVhZGRyKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1sZXhlci5sIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtbGV4ZXIubAppbmRleCBjODExYjIyLi40NGRiZmQzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1sZXhlci5sCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLWxleGVyLmwKQEAgLTI4LDYgKzI4LDEwIEBACiBQUk9QTk9ERUNIQVIJW2EtekEtWjAtOSwuXysqIz9ALV0KIFBBVEhDSEFSCSh7UFJPUE5PREVDSEFSfXxbL10pCiBMQUJFTAkJW2EtekEtWl9dW2EtekEtWjAtOV9dKgorU1RSSU5HCQlcIihbXlxcIl18XFwuKSpcIgorV1MJCVtbOnNwYWNlOl1dCitDT01NRU5UCQkiLyoiKFteKl18XCorW14qL10pKlwqKyIvIgorTElORUNPTU1FTlQJIi8vIi4qXG4KIAogJXsKICNpbmNsdWRlICJkdGMuaCIKQEAgLTUyLDI5ICs1NiwyNiBAQAogCQkJCURQUklOVCgiPFYxPlxuIik7IFwKIAkJCQlCRUdJTihWMSk7IFwKIAkJCX0KKworc3RhdGljIHZvaWQgcHVzaF9pbnB1dF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3N0YXRpYyBpbnQgcG9wX2lucHV0X2ZpbGUodm9pZCk7CiAlfQogCiAlJQotPCo+Ii9pbmNsdWRlLyIJCUJFR0lOKElOQ0xVREUpOwotCi08SU5DTFVERT5cIlteIlxuXSpcIgl7Ci0JCQl5eXRleHRbc3RybGVuKHl5dGV4dCkgLSAxXSA9IDA7Ci0JCQlpZiAoIXB1c2hfaW5wdXRfZmlsZSh5eXRleHQgKyAxKSkgewotCQkJCS8qIFNvbWUgdW5yZWNvdmVyYWJsZSBlcnJvci4qLwotCQkJCWV4aXQoMSk7Ci0JCQl9Ci0JCQlCRUdJTl9ERUZBVUxUKCk7Cis8Kj4iL2luY2x1ZGUvIntXU30qe1NUUklOR30geworCQkJY2hhciAqbmFtZSA9IHN0cmNocih5eXRleHQsICdcIicpICsgMTsKKwkJCXl5dGV4dFt5eWxlbmctMV0gPSAnXDAnOworCQkJcHVzaF9pbnB1dF9maWxlKG5hbWUpOwogCQl9CiAKLQogPCo+PDxFT0Y+PgkJewogCQkJaWYgKCFwb3BfaW5wdXRfZmlsZSgpKSB7CiAJCQkJeXl0ZXJtaW5hdGUoKTsKIAkJCX0KIAkJfQogCi08Kj5cIihbXlxcIl18XFwuKSpcIgl7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworPCo+e1NUUklOR30JeworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIlN0cmluZzogJXNcbiIsIHl5dGV4dCk7CiAJCQl5eWx2YWwuZGF0YSA9IGRhdGFfY29weV9lc2NhcGVfc3RyaW5nKHl5dGV4dCsxLApAQCAtODQsNyArODUsNyBAQAogCQl9CiAKIDwqPiIvZHRzLXYxLyIJewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJLZXl3b3JkOiAvZHRzLXYxL1xuIik7CiAJCQlkdHNfdmVyc2lvbiA9IDE7CkBAIC05Myw3ICs5NCw3IEBACiAJCX0KIAogPCo+Ii9tZW1yZXNlcnZlLyIJewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJLZXl3b3JkOiAvbWVtcmVzZXJ2ZS9cbiIpOwogCQkJQkVHSU5fREVGQVVMVCgpOwpAQCAtMTAxLDcgKzEwMiw3IEBACiAJCX0KIAogPCo+e0xBQkVMfToJewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJMYWJlbDogJXNcbiIsIHl5dGV4dCk7CiAJCQl5eWx2YWwubGFiZWxyZWYgPSBzdHJkdXAoeXl0ZXh0KTsKQEAgLTExMCw3ICsxMTEsNyBAQAogCQl9CiAKIDxJTklUSUFMPltib2RoXSMgewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJaWYgKCp5eXRleHQgPT0gJ2InKQogCQkJCXl5bHZhbC5jYmFzZSA9IDI7CkBAIC0xMjUsNyArMTI2LDcgQEAKIAkJfQogCiA8SU5JVElBTD5bMC05YS1mQS1GXSsJewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJeXlsdmFsLmxpdGVyYWwgPSBzdHJkdXAoeXl0ZXh0KTsKIAkJCURQUklOVCgiTGl0ZXJhbDogJyVzJ1xuIiwgeXlsdmFsLmxpdGVyYWwpOwpAQCAtMTMzLDcgKzEzNCw3IEBACiAJCX0KIAogPFYxPlswLTldK3wwW3hYXVswLTlhLWZBLUZdKyAgICAgIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCXl5bHZhbC5saXRlcmFsID0gc3RyZHVwKHl5dGV4dCk7CiAJCQlEUFJJTlQoIkxpdGVyYWw6ICclcydcbiIsIHl5bHZhbC5saXRlcmFsKTsKQEAgLTE0MSw3ICsxNDIsNyBAQAogCQl9CiAKIFwme0xBQkVMfQl7CS8qIGxhYmVsIHJlZmVyZW5jZSAqLwotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJSZWY6ICVzXG4iLCB5eXRleHQrMSk7CiAJCQl5eWx2YWwubGFiZWxyZWYgPSBzdHJkdXAoeXl0ZXh0KzEpOwpAQCAtMTQ5LDcgKzE1MCw3IEBACiAJCX0KIAogIiZ7LyJ7UEFUSENIQVJ9K1x9CXsJLyogbmV3LXN0eWxlIHBhdGggcmVmZXJlbmNlICovCi0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQl5eXRleHRbeXlsZW5nLTFdID0gJ1wwJzsKIAkJCURQUklOVCgiUmVmOiAlc1xuIiwgeXl0ZXh0KzIpOwpAQCAtMTU4LDcgKzE1OSw3IEBACiAJCX0KIAogPElOSVRJQUw+IiYvIntQQVRIQ0hBUn0rIHsJLyogb2xkLXN0eWxlIHBhdGggcmVmZXJlbmNlICovCi0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIlJlZjogJXNcbiIsIHl5dGV4dCsxKTsKIAkJCXl5bHZhbC5sYWJlbHJlZiA9IHN0cmR1cCh5eXRleHQrMSk7CkBAIC0xNjYsNyArMTY3LDcgQEAKIAkJfQogCiA8QllURVNUUklORz5bMC05YS1mQS1GXXsyfSB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQl5eWx2YWwuYnl0ZSA9IHN0cnRvbCh5eXRleHQsIE5VTEwsIDE2KTsKIAkJCURQUklOVCgiQnl0ZTogJTAyeFxuIiwgKGludCl5eWx2YWwuYnl0ZSk7CkBAIC0xNzQsNyArMTc1LDcgQEAKIAkJfQogCiA8QllURVNUUklORz4iXSIJewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCIvQllURVNUUklOR1xuIik7CiAJCQlCRUdJTl9ERUZBVUxUKCk7CkBAIC0xODIsNyArMTgzLDcgQEAKIAkJfQogCiA8UFJPUE5PREVOQU1FPntQUk9QTk9ERUNIQVJ9KyB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIlByb3BOb2RlTmFtZTogJXNcbiIsIHl5dGV4dCk7CiAJCQl5eWx2YWwucHJvcG5vZGVuYW1lID0gc3RyZHVwKHl5dGV4dCk7CkBAIC0xOTAsMjAgKzE5MSwxOSBAQAogCQkJcmV0dXJuIERUX1BST1BOT0RFTkFNRTsKIAkJfQogCi0KLTwqPltbOnNwYWNlOl1dKwkvKiBlYXQgd2hpdGVzcGFjZSAqLwotCi08Kj4iLyoiKFteKl18XCorW14qL10pKlwqKyIvIgl7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworIi9pbmNiaW4vIgl7CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKLQkJCURQUklOVCgiQ29tbWVudDogJXNcbiIsIHl5dGV4dCk7Ci0JCQkvKiBlYXQgY29tbWVudHMgKi8KKwkJCURQUklOVCgiQmluYXJ5IEluY2x1ZGVcbiIpOworCQkJcmV0dXJuIERUX0lOQ0JJTjsKIAkJfQogCi08Kj4iLy8iLipcbgkvKiBlYXQgbGluZSBjb21tZW50cyAqLworPCo+e1dTfSsJLyogZWF0IHdoaXRlc3BhY2UgKi8KKzwqPntDT01NRU5UfSsJLyogZWF0IEMtc3R5bGUgY29tbWVudHMgKi8KKzwqPntMSU5FQ09NTUVOVH0rIC8qIGVhdCBDKystc3R5bGUgY29tbWVudHMgKi8KIAogPCo+LgkJewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJDaGFyOiAlYyAoXFx4JTAyeClcbiIsIHl5dGV4dFswXSwKIAkJCQkodW5zaWduZWQpeXl0ZXh0WzBdKTsKQEAgLTIyNywxNCArMjI3LDEzIEBACiAgKi8KIAogc3RydWN0IGluY2xfZmlsZSB7Ci0JaW50IGZpbGVudW07Ci0JRklMRSAqZmlsZTsKKwlzdHJ1Y3QgZHRjX2ZpbGUgKmZpbGU7CiAJWVlfQlVGRkVSX1NUQVRFIHl5X3ByZXZfYnVmOwogCWludCB5eV9wcmV2X2xpbmVubzsKIAlzdHJ1Y3QgaW5jbF9maWxlICpwcmV2OwogfTsKIAotc3RydWN0IGluY2xfZmlsZSAqaW5jbF9maWxlX3N0YWNrOworc3RhdGljIHN0cnVjdCBpbmNsX2ZpbGUgKmluY2xfZmlsZV9zdGFjazsKIAogCiAvKgpAQCAtMjQ1LDM2ICsyNDQsMzQgQEAKIHN0YXRpYyBpbnQgaW5jbF9kZXB0aCA9IDA7CiAKIAotaW50IHB1c2hfaW5wdXRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3N0YXRpYyB2b2lkIHB1c2hfaW5wdXRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKLQlGSUxFICpmOwogCXN0cnVjdCBpbmNsX2ZpbGUgKmluY2xfZmlsZTsKKwlzdHJ1Y3QgZHRjX2ZpbGUgKm5ld2ZpbGU7CisJc3RydWN0IHNlYXJjaF9wYXRoIHNlYXJjaCwgKnNlYXJjaHB0ciA9IE5VTEw7CiAKLQlpZiAoIWZpbGVuYW1lKSB7Ci0JCXl5ZXJyb3IoIk5vIGluY2x1ZGUgZmlsZSBuYW1lIGdpdmVuLiIpOwotCQlyZXR1cm4gMDsKKwlhc3NlcnQoZmlsZW5hbWUpOworCisJaWYgKGluY2xfZGVwdGgrKyA+PSBNQVhfSU5DTFVERV9ERVBUSCkKKwkJZGllKCJJbmNsdWRlcyBuZXN0ZWQgdG9vIGRlZXBseSIpOworCisJaWYgKHNyY3Bvc19maWxlKSB7CisJCXNlYXJjaC5kaXIgPSBzcmNwb3NfZmlsZS0+ZGlyOworCQlzZWFyY2gubmV4dCA9IE5VTEw7CisJCXNlYXJjaC5wcmV2ID0gTlVMTDsKKwkJc2VhcmNocHRyID0gJnNlYXJjaDsKIAl9CiAKLQlpZiAoaW5jbF9kZXB0aCsrID49IE1BWF9JTkNMVURFX0RFUFRIKSB7Ci0JCXl5ZXJyb3IoIkluY2x1ZGVzIG5lc3RlZCB0b28gZGVlcGx5Iik7Ci0JCXJldHVybiAwOwotCX0KKwluZXdmaWxlID0gZHRjX29wZW5fZmlsZShmaWxlbmFtZSwgc2VhcmNocHRyKTsKIAotCWYgPSBkdGNfb3Blbl9maWxlKGZpbGVuYW1lKTsKLQotCWluY2xfZmlsZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGluY2xfZmlsZSkpOwotCWlmICghaW5jbF9maWxlKSB7Ci0JCXl5ZXJyb3IoIkNhbiBub3QgYWxsb2NhdGUgaW5jbHVkZSBmaWxlIHNwYWNlLiIpOwotCQlyZXR1cm4gMDsKLQl9CisJaW5jbF9maWxlID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGluY2xfZmlsZSkpOwogCiAJLyoKIAkgKiBTYXZlIGN1cnJlbnQgY29udGV4dC4KIAkgKi8KIAlpbmNsX2ZpbGUtPnl5X3ByZXZfYnVmID0gWVlfQ1VSUkVOVF9CVUZGRVI7CiAJaW5jbF9maWxlLT55eV9wcmV2X2xpbmVubyA9IHl5bGluZW5vOwotCWluY2xfZmlsZS0+ZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOwotCWluY2xfZmlsZS0+ZmlsZSA9IHl5aW47CisJaW5jbF9maWxlLT5maWxlID0gc3JjcG9zX2ZpbGU7CiAJaW5jbF9maWxlLT5wcmV2ID0gaW5jbF9maWxlX3N0YWNrOwogCiAJaW5jbF9maWxlX3N0YWNrID0gaW5jbF9maWxlOwpAQCAtMjgyLDIzICsyNzksMjEgQEAKIAkvKgogCSAqIEVzdGFibGlzaCBuZXcgY29udGV4dC4KIAkgKi8KLQlzcmNwb3NfZmlsZW51bSA9IGxvb2t1cF9maWxlX25hbWUoZmlsZW5hbWUsIDApOworCXNyY3Bvc19maWxlID0gbmV3ZmlsZTsKIAl5eWxpbmVubyA9IDE7Ci0JeXlpbiA9IGY7CisJeXlpbiA9IG5ld2ZpbGUtPmZpbGU7CiAJeXlfc3dpdGNoX3RvX2J1ZmZlcih5eV9jcmVhdGVfYnVmZmVyKHl5aW4sIFlZX0JVRl9TSVpFKSk7Ci0KLQlyZXR1cm4gMTsKIH0KIAogCi1pbnQgcG9wX2lucHV0X2ZpbGUodm9pZCkKK3N0YXRpYyBpbnQgcG9wX2lucHV0X2ZpbGUodm9pZCkKIHsKIAlzdHJ1Y3QgaW5jbF9maWxlICppbmNsX2ZpbGU7CiAKIAlpZiAoaW5jbF9maWxlX3N0YWNrID09IDApCiAJCXJldHVybiAwOwogCi0JZmNsb3NlKHl5aW4pOworCWR0Y19jbG9zZV9maWxlKHNyY3Bvc19maWxlKTsKIAogCS8qCiAJICogUG9wLgpAQCAtMzEzLDE2ICszMDgsMTMgQEAKIAl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSKTsKIAl5eV9zd2l0Y2hfdG9fYnVmZmVyKGluY2xfZmlsZS0+eXlfcHJldl9idWYpOwogCXl5bGluZW5vID0gaW5jbF9maWxlLT55eV9wcmV2X2xpbmVubzsKLQlzcmNwb3NfZmlsZW51bSA9IGluY2xfZmlsZS0+ZmlsZW51bTsKLQl5eWluID0gaW5jbF9maWxlLT5maWxlOworCXNyY3Bvc19maWxlID0gaW5jbF9maWxlLT5maWxlOworCXl5aW4gPSBpbmNsX2ZpbGUtPmZpbGUgPyBpbmNsX2ZpbGUtPmZpbGUtPmZpbGUgOiBOVUxMOwogCiAJLyoKIAkgKiBGcmVlIG9sZCBzdGF0ZS4KIAkgKi8KIAlmcmVlKGluY2xfZmlsZSk7CiAKLQlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLWxleGVyLmxleC5jX3NoaXBwZWQgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1sZXhlci5sZXguY19zaGlwcGVkCmluZGV4IGQwZjc0MjQuLmFjMzkyY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLWxleGVyLmxleC5jX3NoaXBwZWQKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtbGV4ZXIubGV4LmNfc2hpcHBlZApAQCAtOSw3ICs5LDcgQEAKICNkZWZpbmUgRkxFWF9TQ0FOTkVSCiAjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCiAjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1Ci0jZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzMworI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzQKICNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCiAjZGVmaW5lIEZMRVhfQkVUQQogI2VuZGlmCkBAIC0zMSw3ICszMSw3IEBACiAKIC8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCiAKLSNpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKIAogLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKICAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIApAQCAtOTQsMTEgKzk0LDEyIEBACiAKICNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KIAotI2lmIF9fU1REQ19fCisvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAxLiAqLworI2lmIGRlZmluZWQgKF9fU1REQ19fKQogCiAjZGVmaW5lIFlZX1VTRV9DT05TVAogCi0jZW5kaWYJLyogX19TVERDX18gKi8KKyNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KICNlbmRpZgkvKiAhIF9fY3BsdXNwbHVzICovCiAKICNpZmRlZiBZWV9VU0VfQ09OU1QKQEAgLTE5NCwxMSArMTk1LDEzIEBACiAvKiBUaGUgZm9sbG93aW5nIGlzIGJlY2F1c2Ugd2UgY2Fubm90IHBvcnRhYmx5IGdldCBvdXIgaGFuZHMgb24gc2l6ZV90CiAgKiAod2l0aG91dCBhdXRvY29uZidzIGhlbHAsIHdoaWNoIGlzbid0IGF2YWlsYWJsZSBiZWNhdXNlIHdlIHdhbnQKICAqIGZsZXgtZ2VuZXJhdGVkIHNjYW5uZXJzIHRvIGNvbXBpbGUgb24gdGhlaXIgb3duKS4KKyAqIEdpdmVuIHRoYXQgdGhlIHN0YW5kYXJkIGhhcyBkZWNyZWVkIHRoYXQgc2l6ZV90IGV4aXN0cyBzaW5jZSAxOTg5LAorICogSSBndWVzcyB3ZSBjYW4gYWZmb3JkIHRvIGRlcGVuZCBvbiBpdC4gTWFub2ouCiAgKi8KIAogI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAogI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiB1bnNpZ25lZCBpbnQgeXlfc2l6ZV90OwordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwogI2VuZGlmCiAKICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQpAQCAtMzQ5LDcgKzM1Miw3IEBACiAKIC8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KIAotI2RlZmluZSB5eXdyYXAoKSAxCisjZGVmaW5lIHl5d3JhcChuKSAxCiAjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCiAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOwpAQCAtMzg5LDE5ICszOTIsMjAgQEAKIAlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OwogCWZsZXhfaW50MzJfdCB5eV9ueHQ7CiAJfTsKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbOTRdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbMTA0XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgMjEsICAgMTksICAgMTYsICAgMTYsICAgMTksICAgMTksICAgMTksICAgIDgsICAgIDgsICAgMTksCi0gICAgICAgIDgsICAgMTksICAgMTksICAgMTksICAgMTksICAgMTQsICAgMTUsICAgMTUsICAgMTksICAgIDksCi0gICAgICAgIDksICAgMTYsICAgIDAsICAgIDMsICAgIDAsICAgIDAsICAgMTAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDgsICAgIDgsICAgIDYsICAgIDAsICAgIDcsICAgIDAsICAgIDIsCi0gICAgICAgIDAsICAgMTMsICAgMTMsICAgMTUsICAgMTUsICAgIDksICAgIDAsICAgMTIsICAgMTAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgMTgsICAgIDAsICAgIDAsICAgIDAsICAgIDIsICAgIDksICAgIDAsCi0gICAgICAgMTcsICAgIDAsICAgIDAsICAgIDAsICAgMTEsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDQsICAgIDAsICAgIDAsICAgIDEsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDUsICAgIDAKKyAgICAgICAyMSwgICAxOSwgICAxNiwgICAxNiwgICAxOSwgICAxOSwgICAxOSwgICAgNywgICAgNywgICAxOSwKKyAgICAgICAgNywgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxMywgICAxNCwgICAxNCwgICAxOSwgICAgOCwKKyAgICAgICAgOCwgICAxNiwgICAgMCwgICAgMiwgICAgMCwgICAgMCwgICAgOSwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgNywgICAgNywgICAgNSwgICAgMCwgICAgNiwgICAgMCwgICAxMiwKKyAgICAgICAxMiwgICAxNCwgICAxNCwgICAgOCwgICAgMCwgICAxMSwgICAgOSwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAxOCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgOCwgICAgMCwgICAxNywgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMywgICAxNSwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMSwgICAgMCwKIAorICAgICAgICAwLCAgICA0LCAgICAwCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KQEAgLTQ0NCwxMjIgKzQ0OCwxMjYgQEAKICAgICAgICAgNywgICAgNywgICAgNywgICAgOCwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVsxMDddID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzExN10gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgIDMyLCAgICAwLCAgIDUzLCAgICAwLCAgIDc2LCAgICAwLCAgMTA4LCAgMTExLAotICAgICAgMjgwLCAgMjg4LCAgIDM3LCAgIDM5LCAgIDMzLCAgIDM2LCAgMTA2LCAgICAwLCAgMTIzLCAgMTQ2LAotICAgICAgMjU1LCAgMjUxLCAgIDQ1LCAgICAwLCAgMTU5LCAgMjg4LCAgICAwLCAgIDUzLCAgMTA4LCAgMTcyLAotICAgICAgMTE0LCAgMTI3LCAgMTU4LCAgMjg4LCAgMjQ1LCAgICAwLCAgICAwLCAgMjM0LCAgMjM1LCAgMjM2LAotICAgICAgMTk3LCAgMTk1LCAgMTk5LCAgICAwLCAgICAwLCAgMjg4LCAgICAwLCAgMjg4LCAgMTYwLCAgMjg4LAotICAgICAgMTgzLCAgMjg4LCAgICAwLCAgICAwLCAgMTgzLCAgMTgyLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgMjA0LCAgMTg5LCAgMjA3LCAgMjg4LCAgMTc5LCAgMTg3LCAgMTgwLCAgMTk0LCAgICAwLCAgMTcxLAotICAgICAgMjg4LCAgMTk2LCAgMTc4LCAgMTc0LCAgMjg4LCAgMTY5LCAgMTY5LCAgMTc3LCAgMTY1LCAgMTUzLAotICAgICAgMTQzLCAgMTU1LCAgMTM3LCAgMTE4LCAgMjg4LCAgMTIyLCAgIDQyLCAgMjg4LCAgIDM2LCAgIDM2LAotICAgICAgIDQwLCAgMjg4LCAgMjg4LCAgMjEyLCAgMjE4LCAgMjIzLCAgMjI5LCAgMjM0LCAgMjM5LCAgMjQ1LAorICAgICAgICAwLCAgICAwLCAgIDMwLCAgICAwLCAgIDQ0LCAgICAwLCAgIDY3LCAgICAwLCAgIDk3LCAgMTA1LAorICAgICAgMzAyLCAgMzAzLCAgIDM1LCAgIDQ0LCAgIDQwLCAgIDk0LCAgMTEyLCAgICAwLCAgMTI5LCAgMTUyLAorICAgICAgMjk2LCAgMjk1LCAgMTU5LCAgICAwLCAgMTc2LCAgMzAzLCAgICAwLCAgMTE2LCAgIDk1LCAgMTY1LAorICAgICAgIDQ5LCAgIDQ2LCAgMTAyLCAgMzAzLCAgMjk2LCAgICAwLCAgICAwLCAgMjg4LCAgMjkwLCAgMjkzLAorICAgICAgMjY0LCAgMjY2LCAgMjcwLCAgICAwLCAgICAwLCAgMzAzLCAgICAwLCAgMzAzLCAgMjY0LCAgMzAzLAorICAgICAgICAwLCAgICAwLCAgMTk1LCAgMTAxLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMjg0LCAgMTI1LAorICAgICAgMjc3LCAgMjY1LCAgMjI1LCAgMjMwLCAgMjE2LCAgMjE4LCAgICAwLCAgMjAyLCAgMjI0LCAgMjIxLAorICAgICAgMjE3LCAgMTA3LCAgMTk2LCAgMTg4LCAgMzAzLCAgMjA2LCAgMTc5LCAgMTg2LCAgMTc4LCAgMTg1LAorICAgICAgMTgzLCAgMTYyLCAgMTYxLCAgMTUwLCAgMTY5LCAgMTYwLCAgMTQ1LCAgMTI1LCAgMzAzLCAgMzAzLAorICAgICAgMTM3LCAgMTA5LCAgMTkwLCAgMTAzLCAgMjAzLCAgMTY3LCAgMTA4LCAgMTk3LCAgMzAzLCAgMTIzLAogCi0gICAgICAyNTEsICAyNTUsICAyNjIsICAyNzAsICAyNzUsICAyODAKKyAgICAgICAyOSwgIDMwMywgIDMwMywgIDIxNSwgIDIyMSwgIDIyNiwgIDIyOSwgIDIzNCwgIDI0MCwgIDI0NiwKKyAgICAgIDI1MCwgIDI1NywgIDI2NSwgIDI3MCwgIDI3NSwgIDI4MgogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzEwN10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsxMTddID0KICAgICB7ICAgMCwKLSAgICAgICA5MywgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNSwgICA5MywgICAgNywgICAgMywgICAgMywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5NCwgICA5NSwgICA5MywgICA5NiwgICA5MywgICAxOSwKLSAgICAgICAxOSwgICAyMCwgICA5NywgICA5OCwgICAyMCwgICA5MywgICA5OSwgIDEwMCwgICA5NSwgICA5MywKLSAgICAgICA5MywgICA5MywgICA5NCwgICA5MywgICA5NCwgIDEwMSwgIDEwMiwgICA5MywgIDEwMywgIDEwNCwKLSAgICAgICA5MywgICA5MywgICA5MywgICA5NiwgICAxOSwgICA5MywgICAyMCwgICA5MywgICA5NywgICA5MywKLSAgICAgICA5NywgICA5MywgICAyMCwgICA5OSwgIDEwMCwgICA5MywgIDEwNSwgIDEwMSwgIDEwMiwgIDEwNiwKLSAgICAgIDEwMywgIDEwMywgIDEwNCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5NCwgIDEwNSwgIDEwNiwKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICAgMCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAgIDEwMywgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNSwgIDEwMywgICAgNywgICAgMywgICAgMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwNCwgIDEwNSwgIDEwMywgIDEwNiwgIDEwMywgICAxOSwKKyAgICAgICAxOSwgICAyMCwgIDEwMywgIDEwNywgICAyMCwgIDEwMywgIDEwOCwgIDEwOSwgIDEwNSwgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwNCwgIDEwMywgIDEwNCwgIDExMCwgIDExMSwgIDEwMywgIDExMiwgIDExMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwNiwgICAxOSwgIDEwMywgICAyMCwgIDEwMywgIDEwMywgIDEwMywKKyAgICAgICAyMCwgIDEwOCwgIDEwOSwgIDEwMywgIDExNCwgIDExMCwgIDExMSwgIDExNSwgIDExMiwgIDExMiwKKyAgICAgIDExMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDExNCwgIDExNSwgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDExNiwgIDEwMywgIDExNiwgIDEwMywgIDExNiwKIAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzCisgICAgICAxMDMsICAxMDMsICAgIDAsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsCisgICAgICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFszMjRdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMzM5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTIsICAgMTYsICAgMTIsICAgMTIsICAgMTIsICAgMTcsCiAgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTIsICAgMTksICAgMjAsICAgMjAsICAgMTIsICAgMTIsICAgMjEsCiAgICAgICAgMTksICAgMjEsICAgMTksICAgMjIsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsCi0gICAgICAgMjAsICAgMjAsICAgMjAsICAgMTIsICAgMTIsICAgMjMsICAgMzQsICAgMTIsICAgMzIsICAgMzIsCi0gICAgICAgMzIsICAgMzIsICAgMTIsICAgMTIsICAgMTIsICAgMzYsICAgMjAsICAgMzMsICAgNTAsICAgOTIsCi0gICAgICAgMzUsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMTUsICAgNTQsICAgOTEsICAgNTQsCi0gICAgICAgNTQsICAgNTQsICAgNTEsICAgMjQsICAgMjQsICAgMjQsICAgNDYsICAgMjUsICAgOTAsICAgMzgsCi0gICAgICAgODksICAgMjYsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMTIsICAgMTMsICAgMTQsICAgMTUsCi0gICAgICAgMjcsICAgMTIsICAgMjcsICAgMjcsICAgMjcsICAgMTcsICAgMjcsICAgMjcsICAgMjcsICAgMTIsCi0gICAgICAgMjgsICAgMjgsICAgMjgsICAgMTIsICAgMTIsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsCisgICAgICAgMjAsICAgMjAsICAgMjAsICAgMTIsICAgMTIsICAgMTIsICAgMzIsICAgMzIsICAxMDIsICAgMjMsCisgICAgICAgMTIsICAgMTIsICAgMTIsICAgMzQsICAgMjAsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMjAsCisgICAgICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjQsICAgMjQsICAgMjQsICAgMzUsICAgMjUsICAgNTQsCisgICAgICAgNTQsICAgNTQsICAgMjYsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMTIsICAgMTMsICAgMTQsCisgICAgICAgMTUsICAgMjcsICAgMTIsICAgMjcsICAgMjcsICAgMjcsICAgMjMsICAgMjcsICAgMjcsICAgMjcsCisgICAgICAgMTIsICAgMjgsICAgMjgsICAgMjgsICAgMTIsICAgMTIsICAgMjgsICAgMjgsICAgMjgsICAgMjgsCisgICAgICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsCiAKLSAgICAgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAxMiwKLSAgICAgICAxMiwgICAxNSwgICAzOSwgICAyOSwgICAxNSwgICA0MCwgICAyOSwgICA5MywgICAzMCwgICAzMSwKLSAgICAgICAzMSwgICAzMCwgICAzMSwgICAzMSwgICA1NiwgICA1NiwgICA1NiwgICA0MSwgICAzMiwgICAzMiwKLSAgICAgICA0MiwgICA4OCwgICA0MywgICA0NSwgICA0NSwgICA0NSwgICA0NiwgICA0NSwgICA0NywgICA0NywKLSAgICAgICA4NywgICAzOCwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NywgICA0NywgICA0NywgICA0NywKLSAgICAgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA4NiwKLSAgICAgICA0NywgICAzNCwgICAzMywgICA1MCwgICA4NSwgICA0NywgICA0NywgICA0NywgICA0NywgICA1MywKLSAgICAgICA1MywgICA1MywgICA4NCwgICA1MywgICA4MywgICAzNSwgICA4MiwgICA1MSwgICA1MywgICA1MywKLSAgICAgICA1MywgICA1MywgICA1NiwgICA1NiwgICA1NiwgICA5MywgICA2OCwgICA1NCwgICA1NywgICA1NCwKLSAgICAgICA1NCwgICA1NCwgICA1NiwgICA1NiwgICA1NiwgICA2MiwgICA0NiwgICAzNCwgICA3MSwgICA4MSwKKyAgICAgICAxMiwgICAxMiwgICAyOSwgICAzNiwgIDEwMywgICAzNCwgICAxNywgICAzMCwgICAzMSwgICAzMSwKKyAgICAgICAyOSwgICA1NCwgICA1NCwgICA1NCwgICAxNywgICAzMCwgICAzMSwgICAzMSwgICAzOSwgICAzNSwKKyAgICAgICA1MiwgICA0MCwgICA1MiwgICA1MiwgICA1MiwgIDEwMywgICA3OCwgICAzOCwgICAzOCwgICA0NiwKKyAgICAgIDEwMSwgICA2MCwgICA3OSwgICA0MSwgICA2OSwgICA5NywgICA0MiwgICA5NCwgICA0MywgICA0NSwKKyAgICAgICA0NSwgICA0NSwgICA0NiwgICA0NSwgICA0NywgICA0NywgICA5MywgICA5MiwgICA0NSwgICA0NSwKKyAgICAgICA0NSwgICA0NSwgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywKKyAgICAgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICAzOSwgICA0NywgICA5MSwgICA0MCwgICA5MCwKKyAgICAgICA5OSwgICA0NywgICA0NywgICA0NywgICA0NywgICA1NCwgICA1NCwgICA1NCwgICA4OSwgICA4OCwKKyAgICAgICA0MSwgICA1NSwgICA4NywgICA0OSwgIDEwMCwgICA0MywgICA1MSwgICA1MSwgICA1MSwgICA4NiwKKyAgICAgICA1MSwgICA5NSwgICA5NSwgICA5NiwgICA4NSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MiwKIAotICAgICAgIDgwLCAgIDc5LCAgIDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDc0LCAgIDczLCAgIDcyLCAgIDY0LAotICAgICAgIDYyLCAgIDM1LCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLAotICAgICAgIDM3LCAgIDY3LCAgIDY2LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDQ0LCAgIDY1LCAgIDQ0LCAgIDQ5LAotICAgICAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDUyLCAgIDY0LCAgIDUyLAotICAgICAgIDU0LCAgIDYyLCAgIDU0LCAgIDYwLCAgIDU0LCAgIDU0LCAgIDU1LCAgIDkzLCAgIDU1LCAgIDU1LAotICAgICAgIDU1LCAgIDU1LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDQ4LCAgIDU4LCAgIDU4LCAgIDU5LCAgIDQ4LAotICAgICAgIDU5LCAgIDU5LCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLAotICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDY5LCAgIDkzLAotICAgICAgIDY5LCAgIDcwLCAgIDcwLCAgIDcwLCAgIDkzLCAgIDcwLCAgIDcwLCAgIDExLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDk5LCAgIDUyLCAgIDUyLCAgIDUyLCAgIDk1LCAgIDk1LCAgIDk2LCAgIDg0LCAgIDQ2LCAgIDgzLAorICAgICAgIDgyLCAgIDgxLCAgIDM5LCAgIDc5LCAgMTAwLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLAorICAgICAgIDMzLCAgIDMzLCAgIDMzLCAgIDM3LCAgIDgwLCAgIDc3LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDQ0LAorICAgICAgIDQwLCAgIDQ0LCAgIDUwLCAgIDc2LCAgIDUwLCAgIDUyLCAgIDc1LCAgIDUyLCAgIDc0LCAgIDUyLAorICAgICAgIDUyLCAgIDUzLCAgIDczLCAgIDUzLCAgIDUzLCAgIDUzLCAgIDUzLCAgIDU2LCAgIDU2LCAgIDU2LAorICAgICAgIDcyLCAgIDU2LCAgIDU2LCAgIDU3LCAgIDcxLCAgIDU3LCAgIDU3LCAgIDU5LCAgIDU5LCAgIDU5LAorICAgICAgIDU5LCAgIDU5LCAgIDU5LCAgIDU5LCAgIDU5LCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLAorICAgICAgIDYxLCAgIDYxLCAgIDYxLCAgIDY3LCAgIDcwLCAgIDY3LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDYyLAorICAgICAgIDY4LCAgIDY4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDYwLCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYwLCAgIDU4LCAgMTAzLCAgIDQ4LAogCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMKKyAgICAgICA0OCwgIDEwMywgICAxMSwgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMwogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzMyNF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1szMzldID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAxNSwgICAgMywgICAxMywgICAxMywKLSAgICAgICAxNCwgICAxNCwgICAgMywgICAgMywgICAgMywgICAxNiwgICAgMywgICAyMywgICAyMywgICA5MSwKLSAgICAgICAxNSwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgNSwgICAyOCwgICA5MCwgICAyOCwKLSAgICAgICAyOCwgICAyOCwgICAyMywgICAgNSwgICAgNSwgICAgNSwgICAyOCwgICAgNSwgICA4OSwgICAxNiwKLSAgICAgICA4NywgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNywgICAgNywgICAgNywgICAgNywKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAxMywgICAxMywgIDEwMSwgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAxNSwgICAgMywgICAxNCwgICAxNCwgICAzMiwgICAzMiwgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgNSwgICAgNSwgICAgNSwgICAxNSwgICAgNSwgICAzMSwKKyAgICAgICAzMSwgICAzMSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNywgICAgNywgICAgNywKKyAgICAgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywKICAgICAgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywKICAgICAgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywKIAotICAgICAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LAotICAgICAgICA3LCAgICA5LCAgIDE3LCAgICA5LCAgIDEwLCAgIDE3LCAgIDEwLCAgIDI5LCAgICA5LCAgICA5LAotICAgICAgICA5LCAgIDEwLCAgIDEwLCAgIDEwLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDE3LCAgIDMyLCAgIDMyLAotICAgICAgIDE3LCAgIDg2LCAgIDE3LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAotICAgICAgIDg0LCAgIDI5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAotICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDgzLAotICAgICAgIDIwLCAgIDMzLCAgIDQ5LCAgIDQ5LCAgIDgyLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDI1LAotICAgICAgIDI1LCAgIDI1LCAgIDgxLCAgIDI1LCAgIDgwLCAgIDMzLCAgIDc5LCAgIDQ5LCAgIDI1LCAgIDI1LAotICAgICAgIDI1LCAgIDI1LCAgIDMwLCAgIDMwLCAgIDMwLCAgIDUxLCAgIDUxLCAgIDU1LCAgIDMwLCAgIDU1LAotICAgICAgIDU1LCAgIDU1LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDYyLCAgIDU1LCAgIDY4LCAgIDYyLCAgIDc4LAorICAgICAgICA3LCAgICA3LCAgICA5LCAgIDE2LCAgIDI5LCAgIDMzLCAgICA5LCAgICA5LCAgICA5LCAgICA5LAorICAgICAgIDEwLCAgIDU0LCAgIDU0LCAgIDU0LCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDE3LCAgIDMzLAorICAgICAgIDI4LCAgIDE3LCAgIDI4LCAgIDI4LCAgIDI4LCAgMTAwLCAgIDcyLCAgIDE2LCAgIDI5LCAgIDI4LAorICAgICAgIDk3LCAgIDYwLCAgIDcyLCAgIDE3LCAgIDYwLCAgIDk0LCAgIDE3LCAgIDkyLCAgIDE3LCAgIDE5LAorICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDkxLCAgIDg4LCAgIDE5LCAgIDE5LAorICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAorICAgICAgIDE5LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIzLCAgIDIwLCAgIDg3LCAgIDIzLCAgIDg2LAorICAgICAgIDk2LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDMwLCAgIDMwLCAgIDMwLCAgIDg1LCAgIDg0LAorICAgICAgIDIzLCAgIDMwLCAgIDgzLCAgIDIzLCAgIDk2LCAgIDIzLCAgIDI1LCAgIDI1LCAgIDI1LCAgIDgyLAorICAgICAgIDI1LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDgxLCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDUzLAogCi0gICAgICAgNzcsICAgNzYsICAgNzQsICAgNzMsICAgNzIsICAgNzAsICAgNjcsICAgNjYsICAgNjUsICAgNjMsCi0gICAgICAgNjEsICAgNjgsICAgOTQsICAgOTQsICAgOTQsICAgOTQsICAgOTQsICAgOTQsICAgOTQsICAgOTQsCi0gICAgICAgOTUsICAgNDMsICAgNDIsICAgOTUsICAgOTUsICAgOTUsICAgOTYsICAgNDEsICAgOTYsICAgOTcsCi0gICAgICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTgsICAgNDAsICAgOTgsCi0gICAgICAgOTksICAgMzksICAgOTksICAgMzgsICAgOTksICAgOTksICAxMDAsICAgMzUsICAxMDAsICAxMDAsCi0gICAgICAxMDAsICAxMDAsICAxMDEsICAxMDEsICAxMDEsICAgMjIsICAxMDEsICAxMDEsICAxMDIsICAgMjEsCi0gICAgICAxMDIsICAxMDIsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDUsICAgMTEsCi0gICAgICAxMDUsICAxMDYsICAxMDYsICAxMDYsICAgIDAsICAxMDYsICAxMDYsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTgsICAgNTMsICAgNTMsICAgNTMsICAgOTUsICAgOTUsICAgOTUsICAgODAsICAgNTMsICAgNzksCisgICAgICAgNzgsICAgNzcsICAgNzYsICAgNzQsICAgOTgsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCisgICAgICAxMDQsICAxMDQsICAxMDQsICAxMDUsICAgNzMsICAgNzEsICAxMDUsICAxMDUsICAxMDUsICAxMDYsCisgICAgICAgNzAsICAxMDYsICAxMDcsICAgNjksICAxMDcsICAxMDgsICAgNjgsICAxMDgsICAgNjYsICAxMDgsCisgICAgICAxMDgsICAxMDksICAgNjUsICAxMDksICAxMDksICAxMDksICAxMDksICAxMTAsICAxMTAsICAxMTAsCisgICAgICAgNjQsICAxMTAsICAxMTAsICAxMTEsICAgNjMsICAxMTEsICAxMTEsICAxMTIsICAxMTIsICAxMTIsCisgICAgICAxMTIsICAxMTIsICAxMTIsICAxMTIsICAxMTIsICAxMTMsICAxMTMsICAxMTMsICAxMTMsICAxMTMsCisgICAgICAxMTMsICAxMTMsICAxMTMsICAxMTQsICAgNjIsICAxMTQsICAxMTUsICAxMTUsICAxMTUsICAgNjEsCisgICAgICAxMTUsICAxMTUsICAxMTYsICAxMTYsICAxMTYsICAxMTYsICAxMTYsICAxMTYsICAxMTYsICAxMTYsCisgICAgICAgNTksICAgNDksICAgNDMsICAgNDIsICAgNDEsICAgNDAsICAgMzksICAgMzgsICAgMzUsICAgMjIsCiAKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MworICAgICAgIDIxLCAgIDExLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzCiAgICAgfSA7CiAKIC8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAqLwogc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsyMV0gPQogICAgIHsgICAwLAotMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgCisxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAKICAgICAwLCAgICAgfTsKIAogc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CkBAIC02MDAsNyArNjA4LDcgQEAKIAogCiAKLSNsaW5lIDMzICJkdGMtbGV4ZXIubCIKKyNsaW5lIDM3ICJkdGMtbGV4ZXIubCIKICNpbmNsdWRlICJkdGMuaCIKICNpbmNsdWRlICJzcmNwb3MuaCIKICNpbmNsdWRlICJkdGMtcGFyc2VyLnRhYi5oIgpAQCAtNjIzLDcgKzYzMSwxMCBAQAogCQkJCURQUklOVCgiPFYxPlxuIik7IFwKIAkJCQlCRUdJTihWMSk7IFwKIAkJCX0KLSNsaW5lIDYyNyAiZHRjLWxleGVyLmxleC5jIgorCitzdGF0aWMgdm9pZCBwdXNoX2lucHV0X2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludCBwb3BfaW5wdXRfZmlsZSh2b2lkKTsKKyNsaW5lIDYzOCAiZHRjLWxleGVyLmxleC5jIgogCiAjZGVmaW5lIElOSVRJQUwgMAogI2RlZmluZSBJTkNMVURFIDEKQEAgLTY4NSw3ICs2OTYsNyBAQAogLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCiAgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgogICovCi0jZGVmaW5lIEVDSE8gKHZvaWQpIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKKyNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApCiAjZW5kaWYKIAogLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLApAQCAtNjk2LDcgKzcwNyw3IEBACiAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAogCQl7IFwKIAkJaW50IGMgPSAnKic7IFwKLQkJc2l6ZV90IG47IFwKKwkJaW50IG47IFwKIAkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCiAJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCiAJCQlidWZbbl0gPSAoY2hhcikgYzsgXApAQCAtNzc4LDkgKzc4OSw5IEBACiAJcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKIAlyZWdpc3RlciBpbnQgeXlfYWN0OwogICAgIAotI2xpbmUgNTcgImR0Yy1sZXhlci5sIgorI2xpbmUgNjQgImR0Yy1sZXhlci5sIgogCi0jbGluZSA3ODQgImR0Yy1sZXhlci5sZXguYyIKKyNsaW5lIDc5NSAiZHRjLWxleGVyLmxleC5jIgogCiAJaWYgKCAhKHl5X2luaXQpICkKIAkJewpAQCAtODMzLDEzICs4NDQsMTMgQEAKIAkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCQl7CiAJCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gOTQgKQorCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDQgKQogCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCQl9CiAJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCSsreXlfY3A7CiAJCQl9Ci0JCXdoaWxlICggeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAhPSAyODggKTsKKwkJd2hpbGUgKCB5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICE9IDMwMyApOwogCiB5eV9maW5kX2FjdGlvbjoKIAkJeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwpAQCAtODc0LDIwICs4ODUsMTMgQEAKIAkJCWdvdG8geXlfZmluZF9hY3Rpb247CiAKIGNhc2UgMToKKy8qIHJ1bGUgMSBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSA1OCAiZHRjLWxleGVyLmwiCi1CRUdJTihJTkNMVURFKTsKLQlZWV9CUkVBSwotY2FzZSAyOgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNjAgImR0Yy1sZXhlci5sIgorI2xpbmUgNjUgImR0Yy1sZXhlci5sIgogewotCQkJeXl0ZXh0W3N0cmxlbih5eXRleHQpIC0gMV0gPSAwOwotCQkJaWYgKCFwdXNoX2lucHV0X2ZpbGUoeXl0ZXh0ICsgMSkpIHsKLQkJCQkvKiBTb21lIHVucmVjb3ZlcmFibGUgZXJyb3IuKi8KLQkJCQlleGl0KDEpOwotCQkJfQotCQkJQkVHSU5fREVGQVVMVCgpOworCQkJY2hhciAqbmFtZSA9IHN0cmNocih5eXRleHQsICdcIicpICsgMTsKKwkJCXl5dGV4dFt5eWxlbmctMV0gPSAnXDAnOworCQkJcHVzaF9pbnB1dF9maWxlKG5hbWUpOwogCQl9CiAJWVlfQlJFQUsKIGNhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgpAQCAtODk1LDE5ICs4OTksMTkgQEAKIGNhc2UgWVlfU1RBVEVfRU9GKEJZVEVTVFJJTkcpOgogY2FzZSBZWV9TVEFURV9FT0YoUFJPUE5PREVOQU1FKToKIGNhc2UgWVlfU1RBVEVfRU9GKFYxKToKLSNsaW5lIDcwICJkdGMtbGV4ZXIubCIKKyNsaW5lIDcxICJkdGMtbGV4ZXIubCIKIHsKIAkJCWlmICghcG9wX2lucHV0X2ZpbGUoKSkgewogCQkJCXl5dGVybWluYXRlKCk7CiAJCQl9CiAJCX0KIAlZWV9CUkVBSwotY2FzZSAzOgotLyogcnVsZSAzIGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgMjoKKy8qIHJ1bGUgMiBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSA3NiAiZHRjLWxleGVyLmwiCisjbGluZSA3NyAiZHRjLWxleGVyLmwiCiB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIlN0cmluZzogJXNcbiIsIHl5dGV4dCk7CiAJCQl5eWx2YWwuZGF0YSA9IGRhdGFfY29weV9lc2NhcGVfc3RyaW5nKHl5dGV4dCsxLApAQCAtOTE2LDExICs5MjAsMTEgQEAKIAkJCXJldHVybiBEVF9TVFJJTkc7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSA0OgorY2FzZSAzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgODYgImR0Yy1sZXhlci5sIgorI2xpbmUgODcgImR0Yy1sZXhlci5sIgogewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJLZXl3b3JkOiAvZHRzLXYxL1xuIik7CiAJCQlkdHNfdmVyc2lvbiA9IDE7CkBAIC05MjgsMjIgKzkzMiwyMiBAQAogCQkJcmV0dXJuIERUX1YxOwogCQl9CiAJWVlfQlJFQUsKLWNhc2UgNToKK2Nhc2UgNDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDk1ICJkdGMtbGV4ZXIubCIKKyNsaW5lIDk2ICJkdGMtbGV4ZXIubCIKIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiS2V5d29yZDogL21lbXJlc2VydmUvXG4iKTsKIAkJCUJFR0lOX0RFRkFVTFQoKTsKIAkJCXJldHVybiBEVF9NRU1SRVNFUlZFOwogCQl9CiAJWVlfQlJFQUsKLWNhc2UgNjoKK2Nhc2UgNToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDEwMyAiZHRjLWxleGVyLmwiCisjbGluZSAxMDQgImR0Yy1sZXhlci5sIgogewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJMYWJlbDogJXNcbiIsIHl5dGV4dCk7CiAJCQl5eWx2YWwubGFiZWxyZWYgPSBzdHJkdXAoeXl0ZXh0KTsKQEAgLTk1MSwxMSArOTU1LDExIEBACiAJCQlyZXR1cm4gRFRfTEFCRUw7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSA3OgorY2FzZSA2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMTEyICJkdGMtbGV4ZXIubCIKKyNsaW5lIDExMyAiZHRjLWxleGVyLmwiCiB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlpZiAoKnl5dGV4dCA9PSAnYicpCiAJCQkJeXlsdmFsLmNiYXNlID0gMjsKQEAgLTk2OSw0NCArOTczLDQ0IEBACiAJCQlyZXR1cm4gRFRfQkFTRTsKIAkJfQogCVlZX0JSRUFLCi1jYXNlIDg6CitjYXNlIDc6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxMjcgImR0Yy1sZXhlci5sIgorI2xpbmUgMTI4ICJkdGMtbGV4ZXIubCIKIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCXl5bHZhbC5saXRlcmFsID0gc3RyZHVwKHl5dGV4dCk7CiAJCQlEUFJJTlQoIkxpdGVyYWw6ICclcydcbiIsIHl5bHZhbC5saXRlcmFsKTsKIAkJCXJldHVybiBEVF9MRUdBQ1lMSVRFUkFMOwogCQl9CiAJWVlfQlJFQUsKLWNhc2UgOToKK2Nhc2UgODoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDEzNSAiZHRjLWxleGVyLmwiCisjbGluZSAxMzYgImR0Yy1sZXhlci5sIgogewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJeXlsdmFsLmxpdGVyYWwgPSBzdHJkdXAoeXl0ZXh0KTsKIAkJCURQUklOVCgiTGl0ZXJhbDogJyVzJ1xuIiwgeXlsdmFsLmxpdGVyYWwpOwogCQkJcmV0dXJuIERUX0xJVEVSQUw7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSAxMDoKK2Nhc2UgOToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE0MyAiZHRjLWxleGVyLmwiCisjbGluZSAxNDQgImR0Yy1sZXhlci5sIgogewkvKiBsYWJlbCByZWZlcmVuY2UgKi8KLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiUmVmOiAlc1xuIiwgeXl0ZXh0KzEpOwogCQkJeXlsdmFsLmxhYmVscmVmID0gc3RyZHVwKHl5dGV4dCsxKTsKIAkJCXJldHVybiBEVF9SRUY7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSAxMToKK2Nhc2UgMTA6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxNTEgImR0Yy1sZXhlci5sIgorI2xpbmUgMTUyICJkdGMtbGV4ZXIubCIKIHsJLyogbmV3LXN0eWxlIHBhdGggcmVmZXJlbmNlICovCi0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQl5eXRleHRbeXlsZW5nLTFdID0gJ1wwJzsKIAkJCURQUklOVCgiUmVmOiAlc1xuIiwgeXl0ZXh0KzIpOwpAQCAtMTAxNCw0NCArMTAxOCw0NCBAQAogCQkJcmV0dXJuIERUX1JFRjsKIAkJfQogCVlZX0JSRUFLCi1jYXNlIDEyOgorY2FzZSAxMToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE2MCAiZHRjLWxleGVyLmwiCisjbGluZSAxNjEgImR0Yy1sZXhlci5sIgogewkvKiBvbGQtc3R5bGUgcGF0aCByZWZlcmVuY2UgKi8KLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiUmVmOiAlc1xuIiwgeXl0ZXh0KzEpOwogCQkJeXlsdmFsLmxhYmVscmVmID0gc3RyZHVwKHl5dGV4dCsxKTsKIAkJCXJldHVybiBEVF9SRUY7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSAxMzoKK2Nhc2UgMTI6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxNjggImR0Yy1sZXhlci5sIgorI2xpbmUgMTY5ICJkdGMtbGV4ZXIubCIKIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCXl5bHZhbC5ieXRlID0gc3RydG9sKHl5dGV4dCwgTlVMTCwgMTYpOwogCQkJRFBSSU5UKCJCeXRlOiAlMDJ4XG4iLCAoaW50KXl5bHZhbC5ieXRlKTsKIAkJCXJldHVybiBEVF9CWVRFOwogCQl9CiAJWVlfQlJFQUsKLWNhc2UgMTQ6CitjYXNlIDEzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMTc2ICJkdGMtbGV4ZXIubCIKKyNsaW5lIDE3NyAiZHRjLWxleGVyLmwiCiB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIi9CWVRFU1RSSU5HXG4iKTsKIAkJCUJFR0lOX0RFRkFVTFQoKTsKIAkJCXJldHVybiAnXSc7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSAxNToKK2Nhc2UgMTQ6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxODQgImR0Yy1sZXhlci5sIgorI2xpbmUgMTg1ICJkdGMtbGV4ZXIubCIKIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiUHJvcE5vZGVOYW1lOiAlc1xuIiwgeXl0ZXh0KTsKIAkJCXl5bHZhbC5wcm9wbm9kZW5hbWUgPSBzdHJkdXAoeXl0ZXh0KTsKQEAgLTEwNTksMzQgKzEwNjMsMzkgQEAKIAkJCXJldHVybiBEVF9QUk9QTk9ERU5BTUU7CiAJCX0KIAlZWV9CUkVBSworY2FzZSAxNToKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDE5NCAiZHRjLWxleGVyLmwiCit7CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOworCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKKwkJCURQUklOVCgiQmluYXJ5IEluY2x1ZGVcbiIpOworCQkJcmV0dXJuIERUX0lOQ0JJTjsKKwkJfQorCVlZX0JSRUFLCiBjYXNlIDE2OgogLyogcnVsZSAxNiBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxOTQgImR0Yy1sZXhlci5sIgorI2xpbmUgMjAxICJkdGMtbGV4ZXIubCIKIC8qIGVhdCB3aGl0ZXNwYWNlICovCiAJWVlfQlJFQUsKIGNhc2UgMTc6CiAvKiBydWxlIDE3IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE5NiAiZHRjLWxleGVyLmwiCi17Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOwotCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKLQkJCURQUklOVCgiQ29tbWVudDogJXNcbiIsIHl5dGV4dCk7Ci0JCQkvKiBlYXQgY29tbWVudHMgKi8KLQkJfQorI2xpbmUgMjAyICJkdGMtbGV4ZXIubCIKKy8qIGVhdCBDLXN0eWxlIGNvbW1lbnRzICovCiAJWVlfQlJFQUsKIGNhc2UgMTg6CiAvKiBydWxlIDE4IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKICNsaW5lIDIwMyAiZHRjLWxleGVyLmwiCi0vKiBlYXQgbGluZSBjb21tZW50cyAqLworLyogZWF0IEMrKy1zdHlsZSBjb21tZW50cyAqLwogCVlZX0JSRUFLCiBjYXNlIDE5OgogWVlfUlVMRV9TRVRVUAogI2xpbmUgMjA1ICJkdGMtbGV4ZXIubCIKIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiQ2hhcjogJWMgKFxceCUwMngpXG4iLCB5eXRleHRbMF0sCiAJCQkJKHVuc2lnbmVkKXl5dGV4dFswXSk7CkBAIC0xMTA3LDcgKzExMTYsNyBAQAogI2xpbmUgMjIyICJkdGMtbGV4ZXIubCIKIEVDSE87CiAJWVlfQlJFQUsKLSNsaW5lIDExMTEgImR0Yy1sZXhlci5sZXguYyIKKyNsaW5lIDExMjAgImR0Yy1sZXhlci5sZXguYyIKIAogCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKIAkJewpAQCAtMTM2MCw2ICsxMzY5LDE0IEBACiAJZWxzZQogCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwogCisJaWYgKCh5eV9zaXplX3QpICgoeXlfbl9jaGFycykgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9ICh5eV9uX2NoYXJzKSArIG51bWJlcl90b19tb3ZlICsgKCh5eV9uX2NoYXJzKSA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSB5eXJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgICk7CisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKKwl9CisKIAkoeXlfbl9jaGFycykgKz0gbnVtYmVyX3RvX21vdmU7CiAJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycykgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKQEAgLTEzODksNyArMTQwNiw3IEBACiAJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCXsKIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gOTQgKQorCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNCApCiAJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQl9CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwpAQCAtMTQxNywxMSArMTQzNCwxMSBAQAogCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJewogCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gOTQgKQorCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA0ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gOTMpOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDEwMyk7CiAKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CkBAIC0xNzQzLDcgKzE3NjAsOSBAQAogCQkoeXlfYnVmZmVyX3N0YWNrKSA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlhbGxvYwogCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQogCQkJCQkJCQkpOwotCQkKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAogCQltZW1zZXQoKHl5X2J1ZmZlcl9zdGFjayksIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwogCQkJCQogCQkoeXlfYnVmZmVyX3N0YWNrX21heCkgPSBudW1fdG9fYWxsb2M7CkBAIC0xNzYxLDYgKzE3ODAsOCBAQAogCQkJCQkJCQkoKHl5X2J1ZmZlcl9zdGFjayksCiAJCQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKIAkJCQkJCQkJKTsKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwogCiAJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCiAJCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSArICh5eV9idWZmZXJfc3RhY2tfbWF4KSwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CkBAIC0yMDcyLDE0ICsyMDkzLDEzIEBACiAgKi8KIAogc3RydWN0IGluY2xfZmlsZSB7Ci0JaW50IGZpbGVudW07Ci0JRklMRSAqZmlsZTsKKwlzdHJ1Y3QgZHRjX2ZpbGUgKmZpbGU7CiAJWVlfQlVGRkVSX1NUQVRFIHl5X3ByZXZfYnVmOwogCWludCB5eV9wcmV2X2xpbmVubzsKIAlzdHJ1Y3QgaW5jbF9maWxlICpwcmV2OwogfTsKIAotc3RydWN0IGluY2xfZmlsZSAqaW5jbF9maWxlX3N0YWNrOworc3RhdGljIHN0cnVjdCBpbmNsX2ZpbGUgKmluY2xfZmlsZV9zdGFjazsKIAogCiAvKgpAQCAtMjA5MCwzNiArMjExMCwzNCBAQAogc3RhdGljIGludCBpbmNsX2RlcHRoID0gMDsKIAogCi1pbnQgcHVzaF9pbnB1dF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorc3RhdGljIHZvaWQgcHVzaF9pbnB1dF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewotCUZJTEUgKmY7CiAJc3RydWN0IGluY2xfZmlsZSAqaW5jbF9maWxlOworCXN0cnVjdCBkdGNfZmlsZSAqbmV3ZmlsZTsKKwlzdHJ1Y3Qgc2VhcmNoX3BhdGggc2VhcmNoLCAqc2VhcmNocHRyID0gTlVMTDsKIAotCWlmICghZmlsZW5hbWUpIHsKLQkJeXllcnJvcigiTm8gaW5jbHVkZSBmaWxlIG5hbWUgZ2l2ZW4uIik7Ci0JCXJldHVybiAwOworCWFzc2VydChmaWxlbmFtZSk7CisKKwlpZiAoaW5jbF9kZXB0aCsrID49IE1BWF9JTkNMVURFX0RFUFRIKQorCQlkaWUoIkluY2x1ZGVzIG5lc3RlZCB0b28gZGVlcGx5Iik7CisKKwlpZiAoc3JjcG9zX2ZpbGUpIHsKKwkJc2VhcmNoLmRpciA9IHNyY3Bvc19maWxlLT5kaXI7CisJCXNlYXJjaC5uZXh0ID0gTlVMTDsKKwkJc2VhcmNoLnByZXYgPSBOVUxMOworCQlzZWFyY2hwdHIgPSAmc2VhcmNoOwogCX0KIAotCWlmIChpbmNsX2RlcHRoKysgPj0gTUFYX0lOQ0xVREVfREVQVEgpIHsKLQkJeXllcnJvcigiSW5jbHVkZXMgbmVzdGVkIHRvbyBkZWVwbHkiKTsKLQkJcmV0dXJuIDA7Ci0JfQorCW5ld2ZpbGUgPSBkdGNfb3Blbl9maWxlKGZpbGVuYW1lLCBzZWFyY2hwdHIpOwogCi0JZiA9IGR0Y19vcGVuX2ZpbGUoZmlsZW5hbWUpOwotCi0JaW5jbF9maWxlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5jbF9maWxlKSk7Ci0JaWYgKCFpbmNsX2ZpbGUpIHsKLQkJeXllcnJvcigiQ2FuIG5vdCBhbGxvY2F0ZSBpbmNsdWRlIGZpbGUgc3BhY2UuIik7Ci0JCXJldHVybiAwOwotCX0KKwlpbmNsX2ZpbGUgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5jbF9maWxlKSk7CiAKIAkvKgogCSAqIFNhdmUgY3VycmVudCBjb250ZXh0LgogCSAqLwogCWluY2xfZmlsZS0+eXlfcHJldl9idWYgPSBZWV9DVVJSRU5UX0JVRkZFUjsKIAlpbmNsX2ZpbGUtPnl5X3ByZXZfbGluZW5vID0geXlsaW5lbm87Ci0JaW5jbF9maWxlLT5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07Ci0JaW5jbF9maWxlLT5maWxlID0geXlpbjsKKwlpbmNsX2ZpbGUtPmZpbGUgPSBzcmNwb3NfZmlsZTsKIAlpbmNsX2ZpbGUtPnByZXYgPSBpbmNsX2ZpbGVfc3RhY2s7CiAKIAlpbmNsX2ZpbGVfc3RhY2sgPSBpbmNsX2ZpbGU7CkBAIC0yMTI3LDIzICsyMTQ1LDIxIEBACiAJLyoKIAkgKiBFc3RhYmxpc2ggbmV3IGNvbnRleHQuCiAJICovCi0Jc3JjcG9zX2ZpbGVudW0gPSBsb29rdXBfZmlsZV9uYW1lKGZpbGVuYW1lLCAwKTsKKwlzcmNwb3NfZmlsZSA9IG5ld2ZpbGU7CiAJeXlsaW5lbm8gPSAxOwotCXl5aW4gPSBmOworCXl5aW4gPSBuZXdmaWxlLT5maWxlOwogCXl5X3N3aXRjaF90b19idWZmZXIoeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFKSk7Ci0KLQlyZXR1cm4gMTsKIH0KIAogCi1pbnQgcG9wX2lucHV0X2ZpbGUodm9pZCkKK3N0YXRpYyBpbnQgcG9wX2lucHV0X2ZpbGUodm9pZCkKIHsKIAlzdHJ1Y3QgaW5jbF9maWxlICppbmNsX2ZpbGU7CiAKIAlpZiAoaW5jbF9maWxlX3N0YWNrID09IDApCiAJCXJldHVybiAwOwogCi0JZmNsb3NlKHl5aW4pOworCWR0Y19jbG9zZV9maWxlKHNyY3Bvc19maWxlKTsKIAogCS8qCiAJICogUG9wLgpAQCAtMjE1OCwxNyArMjE3NCwxNCBAQAogCXl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIpOwogCXl5X3N3aXRjaF90b19idWZmZXIoaW5jbF9maWxlLT55eV9wcmV2X2J1Zik7CiAJeXlsaW5lbm8gPSBpbmNsX2ZpbGUtPnl5X3ByZXZfbGluZW5vOwotCXNyY3Bvc19maWxlbnVtID0gaW5jbF9maWxlLT5maWxlbnVtOwotCXl5aW4gPSBpbmNsX2ZpbGUtPmZpbGU7CisJc3JjcG9zX2ZpbGUgPSBpbmNsX2ZpbGUtPmZpbGU7CisJeXlpbiA9IGluY2xfZmlsZS0+ZmlsZSA/IGluY2xfZmlsZS0+ZmlsZS0+ZmlsZSA6IE5VTEw7CiAKIAkvKgogCSAqIEZyZWUgb2xkIHN0YXRlLgogCSAqLwogCWZyZWUoaW5jbF9maWxlKTsKIAotCWlmIChZWV9DVVJSRU5UX0JVRkZFUiA9PSAwKQotCQlyZXR1cm4gMDsKLQogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1wYXJzZXIudGFiLmNfc2hpcHBlZCBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuY19zaGlwcGVkCmluZGV4IDI4ZTZlYzAuLjI3MTI5MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuY19zaGlwcGVkCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuY19zaGlwcGVkCkBAIC03NSw3ICs3NSw4IEBACiAgICAgIERUX0JZVEUgPSAyNjQsCiAgICAgIERUX1NUUklORyA9IDI2NSwKICAgICAgRFRfTEFCRUwgPSAyNjYsCi0gICAgIERUX1JFRiA9IDI2NworICAgICBEVF9SRUYgPSAyNjcsCisgICAgIERUX0lOQ0JJTiA9IDI2OAogICAgfTsKICNlbmRpZgogLyogVG9rZW5zLiAgKi8KQEAgLTg5LDYgKzkwLDcgQEAKICNkZWZpbmUgRFRfU1RSSU5HIDI2NQogI2RlZmluZSBEVF9MQUJFTCAyNjYKICNkZWZpbmUgRFRfUkVGIDI2NworI2RlZmluZSBEVF9JTkNCSU4gMjY4CiAKIAogCkBAIC05NiwxNCArOTgsMTcgQEAKIC8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwogI2xpbmUgMjMgImR0Yy1wYXJzZXIueSIKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisKICNpbmNsdWRlICJkdGMuaCIKICNpbmNsdWRlICJzcmNwb3MuaCIKIAotaW50IHl5bGV4KHZvaWQpOwotdW5zaWduZWQgbG9uZyBsb25nIGV2YWxfbGl0ZXJhbChjb25zdCBjaGFyICpzLCBpbnQgYmFzZSwgaW50IGJpdHMpOworZXh0ZXJuIGludCB5eWxleCh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBib290X2luZm8gKnRoZV9ib290X2luZm87CitleHRlcm4gaW50IHRyZWVzb3VyY2VfZXJyb3I7CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXZhbF9saXRlcmFsKGNvbnN0IGNoYXIgKnMsIGludCBiYXNlLCBpbnQgYml0cyk7CiAKIAogLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KQEAgLTEyNiwxNiArMTMxLDE2IEBACiAKICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0jbGluZSAzNCAiZHRjLXBhcnNlci55IgorI2xpbmUgMzcgImR0Yy1wYXJzZXIueSIKIHsKIAljaGFyICpwcm9wbm9kZW5hbWU7CiAJY2hhciAqbGl0ZXJhbDsKIAljaGFyICpsYWJlbHJlZjsKIAl1bnNpZ25lZCBpbnQgY2Jhc2U7Ci0JdTggYnl0ZTsKKwl1aW50OF90IGJ5dGU7CiAJc3RydWN0IGRhdGEgZGF0YTsKIAotCXU2NCBhZGRyOworCXVpbnQ2NF90IGFkZHI7CiAJY2VsbF90IGNlbGw7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcGxpc3Q7CkBAIC0xNDQsNyArMTQ5LDcgQEAKIAlzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpyZTsKIH0KIC8qIExpbmUgMTg3IG9mIHlhY2MuYy4gICovCi0jbGluZSAxNDggImR0Yy1wYXJzZXIudGFiLmMiCisjbGluZSAxNTMgImR0Yy1wYXJzZXIudGFiLmMiCiAJWVlTVFlQRTsKICMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KICMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQpAQCAtMTY5LDcgKzE3NCw3IEBACiAKIAogLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KLSNsaW5lIDE3MyAiZHRjLXBhcnNlci50YWIuYyIKKyNsaW5lIDE3OCAiZHRjLXBhcnNlci50YWIuYyIKIAogI2lmZGVmIHNob3J0CiAjIHVuZGVmIHNob3J0CkBAIC0zODYsMjAgKzM5MSwyMCBAQAogLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KICNkZWZpbmUgWVlGSU5BTCAgOQogLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCi0jZGVmaW5lIFlZTEFTVCAgIDYwCisjZGVmaW5lIFlZTEFTVCAgIDczCiAKIC8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KLSNkZWZpbmUgWVlOVE9LRU5TICAyNAorI2RlZmluZSBZWU5UT0tFTlMgIDI3CiAvKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCiAjZGVmaW5lIFlZTk5UUyAgMjAKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJVTEVTICA0MworI2RlZmluZSBZWU5SVUxFUyAgNDUKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwotI2RlZmluZSBZWU5TVEFURVMgIDY3CisjZGVmaW5lIFlZTlNUQVRFUyAgNzYKIAogLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCiAjZGVmaW5lIFlZVU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAgMjY3CisjZGVmaW5lIFlZTUFYVVRPSyAgIDI2OAogCiAjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlcCiAgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKQEAgLTQxMSwxNSArNDE2LDE1IEBACiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjMsICAgIDE0LCAgICAgMiwgICAgMTUsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDEzLAotICAgICAgMTksICAgIDE4LCAgICAyMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAyNCwgICAgMjYsICAgICAyLCAgICAgMiwgICAgMjUsICAgIDE1LCAgICAgMiwgICAgMTYsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDE0LAorICAgICAgMjAsICAgIDE5LCAgICAyMSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgIDIxLCAgICAgMiwgICAgMjIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgMjIsICAgICAyLCAgICAyMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAxNiwgICAgIDIsICAgIDE3LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDE3LCAgICAgMiwgICAgMTgsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLApAQCAtNDMzLDcgKzQzOCw3IEBACiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMKIH07CiAKICNpZiBZWURFQlVHCkBAIC00NDMsMzcgKzQ0OCwzOSBAQAogewogICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDgsICAgIDExLCAgICAxMiwgICAgMTUsICAgIDIxLCAgICAyMiwgICAgMjUsCiAgICAgICAyNywgICAgMzQsICAgIDM2LCAgICAzOCwgICAgNDEsICAgIDQ3LCAgICA0OCwgICAgNTEsICAgIDU3LCAgICA2MSwKLSAgICAgIDY0LCAgICA2OSwgICAgNzQsICAgIDc3LCAgICA4MCwgICAgODEsICAgIDg0LCAgICA4NywgICAgODgsICAgIDkxLAotICAgICAgOTQsICAgIDk3LCAgICA5OCwgICAxMDAsICAgMTAyLCAgIDEwNSwgICAxMDYsICAgMTA5LCAgIDExMiwgICAxMTMsCi0gICAgIDExNiwgICAxMTksICAgMTIzLCAgIDEyNAorICAgICAgNjQsICAgIDY5LCAgICA3NCwgICAgNzcsICAgIDg3LCAgICA5MywgICAgOTYsICAgIDk3LCAgIDEwMCwgICAxMDMsCisgICAgIDEwNCwgICAxMDcsICAgMTEwLCAgIDExMywgICAxMTQsICAgMTE2LCAgIDExOCwgICAxMjEsICAgMTIyLCAgIDEyNSwKKyAgICAgMTI4LCAgIDEyOSwgICAxMzIsICAgMTM1LCAgIDEzOSwgICAxNDAKIH07CiAKIC8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlyaHNbXSA9CiB7Ci0gICAgICAyNSwgICAgIDAsICAgIC0xLCAgICAgMywgICAgMTMsICAgIDI2LCAgICAzMSwgICAgLTEsICAgIDI4LCAgICAzMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMjcsICAgIDI2LCAgICAtMSwgICAgNDMsICAgICA0LCAgICAzMCwgICAgMzAsICAgIDEzLAotICAgICAgLTEsICAgIC0xLCAgICAyOSwgICAgMjgsICAgIC0xLCAgICAyNywgICAgLTEsICAgIDQzLCAgICAgNCwgICAgMzAsCi0gICAgICAxNCwgICAgMzAsICAgIDEzLCAgICAtMSwgICAgIDYsICAgIC0xLCAgICAgNywgICAgLTEsICAgIDE1LCAgICAzMiwKLSAgICAgIC0xLCAgICAxNiwgICAgMzMsICAgIDQxLCAgICAxNywgICAgMTMsICAgIC0xLCAgICAtMSwgICAgMzMsICAgIDM0LAotICAgICAgLTEsICAgIDQzLCAgICAgNSwgICAgMTgsICAgIDM1LCAgICAxMywgICAgLTEsICAgIDQzLCAgICAgNSwgICAgMTMsCi0gICAgICAtMSwgICAgMzYsICAgIDEwLCAgICAtMSwgICAgMzYsICAgIDE5LCAgICAzNywgICAgMjAsICAgIC0xLCAgICAzNiwKLSAgICAgIDIxLCAgICA0MCwgICAgMjIsICAgIC0xLCAgICAzNiwgICAgMTIsICAgIC0xLCAgICAzNSwgICAgMTEsICAgIC0xLAotICAgICAgLTEsICAgIDM1LCAgICAyMywgICAgLTEsICAgIDM2LCAgICAxMSwgICAgLTEsICAgIC0xLCAgICAzNywgICAgMzksCi0gICAgICAtMSwgICAgMzcsICAgIDEyLCAgICAtMSwgICAgMzcsICAgIDExLCAgICAtMSwgICAgLTEsICAgICA4LCAgICAtMSwKLSAgICAgICA2LCAgICAtMSwgICAgMzgsICAgICA3LCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAgOSwgICAgLTEsICAgIDQwLAotICAgICAgMTEsICAgIC0xLCAgICAtMSwgICAgNDIsICAgIDQxLCAgICAtMSwgICAgNDIsICAgIDM0LCAgICAtMSwgICAgNDMsCi0gICAgICAgNSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgMTEsICAgIC0xCisgICAgICAyOCwgICAgIDAsICAgIC0xLCAgICAgMywgICAgMTQsICAgIDI5LCAgICAzNCwgICAgLTEsICAgIDMxLCAgICAzNCwKKyAgICAgIC0xLCAgICAtMSwgICAgMzAsICAgIDI5LCAgICAtMSwgICAgNDYsICAgICA0LCAgICAzMywgICAgMzMsICAgIDE0LAorICAgICAgLTEsICAgIC0xLCAgICAzMiwgICAgMzEsICAgIC0xLCAgICAzMCwgICAgLTEsICAgIDQ2LCAgICAgNCwgICAgMzMsCisgICAgICAxNSwgICAgMzMsICAgIDE0LCAgICAtMSwgICAgIDYsICAgIC0xLCAgICAgNywgICAgLTEsICAgIDE2LCAgICAzNSwKKyAgICAgIC0xLCAgICAxNywgICAgMzYsICAgIDQ0LCAgICAxOCwgICAgMTQsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LAorICAgICAgLTEsICAgIDQ2LCAgICAgNSwgICAgMTksICAgIDM4LCAgICAxNCwgICAgLTEsICAgIDQ2LCAgICAgNSwgICAgMTQsCisgICAgICAtMSwgICAgMzksICAgIDEwLCAgICAtMSwgICAgMzksICAgIDIwLCAgICA0MCwgICAgMjEsICAgIC0xLCAgICAzOSwKKyAgICAgIDIyLCAgICA0MywgICAgMjMsICAgIC0xLCAgICAzOSwgICAgMTIsICAgIC0xLCAgICAzOSwgICAgMTMsICAgIDI0LAorICAgICAgMTAsICAgIDI1LCAgICAzMywgICAgMjUsICAgIDMzLCAgICAyNiwgICAgLTEsICAgIDM5LCAgICAxMywgICAgMjQsCisgICAgICAxMCwgICAgMjYsICAgIC0xLCAgICAzOCwgICAgMTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDI1LCAgICAtMSwKKyAgICAgIDM5LCAgICAxMSwgICAgLTEsICAgIC0xLCAgICA0MCwgICAgNDIsICAgIC0xLCAgICA0MCwgICAgMTIsICAgIC0xLAorICAgICAgNDAsICAgIDExLCAgICAtMSwgICAgLTEsICAgICA4LCAgICAtMSwgICAgIDYsICAgIC0xLCAgICA0MSwgICAgIDcsCisgICAgICAtMSwgICAgLTEsICAgIDQzLCAgICAgOSwgICAgLTEsICAgIDQzLCAgICAxMSwgICAgLTEsICAgIC0xLCAgICA0NSwKKyAgICAgIDQ0LCAgICAtMSwgICAgNDUsICAgIDM3LCAgICAtMSwgICAgNDYsICAgICA1LCAgICAzNSwgICAgLTEsICAgIC0xLAorICAgICAgMTEsICAgIC0xCiB9OwogCiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9CiB7Ci0gICAgICAgMCwgICAgODUsICAgIDg1LCAgICA4OSwgICAgOTcsICAgMTAwLCAgIDEwNywgICAxMTUsICAgMTE4LCAgIDEyNSwKLSAgICAgMTI5LCAgIDEzNiwgICAxNDAsICAgMTQ3LCAgIDE1NCwgICAxNjIsICAgMTY1LCAgIDE3MiwgICAxNzYsICAgMTgzLAotICAgICAxODcsICAgMTkxLCAgIDE5NSwgICAxOTksICAgMjA3LCAgIDIxMCwgICAyMTQsICAgMjIyLCAgIDIyNSwgICAyMjksCi0gICAgIDIzNCwgICAyNDIsICAgMjQ1LCAgIDI0OSwgICAyNTMsICAgMjYxLCAgIDI2NCwgICAyNjgsICAgMjc2LCAgIDI3OSwKLSAgICAgMjgzLCAgIDI5MSwgICAyOTksICAgMzAyCisgICAgICAgMCwgICAgODksICAgIDg5LCAgICA5MywgICAxMDEsICAgMTA0LCAgIDExMSwgICAxMTksICAgMTIyLCAgIDEyOSwKKyAgICAgMTMzLCAgIDE0MCwgICAxNDQsICAgMTUxLCAgIDE1OCwgICAxNjYsICAgMTY5LCAgIDE3NiwgICAxODAsICAgMTg3LAorICAgICAxOTEsICAgMTk1LCAgIDE5OSwgICAyMDMsICAgMjIwLCAgIDIzMSwgICAyMzksICAgMjQyLCAgIDI0NiwgICAyNTQsCisgICAgIDI1NywgICAyNjEsICAgMjY2LCAgIDI3NCwgICAyNzcsICAgMjgxLCAgIDI4NSwgICAyOTMsICAgMjk2LCAgIDMwMCwKKyAgICAgMzA4LCAgIDMxMSwgICAzMTUsICAgMzIzLCAgIDMzMSwgICAzMzQKIH07CiAjZW5kaWYKIApAQCAtNDg0LDEyICs0OTEsMTIgQEAKIHsKICAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJEVF9WMSIsICJEVF9NRU1SRVNFUlZFIiwKICAgIkRUX1BST1BOT0RFTkFNRSIsICJEVF9MSVRFUkFMIiwgIkRUX0xFR0FDWUxJVEVSQUwiLCAiRFRfQkFTRSIsCi0gICJEVF9CWVRFIiwgIkRUX1NUUklORyIsICJEVF9MQUJFTCIsICJEVF9SRUYiLCAiJzsnIiwgIictJyIsICInLyciLCAiJ3snIiwKLSAgIid9JyIsICInPSciLCAiJzwnIiwgIic+JyIsICInWyciLCAiJ10nIiwgIicsJyIsICIkYWNjZXB0IiwgInNvdXJjZWZpbGUiLAotICAibWVtcmVzZXJ2ZXMiLCAibWVtcmVzZXJ2ZSIsICJ2MF9tZW1yZXNlcnZlcyIsICJ2MF9tZW1yZXNlcnZlIiwgImFkZHIiLAotICAiZGV2aWNldHJlZSIsICJub2RlZGVmIiwgInByb3BsaXN0IiwgInByb3BkZWYiLCAicHJvcGRhdGEiLAotICAicHJvcGRhdGFwcmVmaXgiLCAiY2VsbGxpc3QiLCAiY2VsbGJhc2UiLCAiY2VsbHZhbCIsICJieXRlc3RyaW5nIiwKLSAgInN1Ym5vZGVzIiwgInN1Ym5vZGUiLCAibGFiZWwiLCAwCisgICJEVF9CWVRFIiwgIkRUX1NUUklORyIsICJEVF9MQUJFTCIsICJEVF9SRUYiLCAiRFRfSU5DQklOIiwgIic7JyIsICInLSciLAorICAiJy8nIiwgIid7JyIsICInfSciLCAiJz0nIiwgIic8JyIsICInPiciLCAiJ1snIiwgIiddJyIsICInKCciLCAiJywnIiwKKyAgIicpJyIsICIkYWNjZXB0IiwgInNvdXJjZWZpbGUiLCAibWVtcmVzZXJ2ZXMiLCAibWVtcmVzZXJ2ZSIsCisgICJ2MF9tZW1yZXNlcnZlcyIsICJ2MF9tZW1yZXNlcnZlIiwgImFkZHIiLCAiZGV2aWNldHJlZSIsICJub2RlZGVmIiwKKyAgInByb3BsaXN0IiwgInByb3BkZWYiLCAicHJvcGRhdGEiLCAicHJvcGRhdGFwcmVmaXgiLCAiY2VsbGxpc3QiLAorICAiY2VsbGJhc2UiLCAiY2VsbHZhbCIsICJieXRlc3RyaW5nIiwgInN1Ym5vZGVzIiwgInN1Ym5vZGUiLCAibGFiZWwiLCAwCiB9OwogI2VuZGlmCiAKQEAgLTQ5OSwxOSArNTA2LDE5IEBACiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KIHsKICAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LAotICAgICAyNjUsICAgMjY2LCAgIDI2NywgICAgNTksICAgIDQ1LCAgICA0NywgICAxMjMsICAgMTI1LCAgICA2MSwgICAgNjAsCi0gICAgICA2MiwgICAgOTEsICAgIDkzLCAgICA0NAorICAgICAyNjUsICAgMjY2LCAgIDI2NywgICAyNjgsICAgIDU5LCAgICA0NSwgICAgNDcsICAgMTIzLCAgIDEyNSwgICAgNjEsCisgICAgICA2MCwgICAgNjIsICAgIDkxLCAgICA5MywgICAgNDAsICAgIDQ0LCAgICA0MQogfTsKICMgZW5kaWYKIAogLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9CiB7Ci0gICAgICAgMCwgICAgMjQsICAgIDI1LCAgICAyNSwgICAgMjYsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI4LCAgICAyOSwKLSAgICAgIDI5LCAgICAzMCwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDMzLCAgICAzNCwgICAgMzQsICAgIDM1LAotICAgICAgMzUsICAgIDM1LCAgICAzNSwgICAgMzUsICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDM3LCAgICAzNywgICAgMzcsCi0gICAgICAzNywgICAgMzgsICAgIDM4LCAgICAzOSwgICAgMzksICAgIDQwLCAgICA0MCwgICAgNDAsICAgIDQxLCAgICA0MSwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQzCisgICAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMxLCAgICAzMiwKKyAgICAgIDMyLCAgICAzMywgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM2LCAgICAzNywgICAgMzcsICAgIDM4LAorICAgICAgMzgsICAgIDM4LCAgICAzOCwgICAgMzgsICAgIDM4LCAgICAzOCwgICAgMzksICAgIDM5LCAgICAzOSwgICAgNDAsCisgICAgICA0MCwgICAgNDAsICAgIDQwLCAgICA0MSwgICAgNDEsICAgIDQyLCAgICA0MiwgICAgNDMsICAgIDQzLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NCwgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDYKIH07CiAKIC8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KQEAgLTUxOSw5ICs1MjYsOSBAQAogewogICAgICAgIDAsICAgICAyLCAgICAgNCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDUsICAgICAwLCAgICAgMiwgICAgIDEsCiAgICAgICAgNiwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDUsICAgICAwLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwKLSAgICAgICA0LCAgICAgNCwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDIsCi0gICAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMQorICAgICAgIDQsICAgICA0LCAgICAgMiwgICAgIDksICAgICA1LCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDAsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwKKyAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMCwgICAgIDEKIH07CiAKIC8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQpAQCAtNTI5LDgxICs1MzYsODYgQEAKICAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9CiB7Ci0gICAgICAgNywgICAgIDAsICAgIDQzLCAgICAgMCwgICAgIDksICAgICAwLCAgICAgNywgICAgIDAsICAgICA0LCAgICAgMSwKKyAgICAgICA3LCAgICAgMCwgICAgNDUsICAgICAwLCAgICAgOSwgICAgIDAsICAgICA3LCAgICAgMCwgICAgIDQsICAgICAxLAogICAgICAgIDAsICAgICAzLCAgICAgOCwgICAgIDAsICAgICAwLCAgICAgNCwgICAgIDAsICAgIDE1LCAgICAxMywgICAgMTEsCi0gICAgICAxMiwgICAgIDAsICAgICAyLCAgICAgNSwgICAgIDAsICAgIDM4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxNiwKLSAgICAgICAwLCAgICAzOCwgICAgIDAsICAgICAwLCAgICAgNiwgICAgIDAsICAgIDQwLCAgICAzOSwgICAgIDAsICAgIDEwLAotICAgICAgMTQsICAgIDE4LCAgICAyNCwgICAgNDEsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDE3LCAgICAyNSwgICAgMTksCi0gICAgICAyNiwgICAgMjIsICAgIDI3LCAgICAzNSwgICAgMzEsICAgICAwLCAgICAzMywgICAgMzIsICAgIDMwLCAgICAyOSwKLSAgICAgIDIwLCAgICAgMCwgICAgMjgsICAgIDM2LCAgICAzNywgICAgMjEsICAgIDM0CisgICAgICAxMiwgICAgIDAsICAgICAyLCAgICAgNSwgICAgIDAsICAgIDQwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxNiwKKyAgICAgICAwLCAgICA0MCwgICAgIDAsICAgICAwLCAgICAgNiwgICAgIDAsICAgIDQyLCAgICA0MSwgICAgIDAsICAgIDEwLAorICAgICAgMTQsICAgIDE4LCAgICAyNiwgICAgNDMsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDE3LCAgICAyNywgICAgMTksCisgICAgICAyOCwgICAgMjIsICAgICAwLCAgICAyOSwgICAgMzcsICAgICAwLCAgICAzMywgICAgIDAsICAgICAwLCAgICAzNSwKKyAgICAgIDM0LCAgICAzMiwgICAgMzEsICAgIDIwLCAgICAgMCwgICAgMzAsICAgIDM4LCAgICAzOSwgICAgMjEsICAgICAwLAorICAgICAgMjQsICAgIDM2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMwogfTsKIAogLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KIHsKICAgICAgIC0xLCAgICAgMywgICAgMTQsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDI3LCAgICAxMSwgICAgMTgsICAgIDI1LAotICAgICAgMjksICAgIDQ0LCAgICA0NSwgICAgNTQsICAgIDYxLCAgICA2MiwgICAgNTUsICAgIDMwLCAgICAzMSwgICAgIDcKKyAgICAgIDI5LCAgICA0NCwgICAgNDUsICAgIDU2LCAgICA2NCwgICAgNjUsICAgIDU3LCAgICAzMCwgICAgMzEsICAgICA3CiB9OwogCiAvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKICAgIFNUQVRFLU5VTS4gICovCi0jZGVmaW5lIFlZUEFDVF9OSU5GIC0xMworI2RlZmluZSBZWVBBQ1RfTklORiAtMTQKIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXBhY3RbXSA9CiB7Ci0gICAgICAyMywgICAgMTEsICAgLTEzLCAgICAzNywgICAtMTMsICAgIC00LCAgICAxOCwgICAgMzksICAgIDE4LCAgIC0xMywKLSAgICAgIDI4LCAgIC0xMywgICAtMTMsICAgIDM0LCAgICAtNCwgICAgMTgsICAgIDQxLCAgIC0xMywgICAtMTMsICAgLTEzLAotICAgICAtMTMsICAgIDI1LCAgIC0xMywgICAtMTMsICAgIDM0LCAgICAtMywgICAgMzQsICAgIDMzLCAgICAzNCwgICAtMTMsCi0gICAgICAzMCwgICAgLTMsICAgIDQzLCAgICAzNiwgICAtMTMsICAgIDM4LCAgIC0xMywgICAtMTMsICAgIDIwLCAgIC0xMywKLSAgICAgLTEzLCAgIC0xMywgICAtMTMsICAgLTEzLCAgICAgMiwgICAgIDksICAgLTEzLCAgIC0xMywgICAtMTMsICAgLTEzLAotICAgICAtMTMsICAgLTEzLCAgIC0xMywgICAtMTMsICAgIC0yLCAgICAtNiwgICAtMTMsICAgLTEzLCAgIC0xMywgICAtMTMsCi0gICAgIC0xMywgICAgNDUsICAgLTEzLCAgIC0xMywgICAtMTMsICAgLTEzLCAgIC0xMworICAgICAgMzAsICAgLTExLCAgIC0xNCwgICAgIDcsICAgLTE0LCAgICAtMSwgICAgMjcsICAgIDEzLCAgICAyNywgICAtMTQsCisgICAgICAgOCwgICAtMTQsICAgLTE0LCAgICA0MCwgICAgLTEsICAgIDI3LCAgICAzNSwgICAtMTQsICAgLTE0LCAgIC0xNCwKKyAgICAgLTE0LCAgICAyMSwgICAtMTQsICAgLTE0LCAgICA0MCwgICAgMjQsICAgIDQwLCAgICAyOCwgICAgNDAsICAgLTE0LAorICAgICAgMzIsICAgIDI0LCAgICA0NiwgICAgMzgsICAgLTE0LCAgICAzOSwgICAtMTQsICAgLTE0LCAgICAyNiwgICAtMTQsCisgICAgIC0xNCwgICAtMTQsICAgLTE0LCAgIC0xNCwgICAgLTksICAgIDEwLCAgIC0xNCwgICAtMTQsICAgLTE0LCAgIC0xNCwKKyAgICAgLTE0LCAgIC0xNCwgICAgMzEsICAgLTE0LCAgIC0xNCwgICAgNDQsICAgIC0yLCAgICAgMywgICAgMjMsICAgLTE0LAorICAgICAtMTQsICAgLTE0LCAgIC0xNCwgICAtMTQsICAgIDUwLCAgIC0xNCwgICAtMTQsICAgLTE0LCAgIC0xNCwgICAgNDAsCisgICAgIC0xNCwgICAtMTQsICAgIDMzLCAgICA0MCwgICAgMzYsICAgLTE0CiB9OwogCiAvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9bXSA9CiB7Ci0gICAgIC0xMywgICAtMTMsICAgIDM1LCAgICAyNywgICAgNDcsICAgLTEzLCAgIC0xMiwgICAgNDAsICAgIDE3LCAgIC0xMywKLSAgICAgIDI2LCAgIC0xMywgICAtMTMsICAgLTEzLCAgIC0xMywgICAtMTMsICAgLTEzLCAgICAyOSwgICAtMTMsICAgIC04CisgICAgIC0xNCwgICAtMTQsICAgIDQ4LCAgICAyOSwgICAgNTMsICAgLTE0LCAgIC0xMywgICAgNDcsICAgIDM0LCAgIC0xNCwKKyAgICAgIDM3LCAgIC0xNCwgICAtMTQsICAgLTE0LCAgIC0xNCwgICAtMTQsICAgLTE0LCAgICA0MiwgICAtMTQsICAgIC03CiB9OwogCiAvKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKICAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAogICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdoYXQgWVlERUZBQ1Qgc2F5cy4KICAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC00MworI2RlZmluZSBZWVRBQkxFX05JTkYgLTQ1CiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXl0YWJsZVtdID0KIHsKLSAgICAgIDE2LCAgICAyMSwgICAtNDIsICAgIDYzLCAgICA1NiwgICAgNjQsICAgIDU3LCAgICAxNiwgICAgIDIsICAgIDU4LAotICAgICAgNTksICAgIDEwLCAgICAyOCwgICAgNDYsICAgIDMzLCAgICA0NywgICAgNjUsICAgIDMyLCAgICA2MCwgICAgNDksCi0gICAgICA1MCwgICAgNTEsICAgLTQyLCAgICAzMiwgICAgIDgsICAgIDQ4LCAgICAgMSwgICAtNDIsICAgIDUyLCAgICAgMiwKLSAgICAgIDUzLCAgICAxOSwgICAgMjAsICAgIDQxLCAgICAgMiwgICAgMTUsICAgIDE3LCAgICAgOSwgICAgNDIsICAgIDI2LAotICAgICAgMTksICAgIDIwLCAgICAxNSwgICAgMTMsICAgIDE3LCAgICAyNCwgICAgMzQsICAgIDM1LCAgICAzOCwgICAgMzksCi0gICAgICAyMywgICAgNDAsICAgIDY2LCAgICAxMiwgICAgMjIsICAgIDQzLCAgICAgMCwgICAgMzYsICAgICAwLCAgICAgMCwKLSAgICAgIDM3CisgICAgICAyMSwgICAgMTYsICAgIDQ2LCAgICAgOCwgICAgNTksICAgIDQ3LCAgICA2MCwgICAgIDksICAgIDE2LCAgICA2MSwKKyAgICAgIDYyLCAgICAyOCwgICAgNjYsICAgIDMzLCAgICA2NywgICAgMTAsICAgIDQ4LCAgICAxMywgICAgMzIsICAgIDYzLAorICAgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDMyLCAgICAxNywgICAgNjgsICAgIDE5LCAgICAyMCwgICAtNDQsCisgICAgICA1MywgICAtNDQsICAgIDU0LCAgICAgMSwgICAtNDQsICAgICAyLCAgICAyNiwgICAgMTUsICAgICAyLCAgICAyNCwKKyAgICAgIDQxLCAgICAgMiwgICAgMzQsICAgIDE3LCAgICAxNSwgICAgNDIsICAgIDE5LCAgICAyMCwgICAgNjksICAgIDcwLAorICAgICAgMzUsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDU4LCAgICA1NSwgICAgNzIsICAgIDcxLCAgICA3MywgICAgMTIsCisgICAgICA3NCwgICAgMjIsICAgIDc1LCAgICAyMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM2LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgNDMsICAgIDM3CiB9OwogCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KIHsKLSAgICAgICA4LCAgICAxMywgICAgIDUsICAgICA5LCAgICAgNiwgICAgMTEsICAgICA4LCAgICAxNSwgICAgMTEsICAgIDExLAotICAgICAgMTIsICAgIDE1LCAgICAyNCwgICAgMTEsICAgIDI2LCAgICAxMywgICAgMjIsICAgIDI1LCAgICAyMCwgICAgMTAsCi0gICAgICAxMSwgICAgMTIsICAgICA0LCAgICAzMSwgICAgMTMsICAgIDIzLCAgICAgMywgICAgIDQsICAgIDE5LCAgICAxMSwKLSAgICAgIDIxLCAgICAgNiwgICAgIDcsICAgIDEzLCAgICAxMSwgICAgIDgsICAgIDE2LCAgICAgMCwgICAgMTgsICAgIDE0LAotICAgICAgIDYsICAgICA3LCAgICAxNSwgICAgIDQsICAgIDE2LCAgICAgNCwgICAgMTMsICAgIDE3LCAgICAgNSwgICAgMTMsCi0gICAgICAxNSwgICAgMTMsICAgICA3LCAgICAgNiwgICAgMTQsICAgIDM4LCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAtMSwKLSAgICAgIDMxCisgICAgICAxMywgICAgIDgsICAgIDExLCAgICAxNCwgICAgIDYsICAgIDE0LCAgICAgOCwgICAgIDAsICAgIDE1LCAgICAxMSwKKyAgICAgIDEyLCAgICAyNCwgICAgIDksICAgIDI2LCAgICAxMSwgICAgMTYsICAgIDI1LCAgICAgNCwgICAgMjUsICAgIDIxLAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDMxLCAgICAxNywgICAgMjMsICAgICA2LCAgICAgNywgICAgIDUsCisgICAgICAyMCwgICAgIDQsICAgIDIyLCAgICAgMywgICAgIDQsICAgIDExLCAgICAxNSwgICAgIDgsICAgIDExLCAgICAgNCwKKyAgICAgIDE0LCAgICAxMSwgICAgMTQsICAgIDE3LCAgICAxNSwgICAgMTksICAgICA2LCAgICAgNywgICAgMjUsICAgIDI2LAorICAgICAgMTgsICAgICA1LCAgICAxNCwgICAgMTQsICAgIDEwLCAgICAyNCwgICAgNjksICAgICA3LCAgICAyNSwgICAgIDYsCisgICAgICA3MywgICAgMTQsICAgIDI2LCAgICAxNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDMxLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDMxCiB9OwogCiAvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwogICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KIHsKLSAgICAgICAwLCAgICAgMywgICAgMTEsICAgIDI1LCAgICAyNywgICAgMjgsICAgIDI5LCAgICA0MywgICAgMTMsICAgICAwLAotICAgICAgMTUsICAgIDMxLCAgICAyOCwgICAgIDQsICAgIDI2LCAgICAyNywgICAgNDMsICAgIDE2LCAgICAzMiwgICAgIDYsCi0gICAgICAgNywgICAgMzAsICAgIDMxLCAgICAyNiwgICAgIDQsICAgIDMzLCAgICAxNCwgICAgMzAsICAgIDMwLCAgICAzNCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDMwLCAgICAxMywgICAgMTcsICAgIDM0LCAgICA0MSwgICAgIDUsICAgIDEzLAotICAgICAgMTMsICAgIDEzLCAgICAxOCwgICAgMzIsICAgIDM1LCAgICAzNiwgICAgMTEsICAgIDEzLCAgICAyMywgICAgMTAsCi0gICAgICAxMSwgICAgMTIsICAgIDE5LCAgICAyMSwgICAgMzcsICAgIDQwLCAgICAgNiwgICAgIDgsICAgIDExLCAgICAxMiwKLSAgICAgIDIwLCAgICAzOCwgICAgMzksICAgICA5LCAgICAxMSwgICAgMjIsICAgICA3CisgICAgICAgMCwgICAgIDMsICAgIDExLCAgICAyOCwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgNDYsICAgIDE0LCAgICAgMCwKKyAgICAgIDE2LCAgICAzNCwgICAgMzEsICAgICA0LCAgICAyOSwgICAgMzAsICAgIDQ2LCAgICAxNywgICAgMzUsICAgICA2LAorICAgICAgIDcsICAgIDMzLCAgICAzNCwgICAgMjksICAgICA0LCAgICAzNiwgICAgMTUsICAgIDMzLCAgICAzMywgICAgMzcsCisgICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAzMywgICAgMTQsICAgIDE4LCAgICAzNywgICAgNDQsICAgICA1LCAgICAxNCwKKyAgICAgIDE0LCAgICAxNCwgICAgMTksICAgIDM1LCAgICAzOCwgICAgMzksICAgIDExLCAgICAxNCwgICAgMjUsICAgIDEwLAorICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMjAsICAgIDIyLCAgICAyNCwgICAgNDAsICAgIDQzLCAgICAxMCwgICAgIDYsCisgICAgICAgOCwgICAgMTEsICAgIDEyLCAgICAyMSwgICAgNDEsICAgIDQyLCAgICAgOSwgICAgMTEsICAgIDIzLCAgICAyNSwKKyAgICAgIDI2LCAgICAgNywgICAgMzMsICAgIDI1LCAgICAzMywgICAgMjYKIH07CiAKICNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKQEAgLTE0NDAsMjg5ICsxNDUyLDMyMyBAQAogICBzd2l0Y2ggKHl5bikKICAgICB7CiAgICAgICAgIGNhc2UgMjoKLSNsaW5lIDg2ICJkdGMtcGFyc2VyLnkiCisjbGluZSA5MCAiZHRjLXBhcnNlci55IgogICAgIHsKLQkJCXRoZV9ib290X2luZm8gPSBidWlsZF9ib290X2luZm8oKHl5dnNwWygzKSAtICg0KV0ucmUpLCAoeXl2c3BbKDQpIC0gKDQpXS5ub2RlKSk7CisJCQl0aGVfYm9vdF9pbmZvID0gYnVpbGRfYm9vdF9pbmZvKCh5eXZzcFsoMykgLSAoNCldLnJlKSwgKHl5dnNwWyg0KSAtICg0KV0ubm9kZSksIDApOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzoKLSNsaW5lIDkwICJkdGMtcGFyc2VyLnkiCisjbGluZSA5NCAiZHRjLXBhcnNlci55IgogICAgIHsKLQkJCXRoZV9ib290X2luZm8gPSBidWlsZF9ib290X2luZm8oKHl5dnNwWygxKSAtICgyKV0ucmUpLCAoeXl2c3BbKDIpIC0gKDIpXS5ub2RlKSk7CisJCQl0aGVfYm9vdF9pbmZvID0gYnVpbGRfYm9vdF9pbmZvKCh5eXZzcFsoMSkgLSAoMildLnJlKSwgKHl5dnNwWygyKSAtICgyKV0ubm9kZSksIDApOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDoKLSNsaW5lIDk3ICJkdGMtcGFyc2VyLnkiCisjbGluZSAxMDEgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwucmUpID0gTlVMTDsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDU6Ci0jbGluZSAxMDEgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDEwNSAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5yZSkgPSBjaGFpbl9yZXNlcnZlX2VudHJ5KCh5eXZzcFsoMSkgLSAoMildLnJlKSwgKHl5dnNwWygyKSAtICgyKV0ucmUpKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDY6Ci0jbGluZSAxMDggImR0Yy1wYXJzZXIueSIKKyNsaW5lIDExMiAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5yZSkgPSBidWlsZF9yZXNlcnZlX2VudHJ5KCh5eXZzcFsoMykgLSAoNSldLmFkZHIpLCAoeXl2c3BbKDQpIC0gKDUpXS5hZGRyKSwgKHl5dnNwWygxKSAtICg1KV0ubGFiZWxyZWYpKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDc6Ci0jbGluZSAxMTUgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDExOSAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5yZSkgPSBOVUxMOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgODoKLSNsaW5lIDExOSAiZHRjLXBhcnNlci55IgorI2xpbmUgMTIzICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLnJlKSA9IGNoYWluX3Jlc2VydmVfZW50cnkoKHl5dnNwWygxKSAtICgyKV0ucmUpLCAoeXl2c3BbKDIpIC0gKDIpXS5yZSkpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOToKLSNsaW5lIDEyNiAiZHRjLXBhcnNlci55IgorI2xpbmUgMTMwICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLnJlKSA9ICh5eXZzcFsoMSkgLSAoMSldLnJlKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDEwOgotI2xpbmUgMTMwICJkdGMtcGFyc2VyLnkiCisjbGluZSAxMzQgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwucmUpID0gYnVpbGRfcmVzZXJ2ZV9lbnRyeSgoeXl2c3BbKDMpIC0gKDYpXS5hZGRyKSwgKHl5dnNwWyg1KSAtICg2KV0uYWRkcikgLSAoeXl2c3BbKDMpIC0gKDYpXS5hZGRyKSArIDEsICh5eXZzcFsoMSkgLSAoNildLmxhYmVscmVmKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKLSNsaW5lIDEzNyAiZHRjLXBhcnNlci55IgorI2xpbmUgMTQxICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmFkZHIpID0gZXZhbF9saXRlcmFsKCh5eXZzcFsoMSkgLSAoMSldLmxpdGVyYWwpLCAwLCA2NCk7CiAJCTt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjoKLSNsaW5lIDE0MSAiZHRjLXBhcnNlci55IgorI2xpbmUgMTQ1ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmFkZHIpID0gZXZhbF9saXRlcmFsKCh5eXZzcFsoMSkgLSAoMSldLmxpdGVyYWwpLCAxNiwgNjQpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM6Ci0jbGluZSAxNDggImR0Yy1wYXJzZXIueSIKKyNsaW5lIDE1MiAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5ub2RlKSA9IG5hbWVfbm9kZSgoeXl2c3BbKDIpIC0gKDIpXS5ub2RlKSwgIiIsIE5VTEwpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ6Ci0jbGluZSAxNTUgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDE1OSAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5ub2RlKSA9IGJ1aWxkX25vZGUoKHl5dnNwWygyKSAtICg1KV0ucHJvcGxpc3QpLCAoeXl2c3BbKDMpIC0gKDUpXS5ub2RlbGlzdCkpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU6Ci0jbGluZSAxNjIgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDE2NiAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5wcm9wbGlzdCkgPSBOVUxMOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY6Ci0jbGluZSAxNjYgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDE3MCAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5wcm9wbGlzdCkgPSBjaGFpbl9wcm9wZXJ0eSgoeXl2c3BbKDIpIC0gKDIpXS5wcm9wKSwgKHl5dnNwWygxKSAtICgyKV0ucHJvcGxpc3QpKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDE3OgotI2xpbmUgMTczICJkdGMtcGFyc2VyLnkiCisjbGluZSAxNzcgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwucHJvcCkgPSBidWlsZF9wcm9wZXJ0eSgoeXl2c3BbKDIpIC0gKDUpXS5wcm9wbm9kZW5hbWUpLCAoeXl2c3BbKDQpIC0gKDUpXS5kYXRhKSwgKHl5dnNwWygxKSAtICg1KV0ubGFiZWxyZWYpKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDE4OgotI2xpbmUgMTc3ICJkdGMtcGFyc2VyLnkiCisjbGluZSAxODEgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwucHJvcCkgPSBidWlsZF9wcm9wZXJ0eSgoeXl2c3BbKDIpIC0gKDMpXS5wcm9wbm9kZW5hbWUpLCBlbXB0eV9kYXRhLCAoeXl2c3BbKDEpIC0gKDMpXS5sYWJlbHJlZikpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk6Ci0jbGluZSAxODQgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDE4OCAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9IGRhdGFfbWVyZ2UoKHl5dnNwWygxKSAtICgyKV0uZGF0YSksICh5eXZzcFsoMikgLSAoMildLmRhdGEpKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDIwOgotI2xpbmUgMTg4ICJkdGMtcGFyc2VyLnkiCi0gICAgewotCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9tZXJnZSgoeXl2c3BbKDEpIC0gKDQpXS5kYXRhKSwgKHl5dnNwWygzKSAtICg0KV0uZGF0YSkpOwotCQk7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjE6CiAjbGluZSAxOTIgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuZGF0YSkgPSBkYXRhX21lcmdlKCh5eXZzcFsoMSkgLSAoNCldLmRhdGEpLCAoeXl2c3BbKDMpIC0gKDQpXS5kYXRhKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMjoKKyAgY2FzZSAyMToKICNsaW5lIDE5NiAiZHRjLXBhcnNlci55IgogICAgIHsKKwkJCSh5eXZhbC5kYXRhKSA9IGRhdGFfbWVyZ2UoKHl5dnNwWygxKSAtICg0KV0uZGF0YSksICh5eXZzcFsoMykgLSAoNCldLmRhdGEpKTsKKwkJO30KKyAgICBicmVhazsKKworICBjYXNlIDIyOgorI2xpbmUgMjAwICJkdGMtcGFyc2VyLnkiCisgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9hZGRfbWFya2VyKCh5eXZzcFsoMSkgLSAoMildLmRhdGEpLCBSRUZfUEFUSCwgKHl5dnNwWygyKSAtICgyKV0ubGFiZWxyZWYpKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDIzOgotI2xpbmUgMjAwICJkdGMtcGFyc2VyLnkiCisjbGluZSAyMDQgImR0Yy1wYXJzZXIueSIKKyAgICB7CisJCQlzdHJ1Y3Qgc2VhcmNoX3BhdGggcGF0aCA9IHsgc3JjcG9zX2ZpbGUtPmRpciwgTlVMTCwgTlVMTCB9OworCQkJc3RydWN0IGR0Y19maWxlICpmaWxlID0gZHRjX29wZW5fZmlsZSgoeXl2c3BbKDQpIC0gKDkpXS5kYXRhKS52YWwsICZwYXRoKTsKKwkJCXN0cnVjdCBkYXRhIGQgPSBlbXB0eV9kYXRhOworCisJCQlpZiAoKHl5dnNwWyg2KSAtICg5KV0uYWRkcikgIT0gMCkKKwkJCQlpZiAoZnNlZWsoZmlsZS0+ZmlsZSwgKHl5dnNwWyg2KSAtICg5KV0uYWRkciksIFNFRUtfU0VUKSAhPSAwKQorCQkJCQl5eWVycm9yZigiQ291bGRuJ3Qgc2VlayB0byBvZmZzZXQgJWxsdSBpbiBcIiVzXCI6ICVzIiwKKwkJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSh5eXZzcFsoNikgLSAoOSldLmFkZHIpLAorCQkJCQkJICh5eXZzcFsoNCkgLSAoOSldLmRhdGEpLnZhbCwgc3RyZXJyb3IoZXJybm8pKTsKKworCQkJZCA9IGRhdGFfY29weV9maWxlKGZpbGUtPmZpbGUsICh5eXZzcFsoOCkgLSAoOSldLmFkZHIpKTsKKworCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9tZXJnZSgoeXl2c3BbKDEpIC0gKDkpXS5kYXRhKSwgZCk7CisJCQlkdGNfY2xvc2VfZmlsZShmaWxlKTsKKwkJO30KKyAgICBicmVhazsKKworICBjYXNlIDI0OgorI2xpbmUgMjIxICJkdGMtcGFyc2VyLnkiCisgICAgeworCQkJc3RydWN0IHNlYXJjaF9wYXRoIHBhdGggPSB7IHNyY3Bvc19maWxlLT5kaXIsIE5VTEwsIE5VTEwgfTsKKwkJCXN0cnVjdCBkdGNfZmlsZSAqZmlsZSA9IGR0Y19vcGVuX2ZpbGUoKHl5dnNwWyg0KSAtICg1KV0uZGF0YSkudmFsLCAmcGF0aCk7CisJCQlzdHJ1Y3QgZGF0YSBkID0gZW1wdHlfZGF0YTsKKworCQkJZCA9IGRhdGFfY29weV9maWxlKGZpbGUtPmZpbGUsIC0xKTsKKworCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9tZXJnZSgoeXl2c3BbKDEpIC0gKDUpXS5kYXRhKSwgZCk7CisJCQlkdGNfY2xvc2VfZmlsZShmaWxlKTsKKwkJO30KKyAgICBicmVhazsKKworICBjYXNlIDI1OgorI2xpbmUgMjMyICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9hZGRfbWFya2VyKCh5eXZzcFsoMSkgLSAoMildLmRhdGEpLCBMQUJFTCwgKHl5dnNwWygyKSAtICgyKV0ubGFiZWxyZWYpKTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDI0OgotI2xpbmUgMjA3ICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgMjY6CisjbGluZSAyMzkgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuZGF0YSkgPSBlbXB0eV9kYXRhOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjU6Ci0jbGluZSAyMTEgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAyNzoKKyNsaW5lIDI0MyAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9ICh5eXZzcFsoMSkgLSAoMildLmRhdGEpOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjY6Ci0jbGluZSAyMTUgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAyODoKKyNsaW5lIDI0NyAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9IGRhdGFfYWRkX21hcmtlcigoeXl2c3BbKDEpIC0gKDIpXS5kYXRhKSwgTEFCRUwsICh5eXZzcFsoMikgLSAoMildLmxhYmVscmVmKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNzoKLSNsaW5lIDIyMiAiZHRjLXBhcnNlci55IgorICBjYXNlIDI5OgorI2xpbmUgMjU0ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZW1wdHlfZGF0YTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDI4OgotI2xpbmUgMjI2ICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgMzA6CisjbGluZSAyNTggImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuZGF0YSkgPSBkYXRhX2FwcGVuZF9jZWxsKCh5eXZzcFsoMSkgLSAoMildLmRhdGEpLCAoeXl2c3BbKDIpIC0gKDIpXS5jZWxsKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyOToKLSNsaW5lIDIzMCAiZHRjLXBhcnNlci55IgorICBjYXNlIDMxOgorI2xpbmUgMjYyICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9hcHBlbmRfY2VsbChkYXRhX2FkZF9tYXJrZXIoKHl5dnNwWygxKSAtICgyKV0uZGF0YSksIFJFRl9QSEFORExFLAogCQkJCQkJCSAgICAgICh5eXZzcFsoMikgLSAoMildLmxhYmVscmVmKSksIC0xKTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDMwOgotI2xpbmUgMjM1ICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgMzI6CisjbGluZSAyNjcgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuZGF0YSkgPSBkYXRhX2FkZF9tYXJrZXIoKHl5dnNwWygxKSAtICgyKV0uZGF0YSksIExBQkVMLCAoeXl2c3BbKDIpIC0gKDIpXS5sYWJlbHJlZikpOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzE6Ci0jbGluZSAyNDIgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAzMzoKKyNsaW5lIDI3NCAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5jYmFzZSkgPSAxNjsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDMzOgotI2xpbmUgMjUwICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgMzU6CisjbGluZSAyODIgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuY2VsbCkgPSBldmFsX2xpdGVyYWwoKHl5dnNwWygxKSAtICgxKV0ubGl0ZXJhbCksIDAsIDMyKTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDM0OgotI2xpbmUgMjU0ICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgMzY6CisjbGluZSAyODYgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuY2VsbCkgPSBldmFsX2xpdGVyYWwoKHl5dnNwWygyKSAtICgyKV0ubGl0ZXJhbCksICh5eXZzcFsoMSkgLSAoMildLmNiYXNlKSwgMzIpOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzU6Ci0jbGluZSAyNjEgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAzNzoKKyNsaW5lIDI5MyAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9IGVtcHR5X2RhdGE7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzNjoKLSNsaW5lIDI2NSAiZHRjLXBhcnNlci55IgorICBjYXNlIDM4OgorI2xpbmUgMjk3ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9hcHBlbmRfYnl0ZSgoeXl2c3BbKDEpIC0gKDIpXS5kYXRhKSwgKHl5dnNwWygyKSAtICgyKV0uYnl0ZSkpOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzc6Ci0jbGluZSAyNjkgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAzOToKKyNsaW5lIDMwMSAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9IGRhdGFfYWRkX21hcmtlcigoeXl2c3BbKDEpIC0gKDIpXS5kYXRhKSwgTEFCRUwsICh5eXZzcFsoMikgLSAoMildLmxhYmVscmVmKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzODoKLSNsaW5lIDI3NiAiZHRjLXBhcnNlci55IgorICBjYXNlIDQwOgorI2xpbmUgMzA4ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLm5vZGVsaXN0KSA9IE5VTEw7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzOToKLSNsaW5lIDI4MCAiZHRjLXBhcnNlci55IgorICBjYXNlIDQxOgorI2xpbmUgMzEyICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLm5vZGVsaXN0KSA9IGNoYWluX25vZGUoKHl5dnNwWygxKSAtICgyKV0ubm9kZSksICh5eXZzcFsoMikgLSAoMildLm5vZGVsaXN0KSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0MDoKLSNsaW5lIDI4NCAiZHRjLXBhcnNlci55IgorICBjYXNlIDQyOgorI2xpbmUgMzE2ICJkdGMtcGFyc2VyLnkiCiAgICAgewotCQkJeXllcnJvcigic3ludGF4IGVycm9yOiBwcm9wZXJ0aWVzIG11c3QgcHJlY2VkZSBzdWJub2Rlc1xuIik7CisJCQl5eWVycm9yKCJzeW50YXggZXJyb3I6IHByb3BlcnRpZXMgbXVzdCBwcmVjZWRlIHN1Ym5vZGVzIik7CiAJCQlZWUVSUk9SOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDE6Ci0jbGluZSAyOTIgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSA0MzoKKyNsaW5lIDMyNCAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5ub2RlKSA9IG5hbWVfbm9kZSgoeXl2c3BbKDMpIC0gKDMpXS5ub2RlKSwgKHl5dnNwWygyKSAtICgzKV0ucHJvcG5vZGVuYW1lKSwgKHl5dnNwWygxKSAtICgzKV0ubGFiZWxyZWYpKTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDQyOgotI2xpbmUgMjk5ICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgNDQ6CisjbGluZSAzMzEgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwubGFiZWxyZWYpID0gTlVMTDsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDQzOgotI2xpbmUgMzAzICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgNDU6CisjbGluZSAzMzUgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwubGFiZWxyZWYpID0gKHl5dnNwWygxKSAtICgxKV0ubGFiZWxyZWYpOwogCQk7fQpAQCAtMTczMCw3ICsxNzc2LDcgQEAKIAogCiAvKiBMaW5lIDEyNjcgb2YgeWFjYy5jLiAgKi8KLSNsaW5lIDE3MzQgImR0Yy1wYXJzZXIudGFiLmMiCisjbGluZSAxNzgwICJkdGMtcGFyc2VyLnRhYi5jIgogICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgfQogICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxvYyk7CkBAIC0xOTUwLDIxICsxOTk2LDMyIEBACiB9CiAKIAotI2xpbmUgMzA4ICJkdGMtcGFyc2VyLnkiCisjbGluZSAzNDAgImR0Yy1wYXJzZXIueSIKIAogCi12b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKnMpCit2b2lkIHl5ZXJyb3JmKGNoYXIgY29uc3QgKnMsIC4uLikKIHsKLQljb25zdCBjaGFyICpmbmFtZSA9IHNyY3Bvc19maWxlbmFtZV9mb3JfbnVtKHl5bGxvYy5maWxlbnVtKTsKKwljb25zdCBjaGFyICpmbmFtZSA9IHNyY3Bvc19maWxlID8gc3JjcG9zX2ZpbGUtPm5hbWUgOiAiPG5vLWZpbGU+IjsKKwl2YV9saXN0IHZhOworCXZhX3N0YXJ0KHZhLCBzKTsKIAogCWlmIChzdHJjbXAoZm5hbWUsICItIikgPT0gMCkKIAkJZm5hbWUgPSAic3RkaW4iOwogCi0JZnByaW50ZihzdGRlcnIsICIlczolZCAlc1xuIiwKLQkJZm5hbWUsIHl5bGxvYy5maXJzdF9saW5lLCBzKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkICIsIGZuYW1lLCB5eWxsb2MuZmlyc3RfbGluZSk7CisJdmZwcmludGYoc3RkZXJyLCBzLCB2YSk7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCisJdHJlZXNvdXJjZV9lcnJvciA9IDE7CisJdmFfZW5kKHZhKTsKIH0KIAotdW5zaWduZWQgbG9uZyBsb25nIGV2YWxfbGl0ZXJhbChjb25zdCBjaGFyICpzLCBpbnQgYmFzZSwgaW50IGJpdHMpCit2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKnMpCit7CisJeXllcnJvcmYoIiVzIiwgcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXZhbF9saXRlcmFsKGNvbnN0IGNoYXIgKnMsIGludCBiYXNlLCBpbnQgYml0cykKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOwogCWNoYXIgKmU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1wYXJzZXIudGFiLmhfc2hpcHBlZCBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuaF9zaGlwcGVkCmluZGV4IDQ3MDdiMDIuLmJhOTkxMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuaF9zaGlwcGVkCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuaF9zaGlwcGVkCkBAIC00OCw3ICs0OCw4IEBACiAgICAgIERUX0JZVEUgPSAyNjQsCiAgICAgIERUX1NUUklORyA9IDI2NSwKICAgICAgRFRfTEFCRUwgPSAyNjYsCi0gICAgIERUX1JFRiA9IDI2NworICAgICBEVF9SRUYgPSAyNjcsCisgICAgIERUX0lOQ0JJTiA9IDI2OAogICAgfTsKICNlbmRpZgogLyogVG9rZW5zLiAgKi8KQEAgLTYyLDIyICs2MywyMyBAQAogI2RlZmluZSBEVF9TVFJJTkcgMjY1CiAjZGVmaW5lIERUX0xBQkVMIDI2NgogI2RlZmluZSBEVF9SRUYgMjY3CisjZGVmaW5lIERUX0lOQ0JJTiAyNjgKIAogCiAKIAogI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECiB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKLSNsaW5lIDM0ICJkdGMtcGFyc2VyLnkiCisjbGluZSAzNyAiZHRjLXBhcnNlci55IgogewogCWNoYXIgKnByb3Bub2RlbmFtZTsKIAljaGFyICpsaXRlcmFsOwogCWNoYXIgKmxhYmVscmVmOwogCXVuc2lnbmVkIGludCBjYmFzZTsKLQl1OCBieXRlOworCXVpbnQ4X3QgYnl0ZTsKIAlzdHJ1Y3QgZGF0YSBkYXRhOwogCi0JdTY0IGFkZHI7CisJdWludDY0X3QgYWRkcjsKIAljZWxsX3QgY2VsbDsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wbGlzdDsKQEAgLTg2LDcgKzg4LDcgQEAKIAlzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpyZTsKIH0KIC8qIExpbmUgMTQ4OSBvZiB5YWNjLmMuICAqLwotI2xpbmUgOTAgImR0Yy1wYXJzZXIudGFiLmgiCisjbGluZSA5MiAiZHRjLXBhcnNlci50YWIuaCIKIAlZWVNUWVBFOwogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1wYXJzZXIueSBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci55CmluZGV4IDAwMmVhN2YuLmIyYWI1NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci55CisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci55CkBAIC0yMSwxNCArMjEsMTcgQEAKICVsb2NhdGlvbnMKIAogJXsKKyNpbmNsdWRlIDxzdGRpby5oPgorCiAjaW5jbHVkZSAiZHRjLmgiCiAjaW5jbHVkZSAic3JjcG9zLmgiCiAKLWludCB5eWxleCh2b2lkKTsKLXVuc2lnbmVkIGxvbmcgbG9uZyBldmFsX2xpdGVyYWwoY29uc3QgY2hhciAqcywgaW50IGJhc2UsIGludCBiaXRzKTsKK2V4dGVybiBpbnQgeXlsZXgodm9pZCk7CiAKIGV4dGVybiBzdHJ1Y3QgYm9vdF9pbmZvICp0aGVfYm9vdF9pbmZvOworZXh0ZXJuIGludCB0cmVlc291cmNlX2Vycm9yOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGV2YWxfbGl0ZXJhbChjb25zdCBjaGFyICpzLCBpbnQgYmFzZSwgaW50IGJpdHMpOwogJX0KIAogJXVuaW9uIHsKQEAgLTM2LDEwICszOSwxMCBAQAogCWNoYXIgKmxpdGVyYWw7CiAJY2hhciAqbGFiZWxyZWY7CiAJdW5zaWduZWQgaW50IGNiYXNlOwotCXU4IGJ5dGU7CisJdWludDhfdCBieXRlOwogCXN0cnVjdCBkYXRhIGRhdGE7CiAKLQl1NjQgYWRkcjsKKwl1aW50NjRfdCBhZGRyOwogCWNlbGxfdCBjZWxsOwogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3BsaXN0OwpAQCAtNTgsNiArNjEsNyBAQAogJXRva2VuIDxkYXRhPiBEVF9TVFJJTkcKICV0b2tlbiA8bGFiZWxyZWY+IERUX0xBQkVMCiAldG9rZW4gPGxhYmVscmVmPiBEVF9SRUYKKyV0b2tlbiBEVF9JTkNCSU4KIAogJXR5cGUgPGRhdGE+IHByb3BkYXRhCiAldHlwZSA8ZGF0YT4gcHJvcGRhdGFwcmVmaXgKQEAgLTg0LDExICs4OCwxMSBAQAogc291cmNlZmlsZToKIAkgIERUX1YxICc7JyBtZW1yZXNlcnZlcyBkZXZpY2V0cmVlCiAJCXsKLQkJCXRoZV9ib290X2luZm8gPSBidWlsZF9ib290X2luZm8oJDMsICQ0KTsKKwkJCXRoZV9ib290X2luZm8gPSBidWlsZF9ib290X2luZm8oJDMsICQ0LCAwKTsKIAkJfQogCXwgdjBfbWVtcmVzZXJ2ZXMgZGV2aWNldHJlZQogCQl7Ci0JCQl0aGVfYm9vdF9pbmZvID0gYnVpbGRfYm9vdF9pbmZvKCQxLCAkMik7CisJCQl0aGVfYm9vdF9pbmZvID0gYnVpbGRfYm9vdF9pbmZvKCQxLCAkMiwgMCk7CiAJCX0KIAk7CiAKQEAgLTE5Niw2ICsyMDAsMzQgQEAKIAkJewogCQkJJCQgPSBkYXRhX2FkZF9tYXJrZXIoJDEsIFJFRl9QQVRILCAkMik7CiAJCX0KKwl8IHByb3BkYXRhcHJlZml4IERUX0lOQ0JJTiAnKCcgRFRfU1RSSU5HICcsJyBhZGRyICcsJyBhZGRyICcpJworCQl7CisJCQlzdHJ1Y3Qgc2VhcmNoX3BhdGggcGF0aCA9IHsgc3JjcG9zX2ZpbGUtPmRpciwgTlVMTCwgTlVMTCB9OworCQkJc3RydWN0IGR0Y19maWxlICpmaWxlID0gZHRjX29wZW5fZmlsZSgkNC52YWwsICZwYXRoKTsKKwkJCXN0cnVjdCBkYXRhIGQgPSBlbXB0eV9kYXRhOworCisJCQlpZiAoJDYgIT0gMCkKKwkJCQlpZiAoZnNlZWsoZmlsZS0+ZmlsZSwgJDYsIFNFRUtfU0VUKSAhPSAwKQorCQkJCQl5eWVycm9yZigiQ291bGRuJ3Qgc2VlayB0byBvZmZzZXQgJWxsdSBpbiBcIiVzXCI6ICVzIiwKKwkJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSQ2LAorCQkJCQkJICQ0LnZhbCwgc3RyZXJyb3IoZXJybm8pKTsKKworCQkJZCA9IGRhdGFfY29weV9maWxlKGZpbGUtPmZpbGUsICQ4KTsKKworCQkJJCQgPSBkYXRhX21lcmdlKCQxLCBkKTsKKwkJCWR0Y19jbG9zZV9maWxlKGZpbGUpOworCQl9CisJfCBwcm9wZGF0YXByZWZpeCBEVF9JTkNCSU4gJygnIERUX1NUUklORyAnKScKKwkJeworCQkJc3RydWN0IHNlYXJjaF9wYXRoIHBhdGggPSB7IHNyY3Bvc19maWxlLT5kaXIsIE5VTEwsIE5VTEwgfTsKKwkJCXN0cnVjdCBkdGNfZmlsZSAqZmlsZSA9IGR0Y19vcGVuX2ZpbGUoJDQudmFsLCAmcGF0aCk7CisJCQlzdHJ1Y3QgZGF0YSBkID0gZW1wdHlfZGF0YTsKKworCQkJZCA9IGRhdGFfY29weV9maWxlKGZpbGUtPmZpbGUsIC0xKTsKKworCQkJJCQgPSBkYXRhX21lcmdlKCQxLCBkKTsKKwkJCWR0Y19jbG9zZV9maWxlKGZpbGUpOworCQl9CiAJfCBwcm9wZGF0YSBEVF9MQUJFTAogCQl7CiAJCQkkJCA9IGRhdGFfYWRkX21hcmtlcigkMSwgTEFCRUwsICQyKTsKQEAgLTI4Miw3ICszMTQsNyBAQAogCQl9CiAJfCBzdWJub2RlIHByb3BkZWYKIAkJewotCQkJeXllcnJvcigic3ludGF4IGVycm9yOiBwcm9wZXJ0aWVzIG11c3QgcHJlY2VkZSBzdWJub2Rlc1xuIik7CisJCQl5eWVycm9yKCJzeW50YXggZXJyb3I6IHByb3BlcnRpZXMgbXVzdCBwcmVjZWRlIHN1Ym5vZGVzIik7CiAJCQlZWUVSUk9SOwogCQl9CiAJOwpAQCAtMzA3LDE4ICszMzksMjkgQEAKIAogJSUKIAotdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICpzKQordm9pZCB5eWVycm9yZihjaGFyIGNvbnN0ICpzLCAuLi4pCiB7Ci0JY29uc3QgY2hhciAqZm5hbWUgPSBzcmNwb3NfZmlsZW5hbWVfZm9yX251bSh5eWxsb2MuZmlsZW51bSk7CisJY29uc3QgY2hhciAqZm5hbWUgPSBzcmNwb3NfZmlsZSA/IHNyY3Bvc19maWxlLT5uYW1lIDogIjxuby1maWxlPiI7CisJdmFfbGlzdCB2YTsKKwl2YV9zdGFydCh2YSwgcyk7CiAKIAlpZiAoc3RyY21wKGZuYW1lLCAiLSIpID09IDApCiAJCWZuYW1lID0gInN0ZGluIjsKIAotCWZwcmludGYoc3RkZXJyLCAiJXM6JWQgJXNcbiIsCi0JCWZuYW1lLCB5eWxsb2MuZmlyc3RfbGluZSwgcyk7CisJZnByaW50ZihzdGRlcnIsICIlczolZCAiLCBmbmFtZSwgeXlsbG9jLmZpcnN0X2xpbmUpOworCXZmcHJpbnRmKHN0ZGVyciwgcywgdmEpOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKworCXRyZWVzb3VyY2VfZXJyb3IgPSAxOworCXZhX2VuZCh2YSk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBldmFsX2xpdGVyYWwoY29uc3QgY2hhciAqcywgaW50IGJhc2UsIGludCBiaXRzKQordm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICpzKQoreworCXl5ZXJyb3JmKCIlcyIsIHMpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGV2YWxfbGl0ZXJhbChjb25zdCBjaGFyICpzLCBpbnQgYmFzZSwgaW50IGJpdHMpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKIAljaGFyICplOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMuYyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLmMKaW5kZXggMDExMzFkNy4uZDhmZDQzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy5jCkBAIC01NSw3ICs1NSw3IEBACiAJcmV0dXJuIHN0cjsKIH0KIAotdm9pZCBmaWxsX2Z1bGxwYXRocyhzdHJ1Y3Qgbm9kZSAqdHJlZSwgY29uc3QgY2hhciAqcHJlZml4KQorc3RhdGljIHZvaWQgZmlsbF9mdWxscGF0aHMoc3RydWN0IG5vZGUgKnRyZWUsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlzdHJ1Y3Qgbm9kZSAqY2hpbGQ7CiAJY29uc3QgY2hhciAqdW5pdDsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCWZwcmludGYoc3RkZXJyLCAiXHRcdEZvcmNlIC0gdHJ5IHRvIHByb2R1Y2Ugb3V0cHV0IGV2ZW4gaWYgdGhlIGlucHV0IHRyZWUgaGFzIGVycm9yc1xuIik7CiAJZnByaW50ZihzdGRlcnIsICJcdC12XG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwgIlx0XHRQcmludCBEVEMgdmVyc2lvbiBhbmQgZXhpdFxuIik7Ci0JZXhpdCgyKTsKKwlleGl0KDMpOwogfQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQpAQCAtMTE4LDEwICsxMTgsOSBAQAogCWludCBmb3JjZSA9IDAsIGNoZWNrID0gMDsKIAljb25zdCBjaGFyICphcmc7CiAJaW50IG9wdDsKLQlGSUxFICppbmYgPSBOVUxMOwogCUZJTEUgKm91dGYgPSBOVUxMOwogCWludCBvdXR2ZXJzaW9uID0gREVGQVVMVF9GRFRfVkVSU0lPTjsKLQlpbnQgYm9vdF9jcHVpZF9waHlzID0gMHhmZWVkYmVlZjsKKwlsb25nIGxvbmcgY21kbGluZV9ib290X2NwdWlkID0gLTE7CiAKIAlxdWlldCAgICAgID0gMDsKIAlyZXNlcnZlbnVtID0gMDsKQEAgLTE2MSwxMSArMTYwLDExIEBACiAJCQlxdWlldCsrOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2InOgotCQkJYm9vdF9jcHVpZF9waHlzID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7CisJCQljbWRsaW5lX2Jvb3RfY3B1aWQgPSBzdHJ0b2xsKG9wdGFyZywgTlVMTCwgMCk7CiAJCQlicmVhazsKIAkJY2FzZSAndic6Ci0JCSAgICBwcmludGYoIlZlcnNpb246ICVzXG4iLCBEVENfVkVSU0lPTik7Ci0JCSAgICBleGl0KDApOworCQkJcHJpbnRmKCJWZXJzaW9uOiAlc1xuIiwgRFRDX1ZFUlNJT04pOworCQkJZXhpdCgwKTsKIAkJY2FzZSAnaCc6CiAJCWRlZmF1bHQ6CiAJCQl1c2FnZSgpOwpAQCAtMTgwLDMxICsxNzksMjcgQEAKIAkJYXJnID0gYXJndltvcHRpbmRdOwogCiAJLyogbWluc2l6ZSBhbmQgcGFkc2l6ZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlICovCi0JaWYgKChtaW5zaXplKSAmJiAocGFkc2l6ZSkpIHsKKwlpZiAobWluc2l6ZSAmJiBwYWRzaXplKQogCQlkaWUoIkNhbid0IHNldCBib3RoIC1wIGFuZCAtU1xuIik7Ci0JfQogCiAJZnByaW50ZihzdGRlcnIsICJEVEM6ICVzLT4lcyAgb24gZmlsZSBcIiVzXCJcbiIsCiAJCWluZm9ybSwgb3V0Zm9ybSwgYXJnKTsKIAotCWlmIChzdHJlcShpbmZvcm0sICJkdHMiKSkgeworCWlmIChzdHJlcShpbmZvcm0sICJkdHMiKSkKIAkJYmkgPSBkdF9mcm9tX3NvdXJjZShhcmcpOwotCX0gZWxzZSBpZiAoc3RyZXEoaW5mb3JtLCAiZnMiKSkgeworCWVsc2UgaWYgKHN0cmVxKGluZm9ybSwgImZzIikpCiAJCWJpID0gZHRfZnJvbV9mcyhhcmcpOwotCX0gZWxzZSBpZihzdHJlcShpbmZvcm0sICJkdGIiKSkgewotCQlpbmYgPSBkdGNfb3Blbl9maWxlKGFyZyk7Ci0JCWJpID0gZHRfZnJvbV9ibG9iKGluZik7Ci0JfSBlbHNlIHsKKwllbHNlIGlmKHN0cmVxKGluZm9ybSwgImR0YiIpKQorCQliaSA9IGR0X2Zyb21fYmxvYihhcmcpOworCWVsc2UKIAkJZGllKCJVbmtub3duIGlucHV0IGZvcm1hdCBcIiVzXCJcbiIsIGluZm9ybSk7Ci0JfQogCi0JaWYgKGluZiAmJiAoaW5mICE9IHN0ZGluKSkKLQkJZmNsb3NlKGluZik7CisJaWYgKGNtZGxpbmVfYm9vdF9jcHVpZCAhPSAtMSkKKwkJYmktPmJvb3RfY3B1aWRfcGh5cyA9IGNtZGxpbmVfYm9vdF9jcHVpZDsKIAotCWlmICghIGJpIHx8ICEgYmktPmR0KQotCQlkaWUoIkNvdWxkbid0IHJlYWQgaW5wdXQgdHJlZVxuIik7CisJZmlsbF9mdWxscGF0aHMoYmktPmR0LCAiIik7CisJcHJvY2Vzc19jaGVja3MoZm9yY2UsIGJpKTsKIAotCXByb2Nlc3NfY2hlY2tzKGZvcmNlLCBiaSwgY2hlY2ssIG91dHZlcnNpb24sIGJvb3RfY3B1aWRfcGh5cyk7CiAKIAlpZiAoc3RyZXEob3V0bmFtZSwgIi0iKSkgewogCQlvdXRmID0gc3Rkb3V0OwpAQCAtMjE4LDkgKzIxMyw5IEBACiAJaWYgKHN0cmVxKG91dGZvcm0sICJkdHMiKSkgewogCQlkdF90b19zb3VyY2Uob3V0ZiwgYmkpOwogCX0gZWxzZSBpZiAoc3RyZXEob3V0Zm9ybSwgImR0YiIpKSB7Ci0JCWR0X3RvX2Jsb2Iob3V0ZiwgYmksIG91dHZlcnNpb24sIGJvb3RfY3B1aWRfcGh5cyk7CisJCWR0X3RvX2Jsb2Iob3V0ZiwgYmksIG91dHZlcnNpb24pOwogCX0gZWxzZSBpZiAoc3RyZXEob3V0Zm9ybSwgImFzbSIpKSB7Ci0JCWR0X3RvX2FzbShvdXRmLCBiaSwgb3V0dmVyc2lvbiwgYm9vdF9jcHVpZF9waHlzKTsKKwkJZHRfdG9fYXNtKG91dGYsIGJpLCBvdXR2ZXJzaW9uKTsKIAl9IGVsc2UgaWYgKHN0cmVxKG91dGZvcm0sICJudWxsIikpIHsKIAkJLyogZG8gbm90aGluZyAqLwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy5oIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMuaAppbmRleCA2NTI4MTc3Li4wOGQ1NGM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy5oCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLmgKQEAgLTMwLDEwICszMCw4IEBACiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxlbmRpYW4uaD4KLSNpbmNsdWRlIDxieXRlc3dhcC5oPgogCisjaW5jbHVkZSA8bGliZmR0X2Vudi5oPgogI2luY2x1ZGUgPGZkdC5oPgogCiAjZGVmaW5lIERFRkFVTFRfRkRUX1ZFUlNJT04JMTcKQEAgLTc1LDI1ICs3Myw4IEBACiAJcmV0dXJuIG5ldzsKIH0KIAotdHlwZWRlZiB1aW50OF90IHU4OwotdHlwZWRlZiB1aW50MTZfdCB1MTY7Ci10eXBlZGVmIHVpbnQzMl90IHUzMjsKLXR5cGVkZWYgdWludDY0X3QgdTY0OwotdHlwZWRlZiB1MzIgY2VsbF90OwordHlwZWRlZiB1aW50MzJfdCBjZWxsX3Q7CiAKLSNkZWZpbmUgY3B1X3RvX2JlMTYoeCkJaHRvbnMoeCkKLSNkZWZpbmUgYmUxNl90b19jcHUoeCkJbnRvaHMoeCkKLQotI2RlZmluZSBjcHVfdG9fYmUzMih4KQlodG9ubCh4KQotI2RlZmluZSBiZTMyX3RvX2NwdSh4KQludG9obCh4KQotCi0jaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgotI2RlZmluZSBjcHVfdG9fYmU2NCh4KQkoeCkKLSNkZWZpbmUgYmU2NF90b19jcHUoeCkJKHgpCi0jZWxzZQotI2RlZmluZSBjcHVfdG9fYmU2NCh4KQlic3dhcF82NCh4KQotI2RlZmluZSBiZTY0X3RvX2NwdSh4KQlic3dhcF82NCh4KQotI2VuZGlmCiAKICNkZWZpbmUgc3RyZXEoYSwgYikJKHN0cmNtcCgoYSksIChiKSkgPT0gMCkKICNkZWZpbmUgc3RybmVxKGEsIGIsIG4pCShzdHJuY21wKChhKSwgKGIpLCAobikpID09IDApCkBAIC0xMTgsNyArOTksNiBAQAogc3RydWN0IGRhdGEgewogCWludCBsZW47CiAJY2hhciAqdmFsOwotCWludCBhc2l6ZTsKIAlzdHJ1Y3QgbWFya2VyICptYXJrZXJzOwogfTsKIApAQCAtMTQ1LDcgKzEyNSw3IEBACiBzdHJ1Y3QgZGF0YSBkYXRhX21lcmdlKHN0cnVjdCBkYXRhIGQxLCBzdHJ1Y3QgZGF0YSBkMik7CiBzdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9jZWxsKHN0cnVjdCBkYXRhIGQsIGNlbGxfdCB3b3JkKTsKIHN0cnVjdCBkYXRhIGRhdGFfYXBwZW5kX3JlKHN0cnVjdCBkYXRhIGQsIGNvbnN0IHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSAqcmUpOwotc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfYWRkcihzdHJ1Y3QgZGF0YSBkLCB1NjQgYWRkcik7CitzdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9hZGRyKHN0cnVjdCBkYXRhIGQsIHVpbnQ2NF90IGFkZHIpOwogc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfYnl0ZShzdHJ1Y3QgZGF0YSBkLCB1aW50OF90IGJ5dGUpOwogc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfemVyb2VzKHN0cnVjdCBkYXRhIGQsIGludCBsZW4pOwogc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfYWxpZ24oc3RydWN0IGRhdGEgZCwgaW50IGFsaWduKTsKQEAgLTIyMyw3ICsyMDMsNyBAQAogCWNoYXIgKmxhYmVsOwogfTsKIAotc3RydWN0IHJlc2VydmVfaW5mbyAqYnVpbGRfcmVzZXJ2ZV9lbnRyeSh1NjQgc3RhcnQsIHU2NCBsZW4sIGNoYXIgKmxhYmVsKTsKK3N0cnVjdCByZXNlcnZlX2luZm8gKmJ1aWxkX3Jlc2VydmVfZW50cnkodWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGxlbiwgY2hhciAqbGFiZWwpOwogc3RydWN0IHJlc2VydmVfaW5mbyAqY2hhaW5fcmVzZXJ2ZV9lbnRyeShzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpmaXJzdCwKIAkJCQkJIHN0cnVjdCByZXNlcnZlX2luZm8gKmxpc3QpOwogc3RydWN0IHJlc2VydmVfaW5mbyAqYWRkX3Jlc2VydmVfZW50cnkoc3RydWN0IHJlc2VydmVfaW5mbyAqbGlzdCwKQEAgLTIzMywyNCArMjEzLDIyIEBACiBzdHJ1Y3QgYm9vdF9pbmZvIHsKIAlzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpyZXNlcnZlbGlzdDsKIAlzdHJ1Y3Qgbm9kZSAqZHQ7CQkvKiB0aGUgZGV2aWNlIHRyZWUgKi8KKwl1aW50MzJfdCBib290X2NwdWlkX3BoeXM7CiB9OwogCiBzdHJ1Y3QgYm9vdF9pbmZvICpidWlsZF9ib290X2luZm8oc3RydWN0IHJlc2VydmVfaW5mbyAqcmVzZXJ2ZWxpc3QsCi0JCQkJICBzdHJ1Y3Qgbm9kZSAqdHJlZSk7CisJCQkJICBzdHJ1Y3Qgbm9kZSAqdHJlZSwgdWludDMyX3QgYm9vdF9jcHVpZF9waHlzKTsKIAogLyogQ2hlY2tzICovCiAKLXZvaWQgcHJvY2Vzc19jaGVja3MoaW50IGZvcmNlLCBzdHJ1Y3QgYm9vdF9pbmZvICpiaSwKLQkJICAgIGludCBjaGVja2ZsYWcsIGludCBvdXR2ZXJzaW9uLCBpbnQgYm9vdF9jcHVpZF9waHlzKTsKK3ZvaWQgcHJvY2Vzc19jaGVja3MoaW50IGZvcmNlLCBzdHJ1Y3QgYm9vdF9pbmZvICpiaSk7CiAKIC8qIEZsYXR0ZW5lZCB0cmVlcyAqLwogCi12b2lkIGR0X3RvX2Jsb2IoRklMRSAqZiwgc3RydWN0IGJvb3RfaW5mbyAqYmksIGludCB2ZXJzaW9uLAotCQlpbnQgYm9vdF9jcHVpZF9waHlzKTsKLXZvaWQgZHRfdG9fYXNtKEZJTEUgKmYsIHN0cnVjdCBib290X2luZm8gKmJpLCBpbnQgdmVyc2lvbiwKLQkgICAgICAgaW50IGJvb3RfY3B1aWRfcGh5cyk7Cit2b2lkIGR0X3RvX2Jsb2IoRklMRSAqZiwgc3RydWN0IGJvb3RfaW5mbyAqYmksIGludCB2ZXJzaW9uKTsKK3ZvaWQgZHRfdG9fYXNtKEZJTEUgKmYsIHN0cnVjdCBib290X2luZm8gKmJpLCBpbnQgdmVyc2lvbik7CiAKLXN0cnVjdCBib290X2luZm8gKmR0X2Zyb21fYmxvYihGSUxFICpmKTsKK3N0cnVjdCBib290X2luZm8gKmR0X2Zyb21fYmxvYihjb25zdCBjaGFyICpmbmFtZSk7CiAKIC8qIFRyZWUgc291cmNlICovCiAKQEAgLTI2NCw2ICsyNDIsNSBAQAogLyogbWlzYyAqLwogCiBjaGFyICpqb2luX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbmFtZSk7Ci12b2lkIGZpbGxfZnVsbHBhdGhzKHN0cnVjdCBub2RlICp0cmVlLCBjb25zdCBjaGFyICpwcmVmaXgpOwogCiAjZW5kaWYgLyogX0RUQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2ZsYXR0cmVlLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2ZsYXR0cmVlLmMKaW5kZXggYTdjZmI4NC4uNzZhY2QyOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9mbGF0dHJlZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZmxhdHRyZWUuYwpAQCAtMTksNiArMTksNyBAQAogICovCiAKICNpbmNsdWRlICJkdGMuaCIKKyNpbmNsdWRlICJzcmNwb3MuaCIKIAogI2RlZmluZSBGVEZfRlVMTFBBVEgJMHgxCiAjZGVmaW5lIEZURl9WQVJBTElHTgkweDIKQEAgLTE2MiwyOCArMTYzLDE4IEBACiB7CiAJRklMRSAqZiA9IGU7CiAJaW50IG9mZiA9IDA7Ci0Jc3RydWN0IG1hcmtlciAqbTsKKwlzdHJ1Y3QgbWFya2VyICptID0gZC5tYXJrZXJzOwogCi0JbSA9IGQubWFya2VyczsKLQl3aGlsZSAobSkgewotCQlpZiAobS0+dHlwZSA9PSBMQUJFTCkKLQkJCWVtaXRfb2Zmc2V0X2xhYmVsKGYsIG0tPnJlZiwgbS0+b2Zmc2V0KTsKLQkJbSA9IG0tPm5leHQ7Ci0JfQorCWZvcl9lYWNoX21hcmtlcl9vZl90eXBlKG0sIExBQkVMKQorCQllbWl0X29mZnNldF9sYWJlbChmLCBtLT5yZWYsIG0tPm9mZnNldCk7CiAKLQl3aGlsZSAoKGQubGVuIC0gb2ZmKSA+PSBzaXplb2YodTMyKSkgeworCXdoaWxlICgoZC5sZW4gLSBvZmYpID49IHNpemVvZih1aW50MzJfdCkpIHsKIAkJZnByaW50ZihmLCAiXHQubG9uZ1x0MHgleFxuIiwKLQkJCWJlMzJfdG9fY3B1KCooKHUzMiAqKShkLnZhbCtvZmYpKSkpOwotCQlvZmYgKz0gc2l6ZW9mKHUzMik7CisJCQlmZHQzMl90b19jcHUoKigodWludDMyX3QgKikoZC52YWwrb2ZmKSkpKTsKKwkJb2ZmICs9IHNpemVvZih1aW50MzJfdCk7CiAJfQogCi0JaWYgKChkLmxlbiAtIG9mZikgPj0gc2l6ZW9mKHUxNikpIHsKLQkJZnByaW50ZihmLCAiXHQuc2hvcnRcdDB4JWh4XG4iLAotCQkJYmUxNl90b19jcHUoKigodTE2ICopKGQudmFsK29mZikpKSk7Ci0JCW9mZiArPSBzaXplb2YodTE2KTsKLQl9Ci0KLQlpZiAoKGQubGVuIC0gb2ZmKSA+PSAxKSB7CisJd2hpbGUgKChkLmxlbiAtIG9mZikgPj0gMSkgewogCQlmcHJpbnRmKGYsICJcdC5ieXRlXHQweCVoaHhcbiIsIGQudmFsW29mZl0pOwogCQlvZmYgKz0gMTsKIAl9CkBAIC0zMzYsMjkgKzMyNywyOCBAQAogCiAJbWVtc2V0KGZkdCwgMHhmZiwgc2l6ZW9mKCpmZHQpKTsKIAotCWZkdC0+bWFnaWMgPSBjcHVfdG9fYmUzMihGRFRfTUFHSUMpOwotCWZkdC0+dmVyc2lvbiA9IGNwdV90b19iZTMyKHZpLT52ZXJzaW9uKTsKLQlmZHQtPmxhc3RfY29tcF92ZXJzaW9uID0gY3B1X3RvX2JlMzIodmktPmxhc3RfY29tcF92ZXJzaW9uKTsKKwlmZHQtPm1hZ2ljID0gY3B1X3RvX2ZkdDMyKEZEVF9NQUdJQyk7CisJZmR0LT52ZXJzaW9uID0gY3B1X3RvX2ZkdDMyKHZpLT52ZXJzaW9uKTsKKwlmZHQtPmxhc3RfY29tcF92ZXJzaW9uID0gY3B1X3RvX2ZkdDMyKHZpLT5sYXN0X2NvbXBfdmVyc2lvbik7CiAKIAkvKiBSZXNlcnZlIG1hcCBzaG91bGQgYmUgZG91Ymxld29yZCBhbGlnbmVkICovCiAJcmVzZXJ2ZV9vZmYgPSBBTElHTih2aS0+aGRyX3NpemUsIDgpOwogCi0JZmR0LT5vZmZfbWVtX3Jzdm1hcCA9IGNwdV90b19iZTMyKHJlc2VydmVfb2ZmKTsKLQlmZHQtPm9mZl9kdF9zdHJ1Y3QgPSBjcHVfdG9fYmUzMihyZXNlcnZlX29mZiArIHJlc2VydmVzaXplKTsKLQlmZHQtPm9mZl9kdF9zdHJpbmdzID0gY3B1X3RvX2JlMzIocmVzZXJ2ZV9vZmYgKyByZXNlcnZlc2l6ZQorCWZkdC0+b2ZmX21lbV9yc3ZtYXAgPSBjcHVfdG9fZmR0MzIocmVzZXJ2ZV9vZmYpOworCWZkdC0+b2ZmX2R0X3N0cnVjdCA9IGNwdV90b19mZHQzMihyZXNlcnZlX29mZiArIHJlc2VydmVzaXplKTsKKwlmZHQtPm9mZl9kdF9zdHJpbmdzID0gY3B1X3RvX2ZkdDMyKHJlc2VydmVfb2ZmICsgcmVzZXJ2ZXNpemUKIAkJCQkJICArIGR0c2l6ZSk7Ci0JZmR0LT50b3RhbHNpemUgPSBjcHVfdG9fYmUzMihyZXNlcnZlX29mZiArIHJlc2VydmVzaXplICsgZHRzaXplICsgc3Ryc2l6ZSk7CisJZmR0LT50b3RhbHNpemUgPSBjcHVfdG9fZmR0MzIocmVzZXJ2ZV9vZmYgKyByZXNlcnZlc2l6ZSArIGR0c2l6ZSArIHN0cnNpemUpOwogCiAJaWYgKHZpLT5mbGFncyAmIEZURl9CT09UQ1BVSUQpCi0JCWZkdC0+Ym9vdF9jcHVpZF9waHlzID0gY3B1X3RvX2JlMzIoYm9vdF9jcHVpZF9waHlzKTsKKwkJZmR0LT5ib290X2NwdWlkX3BoeXMgPSBjcHVfdG9fZmR0MzIoYm9vdF9jcHVpZF9waHlzKTsKIAlpZiAodmktPmZsYWdzICYgRlRGX1NUUlRBQlNJWkUpCi0JCWZkdC0+c2l6ZV9kdF9zdHJpbmdzID0gY3B1X3RvX2JlMzIoc3Ryc2l6ZSk7CisJCWZkdC0+c2l6ZV9kdF9zdHJpbmdzID0gY3B1X3RvX2ZkdDMyKHN0cnNpemUpOwogCWlmICh2aS0+ZmxhZ3MgJiBGVEZfU1RSVUNUU0laRSkKLQkJZmR0LT5zaXplX2R0X3N0cnVjdCA9IGNwdV90b19iZTMyKGR0c2l6ZSk7CisJCWZkdC0+c2l6ZV9kdF9zdHJ1Y3QgPSBjcHVfdG9fZmR0MzIoZHRzaXplKTsKIH0KIAotdm9pZCBkdF90b19ibG9iKEZJTEUgKmYsIHN0cnVjdCBib290X2luZm8gKmJpLCBpbnQgdmVyc2lvbiwKLQkJaW50IGJvb3RfY3B1aWRfcGh5cykKK3ZvaWQgZHRfdG9fYmxvYihGSUxFICpmLCBzdHJ1Y3QgYm9vdF9pbmZvICpiaSwgaW50IHZlcnNpb24pCiB7CiAJc3RydWN0IHZlcnNpb25faW5mbyAqdmkgPSBOVUxMOwogCWludCBpOwpAQCAtMzgzLDI2ICszNzMsMjYgQEAKIAogCS8qIE1ha2UgaGVhZGVyICovCiAJbWFrZV9mZHRfaGVhZGVyKCZmZHQsIHZpLCByZXNlcnZlYnVmLmxlbiwgZHRidWYubGVuLCBzdHJidWYubGVuLAotCQkJYm9vdF9jcHVpZF9waHlzKTsKKwkJCWJpLT5ib290X2NwdWlkX3BoeXMpOwogCiAJLyoKIAkgKiBJZiB0aGUgdXNlciBhc2tlZCBmb3IgbW9yZSBzcGFjZSB0aGFuIGlzIHVzZWQsIGFkanVzdCB0aGUgdG90YWxzaXplLgogCSAqLwogCWlmIChtaW5zaXplID4gMCkgewotCQlwYWRsZW4gPSBtaW5zaXplIC0gYmUzMl90b19jcHUoZmR0LnRvdGFsc2l6ZSk7CisJCXBhZGxlbiA9IG1pbnNpemUgLSBmZHQzMl90b19jcHUoZmR0LnRvdGFsc2l6ZSk7CiAJCWlmICgocGFkbGVuIDwgMCkgJiYgKHF1aWV0IDwgMSkpCiAJCQlmcHJpbnRmKHN0ZGVyciwKIAkJCQkiV2FybmluZzogYmxvYiBzaXplICVkID49IG1pbmltdW0gc2l6ZSAlZFxuIiwKLQkJCQliZTMyX3RvX2NwdShmZHQudG90YWxzaXplKSwgbWluc2l6ZSk7CisJCQkJZmR0MzJfdG9fY3B1KGZkdC50b3RhbHNpemUpLCBtaW5zaXplKTsKIAl9CiAKIAlpZiAocGFkc2l6ZSA+IDApCiAJCXBhZGxlbiA9IHBhZHNpemU7CiAKIAlpZiAocGFkbGVuID4gMCkgewotCQlpbnQgdHNpemUgPSBiZTMyX3RvX2NwdShmZHQudG90YWxzaXplKTsKKwkJaW50IHRzaXplID0gZmR0MzJfdG9fY3B1KGZkdC50b3RhbHNpemUpOwogCQl0c2l6ZSArPSBwYWRsZW47Ci0JCWZkdC50b3RhbHNpemUgPSBjcHVfdG9fYmUzMih0c2l6ZSk7CisJCWZkdC50b3RhbHNpemUgPSBjcHVfdG9fZmR0MzIodHNpemUpOwogCX0KIAogCS8qCkBAIC00MTAsNyArNDAwLDcgQEAKIAkgKiB0aGUgcmVzZXJ2ZSBidWZmZXIsIGFkZCB0aGUgcmVzZXJ2ZSBtYXAgdGVybWluYXRpbmcgemVyb2VzLAogCSAqIHRoZSBkZXZpY2UgdHJlZSBpdHNlbGYsIGFuZCBmaW5hbGx5IHRoZSBzdHJpbmdzLgogCSAqLwotCWJsb2IgPSBkYXRhX2FwcGVuZF9kYXRhKGJsb2IsICZmZHQsIHNpemVvZihmZHQpKTsKKwlibG9iID0gZGF0YV9hcHBlbmRfZGF0YShibG9iLCAmZmR0LCB2aS0+aGRyX3NpemUpOwogCWJsb2IgPSBkYXRhX2FwcGVuZF9hbGlnbihibG9iLCA4KTsKIAlibG9iID0gZGF0YV9tZXJnZShibG9iLCByZXNlcnZlYnVmKTsKIAlibG9iID0gZGF0YV9hcHBlbmRfemVyb2VzKGJsb2IsIHNpemVvZihzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkpKTsKQEAgLTQ0OSw3ICs0MzksNyBAQAogCX0KIH0KIAotdm9pZCBkdF90b19hc20oRklMRSAqZiwgc3RydWN0IGJvb3RfaW5mbyAqYmksIGludCB2ZXJzaW9uLCBpbnQgYm9vdF9jcHVpZF9waHlzKQordm9pZCBkdF90b19hc20oRklMRSAqZiwgc3RydWN0IGJvb3RfaW5mbyAqYmksIGludCB2ZXJzaW9uKQogewogCXN0cnVjdCB2ZXJzaW9uX2luZm8gKnZpID0gTlVMTDsKIAlpbnQgaTsKQEAgLTQ4OSw3ICs0NzksNyBAQAogCiAJaWYgKHZpLT5mbGFncyAmIEZURl9CT09UQ1BVSUQpCiAJCWZwcmludGYoZiwgIlx0LmxvbmdcdCVpXHRcdFx0XHRcdC8qIGJvb3RfY3B1aWRfcGh5cyAqL1xuIiwKLQkJCWJvb3RfY3B1aWRfcGh5cyk7CisJCQliaS0+Ym9vdF9jcHVpZF9waHlzKTsKIAogCWlmICh2aS0+ZmxhZ3MgJiBGVEZfU1RSVEFCU0laRSkKIAkJZnByaW50ZihmLCAiXHQubG9uZ1x0XyVzX3N0cmluZ3NfZW5kIC0gXyVzX3N0cmluZ3Nfc3RhcnRcdC8qIHNpemVfZHRfc3RyaW5ncyAqL1xuIiwKQEAgLTU3OSwxNSArNTY5LDE1IEBACiAJaW5iLT5wdHIgKz0gbGVuOwogfQogCi1zdGF0aWMgdTMyIGZsYXRfcmVhZF93b3JkKHN0cnVjdCBpbmJ1ZiAqaW5iKQorc3RhdGljIHVpbnQzMl90IGZsYXRfcmVhZF93b3JkKHN0cnVjdCBpbmJ1ZiAqaW5iKQogewotCXUzMiB2YWw7CisJdWludDMyX3QgdmFsOwogCiAJYXNzZXJ0KCgoaW5iLT5wdHIgLSBpbmItPmJhc2UpICUgc2l6ZW9mKHZhbCkpID09IDApOwogCiAJZmxhdF9yZWFkX2NodW5rKGluYiwgJnZhbCwgc2l6ZW9mKHZhbCkpOwogCi0JcmV0dXJuIGJlMzJfdG9fY3B1KHZhbCk7CisJcmV0dXJuIGZkdDMyX3RvX2NwdSh2YWwpOwogfQogCiBzdGF0aWMgdm9pZCBmbGF0X3JlYWxpZ24oc3RydWN0IGluYnVmICppbmIsIGludCBhbGlnbikKQEAgLTYxNSw3ICs2MDUsNyBAQAogCiAJaW5iLT5wdHIgKz0gbGVuOwogCi0JZmxhdF9yZWFsaWduKGluYiwgc2l6ZW9mKHUzMikpOworCWZsYXRfcmVhbGlnbihpbmIsIHNpemVvZih1aW50MzJfdCkpOwogCiAJcmV0dXJuIHN0cjsKIH0KQEAgLTYzMiw3ICs2MjIsNyBAQAogCiAJZmxhdF9yZWFkX2NodW5rKGluYiwgZC52YWwsIGxlbik7CiAKLQlmbGF0X3JlYWxpZ24oaW5iLCBzaXplb2YodTMyKSk7CisJZmxhdF9yZWFsaWduKGluYiwgc2l6ZW9mKHVpbnQzMl90KSk7CiAKIAlyZXR1cm4gZDsKIH0KQEAgLTY1OSw3ICs2NDksNyBAQAogc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSAqZmxhdF9yZWFkX3Byb3BlcnR5KHN0cnVjdCBpbmJ1ZiAqZHRidWYsCiAJCQkJCSAgIHN0cnVjdCBpbmJ1ZiAqc3RyYnVmLCBpbnQgZmxhZ3MpCiB7Ci0JdTMyIHByb3BsZW4sIHN0cm9mZjsKKwl1aW50MzJfdCBwcm9wbGVuLCBzdHJvZmY7CiAJY2hhciAqbmFtZTsKIAlzdHJ1Y3QgZGF0YSB2YWw7CiAKQEAgLTY5Myw4ICs2ODMsOCBAQAogCXAgPSBpbmItPnB0cjsKIAl3aGlsZSAoMSkgewogCQlmbGF0X3JlYWRfY2h1bmsoaW5iLCAmcmUsIHNpemVvZihyZSkpOwotCQlyZS5hZGRyZXNzICA9IGJlNjRfdG9fY3B1KHJlLmFkZHJlc3MpOwotCQlyZS5zaXplID0gYmU2NF90b19jcHUocmUuc2l6ZSk7CisJCXJlLmFkZHJlc3MgID0gZmR0NjRfdG9fY3B1KHJlLmFkZHJlc3MpOworCQlyZS5zaXplID0gZmR0NjRfdG9fY3B1KHJlLnNpemUpOwogCQlpZiAocmUuc2l6ZSA9PSAwKQogCQkJYnJlYWs7CiAKQEAgLTcwOCw3NyArNjk4LDM3IEBACiAKIHN0YXRpYyBjaGFyICpub2RlbmFtZV9mcm9tX3BhdGgoY29uc3QgY2hhciAqcHBhdGgsIGNvbnN0IGNoYXIgKmNwYXRoKQogewotCWNvbnN0IGNoYXIgKmxzbGFzaDsKIAlpbnQgcGxlbjsKIAotCWxzbGFzaCA9IHN0cnJjaHIoY3BhdGgsICcvJyk7Ci0JaWYgKCEgbHNsYXNoKQotCQlyZXR1cm4gTlVMTDsKKwlwbGVuID0gc3RybGVuKHBwYXRoKTsKIAotCXBsZW4gPSBsc2xhc2ggLSBjcGF0aDsKKwlpZiAoIXN0cm5lcShwcGF0aCwgY3BhdGgsIHBsZW4pKQorCQlkaWUoIlBhdGggXCIlc1wiIGlzIG5vdCB2YWxpZCBhcyBhIGNoaWxkIG9mIFwiJXNcIlxuIiwKKwkJICAgIGNwYXRoLCBwcGF0aCk7CiAKLQlpZiAoc3RyZXEoY3BhdGgsICIvIikgJiYgc3RyZXEocHBhdGgsICIiKSkKLQkJcmV0dXJuICIiOworCS8qIHJvb3Qgbm9kZSBpcyBhIHNwZWNpYWwgY2FzZSAqLworCWlmICghc3RyZXEocHBhdGgsICIvIikpCisJCXBsZW4rKzsKIAotCWlmICgocGxlbiA9PSAwKSAmJiBzdHJlcShwcGF0aCwgIi8iKSkKLQkJcmV0dXJuIHN0cmR1cChsc2xhc2grMSk7Ci0KLQlpZiAoISBzdHJuZXEocHBhdGgsIGNwYXRoLCBwbGVuKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gc3RyZHVwKGxzbGFzaCsxKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgUFJPUENIQVJbXSA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSwuXysqIz8tIjsKLXN0YXRpYyBjb25zdCBjaGFyIFVOSVRDSEFSW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiwiOwotCi1zdGF0aWMgaW50IGNoZWNrX25vZGVfbmFtZShjb25zdCBjaGFyICpuYW1lKQotewotCWNvbnN0IGNoYXIgKmF0cG9zOwotCWludCBiYXNlbmFtZWxlbjsKLQotCWF0cG9zID0gc3RycmNocihuYW1lLCAnQCcpOwotCi0JaWYgKGF0cG9zKQotCQliYXNlbmFtZWxlbiA9IGF0cG9zIC0gbmFtZTsKLQllbHNlCi0JCWJhc2VuYW1lbGVuID0gc3RybGVuKG5hbWUpOwotCi0JaWYgKHN0cnNwbihuYW1lLCBQUk9QQ0hBUikgPCBiYXNlbmFtZWxlbikKLQkJcmV0dXJuIC0xOwotCi0JaWYgKGF0cG9zCi0JICAgICYmICgoYmFzZW5hbWVsZW4gKyAxICsgc3Ryc3BuKGF0cG9zKzEsIFVOSVRDSEFSKSkgPCBzdHJsZW4obmFtZSkpKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gYmFzZW5hbWVsZW47CisJcmV0dXJuIHN0cmR1cChjcGF0aCArIHBsZW4pOwogfQogCiBzdGF0aWMgc3RydWN0IG5vZGUgKnVuZmxhdHRlbl90cmVlKHN0cnVjdCBpbmJ1ZiAqZHRidWYsCiAJCQkJICAgc3RydWN0IGluYnVmICpzdHJidWYsCi0JCQkJICAgY29uc3QgY2hhciAqcGFyZW50X3BhdGgsIGludCBmbGFncykKKwkJCQkgICBjb25zdCBjaGFyICpwYXJlbnRfZmxhdG5hbWUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3Qgbm9kZSAqbm9kZTsKLQl1MzIgdmFsOworCWNoYXIgKmZsYXRuYW1lOworCXVpbnQzMl90IHZhbDsKIAogCW5vZGUgPSBidWlsZF9ub2RlKE5VTEwsIE5VTEwpOwogCi0JaWYgKGZsYWdzICYgRlRGX0ZVTExQQVRIKSB7Ci0JCW5vZGUtPmZ1bGxwYXRoID0gZmxhdF9yZWFkX3N0cmluZyhkdGJ1Zik7Ci0JCW5vZGUtPm5hbWUgPSBub2RlbmFtZV9mcm9tX3BhdGgocGFyZW50X3BhdGgsIG5vZGUtPmZ1bGxwYXRoKTsKKwlmbGF0bmFtZSA9IGZsYXRfcmVhZF9zdHJpbmcoZHRidWYpOwogCi0JCWlmICghIG5vZGUtPm5hbWUpCi0JCQlkaWUoIlBhdGggXCIlc1wiIGlzIG5vdCB2YWxpZCBhcyBhIGNoaWxkIG9mIFwiJXNcIlxuIiwKLQkJCSAgICBub2RlLT5mdWxscGF0aCwgcGFyZW50X3BhdGgpOwotCX0gZWxzZSB7Ci0JCW5vZGUtPm5hbWUgPSBmbGF0X3JlYWRfc3RyaW5nKGR0YnVmKTsKLQkJbm9kZS0+ZnVsbHBhdGggPSBqb2luX3BhdGgocGFyZW50X3BhdGgsIG5vZGUtPm5hbWUpOwotCX0KLQotCW5vZGUtPmJhc2VuYW1lbGVuID0gY2hlY2tfbm9kZV9uYW1lKG5vZGUtPm5hbWUpOwotCWlmIChub2RlLT5iYXNlbmFtZWxlbiA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nIFwiJXNcIiBoYXMgaW5jb3JyZWN0IGZvcm1hdFxuIiwgbm9kZS0+bmFtZSk7Ci0JfQorCWlmIChmbGFncyAmIEZURl9GVUxMUEFUSCkKKwkJbm9kZS0+bmFtZSA9IG5vZGVuYW1lX2Zyb21fcGF0aChwYXJlbnRfZmxhdG5hbWUsIGZsYXRuYW1lKTsKKwllbHNlCisJCW5vZGUtPm5hbWUgPSBmbGF0bmFtZTsKIAogCWRvIHsKIAkJc3RydWN0IHByb3BlcnR5ICpwcm9wOwpAQCAtNzk1LDggKzc0NSw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIEZEVF9CRUdJTl9OT0RFOgotCQkJY2hpbGQgPSB1bmZsYXR0ZW5fdHJlZShkdGJ1ZixzdHJidWYsIG5vZGUtPmZ1bGxwYXRoLAotCQkJCQkgICAgICAgZmxhZ3MpOworCQkJY2hpbGQgPSB1bmZsYXR0ZW5fdHJlZShkdGJ1ZixzdHJidWYsIGZsYXRuYW1lLCBmbGFncyk7CiAJCQlhZGRfY2hpbGQobm9kZSwgY2hpbGQpOwogCQkJYnJlYWs7CiAKQEAgLTgyNSwxMCArNzc0LDExIEBACiB9CiAKIAotc3RydWN0IGJvb3RfaW5mbyAqZHRfZnJvbV9ibG9iKEZJTEUgKmYpCitzdHJ1Y3QgYm9vdF9pbmZvICpkdF9mcm9tX2Jsb2IoY29uc3QgY2hhciAqZm5hbWUpCiB7Ci0JdTMyIG1hZ2ljLCB0b3RhbHNpemUsIHZlcnNpb24sIHNpemVfc3RyLCBzaXplX2R0OwotCXUzMiBvZmZfZHQsIG9mZl9zdHIsIG9mZl9tZW1fcnN2bWFwOworCXN0cnVjdCBkdGNfZmlsZSAqZHRjZjsKKwl1aW50MzJfdCBtYWdpYywgdG90YWxzaXplLCB2ZXJzaW9uLCBzaXplX2R0LCBib290X2NwdWlkX3BoeXM7CisJdWludDMyX3Qgb2ZmX2R0LCBvZmZfc3RyLCBvZmZfbWVtX3Jzdm1hcDsKIAlpbnQgcmM7CiAJY2hhciAqYmxvYjsKIAlzdHJ1Y3QgZmR0X2hlYWRlciAqZmR0OwpAQCAtODM4LDU0ICs3ODgsNTYgQEAKIAlpbnQgc2l6ZWxlZnQ7CiAJc3RydWN0IHJlc2VydmVfaW5mbyAqcmVzZXJ2ZWxpc3Q7CiAJc3RydWN0IG5vZGUgKnRyZWU7Ci0JdTMyIHZhbDsKKwl1aW50MzJfdCB2YWw7CiAJaW50IGZsYWdzID0gMDsKIAotCXJjID0gZnJlYWQoJm1hZ2ljLCBzaXplb2YobWFnaWMpLCAxLCBmKTsKLQlpZiAoZmVycm9yKGYpKQorCWR0Y2YgPSBkdGNfb3Blbl9maWxlKGZuYW1lLCBOVUxMKTsKKworCXJjID0gZnJlYWQoJm1hZ2ljLCBzaXplb2YobWFnaWMpLCAxLCBkdGNmLT5maWxlKTsKKwlpZiAoZmVycm9yKGR0Y2YtPmZpbGUpKQogCQlkaWUoIkVycm9yIHJlYWRpbmcgRFQgYmxvYiBtYWdpYyBudW1iZXI6ICVzXG4iLAogCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKIAlpZiAocmMgPCAxKSB7Ci0JCWlmIChmZW9mKGYpKQorCQlpZiAoZmVvZihkdGNmLT5maWxlKSkKIAkJCWRpZSgiRU9GIHJlYWRpbmcgRFQgYmxvYiBtYWdpYyBudW1iZXJcbiIpOwogCQllbHNlCiAJCQlkaWUoIk15c3RlcmlvdXMgc2hvcnQgcmVhZCByZWFkaW5nIG1hZ2ljIG51bWJlclxuIik7CiAJfQogCi0JbWFnaWMgPSBiZTMyX3RvX2NwdShtYWdpYyk7CisJbWFnaWMgPSBmZHQzMl90b19jcHUobWFnaWMpOwogCWlmIChtYWdpYyAhPSBGRFRfTUFHSUMpCiAJCWRpZSgiQmxvYiBoYXMgaW5jb3JyZWN0IG1hZ2ljIG51bWJlclxuIik7CiAKLQlyYyA9IGZyZWFkKCZ0b3RhbHNpemUsIHNpemVvZih0b3RhbHNpemUpLCAxLCBmKTsKLQlpZiAoZmVycm9yKGYpKQorCXJjID0gZnJlYWQoJnRvdGFsc2l6ZSwgc2l6ZW9mKHRvdGFsc2l6ZSksIDEsIGR0Y2YtPmZpbGUpOworCWlmIChmZXJyb3IoZHRjZi0+ZmlsZSkpCiAJCWRpZSgiRXJyb3IgcmVhZGluZyBEVCBibG9iIHNpemU6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwogCWlmIChyYyA8IDEpIHsKLQkJaWYgKGZlb2YoZikpCisJCWlmIChmZW9mKGR0Y2YtPmZpbGUpKQogCQkJZGllKCJFT0YgcmVhZGluZyBEVCBibG9iIHNpemVcbiIpOwogCQllbHNlCiAJCQlkaWUoIk15c3RlcmlvdXMgc2hvcnQgcmVhZCByZWFkaW5nIGJsb2Igc2l6ZVxuIik7CiAJfQogCi0JdG90YWxzaXplID0gYmUzMl90b19jcHUodG90YWxzaXplKTsKKwl0b3RhbHNpemUgPSBmZHQzMl90b19jcHUodG90YWxzaXplKTsKIAlpZiAodG90YWxzaXplIDwgRkRUX1YxX1NJWkUpCiAJCWRpZSgiRFQgYmxvYiBzaXplICglZCkgaXMgdG9vIHNtYWxsXG4iLCB0b3RhbHNpemUpOwogCiAJYmxvYiA9IHhtYWxsb2ModG90YWxzaXplKTsKIAogCWZkdCA9IChzdHJ1Y3QgZmR0X2hlYWRlciAqKWJsb2I7Ci0JZmR0LT5tYWdpYyA9IGNwdV90b19iZTMyKG1hZ2ljKTsKLQlmZHQtPnRvdGFsc2l6ZSA9IGNwdV90b19iZTMyKHRvdGFsc2l6ZSk7CisJZmR0LT5tYWdpYyA9IGNwdV90b19mZHQzMihtYWdpYyk7CisJZmR0LT50b3RhbHNpemUgPSBjcHVfdG9fZmR0MzIodG90YWxzaXplKTsKIAogCXNpemVsZWZ0ID0gdG90YWxzaXplIC0gc2l6ZW9mKG1hZ2ljKSAtIHNpemVvZih0b3RhbHNpemUpOwogCXAgPSBibG9iICsgc2l6ZW9mKG1hZ2ljKSAgKyBzaXplb2YodG90YWxzaXplKTsKIAogCXdoaWxlIChzaXplbGVmdCkgewotCQlpZiAoZmVvZihmKSkKKwkJaWYgKGZlb2YoZHRjZi0+ZmlsZSkpCiAJCQlkaWUoIkVPRiBiZWZvcmUgcmVhZGluZyAlZCBieXRlcyBvZiBEVCBibG9iXG4iLAogCQkJICAgIHRvdGFsc2l6ZSk7CiAKLQkJcmMgPSBmcmVhZChwLCAxLCBzaXplbGVmdCwgZik7Ci0JCWlmIChmZXJyb3IoZikpCisJCXJjID0gZnJlYWQocCwgMSwgc2l6ZWxlZnQsIGR0Y2YtPmZpbGUpOworCQlpZiAoZmVycm9yKGR0Y2YtPmZpbGUpKQogCQkJZGllKCJFcnJvciByZWFkaW5nIERUIGJsb2I6ICVzXG4iLAogCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CiAKQEAgLTg5MywxOSArODQ1LDExIEBACiAJCXAgKz0gcmM7CiAJfQogCi0Jb2ZmX2R0ID0gYmUzMl90b19jcHUoZmR0LT5vZmZfZHRfc3RydWN0KTsKLQlvZmZfc3RyID0gYmUzMl90b19jcHUoZmR0LT5vZmZfZHRfc3RyaW5ncyk7Ci0Jb2ZmX21lbV9yc3ZtYXAgPSBiZTMyX3RvX2NwdShmZHQtPm9mZl9tZW1fcnN2bWFwKTsKLQl2ZXJzaW9uID0gYmUzMl90b19jcHUoZmR0LT52ZXJzaW9uKTsKLQotCWZwcmludGYoc3RkZXJyLCAiXHRtYWdpYzpcdFx0XHQweCV4XG4iLCBtYWdpYyk7Ci0JZnByaW50ZihzdGRlcnIsICJcdHRvdGFsc2l6ZTpcdFx0JWRcbiIsIHRvdGFsc2l6ZSk7Ci0JZnByaW50ZihzdGRlcnIsICJcdG9mZl9kdF9zdHJ1Y3Q6XHRcdDB4JXhcbiIsIG9mZl9kdCk7Ci0JZnByaW50ZihzdGRlcnIsICJcdG9mZl9kdF9zdHJpbmdzOlx0XHQweCV4XG4iLCBvZmZfc3RyKTsKLQlmcHJpbnRmKHN0ZGVyciwgIlx0b2ZmX21lbV9yc3ZtYXA6XHRcdDB4JXhcbiIsIG9mZl9tZW1fcnN2bWFwKTsKLQlmcHJpbnRmKHN0ZGVyciwgIlx0dmVyc2lvbjpcdFx0MHgleFxuIiwgdmVyc2lvbiApOwotCWZwcmludGYoc3RkZXJyLCAiXHRsYXN0X2NvbXBfdmVyc2lvbjpcdDB4JXhcbiIsCi0JCWJlMzJfdG9fY3B1KGZkdC0+bGFzdF9jb21wX3ZlcnNpb24pKTsKKwlvZmZfZHQgPSBmZHQzMl90b19jcHUoZmR0LT5vZmZfZHRfc3RydWN0KTsKKwlvZmZfc3RyID0gZmR0MzJfdG9fY3B1KGZkdC0+b2ZmX2R0X3N0cmluZ3MpOworCW9mZl9tZW1fcnN2bWFwID0gZmR0MzJfdG9fY3B1KGZkdC0+b2ZmX21lbV9yc3ZtYXApOworCXZlcnNpb24gPSBmZHQzMl90b19jcHUoZmR0LT52ZXJzaW9uKTsKKwlib290X2NwdWlkX3BoeXMgPSBmZHQzMl90b19jcHUoZmR0LT5ib290X2NwdWlkX3BoeXMpOwogCiAJaWYgKG9mZl9tZW1fcnN2bWFwID49IHRvdGFsc2l6ZSkKIAkJZGllKCJNZW0gUmVzZXJ2ZSBzdHJ1Y3R1cmUgb2Zmc2V0IGV4Y2VlZHMgdG90YWwgc2l6ZVxuIik7CkBAIC05MTYsMjEgKzg2MCwxNyBAQAogCWlmIChvZmZfc3RyID4gdG90YWxzaXplKQogCQlkaWUoIlN0cmluZyB0YWJsZSBvZmZzZXQgZXhjZWVkcyB0b3RhbCBzaXplXG4iKTsKIAotCWlmICh2ZXJzaW9uID49IDIpCi0JCWZwcmludGYoc3RkZXJyLCAiXHRib290X2NwdWlkX3BoeXM6XHQweCV4XG4iLAotCQkJYmUzMl90b19jcHUoZmR0LT5ib290X2NwdWlkX3BoeXMpKTsKLQotCXNpemVfc3RyID0gLTE7CiAJaWYgKHZlcnNpb24gPj0gMykgewotCQlzaXplX3N0ciA9IGJlMzJfdG9fY3B1KGZkdC0+c2l6ZV9kdF9zdHJpbmdzKTsKLQkJZnByaW50ZihzdGRlcnIsICJcdHNpemVfZHRfc3RyaW5nczpcdCVkXG4iLCBzaXplX3N0cik7CisJCXVpbnQzMl90IHNpemVfc3RyID0gZmR0MzJfdG9fY3B1KGZkdC0+c2l6ZV9kdF9zdHJpbmdzKTsKIAkJaWYgKG9mZl9zdHIrc2l6ZV9zdHIgPiB0b3RhbHNpemUpCiAJCQlkaWUoIlN0cmluZyB0YWJsZSBleHRlbmRzIHBhc3QgdG90YWwgc2l6ZVxuIik7CisJCWluYnVmX2luaXQoJnN0cmJ1ZiwgYmxvYiArIG9mZl9zdHIsIGJsb2IgKyBvZmZfc3RyICsgc2l6ZV9zdHIpOworCX0gZWxzZSB7CisJCWluYnVmX2luaXQoJnN0cmJ1ZiwgYmxvYiArIG9mZl9zdHIsIGJsb2IgKyB0b3RhbHNpemUpOwogCX0KIAogCWlmICh2ZXJzaW9uID49IDE3KSB7Ci0JCXNpemVfZHQgPSBiZTMyX3RvX2NwdShmZHQtPnNpemVfZHRfc3RydWN0KTsKLQkJZnByaW50ZihzdGRlcnIsICJcdHNpemVfZHRfc3RydWN0Olx0XHQlZFxuIiwgc2l6ZV9kdCk7CisJCXNpemVfZHQgPSBmZHQzMl90b19jcHUoZmR0LT5zaXplX2R0X3N0cnVjdCk7CiAJCWlmIChvZmZfZHQrc2l6ZV9kdCA+IHRvdGFsc2l6ZSkKIAkJCWRpZSgiU3RydWN0dXJlIGJsb2NrIGV4dGVuZHMgcGFzdCB0b3RhbCBzaXplXG4iKTsKIAl9CkBAIC05NDQsMTAgKzg4NCw2IEBACiAJaW5idWZfaW5pdCgmbWVtcmVzdmJ1ZiwKIAkJICAgYmxvYiArIG9mZl9tZW1fcnN2bWFwLCBibG9iICsgdG90YWxzaXplKTsKIAlpbmJ1Zl9pbml0KCZkdGJ1ZiwgYmxvYiArIG9mZl9kdCwgYmxvYiArIHRvdGFsc2l6ZSk7Ci0JaWYgKHNpemVfc3RyID49IDApCi0JCWluYnVmX2luaXQoJnN0cmJ1ZiwgYmxvYiArIG9mZl9zdHIsIGJsb2IgKyBvZmZfc3RyICsgc2l6ZV9zdHIpOwotCWVsc2UKLQkJaW5idWZfaW5pdCgmc3RyYnVmLCBibG9iICsgb2ZmX3N0ciwgYmxvYiArIHRvdGFsc2l6ZSk7CiAKIAlyZXNlcnZlbGlzdCA9IGZsYXRfcmVhZF9tZW1fcmVzZXJ2ZSgmbWVtcmVzdmJ1Zik7CiAKQEAgLTk2NCw1ICs5MDAsNyBAQAogCiAJZnJlZShibG9iKTsKIAotCXJldHVybiBidWlsZF9ib290X2luZm8ocmVzZXJ2ZWxpc3QsIHRyZWUpOworCWR0Y19jbG9zZV9maWxlKGR0Y2YpOworCisJcmV0dXJuIGJ1aWxkX2Jvb3RfaW5mbyhyZXNlcnZlbGlzdCwgdHJlZSwgYm9vdF9jcHVpZF9waHlzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZnN0cmVlLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2ZzdHJlZS5jCmluZGV4IDJhMTYwYTQuLjc2NmIyNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZnN0cmVlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9mc3RyZWUuYwpAQCAtMzEsOCArMzEsOCBAQAogCXN0cnVjdCBub2RlICp0cmVlOwogCiAJZCA9IG9wZW5kaXIoZGlybmFtZSk7Ci0JaWYgKCEgZCkKLQkJZGllKCJvcGVuZGlyKCk6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCWlmICghZCkKKwkJZGllKCJDb3VsZG4ndCBvcGVuZGlyKCkgXCIlc1wiOiAlc1xuIiwgZGlybmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIAogCXRyZWUgPSBidWlsZF9ub2RlKE5VTEwsIE5VTEwpOwogCkBAIC04Nyw4ICs4Nyw2IEBACiAJdHJlZSA9IHJlYWRfZnN0cmVlKGRpcm5hbWUpOwogCXRyZWUgPSBuYW1lX25vZGUodHJlZSwgIiIsIE5VTEwpOwogCi0JZmlsbF9mdWxscGF0aHModHJlZSwgIiIpOwotCi0JcmV0dXJuIGJ1aWxkX2Jvb3RfaW5mbyhOVUxMLCB0cmVlKTsKKwlyZXR1cm4gYnVpbGRfYm9vdF9pbmZvKE5VTEwsIHRyZWUsIDApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2xpYmZkdF9lbnYuaCBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvbGliZmR0X2Vudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OWJmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2xpYmZkdF9lbnYuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9MSUJGRFRfRU5WX0gKKyNkZWZpbmUgX0xJQkZEVF9FTlZfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgX0IobikJKCh1bnNpZ25lZCBsb25nIGxvbmcpKCh1aW50OF90ICopJngpW25dKQorc3RhdGljIGlubGluZSB1aW50MzJfdCBmZHQzMl90b19jcHUodWludDMyX3QgeCkKK3sKKwlyZXR1cm4gKF9CKDApIDw8IDI0KSB8IChfQigxKSA8PCAxNikgfCAoX0IoMikgPDwgOCkgfCBfQigzKTsKK30KKyNkZWZpbmUgY3B1X3RvX2ZkdDMyKHgpIGZkdDMyX3RvX2NwdSh4KQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGZkdDY0X3RvX2NwdSh1aW50NjRfdCB4KQoreworCXJldHVybiAoX0IoMCkgPDwgNTYpIHwgKF9CKDEpIDw8IDQ4KSB8IChfQigyKSA8PCA0MCkgfCAoX0IoMykgPDwgMzIpCisJCXwgKF9CKDQpIDw8IDI0KSB8IChfQig1KSA8PCAxNikgfCAoX0IoNikgPDwgOCkgfCBfQig3KTsKK30KKyNkZWZpbmUgY3B1X3RvX2ZkdDY0KHgpIGZkdDY0X3RvX2NwdSh4KQorI3VuZGVmIF9CCisKKyNlbmRpZiAvKiBfTElCRkRUX0VOVl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2xpdmV0cmVlLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2xpdmV0cmVlLmMKaW5kZXggNmJhMDg0Ni4uMGNhM2RlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9saXZldHJlZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvbGl2ZXRyZWUuYwpAQCAtMTE1LDYgKzExNSw3IEBACiAJc3RydWN0IG5vZGUgKipwOwogCiAJY2hpbGQtPm5leHRfc2libGluZyA9IE5VTEw7CisJY2hpbGQtPnBhcmVudCA9IHBhcmVudDsKIAogCXAgPSAmcGFyZW50LT5jaGlsZHJlbjsKIAl3aGlsZSAoKnApCkBAIC0xMjMsNyArMTI0LDggQEAKIAkqcCA9IGNoaWxkOwogfQogCi1zdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpidWlsZF9yZXNlcnZlX2VudHJ5KHU2NCBhZGRyZXNzLCB1NjQgc2l6ZSwgY2hhciAqbGFiZWwpCitzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpidWlsZF9yZXNlcnZlX2VudHJ5KHVpbnQ2NF90IGFkZHJlc3MsIHVpbnQ2NF90IHNpemUsCisJCQkJCSBjaGFyICpsYWJlbCkKIHsKIAlzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpuZXcgPSB4bWFsbG9jKHNpemVvZigqbmV3KSk7CiAKQEAgLTE2NSwxMyArMTY3LDE0IEBACiB9CiAKIHN0cnVjdCBib290X2luZm8gKmJ1aWxkX2Jvb3RfaW5mbyhzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpyZXNlcnZlbGlzdCwKLQkJCQkgIHN0cnVjdCBub2RlICp0cmVlKQorCQkJCSAgc3RydWN0IG5vZGUgKnRyZWUsIHVpbnQzMl90IGJvb3RfY3B1aWRfcGh5cykKIHsKIAlzdHJ1Y3QgYm9vdF9pbmZvICpiaTsKIAogCWJpID0geG1hbGxvYyhzaXplb2YoKmJpKSk7CiAJYmktPnJlc2VydmVsaXN0ID0gcmVzZXJ2ZWxpc3Q7CiAJYmktPmR0ID0gdHJlZTsKKwliaS0+Ym9vdF9jcHVpZF9waHlzID0gYm9vdF9jcHVpZF9waHlzOwogCiAJcmV0dXJuIGJpOwogfQpAQCAtMjAyLDcgKzIwNSw3IEBACiBjZWxsX3QgcHJvcHZhbF9jZWxsKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKIHsKIAlhc3NlcnQocHJvcC0+dmFsLmxlbiA9PSBzaXplb2YoY2VsbF90KSk7Ci0JcmV0dXJuIGJlMzJfdG9fY3B1KCooKGNlbGxfdCAqKXByb3AtPnZhbC52YWwpKTsKKwlyZXR1cm4gZmR0MzJfdG9fY3B1KCooKGNlbGxfdCAqKXByb3AtPnZhbC52YWwpKTsKIH0KIAogc3RydWN0IG5vZGUgKmdldF9zdWJub2RlKHN0cnVjdCBub2RlICpub2RlLCBjb25zdCBjaGFyICpub2RlbmFtZSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvc3JjcG9zLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL3NyY3Bvcy5jCmluZGV4IDM1MmIwZmUuLjk2NDFiNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvc3JjcG9zLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9zcmNwb3MuYwpAQCAtMjAsODYgKzIwLDk3IEBACiAjaW5jbHVkZSAiZHRjLmgiCiAjaW5jbHVkZSAic3JjcG9zLmgiCiAKLQotLyoKLSAqIFJlY29yZCB0aGUgY29tcGxldGUgdW5pcXVlIHNldCBvZiBvcGVuZWQgZmlsZSBuYW1lcy4KLSAqIFByaW1hcmlseSB1c2VkIHRvIGNhY2hlIHNvdXJjZSBwb3NpdGlvbiBmaWxlIG5hbWVzLgotICovCi0jZGVmaW5lIE1BWF9OX0ZJTEVfTkFNRVMJKDEwMCkKLQotY29uc3QgY2hhciAqZmlsZV9uYW1lc1tNQVhfTl9GSUxFX05BTUVTXTsKLXN0YXRpYyBpbnQgbl9maWxlX25hbWVzID0gMDsKLQogLyoKICAqIExpa2UgeXlsaW5lbm8sIHRoaXMgaXMgdGhlIGN1cnJlbnQgb3BlbiBmaWxlIHBvcy4KICAqLwogCi1pbnQgc3JjcG9zX2ZpbGVudW0gPSAtMTsKK3N0cnVjdCBkdGNfZmlsZSAqc3JjcG9zX2ZpbGU7CiAKLQotCi1GSUxFICpkdGNfb3Blbl9maWxlKGNvbnN0IGNoYXIgKmZuYW1lKQorc3RhdGljIGludCBkdGNfb3Blbl9vbmUoc3RydWN0IGR0Y19maWxlICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2VhcmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm5hbWUpCiB7Ci0JRklMRSAqZjsKKwljaGFyICpmdWxsbmFtZTsKIAotCWlmIChsb29rdXBfZmlsZV9uYW1lKGZuYW1lLCAxKSA8IDApCi0JCWRpZSgiVG9vIG1hbnkgZmlsZXMgb3BlbmVkXG4iKTsKKwlpZiAoc2VhcmNoKSB7CisJCWZ1bGxuYW1lID0geG1hbGxvYyhzdHJsZW4oc2VhcmNoKSArIHN0cmxlbihmbmFtZSkgKyAyKTsKIAotCWlmIChzdHJlcShmbmFtZSwgIi0iKSkKLQkJZiA9IHN0ZGluOwotCWVsc2UKLQkJZiA9IGZvcGVuKGZuYW1lLCAiciIpOworCQlzdHJjcHkoZnVsbG5hbWUsIHNlYXJjaCk7CisJCXN0cmNhdChmdWxsbmFtZSwgIi8iKTsKKwkJc3RyY2F0KGZ1bGxuYW1lLCBmbmFtZSk7CisJfSBlbHNlIHsKKwkJZnVsbG5hbWUgPSBzdHJkdXAoZm5hbWUpOworCX0KIAotCWlmICghIGYpCi0JCWRpZSgiQ291bGRuJ3Qgb3BlbiBcIiVzXCI6ICVzXG4iLCBmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlmaWxlLT5maWxlID0gZm9wZW4oZnVsbG5hbWUsICJyIik7CisJaWYgKCFmaWxlLT5maWxlKSB7CisJCWZyZWUoZnVsbG5hbWUpOworCQlyZXR1cm4gMDsKKwl9CiAKLQlyZXR1cm4gZjsKKwlmaWxlLT5uYW1lID0gZnVsbG5hbWU7CisJcmV0dXJuIDE7CiB9CiAKIAotCi0vKgotICogTG9jYXRlIGFuZCBvcHRpb25hbGx5IGFkZCBmaWxlbmFtZSBmbmFtZSBpbiB0aGUgZmlsZV9uYW1lc1tdIGFycmF5LgotICoKLSAqIElmIHRoZSBmaWxlbmFtZSBpcyBjdXJyZW50bHkgbm90IGluIHRoZSBhcnJheSBhbmQgdGhlIGJvb2xlYW4KLSAqIGFkZF9pdCBpcyBub24temVybywgYW4gYXR0ZW1wdCB0byBhZGQgdGhlIGZpbGVuYW1lIHdpbGwgYmUgbWFkZS4KLSAqCi0gKiBSZXR1cm5zOwotICogICAgSW5kZXggWzAuLk1BWF9OX0ZJTEVfTkFNRVMpIHdoZXJlIHRoZSBmaWxlbmFtZSBpcyBrZXB0Ci0gKiAgICAtMSBpZiB0aGUgbmFtZSBjYW4gbm90IGJlIHJlY29yZGVkCi0gKi8KLQotaW50IGxvb2t1cF9maWxlX25hbWUoY29uc3QgY2hhciAqZm5hbWUsIGludCBhZGRfaXQpCitzdHJ1Y3QgZHRjX2ZpbGUgKmR0Y19vcGVuX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNlYXJjaF9wYXRoICpzZWFyY2gpCiB7Ci0JaW50IGk7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBzZWFyY2hfcGF0aCBkZWZhdWx0X3NlYXJjaCA9IHsgTlVMTCwgTlVMTCwgTlVMTCB9OwogCi0JZm9yIChpID0gMDsgaSA8IG5fZmlsZV9uYW1lczsgaSsrKSB7Ci0JCWlmIChzdHJjbXAoZmlsZV9uYW1lc1tpXSwgZm5hbWUpID09IDApCi0JCQlyZXR1cm4gaTsKKwlzdHJ1Y3QgZHRjX2ZpbGUgKmZpbGU7CisJY29uc3QgY2hhciAqc2xhc2g7CisKKwlmaWxlID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGR0Y19maWxlKSk7CisKKwlzbGFzaCA9IHN0cnJjaHIoZm5hbWUsICcvJyk7CisJaWYgKHNsYXNoKSB7CisJCWNoYXIgKmRpciA9IHhtYWxsb2Moc2xhc2ggLSBmbmFtZSArIDEpOworCisJCW1lbWNweShkaXIsIGZuYW1lLCBzbGFzaCAtIGZuYW1lKTsKKwkJZGlyW3NsYXNoIC0gZm5hbWVdID0gMDsKKwkJZmlsZS0+ZGlyID0gZGlyOworCX0gZWxzZSB7CisJCWZpbGUtPmRpciA9IE5VTEw7CiAJfQogCi0JaWYgKGFkZF9pdCkgewotCQlpZiAobl9maWxlX25hbWVzIDwgTUFYX05fRklMRV9OQU1FUykgewotCQkJZmlsZV9uYW1lc1tuX2ZpbGVfbmFtZXNdID0gc3RyZHVwKGZuYW1lKTsKLQkJCXJldHVybiBuX2ZpbGVfbmFtZXMrKzsKLQkJfQorCWlmIChzdHJlcShmbmFtZSwgIi0iKSkgeworCQlmaWxlLT5uYW1lID0gInN0ZGluIjsKKwkJZmlsZS0+ZmlsZSA9IHN0ZGluOworCQlyZXR1cm4gZmlsZTsKIAl9CiAKLQlyZXR1cm4gLTE7CisJaWYgKGZuYW1lWzBdID09ICcvJykgeworCQlmaWxlLT5maWxlID0gZm9wZW4oZm5hbWUsICJyIik7CisJCWlmICghZmlsZS0+ZmlsZSkKKwkJCWdvdG8gZmFpbDsKKworCQlmaWxlLT5uYW1lID0gc3RyZHVwKGZuYW1lKTsKKwkJcmV0dXJuIGZpbGU7CisJfQorCisJaWYgKCFzZWFyY2gpCisJCXNlYXJjaCA9ICZkZWZhdWx0X3NlYXJjaDsKKworCXdoaWxlIChzZWFyY2gpIHsKKwkJaWYgKGR0Y19vcGVuX29uZShmaWxlLCBzZWFyY2gtPmRpciwgZm5hbWUpKQorCQkJcmV0dXJuIGZpbGU7CisKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCWdvdG8gZmFpbDsKKworCQlzZWFyY2ggPSBzZWFyY2gtPm5leHQ7CisJfQorCitmYWlsOgorCWRpZSgiQ291bGRuJ3Qgb3BlbiBcIiVzXCI6ICVzXG4iLCBmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIH0KIAotCi1jb25zdCBjaGFyICpzcmNwb3NfZmlsZW5hbWVfZm9yX251bShpbnQgZmlsZW51bSkKK3ZvaWQgZHRjX2Nsb3NlX2ZpbGUoc3RydWN0IGR0Y19maWxlICpmaWxlKQogewotCWlmICgwIDw9IGZpbGVudW0gJiYgZmlsZW51bSA8IG5fZmlsZV9uYW1lcykgewotCQlyZXR1cm4gZmlsZV9uYW1lc1tmaWxlbnVtXTsKLQl9CisJaWYgKGZjbG9zZShmaWxlLT5maWxlKSkKKwkJZGllKCJFcnJvciBjbG9zaW5nIFwiJXNcIjogJXNcbiIsIGZpbGUtPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAKLQlyZXR1cm4gMDsKLX0KLQotCi1jb25zdCBjaGFyICpzcmNwb3NfZ2V0X2ZpbGVuYW1lKHZvaWQpCi17Ci0JcmV0dXJuIHNyY3Bvc19maWxlbmFtZV9mb3JfbnVtKHNyY3Bvc19maWxlbnVtKTsKKwlmcmVlKGZpbGUtPmRpcik7CisJZnJlZShmaWxlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvc3JjcG9zLmggYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL3NyY3Bvcy5oCmluZGV4IGNlN2FiNWIuLmUxN2M3YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvc3JjcG9zLmgKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9zcmNwb3MuaApAQCAtMjIsMTMgKzIyLDIxIEBACiAgKiBhcnJheSBvZiBhbGwgb3BlbmVkIGZpbGVuYW1lcy4KICAqLwogCisjaW5jbHVkZSA8c3RkaW8uaD4KKworc3RydWN0IGR0Y19maWxlIHsKKwljaGFyICpkaXI7CisJY29uc3QgY2hhciAqbmFtZTsKKwlGSUxFICpmaWxlOworfTsKKwogI2lmICEgZGVmaW5lZChZWUxUWVBFKSAmJiAhIGRlZmluZWQoWVlMVFlQRV9JU19ERUNMQVJFRCkKIHR5cGVkZWYgc3RydWN0IFlZTFRZUEUgewogICAgIGludCBmaXJzdF9saW5lOwogICAgIGludCBmaXJzdF9jb2x1bW47CiAgICAgaW50IGxhc3RfbGluZTsKICAgICBpbnQgbGFzdF9jb2x1bW47Ci0gICAgaW50IGZpbGVudW07CisgICAgc3RydWN0IGR0Y19maWxlICpmaWxlOwogfSBZWUxUWVBFOwogCiAjZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQJMQpAQCAtNDgsNyArNTYsNyBAQAogCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXAogCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKIAkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAotCSAgKEN1cnJlbnQpLmZpbGVudW0gICAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmZpbGVudW07CQlcCisJICAoQ3VycmVudCkuZmlsZSAgICAgICAgID0gWVlSSFNMT0MgKFJocywgTikuZmlsZTsJCVwKIAl9CQkJCQkJCQlcCiAgICAgICBlbHNlCQkJCQkJCQlcCiAJewkJCQkJCQkJXApAQCAtNTYsMjAgKzY0LDIyIEBACiAJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAogCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCiAJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfY29sdW1uOwkJCQlcCi0JICAoQ3VycmVudCkuZmlsZW51bSAgICAgID0gWVlSSFNMT0MgKFJocywgMCkuZmlsZW51bTsJCVwKKwkgIChDdXJyZW50KS5maWxlICAgICAgICAgPSBZWVJIU0xPQyAoUmhzLCAwKS5maWxlOwkJXAogCX0JCQkJCQkJCVwKICAgICB3aGlsZSAoWVlJRCAoMCkpCiAKIAogCiBleHRlcm4gdm9pZCB5eWVycm9yKGNoYXIgY29uc3QgKik7CitleHRlcm4gdm9pZCB5eWVycm9yZihjaGFyIGNvbnN0ICosIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwgMikpKTsKIAotZXh0ZXJuIGludCBzcmNwb3NfZmlsZW51bTsKK2V4dGVybiBzdHJ1Y3QgZHRjX2ZpbGUgKnNyY3Bvc19maWxlOwogCi1leHRlcm4gaW50IHB1c2hfaW5wdXRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSk7Ci1leHRlcm4gaW50IHBvcF9pbnB1dF9maWxlKHZvaWQpOworc3RydWN0IHNlYXJjaF9wYXRoIHsKKwljb25zdCBjaGFyICpkaXI7IC8qIE5VTEwgZm9yIGN1cnJlbnQgZGlyZWN0b3J5ICovCisJc3RydWN0IHNlYXJjaF9wYXRoICpwcmV2LCAqbmV4dDsKK307CiAKLWV4dGVybiBGSUxFICpkdGNfb3Blbl9maWxlKGNvbnN0IGNoYXIgKmZuYW1lKTsKLWV4dGVybiBpbnQgbG9va3VwX2ZpbGVfbmFtZShjb25zdCBjaGFyICpmbmFtZSwgaW50IGFkZF9pdCk7Ci1leHRlcm4gY29uc3QgY2hhciAqc3JjcG9zX2ZpbGVuYW1lX2Zvcl9udW0oaW50IGZpbGVudW0pOwotY29uc3QgY2hhciAqc3JjcG9zX2dldF9maWxlbmFtZSh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgZHRjX2ZpbGUgKmR0Y19vcGVuX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzZWFyY2hfcGF0aCAqc2VhcmNoKTsKK2V4dGVybiB2b2lkIGR0Y19jbG9zZV9maWxlKHN0cnVjdCBkdGNfZmlsZSAqZmlsZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL3RyZWVzb3VyY2UuYyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvdHJlZXNvdXJjZS5jCmluZGV4IGE2YTc3NjcuLmViZWI2ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvdHJlZXNvdXJjZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvdHJlZXNvdXJjZS5jCkBAIC0yMywyMCArMjMsMjMgQEAKIAogZXh0ZXJuIEZJTEUgKnl5aW47CiBleHRlcm4gaW50IHl5cGFyc2Uodm9pZCk7Ci1leHRlcm4gdm9pZCB5eWVycm9yKGNoYXIgY29uc3QgKik7CiAKIHN0cnVjdCBib290X2luZm8gKnRoZV9ib290X2luZm87CitpbnQgdHJlZXNvdXJjZV9lcnJvcjsKIAogc3RydWN0IGJvb3RfaW5mbyAqZHRfZnJvbV9zb3VyY2UoY29uc3QgY2hhciAqZm5hbWUpCiB7CiAJdGhlX2Jvb3RfaW5mbyA9IE5VTEw7CisJdHJlZXNvdXJjZV9lcnJvciA9IDA7CiAKLQlwdXNoX2lucHV0X2ZpbGUoZm5hbWUpOworCXNyY3Bvc19maWxlID0gZHRjX29wZW5fZmlsZShmbmFtZSwgTlVMTCk7CisJeXlpbiA9IHNyY3Bvc19maWxlLT5maWxlOwogCiAJaWYgKHl5cGFyc2UoKSAhPSAwKQotCQlyZXR1cm4gTlVMTDsKKwkJZGllKCJVbmFibGUgdG8gcGFyc2UgaW5wdXQgdHJlZVxuIik7CiAKLQlmaWxsX2Z1bGxwYXRocyh0aGVfYm9vdF9pbmZvLT5kdCwgIiIpOworCWlmICh0cmVlc291cmNlX2Vycm9yKQorCQlkaWUoIlN5bnRheCBlcnJvciBwYXJzaW5nIGlucHV0IHRyZWVcbiIpOwogCiAJcmV0dXJuIHRoZV9ib290X2luZm87CiB9CkBAIC0xNDQsNyArMTQ3LDcgQEAKIAkJCW0gPSBtLT5uZXh0OwogCQl9CiAKLQkJZnByaW50ZihmLCAiMHgleCIsIGJlMzJfdG9fY3B1KCpjcCsrKSk7CisJCWZwcmludGYoZiwgIjB4JXgiLCBmZHQzMl90b19jcHUoKmNwKyspKTsKIAkJaWYgKCh2b2lkICopY3AgPj0gcHJvcGVuZCkKIAkJCWJyZWFrOwogCQlmcHJpbnRmKGYsICIgIik7CkBAIC0xNzMsNyArMTc2LDcgQEAKIAkJfQogCiAJCWZwcmludGYoZiwgIiUwMmhoeCIsICpicCsrKTsKLQkJaWYgKCh2b2lkICopYnAgPj0gcHJvcGVuZCkKKwkJaWYgKChjb25zdCB2b2lkICopYnAgPj0gcHJvcGVuZCkKIAkJCWJyZWFrOwogCQlmcHJpbnRmKGYsICIgIik7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy92ZXJzaW9uX2dlbi5oIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy92ZXJzaW9uX2dlbi5oCmluZGV4IDZjMzQzMDMuLjY1OGZmNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvdmVyc2lvbl9nZW4uaAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL3ZlcnNpb25fZ2VuLmgKQEAgLTEgKzEgQEAKLSNkZWZpbmUgRFRDX1ZFUlNJT04gIkRUQyAxLjAuMC1nZDZmOWI2MmYiCisjZGVmaW5lIERUQ19WRVJTSU9OICJEVEMgMS4yLjAiCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXJjaGVzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hcmNoZXMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MTEzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXJjaGVzLmR0cwpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgQU1DQyBBcmNoZXMgKGR1YWwgNDYwR1QgYm9hcmQpCisgKgorICogKEMpIENvcHlyaWdodCAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24KKyAqIFZpY3RvciBHYWxsYXJkbyA8dmdhbGxhcmRvQGFtY2MuY29tPgorICogQWRhbSBHcmFoYW0gPGFncmFoYW1AYW1jYy5jb20+CisgKgorICogQmFzZWQgb24gdGhlIGdsYWNpZXIuZHRzIGZpbGUKKyAqICAgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorICogICBDb3B5cmlnaHQgMjAwOCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8MT47CisJbW9kZWwgPSAiYW1jYyxhcmNoZXMiOworCWNvbXBhdGlibGUgPSAiYW1jYyxhcmNoZXMiOworCWRjci1wYXJlbnQgPSA8JnsvY3B1cy9jcHVAMH0+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZFTUFDMDsKKwkJZXRoZXJuZXQxID0gJkVNQUMxOworCQlldGhlcm5ldDIgPSAmRU1BQzI7CisJCXNlcmlhbDAgPSAmVUFSVDA7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCW1vZGVsID0gIlBvd2VyUEMsNDYwR1QiOworCQkJcmVnID0gPDB4MDAwMDAwMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtc2l6ZSA9IDwzMjc2OD47CisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OworCQkJZGNyLWNvbnRyb2xsZXI7CisJCQlkY3ItYWNjZXNzLW1ldGhvZCA9ICJuYXRpdmUiOworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJfTsKKworCVVJQzA6IGludGVycnVwdC1jb250cm9sbGVyMCB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBndCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwwPjsKKwkJZGNyLXJlZyA9IDwweDBjMCAweDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJVUlDMTogaW50ZXJydXB0LWNvbnRyb2xsZXIxIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MGd0IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDE+OworCQlkY3ItcmVnID0gPDB4MGQwIDB4MDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPDB4MWUgMHg0IDB4MWYgMHg0PjsgLyogY2FzY2FkZSAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwl9OworCisJVUlDMjogaW50ZXJydXB0LWNvbnRyb2xsZXIyIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MGd0IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDI+OworCQlkY3ItcmVnID0gPDB4MGUwIDB4MDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPDB4YSAweDQgMHhiIDB4ND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCVVJQzM6IGludGVycnVwdC1jb250cm9sbGVyMyB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBndCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwzPjsKKwkJZGNyLXJlZyA9IDwweDBmMCAweDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0cyA9IDwweDEwIDB4NCAweDExIDB4ND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCVNEUjA6IHNkciB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHNkci00NjBndCI7CisJCWRjci1yZWcgPSA8MHgwMGUgMHgwMDI+OworCX07CisKKwlDUFIwOiBjcHIgeworCQljb21wYXRpYmxlID0gImlibSxjcHItNDYwZ3QiOworCQlkY3ItcmVnID0gPDB4MDBjIDB4MDAyPjsKKwl9OworCisJcGxiIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0scGxiLTQ2MGd0IiwgImlibSxwbGI0IjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCisJCVNEUkFNMDogc2RyYW0geworCQkJY29tcGF0aWJsZSA9ICJpYm0sc2RyYW0tNDYwZ3QiLCAiaWJtLHNkcmFtLTQwNWdwIjsKKwkJCWRjci1yZWcgPSA8MHgwMTAgMHgwMDI+OworCQl9OworCisJCU1BTDA6IG1jbWFsIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLG1jbWFsLTQ2MGd0IiwgImlibSxtY21hbDIiOworCQkJZGNyLXJlZyA9IDwweDE4MCAweDA2Mj47CisJCQludW0tdHgtY2hhbnMgPSA8Mz47CisJCQludW0tcngtY2hhbnMgPSA8MjQ+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzI+OworCQkJaW50ZXJydXB0cyA9IDwJLypUWEVPQiovIDB4NiAweDQKKwkJCQkJLypSWEVPQiovIDB4NyAweDQKKwkJCQkJLypTRVJSKi8gIDB4MyAweDQKKwkJCQkJLypUWERFKi8gIDB4NCAweDQKKwkJCQkJLypSWERFKi8gIDB4NSAweDQ+OworCQkJZGVzYy1iYXNlLWFkZHItaGlnaCA9IDwweDg+OworCQl9OworCisJCVBPQjA6IG9wYiB7CisJCQljb21wYXRpYmxlID0gImlibSxvcGItNDYwZ3QiLCAiaWJtLG9wYiI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzID0gPDB4YjAwMDAwMDAgMHgwMDAwMDAwNCAweGIwMDAwMDAwIDB4NTAwMDAwMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisKKwkJCUVCQzA6IGViYyB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZWJjLTQ2MGd0IiwgImlibSxlYmMiOworCQkJCWRjci1yZWcgPSA8MHgwMTIgMHgwMDI+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCS8qIHJhbmdlcyBwcm9wZXJ0eSBpcyBzdXBwbGllZCBieSBVLUJvb3QgKi8KKwkJCQlpbnRlcnJ1cHRzID0gPDB4NiAweDQ+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJfTsKKworCQkJVUFSVDA6IHNlcmlhbEBlZjYwMDMwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDwweGVmNjAwMzAwIDB4MDAwMDAwMDg+OworCQkJCXZpcnR1YWwtcmVnID0gPDB4ZWY2MDAzMDA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MSAweDQ+OworCQkJfTsKKworCQkJSUlDMDogaTJjQGVmNjAwNzAwIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDYwZ3QiLCAiaWJtLGlpYyI7CisJCQkJcmVnID0gPDB4ZWY2MDA3MDAgMHgwMDAwMDAxND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDwweDIgMHg0PjsKKwkJCX07CisKKwkJCUlJQzE6IGkyY0BlZjYwMDgwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQ2MGd0IiwgImlibSxpaWMiOworCQkJCXJlZyA9IDwweGVmNjAwODAwIDB4MDAwMDAwMTQ+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MHgzIDB4ND47CisJCQl9OworCisJCQlUQUgwOiBlbWFjLXRhaEBlZjYwMTM1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sdGFoLTQ2MGd0IiwgImlibSx0YWgiOworCQkJCXJlZyA9IDwweGVmNjAxMzUwIDB4MDAwMDAwMzA+OworCQkJfTsKKworCQkJVEFIMTogZW1hYy10YWhAZWY2MDE0NTAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLHRhaC00NjBndCIsICJpYm0sdGFoIjsKKwkJCQlyZWcgPSA8MHhlZjYwMTQ1MCAweDAwMDAwMDMwPjsKKwkJCX07CisKKwkJCUVNQUMwOiBldGhlcm5ldEBlZjYwMGUwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMD47CisJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzIgMHgxMCAweDQKKwkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDE0IDB4ND47CisJCQkJcmVnID0gPDB4ZWY2MDBlMDAgMHgwMDAwMDBjND47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OworCQkJCW1hbC10eC1jaGFubmVsID0gPDA+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CisJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OworCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlwaHktbW9kZSA9ICJzZ21paSI7CisJCQkJcGh5LW1hcCA9IDwweGZmZmZmZmZmPjsKKwkJCQlncGNzLWFkZHJlc3MgPSA8MHgwMDAwMDAwYT47CisJCQkJdGFoLWRldmljZSA9IDwmVEFIMD47CisJCQkJdGFoLWNoYW5uZWwgPSA8MD47CisJCQkJaGFzLWludmVydGVkLXN0YWNyLW9jOworCQkJCWhhcy1uZXctc3RhY3Itc3Rhb3BjOworCQkJfTsKKworCQkJRU1BQzE6IGV0aGVybmV0QGVmNjAwZjAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNHN5bmMiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkVNQUMxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MCAweDE+OworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDExIDB4NAorCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTUgMHg0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMGYwMCAweDAwMDAwMGM0PjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CisJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MT47CisJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8OD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQltYXgtZnJhbWUtc2l6ZSA9IDw5MDAwPjsKKwkJCQlyeC1maWZvLXNpemUgPSA8NDA5Nj47CisJCQkJdHgtZmlmby1zaXplID0gPDIwNDg+OworCQkJCXBoeS1tb2RlID0gInNnbWlpIjsKKwkJCQlwaHktbWFwID0gPDB4MDAwMDAwMDA+OworCQkJCWdwY3MtYWRkcmVzcyA9IDwweDAwMDAwMDBiPjsKKwkJCQl0YWgtZGV2aWNlID0gPCZUQUgxPjsKKwkJCQl0YWgtY2hhbm5lbCA9IDwxPjsKKwkJCQloYXMtaW52ZXJ0ZWQtc3RhY3Itb2M7CisJCQkJaGFzLW5ldy1zdGFjci1zdGFvcGM7CisJCQkJbWRpby1kZXZpY2UgPSA8JkVNQUMwPjsKKwkJCX07CisKKwkJCUVNQUMyOiBldGhlcm5ldEBlZjYwMTEwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMj47CisJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzIgMHgxMiAweDQKKwkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDE2IDB4ND47CisJCQkJcmVnID0gPDB4ZWY2MDExMDAgMHgwMDAwMDBjND47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OworCQkJCW1hbC10eC1jaGFubmVsID0gPDI+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDE2PjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKKwkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcGh5LW1vZGUgPSAic2dtaWkiOworCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMT47CisJCQkJZ3Bjcy1hZGRyZXNzID0gPDB4MDAwMDAwMEM+OworCQkJCWhhcy1pbnZlcnRlZC1zdGFjci1vYzsKKwkJCQloYXMtbmV3LXN0YWNyLXN0YW9wYzsKKwkJCQltZGlvLWRldmljZSA9IDwmRU1BQzA+OworCQkJfTsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hc3A4MzR4LXJlZGJvb3QuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FzcDgzNHgtcmVkYm9vdC5kdHMKaW5kZXggOGIxYmIwZS4uNjIzNWZjYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FzcDgzNHgtcmVkYm9vdC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FzcDgzNHgtcmVkYm9vdC5kdHMKQEAgLTEzMCwyNCArMTMwLDI4IEBACiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0Ny1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZDYwODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBHRSBGYW51YyBTQkM2MTAgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDggR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEJhc2VkIG9uOiBTQlMgQ002IERldmljZSBUcmVlIFNvdXJjZQorICogQ29weXJpZ2h0IDIwMDcgU0JTIFRlY2hub2xvZ2llcyBHbWJIICYgQ28uIEtHCisgKiBBbmQ6IG1wYzg2NDFfaHBjbi5kdHMgKE1QQzg2NDEgSFBDTiBEZXZpY2UgVHJlZSBTb3VyY2UpCisgKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKi8KKworLyoKKyAqIENvbXBpbGVkIHdpdGggZHRjIC1JIGR0cyAtTyBkdGIgLW8gZ2VmX3NiYzYxMC5kdGIgZ2VmX3NiYzYxMC5kdHMKKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAiR0VGX1NCQzYxMCI7CisJY29tcGF0aWJsZSA9ICJnZWYsc2JjNjEwIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmZW5ldDA7CisJCWV0aGVybmV0MSA9ICZlbmV0MTsKKwkJc2VyaWFsMCA9ICZzZXJpYWwwOworCQlzZXJpYWwxID0gJnNlcmlhbDE7CisJCXBjaTAgPSAmcGNpMDsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDg2NDFAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIEZyb20gdWJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCX07CisJCVBvd2VyUEMsODY0MUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MT47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gRnJvbSB1Ym9vdAorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MCAweDQwMDAwMDAwPjsJLy8gc2V0IGJ5IHVib290CisJfTsKKworCWxvY2FsYnVzQGZlZjA1MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWxvY2FsYnVzIiwgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHhmODAwNTAwMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDE5IDI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZmYwMDAwMDAgMHgwMTAwMDAwMCAgICAgLy8gMTZNQiBCb290IGZsYXNoCisJCQkgIDEgMCAweGU4MDAwMDAwIDB4MDgwMDAwMDAgICAgIC8vIFBhZ2VkIEZsYXNoIDAKKwkJCSAgMiAwIDB4ZTAwMDAwMDAgMHgwODAwMDAwMCAgICAgLy8gUGFnZWQgRmxhc2ggMQorCQkJICAzIDAgMHhmYzEwMDAwMCAweDAwMDIwMDAwICAgICAvLyBOVlJBTQorCQkJICA0IDAgMHhmYzAwMDAwMCAweDAwMDA4MDAwICAgICAvLyBGUEdBCisJCQkgIDUgMCAweGZjMDA4MDAwIDB4MDAwMDgwMDAgICAgIC8vIEFGSVggRlBHQQorCQkJICA2IDAgMHhmZDAwMDAwMCAweDAwODAwMDAwICAgICAvLyBJTyBGUEdBICg4LWJpdCkKKwkJCSAgNyAwIDB4ZmQ4MDAwMDAgMHgwMDgwMDAwMD47ICAgLy8gSU8gRlBHQSAoMzItYml0KQorCisJCWZwZ2FANCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLGZwZ2EtcmVncyI7CisJCQlyZWcgPSA8MHg0IDB4MCAweDQwPjsKKwkJfTsKKwkJZ2VmX3BpYzogcGljQDQsNDAwMCB7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQljb21wYXRpYmxlID0gImdlZixmcGdhLXBpYyI7CisJCQlyZWcgPSA8MHg0IDB4NDAwMCAweDIwPjsKKwkJCWludGVycnVwdHMgPSA8MHg4CisJCQkJICAgICAgMHg5PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCX07CisJfTsKKworCXNvY0BmZWYwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzID0gPDB4MCAweGZlZjAwMDAwIDB4MDAxMDAwMDA+OworCQlyZWcgPSA8MHhmZWYwMDAwMCAweDEwMDAwMD47CS8vIENDU1JCQVIgMU0KKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlpMmMxOiBpMmNAMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJiIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCisJCQlldGlANmIgeworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTY4MiI7CisJCQkJcmVnID0gPDB4NmI+OworCQkJfTsKKwkJfTsKKworCQlpMmMyOiBpMmNAMzEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJiIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQl9OworCisJCWRtYUAyMTMwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEiLCAiZnNsLGVsb3BsdXMtZG1hIjsKKwkJCXJlZyA9IDwweDIxMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjExMDAgMHgyMDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRtYS1jaGFubmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjEgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDE4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMyAyPjsKKwkJCX07CisJCX07CisKKwkJbWRpb0AyNDUyMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OworCisJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCQkJaW50ZXJydXB0cyA9IDwweDkgMHg0PjsKKwkJCQlyZWcgPSA8MT47CisJCQl9OworCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OworCQkJCWludGVycnVwdHMgPSA8MHg4IDB4ND47CisJCQkJcmVnID0gPDM+OworCQkJfTsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4MiAweDFlIDB4MiAweDIyIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKKwkJfTsKKworCQllbmV0MTogZXRoZXJuZXRAMjYwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwweDFmIDB4MiAweDIwIDB4MiAweDIxIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8MHgyYSAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJc2VyaWFsMTogc2VyaWFsQDQ2MDAgeworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDYwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWMgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJfTsKKworCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZ3V0cyI7CisJCQlyZWcgPSA8MHhlMDAwMCAweDEwMDA+OworCQkJZnNsLGhhcy1yc3RjcjsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpZUBmZWYwODAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZmVmMDgwMDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDB4MCAweGZmPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHg0MDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZmUwMDAwMDAgMHgwIDB4MDA0MDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwweDE4IDB4Mj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJMHgwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTB4MDAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkweDAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMHgwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKKwkJPjsKKworCQlwY2llQDAgeworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDAgMHg0MDAwMDAwMAorCisJCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCisJCQkJICAweDAgMHgwMDQwMDAwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMKaW5kZXggMjRjZjBkYi4uZjM3ODdhMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dsYWNpZXIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cwpAQCAtMTQsNyArMTQsNyBAQAogCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCSNzaXplLWNlbGxzID0gPDE+OwogCW1vZGVsID0gImFtY2MsZ2xhY2llciI7Ci0JY29tcGF0aWJsZSA9ICJhbWNjLGdsYWNpZXIiLCAiYW1jYyxjYW55b25sYW5kcyI7CisJY29tcGF0aWJsZSA9ICJhbWNjLGdsYWNpZXIiOwogCWRjci1wYXJlbnQgPSA8JnsvY3B1cy9jcHVAMH0+OwogCiAJYWxpYXNlcyB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWdjb2dlLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZ2NvZ2UuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMzI1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWdjb2dlLmR0cwpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIERldmljZSBUcmVlIGZvciB0aGUgTUdDT0dFIHBsYXR0Zm9ybSBmcm9tIGtleW1pbGUKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqIEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisvIHsKKwltb2RlbCA9ICJNR0NPR0UiOworCWNvbXBhdGlibGUgPSAia2V5bWlsZSxtZ2NvZ2UiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZldGgwOworCQlzZXJpYWwwID0gJnNtYzI7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4MjQ3QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwxNjM4ND47CisJCQlpLWNhY2hlLXNpemUgPSA8MTYzODQ+OworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJfTsKKwl9OworCisJbG9jYWxidXNAZjAwMTAxMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjQ3LWxvY2FsYnVzIiwKKwkJICAgICAgICAgICAgICJmc2wscHEyLWxvY2FsYnVzIiwKKwkJICAgICAgICAgICAgICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyZWcgPSA8MHhmMDAxMDEwMCAweDQwPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZmUwMDAwMDAgMHgwMDQwMDAwMAorCQkJICA1IDAgMHg1MDAwMDAwMCAweDIwMDAwMDAwCisJCQk+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwwIDB4MCAweDQwMDAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJYmFuay13aWR0aCA9IDwxPjsKKwkJCWRldmljZS13aWR0aCA9IDwxPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJCXJlZyA9IDwwIDB4NDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA0MDAwMCB7CisJCQkJbGFiZWwgPSAiZW52IjsKKwkJCQlyZWcgPSA8MHg0MDAwMCAweDIwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANjAwMDAgeworCQkJCWxhYmVsID0gImtlcm5lbCI7CisJCQkJcmVnID0gPDB4NjAwMDAgMHgyMjAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAyODAwMDAgeworCQkJCWxhYmVsID0gImR0YiI7CisJCQkJcmVnID0gPDB4MjgwMDAwIDB4MjAwMDA+OworCQkJfTsKKwkJfTsKKworCQlmbGFzaEA1LDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDUgMHgwIDB4MjAwMDAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJyYW1kaXNrIjsKKwkJCQlyZWcgPSA8MCAweDdhMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDdhMDAwMCB7CisJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJcmVnID0gPDB4N2EwMDAwIDB4MTg2MDAwMD47CisJCQl9OworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MCAwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCX07CisKKwlzb2NAZjAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNDctaW1tciIsICJmc2wscHEyLXNvYyIsICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzID0gPDB4MDAwMDAwMDAgMHhmMDAwMDAwMCAweDAwMDUzMDAwPjsKKworCQkvLyBUZW1wb3JhcnkgdW50aWwgY29kZSBzdG9wcyBkZXBlbmRpbmcgb24gaXQuCisJCWRldmljZV90eXBlID0gInNvYyI7CisKKwkJY3BtQDExOWMwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI0Ny1jcG0iLCAiZnNsLGNwbTIiLAorCQkJCQkic2ltcGxlLWJ1cyI7CisJCQlyZWcgPSA8MHgxMTljMCAweDMwPjsKKwkJCXJhbmdlczsKKworCQkJbXVyYW0geworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbS1tdXJhbSI7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJcmFuZ2VzID0gPDAgMCAweDEwMDAwPjsKKworCQkJCWRhdGFAMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbS1tdXJhbS1kYXRhIjsKKwkJCQkJcmVnID0gPDB4ODAgMHgxZjgwIDB4OTgwMCAweDgwMD47CisJCQkJfTsKKwkJCX07CisKKwkJCWJyZ0AxMTlmMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI0Ny1icmciLAorCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItYnJnIiwKKwkJCQkgICAgICAgICAgICAgImZzbCxjcG0tYnJnIjsKKwkJCQlyZWcgPSA8MHgxMTlmMCAweDEwIDB4MTE1ZjAgMHgxMD47CisJCQl9OworCisJCQkvKiBNb25pdG9yIHBvcnQvU01DMiAqLworCQkJc21jMjogc2VyaWFsQDExYTkwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNDctc21jLXVhcnQiLAorCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItc21jLXVhcnQiOworCQkJCXJlZyA9IDwweDExYTkwIDB4MjAgMHg4OGZjIDB4MDI+OworCQkJCWludGVycnVwdHMgPSA8NSA4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OworCQkJCWZzbCxjcG0tYnJnID0gPDI+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDIxMjAwMDAwPjsKKwkJCQljdXJyZW50LXNwZWVkID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQl9OworCisJCQlldGgwOiBldGhlcm5ldEAxMWE2MCB7CisJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI0Ny1zY2MtZW5ldCIsCisJCQkJICAgICAgICAgICAgICJmc2wsY3BtMi1zY2MtZW5ldCI7CisJCQkJcmVnID0gPDB4MTFhNjAgMHgyMCAweDgzMDAgMHgxMDAgMHgxMTM5MCAxPjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdHMgPSA8NDMgOD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKwkJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweGNlMDAwMDA+OworCQkJCWZpeGVkLWxpbmsgPSA8MCAwIDEwIDAgMD47CisJCQl9OworCisJCX07CisKKwkJUElDOiBpbnRlcnJ1cHQtY29udHJvbGxlckAxMGMwMCB7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQlyZWcgPSA8MHgxMGMwMCAweDgwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNDctcGljIiwgImZzbCxwcTItcGljIjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZ3N1dmQuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21nc3V2ZC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmYzUzYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZ3N1dmQuZHRzCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogTUdTVVZEIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICogSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKy8geworCW1vZGVsID0gIk1HU1VWRCI7CisJY29tcGF0aWJsZSA9ICJrZXltaWxlLG1nc3V2ZCI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsODUyQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDE2PjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDE2PjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDw4MTkyPjsKKwkJCWktY2FjaGUtc2l6ZSA9IDw4MTkyPjsKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLworCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8qIEZpbGxlZCBpbiBieSB1LWJvb3QgKi8KKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8qIEZpbGxlZCBpbiBieSB1LWJvb3QgKi8KKwkJCWludGVycnVwdHMgPSA8MTUgMj47CQkvKiBkZWNyZW1lbnRlciBpbnRlcnJ1cHQgKi8KKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwwMDAwMDAwMCAweDQwMDAwMDA+OyAgLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLworCX07CisKKwlsb2NhbGJ1c0BmZmYwMDEwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1Mi1sb2NhbGJ1cyIsICJmc2wscHExLWxvY2FsYnVzIiwgInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJlZyA9IDwweGZmZjAwMTAwIDB4NDA+OworCisJCXJhbmdlcyA9IDwwIDAgMHhmMDAwMDAwMCAweDAxMDAwMDAwPjsgIC8qIEZpbGxlZCBpbiBieSB1LWJvb3QgKi8KKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDEwMDAwMDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWJhbmstd2lkdGggPSA8MT47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAidS1ib290IjsKKwkJCQlyZWcgPSA8MCAweDgwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AODAwMDAgeworCQkJCWxhYmVsID0gImVudiI7CisJCQkJcmVnID0gPDB4ODAwMDAgMHgyMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQGEwMDAwIHsKKwkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCXJlZyA9IDwweGEwMDAwIDB4MWUwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMjgwMDAwIHsKKwkJCQlsYWJlbCA9ICJkdGIiOworCQkJCXJlZyA9IDwweDI4MDAwMCAweDIwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMmEwMDAwIHsKKwkJCSAgICAgICAgbGFiZWwgPSAicm9vdCI7CisJCQkgICAgICAgIHJlZyA9IDwweDJhMDAwMCAweDUwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDdhMDAwMCB7CisJCQkgICAgICAgIGxhYmVsID0gInVzZXIiOworCQkJICAgICAgICByZWcgPSA8MHg3YTAwMDAgMHg4NjAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworCisJc29jQGZmZjAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUyIiwgImZzbCxwcTEtc29jIiwgInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCXJhbmdlcyA9IDwwIDB4ZmZmMDAwMDAgMHgwMDAwNDAwMD47CisKKwkJUElDOiBpbnRlcnJ1cHQtY29udHJvbGxlckAwIHsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwwIDI0PjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1Mi1waWMiLCAiZnNsLHBxMS1waWMiOworCQl9OworCisJCWNwbUA5YzAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1Mi1jcG0iLCAiZnNsLGNwbTEiLCAic2ltcGxlLWJ1cyI7CisJCQlpbnRlcnJ1cHRzID0gPDA+OwkvKiBjcG0gZXJyb3IgaW50ZXJydXB0ICovCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZDUE1fUElDPjsKKwkJCXJlZyA9IDwweDljMCAxMD47CisJCQlyYW5nZXM7CisKKwkJCW11cmFtQDIwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbS1tdXJhbSI7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJcmFuZ2VzID0gPDAgMHgyMDAwIDB4MjAwMD47CisKKwkJCQlkYXRhQDAgeworCQkJCQljb21wYXRpYmxlID0gImZzbCxjcG0tbXVyYW0tZGF0YSI7CisJCQkJCXJlZyA9IDwweDgwMCAweDE4MDA+OworCQkJCX07CisJCQl9OworCisJCQlicmdAOWYwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTItYnJnIiwKKwkJCQkgICAgICAgICAgICAgImZzbCxjcG0xLWJyZyIsCisJCQkJICAgICAgICAgICAgICJmc2wsY3BtLWJyZyI7CisJCQkJcmVnID0gPDB4OWYwIDB4MTA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLworCQkJfTsKKworCQkJQ1BNX1BJQzogaW50ZXJydXB0LWNvbnRyb2xsZXJAOTMwIHsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCWludGVycnVwdHMgPSA8NSAyIDAgMj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKwkJCQlyZWcgPSA8MHg5MzAgMHgyMD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsY3BtMS1waWMiOworCQkJfTsKKworCQkJLyogTU9OLTEgKi8KKwkJCXNlcmlhbEBhODAgeworCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsY3BtMS1zbWMtdWFydCI7CisJCQkJcmVnID0gPDB4YTgwIDB4MTAgMHgzZmMwIDB4NDA+OworCQkJCWludGVycnVwdHMgPSA8ND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmQ1BNX1BJQz47CisJCQkJZnNsLGNwbS1icmcgPSA8MT47CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4MDA5MD47CisJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLworCQkJfTsKKworCQkJZXRoZXJuZXRAYTQwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlICA9ICJmc2wsbXBjODY2LXNjYy1lbmV0IiwKKwkJCQkgICAgICAgICAgICAgICJmc2wsY3BtMS1zY2MtZW5ldCI7CisJCQkJcmVnID0gPDB4YTQwIDB4MTggMHgzZTAwIDB4MTAwPjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsgIC8qIEZpbGxlZCBpbiBieSB1LWJvb3QgKi8KKwkJCQlpbnRlcnJ1cHRzID0gPDI4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZDUE1fUElDPjsKKwkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MHg4MD47CisJCQkJZml4ZWQtbGluayA9IDwwIDAgMTAgMCAwPjsKKwkJCX07CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKaW5kZXggMWY5MDM2Yy4uYzJiOGRiZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cwpAQCAtNDAzLDcgKzQwMyw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ODAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHg4MDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweDgwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxM2VyZGIuZHRzCmluZGV4IDJhOTRhZTAuLjc0N2YyNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTNlcmRiLmR0cwpAQCAtMTc2LDI0ICsxNzYsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzEzLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0zNTksNyArMzYzLDggQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMKaW5kZXggZjcwNDUxMy4uNzQ0OWU1NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzCkBAIC0xNDQsMjQgKzE0NCwyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKQEAgLTMxNCw3ICszMTgsOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwPjsKKwkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfbWRzLmR0cwppbmRleCBmYmM5MzA0Li5lNGNjMTc2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X21kcy5kdHMKQEAgLTEyNywyNCArMTI3LDI4IEBACiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMyMy1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwpAQCAtNDE5LDcgKzQyMyw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9yZGIuZHRzCmluZGV4IGIxNTdkMTguLjIyNmZmMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfcmRiLmR0cwpAQCAtMTA1LDI0ICsxMDUsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMjMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMjMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMjMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0zMjcsNyArMzMxLDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cwppbmRleCA3MDBlMDc2Li41Y2VkZjM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cwpAQCAtMTA2LDI0ICsxMDYsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0yNTAsNyArMjU0LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpAQCAtMjc2LDcgKzI4MSw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg2MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODYwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzgwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHhncC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzCmluZGV4IGNkZDMwNjMuLjgxYWUxZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHhncC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eGdwLmR0cwpAQCAtMTA0LDI0ICsxMDQsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0yMjQsNyArMjI4LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODYwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NjAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzODAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzR4X21kcy5kdHMKaW5kZXggNzgzMjQxYy4uMDRiZmRlMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0eF9tZHMuZHRzCkBAIC0xMTYsMjQgKzExNiwyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKQEAgLTMxMSw3ICszMTUsOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwPjsKKwkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CkBAIC0zNzIsNyArMzc3LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODYwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NjAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzODAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X21kcy5kdHMKaW5kZXggYTNiNzZhNy4uNjZhMTJkMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM2eF9tZHMuZHRzCkBAIC01Miw5ICs1MiwyNiBAQAogCQlyZWcgPSA8MHgwMDAwMDAwMCAweDEwMDAwMDAwPjsKIAl9OwogCi0JYmNzckBmODAwMDAwMCB7Ci0JCWRldmljZV90eXBlID0gImJvYXJkLWNvbnRyb2wiOwotCQlyZWcgPSA8MHhmODAwMDAwMCAweDgwMDA+OworCWxvY2FsYnVzQGUwMDA1MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzYwLWxvY2FsYnVzIiwgImZzbCxwcTJwcm8tbG9jYWxidXMiLAorCQkJICAgICAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweGUwMDA1MDAwIDB4ZDg+OworCQlyYW5nZXMgPSA8MCAwIDB4ZmUwMDAwMDAgMHgwMjAwMDAwMAorCQkgICAgICAgICAgMSAwIDB4ZjgwMDAwMDAgMHgwMDAwODAwMD47CisKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwwIDAgMHgyMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisJCX07CisKKwkJYmNzckAxLDAgeworCQkJZGV2aWNlX3R5cGUgPSAiYm9hcmQtY29udHJvbCI7CisJCQlyZWcgPSA8MSAwIDB4ODAwMD47CisJCX07CiAJfTsKIAogCXNvYzgzNjBAZTAwMDAwMDAgewpAQCAtMTMxLDI0ICsxNDgsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzYwLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC00MDUsNyArNDI2LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfcmRrLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X3Jkay5kdHMKaW5kZXggODljOTIwMi4uZGVjYWRmMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfcmRrLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM2eF9yZGsuZHRzCkBAIC0xMjUsMjQgKzEyNSwyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKQEAgLTM4Myw2ICszODcsMTggQEAKIAkJCWRldmljZS13aWR0aCA9IDwxPjsKIAkJfTsKIAorCQl1cG1AMSwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHVwbS1uYW5kIjsKKwkJCXJlZyA9IDwxIDAgMT47CisJCQlmc2wsdXBtLWFkZHItb2Zmc2V0ID0gPDE2PjsKKwkJCWZzbCx1cG0tY21kLW9mZnNldCA9IDw4PjsKKwkJCWdwaW9zID0gPCZxZV9waW9fZSAxOCAwPjsKKworCQkJZmxhc2ggeworCQkJCWNvbXBhdGlibGUgPSAic3RtLG5hbmQ1MTItYSI7CisJCQl9OworCQl9OworCiAJCWRpc3BsYXlAMiwwIHsKIAkJCWRldmljZV90eXBlID0gImRpc3BsYXkiOwogCQkJY29tcGF0aWJsZSA9ICJmdWppdHN1LE1CODYyNzciLCAiZnVqaXRzdSxtaW50IjsKQEAgLTQwNSw3ICs0MjEsOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzYwLXBjaSIsICJmc2wsbXBjODM0OS1wY2kiOwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHg5MDAwMDAwMCAweDkwMDAwMDAwIDAgMHgxMDAwMDAwMAogCQkJICAweDQyMDAwMDAwIDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDAgMHgxMDAwMDAwMAogCQkJICAweDAxMDAwMDAwIDAgMHhlMDMwMDAwMCAweGUwMzAwMDAwIDAgMHgwMDEwMDAwMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfbWRzLmR0cwppbmRleCA0MzI3ODJiLi4wNDg0NTYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X21kcy5kdHMKQEAgLTEzNiw2ICsxMzYsMTMgQEAKIAkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJZGZzcnI7CisKKwkJCXJ0Y0A2OCB7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzc0IjsKKwkJCQlyZWcgPSA8MHg2OD47CisJCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJfTsKIAkJfTsKIAogCQlpMmNAMzEwMCB7CkBAIC0yNDYsMjQgKzI1MywyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8MHg0NyA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8MHg0NyA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwweDQ3IDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDB4NDcgOD47CiAJCQl9OwpAQCAtMzc0LDcgKzM4NSw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzCmluZGV4IGVkMTM3YWEuLjUzMTkxYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cwpAQCAtMTU1LDI0ICsxNTUsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0zMTUsNyArMzE5LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMKaW5kZXggZWQzMmM4ZC4uNjdhMDhkMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9tZHMuZHRzCkBAIC0xMzYsNiArMTM2LDEzIEBACiAJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWRmc3JyOworCisJCQlydGNANjggeworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7CisJCQkJcmVnID0gPDB4Njg+OworCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCX07CiAJCX07CiAKIAkJaTJjQDMxMDAgewpAQCAtMTcwLDI0ICsxNzcsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0zNjAsNyArMzcxLDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMKaW5kZXggMzRhN2YyZi4uNGEwOTE1MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzCkBAIC0xNTUsMjQgKzE1NSwyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKQEAgLTMwMSw3ICszMDUsOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwPjsKKwkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfbWRzLmR0cwppbmRleCBmNGRiOWVkLi4zMjMzNzBhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X21kcy5kdHMKQEAgLTEzNiw2ICsxMzYsMTMgQEAKIAkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJZGZzcnI7CisKKwkJCXJ0Y0A2OCB7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzc0IjsKKwkJCQlyZWcgPSA8MHg2OD47CisJCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJfTsKIAkJfTsKIAogCQlpMmNAMzEwMCB7CkBAIC0xNzAsMjQgKzE3NywyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKQEAgLTM4OCw3ICszOTksOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwPjsKKwkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cwppbmRleCBlNGQ3MDMwLi5iYmQ4ODRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMKQEAgLTE1NSwyNCArMTU1LDI4IEBACiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwpAQCAtMzI5LDcgKzMzMyw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKaW5kZXggMTUwNWQ2OC4uOTNmZGQ5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKQEAgLTkxLDYgKzkxLDggQEAKIAkJCXJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMzMjMyIjsKIAkJCQlyZWcgPSA8MHg2OD47CisJCQkJaW50ZXJydXB0cyA9IDwwIDB4MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl9OwogCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODYxMF9ocGNkLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzCmluZGV4IDU4NGE0ZjEuLmY3MjRkNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzCkBAIC0yMDcsNyArMjA3LDcgQEAKIAkJCXJlZyA9IDwweGU0MDAwIDB4MTAwPjsKIAkJfTsKIAotCQlpMnNAMTYwMDAgeworCQlzc2lAMTYwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODYxMC1zc2kiOwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDE2MDAwIDB4MTAwPjsKQEAgLTIxNSw2ICsyMTUsOCBAQAogCQkJaW50ZXJydXB0cyA9IDw2MiAyPjsKIAkJCWZzbCxtb2RlID0gImkycy1zbGF2ZSI7CiAJCQljb2RlYy1oYW5kbGUgPSA8JmNzNDI3MD47CisJCQlmc2wscGxheWJhY2stZG1hID0gPCZkbWEwMD47CisJCQlmc2wsY2FwdHVyZS1kbWEgPSA8JmRtYTAxPjsKIAkJfTsKIAogCQlzc2lAMTYxMDAgewpAQCAtMjMzLDE3ICsyMzUsMTcgQEAKIAkJCXJlZyA9IDwweDIxMzAwIDB4ND47IC8qIERNQSBnZW5lcmFsIHN0YXR1cyByZWdpc3RlciAqLwogCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKIAotCQkJZG1hLWNoYW5uZWxAMCB7CisJCQlkbWEwMDogZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODYxMC1kbWEtY2hhbm5lbCIsCi0JCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJCSJmc2wsc3NpLWRtYS1jaGFubmVsIjsKIAkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCXJlZyA9IDwweDAgMHg4MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKIAkJCX07Ci0JCQlkbWEtY2hhbm5lbEAxIHsKKwkJCWRtYTAxOiBkbWEtY2hhbm5lbEAxIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjEwLWRtYS1jaGFubmVsIiwKLQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQkJImZzbCxzc2ktZG1hLWNoYW5uZWwiOwogCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODM0OS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODM0OS5kdHMKaW5kZXggNDVmNzg5Yi4uMGY5NDFmMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzgzNDkuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4MzQ5LmR0cwpAQCAtMTA3LDI0ICsxMDcsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0yNjgsNyArMjcyLDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NlcXVvaWEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NlcXVvaWEuZHRzCmluZGV4IDcyZDE1ZjAuLjNiMjk1ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zZXF1b2lhLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2VxdW9pYS5kdHMKQEAgLTI0NiwxMyArMjQ2LDIyIEBACiAJICAgCQl9OwogCiAJCQlJSUMwOiBpMmNAZWY2MDA3MDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NDBlcHgiLCAiaWJtLGlpYyI7CiAJCQkJcmVnID0gPDB4ZWY2MDA3MDAgMHgwMDAwMDAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CiAJCQkJaW50ZXJydXB0cyA9IDwweDIgMHg0PjsKKworCQkJCWh3bW9uQDQ4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhZGksYWQ3NDE0IjsKKwkJCQkJcmVnID0gPDB4NDg+OworCQkJCX07CiAJCQl9OwogCiAJCQlJSUMxOiBpMmNAZWY2MDA4MDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NDBlcHgiLCAiaWJtLGlpYyI7CiAJCQkJcmVnID0gPDB4ZWY2MDA4MDAgMHgwMDAwMDAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMveW9zZW1pdGUuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3lvc2VtaXRlLmR0cwppbmRleCBlMzk0MjJhLi4xZmEzY2I0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMveW9zZW1pdGUuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy95b3NlbWl0ZS5kdHMKQEAgLTE1LDcgKzE1LDcgQEAKIAkjYWRkcmVzcy1jZWxscyA9IDwyPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKIAltb2RlbCA9ICJhbWNjLHlvc2VtaXRlIjsKLQljb21wYXRpYmxlID0gImFtY2MseW9zZW1pdGUiLCJhbWNjLGJhbWJvbyI7CisJY29tcGF0aWJsZSA9ICJhbWNjLHlvc2VtaXRlIjsKIAlkY3ItcGFyZW50ID0gPCZ7L2NwdXMvY3B1QDB9PjsKIAogCWFsaWFzZXMgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZWxmX3V0aWwuYyBiL2FyY2gvcG93ZXJwYy9ib290L2VsZl91dGlsLmMKaW5kZXggNzQ1NGFhNC4uMTU2N2EwYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZWxmX3V0aWwuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9lbGZfdXRpbC5jCkBAIC0yNyw3ICsyNyw4IEBACiAJICAgICAgZWxmNjQtPmVfaWRlbnRbRUlfTUFHM10gID09IEVMRk1BRzMJJiYKIAkgICAgICBlbGY2NC0+ZV9pZGVudFtFSV9DTEFTU10gPT0gRUxGQ0xBU1M2NAkmJgogCSAgICAgIGVsZjY0LT5lX2lkZW50W0VJX0RBVEFdICA9PSBFTEZEQVRBMk1TQgkmJgotCSAgICAgIGVsZjY0LT5lX3R5cGUgICAgICAgICAgICA9PSBFVF9FWEVDCSYmCisJICAgICAgKGVsZjY0LT5lX3R5cGUgICAgICAgICAgICA9PSBFVF9FWEVDIHx8CisJICAgICAgIGVsZjY0LT5lX3R5cGUgICAgICAgICAgICA9PSBFVF9EWU4pCSYmCiAJICAgICAgZWxmNjQtPmVfbWFjaGluZSAgICAgICAgID09IEVNX1BQQzY0KSkKIAkJcmV0dXJuIDA7CiAKQEAgLTU4LDcgKzU5LDggQEAKIAkgICAgICBlbGYzMi0+ZV9pZGVudFtFSV9NQUczXSAgPT0gRUxGTUFHMwkmJgogCSAgICAgIGVsZjMyLT5lX2lkZW50W0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyCSYmCiAJICAgICAgZWxmMzItPmVfaWRlbnRbRUlfREFUQV0gID09IEVMRkRBVEEyTVNCCSYmCi0JICAgICAgZWxmMzItPmVfdHlwZSAgICAgICAgICAgID09IEVUX0VYRUMJJiYKKwkgICAgICAoZWxmMzItPmVfdHlwZSAgICAgICAgICAgID09IEVUX0VYRUMgfHwKKwkgICAgICAgZWxmMzItPmVfdHlwZSAgICAgICAgICAgID09IEVUX0RZTikgICAgICAmJgogCSAgICAgIGVsZjMyLT5lX21hY2hpbmUgICAgICAgICA9PSBFTV9QUEMpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L01ha2VmaWxlLmxpYmZkdCBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9NYWtlZmlsZS5saWJmZHQKaW5kZXggODJmOWM2YS4uNmM0MmFjZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L01ha2VmaWxlLmxpYmZkdAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvTWFrZWZpbGUubGliZmR0CkBAIC0zLDEyICszLDYgQEAKICMgVGhpcyBpcyBub3QgYSBjb21wbGV0ZSBNYWtlZmlsZSBvZiBpdHNlbGYuICBJbnN0ZWFkLCBpdCBpcyBkZXNpZ25lZCB0bwogIyBiZSBlYXNpbHkgZW1iZWRkYWJsZSBpbnRvIG90aGVyIHN5c3RlbXMgb2YgTWFrZWZpbGVzLgogIwotTElCRkRUX1NSQ1MgPSBmZHQuYyBmZHRfcm8uYyBmZHRfd2lwLmMgZmR0X3N3LmMgZmR0X3J3LmMgZmR0X3N0cmVycm9yLmMKIExJQkZEVF9JTkNMVURFUyA9IGZkdC5oIGxpYmZkdC5oCi1MSUJGRFRfRVhUUkEgPSBsaWJmZHRfaW50ZXJuYWwuaAotTElCRkRUX0xJQiA9IGxpYmZkdC9saWJmZHQuYQotCitMSUJGRFRfU1JDUyA9IGZkdC5jIGZkdF9yby5jIGZkdF93aXAuYyBmZHRfc3cuYyBmZHRfcncuYyBmZHRfc3RyZXJyb3IuYwogTElCRkRUX09CSlMgPSAkKExJQkZEVF9TUkNTOiUuYz0lLm8pCi0KLSQoTElCRkRUX29iamRpcikvJChMSUJGRFRfTElCKTogJChhZGRwcmVmaXggJChMSUJGRFRfb2JqZGlyKS8sJChMSUJGRFRfT0JKUykpCi0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHQuYyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHQuYwppbmRleCA1ODZhMzYxLi4yYWNhZWM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdC5jCkBAIC02Myw3ICs2Myw3IEBACiAJCQlyZXR1cm4gLUZEVF9FUlJfQkFEVkVSU0lPTjsKIAkJaWYgKGZkdF9sYXN0X2NvbXBfdmVyc2lvbihmZHQpID4gRkRUX0xBU1RfU1VQUE9SVEVEX1ZFUlNJT04pCiAJCQlyZXR1cm4gLUZEVF9FUlJfQkFEVkVSU0lPTjsKLQl9IGVsc2UgaWYgKGZkdF9tYWdpYyhmZHQpID09IFNXX01BR0lDKSB7CisJfSBlbHNlIGlmIChmZHRfbWFnaWMoZmR0KSA9PSBGRFRfU1dfTUFHSUMpIHsKIAkJLyogVW5maW5pc2hlZCBzZXF1ZW50aWFsLXdyaXRlIGJsb2IgKi8KIAkJaWYgKGZkdF9zaXplX2R0X3N0cnVjdChmZHQpID09IDApCiAJCQlyZXR1cm4gLUZEVF9FUlJfQkFEU1RBVEU7CkBAIC03Niw3ICs3Niw3IEBACiAKIGNvbnN0IHZvaWQgKmZkdF9vZmZzZXRfcHRyKGNvbnN0IHZvaWQgKmZkdCwgaW50IG9mZnNldCwgaW50IGxlbikKIHsKLQljb25zdCB2b2lkICpwOworCWNvbnN0IGNoYXIgKnA7CiAKIAlpZiAoZmR0X3ZlcnNpb24oZmR0KSA+PSAweDExKQogCQlpZiAoKChvZmZzZXQgKyBsZW4pIDwgb2Zmc2V0KQpAQCAtMTI0LDExICsxMjQsNTkgQEAKIAl9CiAKIAlpZiAobmV4dG9mZnNldCkKLQkJKm5leHRvZmZzZXQgPSBBTElHTihvZmZzZXQsIEZEVF9UQUdTSVpFKTsKKwkJKm5leHRvZmZzZXQgPSBGRFRfVEFHQUxJR04ob2Zmc2V0KTsKIAogCXJldHVybiB0YWc7CiB9CiAKK2ludCBfZmR0X2NoZWNrX25vZGVfb2Zmc2V0KGNvbnN0IHZvaWQgKmZkdCwgaW50IG9mZnNldCkKK3sKKwlpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgJSBGRFRfVEFHU0laRSkKKwkgICAgfHwgKGZkdF9uZXh0X3RhZyhmZHQsIG9mZnNldCwgJm9mZnNldCkgIT0gRkRUX0JFR0lOX05PREUpKQorCQlyZXR1cm4gLUZEVF9FUlJfQkFET0ZGU0VUOworCisJcmV0dXJuIG9mZnNldDsKK30KKworaW50IGZkdF9uZXh0X25vZGUoY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0LCBpbnQgKmRlcHRoKQoreworCWludCBuZXh0b2Zmc2V0ID0gMDsKKwl1aW50MzJfdCB0YWc7CisKKwlpZiAob2Zmc2V0ID49IDApCisJCWlmICgobmV4dG9mZnNldCA9IF9mZHRfY2hlY2tfbm9kZV9vZmZzZXQoZmR0LCBvZmZzZXQpKSA8IDApCisJCQlyZXR1cm4gbmV4dG9mZnNldDsKKworCWRvIHsKKwkJb2Zmc2V0ID0gbmV4dG9mZnNldDsKKwkJdGFnID0gZmR0X25leHRfdGFnKGZkdCwgb2Zmc2V0LCAmbmV4dG9mZnNldCk7CisKKwkJc3dpdGNoICh0YWcpIHsKKwkJY2FzZSBGRFRfUFJPUDoKKwkJY2FzZSBGRFRfTk9QOgorCQkJYnJlYWs7CisKKwkJY2FzZSBGRFRfQkVHSU5fTk9ERToKKwkJCWlmIChkZXB0aCkKKwkJCQkoKmRlcHRoKSsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBGRFRfRU5EX05PREU6CisJCQlpZiAoZGVwdGgpCisJCQkJKCpkZXB0aCktLTsKKwkJCWJyZWFrOworCisJCWNhc2UgRkRUX0VORDoKKwkJCXJldHVybiAtRkRUX0VSUl9OT1RGT1VORDsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUUlVDVFVSRTsKKwkJfQorCX0gd2hpbGUgKHRhZyAhPSBGRFRfQkVHSU5fTk9ERSk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCiBjb25zdCBjaGFyICpfZmR0X2ZpbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0cnRhYiwgaW50IHRhYnNpemUsIGNvbnN0IGNoYXIgKnMpCiB7CiAJaW50IGxlbiA9IHN0cmxlbihzKSArIDE7CkBAIC0xMzYsMTcgKzE4NCwxNCBAQAogCWNvbnN0IGNoYXIgKnA7CiAKIAlmb3IgKHAgPSBzdHJ0YWI7IHAgPD0gbGFzdDsgcCsrKQotCQlpZiAobWVtZXEocCwgcywgbGVuKSkKKwkJaWYgKG1lbWNtcChwLCBzLCBsZW4pID09IDApCiAJCQlyZXR1cm4gcDsKIAlyZXR1cm4gTlVMTDsKIH0KIAogaW50IGZkdF9tb3ZlKGNvbnN0IHZvaWQgKmZkdCwgdm9pZCAqYnVmLCBpbnQgYnVmc2l6ZSkKIHsKLQlpbnQgZXJyID0gZmR0X2NoZWNrX2hlYWRlcihmZHQpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAlpZiAoZmR0X3RvdGFsc2l6ZShmZHQpID4gYnVmc2l6ZSkKIAkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3JvLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3JvLmMKaW5kZXggMTJhMzdkNS4uMTI5YjUzMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9yby5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfcm8uYwpAQCAtNTUsMTcgKzU1LDEwIEBACiAKICNpbmNsdWRlICJsaWJmZHRfaW50ZXJuYWwuaCIKIAotI2RlZmluZSBDSEVDS19IRUFERVIoZmR0KSBcCi0JeyBcCi0JCWludCBlcnI7IFwKLQkJaWYgKChlcnIgPSBmZHRfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApIFwKLQkJCXJldHVybiBlcnI7IFwKLQl9Ci0KLXN0YXRpYyBpbnQgbm9kZW5hbWVfZXEoY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0LAotCQkgICAgICAgY29uc3QgY2hhciAqcywgaW50IGxlbikKK3N0YXRpYyBpbnQgX2ZkdF9ub2RlbmFtZV9lcShjb25zdCB2b2lkICpmZHQsIGludCBvZmZzZXQsCisJCQkgICAgY29uc3QgY2hhciAqcywgaW50IGxlbikKIHsKLQljb25zdCBjaGFyICpwID0gZmR0X29mZnNldF9wdHIoZmR0LCBvZmZzZXQsIGxlbisxKTsKKwljb25zdCBjaGFyICpwID0gZmR0X29mZnNldF9wdHIoZmR0LCBvZmZzZXQgKyBGRFRfVEFHU0laRSwgbGVuKzEpOwogCiAJaWYgKCEgcCkKIAkJLyogc2hvcnQgbWF0Y2ggKi8KQEAgLTg0LDEyICs3NywxMiBAQAogCiBjb25zdCBjaGFyICpmZHRfc3RyaW5nKGNvbnN0IHZvaWQgKmZkdCwgaW50IHN0cm9mZnNldCkKIHsKLQlyZXR1cm4gKGNoYXIgKilmZHQgKyBmZHRfb2ZmX2R0X3N0cmluZ3MoZmR0KSArIHN0cm9mZnNldDsKKwlyZXR1cm4gKGNvbnN0IGNoYXIgKilmZHQgKyBmZHRfb2ZmX2R0X3N0cmluZ3MoZmR0KSArIHN0cm9mZnNldDsKIH0KIAogaW50IGZkdF9nZXRfbWVtX3Jzdihjb25zdCB2b2lkICpmZHQsIGludCBuLCB1aW50NjRfdCAqYWRkcmVzcywgdWludDY0X3QgKnNpemUpCiB7Ci0JQ0hFQ0tfSEVBREVSKGZkdCk7CisJRkRUX0NIRUNLX0hFQURFUihmZHQpOwogCSphZGRyZXNzID0gZmR0NjRfdG9fY3B1KF9mZHRfbWVtX3JzdihmZHQsIG4pLT5hZGRyZXNzKTsKIAkqc2l6ZSA9IGZkdDY0X3RvX2NwdShfZmR0X21lbV9yc3YoZmR0LCBuKS0+c2l6ZSk7CiAJcmV0dXJuIDA7CkBAIC0xMDQsNTAgKzk3LDI0IEBACiAJcmV0dXJuIGk7CiB9CiAKLWludCBmZHRfc3Vibm9kZV9vZmZzZXRfbmFtZWxlbihjb25zdCB2b2lkICpmZHQsIGludCBwYXJlbnRvZmZzZXQsCitpbnQgZmR0X3N1Ym5vZGVfb2Zmc2V0X25hbWVsZW4oY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0LAogCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKQogewotCWludCBsZXZlbCA9IDA7Ci0JdWludDMyX3QgdGFnOwotCWludCBvZmZzZXQsIG5leHRvZmZzZXQ7CisJaW50IGRlcHRoOwogCi0JQ0hFQ0tfSEVBREVSKGZkdCk7CisJRkRUX0NIRUNLX0hFQURFUihmZHQpOwogCi0JdGFnID0gZmR0X25leHRfdGFnKGZkdCwgcGFyZW50b2Zmc2V0LCAmbmV4dG9mZnNldCk7Ci0JaWYgKHRhZyAhPSBGRFRfQkVHSU5fTk9ERSkKLQkJcmV0dXJuIC1GRFRfRVJSX0JBRE9GRlNFVDsKKwlmb3IgKGRlcHRoID0gMDsKKwkgICAgIG9mZnNldCA+PSAwOworCSAgICAgb2Zmc2V0ID0gZmR0X25leHRfbm9kZShmZHQsIG9mZnNldCwgJmRlcHRoKSkgeworCQlpZiAoZGVwdGggPCAwKQorCQkJcmV0dXJuIC1GRFRfRVJSX05PVEZPVU5EOworCQllbHNlIGlmICgoZGVwdGggPT0gMSkKKwkJCSAmJiBfZmR0X25vZGVuYW1lX2VxKGZkdCwgb2Zmc2V0LCBuYW1lLCBuYW1lbGVuKSkKKwkJCXJldHVybiBvZmZzZXQ7CisJfQogCi0JZG8gewotCQlvZmZzZXQgPSBuZXh0b2Zmc2V0OwotCQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBvZmZzZXQsICZuZXh0b2Zmc2V0KTsKLQotCQlzd2l0Y2ggKHRhZykgewotCQljYXNlIEZEVF9FTkQ6Ci0JCQlyZXR1cm4gLUZEVF9FUlJfVFJVTkNBVEVEOwotCi0JCWNhc2UgRkRUX0JFR0lOX05PREU6Ci0JCQlsZXZlbCsrOwotCQkJaWYgKGxldmVsICE9IDEpCi0JCQkJY29udGludWU7Ci0JCQlpZiAobm9kZW5hbWVfZXEoZmR0LCBvZmZzZXQrRkRUX1RBR1NJWkUsIG5hbWUsIG5hbWVsZW4pKQotCQkJCS8qIEZvdW5kIGl0ISAqLwotCQkJCXJldHVybiBvZmZzZXQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEZEVF9FTkRfTk9ERToKLQkJCWxldmVsLS07Ci0JCQlicmVhazsKLQotCQljYXNlIEZEVF9QUk9QOgotCQljYXNlIEZEVF9OT1A6Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUUlVDVFVSRTsKLQkJfQotCX0gd2hpbGUgKGxldmVsID49IDApOwotCi0JcmV0dXJuIC1GRFRfRVJSX05PVEZPVU5EOworCXJldHVybiBvZmZzZXQ7IC8qIGVycm9yICovCiB9CiAKIGludCBmZHRfc3Vibm9kZV9vZmZzZXQoY29uc3Qgdm9pZCAqZmR0LCBpbnQgcGFyZW50b2Zmc2V0LApAQCAtMTYyLDcgKzEyOSw3IEBACiAJY29uc3QgY2hhciAqcCA9IHBhdGg7CiAJaW50IG9mZnNldCA9IDA7CiAKLQlDSEVDS19IRUFERVIoZmR0KTsKKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAlpZiAoKnBhdGggIT0gJy8nKQogCQlyZXR1cm4gLUZEVF9FUlJfQkFEUEFUSDsKQEAgLTE5MCwxNiArMTU3LDEyIEBACiAKIGNvbnN0IGNoYXIgKmZkdF9nZXRfbmFtZShjb25zdCB2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBpbnQgKmxlbikKIHsKLQljb25zdCBzdHJ1Y3QgZmR0X25vZGVfaGVhZGVyICpuaDsKKwljb25zdCBzdHJ1Y3QgZmR0X25vZGVfaGVhZGVyICpuaCA9IF9mZHRfb2Zmc2V0X3B0cihmZHQsIG5vZGVvZmZzZXQpOwogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IGZkdF9jaGVja19oZWFkZXIoZmR0KSkgIT0gMCkKLQkJZ290byBmYWlsOwotCi0JZXJyID0gLUZEVF9FUlJfQkFET0ZGU0VUOwotCW5oID0gZmR0X29mZnNldF9wdHIoZmR0LCBub2Rlb2Zmc2V0LCBzaXplb2YoKm5oKSk7Ci0JaWYgKCFuaCB8fCAoZmR0MzJfdG9fY3B1KG5oLT50YWcpICE9IEZEVF9CRUdJTl9OT0RFKSkKLQkJZ290byBmYWlsOworCWlmICgoKGVyciA9IGZkdF9jaGVja19oZWFkZXIoZmR0KSkgIT0gMCkKKwkgICAgfHwgKChlcnIgPSBfZmR0X2NoZWNrX25vZGVfb2Zmc2V0KGZkdCwgbm9kZW9mZnNldCkpIDwgMCkpCisJCQlnb3RvIGZhaWw7CiAKIAlpZiAobGVuKQogCQkqbGVuID0gc3RybGVuKG5oLT5uYW1lKTsKQEAgLTIyMiwxNyArMTg1LDExIEBACiAJaW50IG9mZnNldCwgbmV4dG9mZnNldDsKIAlpbnQgZXJyOwogCi0JaWYgKChlcnIgPSBmZHRfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApCi0JCWdvdG8gZmFpbDsKKwlpZiAoKChlcnIgPSBmZHRfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApCisJICAgIHx8ICgoZXJyID0gX2ZkdF9jaGVja19ub2RlX29mZnNldChmZHQsIG5vZGVvZmZzZXQpKSA8IDApKQorCQkJZ290byBmYWlsOwogCi0JZXJyID0gLUZEVF9FUlJfQkFET0ZGU0VUOwotCWlmIChub2Rlb2Zmc2V0ICUgRkRUX1RBR1NJWkUpCi0JCWdvdG8gZmFpbDsKLQotCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIG5vZGVvZmZzZXQsICZuZXh0b2Zmc2V0KTsKLQlpZiAodGFnICE9IEZEVF9CRUdJTl9OT0RFKQotCQlnb3RvIGZhaWw7Ci0KKwluZXh0b2Zmc2V0ID0gZXJyOwogCWRvIHsKIAkJb2Zmc2V0ID0gbmV4dG9mZnNldDsKIApAQCAtMjUzLDcgKzIxMCw3IEBACiAJCQlpZiAoISBwcm9wKQogCQkJCWdvdG8gZmFpbDsKIAkJCW5hbWVzdHJvZmYgPSBmZHQzMl90b19jcHUocHJvcC0+bmFtZW9mZik7Ci0JCQlpZiAoc3RyZXEoZmR0X3N0cmluZyhmZHQsIG5hbWVzdHJvZmYpLCBuYW1lKSkgeworCQkJaWYgKHN0cmNtcChmZHRfc3RyaW5nKGZkdCwgbmFtZXN0cm9mZiksIG5hbWUpID09IDApIHsKIAkJCQkvKiBGb3VuZCBpdCEgKi8KIAkJCQlpbnQgbGVuID0gZmR0MzJfdG9fY3B1KHByb3AtPmxlbik7CiAJCQkJcHJvcCA9IGZkdF9vZmZzZXRfcHRyKGZkdCwgb2Zmc2V0LApAQCAtMzA3LDExNSArMjY0LDkxIEBACiAKIGludCBmZHRfZ2V0X3BhdGgoY29uc3Qgdm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQogewotCXVpbnQzMl90IHRhZzsKLQlpbnQgcCA9IDAsIG92ZXJmbG93ID0gMDsKLQlpbnQgb2Zmc2V0LCBuZXh0b2Zmc2V0LCBuYW1lbGVuOworCWludCBwZGVwdGggPSAwLCBwID0gMDsKKwlpbnQgb2Zmc2V0LCBkZXB0aCwgbmFtZWxlbjsKIAljb25zdCBjaGFyICpuYW1lOwogCi0JQ0hFQ0tfSEVBREVSKGZkdCk7Ci0KLQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCAwLCAmbmV4dG9mZnNldCk7Ci0JaWYgKHRhZyAhPSBGRFRfQkVHSU5fTk9ERSkKLQkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUUlVDVFVSRTsKKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAlpZiAoYnVmbGVuIDwgMikKIAkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7Ci0JYnVmWzBdID0gJy8nOwotCXAgPSAxOwogCi0Jd2hpbGUgKG5leHRvZmZzZXQgPD0gbm9kZW9mZnNldCkgewotCQlvZmZzZXQgPSBuZXh0b2Zmc2V0OwotCQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBvZmZzZXQsICZuZXh0b2Zmc2V0KTsKLQkJc3dpdGNoICh0YWcpIHsKLQkJY2FzZSBGRFRfRU5EOgotCQkJcmV0dXJuIC1GRFRfRVJSX0JBRE9GRlNFVDsKKwlmb3IgKG9mZnNldCA9IDAsIGRlcHRoID0gMDsKKwkgICAgIChvZmZzZXQgPj0gMCkgJiYgKG9mZnNldCA8PSBub2Rlb2Zmc2V0KTsKKwkgICAgIG9mZnNldCA9IGZkdF9uZXh0X25vZGUoZmR0LCBvZmZzZXQsICZkZXB0aCkpIHsKKwkJaWYgKHBkZXB0aCA8IGRlcHRoKQorCQkJY29udGludWU7IC8qIG92ZXJmbG93ZWQgYnVmZmVyICovCiAKLQkJY2FzZSBGRFRfQkVHSU5fTk9ERToKLQkJCW5hbWUgPSBmZHRfZ2V0X25hbWUoZmR0LCBvZmZzZXQsICZuYW1lbGVuKTsKLQkJCWlmICghbmFtZSkKLQkJCQlyZXR1cm4gbmFtZWxlbjsKLQkJCWlmIChvdmVyZmxvdyB8fCAoKHAgKyBuYW1lbGVuICsgMSkgPiBidWZsZW4pKSB7Ci0JCQkJb3ZlcmZsb3crKzsKLQkJCQlicmVhazsKLQkJCX0KKwkJd2hpbGUgKHBkZXB0aCA+IGRlcHRoKSB7CisJCQlkbyB7CisJCQkJcC0tOworCQkJfSB3aGlsZSAoYnVmW3AtMV0gIT0gJy8nKTsKKwkJCXBkZXB0aC0tOworCQl9CisKKwkJbmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIG9mZnNldCwgJm5hbWVsZW4pOworCQlpZiAoIW5hbWUpCisJCQlyZXR1cm4gbmFtZWxlbjsKKwkJaWYgKChwICsgbmFtZWxlbiArIDEpIDw9IGJ1ZmxlbikgewogCQkJbWVtY3B5KGJ1ZiArIHAsIG5hbWUsIG5hbWVsZW4pOwogCQkJcCArPSBuYW1lbGVuOwogCQkJYnVmW3ArK10gPSAnLyc7Ci0JCQlicmVhazsKKwkJCXBkZXB0aCsrOworCQl9CiAKLQkJY2FzZSBGRFRfRU5EX05PREU6Ci0JCQlpZiAob3ZlcmZsb3cpIHsKLQkJCQlvdmVyZmxvdy0tOwotCQkJCWJyZWFrOwotCQkJfQotCQkJZG8geworCQlpZiAob2Zmc2V0ID09IG5vZGVvZmZzZXQpIHsKKwkJCWlmIChwZGVwdGggPCAoZGVwdGggKyAxKSkKKwkJCQlyZXR1cm4gLUZEVF9FUlJfTk9TUEFDRTsKKworCQkJaWYgKHAgPiAxKSAvKiBzcGVjaWFsIGNhc2Ugc28gdGhhdCByb290IHBhdGggaXMgIi8iLCBub3QgIiIgKi8KIAkJCQlwLS07Ci0JCQl9IHdoaWxlICAoYnVmW3AtMV0gIT0gJy8nKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRkRUX1BST1A6Ci0JCWNhc2UgRkRUX05PUDoKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUZEVF9FUlJfQkFEU1RSVUNUVVJFOworCQkJYnVmW3BdID0gJ1wwJzsKKwkJCXJldHVybiBwOwogCQl9CiAJfQogCi0JaWYgKG92ZXJmbG93KQotCQlyZXR1cm4gLUZEVF9FUlJfTk9TUEFDRTsKKwlpZiAoKG9mZnNldCA9PSAtRkRUX0VSUl9OT1RGT1VORCkgfHwgKG9mZnNldCA+PSAwKSkKKwkJcmV0dXJuIC1GRFRfRVJSX0JBRE9GRlNFVDsKKwllbHNlIGlmIChvZmZzZXQgPT0gLUZEVF9FUlJfQkFET0ZGU0VUKQorCQlyZXR1cm4gLUZEVF9FUlJfQkFEU1RSVUNUVVJFOwogCi0JaWYgKHAgPiAxKSAvKiBzcGVjaWFsIGNhc2Ugc28gdGhhdCByb290IHBhdGggaXMgIi8iLCBub3QgIiIgKi8KLQkJcC0tOwotCWJ1ZltwXSA9ICdcMCc7Ci0JcmV0dXJuIHA7CisJcmV0dXJuIG9mZnNldDsgLyogZXJyb3IgZnJvbSBmZHRfbmV4dF9ub2RlKCkgKi8KIH0KIAogaW50IGZkdF9zdXBlcm5vZGVfYXRkZXB0aF9vZmZzZXQoY29uc3Qgdm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwKIAkJCQkgaW50IHN1cGVybm9kZWRlcHRoLCBpbnQgKm5vZGVkZXB0aCkKIHsKLQlpbnQgbGV2ZWwgPSAtMTsKLQl1aW50MzJfdCB0YWc7Ci0JaW50IG9mZnNldCwgbmV4dG9mZnNldCA9IDA7CisJaW50IG9mZnNldCwgZGVwdGg7CiAJaW50IHN1cGVybm9kZW9mZnNldCA9IC1GRFRfRVJSX0lOVEVSTkFMOwogCi0JQ0hFQ0tfSEVBREVSKGZkdCk7CisJRkRUX0NIRUNLX0hFQURFUihmZHQpOwogCiAJaWYgKHN1cGVybm9kZWRlcHRoIDwgMCkKIAkJcmV0dXJuIC1GRFRfRVJSX05PVEZPVU5EOwogCi0JZG8gewotCQlvZmZzZXQgPSBuZXh0b2Zmc2V0OwotCQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBvZmZzZXQsICZuZXh0b2Zmc2V0KTsKLQkJc3dpdGNoICh0YWcpIHsKLQkJY2FzZSBGRFRfRU5EOgotCQkJcmV0dXJuIC1GRFRfRVJSX0JBRE9GRlNFVDsKKwlmb3IgKG9mZnNldCA9IDAsIGRlcHRoID0gMDsKKwkgICAgIChvZmZzZXQgPj0gMCkgJiYgKG9mZnNldCA8PSBub2Rlb2Zmc2V0KTsKKwkgICAgIG9mZnNldCA9IGZkdF9uZXh0X25vZGUoZmR0LCBvZmZzZXQsICZkZXB0aCkpIHsKKwkJaWYgKGRlcHRoID09IHN1cGVybm9kZWRlcHRoKQorCQkJc3VwZXJub2Rlb2Zmc2V0ID0gb2Zmc2V0OwogCi0JCWNhc2UgRkRUX0JFR0lOX05PREU6Ci0JCQlsZXZlbCsrOwotCQkJaWYgKGxldmVsID09IHN1cGVybm9kZWRlcHRoKQotCQkJCXN1cGVybm9kZW9mZnNldCA9IG9mZnNldDsKLQkJCWJyZWFrOworCQlpZiAob2Zmc2V0ID09IG5vZGVvZmZzZXQpIHsKKwkJCWlmIChub2RlZGVwdGgpCisJCQkJKm5vZGVkZXB0aCA9IGRlcHRoOwogCi0JCWNhc2UgRkRUX0VORF9OT0RFOgotCQkJbGV2ZWwtLTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRkRUX1BST1A6Ci0JCWNhc2UgRkRUX05PUDoKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUZEVF9FUlJfQkFEU1RSVUNUVVJFOworCQkJaWYgKHN1cGVybm9kZWRlcHRoID4gZGVwdGgpCisJCQkJcmV0dXJuIC1GRFRfRVJSX05PVEZPVU5EOworCQkJZWxzZQorCQkJCXJldHVybiBzdXBlcm5vZGVvZmZzZXQ7CiAJCX0KLQl9IHdoaWxlIChvZmZzZXQgPCBub2Rlb2Zmc2V0KTsKKwl9CiAKLQlpZiAobm9kZWRlcHRoKQotCQkqbm9kZWRlcHRoID0gbGV2ZWw7CisJaWYgKChvZmZzZXQgPT0gLUZEVF9FUlJfTk9URk9VTkQpIHx8IChvZmZzZXQgPj0gMCkpCisJCXJldHVybiAtRkRUX0VSUl9CQURPRkZTRVQ7CisJZWxzZSBpZiAob2Zmc2V0ID09IC1GRFRfRVJSX0JBRE9GRlNFVCkKKwkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUUlVDVFVSRTsKIAotCWlmIChzdXBlcm5vZGVkZXB0aCA+IGxldmVsKQotCQlyZXR1cm4gLUZEVF9FUlJfTk9URk9VTkQ7Ci0JcmV0dXJuIHN1cGVybm9kZW9mZnNldDsKKwlyZXR1cm4gb2Zmc2V0OyAvKiBlcnJvciBmcm9tIGZkdF9uZXh0X25vZGUoKSAqLwogfQogCiBpbnQgZmR0X25vZGVfZGVwdGgoY29uc3Qgdm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCkKQEAgLTQ0Myw1MSArMzc2LDI3IEBACiAJCQkJICBjb25zdCBjaGFyICpwcm9wbmFtZSwKIAkJCQkgIGNvbnN0IHZvaWQgKnByb3B2YWwsIGludCBwcm9wbGVuKQogewotCXVpbnQzMl90IHRhZzsKLQlpbnQgb2Zmc2V0LCBuZXh0b2Zmc2V0OworCWludCBvZmZzZXQ7CiAJY29uc3Qgdm9pZCAqdmFsOwogCWludCBsZW47CiAKLQlDSEVDS19IRUFERVIoZmR0KTsKLQotCWlmIChzdGFydG9mZnNldCA+PSAwKSB7Ci0JCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIHN0YXJ0b2Zmc2V0LCAmbmV4dG9mZnNldCk7Ci0JCWlmICh0YWcgIT0gRkRUX0JFR0lOX05PREUpCi0JCQlyZXR1cm4gLUZEVF9FUlJfQkFET0ZGU0VUOwotCX0gZWxzZSB7Ci0JCW5leHRvZmZzZXQgPSAwOwotCX0KKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAkvKiBGSVhNRTogVGhlIGFsZ29yaXRobSBoZXJlIGlzIHByZXR0eSBob3JyaWJsZTogd2Ugc2NhbiBlYWNoCiAJICogcHJvcGVydHkgb2YgYSBub2RlIGluIGZkdF9nZXRwcm9wKCksIHRoZW4gaWYgdGhhdCBkaWRuJ3QKIAkgKiBmaW5kIHdoYXQgd2Ugd2FudCwgd2Ugc2NhbiBvdmVyIHRoZW0gYWdhaW4gbWFraW5nIG91ciB3YXkKIAkgKiB0byB0aGUgbmV4dCBub2RlLiAgU3RpbGwgaXQncyB0aGUgZWFzaWVzdCB0byBpbXBsZW1lbnQKIAkgKiBhcHByb2FjaDsgcGVyZm9ybWFuY2UgY2FuIGNvbWUgbGF0ZXIuICovCi0JZG8gewotCQlvZmZzZXQgPSBuZXh0b2Zmc2V0OwotCQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBvZmZzZXQsICZuZXh0b2Zmc2V0KTsKKwlmb3IgKG9mZnNldCA9IGZkdF9uZXh0X25vZGUoZmR0LCBzdGFydG9mZnNldCwgTlVMTCk7CisJICAgICBvZmZzZXQgPj0gMDsKKwkgICAgIG9mZnNldCA9IGZkdF9uZXh0X25vZGUoZmR0LCBvZmZzZXQsIE5VTEwpKSB7CisJCXZhbCA9IGZkdF9nZXRwcm9wKGZkdCwgb2Zmc2V0LCBwcm9wbmFtZSwgJmxlbik7CisJCWlmICh2YWwgJiYgKGxlbiA9PSBwcm9wbGVuKQorCQkgICAgJiYgKG1lbWNtcCh2YWwsIHByb3B2YWwsIGxlbikgPT0gMCkpCisJCQlyZXR1cm4gb2Zmc2V0OworCX0KIAotCQlzd2l0Y2ggKHRhZykgewotCQljYXNlIEZEVF9CRUdJTl9OT0RFOgotCQkJdmFsID0gZmR0X2dldHByb3AoZmR0LCBvZmZzZXQsIHByb3BuYW1lLCAmbGVuKTsKLQkJCWlmICh2YWwKLQkJCSAgICAmJiAobGVuID09IHByb3BsZW4pCi0JCQkgICAgJiYgKG1lbWNtcCh2YWwsIHByb3B2YWwsIGxlbikgPT0gMCkpCi0JCQkJcmV0dXJuIG9mZnNldDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRkRUX1BST1A6Ci0JCWNhc2UgRkRUX0VORDoKLQkJY2FzZSBGRFRfRU5EX05PREU6Ci0JCWNhc2UgRkRUX05PUDoKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUZEVF9FUlJfQkFEU1RSVUNUVVJFOwotCQl9Ci0JfSB3aGlsZSAodGFnICE9IEZEVF9FTkQpOwotCi0JcmV0dXJuIC1GRFRfRVJSX05PVEZPVU5EOworCXJldHVybiBvZmZzZXQ7IC8qIGVycm9yIGZyb20gZmR0X25leHRfbm9kZSgpICovCiB9CiAKIGludCBmZHRfbm9kZV9vZmZzZXRfYnlfcGhhbmRsZShjb25zdCB2b2lkICpmZHQsIHVpbnQzMl90IHBoYW5kbGUpCkBAIC00OTksMTAgKzQwOCwxMCBAQAogCQkJCQkgICAgICZwaGFuZGxlLCBzaXplb2YocGhhbmRsZSkpOwogfQogCi1pbnQgX3N0cmluZ2xpc3RfY29udGFpbnMoY29uc3Qgdm9pZCAqc3RybGlzdCwgaW50IGxpc3RsZW4sIGNvbnN0IGNoYXIgKnN0cikKK2ludCBfc3RyaW5nbGlzdF9jb250YWlucyhjb25zdCBjaGFyICpzdHJsaXN0LCBpbnQgbGlzdGxlbiwgY29uc3QgY2hhciAqc3RyKQogewogCWludCBsZW4gPSBzdHJsZW4oc3RyKTsKLQljb25zdCB2b2lkICpwOworCWNvbnN0IGNoYXIgKnA7CiAKIAl3aGlsZSAobGlzdGxlbiA+PSBsZW4pIHsKIAkJaWYgKG1lbWNtcChzdHIsIHN0cmxpc3QsIGxlbisxKSA9PSAwKQpAQCAtNTM0LDUwICs0NDMsMjQgQEAKIGludCBmZHRfbm9kZV9vZmZzZXRfYnlfY29tcGF0aWJsZShjb25zdCB2b2lkICpmZHQsIGludCBzdGFydG9mZnNldCwKIAkJCQkgIGNvbnN0IGNoYXIgKmNvbXBhdGlibGUpCiB7Ci0JdWludDMyX3QgdGFnOwotCWludCBvZmZzZXQsIG5leHRvZmZzZXQ7Ci0JaW50IGVycjsKKwlpbnQgb2Zmc2V0LCBlcnI7CiAKLQlDSEVDS19IRUFERVIoZmR0KTsKLQotCWlmIChzdGFydG9mZnNldCA+PSAwKSB7Ci0JCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIHN0YXJ0b2Zmc2V0LCAmbmV4dG9mZnNldCk7Ci0JCWlmICh0YWcgIT0gRkRUX0JFR0lOX05PREUpCi0JCQlyZXR1cm4gLUZEVF9FUlJfQkFET0ZGU0VUOwotCX0gZWxzZSB7Ci0JCW5leHRvZmZzZXQgPSAwOwotCX0KKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAkvKiBGSVhNRTogVGhlIGFsZ29yaXRobSBoZXJlIGlzIHByZXR0eSBob3JyaWJsZTogd2Ugc2NhbiBlYWNoCiAJICogcHJvcGVydHkgb2YgYSBub2RlIGluIGZkdF9ub2RlX2NoZWNrX2NvbXBhdGlibGUoKSwgdGhlbiBpZgogCSAqIHRoYXQgZGlkbid0IGZpbmQgd2hhdCB3ZSB3YW50LCB3ZSBzY2FuIG92ZXIgdGhlbSBhZ2FpbgogCSAqIG1ha2luZyBvdXIgd2F5IHRvIHRoZSBuZXh0IG5vZGUuICBTdGlsbCBpdCdzIHRoZSBlYXNpZXN0IHRvCiAJICogaW1wbGVtZW50IGFwcHJvYWNoOyBwZXJmb3JtYW5jZSBjYW4gY29tZSBsYXRlci4gKi8KLQlkbyB7Ci0JCW9mZnNldCA9IG5leHRvZmZzZXQ7Ci0JCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIG9mZnNldCwgJm5leHRvZmZzZXQpOworCWZvciAob2Zmc2V0ID0gZmR0X25leHRfbm9kZShmZHQsIHN0YXJ0b2Zmc2V0LCBOVUxMKTsKKwkgICAgIG9mZnNldCA+PSAwOworCSAgICAgb2Zmc2V0ID0gZmR0X25leHRfbm9kZShmZHQsIG9mZnNldCwgTlVMTCkpIHsKKwkJZXJyID0gZmR0X25vZGVfY2hlY2tfY29tcGF0aWJsZShmZHQsIG9mZnNldCwgY29tcGF0aWJsZSk7CisJCWlmICgoZXJyIDwgMCkgJiYgKGVyciAhPSAtRkRUX0VSUl9OT1RGT1VORCkpCisJCQlyZXR1cm4gZXJyOworCQllbHNlIGlmIChlcnIgPT0gMCkKKwkJCXJldHVybiBvZmZzZXQ7CisJfQogCi0JCXN3aXRjaCAodGFnKSB7Ci0JCWNhc2UgRkRUX0JFR0lOX05PREU6Ci0JCQllcnIgPSBmZHRfbm9kZV9jaGVja19jb21wYXRpYmxlKGZkdCwgb2Zmc2V0LAotCQkJCQkJCWNvbXBhdGlibGUpOwotCQkJaWYgKChlcnIgPCAwKQotCQkJICAgICYmIChlcnIgIT0gLUZEVF9FUlJfTk9URk9VTkQpKQotCQkJCXJldHVybiBlcnI7Ci0JCQllbHNlIGlmIChlcnIgPT0gMCkKLQkJCQlyZXR1cm4gb2Zmc2V0OwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGRFRfUFJPUDoKLQkJY2FzZSBGRFRfRU5EOgotCQljYXNlIEZEVF9FTkRfTk9ERToKLQkJY2FzZSBGRFRfTk9QOgotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRkRUX0VSUl9CQURTVFJVQ1RVUkU7Ci0JCX0KLQl9IHdoaWxlICh0YWcgIT0gRkRUX0VORCk7Ci0KLQlyZXR1cm4gLUZEVF9FUlJfTk9URk9VTkQ7CisJcmV0dXJuIG9mZnNldDsgLyogZXJyb3IgZnJvbSBmZHRfbmV4dF9ub2RlKCkgKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfcncuYyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfcncuYwppbmRleCA2NjczZjhlLi44ZTdlYzRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3J3LmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9ydy5jCkBAIC01NSwxMCArNTUsMTAgQEAKIAogI2luY2x1ZGUgImxpYmZkdF9pbnRlcm5hbC5oIgogCi1zdGF0aWMgaW50IF9ibG9ja3NfbWlzb3JkZXJlZChjb25zdCB2b2lkICpmZHQsCitzdGF0aWMgaW50IF9mZHRfYmxvY2tzX21pc29yZGVyZWQoY29uc3Qgdm9pZCAqZmR0LAogCQkJICAgICAgaW50IG1lbV9yc3Zfc2l6ZSwgaW50IHN0cnVjdF9zaXplKQogewotCXJldHVybiAoZmR0X29mZl9tZW1fcnN2bWFwKGZkdCkgPCBBTElHTihzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpLCA4KSkKKwlyZXR1cm4gKGZkdF9vZmZfbWVtX3Jzdm1hcChmZHQpIDwgRkRUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZmR0X2hlYWRlciksIDgpKQogCQl8fCAoZmR0X29mZl9kdF9zdHJ1Y3QoZmR0KSA8CiAJCSAgICAoZmR0X29mZl9tZW1fcnN2bWFwKGZkdCkgKyBtZW1fcnN2X3NpemUpKQogCQl8fCAoZmR0X29mZl9kdF9zdHJpbmdzKGZkdCkgPApAQCAtNjcsMTYgKzY3LDE0IEBACiAJCSAgICAoZmR0X29mZl9kdF9zdHJpbmdzKGZkdCkgKyBmZHRfc2l6ZV9kdF9zdHJpbmdzKGZkdCkpKTsKIH0KIAotc3RhdGljIGludCByd19jaGVja19oZWFkZXIodm9pZCAqZmR0KQorc3RhdGljIGludCBfZmR0X3J3X2NoZWNrX2hlYWRlcih2b2lkICpmZHQpCiB7Ci0JaW50IGVycjsKKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKLQlpZiAoKGVyciA9IGZkdF9jaGVja19oZWFkZXIoZmR0KSkpCi0JCXJldHVybiBlcnI7CiAJaWYgKGZkdF92ZXJzaW9uKGZkdCkgPCAxNykKIAkJcmV0dXJuIC1GRFRfRVJSX0JBRFZFUlNJT047Ci0JaWYgKF9ibG9ja3NfbWlzb3JkZXJlZChmZHQsIHNpemVvZihzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkpLAotCQkJICAgICAgIGZkdF9zaXplX2R0X3N0cnVjdChmZHQpKSkKKwlpZiAoX2ZkdF9ibG9ja3NfbWlzb3JkZXJlZChmZHQsIHNpemVvZihzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkpLAorCQkJCSAgIGZkdF9zaXplX2R0X3N0cnVjdChmZHQpKSkKIAkJcmV0dXJuIC1GRFRfRVJSX0JBRExBWU9VVDsKIAlpZiAoZmR0X3ZlcnNpb24oZmR0KSA+IDE3KQogCQlmZHRfc2V0X3ZlcnNpb24oZmR0LCAxNyk7CkBAIC04NCwzNiArODIsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBSV19DSEVDS19IRUFERVIoZmR0KSBcCisjZGVmaW5lIEZEVF9SV19DSEVDS19IRUFERVIoZmR0KSBcCiAJeyBcCiAJCWludCBlcnI7IFwKLQkJaWYgKChlcnIgPSByd19jaGVja19oZWFkZXIoZmR0KSkgIT0gMCkgXAorCQlpZiAoKGVyciA9IF9mZHRfcndfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApIFwKIAkJCXJldHVybiBlcnI7IFwKIAl9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9ibG9iX2RhdGFfc2l6ZSh2b2lkICpmZHQpCitzdGF0aWMgaW5saW5lIGludCBfZmR0X2RhdGFfc2l6ZSh2b2lkICpmZHQpCiB7CiAJcmV0dXJuIGZkdF9vZmZfZHRfc3RyaW5ncyhmZHQpICsgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpOwogfQogCi1zdGF0aWMgaW50IF9ibG9iX3NwbGljZSh2b2lkICpmZHQsIHZvaWQgKnAsIGludCBvbGRsZW4sIGludCBuZXdsZW4pCitzdGF0aWMgaW50IF9mZHRfc3BsaWNlKHZvaWQgKmZkdCwgdm9pZCAqc3BsaWNlcG9pbnQsIGludCBvbGRsZW4sIGludCBuZXdsZW4pCiB7Ci0Jdm9pZCAqZW5kID0gZmR0ICsgX2Jsb2JfZGF0YV9zaXplKGZkdCk7CisJY2hhciAqcCA9IHNwbGljZXBvaW50OworCWNoYXIgKmVuZCA9IChjaGFyICopZmR0ICsgX2ZkdF9kYXRhX3NpemUoZmR0KTsKIAogCWlmICgoKHAgKyBvbGRsZW4pIDwgcCkgfHwgKChwICsgb2xkbGVuKSA+IGVuZCkpCiAJCXJldHVybiAtRkRUX0VSUl9CQURPRkZTRVQ7Ci0JaWYgKChlbmQgLSBvbGRsZW4gKyBuZXdsZW4pID4gKGZkdCArIGZkdF90b3RhbHNpemUoZmR0KSkpCisJaWYgKChlbmQgLSBvbGRsZW4gKyBuZXdsZW4pID4gKChjaGFyICopZmR0ICsgZmR0X3RvdGFsc2l6ZShmZHQpKSkKIAkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CiAJbWVtbW92ZShwICsgbmV3bGVuLCBwICsgb2xkbGVuLCBlbmQgLSBwIC0gb2xkbGVuKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfYmxvYl9zcGxpY2VfbWVtX3Jzdih2b2lkICpmZHQsIHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSAqcCwKLQkJCQlpbnQgb2xkbiwgaW50IG5ld24pCitzdGF0aWMgaW50IF9mZHRfc3BsaWNlX21lbV9yc3Yodm9pZCAqZmR0LCBzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKnAsCisJCQkgICAgICAgaW50IG9sZG4sIGludCBuZXduKQogewogCWludCBkZWx0YSA9IChuZXduIC0gb2xkbikgKiBzaXplb2YoKnApOwogCWludCBlcnI7Ci0JZXJyID0gX2Jsb2Jfc3BsaWNlKGZkdCwgcCwgb2xkbiAqIHNpemVvZigqcCksIG5ld24gKiBzaXplb2YoKnApKTsKKwllcnIgPSBfZmR0X3NwbGljZShmZHQsIHAsIG9sZG4gKiBzaXplb2YoKnApLCBuZXduICogc2l6ZW9mKCpwKSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlmZHRfc2V0X29mZl9kdF9zdHJ1Y3QoZmR0LCBmZHRfb2ZmX2R0X3N0cnVjdChmZHQpICsgZGVsdGEpOwpAQCAtMTIxLDEzICsxMjAsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfYmxvYl9zcGxpY2Vfc3RydWN0KHZvaWQgKmZkdCwgdm9pZCAqcCwKLQkJCSAgICAgICBpbnQgb2xkbGVuLCBpbnQgbmV3bGVuKQorc3RhdGljIGludCBfZmR0X3NwbGljZV9zdHJ1Y3Qodm9pZCAqZmR0LCB2b2lkICpwLAorCQkJICAgICAgaW50IG9sZGxlbiwgaW50IG5ld2xlbikKIHsKIAlpbnQgZGVsdGEgPSBuZXdsZW4gLSBvbGRsZW47CiAJaW50IGVycjsKIAotCWlmICgoZXJyID0gX2Jsb2Jfc3BsaWNlKGZkdCwgcCwgb2xkbGVuLCBuZXdsZW4pKSkKKwlpZiAoKGVyciA9IF9mZHRfc3BsaWNlKGZkdCwgcCwgb2xkbGVuLCBuZXdsZW4pKSkKIAkJcmV0dXJuIGVycjsKIAogCWZkdF9zZXRfc2l6ZV9kdF9zdHJ1Y3QoZmR0LCBmZHRfc2l6ZV9kdF9zdHJ1Y3QoZmR0KSArIGRlbHRhKTsKQEAgLTEzNSwxOSArMTM0LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX2Jsb2Jfc3BsaWNlX3N0cmluZyh2b2lkICpmZHQsIGludCBuZXdsZW4pCitzdGF0aWMgaW50IF9mZHRfc3BsaWNlX3N0cmluZyh2b2lkICpmZHQsIGludCBuZXdsZW4pCiB7Ci0Jdm9pZCAqcCA9IGZkdCArIGZkdF9vZmZfZHRfc3RyaW5ncyhmZHQpICsgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpOworCXZvaWQgKnAgPSAoY2hhciAqKWZkdAorCQkrIGZkdF9vZmZfZHRfc3RyaW5ncyhmZHQpICsgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpOwogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IF9ibG9iX3NwbGljZShmZHQsIHAsIDAsIG5ld2xlbikpKQorCWlmICgoZXJyID0gX2ZkdF9zcGxpY2UoZmR0LCBwLCAwLCBuZXdsZW4pKSkKIAkJcmV0dXJuIGVycjsKIAogCWZkdF9zZXRfc2l6ZV9kdF9zdHJpbmdzKGZkdCwgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpICsgbmV3bGVuKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfZmluZF9hZGRfc3RyaW5nKHZvaWQgKmZkdCwgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQgX2ZkdF9maW5kX2FkZF9zdHJpbmcodm9pZCAqZmR0LCBjb25zdCBjaGFyICpzKQogewogCWNoYXIgKnN0cnRhYiA9IChjaGFyICopZmR0ICsgZmR0X29mZl9kdF9zdHJpbmdzKGZkdCk7CiAJY29uc3QgY2hhciAqcDsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCQlyZXR1cm4gKHAgLSBzdHJ0YWIpOwogCiAJbmV3ID0gc3RydGFiICsgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpOwotCWVyciA9IF9ibG9iX3NwbGljZV9zdHJpbmcoZmR0LCBsZW4pOworCWVyciA9IF9mZHRfc3BsaWNlX3N0cmluZyhmZHQsIGxlbik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTc0LDExICsxNzQsMTAgQEAKIAlzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKnJlOwogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IHJ3X2NoZWNrX2hlYWRlcihmZHQpKSkKLQkJcmV0dXJuIGVycjsKKwlGRFRfUldfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAlyZSA9IF9mZHRfbWVtX3Jzdl93KGZkdCwgZmR0X251bV9tZW1fcnN2KGZkdCkpOwotCWVyciA9IF9ibG9iX3NwbGljZV9tZW1fcnN2KGZkdCwgcmUsIDAsIDEpOworCWVyciA9IF9mZHRfc3BsaWNlX21lbV9yc3YoZmR0LCByZSwgMCwgMSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTkyLDE5ICsxOTEsMTkgQEAKIAlzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKnJlID0gX2ZkdF9tZW1fcnN2X3coZmR0LCBuKTsKIAlpbnQgZXJyOwogCi0JaWYgKChlcnIgPSByd19jaGVja19oZWFkZXIoZmR0KSkpCi0JCXJldHVybiBlcnI7CisJRkRUX1JXX0NIRUNLX0hFQURFUihmZHQpOworCiAJaWYgKG4gPj0gZmR0X251bV9tZW1fcnN2KGZkdCkpCiAJCXJldHVybiAtRkRUX0VSUl9OT1RGT1VORDsKIAotCWVyciA9IF9ibG9iX3NwbGljZV9tZW1fcnN2KGZkdCwgcmUsIDEsIDApOworCWVyciA9IF9mZHRfc3BsaWNlX21lbV9yc3YoZmR0LCByZSwgMSwgMCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfcmVzaXplX3Byb3BlcnR5KHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCi0JCQkgICAgc3RydWN0IGZkdF9wcm9wZXJ0eSAqKnByb3ApCitzdGF0aWMgaW50IF9mZHRfcmVzaXplX3Byb3BlcnR5KHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJaW50IGxlbiwgc3RydWN0IGZkdF9wcm9wZXJ0eSAqKnByb3ApCiB7CiAJaW50IG9sZGxlbjsKIAlpbnQgZXJyOwpAQCAtMjEzLDM2ICsyMTIsMzMgQEAKIAlpZiAoISAoKnByb3ApKQogCQlyZXR1cm4gb2xkbGVuOwogCi0JaWYgKChlcnIgPSBfYmxvYl9zcGxpY2Vfc3RydWN0KGZkdCwgKCpwcm9wKS0+ZGF0YSwKLQkJCQkgICAgICAgQUxJR04ob2xkbGVuLCBGRFRfVEFHU0laRSksCi0JCQkJICAgICAgIEFMSUdOKGxlbiwgRkRUX1RBR1NJWkUpKSkpCisJaWYgKChlcnIgPSBfZmR0X3NwbGljZV9zdHJ1Y3QoZmR0LCAoKnByb3ApLT5kYXRhLCBGRFRfVEFHQUxJR04ob2xkbGVuKSwKKwkJCQkgICAgICBGRFRfVEFHQUxJR04obGVuKSkpKQogCQlyZXR1cm4gZXJyOwogCiAJKCpwcm9wKS0+bGVuID0gY3B1X3RvX2ZkdDMyKGxlbik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX2FkZF9wcm9wZXJ0eSh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAotCQkJIHN0cnVjdCBmZHRfcHJvcGVydHkgKipwcm9wKQorc3RhdGljIGludCBfZmR0X2FkZF9wcm9wZXJ0eSh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICBpbnQgbGVuLCBzdHJ1Y3QgZmR0X3Byb3BlcnR5ICoqcHJvcCkKIHsKLQl1aW50MzJfdCB0YWc7CiAJaW50IHByb3BsZW47CiAJaW50IG5leHRvZmZzZXQ7CiAJaW50IG5hbWVzdHJvZmY7CiAJaW50IGVycjsKIAotCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIG5vZGVvZmZzZXQsICZuZXh0b2Zmc2V0KTsKLQlpZiAodGFnICE9IEZEVF9CRUdJTl9OT0RFKQotCQlyZXR1cm4gLUZEVF9FUlJfQkFET0ZGU0VUOworCWlmICgobmV4dG9mZnNldCA9IF9mZHRfY2hlY2tfbm9kZV9vZmZzZXQoZmR0LCBub2Rlb2Zmc2V0KSkgPCAwKQorCQlyZXR1cm4gbmV4dG9mZnNldDsKIAotCW5hbWVzdHJvZmYgPSBfZmluZF9hZGRfc3RyaW5nKGZkdCwgbmFtZSk7CisJbmFtZXN0cm9mZiA9IF9mZHRfZmluZF9hZGRfc3RyaW5nKGZkdCwgbmFtZSk7CiAJaWYgKG5hbWVzdHJvZmYgPCAwKQogCQlyZXR1cm4gbmFtZXN0cm9mZjsKIAogCSpwcm9wID0gX2ZkdF9vZmZzZXRfcHRyX3coZmR0LCBuZXh0b2Zmc2V0KTsKLQlwcm9wbGVuID0gc2l6ZW9mKCoqcHJvcCkgKyBBTElHTihsZW4sIEZEVF9UQUdTSVpFKTsKKwlwcm9wbGVuID0gc2l6ZW9mKCoqcHJvcCkgKyBGRFRfVEFHQUxJR04obGVuKTsKIAotCWVyciA9IF9ibG9iX3NwbGljZV9zdHJ1Y3QoZmR0LCAqcHJvcCwgMCwgcHJvcGxlbik7CisJZXJyID0gX2ZkdF9zcGxpY2Vfc3RydWN0KGZkdCwgKnByb3AsIDAsIHByb3BsZW4pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTI1MiwxOCArMjQ4LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBmZHRfc2V0X25hbWUodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljaGFyICpuYW1lcDsKKwlpbnQgb2xkbGVuLCBuZXdsZW47CisJaW50IGVycjsKKworCUZEVF9SV19DSEVDS19IRUFERVIoZmR0KTsKKworCW5hbWVwID0gKGNoYXIgKikodWludHB0cl90KWZkdF9nZXRfbmFtZShmZHQsIG5vZGVvZmZzZXQsICZvbGRsZW4pOworCWlmICghbmFtZXApCisJCXJldHVybiBvbGRsZW47CisKKwluZXdsZW4gPSBzdHJsZW4obmFtZSk7CisKKwllcnIgPSBfZmR0X3NwbGljZV9zdHJ1Y3QoZmR0LCBuYW1lcCwgRkRUX1RBR0FMSUdOKG9sZGxlbisxKSwKKwkJCQkgRkRUX1RBR0FMSUdOKG5ld2xlbisxKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW1lbWNweShuYW1lcCwgbmFtZSwgbmV3bGVuKzEpOworCXJldHVybiAwOworfQorCiBpbnQgZmR0X3NldHByb3Aodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3Qgdm9pZCAqdmFsLCBpbnQgbGVuKQogewogCXN0cnVjdCBmZHRfcHJvcGVydHkgKnByb3A7CiAJaW50IGVycjsKIAotCWlmICgoZXJyID0gcndfY2hlY2tfaGVhZGVyKGZkdCkpKQotCQlyZXR1cm4gZXJyOworCUZEVF9SV19DSEVDS19IRUFERVIoZmR0KTsKIAotCWVyciA9IF9yZXNpemVfcHJvcGVydHkoZmR0LCBub2Rlb2Zmc2V0LCBuYW1lLCBsZW4sICZwcm9wKTsKKwllcnIgPSBfZmR0X3Jlc2l6ZV9wcm9wZXJ0eShmZHQsIG5vZGVvZmZzZXQsIG5hbWUsIGxlbiwgJnByb3ApOwogCWlmIChlcnIgPT0gLUZEVF9FUlJfTk9URk9VTkQpCi0JCWVyciA9IF9hZGRfcHJvcGVydHkoZmR0LCBub2Rlb2Zmc2V0LCBuYW1lLCBsZW4sICZwcm9wKTsKKwkJZXJyID0gX2ZkdF9hZGRfcHJvcGVydHkoZmR0LCBub2Rlb2Zmc2V0LCBuYW1lLCBsZW4sICZwcm9wKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0yNzYsMTQgKzI5NCwxNCBAQAogCXN0cnVjdCBmZHRfcHJvcGVydHkgKnByb3A7CiAJaW50IGxlbiwgcHJvcGxlbjsKIAotCVJXX0NIRUNLX0hFQURFUihmZHQpOworCUZEVF9SV19DSEVDS19IRUFERVIoZmR0KTsKIAogCXByb3AgPSBmZHRfZ2V0X3Byb3BlcnR5X3coZmR0LCBub2Rlb2Zmc2V0LCBuYW1lLCAmbGVuKTsKIAlpZiAoISBwcm9wKQogCQlyZXR1cm4gbGVuOwogCi0JcHJvcGxlbiA9IHNpemVvZigqcHJvcCkgKyBBTElHTihsZW4sIEZEVF9UQUdTSVpFKTsKLQlyZXR1cm4gX2Jsb2Jfc3BsaWNlX3N0cnVjdChmZHQsIHByb3AsIHByb3BsZW4sIDApOworCXByb3BsZW4gPSBzaXplb2YoKnByb3ApICsgRkRUX1RBR0FMSUdOKGxlbik7CisJcmV0dXJuIF9mZHRfc3BsaWNlX3N0cnVjdChmZHQsIHByb3AsIHByb3BsZW4sIDApOwogfQogCiBpbnQgZmR0X2FkZF9zdWJub2RlX25hbWVsZW4odm9pZCAqZmR0LCBpbnQgcGFyZW50b2Zmc2V0LApAQCAtMjk2LDcgKzMxNCw3IEBACiAJdWludDMyX3QgdGFnOwogCXVpbnQzMl90ICplbmR0YWc7CiAKLQlSV19DSEVDS19IRUFERVIoZmR0KTsKKwlGRFRfUldfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAlvZmZzZXQgPSBmZHRfc3Vibm9kZV9vZmZzZXRfbmFtZWxlbihmZHQsIHBhcmVudG9mZnNldCwgbmFtZSwgbmFtZWxlbik7CiAJaWYgKG9mZnNldCA+PSAwKQpAQCAtMzA5LDE5ICszMjcsMTkgQEAKIAlkbyB7CiAJCW9mZnNldCA9IG5leHRvZmZzZXQ7CiAJCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIG9mZnNldCwgJm5leHRvZmZzZXQpOwotCX0gd2hpbGUgKHRhZyA9PSBGRFRfUFJPUCk7CisJfSB3aGlsZSAoKHRhZyA9PSBGRFRfUFJPUCkgfHwgKHRhZyA9PSBGRFRfTk9QKSk7CiAKIAluaCA9IF9mZHRfb2Zmc2V0X3B0cl93KGZkdCwgb2Zmc2V0KTsKLQlub2RlbGVuID0gc2l6ZW9mKCpuaCkgKyBBTElHTihuYW1lbGVuKzEsIEZEVF9UQUdTSVpFKSArIEZEVF9UQUdTSVpFOworCW5vZGVsZW4gPSBzaXplb2YoKm5oKSArIEZEVF9UQUdBTElHTihuYW1lbGVuKzEpICsgRkRUX1RBR1NJWkU7CiAKLQllcnIgPSBfYmxvYl9zcGxpY2Vfc3RydWN0KGZkdCwgbmgsIDAsIG5vZGVsZW4pOworCWVyciA9IF9mZHRfc3BsaWNlX3N0cnVjdChmZHQsIG5oLCAwLCBub2RlbGVuKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJbmgtPnRhZyA9IGNwdV90b19mZHQzMihGRFRfQkVHSU5fTk9ERSk7Ci0JbWVtc2V0KG5oLT5uYW1lLCAwLCBBTElHTihuYW1lbGVuKzEsIEZEVF9UQUdTSVpFKSk7CisJbWVtc2V0KG5oLT5uYW1lLCAwLCBGRFRfVEFHQUxJR04obmFtZWxlbisxKSk7CiAJbWVtY3B5KG5oLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKLQllbmR0YWcgPSAodWludDMyX3QgKikoKHZvaWQgKiluaCArIG5vZGVsZW4gLSBGRFRfVEFHU0laRSk7CisJZW5kdGFnID0gKHVpbnQzMl90ICopKChjaGFyICopbmggKyBub2RlbGVuIC0gRkRUX1RBR1NJWkUpOwogCSplbmR0YWcgPSBjcHVfdG9fZmR0MzIoRkRUX0VORF9OT0RFKTsKIAogCXJldHVybiBvZmZzZXQ7CkBAIC0zMzYsMzYgKzM1NCwzNiBAQAogewogCWludCBlbmRvZmZzZXQ7CiAKLQlSV19DSEVDS19IRUFERVIoZmR0KTsKKwlGRFRfUldfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAllbmRvZmZzZXQgPSBfZmR0X25vZGVfZW5kX29mZnNldChmZHQsIG5vZGVvZmZzZXQpOwogCWlmIChlbmRvZmZzZXQgPCAwKQogCQlyZXR1cm4gZW5kb2Zmc2V0OwogCi0JcmV0dXJuIF9ibG9iX3NwbGljZV9zdHJ1Y3QoZmR0LCBfZmR0X29mZnNldF9wdHJfdyhmZHQsIG5vZGVvZmZzZXQpLAotCQkJCSAgIGVuZG9mZnNldCAtIG5vZGVvZmZzZXQsIDApOworCXJldHVybiBfZmR0X3NwbGljZV9zdHJ1Y3QoZmR0LCBfZmR0X29mZnNldF9wdHJfdyhmZHQsIG5vZGVvZmZzZXQpLAorCQkJCSAgZW5kb2Zmc2V0IC0gbm9kZW9mZnNldCwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9wYWNrYmxvY2tzKGNvbnN0IHZvaWQgKmZkdCwgdm9pZCAqYnVmLAotCQkgICAgICAgaW50IG1lbV9yc3Zfc2l6ZSwgaW50IHN0cnVjdF9zaXplKQorc3RhdGljIHZvaWQgX2ZkdF9wYWNrYmxvY2tzKGNvbnN0IGNoYXIgKm9sZCwgY2hhciAqbmV3LAorCQkJICAgIGludCBtZW1fcnN2X3NpemUsIGludCBzdHJ1Y3Rfc2l6ZSkKIHsKIAlpbnQgbWVtX3Jzdl9vZmYsIHN0cnVjdF9vZmYsIHN0cmluZ3Nfb2ZmOwogCi0JbWVtX3Jzdl9vZmYgPSBBTElHTihzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpLCA4KTsKKwltZW1fcnN2X29mZiA9IEZEVF9BTElHTihzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpLCA4KTsKIAlzdHJ1Y3Rfb2ZmID0gbWVtX3Jzdl9vZmYgKyBtZW1fcnN2X3NpemU7CiAJc3RyaW5nc19vZmYgPSBzdHJ1Y3Rfb2ZmICsgc3RydWN0X3NpemU7CiAKLQltZW1tb3ZlKGJ1ZiArIG1lbV9yc3Zfb2ZmLCBmZHQgKyBmZHRfb2ZmX21lbV9yc3ZtYXAoZmR0KSwgbWVtX3Jzdl9zaXplKTsKLQlmZHRfc2V0X29mZl9tZW1fcnN2bWFwKGJ1ZiwgbWVtX3Jzdl9vZmYpOworCW1lbW1vdmUobmV3ICsgbWVtX3Jzdl9vZmYsIG9sZCArIGZkdF9vZmZfbWVtX3Jzdm1hcChvbGQpLCBtZW1fcnN2X3NpemUpOworCWZkdF9zZXRfb2ZmX21lbV9yc3ZtYXAobmV3LCBtZW1fcnN2X29mZik7CiAKLQltZW1tb3ZlKGJ1ZiArIHN0cnVjdF9vZmYsIGZkdCArIGZkdF9vZmZfZHRfc3RydWN0KGZkdCksIHN0cnVjdF9zaXplKTsKLQlmZHRfc2V0X29mZl9kdF9zdHJ1Y3QoYnVmLCBzdHJ1Y3Rfb2ZmKTsKLQlmZHRfc2V0X3NpemVfZHRfc3RydWN0KGJ1Ziwgc3RydWN0X3NpemUpOworCW1lbW1vdmUobmV3ICsgc3RydWN0X29mZiwgb2xkICsgZmR0X29mZl9kdF9zdHJ1Y3Qob2xkKSwgc3RydWN0X3NpemUpOworCWZkdF9zZXRfb2ZmX2R0X3N0cnVjdChuZXcsIHN0cnVjdF9vZmYpOworCWZkdF9zZXRfc2l6ZV9kdF9zdHJ1Y3QobmV3LCBzdHJ1Y3Rfc2l6ZSk7CiAKLQltZW1tb3ZlKGJ1ZiArIHN0cmluZ3Nfb2ZmLCBmZHQgKyBmZHRfb2ZmX2R0X3N0cmluZ3MoZmR0KSwKLQkJZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpKTsKLQlmZHRfc2V0X29mZl9kdF9zdHJpbmdzKGJ1Ziwgc3RyaW5nc19vZmYpOwotCWZkdF9zZXRfc2l6ZV9kdF9zdHJpbmdzKGJ1ZiwgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpKTsKKwltZW1tb3ZlKG5ldyArIHN0cmluZ3Nfb2ZmLCBvbGQgKyBmZHRfb2ZmX2R0X3N0cmluZ3Mob2xkKSwKKwkJZmR0X3NpemVfZHRfc3RyaW5ncyhvbGQpKTsKKwlmZHRfc2V0X29mZl9kdF9zdHJpbmdzKG5ldywgc3RyaW5nc19vZmYpOworCWZkdF9zZXRfc2l6ZV9kdF9zdHJpbmdzKG5ldywgZmR0X3NpemVfZHRfc3RyaW5ncyhvbGQpKTsKIH0KIAogaW50IGZkdF9vcGVuX2ludG8oY29uc3Qgdm9pZCAqZmR0LCB2b2lkICpidWYsIGludCBidWZzaXplKQpAQCAtMzczLDExICszOTEsMTEgQEAKIAlpbnQgZXJyOwogCWludCBtZW1fcnN2X3NpemUsIHN0cnVjdF9zaXplOwogCWludCBuZXdzaXplOwotCXZvaWQgKnRtcDsKKwljb25zdCBjaGFyICpmZHRzdGFydCA9IGZkdDsKKwljb25zdCBjaGFyICpmZHRlbmQgPSBmZHRzdGFydCArIGZkdF90b3RhbHNpemUoZmR0KTsKKwljaGFyICp0bXA7CiAKLQllcnIgPSBmZHRfY2hlY2tfaGVhZGVyKGZkdCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlGRFRfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAltZW1fcnN2X3NpemUgPSAoZmR0X251bV9tZW1fcnN2KGZkdCkrMSkKIAkJKiBzaXplb2Yoc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5KTsKQEAgLTM5MCw3ICs0MDgsNyBAQAogCQkJOwogCX0KIAotCWlmICghX2Jsb2Nrc19taXNvcmRlcmVkKGZkdCwgbWVtX3Jzdl9zaXplLCBzdHJ1Y3Rfc2l6ZSkpIHsKKwlpZiAoIV9mZHRfYmxvY2tzX21pc29yZGVyZWQoZmR0LCBtZW1fcnN2X3NpemUsIHN0cnVjdF9zaXplKSkgewogCQkvKiBubyBmdXJ0aGVyIHdvcmsgbmVjZXNzYXJ5ICovCiAJCWVyciA9IGZkdF9tb3ZlKGZkdCwgYnVmLCBidWZzaXplKTsKIAkJaWYgKGVycikKQEAgLTQwMiwyMiArNDIwLDIzIEBACiAJfQogCiAJLyogTmVlZCB0byByZW9yZGVyICovCi0JbmV3c2l6ZSA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgZmR0X2hlYWRlciksIDgpICsgbWVtX3Jzdl9zaXplCisJbmV3c2l6ZSA9IEZEVF9BTElHTihzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpLCA4KSArIG1lbV9yc3Zfc2l6ZQogCQkrIHN0cnVjdF9zaXplICsgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpOwogCiAJaWYgKGJ1ZnNpemUgPCBuZXdzaXplKQogCQlyZXR1cm4gLUZEVF9FUlJfTk9TUEFDRTsKIAotCWlmICgoKGJ1ZiArIG5ld3NpemUpIDw9IGZkdCkKLQkgICAgfHwgKGJ1ZiA+PSAoZmR0ICsgZmR0X3RvdGFsc2l6ZShmZHQpKSkpIHsKLQkJdG1wID0gYnVmOwotCX0gZWxzZSB7Ci0JCXRtcCA9ICh2b2lkICopZmR0ICsgZmR0X3RvdGFsc2l6ZShmZHQpOwotCQlpZiAoKHRtcCArIG5ld3NpemUpID4gKGJ1ZiArIGJ1ZnNpemUpKQorCS8qIEZpcnN0IGF0dGVtcHQgdG8gYnVpbGQgY29udmVydGVkIHRyZWUgYXQgYmVnaW5uaW5nIG9mIGJ1ZmZlciAqLworCXRtcCA9IGJ1ZjsKKwkvKiBCdXQgaWYgdGhhdCBvdmVybGFwcyB3aXRoIHRoZSBvbGQgdHJlZS4uLiAqLworCWlmICgoKHRtcCArIG5ld3NpemUpID4gZmR0c3RhcnQpICYmICh0bXAgPCBmZHRlbmQpKSB7CisJCS8qIFRyeSByaWdodCBhZnRlciB0aGUgb2xkIHRyZWUgaW5zdGVhZCAqLworCQl0bXAgPSAoY2hhciAqKSh1aW50cHRyX3QpZmR0ZW5kOworCQlpZiAoKHRtcCArIG5ld3NpemUpID4gKChjaGFyICopYnVmICsgYnVmc2l6ZSkpCiAJCQlyZXR1cm4gLUZEVF9FUlJfTk9TUEFDRTsKIAl9CiAKLQlfcGFja2Jsb2NrcyhmZHQsIHRtcCwgbWVtX3Jzdl9zaXplLCBzdHJ1Y3Rfc2l6ZSk7CisJX2ZkdF9wYWNrYmxvY2tzKGZkdCwgdG1wLCBtZW1fcnN2X3NpemUsIHN0cnVjdF9zaXplKTsKIAltZW1tb3ZlKGJ1ZiwgdG1wLCBuZXdzaXplKTsKIAogCWZkdF9zZXRfbWFnaWMoYnVmLCBGRFRfTUFHSUMpOwpAQCAtNDMyLDE2ICs0NTEsMTMgQEAKIGludCBmZHRfcGFjayh2b2lkICpmZHQpCiB7CiAJaW50IG1lbV9yc3Zfc2l6ZTsKLQlpbnQgZXJyOwogCi0JZXJyID0gcndfY2hlY2tfaGVhZGVyKGZkdCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlGRFRfUldfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAltZW1fcnN2X3NpemUgPSAoZmR0X251bV9tZW1fcnN2KGZkdCkrMSkKIAkJKiBzaXplb2Yoc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5KTsKLQlfcGFja2Jsb2NrcyhmZHQsIGZkdCwgbWVtX3Jzdl9zaXplLCBmZHRfc2l6ZV9kdF9zdHJ1Y3QoZmR0KSk7Ci0JZmR0X3NldF90b3RhbHNpemUoZmR0LCBfYmxvYl9kYXRhX3NpemUoZmR0KSk7CisJX2ZkdF9wYWNrYmxvY2tzKGZkdCwgZmR0LCBtZW1fcnN2X3NpemUsIGZkdF9zaXplX2R0X3N0cnVjdChmZHQpKTsKKwlmZHRfc2V0X3RvdGFsc2l6ZShmZHQsIF9mZHRfZGF0YV9zaXplKGZkdCkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3N0cmVycm9yLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3N0cmVycm9yLmMKaW5kZXggZjlkMzJlZi4uZTZjM2NlZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9zdHJlcnJvci5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfc3RyZXJyb3IuYwpAQCAtNTUsMjkgKzU1LDI5IEBACiAKICNpbmNsdWRlICJsaWJmZHRfaW50ZXJuYWwuaCIKIAotc3RydWN0IGVycnRhYmVudCB7CitzdHJ1Y3QgZmR0X2VycnRhYmVudCB7CiAJY29uc3QgY2hhciAqc3RyOwogfTsKIAotI2RlZmluZSBFUlJUQUJFTlQodmFsKSBcCisjZGVmaW5lIEZEVF9FUlJUQUJFTlQodmFsKSBcCiAJWyh2YWwpXSA9IHsgLnN0ciA9ICN2YWwsIH0KIAotc3RhdGljIHN0cnVjdCBlcnJ0YWJlbnQgZXJydGFibGVbXSA9IHsKLQlFUlJUQUJFTlQoRkRUX0VSUl9OT1RGT1VORCksCi0JRVJSVEFCRU5UKEZEVF9FUlJfRVhJU1RTKSwKLQlFUlJUQUJFTlQoRkRUX0VSUl9OT1NQQUNFKSwKK3N0YXRpYyBzdHJ1Y3QgZmR0X2VycnRhYmVudCBmZHRfZXJydGFibGVbXSA9IHsKKwlGRFRfRVJSVEFCRU5UKEZEVF9FUlJfTk9URk9VTkQpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9FWElTVFMpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9OT1NQQUNFKSwKIAotCUVSUlRBQkVOVChGRFRfRVJSX0JBRE9GRlNFVCksCi0JRVJSVEFCRU5UKEZEVF9FUlJfQkFEUEFUSCksCi0JRVJSVEFCRU5UKEZEVF9FUlJfQkFEU1RBVEUpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9CQURPRkZTRVQpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9CQURQQVRIKSwKKwlGRFRfRVJSVEFCRU5UKEZEVF9FUlJfQkFEU1RBVEUpLAogCi0JRVJSVEFCRU5UKEZEVF9FUlJfVFJVTkNBVEVEKSwKLQlFUlJUQUJFTlQoRkRUX0VSUl9CQURNQUdJQyksCi0JRVJSVEFCRU5UKEZEVF9FUlJfQkFEVkVSU0lPTiksCi0JRVJSVEFCRU5UKEZEVF9FUlJfQkFEU1RSVUNUVVJFKSwKLQlFUlJUQUJFTlQoRkRUX0VSUl9CQURMQVlPVVQpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9UUlVOQ0FURUQpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9CQURNQUdJQyksCisJRkRUX0VSUlRBQkVOVChGRFRfRVJSX0JBRFZFUlNJT04pLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9CQURTVFJVQ1RVUkUpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9CQURMQVlPVVQpLAogfTsKLSNkZWZpbmUgRVJSVEFCU0laRQkoc2l6ZW9mKGVycnRhYmxlKSAvIHNpemVvZihlcnJ0YWJsZVswXSkpCisjZGVmaW5lIEZEVF9FUlJUQUJTSVpFCShzaXplb2YoZmR0X2VycnRhYmxlKSAvIHNpemVvZihmZHRfZXJydGFibGVbMF0pKQogCiBjb25zdCBjaGFyICpmZHRfc3RyZXJyb3IoaW50IGVycnZhbCkKIHsKQEAgLTg1LDggKzg1LDggQEAKIAkJcmV0dXJuICI8dmFsaWQgb2Zmc2V0L2xlbmd0aD4iOwogCWVsc2UgaWYgKGVycnZhbCA9PSAwKQogCQlyZXR1cm4gIjxubyBlcnJvcj4iOwotCWVsc2UgaWYgKGVycnZhbCA+IC1FUlJUQUJTSVpFKSB7Ci0JCWNvbnN0IGNoYXIgKnMgPSBlcnJ0YWJsZVstZXJydmFsXS5zdHI7CisJZWxzZSBpZiAoZXJydmFsID4gLUZEVF9FUlJUQUJTSVpFKSB7CisJCWNvbnN0IGNoYXIgKnMgPSBmZHRfZXJydGFibGVbLWVycnZhbF0uc3RyOwogCiAJCWlmIChzKQogCQkJcmV0dXJuIHM7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3N3LmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3N3LmMKaW5kZXggZGRhMmRlMy4uNjk4MzI5ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9zdy5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfc3cuYwpAQCAtNTUsMTQgKzU1LDIyIEBACiAKICNpbmNsdWRlICJsaWJmZHRfaW50ZXJuYWwuaCIKIAotc3RhdGljIGludCBjaGVja19oZWFkZXJfc3codm9pZCAqZmR0KQorc3RhdGljIGludCBfZmR0X3N3X2NoZWNrX2hlYWRlcih2b2lkICpmZHQpCiB7Ci0JaWYgKGZkdF9tYWdpYyhmZHQpICE9IFNXX01BR0lDKQorCWlmIChmZHRfbWFnaWMoZmR0KSAhPSBGRFRfU1dfTUFHSUMpCiAJCXJldHVybiAtRkRUX0VSUl9CQURNQUdJQzsKKwkvKiBGSVhNRTogc2hvdWxkIGNoZWNrIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgaGVhZGVyIHN0YXRlICovCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkICpncmFiX3NwYWNlKHZvaWQgKmZkdCwgaW50IGxlbikKKyNkZWZpbmUgRkRUX1NXX0NIRUNLX0hFQURFUihmZHQpIFwKKwl7IFwKKwkJaW50IGVycjsgXAorCQlpZiAoKGVyciA9IF9mZHRfc3dfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApIFwKKwkJCXJldHVybiBlcnI7IFwKKwl9CisKK3N0YXRpYyB2b2lkICpfZmR0X2dyYWJfc3BhY2Uodm9pZCAqZmR0LCBpbnQgbGVuKQogewogCWludCBvZmZzZXQgPSBmZHRfc2l6ZV9kdF9zdHJ1Y3QoZmR0KTsKIAlpbnQgc3BhY2VsZWZ0OwpAQCAtODYsMTMgKzk0LDEzIEBACiAKIAltZW1zZXQoYnVmLCAwLCBidWZzaXplKTsKIAotCWZkdF9zZXRfbWFnaWMoZmR0LCBTV19NQUdJQyk7CisJZmR0X3NldF9tYWdpYyhmZHQsIEZEVF9TV19NQUdJQyk7CiAJZmR0X3NldF92ZXJzaW9uKGZkdCwgRkRUX0xBU1RfU1VQUE9SVEVEX1ZFUlNJT04pOwogCWZkdF9zZXRfbGFzdF9jb21wX3ZlcnNpb24oZmR0LCBGRFRfRklSU1RfU1VQUE9SVEVEX1ZFUlNJT04pOwogCWZkdF9zZXRfdG90YWxzaXplKGZkdCwgIGJ1ZnNpemUpOwogCi0JZmR0X3NldF9vZmZfbWVtX3Jzdm1hcChmZHQsIEFMSUdOKHNpemVvZihzdHJ1Y3QgZmR0X2hlYWRlciksCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSkpKTsKKwlmZHRfc2V0X29mZl9tZW1fcnN2bWFwKGZkdCwgRkRUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZmR0X2hlYWRlciksCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkpKSk7CiAJZmR0X3NldF9vZmZfZHRfc3RydWN0KGZkdCwgZmR0X29mZl9tZW1fcnN2bWFwKGZkdCkpOwogCWZkdF9zZXRfb2ZmX2R0X3N0cmluZ3MoZmR0LCBidWZzaXplKTsKIApAQCAtMTAyLDExICsxMTAsMTAgQEAKIGludCBmZHRfYWRkX3Jlc2VydmVtYXBfZW50cnkodm9pZCAqZmR0LCB1aW50NjRfdCBhZGRyLCB1aW50NjRfdCBzaXplKQogewogCXN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSAqcmU7Ci0JaW50IGVyciA9IGNoZWNrX2hlYWRlcl9zdyhmZHQpOwogCWludCBvZmZzZXQ7CiAKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCUZEVF9TV19DSEVDS19IRUFERVIoZmR0KTsKKwogCWlmIChmZHRfc2l6ZV9kdF9zdHJ1Y3QoZmR0KSkKIAkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUQVRFOwogCkBAIC0xMTQsNyArMTIxLDcgQEAKIAlpZiAoKG9mZnNldCArIHNpemVvZigqcmUpKSA+IGZkdF90b3RhbHNpemUoZmR0KSkKIAkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CiAKLQlyZSA9IChzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKikoZmR0ICsgb2Zmc2V0KTsKKwlyZSA9IChzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKikoKGNoYXIgKilmZHQgKyBvZmZzZXQpOwogCXJlLT5hZGRyZXNzID0gY3B1X3RvX2ZkdDY0KGFkZHIpOwogCXJlLT5zaXplID0gY3B1X3RvX2ZkdDY0KHNpemUpOwogCkBAIC0xMzEsMTMgKzEzOCwxMSBAQAogaW50IGZkdF9iZWdpbl9ub2RlKHZvaWQgKmZkdCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgZmR0X25vZGVfaGVhZGVyICpuaDsKLQlpbnQgZXJyID0gY2hlY2tfaGVhZGVyX3N3KGZkdCk7CiAJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSkgKyAxOwogCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlGRFRfU1dfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKLQluaCA9IGdyYWJfc3BhY2UoZmR0LCBzaXplb2YoKm5oKSArIEFMSUdOKG5hbWVsZW4sIEZEVF9UQUdTSVpFKSk7CisJbmggPSBfZmR0X2dyYWJfc3BhY2UoZmR0LCBzaXplb2YoKm5oKSArIEZEVF9UQUdBTElHTihuYW1lbGVuKSk7CiAJaWYgKCEgbmgpCiAJCXJldHVybiAtRkRUX0VSUl9OT1NQQUNFOwogCkBAIC0xNDksMTIgKzE1NCwxMCBAQAogaW50IGZkdF9lbmRfbm9kZSh2b2lkICpmZHQpCiB7CiAJdWludDMyX3QgKmVuOwotCWludCBlcnIgPSBjaGVja19oZWFkZXJfc3coZmR0KTsKIAotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJRkRUX1NXX0NIRUNLX0hFQURFUihmZHQpOwogCi0JZW4gPSBncmFiX3NwYWNlKGZkdCwgRkRUX1RBR1NJWkUpOworCWVuID0gX2ZkdF9ncmFiX3NwYWNlKGZkdCwgRkRUX1RBR1NJWkUpOwogCWlmICghIGVuKQogCQlyZXR1cm4gLUZEVF9FUlJfTk9TUEFDRTsKIApAQCAtMTYyLDcgKzE2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZmluZF9hZGRfc3RyaW5nKHZvaWQgKmZkdCwgY29uc3QgY2hhciAqcykKK3N0YXRpYyBpbnQgX2ZkdF9maW5kX2FkZF9zdHJpbmcodm9pZCAqZmR0LCBjb25zdCBjaGFyICpzKQogewogCWNoYXIgKnN0cnRhYiA9IChjaGFyICopZmR0ICsgZmR0X3RvdGFsc2l6ZShmZHQpOwogCWNvbnN0IGNoYXIgKnA7CkBAIC0xODgsMTcgKzE5MSwxNSBAQAogaW50IGZkdF9wcm9wZXJ0eSh2b2lkICpmZHQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbCwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgZmR0X3Byb3BlcnR5ICpwcm9wOwotCWludCBlcnIgPSBjaGVja19oZWFkZXJfc3coZmR0KTsKIAlpbnQgbmFtZW9mZjsKIAotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJRkRUX1NXX0NIRUNLX0hFQURFUihmZHQpOwogCi0JbmFtZW9mZiA9IGZpbmRfYWRkX3N0cmluZyhmZHQsIG5hbWUpOworCW5hbWVvZmYgPSBfZmR0X2ZpbmRfYWRkX3N0cmluZyhmZHQsIG5hbWUpOwogCWlmIChuYW1lb2ZmID09IDApCiAJCXJldHVybiAtRkRUX0VSUl9OT1NQQUNFOwogCi0JcHJvcCA9IGdyYWJfc3BhY2UoZmR0LCBzaXplb2YoKnByb3ApICsgQUxJR04obGVuLCBGRFRfVEFHU0laRSkpOworCXByb3AgPSBfZmR0X2dyYWJfc3BhY2UoZmR0LCBzaXplb2YoKnByb3ApICsgRkRUX1RBR0FMSUdOKGxlbikpOwogCWlmICghIHByb3ApCiAJCXJldHVybiAtRkRUX0VSUl9OT1NQQUNFOwogCkBAIC0yMTEsMTggKzIxMiwxNiBAQAogCiBpbnQgZmR0X2ZpbmlzaCh2b2lkICpmZHQpCiB7Ci0JaW50IGVyciA9IGNoZWNrX2hlYWRlcl9zdyhmZHQpOwogCWNoYXIgKnAgPSAoY2hhciAqKWZkdDsKIAl1aW50MzJfdCAqZW5kOwogCWludCBvbGRzdHJvZmZzZXQsIG5ld3N0cm9mZnNldDsKIAl1aW50MzJfdCB0YWc7CiAJaW50IG9mZnNldCwgbmV4dG9mZnNldDsKIAotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJRkRUX1NXX0NIRUNLX0hFQURFUihmZHQpOwogCiAJLyogQWRkIHRlcm1pbmF0b3IgKi8KLQllbmQgPSBncmFiX3NwYWNlKGZkdCwgc2l6ZW9mKCplbmQpKTsKKwllbmQgPSBfZmR0X2dyYWJfc3BhY2UoZmR0LCBzaXplb2YoKmVuZCkpOwogCWlmICghIGVuZCkKIAkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CiAJKmVuZCA9IGNwdV90b19mZHQzMihGRFRfRU5EKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfd2lwLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3dpcC5jCmluZGV4IDg4ZTI0YjguLmE0NjUyYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfd2lwLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF93aXAuYwpAQCAtNzIsMTEgKzcyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG5vcF9yZWdpb24odm9pZCAqc3RhcnQsIGludCBsZW4pCitzdGF0aWMgdm9pZCBfZmR0X25vcF9yZWdpb24odm9pZCAqc3RhcnQsIGludCBsZW4pCiB7CiAJdWludDMyX3QgKnA7CiAKLQlmb3IgKHAgPSBzdGFydDsgKHZvaWQgKilwIDwgKHN0YXJ0ICsgbGVuKTsgcCsrKQorCWZvciAocCA9IHN0YXJ0OyAoY2hhciAqKXAgPCAoKGNoYXIgKilzdGFydCArIGxlbik7IHArKykKIAkJKnAgPSBjcHVfdG9fZmR0MzIoRkRUX05PUCk7CiB9CiAKQEAgLTg5LDcgKzg5LDcgQEAKIAlpZiAoISBwcm9wKQogCQlyZXR1cm4gbGVuOwogCi0Jbm9wX3JlZ2lvbihwcm9wLCBsZW4gKyBzaXplb2YoKnByb3ApKTsKKwlfZmR0X25vcF9yZWdpb24ocHJvcCwgbGVuICsgc2l6ZW9mKCpwcm9wKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzOSw2ICsxMzksNyBAQAogCWlmIChlbmRvZmZzZXQgPCAwKQogCQlyZXR1cm4gZW5kb2Zmc2V0OwogCi0Jbm9wX3JlZ2lvbihmZHRfb2Zmc2V0X3B0cl93KGZkdCwgbm9kZW9mZnNldCwgMCksIGVuZG9mZnNldCAtIG5vZGVvZmZzZXQpOworCV9mZHRfbm9wX3JlZ2lvbihmZHRfb2Zmc2V0X3B0cl93KGZkdCwgbm9kZW9mZnNldCwgMCksCisJCQllbmRvZmZzZXQgLSBub2Rlb2Zmc2V0KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9saWJmZHQuaCBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9saWJmZHQuaAppbmRleCA2YjJmYjkyLi5jZTgwZTRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvbGliZmR0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2xpYmZkdC5oCkBAIC0xMjUsMTIgKzEyNSwxOCBAQAogY29uc3Qgdm9pZCAqZmR0X29mZnNldF9wdHIoY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0LCBpbnQgY2hlY2tsZW4pOwogc3RhdGljIGlubGluZSB2b2lkICpmZHRfb2Zmc2V0X3B0cl93KHZvaWQgKmZkdCwgaW50IG9mZnNldCwgaW50IGNoZWNrbGVuKQogewotCXJldHVybiAodm9pZCAqKWZkdF9vZmZzZXRfcHRyKGZkdCwgb2Zmc2V0LCBjaGVja2xlbik7CisJcmV0dXJuICh2b2lkICopKHVpbnRwdHJfdClmZHRfb2Zmc2V0X3B0cihmZHQsIG9mZnNldCwgY2hlY2tsZW4pOwogfQogCiB1aW50MzJfdCBmZHRfbmV4dF90YWcoY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0LCBpbnQgKm5leHRvZmZzZXQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRyYXZlcnNhbCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBmZHRfbmV4dF9ub2RlKGNvbnN0IHZvaWQgKmZkdCwgaW50IG9mZnNldCwgaW50ICpkZXB0aCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogR2VuZXJhbCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMjA3LDcgKzIxMyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoqCi0gKiBmZHRfc3RyaW5nIC0gcmV0cmVpdmUgYSBzdHJpbmcgZnJvbSB0aGUgc3RyaW5ncyBibG9jayBvZiBhIGRldmljZSB0cmVlCisgKiBmZHRfc3RyaW5nIC0gcmV0cmlldmUgYSBzdHJpbmcgZnJvbSB0aGUgc3RyaW5ncyBibG9jayBvZiBhIGRldmljZSB0cmVlCiAgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCiAgKiBAc3Ryb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIHN0cmluZyB3aXRoaW4gdGhlIHN0cmluZ3MgYmxvY2sgKG5hdGl2ZSBlbmRpYW4pCiAgKgpAQCAtMjIxLDcgKzIyNyw3IEBACiBjb25zdCBjaGFyICpmZHRfc3RyaW5nKGNvbnN0IHZvaWQgKmZkdCwgaW50IHN0cm9mZnNldCk7CiAKIC8qKgotICogZmR0X251bV9tZW1fcnN2IC0gcmV0cmVpdmUgdGhlIG51bWJlciBvZiBtZW1vcnkgcmVzZXJ2ZSBtYXAgZW50cmllcworICogZmR0X251bV9tZW1fcnN2IC0gcmV0cmlldmUgdGhlIG51bWJlciBvZiBtZW1vcnkgcmVzZXJ2ZSBtYXAgZW50cmllcwogICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgogICoKICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkZXZpY2UgdHJlZSBibG9iJ3MgbWVtb3J5CkBAIC0yMzQsNyArMjQwLDcgQEAKIGludCBmZHRfbnVtX21lbV9yc3YoY29uc3Qgdm9pZCAqZmR0KTsKIAogLyoqCi0gKiBmZHRfZ2V0X21lbV9yc3YgLSByZXRyZWl2ZSBvbmUgbWVtb3J5IHJlc2VydmUgbWFwIGVudHJ5CisgKiBmZHRfZ2V0X21lbV9yc3YgLSByZXRyaWV2ZSBvbmUgbWVtb3J5IHJlc2VydmUgbWFwIGVudHJ5CiAgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCiAgKiBAYWRkcmVzcywgQHNpemU6IHBvaW50ZXJzIHRvIDY0LWJpdCB2YXJpYWJsZXMKICAqCkBAIC0zMTQsNyArMzIwLDcgQEAKIGludCBmZHRfcGF0aF9vZmZzZXQoY29uc3Qgdm9pZCAqZmR0LCBjb25zdCBjaGFyICpwYXRoKTsKIAogLyoqCi0gKiBmZHRfZ2V0X25hbWUgLSByZXRyZWl2ZSB0aGUgbmFtZSBvZiBhIGdpdmVuIG5vZGUKKyAqIGZkdF9nZXRfbmFtZSAtIHJldHJpZXZlIHRoZSBuYW1lIG9mIGEgZ2l2ZW4gbm9kZQogICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgogICogQG5vZGVvZmZzZXQ6IHN0cnVjdHVyZSBibG9jayBvZmZzZXQgb2YgdGhlIHN0YXJ0aW5nIG5vZGUKICAqIEBsZW5wOiBwb2ludGVyIHRvIGFuIGludGVnZXIgdmFyaWFibGUgKHdpbGwgYmUgb3ZlcndyaXR0ZW4pIG9yIE5VTEwKQEAgLTM0Niw3ICszNTIsNyBAQAogICogZmR0X2dldF9wcm9wZXJ0eSgpIHJldHJpZXZlcyBhIHBvaW50ZXIgdG8gdGhlIGZkdF9wcm9wZXJ0eQogICogc3RydWN0dXJlIHdpdGhpbiB0aGUgZGV2aWNlIHRyZWUgYmxvYiBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eQogICogbmFtZWQgJ25hbWUnIG9mIHRoZSBub2RlIGF0IG9mZnNldCBub2Rlb2Zmc2V0LiAgSWYgbGVucCBpcwotICogbm9uLU5VTEwsIHRoZSBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlIGFsc28gcmV0dXJuZWQsIGluIHRoZQorICogbm9uLU5VTEwsIHRoZSBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlIGlzIGFsc28gcmV0dXJuZWQsIGluIHRoZQogICogaW50ZWdlciBwb2ludGVkIHRvIGJ5IGxlbnAuCiAgKgogICogcmV0dXJuczoKQEAgLTM2OSw4ICszNzUsOCBAQAogCQkJCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJCSAgICAgIGludCAqbGVucCkKIHsKLQlyZXR1cm4gKHN0cnVjdCBmZHRfcHJvcGVydHkgKilmZHRfZ2V0X3Byb3BlcnR5KGZkdCwgbm9kZW9mZnNldCwKLQkJCQkJCSAgICAgICBuYW1lLCBsZW5wKTsKKwlyZXR1cm4gKHN0cnVjdCBmZHRfcHJvcGVydHkgKikodWludHB0cl90KQorCQlmZHRfZ2V0X3Byb3BlcnR5KGZkdCwgbm9kZW9mZnNldCwgbmFtZSwgbGVucCk7CiB9CiAKIC8qKgpAQCAtMzgzLDcgKzM4OSw3IEBACiAgKiBmZHRfZ2V0cHJvcCgpIHJldHJpZXZlcyBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eQogICogbmFtZWQgJ25hbWUnIG9mIHRoZSBub2RlIGF0IG9mZnNldCBub2Rlb2Zmc2V0ICh0aGlzIHdpbGwgYmUgYQogICogcG9pbnRlciB0byB3aXRoaW4gdGhlIGRldmljZSBibG9iIGl0c2VsZiwgbm90IGEgY29weSBvZiB0aGUgdmFsdWUpLgotICogSWYgbGVucCBpcyBub24tTlVMTCwgdGhlIGxlbmd0aCBvZiB0aGUgcHJvcGVydHkgdmFsdWUgYWxzbworICogSWYgbGVucCBpcyBub24tTlVMTCwgdGhlIGxlbmd0aCBvZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgYWxzbwogICogcmV0dXJuZWQsIGluIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgbGVucC4KICAqCiAgKiByZXR1cm5zOgpAQCAtNDA1LDExICs0MTEsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqZmR0X2dldHByb3Bfdyh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LAogCQkJCSAgY29uc3QgY2hhciAqbmFtZSwgaW50ICpsZW5wKQogewotCXJldHVybiAodm9pZCAqKWZkdF9nZXRwcm9wKGZkdCwgbm9kZW9mZnNldCwgbmFtZSwgbGVucCk7CisJcmV0dXJuICh2b2lkICopKHVpbnRwdHJfdClmZHRfZ2V0cHJvcChmZHQsIG5vZGVvZmZzZXQsIG5hbWUsIGxlbnApOwogfQogCiAvKioKLSAqIGZkdF9nZXRfcGhhbmRsZSAtIHJldHJlaXZlIHRoZSBwaGFuZGxlIG9mIGEgZ2l2ZW4gbm9kZQorICogZmR0X2dldF9waGFuZGxlIC0gcmV0cmlldmUgdGhlIHBoYW5kbGUgb2YgYSBnaXZlbiBub2RlCiAgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCiAgKiBAbm9kZW9mZnNldDogc3RydWN0dXJlIGJsb2NrIG9mZnNldCBvZiB0aGUgbm9kZQogICoKQEAgLTQxNyw3ICs0MjMsNyBAQAogICogc3RydWN0dXJlIGJsb2NrIG9mZnNldCBub2Rlb2Zmc2V0LgogICoKICAqIHJldHVybnM6Ci0gKgl0aGUgcGhhbmRsZSBvZiB0aGUgbm9kZSBhdCBub2Rlb2Zmc2V0LCBvbiBzdWNjZXMgKCE9IDAsICE9IC0xKQorICoJdGhlIHBoYW5kbGUgb2YgdGhlIG5vZGUgYXQgbm9kZW9mZnNldCwgb24gc3VjY2VzcyAoIT0gMCwgIT0gLTEpCiAgKgkwLCBpZiB0aGUgbm9kZSBoYXMgbm8gcGhhbmRsZSwgb3IgYW5vdGhlciBlcnJvciBvY2N1cnMKICAqLwogdWludDMyX3QgZmR0X2dldF9waGFuZGxlKGNvbnN0IHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQpOwpAQCAtNTE2LDcgKzUyMiw3IEBACiAgKiBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3RhcnQgdG8gbm9kZW9mZnNldCwgKnR3aWNlKi4KICAqCiAgKiByZXR1cm5zOgotICoJc3R1Y3R1cmUgYmxvY2sgb2Zmc2V0IG9mIHRoZSBwYXJlbnQgb2YgdGhlIG5vZGUgYXQgbm9kZW9mZnNldAorICoJc3RydWN0dXJlIGJsb2NrIG9mZnNldCBvZiB0aGUgcGFyZW50IG9mIHRoZSBub2RlIGF0IG5vZGVvZmZzZXQKICAqCQkoPj0wKSwgb24gc3VjY2VzcwogICogCS1GRFRfRVJSX0JBRE9GRlNFVCwgbm9kZW9mZnNldCBkb2VzIG5vdCByZWZlciB0byBhIEJFR0lOX05PREUgdGFnCiAgKgktRkRUX0VSUl9CQURNQUdJQywKQEAgLTU3Myw3ICs1NzksNyBAQAogICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgogICogQHBoYW5kbGU6IHBoYW5kbGUgdmFsdWUKICAqCi0gKiBmZHRfbm9kZV9vZmZzZXRfYnlfcHJvcF92YWx1ZSgpIHJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgbm9kZQorICogZmR0X25vZGVfb2Zmc2V0X2J5X3BoYW5kbGUoKSByZXR1cm5zIHRoZSBvZmZzZXQgb2YgdGhlIG5vZGUKICAqIHdoaWNoIGhhcyB0aGUgZ2l2ZW4gcGhhbmRsZSB2YWx1ZS4gIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbm9kZQogICogaW4gdGhlIHRyZWUgd2l0aCB0aGUgZ2l2ZW4gcGhhbmRsZSAoYW4gaW52YWxpZCB0cmVlKSwgcmVzdWx0cyBhcmUKICAqIHVuZGVmaW5lZC4KQEAgLTY1NSw4ICs2NjEsNjUgQEAKIC8qIFdyaXRlLWluLXBsYWNlIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qKgorICogZmR0X3NldHByb3BfaW5wbGFjZSAtIGNoYW5nZSBhIHByb3BlcnR5J3MgdmFsdWUsIGJ1dCBub3QgaXRzIHNpemUKKyAqIEBmZHQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0cmVlIGJsb2IKKyAqIEBub2Rlb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIG5vZGUgd2hvc2UgcHJvcGVydHkgdG8gY2hhbmdlCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY2hhbmdlCisgKiBAdmFsOiBwb2ludGVyIHRvIGRhdGEgdG8gcmVwbGFjZSB0aGUgcHJvcGVydHkgdmFsdWUgd2l0aAorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZQorICoKKyAqIGZkdF9zZXRwcm9wX2lucGxhY2UoKSByZXBsYWNlcyB0aGUgdmFsdWUgb2YgYSBnaXZlbiBwcm9wZXJ0eSB3aXRoCisgKiB0aGUgZGF0YSBpbiB2YWwsIG9mIGxlbmd0aCBsZW4uICBUaGlzIGZ1bmN0aW9uIGNhbm5vdCBjaGFuZ2UgdGhlCisgKiBzaXplIG9mIGEgcHJvcGVydHksIGFuZCBzbyB3aWxsIG9ubHkgd29yayBpZiBsZW4gaXMgZXF1YWwgdG8gdGhlCisgKiBjdXJyZW50IGxlbmd0aCBvZiB0aGUgcHJvcGVydHkuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsdGVyIG9ubHkgdGhlIGJ5dGVzIGluIHRoZSBibG9iIHdoaWNoIGNvbnRhaW4KKyAqIHRoZSBnaXZlbiBwcm9wZXJ0eSB2YWx1ZSwgYW5kIHdpbGwgbm90IGFsdGVyIG9yIG1vdmUgYW55IG90aGVyIHBhcnQKKyAqIG9mIHRoZSB0cmVlLgorICoKKyAqIHJldHVybnM6CisgKgkwLCBvbiBzdWNjZXNzCisgKgktRkRUX0VSUl9OT1NQQUNFLCBpZiBsZW4gaXMgbm90IGVxdWFsIHRvIHRoZSBwcm9wZXJ0eSdzIGN1cnJlbnQgbGVuZ3RoCisgKgktRkRUX0VSUl9OT1RGT1VORCwgbm9kZSBkb2VzIG5vdCBoYXZlIHRoZSBuYW1lZCBwcm9wZXJ0eQorICoJLUZEVF9FUlJfQkFET0ZGU0VULCBub2Rlb2Zmc2V0IGRpZCBub3QgcG9pbnQgdG8gRkRUX0JFR0lOX05PREUgdGFnCisgKgktRkRUX0VSUl9CQURNQUdJQywKKyAqCS1GRFRfRVJSX0JBRFZFUlNJT04sCisgKgktRkRUX0VSUl9CQURTVEFURSwKKyAqCS1GRFRfRVJSX0JBRFNUUlVDVFVSRSwKKyAqCS1GRFRfRVJSX1RSVU5DQVRFRCwgc3RhbmRhcmQgbWVhbmluZ3MKKyAqLwogaW50IGZkdF9zZXRwcm9wX2lucGxhY2Uodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY29uc3QgY2hhciAqbmFtZSwKIAkJCWNvbnN0IHZvaWQgKnZhbCwgaW50IGxlbik7CisKKy8qKgorICogZmR0X3NldHByb3BfaW5wbGFjZV9jZWxsIC0gY2hhbmdlIHRoZSB2YWx1ZSBvZiBhIHNpbmdsZS1jZWxsIHByb3BlcnR5CisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAbm9kZW9mZnNldDogb2Zmc2V0IG9mIHRoZSBub2RlIHdob3NlIHByb3BlcnR5IHRvIGNoYW5nZQorICogQG5hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNoYW5nZQorICogQHZhbDogY2VsbCAoMzItYml0IGludGVnZXIpIHZhbHVlIHRvIHJlcGxhY2UgdGhlIHByb3BlcnR5IHdpdGgKKyAqCisgKiBmZHRfc2V0cHJvcF9pbnBsYWNlX2NlbGwoKSByZXBsYWNlcyB0aGUgdmFsdWUgb2YgYSBnaXZlbiBwcm9wZXJ0eQorICogd2l0aCB0aGUgMzItYml0IGludGVnZXIgY2VsbCB2YWx1ZSBpbiB2YWwsIGNvbnZlcnRpbmcgdmFsIHRvCisgKiBiaWctZW5kaWFuIGlmIG5lY2Vzc2FyeS4gIFRoaXMgZnVuY3Rpb24gY2Fubm90IGNoYW5nZSB0aGUgc2l6ZSBvZiBhCisgKiBwcm9wZXJ0eSwgYW5kIHNvIHdpbGwgb25seSB3b3JrIGlmIHRoZSBwcm9wZXJ0eSBhbHJlYWR5IGV4aXN0cyBhbmQKKyAqIGhhcyBsZW5ndGggNC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgb25seSB0aGUgYnl0ZXMgaW4gdGhlIGJsb2Igd2hpY2ggY29udGFpbgorICogdGhlIGdpdmVuIHByb3BlcnR5IHZhbHVlLCBhbmQgd2lsbCBub3QgYWx0ZXIgb3IgbW92ZSBhbnkgb3RoZXIgcGFydAorICogb2YgdGhlIHRyZWUuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX05PU1BBQ0UsIGlmIHRoZSBwcm9wZXJ0eSdzIGxlbmd0aCBpcyBub3QgZXF1YWwgdG8gNAorICAqCS1GRFRfRVJSX05PVEZPVU5ELCBub2RlIGRvZXMgbm90IGhhdmUgdGhlIG5hbWVkIHByb3BlcnR5CisgKgktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiBzdGF0aWMgaW5saW5lIGludCBmZHRfc2V0cHJvcF9pbnBsYWNlX2NlbGwodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwKIAkJCQkJICAgY29uc3QgY2hhciAqbmFtZSwgdWludDMyX3QgdmFsKQogewpAQCAtNjY0LDcgKzcyNyw1NCBAQAogCXJldHVybiBmZHRfc2V0cHJvcF9pbnBsYWNlKGZkdCwgbm9kZW9mZnNldCwgbmFtZSwgJnZhbCwgc2l6ZW9mKHZhbCkpOwogfQogCisvKioKKyAqIGZkdF9ub3BfcHJvcGVydHkgLSByZXBsYWNlIGEgcHJvcGVydHkgd2l0aCBub3AgdGFncworICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQG5vZGVvZmZzZXQ6IG9mZnNldCBvZiB0aGUgbm9kZSB3aG9zZSBwcm9wZXJ0eSB0byBub3AKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBub3AKKyAqCisgKiBmZHRfbm9wX3Byb3BlcnR5KCkgd2lsbCByZXBsYWNlIGEgZ2l2ZW4gcHJvcGVydHkncyByZXByZXNlbnRhdGlvbgorICogaW4gdGhlIGJsb2Igd2l0aCBGRFRfTk9QIHRhZ3MsIGVmZmVjdGl2ZWx5IHJlbW92aW5nIGl0IGZyb20gdGhlCisgKiB0cmVlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHRlciBvbmx5IHRoZSBieXRlcyBpbiB0aGUgYmxvYiB3aGljaCBjb250YWluCisgKiB0aGUgcHJvcGVydHksIGFuZCB3aWxsIG5vdCBhbHRlciBvciBtb3ZlIGFueSBvdGhlciBwYXJ0IG9mIHRoZQorICogdHJlZS4KKyAqCisgKiByZXR1cm5zOgorICoJMCwgb24gc3VjY2VzcworICoJLUZEVF9FUlJfTk9URk9VTkQsIG5vZGUgZG9lcyBub3QgaGF2ZSB0aGUgbmFtZWQgcHJvcGVydHkKKyAqCS1GRFRfRVJSX0JBRE9GRlNFVCwgbm9kZW9mZnNldCBkaWQgbm90IHBvaW50IHRvIEZEVF9CRUdJTl9OT0RFIHRhZworICoJLUZEVF9FUlJfQkFETUFHSUMsCisgKgktRkRUX0VSUl9CQURWRVJTSU9OLAorICoJLUZEVF9FUlJfQkFEU1RBVEUsCisgKgktRkRUX0VSUl9CQURTVFJVQ1RVUkUsCisgKgktRkRUX0VSUl9UUlVOQ0FURUQsIHN0YW5kYXJkIG1lYW5pbmdzCisgKi8KIGludCBmZHRfbm9wX3Byb3BlcnR5KHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKioKKyAqIGZkdF9ub3Bfbm9kZSAtIHJlcGxhY2UgYSBub2RlIChzdWJ0cmVlKSB3aXRoIG5vcCB0YWdzCisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAbm9kZW9mZnNldDogb2Zmc2V0IG9mIHRoZSBub2RlIHRvIG5vcAorICoKKyAqIGZkdF9ub3Bfbm9kZSgpIHdpbGwgcmVwbGFjZSBhIGdpdmVuIG5vZGUncyByZXByZXNlbnRhdGlvbiBpbiB0aGUKKyAqIGJsb2IsIGluY2x1ZGluZyBhbGwgaXRzIHN1Ym5vZGVzLCBpZiBhbnksIHdpdGggRkRUX05PUCB0YWdzLAorICogZWZmZWN0aXZlbHkgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgdHJlZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgb25seSB0aGUgYnl0ZXMgaW4gdGhlIGJsb2Igd2hpY2ggY29udGFpbgorICogdGhlIG5vZGUgYW5kIGl0cyBwcm9wZXJ0aWVzIGFuZCBzdWJub2RlcywgYW5kIHdpbGwgbm90IGFsdGVyIG9yCisgKiBtb3ZlIGFueSBvdGhlciBwYXJ0IG9mIHRoZSB0cmVlLgorICoKKyAqIHJldHVybnM6CisgKgkwLCBvbiBzdWNjZXNzCisgKgktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiBpbnQgZmR0X25vcF9ub2RlKHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTY5MywyMyArODAzLDI2OCBAQAogaW50IGZkdF9vcGVuX2ludG8oY29uc3Qgdm9pZCAqZmR0LCB2b2lkICpidWYsIGludCBidWZzaXplKTsKIGludCBmZHRfcGFjayh2b2lkICpmZHQpOwogCisvKioKKyAqIGZkdF9hZGRfbWVtX3JzdiAtIGFkZCBvbmUgbWVtb3J5IHJlc2VydmUgbWFwIGVudHJ5CisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAYWRkcmVzcywgQHNpemU6IDY0LWJpdCB2YWx1ZXMgKG5hdGl2ZSBlbmRpYW4pCisgKgorICogQWRkcyBhIHJlc2VydmUgbWFwIGVudHJ5IHRvIHRoZSBnaXZlbiBibG9iIHJlc2VydmluZyBhIHJlZ2lvbiBhdAorICogYWRkcmVzcyBhZGRyZXNzIG9mIGxlbmd0aCBzaXplLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgZGF0YSBpbnRvIHRoZSByZXNlcnZlIG1hcCBhbmQgd2lsbAorICogdGhlcmVmb3JlIGNoYW5nZSB0aGUgaW5kZXhlcyBvZiBzb21lIGVudHJpZXMgaW4gdGhlIHRhYmxlLgorICoKKyAqIHJldHVybnM6CisgKgkwLCBvbiBzdWNjZXNzCisgKgktRkRUX0VSUl9OT1NQQUNFLCB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgZnJlZSBzcGFjZSBpbiB0aGUgYmxvYiB0bworICoJCWNvbnRhaW4gdGhlIG5ldyByZXNlcnZhdGlvbiBlbnRyeQorICoJLUZEVF9FUlJfQkFETUFHSUMsCisgKgktRkRUX0VSUl9CQURWRVJTSU9OLAorICoJLUZEVF9FUlJfQkFEU1RBVEUsCisgKgktRkRUX0VSUl9CQURTVFJVQ1RVUkUsCisgKgktRkRUX0VSUl9CQURMQVlPVVQsCisgKgktRkRUX0VSUl9UUlVOQ0FURUQsIHN0YW5kYXJkIG1lYW5pbmdzCisgKi8KIGludCBmZHRfYWRkX21lbV9yc3Yodm9pZCAqZmR0LCB1aW50NjRfdCBhZGRyZXNzLCB1aW50NjRfdCBzaXplKTsKKworLyoqCisgKiBmZHRfZGVsX21lbV9yc3YgLSByZW1vdmUgYSBtZW1vcnkgcmVzZXJ2ZSBtYXAgZW50cnkKKyAqIEBmZHQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0cmVlIGJsb2IKKyAqIEBuOiBlbnRyeSB0byByZW1vdmUKKyAqCisgKiBmZHRfZGVsX21lbV9yc3YoKSByZW1vdmVzIHRoZSBuLXRoIG1lbW9yeSByZXNlcnZlIG1hcCBlbnRyeSBmcm9tCisgKiB0aGUgYmxvYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGVsZXRlIGRhdGEgZnJvbSB0aGUgcmVzZXJ2YXRpb24gdGFibGUgYW5kIHdpbGwKKyAqIHRoZXJlZm9yZSBjaGFuZ2UgdGhlIGluZGV4ZXMgb2Ygc29tZSBlbnRyaWVzIGluIHRoZSB0YWJsZS4KKyAqCisgKiByZXR1cm5zOgorICoJMCwgb24gc3VjY2VzcworICoJLUZEVF9FUlJfTk9URk9VTkQsIHRoZXJlIGlzIG5vIGVudHJ5IG9mIHRoZSBnaXZlbiBpbmRleCAoaS5lLiB0aGVyZQorICoJCWFyZSBsZXNzIHRoYW4gbisxIHJlc2VydmUgbWFwIGVudHJpZXMpCisgKgktRkRUX0VSUl9CQURNQUdJQywKKyAqCS1GRFRfRVJSX0JBRFZFUlNJT04sCisgKgktRkRUX0VSUl9CQURTVEFURSwKKyAqCS1GRFRfRVJSX0JBRFNUUlVDVFVSRSwKKyAqCS1GRFRfRVJSX0JBRExBWU9VVCwKKyAqCS1GRFRfRVJSX1RSVU5DQVRFRCwgc3RhbmRhcmQgbWVhbmluZ3MKKyAqLwogaW50IGZkdF9kZWxfbWVtX3Jzdih2b2lkICpmZHQsIGludCBuKTsKIAorLyoqCisgKiBmZHRfc2V0X25hbWUgLSBjaGFuZ2UgdGhlIG5hbWUgb2YgYSBnaXZlbiBub2RlCisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAbm9kZW9mZnNldDogc3RydWN0dXJlIGJsb2NrIG9mZnNldCBvZiBhIG5vZGUKKyAqIEBuYW1lOiBuYW1lIHRvIGdpdmUgdGhlIG5vZGUKKyAqCisgKiBmZHRfc2V0X25hbWUoKSByZXBsYWNlcyB0aGUgbmFtZSAoaW5jbHVkaW5nIHVuaXQgYWRkcmVzcywgaWYgYW55KQorICogb2YgdGhlIGdpdmVuIG5vZGUgd2l0aCB0aGUgZ2l2ZW4gc3RyaW5nLiAgTk9URTogdGhpcyBmdW5jdGlvbiBjYW4ndAorICogZWZmaWNpZW50bHkgY2hlY2sgaWYgdGhlIG5ldyBuYW1lIGlzIHVuaXF1ZSBhbW9uZ3N0IHRoZSBnaXZlbgorICogbm9kZSdzIHNpYmxpbmdzOyByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkCisgKiB3aXRoIGEgbmFtZSBlcXVhbCB0byBvbmUgb2YgdGhlIGdpdmVuIG5vZGUncyBzaWJsaW5ncy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBpbnNlcnQgb3IgZGVsZXRlIGRhdGEgZnJvbSB0aGUgYmxvYiwgYW5kIHdpbGwKKyAqIHRoZXJlZm9yZSBjaGFuZ2UgdGhlIG9mZnNldHMgb2Ygc29tZSBleGlzdGluZyBub2Rlcy4KKyAqCisgKiByZXR1cm5zOgorICoJMCwgb24gc3VjY2VzcworICoJLUZEVF9FUlJfTk9TUEFDRSwgdGhlcmUgaXMgaW5zdWZmaWNpZW50IGZyZWUgc3BhY2UgaW4gdGhlIGJsb2IKKyAqCQl0byBjb250YWluIHRoZSBuZXcgbmFtZQorICoJLUZEVF9FUlJfQkFET0ZGU0VULCBub2Rlb2Zmc2V0IGRpZCBub3QgcG9pbnQgdG8gRkRUX0JFR0lOX05PREUgdGFnCisgKgktRkRUX0VSUl9CQURNQUdJQywKKyAqCS1GRFRfRVJSX0JBRFZFUlNJT04sCisgKgktRkRUX0VSUl9CQURTVEFURSwgc3RhbmRhcmQgbWVhbmluZ3MKKyAqLworaW50IGZkdF9zZXRfbmFtZSh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBjb25zdCBjaGFyICpuYW1lKTsKKworLyoqCisgKiBmZHRfc2V0cHJvcCAtIGNyZWF0ZSBvciBjaGFuZ2UgYSBwcm9wZXJ0eQorICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQG5vZGVvZmZzZXQ6IG9mZnNldCBvZiB0aGUgbm9kZSB3aG9zZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEB2YWw6IHBvaW50ZXIgdG8gZGF0YSB0byBzZXQgdGhlIHByb3BlcnR5IHZhbHVlIHRvCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlCisgKgorICogZmR0X3NldHByb3AoKSBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgcHJvcGVydHkgaW4gdGhlIGdpdmVuCisgKiBub2RlIHRvIHRoZSBnaXZlbiB2YWx1ZSBhbmQgbGVuZ3RoLCBjcmVhdGluZyB0aGUgcHJvcGVydHkgaWYgaXQKKyAqIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgaW5zZXJ0IG9yIGRlbGV0ZSBkYXRhIGZyb20gdGhlIGJsb2IsIGFuZCB3aWxsCisgKiB0aGVyZWZvcmUgY2hhbmdlIHRoZSBvZmZzZXRzIG9mIHNvbWUgZXhpc3Rpbmcgbm9kZXMuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX05PU1BBQ0UsIHRoZXJlIGlzIGluc3VmZmljaWVudCBmcmVlIHNwYWNlIGluIHRoZSBibG9iIHRvCisgKgkJY29udGFpbiB0aGUgbmV3IHByb3BlcnR5IHZhbHVlCisgKgktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0JBRExBWU9VVCwKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfQkFETEFZT1VULAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiBpbnQgZmR0X3NldHByb3Aodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY29uc3QgY2hhciAqbmFtZSwKIAkJY29uc3Qgdm9pZCAqdmFsLCBpbnQgbGVuKTsKKworLyoqCisgKiBmZHRfc2V0cHJvcF9jZWxsIC0gc2V0IGEgcHJvcGVydHkgdG8gYSBzaW5nbGUgY2VsbCB2YWx1ZQorICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQG5vZGVvZmZzZXQ6IG9mZnNldCBvZiB0aGUgbm9kZSB3aG9zZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEB2YWw6IDMyLWJpdCBpbnRlZ2VyIHZhbHVlIGZvciB0aGUgcHJvcGVydHkgKG5hdGl2ZSBlbmRpYW4pCisgKgorICogZmR0X3NldHByb3BfY2VsbCgpIHNldHMgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBwcm9wZXJ0eSBpbiB0aGUKKyAqIGdpdmVuIG5vZGUgdG8gdGhlIGdpdmVuIGNlbGwgdmFsdWUgKGNvbnZlcnRpbmcgdG8gYmlnLWVuZGlhbiBpZgorICogbmVjZXNzYXJ5KSwgb3IgY3JlYXRlcyBhIG5ldyBwcm9wZXJ0eSB3aXRoIHRoYXQgdmFsdWUgaWYgaXQgZG9lcworICogbm90IGFscmVhZHkgZXhpc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgaW5zZXJ0IG9yIGRlbGV0ZSBkYXRhIGZyb20gdGhlIGJsb2IsIGFuZCB3aWxsCisgKiB0aGVyZWZvcmUgY2hhbmdlIHRoZSBvZmZzZXRzIG9mIHNvbWUgZXhpc3Rpbmcgbm9kZXMuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX05PU1BBQ0UsIHRoZXJlIGlzIGluc3VmZmljaWVudCBmcmVlIHNwYWNlIGluIHRoZSBibG9iIHRvCisgKgkJY29udGFpbiB0aGUgbmV3IHByb3BlcnR5IHZhbHVlCisgKgktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0JBRExBWU9VVCwKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfQkFETEFZT1VULAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiBzdGF0aWMgaW5saW5lIGludCBmZHRfc2V0cHJvcF9jZWxsKHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICAgdWludDMyX3QgdmFsKQogewogCXZhbCA9IGNwdV90b19mZHQzMih2YWwpOwogCXJldHVybiBmZHRfc2V0cHJvcChmZHQsIG5vZGVvZmZzZXQsIG5hbWUsICZ2YWwsIHNpemVvZih2YWwpKTsKIH0KKworLyoqCisgKiBmZHRfc2V0cHJvcF9zdHJpbmcgLSBzZXQgYSBwcm9wZXJ0eSB0byBhIHN0cmluZyB2YWx1ZQorICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQG5vZGVvZmZzZXQ6IG9mZnNldCBvZiB0aGUgbm9kZSB3aG9zZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEBzdHI6IHN0cmluZyB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5CisgKgorICogZmR0X3NldHByb3Bfc3RyaW5nKCkgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIHByb3BlcnR5IGluIHRoZQorICogZ2l2ZW4gbm9kZSB0byB0aGUgZ2l2ZW4gc3RyaW5nIHZhbHVlICh1c2luZyB0aGUgbGVuZ3RoIG9mIHRoZQorICogc3RyaW5nIHRvIGRldGVybWluZSB0aGUgbmV3IGxlbmd0aCBvZiB0aGUgcHJvcGVydHkpLCBvciBjcmVhdGVzIGEKKyAqIG5ldyBwcm9wZXJ0eSB3aXRoIHRoYXQgdmFsdWUgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBpbnNlcnQgb3IgZGVsZXRlIGRhdGEgZnJvbSB0aGUgYmxvYiwgYW5kIHdpbGwKKyAqIHRoZXJlZm9yZSBjaGFuZ2UgdGhlIG9mZnNldHMgb2Ygc29tZSBleGlzdGluZyBub2Rlcy4KKyAqCisgKiByZXR1cm5zOgorICoJMCwgb24gc3VjY2VzcworICoJLUZEVF9FUlJfTk9TUEFDRSwgdGhlcmUgaXMgaW5zdWZmaWNpZW50IGZyZWUgc3BhY2UgaW4gdGhlIGJsb2IgdG8KKyAqCQljb250YWluIHRoZSBuZXcgcHJvcGVydHkgdmFsdWUKKyAqCS1GRFRfRVJSX0JBRE9GRlNFVCwgbm9kZW9mZnNldCBkaWQgbm90IHBvaW50IHRvIEZEVF9CRUdJTl9OT0RFIHRhZworICoJLUZEVF9FUlJfQkFETEFZT1VULAorICoJLUZEVF9FUlJfQkFETUFHSUMsCisgKgktRkRUX0VSUl9CQURWRVJTSU9OLAorICoJLUZEVF9FUlJfQkFEU1RBVEUsCisgKgktRkRUX0VSUl9CQURTVFJVQ1RVUkUsCisgKgktRkRUX0VSUl9CQURMQVlPVVQsCisgKgktRkRUX0VSUl9UUlVOQ0FURUQsIHN0YW5kYXJkIG1lYW5pbmdzCisgKi8KICNkZWZpbmUgZmR0X3NldHByb3Bfc3RyaW5nKGZkdCwgbm9kZW9mZnNldCwgbmFtZSwgc3RyKSBcCiAJZmR0X3NldHByb3AoKGZkdCksIChub2Rlb2Zmc2V0KSwgKG5hbWUpLCAoc3RyKSwgc3RybGVuKHN0cikrMSkKKworLyoqCisgKiBmZHRfZGVscHJvcCAtIGRlbGV0ZSBhIHByb3BlcnR5CisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAbm9kZW9mZnNldDogb2Zmc2V0IG9mIHRoZSBub2RlIHdob3NlIHByb3BlcnR5IHRvIG5vcAorICogQG5hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIG5vcAorICoKKyAqIGZkdF9kZWxfcHJvcGVydHkoKSB3aWxsIGRlbGV0ZSB0aGUgZ2l2ZW4gcHJvcGVydHkuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGRlbGV0ZSBkYXRhIGZyb20gdGhlIGJsb2IsIGFuZCB3aWxsIHRoZXJlZm9yZQorICogY2hhbmdlIHRoZSBvZmZzZXRzIG9mIHNvbWUgZXhpc3Rpbmcgbm9kZXMuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX05PVEZPVU5ELCBub2RlIGRvZXMgbm90IGhhdmUgdGhlIG5hbWVkIHByb3BlcnR5CisgKgktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0JBRExBWU9VVCwKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiBpbnQgZmR0X2RlbHByb3Aodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgorICogZmR0X2FkZF9zdWJub2RlX25hbWVsZW4gLSBjcmVhdGVzIGEgbmV3IG5vZGUgYmFzZWQgb24gc3Vic3RyaW5nCisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAcGFyZW50b2Zmc2V0OiBzdHJ1Y3R1cmUgYmxvY2sgb2Zmc2V0IG9mIGEgbm9kZQorICogQG5hbWU6IG5hbWUgb2YgdGhlIHN1Ym5vZGUgdG8gbG9jYXRlCisgKiBAbmFtZWxlbjogbnVtYmVyIG9mIGNoYXJhY3RlcnMgb2YgbmFtZSB0byBjb25zaWRlcgorICoKKyAqIElkZW50aWNhbCB0byBmZHRfYWRkX3N1Ym5vZGUoKSwgYnV0IHVzZSBvbmx5IHRoZSBmaXJzdCBuYW1lbGVuCisgKiBjaGFyYWN0ZXJzIG9mIG5hbWUgYXMgdGhlIG5hbWUgb2YgdGhlIG5ldyBub2RlLiAgVGhpcyBpcyB1c2VmdWwgZm9yCisgKiBjcmVhdGluZyBzdWJub2RlcyBiYXNlZCBvbiBhIHBvcnRpb24gb2YgYSBsYXJnZXIgc3RyaW5nLCBzdWNoIGFzIGEKKyAqIGZ1bGwgcGF0aC4KKyAqLwogaW50IGZkdF9hZGRfc3Vibm9kZV9uYW1lbGVuKHZvaWQgKmZkdCwgaW50IHBhcmVudG9mZnNldCwKIAkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbik7CisKKy8qKgorICogZmR0X2FkZF9zdWJub2RlIC0gY3JlYXRlcyBhIG5ldyBub2RlCisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAcGFyZW50b2Zmc2V0OiBzdHJ1Y3R1cmUgYmxvY2sgb2Zmc2V0IG9mIGEgbm9kZQorICogQG5hbWU6IG5hbWUgb2YgdGhlIHN1Ym5vZGUgdG8gbG9jYXRlCisgKgorICogZmR0X2FkZF9zdWJub2RlKCkgY3JlYXRlcyBhIG5ldyBub2RlIGFzIGEgc3Vibm9kZSBvZiB0aGUgbm9kZSBhdAorICogc3RydWN0dXJlIGJsb2NrIG9mZnNldCBwYXJlbnRvZmZzZXQsIHdpdGggdGhlIGdpdmVuIG5hbWUgKHdoaWNoCisgKiBzaG91bGQgaW5jbHVkZSB0aGUgdW5pdCBhZGRyZXNzLCBpZiBhbnkpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgZGF0YSBpbnRvIHRoZSBibG9iLCBhbmQgd2lsbCB0aGVyZWZvcmUKKyAqIGNoYW5nZSB0aGUgb2Zmc2V0cyBvZiBzb21lIGV4aXN0aW5nIG5vZGVzLgorCisgKiByZXR1cm5zOgorICoJc3RydWN0dXJlIGJsb2NrIG9mZnNldCBvZiB0aGUgY3JlYXRlZCBub2RlZXF1ZXN0ZWQgc3Vibm9kZSAoPj0wKSwgb24gc3VjY2VzcworICoJLUZEVF9FUlJfTk9URk9VTkQsIGlmIHRoZSByZXF1ZXN0ZWQgc3Vibm9kZSBkb2VzIG5vdCBleGlzdAorICoJLUZEVF9FUlJfQkFET0ZGU0VULCBpZiBwYXJlbnRvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBhbiBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0VYSVNUUywgaWYgdGhlIG5vZGUgYXQgcGFyZW50b2Zmc2V0IGFscmVhZHkgaGFzIGEgc3Vibm9kZSBvZgorICoJCXRoZSBnaXZlbiBuYW1lCisgKgktRkRUX0VSUl9OT1NQQUNFLCBpZiB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgZnJlZSBzcGFjZSBpbiB0aGUKKyAqCQlibG9iIHRvIGNvbnRhaW4gdGhlIG5ldyBub2RlCisgKgktRkRUX0VSUl9OT1NQQUNFCisgKgktRkRUX0VSUl9CQURMQVlPVVQKKyAqICAgICAgLUZEVF9FUlJfQkFETUFHSUMsCisgKgktRkRUX0VSUl9CQURWRVJTSU9OLAorICoJLUZEVF9FUlJfQkFEU1RBVEUsCisgKgktRkRUX0VSUl9CQURTVFJVQ1RVUkUsCisgKgktRkRUX0VSUl9UUlVOQ0FURUQsIHN0YW5kYXJkIG1lYW5pbmdzLgorICovCiBpbnQgZmR0X2FkZF9zdWJub2RlKHZvaWQgKmZkdCwgaW50IHBhcmVudG9mZnNldCwgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgorICogZmR0X2RlbF9ub2RlIC0gZGVsZXRlIGEgbm9kZSAoc3VidHJlZSkKKyAqIEBmZHQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0cmVlIGJsb2IKKyAqIEBub2Rlb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIG5vZGUgdG8gbm9wCisgKgorICogZmR0X2RlbF9ub2RlKCkgd2lsbCByZW1vdmUgdGhlIGdpdmVuIG5vZGUsIGluY2x1ZGluZyBhbGwgaXRzCisgKiBzdWJub2RlcyBpZiBhbnksIGZyb20gdGhlIGJsb2IuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGRlbGV0ZSBkYXRhIGZyb20gdGhlIGJsb2IsIGFuZCB3aWxsIHRoZXJlZm9yZQorICogY2hhbmdlIHRoZSBvZmZzZXRzIG9mIHNvbWUgZXhpc3Rpbmcgbm9kZXMuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX0JBRE9GRlNFVCwgbm9kZW9mZnNldCBkaWQgbm90IHBvaW50IHRvIEZEVF9CRUdJTl9OT0RFIHRhZworICoJLUZEVF9FUlJfQkFETEFZT1VULAorICoJLUZEVF9FUlJfQkFETUFHSUMsCisgKgktRkRUX0VSUl9CQURWRVJTSU9OLAorICoJLUZEVF9FUlJfQkFEU1RBVEUsCisgKgktRkRUX0VSUl9CQURTVFJVQ1RVUkUsCisgKgktRkRUX0VSUl9UUlVOQ0FURUQsIHN0YW5kYXJkIG1lYW5pbmdzCisgKi8KIGludCBmZHRfZGVsX25vZGUodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2xpYmZkdF9pbnRlcm5hbC5oIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2xpYmZkdF9pbnRlcm5hbC5oCmluZGV4IDFlNjA5MzYuLjQ2ZWI5M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9saWJmZHRfaW50ZXJuYWwuaAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvbGliZmR0X2ludGVybmFsLmgKQEAgLTUyLDM4ICs1Miw0NCBAQAogICovCiAjaW5jbHVkZSA8ZmR0Lmg+CiAKLSNkZWZpbmUgQUxJR04oeCwgYSkJKCgoeCkgKyAoYSkgLSAxKSAmIH4oKGEpIC0gMSkpCi0jZGVmaW5lIFBBTElHTihwLCBhKQkoKHZvaWQgKilBTElHTigodW5zaWduZWQgbG9uZykocCksIChhKSkpCisjZGVmaW5lIEZEVF9BTElHTih4LCBhKQkJKCgoeCkgKyAoYSkgLSAxKSAmIH4oKGEpIC0gMSkpCisjZGVmaW5lIEZEVF9UQUdBTElHTih4KQkJKEZEVF9BTElHTigoeCksIEZEVF9UQUdTSVpFKSkKIAotI2RlZmluZSBtZW1lcShwLCBxLCBuKQkobWVtY21wKChwKSwgKHEpLCAobikpID09IDApCi0jZGVmaW5lIHN0cmVxKHAsIHEpCShzdHJjbXAoKHApLCAocSkpID09IDApCisjZGVmaW5lIEZEVF9DSEVDS19IRUFERVIoZmR0KSBcCisJeyBcCisJCWludCBlcnI7IFwKKwkJaWYgKChlcnIgPSBmZHRfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApIFwKKwkJCXJldHVybiBlcnI7IFwKKwl9CiAKIHVpbnQzMl90IF9mZHRfbmV4dF90YWcoY29uc3Qgdm9pZCAqZmR0LCBpbnQgc3RhcnRvZmZzZXQsIGludCAqbmV4dG9mZnNldCk7CitpbnQgX2ZkdF9jaGVja19ub2RlX29mZnNldChjb25zdCB2b2lkICpmZHQsIGludCBvZmZzZXQpOwogY29uc3QgY2hhciAqX2ZkdF9maW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHJ0YWIsIGludCB0YWJzaXplLCBjb25zdCBjaGFyICpzKTsKIGludCBfZmR0X25vZGVfZW5kX29mZnNldCh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0KTsKIAogc3RhdGljIGlubGluZSBjb25zdCB2b2lkICpfZmR0X29mZnNldF9wdHIoY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0KQogewotCXJldHVybiBmZHQgKyBmZHRfb2ZmX2R0X3N0cnVjdChmZHQpICsgb2Zmc2V0OworCXJldHVybiAoY29uc3QgY2hhciAqKWZkdCArIGZkdF9vZmZfZHRfc3RydWN0KGZkdCkgKyBvZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqX2ZkdF9vZmZzZXRfcHRyX3codm9pZCAqZmR0LCBpbnQgb2Zmc2V0KQogewotCXJldHVybiAodm9pZCAqKV9mZHRfb2Zmc2V0X3B0cihmZHQsIG9mZnNldCk7CisJcmV0dXJuICh2b2lkICopKHVpbnRwdHJfdClfZmR0X29mZnNldF9wdHIoZmR0LCBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSAqX2ZkdF9tZW1fcnN2KGNvbnN0IHZvaWQgKmZkdCwgaW50IG4pCiB7CiAJY29uc3Qgc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5ICpyc3ZfdGFibGUgPQotCQlmZHQgKyBmZHRfb2ZmX21lbV9yc3ZtYXAoZmR0KTsKKwkJKGNvbnN0IHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSAqKQorCQkoKGNvbnN0IGNoYXIgKilmZHQgKyBmZHRfb2ZmX21lbV9yc3ZtYXAoZmR0KSk7CiAKIAlyZXR1cm4gcnN2X3RhYmxlICsgbjsKIH0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5ICpfZmR0X21lbV9yc3Zfdyh2b2lkICpmZHQsIGludCBuKQogewotCXJldHVybiAodm9pZCAqKV9mZHRfbWVtX3JzdihmZHQsIG4pOworCXJldHVybiAodm9pZCAqKSh1aW50cHRyX3QpX2ZkdF9tZW1fcnN2KGZkdCwgbik7CiB9CiAKLSNkZWZpbmUgU1dfTUFHSUMJCSh+RkRUX01BR0lDKQorI2RlZmluZSBGRFRfU1dfTUFHSUMJCSh+RkRUX01BR0lDKQogCiAjZW5kaWYgLyogX0xJQkZEVF9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHRfZW52LmggYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHRfZW52LmgKaW5kZXggYTRiMGZjOS4uYzg5ZmRiMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0X2Vudi5oCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdF9lbnYuaApAQCAtNiw2ICs2LDcgQEAKIAogdHlwZWRlZiB1MzIgdWludDMyX3Q7CiB0eXBlZGVmIHU2NCB1aW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50cHRyX3Q7CiAKICNkZWZpbmUgZmR0MTZfdG9fY3B1KHgpCQkoeCkKICNkZWZpbmUgY3B1X3RvX2ZkdDE2KHgpCQkoeCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIgYi9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCmluZGV4IDk2NWMyMzcuLmVlMGRjNDEgMTAwNzU1Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgpAQCAtMzA3LDcgKzMwNyw5IEBACiAjIHBvc3QtcHJvY2Vzc2luZyBuZWVkZWQgZm9yIHNvbWUgcGxhdGZvcm1zCiBjYXNlICIkcGxhdGZvcm0iIGluCiBwc2VyaWVzfGNocnApCi0gICAgJG9iamJpbi9hZGRub3RlICIkb2ZpbGUiCisgICAgJHtDUk9TU31vYmpjb3B5IC1PIGJpbmFyeSAtaiAuZmFrZWVsZiAiJGtlcm5lbCIgIiRvZmlsZSIucnBhbm90ZQorICAgICRvYmpiaW4vYWRkbm90ZSAiJG9maWxlIiAiJG9maWxlIi5ycGFub3RlCisgICAgcm0gLXIgIiRvZmlsZSIucnBhbm90ZQogICAgIDs7CiBjb2ZmKQogICAgICR7Q1JPU1N9b2JqY29weSAtTyBhaXhjb2ZmLXJzNjAwMCAtLXNldC1zdGFydCAiJGVudHJ5IiAiJG9maWxlIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGY0NjA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZjb25maWcKQEAgLTAsMCArMSw3NjcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzUKKyMgV2VkIE9jdCAgMSAxNTo1NDo1NyAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CitDT05GSUdfNDR4PXkKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorQ09ORklHXzR4eD15CitDT05GSUdfQk9PS0U9eQorQ09ORklHX1BURV82NEJJVD15CitDT05GSUdfUEhZU182NEJJVD15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSX05BVElWRT15CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0NMSyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKK0NPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTTQ0MEVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUVVPSUEgaXMgbm90IHNldAorIyBDT05GSUdfVEFJU0hBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAorIyBDT05GSUdfUkFJTklFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIRVM9eQorIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAorIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQorQ09ORklHXzQ2MEVYPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorQ09ORklHX1JFU09VUkNFU182NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSIiCitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR180eHhfU09DPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj15CitDT05GSUdfUFJPQ19FVkVOVFM9eQorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCitDT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAorIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDX1RBSD15CitDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0PXkKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19EQUI9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKaW5kZXggNWU2NzgwYS4uMGIxZmEyMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZwpAQCAtMTY0LDExICsxNjQsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCmluZGV4IDIwMjgzMzcuLmI3ZWFlMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCkBAIC0xNjMsMTEgKzE2MywxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKaW5kZXggZGQ4MGViMC4uYjBhMjdhNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKQEAgLTE2MywxMSArMTYzLDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfbWRzX2RlZmNvbmZpZwppbmRleCBiZGY1MGM4Li5hZDgyNWJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfbWRzX2RlZmNvbmZpZwpAQCAtMTYzLDExICsxNjMsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnCmluZGV4IDRlZWY4YzkuLjM4MjY3NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnCkBAIC0xNjMsMTEgKzE2MywxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcKaW5kZXggOGQ2NTEzOS4uOTBhYWIzNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcKQEAgLTE2MywxMSArMTYzLDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcKaW5kZXggYThhZmEzOS4uNzQ1OGEyNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCkBAIC0xNjMsMTEgKzE2MywxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcKaW5kZXggMjRjMzIwYS4uMWE5Mjc5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcKQEAgLTE2MywxMSArMTYzLDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZwppbmRleCBlMDI5ZTllLi4wM2Q4Y2VkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZwpAQCAtMTYzLDExICsxNjMsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CkBAIC0zODMsNyArMzgzLDg0IEBACiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZwppbmRleCA3ZDY3NGJlLi5jZGY4NDE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZwpAQCAtMTY0LDExICsxNjQsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCmluZGV4IGRlNDcyMDIuLjk3ZTAyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCkBAIC0xNjQsMTEgKzE2NCwxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcKaW5kZXggZThkMmQ2OS4uNWFjMzMwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcKQEAgLTE2NCwxMSArMTY0LDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKaW5kZXggOTI0NWE2Ny4uYzM1OWNjMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCkBAIC0xNjIsMTEgKzE2MiwxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMmQ3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTY1NyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2LXJjNQorIyBXZWQgSnVuIDExIDEyOjA2OjUzIDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfQUxUSVZFQz15CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0yCitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19MT0NLQlJFQUs9eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CitDT05GSUdfR0VORVJJQ19UQlNZTkM9eQorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKK0NPTkZJR19SRUxBWT15CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX1NUT1BfTUFDSElORT15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKK0NPTkZJR19QUENfTVVMVElQTEFURk9STT15CitDT05GSUdfQ0xBU1NJQzMyPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODZ4eD15CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg2NDFfSFBDTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NjQxRCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NjEwX0hQQ0QgaXMgbm90IHNldAorQ09ORklHX0dFRl9TQkM2MTA9eQorQ09ORklHX01QQzg2NDE9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CitDT05GSUdfSFo9MTAwMAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX01JU0M9bQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCisjIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CitDT05GSUdfUENJRVBPUlRCVVM9eQorQ09ORklHX1BDSUVBRVI9eQorIyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorQ09ORklHX1BDSV9ERUJVRz15CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorQ09ORklHX0hBU19SQVBJRElPPXkKKyMgQ09ORklHX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPW0KK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKK0NPTkZJR19JUFY2X1RVTk5FTD1tCisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CitDT05GSUdfQlJJREdFX05FVEZJTFRFUj15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUggaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQNl9ORl9RVUVVRT1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX0hMPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCisjIENPTkZJR19JUDZfTkZfTUFUQ0hfQUggaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9SQVc9bQorCisjCisjIEJyaWRnZTogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorQ09ORklHX1RJUEM9bQorIyBDT05GSUdfVElQQ19BRFZBTkNFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BVE09bQorQ09ORklHX0FUTV9DTElQPW0KKyMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAgaXMgbm90IHNldAorQ09ORklHX0FUTV9MQU5FPW0KK0NPTkZJR19BVE1fTVBPQT1tCitDT05GSUdfQVRNX0JSMjY4ND1tCisjIENPTkZJR19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19CUklER0U9bQorQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XQU5fUk9VVEVSPW0KK0NPTkZJR19ORVRfU0NIRUQ9eQorCisjCisjIFF1ZXVlaW5nL1NjaGVkdWxpbmcKKyMKK0NPTkZJR19ORVRfU0NIX0NCUT1tCitDT05GSUdfTkVUX1NDSF9IVEI9bQorQ09ORklHX05FVF9TQ0hfSEZTQz1tCitDT05GSUdfTkVUX1NDSF9BVE09bQorQ09ORklHX05FVF9TQ0hfUFJJTz1tCisjIENPTkZJR19ORVRfU0NIX1JSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIX1JFRD1tCitDT05GSUdfTkVUX1NDSF9TRlE9bQorQ09ORklHX05FVF9TQ0hfVEVRTD1tCitDT05GSUdfTkVUX1NDSF9UQkY9bQorQ09ORklHX05FVF9TQ0hfR1JFRD1tCitDT05GSUdfTkVUX1NDSF9EU01BUks9bQorQ09ORklHX05FVF9TQ0hfTkVURU09bQorCisjCisjIENsYXNzaWZpY2F0aW9uCisjCitDT05GSUdfTkVUX0NMUz15CisjIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQorQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKK0NPTkZJR19ORVRfQ0xTX0ZXPW0KK0NPTkZJR19ORVRfQ0xTX1UzMj1tCisjIENPTkZJR19DTFNfVTMyX1BFUkYgaXMgbm90IHNldAorIyBDT05GSUdfQ0xTX1UzMl9NQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JTVlA9bQorQ09ORklHX05FVF9DTFNfUlNWUDY9bQorIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19BQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfRklGTz15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCitDT05GSUdfTkVUX1BLVEdFTj1tCisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfRklCX1JVTEVTPXkKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CisjIENPTkZJR19NVERfQ0ZJX05PU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9eQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9QTVA9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1NJTD15CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19CT05ESU5HPW0KKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01BUlZFTExfUEhZPXkKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX0dGQVJfTkFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fRFJJVkVSUz15CisjIENPTkZJR19BVE1fRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTEFOQUkgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0VOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRklSRVNUUkVBTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fWkFUTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTklDU1RBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSURUNzcyNTIgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0FNQkFTU0FET1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0hPUklaT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9GT1JFMjAwRV9NQVlCRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSEUgaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBPRT1tCitDT05GSUdfUFBQT0FUTT1tCisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTEhDPW0KK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRDT05TT0xFPXkKKyMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CitDT05GSUdfTkVUUE9MTF9UUkFQPXkKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworQ09ORklHX0RTMTY4Mj15CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0xNOTA9eQorQ09ORklHX1NFTlNPUlNfTE05Mj15CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9bQorQ09ORklHX1JUQ19DTEFTUz1tCisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CisjIENPTkZJR19SVENfSU5URl9QUk9DIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1BQQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19YQVRUUj15CitDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9bQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT1tCitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorQ09ORklHX0RFQlVHR0VSPXkKKyMgQ09ORklHX1hNT04gaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWT15CitDT05GSUdfU0VDVVJJVFlfTkVUV09SSz15CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0gaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUz15CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTAKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTlVMTD1tCisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk4YzZlZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE0OTcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzQKKyMgVGh1IEF1ZyAyMSAwMDo1MjoxMCAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR182eHg9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorQ09ORklHX0FMVElWRUM9eQorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKK0NPTkZJR19ISUJFUk5BVEVfMzI9eQorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CisjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfUENTUEtSX1BMQVRGT1JNPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0NMSyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9ERUFETElORT15CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKK0NPTkZJR19QUENfTVVMVElQTEFURk9STT15CitDT05GSUdfQ0xBU1NJQzMyPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODZ4eD15CisjIENPTkZJR19NUEM4NjQxX0hQQ04gaXMgbm90IHNldAorIyBDT05GSUdfU0JDODY0MUQgaXMgbm90IHNldAorQ09ORklHX01QQzg2MTBfSFBDRD15CitDT05GSUdfTVBDODYxMD15CisjIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX05BVElWRT15CisjIENPTkZJR19VREJHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorQ09ORklHX1BQQ19JODI1OT15CitDT05GSUdfUFBDX1JUQVM9eQorIyBDT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19SVEFTX1BST0M9eQorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01QQzEwNj15CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19QUEM2MDFfU1lOQ19GSVggaXMgbm90IHNldAorIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKK0NPTkZJR19GU0xfVUxJMTU3NT15CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKK0NPTkZJR19ISUdITUVNPXkKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorQ09ORklHX0haPTEwMDAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMgorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfSVNBIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorQ09ORklHX1BDSUVQT1JUQlVTPXkKK0NPTkZJR19QQ0lFQUVSPXkKKyMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKK0NPTkZJR19QQ0lfREVCVUc9eQorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPXkKK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9GU0xfRUxCQz15CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDX0ZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKKyMgQ09ORklHX0JMS19ERVZfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CitDT05GSUdfU0NTSV9UR1Q9eQorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NRVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTUFDNTNDOTQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9QTVA9eQorQ09ORklHX1NBVEFfQUhDST15CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CitDT05GSUdfUEFUQV9BTEk9eQorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPXkKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JNQUMgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1RVTElQPXkKKyMgQ09ORklHX0RFMjEwNFggaXMgbm90IHNldAorIyBDT05GSUdfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfREU0WDUgaXMgbm90IHNldAorIyBDT05GSUdfV0lOQk9ORF84NDAgaXMgbm90IHNldAorIyBDT05GSUdfRE05MTAyIGlzIG5vdCBzZXQKK0NPTkZJR19VTEk1MjZYPXkKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9QTUFDWklMT0cgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSVFfUEFORUwgaXMgbm90IHNldAorIyBDT05GSUdfSFZDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgTWFjIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfSFlEUkEgaXMgbm90IHNldAorQ09ORklHX0kyQ19QT1dFUk1BQz15CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfT0YgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTEFUSU5VTSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WQUxLWVJJRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DVDY1NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAorIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CitDT05GSUdfRkJfRlNMX0RJVT15CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BDST15CisjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAorQ09ORklHX1NORF9QUEM9eQorIyBDT05GSUdfU05EX1BPV0VSTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BT0EgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0M9eQorQ09ORklHX1NORF9TT0NfTVBDODYxMD15CitDT05GSUdfU05EX1NPQ19NUEM4NjEwX0hQQ0Q9eQorQ09ORklHX1NORF9TT0NfQ1M0MjcwPXkKK0NPTkZJR19TTkRfU09DX0NTNDI3MF9WRDMzX0VSUkFUQT15CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0NNT1M9eQorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9eQorIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CitDT05GSUdfTERNX1BBUlRJVElPTj15CisjIENPTkZJR19MRE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX1QxMERJRj15CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX1NISVJRPXkKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hNT04gaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorQ09ORklHX1BQQ19MSUJfUkhFQVA9eQorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NGRkZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKQEAgLTAsMCArMSwxNjY2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM0CisjIFRodSBBdWcgMjEgMDA6NTI6MTEgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR19BTFRJVkVDPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTIKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKK0NPTkZJR19HRU5FUklDX1RCU1lOQz15CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVQ9eQorIyBDT05GSUdfQVVESVRTWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19QQ1NQS1JfUExBVEZPUk09eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CisjIENPTkZJR19IQVZFX0NMSyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKK0NPTkZJR19DTEFTU0lDMzI9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAorQ09ORklHX1BQQ184Nnh4PXkKK0NPTkZJR19NUEM4NjQxX0hQQ049eQorIyBDT05GSUdfU0JDODY0MUQgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODYxMF9IUENEIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NjQxPXkKK0NPTkZJR19QUENfTkFUSVZFPXkKKyMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0k4MjU5PXkKK0NPTkZJR19QUENfUlRBUz15CisjIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldAorQ09ORklHX1JUQVNfUFJPQz15CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVBDMTA2PXkKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQzYwMV9TWU5DX0ZJWCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVUgaXMgbm90IHNldAorQ09ORklHX0ZTTF9VTEkxNTc1PXkKKworIworIyBLZXJuZWwgb3B0aW9ucworIworQ09ORklHX0hJR0hNRU09eQorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CitDT05GSUdfSFo9MTAwMAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9NSVNDPW0KKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX0NQVSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19JU0EgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19IQVNfUkFQSURJTz15CisjIENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9eQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9bQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPXkKK0NPTkZJR19ORVRfSVBHUkU9eQorQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQorQ09ORklHX0lQX01ST1VURT15CitDT05GSUdfSVBfUElNU01fVjE9eQorQ09ORklHX0lQX1BJTVNNX1YyPXkKK0NPTkZJR19BUlBEPXkKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9eQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19GTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPXkKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CisjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9HR0lORz15CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NRVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTUFDNTNDOTQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9QTVA9eQorQ09ORklHX1NBVEFfQUhDST15CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CitDT05GSUdfUEFUQV9BTEk9eQorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPXkKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorQ09ORklHX1ZJVEVTU0VfUEhZPXkKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX01BQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQk1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0IgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX1BNQUNaSUxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfQlJJUV9QQU5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVkNfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKK0NPTkZJR19OVlJBTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgTWFjIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfSFlEUkEgaXMgbm90IHNldAorQ09ORklHX0kyQ19QT1dFUk1BQz15CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0NPUkU9bQorQ09ORklHX1ZJREVPX01FRElBPW0KKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVI9bQorIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQorQ09ORklHX0RWQl9DQVBUVVJFX0RSSVZFUlM9eQorCisjCisjIFN1cHBvcnRlZCBTQUE3MTQ2IGJhc2VkIFBDSSBBZGFwdGVycworIworIyBDT05GSUdfVFRQQ0lfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9CVURHRVRfQ09SRSBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycworIworIyBDT05GSUdfRFZCX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFRVU0JfQlVER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVFVTQl9ERUMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NJTkVSR1lUMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU0lBTk9fU01TMVhYWCBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIEZsZXhDb3BJSSAoQjJDMikgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1AgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBCVDg3OCBBZGFwdGVycworIworCisjCisjIFN1cHBvcnRlZCBQbHV0bzIgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9QTFVUTzIgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCisjCisKKyMKKyMgQ3VzdG9taXNlIERWQiBGcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9GRV9DVVNUT01JU0UgaXMgbm90IHNldAorCisjCisjIERWQi1TIChzYXRlbGxpdGUpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX0NYMjQxMTAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NYMjQxMjMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX01UMzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TNUgxNDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TVFYwMjk5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREE4MDgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDA4NiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVkVTMVg5MyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFVORVJfSVREMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBODI2WCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFVBNjEwMCBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9TUDg4NzAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NQODg3WCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ1gyMjcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ1gyMjcwMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRFJYMzk3WEQgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0w2NDc4MSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBMTAwNFggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX05YVDYwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX01UMzUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9aTDEwMzUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9ESUIzMDAwTUIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RJQjMwMDBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRElCNzAwME0gaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RJQjcwMDBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDA0OCBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9WRVMxODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBMTAwMjMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NUVjAyOTcgaXMgbm90IHNldAorCisjCisjIEFUU0MgKE5vcnRoIEFtZXJpY2FuL0tvcmVhbiBUZXJyZXN0cmlhbC9DYWJsZSBEVFYpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX05YVDIwMFggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX09SNTEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX09SNTExMzIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0JDTTM1MTAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0xHRFQzMzBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TNUgxNDA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9BVTg1MjIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1M1SDE0MTEgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgdGVycmVzdHJpYWwgb25seSB0dW5lcnMvUExMCisjCisjIENPTkZJR19EVkJfUExMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwIGlzIG5vdCBzZXQKKworIworIyBTRUMgY29udHJvbCBkZXZpY2VzIGZvciBEVkItUworIworIyBDT05GSUdfRFZCX0xOQlAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfSVNMNjQwNSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfSVNMNjQyMSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19TT1VORD15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZNQVNURVI9eQorQ09ORklHX1NORF9BQzk3X0NPREVDPXkKK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BDST15CisjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAorQ09ORklHX1NORF9JTlRFTDhYMD15CisjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUFBDPXkKKyMgQ09ORklHX1NORF9QT1dFUk1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQU9BIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVVNCPXkKKyMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPXkKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0lFUlJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQ01PUz15CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz15CisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfUlcgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworQ09ORklHX0FERlNfRlM9bQorIyBDT05GSUdfQURGU19GU19SVyBpcyBub3Qgc2V0CitDT05GSUdfQUZGU19GUz1tCitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KK0NPTkZJR19CRUZTX0ZTPW0KKyMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0JGU19GUz1tCitDT05GSUdfRUZTX0ZTPW0KK0NPTkZJR19DUkFNRlM9eQorQ09ORklHX1ZYRlNfRlM9bQorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCitDT05GSUdfUU5YNEZTX0ZTPW0KKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWX0ZTPW0KK0NPTkZJR19VRlNfRlM9bQorIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTkZTRD15CisjIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTUFDX1BBUlRJVElPTj15CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX1QxMERJRj15CitDT05GSUdfQ1JDX0lUVV9UPW0KK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwMGY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTQ4MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNAorIyBUaHUgQXVnIDIxIDAwOjUyOjE1IDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfQUxUSVZFQz15CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0yCitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CitDT05GSUdfUkVMQVk9eQorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfUENTUEtSX1BMQVRGT1JNPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX1NUT1BfTUFDSElORT15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKK0NPTkZJR19QUENfTVVMVElQTEFURk9STT15CitDT05GSUdfQ0xBU1NJQzMyPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODZ4eD15CisjIENPTkZJR19NUEM4NjQxX0hQQ04gaXMgbm90IHNldAorQ09ORklHX1NCQzg2NDFEPXkKKyMgQ09ORklHX01QQzg2MTBfSFBDRCBpcyBub3Qgc2V0CitDT05GSUdfTVBDODY0MT15CitDT05GSUdfUFBDX05BVElWRT15CisjIENPTkZJR19VREJHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorQ09ORklHX1BQQ19JODI1OT15CitDT05GSUdfUFBDX1JUQVM9eQorIyBDT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19SVEFTX1BST0M9eQorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01QQzEwNj15CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19QUEM2MDFfU1lOQ19GSVggaXMgbm90IHNldAorIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9NSVNDPW0KKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX0NQVSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfQUxMX0NQVVM9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCisjIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19JU0EgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CitDT05GSUdfUENJRVBPUlRCVVM9eQorQ09ORklHX1BDSUVBRVI9eQorIyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9bQorQ09ORklHX05FVF9LRVk9bQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQorQ09ORklHX0lQX01ST1VURT15CitDT05GSUdfSVBfUElNU01fVjE9eQorQ09ORklHX0lQX1BJTVNNX1YyPXkKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorQ09ORklHX0lQVjZfVFVOTkVMPW0KKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKK0NPTkZJR19CUklER0VfTkVURklMVEVSPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEggaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9UVEwgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1JBVz1tCisjIENPTkZJR19JUF9ORl9TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfTUFUQ0hfTUggaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9ITCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX1JBVz1tCisjIENPTkZJR19JUDZfTkZfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIEJyaWRnZTogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorQ09ORklHX1RJUEM9bQorIyBDT05GSUdfVElQQ19BRFZBTkNFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BVE09bQorQ09ORklHX0FUTV9DTElQPW0KKyMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAgaXMgbm90IHNldAorQ09ORklHX0FUTV9MQU5FPW0KK0NPTkZJR19BVE1fTVBPQT1tCitDT05GSUdfQVRNX0JSMjY4ND1tCisjIENPTkZJR19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19TVFA9bQorQ09ORklHX0JSSURHRT1tCitDT05GSUdfVkxBTl84MDIxUT1tCisjIENPTkZJR19WTEFOXzgwMjFRX0dWUlAgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XQU5fUk9VVEVSPW0KK0NPTkZJR19ORVRfU0NIRUQ9eQorCisjCisjIFF1ZXVlaW5nL1NjaGVkdWxpbmcKKyMKK0NPTkZJR19ORVRfU0NIX0NCUT1tCitDT05GSUdfTkVUX1NDSF9IVEI9bQorQ09ORklHX05FVF9TQ0hfSEZTQz1tCitDT05GSUdfTkVUX1NDSF9BVE09bQorQ09ORklHX05FVF9TQ0hfUFJJTz1tCitDT05GSUdfTkVUX1NDSF9SRUQ9bQorQ09ORklHX05FVF9TQ0hfU0ZRPW0KK0NPTkZJR19ORVRfU0NIX1RFUUw9bQorQ09ORklHX05FVF9TQ0hfVEJGPW0KK0NPTkZJR19ORVRfU0NIX0dSRUQ9bQorQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KK0NPTkZJR19ORVRfU0NIX05FVEVNPW0KKworIworIyBDbGFzc2lmaWNhdGlvbgorIworQ09ORklHX05FVF9DTFM9eQorIyBDT05GSUdfTkVUX0NMU19CQVNJQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KK0NPTkZJR19ORVRfQ0xTX1JPVVRFND1tCitDT05GSUdfTkVUX0NMU19ST1VURT15CitDT05GSUdfTkVUX0NMU19GVz1tCitDT05GSUdfTkVUX0NMU19VMzI9bQorIyBDT05GSUdfQ0xTX1UzMl9QRVJGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NMU19VMzJfTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19SU1ZQPW0KK0NPTkZJR19ORVRfQ0xTX1JTVlA2PW0KKyMgQ09ORklHX05FVF9DTFNfRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfSU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIX0ZJRk89eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworQ09ORklHX05FVF9QS1RHRU49bQorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorIyBDT05GSUdfTVREX0NGSV9OT1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19GTE9QUFkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0xJTkVBUj15CitDT05GSUdfTURfUkFJRDA9eQorQ09ORklHX01EX1JBSUQxPXkKK0NPTkZJR19NRF9SQUlEMTA9eQorIyBDT05GSUdfTURfUkFJRDQ1NiBpcyBub3Qgc2V0CitDT05GSUdfTURfTVVMVElQQVRIPXkKK0NPTkZJR19NRF9GQVVMVFk9eQorQ09ORklHX0JMS19ERVZfRE09eQorIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RNX0NSWVBUPXkKK0NPTkZJR19ETV9TTkFQU0hPVD15CitDT05GSUdfRE1fTUlSUk9SPXkKK0NPTkZJR19ETV9aRVJPPXkKKyMgQ09ORklHX0RNX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19CT05ESU5HPW0KKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfQlJPQURDT01fUEhZPXkKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfTUFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfR0lBTkZBUj15CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fRFJJVkVSUz15CisjIENPTkZJR19BVE1fRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTEFOQUkgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0VOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRklSRVNUUkVBTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fWkFUTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTklDU1RBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSURUNzcyNTIgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0FNQkFTU0FET1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0hPUklaT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9GT1JFMjAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSEUgaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBPRT1tCitDT05GSUdfUFBQT0FUTT1tCisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTEhDPW0KK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorQ09ORklHX05FVENPTlNPTEU9eQorIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKK0NPTkZJR19ORVRQT0xMX1RSQVA9eQorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9QTUFDWklMT0cgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0JSSVFfUEFORUwgaXMgbm90IHNldAorIyBDT05GSUdfSFZDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009bQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIE1hYyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0hZRFJBIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUE9XRVJNQUM9eQorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BTVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfU09GVF9XQVRDSERPRz1tCisjIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfOHh4eF9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0dfUlRBUyBpcyBub3Qgc2V0CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucworIworCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKK0NPTkZJR19SRUlTRVJGU19GUz1tCisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKK0NPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19PQ0ZTMl9GUz1tCitDT05GSUdfT0NGUzJfRlNfTzJDQj1tCitDT05GSUdfT0NGUzJfRlNfU1RBVFM9eQorQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0c9eQorIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPW0KKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPW0KKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KK0NPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQorQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorQ09ORklHX0NJRlNfWEFUVFI9eQorQ09ORklHX0NJRlNfUE9TSVg9eQorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDX1BBUlRJVElPTj15CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9bQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9bQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT1tCitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWT15CitDT05GSUdfU0VDVVJJVFlfTkVUV09SSz15CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj0wCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX05VTEw9bQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4MjQ4ZV9kZWZjb25maWcKaW5kZXggZWYwYzZlOC4uY2Q2OTFmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4MjQ4ZV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4MjQ4ZV9kZWZjb25maWcKQEAgLTE1MCwxMSArMTUwLDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogQ09ORklHX1BQQ184Mnh4PXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOWVhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTAwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYtcmMyCisjIFRodSBNYXkgMjIgMDg6MTg6NDcgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKKyMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCisjIENPTkZJR19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVVMVElQTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzgyeHg9eQorIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzgyNzJfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkZBRFMgaXMgbm90IHNldAorIyBDT05GSUdfRVA4MjQ4RSBpcyBub3Qgc2V0CitDT05GSUdfTUdDT0dFPXkKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfODI2MD15CitDT05GSUdfODI3Mj15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKK0NPTkZJR19DUE0yPXkKK0NPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HPXkKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKK0NPTkZJR19DUE09eQorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX01JU0M9eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19GU0xfU09DPXkKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKKyMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfRklYRURfUEhZPXkKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfRlNfRU5FVD15CitDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKKyMgQ09ORklHX0ZTX0VORVRfSEFTX0ZDQyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19FTkVUX01ESU9fRkNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DUE09eQorQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDMyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzQgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DUE1fU01DMT15CitDT05GSUdfU0VSSUFMX0NQTV9TTUMyPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FVVE9GUzRfRlM9eQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAorIyBDT05GSUdfS0dEQl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19CRElfU1dJVENIPXkKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19QQ0JDPXkKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0xJQl9SSEVBUD15CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2Q2Y2U0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZwpAQCAtMCwwICsxLDg3MiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2LXJjMgorIyBXZWQgTWF5IDIxIDEzOjMwOjMzIDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfOHh4PXkKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfOHh4PXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CisjIENPTkZJR19CVUcgaXMgbm90IHNldAorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKKyMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MQorIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BNMT15CisjIENPTkZJR19NUEM4WFhGQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg2WEFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4ODVBRFMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VQODhYQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQURERVI4NzUgaXMgbm90IHNldAorQ09ORklHX1BQQ19NR1NVVkQ9eQorCisjCisjIE1QQzh4eCBDUE0gT3B0aW9ucworIworCisjCisjIEdlbmVyaWMgTVBDOHh4IE9wdGlvbnMKKyMKK0NPTkZJR184eHhfQ09QWUJBQ0s9eQorQ09ORklHXzh4eF9DUFU2PXkKK0NPTkZJR184eHhfQ1BVMTU9eQorIyBDT05GSUdfTk9fVUNPREVfUEFUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NPRl9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1BJX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfU1BJX1NNQzFfVUNPREVfUEFUQ0g9eQorQ09ORklHX1VDT0RFX1BBVENIPXkKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfQ1BNX05FV19CSU5ESU5HPXkKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKK0NPTkZJR19DUE09eQorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorQ09ORklHX0haPTEwMDAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKKyMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0ZTTF9TT0M9eQorIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9RU1BBTiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4ODAwMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmQwMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKK0NPTkZJR19NVERfQ0ZJX1NUQUE9eQorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9DRklfRkxBR0FETSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorQ09ORklHX0ZJWEVEX1BIWT15CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX0ZTX0VORVQ9eQorQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CisjIENPTkZJR19GU19FTkVUX0hBU19GRUMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfRU5FVF9NRElPX0ZFQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DUE09eQorQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDMyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzQgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DUE1fU01DMT15CisjIENPTkZJR19TRVJJQUxfQ1BNX1NNQzIgaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0xJQl9SSEVBUD15CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcKaW5kZXggN2M0MzVjOC4uZmY2ZjdjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZwpAQCAtMTUxLDExICsxNTEsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgyeHg9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODN4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZwppbmRleCA5MTZlM2RmLi45OTFjOWJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZwpAQCAtMTY2LDExICsxNjYsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjEwX2hwY2RfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODYxMF9ocGNkX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE5OTkwNy4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5NyArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM0Ci0jIFRodSBBdWcgMjEgMDA6NTI6MTAgMjAwOAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfNnh4PXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRlBVPXkKLUNPTkZJR19BTFRJVkVDPXkKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19QUENfTUVSR0U9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfSElCRVJOQVRFXzMyPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLSMgQ09ORklHX1NXQVAgaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAotQ09ORklHX1BDU1BLUl9QTEFURk9STT15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLSMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQotQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfODZ4eD15Ci0jIENPTkZJR19NUEM4NjQxX0hQQ04gaXMgbm90IHNldAotIyBDT05GSUdfU0JDODY0MUQgaXMgbm90IHNldAotQ09ORklHX01QQzg2MTBfSFBDRD15Ci1DT05GSUdfTVBDODYxMD15Ci0jIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05BVElWRT15Ci0jIENPTkZJR19VREJHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotQ09ORklHX1BQQ19JODI1OT15Ci1DT05GSUdfUFBDX1JUQVM9eQotIyBDT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19SVEFTX1BST0M9eQotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX01QQzEwNj15Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM2MDFfU1lOQ19GSVggaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfVUxJMTU3NT15Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLUNPTkZJR19ISUdITUVNPXkKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQotQ09ORklHX0haPTEwMDAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMgotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotIyBDT05GSUdfSVNBIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotQ09ORklHX1BDSUVQT1JUQlVTPXkKLUNPTkZJR19QQ0lFQUVSPXkKLSMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLUNPTkZJR19QQ0lfREVCVUc9eQotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9eQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2PXkKLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAotQ09ORklHX0lQVjZfU0lUPXkKLUNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKLSMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15Ci1DT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi1DT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9GU0xfRUxCQz15Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDX0ZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci1DT05GSUdfSURFPXkKLSMgQ09ORklHX0JMS19ERVZfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci1DT05GSUdfU0NTSV9UR1Q9eQotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLUNPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NRVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTUFDNTNDOTQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0FUQV9QTVA9eQotQ09ORklHX1NBVEFfQUhDST15Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfU0ZGPXkKLSMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci1DT05GSUdfUEFUQV9BTEk9eQotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0RVTU1ZPXkKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JNQUMgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1RVTElQPXkKLSMgQ09ORklHX0RFMjEwNFggaXMgbm90IHNldAotIyBDT05GSUdfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfREU0WDUgaXMgbm90IHNldAotIyBDT05GSUdfV0lOQk9ORF84NDAgaXMgbm90IHNldAotIyBDT05GSUdfRE05MTAyIGlzIG5vdCBzZXQKLUNPTkZJR19VTEk1MjZYPXkKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCi1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCi1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9QTUFDWklMT0cgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSVFfUEFORUwgaXMgbm90IHNldAotIyBDT05GSUdfSFZDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci0jIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFjIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfSFlEUkEgaXMgbm90IHNldAotQ09ORklHX0kyQ19QT1dFUk1BQz15Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi1DT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQotQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT0YgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTEFUSU5VTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WQUxLWVJJRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DVDY1NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfRlNMX0RJVT15Ci0jIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19WR0FfQ09OU09MRT15Ci0jIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkQ9eQotQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotQ09ORklHX1NORF9PU1NFTVVMPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPXkKLUNPTkZJR19TTkRfUENNX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BDST15Ci0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotQ09ORklHX1NORF9QUEM9eQotIyBDT05GSUdfU05EX1BPV0VSTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BT0EgaXMgbm90IHNldAotQ09ORklHX1NORF9TT0M9eQotQ09ORklHX1NORF9TT0NfTVBDODYxMD15Ci1DT05GSUdfU05EX1NPQ19NUEM4NjEwX0hQQ0Q9eQotQ09ORklHX1NORF9TT0NfQ1M0MjcwPXkKLUNPTkZJR19TTkRfU09DX0NTNDI3MF9WRDMzX0VSUkFUQT15Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLUNPTkZJR19SVENfRFJWX0NNT1M9eQotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX05GU0Q9eQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci1DT05GSUdfTERNX1BBUlRJVElPTj15Ci0jIENPTkZJR19MRE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX1QxMERJRj15Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX1NISVJRPXkKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotQ09ORklHX1BQQ19MSUJfUkhFQVA9eQotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY0MV9ocGNuX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2NDFfaHBjbl9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMDliZTMuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY0MV9ocGNuX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE2NjYgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNAotIyBUaHUgQXVnIDIxIDAwOjUyOjExIDIwMDgKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHXzZ4eD15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0ZQVT15Ci1DT05GSUdfQUxUSVZFQz15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1NNUD15Ci1DT05GSUdfTlJfQ1BVUz0yCi1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci1DT05GSUdfR0VORVJJQ19UQlNZTkM9eQotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLUNPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotQ09ORklHX0FVRElUPXkKLSMgQ09ORklHX0FVRElUU1lTQ0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLUNPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfUENTUEtSX1BMQVRGT1JNPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotQ09ORklHX01PRFZFUlNJT05TPXkKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfTVVMVElQTEFURk9STT15Ci1DT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotQ09ORklHX1BQQ184Nnh4PXkKLUNPTkZJR19NUEM4NjQxX0hQQ049eQotIyBDT05GSUdfU0JDODY0MUQgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODYxMF9IUENEIGlzIG5vdCBzZXQKLUNPTkZJR19NUEM4NjQxPXkKLUNPTkZJR19QUENfTkFUSVZFPXkKLSMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0k4MjU5PXkKLUNPTkZJR19QUENfUlRBUz15Ci0jIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldAotQ09ORklHX1JUQVNfUFJPQz15Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVBDMTA2PXkKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzYwMV9TWU5DX0ZJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAotQ09ORklHX0ZTTF9VTEkxNTc1PXkKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotQ09ORklHX0hJR0hNRU09eQotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15Ci1DT05GSUdfSFo9MTAwMAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0JJTkZNVF9NSVNDPW0KLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX0NQVSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi0jIENPTkZJR19JU0EgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19IQVNfUkFQSURJTz15Ci0jIENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9eQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotQ09ORklHX05FVF9LRVk9bQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15Ci1DT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKLUNPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQotQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci1DT05GSUdfSVBfUE5QX1JBUlA9eQotQ09ORklHX05FVF9JUElQPXkKLUNPTkZJR19ORVRfSVBHUkU9eQotQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQotQ09ORklHX0lQX01ST1VURT15Ci1DT05GSUdfSVBfUElNU01fVjE9eQotQ09ORklHX0lQX1BJTVNNX1YyPXkKLUNPTkZJR19BUlBEPXkKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TSVQ9eQotQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9TQ1RQPW0KLSMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAotQ09ORklHX1NDVFBfSE1BQ19NRDU9eQotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19GSUJfUlVMRVM9eQotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19GTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9OQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19DSFJfREVWX1NUPXkKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TUj15Ci0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9HR0lORz15Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NRVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTUFDNTNDOTQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0FUQV9QTVA9eQotQ09ORklHX1NBVEFfQUhDST15Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfU0ZGPXkKLSMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci1DT05GSUdfUEFUQV9BTEk9eQotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0RVTU1ZPXkKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotQ09ORklHX1ZJVEVTU0VfUEhZPXkKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX01BQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQk1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotQ09ORklHX0dJQU5GQVI9eQotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX1BNQUNaSUxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfQlJJUV9QQU5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVkNfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLUNPTkZJR19OVlJBTT15Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci0jIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFjIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfSFlEUkEgaXMgbm90IHNldAotQ09ORklHX0kyQ19QT1dFUk1BQz15Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi1DT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUMjQgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfRFZCX0NPUkU9bQotQ09ORklHX1ZJREVPX01FRElBPW0KLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUVESUFfVFVORVI9bQotIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQotQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQotQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQotQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQotQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQotQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCi1DT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KLUNPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQotQ09ORklHX0RWQl9DQVBUVVJFX0RSSVZFUlM9eQotCi0jCi0jIFN1cHBvcnRlZCBTQUE3MTQ2IGJhc2VkIFBDSSBBZGFwdGVycwotIwotIyBDT05GSUdfVFRQQ0lfRUVQUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9CVURHRVRfQ09SRSBpcyBub3Qgc2V0Ci0KLSMKLSMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycwotIwotIyBDT05GSUdfRFZCX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFRVU0JfQlVER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVFVTQl9ERUMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NJTkVSR1lUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfU0lBTk9fU01TMVhYWCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3VwcG9ydGVkIEZsZXhDb3BJSSAoQjJDMikgQWRhcHRlcnMKLSMKLSMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1AgaXMgbm90IHNldAotCi0jCi0jIFN1cHBvcnRlZCBCVDg3OCBBZGFwdGVycwotIwotCi0jCi0jIFN1cHBvcnRlZCBQbHV0bzIgQWRhcHRlcnMKLSMKLSMgQ09ORklHX0RWQl9QTFVUTzIgaXMgbm90IHNldAotCi0jCi0jIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCi0jCi0KLSMKLSMgQ3VzdG9taXNlIERWQiBGcm9udGVuZHMKLSMKLSMgQ09ORklHX0RWQl9GRV9DVVNUT01JU0UgaXMgbm90IHNldAotCi0jCi0jIERWQi1TIChzYXRlbGxpdGUpIGZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX0NYMjQxMTAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NYMjQxMjMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX01UMzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TNUgxNDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TVFYwMjk5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREE4MDgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREExMDA4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVkVTMVg5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFVORVJfSVREMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVERBODI2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFVBNjEwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFZCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKLSMKLSMgQ09ORklHX0RWQl9TUDg4NzAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1NQODg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ1gyMjcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ1gyMjcwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfRFJYMzk3WEQgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0w2NDc4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVERBMTAwNFggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX05YVDYwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX01UMzUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9aTDEwMzUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9ESUIzMDAwTUIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0RJQjMwMDBNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfRElCNzAwME0gaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0RJQjcwMDBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREExMDA0OCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKLSMKLSMgQ09ORklHX0RWQl9WRVMxODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREExMDAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVERBMTAwMjMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1NUVjAyOTcgaXMgbm90IHNldAotCi0jCi0jIEFUU0MgKE5vcnRoIEFtZXJpY2FuL0tvcmVhbiBUZXJyZXN0cmlhbC9DYWJsZSBEVFYpIGZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX05YVDIwMFggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX09SNTEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX09SNTExMzIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0JDTTM1MTAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0xHRFQzMzBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TNUgxNDA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9BVTg1MjIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1M1SDE0MTEgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgdGVycmVzdHJpYWwgb25seSB0dW5lcnMvUExMCi0jCi0jIENPTkZJR19EVkJfUExMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwIGlzIG5vdCBzZXQKLQotIwotIyBTRUMgY29udHJvbCBkZXZpY2VzIGZvciBEVkItUwotIwotIyBDT05GSUdfRFZCX0xOQlAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfSVNMNjQwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfSVNMNjQyMSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19WR0FfQ09OU09MRT15Ci0jIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLUNPTkZJR19TT1VORD15Ci1DT05GSUdfU05EPXkKLUNPTkZJR19TTkRfVElNRVI9eQotQ09ORklHX1NORF9QQ009eQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTPXkKLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZNQVNURVI9eQotQ09ORklHX1NORF9BQzk3X0NPREVDPXkKLUNPTkZJR19TTkRfRFJJVkVSUz15Ci0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BDST15Ci0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAotQ09ORklHX1NORF9JTlRFTDhYMD15Ci0jIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUFBDPXkKLSMgQ09ORklHX1NORF9QT1dFUk1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQU9BIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVVNCPXkKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPXkKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLUNPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9FSENJX0hDRD15Ci0jIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAotQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0lFUlJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotQ09ORklHX1JUQ19EUlZfQ01PUz15Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19JU085NjYwX0ZTPW0KLUNPTkZJR19KT0xJRVQ9eQotQ09ORklHX1pJU09GUz15Ci1DT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLUNPTkZJR19NU0RPU19GUz1tCi1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi1DT05GSUdfTlRGU19GUz15Ci0jIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfUlcgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotQ09ORklHX0FERlNfRlM9bQotIyBDT05GSUdfQURGU19GU19SVyBpcyBub3Qgc2V0Ci1DT05GSUdfQUZGU19GUz1tCi1DT05GSUdfSEZTX0ZTPW0KLUNPTkZJR19IRlNQTFVTX0ZTPW0KLUNPTkZJR19CRUZTX0ZTPW0KLSMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0JGU19GUz1tCi1DT05GSUdfRUZTX0ZTPW0KLUNPTkZJR19DUkFNRlM9eQotQ09ORklHX1ZYRlNfRlM9bQotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSFBGU19GUz1tCi1DT05GSUdfUU5YNEZTX0ZTPW0KLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNWX0ZTPW0KLUNPTkZJR19VRlNfRlM9bQotIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTkZTRD15Ci0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDX1BBUlRJVElPTj15Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX1VURjg9bQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX1QxMERJRj15Ci1DT05GSUdfQ1JDX0lUVV9UPW0KLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fSE1BQz15Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0YmU4MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTY0NiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNQorIyBUdWUgU2VwIDIzIDIzOjI4OjM4IDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfQUxUSVZFQz15CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0yCitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CitDT05GSUdfR0VORVJJQ19UQlNZTkM9eQorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0FVRElUPXkKKyMgQ09ORklHX0FVRElUU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKKyMgQ09ORklHX0hBVkVfQ0xLIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX1NUT1BfTUFDSElORT15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKK0NPTkZJR19DTEFTU0lDMzI9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAorQ09ORklHX1BQQ184Nnh4PXkKK0NPTkZJR19NUEM4NjQxX0hQQ049eQorQ09ORklHX1NCQzg2NDFEPXkKK0NPTkZJR19NUEM4NjEwX0hQQ0Q9eQorQ09ORklHX0dFRl9TQkM2MTA9eQorQ09ORklHX01QQzg2NDE9eQorQ09ORklHX01QQzg2MTA9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSTgyNTk9eQorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CitDT05GSUdfRlNMX1VMSTE1NzU9eQorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCitDT05GSUdfSElHSE1FTT15CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKK0NPTkZJR19IWj0xMDAwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX01JU0M9bQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1JBUElESU89eQorIyBDT05GSUdfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD15CitDT05GSUdfTkVUX0lQR1JFPXkKK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CitDT05GSUdfQVJQRD15CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPXkKK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfRklCX1JVTEVTPXkKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD15CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9eQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT0dHSU5HPXkKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1BNUD15CitDT05GSUdfU0FUQV9BSENJPXkKKyMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX0FMST15CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9eQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfVklURVNTRV9QSFk9eQorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKK0NPTkZJR19OVlJBTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0NPUkU9bQorQ09ORklHX1ZJREVPX01FRElBPW0KKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVI9bQorIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQorQ09ORklHX0RWQl9DQVBUVVJFX0RSSVZFUlM9eQorCisjCisjIFN1cHBvcnRlZCBTQUE3MTQ2IGJhc2VkIFBDSSBBZGFwdGVycworIworIyBDT05GSUdfVFRQQ0lfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9CVURHRVRfQ09SRSBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycworIworIyBDT05GSUdfRFZCX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFRVU0JfQlVER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVFVTQl9ERUMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NJTkVSR1lUMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU0lBTk9fU01TMVhYWCBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIEZsZXhDb3BJSSAoQjJDMikgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1AgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBCVDg3OCBBZGFwdGVycworIworCisjCisjIFN1cHBvcnRlZCBQbHV0bzIgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9QTFVUTzIgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCisjCisKKyMKKyMgQ3VzdG9taXNlIERWQiBGcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9GRV9DVVNUT01JU0UgaXMgbm90IHNldAorCisjCisjIERWQi1TIChzYXRlbGxpdGUpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX0NYMjQxMTAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NYMjQxMjMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX01UMzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TNUgxNDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TVFYwMjk5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREE4MDgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDA4NiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVkVTMVg5MyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFVORVJfSVREMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBODI2WCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFVBNjEwMCBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9TUDg4NzAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NQODg3WCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ1gyMjcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ1gyMjcwMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRFJYMzk3WEQgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0w2NDc4MSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBMTAwNFggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX05YVDYwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX01UMzUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9aTDEwMzUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9ESUIzMDAwTUIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RJQjMwMDBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRElCNzAwME0gaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RJQjcwMDBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDA0OCBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9WRVMxODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBMTAwMjMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NUVjAyOTcgaXMgbm90IHNldAorCisjCisjIEFUU0MgKE5vcnRoIEFtZXJpY2FuL0tvcmVhbiBUZXJyZXN0cmlhbC9DYWJsZSBEVFYpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX05YVDIwMFggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX09SNTEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX09SNTExMzIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0JDTTM1MTAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0xHRFQzMzBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TNUgxNDA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9BVTg1MjIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1M1SDE0MTEgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgdGVycmVzdHJpYWwgb25seSB0dW5lcnMvUExMCisjCisjIENPTkZJR19EVkJfUExMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwIGlzIG5vdCBzZXQKKworIworIyBTRUMgY29udHJvbCBkZXZpY2VzIGZvciBEVkItUworIworIyBDT05GSUdfRFZCX0xOQlAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfSVNMNjQwNSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfSVNMNjQyMSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19TT1VORD15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZNQVNURVI9eQorQ09ORklHX1NORF9BQzk3X0NPREVDPXkKK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BDST15CisjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAorQ09ORklHX1NORF9JTlRFTDhYMD15CisjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUFBDPXkKK0NPTkZJR19TTkRfVVNCPXkKKyMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPXkKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0lFUlJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQ01PUz15CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz15CisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfUlcgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworQ09ORklHX0FERlNfRlM9bQorIyBDT05GSUdfQURGU19GU19SVyBpcyBub3Qgc2V0CitDT05GSUdfQUZGU19GUz1tCitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KK0NPTkZJR19CRUZTX0ZTPW0KKyMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0JGU19GUz1tCitDT05GSUdfRUZTX0ZTPW0KK0NPTkZJR19DUkFNRlM9eQorQ09ORklHX1ZYRlNfRlM9bQorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCitDT05GSUdfUU5YNEZTX0ZTPW0KKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWX0ZTPW0KK0NPTkZJR19VRlNfRlM9bQorIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTkZTRD15CisjIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTUFDX1BBUlRJVElPTj15CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX1QxMERJRj15CitDT05GSUdfQ1JDX0lUVV9UPW0KK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHEyZmFkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZwppbmRleCBiMzkwYjc0Li43ZTE3ODYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZwpAQCAtMTUyLDExICsxNTIsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgyeHg9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2JjODY0MWRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2JjODY0MWRfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTQ1NDIxLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3NiYzg2NDFkX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE0ODEgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNAotIyBUaHUgQXVnIDIxIDAwOjUyOjE1IDIwMDgKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHXzZ4eD15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0ZQVT15Ci1DT05GSUdfQUxUSVZFQz15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1NNUD15Ci1DT05GSUdfTlJfQ1BVUz0yCi1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci1DT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfUkVMQVk9eQotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfUENTUEtSX1BMQVRGT1JNPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfTVVMVElQTEFURk9STT15Ci1DT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotQ09ORklHX1BQQ184Nnh4PXkKLSMgQ09ORklHX01QQzg2NDFfSFBDTiBpcyBub3Qgc2V0Ci1DT05GSUdfU0JDODY0MUQ9eQotIyBDT05GSUdfTVBDODYxMF9IUENEIGlzIG5vdCBzZXQKLUNPTkZJR19NUEM4NjQxPXkKLUNPTkZJR19QUENfTkFUSVZFPXkKLSMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0k4MjU5PXkKLUNPTkZJR19QUENfUlRBUz15Ci0jIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldAotQ09ORklHX1JUQVNfUFJPQz15Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVBDMTA2PXkKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzYwMV9TWU5DX0ZJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVD15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci1DT05GSUdfQklORk1UX01JU0M9bQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotQ09ORklHX0lSUV9BTExfQ1BVUz15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLSMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLSMgQ09ORklHX0lTQSBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLUNPTkZJR19QQ0lFUE9SVEJVUz15Ci1DT05GSUdfUENJRUFFUj15Ci0jIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX0lQQ09NUD1tCi1DT05GSUdfTkVUX0tFWT1tCi0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci1DT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKLUNPTkZJR19BU0tfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQotQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15Ci1DT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15Ci1DT05GSUdfTkVUX0lQSVA9bQotQ09ORklHX05FVF9JUEdSRT1tCi1DT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15Ci1DT05GSUdfSVBfTVJPVVRFPXkKLUNPTkZJR19JUF9QSU1TTV9WMT15Ci1DT05GSUdfSVBfUElNU01fVjI9eQotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotQ09ORklHX0lORVRfQUg9bQotQ09ORklHX0lORVRfRVNQPW0KLUNPTkZJR19JTkVUX0lQQ09NUD1tCi1DT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotQ09ORklHX0lQVjY9bQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfQUg9bQotQ09ORklHX0lORVQ2X0VTUD1tCi1DT05GSUdfSU5FVDZfSVBDT01QPW0KLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD1tCi1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci1DT05GSUdfSVBWNl9UVU5ORUw9bQotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQotQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19JUF9ORl9RVUVVRT1tCi1DT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KLSMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9GSUxURVI9bQotQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19JUF9ORl9NQU5HTEU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfUkFXPW0KLSMgQ09ORklHX0lQX05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQotQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCi1DT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCi0KLSMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19JUDZfTkZfUVVFVUU9bQotQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVA2X05GX01BVENIX1JUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCi1DT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCi1DT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQotIyBDT05GSUdfSVA2X05GX01BVENIX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQNl9ORl9NQVRDSF9NSCBpcyBub3Qgc2V0Ci1DT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfRklMVEVSPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCi0jIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfSVA2X05GX01BTkdMRT1tCi0jIENPTkZJR19JUDZfTkZfVEFSR0VUX0hMIGlzIG5vdCBzZXQKLUNPTkZJR19JUDZfTkZfUkFXPW0KLSMgQ09ORklHX0lQNl9ORl9TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnJpZGdlOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotQ09ORklHX0lQX1NDVFA9bQotIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0Ci1DT05GSUdfU0NUUF9ITUFDX01ENT15Ci1DT05GSUdfVElQQz1tCi0jIENPTkZJR19USVBDX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUENfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0FUTT1tCi1DT05GSUdfQVRNX0NMSVA9bQotIyBDT05GSUdfQVRNX0NMSVBfTk9fSUNNUCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRNX0xBTkU9bQotQ09ORklHX0FUTV9NUE9BPW0KLUNPTkZJR19BVE1fQlIyNjg0PW0KLSMgQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVIgaXMgbm90IHNldAotQ09ORklHX1NUUD1tCi1DT05GSUdfQlJJREdFPW0KLUNPTkZJR19WTEFOXzgwMjFRPW0KLSMgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotQ09ORklHX0xMQz1tCi0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotQ09ORklHX1dBTl9ST1VURVI9bQotQ09ORklHX05FVF9TQ0hFRD15Ci0KLSMKLSMgUXVldWVpbmcvU2NoZWR1bGluZwotIwotQ09ORklHX05FVF9TQ0hfQ0JRPW0KLUNPTkZJR19ORVRfU0NIX0hUQj1tCi1DT05GSUdfTkVUX1NDSF9IRlNDPW0KLUNPTkZJR19ORVRfU0NIX0FUTT1tCi1DT05GSUdfTkVUX1NDSF9QUklPPW0KLUNPTkZJR19ORVRfU0NIX1JFRD1tCi1DT05GSUdfTkVUX1NDSF9TRlE9bQotQ09ORklHX05FVF9TQ0hfVEVRTD1tCi1DT05GSUdfTkVUX1NDSF9UQkY9bQotQ09ORklHX05FVF9TQ0hfR1JFRD1tCi1DT05GSUdfTkVUX1NDSF9EU01BUks9bQotQ09ORklHX05FVF9TQ0hfTkVURU09bQotCi0jCi0jIENsYXNzaWZpY2F0aW9uCi0jCi1DT05GSUdfTkVUX0NMUz15Ci0jIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQotQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKLUNPTkZJR19ORVRfQ0xTX0ZXPW0KLUNPTkZJR19ORVRfQ0xTX1UzMj1tCi0jIENPTkZJR19DTFNfVTMyX1BFUkYgaXMgbm90IHNldAotIyBDT05GSUdfQ0xTX1UzMl9NQVJLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JTVlA9bQotQ09ORklHX05FVF9DTFNfUlNWUDY9bQotIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19BQ1QgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAotQ09ORklHX05FVF9TQ0hfRklGTz15Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi1DT05GSUdfTkVUX1BLVEdFTj1tCi0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfRklCX1JVTEVTPXkKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15Ci1DT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi1DT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci1DT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci0jIENPTkZJR19NVERfQ0ZJX05PU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDX0ZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9bQotQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCi1DT05GSUdfQkxLX0RFVl9OQkQ9bQotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD15Ci1DT05GSUdfTURfTElORUFSPXkKLUNPTkZJR19NRF9SQUlEMD15Ci1DT05GSUdfTURfUkFJRDE9eQotQ09ORklHX01EX1JBSUQxMD15Ci0jIENPTkZJR19NRF9SQUlENDU2IGlzIG5vdCBzZXQKLUNPTkZJR19NRF9NVUxUSVBBVEg9eQotQ09ORklHX01EX0ZBVUxUWT15Ci1DT05GSUdfQkxLX0RFVl9ETT15Ci0jIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRE1fQ1JZUFQ9eQotQ09ORklHX0RNX1NOQVBTSE9UPXkKLUNPTkZJR19ETV9NSVJST1I9eQotQ09ORklHX0RNX1pFUk89eQotIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRFVNTVk9bQotQ09ORklHX0JPTkRJTkc9bQotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotQ09ORklHX1RVTj1tCi0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLUNPTkZJR19CUk9BRENPTV9QSFk9eQotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19NQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JNQUMgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotQ09ORklHX0FUTV9EUklWRVJTPXkKLSMgQ09ORklHX0FUTV9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9MQU5BSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fRU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9GSVJFU1RSRUFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9aQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9OSUNTVEFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9JRFQ3NzI1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fQU1CQVNTQURPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fSE9SSVpPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fSUEgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0ZPUkUyMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9IRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotQ09ORklHX1BQUF9GSUxURVI9eQotQ09ORklHX1BQUF9BU1lOQz1tCi1DT05GSUdfUFBQX1NZTkNfVFRZPW0KLUNPTkZJR19QUFBfREVGTEFURT1tCi1DT05GSUdfUFBQX0JTRENPTVA9bQotIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAotQ09ORklHX1BQUE9FPW0KLUNPTkZJR19QUFBPQVRNPW0KLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLUNPTkZJR19TTElQPW0KLUNPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQotQ09ORklHX1NMSEM9bQotQ09ORklHX1NMSVBfU01BUlQ9eQotQ09ORklHX1NMSVBfTU9ERV9TTElQNj15Ci1DT05GSUdfTkVUQ09OU09MRT15Ci0jIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAotQ09ORklHX05FVFBPTEw9eQotQ09ORklHX05FVFBPTExfVFJBUD15Ci1DT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX1BNQUNaSUxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfQlJJUV9QQU5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVkNfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT1tCi0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFjIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfSFlEUkEgaXMgbm90IHNldAotQ09ORklHX0kyQ19QT1dFUk1BQz15Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi1DT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19TT0ZUX1dBVENIRE9HPW0KLSMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPR19SVEFTIGlzIG5vdCBzZXQKLQotIwotIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotQ09ORklHX09DRlMyX0ZTPW0KLUNPTkZJR19PQ0ZTMl9GU19PMkNCPW0KLUNPTkZJR19PQ0ZTMl9GU19TVEFUUz15Ci1DT05GSUdfT0NGUzJfREVCVUdfTUFTS0xPRz15Ci0jIENPTkZJR19PQ0ZTMl9ERUJVR19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlOSVhfRlM9bQotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfUk9NRlNfRlM9bQotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotQ09ORklHX05GU19WND15Ci1DT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotQ09ORklHX1NNQl9OTFNfREVGQVVMVD15Ci1DT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgotQ09ORklHX0NJRlM9bQotIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0lGU19YQVRUUj15Ci1DT05GSUdfQ0lGU19QT1NJWD15Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNfUEFSVElUSU9OPXkKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz1tCi1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KLUNPTkZJR19OTFNfSVNPODg1OV84PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQotQ09ORklHX05MU19BU0NJST1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMT1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMj1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMz1tCi1DT05GSUdfTkxTX0lTTzg4NTlfND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfNT1tCi1DT05GSUdfTkxTX0lTTzg4NTlfNj1tCi1DT05GSUdfTkxTX0lTTzg4NTlfNz1tCi1DT05GSUdfTkxTX0lTTzg4NTlfOT1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTM9bQotQ09ORklHX05MU19JU084ODU5XzE0PW0KLUNPTkZJR19OTFNfSVNPODg1OV8xNT1tCi1DT05GSUdfTkxTX0tPSThfUj1tCi1DT05GSUdfTkxTX0tPSThfVT1tCi1DT05GSUdfTkxTX1VURjg9bQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfQ0NJVFQ9bQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotQ09ORklHX1NFQ1VSSVRZPXkKLUNPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKLSMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTAKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BRUFEPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTlVMTD1tCi0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVVUSEVOQz1tCi1DT05GSUdfQ1JZUFRPX1RFU1Q9bQotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0hNQUM9eQotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV1A1MTI9bQotCi0jCi0jIENpcGhlcnMKLSMKLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotCi0jCi0jIENvbXByZXNzaW9uCi0jCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Eub3V0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYS5vdXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODljZWFkNi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYS5vdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX0FfT1VUX0gKLSNkZWZpbmUgX0FTTV9QT1dFUlBDX0FfT1VUX0gKLQotc3RydWN0IGV4ZWMKLXsKLQl1bnNpZ25lZCBsb25nIGFfaW5mbzsJLyogVXNlIG1hY3JvcyBOX01BR0lDLCBldGMgZm9yIGFjY2VzcyAqLwotCXVuc2lnbmVkIGFfdGV4dDsJLyogbGVuZ3RoIG9mIHRleHQsIGluIGJ5dGVzICovCi0JdW5zaWduZWQgYV9kYXRhOwkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBhX2JzczsJCS8qIGxlbmd0aCBvZiB1bmluaXRpYWxpemVkIGRhdGEgYXJlYSBmb3IgZmlsZSwgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBhX3N5bXM7CS8qIGxlbmd0aCBvZiBzeW1ib2wgdGFibGUgZGF0YSBpbiBmaWxlLCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGFfZW50cnk7CS8qIHN0YXJ0IGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBhX3Ryc2l6ZTsJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgdGV4dCwgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBhX2Ryc2l6ZTsJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgZGF0YSwgaW4gYnl0ZXMgKi8KLX07Ci0KLSNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKLSNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKLSNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQotCi0jZW5kaWYgLyogX0FTTV9QT1dFUlBDX0FfT1VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKaW5kZXggZWY4YTI0OC4uMWU5NGIwNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKQEAgLTYyLDYgKzYyLDcgQEAKIAlQUENfUE1DX0RFRkFVTFQgPSAwLAogCVBQQ19QTUNfSUJNID0gMSwKIAlQUENfUE1DX1BBNlQgPSAyLAorCVBQQ19QTUNfRzQgPSAzLAogfTsKIAogc3RydWN0IHB0X3JlZ3M7CkBAIC0xOTIsNiArMTkzLDcgQEAKICNkZWZpbmUgQ1BVX0ZUUl9OT19TTEJJRV9CCQlMT05HX0FTTV9DT05TVCgweDAwMDgwMDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfVlNYCQkJTE9OR19BU01fQ09OU1QoMHgwMDEwMDAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX1NBTwkJCUxPTkdfQVNNX0NPTlNUKDB4MDAyMDAwMDAwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9DUF9VU0VfRENCVFoJCUxPTkdfQVNNX0NPTlNUKDB4MDA0MDAwMDAwMDAwMDAwMCkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtMzg3LDEwICszODksMTEgQEAKIAkgICAgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfQ1RSTCkKICNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVI0CShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCi0JICAgIENQVV9GVFJfTU1DUkEpCisJICAgIENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX0NQX1VTRV9EQ0JUWikKICNkZWZpbmUgQ1BVX0ZUUlNfUFBDOTcwCShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCi0JICAgIENQVV9GVFJfQUxUSVZFQ19DT01QIHwgQ1BVX0ZUUl9DQU5fTkFQIHwgQ1BVX0ZUUl9NTUNSQSkKKwkgICAgQ1BVX0ZUUl9BTFRJVkVDX0NPTVAgfCBDUFVfRlRSX0NBTl9OQVAgfCBDUFVfRlRSX01NQ1JBIHwgXAorCSAgICBDUFVfRlRSX0NQX1VTRV9EQ0JUWikKICNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVI1CShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCiAJICAgIENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX1NNVCB8IFwKQEAgLTQxMSw3ICs0MTQsOCBAQAogI2RlZmluZSBDUFVfRlRSU19DRUxMCShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCiAJICAgIENQVV9GVFJfQUxUSVZFQ19DT01QIHwgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwgXAotCSAgICBDUFVfRlRSX1BBVVNFX1pFUk8gfCBDUFVfRlRSX0NJX0xBUkdFX1BBR0UgfCBDUFVfRlRSX0NFTExfVEJfQlVHKQorCSAgICBDUFVfRlRSX1BBVVNFX1pFUk8gfCBDUFVfRlRSX0NJX0xBUkdFX1BBR0UgfCBcCisJICAgIENQVV9GVFJfQ0VMTF9UQl9CVUcgfCBDUFVfRlRSX0NQX1VTRV9EQ0JUWikKICNkZWZpbmUgQ1BVX0ZUUlNfUEE2VCAoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKIAkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgXAogCSAgICBDUFVfRlRSX0FMVElWRUNfQ09NUCB8IENQVV9GVFJfQ0lfTEFSR0VfUEFHRSB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kY3ItcmVncy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Rjci1yZWdzLmgKaW5kZXggZjE1Mjk2Yy4uODI4ZTNhYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Rjci1yZWdzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Rjci1yZWdzLmgKQEAgLTY4LDYgKzY4LDEzIEBACiAjZGVmaW5lIFNEUjBfVUFSVDMJCTB4MDEyMwogI2RlZmluZSBTRFIwX0NVU1QwCQkweDQwMDAKIAorLyogU0RSIGZvciA0MDVFWiAqLworI2RlZmluZSBEQ1JOX1NEUl9JQ0lOVFNUQVQJMHg0NTEwCisjZGVmaW5lIElDSU5UU1RBVF9JQ1JYCTB4ODAwMDAwMDAKKyNkZWZpbmUgSUNJTlRTVEFUX0lDVFgwCTB4NDAwMDAwMDAKKyNkZWZpbmUgSUNJTlRTVEFUX0lDVFgxIDB4MjAwMDAwMDAKKyNkZWZpbmUgSUNJTlRTVEFUX0lDVFgJMHg2MDAwMDAwMAorCiAvKiBTRFJzICg0NjBFWC80NjBHVCkgKi8KICNkZWZpbmUgU0RSMF9FVEhfQ0ZHCQkweDQxMDMKICNkZWZpbmUgU0RSMF9FVEhfQ0ZHX0VDUwkweDAwMDAwMTAwCS8qIEVNQUMgaW50IGNsayBzb3VyY2UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCAyMjhhYjJhLi5kZmQ1MDRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGV2aWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RldmljZS5oCkBAIC0xNiw5ICsxNiw2IEBACiAJLyogRE1BIG9wZXJhdGlvbnMgb24gdGhhdCBkZXZpY2UgKi8KIAlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzCSpkbWFfb3BzOwogCXZvaWQJCQkqZG1hX2RhdGE7Ci0KLQkvKiBOVU1BIG5vZGUgaWYgYXBwbGljYWJsZSAqLwotCWludAkJCW51bWFfbm9kZTsKIH07CiAKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggYzdjYTQ1Zi4uZmRkYjIyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTQ0LDggKzQ0LDYgQEAKIAogI2VuZGlmIC8qICEgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSAqLwogCi0jaWZkZWYgQ09ORklHX1BQQzY0Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkZXZpY2VfdG9fbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRldi0+ZG1hX21hc2sgJiYgKmRldi0+ZG1hX21hc2spCkBAIC03Niw4ICs3NCwyNCBAQAogCQkJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKIAlpbnQJCSgqZG1hX3N1cHBvcnRlZCkoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzayk7CiAJaW50CQkoKnNldF9kbWFfbWFzaykoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spOworCWRtYV9hZGRyX3QgCSgqbWFwX3BhZ2UpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CisJdm9pZAkJKCp1bm1hcF9wYWdlKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywgc2l6ZV90IHNpemUsCisJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKIH07CiAKKy8qCisgKiBBdmFpbGFibGUgZ2VuZXJpYyBzZXRzIG9mIG9wZXJhdGlvbnMKKyAqLworI2lmZGVmIENPTkZJR19QUEM2NAorZXh0ZXJuIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2lvbW11X29wczsKKyNlbmRpZgorZXh0ZXJuIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2RpcmVjdF9vcHM7CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZ2V0X2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2KQogewogCS8qIFdlIGRvbid0IGhhbmRsZSB0aGUgTlVMTCBkZXYgY2FzZSBmb3IgSVNBIGZvciBub3cuIFdlIGNvdWxkCkBAIC04NSw4ICs5OSwxOSBAQAogCSAqIG9ubHkgSVNBIERNQSBkZXZpY2Ugd2Ugc3VwcG9ydCBpcyB0aGUgZmxvcHB5IGFuZCB3ZSBoYXZlIGEgaGFjawogCSAqIGluIHRoZSBmbG9wcHkgZHJpdmVyIGRpcmVjdGx5IHRvIGdldCBhIGRldmljZSBmb3IgdXMuCiAJICovCi0JaWYgKHVubGlrZWx5KGRldiA9PSBOVUxMIHx8IGRldi0+YXJjaGRhdGEuZG1hX29wcyA9PSBOVUxMKSkKKworCWlmICh1bmxpa2VseShkZXYgPT0gTlVMTCkgfHwgZGV2LT5hcmNoZGF0YS5kbWFfb3BzID09IE5VTEwpIHsKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAkJcmV0dXJuIE5VTEw7CisjZWxzZQorCQkvKiBVc2UgZGVmYXVsdCBvbiAzMi1iaXQgaWYgZG1hX29wcyBpcyBub3Qgc2V0IHVwICovCisJCS8qIFRPRE86IExvbmcgdGVybSwgd2Ugc2hvdWxkIGZpeCBkcml2ZXJzIHNvIHRoYXQgZGV2IGFuZAorCQkgKiBhcmNoZGF0YSBkbWFfb3BzIGFyZSBzZXQgdXAgZm9yIGFsbCBidXNlcy4KKwkJICovCisJCXJldHVybiAmZG1hX2RpcmVjdF9vcHM7CisjZW5kaWYKKwl9CisKIAlyZXR1cm4gZGV2LT5hcmNoZGF0YS5kbWFfb3BzOwogfQogCkBAIC0xMjMsNiArMTQ4LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUT0RPOiBtYXBfL3VubWFwX3NpbmdsZSB3aWxsIGlkZWFsbHkgZ28gYXdheSwgdG8gYmUgY29tcGxldGVseQorICogcmVwbGFjZWQgYnkgbWFwL3VubWFwX3BhZ2UuICAgVW50aWwgdGhlbiwgd2UgYWxsb3cgZG1hX29wcyB0byBoYXZlCisgKiBvbmUgb3IgdGhlIG90aGVyLCBvciBib3RoIGJ5IGNoZWNraW5nIHRvIHNlZSBpZiB0aGUgc3BlY2lmaWMKKyAqIGZ1bmN0aW9uIHJlcXVlc3RlZCBleGlzdHM7IGFuZCBpZiBub3QsIGZhbGxpbmcgYmFjayBvbiB0aGUgb3RoZXIgc2V0LgorICovCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkgICAgICB2b2lkICpjcHVfYWRkciwKIAkJCQkJICAgICAgc2l6ZV90IHNpemUsCkBAIC0xMzIsNyArMTYzLDE0IEBACiAJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKIAlCVUdfT04oIWRtYV9vcHMpOwotCXJldHVybiBkbWFfb3BzLT5tYXBfc2luZ2xlKGRldiwgY3B1X2FkZHIsIHNpemUsIGRpcmVjdGlvbiwgYXR0cnMpOworCisJaWYgKGRtYV9vcHMtPm1hcF9zaW5nbGUpCisJCXJldHVybiBkbWFfb3BzLT5tYXBfc2luZ2xlKGRldiwgY3B1X2FkZHIsIHNpemUsIGRpcmVjdGlvbiwKKwkJCQkJICAgYXR0cnMpOworCisJcmV0dXJuIGRtYV9vcHMtPm1hcF9wYWdlKGRldiwgdmlydF90b19wYWdlKGNwdV9hZGRyKSwKKwkJCQkgKHVuc2lnbmVkIGxvbmcpY3B1X2FkZHIgJSBQQUdFX1NJWkUsIHNpemUsCisJCQkJIGRpcmVjdGlvbiwgYXR0cnMpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xNDQsNyArMTgyLDEzIEBACiAJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKIAlCVUdfT04oIWRtYV9vcHMpOwotCWRtYV9vcHMtPnVubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXJlY3Rpb24sIGF0dHJzKTsKKworCWlmIChkbWFfb3BzLT51bm1hcF9zaW5nbGUpIHsKKwkJZG1hX29wcy0+dW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIHNpemUsIGRpcmVjdGlvbiwgYXR0cnMpOworCQlyZXR1cm47CisJfQorCisJZG1hX29wcy0+dW5tYXBfcGFnZShkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIAogc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xNTYsOCArMjAwLDEzIEBACiAJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKIAlCVUdfT04oIWRtYV9vcHMpOworCisJaWYgKGRtYV9vcHMtPm1hcF9wYWdlKQorCQlyZXR1cm4gZG1hX29wcy0+bWFwX3BhZ2UoZGV2LCBwYWdlLCBvZmZzZXQsIHNpemUsIGRpcmVjdGlvbiwKKwkJCQkJIGF0dHJzKTsKKwogCXJldHVybiBkbWFfb3BzLT5tYXBfc2luZ2xlKGRldiwgcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0LCBzaXplLAotCQkJZGlyZWN0aW9uLCBhdHRycyk7CisJCQkJICAgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfcGFnZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xNjksNiArMjE4LDEyIEBACiAJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKIAlCVUdfT04oIWRtYV9vcHMpOworCisJaWYgKGRtYV9vcHMtPnVubWFwX3BhZ2UpIHsKKwkJZG1hX29wcy0+dW5tYXBfcGFnZShkZXYsIGRtYV9hZGRyZXNzLCBzaXplLCBkaXJlY3Rpb24sIGF0dHJzKTsKKwkJcmV0dXJuOworCX0KKwogCWRtYV9vcHMtPnVubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyZXNzLCBzaXplLCBkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIApAQCAtMjUzLDEyNiArMzA4LDYgQEAKIAlkbWFfdW5tYXBfc2dfYXR0cnMoZGV2LCBzZywgbmh3ZW50cmllcywgZGlyZWN0aW9uLCBOVUxMKTsKIH0KIAotLyoKLSAqIEF2YWlsYWJsZSBnZW5lcmljIHNldHMgb2Ygb3BlcmF0aW9ucwotICovCi1leHRlcm4gc3RydWN0IGRtYV9tYXBwaW5nX29wcyBkbWFfaW9tbXVfb3BzOwotZXh0ZXJuIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2RpcmVjdF9vcHM7Ci0KLSNlbHNlIC8qIENPTkZJR19QUEM2NCAqLwotCi0jZGVmaW5lIGRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKQkoMSkKLQotc3RhdGljIGlubGluZSBpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKQotewotCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQotCQlyZXR1cm4gLUVJTzsKLQotCSpkZXYtPmRtYV9tYXNrID0gZG1hX21hc2s7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgICAgZG1hX2FkZHJfdCAqIGRtYV9oYW5kbGUsCi0JCQkJICAgICAgIGdmcF90IGdmcCkKLXsKLSNpZmRlZiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFCi0JcmV0dXJuIF9fZG1hX2FsbG9jX2NvaGVyZW50KHNpemUsIGRtYV9oYW5kbGUsIGdmcCk7Ci0jZWxzZQotCXZvaWQgKnJldDsKLQkvKiBpZ25vcmUgcmVnaW9uIHNwZWNpZmllcnMgKi8KLQlnZnAgJj0gfihfX0dGUF9ETUEgfCBfX0dGUF9ISUdITUVNKTsKLQotCWlmIChkZXYgPT0gTlVMTCB8fCBkZXYtPmNvaGVyZW50X2RtYV9tYXNrIDwgMHhmZmZmZmZmZikKLQkJZ2ZwIHw9IEdGUF9ETUE7Ci0KLQlyZXQgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoZ2ZwLCBnZXRfb3JkZXIoc2l6ZSkpOwotCi0JaWYgKHJldCAhPSBOVUxMKSB7Ci0JCW1lbXNldChyZXQsIDAsIHNpemUpOwotCQkqZG1hX2hhbmRsZSA9IHZpcnRfdG9fYnVzKHJldCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLAotCQkgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLSNpZmRlZiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFCi0JX19kbWFfZnJlZV9jb2hlcmVudChzaXplLCB2YWRkcik7Ci0jZWxzZQotCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGdldF9vcmRlcihzaXplKSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBkbWFfYWRkcl90Ci1kbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCi0JICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKLQotCV9fZG1hX3N5bmMocHRyLCBzaXplLCBkaXJlY3Rpb24pOwotCi0JcmV0dXJuIHZpcnRfdG9fYnVzKHB0cik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCQkgICAgc2l6ZV90IHNpemUsCi0JCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQkvKiBXZSBkbyBub3RoaW5nLiAqLwotfQotCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKLWRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAotCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOwotCi0JX19kbWFfc3luY19wYWdlKHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKLQotCXJldHVybiBwYWdlX3RvX2J1cyhwYWdlKSArIG9mZnNldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKLQkJCQkgIHNpemVfdCBzaXplLAotCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCS8qIFdlIGRvIG5vdGhpbmcuICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIGludCBuZW50cywKLQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQlpbnQgaTsKLQotCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOwotCi0JZm9yX2VhY2hfc2coc2dsLCBzZywgbmVudHMsIGkpIHsKLQkJQlVHX09OKCFzZ19wYWdlKHNnKSk7Ci0JCV9fZG1hX3N5bmNfcGFnZShzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgZGlyZWN0aW9uKTsKLQkJc2ctPmRtYV9hZGRyZXNzID0gcGFnZV90b19idXMoc2dfcGFnZShzZykpICsgc2ctPm9mZnNldDsKLQl9Ci0KLQlyZXR1cm4gbmVudHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCWludCBuaHdlbnRyaWVzLAotCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQkvKiBXZSBkb24ndCBkbyBhbnl0aGluZyBoZXJlLiAqLwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCiAJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA2NGM2ZWUyLi5kODEyOTI5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0yMzIsNyArMjMyLDcgQEAKICNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKICNpZmRlZiBfX3Bvd2VycGM2NF9fCi0jIGRlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJCQlcCisjIGRlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCQkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MgPSAwOwkJCQlcCiAJaWYgKChleCkuZV9pZGVudFtFSV9DTEFTU10gPT0gRUxGQ0xBU1MzMikJCVwKQEAgLTI1Niw3ICsyNTYsNyBAQAogIyBkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LCBleGVjX3N0aykgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/IFwKIAkJKGV4ZWNfc3RrICE9IEVYU1RBQ0tfRElTQUJMRV9YKSA6IDApCiAjZWxzZSAKLSMgZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9TVlI0OlBFUl9MSU5VWCkKKyMgZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKICNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKIGV4dGVybiBpbnQgZGNhY2hlX2JzaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi5oCmluZGV4IDMyOTE0OGIuLmQzZDQ1MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9leGNlcHRpb24uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZXhjZXB0aW9uLmgKQEAgLTUzLDE0ICs1Myw4IEBACiAgKiBsb3cgaGFsZndvcmQgb2YgdGhlIGFkZHJlc3MsIGJ1dCBmb3IgS2R1bXAgd2UgbmVlZCB0aGUgd2hvbGUgbG93CiAgKiB3b3JkLgogICovCi0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKICNkZWZpbmUgTE9BRF9IQU5ETEVSKHJlZywgbGFiZWwpCQkJCQlcCi0Jb3JpcwlyZWcscmVnLChsYWJlbClAaDsJLyogdmlydCBhZGRyIG9mIGhhbmRsZXIgLi4uICovCVwKLQlvcmkJcmVnLHJlZywobGFiZWwpQGw7CS8qIC4uIGFuZCB0aGUgcmVzdCAqLwotI2Vsc2UKLSNkZWZpbmUgTE9BRF9IQU5ETEVSKHJlZywgbGFiZWwpCQkJCQlcCi0Jb3JpCXJlZyxyZWcsKGxhYmVsKUBsOwkvKiB2aXJ0IGFkZHIgb2YgaGFuZGxlciAuLi4gKi8KLSNlbmRpZgorCWFkZGkJcmVnLHJlZywobGFiZWwpLV9zdGV4dDsJLyogdmlydCBhZGRyIG9mIGhhbmRsZXIgLi4uICovCiAKICNkZWZpbmUgRVhDRVBUSU9OX1BST0xPR18xKGFyZWEpCQkJCVwKIAltZnNwcglyMTMsU1BSTl9TUFJHMzsJCS8qIGdldCBwYWNhIGFkZHJlc3MgaW50byByMTMgKi8JXApAQCAtNzIsMzcgKzY2LDEyIEBACiAJc3RkCXI5LGFyZWErRVhfUjEzKHIxMyk7CQkJCQlcCiAJbWZjcglyOQogCi0vKgotICogRXF1YWwgdG8gRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTLCBleGNlcHQgdGhhdCBpdCBmb3JjZXMgNjRiaXQgbW9kZS4KLSAqIFRoZSBmaXJtd2FyZSBjYWxscyB0aGUgcmVnaXN0ZXJlZCBzeXN0ZW1fcmVzZXRfZndubWkgYW5kCi0gKiBtYWNoaW5lX2NoZWNrX2Z3bm1pIGhhbmRsZXJzIGluIDMyYml0IG1vZGUgaWYgdGhlIGNwdSBoYXBwZW5zIHRvIHJ1bgotICogYSAzMmJpdCBhcHBsaWNhdGlvbiBhdCB0aGUgdGltZSBvZiB0aGUgZXZlbnQuCi0gKiBUaGlzIGZpcm13YXJlIGJ1ZyBpcyBwcmVzZW50IG9uIFBPV0VSNCBhbmQgSlMyMC4KLSAqLwotI2RlZmluZSBFWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfRk9SQ0VfNjRCSVQoYXJlYSwgbGFiZWwpCQlcCi0JRVhDRVBUSU9OX1BST0xPR18xKGFyZWEpOwkJCQkJXAotCWNscnJkaQlyMTIscjEzLDMyOwkJLyogZ2V0IGhpZ2ggcGFydCBvZiAmbGFiZWwgKi8JXAotCW1mbXNyCXIxMDsJCQkJCQkJXAotCS8qIGZvcmNlIDY0Yml0IG1vZGUgKi8JCQkJCQlcCi0JbGkJcjExLDU7CQkJLyogTVNSX1NGX0xHfE1TUl9JU0ZfTEcgKi8JXAotCXJsZGltaQlyMTAscjExLDYxLDA7CQkvKiBpbnNlcnQgaW50byB0b3AgMyBiaXRzICovCVwKLQkvKiBkb25lIDY0Yml0IG1vZGUgKi8JCQkJCQlcCi0JbWZzcHIJcjExLFNQUk5fU1JSMDsJCS8qIHNhdmUgU1JSMCAqLwkJCVwKLQlMT0FEX0hBTkRMRVIocjEyLGxhYmVsKQkJCQkJCVwKLQlvcmkJcjEwLHIxMCxNU1JfSVJ8TVNSX0RSfE1TUl9SSTsJCQkJXAotCW10c3ByCVNQUk5fU1JSMCxyMTI7CQkJCQkJXAotCW1mc3ByCXIxMixTUFJOX1NSUjE7CQkvKiBhbmQgU1JSMSAqLwkJCVwKLQltdHNwcglTUFJOX1NSUjEscjEwOwkJCQkJCVwKLQlyZmlkOwkJCQkJCQkJXAotCWIJLgkvKiBwcmV2ZW50IHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiAqLwotCiAjZGVmaW5lIEVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhhcmVhLCBsYWJlbCkJCQkJXAogCUVYQ0VQVElPTl9QUk9MT0dfMShhcmVhKTsJCQkJCVwKLQljbHJyZGkJcjEyLHIxMywzMjsJCS8qIGdldCBoaWdoIHBhcnQgb2YgJmxhYmVsICovCVwKLQltZm1zcglyMTA7CQkJCQkJCVwKKwlsZAlyMTIsUEFDQUtCQVNFKHIxMyk7CS8qIGdldCBoaWdoIHBhcnQgb2YgJmxhYmVsICovCVwKKwlsZAlyMTAsUEFDQUtNU1IocjEzKTsJLyogZ2V0IE1TUiB2YWx1ZSBmb3Iga2VybmVsICovCVwKIAltZnNwcglyMTEsU1BSTl9TUlIwOwkJLyogc2F2ZSBTUlIwICovCQkJXAogCUxPQURfSEFORExFUihyMTIsbGFiZWwpCQkJCQkJXAotCW9yaQlyMTAscjEwLE1TUl9JUnxNU1JfRFJ8TVNSX1JJOwkJCQlcCiAJbXRzcHIJU1BSTl9TUlIwLHIxMjsJCQkJCQlcCiAJbWZzcHIJcjEyLFNQUk5fU1JSMTsJCS8qIGFuZCBTUlIxICovCQkJXAogCW10c3ByCVNQUk5fU1JSMSxyMTA7CQkJCQkJXApAQCAtMjEwLDExICsxNzksMTAgQEAKIAlzdGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEzKHIxMyk7CQkJCVwKIAlzdGQJcjExLFBBQ0FfRVhHRU4rRVhfUjExKHIxMyk7CQkJCVwKIAlzdGQJcjEyLFBBQ0FfRVhHRU4rRVhfUjEyKHIxMyk7CQkJCVwKLQljbHJyZGkJcjEyLHIxMywzMjsJCS8qIGdldCBoaWdoIHBhcnQgb2YgJmxhYmVsICovCVwKLQltZm1zcglyMTA7CQkJCQkJCVwKKwlsZAlyMTIsUEFDQUtCQVNFKHIxMyk7CS8qIGdldCBoaWdoIHBhcnQgb2YgJmxhYmVsICovCVwKKwlsZAlyMTAsUEFDQUtNU1IocjEzKTsJLyogZ2V0IE1TUiB2YWx1ZSBmb3Iga2VybmVsICovCVwKIAltZnNwcglyMTEsU1BSTl9TUlIwOwkJLyogc2F2ZSBTUlIwICovCQkJXAogCUxPQURfSEFORExFUihyMTIsbGFiZWwjI19jb21tb24pCQkJCVwKLQlvcmkJcjEwLHIxMCxNU1JfSVJ8TVNSX0RSfE1TUl9SSTsJCQkJXAogCW10c3ByCVNQUk5fU1JSMCxyMTI7CQkJCQkJXAogCW1mc3ByCXIxMixTUFJOX1NSUjE7CQkvKiBhbmQgU1JSMSAqLwkJCVwKIAltdHNwcglTUFJOX1NSUjEscjEwOwkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mc2xfbGJjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnNsX2xiYy5oCmluZGV4IDMwM2Y1NDguLjYzYTRmNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mc2xfbGJjLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZzbF9sYmMuaApAQCAtMjMsOSArMjMsOSBAQAogI2lmbmRlZiBfX0FTTV9GU0xfTEJDX0gKICNkZWZpbmUgX19BU01fRlNMX0xCQ19ICiAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiBzdHJ1Y3QgZnNsX2xiY19iYW5rIHsKIAlfX2JlMzIgYnI7ICAgICAgICAgICAgIC8qKjwgQmFzZSBSZWdpc3RlciAgKi8KQEAgLTIyNyw5ICsyMjcsNiBAQAogCXU4IHJlczhbMHhGMDBdOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBmc2xfbGJjX3JlZ3MgX19pb21lbSAqZnNsX2xiY19yZWdzOwotZXh0ZXJuIHNwaW5sb2NrX3QgZnNsX2xiY19sb2NrOwotCiAvKgogICogRlNMIFVQTSByb3V0aW5lcwogICovCkBAIC0yNjgsNDQgKzI2NSw3IEBACiAJCWNwdV9yZWxheCgpOwogfQogCi0vKioKLSAqIGZzbF91cG1fcnVuX3BhdHRlcm4gLSBhY3R1YWxseSBydW4gYW4gVVBNIHBhdHRlcm4KLSAqIEB1cG06CXBvaW50ZXIgdG8gdGhlIGZzbF91cG0gc3RydWN0dXJlIG9idGFpbmVkIHZpYSBmc2xfdXBtX2ZpbmQKLSAqIEBpb19iYXNlOglyZW1hcHBlZCBwb2ludGVyIHRvIHdoZXJlIG1lbW9yeSBhY2Nlc3Mgc2hvdWxkIGhhcHBlbgotICogQG1hcjoJTUFSIHJlZ2lzdGVyIGNvbnRlbnQgZHVyaW5nIHBhdHRlcm4gZXhlY3V0aW9uCi0gKgotICogVGhpcyBmdW5jdGlvbiB0cmlnZ2VycyBkdW1teSB3cml0ZSB0byB0aGUgbWVtb3J5IHNwZWNpZmllZCBieSB0aGUgaW9fYmFzZSwKLSAqIHRodXMgVVBNIHBhdHRlcm4gYWN0dWFsbHkgZXhlY3V0ZWQuIE5vdGUgdGhhdCBtYXIgdXNhZ2UgZGVwZW5kcyBvbiB0aGUKLSAqIHByZS1wcm9ncmFtbWVkIEFNWCBiaXRzIGluIHRoZSBVUE0gUkFNLgotICovCi1zdGF0aWMgaW5saW5lIGludCBmc2xfdXBtX3J1bl9wYXR0ZXJuKHN0cnVjdCBmc2xfdXBtICp1cG0sCi0JCQkJICAgICAgdm9pZCBfX2lvbWVtICppb19iYXNlLCB1MzIgbWFyKQotewotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2xiY19sb2NrLCBmbGFncyk7Ci0KLQlvdXRfYmUzMigmZnNsX2xiY19yZWdzLT5tYXIsIG1hciA8PCAoMzIgLSB1cG0tPndpZHRoKSk7Ci0KLQlzd2l0Y2ggKHVwbS0+d2lkdGgpIHsKLQljYXNlIDg6Ci0JCW91dF84KGlvX2Jhc2UsIDB4MCk7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCW91dF9iZTE2KGlvX2Jhc2UsIDB4MCk7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCW91dF9iZTMyKGlvX2Jhc2UsIDB4MCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9sYmNfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KK2V4dGVybiBpbnQgZnNsX3VwbV9ydW5fcGF0dGVybihzdHJ1Y3QgZnNsX3VwbSAqdXBtLCB2b2lkIF9faW9tZW0gKmlvX2Jhc2UsCisJCQkgICAgICAgdTMyIG1hcik7CiAKICNlbmRpZiAvKiBfX0FTTV9GU0xfTEJDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oaWdobWVtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGlnaG1lbS5oCmluZGV4IDVkOTliNjQuLjkxYzU4OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oaWdobWVtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hpZ2htZW0uaApAQCAtODQsNyArODQsNyBAQAogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAJQlVHX09OKCFwdGVfbm9uZSgqKGttYXBfcHRlLWlkeCkpKTsKICNlbmRpZgotCXNldF9wdGVfYXQoJmluaXRfbW0sIHZhZGRyLCBrbWFwX3B0ZS1pZHgsIG1rX3B0ZShwYWdlLCBwcm90KSk7CisJX19zZXRfcHRlX2F0KCZpbml0X21tLCB2YWRkciwga21hcF9wdGUtaWR4LCBta19wdGUocGFnZSwgcHJvdCkpOwogCWZsdXNoX3RsYl9wYWdlKE5VTEwsIHZhZGRyKTsKIAogCXJldHVybiAodm9pZCopIHZhZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaAppbmRleCA3N2M3ZmEwLi4wODI2NmQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaApAQCAtNzExLDcgKzcxMSw3IEBACiAvKgogICogQ2hhbmdlICJzdHJ1Y3QgcGFnZSIgdG8gcGh5c2ljYWwgYWRkcmVzcy4KICAqLwotI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkoKHBoeXNfYWRkcl90KXBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCiAKIC8qIFdlIGRvIE5PVCB3YW50IHZpcnR1YWwgbWVyZ2luZywgaXQgd291bGQgcHV0IHRvbyBtdWNoIHByZXNzdXJlIG9uCiAgKiBvdXIgaW9tbXUgYWxsb2NhdG9yLiBJbnN0ZWFkLCB3ZSB3YW50IGRyaXZlcnMgdG8gYmUgc21hcnQgZW5vdWdoCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggYTM3MmY3Ni4uMGE1MTM3NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMjM2LDE1ICsyMzYsMjcgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgaXJxX2NyZWF0ZV9kaXJlY3RfbWFwcGluZyhzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QpOwogCiAvKioKLSAqIGlycV9yYWRpeF9yZXZtYXAgLSBGaW5kIGEgbGludXggdmlycSBmcm9tIGEgaHcgaXJxIG51bWJlci4KKyAqIGlycV9yYWRpeF9yZXZtYXBfaW5zZXJ0IC0gSW5zZXJ0IGEgaHcgaXJxIHRvIGxpbnV4IHZpcnEgbnVtYmVyIG1hcHBpbmcuCisgKiBAaG9zdDogaG9zdCBvd25pbmcgdGhpcyBoYXJkd2FyZSBpbnRlcnJ1cHQKKyAqIEB2aXJxOiBsaW51eCBpcnEgbnVtYmVyCisgKiBAaHdpcnE6IGhhcmR3YXJlIGlycSBudW1iZXIgaW4gdGhhdCBob3N0IHNwYWNlCisgKgorICogVGhpcyBpcyBmb3IgdXNlIGJ5IGlycSBjb250cm9sbGVycyB0aGF0IHVzZSBhIHJhZGl4IHRyZWUgcmV2ZXJzZQorICogbWFwcGluZyBmb3IgZmFzdCBsb29rdXAuCisgKi8KK2V4dGVybiB2b2lkIGlycV9yYWRpeF9yZXZtYXBfaW5zZXJ0KHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkJICAgIGlycV9od19udW1iZXJfdCBod2lycSk7CisKKy8qKgorICogaXJxX3JhZGl4X3Jldm1hcF9sb29rdXAgLSBGaW5kIGEgbGludXggdmlycSBmcm9tIGEgaHcgaXJxIG51bWJlci4KICAqIEBob3N0OiBob3N0IG93bmluZyB0aGlzIGhhcmR3YXJlIGludGVycnVwdAogICogQGh3aXJxOiBoYXJkd2FyZSBpcnEgbnVtYmVyIGluIHRoYXQgaG9zdCBzcGFjZQogICoKICAqIFRoaXMgaXMgYSBmYXN0IHBhdGgsIGZvciB1c2UgYnkgaXJxIGNvbnRyb2xsZXIgY29kZSB0aGF0IHVzZXMgcmFkaXggdHJlZQogICogcmV2bWFwcwogICovCi1leHRlcm4gdW5zaWduZWQgaW50IGlycV9yYWRpeF9yZXZtYXAoc3RydWN0IGlycV9ob3N0ICpob3N0LAotCQkJCSAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaXJxX3JhZGl4X3Jldm1hcF9sb29rdXAoc3RydWN0IGlycV9ob3N0ICpob3N0LAorCQkJCQkgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKTsKIAogLyoqCiAgKiBpcnFfbGluZWFyX3Jldm1hcCAtIEZpbmQgYSBsaW51eCB2aXJxIGZyb20gYSBodyBpcnEgbnVtYmVyLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyNjU1ZTJhLi4zNGI1MmI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtODEsMTEgKzgxLDE3IEBACiAJc3RydWN0IHRsYmUgc2hhZG93X3RsYltQUEM0NHhfVExCX1NJWkVdOwogCS8qIFBhZ2VzIHdoaWNoIGFyZSByZWZlcmVuY2VkIGluIHRoZSBzaGFkb3cgVExCLiAqLwogCXN0cnVjdCBwYWdlICpzaGFkb3dfcGFnZXNbUFBDNDR4X1RMQl9TSVpFXTsKLQkvKiBDb3B5IG9mIHRoZSBob3N0J3MgVExCLiAqLwotCXN0cnVjdCB0bGJlIGhvc3RfdGxiW1BQQzQ0eF9UTEJfU0laRV07CisKKwkvKiBUcmFjayB3aGljaCBUTEIgZW50cmllcyB3ZSd2ZSBtb2RpZmllZCBpbiB0aGUgY3VycmVudCBleGl0LiAqLworCXU4IHNoYWRvd190bGJfbW9kW1BQQzQ0eF9UTEJfU0laRV07CiAKIAl1MzIgaG9zdF9zdGFjazsKIAl1MzIgaG9zdF9waWQ7CisJdTMyIGhvc3RfZGJjcjA7CisJdTMyIGhvc3RfZGJjcjE7CisJdTMyIGhvc3RfZGJjcjI7CisJdTMyIGhvc3RfaWFjWzRdOworCXUzMiBob3N0X21zcjsKIAogCXU2NCBmcHJbMzJdOwogCXUzMiBncHJbMzJdOwpAQCAtMTIzLDcgKzEyOSwxMSBAQAogCXUzMiBpdm9yWzE2XTsKIAl1MzIgaXZwcjsKIAl1MzIgcGlyOworCisJdTMyIHNoYWRvd19waWQ7CiAJdTMyIHBpZDsKKwl1MzIgc3dhcF9waWQ7CisKIAl1MzIgcHZyOwogCXUzMiBjY3IwOwogCXUzMiBjY3IxOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKaW5kZXggYThiMDY4Ny4uODkzMWJhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCkBAIC02NCw2ICs2NCwxMCBAQAogZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9pbnZhbGlkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3ZhX3QgZWVuZCwgdTMyIGFzaWQpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9wcml2X3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB1c2VybW9kZSk7CitleHRlcm4gdm9pZCBrdm1wcGNfbW11X3N3aXRjaF9waWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgcGlkKTsKKworLyogWFhYIEJvb2sgRSBzcGVjaWZpYyAqLworZXh0ZXJuIHZvaWQga3ZtcHBjX3RsYmVfc2V0X21vZGlmaWVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGkpOwogCiBleHRlcm4gdm9pZCBrdm1wcGNfY2hlY2tfYW5kX2RlbGl2ZXJfaW50ZXJydXB0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCkBAIC05Miw0ICs5NiwxMiBAQAogCQlrdm1fdmNwdV9ibG9jayh2Y3B1KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19zZXRfcGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG5ld19waWQpCit7CisJaWYgKHZjcHUtPmFyY2gucGlkICE9IG5ld19waWQpIHsKKwkJdmNwdS0+YXJjaC5waWQgPSBuZXdfcGlkOworCQl2Y3B1LT5hcmNoLnN3YXBfcGlkID0gMTsKKwl9Cit9CisKICNlbmRpZiAvKiBfX1BPV0VSUENfS1ZNX1BQQ19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCmluZGV4IDg5M2FhZmQuLjI3NDBjNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaApAQCAtODgsOCArODgsNiBAQAogCXVuc2lnbmVkIGxvbmcJKCp0Y2VfZ2V0KShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwKIAkJCQkgICAgbG9uZyBpbmRleCk7CiAJdm9pZAkJKCp0Y2VfZmx1c2gpKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsKTsKLQl2b2lkCQkoKnBjaV9kbWFfZGV2X3NldHVwKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLQl2b2lkCQkoKnBjaV9kbWFfYnVzX3NldHVwKShzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIAogCXZvaWQgX19pb21lbSAqCSgqaW9yZW1hcCkocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwpAQCAtMTAxLDYgKzk5LDkgQEAKICNlbmRpZgogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCisJdm9pZAkJKCpwY2lfZG1hX2Rldl9zZXR1cCkoc3RydWN0IHBjaV9kZXYgKmRldik7CisJdm9pZAkJKCpwY2lfZG1hX2J1c19zZXR1cCkoc3RydWN0IHBjaV9idXMgKmJ1cyk7CisKIAlpbnQJCSgqcHJvYmUpKHZvaWQpOwogCXZvaWQJCSgqc2V0dXBfYXJjaCkodm9pZCk7IC8qIE9wdGlvbmFsLCBtYXkgYmUgTlVMTCAqLwogCXZvaWQJCSgqaW5pdF9lYXJseSkodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW1hbi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCA5MjA5Zjc1Li5lN2I5OWJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW1hbi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbWFuLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogc3RhdGljIGlubGluZSBwZ3Byb3RfdCBhcmNoX3ZtX2dldF9wYWdlX3Byb3QodW5zaWduZWQgbG9uZyB2bV9mbGFncykKIHsKLQlyZXR1cm4gKHZtX2ZsYWdzICYgVk1fU0FPKSA/IF9fcGdwcm90KF9QQUdFX1NBTykgOiAwOworCXJldHVybiAodm1fZmxhZ3MgJiBWTV9TQU8pID8gX19wZ3Byb3QoX1BBR0VfU0FPKSA6IF9fcGdwcm90KDApOwogfQogI2RlZmluZSBhcmNoX3ZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpIGFyY2hfdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFncykKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmgKaW5kZXggYzJkZjUzYy4uNWE0NDE3NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oCkBAIC00MzcsNyArNDM3LDcgQEAKIAl9KQogI2VuZGlmIC8qIDEgKi8KIAotLyogVGhpcyBpcyBvbmx5IHZhbGlkIGZvciBhZGRyZXNzZXMgPj0gS0VSTkVMQkFTRSAqLworLyogVGhpcyBpcyBvbmx5IHZhbGlkIGZvciBhZGRyZXNzZXMgPj0gUEFHRV9PRkZTRVQgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfa2VybmVsX3ZzaWQodW5zaWduZWQgbG9uZyBlYSwgaW50IHNzaXplKQogewogCWlmIChzc2l6ZSA9PSBNTVVfU0VHU0laRV8yNTZNKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmgKaW5kZXggZmU1NjZhMy4uMzRkOWFjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGFzbS9kY3IuaD4KKyNpbmNsdWRlIDxhc20vbXNpX2JpdG1hcC5oPgogCiAvKgogICogR2xvYmFsIHJlZ2lzdGVycwpAQCAtMzAxLDggKzMwMiw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCi0Jc3BpbmxvY2tfdAkJYml0bWFwX2xvY2s7Ci0JdW5zaWduZWQgbG9uZwkJKmh3aXJxX2JpdG1hcDsKKwlzdHJ1Y3QgbXNpX2JpdG1hcAltc2lfYml0bWFwOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTVBJQ19CUk9LRU5fUkVHUkVBRApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21zaV9iaXRtYXAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tc2lfYml0bWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhYzNmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tc2lfYml0bWFwLmgKQEAgLTAsMCArMSwzNSBAQAorI2lmbmRlZiBfUE9XRVJQQ19TWVNERVZfTVNJX0JJVE1BUF9ICisjZGVmaW5lIF9QT1dFUlBDX1NZU0RFVl9NU0lfQklUTUFQX0gKKworLyoKKyAqIENvcHlyaWdodCAyMDA4LCBNaWNoYWVsIEVsbGVybWFuLCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKK3N0cnVjdCBtc2lfYml0bWFwIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUJKm9mX25vZGU7CisJdW5zaWduZWQgbG9uZwkJKmJpdG1hcDsKKwlzcGlubG9ja190CQlsb2NrOworCXVuc2lnbmVkIGludAkJaXJxX2NvdW50OworfTsKKworaW50IG1zaV9iaXRtYXBfYWxsb2NfaHdpcnFzKHN0cnVjdCBtc2lfYml0bWFwICpibXAsIGludCBudW0pOwordm9pZCBtc2lfYml0bWFwX2ZyZWVfaHdpcnFzKHN0cnVjdCBtc2lfYml0bWFwICpibXAsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgICAgdW5zaWduZWQgaW50IG51bSk7Cit2b2lkIG1zaV9iaXRtYXBfcmVzZXJ2ZV9od2lycShzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCB1bnNpZ25lZCBpbnQgaHdpcnEpOworCitpbnQgbXNpX2JpdG1hcF9yZXNlcnZlX2R0X2h3aXJxcyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wKTsKKworaW50IG1zaV9iaXRtYXBfYWxsb2Moc3RydWN0IG1zaV9iaXRtYXAgKmJtcCwgdW5zaWduZWQgaW50IGlycV9jb3VudCwKKwkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpOwordm9pZCBtc2lfYml0bWFwX2ZyZWUoc3RydWN0IG1zaV9iaXRtYXAgKmJtcCk7CisKKyNlbmRpZiAvKiBfUE9XRVJQQ19TWVNERVZfTVNJX0JJVE1BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb2ZfZGV2aWNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb2ZfZGV2aWNlLmgKaW5kZXggM2MxMjM5OS4uYTY0ZGViZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29mX2RldmljZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9vZl9kZXZpY2UuaApAQCAtMjQsOCArMjQsNSBAQAogZXh0ZXJuIGludCBvZl9kZXZpY2VfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpOwogCi0vKiBUaGlzIGlzIGp1c3QgaGVyZSBkdXJpbmcgdGhlIHRyYW5zaXRpb24gKi8KLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfT0ZfREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9vZl9wbGF0Zm9ybS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29mX3BsYXRmb3JtLmgKaW5kZXggMTg2NTllZi4uNTNiNDY1MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29mX3BsYXRmb3JtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29mX3BsYXRmb3JtLmgKQEAgLTExLDkgKzExLDYgQEAKICAqCiAgKi8KIAotLyogVGhpcyBpcyBqdXN0IGhlcmUgZHVyaW5nIHRoZSB0cmFuc2l0aW9uICovCi0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLQogLyogUGxhdGZvcm0gZHJpdmVycyByZWdpc3Rlci91bnJlZ2lzdGVyICovCiBzdGF0aWMgaW5saW5lIGludCBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqZHJ2KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWNhLmgKaW5kZXggNjQ5M2EzOS4uMDgyYjNhZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oCkBAIC02Miw2ICs2Miw4IEBACiAJdTE2IHBhY2FfaW5kZXg7CQkJLyogTG9naWNhbCBwcm9jZXNzb3IgbnVtYmVyICovCiAKIAl1NjQga2VybmVsX3RvYzsJCQkvKiBLZXJuZWwgVE9DIGFkZHJlc3MgKi8KKwl1NjQga2VybmVsYmFzZTsJCQkvKiBCYXNlIGFkZHJlc3Mgb2Yga2VybmVsICovCisJdTY0IGtlcm5lbF9tc3I7CQkJLyogTVNSIHdoaWxlIHJ1bm5pbmcgaW4ga2VybmVsICovCiAJdTY0IHN0YWJfcmVhbDsJCQkvKiBBYnNvbHV0ZSBhZGRyZXNzIG9mIHNlZ21lbnQgdGFibGUgKi8KIAl1NjQgc3RhYl9hZGRyOwkJCS8qIFZpcnR1YWwgYWRkcmVzcyBvZiBzZWdtZW50IHRhYmxlICovCiAJdm9pZCAqZW1lcmdlbmN5X3NwOwkJLyogcG9pbnRlciB0byBlbWVyZ2VuY3kgc3RhY2sgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IGUwODg1NDUuLjVhYzUxZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTAsOSArMTAsMTMgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL2tkdW1wLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKIC8qCiAgKiBPbiBQUEMzMiBwYWdlIHNpemUgaXMgNEsuIEZvciBQUEM2NCB3ZSBzdXBwb3J0IGVpdGhlciA0SyBvciA2NEsgc29mdHdhcmUKQEAgLTcxLDE1ICs3NSwyMSBAQAogI2RlZmluZSBQQUdFX09GRlNFVAlBU01fQ09OU1QoQ09ORklHX1BBR0VfT0ZGU0VUKQogI2RlZmluZSBMT0FEX09GRlNFVAlBU01fQ09OU1QoKENPTkZJR19LRVJORUxfU1RBUlQtQ09ORklHX1BIWVNJQ0FMX1NUQVJUKSkKIAotI2lmIGRlZmluZWQoQ09ORklHX1JFTE9DQVRBQkxFKSAmJiBkZWZpbmVkKENPTkZJR19GTEFUTUVNKQorI2lmIGRlZmluZWQoQ09ORklHX1JFTE9DQVRBQkxFKQogI2lmbmRlZiBfX0FTU0VNQkxZX18KIGV4dGVybiBwaHlzX2FkZHJfdCBtZW1zdGFydF9hZGRyOwogZXh0ZXJuIHBoeXNfYWRkcl90IGtlcm5zdGFydF9hZGRyOwogI2VuZGlmCiAjZGVmaW5lIFBIWVNJQ0FMX1NUQVJUCWtlcm5zdGFydF9hZGRyCi0jZGVmaW5lIE1FTU9SWV9TVEFSVAltZW1zdGFydF9hZGRyCiAjZWxzZQogI2RlZmluZSBQSFlTSUNBTF9TVEFSVAlBU01fQ09OU1QoQ09ORklHX1BIWVNJQ0FMX1NUQVJUKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKyNkZWZpbmUgTUVNT1JZX1NUQVJUCTBVTAorI2VsaWYgZGVmaW5lZChDT05GSUdfUkVMT0NBVEFCTEUpCisjZGVmaW5lIE1FTU9SWV9TVEFSVAltZW1zdGFydF9hZGRyCisjZWxzZQogI2RlZmluZSBNRU1PUllfU1RBUlQJKFBIWVNJQ0FMX1NUQVJUICsgUEFHRV9PRkZTRVQgLSBLRVJORUxCQVNFKQogI2VuZGlmCiAKQEAgLTkyLDggKzEwMiw4IEBACiAjZGVmaW5lIHBmbl90b19rYWRkcihwZm4pCV9fdmEoKHBmbikgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKIAotI2RlZmluZSBfX3ZhKHgpICgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkgLSBQSFlTSUNBTF9TVEFSVCArIEtFUk5FTEJBU0UpKQotI2RlZmluZSBfX3BhKHgpICgodW5zaWduZWQgbG9uZykoeCkgKyBQSFlTSUNBTF9TVEFSVCAtIEtFUk5FTEJBU0UpCisjZGVmaW5lIF9fdmEoeCkgKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KSArIFBBR0VfT0ZGU0VUIC0gTUVNT1JZX1NUQVJUKSkKKyNkZWZpbmUgX19wYSh4KSAoKHVuc2lnbmVkIGxvbmcpKHgpIC0gUEFHRV9PRkZTRVQgKyBNRU1PUllfU1RBUlQpCiAKIC8qCiAgKiBVbmZvcnR1bmF0ZWx5IHRoZSBQTFQgaXMgaW4gdGhlIEJTUyBpbiB0aGUgUFBDMzIgRUxGIEFCSSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzMyLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV8zMi5oCmluZGV4IGViZmFlNTMuLmQ3NzA3MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzMyLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfMzIuaApAQCAtMTMsMTAgKzEzLDE2IEBACiAjZGVmaW5lIEFSQ0hfS01BTExPQ19NSU5BTElHTglMMV9DQUNIRV9CWVRFUwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUFRFXzY0QklUCisjZGVmaW5lIFBURV9GTEFHU19PRkZTRVQJNAkvKiBvZmZzZXQgb2YgUFRFIGZsYWdzLCBpbiBieXRlcyAqLworI2Vsc2UKKyNkZWZpbmUgUFRFX0ZMQUdTX09GRlNFVAkwCisjZW5kaWYKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qCiAgKiBUaGUgYmFzaWMgdHlwZSBvZiBhIFBURSAtIDY0IGJpdHMgZm9yIHRob3NlIENQVXMgd2l0aCA+IDMyIGJpdAotICogcGh5c2ljYWwgYWRkcmVzc2luZy4gIEZvciBub3cgdGhpcyBqdXN0IHRoZSBJQk0gUFBDNDQwLgorICogcGh5c2ljYWwgYWRkcmVzc2luZy4KICAqLwogI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHB0ZV9iYXNpY190OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IGEwNWE5NDIuLjBlNTJjNzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTYwLDYgKzYwLDE0IEBACiAJcmV0dXJuIGNoYW5uZWwgPyAxNSA6IDE0OwogfQogCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIHZvaWQgc2V0X3BjaV9kbWFfb3BzKHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMpOworZXh0ZXJuIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmdldF9wY2lfZG1hX29wcyh2b2lkKTsKKyNlbHNlCS8qIENPTkZJR19QQ0kgKi8KKyNkZWZpbmUgc2V0X3BjaV9kbWFfb3BzKGQpCisjZGVmaW5lIGdldF9wY2lfZG1hX29wcygpCU5VTEwKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BQQzY0CiAKIC8qCkBAIC03MCw5ICs3OCw2IEBACiAjZGVmaW5lIFBDSV9ESVNBQkxFX01XSQogCiAjaWZkZWYgQ09ORklHX1BDSQotZXh0ZXJuIHZvaWQgc2V0X3BjaV9kbWFfb3BzKHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMpOwotZXh0ZXJuIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmdldF9wY2lfZG1hX29wcyh2b2lkKTsKLQogc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfYnVyc3RfYWR2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQllbnVtIHBjaV9kbWFfYnVyc3Rfc3RyYXRlZ3kgKnN0cmF0LAogCQkJCQl1bnNpZ25lZCBsb25nICpzdHJhdGVneV9wYXJhbWV0ZXIpCkBAIC04OSw5ICs5NCw2IEBACiAJKnN0cmF0ID0gUENJX0RNQV9CVVJTVF9NVUxUSVBMRTsKIAkqc3RyYXRlZ3lfcGFyYW1ldGVyID0gY2FjaGVsaW5lX3NpemU7CiB9Ci0jZWxzZQkvKiBDT05GSUdfUENJICovCi0jZGVmaW5lIHNldF9wY2lfZG1hX29wcyhkKQotI2RlZmluZSBnZXRfcGNpX2RtYV9vcHMoKQlOVUxMCiAjZW5kaWYKIAogI2Vsc2UgLyogMzItYml0ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaAppbmRleCA2ZmUzOWUzLi42YWI3YzY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzMyLmgKQEAgLTI2MSw2ICsyNjEsNyBAQAogI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgwMDAwMDAwNAkJLyogSDogRXhlY3V0ZSBwZXJtaXNzaW9uICovCiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMDAwMDgJCS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLwogI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMDAwMDEwCQkvKiBTOiBQYWdlIGRpcnR5ICovCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDAwMDAyMAkJLyogUzogU3BlY2lhbCBwYWdlICovCiAjZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAwMDA0MAkJLyogUzogVXNlciBwYWdlICovCiAjZGVmaW5lIF9QQUdFX0VORElBTgkweDAwMDAwMDgwCQkvKiBIOiBFIGJpdCAqLwogI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwMDAxMDAJCS8qIEg6IEcgYml0ICovCkBAIC0yNzYsNiArMjc3LDcgQEAKIC8qIEVSUE4gaW4gYSBQVEUgbmV2ZXIgZ2V0cyBjbGVhcmVkLCBpZ25vcmUgaXQgKi8KICNkZWZpbmUgX1BURV9OT05FX01BU0sJMHhmZmZmZmZmZjAwMDAwMDAwVUxMCiAKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKQogLyoKQEAgLTMwNSw2ICszMDcsNyBAQAogI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAwMTAwCS8qIEg6IE0gYml0ICovCiAjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAyMDAJLyogSDogSSBiaXQgKi8KICNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDA0MDAJLyogSDogVyBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDAwODAwIC8qIFM6IFNwZWNpYWwgcGFnZSAqLwogCiAjaWZkZWYgQ09ORklHX1BURV82NEJJVAogLyogRVJQTiBpbiBhIFBURSBuZXZlciBnZXRzIGNsZWFyZWQsIGlnbm9yZSBpdCAqLwpAQCAtMzE1LDYgKzMxOCw4IEBACiAjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCiAjZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQogCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCisKICNlbGlmIGRlZmluZWQoQ09ORklHXzh4eCkKIC8qIERlZmluaXRpb25zIGZvciA4eHggZW1iZWRkZWQgY2hpcHMuICovCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDAxCS8qIFBhZ2UgaXMgdmFsaWQgKi8KQEAgLTM2Miw4ICszNjcsMTQgQEAKICNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgxMDAJLyogUjogcGFnZSByZWZlcmVuY2VkICovCiAjZGVmaW5lIF9QQUdFX0VYRUMJMHgyMDAJLyogc29mdHdhcmU6IGktY2FjaGUgY29oZXJlbmN5IHJlcXVpcmVkICovCiAjZGVmaW5lIF9QQUdFX1JXCTB4NDAwCS8qIHNvZnR3YXJlOiB1c2VyIHdyaXRlIGFjY2VzcyBhbGxvd2VkICovCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHg4MDAJLyogc29mdHdhcmU6IFNwZWNpYWwgcGFnZSAqLwogCisjaWZkZWYgQ09ORklHX1BURV82NEJJVAorLyogV2UgbmV2ZXIgY2xlYXIgdGhlIGhpZ2ggd29yZCBvZiB0aGUgcHRlICovCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLCSgweGZmZmZmZmZmMDAwMDAwMDBVTEwgfCBfUEFHRV9IQVNIUFRFKQorI2Vsc2UKICNkZWZpbmUgX1BURV9OT05FX01BU0sJX1BBR0VfSEFTSFBURQorI2VuZGlmCiAKICNkZWZpbmUgX1BNRF9QUkVTRU5UCTAKICNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKQEAgLTM3Miw2ICszODMsOCBAQAogLyogSGFzaCB0YWJsZSBiYXNlZCBwbGF0Zm9ybXMgbmVlZCBhdG9taWMgdXBkYXRlcyBvZiB0aGUgbGludXggUFRFICovCiAjZGVmaW5lIFBURV9BVE9NSUNfVVBEQVRFUwkxCiAKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKKwogI2VuZGlmCiAKIC8qCkBAIC00MDQsNiArNDE3LDkgQEAKICNpZm5kZWYgX1BBR0VfV1JJVEVUSFJVCiAjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkwCiAjZW5kaWYKKyNpZm5kZWYgX1BBR0VfU1BFQ0lBTAorI2RlZmluZSBfUEFHRV9TUEVDSUFMCTAKKyNlbmRpZgogI2lmbmRlZiBfUE1EX1BSRVNFTlRfTUFTSwogI2RlZmluZSBfUE1EX1BSRVNFTlRfTUFTSwlfUE1EX1BSRVNFTlQKICNlbmRpZgpAQCAtNDE1LDExICs0MzEsMTEgQEAKICNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBBR0VfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCiAKIAotI2RlZmluZSBQQUdFX1BST1RfQklUUwlfX3BncHJvdChfUEFHRV9HVUFSREVEIHwgX1BBR0VfQ09IRVJFTlQgfCBfUEFHRV9OT19DQUNIRSB8IFwKLQkJCQkgX1BBR0VfV1JJVEVUSFJVIHwgX1BBR0VfRU5ESUFOIHwgXAotCQkJCSBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBcCi0JCQkJIF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSB8IF9QQUdFX0RJUlRZIHwgXAotCQkJCSBfUEFHRV9FWEVDIHwgX1BBR0VfSFdFWEVDKQorI2RlZmluZSBQQUdFX1BST1RfQklUUwkoX1BBR0VfR1VBUkRFRCB8IF9QQUdFX0NPSEVSRU5UIHwgX1BBR0VfTk9fQ0FDSEUgfCBcCisJCQkgX1BBR0VfV1JJVEVUSFJVIHwgX1BBR0VfRU5ESUFOIHwgXAorCQkJIF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IFwKKwkJCSBfUEFHRV9SVyB8IF9QQUdFX0hXV1JJVEUgfCBfUEFHRV9ESVJUWSB8IFwKKwkJCSBfUEFHRV9FWEVDIHwgX1BBR0VfSFdFWEVDKQogLyoKICAqIE5vdGU6IHRoZSBfUEFHRV9DT0hFUkVOVCBiaXQgYXV0b21hdGljYWxseSBnZXRzIHNldCBpbiB0aGUgaGFyZHdhcmUKICAqIFBURSBpZiBDT05GSUdfU01QIGlzIGRlZmluZWQgKGhhc2hfcGFnZSBkb2VzIHRoaXMpOyB0aGVyZSBpcyBubyBuZWVkCkBAIC01MTcsNyArNTMzLDggQEAKIAogI2RlZmluZSBwdGVfbm9uZShwdGUpCQkoKHB0ZV92YWwocHRlKSAmIH5fUFRFX05PTkVfTUFTSykgPT0gMCkKICNkZWZpbmUgcHRlX3ByZXNlbnQocHRlKQkocHRlX3ZhbChwdGUpICYgX1BBR0VfUFJFU0VOVCkKLSNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIscHRlcCkJZG8geyBzZXRfcHRlX2F0KChtbSksIChhZGRyKSwgKHB0ZXApLCBfX3B0ZSgwKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB0ZV9jbGVhcihtbSwgYWRkciwgcHRlcCkgXAorCWRvIHsgcHRlX3VwZGF0ZShwdGVwLCB+X1BBR0VfSEFTSFBURSwgMCk7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgcG1kX25vbmUocG1kKQkJKCFwbWRfdmFsKHBtZCkpCiAjZGVmaW5lCXBtZF9iYWQocG1kKQkJKHBtZF92YWwocG1kKSAmIF9QTURfQkFEKQpAQCAtNTMzLDcgKzU1MCw3IEBACiBzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRTsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKQl7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1NQRUNJQUw7IH0KIAogc3RhdGljIGlubGluZSB2b2lkIHB0ZV91bmNhY2hlKHB0ZV90IHB0ZSkgICAgICAgeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfTk9fQ0FDSEU7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2FjaGUocHRlX3QgcHRlKSAgICAgICAgIHsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9OT19DQUNIRTsgfQpAQCAtNTUyLDEwICs1NjksMTAgQEAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKSB7CiAJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKSB7Ci0JcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV9wZ3Byb3QocHRlX3QgcHRlKQorCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9TUEVDSUFMOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHBncHJvdF90IHB0ZV9wZ3Byb3QocHRlX3QgcHRlKQogewotCXJldHVybiBfX3BncHJvdChwdGVfdmFsKHB0ZSkpICYgUEFHRV9QUk9UX0JJVFM7CisJcmV0dXJuIF9fcGdwcm90KHB0ZV92YWwocHRlKSAmIFBBR0VfUFJPVF9CSVRTKTsKIH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKQEAgLTU3NSw2ICs1OTIsMTAgQEAKIGV4dGVybiB2b2lkIGFkZF9oYXNoX3BhZ2UodW5zaWduZWQgY29udGV4dCwgdW5zaWduZWQgbG9uZyB2YSwKIAkJCSAgdW5zaWduZWQgbG9uZyBwbWR2YWwpOwogCisvKiBGbHVzaCBhbiBlbnRyeSBmcm9tIHRoZSBUTEIvaGFzaCB0YWJsZSAqLworZXh0ZXJuIHZvaWQgZmx1c2hfaGFzaF9lbnRyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHRlX3QgKnB0ZXAsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CisKIC8qCiAgKiBBdG9taWMgUFRFIHVwZGF0ZXMuCiAgKgpAQCAtNjEyLDkgKzYzMyw2IEBACiAJcmV0dXJuIG9sZDsKIH0KICNlbHNlIC8qIENPTkZJR19QVEVfNjRCSVQgKi8KLS8qIFRPRE86IENoYW5nZSB0aGF0IHRvIG9ubHkgbW9kaWZ5IHRoZSBsb3cgd29yZCBhbmQgbW92ZSBzZXRfcHRlX2F0KCkKLSAqIG91dCBvZiBsaW5lCi0gKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIHB0ZV91cGRhdGUocHRlX3QgKnAsCiAJCQkJCSAgICB1bnNpZ25lZCBsb25nIGNsciwKIAkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2V0KQpAQCAtNjUyLDE0ICs2NzAsMzYgQEAKICAqIE9uIG1hY2hpbmVzIHdoaWNoIHVzZSBhbiBNTVUgaGFzaCB0YWJsZSB3ZSBhdm9pZCBjaGFuZ2luZyB0aGUKICAqIF9QQUdFX0hBU0hQVEUgYml0LgogICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCit7CisjaWYgKF9QQUdFX0hBU0hQVEUgIT0gMCkgJiYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhZGVmaW5lZChDT05GSUdfUFRFXzY0QklUKQorCXB0ZV91cGRhdGUocHRlcCwgfl9QQUdFX0hBU0hQVEUsIHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IQVNIUFRFKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BURV82NEJJVCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQorI2lmIF9QQUdFX0hBU0hQVEUgIT0gMAorCWlmIChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0hBU0hQVEUpCisJCWZsdXNoX2hhc2hfZW50cnkobW0sIHB0ZXAsIGFkZHIpOworI2VuZGlmCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIlwKKwkJc3R3JVUwJVgwICUyLCUwXG5cCisJCWVpZWlvXG5cCisJCXN0dyVVMCVYMCAlTDIsJTEiCisJOiAiPW0iICgqcHRlcCksICI9bSIgKCooKHVuc2lnbmVkIGNoYXIgKilwdGVwKzQpKQorCTogInIiIChwdGUpIDogIm1lbW9yeSIpOworI2Vsc2UKKwkqcHRlcCA9IF9fcHRlKChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0hBU0hQVEUpCisJCSAgICAgIHwgKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IQVNIUFRFKSk7CisjZW5kaWYKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCiB7Ci0jaWYgX1BBR0VfSEFTSFBURSAhPSAwCi0JcHRlX3VwZGF0ZShwdGVwLCB+X1BBR0VfSEFTSFBURSwgcHRlX3ZhbChwdGUpICYgfl9QQUdFX0hBU0hQVEUpOwotI2Vsc2UKLQkqcHRlcCA9IHB0ZTsKKyNpZiBkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKKwlXQVJOX09OKHB0ZV9wcmVzZW50KCpwdGVwKSk7CiAjZW5kaWYKKwlfX3NldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaAppbmRleCA0NTk3YzQ5Li40YzBhOGM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmgKQEAgLTExNywxMCArMTE3LDEwIEBACiAjZGVmaW5lIFBBR0VfQUdQCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9XUkVOQUJMRSB8IF9QQUdFX05PX0NBQ0hFKQogI2RlZmluZSBIQVZFX1BBR0VfQUdQCiAKLSNkZWZpbmUgUEFHRV9QUk9UX0JJVFMJX19wZ3Byb3QoX1BBR0VfR1VBUkRFRCB8IF9QQUdFX0NPSEVSRU5UIHwgXAotCQkJCSBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX1dSSVRFVEhSVSB8IFwKLQkJCQkgX1BBR0VfNEtfUEZOIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgXAotIAkJCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0VYRUMpCisjZGVmaW5lIFBBR0VfUFJPVF9CSVRTCShfUEFHRV9HVUFSREVEIHwgX1BBR0VfQ09IRVJFTlQgfCBcCisJCQkgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9XUklURVRIUlUgfAkJXAorCQkJIF9QQUdFXzRLX1BGTiB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8CQlcCisJCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0VYRUMpCiAvKiBQVEVJRFggbmliYmxlICovCiAjZGVmaW5lIF9QVEVJRFhfU0VDT05EQVJZCTB4OAogI2RlZmluZSBfUFRFSURYX0dST1VQX0lYCTB4NwpAQCAtMjY0LDkgKzI2NCw5IEBACiAJcmV0dXJuIHB0ZTsgfQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtzcGVjaWFsKHB0ZV90IHB0ZSkgewogCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9TUEVDSUFMOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3BncHJvdChwdGVfdCBwdGUpCitzdGF0aWMgaW5saW5lIHBncHJvdF90IHB0ZV9wZ3Byb3QocHRlX3QgcHRlKQogewotCXJldHVybiBfX3BncHJvdChwdGVfdmFsKHB0ZSkpICYgUEFHRV9QUk9UX0JJVFM7CisJcmV0dXJuIF9fcGdwcm90KHB0ZV92YWwocHRlKSAmIFBBR0VfUFJPVF9CSVRTKTsKIH0KIAogLyogQXRvbWljIFBURSB1cGRhdGVzICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjX2FzbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaAppbmRleCAwOTY2ODk5Li5jNGEwMjljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjX2FzbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGNfYXNtLmgKQEAgLTI2OCw3ICsyNjgsNyBAQAogICogICBMb2FkcyB0aGUgdmFsdWUgb2YgdGhlIGNvbnN0YW50IGV4cHJlc3Npb24gJ2V4cHInIGludG8gcmVnaXN0ZXIgJ3JuJwogICogICB1c2luZyBpbW1lZGlhdGUgaW5zdHJ1Y3Rpb25zIG9ubHkuICBVc2UgdGhpcyB3aGVuIGl0J3MgaW1wb3J0YW50IG5vdAogICogICB0byByZWZlcmVuY2Ugb3RoZXIgZGF0YSAoaS5lLiBvbiBwcGM2NCB3aGVuIHRoZSBUT0MgcG9pbnRlciBpcyBub3QKLSAqICAgdmFsaWQpLgorICogICB2YWxpZCkgYW5kIHdoZW4gJ2V4cHInIGlzIGEgY29uc3RhbnQgb3IgYWJzb2x1dGUgYWRkcmVzcy4KICAqCiAgKiBMT0FEX1JFR19BRERSKHJuLCBuYW1lKQogICogICBMb2FkcyB0aGUgYWRkcmVzcyBvZiBsYWJlbCAnbmFtZScgaW50byByZWdpc3RlciAncm4nLiAgVXNlIHRoaXMgd2hlbgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2F2LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzYXYuaAppbmRleCBmZGE5ODcxLi41YWEyMmNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzYXYuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzYXYuaApAQCAtNjc4LDYgKzY3OCw4IEBACiAJdTggYnVmW1BTM0FWX1BLVF9BVkJfUEFSQU1fTUFYX0JVRl9TSVpFXTsKIH07CiAKKy8qIGNoYW5uZWwgc3RhdHVzICovCitleHRlcm4gdTggcHMzYXZfbW9kZV9jc19pbmZvW107CiAKIC8qKiBjb21tYW5kIHN0YXR1cyAqKi8KICNkZWZpbmUgUFMzQVZfU1RBVFVTX1NVQ0NFU1MJCQkweDAwMDAJLyogc3VjY2VzcyAqLwpAQCAtNzM1LDYgKzczNyw3IEBACiBleHRlcm4gaW50IHBzM2F2X3ZpZGVvX21vZGUycmVzKHUzMiwgdTMyICosIHUzMiAqKTsKIGV4dGVybiBpbnQgcHMzYXZfdmlkZW9fbXV0ZShpbnQpOwogZXh0ZXJuIGludCBwczNhdl9hdWRpb19tdXRlKGludCk7CitleHRlcm4gaW50IHBzM2F2X2F1ZGlvX211dGVfYW5hbG9nKGludCk7CiBleHRlcm4gaW50IHBzM2F2X2Rldl9vcGVuKHZvaWQpOwogZXh0ZXJuIGludCBwczNhdl9kZXZfY2xvc2Uodm9pZCk7CiBleHRlcm4gdm9pZCBwczNhdl9yZWdpc3Rlcl9mbGlwX2N0bCh2b2lkICgqZmxpcF9jdGwpKGludCBvbiwgdm9pZCAqZGF0YSksCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKaW5kZXggYmU5ODBmNC4uNjc0NTM3NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaApAQCAtMTA5LDYgKzEwOSw3IEBACiAjZGVmaW5lIFNQUk5fRVZQUgkweDNENgkvKiBFeGNlcHRpb24gVmVjdG9yIFByZWZpeCBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX0wxQ1NSMAkweDNGMgkvKiBMMSBDYWNoZSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgMCAqLwogI2RlZmluZSBTUFJOX0wxQ1NSMQkweDNGMwkvKiBMMSBDYWNoZSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUFJOX01NVUNTUjAJMHgzRjQJLyogTU1VIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAwICovCiAjZGVmaW5lIFNQUk5fUElUCTB4M0RCCS8qIFByb2dyYW1tYWJsZSBJbnRlcnZhbCBUaW1lciAqLwogI2RlZmluZSBTUFJOX0JVQ1NSCTB4M0Y1CS8qIEJyYW5jaCBVbml0IENvbnRyb2wgYW5kIFN0YXR1cyAqLwogI2RlZmluZSBTUFJOX0wyQ1NSMAkweDNGOQkvKiBMMiBEYXRhIENhY2hlIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAwICovCkBAIC00MTAsNiArNDExLDEyIEBACiAjZGVmaW5lIEwyQ1NSMF9MMkxPQQkweDAwMDAwMDgwCS8qIEwyIENhY2hlIExvY2sgT3ZlcmZsb3cgQWxsb2NhdGUgKi8KICNkZWZpbmUgTDJDU1IwX0wyTE8JMHgwMDAwMDAyMAkvKiBMMiBDYWNoZSBMb2NrIE92ZXJmbG93ICovCiAKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgTU1VQ1NSMCAqLworI2RlZmluZSBNTVVDU1IwX1RMQjFGSQkweDAwMDAwMDAyCS8qIFRMQjEgRmxhc2ggaW52YWxpZGF0ZSAqLworI2RlZmluZSBNTVVDU1IwX1RMQjBGSQkweDAwMDAwMDA0CS8qIFRMQjAgRmxhc2ggaW52YWxpZGF0ZSAqLworI2RlZmluZSBNTVVDU1IwX1RMQjJGSQkweDAwMDAwMDQwCS8qIFRMQjIgRmxhc2ggaW52YWxpZGF0ZSAqLworI2RlZmluZSBNTVVDU1IwX1RMQjNGSQkweDAwMDAwMDIwCS8qIFRMQjMgRmxhc2ggaW52YWxpZGF0ZSAqLworCiAvKiBCaXQgZGVmaW5pdGlvbnMgZm9yIFNHUi4gKi8KICNkZWZpbmUgU0dSX05PUk1BTAkwCQkvKiBTcGVjdWxhdGl2ZSBmZXRjaGluZyBhbGxvd2VkLiAqLwogI2RlZmluZSBTR1JfR1VBUkRFRAkxCQkvKiBTcGVjdWxhdGl2ZSBmZXRjaGluZyBkaXNhbGxvd2VkLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2VjdGlvbnMuaAppbmRleCAwNzk1NmYzLi42ZmJjZTcyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2VjdGlvbnMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2VjdGlvbnMuaApAQCAtMTgsNiArMTgsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgb3ZlcmxhcHNfa2VybmVsX3RleHQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJcmV0dXJuIHN0YXJ0IDwgKHVuc2lnbmVkIGxvbmcpX19pbml0X2VuZCAmJgorCQkodW5zaWduZWQgbG9uZylfc3RleHQgPCBlbmQ7Cit9CisKICN1bmRlZiBkZXJlZmVyZW5jZV9mdW5jdGlvbl9kZXNjcmlwdG9yCiBzdGF0aWMgaW5saW5lIHZvaWQgKmRlcmVmZXJlbmNlX2Z1bmN0aW9uX2Rlc2NyaXB0b3Iodm9pZCAqcHRyKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NmcC1tYWNoaW5lLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2ZwLW1hY2hpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWQzNGYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NmcC1tYWNoaW5lLmgKQEAgLTAsMCArMSwzNTMgQEAKKy8qIE1hY2hpbmUtZGVwZW5kZW50IHNvZnR3YXJlIGZsb2F0aW5nLXBvaW50IGRlZmluaXRpb25zLiAgUFBDIHZlcnNpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZgorICAgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworICAgQWN0dWFsbHksIHRoaXMgaXMgYSBQUEMgKDMyYml0KSB2ZXJzaW9uLCB3cml0dGVuIGJhc2VkIG9uIHRoZQorICAgaTM4Niwgc3BhcmMsIGFuZCBzcGFyYzY0IHZlcnNpb25zLCBieSBtZSwKKyAgIFBldGVyIE1heWRlbGwgKHBtYXlkZWxsQGNoaWFyay5ncmVlbmVuZC5vcmcudWspLgorICAgQ29tbWVudHMgYXJlIGJ5IGFuZCBsYXJnZSBhbHNvIG1pbmUsIGFsdGhvdWdoIHRoZXkgbWF5IGJlIGluYWNjdXJhdGUuCisKKyAgIEluIHBpY2tpbmcgb3V0IGFzbSBmcmFnbWVudHMgSSd2ZSBnb25lIHdpdGggdGhlIGxvd2VzdCBjb21tb24KKyAgIGRlbm9taW5hdG9yLCB3aGljaCBhbHNvIGhhcHBlbnMgdG8gYmUgdGhlIGhhcmR3YXJlIEkgaGF2ZSA6LT4KKyAgIFRoYXQgaXMsIGEgU1BBUkMgd2l0aG91dCBoYXJkd2FyZSBtdWx0aXBseSBhbmQgZGl2aWRlLgorICovCisKKy8qIGJhc2ljIHdvcmQgc2l6ZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBfRlBfV19UWVBFX1NJWkUJCTMyCisjZGVmaW5lIF9GUF9XX1RZUEUJCXVuc2lnbmVkIGxvbmcKKyNkZWZpbmUgX0ZQX1dTX1RZUEUJCXNpZ25lZCBsb25nCisjZGVmaW5lIF9GUF9JX1RZUEUJCWxvbmcKKworI2RlZmluZSBfX2xsX0IJCQkoKFVXdHlwZSkgMSA8PCAoV19UWVBFX1NJWkUgLyAyKSkKKyNkZWZpbmUgX19sbF9sb3dwYXJ0KHQpCQkoKFVXdHlwZSkgKHQpICYgKF9fbGxfQiAtIDEpKQorI2RlZmluZSBfX2xsX2hpZ2hwYXJ0KHQpCSgoVVd0eXBlKSAodCkgPj4gKFdfVFlQRV9TSVpFIC8gMikpCisKKy8qIFlvdSBjYW4gb3B0aW9uYWxseSBjb2RlIHNvbWUgdGhpbmdzIGxpa2UgYWRkaXRpb24gaW4gYXNtLiBGb3IKKyAqIGV4YW1wbGUsIGkzODYgZGVmaW5lcyBfX0ZQX0ZSQUNfQUREXzIgYXMgYXNtLiBJZiB5b3UgZG9uJ3QKKyAqIHRoZW4geW91IGdldCBhIGZyYWdtZW50IG9mIEMgY29kZSBbaWYgeW91IGNoYW5nZSBhbiAjaWZkZWYgMAorICogaW4gb3AtMi5oXSBvciBhIGNhbGwgdG8gYWRkX3NzYWFhYSAoc2VlIGJlbG93KS4KKyAqIEdvb2QgcGxhY2VzIHRvIGxvb2sgZm9yIGFzbSBmcmFnbWVudHMgdG8gdXNlIGFyZSBnY2MgYW5kIGdsaWJjLgorICogZ2NjJ3MgbG9uZ2xvbmcuaCBpcyB1c2VmdWwuCisgKi8KKworLyogV2UgbmVlZCB0byBrbm93IGhvdyB0byBtdWx0aXBseSBhbmQgZGl2aWRlLiBJZiB0aGUgaG9zdCB3b3JkIHNpemUKKyAqIGlzID49IDIqZnJhY2JpdHMgeW91IGNhbiB1c2UgRlBfTVVMX01FQVRfbl9pbW0odCxSLFgsWSkgd2hpY2gKKyAqIGNvZGVzIHRoZSBtdWx0aXBseSB3aXRoIHdoYXRldmVyIGdjYyBkb2VzIHRvICdhICogYicuCisgKiBfRlBfTVVMX01FQVRfbl93aWRlKHQsUixYLFksZikgaXMgdXNlZCB3aGVuIHlvdSBoYXZlIGFuIGFzbQorICogZnVuY3Rpb24gdGhhdCBjYW4gbXVsdGlwbHkgdHdvIDFXIHZhbHVlcyBhbmQgZ2V0IGEgMlcgcmVzdWx0LgorICogT3RoZXJ3aXNlIHlvdSdyZSBzdHVjayB3aXRoIF9GUF9NVUxfTUVBVF9uX2hhcmQodCxSLFgsWSkgd2hpY2gKKyAqIGRvZXMgYml0c2hpZnRpbmcgdG8gYXZvaWQgb3ZlcmZsb3cuCisgKiBGb3IgZGl2aXNpb24gdGhlcmUgaXMgRlBfRElWX01FQVRfbl9pbW0odCxSLFgsWSxmKSBmb3Igd29yZCBzaXplCisgKiA+PSAyKmZyYWNiaXRzLCB3aGVyZSBmIGlzIGVpdGhlciBfRlBfRElWX0hFTFBfaW1tIG9yCisgKiBfRlBfRElWX0hFTFBfbGRpdiAoc2VlIG9wLTEuaCkuCisgKiBfRlBfRElWX01FQVRfdWRpdigpIGlzIGlmIHlvdSBoYXZlIGFzbSB0byBkbyAyVy8xVyA9PiAoMVcsIDFXKS4KKyAqIFtHQ0MgYW5kIGdsaWJjIGhhdmUgbG9uZ2xvbmcuaCB3aGljaCBoYXMgdGhlIGFzbSBtYWNybyB1ZGl2X3Fybm5kCisgKiB0byBkbyB0aGlzLl0KKyAqIEluIGdlbmVyYWwsICduJyBpcyB0aGUgbnVtYmVyIG9mIHdvcmRzIHJlcXVpcmVkIHRvIGhvbGQgdGhlIHR5cGUsCisgKiBhbmQgJ3QnIGlzIGVpdGhlciBTLCBEIG9yIFEgZm9yIHNpbmdsZS9kb3VibGUvcXVhZC4KKyAqICAgICAgICAgICAtLSBQTU0KKyAqLworLyogRXhhbXBsZTogU1BBUkM2NDoKKyAqICNkZWZpbmUgX0ZQX01VTF9NRUFUX1MoUixYLFkpCV9GUF9NVUxfTUVBVF8xX2ltbShTLFIsWCxZKQorICogI2RlZmluZSBfRlBfTVVMX01FQVRfRChSLFgsWSkJX0ZQX01VTF9NRUFUXzFfd2lkZShELFIsWCxZLHVtdWxfcHBtbSkKKyAqICNkZWZpbmUgX0ZQX01VTF9NRUFUX1EoUixYLFkpCV9GUF9NVUxfTUVBVF8yX3dpZGUoUSxSLFgsWSx1bXVsX3BwbW0pCisgKgorICogI2RlZmluZSBfRlBfRElWX01FQVRfUyhSLFgsWSkJX0ZQX0RJVl9NRUFUXzFfaW1tKFMsUixYLFksX0ZQX0RJVl9IRUxQX2ltbSkKKyAqICNkZWZpbmUgX0ZQX0RJVl9NRUFUX0QoUixYLFkpCV9GUF9ESVZfTUVBVF8xX3VkaXYoRCxSLFgsWSkKKyAqICNkZWZpbmUgX0ZQX0RJVl9NRUFUX1EoUixYLFkpCV9GUF9ESVZfTUVBVF8yX3VkaXZfNjQoUSxSLFgsWSkKKyAqCisgKiBFeGFtcGxlOiBpMzg2OgorICogI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkgICBfRlBfTVVMX01FQVRfMV93aWRlKFMsUixYLFksX2kzODZfbXVsXzMyXzY0KQorICogI2RlZmluZSBfRlBfTVVMX01FQVRfRChSLFgsWSkgICBfRlBfTVVMX01FQVRfMl93aWRlKEQsUixYLFksX2kzODZfbXVsXzMyXzY0KQorICoKKyAqICNkZWZpbmUgX0ZQX0RJVl9NRUFUX1MoUixYLFkpICAgX0ZQX0RJVl9NRUFUXzFfdWRpdihTLFIsWCxZLF9pMzg2X2Rpdl82NF8zMikKKyAqICNkZWZpbmUgX0ZQX0RJVl9NRUFUX0QoUixYLFkpICAgX0ZQX0RJVl9NRUFUXzJfdWRpdl82NChELFIsWCxZKQorICovCisKKyNkZWZpbmUgX0ZQX01VTF9NRUFUX1MoUixYLFkpICAgX0ZQX01VTF9NRUFUXzFfd2lkZShfRlBfV0ZSQUNCSVRTX1MsUixYLFksdW11bF9wcG1tKQorI2RlZmluZSBfRlBfTVVMX01FQVRfRChSLFgsWSkgICBfRlBfTVVMX01FQVRfMl93aWRlKF9GUF9XRlJBQ0JJVFNfRCxSLFgsWSx1bXVsX3BwbW0pCisKKyNkZWZpbmUgX0ZQX0RJVl9NRUFUX1MoUixYLFkpCV9GUF9ESVZfTUVBVF8xX3VkaXYoUyxSLFgsWSkKKyNkZWZpbmUgX0ZQX0RJVl9NRUFUX0QoUixYLFkpCV9GUF9ESVZfTUVBVF8yX3VkaXYoRCxSLFgsWSkKKworLyogVGhlc2UgbWFjcm9zIGRlZmluZSB3aGF0IE5hTiBsb29rcyBsaWtlLiBUaGV5J3JlIHN1cHBvc2VkIHRvIGV4cGFuZCB0bworICogYSBjb21tYS1zZXBhcmF0ZWQgc2V0IG9mIDMyYml0IHVuc2lnbmVkIGludHMgdGhhdCBlbmNvZGUgTmFOLgorICovCisjZGVmaW5lIF9GUF9OQU5GUkFDX1MJCSgoX0ZQX1FOQU5CSVRfUyA8PCAxKSAtIDEpCisjZGVmaW5lIF9GUF9OQU5GUkFDX0QJCSgoX0ZQX1FOQU5CSVRfRCA8PCAxKSAtIDEpLCAtMQorI2RlZmluZSBfRlBfTkFORlJBQ19RCQkoKF9GUF9RTkFOQklUX1EgPDwgMSkgLSAxKSwgLTEsIC0xLCAtMQorI2RlZmluZSBfRlBfTkFOU0lHTl9TCQkwCisjZGVmaW5lIF9GUF9OQU5TSUdOX0QJCTAKKyNkZWZpbmUgX0ZQX05BTlNJR05fUQkJMAorCisjZGVmaW5lIF9GUF9LRUVQTkFORlJBQ1AgMQorCisvKiBFeGNlcHRpb24gZmxhZ3MuICBXZSB1c2UgdGhlIGJpdCBwb3NpdGlvbnMgb2YgdGhlIGFwcHJvcHJpYXRlIGJpdHMKKyAgIGluIHRoZSBGUFNDUiwgd2hpY2ggYWxzbyBjb3JyZXNwb25kIHRvIHRoZSBGRV8qIGJpdHMuICBUaGlzIG1ha2VzCisgICBldmVyeXRoaW5nIGVhc2llciA7LSkuICAqLworI2RlZmluZSBGUF9FWF9JTlZBTElEICAgICAgICAgKDEgPDwgKDMxIC0gMikpCisjZGVmaW5lIEZQX0VYX0lOVkFMSURfU05BTglFRkxBR19WWFNOQU4KKyNkZWZpbmUgRlBfRVhfSU5WQUxJRF9JU0kJRUZMQUdfVlhJU0kKKyNkZWZpbmUgRlBfRVhfSU5WQUxJRF9JREkJRUZMQUdfVlhJREkKKyNkZWZpbmUgRlBfRVhfSU5WQUxJRF9aRFoJRUZMQUdfVlhaRFoKKyNkZWZpbmUgRlBfRVhfSU5WQUxJRF9JTVoJRUZMQUdfVlhJTVoKKyNkZWZpbmUgRlBfRVhfT1ZFUkZMT1cgICAgICAgICgxIDw8ICgzMSAtIDMpKQorI2RlZmluZSBGUF9FWF9VTkRFUkZMT1cgICAgICAgKDEgPDwgKDMxIC0gNCkpCisjZGVmaW5lIEZQX0VYX0RJVlpFUk8gICAgICAgICAoMSA8PCAoMzEgLSA1KSkKKyNkZWZpbmUgRlBfRVhfSU5FWEFDVCAgICAgICAgICgxIDw8ICgzMSAtIDYpKQorCisvKiBUaGlzIG1hY3JvIGFwcGVhcnMgdG8gYmUgY2FsbGVkIHdoZW4gYm90aCBYIGFuZCBZIGFyZSBOYU5zLCBhbmQKKyAqIGhhcyB0byBjaG9vc2Ugb25lIGFuZCBjb3B5IGl0IHRvIFIuIGkzODYgZ29lcyBmb3IgdGhlIGxhcmdlciBvZiB0aGUKKyAqIHR3bywgc3BhcmM2NCBqdXN0IHBpY2tzIFkuIEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGF0IGFsbCBzbyBJJ2xsCisgKiBnbyB3aXRoIHNwYXJjNjQgYmVjYXVzZSBpdCdzIHNob3J0ZXIgOi0+ICAgLS0gUE1NCisgKi8KKyNkZWZpbmUgX0ZQX0NIT09TRU5BTihmcywgd2MsIFIsIFgsIFksIE9QKQkJXAorICBkbyB7CQkJCQkJCVwKKyAgICBSIyNfcyA9IFkjI19zOwkJCQkJXAorICAgIF9GUF9GUkFDX0NPUFlfIyN3YyhSLFkpOwkJCQlcCisgICAgUiMjX2MgPSBGUF9DTFNfTkFOOwkJCQkJXAorICB9IHdoaWxlICgwKQorCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjZGVmaW5lIF9fRlBVX0ZQU0NSCShjdXJyZW50LT50aHJlYWQuZnBzY3IudmFsKQorCisvKiBXZSBvbmx5IGFjdHVhbGx5IHdyaXRlIHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlcgorICogaWYgZXhjZXB0aW9ucyBzaWduYWxsZWQgKGlmIGFueSkgd2lsbCBub3QgdHJhcC4KKyAqLworI2RlZmluZSBfX0ZQVV9FTkFCTEVEX0VYQyBcCisoewkJCQkJCVwKKwkoX19GUFVfRlBTQ1IgPj4gMykgJiAweDFmOwlcCit9KQorCisjZGVmaW5lIF9fRlBVX1RSQVBfUChiaXRzKSBcCisJKChfX0ZQVV9FTkFCTEVEX0VYQyAmIChiaXRzKSkgIT0gMCkKKworI2RlZmluZSBfX0ZQX1BBQ0tfUyh2YWwsWCkJCQlcCisoeyAgaW50IF9fZXhjID0gX0ZQX1BBQ0tfQ0FOT05JQ0FMKFMsMSxYKTsJXAorICAgIGlmKCFfX2V4YyB8fCAhX19GUFVfVFJBUF9QKF9fZXhjKSkJCVwKKyAgICAgICAgX0ZQX1BBQ0tfUkFXXzFfUChTLHZhbCxYKTsJCVwKKyAgICBfX2V4YzsJCQkJCVwKK30pCisKKyNkZWZpbmUgX19GUF9QQUNLX0QodmFsLFgpCQkJXAorICAgZG8gewkJCQkJCQkJCVwKKwlfRlBfUEFDS19DQU5PTklDQUwoRCwgMiwgWCk7CQkJCQlcCisJaWYgKCFGUF9DVVJfRVhDRVBUSU9OUyB8fCAhX19GUFVfVFJBUF9QKEZQX0NVUl9FWENFUFRJT05TKSkJXAorCQlfRlBfUEFDS19SQVdfMl9QKEQsIHZhbCwgWCk7CQkJCVwKKyAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19GUF9QQUNLX0RTKHZhbCxYKQkJCQkJCQlcCisgICBkbyB7CQkJCQkJCQkJCVwKKwkgICBGUF9ERUNMX1MoX19YKTsJCQkJCQkJXAorCSAgIEZQX0NPTlYoUywgRCwgMSwgMiwgX19YLCBYKTsJCQkJCQlcCisJICAgX0ZQX1BBQ0tfQ0FOT05JQ0FMKFMsIDEsIF9fWCk7CQkJCQlcCisJICAgaWYgKCFGUF9DVVJfRVhDRVBUSU9OUyB8fCAhX19GUFVfVFJBUF9QKEZQX0NVUl9FWENFUFRJT05TKSkgewlcCisJCSAgIF9GUF9VTlBBQ0tfQ0FOT05JQ0FMKFMsIDEsIF9fWCk7CQkJCVwKKwkJICAgRlBfQ09OVihELCBTLCAyLCAxLCBYLCBfX1gpOwkJCQkJXAorCQkgICBfRlBfUEFDS19DQU5PTklDQUwoRCwgMiwgWCk7CQkJCQlcCisJCSAgIGlmICghRlBfQ1VSX0VYQ0VQVElPTlMgfHwgIV9fRlBVX1RSQVBfUChGUF9DVVJfRVhDRVBUSU9OUykpCVwKKwkJICAgX0ZQX1BBQ0tfUkFXXzJfUChELCB2YWwsIFgpOwkJCQkJXAorCSAgIH0JCQkJCQkJCQlcCisgICB9IHdoaWxlICgwKQorCisvKiBPYnRhaW4gdGhlIGN1cnJlbnQgcm91bmRpbmcgbW9kZS4gKi8KKyNkZWZpbmUgRlBfUk9VTkRNT0RFCQkJXAorKHsJCQkJCVwKKwlfX0ZQVV9GUFNDUiAmIDB4MzsJCVwKK30pCisKKy8qIHRoZSBhc20gZnJhZ21lbnRzIGdvIGhlcmU6IGFsbCB0aGVzZSBhcmUgdGFrZW4gZnJvbSBnbGliYy0yLjAuNSdzCisgKiBzdGRsaWIvbG9uZ2xvbmcuaAorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyogYWRkX3NzYWFhYSBpcyB1c2VkIGluIG9wLTIuaCBhbmQgc2hvdWxkIGJlIGVxdWl2YWxlbnQgdG8KKyAqICNkZWZpbmUgYWRkX3NzYWFhYShzaCxzbCxhaCxhbCxiaCxibCkgKHNoID0gYWgrYmgrICgoIHNsID0gYWwrYmwpIDwgYWwpKQorICogYWRkX3NzYWFhYShoaWdoX3N1bSwgbG93X3N1bSwgaGlnaF9hZGRlbmRfMSwgbG93X2FkZGVuZF8xLAorICogaGlnaF9hZGRlbmRfMiwgbG93X2FkZGVuZF8yKSBhZGRzIHR3byBVV3R5cGUgaW50ZWdlcnMsIGNvbXBvc2VkIGJ5CisgKiBISUdIX0FEREVORF8xIGFuZCBMT1dfQURERU5EXzEsIGFuZCBISUdIX0FEREVORF8yIGFuZCBMT1dfQURERU5EXzIKKyAqIHJlc3BlY3RpdmVseS4gIFRoZSByZXN1bHQgaXMgcGxhY2VkIGluIEhJR0hfU1VNIGFuZCBMT1dfU1VNLiAgT3ZlcmZsb3cKKyAqIChpLmUuIGNhcnJ5IG91dCkgaXMgbm90IHN0b3JlZCBhbnl3aGVyZSwgYW5kIGlzIGxvc3QuCisgKi8KKyNkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChiaCkgJiYgKGJoKSA9PSAwKQkJCQlcCisgICAgICBfX2FzbV9fICgie2ElSTR8YWRkJUk0Y30gJTEsJTMsJTRcblx0e2F6ZXxhZGR6ZX0gJTAsJTIiCQlcCisJICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAorCSAgICAgICAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKKwkgICAgIDogIiVyIiAoKFVTSXR5cGUpKGFoKSksCQkJCQlcCisJICAgICAgICIlciIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAorCSAgICAgICAickkiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCisgICAgZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGJoKSAmJiAoYmgpID09fihVU0l0eXBlKSAwKQkJXAorICAgICAgX19hc21fXyAoInthJUk0fGFkZCVJNGN9ICUxLCUzLCU0XG5cdHthbWV8YWRkbWV9ICUwLCUyIgkJXAorCSAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKKwkgICAgICAgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCisJICAgICA6ICIlciIgKChVU0l0eXBlKShhaCkpLAkJCQkJXAorCSAgICAgICAiJXIiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKKwkgICAgICAgInJJIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAorICAgIGVsc2UJCQkJCQkJCVwKKyAgICAgIF9fYXNtX18gKCJ7YSVJNXxhZGQlSTVjfSAlMSwlNCwlNVxuXHR7YWV8YWRkZX0gJTAsJTIsJTMiCQlcCisJICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAorCSAgICAgICAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKKwkgICAgIDogIiVyIiAoKFVTSXR5cGUpKGFoKSksCQkJCQlcCisJICAgICAgICJyIiAoKFVTSXR5cGUpKGJoKSksCQkJCQlcCisJICAgICAgICIlciIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAorCSAgICAgICAickkiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qIHN1Yl9kZG1tc3MgaXMgdXNlZCBpbiBvcC0yLmggYW5kIHVkaXZtb2R0aTQuYyBhbmQgc2hvdWxkIGJlIGVxdWl2YWxlbnQgdG8KKyAqICNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSAoc2ggPSBhaC1iaCAtICgoc2wgPSBhbC1ibCkgPiBhbCkpCisgKiBzdWJfZGRtbXNzKGhpZ2hfZGlmZmVyZW5jZSwgbG93X2RpZmZlcmVuY2UsIGhpZ2hfbWludWVuZCwgbG93X21pbnVlbmQsCisgKiBoaWdoX3N1YnRyYWhlbmQsIGxvd19zdWJ0cmFoZW5kKSBzdWJ0cmFjdHMgdHdvIHR3by13b3JkIFVXdHlwZSBpbnRlZ2VycywKKyAqIGNvbXBvc2VkIGJ5IEhJR0hfTUlOVUVORF8xIGFuZCBMT1dfTUlOVUVORF8xLCBhbmQgSElHSF9TVUJUUkFIRU5EXzIgYW5kCisgKiBMT1dfU1VCVFJBSEVORF8yIHJlc3BlY3RpdmVseS4gIFRoZSByZXN1bHQgaXMgcGxhY2VkIGluIEhJR0hfRElGRkVSRU5DRQorICogYW5kIExPV19ESUZGRVJFTkNFLiAgT3ZlcmZsb3cgKGkuZS4gY2Fycnkgb3V0KSBpcyBub3Qgc3RvcmVkIGFueXdoZXJlLAorICogYW5kIGlzIGxvc3QuCisgKi8KKyNkZWZpbmUgc3ViX2RkbW1zcyhzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChhaCkgJiYgKGFoKSA9PSAwKQkJCQlcCisgICAgICBfX2FzbV9fICgie3NmJUkzfHN1YmYlSTNjfSAlMSwlNCwlM1xuXHR7c2Z6ZXxzdWJmemV9ICUwLCUyIglcCisJICAgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCisJCSAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKKwkgICAgICAgOiAiciIgKChVU0l0eXBlKShiaCkpLAkJCQkJXAorCQkgInJJIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCisJCSAiciIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKKyAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYWgpICYmIChhaCkgPT1+KFVTSXR5cGUpIDApCQlcCisgICAgICBfX2FzbV9fICgie3NmJUkzfHN1YmYlSTNjfSAlMSwlNCwlM1xuXHR7c2ZtZXxzdWJmbWV9ICUwLCUyIglcCisJICAgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCisJCSAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKKwkgICAgICAgOiAiciIgKChVU0l0eXBlKShiaCkpLAkJCQkJXAorCQkgInJJIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCisJCSAiciIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKKyAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYmgpICYmIChiaCkgPT0gMCkJCQlcCisgICAgICBfX2FzbV9fICgie3NmJUkzfHN1YmYlSTNjfSAlMSwlNCwlM1xuXHR7YW1lfGFkZG1lfSAlMCwlMiIJCVwKKwkgICAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKKwkJICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAorCSAgICAgICA6ICJyIiAoKFVTSXR5cGUpKGFoKSksCQkJCQlcCisJCSAickkiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKKwkJICJyIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAorICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChiaCkgJiYgKGJoKSA9PX4oVVNJdHlwZSkgMCkJCVwKKyAgICAgIF9fYXNtX18gKCJ7c2YlSTN8c3ViZiVJM2N9ICUxLCU0LCUzXG5cdHthemV8YWRkemV9ICUwLCUyIgkJXAorCSAgICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAorCQkgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCisJICAgICAgIDogInIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKKwkJICJySSIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAorCQkgInIiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgX19hc21fXyAoIntzZiVJNHxzdWJmJUk0Y30gJTEsJTUsJTRcblx0e3NmZXxzdWJmZX0gJTAsJTMsJTIiCVwKKwkgICAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKKwkJICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAorCSAgICAgICA6ICJyIiAoKFVTSXR5cGUpKGFoKSksCQkJCQlcCisJCSAiciIgKChVU0l0eXBlKShiaCkpLAkJCQkJXAorCQkgInJJIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCisJCSAiciIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogYXNtIGZyYWdtZW50cyBmb3IgbXVsIGFuZCBkaXYgKi8KKworLyogdW11bF9wcG1tKGhpZ2hfcHJvZCwgbG93X3Byb2QsIG11bHRpcGxlciwgbXVsdGlwbGljYW5kKSBtdWx0aXBsaWVzIHR3bworICogVVd0eXBlIGludGVnZXJzIE1VTFRJUExFUiBhbmQgTVVMVElQTElDQU5ELCBhbmQgZ2VuZXJhdGVzIGEgdHdvIFVXdHlwZQorICogd29yZCBwcm9kdWN0IGluIEhJR0hfUFJPRCBhbmQgTE9XX1BST0QuCisgKi8KKyNkZWZpbmUgdW11bF9wcG1tKHBoLCBwbCwgbTAsIG0xKQkJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIFVTSXR5cGUgX19tMCA9IChtMCksIF9fbTEgPSAobTEpOwkJCQkJXAorICAgIF9fYXNtX18gKCJtdWxod3UgJTAsJTEsJTIiCQkJCQkJXAorCSAgICAgOiAiPXIiICgoVVNJdHlwZSkocGgpKQkJCQkJXAorCSAgICAgOiAiJXIiIChfX20wKSwJCQkJCQlcCisgICAgICAgICAgICAgICAiciIgKF9fbTEpKTsJCQkJCQlcCisgICAgKHBsKSA9IF9fbTAgKiBfX20xOwkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qIHVkaXZfcXJubmQocXVvdGllbnQsIHJlbWFpbmRlciwgaGlnaF9udW1lcmF0b3IsIGxvd19udW1lcmF0b3IsCisgKiBkZW5vbWluYXRvcikgZGl2aWRlcyBhIFVEV3R5cGUsIGNvbXBvc2VkIGJ5IHRoZSBVV3R5cGUgaW50ZWdlcnMKKyAqIEhJR0hfTlVNRVJBVE9SIGFuZCBMT1dfTlVNRVJBVE9SLCBieSBERU5PTUlOQVRPUiBhbmQgcGxhY2VzIHRoZSBxdW90aWVudAorICogaW4gUVVPVElFTlQgYW5kIHRoZSByZW1haW5kZXIgaW4gUkVNQUlOREVSLiAgSElHSF9OVU1FUkFUT1IgbXVzdCBiZSBsZXNzCisgKiB0aGFuIERFTk9NSU5BVE9SIGZvciBjb3JyZWN0IG9wZXJhdGlvbi4gIElmLCBpbiBhZGRpdGlvbiwgdGhlIG1vc3QKKyAqIHNpZ25pZmljYW50IGJpdCBvZiBERU5PTUlOQVRPUiBtdXN0IGJlIDEsIHRoZW4gdGhlIHByZS1wcm9jZXNzb3Igc3ltYm9sCisgKiBVRElWX05FRURTX05PUk1BTElaQVRJT04gaXMgZGVmaW5lZCB0byAxLgorICovCisjZGVmaW5lIHVkaXZfcXJubmQocSwgciwgbjEsIG4wLCBkKQkJCQkJXAorICBkbyB7CQkJCQkJCQkJXAorICAgIFVXdHlwZSBfX2QxLCBfX2QwLCBfX3ExLCBfX3EwLCBfX3IxLCBfX3IwLCBfX207CQkJXAorICAgIF9fZDEgPSBfX2xsX2hpZ2hwYXJ0IChkKTsJCQkJCQlcCisgICAgX19kMCA9IF9fbGxfbG93cGFydCAoZCk7CQkJCQkJXAorCQkJCQkJCQkJXAorICAgIF9fcjEgPSAobjEpICUgX19kMTsJCQkJCQkJXAorICAgIF9fcTEgPSAobjEpIC8gX19kMTsJCQkJCQkJXAorICAgIF9fbSA9IChVV3R5cGUpIF9fcTEgKiBfX2QwOwkJCQkJCVwKKyAgICBfX3IxID0gX19yMSAqIF9fbGxfQiB8IF9fbGxfaGlnaHBhcnQgKG4wKTsJCQkJXAorICAgIGlmIChfX3IxIDwgX19tKQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCV9fcTEtLSwgX19yMSArPSAoZCk7CQkJCQkJXAorCWlmIChfX3IxID49IChkKSkgLyogd2UgZGlkbid0IGdldCBjYXJyeSB3aGVuIGFkZGluZyB0byBfX3IxICovCVwKKwkgIGlmIChfX3IxIDwgX19tKQkJCQkJCVwKKwkgICAgX19xMS0tLCBfX3IxICs9IChkKTsJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgX19yMSAtPSBfX207CQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICBfX3IwID0gX19yMSAlIF9fZDE7CQkJCQkJCVwKKyAgICBfX3EwID0gX19yMSAvIF9fZDE7CQkJCQkJCVwKKyAgICBfX20gPSAoVVd0eXBlKSBfX3EwICogX19kMDsJCQkJCQlcCisgICAgX19yMCA9IF9fcjAgKiBfX2xsX0IgfCBfX2xsX2xvd3BhcnQgKG4wKTsJCQkJXAorICAgIGlmIChfX3IwIDwgX19tKQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCV9fcTAtLSwgX19yMCArPSAoZCk7CQkJCQkJXAorCWlmIChfX3IwID49IChkKSkJCQkJCQlcCisJICBpZiAoX19yMCA8IF9fbSkJCQkJCQlcCisJICAgIF9fcTAtLSwgX19yMCArPSAoZCk7CQkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIF9fcjAgLT0gX19tOwkJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgKHEpID0gKFVXdHlwZSkgX19xMSAqIF9fbGxfQiB8IF9fcTA7CQkJCVwKKyAgICAocikgPSBfX3IwOwkJCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTiAxCisKKyNkZWZpbmUgYWJvcnQoKQkJCQkJCQkJXAorCXJldHVybiAwCisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKyNkZWZpbmUgX19CWVRFX09SREVSIF9fQklHX0VORElBTgorI2Vsc2UKKyNkZWZpbmUgX19CWVRFX09SREVSIF9fTElUVExFX0VORElBTgorI2VuZGlmCisKKy8qIEV4Y2VwdGlvbiBmbGFncy4gKi8KKyNkZWZpbmUgRUZMQUdfSU5WQUxJRAkJKDEgPDwgKDMxIC0gMikpCisjZGVmaW5lIEVGTEFHX09WRVJGTE9XCQkoMSA8PCAoMzEgLSAzKSkKKyNkZWZpbmUgRUZMQUdfVU5ERVJGTE9XCQkoMSA8PCAoMzEgLSA0KSkKKyNkZWZpbmUgRUZMQUdfRElWWkVSTwkJKDEgPDwgKDMxIC0gNSkpCisjZGVmaW5lIEVGTEFHX0lORVhBQ1QJCSgxIDw8ICgzMSAtIDYpKQorCisjZGVmaW5lIEVGTEFHX1ZYU05BTgkJKDEgPDwgKDMxIC0gNykpCisjZGVmaW5lIEVGTEFHX1ZYSVNJCQkoMSA8PCAoMzEgLSA4KSkKKyNkZWZpbmUgRUZMQUdfVlhJREkJCSgxIDw8ICgzMSAtIDkpKQorI2RlZmluZSBFRkxBR19WWFpEWgkJKDEgPDwgKDMxIC0gMTApKQorI2RlZmluZSBFRkxBR19WWElNWgkJKDEgPDwgKDMxIC0gMTEpKQorI2RlZmluZSBFRkxBR19WWFZDCQkoMSA8PCAoMzEgLSAxMikpCisjZGVmaW5lIEVGTEFHX1ZYU09GVAkJKDEgPDwgKDMxIC0gMjEpKQorI2RlZmluZSBFRkxBR19WWFNRUlQJCSgxIDw8ICgzMSAtIDIyKSkKKyNkZWZpbmUgRUZMQUdfVlhDVkkJCSgxIDw8ICgzMSAtIDIzKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCA0ZDI4ZTFlLi4xODY2Y2VjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC01Niw5ICs1NiwxNiBAQAogCiAjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQogI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSAJKHNtcF9od19pbmRleFtzbXBfcHJvY2Vzc29yX2lkKCldKQotI2RlZmluZSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSkJKHNtcF9od19pbmRleFsoY3B1KV0pCi0jZGVmaW5lIHNldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1LCBwaHlzKVwKLQkJCQkJKHNtcF9od19pbmRleFsoY3B1KV0gPSAocGh5cykpCisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoaW50IGNwdSkKK3sKKwlyZXR1cm4gc21wX2h3X2luZGV4W2NwdV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGludCBjcHUsIGludCBwaHlzKQoreworCXNtcF9od19pbmRleFtjcHVdID0gcGh5czsKK30KICNlbmRpZgogCiBERUNMQVJFX1BFUl9DUFUoY3B1bWFza190LCBjcHVfc2libGluZ19tYXApOwpAQCAtODYsMTUgKzkzLDIxIEBACiAKICNlbHNlCiAvKiBmb3IgVVAgKi8KLSNkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkJCTAKKyNkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkJCWdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoMCkKICNkZWZpbmUgc21wX3NldHVwX2NwdV9tYXBzKCkKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogI2lmZGVmIENPTkZJR19QUEM2NAotI2RlZmluZSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKENQVSkgKHBhY2FbKENQVSldLmh3X2NwdV9pZCkKLSNkZWZpbmUgc2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChDUFUsIFZBTCkgXAotCWRvIHsgKHBhY2FbKENQVSldLmh3X2NwdV9pZCA9IChWQUwpKTsgfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoaW50IGNwdSkKK3sKKwlyZXR1cm4gcGFjYVtjcHVdLmh3X2NwdV9pZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoaW50IGNwdSwgaW50IHBoeXMpCit7CisJcGFjYVtjcHVdLmh3X2NwdV9pZCA9IHBoeXM7Cit9CiAKIGV4dGVybiB2b2lkIHNtcF9yZWxlYXNlX2NwdXModm9pZCk7CiAKQEAgLTEwMiwxMCArMTE1LDE3IEBACiAvKiAzMi1iaXQgKi8KICNpZm5kZWYgQ09ORklHX1NNUAogZXh0ZXJuIGludCBib290X2NwdWlkX3BoeXM7Ci0jZGVmaW5lIGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1KSAJYm9vdF9jcHVpZF9waHlzCi0jZGVmaW5lIHNldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1LCBwaHlzKQotI2VuZGlmCi0jZW5kaWYKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoaW50IGNwdSkKK3sKKwlyZXR1cm4gYm9vdF9jcHVpZF9waHlzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpbnQgY3B1LCBpbnQgcGh5cykKK3sKKwlib290X2NwdWlkX3BoeXMgPSBwaHlzOworfQorI2VuZGlmIC8qICFDT05GSUdfU01QICovCisjZW5kaWYgLyogIUNPTkZJR19QUEM2NCAqLwogCiBleHRlcm4gaW50IHNtdF9lbmFibGVkX2F0X2Jvb3Q7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdGF0ZnMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdGF0ZnMuaAppbmRleCA2NzAyNDAyLi41MjQ0ODM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3RhdGZzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0YXRmcy5oCkBAIC0xLDYwICsxLDYgQEAKICNpZm5kZWYgX0FTTV9QT1dFUlBDX1NUQVRGU19ICiAjZGVmaW5lIF9BU01fUE9XRVJQQ19TVEFURlNfSAogCi0vKiBGb3IgcHBjMzIgd2UganVzdCB1c2UgdGhlIGdlbmVyaWMgZGVmaW5pdGlvbnMsIG5vdCBzbyBzaW1wbGUgb24gcHBjNjQgKi8KLQotI2lmbmRlZiBfX3Bvd2VycGM2NF9fCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3RhdGZzLmg+Ci0jZWxzZQogCi0jaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci10eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAlmc2lkX3Q7Ci0jZW5kaWYKLQotLyoKLSAqIFdlJ3JlIGFscmVhZHkgNjQtYml0LCBzbyBkdXBsaWNhdGUgdGhlIGRlZmluaXRpb24KLSAqLwotc3RydWN0IHN0YXRmcyB7Ci0JbG9uZyBmX3R5cGU7Ci0JbG9uZyBmX2JzaXplOwotCWxvbmcgZl9ibG9ja3M7Ci0JbG9uZyBmX2JmcmVlOwotCWxvbmcgZl9iYXZhaWw7Ci0JbG9uZyBmX2ZpbGVzOwotCWxvbmcgZl9mZnJlZTsKLQlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotCWxvbmcgZl9uYW1lbGVuOwotCWxvbmcgZl9mcnNpemU7Ci0JbG9uZyBmX3NwYXJlWzVdOwotfTsKLQotc3RydWN0IHN0YXRmczY0IHsKLQlsb25nIGZfdHlwZTsKLQlsb25nIGZfYnNpemU7Ci0JbG9uZyBmX2Jsb2NrczsKLQlsb25nIGZfYmZyZWU7Ci0JbG9uZyBmX2JhdmFpbDsKLQlsb25nIGZfZmlsZXM7Ci0JbG9uZyBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JbG9uZyBmX25hbWVsZW47Ci0JbG9uZyBmX2Zyc2l6ZTsKLQlsb25nIGZfc3BhcmVbNV07Ci19OwotCi1zdHJ1Y3QgY29tcGF0X3N0YXRmczY0IHsKLQlfX3UzMiBmX3R5cGU7Ci0JX191MzIgZl9ic2l6ZTsKLQlfX3U2NCBmX2Jsb2NrczsKLQlfX3U2NCBmX2JmcmVlOwotCV9fdTY0IGZfYmF2YWlsOwotCV9fdTY0IGZfZmlsZXM7Ci0JX191NjQgZl9mZnJlZTsKLQlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotCV9fdTMyIGZfbmFtZWxlbjsKLQlfX3UzMiBmX2Zyc2l6ZTsKLQlfX3UzMiBmX3NwYXJlWzVdOwotfTsKLSNlbmRpZiAvKiAhIF9fcG93ZXJwYzY0X18gKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCmluZGV4IGY2Y2M3YTQuLjgwM2RlZjIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCkBAIC0zMiw3ICszMiw3IEBACiBDT01QQVRfU1lTKHB0cmFjZSkKIFNZU0NBTExfU1BVKGFsYXJtKQogT0xEU1lTKGZzdGF0KQotQ09NUEFUX1NZUyhwYXVzZSkKK1NZU0NBTEwocGF1c2UpCiBDT01QQVRfU1lTKHV0aW1lKQogU1lTQ0FMTChuaV9zeXNjYWxsKQogU1lTQ0FMTChuaV9zeXNjYWxsKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiZmx1c2guaAppbmRleCAzNjFjZDVjLi5hMmM2YmZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKIGV4dGVybiB2b2lkIF90bGJpZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBwaWQpOworZXh0ZXJuIHZvaWQgX3RsYmlsX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIF90bGJpbF9waWQodW5zaWduZWQgaW50IHBpZCk7CitleHRlcm4gdm9pZCBfdGxiaWxfdmEodW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgcGlkKTsKIAogI2lmIGRlZmluZWQoQ09ORklHXzQweCkgfHwgZGVmaW5lZChDT05GSUdfOHh4KQogI2RlZmluZSBfdGxiaWEoKQlhc20gdm9sYXRpbGUgKCJ0bGJpYTsgc3luYyIgOiA6IDogIm1lbW9yeSIpCkBAIC0zOCwzMSArNDEsMzEgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlfdGxiaWEoKTsKKwlfdGxiaWxfcGlkKG1tLT5jb250ZXh0LmlkKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCSAgdW5zaWduZWQgbG9uZyB2bWFkZHIpCiB7Ci0JX3RsYmllKHZtYWRkciwgdm1hID8gdm1hLT52bV9tbS0+Y29udGV4dC5pZCA6IDApOworCV90bGJpbF92YSh2bWFkZHIsIHZtYSA/IHZtYS0+dm1fbW0tPmNvbnRleHQuaWQgOiAwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlX25vaGFzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQogewotCV90bGJpZSh2bWFkZHIsIHZtYSA/IHZtYS0+dm1fbW0tPmNvbnRleHQuaWQgOiAwKTsKKwlmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0JX3RsYmlhKCk7CisJX3RsYmlsX3BpZCh2bWEtPnZtX21tLT5jb250ZXh0LmlkKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCQkJICB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlfdGxiaWEoKTsKKwlfdGxiaWxfcGlkKDApOwogfQogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19QUEMzMikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90eXBlcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggZDMzNzRiYy4uYzAwNGMxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3R5cGVzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3R5cGVzLmgKQEAgLTQ4LDE0ICs0OCw3IEBACiAKIHR5cGVkZWYgX192ZWN0b3IxMjggdmVjdG9yMTI4OwogCi0vKiBQaHlzaWNhbCBhZGRyZXNzIHVzZWQgYnkgc29tZSBJTyBmdW5jdGlvbnMgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkgfHwgZGVmaW5lZChDT05GSUdfUEhZU182NEJJVCkKLXR5cGVkZWYgdTY0IHBoeXNfYWRkcl90OwotI2Vsc2UKLXR5cGVkZWYgdTMyIHBoeXNfYWRkcl90OwotI2VuZGlmCi0KLSNpZmRlZiBfX3Bvd2VycGM2NF9fCisjaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKSB8fCBkZWZpbmVkKENPTkZJR19QSFlTXzY0QklUKQogdHlwZWRlZiB1NjQgZG1hX2FkZHJfdDsKICNlbHNlCiB0eXBlZGVmIHUzMiBkbWFfYWRkcl90OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC8uZ2l0aWdub3JlIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZjY3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAordm1saW51eC5sZHMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCmluZGV4IDk0NmRhZWEuLmZkYjU4MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjgsMTMgKzI4LDE0IEBACiBvYmoteQkJCQk6PSBjcHV0YWJsZS5vIHB0cmFjZS5vIHN5c2NhbGxzLm8gXAogCQkJCSAgIGlycS5vIGFsaWduLm8gc2lnbmFsXzMyLm8gcG1jLm8gdmRzby5vIFwKIAkJCQkgICBpbml0X3Rhc2subyBwcm9jZXNzLm8gc3lzdGJsLm8gaWRsZS5vIFwKLQkJCQkgICBzaWduYWwubworCQkJCSAgIHNpZ25hbC5vIHN5c2ZzLm8KIG9iai15CQkJCSs9IHZkc28zMi8KIG9iai0kKENPTkZJR19QUEM2NCkJCSs9IHNldHVwXzY0Lm8gc3lzX3BwYzMyLm8gXAogCQkJCSAgIHNpZ25hbF82NC5vIHB0cmFjZTMyLm8gXAogCQkJCSAgIHBhY2EubyBjcHVfc2V0dXBfcHBjOTcwLm8gXAogCQkJCSAgIGNwdV9zZXR1cF9wYTZ0Lm8gXAotCQkJCSAgIGZpcm13YXJlLm8gc3lzZnMubyBudnJhbV82NC5vCisJCQkJICAgZmlybXdhcmUubyBudnJhbV82NC5vCitvYmo2NC0kKENPTkZJR19SRUxPQ0FUQUJMRSkJKz0gcmVsb2NfNjQubwogb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gdmRzbzY0Lwogb2JqLSQoQ09ORklHX0FMVElWRUMpCQkrPSB2ZWNlbXUubyB2ZWN0b3Iubwogb2JqLSQoQ09ORklHX1BQQ185NzBfTkFQKQkrPSBpZGxlX3Bvd2VyNC5vCkBAIC02OSwxMCArNzAsMTAgQEAKIGV4dHJhLXkJCQkJKz0gdm1saW51eC5sZHMKIAogb2JqLXkJCQkJKz0gdGltZS5vIHByb20ubyB0cmFwcy5vIHNldHVwLWNvbW1vbi5vIFwKLQkJCQkgICB1ZGJnLm8gbWlzYy5vIGlvLm8gXAorCQkJCSAgIHVkYmcubyBtaXNjLm8gaW8ubyBkbWEubyBcCiAJCQkJICAgbWlzY18kKENPTkZJR19XT1JEX1NJWkUpLm8KIG9iai0kKENPTkZJR19QUEMzMikJCSs9IGVudHJ5XzMyLm8gc2V0dXBfMzIubwotb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gZG1hXzY0Lm8gaW9tbXUubworb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gZG1hLWlvbW11Lm8gaW9tbXUubwogb2JqLSQoQ09ORklHX0tHREIpCQkrPSBrZ2RiLm8KIG9iai0kKENPTkZJR19QUENfTVVMVElQTEFURk9STSkJKz0gcHJvbV9pbml0Lm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gcHBjX2tzeW1zLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA5Mjc2OGQzLi43NWM1ZGQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMjIsNiArMTIyLDggQEAKIAlERUZJTkUoUEFDQVNUQUJSUiwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzdGFiX3JyKSk7CiAJREVGSU5FKFBBQ0FSMSwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzYXZlZF9yMSkpOwogCURFRklORShQQUNBVE9DLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGtlcm5lbF90b2MpKTsKKwlERUZJTkUoUEFDQUtCQVNFLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGtlcm5lbGJhc2UpKTsKKwlERUZJTkUoUEFDQUtNU1IsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwga2VybmVsX21zcikpOwogCURFRklORShQQUNBU09GVElSUUVOLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHNvZnRfZW5hYmxlZCkpOwogCURFRklORShQQUNBSEFSRElSUUVOLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGhhcmRfZW5hYmxlZCkpOwogCURFRklORShQQUNBU0xCQ0FDSEUsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc2xiX2NhY2hlKSk7CkBAIC0zNTAsMTQgKzM1MiwxNSBAQAogI2VuZGlmCiAKIAlERUZJTkUoUEdEX1RBQkxFX1NJWkUsIFBHRF9UQUJMRV9TSVpFKTsKKwlERUZJTkUoUFRFX1NJWkUsIHNpemVvZihwdGVfdCkpOwogCiAjaWZkZWYgQ09ORklHX0tWTQogCURFRklORShUTEJFX0JZVEVTLCBzaXplb2Yoc3RydWN0IHRsYmUpKTsKIAogCURFRklORShWQ1BVX0hPU1RfU1RBQ0ssIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ob3N0X3N0YWNrKSk7CiAJREVGSU5FKFZDUFVfSE9TVF9QSUQsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ob3N0X3BpZCkpOwotCURFRklORShWQ1BVX0hPU1RfVExCLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF90bGIpKTsKIAlERUZJTkUoVkNQVV9TSEFET1dfVExCLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guc2hhZG93X3RsYikpOworCURFRklORShWQ1BVX1NIQURPV19NT0QsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5zaGFkb3dfdGxiX21vZCkpOwogCURFRklORShWQ1BVX0dQUlMsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ncHIpKTsKIAlERUZJTkUoVkNQVV9MUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmxyKSk7CiAJREVGSU5FKFZDUFVfQ1IsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5jcikpOwpAQCAtMzY5LDcgKzM3Miw3IEBACiAJREVGSU5FKFZDUFVfU1BSRzUsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5zcHJnNSkpOwogCURFRklORShWQ1BVX1NQUkc2LCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guc3ByZzYpKTsKIAlERUZJTkUoVkNQVV9TUFJHNywgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnNwcmc3KSk7Ci0JREVGSU5FKFZDUFVfUElELCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2gucGlkKSk7CisJREVGSU5FKFZDUFVfU0hBRE9XX1BJRCwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnNoYWRvd19waWQpKTsKIAogCURFRklORShWQ1BVX0xBU1RfSU5TVCwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmxhc3RfaW5zdCkpOwogCURFRklORShWQ1BVX0ZBVUxUX0RFQVIsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5mYXVsdF9kZWFyKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMKaW5kZXggZDhmMDMyOS4uMjZlNTg2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9idGV4dC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYwpAQCAtNDQyLDI4ICs0NDIsMjYgQEAKIAogdm9pZCBidGV4dF9kcmF3aGV4KHVuc2lnbmVkIGxvbmcgdikKIHsKLQljaGFyICpoZXhfdGFibGUgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0KIAlpZiAoIWJvb3RfdGV4dF9tYXBwZWQpCiAJCXJldHVybjsKICNpZmRlZiBDT05GSUdfUFBDNjQKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gNjApICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDU2KSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiA1MikgJiAweDAwMDAwMDBGVUxdKTsKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gNDgpICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDQ0KSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiA0MCkgJiAweDAwMDAwMDBGVUxdKTsKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gMzYpICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDMyKSAmIDB4MDAwMDAwMEZVTF0pOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfaGkodiA+PiA1NikpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfbG8odiA+PiA1NikpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfaGkodiA+PiA0OCkpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfbG8odiA+PiA0OCkpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfaGkodiA+PiA0MCkpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfbG8odiA+PiA0MCkpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfaGkodiA+PiAzMikpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfbG8odiA+PiAzMikpOwogI2VuZGlmCi0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDI4KSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiAyNCkgJiAweDAwMDAwMDBGVUxdKTsKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gMjApICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDE2KSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiAxMikgJiAweDAwMDAwMDBGVUxdKTsKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gIDgpICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+ICA0KSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiAgMCkgJiAweDAwMDAwMDBGVUxdKTsKKwlidGV4dF9kcmF3Y2hhcihoZXhfYXNjX2hpKHYgPj4gMjQpKTsKKwlidGV4dF9kcmF3Y2hhcihoZXhfYXNjX2xvKHYgPj4gMjQpKTsKKwlidGV4dF9kcmF3Y2hhcihoZXhfYXNjX2hpKHYgPj4gMTYpKTsKKwlidGV4dF9kcmF3Y2hhcihoZXhfYXNjX2xvKHYgPj4gMTYpKTsKKwlidGV4dF9kcmF3Y2hhcihoZXhfYXNjX2hpKHYgPj4gOCkpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfbG8odiA+PiA4KSk7CisJYnRleHRfZHJhd2NoYXIoaGV4X2FzY19oaSh2KSk7CisJYnRleHRfZHJhd2NoYXIoaGV4X2FzY19sbyh2KSk7CiAJYnRleHRfZHJhd2NoYXIoJyAnKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcHBjOTcwLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wcGM5NzAuUwppbmRleCBiZjExOGMzLi4yN2YyNTA3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wcGM5NzAuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wcGM5NzAuUwpAQCAtMTEwLDcgKzExMCw3IEBACiAJaXN5bmMKIAogCS8qIFNhdmUgYXdheSBjcHUgc3RhdGUgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjUsY3B1X3N0YXRlX3N0b3JhZ2UpCisJTE9BRF9SRUdfQUREUihyNSxjcHVfc3RhdGVfc3RvcmFnZSkKIAogCS8qIFNhdmUgSElEMCwxLDQgYW5kIDUgKi8KIAltZnNwcglyMyxTUFJOX0hJRDAKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXJsZGljbC4JcjAscjAsNCw2MwogCWJlcWxyCiAKLQlMT0FEX1JFR19JTU1FRElBVEUocjUsY3B1X3N0YXRlX3N0b3JhZ2UpCisJTE9BRF9SRUdfQUREUihyNSxjcHVfc3RhdGVfc3RvcmFnZSkKIAkvKiBCZWZvcmUgYWNjZXNzaW5nIG1lbW9yeSwgd2UgbWFrZSBzdXJlIHJtX2NpIGlzIGNsZWFyICovCiAJbGkJcjAsMAogCW1mc3ByCXIzLFNQUk5fSElENApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDI1YzI3M2MuLmU3MGQwNDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTYxMCw2ICs2MTAsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MGN4LAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKQEAgLTYyMyw2ICs2MjQsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MGN4LAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKQEAgLTYzNiw2ICs2MzgsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MGN4LAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKQEAgLTY0OSw2ICs2NTIsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCkBAIC02NjIsNiArNjY2LDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDQsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLApAQCAtNjc1LDYgKzY4MCw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA0LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19JQk0sCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzUwLAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKQEAgLTY4OCw2ICs2OTQsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCkBAIC03MDEsNiArNzA4LDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDQsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTBmeCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCkBAIC03MTQsNiArNzIyLDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDQsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTBmeCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCkBAIC03MjcsNiArNzM2LDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDQsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLApAQCAtNzQxLDYgKzc1MSw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA0LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDAwLAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzQwMCIsCkBAIC03NTUsNiArNzY2LDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDQsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0c0LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc0MDAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NDAwIiwKQEAgLTc2OSw2ICs3ODEsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQxMCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc0MDAiLApAQCAtNzgzLDYgKzc5Niw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA2LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDV4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzQ1MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKQEAgLTc5OSw2ICs4MTMsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNiwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQ1eCwKIAkJLm9wcm9maWxlX2NwdV90eXBlICAgICAgPSAicHBjLzc0NTAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCkBAIC04MTUsNiArODMwLDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDYsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0c0LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc0NXgsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NDUwIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LApAQCAtODMxLDYgKzg0Nyw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA2LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDV4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzQ1MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKQEAgLTg0Nyw2ICs4NjQsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNiwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQ1eCwKIAkJLm9wcm9maWxlX2NwdV90eXBlICAgICAgPSAicHBjLzc0NTAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCkBAIC04NjMsNiArODgxLDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDYsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0c0LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc0NXgsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NDUwIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LApAQCAtODc5LDYgKzg5OCw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA2LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDV4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzQ1MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKQEAgLTg5NSw2ICs5MTUsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNiwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQ1eCwKIAkJLm9wcm9maWxlX2NwdV90eXBlICAgICAgPSAicHBjLzc0NTAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCkBAIC05MTAsNiArOTMxLDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDYsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0c0LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc0NXgsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NDUwIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LApAQCAtOTI2LDYgKzk0OCw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA2LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDV4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzQ1MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKQEAgLTk0Miw2ICs5NjUsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNiwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQ1eCwKIAkJLm9wcm9maWxlX2NwdV90eXBlICAgICAgPSAicHBjLzc0NTAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCmluZGV4IGEzMjNjOWIuLjk3ZTA1NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCkBAIC0yNyw2ICsyNyw5IEBACiAjZGVmaW5lIERCRyhmbXQuLi4pCiAjZW5kaWYKIAorLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCit1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKwogdm9pZCBfX2luaXQgcmVzZXJ2ZV9rZHVtcF90cmFtcG9saW5lKHZvaWQpCiB7CiAJbG1iX3Jlc2VydmUoMCwgS0RVTVBfUkVTRVJWRV9MSU1JVCk7CkBAIC02Niw3ICs2OSwxMSBAQAogCURCRygiIDwtIHNldHVwX2tkdW1wX3RyYW1wb2xpbmUoKVxuIik7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKKy8qCisgKiBOb3RlOiBlbGZjb3JlaGRyX2FkZHIgaXMgbm90IGp1c3QgbGltaXRlZCB0byB2bWNvcmUuIEl0IGlzIGFsc28gdXNlZCBieQorICogaXNfa2R1bXBfa2VybmVsKCkgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBib290aW5nIGFmdGVyIGEgcGFuaWMuIEhlbmNlCisgKiBpZmRlZiBpdCB1bmRlciBDT05GSUdfQ1JBU0hfRFVNUCBhbmQgbm90IENPTkZJR19QUk9DX1ZNQ09SRS4KKyAqLwogc3RhdGljIGludCBfX2luaXQgcGFyc2VfZWxmY29yZWhkcihjaGFyICpwKQogewogCWlmIChwKQpAQCAtNzUsNyArODIsNiBAQAogCXJldHVybiAxOwogfQogX19zZXR1cCgiZWxmY29yZWhkcj0iLCBwYXJzZV9lbGZjb3JlaGRyKTsKLSNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9zYXZlbWF4bWVtKGNoYXIgKnApCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTI0OGY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBQcm92aWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBETUEgbWFwcGluZyBjYWxsYmFja3MgZm9yCisgKiBidXNzZXMgdXNpbmcgdGhlIGlvbW11IGluZnJhc3RydWN0dXJlCisgKi8KKworI2luY2x1ZGUgPGFzbS9pb21tdS5oPgorCisvKgorICogR2VuZXJpYyBpb21tdSBpbXBsZW1lbnRhdGlvbgorICovCisKKy8qIEFsbG9jYXRlcyBhIGNvbnRpZ3VvdXMgcmVhbCBidWZmZXIgYW5kIGNyZWF0ZXMgbWFwcGluZ3Mgb3ZlciBpdC4KKyAqIFJldHVybnMgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGFuZCBzZXRzIGRtYV9oYW5kbGUKKyAqIHRvIHRoZSBkbWEgYWRkcmVzcyAobWFwcGluZykgb2YgdGhlIGZpcnN0IHBhZ2UuCisgKi8KK3N0YXRpYyB2b2lkICpkbWFfaW9tbXVfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQoreworCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudChkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNpemUsCisJCQkJICAgIGRtYV9oYW5kbGUsIGRldmljZV90b19tYXNrKGRldiksIGZsYWcsCisJCQkJICAgIGRldl90b19ub2RlKGRldikpOworfQorCitzdGF0aWMgdm9pZCBkbWFfaW9tbXVfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQoreworCWlvbW11X2ZyZWVfY29oZXJlbnQoZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOworfQorCisvKiBDcmVhdGVzIFRDRXMgZm9yIGEgdXNlciBwcm92aWRlZCBidWZmZXIuICBUaGUgdXNlciBidWZmZXIgbXVzdCBiZQorICogY29udGlndW91cyByZWFsIGtlcm5lbCBzdG9yYWdlIChub3Qgdm1hbGxvYykuICBUaGUgYWRkcmVzcyBvZiB0aGUgYnVmZmVyCisgKiBwYXNzZWQgaGVyZSBpcyB0aGUga2VybmVsICh2aXJ0dWFsKSBhZGRyZXNzIG9mIHRoZSBidWZmZXIuICBUaGUgYnVmZmVyCisgKiBuZWVkIG5vdCBiZSBwYWdlIGFsaWduZWQsIHRoZSBkbWFfYWRkcl90IHJldHVybmVkIHdpbGwgcG9pbnQgdG8gdGhlIHNhbWUKKyAqIGJ5dGUgd2l0aGluIHRoZSBwYWdlIGFzIHZhZGRyLgorICovCitzdGF0aWMgZG1hX2FkZHJfdCBkbWFfaW9tbXVfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLAorCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCSAgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlyZXR1cm4gaW9tbXVfbWFwX3NpbmdsZShkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHZhZGRyLCBzaXplLAorCQkJCWRldmljZV90b19tYXNrKGRldiksIGRpcmVjdGlvbiwgYXR0cnMpOworfQorCisKK3N0YXRpYyB2b2lkIGRtYV9pb21tdV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJICAgc2l6ZV90IHNpemUsCisJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCWlvbW11X3VubWFwX3NpbmdsZShkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24sCisJCQkgICBhdHRycyk7Cit9CisKKworc3RhdGljIGludCBkbWFfaW9tbXVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQkgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCXJldHVybiBpb21tdV9tYXBfc2coZGV2LCBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBzZ2xpc3QsIG5lbGVtcywKKwkJCSAgICBkZXZpY2VfdG9fbWFzayhkZXYpLCBkaXJlY3Rpb24sIGF0dHJzKTsKK30KKworc3RhdGljIHZvaWQgZG1hX2lvbW11X3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJaW9tbXVfdW5tYXBfc2coZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2dsaXN0LCBuZWxlbXMsIGRpcmVjdGlvbiwKKwkJICAgICAgIGF0dHJzKTsKK30KKworLyogV2Ugc3VwcG9ydCBETUEgdG8vZnJvbSBhbnkgbWVtb3J5IHBhZ2UgdmlhIHRoZSBpb21tdSAqLworc3RhdGljIGludCBkbWFfaW9tbXVfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZGV2LT5hcmNoZGF0YS5kbWFfZGF0YTsKKworCWlmICghdGJsIHx8IHRibC0+aXRfb2Zmc2V0ID4gbWFzaykgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiV2FybmluZzogSU9NTVUgb2Zmc2V0IHRvbyBiaWcgZm9yIGRldmljZSBtYXNrXG4iKTsKKwkJaWYgKHRibCkKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAibWFzazogMHglMDhseCwgdGFibGUgb2Zmc2V0OiAweCUwOGx4XG4iLAorCQkJCW1hc2ssIHRibC0+aXRfb2Zmc2V0KTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAibWFzazogMHglMDhseCwgdGFibGUgdW5hdmFpbGFibGVcbiIsCisJCQkJbWFzayk7CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RydWN0IGRtYV9tYXBwaW5nX29wcyBkbWFfaW9tbXVfb3BzID0geworCS5hbGxvY19jb2hlcmVudAk9IGRtYV9pb21tdV9hbGxvY19jb2hlcmVudCwKKwkuZnJlZV9jb2hlcmVudAk9IGRtYV9pb21tdV9mcmVlX2NvaGVyZW50LAorCS5tYXBfc2luZ2xlCT0gZG1hX2lvbW11X21hcF9zaW5nbGUsCisJLnVubWFwX3NpbmdsZQk9IGRtYV9pb21tdV91bm1hcF9zaW5nbGUsCisJLm1hcF9zZwkJPSBkbWFfaW9tbXVfbWFwX3NnLAorCS51bm1hcF9zZwk9IGRtYV9pb21tdV91bm1hcF9zZywKKwkuZG1hX3N1cHBvcnRlZAk9IGRtYV9pb21tdV9kbWFfc3VwcG9ydGVkLAorfTsKK0VYUE9SVF9TWU1CT0woZG1hX2lvbW11X29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTYyZGFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYwpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBQcm92aWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBETUEgbWFwcGluZyBjYWxsYmFja3MgZm9yCisgKiBkaXJlY3RseSBtYXBwZWQgYnVzc2VzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGFzbS9idWcuaD4KKyNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KKworLyoKKyAqIEdlbmVyaWMgZGlyZWN0IERNQSBpbXBsZW1lbnRhdGlvbgorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgYSBwZXItZGV2aWNlIG9mZnNldCB0aGF0IGNhbiBiZSBhcHBsaWVkIGlmCisgKiB0aGUgYWRkcmVzcyBhdCB3aGljaCBtZW1vcnkgaXMgdmlzaWJsZSB0byBkZXZpY2VzIGlzIG5vdCAwLiBQbGF0Zm9ybSBjb2RlCisgKiBjYW4gc2V0IGFyY2hkYXRhLmRtYV9kYXRhIHRvIGFuIHVuc2lnbmVkIGxvbmcgaG9sZGluZyB0aGUgb2Zmc2V0LiBCeQorICogZGVmYXVsdCB0aGUgb2Zmc2V0IGlzIFBDSV9EUkFNX09GRlNFVC4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWlmIChkZXYpCisJCXJldHVybiAodW5zaWduZWQgbG9uZylkZXYtPmFyY2hkYXRhLmRtYV9kYXRhOworCisJcmV0dXJuIFBDSV9EUkFNX09GRlNFVDsKK30KKwordm9pZCAqZG1hX2RpcmVjdF9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpCit7CisJdm9pZCAqcmV0OworI2lmZGVmIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUKKwlyZXQgPSBfX2RtYV9hbGxvY19jb2hlcmVudChzaXplLCBkbWFfaGFuZGxlLCBmbGFnKTsKKwlpZiAocmV0ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCSpkbWFfaGFuZGxlICs9IGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworCXJldHVybiByZXQ7CisjZWxzZQorCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBub2RlID0gZGV2X3RvX25vZGUoZGV2KTsKKworCS8qIGlnbm9yZSByZWdpb24gc3BlY2lmaWVycyAqLworCWZsYWcgICY9IH4oX19HRlBfSElHSE1FTSk7CisKKwlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBmbGFnLCBnZXRfb3JkZXIoc2l6ZSkpOworCWlmIChwYWdlID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCXJldCA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwltZW1zZXQocmV0LCAwLCBzaXplKTsKKwkqZG1hX2hhbmRsZSA9IHZpcnRfdG9fYWJzKHJldCkgKyBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKKworCXJldHVybiByZXQ7CisjZW5kaWYKK30KKwordm9pZCBkbWFfZGlyZWN0X2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCit7CisjaWZkZWYgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRQorCV9fZG1hX2ZyZWVfY29oZXJlbnQoc2l6ZSwgdmFkZHIpOworI2Vsc2UKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgZG1hX2RpcmVjdF9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJCSAgICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IGk7CisKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZW50cywgaSkgeworCQlzZy0+ZG1hX2FkZHJlc3MgPSBzZ19waHlzKHNnKSArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworCQlzZy0+ZG1hX2xlbmd0aCA9IHNnLT5sZW5ndGg7CisJfQorCisJcmV0dXJuIG5lbnRzOworfQorCitzdGF0aWMgdm9pZCBkbWFfZGlyZWN0X3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQlpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKK30KKworc3RhdGljIGludCBkbWFfZGlyZWN0X2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwkvKiBDb3VsZCBiZSBpbXByb3ZlZCB0byBjaGVjayBmb3IgbWVtb3J5IHRob3VnaCBpdCBiZXR0ZXIgYmUKKwkgKiBkb25lIHZpYSBzb21lIGdsb2JhbCBzbyBwbGF0Zm9ybXMgY2FuIHNldCB0aGUgbGltaXQgaW4gY2FzZQorCSAqIHRoZXkgaGF2ZSBsaW1pdGVkIERNQSB3aW5kb3dzCisJICovCisJcmV0dXJuIG1hc2sgPj0gRE1BXzMyQklUX01BU0s7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfZGlyZWN0X21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJICAgICBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CisJX19kbWFfc3luY19wYWdlKHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyKTsKKwlyZXR1cm4gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0ICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZGlyZWN0X3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKKwkJCQkJIHNpemVfdCBzaXplLAorCQkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7Cit9CisKK3N0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2RpcmVjdF9vcHMgPSB7CisJLmFsbG9jX2NvaGVyZW50CT0gZG1hX2RpcmVjdF9hbGxvY19jb2hlcmVudCwKKwkuZnJlZV9jb2hlcmVudAk9IGRtYV9kaXJlY3RfZnJlZV9jb2hlcmVudCwKKwkubWFwX3NnCQk9IGRtYV9kaXJlY3RfbWFwX3NnLAorCS51bm1hcF9zZwk9IGRtYV9kaXJlY3RfdW5tYXBfc2csCisJLmRtYV9zdXBwb3J0ZWQJPSBkbWFfZGlyZWN0X2RtYV9zdXBwb3J0ZWQsCisJLm1hcF9wYWdlCT0gZG1hX2RpcmVjdF9tYXBfcGFnZSwKKwkudW5tYXBfcGFnZQk9IGRtYV9kaXJlY3RfdW5tYXBfcGFnZSwKK307CitFWFBPUlRfU1lNQk9MKGRtYV9kaXJlY3Rfb3BzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYV82NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTU3MDhlLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hXzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycG9yYXRpb24KLSAqCi0gKiBQcm92aWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBETUEgbWFwcGluZyBjYWxsYmFja3MgZm9yCi0gKiBkaXJlY3RseSBtYXBwZWQgYnVzc2VzIGFuZCBidXNzZXMgdXNpbmcgdGhlIGlvbW11IGluZnJhc3RydWN0dXJlCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8YXNtL2J1Zy5oPgotI2luY2x1ZGUgPGFzbS9pb21tdS5oPgotI2luY2x1ZGUgPGFzbS9hYnNfYWRkci5oPgotCi0vKgotICogR2VuZXJpYyBpb21tdSBpbXBsZW1lbnRhdGlvbgotICovCi0KLS8qIEFsbG9jYXRlcyBhIGNvbnRpZ3VvdXMgcmVhbCBidWZmZXIgYW5kIGNyZWF0ZXMgbWFwcGluZ3Mgb3ZlciBpdC4KLSAqIFJldHVybnMgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGFuZCBzZXRzIGRtYV9oYW5kbGUKLSAqIHRvIHRoZSBkbWEgYWRkcmVzcyAobWFwcGluZykgb2YgdGhlIGZpcnN0IHBhZ2UuCi0gKi8KLXN0YXRpYyB2b2lkICpkbWFfaW9tbXVfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQotewotCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudChkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNpemUsCi0JCQkJICAgIGRtYV9oYW5kbGUsIGRldmljZV90b19tYXNrKGRldiksIGZsYWcsCi0JCQkJICAgIGRldi0+YXJjaGRhdGEubnVtYV9ub2RlKTsKLX0KLQotc3RhdGljIHZvaWQgZG1hX2lvbW11X2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLQlpb21tdV9mcmVlX2NvaGVyZW50KGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNpemUsIHZhZGRyLCBkbWFfaGFuZGxlKTsKLX0KLQotLyogQ3JlYXRlcyBUQ0VzIGZvciBhIHVzZXIgcHJvdmlkZWQgYnVmZmVyLiAgVGhlIHVzZXIgYnVmZmVyIG11c3QgYmUKLSAqIGNvbnRpZ3VvdXMgcmVhbCBrZXJuZWwgc3RvcmFnZSAobm90IHZtYWxsb2MpLiAgVGhlIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlcgotICogcGFzc2VkIGhlcmUgaXMgdGhlIGtlcm5lbCAodmlydHVhbCkgYWRkcmVzcyBvZiB0aGUgYnVmZmVyLiAgVGhlIGJ1ZmZlcgotICogbmVlZCBub3QgYmUgcGFnZSBhbGlnbmVkLCB0aGUgZG1hX2FkZHJfdCByZXR1cm5lZCB3aWxsIHBvaW50IHRvIHRoZSBzYW1lCi0gKiBieXRlIHdpdGhpbiB0aGUgcGFnZSBhcyB2YWRkci4KLSAqLwotc3RhdGljIGRtYV9hZGRyX3QgZG1hX2lvbW11X21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwKLQkJCQkgICAgICAgc2l6ZV90IHNpemUsCi0JCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0JcmV0dXJuIGlvbW11X21hcF9zaW5nbGUoZGV2LCBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCB2YWRkciwgc2l6ZSwKLQkJCQlkZXZpY2VfdG9fbWFzayhkZXYpLCBkaXJlY3Rpb24sIGF0dHJzKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBkbWFfaW9tbXVfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJCSAgIHNpemVfdCBzaXplLAotCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlpb21tdV91bm1hcF9zaW5nbGUoZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uLAotCQkJICAgYXR0cnMpOwotfQotCi0KLXN0YXRpYyBpbnQgZG1hX2lvbW11X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQkJICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCSAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlyZXR1cm4gaW9tbXVfbWFwX3NnKGRldiwgZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2dsaXN0LCBuZWxlbXMsCi0JCQkgICAgZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYV9pb21tdV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCWlvbW11X3VubWFwX3NnKGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNnbGlzdCwgbmVsZW1zLCBkaXJlY3Rpb24sCi0JCSAgICAgICBhdHRycyk7Ci19Ci0KLS8qIFdlIHN1cHBvcnQgRE1BIHRvL2Zyb20gYW55IG1lbW9yeSBwYWdlIHZpYSB0aGUgaW9tbXUgKi8KLXN0YXRpYyBpbnQgZG1hX2lvbW11X2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKLXsKLQlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCA9IGRldi0+YXJjaGRhdGEuZG1hX2RhdGE7Ci0KLQlpZiAoIXRibCB8fCB0YmwtPml0X29mZnNldCA+IG1hc2spIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIldhcm5pbmc6IElPTU1VIG9mZnNldCB0b28gYmlnIGZvciBkZXZpY2UgbWFza1xuIik7Ci0JCWlmICh0YmwpCi0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIm1hc2s6IDB4JTA4bHgsIHRhYmxlIG9mZnNldDogMHglMDhseFxuIiwKLQkJCQltYXNrLCB0YmwtPml0X29mZnNldCk7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gIm1hc2s6IDB4JTA4bHgsIHRhYmxlIHVuYXZhaWxhYmxlXG4iLAotCQkJCW1hc2spOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UKLQkJcmV0dXJuIDE7Ci19Ci0KLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2lvbW11X29wcyA9IHsKLQkuYWxsb2NfY29oZXJlbnQJPSBkbWFfaW9tbXVfYWxsb2NfY29oZXJlbnQsCi0JLmZyZWVfY29oZXJlbnQJPSBkbWFfaW9tbXVfZnJlZV9jb2hlcmVudCwKLQkubWFwX3NpbmdsZQk9IGRtYV9pb21tdV9tYXBfc2luZ2xlLAotCS51bm1hcF9zaW5nbGUJPSBkbWFfaW9tbXVfdW5tYXBfc2luZ2xlLAotCS5tYXBfc2cJCT0gZG1hX2lvbW11X21hcF9zZywKLQkudW5tYXBfc2cJPSBkbWFfaW9tbXVfdW5tYXBfc2csCi0JLmRtYV9zdXBwb3J0ZWQJPSBkbWFfaW9tbXVfZG1hX3N1cHBvcnRlZCwKLX07Ci1FWFBPUlRfU1lNQk9MKGRtYV9pb21tdV9vcHMpOwotCi0vKgotICogR2VuZXJpYyBkaXJlY3QgRE1BIGltcGxlbWVudGF0aW9uCi0gKgotICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBhIHBlci1kZXZpY2Ugb2Zmc2V0IHRoYXQgY2FuIGJlIGFwcGxpZWQgaWYKLSAqIHRoZSBhZGRyZXNzIGF0IHdoaWNoIG1lbW9yeSBpcyB2aXNpYmxlIHRvIGRldmljZXMgaXMgbm90IDAuIFBsYXRmb3JtIGNvZGUKLSAqIGNhbiBzZXQgYXJjaGRhdGEuZG1hX2RhdGEgdG8gYW4gdW5zaWduZWQgbG9uZyBob2xkaW5nIHRoZSBvZmZzZXQuIEJ5Ci0gKiBkZWZhdWx0IHRoZSBvZmZzZXQgaXMgemVyby4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiAodW5zaWduZWQgbG9uZylkZXYtPmFyY2hkYXRhLmRtYV9kYXRhOwotfQotCi1zdGF0aWMgdm9pZCAqZG1hX2RpcmVjdF9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCSAgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCXZvaWQgKnJldDsKLQlpbnQgbm9kZSA9IGRldi0+YXJjaGRhdGEubnVtYV9ub2RlOwotCi0JcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZmxhZywgZ2V0X29yZGVyKHNpemUpKTsKLQlpZiAocGFnZSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQlyZXQgPSBwYWdlX2FkZHJlc3MocGFnZSk7Ci0JbWVtc2V0KHJldCwgMCwgc2l6ZSk7Ci0JKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX2FicyhyZXQpICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBkbWFfZGlyZWN0X2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCi17Ci0JZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgZ2V0X29yZGVyKHNpemUpKTsKLX0KLQotc3RhdGljIGRtYV9hZGRyX3QgZG1hX2RpcmVjdF9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLAotCQkJCQlzaXplX3Qgc2l6ZSwKLQkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlyZXR1cm4gdmlydF90b19hYnMocHRyKSArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOwotfQotCi1zdGF0aWMgdm9pZCBkbWFfZGlyZWN0X3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCi0JCQkJICAgIHNpemVfdCBzaXplLAotCQkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotfQotCi1zdGF0aWMgaW50IGRtYV9kaXJlY3RfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCi0JCQkgICAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCWludCBpOwotCi0JZm9yX2VhY2hfc2coc2dsLCBzZywgbmVudHMsIGkpIHsKLQkJc2ctPmRtYV9hZGRyZXNzID0gc2dfcGh5cyhzZykgKyBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKLQkJc2ctPmRtYV9sZW5ndGggPSBzZy0+bGVuZ3RoOwotCX0KLQotCXJldHVybiBuZW50czsKLX0KLQotc3RhdGljIHZvaWQgZG1hX2RpcmVjdF91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci19Ci0KLXN0YXRpYyBpbnQgZG1hX2RpcmVjdF9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCi17Ci0JLyogQ291bGQgYmUgaW1wcm92ZWQgdG8gY2hlY2sgZm9yIG1lbW9yeSB0aG91Z2ggaXQgYmV0dGVyIGJlCi0JICogZG9uZSB2aWEgc29tZSBnbG9iYWwgc28gcGxhdGZvcm1zIGNhbiBzZXQgdGhlIGxpbWl0IGluIGNhc2UKLQkgKiB0aGV5IGhhdmUgbGltaXRlZCBETUEgd2luZG93cwotCSAqLwotCXJldHVybiBtYXNrID49IERNQV8zMkJJVF9NQVNLOwotfQotCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGRtYV9kaXJlY3Rfb3BzID0gewotCS5hbGxvY19jb2hlcmVudAk9IGRtYV9kaXJlY3RfYWxsb2NfY29oZXJlbnQsCi0JLmZyZWVfY29oZXJlbnQJPSBkbWFfZGlyZWN0X2ZyZWVfY29oZXJlbnQsCi0JLm1hcF9zaW5nbGUJPSBkbWFfZGlyZWN0X21hcF9zaW5nbGUsCi0JLnVubWFwX3NpbmdsZQk9IGRtYV9kaXJlY3RfdW5tYXBfc2luZ2xlLAotCS5tYXBfc2cJCT0gZG1hX2RpcmVjdF9tYXBfc2csCi0JLnVubWFwX3NnCT0gZG1hX2RpcmVjdF91bm1hcF9zZywKLQkuZG1hX3N1cHBvcnRlZAk9IGRtYV9kaXJlY3RfZG1hX3N1cHBvcnRlZCwKLX07Ci1FWFBPUlRfU1lNQk9MKGRtYV9kaXJlY3Rfb3BzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwppbmRleCAyZDgwMmU5Li5mZDhiNGJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCkBAIC01MTIsMzEgKzUxMiwxMiBAQAogI2VuZGlmCiAKIHJlc3RvcmU6Ci0JbGQJcjUsU09GVEUocjEpCi0jaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCiBCRUdJTl9GV19GVFJfU0VDVElPTgotCWNtcGRpCTAscjUsMAotCWJlcQk0ZgotCS8qIENoZWNrIGZvciBwZW5kaW5nIGludGVycnVwdHMgKGlTZXJpZXMpICovCi0JbGQJcjMsUEFDQUxQUEFDQVBUUihyMTMpCi0JbGQJcjMsTFBQQUNBQU5ZSU5UKHIzKQotCWNtcGRpCXIzLDAKLQliZXErCTRmCQkJLyogc2tpcCBkb19JUlEgaWYgbm8gaW50ZXJydXB0cyAqLwotCi0JbGkJcjMsMAotCXN0YglyMyxQQUNBU09GVElSUUVOKHIxMykJLyogZW5zdXJlIHdlIGFyZSBzb2Z0LWRpc2FibGVkICovCi0jaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JYmwJLnRyYWNlX2hhcmRpcnFzX29mZgotCW1mbXNyCXIxMAotI2VuZGlmCi0Jb3JpCXIxMCxyMTAsTVNSX0VFCi0JbXRtc3JkCXIxMAkJCS8qIGhhcmQtZW5hYmxlIGFnYWluICovCi0JYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAotCWJsCS5kb19JUlEKLQliCS5yZXRfZnJvbV9leGNlcHRfbGl0ZQkJLyogbG9vcCBiYWNrIGFuZCBoYW5kbGUgbW9yZSAqLwotNDoKLUVORF9GV19GVFJfU0VDVElPTl9JRlNFVChGV19GRUFUVVJFX0lTRVJJRVMpCi0jZW5kaWYKKwlsZAlyNSxTT0ZURShyMSkKK0ZXX0ZUUl9TRUNUSU9OX0VMU0UKKwliCWlzZXJpZXNfY2hlY2tfcGVuZGluZ19pcnFzCitBTFRfRldfRlRSX1NFQ1RJT05fRU5EX0lGQ0xSKEZXX0ZFQVRVUkVfSVNFUklFUykKKzI6CiAJVFJBQ0VfQU5EX1JFU1RPUkVfSVJRKHI1KTsKIAogCS8qIGV4dHJhY3QgRUUgYml0IGFuZCB1c2UgaXQgdG8gcmVzdG9yZSBwYWNhLT5oYXJkX2VuYWJsZWQgKi8KQEAgLTU5Miw2ICs1NzMsMzAgQEAKIAlyZmlkCiAJYgkuCS8qIHByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uICovCiAKK2lzZXJpZXNfY2hlY2tfcGVuZGluZ19pcnFzOgorI2lmZGVmIENPTkZJR19QUENfSVNFUklFUworCWxkCXI1LFNPRlRFKHIxKQorCWNtcGRpCTAscjUsMAorCWJlcQkyYgorCS8qIENoZWNrIGZvciBwZW5kaW5nIGludGVycnVwdHMgKGlTZXJpZXMpICovCisJbGQJcjMsUEFDQUxQUEFDQVBUUihyMTMpCisJbGQJcjMsTFBQQUNBQU5ZSU5UKHIzKQorCWNtcGRpCXIzLDAKKwliZXErCTJiCQkJLyogc2tpcCBkb19JUlEgaWYgbm8gaW50ZXJydXB0cyAqLworCisJbGkJcjMsMAorCXN0YglyMyxQQUNBU09GVElSUUVOKHIxMykJLyogZW5zdXJlIHdlIGFyZSBzb2Z0LWRpc2FibGVkICovCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJYmwJLnRyYWNlX2hhcmRpcnFzX29mZgorCW1mbXNyCXIxMAorI2VuZGlmCisJb3JpCXIxMCxyMTAsTVNSX0VFCisJbXRtc3JkCXIxMAkJCS8qIGhhcmQtZW5hYmxlIGFnYWluICovCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorCWJsCS5kb19JUlEKKwliCS5yZXRfZnJvbV9leGNlcHRfbGl0ZQkJLyogbG9vcCBiYWNrIGFuZCBoYW5kbGUgbW9yZSAqLworI2VuZGlmCisKIGRvX3dvcms6CiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKIAlhbmRpLglyMCxyMyxNU1JfUFIJLyogUmV0dXJuaW5nIHRvIHVzZXIgbW9kZT8gKi8KQEAgLTY4NSwxMCArNjkwLDYgQEAKIAlzdGQJcjcsX0RBUihyMSkKIAltZmRzaXNyCXI4CiAJc3RkCXI4LF9EU0lTUihyMSkKLQltZnNycjAJcjkKLQlzdGQJcjksX1NSUjAocjEpCi0JbWZzcnIxCXIxMAotCXN0ZAlyMTAsX1NSUjEocjEpCiAKIAkvKiBUZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBjbGVhciBDUiB1bnRpbCBSVEFTIGNhbiBiZSBtb2RpZmllZCB0bwogCSAqIGlnbm9yZSBhbGwgYml0cy4KQEAgLTc0OSw2ICs3NTAsMTAgQEAKIAltZnNwcglyNCxTUFJOX1NQUkczCSAgICAgICAgLyogR2V0IFBBQ0EgKi8KIAljbHJsZGkJcjQscjQsMgkJCS8qIGNvbnZlcnQgdG8gcmVhbG1vZGUgYWRkcmVzcyAqLwogCisJYmNsCTIwLDMxLCQrNAorMDoJbWZscglyMworCWxkCXIzLCgxZi0wYikocjMpCQkvKiBnZXQgJi5ydGFzX3Jlc3RvcmVfcmVncyAqLworCiAJbWZtc3IgICByNgogCWxpCXIwLE1TUl9SSQogCWFuZGMJcjYscjYscjAKQEAgLTc1Niw3ICs3NjEsNiBAQAogCW10bXNyZCAgcjYKICAgICAgICAgCiAgICAgICAgIGxkCXIxLFBBQ0FSMShyNCkgICAgICAgICAgIC8qIFJlc3RvcmUgb3VyIFNQICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIzLC5ydGFzX3Jlc3RvcmVfcmVncykKICAgICAgICAgbGQJcjQsUEFDQVNBVkVETVNSKHI0KSAgICAgLyogUmVzdG9yZSBvdXIgTVNSICovCiAKIAltdHNwcglTUFJOX1NSUjAscjMKQEAgLTc2NCw2ICs3NjgsOSBAQAogCXJmaWQKIAliCS4JLyogcHJldmVudCBzcGVjdWxhdGl2ZSBleGVjdXRpb24gKi8KIAorCS5hbGlnbgkzCisxOgkubGxvbmcJLnJ0YXNfcmVzdG9yZV9yZWdzCisKIF9TVEFUSUMocnRhc19yZXN0b3JlX3JlZ3MpCiAJLyogcmVsb2NhdGlvbiBpcyBvbiBhdCB0aGlzIHBvaW50ICovCiAJUkVTVF9HUFIoMiwgcjEpCQkJLyogUmVzdG9yZSB0aGUgVE9DICovCkBAIC03ODMsMTAgKzc5MCw2IEBACiAJbXRkYXIJcjcKIAlsZAlyOCxfRFNJU1IocjEpCiAJbXRkc2lzcglyOAotCWxkCXI5LF9TUlIwKHIxKQotCW10c3JyMAlyOQotCWxkCXIxMCxfU1JSMShyMSkKLQltdHNycjEJcjEwCiAKICAgICAgICAgYWRkaQlyMSxyMSxSVEFTX0ZSQU1FX1NJWkUJLyogVW5zdGFjayBvdXIgZnJhbWUgKi8KIAlsZAlyMCwxNihyMSkJCS8qIGdldCByZXR1cm4gYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwppbmRleCA4YmI2NTc1Li4wYzMyNjgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwpAQCAtMTEwLDYgKzExMCwxMiBAQAogI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQogCWNtcHdpCTAscjUsMAogCWJlcQkxZgorCisJLyogZmluZCBvdXQgd2hlcmUgd2UgYXJlIG5vdyAqLworCWJjbAkyMCwzMSwkKzQKKzA6CW1mbHIJcjgJCQkvKiByOCA9IHJ1bnRpbWUgYWRkciBoZXJlICovCisJYWRkaXMJcjgscjgsKF9zdGV4dCAtIDBiKUBoYQorCWFkZGkJcjgscjgsKF9zdGV4dCAtIDBiKUBsCS8qIGN1cnJlbnQgcnVudGltZSBiYXNlIGFkZHIgKi8KIAlibAlwcm9tX2luaXQKIAl0cmFwCiAjZW5kaWYKQEAgLTM2OSwxMyArMzc1LDEzIEBACiBEYXRhQWNjZXNzOgogCUVYQ0VQVElPTl9QUk9MT0cKIAltZnNwcglyMTAsU1BSTl9EU0lTUgorCXN0dwlyMTAsX0RTSVNSKHIxMSkKIAlhbmRpcy4JcjAscjEwLDB4YTQ3MAkJLyogd2VpcmQgZXJyb3I/ICovCiAJYm5lCTFmCQkJLyogaWYgbm90LCB0cnkgdG8gcHV0IGEgUFRFICovCiAJbWZzcHIJcjQsU1BSTl9EQVIJCS8qIGludG8gdGhlIGhhc2ggdGFibGUgKi8KIAlybHdpbm0JcjMscjEwLDMyLTE1LDIxLDIxCS8qIERTSVNSX1NUT1JFIC0+IF9QQUdFX1JXICovCiAJYmwJaGFzaF9wYWdlCi0xOglzdHcJcjEwLF9EU0lTUihyMTEpCi0JbXIJcjUscjEwCisxOglsd3oJcjUsX0RTSVNSKHIxMSkJCS8qIGdldCBEU0lTUiB2YWx1ZSAqLwogCW1mc3ByCXI0LFNQUk5fREFSCiAJRVhDX1hGRVJfRUVfTElURSgweDMwMCwgaGFuZGxlX3BhZ2VfZmF1bHQpCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggY2M4ZmI0Ny4uODQ4NTZiZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTgyLDcgKzgyLDExIEBACiAJLyogQ2F0Y2ggYnJhbmNoIHRvIDAgaW4gcmVhbCBtb2RlICovCiAJdHJhcAogCi0JLyogU2Vjb25kYXJ5IHByb2Nlc3NvcnMgc3BpbiBvbiB0aGlzIHZhbHVlIHVudGlsIGl0IGdvZXMgdG8gMS4gKi8KKwkvKiBTZWNvbmRhcnkgcHJvY2Vzc29ycyBzcGluIG9uIHRoaXMgdmFsdWUgdW50aWwgaXQgYmVjb21lcyBub256ZXJvLgorCSAqIFdoZW4gaXQgZG9lcyBpdCBjb250YWlucyB0aGUgcmVhbCBhZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yCisJICogb2YgdGhlIGZ1bmN0aW9uIHRoYXQgdGhlIGNwdSBzaG91bGQganVtcCB0byB0byBjb250aW51ZQorCSAqIGluaXRpYWxpemF0aW9uLgorCSAqLwogCS5nbG9ibCAgX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcAogX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcDoKIAkubGxvbmcJMHgwCkBAIC0xMDksOCArMTEzLDExIEBACiAgKiBiZWZvcmUgdGhlIGJ1bGsgb2YgdGhlIGtlcm5lbCBoYXMgYmVlbiByZWxvY2F0ZWQuICBUaGlzIGNvZGUKICAqIGlzIHJlbG9jYXRlZCB0byBwaHlzaWNhbCBhZGRyZXNzIDB4NjAgYmVmb3JlIHByb21faW5pdCBpcyBydW4uCiAgKiBBbGwgb2YgaXQgbXVzdCBmaXQgYmVsb3cgdGhlIGZpcnN0IGV4Y2VwdGlvbiB2ZWN0b3IgYXQgMHgxMDAuCisgKiBVc2UgLmdsb2JsIGhlcmUgbm90IF9HTE9CQUwgYmVjYXVzZSB3ZSB3YW50IF9fc2Vjb25kYXJ5X2hvbGQKKyAqIHRvIGJlIHRoZSBhY3R1YWwgdGV4dCBhZGRyZXNzLCBub3QgYSBkZXNjcmlwdG9yLgogICovCi1fR0xPQkFMKF9fc2Vjb25kYXJ5X2hvbGQpCisJLmdsb2JsCV9fc2Vjb25kYXJ5X2hvbGQKK19fc2Vjb25kYXJ5X2hvbGQ6CiAJbWZtc3IJcjI0CiAJb3JpCXIyNCxyMjQsTVNSX1JJCiAJbXRtc3JkCXIyNAkJCS8qIFJJIG9uICovCkBAIC0xMjEsMTYgKzEyOCwxNiBAQAogCS8qIFRlbGwgdGhlIG1hc3RlciBjcHUgd2UncmUgaGVyZSAqLwogCS8qIFJlbG9jYXRpb24gaXMgb2ZmICYgd2UgYXJlIGxvY2F0ZWQgYXQgYW4gYWRkcmVzcyBsZXNzICovCiAJLyogdGhhbiAweDEwMCwgc28gb25seSBuZWVkIHRvIGdyYWIgbG93IG9yZGVyIG9mZnNldC4gICAgKi8KLQlzdGQJcjI0LF9fc2Vjb25kYXJ5X2hvbGRfYWNrbm93bGVkZ2VAbCgwKQorCXN0ZAlyMjQsX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZS1fc3RleHQoMCkKIAlzeW5jCiAKIAkvKiBBbGwgc2Vjb25kYXJ5IGNwdXMgd2FpdCBoZXJlIHVudGlsIHRvbGQgdG8gc3RhcnQuICovCi0xMDA6CWxkCXI0LF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3BAbCgwKQotCWNtcGRpCTAscjQsMQotCWJuZQkxMDBiCisxMDA6CWxkCXI0LF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3AtX3N0ZXh0KDApCisJY21wZGkJMCxyNCwwCisJYmVxCTEwMGIKIAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfS0VYRUMpCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI0LCAuZ2VuZXJpY19zZWNvbmRhcnlfc21wX2luaXQpCisJbGQJcjQsMChyNCkJCS8qIGRlcmVmIGZ1bmN0aW9uIGRlc2NyaXB0b3IgKi8KIAltdGN0cglyNAogCW1yCXIzLHIyNAogCWJjdHIKQEAgLTE0Nyw2ICsxNTQsMTAgQEAKIC8qCiAgKiBUaGlzIGlzIHRoZSBzdGFydCBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIGZvciBwU2VyaWVzCiAgKiBUaGlzIGNvZGUgcnVucyB3aXRoIHJlbG9jYXRpb24gb2ZmLgorICogQ29kZSBmcm9tIGhlcmUgdG8gX19lbmRfaW50ZXJydXB0cyBnZXRzIGNvcGllZCBkb3duIHRvIHJlYWwKKyAqIGFkZHJlc3MgMHgxMDAgd2hlbiB3ZSBhcmUgcnVubmluZyBhIHJlbG9jYXRhYmxlIGtlcm5lbC4KKyAqIFRoZXJlZm9yZSBhbnkgcmVsYXRpdmUgYnJhbmNoZXMgaW4gdGhpcyBzZWN0aW9uIG11c3Qgb25seQorICogYnJhbmNoIHRvIGxhYmVscyBpbiB0aGlzIHNlY3Rpb24uCiAgKi8KIAkuID0gMHgxMDAKIAkuZ2xvYmwgX19zdGFydF9pbnRlcnJ1cHRzCkBAIC0yMDAsNyArMjExLDIwIEBACiAJbWZzcHIJcjEwLFNQUk5fU1BSRzEKIAlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfUjEzKHIxMykKIAltZnNwcglyMTIsU1BSTl9TUlIxCQkvKiBhbmQgU1JSMSAqLwotCWIJLnNsYl9taXNzX3JlYWxtb2RlCS8qIFJlbC4gYnJhbmNoIHdvcmtzIGluIHJlYWwgbW9kZSAqLworI2lmbmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKKwliCS5zbGJfbWlzc19yZWFsbW9kZQorI2Vsc2UKKwkvKgorCSAqIFdlIGNhbid0IGp1c3QgdXNlIGEgZGlyZWN0IGJyYW5jaCB0byAuc2xiX21pc3NfcmVhbG1vZGUKKwkgKiBiZWNhdXNlIHRoZSBkaXN0YW5jZSBmcm9tIGhlcmUgdG8gdGhlcmUgZGVwZW5kcyBvbiB3aGVyZQorCSAqIHRoZSBrZXJuZWwgZW5kcyB1cCBiZWluZyBwdXQuCisJICovCisJbWZjdHIJcjExCisJbGQJcjEwLFBBQ0FLQkFTRShyMTMpCisJTE9BRF9IQU5ETEVSKHIxMCwgLnNsYl9taXNzX3JlYWxtb2RlKQorCW10Y3RyCXIxMAorCWJjdHIKKyNlbmRpZgogCiAJU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4NDAwLCBpbnN0cnVjdGlvbl9hY2Nlc3MpCiAKQEAgLTIyNSw3ICsyNDksMTUgQEAKIAltZnNwcglyMTAsU1BSTl9TUFJHMQogCXN0ZAlyMTAsUEFDQV9FWFNMQitFWF9SMTMocjEzKQogCW1mc3ByCXIxMixTUFJOX1NSUjEJCS8qIGFuZCBTUlIxICovCi0JYgkuc2xiX21pc3NfcmVhbG1vZGUJLyogUmVsLiBicmFuY2ggd29ya3MgaW4gcmVhbCBtb2RlICovCisjaWZuZGVmIENPTkZJR19SRUxPQ0FUQUJMRQorCWIJLnNsYl9taXNzX3JlYWxtb2RlCisjZWxzZQorCW1mY3RyCXIxMQorCWxkCXIxMCxQQUNBS0JBU0UocjEzKQorCUxPQURfSEFORExFUihyMTAsIC5zbGJfbWlzc19yZWFsbW9kZSkKKwltdGN0cglyMTAKKwliY3RyCisjZW5kaWYKIAogCU1BU0tBQkxFX0VYQ0VQVElPTl9QU0VSSUVTKDB4NTAwLCBoYXJkd2FyZV9pbnRlcnJ1cHQpCiAJU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4NjAwLCBhbGlnbm1lbnQpCkBAIC0yNDQsMTQgKzI3NiwxMiBAQAogCWJlcS0JMWYKIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX1JFQUxfTEUpCiAJbXIJcjkscjEzCi0JbWZtc3IJcjEwCiAJbWZzcHIJcjEzLFNQUk5fU1BSRzMKIAltZnNwcglyMTEsU1BSTl9TUlIwCi0JY2xycmRpCXIxMixyMTMsMzIKLQlvcmlzCXIxMixyMTIsc3lzdGVtX2NhbGxfY29tbW9uQGgKLQlvcmkJcjEyLHIxMixzeXN0ZW1fY2FsbF9jb21tb25AbAorCWxkCXIxMixQQUNBS0JBU0UocjEzKQorCWxkCXIxMCxQQUNBS01TUihyMTMpCisJTE9BRF9IQU5ETEVSKHIxMiwgc3lzdGVtX2NhbGxfZW50cnkpCiAJbXRzcHIJU1BSTl9TUlIwLHIxMgotCW9yaQlyMTAscjEwLE1TUl9JUnxNU1JfRFJ8TVNSX1JJCiAJbWZzcHIJcjEyLFNQUk5fU1JSMQogCW10c3ByCVNQUk5fU1JSMSxyMTAKIAlyZmlkCkBAIC0zMjUsMTYgKzM1NSwzMiBAQAogCW1mc3ByCXIxMixTUFJOX1NQUkcyCiAJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhTTEIsIC5kb19zdGFiX2JvbHRlZCkKIAorI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwogLyoKLSAqIFdlIGhhdmUgc29tZSByb29tIGhlcmUgIHdlIHVzZSB0aGF0IHRvIHB1dAotICogdGhlIHBlcmllcyBzbGIgbWlzcyB1c2VyIHRyYW1wb2xpbmUgY29kZSBzbyBpdCdzIHJlYXNvbmFibHkKLSAqIGF3YXkgZnJvbSBzbGJfbWlzc191c2VyX2NvbW1vbiB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHJmaWQKLSAqCisgKiBWZWN0b3JzIGZvciB0aGUgRldOTUkgb3B0aW9uLiAgU2hhcmUgY29tbW9uIGNvZGUuCisgKi8KKwkuZ2xvYmwgc3lzdGVtX3Jlc2V0X2Z3bm1pCisgICAgICAuYWxpZ24gNworc3lzdGVtX3Jlc2V0X2Z3bm1pOgorCUhNVF9NRURJVU0KKwltdHNwcglTUFJOX1NQUkcxLHIxMwkJLyogc2F2ZSByMTMgKi8KKwlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWEdFTiwgc3lzdGVtX3Jlc2V0X2NvbW1vbikKKworCS5nbG9ibCBtYWNoaW5lX2NoZWNrX2Z3bm1pCisgICAgICAuYWxpZ24gNworbWFjaGluZV9jaGVja19md25taToKKwlITVRfTUVESVVNCisJbXRzcHIJU1BSTl9TUFJHMSxyMTMJCS8qIHNhdmUgcjEzICovCisJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhNQywgbWFjaGluZV9jaGVja19jb21tb24pCisKKyNlbmRpZiAvKiBDT05GSUdfUFBDX1BTRVJJRVMgKi8KKworI2lmZGVmIF9fRElTQUJMRURfXworLyoKICAqIFRoaXMgaXMgdXNlZCBmb3Igd2hlbiB0aGUgU0xCIG1pc3MgaGFuZGxlciBoYXMgdG8gZ28gdmlydHVhbCwKICAqIHdoaWNoIGRvZXNuJ3QgaGFwcGVuIGZvciBub3cgYW55bW9yZSBidXQgd2lsbCBvbmNlIHdlIHJlLWltcGxlbWVudAogICogZHluYW1pYyBWU0lEcyBmb3Igc2hhcmVkIHBhZ2UgdGFibGVzCiAgKi8KLSNpZmRlZiBfX0RJU0FCTEVEX18KIHNsYl9taXNzX3VzZXJfcHNlcmllczoKIAlzdGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEwKHIxMykKIAlzdGQJcjExLFBBQ0FfRVhHRU4rRVhfUjExKHIxMykKQEAgLTM1NywyNSArNDAzLDE3IEBACiAJYgkuCQkJCS8qIHByZXZlbnQgc3BlYy4gZXhlY3V0aW9uICovCiAjZW5kaWYgLyogX19ESVNBQkxFRF9fICovCiAKLSNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKKwkuYWxpZ24JNworCS5nbG9ibAlfX2VuZF9pbnRlcnJ1cHRzCitfX2VuZF9pbnRlcnJ1cHRzOgorCiAvKgotICogVmVjdG9ycyBmb3IgdGhlIEZXTk1JIG9wdGlvbi4gIFNoYXJlIGNvbW1vbiBjb2RlLgorICogQ29kZSBmcm9tIGhlcmUgZG93biB0byBfX2VuZF9oYW5kbGVycyBpcyBpbnZva2VkIGZyb20gdGhlCisgKiBleGNlcHRpb24gcHJvbG9ncyBhYm92ZS4gIEJlY2F1c2UgdGhlIHByb2xvZ3MgYXNzZW1ibGUgdGhlCisgKiBhZGRyZXNzZXMgb2YgdGhlc2UgaGFuZGxlcnMgdXNpbmcgdGhlIExPQURfSEFORExFUiBtYWNybywKKyAqIHdoaWNoIHVzZXMgYW4gYWRkaSBpbnN0cnVjdGlvbiwgdGhlc2UgaGFuZGxlcnMgbXVzdCBiZSBpbgorICogdGhlIGZpcnN0IDMyayBvZiB0aGUga2VybmVsIGltYWdlLgogICovCi0JLmdsb2JsIHN5c3RlbV9yZXNldF9md25taQotICAgICAgLmFsaWduIDcKLXN5c3RlbV9yZXNldF9md25taToKLQlITVRfTUVESVVNCi0JbXRzcHIJU1BSTl9TUFJHMSxyMTMJCS8qIHNhdmUgcjEzICovCi0JRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTX0ZPUkNFXzY0QklUKFBBQ0FfRVhHRU4sIHN5c3RlbV9yZXNldF9jb21tb24pCi0KLQkuZ2xvYmwgbWFjaGluZV9jaGVja19md25taQotICAgICAgLmFsaWduIDcKLW1hY2hpbmVfY2hlY2tfZndubWk6Ci0JSE1UX01FRElVTQotCW10c3ByCVNQUk5fU1BSRzEscjEzCQkvKiBzYXZlIHIxMyAqLwotCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFU19GT1JDRV82NEJJVChQQUNBX0VYTUMsIG1hY2hpbmVfY2hlY2tfY29tbW9uKQotCi0jZW5kaWYgLyogQ09ORklHX1BQQ19QU0VSSUVTICovCiAKIC8qKiogQ29tbW9uIGludGVycnVwdCBoYW5kbGVycyAqKiovCiAKQEAgLTQxNCw2ICs0NTIsMTAgQEAKIAlTVERfRVhDRVBUSU9OX0NPTU1PTigweDE4MDAsIGNiZV90aGVybWFsLCAuY2JlX3RoZXJtYWxfZXhjZXB0aW9uKQogI2VuZGlmIC8qIENPTkZJR19DQkVfUkFTICovCiAKKwkuYWxpZ24JNworc3lzdGVtX2NhbGxfZW50cnk6CisJYglzeXN0ZW1fY2FsbF9jb21tb24KKwogLyoKICAqIEhlcmUgd2UgaGF2ZSBkZXRlY3RlZCB0aGF0IHRoZSBrZXJuZWwgc3RhY2sgcG9pbnRlciBpcyBiYWQuCiAgKiBSOSBjb250YWlucyB0aGUgc2F2ZWQgQ1IsIHIxMyBwb2ludHMgdG8gdGhlIHBhY2EsCkBAIC00NTcsNjUgKzQ5OSw2IEBACiAJYgkxYgogCiAvKgotICogUmV0dXJuIGZyb20gYW4gZXhjZXB0aW9uIHdpdGggbWluaW1hbCBjaGVja3MuCi0gKiBUaGUgY2FsbGVyIGlzIGFzc3VtZWQgdG8gaGF2ZSBkb25lIEVYQ0VQVElPTl9QUk9MT0dfQ09NTU9OLgotICogSWYgaW50ZXJydXB0cyBoYXZlIGJlZW4gZW5hYmxlZCwgb3IgYW55dGhpbmcgaGFzIGJlZW4KLSAqIGRvbmUgdGhhdCBtaWdodCBoYXZlIGNoYW5nZWQgdGhlIHNjaGVkdWxpbmcgc3RhdHVzIG9mCi0gKiBhbnkgdGFzayBvciBzZW50IGFueSB0YXNrIGEgc2lnbmFsLCB5b3Ugc2hvdWxkIHVzZQotICogcmV0X2Zyb21fZXhjZXB0IG9yIHJldF9mcm9tX2V4Y2VwdF9saXRlIGluc3RlYWQgb2YgdGhpcy4KLSAqLwotZmFzdF9leGNfcmV0dXJuX2lycToJCQkvKiByZXN0b3JlcyBpcnEgc3RhdGUgdG9vICovCi0JbGQJcjMsU09GVEUocjEpCi0JVFJBQ0VfQU5EX1JFU1RPUkVfSVJRKHIzKTsKLQlsZAlyMTIsX01TUihyMSkKLQlybGRpY2wJcjQscjEyLDQ5LDYzCQkvKiBnZXQgTVNSX0VFIHRvIExTQiAqLwotCXN0YglyNCxQQUNBSEFSRElSUUVOKHIxMykJLyogcmVzdG9yZSBwYWNhLT5oYXJkX2VuYWJsZWQgKi8KLQliCTFmCi0KLQkuZ2xvYmwJZmFzdF9leGNlcHRpb25fcmV0dXJuCi1mYXN0X2V4Y2VwdGlvbl9yZXR1cm46Ci0JbGQJcjEyLF9NU1IocjEpCi0xOglsZAlyMTEsX05JUChyMSkKLQlhbmRpLglyMyxyMTIsTVNSX1JJCQkvKiBjaGVjayBpZiBSSSBpcyBzZXQgKi8KLQliZXEtCXVucmVjb3ZfZmVyCi0KLSNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwotCWFuZGkuCXIzLHIxMixNU1JfUFIKLQliZXEJMmYKLQlBQ0NPVU5UX0NQVV9VU0VSX0VYSVQocjMsIHI0KQotMjoKLSNlbmRpZgotCi0JbGQJcjMsX0NDUihyMSkKLQlsZAlyNCxfTElOSyhyMSkKLQlsZAlyNSxfQ1RSKHIxKQotCWxkCXI2LF9YRVIocjEpCi0JbXRjcglyMwotCW10bHIJcjQKLQltdGN0cglyNQotCW10eGVyCXI2Ci0JUkVTVF9HUFIoMCwgcjEpCi0JUkVTVF84R1BSUygyLCByMSkKLQotCW1mbXNyCXIxMAotCXJsZGljbAlyMTAscjEwLDQ4LDEJCS8qIGNsZWFyIEVFICovCi0JcmxkaWNyCXIxMCxyMTAsMTYsNjEJCS8qIGNsZWFyIFJJIChMRSBpcyAwIGFscmVhZHkpICovCi0JbXRtc3JkCXIxMCwxCi0KLQltdHNwcglTUFJOX1NSUjEscjEyCi0JbXRzcHIJU1BSTl9TUlIwLHIxMQotCVJFU1RfNEdQUlMoMTAsIHIxKQotCWxkCXIxLEdQUjEocjEpCi0JcmZpZAotCWIJLgkvKiBwcmV2ZW50IHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiAqLwotCi11bnJlY292X2ZlcjoKLQlibAkuc2F2ZV9udmdwcnMKLTE6CWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKLQlibAkudW5yZWNvdmVyYWJsZV9leGNlcHRpb24KLQliCTFiCi0KLS8qCiAgKiBIZXJlIHIxMyBwb2ludHMgdG8gdGhlIHBhY2EsIHI5IGNvbnRhaW5zIHRoZSBzYXZlZCBDUiwKICAqIFNSUjAgYW5kIFNSUjEgYXJlIHNhdmVkIGluIHIxMSBhbmQgcjEyLAogICogcjkgLSByMTMgYXJlIHNhdmVkIGluIHBhY2EtPmV4Z2VuLgpAQCAtNjE2LDYgKzU5OSw5IEBACiAgKi8KIF9HTE9CQUwoc2xiX21pc3NfcmVhbG1vZGUpCiAJbWZscglyMTAKKyNpZmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKKwltdGN0cglyMTEKKyNlbmRpZgogCiAJc3R3CXI5LFBBQ0FfRVhTTEIrRVhfQ0NSKHIxMykJLyogc2F2ZSBDUiBpbiBleGMuIGZyYW1lICovCiAJc3RkCXIxMCxQQUNBX0VYU0xCK0VYX0xSKHIxMykJLyogc2F2ZSBMUiAqLwpAQCAtNjY2LDExICs2NTIsMTAgQEAKIEVORF9GV19GVFJfU0VDVElPTl9JRlNFVChGV19GRUFUVVJFX0lTRVJJRVMpCiAjZW5kaWYgLyogQ09ORklHX1BQQ19JU0VSSUVTICovCiAJbWZzcHIJcjExLFNQUk5fU1JSMAotCWNscnJkaQlyMTAscjEzLDMyCisJbGQJcjEwLFBBQ0FLQkFTRShyMTMpCiAJTE9BRF9IQU5ETEVSKHIxMCx1bnJlY292X3NsYikKIAltdHNwcglTUFJOX1NSUjAscjEwCi0JbWZtc3IJcjEwCi0Jb3JpCXIxMCxyMTAsTVNSX0lSfE1TUl9EUnxNU1JfUkkKKwlsZAlyMTAsUEFDQUtNU1IocjEzKQogCW10c3ByCVNQUk5fU1JSMSxyMTAKIAlyZmlkCiAJYgkuCkBAIC03NjYsNiArNzUxLDg1IEBACiAJYmwJLmFsdGl2ZWNfdW5hdmFpbGFibGVfZXhjZXB0aW9uCiAJYgkucmV0X2Zyb21fZXhjZXB0CiAKKwkuYWxpZ24JNworCS5nbG9ibCB2c3hfdW5hdmFpbGFibGVfY29tbW9uCit2c3hfdW5hdmFpbGFibGVfY29tbW9uOgorCUVYQ0VQVElPTl9QUk9MT0dfQ09NTU9OKDB4ZjQwLCBQQUNBX0VYR0VOKQorI2lmZGVmIENPTkZJR19WU1gKK0JFR0lOX0ZUUl9TRUNUSU9OCisJYm5lCS5sb2FkX3VwX3ZzeAorMToKK0VORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX1ZTWCkKKyNlbmRpZgorCWJsCS5zYXZlX252Z3BycworCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKwlFTkFCTEVfSU5UUworCWJsCS52c3hfdW5hdmFpbGFibGVfZXhjZXB0aW9uCisJYgkucmV0X2Zyb21fZXhjZXB0CisKKwkuYWxpZ24JNworCS5nbG9ibAlfX2VuZF9oYW5kbGVycworX19lbmRfaGFuZGxlcnM6CisKKy8qCisgKiBSZXR1cm4gZnJvbSBhbiBleGNlcHRpb24gd2l0aCBtaW5pbWFsIGNoZWNrcy4KKyAqIFRoZSBjYWxsZXIgaXMgYXNzdW1lZCB0byBoYXZlIGRvbmUgRVhDRVBUSU9OX1BST0xPR19DT01NT04uCisgKiBJZiBpbnRlcnJ1cHRzIGhhdmUgYmVlbiBlbmFibGVkLCBvciBhbnl0aGluZyBoYXMgYmVlbgorICogZG9uZSB0aGF0IG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGUgc2NoZWR1bGluZyBzdGF0dXMgb2YKKyAqIGFueSB0YXNrIG9yIHNlbnQgYW55IHRhc2sgYSBzaWduYWwsIHlvdSBzaG91bGQgdXNlCisgKiByZXRfZnJvbV9leGNlcHQgb3IgcmV0X2Zyb21fZXhjZXB0X2xpdGUgaW5zdGVhZCBvZiB0aGlzLgorICovCitmYXN0X2V4Y19yZXR1cm5faXJxOgkJCS8qIHJlc3RvcmVzIGlycSBzdGF0ZSB0b28gKi8KKwlsZAlyMyxTT0ZURShyMSkKKwlUUkFDRV9BTkRfUkVTVE9SRV9JUlEocjMpOworCWxkCXIxMixfTVNSKHIxKQorCXJsZGljbAlyNCxyMTIsNDksNjMJCS8qIGdldCBNU1JfRUUgdG8gTFNCICovCisJc3RiCXI0LFBBQ0FIQVJESVJRRU4ocjEzKQkvKiByZXN0b3JlIHBhY2EtPmhhcmRfZW5hYmxlZCAqLworCWIJMWYKKworCS5nbG9ibAlmYXN0X2V4Y2VwdGlvbl9yZXR1cm4KK2Zhc3RfZXhjZXB0aW9uX3JldHVybjoKKwlsZAlyMTIsX01TUihyMSkKKzE6CWxkCXIxMSxfTklQKHIxKQorCWFuZGkuCXIzLHIxMixNU1JfUkkJCS8qIGNoZWNrIGlmIFJJIGlzIHNldCAqLworCWJlcS0JdW5yZWNvdl9mZXIKKworI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisJYW5kaS4JcjMscjEyLE1TUl9QUgorCWJlcQkyZgorCUFDQ09VTlRfQ1BVX1VTRVJfRVhJVChyMywgcjQpCisyOgorI2VuZGlmCisKKwlsZAlyMyxfQ0NSKHIxKQorCWxkCXI0LF9MSU5LKHIxKQorCWxkCXI1LF9DVFIocjEpCisJbGQJcjYsX1hFUihyMSkKKwltdGNyCXIzCisJbXRscglyNAorCW10Y3RyCXI1CisJbXR4ZXIJcjYKKwlSRVNUX0dQUigwLCByMSkKKwlSRVNUXzhHUFJTKDIsIHIxKQorCisJbWZtc3IJcjEwCisJcmxkaWNsCXIxMCxyMTAsNDgsMQkJLyogY2xlYXIgRUUgKi8KKwlybGRpY3IJcjEwLHIxMCwxNiw2MQkJLyogY2xlYXIgUkkgKExFIGlzIDAgYWxyZWFkeSkgKi8KKwltdG1zcmQJcjEwLDEKKworCW10c3ByCVNQUk5fU1JSMSxyMTIKKwltdHNwcglTUFJOX1NSUjAscjExCisJUkVTVF80R1BSUygxMCwgcjEpCisJbGQJcjEsR1BSMShyMSkKKwlyZmlkCisJYgkuCS8qIHByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uICovCisKK3VucmVjb3ZfZmVyOgorCWJsCS5zYXZlX252Z3BycworMToJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorCWJsCS51bnJlY292ZXJhYmxlX2V4Y2VwdGlvbgorCWIJMWIKKwogI2lmZGVmIENPTkZJR19BTFRJVkVDCiAvKgogICogbG9hZF91cF9hbHRpdmVjKHVudXNlZCwgdW51c2VkLCB0c2spCkBAIC04NDAsMjIgKzkwNCw2IEBACiAJYmxyCiAjZW5kaWYgLyogQ09ORklHX0FMVElWRUMgKi8KIAotCS5hbGlnbgk3Ci0JLmdsb2JsIHZzeF91bmF2YWlsYWJsZV9jb21tb24KLXZzeF91bmF2YWlsYWJsZV9jb21tb246Ci0JRVhDRVBUSU9OX1BST0xPR19DT01NT04oMHhmNDAsIFBBQ0FfRVhHRU4pCi0jaWZkZWYgQ09ORklHX1ZTWAotQkVHSU5fRlRSX1NFQ1RJT04KLQlibmUJLmxvYWRfdXBfdnN4Ci0xOgotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfVlNYKQotI2VuZGlmCi0JYmwJLnNhdmVfbnZncHJzCi0JYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAotCUVOQUJMRV9JTlRTCi0JYmwJLnZzeF91bmF2YWlsYWJsZV9leGNlcHRpb24KLQliCS5yZXRfZnJvbV9leGNlcHQKLQogI2lmZGVmIENPTkZJR19WU1gKIC8qCiAgKiBsb2FkX3VwX3ZzeCh1bnVzZWQsIHVudXNlZCwgdHNrKQpAQCAtMTE3NSwxMSArMTIyMywxNCBAQAogCS8qIHR1cm4gb24gNjQtYml0IG1vZGUgKi8KIAlibAkuZW5hYmxlXzY0Yl9tb2RlCiAKKwkvKiBnZXQgdGhlIFRPQyBwb2ludGVyIChyZWFsIGFkZHJlc3MpICovCisJYmwJLnJlbGF0aXZlX3RvYworCiAJLyogU2V0IHVwIGEgcGFjYSB2YWx1ZSBmb3IgdGhpcyBwcm9jZXNzb3IuIFNpbmNlIHdlIGhhdmUgdGhlCiAJICogcGh5c2ljYWwgY3B1IGlkIGluIHIyNCwgd2UgbmVlZCB0byBzZWFyY2ggdGhlIHBhY2FzIHRvIGZpbmQKIAkgKiB3aGljaCBsb2dpY2FsIGlkIG1hcHMgdG8gb3VyIHBoeXNpY2FsIG9uZS4KIAkgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjEzLCBwYWNhKQkvKiBHZXQgYmFzZSB2YWRkciBvZiBwYWNhIGFycmF5CSAqLworCUxPQURfUkVHX0FERFIocjEzLCBwYWNhKQkvKiBHZXQgYmFzZSB2YWRkciBvZiBwYWNhIGFycmF5CSAqLwogCWxpCXI1LDAJCQkvKiBsb2dpY2FsIGNwdSBpZCAgICAgICAgICAgICAgICAqLwogMToJbGh6CXI2LFBBQ0FIV0NQVUlEKHIxMykJLyogTG9hZCBIVyBwcm9jaWQgZnJvbSBwYWNhICAgICAgKi8KIAljbXB3CXI2LHIyNAkJCS8qIENvbXBhcmUgdG8gb3VyIGlkICAgICAgICAgICAgICovCkBAIC0xMjA4LDcgKzEyNTksNyBAQAogCXN5bmMJCQkJLyogb3JkZXIgcGFjYS5ydW4gYW5kIGN1cl9jcHVfc3BlYyAqLwogCiAJLyogU2VlIGlmIHdlIG5lZWQgdG8gY2FsbCBhIGNwdSBzdGF0ZSByZXN0b3JlIGhhbmRsZXIgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjIzLCBjdXJfY3B1X3NwZWMpCisJTE9BRF9SRUdfQUREUihyMjMsIGN1cl9jcHVfc3BlYykKIAlsZAlyMjMsMChyMjMpCiAJbGQJcjIzLENQVV9TUEVDX1JFU1RPUkUocjIzKQogCWNtcGRpCTAscjIzLDAKQEAgLTEyMjQsMTAgKzEyNzUsMTUgQEAKIAliCV9fc2Vjb25kYXJ5X3N0YXJ0CiAjZW5kaWYKIAorLyoKKyAqIFR1cm4gdGhlIE1NVSBvZmYuCisgKiBBc3N1bWVzIHdlJ3JlIG1hcHBlZCBFQSA9PSBSQSBpZiB0aGUgTU1VIGlzIG9uLgorICovCiBfU1RBVElDKF9fbW11X29mZikKIAltZm1zcglyMwogCWFuZGkuCXIwLHIzLE1TUl9JUnxNU1JfRFIKIAliZXFscgorCW1mbHIJcjQKIAlhbmRjCXIzLHIzLHIwCiAJbXRzcHIJU1BSTl9TUlIwLHI0CiAJbXRzcHIJU1BSTl9TUlIxLHIzCkBAIC0xMjQ4LDYgKzEzMDQsMTggQEAKICAqCiAgKi8KIF9HTE9CQUwoX19zdGFydF9pbml0aWFsaXphdGlvbl9tdWx0aXBsYXRmb3JtKQorCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgcnVubmluZyBpbiA2NCBiaXRzIG1vZGUgKi8KKwlibAkuZW5hYmxlXzY0Yl9tb2RlCisKKwkvKiBHZXQgVE9DIHBvaW50ZXIgKGN1cnJlbnQgcnVudGltZSBhZGRyZXNzKSAqLworCWJsCS5yZWxhdGl2ZV90b2MKKworCS8qIGZpbmQgb3V0IHdoZXJlIHdlIGFyZSBub3cgKi8KKwliY2wJMjAsMzEsJCs0CiswOgltZmxyCXIyNgkJCS8qIHIyNiA9IHJ1bnRpbWUgYWRkciBoZXJlICovCisJYWRkaXMJcjI2LHIyNiwoX3N0ZXh0IC0gMGIpQGhhCisJYWRkaQlyMjYscjI2LChfc3RleHQgLSAwYilAbAkvKiBjdXJyZW50IHJ1bnRpbWUgYmFzZSBhZGRyICovCisKIAkvKgogCSAqIEFyZSB3ZSBib290ZWQgZnJvbSBhIFBST00gT2YtdHlwZSBjbGllbnQtaW50ZXJmYWNlID8KIAkgKi8KQEAgLTEyNTksOSArMTMyNyw2IEBACiAJbXIJcjMxLHIzCiAJbXIJcjMwLHI0CiAKLQkvKiBNYWtlIHN1cmUgd2UgYXJlIHJ1bm5pbmcgaW4gNjQgYml0cyBtb2RlICovCi0JYmwJLmVuYWJsZV82NGJfbW9kZQotCiAJLyogU2V0dXAgc29tZSBjcml0aWNhbCA5NzAgU1BScyBiZWZvcmUgc3dpdGNoaW5nIE1NVSBvZmYgKi8KIAltZnNwcglyMCxTUFJOX1BWUgogCXNyd2kJcjAscjAsMTYKQEAgLTEyNzYsOSArMTM0MSw3IEBACiAxOglibAkuX19jcHVfcHJlaW5pdF9wcGM5NzAKIDI6CiAKLQkvKiBTd2l0Y2ggb2ZmIE1NVSBpZiBub3QgYWxyZWFkeSAqLwotCUxPQURfUkVHX0lNTUVESUFURShyNCwgLl9fYWZ0ZXJfcHJvbV9zdGFydCAtIEtFUk5FTEJBU0UpCi0JYWRkCXI0LHI0LHIzMAorCS8qIFN3aXRjaCBvZmYgTU1VIGlmIG5vdCBhbHJlYWR5IG9mZiAqLwogCWJsCS5fX21tdV9vZmYKIAliCS5fX2FmdGVyX3Byb21fc3RhcnQKIApAQCAtMTI5MywyMiArMTM1NiwxNSBAQAogCS8qCiAJICogQWxpZ24gdGhlIHN0YWNrIHRvIDE2LWJ5dGUgYm91bmRhcnkKIAkgKiBEZXBlbmRpbmcgb24gdGhlIHNpemUgYW5kIGxheW91dCBvZiB0aGUgRUxGIHNlY3Rpb25zIGluIHRoZSBpbml0aWFsCi0JICogYm9vdCBiaW5hcnksIHRoZSBzdGFjayBwb2ludGVyIHdpbGwgYmUgdW5hbGlnbmV0IG9uIFBvd2VyTWFjCisJICogYm9vdCBiaW5hcnksIHRoZSBzdGFjayBwb2ludGVyIG1heSBiZSB1bmFsaWduZWQgb24gUG93ZXJNYWMKIAkgKi8KIAlybGRpY3IJcjEscjEsMCw1OQogCi0JLyogTWFrZSBzdXJlIHdlIGFyZSBydW5uaW5nIGluIDY0IGJpdHMgbW9kZSAqLwotCWJsCS5lbmFibGVfNjRiX21vZGUKLQotCS8qIHB1dCBhIHJlbG9jYXRpb24gb2Zmc2V0IGludG8gcjMgKi8KLQlibAkucmVsb2Nfb2Zmc2V0Ci0KLQlMT0FEX1JFR19JTU1FRElBVEUocjIsX190b2Nfc3RhcnQpCi0JYWRkaQlyMixyMiwweDQwMDAKLQlhZGRpCXIyLHIyLDB4NDAwMAotCi0JLyogUmVsb2NhdGUgdGhlIFRPQyBmcm9tIGEgdmlydCBhZGRyIHRvIGEgcmVhbCBhZGRyICovCi0JYWRkCXIyLHIyLHIzCisjaWZkZWYgQ09ORklHX1JFTE9DQVRBQkxFCisJLyogUmVsb2NhdGUgY29kZSBmb3Igd2hlcmUgd2UgYXJlIG5vdyAqLworCW1yCXIzLHIyNgorCWJsCS5yZWxvY2F0ZQorI2VuZGlmCiAKIAkvKiBSZXN0b3JlIHBhcmFtZXRlcnMgKi8KIAltcglyMyxyMzEKQEAgLTEzMTgsNjAgKzEzNzQsNTEgQEAKIAltcglyNyxyMjcKIAogCS8qIERvIGFsbCBvZiB0aGUgaW50ZXJhY3Rpb24gd2l0aCBPRiBjbGllbnQgaW50ZXJmYWNlICovCisJbXIJcjgscjI2CiAJYmwJLnByb21faW5pdAogCS8qIFdlIG5ldmVyIHJldHVybiAqLwogCXRyYXAKIAogX1NUQVRJQyhfX2FmdGVyX3Byb21fc3RhcnQpCisjaWZkZWYgQ09ORklHX1JFTE9DQVRBQkxFCisJLyogcHJvY2VzcyByZWxvY2F0aW9ucyBmb3IgdGhlIGZpbmFsIGFkZHJlc3Mgb2YgdGhlIGtlcm5lbCAqLworCWxpcwlyMjUsUEFHRV9PRkZTRVRAaGlnaGVzdAkvKiBjb21wdXRlIHZpcnR1YWwgYmFzZSBvZiBrZXJuZWwgKi8KKwlzbGRpCXIyNSxyMjUsMzIKKwltcglyMyxyMjUKKwlibAkucmVsb2NhdGUKKyNlbmRpZgogCiAvKgotICogV2UgbmVlZCB0byBydW4gd2l0aCBfX3N0YXJ0IGF0IHBoeXNpY2FsIGFkZHJlc3MgUEhZU0lDQUxfU1RBUlQuCisgKiBXZSBuZWVkIHRvIHJ1biB3aXRoIF9zdGV4dCBhdCBwaHlzaWNhbCBhZGRyZXNzIFBIWVNJQ0FMX1NUQVJULgogICogVGhpcyB3aWxsIGxlYXZlIHNvbWUgY29kZSBpbiB0aGUgZmlyc3QgMjU2QiBvZgogICogcmVhbCBtZW1vcnksIHdoaWNoIGFyZSByZXNlcnZlZCBmb3Igc29mdHdhcmUgdXNlLgotICogVGhlIHJlbWFpbmRlciBvZiB0aGUgZmlyc3QgcGFnZSBpcyBsb2FkZWQgd2l0aCB0aGUgZml4ZWQKLSAqIGludGVycnVwdCB2ZWN0b3JzLiAgVGhlIG5leHQgdHdvIHBhZ2VzIGFyZSBmaWxsZWQgd2l0aAotICogdW5rbm93biBleGNlcHRpb24gcGxhY2Vob2xkZXJzLgogICoKICAqIE5vdGU6IFRoaXMgcHJvY2VzcyBvdmVyd3JpdGVzIHRoZSBPRiBleGNlcHRpb24gdmVjdG9ycy4KLSAqCXIyNiA9PSByZWxvY2F0aW9uIG9mZnNldAotICoJcjI3ID09IEtFUk5FTEJBU0UKICAqLwotCWJsCS5yZWxvY19vZmZzZXQKLQltcglyMjYscjMKLQlMT0FEX1JFR19JTU1FRElBVEUocjI3LCBLRVJORUxCQVNFKQotCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIzLCBQSFlTSUNBTF9TVEFSVCkJLyogdGFyZ2V0IGFkZHIgKi8KLQotCS8vIFhYWCBGSVhNRTogVXNlIHBoeXMgcmV0dXJuZWQgYnkgT0YgKHIzMCkKLQlhZGQJcjQscjI3LHIyNiAJCS8qIHNvdXJjZSBhZGRyCQkJICovCi0JCQkJCS8qIGN1cnJlbnQgYWRkcmVzcyBvZiBfc3RhcnQJICovCi0JCQkJCS8qICAgaS5lLiB3aGVyZSB3ZSBhcmUgcnVubmluZwkgKi8KLQkJCQkJLyoJdGhlIHNvdXJjZSBhZGRyCQkgKi8KLQotCWNtcGRpCXI0LDAJCQkvKiBJbiBzb21lIGNhc2VzIHRoZSBsb2FkZXIgbWF5ICAqLwotCWJuZQkxZgotCWIJLnN0YXJ0X2hlcmVfbXVsdGlwbGF0Zm9ybSAvKiBoYXZlIGFscmVhZHkgcHV0IHVzIGF0IHplcm8gKi8KLQkJCQkJLyogc28gd2UgY2FuIHNraXAgdGhlIGNvcHkuICAgICAgKi8KLTE6CUxPQURfUkVHX0lNTUVESUFURShyNSxjb3B5X3RvX2hlcmUpIC8qICMgYnl0ZXMgb2YgbWVtb3J5IHRvIGNvcHkgKi8KLQlzdWIJcjUscjUscjI3Ci0KKwlsaQlyMywwCQkJLyogdGFyZ2V0IGFkZHIgKi8KKwltci4JcjQscjI2CQkJLyogSW4gc29tZSBjYXNlcyB0aGUgbG9hZGVyIG1heSAgKi8KKwliZXEJOWYJCQkvKiBoYXZlIGFscmVhZHkgcHV0IHVzIGF0IHplcm8gKi8KKwlsaXMJcjUsKGNvcHlfdG9faGVyZSAtIF9zdGV4dClAaGEKKwlhZGRpCXI1LHI1LChjb3B5X3RvX2hlcmUgLSBfc3RleHQpQGwgLyogIyBieXRlcyBvZiBtZW1vcnkgdG8gY29weSAqLwogCWxpCXI2LDB4MTAwCQkvKiBTdGFydCBvZmZzZXQsIHRoZSBmaXJzdCAweDEwMCAqLwogCQkJCQkvKiBieXRlcyB3ZXJlIGNvcGllZCBlYXJsaWVyLgkgKi8KIAogCWJsCS5jb3B5X2FuZF9mbHVzaAkJLyogY29weSB0aGUgZmlyc3QgbiBieXRlcwkgKi8KIAkJCQkJLyogdGhpcyBpbmNsdWRlcyB0aGUgY29kZSBiZWluZwkgKi8KIAkJCQkJLyogZXhlY3V0ZWQgaGVyZS4JCSAqLwotCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIwLCA0ZikJLyogSnVtcCB0byB0aGUgY29weSBvZiB0aGlzIGNvZGUgKi8KLQltdGN0cglyMAkJCS8qIHRoYXQgd2UganVzdCBtYWRlL3JlbG9jYXRlZAkgKi8KKwlhZGRpcwlyOCxyMywoNGYgLSBfc3RleHQpQGhhCS8qIEp1bXAgdG8gdGhlIGNvcHkgb2YgdGhpcyBjb2RlICovCisJYWRkaQlyOCxyOCwoNGYgLSBfc3RleHQpQGwJLyogdGhhdCB3ZSBqdXN0IG1hZGUgKi8KKwltdGN0cglyOAogCWJjdHIKIAotNDoJTE9BRF9SRUdfSU1NRURJQVRFKHI1LGtsaW1pdCkKLQlhZGQJcjUscjUscjI2Ci0JbGQJcjUsMChyNSkJCS8qIGdldCB0aGUgdmFsdWUgb2Yga2xpbWl0ICovCi0Jc3ViCXI1LHI1LHIyNworNDoJLyogTm93IGNvcHkgdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCB1cCB0byBfZW5kICovCisJYWRkaXMJcjUscjI2LChwX2VuZCAtIF9zdGV4dClAaGEKKwlsZAlyNSwocF9lbmQgLSBfc3RleHQpQGwocjUpCS8qIGdldCBfZW5kICovCiAJYmwJLmNvcHlfYW5kX2ZsdXNoCQkvKiBjb3B5IHRoZSByZXN0ICovCi0JYgkuc3RhcnRfaGVyZV9tdWx0aXBsYXRmb3JtCisKKzk6CWIJLnN0YXJ0X2hlcmVfbXVsdGlwbGF0Zm9ybQorCitwX2VuZDoJLmxsb25nCV9lbmQgLSBfc3RleHQKIAogLyoKICAqIENvcHkgcm91dGluZSB1c2VkIHRvIGNvcHkgdGhlIGtlcm5lbCB0byBzdGFydCBhdCBwaHlzaWNhbCBhZGRyZXNzIDAKQEAgLTE0MzYsNiArMTQ4Myw5IEBACiAJLyogdHVybiBvbiA2NC1iaXQgbW9kZSAqLwogCWJsCS5lbmFibGVfNjRiX21vZGUKIAorCS8qIGdldCBUT0MgcG9pbnRlciAocmVhbCBhZGRyZXNzKSAqLworCWJsCS5yZWxhdGl2ZV90b2MKKwogCS8qIENvcHkgc29tZSBDUFUgc2V0dGluZ3MgZnJvbSBDUFUgMCAqLwogCWJsCS5fX3Jlc3RvcmVfY3B1X3BwYzk3MAogCkBAIC0xNDQ1LDEwICsxNDk1LDEwIEBACiAJbXRtc3JkCXIzCQkJLyogUkkgb24gKi8KIAogCS8qIFNldCB1cCBhIHBhY2EgdmFsdWUgZm9yIHRoaXMgcHJvY2Vzc29yLiAqLwotCUxPQURfUkVHX0lNTUVESUFURShyNCwgcGFjYSkJLyogR2V0IGJhc2UgdmFkZHIgb2YgcGFjYSBhcnJheQkqLwotCW11bGxpCXIxMyxyMjQsUEFDQV9TSVpFCSAvKiBDYWxjdWxhdGUgdmFkZHIgb2YgcmlnaHQgcGFjYSAqLworCUxPQURfUkVHX0FERFIocjQscGFjYSkJCS8qIEdldCBiYXNlIHZhZGRyIG9mIHBhY2EgYXJyYXkJKi8KKwltdWxsaQlyMTMscjI0LFBBQ0FfU0laRQkvKiBDYWxjdWxhdGUgdmFkZHIgb2YgcmlnaHQgcGFjYSAqLwogCWFkZAlyMTMscjEzLHI0CQkvKiBmb3IgdGhpcyBwcm9jZXNzb3IuCQkqLwotCW10c3ByCVNQUk5fU1BSRzMscjEzCQkgLyogU2F2ZSB2YWRkciBvZiBwYWNhIGluIFNQUkczCSovCisJbXRzcHIJU1BSTl9TUFJHMyxyMTMJCS8qIFNhdmUgdmFkZHIgb2YgcGFjYSBpbiBTUFJHMwkqLwogCiAJLyogQ3JlYXRlIGEgdGVtcCBrZXJuZWwgc3RhY2sgZm9yIHVzZSBiZWZvcmUgcmVsb2NhdGlvbiBpcyBvbi4JKi8KIAlsZAlyMSxQQUNBRU1FUkdTUChyMTMpCkBAIC0xNDc2LDkgKzE1MjYsNiBAQAogCS8qIFNldCB0aHJlYWQgcHJpb3JpdHkgdG8gTUVESVVNICovCiAJSE1UX01FRElVTQogCi0JLyogTG9hZCBUT0MgKi8KLQlsZAlyMixQQUNBVE9DKHIxMykKLQogCS8qIERvIGVhcmx5IHNldHVwIGZvciB0aGF0IENQVSAoc3RhYiwgc2xiLCBoYXNoIHRhYmxlIHBvaW50ZXIpICovCiAJYmwJLmVhcmx5X3NldHVwX3NlY29uZGFyeQogCkBAIC0xNTE1LDkgKzE1NjIsMTEgQEAKIAogLyogCiAgKiBSdW5uaW5nIHdpdGggcmVsb2NhdGlvbiBvbiBhdCB0aGlzIHBvaW50LiAgQWxsIHdlIHdhbnQgdG8gZG8gaXMKLSAqIHplcm8gdGhlIHN0YWNrIGJhY2stY2hhaW4gcG9pbnRlciBiZWZvcmUgZ29pbmcgaW50byBDIGNvZGUuCisgKiB6ZXJvIHRoZSBzdGFjayBiYWNrLWNoYWluIHBvaW50ZXIgYW5kIGdldCB0aGUgVE9DIHZpcnR1YWwgYWRkcmVzcworICogYmVmb3JlIGdvaW5nIGludG8gQyBjb2RlLgogICovCiBfR0xPQkFMKHN0YXJ0X3NlY29uZGFyeV9wcm9sb2cpCisJbGQJcjIsUEFDQVRPQyhyMTMpCiAJbGkJcjMsMAogCXN0ZAlyMywwKHIxKQkJLyogWmVybyB0aGUgc3RhY2sgZnJhbWUgcG9pbnRlcgkqLwogCWJsCS5zdGFydF9zZWNvbmRhcnkKQEAgLTE1MjksMzQgKzE1NzgsNDYgQEAKICAqLwogX0dMT0JBTChlbmFibGVfNjRiX21vZGUpCiAJbWZtc3IJcjExCQkJLyogZ3JhYiB0aGUgY3VycmVudCBNU1IgKi8KLQlsaQlyMTIsMQotCXJsZGljcglyMTIscjEyLE1TUl9TRl9MRywoNjMtTVNSX1NGX0xHKQotCW9yCXIxMSxyMTEscjEyCi0JbGkJcjEyLDEKLQlybGRpY3IJcjEyLHIxMixNU1JfSVNGX0xHLCg2My1NU1JfSVNGX0xHKQorCWxpCXIxMiwoTVNSX1NGIHwgTVNSX0lTRilAaGlnaGVzdAorCXNsZGkJcjEyLHIxMiw0OAogCW9yCXIxMSxyMTEscjEyCiAJbXRtc3JkCXIxMQogCWlzeW5jCiAJYmxyCiAKIC8qCisgKiBUaGlzIHB1dHMgdGhlIFRPQyBwb2ludGVyIGludG8gcjIsIG9mZnNldCBieSAweDgwMDAgKGFzIGV4cGVjdGVkCisgKiBieSB0aGUgdG9vbGNoYWluKS4gIEl0IGNvbXB1dGVzIHRoZSBjb3JyZWN0IHZhbHVlIGZvciB3aGVyZXZlciB3ZQorICogYXJlIHJ1bm5pbmcgYXQgdGhlIG1vbWVudCwgdXNpbmcgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZS4KKyAqLworX0dMT0JBTChyZWxhdGl2ZV90b2MpCisJbWZscglyMAorCWJjbAkyMCwzMSwkKzQKKzA6CW1mbHIJcjkKKwlsZAlyMiwocF90b2MgLSAwYikocjkpCisJYWRkCXIyLHIyLHI5CisJbXRscglyMAorCWJscgorCitwX3RvYzoJLmxsb25nCV9fdG9jX3N0YXJ0ICsgMHg4MDAwIC0gMGIKKworLyoKICAqIFRoaXMgaXMgd2hlcmUgdGhlIG1haW4ga2VybmVsIGNvZGUgc3RhcnRzLgogICovCiBfSU5JVF9TVEFUSUMoc3RhcnRfaGVyZV9tdWx0aXBsYXRmb3JtKQotCS8qIGdldCBhIG5ldyBvZmZzZXQsIG5vdyB0aGF0IHRoZSBrZXJuZWwgaGFzIG1vdmVkLiAqLwotCWJsCS5yZWxvY19vZmZzZXQKLQltcglyMjYscjMKKwkvKiBzZXQgdXAgdGhlIFRPQyAocmVhbCBhZGRyZXNzKSAqLworCWJsCS5yZWxhdGl2ZV90b2MKIAogCS8qIENsZWFyIG91dCB0aGUgQlNTLiBJdCBtYXkgaGF2ZSBiZWVuIGRvbmUgaW4gcHJvbV9pbml0LAogCSAqIGFscmVhZHkgYnV0IHRoYXQncyBpcnJlbGV2YW50IHNpbmNlIHByb21faW5pdCB3aWxsIHNvb24KIAkgKiBiZSBkZXRhY2hlZCBmcm9tIHRoZSBrZXJuZWwgY29tcGxldGVseS4gQmVzaWRlcywgd2UgbmVlZAogCSAqIHRvIGNsZWFyIGl0IG5vdyBmb3Iga2V4ZWMtc3R5bGUgZW50cnkuCiAJICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIxMSxfX2Jzc19zdG9wKQotCUxPQURfUkVHX0lNTUVESUFURShyOCxfX2Jzc19zdGFydCkKKwlMT0FEX1JFR19BRERSKHIxMSxfX2Jzc19zdG9wKQorCUxPQURfUkVHX0FERFIocjgsX19ic3Nfc3RhcnQpCiAJc3ViCXIxMSxyMTEscjgJCS8qIGJzcyBzaXplCQkJKi8KIAlhZGRpCXIxMSxyMTEsNwkJLyogcm91bmQgdXAgdG8gYW4gZXZlbiBkb3VibGUgd29yZCAqLwotCXJsZGljbC4gcjExLHIxMSw2MSwzCQkvKiBzaGlmdCByaWdodCBieSAzCQkqLworCXNyZGkuCXIxMSxyMTEsMwkJLyogc2hpZnQgcmlnaHQgYnkgMwkJKi8KIAliZXEJNGYKIAlhZGRpCXI4LHI4LC04CiAJbGkJcjAsMApAQCAtMTU2OSwzNSArMTYzMCwzNSBAQAogCW9yaQlyNixyNixNU1JfUkkKIAltdG1zcmQJcjYJCQkvKiBSSSBvbiAqLwogCi0JLyogVGhlIGZvbGxvd2luZyBnZXRzIHRoZSBzdGFjayBhbmQgVE9DIHNldCB1cCB3aXRoIHRoZSByZWdzICovCisjaWZkZWYgQ09ORklHX1JFTE9DQVRBQkxFCisJLyogU2F2ZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyB3ZSdyZSBydW5uaW5nIGF0IGluIGtlcm5zdGFydF9hZGRyICovCisJTE9BRF9SRUdfQUREUihyNCwga2VybnN0YXJ0X2FkZHIpCisJY2xybGRpCXIwLHIyNSwyCisJc3RkCXIwLDAocjQpCisjZW5kaWYKKworCS8qIFRoZSBmb2xsb3dpbmcgZ2V0cyB0aGUgc3RhY2sgc2V0IHVwIHdpdGggdGhlIHJlZ3MgKi8KIAkvKiBwb2ludGluZyB0byB0aGUgcmVhbCBhZGRyIG9mIHRoZSBrZXJuZWwgc3RhY2suICBUaGlzIGlzICAgKi8KIAkvKiBhbGwgZG9uZSB0byBzdXBwb3J0IHRoZSBDIGZ1bmN0aW9uIGNhbGwgYmVsb3cgd2hpY2ggc2V0cyAgKi8KIAkvKiB1cCB0aGUgaHRhYi4gIFRoaXMgaXMgZG9uZSBiZWNhdXNlIHdlIGhhdmUgcmVsb2NhdGVkIHRoZSAgKi8KIAkvKiBrZXJuZWwgYnV0IGFyZSBzdGlsbCBydW5uaW5nIGluIHJlYWwgbW9kZS4gKi8KIAotCUxPQURfUkVHX0lNTUVESUFURShyMyxpbml0X3RocmVhZF91bmlvbikKLQlhZGQJcjMscjMscjI2CisJTE9BRF9SRUdfQUREUihyMyxpbml0X3RocmVhZF91bmlvbikKIAotCS8qIHNldCB1cCBhIHN0YWNrIHBvaW50ZXIgKHBoeXNpY2FsIGFkZHJlc3MpICovCisJLyogc2V0IHVwIGEgc3RhY2sgcG9pbnRlciAqLwogCWFkZGkJcjEscjMsVEhSRUFEX1NJWkUKIAlsaQlyMCwwCiAJc3RkdQlyMCwtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjEpCiAKLQkvKiBzZXQgdXAgdGhlIFRPQyAocGh5c2ljYWwgYWRkcmVzcykgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjIsX190b2Nfc3RhcnQpCi0JYWRkaQlyMixyMiwweDQwMDAKLQlhZGRpCXIyLHIyLDB4NDAwMAotCWFkZAlyMixyMixyMjYKLQogCS8qIERvIHZlcnkgZWFybHkga2VybmVsIGluaXRpYWxpemF0aW9ucywgaW5jbHVkaW5nIGluaXRpYWwgaGFzaCB0YWJsZSwKIAkgKiBzdGFiIGFuZCBzbGIgc2V0dXAgYmVmb3JlIHdlIHR1cm4gb24gcmVsb2NhdGlvbi4JKi8KIAogCS8qIFJlc3RvcmUgcGFyYW1ldGVycyBwYXNzZWQgZnJvbSBwcm9tX2luaXQva2V4ZWMgKi8KIAltcglyMyxyMzEKLSAJYmwJLmVhcmx5X3NldHVwCisJYmwJLmVhcmx5X3NldHVwCQkvKiBhbHNvIHNldHMgcjEzIGFuZCBTUFJHMyAqLwogCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIzLCAuc3RhcnRfaGVyZV9jb21tb24pCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI0LCBNU1JfS0VSTkVMKQorCUxPQURfUkVHX0FERFIocjMsIC5zdGFydF9oZXJlX2NvbW1vbikKKwlsZAlyNCxQQUNBS01TUihyMTMpCiAJbXRzcHIJU1BSTl9TUlIwLHIzCiAJbXRzcHIJU1BSTl9TUlIxLHI0CiAJcmZpZApAQCAtMTYwNiwyMSArMTY2NywxMSBAQAogCS8qIFRoaXMgaXMgd2hlcmUgYWxsIHBsYXRmb3JtcyBjb252ZXJnZSBleGVjdXRpb24gKi8KIF9JTklUX0dMT0JBTChzdGFydF9oZXJlX2NvbW1vbikKIAkvKiByZWxvY2F0aW9uIGlzIG9uIGF0IHRoaXMgcG9pbnQgKi8KLQotCS8qIFRoZSBmb2xsb3dpbmcgY29kZSBzZXRzIHVwIHRoZSBTUCBhbmQgVE9DIG5vdyB0aGF0IHdlIGFyZSAqLwotCS8qIHJ1bm5pbmcgd2l0aCB0cmFuc2xhdGlvbiBlbmFibGVkLiAqLwotCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIzLGluaXRfdGhyZWFkX3VuaW9uKQotCi0JLyogc2V0IHVwIHRoZSBzdGFjayAqLwotCWFkZGkJcjEscjMsVEhSRUFEX1NJWkUKLQlsaQlyMCwwCi0Jc3RkdQlyMCwtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjEpCi0KLQkvKiBMb2FkIHRoZSBUT0MgKi8KLQlsZAlyMixQQUNBVE9DKHIxMykKIAlzdGQJcjEsUEFDQUtTQVZFKHIxMykKIAorCS8qIExvYWQgdGhlIFRPQyAodmlydHVhbCBhZGRyZXNzKSAqLworCWxkCXIyLFBBQ0FUT0MocjEzKQorCiAJYmwJLnNldHVwX3N5c3RlbQogCiAJLyogTG9hZCB1cCB0aGUga2VybmVsIGNvbnRleHQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUwppbmRleCAzY2I1MmZhLi41OTAzMDRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCkBAIC00MjIsNyArNDIyLDYgQEAKICAqICAgcjEyIGlzIHBvaW50ZXIgdG8gdGhlIHB0ZQogICovCiAjaWZkZWYgQ09ORklHX1BURV82NEJJVAotI2RlZmluZSBQVEVfRkxBR1NfT0ZGU0VUCTQKICNkZWZpbmUgRklORF9QVEUJXAogCXJsd2lubQlyMTIsIHIxMCwgMTMsIDE5LCAyOTsJLyogQ29tcHV0ZSBwZ2Rpci9wbWQgb2Zmc2V0ICovCVwKIAlsd3p4CXIxMSwgcjEyLCByMTE7CQkvKiBHZXQgcGdkL3BtZCBlbnRyeSAqLwkJXApAQCAtNDMxLDcgKzQzMCw2IEBACiAJcmx3aW1pCXIxMiwgcjEwLCAyMywgMjAsIDI4OwkvKiBDb21wdXRlIHB0ZSBhZGRyZXNzICovCVwKIAlsd3oJcjExLCA0KHIxMik7CQkvKiBHZXQgcHRlIGVudHJ5ICovCiAjZWxzZQotI2RlZmluZSBQVEVfRkxBR1NfT0ZGU0VUCTAKICNkZWZpbmUgRklORF9QVEUJXAogCXJsd2ltaQlyMTEsIHIxMCwgMTIsIDIwLCAyOTsJLyogQ3JlYXRlIEwxIChwZ2Rpci9wbWQpIGFkZHJlc3MgKi8JXAogCWx3eglyMTEsIDAocjExKTsJCS8qIEdldCBMMSBlbnRyeSAqLwkJCVwKQEAgLTU3OSwxMyArNTc3LDE5IEBACiAKIAlGSU5EX1BURQogCWFuZGMuCXIxMyxyMTMscjExCQkvKiBDaGVjayBwZXJtaXNzaW9uICovCi0JYm5lCTJmCQkJLyogQmFpbCBpZiBwZXJtaXNzaW9uIG1pc21hY2ggKi8KIAogI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKLQlsd3oJcjEzLCAwKHIxMikKKyNpZmRlZiBDT05GSUdfU01QCisJc3ViZglyMTAscjExLHIxMgkJLyogY3JlYXRlIGZhbHNlIGRhdGEgZGVwICovCisJbHd6eAlyMTMscjExLHIxMAkJLyogR2V0IHVwcGVyIHB0ZSBiaXRzICovCisjZWxzZQorCWx3eglyMTMsMChyMTIpCQkvKiBHZXQgdXBwZXIgcHRlIGJpdHMgKi8KKyNlbmRpZgogI2VuZGlmCiAKLQkgLyogSnVtcCB0byBjb21tb24gdGxiIGxvYWQgKi8KKwlibmUJMmYJCQkvKiBCYWlsIGlmIHBlcm1pc3Npb24vdmFsaWQgbWlzbWFjaCAqLworCisJLyogSnVtcCB0byBjb21tb24gdGxiIGxvYWQgKi8KIAliCWZpbmlzaF90bGJfbG9hZAogMjoKIAkvKiBUaGUgYmFpbG91dC4gIFJlc3RvcmUgcmVnaXN0ZXJzIHRvIHByZS1leGNlcHRpb24gY29uZGl0aW9ucwpAQCAtNjQwLDExICs2NDQsMTcgQEAKIAogCUZJTkRfUFRFCiAJYW5kYy4JcjEzLHIxMyxyMTEJCS8qIENoZWNrIHBlcm1pc3Npb24gKi8KLQlibmUJMmYJCQkvKiBCYWlsIGlmIHBlcm1pc3Npb24gbWlzbWFjaCAqLwogCiAjaWZkZWYgQ09ORklHX1BURV82NEJJVAotCWx3eglyMTMsIDAocjEyKQorI2lmZGVmIENPTkZJR19TTVAKKwlzdWJmCXIxMCxyMTEscjEyCQkvKiBjcmVhdGUgZmFsc2UgZGF0YSBkZXAgKi8KKwlsd3p4CXIxMyxyMTEscjEwCQkvKiBHZXQgdXBwZXIgcHRlIGJpdHMgKi8KKyNlbHNlCisJbHd6CXIxMywwKHIxMikJCS8qIEdldCB1cHBlciBwdGUgYml0cyAqLwogI2VuZGlmCisjZW5kaWYKKworCWJuZQkyZgkJCS8qIEJhaWwgaWYgcGVybWlzc2lvbiBtaXNtYWNoICovCiAKIAkvKiBKdW1wIHRvIGNvbW1vbiBUTEIgbG9hZCBwb2ludCAqLwogCWIJZmluaXNoX3RsYl9sb2FkCkBAIC03MDIsNyArNzEyLDcgQEAKIC8qCiAgKiBCb3RoIHRoZSBpbnN0cnVjdGlvbiBhbmQgZGF0YSBUTEIgbWlzcyBnZXQgdG8gdGhpcwogICogcG9pbnQgdG8gbG9hZCB0aGUgVExCLgotICoJcjEwIC0gRUEgb2YgZmF1bHQKKyAqCXIxMCAtIGF2YWlsYWJsZSB0byB1c2UKICAqCXIxMSAtIFRMQiAoaW5mbyBmcm9tIExpbnV4IFBURSkKICAqCXIxMiAtIGF2YWlsYWJsZSB0byB1c2UKICAqCXIxMyAtIHVwcGVyIGJpdHMgb2YgUFRFIChpZiBQVEVfNjRCSVQpIG9yIGF2YWlsYWJsZSB0byB1c2UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYwppbmRleCA1NTBhMTkzLi5lYTFiYTg5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCkBAIC01MSwxNyArNTEsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2lvbW11X2ZyZWUoc3RydWN0IGlvbW11X3RhYmxlICosIGRtYV9hZGRyX3QsIHVuc2lnbmVkIGludCk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpb21tdV9udW1fcGFnZXModW5zaWduZWQgbG9uZyB2YWRkciwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2xlbikKLXsKLQl1bnNpZ25lZCBsb25nIG5wYWdlczsKLQotCW5wYWdlcyA9IElPTU1VX1BBR0VfQUxJR04odmFkZHIgKyBzbGVuKSAtICh2YWRkciAmIElPTU1VX1BBR0VfTUFTSyk7Ci0JbnBhZ2VzID4+PSBJT01NVV9QQUdFX1NISUZUOwotCi0JcmV0dXJuIG5wYWdlczsKLX0KLQogc3RhdGljIGludCBfX2luaXQgc2V0dXBfcHJvdGVjdDRnYihjaGFyICpzdHIpCiB7CiAJaWYgKHN0cmNtcChzdHIsICJvbiIpID09IDApCkBAIC0zMjUsNyArMzE0LDcgQEAKIAkJfQogCQkvKiBBbGxvY2F0ZSBpb21tdSBlbnRyaWVzIGZvciB0aGF0IHNlZ21lbnQgKi8KIAkJdmFkZHIgPSAodW5zaWduZWQgbG9uZykgc2dfdmlydChzKTsKLQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHZhZGRyLCBzbGVuKTsKKwkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHZhZGRyLCBzbGVuLCBJT01NVV9QQUdFX1NJWkUpOwogCQlhbGlnbiA9IDA7CiAJCWlmIChJT01NVV9QQUdFX1NISUZUIDwgUEFHRV9TSElGVCAmJiBzbGVuID49IFBBR0VfU0laRSAmJgogCQkgICAgKHZhZGRyICYgflBBR0VfTUFTSykgPT0gMCkKQEAgLTQxOCw3ICs0MDcsOCBAQAogCQkJdW5zaWduZWQgbG9uZyB2YWRkciwgbnBhZ2VzOwogCiAJCQl2YWRkciA9IHMtPmRtYV9hZGRyZXNzICYgSU9NTVVfUEFHRV9NQVNLOwotCQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoKTsKKwkJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhzLT5kbWFfYWRkcmVzcywgcy0+ZG1hX2xlbmd0aCwKKwkJCQkJCSBJT01NVV9QQUdFX1NJWkUpOwogCQkJX19pb21tdV9mcmVlKHRibCwgdmFkZHIsIG5wYWdlcyk7CiAJCQlzLT5kbWFfYWRkcmVzcyA9IERNQV9FUlJPUl9DT0RFOwogCQkJcy0+ZG1hX2xlbmd0aCA9IDA7CkBAIC00NTIsNyArNDQyLDggQEAKIAogCQlpZiAoc2ctPmRtYV9sZW5ndGggPT0gMCkKIAkJCWJyZWFrOwotCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSwgc2ctPmRtYV9sZW5ndGgpOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSwgc2ctPmRtYV9sZW5ndGgsCisJCQkJCSBJT01NVV9QQUdFX1NJWkUpOwogCQlfX2lvbW11X2ZyZWUodGJsLCBkbWFfaGFuZGxlLCBucGFnZXMpOwogCQlzZyA9IHNnX25leHQoc2cpOwogCX0KQEAgLTU4NCw3ICs1NzUsNyBAQAogCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOwogCiAJdWFkZHIgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKLQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXModWFkZHIsIHNpemUpOworCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyh1YWRkciwgc2l6ZSwgSU9NTVVfUEFHRV9TSVpFKTsKIAogCWlmICh0YmwpIHsKIAkJYWxpZ24gPSAwOwpAQCAtNjE3LDcgKzYwOCw3IEBACiAJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CiAKIAlpZiAodGJsKSB7Ci0JCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfaGFuZGxlLCBzaXplKTsKKwkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGRtYV9oYW5kbGUsIHNpemUsIElPTU1VX1BBR0VfU0laRSk7CiAJCWlvbW11X2ZyZWUodGJsLCBkbWFfaGFuZGxlLCBucGFnZXMpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCmluZGV4IGQ5NzJkZWMuLmFjMjIyZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtNDM5LDggKzQzOSw4IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoaXJxX2hvc3RzKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXJxX2JpZ19sb2NrKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGlycV9yYWRpeF9yZWFkZXIpOwotc3RhdGljIHVuc2lnbmVkIGludCBpcnFfcmFkaXhfd3JpdGVyOworc3RhdGljIHVuc2lnbmVkIGludCByZXZtYXBfdHJlZXNfYWxsb2NhdGVkOworc3RhdGljIERFRklORV9NVVRFWChyZXZtYXBfdHJlZXNfbXV0ZXgpOwogc3RydWN0IGlycV9tYXBfZW50cnkgaXJxX21hcFtOUl9JUlFTXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXJxX3ZpcnFfY291bnQgPSBOUl9JUlFTOwogc3RhdGljIHN0cnVjdCBpcnFfaG9zdCAqaXJxX2RlZmF1bHRfaG9zdDsKQEAgLTU4Myw1NyArNTgzLDYgQEAKIAkJaXJxX3ZpcnFfY291bnQgPSBjb3VudDsKIH0KIAotLyogcmFkaXggdHJlZSBub3QgbG9ja2xlc3Mgc2FmZSAhIHdlIHVzZSBhIGJybG9jay10eXBlIG1lY2FuaXNtCi0gKiBmb3Igbm93LCB1bnRpbCB3ZSBjYW4gdXNlIGEgbG9ja2xlc3MgcmFkaXggdHJlZQotICovCi1zdGF0aWMgdm9pZCBpcnFfcmFkaXhfd3Jsb2NrKHVuc2lnbmVkIGxvbmcgKmZsYWdzKQotewotCXVuc2lnbmVkIGludCBjcHUsIG9rOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgKmZsYWdzKTsKLQlpcnFfcmFkaXhfd3JpdGVyID0gMTsKLQlzbXBfbWIoKTsKLQlkbyB7Ci0JCWJhcnJpZXIoKTsKLQkJb2sgPSAxOwotCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCQlpZiAocGVyX2NwdShpcnFfcmFkaXhfcmVhZGVyLCBjcHUpKSB7Ci0JCQkJb2sgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICghb2spCi0JCQljcHVfcmVsYXgoKTsKLQl9IHdoaWxlKCFvayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlycV9yYWRpeF93cnVubG9jayh1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXNtcF93bWIoKTsKLQlpcnFfcmFkaXhfd3JpdGVyID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgaXJxX3JhZGl4X3JkbG9jayh1bnNpZ25lZCBsb25nICpmbGFncykKLXsKLQlsb2NhbF9pcnFfc2F2ZSgqZmxhZ3MpOwotCV9fZ2V0X2NwdV92YXIoaXJxX3JhZGl4X3JlYWRlcikgPSAxOwotCXNtcF9tYigpOwotCWlmIChsaWtlbHkoaXJxX3JhZGl4X3dyaXRlciA9PSAwKSkKLQkJcmV0dXJuOwotCV9fZ2V0X2NwdV92YXIoaXJxX3JhZGl4X3JlYWRlcikgPSAwOwotCXNtcF93bWIoKTsKLQlzcGluX2xvY2soJmlycV9iaWdfbG9jayk7Ci0JX19nZXRfY3B1X3ZhcihpcnFfcmFkaXhfcmVhZGVyKSA9IDE7Ci0Jc3Bpbl91bmxvY2soJmlycV9iaWdfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlycV9yYWRpeF9yZHVubG9jayh1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCV9fZ2V0X2NwdV92YXIoaXJxX3JhZGl4X3JlYWRlcikgPSAwOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQogc3RhdGljIGludCBpcnFfc2V0dXBfdmlycShzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCB2aXJxLAogCQkJICAgIGlycV9od19udW1iZXJfdCBod2lycSkKIHsKQEAgLTc4OCw3ICs3MzcsNiBAQAogewogCXN0cnVjdCBpcnFfaG9zdCAqaG9zdDsKIAlpcnFfaHdfbnVtYmVyX3QgaHdpcnE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICh2aXJxID09IE5PX0lSUSkKIAkJcmV0dXJuOwpAQCAtODIxLDEyICs3NjksMTYgQEAKIAkJCWhvc3QtPnJldm1hcF9kYXRhLmxpbmVhci5yZXZtYXBbaHdpcnFdID0gTk9fSVJROwogCQlicmVhazsKIAljYXNlIElSUV9IT1NUX01BUF9UUkVFOgotCQkvKiBDaGVjayBpZiByYWRpeCB0cmVlIGFsbG9jYXRlZCB5ZXQgKi8KLQkJaWYgKGhvc3QtPnJldm1hcF9kYXRhLnRyZWUuZ2ZwX21hc2sgPT0gMCkKKwkJLyoKKwkJICogQ2hlY2sgaWYgcmFkaXggdHJlZSBhbGxvY2F0ZWQgeWV0LCBpZiBub3QgdGhlbiBub3RoaW5nIHRvCisJCSAqIHJlbW92ZS4KKwkJICovCisJCXNtcF9ybWIoKTsKKwkJaWYgKHJldm1hcF90cmVlc19hbGxvY2F0ZWQgPCAxKQogCQkJYnJlYWs7Ci0JCWlycV9yYWRpeF93cmxvY2soJmZsYWdzKTsKKwkJbXV0ZXhfbG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKIAkJcmFkaXhfdHJlZV9kZWxldGUoJmhvc3QtPnJldm1hcF9kYXRhLnRyZWUsIGh3aXJxKTsKLQkJaXJxX3JhZGl4X3dydW5sb2NrKGZsYWdzKTsKKwkJbXV0ZXhfdW5sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOwogCQlicmVhazsKIAl9CiAKQEAgLTg3NSw0NSArODI3LDY0IEBACiBFWFBPUlRfU1lNQk9MX0dQTChpcnFfZmluZF9tYXBwaW5nKTsKIAogCi11bnNpZ25lZCBpbnQgaXJxX3JhZGl4X3Jldm1hcChzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsCi0JCQkgICAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCit1bnNpZ25lZCBpbnQgaXJxX3JhZGl4X3Jldm1hcF9sb29rdXAoc3RydWN0IGlycV9ob3N0ICpob3N0LAorCQkJCSAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQogewotCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnRyZWU7CiAJc3RydWN0IGlycV9tYXBfZW50cnkgKnB0cjsKIAl1bnNpZ25lZCBpbnQgdmlycTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJV0FSTl9PTihob3N0LT5yZXZtYXBfdHlwZSAhPSBJUlFfSE9TVF9NQVBfVFJFRSk7CiAKLQkvKiBDaGVjayBpZiB0aGUgcmFkaXggdHJlZSBleGlzdCB5ZXQuIFdlIHRlc3QgdGhlIHZhbHVlIG9mCi0JICogdGhlIGdmcF9tYXNrIGZvciB0aGF0LiBTbmVha3kgYnV0IHNhdmVzIGFub3RoZXIgaW50IGluIHRoZQotCSAqIHN0cnVjdHVyZS4gSWYgbm90LCB3ZSBmYWxsYmFjayB0byBzbG93IG1vZGUKKwkvKgorCSAqIENoZWNrIGlmIHRoZSByYWRpeCB0cmVlIGV4aXN0cyBhbmQgaGFzIGJlZSBpbml0aWFsaXplZC4KKwkgKiBJZiBub3QsIHdlIGZhbGxiYWNrIHRvIHNsb3cgbW9kZQogCSAqLwotCXRyZWUgPSAmaG9zdC0+cmV2bWFwX2RhdGEudHJlZTsKLQlpZiAodHJlZS0+Z2ZwX21hc2sgPT0gMCkKKwlpZiAocmV2bWFwX3RyZWVzX2FsbG9jYXRlZCA8IDIpCiAJCXJldHVybiBpcnFfZmluZF9tYXBwaW5nKGhvc3QsIGh3aXJxKTsKIAogCS8qIE5vdyB0cnkgdG8gcmVzb2x2ZSAqLwotCWlycV9yYWRpeF9yZGxvY2soJmZsYWdzKTsKLQlwdHIgPSByYWRpeF90cmVlX2xvb2t1cCh0cmVlLCBod2lycSk7Ci0JaXJxX3JhZGl4X3JkdW5sb2NrKGZsYWdzKTsKKwkvKgorCSAqIE5vIHJjdV9yZWFkX2xvY2soaW5nKSBuZWVkZWQsIHRoZSBwdHIgcmV0dXJuZWQgY2FuJ3QgZ28gdW5kZXIgdXMKKwkgKiBhcyBpdCdzIHJlZmVyZW5jaW5nIGFuIGVudHJ5IGluIHRoZSBzdGF0aWMgaXJxX21hcCB0YWJsZS4KKwkgKi8KKwlwdHIgPSByYWRpeF90cmVlX2xvb2t1cCgmaG9zdC0+cmV2bWFwX2RhdGEudHJlZSwgaHdpcnEpOwogCi0JLyogRm91bmQgaXQsIHJldHVybiAqLwotCWlmIChwdHIpIHsKKwkvKgorCSAqIElmIGZvdW5kIGluIHJhZGl4IHRyZWUsIHRoZW4gZmluZS4KKwkgKiBFbHNlIGZhbGxiYWNrIHRvIGxpbmVhciBsb29rdXAgLSB0aGlzIHNob3VsZCBub3QgaGFwcGVuIGluIHByYWN0aWNlCisJICogYXMgaXQgbWVhbnMgdGhhdCB3ZSBmYWlsZWQgdG8gaW5zZXJ0IHRoZSBub2RlIGluIHRoZSByYWRpeCB0cmVlLgorCSAqLworCWlmIChwdHIpCiAJCXZpcnEgPSBwdHIgLSBpcnFfbWFwOwotCQlyZXR1cm4gdmlycTsKLQl9CisJZWxzZQorCQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyhob3N0LCBod2lycSk7CiAKLQkvKiBJZiBub3QgdGhlcmUsIHRyeSB0byBpbnNlcnQgaXQgKi8KLQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyhob3N0LCBod2lycSk7Ci0JaWYgKHZpcnEgIT0gTk9fSVJRKSB7Ci0JCWlycV9yYWRpeF93cmxvY2soJmZsYWdzKTsKLQkJcmFkaXhfdHJlZV9pbnNlcnQodHJlZSwgaHdpcnEsICZpcnFfbWFwW3ZpcnFdKTsKLQkJaXJxX3JhZGl4X3dydW5sb2NrKGZsYWdzKTsKLQl9CiAJcmV0dXJuIHZpcnE7CiB9CiAKK3ZvaWQgaXJxX3JhZGl4X3Jldm1hcF9pbnNlcnQoc3RydWN0IGlycV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQoreworCisJV0FSTl9PTihob3N0LT5yZXZtYXBfdHlwZSAhPSBJUlFfSE9TVF9NQVBfVFJFRSk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSByYWRpeCB0cmVlIGV4aXN0cyB5ZXQuCisJICogSWYgbm90LCB0aGVuIHRoZSBpcnEgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlIHdoZW4gaXQgZ2V0cworCSAqIGluaXRpYWxpemVkLgorCSAqLworCXNtcF9ybWIoKTsKKwlpZiAocmV2bWFwX3RyZWVzX2FsbG9jYXRlZCA8IDEpCisJCXJldHVybjsKKworCWlmICh2aXJxICE9IE5PX0lSUSkgeworCQltdXRleF9sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOworCQlyYWRpeF90cmVlX2luc2VydCgmaG9zdC0+cmV2bWFwX2RhdGEudHJlZSwgaHdpcnEsCisJCQkJICAmaXJxX21hcFt2aXJxXSk7CisJCW11dGV4X3VubG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKKwl9Cit9CisKIHVuc2lnbmVkIGludCBpcnFfbGluZWFyX3Jldm1hcChzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsCiAJCQkgICAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQogewpAQCAtMTAyMCwxNCArOTkxLDQ0IEBACiBzdGF0aWMgaW50IGlycV9sYXRlX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgaXJxX2hvc3QgKmg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaTsKIAotCWlycV9yYWRpeF93cmxvY2soJmZsYWdzKTsKKwkvKgorCSAqIE5vIG11dHVhbCBleGNsdXNpb24gd2l0aCByZXNwZWN0IHRvIGFjY2Vzc29ycyBvZiB0aGUgdHJlZSBpcyBuZWVkZWQKKwkgKiBoZXJlIGFzIHRoZSBzeW5jaHJvbml6YXRpb24gaXMgZG9uZSB2aWEgdGhlIHN0YXRlIHZhcmlhYmxlCisJICogcmV2bWFwX3RyZWVzX2FsbG9jYXRlZC4KKwkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsICZpcnFfaG9zdHMsIGxpbmspIHsKIAkJaWYgKGgtPnJldm1hcF90eXBlID09IElSUV9IT1NUX01BUF9UUkVFKQotCQkJSU5JVF9SQURJWF9UUkVFKCZoLT5yZXZtYXBfZGF0YS50cmVlLCBHRlBfQVRPTUlDKTsKKwkJCUlOSVRfUkFESVhfVFJFRSgmaC0+cmV2bWFwX2RhdGEudHJlZSwgR0ZQX0tFUk5FTCk7CiAJfQotCWlycV9yYWRpeF93cnVubG9jayhmbGFncyk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgcmFkaXggdHJlZXMgaW5pdHMgYXJlIHZpc2libGUgYmVmb3JlIHNldHRpbmcKKwkgKiB0aGUgZmxhZworCSAqLworCXNtcF93bWIoKTsKKwlyZXZtYXBfdHJlZXNfYWxsb2NhdGVkID0gMTsKKworCS8qCisJICogSW5zZXJ0IHRoZSByZXZlcnNlIG1hcHBpbmcgZm9yIHRob3NlIGludGVycnVwdHMgYWxyZWFkeSBwcmVzZW50CisJICogaW4gaXJxX21hcFtdLgorCSAqLworCW11dGV4X2xvY2soJnJldm1hcF90cmVlc19tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IGlycV92aXJxX2NvdW50OyBpKyspIHsKKwkJaWYgKGlycV9tYXBbaV0uaG9zdCAmJgorCQkgICAgKGlycV9tYXBbaV0uaG9zdC0+cmV2bWFwX3R5cGUgPT0gSVJRX0hPU1RfTUFQX1RSRUUpKQorCQkJcmFkaXhfdHJlZV9pbnNlcnQoJmlycV9tYXBbaV0uaG9zdC0+cmV2bWFwX2RhdGEudHJlZSwKKwkJCQkJICBpcnFfbWFwW2ldLmh3aXJxLCAmaXJxX21hcFtpXSk7CisJfQorCW11dGV4X3VubG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSByYWRpeCB0cmVlcyBpbnNlcnRpb25zIGFyZSB2aXNpYmxlIGJlZm9yZSBzZXR0aW5nCisJICogdGhlIGZsYWcKKwkgKi8KKwlzbXBfd21iKCk7CisJcmV2bWFwX3RyZWVzX2FsbG9jYXRlZCA9IDI7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKaW5kZXggYjNlZWYzMC4uZDA1MWU4YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKQEAgLTUxMCwxMCArNTEwLDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcHJfZGVidWcoIiVzOiBjdXJyZW50X2VudGl0bGVkID0gJWx1LCBjdXJyZW50X3dlaWdodCA9ICV1XG4iLAotCSAgICAgICAgIF9fRlVOQ1RJT05fXywgcHBwX2RhdGEuZW50aXRsZW1lbnQsIHBwcF9kYXRhLndlaWdodCk7CisJCSBfX2Z1bmNfXywgcHBwX2RhdGEuZW50aXRsZW1lbnQsIHBwcF9kYXRhLndlaWdodCk7CiAKIAlwcl9kZWJ1ZygiJXM6IG5ld19lbnRpdGxlZCA9ICVsdSwgbmV3X3dlaWdodCA9ICV1XG4iLAotCQkgX19GVU5DVElPTl9fLCBuZXdfZW50aXRsZWQsIG5ld193ZWlnaHQpOworCQkgX19mdW5jX18sIG5ld19lbnRpdGxlZCwgbmV3X3dlaWdodCk7CiAKIAlyZXR2YWwgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9TRVRfUFBQLCBuZXdfZW50aXRsZWQsIG5ld193ZWlnaHQpOwogCXJldHVybiByZXR2YWw7CkBAIC01NTYsMTAgKzU1NiwxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXByX2RlYnVnKCIlczogY3VycmVudF9lbnRpdGxlZCA9ICVsdSwgY3VycmVudF93ZWlnaHQgPSAldVxuIiwKLQkgICAgICAgICBfX0ZVTkNUSU9OX18sIG1wcF9kYXRhLmVudGl0bGVkX21lbSwgbXBwX2RhdGEubWVtX3dlaWdodCk7CisJICAgICAgICAgX19mdW5jX18sIG1wcF9kYXRhLmVudGl0bGVkX21lbSwgbXBwX2RhdGEubWVtX3dlaWdodCk7CiAKIAlwcl9kZWJ1ZygiJXM6IG5ld19lbnRpdGxlZCA9ICVsdSwgbmV3X3dlaWdodCA9ICV1XG4iLAotCSAgICAgICAgIF9fRlVOQ1RJT05fXywgbmV3X2VudGl0bGVkLCBuZXdfd2VpZ2h0KTsKKwkJIF9fZnVuY19fLCBuZXdfZW50aXRsZWQsIG5ld193ZWlnaHQpOwogCiAJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9TRVRfTVBQLCBuZXdfZW50aXRsZWQsIG5ld193ZWlnaHQpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzYy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMKaW5kZXggODVjYjZmMy4uMmQyOTc1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMKQEAgLTMxLDExICszMSwxNCBAQAogCW1mbHIJcjAKIAlibAkxZgogMToJbWZscglyMwotCUxPQURfUkVHX0lNTUVESUFURShyNCwxYikKKwlQUENfTEwJcjQsKDJmLTFiKShyMykKIAlzdWJmCXIzLHI0LHIzCiAJbXRscglyMAogCWJscgogCisJLmFsaWduCTMKKzI6CVBQQ19MT05HIDFiCisKIC8qCiAgKiBhZGRfcmVsb2Nfb2Zmc2V0KHgpIHJldHVybnMgeCArIHJlbG9jX29mZnNldCgpLgogICovCkBAIC00MywxMiArNDYsMTUgQEAKIAltZmxyCXIwCiAJYmwJMWYKIDE6CW1mbHIJcjUKLQlMT0FEX1JFR19JTU1FRElBVEUocjQsMWIpCisJUFBDX0xMCXI0LCgyZi0xYikocjUpCiAJc3ViZglyNSxyNCxyNQogCWFkZAlyMyxyMyxyNQogCW10bHIJcjAKIAlibHIKIAorCS5hbGlnbgkzCisyOglQUENfTE9ORyAxYgorCiBfR0xPQkFMKGtlcm5lbF9leGVjdmUpCiAJbGkJcjAsX19OUl9leGVjdmUKIAlzYwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwppbmRleCA3YTZkZmJjLi42YTliNGJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwpAQCAtMjc0LDYgKzI3NCwxMCBAQAogLyoKICAqIEZsdXNoIE1NVSBUTEIKICAqLworI2lmbmRlZiBDT05GSUdfRlNMX0JPT0tFCitfR0xPQkFMKF90bGJpbF9hbGwpCitfR0xPQkFMKF90bGJpbF9waWQpCisjZW5kaWYKIF9HTE9CQUwoX3RsYmlhKQogI2lmIGRlZmluZWQoQ09ORklHXzQweCkKIAlzeW5jCQkJLyogRmx1c2ggdG8gbWVtb3J5IGJlZm9yZSBjaGFuZ2luZyBtYXBwaW5nICovCkBAIC0zNDQsNiArMzQ4LDkgQEAKIC8qCiAgKiBGbHVzaCBNTVUgVExCIGZvciBhIHBhcnRpY3VsYXIgYWRkcmVzcwogICovCisjaWZuZGVmIENPTkZJR19GU0xfQk9PS0UKK19HTE9CQUwoX3RsYmlsX3ZhKQorI2VuZGlmCiBfR0xPQkFMKF90bGJpZSkKICNpZiBkZWZpbmVkKENPTkZJR180MHgpCiAJLyogV2UgcnVuIHRoZSBzZWFyY2ggd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIGJlY2F1c2Ugd2UgaGF2ZSB0byBjaGFuZ2UKQEAgLTQzNiw2ICs0NDMsNTMgQEAKICNlbmRpZiAvKiAhIENPTkZJR180MHggKi8KIAlibHIKIAorI2lmIGRlZmluZWQoQ09ORklHX0ZTTF9CT09LRSkKKy8qCisgKiBGbHVzaCBNTVUgVExCLCBidXQgb25seSBvbiB0aGUgbG9jYWwgcHJvY2Vzc29yIChubyBicm9hZGNhc3QpCisgKi8KK19HTE9CQUwoX3RsYmlsX2FsbCkKKyNkZWZpbmUgTU1VQ1NSMF9UTEJGSQkoTU1VQ1NSMF9UTEIwRkkgfCBNTVVDU1IwX1RMQjFGSSB8IFwKKwkJCSBNTVVDU1IwX1RMQjJGSSB8IE1NVUNTUjBfVExCM0ZJKQorCWxpCXIzLChNTVVDU1IwX1RMQkZJKUBsCisJbXRzcHIJU1BSTl9NTVVDU1IwLCByMworMToKKwltZnNwcglyMyxTUFJOX01NVUNTUjAKKwlhbmRpLglyMyxyMyxNTVVDU1IwX1RMQkZJQGwKKwlibmUJMWIKKwlibHIKKworLyoKKyAqIEZsdXNoIE1NVSBUTEIgZm9yIGEgcGFydGljdWxhciBwcm9jZXNzIGlkLCBidXQgb25seSBvbiB0aGUgbG9jYWwgcHJvY2Vzc29yCisgKiAobm8gYnJvYWRjYXN0KQorICovCitfR0xPQkFMKF90bGJpbF9waWQpCisvKiB3ZSBjdXJyZW50bHkgZG8gYW4gaW52YWxpZGF0ZSBhbGwgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBwZXIgcGlkIGludmFsaWRhdGUgKi8KKwlsaQlyMywoTU1VQ1NSMF9UTEJGSSlAbAorCW10c3ByCVNQUk5fTU1VQ1NSMCwgcjMKKzE6CisJbWZzcHIJcjMsU1BSTl9NTVVDU1IwCisJYW5kaS4JcjMscjMsTU1VQ1NSMF9UTEJGSUBsCisJYm5lCTFiCisJYmxyCisKKy8qCisgKiBGbHVzaCBNTVUgVExCIGZvciBhIHBhcnRpY3VsYXIgYWRkcmVzcywgYnV0IG9ubHkgb24gdGhlIGxvY2FsIHByb2Nlc3NvcgorICogKG5vIGJyb2FkY2FzdCkKKyAqLworX0dMT0JBTChfdGxiaWxfdmEpCisJc2x3aQlyNCxyNCwxNgorCW10c3ByCVNQUk5fTUFTNixyNAkJLyogYXNzdW1lIEFTPTAgZm9yIG5vdyAqLworCXRsYnN4CTAscjMKKwltZnNwcglyNCxTUFJOX01BUzEJCS8qIGNoZWNrIHZhbGlkICovCisJYW5kaXMuCXIzLHI0LE1BUzFfVkFMSURAaAorCWJlcWxyCisJcmx3aW5tCXI0LHI0LDAsMSwzMQorCW10c3ByCVNQUk5fTUFTMSxyNAorCXRsYndlCisJYmxyCisjZW5kaWYgLyogQ09ORklHX0ZTTF9CT09LRSAqLworCisKIC8qCiAgKiBGbHVzaCBpbnN0cnVjdGlvbiBjYWNoZS4KICAqIFRoaXMgaXMgYSBuby1vcCBvbiB0aGUgNjAxLgpAQCAtODQ2LDggKzkwMCwxMCBAQAogCWxpCXI0LDAJCS8qIG5ldyBzcCAodW51c2VkKSAqLwogCWxpCXIwLF9fTlJfY2xvbmUKIAlzYwotCWNtcHdpCTAscjMsMAkJLyogcGFyZW50IG9yIGNoaWxkPyAqLwotCWJuZQkxZgkJLyogcmV0dXJuIGlmIHBhcmVudCAqLworCWJucysJMWYJCS8qIGRpZCBzeXN0ZW0gY2FsbCBpbmRpY2F0ZSBlcnJvcj8gKi8KKwluZWcJcjMscjMJCS8qIGlmIHNvLCBtYWtlIHJldHVybiBjb2RlIG5lZ2F0aXZlICovCisxOgljbXB3aQkwLHIzLDAJCS8qIHBhcmVudCBvciBjaGlsZD8gKi8KKwlibmUJMmYJCS8qIHJldHVybiBpZiBwYXJlbnQgKi8KIAlsaQlyMCwwCQkvKiBtYWtlIHRvcC1sZXZlbCBzdGFjayBmcmFtZSAqLwogCXN0d3UJcjAsLTE2KHIxKQogCW10bHIJcjMwCQkvKiBmbiBhZGRyIGluIGxyICovCkBAIC04NTcsNyArOTEzLDcgQEAKIAlsaQlyMCxfX05SX2V4aXQJLyogZXhpdCBpZiBmdW5jdGlvbiByZXR1cm5zICovCiAJbGkJcjMsMAogCXNjCi0xOglsd3oJcjMwLDgocjEpCisyOglsd3oJcjMwLDgocjEpCiAJbHd6CXIzMSwxMihyMSkKIAlhZGRpCXIxLHIxLDE2CiAJYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCmluZGV4IDRkZDcwY2YuLjMwNTNmZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCkBAIC00MjYsOCArNDI2LDEwIEBACiAJbGkJcjQsMAkJLyogbmV3IHNwICh1bnVzZWQpICovCiAJbGkJcjAsX19OUl9jbG9uZQogCXNjCi0JY21wZGkJMCxyMywwCQkvKiBwYXJlbnQgb3IgY2hpbGQ/ICovCi0JYm5lCTFmCQkvKiByZXR1cm4gaWYgcGFyZW50ICovCisJYm5zKwkxZgkJLyogZGlkIHN5c3RlbSBjYWxsIGluZGljYXRlIGVycm9yPyAqLworCW5lZwlyMyxyMwkJLyogaWYgc28sIG1ha2UgcmV0dXJuIGNvZGUgbmVnYXRpdmUgKi8KKzE6CWNtcGRpCTAscjMsMAkJLyogcGFyZW50IG9yIGNoaWxkPyAqLworCWJuZQkyZgkJLyogcmV0dXJuIGlmIHBhcmVudCAqLwogCWxpCXIwLDAKIAlzdGR1CXIwLC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMSkKIAlsZAlyMiw4KHIyOSkKQEAgLTQzOCw3ICs0NDAsNyBAQAogCWxpCXIwLF9fTlJfZXhpdAkvKiBleGl0IGFmdGVyIGNoaWxkIGV4aXRzICovCiAgICAgICAgIGxpCXIzLDAKIAlzYwotMToJYWRkaQlyMSxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAkKKzI6CWFkZGkJcjEscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAlsZAlyMjksLTI0KHIxKQogCWxkCXIzMCwtMTYocjEpCiAJYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9kZXZpY2UuYwppbmRleCBlOWJlOTA4Li45M2FlNWIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfZGV2aWNlLmMKQEAgLTc4LDcgKzc4LDcgQEAKIAlkZXYtPmRldi5wYXJlbnQgPSBwYXJlbnQ7CiAJZGV2LT5kZXYucmVsZWFzZSA9IG9mX3JlbGVhc2VfZGV2OwogCWRldi0+ZGV2LmFyY2hkYXRhLm9mX25vZGUgPSBucDsKLQlkZXYtPmRldi5hcmNoZGF0YS5udW1hX25vZGUgPSBvZl9ub2RlX3RvX25pZChucCk7CisJc2V0X2Rldl9ub2RlKCZkZXYtPmRldiwgb2Zfbm9kZV90b19uaWQobnApKTsKIAogCWlmIChidXNfaWQpCiAJCXN0cmxjcHkoZGV2LT5kZXYuYnVzX2lkLCBidXNfaWQsIEJVU19JRF9TSVpFKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKaW5kZXggYzliZjE3ZS4uNDhhMzQ3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKQEAgLTEyLDYgKzEyLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KICNpbmNsdWRlIDxhc20vcGFjYS5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCiAvKiBUaGlzIHN5bWJvbCBpcyBwcm92aWRlZCBieSB0aGUgbGlua2VyIC0gbGV0IGl0IGZpbGwgaW4gdGhlIHBhY2EKICAqIGZpZWxkIGNvcnJlY3RseSAqLwpAQCAtNzksNiArODAsOCBAQAogCQluZXdfcGFjYS0+bG9ja190b2tlbiA9IDB4ODAwMDsKIAkJbmV3X3BhY2EtPnBhY2FfaW5kZXggPSBjcHU7CiAJCW5ld19wYWNhLT5rZXJuZWxfdG9jID0ga2VybmVsX3RvYzsKKwkJbmV3X3BhY2EtPmtlcm5lbGJhc2UgPSAodW5zaWduZWQgbG9uZykgX3N0ZXh0OworCQluZXdfcGFjYS0+a2VybmVsX21zciA9IE1TUl9LRVJORUw7CiAJCW5ld19wYWNhLT5od19jcHVfaWQgPSAweGZmZmY7CiAJCW5ld19wYWNhLT5zbGJfc2hhZG93X3B0ciA9ICZzbGJfc2hhZG93W2NwdV07CiAJCW5ld19wYWNhLT5fX2N1cnJlbnQgPSAmaW5pdF90YXNrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwppbmRleCBlYTBjNjFlLi4wMWNlOGMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwpAQCAtNTYsNiArNTYsMzQgQEAKIC8qIERlZmF1bHQgUENJIGZsYWdzIGlzIDAgKi8KIHVuc2lnbmVkIGludCBwcGNfcGNpX2ZsYWdzOwogCitzdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqcGNpX2RtYV9vcHM7CisKK3ZvaWQgc2V0X3BjaV9kbWFfb3BzKHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMpCit7CisJcGNpX2RtYV9vcHMgPSBkbWFfb3BzOworfQorCitzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpnZXRfcGNpX2RtYV9vcHModm9pZCkKK3sKKwlyZXR1cm4gcGNpX2RtYV9vcHM7Cit9CitFWFBPUlRfU1lNQk9MKGdldF9wY2lfZG1hX29wcyk7CisKK2ludCBwY2lfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKQoreworCXJldHVybiBkbWFfc2V0X21hc2soJmRldi0+ZGV2LCBtYXNrKTsKK30KKworaW50IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykKK3sKKwlpbnQgcmM7CisKKwlyYyA9IGRtYV9zZXRfbWFzaygmZGV2LT5kZXYsIG1hc2spOworCWRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gZGV2LT5kbWFfbWFzazsKKworCXJldHVybiByYzsKK30KKwogc3RydWN0IHBjaV9jb250cm9sbGVyICpwY2liaW9zX2FsbG9jX2NvbnRyb2xsZXIoc3RydWN0IGRldmljZV9ub2RlICpkZXYpCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGI7CkBAIC0xODAsNiArMjA4LDI2IEBACiAJcmV0dXJuIHN0cjsKIH0KIAordm9pZCBfX2RldmluaXQgcGNpYmlvc19zZXR1cF9uZXdfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGRldl9hcmNoZGF0YSAqc2QgPSAmZGV2LT5kZXYuYXJjaGRhdGE7CisKKwlzZC0+b2Zfbm9kZSA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCisJREJHKCJQQ0k6IGRldmljZSAlcyBPRiBub2RlOiAlc1xuIiwgcGNpX25hbWUoZGV2KSwKKwkgICAgc2QtPm9mX25vZGUgPyBzZC0+b2Zfbm9kZS0+ZnVsbF9uYW1lIDogIjxub25lPiIpOworCisJc2QtPmRtYV9vcHMgPSBwY2lfZG1hX29wczsKKyNpZmRlZiBDT05GSUdfUFBDMzIKKwlzZC0+ZG1hX2RhdGEgPSAodm9pZCAqKVBDSV9EUkFNX09GRlNFVDsKKyNlbmRpZgorCXNldF9kZXZfbm9kZSgmZGV2LT5kZXYsIHBjaWJ1c190b19ub2RlKGRldi0+YnVzKSk7CisKKwlpZiAocHBjX21kLnBjaV9kbWFfZGV2X3NldHVwKQorCQlwcGNfbWQucGNpX2RtYV9kZXZfc2V0dXAoZGV2KTsKK30KK0VYUE9SVF9TWU1CT0wocGNpYmlvc19zZXR1cF9uZXdfZGV2aWNlKTsKKwogLyoKICAqIFJlYWRzIHRoZSBpbnRlcnJ1cHQgcGluIHRvIGRldGVybWluZSBpZiBpbnRlcnJ1cHQgaXMgdXNlIGJ5IGNhcmQuCiAgKiBJZiB0aGUgaW50ZXJydXB0IGlzIHVzZWQsIHRoZW4gZ2V0cyB0aGUgaW50ZXJydXB0IGxpbmUgZnJvbSB0aGUKQEAgLTM3MSw3ICs0MTksNyBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmZvdW5kID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIHByb3QgPSBwZ3Byb3RfdmFsKHByb3RlY3Rpb24pOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcGZuIDw8IFBBR0VfU0hJRlQ7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCA9ICgocmVzb3VyY2Vfc2l6ZV90KXBmbikgPDwgUEFHRV9TSElGVDsKIAlpbnQgaTsKIAogCWlmIChwYWdlX2lzX3JhbShwZm4pKQpAQCAtNDIyLDcgKzQ3MCw4IEBACiBpbnQgcGNpX21tYXBfcGFnZV9yYW5nZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCWVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwgaW50IHdyaXRlX2NvbWJpbmUpCiB7Ci0JcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0ID0KKwkJKChyZXNvdXJjZV9zaXplX3Qpdm1hLT52bV9wZ29mZikgPDwgUEFHRV9TSElGVDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJwOwogCWludCByZXQ7CiAKQEAgLTczMSwxMSArNzgwLDYgQEAKIAogCXJlcy0+c3RhcnQgPSAocmVzLT5zdGFydCArIG9mZnNldCkgJiBtYXNrOwogCXJlcy0+ZW5kID0gKHJlcy0+ZW5kICsgb2Zmc2V0KSAmIG1hc2s7Ci0KLQlwcl9kZWJ1ZygiUENJOiVzICAgICAgICAgICAgJTAxNmxseC0lMDE2bGx4XG4iLAotCQkgcGNpX25hbWUoZGV2KSwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOwogfQogCiAKQEAgLTc4MSw2ICs4MjUsMTEgQEAKIAkJCSAodW5zaWduZWQgaW50KXJlcy0+ZmxhZ3MpOwogCiAJCWZpeHVwX3Jlc291cmNlKHJlcywgZGV2KTsKKworCQlwcl9kZWJ1ZygiUENJOiVzICAgICAgICAgICAgJTAxNmxseC0lMDE2bGx4XG4iLAorCQkJIHBjaV9uYW1lKGRldiksCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOwogCX0KIAogCS8qIENhbGwgbWFjaGluZSBzcGVjaWZpYyByZXNvdXJjZSBmaXh1cCAqLwpAQCAtNzg5LDU4ICs4MzgsMTI3IEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpYmlvc19maXh1cF9yZXNvdXJjZXMpOwogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgX19wY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorLyogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBmaWd1cmUgb3V0IGlmIGEgYnJpZGdlIHJlc291cmNlIGhhcyBiZWVuIGluaXRpYWxpemVkCisgKiBieSB0aGUgZmlybXdhcmUgb3Igbm90LiBJdCBkb2Vzbid0IGhhdmUgdG8gYmUgYWJzb2x1dGVseSBidWxsZXQgcHJvb2YsIGJ1dAorICogdGhpbmdzIGdvIG1vcmUgc21vb3RobHkgd2hlbiBpdCBnZXRzIGl0IHJpZ2h0LiBJdCBzaG91bGQgY292ZXJzIGNhc2VzIHN1Y2gKKyAqIGFzIEFwcGxlICJjbG9zZWQiIGJyaWRnZSByZXNvdXJjZXMgYW5kIGJhcmUtbWV0YWwgcFNlcmllcyB1bmFzc2lnbmVkIGJyaWRnZXMKKyAqLworc3RhdGljIGludCBfX2RldmluaXQgcGNpYmlvc191bmluaXRpYWxpemVkX2JyaWRnZV9yZXNvdXJjZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkJCSAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zdChidXMpOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBidXMtPnNlbGY7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldDsKKwl1MTYgY29tbWFuZDsKKwlpbnQgaTsKKworCS8qIFdlIGRvbid0IGRvIGFueXRoaW5nIGlmIFBDSV9QUk9CRV9PTkxZIGlzIHNldCAqLworCWlmIChwcGNfcGNpX2ZsYWdzICYgUFBDX1BDSV9QUk9CRV9PTkxZKQorCQlyZXR1cm4gMDsKKworCS8qIEpvYiBpcyBhIGJpdCBkaWZmZXJlbnQgYmV0d2VlbiBtZW1vcnkgYW5kIElPICovCisJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgeworCQkvKiBJZiB0aGUgQkFSIGlzIG5vbi0wIChyZXMgIT0gcGNpX21lbV9vZmZzZXQpIHRoZW4gaXQncyBwcm9iYWJseSBiZWVuCisJCSAqIGluaXRpYWxpemVkIGJ5IHNvbWVib2R5CisJCSAqLworCQlpZiAocmVzLT5zdGFydCAhPSBob3NlLT5wY2lfbWVtX29mZnNldCkKKwkJCXJldHVybiAwOworCisJCS8qIFRoZSBCQVIgaXMgMCwgbGV0J3MgY2hlY2sgaWYgbWVtb3J5IGRlY29kaW5nIGlzIGVuYWJsZWQgb24KKwkJICogdGhlIGJyaWRnZS4gSWYgbm90LCB3ZSBjb25zaWRlciBpdCB1bmFzc2lnbmVkCisJCSAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7CisJCWlmICgoY29tbWFuZCAmIFBDSV9DT01NQU5EX01FTU9SWSkgPT0gMCkKKwkJCXJldHVybiAxOworCisJCS8qIE1lbW9yeSBkZWNvZGluZyBpcyBlbmFibGVkIGFuZCB0aGUgQkFSIGlzIDAuIElmIGFueSBvZiB0aGUgYnJpZGdlCisJCSAqIHJlc291cmNlcyBjb3ZlcnMgdGhhdCBzdGFydGluZyBhZGRyZXNzICgwIHRoZW4gaXQncyBnb29kIGVub3VnaCBmb3IKKwkJICogdXMgZm9yIG1lbW9yeQorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJaWYgKChob3NlLT5tZW1fcmVzb3VyY2VzW2ldLmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pICYmCisJCQkgICAgaG9zZS0+bWVtX3Jlc291cmNlc1tpXS5zdGFydCA9PSBob3NlLT5wY2lfbWVtX29mZnNldCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIFdlbGwsIGl0IHN0YXJ0cyBhdCAwIGFuZCB3ZSBrbm93IGl0IHdpbGwgY29sbGlkZSBzbyB3ZSBtYXkgYXMKKwkJICogd2VsbCBjb25zaWRlciBpdCBhcyB1bmFzc2lnbmVkLiBUaGF0IGNvdmVycyB0aGUgQXBwbGUgY2FzZS4KKwkJICovCisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCS8qIElmIHRoZSBCQVIgaXMgbm9uLTAsIHRoZW4gd2UgY29uc2lkZXIgaXQgYXNzaWduZWQgKi8KKwkJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpaG9zZS0+aW9fYmFzZV92aXJ0IC0gX0lPX0JBU0U7CisJCWlmICgoKHJlcy0+c3RhcnQgLSBvZmZzZXQpICYgMHhmZmZmZmZmZnVsKSAhPSAwKQorCQkJcmV0dXJuIDA7CisKKwkJLyogSGVyZSwgd2UgYXJlIGEgYml0IGRpZmZlcmVudCB0aGFuIG1lbW9yeSBhcyB0eXBpY2FsbHkgSU8gc3BhY2UKKwkJICogc3RhcnRpbmcgYXQgbG93IGFkZHJlc3NlcyAtaXMtIHZhbGlkLiBXaGF0IHdlIGRvIGluc3RlYWQgaWYgdGhhdAorCQkgKiB3ZSBjb25zaWRlciBhcyB1bmFzc2lnbmVkIGFueXRoaW5nIHRoYXQgZG9lc24ndCBoYXZlIElPIGVuYWJsZWQKKwkJICogaW4gdGhlIFBDSSBjb21tYW5kIHJlZ2lzdGVyLCBhbmQgdGhhdCdzIGl0LgorCQkgKi8KKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOworCQlpZiAoY29tbWFuZCAmIFBDSV9DT01NQU5EX0lPKQorCQkJcmV0dXJuIDA7CisKKwkJLyogSXQncyBzdGFydGluZyBhdCAwIGFuZCBJTyBpcyBkaXNhYmxlZCBpbiB0aGUgYnJpZGdlLCBjb25zaWRlcgorCQkgKiBpdCB1bmFzc2lnbmVkCisJCSAqLworCQlyZXR1cm4gMTsKKwl9Cit9CisKKy8qIEZpeHVwIHJlc291cmNlcyBvZiBhIFBDSTwtPlBDSSBicmlkZ2UgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2liaW9zX2ZpeHVwX2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpOworCisJc3RydWN0IHBjaV9kZXYgKmRldiA9IGJ1cy0+c2VsZjsKKworCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7ICsraSkgeworCQlpZiAoKHJlcyA9IGJ1cy0+cmVzb3VyY2VbaV0pID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJaWYgKCFyZXMtPmZsYWdzKQorCQkJY29udGludWU7CisJCWlmIChpID49IDMgJiYgYnVzLT5zZWxmLT50cmFuc3BhcmVudCkKKwkJCWNvbnRpbnVlOworCisJCXByX2RlYnVnKCJQQ0k6JXMgQnVzIHJzcmMgJWQgJTAxNmxseC0lMDE2bGx4IFsleF0gZml4dXAuLi5cbiIsCisJCQkgcGNpX25hbWUoZGV2KSwgaSwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsXAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQsCisJCQkgKHVuc2lnbmVkIGludClyZXMtPmZsYWdzKTsKKworCQkvKiBQZXJmb3JtIGZpeHVwICovCisJCWZpeHVwX3Jlc291cmNlKHJlcywgZGV2KTsKKworCQkvKiBUcnkgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgUDJQIGJyaWRnZSByZXNvdXJjZXMsCisJCSAqIGFuZCBjbGVhciB0aGVtIG91dCBzbyB0aGV5IGdldCByZS1hc3NpZ25lZCBsYXRlcgorCQkgKi8KKwkJaWYgKHBjaWJpb3NfdW5pbml0aWFsaXplZF9icmlkZ2VfcmVzb3VyY2UoYnVzLCByZXMpKSB7CisJCQlyZXMtPmZsYWdzID0gMDsKKwkJCXByX2RlYnVnKCJQQ0k6JXMgICAgICAgICAgICAodW5hc3NpZ25lZClcbiIsIHBjaV9uYW1lKGRldikpOworCQl9IGVsc2UgeworCisJCQlwcl9kZWJ1ZygiUENJOiVzICAgICAgICAgICAgJTAxNmxseC0lMDE2bGx4XG4iLAorCQkJCSBwY2lfbmFtZShkZXYpLAorCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgX19wY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBidXMtPnNlbGY7CiAKIAlwcl9kZWJ1ZygiUENJOiBGaXh1cCBidXMgJWQgKCVzKVxuIiwgYnVzLT5udW1iZXIsIGRldiA/IHBjaV9uYW1lKGRldikgOiAiUEhCIik7CiAKIAkvKiBGaXh1cCBQQ0k8LT5QQ0kgYnJpZGdlcy4gSG9zdCBicmlkZ2VzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHksIGZvcgogCSAqIG5vdyBkaWZmZXJlbnRseSBiZXR3ZWVuIDMyIGFuZCA2NCBiaXRzLgogCSAqLwotCWlmIChkZXYgIT0gTlVMTCkgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgKytpKSB7Ci0JCQlpZiAoKHJlcyA9IGJ1cy0+cmVzb3VyY2VbaV0pID09IE5VTEwpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIXJlcy0+ZmxhZ3MpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoaSA+PSAzICYmIGJ1cy0+c2VsZi0+dHJhbnNwYXJlbnQpCi0JCQkJY29udGludWU7Ci0JCQkvKiBPbiBQb3dlck1hYywgQXBwbGUgbGVhdmVzIGJyaWRnZSB3aW5kb3dzIG9wZW4gb3ZlcgotCQkJICogYW4gaW5hY2Nlc3NpYmxlIHJlZ2lvbiBvZiBtZW1vcnkgc3BhY2UgKDAuLi5mZmZmZikKLQkJCSAqIHdoaWNoIGlzIHNvbWV3aGF0IGJvZ3VzLCBidXQgdGhhdCdzIHdoYXQgdGhleSB0aGluawotCQkJICogbWVhbnMgZGlzYWJsZWQuLi4KLQkJCSAqCi0JCQkgKiBXZSBjbGVhciB0aG9zZSB0byBmb3JjZSB0aGVtIHRvIGJlIHJlYWxsb2NhdGVkIGxhdGVyCi0JCQkgKgotCQkJICogV2UgZGV0ZWN0IHN1Y2ggcmVnaW9ucyBieSB0aGUgZmFjdCB0aGF0IHRoZSBiYXNlIGlzCi0JCQkgKiBlcXVhbCB0byB0aGUgcGNpX21lbV9vZmZzZXQgb2YgdGhlIGhvc3QgYnJpZGdlIGFuZAotCQkJICogdGhlaXIgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gMU0uCi0JCQkgKi8KLQkJCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0gJiYKLQkJCSAgICByZXMtPnN0YXJ0ID09IGhvc2UtPnBjaV9tZW1fb2Zmc2V0ICYmCi0JCQkgICAgcmVzLT5lbmQgPCAweDEwMDAwMCkgewotCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkgICAgICAgIlBDSTogQ2xvc2luZyBib2d1cyBBcHBsZSBGaXJtd2FyZSIKLQkJCQkgICAgICAgIiByZWdpb24gJWQgb24gYnVzIDB4JTAyeFxuIiwKLQkJCQkgICAgICAgaSwgYnVzLT5udW1iZXIpOwotCQkJCXJlcy0+ZmxhZ3MgPSAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlwcl9kZWJ1ZygiUENJOiVzIEJ1cyByc3JjICVkICUwMTZsbHgtJTAxNmxseCBbJXhdIGZpeHVwLi4uXG4iLAotCQkJCSBwY2lfbmFtZShkZXYpLCBpLAotCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsXAotCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kLAotCQkJCSAodW5zaWduZWQgaW50KXJlcy0+ZmxhZ3MpOwotCi0JCQlmaXh1cF9yZXNvdXJjZShyZXMsIGRldik7Ci0JCX0KLQl9CisJaWYgKGRldiAhPSBOVUxMKQorCQlwY2liaW9zX2ZpeHVwX2JyaWRnZShidXMpOwogCiAJLyogQWRkaXRpb25hbCBzZXR1cCB0aGF0IGlzIGRpZmZlcmVudCBiZXR3ZWVuIDMyIGFuZCA2NCBiaXRzIGZvciBub3cgKi8KIAlwY2liaW9zX2RvX2J1c19zZXR1cChidXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMKaW5kZXggODhkYjRmZi4uMTMxYjFkZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jCkBAIC01MywxMiArNTMsMTkgQEAKIAogc3RhdGljIGludCBwY2lfYnVzX2NvdW50OwogCisvKiBUaGlzIHdpbGwgcmVtYWluIE5VTEwgZm9yIG5vdywgdW50aWwgaXNhLWJyaWRnZS5jIGlzIG1hZGUgY29tbW9uCisgKiB0byBib3RoIDMyLWJpdCBhbmQgNjQtYml0LgorICovCitzdHJ1Y3QgcGNpX2RldiAqaXNhX2JyaWRnZV9wY2lkZXY7CitFWFBPUlRfU1lNQk9MX0dQTChpc2FfYnJpZGdlX3BjaWRldik7CisKIHN0YXRpYyB2b2lkCi1maXh1cF9oaWRlX2hvc3RfcmVzb3VyY2VfZnNsKHN0cnVjdCBwY2lfZGV2KiBkZXYpCitmaXh1cF9oaWRlX2hvc3RfcmVzb3VyY2VfZnNsKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJaW50IGksIGNsYXNzID0gZGV2LT5jbGFzcyA+PiA4OwogCi0JaWYgKChjbGFzcyA9PSBQQ0lfQ0xBU1NfUFJPQ0VTU09SX1BPV0VSUEMpICYmCisJaWYgKChjbGFzcyA9PSBQQ0lfQ0xBU1NfUFJPQ0VTU09SX1BPV0VSUEMgfHwKKwkgICAgIGNsYXNzID09IFBDSV9DTEFTU19CUklER0VfT1RIRVIpICYmCiAJCShkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9OT1JNQUwpICYmCiAJCShkZXYtPmJ1cy0+cGFyZW50ID09IE5VTEwpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykgewpAQCAtNDI0LDYgKzQzMSw3IEBACiAJdW5zaWduZWQgbG9uZyBpb19vZmZzZXQ7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGk7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKIAogCS8qIEhvb2t1cCBQSEIgcmVzb3VyY2VzICovCiAJaW9fb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpaG9zZS0+aW9fYmFzZV92aXJ0IC0gaXNhX2lvX2Jhc2U7CkBAIC00NTcsNiArNDY1LDEyIEBACiAJCQlidXMtPnJlc291cmNlW2krMV0gPSByZXM7CiAJCX0KIAl9CisKKwlpZiAocHBjX21kLnBjaV9kbWFfYnVzX3NldHVwKQorCQlwcGNfbWQucGNpX2RtYV9idXNfc2V0dXAoYnVzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKKwkJcGNpYmlvc19zZXR1cF9uZXdfZGV2aWNlKGRldik7CiB9CiAKIC8qIHRoZSBuZXh0IG9uZSBpcyBzdG9sZW4gZnJvbSB0aGUgYWxwaGEgcG9ydC4uLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKaW5kZXggMzBlZWRmYy4uODI0N2NmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCkBAIC01MiwzNSArNTIsNiBAQAogCiBMSVNUX0hFQUQoaG9zZV9saXN0KTsKIAotc3RhdGljIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKnBjaV9kbWFfb3BzOwotCi12b2lkIHNldF9wY2lfZG1hX29wcyhzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzKQotewotCXBjaV9kbWFfb3BzID0gZG1hX29wczsKLX0KLQotc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZ2V0X3BjaV9kbWFfb3BzKHZvaWQpCi17Ci0JcmV0dXJuIHBjaV9kbWFfb3BzOwotfQotRVhQT1JUX1NZTUJPTChnZXRfcGNpX2RtYV9vcHMpOwotCi0KLWludCBwY2lfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKQotewotCXJldHVybiBkbWFfc2V0X21hc2soJmRldi0+ZGV2LCBtYXNrKTsKLX0KLQotaW50IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykKLXsKLQlpbnQgcmM7Ci0KLQlyYyA9IGRtYV9zZXRfbWFzaygmZGV2LT5kZXYsIG1hc2spOwotCWRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gZGV2LT5kbWFfbWFzazsKLQotCXJldHVybiByYzsKLX0KLQogc3RhdGljIHZvaWQgZml4dXBfYnJva2VuX3BjbmV0MzIoc3RydWN0IHBjaV9kZXYqIGRldikKIHsKIAlpZiAoKGRldi0+Y2xhc3M+PjggPT0gUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQpKSB7CkBAIC01NDgsMjYgKzUxOSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2liaW9zX21hcF9pb19zcGFjZSk7CiAKLXZvaWQgX19kZXZpbml0IHBjaWJpb3Nfc2V0dXBfbmV3X2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBkZXZfYXJjaGRhdGEgKnNkID0gJmRldi0+ZGV2LmFyY2hkYXRhOwotCi0Jc2QtPm9mX25vZGUgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKLQotCURCRygiUENJOiBkZXZpY2UgJXMgT0Ygbm9kZTogJXNcbiIsIHBjaV9uYW1lKGRldiksCi0JICAgIHNkLT5vZl9ub2RlID8gc2QtPm9mX25vZGUtPmZ1bGxfbmFtZSA6ICI8bm9uZT4iKTsKLQotCXNkLT5kbWFfb3BzID0gcGNpX2RtYV9vcHM7Ci0jaWZkZWYgQ09ORklHX05VTUEKLQlzZC0+bnVtYV9ub2RlID0gcGNpYnVzX3RvX25vZGUoZGV2LT5idXMpOwotI2Vsc2UKLQlzZC0+bnVtYV9ub2RlID0gLTE7Ci0jZW5kaWYKLQlpZiAocHBjX21kLnBjaV9kbWFfZGV2X3NldHVwKQotCQlwcGNfbWQucGNpX2RtYV9kZXZfc2V0dXAoZGV2KTsKLX0KLUVYUE9SVF9TWU1CT0wocGNpYmlvc19zZXR1cF9uZXdfZGV2aWNlKTsKLQogdm9pZCBfX2RldmluaXQgcGNpYmlvc19kb19idXNfc2V0dXAoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKaW5kZXggZTFlYTRmZS4uOGVkYzIzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCkBAIC0xMTksNiArMTE5LDkgQEAKIEVYUE9SVF9TWU1CT0woZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSk7CiBFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9wYWdlKTsKIEVYUE9SVF9TWU1CT0woX3RsYmllKTsKKyNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKQorRVhQT1JUX1NZTUJPTChfdGxiaWxfdmEpOworI2VuZGlmCiAjZW5kaWYKIEVYUE9SVF9TWU1CT0woX19mbHVzaF9pY2FjaGVfcmFuZ2UpOwogRVhQT1JUX1NZTUJPTChmbHVzaF9kY2FjaGVfcmFuZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCA4N2Q4M2M1Li4zYTJkYzdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtODg4LDkgKzg4OCwxMCBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fZHJjb25mX21lbW9yeSh1bnNpZ25lZCBsb25nIG5vZGUpCiB7Ci0JY2VsbF90ICpkbSwgKmxzOworCWNlbGxfdCAqZG0sICpscywgKnVzbTsKIAl1bnNpZ25lZCBsb25nIGwsIG4sIGZsYWdzOwogCXU2NCBiYXNlLCBzaXplLCBsbWJfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaXNfa2V4ZWNfa2R1bXAgPSAwLCBybmdzOwogCiAJbHMgPSAoY2VsbF90ICopb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiaWJtLGxtYi1zaXplIiwgJmwpOwogCWlmIChscyA9PSBOVUxMIHx8IGwgPCBkdF9yb290X3NpemVfY2VsbHMgKiBzaXplb2YoY2VsbF90KSkKQEAgLTkwNSw2ICs5MDYsMTIgQEAKIAlpZiAobCA8IChuICogKGR0X3Jvb3RfYWRkcl9jZWxscyArIDQpICsgMSkgKiBzaXplb2YoY2VsbF90KSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBjaGVjayBpZiB0aGlzIGlzIGEga2V4ZWMva2R1bXAga2VybmVsLiAqLworCXVzbSA9IChjZWxsX3QgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxkcmNvbmYtdXNhYmxlLW1lbW9yeSIsCisJCQkJCQkgJmwpOworCWlmICh1c20gIT0gTlVMTCkKKwkJaXNfa2V4ZWNfa2R1bXAgPSAxOworCiAJZm9yICg7IG4gIT0gMDsgLS1uKSB7CiAJCWJhc2UgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3RfYWRkcl9jZWxscywgJmRtKTsKIAkJZmxhZ3MgPSBkbVszXTsKQEAgLTkxNSwxMyArOTIyLDM0IEBACiAJCWlmICgoZmxhZ3MgJiAweDgwKSB8fCAhKGZsYWdzICYgMHg4KSkKIAkJCWNvbnRpbnVlOwogCQlzaXplID0gbG1iX3NpemU7Ci0JCWlmIChpb21tdV9pc19vZmYpIHsKLQkJCWlmIChiYXNlID49IDB4ODAwMDAwMDB1bCkKKwkJcm5ncyA9IDE7CisJCWlmIChpc19rZXhlY19rZHVtcCkgeworCQkJLyoKKwkJCSAqIEZvciBlYWNoIGxtYiBpbiBpYm0sZHluYW1pYy1tZW1vcnksIGEgY29ycmVzcG9uZGluZworCQkJICogZW50cnkgaW4gbGludXgsZHJjb25mLXVzYWJsZS1tZW1vcnkgcHJvcGVydHkgY29udGFpbnMKKwkJCSAqIGEgY291bnRlciAncCcgZm9sbG93ZWQgYnkgJ3AnIChiYXNlLCBzaXplKSBkdXBsZS4KKwkJCSAqIE5vdyByZWFkIHRoZSBjb3VudGVyIGZyb20KKwkJCSAqIGxpbnV4LGRyY29uZi11c2FibGUtbWVtb3J5IHByb3BlcnR5CisJCQkgKi8KKwkJCXJuZ3MgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3Rfc2l6ZV9jZWxscywgJnVzbSk7CisJCQlpZiAoIXJuZ3MpIC8qIHRoZXJlIGFyZSBubyAoYmFzZSwgc2l6ZSkgZHVwbGUgKi8KIAkJCQljb250aW51ZTsKLQkJCWlmICgoYmFzZSArIHNpemUpID4gMHg4MDAwMDAwMHVsKQotCQkJCXNpemUgPSAweDgwMDAwMDAwdWwgLSBiYXNlOwogCQl9Ci0JCWxtYl9hZGQoYmFzZSwgc2l6ZSk7CisJCWRvIHsKKwkJCWlmIChpc19rZXhlY19rZHVtcCkgeworCQkJCWJhc2UgPSBkdF9tZW1fbmV4dF9jZWxsKGR0X3Jvb3RfYWRkcl9jZWxscywKKwkJCQkJCQkgJnVzbSk7CisJCQkJc2l6ZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9zaXplX2NlbGxzLAorCQkJCQkJCSAmdXNtKTsKKwkJCX0KKwkJCWlmIChpb21tdV9pc19vZmYpIHsKKwkJCQlpZiAoYmFzZSA+PSAweDgwMDAwMDAwdWwpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmICgoYmFzZSArIHNpemUpID4gMHg4MDAwMDAwMHVsKQorCQkJCQlzaXplID0gMHg4MDAwMDAwMHVsIC0gYmFzZTsKKwkJCX0KKwkJCWxtYl9hZGQoYmFzZSwgc2l6ZSk7CisJCX0gd2hpbGUgKC0tcm5ncyk7CiAJfQogCWxtYl9kdW1wX2FsbCgpOwogCXJldHVybiAwOwpAQCAtMTE2NCw2ICsxMTkyLDkgQEAKIAogCS8qIFJlc2VydmUgTE1CIHJlZ2lvbnMgdXNlZCBieSBrZXJuZWwsIGluaXRyZCwgZHQsIGV0Yy4uLiAqLwogCWxtYl9yZXNlcnZlKFBIWVNJQ0FMX1NUQVJULCBfX3BhKGtsaW1pdCkgLSBQSFlTSUNBTF9TVEFSVCk7CisJLyogSWYgcmVsb2NhdGFibGUsIHJlc2VydmUgZmlyc3QgMzJrIGZvciBpbnRlcnJ1cHQgdmVjdG9ycyBldGMuICovCisJaWYgKFBIWVNJQ0FMX1NUQVJUID4gTUVNT1JZX1NUQVJUKQorCQlsbWJfcmVzZXJ2ZShNRU1PUllfU1RBUlQsIDB4ODAwMCk7CiAJcmVzZXJ2ZV9rZHVtcF90cmFtcG9saW5lKCk7CiAJcmVzZXJ2ZV9jcmFzaGtlcm5lbCgpOwogCWVhcmx5X3Jlc2VydmVfbWVtKCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwppbmRleCBiNzI4NDlhLi4yZmRiYzE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTczMiw3ICs3MzIsNyBAQAogCQkJdTMyCWlnbm9yZV9tZTsKIAkJfSBycGFkZXNjOwogCX0gcnBhbm90ZTsKLX0gZmFrZV9lbGYgPSB7Cit9IGZha2VfZWxmIF9fc2VjdGlvbiguZmFrZWVsZikgPSB7CiAJLmVsZmhkciA9IHsKIAkJLmVfaWRlbnQgPSB7IDB4N2YsICdFJywgJ0wnLCAnRicsCiAJCQkgICAgIEVMRkNMQVNTMzIsIEVMRkRBVEEyTVNCLCBFVl9DVVJSRU5UIH0sCkBAIC03NzQsMTMgKzc3NCwxMyBAQAogCQkudHlwZSA9IDB4MTI3NTk5OTksCiAJCS5uYW1lID0gIklCTSxSUEEtQ2xpZW50LUNvbmZpZyIsCiAJCS5ycGFkZXNjID0gewotCQkJLmxwYXJfYWZmaW5pdHkgPSAwLAotCQkJLm1pbl9ybW9fc2l6ZSA9IDY0LAkvKiBpbiBtZWdhYnl0ZXMgKi8KKwkJCS5scGFyX2FmZmluaXR5ID0gMSwKKwkJCS5taW5fcm1vX3NpemUgPSAxMjgsCS8qIGluIG1lZ2FieXRlcyAqLwogCQkJLm1pbl9ybW9fcGVyY2VudCA9IDAsCi0JCQkubWF4X3BmdF9zaXplID0gNDgsCS8qIDJeNDggYnl0ZXMgbWF4IFBGVCBzaXplICovCisJCQkubWF4X3BmdF9zaXplID0gNDYsCS8qIDJeNDYgYnl0ZXMgbWF4IFBGVCBzaXplICovCiAJCQkuc3BscGFyID0gMSwKIAkJCS5taW5fbG9hZCA9IH4wVSwKLQkJCS5uZXdfbWVtX2RlZiA9IDAKKwkJCS5uZXdfbWVtX2RlZiA9IDEKIAkJfQogCX0KIH07CkBAIC0xMzIxLDcgKzEzMjEsNyBAQAogICoKICAqIC0tIENvcnQKICAqLwotZXh0ZXJuIHZvaWQgX19zZWNvbmRhcnlfaG9sZCh2b2lkKTsKK2V4dGVybiBjaGFyIF9fc2Vjb25kYXJ5X2hvbGQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZTsKIApAQCAtMTM0MiwxMyArMTM0Miw3IEBACiAJCT0gKHZvaWQgKikgTE9XX0FERFIoX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcCk7CiAJdW5zaWduZWQgbG9uZyAqYWNrbm93bGVkZ2UKIAkJPSAodm9pZCAqKSBMT1dfQUREUihfX3NlY29uZGFyeV9ob2xkX2Fja25vd2xlZGdlKTsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQkvKiBfX3NlY29uZGFyeV9ob2xkIGlzIGFjdHVhbGx5IGEgZGVzY3JpcHRvciwgbm90IHRoZSB0ZXh0IGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBsb25nIHNlY29uZGFyeV9ob2xkCi0JCT0gX19wYSgqUFRSUkVMT0MoKHVuc2lnbmVkIGxvbmcgKilfX3NlY29uZGFyeV9ob2xkKSk7Ci0jZWxzZQogCXVuc2lnbmVkIGxvbmcgc2Vjb25kYXJ5X2hvbGQgPSBMT1dfQUREUihfX3NlY29uZGFyeV9ob2xkKTsKLSNlbmRpZgogCiAJcHJvbV9kZWJ1ZygicHJvbV9ob2xkX2NwdXM6IHN0YXJ0Li4uXG4iKTsKIAlwcm9tX2RlYnVnKCIgICAgMSkgc3Bpbmxvb3AgICAgICAgPSAweCV4XG4iLCAodW5zaWduZWQgbG9uZylzcGlubG9vcCk7CkBAIC0yMzE1LDEzICsyMzA5LDE0IEBACiAKIHVuc2lnbmVkIGxvbmcgX19pbml0IHByb21faW5pdCh1bnNpZ25lZCBsb25nIHIzLCB1bnNpZ25lZCBsb25nIHI0LAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcHAsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNykKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcga2Jhc2UpCiB7CQogCXN0cnVjdCBwcm9tX3QgKl9wcm9tOwogCXVuc2lnbmVkIGxvbmcgaGRyOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcmVsb2Nfb2Zmc2V0KCk7CiAKICNpZmRlZiBDT05GSUdfUFBDMzIKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHJlbG9jX29mZnNldCgpOwogCXJlbG9jX2dvdDIob2Zmc2V0KTsKICNlbmRpZgogCkBAIC0yMzU1LDkgKzIzNTAsMTEgQEAKIAkgKi8KIAlSRUxPQyhvZl9wbGF0Zm9ybSkgPSBwcm9tX2ZpbmRfbWFjaGluZV90eXBlKCk7CiAKKyNpZm5kZWYgQ09ORklHX1JFTE9DQVRBQkxFCiAJLyogQmFpbCBpZiB0aGlzIGlzIGEga2R1bXAga2VybmVsLiAqLwogCWlmIChQSFlTSUNBTF9TVEFSVCA+IDApCiAJCXByb21fcGFuaWMoIkVycm9yOiBZb3UgY2FuJ3QgYm9vdCBhIGtkdW1wIGtlcm5lbCBmcm9tIE9GIVxuIik7CisjZW5kaWYKIAogCS8qCiAJICogQ2hlY2sgZm9yIGFuIGluaXRyZApAQCAtMjM3Nyw3ICsyMzc0LDcgQEAKIAkgKiBDb3B5IHRoZSBDUFUgaG9sZCBjb2RlCiAJICovCiAJaWYgKFJFTE9DKG9mX3BsYXRmb3JtKSAhPSBQTEFURk9STV9QT1dFUk1BQykKLQkJY29weV9hbmRfZmx1c2goMCwgS0VSTkVMQkFTRSArIG9mZnNldCwgMHgxMDAsIDApOworCQljb3B5X2FuZF9mbHVzaCgwLCBrYmFzZSwgMHgxMDAsIDApOwogCiAJLyoKIAkgKiBEbyBlYXJseSBwYXJzaW5nIG9mIGNvbW1hbmQgbGluZQpAQCAtMjQ4MCw3ICsyNDc3LDcgQEAKIAlyZWxvY19nb3QyKC1vZmZzZXQpOwogI2VuZGlmCiAKLQlfX3N0YXJ0KGhkciwgS0VSTkVMQkFTRSArIG9mZnNldCwgMCk7CisJX19zdGFydChoZHIsIGtiYXNlLCAwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9yZWxvY182NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9yZWxvY182NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0N2EwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3JlbG9jXzY0LlMKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvZGUgdG8gcHJvY2VzcyBkeW5hbWljIHJlbG9jYXRpb25zIGluIHRoZSBrZXJuZWwuCisgKgorICogQ29weXJpZ2h0IDIwMDggUGF1bCBNYWNrZXJyYXMsIElCTSBDb3JwLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorCitSRUxBID0gNworUkVMQUNPVU5UID0gMHg2ZmZmZmZmOQorUl9QUEM2NF9SRUxBVElWRSA9IDIyCisKKy8qCisgKiByMyA9IGRlc2lyZWQgZmluYWwgYWRkcmVzcyBvZiBrZXJuZWwKKyAqLworX0dMT0JBTChyZWxvY2F0ZSkKKwltZmxyCXIwCisJYmNsCTIwLDMxLCQrNAorMDoJbWZscglyMTIJCS8qIHIxMiBoYXMgcnVudGltZSBhZGRyIG9mIGxhYmVsIDAgKi8KKwltdGxyCXIwCisJbGQJcjExLChwX2R5biAtIDBiKShyMTIpCisJYWRkCXIxMSxyMTEscjEyCS8qIHIxMSBoYXMgcnVudGltZSBhZGRyIG9mIC5keW5hbWljIHNlY3Rpb24gKi8KKwlsZAlyOSwocF9yZWxhIC0gMGIpKHIxMikKKwlhZGQJcjkscjkscjEyCS8qIHI5IGhhcyBydW50aW1lIGFkZHIgb2YgLnJlbGEuZHluIHNlY3Rpb24gKi8KKwlsZAlyMTAsKHBfc3QgLSAwYikocjEyKQorCWFkZAlyMTAscjEwLHIxMgkvKiByMTAgaGFzIHJ1bnRpbWUgYWRkciBvZiBfc3RleHQgKi8KKworCS8qCisJICogU2NhbiB0aGUgZHluYW1pYyBzZWN0aW9uIGZvciB0aGUgUkVMQSBhbmQgUkVMQUNPVU5UIGVudHJpZXMuCisJICovCisJbGkJcjcsMAorCWxpCXI4LDAKKzE6CWxkCXI2LDAocjExKQkvKiBnZXQgdGFnICovCisJY21wZGkJcjYsMAorCWJlcQk0ZgkJLyogZW5kIG9mIGxpc3QgKi8KKwljbXBkaQlyNixSRUxBCisJYm5lCTJmCisJbGQJcjcsOChyMTEpCS8qIGdldCBSRUxBIHBvaW50ZXIgaW4gcjcgKi8KKwliCTNmCisyOglhZGRpcwlyNixyNiwoLVJFTEFDT1VOVClAaGEKKwljbXBkaQlyNixSRUxBQ09VTlRAbAorCWJuZQkzZgorCWxkCXI4LDgocjExKQkvKiBnZXQgUkVMQUNPVU5UIHZhbHVlIGluIHI4ICovCiszOglhZGRpCXIxMSxyMTEsMTYKKwliCTFiCis0OgljbXBkaQlyNywwCQkvKiBjaGVjayB3ZSBoYXZlIGJvdGggUkVMQSBhbmQgUkVMQUNPVU5UICovCisJY21wZGkJY3IxLHI4LDAKKwliZXEJNmYKKwliZXEJY3IxLDZmCisKKwkvKgorCSAqIFdvcmsgb3V0IGxpbmt0aW1lIGFkZHJlc3Mgb2YgX3N0ZXh0IGFuZCBoZW5jZSB0aGUKKwkgKiByZWxvY2F0aW9uIG9mZnNldCB0byBiZSBhcHBsaWVkLgorCSAqIGN1cl9vZmZzZXQgW3I3XSA9IHJlbGEucnVuIFtyOV0gLSByZWxhLmxpbmsgW3I3XQorCSAqIF9zdGV4dC5saW5rIFtyMTBdID0gX3N0ZXh0LnJ1biBbcjEwXSAtIGN1cl9vZmZzZXQgW3I3XQorCSAqIGZpbmFsX29mZnNldCBbcjNdID0gX3N0ZXh0LmZpbmFsIFtyM10gLSBfc3RleHQubGluayBbcjEwXQorCSAqLworCXN1YmYJcjcscjcscjkJLyogY3VyX29mZnNldCAqLworCXN1YmYJcjEwLHI3LHIxMAorCXN1YmYJcjMscjEwLHIzCS8qIGZpbmFsX29mZnNldCAqLworCisJLyoKKwkgKiBSdW4gdGhyb3VnaCB0aGUgbGlzdCBvZiByZWxvY2F0aW9ucyBhbmQgcHJvY2VzcyB0aGUKKwkgKiBSX1BQQzY0X1JFTEFUSVZFIG9uZXMuCisJICovCisJbXRjdHIJcjgKKzU6CWx3eglyMCwxMig5KQkvKiBFTEY2NF9SX1RZUEUocmVsb2MtPnJfaW5mbykgKi8KKwljbXB3aQlyMCxSX1BQQzY0X1JFTEFUSVZFCisJYm5lCTZmCisJbGQJcjYsMChyOSkJLyogcmVsb2MtPnJfb2Zmc2V0ICovCisJbGQJcjAsMTYocjkpCS8qIHJlbG9jLT5yX2FkZGVuZCAqLworCWFkZAlyMCxyMCxyMworCXN0ZHgJcjAscjcscjYKKwlhZGRpCXI5LHI5LDI0CisJYmRuegk1YgorCis2OglibHIKKworcF9keW46CS5sbG9uZwlfX2R5bmFtaWNfc3RhcnQgLSAwYgorcF9yZWxhOgkubGxvbmcJX19yZWxhX2R5bl9zdGFydCAtIDBiCitwX3N0OgkubGxvbmcJX3N0ZXh0IC0gMGIKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKaW5kZXggOWNjNWE1Mi4uNWVjNTZmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCkBAIC0yNTQsOCArMjU0LDIxIEBACiAJLyogSWYgd2UgYXJlIGEgRnJlZXNjYWxlIGNvcmUgZG8gYSBzaW1wbGUgY2hlY2sgc28KIAkgKiB3ZSBkb250IGhhdmUgdG8ga2VlcCBhZGRpbmcgY2FzZXMgaW4gdGhlIGZ1dHVyZSAqLwogCWlmIChQVlJfVkVSKHB2cikgJiAweDgwMDApIHsKLQkJbWFqID0gUFZSX01BSihwdnIpOwotCQltaW4gPSBQVlJfTUlOKHB2cik7CisJCXN3aXRjaCAoUFZSX1ZFUihwdnIpKSB7CisJCWNhc2UgMHg4MDAwOgkvKiA3NDQxLzc0NTAvNzQ1MSwgVm95YWdlciAqLworCQljYXNlIDB4ODAwMToJLyogNzQ0NS83NDU1LCBBcG9sbG8gNiAqLworCQljYXNlIDB4ODAwMjoJLyogNzQ0Ny83NDU3LCBBcG9sbG8gNyAqLworCQljYXNlIDB4ODAwMzoJLyogNzQ0N0EsIEFwb2xsbyA3IFBNICovCisJCWNhc2UgMHg4MDA0OgkvKiA3NDQ4LCBBcG9sbG8gOCAqLworCQljYXNlIDB4ODAwYzoJLyogNzQxMCwgTml0cm8gKi8KKwkJCW1haiA9ICgocHZyID4+IDgpICYgMHhGKTsKKwkJCW1pbiA9IFBWUl9NSU4ocHZyKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgkvKiBlNTAwL2Jvb2stZSAqLworCQkJbWFqID0gUFZSX01BSihwdnIpOworCQkJbWluID0gUFZSX01JTihwdnIpOworCQkJYnJlYWs7CisJCX0KIAl9IGVsc2UgewogCQlzd2l0Y2ggKFBWUl9WRVIocHZyKSkgewogCQkJY2FzZSAweDAwMjA6CS8qIDQwMyBmYW1pbHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCAwNjZlNjVjLi5jMWEyNzYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC0xMTEsNyArMTExLDcgQEAKICAqIFRoaXMgaXMgY2FsbGVkIHZlcnkgZWFybHkgb24gdGhlIGJvb3QgcHJvY2VzcywgYWZ0ZXIgYSBtaW5pbWFsCiAgKiBNTVUgZW52aXJvbm1lbnQgaGFzIGJlZW4gc2V0IHVwIGJ1dCBiZWZvcmUgTU1VX2luaXQgaXMgY2FsbGVkLgogICovCi1ub3RyYWNlIHZvaWQgX19pbml0IG1hY2hpbmVfaW5pdCh1bnNpZ25lZCBsb25nIGR0X3B0ciwgdW5zaWduZWQgbG9uZyBwaHlzKQorbm90cmFjZSB2b2lkIF9faW5pdCBtYWNoaW5lX2luaXQodW5zaWduZWQgbG9uZyBkdF9wdHIpCiB7CiAJLyogRW5hYmxlIGVhcmx5IGRlYnVnZ2luZyBpZiBhbnkgc3BlY2lmaWVkIChzZWUgdWRiZy5oKSAqLwogCXVkYmdfZWFybHlfaW5pdCgpOwpAQCAtMjA5LDIzICsyMDksMTIgQEAKIAogI2VuZGlmIC8qIENPTkZJR19OVlJBTSAqLwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdSwgY3B1X2RldmljZXMpOwotCiBpbnQgX19pbml0IHBwY19pbml0KHZvaWQpCiB7Ci0JaW50IGNwdTsKLQogCS8qIGNsZWFyIHRoZSBwcm9ncmVzcyBsaW5lICovCiAJaWYgKHBwY19tZC5wcm9ncmVzcykKIAkJcHBjX21kLnByb2dyZXNzKCIgICAgICAgICAgICAgIiwgMHhmZmZmKTsKIAotCS8qIHJlZ2lzdGVyIENQVSBkZXZpY2VzICovCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgY3B1ICpjID0gJnBlcl9jcHUoY3B1X2RldmljZXMsIGNwdSk7Ci0JCWMtPmhvdHBsdWdnYWJsZSA9IDE7Ci0JCXJlZ2lzdGVyX2NwdShjLCBjcHUpOwotCX0KLQogCS8qIGNhbGwgcGxhdGZvcm0gaW5pdCAqLwogCWlmIChwcGNfbWQuaW5pdCAhPSBOVUxMKSB7CiAJCXBwY19tZC5pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKaW5kZXggOGIyNWY1MS4uODQzYzBhZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwpAQCAtMjU1LDkgKzI1NSwxMSBAQAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfS0VYRUMpCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wOworZXh0ZXJuIHZvaWQgZ2VuZXJpY19zZWNvbmRhcnlfc21wX2luaXQodm9pZCk7CisKIHZvaWQgc21wX3JlbGVhc2VfY3B1cyh2b2lkKQogewotCWV4dGVybiB1bnNpZ25lZCBsb25nIF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3A7CiAJdW5zaWduZWQgbG9uZyAqcHRyOwogCiAJREJHKCIgLT4gc21wX3JlbGVhc2VfY3B1cygpXG4iKTsKQEAgLTI2NiwxMiArMjY4LDExIEBACiAJICogYWxsIG5vdyBzbyB0aGV5IGNhbiBzdGFydCB0byBzcGluIG9uIHRoZWlyIGluZGl2aWR1YWwgcGFjYQogCSAqIHNwaW5sb29wcy4gRm9yIG5vbiBTTVAga2VybmVscywgdGhlIHNlY29uZGFyeSBjcHVzIG5ldmVyIGdldCBvdXQKIAkgKiBvZiB0aGUgY29tbW9uIHNwaW5sb29wLgotCSAqIFRoaXMgaXMgdXNlbGVzcyBidXQgaGFybWxlc3Mgb24gaVNlcmllcywgc2Vjb25kYXJpZXMgYXJlIGFscmVhZHkKLQkgKiB3YWl0aW5nIG9uIHRoZWlyIHBhY2Egc3Bpbmxvb3BzLiAqLworCSAqLwogCiAJcHRyICA9ICh1bnNpZ25lZCBsb25nICopKCh1bnNpZ25lZCBsb25nKSZfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wCiAJCQktIFBIWVNJQ0FMX1NUQVJUKTsKLQkqcHRyID0gMTsKKwkqcHRyID0gX19wYShnZW5lcmljX3NlY29uZGFyeV9zbXBfaW5pdCk7CiAJbWIoKTsKIAogCURCRygiIDwtIHNtcF9yZWxlYXNlX2NwdXMoKVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYwppbmRleCBjMjdiMTBhLi5mZjlmNzAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKQEAgLTEwMSw4ICsxMDEsNyBAQAogCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOwogCQlicmVhazsKIAljYXNlIFBQQ19NU0dfUkVTQ0hFRFVMRToKLQkJLyogWFhYIERvIHdlIGhhdmUgdG8gZG8gdGhpcz8gKi8KLQkJc2V0X25lZWRfcmVzY2hlZCgpOworCQkvKiB3ZSBub3RpY2UgbmVlZF9yZXNjaGVkIG9uIGV4aXQgKi8KIAkJYnJlYWs7CiAJY2FzZSBQUENfTVNHX0NBTExfRlVOQ19TSU5HTEU6CiAJCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zb2Z0ZW11OHh4LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NvZnRlbXU4eHguYwppbmRleCBjOTA2YzRiLi4yM2M4YzVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NvZnRlbXU4eHguYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NvZnRlbXU4eHguYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+Ci0jaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcF9hc202NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwppbmRleCBlMDkyYzNjLi44NmFjMWQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcF9hc202NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCiAJY21wZGkJcjEyLDAKIAliZXEtCW5vdGhpbmdfdG9fY29weQotCWxpCXIxNSw1MTIKKwlsaQlyMTUsUEFHRV9TSVpFPj4zCiBjb3B5bG9vcDoKIAlsZAlyMTMscGJlX2FkZHJlc3MocjEyKQogCWxkCXIxNCxwYmVfb3JpZ19hZGRyZXNzKHIxMikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzX3BwYzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jCmluZGV4IGQ5ODYzNGMuLmJiMWNmY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzX3BwYzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYwpAQCAtNjEsNDIgKzYxLDYgQEAKIAlyZXR1cm4gY29tcGF0X3N5c19zZWxlY3QoKGludCluLCBpbnAsIG91dHAsIGV4cCwgY29tcGF0X3B0cih0dnBfeCkpOwogfQogCi1pbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICpzdGF0YnVmKQotewotCWNvbXBhdF9pbm9fdCBpbm87Ci0JbG9uZyBlcnI7Ci0KLQlpZiAoc3RhdC0+c2l6ZSA+IE1BWF9OT05fTEZTIHx8ICFuZXdfdmFsaWRfZGV2KHN0YXQtPmRldikgfHwKLQkgICAgIW5ld192YWxpZF9kZXYoc3RhdC0+cmRldikpCi0JCXJldHVybiAtRU9WRVJGTE9XOwotCi0JaW5vID0gc3RhdC0+aW5vOwotCWlmIChzaXplb2YoaW5vKSA8IHNpemVvZihzdGF0LT5pbm8pICYmIGlubyAhPSBzdGF0LT5pbm8pCi0JCXJldHVybiAtRU9WRVJGTE9XOwotCi0JZXJyICA9IGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHN0YXRidWYsIHNpemVvZigqc3RhdGJ1ZikpID8gMCA6IC1FRkFVTFQ7Ci0JZXJyIHw9IF9fcHV0X3VzZXIobmV3X2VuY29kZV9kZXYoc3RhdC0+ZGV2KSwgJnN0YXRidWYtPnN0X2Rldik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoaW5vLCAmc3RhdGJ1Zi0+c3RfaW5vKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5tb2RlLCAmc3RhdGJ1Zi0+c3RfbW9kZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+bmxpbmssICZzdGF0YnVmLT5zdF9ubGluayk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+dWlkLCAmc3RhdGJ1Zi0+c3RfdWlkKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5naWQsICZzdGF0YnVmLT5zdF9naWQpOwotCWVyciB8PSBfX3B1dF91c2VyKG5ld19lbmNvZGVfZGV2KHN0YXQtPnJkZXYpLCAmc3RhdGJ1Zi0+c3RfcmRldik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+c2l6ZSwgJnN0YXRidWYtPnN0X3NpemUpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmF0aW1lLnR2X3NlYywgJnN0YXRidWYtPnN0X2F0aW1lKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5hdGltZS50dl9uc2VjLCAmc3RhdGJ1Zi0+c3RfYXRpbWVfbnNlYyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfc2VjLCAmc3RhdGJ1Zi0+c3RfbXRpbWUpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm10aW1lLnR2X25zZWMsICZzdGF0YnVmLT5zdF9tdGltZV9uc2VjKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5jdGltZS50dl9zZWMsICZzdGF0YnVmLT5zdF9jdGltZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+Y3RpbWUudHZfbnNlYywgJnN0YXRidWYtPnN0X2N0aW1lX25zZWMpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmJsa3NpemUsICZzdGF0YnVmLT5zdF9ibGtzaXplKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5ibG9ja3MsICZzdGF0YnVmLT5zdF9ibG9ja3MpOwotCWVyciB8PSBfX3B1dF91c2VyKDAsICZzdGF0YnVmLT5fX3VudXNlZDRbMF0pOwotCWVyciB8PSBfX3B1dF91c2VyKDAsICZzdGF0YnVmLT5fX3VudXNlZDRbMV0pOwotCi0JcmV0dXJuIGVycjsKLX0KLQogLyogTm90ZTogaXQgaXMgbmVjZXNzYXJ5IHRvIHRyZWF0IG9wdGlvbiBhcyBhbiB1bnNpZ25lZCBpbnQsCiAgKiB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGNhc3QgdG8gYSBzaWduZWQgaW50IHRvIGluc3VyZSB0aGF0IHRoZSAKICAqIHByb3BlciBjb252ZXJzaW9uIChzaWduIGV4dGVuc2lvbikgYmV0d2VlbiB0aGUgcmVnaXN0ZXIgcmVwcmVzZW50YXRpb24gb2YgYSBzaWduZWQgaW50IChtc3IgaW4gMzItYml0IG1vZGUpCkBAIC0xMDcsNzcgKzcxLDYgQEAKIAlyZXR1cm4gc3lzX3N5c2ZzKChpbnQpb3B0aW9uLCBhcmcxLCBhcmcyKTsKIH0KIAotYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfcGF1c2Uodm9pZCkKLXsKLQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLQlzY2hlZHVsZSgpOwotCQotCXJldHVybiAtRVJFU1RBUlROT0hBTkQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBnZXRfdHMzMihzdHJ1Y3QgdGltZXNwZWMgKm8sIHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKmkpCi17Ci0JbG9uZyB1c2VjOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGksIHNpemVvZigqaSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoX19nZXRfdXNlcihvLT50dl9zZWMsICZpLT50dl9zZWMpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoX19nZXRfdXNlcih1c2VjLCAmaS0+dHZfdXNlYykpCi0JCXJldHVybiAtRUZBVUxUOwotCW8tPnR2X25zZWMgPSB1c2VjICogMTAwMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIHB1dF90djMyKHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKm8sIHN0cnVjdCB0aW1ldmFsICppKQotewotCXJldHVybiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG8sIHNpemVvZigqbykpIHx8Ci0JCShfX3B1dF91c2VyKGktPnR2X3NlYywgJm8tPnR2X3NlYykgfAotCQkgX19wdXRfdXNlcihpLT50dl91c2VjLCAmby0+dHZfdXNlYykpKTsKLX0KLQotCi0KLQotLyogVHJhbnNsYXRpb25zIGR1ZSB0byB0aW1lX3Qgc2l6ZSBkaWZmZXJlbmNlcy4gIFdoaWNoIGFmZmVjdHMgYWxsCi0gICBzb3J0cyBvZiB0aGluZ3MsIGxpa2UgdGltZXZhbCBhbmQgaXRpbWVydmFsLiAgKi8KLWV4dGVybiBzdHJ1Y3QgdGltZXpvbmUgc3lzX3R6OwotCi1hc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19nZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsIHN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQotewotCWlmICh0dikgewotCQlzdHJ1Y3QgdGltZXZhbCBrdHY7Ci0JCWRvX2dldHRpbWVvZmRheSgma3R2KTsKLQkJaWYgKHB1dF90djMyKHR2LCAma3R2KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAodHopIHsKLQkJaWYgKGNvcHlfdG9fdXNlcih0eiwgJnN5c190eiwgc2l6ZW9mKHN5c190eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCQotCXJldHVybiAwOwotfQotCi0KLQotYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfc2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlzdHJ1Y3QgdGltZXNwZWMga3RzOwotCXN0cnVjdCB0aW1lem9uZSBrdHo7Ci0JCi0gCWlmICh0dikgewotCQlpZiAoZ2V0X3RzMzIoJmt0cywgdHYpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmICh0eikgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmt0eiwgdHosIHNpemVvZihrdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldHVybiBkb19zeXNfc2V0dGltZW9mZGF5KHR2ID8gJmt0cyA6IE5VTEwsIHR6ID8gJmt0eiA6IE5VTEwpOwotfQotCiAjaWZkZWYgQ09ORklHX1NZU1ZJUEMKIGxvbmcgY29tcGF0X3N5c19pcGModTMyIGNhbGwsIHUzMiBmaXJzdCwgdTMyIHNlY29uZCwgdTMyIHRoaXJkLCBjb21wYXRfdXB0cl90IHB0ciwKIAkgICAgICAgdTMyIGZpZnRoKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCmluZGV4IDU2ZDE3MmQuLjg2YTJmZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKQEAgLTE1LDE4ICsxNSwyNCBAQAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9odmNhbGwuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9wYWNhLmg+Ci0jaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCisjaWZkZWYgQ09ORklHX1BQQzY0CisjaW5jbHVkZSA8YXNtL3BhY2EuaD4KKyNpbmNsdWRlIDxhc20vbHBwYWNhLmg+CisjZW5kaWYKKwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHUsIGNwdV9kZXZpY2VzKTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrb2JqZWN0ICosIGNhY2hlX3RvcGxldmVsKTsKIAotLyogU01UIHN0dWZmICovCisvKgorICogU01UIHNub296ZSBkZWxheSBzdHVmZiwgNjQtYml0IG9ubHkgZm9yIG5vdworICovCiAKLSNpZmRlZiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0KKyNpZmRlZiBDT05GSUdfUFBDNjQKKwogLyogVGltZSBpbiBtaWNyb3NlY29uZHMgd2UgZGVsYXkgYmVmb3JlIHNsZWVwaW5nIGluIHRoZSBpZGxlIGxvb3AgKi8KIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHNtdF9zbm9vemVfZGVsYXkpID0geyAxMDAgfTsKIApAQCAtMTA2LDcgKzExMiw3IEBACiB9CiBfX3NldHVwKCJzbXQtc25vb3plLWRlbGF5PSIsIHNldHVwX3NtdF9zbm9vemVfZGVsYXkpOwogCi0jZW5kaWYgLyogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNICovCisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKIC8qCiAgKiBFbmFibGluZyBQTUNzIHdpbGwgc2xvdyBwYXJ0aXRpb24gY29udGV4dCBzd2l0Y2ggdGltZXMgc28gd2Ugb25seSBkbwpAQCAtMTE1LDcgKzEyMSw3IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShjaGFyLCBwbWNzX2VuYWJsZWQpOwogCi12b2lkIHBwYzY0X2VuYWJsZV9wbWNzKHZvaWQpCit2b2lkIHBwY19lbmFibGVfcG1jcyh2b2lkKQogewogCS8qIE9ubHkgbmVlZCB0byBlbmFibGUgdGhlbSBvbmNlICovCiAJaWYgKF9fZ2V0X2NwdV92YXIocG1jc19lbmFibGVkKSkKQEAgLTEyNiw4ICsxMzIsOSBAQAogCWlmIChwcGNfbWQuZW5hYmxlX3BtY3MpCiAJCXBwY19tZC5lbmFibGVfcG1jcygpOwogfQotRVhQT1JUX1NZTUJPTChwcGM2NF9lbmFibGVfcG1jcyk7CitFWFBPUlRfU1lNQk9MKHBwY19lbmFibGVfcG1jcyk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR182eHgpIHx8IGRlZmluZWQoQ09ORklHX1BQQzY0KQogLyogWFhYIGNvbnZlcnQgdG8gcnVzdHkncyBvbl9vbmVfY3B1ICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBydW5fb25fY3B1KHVuc2lnbmVkIGxvbmcgY3B1LAogCQkJICAgICAgICB1bnNpZ25lZCBsb25nICgqZnVuYykodW5zaWduZWQgbG9uZyksCkBAIC0xNDYsNiArMTUzLDcgQEAKIAogCXJldHVybiByZXQ7CiB9CisjZW5kaWYKIAogI2RlZmluZSBTWVNGU19QTUNTRVRVUChOQU1FLCBBRERSRVNTKSBcCiBzdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkXyMjTkFNRSh1bnNpZ25lZCBsb25nIGp1bmspIFwKQEAgLTE1NCw3ICsxNjIsNyBAQAogfSBcCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3cml0ZV8jI05BTUUodW5zaWduZWQgbG9uZyB2YWwpIFwKIHsgXAotCXBwYzY0X2VuYWJsZV9wbWNzKCk7IFwKKwlwcGNfZW5hYmxlX3BtY3MoKTsgXAogCW10c3ByKEFERFJFU1MsIHZhbCk7IFwKIAlyZXR1cm4gMDsgXAogfSBcCkBAIC0xODQsMjggKzE5Miw1MyBAQAogICogdGhhdCBhcmUgaW1wbGVtZW50ZWQgb24gdGhlIGN1cnJlbnQgcHJvY2Vzc29yCiAgKi8KIAorI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KQorI2RlZmluZSBIQVNfUFBDX1BNQ19DTEFTU0lDCTEKKyNkZWZpbmUgSEFTX1BQQ19QTUNfSUJNCQkxCisjZGVmaW5lIEhBU19QUENfUE1DX1BBNlQJMQorI2VsaWYgZGVmaW5lZChDT05GSUdfNnh4KQorI2RlZmluZSBIQVNfUFBDX1BNQ19DTEFTU0lDCTEKKyNkZWZpbmUgSEFTX1BQQ19QTUNfSUJNCQkxCisjZGVmaW5lIEhBU19QUENfUE1DX0c0CQkxCisjZW5kaWYKKworCisjaWZkZWYgSEFTX1BQQ19QTUNfQ0xBU1NJQwogU1lTRlNfUE1DU0VUVVAobW1jcjAsIFNQUk5fTU1DUjApOwogU1lTRlNfUE1DU0VUVVAobW1jcjEsIFNQUk5fTU1DUjEpOwotU1lTRlNfUE1DU0VUVVAobW1jcmEsIFNQUk5fTU1DUkEpOwogU1lTRlNfUE1DU0VUVVAocG1jMSwgU1BSTl9QTUMxKTsKIFNZU0ZTX1BNQ1NFVFVQKHBtYzIsIFNQUk5fUE1DMik7CiBTWVNGU19QTUNTRVRVUChwbWMzLCBTUFJOX1BNQzMpOwogU1lTRlNfUE1DU0VUVVAocG1jNCwgU1BSTl9QTUM0KTsKIFNZU0ZTX1BNQ1NFVFVQKHBtYzUsIFNQUk5fUE1DNSk7CiBTWVNGU19QTUNTRVRVUChwbWM2LCBTUFJOX1BNQzYpOworCisjaWZkZWYgSEFTX1BQQ19QTUNfRzQKK1NZU0ZTX1BNQ1NFVFVQKG1tY3IyLCBTUFJOX01NQ1IyKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BQQzY0CiBTWVNGU19QTUNTRVRVUChwbWM3LCBTUFJOX1BNQzcpOwogU1lTRlNfUE1DU0VUVVAocG1jOCwgU1BSTl9QTUM4KTsKKworU1lTRlNfUE1DU0VUVVAobW1jcmEsIFNQUk5fTU1DUkEpOwogU1lTRlNfUE1DU0VUVVAocHVyciwgU1BSTl9QVVJSKTsKIFNZU0ZTX1BNQ1NFVFVQKHNwdXJyLCBTUFJOX1NQVVJSKTsKIFNZU0ZTX1BNQ1NFVFVQKGRzY3IsIFNQUk5fRFNDUik7CiAKK3N0YXRpYyBTWVNERVZfQVRUUihtbWNyYSwgMDYwMCwgc2hvd19tbWNyYSwgc3RvcmVfbW1jcmEpOworc3RhdGljIFNZU0RFVl9BVFRSKHNwdXJyLCAwNjAwLCBzaG93X3NwdXJyLCBOVUxMKTsKK3N0YXRpYyBTWVNERVZfQVRUUihkc2NyLCAwNjAwLCBzaG93X2RzY3IsIHN0b3JlX2RzY3IpOworc3RhdGljIFNZU0RFVl9BVFRSKHB1cnIsIDA2MDAsIHNob3dfcHVyciwgc3RvcmVfcHVycik7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisKKyNpZmRlZiBIQVNfUFBDX1BNQ19QQTZUCiBTWVNGU19QTUNTRVRVUChwYTZ0X3BtYzAsIFNQUk5fUEE2VF9QTUMwKTsKIFNZU0ZTX1BNQ1NFVFVQKHBhNnRfcG1jMSwgU1BSTl9QQTZUX1BNQzEpOwogU1lTRlNfUE1DU0VUVVAocGE2dF9wbWMyLCBTUFJOX1BBNlRfUE1DMik7CiBTWVNGU19QTUNTRVRVUChwYTZ0X3BtYzMsIFNQUk5fUEE2VF9QTUMzKTsKIFNZU0ZTX1BNQ1NFVFVQKHBhNnRfcG1jNCwgU1BSTl9QQTZUX1BNQzQpOwogU1lTRlNfUE1DU0VUVVAocGE2dF9wbWM1LCBTUFJOX1BBNlRfUE1DNSk7Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfS0VSTkVMCiBTWVNGU19QTUNTRVRVUChoaWQwLCBTUFJOX0hJRDApOwogU1lTRlNfUE1DU0VUVVAoaGlkMSwgU1BSTl9ISUQxKTsKQEAgLTIzNiwyOCArMjY5LDM3IEBACiBTWVNGU19QTUNTRVRVUCh0c3IyLCBTUFJOX1BBNlRfVFNSMik7CiBTWVNGU19QTUNTRVRVUCh0c3IzLCBTUFJOX1BBNlRfVFNSMyk7CiAjZW5kaWYgLyogQ09ORklHX0RFQlVHX0tFUk5FTCAqLworI2VuZGlmIC8qIEhBU19QUENfUE1DX1BBNlQgKi8KIAotc3RhdGljIFNZU0RFVl9BVFRSKG1tY3JhLCAwNjAwLCBzaG93X21tY3JhLCBzdG9yZV9tbWNyYSk7Ci1zdGF0aWMgU1lTREVWX0FUVFIoc3B1cnIsIDA2MDAsIHNob3dfc3B1cnIsIE5VTEwpOwotc3RhdGljIFNZU0RFVl9BVFRSKGRzY3IsIDA2MDAsIHNob3dfZHNjciwgc3RvcmVfZHNjcik7Ci1zdGF0aWMgU1lTREVWX0FUVFIocHVyciwgMDYwMCwgc2hvd19wdXJyLCBzdG9yZV9wdXJyKTsKLQorI2lmZGVmIEhBU19QUENfUE1DX0lCTQogc3RhdGljIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlIGlibV9jb21tb25fYXR0cnNbXSA9IHsKIAlfU1lTREVWX0FUVFIobW1jcjAsIDA2MDAsIHNob3dfbW1jcjAsIHN0b3JlX21tY3IwKSwKIAlfU1lTREVWX0FUVFIobW1jcjEsIDA2MDAsIHNob3dfbW1jcjEsIHN0b3JlX21tY3IxKSwKIH07CisjZW5kaWYgLyogSEFTX1BQQ19QTUNfRzQgKi8KIAotc3RhdGljIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlIGlibV9wbWNfYXR0cnNbXSA9IHsKKyNpZmRlZiBIQVNfUFBDX1BNQ19HNAorc3RhdGljIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlIGc0X2NvbW1vbl9hdHRyc1tdID0geworCV9TWVNERVZfQVRUUihtbWNyMCwgMDYwMCwgc2hvd19tbWNyMCwgc3RvcmVfbW1jcjApLAorCV9TWVNERVZfQVRUUihtbWNyMSwgMDYwMCwgc2hvd19tbWNyMSwgc3RvcmVfbW1jcjEpLAorCV9TWVNERVZfQVRUUihtbWNyMiwgMDYwMCwgc2hvd19tbWNyMiwgc3RvcmVfbW1jcjIpLAorfTsKKyNlbmRpZiAvKiBIQVNfUFBDX1BNQ19HNCAqLworCitzdGF0aWMgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgY2xhc3NpY19wbWNfYXR0cnNbXSA9IHsKIAlfU1lTREVWX0FUVFIocG1jMSwgMDYwMCwgc2hvd19wbWMxLCBzdG9yZV9wbWMxKSwKIAlfU1lTREVWX0FUVFIocG1jMiwgMDYwMCwgc2hvd19wbWMyLCBzdG9yZV9wbWMyKSwKIAlfU1lTREVWX0FUVFIocG1jMywgMDYwMCwgc2hvd19wbWMzLCBzdG9yZV9wbWMzKSwKIAlfU1lTREVWX0FUVFIocG1jNCwgMDYwMCwgc2hvd19wbWM0LCBzdG9yZV9wbWM0KSwKIAlfU1lTREVWX0FUVFIocG1jNSwgMDYwMCwgc2hvd19wbWM1LCBzdG9yZV9wbWM1KSwKIAlfU1lTREVWX0FUVFIocG1jNiwgMDYwMCwgc2hvd19wbWM2LCBzdG9yZV9wbWM2KSwKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAlfU1lTREVWX0FUVFIocG1jNywgMDYwMCwgc2hvd19wbWM3LCBzdG9yZV9wbWM3KSwKIAlfU1lTREVWX0FUVFIocG1jOCwgMDYwMCwgc2hvd19wbWM4LCBzdG9yZV9wbWM4KSwKKyNlbmRpZgogfTsKIAorI2lmZGVmIEhBU19QUENfUE1DX1BBNlQKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSBwYTZ0X2F0dHJzW10gPSB7CiAJX1NZU0RFVl9BVFRSKG1tY3IwLCAwNjAwLCBzaG93X21tY3IwLCBzdG9yZV9tbWNyMCksCiAJX1NZU0RFVl9BVFRSKG1tY3IxLCAwNjAwLCBzaG93X21tY3IxLCBzdG9yZV9tbWNyMSksCkBAIC0yOTgsNiArMzQwLDggQEAKIAlfU1lTREVWX0FUVFIodHNyMywgMDYwMCwgc2hvd190c3IzLCBzdG9yZV90c3IzKSwKICNlbmRpZiAvKiBDT05GSUdfREVCVUdfS0VSTkVMICovCiB9OworI2VuZGlmIC8qIEhBU19QUENfUE1DX1BBNlQgKi8KKyNlbmRpZiAvKiBIQVNfUFBDX1BNQ19DTEFTU0lDICovCiAKIHN0cnVjdCBjYWNoZV9kZXNjIHsKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwpAQCAtNTg4LDIzICs2MzIsMzYgQEAKIAlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0cnMsICpwbWNfYXR0cnM7CiAJaW50IGksIG5hdHRyczsKIAorI2lmZGVmIENPTkZJR19QUEM2NAogCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSAmJgogCQkJY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU01UKSkKIAkJc3lzZGV2X2NyZWF0ZV9maWxlKHMsICZhdHRyX3NtdF9zbm9vemVfZGVsYXkpOworI2VuZGlmCiAKIAkvKiBQTUMgc3R1ZmYgKi8KIAlzd2l0Y2ggKGN1cl9jcHVfc3BlYy0+cG1jX3R5cGUpIHsKKyNpZmRlZiBIQVNfUFBDX1BNQ19JQk0KIAljYXNlIFBQQ19QTUNfSUJNOgogCQlhdHRycyA9IGlibV9jb21tb25fYXR0cnM7CiAJCW5hdHRycyA9IHNpemVvZihpYm1fY29tbW9uX2F0dHJzKSAvIHNpemVvZihzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSk7Ci0JCXBtY19hdHRycyA9IGlibV9wbWNfYXR0cnM7CisJCXBtY19hdHRycyA9IGNsYXNzaWNfcG1jX2F0dHJzOwogCQlicmVhazsKKyNlbmRpZiAvKiBIQVNfUFBDX1BNQ19JQk0gKi8KKyNpZmRlZiBIQVNfUFBDX1BNQ19HNAorCWNhc2UgUFBDX1BNQ19HNDoKKwkJYXR0cnMgPSBnNF9jb21tb25fYXR0cnM7CisJCW5hdHRycyA9IHNpemVvZihnNF9jb21tb25fYXR0cnMpIC8gc2l6ZW9mKHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlKTsKKwkJcG1jX2F0dHJzID0gY2xhc3NpY19wbWNfYXR0cnM7CisJCWJyZWFrOworI2VuZGlmIC8qIEhBU19QUENfUE1DX0c0ICovCisjaWZkZWYgSEFTX1BQQ19QTUNfUEE2VAogCWNhc2UgUFBDX1BNQ19QQTZUOgogCQkvKiBQQSBTZW1pIHN0YXJ0cyBjb3VudGluZyBhdCBQTUMwICovCiAJCWF0dHJzID0gcGE2dF9hdHRyczsKIAkJbmF0dHJzID0gc2l6ZW9mKHBhNnRfYXR0cnMpIC8gc2l6ZW9mKHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlKTsKIAkJcG1jX2F0dHJzID0gTlVMTDsKIAkJYnJlYWs7CisjZW5kaWYgLyogSEFTX1BQQ19QTUNfUEE2VCAqLwogCWRlZmF1bHQ6CiAJCWF0dHJzID0gTlVMTDsKIAkJbmF0dHJzID0gMDsKQEAgLTYxOCw2ICs2NzUsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgY3VyX2NwdV9zcGVjLT5udW1fcG1jczsgaSsrKQogCQkJc3lzZGV2X2NyZWF0ZV9maWxlKHMsICZwbWNfYXR0cnNbaV0pOwogCisjaWZkZWYgQ09ORklHX1BQQzY0CiAJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX01NQ1JBKSkKIAkJc3lzZGV2X2NyZWF0ZV9maWxlKHMsICZhdHRyX21tY3JhKTsKIApAQCAtNjI5LDYgKzY4Nyw3IEBACiAKIAlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfRFNDUikpCiAJCXN5c2Rldl9jcmVhdGVfZmlsZShzLCAmYXR0cl9kc2NyKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogCWNyZWF0ZV9jYWNoZV9pbmZvKHMpOwogfQpAQCAtNjQxLDE2ICs3MDAsOSBAQAogCWludCBjcHUgPSBzeXNkZXYtPmlkOwogCiAJY2FjaGVfZGVzYyA9IHBlcl9jcHUoY2FjaGVfZGVzYywgY3B1KTsKLQlpZiAoY2FjaGVfZGVzYyAhPSBOVUxMKSB7Ci0JCXN5c2ZzX3JlbW92ZV9maWxlKCZjYWNoZV9kZXNjLT5rb2JqLCAmY2FjaGVfc2l6ZV9hdHRyLmF0dHIpOwotCQlzeXNmc19yZW1vdmVfZmlsZSgmY2FjaGVfZGVzYy0+a29iaiwgJmNhY2hlX2xpbmVfc2l6ZV9hdHRyLmF0dHIpOwotCQlzeXNmc19yZW1vdmVfZmlsZSgmY2FjaGVfZGVzYy0+a29iaiwgJmNhY2hlX3R5cGVfYXR0ci5hdHRyKTsKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmNhY2hlX2Rlc2MtPmtvYmosICZjYWNoZV9sZXZlbF9hdHRyLmF0dHIpOwotCQlzeXNmc19yZW1vdmVfZmlsZSgmY2FjaGVfZGVzYy0+a29iaiwgJmNhY2hlX25yX3NldHNfYXR0ci5hdHRyKTsKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmNhY2hlX2Rlc2MtPmtvYmosICZjYWNoZV9hc3NvY19hdHRyLmF0dHIpOwotCisJaWYgKGNhY2hlX2Rlc2MgIT0gTlVMTCkKIAkJa29iamVjdF9wdXQoJmNhY2hlX2Rlc2MtPmtvYmopOwotCX0KKwogCWNhY2hlX3RvcGxldmVsID0gcGVyX2NwdShjYWNoZV90b3BsZXZlbCwgY3B1KTsKIAlpZiAoY2FjaGVfdG9wbGV2ZWwgIT0gTlVMTCkKIAkJa29iamVjdF9wdXQoY2FjaGVfdG9wbGV2ZWwpOwpAQCAtNjcxLDE3ICs3MjMsMjggQEAKIAogCS8qIFBNQyBzdHVmZiAqLwogCXN3aXRjaCAoY3VyX2NwdV9zcGVjLT5wbWNfdHlwZSkgeworI2lmZGVmIEhBU19QUENfUE1DX0lCTQogCWNhc2UgUFBDX1BNQ19JQk06CiAJCWF0dHJzID0gaWJtX2NvbW1vbl9hdHRyczsKIAkJbmF0dHJzID0gc2l6ZW9mKGlibV9jb21tb25fYXR0cnMpIC8gc2l6ZW9mKHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlKTsKLQkJcG1jX2F0dHJzID0gaWJtX3BtY19hdHRyczsKKwkJcG1jX2F0dHJzID0gY2xhc3NpY19wbWNfYXR0cnM7CiAJCWJyZWFrOworI2VuZGlmIC8qIEhBU19QUENfUE1DX0lCTSAqLworI2lmZGVmIEhBU19QUENfUE1DX0c0CisJY2FzZSBQUENfUE1DX0c0OgorCQlhdHRycyA9IGc0X2NvbW1vbl9hdHRyczsKKwkJbmF0dHJzID0gc2l6ZW9mKGc0X2NvbW1vbl9hdHRycykgLyBzaXplb2Yoc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUpOworCQlwbWNfYXR0cnMgPSBjbGFzc2ljX3BtY19hdHRyczsKKwkJYnJlYWs7CisjZW5kaWYgLyogSEFTX1BQQ19QTUNfRzQgKi8KKyNpZmRlZiBIQVNfUFBDX1BNQ19QQTZUCiAJY2FzZSBQUENfUE1DX1BBNlQ6CiAJCS8qIFBBIFNlbWkgc3RhcnRzIGNvdW50aW5nIGF0IFBNQzAgKi8KIAkJYXR0cnMgPSBwYTZ0X2F0dHJzOwogCQluYXR0cnMgPSBzaXplb2YocGE2dF9hdHRycykgLyBzaXplb2Yoc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUpOwogCQlwbWNfYXR0cnMgPSBOVUxMOwogCQlicmVhazsKKyNlbmRpZiAvKiBIQVNfUFBDX1BNQ19QQTZUICovCiAJZGVmYXVsdDoKIAkJYXR0cnMgPSBOVUxMOwogCQluYXR0cnMgPSAwOwpAQCAtNjk1LDYgKzc1OCw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBjdXJfY3B1X3NwZWMtPm51bV9wbWNzOyBpKyspCiAJCQlzeXNkZXZfcmVtb3ZlX2ZpbGUocywgJnBtY19hdHRyc1tpXSk7CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTU1DUkEpKQogCQlzeXNkZXZfcmVtb3ZlX2ZpbGUocywgJmF0dHJfbW1jcmEpOwogCkBAIC03MDYsNiArNzcwLDcgQEAKIAogCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9EU0NSKSkKIAkJc3lzZGV2X3JlbW92ZV9maWxlKHMsICZhdHRyX2RzY3IpOworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCiAJcmVtb3ZlX2NhY2hlX2luZm8ocyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKaW5kZXggODFjY2I4ZGQuLmY1ZGVmNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgotI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKaW5kZXggMjc1MGZiYS4uNDM0YzkyYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCkBAIC0xMjMyLDcgKzEyMzIsNyBAQAogCWVsc2UKIAkJdmlvZGV2LT5kZXYuYXJjaGRhdGEuZG1hX29wcyA9ICZkbWFfaW9tbXVfb3BzOwogCXZpb2Rldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gdmlvX2J1aWxkX2lvbW11X3RhYmxlKHZpb2Rldik7Ci0JdmlvZGV2LT5kZXYuYXJjaGRhdGEubnVtYV9ub2RlID0gb2Zfbm9kZV90b19uaWQob2Zfbm9kZSk7CisJc2V0X2Rldl9ub2RlKCZ2aW9kZXYtPmRldiwgb2Zfbm9kZV90b19uaWQob2Zfbm9kZSkpOwogCiAJLyogaW5pdCBnZW5lcmljICdzdHJ1Y3QgZGV2aWNlJyBmaWVsZHM6ICovCiAJdmlvZGV2LT5kZXYucGFyZW50ID0gJnZpb19idXNfZGV2aWNlLmRldjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA5ZjZjMWNhLi5iMzljMjdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xODcsNiArMTg3LDI0IEBACiAJCSooLm1hY2hpbmUuZGVzYykKIAkJX19tYWNoaW5lX2Rlc2NfZW5kID0gLiA7CiAJfQorCS4gPSBBTElHTig4KTsKKwkuZHluc3ltIDogQVQoQUREUiguZHluc3ltKSAtIExPQURfT0ZGU0VUKSB7ICooLmR5bnN5bSkgfQorCS5keW5zdHIgOiBBVChBRERSKC5keW5zdHIpIC0gTE9BRF9PRkZTRVQpIHsgKiguZHluc3RyKSB9CisJLmR5bmFtaWMgOiBBVChBRERSKC5keW5hbWljKSAtIExPQURfT0ZGU0VUKQorCXsKKwkJX19keW5hbWljX3N0YXJ0ID0gLjsKKwkJKiguZHluYW1pYykKKwl9CisJLmhhc2ggOiBBVChBRERSKC5oYXNoKSAtIExPQURfT0ZGU0VUKSB7ICooLmhhc2gpIH0KKwkuaW50ZXJwIDogQVQoQUREUiguaW50ZXJwKSAtIExPQURfT0ZGU0VUKSB7ICooLmludGVycCkgfQorCS5yZWxhLmR5biA6IEFUKEFERFIoLnJlbGEuZHluKSAtIExPQURfT0ZGU0VUKQorCXsKKwkJX19yZWxhX2R5bl9zdGFydCA9IC47CisJCSooLnJlbGEqKQorCX0KKworCS8qIEZha2UgRUxGIGhlYWRlciBjb250YWluaW5nIFJQQSBub3RlOyBmb3IgYWRkbm90ZSAqLworCS5mYWtlZWxmIDogQVQoQUREUiguZmFrZWVsZikgLSBMT0FEX09GRlNFVCkgeyAqKC5mYWtlZWxmKSB9CiAKIAkvKiBmcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCS4gPSBBTElHTihQQUdFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfdGxiLmMgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYwppbmRleCA1YTU2MDJkLi4yZTIyN2E0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rdm0uaD4KICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxhc20vbW11LTQ0eC5oPgpAQCAtMTA5LDcgKzExMCw2IEBACiAJcmV0dXJuIHRsYmUtPndvcmQyICYgKFBQQzQ0eF9UTEJfU1d8UFBDNDR4X1RMQl9VVyk7CiB9CiAKLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggbW1hcF9zZW0gbG9ja2VkIGZvciB3cml0aW5nLiAqLwogc3RhdGljIHZvaWQga3ZtcHBjXzQ0eF9zaGFkb3dfcmVsZWFzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmRleCkKIHsKQEAgLTEyNCw2ICsxMjQsMTEgQEAKIAl9CiB9CiAKK3ZvaWQga3ZtcHBjX3RsYmVfc2V0X21vZGlmaWVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IGkpCit7CisgICAgdmNwdS0+YXJjaC5zaGFkb3dfdGxiX21vZFtpXSA9IDE7Cit9CisKIC8qIENhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgZ3Vlc3QgVExCIGVudHJ5IGlzIHNhZmUgdG8gaW5zZXJ0IGludG8KICAqIHRoZSBzaGFkb3cgVExCLiAqLwogdm9pZCBrdm1wcGNfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndmFkZHIsIGdmbl90IGdmbiwgdTY0IGFzaWQsCkBAIC0xNDIsMTkgKzE0NywxNiBAQAogCXN0bGJlID0gJnZjcHUtPmFyY2guc2hhZG93X3RsYlt2aWN0aW1dOwogCiAJLyogR2V0IHJlZmVyZW5jZSB0byBuZXcgcGFnZS4gKi8KLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJbmV3X3BhZ2UgPSBnZm5fdG9fcGFnZSh2Y3B1LT5rdm0sIGdmbik7CiAJaWYgKGlzX2Vycm9yX3BhZ2UobmV3X3BhZ2UpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ2V0IGd1ZXN0IHBhZ2UgZm9yIGdmbiAlbHghXG4iLCBnZm4pOwogCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKG5ld19wYWdlKTsKLQkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAkJcmV0dXJuOwogCX0KIAlocGFkZHIgPSBwYWdlX3RvX3BoeXMobmV3X3BhZ2UpOwogCiAJLyogRHJvcCByZWZlcmVuY2UgdG8gb2xkIHBhZ2UuICovCiAJa3ZtcHBjXzQ0eF9zaGFkb3dfcmVsZWFzZSh2Y3B1LCB2aWN0aW0pOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAl2Y3B1LT5hcmNoLnNoYWRvd19wYWdlc1t2aWN0aW1dID0gbmV3X3BhZ2U7CiAKQEAgLTE2NCwyNyArMTY2LDMwIEBACiAKIAkvKiBYWFggd2hhdCBhYm91dCBBUz8gKi8KIAotCXN0bGJlLT50aWQgPSBhc2lkICYgMHhmZjsKKwlzdGxiZS0+dGlkID0gIShhc2lkICYgMHhmZik7CiAKIAkvKiBGb3JjZSBUUz0xIGZvciBhbGwgZ3Vlc3QgbWFwcGluZ3MuICovCiAJLyogRm9yIG5vdyB3ZSBoYXJkY29kZSA0S0IgbWFwcGluZ3MsIGJ1dCBpdCB3aWxsIGJlIGltcG9ydGFudCB0bwogCSAqIHVzZSBob3N0IGxhcmdlIHBhZ2VzIGluIHRoZSBmdXR1cmUuICovCiAJc3RsYmUtPndvcmQwID0gKGd2YWRkciAmIFBBR0VfTUFTSykgfCBQUEM0NHhfVExCX1ZBTElEIHwgUFBDNDR4X1RMQl9UUwogCSAgICAgICAgICAgICAgIHwgUFBDNDR4X1RMQl80SzsKLQogCXN0bGJlLT53b3JkMSA9IChocGFkZHIgJiAweGZmZmZmYzAwKSB8ICgoaHBhZGRyID4+IDMyKSAmIDB4Zik7CiAJc3RsYmUtPndvcmQyID0ga3ZtcHBjXzQ0eF90bGJfc2hhZG93X2F0dHJpYihmbGFncywKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjcHUtPmFyY2gubXNyICYgTVNSX1BSKTsKKwlrdm1wcGNfdGxiZV9zZXRfbW9kaWZpZWQodmNwdSwgdmljdGltKTsKKworCUtWTVRSQUNFXzVEKFNUTEJfV1JJVEUsIHZjcHUsIHZpY3RpbSwKKwkJCXN0bGJlLT50aWQsIHN0bGJlLT53b3JkMCwgc3RsYmUtPndvcmQxLCBzdGxiZS0+d29yZDIsCisJCQloYW5kbGVyKTsKIH0KIAogdm9pZCBrdm1wcGNfbW11X2ludmFsaWRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd2YV90IGVlbmQsIHUzMiBhc2lkKQogewotCXVuc2lnbmVkIGludCBwaWQgPSBhc2lkICYgMHhmZjsKKwl1bnNpZ25lZCBpbnQgcGlkID0gIShhc2lkICYgMHhmZik7CiAJaW50IGk7CiAKIAkvKiBYWFggUmVwbGFjZSBsb29wIHdpdGggZmFuY3kgZGF0YSBzdHJ1Y3R1cmVzLiAqLwotCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJZm9yIChpID0gMDsgaSA8PSB0bGJfNDR4X2h3YXRlcjsgaSsrKSB7CiAJCXN0cnVjdCB0bGJlICpzdGxiZSA9ICZ2Y3B1LT5hcmNoLnNoYWRvd190bGJbaV07CiAJCXVuc2lnbmVkIGludCB0aWQ7CkBAIC0yMDQsMjEgKzIwOSwzNSBAQAogCiAJCWt2bXBwY180NHhfc2hhZG93X3JlbGVhc2UodmNwdSwgaSk7CiAJCXN0bGJlLT53b3JkMCA9IDA7CisJCWt2bXBwY190bGJlX3NldF9tb2RpZmllZCh2Y3B1LCBpKTsKKwkJS1ZNVFJBQ0VfNUQoU1RMQl9JTlZBTCwgdmNwdSwgaSwKKwkJCQlzdGxiZS0+dGlkLCBzdGxiZS0+d29yZDAsIHN0bGJlLT53b3JkMSwKKwkJCQlzdGxiZS0+d29yZDIsIGhhbmRsZXIpOwogCX0KLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIH0KIAotLyogSW52YWxpZGF0ZSBhbGwgbWFwcGluZ3MsIHNvIHRoYXQgd2hlbiB0aGV5IGZhdWx0IGJhY2sgaW4gdGhleSB3aWxsIGdldCB0aGUKLSAqIHByb3BlciBwZXJtaXNzaW9uIGJpdHMuICovCisvKiBJbnZhbGlkYXRlIGFsbCBtYXBwaW5ncyBvbiB0aGUgcHJpdmlsZWdlIHN3aXRjaCBhZnRlciBQSUQgaGFzIGJlZW4gY2hhbmdlZC4KKyAqIFRoZSBndWVzdCBhbHdheXMgcnVucyB3aXRoIFBJRD0xLCBzbyB3ZSBtdXN0IGNsZWFyIHRoZSBlbnRpcmUgVExCIHdoZW4KKyAqIHN3aXRjaGluZyBhZGRyZXNzIHNwYWNlcy4gKi8KIHZvaWQga3ZtcHBjX21tdV9wcml2X3N3aXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB1c2VybW9kZSkKIHsKIAlpbnQgaTsKIAotCS8qIFhYWCBSZXBsYWNlIGxvb3Agd2l0aCBmYW5jeSBkYXRhIHN0cnVjdHVyZXMuICovCi0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlmb3IgKGkgPSAwOyBpIDw9IHRsYl80NHhfaHdhdGVyOyBpKyspIHsKLQkJa3ZtcHBjXzQ0eF9zaGFkb3dfcmVsZWFzZSh2Y3B1LCBpKTsKLQkJdmNwdS0+YXJjaC5zaGFkb3dfdGxiW2ldLndvcmQwID0gMDsKKwlpZiAodmNwdS0+YXJjaC5zd2FwX3BpZCkgeworCQkvKiBYWFggUmVwbGFjZSBsb29wIHdpdGggZmFuY3kgZGF0YSBzdHJ1Y3R1cmVzLiAqLworCQlmb3IgKGkgPSAwOyBpIDw9IHRsYl80NHhfaHdhdGVyOyBpKyspIHsKKwkJCXN0cnVjdCB0bGJlICpzdGxiZSA9ICZ2Y3B1LT5hcmNoLnNoYWRvd190bGJbaV07CisKKwkJCS8qIEZ1dHVyZSBvcHRpbWl6YXRpb246IGNsZWFyIG9ubHkgdXNlcnNwYWNlIG1hcHBpbmdzLiAqLworCQkJa3ZtcHBjXzQ0eF9zaGFkb3dfcmVsZWFzZSh2Y3B1LCBpKTsKKwkJCXN0bGJlLT53b3JkMCA9IDA7CisJCQlrdm1wcGNfdGxiZV9zZXRfbW9kaWZpZWQodmNwdSwgaSk7CisJCQlLVk1UUkFDRV81RChTVExCX0lOVkFMLCB2Y3B1LCBpLAorCQkJICAgICAgICAgICAgc3RsYmUtPnRpZCwgc3RsYmUtPndvcmQwLCBzdGxiZS0+d29yZDEsCisJCQkgICAgICAgICAgICBzdGxiZS0+d29yZDIsIGhhbmRsZXIpOworCQl9CisJCXZjcHUtPmFyY2guc3dhcF9waWQgPSAwOwogCX0KLQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCXZjcHUtPmFyY2guc2hhZG93X3BpZCA9ICF1c2VybW9kZTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwppbmRleCA2YjA3NjAxLi41M2FhYTY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCkBAIC0zNyw2ICszNywxNyBAQAogCSAgUHJvdmlkZXMgaG9zdCBzdXBwb3J0IGZvciBLVk0gb24gQm9vayBFIFBvd2VyUEMgcHJvY2Vzc29ycy4gQ3VycmVudGx5CiAJICB0aGlzIHdvcmtzIG9uIDQ0MCBwcm9jZXNzb3JzIG9ubHkuCiAKK2NvbmZpZyBLVk1fVFJBQ0UKKwlib29sICJLVk0gdHJhY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEtWTSAmJiBNQVJLRVJTICYmIFNZU0ZTCisJc2VsZWN0IFJFTEFZCisJc2VsZWN0IERFQlVHX0ZTCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHJlYWRpbmcgYSB0cmFjZSBvZiBrdm0tcmVsYXRlZCBldmVudHMgdGhyb3VnaAorCSAgcmVsYXlmcy4gIE5vdGUgdGhlIEFCSSBpcyBub3QgY29uc2lkZXJlZCBzdGFibGUgYW5kIHdpbGwgYmUKKwkgIG1vZGlmaWVkIGluIGZ1dHVyZSB1cGRhdGVzLgorCiBzb3VyY2UgZHJpdmVycy92aXJ0aW8vS2NvbmZpZwogCiBlbmRpZiAjIFZJUlRVQUxJWkFUSU9OCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQppbmRleCAwNGUzNDQ5Li4yYTVkNDM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKQEAgLTQsOSArNCwxMSBAQAogCiBFWFRSQV9DRkxBR1MgKz0gLUl2aXJ0L2t2bSAtSWFyY2gvcG93ZXJwYy9rdm0KIAotY29tbW9uLW9ianMgPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV9tYWluLm8gY29hbGVzY2VkX21taW8ubykKK2NvbW1vbi1vYmpzLXkgPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV9tYWluLm8gY29hbGVzY2VkX21taW8ubykKIAota3ZtLW9ianMgOj0gJChjb21tb24tb2JqcykgcG93ZXJwYy5vIGVtdWxhdGUubyBib29rZV9ndWVzdC5vCitjb21tb24tb2Jqcy0kKENPTkZJR19LVk1fVFJBQ0UpICArPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV90cmFjZS5vKQorCitrdm0tb2JqcyA6PSAkKGNvbW1vbi1vYmpzLXkpIHBvd2VycGMubyBlbXVsYXRlLm8gYm9va2VfZ3Vlc3Qubwogb2JqLSQoQ09ORklHX0tWTSkgKz0ga3ZtLm8KIAogQUZMQUdTX2Jvb2tlX2ludGVycnVwdHMubyA6PSAtSSQob2JqKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9ndWVzdC5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9ndWVzdC5jCmluZGV4IDljOGFkODUuLjdiMjU5MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfZ3Vlc3QuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2d1ZXN0LmMKQEAgLTQxMCw2ICs0MTAsMjEgQEAKIAkJYnJlYWs7CiAJfQogCisJY2FzZSBCT09LRV9JTlRFUlJVUFRfREVCVUc6IHsKKwkJdTMyIGRic3I7CisKKwkJdmNwdS0+YXJjaC5wYyA9IG1mc3ByKFNQUk5fQ1NSUjApOworCisJCS8qIGNsZWFyIElBQyBldmVudHMgaW4gREJTUiByZWdpc3RlciAqLworCQlkYnNyID0gbWZzcHIoU1BSTl9EQlNSKTsKKwkJZGJzciAmPSBEQlNSX0lBQzEgfCBEQlNSX0lBQzIgfCBEQlNSX0lBQzMgfCBEQlNSX0lBQzQ7CisJCW10c3ByKFNQUk5fREJTUiwgZGJzcik7CisKKwkJcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0RFQlVHOworCQlyID0gUkVTVU1FX0hPU1Q7CisJCWJyZWFrOworCX0KKwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VNRVJHICJleGl0X25yICVkXG4iLCBleGl0X25yKTsKIAkJQlVHKCk7CkBAIC00NzEsNiArNDg2LDggQEAKIAl2Y3B1LT5hcmNoLm1zciA9IDA7CiAJdmNwdS0+YXJjaC5ncHJbMV0gPSAoMTY8PDIwKSAtIDg7IC8qIC04IGZvciB0aGUgY2FsbGVlLXNhdmUgTFIgc2xvdCAqLwogCisJdmNwdS0+YXJjaC5zaGFkb3dfcGlkID0gMTsKKwogCS8qIEV5ZS1jYXRjaGluZyBudW1iZXIgc28gd2Uga25vdyBpZiB0aGUgZ3Vlc3QgdGFrZXMgYW4gaW50ZXJydXB0CiAJICogYmVmb3JlIGl0J3MgcHJvZ3JhbW1lZCBpdHMgb3duIElWUFIuICovCiAJdmNwdS0+YXJjaC5pdnByID0gMHg1NTU1MDAwMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfaW50ZXJydXB0cy5TIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKaW5kZXggM2I2NTNiNS4uOTVlMTY1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMKQEAgLTQyLDcgKzQyLDggQEAKICNkZWZpbmUgSE9TVF9TVEFDS19MUiAgIChIT1NUX1NUQUNLX1NJWkUgKyA0KSAvKiBJbiBjYWxsZXIgc3RhY2sgZnJhbWUuICovCiAKICNkZWZpbmUgTkVFRF9JTlNUX01BU0sgKCgxPDxCT09LRV9JTlRFUlJVUFRfUFJPR1JBTSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoMTw8Qk9PS0VfSU5URVJSVVBUX0RUTEJfTUlTUykpCisgICAgICAgICAgICAgICAgICAgICAgICAoMTw8Qk9PS0VfSU5URVJSVVBUX0RUTEJfTUlTUykgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoMTw8Qk9PS0VfSU5URVJSVVBUX0RFQlVHKSkKIAogI2RlZmluZSBORUVEX0RFQVJfTUFTSyAoKDE8PEJPT0tFX0lOVEVSUlVQVF9EQVRBX1NUT1JBR0UpIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgKDE8PEJPT0tFX0lOVEVSUlVQVF9EVExCX01JU1MpKQpAQCAtMzMxLDUwICszMzIsNTYgQEAKIAogCW1mc3ByCXIzLCBTUFJOX1BJRAogCXN0dwlyMywgVkNQVV9IT1NUX1BJRChyNCkKLQlsd3oJcjMsIFZDUFVfUElEKHI0KQorCWx3eglyMywgVkNQVV9TSEFET1dfUElEKHI0KQogCW10c3ByCVNQUk5fUElELCByMwogCi0JLyogUHJldmVudCBhbGwgVExCIHVwZGF0ZXMuICovCisJLyogUHJldmVudCBhbGwgYXN5bmNocm9ub3VzIFRMQiB1cGRhdGVzLiAqLwogCW1mbXNyCXI1CiAJbGlzCXI2LCAoTVNSX0VFfE1TUl9DRXxNU1JfTUV8TVNSX0RFKUBoCiAJb3JpCXI2LCByNiwgKE1TUl9FRXxNU1JfQ0V8TVNSX01FfE1TUl9ERSlAbAogCWFuZGMJcjYsIHI1LCByNgogCW10bXNyCXI2CiAKLQkvKiBTYXZlIHRoZSBob3N0J3Mgbm9uLXBpbm5lZCBUTEIgbWFwcGluZ3MsIGFuZCBsb2FkIHRoZSBndWVzdCBtYXBwaW5ncwotCSAqIG92ZXIgdGhlbS4gTGVhdmUgdGhlIGhvc3QncyAicGlubmVkIiBrZXJuZWwgbWFwcGluZ3MgaW4gcGxhY2UuICovCi0JLyogWFhYIG9wdGltaXphdGlvbjogdXNlIGdlbmVyYXRpb24gY291bnQgdG8gYXZvaWQgc3dhcHBpbmcgdW5tb2RpZmllZAotCSAqIGVudHJpZXMuICovCisJLyogTG9hZCB0aGUgZ3Vlc3QgbWFwcGluZ3MsIGxlYXZpbmcgdGhlIGhvc3QncyAicGlubmVkIiBrZXJuZWwgbWFwcGluZ3MKKwkgKiBpbiBwbGFjZS4gKi8KIAltZnNwcglyMTAsIFNQUk5fTU1VQ1IJCQkvKiBTYXZlIGhvc3QgTU1VQ1IuICovCi0JbGlzCXI4LCB0bGJfNDR4X2h3YXRlckBoYQotCWx3eglyOCwgdGxiXzQ0eF9od2F0ZXJAbChyOCkKLQlhZGRpCXIzLCByNCwgVkNQVV9IT1NUX1RMQiAtIDQKLQlhZGRpCXI5LCByNCwgVkNQVV9TSEFET1dfVExCIC0gNAorCWxpCXI1LCBQUEM0NHhfVExCX1NJWkUKKwlsaXMJcjUsIHRsYl80NHhfaHdhdGVyQGhhCisJbHd6CXI1LCB0bGJfNDR4X2h3YXRlckBsKHI1KQorCW10Y3RyCXI1CisJYWRkaQlyOSwgcjQsIFZDUFVfU0hBRE9XX1RMQgorCWFkZGkJcjUsIHI0LCBWQ1BVX1NIQURPV19NT0QKKwlsaQlyMywgMAorMToKKwlsYnp4CXI3LCByMywgcjUKKwljbXB3aQlyNywgMAorCWJlcQkzZgorCisJLyogTG9hZCBndWVzdCBlbnRyeS4gKi8KKwltdWxsaQlyMTEsIHIzLCBUTEJFX0JZVEVTCisJYWRkCXIxMSwgcjExLCByOQorCWx3eglyNywgMChyMTEpCisJbXRzcHIJU1BSTl9NTVVDUiwgcjcKKwlsd3oJcjcsIDQocjExKQorCXRsYndlCXI3LCByMywgUFBDNDR4X1RMQl9QQUdFSUQKKwlsd3oJcjcsIDgocjExKQorCXRsYndlCXI3LCByMywgUFBDNDR4X1RMQl9YTEFUCisJbHd6CXI3LCAxMihyMTEpCisJdGxid2UJcjcsIHIzLCBQUEM0NHhfVExCX0FUVFJJQgorMzoKKwlhZGRpCXIzLCByMywgMSAgICAgICAgICAgICAgICAgICAgICAgLyogSW5jcmVtZW50IGluZGV4LiAqLworCWJkbnoJMWIKKworCW10c3ByCVNQUk5fTU1VQ1IsIHIxMAkJCS8qIFJlc3RvcmUgaG9zdCBNTVVDUi4gKi8KKworCS8qIENsZWFyIGJpdG1hcCBvZiBtb2RpZmllZCBUTEIgZW50cmllcyAqLworCWxpCXI1LCBQUEM0NHhfVExCX1NJWkU+PjIKKwltdGN0cglyNQorCWFkZGkJcjUsIHI0LCBWQ1BVX1NIQURPV19NT0QgLSA0CiAJbGkJcjYsIDAKIDE6Ci0JLyogU2F2ZSBob3N0IGVudHJ5LiAqLwotCXRsYnJlCXI3LCByNiwgUFBDNDR4X1RMQl9QQUdFSUQKLQltZnNwcglyNSwgU1BSTl9NTVVDUgotCXN0d3UJcjUsIDQocjMpCi0Jc3R3dQlyNywgNChyMykKLQl0bGJyZQlyNywgcjYsIFBQQzQ0eF9UTEJfWExBVAotCXN0d3UJcjcsIDQocjMpCi0JdGxicmUJcjcsIHI2LCBQUEM0NHhfVExCX0FUVFJJQgotCXN0d3UJcjcsIDQocjMpCi0JLyogTG9hZCBndWVzdCBlbnRyeS4gKi8KLQlsd3p1CXI3LCA0KHI5KQotCW10c3ByCVNQUk5fTU1VQ1IsIHI3Ci0JbHd6dQlyNywgNChyOSkKLQl0bGJ3ZQlyNywgcjYsIFBQQzQ0eF9UTEJfUEFHRUlECi0JbHd6dQlyNywgNChyOSkKLQl0bGJ3ZQlyNywgcjYsIFBQQzQ0eF9UTEJfWExBVAotCWx3enUJcjcsIDQocjkpCi0JdGxid2UJcjcsIHI2LCBQUEM0NHhfVExCX0FUVFJJQgotCS8qIEluY3JlbWVudCBpbmRleC4gKi8KLQlhZGRpCXI2LCByNiwgMQotCWNtcHcJcjYsIHI4Ci0JYmx0CTFiCi0JbXRzcHIJU1BSTl9NTVVDUiwgcjEwCQkJLyogUmVzdG9yZSBob3N0IE1NVUNSLiAqLworCXN0d3UJcjYsIDQocjUpCisJYmRuegkxYgogCiAJaWNjY2kJMCwgMCAvKiBYWFggaGFjayAqLwogCkBAIC00MzEsNiArNDM4LDE0IEBACiAJb3JpcwlyMywgcjMsIEtWTVBQQ19NU1JfTUFTS0BoCiAJb3JpCXIzLCByMywgS1ZNUFBDX01TUl9NQVNLQGwKIAltdHNycjEJcjMKKworCS8qIENsZWFyIGFueSBkZWJ1ZyBldmVudHMgd2hpY2ggb2NjdXJyZWQgc2luY2Ugd2UgZGlzYWJsZWQgTVNSW0RFXS4KKwkgKiBYWFggVGhpcyBnaXZlcyB1cyBhIDMtaW5zdHJ1Y3Rpb24gd2luZG93IGluIHdoaWNoIGEgYnJlYWtwb2ludAorCSAqIGludGVuZGVkIGZvciBndWVzdCBjb250ZXh0IGNvdWxkIGZpcmUgaW4gdGhlIGhvc3QgaW5zdGVhZC4gKi8KKwlsaXMJcjMsIDB4ZmZmZgorCW9yaQlyMywgcjMsIDB4ZmZmZgorCW10c3ByCVNQUk5fREJTUiwgcjMKKwogCWx3eglyMywgVkNQVV9HUFIocjMpKHI0KQogCWx3eglyNCwgVkNQVV9HUFIocjQpKHI0KQogCXJmaQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwppbmRleCA4YzYwNWQwLi4wZmNlNGZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwpAQCAtMTcwLDYgKzE3MCwxMCBAQAogCQlrdm1wcGNfbW11X21hcCh2Y3B1LCBlYWRkciwgcmFkZHIgPj4gUEFHRV9TSElGVCwgYXNpZCwgZmxhZ3MpOwogCX0KIAorCUtWTVRSQUNFXzVEKEdUTEJfV1JJVEUsIHZjcHUsIGluZGV4LAorCQkJdGxiZS0+dGlkLCB0bGJlLT53b3JkMCwgdGxiZS0+d29yZDEsIHRsYmUtPndvcmQyLAorCQkJaGFuZGxlcik7CisKIAlyZXR1cm4gRU1VTEFURV9ET05FOwogfQogCkBAIC01MDQsNyArNTA4LDcgQEAKIAkJCWNhc2UgU1BSTl9NTVVDUjoKIAkJCQl2Y3B1LT5hcmNoLm1tdWNyID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKIAkJCWNhc2UgU1BSTl9QSUQ6Ci0JCQkJdmNwdS0+YXJjaC5waWQgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCQkJCWt2bXBwY19zZXRfcGlkKHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSk7IGJyZWFrOwogCQkJY2FzZSBTUFJOX0NDUjA6CiAJCQkJdmNwdS0+YXJjaC5jY3IwID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKIAkJCWNhc2UgU1BSTl9DQ1IxOgpAQCAtNzY1LDYgKzc2OSw4IEBACiAJCWJyZWFrOwogCX0KIAorCUtWTVRSQUNFXzNEKFBQQ19JTlNUUiwgdmNwdSwgaW5zdCwgdmNwdS0+YXJjaC5wYywgZW11bGF0ZWQsIGVudHJ5ZXhpdCk7CisKIAlpZiAoYWR2YW5jZSkKIAkJdmNwdS0+YXJjaC5wYyArPSA0OyAvKiBBZHZhbmNlIHBhc3QgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24uICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKaW5kZXggNTM4MjZhNS4uOTBhNmZjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKIAogZ2ZuX3QgdW5hbGlhc19nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCkBAIC0yMzksMTggKzI0MCwxMTQgQEAKIHsKIH0KIAorLyogTm90ZTogY2xlYXJpbmcgTVNSW0RFXSBqdXN0IG1lYW5zIHRoYXQgdGhlIGRlYnVnIGludGVycnVwdCB3aWxsIG5vdCBiZQorICogZGVsaXZlcmVkICppbW1lZGlhdGVseSouIEluc3RlYWQsIGl0IHNpbXBseSBzZXRzIHRoZSBhcHByb3ByaWF0ZSBEQlNSIGJpdHMuCisgKiBJZiB0aG9zZSBEQlNSIGJpdHMgYXJlIHN0aWxsIHNldCB3aGVuIE1TUltERV0gaXMgcmUtZW5hYmxlZCwgdGhlIGludGVycnVwdAorICogd2lsbCBiZSBkZWxpdmVyZWQgYXMgYW4gImltcHJlY2lzZSBkZWJ1ZyBldmVudCIgKHdoaWNoIGlzIGluZGljYXRlZCBieQorICogREJTUltJREVdLgorICovCitzdGF0aWMgdm9pZCBrdm1wcGNfZGlzYWJsZV9kZWJ1Z19pbnRlcnJ1cHRzKHZvaWQpCit7CisJbXRtc3IobWZtc3IoKSAmIH5NU1JfREUpOworfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfcmVzdG9yZV9ob3N0X2RlYnVnX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlrdm1wcGNfZGlzYWJsZV9kZWJ1Z19pbnRlcnJ1cHRzKCk7CisKKwltdHNwcihTUFJOX0lBQzEsIHZjcHUtPmFyY2guaG9zdF9pYWNbMF0pOworCW10c3ByKFNQUk5fSUFDMiwgdmNwdS0+YXJjaC5ob3N0X2lhY1sxXSk7CisJbXRzcHIoU1BSTl9JQUMzLCB2Y3B1LT5hcmNoLmhvc3RfaWFjWzJdKTsKKwltdHNwcihTUFJOX0lBQzQsIHZjcHUtPmFyY2guaG9zdF9pYWNbM10pOworCW10c3ByKFNQUk5fREJDUjEsIHZjcHUtPmFyY2guaG9zdF9kYmNyMSk7CisJbXRzcHIoU1BSTl9EQkNSMiwgdmNwdS0+YXJjaC5ob3N0X2RiY3IyKTsKKwltdHNwcihTUFJOX0RCQ1IwLCB2Y3B1LT5hcmNoLmhvc3RfZGJjcjApOworCW10bXNyKHZjcHUtPmFyY2guaG9zdF9tc3IpOworfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfbG9hZF9ndWVzdF9kZWJ1Z19yZWdpc3RlcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZyA9ICZ2Y3B1LT5ndWVzdF9kZWJ1ZzsKKwl1MzIgZGJjcjAgPSAwOworCisJdmNwdS0+YXJjaC5ob3N0X21zciA9IG1mbXNyKCk7CisJa3ZtcHBjX2Rpc2FibGVfZGVidWdfaW50ZXJydXB0cygpOworCisJLyogU2F2ZSBob3N0IGRlYnVnIHJlZ2lzdGVyIHN0YXRlLiAqLworCXZjcHUtPmFyY2guaG9zdF9pYWNbMF0gPSBtZnNwcihTUFJOX0lBQzEpOworCXZjcHUtPmFyY2guaG9zdF9pYWNbMV0gPSBtZnNwcihTUFJOX0lBQzIpOworCXZjcHUtPmFyY2guaG9zdF9pYWNbMl0gPSBtZnNwcihTUFJOX0lBQzMpOworCXZjcHUtPmFyY2guaG9zdF9pYWNbM10gPSBtZnNwcihTUFJOX0lBQzQpOworCXZjcHUtPmFyY2guaG9zdF9kYmNyMCA9IG1mc3ByKFNQUk5fREJDUjApOworCXZjcHUtPmFyY2guaG9zdF9kYmNyMSA9IG1mc3ByKFNQUk5fREJDUjEpOworCXZjcHUtPmFyY2guaG9zdF9kYmNyMiA9IG1mc3ByKFNQUk5fREJDUjIpOworCisJLyogc2V0IHJlZ2lzdGVycyB1cCBmb3IgZ3Vlc3QgKi8KKworCWlmIChkYmctPmJwWzBdKSB7CisJCW10c3ByKFNQUk5fSUFDMSwgZGJnLT5icFswXSk7CisJCWRiY3IwIHw9IERCQ1IwX0lBQzEgfCBEQkNSMF9JRE07CisJfQorCWlmIChkYmctPmJwWzFdKSB7CisJCW10c3ByKFNQUk5fSUFDMiwgZGJnLT5icFsxXSk7CisJCWRiY3IwIHw9IERCQ1IwX0lBQzIgfCBEQkNSMF9JRE07CisJfQorCWlmIChkYmctPmJwWzJdKSB7CisJCW10c3ByKFNQUk5fSUFDMywgZGJnLT5icFsyXSk7CisJCWRiY3IwIHw9IERCQ1IwX0lBQzMgfCBEQkNSMF9JRE07CisJfQorCWlmIChkYmctPmJwWzNdKSB7CisJCW10c3ByKFNQUk5fSUFDNCwgZGJnLT5icFszXSk7CisJCWRiY3IwIHw9IERCQ1IwX0lBQzQgfCBEQkNSMF9JRE07CisJfQorCisJbXRzcHIoU1BSTl9EQkNSMCwgZGJjcjApOworCW10c3ByKFNQUk5fREJDUjEsIDApOworCW10c3ByKFNQUk5fREJDUjIsIDApOworfQorCiB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiB7CisJaW50IGk7CisKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkKKwkJa3ZtcHBjX2xvYWRfZ3Vlc3RfZGVidWdfcmVnaXN0ZXJzKHZjcHUpOworCisJLyogTWFyayBldmVyeSBndWVzdCBlbnRyeSBpbiB0aGUgc2hhZG93IFRMQiBlbnRyeSBtb2RpZmllZCwgc28gdGhhdCB0aGV5CisJICogd2lsbCBhbGwgYmUgcmVsb2FkZWQgb24gdGhlIG5leHQgdmNwdSBydW4gKGluc3RlYWQgb2YgYmVpbmcKKwkgKiBkZW1hbmQtZmF1bHRlZCkuICovCisJZm9yIChpID0gMDsgaSA8PSB0bGJfNDR4X2h3YXRlcjsgaSsrKQorCQlrdm1wcGNfdGxiZV9zZXRfbW9kaWZpZWQodmNwdSwgaSk7CiB9CiAKIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogeworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQorCQlrdm1wcGNfcmVzdG9yZV9ob3N0X2RlYnVnX3N0YXRlKHZjcHUpOworCisJLyogRG9uJ3QgbGVhdmUgZ3Vlc3QgVExCIGVudHJpZXMgcmVzaWRlbnQgd2hlbiBiZWluZyBkZS1zY2hlZHVsZWQuICovCisJLyogWFhYIEl0IHdvdWxkIGJlIG5pY2UgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGhlYXZ5d2VpZ2h0IGV4aXQgYW5kCisJICogc2NoZWRfb3V0IGhlcmUsIHNpbmNlIHdlIGNvdWxkIGF2b2lkIHRoZSBUTEIgZmx1c2ggZm9yIGhlYXZ5d2VpZ2h0CisJICogZXhpdHMuICovCisJX3RsYmlhKCk7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKIHsKLQlyZXR1cm4gLUVOT1RTVVBQOworCWludCBpOworCisJdmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCA9IGRiZy0+ZW5hYmxlZDsKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkgeworCQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUodmNwdS0+Z3Vlc3RfZGVidWcuYnApOyBpKyspIHsKKwkJCWlmIChkYmctPmJyZWFrcG9pbnRzW2ldLmVuYWJsZWQpCisJCQkJdmNwdS0+Z3Vlc3RfZGVidWcuYnBbaV0gPSBkYmctPmJyZWFrcG9pbnRzW2ldLmFkZHJlc3M7CisJCQllbHNlCisJCQkJdmNwdS0+Z3Vlc3RfZGVidWcuYnBbaV0gPSAwOworCQl9CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bXBwY19jb21wbGV0ZV9kY3JfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMKaW5kZXggZjk4MzdmNC4uNzVmMzI2NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUGF1bCBNYWNrZXJyYXMsIElCTSBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcmsgTmVsc29uLCBJQk0gQ29ycC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtOCwxMTIgKzgsMTAwIEBACiAgKi8KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKworICAgICAgICAuc2VjdGlvbiAgICAgICAgIi50b2MiLCJhdyIKK1BQQzY0X0NBQ0hFUzoKKyAgICAgICAgLnRjICAgICAgICAgICAgIHBwYzY0X2NhY2hlc1tUQ10scHBjNjRfY2FjaGVzCisgICAgICAgIC5zZWN0aW9uICAgICAgICAiLnRleHQiCisKIAogX0dMT0JBTChjb3B5XzRLX3BhZ2UpCi0Jc3RkCXIzMSwtOCgxKQotCXN0ZAlyMzAsLTE2KDEpCi0Jc3RkCXIyOSwtMjQoMSkKLQlzdGQJcjI4LC0zMigxKQotCXN0ZAlyMjcsLTQwKDEpCi0Jc3RkCXIyNiwtNDgoMSkKLQlzdGQJcjI1LC01NigxKQotCXN0ZAlyMjQsLTY0KDEpCi0Jc3RkCXIyMywtNzIoMSkKLQlzdGQJcjIyLC04MCgxKQotCXN0ZAlyMjEsLTg4KDEpCi0Jc3RkCXIyMCwtOTYoMSkKLQlsaQlyNSw0MDk2LzMyIC0gMQorCWxpCXI1LDQwOTYJCS8qIDRLIHBhZ2Ugc2l6ZSAqLworQkVHSU5fRlRSX1NFQ1RJT04KKwlsZCAgICAgIHIxMCxQUEM2NF9DQUNIRVNAdG9jKHIyKQorCWx3eglyMTEsRENBQ0hFTDFMT0dMSU5FU0laRShyMTApCS8qIGxvZzIgb2YgY2FjaGUgbGluZSBzaXplICovCisJbHd6ICAgICByMTIsRENBQ0hFTDFMSU5FU0laRShyMTApCS8qIGdldCBjYWNoZSBsaW5lIHNpemUgKi8KKwlsaQlyOSwwCisJc3JkCXI4LHI1LHIxMQorCisJbXRjdHIJcjgKK3NldHVwOgorCWRjYnQJcjkscjQKKwlkY2J6CXI5LHIzCisJYWRkCXI5LHI5LHIxMgorCWJkbnoJc2V0dXAKK0VORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0NQX1VTRV9EQ0JUWikKIAlhZGRpCXIzLHIzLC04Ci0JbGkJcjEyLDUKLTA6CWFkZGkJcjUscjUsLTI0Ci0JbXRjdHIJcjEyCi0JbGQJcjIyLDY0MCg0KQotCWxkCXIyMSw1MTIoNCkKLQlsZAlyMjAsMzg0KDQpCi0JbGQJcjExLDI1Nig0KQotCWxkCXI5LDEyOCg0KQotCWxkCXI3LDAoNCkKLQlsZAlyMjUsNjQ4KDQpCi0JbGQJcjI0LDUyMCg0KQotCWxkCXIyMywzOTIoNCkKLQlsZAlyMTAsMjY0KDQpCi0JbGQJcjgsMTM2KDQpCi0JbGR1CXI2LDgoNCkKLQljbXB3aQlyNSwyNAotMToJc3RkCXIyMiw2NDgoMykKLQlzdGQJcjIxLDUyMCgzKQotCXN0ZAlyMjAsMzkyKDMpCi0Jc3RkCXIxMSwyNjQoMykKLQlzdGQJcjksMTM2KDMpCi0Jc3RkCXI3LDgoMykKLQlsZAlyMjgsNjQ4KDQpCi0JbGQJcjI3LDUyMCg0KQotCWxkCXIyNiwzOTIoNCkKLQlsZAlyMzEsMjY0KDQpCi0JbGQJcjMwLDEzNig0KQotCWxkCXIyOSw4KDQpCi0Jc3RkCXIyNSw2NTYoMykKLQlzdGQJcjI0LDUyOCgzKQotCXN0ZAlyMjMsNDAwKDMpCi0Jc3RkCXIxMCwyNzIoMykKLQlzdGQJcjgsMTQ0KDMpCi0Jc3RkCXI2LDE2KDMpCi0JbGQJcjIyLDY1Nig0KQotCWxkCXIyMSw1MjgoNCkKLQlsZAlyMjAsNDAwKDQpCi0JbGQJcjExLDI3Mig0KQotCWxkCXI5LDE0NCg0KQotCWxkCXI3LDE2KDQpCi0Jc3RkCXIyOCw2NjQoMykKLQlzdGQJcjI3LDUzNigzKQotCXN0ZAlyMjYsNDA4KDMpCi0Jc3RkCXIzMSwyODAoMykKLQlzdGQJcjMwLDE1MigzKQotCXN0ZHUJcjI5LDI0KDMpCi0JbGQJcjI1LDY2NCg0KQotCWxkCXIyNCw1MzYoNCkKLQlsZAlyMjMsNDA4KDQpCi0JbGQJcjEwLDI4MCg0KQotCWxkCXI4LDE1Mig0KQotCWxkdQlyNiwyNCg0KQorCXNyZGkgICAgcjgscjUsNwkJLyogcGFnZSBpcyBjb3BpZWQgaW4gMTI4IGJ5dGUgc3RyaWRlcyAqLworCWFkZGkJcjgscjgsLTEJLyogb25lIHN0cmlkZSBjb3BpZWQgb3V0c2lkZSBsb29wICovCisKKwltdGN0cglyOAorCisJbGQJcjUsMChyNCkKKwlsZAlyNiw4KHI0KQorCWxkCXI3LDE2KHI0KQorCWxkdQlyOCwyNChyNCkKKzE6CXN0ZAlyNSw4KHIzKQorCWxkCXI5LDgocjQpCisJc3RkCXI2LDE2KHIzKQorCWxkCXIxMCwxNihyNCkKKwlzdGQJcjcsMjQocjMpCisJbGQJcjExLDI0KHI0KQorCXN0ZAlyOCwzMihyMykKKwlsZAlyMTIsMzIocjQpCisJc3RkCXI5LDQwKHIzKQorCWxkCXI1LDQwKHI0KQorCXN0ZAlyMTAsNDgocjMpCisJbGQJcjYsNDgocjQpCisJc3RkCXIxMSw1NihyMykKKwlsZAlyNyw1NihyNCkKKwlzdGQJcjEyLDY0KHIzKQorCWxkCXI4LDY0KHI0KQorCXN0ZAlyNSw3MihyMykKKwlsZAlyOSw3MihyNCkKKwlzdGQJcjYsODAocjMpCisJbGQJcjEwLDgwKHI0KQorCXN0ZAlyNyw4OChyMykKKwlsZAlyMTEsODgocjQpCisJc3RkCXI4LDk2KHIzKQorCWxkCXIxMiw5NihyNCkKKwlzdGQJcjksMTA0KHIzKQorCWxkCXI1LDEwNChyNCkKKwlzdGQJcjEwLDExMihyMykKKwlsZAlyNiwxMTIocjQpCisJc3RkCXIxMSwxMjAocjMpCisJbGQJcjcsMTIwKHI0KQorCXN0ZHUJcjEyLDEyOChyMykKKwlsZHUJcjgsMTI4KHI0KQogCWJkbnoJMWIKLQlzdGQJcjIyLDY0OCgzKQotCXN0ZAlyMjEsNTIwKDMpCi0Jc3RkCXIyMCwzOTIoMykKLQlzdGQJcjExLDI2NCgzKQotCXN0ZAlyOSwxMzYoMykKLQlzdGQJcjcsOCgzKQotCWFkZGkJcjQscjQsNjQwCi0JYWRkaQlyMyxyMyw2NDgKLQliZ2UJMGIKLQltdGN0cglyNQotCWxkCXI3LDAoNCkKLQlsZAlyOCw4KDQpCi0JbGR1CXI5LDE2KDQpCi0zOglsZAlyMTAsOCg0KQotCXN0ZAlyNyw4KDMpCi0JbGQJcjcsMTYoNCkKLQlzdGQJcjgsMTYoMykKLQlsZAlyOCwyNCg0KQotCXN0ZAlyOSwyNCgzKQotCWxkdQlyOSwzMig0KQotCXN0ZHUJcjEwLDMyKDMpCi0JYmRuegkzYgotNDoJbGQJcjEwLDgoNCkKLQlzdGQJcjcsOCgzKQotCXN0ZAlyOCwxNigzKQotCXN0ZAlyOSwyNCgzKQotCXN0ZAlyMTAsMzIoMykKLTk6CWxkCXIyMCwtOTYoMSkKLQlsZAlyMjEsLTg4KDEpCi0JbGQJcjIyLC04MCgxKQotCWxkCXIyMywtNzIoMSkKLQlsZAlyMjQsLTY0KDEpCi0JbGQJcjI1LC01NigxKQotCWxkCXIyNiwtNDgoMSkKLQlsZAlyMjcsLTQwKDEpCi0JbGQJcjI4LC0zMigxKQotCWxkCXIyOSwtMjQoMSkKLQlsZAlyMzAsLTE2KDEpCi0JbGQJcjMxLC04KDEpCisKKwlzdGQJcjUsOChyMykKKwlsZAlyOSw4KHI0KQorCXN0ZAlyNiwxNihyMykKKwlsZAlyMTAsMTYocjQpCisJc3RkCXI3LDI0KHIzKQorCWxkCXIxMSwyNChyNCkKKwlzdGQJcjgsMzIocjMpCisJbGQJcjEyLDMyKHI0KQorCXN0ZAlyOSw0MChyMykKKwlsZAlyNSw0MChyNCkKKwlzdGQJcjEwLDQ4KHIzKQorCWxkCXI2LDQ4KHI0KQorCXN0ZAlyMTEsNTYocjMpCisJbGQJcjcsNTYocjQpCisJc3RkCXIxMiw2NChyMykKKwlsZAlyOCw2NChyNCkKKwlzdGQJcjUsNzIocjMpCisJbGQJcjksNzIocjQpCisJc3RkCXI2LDgwKHIzKQorCWxkCXIxMCw4MChyNCkKKwlzdGQJcjcsODgocjMpCisJbGQJcjExLDg4KHI0KQorCXN0ZAlyOCw5NihyMykKKwlsZAlyMTIsOTYocjQpCisJc3RkCXI5LDEwNChyMykKKwlzdGQJcjEwLDExMihyMykKKwlzdGQJcjExLDEyMChyMykKKwlzdGQJcjEyLDEyOChyMykKIAlibHIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvZG1hLW5vbmNvaGVyZW50LmMgYi9hcmNoL3Bvd2VycGMvbGliL2RtYS1ub25jb2hlcmVudC5jCmluZGV4IDVkODM5MDcuLjMxNzM0YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvZG1hLW5vbmNvaGVyZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9kbWEtbm9uY29oZXJlbnQuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJCS8qCiAJCSAqIFNldCB0aGUgImRtYSBoYW5kbGUiCiAJCSAqLwotCQkqaGFuZGxlID0gcGFnZV90b19idXMocGFnZSk7CisJCSpoYW5kbGUgPSBwYWdlX3RvX3BoeXMocGFnZSk7CiAKIAkJZG8gewogCQkJQlVHX09OKCFwdGVfbm9uZSgqcHRlKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvTWFrZWZpbGUKaW5kZXggMjliYzkxMi4uMDNhYTk4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9NYWtlZmlsZQpAQCAtNCwxMyArNCwxNCBAQAogb2JqLSQoQ09ORklHX01BVEhfRU1VTEFUSU9OKQkrPSBmYWJzLm8gZmFkZC5vIGZhZGRzLm8gZmNtcG8ubyBmY21wdS5vIFwKIAkJCQkJZmN0aXcubyBmY3Rpd3oubyBmZGl2Lm8gZmRpdnMubyBcCiAJCQkJCWZtYWRkLm8gZm1hZGRzLm8gZm1zdWIubyBmbXN1YnMubyBcCi0JCQkJCWZtdWwubyBmbXVscy5vIGZuYWJzLm8gZm5lZy5vIHR5cGVzLm8gXAorCQkJCQlmbXVsLm8gZm11bHMubyBmbmFicy5vIGZuZWcubyBcCiAJCQkJCWZubWFkZC5vIGZubWFkZHMubyBmbm1zdWIubyBmbm1zdWJzLm8gXAogCQkJCQlmcmVzLm8gZnJzcC5vIGZyc3FydGUubyBmc2VsLm8gbGZzLm8gXAogCQkJCQlmc3FydC5vCWZzcXJ0cy5vIGZzdWIubyBmc3Vicy5vIFwKIAkJCQkJbWNyZnMubyBtZmZzLm8gbXRmc2IwLm8gbXRmc2IxLm8gXAotCQkJCQltdGZzZi5vIG10ZnNmaS5vIHN0Zml3eC5vIHN0ZnMubyBcCi0JCQkJCXVkaXZtb2R0aTQubworCQkJCQltdGZzZi5vIG10ZnNmaS5vIHN0Zml3eC5vIHN0ZnMubwogCiBDRkxBR1NfZmFicy5vID0gLWZuby1idWlsdGluLWZhYnMKIENGTEFHU19tYXRoLm8gPSAtZm5vLWJ1aWx0aW4tZmFicworCitFWFRSQV9DRkxBR1MgPSAtSS4gLUlpbmNsdWRlL21hdGgtZW11IC13CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZG91YmxlLmggYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZG91YmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYmE4YjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2RvdWJsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0gKiBEZWZpbml0aW9ucyBmb3IgSUVFRSBEb3VibGUgUHJlY2lzaW9uCi0gKi8KLQotI2lmIF9GUF9XX1RZUEVfU0laRSA8IDMyCi0jZXJyb3IgIkhlcmUncyBhIG5pY2tlbCBraWQuICBHbyBidXkgeW91cnNlbGYgYSByZWFsIGNvbXB1dGVyLiIKLSNlbmRpZgotCi0jaWYgX0ZQX1dfVFlQRV9TSVpFIDwgNjQKLSNkZWZpbmUgX0ZQX0ZSQUNUQklUU19ECQkoMiAqIF9GUF9XX1RZUEVfU0laRSkKLSNlbHNlCi0jZGVmaW5lIF9GUF9GUkFDVEJJVFNfRAkJX0ZQX1dfVFlQRV9TSVpFCi0jZW5kaWYKLQotI2RlZmluZSBfRlBfRlJBQ0JJVFNfRAkJNTMKLSNkZWZpbmUgX0ZQX0ZSQUNYQklUU19ECQkoX0ZQX0ZSQUNUQklUU19EIC0gX0ZQX0ZSQUNCSVRTX0QpCi0jZGVmaW5lIF9GUF9XRlJBQ0JJVFNfRAkJKF9GUF9XT1JLQklUUyArIF9GUF9GUkFDQklUU19EKQotI2RlZmluZSBfRlBfV0ZSQUNYQklUU19ECShfRlBfRlJBQ1RCSVRTX0QgLSBfRlBfV0ZSQUNCSVRTX0QpCi0jZGVmaW5lIF9GUF9FWFBCSVRTX0QJCTExCi0jZGVmaW5lIF9GUF9FWFBCSUFTX0QJCTEwMjMKLSNkZWZpbmUgX0ZQX0VYUE1BWF9ECQkyMDQ3Ci0KLSNkZWZpbmUgX0ZQX1FOQU5CSVRfRAkJXAotCSgoX0ZQX1dfVFlQRSkxIDw8ICgoX0ZQX0ZSQUNCSVRTX0QtMikgJSBfRlBfV19UWVBFX1NJWkUpKQotI2RlZmluZSBfRlBfSU1QTEJJVF9ECQlcCi0JKChfRlBfV19UWVBFKTEgPDwgKChfRlBfRlJBQ0JJVFNfRC0xKSAlIF9GUF9XX1RZUEVfU0laRSkpCi0jZGVmaW5lIF9GUF9PVkVSRkxPV19ECQlcCi0JKChfRlBfV19UWVBFKTEgPDwgKF9GUF9XRlJBQ0JJVFNfRCAlIF9GUF9XX1RZUEVfU0laRSkpCi0KLSNpZiBfRlBfV19UWVBFX1NJWkUgPCA2NAotCi11bmlvbiBfRlBfVU5JT05fRAotewotICBkb3VibGUgZmx0OwotICBzdHJ1Y3QgewotI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KLSAgICB1bnNpZ25lZCBzaWduICA6IDE7Ci0gICAgdW5zaWduZWQgZXhwICAgOiBfRlBfRVhQQklUU19EOwotICAgIHVuc2lnbmVkIGZyYWMxIDogX0ZQX0ZSQUNCSVRTX0QgLSAoX0ZQX0lNUExCSVRfRCAhPSAwKSAtIF9GUF9XX1RZUEVfU0laRTsKLSAgICB1bnNpZ25lZCBmcmFjMCA6IF9GUF9XX1RZUEVfU0laRTsKLSNlbHNlCi0gICAgdW5zaWduZWQgZnJhYzAgOiBfRlBfV19UWVBFX1NJWkU7Ci0gICAgdW5zaWduZWQgZnJhYzEgOiBfRlBfRlJBQ0JJVFNfRCAtIChfRlBfSU1QTEJJVF9EICE9IDApIC0gX0ZQX1dfVFlQRV9TSVpFOwotICAgIHVuc2lnbmVkIGV4cCAgIDogX0ZQX0VYUEJJVFNfRDsKLSAgICB1bnNpZ25lZCBzaWduICA6IDE7Ci0jZW5kaWYKLSAgfSBiaXRzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotfTsKLQotI2RlZmluZSBGUF9ERUNMX0QoWCkJCV9GUF9ERUNMKDIsWCkKLSNkZWZpbmUgRlBfVU5QQUNLX1JBV19EKFgsdmFsKQlfRlBfVU5QQUNLX1JBV18yKEQsWCx2YWwpCi0jZGVmaW5lIEZQX1BBQ0tfUkFXX0QodmFsLFgpCV9GUF9QQUNLX1JBV18yKEQsdmFsLFgpCi0KLSNkZWZpbmUgRlBfVU5QQUNLX0QoWCx2YWwpCQlcCi0gIGRvIHsJCQkJCVwKLSAgICBfRlBfVU5QQUNLX1JBV18yKEQsWCx2YWwpOwkJXAotICAgIF9GUF9VTlBBQ0tfQ0FOT05JQ0FMKEQsMixYKTsJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZQX1BBQ0tfRCh2YWwsWCkJCVwKLSAgZG8gewkJCQkJXAotICAgIF9GUF9QQUNLX0NBTk9OSUNBTChELDIsWCk7CQlcCi0gICAgX0ZQX1BBQ0tfUkFXXzIoRCx2YWwsWCk7CQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRlBfTkVHX0QoUixYKQkJX0ZQX05FRyhELDIsUixYKQotI2RlZmluZSBGUF9BRERfRChSLFgsWSkJCV9GUF9BREQoRCwyLFIsWCxZKQotI2RlZmluZSBGUF9TVUJfRChSLFgsWSkJCV9GUF9TVUIoRCwyLFIsWCxZKQotI2RlZmluZSBGUF9NVUxfRChSLFgsWSkJCV9GUF9NVUwoRCwyLFIsWCxZKQotI2RlZmluZSBGUF9ESVZfRChSLFgsWSkJCV9GUF9ESVYoRCwyLFIsWCxZKQotI2RlZmluZSBGUF9TUVJUX0QoUixYKQkJX0ZQX1NRUlQoRCwyLFIsWCkKLQotI2RlZmluZSBGUF9DTVBfRChyLFgsWSx1bikJX0ZQX0NNUChELDIscixYLFksdW4pCi0jZGVmaW5lIEZQX0NNUF9FUV9EKHIsWCxZKQlfRlBfQ01QX0VRKEQsMixyLFgsWSkKLQotI2RlZmluZSBGUF9UT19JTlRfRChyLFgscnN6LHJzZykgIF9GUF9UT19JTlQoRCwyLHIsWCxyc3oscnNnKQotI2RlZmluZSBGUF9GUk9NX0lOVF9EKFgscixycyxydCkgIF9GUF9GUk9NX0lOVChELDIsWCxyLHJzLHJ0KQotCi0jZWxzZQotCi11bmlvbiBfRlBfVU5JT05fRAotewotICBkb3VibGUgZmx0OwotICBzdHJ1Y3QgewotI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KLSAgICB1bnNpZ25lZCBzaWduIDogMTsKLSAgICB1bnNpZ25lZCBleHAgIDogX0ZQX0VYUEJJVFNfRDsKLSAgICB1bnNpZ25lZCBsb25nIGZyYWMgOiBfRlBfRlJBQ0JJVFNfRCAtIChfRlBfSU1QTEJJVF9EICE9IDApOwotI2Vsc2UKLSAgICB1bnNpZ25lZCBsb25nIGZyYWMgOiBfRlBfRlJBQ0JJVFNfRCAtIChfRlBfSU1QTEJJVF9EICE9IDApOwotICAgIHVuc2lnbmVkIGV4cCAgOiBfRlBfRVhQQklUU19EOwotICAgIHVuc2lnbmVkIHNpZ24gOiAxOwotI2VuZGlmCi0gIH0gYml0cyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLX07Ci0KLSNkZWZpbmUgRlBfREVDTF9EKFgpCQlfRlBfREVDTCgxLFgpCi0jZGVmaW5lIEZQX1VOUEFDS19SQVdfRChYLHZhbCkJX0ZQX1VOUEFDS19SQVdfMShELFgsdmFsKQotI2RlZmluZSBGUF9QQUNLX1JBV19EKHZhbCxYKQlfRlBfUEFDS19SQVdfMShELHZhbCxYKQotCi0jZGVmaW5lIEZQX1VOUEFDS19EKFgsdmFsKQkJXAotICBkbyB7CQkJCQlcCi0gICAgX0ZQX1VOUEFDS19SQVdfMShELFgsdmFsKTsJCVwKLSAgICBfRlBfVU5QQUNLX0NBTk9OSUNBTChELDEsWCk7CVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBGUF9QQUNLX0QodmFsLFgpCQlcCi0gIGRvIHsJCQkJCVwKLSAgICBfRlBfUEFDS19DQU5PTklDQUwoRCwxLFgpOwkJXAotICAgIF9GUF9QQUNLX1JBV18xKEQsdmFsLFgpOwkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZQX05FR19EKFIsWCkJCV9GUF9ORUcoRCwxLFIsWCkKLSNkZWZpbmUgRlBfQUREX0QoUixYLFkpCQlfRlBfQUREKEQsMSxSLFgsWSkKLSNkZWZpbmUgRlBfU1VCX0QoUixYLFkpCQlfRlBfU1VCKEQsMSxSLFgsWSkKLSNkZWZpbmUgRlBfTVVMX0QoUixYLFkpCQlfRlBfTVVMKEQsMSxSLFgsWSkKLSNkZWZpbmUgRlBfRElWX0QoUixYLFkpCQlfRlBfRElWKEQsMSxSLFgsWSkKLSNkZWZpbmUgRlBfU1FSVF9EKFIsWCkJCV9GUF9TUVJUKEQsMSxSLFgpCi0KLS8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBfRlBfTVVMX0QgYW5kIF9GUF9ESVZfRCBzaG91bGQgYmUgY2hvc2VuIGJ5Ci0gICB0aGUgdGFyZ2V0IG1hY2hpbmUuICAqLwotCi0jZGVmaW5lIEZQX0NNUF9EKHIsWCxZLHVuKQlfRlBfQ01QKEQsMSxyLFgsWSx1bikKLSNkZWZpbmUgRlBfQ01QX0VRX0QocixYLFkpCV9GUF9DTVBfRVEoRCwxLHIsWCxZKQotCi0jZGVmaW5lIEZQX1RPX0lOVF9EKHIsWCxyc3oscnNnKSAgX0ZQX1RPX0lOVChELDEscixYLHJzeixyc2cpCi0jZGVmaW5lIEZQX0ZST01fSU5UX0QoWCxyLHJzLHJ0KSAgX0ZQX0ZST01fSU5UKEQsMSxYLHIscnMscnQpCi0KLSNlbmRpZiAvKiBXX1RZUEVfU0laRSA8IDY0ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZhZGQuYwppbmRleCA3YmVmYmJmLi4wNGQzYjRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWRkLmMKQEAgLTIsOCArMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmYWRkKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCkBAIC0xMSwyOCArMTIsMjggQEAKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CiAJcHJpbnRrKCJCOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEJfcywgQl9mMSwgQl9mMCwgQl9lLCBCX2MpOwogI2VuZGlmCiAKLQlpZiAoQV9zICE9IEJfcyAmJiBBX2MgPT0gRlBfQ0xTX0lORiAmJiBCX2MgPT0gRlBfQ0xTX0lORikKLQkJcmV0IHw9IEVGTEFHX1ZYSVNJOwotCiAJRlBfQUREX0QoUiwgQSwgQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRChmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRChmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZhZGRzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZHMuYwppbmRleCAyYjM0NmIzLi41OTMwZjQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZHMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZHMuYwpAQCAtMiw5ICsyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotI2luY2x1ZGUgInNpbmdsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KIAogaW50CiBmYWRkcyh2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCKQpAQCAtMTIsMjggKzEzLDI3IEBACiAJRlBfREVDTF9EKEEpOwogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoUik7Ci0JaW50IHJldCA9IDA7CisJRlBfREVDTF9FWDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwogCXByaW50aygiQjogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBCX3MsIEJfZjEsIEJfZjAsIEJfZSwgQl9jKTsKICNlbmRpZgogCi0JaWYgKEFfcyAhPSBCX3MgJiYgQV9jID09IEZQX0NMU19JTkYgJiYgQl9jID09IEZQX0NMU19JTkYpCi0JCXJldCB8PSBFRkxBR19WWElTSTsKLQogCUZQX0FERF9EKFIsIEEsIEIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkQ6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0RTKGZyRCwgUikpOworCV9fRlBfUEFDS19EUyhmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjbXBvLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmNtcG8uYwppbmRleCAzNmQ2ODkwLi5iNWRjNDQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmNtcG8uYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmNtcG8uYwpAQCAtMiwxNCArMiwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKIGludAogZmNtcG8odTMyICpjY3IsIGludCBjcmZELCB2b2lkICpmckEsIHZvaWQgKmZyQikKIHsKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOworCUZQX0RFQ0xfRVg7CiAJaW50IGNvZGVbNF0gPSB7ICgxIDw8IDMpLCAoMSA8PCAxKSwgKDEgPDwgMiksICgxIDw8IDApIH07CiAJbG9uZyBjbXA7CiAJaW50IHJldCA9IDA7CkBAIC0xOCw4ICsyMCw4IEBACiAJcHJpbnRrKCIlczogJXAgKCUwOHgpICVkICVwICVwXG4iLCBfX2Z1bmNfXywgY2NyLCAqY2NyLCBjcmZELCBmckEsIGZyQik7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY21wdS5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjbXB1LmMKaW5kZXggNTNkOTM4OS4uZDRmYjFiYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjbXB1LmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjbXB1LmMKQEAgLTIsMTQgKzIsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGZjbXB1KHUzMiAqY2NyLCBpbnQgY3JmRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCiB7CiAJRlBfREVDTF9EKEEpOwogCUZQX0RFQ0xfRChCKTsKKwlGUF9ERUNMX0VYOwogCWludCBjb2RlWzRdID0geyAoMSA8PCAzKSwgKDEgPDwgMSksICgxIDw8IDIpLCAoMSA8PCAwKSB9OwogCWxvbmcgY21wOwogCkBAIC0xNyw4ICsxOSw4IEBACiAJcHJpbnRrKCIlczogJXAgKCUwOHgpICVkICVwICVwXG4iLCBfX2Z1bmNfXywgY2NyLCAqY2NyLCBjcmZELCBmckEsIGZyQik7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY3Rpdy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjdGl3LmMKaW5kZXggZmNkN2E5NS4uZjY5NDQ0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjdGl3LmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjdGl3LmMKQEAgLTIsMTYgKzIsMTggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGZjdGl3KHUzMiAqZnJELCB2b2lkICpmckIpCiB7CiAJRlBfREVDTF9EKEIpOworCUZQX0RFQ0xfRVg7CiAJdW5zaWduZWQgaW50IHI7CiAKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAJRlBfVE9fSU5UX0QociwgQiwgMzIsIDEpOwogCWZyRFsxXSA9IHI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY3Rpd3ouYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY3Rpd3ouYwppbmRleCAxNTE0ZDU5Li43MWU3ODJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmN0aXd6LmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjdGl3ei5jCkBAIC0yLDEzICsyLDE1IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmY3Rpd3oodTMyICpmckQsIHZvaWQgKmZyQikKIHsKIAlGUF9ERUNMX0QoQik7CisJRlBfREVDTF9FWDsKIAl1MzIgZnBzY3I7CiAJdW5zaWduZWQgaW50IHI7CiAKQEAgLTE2LDcgKzE4LDcgQEAKIAlfX0ZQVV9GUFNDUiAmPSB+KDMpOwogCV9fRlBVX0ZQU0NSIHw9IEZQX1JORF9aRVJPOwogCi0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCUZQX1RPX0lOVF9EKHIsIEIsIDMyLCAxKTsKIAlmckRbMV0gPSByOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmRpdi5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZkaXYuYwppbmRleCAxOGEyMGZlLi4yZGIxNTA5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmRpdi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mZGl2LmMKQEAgLTIsOCArMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmZGl2KHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCkBAIC0xMSwxNCArMTIsMTUgQEAKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC00OSw1ICs1MSw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EKGZyRCwgUikpOworCV9fRlBfUEFDS19EKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmRpdnMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mZGl2cy5jCmluZGV4IDI0ZmVlZDYuLjc5N2Y2YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mZGl2cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mZGl2cy5jCkBAIC0yLDkgKzIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCiBpbnQKIGZkaXZzKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCkBAIC0xMiwxNCArMTMsMTUgQEAKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC01MSw1ICs1Myw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EUyhmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRFMoZnJELCBSKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbWFkZC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkLmMKaW5kZXggZGVkYjQ2NS4uOTI1MzEzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkLmMKQEAgLTIsOCArMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmbWFkZCh2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCLCB2b2lkICpmckMpCkBAIC0xMywxNSArMTQsMTYgQEAKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKEMpOwogCUZQX0RFQ0xfRChUKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7Ci0JX19GUF9VTlBBQ0tfRChDLCBmckMpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOworCUZQX1VOUEFDS19EUChDLCBmckMpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC00NCw1ICs0Niw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EKGZyRCwgUikpOworCV9fRlBfUEFDS19EKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1hZGRzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1hZGRzLmMKaW5kZXggNmJiYjU2ZC4uYWVhODBlZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbWFkZHMuYwpAQCAtMiw5ICsyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotI2luY2x1ZGUgInNpbmdsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KIAogaW50CiBmbWFkZHModm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQiwgdm9pZCAqZnJDKQpAQCAtMTQsMTUgKzE1LDE2IEBACiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChDKTsKIAlGUF9ERUNMX0QoVCk7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOwotCV9fRlBfVU5QQUNLX0QoQywgZnJDKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQywgZnJDKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpAQCAtNDUsNSArNDcsNyBAQAogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRFMoZnJELCBSKSk7CisJX19GUF9QQUNLX0RTKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1zdWIuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXN1Yi5jCmluZGV4IGYzMTFlMmMuLmE2NDRkNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXN1Yi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXN1Yi5jCkBAIC0yLDggKzIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKIGludAogZm1zdWIodm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQiwgdm9pZCAqZnJDKQpAQCAtMTMsMTUgKzE0LDE2IEBACiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChDKTsKIAlGUF9ERUNMX0QoVCk7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOwotCV9fRlBfVU5QQUNLX0QoQywgZnJDKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQywgZnJDKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpAQCAtNDcsNSArNDksNyBAQAogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRChmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRChmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Ztc3Vicy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Ztc3Vicy5jCmluZGV4IDgxYTcxNmQuLjJmZGVlYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXN1YnMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1zdWJzLmMKQEAgLTIsOSArMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLSNpbmNsdWRlICJzaW5nbGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc2luZ2xlLmg+CiAKIGludAogZm1zdWJzKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIsIHZvaWQgKmZyQykKQEAgLTE0LDE1ICsxNSwxNiBAQAogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoQyk7CiAJRlBfREVDTF9EKFQpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQiwgZnJDKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKLQlfX0ZQX1VOUEFDS19EKEMsIGZyQyk7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEMsIGZyQyk7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKQEAgLTQ4LDUgKzUwLDcgQEAKIAlwcmludGsoIkQ6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0RTKGZyRCwgUikpOworCV9fRlBfUEFDS19EUyhmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtdWwuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXVsLmMKaW5kZXggMmYzZDMyNy4uMzkxZmQxNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtdWwuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm11bC5jCkBAIC0yLDggKzIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKIGludAogZm11bCh2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCKQpAQCAtMTEsMTQgKzEyLDE1IEBACiAJRlBfREVDTF9EKEEpOwogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoUik7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZCkgWyUwOGx4LiUwOGx4ICVseF1cbiIsCkBAIC0zOCw1ICs0MCw3IEBACiAJICAgICAgIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MsIFJfZjEsIFJfZjAsIFJfZSArIDEwMjMpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EKGZyRCwgUikpOworCV9fRlBfUEFDS19EKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm11bHMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXVscy5jCmluZGV4IDk2MmI1ODguLjJkM2VjNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXVscy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXVscy5jCkBAIC0yLDkgKzIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCiBpbnQKIGZtdWxzKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCkBAIC0xMiwxNCArMTMsMTUgQEAKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKSBbJTA4bHguJTA4bHggJWx4XVxuIiwKQEAgLTM5LDUgKzQxLDcgQEAKIAkgICAgICAgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYywgUl9mMSwgUl9mMCwgUl9lICsgMTAyMyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0RTKGZyRCwgUikpOworCV9fRlBfUEFDS19EUyhmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubWFkZC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubWFkZC5jCmluZGV4IDhjZjc4MjcuLjI0OTdiODYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1hZGQuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tYWRkLmMKQEAgLTIsOCArMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmbm1hZGQodm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQiwgdm9pZCAqZnJDKQpAQCAtMTMsMTUgKzE0LDE2IEBACiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChDKTsKIAlGUF9ERUNMX0QoVCk7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOwotCV9fRlBfVU5QQUNLX0QoQywgZnJDKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQywgZnJDKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpAQCAtNDcsNSArNDksNyBAQAogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRChmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRChmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubWFkZHMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1hZGRzLmMKaW5kZXggZjFjNGYwZjAuLmVlOWQ3MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1hZGRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubWFkZHMuYwpAQCAtMiw5ICsyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotI2luY2x1ZGUgInNpbmdsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KIAogaW50CiBmbm1hZGRzKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIsIHZvaWQgKmZyQykKQEAgLTE0LDE1ICsxNSwxNiBAQAogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoQyk7CiAJRlBfREVDTF9EKFQpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQiwgZnJDKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKLQlfX0ZQX1VOUEFDS19EKEMsIGZyQyk7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEMsIGZyQyk7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKQEAgLTQ4LDUgKzUwLDcgQEAKIAlwcmludGsoIkQ6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0RTKGZyRCwgUikpOworCV9fRlBfUEFDS19EUyhmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubXN1Yi5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubXN1Yi5jCmluZGV4IDk4OTQ0ZTYuLjM4ODVhNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1zdWIuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tc3ViLmMKQEAgLTIsOCArMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmbm1zdWIodm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQiwgdm9pZCAqZnJDKQpAQCAtMTMsMTUgKzE0LDE2IEBACiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChDKTsKIAlGUF9ERUNMX0QoVCk7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOwotCV9fRlBfVU5QQUNLX0QoQywgZnJDKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQywgZnJDKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpAQCAtNTAsNSArNTIsNyBAQAogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRChmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRChmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubXN1YnMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1zdWJzLmMKaW5kZXggYjIwZjRlYi4uZjgzNWRmZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubXN1YnMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tc3Vicy5jCkBAIC0yLDkgKzIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCiBpbnQKIGZubXN1YnModm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQiwgdm9pZCAqZnJDKQpAQCAtMTQsMTUgKzE1LDE2IEBACiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChDKTsKIAlGUF9ERUNMX0QoVCk7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOwotCV9fRlBfVU5QQUNLX0QoQywgZnJDKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQywgZnJDKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpAQCAtNTEsNSArNTMsNyBAQAogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRFMoZnJELCBSKSk7CisJX19GUF9QQUNLX0RTKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnJzcC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Zyc3AuYwppbmRleCA3MjRjY2JjLi5kZGNjMTQ2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnJzcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mcnNwLmMKQEAgLTIsMjQgKzIsMjggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCiBpbnQKIGZyc3Aodm9pZCAqZnJELCB2b2lkICpmckIpCiB7CiAJRlBfREVDTF9EKEIpOworCUZQX0RFQ0xfRVg7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6IEQgJXAsIEIgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQik7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJCOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEJfcywgQl9mMSwgQl9mMCwgQl9lLCBCX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gX19GUF9QQUNLX0RTKGZyRCwgQik7CisJX19GUF9QQUNLX0RTKGZyRCwgQik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNlbC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzZWwuYwppbmRleCBlY2I1ZjI4Li4xYjBjMTQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNlbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc2VsLmMKQEAgLTIsMTkgKzIsMjEgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGZzZWwodTMyICpmckQsIHZvaWQgKmZyQSwgdTMyICpmckIsIHUzMiAqZnJDKQogewogCUZQX0RFQ0xfRChBKTsKKwlGUF9ERUNMX0VYOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzcXJ0LmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNxcnQuYwppbmRleCAzOGVjMmI3Li4zZTkwMDcyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNxcnQuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNxcnQuYwpAQCAtMiwyMSArMiwyMyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKIGludAogZnNxcnQodm9pZCAqZnJELCB2b2lkICpmckIpCiB7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJCKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkI6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQl9zLCBCX2YxLCBCX2YwLCBCX2UsIEJfYyk7CkBAIC0zMyw1ICszNSw3IEBACiAJcHJpbnRrKCJSOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EKGZyRCwgUikpOworCV9fRlBfUEFDS19EKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNxcnRzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNxcnRzLmMKaW5kZXggMzM1MjYzZS4uMjg0M2JlOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzcXJ0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3FydHMuYwpAQCAtMiwyMiArMiwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLSNpbmNsdWRlICJzaW5nbGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc2luZ2xlLmg+CiAKIGludAogZnNxcnRzKHZvaWQgKmZyRCwgdm9pZCAqZnJCKQogewogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoUik7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQik7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJCOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEJfcywgQl9mMSwgQl9mMCwgQl9lLCBCX2MpOwpAQCAtMzQsNSArMzYsNyBAQAogCXByaW50aygiUjogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRFMoZnJELCBSKSk7CisJX19GUF9QQUNLX0RTKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnN1Yi5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzdWIuYwppbmRleCAyMDhkMjBmLi43OGIwOTQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnN1Yi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3ViLmMKQEAgLTIsOCArMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmc3ViKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCkBAIC0xMSwxNCArMTIsMTUgQEAKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC0zNyw1ICszOSw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EKGZyRCwgUikpOworCV9fRlBfUEFDS19EKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnN1YnMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3Vicy5jCmluZGV4IDBlNjFiODAuLmQzYmY5MDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3Vicy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3Vicy5jCkBAIC0yLDkgKzIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCiBpbnQKIGZzdWJzKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCkBAIC0xMiwxNCArMTMsMTUgQEAKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC0zOCw1ICs0MCw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EUyhmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRFMoZnJELCBSKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9sZmQuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9sZmQuYwppbmRleCA2ZWM5MGI1Li43OWFjNzZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbGZkLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2xmZC5jCkBAIC0yLDggKzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNmcC1tYWNoaW5lLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKIGludAogbGZkKHZvaWQgKmZyRCwgdm9pZCAqZWEpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbGZzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbGZzLmMKaW5kZXggNmYxOGViZS4uNDM0ZWQyNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2xmcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9sZnMuYwpAQCAtMiwxNSArMiwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLSNpbmNsdWRlICJzaW5nbGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc2luZ2xlLmg+CiAKIGludAogbGZzKHZvaWQgKmZyRCwgdm9pZCAqZWEpCiB7CiAJRlBfREVDTF9EKFIpOwogCUZQX0RFQ0xfUyhBKTsKKwlGUF9ERUNMX0VYOwogCWZsb2F0IGY7CiAKICNpZmRlZiBERUJVRwpAQCAtMjAsNyArMjIsNyBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmZiwgZWEsIHNpemVvZihmbG9hdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCV9fRlBfVU5QQUNLX1MoQSwgJmYpOworCUZQX1VOUEFDS19TKEEsIGYpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWxkICglbGQpIFslMDhseF1cbiIsIEFfcywgQV9mLCBBX2UsIEFfYywKQEAgLTMzLDUgKzM1LDEyIEBACiAJcHJpbnRrKCJSOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gX19GUF9QQUNLX0QoZnJELCBSKTsKKwlpZiAoUl9jID09IEZQX0NMU19OQU4pIHsKKwkJUl9lID0gX0ZQX0VYUE1BWF9EOworCQlfRlBfUEFDS19SQVdfMl9QKEQsIGZyRCwgUik7CisJfSBlbHNlIHsKKwkJX19GUF9QQUNLX0QoZnJELCBSKTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tYXRoLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWF0aC5jCmluZGV4IDI5ZTU0NWUuLjE2NGQ1NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tYXRoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L21hdGguYwpAQCAtOCw4ICs4LDggQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KIAotI2luY2x1ZGUgInNmcC1tYWNoaW5lLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKICNkZWZpbmUgRkxPQVRGVU5DKHgpCWV4dGVybiBpbnQgeCh2b2lkICosIHZvaWQgKiwgdm9pZCAqLCB2b2lkICopCiAKQEAgLTE2OCw2ICsxNjgsOCBAQAogCQkJZnBzY3IgfD0gRlBTQ1JfWlg7CiAJCWlmIChlZmxhZyAmIEVGTEFHX0lORVhBQ1QpCiAJCQlmcHNjciB8PSBGUFNDUl9YWDsKKwkJaWYgKGVmbGFnICYgRUZMQUdfSU5WQUxJRCkKKwkJCWZwc2NyIHw9IEZQU0NSX1ZYOwogCQlpZiAoZWZsYWcgJiBFRkxBR19WWFNOQU4pCiAJCQlmcHNjciB8PSBGUFNDUl9WWFNOQU47CiAJCWlmIChlZmxhZyAmIEVGTEFHX1ZYSVNJKQpAQCAtMTg4LDcgKzE5MCw3IEBACiAJCQlmcHNjciB8PSBGUFNDUl9WWENWSTsKIAl9CiAKLQlmcHNjciAmPSB+KEZQU0NSX1ZYKTsKKy8vCWZwc2NyICY9IH4oRlBTQ1JfVlgpOwogCWlmIChmcHNjciAmIChGUFNDUl9WWFNOQU4gfCBGUFNDUl9WWElTSSB8IEZQU0NSX1ZYSURJIHwKIAkJICAgICBGUFNDUl9WWFpEWiB8IEZQU0NSX1ZYSU1aIHwgRlBTQ1JfVlhWQyB8CiAJCSAgICAgRlBTQ1JfVlhTT0ZUIHwgRlBTQ1JfVlhTUVJUIHwgRlBTQ1JfVlhDVkkpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L21jcmZzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWNyZnMuYwppbmRleCA0MWJhMjQ3Li5lOTQ4ZDU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWNyZnMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWNyZnMuYwpAQCAtMiw3ICsyLDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgogCiBpbnQKIG1jcmZzKHUzMiAqY2NyLCB1MzIgY3JmRCwgdTMyIGNyZlMpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWZmcy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L21mZnMuYwppbmRleCBiMGUyMTA2Li41NTI2Y2Y5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWZmcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tZmZzLmMKQEAgLTIsNyArMiw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KIAogaW50CiBtZmZzKHUzMiAqZnJEKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNiMC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNiMC5jCmluZGV4IGQzMDYyMzUuLmJjOTg1NTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzYjAuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2IwLmMKQEAgLTIsNyArMiw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KIAogaW50CiBtdGZzYjAoaW50IGNyYkQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2IxLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2IxLmMKaW5kZXggMmU5NDg3MC4uZmU2ZWQ1YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNiMS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzYjEuYwpAQCAtMiw3ICsyLDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgogCiBpbnQKIG10ZnNiMShpbnQgY3JiRCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzZi5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNmLmMKaW5kZXggNDgwMTRkOC4uZGJjZTkyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNmLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNmLmMKQEAgLTIsMTIgKzIsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgogCiBpbnQKIG10ZnNmKHVuc2lnbmVkIGludCBGTSwgdTMyICpmckIpCiB7CiAJdTMyIG1hc2s7CisJdTMyIGZwc2NyOwogCiAJaWYgKEZNID09IDApCiAJCXJldHVybiAwOwpAQCAtMzcsNiArMzksMjIgQEAKIAlfX0ZQVV9GUFNDUiAmPSB+KG1hc2spOwogCV9fRlBVX0ZQU0NSIHw9IChmckJbMV0gJiBtYXNrKTsKIAorCV9fRlBVX0ZQU0NSICY9IH4oRlBTQ1JfVlgpOworCWlmIChfX0ZQVV9GUFNDUiAmIChGUFNDUl9WWFNOQU4gfCBGUFNDUl9WWElTSSB8IEZQU0NSX1ZYSURJIHwKKwkJICAgICBGUFNDUl9WWFpEWiB8IEZQU0NSX1ZYSU1aIHwgRlBTQ1JfVlhWQyB8CisJCSAgICAgRlBTQ1JfVlhTT0ZUIHwgRlBTQ1JfVlhTUVJUIHwgRlBTQ1JfVlhDVkkpKQorCQlfX0ZQVV9GUFNDUiB8PSBGUFNDUl9WWDsKKworCWZwc2NyID0gX19GUFVfRlBTQ1I7CisJZnBzY3IgJj0gfihGUFNDUl9GRVgpOworCWlmICgoKGZwc2NyICYgRlBTQ1JfVlgpICYmIChmcHNjciAmIEZQU0NSX1ZFKSkgfHwKKwkgICAgKChmcHNjciAmIEZQU0NSX09YKSAmJiAoZnBzY3IgJiBGUFNDUl9PRSkpIHx8CisJICAgICgoZnBzY3IgJiBGUFNDUl9VWCkgJiYgKGZwc2NyICYgRlBTQ1JfVUUpKSB8fAorCSAgICAoKGZwc2NyICYgRlBTQ1JfWlgpICYmIChmcHNjciAmIEZQU0NSX1pFKSkgfHwKKwkgICAgKChmcHNjciAmIEZQU0NSX1hYKSAmJiAoZnBzY3IgJiBGUFNDUl9YRSkpKQorCQlmcHNjciB8PSBGUFNDUl9GRVg7CisJX19GUFVfRlBTQ1IgPSBmcHNjcjsKKwogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJTAyeCAlcDogJTA4bHhcbiIsIF9fZnVuY19fLCBGTSwgZnJCLCBfX0ZQVV9GUFNDUik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzZmkuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzZmkuYwppbmRleCAwMzFlMjAwLi5mZDJhY2MyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2ZpLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNmaS5jCkBAIC0yLDcgKzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CiAKIGludAogbXRmc2ZpKHVuc2lnbmVkIGludCBjcmZELCB1bnNpZ25lZCBpbnQgSU1NKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L29wLTEuaCBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9vcC0xLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MmZhOTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L29wLTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKgotICogQmFzaWMgb25lLXdvcmQgZnJhY3Rpb24gZGVjbGFyYXRpb24gYW5kIG1hbmlwdWxhdGlvbi4KLSAqLwotCi0jZGVmaW5lIF9GUF9GUkFDX0RFQ0xfMShYKQlfRlBfV19UWVBFIFgjI19mCi0jZGVmaW5lIF9GUF9GUkFDX0NPUFlfMShELFMpCShEIyNfZiA9IFMjI19mKQotI2RlZmluZSBfRlBfRlJBQ19TRVRfMShYLEkpCShYIyNfZiA9IEkpCi0jZGVmaW5lIF9GUF9GUkFDX0hJR0hfMShYKQkoWCMjX2YpCi0jZGVmaW5lIF9GUF9GUkFDX0xPV18xKFgpCShYIyNfZikKLSNkZWZpbmUgX0ZQX0ZSQUNfV09SRF8xKFgsdykJKFgjI19mKQotCi0jZGVmaW5lIF9GUF9GUkFDX0FERElfMShYLEkpCShYIyNfZiArPSBJKQotI2RlZmluZSBfRlBfRlJBQ19TTExfMShYLE4pCQkJXAotICBkbyB7CQkJCQkJXAotICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChOKSAmJiAoTikgPT0gMSkJXAotICAgICAgWCMjX2YgKz0gWCMjX2Y7CQkJCVwKLSAgICBlbHNlCQkJCQlcCi0gICAgICBYIyNfZiA8PD0gKE4pOwkJCQlcCi0gIH0gd2hpbGUgKDApCi0jZGVmaW5lIF9GUF9GUkFDX1NSTF8xKFgsTikJKFgjI19mID4+PSBOKQotCi0vKiBSaWdodCBzaGlmdCB3aXRoIHN0aWNreS1sc2IuICAqLwotI2RlZmluZSBfRlBfRlJBQ19TUlNfMShYLE4sc3opCV9fRlBfRlJBQ19TUlNfMShYIyNfZiwgTiwgc3opCi0KLSNkZWZpbmUgX19GUF9GUkFDX1NSU18xKFgsTixzeikJCQkJCQlcCi0gICAoWCA9IChYID4+IChOKSB8IChfX2J1aWx0aW5fY29uc3RhbnRfcChOKSAmJiAoTikgPT0gMQkJXAotCQkgICAgID8gWCAmIDEgOiAoWCA8PCAoX0ZQX1dfVFlQRV9TSVpFIC0gKE4pKSkgIT0gMCkpKQotCi0jZGVmaW5lIF9GUF9GUkFDX0FERF8xKFIsWCxZKQkoUiMjX2YgPSBYIyNfZiArIFkjI19mKQotI2RlZmluZSBfRlBfRlJBQ19TVUJfMShSLFgsWSkJKFIjI19mID0gWCMjX2YgLSBZIyNfZikKLSNkZWZpbmUgX0ZQX0ZSQUNfQ0xaXzEoeiwgWCkJX19GUF9DTFooeiwgWCMjX2YpCi0KLS8qIFByZWRpY2F0ZXMgKi8KLSNkZWZpbmUgX0ZQX0ZSQUNfTkVHUF8xKFgpCSgoX0ZQX1dTX1RZUEUpWCMjX2YgPCAwKQotI2RlZmluZSBfRlBfRlJBQ19aRVJPUF8xKFgpCShYIyNfZiA9PSAwKQotI2RlZmluZSBfRlBfRlJBQ19PVkVSUF8xKGZzLFgpCShYIyNfZiAmIF9GUF9PVkVSRkxPV18jI2ZzKQotI2RlZmluZSBfRlBfRlJBQ19FUV8xKFgsIFkpCShYIyNfZiA9PSBZIyNfZikKLSNkZWZpbmUgX0ZQX0ZSQUNfR0VfMShYLCBZKQkoWCMjX2YgPj0gWSMjX2YpCi0jZGVmaW5lIF9GUF9GUkFDX0dUXzEoWCwgWSkJKFgjI19mID4gWSMjX2YpCi0KLSNkZWZpbmUgX0ZQX1pFUk9GUkFDXzEJCTAKLSNkZWZpbmUgX0ZQX01JTkZSQUNfMQkJMQotCi0vKgotICogVW5wYWNrIHRoZSByYXcgYml0cyBvZiBhIG5hdGl2ZSBmcCB2YWx1ZS4gIERvIG5vdCBjbGFzc2lmeSBvcgotICogbm9ybWFsaXplIHRoZSBkYXRhLgotICovCi0KLSNkZWZpbmUgX0ZQX1VOUEFDS19SQVdfMShmcywgWCwgdmFsKQkJCQlcCi0gIGRvIHsJCQkJCQkJCVwKLSAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyBfZmxvOyBfZmxvLmZsdCA9ICh2YWwpOwkJXAotCQkJCQkJCQlcCi0gICAgWCMjX2YgPSBfZmxvLmJpdHMuZnJhYzsJCQkJCVwKLSAgICBYIyNfZSA9IF9mbG8uYml0cy5leHA7CQkJCQlcCi0gICAgWCMjX3MgPSBfZmxvLmJpdHMuc2lnbjsJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0vKgotICogUmVwYWNrIHRoZSByYXcgYml0cyBvZiBhIG5hdGl2ZSBmcCB2YWx1ZS4KLSAqLwotCi0jZGVmaW5lIF9GUF9QQUNLX1JBV18xKGZzLCB2YWwsIFgpCQkJCVwKLSAgZG8gewkJCQkJCQkJXAotICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzIF9mbG87CQkJCQlcCi0JCQkJCQkJCVwKLSAgICBfZmxvLmJpdHMuZnJhYyA9IFgjI19mOwkJCQkJXAotICAgIF9mbG8uYml0cy5leHAgID0gWCMjX2U7CQkJCQlcCi0gICAgX2Zsby5iaXRzLnNpZ24gPSBYIyNfczsJCQkJCVwKLQkJCQkJCQkJXAotICAgICh2YWwpID0gX2Zsby5mbHQ7CQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0KLS8qCi0gKiBNdWx0aXBsaWNhdGlvbiBhbGdvcml0aG1zOgotICovCi0KLS8qIEJhc2ljLiAgQXNzdW1pbmcgdGhlIGhvc3Qgd29yZCBzaXplIGlzID49IDIqRlJBQ0JJVFMsIHdlIGNhbiBkbyB0aGUKLSAgIG11bHRpcGxpY2F0aW9uIGltbWVkaWF0ZWx5LiAgKi8KLQotI2RlZmluZSBfRlBfTVVMX01FQVRfMV9pbW0oZnMsIFIsIFgsIFkpCQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgUiMjX2YgPSBYIyNfZiAqIFkjI19mOwkJCQkJCVwKLSAgICAvKiBOb3JtYWxpemUgc2luY2Ugd2Uga25vdyB3aGVyZSB0aGUgbXNiIG9mIHRoZSBtdWx0aXBsaWNhbmRzCVwKLSAgICAgICB3ZXJlIChiaXQgQiksIHdlIGtub3cgdGhhdCB0aGUgbXNiIG9mIHRoZSBvZiB0aGUgcHJvZHVjdCBpcwlcCi0gICAgICAgYXQgZWl0aGVyIDJCIG9yIDJCLTEuICAqLwkJCQkJXAotICAgIF9GUF9GUkFDX1NSU18xKFIsIF9GUF9XRlJBQ0JJVFNfIyNmcy0xLCAyKl9GUF9XRlJBQ0JJVFNfIyNmcyk7CVwKLSAgfSB3aGlsZSAoMCkKLQotLyogR2l2ZW4gYSAxVyAqIDFXID0+IDJXIHByaW1pdGl2ZSwgZG8gdGhlIGV4dGVuZGVkIG11bHRpcGxpY2F0aW9uLiAgKi8KLQotI2RlZmluZSBfRlBfTVVMX01FQVRfMV93aWRlKGZzLCBSLCBYLCBZLCBkb2l0KQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgX0ZQX1dfVFlQRSBfWl9mMCwgX1pfZjE7CQkJCQkJXAotICAgIGRvaXQoX1pfZjEsIF9aX2YwLCBYIyNfZiwgWSMjX2YpOwkJCQkJXAotICAgIC8qIE5vcm1hbGl6ZSBzaW5jZSB3ZSBrbm93IHdoZXJlIHRoZSBtc2Igb2YgdGhlIG11bHRpcGxpY2FuZHMJXAotICAgICAgIHdlcmUgKGJpdCBCKSwgd2Uga25vdyB0aGF0IHRoZSBtc2Igb2YgdGhlIG9mIHRoZSBwcm9kdWN0IGlzCVwKLSAgICAgICBhdCBlaXRoZXIgMkIgb3IgMkItMS4gICovCQkJCQlcCi0gICAgX0ZQX0ZSQUNfU1JTXzIoX1osIF9GUF9XRlJBQ0JJVFNfIyNmcy0xLCAyKl9GUF9XRlJBQ0JJVFNfIyNmcyk7CVwKLSAgICBSIyNfZiA9IF9aX2YwOwkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLS8qIEZpbmFsbHksIGEgc2ltcGxlIHdpZGVuaW5nIG11bHRpcGx5IGFsZ29yaXRobS4gIFdoYXQgZnVuISAgKi8KLQotI2RlZmluZSBfRlBfTVVMX01FQVRfMV9oYXJkKGZzLCBSLCBYLCBZKQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgX0ZQX1dfVFlQRSBfeGgsIF94bCwgX3loLCBfeWwsIF96X2YwLCBfel9mMSwgX2FfZjAsIF9hX2YxOwkJXAotCQkJCQkJCQkJXAotICAgIC8qIHNwbGl0IHRoZSB3b3JkcyBpbiBoYWxmICovCQkJCQlcCi0gICAgX3hoID0gWCMjX2YgPj4gKF9GUF9XX1RZUEVfU0laRS8yKTsJCQkJCVwKLSAgICBfeGwgPSBYIyNfZiAmICgoKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX1dfVFlQRV9TSVpFLzIpKSAtIDEpOwkJXAotICAgIF95aCA9IFkjI19mID4+IChfRlBfV19UWVBFX1NJWkUvMik7CQkJCQlcCi0gICAgX3lsID0gWSMjX2YgJiAoKChfRlBfV19UWVBFKTEgPDwgKF9GUF9XX1RZUEVfU0laRS8yKSkgLSAxKTsJCVwKLQkJCQkJCQkJCVwKLSAgICAvKiBtdWx0aXBseSB0aGUgcGllY2VzICovCQkJCQkJXAotICAgIF96X2YwID0gX3hsICogX3lsOwkJCQkJCQlcCi0gICAgX2FfZjAgPSBfeGggKiBfeWw7CQkJCQkJCVwKLSAgICBfYV9mMSA9IF94bCAqIF95aDsJCQkJCQkJXAotICAgIF96X2YxID0gX3hoICogX3loOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0gICAgLyogcmVhc3NlbWJsZSBpbnRvIHR3byBmdWxsIHdvcmRzICovCQkJCVwKLSAgICBpZiAoKF9hX2YwICs9IF9hX2YxKSA8IF9hX2YxKQkJCQkJXAotICAgICAgX3pfZjEgKz0gKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX1dfVFlQRV9TSVpFLzIpOwkJCVwKLSAgICBfYV9mMSA9IF9hX2YwID4+IChfRlBfV19UWVBFX1NJWkUvMik7CQkJCVwKLSAgICBfYV9mMCA9IF9hX2YwIDw8IChfRlBfV19UWVBFX1NJWkUvMik7CQkJCVwKLSAgICBfRlBfRlJBQ19BRERfMihfeiwgX3osIF9hKTsJCQkJCQlcCi0JCQkJCQkJCQlcCi0gICAgLyogbm9ybWFsaXplICovCQkJCQkJCVwKLSAgICBfRlBfRlJBQ19TUlNfMihfeiwgX0ZQX1dGUkFDQklUU18jI2ZzIC0gMSwgMipfRlBfV0ZSQUNCSVRTXyMjZnMpOwlcCi0gICAgUiMjX2YgPSBfel9mMDsJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0KLS8qCi0gKiBEaXZpc2lvbiBhbGdvcml0aG1zOgotICovCi0KLS8qIEJhc2ljLiAgQXNzdW1pbmcgdGhlIGhvc3Qgd29yZCBzaXplIGlzID49IDIqRlJBQ0JJVFMsIHdlIGNhbiBkbyB0aGUKLSAgIGRpdmlzaW9uIGltbWVkaWF0ZWx5LiAgR2l2ZSB0aGlzIG1hY3JvIGVpdGhlciBfRlBfRElWX0hFTFBfaW1tIGZvcgotICAgQyBwcmltaXRpdmVzIG9yIF9GUF9ESVZfSEVMUF9sZGl2IGZvciB0aGUgSVNPIGZ1bmN0aW9uLiAgV2hpY2ggeW91Ci0gICBjaG9vc2Ugd2lsbCBkZXBlbmQgb24gd2hhdCB0aGUgY29tcGlsZXIgZG9lcyB3aXRoIGRpdnJlbTQuICAqLwotCi0jZGVmaW5lIF9GUF9ESVZfTUVBVF8xX2ltbShmcywgUiwgWCwgWSwgZG9pdCkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgX0ZQX1dfVFlQRSBfcSwgX3I7CQkJCQlcCi0gICAgWCMjX2YgPDw9IChYIyNfZiA8IFkjI19mCQkJCVwKLQkgICAgICAgPyBSIyNfZS0tLCBfRlBfV0ZSQUNCSVRTXyMjZnMJCVwKLQkgICAgICAgOiBfRlBfV0ZSQUNCSVRTXyMjZnMgLSAxKTsJCVwKLSAgICBkb2l0KF9xLCBfciwgWCMjX2YsIFkjI19mKTsJCQkJXAotICAgIFIjI19mID0gX3EgfCAoX3IgIT0gMCk7CQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotLyogR0NDJ3MgbG9uZ2xvbmcuaCBkZWZpbmVzIGEgMlcgLyAxVyA9PiAoMVcsMVcpIHByaW1pdGl2ZSB1ZGl2X3Fybm5kCi0gICB0aGF0IG1heSBiZSB1c2VmdWwgaW4gdGhpcyBzaXR1YXRpb24uICBUaGlzIGZpcnN0IGlzIGZvciBhIHByaW1pdGl2ZQotICAgdGhhdCByZXF1aXJlcyBub3JtYWxpemF0aW9uLCB0aGUgc2Vjb25kIGZvciBvbmUgdGhhdCBkb2VzIG5vdC4gIExvb2sKLSAgIGZvciBVRElWX05FRURTX05PUk1BTElaQVRJT04gdG8gdGVsbCB3aGljaCB5b3VyIG1hY2hpbmUgbmVlZHMuICAqLwotCi0jZGVmaW5lIF9GUF9ESVZfTUVBVF8xX3VkaXZfbm9ybShmcywgUiwgWCwgWSkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIF9GUF9XX1RZUEUgX25oLCBfbmwsIF9xLCBfcjsJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICAvKiBOb3JtYWxpemUgWSAtLSBpLmUuIG1ha2UgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldC4gICovCVwKLSAgICBZIyNfZiA8PD0gX0ZQX1dGUkFDWEJJVFNfIyNmcyAtIDE7CQkJCQlcCi0JCQkJCQkJCQlcCi0gICAgLyogU2hpZnQgWCBvcCBjb3JyZXNwb25kaW5nbHkgaGlnaCwgdGhhdCBpcywgdXAgb25lIGZ1bGwgd29yZC4gICovCVwKLSAgICBpZiAoWCMjX2YgPD0gWSMjX2YpCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JX25sID0gMDsJCQkJCQkJXAotCV9uaCA9IFgjI19mOwkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JUiMjX2UrKzsJCQkJCQkJXAotCV9ubCA9IFgjI19mIDw8IChfRlBfV19UWVBFX1NJWkUtMSk7CQkJCVwKLQlfbmggPSBYIyNfZiA+PiAxOwkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgCQkJCQkJCQkJXAotICAgIHVkaXZfcXJubmQoX3EsIF9yLCBfbmgsIF9ubCwgWSMjX2YpOwkJCQlcCi0gICAgUiMjX2YgPSBfcSB8IChfciAhPSAwKTsJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX0ZQX0RJVl9NRUFUXzFfdWRpdihmcywgUiwgWCwgWSkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgX0ZQX1dfVFlQRSBfbmgsIF9ubCwgX3EsIF9yOwkJCVwKLSAgICBpZiAoWCMjX2YgPCBZIyNfZikJCQkJCVwKLSAgICAgIHsJCQkJCQkJXAotCVIjI19lLS07CQkJCQlcCi0JX25sID0gWCMjX2YgPDwgX0ZQX1dGUkFDQklUU18jI2ZzOwkJXAotCV9uaCA9IFgjI19mID4+IF9GUF9XRlJBQ1hCSVRTXyMjZnM7CQlcCi0gICAgICB9CQkJCQkJCVwKLSAgICBlbHNlCQkJCQkJXAotICAgICAgewkJCQkJCQlcCi0JX25sID0gWCMjX2YgPDwgKF9GUF9XRlJBQ0JJVFNfIyNmcyAtIDEpOwlcCi0JX25oID0gWCMjX2YgPj4gKF9GUF9XRlJBQ1hCSVRTXyMjZnMgKyAxKTsJXAotICAgICAgfQkJCQkJCQlcCi0gICAgdWRpdl9xcm5uZChfcSwgX3IsIF9uaCwgX25sLCBZIyNfZik7CQlcCi0gICAgUiMjX2YgPSBfcSB8IChfciAhPSAwKTsJCQkJXAotICB9IHdoaWxlICgwKQotCi0KLS8qCi0gKiBTcXVhcmUgcm9vdCBhbGdvcml0aG1zOgotICogV2UgaGF2ZSBqdXN0IG9uZSByaWdodCBub3csIG1heWJlIE5ld3RvbiBhcHByb3hpbWF0aW9uCi0gKiBzaG91bGQgYmUgYWRkZWQgZm9yIHRob3NlIG1hY2hpbmVzIHdoZXJlIGRpdmlzaW9uIGlzIGZhc3QuCi0gKi8KLQotI2RlZmluZSBfRlBfU1FSVF9NRUFUXzEoUiwgUywgVCwgWCwgcSkJCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIHdoaWxlIChxKQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJXAotICAgICAgICBUIyNfZiA9IFMjI19mICsgcTsJCQkJXAotICAgICAgICBpZiAoVCMjX2YgPD0gWCMjX2YpCQkJCVwKLSAgICAgICAgICB7CQkJCQkJXAotICAgICAgICAgICAgUyMjX2YgPSBUIyNfZiArIHE7CQkJCVwKLSAgICAgICAgICAgIFgjI19mIC09IFQjI19mOwkJCQlcCi0gICAgICAgICAgICBSIyNfZiArPSBxOwkJCQkJXAotICAgICAgICAgIH0JCQkJCQlcCi0gICAgICAgIF9GUF9GUkFDX1NMTF8xKFgsIDEpOwkJCQlcCi0gICAgICAgIHEgPj49IDE7CQkJCQlcCi0gICAgICB9CQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotLyoKLSAqIEFzc2VtYmx5L2Rpc2Fzc2VtYmx5IGZvciBjb252ZXJ0aW5nIHRvL2Zyb20gaW50ZWdyYWwgdHlwZXMuCi0gKiBObyBzaGlmdGluZyBvciBvdmVyZmxvdyBoYW5kbGVkIGhlcmUuCi0gKi8KLQotI2RlZmluZSBfRlBfRlJBQ19BU1NFTUJMRV8xKHIsIFgsIHJzaXplKQkociA9IFgjI19mKQotI2RlZmluZSBfRlBfRlJBQ19ESVNBU1NFTUJMRV8xKFgsIHIsIHJzaXplKQkoWCMjX2YgPSByKQotCi0KLS8qCi0gKiBDb252ZXJ0IEZQIHZhbHVlcyBiZXR3ZWVuIHdvcmQgc2l6ZXMKLSAqLwotCi0jZGVmaW5lIF9GUF9GUkFDX0NPTlZfMV8xKGRmcywgc2ZzLCBELCBTKQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgRCMjX2YgPSBTIyNfZjsJCQkJCQkJXAotICAgIGlmIChfRlBfV0ZSQUNCSVRTXyMjc2ZzID4gX0ZQX1dGUkFDQklUU18jI2RmcykJCQlcCi0gICAgICBfRlBfRlJBQ19TUlNfMShELCAoX0ZQX1dGUkFDQklUU18jI3Nmcy1fRlBfV0ZSQUNCSVRTXyMjZGZzKSwJXAotCQkgICAgIF9GUF9XRlJBQ0JJVFNfIyNzZnMpOwkJCQlcCi0gICAgZWxzZQkJCQkJCQkJXAotICAgICAgRCMjX2YgPDw9IF9GUF9XRlJBQ0JJVFNfIyNkZnMgLSBfRlBfV0ZSQUNCSVRTXyMjc2ZzOwkJXAotICB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L29wLTIuaCBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9vcC0yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNmYxN2MuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L29wLTIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQzNCArMCwwIEBACi0vKgotICogQmFzaWMgdHdvLXdvcmQgZnJhY3Rpb24gZGVjbGFyYXRpb24gYW5kIG1hbmlwdWxhdGlvbi4KLSAqLwotCi0jZGVmaW5lIF9GUF9GUkFDX0RFQ0xfMihYKQlfRlBfV19UWVBFIFgjI19mMCwgWCMjX2YxCi0jZGVmaW5lIF9GUF9GUkFDX0NPUFlfMihELFMpCShEIyNfZjAgPSBTIyNfZjAsIEQjI19mMSA9IFMjI19mMSkKLSNkZWZpbmUgX0ZQX0ZSQUNfU0VUXzIoWCxJKQlfX0ZQX0ZSQUNfU0VUXzIoWCwgSSkKLSNkZWZpbmUgX0ZQX0ZSQUNfSElHSF8yKFgpCShYIyNfZjEpCi0jZGVmaW5lIF9GUF9GUkFDX0xPV18yKFgpCShYIyNfZjApCi0jZGVmaW5lIF9GUF9GUkFDX1dPUkRfMihYLHcpCShYIyNfZiMjdykKLQotI2RlZmluZSBfRlBfRlJBQ19TTExfMihYLE4pCQkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIGlmICgoTikgPCBfRlBfV19UWVBFX1NJWkUpCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLSAgICAgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKE4pICYmIChOKSA9PSAxKSAJCQlcCi0gICAgICAgICAgewkJCQkJCQkJXAotICAgICAgICAgICAgWCMjX2YxID0gWCMjX2YxICsgWCMjX2YxICsgKCgoX0ZQX1dTX1RZUEUpKFgjI19mMCkpIDwgMCk7CVwKLSAgICAgICAgICAgIFgjI19mMCArPSBYIyNfZjA7CQkJCQkJXAotICAgICAgICAgIH0JCQkJCQkJCVwKLSAgICAgICAgZWxzZQkJCQkJCQkJXAotICAgICAgICAgIHsJCQkJCQkJCVwKLQkgICAgWCMjX2YxID0gWCMjX2YxIDw8IChOKSB8IFgjI19mMCA+PiAoX0ZQX1dfVFlQRV9TSVpFIC0gKE4pKTsJXAotCSAgICBYIyNfZjAgPDw9IChOKTsJCQkJCQlcCi0JICB9CQkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JWCMjX2YxID0gWCMjX2YwIDw8ICgoTikgLSBfRlBfV19UWVBFX1NJWkUpOwkJCVwKLQlYIyNfZjAgPSAwOwkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9GUF9GUkFDX1NSTF8yKFgsTikJCQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgaWYgKChOKSA8IF9GUF9XX1RZUEVfU0laRSkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCVgjI19mMCA9IFgjI19mMCA+PiAoTikgfCBYIyNfZjEgPDwgKF9GUF9XX1RZUEVfU0laRSAtIChOKSk7CVwKLQlYIyNfZjEgPj49IChOKTsJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCVgjI19mMCA9IFgjI19mMSA+PiAoKE4pIC0gX0ZQX1dfVFlQRV9TSVpFKTsJCQlcCi0JWCMjX2YxID0gMDsJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotLyogUmlnaHQgc2hpZnQgd2l0aCBzdGlja3ktbHNiLiAgKi8KLSNkZWZpbmUgX0ZQX0ZSQUNfU1JTXzIoWCxOLHN6KQkJCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBpZiAoKE4pIDwgX0ZQX1dfVFlQRV9TSVpFKQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JWCMjX2YwID0gKFgjI19mMSA8PCAoX0ZQX1dfVFlQRV9TSVpFIC0gKE4pKSB8IFgjI19mMCA+PiAoTikgfAlcCi0JCSAgKF9fYnVpbHRpbl9jb25zdGFudF9wKE4pICYmIChOKSA9PSAxCQkJXAotCQkgICA/IFgjI19mMCAmIDEJCQkJCQlcCi0JCSAgIDogKFgjI19mMCA8PCAoX0ZQX1dfVFlQRV9TSVpFIC0gKE4pKSkgIT0gMCkpOwlcCi0JWCMjX2YxID4+PSAoTik7CQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgZWxzZQkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlYIyNfZjAgPSAoWCMjX2YxID4+ICgoTikgLSBfRlBfV19UWVBFX1NJWkUpIHwJCQlcCi0JICAgICAgICAgICgoKFgjI19mMSA8PCAoMiAqIF9GUF9XX1RZUEVfU0laRSAtIChOKSkpIHwJCVwKLQkJICAgWCMjX2YwKSAhPSAwKSk7CQkJCQlcCi0JWCMjX2YxID0gMDsJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfRlBfRlJBQ19BRERJXzIoWCxJKSBcCi0gIF9fRlBfRlJBQ19BRERJXzIoWCMjX2YxLCBYIyNfZjAsIEkpCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQUREXzIoUixYLFkpIFwKLSAgX19GUF9GUkFDX0FERF8yKFIjI19mMSwgUiMjX2YwLCBYIyNfZjEsIFgjI19mMCwgWSMjX2YxLCBZIyNfZjApCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfU1VCXzIoUixYLFkpIFwKLSAgX19GUF9GUkFDX1NVQl8yKFIjI19mMSwgUiMjX2YwLCBYIyNfZjEsIFgjI19mMCwgWSMjX2YxLCBZIyNfZjApCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQ0xaXzIoUixYKQlcCi0gIGRvIHsJCQkJXAotICAgIGlmIChYIyNfZjEpCQkJXAotICAgICAgX19GUF9DTFooUixYIyNfZjEpOwlcCi0gICAgZWxzZSAJCQlcCi0gICAgewkJCQlcCi0gICAgICBfX0ZQX0NMWihSLFgjI19mMCk7CVwKLSAgICAgIFIgKz0gX0ZQX1dfVFlQRV9TSVpFOwlcCi0gICAgfQkJCQlcCi0gIH0gd2hpbGUoMCkKLQotLyogUHJlZGljYXRlcyAqLwotI2RlZmluZSBfRlBfRlJBQ19ORUdQXzIoWCkJKChfRlBfV1NfVFlQRSlYIyNfZjEgPCAwKQotI2RlZmluZSBfRlBfRlJBQ19aRVJPUF8yKFgpCSgoWCMjX2YxIHwgWCMjX2YwKSA9PSAwKQotI2RlZmluZSBfRlBfRlJBQ19PVkVSUF8yKGZzLFgpCShYIyNfZjEgJiBfRlBfT1ZFUkZMT1dfIyNmcykKLSNkZWZpbmUgX0ZQX0ZSQUNfRVFfMihYLCBZKQkoWCMjX2YxID09IFkjI19mMSAmJiBYIyNfZjAgPT0gWSMjX2YwKQotI2RlZmluZSBfRlBfRlJBQ19HVF8yKFgsIFkpCVwKLSAgKChYIyNfZjEgPiBZIyNfZjEpIHx8IChYIyNfZjEgPT0gWSMjX2YxICYmIFgjI19mMCA+IFkjI19mMCkpCi0jZGVmaW5lIF9GUF9GUkFDX0dFXzIoWCwgWSkJXAotICAoKFgjI19mMSA+IFkjI19mMSkgfHwgKFgjI19mMSA9PSBZIyNfZjEgJiYgWCMjX2YwID49IFkjI19mMCkpCi0KLSNkZWZpbmUgX0ZQX1pFUk9GUkFDXzIJCTAsIDAKLSNkZWZpbmUgX0ZQX01JTkZSQUNfMgkJMCwgMQotCi0vKgotICogSW50ZXJuYWxzCi0gKi8KLQotI2RlZmluZSBfX0ZQX0ZSQUNfU0VUXzIoWCxJMSxJMCkJKFgjI19mMCA9IEkwLCBYIyNfZjEgPSBJMSkKLQotI2RlZmluZSBfX0ZQX0NMWl8yKFIsIHhoLCB4bCkJXAotICBkbyB7CQkJCVwKLSAgICBpZiAoeGgpCQkJXAotICAgICAgX19GUF9DTFooUix4bCk7CQlcCi0gICAgZWxzZSAJCQlcCi0gICAgewkJCQlcCi0gICAgICBfX0ZQX0NMWihSLHhsKTsJCVwKLSAgICAgIFIgKz0gX0ZQX1dfVFlQRV9TSVpFOwlcCi0gICAgfQkJCQlcCi0gIH0gd2hpbGUoMCkKLQotI2lmIDAKLQotI2lmbmRlZiBfX0ZQX0ZSQUNfQURESV8yCi0jZGVmaW5lIF9fRlBfRlJBQ19BRERJXzIoeGgsIHhsLCBpKSBcCi0gICh4aCArPSAoKHhsICs9IGkpIDwgaSkpCi0jZW5kaWYKLSNpZm5kZWYgX19GUF9GUkFDX0FERF8yCi0jZGVmaW5lIF9fRlBfRlJBQ19BRERfMihyaCwgcmwsIHhoLCB4bCwgeWgsIHlsKSBcCi0gIChyaCA9IHhoICsgeWggKyAoKHJsID0geGwgKyB5bCkgPCB4bCkpCi0jZW5kaWYKLSNpZm5kZWYgX19GUF9GUkFDX1NVQl8yCi0jZGVmaW5lIF9fRlBfRlJBQ19TVUJfMihyaCwgcmwsIHhoLCB4bCwgeWgsIHlsKSBcCi0gIChyaCA9IHhoIC0geWggLSAoKHJsID0geGwgLSB5bCkgPiB4bCkpCi0jZW5kaWYKLQotI2Vsc2UKLQotI3VuZGVmIF9fRlBfRlJBQ19BRERJXzIKLSNkZWZpbmUgX19GUF9GUkFDX0FERElfMih4aCwgeGwsIGkpCWFkZF9zc2FhYWEoeGgsIHhsLCB4aCwgeGwsIDAsIGkpCi0jdW5kZWYgX19GUF9GUkFDX0FERF8yCi0jZGVmaW5lIF9fRlBfRlJBQ19BRERfMgkJCWFkZF9zc2FhYWEKLSN1bmRlZiBfX0ZQX0ZSQUNfU1VCXzIKLSNkZWZpbmUgX19GUF9GUkFDX1NVQl8yCQkJc3ViX2RkbW1zcwotCi0jZW5kaWYKLQotLyoKLSAqIFVucGFjayB0aGUgcmF3IGJpdHMgb2YgYSBuYXRpdmUgZnAgdmFsdWUuICBEbyBub3QgY2xhc3NpZnkgb3IKLSAqIG5vcm1hbGl6ZSB0aGUgZGF0YS4KLSAqLwotCi0jZGVmaW5lIF9GUF9VTlBBQ0tfUkFXXzIoZnMsIFgsIHZhbCkJCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzIF9mbG87IF9mbG8uZmx0ID0gKHZhbCk7CVwKLQkJCQkJCQlcCi0gICAgWCMjX2YwID0gX2Zsby5iaXRzLmZyYWMwOwkJCQlcCi0gICAgWCMjX2YxID0gX2Zsby5iaXRzLmZyYWMxOwkJCQlcCi0gICAgWCMjX2UgID0gX2Zsby5iaXRzLmV4cDsJCQkJXAotICAgIFgjI19zICA9IF9mbG8uYml0cy5zaWduOwkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotLyoKLSAqIFJlcGFjayB0aGUgcmF3IGJpdHMgb2YgYSBuYXRpdmUgZnAgdmFsdWUuCi0gKi8KLQotI2RlZmluZSBfRlBfUEFDS19SQVdfMihmcywgdmFsLCBYKQkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgX2ZsbzsJCQkJXAotCQkJCQkJCVwKLSAgICBfZmxvLmJpdHMuZnJhYzAgPSBYIyNfZjA7CQkJCVwKLSAgICBfZmxvLmJpdHMuZnJhYzEgPSBYIyNfZjE7CQkJCVwKLSAgICBfZmxvLmJpdHMuZXhwICAgPSBYIyNfZTsJCQkJXAotICAgIF9mbG8uYml0cy5zaWduICA9IFgjI19zOwkJCQlcCi0JCQkJCQkJXAotICAgICh2YWwpID0gX2Zsby5mbHQ7CQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotLyoKLSAqIE11bHRpcGxpY2F0aW9uIGFsZ29yaXRobXM6Ci0gKi8KLQotLyogR2l2ZW4gYSAxVyAqIDFXID0+IDJXIHByaW1pdGl2ZSwgZG8gdGhlIGV4dGVuZGVkIG11bHRpcGxpY2F0aW9uLiAgKi8KLQotI2RlZmluZSBfRlBfTVVMX01FQVRfMl93aWRlKGZzLCBSLCBYLCBZLCBkb2l0KQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgX0ZQX0ZSQUNfREVDTF80KF96KTsgX0ZQX0ZSQUNfREVDTF8yKF9iKTsgX0ZQX0ZSQUNfREVDTF8yKF9jKTsJXAotCQkJCQkJCQkJXAotICAgIGRvaXQoX0ZQX0ZSQUNfV09SRF80KF96LDEpLCBfRlBfRlJBQ19XT1JEXzQoX3osMCksIFgjI19mMCwgWSMjX2YwKTsgXAotICAgIGRvaXQoX2JfZjEsIF9iX2YwLCBYIyNfZjAsIFkjI19mMSk7CQkJCQlcCi0gICAgZG9pdChfY19mMSwgX2NfZjAsIFgjI19mMSwgWSMjX2YwKTsJCQkJCVwKLSAgICBkb2l0KF9GUF9GUkFDX1dPUkRfNChfeiwzKSwgX0ZQX0ZSQUNfV09SRF80KF96LDIpLCBYIyNfZjEsIFkjI19mMSk7IFwKLQkJCQkJCQkJCVwKLSAgICBfX0ZQX0ZSQUNfQUREXzQoX0ZQX0ZSQUNfV09SRF80KF96LDMpLF9GUF9GUkFDX1dPUkRfNChfeiwyKSwJXAotCQkgICAgX0ZQX0ZSQUNfV09SRF80KF96LDEpLF9GUF9GUkFDX1dPUkRfNChfeiwwKSwJXAotCQkgICAgMCwgX2JfZjEsIF9iX2YwLCAwLAkJCQkJXAotCQkgICAgX0ZQX0ZSQUNfV09SRF80KF96LDMpLF9GUF9GUkFDX1dPUkRfNChfeiwyKSwJXAotCQkgICAgX0ZQX0ZSQUNfV09SRF80KF96LDEpLF9GUF9GUkFDX1dPUkRfNChfeiwwKSk7CVwKLSAgICBfX0ZQX0ZSQUNfQUREXzQoX0ZQX0ZSQUNfV09SRF80KF96LDMpLF9GUF9GUkFDX1dPUkRfNChfeiwyKSwJXAotCQkgICAgX0ZQX0ZSQUNfV09SRF80KF96LDEpLF9GUF9GUkFDX1dPUkRfNChfeiwwKSwJXAotCQkgICAgMCwgX2NfZjEsIF9jX2YwLCAwLAkJCQkJXAotCQkgICAgX0ZQX0ZSQUNfV09SRF80KF96LDMpLF9GUF9GUkFDX1dPUkRfNChfeiwyKSwJXAotCQkgICAgX0ZQX0ZSQUNfV09SRF80KF96LDEpLF9GUF9GUkFDX1dPUkRfNChfeiwwKSk7CVwKLQkJCQkJCQkJCVwKLSAgICAvKiBOb3JtYWxpemUgc2luY2Ugd2Uga25vdyB3aGVyZSB0aGUgbXNiIG9mIHRoZSBtdWx0aXBsaWNhbmRzCVwKLSAgICAgICB3ZXJlIChiaXQgQiksIHdlIGtub3cgdGhhdCB0aGUgbXNiIG9mIHRoZSBvZiB0aGUgcHJvZHVjdCBpcwlcCi0gICAgICAgYXQgZWl0aGVyIDJCIG9yIDJCLTEuICAqLwkJCQkJXAotICAgIF9GUF9GUkFDX1NSU180KF96LCBfRlBfV0ZSQUNCSVRTXyMjZnMtMSwgMipfRlBfV0ZSQUNCSVRTXyMjZnMpOwlcCi0gICAgUiMjX2YwID0gX0ZQX0ZSQUNfV09SRF80KF96LDApOwkJCQkJXAotICAgIFIjI19mMSA9IF9GUF9GUkFDX1dPUkRfNChfeiwxKTsJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotLyogVGhpcyBuZXh0IG1hY3JvIGFwcGVhcnMgdG8gYmUgdG90YWxseSBicm9rZW4uIEZvcnR1bmF0ZWx5IG5vd2hlcmUKLSAqIHNlZW1zIHRvIHVzZSBpdCA6LT4gVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBkZWZpbmUgX3pbNF0gYnV0Ci0gKiB0aGVuIHVzZSBpdCBpbiBfRlBfRlJBQ19TUlNfNCwgd2hpY2ggd2lsbCBhdHRlbXB0IHRvIGFjY2VzcwotICogX3pfZltuXSB3aGljaCB3aWxsIGNhdXNlIGFuIGVycm9yLiBUaGUgZml4IHByb2JhYmx5IGludm9sdmVzCi0gKiBkZWNsYXJpbmcgaXQgd2l0aCBfRlBfRlJBQ19ERUNMXzQsIHNlZSBwcmV2aW91cyBtYWNyby4gLS0gUE1NIDAyLzE5OTgKLSAqLwotI2RlZmluZSBfRlBfTVVMX01FQVRfMl9nbXAoZnMsIFIsIFgsIFkpCQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgX0ZQX1dfVFlQRSBfeFsyXSwgX3lbMl0sIF96WzRdOwkJCQkJXAotICAgIF94WzBdID0gWCMjX2YwOyBfeFsxXSA9IFgjI19mMTsJCQkJCVwKLSAgICBfeVswXSA9IFkjI19mMDsgX3lbMV0gPSBZIyNfZjE7CQkJCQlcCi0JCQkJCQkJCQlcCi0gICAgbXBuX211bF9uKF96LCBfeCwgX3ksIDIpOwkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICAvKiBOb3JtYWxpemUgc2luY2Ugd2Uga25vdyB3aGVyZSB0aGUgbXNiIG9mIHRoZSBtdWx0aXBsaWNhbmRzCVwKLSAgICAgICB3ZXJlIChiaXQgQiksIHdlIGtub3cgdGhhdCB0aGUgbXNiIG9mIHRoZSBvZiB0aGUgcHJvZHVjdCBpcwlcCi0gICAgICAgYXQgZWl0aGVyIDJCIG9yIDJCLTEuICAqLwkJCQkJXAotICAgIF9GUF9GUkFDX1NSU180KF96LCBfRlBfV0ZSQUNCSVRTIyNfZnMtMSwgMipfRlBfV0ZSQUNCSVRTXyMjZnMpOwlcCi0gICAgUiMjX2YwID0gX3pbMF07CQkJCQkJCVwKLSAgICBSIyNfZjEgPSBfelsxXTsJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0KLS8qCi0gKiBEaXZpc2lvbiBhbGdvcml0aG1zOgotICogVGhpcyBzZWVtcyB0byBiZSBnaXZpbmcgbWUgZGlmZmljdWx0aWVzIC0tIFBNTQotICogTG9vaywgTmV0QlNEIHNlZW1zIHRvIGJlIGFibGUgdG8gY29tbWVudCBhbGdvcml0aG1zLiBDYW4ndCB5b3U/Ci0gKiBJJ3ZlIHRocm93biBwcmludGtzIGF0IHRoZSBwcm9ibGVtLgotICogVGhpcyBub3cgYXBwZWFycyB0byB3b3JrLCBidXQgSSBzdGlsbCBkb24ndCByZWFsbHkga25vdyB3aHkuCi0gKiBBbHNvLCBJIGRvbid0IHRoaW5rIHRoZSByZXN1bHQgaXMgcHJvcGVybHkgbm9ybWFsaXNlZC4uLgotICovCi0KLSNkZWZpbmUgX0ZQX0RJVl9NRUFUXzJfdWRpdl82NChmcywgUiwgWCwgWSkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIGV4dGVybiB2b2lkIF9mcF91ZGl2bW9kdGk0KF9GUF9XX1RZUEUgcVsyXSwgX0ZQX1dfVFlQRSByWzJdLAlcCi0JCQkgICAgICAgX0ZQX1dfVFlQRSBuMSwgX0ZQX1dfVFlQRSBuMCwJCVwKLQkJCSAgICAgICBfRlBfV19UWVBFIGQxLCBfRlBfV19UWVBFIGQwKTsJCVwKLSAgICBfRlBfV19UWVBFIF9uX2YzLCBfbl9mMiwgX25fZjEsIF9uX2YwLCBfcl9mMSwgX3JfZjA7CQlcCi0gICAgX0ZQX1dfVFlQRSBfcV9mMSwgX3FfZjAsIF9tX2YxLCBfbV9mMDsJCQkJXAotICAgIF9GUF9XX1RZUEUgX3JtZW1bMl0sIF9xbWVtWzJdOwkJCQkJXAotICAgIC8qIEkgdGhpbmsgdGhpcyBjaGVjayBpcyB0byBlbnN1cmUgdGhhdCB0aGUgcmVzdWx0IGlzIG5vcm1hbGlzZWQuICAgXAotICAgICAqIEFzc3VtaW5nIFgsWSBub3JtYWxpc2VkIChpZSBpbiBbMS4wLDIuMCkpIFgvWSB3aWxsIGJlIGluICAgICAgICAgXAotICAgICAqIFswLjUsMi4wKS4gRnVydGhlcm1vcmUsIGl0IHdpbGwgYmUgbGVzcyB0aGFuIDEuMCBpZmYgWCA8IFkuICAgICAgXAotICAgICAqIEluIHRoaXMgY2FzZSB3ZSB0d2VhayB0aGluZ3MuICh0aGlzIGlzIGJhc2VkIG9uIGNvbW1lbnRzIGluICAgICAgXAotICAgICAqIHRoZSBOZXRCU0QgRlBVIGVtdWxhdGlvbiBjb2RlLiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAqIFdlIGtub3cgWCxZIGFyZSBub3JtYWxpc2VkIGJlY2F1c2Ugd2UgZW5zdXJlIHRoaXMgYXMgcGFydCBvZiAgICAgXAotICAgICAqIHRoZSB1bnBhY2tpbmcgcHJvY2Vzcy4gLS0gUE1NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAqLwkJCQkJCQkJCVwKLSAgICBpZiAoX0ZQX0ZSQUNfR1RfMihYLCBZKSkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotLyoJUiMjX2UrKzsgKi8JCQkJCQkJXAotCV9uX2YzID0gWCMjX2YxID4+IDE7CQkJCQkJXAotCV9uX2YyID0gWCMjX2YxIDw8IChfRlBfV19UWVBFX1NJWkUgLSAxKSB8IFgjI19mMCA+PiAxOwkJXAotCV9uX2YxID0gWCMjX2YwIDw8IChfRlBfV19UWVBFX1NJWkUgLSAxKTsJCQlcCi0JX25fZjAgPSAwOwkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JUiMjX2UtLTsJCQkJCQkJXAotCV9uX2YzID0gWCMjX2YxOwkJCQkJCQlcCi0JX25fZjIgPSBYIyNfZjA7CQkJCQkJCVwKLQlfbl9mMSA9IF9uX2YwID0gMDsJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotICAgIC8qIE5vcm1hbGl6ZSwgaS5lLiBtYWtlIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgCQlcCi0gICAgICAgZGVub21pbmF0b3Igc2V0LiAgQ0hBTkdFRDogLSAxIHRvIG5vdGhpbmcgLS0gUE1NICovCQlcCi0gICAgX0ZQX0ZSQUNfU0xMXzIoWSwgX0ZQX1dGUkFDWEJJVFNfIyNmcyAvKiAtMSAqLyk7CQkJXAotCQkJCQkJCQkJXAotICAgIC8qIERvIHRoZSAyNTYvMTI4IGJpdCBkaXZpc2lvbiBnaXZlbiB0aGUgMTI4LWJpdCBfZnBfdWRpdm1vZHRmNCAJXAotICAgICAgIHByaW1pdGl2ZSBzbmFnZ2VkIGZyb20gbGliZ2NjMi5jLiAgKi8JCQkJXAotCQkJCQkJCQkJXAotICAgIF9mcF91ZGl2bW9kdGk0KF9xbWVtLCBfcm1lbSwgX25fZjMsIF9uX2YyLCAwLCBZIyNfZjEpOwkJXAotICAgIF9xX2YxID0gX3FtZW1bMF07CQkJCQkJCVwKLSAgICB1bXVsX3BwbW0oX21fZjEsIF9tX2YwLCBfcV9mMSwgWSMjX2YwKTsJCQkJXAotICAgIF9yX2YxID0gX3JtZW1bMF07CQkJCQkJCVwKLSAgICBfcl9mMCA9IF9uX2YxOwkJCQkJCQlcCi0gICAgaWYgKF9GUF9GUkFDX0dUXzIoX20sIF9yKSkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCV9xX2YxLS07CQkJCQkJCVwKLQlfRlBfRlJBQ19BRERfMihfciwgX3IsIFkpOwkJCQkJXAotCWlmIChfRlBfRlJBQ19HRV8yKF9yLCBZKSAmJiBfRlBfRlJBQ19HVF8yKF9tLCBfcikpCQlcCi0JICB7CQkJCQkJCQlcCi0JICAgIF9xX2YxLS07CQkJCQkJCVwKLQkgICAgX0ZQX0ZSQUNfQUREXzIoX3IsIF9yLCBZKTsJCQkJCVwKLQkgIH0JCQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgX0ZQX0ZSQUNfU1VCXzIoX3IsIF9yLCBfbSk7CQkJCQkJXAotCQkJCQkJCQkJXAotICAgIF9mcF91ZGl2bW9kdGk0KF9xbWVtLCBfcm1lbSwgX3JfZjEsIF9yX2YwLCAwLCBZIyNfZjEpOwkJXAotICAgIF9xX2YwID0gX3FtZW1bMF07CQkJCQkJCVwKLSAgICB1bXVsX3BwbW0oX21fZjEsIF9tX2YwLCBfcV9mMCwgWSMjX2YwKTsJCQkJXAotICAgIF9yX2YxID0gX3JtZW1bMF07CQkJCQkJCVwKLSAgICBfcl9mMCA9IF9uX2YwOwkJCQkJCQlcCi0gICAgaWYgKF9GUF9GUkFDX0dUXzIoX20sIF9yKSkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCV9xX2YwLS07CQkJCQkJCVwKLQlfRlBfRlJBQ19BRERfMihfciwgX3IsIFkpOwkJCQkJXAotCWlmIChfRlBfRlJBQ19HRV8yKF9yLCBZKSAmJiBfRlBfRlJBQ19HVF8yKF9tLCBfcikpCQlcCi0JICB7CQkJCQkJCQlcCi0JICAgIF9xX2YwLS07CQkJCQkJCVwKLQkgICAgX0ZQX0ZSQUNfQUREXzIoX3IsIF9yLCBZKTsJCQkJCVwKLQkgIH0JCQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgX0ZQX0ZSQUNfU1VCXzIoX3IsIF9yLCBfbSk7CQkJCQkJXAotCQkJCQkJCQkJXAotICAgIFIjI19mMSA9IF9xX2YxOwkJCQkJCQlcCi0gICAgUiMjX2YwID0gX3FfZjAgfCAoKF9yX2YxIHwgX3JfZjApICE9IDApOwkJCQlcCi0gICAgLyogYWRqdXN0IHNvIGFuc3dlciBpcyBub3JtYWxpemVkIGFnYWluLiBJJ20gbm90IHN1cmUgd2hhdCB0aGUgCVwKLSAgICAgKiBmaW5hbCBzeiBwYXJhbSBzaG91bGQgYmUuIEluIHByYWN0aWNlIGl0J3MgbmV2ZXIgdXNlZCBzaW5jZSAgICAgIFwKLSAgICAgKiBOIGlzIDEgd2hpY2ggaXMgYWx3YXlzIGdvaW5nIHRvIGJlIDwgX0ZQX1dfVFlQRV9TSVpFLi4uCQlcCi0gICAgICovCQkJCQkJCQkJXAotICAgIC8qIF9GUF9GUkFDX1NSU18yKFIsMSxfRlBfV0ZSQUNCSVRTXyMjZnMpOwkqLwkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0jZGVmaW5lIF9GUF9ESVZfTUVBVF8yX2dtcChmcywgUiwgWCwgWSkJCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBfRlBfV19UWVBFIF94WzRdLCBfeVsyXSwgX3pbNF07CQkJCQlcCi0gICAgX3lbMF0gPSBZIyNfZjA7IF95WzFdID0gWSMjX2YxOwkJCQkJXAotICAgIF94WzBdID0gX3hbM10gPSAwOwkJCQkJCQlcCi0gICAgaWYgKF9GUF9GUkFDX0dUXzIoWCwgWSkpCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlSIyNfZSsrOwkJCQkJCQlcCi0JX3hbMV0gPSAoWCMjX2YwIDw8IChfRlBfV0ZSQUNCSVRTLTEgLSBfRlBfV19UWVBFX1NJWkUpIHwJXAotCQkgWCMjX2YxID4+IChfRlBfV19UWVBFX1NJWkUgLQkJCQlcCi0JCQkgICAgKF9GUF9XRlJBQ0JJVFMtMSAtIF9GUF9XX1RZUEVfU0laRSkpKTsJXAotCV94WzJdID0gWCMjX2YxIDw8IChfRlBfV0ZSQUNCSVRTLTEgLSBfRlBfV19UWVBFX1NJWkUpOwkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCV94WzFdID0gKFgjI19mMCA8PCAoX0ZQX1dGUkFDQklUUyAtIF9GUF9XX1RZUEVfU0laRSkgfAkJXAotCQkgWCMjX2YxID4+IChfRlBfV19UWVBFX1NJWkUgLQkJCQlcCi0JCQkgICAgKF9GUF9XRlJBQ0JJVFMgLSBfRlBfV19UWVBFX1NJWkUpKSk7CVwKLQlfeFsyXSA9IFgjI19mMSA8PCAoX0ZQX1dGUkFDQklUUyAtIF9GUF9XX1RZUEVfU0laRSk7CQlcCi0gICAgICB9CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotICAgICh2b2lkKSBtcG5fZGl2cmVtIChfeiwgMCwgX3gsIDQsIF95LCAyKTsJCQkJXAotICAgIFIjI19mMSA9IF96WzFdOwkJCQkJCQlcCi0gICAgUiMjX2YwID0gX3pbMF0gfCAoKF94WzBdIHwgX3hbMV0pICE9IDApOwkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotLyoKLSAqIFNxdWFyZSByb290IGFsZ29yaXRobXM6Ci0gKiBXZSBoYXZlIGp1c3Qgb25lIHJpZ2h0IG5vdywgbWF5YmUgTmV3dG9uIGFwcHJveGltYXRpb24KLSAqIHNob3VsZCBiZSBhZGRlZCBmb3IgdGhvc2UgbWFjaGluZXMgd2hlcmUgZGl2aXNpb24gaXMgZmFzdC4KLSAqLwotCi0jZGVmaW5lIF9GUF9TUVJUX01FQVRfMihSLCBTLCBULCBYLCBxKQkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgd2hpbGUgKHEpCQkJCQkJXAotICAgICAgewkJCQkJCQlcCi0gICAgICAgIFQjI19mMSA9IFMjI19mMSArIHE7CQkJCVwKLSAgICAgICAgaWYgKFQjI19mMSA8PSBYIyNfZjEpCQkJCVwKLSAgICAgICAgICB7CQkJCQkJXAotICAgICAgICAgICAgUyMjX2YxID0gVCMjX2YxICsgcTsJCQlcCi0gICAgICAgICAgICBYIyNfZjEgLT0gVCMjX2YxOwkJCQlcCi0gICAgICAgICAgICBSIyNfZjEgKz0gcTsJCQkJXAotICAgICAgICAgIH0JCQkJCQlcCi0gICAgICAgIF9GUF9GUkFDX1NMTF8yKFgsIDEpOwkJCQlcCi0gICAgICAgIHEgPj49IDE7CQkJCQlcCi0gICAgICB9CQkJCQkJCVwKLSAgICBxID0gKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX1dfVFlQRV9TSVpFIC0gMSk7CQlcCi0gICAgd2hpbGUgKHEpCQkJCQkJXAotICAgICAgewkJCQkJCQlcCi0gICAgICAgIFQjI19mMCA9IFMjI19mMCArIHE7CQkJCVwKLSAgICAgICAgVCMjX2YxID0gUyMjX2YxOwkJCQlcCi0gICAgICAgIGlmIChUIyNfZjEgPCBYIyNfZjEgfHwgCQkJCVwKLSAgICAgICAgICAgIChUIyNfZjEgPT0gWCMjX2YxICYmIFQjI19mMCA8IFgjI19mMCkpCVwKLSAgICAgICAgICB7CQkJCQkJXAotICAgICAgICAgICAgUyMjX2YwID0gVCMjX2YwICsgcTsJCQlcCi0gICAgICAgICAgICBpZiAoKChfRlBfV1NfVFlQRSlUIyNfZjApIDwgMCAmJgkJXAotICAgICAgICAgICAgICAgICgoX0ZQX1dTX1RZUEUpUyMjX2YwKSA+PSAwKQkJXAotICAgICAgICAgICAgICBTIyNfZjErKzsJCQkJCVwKLSAgICAgICAgICAgIF9GUF9GUkFDX1NVQl8yKFgsIFgsIFQpOwkJCVwKLSAgICAgICAgICAgIFIjI19mMCArPSBxOwkJCQlcCi0gICAgICAgICAgfQkJCQkJCVwKLSAgICAgICAgX0ZQX0ZSQUNfU0xMXzIoWCwgMSk7CQkJCVwKLSAgICAgICAgcSA+Pj0gMTsJCQkJCVwKLSAgICAgIH0JCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0KLS8qCi0gKiBBc3NlbWJseS9kaXNhc3NlbWJseSBmb3IgY29udmVydGluZyB0by9mcm9tIGludGVncmFsIHR5cGVzLgotICogTm8gc2hpZnRpbmcgb3Igb3ZlcmZsb3cgaGFuZGxlZCBoZXJlLgotICovCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQVNTRU1CTEVfMihyLCBYLCByc2l6ZSkJXAotICBkbyB7CQkJCQkJXAotICAgIGlmIChyc2l6ZSA8PSBfRlBfV19UWVBFX1NJWkUpCQlcCi0gICAgICByID0gWCMjX2YwOwkJCQlcCi0gICAgZWxzZQkJCQkJXAotICAgICAgewkJCQkJCVwKLQlyID0gWCMjX2YxOwkJCQlcCi0JciA8PD0gX0ZQX1dfVFlQRV9TSVpFOwkJCVwKLQlyICs9IFgjI19mMDsJCQkJXAotICAgICAgfQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfRlBfRlJBQ19ESVNBU1NFTUJMRV8yKFgsIHIsIHJzaXplKQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgWCMjX2YwID0gcjsJCQkJCQkJCVwKLSAgICBYIyNfZjEgPSAocnNpemUgPD0gX0ZQX1dfVFlQRV9TSVpFID8gMCA6IHIgPj4gX0ZQX1dfVFlQRV9TSVpFKTsJXAotICB9IHdoaWxlICgwKQotCi0vKgotICogQ29udmVydCBGUCB2YWx1ZXMgYmV0d2VlbiB3b3JkIHNpemVzCi0gKi8KLQotI2RlZmluZSBfRlBfRlJBQ19DT05WXzFfMihkZnMsIHNmcywgRCwgUykJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIF9GUF9GUkFDX1NSU18yKFMsIChfRlBfV0ZSQUNCSVRTXyMjc2ZzIC0gX0ZQX1dGUkFDQklUU18jI2RmcyksCVwKLQkJICAgX0ZQX1dGUkFDQklUU18jI3Nmcyk7CQkJCVwKLSAgICBEIyNfZiA9IFMjI19mMDsJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9GUF9GUkFDX0NPTlZfMl8xKGRmcywgc2ZzLCBELCBTKQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgRCMjX2YwID0gUyMjX2Y7CQkJCQkJCVwKLSAgICBEIyNfZjEgPSAwOwkJCQkJCQkJXAotICAgIF9GUF9GUkFDX1NMTF8yKEQsIChfRlBfV0ZSQUNCSVRTXyMjZGZzIC0gX0ZQX1dGUkFDQklUU18jI3NmcykpOwlcCi0gIH0gd2hpbGUgKDApCi0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9vcC00LmggYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvb3AtNC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWFlNjI2Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9vcC00LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotLyoKLSAqIEJhc2ljIGZvdXItd29yZCBmcmFjdGlvbiBkZWNsYXJhdGlvbiBhbmQgbWFuaXB1bGF0aW9uLgotICoKLSAqIFdoZW4gYWRkaW5nIHF1YWR3b3JkIHN1cHBvcnQgZm9yIDMyIGJpdCBtYWNoaW5lcywgd2UgbmVlZAotICogdG8gYmUgYSBsaXR0bGUgY2FyZWZ1bCBhcyBkb3VibGUgbXVsdGlwbHkgdXNlcyBzb21lIG9mIHRoZXNlCi0gKiBtYWNyb3M6IChpbiBvcC0yLmgpCi0gKiBfRlBfTVVMX01FQVRfMl93aWRlKCkgdXNlcyBfRlBfRlJBQ19ERUNMXzQsIF9GUF9GUkFDX1dPUkRfNCwKLSAqIF9GUF9GUkFDX0FERF80LCBfRlBfRlJBQ19TUlNfNAotICogX0ZQX01VTF9NRUFUXzJfZ21wKCkgdXNlcyBfRlBfRlJBQ19TUlNfNCAoYW5kIHNob3VsZCB1c2UKLSAqIF9GUF9GUkFDX0RFQ0xfNDogaXQgYXBwZWFycyB0byBiZSBicm9rZW4gYW5kIGlzIG5vdCB1c2VkCi0gKiBhbnl3aGVyZSBhbnl3YXkuICkKLSAqCi0gKiBJJ3ZlIG5vdyBmaXhlZCBhbGwgdGhlIG1hY3JvcyB0aGF0IHdlcmUgaGVyZSBmcm9tIHRoZSBzcGFyYzY0IGNvZGUuCi0gKiBbKm5vbmUqIG9mIHRoZSBzaGlmdCBtYWNyb3Mgd2VyZSBjb3JyZWN0IV0gLS0gUE1NIDAyLzE5OTgKLSAqCi0gKiBUaGUgb25seSBxdWFkd29yZCBzdHVmZiB0aGF0IHJlbWFpbnMgdG8gYmUgY29kZWQgaXM6Ci0gKiAxKSB0aGUgY29udmVyc2lvbiB0by9mcm9tIGludHMsIHdoaWNoIHJlcXVpcmVzCi0gKiB0aGF0IHdlIGNoZWNrIChpbiBvcC1jb21tb24uaCkgdGhhdCB0aGUgZm9sbG93aW5nIGRvIHRoZSByaWdodCB0aGluZwotICogZm9yIHF1YWR3b3JkczogX0ZQX1RPX0lOVChRLDQscixYLHJzeixyc2cpLCBfRlBfRlJPTV9JTlQoUSw0LFgscixycyxydCkKLSAqIDIpIG11bHRpcGx5LCBkaXZpZGUgYW5kIHNxcnQsIHdoaWNoIHJlcXVpcmU6Ci0gKiBfRlBfTVVMX01FQVRfNF8qKFIsWCxZKSwgX0ZQX0RJVl9NRUFUXzRfKihSLFgsWSksIF9GUF9TUVJUX01FQVRfNChSLFMsVCxYLHEpLAotICogVGhpcyBhbHNvIG5lZWRzIF9GUF9NVUxfTUVBVF9RIGFuZCBfRlBfRElWX01FQVRfUSB0byBiZSBkZWZpbmVkIHRvCi0gKiBzb21lIHN1aXRhYmxlIF9GUF9NVUxfTUVBVF80XyogbWFjcm9zIGluIHNmcC1tYWNoaW5lLmguCi0gKiBbd2UncmUgZnJlZSB0byBjaG9vc2Ugd2hhdGV2ZXIgRlBfTVVMX01FQVRfNF8qIG1hY3JvcyB3ZSBuZWVkIGZvcgotICogdGhlc2U7IHRoZXkgYXJlIHVzZWQgbm93aGVyZSBlbHNlLiBdCi0gKi8KLQotI2RlZmluZSBfRlBfRlJBQ19ERUNMXzQoWCkJX0ZQX1dfVFlQRSBYIyNfZls0XQotI2RlZmluZSBfRlBfRlJBQ19DT1BZXzQoRCxTKQkJCVwKLSAgKEQjI19mWzBdID0gUyMjX2ZbMF0sIEQjI19mWzFdID0gUyMjX2ZbMV0sCVwKLSAgIEQjI19mWzJdID0gUyMjX2ZbMl0sIEQjI19mWzNdID0gUyMjX2ZbM10pCi0vKiBUaGUgX0ZQX0ZSQUNfU0VUX24oWCxJKSBtYWNybyBpcyBpbnRlbmRlZCBmb3IgdXNlIHdpdGggYW5vdGhlcgotICogbWFjcm8gc3VjaCBhcyBfRlBfWkVST0ZSQUNfbiB3aGljaCByZXR1cm5zIG4gY29tbWEgc2VwYXJhdGVkIHZhbHVlcy4KLSAqIFRoZSByZXN1bHQgaXMgdGhhdCB3ZSBnZXQgYW4gZXhwYW5zaW9uIG9mIF9fRlBfRlJBQ19TRVRfbihYLEkwLEkxLEkyLEkzKQotICogd2hpY2gganVzdCBhc3NpZ25zIHRoZSBJbiB2YWx1ZXMgdG8gdGhlIGFycmF5IFgjI19mW10uCi0gKiBUaGlzIGlzIHdoeSB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgZG9lc24ndCBhcHBlYXIgdG8gbWF0Y2gKLSAqIGF0IGZpcnN0IGdsYW5jZS4uLiAgICAgIC0tIFBNTQotICovCi0jZGVmaW5lIF9GUF9GUkFDX1NFVF80KFgsSSkJX19GUF9GUkFDX1NFVF80KFgsIEkpCi0jZGVmaW5lIF9GUF9GUkFDX0hJR0hfNChYKQkoWCMjX2ZbM10pCi0jZGVmaW5lIF9GUF9GUkFDX0xPV180KFgpCShYIyNfZlswXSkKLSNkZWZpbmUgX0ZQX0ZSQUNfV09SRF80KFgsdykJKFgjI19mW3ddKQotCi0jZGVmaW5lIF9GUF9GUkFDX1NMTF80KFgsTikJCQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgX0ZQX0lfVFlQRSBfdXAsIF9kb3duLCBfc2tpcCwgX2k7CQkJCQlcCi0gICAgX3NraXAgPSAoTikgLyBfRlBfV19UWVBFX1NJWkU7CQkJCQlcCi0gICAgX3VwID0gKE4pICUgX0ZQX1dfVFlQRV9TSVpFOwkJCQkJXAotICAgIF9kb3duID0gX0ZQX1dfVFlQRV9TSVpFIC0gX3VwOwkJCQkJXAotICAgIGZvciAoX2kgPSAzOyBfaSA+IF9za2lwOyAtLV9pKQkJCQkJXAotICAgICAgWCMjX2ZbX2ldID0gWCMjX2ZbX2ktX3NraXBdIDw8IF91cCB8IFgjI19mW19pLV9za2lwLTFdID4+IF9kb3duOwlcCi0vKiBidWdmaXhlZDogd2FzIFgjI19mW19pXSA8PD0gX3VwOyAgLS0gUE1NIDAyLzE5OTggKi8gICAgICAgICAgICAgICAgICBcCi0gICAgWCMjX2ZbX2ldID0gWCMjX2ZbMF0gPDwgX3VwOyAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZm9yICgtLV9pOyBfaSA+PSAwOyAtLV9pKQkJCQkJCVwKLSAgICAgIFgjI19mW19pXSA9IDA7CQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotLyogVGhpcyBvbmUgd2FzIGJyb2tlbiB0b28gKi8KLSNkZWZpbmUgX0ZQX0ZSQUNfU1JMXzQoWCxOKQkJCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBfRlBfSV9UWVBFIF91cCwgX2Rvd24sIF9za2lwLCBfaTsJCQkJCVwKLSAgICBfc2tpcCA9IChOKSAvIF9GUF9XX1RZUEVfU0laRTsJCQkJCVwKLSAgICBfZG93biA9IChOKSAlIF9GUF9XX1RZUEVfU0laRTsJCQkJCVwKLSAgICBfdXAgPSBfRlBfV19UWVBFX1NJWkUgLSBfZG93bjsJCQkJCVwKLSAgICBmb3IgKF9pID0gMDsgX2kgPCAzLV9za2lwOyArK19pKQkJCQkJXAotICAgICAgWCMjX2ZbX2ldID0gWCMjX2ZbX2krX3NraXBdID4+IF9kb3duIHwgWCMjX2ZbX2krX3NraXArMV0gPDwgX3VwOwlcCi0gICAgWCMjX2ZbX2ldID0gWCMjX2ZbM10gPj4gX2Rvd247CQkJICAgICAgICAgCVwKLSAgICBmb3IgKCsrX2k7IF9pIDwgNDsgKytfaSkJCQkJCQlcCi0gICAgICBYIyNfZltfaV0gPSAwOwkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotLyogUmlnaHQgc2hpZnQgd2l0aCBzdGlja3ktbHNiLgotICogV2hhdCB0aGlzIGFjdHVhbGx5IG1lYW5zIGlzIHRoYXQgd2UgZG8gYSBzdGFuZGFyZCByaWdodC1zaGlmdCwKLSAqIGJ1dCB0aGF0IGlmIGFueSBvZiB0aGUgYml0cyB0aGF0IGZhbGwgb2ZmIHRoZSByaWdodCBoYW5kIHNpZGUKLSAqIHdlcmUgb25lIHRoZW4gd2UgYWx3YXlzIHNldCB0aGUgTFNiaXQuCi0gKi8KLSNkZWZpbmUgX0ZQX0ZSQUNfU1JTXzQoWCxOLHNpemUpCQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgX0ZQX0lfVFlQRSBfdXAsIF9kb3duLCBfc2tpcCwgX2k7CQkJCQlcCi0gICAgX0ZQX1dfVFlQRSBfczsJCQkJCQkJXAotICAgIF9za2lwID0gKE4pIC8gX0ZQX1dfVFlQRV9TSVpFOwkJCQkJXAotICAgIF9kb3duID0gKE4pICUgX0ZQX1dfVFlQRV9TSVpFOwkJCQkJXAotICAgIF91cCA9IF9GUF9XX1RZUEVfU0laRSAtIF9kb3duOwkJCQkJXAotICAgIGZvciAoX3MgPSBfaSA9IDA7IF9pIDwgX3NraXA7ICsrX2kpCQkJCQlcCi0gICAgICBfcyB8PSBYIyNfZltfaV07CQkJCQkJCVwKLSAgICBfcyB8PSBYIyNfZltfaV0gPDwgX3VwOwkJCQkJCVwKLS8qIHMgaXMgbm93ICE9IDAgaWYgd2Ugd2FudCB0byBzZXQgdGhlIExTYml0ICovICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBmb3IgKF9pID0gMDsgX2kgPCAzLV9za2lwOyArK19pKQkJCQkJXAotICAgICAgWCMjX2ZbX2ldID0gWCMjX2ZbX2krX3NraXBdID4+IF9kb3duIHwgWCMjX2ZbX2krX3NraXArMV0gPDwgX3VwOwlcCi0gICAgWCMjX2ZbX2ldID0gWCMjX2ZbM10gPj4gX2Rvd247CQkJCQlcCi0gICAgZm9yICgrK19pOyBfaSA8IDQ7ICsrX2kpCQkJCQkJXAotICAgICAgWCMjX2ZbX2ldID0gMDsJCQkJCQkJXAotICAgIC8qIGRvbid0IGZpeCB0aGUgTFNCIHVudGlsIHRoZSB2ZXJ5IGVuZCB3aGVuIHdlJ3JlIHN1cmUgZlswXSBpcyBzdGFibGUgKi8gXAotICAgIFgjI19mWzBdIHw9IChfcyAhPSAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9GUF9GUkFDX0FERF80KFIsWCxZKQkJCQkJCVwKLSAgX19GUF9GUkFDX0FERF80KFIjI19mWzNdLCBSIyNfZlsyXSwgUiMjX2ZbMV0sIFIjI19mWzBdLAkJXAotCQkgIFgjI19mWzNdLCBYIyNfZlsyXSwgWCMjX2ZbMV0sIFgjI19mWzBdLAkJXAotCQkgIFkjI19mWzNdLCBZIyNfZlsyXSwgWSMjX2ZbMV0sIFkjI19mWzBdKQotCi0jZGVmaW5lIF9GUF9GUkFDX1NVQl80KFIsWCxZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fRlBfRlJBQ19TVUJfNChSIyNfZlszXSwgUiMjX2ZbMl0sIFIjI19mWzFdLCBSIyNfZlswXSwJCVwKLQkJICBYIyNfZlszXSwgWCMjX2ZbMl0sIFgjI19mWzFdLCBYIyNfZlswXSwJCVwKLQkJICBZIyNfZlszXSwgWSMjX2ZbMl0sIFkjI19mWzFdLCBZIyNfZlswXSkKLQotI2RlZmluZSBfRlBfRlJBQ19BRERJXzQoWCxJKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX0ZQX0ZSQUNfQURESV80KFgjI19mWzNdLCBYIyNfZlsyXSwgWCMjX2ZbMV0sIFgjI19mWzBdLCBJKQotCi0jZGVmaW5lIF9GUF9aRVJPRlJBQ180ICAwLDAsMCwwCi0jZGVmaW5lIF9GUF9NSU5GUkFDXzQgICAwLDAsMCwxCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfWkVST1BfNChYKSAgICAgKChYIyNfZlswXSB8IFgjI19mWzFdIHwgWCMjX2ZbMl0gfCBYIyNfZlszXSkgPT0gMCkKLSNkZWZpbmUgX0ZQX0ZSQUNfTkVHUF80KFgpICAgICAgKChfRlBfV1NfVFlQRSlYIyNfZlszXSA8IDApCi0jZGVmaW5lIF9GUF9GUkFDX09WRVJQXzQoZnMsWCkgIChYIyNfZlswXSAmIF9GUF9PVkVSRkxPV18jI2ZzKQotCi0jZGVmaW5lIF9GUF9GUkFDX0VRXzQoWCxZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAoWCMjX2ZbMF0gPT0gWSMjX2ZbMF0gJiYgWCMjX2ZbMV0gPT0gWSMjX2ZbMV0gICAgICAgICAgXAotICAmJiBYIyNfZlsyXSA9PSBZIyNfZlsyXSAmJiBYIyNfZlszXSA9PSBZIyNfZlszXSkKLQotI2RlZmluZSBfRlBfRlJBQ19HVF80KFgsWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gKFgjI19mWzNdID4gWSMjX2ZbM10gfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKFgjI19mWzNdID09IFkjI19mWzNdICYmIChYIyNfZlsyXSA+IFkjI19mWzJdIHx8ICAgICAgXAotICAgKFgjI19mWzJdID09IFkjI19mWzJdICYmIChYIyNfZlsxXSA+IFkjI19mWzFdIHx8ICAgICBcCi0gICAgKFgjI19mWzFdID09IFkjI19mWzFdICYmIFgjI19mWzBdID4gWSMjX2ZbMF0pICAgICAgIFwKLSAgICkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICApKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gKQotCi0jZGVmaW5lIF9GUF9GUkFDX0dFXzQoWCxZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAoWCMjX2ZbM10gPiBZIyNfZlszXSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoWCMjX2ZbM10gPT0gWSMjX2ZbM10gJiYgKFgjI19mWzJdID4gWSMjX2ZbMl0gfHwgICAgICBcCi0gICAoWCMjX2ZbMl0gPT0gWSMjX2ZbMl0gJiYgKFgjI19mWzFdID4gWSMjX2ZbMV0gfHwgICAgIFwKLSAgICAoWCMjX2ZbMV0gPT0gWSMjX2ZbMV0gJiYgWCMjX2ZbMF0gPj0gWSMjX2ZbMF0pICAgICAgXAotICAgKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSApCi0KLQotI2RlZmluZSBfRlBfRlJBQ19DTFpfNChSLFgpICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKFgjI19mWzNdKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX19GUF9DTFooUixYIyNfZlszXSk7ICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKFgjI19mWzJdKSAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9fRlBfQ0xaKFIsWCMjX2ZbMl0pOyAgICAgICAgICAgXAotICAgICAgICBSICs9IF9GUF9XX1RZUEVfU0laRTsgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoWCMjX2ZbMV0pICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX19GUF9DTFooUixYIyNfZlsyXSk7ICAgICAgICAgICBcCi0gICAgICAgIFIgKz0gX0ZQX1dfVFlQRV9TSVpFKjI7ICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfX0ZQX0NMWihSLFgjI19mWzBdKTsgICAgICAgICAgIFwKLSAgICAgICAgUiArPSBfRlBfV19UWVBFX1NJWkUqMzsgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlKDApCi0KLQotI2RlZmluZSBfRlBfVU5QQUNLX1JBV180KGZzLCBYLCB2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgX2ZsbzsgX2Zsby5mbHQgPSAodmFsKTsgICAgICAgIAlcCi0gICAgWCMjX2ZbMF0gPSBfZmxvLmJpdHMuZnJhYzA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFgjI19mWzFdID0gX2Zsby5iaXRzLmZyYWMxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBYIyNfZlsyXSA9IF9mbG8uYml0cy5mcmFjMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWCMjX2ZbM10gPSBfZmxvLmJpdHMuZnJhYzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFgjI19lICA9IF9mbG8uYml0cy5leHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBYIyNfcyAgPSBfZmxvLmJpdHMuc2lnbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX0ZQX1BBQ0tfUkFXXzQoZnMsIHZhbCwgWCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzIF9mbG87CQkJCQlcCi0gICAgX2Zsby5iaXRzLmZyYWMwID0gWCMjX2ZbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9mbG8uYml0cy5mcmFjMSA9IFgjI19mWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfZmxvLmJpdHMuZnJhYzIgPSBYIyNfZlsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX2Zsby5iaXRzLmZyYWMzID0gWCMjX2ZbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9mbG8uYml0cy5leHAgICA9IFgjI19lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfZmxvLmJpdHMuc2lnbiAgPSBYIyNfczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHZhbCkgPSBfZmxvLmZsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCi0gIH0gd2hpbGUgKDApCi0KLQotLyoKLSAqIEludGVybmFscwotICovCi0KLSNkZWZpbmUgX19GUF9GUkFDX1NFVF80KFgsSTMsSTIsSTEsSTApCQkJCQlcCi0gIChYIyNfZlszXSA9IEkzLCBYIyNfZlsyXSA9IEkyLCBYIyNfZlsxXSA9IEkxLCBYIyNfZlswXSA9IEkwKQotCi0jaWZuZGVmIF9fRlBfRlJBQ19BRERfNAotI2RlZmluZSBfX0ZQX0ZSQUNfQUREXzQocjMscjIscjEscjAseDMseDIseDEseDAseTMseTIseTEseTApCVwKLSAgZG8gewkJCQkJCQkJXAotICAgIGludCBfYzEsIF9jMiwgX2MzOwkJCQkJCVwKLSAgICByMCA9IHgwICsgeTA7CQkJCQkJXAotICAgIF9jMSA9IHIwIDwgeDA7CQkJCQkJXAotICAgIHIxID0geDEgKyB5MTsJCQkJCQlcCi0gICAgX2MyID0gcjEgPCB4MTsJCQkJCQlcCi0gICAgcjEgKz0gX2MxOwkJCQkJCQlcCi0gICAgX2MyIHw9IHIxIDwgX2MxOwkJCQkJCVwKLSAgICByMiA9IHgyICsgeTI7CQkJCQkJXAotICAgIF9jMyA9IHIyIDwgeDI7CQkJCQkJXAotICAgIHIyICs9IF9jMjsJCQkJCQkJXAotICAgIF9jMyB8PSByMiA8IF9jMjsJCQkJCQlcCi0gICAgcjMgPSB4MyArIHkzICsgX2MzOwkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWZuZGVmIF9fRlBfRlJBQ19TVUJfNAotI2RlZmluZSBfX0ZQX0ZSQUNfU1VCXzQocjMscjIscjEscjAseDMseDIseDEseDAseTMseTIseTEseTApCVwKLSAgZG8gewkJCQkJCQkJXAotICAgIGludCBfYzEsIF9jMiwgX2MzOwkJCQkJCVwKLSAgICByMCA9IHgwIC0geTA7CQkJCQkJXAotICAgIF9jMSA9IHIwID4geDA7CQkJCQkJXAotICAgIHIxID0geDEgLSB5MTsJCQkJCQlcCi0gICAgX2MyID0gcjEgPiB4MTsJCQkJCQlcCi0gICAgcjEgLT0gX2MxOwkJCQkJCQlcCi0gICAgX2MyIHw9IHIxID4gX2MxOwkJCQkJCVwKLSAgICByMiA9IHgyIC0geTI7CQkJCQkJXAotICAgIF9jMyA9IHIyID4geDI7CQkJCQkJXAotICAgIHIyIC09IF9jMjsJCQkJCQkJXAotICAgIF9jMyB8PSByMiA+IF9jMjsJCQkJCQlcCi0gICAgcjMgPSB4MyAtIHkzIC0gX2MzOwkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWZuZGVmIF9fRlBfRlJBQ19BRERJXzQKLS8qIEkgYWx3YXlzIHdhbnRlZCB0byBiZSBhIGxpc3AgcHJvZ3JhbW1lciA6LT4gKi8KLSNkZWZpbmUgX19GUF9GUkFDX0FERElfNCh4Myx4Mix4MSx4MCxpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKHgzICs9ICgoeDIgKz0gKCh4MSArPSAoKHgwICs9IGkpIDwgeDApKSA8IHgxKSA8IHgyKSkpCi0jZW5kaWYKLQotLyogQ29udmVydCBGUCB2YWx1ZXMgYmV0d2VlbiB3b3JkIHNpemVzLiBUaGlzIGFwcGVhcnMgdG8gYmUgbW9yZQotICogY29tcGxpY2F0ZWQgdGhhbiBJJ2QgaGF2ZSBleHBlY3RlZCBpdCB0byBiZSwgc28gdGhlc2UgbWlnaHQgYmUKLSAqIHdyb25nLi4uIFRoZXNlIG1hY3JvcyBhcmUgaW4gYW55IGNhc2Ugc29tZXdoYXQgYm9ndXMgYmVjYXVzZSB0aGV5Ci0gKiB1c2UgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB2YXJpb3VzIEZSQUNfbiB2YXJpYWJsZXMgbG9vayBsaWtlCi0gKiBpbnRlcm5hbGx5IFtlZywgdGhhdCAyIHdvcmQgdmFycyBhcmUgWF9mMCBhbmQgeF9mMV0uIEJ1dCBzbyBkbwotICogdGhlIG9uZXMgaW4gb3AtMi5oIGFuZCBvcC0xLmguCi0gKi8KLSNkZWZpbmUgX0ZQX0ZSQUNfQ09OVl8xXzQoZGZzLCBzZnMsIEQsIFMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgX0ZQX0ZSQUNfU1JTXzQoUywgKF9GUF9XRlJBQ0JJVFNfIyNzZnMgLSBfRlBfV0ZSQUNCSVRTXyMjZGZzKSwgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIF9GUF9XRlJBQ0JJVFNfIyNzZnMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgRCMjX2YgPSBTIyNfZlswXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQ09OVl8yXzQoZGZzLCBzZnMsIEQsIFMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgX0ZQX0ZSQUNfU1JTXzQoUywgKF9GUF9XRlJBQ0JJVFNfIyNzZnMgLSBfRlBfV0ZSQUNCSVRTXyMjZGZzKSwgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIF9GUF9XRlJBQ0JJVFNfIyNzZnMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgRCMjX2YwID0gUyMjX2ZbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIEQjI19mMSA9IFMjI19mWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0vKiBBc3NlbWJseS9kaXNhc3NlbWJseSBmb3IgY29udmVydGluZyB0by9mcm9tIGludGVncmFsIHR5cGVzLgotICogTm8gc2hpZnRpbmcgb3Igb3ZlcmZsb3cgaGFuZGxlZCBoZXJlLgotICovCi0vKiBQdXQgdGhlIEZQIHZhbHVlIFggaW50byByLCB3aGljaCBpcyBhbiBpbnRlZ2VyIG9mIHNpemUgcnNpemUuICovCi0jZGVmaW5lIF9GUF9GUkFDX0FTU0VNQkxFXzQociwgWCwgcnNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHJzaXplIDw9IF9GUF9XX1RZUEVfU0laRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByID0gWCMjX2ZbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAocnNpemUgPD0gMipfRlBfV19UWVBFX1NJWkUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByID0gWCMjX2ZbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByIDw8PSBfRlBfV19UWVBFX1NJWkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByICs9IFgjI19mWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAvKiBJJ20gZmVlbGluZyBsYXp5IHNvIHdlIGRlYWwgd2l0aCBpbnQgPT0gM3dvcmRzIChpbXBsYXVzaWJsZSkqLyBcCi0gICAgICAvKiBhbmQgaW50ID09IDR3b3JkcyBhcyBhIHNpbmdsZSBjYXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICByID0gWCMjX2ZbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByIDw8PSBfRlBfV19UWVBFX1NJWkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByICs9IFgjI19mWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByIDw8PSBfRlBfV19UWVBFX1NJWkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByICs9IFgjI19mWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByIDw8PSBfRlBfV19UWVBFX1NJWkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByICs9IFgjI19mWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLS8qICJObyBkaXNhc3NlbWJsZSBOdW1iZXIgRml2ZSEiICovCi0vKiBtb3ZlIGFuIGludGVnZXIgb2Ygc2l6ZSByc2l6ZSBpbnRvIFgncyBmcmFjdGlvbmFsIHBhcnQuIFdlIHJlbHkgb24KLSAqIHRoZSBfZltdIGFycmF5IGNvbnNpc3Rpbmcgb2Ygd29yZHMgb2Ygc2l6ZSBfRlBfV19UWVBFX1NJWkUgdG8gYXZvaWQKLSAqIGhhdmluZyB0byBtYXNrIHRoZSB2YWx1ZXMgd2Ugc3RvcmUgaW50byBpdC4KLSAqLwotI2RlZmluZSBfRlBfRlJBQ19ESVNBU1NFTUJMRV80KFgsIHIsIHJzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFgjI19mWzBdID0gcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFgjI19mWzFdID0gKHJzaXplIDw9IF9GUF9XX1RZUEVfU0laRSA/IDAgOiByID4+IF9GUF9XX1RZUEVfU0laRSk7ICAgXAotICAgIFgjI19mWzJdID0gKHJzaXplIDw9IDIqX0ZQX1dfVFlQRV9TSVpFID8gMCA6IHIgPj4gMipfRlBfV19UWVBFX1NJWkUpOyBcCi0gICAgWCMjX2ZbM10gPSAocnNpemUgPD0gMypfRlBfV19UWVBFX1NJWkUgPyAwIDogciA+PiAzKl9GUF9XX1RZUEVfU0laRSk7IFwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfRlBfRlJBQ19DT05WXzRfMShkZnMsIHNmcywgRCwgUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBEIyNfZlswXSA9IFMjI19mOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBEIyNfZlsxXSA9IEQjI19mWzJdID0gRCMjX2ZbM10gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBfRlBfRlJBQ19TTExfNChELCAoX0ZQX1dGUkFDQklUU18jI2RmcyAtIF9GUF9XRlJBQ0JJVFNfIyNzZnMpKTsgICAgXAotICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfRlBfRlJBQ19DT05WXzRfMihkZnMsIHNmcywgRCwgUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBEIyNfZlswXSA9IFMjI19mMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBEIyNfZlsxXSA9IFMjI19mMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBEIyNfZlsyXSA9IEQjI19mWzNdID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBfRlBfRlJBQ19TTExfNChELCAoX0ZQX1dGUkFDQklUU18jI2RmcyAtIF9GUF9XRlJBQ0JJVFNfIyNzZnMpKTsgICAgXAotICAgfSB3aGlsZSAoMCkKLQotLyogRklYTUUhIFRoaXMgaGFzIHRvIGJlIHdyaXR0ZW4gKi8KLSNkZWZpbmUgX0ZQX1NRUlRfTUVBVF80KFIsIFMsIFQsIFgsIHEpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvb3AtY29tbW9uLmggYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvb3AtY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYjgyYjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L29wLWNvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjg4ICswLDAgQEAKLSNkZWZpbmUgX0ZQX0RFQ0wod2MsIFgpCQkJXAotICBfRlBfSV9UWVBFIFgjI19jLCBYIyNfcywgWCMjX2U7CVwKLSAgX0ZQX0ZSQUNfREVDTF8jI3djKFgpCi0KLS8qCi0gKiBGaW5pc2ggdHJ1ZWx5IHVucGFja2luZyBhIG5hdGl2ZSBmcCB2YWx1ZSBieSBjbGFzc2lmeWluZyB0aGUga2luZAotICogb2YgZnAgdmFsdWUgYW5kIG5vcm1hbGl6aW5nIGJvdGggdGhlIGV4cG9uZW50IGFuZCB0aGUgZnJhY3Rpb24uCi0gKi8KLQotI2RlZmluZSBfRlBfVU5QQUNLX0NBTk9OSUNBTChmcywgd2MsIFgpCQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotICBzd2l0Y2ggKFgjI19lKQkJCQkJCQlcCi0gIHsJCQkJCQkJCQlcCi0gIGRlZmF1bHQ6CQkJCQkJCQlcCi0gICAgX0ZQX0ZSQUNfSElHSF8jI3djKFgpIHw9IF9GUF9JTVBMQklUXyMjZnM7CQkJCVwKLSAgICBfRlBfRlJBQ19TTExfIyN3YyhYLCBfRlBfV09SS0JJVFMpOwkJCQkJXAotICAgIFgjI19lIC09IF9GUF9FWFBCSUFTXyMjZnM7CQkJCQkJXAotICAgIFgjI19jID0gRlBfQ0xTX05PUk1BTDsJCQkJCQlcCi0gICAgYnJlYWs7CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0gIGNhc2UgMDoJCQkJCQkJCVwKLSAgICBpZiAoX0ZQX0ZSQUNfWkVST1BfIyN3YyhYKSkJCQkJCQlcCi0gICAgICBYIyNfYyA9IEZQX0NMU19aRVJPOwkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCS8qIGEgZGVub3JtYWxpemVkIG51bWJlciAqLwkJCQkJXAotCV9GUF9JX1RZUEUgX3NoaWZ0OwkJCQkJCVwKLQlfRlBfRlJBQ19DTFpfIyN3Yyhfc2hpZnQsIFgpOwkJCQkJXAotCV9zaGlmdCAtPSBfRlBfRlJBQ1hCSVRTXyMjZnM7CQkJCQlcCi0JX0ZQX0ZSQUNfU0xMXyMjd2MoWCwgKF9zaGlmdCtfRlBfV09SS0JJVFMpKTsJCQlcCi0JWCMjX2UgLT0gX0ZQX0VYUEJJQVNfIyNmcyAtIDEgKyBfc2hpZnQ7CQkJCVwKLQlYIyNfYyA9IEZQX0NMU19OT1JNQUw7CQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICBicmVhazsJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgY2FzZSBfRlBfRVhQTUFYXyMjZnM6CQkJCQkJCVwKLSAgICBpZiAoX0ZQX0ZSQUNfWkVST1BfIyN3YyhYKSkJCQkJCQlcCi0gICAgICBYIyNfYyA9IEZQX0NMU19JTkY7CQkJCQkJXAotICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgIC8qIHdlIGRvbid0IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBzaWduYWxpbmcgYW5kIHF1aWV0IG5hbnMgKi8JXAotICAgICAgWCMjX2MgPSBGUF9DTFNfTkFOOwkJCQkJCVwKLSAgICBicmVhazsJCQkJCQkJCVwKLSAgfQkJCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLQotLyoKLSAqIEJlZm9yZSBwYWNraW5nIHRoZSBiaXRzIGJhY2sgaW50byB0aGUgbmF0aXZlIGZwIHJlc3VsdCwgdGFrZSBjYXJlCi0gKiBvZiBzdWNoIG11bmRhbmUgdGhpbmdzIGFzIHJvdW5kaW5nIGFuZCBvdmVyZmxvdy4gIEFsc28sIGZvciBzb21lCi0gKiBraW5kcyBvZiBmcCB2YWx1ZXMsIHRoZSBvcmlnaW5hbCBwYXJ0cyBtYXkgbm90IGhhdmUgYmVlbiBmdWxseQotICogZXh0cmFjdGVkIC0tIGJ1dCB0aGF0IGlzIG9rLCB3ZSBjYW4gcmVnZW5lcmF0ZSB0aGVtIG5vdy4KLSAqLwotCi0jZGVmaW5lIF9GUF9QQUNLX0NBTk9OSUNBTChmcywgd2MsIFgpCQkJCVwKLSh7aW50IF9fcmV0ID0gMDsJCQkJCQlcCi0gIHN3aXRjaCAoWCMjX2MpCQkJCQkJXAotICB7CQkJCQkJCQlcCi0gIGNhc2UgRlBfQ0xTX05PUk1BTDoJCQkJCQlcCi0gICAgWCMjX2UgKz0gX0ZQX0VYUEJJQVNfIyNmczsJCQkJCVwKLSAgICBpZiAoWCMjX2UgPiAwKQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCVwKLQlfX3JldCB8PSBfRlBfUk9VTkQod2MsIFgpOwkJCQlcCi0JaWYgKF9GUF9GUkFDX09WRVJQXyMjd2MoZnMsIFgpKQkJCQlcCi0JICB7CQkJCQkJCVwKLQkgICAgX0ZQX0ZSQUNfU1JMXyMjd2MoWCwgKF9GUF9XT1JLQklUUysxKSk7CQlcCi0JICAgIFgjI19lKys7CQkJCQkJXAotCSAgfQkJCQkJCQlcCi0JZWxzZQkJCQkJCQlcCi0JICBfRlBfRlJBQ19TUkxfIyN3YyhYLCBfRlBfV09SS0JJVFMpOwkJCVwKLQlpZiAoWCMjX2UgPj0gX0ZQX0VYUE1BWF8jI2ZzKQkJCQlcCi0JICB7CQkJCQkJCVwKLQkgICAgLyogb3ZlcmZsb3cgdG8gaW5maW5pdHkgKi8JCQkJXAotCSAgICBYIyNfZSA9IF9GUF9FWFBNQVhfIyNmczsJCQkJXAotCSAgICBfRlBfRlJBQ19TRVRfIyN3YyhYLCBfRlBfWkVST0ZSQUNfIyN3Yyk7CQlcCi0gICAgICAgICAgICBfX3JldCB8PSBFRkxBR19PVkVSRkxPVzsJCQkJXAotCSAgfQkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQlcCi0gICAgZWxzZQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQlcCi0JLyogd2UndmUgZ290IGEgZGVub3JtYWxpemVkIG51bWJlciAqLwkJCVwKLQlYIyNfZSA9IC1YIyNfZSArIDE7CQkJCQlcCi0JaWYgKFgjI19lIDw9IF9GUF9XRlJBQ0JJVFNfIyNmcykJCQlcCi0JICB7CQkJCQkJCVwKLQkgICAgX0ZQX0ZSQUNfU1JTXyMjd2MoWCwgWCMjX2UsIF9GUF9XRlJBQ0JJVFNfIyNmcyk7CVwKLQkgICAgX0ZQX0ZSQUNfU0xMXyMjd2MoWCwgMSk7CQkJCVwKLQkgICAgaWYgKF9GUF9GUkFDX09WRVJQXyMjd2MoZnMsIFgpKQkJCVwKLQkgICAgICB7CQkJCQkJCVwKLQkgICAgICAgIFgjI19lID0gMTsJCQkJCVwKLQkgICAgICAgIF9GUF9GUkFDX1NFVF8jI3djKFgsIF9GUF9aRVJPRlJBQ18jI3djKTsJXAotCSAgICAgIH0JCQkJCQkJXAotCSAgICBlbHNlCQkJCQkJXAotCSAgICAgIHsJCQkJCQkJXAotCQlYIyNfZSA9IDA7CQkJCQlcCi0JCV9GUF9GUkFDX1NSTF8jI3djKFgsIF9GUF9XT1JLQklUUysxKTsJCVwKLSAgICAgICAgICAgICAgICBfX3JldCB8PSBFRkxBR19VTkRFUkZMT1c7CQkJXAotCSAgICAgIH0JCQkJCQkJXAotCSAgfQkJCQkJCQlcCi0JZWxzZQkJCQkJCQlcCi0JICB7CQkJCQkJCVwKLQkgICAgLyogdW5kZXJmbG93IHRvIHplcm8gKi8JCQkJXAotCSAgICBYIyNfZSA9IDA7CQkJCQkJXAotCSAgICBfRlBfRlJBQ19TRVRfIyN3YyhYLCBfRlBfWkVST0ZSQUNfIyN3Yyk7CQlcCi0gICAgICAgICAgICBfX3JldCB8PSBFRkxBR19VTkRFUkZMT1c7CQkJCVwKLQkgIH0JCQkJCQkJXAotICAgICAgfQkJCQkJCQkJXAotICAgIGJyZWFrOwkJCQkJCQlcCi0JCQkJCQkJCVwKLSAgY2FzZSBGUF9DTFNfWkVSTzoJCQkJCQlcCi0gICAgWCMjX2UgPSAwOwkJCQkJCQlcCi0gICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX1pFUk9GUkFDXyMjd2MpOwkJCVwKLSAgICBicmVhazsJCQkJCQkJXAotCQkJCQkJCQlcCi0gIGNhc2UgRlBfQ0xTX0lORjoJCQkJCQlcCi0gICAgWCMjX2UgPSBfRlBfRVhQTUFYXyMjZnM7CQkJCQlcCi0gICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX1pFUk9GUkFDXyMjd2MpOwkJCVwKLSAgICBicmVhazsJCQkJCQkJXAotCQkJCQkJCQlcCi0gIGNhc2UgRlBfQ0xTX05BTjoJCQkJCQlcCi0gICAgWCMjX2UgPSBfRlBfRVhQTUFYXyMjZnM7CQkJCQlcCi0gICAgaWYgKCFfRlBfS0VFUE5BTkZSQUNQKQkJCQkJXAotICAgICAgewkJCQkJCQkJXAotCV9GUF9GUkFDX1NFVF8jI3djKFgsIF9GUF9OQU5GUkFDXyMjZnMpOwkJCVwKLQlYIyNfcyA9IDA7CQkJCQkJXAotICAgICAgfQkJCQkJCQkJXAotICAgIGVsc2UJCQkJCQkJXAotICAgICAgX0ZQX0ZSQUNfSElHSF8jI3djKFgpIHw9IF9GUF9RTkFOQklUXyMjZnM7CQlcCi0gICAgYnJlYWs7CQkJCQkJCVwKLSAgfQkJCQkJCQkJXAotICBfX3JldDsJCQkJCQkJXAotfSkKLQotCi0vKgotICogTWFpbiBhZGRpdGlvbiByb3V0aW5lLiAgVGhlIGlucHV0IHZhbHVlcyBzaG91bGQgYmUgY29va2VkLgotICovCi0KLSNkZWZpbmUgX0ZQX0FERChmcywgd2MsIFIsIFgsIFkpCQkJCQkgICAgIFwKLWRvIHsJCQkJCQkJCQkgICAgIFwKLSAgc3dpdGNoIChfRlBfQ0xTX0NPTUJJTkUoWCMjX2MsIFkjI19jKSkJCQkJICAgICBcCi0gIHsJCQkJCQkJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfTk9STUFMKToJCQkgICAgIFwKLSAgICB7CQkJCQkJCQkJICAgICBcCi0gICAgICAvKiBzaGlmdCB0aGUgc21hbGxlciBudW1iZXIgc28gdGhhdCBpdHMgZXhwb25lbnQgbWF0Y2hlcyB0aGUgbGFyZ2VyICovIFwKLSAgICAgIF9GUF9JX1RZUEUgZGlmZiA9IFgjI19lIC0gWSMjX2U7CQkJCQkgICAgIFwKLQkJCQkJCQkJCSAgICAgXAotICAgICAgaWYgKGRpZmYgPCAwKQkJCQkJCQkgICAgIFwKLQl7CQkJCQkJCQkgICAgIFwKLQkgIGRpZmYgPSAtZGlmZjsJCQkJCQkJICAgICBcCi0JICBpZiAoZGlmZiA8PSBfRlBfV0ZSQUNCSVRTXyMjZnMpCQkJCSAgICAgXAotCSAgICBfRlBfRlJBQ19TUlNfIyN3YyhYLCBkaWZmLCBfRlBfV0ZSQUNCSVRTXyMjZnMpOwkJICAgICBcCi0JICBlbHNlIGlmICghX0ZQX0ZSQUNfWkVST1BfIyN3YyhYKSkJCQkJICAgICBcCi0JICAgIF9GUF9GUkFDX1NFVF8jI3djKFgsIF9GUF9NSU5GUkFDXyMjd2MpOwkJCSAgICAgXAotCSAgZWxzZQkJCQkJCQkJICAgICBcCi0JICAgIF9GUF9GUkFDX1NFVF8jI3djKFgsIF9GUF9aRVJPRlJBQ18jI3djKTsJCQkgICAgIFwKLQkgIFIjI19lID0gWSMjX2U7CQkJCQkJICAgICBcCi0JfQkJCQkJCQkJICAgICBcCi0gICAgICBlbHNlCQkJCQkJCQkgICAgIFwKLQl7CQkJCQkJCQkgICAgIFwKLQkgIGlmIChkaWZmID4gMCkJCQkJCQkJICAgICBcCi0JICAgIHsJCQkJCQkJCSAgICAgXAotCSAgICAgIGlmIChkaWZmIDw9IF9GUF9XRlJBQ0JJVFNfIyNmcykJCQkJICAgICBcCi0JICAgICAgICBfRlBfRlJBQ19TUlNfIyN3YyhZLCBkaWZmLCBfRlBfV0ZSQUNCSVRTXyMjZnMpOwkJICAgICBcCi0JICAgICAgZWxzZSBpZiAoIV9GUF9GUkFDX1pFUk9QXyMjd2MoWSkpCQkJCSAgICAgXAotCSAgICAgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWSwgX0ZQX01JTkZSQUNfIyN3Yyk7CQkJICAgICBcCi0JICAgICAgZWxzZQkJCQkJCQkgICAgIFwKLQkgICAgICAgIF9GUF9GUkFDX1NFVF8jI3djKFksIF9GUF9aRVJPRlJBQ18jI3djKTsJCSAgICAgXAotCSAgICB9CQkJCQkJCQkgICAgIFwKLQkgIFIjI19lID0gWCMjX2U7CQkJCQkJICAgICBcCi0JfQkJCQkJCQkJICAgICBcCi0JCQkJCQkJCQkgICAgIFwKLSAgICAgIFIjI19jID0gRlBfQ0xTX05PUk1BTDsJCQkJCQkgICAgIFwKLQkJCQkJCQkJCSAgICAgXAotICAgICAgaWYgKFgjI19zID09IFkjI19zKQkJCQkJCSAgICAgXAotCXsJCQkJCQkJCSAgICAgXAotCSAgUiMjX3MgPSBYIyNfczsJCQkJCQkgICAgIFwKLQkgIF9GUF9GUkFDX0FERF8jI3djKFIsIFgsIFkpOwkJCQkJICAgICBcCi0JICBpZiAoX0ZQX0ZSQUNfT1ZFUlBfIyN3YyhmcywgUikpCQkJCSAgICAgXAotCSAgICB7CQkJCQkJCQkgICAgIFwKLQkgICAgICBfRlBfRlJBQ19TUlNfIyN3YyhSLCAxLCBfRlBfV0ZSQUNCSVRTXyMjZnMpOwkJICAgICBcCi0JICAgICAgUiMjX2UrKzsJCQkJCQkJICAgICBcCi0JICAgIH0JCQkJCQkJCSAgICAgXAotCX0JCQkJCQkJCSAgICAgXAotICAgICAgZWxzZQkJCQkJCQkJICAgICBcCi0JewkJCQkJCQkJICAgICBcCi0JICBSIyNfcyA9IFgjI19zOwkJCQkJCSAgICAgXAotCSAgX0ZQX0ZSQUNfU1VCXyMjd2MoUiwgWCwgWSk7CQkJCQkgICAgIFwKLQkgIGlmIChfRlBfRlJBQ19aRVJPUF8jI3djKFIpKQkJCQkJICAgICBcCi0JICAgIHsJCQkJCQkJCSAgICAgXAotCSAgICAgIC8qIHJldHVybiBhbiBleGFjdCB6ZXJvICovCQkJCSAgICAgXAotCSAgICAgIGlmIChGUF9ST1VORE1PREUgPT0gRlBfUk5EX01JTkYpCQkJCSAgICAgXAotCQlSIyNfcyB8PSBZIyNfczsJCQkJCQkgICAgIFwKLQkgICAgICBlbHNlCQkJCQkJCSAgICAgXAotCQlSIyNfcyAmPSBZIyNfczsJCQkJCQkgICAgIFwKLQkgICAgICBSIyNfYyA9IEZQX0NMU19aRVJPOwkJCQkJICAgICBcCi0JICAgIH0JCQkJCQkJCSAgICAgXAotCSAgZWxzZQkJCQkJCQkJICAgICBcCi0JICAgIHsJCQkJCQkJCSAgICAgXAotCSAgICAgIGlmIChfRlBfRlJBQ19ORUdQXyMjd2MoUikpCQkJCSAgICAgXAotCQl7CQkJCQkJCSAgICAgXAotCQkgIF9GUF9GUkFDX1NVQl8jI3djKFIsIFksIFgpOwkJCQkgICAgIFwKLQkJICBSIyNfcyA9IFkjI19zOwkJCQkJICAgICBcCi0JCX0JCQkJCQkJICAgICBcCi0JCQkJCQkJCQkgICAgIFwKLQkgICAgICAvKiByZW5vcm1hbGl6ZSBhZnRlciBzdWJ0cmFjdGlvbiAqLwkJCSAgICAgXAotCSAgICAgIF9GUF9GUkFDX0NMWl8jI3djKGRpZmYsIFIpOwkJCQkgICAgIFwKLQkgICAgICBkaWZmIC09IF9GUF9XRlJBQ1hCSVRTXyMjZnM7CQkJCSAgICAgXAotCSAgICAgIGlmIChkaWZmKQkJCQkJCQkgICAgIFwKLQkJewkJCQkJCQkgICAgIFwKLQkJICBSIyNfZSAtPSBkaWZmOwkJCQkJICAgICBcCi0JCSAgX0ZQX0ZSQUNfU0xMXyMjd2MoUiwgZGlmZik7CQkJCSAgICAgXAotCQl9CQkJCQkJCSAgICAgXAotCSAgICB9CQkJCQkJCQkgICAgIFwKLQl9CQkJCQkJCQkgICAgIFwKLSAgICAgIGJyZWFrOwkJCQkJCQkJICAgICBcCi0gICAgfQkJCQkJCQkJCSAgICAgXAotCQkJCQkJCQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX05BTik6CQkJCSAgICAgXAotICAgIF9GUF9DSE9PU0VOQU4oZnMsIHdjLCBSLCBYLCBZKTsJCQkJCSAgICAgXAotICAgIGJyZWFrOwkJCQkJCQkJICAgICBcCi0JCQkJCQkJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfWkVSTyk6CQkJICAgICBcCi0gICAgUiMjX2UgPSBYIyNfZTsJCQkJCQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX05PUk1BTCk6CQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX0lORik6CQkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19aRVJPKToJCQkJICAgICBcCi0gICAgX0ZQX0ZSQUNfQ09QWV8jI3djKFIsIFgpOwkJCQkJCSAgICAgXAotICAgIFIjI19zID0gWCMjX3M7CQkJCQkJCSAgICAgXAotICAgIFIjI19jID0gWCMjX2M7CQkJCQkJCSAgICAgXAotICAgIGJyZWFrOwkJCQkJCQkJICAgICBcCi0JCQkJCQkJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX05PUk1BTCk6CQkJICAgICBcCi0gICAgUiMjX2UgPSBZIyNfZTsJCQkJCQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX05BTik6CQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX05BTik6CQkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfTkFOKToJCQkJICAgICBcCi0gICAgX0ZQX0ZSQUNfQ09QWV8jI3djKFIsIFkpOwkJCQkJCSAgICAgXAotICAgIFIjI19zID0gWSMjX3M7CQkJCQkJCSAgICAgXAotICAgIFIjI19jID0gWSMjX2M7CQkJCQkJCSAgICAgXAotICAgIGJyZWFrOwkJCQkJCQkJICAgICBcCi0JCQkJCQkJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfSU5GKToJCQkJICAgICBcCi0gICAgaWYgKFgjI19zICE9IFkjI19zKQkJCQkJCQkgICAgIFwKLSAgICAgIHsJCQkJCQkJCQkgICAgIFwKLQkvKiArSU5GICsgLUlORiA9PiBOQU4gKi8JCQkJCSAgICAgXAotCV9GUF9GUkFDX1NFVF8jI3djKFIsIF9GUF9OQU5GUkFDXyMjZnMpOwkJCQkgICAgIFwKLQlSIyNfcyA9IFgjI19zIF4gWSMjX3M7CQkJCQkJICAgICBcCi0JUiMjX2MgPSBGUF9DTFNfTkFOOwkJCQkJCSAgICAgXAotCWJyZWFrOwkJCQkJCQkJICAgICBcCi0gICAgICB9CQkJCQkJCQkJICAgICBcCi0gICAgLyogRkFMTFRIUlUgKi8JCQkJCQkJICAgICBcCi0JCQkJCQkJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfTk9STUFMKToJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfWkVSTyk6CQkJCSAgICAgXAotICAgIFIjI19zID0gWCMjX3M7CQkJCQkJCSAgICAgXAotICAgIFIjI19jID0gRlBfQ0xTX0lORjsJCQkJCQkJICAgICBcCi0gICAgYnJlYWs7CQkJCQkJCQkgICAgIFwKLQkJCQkJCQkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTk9STUFMLEZQX0NMU19JTkYpOgkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfSU5GKToJCQkJICAgICBcCi0gICAgUiMjX3MgPSBZIyNfczsJCQkJCQkJICAgICBcCi0gICAgUiMjX2MgPSBGUF9DTFNfSU5GOwkJCQkJCQkgICAgIFwKLSAgICBicmVhazsJCQkJCQkJCSAgICAgXAotCQkJCQkJCQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19aRVJPKToJCQkgICAgIFwKLSAgICAvKiBtYWtlIHN1cmUgdGhlIHNpZ24gaXMgY29ycmVjdCAqLwkJCQkJICAgICBcCi0gICAgaWYgKEZQX1JPVU5ETU9ERSA9PSBGUF9STkRfTUlORikJCQkJCSAgICAgXAotICAgICAgUiMjX3MgPSBYIyNfcyB8IFkjI19zOwkJCQkJCSAgICAgXAotICAgIGVsc2UJCQkJCQkJCSAgICAgXAotICAgICAgUiMjX3MgPSBYIyNfcyAmIFkjI19zOwkJCQkJCSAgICAgXAotICAgIFIjI19jID0gRlBfQ0xTX1pFUk87CQkJCQkJICAgICBcCi0gICAgYnJlYWs7CQkJCQkJCQkgICAgIFwKLQkJCQkJCQkJCSAgICAgXAotICBkZWZhdWx0OgkJCQkJCQkJICAgICBcCi0gICAgYWJvcnQoKTsJCQkJCQkJCSAgICAgXAotICB9CQkJCQkJCQkJICAgICBcCi19IHdoaWxlICgwKQotCi0KLS8qCi0gKiBNYWluIG5lZ2F0aW9uIHJvdXRpbmUuICBGSVhNRSAtLSB3aGVuIHdlIGNhcmUgYWJvdXQgc2V0dGluZyBleGNlcHRpb24KLSAqIGJpdHMgcmVsaWFibHksIHRoaXMgd2lsbCBub3QgZG8uICBXZSBzaG91bGQgZXhhbWluZSBhbGwgb2YgdGhlIGZwIGNsYXNzZXMuCi0gKi8KLQotI2RlZmluZSBfRlBfTkVHKGZzLCB3YywgUiwgWCkJCVwKLSAgZG8gewkJCQkJXAotICAgIF9GUF9GUkFDX0NPUFlfIyN3YyhSLCBYKTsJCVwKLSAgICBSIyNfYyA9IFgjI19jOwkJCVwKLSAgICBSIyNfZSA9IFgjI19lOwkJCVwKLSAgICBSIyNfcyA9IDEgXiBYIyNfczsJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotLyoKLSAqIE1haW4gbXVsdGlwbGljYXRpb24gcm91dGluZS4gIFRoZSBpbnB1dCB2YWx1ZXMgc2hvdWxkIGJlIGNvb2tlZC4KLSAqLwotCi0jZGVmaW5lIF9GUF9NVUwoZnMsIHdjLCBSLCBYLCBZKQkJCVwKLWRvIHsJCQkJCQkJXAotICBSIyNfcyA9IFgjI19zIF4gWSMjX3M7CQkJCVwKLSAgc3dpdGNoIChfRlBfQ0xTX0NPTUJJTkUoWCMjX2MsIFkjI19jKSkJCVwKLSAgewkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX05PUk1BTCk6CVwKLSAgICBSIyNfYyA9IEZQX0NMU19OT1JNQUw7CQkJCVwKLSAgICBSIyNfZSA9IFgjI19lICsgWSMjX2UgKyAxOwkJCQlcCi0JCQkJCQkJXAotICAgIF9GUF9NVUxfTUVBVF8jI2ZzKFIsWCxZKTsJCQkJXAotCQkJCQkJCVwKLSAgICBpZiAoX0ZQX0ZSQUNfT1ZFUlBfIyN3YyhmcywgUikpCQkJXAotICAgICAgX0ZQX0ZSQUNfU1JTXyMjd2MoUiwgMSwgX0ZQX1dGUkFDQklUU18jI2ZzKTsJXAotICAgIGVsc2UJCQkJCQlcCi0gICAgICBSIyNfZS0tOwkJCQkJCVwKLSAgICBicmVhazsJCQkJCQlcCi0JCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19OQU4pOgkJXAotICAgIF9GUF9DSE9PU0VOQU4oZnMsIHdjLCBSLCBYLCBZKTsJCQlcCi0gICAgYnJlYWs7CQkJCQkJXAotCQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfTk9STUFMKToJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19JTkYpOgkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19aRVJPKToJCVwKLSAgICBSIyNfcyA9IFgjI19zOwkJCQkJXAotCQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfSU5GKToJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfTk9STUFMKToJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfTk9STUFMKToJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfWkVSTyk6CVwKLSAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWCk7CQkJCVwKLSAgICBSIyNfYyA9IFgjI19jOwkJCQkJXAotICAgIGJyZWFrOwkJCQkJCVwKLQkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX05BTik6CVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfTkFOKToJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX05BTik6CQlcCi0gICAgUiMjX3MgPSBZIyNfczsJCQkJCVwKLQkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX0lORik6CVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfWkVSTyk6CVwKLSAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWSk7CQkJCVwKLSAgICBSIyNfYyA9IFkjI19jOwkJCQkJXAotICAgIGJyZWFrOwkJCQkJCVwKLQkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX1pFUk8pOgkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfSU5GKToJCVwKLSAgICBSIyNfYyA9IEZQX0NMU19OQU47CQkJCQlcCi0gICAgX0ZQX0ZSQUNfU0VUXyMjd2MoUiwgX0ZQX05BTkZSQUNfIyNmcyk7CQlcCi0gICAgYnJlYWs7CQkJCQkJXAotCQkJCQkJCVwKLSAgZGVmYXVsdDoJCQkJCQlcCi0gICAgYWJvcnQoKTsJCQkJCQlcCi0gIH0JCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotCi0vKgotICogTWFpbiBkaXZpc2lvbiByb3V0aW5lLiAgVGhlIGlucHV0IHZhbHVlcyBzaG91bGQgYmUgY29va2VkLgotICovCi0KLSNkZWZpbmUgX0ZQX0RJVihmcywgd2MsIFIsIFgsIFkpCQkJXAotZG8gewkJCQkJCQlcCi0gIFIjI19zID0gWCMjX3MgXiBZIyNfczsJCQkJXAotICBzd2l0Y2ggKF9GUF9DTFNfQ09NQklORShYIyNfYywgWSMjX2MpKQkJXAotICB7CQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfTk9STUFMKToJXAotICAgIFIjI19jID0gRlBfQ0xTX05PUk1BTDsJCQkJXAotICAgIFIjI19lID0gWCMjX2UgLSBZIyNfZTsJCQkJXAotCQkJCQkJCVwKLSAgICBfRlBfRElWX01FQVRfIyNmcyhSLFgsWSk7CQkJCVwKLSAgICBicmVhazsJCQkJCQlcCi0JCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19OQU4pOgkJXAotICAgIF9GUF9DSE9PU0VOQU4oZnMsIHdjLCBSLCBYLCBZKTsJCQlcCi0gICAgYnJlYWs7CQkJCQkJXAotCQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfTk9STUFMKToJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19JTkYpOgkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19aRVJPKToJCVwKLSAgICBSIyNfcyA9IFgjI19zOwkJCQkJXAotICAgIF9GUF9GUkFDX0NPUFlfIyN3YyhSLCBYKTsJCQkJXAotICAgIFIjI19jID0gWCMjX2M7CQkJCQlcCi0gICAgYnJlYWs7CQkJCQkJXAotCQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfTkFOKToJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19OQU4pOgkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfTkFOKToJCVwKLSAgICBSIyNfcyA9IFkjI19zOwkJCQkJXAotICAgIF9GUF9GUkFDX0NPUFlfIyN3YyhSLCBZKTsJCQkJXAotICAgIFIjI19jID0gWSMjX2M7CQkJCQlcCi0gICAgYnJlYWs7CQkJCQkJXAotCQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfSU5GKToJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfSU5GKToJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX05PUk1BTCk6CVwKLSAgICBSIyNfYyA9IEZQX0NMU19aRVJPOwkJCQlcCi0gICAgYnJlYWs7CQkJCQkJXAotCQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfWkVSTyk6CVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfWkVSTyk6CQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX05PUk1BTCk6CVwKLSAgICBSIyNfYyA9IEZQX0NMU19JTkY7CQkJCQlcCi0gICAgYnJlYWs7CQkJCQkJXAotCQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfSU5GKToJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX1pFUk8pOglcCi0gICAgUiMjX2MgPSBGUF9DTFNfTkFOOwkJCQkJXAotICAgIF9GUF9GUkFDX1NFVF8jI3djKFIsIF9GUF9OQU5GUkFDXyMjZnMpOwkJXAotICAgIGJyZWFrOwkJCQkJCVwKLQkJCQkJCQlcCi0gIGRlZmF1bHQ6CQkJCQkJXAotICAgIGFib3J0KCk7CQkJCQkJXAotICB9CQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLQotLyoKLSAqIE1haW4gZGlmZmVyZW50aWFsIGNvbXBhcmlzb24gcm91dGluZS4gIFRoZSBpbnB1dHMgc2hvdWxkIGJlIHJhdyBub3QKLSAqIGNvb2tlZC4gIFRoZSByZXR1cm4gaXMgLTEsMCwxIGZvciBub3JtYWwgdmFsdWVzLCAyIG90aGVyd2lzZS4KLSAqLwotCi0jZGVmaW5lIF9GUF9DTVAoZnMsIHdjLCByZXQsIFgsIFksIHVuKQkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIC8qIE5BTnMgYXJlIHVub3JkZXJlZCAqLwkJCQkJCVwKLSAgICBpZiAoKFgjI19lID09IF9GUF9FWFBNQVhfIyNmcyAmJiAhX0ZQX0ZSQUNfWkVST1BfIyN3YyhYKSkJCVwKLQl8fCAoWSMjX2UgPT0gX0ZQX0VYUE1BWF8jI2ZzICYmICFfRlBfRlJBQ19aRVJPUF8jI3djKFkpKSkJXAotICAgICAgewkJCQkJCQkJCVwKLQlyZXQgPSB1bjsJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotICAgICAgICBpbnQgX194X3plcm8gPSAoIVgjI19lICYmIF9GUF9GUkFDX1pFUk9QXyMjd2MoWCkpID8gMSA6IDA7CVwKLSAgICAgICAgaW50IF9feV96ZXJvID0gKCFZIyNfZSAmJiBfRlBfRlJBQ19aRVJPUF8jI3djKFkpKSA/IDEgOiAwOwlcCi0JCQkJCQkJCQlcCi0JaWYgKF9feF96ZXJvICYmIF9feV96ZXJvKQkJCQkJXAotCSAgcmV0ID0gMDsJCQkJCQkJXAotCWVsc2UgaWYgKF9feF96ZXJvKQkJCQkJCVwKLQkgIHJldCA9IFkjI19zID8gMSA6IC0xOwkJCQkJCVwKLQllbHNlIGlmIChfX3lfemVybykJCQkJCQlcCi0JICByZXQgPSBYIyNfcyA/IC0xIDogMTsJCQkJCQlcCi0JZWxzZSBpZiAoWCMjX3MgIT0gWSMjX3MpCQkJCQlcCi0JICByZXQgPSBYIyNfcyA/IC0xIDogMTsJCQkJCQlcCi0JZWxzZSBpZiAoWCMjX2UgPiBZIyNfZSkJCQkJCQlcCi0JICByZXQgPSBYIyNfcyA/IC0xIDogMTsJCQkJCQlcCi0JZWxzZSBpZiAoWCMjX2UgPCBZIyNfZSkJCQkJCQlcCi0JICByZXQgPSBYIyNfcyA/IDEgOiAtMTsJCQkJCQlcCi0JZWxzZSBpZiAoX0ZQX0ZSQUNfR1RfIyN3YyhYLCBZKSkJCQkJXAotCSAgcmV0ID0gWCMjX3MgPyAtMSA6IDE7CQkJCQkJXAotCWVsc2UgaWYgKF9GUF9GUkFDX0dUXyMjd2MoWSwgWCkpCQkJCVwKLQkgIHJldCA9IFgjI19zID8gMSA6IC0xOwkJCQkJCVwKLQllbHNlCQkJCQkJCQlcCi0JICByZXQgPSAwOwkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0KLS8qIFNpbXBsaWZpY2F0aW9uIGZvciBzdHJpY3QgZXF1YWxpdHkuICAqLwotCi0jZGVmaW5lIF9GUF9DTVBfRVEoZnMsIHdjLCByZXQsIFgsIFkpCQkJCQkgIFwKLSAgZG8gewkJCQkJCQkJCSAgXAotICAgIC8qIE5BTnMgYXJlIHVub3JkZXJlZCAqLwkJCQkJCSAgXAotICAgIGlmICgoWCMjX2UgPT0gX0ZQX0VYUE1BWF8jI2ZzICYmICFfRlBfRlJBQ19aRVJPUF8jI3djKFgpKQkJICBcCi0JfHwgKFkjI19lID09IF9GUF9FWFBNQVhfIyNmcyAmJiAhX0ZQX0ZSQUNfWkVST1BfIyN3YyhZKSkpCSAgXAotICAgICAgewkJCQkJCQkJCSAgXAotCXJldCA9IDE7CQkJCQkJCSAgXAotICAgICAgfQkJCQkJCQkJCSAgXAotICAgIGVsc2UJCQkJCQkJCSAgXAotICAgICAgewkJCQkJCQkJCSAgXAotCXJldCA9ICEoWCMjX2UgPT0gWSMjX2UJCQkJCQkgIFwKLQkJJiYgX0ZQX0ZSQUNfRVFfIyN3YyhYLCBZKQkJCQkgIFwKLQkJJiYgKFgjI19zID09IFkjI19zIHx8ICFYIyNfZSAmJiBfRlBfRlJBQ19aRVJPUF8jI3djKFgpKSk7IFwKLSAgICAgIH0JCQkJCQkJCQkgIFwKLSAgfSB3aGlsZSAoMCkKLQotLyoKLSAqIE1haW4gc3F1YXJlIHJvb3Qgcm91dGluZS4gIFRoZSBpbnB1dCB2YWx1ZSBzaG91bGQgYmUgY29va2VkLgotICovCi0KLSNkZWZpbmUgX0ZQX1NRUlQoZnMsIHdjLCBSLCBYKQkJCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0gICAgX0ZQX0ZSQUNfREVDTF8jI3djKFQpOyBfRlBfRlJBQ19ERUNMXyMjd2MoUyk7CQkJXAotICAgIF9GUF9XX1RZUEUgcTsJCQkJCQkJXAotICAgIHN3aXRjaCAoWCMjX2MpCQkJCQkJCVwKLSAgICB7CQkJCQkJCQkJXAotICAgIGNhc2UgRlBfQ0xTX05BTjoJCQkJCQkJXAotICAgIAlSIyNfcyA9IDA7CQkJCQkJCVwKLSAgICAJUiMjX2MgPSBGUF9DTFNfTkFOOwkJCQkJCVwKLSAgICAJX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX1pFUk9GUkFDXyMjd2MpOwkJCVwKLSAgICAJYnJlYWs7CQkJCQkJCQlcCi0gICAgY2FzZSBGUF9DTFNfSU5GOgkJCQkJCQlcCi0gICAgCWlmIChYIyNfcykJCQkJCQkJXAotICAgIAkgIHsJCQkJCQkJCVwKLSAgICAJICAgIFIjI19zID0gMDsJCQkJCQkJXAotCSAgICBSIyNfYyA9IEZQX0NMU19OQU47IC8qIHNOQU4gKi8JCQkJXAotICAgIAkgIH0JCQkJCQkJCVwKLSAgICAJZWxzZQkJCQkJCQkJXAotICAgIAkgIHsJCQkJCQkJCVwKLSAgICAJICAgIFIjI19zID0gMDsJCQkJCQkJXAotICAgIAkgICAgUiMjX2MgPSBGUF9DTFNfSU5GOyAvKiBzcXJ0KCtpbmYpID0gK2luZiAqLwkJCVwKLSAgICAJICB9CQkJCQkJCQlcCi0gICAgCWJyZWFrOwkJCQkJCQkJXAotICAgIGNhc2UgRlBfQ0xTX1pFUk86CQkJCQkJCVwKLQlSIyNfcyA9IFgjI19zOwkJCQkJCQlcCi0gICAgCVIjI19jID0gRlBfQ0xTX1pFUk87IC8qIHNxcnQoKy0wKSA9ICstMCAqLwkJCVwKLQlicmVhazsJCQkJCQkJCVwKLSAgICBjYXNlIEZQX0NMU19OT1JNQUw6CQkJCQkJCVwKLSAgICAJUiMjX3MgPSAwOwkJCQkJCQlcCi0gICAgICAgIGlmIChYIyNfcykJCQkJCQkJXAotICAgICAgICAgIHsJCQkJCQkJCVwKLQkgICAgUiMjX2MgPSBGUF9DTFNfTkFOOyAvKiBzTkFOICovCQkJCVwKLQkgICAgYnJlYWs7CQkJCQkJCVwKLSAgICAgICAgICB9CQkJCQkJCQlcCi0gICAgCVIjI19jID0gRlBfQ0xTX05PUk1BTDsJCQkJCQlcCi0gICAgICAgIGlmIChYIyNfZSAmIDEpCQkJCQkJCVwKLSAgICAgICAgICBfRlBfRlJBQ19TTExfIyN3YyhYLCAxKTsJCQkJCVwKLSAgICAgICAgUiMjX2UgPSBYIyNfZSA+PiAxOwkJCQkJCVwKLSAgICAgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoUywgX0ZQX1pFUk9GUkFDXyMjd2MpOwkJCVwKLSAgICAgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoUiwgX0ZQX1pFUk9GUkFDXyMjd2MpOwkJCVwKLSAgICAgICAgcSA9IF9GUF9PVkVSRkxPV18jI2ZzOwkJCQkJCVwKLSAgICAgICAgX0ZQX0ZSQUNfU0xMXyMjd2MoWCwgMSk7CQkJCQlcCi0gICAgICAgIF9GUF9TUVJUX01FQVRfIyN3YyhSLCBTLCBULCBYLCBxKTsJCQkJXAotICAgICAgICBfRlBfRlJBQ19TUkxfIyN3YyhSLCAxKTsJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0vKgotICogQ29udmVydCBmcm9tIEZQIHRvIGludGVnZXIKLSAqLwotCi0vKiAiV2hlbiBhIE5hTiwgaW5maW5pdHksIGxhcmdlIHBvc2l0aXZlIGFyZ3VtZW50ID49IDIxNDc0ODM2NDguMCwgb3IKLSAqIGxhcmdlIG5lZ2F0aXZlIGFyZ3VtZW50IDw9IC0yMTQ3NDgzNjQ5LjAgaXMgY29udmVydGVkIHRvIGFuIGludGVnZXIsCi0gKiB0aGUgaW52YWxpZF9jdXJyZW50IGJpdC4uLnNob3VsZCBiZSBzZXQgYW5kIGZwX2V4Y2VwdGlvbl9JRUVFXzc1NCBzaG91bGQKLSAqIGJlIHJhaXNlZC4gSWYgdGhlIGZsb2F0aW5nIHBvaW50IGludmFsaWQgdHJhcCBpcyBkaXNhYmxlZCwgbm8gdHJhcCBvY2N1cnMKLSAqIGFuZCBhIG51bWVyaWNhbCByZXN1bHQgaXMgZ2VuZXJhdGVkOiBpZiB0aGUgc2lnbiBiaXQgb2YgdGhlIG9wZXJhbmQKLSAqIGlzIDAsIHRoZSByZXN1bHQgaXMgMjE0NzQ4MzY0NzsgaWYgdGhlIHNpZ24gYml0IG9mIHRoZSBvcGVyYW5kIGlzIDEsCi0gKiB0aGUgcmVzdWx0IGlzIC0yMTQ3NDgzNjQ4LiIKLSAqIFNpbWlsYXJseSBmb3IgY29udmVyc2lvbiB0byBleHRlbmRlZCBpbnRzLCBleGNlcHQgdGhhdCB0aGUgYm91bmRhcmllcwotICogYXJlID49IDJeNjMsIDw9IC0oMl42MyArIDEpLCBhbmQgdGhlIHJlc3VsdHMgYXJlIDJeNjMgKyAxIGZvciBzPTAgYW5kCi0gKiAtMl42MyBmb3Igcz0xLgotICogLS0gU1BBUkMgQXJjaGl0ZWN0dXJlIE1hbnVhbCBWOSwgQXBwZW5kaXggQiwgd2hpY2ggc3BlY2lmaWVzIGhvdwotICogU1BBUkNzIHJlc29sdmUgaW1wbGVtZW50YXRpb24gZGVwZW5kZW5jaWVzIGluIHRoZSBJRUVFLTc1NCBzcGVjLgotICogSSBkb24ndCBiZWxpZXZlIHRoYXQgdGhlIGNvZGUgYmVsb3cgZm9sbG93cyB0aGlzLiBJJ20gbm90IGV2ZW4gc3VyZQotICogaXQncyByaWdodCEKLSAqIEl0IGRvZXNuJ3QgY29wZSB3aXRoIG5lZWRpbmcgdG8gY29udmVydCB0byBhbiBuIGJpdCBpbnRlZ2VyIHdoZW4gdGhlcmUKLSAqIGlzIG5vIG4gYml0IGludGVnZXIgdHlwZS4gRm9ydHVuYXRlbHkgZ2NjIHByb3ZpZGVzIGxvbmcgbG9uZyBzbyB0aGlzCi0gKiBpc24ndCBhIHByb2JsZW0gZm9yIHNwYXJjMzIuCi0gKiBJIGhhdmUsIGhvd2V2ZXIsIGZpeGVkIGl0cyBOYU4gaGFuZGxpbmcgdG8gY29uZm9ybSBhcyBhYm92ZS4KLSAqICAgICAgICAgLS0gUE1NIDAyLzE5OTgKLSAqIE5COiByc2lnbmVkIGlzIG5vdCAnaXMgciBkZWNsYXJlZCBzaWduZWQ/JyBidXQgJ3Nob3VsZCB0aGUgdmFsdWUgc3RvcmVkCi0gKiBpbiByIGJlIHNpZ25lZCBvciB1bnNpZ25lZD8nLiByIGlzIGFsd2F5cyg/KSBkZWNsYXJlZCB1bnNpZ25lZC4KLSAqIENvbW1lbnRzIGJlbG93IGFyZSBtaW5lLCBCVFcgLS0gUE1NCi0gKi8KLSNkZWZpbmUgX0ZQX1RPX0lOVChmcywgd2MsIHIsIFgsIHJzaXplLCByc2lnbmVkKQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBzd2l0Y2ggKFgjI19jKQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotICAgICAgY2FzZSBGUF9DTFNfTk9STUFMOgkJCQkJCVwKLQlpZiAoWCMjX2UgPCAwKQkJCQkJCQlcCi0JICB7CQkJCQkJCQlcCi0JICAvKiBjYXNlIEZQX0NMU19OQU46IHNlZSBhYm92ZSEgKi8JCQkJXAotCSAgY2FzZSBGUF9DTFNfWkVSTzoJCQkJCQlcCi0JICAgIHIgPSAwOwkJCQkJCQlcCi0JICB9CQkJCQkJCQlcCi0JZWxzZSBpZiAoWCMjX2UgPj0gcnNpemUgLSAocnNpZ25lZCAhPSAwKSkJCQlcCi0JICB7CS8qIG92ZXJmbG93ICovCQkJCQkJXAotCSAgY2FzZSBGUF9DTFNfTkFOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgY2FzZSBGUF9DTFNfSU5GOgkJCQkJCVwKLQkgICAgaWYgKHJzaWduZWQpCQkJCQkJXAotCSAgICAgIHsJCQkJCQkJCVwKLQkJciA9IDE7CQkJCQkJCVwKLQkJciA8PD0gcnNpemUgLSAxOwkJCQkJXAotCQlyIC09IDEgLSBYIyNfczsJCQkJCQlcCi0JICAgICAgfQkJCQkJCQkJXAotCSAgICBlbHNlCQkJCQkJCVwKLQkgICAgICB7CQkJCQkJCQlcCi0JCXIgPSAwOwkJCQkJCQlcCi0JCWlmICghWCMjX3MpCQkJCQkJXAotCQkgIHIgPSB+cjsJCQkJCQlcCi0JICAgICAgfQkJCQkJCQkJXAotCSAgfQkJCQkJCQkJXAotCWVsc2UJCQkJCQkJCVwKLQkgIHsJCQkJCQkJCVwKLQkgICAgaWYgKF9GUF9XX1RZUEVfU0laRSp3YyA8IHJzaXplKQkJCQlcCi0JICAgICAgewkJCQkJCQkJXAotCQlfRlBfRlJBQ19BU1NFTUJMRV8jI3djKHIsIFgsIHJzaXplKTsJCQlcCi0JCXIgPDw9IFgjI19lIC0gX0ZQX1dGUkFDQklUU18jI2ZzOwkJCVwKLQkgICAgICB9CQkJCQkJCQlcCi0JICAgIGVsc2UJCQkJCQkJXAotCSAgICAgIHsJCQkJCQkJCVwKLQkJaWYgKFgjI19lID49IF9GUF9XRlJBQ0JJVFNfIyNmcykJCQlcCi0JCSAgX0ZQX0ZSQUNfU0xMXyMjd2MoWCwgKFgjI19lIC0gX0ZQX1dGUkFDQklUU18jI2ZzICsgMSkpO1wKLQkJZWxzZQkJCQkJCQlcCi0JCSAgX0ZQX0ZSQUNfU1JMXyMjd2MoWCwgKF9GUF9XRlJBQ0JJVFNfIyNmcyAtIFgjI19lIC0gMSkpO1wKLQkJX0ZQX0ZSQUNfQVNTRU1CTEVfIyN3YyhyLCBYLCByc2l6ZSk7CQkJXAotCSAgICAgIH0JCQkJCQkJCVwKLQkgICAgaWYgKHJzaWduZWQgJiYgWCMjX3MpCQkJCQlcCi0JICAgICAgciA9IC1yOwkJCQkJCQlcCi0JICB9CQkJCQkJCQlcCi0JYnJlYWs7CQkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9GUF9GUk9NX0lOVChmcywgd2MsIFgsIHIsIHJzaXplLCBydHlwZSkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgaWYgKHIpCQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCVgjI19jID0gRlBfQ0xTX05PUk1BTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKChYIyNfcyA9IChyIDwgMCkpKQkJCQkJCVwKLQkgIHIgPSAtcjsJCQkJCQkJXAotCS8qIE5vdGUgdGhhdCBgcicgaXMgbm93IGNvbnNpZGVyZWQgdW5zaWduZWQsIHNvIHdlIGRvbid0IGhhdmUJXAotCSAgIHRvIHdvcnJ5IGFib3V0IHRoZSBzaW5nbGUgc2lnbmVkIG92ZXJmbG93IGNhc2UuICAqLwkJXAotCQkJCQkJCQkJXAotCWlmIChyc2l6ZSA8PSBfRlBfV19UWVBFX1NJWkUpCQkJCQlcCi0JICBfX0ZQX0NMWihYIyNfZSwgcik7CQkJCQkJXAotCWVsc2UJCQkJCQkJCVwKLQkgIF9fRlBfQ0xaXzIoWCMjX2UsIChfRlBfV19UWVBFKShyID4+IF9GUF9XX1RZUEVfU0laRSksIAlcCi0JCSAgICAgKF9GUF9XX1RZUEUpcik7CQkJCQlcCi0JaWYgKHJzaXplIDwgX0ZQX1dfVFlQRV9TSVpFKQkJCQkJXAotCQlYIyNfZSAtPSAoX0ZQX1dfVFlQRV9TSVpFIC0gcnNpemUpOwkJCVwKLQlYIyNfZSA9IHJzaXplIC0gWCMjX2UgLSAxOwkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChfRlBfRlJBQ0JJVFNfIyNmcyA8IHJzaXplICYmIF9GUF9XRlJBQ0JJVFNfIyNmcyA8IFgjI19lKQlcCi0JICBfX0ZQX0ZSQUNfU1JTXzEociwgKFgjI19lIC0gX0ZQX1dGUkFDQklUU18jI2ZzKSwgcnNpemUpOwlcCi0JciAmPSB+KChfRlBfV19UWVBFKTEgPDwgWCMjX2UpOwkJCQkJXAotCV9GUF9GUkFDX0RJU0FTU0VNQkxFXyMjd2MoWCwgKCh1bnNpZ25lZCBydHlwZSlyKSwgcnNpemUpOwlcCi0JX0ZQX0ZSQUNfU0xMXyMjd2MoWCwgKF9GUF9XRlJBQ0JJVFNfIyNmcyAtIFgjI19lIC0gMSkpOwkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCVgjI19jID0gRlBfQ0xTX1pFUk8sIFgjI19zID0gMDsJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotI2RlZmluZSBGUF9DT05WKGRmcyxzZnMsZHdjLHN3YyxELFMpCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICBfRlBfRlJBQ19DT05WXyMjZHdjIyNfIyNzd2MoZGZzLCBzZnMsIEQsIFMpOwlcCi0gICAgRCMjX2UgPSBTIyNfZTsJCQkJCVwKLSAgICBEIyNfYyA9IFMjI19jOwkJCQkJXAotICAgIEQjI19zID0gUyMjX3M7CQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLS8qCi0gKiBIZWxwZXIgcHJpbWl0aXZlcy4KLSAqLwotCi0vKiBDb3VudCBsZWFkaW5nIHplcm9zIGluIGEgd29yZC4gICovCi0KLSNpZm5kZWYgX19GUF9DTFoKLSNpZiBfRlBfV19UWVBFX1NJWkUgPCA2NAotLyogdGhpcyBpcyBqdXN0IHRvIHNodXQgdGhlIGNvbXBpbGVyIHVwIGFib3V0IHNoaWZ0cyA+IHdvcmQgbGVuZ3RoIC0tIFBNTSAwMi8xOTk4ICovCi0jZGVmaW5lIF9fRlBfQ0xaKHIsIHgpCQkJCVwKLSAgZG8gewkJCQkJCVwKLSAgICBfRlBfV19UWVBFIF90ID0gKHgpOwkJCVwKLSAgICByID0gX0ZQX1dfVFlQRV9TSVpFIC0gMTsJCQlcCi0gICAgaWYgKF90ID4gMHhmZmZmKSByIC09IDE2OwkJCVwKLSAgICBpZiAoX3QgPiAweGZmZmYpIF90ID4+PSAxNjsJCQlcCi0gICAgaWYgKF90ID4gMHhmZikgciAtPSA4OwkJCVwKLSAgICBpZiAoX3QgPiAweGZmKSBfdCA+Pj0gODsJCQlcCi0gICAgaWYgKF90ICYgMHhmMCkgciAtPSA0OwkJCVwKLSAgICBpZiAoX3QgJiAweGYwKSBfdCA+Pj0gNDsJCQlcCi0gICAgaWYgKF90ICYgMHhjKSByIC09IDI7CQkJXAotICAgIGlmIChfdCAmIDB4YykgX3QgPj49IDI7CQkJXAotICAgIGlmIChfdCAmIDB4MikgciAtPSAxOwkJCVwKLSAgfSB3aGlsZSAoMCkKLSNlbHNlIC8qIG5vdCBfRlBfV19UWVBFX1NJWkUgPCA2NCAqLwotI2RlZmluZSBfX0ZQX0NMWihyLCB4KQkJCQlcCi0gIGRvIHsJCQkJCQlcCi0gICAgX0ZQX1dfVFlQRSBfdCA9ICh4KTsJCQlcCi0gICAgciA9IF9GUF9XX1RZUEVfU0laRSAtIDE7CQkJXAotICAgIGlmIChfdCA+IDB4ZmZmZmZmZmYpIHIgLT0gMzI7CQlcCi0gICAgaWYgKF90ID4gMHhmZmZmZmZmZikgX3QgPj49IDMyOwkJXAotICAgIGlmIChfdCA+IDB4ZmZmZikgciAtPSAxNjsJCQlcCi0gICAgaWYgKF90ID4gMHhmZmZmKSBfdCA+Pj0gMTY7CQkJXAotICAgIGlmIChfdCA+IDB4ZmYpIHIgLT0gODsJCQlcCi0gICAgaWYgKF90ID4gMHhmZikgX3QgPj49IDg7CQkJXAotICAgIGlmIChfdCAmIDB4ZjApIHIgLT0gNDsJCQlcCi0gICAgaWYgKF90ICYgMHhmMCkgX3QgPj49IDQ7CQkJXAotICAgIGlmIChfdCAmIDB4YykgciAtPSAyOwkJCVwKLSAgICBpZiAoX3QgJiAweGMpIF90ID4+PSAyOwkJCVwKLSAgICBpZiAoX3QgJiAweDIpIHIgLT0gMTsJCQlcCi0gIH0gd2hpbGUgKDApCi0jZW5kaWYgLyogbm90IF9GUF9XX1RZUEVfU0laRSA8IDY0ICovCi0jZW5kaWYgLyogbmRlZiBfX0ZQX0NMWiAqLwotCi0jZGVmaW5lIF9GUF9ESVZfSEVMUF9pbW0ocSwgciwgbiwgZCkJCVwKLSAgZG8gewkJCQkJCVwKLSAgICBxID0gbiAvIGQsIHIgPSBuICUgZDsJCQlcCi0gIH0gd2hpbGUgKDApCi0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zZnAtbWFjaGluZS5oIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L3NmcC1tYWNoaW5lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMTdkODMuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3NmcC1tYWNoaW5lLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNzcgKzAsMCBAQAotLyogTWFjaGluZS1kZXBlbmRlbnQgc29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZGVmaW5pdGlvbnMuICBQUEMgdmVyc2lvbi4KLSAgIENvcHlyaWdodCAoQykgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgotCi0gICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQotICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmCi0gICBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotCi0gICBBY3R1YWxseSwgdGhpcyBpcyBhIFBQQyAoMzJiaXQpIHZlcnNpb24sIHdyaXR0ZW4gYmFzZWQgb24gdGhlCi0gICBpMzg2LCBzcGFyYywgYW5kIHNwYXJjNjQgdmVyc2lvbnMsIGJ5IG1lLAotICAgUGV0ZXIgTWF5ZGVsbCAocG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51aykuCi0gICBDb21tZW50cyBhcmUgYnkgYW5kIGxhcmdlIGFsc28gbWluZSwgYWx0aG91Z2ggdGhleSBtYXkgYmUgaW5hY2N1cmF0ZS4KLQotICAgSW4gcGlja2luZyBvdXQgYXNtIGZyYWdtZW50cyBJJ3ZlIGdvbmUgd2l0aCB0aGUgbG93ZXN0IGNvbW1vbgotICAgZGVub21pbmF0b3IsIHdoaWNoIGFsc28gaGFwcGVucyB0byBiZSB0aGUgaGFyZHdhcmUgSSBoYXZlIDotPgotICAgVGhhdCBpcywgYSBTUEFSQyB3aXRob3V0IGhhcmR3YXJlIG11bHRpcGx5IGFuZCBkaXZpZGUuCi0gKi8KLQotLyogYmFzaWMgd29yZCBzaXplIGRlZmluaXRpb25zICovCi0jZGVmaW5lIF9GUF9XX1RZUEVfU0laRQkJMzIKLSNkZWZpbmUgX0ZQX1dfVFlQRQkJdW5zaWduZWQgbG9uZwotI2RlZmluZSBfRlBfV1NfVFlQRQkJc2lnbmVkIGxvbmcKLSNkZWZpbmUgX0ZQX0lfVFlQRQkJbG9uZwotCi0jZGVmaW5lIF9fbGxfQgkJCSgoVVd0eXBlKSAxIDw8IChXX1RZUEVfU0laRSAvIDIpKQotI2RlZmluZSBfX2xsX2xvd3BhcnQodCkJCSgoVVd0eXBlKSAodCkgJiAoX19sbF9CIC0gMSkpCi0jZGVmaW5lIF9fbGxfaGlnaHBhcnQodCkJKChVV3R5cGUpICh0KSA+PiAoV19UWVBFX1NJWkUgLyAyKSkKLQotLyogWW91IGNhbiBvcHRpb25hbGx5IGNvZGUgc29tZSB0aGluZ3MgbGlrZSBhZGRpdGlvbiBpbiBhc20uIEZvcgotICogZXhhbXBsZSwgaTM4NiBkZWZpbmVzIF9fRlBfRlJBQ19BRERfMiBhcyBhc20uIElmIHlvdSBkb24ndAotICogdGhlbiB5b3UgZ2V0IGEgZnJhZ21lbnQgb2YgQyBjb2RlIFtpZiB5b3UgY2hhbmdlIGFuICNpZmRlZiAwCi0gKiBpbiBvcC0yLmhdIG9yIGEgY2FsbCB0byBhZGRfc3NhYWFhIChzZWUgYmVsb3cpLgotICogR29vZCBwbGFjZXMgdG8gbG9vayBmb3IgYXNtIGZyYWdtZW50cyB0byB1c2UgYXJlIGdjYyBhbmQgZ2xpYmMuCi0gKiBnY2MncyBsb25nbG9uZy5oIGlzIHVzZWZ1bC4KLSAqLwotCi0vKiBXZSBuZWVkIHRvIGtub3cgaG93IHRvIG11bHRpcGx5IGFuZCBkaXZpZGUuIElmIHRoZSBob3N0IHdvcmQgc2l6ZQotICogaXMgPj0gMipmcmFjYml0cyB5b3UgY2FuIHVzZSBGUF9NVUxfTUVBVF9uX2ltbSh0LFIsWCxZKSB3aGljaAotICogY29kZXMgdGhlIG11bHRpcGx5IHdpdGggd2hhdGV2ZXIgZ2NjIGRvZXMgdG8gJ2EgKiBiJy4KLSAqIF9GUF9NVUxfTUVBVF9uX3dpZGUodCxSLFgsWSxmKSBpcyB1c2VkIHdoZW4geW91IGhhdmUgYW4gYXNtCi0gKiBmdW5jdGlvbiB0aGF0IGNhbiBtdWx0aXBseSB0d28gMVcgdmFsdWVzIGFuZCBnZXQgYSAyVyByZXN1bHQuCi0gKiBPdGhlcndpc2UgeW91J3JlIHN0dWNrIHdpdGggX0ZQX01VTF9NRUFUX25faGFyZCh0LFIsWCxZKSB3aGljaAotICogZG9lcyBiaXRzaGlmdGluZyB0byBhdm9pZCBvdmVyZmxvdy4KLSAqIEZvciBkaXZpc2lvbiB0aGVyZSBpcyBGUF9ESVZfTUVBVF9uX2ltbSh0LFIsWCxZLGYpIGZvciB3b3JkIHNpemUKLSAqID49IDIqZnJhY2JpdHMsIHdoZXJlIGYgaXMgZWl0aGVyIF9GUF9ESVZfSEVMUF9pbW0gb3IKLSAqIF9GUF9ESVZfSEVMUF9sZGl2IChzZWUgb3AtMS5oKS4KLSAqIF9GUF9ESVZfTUVBVF91ZGl2KCkgaXMgaWYgeW91IGhhdmUgYXNtIHRvIGRvIDJXLzFXID0+ICgxVywgMVcpLgotICogW0dDQyBhbmQgZ2xpYmMgaGF2ZSBsb25nbG9uZy5oIHdoaWNoIGhhcyB0aGUgYXNtIG1hY3JvIHVkaXZfcXJubmQKLSAqIHRvIGRvIHRoaXMuXQotICogSW4gZ2VuZXJhbCwgJ24nIGlzIHRoZSBudW1iZXIgb2Ygd29yZHMgcmVxdWlyZWQgdG8gaG9sZCB0aGUgdHlwZSwKLSAqIGFuZCAndCcgaXMgZWl0aGVyIFMsIEQgb3IgUSBmb3Igc2luZ2xlL2RvdWJsZS9xdWFkLgotICogICAgICAgICAgIC0tIFBNTQotICovCi0vKiBFeGFtcGxlOiBTUEFSQzY0OgotICogI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkJX0ZQX01VTF9NRUFUXzFfaW1tKFMsUixYLFkpCi0gKiAjZGVmaW5lIF9GUF9NVUxfTUVBVF9EKFIsWCxZKQlfRlBfTVVMX01FQVRfMV93aWRlKEQsUixYLFksdW11bF9wcG1tKQotICogI2RlZmluZSBfRlBfTVVMX01FQVRfUShSLFgsWSkJX0ZQX01VTF9NRUFUXzJfd2lkZShRLFIsWCxZLHVtdWxfcHBtbSkKLSAqCi0gKiAjZGVmaW5lIF9GUF9ESVZfTUVBVF9TKFIsWCxZKQlfRlBfRElWX01FQVRfMV9pbW0oUyxSLFgsWSxfRlBfRElWX0hFTFBfaW1tKQotICogI2RlZmluZSBfRlBfRElWX01FQVRfRChSLFgsWSkJX0ZQX0RJVl9NRUFUXzFfdWRpdihELFIsWCxZKQotICogI2RlZmluZSBfRlBfRElWX01FQVRfUShSLFgsWSkJX0ZQX0RJVl9NRUFUXzJfdWRpdl82NChRLFIsWCxZKQotICoKLSAqIEV4YW1wbGU6IGkzODY6Ci0gKiAjZGVmaW5lIF9GUF9NVUxfTUVBVF9TKFIsWCxZKSAgIF9GUF9NVUxfTUVBVF8xX3dpZGUoUyxSLFgsWSxfaTM4Nl9tdWxfMzJfNjQpCi0gKiAjZGVmaW5lIF9GUF9NVUxfTUVBVF9EKFIsWCxZKSAgIF9GUF9NVUxfTUVBVF8yX3dpZGUoRCxSLFgsWSxfaTM4Nl9tdWxfMzJfNjQpCi0gKgotICogI2RlZmluZSBfRlBfRElWX01FQVRfUyhSLFgsWSkgICBfRlBfRElWX01FQVRfMV91ZGl2KFMsUixYLFksX2kzODZfZGl2XzY0XzMyKQotICogI2RlZmluZSBfRlBfRElWX01FQVRfRChSLFgsWSkgICBfRlBfRElWX01FQVRfMl91ZGl2XzY0KEQsUixYLFkpCi0gKi8KLQotI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkgICBfRlBfTVVMX01FQVRfMV93aWRlKFMsUixYLFksdW11bF9wcG1tKQotI2RlZmluZSBfRlBfTVVMX01FQVRfRChSLFgsWSkgICBfRlBfTVVMX01FQVRfMl93aWRlKEQsUixYLFksdW11bF9wcG1tKQotCi0jZGVmaW5lIF9GUF9ESVZfTUVBVF9TKFIsWCxZKSAgIF9GUF9ESVZfTUVBVF8xX3VkaXYoUyxSLFgsWSkKLSNkZWZpbmUgX0ZQX0RJVl9NRUFUX0QoUixYLFkpICAgX0ZQX0RJVl9NRUFUXzJfdWRpdl82NChELFIsWCxZKQotCi0vKiBUaGVzZSBtYWNyb3MgZGVmaW5lIHdoYXQgTmFOIGxvb2tzIGxpa2UuIFRoZXkncmUgc3VwcG9zZWQgdG8gZXhwYW5kIHRvCi0gKiBhIGNvbW1hLXNlcGFyYXRlZCBzZXQgb2YgMzJiaXQgdW5zaWduZWQgaW50cyB0aGF0IGVuY29kZSBOYU4uCi0gKi8KLSNkZWZpbmUgX0ZQX05BTkZSQUNfUwkJX0ZQX1FOQU5CSVRfUwotI2RlZmluZSBfRlBfTkFORlJBQ19ECQlfRlBfUU5BTkJJVF9ELCAwCi0jZGVmaW5lIF9GUF9OQU5GUkFDX1EgICAgICAgICAgIF9GUF9RTkFOQklUX1EsIDAsIDAsIDAKLQotI2RlZmluZSBfRlBfS0VFUE5BTkZSQUNQIDEKLQotLyogVGhpcyBtYWNybyBhcHBlYXJzIHRvIGJlIGNhbGxlZCB3aGVuIGJvdGggWCBhbmQgWSBhcmUgTmFOcywgYW5kCi0gKiBoYXMgdG8gY2hvb3NlIG9uZSBhbmQgY29weSBpdCB0byBSLiBpMzg2IGdvZXMgZm9yIHRoZSBsYXJnZXIgb2YgdGhlCi0gKiB0d28sIHNwYXJjNjQganVzdCBwaWNrcyBZLiBJIGRvbid0IHVuZGVyc3RhbmQgdGhpcyBhdCBhbGwgc28gSSdsbAotICogZ28gd2l0aCBzcGFyYzY0IGJlY2F1c2UgaXQncyBzaG9ydGVyIDotPiAgIC0tIFBNTQotICovCi0jZGVmaW5lIF9GUF9DSE9PU0VOQU4oZnMsIHdjLCBSLCBYLCBZKQkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgUiMjX3MgPSBZIyNfczsJCQkJCVwKLSAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUixZKTsJCQkJXAotICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi1leHRlcm4gdm9pZCBmcF91bnBhY2tfZChsb25nICosIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLAotCQkJbG9uZyAqLCBsb25nICosIHZvaWQgKik7Ci1leHRlcm4gaW50ICBmcF9wYWNrX2Qodm9pZCAqLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nKTsKLWV4dGVybiBpbnQgIGZwX3BhY2tfZHModm9pZCAqLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nKTsKLQotI2RlZmluZSBfX0ZQX1VOUEFDS19SQVdfMShmcywgWCwgdmFsKQkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgKl9mbG8gPQkJCVwKLSAgICAJKHVuaW9uIF9GUF9VTklPTl8jI2ZzICopdmFsOwkJCVwKLQkJCQkJCQlcCi0gICAgWCMjX2YgPSBfZmxvLT5iaXRzLmZyYWM7CQkJCVwKLSAgICBYIyNfZSA9IF9mbG8tPmJpdHMuZXhwOwkJCQlcCi0gICAgWCMjX3MgPSBfZmxvLT5iaXRzLnNpZ247CQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfX0ZQX1VOUEFDS19SQVdfMihmcywgWCwgdmFsKQkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgKl9mbG8gPQkJCVwKLSAgICAJKHVuaW9uIF9GUF9VTklPTl8jI2ZzICopdmFsOwkJCVwKLQkJCQkJCQlcCi0gICAgWCMjX2YwID0gX2Zsby0+Yml0cy5mcmFjMDsJCQkJXAotICAgIFgjI19mMSA9IF9mbG8tPmJpdHMuZnJhYzE7CQkJCVwKLSAgICBYIyNfZSAgPSBfZmxvLT5iaXRzLmV4cDsJCQkJXAotICAgIFgjI19zICA9IF9mbG8tPmJpdHMuc2lnbjsJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9fRlBfVU5QQUNLX1MoWCx2YWwpCQlcCi0gIGRvIHsJCQkJCVwKLSAgICBfX0ZQX1VOUEFDS19SQVdfMShTLFgsdmFsKTsJCVwKLSAgICBfRlBfVU5QQUNLX0NBTk9OSUNBTChTLDEsWCk7CVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfX0ZQX1VOUEFDS19EKFgsdmFsKQkJXAotCWZwX3VucGFja19kKCZYIyNfcywgJlgjI19mMSwgJlgjI19mMCwgJlgjI19lLCAmWCMjX2MsIHZhbCkKLQotI2RlZmluZSBfX0ZQX1BBQ0tfUkFXXzEoZnMsIHZhbCwgWCkJCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzICpfZmxvID0JCQlcCi0gICAgCSh1bmlvbiBfRlBfVU5JT05fIyNmcyAqKXZhbDsJCQlcCi0JCQkJCQkJXAotICAgIF9mbG8tPmJpdHMuZnJhYyA9IFgjI19mOwkJCQlcCi0gICAgX2Zsby0+Yml0cy5leHAgID0gWCMjX2U7CQkJCVwKLSAgICBfZmxvLT5iaXRzLnNpZ24gPSBYIyNfczsJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9fRlBfUEFDS19SQVdfMihmcywgdmFsLCBYKQkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgKl9mbG8gPQkJCVwKLSAgICAJKHVuaW9uIF9GUF9VTklPTl8jI2ZzICopdmFsOwkJCVwKLQkJCQkJCQlcCi0gICAgX2Zsby0+Yml0cy5mcmFjMCA9IFgjI19mMDsJCQkJXAotICAgIF9mbG8tPmJpdHMuZnJhYzEgPSBYIyNfZjE7CQkJCVwKLSAgICBfZmxvLT5iaXRzLmV4cCAgID0gWCMjX2U7CQkJCVwKLSAgICBfZmxvLT5iaXRzLnNpZ24gID0gWCMjX3M7CQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLSNkZWZpbmUgX19GUFVfRlBTQ1IJKGN1cnJlbnQtPnRocmVhZC5mcHNjci52YWwpCi0KLS8qIFdlIG9ubHkgYWN0dWFsbHkgd3JpdGUgdG8gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyCi0gKiBpZiBleGNlcHRpb25zIHNpZ25hbGxlZCAoaWYgYW55KSB3aWxsIG5vdCB0cmFwLgotICovCi0jZGVmaW5lIF9fRlBVX0VOQUJMRURfRVhDIFwKLSh7CQkJCQkJXAotCShfX0ZQVV9GUFNDUiA+PiAzKSAmIDB4MWY7CVwKLX0pCi0KLSNkZWZpbmUgX19GUFVfVFJBUF9QKGJpdHMpIFwKLQkoKF9fRlBVX0VOQUJMRURfRVhDICYgKGJpdHMpKSAhPSAwKQotCi0jZGVmaW5lIF9fRlBfUEFDS19TKHZhbCxYKQkJCVwKLSh7ICBpbnQgX19leGMgPSBfRlBfUEFDS19DQU5PTklDQUwoUywxLFgpOwlcCi0gICAgaWYoIV9fZXhjIHx8ICFfX0ZQVV9UUkFQX1AoX19leGMpKQkJXAotICAgICAgICBfX0ZQX1BBQ0tfUkFXXzEoUyx2YWwsWCk7CQlcCi0gICAgX19leGM7CQkJCQlcCi19KQotCi0jZGVmaW5lIF9fRlBfUEFDS19EKHZhbCxYKQkJCVwKLQlmcF9wYWNrX2QodmFsLCBYIyNfcywgWCMjX2YxLCBYIyNfZjAsIFgjI19lLCBYIyNfYykKLQotI2RlZmluZSBfX0ZQX1BBQ0tfRFModmFsLFgpCQkJXAotCWZwX3BhY2tfZHModmFsLCBYIyNfcywgWCMjX2YxLCBYIyNfZjAsIFgjI19lLCBYIyNfYykKLQotLyogT2J0YWluIHRoZSBjdXJyZW50IHJvdW5kaW5nIG1vZGUuICovCi0jZGVmaW5lIEZQX1JPVU5ETU9ERQkJCVwKLSh7CQkJCQlcCi0JX19GUFVfRlBTQ1IgJiAweDM7CQlcCi19KQotCi0vKiB0aGUgYXNtIGZyYWdtZW50cyBnbyBoZXJlOiBhbGwgdGhlc2UgYXJlIHRha2VuIGZyb20gZ2xpYmMtMi4wLjUncwotICogc3RkbGliL2xvbmdsb25nLmgKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0KLS8qIGFkZF9zc2FhYWEgaXMgdXNlZCBpbiBvcC0yLmggYW5kIHNob3VsZCBiZSBlcXVpdmFsZW50IHRvCi0gKiAjZGVmaW5lIGFkZF9zc2FhYWEoc2gsc2wsYWgsYWwsYmgsYmwpIChzaCA9IGFoK2JoKyAoKCBzbCA9IGFsK2JsKSA8IGFsKSkKLSAqIGFkZF9zc2FhYWEoaGlnaF9zdW0sIGxvd19zdW0sIGhpZ2hfYWRkZW5kXzEsIGxvd19hZGRlbmRfMSwKLSAqIGhpZ2hfYWRkZW5kXzIsIGxvd19hZGRlbmRfMikgYWRkcyB0d28gVVd0eXBlIGludGVnZXJzLCBjb21wb3NlZCBieQotICogSElHSF9BRERFTkRfMSBhbmQgTE9XX0FEREVORF8xLCBhbmQgSElHSF9BRERFTkRfMiBhbmQgTE9XX0FEREVORF8yCi0gKiByZXNwZWN0aXZlbHkuICBUaGUgcmVzdWx0IGlzIHBsYWNlZCBpbiBISUdIX1NVTSBhbmQgTE9XX1NVTS4gIE92ZXJmbG93Ci0gKiAoaS5lLiBjYXJyeSBvdXQpIGlzIG5vdCBzdG9yZWQgYW55d2hlcmUsIGFuZCBpcyBsb3N0LgotICovCi0jZGVmaW5lIGFkZF9zc2FhYWEoc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYmgpICYmIChiaCkgPT0gMCkJCQkJXAotICAgICAgX19hc21fXyAoInthJUk0fGFkZCVJNGN9ICUxLCUzLCU0XG5cdHthemV8YWRkemV9ICUwLCUyIgkJXAotCSAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKLQkgICAgICAgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCi0JICAgICA6ICIlciIgKChVU0l0eXBlKShhaCkpLAkJCQkJXAotCSAgICAgICAiJXIiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKLQkgICAgICAgInJJIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAotICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChiaCkgJiYgKGJoKSA9PX4oVVNJdHlwZSkgMCkJCVwKLSAgICAgIF9fYXNtX18gKCJ7YSVJNHxhZGQlSTRjfSAlMSwlMywlNFxuXHR7YW1lfGFkZG1lfSAlMCwlMiIJCVwKLQkgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCi0JICAgICAgICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAotCSAgICAgOiAiJXIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKLQkgICAgICAgIiVyIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCi0JICAgICAgICJySSIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKLSAgICBlbHNlCQkJCQkJCQlcCi0gICAgICBfX2FzbV9fICgie2ElSTV8YWRkJUk1Y30gJTEsJTQsJTVcblx0e2FlfGFkZGV9ICUwLCUyLCUzIgkJXAotCSAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKLQkgICAgICAgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCi0JICAgICA6ICIlciIgKChVU0l0eXBlKShhaCkpLAkJCQkJXAotCSAgICAgICAiciIgKChVU0l0eXBlKShiaCkpLAkJCQkJXAotCSAgICAgICAiJXIiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKLQkgICAgICAgInJJIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAotICB9IHdoaWxlICgwKQotCi0vKiBzdWJfZGRtbXNzIGlzIHVzZWQgaW4gb3AtMi5oIGFuZCB1ZGl2bW9kdGk0LmMgYW5kIHNob3VsZCBiZSBlcXVpdmFsZW50IHRvCi0gKiAjZGVmaW5lIHN1Yl9kZG1tc3Moc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgKHNoID0gYWgtYmggLSAoKHNsID0gYWwtYmwpID4gYWwpKQotICogc3ViX2RkbW1zcyhoaWdoX2RpZmZlcmVuY2UsIGxvd19kaWZmZXJlbmNlLCBoaWdoX21pbnVlbmQsIGxvd19taW51ZW5kLAotICogaGlnaF9zdWJ0cmFoZW5kLCBsb3dfc3VidHJhaGVuZCkgc3VidHJhY3RzIHR3byB0d28td29yZCBVV3R5cGUgaW50ZWdlcnMsCi0gKiBjb21wb3NlZCBieSBISUdIX01JTlVFTkRfMSBhbmQgTE9XX01JTlVFTkRfMSwgYW5kIEhJR0hfU1VCVFJBSEVORF8yIGFuZAotICogTE9XX1NVQlRSQUhFTkRfMiByZXNwZWN0aXZlbHkuICBUaGUgcmVzdWx0IGlzIHBsYWNlZCBpbiBISUdIX0RJRkZFUkVOQ0UKLSAqIGFuZCBMT1dfRElGRkVSRU5DRS4gIE92ZXJmbG93IChpLmUuIGNhcnJ5IG91dCkgaXMgbm90IHN0b3JlZCBhbnl3aGVyZSwKLSAqIGFuZCBpcyBsb3N0LgotICovCi0jZGVmaW5lIHN1Yl9kZG1tc3Moc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYWgpICYmIChhaCkgPT0gMCkJCQkJXAotICAgICAgX19hc21fXyAoIntzZiVJM3xzdWJmJUkzY30gJTEsJTQsJTNcblx0e3NmemV8c3ViZnplfSAlMCwlMiIJXAotCSAgICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAotCQkgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCi0JICAgICAgIDogInIiICgoVVNJdHlwZSkoYmgpKSwJCQkJCVwKLQkJICJySSIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAotCQkgInIiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCi0gICAgZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGFoKSAmJiAoYWgpID09fihVU0l0eXBlKSAwKQkJXAotICAgICAgX19hc21fXyAoIntzZiVJM3xzdWJmJUkzY30gJTEsJTQsJTNcblx0e3NmbWV8c3ViZm1lfSAlMCwlMiIJXAotCSAgICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAotCQkgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCi0JICAgICAgIDogInIiICgoVVNJdHlwZSkoYmgpKSwJCQkJCVwKLQkJICJySSIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAotCQkgInIiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCi0gICAgZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGJoKSAmJiAoYmgpID09IDApCQkJXAotICAgICAgX19hc21fXyAoIntzZiVJM3xzdWJmJUkzY30gJTEsJTQsJTNcblx0e2FtZXxhZGRtZX0gJTAsJTIiCQlcCi0JICAgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCi0JCSAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKLQkgICAgICAgOiAiciIgKChVU0l0eXBlKShhaCkpLAkJCQkJXAotCQkgInJJIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCi0JCSAiciIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKLSAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYmgpICYmIChiaCkgPT1+KFVTSXR5cGUpIDApCQlcCi0gICAgICBfX2FzbV9fICgie3NmJUkzfHN1YmYlSTNjfSAlMSwlNCwlM1xuXHR7YXplfGFkZHplfSAlMCwlMiIJCVwKLQkgICAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKLQkJICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAotCSAgICAgICA6ICJyIiAoKFVTSXR5cGUpKGFoKSksCQkJCQlcCi0JCSAickkiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKLQkJICJyIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAotICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgIF9fYXNtX18gKCJ7c2YlSTR8c3ViZiVJNGN9ICUxLCU1LCU0XG5cdHtzZmV8c3ViZmV9ICUwLCUzLCUyIglcCi0JICAgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCi0JCSAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKLQkgICAgICAgOiAiciIgKChVU0l0eXBlKShhaCkpLAkJCQkJXAotCQkgInIiICgoVVNJdHlwZSkoYmgpKSwJCQkJCVwKLQkJICJySSIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAotCQkgInIiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLS8qIGFzbSBmcmFnbWVudHMgZm9yIG11bCBhbmQgZGl2ICovCi0KLS8qIHVtdWxfcHBtbShoaWdoX3Byb2QsIGxvd19wcm9kLCBtdWx0aXBsZXIsIG11bHRpcGxpY2FuZCkgbXVsdGlwbGllcyB0d28KLSAqIFVXdHlwZSBpbnRlZ2VycyBNVUxUSVBMRVIgYW5kIE1VTFRJUExJQ0FORCwgYW5kIGdlbmVyYXRlcyBhIHR3byBVV3R5cGUKLSAqIHdvcmQgcHJvZHVjdCBpbiBISUdIX1BST0QgYW5kIExPV19QUk9ELgotICovCi0jZGVmaW5lIHVtdWxfcHBtbShwaCwgcGwsIG0wLCBtMSkJCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBVU0l0eXBlIF9fbTAgPSAobTApLCBfX20xID0gKG0xKTsJCQkJCVwKLSAgICBfX2FzbV9fICgibXVsaHd1ICUwLCUxLCUyIgkJCQkJCVwKLQkgICAgIDogIj1yIiAoKFVTSXR5cGUpKHBoKSkJCQkJCVwKLQkgICAgIDogIiVyIiAoX19tMCksCQkJCQkJXAotICAgICAgICAgICAgICAgInIiIChfX20xKSk7CQkJCQkJXAotICAgIChwbCkgPSBfX20wICogX19tMTsJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0vKiB1ZGl2X3Fybm5kKHF1b3RpZW50LCByZW1haW5kZXIsIGhpZ2hfbnVtZXJhdG9yLCBsb3dfbnVtZXJhdG9yLAotICogZGVub21pbmF0b3IpIGRpdmlkZXMgYSBVRFd0eXBlLCBjb21wb3NlZCBieSB0aGUgVVd0eXBlIGludGVnZXJzCi0gKiBISUdIX05VTUVSQVRPUiBhbmQgTE9XX05VTUVSQVRPUiwgYnkgREVOT01JTkFUT1IgYW5kIHBsYWNlcyB0aGUgcXVvdGllbnQKLSAqIGluIFFVT1RJRU5UIGFuZCB0aGUgcmVtYWluZGVyIGluIFJFTUFJTkRFUi4gIEhJR0hfTlVNRVJBVE9SIG11c3QgYmUgbGVzcwotICogdGhhbiBERU5PTUlOQVRPUiBmb3IgY29ycmVjdCBvcGVyYXRpb24uICBJZiwgaW4gYWRkaXRpb24sIHRoZSBtb3N0Ci0gKiBzaWduaWZpY2FudCBiaXQgb2YgREVOT01JTkFUT1IgbXVzdCBiZSAxLCB0aGVuIHRoZSBwcmUtcHJvY2Vzc29yIHN5bWJvbAotICogVURJVl9ORUVEU19OT1JNQUxJWkFUSU9OIGlzIGRlZmluZWQgdG8gMS4KLSAqLwotI2RlZmluZSB1ZGl2X3Fybm5kKHEsIHIsIG4xLCBuMCwgZCkJCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBVV3R5cGUgX19kMSwgX19kMCwgX19xMSwgX19xMCwgX19yMSwgX19yMCwgX19tOwkJCVwKLSAgICBfX2QxID0gX19sbF9oaWdocGFydCAoZCk7CQkJCQkJXAotICAgIF9fZDAgPSBfX2xsX2xvd3BhcnQgKGQpOwkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICBfX3IxID0gKG4xKSAlIF9fZDE7CQkJCQkJCVwKLSAgICBfX3ExID0gKG4xKSAvIF9fZDE7CQkJCQkJCVwKLSAgICBfX20gPSAoVVd0eXBlKSBfX3ExICogX19kMDsJCQkJCQlcCi0gICAgX19yMSA9IF9fcjEgKiBfX2xsX0IgfCBfX2xsX2hpZ2hwYXJ0IChuMCk7CQkJCVwKLSAgICBpZiAoX19yMSA8IF9fbSkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlfX3ExLS0sIF9fcjEgKz0gKGQpOwkJCQkJCVwKLQlpZiAoX19yMSA+PSAoZCkpIC8qIHdlIGRpZG4ndCBnZXQgY2Fycnkgd2hlbiBhZGRpbmcgdG8gX19yMSAqLwlcCi0JICBpZiAoX19yMSA8IF9fbSkJCQkJCQlcCi0JICAgIF9fcTEtLSwgX19yMSArPSAoZCk7CQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIF9fcjEgLT0gX19tOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0gICAgX19yMCA9IF9fcjEgJSBfX2QxOwkJCQkJCQlcCi0gICAgX19xMCA9IF9fcjEgLyBfX2QxOwkJCQkJCQlcCi0gICAgX19tID0gKFVXdHlwZSkgX19xMCAqIF9fZDA7CQkJCQkJXAotICAgIF9fcjAgPSBfX3IwICogX19sbF9CIHwgX19sbF9sb3dwYXJ0IChuMCk7CQkJCVwKLSAgICBpZiAoX19yMCA8IF9fbSkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlfX3EwLS0sIF9fcjAgKz0gKGQpOwkJCQkJCVwKLQlpZiAoX19yMCA+PSAoZCkpCQkJCQkJXAotCSAgaWYgKF9fcjAgPCBfX20pCQkJCQkJXAotCSAgICBfX3EwLS0sIF9fcjAgKz0gKGQpOwkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICBfX3IwIC09IF9fbTsJCQkJCQkJXAotCQkJCQkJCQkJXAotICAgIChxKSA9IChVV3R5cGUpIF9fcTEgKiBfX2xsX0IgfCBfX3EwOwkJCQlcCi0gICAgKHIpID0gX19yMDsJCQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBVRElWX05FRURTX05PUk1BTElaQVRJT04gMQotCi0jZGVmaW5lIGFib3J0KCkJCQkJCQkJCVwKLQlyZXR1cm4gMAotCi0jaWZkZWYgX19CSUdfRU5ESUFOCi0jZGVmaW5lIF9fQllURV9PUkRFUiBfX0JJR19FTkRJQU4KLSNlbHNlCi0jZGVmaW5lIF9fQllURV9PUkRFUiBfX0xJVFRMRV9FTkRJQU4KLSNlbmRpZgotCi0vKiBFeGNlcHRpb24gZmxhZ3MuICovCi0jZGVmaW5lIEVGTEFHX0lOVkFMSUQJCSgxIDw8ICgzMSAtIDIpKQotI2RlZmluZSBFRkxBR19PVkVSRkxPVwkJKDEgPDwgKDMxIC0gMykpCi0jZGVmaW5lIEVGTEFHX1VOREVSRkxPVwkJKDEgPDwgKDMxIC0gNCkpCi0jZGVmaW5lIEVGTEFHX0RJVlpFUk8JCSgxIDw8ICgzMSAtIDUpKQotI2RlZmluZSBFRkxBR19JTkVYQUNUCQkoMSA8PCAoMzEgLSA2KSkKLQotI2RlZmluZSBFRkxBR19WWFNOQU4JCSgxIDw8ICgzMSAtIDcpKQotI2RlZmluZSBFRkxBR19WWElTSQkJKDEgPDwgKDMxIC0gOCkpCi0jZGVmaW5lIEVGTEFHX1ZYSURJCQkoMSA8PCAoMzEgLSA5KSkKLSNkZWZpbmUgRUZMQUdfVlhaRFoJCSgxIDw8ICgzMSAtIDEwKSkKLSNkZWZpbmUgRUZMQUdfVlhJTVoJCSgxIDw8ICgzMSAtIDExKSkKLSNkZWZpbmUgRUZMQUdfVlhWQwkJKDEgPDwgKDMxIC0gMTIpKQotI2RlZmluZSBFRkxBR19WWFNPRlQJCSgxIDw8ICgzMSAtIDIxKSkKLSNkZWZpbmUgRUZMQUdfVlhTUVJUCQkoMSA8PCAoMzEgLSAyMikpCi0jZGVmaW5lIEVGTEFHX1ZYQ1ZJCQkoMSA8PCAoMzEgLSAyMykpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc2luZ2xlLmggYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc2luZ2xlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxOWQ5OTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3NpbmdsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIERlZmluaXRpb25zIGZvciBJRUVFIFNpbmdsZSBQcmVjaXNpb24KLSAqLwotCi0jaWYgX0ZQX1dfVFlQRV9TSVpFIDwgMzIKLSNlcnJvciAiSGVyZSdzIGEgbmlja2VsIGtpZC4gIEdvIGJ1eSB5b3Vyc2VsZiBhIHJlYWwgY29tcHV0ZXIuIgotI2VuZGlmCi0KLSNkZWZpbmUgX0ZQX0ZSQUNCSVRTX1MJCTI0Ci0jZGVmaW5lIF9GUF9GUkFDWEJJVFNfUwkJKF9GUF9XX1RZUEVfU0laRSAtIF9GUF9GUkFDQklUU19TKQotI2RlZmluZSBfRlBfV0ZSQUNCSVRTX1MJCShfRlBfV09SS0JJVFMgKyBfRlBfRlJBQ0JJVFNfUykKLSNkZWZpbmUgX0ZQX1dGUkFDWEJJVFNfUwkoX0ZQX1dfVFlQRV9TSVpFIC0gX0ZQX1dGUkFDQklUU19TKQotI2RlZmluZSBfRlBfRVhQQklUU19TCQk4Ci0jZGVmaW5lIF9GUF9FWFBCSUFTX1MJCTEyNwotI2RlZmluZSBfRlBfRVhQTUFYX1MJCTI1NQotI2RlZmluZSBfRlBfUU5BTkJJVF9TCQkoKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX0ZSQUNCSVRTX1MtMikpCi0jZGVmaW5lIF9GUF9JTVBMQklUX1MJCSgoX0ZQX1dfVFlQRSkxIDw8IChfRlBfRlJBQ0JJVFNfUy0xKSkKLSNkZWZpbmUgX0ZQX09WRVJGTE9XX1MJCSgoX0ZQX1dfVFlQRSkxIDw8IChfRlBfV0ZSQUNCSVRTX1MpKQotCi0vKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgX0ZQX01VTF9NRUFUX1MgYW5kIF9GUF9ESVZfTUVBVF9TIHNob3VsZCBiZQotICAgY2hvc2VuIGJ5IHRoZSB0YXJnZXQgbWFjaGluZS4gICovCi0KLXVuaW9uIF9GUF9VTklPTl9TCi17Ci0gIGZsb2F0IGZsdDsKLSAgc3RydWN0IHsKLSNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCi0gICAgdW5zaWduZWQgc2lnbiA6IDE7Ci0gICAgdW5zaWduZWQgZXhwICA6IF9GUF9FWFBCSVRTX1M7Ci0gICAgdW5zaWduZWQgZnJhYyA6IF9GUF9GUkFDQklUU19TIC0gKF9GUF9JTVBMQklUX1MgIT0gMCk7Ci0jZWxzZQotICAgIHVuc2lnbmVkIGZyYWMgOiBfRlBfRlJBQ0JJVFNfUyAtIChfRlBfSU1QTEJJVF9TICE9IDApOwotICAgIHVuc2lnbmVkIGV4cCAgOiBfRlBfRVhQQklUU19TOwotICAgIHVuc2lnbmVkIHNpZ24gOiAxOwotI2VuZGlmCi0gIH0gYml0cyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLX07Ci0KLSNkZWZpbmUgRlBfREVDTF9TKFgpCQlfRlBfREVDTCgxLFgpCi0jZGVmaW5lIEZQX1VOUEFDS19SQVdfUyhYLHZhbCkJX0ZQX1VOUEFDS19SQVdfMShTLFgsdmFsKQotI2RlZmluZSBGUF9QQUNLX1JBV19TKHZhbCxYKQlfRlBfUEFDS19SQVdfMShTLHZhbCxYKQotCi0jZGVmaW5lIEZQX1VOUEFDS19TKFgsdmFsKQkJXAotICBkbyB7CQkJCQlcCi0gICAgX0ZQX1VOUEFDS19SQVdfMShTLFgsdmFsKTsJCVwKLSAgICBfRlBfVU5QQUNLX0NBTk9OSUNBTChTLDEsWCk7CVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBGUF9QQUNLX1ModmFsLFgpCQlcCi0gIGRvIHsJCQkJCVwKLSAgICBfRlBfUEFDS19DQU5PTklDQUwoUywxLFgpOwkJXAotICAgIF9GUF9QQUNLX1JBV18xKFMsdmFsLFgpOwkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZQX05FR19TKFIsWCkJCV9GUF9ORUcoUywxLFIsWCkKLSNkZWZpbmUgRlBfQUREX1MoUixYLFkpCQlfRlBfQUREKFMsMSxSLFgsWSkKLSNkZWZpbmUgRlBfU1VCX1MoUixYLFkpCQlfRlBfU1VCKFMsMSxSLFgsWSkKLSNkZWZpbmUgRlBfTVVMX1MoUixYLFkpCQlfRlBfTVVMKFMsMSxSLFgsWSkKLSNkZWZpbmUgRlBfRElWX1MoUixYLFkpCQlfRlBfRElWKFMsMSxSLFgsWSkKLSNkZWZpbmUgRlBfU1FSVF9TKFIsWCkJCV9GUF9TUVJUKFMsMSxSLFgpCi0KLSNkZWZpbmUgRlBfQ01QX1MocixYLFksdW4pCV9GUF9DTVAoUywxLHIsWCxZLHVuKQotI2RlZmluZSBGUF9DTVBfRVFfUyhyLFgsWSkJX0ZQX0NNUF9FUShTLDEscixYLFkpCi0KLSNkZWZpbmUgRlBfVE9fSU5UX1MocixYLHJzeixyc2cpICBfRlBfVE9fSU5UKFMsMSxyLFgscnN6LHJzZykKLSNkZWZpbmUgRlBfRlJPTV9JTlRfUyhYLHIscnMscnQpICBfRlBfRlJPTV9JTlQoUywxLFgscixycyxydCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zb2Z0LWZwLmggYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc29mdC1mcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2EzOTU5Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zb2Z0LWZwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotI2lmbmRlZiBTT0ZUX0ZQX0gKLSNkZWZpbmUgU09GVF9GUF9ICi0KLSNpbmNsdWRlICJzZnAtbWFjaGluZS5oIgotCi0jZGVmaW5lIF9GUF9XT1JLQklUUwkJMwotI2RlZmluZSBfRlBfV09SS19MU0IJCSgoX0ZQX1dfVFlQRSkxIDw8IDMpCi0jZGVmaW5lIF9GUF9XT1JLX1JPVU5ECQkoKF9GUF9XX1RZUEUpMSA8PCAyKQotI2RlZmluZSBfRlBfV09SS19HVUFSRAkJKChfRlBfV19UWVBFKTEgPDwgMSkKLSNkZWZpbmUgX0ZQX1dPUktfU1RJQ0tZCQkoKF9GUF9XX1RZUEUpMSA8PCAwKQotCi0jaWZuZGVmIEZQX1JORF9ORUFSRVNUCi0jIGRlZmluZSBGUF9STkRfTkVBUkVTVAkJMAotIyBkZWZpbmUgRlBfUk5EX1pFUk8JCTEKLSMgZGVmaW5lIEZQX1JORF9QSU5GCQkyCi0jIGRlZmluZSBGUF9STkRfTUlORgkJMwotI2lmbmRlZiBGUF9ST1VORE1PREUKLSMgZGVmaW5lIEZQX1JPVU5ETU9ERQkJRlBfUk5EX05FQVJFU1QKLSNlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgX0ZQX1JPVU5EX05FQVJFU1Qod2MsIFgpCQkJXAotKHsgIGludCBfX3JldCA9IDA7CQkJCQlcCi0gICAgaW50IF9fZnJhYyA9IF9GUF9GUkFDX0xPV18jI3djKFgpICYgMTU7CQlcCi0gICAgaWYgKF9fZnJhYyAmIDcpIHsJCQkJCVwKLSAgICAgIF9fcmV0ID0gRUZMQUdfSU5FWEFDVDsJCQkJXAotICAgICAgaWYgKChfX2ZyYWMgJiA3KSAhPSBfRlBfV09SS19ST1VORCkJCVwKLSAgICAgICAgX0ZQX0ZSQUNfQURESV8jI3djKFgsIF9GUF9XT1JLX1JPVU5EKTsJCVwKLSAgICAgIGVsc2UgaWYgKF9fZnJhYyAmIF9GUF9XT1JLX0xTQikJCQlcCi0gICAgICAgIF9GUF9GUkFDX0FERElfIyN3YyhYLCBfRlBfV09SS19ST1VORCk7CQlcCi0gICAgfQkJCQkJCQlcCi0gICAgX19yZXQ7CQkJCQkJXAotfSkKLQotI2RlZmluZSBfRlBfUk9VTkRfWkVSTyh3YywgWCkJCQkJXAotKHsgIGludCBfX3JldCA9IDA7CQkJCQlcCi0gICAgaWYgKF9GUF9GUkFDX0xPV18jI3djKFgpICYgNykJCQlcCi0gICAgICBfX3JldCA9IEVGTEFHX0lORVhBQ1Q7CQkJCVwKLSAgICBfX3JldDsJCQkJCQlcCi19KQotCi0jZGVmaW5lIF9GUF9ST1VORF9QSU5GKHdjLCBYKQkJCQlcCi0oeyAgaW50IF9fcmV0ID0gRUZMQUdfSU5FWEFDVDsJCQkJXAotICAgIGlmICghWCMjX3MgJiYgKF9GUF9GUkFDX0xPV18jI3djKFgpICYgNykpCQlcCi0gICAgICBfRlBfRlJBQ19BRERJXyMjd2MoWCwgX0ZQX1dPUktfTFNCKTsJCVwKLSAgICBlbHNlIF9fcmV0ID0gMDsJCQkJCVwKLSAgICBfX3JldDsJCQkJCQlcCi19KQotCi0jZGVmaW5lIF9GUF9ST1VORF9NSU5GKHdjLCBYKQkJCQlcCi0oeyAgaW50IF9fcmV0ID0gRUZMQUdfSU5FWEFDVDsJCQkJXAotICAgIGlmIChYIyNfcyAmJiAoX0ZQX0ZSQUNfTE9XXyMjd2MoWCkgJiA3KSkJCVwKLSAgICAgIF9GUF9GUkFDX0FERElfIyN3YyhYLCBfRlBfV09SS19MU0IpOwkJXAotICAgIGVsc2UgX19yZXQgPSAwOwkJCQkJXAotICAgIF9fcmV0OwkJCQkJCVwKLX0pCi0KLSNkZWZpbmUgX0ZQX1JPVU5EKHdjLCBYKQkJCVwKLSh7CWludCBfX3JldCA9IDA7CQkJCVwKLQlzd2l0Y2ggKEZQX1JPVU5ETU9ERSkJCQlcCi0JewkJCQkJXAotCSAgY2FzZSBGUF9STkRfTkVBUkVTVDoJCQlcCi0JICAgIF9fcmV0IHw9IF9GUF9ST1VORF9ORUFSRVNUKHdjLFgpOwlcCi0JICAgIGJyZWFrOwkJCQlcCi0JICBjYXNlIEZQX1JORF9aRVJPOgkJCVwKLQkgICAgX19yZXQgfD0gX0ZQX1JPVU5EX1pFUk8od2MsWCk7CVwKLQkgICAgYnJlYWs7CQkJCVwKLQkgIGNhc2UgRlBfUk5EX1BJTkY6CQkJXAotCSAgICBfX3JldCB8PSBfRlBfUk9VTkRfUElORih3YyxYKTsJXAotCSAgICBicmVhazsJCQkJXAotCSAgY2FzZSBGUF9STkRfTUlORjoJCQlcCi0JICAgIF9fcmV0IHw9IF9GUF9ST1VORF9NSU5GKHdjLFgpOwlcCi0JICAgIGJyZWFrOwkJCQlcCi0JfTsJCQkJCVwKLQlfX3JldDsJCQkJCVwKLX0pCi0KLSNkZWZpbmUgRlBfQ0xTX05PUk1BTAkJMAotI2RlZmluZSBGUF9DTFNfWkVSTwkJMQotI2RlZmluZSBGUF9DTFNfSU5GCQkyCi0jZGVmaW5lIEZQX0NMU19OQU4JCTMKLQotI2RlZmluZSBfRlBfQ0xTX0NPTUJJTkUoeCx5KQkoKCh4KSA8PCAyKSB8ICh5KSkKLQotI2luY2x1ZGUgIm9wLTEuaCIKLSNpbmNsdWRlICJvcC0yLmgiCi0jaW5jbHVkZSAib3AtNC5oIgotI2luY2x1ZGUgIm9wLWNvbW1vbi5oIgotCi0vKiBTaWdoLiAgU2lsbHkgdGhpbmdzIGxvbmdsb25nLmggbmVlZHMuICAqLwotI2RlZmluZSBVV3R5cGUJCV9GUF9XX1RZUEUKLSNkZWZpbmUgV19UWVBFX1NJWkUJX0ZQX1dfVFlQRV9TSVpFCi0KLXR5cGVkZWYgaW50IFNJdHlwZSBfX2F0dHJpYnV0ZV9fKChtb2RlKFNJKSkpOwotdHlwZWRlZiBpbnQgREl0eXBlIF9fYXR0cmlidXRlX18oKG1vZGUoREkpKSk7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBVU0l0eXBlIF9fYXR0cmlidXRlX18oKG1vZGUoU0kpKSk7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBVREl0eXBlIF9fYXR0cmlidXRlX18oKG1vZGUoREkpKSk7Ci0jaWYgX0ZQX1dfVFlQRV9TSVpFID09IDMyCi10eXBlZGVmIHVuc2lnbmVkIGludCBVSFd0eXBlIF9fYXR0cmlidXRlX18oKG1vZGUoSEkpKSk7Ci0jZWxpZiBfRlBfV19UWVBFX1NJWkUgPT0gNjQKLXR5cGVkZWYgVVNJdHlwZSBVSFd0eXBlOwotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3N0ZnMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zdGZzLmMKaW5kZXggODY4OWFhNC4uNjEyMjE0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3N0ZnMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc3Rmcy5jCkBAIC0yLDIzICsyLDI0IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotI2luY2x1ZGUgInNpbmdsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KIAogaW50CiBzdGZzKHZvaWQgKmZyUywgdm9pZCAqZWEpCiB7CiAJRlBfREVDTF9EKEEpOwogCUZQX0RFQ0xfUyhSKTsKKwlGUF9ERUNMX0VYOwogCWZsb2F0IGY7Ci0JaW50IGVycjsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogUyAlcCwgZWEgJXBcbiIsIF9fZnVuY19fLCBmclMsIGVhKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmclMpOworCUZQX1VOUEFDS19EUChBLCBmclMpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC0zMCwxMiArMzEsMTIgQEAKIAlwcmludGsoIlI6ICVsZCAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZiwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQllcnIgPSBfRlBfUEFDS19DQU5PTklDQUwoUywgMSwgUik7Ci0JaWYgKCFlcnIgfHwgIV9fRlBVX1RSQVBfUChlcnIpKSB7Ci0JCV9fRlBfUEFDS19SQVdfMShTLCAmZiwgUik7CisJX0ZQX1BBQ0tfQ0FOT05JQ0FMKFMsIDEsIFIpOworCWlmICghRlBfQ1VSX0VYQ0VQVElPTlMgfHwgIV9fRlBVX1RSQVBfUChGUF9DVVJfRVhDRVBUSU9OUykpIHsKKwkJX0ZQX1BBQ0tfUkFXXzFfUChTLCAmZiwgUik7CiAJCWlmIChjb3B5X3RvX3VzZXIoZWEsICZmLCBzaXplb2YoZmxvYXQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJldHVybiBlcnI7CisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3R5cGVzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvdHlwZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFlZDE1ZC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvdHlwZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCi0KLXZvaWQKLWZwX3VucGFja19kKGxvbmcgKl9zLCB1bnNpZ25lZCBsb25nICpfZjEsIHVuc2lnbmVkIGxvbmcgKl9mMCwKLQkgICAgbG9uZyAqX2UsIGxvbmcgKl9jLCB2b2lkICp2YWwpCi17Ci0JRlBfREVDTF9EKFgpOwotCi0JX19GUF9VTlBBQ0tfUkFXXzIoRCwgWCwgdmFsKTsKLQotCV9GUF9VTlBBQ0tfQ0FOT05JQ0FMKEQsIDIsIFgpOwotCi0JKl9zID0gWF9zOwotCSpfZjEgPSBYX2YxOwotCSpfZjAgPSBYX2YwOwotCSpfZSA9IFhfZTsKLQkqX2MgPSBYX2M7Ci19Ci0KLWludAotZnBfcGFja19kKHZvaWQgKnZhbCwgbG9uZyBYX3MsIHVuc2lnbmVkIGxvbmcgWF9mMSwKLQkgIHVuc2lnbmVkIGxvbmcgWF9mMCwgbG9uZyBYX2UsIGxvbmcgWF9jKQotewotCWludCBleGM7Ci0KLQlleGMgPSBfRlBfUEFDS19DQU5PTklDQUwoRCwgMiwgWCk7Ci0JaWYgKCFleGMgfHwgIV9fRlBVX1RSQVBfUChleGMpKQotCQlfX0ZQX1BBQ0tfUkFXXzIoRCwgdmFsLCBYKTsKLQlyZXR1cm4gZXhjOwotfQotCi1pbnQKLWZwX3BhY2tfZHModm9pZCAqdmFsLCBsb25nIFhfcywgdW5zaWduZWQgbG9uZyBYX2YxLAotCSAgIHVuc2lnbmVkIGxvbmcgWF9mMCwgbG9uZyBYX2UsIGxvbmcgWF9jKQotewotCUZQX0RFQ0xfUyhfX1gpOwotCWludCBleGM7Ci0KLQlGUF9DT05WKFMsIEQsIDEsIDIsIF9fWCwgWCk7Ci0JZXhjID0gX0ZQX1BBQ0tfQ0FOT05JQ0FMKFMsIDEsIF9fWCk7Ci0JaWYgKCFleGMgfHwgIV9fRlBVX1RSQVBfUChleGMpKSB7Ci0JCV9GUF9VTlBBQ0tfQ0FOT05JQ0FMKFMsIDEsIF9fWCk7Ci0JCUZQX0NPTlYoRCwgUywgMiwgMSwgWCwgX19YKTsKLQkJZXhjIHw9IF9GUF9QQUNLX0NBTk9OSUNBTChELCAyLCBYKTsKLQkJaWYgKCFleGMgfHwgIV9fRlBVX1RSQVBfUChleGMpKQotCQkJX19GUF9QQUNLX1JBV18yKEQsIHZhbCwgWCk7Ci0JfQotCXJldHVybiBleGM7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvdWRpdm1vZHRpNC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L3VkaXZtb2R0aTQuYwppbmRleCA3ZTExMmRjLi42MTcyMDQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvdWRpdm1vZHRpNC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS91ZGl2bW9kdGk0LmMKQEAgLTEsNiArMSw2IEBACiAvKiBUaGlzIGhhcyBzbyB2ZXJ5IGZldyBjaGFuZ2VzIG92ZXIgbGliZ2NjMidzIF9fdWRpdm1vZGRpNCBpdCBpc24ndCBmdW5ueS4gICovCiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgogCiAjdW5kZWYgY291bnRfbGVhZGluZ196ZXJvcwogI2RlZmluZSBjb3VudF9sZWFkaW5nX3plcm9zICBfX0ZQX0NMWgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYyBiL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMKaW5kZXggY2UxMGUyYi4uMjNjZWUzOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIAkJY2FtX21heF9zaXplID0gbWF4X2xvd21lbV9zaXplOwogCiAJLyogYWRqdXN0IGxvd21lbSBzaXplIHRvIG1heF9sb3dtZW1fc2l6ZSAqLwotCXJhbSA9IG1pbihtYXhfbG93bWVtX3NpemUsIChwaHlzX2FkZHJfdCl0b3RhbF9sb3dtZW0pOworCXJhbSA9IG1pbihtYXhfbG93bWVtX3NpemUsIHRvdGFsX2xvd21lbSk7CiAKIAkvKiBDYWxjdWxhdGUgQ0FNIHZhbHVlcyAqLwogCV9fY2FtMCA9IDFVTCA8PCAyICogKF9faWxvZzIocmFtKSAvIDIpOwpAQCAtMjI1LDcgKzIyNSw4IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5IENBTSBtYXBwaW5nOiBDQU0wPSVsZE1iLCBDQU0xPSVsZE1iLCIKIAkJCSIgQ0FNMj0lbGRNYiByZXNpZHVhbDogJWxkTWJcbiIsCiAJCQlfX2NhbTAgPj4gMjAsIF9fY2FtMSA+PiAyMCwgX19jYW0yID4+IDIwLAotCQkJKHRvdGFsX2xvd21lbSAtIF9fY2FtMCAtIF9fY2FtMSAtIF9fY2FtMikgPj4gMjApOworCQkJKGxvbmcgaW50KSgodG90YWxfbG93bWVtIC0gX19jYW0wIC0gX19jYW0xIC0gX19jYW0yKQorCQkJCSAgID4+IDIwKSk7CiAJX19tYXhfbG93X21lbW9yeSA9IF9fY2FtMCArIF9fY2FtMSArIF9fY2FtMjsKIAlfX2luaXRpYWxfbWVtb3J5X2xpbWl0X2FkZHIgPSBtZW1zdGFydF9hZGRyICsgX19tYXhfbG93X21lbW9yeTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9ndXAuYyBiL2FyY2gvcG93ZXJwYy9tbS9ndXAuYwppbmRleCA5ZmRmNGQ2Li4yOGExMTRkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vZ3VwLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2d1cC5jCkBAIC00MSw3ICs0MSw3IEBACiAJCXBhZ2UgPSBwdGVfcGFnZShwdGUpOwogCQlpZiAoIXBhZ2VfY2FjaGVfZ2V0X3NwZWN1bGF0aXZlKHBhZ2UpKQogCQkJcmV0dXJuIDA7Ci0JCWlmICh1bmxpa2VseShwdGUgIT0gKnB0ZXApKSB7CisJCWlmICh1bmxpa2VseShwdGVfdmFsKHB0ZSkgIT0gcHRlX3ZhbCgqcHRlcCkpKSB7CiAJCQlwdXRfcGFnZShwYWdlKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC05Miw3ICs5Miw3IEBACiAJCSpuciAtPSByZWZzOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKHVubGlrZWx5KHB0ZSAhPSAqcHRlcCkpIHsKKwlpZiAodW5saWtlbHkocHRlX3ZhbChwdGUpICE9IHB0ZV92YWwoKnB0ZXApKSkgewogCQkvKiBDb3VsZCBiZSBvcHRpbWl6ZWQgYmV0dGVyICovCiAJCXdoaWxlICgqbnIpIHsKIAkJCXB1dF9wYWdlKHBhZ2UpOwpAQCAtMjM3LDcgKzIzNyw4IEBACiAJCQlwZ2RfdCBwZ2QgPSAqcGdkcDsKIAogCQkJVk1fQlVHX09OKHNoaWZ0ICE9IG1tdV9wc2l6ZV9kZWZzW2dldF9zbGljZV9wc2l6ZShtbSwgYWRkcildLnNoaWZ0KTsKLQkJCXByX2RlYnVnKCIgICUwMTZseDogbm9ybWFsIHBnZCAlcFxuIiwgYWRkciwgKHZvaWQgKilwZ2QpOworCQkJcHJfZGVidWcoIiAgJTAxNmx4OiBub3JtYWwgcGdkICVwXG4iLCBhZGRyLAorCQkJCSAodm9pZCAqKXBnZF92YWwocGdkKSk7CiAJCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CiAJCQlpZiAocGdkX25vbmUocGdkKSkKIAkJCQlnb3RvIHNsb3c7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfMzIuUyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd18zMi5TCmluZGV4IGI5YmE3ZDkuLjdiZmZiNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd18zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd18zMi5TCkBAIC03NSw3ICs3NSw3IEBACiAgKiBSZXR1cm5zIHRvIHRoZSBjYWxsZXIgaWYgdGhlIGFjY2VzcyBpcyBpbGxlZ2FsIG9yIHRoZXJlIGlzIG5vCiAgKiBtYXBwaW5nIGZvciB0aGUgYWRkcmVzcy4gIE90aGVyd2lzZSBpdCBwbGFjZXMgYW4gYXBwcm9wcmlhdGUgUFRFCiAgKiBpbiB0aGUgaGFzaCB0YWJsZSBhbmQgcmV0dXJucyBmcm9tIHRoZSBleGNlcHRpb24uCi0gKiBVc2VzIHIwLCByMyAtIHI4LCBjdHIsIGxyLgorICogVXNlcyByMCwgcjMgLSByOCwgcjEwLCBjdHIsIGxyLgogICovCiAJLnRleHQKIF9HTE9CQUwoaGFzaF9wYWdlKQpAQCAtMTA2LDkgKzEwNiwxNSBAQAogCWFkZGkJcjUscjUsc3dhcHBlcl9wZ19kaXJAbAkvKiBrZXJuZWwgcGFnZSB0YWJsZSAqLwogCXJsd2ltaQlyMyxyOSwzMi0xMiwyOSwyOQkvKiBNU1JfUFIgLT4gX1BBR0VfVVNFUiAqLwogMTEyOglhZGQJcjUscjUscjcJCS8qIGNvbnZlcnQgdG8gcGh5cyBhZGRyICovCisjaWZuZGVmIENPTkZJR19QVEVfNjRCSVQKIAlybHdpbWkJcjUscjQsMTIsMjAsMjkJCS8qIGluc2VydCB0b3AgMTAgYml0cyBvZiBhZGRyZXNzICovCiAJbHd6CXI4LDAocjUpCQkvKiBnZXQgcG1kIGVudHJ5ICovCiAJcmx3aW5tLglyOCxyOCwwLDAsMTkJCS8qIGV4dHJhY3QgYWRkcmVzcyBvZiBwdGUgcGFnZSAqLworI2Vsc2UKKwlybHdpbm0JcjgscjQsMTMsMTksMjkJCS8qIENvbXB1dGUgcGdkaXIvcG1kIG9mZnNldCAqLworCWx3engJcjgscjgscjUJCS8qIEdldCBMMSBlbnRyeSAqLworCXJsd2lubS4JcjgscjgsMCwwLDIwCQkvKiBleHRyYWN0IHB0IGJhc2UgYWRkcmVzcyAqLworI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NNUAogCWJlcS0JaGFzaF9wYWdlX291dAkJLyogcmV0dXJuIGlmIG5vIG1hcHBpbmcgKi8KICNlbHNlCkBAIC0xMTgsNyArMTI0LDExIEBACiAJICAgdG8gdGhlIGFkZHJlc3MgZm9sbG93aW5nIHRoZSByZmkuICovCiAJYmVxbHItCiAjZW5kaWYKKyNpZm5kZWYgQ09ORklHX1BURV82NEJJVAogCXJsd2ltaQlyOCxyNCwyMiwyMCwyOQkJLyogaW5zZXJ0IG5leHQgMTAgYml0cyBvZiBhZGRyZXNzICovCisjZWxzZQorCXJsd2ltaQlyOCxyNCwyMywyMCwyOAkJLyogY29tcHV0ZSBwdGUgYWRkcmVzcyAqLworI2VuZGlmCiAJcmx3aW5tCXIwLHIzLDMyLTMsMjQsMjQJLyogX1BBR0VfUlcgYWNjZXNzIC0+IF9QQUdFX0RJUlRZICovCiAJb3JpCXIwLHIwLF9QQUdFX0FDQ0VTU0VEfF9QQUdFX0hBU0hQVEUKIApAQCAtMTI3LDkgKzEzNywxNSBAQAogCSAqIGJlY2F1c2UgYWxtb3N0IGFsd2F5cywgdGhlcmUgd29uJ3QgYmUgYSBwZXJtaXNzaW9uIHZpb2xhdGlvbgogCSAqIGFuZCB0aGVyZSB3b24ndCBhbHJlYWR5IGJlIGFuIEhQVEUsIGFuZCB0aHVzIHdlIHdpbGwgaGF2ZQogCSAqIHRvIHVwZGF0ZSB0aGUgUFRFIHRvIHNldCBfUEFHRV9IQVNIUFRFLiAgLS0gcGF1bHVzLgorCSAqCisJICogSWYgUFRFXzY0QklUIGlzIHNldCwgdGhlIGxvdyB3b3JkIGlzIHRoZSBmbGFncyB3b3JkOyB1c2UgdGhhdAorCSAqIHdvcmQgZm9yIGxvY2tpbmcgc2luY2UgaXQgY29udGFpbnMgYWxsIHRoZSBpbnRlcmVzdGluZyBiaXRzLgogCSAqLworI2lmIChQVEVfRkxBR1NfT0ZGU0VUICE9IDApCisJYWRkaQlyOCxyOCxQVEVfRkxBR1NfT0ZGU0VUCisjZW5kaWYKIHJldHJ5OgotCWx3YXJ4CXI2LDAscjgJCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCisJbHdhcngJcjYsMCxyOAkJCS8qIGdldCBsaW51eC1zdHlsZSBwdGUsIGZsYWcgd29yZCAqLwogCWFuZGMuCXI1LHIzLHI2CQkvKiBjaGVjayBhY2Nlc3MgJiB+cGVybWlzc2lvbiAqLwogI2lmZGVmIENPTkZJR19TTVAKIAlibmUtCWhhc2hfcGFnZV9vdXQJCS8qIHJldHVybiBpZiBhY2Nlc3Mgbm90IHBlcm1pdHRlZCAqLwpAQCAtMTM3LDYgKzE1MywxNSBAQAogCWJuZWxyLQogI2VuZGlmCiAJb3IJcjUscjAscjYJCS8qIHNldCBhY2Nlc3NlZC9kaXJ0eSBiaXRzICovCisjaWZkZWYgQ09ORklHX1BURV82NEJJVAorI2lmZGVmIENPTkZJR19TTVAKKwlzdWJmCXIxMCxyNixyOAkJLyogY3JlYXRlIGZhbHNlIGRhdGEgZGVwZW5kZW5jeSAqLworCXN1YmkJcjEwLHIxMCxQVEVfRkxBR1NfT0ZGU0VUCisJbHd6eAlyMTAscjYscjEwCQkvKiBHZXQgdXBwZXIgUFRFIHdvcmQgKi8KKyNlbHNlCisJbHd6CXIxMCwtUFRFX0ZMQUdTX09GRlNFVChyOCkKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisjZW5kaWYgLyogQ09ORklHX1BURV82NEJJVCAqLwogCXN0d2N4LglyNSwwLHI4CQkJLyogYXR0ZW1wdCB0byB1cGRhdGUgUFRFICovCiAJYm5lLQlyZXRyeQkJCS8qIHJldHJ5IGlmIHNvbWVvbmUgZ290IHRoZXJlIGZpcnN0ICovCiAKQEAgLTIwMyw5ICsyMjgsOSBAQAogCSAqIHdlIGNhbid0IHRha2UgYSBoYXNoIHRhYmxlIG1pc3MgKGFzc3VtaW5nIHRoZSBjb2RlIGlzCiAJICogY292ZXJlZCBieSBhIEJBVCkuICAtLSBwYXVsdXMKIAkgKi8KLQltZm1zcglyMTAKKwltZm1zcglyOQogCVNZTkMKLQlybHdpbm0JcjAscjEwLDAsMTcsMTUJCS8qIGNsZWFyIGJpdCAxNiAoTVNSX0VFKSAqLworCXJsd2lubQlyMCxyOSwwLDE3LDE1CQkvKiBjbGVhciBiaXQgMTYgKE1TUl9FRSkgKi8KIAlybHdpbm0JcjAscjAsMCwyOCwyNgkJLyogY2xlYXIgTVNSX0RSICovCiAJbXRtc3IJcjAKIAlTWU5DXzYwMQpAQCAtMjE0LDE0ICsyMzksMTQgQEAKIAl0b3BoeXMocjcsMCkKIAogI2lmZGVmIENPTkZJR19TTVAKLQlhZGRpcwlyOSxyNyxtbXVfaGFzaF9sb2NrQGhhCi0JYWRkaQlyOSxyOSxtbXVfaGFzaF9sb2NrQGwKLTEwOglsd2FyeAlyMCwwLHI5CQkJLyogdGFrZSB0aGUgbW11X2hhc2hfbG9jayAqLworCWFkZGlzCXI2LHI3LG1tdV9oYXNoX2xvY2tAaGEKKwlhZGRpCXI2LHI2LG1tdV9oYXNoX2xvY2tAbAorMTA6CWx3YXJ4CXIwLDAscjYJCQkvKiB0YWtlIHRoZSBtbXVfaGFzaF9sb2NrICovCiAJY21waQkwLHIwLDAKIAlibmUtCTExZgotCXN0d2N4LglyOCwwLHI5CisJc3R3Y3guCXI4LDAscjYKIAliZXErCTEyZgotMTE6CWx3eglyMCwwKHI5KQorMTE6CWx3eglyMCwwKHI2KQogCWNtcGkJMCxyMCwwCiAJYmVxCTEwYgogCWIJMTFiCkBAIC0yMzQsMTAgKzI1OSwyNCBAQAogCSAqIEhQVEUsIHNvIHdlIGp1c3QgdW5sb2NrIGFuZCByZXR1cm4uCiAJICovCiAJbXIJcjgscjUKKyNpZm5kZWYgQ09ORklHX1BURV82NEJJVAogCXJsd2ltaQlyOCxyNCwyMiwyMCwyOQorI2Vsc2UKKwlybHdpbWkJcjgscjQsMjMsMjAsMjgKKwlhZGRpCXI4LHI4LFBURV9GTEFHU19PRkZTRVQKKyNlbmRpZgogMToJbHdhcngJcjYsMCxyOAogCWFuZGkuCXIwLHI2LF9QQUdFX0hBU0hQVEUKIAlibmUJOWYJCQkvKiBpZiBIQVNIUFRFIGFscmVhZHkgc2V0LCBkb25lICovCisjaWZkZWYgQ09ORklHX1BURV82NEJJVAorI2lmZGVmIENPTkZJR19TTVAKKwlzdWJmCXIxMCxyNixyOAkJLyogY3JlYXRlIGZhbHNlIGRhdGEgZGVwZW5kZW5jeSAqLworCXN1YmkJcjEwLHIxMCxQVEVfRkxBR1NfT0ZGU0VUCisJbHd6eAlyMTAscjYscjEwCQkvKiBHZXQgdXBwZXIgUFRFIHdvcmQgKi8KKyNlbHNlCisJbHd6CXIxMCwtUFRFX0ZMQUdTX09GRlNFVChyOCkKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisjZW5kaWYgLyogQ09ORklHX1BURV82NEJJVCAqLwogCW9yaQlyNSxyNixfUEFHRV9IQVNIUFRFCiAJc3R3Y3guCXI1LDAscjgKIAlibmUtCTFiCkBAIC0yNDYsMTMgKzI4NSwxNSBAQAogCiA5OgogI2lmZGVmIENPTkZJR19TTVAKKwlhZGRpcwlyNixyNyxtbXVfaGFzaF9sb2NrQGhhCisJYWRkaQlyNixyNixtbXVfaGFzaF9sb2NrQGwKIAllaWVpbwogCWxpCXIwLDAKLQlzdHcJcjAsMChyOSkJCS8qIGNsZWFyIG1tdV9oYXNoX2xvY2sgKi8KKwlzdHcJcjAsMChyNikJCS8qIGNsZWFyIG1tdV9oYXNoX2xvY2sgKi8KICNlbmRpZgogCiAJLyogcmVlbmFibGUgaW50ZXJydXB0cyBhbmQgRFIgKi8KLQltdG1zcglyMTAKKwltdG1zcglyOQogCVNZTkNfNjAxCiAJaXN5bmMKIApAQCAtMjY3LDcgKzMwOCw4IEBACiAgKiByNSBjb250YWlucyB0aGUgbGludXggUFRFLCByNiBjb250YWlucyB0aGUgb2xkIHZhbHVlIG9mIHRoZQogICogbGludXggUFRFIChiZWZvcmUgc2V0dGluZyBfUEFHRV9IQVNIUFRFKSBhbmQgcjcgY29udGFpbnMgdGhlCiAgKiBvZmZzZXQgdG8gYmUgYWRkZWQgdG8gYWRkcmVzc2VzICgwIGlmIHRoZSBNTVUgaXMgb24sCi0gKiAtS0VSTkVMQkFTRSBpZiBpdCBpcyBvZmYpLgorICogLUtFUk5FTEJBU0UgaWYgaXQgaXMgb2ZmKS4gIHIxMCBjb250YWlucyB0aGUgdXBwZXIgaGFsZiBvZgorICogdGhlIFBURSBpZiBDT05GSUdfUFRFXzY0QklULgogICogT24gU01QLCB0aGUgY2FsbGVyIHNob3VsZCBoYXZlIHRoZSBtbXVfaGFzaF9sb2NrIGhlbGQuCiAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgY2FsbGVyIGhhcyAob3Igd2lsbCkgc2V0IHRoZSBfUEFHRV9IQVNIUFRFCiAgKiBiaXQgaW4gdGhlIGxpbnV4IFBURSBpbiBtZW1vcnkuICBUaGUgdmFsdWUgcGFzc2VkIGluIHI2IHNob3VsZApAQCAtMjg1LDcgKzMyNyw3IEBACiBIYXNoX21zayA9ICgoKDEgPDwgSGFzaF9iaXRzKSAtIDEpICogNjQpCiAKIC8qIGRlZmluZXMgZm9yIHRoZSBQVEUgZm9ybWF0IGZvciAzMi1iaXQgUFBDcyAqLwotI2RlZmluZSBQVEVfU0laRQk4CisjZGVmaW5lIEhQVEVfU0laRQk4CiAjZGVmaW5lIFBURUdfU0laRQk2NAogI2RlZmluZSBMR19QVEVHX1NJWkUJNgogI2RlZmluZSBMRFBURXUJCWx3enUKQEAgLTMxMyw2ICszNTUsMTEgQEAKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJb3JpCXI4LHI4LF9QQUdFX0NPSEVSRU5UCS8qIHNldCBNIChjb2hlcmVuY2UgcmVxdWlyZWQpICovCiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9ORUVEX0NPSEVSRU5UKQorI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKKwkvKiBQdXQgdGhlIFhQTiBiaXRzIGludG8gdGhlIFBURSAqLworCXJsd2ltaQlyOCxyMTAsOCwyMCwyMgorCXJsd2ltaQlyOCxyMTAsMiwyOSwyOQorI2VuZGlmCiAKIAkvKiBDb25zdHJ1Y3QgdGhlIGhpZ2ggd29yZCBvZiB0aGUgUFBDLXN0eWxlIFBURSAocjUpICovCiAJcmx3aW5tCXI1LHIzLDcsMSwyNAkJLyogcHV0IFZTSUQgaW4gMHg3ZmZmZmY4MCBiaXRzICovCkBAIC0zNDIsOCArMzg5LDggQEAKIAogCS8qIFNlYXJjaCB0aGUgcHJpbWFyeSBQVEVHIGZvciBhIFBURSB3aG9zZSAxc3QgKGQpd29yZCBtYXRjaGVzIHI1ICovCiAJbXRjdHIJcjAKLQlhZGRpCXI0LHIzLC1QVEVfU0laRQotMToJTERQVEV1CXI2LFBURV9TSVpFKHI0KQkJLyogZ2V0IG5leHQgUFRFICovCisJYWRkaQlyNCxyMywtSFBURV9TSVpFCisxOglMRFBURXUJcjYsSFBURV9TSVpFKHI0KQkvKiBnZXQgbmV4dCBQVEUgKi8KIAlDTVBQVEUJMCxyNixyNQogCWJkbnpmCTIsMWIJCQkvKiBsb29wIHdoaWxlIGN0ciAhPSAwICYmICFjcjAuZXEgKi8KIAliZXErCWZvdW5kX3Nsb3QKQEAgLTM1Myw5ICs0MDAsOSBAQAogX0dMT0JBTChoYXNoX3BhZ2VfcGF0Y2hfQikKIAl4b3JpcwlyNCxyMyxIYXNoX21zaz4+MTYJLyogY29tcHV0ZSBzZWNvbmRhcnkgaGFzaCAqLwogCXhvcmkJcjQscjQsKC1QVEVHX1NJWkUgJiAweGZmZmYpCi0JYWRkaQlyNCxyNCwtUFRFX1NJWkUKKwlhZGRpCXI0LHI0LC1IUFRFX1NJWkUKIAltdGN0cglyMAotMjoJTERQVEV1CXI2LFBURV9TSVpFKHI0KQorMjoJTERQVEV1CXI2LEhQVEVfU0laRShyNCkKIAlDTVBQVEUJMCxyNixyNQogCWJkbnpmCTIsMmIKIAliZXErCWZvdW5kX3Nsb3QKQEAgLTM2Myw4ICs0MTAsOCBAQAogCiAJLyogU2VhcmNoIHRoZSBwcmltYXJ5IFBURUcgZm9yIGFuIGVtcHR5IHNsb3QgKi8KIDEwOgltdGN0cglyMAotCWFkZGkJcjQscjMsLVBURV9TSVpFCQkvKiBzZWFyY2ggcHJpbWFyeSBQVEVHICovCi0xOglMRFBURXUJcjYsUFRFX1NJWkUocjQpCQkvKiBnZXQgbmV4dCBQVEUgKi8KKwlhZGRpCXI0LHIzLC1IUFRFX1NJWkUJLyogc2VhcmNoIHByaW1hcnkgUFRFRyAqLworMToJTERQVEV1CXI2LEhQVEVfU0laRShyNCkJLyogZ2V0IG5leHQgUFRFICovCiAJVFNUX1YocjYpCQkJLyogdGVzdCB2YWxpZCBiaXQgKi8KIAliZG56ZgkyLDFiCQkJLyogbG9vcCB3aGlsZSBjdHIgIT0gMCAmJiAhY3IwLmVxICovCiAJYmVxKwlmb3VuZF9lbXB0eQpAQCAtMzgwLDkgKzQyNyw5IEBACiBfR0xPQkFMKGhhc2hfcGFnZV9wYXRjaF9DKQogCXhvcmlzCXI0LHIzLEhhc2hfbXNrPj4xNgkvKiBjb21wdXRlIHNlY29uZGFyeSBoYXNoICovCiAJeG9yaQlyNCxyNCwoLVBURUdfU0laRSAmIDB4ZmZmZikKLQlhZGRpCXI0LHI0LC1QVEVfU0laRQorCWFkZGkJcjQscjQsLUhQVEVfU0laRQogCW10Y3RyCXIwCi0yOglMRFBURXUJcjYsUFRFX1NJWkUocjQpCisyOglMRFBURXUJcjYsSFBURV9TSVpFKHI0KQogCVRTVF9WKHI2KQogCWJkbnpmCTIsMmIKIAliZXErCWZvdW5kX2VtcHR5CkBAIC00MDksMTEgKzQ1NiwxMSBAQAogCiAxOglhZGRpcwlyNCxyNyxuZXh0X3Nsb3RAaGEJCS8qIGdldCBuZXh0IGV2aWN0IHNsb3QgKi8KIAlsd3oJcjYsbmV4dF9zbG90QGwocjQpCi0JYWRkaQlyNixyNixQVEVfU0laRQkJCS8qIHNlYXJjaCBmb3IgY2FuZGlkYXRlICovCi0JYW5kaS4JcjYscjYsNypQVEVfU0laRQorCWFkZGkJcjYscjYsSFBURV9TSVpFCQkJLyogc2VhcmNoIGZvciBjYW5kaWRhdGUgKi8KKwlhbmRpLglyNixyNiw3KkhQVEVfU0laRQogCXN0dwlyNixuZXh0X3Nsb3RAbChyNCkKIAlhZGQJcjQscjMscjYKLQlMRFBURQlyMCxQVEVfU0laRS8yKHI0KQkJLyogZ2V0IFBURSBzZWNvbmQgd29yZCAqLworCUxEUFRFCXIwLEhQVEVfU0laRS8yKHI0KQkJLyogZ2V0IFBURSBzZWNvbmQgd29yZCAqLwogCWNscnJ3aQlyMCxyMCwxMgogCWxpcwlyNixldGV4dEBoCiAJb3JpCXI2LHI2LGV0ZXh0QGwJCQkvKiBnZXQgZXRleHQgKi8KQEAgLTQyNiw3ICs0NzMsNyBAQAogZm91bmRfZW1wdHk6CiAJU1RQVEUJcjUsMChyNCkKIGZvdW5kX3Nsb3Q6Ci0JU1RQVEUJcjgsUFRFX1NJWkUvMihyNCkKKwlTVFBURQlyOCxIUFRFX1NJWkUvMihyNCkKIAogI2Vsc2UgLyogQ09ORklHX1NNUCAqLwogLyoKQEAgLTQ1Miw3ICs0OTksNyBAQAogCVNUUFRFCXI1LDAocjQpCiAJc3luYwogCVRMQlNZTkMKLQlTVFBURQlyOCxQVEVfU0laRS8yKHI0KSAvKiBwdXQgaW4gY29ycmVjdCBSUE4sIFdJTUcsIFBQIGJpdHMgKi8KKwlTVFBURQlyOCxIUFRFX1NJWkUvMihyNCkgLyogcHV0IGluIGNvcnJlY3QgUlBOLCBXSU1HLCBQUCBiaXRzICovCiAJc3luYwogCVNFVF9WKHI1KQogCVNUUFRFCXI1LDAocjQpCS8qIGZpbmFsbHkgc2V0IFYgYml0IGluIFBURSAqLwpAQCAtNDk5LDE0ICs1NDYsMTggQEAKIAlpc3luYwogCiAJLyogRmlyc3QgZmluZCBhIFBURSBpbiB0aGUgcmFuZ2UgdGhhdCBoYXMgX1BBR0VfSEFTSFBURSBzZXQgKi8KKyNpZm5kZWYgQ09ORklHX1BURV82NEJJVAogCXJsd2ltaQlyNSxyNCwyMiwyMCwyOQotMToJbHd6CXIwLDAocjUpCisjZWxzZQorCXJsd2ltaQlyNSxyNCwyMywyMCwyOAorI2VuZGlmCisxOglsd3oJcjAsUFRFX0ZMQUdTX09GRlNFVChyNSkKIAljbXB3aQljcjEscjYsMQogCWFuZGkuCXIwLHIwLF9QQUdFX0hBU0hQVEUKIAlibmUJMmYKIAlibGUJY3IxLDE5ZgogCWFkZGkJcjQscjQsMHgxMDAwCi0JYWRkaQlyNSxyNSw0CisJYWRkaQlyNSxyNSxQVEVfU0laRQogCWFkZGkJcjYscjYsLTEKIAliCTFiCiAKQEAgLTU0NSw3ICs1OTYsMTAgQEAKIAkgKiBhbHJlYWR5IGNsZWFyLCB3ZSdyZSBkb25lIChmb3IgdGhpcyBwdGUpLiAgSWYgbm90LAogCSAqIGNsZWFyIGl0IChhdG9taWNhbGx5KSBhbmQgcHJvY2VlZC4gIC0tIHBhdWx1cy4KIAkgKi8KLTMzOglsd2FyeAlyOCwwLHI1CQkJLyogZmV0Y2ggdGhlIHB0ZSAqLworI2lmIChQVEVfRkxBR1NfT0ZGU0VUICE9IDApCisJYWRkaQlyNSxyNSxQVEVfRkxBR1NfT0ZGU0VUCisjZW5kaWYKKzMzOglsd2FyeAlyOCwwLHI1CQkJLyogZmV0Y2ggdGhlIHB0ZSBmbGFncyB3b3JkICovCiAJYW5kaS4JcjAscjgsX1BBR0VfSEFTSFBURQogCWJlcQk4ZgkJCS8qIGRvbmUgaWYgSEFTSFBURSBpcyBhbHJlYWR5IGNsZWFyICovCiAJcmx3aW5tCXI4LHI4LDAsMzEsMjkJCS8qIGNsZWFyIEhBU0hQVEUgYml0ICovCkBAIC01NjIsOCArNjE2LDggQEAKIAkvKiBTZWFyY2ggdGhlIHByaW1hcnkgUFRFRyBmb3IgYSBQVEUgd2hvc2UgMXN0IChkKXdvcmQgbWF0Y2hlcyByNSAqLwogCWxpCXIwLDgJCQkvKiBQVEVzL2dyb3VwICovCiAJbXRjdHIJcjAKLQlhZGRpCXIxMixyOCwtUFRFX1NJWkUKLTE6CUxEUFRFdQlyMCxQVEVfU0laRShyMTIpCS8qIGdldCBuZXh0IFBURSAqLworCWFkZGkJcjEyLHI4LC1IUFRFX1NJWkUKKzE6CUxEUFRFdQlyMCxIUFRFX1NJWkUocjEyKQkvKiBnZXQgbmV4dCBQVEUgKi8KIAlDTVBQVEUJMCxyMCxyMTEKIAliZG56ZgkyLDFiCQkJLyogbG9vcCB3aGlsZSBjdHIgIT0gMCAmJiAhY3IwLmVxICovCiAJYmVxKwkzZgpAQCAtNTc0LDkgKzYyOCw5IEBACiBfR0xPQkFMKGZsdXNoX2hhc2hfcGF0Y2hfQikKIAl4b3JpcwlyMTIscjgsSGFzaF9tc2s+PjE2CS8qIGNvbXB1dGUgc2Vjb25kYXJ5IGhhc2ggKi8KIAl4b3JpCXIxMixyMTIsKC1QVEVHX1NJWkUgJiAweGZmZmYpCi0JYWRkaQlyMTIscjEyLC1QVEVfU0laRQorCWFkZGkJcjEyLHIxMiwtSFBURV9TSVpFCiAJbXRjdHIJcjAKLTI6CUxEUFRFdQlyMCxQVEVfU0laRShyMTIpCisyOglMRFBURXUJcjAsSFBURV9TSVpFKHIxMikKIAlDTVBQVEUJMCxyMCxyMTEKIAliZG56ZgkyLDJiCiAJeG9yaQlyMTEscjExLFBURV9ICQkvKiBjbGVhciBIIGFnYWluICovCkBAIC01OTAsNyArNjQ0LDcgQEAKIAogODoJYmxlCWNyMSw5ZgkJCS8qIGlmIGFsbCBwdGVzIGNoZWNrZWQgKi8KIDgxOglhZGRpCXI2LHI2LC0xCi0JYWRkaQlyNSxyNSw0CQkJLyogYWR2YW5jZSB0byBuZXh0IHB0ZSAqLworCWFkZGkJcjUscjUsUFRFX1NJWkUKIAlhZGRpCXI0LHI0LDB4MTAwMAogCWx3eglyMCwwKHI1KQkJLyogY2hlY2sgbmV4dCBwdGUgKi8KIAljbXB3aQljcjEscjYsMQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKaW5kZXggODkyMGVlYS4uNWM2NGFmMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAkJdW5zaWduZWQgbG9uZyB0cHJvdCA9IHByb3Q7CiAKIAkJLyogTWFrZSBrZXJuZWwgdGV4dCBleGVjdXRhYmxlICovCi0JCWlmIChpbl9rZXJuZWxfdGV4dCh2YWRkcikpCisJCWlmIChvdmVybGFwc19rZXJuZWxfdGV4dCh2YWRkciwgdmFkZHIgKyBzdGVwKSkKIAkJCXRwcm90ICY9IH5IUFRFX1JfTjsKIAogCQloYXNoID0gaHB0X2hhc2godmEsIHNoaWZ0LCBzc2l6ZSk7CkBAIC0zNDgsNiArMzQ4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIC8qIFNjYW4gZm9yIDE2RyBtZW1vcnkgYmxvY2tzIHRoYXQgaGF2ZSBiZWVuIHNldCBhc2lkZSBmb3IgaHVnZSBwYWdlcwogICogYW5kIHJlc2VydmUgdGhvc2UgYmxvY2tzIGZvciAxNkcgaHVnZSBwYWdlcy4KICAqLwpAQCAtMzg1LDYgKzM4Niw3IEBACiAJYWRkX2dwYWdlKHBoeXNfYWRkciwgYmxvY2tfc2l6ZSwgZXhwZWN0ZWRfcGFnZXMpOwogCXJldHVybiAwOwogfQorI2VuZGlmIC8qIENPTkZJR19IVUdFVExCX1BBR0UgKi8KIAogc3RhdGljIHZvaWQgX19pbml0IGh0YWJfaW5pdF9wYWdlX3NpemVzKHZvaWQpCiB7CkBAIC01MzksNyArNTQxLDcgQEAKIHZvaWQgY3JlYXRlX3NlY3Rpb25fbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlCVUdfT04oaHRhYl9ib2x0X21hcHBpbmcoc3RhcnQsIGVuZCwgX19wYShzdGFydCksCi0JCQkJIFBBR0VfS0VSTkVMLCBtbXVfbGluZWFyX3BzaXplLAorCQkJCSBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKSwgbW11X2xpbmVhcl9wc2l6ZSwKIAkJCQkgbW11X2tlcm5lbF9zc2l6ZSkpOwogfQogCkBAIC02NDcsNyArNjQ5LDcgQEAKIAkJbXRzcHIoU1BSTl9TRFIxLCBfU0RSMSk7CiAJfQogCi0JcHJvdCA9IFBBR0VfS0VSTkVMOworCXByb3QgPSBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKTsKIAogI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKIAlsaW5lYXJfbWFwX2hhc2hfY291bnQgPSBsbWJfZW5kX29mX0RSQU0oKSA+PiBQQUdFX1NISUZUOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCBmMWMyZDU1Li5hMTE3MDI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMTI4LDI5ICsxMjgsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogQmFzZSBwYWdlIHNpemUgYWZmZWN0cyBob3cgd2Ugd2FsayBodWdldGxiIHBhZ2UgdGFibGVzICovCi0jaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLSNkZWZpbmUgaHBtZF9vZmZzZXQocHVkLCBhZGRyLCBoKQlwbWRfb2Zmc2V0KHB1ZCwgYWRkcikKLSNkZWZpbmUgaHBtZF9hbGxvYyhtbSwgcHVkLCBhZGRyLCBoKQlwbWRfYWxsb2MobW0sIHB1ZCwgYWRkcikKLSNlbHNlCi1zdGF0aWMgaW5saW5lCi1wbWRfdCAqaHBtZF9vZmZzZXQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgaHN0YXRlICpoc3RhdGUpCisKK3N0YXRpYyBwdWRfdCAqaHB1ZF9vZmZzZXQocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgaHN0YXRlICpoc3RhdGUpCiB7Ci0JaWYgKGh1Z2VfcGFnZV9zaGlmdChoc3RhdGUpID09IFBBR0VfU0hJRlRfNjRLKQorCWlmIChodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlKSA8IFBVRF9TSElGVCkKKwkJcmV0dXJuIHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwllbHNlCisJCXJldHVybiAocHVkX3QgKikgcGdkOworfQorc3RhdGljIHB1ZF90ICpocHVkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgc3RydWN0IGhzdGF0ZSAqaHN0YXRlKQoreworCWlmIChodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlKSA8IFBVRF9TSElGVCkKKwkJcmV0dXJuIHB1ZF9hbGxvYyhtbSwgcGdkLCBhZGRyKTsKKwllbHNlCisJCXJldHVybiAocHVkX3QgKikgcGdkOworfQorc3RhdGljIHBtZF90ICpocG1kX29mZnNldChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSkKK3sKKwlpZiAoaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZSkgPCBQTURfU0hJRlQpCiAJCXJldHVybiBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CiAJZWxzZQogCQlyZXR1cm4gKHBtZF90ICopIHB1ZDsKIH0KLXN0YXRpYyBpbmxpbmUKLXBtZF90ICpocG1kX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCSAgc3RydWN0IGhzdGF0ZSAqaHN0YXRlKQorc3RhdGljIHBtZF90ICpocG1kX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgc3RydWN0IGhzdGF0ZSAqaHN0YXRlKQogewotCWlmIChodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlKSA9PSBQQUdFX1NISUZUXzY0SykKKwlpZiAoaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZSkgPCBQTURfU0hJRlQpCiAJCXJldHVybiBwbWRfYWxsb2MobW0sIHB1ZCwgYWRkcik7CiAJZWxzZQogCQlyZXR1cm4gKHBtZF90ICopIHB1ZDsKIH0KLSNlbmRpZgogCiAvKiBCdWlsZCBsaXN0IG9mIGFkZHJlc3NlcyBvZiBnaWdhbnRpYyBwYWdlcy4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBlYXJseQogICogYm9vdCBiZWZvcmUgdGhlIGJ1ZGR5IG9yIGJvb3RtZW0gYWxsb2NhdG9yIGlzIHNldHVwLgpAQCAtMjA0LDcgKzIxMiw3IEBACiAKIAlwZyA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOwogCWlmICghcGdkX25vbmUoKnBnKSkgewotCQlwdSA9IHB1ZF9vZmZzZXQocGcsIGFkZHIpOworCQlwdSA9IGhwdWRfb2Zmc2V0KHBnLCBhZGRyLCBoc3RhdGUpOwogCQlpZiAoIXB1ZF9ub25lKCpwdSkpIHsKIAkJCXBtID0gaHBtZF9vZmZzZXQocHUsIGFkZHIsIGhzdGF0ZSk7CiAJCQlpZiAoIXBtZF9ub25lKCpwbSkpCkBAIC0yMzMsNyArMjQxLDcgQEAKIAlhZGRyICY9IGhzdGF0ZS0+bWFzazsKIAogCXBnID0gcGdkX29mZnNldChtbSwgYWRkcik7Ci0JcHUgPSBwdWRfYWxsb2MobW0sIHBnLCBhZGRyKTsKKwlwdSA9IGhwdWRfYWxsb2MobW0sIHBnLCBhZGRyLCBoc3RhdGUpOwogCiAJaWYgKHB1KSB7CiAJCXBtID0gaHBtZF9hbGxvYyhtbSwgcHUsIGFkZHIsIGhzdGF0ZSk7CkBAIC0zMTYsMTMgKzMyNCw3IEBACiAJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOwogCWRvIHsKIAkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCi0JCWlmIChwdWRfbm9uZV9vcl9jbGVhcl9iYWQocHVkKSkKLQkJCWNvbnRpbnVlOwotCQlodWdldGxiX2ZyZWVfcG1kX3JhbmdlKHRsYiwgcHVkLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZywKLQkJCQkgICAgICAgcHNpemUpOwotI2Vsc2UKLQkJaWYgKHNoaWZ0ID09IFBBR0VfU0hJRlRfNjRLKSB7CisJCWlmIChzaGlmdCA8IFBNRF9TSElGVCkgewogCQkJaWYgKHB1ZF9ub25lX29yX2NsZWFyX2JhZChwdWQpKQogCQkJCWNvbnRpbnVlOwogCQkJaHVnZXRsYl9mcmVlX3BtZF9yYW5nZSh0bGIsIHB1ZCwgYWRkciwgbmV4dCwgZmxvb3IsCkBAIC0zMzIsNyArMzM0LDYgQEAKIAkJCQljb250aW51ZTsKIAkJCWZyZWVfaHVnZXB0ZV9yYW5nZSh0bGIsIChodWdlcGRfdCAqKXB1ZCwgcHNpemUpOwogCQl9Ci0jZW5kaWYKIAl9IHdoaWxlIChwdWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIAogCXN0YXJ0ICY9IFBHRElSX01BU0s7CkBAIC00MjIsOSArNDIzLDE1IEBACiAJCXBzaXplID0gZ2V0X3NsaWNlX3BzaXplKHRsYi0+bW0sIGFkZHIpOwogCQlCVUdfT04oIW1tdV9odWdlX3BzaXplc1twc2l6ZV0pOwogCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmIChwZ2Rfbm9uZV9vcl9jbGVhcl9iYWQocGdkKSkKLQkJCWNvbnRpbnVlOwotCQlodWdldGxiX2ZyZWVfcHVkX3JhbmdlKHRsYiwgcGdkLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZyk7CisJCWlmIChtbXVfcHNpemVfdG9fc2hpZnQocHNpemUpIDwgUFVEX1NISUZUKSB7CisJCQlpZiAocGdkX25vbmVfb3JfY2xlYXJfYmFkKHBnZCkpCisJCQkJY29udGludWU7CisJCQlodWdldGxiX2ZyZWVfcHVkX3JhbmdlKHRsYiwgcGdkLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZyk7CisJCX0gZWxzZSB7CisJCQlpZiAocGdkX25vbmUoKnBnZCkpCisJCQkJY29udGludWU7CisJCQlmcmVlX2h1Z2VwdGVfcmFuZ2UodGxiLCAoaHVnZXBkX3QgKilwZ2QsIHBzaXplKTsKKwkJfQogCX0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwppbmRleCAwMzZmZTJmLi4zZTZhNjU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKQEAgLTIyOCw4ICsyMjgsOCBAQAogCQkJc3RhcnQsIHAsIF9fcGEocCkpOwogCiAJCW1hcHBlZCA9IGh0YWJfYm9sdF9tYXBwaW5nKHN0YXJ0LCBzdGFydCArIHBhZ2Vfc2l6ZSwgX19wYShwKSwKLQkJCQkJICAgUEFHRV9LRVJORUwsIG1tdV92bWVtbWFwX3BzaXplLAotCQkJCQkgICBtbXVfa2VybmVsX3NzaXplKTsKKwkJCQkJICAgcGdwcm90X3ZhbChQQUdFX0tFUk5FTCksCisJCQkJCSAgIG1tdV92bWVtbWFwX3BzaXplLCBtbXVfa2VybmVsX3NzaXplKTsKIAkJQlVHX09OKG1hcHBlZCA8IDApOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IDFjOTNjMjUuLmI5ZTFhMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTc1LDExICs3NSwxMCBAQAogCiBpbnQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwZm4pCiB7Ci0JdW5zaWduZWQgbG9uZyBwYWRkciA9IChwZm4gPDwgUEFHRV9TSElGVCk7Ci0KICNpZm5kZWYgQ09ORklHX1BQQzY0CS8qIFhYWCBmb3Igbm93ICovCi0JcmV0dXJuIHBhZGRyIDwgX19wYShoaWdoX21lbW9yeSk7CisJcmV0dXJuIHBmbiA8IG1heF9wZm47CiAjZWxzZQorCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSAocGZuIDw8IFBBR0VfU0hJRlQpOwogCWludCBpOwogCWZvciAoaT0wOyBpIDwgbG1iLm1lbW9yeS5jbnQ7IGkrKykgewogCQl1bnNpZ25lZCBsb25nIGJhc2U7CkBAIC0xMzUsMjMgKzEzNCw2IEBACiAKIAlyZXR1cm4gX19hZGRfcGFnZXMoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7CiB9Ci0KLSNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRQotaW50IHJlbW92ZV9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKLQlpbnQgcmV0OwotCi0Jc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKLQllbmRfcGZuID0gc3RhcnRfcGZuICsgKHNpemUgPj4gUEFHRV9TSElGVCk7Ci0JcmV0ID0gb2ZmbGluZV9wYWdlcyhzdGFydF9wZm4sIGVuZF9wZm4sIDEyMCAqIEhaKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQkvKiBBcmNoLXNwZWNpZmljIGNhbGxzIGdvIGhlcmUgLSBuZXh0IHBhdGNoICovCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqLwogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL251bWEuYyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKaW5kZXggZDlhMTgxMy4uNmNmNWM3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL251bWEuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCkBAIC04OSw2ICs4OSw0NiBAQAogCXJldHVybiAwOwogfQogCisvKgorICogZ2V0X2FjdGl2ZV9yZWdpb25fd29ya19mbiAtIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXRfbm9kZV9hY3RpdmVfcmVnaW9uCisgKglSZXR1cm5zIGRhdGF4IHNldCB0byB0aGUgc3RhcnRfcGZuIGFuZCBlbmRfcGZuIGlmIHRoZXkgY29udGFpbgorICoJdGhlIGluaXRpYWwgdmFsdWUgb2YgZGF0YXgtPnN0YXJ0X3BmbiBiZXR3ZWVuIHRoZW0KKyAqIEBzdGFydF9wZm46IHN0YXJ0IHBhZ2UoaW5jbHVzaXZlKSBvZiByZWdpb24gdG8gY2hlY2sKKyAqIEBlbmRfcGZuOiBlbmQgcGFnZShleGNsdXNpdmUpIG9mIHJlZ2lvbiB0byBjaGVjaworICogQGRhdGF4OiBjb21lcyBpbiB3aXRoIC0+c3RhcnRfcGZuIHNldCB0byB2YWx1ZSB0byBzZWFyY2ggZm9yIGFuZAorICoJZ29lcyBvdXQgd2l0aCBhY3RpdmUgcmFuZ2UgaWYgaXQgY29udGFpbnMgaXQKKyAqIFJldHVybnMgMSBpZiBzZWFyY2ggdmFsdWUgaXMgaW4gcmFuZ2UgZWxzZSAwCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGdldF9hY3RpdmVfcmVnaW9uX3dvcmtfZm4odW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCisJCQkJCXVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgdm9pZCAqZGF0YXgpCit7CisJc3RydWN0IG5vZGVfYWN0aXZlX3JlZ2lvbiAqZGF0YTsKKwlkYXRhID0gKHN0cnVjdCBub2RlX2FjdGl2ZV9yZWdpb24gKilkYXRheDsKKworCWlmIChzdGFydF9wZm4gPD0gZGF0YS0+c3RhcnRfcGZuICYmIGVuZF9wZm4gPiBkYXRhLT5zdGFydF9wZm4pIHsKKwkJZGF0YS0+c3RhcnRfcGZuID0gc3RhcnRfcGZuOworCQlkYXRhLT5lbmRfcGZuID0gZW5kX3BmbjsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworCit9CisKKy8qCisgKiBnZXRfbm9kZV9hY3RpdmVfcmVnaW9uIC0gUmV0dXJuIGFjdGl2ZSByZWdpb24gY29udGFpbmluZyBzdGFydF9wZm4KKyAqIEBzdGFydF9wZm46IFRoZSBwYWdlIHRvIHJldHVybiB0aGUgcmVnaW9uIGZvci4KKyAqIEBub2RlX2FyOiBSZXR1cm5lZCBzZXQgdG8gdGhlIGFjdGl2ZSByZWdpb24gY29udGFpbmluZyBzdGFydF9wZm4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGdldF9ub2RlX2FjdGl2ZV9yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCisJCSAgICAgICBzdHJ1Y3Qgbm9kZV9hY3RpdmVfcmVnaW9uICpub2RlX2FyKQoreworCWludCBuaWQgPSBlYXJseV9wZm5fdG9fbmlkKHN0YXJ0X3Bmbik7CisKKwlub2RlX2FyLT5uaWQgPSBuaWQ7CisJbm9kZV9hci0+c3RhcnRfcGZuID0gc3RhcnRfcGZuOworCXdvcmtfd2l0aF9hY3RpdmVfcmVnaW9ucyhuaWQsIGdldF9hY3RpdmVfcmVnaW9uX3dvcmtfZm4sIG5vZGVfYXIpOworfQorCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgbWFwX2NwdV90b19ub2RlKGludCBjcHUsIGludCBub2RlKQogewogCW51bWFfY3B1X2xvb2t1cF90YWJsZVtjcHVdID0gbm9kZTsKQEAgLTE1MCw2ICsxOTAsMjEgQEAKIAlyZXR1cm4gb2ZfZ2V0X3Byb3BlcnR5KGRldiwgImlibSxhc3NvY2lhdGl2aXR5IiwgTlVMTCk7CiB9CiAKKy8qCisgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBsaW51eCxkcmNvbmYtdXNhYmxlLW1lbW9yeSBpZgorICogaXQgZXhpc3RzICh0aGUgcHJvcGVydHkgZXhpc3RzIG9ubHkgaW4ga2V4ZWMva2R1bXAga2VybmVscywKKyAqIGFkZGVkIGJ5IGtleGVjLXRvb2xzKQorICovCitzdGF0aWMgY29uc3QgdTMyICpvZl9nZXRfdXNhYmxlX21lbW9yeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm1lbW9yeSkKK3sKKwljb25zdCB1MzIgKnByb3A7CisJdTMyIGxlbjsKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG1lbW9yeSwgImxpbnV4LGRyY29uZi11c2FibGUtbWVtb3J5IiwgJmxlbik7CisJaWYgKCFwcm9wIHx8IGxlbiA8IHNpemVvZih1bnNpZ25lZCBpbnQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcHJvcDsKK30KKwogLyogUmV0dXJucyBuaWQgaW4gdGhlIHJhbmdlIFswLi5NQVhfTlVNTk9ERVMtMV0sIG9yIC0xIGlmIG5vIHVzZWZ1bCBudW1hCiAgKiBpbmZvIGlzIGZvdW5kLgogICovCkBAIC00ODcsMTQgKzU0MiwyOSBAQAogfQogCiAvKgorICogUmVhZHMgdGhlIGNvdW50ZXIgZm9yIGEgZ2l2ZW4gZW50cnkgaW4KKyAqIGxpbnV4LGRyY29uZi11c2FibGUtbWVtb3J5IHByb3BlcnR5CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCByZWFkX3VzbV9yYW5nZXMoY29uc3QgdTMyICoqdXNtKQoreworCS8qCisJICogRm9yIGVhY2ggbG1iIGluIGlibSxkeW5hbWljLW1lbW9yeSBhIGNvcnJlc3BvbmRpbmcKKwkgKiBlbnRyeSBpbiBsaW51eCxkcmNvbmYtdXNhYmxlLW1lbW9yeSBwcm9wZXJ0eSBjb250YWlucworCSAqIGEgY291bnRlciBmb2xsb3dlZCBieSB0aGF0IG1hbnkgKGJhc2UsIHNpemUpIGR1cGxlLgorCSAqIHJlYWQgdGhlIGNvdW50ZXIgZnJvbSBsaW51eCxkcmNvbmYtdXNhYmxlLW1lbW9yeQorCSAqLworCXJldHVybiByZWFkX25fY2VsbHMobl9tZW1fc2l6ZV9jZWxscywgdXNtKTsKK30KKworLyoKICAqIEV4dHJhY3QgTlVNQSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5CiAgKiBub2RlLiAgVGhpcyBhc3N1bWVzIG5fbWVtX3thZGRyLHNpemV9X2NlbGxzIGhhdmUgYmVlbiBzZXQuCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9kcmNvbmZfbWVtb3J5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5KQogewotCWNvbnN0IHUzMiAqZG07Ci0JdW5zaWduZWQgaW50IG4sIHJjOwotCXVuc2lnbmVkIGxvbmcgbG1iX3NpemUsIHNpemU7CisJY29uc3QgdTMyICpkbSwgKnVzbTsKKwl1bnNpZ25lZCBpbnQgbiwgcmMsIHJhbmdlcywgaXNfa2V4ZWNfa2R1bXAgPSAwOworCXVuc2lnbmVkIGxvbmcgbG1iX3NpemUsIGJhc2UsIHNpemUsIHN6OwogCWludCBuaWQ7CiAJc3RydWN0IGFzc29jX2FycmF5cyBhYTsKIApAQCAtNTEwLDYgKzU4MCwxMSBAQAogCWlmIChyYykKIAkJcmV0dXJuOwogCisJLyogY2hlY2sgaWYgdGhpcyBpcyBhIGtleGVjL2tkdW1wIGtlcm5lbCAqLworCXVzbSA9IG9mX2dldF91c2FibGVfbWVtb3J5KG1lbW9yeSk7CisJaWYgKHVzbSAhPSBOVUxMKQorCQlpc19rZXhlY19rZHVtcCA9IDE7CisKIAlmb3IgKDsgbiAhPSAwOyAtLW4pIHsKIAkJc3RydWN0IG9mX2RyY29uZl9jZWxsIGRybWVtOwogCkBAIC01MjEsMjEgKzU5NiwzMSBAQAogCQkgICAgfHwgIShkcm1lbS5mbGFncyAmIERSQ09ORl9NRU1fQVNTSUdORUQpKQogCQkJY29udGludWU7CiAKLQkJbmlkID0gb2ZfZHJjb25mX3RvX25pZF9zaW5nbGUoJmRybWVtLCAmYWEpOworCQliYXNlID0gZHJtZW0uYmFzZV9hZGRyOworCQlzaXplID0gbG1iX3NpemU7CisJCXJhbmdlcyA9IDE7CiAKLQkJZmFrZV9udW1hX2NyZWF0ZV9uZXdfbm9kZSgKLQkJCQkoKGRybWVtLmJhc2VfYWRkciArIGxtYl9zaXplKSA+PiBQQUdFX1NISUZUKSwKKwkJaWYgKGlzX2tleGVjX2tkdW1wKSB7CisJCQlyYW5nZXMgPSByZWFkX3VzbV9yYW5nZXMoJnVzbSk7CisJCQlpZiAoIXJhbmdlcykgLyogdGhlcmUgYXJlIG5vIChiYXNlLCBzaXplKSBkdXBsZSAqLworCQkJCWNvbnRpbnVlOworCQl9CisJCWRvIHsKKwkJCWlmIChpc19rZXhlY19rZHVtcCkgeworCQkJCWJhc2UgPSByZWFkX25fY2VsbHMobl9tZW1fYWRkcl9jZWxscywgJnVzbSk7CisJCQkJc2l6ZSA9IHJlYWRfbl9jZWxscyhuX21lbV9zaXplX2NlbGxzLCAmdXNtKTsKKwkJCX0KKwkJCW5pZCA9IG9mX2RyY29uZl90b19uaWRfc2luZ2xlKCZkcm1lbSwgJmFhKTsKKwkJCWZha2VfbnVtYV9jcmVhdGVfbmV3X25vZGUoCisJCQkJKChiYXNlICsgc2l6ZSkgPj4gUEFHRV9TSElGVCksCiAJCQkJCSAgICZuaWQpOwotCi0JCW5vZGVfc2V0X29ubGluZShuaWQpOwotCi0JCXNpemUgPSBudW1hX2VuZm9yY2VfbWVtb3J5X2xpbWl0KGRybWVtLmJhc2VfYWRkciwgbG1iX3NpemUpOwotCQlpZiAoIXNpemUpCi0JCQljb250aW51ZTsKLQotCQlhZGRfYWN0aXZlX3JhbmdlKG5pZCwgZHJtZW0uYmFzZV9hZGRyID4+IFBBR0VfU0hJRlQsCi0JCQkJIChkcm1lbS5iYXNlX2FkZHIgPj4gUEFHRV9TSElGVCkKLQkJCQkgKyAoc2l6ZSA+PiBQQUdFX1NISUZUKSk7CisJCQlub2RlX3NldF9vbmxpbmUobmlkKTsKKwkJCXN6ID0gbnVtYV9lbmZvcmNlX21lbW9yeV9saW1pdChiYXNlLCBzaXplKTsKKwkJCWlmIChzeikKKwkJCQlhZGRfYWN0aXZlX3JhbmdlKG5pZCwgYmFzZSA+PiBQQUdFX1NISUZULAorCQkJCQkJIChiYXNlID4+IFBBR0VfU0hJRlQpCisJCQkJCQkgKyAoc3ogPj4gUEFHRV9TSElGVCkpOworCQl9IHdoaWxlICgtLXJhbmdlcyk7CiAJfQogfQogCkBAIC04MzcsMzggKzkyMiw1MCBAQAogCQkJCSAgc3RhcnRfcGZuLCBlbmRfcGZuKTsKIAogCQlmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucyhuaWQsIGVuZF9wZm4pOworCX0KIAotCQkvKiBNYXJrIHJlc2VydmVkIHJlZ2lvbnMgb24gdGhpcyBub2RlICovCi0JCWZvciAoaSA9IDA7IGkgPCBsbWIucmVzZXJ2ZWQuY250OyBpKyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgcGh5c2Jhc2UgPSBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2U7Ci0JCQl1bnNpZ25lZCBsb25nIHNpemUgPSBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLnNpemU7Ci0JCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZGRyID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JCQl1bnNpZ25lZCBsb25nIGVuZF9wYWRkciA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKKwkvKiBNYXJrIHJlc2VydmVkIHJlZ2lvbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbG1iLnJlc2VydmVkLmNudDsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgcGh5c2Jhc2UgPSBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2U7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGxtYi5yZXNlcnZlZC5yZWdpb25baV0uc2l6ZTsKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBwaHlzYmFzZSA+PiBQQUdFX1NISUZUOworCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSAoKHBoeXNiYXNlICsgc2l6ZSkgPj4gUEFHRV9TSElGVCk7CisJCXN0cnVjdCBub2RlX2FjdGl2ZV9yZWdpb24gbm9kZV9hcjsKIAotCQkJaWYgKGVhcmx5X3Bmbl90b19uaWQocGh5c2Jhc2UgPj4gUEFHRV9TSElGVCkgIT0gbmlkICYmCi0JCQkgICAgZWFybHlfcGZuX3RvX25pZCgocGh5c2Jhc2Urc2l6ZS0xKSA+PiBQQUdFX1NISUZUKSAhPSBuaWQpCi0JCQkJY29udGludWU7CisJCWdldF9ub2RlX2FjdGl2ZV9yZWdpb24oc3RhcnRfcGZuLCAmbm9kZV9hcik7CisJCXdoaWxlIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7CisJCQkvKgorCQkJICogaWYgcmVzZXJ2ZWQgcmVnaW9uIGV4dGVuZHMgcGFzdCBhY3RpdmUgcmVnaW9uCisJCQkgKiB0aGVuIHRyaW0gc2l6ZSB0byBhY3RpdmUgcmVnaW9uCisJCQkgKi8KKwkJCWlmIChlbmRfcGZuID4gbm9kZV9hci5lbmRfcGZuKQorCQkJCXNpemUgPSAobm9kZV9hci5lbmRfcGZuIDw8IFBBR0VfU0hJRlQpCisJCQkJCS0gKHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUKTsKKwkJCWRiZygicmVzZXJ2ZV9ib290bWVtICVseCAlbHggbmlkPSVkXG4iLCBwaHlzYmFzZSwgc2l6ZSwKKwkJCQlub2RlX2FyLm5pZCk7CisJCQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZV9hci5uaWQpLCBwaHlzYmFzZSwKKwkJCQkJCXNpemUsIEJPT1RNRU1fREVGQVVMVCk7CisJCQkvKgorCQkJICogaWYgcmVzZXJ2ZWQgcmVnaW9uIGlzIGNvbnRhaW5lZCBpbiB0aGUgYWN0aXZlIHJlZ2lvbgorCQkJICogdGhlbiBkb25lLgorCQkJICovCisJCQlpZiAoZW5kX3BmbiA8PSBub2RlX2FyLmVuZF9wZm4pCisJCQkJYnJlYWs7CiAKLQkJCWlmIChwaHlzYmFzZSA8IGVuZF9wYWRkciAmJgotCQkJICAgIChwaHlzYmFzZStzaXplKSA+IHN0YXJ0X3BhZGRyKSB7Ci0JCQkJLyogb3ZlcmxhcHMgKi8KLQkJCQlpZiAocGh5c2Jhc2UgPCBzdGFydF9wYWRkcikgewotCQkJCQlzaXplIC09IHN0YXJ0X3BhZGRyIC0gcGh5c2Jhc2U7Ci0JCQkJCXBoeXNiYXNlID0gc3RhcnRfcGFkZHI7Ci0JCQkJfQotCi0JCQkJaWYgKHNpemUgPiBlbmRfcGFkZHIgLSBwaHlzYmFzZSkKLQkJCQkJc2l6ZSA9IGVuZF9wYWRkciAtIHBoeXNiYXNlOwotCi0JCQkJZGJnKCJyZXNlcnZlX2Jvb3RtZW0gJWx4ICVseFxuIiwgcGh5c2Jhc2UsCi0JCQkJICAgIHNpemUpOwotCQkJCXJlc2VydmVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShuaWQpLCBwaHlzYmFzZSwKLQkJCQkJCSAgICAgc2l6ZSwgQk9PVE1FTV9ERUZBVUxUKTsKLQkJCX0KKwkJCS8qCisJCQkgKiByZXNlcnZlZCByZWdpb24gZXh0ZW5kcyBwYXN0IHRoZSBhY3RpdmUgcmVnaW9uCisJCQkgKiAgIGdldCBuZXh0IGFjdGl2ZSByZWdpb24gdGhhdCBjb250YWlucyB0aGlzCisJCQkgKiAgIHJlc2VydmVkIHJlZ2lvbgorCQkJICovCisJCQlzdGFydF9wZm4gPSBub2RlX2FyLmVuZF9wZm47CisJCQlwaHlzYmFzZSA9IHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUOworCQkJZ2V0X25vZGVfYWN0aXZlX3JlZ2lvbihzdGFydF9wZm4sICZub2RlX2FyKTsKIAkJfQogCi0JCXNwYXJzZV9tZW1vcnlfcHJlc2VudF93aXRoX2FjdGl2ZV9yZWdpb25zKG5pZCk7CiAJfQorCisJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKQorCQlzcGFyc2VfbWVtb3J5X3ByZXNlbnRfd2l0aF9hY3RpdmVfcmVnaW9ucyhuaWQpOwogfQogCiB2b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKaW5kZXggMjAwMWFiZC4uYzMxZDZkMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCkBAIC03Myw3ICs3Myw3IEBACiAjZW5kaWYgLyogSEFWRV9UTEJDQU0gKi8KIAogI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKLS8qIDQ0eCB1c2VzIGFuIDhrQiBwZ2RpciBiZWNhdXNlIGl0IGhhcyA4LWJ5dGUgTGludXggUFRFcy4gKi8KKy8qIFNvbWUgcHJvY2Vzc29ycyB1c2UgYW4gOGtCIHBnZGlyIGJlY2F1c2UgdGhleSBoYXZlIDgtYnl0ZSBMaW51eCBQVEVzLiAqLwogI2RlZmluZSBQR0RJUl9PUkRFUgkxCiAjZWxzZQogI2RlZmluZSBQR0RJUl9PUkRFUgkwCkBAIC0yODgsNyArMjg4LDcgQEAKIH0KIAogLyoKLSAqIE1hcCBpbiBhbGwgb2YgcGh5c2ljYWwgbWVtb3J5IHN0YXJ0aW5nIGF0IEtFUk5FTEJBU0UuCisgKiBNYXAgaW4gYSBiaWcgY2h1bmsgb2YgcGh5c2ljYWwgbWVtb3J5IHN0YXJ0aW5nIGF0IEtFUk5FTEJBU0UuCiAgKi8KIHZvaWQgX19pbml0IG1hcGluX3JhbSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL3RsYl8zMi5jCmluZGV4IGViNGI1MTIuLmY5YTQ3ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiXzMyLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIAkJZmx1c2hfaGFzaF9wYWdlcyhtbS0+Y29udGV4dC5pZCwgYWRkciwgcHRlcGh5cywgMSk7CiAJfQogfQorRVhQT1JUX1NZTUJPTChmbHVzaF9oYXNoX2VudHJ5KTsKIAogLyoKICAqIENhbGxlZCBieSBwdGVwX3NldF9hY2Nlc3NfZmxhZ3MsIG11c3QgZmx1c2ggb24gQ1BVcyBmb3Igd2hpY2ggdGhlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY2VsbC92bWFfbWFwLmMgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY2VsbC92bWFfbWFwLmMKaW5kZXggZmZmNjY2Ni4uMjU4ZmE0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvdm1hX21hcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9jZWxsL3ZtYV9tYXAuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAJICovCiAJb3ZlcmxheV90Ymxfb2Zmc2V0ID0gdm1hX21hcF9sb29rdXAobWFwLCBvdmx5X3RhYmxlX3N5bSwKIAkJCQkJICAgIGFTcHUsICZncmRfdmFsKTsKLQlpZiAob3ZlcmxheV90Ymxfb2Zmc2V0IDwgMCkgeworCWlmIChvdmVybGF5X3RibF9vZmZzZXQgPiAweDEwMDAwMDAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiU1BVX1BST0Y6ICIKIAkJICAgICAgICIlcywgbGluZSAlZDogRXJyb3IgZmluZGluZyBTUFUgb3ZlcmxheSB0YWJsZVxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcG93ZXI0LmMgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcG93ZXI0LmMKaW5kZXggNDQ2YThiYi4uM2UzZDkxZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jCisrKyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYwpAQCAtNjQsNyArNjQsNyBAQAogCXJldHVybiAwOwogfQogCi1leHRlcm4gdm9pZCBwcGM2NF9lbmFibGVfcG1jcyh2b2lkKTsKK2V4dGVybiB2b2lkIHBwY19lbmFibGVfcG1jcyh2b2lkKTsKIAogLyoKICAqIE9sZGVyIENQVXMgcmVxdWlyZSB0aGUgTU1DUkEgc2FtcGxlIGJpdCB0byBiZSBhbHdheXMgc2V0LCBidXQgbmV3ZXIgCkBAIC05MSw3ICs5MSw3IEBACiAJdW5zaWduZWQgaW50IG1tY3IwID0gbW1jcjBfdmFsOwogCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSBtbWNyYV92YWw7CiAKLQlwcGM2NF9lbmFibGVfcG1jcygpOworCXBwY19lbmFibGVfcG1jcygpOwogCiAJLyogc2V0IHRoZSBmcmVlemUgYml0ICovCiAJbW1jcjAgfD0gTU1DUjBfRkM7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZwppbmRleCAyNDliYTAxLi43OWMxMTU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAJYm9vbCAiQmFtYm9vIgogCWRlcGVuZHMgb24gNDR4CiAJZGVmYXVsdCBuCisJc2VsZWN0IFBQQzQ0eF9TSU1QTEUKIAlzZWxlY3QgNDQwRVAKIAlzZWxlY3QgUENJCiAJaGVscApAQCAtMzAsNiArMzEsNyBAQAogCWJvb2wgIlNlcXVvaWEiCiAJZGVwZW5kcyBvbiA0NHgKIAlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQogCXNlbGVjdCA0NDBFUFgKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBTUNDIFBQQzQ0MEVQWCBldmFsdWF0aW9uIGJvYXJkLgpAQCAtMzgsNiArNDAsNyBAQAogCWJvb2wgIlRhaXNoYW4iCiAJZGVwZW5kcyBvbiA0NHgKIAlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQogCXNlbGVjdCA0NDBHWAogCXNlbGVjdCBQQ0kKIAloZWxwCkBAIC00OCw2ICs1MSw3IEBACiAJYm9vbCAiS2F0bWFpIgogCWRlcGVuZHMgb24gNDR4CiAJZGVmYXVsdCBuCisJc2VsZWN0IFBQQzQ0eF9TSU1QTEUKIAlzZWxlY3QgNDQwU1BlCiAJc2VsZWN0IFBDSQogCXNlbGVjdCBQUEM0eHhfUENJX0VYUFJFU1MKQEAgLTU4LDYgKzYyLDcgQEAKIAlib29sICJSYWluaWVyIgogCWRlcGVuZHMgb24gNDR4CiAJZGVmYXVsdCBuCisJc2VsZWN0IFBQQzQ0eF9TSU1QTEUKIAlzZWxlY3QgNDQwR1JYCiAJc2VsZWN0IFBDSQogCWhlbHAKQEAgLTc2LDIwICs4MSw0OCBAQAogCSAgU2VlIGh0dHA6Ly93d3cucGlrYXRlY2hub2xvZ2llcy5jb20vIGFuZCBmb2xsb3cgdGhlICJQSUtBIGZvciBDb21wdXRlcgogCSAgVGVsZXBob255IERldmVsb3BlcnMiIGxpbmsgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKK2NvbmZpZyBBUkNIRVMKKwlib29sICJBcmNoZXMiCisJZGVwZW5kcyBvbiA0NHgKKwlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQorCXNlbGVjdCA0NjBFWCAjIE9kZCBzaW5jZSBpdCB1c2VzIDQ2MEdUIGJ1dCB0aGUgZWZmZWN0cyBhcmUgdGhlIHNhbWUKKwlzZWxlY3QgUENJCisJc2VsZWN0IFBQQzR4eF9QQ0lfRVhQUkVTUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFNQ0MgRHVhbCBQUEM0NjBHVCBldmFsdWF0aW9uIGJvYXJkLgorCiBjb25maWcgQ0FOWU9OTEFORFMKIAlib29sICJDYW55b25sYW5kcyIKIAlkZXBlbmRzIG9uIDQ0eAogCWRlZmF1bHQgbgorCXNlbGVjdCBQUEM0NHhfU0lNUExFCiAJc2VsZWN0IDQ2MEVYCiAJc2VsZWN0IFBDSQogCXNlbGVjdCBQUEM0eHhfUENJX0VYUFJFU1MKKwlzZWxlY3QgSUJNX05FV19FTUFDX1JHTUlJCisJc2VsZWN0IElCTV9ORVdfRU1BQ19aTUlJCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQU1DQyBQUEM0NjBFWCBldmFsdWF0aW9uIGJvYXJkLgogCitjb25maWcgR0xBQ0lFUgorCWJvb2wgIkdsYWNpZXIiCisJZGVwZW5kcyBvbiA0NHgKKwlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQorCXNlbGVjdCA0NjBFWCAjIE9kZCBzaW5jZSBpdCB1c2VzIDQ2MEdUIGJ1dCB0aGUgZWZmZWN0cyBhcmUgdGhlIHNhbWUKKwlzZWxlY3QgUENJCisJc2VsZWN0IFBQQzR4eF9QQ0lfRVhQUkVTUworCXNlbGVjdCBJQk1fTkVXX0VNQUNfUkdNSUkKKwlzZWxlY3QgSUJNX05FV19FTUFDX1pNSUkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBTUNDIFBQQzQ2MEdUIGV2YWx1YXRpb24gYm9hcmQuCisKIGNvbmZpZyBZT1NFTUlURQogCWJvb2wgIllvc2VtaXRlIgogCWRlcGVuZHMgb24gNDR4CiAJZGVmYXVsdCBuCisJc2VsZWN0IFBQQzQ0eF9TSU1QTEUKIAlzZWxlY3QgNDQwRVAKIAlzZWxlY3QgUENJCiAJaGVscApAQCAtMTI3LDYgKzE2MCwxMyBAQAogCSAgTW9zdCBWaXJ0ZXggNSBkZXNpZ25zIHNob3VsZCB1c2UgdGhpcyB1bmxlc3MgaXQgbmVlZHMgdG8gZG8gc29tZQogCSAgc3BlY2lhbCBjb25maWd1cmF0aW9uIGF0IGJvYXJkIHByb2JlIHRpbWUuCiAKK2NvbmZpZyBQUEM0NHhfU0lNUExFCisJYm9vbCAiU2ltcGxlIFBvd2VyUEMgNDR4IGJvYXJkIHN1cHBvcnQiCisJZGVwZW5kcyBvbiA0NHgKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBzaW1wbGUgUG93ZXJQQyA0NHggcGxhdGZvcm0gc3VwcG9ydC4KKwogIyA0NHggc3BlY2lmaWMgQ1BVIG1vZHVsZXMsIHNlbGVjdGVkIGJhc2VkIG9uIHRoZSBib2FyZCBhYm92ZS4KIGNvbmZpZyA0NDBFUAogCWJvb2wKQEAgLTE3MCw4ICsyMTAsNiBAQAogCWJvb2wKIAlzZWxlY3QgUFBDX0ZQVQogCXNlbGVjdCBJQk1fTkVXX0VNQUNfRU1BQzQKLQlzZWxlY3QgSUJNX05FV19FTUFDX1JHTUlJCi0Jc2VsZWN0IElCTV9ORVdfRU1BQ19aTUlJCiAJc2VsZWN0IElCTV9ORVdfRU1BQ19UQUgKIAogIyA0NHggZXJyYXRhL3dvcmthcm91bmQgY29uZmlnIHN5bWJvbHMsIHNlbGVjdGVkIGJ5IHRoZSBDUFUgbW9kZWxzIGFib3ZlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L01ha2VmaWxlCmluZGV4IDhkMGIxYTEuLjY5ODEzMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L01ha2VmaWxlCkBAIC0xLDEzICsxLDcgQEAKIG9iai0kKENPTkZJR180NHgpCTo9IG1pc2NfNDR4Lm8gaWRsZS5vCitvYmotJChDT05GSUdfUFBDNDR4X1NJTVBMRSkgKz0gcHBjNDR4X3NpbXBsZS5vCiBvYmotJChDT05GSUdfRUJPTlkpCSs9IGVib255Lm8KLW9iai0kKENPTkZJR19UQUlTSEFOKQkrPSB0YWlzaGFuLm8KLW9iai0kKENPTkZJR19CQU1CT08pCSs9IGJhbWJvby5vCi1vYmotJChDT05GSUdfWU9TRU1JVEUpCSs9IGJhbWJvby5vCiBvYmotJChDT05GSUdfU0FNNDQwRVApIAkrPSBzYW00NDBlcC5vCi1vYmotJChDT05GSUdfU0VRVU9JQSkJKz0gc2VxdW9pYS5vCi1vYmotJChDT05GSUdfS0FUTUFJKQkrPSBrYXRtYWkubwotb2JqLSQoQ09ORklHX1JBSU5JRVIpCSs9IHJhaW5pZXIubwogb2JqLSQoQ09ORklHX1dBUlApCSs9IHdhcnAubwogb2JqLSQoQ09ORklHX1dBUlApCSs9IHdhcnAtbmFuZC5vCi1vYmotJChDT05GSUdfQ0FOWU9OTEFORFMpICs9IGNhbnlvbmxhbmRzLm8KIG9iai0kKENPTkZJR19YSUxJTlhfVklSVEVYXzVfRlhUKSArPSB2aXJ0ZXgubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvYmFtYm9vLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9iYW1ib28uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VmMTY5ZS4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9iYW1ib28uYworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBCYW1ib28gYm9hcmQgc3BlY2lmaWMgcm91dGluZXMKLSAqCi0gKiBXYWRlIEZhcm5zd29ydGggPHdmYXJuc3dvcnRoQG12aXN0YS5jb20+Ci0gKiBDb3B5cmlnaHQgMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqCi0gKiBSZXdyaXR0ZW4gYW5kIHBvcnRlZCB0byB0aGUgbWVyZ2VkIHBvd2VycGMgdHJlZToKLSAqIEpvc2ggQm95ZXIgPGp3Ym95ZXJAbGludXgudm5ldC5pYm0uY29tPgotICogQ29weXJpZ2h0IDIwMDcgSUJNIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS91ZGJnLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vdWljLmg+Ci0jaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KLSNpbmNsdWRlIDxhc20vcHBjNHh4Lmg+Ci0KLXN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgYmFtYm9vX29mX2J1c1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBsYjQiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiaWJtLG9wYiIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJpYm0sZWJjIiwgfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGJhbWJvb19kZXZpY2VfcHJvYmUodm9pZCkKLXsKLQlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgYmFtYm9vX29mX2J1cywgTlVMTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLW1hY2hpbmVfZGV2aWNlX2luaXRjYWxsKGJhbWJvbywgYmFtYm9vX2RldmljZV9wcm9iZSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGJhbWJvb19wcm9iZSh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKLQotCWlmICghb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJhbWNjLGJhbWJvbyIpKQotCQlyZXR1cm4gMDsKLQotCXBwY19wY2lfZmxhZ3MgPSBQUENfUENJX1JFQVNTSUdOX0FMTF9SU1JDOwotCi0JcmV0dXJuIDE7Ci19Ci0KLWRlZmluZV9tYWNoaW5lKGJhbWJvbykgewotCS5uYW1lIAkJCT0gIkJhbWJvbyIsCi0JLnByb2JlIAkJCT0gYmFtYm9vX3Byb2JlLAotCS5wcm9ncmVzcyAJCT0gdWRiZ19wcm9ncmVzcywKLQkuaW5pdF9JUlEgCQk9IHVpY19pbml0X3RyZWUsCi0JLmdldF9pcnEgCQk9IHVpY19nZXRfaXJxLAotCS5yZXN0YXJ0CQk9IHBwYzR4eF9yZXNldF9zeXN0ZW0sCi0JLmNhbGlicmF0ZV9kZWNyIAk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvY2FueW9ubGFuZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2NhbnlvbmxhbmRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NDkyODkuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvY2FueW9ubGFuZHMuYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDYW55b25sYW5kcyBib2FyZCBzcGVjaWZpYyByb3V0aW5lcwotICoKLSAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KLSAqCi0gKiBCYXNlZCBvbiB0aGUgS2F0bWFpIGNvZGUgYnkKLSAqIEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KLSAqIENvcHlyaWdodCAyMDA3IElCTSBDb3JwLgotICogSm9zaCBCb3llciA8andib3llckBsaW51eC52bmV0LmlibS5jb20+Ci0gKiBDb3B5cmlnaHQgMjAwNyBJQk0gQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3VkYmcuaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS91aWMuaD4KLSNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotI2luY2x1ZGUgPGFzbS9wcGM0eHguaD4KLQotc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBjYW55b25sYW5kc19vZl9idXNbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImlibSxwbGI0IiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImlibSxvcGIiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiaWJtLGViYyIsIH0sCi0Je30sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBjYW55b25sYW5kc19kZXZpY2VfcHJvYmUodm9pZCkKLXsKLQlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgY2FueW9ubGFuZHNfb2ZfYnVzLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwoY2FueW9ubGFuZHMsIGNhbnlvbmxhbmRzX2RldmljZV9wcm9iZSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNhbnlvbmxhbmRzX3Byb2JlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOwotCi0JaWYgKCFvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImFtY2MsY2FueW9ubGFuZHMiKSkKLQkJcmV0dXJuIDA7Ci0KLQlwcGNfcGNpX2ZsYWdzID0gUFBDX1BDSV9SRUFTU0lHTl9BTExfUlNSQzsKLQotCXJldHVybiAxOwotfQotCi1kZWZpbmVfbWFjaGluZShjYW55b25sYW5kcykgewotCS5uYW1lIAkJCQk9ICJDYW55b25sYW5kcyIsCi0JLnByb2JlIAkJCQk9IGNhbnlvbmxhbmRzX3Byb2JlLAotCS5wcm9ncmVzcyAJCQk9IHVkYmdfcHJvZ3Jlc3MsCi0JLmluaXRfSVJRIAkJCT0gdWljX2luaXRfdHJlZSwKLQkuZ2V0X2lycSAJCQk9IHVpY19nZXRfaXJxLAotCS5yZXN0YXJ0CQkJPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAotCS5jYWxpYnJhdGVfZGVjcgkJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9rYXRtYWkuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2thdG1haS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGY0YjNhLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2thdG1haS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIEthdG1haSBib2FyZCBzcGVjaWZpYyByb3V0aW5lcwotICoKLSAqIEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KLSAqIENvcHlyaWdodCAyMDA3IElCTSBDb3JwLgotICoKLSAqIEJhc2VkIG9uIHRoZSBCYW1ib28gY29kZSBieQotICogSm9zaCBCb3llciA8andib3llckBsaW51eC52bmV0LmlibS5jb20+Ci0gKiBDb3B5cmlnaHQgMjAwNyBJQk0gQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3VkYmcuaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS91aWMuaD4KLSNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotI2luY2x1ZGUgPGFzbS9wcGM0eHguaD4KLQotc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBrYXRtYWlfb2ZfYnVzW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJpYm0scGxiNCIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJpYm0sb3BiIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImlibSxlYmMiLCB9LAotCXt9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQga2F0bWFpX2RldmljZV9wcm9iZSh2b2lkKQotewotCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBrYXRtYWlfb2ZfYnVzLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwoa2F0bWFpLCBrYXRtYWlfZGV2aWNlX3Byb2JlKTsKLQotc3RhdGljIGludCBfX2luaXQga2F0bWFpX3Byb2JlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOwotCi0JaWYgKCFvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImFtY2Msa2F0bWFpIikpCi0JCXJldHVybiAwOwotCi0JcHBjX3BjaV9mbGFncyA9IFBQQ19QQ0lfUkVBU1NJR05fQUxMX1JTUkM7Ci0KLQlyZXR1cm4gMTsKLX0KLQotZGVmaW5lX21hY2hpbmUoa2F0bWFpKSB7Ci0JLm5hbWUgCQkJCT0gIkthdG1haSIsCi0JLnByb2JlIAkJCQk9IGthdG1haV9wcm9iZSwKLQkucHJvZ3Jlc3MgCQkJPSB1ZGJnX3Byb2dyZXNzLAotCS5pbml0X0lSUSAJCQk9IHVpY19pbml0X3RyZWUsCi0JLmdldF9pcnEgCQkJPSB1aWNfZ2V0X2lycSwKLQkucmVzdGFydAkJCT0gcHBjNHh4X3Jlc2V0X3N5c3RlbSwKLQkuY2FsaWJyYXRlX2RlY3IJCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcHBjNDR4X3NpbXBsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcHBjNDR4X3NpbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NjcxMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9wcGM0NHhfc2ltcGxlLmMKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIEdlbmVyaWMgUG93ZXJQQyA0NHggcGxhdGZvcm0gc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgaW1wbGVtZW50cyBzaW1wbGUgcGxhdGZvcm0gc3VwcG9ydCBmb3IgUG93ZXJQQyA0NHggY2hpcHMuICBUaGlzIGlzCisgKiBtb3N0bHkgdXNlZCBmb3IgZXZhbCBib2FyZHMgb3Igb3RoZXIgc2ltcGxlIGFuZCAiZ2VuZXJpYyIgNDR4IGJvYXJkcy4gIElmCisgKiB5b3VyIGJvYXJkIGhhcyBjdXN0b20gZnVuY3Rpb25zIG9yIGhhcmR3YXJlLCB0aGVuIHlvdSB3aWxsIGxpa2VseSB3YW50IHRvCisgKiBpbXBsZW1lbnQgeW91ciBvd24gYm9hcmQuYyBmaWxlIHRvIGFjY29tbW9kYXRlIGl0LgorICovCisKKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorI2luY2x1ZGUgPGFzbS91aWMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBwYzQ0eF9vZl9idXNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImlibSxwbGI0IiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImlibSxvcGIiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiaWJtLGViYyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBwYzQ0eF9kZXZpY2VfcHJvYmUodm9pZCkKK3sKKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgcHBjNDR4X29mX2J1cywgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KK21hY2hpbmVfZGV2aWNlX2luaXRjYWxsKHBwYzQ0eF9zaW1wbGUsIHBwYzQ0eF9kZXZpY2VfcHJvYmUpOworCisvKiBUaGlzIGlzIHRoZSBsaXN0IG9mIGJvYXJkcyB0aGF0IGNhbiBiZSBzdXBwb3J0ZWQgYnkgdGhpcyBzaW1wbGUKKyAqIHBsYXRmb3JtIGNvZGUuICBUaGlzIGRvZXMgX25vdF8gbWVhbiB0aGUgYm9hcmRzIGFyZSBjb21wYXRpYmxlLAorICogYXMgdGhleSBtb3N0IGNlcnRhaW5seSBhcmUgbm90IGZyb20gYSBkZXZpY2UgdHJlZSBwZXJzcGVjdGl2ZS4KKyAqIEhvd2V2ZXIsIHRoZWlyIGRpZmZlcmVuY2VzIGFyZSBoYW5kbGVkIGJ5IHRoZSBkZXZpY2UgdHJlZSBhbmQgdGhlCisgKiBkcml2ZXJzIGFuZCB0aGVyZWZvcmUgdGhleSBkb24ndCBuZWVkIGN1c3RvbSBib2FyZCBzdXBwb3J0IGZpbGVzLgorICoKKyAqIEFnYWluLCBpZiB5b3VyIGJvYXJkIG5lZWRzIHRvIGRvIHRoaW5ncyBkaWZmZXJlbnRseSB0aGVuIGNyZWF0ZSBhCisgKiBib2FyZC5jIGZpbGUgZm9yIGl0IHJhdGhlciB0aGFuIGFkZGluZyBpdCB0byB0aGlzIGxpc3QuCisgKi8KK3N0YXRpYyBjaGFyICpib2FyZFtdIF9faW5pdGRhdGEgPSB7CisJImFtY2MsYXJjaGVzIiwKKwkiYW1jYyxiYW1ib28iLAorCSJhbWNjLGNhbnlvbmxhbmRzIiwKKwkiYW1jYyxnbGFjaWVyIiwKKwkiaWJtLGVib255IiwKKwkiYW1jYyxrYXRtYWkiLAorCSJhbWNjLHJhaW5pZXIiLAorCSJhbWNjLHNlcXVvaWEiLAorCSJhbWNjLHRhaXNoYW4iLAorCSJhbWNjLHlvc2VtaXRlIgorfTsKKworc3RhdGljIGludCBfX2luaXQgcHBjNDR4X3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCWludCBpID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJvYXJkKTsgaSsrKSB7CisJCWlmIChvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgYm9hcmRbaV0pKSB7CisJCQlwcGNfcGNpX2ZsYWdzID0gUFBDX1BDSV9SRUFTU0lHTl9BTExfUlNSQzsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2RlZmluZV9tYWNoaW5lKHBwYzQ0eF9zaW1wbGUpIHsKKwkubmFtZSA9ICJQb3dlclBDIDQ0eCBQbGF0Zm9ybSIsCisJLnByb2JlID0gcHBjNDR4X3Byb2JlLAorCS5wcm9ncmVzcyA9IHVkYmdfcHJvZ3Jlc3MsCisJLmluaXRfSVJRID0gdWljX2luaXRfdHJlZSwKKwkuZ2V0X2lycSA9IHVpY19nZXRfaXJxLAorCS5yZXN0YXJ0ID0gcHBjNHh4X3Jlc2V0X3N5c3RlbSwKKwkuY2FsaWJyYXRlX2RlY3IgPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3JhaW5pZXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3JhaW5pZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYxZmY4NC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9yYWluaWVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogUmFpbmllciBib2FyZCBzcGVjaWZpYyByb3V0aW5lcwotICoKLSAqIFZhbGVudGluZSBCYXJzaGFrIDx2YmFyc2hha0BydS5tdmlzdGEuY29tPgotICogQ29weXJpZ2h0IDIwMDcgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgotICogQmFzZWQgb24gdGhlIEJhbWJvbyBjb2RlIGJ5Ci0gKiBKb3NoIEJveWVyIDxqd2JveWVyQGxpbnV4LnZuZXQuaWJtLmNvbT4KLSAqIENvcHlyaWdodCAyMDA3IElCTSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vdWRiZy5oPgotI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL3VpYy5oPgotI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgotCi1zdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJhaW5pZXJfb2ZfYnVzW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJpYm0scGxiNCIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJpYm0sb3BiIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImlibSxlYmMiLCB9LAotCXt9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcmFpbmllcl9kZXZpY2VfcHJvYmUodm9pZCkKLXsKLQlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgcmFpbmllcl9vZl9idXMsIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19Ci1tYWNoaW5lX2RldmljZV9pbml0Y2FsbChyYWluaWVyLCByYWluaWVyX2RldmljZV9wcm9iZSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHJhaW5pZXJfcHJvYmUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7Ci0KLQlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiYW1jYyxyYWluaWVyIikpCi0JCXJldHVybiAwOwotCi0JcHBjX3BjaV9mbGFncyA9IFBQQ19QQ0lfUkVBU1NJR05fQUxMX1JTUkM7Ci0KLQlyZXR1cm4gMTsKLX0KLQotZGVmaW5lX21hY2hpbmUocmFpbmllcikgewotCS5uYW1lIAkJCQk9ICJSYWluaWVyIiwKLQkucHJvYmUgCQkJCT0gcmFpbmllcl9wcm9iZSwKLQkucHJvZ3Jlc3MgCQkJPSB1ZGJnX3Byb2dyZXNzLAotCS5pbml0X0lSUSAJCQk9IHVpY19pbml0X3RyZWUsCi0JLmdldF9pcnEgCQkJPSB1aWNfZ2V0X2lycSwKLQkucmVzdGFydAkJCT0gcHBjNHh4X3Jlc2V0X3N5c3RlbSwKLQkuY2FsaWJyYXRlX2RlY3IJCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvc2VxdW9pYS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvc2VxdW9pYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWViNzNkLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3NlcXVvaWEuYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBTZXF1b2lhIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzCi0gKgotICogVmFsZW50aW5lIEJhcnNoYWsgPHZiYXJzaGFrQHJ1Lm12aXN0YS5jb20+Ci0gKiBDb3B5cmlnaHQgMjAwNyBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqCi0gKiBCYXNlZCBvbiB0aGUgQmFtYm9vIGNvZGUgYnkKLSAqIEpvc2ggQm95ZXIgPGp3Ym95ZXJAbGludXgudm5ldC5pYm0uY29tPgotICogQ29weXJpZ2h0IDIwMDcgSUJNIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS91ZGJnLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vdWljLmg+Ci0jaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KLQotI2luY2x1ZGUgPGFzbS9wcGM0eHguaD4KLQotc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBzZXF1b2lhX29mX2J1c1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBsYjQiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiaWJtLG9wYiIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJpYm0sZWJjIiwgfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNlcXVvaWFfZGV2aWNlX3Byb2JlKHZvaWQpCi17Ci0Jb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIHNlcXVvaWFfb2ZfYnVzLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwoc2VxdW9pYSwgc2VxdW9pYV9kZXZpY2VfcHJvYmUpOwotCi1zdGF0aWMgaW50IF9faW5pdCBzZXF1b2lhX3Byb2JlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOwotCi0JaWYgKCFvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImFtY2Msc2VxdW9pYSIpKQotCQlyZXR1cm4gMDsKLQotCXBwY19wY2lfZmxhZ3MgPSBQUENfUENJX1JFQVNTSUdOX0FMTF9SU1JDOwotCi0JcmV0dXJuIDE7Ci19Ci0KLWRlZmluZV9tYWNoaW5lKHNlcXVvaWEpIHsKLQkubmFtZSAJCQkJPSAiU2VxdW9pYSIsCi0JLnByb2JlIAkJCQk9IHNlcXVvaWFfcHJvYmUsCi0JLnByb2dyZXNzIAkJCT0gdWRiZ19wcm9ncmVzcywKLQkuaW5pdF9JUlEgCQkJPSB1aWNfaW5pdF90cmVlLAotCS5nZXRfaXJxIAkJCT0gdWljX2dldF9pcnEsCi0JLnJlc3RhcnQJCQk9IHBwYzR4eF9yZXNldF9zeXN0ZW0sCi0JLmNhbGlicmF0ZV9kZWNyCQkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3RhaXNoYW4uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3RhaXNoYW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDljNzhiMi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC90YWlzaGFuLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogVGFpc2hhbiBib2FyZCBzcGVjaWZpYyByb3V0aW5lcyBiYXNlZCBvZmYgZWJvbnkuYyBjb2RlCi0gKiBvcmlnaW5hbCBjb3B5cmlnaHRzIGJlbG93Ci0gKgotICogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KLSAqIENvcHlyaWdodCAyMDAyLTIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgotICogRXVnZW5lIFN1cm92ZWdpbiA8ZXVnZW5lLnN1cm92ZWdpbkB6dWx0eXMuY29tPiBvciA8ZWJzQGVic2hvbWUubmV0PgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUgWnVsdHlzIFRlY2hub2xvZ2llcwotICoKLSAqIFJld3JpdHRlbiBhbmQgcG9ydGVkIHRvIHRoZSBtZXJnZWQgcG93ZXJwYyB0cmVlOgotICogQ29weXJpZ2h0IDIwMDcgRGF2aWQgR2lic29uIDxkd2dAYXUxLmlibS5jb20+LCBJQk0gQ29ycG9yYXRpb24uCi0gKgotICogTW9kaWZpZWQgZnJvbSBlYm9ueS5jIGZvciB0YWlzaGFuOgotICogQ29weXJpZ2h0IDIwMDcgSHVnaCBCbGVtaW5ncyA8aHVnaEBhdS5pYm0uY29tPiwgSUJNIENvcnBvcmF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS91ZGJnLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vdWljLmg+Ci0jaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KLSNpbmNsdWRlIDxhc20vcHBjNHh4Lmg+Ci0KLXN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgdGFpc2hhbl9vZl9idXNbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImlibSxwbGI0IiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImlibSxvcGIiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiaWJtLGViYyIsIH0sCi0Je30sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB0YWlzaGFuX2RldmljZV9wcm9iZSh2b2lkKQotewotCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCB0YWlzaGFuX29mX2J1cywgTlVMTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLW1hY2hpbmVfZGV2aWNlX2luaXRjYWxsKHRhaXNoYW4sIHRhaXNoYW5fZGV2aWNlX3Byb2JlKTsKLQotLyoKLSAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBNTVUgaXMgb2ZmLCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAotICovCi1zdGF0aWMgaW50IF9faW5pdCB0YWlzaGFuX3Byb2JlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOwotCi0JaWYgKCFvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImFtY2MsdGFpc2hhbiIpKQotCQlyZXR1cm4gMDsKLQotCXBwY19wY2lfZmxhZ3MgPSBQUENfUENJX1JFQVNTSUdOX0FMTF9SU1JDOwotCi0JcmV0dXJuIDE7Ci19Ci0KLWRlZmluZV9tYWNoaW5lKHRhaXNoYW4pIHsKLQkubmFtZQkJCT0gIlRhaXNoYW4iLAotCS5wcm9iZQkJCT0gdGFpc2hhbl9wcm9iZSwKLQkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKLQkuaW5pdF9JUlEJCT0gdWljX2luaXRfdHJlZSwKLQkuZ2V0X2lycQkJPSB1aWNfZ2V0X2lycSwKLQkucmVzdGFydAkJPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAotCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L0tjb25maWcKaW5kZXggYzYyZjg5My4uMzI2ODUyYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L0tjb25maWcKQEAgLTMsNiArMyw4IEBACiAJc2VsZWN0IEZTTF9TT0MKIAlzZWxlY3QgSVBJQwogCXNlbGVjdCBQUENfQ0xPQ0sKKwlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UKKwlzZWxlY3QgRlNMX1BDSSBpZiBQQ0kKIAogY29uZmlnIFBQQ19NUEM1MTIxCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYwppbmRleCA1ZWJmNjkzLi40NDFhYmM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYwpAQCAtMjIsMTYgKzIyLDI2IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogCisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KKwogI2luY2x1ZGUgIm1wYzUxMnguaCIKICNpbmNsdWRlICJtcGM1MTIxX2Fkcy5oIgogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXBjNTEyMV9hZHNfc2V0dXBfYXJjaCh2b2lkKQogeworI2lmZGVmIENPTkZJR19QQ0kKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworI2VuZGlmCiAJcHJpbnRrKEtFUk5fSU5GTyAiTVBDNTEyMSBBRFMgYm9hcmQgZnJvbSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvclxuIik7CiAJLyoKIAkgKiBjcGxkIHJlZ3MgYXJlIG5lZWRlZCBlYXJseQogCSAqLwogCW1wYzUxMjFfYWRzX2NwbGRfbWFwKCk7CisKKyNpZmRlZiBDT05GSUdfUENJCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM1MTIxLXBjaSIpCisJCW1wYzgzeHhfYWRkX2JyaWRnZShucCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG1wYzUxMjFfYWRzX2luaXRfSVJRKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCmluZGV4IDRkNWZkMWQuLjA0NGI0ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCkBAIC05MCw3ICs5MCw3IEBACiAJb2Zfbm9kZV9wdXQobnApOwogCWlmICgheGxiKSB7CiAJCXByaW50ayhLRVJOX0VSUiBfX0ZJTEVfXyAiOiAiCi0JCQkiRXJyb3IgbWFwcGluZyBYTEIgaW4gbXBjNTJ4eF9zZXR1cF9jcHUoKS4gICIKKwkJCSJFcnJvciBtYXBwaW5nIFhMQiBpbiBtcGM1Mnh4X3NldHVwX2NwdSgpLiAiCiAJCQkiRXhwZWN0IHNvbWUgYWJub3JtYWwgYmVoYXZpb3JcbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtMjE2LDcgKzIxNiw4IEBACiAJCW91dF9iZTMyKCZtcGM1Mnh4X3dkdC0+Y291bnQsIDB4MDAwMDAwZmYpOwogCQlvdXRfYmUzMigmbXBjNTJ4eF93ZHQtPm1vZGUsIDB4MDAwMDkwMDQpOwogCX0gZWxzZQotCQlwcmludGsoIm1wYzUyeHhfcmVzdGFydDogQ2FuJ3QgYWNjZXNzIHdkdC4gIgorCQlwcmludGsoS0VSTl9FUlIgX19GSUxFX18gIjogIgorCQkJIm1wYzUyeHhfcmVzdGFydDogQ2FuJ3QgYWNjZXNzIHdkdC4gIgogCQkJIlJlc3RhcnQgaW1wb3NzaWJsZSwgc3lzdGVtIGhhbHRlZC5cbiIpOwogCiAJd2hpbGUgKDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9wY2kuYwppbmRleCA1YTM4MmJiLi5iNDlhMTg1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9wY2kuYwpAQCAtMjY1LDggKzI2NSwxMSBAQAogCS8qIE1lbW9yeSB3aW5kb3dzICovCiAJcmVzID0gJmhvc2UtPm1lbV9yZXNvdXJjZXNbMF07CiAJaWYgKHJlcy0+ZmxhZ3MpIHsKLQkJcHJfZGVidWcoIm1lbV9yZXNvdXJjZVswXSA9IHsuc3RhcnQ9JXgsIC5lbmQ9JXgsIC5mbGFncz0lbHh9XG4iLAotCQkgICAgICAgICByZXMtPnN0YXJ0LCByZXMtPmVuZCwgcmVzLT5mbGFncyk7CisJCXByX2RlYnVnKCJtZW1fcmVzb3VyY2VbMF0gPSAiCisJCSAgICAgICAgICJ7LnN0YXJ0PSVsbHgsIC5lbmQ9JWxseCwgLmZsYWdzPSVsbHh9XG4iLAorCQkgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZmxhZ3MpOwogCQlvdXRfYmUzMigmcGNpX3JlZ3MtPml3MGJ0YXIsCiAJCSAgICAgICAgIE1QQzUyeHhfUENJX0lXQlRBUl9UUkFOU0xBVElPTihyZXMtPnN0YXJ0LCByZXMtPnN0YXJ0LAogCQkgICAgICAgICAgICAgICAgICByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKSk7CkBAIC0yOTcsOSArMzAwLDExIEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IERpZG4ndCBmaW5kIElPIHJlc291cmNlc1xuIiwgX19GSUxFX18pOwogCQlyZXR1cm47CiAJfQotCXByX2RlYnVnKCIuaW9fcmVzb3VyY2U9ey5zdGFydD0leCwuZW5kPSV4LC5mbGFncz0lbHh9ICIKKwlwcl9kZWJ1ZygiLmlvX3Jlc291cmNlPXsuc3RhcnQ9JWxseCwuZW5kPSVsbHgsLmZsYWdzPSVsbHh9ICIKIAkgICAgICAgICAiLmlvX2Jhc2VfcGh5cz0weCVwXG4iLAotCSAgICAgICAgIHJlcy0+c3RhcnQsIHJlcy0+ZW5kLCByZXMtPmZsYWdzLCAodm9pZCopaG9zZS0+aW9fYmFzZV9waHlzKTsKKwkgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmZsYWdzLCAodm9pZCopaG9zZS0+aW9fYmFzZV9waHlzKTsKIAlvdXRfYmUzMigmcGNpX3JlZ3MtPml3MmJ0YXIsCiAJICAgICAgICAgTVBDNTJ4eF9QQ0lfSVdCVEFSX1RSQU5TTEFUSU9OKGhvc2UtPmlvX2Jhc2VfcGh5cywKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLT5zdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcKaW5kZXggNzVlYjFlZC4uMzBmMDA4YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcKQEAgLTM4LDYgKzM4LDE0IEBACiAJICBUaGlzIGJvYXJkIGlzIGFsc28gcmVzb2xkIGJ5IEZyZWVzY2FsZSBhcyB0aGUgUVVJQ0NTdGFydAogCSAgTVBDODI0OCBFdmFsdWF0aW9uIFN5c3RlbSBhbmQvb3IgdGhlIENXSC1QUEMtODI0OE4tVkUuCiAKK2NvbmZpZyBNR0NPR0UKKwlib29sICJLZXltaWxlIE1HQ09HRSIKKwlzZWxlY3QgODI3MgorCXNlbGVjdCA4MjYwCisJc2VsZWN0IEZTTF9TT0MKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEtleW1pbGUgTUdDT0dFIGJvYXJkLgorCiBlbmRpZgogCiBjb25maWcgUFEyQURTCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvTWFrZWZpbGUKaW5kZXggNmNkNWNkNS4uZDk4Mjc5MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9NYWtlZmlsZQpAQCAtNiwzICs2LDQgQEAKIG9iai0kKENPTkZJR19QUTJfQURTX1BDSV9QSUMpICs9IHBxMmFkcy1wY2ktcGljLm8KIG9iai0kKENPTkZJR19QUTJGQURTKSArPSBwcTJmYWRzLm8KIG9iai0kKENPTkZJR19FUDgyNDhFKSArPSBlcDgyNDhlLm8KK29iai0kKENPTkZJR19NR0NPR0UpICs9IG1nY29nZS5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvbWdjb2dlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvbWdjb2dlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhZjE2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9tZ2NvZ2UuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIEtleW1pbGUgbWdjb2dlIHN1cHBvcnQKKyAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICogQXV0aG9yOiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqCisgKiBiYXNlZCBvbiBjb2RlIGZyb206CisgKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQXV0aG9yOiBTY290dCBXb29kIDxzY290dHdvb2RAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2NwbTIuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbXBjODI2MC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisKKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorI2luY2x1ZGUgPHN5c2Rldi9jcG0yX3BpYy5oPgorCisjaW5jbHVkZSAicHEyLmgiCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtZ2NvZ2VfcGljX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxwcTItcGljIik7CisJaWYgKCFucCkgeworCQlwcmludGsoS0VSTl9FUlIgIlBJQyBpbml0OiBjYW4gbm90IGZpbmQgY3BtLXBpYyBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWNwbTJfcGljX2luaXQobnApOworCW9mX25vZGVfcHV0KG5wKTsKK30KKworc3RydWN0IGNwbV9waW4geworCWludCBwb3J0LCBwaW4sIGZsYWdzOworfTsKKworc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IGNwbV9waW4gbWdjb2dlX3BpbnNbXSA9IHsKKworCS8qIFNNQzIgKi8KKwl7MSwgOCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezEsIDksIENQTV9QSU5fT1VUUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKworCS8qIFNDQzQgKi8KKwl7MywgMjUsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXszLCAyNCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezMsICA5LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MywgIDgsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXs0LCAyMiwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezQsIDIxLCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9pb3BvcnRzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZ2NvZ2VfcGlucyk7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY3BtX3BpbiAqcGluID0gJm1nY29nZV9waW5zW2ldOworCQljcG0yX3NldF9waW4ocGluLT5wb3J0IC0gMSwgcGluLT5waW4sIHBpbi0+ZmxhZ3MpOworCX0KKworCWNwbTJfc21jX2Nsa19zZXR1cChDUE1fQ0xLX1NNQzIsIENQTV9CUkc4KTsKKwljcG0yX2Nsa19zZXR1cChDUE1fQ0xLX1NDQzQsIENQTV9DTEs3LCBDUE1fQ0xLX1JYKTsKKwljcG0yX2Nsa19zZXR1cChDUE1fQ0xLX1NDQzQsIENQTV9DTEs4LCBDUE1fQ0xLX1RYKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1nY29nZV9zZXR1cF9hcmNoKHZvaWQpCit7CisJaWYgKHBwY19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJtZ2NvZ2Vfc2V0dXBfYXJjaCgpIiwgMCk7CisKKwljcG0yX3Jlc2V0KCk7CisKKwkvKiBXaGVuIHRoaXMgaXMgc2V0LCBzbm9vcGluZyBDUE0gRE1BIGZyb20gUkFNIGNhdXNlcworCSAqIG1hY2hpbmUgY2hlY2tzLiAgU2VlIGVycmF0dW0gU0lVMTguCisJICovCisJY2xyYml0czMyKCZjcG0yX2ltbXItPmltX3NpdV9jb25mLnNpdV84Mnh4LnNjX2JjciwgTVBDODJYWF9CQ1JfUExEUCk7CisKKwlpbml0X2lvcG9ydHMoKTsKKworCWlmIChwcGNfbWQucHJvZ3Jlc3MpCisJCXBwY19tZC5wcm9ncmVzcygibWdjb2dlX3NldHVwX2FyY2goKSwgZmluaXNoIiwgMCk7Cit9CisKK3N0YXRpYyAgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2J1c19pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXt9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpCit7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG9mX2J1c19pZHMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChtZ2NvZ2UsIGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyk7CisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgbWdjb2dlX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCXJldHVybiBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImtleW1pbGUsbWdjb2dlIik7Cit9CisKK2RlZmluZV9tYWNoaW5lKG1nY29nZSkKK3sKKwkubmFtZSA9ICJLZXltaWxlIE1HQ09HRSIsCisJLnByb2JlID0gbWdjb2dlX3Byb2JlLAorCS5zZXR1cF9hcmNoID0gbWdjb2dlX3NldHVwX2FyY2gsCisJLmluaXRfSVJRID0gbWdjb2dlX3BpY19pbml0LAorCS5nZXRfaXJxID0gY3BtMl9nZXRfaXJxLAorCS5jYWxpYnJhdGVfZGVjciA9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnJlc3RhcnQgPSBwcTJfcmVzdGFydCwKKwkucHJvZ3Jlc3MgPSB1ZGJnX3Byb2dyZXNzLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKaW5kZXggNjE1OWM1ZC4uODNjNjY0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKQEAgLTE5LDcgKzE5LDYgQEAKIGNvbmZpZyBNUEM4MzJ4X01EUwogCWJvb2wgIkZyZWVzY2FsZSBNUEM4MzJ4IE1EUyIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKLQlzZWxlY3QgUVVJQ0NfRU5HSU5FCiAJc2VsZWN0IFBQQ19NUEM4MzJ4CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODMyeCBNRFMgZXZhbHVhdGlvbiBib2FyZC4KQEAgLTI3LDcgKzI2LDYgQEAKIGNvbmZpZyBNUEM4MzJ4X1JEQgogCWJvb2wgIkZyZWVzY2FsZSBNUEM4MzJ4IFJEQiIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKLQlzZWxlY3QgUVVJQ0NfRU5HSU5FCiAJc2VsZWN0IFBQQ19NUEM4MzJ4CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODMyMyBSREIgYm9hcmQuCkBAIC01NywxNSArNTUsMTIgQEAKIGNvbmZpZyBNUEM4MzZ4X01EUwogCWJvb2wgIkZyZWVzY2FsZSBNUEM4MzZ4IE1EUyIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKLQlzZWxlY3QgUVVJQ0NfRU5HSU5FCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODM2eCBNRFMgUHJvY2Vzc29yIEJvYXJkLgogCiBjb25maWcgTVBDODM2eF9SREsKIAlib29sICJGcmVlc2NhbGUvTG9naWMgTVBDODM2eCBSREsiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCi0Jc2VsZWN0IFFVSUNDX0VOR0lORQotCXNlbGVjdCBRRV9HUElPCiAJc2VsZWN0IEZTTF9HVE0KIAlzZWxlY3QgRlNMX0xCQwogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMKaW5kZXggYmU2MmRlMi4uOGJiMTNjOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMKQEAgLTg1LDggKzg1LDE0IEBACiAJCXBwY19tZC5wcm9ncmVzcygibXBjODM3eF9tZHNfc2V0dXBfYXJjaCgpIiwgMCk7CiAKICNpZmRlZiBDT05GSUdfUENJCi0JZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzQ5LXBjaSIpCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzQ5LXBjaSIpIHsKKwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkgeworCQkJcHJfd2FybmluZygiJXM6IGRpc2FibGVkIGJ5IHRoZSBmaXJtd2FyZS5cbiIsCisJCQkJICAgbnAtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQogCQltcGM4M3h4X2FkZF9icmlkZ2UobnApOworCX0KICNlbmRpZgogCW1wYzgzN3htZHNfdXNiX2NmZygpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwppbmRleCAyOTE2NzViLi5iNzlkYzcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwpAQCAtMzMsNyArMzMsNiBAQAogY29uZmlnIE1QQzg1eHhfTURTCiAJYm9vbCAiRnJlZXNjYWxlIE1QQzg1eHggTURTIgogCXNlbGVjdCBERUZBVUxUX1VJTUFHRQotCXNlbGVjdCBRVUlDQ19FTkdJTkUKIAlzZWxlY3QgUEhZTElCCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODV4eCBNRFMgYm9hcmQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKaW5kZXggZDE3ODA3YS4uMDI5M2UzZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKQEAgLTIxMyw3ICsyMTMsNiBAQAogCXN2aWQgPSBtZnNwcihTUFJOX1NWUik7CiAKIAlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvclxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiTWFjaGluZVx0XHQ6IG1wYzg1eHhcbiIpOwogCXNlcV9wcmludGYobSwgIlBWUlx0XHQ6IDB4JXhcbiIsIHB2aWQpOwogCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYwppbmRleCA2NTA5YWRlLi4wYzlhODU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2JjODU2MF9waW5zKTsgaSsrKSB7Ci0JCXN0cnVjdCBjcG1fcGluICpwaW4gPSAmc2JjODU2MF9waW5zW2ldOworCQljb25zdCBzdHJ1Y3QgY3BtX3BpbiAqcGluID0gJnNiYzg1NjBfcGluc1tpXTsKIAkJY3BtMl9zZXRfcGluKHBpbi0+cG9ydCwgcGluLT5waW4sIHBpbi0+ZmxhZ3MpOwogCX0KIApAQCAtMjAwLDcgKzIwMCw2IEBACiAJc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKIAogCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IFdpbmQgUml2ZXJcbiIpOwotCXNlcV9wcmludGYobSwgIk1hY2hpbmVcdFx0OiBTQkM4NTYwXG4iKTsKIAlzZXFfcHJpbnRmKG0sICJQVlJcdFx0OiAweCV4XG4iLCBwdmlkKTsKIAlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwppbmRleCA5MzU1YTUyLi43N2RkNzk3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwpAQCAtMzEsNiArMzEsMTMgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NjEwIEhQQ0QgYm9hcmQuCiAKK2NvbmZpZyBHRUZfU0JDNjEwCisJYm9vbCAiR0UgRmFudWMgU0JDNjEwIgorCXNlbGVjdCBERUZBVUxUX1VJTUFHRQorCXNlbGVjdCBIQVNfUkFQSURJTworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgR0UgRmFudWMncyBTQkM2MTAuCisKIGVuZGlmCiAKIGNvbmZpZyBNUEM4NjQxCkBAIC0zOSw3ICs0Niw3IEBACiAJc2VsZWN0IEZTTF9QQ0kgaWYgUENJCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IE1QSUMKLQlkZWZhdWx0IHkgaWYgTVBDODY0MV9IUENOIHx8IFNCQzg2NDFECisJZGVmYXVsdCB5IGlmIE1QQzg2NDFfSFBDTiB8fCBTQkM4NjQxRCB8fCBHRUZfU0JDNjEwCiAKIGNvbmZpZyBNUEM4NjEwCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01ha2VmaWxlCmluZGV4IDhmZWUzN2QuLjRhNTZmZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvTWFrZWZpbGUKQEAgLTcsMyArNyw0IEBACiBvYmotJChDT05GSUdfTVBDODY0MV9IUENOKQkrPSBtcGM4Nnh4X2hwY24ubwogb2JqLSQoQ09ORklHX1NCQzg2NDFEKQkJKz0gc2JjODY0MWQubwogb2JqLSQoQ09ORklHX01QQzg2MTBfSFBDRCkJKz0gbXBjODYxMF9ocGNkLm8KK29iai0kKENPTkZJR19HRUZfU0JDNjEwKQkrPSBnZWZfc2JjNjEwLm8gZ2VmX3BpYy5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGQwYTJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuYwpAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIEludGVycnVwdCBoYW5kbGluZyBmb3IgR0UgRmFudWMncyBGUEdBIGJhc2VkIFBJQworICoKKyAqIEF1dGhvcjogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2VmYW51Yy5jb20+CisgKgorICogMjAwOCAoYykgR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlICJnZWZfcGljLmgiCisKKyNkZWZpbmUgREVCVUcKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyBwcmludGsoS0VSTl9ERUJVRyAiZ2VmX3BpYzogIiBmbXQpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgR0VGX1BJQ19OVU1fSVJRUwkzMgorCisvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCisjZGVmaW5lIEdFRl9QSUNfSU5UUl9TVEFUVVMJMHgwMDAwCisKKyNkZWZpbmUgR0VGX1BJQ19JTlRSX01BU0soY3B1KQkoMHgwMDEwICsgKDB4NCAqIGNwdSkpCisjZGVmaW5lIEdFRl9QSUNfQ1BVMF9JTlRSX01BU0sJR0VGX1BJQ19JTlRSX01BU0soMCkKKyNkZWZpbmUgR0VGX1BJQ19DUFUxX0lOVFJfTUFTSwlHRUZfUElDX0lOVFJfTUFTSygxKQorCisjZGVmaW5lIEdFRl9QSUNfTUNQX01BU0soY3B1KQkoMHgwMDE4ICsgKDB4NCAqIGNwdSkpCisjZGVmaW5lIEdFRl9QSUNfQ1BVMF9NQ1BfTUFTSwlHRUZfUElDX01DUF9NQVNLKDApCisjZGVmaW5lIEdFRl9QSUNfQ1BVMV9NQ1BfTUFTSwlHRUZfUElDX01DUF9NQVNLKDEpCisKKyNkZWZpbmUgZ2VmX2lycV90b19odyh2aXJxKSAgICAoKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxKQorCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ2VmX3BpY19sb2NrKTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqZ2VmX3BpY19pcnFfcmVnX2Jhc2U7CitzdGF0aWMgc3RydWN0IGlycV9ob3N0ICpnZWZfcGljX2lycV9ob3N0Oworc3RhdGljIGludCBnZWZfcGljX2Nhc2NhZGVfaXJxOworCisvKgorICogSW50ZXJydXB0IENvbnRyb2xsZXIgSGFuZGxpbmcKKyAqCisgKiBUaGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaGFuZGxlcyBpbnRlcnJ1cHRzIGZvciBtb3N0IG9uIGJvYXJkIGludGVycnVwdHMsCisgKiBhcGFydCBmcm9tIFBDSSBpbnRlcnJ1cHRzLiBGb3IgZXhhbXBsZSBvbiBTQkM2MTA6CisgKgorICogMTc6MzEgUk8gUmVzZXJ2ZWQKKyAqIDE2ICAgIFJPIFBDSSBFeHByZXNzIERvb3JiZWxsIDMgU3RhdHVzCisgKiAxNSAgICBSTyBQQ0kgRXhwcmVzcyBEb29yYmVsbCAyIFN0YXR1cworICogMTQgICAgUk8gUENJIEV4cHJlc3MgRG9vcmJlbGwgMSBTdGF0dXMKKyAqIDEzICAgIFJPIFBDSSBFeHByZXNzIERvb3JiZWxsIDAgU3RhdHVzCisgKiAxMiAgICBSTyBSZWFsIFRpbWUgQ2xvY2sgSW50ZXJydXB0IFN0YXR1cworICogMTEgICAgUk8gVGVtcGVyYXR1cmUgSW50ZXJydXB0IFN0YXR1cworICogMTAgICAgUk8gVGVtcGVyYXR1cmUgQ3JpdGljYWwgSW50ZXJydXB0IFN0YXR1cworICogOSAgICAgUk8gRXRoZXJuZXQgUEhZMSBJbnRlcnJ1cHQgU3RhdHVzCisgKiA4ICAgICBSTyBFdGhlcm5ldCBQSFkzIEludGVycnVwdCBTdGF0dXMKKyAqIDcgICAgIFJPIFBFWDg1NDggSW50ZXJydXB0IFN0YXR1cworICogNiAgICAgUk8gUmVzZXJ2ZWQKKyAqIDUgICAgIFJPIFdhdGNoZG9nIDAgSW50ZXJydXB0IFN0YXR1cworICogNCAgICAgUk8gV2F0Y2hkb2cgMSBJbnRlcnJ1cHQgU3RhdHVzCisgKiAzICAgICBSTyBBWElTIE1lc3NhZ2UgRklGTyBBIEludGVycnVwdCBTdGF0dXMKKyAqIDIgICAgIFJPIEFYSVMgTWVzc2FnZSBGSUZPIEIgSW50ZXJydXB0IFN0YXR1cworICogMSAgICAgUk8gQVhJUyBNZXNzYWdlIEZJRk8gQyBJbnRlcnJ1cHQgU3RhdHVzCisgKiAwICAgICBSTyBBWElTIE1lc3NhZ2UgRklGTyBEIEludGVycnVwdCBTdGF0dXMKKyAqCisgKiBJbnRlcnJ1cHRzIGNhbiBiZSBmb3J3YXJkZWQgdG8gb25lIG9mIHR3byBvdXRwdXQgbGluZXMuIE5vdGhpbmcKKyAqIGNsZXZlciBpcyBkb25lLCBzbyBpZiB0aGUgbWFza3MgYXJlIGluY29ycmVjdGx5IHNldCwgYSBzaW5nbGUgaW5wdXQKKyAqIGludGVycnVwdCBjb3VsZCBnZW5lcmF0ZSBpbnRlcnJ1cHRzIG9uIGJvdGggb3V0cHV0IGxpbmVzIQorICoKKyAqIFRoZSBkdWFsIGxpbmVzIGFyZSB0aGVyZSB0byBhbGxvdyB0aGUgY2hhaW5lZCBpbnRlcnJ1cHRzIHRvIGJlIGVhc2lseQorICogcGFzc2VkIGludG8gdHdvIGRpZmZlcmVudCBjb3Jlcy4gV2UgY3VycmVudGx5IGRvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbmFsaXR5CisgKiBpbiB0aGlzIGRyaXZlci4KKyAqCisgKiBDb250cm9sbGVyIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgTWFjaGluZSBjaGVja3MgKE1DUCksIGFnYWluIG9uCisgKiB0d28gbGluZXMsIHRvIGJlIGF0dGFjaGVkIHRvIHR3byBkaWZmZXJlbnQgY29yZXMuIEl0IGlzIHN1Z2dlc3RlZCB0aGF0IHRoZXNlCisgKiBzaG91bGQgYmUgbWFza2VkIG91dC4KKyAqLworCit2b2lkIGdlZl9waWNfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgaW50IGNhc2NhZGVfaXJxOworCisJLyoKKwkgKiBTZWUgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhbiBpbnRlcnJ1cHQsIGNhbGwgZ2VuZXJpYyBoYW5kbGluZyBjb2RlIGlmCisJICogd2UgZG8uCisJICovCisJY2FzY2FkZV9pcnEgPSBnZWZfcGljX2dldF9pcnEoKTsKKworCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCisJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7CisKKwlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworfQorCitzdGF0aWMgdm9pZCBnZWZfcGljX21hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJdTMyIG1hc2s7CisKKwlod2lycSA9IGdlZl9pcnFfdG9faHcodmlycSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CisJbWFzayA9IGluX2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSk7CisJbWFzayAmPSB+KDEgPDwgaHdpcnEpOworCW91dF9iZTMyKGdlZl9waWNfaXJxX3JlZ19iYXNlICsgR0VGX1BJQ19JTlRSX01BU0soMCksIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdlZl9waWNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBnZWZfcGljX21hc2tfYWNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCS8qIERvbid0IHRoaW5rIHdlIGFjdHVhbGx5IGhhdmUgdG8gZG8gYW55dGhpbmcgdG8gYWNrIGFuIGludGVycnVwdCwKKwkgKiB3ZSBqdXN0IG5lZWQgdG8gY2xlYXIgZG93biB0aGUgZGV2aWNlcyBpbnRlcnJ1cHQgYW5kIGl0IHdpbGwgZ28gYXdheQorCSAqLworCWdlZl9waWNfbWFzayh2aXJxKTsKK30KKworc3RhdGljIHZvaWQgZ2VmX3BpY191bm1hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJdTMyIG1hc2s7CisKKwlod2lycSA9IGdlZl9pcnFfdG9faHcodmlycSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CisJbWFzayA9IGluX2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSk7CisJbWFzayB8PSAoMSA8PCBod2lycSk7CisJb3V0X2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSwgbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ2VmX3BpY19jaGlwID0geworCS50eXBlbmFtZQk9ICJnZWZwIiwKKwkubWFzawkJPSBnZWZfcGljX21hc2ssCisJLm1hc2tfYWNrCT0gZ2VmX3BpY19tYXNrX2FjaywKKwkudW5tYXNrCQk9IGdlZl9waWNfdW5tYXNrLAorfTsKKworCisvKiBXaGVuIGFuIGludGVycnVwdCBpcyBiZWluZyBjb25maWd1cmVkLCB0aGlzIGNhbGwgYWxsb3dzIHNvbWUgZmxleGliaWx0eQorICogaW4gZGVjaWRpbmcgd2hpY2ggaXJxX2NoaXAgc3RydWN0dXJlIGlzIHVzZWQKKyAqLworc3RhdGljIGludCBnZWZfcGljX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgIGlycV9od19udW1iZXJfdCBod2lycSkKK3sKKwkvKiBBbGwgaW50ZXJydXB0cyBhcmUgTEVWRUwgc2Vuc2l0aXZlICovCisJZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmZ2VmX3BpY19jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdlZl9waWNfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCisJCQkgICAgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCSAgICBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCit7CisKKwkqb3V0X2h3aXJxID0gaW50c3BlY1swXTsKKwlpZiAoaW50c2l6ZSA+IDEpCisJCSpvdXRfZmxhZ3MgPSBpbnRzcGVjWzFdOworCWVsc2UKKwkJKm91dF9mbGFncyA9IElSUV9UWVBFX0xFVkVMX0hJR0g7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgZ2VmX3BpY19ob3N0X29wcyA9IHsKKwkubWFwCT0gZ2VmX3BpY19ob3N0X21hcCwKKwkueGxhdGUJPSBnZWZfcGljX2hvc3RfeGxhdGUsCit9OworCisKKy8qCisgKiBJbml0aWFsaXNhdGlvbiBvZiBQSUMsIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBpbiBCU1AKKyAqLwordm9pZCBfX2luaXQgZ2VmX3BpY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIE1hcCB0aGUgZGV2aWNlcyByZWdpc3RlcnMgaW50byBtZW1vcnkgKi8KKwlnZWZfcGljX2lycV9yZWdfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZnZWZfcGljX2xvY2ssIGZsYWdzKTsKKworCS8qIEluaXRpYWxpc2UgZXZlcnl0aGluZyBhcyBtYXNrZWQuICovCisJb3V0X2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0NQVTBfSU5UUl9NQVNLLCAwKTsKKwlvdXRfYmUzMihnZWZfcGljX2lycV9yZWdfYmFzZSArIEdFRl9QSUNfQ1BVMV9JTlRSX01BU0ssIDApOworCisJb3V0X2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0NQVTBfTUNQX01BU0ssIDApOworCW91dF9iZTMyKGdlZl9waWNfaXJxX3JlZ19iYXNlICsgR0VGX1BJQ19DUFUxX01DUF9NQVNLLCAwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdlZl9waWNfbG9jaywgZmxhZ3MpOworCisJLyogTWFwIGNvbnRyb2xsZXIgKi8KKwlnZWZfcGljX2Nhc2NhZGVfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCWlmIChnZWZfcGljX2Nhc2NhZGVfaXJxID09IE5PX0lSUSkgeworCQlwcmludGsoS0VSTl9FUlIgIlNCQzYxMDogZmFpbGVkIHRvIG1hcCBjYXNjYWRlIGludGVycnVwdCIpOworCQlyZXR1cm47CisJfQorCisJLyogU2V0dXAgYW4gaXJxX2hvc3Qgc3RydWN0dXJlICovCisJZ2VmX3BpY19pcnFfaG9zdCA9IGlycV9hbGxvY19ob3N0KG5wLCBJUlFfSE9TVF9NQVBfTElORUFSLAorCQkJCQkgIEdFRl9QSUNfTlVNX0lSUVMsCisJCQkJCSAgJmdlZl9waWNfaG9zdF9vcHMsIE5PX0lSUSk7CisJaWYgKGdlZl9waWNfaXJxX2hvc3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogQ2hhaW4gd2l0aCBwYXJlbnQgY29udHJvbGxlciAqLworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGdlZl9waWNfY2FzY2FkZV9pcnEsIGdlZl9waWNfY2FzY2FkZSk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIHJlY2VpdmUgYW4gaW50ZXJydXB0IHdpdGggYXBwYXJlbnRseSBjb21lcyBmcm9tIHRoaXMKKyAqIGNoaXAgLSBjaGVjaywgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IGludGVycnVwdCBnZW5lcmF0ZWQgb3IgcmV0dXJuIE5PX0lSUQorICovCit1bnNpZ25lZCBpbnQgZ2VmX3BpY19nZXRfaXJxKHZvaWQpCit7CisJdTMyIGNhdXNlLCBtYXNrLCBhY3RpdmU7CisJdW5zaWduZWQgaW50IHZpcnEgPSBOT19JUlE7CisJaW50IGh3aXJxOworCisJY2F1c2UgPSBpbl9iZTMyKGdlZl9waWNfaXJxX3JlZ19iYXNlICsgR0VGX1BJQ19JTlRSX1NUQVRVUyk7CisKKwltYXNrID0gaW5fYmUzMihnZWZfcGljX2lycV9yZWdfYmFzZSArIEdFRl9QSUNfSU5UUl9NQVNLKDApKTsKKworCWFjdGl2ZSA9IGNhdXNlICYgbWFzazsKKworCWlmIChhY3RpdmUpIHsKKwkJZm9yIChod2lycSA9IEdFRl9QSUNfTlVNX0lSUVMgLSAxOyBod2lycSA+IC0xOyBod2lycS0tKSB7CisJCQlpZiAoYWN0aXZlICYgKDB4MSA8PCBod2lycSkpCisJCQkJYnJlYWs7CisJCX0KKwkJdmlycSA9IGlycV9saW5lYXJfcmV2bWFwKGdlZl9waWNfaXJxX2hvc3QsCisJCQkoaXJxX2h3X251bWJlcl90KWh3aXJxKTsKKwl9CisKKwlyZXR1cm4gdmlycTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0OTkxNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfX0dFRl9QSUNfSF9fCisjZGVmaW5lIF9fR0VGX1BJQ19IX18KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKwordm9pZCBnZWZfcGljX2Nhc2NhZGUodW5zaWduZWQgaW50LCBzdHJ1Y3QgaXJxX2Rlc2MgKik7Cit1bnNpZ25lZCBpbnQgZ2VmX3BpY19nZXRfaXJxKHZvaWQpOwordm9pZCBnZWZfcGljX2luaXQoc3RydWN0IGRldmljZV9ub2RlICopOworCisjZW5kaWYgLyogX19HRUZfUElDX0hfXyAqLworCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzYxMC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjFjNDVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYwpAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIEdFIEZhbnVjIFNCQzYxMCBib2FyZCBzdXBwb3J0CisgKgorICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQmFzZWQgb246IG1wYzg2eHhfaHBjbi5jIChNUEM4Nnh4IEhQQ04gYm9hcmQgc3BlY2lmaWMgcm91dGluZXMpCisgKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogTkVDIGZpeHVwIGFkYXB0ZWQgZnJvbSBhcmNoL21pcHMvcGNpL2ZpeHVwLWxtMmUuYworICovCisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vbXBjODZ4eC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorCisjaW5jbHVkZSA8YXNtL21waWMuaD4KKworI2luY2x1ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKworI2luY2x1ZGUgIm1wYzg2eHguaCIKKyNpbmNsdWRlICJnZWZfcGljLmgiCisKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHIChmbXQuLi4pIGRvIHsgcHJpbnRrKEtFUk5fRVJSICJTQkM2MTA6ICIgZm10KTsgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERCRyAoZm10Li4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwordm9pZCBfX2lvbWVtICpzYmM2MTBfcmVnczsKKworc3RhdGljIHZvaWQgX19pbml0IGdlZl9zYmM2MTBfaW5pdF9pcnEodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNhc2NhZGVfbm9kZSA9IE5VTEw7CisKKwltcGM4Nnh4X2luaXRfaXJxKCk7CisKKwkvKgorCSAqIFRoZXJlIGlzIGEgc2ltcGxlIGludGVycnVwdCBoYW5kbGVyIGluIHRoZSBtYWluIEZQR0EsIHRoaXMgbmVlZHMKKwkgKiB0byBiZSBjYXNjYWRlZCBpbnRvIHRoZSBNUElDCisJICovCisJY2FzY2FkZV9ub2RlID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImdlZixmcGdhLXBpYyIpOworCWlmICghY2FzY2FkZV9ub2RlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNCQzYxMDogTm8gRlBHQSBQSUNcbiIpOworCQlyZXR1cm47CisJfQorCisJZ2VmX3BpY19pbml0KGNhc2NhZGVfbm9kZSk7CisJb2Zfbm9kZV9wdXQoY2FzY2FkZV9ub2RlKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGdlZl9zYmM2MTBfc2V0dXBfYXJjaCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVnczsKKyNpZmRlZiBDT05GSUdfUENJCisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJmc2wsbXBjODY0MS1wY2llIikgeworCQlmc2xfYWRkX2JyaWRnZShucCwgMSk7CisJfQorI2VuZGlmCisKKwlwcmludGsoS0VSTl9JTkZPICJHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgU0JDNjEwIDZVIFZQWCBTQkNcbiIpOworCisjaWZkZWYgQ09ORklHX1NNUAorCW1wYzg2eHhfc21wX2luaXQoKTsKKyNlbmRpZgorCisJLyogUmVtYXAgYmFzaWMgYm9hcmQgcmVnaXN0ZXJzICovCisJcmVncyA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJnZWYsZnBnYS1yZWdzIik7CisJaWYgKHJlZ3MpIHsKKwkJc2JjNjEwX3JlZ3MgPSBvZl9pb21hcChyZWdzLCAwKTsKKwkJaWYgKHNiYzYxMF9yZWdzID09IE5VTEwpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gbWFwIGJvYXJkIHJlZ2lzdGVyc1xuIik7CisJCW9mX25vZGVfcHV0KHJlZ3MpOworCX0KK30KKworLyogUmV0dXJuIHRoZSBQQ0IgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3NiYzYxMF9nZXRfcGNiX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihzYmM2MTBfcmVncyk7CisJcmV0dXJuIChyZWcgPj4gOCkgJiAweGZmOworfQorCisvKiBSZXR1cm4gdGhlIGJvYXJkIChzb2Z0d2FyZSkgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3NiYzYxMF9nZXRfYm9hcmRfcmV2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IGlvcmVhZDMyKHNiYzYxMF9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAxNikgJiAweGZmOworfQorCisvKiBSZXR1cm4gdGhlIEZQR0EgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3NiYzYxMF9nZXRfZnBnYV9yZXYodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gaW9yZWFkMzIoc2JjNjEwX3JlZ3MpOworCXJldHVybiAocmVnID4+IDI0KSAmIDB4ZjsKK30KKworc3RhdGljIHZvaWQgZ2VmX3NiYzYxMF9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQoreworCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsKKwl1aW50IHN2aWQgPSBtZnNwcihTUFJOX1NWUik7CisKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXNcbiIpOworCisJc2VxX3ByaW50ZihtLCAiUmV2aXNpb25cdDogJXUlY1xuIiwgZ2VmX3NiYzYxMF9nZXRfcGNiX3JldigpLAorCQkoJ0EnICsgZ2VmX3NiYzYxMF9nZXRfYm9hcmRfcmV2KCkgLSAxKSk7CisJc2VxX3ByaW50ZihtLCAiRlBHQSBSZXZpc2lvblx0OiAldVxuIiwgZ2VmX3NiYzYxMF9nZXRfZnBnYV9yZXYoKSk7CisKKwlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKKwlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3NiYzYxMF9uZWNfZml4dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXByaW50ayhLRVJOX0lORk8gIlJ1bm5pbmcgTkVDIHVQRDcyMDEwMSBGaXh1cFxuIik7CisKKwkvKiBFbnN1cmUgcG9ydHMgMSwgMiwgMywgNCAmIDUgYXJlIGVuYWJsZWQgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHhlMCwgJnZhbCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweGUwLCAodmFsICYgfjcpIHwgMHg1KTsKKworCS8qIFN5c3RlbSBjbG9jayBpcyA0OC1NSHogT3NjaWxsYXRvciBhbmQgRUhDSSBFbmFibGVkLiAqLworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHhlNCwgMSA8PCA1KTsKK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05FQywgUENJX0RFVklDRV9JRF9ORUNfVVNCLAorCWdlZl9zYmM2MTBfbmVjX2ZpeHVwKTsKKworLyoKKyAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBCU1AgaXMgY29tcGF0aWJsZSB3aXRoIHRoZQorICogc3VwcGxpZWQgZGV2aWNlLXRyZWUsIHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgdGhlIGNvcnJlY3Qgb25lIGZvciB0aGUgYWN0dWFsCisgKiBib2FyZC4gSXQgaXMgZXhwZWN0ZWQgdGhhdGksIGluIHRoZSBmdXR1cmUsIGEga2VybmVsIG1heSBzdXBwb3J0IG11bHRpcGxlCisgKiBib2FyZHMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGdlZl9zYmM2MTBfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJnZWYsc2JjNjEwIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIF9faW5pdCBtcGM4Nnh4X3RpbWVfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB0ZW1wOworCisJLyogU2V0IHRoZSB0aW1lIGJhc2UgdG8gemVybyAqLworCW10c3ByKFNQUk5fVEJXTCwgMCk7CisJbXRzcHIoU1BSTl9UQldVLCAwKTsKKworCXRlbXAgPSBtZnNwcihTUFJOX0hJRDApOworCXRlbXAgfD0gSElEMF9UQkVOOworCW10c3ByKFNQUk5fSElEMCwgdGVtcCk7CisJYXNtIHZvbGF0aWxlKCJpc3luYyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYnVzX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiUHJvYmUgcGxhdGZvcm0gZGV2aWNlc1xuIik7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG9mX2J1c19pZHMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChnZWZfc2JjNjEwLCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMpOworCitkZWZpbmVfbWFjaGluZShnZWZfc2JjNjEwKSB7CisJLm5hbWUJCQk9ICJHRSBGYW51YyBTQkM2MTAiLAorCS5wcm9iZQkJCT0gZ2VmX3NiYzYxMF9wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBnZWZfc2JjNjEwX3NldHVwX2FyY2gsCisJLmluaXRfSVJRCQk9IGdlZl9zYmM2MTBfaW5pdF9pcnEsCisJLnNob3dfY3B1aW5mbwkJPSBnZWZfc2JjNjEwX3Nob3dfY3B1aW5mbywKKwkuZ2V0X2lycQkJPSBtcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gZnNsX3JzdGNyX3Jlc3RhcnQsCisJLnRpbWVfaW5pdAkJPSBtcGM4Nnh4X3RpbWVfaW5pdCwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKKyNpZmRlZiBDT05GSUdfUENJCisJLnBjaWJpb3NfZml4dXBfYnVzCT0gZnNsX3BjaWJpb3NfZml4dXBfYnVzLAorI2VuZGlmCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jCmluZGV4IDVlZWRiNzEuLmU4ZDU0YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjEwX2hwY2QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMKQEAgLTIzOCw3ICsyMzgsNiBAQAogICAgICAgICB9CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVKSB8fCBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVX01PRFVMRSkKLQlwcmVhbGxvY2F0ZV9kaXVfdmlkZW9tZW1vcnkoKTsKIAlkaXVfb3BzLmdldF9waXhlbF9mb3JtYXQJPSBtcGM4NjEwaHBjZF9nZXRfcGl4ZWxfZm9ybWF0OwogCWRpdV9vcHMuc2V0X2dhbW1hX3RhYmxlCQk9IG1wYzg2MTBocGNkX3NldF9nYW1tYV90YWJsZTsKIAlkaXVfb3BzLnNldF9tb25pdG9yX3BvcnQJPSBtcGM4NjEwaHBjZF9zZXRfbW9uaXRvcl9wb3J0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCmluZGV4IGY3MTJkOWMuLjI2NzI4MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKQEAgLTEwMSwxOSArMTAxLDExIEBACiBzdGF0aWMgdm9pZAogbXBjODZ4eF9ocGNuX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpyb290OwogCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsKLQljb25zdCBjaGFyICptb2RlbCA9ICIiOwogCXVpbnQgc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKIAogCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yXG4iKTsKIAotCXJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwotCWlmIChyb290KQotCQltb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShyb290LCAibW9kZWwiLCBOVUxMKTsKLQlzZXFfcHJpbnRmKG0sICJNYWNoaW5lXHRcdDogJXNcbiIsIG1vZGVsKTsKLQlvZl9ub2RlX3B1dChyb290KTsKLQogCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOwogCXNlcV9wcmludGYobSwgIk1lbW9yeVx0XHQ6ICVkIE1CXG4iLCBtZW1zaXplIC8gKDEwMjQgKiAxMDI0KSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9zYmM4NjQxZC5jCmluZGV4IDAwZTZmYWQuLmRhNjc3YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9zYmM4NjQxZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9zYmM4NjQxZC5jCkBAIC02MywxOSArNjMsMTEgQEAKIHN0YXRpYyB2b2lkCiBzYmM4NjQxX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpyb290OwogCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsKLQljb25zdCBjaGFyICptb2RlbCA9ICIiOwogCXVpbnQgc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKIAogCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IFdpbmQgUml2ZXIgU3lzdGVtc1xuIik7CiAKLQlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKLQlpZiAocm9vdCkKLQkJbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkocm9vdCwgIm1vZGVsIiwgTlVMTCk7Ci0Jc2VxX3ByaW50ZihtLCAiTWFjaGluZVx0XHQ6ICVzXG4iLCBtb2RlbCk7Ci0Jb2Zfbm9kZV9wdXQocm9vdCk7Ci0KIAlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKIAlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWcKaW5kZXggNzFkNzU2Mi4uNDhhOTIwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnCkBAIC00OSw2ICs0OSwxMiBAQAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBbmFsb2d1ZSAmIE1pY3JvIEFkZGVyIDg3NQogCSAgYm9hcmQuCiAKK2NvbmZpZyBQUENfTUdTVVZECisJYm9vbCAiTUdTVVZEIgorCXNlbGVjdCBDUE0xCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBLZXltaWxlIE1HU1VWRCBib2FyZC4KKwogZW5kY2hvaWNlCiAKIG1lbnUgIkZyZWVzY2FsZSBFdGhlcm5ldCBkcml2ZXIgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW9ucyIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvTWFrZWZpbGUKaW5kZXggN2I3MWQ5Yy4uYmRiZmQ3NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvTWFrZWZpbGUKQEAgLTYsMyArNiw0IEBACiBvYmotJChDT05GSUdfTVBDODZYQURTKSAgICs9IG1wYzg2eGFkc19zZXR1cC5vCiBvYmotJChDT05GSUdfUFBDX0VQODhYQykgICs9IGVwODh4Yy5vCiBvYmotJChDT05GSUdfUFBDX0FEREVSODc1KSArPSBhZGRlcjg3NS5vCitvYmotJChDT05GSUdfUFBDX01HU1VWRCkgKz0gbWdzdXZkLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L21nc3V2ZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbWdzdXZkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzY2IwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L21nc3V2ZC5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKgorICogUGxhdGZvcm0gc2V0dXAgZm9yIHRoZSBLZXltaWxlIG1nc3V2ZCBib2FyZAorICoKKyAqIEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgorICoKKyAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY3BtMS5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL2ZzX3BkLmg+CisKKyNpbmNsdWRlICJtcGM4eHguaCIKKworc3RydWN0IGNwbV9waW4geworCWludCBwb3J0LCBwaW4sIGZsYWdzOworfTsKKworc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IGNwbV9waW4gbWdzdXZkX3BpbnNbXSA9IHsKKwkvKiBTTUMxICovCisJe0NQTV9QT1JUQiwgMjQsIENQTV9QSU5fSU5QVVR9LCAvKiBSWCAqLworCXtDUE1fUE9SVEIsIDI1LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9TRUNPTkRBUll9LCAvKiBUWCAqLworCisJLyogU0NDMyAqLworCXtDUE1fUE9SVEEsIDEwLCBDUE1fUElOX0lOUFVUfSwKKwl7Q1BNX1BPUlRBLCAxMSwgQ1BNX1BJTl9JTlBVVH0sCisJe0NQTV9QT1JUQSwgMywgQ1BNX1BJTl9JTlBVVH0sCisJe0NQTV9QT1JUQSwgMiwgQ1BNX1BJTl9JTlBVVH0sCisJe0NQTV9QT1JUQywgMTMsIENQTV9QSU5fSU5QVVR9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGluaXRfaW9wb3J0cyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWdzdXZkX3BpbnMpOyBpKyspIHsKKwkJc3RydWN0IGNwbV9waW4gKnBpbiA9ICZtZ3N1dmRfcGluc1tpXTsKKwkJY3BtMV9zZXRfcGluKHBpbi0+cG9ydCwgcGluLT5waW4sIHBpbi0+ZmxhZ3MpOworCX0KKworCXNldGJpdHMxNigmbXBjOHh4X2ltbXItPmltX2lvcG9ydC5pb3BfcGNzbywgMHgzMDApOworCWNwbTFfY2xrX3NldHVwKENQTV9DTEtfU0NDMywgQ1BNX0NMSzUsIENQTV9DTEtfUlgpOworCWNwbTFfY2xrX3NldHVwKENQTV9DTEtfU0NDMywgQ1BNX0NMSzYsIENQTV9DTEtfVFgpOworCWNwbTFfY2xrX3NldHVwKENQTV9DTEtfU01DMSwgQ1BNX0JSRzEsIENQTV9DTEtfUlRYKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1nc3V2ZF9zZXR1cF9hcmNoKHZvaWQpCit7CisJY3BtX3Jlc2V0KCk7CisJaW5pdF9pb3BvcnRzKCk7Cit9CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYnVzX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIgfSwKKwl7fSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKQoreworCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBvZl9idXNfaWRzLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KK21hY2hpbmVfZGV2aWNlX2luaXRjYWxsKG1nc3V2ZCwgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKKworc3RhdGljIGludCBfX2luaXQgbWdzdXZkX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCXJldHVybiBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImtleW1pbGUsbWdzdXZkIik7Cit9CisKK2RlZmluZV9tYWNoaW5lKG1nc3V2ZCkgeworCS5uYW1lICAgICAgICAgICA9ICJNR1NVVkQiLAorCS5wcm9iZSAgICAgICAgICA9IG1nc3V2ZF9wcm9iZSwKKwkuc2V0dXBfYXJjaCAgICAgPSBtZ3N1dmRfc2V0dXBfYXJjaCwKKwkuaW5pdF9JUlEgICAgICAgPSBtcGM4eHhfcGljc19pbml0LAorCS5nZXRfaXJxICAgICAgICA9IG1wYzh4eF9nZXRfaXJxLAorCS5yZXN0YXJ0ICAgICAgICA9IG1wYzh4eF9yZXN0YXJ0LAorCS5jYWxpYnJhdGVfZGVjciA9IG1wYzh4eF9jYWxpYnJhdGVfZGVjciwKKwkuc2V0X3J0Y190aW1lICAgPSBtcGM4eHhfc2V0X3J0Y190aW1lLAorCS5nZXRfcnRjX3RpbWUgICA9IG1wYzh4eF9nZXRfcnRjX3RpbWUsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCmluZGV4IDRjOTAwZWYuLjQ3ZTk1NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKQEAgLTIzOSw3ICsyMzksOCBAQAogCSAgSWYgaW4gZG91YnQsIHNheSBOIGhlcmUuCiAKIGNvbmZpZyBRVUlDQ19FTkdJTkUKLQlib29sCisJYm9vbCAiRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSAoUUUpIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBGU0xfU09DCiAJc2VsZWN0IFBQQ19MSUJfUkhFQVAKIAlzZWxlY3QgQ1JDMzIKIAloZWxwCkBAIC0yNDgsNiArMjQ5LDE1IEBACiAJICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gbWVhbnMgdGhhdCB5b3Ugd2lzaCB0byBidWlsZCBhIGtlcm5lbAogCSAgZm9yIGEgbWFjaGluZSB3aXRoIGEgUUUgY29wcm9jZXNzb3IuCiAKK2NvbmZpZyBRRV9HUElPCisJYm9vbCAiUUUgR1BJTyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUVVJQ0NfRU5HSU5FCisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91J3JlIGdvaW5nIHRvIHVzZSBoYXJkd2FyZSB0aGF0IGNvbm5lY3RzIHRvIHRoZQorCSAgUUUgR1BJT3MuCisKIGNvbmZpZyBDUE0yCiAJYm9vbCAiRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBDUE0yIChDb21tdW5pY2F0aW9ucyBQcm9jZXNzb3IgTW9kdWxlKSIKIAlkZXBlbmRzIG9uIE1QQzg1eHggfHwgODI2MApAQCAtMjkzLDQgKzMwMywxMyBAQAogCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vS2NvbmZpZyIKIAorY29uZmlnIE1QQzh4eHhfR1BJTworCWJvb2wgIk1QQzh4eHggR1BJTyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUFBDX01QQzgzMXggfHwgUFBDX01QQzgzNHggfHwgUFBDX01QQzgzN3ggfHwgUFBDXzg1eHggfHwgUFBDXzg2eHgKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UncmUgZ29pbmcgdG8gdXNlIGhhcmR3YXJlIHRoYXQgY29ubmVjdHMgdG8gdGhlCisJICBNUEM4MzF4LzgzNHgvODM3eC84NTcyLzg2MTAgR1BJT3MuCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUKaW5kZXggN2Y2NTEyNy4uNTQ4ZWZhNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUKQEAgLTUwLDYgKzUwLDcgQEAKIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKIAlzZWxlY3QgNHh4X1NPQwogCXNlbGVjdCBQUENfUENJX0NIT0lDRQorCXNlbGVjdCBQSFlTXzY0QklUCiAKIGNvbmZpZyBFMjAwCiAJYm9vbCAiRnJlZXNjYWxlIGUyMDAiCkBAIC0xMjgsMTggKzEyOSwxOSBAQAogCiBjb25maWcgUFRFXzY0QklUCiAJYm9vbAotCWRlcGVuZHMgb24gNDR4IHx8IEU1MDAKLQlkZWZhdWx0IHkgaWYgNDR4Ci0JZGVmYXVsdCB5IGlmIEU1MDAgJiYgUEhZU182NEJJVAorCWRlcGVuZHMgb24gNDR4IHx8IEU1MDAgfHwgUFBDXzg2eHgKKwlkZWZhdWx0IHkgaWYgUEhZU182NEJJVAogCiBjb25maWcgUEhZU182NEJJVAotCWJvb2wgJ0xhcmdlIHBoeXNpY2FsIGFkZHJlc3Mgc3VwcG9ydCcgaWYgRTUwMAotCWRlcGVuZHMgb24gNDR4IHx8IEU1MDAKLQlzZWxlY3QgUkVTT1VSQ0VTXzY0QklUCi0JZGVmYXVsdCB5IGlmIDQ0eAorCWJvb2wgJ0xhcmdlIHBoeXNpY2FsIGFkZHJlc3Mgc3VwcG9ydCcgaWYgRTUwMCB8fCBQUENfODZ4eAorCWRlcGVuZHMgb24gKDQ0eCB8fCBFNTAwIHx8IFBQQ184Nnh4KSAmJiAhUFBDXzgzeHggJiYgIVBQQ184Mnh4CiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBrZXJuZWwgc3VwcG9ydCBmb3IgbGFyZ2VyIHRoYW4gMzItYml0IHBoeXNpY2FsCi0JICBhZGRyZXNzZXMuICBUaGlzIGZlYXR1cmVzIGlzIG5vdCBiZSBhdmFpbGFibGUgb24gYWxsIGU1MDAgY29yZXMuCisJICBhZGRyZXNzZXMuICBUaGlzIGZlYXR1cmUgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gYWxsIGNvcmVzLgorCisJICBJZiB5b3UgaGF2ZSBtb3JlIHRoYW4gMy41R0Igb2YgUkFNIG9yIHNvLCB5b3UgYWxzbyBuZWVkIHRvIGVuYWJsZQorCSAgU1dJT1RMQiB1bmRlciBLZXJuZWwgT3B0aW9ucyBmb3IgdGhpcyB0byB3b3JrLiAgVGhlIGFjdHVhbCBudW1iZXIKKwkgIGlzIHBsYXRmb3JtLWRlcGVuZGVudC4KIAogCSAgSWYgaW4gZG91YnQsIHNheSBOIGhlcmUuCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKaW5kZXggZTA2NDIwYS4uZWY5MmU3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKQEAgLTU1NiwxMSArNTU2LDExIEBACiAJICogbm9kZSdzIGlvbW11LiBXZSAtbWlnaHQtIGRvIHNvbWV0aGluZyBzbWFydGVyIGxhdGVyIHRob3VnaCBpdCBtYXkKIAkgKiBuZXZlciBiZSBuZWNlc3NhcnkKIAkgKi8KLQlpb21tdSA9IGNlbGxfaW9tbXVfZm9yX25vZGUoYXJjaGRhdGEtPm51bWFfbm9kZSk7CisJaW9tbXUgPSBjZWxsX2lvbW11X2Zvcl9ub2RlKGRldl90b19ub2RlKGRldikpOwogCWlmIChpb21tdSA9PSBOVUxMIHx8IGxpc3RfZW1wdHkoJmlvbW11LT53aW5kb3dzKSkgewogCQlwcmludGsoS0VSTl9FUlIgImlvbW11OiBtaXNzaW5nIGlvbW11IGZvciAlcyAobm9kZSAlZClcbiIsCiAJCSAgICAgICBhcmNoZGF0YS0+b2Zfbm9kZSA/IGFyY2hkYXRhLT5vZl9ub2RlLT5mdWxsX25hbWUgOiAiPyIsCi0JCSAgICAgICBhcmNoZGF0YS0+bnVtYV9ub2RlKTsKKwkJICAgICAgIGRldl90b19ub2RlKGRldikpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJd2luZG93ID0gbGlzdF9lbnRyeShpb21tdS0+d2luZG93cy5uZXh0LCBzdHJ1Y3QgaW9tbXVfd2luZG93LCBsaXN0KTsKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCQlyZXR1cm4gaW9tbXVfYWxsb2NfY29oZXJlbnQoZGV2LCBjZWxsX2dldF9pb21tdV90YWJsZShkZXYpLAogCQkJCQkgICAgc2l6ZSwgZG1hX2hhbmRsZSwKIAkJCQkJICAgIGRldmljZV90b19tYXNrKGRldiksIGZsYWcsCi0JCQkJCSAgICBkZXYtPmFyY2hkYXRhLm51bWFfbm9kZSk7CisJCQkJCSAgICBkZXZfdG9fbm9kZShkZXYpKTsKIAllbHNlCiAJCXJldHVybiBkbWFfZGlyZWN0X29wcy5hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsCiAJCQkJCQkgICAgIGZsYWcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwppbmRleCA2OTBjYTdiLi5jYjg1ZDIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwpAQCAtMjk4LDggKzI5OCw4IEBACiAKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCWRnZXQoZGVudHJ5KTsKLQlkaXItPmlfbmxpbmsrKzsKLQlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoZGlyKTsKKwlpbmNfbmxpbmsoZGVudHJ5LT5kX2lub2RlKTsKIAlnb3RvIG91dDsKIAogb3V0X2ZyZWVfY3R4OgpAQCAtNDk2LDYgKzQ5Niw4IEBACiAJcmV0ID0gc3B1ZnNfY29udGV4dF9vcGVuKGRnZXQoZGVudHJ5KSwgbW50Z2V0KG1udCkpOwogCWlmIChyZXQgPCAwKSB7CiAJCVdBUk5fT04oc3B1ZnNfcm1kaXIoaW5vZGUsIGRlbnRyeSkpOworCQlpZiAoYWZmaW5pdHkpCisJCQltdXRleF91bmxvY2soJmdhbmctPmFmZl9tdXRleCk7CiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQlzcHVfZm9yZ2V0KFNQVUZTX0koZGVudHJ5LT5kX2lub2RlKS0+aV9jdHgpOwogCQlnb3RvIG91dDsKQEAgLTUzOCw4ICs1NDAsOCBAQAogCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7CiAKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCWRpci0+aV9ubGluaysrOwotCWRlbnRyeS0+ZF9pbm9kZS0+aV9ubGluaysrOworCWluY19ubGluayhkaXIpOworCWluY19ubGluayhkZW50cnktPmRfaW5vZGUpOwogCXJldHVybiByZXQ7CiAKIG91dF9pcHV0OgpAQCAtNjU5LDcgKzY2MSw3IEBACiAJT3B0X3VpZCwgT3B0X2dpZCwgT3B0X21vZGUsIE9wdF9kZWJ1ZywgT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHNwdWZzX3Rva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHNwdWZzX3Rva2VucyA9IHsKIAl7IE9wdF91aWQsICAgInVpZD0lZCIgfSwKIAl7IE9wdF9naWQsICAgImdpZD0lZCIgfSwKIAl7IE9wdF9tb2RlLCAgIm1vZGU9JW8iIH0sCkBAIC03NTUsNiArNzU3LDcgQEAKIAlpbm9kZS0+aV9vcCA9ICZzaW1wbGVfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAJaW5vZGUtPmlfZm9wID0gJnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKIAlTUFVGU19JKGlub2RlKS0+aV9jdHggPSBOVUxMOworCWluY19ubGluayhpbm9kZSk7CiAKIAlyZXQgPSAtRUlOVkFMOwogCWlmICghc3B1ZnNfcGFyc2Vfb3B0aW9ucyhzYiwgZGF0YSwgaW5vZGUpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jCmluZGV4IDc2OGMyNjIuLmQzY2RlNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGNpLmMKQEAgLTI2MCwxMyArMjYwLDEzIEBACiAJCQkJZGV2LT5mdWxsX25hbWUpOwogCQkJY29udGludWU7CiAJCX0KLQkJaG9zZS0+Zmlyc3RfYnVzbm8gPSBidXNfcmFuZ2VbMF07CisJCWhvc2UtPmZpcnN0X2J1c25vID0gaG9zZS0+c2VsZl9idXNubyA9IGJ1c19yYW5nZVswXTsKIAkJaG9zZS0+bGFzdF9idXNubyA9IGJ1c19yYW5nZVsxXTsKIAogCQltb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShkZXYsICJtb2RlbCIsIE5VTEwpOwogCQlpZiAobW9kZWwgPT0gTlVMTCkKIAkJCW1vZGVsID0gIjxub25lPiI7Ci0JCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJJQk0scHl0aG9uIikpIHsKKwkJaWYgKHN0cm5jbXAobW9kZWwsICJJQk0sIFB5dGhvbiIsIDExKSA9PSAwKSB7CiAJCQlzZXR1cF9weXRob24oaG9zZSwgZGV2KTsKIAkJfSBlbHNlIGlmIChpc19tb3QKIAkJCSAgIHx8IHN0cm5jbXAobW9kZWwsICJNb3Rvcm9sYSwgR3JhY2tsZSIsIDE3KSA9PSAwKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCmluZGV4IDFiYTdjZTUuLjI3MmQ3OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvdGltZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3RpbWUuYwppbmRleCA5NmQxZTRiLi4wNTRkZmU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC90aW1lLmMKQEAgLTk0LDEyICs5NCwxMiBAQAogCWNocnBfY21vc19jbG9ja193cml0ZSgoc2F2ZV9mcmVxX3NlbGVjdHxSVENfRElWX1JFU0VUMiksIFJUQ19GUkVRX1NFTEVDVCk7CiAKIAlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlCSU5fVE9fQkNEKHRtLnRtX3NlYyk7Ci0JCUJJTl9UT19CQ0QodG0udG1fbWluKTsKLQkJQklOX1RPX0JDRCh0bS50bV9ob3VyKTsKLQkJQklOX1RPX0JDRCh0bS50bV9tb24pOwotCQlCSU5fVE9fQkNEKHRtLnRtX21kYXkpOwotCQlCSU5fVE9fQkNEKHRtLnRtX3llYXIpOworCQl0bS50bV9zZWMgPSBiaW4yYmNkKHRtLnRtX3NlYyk7CisJCXRtLnRtX21pbiA9IGJpbjJiY2QodG0udG1fbWluKTsKKwkJdG0udG1faG91ciA9IGJpbjJiY2QodG0udG1faG91cik7CisJCXRtLnRtX21vbiA9IGJpbjJiY2QodG0udG1fbW9uKTsKKwkJdG0udG1fbWRheSA9IGJpbjJiY2QodG0udG1fbWRheSk7CisJCXRtLnRtX3llYXIgPSBiaW4yYmNkKHRtLnRtX3llYXIpOwogCX0KIAljaHJwX2Ntb3NfY2xvY2tfd3JpdGUodG0udG1fc2VjLFJUQ19TRUNPTkRTKTsKIAljaHJwX2Ntb3NfY2xvY2tfd3JpdGUodG0udG1fbWluLFJUQ19NSU5VVEVTKTsKQEAgLTEzNiwxMiArMTM2LDEyIEBACiAJfSB3aGlsZSAoc2VjICE9IGNocnBfY21vc19jbG9ja19yZWFkKFJUQ19TRUNPTkRTKSk7CiAKIAlpZiAoIShjaHJwX2Ntb3NfY2xvY2tfcmVhZChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlCQ0RfVE9fQklOKHNlYyk7Ci0JCUJDRF9UT19CSU4obWluKTsKLQkJQkNEX1RPX0JJTihob3VyKTsKLQkJQkNEX1RPX0JJTihkYXkpOwotCQlCQ0RfVE9fQklOKG1vbik7Ci0JCUJDRF9UT19CSU4oeWVhcik7CisJCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwkJbWluID0gYmNkMmJpbihtaW4pOworCQlob3VyID0gYmNkMmJpbihob3VyKTsKKwkJZGF5ID0gYmNkMmJpbihkYXkpOworCQltb24gPSBiY2QyYmluKG1vbik7CisJCXllYXIgPSBiY2QyYmluKHllYXIpOwogCX0KIAlpZiAoeWVhciA8IDcwKQogCQl5ZWFyICs9IDEwMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvbXBjNzQ0OF9ocGMyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5jCmluZGV4IDg0ZTJkNzguLjdhMmJhMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvbXBjNzQ0OF9ocGMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9tcGM3NDQ4X2hwYzIuYwpAQCAtMTY0LDcgKzE2NCw2IEBACiB2b2lkIG1wYzc0NDhfaHBjMl9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQogewogCXNlcV9wcmludGYobSwgInZlbmRvclx0XHQ6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yXG4iKTsKLQlzZXFfcHJpbnRmKG0sICJtYWNoaW5lXHRcdDogTVBDNzQ0OGhwYzJcbiIpOwogfQogCiB2b2lkIG1wYzc0NDhfaHBjMl9yZXN0YXJ0KGNoYXIgKmNtZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9leGNlcHRpb24uUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9leGNlcHRpb24uUwppbmRleCA4ZmYzMzBkLi4yZjU4MTUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZXhjZXB0aW9uLlMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2V4Y2VwdGlvbi5TCkBAIC0zOCwxMiArMzgsMTMgQEAKIAogCS5nbG9ibCBzeXN0ZW1fcmVzZXRfaVNlcmllcwogc3lzdGVtX3Jlc2V0X2lTZXJpZXM6CisJYmwJLnJlbGF0aXZlX3RvYwogCW1mc3ByCXIxMyxTUFJOX1NQUkczCQkvKiBHZXQgYWxwYWNhIGFkZHJlc3MgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjIzLCBhbHBhY2EpCisJTE9BRF9SRUdfQUREUihyMjMsIGFscGFjYSkKIAlsaQlyMCxBTFBBQ0FfU0laRQogCXN1YglyMjMscjEzLHIyMwogCWRpdmR1CXIyMyxyMjMscjAJCS8qIHIyMyBoYXMgY3B1IG51bWJlciAqLwotCUxPQURfUkVHX0lNTUVESUFURShyMTMsIHBhY2EpCisJTE9BRF9SRUdfQUREUihyMTMsIHBhY2EpCiAJbXVsbGkJcjAscjIzLFBBQ0FfU0laRQogCWFkZAlyMTMscjEzLHIwCiAJbXRzcHIJU1BSTl9TUFJHMyxyMTMJCS8qIFNhdmUgaXQgYXdheSBmb3IgdGhlIGZ1dHVyZSAqLwpAQCAtNjAsMTQgKzYxLDE0IEBACiAJbXRzcHIJU1BSTl9DVFJMVCxyNAogCiAvKiBTcGluIG9uIF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3AgdW50aWwgaXQgaXMgdXBkYXRlZCBieSB0aGUgYm9vdCBjcHUuICovCi0vKiBJbiB0aGUgVVAgY2FzZSB3ZSdsbCB5ZWlsZCgpIGxhdGVyLCBhbmQgd2Ugd2lsbCBub3QgYWNjZXNzIHRoZSBwYWNhIGFueXdheSAqLworLyogSW4gdGhlIFVQIGNhc2Ugd2UnbGwgeWllbGQoKSBsYXRlciwgYW5kIHdlIHdpbGwgbm90IGFjY2VzcyB0aGUgcGFjYSBhbnl3YXkgKi8KICNpZmRlZiBDT05GSUdfU01QCiAxOgogCUhNVF9MT1cKLQlMT0FEX1JFR19JTU1FRElBVEUocjIzLCBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wKQorCUxPQURfUkVHX0FERFIocjIzLCBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wKQogCWxkCXIyMywwKHIyMykKIAlzeW5jCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIzLGN1cnJlbnRfc2V0KQorCUxPQURfUkVHX0FERFIocjMsY3VycmVudF9zZXQpCiAJc2xkaQlyMjgscjI0LDMJCS8qIGdldCBjdXJyZW50X3NldFtjcHUjXSAqLwogCWxkeAlyMyxyMyxyMjgKIAlhZGRpCXIxLHIzLFRIUkVBRF9TSVpFCkBAIC05MCw3ICs5MSw3IEBACiAJbGJ6CXIyMyxQQUNBUFJPQ1NUQVJUKHIxMykJLyogVGVzdCBpZiB0aGlzIHByb2Nlc3NvcgogCQkJCQkgKiBzaG91bGQgc3RhcnQgKi8KIAlzeW5jCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIzLGN1cnJlbnRfc2V0KQorCUxPQURfUkVHX0FERFIocjMsY3VycmVudF9zZXQpCiAJc2xkaQlyMjgscjI0LDMJCS8qIGdldCBjdXJyZW50X3NldFtjcHUjXSAqLwogCWxkeAlyMyxyMyxyMjgKIAlhZGRpCXIxLHIzLFRIUkVBRF9TSVpFCkBAIC0yNTUsOCArMjU2LDggQEAKIAogX0lOSVRfU1RBVElDKF9fc3RhcnRfaW5pdGlhbGl6YXRpb25faVNlcmllcykKIAkvKiBDbGVhciBvdXQgdGhlIEJTUyAqLwotCUxPQURfUkVHX0lNTUVESUFURShyMTEsX19ic3Nfc3RvcCkKLQlMT0FEX1JFR19JTU1FRElBVEUocjgsX19ic3Nfc3RhcnQpCisJTE9BRF9SRUdfQUREUihyMTEsX19ic3Nfc3RvcCkKKwlMT0FEX1JFR19BRERSKHI4LF9fYnNzX3N0YXJ0KQogCXN1YglyMTEscjExLHI4CQkvKiBic3Mgc2l6ZQkJCSovCiAJYWRkaQlyMTEscjExLDcJCS8qIHJvdW5kIHVwIHRvIGFuIGV2ZW4gZG91YmxlIHdvcmQgKi8KIAlybGRpY2wuIHIxMSxyMTEsNjEsMwkJLyogc2hpZnQgcmlnaHQgYnkgMwkJKi8KQEAgLTI2NywxNSArMjY4LDExIEBACiAzOglzdGR1CXIwLDgocjgpCiAJYmRuegkzYgogNDoKLQlMT0FEX1JFR19JTU1FRElBVEUocjEsaW5pdF90aHJlYWRfdW5pb24pCisJTE9BRF9SRUdfQUREUihyMSxpbml0X3RocmVhZF91bmlvbikKIAlhZGRpCXIxLHIxLFRIUkVBRF9TSVpFCiAJbGkJcjAsMAogCXN0ZHUJcjAsLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIxKQogCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIyLF9fdG9jX3N0YXJ0KQotCWFkZGkJcjIscjIsMHg0MDAwCi0JYWRkaQlyMixyMiwweDQwMDAKLQogCWJsCS5pU2VyaWVzX2Vhcmx5X3NldHVwCiAJYmwJLmVhcmx5X3NldHVwCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMKaW5kZXggNzMxZDdiMS4uMzY4OWMyNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21mLmMKQEAgLTcyMiwxMyArNzIyLDEzIEBACiAJZGF5ID0gdG0tPnRtX21kYXk7CiAJbW9uID0gdG0tPnRtX21vbiArIDE7CiAKLQlCSU5fVE9fQkNEKHNlYyk7Ci0JQklOX1RPX0JDRChtaW4pOwotCUJJTl9UT19CQ0QoaG91cik7Ci0JQklOX1RPX0JDRChtb24pOwotCUJJTl9UT19CQ0QoZGF5KTsKLQlCSU5fVE9fQkNEKHkxKTsKLQlCSU5fVE9fQkNEKHkyKTsKKwlzZWMgPSBiaW4yYmNkKHNlYyk7CisJbWluID0gYmluMmJjZChtaW4pOworCWhvdXIgPSBiaW4yYmNkKGhvdXIpOworCW1vbiA9IGJpbjJiY2QobW9uKTsKKwlkYXkgPSBiaW4yYmNkKGRheSk7CisJeTEgPSBiaW4yYmNkKHkxKTsKKwl5MiA9IGJpbjJiY2QoeTIpOwogCiAJbWVtc2V0KGNlX3RpbWUsIDAsIHNpemVvZihjZV90aW1lKSk7CiAJY2VfdGltZVszXSA9IDB4NDE7CkBAIC03NzcsMTIgKzc3NywxMiBAQAogCQl1OCBkYXkgPSBjZV9tc2dbMTBdOwogCQl1OCBtb24gPSBjZV9tc2dbMTFdOwogCi0JCUJDRF9UT19CSU4oc2VjKTsKLQkJQkNEX1RPX0JJTihtaW4pOwotCQlCQ0RfVE9fQklOKGhvdXIpOwotCQlCQ0RfVE9fQklOKGRheSk7Ci0JCUJDRF9UT19CSU4obW9uKTsKLQkJQkNEX1RPX0JJTih5ZWFyKTsKKwkJc2VjID0gYmNkMmJpbihzZWMpOworCQltaW4gPSBiY2QyYmluKG1pbik7CisJCWhvdXIgPSBiY2QyYmluKGhvdXIpOworCQlkYXkgPSBiY2QyYmluKGRheSk7CisJCW1vbiA9IGJjZDJiaW4obW9uKTsKKwkJeWVhciA9IGJjZDJiaW4oeWVhcik7CiAKIAkJaWYgKHllYXIgPD0gNjkpCiAJCQl5ZWFyICs9IDEwMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYwppbmRleCAzNjQ3MTQ3Li5kNGM2MWMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9zZXR1cC5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvdGltZS5jCmluZGV4IDUzYmNhMTMuLmVhYzU2OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvdGltZS5jCkBAIC02OCwxMiArNjgsMTIgQEAKIAogCWlmICghKG1hcGxlX2Nsb2NrX3JlYWQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkKIAkgICAgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQkNEX1RPX0JJTih0bS0+dG1fc2VjKTsKLQkJQkNEX1RPX0JJTih0bS0+dG1fbWluKTsKLQkJQkNEX1RPX0JJTih0bS0+dG1faG91cik7Ci0JCUJDRF9UT19CSU4odG0tPnRtX21kYXkpOwotCQlCQ0RfVE9fQklOKHRtLT50bV9tb24pOwotCQlCQ0RfVE9fQklOKHRtLT50bV95ZWFyKTsKKwkJdG0tPnRtX3NlYyA9IGJjZDJiaW4odG0tPnRtX3NlYyk7CisJCXRtLT50bV9taW4gPSBiY2QyYmluKHRtLT50bV9taW4pOworCQl0bS0+dG1faG91ciA9IGJjZDJiaW4odG0tPnRtX2hvdXIpOworCQl0bS0+dG1fbWRheSA9IGJjZDJiaW4odG0tPnRtX21kYXkpOworCQl0bS0+dG1fbW9uID0gYmNkMmJpbih0bS0+dG1fbW9uKTsKKwkJdG0tPnRtX3llYXIgPSBiY2QyYmluKHRtLT50bV95ZWFyKTsKIAkgIH0KIAlpZiAoKHRtLT50bV95ZWFyICsgMTkwMCkgPCAxOTcwKQogCQl0bS0+dG1feWVhciArPSAxMDA7CkBAIC0xMDQsMTIgKzEwNCwxMiBAQAogCXllYXIgPSB0bS0+dG1feWVhcjsKIAogCWlmICghKHNhdmVfY29udHJvbCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJJTl9UT19CQ0Qoc2VjKTsKLQkJQklOX1RPX0JDRChtaW4pOwotCQlCSU5fVE9fQkNEKGhvdXIpOwotCQlCSU5fVE9fQkNEKG1vbik7Ci0JCUJJTl9UT19CQ0QobWRheSk7Ci0JCUJJTl9UT19CQ0QoeWVhcik7CisJCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwkJbWluID0gYmluMmJjZChtaW4pOworCQlob3VyID0gYmluMmJjZChob3VyKTsKKwkJbW9uID0gYmluMmJjZChtb24pOworCQltZGF5ID0gYmluMmJjZChtZGF5KTsKKwkJeWVhciA9IGJpbjJiY2QoeWVhcik7CiAJfQogCW1hcGxlX2Nsb2NrX3dyaXRlKHNlYywgUlRDX1NFQ09ORFMpOwogCW1hcGxlX2Nsb2NrX3dyaXRlKG1pbiwgUlRDX01JTlVURVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYwppbmRleCA1MTY5ZWNjLi5lNmMwMDQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYwpAQCAtMjY3Nyw3ICsyNjc3LDcgQEAKIAltYWNpb19jaGlwc1tpXS5vZl9ub2RlCT0gbm9kZTsKIAltYWNpb19jaGlwc1tpXS50eXBlCT0gdHlwZTsKIAltYWNpb19jaGlwc1tpXS5iYXNlCT0gYmFzZTsKLQltYWNpb19jaGlwc1tpXS5mbGFncwk9IE1BQ0lPX0ZMQUdfU0NDQl9PTiB8IE1BQ0lPX0ZMQUdfU0NDQl9PTjsKKwltYWNpb19jaGlwc1tpXS5mbGFncwk9IE1BQ0lPX0ZMQUdfU0NDQV9PTiB8IE1BQ0lPX0ZMQUdfU0NDQl9PTjsKIAltYWNpb19jaGlwc1tpXS5uYW1lCT0gbWFjaW9fbmFtZXNbdHlwZV07CiAJcmV2cCA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAicmV2aXNpb24taWQiLCBOVUxMKTsKIAlpZiAocmV2cCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYwppbmRleCA4OGNjZjNhLi44MmMxNGQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwppbmRleCA0YWUzZDAwLi40MGY3MmMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKQEAgLTc4Nyw3ICs3ODcsNyBAQAogewogCXVuc2lnbmVkIGludCBzYXZlX3ZlY3RvcjsKIAl1bnNpZ25lZCBsb25nIHRhcmdldCwgZmxhZ3M7Ci0JdW5zaWduZWQgaW50ICp2ZWN0b3IgPSAodW5zaWduZWQgaW50ICopKEtFUk5FTEJBU0UrMHgxMDApOworCXVuc2lnbmVkIGludCAqdmVjdG9yID0gKHVuc2lnbmVkIGludCAqKShQQUdFX09GRlNFVCsweDEwMCk7CiAKIAlpZiAobnIgPCAwIHx8IG5yID4gMykKIAkJcmV0dXJuOwpAQCAtODAxLDcgKzgwMSw3IEBACiAJc2F2ZV92ZWN0b3IgPSAqdmVjdG9yOwogCiAJLyogU2V0dXAgZmFrZSByZXNldCB2ZWN0b3IgdGhhdCBkb2VzCi0JICogICBiIF9fc2Vjb25kYXJ5X3N0YXJ0X3BtYWNfMCArIG5yKjggLSBLRVJORUxCQVNFCisJICogICBiIF9fc2Vjb25kYXJ5X3N0YXJ0X3BtYWNfMCArIG5yKjgKIAkgKi8KIAl0YXJnZXQgPSAodW5zaWduZWQgbG9uZykgX19zZWNvbmRhcnlfc3RhcnRfcG1hY18wICsgbnIgKiA4OwogCXBhdGNoX2JyYW5jaCh2ZWN0b3IsIHRhcmdldCwgQlJBTkNIX1NFVF9MSU5LKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKaW5kZXggYmJiZWZkNi4uNTllYjg0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKQEAgLTkzLDExICs5MywxNCBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BREJfQ1VEQSkgfHwgZGVmaW5lZChDT05GSUdfQURCX1BNVSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX1BNQUNfU01VKQogc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJvbV9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXJldHVybiBta3RpbWUodG0tPnRtX3llYXIrMTkwMCwgdG0tPnRtX21vbisxLCB0bS0+dG1fbWRheSwKIAkJICAgICAgdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMpOwogfQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQURCX0NVREEKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGN1ZGFfZ2V0X3RpbWUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYwppbmRleCAyODBlZTg4Li5hNzg5YmY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3lzdGVtLWJ1cy5jCkBAIC03NjIsNyArNzYyLDcgQEAKIAl9OwogCiAJZGV2LT5jb3JlLmFyY2hkYXRhLm9mX25vZGUgPSBOVUxMOwotCWRldi0+Y29yZS5hcmNoZGF0YS5udW1hX25vZGUgPSAwOworCXNldF9kZXZfbm9kZSgmZGV2LT5jb3JlLCAwKTsKIAogCXByX2RlYnVnKCIlczolZCBhZGQgJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgZGV2LT5jb3JlLmJ1c19pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9jbW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9jbW0uYwppbmRleCAzOGZlMzJhLi41Y2Q0ZDI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvY21tLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2NtbS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAkJCW5wYSA9IChzdHJ1Y3QgY21tX3BhZ2VfYXJyYXkgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAogCQkJCQkJCQkgICAgICAgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MpOwogCQkJaWYgKCFucGEpIHsKLQkJCQlwcl9pbmZvKCIlczogQ2FuIG5vdCBhbGxvY2F0ZSBuZXcgcGFnZSBsaXN0XG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCXByX2luZm8oIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldyBwYWdlIGxpc3RcbiIsIF9fZnVuY19fKTsKIAkJCQlmcmVlX3BhZ2UoYWRkcik7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJfQogCiAJCWlmICgocmMgPSBwbHBhcl9wYWdlX3NldF9sb2FuZWQoX19wYShhZGRyKSkpKSB7Ci0JCQlwcl9lcnIoIiVzOiBDYW4gbm90IHNldCBwYWdlIHRvIGxvYW5lZC4gcmM9JWxkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJCXByX2VycigiJXM6IENhbiBub3Qgc2V0IHBhZ2UgdG8gbG9hbmVkLiByYz0lbGRcbiIsIF9fZnVuY19fLCByYyk7CiAJCQlzcGluX3VubG9jaygmY21tX2xvY2spOwogCQkJZnJlZV9wYWdlKGFkZHIpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwppbmRleCA4YzFjYTQ3Li4wYWQ1NmZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAlyZXR1cm4gIiI7CiB9CiAKLSNpZmRlZiBERUJVRworI2lmIDAKIHN0YXRpYyB2b2lkIHByaW50X2RldmljZV9ub2RlX3RyZWUoc3RydWN0IHBjaV9kbiAqcGRuLCBpbnQgZGVudCkKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMKaW5kZXggYTFhMzY4ZC4uMTQwZDAyYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMKQEAgLTIxLDcgKzIxLDcgQEAKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKIAlpbnQgcmV0OwogCi0Jc3RhcnRfcGZuID0gYmFzZSA+PiBQRk5fU0VDVElPTl9TSElGVDsKKwlzdGFydF9wZm4gPSBiYXNlID4+IFBBR0VfU0hJRlQ7CiAJem9uZSA9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmVjb25maWcuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCmluZGV4IDc2MzdiZDMuLmM1OTFhMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCkBAIC00NjYsMTEgKzQ2NiwxMSBAQAogCQllbHNlCiAJCQlhY3Rpb24gPSBQU0VSSUVTX0RSQ09ORl9NRU1fUkVNT1ZFOwogCi0JCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJnBTZXJpZXNfcmVjb25maWdfY2hhaW4sCi0JCQkJCSAgICAgYWN0aW9uLCB2YWx1ZSk7CisJCXJjID0gYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmcFNlcmllc19yZWNvbmZpZ19jaGFpbiwKKwkJCQkJCSAgYWN0aW9uLCB2YWx1ZSk7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXNkLmMKaW5kZXggYzlmZmQ4Yy4uZjRlNTViZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXNkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXNkLmMKQEAgLTI5NSwxOSArMjk1LDI5IEBACiAJaWYgKCF0bXApCiAJCXJldHVybiAtRU5PTUVNOwogCi0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRhc2RfbG9nX2xvY2ssIHMpOwogCS8qIGlmIGl0J3MgMCwgdGhlbiB3ZSBrbm93IHdlIGdvdCB0aGUgbGFzdCBvbmUgKHRoZSBvbmUgaW4gTlZSQU0pICovCi0JaWYgKHJ0YXNfbG9nX3NpemUgPT0gMCAmJiBsb2dnaW5nX2VuYWJsZWQpCisJd2hpbGUgKHJ0YXNfbG9nX3NpemUgPT0gMCkgeworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKKwkJCWVycm9yID0gLUVBR0FJTjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKCFsb2dnaW5nX2VuYWJsZWQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKKwkJCWVycm9yID0gLUVOT0RBVEE7CisJCQlnb3RvIG91dDsKKwkJfQogCQludnJhbV9jbGVhcl9lcnJvcl9sb2coKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGFzZF9sb2dfbG9jaywgcyk7CiAKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRhc2RfbG9nX2xvY2ssIHMpOworCQllcnJvciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShydGFzX2xvZ193YWl0LCBydGFzX2xvZ19zaXplKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXQ7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZydGFzZF9sb2dfbG9jaywgcyk7CisJfQogCi0JZXJyb3IgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocnRhc19sb2dfd2FpdCwgcnRhc19sb2dfc2l6ZSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZydGFzZF9sb2dfbG9jaywgcyk7CiAJb2Zmc2V0ID0gcnRhc19lcnJvcl9sb2dfYnVmZmVyX21heCAqIChydGFzX2xvZ19zdGFydCAmIExPR19OVU1CRVJfTUFTSyk7CiAJbWVtY3B5KHRtcCwgJnJ0YXNfbG9nX2J1ZltvZmZzZXRdLCBjb3VudCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKaW5kZXggN2IwMWQ2Ny4uZWMzNDE3MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgotI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwppbmRleCA5ZDhmOGM4Li5lMDBmOTZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSAieGljcy5oIgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTQ5LDYgKzQ4LDcgQEAKIAogI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCiAjaW5jbHVkZSAicHNlcmllcy5oIgorI2luY2x1ZGUgInhpY3MuaCIKIAogCiAvKgpAQCAtMTA1LDM2ICsxMDUsNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1hJQ1MKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfeGljc19kb19tZXNzYWdlKGludCBjcHUsIGludCBtc2cpCi17Ci0Jc2V0X2JpdChtc2csICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpOwotCW1iKCk7Ci0JeGljc19jYXVzZV9JUEkoY3B1KTsKLX0KLQotc3RhdGljIHZvaWQgc21wX3hpY3NfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAodGFyZ2V0IDwgTlJfQ1BVUykgewotCQlzbXBfeGljc19kb19tZXNzYWdlKHRhcmdldCwgbXNnKTsKLQl9IGVsc2UgewotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJCWlmICh0YXJnZXQgPT0gTVNHX0FMTF9CVVRfU0VMRgotCQkJICAgICYmIGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJCWNvbnRpbnVlOwotCQkJc21wX3hpY3NfZG9fbWVzc2FnZShpLCBtc2cpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzbXBfeGljc19wcm9iZSh2b2lkKQotewotCXhpY3NfcmVxdWVzdF9JUElzKCk7Ci0KLQlyZXR1cm4gY3B1c193ZWlnaHQoY3B1X3Bvc3NpYmxlX21hcCk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfeGljc19zZXR1cF9jcHUoaW50IGNwdSkKIHsKIAlpZiAoY3B1ICE9IGJvb3RfY3B1aWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwppbmRleCAwZmM4MzBmLi5lMTkwNDc3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKQEAgLTksMzIgKzksMzAgQEAKICAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KIAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KICNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vaTgyNTkuaD4KIAogI2luY2x1ZGUgInhpY3MuaCIKICNpbmNsdWRlICJwbHBhcl93cmFwcGVycy5oIgogCitzdGF0aWMgc3RydWN0IGlycV9ob3N0ICp4aWNzX2hvc3Q7CisKICNkZWZpbmUgWElDU19JUEkJCTIKICNkZWZpbmUgWElDU19JUlFfU1BVUklPVVMJMAogCkBAIC00Nyw2ICs0NSwyMCBAQAogICovCiAjZGVmaW5lIElQSV9QUklPUklUWQkJNAogCitzdGF0aWMgdW5zaWduZWQgaW50IGRlZmF1bHRfc2VydmVyID0gMHhGRjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9kaXN0cmliX3NlcnZlciA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IGludGVycnVwdF9zZXJ2ZXJfc2l6ZSA9IDg7CisKKy8qIFJUQVMgc2VydmljZSB0b2tlbnMgKi8KK3N0YXRpYyBpbnQgaWJtX2dldF94aXZlOworc3RhdGljIGludCBpYm1fc2V0X3hpdmU7CitzdGF0aWMgaW50IGlibV9pbnRfb247CitzdGF0aWMgaW50IGlibV9pbnRfb2ZmOworCisKKy8qIERpcmVjdCBoYXJkd2FyZSBsb3cgbGV2ZWwgYWNjZXNzb3JzICovCisKKy8qIFRoZSBwYXJ0IG9mIHRoZSBpbnRlcnJ1cHQgcHJlc2VudGF0aW9uIGxheWVyIHRoYXQgd2UgY2FyZSBhYm91dCAqLwogc3RydWN0IHhpY3NfaXBsIHsKIAl1bmlvbiB7CiAJCXUzMiB3b3JkOwpAQCAtNjUsMjcgKzc3LDYgQEAKIAogc3RhdGljIHN0cnVjdCB4aWNzX2lwbCBfX2lvbWVtICp4aWNzX3Blcl9jcHVbTlJfQ1BVU107CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9zZXJ2ZXIgPSAweEZGOwotc3RhdGljIHVuc2lnbmVkIGludCBkZWZhdWx0X2Rpc3RyaWJfc2VydmVyID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3NlcnZlcl9zaXplID0gODsKLQotc3RhdGljIHN0cnVjdCBpcnFfaG9zdCAqeGljc19ob3N0OwotCi0vKgotICogWElDUyBvbmx5IGhhcyBhIHNpbmdsZSBJUEksIHNvIGVuY29kZSB0aGUgbWVzc2FnZXMgcGVyIENQVQotICovCi1zdHJ1Y3QgeGljc19pcGlfc3RydWN0IHhpY3NfaXBpX21lc3NhZ2VbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKLQotLyogUlRBUyBzZXJ2aWNlIHRva2VucyAqLwotc3RhdGljIGludCBpYm1fZ2V0X3hpdmU7Ci1zdGF0aWMgaW50IGlibV9zZXRfeGl2ZTsKLXN0YXRpYyBpbnQgaWJtX2ludF9vbjsKLXN0YXRpYyBpbnQgaWJtX2ludF9vZmY7Ci0KLQotLyogRGlyZWN0IEhXIGxvdyBsZXZlbCBhY2Nlc3NvcnMgKi8KLQotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkaXJlY3RfeGlycl9pbmZvX2dldCh2b2lkKQogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC05Myw3ICs4NCw3IEBACiAJcmV0dXJuIGluX2JlMzIoJnhpY3NfcGVyX2NwdVtjcHVdLT54aXJyLndvcmQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlyZWN0X3hpcnJfaW5mb19zZXQoaW50IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIGRpcmVjdF94aXJyX2luZm9fc2V0KHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCkBAIC0xMTUsNyArMTA2LDYgQEAKIAogLyogTFBBUiBsb3cgbGV2ZWwgYWNjZXNzb3JzICovCiAKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbHBhcl94aXJyX2luZm9fZ2V0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBscGFyX3JjOwpAQCAtMTI3LDE1ICsxMTcsMTQgQEAKIAlyZXR1cm4gKHVuc2lnbmVkIGludClyZXR1cm5fdmFsdWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBscGFyX3hpcnJfaW5mb19zZXQoaW50IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIGxwYXJfeGlycl9pbmZvX3NldCh1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJdW5zaWduZWQgbG9uZyBscGFyX3JjOwotCXVuc2lnbmVkIGxvbmcgdmFsNjQgPSB2YWx1ZSAmIDB4ZmZmZmZmZmY7CiAKLQlscGFyX3JjID0gcGxwYXJfZW9pKHZhbDY0KTsKKwlscGFyX3JjID0gcGxwYXJfZW9pKHZhbHVlKTsKIAlpZiAobHBhcl9yYyAhPSBIX1NVQ0NFU1MpCi0JCXBhbmljKCJiYWQgcmV0dXJuIGNvZGUgRU9JIC0gcmMgPSAlbGQsIHZhbHVlPSVseFxuIiwgbHBhcl9yYywKLQkJICAgICAgdmFsNjQpOworCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIEVPSSAtIHJjID0gJWxkLCB2YWx1ZT0leFxuIiwgbHBhcl9yYywKKwkJICAgICAgdmFsdWUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbHBhcl9jcHByX2luZm8odTggdmFsdWUpCkBAIC0xNTcsNDggKzE0Niw3IEBACiB9CiAKIAotLyogSGlnaCBsZXZlbCBoYW5kbGVycyBhbmQgaW5pdCBjb2RlICovCi0KLXN0YXRpYyB2b2lkIHhpY3NfdXBkYXRlX2lycV9zZXJ2ZXJzKHZvaWQpCi17Ci0JaW50IGksIGo7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQl1MzIgaWxlbjsKLQljb25zdCB1MzIgKmlyZWcsICppc2l6ZTsKLQl1MzIgaGNwdWlkOwotCi0JLyogRmluZCB0aGUgc2VydmVyIG51bWJlcnMgZm9yIHRoZSBib290IGNwdS4gKi8KLQlucCA9IG9mX2dldF9jcHVfbm9kZShib290X2NwdWlkLCBOVUxMKTsKLQlCVUdfT04oIW5wKTsKLQotCWlyZWcgPSBvZl9nZXRfcHJvcGVydHkobnAsICJpYm0scHBjLWludGVycnVwdC1nc2VydmVyI3MiLCAmaWxlbik7Ci0JaWYgKCFpcmVnKSB7Ci0JCW9mX25vZGVfcHV0KG5wKTsKLQkJcmV0dXJuOwotCX0KLQotCWkgPSBpbGVuIC8gc2l6ZW9mKGludCk7Ci0JaGNwdWlkID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChib290X2NwdWlkKTsKLQotCS8qIEdsb2JhbCBpbnRlcnJ1cHQgZGlzdHJpYnV0aW9uIHNlcnZlciBpcyBzcGVjaWZpZWQgaW4gdGhlIGxhc3QKLQkgKiBlbnRyeSBvZiAiaWJtLHBwYy1pbnRlcnJ1cHQtZ3NlcnZlciNzIiBwcm9wZXJ0eS4gR2V0IHRoZSBsYXN0Ci0JICogZW50cnkgZm9tIHRoaXMgcHJvcGVydHkgZm9yIGN1cnJlbnQgYm9vdCBjcHUgaWQgYW5kIHVzZSBpdCBhcwotCSAqIGRlZmF1bHQgZGlzdHJpYnV0aW9uIHNlcnZlcgotCSAqLwotCWZvciAoaiA9IDA7IGogPCBpOyBqICs9IDIpIHsKLQkJaWYgKGlyZWdbal0gPT0gaGNwdWlkKSB7Ci0JCQlkZWZhdWx0X3NlcnZlciA9IGhjcHVpZDsKLQkJCWRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIgPSBpcmVnW2orMV07Ci0KLQkJCWlzaXplID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLAotCQkJCQkiaWJtLGludGVycnVwdC1zZXJ2ZXIjLXNpemUiLCBOVUxMKTsKLQkJCWlmIChpc2l6ZSkKLQkJCQlpbnRlcnJ1cHRfc2VydmVyX3NpemUgPSAqaXNpemU7Ci0JCX0KLQl9Ci0KLQlvZl9ub2RlX3B1dChucCk7Ci19CisvKiBJbnRlcmZhY2UgdG8gZ2VuZXJpYyBpcnEgc3Vic3lzdGVtICovCiAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IGdldF9pcnFfc2VydmVyKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgc3RyaWN0X2NoZWNrKQpAQCAtMjA4LDkgKzE1Niw2IEBACiAJY3B1bWFza190IGNwdW1hc2sgPSBpcnFfZGVzY1t2aXJxXS5hZmZpbml0eTsKIAljcHVtYXNrX3QgdG1wID0gQ1BVX01BU0tfTk9ORTsKIAotCWlmICghIGNwdV9pc3NldChkZWZhdWx0X3NlcnZlciwgY3B1X29ubGluZV9tYXApKQotCQl4aWNzX3VwZGF0ZV9pcnFfc2VydmVycygpOwotCiAJaWYgKCFkaXN0cmlidXRlX2lycXMpCiAJCXJldHVybiBkZWZhdWx0X3NlcnZlcjsKIApAQCAtMjM4LDcgKzE4Myw2IEBACiB9CiAjZW5kaWYKIAotCiBzdGF0aWMgdm9pZCB4aWNzX3VubWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJdW5zaWduZWQgaW50IGlycTsKQEAgLTI1NywyMSArMjAxLDI4IEBACiAJY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX3NldF94aXZlLCAzLCAxLCBOVUxMLCBpcnEsIHNlcnZlciwKIAkJCQlERUZBVUxUX1BSSU9SSVRZKTsKIAlpZiAoY2FsbF9zdGF0dXMgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgInhpY3NfZW5hYmxlX2lycTogaXJxPSV1OiBpYm1fc2V0X3hpdmUgIgotCQkgICAgICAgInJldHVybmVkICVkXG4iLCBpcnEsIGNhbGxfc3RhdHVzKTsKLQkJcHJpbnRrKCJzZXRfeGl2ZSAleCwgc2VydmVyICV4XG4iLCBpYm1fc2V0X3hpdmUsIHNlcnZlcik7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzOiBpYm1fc2V0X3hpdmUgaXJxICV1IHNlcnZlciAleCByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBpcnEsIHNlcnZlciwgY2FsbF9zdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCiAJLyogTm93IHVubWFzayB0aGUgaW50ZXJydXB0IChvZnRlbiBhIG5vLW9wKSAqLwogCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKGlibV9pbnRfb24sIDEsIDEsIE5VTEwsIGlycSk7CiAJaWYgKGNhbGxfc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4aWNzX2VuYWJsZV9pcnE6IGlycT0ldTogaWJtX2ludF9vbiAiCi0JCSAgICAgICAicmV0dXJuZWQgJWRcbiIsIGlycSwgY2FsbF9zdGF0dXMpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpYm1faW50X29uIGlycT0ldSByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBpcnEsIGNhbGxfc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX3N0YXJ0dXAodW5zaWduZWQgaW50IHZpcnEpCit7CisJLyogdW5tYXNrIGl0ICovCisJeGljc191bm1hc2tfaXJxKHZpcnEpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCB4aWNzX21hc2tfcmVhbF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlpbnQgY2FsbF9zdGF0dXM7CkBAIC0yODEsOCArMjMyLDggQEAKIAogCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKGlibV9pbnRfb2ZmLCAxLCAxLCBOVUxMLCBpcnEpOwogCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGljc19kaXNhYmxlX3JlYWxfaXJxOiBpcnE9JXU6ICIKLQkJICAgICAgICJpYm1faW50X29mZiByZXR1cm5lZCAlZFxuIiwgaXJxLCBjYWxsX3N0YXR1cyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlibV9pbnRfb2ZmIGlycT0ldSByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBpcnEsIGNhbGxfc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjkwLDggKzI0MSw4IEBACiAJY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX3NldF94aXZlLCAzLCAxLCBOVUxMLCBpcnEsCiAJCQkJZGVmYXVsdF9zZXJ2ZXIsIDB4ZmYpOwogCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGljc19kaXNhYmxlX2lycTogaXJxPSV1OiBpYm1fc2V0X3hpdmUoMHhmZikiCi0JCSAgICAgICAiIHJldHVybmVkICVkXG4iLCBpcnEsIGNhbGxfc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtX3NldF94aXZlKDB4ZmYpIGlycT0ldSByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBpcnEsIGNhbGxfc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIH0KQEAgLTMwOCwxNyArMjU5LDYxIEBACiAJeGljc19tYXNrX3JlYWxfaXJxKGlycSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgeGljc19zdGFydHVwKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgeGljc19tYXNrX3Vua25vd25fdmVjKHVuc2lnbmVkIGludCB2ZWMpCiB7CisJcHJpbnRrKEtFUk5fRVJSICJJbnRlcnJ1cHQgJXUgKHJlYWwpIGlzIGludmFsaWQsIGRpc2FibGluZyBpdC5cbiIsIHZlYyk7CisJeGljc19tYXNrX3JlYWxfaXJxKHZlYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhpY3NfeGlycl92ZWN0b3IodW5zaWduZWQgaW50IHhpcnIpCit7CisJLyoKKwkgKiBUaGUgdG9wIGJ5dGUgaXMgdGhlIG9sZCBjcHByLCB0byBiZSByZXN0b3JlZCBvbiBFT0kuCisJICogVGhlIHJlbWFpbmluZyAyNCBiaXRzIGFyZSB0aGUgdmVjdG9yLgorCSAqLworCXJldHVybiB4aXJyICYgMHgwMGZmZmZmZjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX2dldF9pcnFfZGlyZWN0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHhpcnIgPSBkaXJlY3RfeGlycl9pbmZvX2dldCgpOworCXVuc2lnbmVkIGludCB2ZWMgPSB4aWNzX3hpcnJfdmVjdG9yKHhpcnIpOwogCXVuc2lnbmVkIGludCBpcnE7CiAKLQkvKiBmb3JjZSBhIHJldmVyc2UgbWFwcGluZyBvZiB0aGUgaW50ZXJydXB0IHNvIGl0IGdldHMgaW4gdGhlIGNhY2hlICovCi0JaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxOwotCWlycV9yYWRpeF9yZXZtYXAoeGljc19ob3N0LCBpcnEpOworCWlmICh2ZWMgPT0gWElDU19JUlFfU1BVUklPVVMpCisJCXJldHVybiBOT19JUlE7CiAKLQkvKiB1bm1hc2sgaXQgKi8KLQl4aWNzX3VubWFza19pcnEodmlycSk7Ci0JcmV0dXJuIDA7CisJaXJxID0gaXJxX3JhZGl4X3Jldm1hcF9sb29rdXAoeGljc19ob3N0LCB2ZWMpOworCWlmIChsaWtlbHkoaXJxICE9IE5PX0lSUSkpCisJCXJldHVybiBpcnE7CisKKwkvKiBXZSBkb24ndCBoYXZlIGEgbGludXggbWFwcGluZywgc28gaGF2ZSBydGFzIG1hc2sgaXQuICovCisJeGljc19tYXNrX3Vua25vd25fdmVjKHZlYyk7CisKKwkvKiBXZSBtaWdodCBsZWFybiBhYm91dCBpdCBsYXRlciwgc28gRU9JIGl0ICovCisJZGlyZWN0X3hpcnJfaW5mb19zZXQoeGlycik7CisJcmV0dXJuIE5PX0lSUTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX2dldF9pcnFfbHBhcih2b2lkKQoreworCXVuc2lnbmVkIGludCB4aXJyID0gbHBhcl94aXJyX2luZm9fZ2V0KCk7CisJdW5zaWduZWQgaW50IHZlYyA9IHhpY3NfeGlycl92ZWN0b3IoeGlycik7CisJdW5zaWduZWQgaW50IGlycTsKKworCWlmICh2ZWMgPT0gWElDU19JUlFfU1BVUklPVVMpCisJCXJldHVybiBOT19JUlE7CisKKwlpcnEgPSBpcnFfcmFkaXhfcmV2bWFwX2xvb2t1cCh4aWNzX2hvc3QsIHZlYyk7CisJaWYgKGxpa2VseShpcnEgIT0gTk9fSVJRKSkKKwkJcmV0dXJuIGlycTsKKworCS8qIFdlIGRvbid0IGhhdmUgYSBsaW51eCBtYXBwaW5nLCBzbyBoYXZlIFJUQVMgbWFzayBpdC4gKi8KKwl4aWNzX21hc2tfdW5rbm93bl92ZWModmVjKTsKKworCS8qIFdlIG1pZ2h0IGxlYXJuIGFib3V0IGl0IGxhdGVyLCBzbyBFT0kgaXQgKi8KKwlscGFyX3hpcnJfaW5mb19zZXQoeGlycik7CisJcmV0dXJuIE5PX0lSUTsKIH0KIAogc3RhdGljIHZvaWQgeGljc19lb2lfZGlyZWN0KHVuc2lnbmVkIGludCB2aXJxKQpAQCAtMzI5LDcgKzMyNCw2IEBACiAJZGlyZWN0X3hpcnJfaW5mb19zZXQoKDB4ZmYgPDwgMjQpIHwgaXJxKTsKIH0KIAotCiBzdGF0aWMgdm9pZCB4aWNzX2VvaV9scGFyKHVuc2lnbmVkIGludCB2aXJxKQogewogCXVuc2lnbmVkIGludCBpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbdmlycV0uaHdpcnE7CkBAIC0zMzgsMTA0ICszMzIsNiBAQAogCWxwYXJfeGlycl9pbmZvX3NldCgoMHhmZiA8PCAyNCkgfCBpcnEpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4aWNzX3JlbWFwX2lycSh1bnNpZ25lZCBpbnQgdmVjKQotewotCXVuc2lnbmVkIGludCBpcnE7Ci0KLQl2ZWMgJj0gMHgwMGZmZmZmZjsKLQotCWlmICh2ZWMgPT0gWElDU19JUlFfU1BVUklPVVMpCi0JCXJldHVybiBOT19JUlE7Ci0JaXJxID0gaXJxX3JhZGl4X3Jldm1hcCh4aWNzX2hvc3QsIHZlYyk7Ci0JaWYgKGxpa2VseShpcnEgIT0gTk9fSVJRKSkKLQkJcmV0dXJuIGlycTsKLQotCXByaW50ayhLRVJOX0VSUiAiSW50ZXJydXB0ICV1IChyZWFsKSBpcyBpbnZhbGlkLCIKLQkgICAgICAgIiBkaXNhYmxpbmcgaXQuXG4iLCB2ZWMpOwotCXhpY3NfbWFza19yZWFsX2lycSh2ZWMpOwotCXJldHVybiBOT19JUlE7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgeGljc19nZXRfaXJxX2RpcmVjdCh2b2lkKQotewotCXJldHVybiB4aWNzX3JlbWFwX2lycShkaXJlY3RfeGlycl9pbmZvX2dldCgpKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX2dldF9pcnFfbHBhcih2b2lkKQotewotCXJldHVybiB4aWNzX3JlbWFwX2lycShscGFyX3hpcnJfaW5mb19nZXQoKSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCB4aWNzX2lwaV9kaXNwYXRjaChpbnQgY3B1KQotewotCVdBUk5fT04oY3B1X2lzX29mZmxpbmUoY3B1KSk7Ci0KLQl3aGlsZSAoeGljc19pcGlfbWVzc2FnZVtjcHVdLnZhbHVlKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUFBDX01TR19DQUxMX0ZVTkNUSU9OLAotCQkJCSAgICAgICAmeGljc19pcGlfbWVzc2FnZVtjcHVdLnZhbHVlKSkgewotCQkJbWIoKTsKLQkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNUSU9OKTsKLQkJfQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfUkVTQ0hFRFVMRSwKLQkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKLQkJCW1iKCk7Ci0JCQlzbXBfbWVzc2FnZV9yZWN2KFBQQ19NU0dfUkVTQ0hFRFVMRSk7Ci0JCX0KLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ19TSU5HTEUsCi0JCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7Ci0JCQltYigpOwotCQkJc21wX21lc3NhZ2VfcmVjdihQUENfTVNHX0NBTExfRlVOQ19TSU5HTEUpOwotCQl9Ci0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdHRVIpIHx8IGRlZmluZWQoQ09ORklHX0tFWEVDKQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfREVCVUdHRVJfQlJFQUssCi0JCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7Ci0JCQltYigpOwotCQkJc21wX21lc3NhZ2VfcmVjdihQUENfTVNHX0RFQlVHR0VSX0JSRUFLKTsKLQkJfQotI2VuZGlmCi0JfQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHhpY3NfaXBpX2FjdGlvbl9kaXJlY3QoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlkaXJlY3RfcWlycl9pbmZvKGNwdSwgMHhmZik7Ci0KLQlyZXR1cm4geGljc19pcGlfZGlzcGF0Y2goY3B1KTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHhpY3NfaXBpX2FjdGlvbl9scGFyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JbHBhcl9xaXJyX2luZm8oY3B1LCAweGZmKTsKLQotCXJldHVybiB4aWNzX2lwaV9kaXNwYXRjaChjcHUpOwotfQotCi12b2lkIHhpY3NfY2F1c2VfSVBJKGludCBjcHUpCi17Ci0JaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCi0JCWxwYXJfcWlycl9pbmZvKGNwdSwgSVBJX1BSSU9SSVRZKTsKLQllbHNlCi0JCWRpcmVjdF9xaXJyX2luZm8oY3B1LCBJUElfUFJJT1JJVFkpOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCi1zdGF0aWMgdm9pZCB4aWNzX3NldF9jcHVfcHJpb3JpdHkodW5zaWduZWQgY2hhciBjcHByKQotewotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQlscGFyX2NwcHJfaW5mbyhjcHByKTsKLQllbHNlCi0JCWRpcmVjdF9jcHByX2luZm8oY3Bwcik7Ci0JaW9zeW5jKCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHhpY3Nfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCB2aXJxLCBjcHVtYXNrX3QgY3B1bWFzaykKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwpAQCAtNDUwLDggKzM0Niw4IEBACiAJc3RhdHVzID0gcnRhc19jYWxsKGlibV9nZXRfeGl2ZSwgMSwgMywgeGljc19zdGF0dXMsIGlycSk7CiAKIAlpZiAoc3RhdHVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGljc19zZXRfYWZmaW5pdHk6IGlycT0ldSBpYm0sZ2V0LXhpdmUgIgotCQkgICAgICAgInJldHVybnMgJWRcbiIsIGlycSwgc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtLGdldC14aXZlIGlycT0ldSByZXR1cm5zICVkXG4iLAorCQkJX19mdW5jX18sIGlycSwgc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDYzLDggKzM1OSw5IEBACiAJaWYgKGlycV9zZXJ2ZXIgPT0gLTEpIHsKIAkJY2hhciBjcHVsaXN0WzEyOF07CiAJCWNwdW1hc2tfc2NucHJpbnRmKGNwdWxpc3QsIHNpemVvZihjcHVsaXN0KSwgY3B1bWFzayk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInhpY3Nfc2V0X2FmZmluaXR5OiBObyBvbmxpbmUgY3B1cyBpbiAiCi0JCQkJInRoZSBtYXNrICVzIGZvciBpcnEgJWRcbiIsIGNwdWxpc3QsIHZpcnEpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiJXM6IE5vIG9ubGluZSBjcHVzIGluIHRoZSBtYXNrICVzIGZvciBpcnEgJWRcbiIsCisJCQlfX2Z1bmNfXywgY3B1bGlzdCwgdmlycSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQ3MiwyOCArMzY5LDEyIEBACiAJCQkJaXJxLCBpcnFfc2VydmVyLCB4aWNzX3N0YXR1c1sxXSk7CiAKIAlpZiAoc3RhdHVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGljc19zZXRfYWZmaW5pdHk6IGlycT0ldSBpYm0sc2V0LXhpdmUgIgotCQkgICAgICAgInJldHVybnMgJWRcbiIsIGlycSwgc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtLHNldC14aXZlIGlycT0ldSByZXR1cm5zICVkXG4iLAorCQkJX19mdW5jX18sIGlycSwgc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIH0KIAotdm9pZCB4aWNzX3NldHVwX2NwdSh2b2lkKQotewotCXhpY3Nfc2V0X2NwdV9wcmlvcml0eSgweGZmKTsKLQotCS8qCi0JICogUHV0IHRoZSBjYWxsaW5nIHByb2Nlc3NvciBpbnRvIHRoZSBHSVEuICBUaGlzIGlzIHJlYWxseSBvbmx5Ci0JICogbmVjZXNzYXJ5IGZyb20gYSBzZWNvbmRhcnkgdGhyZWFkIGFzIHRoZSBPRiBzdGFydC1jcHUgaW50ZXJmYWNlCi0JICogcGVyZm9ybXMgdGhpcyBmdW5jdGlvbiBmb3IgdXMgb24gcHJpbWFyeSB0aHJlYWRzLgotCSAqCi0JICogWFhYOiB1bmRvIG9mIHRlYXJkb3duIG9uIGtleGVjIG5lZWRzIHRoaXMgdG9vLCBhcyBtYXkgaG90cGx1ZwotCSAqLwotCXJ0YXNfc2V0X2luZGljYXRvcl9mYXN0KEdMT0JBTF9JTlRFUlJVUFRfUVVFVUUsCi0JCSgxVUwgPDwgaW50ZXJydXB0X3NlcnZlcl9zaXplKSAtIDEgLSBkZWZhdWx0X2Rpc3RyaWJfc2VydmVyLCAxKTsKLX0KLQotCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpY3NfcGljX2RpcmVjdCA9IHsKIAkudHlwZW5hbWUgPSAiIFhJQ1MgICAgICIsCiAJLnN0YXJ0dXAgPSB4aWNzX3N0YXJ0dXAsCkBAIC01MDMsNyArMzg0LDYgQEAKIAkuc2V0X2FmZmluaXR5ID0geGljc19zZXRfYWZmaW5pdHkKIH07CiAKLQogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4aWNzX3BpY19scGFyID0gewogCS50eXBlbmFtZSA9ICIgWElDUyAgICAgIiwKIAkuc3RhcnR1cCA9IHhpY3Nfc3RhcnR1cCwKQEAgLTUxMyw2ICszOTMsOSBAQAogCS5zZXRfYWZmaW5pdHkgPSB4aWNzX3NldF9hZmZpbml0eQogfTsKIAorCisvKiBJbnRlcmZhY2UgdG8gYXJjaCBpcnEgY29udHJvbGxlciBzdWJzeXN0ZW0gbGF5ZXIgKi8KKwogLyogUG9pbnRzIHRvIHRoZSBpcnFfY2hpcCB3ZSdyZSBhY3R1YWxseSB1c2luZyAqLwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCAqeGljc19pcnFfY2hpcDsKIApAQCAtNTMwLDYgKzQxMyw5IEBACiB7CiAJcHJfZGVidWcoInhpY3M6IG1hcCB2aXJxICVkLCBod2lycSAweCVseFxuIiwgdmlycSwgaHcpOwogCisJLyogSW5zZXJ0IHRoZSBpbnRlcnJ1cHQgbWFwcGluZyBpbnRvIHRoZSByYWRpeCB0cmVlIGZvciBmYXN0IGxvb2t1cCAqLworCWlycV9yYWRpeF9yZXZtYXBfaW5zZXJ0KHhpY3NfaG9zdCwgdmlycSwgaHcpOworCiAJZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCB4aWNzX2lycV9jaGlwLCBoYW5kbGVfZmFzdGVvaV9pcnEpOwogCXJldHVybiAwOwpAQCAtNTY5LDEwICs0NTUsMTY5IEBACiAJaXJxX3NldF9kZWZhdWx0X2hvc3QoeGljc19ob3N0KTsKIH0KIAorCisvKiBJbnRlci1wcm9jZXNzb3IgaW50ZXJydXB0IHN1cHBvcnQgKi8KKworI2lmZGVmIENPTkZJR19TTVAKKy8qCisgKiBYSUNTIG9ubHkgaGFzIGEgc2luZ2xlIElQSSwgc28gZW5jb2RlIHRoZSBtZXNzYWdlcyBwZXIgQ1BVCisgKi8KK3N0cnVjdCB4aWNzX2lwaV9zdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlOworCX0gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitzdGF0aWMgc3RydWN0IHhpY3NfaXBpX3N0cnVjdCB4aWNzX2lwaV9tZXNzYWdlW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfeGljc19kb19tZXNzYWdlKGludCBjcHUsIGludCBtc2cpCit7CisJc2V0X2JpdChtc2csICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpOworCW1iKCk7CisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCisJCWxwYXJfcWlycl9pbmZvKGNwdSwgSVBJX1BSSU9SSVRZKTsKKwllbHNlCisJCWRpcmVjdF9xaXJyX2luZm8oY3B1LCBJUElfUFJJT1JJVFkpOworfQorCit2b2lkIHNtcF94aWNzX21lc3NhZ2VfcGFzcyhpbnQgdGFyZ2V0LCBpbnQgbXNnKQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKHRhcmdldCA8IE5SX0NQVVMpIHsKKwkJc21wX3hpY3NfZG9fbWVzc2FnZSh0YXJnZXQsIG1zZyk7CisJfSBlbHNlIHsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCQlpZiAodGFyZ2V0ID09IE1TR19BTExfQlVUX1NFTEYKKwkJCSAgICAmJiBpID09IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCQljb250aW51ZTsKKwkJCXNtcF94aWNzX2RvX21lc3NhZ2UoaSwgbXNnKTsKKwkJfQorCX0KK30KKworc3RhdGljIGlycXJldHVybl90IHhpY3NfaXBpX2Rpc3BhdGNoKGludCBjcHUpCit7CisJV0FSTl9PTihjcHVfaXNfb2ZmbGluZShjcHUpKTsKKworCW1iKCk7CS8qIG9yZGVyIG1taW8gY2xlYXJpbmcgcWlyciAqLworCXdoaWxlICh4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ1RJT04sCisJCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7CisJCQlzbXBfbWVzc2FnZV9yZWN2KFBQQ19NU0dfQ0FMTF9GVU5DVElPTik7CisJCX0KKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX1JFU0NIRURVTEUsCisJCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7CisJCQlzbXBfbWVzc2FnZV9yZWN2KFBQQ19NU0dfUkVTQ0hFRFVMRSk7CisJCX0KKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ19TSU5HTEUsCisJCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7CisJCQlzbXBfbWVzc2FnZV9yZWN2KFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRSk7CisJCX0KKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR0dFUikgfHwgZGVmaW5lZChDT05GSUdfS0VYRUMpCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUFBDX01TR19ERUJVR0dFUl9CUkVBSywKKwkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19ERUJVR0dFUl9CUkVBSyk7CisJCX0KKyNlbmRpZgorCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB4aWNzX2lwaV9hY3Rpb25fZGlyZWN0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJZGlyZWN0X3FpcnJfaW5mbyhjcHUsIDB4ZmYpOworCisJcmV0dXJuIHhpY3NfaXBpX2Rpc3BhdGNoKGNwdSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB4aWNzX2lwaV9hY3Rpb25fbHBhcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWxwYXJfcWlycl9pbmZvKGNwdSwgMHhmZik7CisKKwlyZXR1cm4geGljc19pcGlfZGlzcGF0Y2goY3B1KTsKK30KKworc3RhdGljIHZvaWQgeGljc19yZXF1ZXN0X2lwaSh2b2lkKQoreworCXVuc2lnbmVkIGludCBpcGk7CisJaW50IHJjOworCisJaXBpID0gaXJxX2NyZWF0ZV9tYXBwaW5nKHhpY3NfaG9zdCwgWElDU19JUEkpOworCUJVR19PTihpcGkgPT0gTk9fSVJRKTsKKworCS8qCisJICogSVBJcyBhcmUgbWFya2VkIElSUUZfRElTQUJMRUQgYXMgdGhleSBtdXN0IHJ1biB3aXRoIGlycXMKKwkgKiBkaXNhYmxlZAorCSAqLworCXNldF9pcnFfaGFuZGxlcihpcGksIGhhbmRsZV9wZXJjcHVfaXJxKTsKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKKwkJcmMgPSByZXF1ZXN0X2lycShpcGksIHhpY3NfaXBpX2FjdGlvbl9scGFyLAorCQkJCUlSUUZfRElTQUJMRUR8SVJRRl9QRVJDUFUsICJJUEkiLCBOVUxMKTsKKwllbHNlCisJCXJjID0gcmVxdWVzdF9pcnEoaXBpLCB4aWNzX2lwaV9hY3Rpb25fZGlyZWN0LAorCQkJCUlSUUZfRElTQUJMRUR8SVJRRl9QRVJDUFUsICJJUEkiLCBOVUxMKTsKKwlCVUdfT04ocmMpOworfQorCitpbnQgX19pbml0IHNtcF94aWNzX3Byb2JlKHZvaWQpCit7CisJeGljc19yZXF1ZXN0X2lwaSgpOworCisJcmV0dXJuIGNwdXNfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXApOworfQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisKKy8qIEluaXRpYWxpemF0aW9uICovCisKK3N0YXRpYyB2b2lkIHhpY3NfdXBkYXRlX2lycV9zZXJ2ZXJzKHZvaWQpCit7CisJaW50IGksIGo7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl1MzIgaWxlbjsKKwljb25zdCB1MzIgKmlyZWcsICppc2l6ZTsKKwl1MzIgaGNwdWlkOworCisJLyogRmluZCB0aGUgc2VydmVyIG51bWJlcnMgZm9yIHRoZSBib290IGNwdS4gKi8KKwlucCA9IG9mX2dldF9jcHVfbm9kZShib290X2NwdWlkLCBOVUxMKTsKKwlCVUdfT04oIW5wKTsKKworCWlyZWcgPSBvZl9nZXRfcHJvcGVydHkobnAsICJpYm0scHBjLWludGVycnVwdC1nc2VydmVyI3MiLCAmaWxlbik7CisJaWYgKCFpcmVnKSB7CisJCW9mX25vZGVfcHV0KG5wKTsKKwkJcmV0dXJuOworCX0KKworCWkgPSBpbGVuIC8gc2l6ZW9mKGludCk7CisJaGNwdWlkID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChib290X2NwdWlkKTsKKworCS8qIEdsb2JhbCBpbnRlcnJ1cHQgZGlzdHJpYnV0aW9uIHNlcnZlciBpcyBzcGVjaWZpZWQgaW4gdGhlIGxhc3QKKwkgKiBlbnRyeSBvZiAiaWJtLHBwYy1pbnRlcnJ1cHQtZ3NlcnZlciNzIiBwcm9wZXJ0eS4gR2V0IHRoZSBsYXN0CisJICogZW50cnkgZm9tIHRoaXMgcHJvcGVydHkgZm9yIGN1cnJlbnQgYm9vdCBjcHUgaWQgYW5kIHVzZSBpdCBhcworCSAqIGRlZmF1bHQgZGlzdHJpYnV0aW9uIHNlcnZlcgorCSAqLworCWZvciAoaiA9IDA7IGogPCBpOyBqICs9IDIpIHsKKwkJaWYgKGlyZWdbal0gPT0gaGNwdWlkKSB7CisJCQlkZWZhdWx0X3NlcnZlciA9IGhjcHVpZDsKKwkJCWRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIgPSBpcmVnW2orMV07CisJCX0KKwl9CisKKwkvKiBnZXQgdGhlIGJpdCBzaXplIG9mIHNlcnZlciBudW1iZXJzICovCisJaXNpemUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJpYm0saW50ZXJydXB0LXNlcnZlciMtc2l6ZSIsIE5VTEwpOworCWlmIChpc2l6ZSkKKwkJaW50ZXJydXB0X3NlcnZlcl9zaXplID0gKmlzaXplOworCisJb2Zfbm9kZV9wdXQobnApOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgeGljc19tYXBfb25lX2NwdShpbnQgaHdfaWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLSNpZmRlZiBDT05GSUdfU01QCiAJaW50IGk7CiAKIAkvKiBUaGlzIG1heSBsb29rIGdyb3NzIGJ1dCBpdCdzIGdvb2QgZW5vdWdoIGZvciBub3csIHdlIGRvbid0IHF1aXRlCkBAIC01ODYsMTEgKzYzMSw2IEBACiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0jZWxzZQotCWlmIChod19pZCAhPSAwKQotCQlyZXR1cm47Ci0JeGljc19wZXJfY3B1WzBdID0gaW9yZW1hcChhZGRyLCBzaXplKTsKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB4aWNzX2luaXRfb25lX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCwKQEAgLTY1MiwxNSArNjkyLDE3IEBACiAKIAlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJQb3dlclBDLUV4dGVybmFsLUludGVycnVwdC1QcmVzZW50YXRpb24iKSB7CiAJCWZvdW5kID0gMTsKLQkJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCisJCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKSB7CisJCQlvZl9ub2RlX3B1dChucCk7CiAJCQlicmVhazsKKwkJCX0KIAkJeGljc19pbml0X29uZV9ub2RlKG5wLCAmaW5keCk7CiAJfQogCWlmIChmb3VuZCA9PSAwKQogCQlyZXR1cm47CiAKLQl4aWNzX2luaXRfaG9zdCgpOwogCXhpY3NfdXBkYXRlX2lycV9zZXJ2ZXJzKCk7CisJeGljc19pbml0X2hvc3QoKTsKIAogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQogCQlwcGNfbWQuZ2V0X2lycSA9IHhpY3NfZ2V0X2lycV9scGFyOwpAQCAtNjcyLDMwICs3MTQsMzEgQEAKIAlwcGM2NF9ib290X21zZygweDIxLCAiWElDUyBEb25lIik7CiB9CiAKKy8qIENwdSBzdGFydHVwLCBzaHV0ZG93biwgYW5kIGhvdHBsdWcgKi8KIAotI2lmZGVmIENPTkZJR19TTVAKLXZvaWQgeGljc19yZXF1ZXN0X0lQSXModm9pZCkKK3N0YXRpYyB2b2lkIHhpY3Nfc2V0X2NwdV9wcmlvcml0eSh1bnNpZ25lZCBjaGFyIGNwcHIpCiB7Ci0JdW5zaWduZWQgaW50IGlwaTsKLQlpbnQgcmM7Ci0KLQlpcGkgPSBpcnFfY3JlYXRlX21hcHBpbmcoeGljc19ob3N0LCBYSUNTX0lQSSk7Ci0JQlVHX09OKGlwaSA9PSBOT19JUlEpOwotCi0JLyoKLQkgKiBJUElzIGFyZSBtYXJrZWQgSVJRRl9ESVNBQkxFRCBhcyB0aGV5IG11c3QgcnVuIHdpdGggaXJxcwotCSAqIGRpc2FibGVkCi0JICovCi0Jc2V0X2lycV9oYW5kbGVyKGlwaSwgaGFuZGxlX3BlcmNwdV9pcnEpOwogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQlyYyA9IHJlcXVlc3RfaXJxKGlwaSwgeGljc19pcGlfYWN0aW9uX2xwYXIsIElSUUZfRElTQUJMRUQsCi0JCQkJIklQSSIsIE5VTEwpOworCQlscGFyX2NwcHJfaW5mbyhjcHByKTsKIAllbHNlCi0JCXJjID0gcmVxdWVzdF9pcnEoaXBpLCB4aWNzX2lwaV9hY3Rpb25fZGlyZWN0LCBJUlFGX0RJU0FCTEVELAotCQkJCSJJUEkiLCBOVUxMKTsKLQlCVUdfT04ocmMpOworCQlkaXJlY3RfY3Bwcl9pbmZvKGNwcHIpOworCWlvc3luYygpOwogfQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworLyogSGF2ZSB0aGUgY2FsbGluZyBwcm9jZXNzb3Igam9pbiBvciBsZWF2ZSB0aGUgc3BlY2lmaWVkIGdsb2JhbCBxdWV1ZSAqLworc3RhdGljIHZvaWQgeGljc19zZXRfY3B1X2dpcSh1bnNpZ25lZCBpbnQgZ3NlcnZlciwgdW5zaWduZWQgaW50IGpvaW4pCit7CisJaW50IHN0YXR1cyA9IHJ0YXNfc2V0X2luZGljYXRvcl9mYXN0KEdMT0JBTF9JTlRFUlJVUFRfUVVFVUUsCisJCSgxVUwgPDwgaW50ZXJydXB0X3NlcnZlcl9zaXplKSAtIDEgLSBnc2VydmVyLCBqb2luKTsKKwlXQVJOX09OKHN0YXR1cyA8IDApOworfQorCit2b2lkIHhpY3Nfc2V0dXBfY3B1KHZvaWQpCit7CisJeGljc19zZXRfY3B1X3ByaW9yaXR5KDB4ZmYpOworCisJeGljc19zZXRfY3B1X2dpcShkZWZhdWx0X2Rpc3RyaWJfc2VydmVyLCAxKTsKK30KIAogdm9pZCB4aWNzX3RlYXJkb3duX2NwdSh2b2lkKQogewpAQCAtNzAzLDkgKzc0Niw3IEBACiAKIAl4aWNzX3NldF9jcHVfcHJpb3JpdHkoMCk7CiAKLQkvKgotCSAqIENsZWFyIElQSQotCSAqLworCS8qIENsZWFyIGFueSBwZW5kaW5nIElQSSByZXF1ZXN0ICovCiAJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCiAJCWxwYXJfcWlycl9pbmZvKGNwdSwgMHhmZik7CiAJZWxzZQpAQCAtNzE0LDM0ICs3NTUsMjggQEAKIAogdm9pZCB4aWNzX2tleGVjX3RlYXJkb3duX2NwdShpbnQgc2Vjb25kYXJ5KQogewotCXVuc2lnbmVkIGludCBpcGk7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwotCiAJeGljc190ZWFyZG93bl9jcHUoKTsKIAogCS8qCi0JICogd2UgbmVlZCB0byBFT0kgdGhlIElQSQorCSAqIHdlIHRha2UgdGhlIGlwaSBpcnEgYnV0IGFuZCBuZXZlciByZXR1cm4gc28gd2UKKwkgKiBuZWVkIHRvIEVPSSB0aGUgSVBJLCBidXQgd2FudCB0byBsZWF2ZSBvdXIgcHJpb3JpdHkgMAogCSAqCi0JICogcHJvYmFibHkgbmVlZCB0byBjaGVjayBhbGwgdGhlIG90aGVyIGludGVycnVwdHMgdG9vCisJICogc2hvdWxkIHdlIGNoZWNrIGFsbCB0aGUgb3RoZXIgaW50ZXJydXB0cyB0b28/CiAJICogc2hvdWxkIHdlIGJlIGZsYWdnaW5nIGlkbGUgbG9vcCBpbnN0ZWFkPwogCSAqIG9yIGNyZWF0aW5nIHNvbWUgdGFzayB0byBiZSBzY2hlZHVsZWQ/CiAJICovCiAKLQlpcGkgPSBpcnFfZmluZF9tYXBwaW5nKHhpY3NfaG9zdCwgWElDU19JUEkpOwotCWlmIChpcGkgPT0gWElDU19JUlFfU1BVUklPVVMpCi0JCXJldHVybjsKLQlkZXNjID0gZ2V0X2lycV9kZXNjKGlwaSk7Ci0JaWYgKGRlc2MtPmNoaXAgJiYgZGVzYy0+Y2hpcC0+ZW9pKQotCQlkZXNjLT5jaGlwLT5lb2koaXBpKTsKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKKwkJbHBhcl94aXJyX2luZm9fc2V0KCgweDAwIDw8IDI0KSB8IFhJQ1NfSVBJKTsKKwllbHNlCisJCWRpcmVjdF94aXJyX2luZm9fc2V0KCgweDAwIDw8IDI0KSB8IFhJQ1NfSVBJKTsKIAogCS8qCiAJICogU29tZSBtYWNoaW5lcyBuZWVkIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGNwdSBpbiB0aGUgR0lRLAogCSAqIHNvIGxlYXZlIHRoZSBtYXN0ZXIgY3B1IGluIHRoZSBncm91cC4KIAkgKi8KIAlpZiAoc2Vjb25kYXJ5KQotCQlydGFzX3NldF9pbmRpY2F0b3JfZmFzdChHTE9CQUxfSU5URVJSVVBUX1FVRVVFLAotCQkJCSAgICgxVUwgPDwgaW50ZXJydXB0X3NlcnZlcl9zaXplKSAtIDEgLQotCQkJCSAgIGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDApOworCQl4aWNzX3NldF9jcHVfZ2lxKGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDApOwogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCkBAIC03NDksMTcgKzc4NCwxOCBAQAogLyogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuICovCiB2b2lkIHhpY3NfbWlncmF0ZV9pcnFzX2F3YXkodm9pZCkKIHsKLQlpbnQgc3RhdHVzOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCksIGh3X2NwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXVuc2lnbmVkIGludCBpcnEsIHZpcnE7CiAKKwkvKiBJZiB3ZSB1c2VkIHRvIGJlIHRoZSBkZWZhdWx0IHNlcnZlciwgbW92ZSB0byB0aGUgbmV3ICJib290X2NwdWlkIiAqLworCWlmIChod19jcHUgPT0gZGVmYXVsdF9zZXJ2ZXIpCisJCXhpY3NfdXBkYXRlX2lycV9zZXJ2ZXJzKCk7CisKIAkvKiBSZWplY3QgYW55IGludGVycnVwdCB0aGF0IHdhcyBxdWV1ZWQgdG8gdXMuLi4gKi8KIAl4aWNzX3NldF9jcHVfcHJpb3JpdHkoMCk7CiAKLQkvKiByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGdsb2JhbCBpbnRlcnJ1cHQgcXVldWUgKi8KLQlzdGF0dXMgPSBydGFzX3NldF9pbmRpY2F0b3JfZmFzdChHTE9CQUxfSU5URVJSVVBUX1FVRVVFLAotCQkoMVVMIDw8IGludGVycnVwdF9zZXJ2ZXJfc2l6ZSkgLSAxIC0gZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMCk7Ci0JV0FSTl9PTihzdGF0dXMgPCAwKTsKKwkvKiBSZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGdsb2JhbCBpbnRlcnJ1cHQgcXVldWUgKi8KKwl4aWNzX3NldF9jcHVfZ2lxKGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDApOwogCiAJLyogQWxsb3cgSVBJcyBhZ2Fpbi4uLiAqLwogCXhpY3Nfc2V0X2NwdV9wcmlvcml0eShERUZBVUxUX1BSSU9SSVRZKTsKQEAgLTc2Nyw2ICs4MDMsNyBAQAogCWZvcl9lYWNoX2lycSh2aXJxKSB7CiAJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAkJaW50IHhpY3Nfc3RhdHVzWzJdOworCQlpbnQgc3RhdHVzOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCS8qIFdlIGNhbnQgc2V0IGFmZmluaXR5IG9uIElTQSBpbnRlcnJ1cHRzICovCkBAIC03OTAsOSArODI3LDggQEAKIAogCQlzdGF0dXMgPSBydGFzX2NhbGwoaWJtX2dldF94aXZlLCAxLCAzLCB4aWNzX3N0YXR1cywgaXJxKTsKIAkJaWYgKHN0YXR1cykgewotCQkJcHJpbnRrKEtFUk5fRVJSICJtaWdyYXRlX2lycXNfYXdheTogaXJxPSV1ICIKLQkJCQkJImlibSxnZXQteGl2ZSByZXR1cm5zICVkXG4iLAotCQkJCQl2aXJxLCBzdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtLGdldC14aXZlIGlycT0ldSByZXR1cm5zICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgaXJxLCBzdGF0dXMpOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmgKaW5kZXggMWM1MzIxYS4uZDFkNWE4MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5oCkBAIC0xMiwyMCArMTIsMTIgQEAKICNpZm5kZWYgX1BPV0VSUENfS0VSTkVMX1hJQ1NfSAogI2RlZmluZSBfUE9XRVJQQ19LRVJORUxfWElDU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotCiBleHRlcm4gdm9pZCB4aWNzX2luaXRfSVJRKHZvaWQpOwogZXh0ZXJuIHZvaWQgeGljc19zZXR1cF9jcHUodm9pZCk7CiBleHRlcm4gdm9pZCB4aWNzX3RlYXJkb3duX2NwdSh2b2lkKTsKIGV4dGVybiB2b2lkIHhpY3Nfa2V4ZWNfdGVhcmRvd25fY3B1KGludCBzZWNvbmRhcnkpOwotZXh0ZXJuIHZvaWQgeGljc19jYXVzZV9JUEkoaW50IGNwdSk7Ci1leHRlcm4gIHZvaWQgeGljc19yZXF1ZXN0X0lQSXModm9pZCk7CiBleHRlcm4gdm9pZCB4aWNzX21pZ3JhdGVfaXJxc19hd2F5KHZvaWQpOwotCi1zdHJ1Y3QgeGljc19pcGlfc3RydWN0IHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHZhbHVlOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Ci0KLWV4dGVybiBzdHJ1Y3QgeGljc19pcGlfc3RydWN0IHhpY3NfaXBpX21lc3NhZ2VbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKK2V4dGVybiBpbnQgc21wX3hpY3NfcHJvYmUodm9pZCk7CitleHRlcm4gdm9pZCBzbXBfeGljc19tZXNzYWdlX3Bhc3MoaW50IHRhcmdldCwgaW50IG1zZyk7CiAKICNlbmRpZiAvKiBfUE9XRVJQQ19LRVJORUxfWElDU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L0tjb25maWcKaW5kZXggNzJmYjM1Yi4uMzk2NTgyOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvS2NvbmZpZwpAQCAtNiwzICs2LDkgQEAKIAlib29sCiAJZGVwZW5kcyBvbiBQQ0kgJiYgNHh4CiAJZGVmYXVsdCBuCisKK2NvbmZpZyBQUENfTVNJX0JJVE1BUAorCWJvb2wKKwlkZXBlbmRzIG9uIFBDSV9NU0kKKwlkZWZhdWx0IHkgaWYgTVBJQworCWRlZmF1bHQgeSBpZiBGU0xfUENJCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQppbmRleCBhOTAwNTRiLi5hNDQ3MDlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiBtcGljLW1zaS1vYmotJChDT05GSUdfUENJX01TSSkJKz0gbXBpY19tc2kubyBtcGljX3UzbXNpLm8gbXBpY19wYXNlbWlfbXNpLm8KIG9iai0kKENPTkZJR19NUElDKQkJKz0gbXBpYy5vICQobXBpYy1tc2ktb2JqLXkpCiBmc2wtbXNpLW9iai0kKENPTkZJR19QQ0lfTVNJKQkrPSBmc2xfbXNpLm8KK29iai0kKENPTkZJR19QUENfTVNJX0JJVE1BUCkJKz0gbXNpX2JpdG1hcC5vCiAKIG9iai0kKENPTkZJR19QUENfTVBDMTA2KQkrPSBncmFja2xlLm8KIG9iai0kKENPTkZJR19QUENfRENSX05BVElWRSkJKz0gZGNyLWxvdy5vCkBAIC0xNSw2ICsxNiw3IEBACiBvYmotJChDT05GSUdfRlNMX1BDSSkJCSs9IGZzbF9wY2kubyAkKGZzbC1tc2ktb2JqLXkpCiBvYmotJChDT05GSUdfRlNMX0xCQykJCSs9IGZzbF9sYmMubwogb2JqLSQoQ09ORklHX0ZTTF9HVE0pCQkrPSBmc2xfZ3RtLm8KK29iai0kKENPTkZJR19NUEM4eHh4X0dQSU8pCSs9IG1wYzh4eHhfZ3Bpby5vCiBvYmotJChDT05GSUdfUkFQSURJTykJCSs9IGZzbF9yaW8ubwogb2JqLSQoQ09ORklHX1RTSTEwOF9CUklER0UpCSs9IHRzaTEwOF9wY2kubyB0c2kxMDhfZGV2Lm8KIG9iai0kKENPTkZJR19RVUlDQ19FTkdJTkUpCSs9IHFlX2xpYi8KQEAgLTM2LDE1ICszOCwxMiBAQAogb2JqLSQoQ09ORklHXzR4eCkJCSs9IHBwYzR4eF9wY2kubwogZW5kaWYKIAotIyBUZW1wb3JhcnkgaGFjayB1bnRpbCB3ZSBoYXZlIG1pZ3JhdGVkIHRvIGFzbS1wb3dlcnBjCi1pZmVxICgkKEFSQ0gpLHBvd2VycGMpCiBvYmotJChDT05GSUdfQ1BNKQkJKz0gY3BtX2NvbW1vbi5vCiBvYmotJChDT05GSUdfQ1BNMikJCSs9IGNwbTIubyBjcG0yX3BpYy5vCiBvYmotJChDT05GSUdfUVVJQ0NfRU5HSU5FKQkrPSBjcG1fY29tbW9uLm8KIG9iai0kKENPTkZJR19QUENfRENSKQkJKz0gZGNyLm8KIG9iai0kKENPTkZJR184eHgpCQkrPSBtcGM4eHhfcGljLm8gY3BtMS5vCiBvYmotJChDT05GSUdfVUNPREVfUEFUQ0gpCSs9IG1pY3JvcGF0Y2gubwotZW5kaWYKIAogaWZlcSAoJChDT05GSUdfU1VTUEVORCkseSkKIG9iai0kKENPTkZJR182eHgpCQkrPSA2eHgtc3VzcGVuZC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCmluZGV4IDRhMDQ4MjMuLjQ5MDQ3M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCkBAIC01NDYsMzcgKzU0Niw0OCBAQAogCXJldHVybiAhIShpbl9iZTE2KCZpb3AtPmRhdCkgJiBwaW5fbWFzayk7CiB9CiAKK3N0YXRpYyB2b2lkIF9fY3BtMV9ncGlvMTZfc2V0KHN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djLCB1MTYgcGluX21hc2ssCisJaW50IHZhbHVlKQoreworCXN0cnVjdCBjcG0xX2dwaW8xNl9jaGlwICpjcG0xX2djID0gdG9fY3BtMV9ncGlvMTZfY2hpcChtbV9nYyk7CisJc3RydWN0IGNwbV9pb3BvcnQxNiBfX2lvbWVtICppb3AgPSBtbV9nYy0+cmVnczsKKworCWlmICh2YWx1ZSkKKwkJY3BtMV9nYy0+Y3BkYXRhIHw9IHBpbl9tYXNrOworCWVsc2UKKwkJY3BtMV9nYy0+Y3BkYXRhICY9IH5waW5fbWFzazsKKworCW91dF9iZTE2KCZpb3AtPmRhdCwgY3BtMV9nYy0+Y3BkYXRhKTsKK30KKwogc3RhdGljIHZvaWQgY3BtMV9ncGlvMTZfc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbHVlKQogewogCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKIAlzdHJ1Y3QgY3BtMV9ncGlvMTZfY2hpcCAqY3BtMV9nYyA9IHRvX2NwbTFfZ3BpbzE2X2NoaXAobW1fZ2MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IHBpbl9tYXNrID0gMSA8PCAoMTUgLSBncGlvKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcG0xX2djLT5sb2NrLCBmbGFncyk7CisKKwlfX2NwbTFfZ3BpbzE2X3NldChtbV9nYywgcGluX21hc2ssIHZhbHVlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBjcG0xX2dwaW8xNl9kaXJfb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7CisJc3RydWN0IGNwbTFfZ3BpbzE2X2NoaXAgKmNwbTFfZ2MgPSB0b19jcG0xX2dwaW8xNl9jaGlwKG1tX2djKTsKIAlzdHJ1Y3QgY3BtX2lvcG9ydDE2IF9faW9tZW0gKmlvcCA9IG1tX2djLT5yZWdzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IHBpbl9tYXNrID0gMSA8PCAoMTUgLSBncGlvKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcG0xX2djLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAodmFsdWUpCi0JCWNwbTFfZ2MtPmNwZGF0YSB8PSBwaW5fbWFzazsKLQllbHNlCi0JCWNwbTFfZ2MtPmNwZGF0YSAmPSB+cGluX21hc2s7Ci0KLQlvdXRfYmUxNigmaW9wLT5kYXQsIGNwbTFfZ2MtPmNwZGF0YSk7CisJc2V0Yml0czE2KCZpb3AtPmRpciwgcGluX21hc2spOworCV9fY3BtMV9ncGlvMTZfc2V0KG1tX2djLCBwaW5fbWFzaywgdmFsKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBjcG0xX2dwaW8xNl9kaXJfb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKLXsKLQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7Ci0Jc3RydWN0IGNwbV9pb3BvcnQxNiBfX2lvbWVtICppb3AgPSBtbV9nYy0+cmVnczsKLQl1MTYgcGluX21hc2s7Ci0KLQlwaW5fbWFzayA9IDEgPDwgKDE1IC0gZ3Bpbyk7Ci0KLQlzZXRiaXRzMTYoJmlvcC0+ZGlyLCBwaW5fbWFzayk7Ci0KLQljcG0xX2dwaW8xNl9zZXQoZ2MsIGdwaW8sIHZhbCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU4NCwxMyArNTk1LDE3IEBACiBzdGF0aWMgaW50IGNwbTFfZ3BpbzE2X2Rpcl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCiB7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOworCXN0cnVjdCBjcG0xX2dwaW8xNl9jaGlwICpjcG0xX2djID0gdG9fY3BtMV9ncGlvMTZfY2hpcChtbV9nYyk7CiAJc3RydWN0IGNwbV9pb3BvcnQxNiBfX2lvbWVtICppb3AgPSBtbV9nYy0+cmVnczsKLQl1MTYgcGluX21hc2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgcGluX21hc2sgPSAxIDw8ICgxNSAtIGdwaW8pOwogCi0JcGluX21hc2sgPSAxIDw8ICgxNSAtIGdwaW8pOworCXNwaW5fbG9ja19pcnFzYXZlKCZjcG0xX2djLT5sb2NrLCBmbGFncyk7CiAKIAljbHJiaXRzMTYoJmlvcC0+ZGlyLCBwaW5fbWFzayk7CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcG0xX2djLT5sb2NrLCBmbGFncyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjU1LDM3ICs2NzAsNDggQEAKIAlyZXR1cm4gISEoaW5fYmUzMigmaW9wLT5kYXQpICYgcGluX21hc2spOwogfQogCitzdGF0aWMgdm9pZCBfX2NwbTFfZ3BpbzMyX3NldChzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYywgdTMyIHBpbl9tYXNrLAorCWludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgY3BtMV9ncGlvMzJfY2hpcCAqY3BtMV9nYyA9IHRvX2NwbTFfZ3BpbzMyX2NoaXAobW1fZ2MpOworCXN0cnVjdCBjcG1faW9wb3J0MzJiIF9faW9tZW0gKmlvcCA9IG1tX2djLT5yZWdzOworCisJaWYgKHZhbHVlKQorCQljcG0xX2djLT5jcGRhdGEgfD0gcGluX21hc2s7CisJZWxzZQorCQljcG0xX2djLT5jcGRhdGEgJj0gfnBpbl9tYXNrOworCisJb3V0X2JlMzIoJmlvcC0+ZGF0LCBjcG0xX2djLT5jcGRhdGEpOworfQorCiBzdGF0aWMgdm9pZCBjcG0xX2dwaW8zMl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOwogCXN0cnVjdCBjcG0xX2dwaW8zMl9jaGlwICpjcG0xX2djID0gdG9fY3BtMV9ncGlvMzJfY2hpcChtbV9nYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcGluX21hc2sgPSAxIDw8ICgzMSAtIGdwaW8pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKKworCV9fY3BtMV9ncGlvMzJfc2V0KG1tX2djLCBwaW5fbWFzaywgdmFsdWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3BtMV9nYy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGNwbTFfZ3BpbzMyX2Rpcl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQoreworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKKwlzdHJ1Y3QgY3BtMV9ncGlvMzJfY2hpcCAqY3BtMV9nYyA9IHRvX2NwbTFfZ3BpbzMyX2NoaXAobW1fZ2MpOwogCXN0cnVjdCBjcG1faW9wb3J0MzJiIF9faW9tZW0gKmlvcCA9IG1tX2djLT5yZWdzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHBpbl9tYXNrID0gMSA8PCAoMzEgLSBncGlvKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcG0xX2djLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAodmFsdWUpCi0JCWNwbTFfZ2MtPmNwZGF0YSB8PSBwaW5fbWFzazsKLQllbHNlCi0JCWNwbTFfZ2MtPmNwZGF0YSAmPSB+cGluX21hc2s7Ci0KLQlvdXRfYmUzMigmaW9wLT5kYXQsIGNwbTFfZ2MtPmNwZGF0YSk7CisJc2V0Yml0czMyKCZpb3AtPmRpciwgcGluX21hc2spOworCV9fY3BtMV9ncGlvMzJfc2V0KG1tX2djLCBwaW5fbWFzaywgdmFsKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBjcG0xX2dwaW8zMl9kaXJfb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKLXsKLQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7Ci0Jc3RydWN0IGNwbV9pb3BvcnQzMmIgX19pb21lbSAqaW9wID0gbW1fZ2MtPnJlZ3M7Ci0JdTMyIHBpbl9tYXNrOwotCi0JcGluX21hc2sgPSAxIDw8ICgzMSAtIGdwaW8pOwotCi0Jc2V0Yml0czMyKCZpb3AtPmRpciwgcGluX21hc2spOwotCi0JY3BtMV9ncGlvMzJfc2V0KGdjLCBncGlvLCB2YWwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02OTMsMTMgKzcxOSwxNyBAQAogc3RhdGljIGludCBjcG0xX2dwaW8zMl9kaXJfaW4oc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQogewogCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKKwlzdHJ1Y3QgY3BtMV9ncGlvMzJfY2hpcCAqY3BtMV9nYyA9IHRvX2NwbTFfZ3BpbzMyX2NoaXAobW1fZ2MpOwogCXN0cnVjdCBjcG1faW9wb3J0MzJiIF9faW9tZW0gKmlvcCA9IG1tX2djLT5yZWdzOwotCXUzMiBwaW5fbWFzazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBwaW5fbWFzayA9IDEgPDwgKDMxIC0gZ3Bpbyk7CiAKLQlwaW5fbWFzayA9IDEgPDwgKDMxIC0gZ3Bpbyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKIAogCWNscmJpdHMzMigmaW9wLT5kaXIsIHBpbl9tYXNrKTsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jCmluZGV4IDQyMmM4ZmEuLjA0OTRlZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jCkBAIC0xMSwxNCArMTEsMTkgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vZnNsX2xiYy5oPgogCi1zcGlubG9ja190IGZzbF9sYmNfbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGZzbF9sYmNfbG9jayk7Ci0KLXN0cnVjdCBmc2xfbGJjX3JlZ3MgX19pb21lbSAqZnNsX2xiY19yZWdzOwotRVhQT1JUX1NZTUJPTChmc2xfbGJjX3JlZ3MpOworc3RhdGljIHNwaW5sb2NrX3QgZnNsX2xiY19sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoZnNsX2xiY19sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgZnNsX2xiY19yZWdzIF9faW9tZW0gKmZzbF9sYmNfcmVnczsKIAogc3RhdGljIGNoYXIgX19pbml0ZGF0YSAqY29tcGF0X2xiY1tdID0gewogCSJmc2wscHEyLWxvY2FsYnVzIiwKQEAgLTEyNywzICsxMzIsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZnNsX3VwbV9maW5kKTsKKworLyoqCisgKiBmc2xfdXBtX3J1bl9wYXR0ZXJuIC0gYWN0dWFsbHkgcnVuIGFuIFVQTSBwYXR0ZXJuCisgKiBAdXBtOglwb2ludGVyIHRvIHRoZSBmc2xfdXBtIHN0cnVjdHVyZSBvYnRhaW5lZCB2aWEgZnNsX3VwbV9maW5kCisgKiBAaW9fYmFzZToJcmVtYXBwZWQgcG9pbnRlciB0byB3aGVyZSBtZW1vcnkgYWNjZXNzIHNob3VsZCBoYXBwZW4KKyAqIEBtYXI6CU1BUiByZWdpc3RlciBjb250ZW50IGR1cmluZyBwYXR0ZXJuIGV4ZWN1dGlvbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdHJpZ2dlcnMgZHVtbXkgd3JpdGUgdG8gdGhlIG1lbW9yeSBzcGVjaWZpZWQgYnkgdGhlIGlvX2Jhc2UsCisgKiB0aHVzIFVQTSBwYXR0ZXJuIGFjdHVhbGx5IGV4ZWN1dGVkLiBOb3RlIHRoYXQgbWFyIHVzYWdlIGRlcGVuZHMgb24gdGhlCisgKiBwcmUtcHJvZ3JhbW1lZCBBTVggYml0cyBpbiB0aGUgVVBNIFJBTS4KKyAqLworaW50IGZzbF91cG1fcnVuX3BhdHRlcm4oc3RydWN0IGZzbF91cG0gKnVwbSwgdm9pZCBfX2lvbWVtICppb19iYXNlLCB1MzIgbWFyKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2xiY19sb2NrLCBmbGFncyk7CisKKwlvdXRfYmUzMigmZnNsX2xiY19yZWdzLT5tYXIsIG1hciA8PCAoMzIgLSB1cG0tPndpZHRoKSk7CisKKwlzd2l0Y2ggKHVwbS0+d2lkdGgpIHsKKwljYXNlIDg6CisJCW91dF84KGlvX2Jhc2UsIDB4MCk7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCW91dF9iZTE2KGlvX2Jhc2UsIDB4MCk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCW91dF9iZTMyKGlvX2Jhc2UsIDB4MCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9sYmNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZnNsX3VwbV9ydW5fcGF0dGVybik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCmluZGV4IDJjNTE4N2MuLmYyNWNlODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXNpLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KQEAgLTY3LDk1ICs2NiwyMiBAQAogCS5tYXAgPSBmc2xfbXNpX2hvc3RfbWFwLAogfTsKIAotc3RhdGljIGlycV9od19udW1iZXJfdCBmc2xfbXNpX2FsbG9jX2h3aXJxcyhzdHJ1Y3QgZnNsX21zaSAqbXNpLCBpbnQgbnVtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG9yZGVyID0gZ2V0X2NvdW50X29yZGVyKG51bSk7Ci0JaW50IG9mZnNldDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtc2ktPmJpdG1hcF9sb2NrLCBmbGFncyk7Ci0KLQlvZmZzZXQgPSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihtc2ktPmZzbF9tc2lfYml0bWFwLAotCQkJCQlOUl9NU0lfSVJRUywgb3JkZXIpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNpLT5iaXRtYXBfbG9jaywgZmxhZ3MpOwotCi0JcHJfZGVidWcoIiVzOiBhbGxvY2F0ZWQgMHgleCAoMl4lZCkgYXQgb2Zmc2V0IDB4JXhcbiIsCi0JCV9fZnVuY19fLCBudW0sIG9yZGVyLCBvZmZzZXQpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQgZnNsX21zaV9mcmVlX2h3aXJxcyhzdHJ1Y3QgZnNsX21zaSAqbXNpLCBpbnQgb2Zmc2V0LCBpbnQgbnVtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG9yZGVyID0gZ2V0X2NvdW50X29yZGVyKG51bSk7Ci0KLQlwcl9kZWJ1ZygiJXM6IGZyZWVpbmcgMHgleCAoMl4lZCkgYXQgb2Zmc2V0IDB4JXhcbiIsCi0JCV9fZnVuY19fLCBudW0sIG9yZGVyLCBvZmZzZXQpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1zaS0+Yml0bWFwX2xvY2ssIGZsYWdzKTsKLQliaXRtYXBfcmVsZWFzZV9yZWdpb24obXNpLT5mc2xfbXNpX2JpdG1hcCwgb2Zmc2V0LCBvcmRlcik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNpLT5iaXRtYXBfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGZzbF9tc2lfZnJlZV9kdF9od2lycXMoc3RydWN0IGZzbF9tc2kgKm1zaSkKLXsKLQlpbnQgaTsKLQlpbnQgbGVuOwotCWNvbnN0IHUzMiAqcDsKLQotCWJpdG1hcF9hbGxvY2F0ZV9yZWdpb24obXNpLT5mc2xfbXNpX2JpdG1hcCwgMCwKLQkJICAgICAgIGdldF9jb3VudF9vcmRlcihOUl9NU0lfSVJRUykpOwotCi0JcCA9IG9mX2dldF9wcm9wZXJ0eShtc2ktPm9mX25vZGUsICJtc2ktYXZhaWxhYmxlLXJhbmdlcyIsICZsZW4pOwotCi0JaWYgKCFwKSB7Ci0JCS8qIE5vIG1zaS1hdmFpbGFibGUtcmFuZ2VzIHByb3BlcnR5LAotCQkgKiBBbGwgdGhlIDI1NiBNU0kgaW50ZXJydXB0cyBjYW4gYmUgdXNlZAotCQkgKi8KLQkJZnNsX21zaV9mcmVlX2h3aXJxcyhtc2ksIDAsIDB4MTAwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKChsZW4gJSAoMiAqIHNpemVvZih1MzIpKSkgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJmc2xfbXNpOiBNYWxmb3JtZWQgbXNpLWF2YWlsYWJsZS1yYW5nZXMgIgotCQkgICAgICAgInByb3BlcnR5IG9uICVzXG4iLCBtc2ktPm9mX25vZGUtPmZ1bGxfbmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIEZvcm1hdCBpczogKDx1MzIgc3RhcnQ+IDx1MzIgY291bnQ+KSsgKi8KLQlsZW4gLz0gMiAqIHNpemVvZih1MzIpOwotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgcCArPSAyKQotCQlmc2xfbXNpX2ZyZWVfaHdpcnFzKG1zaSwgKnAsICoocCArIDEpKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGZzbF9tc2lfaW5pdF9hbGxvY2F0b3Ioc3RydWN0IGZzbF9tc2kgKm1zaV9kYXRhKQogewogCWludCByYzsKLQlpbnQgc2l6ZSA9IEJJVFNfVE9fTE9OR1MoTlJfTVNJX0lSUVMpICogc2l6ZW9mKHUzMik7CiAKLQltc2lfZGF0YS0+ZnNsX21zaV9iaXRtYXAgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCXJjID0gbXNpX2JpdG1hcF9hbGxvYygmbXNpX2RhdGEtPmJpdG1hcCwgTlJfTVNJX0lSUVMsCisJCQkgICAgICBtc2lfZGF0YS0+aXJxaG9zdC0+b2Zfbm9kZSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAKLQlpZiAobXNpX2RhdGEtPmZzbF9tc2lfYml0bWFwID09IE5VTEwpIHsKLQkJcHJfZGVidWcoIiVzOiBFTk9NRU0gYWxsb2NhdGluZyBhbGxvY2F0b3IgYml0bWFwIVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOworCXJjID0gbXNpX2JpdG1hcF9yZXNlcnZlX2R0X2h3aXJxcygmbXNpX2RhdGEtPmJpdG1hcCk7CisJaWYgKHJjIDwgMCkgeworCQltc2lfYml0bWFwX2ZyZWUoJm1zaV9kYXRhLT5iaXRtYXApOworCQlyZXR1cm4gcmM7CiAJfQogCi0JcmMgPSBmc2xfbXNpX2ZyZWVfZHRfaHdpcnFzKG1zaV9kYXRhKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KIAlyZXR1cm4gMDsKLW91dF9mcmVlOgotCWtmcmVlKG1zaV9kYXRhLT5mc2xfbXNpX2JpdG1hcCk7Ci0KLQltc2lfZGF0YS0+ZnNsX21zaV9iaXRtYXAgPSBOVUxMOwotCXJldHVybiByYzsKLQogfQogCiBzdGF0aWMgaW50IGZzbF9tc2lfY2hlY2tfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCkBAIC0xNzUsNyArMTAxLDggQEAKIAkJaWYgKGVudHJ5LT5pcnEgPT0gTk9fSVJRKQogCQkJY29udGludWU7CiAJCXNldF9pcnFfbXNpKGVudHJ5LT5pcnEsIE5VTEwpOwotCQlmc2xfbXNpX2ZyZWVfaHdpcnFzKG1zaV9kYXRhLCB2aXJxX3RvX2h3KGVudHJ5LT5pcnEpLCAxKTsKKwkJbXNpX2JpdG1hcF9mcmVlX2h3aXJxcygmbXNpX2RhdGEtPmJpdG1hcCwKKwkJCQkgICAgICAgdmlycV90b19odyhlbnRyeS0+aXJxKSwgMSk7CiAJCWlycV9kaXNwb3NlX21hcHBpbmcoZW50cnktPmlycSk7CiAJfQogCkBAIC0xOTcsMTUgKzEyNCwxNCBAQAogCiBzdGF0aWMgaW50IGZzbF9zZXR1cF9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQogewotCWlycV9od19udW1iZXJfdCBod2lycTsKLQlpbnQgcmM7CisJaW50IHJjLCBod2lycTsKIAl1bnNpZ25lZCBpbnQgdmlycTsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwogCXN0cnVjdCBtc2lfbXNnIG1zZzsKIAlzdHJ1Y3QgZnNsX21zaSAqbXNpX2RhdGEgPSBmc2xfbXNpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnBkZXYtPm1zaV9saXN0LCBsaXN0KSB7Ci0JCWh3aXJxID0gZnNsX21zaV9hbGxvY19od2lycXMobXNpX2RhdGEsIDEpOworCQlod2lycSA9IG1zaV9iaXRtYXBfYWxsb2NfaHdpcnFzKCZtc2lfZGF0YS0+Yml0bWFwLCAxKTsKIAkJaWYgKGh3aXJxIDwgMCkgewogCQkJcmMgPSBod2lycTsKIAkJCXByX2RlYnVnKCIlczogZmFpbCBhbGxvY2F0aW5nIG1zaSBpbnRlcnJ1cHRcbiIsCkBAIC0yMTYsOSArMTQyLDkgQEAKIAkJdmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhtc2lfZGF0YS0+aXJxaG9zdCwgaHdpcnEpOwogCiAJCWlmICh2aXJxID09IE5PX0lSUSkgewotCQkJcHJfZGVidWcoIiVzOiBmYWlsIG1hcHBpbmcgaHdpcnEgMHglbHhcbiIsCisJCQlwcl9kZWJ1ZygiJXM6IGZhaWwgbWFwcGluZyBod2lycSAweCV4XG4iLAogCQkJCQlfX2Z1bmNfXywgaHdpcnEpOwotCQkJZnNsX21zaV9mcmVlX2h3aXJxcyhtc2lfZGF0YSwgaHdpcnEsIDEpOworCQkJbXNpX2JpdG1hcF9mcmVlX2h3aXJxcygmbXNpX2RhdGEtPmJpdG1hcCwgaHdpcnEsIDEpOwogCQkJcmMgPSAtRU5PU1BDOwogCQkJZ290byBvdXRfZnJlZTsKIAkJfQpAQCAtMzE3LDE0ICsyNDMsMTEgQEAKIAkJZ290byBlcnJvcl9vdXQ7CiAJfQogCi0JbXNpLT5vZl9ub2RlID0gb2Zfbm9kZV9nZXQoZGV2LT5ub2RlKTsKKwltc2ktPmlycWhvc3QgPSBpcnFfYWxsb2NfaG9zdChkZXYtPm5vZGUsIElSUV9IT1NUX01BUF9MSU5FQVIsCisJCQkJICAgICAgTlJfTVNJX0lSUVMsICZmc2xfbXNpX2hvc3Rfb3BzLCAwKTsKIAotCW1zaS0+aXJxaG9zdCA9IGlycV9hbGxvY19ob3N0KG9mX25vZGVfZ2V0KGRldi0+bm9kZSksCi0JCQkJSVJRX0hPU1RfTUFQX0xJTkVBUiwKLQkJCQlOUl9NU0lfSVJRUywgJmZzbF9tc2lfaG9zdF9vcHMsIDApOwogCWlmIChtc2ktPmlycWhvc3QgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5vIG1lbW9yeSBmb3IgTVNJIGlycWhvc3RcbiIpOwotCQlvZl9ub2RlX3B1dChkZXYtPm5vZGUpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX291dDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5oCmluZGV4IGE2NTM0NjguLjMzMWM3ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5oCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5oCkBAIC0xMyw2ICsxMyw4IEBACiAjaWZuZGVmIF9QT1dFUlBDX1NZU0RFVl9GU0xfTVNJX0gKICNkZWZpbmUgX1BPV0VSUENfU1lTREVWX0ZTTF9NU0lfSAogCisjaW5jbHVkZSA8YXNtL21zaV9iaXRtYXAuaD4KKwogI2RlZmluZSBOUl9NU0lfUkVHCQk4CiAjZGVmaW5lIElSUVNfUEVSX01TSV9SRUcJMzIKICNkZWZpbmUgTlJfTVNJX0lSUVMJKE5SX01TSV9SRUcgKiBJUlFTX1BFUl9NU0lfUkVHKQpAQCAtMjIsOSArMjQsNiBAQAogI2RlZmluZSBGU0xfUElDX0lQX0lQSUMJMHgwMDAwMDAwMgogCiBzdHJ1Y3QgZnNsX21zaSB7Ci0JLyogRGV2aWNlIG5vZGUgb2YgdGhlIE1TSSBpbnRlcnJ1cHQqLwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZTsKLQogCXN0cnVjdCBpcnFfaG9zdCAqaXJxaG9zdDsKIAogCXVuc2lnbmVkIGxvbmcgY2FzY2FkZV9pcnE7CkBAIC0zNCw4ICszMyw3IEBACiAJdm9pZCBfX2lvbWVtICptc2lfcmVnczsKIAl1MzIgZmVhdHVyZTsKIAotCXVuc2lnbmVkIGxvbmcgKmZzbF9tc2lfYml0bWFwOwotCXNwaW5sb2NrX3QgYml0bWFwX2xvY2s7CisJc3RydWN0IG1zaV9iaXRtYXAgYml0bWFwOwogfTsKIAogI2VuZGlmIC8qIF9QT1dFUlBDX1NZU0RFVl9GU0xfTVNJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKaW5kZXggNjFlNmQ3Ny4uNWIyNjRlYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKQEAgLTEsNyArMSw3IEBACiAvKgotICogTVBDODV4eC84Nnh4IFBDSS9QQ0lFIHN1cHBvcnQgcm91dGluZy4KKyAqIE1QQzgzeHgvODV4eC84Nnh4IFBDSS9QQ0lFIHN1cHBvcnQgcm91dGluZy4KICAqCi0gKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCisgKiBDb3B5cmlnaHQgMjAwNywyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMKICAqCiAgKiBJbml0aWFsIGF1dGhvcjogWGlhbmdodWEgWGlhbyA8eC54aWFvQGZyZWVzY2FsZS5jb20+CiAgKiBSZWNvZGU6IFpIQU5HIFdFSSA8d2VpLnpoYW5nQGZyZWVzY2FsZS5jb20+CkBAIC0yNTEsMjAgKzI1MSw0NyBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4NjEwLCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOwogI2VuZGlmIC8qIENPTkZJR19QUENfODV4eCB8fCBDT05GSUdfUFBDXzg2eHggKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1BQQ184M3h4KQorI2lmIGRlZmluZWQoQ09ORklHX1BQQ184M3h4KSB8fCBkZWZpbmVkKENPTkZJR19QUENfTVBDNTEyeCkKIGludCBfX2luaXQgbXBjODN4eF9hZGRfYnJpZGdlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KQogewogCWludCBsZW47CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCXN0cnVjdCByZXNvdXJjZSByc3JjOworCXN0cnVjdCByZXNvdXJjZSByc3JjX3JlZzsKKwlzdHJ1Y3QgcmVzb3VyY2UgcnNyY19jZmc7CiAJY29uc3QgaW50ICpidXNfcmFuZ2U7Ci0JaW50IHByaW1hcnkgPSAxLCBoYXNfYWRkcmVzcyA9IDA7Ci0JcGh5c19hZGRyX3QgaW1tciA9IGdldF9pbW1yYmFzZSgpOworCWludCBwcmltYXJ5OwogCiAJcHJfZGVidWcoIkFkZGluZyBQQ0kgaG9zdCBicmlkZ2UgJXNcbiIsIGRldi0+ZnVsbF9uYW1lKTsKIAogCS8qIEZldGNoIGhvc3QgYnJpZGdlIHJlZ2lzdGVycyBhZGRyZXNzICovCi0JaGFzX2FkZHJlc3MgPSAob2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXYsIDAsICZyc3JjKSA9PSAwKTsKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXYsIDAsICZyc3JjX3JlZykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZ2V0IHBjaSByZWdpc3RlciBiYXNlIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldCgmcnNyY19jZmcsIDAsIHNpemVvZihyc3JjX2NmZykpOworCisJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LCAxLCAmcnNyY19jZmcpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJObyBwY2kgY29uZmlnIHJlZ2lzdGVyIGJhc2UgaW4gZGV2IHRyZWUsICIKKwkJCSJ1c2luZyBkZWZhdWx0XG4iKTsKKwkJLyoKKwkJICogTVBDODN4eCBzdXBwb3J0cyB1cCB0byB0d28gaG9zdCBjb250cm9sbGVycworCQkgKiAJb25lIGF0IDB4ODUwMCBoYXMgY29uZmlnIHNwYWNlIHJlZ2lzdGVycyBhdCAweDgzMDAKKwkJICogCW9uZSBhdCAweDg2MDAgaGFzIGNvbmZpZyBzcGFjZSByZWdpc3RlcnMgYXQgMHg4MzgwCisJCSAqLworCQlpZiAoKHJzcmNfcmVnLnN0YXJ0ICYgMHhmZmZmZikgPT0gMHg4NTAwKQorCQkJcnNyY19jZmcuc3RhcnQgPSAocnNyY19yZWcuc3RhcnQgJiAweGZmZjAwMDAwKSArIDB4ODMwMDsKKwkJZWxzZSBpZiAoKHJzcmNfcmVnLnN0YXJ0ICYgMHhmZmZmZikgPT0gMHg4NjAwKQorCQkJcnNyY19jZmcuc3RhcnQgPSAocnNyY19yZWcuc3RhcnQgJiAweGZmZjAwMDAwKSArIDB4ODM4MDsKKwl9CisJLyoKKwkgKiBDb250cm9sbGVyIGF0IG9mZnNldCAweDg1MDAgaXMgcHJpbWFyeQorCSAqLworCWlmICgocnNyY19yZWcuc3RhcnQgJiAweGZmZmZmKSA9PSAweDg1MDApCisJCXByaW1hcnkgPSAxOworCWVsc2UKKwkJcHJpbWFyeSA9IDA7CiAKIAkvKiBHZXQgYnVzIHJhbmdlIGlmIGFueSAqLwogCWJ1c19yYW5nZSA9IG9mX2dldF9wcm9wZXJ0eShkZXYsICJidXMtcmFuZ2UiLCAmbGVuKTsKQEAgLTI4MSwyMiArMzA4LDExIEBACiAJaG9zZS0+Zmlyc3RfYnVzbm8gPSBidXNfcmFuZ2UgPyBidXNfcmFuZ2VbMF0gOiAwOwogCWhvc2UtPmxhc3RfYnVzbm8gPSBidXNfcmFuZ2UgPyBidXNfcmFuZ2VbMV0gOiAweGZmOwogCi0JLyogTVBDODN4eCBzdXBwb3J0cyB1cCB0byB0d28gaG9zdCBjb250cm9sbGVycyBvbmUgYXQgMHg4NTAwIGZyb20gaW1tcmJhcgotCSAqIHRoZSBvdGhlciBhdCAweDg2MDAsIHdlIGNvbnNpZGVyIHRoZSAweDg1MDAgdGhlIHByaW1hcnkgY29udHJvbGxlcgotCSAqLwotCS8qIFBDSSAxICovCi0JaWYgKChyc3JjLnN0YXJ0ICYgMHhmZmZmZikgPT0gMHg4NTAwKSB7Ci0JCXNldHVwX2luZGlyZWN0X3BjaShob3NlLCBpbW1yICsgMHg4MzAwLCBpbW1yICsgMHg4MzA0LCAwKTsKLQl9Ci0JLyogUENJIDIgKi8KLQlpZiAoKHJzcmMuc3RhcnQgJiAweGZmZmZmKSA9PSAweDg2MDApIHsKLQkJc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIGltbXIgKyAweDgzODAsIGltbXIgKyAweDgzODQsIDApOwotCQlwcmltYXJ5ID0gMDsKLQl9CisJc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIHJzcmNfY2ZnLnN0YXJ0LCByc3JjX2NmZy5zdGFydCArIDQsIDApOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgTVBDODN4eCBQQ0kgaG9zdCBicmlkZ2UgYXQgMHglMDE2bGx4LiAiCisJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgRlNMIFBDSSBob3N0IGJyaWRnZSBhdCAweCUwMTZsbHguICIKIAkgICAgICAgIkZpcm13YXJlIGJ1cyBudW1iZXI6ICVkLT4lZFxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyc3JjLnN0YXJ0LCBob3NlLT5maXJzdF9idXNubywKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyc3JjX3JlZy5zdGFydCwgaG9zZS0+Zmlyc3RfYnVzbm8sCiAJICAgICAgIGhvc2UtPmxhc3RfYnVzbm8pOwogCiAJcHJfZGVidWcoIiAtPkhvc2UgYXQgMHglcCwgY2ZnX2FkZHI9MHglcCxjZmdfZGF0YT0weCVwXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYwppbmRleCAyMTQzODhlLi4wMWI4ODRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYwpAQCAtNDEyLDUzICs0MTIsNiBAQAogCiBhcmNoX2luaXRjYWxsKGdmYXJfb2ZfaW5pdCk7CiAKLQotI2lmZGVmIENPTkZJR19QUENfODN4eAotc3RhdGljIGludCBfX2luaXQgbXBjODN4eF93ZHRfaW5pdCh2b2lkKQotewotCXN0cnVjdCByZXNvdXJjZSByOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2OwotCXUzMiBmcmVxID0gZnNsX2dldF9zeXNfZnJlcSgpOwotCWludCByZXQ7Ci0KLQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsICJ3YXRjaGRvZyIsICJtcGM4M3h4X3dkdCIpOwotCi0JaWYgKCFucCkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG5vZGV2OwotCX0KLQotCW1lbXNldCgmciwgMCwgc2l6ZW9mKHIpKTsKLQotCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCWRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm1wYzgzeHhfd2R0IiwgMCwgJnIsIDEpOwotCWlmIChJU19FUlIoZGV2KSkgewotCQlyZXQgPSBQVFJfRVJSKGRldik7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShkZXYsICZmcmVxLCBzaXplb2YoZnJlcSkpOwotCWlmIChyZXQpCi0JCWdvdG8gdW5yZWc7Ci0KLQlvZl9ub2RlX3B1dChucCk7Ci0JcmV0dXJuIDA7Ci0KLXVucmVnOgotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldik7Ci1lcnI6Ci0Jb2Zfbm9kZV9wdXQobnApOwotbm9kZXY6Ci0JcmV0dXJuIHJldDsKLX0KLQotYXJjaF9pbml0Y2FsbChtcGM4M3h4X3dkdF9pbml0KTsKLSNlbmRpZgotCiBzdGF0aWMgZW51bSBmc2xfdXNiMl9waHlfbW9kZXMgZGV0ZXJtaW5lX3VzYl9waHkoY29uc3QgY2hhciAqcGh5X3R5cGUpCiB7CiAJaWYgKCFwaHlfdHlwZSkKQEAgLTc2Nyw0MiArNzIwLDYgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfRkJfRlNMX0RJVSkgfHwgZGVmaW5lZChDT05GSUdfRkJfRlNMX0RJVV9NT0RVTEUpCi1zdHJ1Y3QgcGxhdGZvcm1fZGl1X2RhdGFfb3BzIGRpdV9vcHMgPSB7Ci0JLmRpdV9zaXplID0gMTI4MCAqIDEwMjQgKiA0LAkvKiBkZWZhdWx0IG9uZSAxMjgweDEwMjQgYnVmZmVyICovCi19Oworc3RydWN0IHBsYXRmb3JtX2RpdV9kYXRhX29wcyBkaXVfb3BzOwogRVhQT1JUX1NZTUJPTChkaXVfb3BzKTsKLQotaW50IF9faW5pdCBwcmVhbGxvY2F0ZV9kaXVfdmlkZW9tZW1vcnkodm9pZCkKLXsKLQlwcl9kZWJ1ZygiZGl1X3NpemU9JWx1XG4iLCBkaXVfb3BzLmRpdV9zaXplKTsKLQotCWRpdV9vcHMuZGl1X21lbSA9IF9fYWxsb2NfYm9vdG1lbShkaXVfb3BzLmRpdV9zaXplLCA4LCAwKTsKLQlpZiAoIWRpdV9vcHMuZGl1X21lbSkgewotCQlwcmludGsoS0VSTl9FUlIgImZzbC1kaXU6IGNhbm5vdCBhbGxvY2F0ZSAlbHUgYnl0ZXNcbiIsCi0JCQlkaXVfb3BzLmRpdV9zaXplKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcHJfZGVidWcoImRpdV9tZW09JXBcbiIsIGRpdV9vcHMuZGl1X21lbSk7Ci0KLQlyaF9pbml0KCZkaXVfb3BzLmRpdV9yaF9pbmZvLCA0MDk2LCBBUlJBWV9TSVpFKGRpdV9vcHMuZGl1X3JoX2Jsb2NrKSwKLQkJZGl1X29wcy5kaXVfcmhfYmxvY2spOwotCXJldHVybiByaF9hdHRhY2hfcmVnaW9uKCZkaXVfb3BzLmRpdV9yaF9pbmZvLAotCQkJCSh1bnNpZ25lZCBsb25nKSBkaXVfb3BzLmRpdV9tZW0sCi0JCQkJZGl1X29wcy5kaXVfc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X3BhcnNlX2RpdWZiKGNoYXIgKnApCi17Ci0JaWYgKCFwKQotCQlyZXR1cm4gMTsKLQotCWRpdV9vcHMuZGl1X3NpemUgPSBfQUxJR05fVVAobWVtcGFyc2UocCwgJnApLCA4KTsKLQotCXByX2RlYnVnKCJkaXVfc2l6ZT0lbHVcbiIsIGRpdV9vcHMuZGl1X3NpemUpOwotCi0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiZGl1ZmIiLCBlYXJseV9wYXJzZV9kaXVmYik7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmggYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaAppbmRleCAwMjQyOTk4Li42MGY3ZjIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaApAQCAtMjAsMTQgKzIwLDcgQEAKIGV4dGVybiB2b2lkIGZzbF9yc3Rjcl9yZXN0YXJ0KGNoYXIgKmNtZCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVKSB8fCBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVX01PRFVMRSkKLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8YXNtL3JoZWFwLmg+CiBzdHJ1Y3QgcGxhdGZvcm1fZGl1X2RhdGFfb3BzIHsKLQlyaF9ibG9ja190IGRpdV9yaF9ibG9ja1sxNl07Ci0JcmhfaW5mb190IGRpdV9yaF9pbmZvOwotCXVuc2lnbmVkIGxvbmcgZGl1X3NpemU7Ci0Jdm9pZCAqZGl1X21lbTsKLQogCXVuc2lnbmVkIGludCAoKmdldF9waXhlbF9mb3JtYXQpICh1bnNpZ25lZCBpbnQgYml0c19wZXJfcGl4ZWwsCiAJCWludCBtb25pdG9yX3BvcnQpOwogCXZvaWQgKCpzZXRfZ2FtbWFfdGFibGUpIChpbnQgbW9uaXRvcl9wb3J0LCBjaGFyICpnYW1tYV90YWJsZV9iYXNlKTsKQEAgLTM4LDcgKzMxLDYgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGl1X2RhdGFfb3BzIGRpdV9vcHM7Ci1pbnQgX19pbml0IHByZWFsbG9jYXRlX2RpdV92aWRlb21lbW9yeSh2b2lkKTsKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwM2VhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogR1BJT3Mgb24gTVBDODM0OS84NTcyLzg2MTAgYW5kIGNvbXBhdGlibGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUGV0ZXIgS29yc2dhYXJkIDxqYWNtZXRAc3Vuc2l0ZS5kaz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNkZWZpbmUgTVBDOFhYWF9HUElPX1BJTlMJMzIKKworI2RlZmluZSBHUElPX0RJUgkJMHgwMAorI2RlZmluZSBHUElPX09EUgkJMHgwNAorI2RlZmluZSBHUElPX0RBVAkJMHgwOAorI2RlZmluZSBHUElPX0lFUgkJMHgwYworI2RlZmluZSBHUElPX0lNUgkJMHgxMAorI2RlZmluZSBHUElPX0lDUgkJMHgxNAorCitzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgeworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgbW1fZ2M7CisJc3BpbmxvY2tfdCBsb2NrOworCisJLyoKKwkgKiBzaGFkb3dlZCBkYXRhIHJlZ2lzdGVyIHRvIGJlIGFibGUgdG8gY2xlYXIvc2V0IG91dHB1dCBwaW5zIGluCisJICogb3BlbiBkcmFpbiBtb2RlIHNhZmVseQorCSAqLworCXUzMiBkYXRhOworfTsKKworc3RhdGljIGlubGluZSB1MzIgbXBjOHh4eF9ncGlvMm1hc2sodW5zaWduZWQgaW50IGdwaW8pCit7CisJcmV0dXJuIDF1IDw8IChNUEM4WFhYX0dQSU9fUElOUyAtIDEgLSBncGlvKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKgordG9fbXBjOHh4eF9ncGlvX2NoaXAoc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihtbSwgc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwLCBtbV9nYyk7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzh4eHhfZ3Bpb19zYXZlX3JlZ3Moc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0pCit7CisJc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djID0gdG9fbXBjOHh4eF9ncGlvX2NoaXAobW0pOworCisJbXBjOHh4eF9nYy0+ZGF0YSA9IGluX2JlMzIobW0tPnJlZ3MgKyBHUElPX0RBVCk7Cit9CisKK3N0YXRpYyBpbnQgbXBjOHh4eF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCit7CisJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0gPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOworCisJcmV0dXJuIGluX2JlMzIobW0tPnJlZ3MgKyBHUElPX0RBVCkgJiBtcGM4eHh4X2dwaW8ybWFzayhncGlvKTsKK30KKworc3RhdGljIHZvaWQgbXBjOHh4eF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8sIGludCB2YWwpCit7CisJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0gPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOworCXN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqbXBjOHh4eF9nYyA9IHRvX21wYzh4eHhfZ3Bpb19jaGlwKG1tKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKKworCWlmICh2YWwpCisJCW1wYzh4eHhfZ2MtPmRhdGEgfD0gbXBjOHh4eF9ncGlvMm1hc2soZ3Bpbyk7CisJZWxzZQorCQltcGM4eHh4X2djLT5kYXRhICY9IH5tcGM4eHh4X2dwaW8ybWFzayhncGlvKTsKKworCW91dF9iZTMyKG1tLT5yZWdzICsgR1BJT19EQVQsIG1wYzh4eHhfZ2MtPmRhdGEpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG1wYzh4eHhfZ3Bpb19kaXJfaW4oc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQoreworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKKwlzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKm1wYzh4eHhfZ2MgPSB0b19tcGM4eHh4X2dwaW9fY2hpcChtbSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtcGM4eHh4X2djLT5sb2NrLCBmbGFncyk7CisKKwljbHJiaXRzMzIobW0tPnJlZ3MgKyBHUElPX0RJUiwgbXBjOHh4eF9ncGlvMm1hc2soZ3BpbykpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjOHh4eF9ncGlvX2Rpcl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQoreworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKKwlzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKm1wYzh4eHhfZ2MgPSB0b19tcGM4eHh4X2dwaW9fY2hpcChtbSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW1wYzh4eHhfZ3Bpb19zZXQoZ2MsIGdwaW8sIHZhbCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOworCisJc2V0Yml0czMyKG1tLT5yZWdzICsgR1BJT19ESVIsIG1wYzh4eHhfZ3BpbzJtYXNrKGdwaW8pKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjOHh4eF9hZGRfY29udHJvbGxlcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqbXBjOHh4eF9nYzsKKwlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYzsKKwlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYzsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYzsKKwlpbnQgcmV0OworCisJbXBjOHh4eF9nYyA9IGt6YWxsb2Moc2l6ZW9mKCptcGM4eHh4X2djKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtcGM4eHh4X2djKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXNwaW5fbG9ja19pbml0KCZtcGM4eHh4X2djLT5sb2NrKTsKKworCW1tX2djID0gJm1wYzh4eHhfZ2MtPm1tX2djOworCW9mX2djID0gJm1tX2djLT5vZl9nYzsKKwlnYyA9ICZvZl9nYy0+Z2M7CisKKwltbV9nYy0+c2F2ZV9yZWdzID0gbXBjOHh4eF9ncGlvX3NhdmVfcmVnczsKKwlvZl9nYy0+Z3Bpb19jZWxscyA9IDI7CisJZ2MtPm5ncGlvID0gTVBDOFhYWF9HUElPX1BJTlM7CisJZ2MtPmRpcmVjdGlvbl9pbnB1dCA9IG1wYzh4eHhfZ3Bpb19kaXJfaW47CisJZ2MtPmRpcmVjdGlvbl9vdXRwdXQgPSBtcGM4eHh4X2dwaW9fZGlyX291dDsKKwlnYy0+Z2V0ID0gbXBjOHh4eF9ncGlvX2dldDsKKwlnYy0+c2V0ID0gbXBjOHh4eF9ncGlvX3NldDsKKworCXJldCA9IG9mX21tX2dwaW9jaGlwX2FkZChucCwgbW1fZ2MpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0dXJuOworCitlcnI6CisJcHJfZXJyKCIlczogcmVnaXN0cmF0aW9uIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkgICAgICAgbnAtPmZ1bGxfbmFtZSwgcmV0KTsKKwlrZnJlZShtcGM4eHh4X2djKTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBfX2luaXQgbXBjOHh4eF9hZGRfZ3Bpb2NoaXBzKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImZzbCxtcGM4MzQ5LWdwaW8iKQorCQltcGM4eHh4X2FkZF9jb250cm9sbGVyKG5wKTsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImZzbCxtcGM4NTcyLWdwaW8iKQorCQltcGM4eHh4X2FkZF9jb250cm9sbGVyKG5wKTsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImZzbCxtcGM4NjEwLWdwaW8iKQorCQltcGM4eHh4X2FkZF9jb250cm9sbGVyKG5wKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChtcGM4eHh4X2FkZF9ncGlvY2hpcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmggYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuaAppbmRleCBmYmY4YTI2Li42MjA5YzYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuaAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuaApAQCAtMTQsOCArMTQsNiBAQAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiBleHRlcm4gdm9pZCBtcGljX21zaV9yZXNlcnZlX2h3aXJxKHN0cnVjdCBtcGljICptcGljLCBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpOwogZXh0ZXJuIGludCBtcGljX21zaV9pbml0X2FsbG9jYXRvcihzdHJ1Y3QgbXBpYyAqbXBpYyk7Ci1leHRlcm4gaXJxX2h3X251bWJlcl90IG1waWNfbXNpX2FsbG9jX2h3aXJxcyhzdHJ1Y3QgbXBpYyAqbXBpYywgaW50IG51bSk7Ci1leHRlcm4gdm9pZCBtcGljX21zaV9mcmVlX2h3aXJxcyhzdHJ1Y3QgbXBpYyAqbXBpYywgaW50IG9mZnNldCwgaW50IG51bSk7CiBleHRlcm4gaW50IG1waWNfdTNtc2lfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYyk7CiBleHRlcm4gaW50IG1waWNfcGFzZW1pX21zaV9pbml0KHN0cnVjdCBtcGljICptcGljKTsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfbXNpLmMKaW5kZXggZGUzZTVlOC4uMWQ0NGVlZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19tc2kuYwpAQCAtMTUsNTkgKzE1LDE3IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KKyNpbmNsdWRlIDxhc20vbXNpX2JpdG1hcC5oPgogCiAjaW5jbHVkZSA8c3lzZGV2L21waWMuaD4KIAotc3RhdGljIHZvaWQgX19tcGljX21zaV9yZXNlcnZlX2h3aXJxKHN0cnVjdCBtcGljICptcGljLCBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCi17Ci0JcHJfZGVidWcoIm1waWM6IHJlc2VydmluZyBod2lycSAweCVseFxuIiwgaHdpcnEpOwotCWJpdG1hcF9hbGxvY2F0ZV9yZWdpb24obXBpYy0+aHdpcnFfYml0bWFwLCBod2lycSwgMCk7Ci19Ci0KIHZvaWQgbXBpY19tc2lfcmVzZXJ2ZV9od2lycShzdHJ1Y3QgbXBpYyAqbXBpYywgaXJxX2h3X251bWJlcl90IGh3aXJxKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAkvKiBUaGUgbXBpYyBjYWxscyB0aGlzIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBhbGxvY2F0b3Igc2V0dXAgKi8KLQlpZiAoIW1waWMtPmh3aXJxX2JpdG1hcCkKKwlpZiAoIW1waWMtPm1zaV9iaXRtYXAuYml0bWFwKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpYy0+Yml0bWFwX2xvY2ssIGZsYWdzKTsKLQlfX21waWNfbXNpX3Jlc2VydmVfaHdpcnEobXBpYywgaHdpcnEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWMtPmJpdG1hcF9sb2NrLCBmbGFncyk7Ci19Ci0KLWlycV9od19udW1iZXJfdCBtcGljX21zaV9hbGxvY19od2lycXMoc3RydWN0IG1waWMgKm1waWMsIGludCBudW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgb2Zmc2V0LCBvcmRlciA9IGdldF9jb3VudF9vcmRlcihudW0pOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1waWMtPmJpdG1hcF9sb2NrLCBmbGFncyk7Ci0JLyoKLQkgKiBUaGlzIGlzIGZhc3QsIGJ1dCBzdHJpY3RlciB0aGFuIHdlIG5lZWQuIFdlIG1pZ2h0IHdhbnQgdG8gYWRkCi0JICogYSBmYWxsYmFjayByb3V0aW5lIHdoaWNoIGRvZXMgYSBsaW5lYXIgc2VhcmNoIHdpdGggbm8gYWxpZ25tZW50LgotCSAqLwotCW9mZnNldCA9IGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKG1waWMtPmh3aXJxX2JpdG1hcCwgbXBpYy0+aXJxX2NvdW50LAotCQkJCQkgb3JkZXIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWMtPmJpdG1hcF9sb2NrLCBmbGFncyk7Ci0KLQlwcl9kZWJ1ZygibXBpYzogYWxsb2NhdGVkIDB4JXggKDJeJWQpIGF0IG9mZnNldCAweCV4XG4iLAotCQkgbnVtLCBvcmRlciwgb2Zmc2V0KTsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXZvaWQgbXBpY19tc2lfZnJlZV9od2lycXMoc3RydWN0IG1waWMgKm1waWMsIGludCBvZmZzZXQsIGludCBudW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgb3JkZXIgPSBnZXRfY291bnRfb3JkZXIobnVtKTsKLQotCXByX2RlYnVnKCJtcGljOiBmcmVlaW5nIDB4JXggKDJeJWQpIGF0IG9mZnNldCAweCV4XG4iLAotCQkgbnVtLCBvcmRlciwgb2Zmc2V0KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljLT5iaXRtYXBfbG9jaywgZmxhZ3MpOwotCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihtcGljLT5od2lycV9iaXRtYXAsIG9mZnNldCwgb3JkZXIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWMtPmJpdG1hcF9sb2NrLCBmbGFncyk7CisJbXNpX2JpdG1hcF9yZXNlcnZlX2h3aXJxKCZtcGljLT5tc2lfYml0bWFwLCBod2lycSk7CiB9CiAKICNpZmRlZiBDT05GSUdfTVBJQ19VM19IVF9JUlFTCkBAIC04MywxMyArNDEsMTMgQEAKIAogCS8qIFJlc2VydmUgc291cmNlIG51bWJlcnMgd2Uga25vdyBhcmUgcmVzZXJ2ZWQgaW4gdGhlIEhXICovCiAJZm9yIChpID0gMDsgICBpIDwgODsgICBpKyspCi0JCV9fbXBpY19tc2lfcmVzZXJ2ZV9od2lycShtcGljLCBpKTsKKwkJbXNpX2JpdG1hcF9yZXNlcnZlX2h3aXJxKCZtcGljLT5tc2lfYml0bWFwLCBpKTsKIAogCWZvciAoaSA9IDQyOyAgaSA8IDQ2OyAgaSsrKQotCQlfX21waWNfbXNpX3Jlc2VydmVfaHdpcnEobXBpYywgaSk7CisJCW1zaV9iaXRtYXBfcmVzZXJ2ZV9od2lycSgmbXBpYy0+bXNpX2JpdG1hcCwgaSk7CiAKIAlmb3IgKGkgPSAxMDA7IGkgPCAxMDU7IGkrKykKLQkJX19tcGljX21zaV9yZXNlcnZlX2h3aXJxKG1waWMsIGkpOworCQltc2lfYml0bWFwX3Jlc2VydmVfaHdpcnEoJm1waWMtPm1zaV9iaXRtYXAsIGkpOwogCiAJbnAgPSBOVUxMOwogCXdoaWxlICgobnAgPSBvZl9maW5kX2FsbF9ub2RlcyhucCkpKSB7CkBAIC05OSw3ICs1Nyw3IEBACiAJCXdoaWxlIChvZl9pcnFfbWFwX29uZShucCwgaW5kZXgrKywgJm9pcnEpID09IDApIHsKIAkJCW9wcy0+eGxhdGUobXBpYy0+aXJxaG9zdCwgTlVMTCwgb2lycS5zcGVjaWZpZXIsCiAJCQkJCQlvaXJxLnNpemUsICZod2lycSwgJmZsYWdzKTsKLQkJCV9fbXBpY19tc2lfcmVzZXJ2ZV9od2lycShtcGljLCBod2lycSk7CisJCQltc2lfYml0bWFwX3Jlc2VydmVfaHdpcnEoJm1waWMtPm1zaV9iaXRtYXAsIGh3aXJxKTsKIAkJfQogCX0KIApAQCAtMTEyLDcwICs3MCwyNSBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgbXBpY19tc2lfcmVzZXJ2ZV9kdF9od2lycXMoc3RydWN0IG1waWMgKm1waWMpCi17Ci0JaW50IGksIGxlbjsKLQljb25zdCB1MzIgKnA7Ci0KLQlwID0gb2ZfZ2V0X3Byb3BlcnR5KG1waWMtPmlycWhvc3QtPm9mX25vZGUsCi0JCQkgICAgIm1zaS1hdmFpbGFibGUtcmFuZ2VzIiwgJmxlbik7Ci0JaWYgKCFwKSB7Ci0JCXByX2RlYnVnKCJtcGljOiBubyBtc2ktYXZhaWxhYmxlLXJhbmdlcyBwcm9wZXJ0eSBmb3VuZCBvbiAlc1xuIiwKLQkJCSAgbXBpYy0+aXJxaG9zdC0+b2Zfbm9kZS0+ZnVsbF9uYW1lKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKGxlbiAlIDggIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtcGljOiBNYWxmb3JtZWQgbXNpLWF2YWlsYWJsZS1yYW5nZXMgIgotCQkgICAgICAgInByb3BlcnR5IG9uICVzXG4iLCBtcGljLT5pcnFob3N0LT5vZl9ub2RlLT5mdWxsX25hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQliaXRtYXBfYWxsb2NhdGVfcmVnaW9uKG1waWMtPmh3aXJxX2JpdG1hcCwgMCwKLQkJCSAgICAgICBnZXRfY291bnRfb3JkZXIobXBpYy0+aXJxX2NvdW50KSk7Ci0KLQkvKiBGb3JtYXQgaXM6ICg8dTMyIHN0YXJ0PiA8dTMyIGNvdW50PikrICovCi0JbGVuIC89IHNpemVvZih1MzIpOwotCWZvciAoaSA9IDA7IGkgPCBsZW4gLyAyOyBpKyssIHAgKz0gMikKLQkJbXBpY19tc2lfZnJlZV9od2lycXMobXBpYywgKnAsICoocCArIDEpKTsKLQotCXJldHVybiAwOwotfQotCiBpbnQgbXBpY19tc2lfaW5pdF9hbGxvY2F0b3Ioc3RydWN0IG1waWMgKm1waWMpCiB7Ci0JaW50IHJjLCBzaXplOworCWludCByYzsKIAotCUJVR19PTihtcGljLT5od2lycV9iaXRtYXApOwotCXNwaW5fbG9ja19pbml0KCZtcGljLT5iaXRtYXBfbG9jayk7CisJcmMgPSBtc2lfYml0bWFwX2FsbG9jKCZtcGljLT5tc2lfYml0bWFwLCBtcGljLT5pcnFfY291bnQsCisJCQkgICAgICBtcGljLT5pcnFob3N0LT5vZl9ub2RlKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAotCXNpemUgPSBCSVRTX1RPX0xPTkdTKG1waWMtPmlycV9jb3VudCkgKiBzaXplb2YobG9uZyk7Ci0JcHJfZGVidWcoIm1waWM6IGFsbG9jYXRvciBiaXRtYXAgc2l6ZSBpcyAweCV4IGJ5dGVzXG4iLCBzaXplKTsKLQotCW1waWMtPmh3aXJxX2JpdG1hcCA9IGFsbG9jX21heWJlX2Jvb3RtZW0oc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIW1waWMtPmh3aXJxX2JpdG1hcCkgewotCQlwcl9kZWJ1ZygibXBpYzogRU5PTUVNIGFsbG9jYXRpbmcgYWxsb2NhdG9yIGJpdG1hcCFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQobXBpYy0+aHdpcnFfYml0bWFwLCAwLCBzaXplKTsKLQotCXJjID0gbXBpY19tc2lfcmVzZXJ2ZV9kdF9od2lycXMobXBpYyk7Ci0JaWYgKHJjKSB7CisJcmMgPSBtc2lfYml0bWFwX3Jlc2VydmVfZHRfaHdpcnFzKCZtcGljLT5tc2lfYml0bWFwKTsKKwlpZiAocmMgPiAwKSB7CiAJCWlmIChtcGljLT5mbGFncyAmIE1QSUNfVTNfSFRfSVJRUykKIAkJCXJjID0gbXBpY19tc2lfcmVzZXJ2ZV91M19od2lycXMobXBpYyk7CiAKLQkJaWYgKHJjKQotCQkJZ290byBvdXRfZnJlZTsKKwkJaWYgKHJjKSB7CisJCQltc2lfYml0bWFwX2ZyZWUoJm1waWMtPm1zaV9iaXRtYXApOworCQkJcmV0dXJuIHJjOworCQl9CiAJfQogCiAJcmV0dXJuIDA7Ci0KLSBvdXRfZnJlZToKLQlpZiAobWVtX2luaXRfZG9uZSkKLQkJa2ZyZWUobXBpYy0+aHdpcnFfYml0bWFwKTsKLQotCW1waWMtPmh3aXJxX2JpdG1hcCA9IE5VTEw7Ci0JcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKaW5kZXggNjhhZmY2MC4uNjU2Y2I3NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KKyNpbmNsdWRlIDxhc20vbXNpX2JpdG1hcC5oPgogCiAjaW5jbHVkZSAibXBpYy5oIgogCkBAIC04MSw4ICs4Miw4IEBACiAJCQljb250aW51ZTsKIAogCQlzZXRfaXJxX21zaShlbnRyeS0+aXJxLCBOVUxMKTsKLQkJbXBpY19tc2lfZnJlZV9od2lycXMobXNpX21waWMsIHZpcnFfdG9faHcoZW50cnktPmlycSksCi0JCQkJICAgICBBTExPQ19DSFVOSyk7CisJCW1zaV9iaXRtYXBfZnJlZV9od2lycXMoJm1zaV9tcGljLT5tc2lfYml0bWFwLAorCQkJCSAgICAgICB2aXJxX3RvX2h3KGVudHJ5LT5pcnEpLCBBTExPQ19DSFVOSyk7CiAJCWlycV9kaXNwb3NlX21hcHBpbmcoZW50cnktPmlycSk7CiAJfQogCkBAIC05MSwxMSArOTIsMTAgQEAKIAogc3RhdGljIGludCBwYXNlbWlfbXNpX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCiB7Ci0JaXJxX2h3X251bWJlcl90IGh3aXJxOwogCXVuc2lnbmVkIGludCB2aXJxOwogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CiAJc3RydWN0IG1zaV9tc2cgbXNnOwotCWludCByZXQ7CisJaW50IGh3aXJxOwogCiAJcHJfZGVidWcoInBhc2VtaV9tc2lfc2V0dXBfbXNpX2lycXMsIHBkZXYgJXAgbnZlYyAlZCB0eXBlICVkXG4iLAogCQkgcGRldiwgbnZlYywgdHlwZSk7CkBAIC0xMDksMTcgKzEwOSwxOSBAQAogCQkgKiBmZXcgTVNJcyBmb3Igc29tZW9uZSwgYnV0IHJlc3RyaWN0aW9ucyB3aWxsIGFwcGx5IHRvIGhvdyB0aGUKIAkJICogc291cmNlcyBjYW4gYmUgY2hhbmdlZCBpbmRlcGVuZGVudGx5LgogCQkgKi8KLQkJcmV0ID0gbXBpY19tc2lfYWxsb2NfaHdpcnFzKG1zaV9tcGljLCBBTExPQ19DSFVOSyk7Ci0JCWh3aXJxID0gcmV0OwotCQlpZiAocmV0IDwgMCkgeworCQlod2lycSA9IG1zaV9iaXRtYXBfYWxsb2NfaHdpcnFzKCZtc2lfbXBpYy0+bXNpX2JpdG1hcCwKKwkJCQkJCUFMTE9DX0NIVU5LKTsKKwkJaWYgKGh3aXJxIDwgMCkgewogCQkJcHJfZGVidWcoInBhc2VtaV9tc2k6IGZhaWxlZCBhbGxvY2F0aW5nIGh3aXJxXG4iKTsKIAkJCXJldHVybiBod2lycTsKIAkJfQogCiAJCXZpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcobXNpX21waWMtPmlycWhvc3QsIGh3aXJxKTsKIAkJaWYgKHZpcnEgPT0gTk9fSVJRKSB7Ci0JCQlwcl9kZWJ1ZygicGFzZW1pX21zaTogZmFpbGVkIG1hcHBpbmcgaHdpcnEgMHglbHhcbiIsIGh3aXJxKTsKLQkJCW1waWNfbXNpX2ZyZWVfaHdpcnFzKG1zaV9tcGljLCBod2lycSwgQUxMT0NfQ0hVTkspOworCQkJcHJfZGVidWcoInBhc2VtaV9tc2k6IGZhaWxlZCBtYXBwaW5nIGh3aXJxIDB4JXhcbiIsCisJCQkJICBod2lycSk7CisJCQltc2lfYml0bWFwX2ZyZWVfaHdpcnFzKCZtc2lfbXBpYy0+bXNpX2JpdG1hcCwgaHdpcnEsCisJCQkJCSAgICAgICBBTExPQ19DSFVOSyk7CiAJCQlyZXR1cm4gLUVOT1NQQzsKIAkJfQogCkBAIC0xMzMsOCArMTM1LDggQEAKIAkJc2V0X2lycV9jaGlwKHZpcnEsICZtcGljX3Bhc2VtaV9tc2lfY2hpcCk7CiAJCXNldF9pcnFfdHlwZSh2aXJxLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7CiAKLQkJcHJfZGVidWcoInBhc2VtaV9tc2k6IGFsbG9jYXRlZCB2aXJxIDB4JXggKGh3IDB4JWx4KSBhZGRyIDB4JXhcbiIsCi0JCQkgIHZpcnEsIGh3aXJxLCBtc2cuYWRkcmVzc19sbyk7CisJCXByX2RlYnVnKCJwYXNlbWlfbXNpOiBhbGxvY2F0ZWQgdmlycSAweCV4IChodyAweCV4KSAiIFwKKwkJCSAiYWRkciAweCV4XG4iLCB2aXJxLCBod2lycSwgbXNnLmFkZHJlc3NfbG8pOwogCiAJCS8qIExpa2V3aXNlLCB0aGUgZGV2aWNlIHdyaXRlcyBbMC4uLjUxMV0gaW50byB0aGUgdGFyZ2V0CiAJCSAqIHJlZ2lzdGVyIHRvIGdlbmVyYXRlIE1TSSBbNTEyLi4uMTAyM10KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMKaW5kZXggNmUyZjg2OC4uMGE4ZjVhOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgorI2luY2x1ZGUgPGFzbS9tc2lfYml0bWFwLmg+CiAKICNpbmNsdWRlICJtcGljLmgiCiAKQEAgLTEwMSw3ICsxMDIsOCBAQAogCQkJY29udGludWU7CiAKIAkJc2V0X2lycV9tc2koZW50cnktPmlycSwgTlVMTCk7Ci0JCW1waWNfbXNpX2ZyZWVfaHdpcnFzKG1zaV9tcGljLCB2aXJxX3RvX2h3KGVudHJ5LT5pcnEpLCAxKTsKKwkJbXNpX2JpdG1hcF9mcmVlX2h3aXJxcygmbXNpX21waWMtPm1zaV9iaXRtYXAsCisJCQkJICAgICAgIHZpcnFfdG9faHcoZW50cnktPmlycSksIDEpOwogCQlpcnFfZGlzcG9zZV9tYXBwaW5nKGVudHJ5LT5pcnEpOwogCX0KIApAQCAtMTEwLDI5ICsxMTIsMjcgQEAKIAogc3RhdGljIGludCB1M21zaV9zZXR1cF9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQogewotCWlycV9od19udW1iZXJfdCBod2lycTsKIAl1bnNpZ25lZCBpbnQgdmlycTsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwogCXN0cnVjdCBtc2lfbXNnIG1zZzsKIAl1NjQgYWRkcjsKLQlpbnQgcmV0OworCWludCBod2lycTsKIAogCWFkZHIgPSBmaW5kX2h0X21hZ2ljX2FkZHIocGRldik7CiAJbXNnLmFkZHJlc3NfbG8gPSBhZGRyICYgMHhGRkZGRkZGRjsKIAltc2cuYWRkcmVzc19oaSA9IGFkZHIgPj4gMzI7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKLQkJcmV0ID0gbXBpY19tc2lfYWxsb2NfaHdpcnFzKG1zaV9tcGljLCAxKTsKLQkJaWYgKHJldCA8IDApIHsKKwkJaHdpcnEgPSBtc2lfYml0bWFwX2FsbG9jX2h3aXJxcygmbXNpX21waWMtPm1zaV9iaXRtYXAsIDEpOworCQlpZiAoaHdpcnEgPCAwKSB7CiAJCQlwcl9kZWJ1ZygidTNtc2k6IGZhaWxlZCBhbGxvY2F0aW5nIGh3aXJxXG4iKTsKLQkJCXJldHVybiByZXQ7CisJCQlyZXR1cm4gaHdpcnE7CiAJCX0KLQkJaHdpcnEgPSByZXQ7CiAKIAkJdmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhtc2lfbXBpYy0+aXJxaG9zdCwgaHdpcnEpOwogCQlpZiAodmlycSA9PSBOT19JUlEpIHsKLQkJCXByX2RlYnVnKCJ1M21zaTogZmFpbGVkIG1hcHBpbmcgaHdpcnEgMHglbHhcbiIsIGh3aXJxKTsKLQkJCW1waWNfbXNpX2ZyZWVfaHdpcnFzKG1zaV9tcGljLCBod2lycSwgMSk7CisJCQlwcl9kZWJ1ZygidTNtc2k6IGZhaWxlZCBtYXBwaW5nIGh3aXJxIDB4JXhcbiIsIGh3aXJxKTsKKwkJCW1zaV9iaXRtYXBfZnJlZV9od2lycXMoJm1zaV9tcGljLT5tc2lfYml0bWFwLCBod2lycSwgMSk7CiAJCQlyZXR1cm4gLUVOT1NQQzsKIAkJfQogCkBAIC0xNDAsOCArMTQwLDggQEAKIAkJc2V0X2lycV9jaGlwKHZpcnEsICZtcGljX3UzbXNpX2NoaXApOwogCQlzZXRfaXJxX3R5cGUodmlycSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOwogCi0JCXByX2RlYnVnKCJ1M21zaTogYWxsb2NhdGVkIHZpcnEgMHgleCAoaHcgMHglbHgpIGFkZHIgMHglbHhcbiIsCi0JCQkgIHZpcnEsIGh3aXJxLCBhZGRyKTsKKwkJcHJfZGVidWcoInUzbXNpOiBhbGxvY2F0ZWQgdmlycSAweCV4IChodyAweCV4KSBhZGRyIDB4JWx4XG4iLAorCQkJICB2aXJxLCBod2lycSwgKHVuc2lnbmVkIGxvbmcpYWRkcik7CiAKIAkJbXNnLmRhdGEgPSBod2lycTsKIAkJd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0MjE3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCwgTWljaGFlbCBFbGxlcm1hbiwgSUJNIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGFzbS9tc2lfYml0bWFwLmg+CisKK2ludCBtc2lfYml0bWFwX2FsbG9jX2h3aXJxcyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCBpbnQgbnVtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG9mZnNldCwgb3JkZXIgPSBnZXRfY291bnRfb3JkZXIobnVtKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZibXAtPmxvY2ssIGZsYWdzKTsKKwkvKgorCSAqIFRoaXMgaXMgZmFzdCwgYnV0IHN0cmljdGVyIHRoYW4gd2UgbmVlZC4gV2UgbWlnaHQgd2FudCB0byBhZGQKKwkgKiBhIGZhbGxiYWNrIHJvdXRpbmUgd2hpY2ggZG9lcyBhIGxpbmVhciBzZWFyY2ggd2l0aCBubyBhbGlnbm1lbnQuCisJICovCisJb2Zmc2V0ID0gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24oYm1wLT5iaXRtYXAsIGJtcC0+aXJxX2NvdW50LCBvcmRlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYm1wLT5sb2NrLCBmbGFncyk7CisKKwlwcl9kZWJ1ZygibXNpX2JpdG1hcDogYWxsb2NhdGVkIDB4JXggKDJeJWQpIGF0IG9mZnNldCAweCV4XG4iLAorCQkgbnVtLCBvcmRlciwgb2Zmc2V0KTsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3ZvaWQgbXNpX2JpdG1hcF9mcmVlX2h3aXJxcyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJICAgIHVuc2lnbmVkIGludCBudW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgb3JkZXIgPSBnZXRfY291bnRfb3JkZXIobnVtKTsKKworCXByX2RlYnVnKCJtc2lfYml0bWFwOiBmcmVlaW5nIDB4JXggKDJeJWQpIGF0IG9mZnNldCAweCV4XG4iLAorCQkgbnVtLCBvcmRlciwgb2Zmc2V0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZibXAtPmxvY2ssIGZsYWdzKTsKKwliaXRtYXBfcmVsZWFzZV9yZWdpb24oYm1wLT5iaXRtYXAsIG9mZnNldCwgb3JkZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJtcC0+bG9jaywgZmxhZ3MpOworfQorCit2b2lkIG1zaV9iaXRtYXBfcmVzZXJ2ZV9od2lycShzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCB1bnNpZ25lZCBpbnQgaHdpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCJtc2lfYml0bWFwOiByZXNlcnZpbmcgaHdpcnEgMHgleFxuIiwgaHdpcnEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJtcC0+bG9jaywgZmxhZ3MpOworCWJpdG1hcF9hbGxvY2F0ZV9yZWdpb24oYm1wLT5iaXRtYXAsIGh3aXJxLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZibXAtPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBtc2lfYml0bWFwX3Jlc2VydmVfZHRfaHdpcnFzIC0gUmVzZXJ2ZSBpcnFzIHNwZWNpZmllZCBpbiB0aGUgZGV2aWNlIHRyZWUuCisgKiBAYm1wOiBwb2ludGVyIHRvIHRoZSBNU0kgYml0bWFwLgorICoKKyAqIExvb2tzIGluIHRoZSBkZXZpY2UgdHJlZSB0byBzZWUgaWYgdGhlcmUgaXMgYSBwcm9wZXJ0eSBzcGVjaWZ5aW5nIHdoaWNoCisgKiBpcnFzIGNhbiBiZSB1c2VkIGZvciBNU0kuIElmIGZvdW5kIHRob3NlIGlycXMgcmVzZXJ2ZWQgaW4gdGhlIGRldmljZSB0cmVlCisgKiBhcmUgcmVzZXJ2ZWQgaW4gdGhlIGJpdG1hcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIDwgMCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IsIGFuZCA+IDAgaWYgbm8gcHJvcGVydHkKKyAqIHdhcyBmb3VuZCBpbiB0aGUgZGV2aWNlIHRyZWUuCisgKiovCitpbnQgbXNpX2JpdG1hcF9yZXNlcnZlX2R0X2h3aXJxcyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wKQoreworCWludCBpLCBqLCBsZW47CisJY29uc3QgdTMyICpwOworCisJaWYgKCFibXAtPm9mX25vZGUpCisJCXJldHVybiAxOworCisJcCA9IG9mX2dldF9wcm9wZXJ0eShibXAtPm9mX25vZGUsICJtc2ktYXZhaWxhYmxlLXJhbmdlcyIsICZsZW4pOworCWlmICghcCkgeworCQlwcl9kZWJ1ZygibXNpX2JpdG1hcDogbm8gbXNpLWF2YWlsYWJsZS1yYW5nZXMgcHJvcGVydHkgIiBcCisJCQkgImZvdW5kIG9uICVzXG4iLCBibXAtPm9mX25vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAxOworCX0KKworCWlmIChsZW4gJSAoMiAqIHNpemVvZih1MzIpKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1zaV9iaXRtYXA6IE1hbGZvcm1lZCBtc2ktYXZhaWxhYmxlLXJhbmdlcyIKKwkJICAgICAgICIgcHJvcGVydHkgb24gJXNcbiIsIGJtcC0+b2Zfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYml0bWFwX2FsbG9jYXRlX3JlZ2lvbihibXAtPmJpdG1hcCwgMCwgZ2V0X2NvdW50X29yZGVyKGJtcC0+aXJxX2NvdW50KSk7CisKKwlzcGluX2xvY2soJmJtcC0+bG9jayk7CisKKwkvKiBGb3JtYXQgaXM6ICg8dTMyIHN0YXJ0PiA8dTMyIGNvdW50PikrICovCisJbGVuIC89IDIgKiBzaXplb2YodTMyKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIHAgKz0gMikgeworCQlmb3IgKGogPSAwOyBqIDwgKihwICsgMSk7IGorKykKKwkJCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihibXAtPmJpdG1hcCwgKnAgKyBqLCAwKTsKKwl9CisKKwlzcGluX3VubG9jaygmYm1wLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitpbnQgbXNpX2JpdG1hcF9hbGxvYyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCB1bnNpZ25lZCBpbnQgaXJxX2NvdW50LAorCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKK3sKKwlpbnQgc2l6ZTsKKworCWlmICghaXJxX2NvdW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNpemUgPSBCSVRTX1RPX0xPTkdTKGlycV9jb3VudCkgKiBzaXplb2YobG9uZyk7CisJcHJfZGVidWcoIm1zaV9iaXRtYXA6IGFsbG9jYXRvciBiaXRtYXAgc2l6ZSBpcyAweCV4IGJ5dGVzXG4iLCBzaXplKTsKKworCWJtcC0+Yml0bWFwID0gemFsbG9jX21heWJlX2Jvb3RtZW0oc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibXAtPmJpdG1hcCkgeworCQlwcl9kZWJ1ZygibXNpX2JpdG1hcDogRU5PTUVNIGFsbG9jYXRpbmcgYWxsb2NhdG9yIGJpdG1hcCFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBXZSB6YWxsb2MnZWQgdGhlIGJpdG1hcCwgc28gYWxsIGlycXMgYXJlIGZyZWUgYnkgZGVmYXVsdCAqLworCXNwaW5fbG9ja19pbml0KCZibXAtPmxvY2spOworCWJtcC0+b2Zfbm9kZSA9IG9mX25vZGVfZ2V0KG9mX25vZGUpOworCWJtcC0+aXJxX2NvdW50ID0gaXJxX2NvdW50OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXNpX2JpdG1hcF9mcmVlKHN0cnVjdCBtc2lfYml0bWFwICpibXApCit7CisJLyogd2UgY2FuJ3QgZnJlZSB0aGUgYml0bWFwIHdlIGRvbid0IGtub3cgaWYgaXQncyBib290bWVtIGV0Yy4gKi8KKwlvZl9ub2RlX3B1dChibXAtPm9mX25vZGUpOworCWJtcC0+Yml0bWFwID0gTlVMTDsKK30KKworI2lmZGVmIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUCisKKyNkZWZpbmUgY2hlY2soeCkJXAorCWlmICghKHgpKSBwcmludGsoIm1zaV9iaXRtYXA6IHRlc3QgZmFpbGVkIGF0IGxpbmUgJWRcbiIsIF9fTElORV9fKTsKKwordm9pZCB0ZXN0X2Jhc2ljcyh2b2lkKQoreworCXN0cnVjdCBtc2lfYml0bWFwIGJtcDsKKwlpbnQgaSwgc2l6ZSA9IDUxMjsKKworCS8qIENhbid0IGFsbG9jYXRlIGEgYml0bWFwIG9mIDAgaXJxcyAqLworCWNoZWNrKG1zaV9iaXRtYXBfYWxsb2MoJmJtcCwgMCwgTlVMTCkgIT0gMCk7CisKKwkvKiBvZl9ub2RlIG1heSBiZSBOVUxMICovCisJY2hlY2soMCA9PSBtc2lfYml0bWFwX2FsbG9jKCZibXAsIHNpemUsIE5VTEwpKTsKKworCS8qIFNob3VsZCBhbGwgYmUgZnJlZSBieSBkZWZhdWx0ICovCisJY2hlY2soMCA9PSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihibXAuYml0bWFwLCBzaXplLAorCQkJCQkgICBnZXRfY291bnRfb3JkZXIoc2l6ZSkpKTsKKwliaXRtYXBfcmVsZWFzZV9yZWdpb24oYm1wLmJpdG1hcCwgMCwgZ2V0X2NvdW50X29yZGVyKHNpemUpKTsKKworCS8qIFdpdGggbm8gbm9kZSwgdGhlcmUncyBubyBtc2ktYXZhaWxhYmxlLXJhbmdlcywgc28gZXhwZWN0ID4gMCAqLworCWNoZWNrKG1zaV9iaXRtYXBfcmVzZXJ2ZV9kdF9od2lycXMoJmJtcCkgPiAwKTsKKworCS8qIFNob3VsZCBhbGwgc3RpbGwgYmUgZnJlZSAqLworCWNoZWNrKDAgPT0gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24oYm1wLmJpdG1hcCwgc2l6ZSwKKwkJCQkJICAgZ2V0X2NvdW50X29yZGVyKHNpemUpKSk7CisJYml0bWFwX3JlbGVhc2VfcmVnaW9uKGJtcC5iaXRtYXAsIDAsIGdldF9jb3VudF9vcmRlcihzaXplKSk7CisKKwkvKiBDaGVjayB3ZSBjYW4gZmlsbCBpdCB1cCBhbmQgdGhlbiBubyBtb3JlICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJY2hlY2sobXNpX2JpdG1hcF9hbGxvY19od2lycXMoJmJtcCwgMSkgPj0gMCk7CisKKwljaGVjayhtc2lfYml0bWFwX2FsbG9jX2h3aXJxcygmYm1wLCAxKSA8IDApOworCisJLyogU2hvdWxkIGFsbCBiZSBhbGxvY2F0ZWQgKi8KKwljaGVjayhiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihibXAuYml0bWFwLCBzaXplLCAwKSA8IDApOworCisJLyogQW5kIGlmIHdlIGZyZWUgb25lIHdlIGNhbiB0aGVuIGFsbG9jYXRlIGFub3RoZXIgKi8KKwltc2lfYml0bWFwX2ZyZWVfaHdpcnFzKCZibXAsIHNpemUgLyAyLCAxKTsKKwljaGVjayhtc2lfYml0bWFwX2FsbG9jX2h3aXJxcygmYm1wLCAxKSA9PSBzaXplIC8gMik7CisKKwltc2lfYml0bWFwX2ZyZWUoJmJtcCk7CisKKwkvKiBDbGllbnRzIG1heSBjaGVjayBiaXRtYXAgPT0gTlVMTCBmb3IgIm5vdC1hbGxvY2F0ZWQiICovCisJY2hlY2soYm1wLmJpdG1hcCA9PSBOVUxMKTsKKworCWtmcmVlKGJtcC5iaXRtYXApOworfQorCit2b2lkIHRlc3Rfb2Zfbm9kZSh2b2lkKQoreworCXUzMiBwcm9wX2RhdGFbXSA9IHsgMTAsIDEwLCAyNSwgMywgNDAsIDEsIDEwMCwgMTAwLCAyMDAsIDIwIH07CisJY29uc3QgY2hhciAqZXhwZWN0ZWRfc3RyID0gIjAtOSwyMC0yNCwyOC0zOSw0MS05OSwyMjAtMjU1IjsKKwljaGFyICpwcm9wX25hbWUgPSAibXNpLWF2YWlsYWJsZS1yYW5nZXMiOworCWNoYXIgKm5vZGVfbmFtZSA9ICIvZmFrZW5vZGUiOworCXN0cnVjdCBkZXZpY2Vfbm9kZSBvZl9ub2RlOworCXN0cnVjdCBwcm9wZXJ0eSBwcm9wOworCXN0cnVjdCBtc2lfYml0bWFwIGJtcDsKKwlpbnQgc2l6ZSA9IDI1NjsKKwlERUNMQVJFX0JJVE1BUChleHBlY3RlZCwgc2l6ZSk7CisKKwkvKiBUaGVyZSBzaG91bGQgcmVhbGx5IGJlIGEgc3RydWN0IGRldmljZV9ub2RlIGFsbG9jYXRvciAqLworCW1lbXNldCgmb2Zfbm9kZSwgMCwgc2l6ZW9mKG9mX25vZGUpKTsKKwlrcmVmX2luaXQoJm9mX25vZGUua3JlZik7CisJb2Zfbm9kZS5mdWxsX25hbWUgPSBub2RlX25hbWU7CisKKwljaGVjaygwID09IG1zaV9iaXRtYXBfYWxsb2MoJmJtcCwgc2l6ZSwgJm9mX25vZGUpKTsKKworCS8qIE5vIG1zaS1hdmFpbGFibGUtcmFuZ2VzLCBzbyBleHBlY3QgPiAwICovCisJY2hlY2sobXNpX2JpdG1hcF9yZXNlcnZlX2R0X2h3aXJxcygmYm1wKSA+IDApOworCisJLyogU2hvdWxkIGFsbCBzdGlsbCBiZSBmcmVlICovCisJY2hlY2soMCA9PSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihibXAuYml0bWFwLCBzaXplLAorCQkJCQkgICBnZXRfY291bnRfb3JkZXIoc2l6ZSkpKTsKKwliaXRtYXBfcmVsZWFzZV9yZWdpb24oYm1wLmJpdG1hcCwgMCwgZ2V0X2NvdW50X29yZGVyKHNpemUpKTsKKworCS8qIE5vdyBjcmVhdGUgYSBmYWtlIG1zaS1hdmFpbGFibGUtcmFuZ2VzIHByb3BlcnR5ICovCisKKwkvKiBUaGVyZSBzaG91bGQgcmVhbGx5IC4uIG9oIHdoYXRldmVyICovCisJbWVtc2V0KCZwcm9wLCAwLCBzaXplb2YocHJvcCkpOworCXByb3AubmFtZSA9IHByb3BfbmFtZTsKKwlwcm9wLnZhbHVlID0gJnByb3BfZGF0YTsKKwlwcm9wLmxlbmd0aCA9IHNpemVvZihwcm9wX2RhdGEpOworCisJb2Zfbm9kZS5wcm9wZXJ0aWVzID0gJnByb3A7CisKKwkvKiBtc2ktYXZhaWxhYmxlLXJhbmdlcywgc28gZXhwZWN0ID09IDAgKi8KKwljaGVjayhtc2lfYml0bWFwX3Jlc2VydmVfZHRfaHdpcnFzKCZibXApID09IDApOworCisJLyogQ2hlY2sgd2UgZ290IHRoZSBleHBlY3RlZCByZXN1bHQgKi8KKwljaGVjaygwID09IGJpdG1hcF9wYXJzZWxpc3QoZXhwZWN0ZWRfc3RyLCBleHBlY3RlZCwgc2l6ZSkpOworCWNoZWNrKGJpdG1hcF9lcXVhbChleHBlY3RlZCwgYm1wLmJpdG1hcCwgc2l6ZSkpOworCisJbXNpX2JpdG1hcF9mcmVlKCZibXApOworCWtmcmVlKGJtcC5iaXRtYXApOworfQorCitpbnQgbXNpX2JpdG1hcF9zZWxmdGVzdCh2b2lkKQoreworCXByaW50ayhLRVJOX0RFQlVHICJSdW5uaW5nIE1TSSBiaXRtYXAgc2VsZi10ZXN0cyAuLi5cbiIpOworCisJdGVzdF9iYXNpY3MoKTsKKwl0ZXN0X29mX25vZGUoKTsKKworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChtc2lfYml0bWFwX3NlbGZ0ZXN0KTsKKyNlbmRpZiAvKiBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYwppbmRleCBmYjM2OGRmLi5kM2U0ZDYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYwpAQCAtMzAsMjQgKzMwLDE5IEBACiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vZGNyLmg+CiAjaW5jbHVkZSA8YXNtL2Rjci1yZWdzLmg+CisjaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KIAogI2luY2x1ZGUgInBwYzR4eF9wY2kuaCIKIAogc3RhdGljIGludCBkbWFfb2Zmc2V0X3NldDsKIAotLyogTW92ZSB0aGF0IHRvIGEgdXNlYWJsZSBoZWFkZXIgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFsX21lbW9yeTsKLQogI2RlZmluZSBVNjRfVE9fVTMyX0xPVyh2YWwpCSgodTMyKSgodmFsKSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCkpCiAjZGVmaW5lIFU2NF9UT19VMzJfSElHSCh2YWwpCSgodTMyKSgodmFsKSA+PiAzMikpCiAKLSNpZmRlZiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUCi0jZGVmaW5lIFJFU19UT19VMzJfTE9XKHZhbCkJVTY0X1RPX1UzMl9MT1codmFsKQotI2RlZmluZSBSRVNfVE9fVTMyX0hJR0godmFsKQlVNjRfVE9fVTMyX0hJR0godmFsKQotI2Vsc2UKLSNkZWZpbmUgUkVTX1RPX1UzMl9MT1codmFsKQkodmFsKQotI2RlZmluZSBSRVNfVE9fVTMyX0hJR0godmFsKQkoMCkKLSNlbmRpZgorI2RlZmluZSBSRVNfVE9fVTMyX0xPVyh2YWwpCVwKKwkoKHNpemVvZihyZXNvdXJjZV9zaXplX3QpID4gc2l6ZW9mKHUzMikpID8gVTY0X1RPX1UzMl9MT1codmFsKSA6ICh2YWwpKQorI2RlZmluZSBSRVNfVE9fVTMyX0hJR0godmFsKQlcCisJKChzaXplb2YocmVzb3VyY2Vfc2l6ZV90KSA+IHNpemVvZih1MzIpKSA/IFU2NF9UT19VMzJfSElHSCh2YWwpIDogKDApKQogCiBzdGF0aWMgaW5saW5lIGludCBwcGM0NDBzcGVfcmV2QSh2b2lkKQogewpAQCAtMTA1LDcgKzEwMCw4IEBACiAKIAkvKiBEZWZhdWx0ICovCiAJcmVzLT5zdGFydCA9IDA7Ci0JcmVzLT5lbmQgPSBzaXplID0gMHg4MDAwMDAwMDsKKwlzaXplID0gMHg4MDAwMDAwMDsKKwlyZXMtPmVuZCA9IHNpemUgLSAxOwogCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CiAKIAkvKiBHZXQgZG1hLXJhbmdlcyBwcm9wZXJ0eSAqLwpAQCAtMTQ1LDEyICsxNDEsMTEgQEAKIAogCQkvKiBVc2UgdGhhdCAqLwogCQlyZXMtPnN0YXJ0ID0gcGNpX2FkZHI7Ci0jaWZuZGVmIENPTkZJR19SRVNPVVJDRVNfNjRCSVQKIAkJLyogQmV3YXJlIG9mIDMyIGJpdHMgcmVzb3VyY2VzICovCi0JCWlmICgocGNpX2FkZHIgKyBzaXplKSA+IDB4MTAwMDAwMDAwdWxsKQorCQlpZiAoc2l6ZW9mKHJlc291cmNlX3NpemVfdCkgPT0gc2l6ZW9mKHUzMikgJiYKKwkJICAgIChwY2lfYWRkciArIHNpemUpID4gMHgxMDAwMDAwMDB1bGwpCiAJCQlyZXMtPmVuZCA9IDB4ZmZmZmZmZmY7CiAJCWVsc2UKLSNlbmRpZgogCQkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgc2l6ZSAtIDE7CiAJCWJyZWFrOwogCX0KQEAgLTE2NywxMyArMTYyLDEzIEBACiAJICovCiAJaWYgKHNpemUgPCB0b3RhbF9tZW1vcnkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZG1hLXJhbmdlcyB0b28gc21hbGwgIgotCQkgICAgICAgIihzaXplPSVsbHggdG90YWxfbWVtb3J5PSVseClcbiIsCi0JCSAgICAgICBob3NlLT5kbi0+ZnVsbF9uYW1lLCBzaXplLCB0b3RhbF9tZW1vcnkpOworCQkgICAgICAgIihzaXplPSVsbHggdG90YWxfbWVtb3J5PSVsbHgpXG4iLAorCQkgICAgICAgaG9zZS0+ZG4tPmZ1bGxfbmFtZSwgc2l6ZSwgKHU2NCl0b3RhbF9tZW1vcnkpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAogCS8qIENoZWNrIHdlIGFyZSBhIHBvd2VyIG9mIDIgc2l6ZSBhbmQgdGhhdCBiYXNlIGlzIGEgbXVsdGlwbGUgb2Ygc2l6ZSovCi0JaWYgKCFpc19wb3dlcl9vZl8yKHNpemUpIHx8CisJaWYgKChzaXplICYgKHNpemUgLSAxKSkgIT0gMCAgfHwKIAkgICAgKHJlcy0+c3RhcnQgJiAoc2l6ZSAtIDEpKSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRtYS1yYW5nZXMgdW5hbGlnbmVkXG4iLAogCQkgICAgICAgaG9zZS0+ZG4tPmZ1bGxfbmFtZSk7CkBAIC0yNzcsOSArMjcyLDE2IEBACiAJY29uc3QgaW50ICpidXNfcmFuZ2U7CiAJaW50IHByaW1hcnkgPSAwOwogCisJLyogQ2hlY2sgaWYgZGV2aWNlIGlzIGVuYWJsZWQgKi8KKwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQb3J0IGRpc2FibGVkIHZpYSBkZXZpY2UtdHJlZVxuIiwKKwkJICAgICAgIG5wLT5mdWxsX25hbWUpOworCQlyZXR1cm47CisJfQorCiAJLyogRmV0Y2ggY29uZmlnIHNwYWNlIHJlZ2lzdGVycyBhZGRyZXNzICovCiAJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyc3JjX2NmZykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczpDYW4ndCBnZXQgUENJIGNvbmZpZyByZWdpc3RlciBiYXNlICEiLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4ndCBnZXQgUENJIGNvbmZpZyByZWdpc3RlciBiYXNlICEiLAogCQkgICAgICAgbnAtPmZ1bGxfbmFtZSk7CiAJCXJldHVybjsKIAl9CkBAIC04MTAsNyArODEyLDcgQEAKIAlzd2l0Y2ggKHBvcnQtPmluZGV4KSB7CiAJY2FzZSAwOgogCQltdGRjcmkoU0RSMCwgUEVTRFIwXzQ2MEVYX0wwQ0RSQ1RMLCAweDAwMDAzMjMwKTsKLQkJbXRkY3JpKFNEUjAsIFBFU0RSMF80NjBFWF9MMERSViwgMHgwMDAwMDEzNik7CisJCW10ZGNyaShTRFIwLCBQRVNEUjBfNDYwRVhfTDBEUlYsIDB4MDAwMDAxMzApOwogCQltdGRjcmkoU0RSMCwgUEVTRFIwXzQ2MEVYX0wwQ0xLLCAweDAwMDAwMDA2KTsKIAogCQltdGRjcmkoU0RSMCwgUEVTRFIwXzQ2MEVYX1BIWV9DVExfUlNULDB4MTAwMDAwMDApOwpAQCAtODIxLDEwICs4MjMsMTAgQEAKIAkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMUNEUkNUTCwgMHgwMDAwMzIzMCk7CiAJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDJDRFJDVEwsIDB4MDAwMDMyMzApOwogCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wzQ0RSQ1RMLCAweDAwMDAzMjMwKTsKLQkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMERSViwgMHgwMDAwMDEzNik7Ci0JCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDFEUlYsIDB4MDAwMDAxMzYpOwotCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wyRFJWLCAweDAwMDAwMTM2KTsKLQkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MM0RSViwgMHgwMDAwMDEzNik7CisJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDBEUlYsIDB4MDAwMDAxMzApOworCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wxRFJWLCAweDAwMDAwMTMwKTsKKwkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMkRSViwgMHgwMDAwMDEzMCk7CisJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDNEUlYsIDB4MDAwMDAxMzApOwogCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wwQ0xLLCAweDAwMDAwMDA2KTsKIAkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMUNMSywgMHgwMDAwMDAwNik7CiAJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDJDTEssIDB4MDAwMDAwMDYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL0tjb25maWcKaW5kZXggMWNlNTQ2NC4uNzZmZmJjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9LY29uZmlnCkBAIC0yNCwxMiArMjQsMyBAQAogCWJvb2wKIAloZWxwCiAJICBRRSBVU0IgSG9zdCBDb250cm9sbGVyIHN1cHBvcnQKLQotY29uZmlnIFFFX0dQSU8KLQlib29sICJRRSBHUElPIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBRVUlDQ19FTkdJTkUKLQlzZWxlY3QgR0VORVJJQ19HUElPCi0Jc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UncmUgZ29pbmcgdG8gdXNlIGhhcmR3YXJlIHRoYXQgY29ubmVjdHMgdG8gdGhlCi0JICBRRSBHUElPcy4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggNGMwMzA0OS4uNzBiNzY0NSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTc4LDYgKzc4LDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiQmFzZSBzZXR1cCIKIAogY29tbWVudCAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgpAQCAtNTY1LDEzICs1NjcsMTYgQEAKIAkgIFJlZmVyIHRvIDxmaWxlOkRvY3VtZW50YXRpb24vczM5MC96ZmNwZHVtcC50eHQ+IGZvciBtb3JlIGRldGFpbHMgb24gdGhpcy4KIAogY29uZmlnIFMzOTBfR1VFU1QKLWJvb2wgInMzOTAgZ3Vlc3Qgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKK2Jvb2wgInMzOTAgZ3Vlc3Qgc3VwcG9ydCBmb3IgS1ZNIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gNjRCSVQgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFZJUlRJTwogCXNlbGVjdCBWSVJUSU9fUklORwogCXNlbGVjdCBWSVJUSU9fQ09OU09MRQogCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gdGhlIGtlcm5lbCB1bmRlciBzMzkwIGxpbnV4CisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIHRoZSBrZXJuZWwgYXMgYSBndWVzdCB1bmRlcgorCSAgdGhlIEtWTSBoeXBlcnZpc29yLiBUaGlzIHdpbGwgYWRkIGRldGVjdGlvbiBmb3IgS1ZNIGFzIHdlbGwgIGFzIGEKKwkgIHZpcnRpbyB0cmFuc3BvcnQuIElmIEtWTSBpcyBkZXRlY3RlZCwgdGhlIHZpcnRpbyBjb25zb2xlIHdpbGwgYmUKKwkgIHRoZSBkZWZhdWx0IGNvbnNvbGUuCiBlbmRtZW51CiAKIHNvdXJjZSAibmV0L0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYyBiL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCmluZGV4IDczODM3ODEuLjM2MzEzODAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCkBAIC0yMTksNyArMjE5LDcgQEAKIAogZW51bSB7IG9wdF91aWQsIG9wdF9naWQsIG9wdF9lcnIgfTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgaHlwZnNfdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgaHlwZnNfdG9rZW5zID0gewogCXtvcHRfdWlkLCAidWlkPSV1In0sCiAJe29wdF9naWQsICJnaWQ9JXUifSwKIAl7b3B0X2VyciwgTlVMTH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCAzY2FkNTY5Li4yNjE3ODVhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xNjYsMTMgKzE2NiwxMSBAQAogI2RlZmluZSBFTEZfUExBVEZPUk0gKGVsZl9wbGF0Zm9ybSkKIAogI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikJCQlcCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkJCQkJXAogZG8gewkJCQkJCQlcCi0JaWYgKGliY3MyKQkJCQkJXAotCQlzZXRfcGVyc29uYWxpdHkoUEVSX1NWUjQpOwkJXAotCWVsc2UgaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQlcCisJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQlcCiAJCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpOwkJXAogCWlmICgoZXgpLmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCVwKIAkJc2V0X3RocmVhZF9mbGFnKFRJRl8zMUJJVCk7CQlcCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RhdGZzLmgKaW5kZXggMDk5YTQ1NS4uMDZjYzcwMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0YXRmcy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdGF0ZnMuaApAQCAtMTIsMTkgKzEyLDE2IEBACiAjaWZuZGVmIF9fczM5MHhfXwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgogI2Vsc2UKKy8qCisgKiBXZSBjYW4ndCB1c2UgPGFzbS1nZW5lcmljL3N0YXRmcy5oPiBiZWNhdXNlIGluIDY0LWJpdCBtb2RlCisgKiB3ZSBtaXggaW50cyBvZiBkaWZmZXJlbnQgc2l6ZXMgaW4gb3VyIHN0cnVjdCBzdGF0ZnMuCisgKi8KIAogI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KIHR5cGVkZWYgX19rZXJuZWxfZnNpZF90CWZzaWRfdDsKLQogI2VuZGlmCiAKLS8qCi0gKiBUaGlzIGlzIHVnbHkgLS0gd2UncmUgYWxyZWFkeSA2NC1iaXQgY2xlYW4sIHNvIGp1c3QgZHVwbGljYXRlIHRoZSAKLSAqIGRlZmluaXRpb25zLgotICovCiBzdHJ1Y3Qgc3RhdGZzIHsKIAlpbnQgIGZfdHlwZTsKIAlpbnQgIGZfYnNpemU7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGVhNDBhOWQuLmRlM2ZhZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC05OSw2ICs5OSw3IEBACiAjZGVmaW5lIFRJRl8zMUJJVAkJMTgJLyogMzJiaXQgcHJvY2VzcyAqLyAKICNkZWZpbmUgVElGX01FTURJRQkJMTkKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwkyMAkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCgpICovCisjZGVmaW5lIFRJRl9GUkVFWkUJCTIxCS8qIHRocmVhZCBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCkBAIC0xMTIsNiArMTEzLDcgQEAKICNkZWZpbmUgX1RJRl9VU0VERlBVCQkoMTw8VElGX1VTRURGUFUpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl8zMUJJVAkJKDE8PFRJRl8zMUJJVCkKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguYwppbmRleCA5OGUyNDZkLi40NjQ2MzgyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmMKQEAgLTI3OSwyMiArMjc5LDYgQEAKIAlyZXR1cm4gaGlnaDJsb3dnaWQoY3VycmVudC0+ZWdpZCk7CiB9CiAKLS8qIDMyLWJpdCB0aW1ldmFsIGFuZCByZWxhdGVkIGZsb3RzYW0uICAqLwotCi1zdGF0aWMgaW5saW5lIGxvbmcgZ2V0X3R2MzIoc3RydWN0IHRpbWV2YWwgKm8sIHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKmkpCi17Ci0JcmV0dXJuICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBvLCBzaXplb2YoKm8pKSB8fAotCQkoX19nZXRfdXNlcihvLT50dl9zZWMsICZpLT50dl9zZWMpIHx8Ci0JCSBfX2dldF91c2VyKG8tPnR2X3VzZWMsICZpLT50dl91c2VjKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgcHV0X3R2MzIoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqbywgc3RydWN0IHRpbWV2YWwgKmkpCi17Ci0JcmV0dXJuICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgbywgc2l6ZW9mKCpvKSkgfHwKLQkJKF9fcHV0X3VzZXIoaS0+dHZfc2VjLCAmby0+dHZfc2VjKSB8fAotCQkgX19wdXRfdXNlcihpLT50dl91c2VjLCAmby0+dHZfdXNlYykpKTsKLX0KLQogLyoKICAqIHN5czMyX2lwYygpIGlzIHRoZSBkZS1tdWx0aXBsZXhlciBmb3IgdGhlIFN5c1YgSVBDIGNhbGxzIGluIDMyYml0IGVtdWxhdGlvbi4KICAqCkBAIC0zNjIsNDEgKzM0Niw2IEBACiAJCXJldHVybiBzeXNfZnRydW5jYXRlKGZkLCAoaGlnaCA8PCAzMikgfCBsb3cpOwogfQogCi1pbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICpzdGF0YnVmKQotewotCWNvbXBhdF9pbm9fdCBpbm87Ci0JaW50IGVycjsKLQotCWlmICghb2xkX3ZhbGlkX2RldihzdGF0LT5kZXYpIHx8ICFvbGRfdmFsaWRfZGV2KHN0YXQtPnJkZXYpKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWlubyA9IHN0YXQtPmlubzsKLQlpZiAoc2l6ZW9mKGlubykgPCBzaXplb2Yoc3RhdC0+aW5vKSAmJiBpbm8gIT0gc3RhdC0+aW5vKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWVyciA9IHB1dF91c2VyKG9sZF9lbmNvZGVfZGV2KHN0YXQtPmRldiksICZzdGF0YnVmLT5zdF9kZXYpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5pbm8sICZzdGF0YnVmLT5zdF9pbm8pOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5tb2RlLCAmc3RhdGJ1Zi0+c3RfbW9kZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm5saW5rLCAmc3RhdGJ1Zi0+c3RfbmxpbmspOwotCWVyciB8PSBwdXRfdXNlcihoaWdoMmxvd3VpZChzdGF0LT51aWQpLCAmc3RhdGJ1Zi0+c3RfdWlkKTsKLQllcnIgfD0gcHV0X3VzZXIoaGlnaDJsb3dnaWQoc3RhdC0+Z2lkKSwgJnN0YXRidWYtPnN0X2dpZCk7Ci0JZXJyIHw9IHB1dF91c2VyKG9sZF9lbmNvZGVfZGV2KHN0YXQtPnJkZXYpLCAmc3RhdGJ1Zi0+c3RfcmRldik7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPnNpemUsICZzdGF0YnVmLT5zdF9zaXplKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+YXRpbWUudHZfc2VjLCAmc3RhdGJ1Zi0+c3RfYXRpbWUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5hdGltZS50dl9uc2VjLCAmc3RhdGJ1Zi0+c3RfYXRpbWVfbnNlYyk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm10aW1lLnR2X3NlYywgJnN0YXRidWYtPnN0X210aW1lKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfbnNlYywgJnN0YXRidWYtPnN0X210aW1lX25zZWMpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5jdGltZS50dl9zZWMsICZzdGF0YnVmLT5zdF9jdGltZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmN0aW1lLnR2X25zZWMsICZzdGF0YnVmLT5zdF9jdGltZV9uc2VjKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+Ymxrc2l6ZSwgJnN0YXRidWYtPnN0X2Jsa3NpemUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5ibG9ja3MsICZzdGF0YnVmLT5zdF9ibG9ja3MpOwotLyogZml4bWUKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPl9fdW51c2VkNFswXSk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5fX3VudXNlZDRbMV0pOwotKi8KLQlyZXR1cm4gZXJyOwotfQotCiBhc21saW5rYWdlIGxvbmcgc3lzMzJfc2NoZWRfcnJfZ2V0X2ludGVydmFsKGNvbXBhdF9waWRfdCBwaWQsCiAJCQkJc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKmludGVydmFsKQogewpAQCAtNTU3LDU3ICs1MDYsNiBAQAogCiAjZW5kaWYgIC8qIENPTkZJR19NT0RVTEVTICovCiAKLS8qIFRyYW5zbGF0aW9ucyBkdWUgdG8gdGltZV90IHNpemUgZGlmZmVyZW5jZXMuICBXaGljaCBhZmZlY3RzIGFsbAotICAgc29ydHMgb2YgdGhpbmdzLCBsaWtlIHRpbWV2YWwgYW5kIGl0aW1lcnZhbC4gICovCi0KLWV4dGVybiBzdHJ1Y3QgdGltZXpvbmUgc3lzX3R6OwotCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfZ2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlpZiAodHYpIHsKLQkJc3RydWN0IHRpbWV2YWwga3R2OwotCQlkb19nZXR0aW1lb2ZkYXkoJmt0dik7Ci0JCWlmIChwdXRfdHYzMih0diwgJmt0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIodHosICZzeXNfdHosIHNpemVvZihzeXNfdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGdldF90czMyKHN0cnVjdCB0aW1lc3BlYyAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKLXsKLQlsb25nIHVzZWM7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgaSwgc2l6ZW9mKCppKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChfX2dldF91c2VyKG8tPnR2X3NlYywgJmktPnR2X3NlYykpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChfX2dldF91c2VyKHVzZWMsICZpLT50dl91c2VjKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jby0+dHZfbnNlYyA9IHVzZWMgKiAxMDAwOwotCXJldHVybiAwOwotfQotCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfc2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlzdHJ1Y3QgdGltZXNwZWMga3RzOwotCXN0cnVjdCB0aW1lem9uZSBrdHo7Ci0KLSAJaWYgKHR2KSB7Ci0JCWlmIChnZXRfdHMzMigma3RzLCB0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigma3R6LCB0eiwgc2l6ZW9mKGt0eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIGRvX3N5c19zZXR0aW1lb2ZkYXkodHYgPyAma3RzIDogTlVMTCwgdHogPyAma3R6IDogTlVMTCk7Ci19Ci0KIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9wcmVhZDY0KHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKnVidWYsCiAJCQkJc2l6ZV90IGNvdW50LCB1MzIgcG9zaGksIHUzMiBwb3NsbykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmggYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5oCmluZGV4IDA1Zjg1MTYuLjgzNmEyODggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmgKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguaApAQCAtMjAyLDEwICsyMDIsNiBAQAogbG9uZyBzeXMzMl9pbml0X21vZHVsZSh2b2lkIF9fdXNlciAqdW1vZCwgdW5zaWduZWQgbG9uZyBsZW4sCiAJCSAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MpOwogbG9uZyBzeXMzMl9kZWxldGVfbW9kdWxlKGNvbnN0IGNoYXIgX191c2VyICpuYW1lX3VzZXIsIHVuc2lnbmVkIGludCBmbGFncyk7Ci1sb25nIHN5czMyX2dldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKLQkJCXN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KTsKLWxvbmcgc3lzMzJfc2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LAotCQkJc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopOwogbG9uZyBzeXMzMl9wcmVhZDY0KHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjb3VudCwKIAkJICAgdTMyIHBvc2hpLCB1MzIgcG9zbG8pOwogbG9uZyBzeXMzMl9wd3JpdGU2NCh1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCmluZGV4IGVlNTFjYTkuLmZjMmM5NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKQEAgLTMzMiwxNyArMzMyLDE3IEBACiAJbGxndHIJJXIzLCVyMwkJCSMgc3RydWN0IHJ1c2FnZV9lbXUzMSAqCiAJamcJY29tcGF0X3N5c19nZXRydXNhZ2UJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibAlzeXMzMl9nZXR0aW1lb2ZkYXlfd3JhcHBlcgotc3lzMzJfZ2V0dGltZW9mZGF5X3dyYXBwZXI6CisJLmdsb2JsCWNvbXBhdF9zeXNfZ2V0dGltZW9mZGF5X3dyYXBwZXIKK2NvbXBhdF9zeXNfZ2V0dGltZW9mZGF5X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgc3RydWN0IHRpbWV2YWxfZW11MzEgKgogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCB0aW1lem9uZSAqCi0JamcJc3lzMzJfZ2V0dGltZW9mZGF5CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCisJamcJY29tcGF0X3N5c19nZXR0aW1lb2ZkYXkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibAlzeXMzMl9zZXR0aW1lb2ZkYXlfd3JhcHBlcgotc3lzMzJfc2V0dGltZW9mZGF5X3dyYXBwZXI6CisJLmdsb2JsCWNvbXBhdF9zeXNfc2V0dGltZW9mZGF5X3dyYXBwZXIKK2NvbXBhdF9zeXNfc2V0dGltZW9mZGF5X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgc3RydWN0IHRpbWV2YWxfZW11MzEgKgogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCB0aW1lem9uZSAqCi0JamcJc3lzMzJfc2V0dGltZW9mZGF5CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCisJamcJY29tcGF0X3N5c19zZXR0aW1lb2ZkYXkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAogCS5nbG9ibAlzeXMzMl9nZXRncm91cHMxNl93cmFwcGVyCiBzeXMzMl9nZXRncm91cHMxNl93cmFwcGVyOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCmluZGV4IDNhZTMwMzkuLjJkNjE3ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKQEAgLTg2LDggKzg2LDggQEAKIFNZU0NBTEwoc3lzX3NldHJsaW1pdCxzeXNfc2V0cmxpbWl0LGNvbXBhdF9zeXNfc2V0cmxpbWl0X3dyYXBwZXIpCS8qIDc1ICovCiBTWVNDQUxMKHN5c19vbGRfZ2V0cmxpbWl0LHN5c19nZXRybGltaXQsY29tcGF0X3N5c19vbGRfZ2V0cmxpbWl0X3dyYXBwZXIpCiBTWVNDQUxMKHN5c19nZXRydXNhZ2Usc3lzX2dldHJ1c2FnZSxjb21wYXRfc3lzX2dldHJ1c2FnZV93cmFwcGVyKQotU1lTQ0FMTChzeXNfZ2V0dGltZW9mZGF5LHN5c19nZXR0aW1lb2ZkYXksc3lzMzJfZ2V0dGltZW9mZGF5X3dyYXBwZXIpCi1TWVNDQUxMKHN5c19zZXR0aW1lb2ZkYXksc3lzX3NldHRpbWVvZmRheSxzeXMzMl9zZXR0aW1lb2ZkYXlfd3JhcHBlcikKK1NZU0NBTEwoc3lzX2dldHRpbWVvZmRheSxzeXNfZ2V0dGltZW9mZGF5LGNvbXBhdF9zeXNfZ2V0dGltZW9mZGF5X3dyYXBwZXIpCitTWVNDQUxMKHN5c19zZXR0aW1lb2ZkYXksc3lzX3NldHRpbWVvZmRheSxjb21wYXRfc3lzX3NldHRpbWVvZmRheV93cmFwcGVyKQogU1lTQ0FMTChzeXNfZ2V0Z3JvdXBzMTYsc3lzX25pX3N5c2NhbGwsc3lzMzJfZ2V0Z3JvdXBzMTZfd3JhcHBlcikJLyogODAgb2xkIGdldGdyb3VwczE2IHN5c2NhbGwgKi8KIFNZU0NBTEwoc3lzX3NldGdyb3VwczE2LHN5c19uaV9zeXNjYWxsLHN5czMyX3NldGdyb3VwczE2X3dyYXBwZXIpCS8qIG9sZCBzZXRncm91cHMxNiBzeXNjYWxsICovCiBOSV9TWVNDQUxMCQkJCQkJCS8qIG9sZCBzZWxlY3Qgc3lzY2FsbCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwppbmRleCBkMWZhZjVjLi5jY2U0MGZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYworKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMTU3LDggKzE1Nyw4IEBACiAJaW50IHJjOwogCiAJdmNwdS0+c3RhdC5pbnN0cnVjdGlvbl9zdGZsKys7Ci0JZmFjaWxpdHlfbGlzdCAmPSB+KDFVTDw8MjQpOyAvKiBubyBzdGZsZSAqLwotCWZhY2lsaXR5X2xpc3QgJj0gfigxVUw8PDIzKTsgLyogbm8gbGFyZ2UgcGFnZXMgKi8KKwkvKiBvbmx5IHBhc3MgdGhlIGZhY2lsaXR5IGJpdHMsIHdoaWNoIHdlIGNhbiBoYW5kbGUgKi8KKwlmYWNpbGl0eV9saXN0ICY9IDB4ZmUwMGZmZjM7CiAKIAlyYyA9IGNvcHlfdG9fZ3Vlc3QodmNwdSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzdGZsX2ZhY19saXN0KSwKIAkJCSAgICZmYWNpbGl0eV9saXN0LCBzaXplb2YoZmFjaWxpdHlfbGlzdCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggMTE2OTEzMC4uMTU4YjBkNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC0xODksMTQgKzE4OSwzIEBACiAJcmV0dXJuIHJjOwogfQogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwotCi0jaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKLWludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0KLQlzdGFydF9wZm4gPSBQRk5fRE9XTihzdGFydCk7Ci0JZW5kX3BmbiA9IHN0YXJ0X3BmbiArIFBGTl9ET1dOKHNpemUpOwotCXJldHVybiBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgMTIwICogSFopOwotfQotI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggNTEzMWQ1MC4uY2IyYzg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTIsNiArMTIsNyBAQAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQKKwlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VCiAJaGVscAogCSAgVGhlIFN1cGVySCBpcyBhIFJJU0MgcHJvY2Vzc29yIHRhcmdldGVkIGZvciB1c2UgaW4gZW1iZWRkZWQgc3lzdGVtcwogCSAgYW5kIGNvbnN1bWVyIGVsZWN0cm9uaWNzOyBpdCB3YXMgYWxzbyB1c2VkIGluIHRoZSBTZWdhIERyZWFtY2FzdApAQCAtMjAsNiArMjEsMTAgQEAKIAogY29uZmlnIFNVUEVSSDMyCiAJZGVmX2Jvb2wgIVNVUEVSSDY0CisJc2VsZWN0IEhBVkVfS1BST0JFUworCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMKKwlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSworCXNlbGVjdCBIQVZFX0ZUUkFDRQogCiBjb25maWcgU1VQRVJINjQKIAlkZWZfYm9vbCB5IGlmIENQVV9TSDUKQEAgLTU0LDggKzU5LDExIEBACiBjb25maWcgR0VORVJJQ19JUlFfUFJPQkUKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBHRU5FUklDX0dQSU8KKwlkZWZfYm9vbCBuCisKIGNvbmZpZyBHRU5FUklDX0NBTElCUkFURV9ERUxBWQotCWRlZl9ib29sIHkKKwlib29sCiAKIGNvbmZpZyBHRU5FUklDX0lPTUFQCiAJYm9vbApAQCAtNjYsNiArNzQsOSBAQAogY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlkZWZfYm9vbCBuCiAKK2NvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVAorCWJvb2wKKwogY29uZmlnIEdFTkVSSUNfTE9DS0JSRUFLCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gU01QICYmIFBSRUVNUFQKQEAgLTkyLDYgKzEwMywxMCBAQAogY29uZmlnIExPQ0tERVBfU1VQUE9SVAogCWRlZl9ib29sIHkKIAorY29uZmlnIEhBVkVfTEFURU5DWVRPUF9TVVBQT1JUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gIVNNUAorCiBjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCiAJZGVmX2Jvb2wgbgogCkBAIC0xMDYsNiArMTIxLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiU3lzdGVtIHR5cGUiCiAKICMKQEAgLTMyMyw2ICszNDAsNyBAQAogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1NNUAorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVCBpZiBTTVAKIAogIyBTSDRBTC1EU1AgUHJvY2Vzc29yIFN1cHBvcnQKIApAQCAtNDkwLDcgKzUwOCw2IEBACiBjb25maWcgU0VDQ09NUAogCWJvb2wgIkVuYWJsZSBzZWNjb21wIHRvIHNhZmVseSBjb21wdXRlIHVudHJ1c3RlZCBieXRlY29kZSIKIAlkZXBlbmRzIG9uIFBST0NfRlMKLQlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGtlcm5lbCBmZWF0dXJlIGlzIHVzZWZ1bCBmb3IgbnVtYmVyIGNydW5jaGluZyBhcHBsaWNhdGlvbnMKIAkgIHRoYXQgbWF5IG5lZWQgdG8gY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUgZHVyaW5nIHRoZWlyCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcuZGVidWcgYi9hcmNoL3NoL0tjb25maWcuZGVidWcKaW5kZXggNGQyZDEwMi4uZTZkMmM4YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvc2gvS2NvbmZpZy5kZWJ1ZwpAQCAtODIsNyArODIsNyBAQAogCiBjb25maWcgNEtTVEFDS1MKIAlib29sICJVc2UgNEtiIGZvciBrZXJuZWwgc3RhY2tzIGluc3RlYWQgb2YgOEtiIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIChNTVUgfHwgQlJPS0VOKQorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIChNTVUgfHwgQlJPS0VOKSAmJiAhUEFHRV9TSVpFXzY0S0IKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB0aGUga2VybmVsIHdpbGwgdXNlIGEgNEtiIHN0YWNrc2l6ZSBmb3IgdGhlCiAJICBrZXJuZWwgc3RhY2sgYXR0YWNoZWQgdG8gZWFjaCBwcm9jZXNzL3RocmVhZC4gVGhpcyBmYWNpbGl0YXRlcwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggMDFkODVjNy4uMWY0MDliZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL01ha2VmaWxlCkBAIC03Niw4ICs3NiwxMCBAQAogIyBlcnJvciBtZXNzYWdlcyBkdXJpbmcgbGlua2luZy4KICMKIGlmZGVmIENPTkZJR19TVVBFUkgzMgorVVRTX01BQ0hJTkUJOj0gc2gKIExERkxBR1Nfdm1saW51eAkrPSAtZSBfc3RleHQKIGVsc2UKK1VUU19NQUNISU5FCTo9IHNoNjQKIExERkxBR1Nfdm1saW51eAkrPSAtLWRlZnN5bSBwaHlzX3N0ZXh0PV9zdGV4dC0kKENPTkZJR19QQUdFX09GRlNFVCkgXAogCQkgICAtLWRlZnN5bSBwaHlzX3N0ZXh0X3NobWVkaWE9cGh5c19zdGV4dCsxIFwKIAkJICAgLWUgcGh5c19zdGV4dF9zaG1lZGlhCkBAIC0xMjMsNiArMTI1LDkgQEAKIAkgICAgICQoZmlsdGVyLW91dCAuLCAkKHBhdHN1YnN0ICUsJS8sJChtYWNoZGlyLXkpKSkpCiBlbmRpZgogCisjIENvbW1vbiBtYWNoaW5lIHR5cGUgaGVhZGVycy4gTm90IHBhcnQgb2YgdGhlIGFyY2gvc2gvYm9hcmRzLyBoaWVyYXJjaHkuCittYWNoZGlyLXkJKz0gbWFjaC1jb21tb24KKwogIyBDb21wYW5pb24gY2hpcHMKIGNvcmUtJChDT05GSUdfSEQ2NDQ2WF9TRVJJRVMpCSs9IGFyY2gvc2gvY2NoaXBzL2hkNjQ0NngvCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcgYi9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCmluZGV4IGFlMTk0ODYuLjUwNDY3ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZwpAQCAtMTI4LDYgKzEyOCw3IEBACiAKIGNvbmZpZyBTSF9SU0s3MjAzCiAJYm9vbCAiUlNLNzIwMyIKKwlzZWxlY3QgR0VORVJJQ19HUElPCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDcyMDMKIAogY29uZmlnIFNIX1NESzc3ODAKQEAgLTE2Miw2ICsxNjMsNyBAQAogY29uZmlnIFNIX01JR09SCiAJYm9vbCAiTWlnby1SIgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzIyCisJc2VsZWN0IEdFTkVSSUNfR1BJTwogCWhlbHAKIAkgIFNlbGVjdCBNaWdvLVIgaWYgY29uZmlndXJpbmcgZm9yIHRoZSBTSDc3MjIgTWlnby1SIHBsYXRmb3JtCiAgICAgICAgICAgYnkgUmVuZXNhcyBTeXN0ZW0gU29sdXRpb25zIEFzaWEgUHRlLiBMdGQuCkBAIC0xNjksNiArMTcxLDcgQEAKIGNvbmZpZyBTSF9BUDMyNVJYQQogCWJvb2wgIkFQLTMyNVJYQSIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMworCXNlbGVjdCBHRU5FUklDX0dQSU8KIAloZWxwCiAJICBSZW5lc2FzICJBUC0zMjVSWEEiIHN1cHBvcnQuCiAJICBDb21wYXRpYmxlIHdpdGggQUxHTyBTWVNURU0gQ08uLExURC4gIkFQLTMyMEEiCkBAIC0xODQsNiArMTg3LDEzIEBACiAJYm9vbCAiRURPU0s3NzA1IgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzA1CiAKK2NvbmZpZyBTSF9FRE9TSzc3NjAKKwlib29sICJFRE9TSzc3NjAiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3NjAKKwloZWxwCisJICBTZWxlY3QgaWYgY29uZmlndXJpbmcgZm9yIGEgUmVuZXNhcyBFRE9TSzc3NjAKKwkgIGV2YWx1YXRpb24gYm9hcmQuCisKIGNvbmZpZyBTSF9TSDQyMDJfTUlDUk9ERVYKIAlib29sICJTSDQtMjAyIE1pY3JvRGV2IgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g0XzIwMgpAQCAtMjI4LDYgKzIzOCw3IEBACiBjb25maWcgU0hfTUFHSUNfUEFORUxfUjIKIAlib29sICJNYWdpYyBQYW5lbCBSMiIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMAorCXNlbGVjdCBHRU5FUklDX0dQSU8KIAloZWxwCiAJICBTZWxlY3QgTWFnaWMgUGFuZWwgUjIgaWYgY29uZmlndXJpbmcgZm9yIE1hZ2ljIFBhbmVsIFIyLgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCmluZGV4IDQ2MzAyMmMuLmQ5ZWZhMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCkBAIC02LDMgKzYsNCBAQAogb2JqLSQoQ09ORklHX1NIX1JTSzcyMDMpCSs9IGJvYXJkLXJzazcyMDMubwogb2JqLSQoQ09ORklHX1NIX1NINzc4NUxDUikJKz0gYm9hcmQtc2g3Nzg1bGNyLm8KIG9iai0kKENPTkZJR19TSF9TSE1JTikJCSs9IGJvYXJkLXNobWluLm8KK29iai0kKENPTkZJR19TSF9FRE9TSzc3NjApCSs9IGJvYXJkLWVkb3NrNzc2MC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwppbmRleCBmZDE2MTI1Li43Yzc4NzRlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKQEAgLTE4LDExICsxOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgotI2luY2x1ZGUgPGFzbS9zaF9tb2JpbGVfbGNkYy5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzcyMy5oPgogCiBzdGF0aWMgc3RydWN0IHNtYzkxMXhfcGxhdGRhdGEgc21jOTExeF9pbmZvID0gewogCS5mbGFncyA9IFNNQzkxMVhfVVNFXzMyQklULApAQCAtNTIsMjAgKzU0LDMzIEBACiAJfSwKIH07CiAKKy8qCisgKiBBUDMyMCBhbmQgQVAzMjVSWEEgaGFzIENQTEQgZGF0YSBpbiBOT1IgRmxhc2goMHhBODAwMDAtMHhBQkZGRkYpLgorICogSWYgdGhpcyBhcmVhIGVyYXNlZCwgdGhpcyBib2FyZCBjYW4gbm90IGJvb3QuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBhcDMyNXJ4YV9ub3JfZmxhc2hfcGFydGl0aW9uc1tdID0gewogCXsKLQkJIC5uYW1lID0gInVib290IiwKLQkJIC5vZmZzZXQgPSAwLAotCQkgLnNpemUgPSAoMSAqIDEwMjQgKiAxMDI0KSwKLQkJIC5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCisJCS5uYW1lID0gInVib290IiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gKDEgKiAxMDI0ICogMTAyNCksCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCiAJfSwgewotCQkgLm5hbWUgPSAia2VybmVsIiwKLQkJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCSAuc2l6ZSA9ICgyICogMTAyNCAqIDEwMjQpLAorCQkubmFtZSA9ICJrZXJuZWwiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9ICgyICogMTAyNCAqIDEwMjQpLAogCX0sIHsKLQkJIC5uYW1lID0gIm90aGVyIiwKLQkJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCSAuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5uYW1lID0gImZyZWUtYXJlYTAiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9ICgoNyAqIDEwMjQgKiAxMDI0KSArICg1MTIgKiAxMDI0KSksCisJfSwgeworCQkubmFtZSA9ICJDUExELURhdGEiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCS8qIFJlYWQtb25seSAqLworCQkuc2l6ZSA9ICgxMDI0ICogMTI4ICogMiksCisJfSwgeworCQkubmFtZSA9ICJmcmVlLWFyZWExIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAogCX0sCiB9OwogCkBAIC05NiwxNyArMTExLDcgQEAKICNkZWZpbmUgRlBHQV9MQ0RSRUcJMHhCNDEwMDE4MAogI2RlZmluZSBGUEdBX0JLTFJFRwkweEI0MTAwMjEyCiAjZGVmaW5lIEZQR0FfTENEUkVHX1ZBTAkweDAwMTgKLSNkZWZpbmUgUE9SVF9QSENSCTB4QTQwNTAxMEUKLSNkZWZpbmUgUE9SVF9QTENSCTB4QTQwNTAxMTQKLSNkZWZpbmUgUE9SVF9QTUNSCTB4QTQwNTAxMTYKLSNkZWZpbmUgUE9SVF9QUkNSCTB4QTQwNTAxMUMKLSNkZWZpbmUgUE9SVF9QU0NSCTB4QTQwNTAxMUUKLSNkZWZpbmUgUE9SVF9QWkNSCTB4QTQwNTAxNEMKLSNkZWZpbmUgUE9SVF9ISVpDUkEJMHhBNDA1MDE1OAogI2RlZmluZSBQT1JUX01TRUxDUkIJMHhBNDA1MDE4MgotI2RlZmluZSBQT1JUX1BTRFIJMHhBNDA1MDEzRQotI2RlZmluZSBQT1JUX1BaRFIJMHhBNDA1MDE2QwotI2RlZmluZSBQT1JUX1BTRUxECTB4QTQwNTAxNTQKIAogc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vbih2b2lkICpib2FyZF9kYXRhKQogewpAQCAtMTE2LDggKzEyMSw3IEBACiAJY3RybF9vdXR3KEZQR0FfTENEUkVHX1ZBTCwgRlBHQV9MQ0RSRUcpOwogCiAJLyogYmFja2xpZ2h0ICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BTQ1IpICYgfjB4MDBDMCkgfCAweDQwLCBQT1JUX1BTQ1IpOwotCWN0cmxfb3V0YihjdHJsX2luYihQT1JUX1BTRFIpICYgfjB4MDgsIFBPUlRfUFNEUik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAwKTsKIAljdHJsX291dHcoMHgxMDAsIEZQR0FfQktMUkVHKTsKIH0KIApAQCAtMjgxLDEyICsyODUsODQgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBhcDMyNXJ4YV9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXAzMjVyeGFfZGV2aWNlc19zZXR1cCh2b2lkKQogewotCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjAwIik7IC8qIExDREMgKi8KLQljbGtfYWx3YXlzX2VuYWJsZSgibXN0cDIwMyIpOyAvKiBDRVUgKi8KKwkvKiBMRDMgYW5kIExENCBMRURzICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRYNSwgTlVMTCk7IC8qIFJVTiAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWDUsIDEpOworCWdwaW9fZXhwb3J0KEdQSU9fUFRYNSwgMCk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19QVFg0LCBOVUxMKTsgLyogSU5ESUNBVE9SICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRYNCwgMCk7CisJZ3Bpb19leHBvcnQoR1BJT19QVFg0LCAwKTsKKworCS8qIFNXMSBpbnB1dCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BURjcsIE5VTEwpOyAvKiBNT0RFICovCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QVEY3KTsKKwlncGlvX2V4cG9ydChHUElPX1BURjcsIDApOworCisJLyogTENEQyAqLworCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjAwIik7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE1LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDksIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ4LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDYsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ1LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRExDTEtfUFRSLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REQ0ssIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFZFUFdDLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RWQ1BXQywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVlNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENESFNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERElTUCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERE9OLCBOVUxMKTsKKworCS8qIExDRCBiYWNrbGlnaHQgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVFMzLCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFMzLCAxKTsKKworCS8qIENFVSAqLworCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjAzIik7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0NMSzIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19WRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19IRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19GTEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19DS08sIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EOSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0Q4LCBOVUxMKTsKKworCWdwaW9fcmVxdWVzdChHUElPX1BUWjcsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWjcsIDApOyAvKiBPRV9DQU0gKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVFo2LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFo2LCAwKTsgLyogU1RCWV9DQU0gKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVFo1LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFo1LCAxKTsgLyogUlNUX0NBTSAqLworCWdwaW9fcmVxdWVzdChHUElPX1BUWjQsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWjQsIDApOyAvKiBTQUREUiAqLworCisJY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfTVNFTENSQikgJiB+MHgwMDAxLCBQT1JUX01TRUxDUkIpOwogCiAJcGxhdGZvcm1fcmVzb3VyY2Vfc2V0dXBfbWVtb3J5KCZjZXVfZGV2aWNlLCAiY2V1IiwgNCA8PCAyMCk7CiAKQEAgLTMwMCwxOCArMzc2LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGFwMzI1cnhhX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JLyogTENEQyBjb25maWd1cmF0aW9uICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUEhDUikgJiB+MHhmZmZmLCBQT1JUX1BIQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BMQ1IpICYgfjB4ZmZmZiwgUE9SVF9QTENSKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QTUNSKSAmIH4weGZmZmYsIFBPUlRfUE1DUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFJDUikgJiB+MHgwM2ZmLCBQT1JUX1BSQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQSkgJiB+MHgwMUMwLCBQT1JUX0hJWkNSQSk7Ci0KLQkvKiBDRVUgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSAmIH4weDAwMDEsIFBPUlRfTVNFTENSQik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFNFTEQpICYgfjB4MDAwMywgUE9SVF9QU0VMRCk7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BaQ1IpICYgfjB4ZmYwMCkgfCAweDU1MDAsIFBPUlRfUFpDUik7Ci0JY3RybF9vdXRiKChjdHJsX2luYihQT1JUX1BaRFIpICYgfjB4ZjApIHwgMHgyMCwgUE9SVF9QWkRSKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9hcDMyNXJ4YSBfX2luaXRtdiA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVkb3NrNzc2MC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtZWRvc2s3NzYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkYzA5OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVkb3NrNzc2MC5jCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogUmVuZXNhcyBFdXJvcGUgRURPU0s3NzYwIEJvYXJkIFN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU1BFUyBTb2NpZXRhJyBQcm9nZXR0YXppb25lIEVsZXR0cm9uaWNhIGUgU29mdHdhcmUgTHRkLgorICogQXV0aG9yOiBMdWNhIFNhbnRpbmkgPGx1Y2Euc2FudGluaUBzcGVzb25saW5lLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2kyYy1zaDc3NjAuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworLyogQnVzIHN0YXRlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGZvciBDUzQgYXJlYSAqLworI2RlZmluZSBCU0NfQ1M0QkNSCTB4QTRGRDAwMTAKKyNkZWZpbmUgQlNDX0NTNFdDUgkweEE0RkQwMDMwCisKKyNkZWZpbmUgU01DX0lPQkFTRQkweEEyMDAwMDAwCisjZGVmaW5lIFNNQ19JT19PRkZTRVQJMHgzMDAKKyNkZWZpbmUgU01DX0lPQUREUgkoU01DX0lPQkFTRSArIFNNQ19JT19PRkZTRVQpCisKKyNkZWZpbmUgRVRIRVJORVRfSVJRCTUKKworLyogTk9SIGZsYXNoICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZWRvc2s3NzYwX25vcl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9ICJib290bG9hZGVyIiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gU1pfMjU2SywKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAkvKiBSZWFkLW9ubHkgKi8KKwl9LCB7CisJCS5uYW1lID0gImtlcm5lbCIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gU1pfMk0sCisJfSwgeworCQkubmFtZSA9ICJmcyIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gU1pfMjZNLAorCX0sIHsKKwkJLm5hbWUgPSAib3RoZXIiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGVkb3NrNzc2MF9ub3JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gNCwKKwkucGFydHMJCT0gZWRvc2s3NzYwX25vcl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZWRvc2s3NzYwX25vcl9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWRvc2s3NzYwX25vcl9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIk5PUiBGbGFzaCIsCisJCS5zdGFydAk9IDB4MDAwMDAwMDAsCisJCS5lbmQJPSAweDAwMDAwMDAwICsgU1pfMzJNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWRvc2s3NzYwX25vcl9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5yZXNvdXJjZQk9IGVkb3NrNzc2MF9ub3JfZmxhc2hfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShlZG9zazc3NjBfbm9yX2ZsYXNoX3Jlc291cmNlcyksCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmVkb3NrNzc2MF9ub3JfZmxhc2hfZGF0YSwKKwl9LAorfTsKKworLyogaTJjIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAqLworc3RhdGljIHN0cnVjdCBzaDc3NjBfaTJjX3BsYXRkYXRhIGkyY19wZCA9IHsKKwkuc3BlZWRfa2h6CT0gNDAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3NjBfaTJjMV9yZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IFNINzc2MF9JMkMxX01NSU8sCisJCS5lbmQJPSBTSDc3NjBfSTJDMV9NTUlPRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LHsKKwkJLnN0YXJ0CT0gU0g3NzYwX0kyQzFfSVJRLAorCQkuZW5kCT0gU0g3NzYwX0kyQzFfSVJRLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2g3NzYwX2kyYzFfZGV2ID0geworCS5kZXYgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmkyY19wZCwKKwl9LAorCisJLm5hbWUJCT0gU0g3NzYwX0kyQ19ERVZOQU1FLAorCS5pZAkJPSAxLAorCS5yZXNvdXJjZQk9IHNoNzc2MF9pMmMxX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzYwX2kyYzFfcmVzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzYwX2kyYzBfcmVzW10gPSB7CisJeworCQkuc3RhcnQJPSBTSDc3NjBfSTJDMF9NTUlPLAorCQkuZW5kCT0gU0g3NzYwX0kyQzBfTU1JT0VORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQJPSBTSDc3NjBfSTJDMF9JUlEsCisJCS5lbmQJPSBTSDc3NjBfSTJDMF9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaDc3NjBfaTJjMF9kZXYgPSB7CisJLmRldiAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaTJjX3BkLAorCX0sCisJLm5hbWUJCT0gU0g3NzYwX0kyQ19ERVZOQU1FLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9IHNoNzc2MF9pMmMwX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzYwX2kyYzBfcmVzKSwKK307CisKKy8qIGV0aCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIHNtYzkxeF9pbmZvID0geworCS5mbGFncyA9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfSU9fU0hJRlRfMSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBTTUNfSU9BRERSLAorCQkuZW5kCT0gU01DX0lPQUREUiArIFNaXzMyIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEVUSEVSTkVUX0lSUSwKKwkJLmVuZAk9IEVUSEVSTkVUX0lSUSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXYgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzLAorCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc21jOTF4X2luZm8sCisJfSwKK307CisKKy8qIHBsYXRmb3JtIGluaXQgY29kZSAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVkb3NrNzc2MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc21jOTF4X2RldiwKKwkmZWRvc2s3NzYwX25vcl9mbGFzaF9kZXZpY2UsCisJJnNoNzc2MF9pMmMwX2RldiwKKwkmc2g3NzYwX2kyYzFfZGV2LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9lZG9zazc3NjBfZGV2aWNlcyh2b2lkKQoreworCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsKKworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhlZG9zazc3NjBfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShlZG9zazc3NjBfZGV2aWNlcykpOworfQorX19pbml0Y2FsbChpbml0X2Vkb3NrNzc2MF9kZXZpY2VzKTsKKworLyoKKyAqIFRoZSBNYWNoaW5lIFZlY3RvcgorICovCitzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfZWRvc2s3NzYwIF9faW5pdG12ID0geworCS5tdl9uYW1lCT0gIkVET1NLNzc2MCIsCisJLm12X25yX2lycXMJPSAxMjgsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYwppbmRleCBmM2I4YjA3Li4zZGUyMmNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYwpAQCAtMTMsMTIgKzEzLDE0IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hZ2ljcGFuZWxyMi5oPgorI2luY2x1ZGUgPG1hY2gvbWFnaWNwYW5lbHIyLmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgorI2luY2x1ZGUgPGNwdS9zaDc3MjAuaD4KIAogI2RlZmluZSBMQU45MTE1X1JFQURZCShjdHJsX2lubCgweEE4MDAwMDg0VUwpICYgMHgwMDAwMDAwMVVMKQogCkBAIC0xNzAsNyArMTcyLDE0IEBACiAJLyogUjcgQTI1OwkgICAgIFI2IEEyNDsJICAgICBSNSBBMjM7CQkgIFI0IEEyMjsKIAkgKiBSMyBBMjE7CSAgICAgUjIgQTIwOwkgICAgIFIxIEExOTsJCSAgUjAgQTA7CiAJICovCi0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QUkNSKTsJLyogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMjUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EyNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQTIzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMjIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EyMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQTIwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMTksIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EwLCBOVUxMKTsKIAogCS8qIFM3ICh4KTsJCVM2ICh4KTsgICAgICAgIFM1ICh4KTsJICAgICBTNCBHUE8oRUVQUk9NX0NTMik7CiAJICogUzMgR1BPKEVFUFJPTV9DUzEpOyAgUzIgU0lPRjBfVFhEOyAgUzEgU0lPRjBfUlhEOyBTMCBTSU9GMF9TQ0s7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1yc2s3MjAzLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1yc2s3MjAzLmMKaW5kZXggZmZiZWRjNS4uZGVkNzk5YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcnNrNzIwMy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXJzazcyMDMuYwpAQCAtMTYsOCArMTYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NoNzIwMy5oPgogCiBzdGF0aWMgc3RydWN0IHNtYzkxMXhfcGxhdGRhdGEgc21jOTExeF9pbmZvID0gewogCS5mbGFncwkJPSBTTUM5MTFYX1VTRV8xNkJJVCwKQEAgLTEyMiw2ICsxMjQsMTUgQEAKIAogc3RhdGljIGludCBfX2luaXQgcnNrNzIwM19kZXZpY2VzX3NldHVwKHZvaWQpCiB7CisJLyogU2VsZWN0IHBpbnMgZm9yIFNDSUYwICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVFhEMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUlhEMCwgTlVMTCk7CisKKwkvKiBMaXQgTEVEMCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BFMTAsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BFMTAsIDApOworCWdwaW9fZXhwb3J0KEdQSU9fUEUxMCwgMCk7CisKIAlzZXRfbXRkX3BhcnRpdGlvbnMoKTsKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMocnNrNzIwM19kZXZpY2VzLAogCQkJCSAgICBBUlJBWV9TSVpFKHJzazcyMDNfZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwppbmRleCBiOTVkNjc0Li40MDhiYmRkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1wY2EtcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1wY2EuaD4KICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NoNzc4NWxjci5oPgorI2luY2x1ZGUgPG1hY2gvc2g3Nzg1bGNyLmg+CiAKIC8qCiAgKiBOT1RFOiBUaGlzIGJvYXJkIGhhcyAyIHBoeXNpY2FsIG1lbW9yeSBtYXBzLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNobWluLmMKaW5kZXggMTZlNWRhZS4uNWNjMDg2NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaG1pbi5jCkBAIC04LDcgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9zaG1pbi5oPgorI2luY2x1ZGUgPG1hY2gvc2htaW4uaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L2lvLmMKaW5kZXggNTQxY2VhMi4uN2QxNTNlNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVkb3NrNzcwNS9pby5jCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZWRvc2s3NzA1L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9lZG9zazc3MDUuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAKICNkZWZpbmUgU01DX0lPQUREUgkweEEyMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVkb3NrNzcwNS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvc2V0dXAuYwppbmRleCBmMDc2YzQ1Li5hYjNmNDdiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVkb3NrNzcwNS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L3NldHVwLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9lZG9zazc3MDUvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2Vkb3NrNzcwNS5oPgogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2hfZWRvc2s3NzA1X2luaXRfaXJxKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBtcC5jCmluZGV4IGFlMWNmY2IuLjgzYzI4YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBtcC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBtcC5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3I3NzgwcnAuaD4KKyNpbmNsdWRlIDxtYWNoL2hpZ2hsYW5kZXIuaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MHJwLmMKaW5kZXggOWQzOTIxZi4uYjcyMWU4NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MHJwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MHJwLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcjc3ODBycC5oPgorI2luY2x1ZGUgPG1hY2gvaGlnaGxhbmRlci5oPgogCiBlbnVtIHsKIAlVTlVTRUQgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3Nzg1cnAuYwppbmRleCA4OTZjMDQ1Li4zODExYjA2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3Nzg1cnAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3Nzg1cnAuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9yNzc4MHJwLmg+CisjaW5jbHVkZSA8bWFjaC9oaWdobGFuZGVyLmg+CiAKIGVudW0gewogCVVOVVNFRCA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvcHN3LmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvcHN3LmMKaW5kZXggYmU4ZDU0Ny4uMzdiMWEyZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9wc3cuYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxhc20vcjc3ODBycC5oPgorI2luY2x1ZGUgPG1hY2gvaGlnaGxhbmRlci5oPgogI2luY2x1ZGUgPGFzbS9wdXNoLXN3aXRjaC5oPgogCiBzdGF0aWMgaXJxcmV0dXJuX3QgcHN3X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMKaW5kZXggYmM3OWFmYi4uYzVhNDBmNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxuZXQvYXg4ODc5Ni5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL3I3NzgwcnAuaD4KKyNpbmNsdWRlIDxtYWNoL2hpZ2hsYW5kZXIuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYwppbmRleCAxNzdmNGYwLi5lODUyMTJmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvaHA2eHhfYXBtLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hcG0tZW11bGF0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vYWRjLmg+Ci0jaW5jbHVkZSA8YXNtL2hwNnh4Lmg+CisjaW5jbHVkZSA8bWFjaC9ocDZ4eC5oPgogCiAvKiBwZXJjZW50YWdlIHZhbHVlcyAqLwogI2RlZmluZSBBUE1fQ1JJVElDQUwJCQkxMApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jCmluZGV4IGU5NjY4NGQuLjY0YWYxZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2hkNjQ0NjEuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAjaW5jbHVkZSA8Y3B1L2RhYy5oPgogI2luY2x1ZGUgPGFzbS9wbS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKaW5kZXggNDc1YjQ2Yy4uNDhmZWNlNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGFzbS9oZDY0NDYxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KICNpbmNsdWRlIDxjcHUvZGFjLmg+CiAKICNkZWZpbmUJU0NQQ1IJMHhhNDAwMDExNgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL2lycS5jCmluZGV4IDVhMWMzYmIuLjhhYTE3MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxib3hyZTIvaXJxLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2xib3hyZTIuaD4KKyNpbmNsdWRlIDxtYWNoL2xib3hyZTIuaD4KIAogLyoKICAqIEluaXRpYWxpemUgSVJRIHNldHRpbmcKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMKaW5kZXggYzc0NDQwZC4uMmIwYjU4MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vbGJveHJlMi5oPgorI2luY2x1ZGUgPG1hY2gvbGJveHJlMi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNmX2lkZV9yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYwppbmRleCA5ZjhhNTQwLi41MmRkNzQ4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pby5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9taWNyb2Rldi5oPgorI2luY2x1ZGUgPG1hY2gvbWljcm9kZXYuaD4KIAogCS8qCiAJICoJd2UgbmVlZCB0byBoYXZlIGEgJ3NhZmUnIGFkZHJlc3MgdG8gcmUtZGlyZWN0IGFsbCBJL08gcmVxdWVzdHMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jCmluZGV4IDRkMzM1MDcuLjcwMjc1M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pcnEuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbWljcm9kZXYuaD4KKyNpbmNsdWRlIDxtYWNoL21pY3JvZGV2Lmg+CiAKICNkZWZpbmUgTlVNX0VYVEVSTkFMX0lSUVMgMTYJLyogSVJMMCAuLiBJUkwxNSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L3NldHVwLmMKaW5kZXggZmM4Y2QwNi4uYTkyMDJmZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvc2V0dXAuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPHZpZGVvL3MxZDEzeHh4ZmIuaD4KLSNpbmNsdWRlIDxhc20vbWljcm9kZXYuaD4KKyNpbmNsdWRlIDxtYWNoL21pY3JvZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9sY2RfcXZnYS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9sY2RfcXZnYS5jCmluZGV4IDZlOTYwOTUuLmRlOTAxNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3IvbGNkX3F2Z2EuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL2xjZF9xdmdhLmMKQEAgLTE3LDggKzE3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9zaF9tb2JpbGVfbGNkYy5oPgotI2luY2x1ZGUgPGFzbS9taWdvci5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfbGNkYy5oPgorI2luY2x1ZGUgPGNwdS9zaDc3MjIuaD4KKyNpbmNsdWRlIDxtYWNoL21pZ29yLmg+CiAKIC8qIExDRCBNb2R1bGUgaXMgYSBQSDI0MDMyMFQgYWNjb3JkaW5nIHRvIGJvYXJkIHNjaGVtYXRpY3MuIFRoaXMgbW9kdWxlCiAgKiBpcyBtYWRlIHVwIG9mIGEgMjQweDMyMCBMQ0QgaG9va2VkIHVwIHRvIGEgUjYxNTA1VSAob3IgSFg4MzQ3LUEwMT8pCkBAIC0zMCw5ICszMiw5IEBACiAKIHN0YXRpYyB2b2lkIHJlc2V0X2xjZF9tb2R1bGUodm9pZCkKIHsKLQljdHJsX291dGIoY3RybF9pbmIoUE9SVF9QSERSKSAmIH4weDA0LCBQT1JUX1BIRFIpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRIMiwgMCk7CiAJbWRlbGF5KDIpOwotCWN0cmxfb3V0YihjdHJsX2luYihQT1JUX1BIRFIpIHwgMHgwNCwgUE9SVF9QSERSKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BUSDIsIDEpOwogCW1kZWxheSgxKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCmluZGV4IDcxNGRjZTkuLjc2OWQ2MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKQEAgLTE3LDE0ICsxNywxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxtZWRpYS9zaF9tb2JpbGVfY2V1Lmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zaF9rZXlzYy5oPgotI2luY2x1ZGUgPGFzbS9zaF9tb2JpbGVfbGNkYy5oPgotI2luY2x1ZGUgPGFzbS9taWdvci5oPgorI2luY2x1ZGUgPG1hY2gvbWlnb3IuaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CiAKIC8qIEFkZHJlc3MgICAgIElSUSAgU2l6ZSAgQnVzICBEZXNjcmlwdGlvbgogICogMHgwMDAwMDAwMCAgICAgICA2NE1CICAxNiAgIE5PUiBGbGFzaCAoU1AyOVBMMjU2TikKQEAgLTM1LDcgKzM3LDcgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBzbWM5MXhfaW5mbyA9IHsKLQkuZmxhZ3MgPSBTTUM5MVhfVVNFXzE2QklULAorCS5mbGFncyA9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfTk9XQUlULAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfZXRoX3Jlc291cmNlc1tdID0gewpAQCAtMTY5LDcgKzE3MSw3IEBACiAKIHN0YXRpYyBpbnQgbWlnb3JfbmFuZF9mbGFzaF9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlyZXR1cm4gY3RybF9pbmIoUE9SVF9QQURSKSAmIDB4MDI7IC8qIFBUQTEgKi8KKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19QVEExKTsgLyogTkFORF9SQm4gKi8KIH0KIAogc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSBtaWdvcl9uYW5kX2ZsYXNoX2RhdGEgPSB7CkBAIC0yODYsMjIgKzI4OCwxNSBAQAogCiBzdGF0aWMgdm9pZCBjYW1lcmFfcG93ZXJfb24odm9pZCkKIHsKLQl1bnNpZ25lZCBjaGFyIHZhbHVlOwotCiAJY2FtZXJhX2NsayA9IGNsa19nZXQoTlVMTCwgInZpZGVvX2NsayIpOwogCWNsa19zZXRfcmF0ZShjYW1lcmFfY2xrLCAyNDAwMDAwMCk7CiAJY2xrX2VuYWJsZShjYW1lcmFfY2xrKTsJLyogc3RhcnQgVklPX0NLTyAqLwogCisJLyogdXNlIFZJT19SU1QgdG8gdGFrZSBjYW1lcmEgb3V0IG9mIHJlc2V0ICovCiAJbWRlbGF5KDEwKTsKLQl2YWx1ZSA9IGN0cmxfaW5iKFBPUlRfUFREUik7Ci0JdmFsdWUgJj0gfjB4MDk7Ci0jaWZuZGVmIENPTkZJR19TSF9NSUdPUl9SVEFfV1ZHQQotCXZhbHVlIHw9IDB4MDE7Ci0jZW5kaWYKLQljdHJsX291dGIodmFsdWUsIFBPUlRfUFREUik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFQzLCAwKTsKIAltZGVsYXkoMTApOwotCi0JY3RybF9vdXRiKHZhbHVlIHwgOCwgUE9SVF9QVERSKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BUVDMsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBjYW1lcmFfcG93ZXJfb2ZmKHZvaWQpCkBAIC0zMDksNyArMzA0LDcgQEAKIAljbGtfZGlzYWJsZShjYW1lcmFfY2xrKTsgLyogc3RvcCBWSU9fQ0tPICovCiAJY2xrX3B1dChjYW1lcmFfY2xrKTsKIAotCWN0cmxfb3V0YihjdHJsX2luYihQT1JUX1BURFIpICYgfjB4MDgsIFBPUlRfUFREUik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFQzLCAwKTsKIH0KIAogI2lmZGVmIENPTkZJR19JMkMKQEAgLTQ1OCw3NSArNDUzLDEzNSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBtaWdvcl9kZXZpY2VzX3NldHVwKHZvaWQpCiB7CisJLyogTGl0IEQxMSBMRUQgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVEo3LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEo3LCAxKTsKKwlncGlvX2V4cG9ydChHUElPX1BUSjcsIDApOworCisJLyogTGl0IEQxMiBMRUQgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVEo1LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEo1LCAxKTsKKwlncGlvX2V4cG9ydChHUElPX1BUSjUsIDApOworCisJLyogU01DOTFDMTExIC0gRW5hYmxlIElSUTAsIFNldHVwIENTNCBmb3IgMTYtYml0IGZhc3QgYWNjZXNzICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJRMCwgTlVMTCk7CisJY3RybF9vdXRsKDB4MDAwMDM0MDAsIEJTQ19DUzRCQ1IpOworCWN0cmxfb3V0bCgweDAwMTEwMDgwLCBCU0NfQ1M0V0NSKTsKKworCS8qIEtFWVNDICovCiAJY2xrX2Fsd2F5c19lbmFibGUoIm1zdHAyMTQiKTsgLyogS0VZU0MgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQxLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQ0X0lONiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU4xLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlJTjIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWUlOMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU40LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQ1X0lONSwgTlVMTCk7CisKKwkvKiBOQU5EIEZsYXNoICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQ1M2QV9DRTJCLCBOVUxMKTsKKwljdHJsX291dGwoKGN0cmxfaW5sKEJTQ19DUzZBQkNSKSAmIH4weDA2MDApIHwgMHgwMjAwLCBCU0NfQ1M2QUJDUik7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRBMSwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QVEExKTsKKworCS8qIFRvdWNoIFBhbmVsICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJRNiwgTlVMTCk7CisKKwkvKiBMQ0QgUGFuZWwgKi8KIAljbGtfYWx3YXlzX2VuYWJsZSgibXN0cDIwMCIpOyAvKiBMQ0RDICovCisjaWZkZWYgQ09ORklHX1NIX01JR09SX1FWR0EgLyogTENEQyAtIFFWR0EgLSBFbmFibGUgU1lTIEludGVyZmFjZSBzaWduYWxzICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE3LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTYsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE0LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDExLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ4LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDYsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ1LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEUlMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRENTLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RSRCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEV1IsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX1BUSDIsIE5VTEwpOyAvKiBMQ0RfRE9OICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRIMiwgMSk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0hfTUlHT1JfUlRBX1dWR0EgLyogTENEQyAtIFdWR0EgLSBFbmFibGUgUkdCIEludGVyZmFjZSBzaWduYWxzICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE1LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDksIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ4LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDYsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ1LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRExDTEssIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRERDSywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVkVQV0MsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFZDUFdDLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RWU1lOLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RIU1lOLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RESVNQLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RET04sIE5VTEwpOworI2VuZGlmCisKKwkvKiBDRVUgKi8KIAljbGtfYWx3YXlzX2VuYWJsZSgibXN0cDIwMyIpOyAvKiBDRVUgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9WSU9fQ0xLMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX1ZEMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0hEMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0ZMRCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0NLTywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QxNSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QxNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QxMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QxMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QxMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0QxMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0Q5LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9WSU9fRDgsIE5VTEwpOworCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRUMywgTlVMTCk7IC8qIFZJT19SU1QgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFQzLCAwKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QVFQyLCBOVUxMKTsgLyogVFZfSU5fRU4gKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFQyLCAxKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QVFQwLCBOVUxMKTsgLyogQ0FNX0VOICovCisjaWZkZWYgQ09ORklHX1NIX01JR09SX1JUQV9XVkdBCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRUMCwgMCk7CisjZWxzZQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUVDAsIDEpOworI2VuZGlmCisJY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfTVNFTENSQikgfCAweDIwMDAsIFBPUlRfTVNFTENSQik7IC8qIEQxNS0+RDggKi8KIAogCXBsYXRmb3JtX3Jlc291cmNlX3NldHVwX21lbW9yeSgmbWlnb3JfY2V1X2RldmljZSwgImNldSIsIDQgPDwgMjApOwogCiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgbWlnb3JfaTJjX2RldmljZXMsCiAJCQkJQVJSQVlfU0laRShtaWdvcl9pMmNfZGV2aWNlcykpOwotIAorCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKG1pZ29yX2RldmljZXMsIEFSUkFZX1NJWkUobWlnb3JfZGV2aWNlcykpOwogfQogX19pbml0Y2FsbChtaWdvcl9kZXZpY2VzX3NldHVwKTsKIAogc3RhdGljIHZvaWQgX19pbml0IG1pZ29yX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JLyogU01DOTFDMTExIC0gRW5hYmxlIElSUTAgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QSkNSKSAmIH4weDAwMDMsIFBPUlRfUEpDUik7Ci0KLQkvKiBLRVlTQyAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BZQ1IpICYgfjB4MGZmZiwgUE9SVF9QWUNSKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QWkNSKSAmIH4weDBmZjAsIFBPUlRfUFpDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFNFTEEpICYgfjB4NDEwMCwgUE9SVF9QU0VMQSk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfSElaQ1JBKSAmIH4weDQwMDAsIFBPUlRfSElaQ1JBKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkMpICYgfjB4YzAwMCwgUE9SVF9ISVpDUkMpOwotCi0JLyogTkFORCBGbGFzaCAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BYQ1IpICYgMHgwZmZmLCBQT1JUX1BYQ1IpOwotCWN0cmxfb3V0bCgoY3RybF9pbmwoQlNDX0NTNkFCQ1IpICYgfjB4MDAwMDA2MDApIHwgMHgwMDAwMDIwMCwKLQkJICBCU0NfQ1M2QUJDUik7Ci0KLQkvKiBUb3VjaCBQYW5lbCAtIEVuYWJsZSBJUlE2ICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFpDUikgJiB+MHhjLCBQT1JUX1BaQ1IpOwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMQSkgfCAweDgwMDApLCBQT1JUX1BTRUxBKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfSElaQ1JDKSAmIH4weDQwMDApLCBQT1JUX0hJWkNSQyk7Ci0KLSNpZmRlZiBDT05GSUdfU0hfTUlHT1JfUlRBX1dWR0EKLQkvKiBMQ0RDIC0gV1ZHQSAtIEVuYWJsZSBSR0IgSW50ZXJmYWNlIHNpZ25hbHMgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QQUNSKSAmIH4weDAwMDMsIFBPUlRfUEFDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QSENSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BMQ1IpOwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUE1DUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFJDUikgJiB+MHgwMDBmLCBQT1JUX1BSQ1IpOwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMRCkgJiB+MHgwMDBkKSB8IDB4MDQwMCwgUE9SVF9QU0VMRCk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfTVNFTENSQikgJiB+MHgwMTAwLCBQT1JUX01TRUxDUkIpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQSkgJiB+MHgwMWUwLCBQT1JUX0hJWkNSQSk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU0hfTUlHT1JfUVZHQQotCS8qIExDREMgLSBRVkdBIC0gRW5hYmxlIFNZUyBJbnRlcmZhY2Ugc2lnbmFscyAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BBQ1IpICYgfjB4MDAwMywgUE9SVF9QQUNSKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUEhDUikgJiB+MHhjZmZmKSB8IDB4MDAxMCwgUE9SVF9QSENSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BMQ1IpOwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUE1DUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFJDUikgJiB+MHgwMzBmLCBQT1JUX1BSQ1IpOwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMRCkgJiB+MHgwMDAxKSB8IDB4MDQyMCwgUE9SVF9QU0VMRCk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfTVNFTENSQikgfCAweDAxMDAsIFBPUlRfTVNFTENSQik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfSElaQ1JBKSAmIH4weDAxZTAsIFBPUlRfSElaQ1JBKTsKLSNlbmRpZgotCi0JLyogQ0VVICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BUQ1IpICYgfjB4MDNjMykgfCAweDAwNTEsIFBPUlRfUFRDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFVDUikgJiB+MHgwM2ZmLCBQT1JUX1BVQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BWQ1IpICYgfjB4MDNmZiwgUE9SVF9QVkNSKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QV0NSKSAmIH4weDNjMDAsIFBPUlRfUFdDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFNFTEMpIHwgMHgwMDAxLCBQT1JUX1BTRUxDKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QU0VMRCkgJiB+MHgyMDAwLCBQT1JUX1BTRUxEKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QU0VMRSkgfCAweDAwMGYsIFBPUlRfUFNFTEUpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX01TRUxDUkIpIHwgMHgyMjAwLCBQT1JUX01TRUxDUkIpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQSkgJiB+MHgwYTAwLCBQT1JUX0hJWkNSQSk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfSElaQ1JCKSAmIH4weDAwMDMsIFBPUlRfSElaQ1JCKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9taWdvciBfX2luaXRtdiA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvaXJxLmMKaW5kZXggOGU0OWY2ZS4uYzcwZmVjZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvaXJxLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkLmg+CisjaW5jbHVkZSA8bWFjaC9yMmQuaD4KIAogI2RlZmluZSBSMkRfTlJfSVJMIDEzCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9zZXR1cC5jCmluZGV4IDIzMDhlODcuLmM1ODViZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvc2V0dXAuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkLmg+CisjaW5jbHVkZSA8bWFjaC9yMmQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaW9fdHJhcHBlZC5oPgogI2luY2x1ZGUgPGFzbS9zcGkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9pcnEuYwppbmRleCA4N2NkYzU3Li44NTU1NTgxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL2lycS5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3Nkazc3ODAuaD4KKyNpbmNsdWRlIDxtYWNoL3Nkazc3ODAuaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL3NldHVwLmMKaW5kZXggYWNjNTkzMi4uYWFkOTRhNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL3NldHVwLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9zZGs3NzgwLmg+CisjaW5jbHVkZSA8bWFjaC9zZGs3NzgwLmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvaXJxLmMKaW5kZXggZmQ4NTBiYS4uZDhlYmZhNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvaXJxLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3NoNzc2M3JkcC5oPgorI2luY2x1ZGUgPG1hY2gvc2g3NzYzcmRwLmg+CiAKICNkZWZpbmUgSU5UQ19CQVNFCQkoMHhGRkQwMDAwMCkKICNkZWZpbmUgSU5UQ19JTlQyUFJJNyAgIChJTlRDX0JBU0UrMHg0MDAxQykKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCmluZGV4IDIzODUwZGEuLjZmOTI2ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9zaDc3NjNyZHAuaD4KKyNpbmNsdWRlIDxtYWNoL3NoNzc2M3JkcC5oPgogI2luY2x1ZGUgPGFzbS9zaF9ldGguaD4KICNpbmNsdWRlIDxhc20vc2g3NzYwZmIuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jCmluZGV4IGE1ZTM0OWQuLmEzMjc3YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc25hcGdlYXIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNuYXBnZWFyL3NldHVwLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL3NuYXBnZWFyLmg+CisjaW5jbHVkZSA8bWFjaC9zbmFwZ2Vhci5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxjcHUvdGltZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lvLmMKaW5kZXggMWI3NjdlMS4uZGVjM2RiMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lvLmMKQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtaDc3NTEuaD4KKyNpbmNsdWRlIDxtYWNoL3N5c3RlbWg3NzUxLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMKaW5kZXggNjAxYzljOC4uNTM4NDA2ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1oNzc1MS5oPgorI2luY2x1ZGUgPG1hY2gvc3lzdGVtaDc3NTEuaD4KICNpbmNsdWRlIDxhc20vc21jMzdjOTN4Lmg+CiAKIC8qIGFkZHJlc3Mgb2YgZXh0ZXJuYWwgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL3NldHVwLmMKaW5kZXggZWU3OGFmOC4uMjE5ZmQ4MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL3NldHVwLmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1oNzc1MS5oPgorI2luY2x1ZGUgPG1hY2gvc3lzdGVtaDc3NTEuaD4KIAogZXh0ZXJuIHZvaWQgbWFrZV9zeXN0ZW1oX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jCmluZGV4IDQ3MzBjMWQuLjRiYWRhZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL2lvLmMKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3RpdGFuLmg+CisjaW5jbHVkZSA8bWFjaC90aXRhbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwb3J0MmFkcih1bnNpZ25lZCBpbnQgcG9ydCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYwppbmRleCA1ZGUzYjJhLi44MWU3ZTBmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9zZXR1cC5jCkBAIC05LDcgKzksNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGFzbS90aXRhbi5oPgorI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGl0YW5faXJxKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvLmdpdGlnbm9yZSBiL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCmluZGV4IGI2NzE4ZGUuLmFhZDVlZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCisrKyBiL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCkBAIC0xICsxLDQgQEAKIHpJbWFnZQordm1saW51eC5zcmVjCit1SW1hZ2UKK3VJbWFnZS5zcmVjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggNWI1NDk2NS4uYzE2Y2NkNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMzMsMTAgKzMzLDE2IEBACiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4OiBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9jb21wcmVzc2VkICRACiAKK2lmZXEgKCQoQ09ORklHXzMyQklUKSx5KQorS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCisJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKKwkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCitlbHNlCiBLRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKIAkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAogCQkJJChDT05GSUdfTUVNT1JZX1NUQVJUKSArIFwKIAkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCitlbmRpZgogCiBLRVJORUxfRU5UUlkJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlXzMyIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKaW5kZXggNDc2ODVmNi4uMzAxZTZkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKQEAgLTIzLDYgKzIzLDExIEBACiAKIExJQkdDQwk6PSAkKHNoZWxsICQoQ0MpICQoS0JVSUxEX0NGTEFHUykgLXByaW50LWxpYmdjYy1maWxlLW5hbWUpCiAKK2lmZXEgKCQoQ09ORklHX0ZUUkFDRSkseSkKK09SSUdfQ0ZMQUdTIDo9ICQoS0JVSUxEX0NGTEFHUykKK0tCVUlMRF9DRkxBR1MgPSAkKHN1YnN0IC1wZywgLCAkKE9SSUdfQ0ZMQUdTKSkKK2VuZGlmCisKIExERkxBR1Nfdm1saW51eCA6PSAtVHRleHQgJChJTUFHRV9PRkZTRVQpIC1lIHN0YXJ0dXAgLVQgJChvYmopLy4uLy4uL2tlcm5lbC92bWxpbnV4LmxkcwogCiAkKG9iaikvdm1saW51eDogJChPQkpFQ1RTKSAkKG9iaikvcGlnZ3kubyAkKExJQkdDQykgRk9SQ0UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2NfMzIuYyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2NfMzIuYwppbmRleCBmMzg2OTk3Li5lZmRiYTZiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjXzMyLmMKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzY18zMi5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAogdm9pZCBkZWNvbXByZXNzX2tlcm5lbCh2b2lkKQogewotCW91dHB1dF9kYXRhID0gMDsKKwlvdXRwdXRfZGF0YSA9IE5VTEw7CiAJb3V0cHV0X3B0ciA9IFBIWVNBRERSKCh1bnNpZ25lZCBsb25nKSZfdGV4dCtQQUdFX1NJWkUpOwogI2lmZGVmIENPTkZJR18yOUJJVAogCW91dHB1dF9wdHIgfD0gUDJTRUc7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjA3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEwNTAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNgorIyBUdWUgQXVnIDI2IDExOjM2OjA5IDIwMDgKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSJfZWRvc2s3NzYwIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDQ9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4MGMwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDA0MDAwMDAwCitDT05GSUdfMjlCSVQ9eQorQ09ORklHX1ZTWVNDQUxMPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0xCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CitDT05GSUdfU0hfU1RPUkVfUVVFVUVTPXkKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19QVEVBPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CisKKyMKKyMgQm9hcmQgc3VwcG9ydAorIworQ09ORklHX1NIX0VET1NLNzc2MD15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0xNgorQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMworQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworQ09ORklHX1NIX0RNQV9BUEk9eQorQ09ORklHX1NIX0RNQT15CitDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz00CisjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9ETUFCUkcgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19HVVNBPXkKKyMgQ09ORklHX0dVU0FfUkIgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMjAwMDAwMAorIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5U0MyLDExNTIwMCByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9MTkyLjE2OC4wLjM6L3NjcmlwdHMvZmlsZXN5cyBpcD0xOTIuMTY4LjAuNCIKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRFJJVkVSPXkKK0NPTkZJR19ERUJVR19ERVZSRVM9eQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9ERUJVRz15CitDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOD15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2PXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzI9eQorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorQ09ORklHX01URF9DRklfSTQ9eQorQ09ORklHX01URF9DRklfSTg9eQorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DRklfU1RBQT15CitDT05GSUdfTVREX0NGSV9VVElMPXkKK0NPTkZJR19NVERfUkFNPXkKK0NPTkZJR19NVERfUk9NPXkKK0NPTkZJR19NVERfQUJTRU5UPXkKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ZmZmZmZmZmYKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0yNjAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTk0IGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MworQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0kyQ19TSDc3NjA9eQorIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKK0NPTkZJR19JMkNfREVCVUdfQUxHTz15CitDT05GSUdfSTJDX0RFQlVHX0JVUz15CitDT05GSUdfSTJDX0RFQlVHX0NISVA9eQorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPW0KKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9bQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT1tCitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD1tCisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX01CODYyOTBfNjQwWDQ4MF8xNkJQUCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD15CisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJpYyBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorCisjCisjIFNVUEVSSCBkZXZpY2VzCisjCisKKyMKKyMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAorIworQ09ORklHX1NORF9TT0M9eQorCisjCisjIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKKyMKKworIworIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKKyMKKworIworIyBTb0MgQXVkaW8gZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQCisjCisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfRVhUMl9GU19YSVA9eQorQ09ORklHX0ZTX1hJUD15CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19TSElSUT15CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfVElNRVJfU1RBVFM9eQorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlODAwMDAKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfU0hfS0dEQiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX3FlbXVfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX3FlbXVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Mjc5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfcWVtdV9kZWZjb25maWcKQEAgLTAsMCArMSw5MDkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzIKKyMgTW9uIEF1ZyAxOCAyMjoxNzo0NCAyMDA4CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0lPX1RSQVBQRUQ9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHXzI5QklUPXkKK0NPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CisjIENPTkZJR19TSF9TVE9SRV9RVUVVRVMgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX1BURUE9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19TSF83NzUxX1NZU1RFTUggaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0VDVVJFRURHRTU0MTAgaXMgbm90IHNldAorQ09ORklHX1NIX1JUUzc3NTFSMkQ9eQorIyBDT05GSUdfU0hfTEFORElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9USVRBTiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9MQk9YX1JFMiBpcyBub3Qgc2V0CisKKyMKKyMgUlRTNzc1MVIyRCBCb2FyZCBSZXZpc2lvbgorIworQ09ORklHX1JUUzc3NTFSMkRfUExVUz15CisjIENPTkZJR19SVFM3NzUxUjJEXzEgaXMgbm90IHNldAorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MTYKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9NjAwMDAwMDAKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSEVBUlRCRUFUPXkKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfR1VTQT15CisjIENPTkZJR19HVVNBX1JCIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMTAwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKKyMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvc2RhMSBlYXJseXByaW50az1zZXJpYWwiCisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CisjIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MQorQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0JJVEJBTkc9eQorIyBDT05GSUdfU1BJX1NIX1NDSSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfU001MDE9eQorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KK0NPTkZJR19GQl9TTTUwMT15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX1NVUEVSSF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NORD1tCisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1BJPXkKK0NPTkZJR19TTkRfU1VQRVJIPXkKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX1BSSU1FPW0KK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1I5NzAxPXkKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlODAwMDAKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9LR0RCIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1sYm94cmUyLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1sYm94cmUyLmMKaW5kZXggYTEzY2I3Ni4uODZjMGI2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtbGJveHJlMi5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWxib3hyZTIuYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9sYm94cmUyLmg+CisjaW5jbHVkZSA8bWFjaC9sYm94cmUyLmg+CiAjaW5jbHVkZSAicGNpLXNoNC5oIgogCiBzdGF0aWMgY2hhciBsYm94cmUyX2lycV90YWJbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcjc3ODBycC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcjc3ODBycC5jCmluZGV4IDVmZGFkYWUuLjg1NTUyMzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXI3NzgwcnAuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1yNzc4MHJwLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vcjc3ODBycC5oPgorI2luY2x1ZGUgPG1hY2gvaGlnaGxhbmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgInBjaS1zaDQuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcnRzNzc1MXIyZC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcnRzNzc1MXIyZC5jCmluZGV4IGIzZmEzZTIuLmQ2Y2E3NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXJ0czc3NTFyMmQuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1ydHM3NzUxcjJkLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC5oPgorI2luY2x1ZGUgPG1hY2gvcjJkLmg+CiAjaW5jbHVkZSAicGNpLXNoNC5oIgogCiBzdGF0aWMgdTggcnRzNzc1MXIyZF9pcnFfdGFiW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNkazc3ODAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNkazc3ODAuYwppbmRleCA2NmE5YjQwLi40ZGNjNjQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zZGs3NzgwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2RrNzc4MC5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3Nkazc3ODAuaD4KKyNpbmNsdWRlIDxtYWNoL3Nkazc3ODAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJwY2ktc2g0LmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXRpdGFuLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy10aXRhbi5jCmluZGV4IGFjOGVlMjMuLmE4Zjc4MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXRpdGFuLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtdGl0YW4uYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS90aXRhbi5oPgorI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KICNpbmNsdWRlICJwY2ktc2g0LmgiCiAKIHN0YXRpYyBjaGFyIHRpdGFuX2lycV90YWJbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYjhlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy1sbHNjLmgKQEAgLTAsMCArMSwxNDQgQEAKKyNpZm5kZWYgX19BU01fU0hfQklUT1BTX0xMU0NfSAorI2RlZmluZSBfX0FTTV9TSF9CSVRPUFNfTExTQ19ICisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2s7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHNldF9iaXQJCVxuXHQiCisJCSJvcgkJJTMsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKQorCQk6ICIxIiAoYSksICJyIiAobWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISBjbGVhcl9iaXQJCVxuXHQiCisJCSJhbmQJCSUzLCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSkKKwkJOiAiMSIgKGEpLCAiciIgKH5tYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISBjaGFuZ2VfYml0CQlcblx0IgorCQkieG9yCQklMywgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9ciIgKGEpCisJCTogIjEiIChhKSwgInIiIChtYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCQlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgdGVzdF9hbmRfc2V0X2JpdAlcblx0IgorCQkibW92CQklMCwgJTIJCQkJXG5cdCIKKwkJIm9yCQklNCwgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCSJhbmQJCSU0LCAlMgkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKGEpLCAiciIgKG1hc2spCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX2NsZWFyX2JpdAlcblx0IgorCQkibW92CQklMCwgJTIJCQkJXG5cdCIKKwkJImFuZAkJJTUsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQkiYW5kCQklNCwgJTIJCQkJXG5cdCIKKwkJInN5bmNvCQkJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSksICI9JnIiIChyZXR2YWwpCisJCTogIjEiIChhKSwgInIiIChtYXNrKSwgInIiICh+bWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWwgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX2NoYW5nZV9iaXQJXG5cdCIKKwkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCisJCSJ4b3IJCSU0LCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJImFuZAkJJTQsICUyCQkJCVxuXHQiCisJCSJzeW5jbwkJCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9ciIgKGEpLCAiPSZyIiAocmV0dmFsKQorCQk6ICIxIiAoYSksICJyIiAobWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWwgIT0gMDsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX0JJVE9QU19MTFNDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IGQ3ZDM4MmYuLjM2NzkzMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMTMsNiArMTMsOCBAQAogCiAjaWZkZWYgQ09ORklHX0dVU0FfUkIKICNpbmNsdWRlIDxhc20vYml0b3BzLWdyYi5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisjaW5jbHVkZSA8YXNtL2JpdG9wcy1sbHNjLmg+CiAjZWxzZQogI2luY2x1ZGUgPGFzbS9iaXRvcHMtaXJxLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaAppbmRleCA3MjBkZmFiLi5mOWM4ODU4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCkBAIC0zOSw2ICszOSw3IEBACiAKIC8qIFNob3VsZCBiZSBkZWZpbmVkIGJ5IHByb2Nlc3Nvci1zcGVjaWZpYyBjb2RlICovCiB2b2lkIGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqLCBpbnQgdHlwZSk7CitpbnQgX19pbml0IGFyY2hfY2xrX2luaXQodm9pZCk7CiAKIC8qIGFyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jICovCiBpbnQgY2xrX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctbGxzYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWUzYmYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaApAQCAtMCwwICsxLDcxIEBACisjaWZuZGVmIF9fQVNNX1NIX0NNUFhDSEdfTExTQ19ICisjZGVmaW5lIF9fQVNNX1NIX0NNUFhDSEdfTExTQ19ICisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB4Y2hnX3UzMih2b2xhdGlsZSB1MzIgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISB4Y2hnX3UzMglcblx0IgorCQkibW92CQklMCwgJTIJCQlcblx0IgorCQkibW92CQklNCwgJTAJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJXG5cdCIKKwkJImJmCQkxYgkJCVxuXHQiCisJCSJzeW5jbwkJCQkJXG5cdCIKKwkJOiAiPSZ6Iih0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKG0pLCAiciIgKHZhbCkKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB4Y2hnX3U4KHZvbGF0aWxlIHU4ICptLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgeGNoZ191OAlcblx0IgorCQkibW92CQklMCwgJTIJCQlcblx0IgorCQkibW92CQklNCwgJTAJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJXG5cdCIKKwkJImJmCQkxYgkJCVxuXHQiCisJCSJzeW5jbwkJCQkJXG5cdCIKKwkJOiAiPSZ6Iih0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKG0pLCAiciIgKHZhbCAmIDB4ZmYpCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZ191MzIodm9sYXRpbGUgaW50ICptLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISBfX2NtcHhjaGdfdTMyCQlcblx0IgorCQkibW92CQklMCwgJTIJCQkJXG5cdCIKKwkJImNtcC9lcQkJJTIsICU0CQkJCVxuXHQiCisJCSJiZgkJMmYJCQkJXG5cdCIKKwkJIm1vdgkJJTUsICUwCQkJCVxuXHQiCisJCSIyOgkJCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQkic3luY28JCQkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKG0pLCAiciIgKG9sZCksICJyIiAobmV3KQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX0NNUFhDSEdfTExTQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBmMDE0NDlhLi45ZWI5MDM2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTEwOCw2ICsxMDgsMTQgQEAKICNkZWZpbmUgZWxmX2NoZWNrX2ZkcGljKHgpCQkoKHgpLT5lX2ZsYWdzICYgRUZfU0hfRkRQSUMpCiAjZGVmaW5lIGVsZl9jaGVja19jb25zdF9kaXNwbGFjZW1lbnQoeCkJKCh4KS0+ZV9mbGFncyAmIEVGX1NIX1BJQykKIAorI2lmZGVmIENPTkZJR19TVVBFUkgzMgorLyoKKyAqIEVuYWJsZSBkdW1wIHVzaW5nIHJlZ3NldC4KKyAqIFRoaXMgY292ZXJzIGFsbCBvZiBnZW5lcmFsL0RTUC9GUFUgcmVncy4KKyAqLworI2RlZmluZSBDT1JFX0RVTVBfVVNFX1JFR1NFVAorI2VuZGlmCisKICNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgRUxGX0ZEUElDX0NPUkVfRUZMQUdTCUVGX1NIX0ZEUElDCiAjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCVBBR0VfU0laRQpAQCAtMTg5LDEzICsxOTcsNyBAQAogfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVhfMzJCSVQpCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci1leHRlcm4gaW50IGR1bXBfdGFza19yZWdzIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2dyZWdzZXRfdCAqKTsKLWV4dGVybiBpbnQgZHVtcF90YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9mcHJlZ3NldF90ICopOwotCi0jZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTKHRzaywgZWxmX3JlZ3MpIGR1bXBfdGFza19yZWdzKHRzaywgZWxmX3JlZ3MpCi0jZGVmaW5lIEVMRl9DT1JFX0NPUFlfRlBSRUdTKHRzaywgZWxmX2ZwcmVncykgZHVtcF90YXNrX2ZwdSh0c2ssIGVsZl9mcHJlZ3MpCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWF8zMkJJVCkKIAogI2lmZGVmIENPTkZJR19WU1lTQ0FMTAogLyogdkRTTyBoYXMgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9mcHUuaAppbmRleCA5MTQ2MmZlLi4xZDNhZWUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmgKQEAgLTMwLDggKzMwLDE1IEBACiB9CiAjZW5kaWYKIAorc3RydWN0IHVzZXJfcmVnc2V0OworCiBleHRlcm4gaW50IGRvX2ZwdV9pbnN0KHVuc2lnbmVkIHNob3J0LCBzdHJ1Y3QgcHRfcmVncyAqKTsKIAorZXh0ZXJuIGludCBmcHJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkgICAgICB2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1Zik7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmxhenlfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKQEAgLTUwLDYgKzU3LDE4IEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgaW5pdF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKHRza191c2VkX21hdGgodHNrKSkgeworCQlpZiAoKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkgJiYgdHNrID09IGN1cnJlbnQpCisJCQl1bmxhenlfZnB1KHRzaywgdGFza19wdF9yZWdzKHRzaykpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodHNrKTsKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX19BU01fU0hfRlBVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZWQzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX0FTTV9TSF9GVFJBQ0VfSAorI2RlZmluZSBfX0FTTV9TSF9GVFJBQ0VfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgbWNvdW50KHZvaWQpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCBjZjMyYmQyLi45NjUwZTdjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMSw5ICsxLDkgQEAKIC8qCiAgKiAgaW5jbHVkZS9hc20tc2gvZ3Bpby5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgQnJ1bm5lciwgTWFyayBKb25hcworICogR2VuZXJpYyBHUElPIEFQSSBhbmQgcGlubXV4IHRhYmxlIHN1cHBvcnQgZm9yIFN1cGVySC4KICAqCi0gKiAgQWRkcmVzc2VzIGZvciB0aGUgUGluIEZ1bmN0aW9uIENvbnRyb2xsZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOCBNYWdudXMgRGFtbQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xNiw0ICsxNiw5MiBAQAogI2luY2x1ZGUgPGNwdS9ncGlvLmg+CiAjZW5kaWYKIAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBwaW5tdXhfZW51bV90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHBpbm11eF9mbGFnX3Q7CisKKyNkZWZpbmUgUElOTVVYX1RZUEVfTk9ORSAgICAgICAgICAgIDAKKyNkZWZpbmUgUElOTVVYX1RZUEVfRlVOQ1RJT04gICAgICAgIDEKKyNkZWZpbmUgUElOTVVYX1RZUEVfR1BJTyAgICAgICAgICAgIDIKKyNkZWZpbmUgUElOTVVYX1RZUEVfT1VUUFVUICAgICAgICAgIDMKKyNkZWZpbmUgUElOTVVYX1RZUEVfSU5QVVQgICAgICAgICAgIDQKKyNkZWZpbmUgUElOTVVYX1RZUEVfSU5QVVRfUFVMTFVQICAgIDUKKyNkZWZpbmUgUElOTVVYX1RZUEVfSU5QVVRfUFVMTERPV04gIDYKKworI2RlZmluZSBQSU5NVVhfRkxBR19UWVBFICAgICAgICAgICAgKDB4NykKKyNkZWZpbmUgUElOTVVYX0ZMQUdfV0FOVF9QVUxMVVAgICAgICgxIDw8IDMpCisjZGVmaW5lIFBJTk1VWF9GTEFHX1dBTlRfUFVMTERPV04gICAoMSA8PCA0KQorCitzdHJ1Y3QgcGlubXV4X2dwaW8geworCXBpbm11eF9lbnVtX3QgZW51bV9pZDsKKwlwaW5tdXhfZmxhZ190IGZsYWdzOworfTsKKworI2RlZmluZSBQSU5NVVhfR1BJTyhncGlvLCBkYXRhX29yX21hcmspIFtncGlvXSA9IHsgZGF0YV9vcl9tYXJrIH0KKyNkZWZpbmUgUElOTVVYX0RBVEEoZGF0YV9vcl9tYXJrLCBpZHMuLi4pIGRhdGFfb3JfbWFyaywgaWRzLCAwCisKK3N0cnVjdCBwaW5tdXhfY2ZnX3JlZyB7CisJdW5zaWduZWQgbG9uZyByZWcsIHJlZ193aWR0aCwgZmllbGRfd2lkdGg7CisJdW5zaWduZWQgbG9uZyAqY250OworCXBpbm11eF9lbnVtX3QgKmVudW1faWRzOworfTsKKworI2RlZmluZSBQSU5NVVhfQ0ZHX1JFRyhuYW1lLCByLCByX3dpZHRoLCBmX3dpZHRoKSBcCisJLnJlZyA9IHIsIC5yZWdfd2lkdGggPSByX3dpZHRoLCAuZmllbGRfd2lkdGggPSBmX3dpZHRoLAkJXAorCS5jbnQgPSAodW5zaWduZWQgbG9uZyBbcl93aWR0aCAvIGZfd2lkdGhdKSB7fSwgXAorCS5lbnVtX2lkcyA9IChwaW5tdXhfZW51bV90IFsocl93aWR0aCAvIGZfd2lkdGgpICogKDEgPDwgZl93aWR0aCldKSBcCisKK3N0cnVjdCBwaW5tdXhfZGF0YV9yZWcgeworCXVuc2lnbmVkIGxvbmcgcmVnLCByZWdfd2lkdGg7CisJcGlubXV4X2VudW1fdCAqZW51bV9pZHM7Cit9OworCisjZGVmaW5lIFBJTk1VWF9EQVRBX1JFRyhuYW1lLCByLCByX3dpZHRoKSBcCisJLnJlZyA9IHIsIC5yZWdfd2lkdGggPSByX3dpZHRoLAlcCisJLmVudW1faWRzID0gKHBpbm11eF9lbnVtX3QgW3Jfd2lkdGhdKSBcCisKK3N0cnVjdCBwaW5tdXhfcmFuZ2UgeworCXBpbm11eF9lbnVtX3QgYmVnaW47CisJcGlubXV4X2VudW1fdCBlbmQ7Cit9OworCitzdHJ1Y3QgcGlubXV4X2luZm8geworCWNoYXIgKm5hbWU7CisJcGlubXV4X2VudW1fdCByZXNlcnZlZF9pZDsKKwlzdHJ1Y3QgcGlubXV4X3JhbmdlIGRhdGE7CisJc3RydWN0IHBpbm11eF9yYW5nZSBpbnB1dDsKKwlzdHJ1Y3QgcGlubXV4X3JhbmdlIGlucHV0X3BkOworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgaW5wdXRfcHU7CisJc3RydWN0IHBpbm11eF9yYW5nZSBvdXRwdXQ7CisJc3RydWN0IHBpbm11eF9yYW5nZSBtYXJrOworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgZnVuY3Rpb247CisKKwl1bnNpZ25lZCBmaXJzdF9ncGlvLCBsYXN0X2dwaW87CisKKwlzdHJ1Y3QgcGlubXV4X2dwaW8gKmdwaW9zOworCXN0cnVjdCBwaW5tdXhfY2ZnX3JlZyAqY2ZnX3JlZ3M7CisJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZGF0YV9yZWdzOworCisJcGlubXV4X2VudW1fdCAqZ3Bpb19kYXRhOworCXVuc2lnbmVkIGludCBncGlvX2RhdGFfc2l6ZTsKKworCXVuc2lnbmVkIGxvbmcgKmdwaW9faW5fdXNlOworfTsKKworaW50IHJlZ2lzdGVyX3Bpbm11eChzdHJ1Y3QgcGlubXV4X2luZm8gKnBpcCk7CisKK2ludCBfX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvKTsKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwlyZXR1cm4gX19ncGlvX3JlcXVlc3QoZ3Bpbyk7Cit9Cit2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKTsKK2ludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKK2ludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKK2ludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKTsKK3ZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZXhwb3J0KHVuc2lnbmVkIGdwaW8sIGJvb2wgZGlyZWN0aW9uX21heV9jaGFuZ2UpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZiAvKiBfX0FTTV9TSF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2h3X2lycS5oCmluZGV4IGQ1NTdiMDAuLjYwM2NkZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaHdfaXJxLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX19BU01fU0hfSFdfSVJRX0gKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9pbnRjLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBleHRlcm4gYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKQEAgLTIzLDEwMSArMjQsMTIgQEAKIAogdm9pZCByZWdpc3Rlcl9pcHJfY29udHJvbGxlcihzdHJ1Y3QgaXByX2Rlc2MgKik7CiAKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBpbnRjX2VudW07Ci0KLXN0cnVjdCBpbnRjX3ZlY3QgewotCWludGNfZW51bSBlbnVtX2lkOwotCXVuc2lnbmVkIHNob3J0IHZlY3Q7Ci19OwotCi0jZGVmaW5lIElOVENfVkVDVChlbnVtX2lkLCB2ZWN0KSB7IGVudW1faWQsIHZlY3QgfQotI2RlZmluZSBJTlRDX0lSUShlbnVtX2lkLCBpcnEpIElOVENfVkVDVChlbnVtX2lkLCBpcnEyZXZ0KGlycSkpCi0KLXN0cnVjdCBpbnRjX2dyb3VwIHsKLQlpbnRjX2VudW0gZW51bV9pZDsKLQlpbnRjX2VudW0gZW51bV9pZHNbMzJdOwotfTsKLQotI2RlZmluZSBJTlRDX0dST1VQKGVudW1faWQsIGlkcy4uLikgeyBlbnVtX2lkLCB7IGlkcyB9IH0KLQotc3RydWN0IGludGNfbWFza19yZWcgewotCXVuc2lnbmVkIGxvbmcgc2V0X3JlZywgY2xyX3JlZywgcmVnX3dpZHRoOwotCWludGNfZW51bSBlbnVtX2lkc1szMl07Ci0jaWZkZWYgQ09ORklHX1NNUAotCXVuc2lnbmVkIGxvbmcgc21wOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgaW50Y19wcmlvX3JlZyB7Ci0JdW5zaWduZWQgbG9uZyBzZXRfcmVnLCBjbHJfcmVnLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoOwotCWludGNfZW51bSBlbnVtX2lkc1sxNl07Ci0jaWZkZWYgQ09ORklHX1NNUAotCXVuc2lnbmVkIGxvbmcgc21wOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgaW50Y19zZW5zZV9yZWcgewotCXVuc2lnbmVkIGxvbmcgcmVnLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoOwotCWludGNfZW51bSBlbnVtX2lkc1sxNl07Ci19OwotCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBJTlRDX1NNUChzdHJpZGUsIG5yKSAuc21wID0gKHN0cmlkZSkgfCAoKG5yKSA8PCA4KQotI2Vsc2UKLSNkZWZpbmUgSU5UQ19TTVAoc3RyaWRlLCBucikKLSNlbmRpZgotCi1zdHJ1Y3QgaW50Y19kZXNjIHsKLQlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0b3JzOwotCXVuc2lnbmVkIGludCBucl92ZWN0b3JzOwotCXN0cnVjdCBpbnRjX2dyb3VwICpncm91cHM7Ci0JdW5zaWduZWQgaW50IG5yX2dyb3VwczsKLQlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqbWFza19yZWdzOwotCXVuc2lnbmVkIGludCBucl9tYXNrX3JlZ3M7Ci0Jc3RydWN0IGludGNfcHJpb19yZWcgKnByaW9fcmVnczsKLQl1bnNpZ25lZCBpbnQgbnJfcHJpb19yZWdzOwotCXN0cnVjdCBpbnRjX3NlbnNlX3JlZyAqc2Vuc2VfcmVnczsKLQl1bnNpZ25lZCBpbnQgbnJfc2Vuc2VfcmVnczsKLQljaGFyICpuYW1lOwotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotCXN0cnVjdCBpbnRjX21hc2tfcmVnICphY2tfcmVnczsKLQl1bnNpZ25lZCBpbnQgbnJfYWNrX3JlZ3M7Ci0jZW5kaWYKLX07Ci0KLSNkZWZpbmUgX0lOVENfQVJSQVkoYSkgYSwgc2l6ZW9mKGEpL3NpemVvZigqYSkKLSNkZWZpbmUgREVDTEFSRV9JTlRDX0RFU0Moc3ltYm9sLCBjaGlwbmFtZSwgdmVjdG9ycywgZ3JvdXBzLAkJXAotCW1hc2tfcmVncywgcHJpb19yZWdzLCBzZW5zZV9yZWdzKQkJCQlcCi1zdHJ1Y3QgaW50Y19kZXNjIHN5bWJvbCBfX2luaXRkYXRhID0gewkJCQkJXAotCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAkJCVwKLQlfSU5UQ19BUlJBWShtYXNrX3JlZ3MpLCBfSU5UQ19BUlJBWShwcmlvX3JlZ3MpLAkJCVwKLQlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwJCQkJCVwKLQljaGlwbmFtZSwJCQkJCQkJXAotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0jZGVmaW5lIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhzeW1ib2wsIGNoaXBuYW1lLCB2ZWN0b3JzLCBncm91cHMsCVwKLQltYXNrX3JlZ3MsIHByaW9fcmVncywgc2Vuc2VfcmVncywgYWNrX3JlZ3MpCQkJXAotc3RydWN0IGludGNfZGVzYyBzeW1ib2wgX19pbml0ZGF0YSA9IHsJCQkJCVwKLQlfSU5UQ19BUlJBWSh2ZWN0b3JzKSwgX0lOVENfQVJSQVkoZ3JvdXBzKSwJCQlcCi0JX0lOVENfQVJSQVkobWFza19yZWdzKSwgX0lOVENfQVJSQVkocHJpb19yZWdzKSwJCQlcCi0JX0lOVENfQVJSQVkoc2Vuc2VfcmVncyksCQkJCQlcCi0JY2hpcG5hbWUsCQkJCQkJCVwKLQlfSU5UQ19BUlJBWShhY2tfcmVncyksCQkJCQkJXAotfQotI2VuZGlmCi0KLXZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKTsKLWludCBpbnRjX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpbyk7Ci0KIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpOwotI2lmZGVmIENPTkZJR19DUFVfU0gzCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cF9zaDModm9pZCk7Ci0jZW5kaWYKK3ZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3BpbnMoaW50IG1vZGUpOwogCiBlbnVtIHsgSVJRX01PREVfSVJRLCBJUlFfTU9ERV9JUlE3NjU0LCBJUlFfTU9ERV9JUlEzMjEwLAogICAgICAgIElSUV9NT0RFX0lSTDc2NTRfTUFTSywgSVJRX01PREVfSVJMMzIxMF9NQVNLLAogICAgICAgIElSUV9NT0RFX0lSTDc2NTQsIElSUV9NT0RFX0lSTDMyMTAgfTsKLXZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3BpbnMoaW50IG1vZGUpOwogCiAjZW5kaWYgLyogX19BU01fU0hfSFdfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAppbmRleCBhNGZiZjBjLi40MzZjMjg1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCkBAIC0xLDI3ICsxLDI2IEBACiAjaWZuZGVmIF9fQVNNX1NIX0lPX0gKICNkZWZpbmUgX19BU01fU0hfSU9fSAotCiAvKgogICogQ29udmVudGlvbjoKLSAqICAgIHJlYWR7Yix3LGx9L3dyaXRle2IsdyxsfSBhcmUgZm9yIFBDSSwKKyAqICAgIHJlYWR7Yix3LGwscX0vd3JpdGV7Yix3LGwscX0gYXJlIGZvciBQQ0ksCiAgKiAgICB3aGlsZSBpbntiLHcsbH0vb3V0e2IsdyxsfSBhcmUgZm9yIElTQQotICogVGhlc2UgbWF5ICh3aWxsKSBiZSBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbi4KKyAqCiAgKiBJbiBhZGRpdGlvbiB3ZSBoYXZlICdwYXVzaW5nJyB2ZXJzaW9uczogaW57Yix3LGx9X3Avb3V0e2IsdyxsfV9wCiAgKiBhbmQgJ3N0cmluZycgdmVyc2lvbnM6IGluc3tiLHcsbH0vb3V0c3tiLHcsbH0KLSAqIEZvciByZWFke2IsdyxsfSBhbmQgd3JpdGV7Yix3LGx9IHRoZXJlIGFyZSBhbHNvIF9fcmF3IHZlcnNpb25zLCB3aGljaAotICogZG8gbm90IGhhdmUgYSBtZW1vcnkgYmFycmllciBhZnRlciB0aGVtLgogICoKLSAqIEluIGFkZGl0aW9uLCB3ZSBoYXZlCi0gKiAgIGN0cmxfaW57Yix3LGx9L2N0cmxfb3V0e2IsdyxsfSBmb3IgU3VwZXJIIHNwZWNpZmljIEkvTy4KLSAqICAgd2hpY2ggYXJlIHByb2Nlc3NvciBzcGVjaWZpYy4KLSAqLwotCi0vKgotICogV2UgZm9sbG93IHRoZSBBbHBoYSBjb252ZW50aW9uIGhlcmU6Ci0gKiAgX19pbmIgZXhwYW5kcyB0byBhbiBpbmxpbmUgZnVuY3Rpb24gY2FsbCAod2hpY2ggY2FsbHMgdmlhIHRoZSBtdikKLSAqICBfaW5iICBpcyBhIHJlYWwgZnVuY3Rpb24gY2FsbCAobm90ZSBfX19yYXcgZm5zIGFyZSBfIHZlcnNpb24gb2YgX19yYXcpCi0gKiAgaW5iICAgYnkgZGVmYXVsdCBleHBhbmRzIHRvIF9pbmIsIGJ1dCB0aGUgbWFjaGluZSBzcGVjaWZpYyBjb2RlIG1heQotICogICAgICAgIGRlZmluZSBpdCB0byBfX2luYiBpZiBpdCBjaG9vc2VzLgorICogV2hpbGUgcmVhZHtiLHcsbCxxfSBhbmQgd3JpdGV7Yix3LGwscX0gY29udGFpbiBtZW1vcnkgYmFycmllcnMKKyAqIGF1dG9tYXRpY2FsbHksIHRoZXJlIGFyZSBhbHNvIF9fcmF3IHZlcnNpb25zLCB3aGljaCBkbyBub3QuCisgKgorICogSGlzdG9yaWNhbGx5LCB3ZSBoYXZlIGFsc28gaGFkIGN0cmxfaW57Yix3LGwscX0vY3RybF9vdXR7Yix3LGwscX0gZm9yCisgKiBTdXBlckggc3BlY2lmaWMgSS9PIChyYXcgSS9PIHRvIG9uLWNoaXAgQ1BVIHBlcmlwaGVyYWxzKS4gSW4gcHJhY3RpY2UKKyAqIHRoZXNlIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzIGFzIHRoZSBfX3JhdyB2YXJpYW50cywgYW5kIGFzIHN1Y2gsIGFsbAorICogbmV3IGNvZGUgc2hvdWxkIGJlIHVzaW5nIHRoZSBfX3JhdyB2ZXJzaW9ucy4KKyAqCisgKiBBbGwgSVNBIEkvTyByb3V0aW5lcyBhcmUgd3JhcHBlZCB0aHJvdWdoIHRoZSBtYWNoaW5lIHZlY3Rvci4gSWYgYQorICogYm9hcmQgZG9lcyBub3QgcHJvdmlkZSBvdmVycmlkZXMsIGEgZ2VuZXJpYyBzZXQgdGhhdCBhcmUgY29waWVkIGluCisgKiBmcm9tIHRoZSBkZWZhdWx0IG1hY2hpbmUgdmVjdG9yIGFyZSB1c2VkIGluc3RlYWQuIFRoZXNlIGFyZSBsYXJnZWx5CisgKiBmb3Igb2xkIGNvbXBhdCBjb2RlIGZvciBJL08gb2Zmc2V0aW5nIHRvIFN1cGVySU9zLCBhbGwgb2Ygd2hpY2ggYXJlCisgKiBiZXR0ZXIgaGFuZGxlZCB0aHJvdWdoIHRoZSBtYWNodmVjIGlvcG9ydCBtYXBwaW5nIHJvdXRpbmVzIHRoZXNlIGRheXMuCiAgKi8KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0zMSw3ICszMCw2IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9tYXAuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KLQogLyoKICAqIERlcGVuZGluZyBvbiB3aGljaCBwbGF0Zm9ybSB3ZSBhcmUgcnVubmluZyBvbiwgd2UgbmVlZCBkaWZmZXJlbnQKICAqIEkvTyBmdW5jdGlvbnMuCkBAIC00MCwxMDUgKzM4LDY4IEBACiAjaW5jbHVkZSA8YXNtL2lvX2dlbmVyaWMuaD4KICNpbmNsdWRlIDxhc20vaW9fdHJhcHBlZC5oPgogCi0jZGVmaW5lIG1heWJlYmFkaW8ocG9ydCkgXAotICBwcmludGsoS0VSTl9FUlIgImJhZCBQQy1saWtlIGlvICVzOiV1IGZvciBwb3J0IDB4JWx4IGF0IDB4JTA4eFxuIiwgXAotCSBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAocG9ydCksICh1MzIpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKQorI2RlZmluZSBpbmIocCkJCQlzaF9tdi5tdl9pbmIoKHApKQorI2RlZmluZSBpbncocCkJCQlzaF9tdi5tdl9pbncoKHApKQorI2RlZmluZSBpbmwocCkJCQlzaF9tdi5tdl9pbmwoKHApKQorI2RlZmluZSBvdXRiKHgscCkJCXNoX212Lm12X291dGIoKHgpLChwKSkKKyNkZWZpbmUgb3V0dyh4LHApCQlzaF9tdi5tdl9vdXR3KCh4KSwocCkpCisjZGVmaW5lIG91dGwoeCxwKQkJc2hfbXYubXZfb3V0bCgoeCksKHApKQogCi0vKgotICogU2luY2UgYm9hcmRzIGFyZSBhYmxlIHRvIGRlZmluZSB0aGVpciBvd24gc2V0IG9mIEkvTyByb3V0aW5lcyB0aHJvdWdoCi0gKiB0aGVpciByZXNwZWN0aXZlIG1hY2hpbmUgdmVjdG9yLCB3ZSBhbHdheXMgd3JhcCB0aHJvdWdoIHRoZSBtdi4KLSAqCi0gKiBBbHNvLCBpbiB0aGUgZXZlbnQgdGhhdCBhIGJvYXJkIGhhc24ndCBwcm92aWRlZCBpdHMgb3duIGRlZmluaXRpb24gZm9yCi0gKiBhIGdpdmVuIHJvdXRpbmUsIGl0IHdpbGwgYmUgd3JhcHBlZCB0byBnZW5lcmljIGNvZGUgYXQgcnVuLXRpbWUuCi0gKi8KKyNkZWZpbmUgaW5iX3AocCkJCXNoX212Lm12X2luYl9wKChwKSkKKyNkZWZpbmUgaW53X3AocCkJCXNoX212Lm12X2lud19wKChwKSkKKyNkZWZpbmUgaW5sX3AocCkJCXNoX212Lm12X2lubF9wKChwKSkKKyNkZWZpbmUgb3V0Yl9wKHgscCkJCXNoX212Lm12X291dGJfcCgoeCksKHApKQorI2RlZmluZSBvdXR3X3AoeCxwKQkJc2hfbXYubXZfb3V0d19wKCh4KSwocCkpCisjZGVmaW5lIG91dGxfcCh4LHApCQlzaF9tdi5tdl9vdXRsX3AoKHgpLChwKSkKIAotI2RlZmluZSBfX2luYihwKQlzaF9tdi5tdl9pbmIoKHApKQotI2RlZmluZSBfX2ludyhwKQlzaF9tdi5tdl9pbncoKHApKQotI2RlZmluZSBfX2lubChwKQlzaF9tdi5tdl9pbmwoKHApKQotI2RlZmluZSBfX291dGIoeCxwKQlzaF9tdi5tdl9vdXRiKCh4KSwocCkpCi0jZGVmaW5lIF9fb3V0dyh4LHApCXNoX212Lm12X291dHcoKHgpLChwKSkKLSNkZWZpbmUgX19vdXRsKHgscCkJc2hfbXYubXZfb3V0bCgoeCksKHApKQorI2RlZmluZSBpbnNiKHAsYixjKQkJc2hfbXYubXZfaW5zYigocCksIChiKSwgKGMpKQorI2RlZmluZSBpbnN3KHAsYixjKQkJc2hfbXYubXZfaW5zdygocCksIChiKSwgKGMpKQorI2RlZmluZSBpbnNsKHAsYixjKQkJc2hfbXYubXZfaW5zbCgocCksIChiKSwgKGMpKQorI2RlZmluZSBvdXRzYihwLGIsYykJCXNoX212Lm12X291dHNiKChwKSwgKGIpLCAoYykpCisjZGVmaW5lIG91dHN3KHAsYixjKQkJc2hfbXYubXZfb3V0c3coKHApLCAoYiksIChjKSkKKyNkZWZpbmUgb3V0c2wocCxiLGMpCQlzaF9tdi5tdl9vdXRzbCgocCksIChiKSwgKGMpKQogCi0jZGVmaW5lIF9faW5iX3AocCkJc2hfbXYubXZfaW5iX3AoKHApKQotI2RlZmluZSBfX2lud19wKHApCXNoX212Lm12X2lud19wKChwKSkKLSNkZWZpbmUgX19pbmxfcChwKQlzaF9tdi5tdl9pbmxfcCgocCkpCi0jZGVmaW5lIF9fb3V0Yl9wKHgscCkJc2hfbXYubXZfb3V0Yl9wKCh4KSwocCkpCi0jZGVmaW5lIF9fb3V0d19wKHgscCkJc2hfbXYubXZfb3V0d19wKCh4KSwocCkpCi0jZGVmaW5lIF9fb3V0bF9wKHgscCkJc2hfbXYubXZfb3V0bF9wKCh4KSwocCkpCisjZGVmaW5lIF9fcmF3X3dyaXRlYih2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTggIF9fZm9yY2UgKikoYSkgPSAodikpCisjZGVmaW5lIF9fcmF3X3dyaXRldyh2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTE2IF9fZm9yY2UgKikoYSkgPSAodikpCisjZGVmaW5lIF9fcmF3X3dyaXRlbCh2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTMyIF9fZm9yY2UgKikoYSkgPSAodikpCisjZGVmaW5lIF9fcmF3X3dyaXRlcSh2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTY0IF9fZm9yY2UgKikoYSkgPSAodikpCiAKLSNkZWZpbmUgX19pbnNiKHAsYixjKQlzaF9tdi5tdl9pbnNiKChwKSwgKGIpLCAoYykpCi0jZGVmaW5lIF9faW5zdyhwLGIsYykJc2hfbXYubXZfaW5zdygocCksIChiKSwgKGMpKQotI2RlZmluZSBfX2luc2wocCxiLGMpCXNoX212Lm12X2luc2woKHApLCAoYiksIChjKSkKLSNkZWZpbmUgX19vdXRzYihwLGIsYykJc2hfbXYubXZfb3V0c2IoKHApLCAoYiksIChjKSkKLSNkZWZpbmUgX19vdXRzdyhwLGIsYykJc2hfbXYubXZfb3V0c3coKHApLCAoYiksIChjKSkKLSNkZWZpbmUgX19vdXRzbChwLGIsYykJc2hfbXYubXZfb3V0c2woKHApLCAoYiksIChjKSkKKyNkZWZpbmUgX19yYXdfcmVhZGIoYSkJCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTggIF9fZm9yY2UgKikoYSkpCisjZGVmaW5lIF9fcmF3X3JlYWR3KGEpCQkoX19jaGtfaW9fcHRyKGEpLCAqKHZvbGF0aWxlIHUxNiBfX2ZvcmNlICopKGEpKQorI2RlZmluZSBfX3Jhd19yZWFkbChhKQkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1MzIgX19mb3JjZSAqKShhKSkKKyNkZWZpbmUgX19yYXdfcmVhZHEoYSkJCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTY0IF9fZm9yY2UgKikoYSkpCiAKLSNkZWZpbmUgX19yZWFkYihhKQlzaF9tdi5tdl9yZWFkYigoYSkpCi0jZGVmaW5lIF9fcmVhZHcoYSkJc2hfbXYubXZfcmVhZHcoKGEpKQotI2RlZmluZSBfX3JlYWRsKGEpCXNoX212Lm12X3JlYWRsKChhKSkKLSNkZWZpbmUgX193cml0ZWIodixhKQlzaF9tdi5tdl93cml0ZWIoKHYpLChhKSkKLSNkZWZpbmUgX193cml0ZXcodixhKQlzaF9tdi5tdl93cml0ZXcoKHYpLChhKSkKLSNkZWZpbmUgX193cml0ZWwodixhKQlzaF9tdi5tdl93cml0ZWwoKHYpLChhKSkKKyNkZWZpbmUgcmVhZGIoYSkJCSh7IHU4ICByXyA9IF9fcmF3X3JlYWRiKGEpOyBtYigpOyByXzsgfSkKKyNkZWZpbmUgcmVhZHcoYSkJCSh7IHUxNiByXyA9IF9fcmF3X3JlYWR3KGEpOyBtYigpOyByXzsgfSkKKyNkZWZpbmUgcmVhZGwoYSkJCSh7IHUzMiByXyA9IF9fcmF3X3JlYWRsKGEpOyBtYigpOyByXzsgfSkKKyNkZWZpbmUgcmVhZHEoYSkJCSh7IHU2NCByXyA9IF9fcmF3X3JlYWRxKGEpOyBtYigpOyByXzsgfSkKIAotI2RlZmluZSBpbmIJCV9faW5iCi0jZGVmaW5lIGludwkJX19pbncKLSNkZWZpbmUgaW5sCQlfX2lubAotI2RlZmluZSBvdXRiCQlfX291dGIKLSNkZWZpbmUgb3V0dwkJX19vdXR3Ci0jZGVmaW5lIG91dGwJCV9fb3V0bAorI2RlZmluZSB3cml0ZWIodixhKQkJKHsgX19yYXdfd3JpdGViKCh2KSwoYSkpOyBtYigpOyB9KQorI2RlZmluZSB3cml0ZXcodixhKQkJKHsgX19yYXdfd3JpdGV3KCh2KSwoYSkpOyBtYigpOyB9KQorI2RlZmluZSB3cml0ZWwodixhKQkJKHsgX19yYXdfd3JpdGVsKCh2KSwoYSkpOyBtYigpOyB9KQorI2RlZmluZSB3cml0ZXEodixhKQkJKHsgX19yYXdfd3JpdGVxKCh2KSwoYSkpOyBtYigpOyB9KQogCi0jZGVmaW5lIGluYl9wCQlfX2luYl9wCi0jZGVmaW5lIGlud19wCQlfX2lud19wCi0jZGVmaW5lIGlubF9wCQlfX2lubF9wCi0jZGVmaW5lIG91dGJfcAkJX19vdXRiX3AKLSNkZWZpbmUgb3V0d19wCQlfX291dHdfcAotI2RlZmluZSBvdXRsX3AJCV9fb3V0bF9wCisvKiBTdXBlckggb24tY2hpcCBJL08gZnVuY3Rpb25zICovCisjZGVmaW5lIGN0cmxfaW5iCQlfX3Jhd19yZWFkYgorI2RlZmluZSBjdHJsX2ludwkJX19yYXdfcmVhZHcKKyNkZWZpbmUgY3RybF9pbmwJCV9fcmF3X3JlYWRsCisjZGVmaW5lIGN0cmxfaW5xCQlfX3Jhd19yZWFkcQogCi0jZGVmaW5lIGluc2IJCV9faW5zYgotI2RlZmluZSBpbnN3CQlfX2luc3cKLSNkZWZpbmUgaW5zbAkJX19pbnNsCi0jZGVmaW5lIG91dHNiCQlfX291dHNiCi0jZGVmaW5lIG91dHN3CQlfX291dHN3Ci0jZGVmaW5lIG91dHNsCQlfX291dHNsCisjZGVmaW5lIGN0cmxfb3V0YgkJX19yYXdfd3JpdGViCisjZGVmaW5lIGN0cmxfb3V0dwkJX19yYXdfd3JpdGV3CisjZGVmaW5lIGN0cmxfb3V0bAkJX19yYXdfd3JpdGVsCisjZGVmaW5lIGN0cmxfb3V0cQkJX19yYXdfd3JpdGVxCiAKLSNkZWZpbmUgX19yYXdfcmVhZGIoYSkJCV9fcmVhZGIoKHZvaWQgX19pb21lbSAqKShhKSkKLSNkZWZpbmUgX19yYXdfcmVhZHcoYSkJCV9fcmVhZHcoKHZvaWQgX19pb21lbSAqKShhKSkKLSNkZWZpbmUgX19yYXdfcmVhZGwoYSkJCV9fcmVhZGwoKHZvaWQgX19pb21lbSAqKShhKSkKLSNkZWZpbmUgX19yYXdfd3JpdGViKHYsIGEpCV9fd3JpdGViKHYsICh2b2lkIF9faW9tZW0gKikoYSkpCi0jZGVmaW5lIF9fcmF3X3dyaXRldyh2LCBhKQlfX3dyaXRldyh2LCAodm9pZCBfX2lvbWVtICopKGEpKQotI2RlZmluZSBfX3Jhd193cml0ZWwodiwgYSkJX193cml0ZWwodiwgKHZvaWQgX19pb21lbSAqKShhKSkKLQotdm9pZCBfX3Jhd193cml0ZXNsKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwotdm9pZCBfX3Jhd19yZWFkc2wodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7Ci0KLS8qCi0gKiBUaGUgcGxhdGZvcm0gaGVhZGVyIGZpbGVzIG1heSBkZWZpbmUgc29tZSBvZiB0aGVzZSBtYWNyb3MgdG8gdXNlCi0gKiB0aGUgaW5saW5lZCB2ZXJzaW9ucyB3aGVyZSBhcHByb3ByaWF0ZS4gIFRoZXNlIG1hY3JvcyBtYXkgYWxzbyBiZQotICogcmVkZWZpbmVkIGJ5IHVzZXJsZXZlbCBwcm9ncmFtcy4KLSAqLwotI2lmZGVmIF9fcmVhZGIKLSMgZGVmaW5lIHJlYWRiKGEpCSh7IHVuc2lnbmVkIGludCByXyA9IF9fcmF3X3JlYWRiKGEpOyBtYigpOyByXzsgfSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjdHJsX2RlbGF5KHZvaWQpCit7CisjaWZkZWYgUDJTRUcKKwlfX3Jhd19yZWFkdyhQMlNFRyk7CiAjZW5kaWYKLSNpZmRlZiBfX3Jhd19yZWFkdwotIyBkZWZpbmUgcmVhZHcoYSkJKHsgdW5zaWduZWQgaW50IHJfID0gX19yYXdfcmVhZHcoYSk7IG1iKCk7IHJfOyB9KQotI2VuZGlmCi0jaWZkZWYgX19yYXdfcmVhZGwKLSMgZGVmaW5lIHJlYWRsKGEpCSh7IHVuc2lnbmVkIGludCByXyA9IF9fcmF3X3JlYWRsKGEpOyBtYigpOyByXzsgfSkKLSNlbmRpZgotCi0jaWZkZWYgX19yYXdfd3JpdGViCi0jIGRlZmluZSB3cml0ZWIodixhKQkoeyBfX3Jhd193cml0ZWIoKHYpLChhKSk7IG1iKCk7IH0pCi0jZW5kaWYKLSNpZmRlZiBfX3Jhd193cml0ZXcKLSMgZGVmaW5lIHdyaXRldyh2LGEpCSh7IF9fcmF3X3dyaXRldygodiksKGEpKTsgbWIoKTsgfSkKLSNlbmRpZgotI2lmZGVmIF9fcmF3X3dyaXRlbAotIyBkZWZpbmUgd3JpdGVsKHYsYSkJKHsgX19yYXdfd3JpdGVsKCh2KSwoYSkpOyBtYigpOyB9KQotI2VuZGlmCit9CiAKICNkZWZpbmUgX19CVUlMRF9NRU1PUllfU1RSSU5HKGJ3bHEsIHR5cGUpCQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVzIyNid2xxKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqbWVtLAlcCiAJCQkJY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgaW50IGNvdW50KQlcCiB7CQkJCQkJCQkJXAogCWNvbnN0IHZvbGF0aWxlIHR5cGUgKl9fYWRkciA9IGFkZHI7CQkJCVwKQEAgLTE0OSw4ICsxMTAsOCBAQAogCX0JCQkJCQkJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZHMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sIHZvaWQgKmFkZHIsCVwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCQkJXAorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRzIyNid2xxKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqbWVtLAlcCisJCQkgICAgICAgdm9pZCAqYWRkciwgdW5zaWduZWQgaW50IGNvdW50KQkJXAogewkJCQkJCQkJCVwKIAl2b2xhdGlsZSB0eXBlICpfX2FkZHIgPSBhZGRyOwkJCQkJXAogCQkJCQkJCQkJXApAQCAtMTYyLDEwNiArMTIzLDcxIEBACiAKIF9fQlVJTERfTUVNT1JZX1NUUklORyhiLCB1OCkKIF9fQlVJTERfTUVNT1JZX1NUUklORyh3LCB1MTYpCi0jZGVmaW5lIHdyaXRlc2wgX19yYXdfd3JpdGVzbAotI2RlZmluZSByZWFkc2wgIF9fcmF3X3JlYWRzbAorX19CVUlMRF9NRU1PUllfU1RSSU5HKHEsIHU2NCkKIAotI2RlZmluZSByZWFkYl9yZWxheGVkKGEpIHJlYWRiKGEpCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYSkgcmVhZHcoYSkKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZChhKSByZWFkbChhKQordm9pZCBfX3Jhd193cml0ZXNsKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwordm9pZCBfX3Jhd19yZWFkc2woY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7CisKKyNkZWZpbmUgd3JpdGVzYgkJCV9fcmF3X3dyaXRlc2IKKyNkZWZpbmUgd3JpdGVzdwkJCV9fcmF3X3dyaXRlc3cKKyNkZWZpbmUgd3JpdGVzbAkJCV9fcmF3X3dyaXRlc2wKKworI2RlZmluZSByZWFkc2IJCQlfX3Jhd19yZWFkc2IKKyNkZWZpbmUgcmVhZHN3CQkJX19yYXdfcmVhZHN3CisjZGVmaW5lIHJlYWRzbAkJCV9fcmF3X3JlYWRzbAorCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYSkJcmVhZGIoYSkKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhKQlyZWFkdyhhKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGEpCXJlYWRsKGEpCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYSkJcmVhZHEoYSkKIAogLyogU2ltcGxlIE1NSU8gKi8KLSNkZWZpbmUgaW9yZWFkOChhKQkJcmVhZGIoYSkKLSNkZWZpbmUgaW9yZWFkMTYoYSkJCXJlYWR3KGEpCisjZGVmaW5lIGlvcmVhZDgoYSkJCV9fcmF3X3JlYWRiKGEpCisjZGVmaW5lIGlvcmVhZDE2KGEpCQlfX3Jhd19yZWFkdyhhKQogI2RlZmluZSBpb3JlYWQxNmJlKGEpCQliZTE2X3RvX2NwdShfX3Jhd19yZWFkdygoYSkpKQotI2RlZmluZSBpb3JlYWQzMihhKQkJcmVhZGwoYSkKKyNkZWZpbmUgaW9yZWFkMzIoYSkJCV9fcmF3X3JlYWRsKGEpCiAjZGVmaW5lIGlvcmVhZDMyYmUoYSkJCWJlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKChhKSkpCiAKLSNkZWZpbmUgaW93cml0ZTgodixhKQkJd3JpdGViKCh2KSwoYSkpCi0jZGVmaW5lIGlvd3JpdGUxNih2LGEpCQl3cml0ZXcoKHYpLChhKSkKKyNkZWZpbmUgaW93cml0ZTgodixhKQkJX19yYXdfd3JpdGViKCh2KSwoYSkpCisjZGVmaW5lIGlvd3JpdGUxNih2LGEpCQlfX3Jhd193cml0ZXcoKHYpLChhKSkKICNkZWZpbmUgaW93cml0ZTE2YmUodixhKQlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYoKHYpKSwoYSkpCi0jZGVmaW5lIGlvd3JpdGUzMih2LGEpCQl3cml0ZWwoKHYpLChhKSkKKyNkZWZpbmUgaW93cml0ZTMyKHYsYSkJCV9fcmF3X3dyaXRlbCgodiksKGEpKQogI2RlZmluZSBpb3dyaXRlMzJiZSh2LGEpCV9fcmF3X3dyaXRlbChjcHVfdG9fYmUzMigodikpLChhKSkKIAotI2RlZmluZSBpb3JlYWQ4X3JlcChhLCBkLCBjKQlyZWFkc2IoKGEpLCAoZCksIChjKSkKLSNkZWZpbmUgaW9yZWFkMTZfcmVwKGEsIGQsIGMpCXJlYWRzdygoYSksIChkKSwgKGMpKQotI2RlZmluZSBpb3JlYWQzMl9yZXAoYSwgZCwgYykJcmVhZHNsKChhKSwgKGQpLCAoYykpCisjZGVmaW5lIGlvcmVhZDhfcmVwKGEsIGQsIGMpCV9fcmF3X3JlYWRzYigoYSksIChkKSwgKGMpKQorI2RlZmluZSBpb3JlYWQxNl9yZXAoYSwgZCwgYykJX19yYXdfcmVhZHN3KChhKSwgKGQpLCAoYykpCisjZGVmaW5lIGlvcmVhZDMyX3JlcChhLCBkLCBjKQlfX3Jhd19yZWFkc2woKGEpLCAoZCksIChjKSkKIAotI2RlZmluZSBpb3dyaXRlOF9yZXAoYSwgcywgYykJd3JpdGVzYigoYSksIChzKSwgKGMpKQotI2RlZmluZSBpb3dyaXRlMTZfcmVwKGEsIHMsIGMpCXdyaXRlc3coKGEpLCAocyksIChjKSkKLSNkZWZpbmUgaW93cml0ZTMyX3JlcChhLCBzLCBjKQl3cml0ZXNsKChhKSwgKHMpLCAoYykpCisjZGVmaW5lIGlvd3JpdGU4X3JlcChhLCBzLCBjKQlfX3Jhd193cml0ZXNiKChhKSwgKHMpLCAoYykpCisjZGVmaW5lIGlvd3JpdGUxNl9yZXAoYSwgcywgYykJX19yYXdfd3JpdGVzdygoYSksIChzKSwgKGMpKQorI2RlZmluZSBpb3dyaXRlMzJfcmVwKGEsIHMsIGMpCV9fcmF3X3dyaXRlc2woKGEpLCAocyksIChjKSkKIAotI2RlZmluZSBtbWlvd2IoKQl3bWIoKQkvKiBzeW5jbyBvbiBTSC00QSwgb3RoZXJ3aXNlIGEgbm9wICovCisvKiBzeW5jbyBvbiBTSC00QSwgb3RoZXJ3aXNlIGEgbm9wICovCisjZGVmaW5lIG1taW93YigpCQl3bWIoKQogCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2VuZXJpY19pb19iYXNlOworCiAvKgotICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1ldGhvZCBmb3IgdGhlIGdlbmVyaWMgY2FzZSB3aGVyZSBhIGJvYXJkLXNwZWNpZmljCi0gKiBpb3BvcnRfbWFwIHNpbXBseSBuZWVkcyB0byByZXR1cm4gdGhlIHBvcnQgKyBzb21lIGFyYml0cmFyeSBwb3J0IGJhc2UuCisgKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWV0aG9kIGZvciB0aGUgZ2VuZXJpYyBjYXNlIHdoZXJlIGEKKyAqIGJvYXJkLXNwZWNpZmljIGlvcG9ydF9tYXAgc2ltcGx5IG5lZWRzIHRvIHJldHVybiB0aGUgcG9ydCArIHNvbWUKKyAqIGFyYml0cmFyeSBwb3J0IGJhc2UuCiAgKgogICogV2UgdXNlIHRoaXMgYXQgYm9hcmQgc2V0dXAgdGltZSB0byBpbXBsaWNpdGx5IHNldCB0aGUgcG9ydCBiYXNlLCBhbmQKICAqIGFzIGEgcmVzdWx0LCB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljIGlvcG9ydF9tYXAuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9pb19wb3J0X2Jhc2UodW5zaWduZWQgbG9uZyBwYmFzZSkKIHsKLQlleHRlcm4gdW5zaWduZWQgbG9uZyBnZW5lcmljX2lvX2Jhc2U7Ci0KIAlnZW5lcmljX2lvX2Jhc2UgPSBwYmFzZTsKIH0KIAogI2RlZmluZSBfX2lvcG9ydF9tYXAocCwgbikgc2hfbXYubXZfaW9wb3J0X21hcCgocCksIChuKSkKIAogLyogV2UgcmVhbGx5IHdhbnQgdG8gdHJ5IGFuZCBnZXQgdGhlc2UgdG8gbWVtY3B5IGV0YyAqLwotZXh0ZXJuIHZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICosIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCBpbnQsIHVuc2lnbmVkIGxvbmcpOwotCi0vKiBTdXBlckggb24tY2hpcCBJL08gZnVuY3Rpb25zICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgY3RybF9pbmIodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKWFkZHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgY3RybF9pbncodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjdHJsX2lubCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopYWRkcjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgY3RybF9pbnEodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyopYWRkcjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGN0cmxfb3V0Yih1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKWFkZHIgPSBiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RybF9vdXR3KHVuc2lnbmVkIHNob3J0IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilhZGRyID0gYjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGN0cmxfb3V0bCh1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKWFkZHIgPSBiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RybF9vdXRxKHVuc2lnbmVkIGxvbmcgbG9uZyBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcqKWFkZHIgPSBiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RybF9kZWxheSh2b2lkKQotewotI2lmZGVmIFAyU0VHCi0JY3RybF9pbncoUDJTRUcpOwotI2VuZGlmCi19Cit2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqLCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwordm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIGludCwgdW5zaWduZWQgbG9uZyk7CiAKIC8qIFF1YWQtd29yZCByZWFsLW1vZGUgSS9PLCBkb24ndCBhc2suLiAqLwogdW5zaWduZWQgbG9uZyBsb25nIHBlZWtfcmVhbF9hZGRyZXNzX3EodW5zaWduZWQgbG9uZyBsb25nIGFkZHIpOwpAQCAtMzQ3LDkgKzI3MywxNSBAQAogCV9faW9yZW1hcF9tb2RlKChvZmZzZXQpLCAoc2l6ZSksIF9QQUdFX0NBQ0hBQkxFKQogI2RlZmluZSBwM19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgZmxhZ3MpCQkJXAogCV9faW9yZW1hcCgob2Zmc2V0KSwgKHNpemUpLCAoZmxhZ3MpKQorI2RlZmluZSBpb3JlbWFwX3Byb3Qob2Zmc2V0LCBzaXplLCBmbGFncykJCVwKKwlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCAoZmxhZ3MpKQogI2RlZmluZSBpb3VubWFwKGFkZHIpCQkJCQlcCiAJX19pb3VubWFwKChhZGRyKSkKIAorI2RlZmluZSBtYXliZWJhZGlvKHBvcnQpIFwKKwlwcmludGsoS0VSTl9FUlIgImJhZCBQQy1saWtlIGlvICVzOiV1IGZvciBwb3J0IDB4JWx4IGF0IDB4JTA4eFxuIiwgXAorCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sIChwb3J0KSwgKHUzMilfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCisKIC8qCiAgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCiAgKiBhY2Nlc3MKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW9fZ2VuZXJpYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb19nZW5lcmljLmgKaW5kZXggOTJmYzYwNy4uMWU1ZDM3NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb19nZW5lcmljLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb19nZW5lcmljLmgKQEAgLTMzLDEzICszMyw2IEBACiB2b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxvdXRzdykodW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIHZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLG91dHNsKSh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogCi11OCBJT19DT05DQVQoX19JT19QUkVGSVgscmVhZGIpKHZvaWQgX19pb21lbSAqKTsKLXUxNiBJT19DT05DQVQoX19JT19QUkVGSVgscmVhZHcpKHZvaWQgX19pb21lbSAqKTsKLXUzMiBJT19DT05DQVQoX19JT19QUkVGSVgscmVhZGwpKHZvaWQgX19pb21lbSAqKTsKLXZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHdyaXRlYikodTgsIHZvaWQgX19pb21lbSAqKTsKLXZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHdyaXRldykodTE2LCB2b2lkIF9faW9tZW0gKik7Ci12b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCx3cml0ZWwpKHUzMiwgdm9pZCBfX2lvbWVtICopOwotCiB2b2lkICpJT19DT05DQVQoX19JT19QUkVGSVgsaW9yZW1hcCkodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiB2b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxpb3VubWFwKSh2b2lkICphZGRyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggNjE5NWE1My4uZDMxOWJhYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lycS5oCkBAIC00MSw2ICs0MSw5IEBACiAjZGVmaW5lIGlycV9jYW5vbmljYWxpemUoaXJxKQkoaXJxKQogI2RlZmluZSBpcnFfZGVtdXgoaXJxKQkJc2hfbXYubXZfaXJxX2RlbXV4KGlycSkKIAordm9pZCBpbml0X0lSUSh2b2lkKTsKK2FzbWxpbmthZ2UgaW50IGRvX0lSUSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKICNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCiBleHRlcm4gdm9pZCBpcnFfY3R4X2luaXQoaW50IGNwdSk7CiBleHRlcm4gdm9pZCBpcnFfY3R4X2V4aXQoaW50IGNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzhkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9fQVNNX1NIX0tQUk9CRVNfSAorI2RlZmluZSBfX0FTTV9TSF9LUFJPQkVTX0gKKworI2lmZGVmIENPTkZJR19LUFJPQkVTCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCit0eXBlZGVmIHUxNiBrcHJvYmVfb3Bjb2RlX3Q7CisjZGVmaW5lIEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04JMHhjMzNhCisKKyNkZWZpbmUgTUFYX0lOU05fU0laRSAxNgorI2RlZmluZSBNQVhfU1RBQ0tfU0laRSA2NAorI2RlZmluZSBNSU5fU1RBQ0tfU0laRShBRERSKSAoKChNQVhfU1RBQ0tfU0laRSkgPCBcCisJKCgodW5zaWduZWQgbG9uZyljdXJyZW50X3RocmVhZF9pbmZvKCkpICsgVEhSRUFEX1NJWkUgLSAoQUREUikpKSBcCisJPyAoTUFYX1NUQUNLX1NJWkUpIFwKKwk6ICgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArIFRIUkVBRF9TSVpFIC0gKEFERFIpKSkKKworI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShyZWdzKQkJKChyZWdzKS0+cmVnc1swXSkKKyNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGtyZXRwcm9iZV9ibGFja2xpc3Rfc2l6ZQkwCisKK3N0cnVjdCBrcHJvYmU7CisKK3ZvaWQgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKik7Cit2b2lkIGtyZXRwcm9iZV90cmFtcG9saW5lKHZvaWQpOwordm9pZCBqcHJvYmVfcmV0dXJuX2VuZCh2b2lkKTsKKworLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvcHkgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24qLworc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiB7CisJLyogY29weSBvZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KKwlrcHJvYmVfb3Bjb2RlX3QgaW5zbltNQVhfSU5TTl9TSVpFXTsKK307CisKK3N0cnVjdCBwcmV2X2twcm9iZSB7CisJc3RydWN0IGtwcm9iZSAqa3A7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7Cit9OworCisvKiBwZXItY3B1IGtwcm9iZSBjb250cm9sIGJsb2NrICovCitzdHJ1Y3Qga3Byb2JlX2N0bGJsayB7CisJdW5zaWduZWQgbG9uZyBrcHJvYmVfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcganByb2JlX3NhdmVkX3IxNTsKKwlzdHJ1Y3QgcHRfcmVncyBqcHJvYmVfc2F2ZWRfcmVnczsKKwlrcHJvYmVfb3Bjb2RlX3QganByb2Jlc19zdGFja1tNQVhfU1RBQ0tfU0laRV07CisJc3RydWN0IHByZXZfa3Byb2JlIHByZXZfa3Byb2JlOworfTsKKworZXh0ZXJuIGludCBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucik7CitleHRlcm4gaW50IGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQga3Byb2JlX2hhbmRsZV9pbGxzbG90KHVuc2lnbmVkIGxvbmcgcGMpOworI2Vsc2UKKworI2RlZmluZSBrcHJvYmVfaGFuZGxlX2lsbHNsb3QocGMpCSgtMSkKKworI2VuZGlmIC8qIENPTkZJR19LUFJPQkVTICovCisjZW5kaWYgLyogX19BU01fU0hfS1BST0JFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21hY2h2ZWMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFjaHZlYy5oCmluZGV4IGIyZTQxMjQuLmYxYmFlMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFjaHZlYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFjaHZlYy5oCkBAIC00MiwxMyArNDIsNiBAQAogCXZvaWQgKCptdl9vdXRzdykodW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIAl2b2lkICgqbXZfb3V0c2wpKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCk7CiAKLQl1OCAoKm12X3JlYWRiKSh2b2lkIF9faW9tZW0gKik7Ci0JdTE2ICgqbXZfcmVhZHcpKHZvaWQgX19pb21lbSAqKTsKLQl1MzIgKCptdl9yZWFkbCkodm9pZCBfX2lvbWVtICopOwotCXZvaWQgKCptdl93cml0ZWIpKHU4LCB2b2lkIF9faW9tZW0gKik7Ci0Jdm9pZCAoKm12X3dyaXRldykodTE2LCB2b2lkIF9faW9tZW0gKik7Ci0Jdm9pZCAoKm12X3dyaXRlbCkodTMyLCB2b2lkIF9faW9tZW0gKik7Ci0KIAlpbnQgKCptdl9pcnFfZGVtdXgpKGludCBpcnEpOwogCiAJdm9pZCAoKm12X2luaXRfaXJxKSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWlnb3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbWlnb3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEyYjYzMi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21pZ29yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NIX01JR09SX0gKLSNkZWZpbmUgX19BU01fU0hfTUlHT1JfSAotCi0vKgotICogbGludXgvaW5jbHVkZS9hc20tc2gvbWlnb3IuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucwotICoKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNyBOb2J1aGlybyBJd2FtYXRzdQotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotCi0vKiBHUElPICovCi0jZGVmaW5lIFBPUlRfUEFDUiAweGE0MDUwMTAwCi0jZGVmaW5lIFBPUlRfUERDUiAweGE0MDUwMTA2Ci0jZGVmaW5lIFBPUlRfUEVDUiAweGE0MDUwMTA4Ci0jZGVmaW5lIFBPUlRfUEhDUiAweGE0MDUwMTBlCi0jZGVmaW5lIFBPUlRfUEpDUiAweGE0MDUwMTEwCi0jZGVmaW5lIFBPUlRfUEtDUiAweGE0MDUwMTEyCi0jZGVmaW5lIFBPUlRfUExDUiAweGE0MDUwMTE0Ci0jZGVmaW5lIFBPUlRfUE1DUiAweGE0MDUwMTE2Ci0jZGVmaW5lIFBPUlRfUFJDUiAweGE0MDUwMTFjCi0jZGVmaW5lIFBPUlRfUFRDUiAweGE0MDUwMTQwCi0jZGVmaW5lIFBPUlRfUFVDUiAweGE0MDUwMTQyCi0jZGVmaW5lIFBPUlRfUFZDUiAweGE0MDUwMTQ0Ci0jZGVmaW5lIFBPUlRfUFdDUiAweGE0MDUwMTQ2Ci0jZGVmaW5lIFBPUlRfUFhDUiAweGE0MDUwMTQ4Ci0jZGVmaW5lIFBPUlRfUFlDUiAweGE0MDUwMTRhCi0jZGVmaW5lIFBPUlRfUFpDUiAweGE0MDUwMTRjCi0jZGVmaW5lIFBPUlRfUEFEUiAweGE0MDUwMTIwCi0jZGVmaW5lIFBPUlRfUEhEUiAweGE0MDUwMTJlCi0jZGVmaW5lIFBPUlRfUFREUiAweGE0MDUwMTYwCi0jZGVmaW5lIFBPUlRfUFdEUiAweGE0MDUwMTY2Ci0KLSNkZWZpbmUgUE9SVF9ISVpDUkEgMHhhNDA1MDE1OAotI2RlZmluZSBQT1JUX0hJWkNSQyAweGE0MDUwMTVjCi0KLSNkZWZpbmUgUE9SVF9NU0VMQ1JCIDB4YTQwNTAxODIKLQotI2RlZmluZSBQT1JUX1BTRUxBIDB4YTQwNTAxNGUKLSNkZWZpbmUgUE9SVF9QU0VMQiAweGE0MDUwMTUwCi0jZGVmaW5lIFBPUlRfUFNFTEMgMHhhNDA1MDE1MgotI2RlZmluZSBQT1JUX1BTRUxEIDB4YTQwNTAxNTQKLSNkZWZpbmUgUE9SVF9QU0VMRSAweGE0MDUwMTU2Ci0KLSNkZWZpbmUgUE9SVF9ISVpDUkEgMHhhNDA1MDE1OAotI2RlZmluZSBQT1JUX0hJWkNSQiAweGE0MDUwMTVhCi0jZGVmaW5lIFBPUlRfSElaQ1JDIDB4YTQwNTAxNWMKLQotI2RlZmluZSBCU0NfQ1M2QUJDUiAweGZlYzEwMDFjCi0KLSNpbmNsdWRlIDxhc20vc2hfbW9iaWxlX2xjZGMuaD4KLQotaW50IG1pZ29yX2xjZF9xdmdhX3NldHVwKHZvaWQgKmJvYXJkX2RhdGEsIHZvaWQgKnN5c19vcHNfaGFuZGxlLAotCQkJIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyAqc3lzX29wcyk7Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9NSUdPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tem9uZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXpvbmUuaAppbmRleCAyOTY5MjUzLi43ZjUzNjNiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tem9uZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW16b25lLmgKQEAgLTQsNiArNCw4IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKKyNpbmNsdWRlIDxsaW51eC9udW1hLmg+CisKIGV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOwogI2RlZmluZSBOT0RFX0RBVEEobmlkKQkJKG5vZGVfZGF0YVtuaWRdKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDc3ZmI4YmYuLjU4NzFkNzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMDQsNiArMTA0LDggQEAKIAogdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwogCisjZGVmaW5lIHB0ZV9wZ3Byb3QoeCkgX19wZ3Byb3QocHRlX3ZhbCh4KSAmIFBURV9GTEFHU19NQVNLKQorCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBhNGE4ZjhiLi41MjIyMGQ3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNzYsNiArNzYsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgUFRFX1BIWVNfTUFTSwkJKFBIWVNfQUREUl9NQVNLICYgUEFHRV9NQVNLKQorI2RlZmluZSBQVEVfRkxBR1NfTUFTSwkJKH4oUFRFX1BIWVNfTUFTSykgPDwgUEFHRV9TSElGVCkKIAogI2lmZGVmIENPTkZJR19TVVBFUkgzMgogI2RlZmluZSBWTUFMTE9DX1NUQVJUCShQM1NFRykKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDE1ZDlmOTIuLjY5MzM2NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9jcHUtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKQEAgLTQzLDExICs0NCw1MiBAQAogCUNQVV9TSF9OT05FCiB9OwogCisvKgorICogVExCIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICoKKyAqIERlZmluZWQgZm9yIGJvdGggSSBhbmQgRCB0bGIsIHBlci1wcm9jZXNzb3IuCisgKi8KK3N0cnVjdCB0bGJfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBsb25nIG5leHQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGZpcnN0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0OworCisJdW5zaWduZWQgaW50IGVudHJpZXM7CisJdW5zaWduZWQgaW50IHN0ZXA7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKworc3RydWN0IHNoX2NwdWluZm8geworCXVuc2lnbmVkIGludCB0eXBlOworCWludCBjdXRfbWFqb3IsIGN1dF9taW5vcjsKKwl1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKKwl1bnNpZ25lZCBsb25nIGFzaWRfY2FjaGU7CisKKwlzdHJ1Y3QgY2FjaGVfaW5mbyBpY2FjaGU7CS8qIFByaW1hcnkgSS1jYWNoZSAqLworCXN0cnVjdCBjYWNoZV9pbmZvIGRjYWNoZTsJLyogUHJpbWFyeSBELWNhY2hlICovCisJc3RydWN0IGNhY2hlX2luZm8gc2NhY2hlOwkvKiBTZWNvbmRhcnkgY2FjaGUgKi8KKworCS8qIFRMQiBpbmZvICovCisJc3RydWN0IHRsYl9pbmZvIGl0bGI7CisJc3RydWN0IHRsYl9pbmZvIGR0bGI7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChMMV9DQUNIRV9CWVRFUykpKTsKKworZXh0ZXJuIHN0cnVjdCBzaF9jcHVpbmZvIGNwdV9kYXRhW107CisjZGVmaW5lIGJvb3RfY3B1X2RhdGEgY3B1X2RhdGFbMF0KKyNkZWZpbmUgY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldCisjZGVmaW5lIHJhd19jdXJyZW50X2NwdV9kYXRhIGNwdV9kYXRhW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldCisKIC8qIEZvcndhcmQgZGVjbCAqLwotc3RydWN0IHNoX2NwdWluZm87CitzdHJ1Y3Qgc2VxX29wZXJhdGlvbnM7CisKK2V4dGVybiBzdHJ1Y3QgcHRfcmVncyBmYWtlX3N3YXBwZXJfcmVnczsKIAogLyogYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyAqLwogY29uc3QgY2hhciAqZ2V0X2NwdV9zdWJ0eXBlKHN0cnVjdCBzaF9jcHVpbmZvICpjKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcDsKIAogI2lmZGVmIENPTkZJR19WU1lTQ0FMTAogaW50IHZzeXNjYWxsX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAppbmRleCAwZGFkZDc1Li5hNDZhMDIwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKQEAgLTEwLDkgKzEwLDkgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogLyoKQEAgLTI2LDIzICsyNiw3IEBACiAjZGVmaW5lIENDTl9DVlIJCTB4ZmYwMDAwNDAKICNkZWZpbmUgQ0NOX1BSUgkJMHhmZjAwMDA0NAogCi1zdHJ1Y3Qgc2hfY3B1aW5mbyB7Ci0JdW5zaWduZWQgaW50IHR5cGU7Ci0JaW50IGN1dF9tYWpvciwgY3V0X21pbm9yOwotCXVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OwotCXVuc2lnbmVkIGxvbmcgYXNpZF9jYWNoZTsKLQotCXN0cnVjdCBjYWNoZV9pbmZvIGljYWNoZTsJLyogUHJpbWFyeSBJLWNhY2hlICovCi0Jc3RydWN0IGNhY2hlX2luZm8gZGNhY2hlOwkvKiBQcmltYXJ5IEQtY2FjaGUgKi8KLQlzdHJ1Y3QgY2FjaGVfaW5mbyBzY2FjaGU7CS8qIFNlY29uZGFyeSBjYWNoZSAqLwotCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLX0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoTDFfQ0FDSEVfQllURVMpKSk7Ci0KLWV4dGVybiBzdHJ1Y3Qgc2hfY3B1aW5mbyBjcHVfZGF0YVtdOwotI2RlZmluZSBib290X2NwdV9kYXRhIGNwdV9kYXRhWzBdCi0jZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXQotI2RlZmluZSByYXdfY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXQorYXNtbGlua2FnZSB2b2lkIF9faW5pdCBzaF9jcHVfaW5pdCh2b2lkKTsKIAogLyoKICAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplOiAyR0IuCkBAIC0xOTYsNiArMTgwLDggQEAKICNkZWZpbmUgS1NUS19FSVAodHNrKSAgKHRhc2tfcHRfcmVncyh0c2spLT5wYykKICNkZWZpbmUgS1NUS19FU1AodHNrKSAgKHRhc2tfcHRfcmVncyh0c2spLT5yZWdzWzE1XSkKIAorI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykJKChyZWdzKS0+cmVnc1sxNV0pCisKICNkZWZpbmUgY3B1X3NsZWVwKCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzbGVlcCIgOiA6IDogIm1lbW9yeSIpCiAjZGVmaW5lIGNwdV9yZWxheCgpCWJhcnJpZXIoKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaAppbmRleCA3NzBkNTE2Li5iMGI0ODI0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGNwdS9yZWdpc3RlcnMuaD4KIApAQCAtMzYsNDYgKzM1LDYgQEAKIAk6ICIxIiAoX19kdW1teSkpOyBcCiBwYzsgfSkKIAotLyoKLSAqIFRMQiBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKLSAqCi0gKiBEZWZpbmVkIGZvciBib3RoIEkgYW5kIEQgdGxiLCBwZXItcHJvY2Vzc29yLgotICovCi1zdHJ1Y3QgdGxiX2luZm8gewotCXVuc2lnbmVkIGxvbmcgbG9uZyBuZXh0OwotCXVuc2lnbmVkIGxvbmcgbG9uZyBmaXJzdDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbGFzdDsKLQotCXVuc2lnbmVkIGludCBlbnRyaWVzOwotCXVuc2lnbmVkIGludCBzdGVwOwotCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLX07Ci0KLXN0cnVjdCBzaF9jcHVpbmZvIHsKLQllbnVtIGNwdV90eXBlIHR5cGU7Ci0JdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7Ci0JdW5zaWduZWQgbG9uZyBhc2lkX2NhY2hlOwotCi0JdW5zaWduZWQgaW50IGNwdV9jbG9jaywgbWFzdGVyX2Nsb2NrLCBidXNfY2xvY2ssIG1vZHVsZV9jbG9jazsKLQotCS8qIENhY2hlIGluZm8gKi8KLQlzdHJ1Y3QgY2FjaGVfaW5mbyBpY2FjaGU7Ci0Jc3RydWN0IGNhY2hlX2luZm8gZGNhY2hlOwotCXN0cnVjdCBjYWNoZV9pbmZvIHNjYWNoZTsKLQotCS8qIFRMQiBpbmZvICovCi0Jc3RydWN0IHRsYl9pbmZvIGl0bGI7Ci0Jc3RydWN0IHRsYl9pbmZvIGR0bGI7Ci0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBzaF9jcHVpbmZvIGNwdV9kYXRhW107Ci0jZGVmaW5lIGJvb3RfY3B1X2RhdGEgY3B1X2RhdGFbMF0KLSNkZWZpbmUgY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldCi0jZGVmaW5lIHJhd19jdXJyZW50X2NwdV9kYXRhIGNwdV9kYXRhW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldCi0KICNlbmRpZgogCiAvKgpAQCAtMTY5LDggKzEyOCw2IEBACiAjZGVmaW5lIElOSVRfTU1BUCBcCiB7ICZpbml0X21tLCAwLCAwLCBOVUxMLCBQQUdFX1NIQVJFRCwgVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQywgMSwgTlVMTCwgTlVMTCB9CiAKLWV4dGVybiAgc3RydWN0IHB0X3JlZ3MgZmFrZV9zd2FwcGVyX3JlZ3M7Ci0KICNkZWZpbmUgSU5JVF9USFJFQUQgIHsJCQkJXAogCS5zcAkJPSBzaXplb2YoaW5pdF9zdGFjaykgKwlcCiAJCQkgIChsb25nKSAmaW5pdF9zdGFjaywJXApAQCAtMjY5LDYgKzIyNiw4IEBACiAjZGVmaW5lIEtTVEtfRUlQKHRzaykgICgodHNrKS0+dGhyZWFkLnBjKQogI2RlZmluZSBLU1RLX0VTUCh0c2spICAoKHRzayktPnRocmVhZC5zcCkKIAorI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykJKChyZWdzKS0+c3ApCisKICNkZWZpbmUgY3B1X3JlbGF4KCkJYmFycmllcigpCiAKICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGI4NmFlYWIuLjNhZDE4ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtODcsMTIgKzg3LDE4IEBACiAJdW5zaWduZWQgbG9uZwltb2Q7CiB9OwogCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTCQkxMgkvKiBHZW5lcmFsIHJlZ2lzdGVycyAqLworI2RlZmluZSBQVFJBQ0VfU0VUUkVHUwkJMTMKKworI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTCTE0CS8qIEZQVSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUwkxNQorCiAjZGVmaW5lIFBUUkFDRV9HRVRGRFBJQwkJMzEJLyogZ2V0IHRoZSBFTEYgZmRwaWMgbG9hZG1hcCBhZGRyZXNzICovCiAKICNkZWZpbmUgUFRSQUNFX0dFVEZEUElDX0VYRUMJMAkvKiBbYWRkcl0gcmVxdWVzdCB0aGUgZXhlY3V0YWJsZSBsb2FkbWFwICovCiAjZGVmaW5lIFBUUkFDRV9HRVRGRFBJQ19JTlRFUlAJMQkvKiBbYWRkcl0gcmVxdWVzdCB0aGUgaW50ZXJwcmV0ZXIgbG9hZG1hcCAqLwogCi0jZGVmaW5lCVBUUkFDRV9HRVREU1BSRUdTCTU1CisjZGVmaW5lCVBUUkFDRV9HRVREU1BSRUdTCTU1CS8qIERTUCByZWdpc3RlcnMgKi8KICNkZWZpbmUJUFRSQUNFX1NFVERTUFJFR1MJNTYKICNlbmRpZgogCkBAIC0xMTcsNiArMTIzLDkgQEAKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKIAkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCiAJCSAtIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMSkKKyNkZWZpbmUgdGFza19wdF9kc3ByZWdzKHRhc2spIFwKKwkoKHN0cnVjdCBwdF9kc3ByZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCisJCSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgLSAxKQogI2Vsc2UKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKIAkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3J0Yy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9ydGMuaAppbmRleCAxODEzZjQyLi5mN2IwMTBkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3J0Yy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcnRjLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9BU01fUlRDX0gKICNkZWZpbmUgX0FTTV9SVENfSAogCit2b2lkIHRpbWVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkICgqYm9hcmRfdGltZV9pbml0KSh2b2lkKTsKIGV4dGVybiB2b2lkICgqcnRjX3NoX2dldF90aW1lKShzdHJ1Y3QgdGltZXNwZWMgKik7CiBleHRlcm4gaW50ICgqcnRjX3NoX3NldF90aW1lKShjb25zdCB0aW1lX3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDU1YTJiZDMuLmQ0NTBiY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTQsNyArNCw2IEBACiAjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDI1NgogCiAjaWZkZWYgX19LRVJORUxfXwotCiAvKgogICogVGhpcyBpcyBzZXQgdXAgYnkgdGhlIHNldHVwLXJvdXRpbmUgYXQgYm9vdC10aW1lCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfbW9iaWxlX2xjZGMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfbW9iaWxlX2xjZGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMwMTAyZi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX21vYmlsZV9sY2RjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NIX01PQklMRV9MQ0RDX0hfXwotI2RlZmluZSBfX0FTTV9TSF9NT0JJTEVfTENEQ19IX18KLQotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0KLWVudW0geyBSR0I4LCAgIC8qIDI0YnBwLCA4Ojg6OCAqLwotICAgICAgIFJHQjksICAgLyogMThicHAsIDk6OSAqLwotICAgICAgIFJHQjEyQSwgLyogMjRicHAsIDEyOjEyICovCi0gICAgICAgUkdCMTJCLCAvKiAxMmJwcCAqLwotICAgICAgIFJHQjE2LCAgLyogMTZicHAgKi8KLSAgICAgICBSR0IxOCwgIC8qIDE4YnBwICovCi0gICAgICAgUkdCMjQsICAvKiAyNGJwcCAqLwotICAgICAgIFNZUzhBLCAgLyogMjRicHAsIDg6ODo4ICovCi0gICAgICAgU1lTOEIsICAvKiAxOGJwcCwgODo4OjIgKi8KLSAgICAgICBTWVM4QywgIC8qIDE4YnBwLCAyOjg6OCAqLwotICAgICAgIFNZUzhELCAgLyogMTZicHAsIDg6OCAqLwotICAgICAgIFNZUzksICAgLyogMThicHAsIDk6OSAqLwotICAgICAgIFNZUzEyLCAgLyogMjRicHAsIDEyOjEyICovCi0gICAgICAgU1lTMTZBLCAvKiAxNmJwcCAqLwotICAgICAgIFNZUzE2QiwgLyogMThicHAsIDE2OjIgKi8KLSAgICAgICBTWVMxNkMsIC8qIDE4YnBwLCAyOjE2ICovCi0gICAgICAgU1lTMTgsICAvKiAxOGJwcCAqLwotICAgICAgIFNZUzI0IH07LyogMjRicHAgKi8KLQotZW51bSB7IExDRENfQ0hBTl9ESVNBQkxFRCA9IDAsCi0gICAgICAgTENEQ19DSEFOX01BSU5MQ0QsCi0gICAgICAgTENEQ19DSEFOX1NVQkxDRCB9OwotCi1lbnVtIHsgTENEQ19DTEtfQlVTLCBMQ0RDX0NMS19QRVJJUEhFUkFMLCBMQ0RDX0NMS19FWFRFUk5BTCB9OwotCi1zdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19jZmcgewotCXVuc2lnbmVkIGxvbmcgbGRtdDJyOwotCXVuc2lnbmVkIGxvbmcgbGRtdDNyOwotfTsKLQotc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzIHsKLQl2b2lkICgqd3JpdGVfaW5kZXgpKHZvaWQgKmhhbmRsZSwgdW5zaWduZWQgbG9uZyBkYXRhKTsKLQl2b2lkICgqd3JpdGVfZGF0YSkodm9pZCAqaGFuZGxlLCB1bnNpZ25lZCBsb25nIGRhdGEpOwotCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2RhdGEpKHZvaWQgKmhhbmRsZSk7Ci19OwotCi1zdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfYm9hcmRfY2ZnIHsKLQl2b2lkICpib2FyZF9kYXRhOwotCWludCAoKnNldHVwX3N5cykodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCi0JCQkgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKTsKLQl2b2lkICgqZGlzcGxheV9vbikodm9pZCAqYm9hcmRfZGF0YSk7Ci0Jdm9pZCAoKmRpc3BsYXlfb2ZmKSh2b2lkICpib2FyZF9kYXRhKTsKLX07Ci0KLXN0cnVjdCBzaF9tb2JpbGVfbGNkY19sY2Rfc2l6ZV9jZmcgeyAvKiB3aWR0aCBhbmQgaGVpZ2h0IG9mIHBhbmVsIGluIG1tICovCi0JdW5zaWduZWQgbG9uZyB3aWR0aDsKLQl1bnNpZ25lZCBsb25nIGhlaWdodDsKLX07Ci0KLXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZyB7Ci0JaW50IGNoYW47Ci0JaW50IGJwcDsKLQlpbnQgaW50ZXJmYWNlX3R5cGU7IC8qIHNlbGVjdHMgUkdCbiBvciBTWVNuIEkvRiwgc2VlIGFib3ZlICovCi0JaW50IGNsb2NrX2RpdmlkZXI7Ci0Jc3RydWN0IGZiX3ZpZGVvbW9kZSBsY2RfY2ZnOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19sY2Rfc2l6ZV9jZmcgbGNkX3NpemVfY2ZnOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19ib2FyZF9jZmcgYm9hcmRfY2ZnOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX2NmZyBzeXNfYnVzX2NmZzsgLyogb25seSBmb3IgU1lTbiBJL0YgKi8KLX07Ci0KLXN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIHsKLQl1bnNpZ25lZCBsb25nIGxkZGNrcjsKLQlpbnQgY2xvY2tfc291cmNlOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZyBjaFsyXTsKLX07Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9NT0JJTEVfTENEQ19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l6ZXMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l6ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTFmYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaXplcy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKy8qIERPIE5PVCBFRElUISEgLSB0aGlzIGZpbGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQKKyAqICAgICAgICAgICAgICAgICBmcm9tIC5zIGZpbGUgYnkgYXdrIC1mIHMyaC5hd2sKKyAqLworLyogIFNpemUgZGVmaW5pdGlvbnMKKyAqICBDb3B5cmlnaHQgKEMpIEFSTSBMaW1pdGVkIDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfX3NpemVzX2gKKyNkZWZpbmUgX19zaXplc19oICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIGhhbmR5IHNpemVzICovCisjZGVmaW5lIFNaXzE2CQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgU1pfMzIJCQkJMHgwMDAwMDAyMAorI2RlZmluZSBTWl82NAkJCQkweDAwMDAwMDQwCisjZGVmaW5lIFNaXzEyOAkJCQkweDAwMDAwMDgwCisjZGVmaW5lIFNaXzI1NgkJCQkweDAwMDAwMTAwCisjZGVmaW5lIFNaXzUxMgkJCQkweDAwMDAwMjAwCisKKyNkZWZpbmUgU1pfMUsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFNaXzRLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBTWl84SyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgU1pfMTZLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFNaXzMySwkJCQkweDAwMDA4MDAwCisjZGVmaW5lIFNaXzY0SyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBTWl8xMjhLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgU1pfMjU2SyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFNaXzUxMksgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorCisjZGVmaW5lIFNaXzFNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBTWl8yTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgU1pfNE0gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFNaXzhNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBTWl8xNk0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgU1pfMjZNCQkJCTB4MDFhMDAwMDAKKyNkZWZpbmUgU1pfMzJNICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFNaXzY0TSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBTWl8xMjhNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgU1pfMjU2TSAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFNaXzUxMk0gICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorCisjZGVmaW5lIFNaXzFHICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBTWl8yRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworI2VuZGlmCisKKy8qICAgICAgICAgRU5EICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCA1OTMzNDNjLi44NWI2NjBjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc21wLmgKQEAgLTIxLDI1ICsyMSwyOSBAQAogZXh0ZXJuIGludCBfX2NwdV9sb2dpY2FsX21hcFtOUl9DUFVTXTsKICNkZWZpbmUgY3B1X2xvZ2ljYWxfbWFwKGNwdSkgIF9fY3B1X2xvZ2ljYWxfbWFwW2NwdV0KIAotLyogSSd2ZSBubyBpZGVhIHdoYXQgdGhlIHJlYWwgbWVhbmluZyBvZiB0aGlzIGlzICovCi0jZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJMjAKK2VudW0geworCVNNUF9NU0dfRlVOQ1RJT04sCisJU01QX01TR19SRVNDSEVEVUxFLAorCVNNUF9NU0dfRlVOQ1RJT05fU0lOR0xFLAorCVNNUF9NU0dfVElNRVIsCiAKLSNkZWZpbmUgTk9fUFJPQ19JRAkoLTEpCisJU01QX01TR19OUiwJLyogbXVzdCBiZSBsYXN0ICovCit9OwogCi0jZGVmaW5lIFNNUF9NU0dfRlVOQ1RJT04JMAotI2RlZmluZSBTTVBfTVNHX1JFU0NIRURVTEUJMQotI2RlZmluZSBTTVBfTVNHX0ZVTkNUSU9OX1NJTkdMRQkyCi0jZGVmaW5lIFNNUF9NU0dfTlIJCTMKK3ZvaWQgc21wX21lc3NhZ2VfcmVjdih1bnNpZ25lZCBpbnQgbXNnKTsKK3ZvaWQgc21wX3RpbWVyX2Jyb2FkY2FzdChjcHVtYXNrX3QgbWFzayk7CisKK3ZvaWQgbG9jYWxfdGltZXJfaW50ZXJydXB0KHZvaWQpOwordm9pZCBsb2NhbF90aW1lcl9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KTsKIAogdm9pZCBwbGF0X3NtcF9zZXR1cCh2b2lkKTsKIHZvaWQgcGxhdF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKTsKIGludCBwbGF0X3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7CiB2b2lkIHBsYXRfc3RhcnRfY3B1KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZW50cnlfcG9pbnQpOwogdm9pZCBwbGF0X3NlbmRfaXBpKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBtZXNzYWdlKTsKLWludCBwbGF0X3JlZ2lzdGVyX2lwaV9oYW5kbGVyKHVuc2lnbmVkIGludCBtZXNzYWdlLAotCQkJICAgICAgdm9pZCAoKmhhbmRsZXIpKHZvaWQgKiksIHZvaWQgKmFyZyk7Ci1leHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpOwotZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKTsKKwordm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpOwordm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkoY3B1bWFza190IG1hc2spOwogCiAjZWxzZQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMzgxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMX0gKKworI2lmZGVmIENPTkZJR19TVVBFUkgzMgorIyBpbmNsdWRlICJzeXNjYWxsXzMyLmgiCisjZWxzZQorIyBpbmNsdWRlICJzeXNjYWxsXzY0LmgiCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDc3M2YyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzMyLmgKQEAgLTAsMCArMSwxMTAgQEAKKyNpZm5kZWYgX19BU01fU0hfU1lTQ0FMTF8zMl9ICisjZGVmaW5lIF9fQVNNX1NIX1NZU0NBTExfMzJfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qIFRoZSBzeXN0ZW0gY2FsbCBudW1iZXIgaXMgZ2l2ZW4gYnkgdGhlIHVzZXIgaW4gJWcxICovCitzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIChyZWdzLT50cmEgPj0gMCkgPyByZWdzLT5yZWdzWzNdIDogLTFMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9yb2xsYmFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qCisJICogWFhYOiBUaGlzIG5lZWRzIHNvbWUgdGhvdWdodC4gT24gU0ggd2UgZG9uJ3QKKwkgKiBzYXZlIGF3YXkgdGhlIG9yaWdpbmFsIHIwIHZhbHVlIGFueXdoZXJlLgorCSAqLworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3lzY2FsbF9oYXNfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIChyZWdzLT5zciAmIDB4MSkgPyB0cnVlIDogZmFsc2U7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+c3IgfD0gMHgxOworfQorc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfY2xlYXJfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+c3IgJj0gfjB4MTsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X2Vycm9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBzeXNjYWxsX2hhc19lcnJvcihyZWdzKSA/IHJlZ3MtPnJlZ3NbMF0gOiAwOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfcmV0dXJuX3ZhbHVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5yZWdzWzBdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICAgaW50IGVycm9yLCBsb25nIHZhbCkKK3sKKwlpZiAoZXJyb3IpIHsKKwkJc3lzY2FsbF9zZXRfZXJyb3IocmVncyk7CisJCXJlZ3MtPnJlZ3NbMF0gPSAtZXJyb3I7CisJfSBlbHNlIHsKKwkJc3lzY2FsbF9jbGVhcl9lcnJvcihyZWdzKTsKKwkJcmVncy0+cmVnc1swXSA9IHZhbDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX2dldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJCQkJCSB1bnNpZ25lZCBsb25nICphcmdzKQoreworCS8qCisJICogRG8gdGhpcyBzaW1wbHkgZm9yIG5vdy4gSWYgd2UgbmVlZCB0byBzdGFydCBzdXBwb3J0aW5nCisJICogZmV0Y2hpbmcgYXJndW1lbnRzIGZyb20gYXJiaXRyYXJ5IGluZGljZXMsIHRoaXMgd2lsbCBuZWVkIHNvbWUKKwkgKiBleHRyYSBsb2dpYy4gUHJlc2VudGx5IHRoZXJlIGFyZSBubyBpbi10cmVlIHVzZXJzIHRoYXQgZGVwZW5kCisJICogb24gdGhpcyBiZWhhdmlvdXIuCisJICovCisJQlVHX09OKGkpOworCisJLyogQXJndW1lbnQgcGF0dGVybiBpczogUjQsIFI1LCBSNiwgUjcsIFIwLCBSMSAqLworCXN3aXRjaCAobikgeworCWNhc2UgNjogYXJnc1s1XSA9IHJlZ3MtPnJlZ3NbMV07CisJY2FzZSA1OiBhcmdzWzRdID0gcmVncy0+cmVnc1swXTsKKwljYXNlIDQ6IGFyZ3NbM10gPSByZWdzLT5yZWdzWzddOworCWNhc2UgMzogYXJnc1syXSA9IHJlZ3MtPnJlZ3NbNl07CisJY2FzZSAyOiBhcmdzWzFdID0gcmVncy0+cmVnc1s1XTsKKwljYXNlIDE6CWFyZ3NbMF0gPSByZWdzLT5yZWdzWzRdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX3NldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJCQkJCSBjb25zdCB1bnNpZ25lZCBsb25nICphcmdzKQoreworCS8qIFNhbWUgbm90ZSBhcyBhYm92ZSBhcHBsaWVzICovCisJQlVHX09OKGkpOworCisJc3dpdGNoIChuKSB7CisJY2FzZSA2OiByZWdzLT5yZWdzWzFdID0gYXJnc1s1XTsKKwljYXNlIDU6IHJlZ3MtPnJlZ3NbMF0gPSBhcmdzWzRdOworCWNhc2UgNDogcmVncy0+cmVnc1s3XSA9IGFyZ3NbM107CisJY2FzZSAzOiByZWdzLT5yZWdzWzZdID0gYXJnc1syXTsKKwljYXNlIDI6IHJlZ3MtPnJlZ3NbNV0gPSBhcmdzWzFdOworCWNhc2UgMTogcmVncy0+cmVnc1s0XSA9IGFyZ3NbMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2FhYThjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzY0LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExfNjRfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMXzY0X0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N5c2NhbGwuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxscy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZTJiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX0FTTV9TSF9TWVNDQUxMU19ICisjZGVmaW5lIF9fQVNNX1NIX1NZU0NBTExTX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IG9sZF91dHNuYW1lOworCithc21saW5rYWdlIGludCBvbGRfbW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJaW50IGZkLCB1bnNpZ25lZCBsb25nIG9mZik7Cithc21saW5rYWdlIGxvbmcgc3lzX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCSAgdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZik7Cithc21saW5rYWdlIGludCBzeXNfaXBjKHVpbnQgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLAorCQkgICAgICAgaW50IHRoaXJkLCB2b2lkIF9fdXNlciAqcHRyLCBsb25nIGZpZnRoKTsKK2FzbWxpbmthZ2UgaW50IHN5c191bmFtZShzdHJ1Y3Qgb2xkX3V0c25hbWUgX191c2VyICpuYW1lKTsKKworI2lmZGVmIENPTkZJR19TVVBFUkgzMgorIyBpbmNsdWRlICJzeXNjYWxsc18zMi5oIgorI2Vsc2UKKyMgaW5jbHVkZSAic3lzY2FsbHNfNjQuaCIKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHNfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHNfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDRjNWU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsc18zMi5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgX19BU01fU0hfU1lTQ0FMTFNfMzJfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMU18zMl9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworYXNtbGlua2FnZSBpbnQgc3lzX2ZvcmsodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQlzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCisJCQkgdW5zaWduZWQgbG9uZyBwYXJlbnRfdGlkcHRyLAorCQkJIHVuc2lnbmVkIGxvbmcgY2hpbGRfdGlkcHRyLAorCQkJIHN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfdmZvcmsodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCSB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJIHN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfZXhlY3ZlKGNoYXIgX191c2VyICp1ZmlsZW5hbWUsIGNoYXIgX191c2VyICogX191c2VyICp1YXJndiwKKwkJCSAgY2hhciBfX3VzZXIgKiBfX3VzZXIgKnVlbnZwLCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3NpZ3N1c3BlbmQob2xkX3NpZ3NldF90IG1hc2ssIHVuc2lnbmVkIGxvbmcgcjUsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICphY3QsCisJCQkgICAgIHN0cnVjdCBvbGRfc2lnYWN0aW9uIF9fdXNlciAqb2FjdCk7Cithc21saW5rYWdlIGludCBzeXNfc2lnYWx0c3RhY2soY29uc3Qgc3RhY2tfdCBfX3VzZXIgKnVzcywgc3RhY2tfdCBfX3VzZXIgKnVvc3MsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3NpZ3JldHVybih1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJICAgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICAgICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3J0X3NpZ3JldHVybih1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19waXBlKHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQl1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2Ugc3NpemVfdCBzeXNfcHJlYWRfd3JhcHBlcih1bnNpZ25lZCBpbnQgZmQsIGNoYXIgX191c2VyICpidWYsCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvbmcgZHVtbXksIGxvZmZfdCBwb3MpOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c19wd3JpdGVfd3JhcHBlcih1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb25nIGR1bW15LCBsb2ZmX3QgcG9zKTsKK2FzbWxpbmthZ2UgaW50IHN5c19mYWR2aXNlNjRfNjRfd3JhcHBlcihpbnQgZmQsIHUzMiBvZmZzZXQwLCB1MzIgb2Zmc2V0MSwKKwkJCQkJdTMyIGxlbjAsIHUzMiBsZW4xLCBpbnQgYWR2aWNlKTsKKworLyogTWlzYyBzeXNjYWxsIHJlbGF0ZWQgYml0cyAqLworYXNtbGlua2FnZSBsb25nIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSB2b2lkIGRvX3N5c2NhbGxfdHJhY2VfbGVhdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSB2b2lkIGRvX25vdGlmeV9yZXN1bWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBzYXZlX3IwLAorCQkJCSB1bnNpZ25lZCBsb25nIHRocmVhZF9pbmZvX2ZsYWdzKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9TWVNDQUxMU18zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxZmQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHNfNjQuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExTXzY0X0gKKyNkZWZpbmUgX19BU01fU0hfU1lTQ0FMTFNfNjRfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHB0X3JlZ3M7CisKK2FzbWxpbmthZ2UgaW50IHN5c19mb3JrKHVuc2lnbmVkIGxvbmcgcjIsIHVuc2lnbmVkIGxvbmcgcjMsCisJCQl1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCXN0cnVjdCBwdF9yZWdzICpwcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfY2xvbmUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdzcCwKKwkJCSB1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkgc3RydWN0IHB0X3JlZ3MgKnByZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c192Zm9yayh1bnNpZ25lZCBsb25nIHIyLCB1bnNpZ25lZCBsb25nIHIzLAorCQkJIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQkgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCSBzdHJ1Y3QgcHRfcmVncyAqcHJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2V4ZWN2ZShjaGFyICp1ZmlsZW5hbWUsIGNoYXIgKip1YXJndiwKKwkJCSAgY2hhciAqKnVlbnZwLCB1bnNpZ25lZCBsb25nIHI1LAorCQkJICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICBzdHJ1Y3QgcHRfcmVncyAqcHJlZ3MpOworCisvKiBNaXNjIHN5c2NhbGwgcmVsYXRlZCBiaXRzICovCithc21saW5rYWdlIGxvbmcgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19zeXNjYWxsX3RyYWNlX2xlYXZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9TWVNDQUxMU182NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAwNTZkNjhjLi42MTYwZmU0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTcwLDYgKzcwLDggQEAKIAogI2lmZGVmIENPTkZJR19HVVNBX1JCCiAjaW5jbHVkZSA8YXNtL2NtcHhjaGctZ3JiLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKKyNpbmNsdWRlIDxhc20vY21weGNoZy1sbHNjLmg+CiAjZWxzZQogI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLWlycS5oPgogI2VuZGlmCkBAIC0xMjUsNiArMTI3LDggQEAKICAgfSkKIAogZXh0ZXJuIHZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKK3ZvaWQgZnJlZV9pbml0bWVtKHZvaWQpOwordm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogCiBleHRlcm4gdm9pZCAqc2V0X2V4Y2VwdGlvbl90YWJsZV92ZWModW5zaWduZWQgaW50IHZlYywgdm9pZCAqaGFuZGxlcik7CiAKQEAgLTE3Nyw4ICsxODEsOCBAQAogI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQogCiBzdHJ1Y3QgbWVtX2FjY2VzcyB7Ci0JdW5zaWduZWQgbG9uZyAoKmZyb20pKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNudCk7Ci0JdW5zaWduZWQgbG9uZyAoKnRvKSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjbnQpOworCXVuc2lnbmVkIGxvbmcgKCpmcm9tKSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIGxvbmcgY250KTsKKwl1bnNpZ25lZCBsb25nICgqdG8pKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjbnQpOwogfTsKIAogI2lmZGVmIENPTkZJR19TVVBFUkgzMgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKaW5kZXggZjExYmNmMC4uYTcyNmQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCkBAIC01OCw3ICs1OCw4IEBACiAJbGFzdCA9IF9fbGFzdDsJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBfX3VzZXNfanVtcF90b191bmNhY2hlZCBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIudW5jYWNoZWQudGV4dCIpKSkKKyNkZWZpbmUgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgXAorCW5vaW5saW5lIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi51bmNhY2hlZC50ZXh0IikpKQogCiAvKgogICogSnVtcCB0byB1bmNhY2hlZCBhcmVhLgpAQCAtOTYsNyArOTcsNDggQEAKIAkJOiAiPSZyIiAoX19kdW1teSkpOwkJCVwKIH0gd2hpbGUgKDApCiAKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19TUl9SQgorI2RlZmluZSBsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcigpCVwKKyh7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBfdmVjOwkJXAorCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJXAorCQkic3RjIHIyX2JhbmssICUwXG5cdCIJXAorCQk6ICI9ciIgKF92ZWMpCQlcCisJKTsJCQkJXAorCQkJCQlcCisJX3ZlYzsJCQkJXAorfSkKKyNlbHNlCisjZGVmaW5lIGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCkJXAorKHsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF92ZWM7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJXAorCQkibW92IHI0LCAlMFxuXHQiCVwKKwkJOiAiPXIiIChfdmVjKQkJXAorCSk7CQkJCVwKKwkJCQkJXAorCV92ZWM7CQkJCVwKK30pCisjZW5kaWYKKwogaW50IGhhbmRsZV91bmFsaWduZWRfYWNjZXNzKG9wY29kZV90IGluc3RydWN0aW9uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCSAgICBzdHJ1Y3QgbWVtX2FjY2VzcyAqbWEpOwogCithc21saW5rYWdlIHZvaWQgZG9fYWRkcmVzc19lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgdW5zaWduZWQgbG9uZyB3cml0ZWFjY2VzcywKKwkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19kaXZpZGVfZXJyb3IodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCQl1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJCXN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIHZvaWQgZG9fcmVzZXJ2ZWRfaW5zdCh1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19pbGxlZ2FsX3Nsb3RfaW5zdCh1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19leGNlcHRpb25fZXJyb3IodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJCSAgIHN0cnVjdCBwdF9yZWdzIF9fcmVncyk7CisKICNlbmRpZiAvKiBfX0FTTV9TSF9TWVNURU1fMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDBhODk0Y2EuLmYwOWFjNDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTMzLDIwICszMywxMiBAQAogI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHgxMDAwMDAwMAogCiAjaWYgZGVmaW5lZChDT05GSUdfNEtTVEFDS1MpCi0jZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSCSgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfUEFHRV9TSVpFXzRLQikKLSNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIJKDEpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19QQUdFX1NJWkVfOEtCKQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BBR0VfU0laRV8xNktCKQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BBR0VfU0laRV82NEtCKQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMCkKKyNkZWZpbmUgVEhSRUFEX1NISUZUCTEyCiAjZWxzZQotI2Vycm9yICJVbmtub3duIHRocmVhZCBzaXplIgorI2RlZmluZSBUSFJFQURfU0hJRlQJMTMKICNlbmRpZgogCi0jZGVmaW5lIFRIUkVBRF9TSVpFCShQQUdFX1NJWkUgPDwgVEhSRUFEX1NJWkVfT1JERVIpCisjZGVmaW5lIFRIUkVBRF9TSVpFCSgxIDw8IFRIUkVBRF9TSElGVCkKICNkZWZpbmUgU1RBQ0tfV0FSTgkoVEhSRUFEX1NJWkUgPj4gMykKIAogLyoKQEAgLTk0LDE1ICs4NiwxOSBAQAogCXJldHVybiB0aTsKIH0KIAorLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KKyNpZiBUSFJFQURfU0hJRlQgPj0gUEFHRV9TSElGVAorCisjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSCShUSFJFQURfU0hJRlQgLSBQQUdFX1NISUZUKQorCisjZWxzZSAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCisKICNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAKLS8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCi0jZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRpKQlremFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKQotI2Vsc2UKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odGkpCWttYWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCi0jZW5kaWYKLSNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkJa2ZyZWUodGkpCitleHRlcm4gc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CitleHRlcm4gdm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpOworIAorI2VuZGlmIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCmluZGV4IDU1ODBmZDQuLjU2ZmQyMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCkBAIC0yNiwxNiArMjYsMjAgQEAKIAlyZXR2YWwgPSAwOwkJCQkJCVwKIAlzd2l0Y2ggKHNpemUpIHsJCQkJCQlcCiAJY2FzZSAxOgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX2IoeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fYigodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAljYXNlIDI6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fdyh4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX2dldF91c2VyX2FzbV93KCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWNhc2UgNDoJCQkJCQkJXAotCQlyZXR2YWwgPSBfX2dldF91c2VyX2FzbV9sKHgsIHB0cik7CQlcCisJCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX2woKHZvaWQgKikmeCwJCVwKKwkJCQkJICAobG9uZylwdHIpOwkJXAogCQlicmVhazsJCQkJCQlcCiAJY2FzZSA4OgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX3EoeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fcSgodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAlkZWZhdWx0OgkJCQkJCVwKIAkJX19nZXRfdXNlcl91bmtub3duKCk7CQkJCVwKQEAgLTU0LDE2ICs1OCwyMCBAQAogCXJldHZhbCA9IDA7CQkJCQkJXAogCXN3aXRjaCAoc2l6ZSkgewkJCQkJCVwKIAljYXNlIDE6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fYih4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV9iKCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWNhc2UgMjoJCQkJCQkJXAotCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV93KHgsIHB0cik7CQlcCisJCXJldHZhbCA9IF9fcHV0X3VzZXJfYXNtX3coKHZvaWQgKikmeCwJCVwKKwkJCQkJICAobG9uZylwdHIpOwkJXAogCQlicmVhazsJCQkJCQlcCiAJY2FzZSA0OgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fcHV0X3VzZXJfYXNtX2woeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fbCgodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAljYXNlIDg6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fcSh4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV9xKCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWRlZmF1bHQ6CQkJCQkJXAogCQlfX3B1dF91c2VyX3Vua25vd24oKTsJCQkJXApAQCAtNzcsNSArODUsNyBAQAogZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl91bmtub3duKHZvaWQpOwogCiBleHRlcm4gbG9uZyBfX3N0cm5sZW5fdXNlcihjb25zdCBjaGFyICpfX3MsIGxvbmcgX19uKTsKK2V4dGVybiBpbnQgX19zdHJuY3B5X2Zyb21fdXNlcih1bnNpZ25lZCBsb25nIF9fZGVzdCwKKwkgICAgICAgdW5zaWduZWQgbG9uZyBfX3VzZXIgX19zcmMsIGludCBfX2NvdW50KTsKIAogI2VuZGlmIC8qIF9fQVNNX1NIX1VBQ0NFU1NfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDJhL2NwdS9zaDcyMDMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyYS9jcHUvc2g3MjAzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmOTMxNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyYS9jcHUvc2g3MjAzLmgKQEAgLTAsMCArMSwxNDMgQEAKKyNpZm5kZWYgX19BU01fU0g3MjAzX0hfXworI2RlZmluZSBfX0FTTV9TSDcyMDNfSF9fCisKK2VudW0geworCS8qIFBBICovCisJR1BJT19QQTcsIEdQSU9fUEE2LCBHUElPX1BBNSwgR1BJT19QQTQsCisJR1BJT19QQTMsIEdQSU9fUEEyLCBHUElPX1BBMSwgR1BJT19QQTAsCisKKwkvKiBQQiAqLworCUdQSU9fUEIxMiwKKwlHUElPX1BCMTEsIEdQSU9fUEIxMCwgR1BJT19QQjksIEdQSU9fUEI4LAorCUdQSU9fUEI3LCBHUElPX1BCNiwgR1BJT19QQjUsIEdQSU9fUEI0LAorCUdQSU9fUEIzLCBHUElPX1BCMiwgR1BJT19QQjEsIEdQSU9fUEIwLAorCisJLyogUEMgKi8KKwlHUElPX1BDMTQsIEdQSU9fUEMxMywgR1BJT19QQzEyLAorCUdQSU9fUEMxMSwgR1BJT19QQzEwLCBHUElPX1BDOSwgR1BJT19QQzgsCisJR1BJT19QQzcsIEdQSU9fUEM2LCBHUElPX1BDNSwgR1BJT19QQzQsCisJR1BJT19QQzMsIEdQSU9fUEMyLCBHUElPX1BDMSwgR1BJT19QQzAsCisKKwkvKiBQRCAqLworCUdQSU9fUEQxNSwgR1BJT19QRDE0LCBHUElPX1BEMTMsIEdQSU9fUEQxMiwKKwlHUElPX1BEMTEsIEdQSU9fUEQxMCwgR1BJT19QRDksIEdQSU9fUEQ4LAorCUdQSU9fUEQ3LCBHUElPX1BENiwgR1BJT19QRDUsIEdQSU9fUEQ0LAorCUdQSU9fUEQzLCBHUElPX1BEMiwgR1BJT19QRDEsIEdQSU9fUEQwLAorCisJLyogUEUgKi8KKwlHUElPX1BFMTUsIEdQSU9fUEUxNCwgR1BJT19QRTEzLCBHUElPX1BFMTIsCisJR1BJT19QRTExLCBHUElPX1BFMTAsIEdQSU9fUEU5LCBHUElPX1BFOCwKKwlHUElPX1BFNywgR1BJT19QRTYsIEdQSU9fUEU1LCBHUElPX1BFNCwKKwlHUElPX1BFMywgR1BJT19QRTIsIEdQSU9fUEUxLCBHUElPX1BFMCwKKworCS8qIFBGICovCisJR1BJT19QRjMwLCBHUElPX1BGMjksIEdQSU9fUEYyOCwKKwlHUElPX1BGMjcsIEdQSU9fUEYyNiwgR1BJT19QRjI1LCBHUElPX1BGMjQsCisJR1BJT19QRjIzLCBHUElPX1BGMjIsIEdQSU9fUEYyMSwgR1BJT19QRjIwLAorCUdQSU9fUEYxOSwgR1BJT19QRjE4LCBHUElPX1BGMTcsIEdQSU9fUEYxNiwKKwlHUElPX1BGMTUsIEdQSU9fUEYxNCwgR1BJT19QRjEzLCBHUElPX1BGMTIsCisJR1BJT19QRjExLCBHUElPX1BGMTAsIEdQSU9fUEY5LCBHUElPX1BGOCwKKwlHUElPX1BGNywgR1BJT19QRjYsIEdQSU9fUEY1LCBHUElPX1BGNCwKKwlHUElPX1BGMywgR1BJT19QRjIsIEdQSU9fUEYxLCBHUElPX1BGMCwKKworCS8qIElOVEM6IElSUSBhbmQgUElOVCBvbiBQQi9QRC9QRSAqLworCUdQSU9fRk5fUElOVDdfUEIsIEdQSU9fRk5fUElOVDZfUEIsIEdQSU9fRk5fUElOVDVfUEIsIEdQSU9fRk5fUElOVDRfUEIsCisJR1BJT19GTl9QSU5UM19QQiwgR1BJT19GTl9QSU5UMl9QQiwgR1BJT19GTl9QSU5UMV9QQiwgR1BJT19GTl9QSU5UMF9QQiwKKwlHUElPX0ZOX1BJTlQ3X1BELCBHUElPX0ZOX1BJTlQ2X1BELCBHUElPX0ZOX1BJTlQ1X1BELCBHUElPX0ZOX1BJTlQ0X1BELAorCUdQSU9fRk5fUElOVDNfUEQsIEdQSU9fRk5fUElOVDJfUEQsIEdQSU9fRk5fUElOVDFfUEQsIEdQSU9fRk5fUElOVDBfUEQsCisJR1BJT19GTl9JUlE3X1BCLCBHUElPX0ZOX0lSUTZfUEIsIEdQSU9fRk5fSVJRNV9QQiwgR1BJT19GTl9JUlE0X1BCLAorCUdQSU9fRk5fSVJRM19QQiwgR1BJT19GTl9JUlEyX1BCLCBHUElPX0ZOX0lSUTFfUEIsIEdQSU9fRk5fSVJRMF9QQiwKKwlHUElPX0ZOX0lSUTdfUEQsIEdQSU9fRk5fSVJRNl9QRCwgR1BJT19GTl9JUlE1X1BELCBHUElPX0ZOX0lSUTRfUEQsCisJR1BJT19GTl9JUlEzX1BELCBHUElPX0ZOX0lSUTJfUEQsIEdQSU9fRk5fSVJRMV9QRCwgR1BJT19GTl9JUlEwX1BELAorCUdQSU9fRk5fSVJRN19QRSwgR1BJT19GTl9JUlE2X1BFLCBHUElPX0ZOX0lSUTVfUEUsIEdQSU9fRk5fSVJRNF9QRSwKKwlHUElPX0ZOX0lSUTNfUEUsIEdQSU9fRk5fSVJRMl9QRSwgR1BJT19GTl9JUlExX1BFLCBHUElPX0ZOX0lSUTBfUEUsCisKKwlHUElPX0ZOX1dEVE9WRiwgR1BJT19GTl9JUlFPVVQsIEdQSU9fRk5fUkVGT1VULCBHUElPX0ZOX0lSUU9VVF9SRUZPVVQsCisJR1BJT19GTl9VQkNUUkcsCisKKwkvKiBDQU4gKi8KKwlHUElPX0ZOX0NUWDEsIEdQSU9fRk5fQ1JYMSwgR1BJT19GTl9DVFgwLCBHUElPX0ZOX0NUWDBfQ1RYMSwKKwlHUElPX0ZOX0NSWDAsIEdQSU9fRk5fQ1JYMF9DUlgxLAorCisJLyogSUlDMyAqLworCUdQSU9fRk5fU0RBMywgR1BJT19GTl9TQ0wzLAorCUdQSU9fRk5fU0RBMiwgR1BJT19GTl9TQ0wyLAorCUdQSU9fRk5fU0RBMSwgR1BJT19GTl9TQ0wxLAorCUdQSU9fRk5fU0RBMCwgR1BJT19GTl9TQ0wwLAorCisJLyogRE1BQyAqLworCUdQSU9fRk5fVEVORDBfUEQsIEdQSU9fRk5fVEVORDBfUEUsIEdQSU9fRk5fREFDSzBfUEQsCisJR1BJT19GTl9EQUNLMF9QRSwgR1BJT19GTl9EUkVRMF9QRCwgR1BJT19GTl9EUkVRMF9QRSwKKwlHUElPX0ZOX1RFTkQxX1BELCBHUElPX0ZOX1RFTkQxX1BFLCBHUElPX0ZOX0RBQ0sxX1BELAorCUdQSU9fRk5fREFDSzFfUEUsIEdQSU9fRk5fRFJFUTFfUEQsIEdQSU9fRk5fRFJFUTFfUEUsCisJR1BJT19GTl9EQUNLMiwgR1BJT19GTl9EUkVRMiwKKwlHUElPX0ZOX0RBQ0szLCBHUElPX0ZOX0RSRVEzLAorCisJLyogQURDICovCisJR1BJT19GTl9BRFRSR19QRCwgR1BJT19GTl9BRFRSR19QRSwKKworCS8qIEJTQyAqLworCUdQSU9fRk5fRDMxLCBHUElPX0ZOX0QzMCwgR1BJT19GTl9EMjksIEdQSU9fRk5fRDI4LAorCUdQSU9fRk5fRDI3LCBHUElPX0ZOX0QyNiwgR1BJT19GTl9EMjUsIEdQSU9fRk5fRDI0LAorCUdQSU9fRk5fRDIzLCBHUElPX0ZOX0QyMiwgR1BJT19GTl9EMjEsIEdQSU9fRk5fRDIwLAorCUdQSU9fRk5fRDE5LCBHUElPX0ZOX0QxOCwgR1BJT19GTl9EMTcsIEdQSU9fRk5fRDE2LAorCUdQSU9fRk5fQTI1LCBHUElPX0ZOX0EyNCwgR1BJT19GTl9BMjMsIEdQSU9fRk5fQTIyLAorCUdQSU9fRk5fQTIxLCBHUElPX0ZOX0NTNCwgR1BJT19GTl9NUkVTLCBHUElPX0ZOX0JTLAorCUdQSU9fRk5fSU9JUzE2LCBHUElPX0ZOX0NTMSwgR1BJT19GTl9DUzZfQ0UxQiwKKwlHUElPX0ZOX0NFMkIsIEdQSU9fRk5fQ1M1X0NFMUEsIEdQSU9fRk5fQ0UyQSwKKwlHUElPX0ZOX0ZSQU1FLCBHUElPX0ZOX1dBSVQsIEdQSU9fRk5fUkRXUiwKKwlHUElPX0ZOX0NLRSwgR1BJT19GTl9DQVNVLCBHUElPX0ZOX0JSRVEsIEdQSU9fRk5fUkFTVSwKKwlHUElPX0ZOX0JBQ0ssIEdQSU9fRk5fQ0FTTCwgR1BJT19GTl9SQVNMLAorCUdQSU9fRk5fV0UzX0RRTVVVX0FIX0lDSU9fV1IsIEdQSU9fRk5fV0UyX0RRTVVMX0lDSU9SRCwKKwlHUElPX0ZOX1dFMV9EUU1MVV9XRSwgR1BJT19GTl9XRTBfRFFNTEwsCisJR1BJT19GTl9DUzMsIEdQSU9fRk5fQ1MyLCBHUElPX0ZOX0ExLCBHUElPX0ZOX0EwLCBHUElPX0ZOX0NTNywKKworCS8qIFRNVSAqLworCUdQSU9fRk5fVElPQzRELCBHUElPX0ZOX1RJT0M0QywgR1BJT19GTl9USU9DNEIsIEdQSU9fRk5fVElPQzRBLAorCUdQSU9fRk5fVElPQzNELCBHUElPX0ZOX1RJT0MzQywgR1BJT19GTl9USU9DM0IsIEdQSU9fRk5fVElPQzNBLAorCUdQSU9fRk5fVElPQzJCLCBHUElPX0ZOX1RJT0MxQiwgR1BJT19GTl9USU9DMkEsIEdQSU9fRk5fVElPQzFBLAorCUdQSU9fRk5fVElPQzBELCBHUElPX0ZOX1RJT0MwQywgR1BJT19GTl9USU9DMEIsIEdQSU9fRk5fVElPQzBBLAorCUdQSU9fRk5fVENMS0RfUEQsIEdQSU9fRk5fVENMS0NfUEQsIEdQSU9fRk5fVENMS0JfUEQsIEdQSU9fRk5fVENMS0FfUEQsCisJR1BJT19GTl9UQ0xLRF9QRiwgR1BJT19GTl9UQ0xLQ19QRiwgR1BJT19GTl9UQ0xLQl9QRiwgR1BJT19GTl9UQ0xLQV9QRiwKKworCS8qIFNTVSAqLworCUdQSU9fRk5fU0NTMF9QRCwgR1BJT19GTl9TU08wX1BELCBHUElPX0ZOX1NTSTBfUEQsIEdQSU9fRk5fU1NDSzBfUEQsCisJR1BJT19GTl9TQ1MwX1BGLCBHUElPX0ZOX1NTTzBfUEYsIEdQSU9fRk5fU1NJMF9QRiwgR1BJT19GTl9TU0NLMF9QRiwKKwlHUElPX0ZOX1NDUzFfUEQsIEdQSU9fRk5fU1NPMV9QRCwgR1BJT19GTl9TU0kxX1BELCBHUElPX0ZOX1NTQ0sxX1BELAorCUdQSU9fRk5fU0NTMV9QRiwgR1BJT19GTl9TU08xX1BGLCBHUElPX0ZOX1NTSTFfUEYsIEdQSU9fRk5fU1NDSzFfUEYsCisKKwkvKiBTQ0lGICovCisJR1BJT19GTl9UWEQwLCBHUElPX0ZOX1JYRDAsIEdQSU9fRk5fU0NLMCwKKwlHUElPX0ZOX1RYRDEsIEdQSU9fRk5fUlhEMSwgR1BJT19GTl9TQ0sxLAorCUdQSU9fRk5fVFhEMiwgR1BJT19GTl9SWEQyLCBHUElPX0ZOX1NDSzIsCisJR1BJT19GTl9SVFMzLCBHUElPX0ZOX0NUUzMsIEdQSU9fRk5fVFhEMywgR1BJT19GTl9SWEQzLCBHUElPX0ZOX1NDSzMsCisKKwkvKiBTU0kgKi8KKwlHUElPX0ZOX0FVRElPX0NMSywKKwlHUElPX0ZOX1NTSURBVEEzLCBHUElPX0ZOX1NTSVdTMywgR1BJT19GTl9TU0lTQ0szLAorCUdQSU9fRk5fU1NJREFUQTIsIEdQSU9fRk5fU1NJV1MyLCBHUElPX0ZOX1NTSVNDSzIsCisJR1BJT19GTl9TU0lEQVRBMSwgR1BJT19GTl9TU0lXUzEsIEdQSU9fRk5fU1NJU0NLMSwKKwlHUElPX0ZOX1NTSURBVEEwLCBHUElPX0ZOX1NTSVdTMCwgR1BJT19GTl9TU0lTQ0swLAorCisJLyogRkxDVEwgKi8KKwlHUElPX0ZOX0ZDRSwgR1BJT19GTl9GUkIsCisJR1BJT19GTl9OQUY3LCBHUElPX0ZOX05BRjYsIEdQSU9fRk5fTkFGNSwgR1BJT19GTl9OQUY0LAorCUdQSU9fRk5fTkFGMywgR1BJT19GTl9OQUYyLCBHUElPX0ZOX05BRjEsIEdQSU9fRk5fTkFGMCwKKwlHUElPX0ZOX0ZTQywgR1BJT19GTl9GT0UsIEdQSU9fRk5fRkNERSwgR1BJT19GTl9GV0UsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0RfVkVQV0MsIEdQSU9fRk5fTENEX1ZDUFdDLAorCUdQSU9fRk5fTENEX0NMSywgR1BJT19GTl9MQ0RfRkxNLAorCUdQSU9fRk5fTENEX01fRElTUCwgR1BJT19GTl9MQ0RfQ0wyLAorCUdQSU9fRk5fTENEX0NMMSwgR1BJT19GTl9MQ0RfRE9OLAorCUdQSU9fRk5fTENEX0RBVEExNSwgR1BJT19GTl9MQ0RfREFUQTE0LAorCUdQSU9fRk5fTENEX0RBVEExMywgR1BJT19GTl9MQ0RfREFUQTEyLAorCUdQSU9fRk5fTENEX0RBVEExMSwgR1BJT19GTl9MQ0RfREFUQTEwLAorCUdQSU9fRk5fTENEX0RBVEE5LCBHUElPX0ZOX0xDRF9EQVRBOCwKKwlHUElPX0ZOX0xDRF9EQVRBNywgR1BJT19GTl9MQ0RfREFUQTYsCisJR1BJT19GTl9MQ0RfREFUQTUsIEdQSU9fRk5fTENEX0RBVEE0LAorCUdQSU9fRk5fTENEX0RBVEEzLCBHUElPX0ZOX0xDRF9EQVRBMiwKKwlHUElPX0ZOX0xDRF9EQVRBMSwgR1BJT19GTl9MQ0RfREFUQTAsCit9OworCisjZW5kaWYgLyogX19BU01fU0g3MjAzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3NoNzcyMC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3NoNzcyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYzE0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvc2g3NzIwLmgKQEAgLTAsMCArMSwxNzQgQEAKKyNpZm5kZWYgX19BU01fU0g3NzIwX0hfXworI2RlZmluZSBfX0FTTV9TSDc3MjBfSF9fCisKK2VudW0geworCS8qIFBUQSAqLworCUdQSU9fUFRBNywgR1BJT19QVEE2LCBHUElPX1BUQTUsIEdQSU9fUFRBNCwKKwlHUElPX1BUQTMsIEdQSU9fUFRBMiwgR1BJT19QVEExLCBHUElPX1BUQTAsCisKKwkvKiBQVEIgKi8KKwlHUElPX1BUQjcsIEdQSU9fUFRCNiwgR1BJT19QVEI1LCBHUElPX1BUQjQsCisJR1BJT19QVEIzLCBHUElPX1BUQjIsIEdQSU9fUFRCMSwgR1BJT19QVEIwLAorCisJLyogUFRDICovCisJR1BJT19QVEM3LCBHUElPX1BUQzYsIEdQSU9fUFRDNSwgR1BJT19QVEM0LAorCUdQSU9fUFRDMywgR1BJT19QVEMyLCBHUElPX1BUQzEsIEdQSU9fUFRDMCwKKworCS8qIFBURCAqLworCUdQSU9fUFRENywgR1BJT19QVEQ2LCBHUElPX1BURDUsIEdQSU9fUFRENCwKKwlHUElPX1BURDMsIEdQSU9fUFREMiwgR1BJT19QVEQxLCBHUElPX1BURDAsCisKKwkvKiBQVEUgKi8KKwlHUElPX1BURTYsIEdQSU9fUFRFNSwgR1BJT19QVEU0LCBHUElPX1BURTMsCisJR1BJT19QVEUyLCBHUElPX1BURTEsIEdQSU9fUFRFMCwKKworCS8qIFBURiAqLworCUdQSU9fUFRGNiwgR1BJT19QVEY1LCBHUElPX1BURjQsIEdQSU9fUFRGMywKKwlHUElPX1BURjIsIEdQSU9fUFRGMSwgR1BJT19QVEYwLCBHUElPX1BURzYsCisKKwkvKiBQVEcgKi8KKwlHUElPX1BURzUsIEdQSU9fUFRHNCwgR1BJT19QVEczLCBHUElPX1BURzIsCisJR1BJT19QVEcxLCBHUElPX1BURzAsCisKKwkvKiBQVEggKi8KKwlHUElPX1BUSDYsIEdQSU9fUFRINSwgR1BJT19QVEg0LCBHUElPX1BUSDMsCisJR1BJT19QVEgyLCBHUElPX1BUSDEsIEdQSU9fUFRIMCwKKworCS8qIFBUSiAqLworCUdQSU9fUFRKNiwgR1BJT19QVEo1LCBHUElPX1BUSjQsIEdQSU9fUFRKMywKKwlHUElPX1BUSjIsIEdQSU9fUFRKMSwgR1BJT19QVEowLAorCisJLyogUFRLICovCisJR1BJT19QVEszLCBHUElPX1BUSzIsIEdQSU9fUFRLMSwgR1BJT19QVEswLAorCisJLyogUFRMICovCisJR1BJT19QVEw3LCBHUElPX1BUTDYsIEdQSU9fUFRMNSwgR1BJT19QVEw0LCBHUElPX1BUTDMsCisKKwkvKiBQVE0gKi8KKwlHUElPX1BUTTcsIEdQSU9fUFRNNiwgR1BJT19QVE01LCBHUElPX1BUTTQsCisJR1BJT19QVE0zLCBHUElPX1BUTTIsIEdQSU9fUFRNMSwgR1BJT19QVE0wLAorCisJLyogUFRQICovCisJR1BJT19QVFA0LCBHUElPX1BUUDMsIEdQSU9fUFRQMiwgR1BJT19QVFAxLCBHUElPX1BUUDAsCisKKwkvKiBQVFIgKi8KKwlHUElPX1BUUjcsIEdQSU9fUFRSNiwgR1BJT19QVFI1LCBHUElPX1BUUjQsCisJR1BJT19QVFIzLCBHUElPX1BUUjIsIEdQSU9fUFRSMSwgR1BJT19QVFIwLAorCisJLyogUFRTICovCisJR1BJT19QVFM0LCBHUElPX1BUUzMsIEdQSU9fUFRTMiwgR1BJT19QVFMxLCBHUElPX1BUUzAsCisKKwkvKiBQVFQgKi8KKwlHUElPX1BUVDQsIEdQSU9fUFRUMywgR1BJT19QVFQyLCBHUElPX1BUVDEsIEdQSU9fUFRUMCwKKworCS8qIFBUVSAqLworCUdQSU9fUFRVNCwgR1BJT19QVFUzLCBHUElPX1BUVTIsIEdQSU9fUFRVMSwgR1BJT19QVFUwLAorCisJLyogUFRWICovCisJR1BJT19QVFY0LCBHUElPX1BUVjMsIEdQSU9fUFRWMiwgR1BJT19QVFYxLCBHUElPX1BUVjAsCisKKwkvKiBCU0MgKi8KKwlHUElPX0ZOX0QzMSwgR1BJT19GTl9EMzAsIEdQSU9fRk5fRDI5LCBHUElPX0ZOX0QyOCwKKwlHUElPX0ZOX0QyNywgR1BJT19GTl9EMjYsIEdQSU9fRk5fRDI1LCBHUElPX0ZOX0QyNCwKKwlHUElPX0ZOX0QyMywgR1BJT19GTl9EMjIsIEdQSU9fRk5fRDIxLCBHUElPX0ZOX0QyMCwKKwlHUElPX0ZOX0QxOSwgR1BJT19GTl9EMTgsIEdQSU9fRk5fRDE3LCBHUElPX0ZOX0QxNiwKKwlHUElPX0ZOX0lPSVMxNiwgR1BJT19GTl9SQVMsIEdQSU9fRk5fQ0FTLCBHUElPX0ZOX0NLRSwKKwlHUElPX0ZOX0NTNUJfQ0UxQSwgR1BJT19GTl9DUzZCX0NFMUIsCisJR1BJT19GTl9BMjUsIEdQSU9fRk5fQTI0LCBHUElPX0ZOX0EyMywgR1BJT19GTl9BMjIsCisJR1BJT19GTl9BMjEsIEdQSU9fRk5fQTIwLCBHUElPX0ZOX0ExOSwgR1BJT19GTl9BMCwKKwlHUElPX0ZOX1JFRk9VVCwgR1BJT19GTl9JUlFPVVQsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0RfREFUQTE1LCBHUElPX0ZOX0xDRF9EQVRBMTQsCisJR1BJT19GTl9MQ0RfREFUQTEzLCBHUElPX0ZOX0xDRF9EQVRBMTIsCisJR1BJT19GTl9MQ0RfREFUQTExLCBHUElPX0ZOX0xDRF9EQVRBMTAsCisJR1BJT19GTl9MQ0RfREFUQTksIEdQSU9fRk5fTENEX0RBVEE4LAorCUdQSU9fRk5fTENEX0RBVEE3LCBHUElPX0ZOX0xDRF9EQVRBNiwKKwlHUElPX0ZOX0xDRF9EQVRBNSwgR1BJT19GTl9MQ0RfREFUQTQsCisJR1BJT19GTl9MQ0RfREFUQTMsIEdQSU9fRk5fTENEX0RBVEEyLAorCUdQSU9fRk5fTENEX0RBVEExLCBHUElPX0ZOX0xDRF9EQVRBMCwKKwlHUElPX0ZOX0xDRF9NX0RJU1AsCisJR1BJT19GTl9MQ0RfQ0wxLCBHUElPX0ZOX0xDRF9DTDIsCisJR1BJT19GTl9MQ0RfRE9OLCBHUElPX0ZOX0xDRF9GTE0sCisJR1BJT19GTl9MQ0RfVkVQV0MsIEdQSU9fRk5fTENEX1ZDUFdDLAorCisJLyogQUZFSUYgKi8KKwlHUElPX0ZOX0FGRV9SWElOLCBHUElPX0ZOX0FGRV9SREVULAorCUdQSU9fRk5fQUZFX0ZTLCBHUElPX0ZOX0FGRV9UWE9VVCwKKwlHUElPX0ZOX0FGRV9TQ0xLLCBHUElPX0ZOX0FGRV9STFlDTlQsCisJR1BJT19GTl9BRkVfSEMxLAorCisJLyogSUlDICovCisJR1BJT19GTl9JSUNfU0NMLCBHUElPX0ZOX0lJQ19TREEsCisKKwkvKiBEQUMgKi8KKwlHUElPX0ZOX0RBMSwgR1BJT19GTl9EQTAsCisKKwkvKiBBREMgKi8KKwlHUElPX0ZOX0FOMywgR1BJT19GTl9BTjIsIEdQSU9fRk5fQU4xLCBHUElPX0ZOX0FOMCwgR1BJT19GTl9BRFRSRywKKworCS8qIFVTQiAqLworCUdQSU9fRk5fVVNCMURfUkNWLCBHUElPX0ZOX1VTQjFEX1RYU0UwLAorCUdQSU9fRk5fVVNCMURfVFhEUExTLCBHUElPX0ZOX1VTQjFEX0RNTlMsCisJR1BJT19GTl9VU0IxRF9EUExTLCBHUElPX0ZOX1VTQjFEX1NQRUVELAorCUdQSU9fRk5fVVNCMURfVFhFTkwsIEdQSU9fRk5fVVNCMl9QV1JfRU4sCisJR1BJT19GTl9VU0IxX1BXUl9FTl9VU0JGX1VQTFVQLCBHUElPX0ZOX1VTQjFEX1NVU1BFTkQsCisKKwkvKiBJTlRDICovCisJR1BJT19GTl9JUlE1LCBHUElPX0ZOX0lSUTQsCisJR1BJT19GTl9JUlEzX0lSTDMsIEdQSU9fRk5fSVJRMl9JUkwyLAorCUdQSU9fRk5fSVJRMV9JUkwxLCBHUElPX0ZOX0lSUTBfSVJMMCwKKworCS8qIFBDQyAqLworCUdQSU9fRk5fUENDX1JFRywgR1BJT19GTl9QQ0NfRFJWLAorCUdQSU9fRk5fUENDX0JWRDIsIEdQSU9fRk5fUENDX0JWRDEsCisJR1BJT19GTl9QQ0NfQ0QyLCBHUElPX0ZOX1BDQ19DRDEsCisJR1BJT19GTl9QQ0NfUkVTRVQsIEdQSU9fRk5fUENDX1JEWSwKKwlHUElPX0ZOX1BDQ19WUzIsIEdQSU9fRk5fUENDX1ZTMSwKKworCS8qIEhVREkgKi8KKwlHUElPX0ZOX0FVREFUQTMsIEdQSU9fRk5fQVVEQVRBMiwgR1BJT19GTl9BVURBVEExLCBHUElPX0ZOX0FVREFUQTAsCisJR1BJT19GTl9BVURDSywgR1BJT19GTl9BVURTWU5DLCBHUElPX0ZOX0FTRUJSS0FLLCBHUElPX0ZOX1RSU1QsCisJR1BJT19GTl9UTVMsIEdQSU9fRk5fVERPLCBHUElPX0ZOX1RESSwgR1BJT19GTl9UQ0ssCisKKwkvKiBETUFDICovCisJR1BJT19GTl9EQUNLMSwgR1BJT19GTl9EUkVRMSwgR1BJT19GTl9EQUNLMCwgR1BJT19GTl9EUkVRMCwKKwlHUElPX0ZOX1RFTkQxLCBHUElPX0ZOX1RFTkQwLAorCisJLyogU0lPRjAgKi8KKwlHUElPX0ZOX1NJT0YwX1NZTkMsIEdQSU9fRk5fU0lPRjBfTUNMSywKKwlHUElPX0ZOX1NJT0YwX1RYRCwgR1BJT19GTl9TSU9GMF9SWEQsCisJR1BJT19GTl9TSU9GMF9TQ0ssCisKKwkvKiBTSU9GMSAqLworCUdQSU9fRk5fU0lPRjFfU1lOQywgR1BJT19GTl9TSU9GMV9NQ0xLLAorCUdQSU9fRk5fU0lPRjFfVFhELCBHUElPX0ZOX1NJT0YxX1JYRCwKKwlHUElPX0ZOX1NJT0YxX1NDSywKKworCS8qIFNDSUYwICovCisJR1BJT19GTl9TQ0lGMF9UWEQsIEdQSU9fRk5fU0NJRjBfUlhELAorCUdQSU9fRk5fU0NJRjBfUlRTLCBHUElPX0ZOX1NDSUYwX0NUUywgR1BJT19GTl9TQ0lGMF9TQ0ssCisKKwkvKiBTQ0lGMSAqLworCUdQSU9fRk5fU0NJRjFfVFhELCBHUElPX0ZOX1NDSUYxX1JYRCwKKwlHUElPX0ZOX1NDSUYxX1JUUywgR1BJT19GTl9TQ0lGMV9DVFMsIEdQSU9fRk5fU0NJRjFfU0NLLAorCisJLyogVFBVICovCisJR1BJT19GTl9UUFVfVE8xLCBHUElPX0ZOX1RQVV9UTzAsCisJR1BJT19GTl9UUFVfVEkzQiwgR1BJT19GTl9UUFVfVEkzQSwKKwlHUElPX0ZOX1RQVV9USTJCLCBHUElPX0ZOX1RQVV9USTJBLAorCUdQSU9fRk5fVFBVX1RPMywgR1BJT19GTl9UUFVfVE8yLAorCisJLyogU0lNICovCisJR1BJT19GTl9TSU1fRCwgR1BJT19GTl9TSU1fQ0xLLCBHUElPX0ZOX1NJTV9SU1QsCisKKwkvKiBNTUMgKi8KKwlHUElPX0ZOX01NQ19EQVQsIEdQSU9fRk5fTU1DX0NNRCwKKwlHUElPX0ZOX01NQ19DTEssIEdQSU9fRk5fTU1DX1ZERE9OLAorCUdQSU9fRk5fTU1DX09ETU9ELAorCisJLyogU1lTQyAqLworCUdQSU9fRk5fU1RBVFVTMCwgR1BJT19GTl9TVEFUVVMxLAorfTsKKworI2VuZGlmIC8qIF9fQVNNX1NINzcyMF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjIuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjMwOTZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMi5oCkBAIC0wLDAgKzEsMjEwIEBACisjaWZuZGVmIF9fQVNNX1NINzcyMl9IX18KKyNkZWZpbmUgX19BU01fU0g3NzIyX0hfXworCitlbnVtIHsKKwkvKiBQVEEgKi8KKwlHUElPX1BUQTcsIEdQSU9fUFRBNiwgR1BJT19QVEE1LCBHUElPX1BUQTQsCisJR1BJT19QVEEzLCBHUElPX1BUQTIsIEdQSU9fUFRBMSwgR1BJT19QVEEwLAorCisJLyogUFRCICovCisJR1BJT19QVEI3LCBHUElPX1BUQjYsIEdQSU9fUFRCNSwgR1BJT19QVEI0LAorCUdQSU9fUFRCMywgR1BJT19QVEIyLCBHUElPX1BUQjEsIEdQSU9fUFRCMCwKKworCS8qIFBUQyAqLworCUdQSU9fUFRDNywgR1BJT19QVEM1LCBHUElPX1BUQzQsIEdQSU9fUFRDMywKKwlHUElPX1BUQzIsIEdQSU9fUFRDMCwKKworCS8qIFBURCAqLworCUdQSU9fUFRENywgR1BJT19QVEQ2LCBHUElPX1BURDUsIEdQSU9fUFRENCwKKwlHUElPX1BURDMsIEdQSU9fUFREMiwgR1BJT19QVEQxLCBHUElPX1BURDAsCisKKwkvKiBQVEUgKi8KKwlHUElPX1BURTcsIEdQSU9fUFRFNiwgR1BJT19QVEU1LCBHUElPX1BURTQsCisJR1BJT19QVEUxLCBHUElPX1BURTAsCisKKwkvKiBQVEYgKi8KKwlHUElPX1BURjYsIEdQSU9fUFRGNSwgR1BJT19QVEY0LCBHUElPX1BURjMsCisJR1BJT19QVEYyLCBHUElPX1BURjEsIEdQSU9fUFRGMCwKKworCS8qIFBURyAqLworCUdQSU9fUFRHNCwgR1BJT19QVEczLCBHUElPX1BURzIsIEdQSU9fUFRHMSwgR1BJT19QVEcwLAorCisJLyogUFRIICovCisJR1BJT19QVEg3LCBHUElPX1BUSDYsIEdQSU9fUFRINSwgR1BJT19QVEg0LAorCUdQSU9fUFRIMywgR1BJT19QVEgyLCBHUElPX1BUSDEsIEdQSU9fUFRIMCwKKworCS8qIFBUSiAqLworCUdQSU9fUFRKNywgR1BJT19QVEo2LCBHUElPX1BUSjUsIEdQSU9fUFRKMSwgR1BJT19QVEowLAorCisJLyogUFRLICovCisJR1BJT19QVEs2LCBHUElPX1BUSzUsIEdQSU9fUFRLNCwgR1BJT19QVEszLAorCUdQSU9fUFRLMiwgR1BJT19QVEsxLCBHUElPX1BUSzAsCisKKwkvKiBQVEwgKi8KKwlHUElPX1BUTDcsIEdQSU9fUFRMNiwgR1BJT19QVEw1LCBHUElPX1BUTDQsCisJR1BJT19QVEwzLCBHUElPX1BUTDIsIEdQSU9fUFRMMSwgR1BJT19QVEwwLAorCisJLyogUFRNICovCisJR1BJT19QVE03LCBHUElPX1BUTTYsIEdQSU9fUFRNNSwgR1BJT19QVE00LAorCUdQSU9fUFRNMywgR1BJT19QVE0yLCBHUElPX1BUTTEsIEdQSU9fUFRNMCwKKworCS8qIFBUTiAqLworCUdQSU9fUFRONywgR1BJT19QVE42LCBHUElPX1BUTjUsIEdQSU9fUFRONCwKKwlHUElPX1BUTjMsIEdQSU9fUFROMiwgR1BJT19QVE4xLCBHUElPX1BUTjAsCisKKwkvKiBQVFEgKi8KKwlHUElPX1BUUTcsIEdQSU9fUFRRNiwgR1BJT19QVFE1LCBHUElPX1BUUTQsCisJR1BJT19QVFEzLCBHUElPX1BUUTIsIEdQSU9fUFRRMSwgR1BJT19QVFEwLAorCisJLyogUFRSICovCisJR1BJT19QVFI0LCBHUElPX1BUUjMsIEdQSU9fUFRSMiwgR1BJT19QVFIxLCBHUElPX1BUUjAsCisKKwkvKiBQVFMgKi8KKwlHUElPX1BUUzQsIEdQSU9fUFRTMywgR1BJT19QVFMyLCBHUElPX1BUUzEsIEdQSU9fUFRTMCwKKworCS8qIFBUVCAqLworCUdQSU9fUFRUNCwgR1BJT19QVFQzLCBHUElPX1BUVDIsIEdQSU9fUFRUMSwgR1BJT19QVFQwLAorCisJLyogUFRVICovCisJR1BJT19QVFU0LCBHUElPX1BUVTMsIEdQSU9fUFRVMiwgR1BJT19QVFUxLCBHUElPX1BUVTAsCisKKwkvKiBQVFYgKi8KKwlHUElPX1BUVjQsIEdQSU9fUFRWMywgR1BJT19QVFYyLCBHUElPX1BUVjEsIEdQSU9fUFRWMCwKKworCS8qIFBUVyAqLworCUdQSU9fUFRXNiwgR1BJT19QVFc1LCBHUElPX1BUVzQsIEdQSU9fUFRXMywKKwlHUElPX1BUVzIsIEdQSU9fUFRXMSwgR1BJT19QVFcwLAorCisJLyogUFRYICovCisJR1BJT19QVFg2LCBHUElPX1BUWDUsIEdQSU9fUFRYNCwgR1BJT19QVFgzLAorCUdQSU9fUFRYMiwgR1BJT19QVFgxLCBHUElPX1BUWDAsCisKKwkvKiBQVFkgKi8KKwlHUElPX1BUWTUsIEdQSU9fUFRZNCwgR1BJT19QVFkzLCBHUElPX1BUWTIsCisJR1BJT19QVFkxLCBHUElPX1BUWTAsCisKKwkvKiBQVFogKi8KKwlHUElPX1BUWjUsIEdQSU9fUFRaNCwgR1BJT19QVFozLCBHUElPX1BUWjIsIEdQSU9fUFRaMSwKKworCS8qIFNDSUYwICovCisJR1BJT19GTl9TQ0lGMF9UWEQsIEdQSU9fRk5fU0NJRjBfUlhELAorCUdQSU9fRk5fU0NJRjBfUlRTLCBHUElPX0ZOX1NDSUYwX0NUUywgR1BJT19GTl9TQ0lGMF9TQ0ssCisKKwkvKiBTQ0lGMSAqLworCUdQSU9fRk5fU0NJRjFfVFhELCBHUElPX0ZOX1NDSUYxX1JYRCwKKwlHUElPX0ZOX1NDSUYxX1JUUywgR1BJT19GTl9TQ0lGMV9DVFMsIEdQSU9fRk5fU0NJRjFfU0NLLAorCisJLyogU0NJRjIgKi8KKwlHUElPX0ZOX1NDSUYyX1RYRCwgR1BJT19GTl9TQ0lGMl9SWEQsCisJR1BJT19GTl9TQ0lGMl9SVFMsIEdQSU9fRk5fU0NJRjJfQ1RTLCBHUElPX0ZOX1NDSUYyX1NDSywKKworCS8qIFNJTyAqLworCUdQSU9fRk5fU0lPVFhELCBHUElPX0ZOX1NJT1JYRCwKKwlHUElPX0ZOX1NJT0QsIEdQSU9fRk5fU0lPU1RSQjAsIEdQSU9fRk5fU0lPU1RSQjEsCisJR1BJT19GTl9TSU9TQ0ssIEdQSU9fRk5fU0lPTUNLLAorCisJLyogQ0VVICovCisJR1BJT19GTl9WSU9fRDE1LCBHUElPX0ZOX1ZJT19EMTQsIEdQSU9fRk5fVklPX0QxMywgR1BJT19GTl9WSU9fRDEyLAorCUdQSU9fRk5fVklPX0QxMSwgR1BJT19GTl9WSU9fRDEwLCBHUElPX0ZOX1ZJT19EOSwgR1BJT19GTl9WSU9fRDgsCisJR1BJT19GTl9WSU9fRDcsIEdQSU9fRk5fVklPX0Q2LCBHUElPX0ZOX1ZJT19ENSwgR1BJT19GTl9WSU9fRDQsCisJR1BJT19GTl9WSU9fRDMsIEdQSU9fRk5fVklPX0QyLCBHUElPX0ZOX1ZJT19EMSwgR1BJT19GTl9WSU9fRDAsCisJR1BJT19GTl9WSU9fRkxELCBHUElPX0ZOX1ZJT19DS08sIEdQSU9fRk5fVklPX1NURVgsIEdQSU9fRk5fVklPX1NURU0sCisJR1BJT19GTl9WSU9fVkQsIEdQSU9fRk5fVklPX0hELCBHUElPX0ZOX1ZJT19DTEssCisJR1BJT19GTl9WSU9fVkQyLCBHUElPX0ZOX1ZJT19IRDIsIEdQSU9fRk5fVklPX0NMSzIsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0REMjMsIEdQSU9fRk5fTENERDIyLCBHUElPX0ZOX0xDREQyMSwgR1BJT19GTl9MQ0REMjAsCisJR1BJT19GTl9MQ0REMTksIEdQSU9fRk5fTENERDE4LCBHUElPX0ZOX0xDREQxNywgR1BJT19GTl9MQ0REMTYsCisJR1BJT19GTl9MQ0REMTUsIEdQSU9fRk5fTENERDE0LCBHUElPX0ZOX0xDREQxMywgR1BJT19GTl9MQ0REMTIsCisJR1BJT19GTl9MQ0REMTEsIEdQSU9fRk5fTENERDEwLCBHUElPX0ZOX0xDREQ5LCBHUElPX0ZOX0xDREQ4LAorCUdQSU9fRk5fTENERDcsIEdQSU9fRk5fTENERDYsIEdQSU9fRk5fTENERDUsIEdQSU9fRk5fTENERDQsCisJR1BJT19GTl9MQ0REMywgR1BJT19GTl9MQ0REMiwgR1BJT19GTl9MQ0REMSwgR1BJT19GTl9MQ0REMCwKKwlHUElPX0ZOX0xDRExDTEssCisJLyogTWFpbiBMQ0QgKi8KKwlHUElPX0ZOX0xDRERPTiwgR1BJT19GTl9MQ0RWQ1BXQywgR1BJT19GTl9MQ0RWRVBXQywgR1BJT19GTl9MQ0RWU1lOLAorCS8qIE1haW4gTENEIC0gUkdCIE1vZGUgKi8KKwlHUElPX0ZOX0xDRERDSywgR1BJT19GTl9MQ0RIU1lOLCBHUElPX0ZOX0xDRERJU1AsCisJLyogTWFpbiBMQ0QgLSBTWVMgTW9kZSAqLworCUdQSU9fRk5fTENEUlMsIEdQSU9fRk5fTENEQ1MsIEdQSU9fRk5fTENEV1IsIEdQSU9fRk5fTENEUkQsCisJLyogU3ViIExDRCAtIFNZUyBNb2RlICovCisJR1BJT19GTl9MQ0RET04yLCBHUElPX0ZOX0xDRFZDUFdDMiwgR1BJT19GTl9MQ0RWRVBXQzIsCisJR1BJT19GTl9MQ0RWU1lOMiwgR1BJT19GTl9MQ0RDUzIsCisKKwkvKiBCU0MgKi8KKwlHUElPX0ZOX0lPSVMxNiwgR1BJT19GTl9BMjUsIEdQSU9fRk5fQTI0LCBHUElPX0ZOX0EyMywgR1BJT19GTl9BMjIsCisJR1BJT19GTl9CUywgR1BJT19GTl9DUzZCX0NFMUIsIEdQSU9fRk5fV0FJVCwgR1BJT19GTl9DUzZBX0NFMkIsCisKKwkvKiBTQlNDICovCisJR1BJT19GTl9IUEQ2MywgR1BJT19GTl9IUEQ2MiwgR1BJT19GTl9IUEQ2MSwgR1BJT19GTl9IUEQ2MCwKKwlHUElPX0ZOX0hQRDU5LCBHUElPX0ZOX0hQRDU4LCBHUElPX0ZOX0hQRDU3LCBHUElPX0ZOX0hQRDU2LAorCUdQSU9fRk5fSFBENTUsIEdQSU9fRk5fSFBENTQsIEdQSU9fRk5fSFBENTMsIEdQSU9fRk5fSFBENTIsCisJR1BJT19GTl9IUEQ1MSwgR1BJT19GTl9IUEQ1MCwgR1BJT19GTl9IUEQ0OSwgR1BJT19GTl9IUEQ0OCwKKwlHUElPX0ZOX0hQRFFNNywgR1BJT19GTl9IUERRTTYsIEdQSU9fRk5fSFBEUU01LCBHUElPX0ZOX0hQRFFNNCwKKworCS8qIElSUSAqLworCUdQSU9fRk5fSVJRMCwgR1BJT19GTl9JUlExLCBHUElPX0ZOX0lSUTIsIEdQSU9fRk5fSVJRMywKKwlHUElPX0ZOX0lSUTQsIEdQSU9fRk5fSVJRNSwgR1BJT19GTl9JUlE2LCBHUElPX0ZOX0lSUTcsCisKKwkvKiBTREhJICovCisJR1BJT19GTl9TREhJQ0QsIEdQSU9fRk5fU0RISVdQLCBHUElPX0ZOX1NESElEMywgR1BJT19GTl9TREhJRDIsCisJR1BJT19GTl9TREhJRDEsIEdQSU9fRk5fU0RISUQwLCBHUElPX0ZOX1NESElDTUQsIEdQSU9fRk5fU0RISUNMSywKKworCS8qIFNJVSAtIFBvcnQgQSAqLworCUdQSU9fRk5fU0lVQU9MUiwgR1BJT19GTl9TSVVBT0JULCBHUElPX0ZOX1NJVUFJU0xELCBHUElPX0ZOX1NJVUFJTFIsCisJR1BJT19GTl9TSVVBSUJULCBHUElPX0ZOX1NJVUFPU0xELCBHUElPX0ZOX1NJVU1DS0EsIEdQSU9fRk5fU0lVRkNLQSwKKworCS8qIFNJVSAtIFBvcnQgQiAqLworCUdQSU9fRk5fU0lVQk9MUiwgR1BJT19GTl9TSVVCT0JULCBHUElPX0ZOX1NJVUJJU0xELCBHUElPX0ZOX1NJVUJJTFIsCisJR1BJT19GTl9TSVVCSUJULCBHUElPX0ZOX1NJVUJPU0xELCBHUElPX0ZOX1NJVU1DS0IsIEdQSU9fRk5fU0lVRkNLQiwKKworCS8qIEFVRCAqLworCUdQSU9fRk5fQVVEU1lOQywgR1BJT19GTl9BVURBVEEzLCBHUElPX0ZOX0FVREFUQTIsIEdQSU9fRk5fQVVEQVRBMSwKKwlHUElPX0ZOX0FVREFUQTAsCisKKwkvKiBETUFDICovCisJR1BJT19GTl9EQUNLLCBHUElPX0ZOX0RSRVEwLAorCisJLyogVk9VICovCisJR1BJT19GTl9EVl9DTEtJLCBHUElPX0ZOX0RWX0NMSywgR1BJT19GTl9EVl9IU1lOQywgR1BJT19GTl9EVl9WU1lOQywKKwlHUElPX0ZOX0RWX0QxNSwgR1BJT19GTl9EVl9EMTQsIEdQSU9fRk5fRFZfRDEzLCBHUElPX0ZOX0RWX0QxMiwKKwlHUElPX0ZOX0RWX0QxMSwgR1BJT19GTl9EVl9EMTAsIEdQSU9fRk5fRFZfRDksIEdQSU9fRk5fRFZfRDgsCisJR1BJT19GTl9EVl9ENywgR1BJT19GTl9EVl9ENiwgR1BJT19GTl9EVl9ENSwgR1BJT19GTl9EVl9ENCwKKwlHUElPX0ZOX0RWX0QzLCBHUElPX0ZOX0RWX0QyLCBHUElPX0ZOX0RWX0QxLCBHUElPX0ZOX0RWX0QwLAorCisJLyogQ1BHICovCisJR1BJT19GTl9TVEFUVVMwLCBHUElPX0ZOX1BEU1RBVFVTLAorCisJLyogU0lPRjAgKi8KKwlHUElPX0ZOX1NJT0YwX01DSywgR1BJT19GTl9TSU9GMF9TQ0ssCisJR1BJT19GTl9TSU9GMF9TWU5DLCBHUElPX0ZOX1NJT0YwX1NTMSwgR1BJT19GTl9TSU9GMF9TUzIsCisJR1BJT19GTl9TSU9GMF9UWEQsIEdQSU9fRk5fU0lPRjBfUlhELAorCisJLyogU0lPRjEgKi8KKwlHUElPX0ZOX1NJT0YxX01DSywgR1BJT19GTl9TSU9GMV9TQ0ssCisJR1BJT19GTl9TSU9GMV9TWU5DLCBHUElPX0ZOX1NJT0YxX1NTMSwgR1BJT19GTl9TSU9GMV9TUzIsCisJR1BJT19GTl9TSU9GMV9UWEQsIEdQSU9fRk5fU0lPRjFfUlhELAorCisJLyogU0lNICovCisJR1BJT19GTl9TSU1fRCwgR1BJT19GTl9TSU1fQ0xLLCBHUElPX0ZOX1NJTV9SU1QsCisKKwkvKiBUU0lGICovCisJR1BJT19GTl9UU19TREFULCBHUElPX0ZOX1RTX1NDSywgR1BJT19GTl9UU19TREVOLCBHUElPX0ZOX1RTX1NQU1lOQywKKworCS8qIElSREEgKi8KKwlHUElPX0ZOX0lSREFfSU4sIEdQSU9fRk5fSVJEQV9PVVQsCisKKwkvKiBUUFUgKi8KKwlHUElPX0ZOX1RQVVRPLAorCisJLyogRkxDVEwgKi8KKwlHUElPX0ZOX0ZDRSwgR1BJT19GTl9OQUY3LCBHUElPX0ZOX05BRjYsIEdQSU9fRk5fTkFGNSwgR1BJT19GTl9OQUY0LAorCUdQSU9fRk5fTkFGMywgR1BJT19GTl9OQUYyLCBHUElPX0ZOX05BRjEsIEdQSU9fRk5fTkFGMCwgR1BJT19GTl9GQ0RFLAorCUdQSU9fRk5fRk9FLCBHUElPX0ZOX0ZTQywgR1BJT19GTl9GV0UsIEdQSU9fRk5fRlJCLAorCisJLyogS0VZU0MgKi8KKwlHUElPX0ZOX0tFWUlOMCwgR1BJT19GTl9LRVlJTjEsIEdQSU9fRk5fS0VZSU4yLCBHUElPX0ZOX0tFWUlOMywKKwlHUElPX0ZOX0tFWUlONCwgR1BJT19GTl9LRVlPVVQwLCBHUElPX0ZOX0tFWU9VVDEsIEdQSU9fRk5fS0VZT1VUMiwKKwlHUElPX0ZOX0tFWU9VVDMsIEdQSU9fRk5fS0VZT1VUNF9JTjYsIEdQSU9fRk5fS0VZT1VUNV9JTjUsCit9OworCisjZW5kaWYgLyogX19BU01fU0g3NzIyX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMy5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMmY2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzIzLmgKQEAgLTAsMCArMSwyNTQgQEAKKyNpZm5kZWYgX19BU01fU0g3NzIzX0hfXworI2RlZmluZSBfX0FTTV9TSDc3MjNfSF9fCisKK2VudW0geworCS8qIFBUQSAqLworCUdQSU9fUFRBNywgR1BJT19QVEE2LCBHUElPX1BUQTUsIEdQSU9fUFRBNCwKKwlHUElPX1BUQTMsIEdQSU9fUFRBMiwgR1BJT19QVEExLCBHUElPX1BUQTAsCisKKwkvKiBQVEIgKi8KKwlHUElPX1BUQjcsIEdQSU9fUFRCNiwgR1BJT19QVEI1LCBHUElPX1BUQjQsCisJR1BJT19QVEIzLCBHUElPX1BUQjIsIEdQSU9fUFRCMSwgR1BJT19QVEIwLAorCisJLyogUFRDICovCisJR1BJT19QVEM3LCBHUElPX1BUQzYsIEdQSU9fUFRDNSwgR1BJT19QVEM0LAorCUdQSU9fUFRDMywgR1BJT19QVEMyLCBHUElPX1BUQzEsIEdQSU9fUFRDMCwKKworCS8qIFBURCAqLworCUdQSU9fUFRENywgR1BJT19QVEQ2LCBHUElPX1BURDUsIEdQSU9fUFRENCwKKwlHUElPX1BURDMsIEdQSU9fUFREMiwgR1BJT19QVEQxLCBHUElPX1BURDAsCisKKwkvKiBQVEUgKi8KKwlHUElPX1BURTUsIEdQSU9fUFRFNCwgR1BJT19QVEUzLCBHUElPX1BURTIsCisJR1BJT19QVEUxLCBHUElPX1BURTAsCisKKwkvKiBQVEYgKi8KKwlHUElPX1BURjcsIEdQSU9fUFRGNiwgR1BJT19QVEY1LCBHUElPX1BURjQsCisJR1BJT19QVEYzLCBHUElPX1BURjIsIEdQSU9fUFRGMSwgR1BJT19QVEYwLAorCisJLyogUFRHICovCisJR1BJT19QVEc1LCBHUElPX1BURzQsIEdQSU9fUFRHMywgR1BJT19QVEcyLAorCUdQSU9fUFRHMSwgR1BJT19QVEcwLAorCisJLyogUFRIICovCisJR1BJT19QVEg3LCBHUElPX1BUSDYsIEdQSU9fUFRINSwgR1BJT19QVEg0LAorCUdQSU9fUFRIMywgR1BJT19QVEgyLCBHUElPX1BUSDEsIEdQSU9fUFRIMCwKKworCS8qIFBUSiAqLworCUdQSU9fUFRKNywgR1BJT19QVEo1LCBHUElPX1BUSjMsIEdQSU9fUFRKMiwKKwlHUElPX1BUSjEsIEdQSU9fUFRKMCwKKworCS8qIFBUSyAqLworCUdQSU9fUFRLNywgR1BJT19QVEs2LCBHUElPX1BUSzUsIEdQSU9fUFRLNCwKKwlHUElPX1BUSzMsIEdQSU9fUFRLMiwgR1BJT19QVEsxLCBHUElPX1BUSzAsCisKKwkvKiBQVEwgKi8KKwlHUElPX1BUTDcsIEdQSU9fUFRMNiwgR1BJT19QVEw1LCBHUElPX1BUTDQsCisJR1BJT19QVEwzLCBHUElPX1BUTDIsIEdQSU9fUFRMMSwgR1BJT19QVEwwLAorCisJLyogUFRNICovCisJR1BJT19QVE03LCBHUElPX1BUTTYsIEdQSU9fUFRNNSwgR1BJT19QVE00LAorCUdQSU9fUFRNMywgR1BJT19QVE0yLCBHUElPX1BUTTEsIEdQSU9fUFRNMCwKKworCS8qIFBUTiAqLworCUdQSU9fUFRONywgR1BJT19QVE42LCBHUElPX1BUTjUsIEdQSU9fUFRONCwKKwlHUElPX1BUTjMsIEdQSU9fUFROMiwgR1BJT19QVE4xLCBHUElPX1BUTjAsCisKKwkvKiBQVFEgKi8KKwlHUElPX1BUUTMsIEdQSU9fUFRRMiwgR1BJT19QVFExLCBHUElPX1BUUTAsCisKKwkvKiBQVFIgKi8KKwlHUElPX1BUUjcsIEdQSU9fUFRSNiwgR1BJT19QVFI1LCBHUElPX1BUUjQsCisJR1BJT19QVFIzLCBHUElPX1BUUjIsIEdQSU9fUFRSMSwgR1BJT19QVFIwLAorCisJLyogUFRTICovCisJR1BJT19QVFM3LCBHUElPX1BUUzYsIEdQSU9fUFRTNSwgR1BJT19QVFM0LAorCUdQSU9fUFRTMywgR1BJT19QVFMyLCBHUElPX1BUUzEsIEdQSU9fUFRTMCwKKworCS8qIFBUVCAqLworCUdQSU9fUFRUNSwgR1BJT19QVFQ0LCBHUElPX1BUVDMsIEdQSU9fUFRUMiwKKwlHUElPX1BUVDEsIEdQSU9fUFRUMCwKKworCS8qIFBUVSAqLworCUdQSU9fUFRVNSwgR1BJT19QVFU0LCBHUElPX1BUVTMsIEdQSU9fUFRVMiwKKwlHUElPX1BUVTEsIEdQSU9fUFRVMCwKKworCS8qIFBUViAqLworCUdQSU9fUFRWNywgR1BJT19QVFY2LCBHUElPX1BUVjUsIEdQSU9fUFRWNCwKKwlHUElPX1BUVjMsIEdQSU9fUFRWMiwgR1BJT19QVFYxLCBHUElPX1BUVjAsCisKKwkvKiBQVFcgKi8KKwlHUElPX1BUVzcsIEdQSU9fUFRXNiwgR1BJT19QVFc1LCBHUElPX1BUVzQsCisJR1BJT19QVFczLCBHUElPX1BUVzIsIEdQSU9fUFRXMSwgR1BJT19QVFcwLAorCisJLyogUFRYICovCisJR1BJT19QVFg3LCBHUElPX1BUWDYsIEdQSU9fUFRYNSwgR1BJT19QVFg0LAorCUdQSU9fUFRYMywgR1BJT19QVFgyLCBHUElPX1BUWDEsIEdQSU9fUFRYMCwKKworCS8qIFBUWSAqLworCUdQSU9fUFRZNywgR1BJT19QVFk2LCBHUElPX1BUWTUsIEdQSU9fUFRZNCwKKwlHUElPX1BUWTMsIEdQSU9fUFRZMiwgR1BJT19QVFkxLCBHUElPX1BUWTAsCisKKwkvKiBQVFogKi8KKwlHUElPX1BUWjcsIEdQSU9fUFRaNiwgR1BJT19QVFo1LCBHUElPX1BUWjQsCisJR1BJT19QVFozLCBHUElPX1BUWjIsIEdQSU9fUFRaMSwgR1BJT19QVFowLAorCisJLyogU0NJRjAgKFNDSUY6IDMgcGluIFBUVC9QVFUpICovCisJR1BJT19GTl9TQ0lGMF9QVFRfVFhELCBHUElPX0ZOX1NDSUYwX1BUVF9SWEQsIEdQSU9fRk5fU0NJRjBfUFRUX1NDSywKKwlHUElPX0ZOX1NDSUYwX1BUVV9UWEQsIEdQSU9fRk5fU0NJRjBfUFRVX1JYRCwgR1BJT19GTl9TQ0lGMF9QVFVfU0NLLAorCisJLyogU0NJRjEgKFNDSUY6IDMgcGluIFBUUy9QVFYpICovCisJR1BJT19GTl9TQ0lGMV9QVFNfVFhELCBHUElPX0ZOX1NDSUYxX1BUU19SWEQsIEdQSU9fRk5fU0NJRjFfUFRTX1NDSywKKwlHUElPX0ZOX1NDSUYxX1BUVl9UWEQsIEdQSU9fRk5fU0NJRjFfUFRWX1JYRCwgR1BJT19GTl9TQ0lGMV9QVFZfU0NLLAorCisJLyogU0NJRjIgKFNDSUY6IDMgcGluIFBUVC9QVFUpICovCisJR1BJT19GTl9TQ0lGMl9QVFRfVFhELCBHUElPX0ZOX1NDSUYyX1BUVF9SWEQsIEdQSU9fRk5fU0NJRjJfUFRUX1NDSywKKwlHUElPX0ZOX1NDSUYyX1BUVV9UWEQsIEdQSU9fRk5fU0NJRjJfUFRVX1JYRCwgR1BJT19GTl9TQ0lGMl9QVFVfU0NLLAorCisJLyogU0NJRjMgKFNDSUZBOiA1IHBpbiBQVFMvUFRWKSAqLworCUdQSU9fRk5fU0NJRjNfUFRTX1RYRCwgR1BJT19GTl9TQ0lGM19QVFNfUlhELCBHUElPX0ZOX1NDSUYzX1BUU19TQ0ssCisJR1BJT19GTl9TQ0lGM19QVFNfUlRTLCBHUElPX0ZOX1NDSUYzX1BUU19DVFMsCisJR1BJT19GTl9TQ0lGM19QVFZfVFhELCBHUElPX0ZOX1NDSUYzX1BUVl9SWEQsIEdQSU9fRk5fU0NJRjNfUFRWX1NDSywKKwlHUElPX0ZOX1NDSUYzX1BUVl9SVFMsIEdQSU9fRk5fU0NJRjNfUFRWX0NUUywKKworCS8qIFNDSUY0IChTQ0lGQTogMyBwaW4gUFRFL1BUTikgKi8KKwlHUElPX0ZOX1NDSUY0X1BURV9UWEQsIEdQSU9fRk5fU0NJRjRfUFRFX1JYRCwgR1BJT19GTl9TQ0lGNF9QVEVfU0NLLAorCUdQSU9fRk5fU0NJRjRfUFROX1RYRCwgR1BJT19GTl9TQ0lGNF9QVE5fUlhELCBHUElPX0ZOX1NDSUY0X1BUTl9TQ0ssCisKKwkvKiBTQ0lGNSAoU0NJRkE6IDMgcGluIFBURS9QVE4pICovCisJR1BJT19GTl9TQ0lGNV9QVEVfVFhELCBHUElPX0ZOX1NDSUY1X1BURV9SWEQsIEdQSU9fRk5fU0NJRjVfUFRFX1NDSywKKwlHUElPX0ZOX1NDSUY1X1BUTl9UWEQsIEdQSU9fRk5fU0NJRjVfUFROX1JYRCwgR1BJT19GTl9TQ0lGNV9QVE5fU0NLLAorCisJLyogQ0VVICovCisJR1BJT19GTl9WSU9fRDE1LCBHUElPX0ZOX1ZJT19EMTQsIEdQSU9fRk5fVklPX0QxMywgR1BJT19GTl9WSU9fRDEyLAorCUdQSU9fRk5fVklPX0QxMSwgR1BJT19GTl9WSU9fRDEwLCBHUElPX0ZOX1ZJT19EOSwgR1BJT19GTl9WSU9fRDgsCisJR1BJT19GTl9WSU9fRDcsIEdQSU9fRk5fVklPX0Q2LCBHUElPX0ZOX1ZJT19ENSwgR1BJT19GTl9WSU9fRDQsCisJR1BJT19GTl9WSU9fRDMsIEdQSU9fRk5fVklPX0QyLCBHUElPX0ZOX1ZJT19EMSwgR1BJT19GTl9WSU9fRDAsCisJR1BJT19GTl9WSU9fRkxELCBHUElPX0ZOX1ZJT19DS08sCisJR1BJT19GTl9WSU9fVkQxLCBHUElPX0ZOX1ZJT19IRDEsIEdQSU9fRk5fVklPX0NMSzEsCisJR1BJT19GTl9WSU9fVkQyLCBHUElPX0ZOX1ZJT19IRDIsIEdQSU9fRk5fVklPX0NMSzIsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0REMjMsIEdQSU9fRk5fTENERDIyLCBHUElPX0ZOX0xDREQyMSwgR1BJT19GTl9MQ0REMjAsCisJR1BJT19GTl9MQ0REMTksIEdQSU9fRk5fTENERDE4LCBHUElPX0ZOX0xDREQxNywgR1BJT19GTl9MQ0REMTYsCisJR1BJT19GTl9MQ0REMTUsIEdQSU9fRk5fTENERDE0LCBHUElPX0ZOX0xDREQxMywgR1BJT19GTl9MQ0REMTIsCisJR1BJT19GTl9MQ0REMTEsIEdQSU9fRk5fTENERDEwLCBHUElPX0ZOX0xDREQ5LCBHUElPX0ZOX0xDREQ4LAorCUdQSU9fRk5fTENERDcsIEdQSU9fRk5fTENERDYsIEdQSU9fRk5fTENERDUsIEdQSU9fRk5fTENERDQsCisJR1BJT19GTl9MQ0REMywgR1BJT19GTl9MQ0REMiwgR1BJT19GTl9MQ0REMSwgR1BJT19GTl9MQ0REMCwKKwlHUElPX0ZOX0xDRExDTEtfUFRSLCBHUElPX0ZOX0xDRExDTEtfUFRXLAorCS8qIE1haW4gTENEICovCisJR1BJT19GTl9MQ0RET04sIEdQSU9fRk5fTENEVkNQV0MsIEdQSU9fRk5fTENEVkVQV0MsIEdQSU9fRk5fTENEVlNZTiwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJR1BJT19GTl9MQ0REQ0ssIEdQSU9fRk5fTENESFNZTiwgR1BJT19GTl9MQ0RESVNQLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlHUElPX0ZOX0xDRFJTLCBHUElPX0ZOX0xDRENTLCBHUElPX0ZOX0xDRFdSLCBHUElPX0ZOX0xDRFJELAorCisJLyogSVJRICovCisJR1BJT19GTl9JUlEwLCBHUElPX0ZOX0lSUTEsIEdQSU9fRk5fSVJRMiwgR1BJT19GTl9JUlEzLAorCUdQSU9fRk5fSVJRNCwgR1BJT19GTl9JUlE1LCBHUElPX0ZOX0lSUTYsIEdQSU9fRk5fSVJRNywKKworCS8qIEFVRCAqLworCUdQSU9fRk5fQVVEQVRBMywgR1BJT19GTl9BVURBVEEyLCBHUElPX0ZOX0FVREFUQTEsIEdQSU9fRk5fQVVEQVRBMCwKKwlHUElPX0ZOX0FVRENLLCBHUElPX0ZOX0FVRFNZTkMsCisKKwkvKiBTREhJMCAoUFREKSAqLworCUdQSU9fRk5fU0RISTBDRF9QVEQsIEdQSU9fRk5fU0RISTBXUF9QVEQsCisJR1BJT19GTl9TREhJMEQzX1BURCwgR1BJT19GTl9TREhJMEQyX1BURCwKKwlHUElPX0ZOX1NESEkwRDFfUFRELCBHUElPX0ZOX1NESEkwRDBfUFRELAorCUdQSU9fRk5fU0RISTBDTURfUFRELCBHUElPX0ZOX1NESEkwQ0xLX1BURCwKKworCS8qIFNESEkwIChQVFMpICovCisJR1BJT19GTl9TREhJMENEX1BUUywgR1BJT19GTl9TREhJMFdQX1BUUywKKwlHUElPX0ZOX1NESEkwRDNfUFRTLCBHUElPX0ZOX1NESEkwRDJfUFRTLAorCUdQSU9fRk5fU0RISTBEMV9QVFMsIEdQSU9fRk5fU0RISTBEMF9QVFMsCisJR1BJT19GTl9TREhJMENNRF9QVFMsIEdQSU9fRk5fU0RISTBDTEtfUFRTLAorCisJLyogU0RISTEgKi8KKwlHUElPX0ZOX1NESEkxQ0QsIEdQSU9fRk5fU0RISTFXUCwgR1BJT19GTl9TREhJMUQzLCBHUElPX0ZOX1NESEkxRDIsCisJR1BJT19GTl9TREhJMUQxLCBHUElPX0ZOX1NESEkxRDAsIEdQSU9fRk5fU0RISTFDTUQsIEdQSU9fRk5fU0RISTFDTEssCisKKwkvKiBTSVVBICovCisJR1BJT19GTl9TSVVBRkNLLCBHUElPX0ZOX1NJVUFJTFIsIEdQSU9fRk5fU0lVQUlCVCwgR1BJT19GTl9TSVVBSVNMRCwKKwlHUElPX0ZOX1NJVUFPTFIsIEdQSU9fRk5fU0lVQU9CVCwgR1BJT19GTl9TSVVBT1NMRCwgR1BJT19GTl9TSVVBTUNLLAorCUdQSU9fRk5fU0lVQUlTUEQsIEdQSU9fRk5fU0lVT1NQRCwKKworCS8qIFNJVUIgKi8KKwlHUElPX0ZOX1NJVUJGQ0ssIEdQSU9fRk5fU0lVQklMUiwgR1BJT19GTl9TSVVCSUJULCBHUElPX0ZOX1NJVUJJU0xELAorCUdQSU9fRk5fU0lVQk9MUiwgR1BJT19GTl9TSVVCT0JULCBHUElPX0ZOX1NJVUJPU0xELCBHUElPX0ZOX1NJVUJNQ0ssCisKKwkvKiBJUkRBICovCisJR1BJT19GTl9JUkRBX0lOLCBHUElPX0ZOX0lSREFfT1VULAorCisJLyogVk9VICovCisJR1BJT19GTl9EVl9DTEtJLCBHUElPX0ZOX0RWX0NMSywgR1BJT19GTl9EVl9IU1lOQywgR1BJT19GTl9EVl9WU1lOQywKKwlHUElPX0ZOX0RWX0QxNSwgR1BJT19GTl9EVl9EMTQsIEdQSU9fRk5fRFZfRDEzLCBHUElPX0ZOX0RWX0QxMiwKKwlHUElPX0ZOX0RWX0QxMSwgR1BJT19GTl9EVl9EMTAsIEdQSU9fRk5fRFZfRDksIEdQSU9fRk5fRFZfRDgsCisJR1BJT19GTl9EVl9ENywgR1BJT19GTl9EVl9ENiwgR1BJT19GTl9EVl9ENSwgR1BJT19GTl9EVl9ENCwKKwlHUElPX0ZOX0RWX0QzLCBHUElPX0ZOX0RWX0QyLCBHUElPX0ZOX0RWX0QxLCBHUElPX0ZOX0RWX0QwLAorCisJLyogS0VZU0MgKi8KKwlHUElPX0ZOX0tFWUlOMCwgR1BJT19GTl9LRVlJTjEsIEdQSU9fRk5fS0VZSU4yLCBHUElPX0ZOX0tFWUlOMywKKwlHUElPX0ZOX0tFWUlONCwgR1BJT19GTl9LRVlPVVQwLCBHUElPX0ZOX0tFWU9VVDEsIEdQSU9fRk5fS0VZT1VUMiwKKwlHUElPX0ZOX0tFWU9VVDMsIEdQSU9fRk5fS0VZT1VUNF9JTjYsIEdQSU9fRk5fS0VZT1VUNV9JTjUsCisKKwkvKiBNU0lPRjAgKFBURikgKi8KKwlHUElPX0ZOX01TSU9GMF9QVEZfVFhELCBHUElPX0ZOX01TSU9GMF9QVEZfUlhELCBHUElPX0ZOX01TSU9GMF9QVEZfTUNLLAorCUdQSU9fRk5fTVNJT0YwX1BURl9UU1lOQywgR1BJT19GTl9NU0lPRjBfUFRGX1RTQ0ssCisJR1BJT19GTl9NU0lPRjBfUFRGX1JTWU5DLCBHUElPX0ZOX01TSU9GMF9QVEZfUlNDSywKKwlHUElPX0ZOX01TSU9GMF9QVEZfU1MxLCBHUElPX0ZOX01TSU9GMF9QVEZfU1MyLAorCisJLyogTVNJT0YwIChQVFQrUFRYKSAqLworCUdQSU9fRk5fTVNJT0YwX1BUVF9UWEQsIEdQSU9fRk5fTVNJT0YwX1BUVF9SWEQsIEdQSU9fRk5fTVNJT0YwX1BUWF9NQ0ssCisJR1BJT19GTl9NU0lPRjBfUFRUX1RTWU5DLCBHUElPX0ZOX01TSU9GMF9QVFRfVFNDSywKKwlHUElPX0ZOX01TSU9GMF9QVFRfUlNZTkMsIEdQSU9fRk5fTVNJT0YwX1BUVF9SU0NLLAorCUdQSU9fRk5fTVNJT0YwX1BUVF9TUzEsIEdQSU9fRk5fTVNJT0YwX1BUVF9TUzIsCisKKwkvKiBNU0lPRjEgKi8KKwlHUElPX0ZOX01TSU9GMV9UWEQsIEdQSU9fRk5fTVNJT0YxX1JYRCwgR1BJT19GTl9NU0lPRjFfTUNLLAorCUdQSU9fRk5fTVNJT0YxX1RTWU5DLCBHUElPX0ZOX01TSU9GMV9UU0NLLAorCUdQSU9fRk5fTVNJT0YxX1JTWU5DLCBHUElPX0ZOX01TSU9GMV9SU0NLLAorCUdQSU9fRk5fTVNJT0YxX1NTMSwgR1BJT19GTl9NU0lPRjFfU1MyLAorCisJLyogVFNJRiAqLworCUdQSU9fRk5fVFMwX1NEQVQsIEdQSU9fRk5fVFMwX1NDSywgR1BJT19GTl9UUzBfU0RFTiwgR1BJT19GTl9UUzBfU1BTWU5DLAorCisJLyogRkxDVEwgKi8KKwlHUElPX0ZOX0ZDRSwgR1BJT19GTl9OQUY3LCBHUElPX0ZOX05BRjYsIEdQSU9fRk5fTkFGNSwgR1BJT19GTl9OQUY0LAorCUdQSU9fRk5fTkFGMywgR1BJT19GTl9OQUYyLCBHUElPX0ZOX05BRjEsIEdQSU9fRk5fTkFGMCwgR1BJT19GTl9GQ0RFLAorCUdQSU9fRk5fRk9FLCBHUElPX0ZOX0ZTQywgR1BJT19GTl9GV0UsIEdQSU9fRk5fRlJCLAorCisJLyogRE1BQyAqLworCUdQSU9fRk5fREFDSzEsIEdQSU9fRk5fRFJFUTEsIEdQSU9fRk5fREFDSzAsIEdQSU9fRk5fRFJFUTAsCisKKwkvKiBBREMgKi8KKwlHUElPX0ZOX0FOMywgR1BJT19GTl9BTjIsIEdQSU9fRk5fQU4xLCBHUElPX0ZOX0FOMCwgR1BJT19GTl9BRFRSRywKKworCS8qIENQRyAqLworCUdQSU9fRk5fU1RBVFVTMCwgR1BJT19GTl9QRFNUQVRVUywKKworCS8qIFRQVSAqLworCUdQSU9fRk5fVFBVVE8zLCBHUElPX0ZOX1RQVVRPMiwgR1BJT19GTl9UUFVUTzEsIEdQSU9fRk5fVFBVVE8wLAorCisJLyogQlNDICovCisJR1BJT19GTl9EMzEsIEdQSU9fRk5fRDMwLCBHUElPX0ZOX0QyOSwgR1BJT19GTl9EMjgsCisJR1BJT19GTl9EMjcsIEdQSU9fRk5fRDI2LCBHUElPX0ZOX0QyNSwgR1BJT19GTl9EMjQsCisJR1BJT19GTl9EMjMsIEdQSU9fRk5fRDIyLCBHUElPX0ZOX0QyMSwgR1BJT19GTl9EMjAsCisJR1BJT19GTl9EMTksIEdQSU9fRk5fRDE4LCBHUElPX0ZOX0QxNywgR1BJT19GTl9EMTYsCisJR1BJT19GTl9JT0lTMTYsIEdQSU9fRk5fV0FJVCwgR1BJT19GTl9CUywKKwlHUElPX0ZOX0EyNSwgR1BJT19GTl9BMjQsIEdQSU9fRk5fQTIzLCBHUElPX0ZOX0EyMiwKKwlHUElPX0ZOX0NTNkJfQ0UxQiwgR1BJT19GTl9DUzZBX0NFMkIsCisJR1BJT19GTl9DUzVCX0NFMUEsIEdQSU9fRk5fQ1M1QV9DRTJBLAorCUdQSU9fRk5fV0UzX0lDSU9XUiwgR1BJT19GTl9XRTJfSUNJT1JELAorCisJLyogQVRBUEkgKi8KKwlHUElPX0ZOX0lERUQxNSwgR1BJT19GTl9JREVEMTQsIEdQSU9fRk5fSURFRDEzLCBHUElPX0ZOX0lERUQxMiwKKwlHUElPX0ZOX0lERUQxMSwgR1BJT19GTl9JREVEMTAsIEdQSU9fRk5fSURFRDksIEdQSU9fRk5fSURFRDgsCisJR1BJT19GTl9JREVENywgR1BJT19GTl9JREVENiwgR1BJT19GTl9JREVENSwgR1BJT19GTl9JREVENCwKKwlHUElPX0ZOX0lERUQzLCBHUElPX0ZOX0lERUQyLCBHUElPX0ZOX0lERUQxLCBHUElPX0ZOX0lERUQwLAorCUdQSU9fRk5fRElSRUNUSU9OLCBHUElPX0ZOX0VYQlVGX0VOQiwgR1BJT19GTl9JREVSU1QsIEdQSU9fRk5fSU9EQUNLLAorCUdQSU9fRk5fSU9EUkVRLCBHUElPX0ZOX0lERUlPUkRZLCBHUElPX0ZOX0lERUlOVCwgR1BJT19GTl9JREVJT1dSLAorCUdQSU9fRk5fSURFSU9SRCwgR1BJT19GTl9JREVDUzEsIEdQSU9fRk5fSURFQ1MwLCBHUElPX0ZOX0lERUEyLAorCUdQSU9fRk5fSURFQTEsIEdQSU9fRk5fSURFQTAsCit9OworCisjZW5kaWYgLyogX19BU01fU0g3NzIzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9lZG9zazc3MDUuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL2Vkb3NrNzcwNS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL2Vkb3NrNzcwNS5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9lZG9zazc3MDUuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9yNzc4MHJwLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9oaWdobGFuZGVyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vcjc3ODBycC5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9oaWdobGFuZGVyLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaHA2eHguaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL2hwNnh4LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vaHA2eHguaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvaHA2eHguaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9sYm94cmUyLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9sYm94cmUyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vbGJveHJlMi5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9sYm94cmUyLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFnaWNwYW5lbHIyLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9tYWdpY3BhbmVscjIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9tYWdpY3BhbmVscjIuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWFnaWNwYW5lbHIyLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWljcm9kZXYuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21pY3JvZGV2LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vbWljcm9kZXYuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWljcm9kZXYuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWlnb3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21pZ29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ1MWYwMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21pZ29yLmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBfX0FTTV9TSF9NSUdPUl9ICisjZGVmaW5lIF9fQVNNX1NIX01JR09SX0gKKworLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL21pZ29yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDcgTm9idWhpcm8gSXdhbWF0c3UKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKworLyogR1BJTyAqLworI2RlZmluZSBQT1JUX1BBQ1IgMHhhNDA1MDEwMAorI2RlZmluZSBQT1JUX1BEQ1IgMHhhNDA1MDEwNgorI2RlZmluZSBQT1JUX1BFQ1IgMHhhNDA1MDEwOAorI2RlZmluZSBQT1JUX1BIQ1IgMHhhNDA1MDEwZQorI2RlZmluZSBQT1JUX1BKQ1IgMHhhNDA1MDExMAorI2RlZmluZSBQT1JUX1BLQ1IgMHhhNDA1MDExMgorI2RlZmluZSBQT1JUX1BMQ1IgMHhhNDA1MDExNAorI2RlZmluZSBQT1JUX1BNQ1IgMHhhNDA1MDExNgorI2RlZmluZSBQT1JUX1BSQ1IgMHhhNDA1MDExYworI2RlZmluZSBQT1JUX1BUQ1IgMHhhNDA1MDE0MAorI2RlZmluZSBQT1JUX1BVQ1IgMHhhNDA1MDE0MgorI2RlZmluZSBQT1JUX1BWQ1IgMHhhNDA1MDE0NAorI2RlZmluZSBQT1JUX1BXQ1IgMHhhNDA1MDE0NgorI2RlZmluZSBQT1JUX1BYQ1IgMHhhNDA1MDE0OAorI2RlZmluZSBQT1JUX1BZQ1IgMHhhNDA1MDE0YQorI2RlZmluZSBQT1JUX1BaQ1IgMHhhNDA1MDE0YworI2RlZmluZSBQT1JUX1BBRFIgMHhhNDA1MDEyMAorI2RlZmluZSBQT1JUX1BIRFIgMHhhNDA1MDEyZQorI2RlZmluZSBQT1JUX1BURFIgMHhhNDA1MDE2MAorI2RlZmluZSBQT1JUX1BXRFIgMHhhNDA1MDE2NgorCisjZGVmaW5lIFBPUlRfSElaQ1JBIDB4YTQwNTAxNTgKKyNkZWZpbmUgUE9SVF9ISVpDUkMgMHhhNDA1MDE1YworCisjZGVmaW5lIFBPUlRfTVNFTENSQiAweGE0MDUwMTgyCisKKyNkZWZpbmUgUE9SVF9QU0VMQSAweGE0MDUwMTRlCisjZGVmaW5lIFBPUlRfUFNFTEIgMHhhNDA1MDE1MAorI2RlZmluZSBQT1JUX1BTRUxDIDB4YTQwNTAxNTIKKyNkZWZpbmUgUE9SVF9QU0VMRCAweGE0MDUwMTU0CisjZGVmaW5lIFBPUlRfUFNFTEUgMHhhNDA1MDE1NgorCisjZGVmaW5lIFBPUlRfSElaQ1JBIDB4YTQwNTAxNTgKKyNkZWZpbmUgUE9SVF9ISVpDUkIgMHhhNDA1MDE1YQorI2RlZmluZSBQT1JUX0hJWkNSQyAweGE0MDUwMTVjCisKKyNkZWZpbmUgQlNDX0NTNEJDUiAweGZlYzEwMDEwCisjZGVmaW5lIEJTQ19DUzZBQkNSIDB4ZmVjMTAwMWMKKyNkZWZpbmUgQlNDX0NTNFdDUiAweGZlYzEwMDMwCisKKyNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfbGNkYy5oPgorCitpbnQgbWlnb3JfbGNkX3F2Z2Ffc2V0dXAodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCisJCQkgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX01JR09SX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcnRzNzc1MXIyZC5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvcjJkLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vcnRzNzc1MXIyZC5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9yMmQuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZGs3NzgwLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zZGs3NzgwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vc2RrNzc4MC5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zZGs3NzgwLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2g3NzYzcmRwLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zaDc3NjNyZHAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9zaDc3NjNyZHAuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2g3NzYzcmRwLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2g3Nzg1bGNyLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zaDc3ODVsY3IuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9zaDc3ODVsY3IuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2g3Nzg1bGNyLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2htaW4uaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3NobWluLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vc2htaW4uaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2htaW4uaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zbmFwZ2Vhci5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc25hcGdlYXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9zbmFwZ2Vhci5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zbmFwZ2Vhci5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbWg3NzUxLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zeXN0ZW1oNzc1MS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbWg3NzUxLmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3N5c3RlbWg3NzUxLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGl0YW4uaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3RpdGFuLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vdGl0YW4uaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvdGl0YW4uaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgppbmRleCAwZTY5MDVmLi40OGVkZmIxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgorKysgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgpAQCAtMjEsNyArMjEsOCBAQAogb2JqLSQoQ09ORklHX0NSQVNIX0RVTVApCSs9IGNyYXNoX2R1bXAubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubwogb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2Uubwotb2JqLSQoQ09ORklHX0VMRl9DT1JFKQkJKz0gZHVtcF90YXNrLm8KIG9iai0kKENPTkZJR19JT19UUkFQUEVEKQkrPSBpb190cmFwcGVkLm8KK29iai0kKENPTkZJR19LUFJPQkVTKQkJKz0ga3Byb2Jlcy5vCitvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSBncGlvLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzY0IGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfNjQKaW5kZXggNmVkZjUzYi4uYzk3NjYwYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfNjQKKysrIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfNjQKQEAgLTE3LDcgKzE3LDcgQEAKIG9iai0kKENPTkZJR19DUkFTSF9EVU1QKQkrPSBjcmFzaF9kdW1wLm8KIG9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KIG9iai0kKENPTkZJR19TVEFDS1RSQUNFKQkrPSBzdGFja3RyYWNlLm8KLW9iai0kKENPTkZJR19CSU5GTVRfRUxGKQkrPSBkdW1wX3Rhc2subwogb2JqLSQoQ09ORklHX0lPX1RSQVBQRUQpCSs9IGlvX3RyYXBwZWQubworb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gZ3Bpby5vCiAKIEVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCmluZGV4IGY1ZWI1NmUuLmI3ZTQ2ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCkBAIC0yOTQsOSArMjk0LDEwIEBACiB7CiB9CiAKLXZvaWQgX19pbml0IF9fYXR0cmlidXRlX18gKCh3ZWFrKSkKK2ludCBfX2luaXQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKQogYXJjaF9jbGtfaW5pdCh2b2lkKQogeworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNob3dfY2xvY2tzKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCkBAIC0zMzEsNyArMzMyLDcgQEAKIAkJcmV0IHw9IGNsa19yZWdpc3RlcihjbGspOwogCX0KIAotCWFyY2hfY2xrX2luaXQoKTsKKwlyZXQgfD0gYXJjaF9jbGtfaW5pdCgpOwogCiAJLyogS2ljayB0aGUgY2hpbGQgY2xvY2tzLi4gKi8KIAlwcm9wYWdhdGVfcmF0ZSgmbWFzdGVyX2Nsayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9NYWtlZmlsZQppbmRleCA0NjJhOGY2Li5mMGM3MDI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvTWFrZWZpbGUKQEAgLTEsOCArMSw2IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXgvU3VwZXJIIENQVS1zcGVjaWZjIElSUSBoYW5kbGVycy4KICMKLW9iai15CSs9IGludGMubwotCiBvYmotJChDT05GSUdfU1VQRVJIMzIpCQkJKz0gaW1hc2subwogb2JqLSQoQ09ORklHX0NQVV9TSDUpCQkJKz0gaW50Yy1zaDUubwogb2JqLSQoQ09ORklHX0NQVV9IQVNfSVBSX0lSUSkJCSs9IGlwci5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzcwZTIwLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzEwICswLDAgQEAKLS8qCi0gKiBTaGFyZWQgaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUgZm9yIElQUiBhbmQgSU5UQzIgdHlwZXMgb2YgSVJRcy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggTWFnbnVzIERhbW0KLSAqCi0gKiBCYXNlZCBvbiBpbnRjMi5jIGFuZCBpcHIuYwotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSAgTmlpYmUgWXV0YWthICYgVGFrZXNoaSBZYWVnYXNoaQotICogQ29weXJpZ2h0IChDKSAyMDAwICBLYXp1bW90byBLb2ppbWEKLSAqIENvcHlyaWdodCAoQykgMjAwMSAgRGF2aWQgSi4gTWNrYXkgKGRhdmlkLm1ja2F5QHN0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMyAgVGFrYXNoaSBLdXN1ZGEgPGt1c3VkYS10YWthc2hpQGhpdGFjaGktdWwuY28uanA+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgIFBhdWwgTXVuZHQKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLQotI2RlZmluZSBfSU5UQ19NSyhmbiwgbW9kZSwgYWRkcl9lLCBhZGRyX2QsIHdpZHRoLCBzaGlmdCkgXAotCSgoc2hpZnQpIHwgKCh3aWR0aCkgPDwgNSkgfCAoKGZuKSA8PCA5KSB8ICgobW9kZSkgPDwgMTMpIHwgXAotCSAoKGFkZHJfZSkgPDwgMTYpIHwgKChhZGRyX2QgPDwgMjQpKSkKLQotI2RlZmluZSBfSU5UQ19TSElGVChoKSAoaCAmIDB4MWYpCi0jZGVmaW5lIF9JTlRDX1dJRFRIKGgpICgoaCA+PiA1KSAmIDB4ZikKLSNkZWZpbmUgX0lOVENfRk4oaCkgKChoID4+IDkpICYgMHhmKQotI2RlZmluZSBfSU5UQ19NT0RFKGgpICgoaCA+PiAxMykgJiAweDcpCi0jZGVmaW5lIF9JTlRDX0FERFJfRShoKSAoKGggPj4gMTYpICYgMHhmZikKLSNkZWZpbmUgX0lOVENfQUREUl9EKGgpICgoaCA+PiAyNCkgJiAweGZmKQotCi1zdHJ1Y3QgaW50Y19oYW5kbGVfaW50IHsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwotfTsKLQotc3RydWN0IGludGNfZGVzY19pbnQgewotCXVuc2lnbmVkIGxvbmcgKnJlZzsKLSNpZmRlZiBDT05GSUdfU01QCi0JdW5zaWduZWQgbG9uZyAqc21wOwotI2VuZGlmCi0JdW5zaWduZWQgaW50IG5yX3JlZzsKLQlzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICpwcmlvOwotCXVuc2lnbmVkIGludCBucl9wcmlvOwotCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKnNlbnNlOwotCXVuc2lnbmVkIGludCBucl9zZW5zZTsKLQlzdHJ1Y3QgaXJxX2NoaXAgY2hpcDsKLX07Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIElTX1NNUCh4KSB4LnNtcAotI2RlZmluZSBJTlRDX1JFRyhkLCB4LCBjKSAoZC0+cmVnWyh4KV0gKyAoKGQtPnNtcFsoeCldICYgMHhmZikgKiBjKSkKLSNkZWZpbmUgU01QX05SKGQsIHgpICgoZC0+c21wWyh4KV0gPj4gOCkgPyAoZC0+c21wWyh4KV0gPj4gOCkgOiAxKQotI2Vsc2UKLSNkZWZpbmUgSVNfU01QKHgpIDAKLSNkZWZpbmUgSU5UQ19SRUcoZCwgeCwgYykgKGQtPnJlZ1soeCldKQotI2RlZmluZSBTTVBfTlIoZCwgeCkgMQotI2VuZGlmCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50Y19wcmlvX2xldmVsW05SX0lSUVNdOyAvKiBmb3Igbm93ICovCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBhY2tfaGFuZGxlW05SX0lSUVNdOwotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGludGNfZGVzY19pbnQgKmdldF9pbnRjX2Rlc2ModW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXAoaXJxKTsKLQlyZXR1cm4gKHZvaWQgKikoKGNoYXIgKiljaGlwIC0gb2Zmc2V0b2Yoc3RydWN0IGludGNfZGVzY19pbnQsIGNoaXApKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2V0X2ZpZWxkKHVuc2lnbmVkIGludCB2YWx1ZSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBmaWVsZF92YWx1ZSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0JdW5zaWduZWQgaW50IHdpZHRoID0gX0lOVENfV0lEVEgoaGFuZGxlKTsKLQl1bnNpZ25lZCBpbnQgc2hpZnQgPSBfSU5UQ19TSElGVChoYW5kbGUpOwotCi0JdmFsdWUgJj0gfigoKDEgPDwgd2lkdGgpIC0gMSkgPDwgc2hpZnQpOwotCXZhbHVlIHw9IGZpZWxkX3ZhbHVlIDw8IHNoaWZ0OwotCXJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIHZvaWQgd3JpdGVfOCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCWN0cmxfb3V0YihzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZV8xNih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCWN0cmxfb3V0dyhzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZV8zMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCWN0cmxfb3V0bChzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCBtb2RpZnlfOCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN0cmxfb3V0YihzZXRfZmllbGQoY3RybF9pbmIoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1vZGlmeV8xNih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN0cmxfb3V0dyhzZXRfZmllbGQoY3RybF9pbncoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1vZGlmeV8zMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN0cmxfb3V0bChzZXRfZmllbGQoY3RybF9pbmwoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLWVudW0gewlSRUdfRk5fRVJSID0gMCwgUkVHX0ZOX1dSSVRFX0JBU0UgPSAxLCBSRUdfRk5fTU9ESUZZX0JBU0UgPSA1IH07Ci0KLXN0YXRpYyB2b2lkICgqaW50Y19yZWdfZm5zW10pKHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkgPSB7Ci0JW1JFR19GTl9XUklURV9CQVNFICsgMF0gPSB3cml0ZV84LAotCVtSRUdfRk5fV1JJVEVfQkFTRSArIDFdID0gd3JpdGVfMTYsCi0JW1JFR19GTl9XUklURV9CQVNFICsgM10gPSB3cml0ZV8zMiwKLQlbUkVHX0ZOX01PRElGWV9CQVNFICsgMF0gPSBtb2RpZnlfOCwKLQlbUkVHX0ZOX01PRElGWV9CQVNFICsgMV0gPSBtb2RpZnlfMTYsCi0JW1JFR19GTl9NT0RJRllfQkFTRSArIDNdID0gbW9kaWZ5XzMyLAotfTsKLQotZW51bSB7CU1PREVfRU5BQkxFX1JFRyA9IDAsIC8qIEJpdChzKSBzZXQgLT4gaW50ZXJydXB0IGVuYWJsZWQgKi8KLQlNT0RFX01BU0tfUkVHLCAgICAgICAvKiBCaXQocykgc2V0IC0+IGludGVycnVwdCBkaXNhYmxlZCAqLwotCU1PREVfRFVBTF9SRUcsICAgICAgIC8qIFR3byByZWdpc3RlcnMsIHNldCBiaXQgdG8gZW5hYmxlIC8gZGlzYWJsZSAqLwotCU1PREVfUFJJT19SRUcsICAgICAgIC8qIFByaW9yaXR5IHZhbHVlIHdyaXR0ZW4gdG8gZW5hYmxlIGludGVycnVwdCAqLwotCU1PREVfUENMUl9SRUcsICAgICAgIC8qIEFib3ZlIHBsdXMgYWxsIGJpdHMgc2V0IHRvIGRpc2FibGUgaW50ZXJydXB0ICovCi19OwotCi1zdGF0aWMgdm9pZCBpbnRjX21vZGVfZmllbGQodW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAotCQkJICAgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyksCi0JCQkgICAgdW5zaWduZWQgaW50IGlycSkKLXsKLQlmbihhZGRyLCBoYW5kbGUsICgoMSA8PCBfSU5UQ19XSURUSChoYW5kbGUpKSAtIDEpKTsKLX0KLQotc3RhdGljIHZvaWQgaW50Y19tb2RlX3plcm8odW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgdW5zaWduZWQgbG9uZyBoYW5kbGUsCi0JCQkgICB2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcpLAotCQkJICAgdW5zaWduZWQgaW50IGlycSkKLXsKLQlmbihhZGRyLCBoYW5kbGUsIDApOwotfQotCi1zdGF0aWMgdm9pZCBpbnRjX21vZGVfcHJpbyh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICB1bnNpZ25lZCBsb25nIGhhbmRsZSwKLQkJCSAgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyksCi0JCQkgICB1bnNpZ25lZCBpbnQgaXJxKQotewotCWZuKGFkZHIsIGhhbmRsZSwgaW50Y19wcmlvX2xldmVsW2lycV0pOwotfQotCi1zdGF0aWMgdm9pZCAoKmludGNfZW5hYmxlX2Zuc1tdKSh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAotCQkJCSB2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyksCi0JCQkJIHVuc2lnbmVkIGludCBpcnEpID0gewotCVtNT0RFX0VOQUJMRV9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAotCVtNT0RFX01BU0tfUkVHXSA9IGludGNfbW9kZV96ZXJvLAotCVtNT0RFX0RVQUxfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKLQlbTU9ERV9QUklPX1JFR10gPSBpbnRjX21vZGVfcHJpbywKLQlbTU9ERV9QQ0xSX1JFR10gPSBpbnRjX21vZGVfcHJpbywKLX07Ci0KLXN0YXRpYyB2b2lkICgqaW50Y19kaXNhYmxlX2Zuc1tdKSh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICB1bnNpZ25lZCBsb25nIGhhbmRsZSwKLQkJCQkgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcpLAotCQkJCSAgdW5zaWduZWQgaW50IGlycSkgPSB7Ci0JW01PREVfRU5BQkxFX1JFR10gPSBpbnRjX21vZGVfemVybywKLQlbTU9ERV9NQVNLX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCi0JW01PREVfRFVBTF9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAotCVtNT0RFX1BSSU9fUkVHXSA9IGludGNfbW9kZV96ZXJvLAotCVtNT0RFX1BDTFJfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaW50Y19lbmFibGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgbG9uZyBoYW5kbGUpCi17Ci0Jc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCXVuc2lnbmVkIGludCBjcHU7Ci0KLQlmb3IgKGNwdSA9IDA7IGNwdSA8IFNNUF9OUihkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSk7IGNwdSsrKSB7Ci0JCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSwgY3B1KTsKLQkJaW50Y19lbmFibGVfZm5zW19JTlRDX01PREUoaGFuZGxlKV0oYWRkciwgaGFuZGxlLCBpbnRjX3JlZ19mbnNcCi0JCQkJCQkgICAgW19JTlRDX0ZOKGhhbmRsZSldLCBpcnEpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaW50Y19lbmFibGUodW5zaWduZWQgaW50IGlycSkKLXsKLQlfaW50Y19lbmFibGUoaXJxLCAodW5zaWduZWQgbG9uZylnZXRfaXJxX2NoaXBfZGF0YShpcnEpKTsKLX0KLQotc3RhdGljIHZvaWQgaW50Y19kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBoYW5kbGUgPSAodW5zaWduZWQgbG9uZykgZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JdW5zaWduZWQgaW50IGNwdTsKLQotCWZvciAoY3B1ID0gMDsgY3B1IDwgU01QX05SKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpKTsgY3B1KyspIHsKLQkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpLCBjcHUpOwotCQlpbnRjX2Rpc2FibGVfZm5zW19JTlRDX01PREUoaGFuZGxlKV0oYWRkciwgaGFuZGxlLGludGNfcmVnX2Zuc1wKLQkJCQkJCSAgICAgW19JTlRDX0ZOKGhhbmRsZSldLCBpcnEpOwotCX0KLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotc3RhdGljIHZvaWQgaW50Y19tYXNrX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkID0gZ2V0X2ludGNfZGVzYyhpcnEpOwotCXVuc2lnbmVkIGxvbmcgaGFuZGxlID0gYWNrX2hhbmRsZVtpcnFdOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQotCWludGNfZGlzYWJsZShpcnEpOwotCi0JLyogcmVhZCByZWdpc3RlciBhbmQgd3JpdGUgemVybyBvbmx5IHRvIHRoZSBhc3NvY2FpdGVkIGJpdCAqLwotCi0JaWYgKGhhbmRsZSkgewotCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9EKGhhbmRsZSksIDApOwotCQlzd2l0Y2ggKF9JTlRDX0ZOKGhhbmRsZSkpIHsKLQkJY2FzZSBSRUdfRk5fTU9ESUZZX0JBU0UgKyAwOgkvKiA4Yml0ICovCi0JCQljdHJsX2luYihhZGRyKTsKLQkJCWN0cmxfb3V0YigweGZmIF4gc2V0X2ZpZWxkKDAsIDEsIGhhbmRsZSksIGFkZHIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVHX0ZOX01PRElGWV9CQVNFICsgMToJLyogMTZiaXQgKi8KLQkJCWN0cmxfaW53KGFkZHIpOwotCQkJY3RybF9vdXR3KDB4ZmZmZiBeIHNldF9maWVsZCgwLCAxLCBoYW5kbGUpLCBhZGRyKTsKLQkJCWJyZWFrOwotCQljYXNlIFJFR19GTl9NT0RJRllfQkFTRSArIDM6CS8qIDMyYml0ICovCi0JCQljdHJsX2lubChhZGRyKTsKLQkJCWN0cmxfb3V0bCgweGZmZmZmZmZmIF4gc2V0X2ZpZWxkKDAsIDEsIGhhbmRsZSksIGFkZHIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlCVUcoKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICppbnRjX2ZpbmRfaXJxKHN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmhwLAotCQkJCQkgICAgIHVuc2lnbmVkIGludCBucl9ocCwKLQkJCQkJICAgICB1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBpOwotCi0JLyogdGhpcyBkb2Vzbid0IHNjYWxlIHdlbGwsIGJ1dC4uLgotCSAqCi0JICogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjZXJhaW4gdW5jb21tb24KLQkgKiBvcGVyYXRpb25zIHN1Y2ggYXMgaW50Y19zZXRfcHJpb3JpdHkoKSBhbmQgaW50Y19zZXRfc2Vuc2UoKQotCSAqIGFuZCBpbiB0aG9zZSByYXJlIGNhc2VzIHBlcmZvcm1hbmNlIGRvZXNuJ3QgbWF0dGVyIHRoYXQgbXVjaC4KLQkgKiBrZWVwaW5nIHRoZSBtZW1vcnkgZm9vdHByaW50IGxvdyBpcyBtb3JlIGltcG9ydGFudC4KLQkgKgotCSAqIG9uZSByYXRoZXIgc2ltcGxlIHdheSB0byBzcGVlZCB0aGlzIHVwIGFuZCBzdGlsbCBrZWVwIHRoZQotCSAqIG1lbW9yeSBmb290cHJpbnQgZG93biBpcyB0byBtYWtlIHN1cmUgdGhlIGFycmF5IGlzIHNvcnRlZAotCSAqIGFuZCB0aGVuIHBlcmZvcm0gYSBiaXNlY3QgdG8gbG9va3VwIHRoZSBpcnEuCi0JICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfaHA7IGkrKykgewotCQlpZiAoKGhwICsgaSktPmlycSAhPSBpcnEpCi0JCQljb250aW51ZTsKLQotCQlyZXR1cm4gaHAgKyBpOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1pbnQgaW50Y19zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHByaW8pCi17Ci0Jc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7Ci0Jc3RydWN0IGludGNfaGFuZGxlX2ludCAqaWhwOwotCi0JaWYgKCFpbnRjX3ByaW9fbGV2ZWxbaXJxXSB8fCBwcmlvIDw9IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWhwID0gaW50Y19maW5kX2lycShkLT5wcmlvLCBkLT5ucl9wcmlvLCBpcnEpOwotCWlmIChpaHApIHsKLQkJaWYgKHByaW8gPj0gKDEgPDwgX0lOVENfV0lEVEgoaWhwLT5oYW5kbGUpKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWludGNfcHJpb19sZXZlbFtpcnFdID0gcHJpbzsKLQotCQkvKgotCQkgKiBvbmx5IHNldCBzZWNvbmRhcnkgbWFza2luZyBtZXRob2QgZGlyZWN0bHkKLQkJICogcHJpbWFyeSBtYXNraW5nIG1ldGhvZCBpcyB1c2luZyBpbnRjX3ByaW9fbGV2ZWxbaXJxXQotCQkgKiBwcmlvcml0eSBsZXZlbCB3aWxsIGJlIHNldCBkdXJpbmcgbmV4dCBlbmFibGUoKQotCQkgKi8KLQotCQlpZiAoX0lOVENfRk4oaWhwLT5oYW5kbGUpICE9IFJFR19GTl9FUlIpCi0JCQlfaW50Y19lbmFibGUoaXJxLCBpaHAtPmhhbmRsZSk7Ci0JfQotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFZBTElEKHgpICh4IHwgMHg4MCkKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgaW50Y19pcnFfc2Vuc2VfdGFibGVbSVJRX1RZUEVfU0VOU0VfTUFTSyArIDFdID0gewotCVtJUlFfVFlQRV9FREdFX0ZBTExJTkddID0gVkFMSUQoMCksCi0JW0lSUV9UWVBFX0VER0VfUklTSU5HXSA9IFZBTElEKDEpLAotCVtJUlFfVFlQRV9MRVZFTF9MT1ddID0gVkFMSUQoMiksCi0JLyogU0g3NzA2LCBTSDc3MDcgYW5kIFNINzcwOSBkbyBub3Qgc3VwcG9ydCBoaWdoIGxldmVsIHRyaWdnZXJlZCAqLwotI2lmICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpICYmIFwKLSAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSAmJiBcCi0gICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKLQlbSVJRX1RZUEVfTEVWRUxfSElHSF0gPSBWQUxJRCgzKSwKLSNlbmRpZgotfTsKLQotc3RhdGljIGludCBpbnRjX3NldF9zZW5zZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCA9IGdldF9pbnRjX2Rlc2MoaXJxKTsKLQl1bnNpZ25lZCBjaGFyIHZhbHVlID0gaW50Y19pcnFfc2Vuc2VfdGFibGVbdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0tdOwotCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmlocDsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQlpZiAoIXZhbHVlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlocCA9IGludGNfZmluZF9pcnEoZC0+c2Vuc2UsIGQtPm5yX3NlbnNlLCBpcnEpOwotCWlmIChpaHApIHsKLQkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRShpaHAtPmhhbmRsZSksIDApOwotCQlpbnRjX3JlZ19mbnNbX0lOVENfRk4oaWhwLT5oYW5kbGUpXShhZGRyLCBpaHAtPmhhbmRsZSwgdmFsdWUpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19nZXRfcmVnKHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0JdW5zaWduZWQgaW50IGs7Ci0KLQlmb3IgKGsgPSAwOyBrIDwgZC0+bnJfcmVnOyBrKyspIHsKLQkJaWYgKGQtPnJlZ1trXSA9PSBhZGRyZXNzKQotCQkJcmV0dXJuIGs7Ci0JfQotCi0JQlVHKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnRjX2VudW0gX19pbml0IGludGNfZ3JwX2lkKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJICAgIGludGNfZW51bSBlbnVtX2lkKQotewotCXN0cnVjdCBpbnRjX2dyb3VwICpnID0gZGVzYy0+Z3JvdXBzOwotCXVuc2lnbmVkIGludCBpLCBqOwotCi0JZm9yIChpID0gMDsgZyAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9ncm91cHM7IGkrKykgewotCQlnID0gZGVzYy0+Z3JvdXBzICsgaTsKLQotCQlmb3IgKGogPSAwOyBnLT5lbnVtX2lkc1tqXTsgaisrKSB7Ci0JCQlpZiAoZy0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKLQkJCQljb250aW51ZTsKLQotCQkJcmV0dXJuIGctPmVudW1faWQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19tYXNrX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKLQkJCQkJICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKLQkJCQkJICBpbnRjX2VudW0gZW51bV9pZCwgaW50IGRvX2dycHMpCi17Ci0Jc3RydWN0IGludGNfbWFza19yZWcgKm1yID0gZGVzYy0+bWFza19yZWdzOwotCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgbW9kZTsKLQl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKLQotCWZvciAoaSA9IDA7IG1yICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX21hc2tfcmVnczsgaSsrKSB7Ci0JCW1yID0gZGVzYy0+bWFza19yZWdzICsgaTsKLQotCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKLQkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKG1yLT5zZXRfcmVnICYmIG1yLT5jbHJfcmVnKSB7Ci0JCQkJZm4gPSBSRUdfRk5fV1JJVEVfQkFTRTsKLQkJCQltb2RlID0gTU9ERV9EVUFMX1JFRzsKLQkJCQlyZWdfZSA9IG1yLT5jbHJfcmVnOwotCQkJCXJlZ19kID0gbXItPnNldF9yZWc7Ci0JCQl9IGVsc2UgewotCQkJCWZuID0gUkVHX0ZOX01PRElGWV9CQVNFOwotCQkJCWlmIChtci0+c2V0X3JlZykgewotCQkJCQltb2RlID0gTU9ERV9FTkFCTEVfUkVHOwotCQkJCQlyZWdfZSA9IG1yLT5zZXRfcmVnOwotCQkJCQlyZWdfZCA9IG1yLT5zZXRfcmVnOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW1vZGUgPSBNT0RFX01BU0tfUkVHOwotCQkJCQlyZWdfZSA9IG1yLT5jbHJfcmVnOwotCQkJCQlyZWdfZCA9IG1yLT5jbHJfcmVnOwotCQkJCX0KLQkJCX0KLQotCQkJZm4gKz0gKG1yLT5yZWdfd2lkdGggPj4gMykgLSAxOwotCQkJcmV0dXJuIF9JTlRDX01LKGZuLCBtb2RlLAotCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAotCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAotCQkJCQkxLAotCQkJCQkobXItPnJlZ193aWR0aCAtIDEpIC0gaik7Ci0JCX0KLQl9Ci0KLQlpZiAoZG9fZ3JwcykKLQkJcmV0dXJuIGludGNfbWFza19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX3ByaW9fZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAotCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCQkgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZG9fZ3JwcykKLXsKLQlzdHJ1Y3QgaW50Y19wcmlvX3JlZyAqcHIgPSBkZXNjLT5wcmlvX3JlZ3M7Ci0JdW5zaWduZWQgaW50IGksIGosIGZuLCBtb2RlLCBiaXQ7Ci0JdW5zaWduZWQgbG9uZyByZWdfZSwgcmVnX2Q7Ci0KLQlmb3IgKGkgPSAwOyBwciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9wcmlvX3JlZ3M7IGkrKykgewotCQlwciA9IGRlc2MtPnByaW9fcmVncyArIGk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocHItPmVudW1faWRzKTsgaisrKSB7Ci0JCQlpZiAocHItPmVudW1faWRzW2pdICE9IGVudW1faWQpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChwci0+c2V0X3JlZyAmJiBwci0+Y2xyX3JlZykgewotCQkJCWZuID0gUkVHX0ZOX1dSSVRFX0JBU0U7Ci0JCQkJbW9kZSA9IE1PREVfUENMUl9SRUc7Ci0JCQkJcmVnX2UgPSBwci0+c2V0X3JlZzsKLQkJCQlyZWdfZCA9IHByLT5jbHJfcmVnOwotCQkJfSBlbHNlIHsKLQkJCQlmbiA9IFJFR19GTl9NT0RJRllfQkFTRTsKLQkJCQltb2RlID0gTU9ERV9QUklPX1JFRzsKLQkJCQlpZiAoIXByLT5zZXRfcmVnKQotCQkJCQlCVUcoKTsKLQkJCQlyZWdfZSA9IHByLT5zZXRfcmVnOwotCQkJCXJlZ19kID0gcHItPnNldF9yZWc7Ci0JCQl9Ci0KLQkJCWZuICs9IChwci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKLQkJCWJpdCA9IHByLT5yZWdfd2lkdGggLSAoKGogKyAxKSAqIHByLT5maWVsZF93aWR0aCk7Ci0KLQkJCUJVR19PTihiaXQgPCAwKTsKLQotCQkJcmV0dXJuIF9JTlRDX01LKGZuLCBtb2RlLAotCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAotCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAotCQkJCQlwci0+ZmllbGRfd2lkdGgsIGJpdCk7Ci0JCX0KLQl9Ci0KLQlpZiAoZG9fZ3JwcykKLQkJcmV0dXJuIGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKLQotCXJldHVybiAwOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX2Fja19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCi0JCQkJCSAgaW50Y19lbnVtIGVudW1faWQpCi17Ci0Jc3RydWN0IGludGNfbWFza19yZWcgKm1yID0gZGVzYy0+YWNrX3JlZ3M7Ci0JdW5zaWduZWQgaW50IGksIGosIGZuLCBtb2RlOwotCXVuc2lnbmVkIGxvbmcgcmVnX2UsIHJlZ19kOwotCi0JZm9yIChpID0gMDsgbXIgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+bnJfYWNrX3JlZ3M7IGkrKykgewotCQltciA9IGRlc2MtPmFja19yZWdzICsgaTsKLQotCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKLQkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKLQkJCQljb250aW51ZTsKLQotCQkJZm4gPSBSRUdfRk5fTU9ESUZZX0JBU0U7Ci0JCQltb2RlID0gTU9ERV9FTkFCTEVfUkVHOwotCQkJcmVnX2UgPSBtci0+c2V0X3JlZzsKLQkJCXJlZ19kID0gbXItPnNldF9yZWc7Ci0KLQkJCWZuICs9IChtci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKLQkJCXJldHVybiBfSU5UQ19NSyhmbiwgbW9kZSwKLQkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19lKSwKLQkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19kKSwKLQkJCQkJMSwKLQkJCQkJKG1yLT5yZWdfd2lkdGggLSAxKSAtIGopOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19zZW5zZV9kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJCSAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCQkgICBpbnRjX2VudW0gZW51bV9pZCkKLXsKLQlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNyID0gZGVzYy0+c2Vuc2VfcmVnczsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIGJpdDsKLQotCWZvciAoaSA9IDA7IHNyICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX3NlbnNlX3JlZ3M7IGkrKykgewotCQlzciA9IGRlc2MtPnNlbnNlX3JlZ3MgKyBpOwotCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNyLT5lbnVtX2lkcyk7IGorKykgewotCQkJaWYgKHNyLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQotCQkJCWNvbnRpbnVlOwotCi0JCQlmbiA9IFJFR19GTl9NT0RJRllfQkFTRTsKLQkJCWZuICs9IChzci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKLQkJCWJpdCA9IHNyLT5yZWdfd2lkdGggLSAoKGogKyAxKSAqIHNyLT5maWVsZF93aWR0aCk7Ci0KLQkJCUJVR19PTihiaXQgPCAwKTsKLQotCQkJcmV0dXJuIF9JTlRDX01LKGZuLCAwLCBpbnRjX2dldF9yZWcoZCwgc3ItPnJlZyksCi0JCQkJCTAsIHNyLT5maWVsZF93aWR0aCwgYml0KTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgaW50Y19yZWdpc3Rlcl9pcnEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKLQkJCQkgICAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCSAgICAgaW50Y19lbnVtIGVudW1faWQsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmhwOwotCXVuc2lnbmVkIGludCBkYXRhWzJdLCBwcmltYXJ5OwotCi0JLyogUHJlZmVyIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlIGJpdG1hcCBvdmVyIG90aGVyIGNvbWJpbmF0aW9uczoKLQkgKiAxLiBiaXRtYXAsIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlCi0JICogMi4gcHJpb3JpdHksIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlCi0JICogMy4gYml0bWFwLCBtdWx0aXBsZSBpbnRlcnJ1cHQgc291cmNlcyAoZ3JvdXBzKQotCSAqIDQuIHByaW9yaXR5LCBtdWx0aXBsZSBpbnRlcnJ1cHQgc291cmNlcyAoZ3JvdXBzKQotCSAqLwotCi0JZGF0YVswXSA9IGludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDApOwotCWRhdGFbMV0gPSBpbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAwKTsKLQotCXByaW1hcnkgPSAwOwotCWlmICghZGF0YVswXSAmJiBkYXRhWzFdKQotCQlwcmltYXJ5ID0gMTsKLQotCWRhdGFbMF0gPSBkYXRhWzBdID8gZGF0YVswXSA6IGludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDEpOwotCWRhdGFbMV0gPSBkYXRhWzFdID8gZGF0YVsxXSA6IGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDEpOwotCi0JaWYgKCFkYXRhW3ByaW1hcnldKQotCQlwcmltYXJ5IF49IDE7Ci0KLQlCVUdfT04oIWRhdGFbcHJpbWFyeV0pOyAvKiBtdXN0IGhhdmUgcHJpbWFyeSBtYXNraW5nIG1ldGhvZCAqLwotCi0JZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7Ci0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmZC0+Y2hpcCwKLQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKLQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsICh2b2lkICopZGF0YVtwcmltYXJ5XSk7Ci0KLQkvKiBzZXQgcHJpb3JpdHkgbGV2ZWwKLQkgKiAtIHRoaXMgbmVlZHMgdG8gYmUgYXQgbGVhc3QgMiBmb3IgNS1iaXQgcHJpb3JpdGllcyBvbiA3NzgwCi0JICovCi0JaW50Y19wcmlvX2xldmVsW2lycV0gPSAyOwotCi0JLyogZW5hYmxlIHNlY29uZGFyeSBtYXNraW5nIG1ldGhvZCBpZiBwcmVzZW50ICovCi0JaWYgKGRhdGFbIXByaW1hcnldKQotCQlfaW50Y19lbmFibGUoaXJxLCBkYXRhWyFwcmltYXJ5XSk7Ci0KLQkvKiBhZGQgaXJxIHRvIGQtPnByaW8gbGlzdCBpZiBwcmlvcml0eSBpcyBhdmFpbGFibGUgKi8KLQlpZiAoZGF0YVsxXSkgewotCQlocCA9IGQtPnByaW8gKyBkLT5ucl9wcmlvOwotCQlocC0+aXJxID0gaXJxOwotCQlocC0+aGFuZGxlID0gZGF0YVsxXTsKLQotCQlpZiAocHJpbWFyeSkgewotCQkJLyoKLQkJCSAqIG9ubHkgc2Vjb25kYXJ5IHByaW9yaXR5IHNob3VsZCBhY2Nlc3MgcmVnaXN0ZXJzLCBzbwotCQkJICogc2V0IF9JTlRDX0ZOKGgpID0gUkVHX0ZOX0VSUiBmb3IgaW50Y19zZXRfcHJpb3JpdHkoKQotCQkJICovCi0KLQkJCWhwLT5oYW5kbGUgJj0gfl9JTlRDX01LKDB4MGYsIDAsIDAsIDAsIDAsIDApOwotCQkJaHAtPmhhbmRsZSB8PSBfSU5UQ19NSyhSRUdfRk5fRVJSLCAwLCAwLCAwLCAwLCAwKTsKLQkJfQotCQlkLT5ucl9wcmlvKys7Ci0JfQotCi0JLyogYWRkIGlycSB0byBkLT5zZW5zZSBsaXN0IGlmIHNlbnNlIGlzIGF2YWlsYWJsZSAqLwotCWRhdGFbMF0gPSBpbnRjX3NlbnNlX2RhdGEoZGVzYywgZCwgZW51bV9pZCk7Ci0JaWYgKGRhdGFbMF0pIHsKLQkJKGQtPnNlbnNlICsgZC0+bnJfc2Vuc2UpLT5pcnEgPSBpcnE7Ci0JCShkLT5zZW5zZSArIGQtPm5yX3NlbnNlKS0+aGFuZGxlID0gZGF0YVswXTsKLQkJZC0+bnJfc2Vuc2UrKzsKLQl9Ci0KLQkvKiBpcnEgc2hvdWxkIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KLQlkLT5jaGlwLm1hc2soaXJxKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotCWlmIChkZXNjLT5hY2tfcmVncykKLQkJYWNrX2hhbmRsZVtpcnFdID0gaW50Y19hY2tfZGF0YShkZXNjLCBkLCBlbnVtX2lkKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBzYXZlX3JlZyhzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKLQkJCQkgICAgdW5zaWduZWQgaW50IGNudCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSwKLQkJCQkgICAgdW5zaWduZWQgaW50IHNtcCkKLXsKLQlpZiAodmFsdWUpIHsKLQkJZC0+cmVnW2NudF0gPSB2YWx1ZTsKLSNpZmRlZiBDT05GSUdfU01QCi0JCWQtPnNtcFtjbnRdID0gc21wOwotI2VuZGlmCi0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKQotewotCXVuc2lnbmVkIGludCBpLCBrLCBzbXA7Ci0Jc3RydWN0IGludGNfZGVzY19pbnQgKmQ7Ci0KLQlkID0gYWxsb2NfYm9vdG1lbShzaXplb2YoKmQpKTsKLQotCWQtPm5yX3JlZyA9IGRlc2MtPm1hc2tfcmVncyA/IGRlc2MtPm5yX21hc2tfcmVncyAqIDIgOiAwOwotCWQtPm5yX3JlZyArPSBkZXNjLT5wcmlvX3JlZ3MgPyBkZXNjLT5ucl9wcmlvX3JlZ3MgKiAyIDogMDsKLQlkLT5ucl9yZWcgKz0gZGVzYy0+c2Vuc2VfcmVncyA/IGRlc2MtPm5yX3NlbnNlX3JlZ3MgOiAwOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0JZC0+bnJfcmVnICs9IGRlc2MtPmFja19yZWdzID8gZGVzYy0+bnJfYWNrX3JlZ3MgOiAwOwotI2VuZGlmCi0JZC0+cmVnID0gYWxsb2NfYm9vdG1lbShkLT5ucl9yZWcgKiBzaXplb2YoKmQtPnJlZykpOwotI2lmZGVmIENPTkZJR19TTVAKLQlkLT5zbXAgPSBhbGxvY19ib290bWVtKGQtPm5yX3JlZyAqIHNpemVvZigqZC0+c21wKSk7Ci0jZW5kaWYKLQlrID0gMDsKLQotCWlmIChkZXNjLT5tYXNrX3JlZ3MpIHsKLQkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX21hc2tfcmVnczsgaSsrKSB7Ci0JCQlzbXAgPSBJU19TTVAoZGVzYy0+bWFza19yZWdzW2ldKTsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+bWFza19yZWdzW2ldLnNldF9yZWcsIHNtcCk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPm1hc2tfcmVnc1tpXS5jbHJfcmVnLCBzbXApOwotCQl9Ci0JfQotCi0JaWYgKGRlc2MtPnByaW9fcmVncykgewotCQlkLT5wcmlvID0gYWxsb2NfYm9vdG1lbShkZXNjLT5ucl92ZWN0b3JzICogc2l6ZW9mKCpkLT5wcmlvKSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ByaW9fcmVnczsgaSsrKSB7Ci0JCQlzbXAgPSBJU19TTVAoZGVzYy0+cHJpb19yZWdzW2ldKTsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+cHJpb19yZWdzW2ldLnNldF9yZWcsIHNtcCk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPnByaW9fcmVnc1tpXS5jbHJfcmVnLCBzbXApOwotCQl9Ci0JfQotCi0JaWYgKGRlc2MtPnNlbnNlX3JlZ3MpIHsKLQkJZC0+c2Vuc2UgPSBhbGxvY19ib290bWVtKGRlc2MtPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnNlbnNlKSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3NlbnNlX3JlZ3M7IGkrKykgewotCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5zZW5zZV9yZWdzW2ldLnJlZywgMCk7Ci0JCX0KLQl9Ci0KLQlkLT5jaGlwLm5hbWUgPSBkZXNjLT5uYW1lOwotCWQtPmNoaXAubWFzayA9IGludGNfZGlzYWJsZTsKLQlkLT5jaGlwLnVubWFzayA9IGludGNfZW5hYmxlOwotCWQtPmNoaXAubWFza19hY2sgPSBpbnRjX2Rpc2FibGU7Ci0JZC0+Y2hpcC5zZXRfdHlwZSA9IGludGNfc2V0X3NlbnNlOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0JaWYgKGRlc2MtPmFja19yZWdzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9hY2tfcmVnczsgaSsrKQotCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5hY2tfcmVnc1tpXS5zZXRfcmVnLCAwKTsKLQotCQlkLT5jaGlwLm1hc2tfYWNrID0gaW50Y19tYXNrX2FjazsKLQl9Ci0jZW5kaWYKLQotCUJVR19PTihrID4gMjU2KTsgLyogX0lOVENfQUREUl9FKCkgYW5kIF9JTlRDX0FERFJfRCgpIGFyZSA4IGJpdHMgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl92ZWN0b3JzOyBpKyspIHsKLQkJc3RydWN0IGludGNfdmVjdCAqdmVjdCA9IGRlc2MtPnZlY3RvcnMgKyBpOwotCi0JCWludGNfcmVnaXN0ZXJfaXJxKGRlc2MsIGQsIHZlY3QtPmVudW1faWQsIGV2dDJpcnEodmVjdC0+dmVjdCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2lwci5jCmluZGV4IDU2ZWE3YjIuLjNlYjE3ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pcHIuYwpAQCAtMzMsNyArMzMsNyBAQAogCXN0cnVjdCBpcHJfZGF0YSAqcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X2lwcl9kZXNjKGlycSktPmlwcl9vZmZzZXRzW3AtPmlwcl9pZHhdOwogCS8qIFNldCB0aGUgcHJpb3JpdHkgaW4gSVBSIHRvIDAgKi8KLQljdHJsX291dHcoY3RybF9pbncoYWRkcikgJiAoMHhmZmZmIF4gKDB4ZiA8PCBwLT5zaGlmdCkpLCBhZGRyKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoYWRkcikgJiAoMHhmZmZmIF4gKDB4ZiA8PCBwLT5zaGlmdCkpLCBhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTQxLDcgKzQxLDcgQEAKIAlzdHJ1Y3QgaXByX2RhdGEgKnAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9pcHJfZGVzYyhpcnEpLT5pcHJfb2Zmc2V0c1twLT5pcHJfaWR4XTsKIAkvKiBTZXQgcHJpb3JpdHkgaW4gSVBSIGJhY2sgdG8gb3JpZ2luYWwgdmFsdWUgKi8KLQljdHJsX291dHcoY3RybF9pbncoYWRkcikgfCAocC0+cHJpb3JpdHkgPDwgcC0+c2hpZnQpLCBhZGRyKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoYWRkcikgfCAocC0+cHJpb3JpdHkgPDwgcC0+c2hpZnQpLCBhZGRyKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKaW5kZXggMWFiMWVjZi4uNDI4NDUwYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKQEAgLTEyLDMgKzEyLDggQEAKIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMpCSs9IHNldHVwLXNoNzIwMy5vIGNsb2NrLXNoNzIwMy5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzKQkrPSBzZXR1cC1zaDcyMDMubyBjbG9jay1zaDcyMDMubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX01YRykJCSs9IHNldHVwLW14Zy5vIGNsb2NrLXNoNzIwNi5vCisKKyMgUGlubXV4IHNldHVwCitwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzKQk6PSBwaW5tdXgtc2g3MjAzLm8KKworb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gJChwaW5tdXgteSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3Bpbm11eC1zaDcyMDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3Bpbm11eC1zaDcyMDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWE1Yjg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvcGlubXV4LXNoNzIwMy5jCkBAIC0wLDAgKzEsMTU5OSBAQAorLyoKKyAqIFNINzIwMyBQaW5tdXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9zaDcyMDMuaD4KKworZW51bSB7CisJUElOTVVYX1JFU0VSVkVEID0gMCwKKworCVBJTk1VWF9EQVRBX0JFR0lOLAorCVBBN19EQVRBLCBQQTZfREFUQSwgUEE1X0RBVEEsIFBBNF9EQVRBLAorCVBBM19EQVRBLCBQQTJfREFUQSwgUEExX0RBVEEsIFBBMF9EQVRBLAorCVBCMTJfREFUQSwKKwlQQjExX0RBVEEsIFBCMTBfREFUQSwgUEI5X0RBVEEsIFBCOF9EQVRBLAorCVBCN19EQVRBLCBQQjZfREFUQSwgUEI1X0RBVEEsIFBCNF9EQVRBLAorCVBCM19EQVRBLCBQQjJfREFUQSwgUEIxX0RBVEEsIFBCMF9EQVRBLAorCVBDMTRfREFUQSwgUEMxM19EQVRBLCBQQzEyX0RBVEEsCisJUEMxMV9EQVRBLCBQQzEwX0RBVEEsIFBDOV9EQVRBLCBQQzhfREFUQSwKKwlQQzdfREFUQSwgUEM2X0RBVEEsIFBDNV9EQVRBLCBQQzRfREFUQSwKKwlQQzNfREFUQSwgUEMyX0RBVEEsIFBDMV9EQVRBLCBQQzBfREFUQSwKKwlQRDE1X0RBVEEsIFBEMTRfREFUQSwgUEQxM19EQVRBLCBQRDEyX0RBVEEsCisJUEQxMV9EQVRBLCBQRDEwX0RBVEEsIFBEOV9EQVRBLCBQRDhfREFUQSwKKwlQRDdfREFUQSwgUEQ2X0RBVEEsIFBENV9EQVRBLCBQRDRfREFUQSwKKwlQRDNfREFUQSwgUEQyX0RBVEEsIFBEMV9EQVRBLCBQRDBfREFUQSwKKwlQRTE1X0RBVEEsIFBFMTRfREFUQSwgUEUxM19EQVRBLCBQRTEyX0RBVEEsCisJUEUxMV9EQVRBLCBQRTEwX0RBVEEsIFBFOV9EQVRBLCBQRThfREFUQSwKKwlQRTdfREFUQSwgUEU2X0RBVEEsIFBFNV9EQVRBLCBQRTRfREFUQSwKKwlQRTNfREFUQSwgUEUyX0RBVEEsIFBFMV9EQVRBLCBQRTBfREFUQSwKKwlQRjMwX0RBVEEsIFBGMjlfREFUQSwgUEYyOF9EQVRBLAorCVBGMjdfREFUQSwgUEYyNl9EQVRBLCBQRjI1X0RBVEEsIFBGMjRfREFUQSwKKwlQRjIzX0RBVEEsIFBGMjJfREFUQSwgUEYyMV9EQVRBLCBQRjIwX0RBVEEsCisJUEYxOV9EQVRBLCBQRjE4X0RBVEEsIFBGMTdfREFUQSwgUEYxNl9EQVRBLAorCVBGMTVfREFUQSwgUEYxNF9EQVRBLCBQRjEzX0RBVEEsIFBGMTJfREFUQSwKKwlQRjExX0RBVEEsIFBGMTBfREFUQSwgUEY5X0RBVEEsIFBGOF9EQVRBLAorCVBGN19EQVRBLCBQRjZfREFUQSwgUEY1X0RBVEEsIFBGNF9EQVRBLAorCVBGM19EQVRBLCBQRjJfREFUQSwgUEYxX0RBVEEsIFBGMF9EQVRBLAorCVBJTk1VWF9EQVRBX0VORCwKKworCVBJTk1VWF9JTlBVVF9CRUdJTiwKKwlQQTdfSU4sIFBBNl9JTiwgUEE1X0lOLCBQQTRfSU4sCisJUEEzX0lOLCBQQTJfSU4sIFBBMV9JTiwgUEEwX0lOLAorCVBCMTFfSU4sIFBCMTBfSU4sIFBCOV9JTiwgUEI4X0lOLAorCVBCN19JTiwgUEI2X0lOLCBQQjVfSU4sIFBCNF9JTiwKKwlQQjNfSU4sIFBCMl9JTiwgUEIxX0lOLCBQQjBfSU4sCisJUEMxNF9JTiwgUEMxM19JTiwgUEMxMl9JTiwKKwlQQzExX0lOLCBQQzEwX0lOLCBQQzlfSU4sIFBDOF9JTiwKKwlQQzdfSU4sIFBDNl9JTiwgUEM1X0lOLCBQQzRfSU4sCisJUEMzX0lOLCBQQzJfSU4sIFBDMV9JTiwgUEMwX0lOLAorCVBEMTVfSU4sIFBEMTRfSU4sIFBEMTNfSU4sIFBEMTJfSU4sCisJUEQxMV9JTiwgUEQxMF9JTiwgUEQ5X0lOLCBQRDhfSU4sCisJUEQ3X0lOLCBQRDZfSU4sIFBENV9JTiwgUEQ0X0lOLAorCVBEM19JTiwgUEQyX0lOLCBQRDFfSU4sIFBEMF9JTiwKKwlQRTE1X0lOLCBQRTE0X0lOLCBQRTEzX0lOLCBQRTEyX0lOLAorCVBFMTFfSU4sIFBFMTBfSU4sIFBFOV9JTiwgUEU4X0lOLAorCVBFN19JTiwgUEU2X0lOLCBQRTVfSU4sIFBFNF9JTiwKKwlQRTNfSU4sIFBFMl9JTiwgUEUxX0lOLCBQRTBfSU4sCisJUEYzMF9JTiwgUEYyOV9JTiwgUEYyOF9JTiwKKwlQRjI3X0lOLCBQRjI2X0lOLCBQRjI1X0lOLCBQRjI0X0lOLAorCVBGMjNfSU4sIFBGMjJfSU4sIFBGMjFfSU4sIFBGMjBfSU4sCisJUEYxOV9JTiwgUEYxOF9JTiwgUEYxN19JTiwgUEYxNl9JTiwKKwlQRjE1X0lOLCBQRjE0X0lOLCBQRjEzX0lOLCBQRjEyX0lOLAorCVBGMTFfSU4sIFBGMTBfSU4sIFBGOV9JTiwgUEY4X0lOLAorCVBGN19JTiwgUEY2X0lOLCBQRjVfSU4sIFBGNF9JTiwKKwlQRjNfSU4sIFBGMl9JTiwgUEYxX0lOLCBQRjBfSU4sCisJUElOTVVYX0lOUFVUX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUEIxMl9PVVQsCisJUEIxMV9PVVQsIFBCMTBfT1VULCBQQjlfT1VULCBQQjhfT1VULAorCVBDMTRfT1VULCBQQzEzX09VVCwgUEMxMl9PVVQsCisJUEMxMV9PVVQsIFBDMTBfT1VULCBQQzlfT1VULCBQQzhfT1VULAorCVBDN19PVVQsIFBDNl9PVVQsIFBDNV9PVVQsIFBDNF9PVVQsCisJUEMzX09VVCwgUEMyX09VVCwgUEMxX09VVCwgUEMwX09VVCwKKwlQRDE1X09VVCwgUEQxNF9PVVQsIFBEMTNfT1VULCBQRDEyX09VVCwKKwlQRDExX09VVCwgUEQxMF9PVVQsIFBEOV9PVVQsIFBEOF9PVVQsCisJUEQ3X09VVCwgUEQ2X09VVCwgUEQ1X09VVCwgUEQ0X09VVCwKKwlQRDNfT1VULCBQRDJfT1VULCBQRDFfT1VULCBQRDBfT1VULAorCVBFMTVfT1VULCBQRTE0X09VVCwgUEUxM19PVVQsIFBFMTJfT1VULAorCVBFMTFfT1VULCBQRTEwX09VVCwgUEU5X09VVCwgUEU4X09VVCwKKwlQRTdfT1VULCBQRTZfT1VULCBQRTVfT1VULCBQRTRfT1VULAorCVBFM19PVVQsIFBFMl9PVVQsIFBFMV9PVVQsIFBFMF9PVVQsCisJUEYzMF9PVVQsIFBGMjlfT1VULCBQRjI4X09VVCwKKwlQRjI3X09VVCwgUEYyNl9PVVQsIFBGMjVfT1VULCBQRjI0X09VVCwKKwlQRjIzX09VVCwgUEYyMl9PVVQsIFBGMjFfT1VULCBQRjIwX09VVCwKKwlQRjE5X09VVCwgUEYxOF9PVVQsIFBGMTdfT1VULCBQRjE2X09VVCwKKwlQRjE1X09VVCwgUEYxNF9PVVQsIFBGMTNfT1VULCBQRjEyX09VVCwKKwlQRjExX09VVCwgUEYxMF9PVVQsIFBGOV9PVVQsIFBGOF9PVVQsCisJUEY3X09VVCwgUEY2X09VVCwgUEY1X09VVCwgUEY0X09VVCwKKwlQRjNfT1VULCBQRjJfT1VULCBQRjFfT1VULCBQRjBfT1VULAorCVBJTk1VWF9PVVRQVVRfRU5ELAorCisJUElOTVVYX0ZVTkNUSU9OX0JFR0lOLAorCVBCMTFfSU9SX0lOLCBQQjExX0lPUl9PVVQsCisJUEIxMF9JT1JfSU4sIFBCMTBfSU9SX09VVCwKKwlQQjlfSU9SX0lOLCBQQjlfSU9SX09VVCwKKwlQQjhfSU9SX0lOLCBQQjhfSU9SX09VVCwKKwlQQjEyTURfMDAsIFBCMTJNRF8wMSwgUEIxMk1EXzEwLCBQQjEyTURfMTEsCisJUEIxMU1EXzAsIFBCMTFNRF8xLAorCVBCMTBNRF8wLCBQQjEwTURfMSwKKwlQQjlNRF8wMCwgUEI5TURfMDEsIFBCOU1EXzEwLAorCVBCOE1EXzAwLCBQQjhNRF8wMSwgUEI4TURfMTAsCisJUEI3TURfMDAsIFBCN01EXzAxLCBQQjdNRF8xMCwgUEI3TURfMTEsCisJUEI2TURfMDAsIFBCNk1EXzAxLCBQQjZNRF8xMCwgUEI2TURfMTEsCisJUEI1TURfMDAsIFBCNU1EXzAxLCBQQjVNRF8xMCwgUEI1TURfMTEsCisJUEI0TURfMDAsIFBCNE1EXzAxLCBQQjRNRF8xMCwgUEI0TURfMTEsCisJUEIzTURfMDAsIFBCM01EXzAxLCBQQjNNRF8xMCwgUEIzTURfMTEsCisJUEIyTURfMDAsIFBCMk1EXzAxLCBQQjJNRF8xMCwgUEIyTURfMTEsCisJUEIxTURfMDAsIFBCMU1EXzAxLCBQQjFNRF8xMCwgUEIxTURfMTEsCisJUEIwTURfMDAsIFBCME1EXzAxLCBQQjBNRF8xMCwgUEIwTURfMTEsCisKKwlQQjEySVJRXzAwLCBQQjEySVJRXzAxLCBQQjEySVJRXzEwLAorCisJUEMxNE1EXzAsIFBDMTRNRF8xLAorCVBDMTNNRF8wLCBQQzEzTURfMSwKKwlQQzEyTURfMCwgUEMxMk1EXzEsCisJUEMxMU1EXzAwLCBQQzExTURfMDEsIFBDMTFNRF8xMCwKKwlQQzEwTURfMDAsIFBDMTBNRF8wMSwgUEMxME1EXzEwLAorCVBDOU1EXzAsIFBDOU1EXzEsCisJUEM4TURfMCwgUEM4TURfMSwKKwlQQzdNRF8wLCBQQzdNRF8xLAorCVBDNk1EXzAsIFBDNk1EXzEsCisJUEM1TURfMCwgUEM1TURfMSwKKwlQQzRNRF8wLCBQQzRNRF8xLAorCVBDM01EXzAsIFBDM01EXzEsCisJUEMyTURfMCwgUEMyTURfMSwKKwlQQzFNRF8wLCBQQzFNRF8xLAorCVBDME1EXzAwLCBQQzBNRF8wMSwgUEMwTURfMTAsCisKKwlQRDE1TURfMDAwLCBQRDE1TURfMDAxLCBQRDE1TURfMDEwLCBQRDE1TURfMTAwLCBQRDE1TURfMTAxLAorCVBEMTRNRF8wMDAsIFBEMTRNRF8wMDEsIFBEMTRNRF8wMTAsIFBEMTRNRF8xMDEsCisJUEQxM01EXzAwMCwgUEQxM01EXzAwMSwgUEQxM01EXzAxMCwgUEQxM01EXzEwMCwgUEQxM01EXzEwMSwKKwlQRDEyTURfMDAwLCBQRDEyTURfMDAxLCBQRDEyTURfMDEwLCBQRDEyTURfMTAwLCBQRDEyTURfMTAxLAorCVBEMTFNRF8wMDAsIFBEMTFNRF8wMDEsIFBEMTFNRF8wMTAsIFBEMTFNRF8xMDAsIFBEMTFNRF8xMDEsCisJUEQxME1EXzAwMCwgUEQxME1EXzAwMSwgUEQxME1EXzAxMCwgUEQxME1EXzEwMCwgUEQxME1EXzEwMSwKKwlQRDlNRF8wMDAsIFBEOU1EXzAwMSwgUEQ5TURfMDEwLCBQRDlNRF8xMDAsIFBEOU1EXzEwMSwKKwlQRDhNRF8wMDAsIFBEOE1EXzAwMSwgUEQ4TURfMDEwLCBQRDhNRF8xMDAsIFBEOE1EXzEwMSwKKwlQRDdNRF8wMDAsIFBEN01EXzAwMSwgUEQ3TURfMDEwLCBQRDdNRF8wMTEsIFBEN01EXzEwMCwgUEQ3TURfMTAxLAorCVBENk1EXzAwMCwgUEQ2TURfMDAxLCBQRDZNRF8wMTAsIFBENk1EXzAxMSwgUEQ2TURfMTAwLCBQRDZNRF8xMDEsCisJUEQ1TURfMDAwLCBQRDVNRF8wMDEsIFBENU1EXzAxMCwgUEQ1TURfMDExLCBQRDVNRF8xMDAsIFBENU1EXzEwMSwKKwlQRDRNRF8wMDAsIFBENE1EXzAwMSwgUEQ0TURfMDEwLCBQRDRNRF8wMTEsIFBENE1EXzEwMCwgUEQ0TURfMTAxLAorCVBEM01EXzAwMCwgUEQzTURfMDAxLCBQRDNNRF8wMTAsIFBEM01EXzAxMSwgUEQzTURfMTAwLCBQRDNNRF8xMDEsCisJUEQyTURfMDAwLCBQRDJNRF8wMDEsIFBEMk1EXzAxMCwgUEQyTURfMDExLCBQRDJNRF8xMDAsIFBEMk1EXzEwMSwKKwlQRDFNRF8wMDAsIFBEMU1EXzAwMSwgUEQxTURfMDEwLCBQRDFNRF8wMTEsIFBEMU1EXzEwMCwgUEQxTURfMTAxLAorCVBEME1EXzAwMCwgUEQwTURfMDAxLCBQRDBNRF8wMTAsIFBEME1EXzAxMSwgUEQwTURfMTAwLCBQRDBNRF8xMDEsCisKKwlQRTE1TURfMDAsIFBFMTVNRF8wMSwgUEUxNU1EXzExLAorCVBFMTRNRF8wMCwgUEUxNE1EXzAxLCBQRTE0TURfMTEsCisJUEUxM01EXzAwLCBQRTEzTURfMTEsCisJUEUxMk1EXzAwLCBQRTEyTURfMTEsCisJUEUxMU1EXzAwMCwgUEUxMU1EXzAwMSwgUEUxMU1EXzAxMCwgUEUxMU1EXzEwMCwKKwlQRTEwTURfMDAwLCBQRTEwTURfMDAxLCBQRTEwTURfMDEwLCBQRTEwTURfMTAwLAorCVBFOU1EXzAwLCBQRTlNRF8wMSwgUEU5TURfMTAsIFBFOU1EXzExLAorCVBFOE1EXzAwLCBQRThNRF8wMSwgUEU4TURfMTAsIFBFOE1EXzExLAorCVBFN01EXzAwMCwgUEU3TURfMDAxLCBQRTdNRF8wMTAsIFBFN01EXzAxMSwgUEU3TURfMTAwLAorCVBFNk1EXzAwMCwgUEU2TURfMDAxLCBQRTZNRF8wMTAsIFBFNk1EXzAxMSwgUEU2TURfMTAwLAorCVBFNU1EXzAwMCwgUEU1TURfMDAxLCBQRTVNRF8wMTAsIFBFNU1EXzAxMSwgUEU1TURfMTAwLAorCVBFNE1EXzAwMCwgUEU0TURfMDAxLCBQRTRNRF8wMTAsIFBFNE1EXzAxMSwgUEU0TURfMTAwLAorCVBFM01EXzAwLCBQRTNNRF8wMSwgUEUzTURfMTEsCisJUEUyTURfMDAsIFBFMk1EXzAxLCBQRTJNRF8xMSwKKwlQRTFNRF8wMCwgUEUxTURfMDEsIFBFMU1EXzEwLCBQRTFNRF8xMSwKKwlQRTBNRF8wMDAsIFBFME1EXzAwMSwgUEUwTURfMDExLCBQRTBNRF8xMDAsCisKKwlQRjMwTURfMCwgUEYzME1EXzEsCisJUEYyOU1EXzAsIFBGMjlNRF8xLAorCVBGMjhNRF8wLCBQRjI4TURfMSwKKwlQRjI3TURfMCwgUEYyN01EXzEsCisJUEYyNk1EXzAsIFBGMjZNRF8xLAorCVBGMjVNRF8wLCBQRjI1TURfMSwKKwlQRjI0TURfMCwgUEYyNE1EXzEsCisJUEYyM01EXzAwLCBQRjIzTURfMDEsIFBGMjNNRF8xMCwKKwlQRjIyTURfMDAsIFBGMjJNRF8wMSwgUEYyMk1EXzEwLAorCVBGMjFNRF8wMCwgUEYyMU1EXzAxLCBQRjIxTURfMTAsCisJUEYyME1EXzAwLCBQRjIwTURfMDEsIFBGMjBNRF8xMCwKKwlQRjE5TURfMDAsIFBGMTlNRF8wMSwgUEYxOU1EXzEwLAorCVBGMThNRF8wMCwgUEYxOE1EXzAxLCBQRjE4TURfMTAsCisJUEYxN01EXzAwLCBQRjE3TURfMDEsIFBGMTdNRF8xMCwKKwlQRjE2TURfMDAsIFBGMTZNRF8wMSwgUEYxNk1EXzEwLAorCVBGMTVNRF8wMCwgUEYxNU1EXzAxLCBQRjE1TURfMTAsCisJUEYxNE1EXzAwLCBQRjE0TURfMDEsIFBGMTRNRF8xMCwKKwlQRjEzTURfMDAsIFBGMTNNRF8wMSwgUEYxM01EXzEwLAorCVBGMTJNRF8wMCwgUEYxMk1EXzAxLCBQRjEyTURfMTAsCisJUEYxMU1EXzAwLCBQRjExTURfMDEsIFBGMTFNRF8xMCwKKwlQRjEwTURfMDAsIFBGMTBNRF8wMSwgUEYxME1EXzEwLAorCVBGOU1EXzAwLCBQRjlNRF8wMSwgUEY5TURfMTAsCisJUEY4TURfMDAsIFBGOE1EXzAxLCBQRjhNRF8xMCwKKwlQRjdNRF8wMCwgUEY3TURfMDEsIFBGN01EXzEwLCBQRjdNRF8xMSwKKwlQRjZNRF8wMCwgUEY2TURfMDEsIFBGNk1EXzEwLCBQRjZNRF8xMSwKKwlQRjVNRF8wMCwgUEY1TURfMDEsIFBGNU1EXzEwLCBQRjVNRF8xMSwKKwlQRjRNRF8wMCwgUEY0TURfMDEsIFBGNE1EXzEwLCBQRjRNRF8xMSwKKwlQRjNNRF8wMCwgUEYzTURfMDEsIFBGM01EXzEwLCBQRjNNRF8xMSwKKwlQRjJNRF8wMCwgUEYyTURfMDEsIFBGMk1EXzEwLCBQRjJNRF8xMSwKKwlQRjFNRF8wMCwgUEYxTURfMDEsIFBGMU1EXzEwLCBQRjFNRF8xMSwKKwlQRjBNRF8wMCwgUEYwTURfMDEsIFBGME1EXzEwLCBQRjBNRF8xMSwKKwlQSU5NVVhfRlVOQ1RJT05fRU5ELAorCisJUElOTVVYX01BUktfQkVHSU4sCisJUElOVDdfUEJfTUFSSywgUElOVDZfUEJfTUFSSywgUElOVDVfUEJfTUFSSywgUElOVDRfUEJfTUFSSywKKwlQSU5UM19QQl9NQVJLLCBQSU5UMl9QQl9NQVJLLCBQSU5UMV9QQl9NQVJLLCBQSU5UMF9QQl9NQVJLLAorCVBJTlQ3X1BEX01BUkssIFBJTlQ2X1BEX01BUkssIFBJTlQ1X1BEX01BUkssIFBJTlQ0X1BEX01BUkssCisJUElOVDNfUERfTUFSSywgUElOVDJfUERfTUFSSywgUElOVDFfUERfTUFSSywgUElOVDBfUERfTUFSSywKKwlJUlE3X1BCX01BUkssIElSUTZfUEJfTUFSSywgSVJRNV9QQl9NQVJLLCBJUlE0X1BCX01BUkssCisJSVJRM19QQl9NQVJLLCBJUlEyX1BCX01BUkssIElSUTFfUEJfTUFSSywgSVJRMF9QQl9NQVJLLAorCUlSUTdfUERfTUFSSywgSVJRNl9QRF9NQVJLLCBJUlE1X1BEX01BUkssIElSUTRfUERfTUFSSywKKwlJUlEzX1BEX01BUkssIElSUTJfUERfTUFSSywgSVJRMV9QRF9NQVJLLCBJUlEwX1BEX01BUkssCisJSVJRN19QRV9NQVJLLCBJUlE2X1BFX01BUkssIElSUTVfUEVfTUFSSywgSVJRNF9QRV9NQVJLLAorCUlSUTNfUEVfTUFSSywgSVJRMl9QRV9NQVJLLCBJUlExX1BFX01BUkssIElSUTBfUEVfTUFSSywKKwlXRFRPVkZfTUFSSywgSVJRT1VUX01BUkssIFJFRk9VVF9NQVJLLCBJUlFPVVRfUkVGT1VUX01BUkssCisJVUJDVFJHX01BUkssCisJQ1RYMV9NQVJLLCBDUlgxX01BUkssIENUWDBfTUFSSywgQ1RYMF9DVFgxX01BUkssCisJQ1JYMF9NQVJLLCBDUlgwX0NSWDFfTUFSSywKKwlTREEzX01BUkssIFNDTDNfTUFSSywKKwlTREEyX01BUkssIFNDTDJfTUFSSywKKwlTREExX01BUkssIFNDTDFfTUFSSywKKwlTREEwX01BUkssIFNDTDBfTUFSSywKKwlURU5EMF9QRF9NQVJLLCBURU5EMF9QRV9NQVJLLCBEQUNLMF9QRF9NQVJLLCBEQUNLMF9QRV9NQVJLLAorCURSRVEwX1BEX01BUkssIERSRVEwX1BFX01BUkssIFRFTkQxX1BEX01BUkssIFRFTkQxX1BFX01BUkssCisJREFDSzFfUERfTUFSSywgREFDSzFfUEVfTUFSSywgRFJFUTFfUERfTUFSSywgRFJFUTFfUEVfTUFSSywKKwlEQUNLMl9NQVJLLCBEUkVRMl9NQVJLLCBEQUNLM19NQVJLLCBEUkVRM19NQVJLLAorCUFEVFJHX1BEX01BUkssIEFEVFJHX1BFX01BUkssCisJRDMxX01BUkssIEQzMF9NQVJLLCBEMjlfTUFSSywgRDI4X01BUkssCisJRDI3X01BUkssIEQyNl9NQVJLLCBEMjVfTUFSSywgRDI0X01BUkssCisJRDIzX01BUkssIEQyMl9NQVJLLCBEMjFfTUFSSywgRDIwX01BUkssCisJRDE5X01BUkssIEQxOF9NQVJLLCBEMTdfTUFSSywgRDE2X01BUkssCisJQTI1X01BUkssIEEyNF9NQVJLLCBBMjNfTUFSSywgQTIyX01BUkssCisJQTIxX01BUkssIENTNF9NQVJLLCBNUkVTX01BUkssIEJTX01BUkssCisJSU9JUzE2X01BUkssIENTMV9NQVJLLCBDUzZfQ0UxQl9NQVJLLCBDRTJCX01BUkssCisJQ1M1X0NFMUFfTUFSSywgQ0UyQV9NQVJLLCBGUkFNRV9NQVJLLCBXQUlUX01BUkssCisJUkRXUl9NQVJLLCBDS0VfTUFSSywgQ0FTVV9NQVJLLAlCUkVRX01BUkssCisJUkFTVV9NQVJLLCBCQUNLX01BUkssIENBU0xfTUFSSywgUkFTTF9NQVJLLAorCVdFM19EUU1VVV9BSF9JQ0lPX1dSX01BUkssIFdFMl9EUU1VTF9JQ0lPUkRfTUFSSywKKwlXRTFfRFFNTFVfV0VfTUFSSywgV0UwX0RRTUxMX01BUkssCisJQ1MzX01BUkssIENTMl9NQVJLLCBBMV9NQVJLLCBBMF9NQVJLLCBDUzdfTUFSSywKKwlUSU9DNERfTUFSSywgVElPQzRDX01BUkssIFRJT0M0Ql9NQVJLLCBUSU9DNEFfTUFSSywKKwlUSU9DM0RfTUFSSywgVElPQzNDX01BUkssIFRJT0MzQl9NQVJLLCBUSU9DM0FfTUFSSywKKwlUSU9DMkJfTUFSSywgVElPQzFCX01BUkssIFRJT0MyQV9NQVJLLCBUSU9DMUFfTUFSSywKKwlUSU9DMERfTUFSSywgVElPQzBDX01BUkssIFRJT0MwQl9NQVJLLCBUSU9DMEFfTUFSSywKKwlUQ0xLRF9QRF9NQVJLLCBUQ0xLQ19QRF9NQVJLLCBUQ0xLQl9QRF9NQVJLLCBUQ0xLQV9QRF9NQVJLLAorCVRDTEtEX1BGX01BUkssIFRDTEtDX1BGX01BUkssIFRDTEtCX1BGX01BUkssIFRDTEtBX1BGX01BUkssCisJU0NTMF9QRF9NQVJLLCBTU08wX1BEX01BUkssIFNTSTBfUERfTUFSSywgU1NDSzBfUERfTUFSSywKKwlTQ1MwX1BGX01BUkssIFNTTzBfUEZfTUFSSywgU1NJMF9QRl9NQVJLLCBTU0NLMF9QRl9NQVJLLAorCVNDUzFfUERfTUFSSywgU1NPMV9QRF9NQVJLLCBTU0kxX1BEX01BUkssIFNTQ0sxX1BEX01BUkssCisJU0NTMV9QRl9NQVJLLCBTU08xX1BGX01BUkssIFNTSTFfUEZfTUFSSywgU1NDSzFfUEZfTUFSSywKKwlUWEQwX01BUkssIFJYRDBfTUFSSywgU0NLMF9NQVJLLAorCVRYRDFfTUFSSywgUlhEMV9NQVJLLCBTQ0sxX01BUkssCisJVFhEMl9NQVJLLCBSWEQyX01BUkssIFNDSzJfTUFSSywKKwlSVFMzX01BUkssIENUUzNfTUFSSywgVFhEM19NQVJLLAorCVJYRDNfTUFSSywgU0NLM19NQVJLLAorCUFVRElPX0NMS19NQVJLLAorCVNTSURBVEEzX01BUkssIFNTSVdTM19NQVJLLCBTU0lTQ0szX01BUkssCisJU1NJREFUQTJfTUFSSywgU1NJV1MyX01BUkssIFNTSVNDSzJfTUFSSywKKwlTU0lEQVRBMV9NQVJLLCBTU0lXUzFfTUFSSywgU1NJU0NLMV9NQVJLLAorCVNTSURBVEEwX01BUkssIFNTSVdTMF9NQVJLLCBTU0lTQ0swX01BUkssCisJRkNFX01BUkssIEZSQl9NQVJLLAorCU5BRjdfTUFSSywgTkFGNl9NQVJLLCBOQUY1X01BUkssIE5BRjRfTUFSSywKKwlOQUYzX01BUkssIE5BRjJfTUFSSywgTkFGMV9NQVJLLCBOQUYwX01BUkssCisJRlNDX01BUkssIEZPRV9NQVJLLCBGQ0RFX01BUkssIEZXRV9NQVJLLAorCUxDRF9WRVBXQ19NQVJLLCBMQ0RfVkNQV0NfTUFSSywJTENEX0NMS19NQVJLLCBMQ0RfRkxNX01BUkssCisJTENEX01fRElTUF9NQVJLLCBMQ0RfQ0wyX01BUkssIExDRF9DTDFfTUFSSywgTENEX0RPTl9NQVJLLAorCUxDRF9EQVRBMTVfTUFSSywgTENEX0RBVEExNF9NQVJLLCBMQ0RfREFUQTEzX01BUkssIExDRF9EQVRBMTJfTUFSSywKKwlMQ0RfREFUQTExX01BUkssIExDRF9EQVRBMTBfTUFSSywgTENEX0RBVEE5X01BUkssIExDRF9EQVRBOF9NQVJLLAorCUxDRF9EQVRBN19NQVJLLCBMQ0RfREFUQTZfTUFSSywgTENEX0RBVEE1X01BUkssIExDRF9EQVRBNF9NQVJLLAorCUxDRF9EQVRBM19NQVJLLCBMQ0RfREFUQTJfTUFSSywgTENEX0RBVEExX01BUkssIExDRF9EQVRBMF9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisKKwkvKiBQQSAqLworCVBJTk1VWF9EQVRBKFBBN19EQVRBLCBQQTdfSU4pLAorCVBJTk1VWF9EQVRBKFBBNl9EQVRBLCBQQTZfSU4pLAorCVBJTk1VWF9EQVRBKFBBNV9EQVRBLCBQQTVfSU4pLAorCVBJTk1VWF9EQVRBKFBBNF9EQVRBLCBQQTRfSU4pLAorCVBJTk1VWF9EQVRBKFBBM19EQVRBLCBQQTNfSU4pLAorCVBJTk1VWF9EQVRBKFBBMl9EQVRBLCBQQTJfSU4pLAorCVBJTk1VWF9EQVRBKFBBMV9EQVRBLCBQQTFfSU4pLAorCVBJTk1VWF9EQVRBKFBBMF9EQVRBLCBQQTBfSU4pLAorCisJLyogUEIgKi8KKwlQSU5NVVhfREFUQShQQjEyX0RBVEEsIFBCMTJNRF8wMCwgUEIxMl9PVVQpLAorCVBJTk1VWF9EQVRBKFdEVE9WRl9NQVJLLCBQQjEyTURfMDEpLAorCVBJTk1VWF9EQVRBKElSUU9VVF9NQVJLLCBQQjEyTURfMTAsIFBCMTJJUlFfMDApLAorCVBJTk1VWF9EQVRBKFJFRk9VVF9NQVJLLCBQQjEyTURfMTAsIFBCMTJJUlFfMDEpLAorCVBJTk1VWF9EQVRBKElSUU9VVF9SRUZPVVRfTUFSSywgUEIxMk1EXzEwLCBQQjEySVJRXzEwKSwKKwlQSU5NVVhfREFUQShVQkNUUkdfTUFSSywgUEIxMk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBCMTFfREFUQSwgUEIxMU1EXzAsIFBCMTFfSU4sIFBCMTFfT1VUKSwKKwlQSU5NVVhfREFUQShDVFgxX01BUkssIFBCMTFNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBCMTBfREFUQSwgUEIxME1EXzAsIFBCMTBfSU4sIFBCMTBfT1VUKSwKKwlQSU5NVVhfREFUQShDUlgxX01BUkssIFBCMTBNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBCOV9EQVRBLCBQQjlNRF8wMCwgUEI5X0lOLCBQQjlfT1VUKSwKKwlQSU5NVVhfREFUQShDVFgwX01BUkssIFBCOU1EXzAxKSwKKwlQSU5NVVhfREFUQShDVFgwX0NUWDFfTUFSSywgUEI5TURfMTApLAorCisJUElOTVVYX0RBVEEoUEI4X0RBVEEsIFBCOE1EXzAwLCBQQjhfSU4sIFBCOF9PVVQpLAorCVBJTk1VWF9EQVRBKENSWDBfTUFSSywgUEI4TURfMDEpLAorCVBJTk1VWF9EQVRBKENSWDBfQ1JYMV9NQVJLLCBQQjhNRF8xMCksCisKKwlQSU5NVVhfREFUQShQQjdfREFUQSwgUEI3TURfMDAsIFBCN19JTiksCisJUElOTVVYX0RBVEEoU0RBM19NQVJLLCBQQjdNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDdfUEJfTUFSSywgUEI3TURfMTApLAorCVBJTk1VWF9EQVRBKElSUTdfUEJfTUFSSywgUEI3TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEI2X0RBVEEsIFBCNk1EXzAwLCBQQjZfSU4pLAorCVBJTk1VWF9EQVRBKFNDTDNfTUFSSywgUEI2TURfMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQ2X1BCX01BUkssIFBCNk1EXzEwKSwKKwlQSU5NVVhfREFUQShJUlE2X1BCX01BUkssIFBCNk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBCNV9EQVRBLCBQQjVNRF8wMCwgUEI1X0lOKSwKKwlQSU5NVVhfREFUQShTREEyX01BUkssIFBCNk1EXzAxKSwKKwlQSU5NVVhfREFUQShQSU5UNV9QQl9NQVJLLCBQQjZNRF8xMCksCisJUElOTVVYX0RBVEEoSVJRNV9QQl9NQVJLLCBQQjZNRF8xMSksCisKKwlQSU5NVVhfREFUQShQQjRfREFUQSwgUEI0TURfMDAsIFBCNF9JTiksCisJUElOTVVYX0RBVEEoU0NMMl9NQVJLLCBQQjRNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDRfUEJfTUFSSywgUEI0TURfMTApLAorCVBJTk1VWF9EQVRBKElSUTRfUEJfTUFSSywgUEI0TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEIzX0RBVEEsIFBCM01EXzAwLCBQQjNfSU4pLAorCVBJTk1VWF9EQVRBKFNEQTFfTUFSSywgUEIzTURfMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQzX1BCX01BUkssIFBCM01EXzEwKSwKKwlQSU5NVVhfREFUQShJUlEzX1BCX01BUkssIFBCM01EXzExKSwKKworCVBJTk1VWF9EQVRBKFBCMl9EQVRBLCBQQjJNRF8wMCwgUEIyX0lOKSwKKwlQSU5NVVhfREFUQShTQ0wxX01BUkssIFBCMk1EXzAxKSwKKwlQSU5NVVhfREFUQShQSU5UMl9QQl9NQVJLLCBQQjJNRF8xMCksCisJUElOTVVYX0RBVEEoSVJRMl9QQl9NQVJLLCBQQjJNRF8xMSksCisKKwlQSU5NVVhfREFUQShQQjFfREFUQSwgUEIxTURfMDAsIFBCMV9JTiksCisJUElOTVVYX0RBVEEoU0RBMF9NQVJLLCBQQjFNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDFfUEJfTUFSSywgUEIxTURfMTApLAorCVBJTk1VWF9EQVRBKElSUTFfUEJfTUFSSywgUEIxTURfMTEpLAorCisJUElOTVVYX0RBVEEoUEIwX0RBVEEsIFBCME1EXzAwLCBQQjBfSU4pLAorCVBJTk1VWF9EQVRBKFNDTDBfTUFSSywgUEIwTURfMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQwX1BCX01BUkssIFBCME1EXzEwKSwKKwlQSU5NVVhfREFUQShJUlEwX1BCX01BUkssIFBCME1EXzExKSwKKworCS8qIFBDICovCisJUElOTVVYX0RBVEEoUEMxNF9EQVRBLCBQQzE0TURfMCwgUEMxNF9JTiwgUEMxNF9PVVQpLAorCVBJTk1VWF9EQVRBKFdBSVRfTUFSSywgUEMxNE1EXzEpLAorCisJUElOTVVYX0RBVEEoUEMxM19EQVRBLCBQQzEzTURfMCwgUEMxM19JTiwgUEMxM19PVVQpLAorCVBJTk1VWF9EQVRBKFJEV1JfTUFSSywgUEMxM01EXzEpLAorCisJUElOTVVYX0RBVEEoUEMxMl9EQVRBLCBQQzEyTURfMCwgUEMxMl9JTiwgUEMxMl9PVVQpLAorCVBJTk1VWF9EQVRBKENLRV9NQVJLLCBQQzEyTURfMSksCisKKwlQSU5NVVhfREFUQShQQzExX0RBVEEsIFBDMTFNRF8wMCwgUEMxMV9JTiwgUEMxMV9PVVQpLAorCVBJTk1VWF9EQVRBKENBU1VfTUFSSywgUEMxMU1EXzAxKSwKKwlQSU5NVVhfREFUQShCUkVRX01BUkssIFBDMTFNRF8xMCksCisKKwlQSU5NVVhfREFUQShQQzEwX0RBVEEsIFBDMTBNRF8wMCwgUEMxMF9JTiwgUEMxMF9PVVQpLAorCVBJTk1VWF9EQVRBKFJBU1VfTUFSSywgUEMxME1EXzAxKSwKKwlQSU5NVVhfREFUQShCQUNLX01BUkssIFBDMTBNRF8xMCksCisKKwlQSU5NVVhfREFUQShQQzlfREFUQSwgUEM5TURfMCwgUEM5X0lOLCBQQzlfT1VUKSwKKwlQSU5NVVhfREFUQShDQVNMX01BUkssIFBDOU1EXzEpLAorCisJUElOTVVYX0RBVEEoUEM4X0RBVEEsIFBDOE1EXzAsIFBDOF9JTiwgUEM4X09VVCksCisJUElOTVVYX0RBVEEoUkFTTF9NQVJLLCBQQzhNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDN19EQVRBLCBQQzdNRF8wLCBQQzdfSU4sIFBDN19PVVQpLAorCVBJTk1VWF9EQVRBKFdFM19EUU1VVV9BSF9JQ0lPX1dSX01BUkssIFBDN01EXzEpLAorCisJUElOTVVYX0RBVEEoUEM2X0RBVEEsIFBDNk1EXzAsIFBDNl9JTiwgUEM2X09VVCksCisJUElOTVVYX0RBVEEoV0UyX0RRTVVMX0lDSU9SRF9NQVJLLCBQQzZNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDNV9EQVRBLCBQQzVNRF8wLCBQQzVfSU4sIFBDNV9PVVQpLAorCVBJTk1VWF9EQVRBKFdFMV9EUU1MVV9XRV9NQVJLLCBQQzVNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDNF9EQVRBLCBQQzRNRF8wLCBQQzRfSU4sIFBDNF9PVVQpLAorCVBJTk1VWF9EQVRBKFdFMF9EUU1MTF9NQVJLLCBQQzRNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDM19EQVRBLCBQQzNNRF8wLCBQQzNfSU4sIFBDM19PVVQpLAorCVBJTk1VWF9EQVRBKENTM19NQVJLLCBQQzNNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDMl9EQVRBLCBQQzJNRF8wLCBQQzJfSU4sIFBDMl9PVVQpLAorCVBJTk1VWF9EQVRBKENTMl9NQVJLLCBQQzJNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDMV9EQVRBLCBQQzFNRF8wLCBQQzFfSU4sIFBDMV9PVVQpLAorCVBJTk1VWF9EQVRBKEExX01BUkssIFBDMU1EXzEpLAorCisJUElOTVVYX0RBVEEoUEMwX0RBVEEsIFBDME1EXzAwLCBQQzBfSU4sIFBDMF9PVVQpLAorCVBJTk1VWF9EQVRBKEEwX01BUkssIFBDME1EXzAxKSwKKwlQSU5NVVhfREFUQShDUzdfTUFSSywgUEMwTURfMTApLAorCisJLyogUEQgKi8KKwlQSU5NVVhfREFUQShQRDE1X0RBVEEsIFBEMTVNRF8wMDAsIFBEMTVfSU4sIFBEMTVfT1VUKSwKKwlQSU5NVVhfREFUQShEMzFfTUFSSywgUEQxNU1EXzAwMSksCisJUElOTVVYX0RBVEEoUElOVDdfUERfTUFSSywgUEQxNU1EXzAxMCksCisJUElOTVVYX0RBVEEoQURUUkdfUERfTUFSSywgUEQxNU1EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzREX01BUkssIFBEMTVNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQxNF9EQVRBLCBQRDE0TURfMDAwLCBQRDE0X0lOLCBQRDE0X09VVCksCisJUElOTVVYX0RBVEEoRDMwX01BUkssIFBEMTRNRF8wMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQ2X1BEX01BUkssIFBEMTRNRF8wMTApLAorCVBJTk1VWF9EQVRBKFRJT0M0Q19NQVJLLCBQRDE0TURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEMTNfREFUQSwgUEQxM01EXzAwMCwgUEQxM19JTiwgUEQxM19PVVQpLAorCVBJTk1VWF9EQVRBKEQyOV9NQVJLLCBQRDEzTURfMDAxKSwKKwlQSU5NVVhfREFUQShQSU5UNV9QRF9NQVJLLCBQRDEzTURfMDEwKSwKKwlQSU5NVVhfREFUQShURU5EMV9QRF9NQVJLLCBQRDEzTURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DNEJfTUFSSywgUEQxM01EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDEyX0RBVEEsIFBEMTJNRF8wMDAsIFBEMTJfSU4sIFBEMTJfT1VUKSwKKwlQSU5NVVhfREFUQShEMjhfTUFSSywgUEQxMk1EXzAwMSksCisJUElOTVVYX0RBVEEoUElOVDRfUERfTUFSSywgUEQxMk1EXzAxMCksCisJUElOTVVYX0RBVEEoREFDSzFfUERfTUFSSywgUEQxMk1EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzRBX01BUkssIFBEMTJNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQxMV9EQVRBLCBQRDExTURfMDAwLCBQRDExX0lOLCBQRDExX09VVCksCisJUElOTVVYX0RBVEEoRDI3X01BUkssIFBEMTFNRF8wMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQzX1BEX01BUkssIFBEMTFNRF8wMTApLAorCVBJTk1VWF9EQVRBKERSRVExX1BEX01BUkssIFBEMTFNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MzRF9NQVJLLCBQRDExTURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEMTBfREFUQSwgUEQxME1EXzAwMCwgUEQxMF9JTiwgUEQxMF9PVVQpLAorCVBJTk1VWF9EQVRBKEQyNl9NQVJLLCBQRDEwTURfMDAxKSwKKwlQSU5NVVhfREFUQShQSU5UMl9QRF9NQVJLLCBQRDEwTURfMDEwKSwKKwlQSU5NVVhfREFUQShURU5EMF9QRF9NQVJLLCBQRDEwTURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DM0NfTUFSSywgUEQxME1EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDlfREFUQSwgUEQ5TURfMDAwLCBQRDlfSU4sIFBEOV9PVVQpLAorCVBJTk1VWF9EQVRBKEQyNV9NQVJLLCBQRDlNRF8wMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQxX1BEX01BUkssIFBEOU1EXzAxMCksCisJUElOTVVYX0RBVEEoREFDSzBfUERfTUFSSywgUEQ5TURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DM0JfTUFSSywgUEQ5TURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEOF9EQVRBLCBQRDhNRF8wMDAsIFBEOF9JTiwgUEQ4X09VVCksCisJUElOTVVYX0RBVEEoRDI0X01BUkssIFBEOE1EXzAwMSksCisJUElOTVVYX0RBVEEoUElOVDBfUERfTUFSSywgUEQ4TURfMDEwKSwKKwlQSU5NVVhfREFUQShEUkVRMF9QRF9NQVJLLCBQRDhNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MzQV9NQVJLLCBQRDhNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQ3X0RBVEEsIFBEN01EXzAwMCwgUEQ3X0lOLCBQRDdfT1VUKSwKKwlQSU5NVVhfREFUQShEMjNfTUFSSywgUEQ3TURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlE3X1BEX01BUkssIFBEN01EXzAxMCksCisJUElOTVVYX0RBVEEoU0NTMV9QRF9NQVJLLCBQRDdNRF8wMTEpLAorCVBJTk1VWF9EQVRBKFRDTEtEX1BEX01BUkssIFBEN01EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzJCX01BUkssIFBEN01EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDZfREFUQSwgUEQ2TURfMDAwLCBQRDZfSU4sIFBENl9PVVQpLAorCVBJTk1VWF9EQVRBKEQyMl9NQVJLLCBQRDZNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTZfUERfTUFSSywgUEQ2TURfMDEwKSwKKwlQSU5NVVhfREFUQShTU08xX1BEX01BUkssIFBENk1EXzAxMSksCisJUElOTVVYX0RBVEEoVENMS0NfUERfTUFSSywgUEQ2TURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DMkFfTUFSSywgUEQ2TURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBENV9EQVRBLCBQRDVNRF8wMDAsIFBENV9JTiwgUEQ1X09VVCksCisJUElOTVVYX0RBVEEoRDIxX01BUkssIFBENU1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRNV9QRF9NQVJLLCBQRDVNRF8wMTApLAorCVBJTk1VWF9EQVRBKFNTSTFfUERfTUFSSywgUEQ1TURfMDExKSwKKwlQSU5NVVhfREFUQShUQ0xLQl9QRF9NQVJLLCBQRDVNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MxQl9NQVJLLCBQRDVNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQ0X0RBVEEsIFBENE1EXzAwMCwgUEQ0X0lOLCBQRDRfT1VUKSwKKwlQSU5NVVhfREFUQShEMjBfTUFSSywgUEQ0TURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlE0X1BEX01BUkssIFBENE1EXzAxMCksCisJUElOTVVYX0RBVEEoU1NDSzFfUERfTUFSSywgUEQ0TURfMDExKSwKKwlQSU5NVVhfREFUQShUQ0xLQV9QRF9NQVJLLCBQRDRNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MxQV9NQVJLLCBQRDRNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQzX0RBVEEsIFBEM01EXzAwMCwgUEQzX0lOLCBQRDNfT1VUKSwKKwlQSU5NVVhfREFUQShEMTlfTUFSSywgUEQzTURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlEzX1BEX01BUkssIFBEM01EXzAxMCksCisJUElOTVVYX0RBVEEoU0NTMF9QRF9NQVJLLCBQRDNNRF8wMTEpLAorCVBJTk1VWF9EQVRBKERBQ0szX01BUkssIFBEM01EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzBEX01BUkssIFBEM01EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDJfREFUQSwgUEQyTURfMDAwLCBQRDJfSU4sIFBEMl9PVVQpLAorCVBJTk1VWF9EQVRBKEQxOF9NQVJLLCBQRDJNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTJfUERfTUFSSywgUEQyTURfMDEwKSwKKwlQSU5NVVhfREFUQShTU08wX1BEX01BUkssIFBEMk1EXzAxMSksCisJUElOTVVYX0RBVEEoRFJFUTNfTUFSSywgUEQyTURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DMENfTUFSSywgUEQyTURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEMV9EQVRBLCBQRDFNRF8wMDAsIFBEMV9JTiwgUEQxX09VVCksCisJUElOTVVYX0RBVEEoRDE3X01BUkssIFBEMU1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRMV9QRF9NQVJLLCBQRDFNRF8wMTApLAorCVBJTk1VWF9EQVRBKFNTSTBfUERfTUFSSywgUEQxTURfMDExKSwKKwlQSU5NVVhfREFUQShEQUNLMl9NQVJLLCBQRDFNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MwQl9NQVJLLCBQRDFNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQwX0RBVEEsIFBEME1EXzAwMCwgUEQwX0lOLCBQRDBfT1VUKSwKKwlQSU5NVVhfREFUQShEMTZfTUFSSywgUEQwTURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlEwX1BEX01BUkssIFBEME1EXzAxMCksCisJUElOTVVYX0RBVEEoU1NDSzBfUERfTUFSSywgUEQwTURfMDExKSwKKwlQSU5NVVhfREFUQShEUkVRMl9NQVJLLCBQRDBNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MwQV9NQVJLLCBQRDBNRF8xMDEpLAorCisJLyogUEUgKi8KKwlQSU5NVVhfREFUQShQRTE1X0RBVEEsIFBFMTVNRF8wMCwgUEUxNV9JTiwgUEUxNV9PVVQpLAorCVBJTk1VWF9EQVRBKElPSVMxNl9NQVJLLCBQRTE1TURfMDEpLAorCVBJTk1VWF9EQVRBKFJUUzNfTUFSSywgUEUxNU1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBFMTRfREFUQSwgUEUxNE1EXzAwLCBQRTE0X0lOLCBQRTE0X09VVCksCisJUElOTVVYX0RBVEEoQ1MxX01BUkssIFBFMTRNRF8wMSksCisJUElOTVVYX0RBVEEoQ1RTM19NQVJLLCBQRTE0TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEUxM19EQVRBLCBQRTEzTURfMDAsIFBFMTNfSU4sIFBFMTNfT1VUKSwKKwlQSU5NVVhfREFUQShUWEQzX01BUkssIFBFMTNNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRTEyX0RBVEEsIFBFMTJNRF8wMCwgUEUxMl9JTiwgUEUxMl9PVVQpLAorCVBJTk1VWF9EQVRBKFJYRDNfTUFSSywgUEUxMk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBFMTFfREFUQSwgUEUxMU1EXzAwMCwgUEUxMV9JTiwgUEUxMV9PVVQpLAorCVBJTk1VWF9EQVRBKENTNl9DRTFCX01BUkssIFBFMTFNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTdfUEVfTUFSSywgUEUxMU1EXzAxMCksCisJUElOTVVYX0RBVEEoVEVORDFfUEVfTUFSSywgUEUxMU1EXzEwMCksCisKKwlQSU5NVVhfREFUQShQRTEwX0RBVEEsIFBFMTBNRF8wMDAsIFBFMTBfSU4sIFBFMTBfT1VUKSwKKwlQSU5NVVhfREFUQShDRTJCX01BUkssIFBFMTBNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTZfUEVfTUFSSywgUEUxME1EXzAxMCksCisJUElOTVVYX0RBVEEoVEVORDBfUEVfTUFSSywgUEUxME1EXzEwMCksCisKKwlQSU5NVVhfREFUQShQRTlfREFUQSwgUEU5TURfMDAsIFBFOV9JTiwgUEU5X09VVCksCisJUElOTVVYX0RBVEEoQ1M1X0NFMUFfTUFSSywgUEU5TURfMDEpLAorCVBJTk1VWF9EQVRBKElSUTVfUEVfTUFSSywgUEU5TURfMTApLAorCVBJTk1VWF9EQVRBKFNDSzNfTUFSSywgUEU5TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEU4X0RBVEEsIFBFOE1EXzAwLCBQRThfSU4sIFBFOF9PVVQpLAorCVBJTk1VWF9EQVRBKENFMkFfTUFSSywgUEU4TURfMDEpLAorCVBJTk1VWF9EQVRBKElSUTRfUEVfTUFSSywgUEU4TURfMTApLAorCVBJTk1VWF9EQVRBKFNDSzJfTUFSSywgUEU4TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEU3X0RBVEEsIFBFN01EXzAwMCwgUEU3X0lOLCBQRTdfT1VUKSwKKwlQSU5NVVhfREFUQShGUkFNRV9NQVJLLCBQRTdNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTNfUEVfTUFSSywgUEU3TURfMDEwKSwKKwlQSU5NVVhfREFUQShUWEQyX01BUkssIFBFN01EXzAxMSksCisJUElOTVVYX0RBVEEoREFDSzFfUEVfTUFSSywgUEU3TURfMTAwKSwKKworCVBJTk1VWF9EQVRBKFBFNl9EQVRBLCBQRTZNRF8wMDAsIFBFNl9JTiwgUEU2X09VVCksCisJUElOTVVYX0RBVEEoQTI1X01BUkssIFBFNk1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRMl9QRV9NQVJLLCBQRTZNRF8wMTApLAorCVBJTk1VWF9EQVRBKFJYRDJfTUFSSywgUEU2TURfMDExKSwKKwlQSU5NVVhfREFUQShEUkVRMV9QRV9NQVJLLCBQRTZNRF8xMDApLAorCisJUElOTVVYX0RBVEEoUEU1X0RBVEEsIFBFNU1EXzAwMCwgUEU1X0lOLCBQRTVfT1VUKSwKKwlQSU5NVVhfREFUQShBMjRfTUFSSywgUEU1TURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlExX1BFX01BUkssIFBFNU1EXzAxMCksCisJUElOTVVYX0RBVEEoVFhEMV9NQVJLLCBQRTVNRF8wMTEpLAorCVBJTk1VWF9EQVRBKERBQ0swX1BFX01BUkssIFBFNU1EXzEwMCksCisKKwlQSU5NVVhfREFUQShQRTRfREFUQSwgUEU0TURfMDAwLCBQRTRfSU4sIFBFNF9PVVQpLAorCVBJTk1VWF9EQVRBKEEyM19NQVJLLCBQRTRNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTBfUEVfTUFSSywgUEU0TURfMDEwKSwKKwlQSU5NVVhfREFUQShSWEQxX01BUkssIFBFNE1EXzAxMSksCisJUElOTVVYX0RBVEEoRFJFUTBfUEVfTUFSSywgUEU0TURfMTAwKSwKKworCVBJTk1VWF9EQVRBKFBFM19EQVRBLCBQRTNNRF8wMCwgUEUzX0lOLCBQRTNfT1VUKSwKKwlQSU5NVVhfREFUQShBMjJfTUFSSywgUEUzTURfMDEpLAorCVBJTk1VWF9EQVRBKFNDSzFfTUFSSywgUEUzTURfMTEpLAorCisJUElOTVVYX0RBVEEoUEUyX0RBVEEsIFBFMk1EXzAwLCBQRTJfSU4sIFBFMl9PVVQpLAorCVBJTk1VWF9EQVRBKEEyMV9NQVJLLCBQRTJNRF8wMSksCisJUElOTVVYX0RBVEEoU0NLMF9NQVJLLCBQRTJNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRTFfREFUQSwgUEUxTURfMDAsIFBFMV9JTiwgUEUxX09VVCksCisJUElOTVVYX0RBVEEoQ1M0X01BUkssIFBFMU1EXzAxKSwKKwlQSU5NVVhfREFUQShNUkVTX01BUkssIFBFMU1EXzEwKSwKKwlQSU5NVVhfREFUQShUWEQwX01BUkssIFBFMU1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBFMF9EQVRBLCBQRTBNRF8wMDAsIFBFMF9JTiwgUEUwX09VVCksCisJUElOTVVYX0RBVEEoQlNfTUFSSywgUEUwTURfMDAxKSwKKwlQSU5NVVhfREFUQShSWEQwX01BUkssIFBFME1EXzAxMSksCisJUElOTVVYX0RBVEEoQURUUkdfUEVfTUFSSywgUEUwTURfMTAwKSwKKworCS8qIFBGICovCisJUElOTVVYX0RBVEEoUEYzMF9EQVRBLCBQRjMwTURfMCwgUEYzMF9JTiwgUEYzMF9PVVQpLAorCVBJTk1VWF9EQVRBKEFVRElPX0NMS19NQVJLLCBQRjMwTURfMSksCisKKwlQSU5NVVhfREFUQShQRjI5X0RBVEEsIFBGMjlNRF8wLCBQRjI5X0lOLCBQRjI5X09VVCksCisJUElOTVVYX0RBVEEoU1NJREFUQTNfTUFSSywgUEYyOU1EXzEpLAorCisJUElOTVVYX0RBVEEoUEYyOF9EQVRBLCBQRjI4TURfMCwgUEYyOF9JTiwgUEYyOF9PVVQpLAorCVBJTk1VWF9EQVRBKFNTSVdTM19NQVJLLCBQRjI4TURfMSksCisKKwlQSU5NVVhfREFUQShQRjI3X0RBVEEsIFBGMjdNRF8wLCBQRjI3X0lOLCBQRjI3X09VVCksCisJUElOTVVYX0RBVEEoU1NJU0NLM19NQVJLLCBQRjI3TURfMSksCisKKwlQSU5NVVhfREFUQShQRjI2X0RBVEEsIFBGMjZNRF8wLCBQRjI2X0lOLCBQRjI2X09VVCksCisJUElOTVVYX0RBVEEoU1NJREFUQTJfTUFSSywgUEYyNk1EXzEpLAorCisJUElOTVVYX0RBVEEoUEYyNV9EQVRBLCBQRjI1TURfMCwgUEYyNV9JTiwgUEYyNV9PVVQpLAorCVBJTk1VWF9EQVRBKFNTSVdTMl9NQVJLLCBQRjI1TURfMSksCisKKwlQSU5NVVhfREFUQShQRjI0X0RBVEEsIFBGMjRNRF8wLCBQRjI0X0lOLCBQRjI0X09VVCksCisJUElOTVVYX0RBVEEoU1NJU0NLMl9NQVJLLCBQRjI0TURfMSksCisKKwlQSU5NVVhfREFUQShQRjIzX0RBVEEsIFBGMjNNRF8wMCwgUEYyM19JTiwgUEYyM19PVVQpLAorCVBJTk1VWF9EQVRBKFNTSURBVEExX01BUkssIFBGMjNNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX1ZFUFdDX01BUkssIFBGMjNNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjIyX0RBVEEsIFBGMjJNRF8wMCwgUEYyMl9JTiwgUEYyMl9PVVQpLAorCVBJTk1VWF9EQVRBKFNTSVdTMV9NQVJLLCBQRjIyTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9WQ1BXQ19NQVJLLCBQRjIyTURfMTApLAorCisJUElOTVVYX0RBVEEoUEYyMV9EQVRBLCBQRjIxTURfMDAsIFBGMjFfSU4sIFBGMjFfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lTQ0sxX01BUkssIFBGMjFNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0NMS19NQVJLLCBQRjIxTURfMTApLAorCisJUElOTVVYX0RBVEEoUEYyMF9EQVRBLCBQRjIwTURfMDAsIFBGMjBfSU4sIFBGMjBfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lEQVRBMF9NQVJLLCBQRjIwTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9GTE1fTUFSSywgUEYyME1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTlfREFUQSwgUEYxOU1EXzAwLCBQRjE5X0lOLCBQRjE5X09VVCksCisJUElOTVVYX0RBVEEoU1NJV1MwX01BUkssIFBGMTlNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX01fRElTUF9NQVJLLCBQRjE5TURfMTApLAorCisJUElOTVVYX0RBVEEoUEYxOF9EQVRBLCBQRjE4TURfMDAsIFBGMThfSU4sIFBGMThfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lTQ0swX01BUkssIFBGMThNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0NMMl9NQVJLLCBQRjE4TURfMTApLAorCisJUElOTVVYX0RBVEEoUEYxN19EQVRBLCBQRjE3TURfMDAsIFBGMTdfSU4sIFBGMTdfT1VUKSwKKwlQSU5NVVhfREFUQShGQ0VfTUFSSywgUEYxN01EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfQ0wxX01BUkssIFBGMTdNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjE2X0RBVEEsIFBGMTZNRF8wMCwgUEYxNl9JTiwgUEYxNl9PVVQpLAorCVBJTk1VWF9EQVRBKEZSQl9NQVJLLCBQRjE2TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9ET05fTUFSSywgUEYxNk1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTVfREFUQSwgUEYxNU1EXzAwLCBQRjE1X0lOLCBQRjE1X09VVCksCisJUElOTVVYX0RBVEEoTkFGN19NQVJLLCBQRjE1TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTVfTUFSSywgUEYxNU1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTRfREFUQSwgUEYxNE1EXzAwLCBQRjE0X0lOLCBQRjE0X09VVCksCisJUElOTVVYX0RBVEEoTkFGNl9NQVJLLCBQRjE0TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTRfTUFSSywgUEYxNE1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTNfREFUQSwgUEYxM01EXzAwLCBQRjEzX0lOLCBQRjEzX09VVCksCisJUElOTVVYX0RBVEEoTkFGNV9NQVJLLCBQRjEzTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTNfTUFSSywgUEYxM01EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTJfREFUQSwgUEYxMk1EXzAwLCBQRjEyX0lOLCBQRjEyX09VVCksCisJUElOTVVYX0RBVEEoTkFGNF9NQVJLLCBQRjEyTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTJfTUFSSywgUEYxMk1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTFfREFUQSwgUEYxMU1EXzAwLCBQRjExX0lOLCBQRjExX09VVCksCisJUElOTVVYX0RBVEEoTkFGM19NQVJLLCBQRjExTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTFfTUFSSywgUEYxMU1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTBfREFUQSwgUEYxME1EXzAwLCBQRjEwX0lOLCBQRjEwX09VVCksCisJUElOTVVYX0RBVEEoTkFGMl9NQVJLLCBQRjEwTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTBfTUFSSywgUEYxME1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGOV9EQVRBLCBQRjlNRF8wMCwgUEY5X0lOLCBQRjlfT1VUKSwKKwlQSU5NVVhfREFUQShOQUYxX01BUkssIFBGOU1EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTlfTUFSSywgUEY5TURfMTApLAorCisJUElOTVVYX0RBVEEoUEY4X0RBVEEsIFBGOE1EXzAwLCBQRjhfSU4sIFBGOF9PVVQpLAorCVBJTk1VWF9EQVRBKE5BRjBfTUFSSywgUEY4TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBOF9NQVJLLCBQRjhNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjdfREFUQSwgUEY3TURfMDAsIFBGN19JTiwgUEY3X09VVCksCisJUElOTVVYX0RBVEEoRlNDX01BUkssIFBGN01EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTdfTUFSSywgUEY3TURfMTApLAorCVBJTk1VWF9EQVRBKFNDUzFfUEZfTUFSSywgUEY3TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEY2X0RBVEEsIFBGNk1EXzAwLCBQRjZfSU4sIFBGNl9PVVQpLAorCVBJTk1VWF9EQVRBKEZPRV9NQVJLLCBQRjZNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEE2X01BUkssIFBGNk1EXzEwKSwKKwlQSU5NVVhfREFUQShTU08xX1BGX01BUkssIFBGNk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBGNV9EQVRBLCBQRjVNRF8wMCwgUEY1X0lOLCBQRjVfT1VUKSwKKwlQSU5NVVhfREFUQShGQ0RFX01BUkssIFBGNU1EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTVfTUFSSywgUEY1TURfMTApLAorCVBJTk1VWF9EQVRBKFNTSTFfUEZfTUFSSywgUEY1TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEY0X0RBVEEsIFBGNE1EXzAwLCBQRjRfSU4sIFBGNF9PVVQpLAorCVBJTk1VWF9EQVRBKEZXRV9NQVJLLCBQRjRNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEE0X01BUkssIFBGNE1EXzEwKSwKKwlQSU5NVVhfREFUQShTU0NLMV9QRl9NQVJLLCBQRjRNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjNfREFUQSwgUEYzTURfMDAsIFBGM19JTiwgUEYzX09VVCksCisJUElOTVVYX0RBVEEoVENMS0RfUEZfTUFSSywgUEYzTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBM19NQVJLLCBQRjNNRF8xMCksCisJUElOTVVYX0RBVEEoU0NTMF9QRl9NQVJLLCBQRjNNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjJfREFUQSwgUEYyTURfMDAsIFBGMl9JTiwgUEYyX09VVCksCisJUElOTVVYX0RBVEEoVENMS0NfUEZfTUFSSywgUEYyTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMl9NQVJLLCBQRjJNRF8xMCksCisJUElOTVVYX0RBVEEoU1NPMF9QRl9NQVJLLCBQRjJNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjFfREFUQSwgUEYxTURfMDAsIFBGMV9JTiwgUEYxX09VVCksCisJUElOTVVYX0RBVEEoVENMS0JfUEZfTUFSSywgUEYxTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMV9NQVJLLCBQRjFNRF8xMCksCisJUElOTVVYX0RBVEEoU1NJMF9QRl9NQVJLLCBQRjFNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjBfREFUQSwgUEYwTURfMDAsIFBGMF9JTiwgUEYwX09VVCksCisJUElOTVVYX0RBVEEoVENMS0FfUEZfTUFSSywgUEYwTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMF9NQVJLLCBQRjBNRF8xMCksCisJUElOTVVYX0RBVEEoU1NDSzBfUEZfTUFSSywgUEYwTURfMTEpLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKworCS8qIFBBICovCisJUElOTVVYX0dQSU8oR1BJT19QQTcsIFBBN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBNiwgUEE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEE1LCBQQTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTQsIFBBNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMywgUEEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEEyLCBQQTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTEsIFBBMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMCwgUEEwX0RBVEEpLAorCisJLyogUEIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BCMTIsIFBCMTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjExLCBQQjExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIxMCwgUEIxMF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCOSwgUEI5X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI4LCBQQjhfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjcsIFBCN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCNiwgUEI2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI1LCBQQjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjQsIFBCNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMywgUEIzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIyLCBQQjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjEsIFBCMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMCwgUEIwX0RBVEEpLAorCisJLyogUEMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BDMTQsIFBDMTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzEzLCBQQzEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMxMiwgUEMxMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMTEsIFBDMTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzEwLCBQQzEwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM5LCBQQzlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzgsIFBDOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNywgUEM3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM2LCBQQzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzUsIFBDNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNCwgUEM0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMzLCBQQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzIsIFBDMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMSwgUEMxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMwLCBQQzBfREFUQSksCisKKwkvKiBQRCAqLworCVBJTk1VWF9HUElPKEdQSU9fUEQxNSwgUEQxNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMTQsIFBEMTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDEzLCBQRDEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQxMiwgUEQxMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMTEsIFBEMTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDEwLCBQRDEwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ5LCBQRDlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDgsIFBEOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENywgUEQ3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ2LCBQRDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDUsIFBENV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENCwgUEQ0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQzLCBQRDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDIsIFBEMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMSwgUEQxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQwLCBQRDBfREFUQSksCisKKwkvKiBQRSAqLworCVBJTk1VWF9HUElPKEdQSU9fUEUxNSwgUEUxNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMTQsIFBFMTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTEzLCBQRTEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEUxMiwgUEUxMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMTEsIFBFMTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTEwLCBQRTEwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEU5LCBQRTlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTgsIFBFOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFNywgUEU3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEU2LCBQRTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTUsIFBFNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFNCwgUEU0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEUzLCBQRTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTIsIFBFMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMSwgUEUxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEUwLCBQRTBfREFUQSksCisKKwkvKiBQRiAqLworCVBJTk1VWF9HUElPKEdQSU9fUEYzMCwgUEYzMF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjksIFBGMjlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjI4LCBQRjI4X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyNywgUEYyN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjYsIFBGMjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjI1LCBQRjI1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyNCwgUEYyNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjMsIFBGMjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjIyLCBQRjIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyMSwgUEYyMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjAsIFBGMjBfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjE5LCBQRjE5X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxOCwgUEYxOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMTcsIFBGMTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjE2LCBQRjE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxNSwgUEYxNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMTQsIFBGMTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjEzLCBQRjEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxMiwgUEYxMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMTEsIFBGMTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjEwLCBQRjEwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY5LCBQRjlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjgsIFBGOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNywgUEY3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY2LCBQRjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjUsIFBGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNCwgUEY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYzLCBQRjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjIsIFBGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMSwgUEYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYwLCBQRjBfREFUQSksCisKKwkvKiBJTlRDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UN19QQiwgUElOVDdfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNl9QQiwgUElOVDZfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNV9QQiwgUElOVDVfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNF9QQiwgUElOVDRfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UM19QQiwgUElOVDNfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMl9QQiwgUElOVDJfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMV9QQiwgUElOVDFfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMF9QQiwgUElOVDBfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UN19QRCwgUElOVDdfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNl9QRCwgUElOVDZfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNV9QRCwgUElOVDVfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNF9QRCwgUElOVDRfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UM19QRCwgUElOVDNfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMl9QRCwgUElOVDJfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMV9QRCwgUElOVDFfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMF9QRCwgUElOVDBfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE3X1BCLCBJUlE3X1BCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNl9QQiwgSVJRNl9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTVfUEIsIElSUTVfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE0X1BCLCBJUlE0X1BCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRM19QQiwgSVJRM19QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTJfUEIsIElSUTJfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlExX1BCLCBJUlExX1BCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMF9QQiwgSVJRMF9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTdfUEQsIElSUTdfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE2X1BELCBJUlE2X1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNV9QRCwgSVJRNV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTRfUEQsIElSUTRfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEzX1BELCBJUlEzX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMl9QRCwgSVJRMl9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTFfUEQsIElSUTFfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEwX1BELCBJUlEwX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRN19QRSwgSVJRN19QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTZfUEUsIElSUTZfUEVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE1X1BFLCBJUlE1X1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNF9QRSwgSVJRNF9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTNfUEUsIElSUTNfUEVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEyX1BFLCBJUlEyX1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMV9QRSwgSVJRMV9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTBfUEUsIElSUTBfUEVfTUFSSyksCisKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1dEVE9WRiwgV0RUT1ZGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRT1VULCBJUlFPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SRUZPVVQsIFJFRk9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUU9VVF9SRUZPVVQsIElSUU9VVF9SRUZPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VQkNUUkcsIFVCQ1RSR19NQVJLKSwKKworCS8qIENBTiAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1RYMSwgQ1RYMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NSWDEsIENSWDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DVFgwLCBDVFgwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1RYMF9DVFgxLCBDVFgwX0NUWDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUlgwLCBDUlgwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1JYMF9DUlgxLCBDUlgwX0NSWDFfTUFSSyksCisKKwkvKiBJSUMzICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREEzLCBTREEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NMMywgU0NMM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NEQTIsIFNEQTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0wyLCBTQ0wyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RBMSwgU0RBMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDTDEsIFNDTDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREEwLCBTREEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NMMCwgU0NMMF9NQVJLKSwKKworCS8qIERNQUMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RFTkQwX1BELCBURU5EMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RFTkQwX1BFLCBURU5EMF9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0swX1BELCBEQUNLMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0swX1BFLCBEQUNLMF9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEwX1BELCBEUkVRMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEwX1BFLCBEUkVRMF9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RFTkQxX1BELCBURU5EMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RFTkQxX1BFLCBURU5EMV9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0sxX1BELCBEQUNLMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0sxX1BFLCBEQUNLMV9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVExX1BELCBEUkVRMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVExX1BFLCBEUkVRMV9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0syLCBEQUNLMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEyLCBEUkVRMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0szLCBEQUNLM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEzLCBEUkVRM19NQVJLKSwKKworCS8qIEFEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQURUUkdfUEQsIEFEVFJHX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQURUUkdfUEUsIEFEVFJHX1BFX01BUkspLAorCisJLyogQlNDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMzEsIEQzMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QzMCwgRDMwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI5LCBEMjlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjgsIEQyOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNywgRDI3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI2LCBEMjZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjUsIEQyNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNCwgRDI0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIzLCBEMjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjIsIEQyMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyMSwgRDIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIwLCBEMjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTksIEQxOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxOCwgRDE4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDE3LCBEMTdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTYsIEQxNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyNSwgQTI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI0LCBBMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjMsIEEyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMiwgQTIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIxLCBBMjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzQsIENTNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01SRVMsIE1SRVNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CUywgQlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JT0lTMTYsIElPSVMxNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTMSwgQ1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M2X0NFMUIsIENTNl9DRTFCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0UyQiwgQ0UyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTNV9DRTFBLCBDUzVfQ0UxQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NFMkEsIENFMkFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GUkFNRSwgRlJBTUVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XQUlULCBXQUlUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUkRXUiwgUkRXUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NLRSwgQ0tFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0FTVSwgQ0FTVV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0JSRVEsIEJSRVFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SQVNVLCBSQVNVX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQkFDSywgQkFDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NBU0wsIENBU0xfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SQVNMLCBSQVNMX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fV0UzX0RRTVVVX0FIX0lDSU9fV1IsIFdFM19EUU1VVV9BSF9JQ0lPX1dSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fV0UyX0RRTVVMX0lDSU9SRCwgV0UyX0RRTVVMX0lDSU9SRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1dFMV9EUU1MVV9XRSwgV0UxX0RRTUxVX1dFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fV0UwX0RRTUxMLCBXRTBfRFFNTExfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzMsIENTM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTMiwgQ1MyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTEsIEExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTAsIEEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M3LCBDUzdfTUFSSyksCisKKwkvKiBUTVUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0M0RCwgVElPQzREX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzRDLCBUSU9DNENfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DNEIsIFRJT0M0Ql9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0M0QSwgVElPQzRBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzNELCBUSU9DM0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DM0MsIFRJT0MzQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MzQiwgVElPQzNCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzNBLCBUSU9DM0FfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DMkIsIFRJT0MyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MxQiwgVElPQzFCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzJBLCBUSU9DMkFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DMUEsIFRJT0MxQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MwRCwgVElPQzBEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzBDLCBUSU9DMENfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DMEIsIFRJT0MwQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MwQSwgVElPQzBBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0RfUEQsIFRDTEtEX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0NfUEQsIFRDTEtDX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0JfUEQsIFRDTEtCX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0FfUEQsIFRDTEtBX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0RfUEYsIFRDTEtEX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0NfUEYsIFRDTEtDX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0JfUEYsIFRDTEtCX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0FfUEYsIFRDTEtBX1BGX01BUkspLAorCisJLyogU1NVICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ1MwX1BELCBTQ1MwX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NPMF9QRCwgU1NPMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfUEQsIFNTSTBfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0NLMF9QRCwgU1NDSzBfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ1MwX1BGLCBTQ1MwX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NPMF9QRiwgU1NPMF9QRl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfUEYsIFNTSTBfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0NLMF9QRiwgU1NDSzBfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ1MxX1BELCBTQ1MxX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NPMV9QRCwgU1NPMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfUEQsIFNTSTFfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0NLMV9QRCwgU1NDSzFfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ1MxX1BGLCBTQ1MxX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NPMV9QRiwgU1NPMV9QRl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfUEYsIFNTSTFfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0NLMV9QRiwgU1NDSzFfUEZfTUFSSyksCisKKwkvKiBTQ0lGICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9UWEQwLCBUWEQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUlhEMCwgUlhEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSzAsIFNDSzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UWEQxLCBUWEQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUlhEMSwgUlhEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSzEsIFNDSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UWEQyLCBUWEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUlhEMiwgUlhEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSzIsIFNDSzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SVFMzLCBSVFMzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1RTMywgQ1RTM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RYRDMsIFRYRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SWEQzLCBSWEQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NLMywgU0NLM19NQVJLKSwKKworCS8qIFNTSSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVESU9fQ0xLLCBBVURJT19DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lEQVRBMywgU1NJREFUQTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lXUzMsIFNTSVdTM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVNDSzMsIFNTSVNDSzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lEQVRBMiwgU1NJREFUQTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lXUzIsIFNTSVdTMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVNDSzIsIFNTSVNDSzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lEQVRBMSwgU1NJREFUQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lXUzEsIFNTSVdTMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVNDSzEsIFNTSVNDSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lEQVRBMCwgU1NJREFUQTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lXUzAsIFNTSVdTMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVNDSzAsIFNTSVNDSzBfTUFSSyksCisKKwkvKiBGTENUTCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fRkNFLCBGQ0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GUkIsIEZSQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjcsIE5BRjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY2LCBOQUY2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGNSwgTkFGNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjQsIE5BRjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYzLCBOQUYzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMiwgTkFGMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjEsIE5BRjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYwLCBOQUYwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNDLCBGU0NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GT0UsIEZPRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZDREUsIEZDREVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GV0UsIEZXRV9NQVJLKSwKKworCS8qIExDREMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9WRVBXQywgTENEX1ZFUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX1ZDUFdDLCBMQ0RfVkNQV0NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfQ0xLLCBMQ0RfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0ZMTSwgTENEX0ZMTV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9NX0RJU1AsIExDRF9NX0RJU1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfQ0wyLCBMQ0RfQ0wyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0NMMSwgTENEX0NMMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9ET04sIExDRF9ET05fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTE1LCBMQ0RfREFUQTE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExNCwgTENEX0RBVEExNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTMsIExDRF9EQVRBMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTEyLCBMQ0RfREFUQTEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExMSwgTENEX0RBVEExMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTAsIExDRF9EQVRBMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTksIExDRF9EQVRBOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBOCwgTENEX0RBVEE4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE3LCBMQ0RfREFUQTdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTYsIExDRF9EQVRBNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBNSwgTENEX0RBVEE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE0LCBMQ0RfREFUQTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTMsIExDRF9EQVRBM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMiwgTENEX0RBVEEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExLCBMQ0RfREFUQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTAsIExDRF9EQVRBMF9NQVJLKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgcGlubXV4X2NvbmZpZ19yZWdzW10gPSB7CisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJJT1JMIiwgMHhmZmZlMzg4NiwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUEIxMV9JTiwgUEIxMV9PVVQsCisJCVBCMTBfSU4sIFBCMTBfT1VULAorCQlQQjlfSU4sIFBCOV9PVVQsCisJCVBCOF9JTiwgUEI4X09VVCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQkNSTDQiLCAweGZmZmUzODkwLCAxNiwgNCkgeworCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQjEyTURfMDAsIFBCMTJNRF8wMSwgUEIxMk1EXzEwLCBQQjEyTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJDUkwzIiwgMHhmZmZlMzg5MiwgMTYsIDQpIHsKKwkJUEIxMU1EXzAsIFBCMTFNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBCMTBNRF8wLCBQQjEwTURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQjlNRF8wMCwgUEI5TURfMDEsIFBCOU1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBCOE1EXzAwLCBQQjhNRF8wMSwgUEI4TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJDUkwyIiwgMHhmZmZlMzg5NCwgMTYsIDQpIHsKKwkJUEI3TURfMDAsIFBCN01EXzAxLCBQQjdNRF8xMCwgUEI3TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEI2TURfMDAsIFBCNk1EXzAxLCBQQjZNRF8xMCwgUEI2TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEI1TURfMDAsIFBCNU1EXzAxLCBQQjVNRF8xMCwgUEI1TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEI0TURfMDAsIFBCNE1EXzAxLCBQQjRNRF8xMCwgUEI0TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJDUkwxIiwgMHhmZmZlMzg5NiwgMTYsIDQpIHsKKwkJUEIzTURfMDAsIFBCM01EXzAxLCBQQjNNRF8xMCwgUEIzTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEIyTURfMDAsIFBCMk1EXzAxLCBQQjJNRF8xMCwgUEIyTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEIxTURfMDAsIFBCMU1EXzAxLCBQQjFNRF8xMCwgUEIxTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEIwTURfMDAsIFBCME1EXzAxLCBQQjBNRF8xMCwgUEIwTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiSUZDUiIsIDB4ZmZmZTM4YTIsIDE2LCA0KSB7CisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBCMTJJUlFfMDAsIFBCMTJJUlFfMDEsIFBCMTJJUlFfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENJT1JMIiwgMHhmZmZlMzkwNiwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJUEMxNF9JTiwgUEMxNF9PVVQsCisJCVBDMTNfSU4sIFBDMTNfT1VULAorCQlQQzEyX0lOLCBQQzEyX09VVCwKKwkJUEMxMV9JTiwgUEMxMV9PVVQsCisJCVBDMTBfSU4sIFBDMTBfT1VULAorCQlQQzlfSU4sIFBDOV9PVVQsCisJCVBDOF9JTiwgUEM4X09VVCwKKwkJUEM3X0lOLCBQQzdfT1VULAorCQlQQzZfSU4sIFBDNl9PVVQsCisJCVBDNV9JTiwgUEM1X09VVCwKKwkJUEM0X0lOLCBQQzRfT1VULAorCQlQQzNfSU4sIFBDM19PVVQsCisJCVBDMl9JTiwgUEMyX09VVCwKKwkJUEMxX0lOLCBQQzFfT1VULAorCQlQQzBfSU4sIFBDMF9PVVQgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUkw0IiwgMHhmZmZlMzkxMCwgMTYsIDQpIHsKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzE0TURfMCwgUEMxNE1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEMxM01EXzAsIFBDMTNNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDMTJNRF8wLCBQQzEyTURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSTDMiLCAweGZmZmUzOTEyLCAxNiwgNCkgeworCQlQQzExTURfMDAsIFBDMTFNRF8wMSwgUEMxMU1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDMTBNRF8wMCwgUEMxME1EXzAxLCBQQzEwTURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEM5TURfMCwgUEM5TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzhNRF8wLCBQQzhNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBDQ1JMMiIsIDB4ZmZmZTM5MTQsIDE2LCA0KSB7CisJCVBDN01EXzAsIFBDN01EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEM2TURfMCwgUEM2TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzVNRF8wLCBQQzVNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDNE1EXzAsIFBDNE1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUkwxIiwgMHhmZmZlMzkxNiwgMTYsIDQpIHsKKwkJUEMzTURfMCwgUEMzTURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzJNRF8wLCBQQzJNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDMU1EXzAsIFBDMU1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEMwTURfMDAsIFBDME1EXzAxLCBQQzBNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRElPUkwiLCAweGZmZmUzOTg2LCAxNiwgMSkgeworCQlQRDE1X0lOLCBQRDE1X09VVCwKKwkJUEQxNF9JTiwgUEQxNF9PVVQsCisJCVBEMTNfSU4sIFBEMTNfT1VULAorCQlQRDEyX0lOLCBQRDEyX09VVCwKKwkJUEQxMV9JTiwgUEQxMV9PVVQsCisJCVBEMTBfSU4sIFBEMTBfT1VULAorCQlQRDlfSU4sIFBEOV9PVVQsCisJCVBEOF9JTiwgUEQ4X09VVCwKKwkJUEQ3X0lOLCBQRDdfT1VULAorCQlQRDZfSU4sIFBENl9PVVQsCisJCVBENV9JTiwgUEQ1X09VVCwKKwkJUEQ0X0lOLCBQRDRfT1VULAorCQlQRDNfSU4sIFBEM19PVVQsCisJCVBEMl9JTiwgUEQyX09VVCwKKwkJUEQxX0lOLCBQRDFfT1VULAorCQlQRDBfSU4sIFBEMF9PVVQgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUERDUkw0IiwgMHhmZmZlMzk5MCwgMTYsIDQpIHsKKwkJUEQxNU1EXzAwMCwgUEQxNU1EXzAwMSwgUEQxNU1EXzAxMCwgMCwKKwkJUEQxNU1EXzEwMCwgUEQxNU1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDE0TURfMDAwLCBQRDE0TURfMDAxLCBQRDE0TURfMDEwLCAwLAorCQkwLCBQRDE0TURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBEMTNNRF8wMDAsIFBEMTNNRF8wMDEsIFBEMTNNRF8wMTAsIDAsCisJCVBEMTNNRF8xMDAsIFBEMTNNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQxMk1EXzAwMCwgUEQxMk1EXzAwMSwgUEQxMk1EXzAxMCwgMCwKKwkJUEQxMk1EXzEwMCwgUEQxMk1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSTDMiLCAweGZmZmUzOTkyLCAxNiwgNCkgeworCQlQRDExTURfMDAwLCBQRDExTURfMDAxLCBQRDExTURfMDEwLCAwLAorCQlQRDExTURfMTAwLCBQRDExTURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBEMTBNRF8wMDAsIFBEMTBNRF8wMDEsIFBEMTBNRF8wMTAsIDAsCisJCVBEMTBNRF8xMDAsIFBEMTBNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQ5TURfMDAwLCBQRDlNRF8wMDEsIFBEOU1EXzAxMCwgMCwKKwkJUEQ5TURfMTAwLCBQRDlNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQ4TURfMDAwLCBQRDhNRF8wMDEsIFBEOE1EXzAxMCwgMCwKKwkJUEQ4TURfMTAwLCBQRDhNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUERDUkwyIiwgMHhmZmZlMzk5NCwgMTYsIDQpIHsKKwkJUEQ3TURfMDAwLCBQRDdNRF8wMDEsIFBEN01EXzAxMCwgUEQ3TURfMDExLAorCQlQRDdNRF8xMDAsIFBEN01EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDZNRF8wMDAsIFBENk1EXzAwMSwgUEQ2TURfMDEwLCBQRDZNRF8wMTEsCisJCVBENk1EXzEwMCwgUEQ2TURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBENU1EXzAwMCwgUEQ1TURfMDAxLCBQRDVNRF8wMTAsIFBENU1EXzAxMSwKKwkJUEQ1TURfMTAwLCBQRDVNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQ0TURfMDAwLCBQRDRNRF8wMDEsIFBENE1EXzAxMCwgUEQ0TURfMDExLAorCQlQRDRNRF8xMDAsIFBENE1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSTDEiLCAweGZmZmUzOTk2LCAxNiwgNCkgeworCQlQRDNNRF8wMDAsIFBEM01EXzAwMSwgUEQzTURfMDEwLCBQRDNNRF8wMTEsCisJCVBEM01EXzEwMCwgUEQzTURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBEMk1EXzAwMCwgUEQyTURfMDAxLCBQRDJNRF8wMTAsIFBEMk1EXzAxMSwKKwkJUEQyTURfMTAwLCBQRDJNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQxTURfMDAwLCBQRDFNRF8wMDEsIFBEMU1EXzAxMCwgUEQxTURfMDExLAorCQlQRDFNRF8xMDAsIFBEMU1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDBNRF8wMDAsIFBEME1EXzAwMSwgUEQwTURfMDEwLCBQRDBNRF8wMTEsCisJCVBEME1EXzEwMCwgUEQwTURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFSU9STCIsIDB4ZmZmZTNhMDYsIDE2LCAxKSB7CisJCVBFMTVfSU4sIFBFMTVfT1VULAorCQlQRTE0X0lOLCBQRTE0X09VVCwKKwkJUEUxM19JTiwgUEUxM19PVVQsCisJCVBFMTJfSU4sIFBFMTJfT1VULAorCQlQRTExX0lOLCBQRTExX09VVCwKKwkJUEUxMF9JTiwgUEUxMF9PVVQsCisJCVBFOV9JTiwgUEU5X09VVCwKKwkJUEU4X0lOLCBQRThfT1VULAorCQlQRTdfSU4sIFBFN19PVVQsCisJCVBFNl9JTiwgUEU2X09VVCwKKwkJUEU1X0lOLCBQRTVfT1VULAorCQlQRTRfSU4sIFBFNF9PVVQsCisJCVBFM19JTiwgUEUzX09VVCwKKwkJUEUyX0lOLCBQRTJfT1VULAorCQlQRTFfSU4sIFBFMV9PVVQsCisJCVBFMF9JTiwgUEUwX09VVCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRUNSTDQiLCAweGZmZmUzYTEwLCAxNiwgNCkgeworCQlQRTE1TURfMDAsIFBFMTVNRF8wMSwgMCwgUEUxNU1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFMTRNRF8wMCwgUEUxNE1EXzAxLCAwLCBQRTE0TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEUxM01EXzAwLCAwLCAwLCBQRTEzTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEUxMk1EXzAwLCAwLCAwLCBQRTEyTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEVDUkwzIiwgMHhmZmZlM2ExMiwgMTYsIDQpIHsKKwkJUEUxMU1EXzAwMCwgUEUxMU1EXzAwMSwgUEUxMU1EXzAxMCwgMCwKKwkJUEUxMU1EXzEwMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRTEwTURfMDAwLCBQRTEwTURfMDAxLCBQRTEwTURfMDEwLCAwLAorCQlQRTEwTURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFOU1EXzAwLCBQRTlNRF8wMSwgUEU5TURfMTAsIFBFOU1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFOE1EXzAwLCBQRThNRF8wMSwgUEU4TURfMTAsIFBFOE1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1JMMiIsIDB4ZmZmZTNhMTQsIDE2LCA0KSB7CisJCVBFN01EXzAwMCwgUEU3TURfMDAxLCBQRTdNRF8wMTAsIFBFN01EXzAxMSwKKwkJUEU3TURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFNk1EXzAwMCwgUEU2TURfMDAxLCBQRTZNRF8wMTAsIFBFNk1EXzAxMSwKKwkJUEU2TURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFNU1EXzAwMCwgUEU1TURfMDAxLCBQRTVNRF8wMTAsIFBFNU1EXzAxMSwKKwkJUEU1TURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFNE1EXzAwMCwgUEU0TURfMDAxLCBQRTRNRF8wMTAsIFBFNE1EXzAxMSwKKwkJUEU0TURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1JMMSIsIDB4ZmZmZTNhMTYsIDE2LCA0KSB7CisJCVBFM01EXzAwLCBQRTNNRF8wMSwgMCwgUEUzTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEUyTURfMDAsIFBFMk1EXzAxLCAwLCBQRTJNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRTFNRF8wMCwgUEUxTURfMDEsIFBFMU1EXzEwLCBQRTFNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRTBNRF8wMDAsIFBFME1EXzAwMSwgMCwgUEUwTURfMDExLAorCQlQRTBNRF8xMDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZJT1JIIiwgMHhmZmZlM2E4NCwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJUEYzMF9JTiwgUEYzMF9PVVQsCisJCVBGMjlfSU4sIFBGMjlfT1VULAorCQlQRjI4X0lOLCBQRjI4X09VVCwKKwkJUEYyN19JTiwgUEYyN19PVVQsCisJCVBGMjZfSU4sIFBGMjZfT1VULAorCQlQRjI1X0lOLCBQRjI1X09VVCwKKwkJUEYyNF9JTiwgUEYyNF9PVVQsCisJCVBGMjNfSU4sIFBGMjNfT1VULAorCQlQRjIyX0lOLCBQRjIyX09VVCwKKwkJUEYyMV9JTiwgUEYyMV9PVVQsCisJCVBGMjBfSU4sIFBGMjBfT1VULAorCQlQRjE5X0lOLCBQRjE5X09VVCwKKwkJUEYxOF9JTiwgUEYxOF9PVVQsCisJCVBGMTdfSU4sIFBGMTdfT1VULAorCQlQRjE2X0lOLCBQRjE2X09VVCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRklPUkwiLCAweGZmZmUzYTg2LCAxNiwgMSkgeworCQlQRjE1X0lOLCBQRjE1X09VVCwKKwkJUEYxNF9JTiwgUEYxNF9PVVQsCisJCVBGMTNfSU4sIFBGMTNfT1VULAorCQlQRjEyX0lOLCBQRjEyX09VVCwKKwkJUEYxMV9JTiwgUEYxMV9PVVQsCisJCVBGMTBfSU4sIFBGMTBfT1VULAorCQlQRjlfSU4sIFBGOV9PVVQsCisJCVBGOF9JTiwgUEY4X09VVCwKKwkJUEY3X0lOLCBQRjdfT1VULAorCQlQRjZfSU4sIFBGNl9PVVQsCisJCVBGNV9JTiwgUEY1X09VVCwKKwkJUEY0X0lOLCBQRjRfT1VULAorCQlQRjNfSU4sIFBGM19PVVQsCisJCVBGMl9JTiwgUEYyX09VVCwKKwkJUEYxX0lOLCBQRjFfT1VULAorCQlQRjBfSU4sIFBGMF9PVVQgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUkg0IiwgMHhmZmZlM2E4OCwgMTYsIDQpIHsKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjMwTURfMCwgUEYzME1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYyOU1EXzAsIFBGMjlNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMjhNRF8wLCBQRjI4TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSSDMiLCAweGZmZmUzYThhLCAxNiwgNCkgeworCQlQRjI3TURfMCwgUEYyN01EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYyNk1EXzAsIFBGMjZNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMjVNRF8wLCBQRjI1TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjI0TURfMCwgUEYyNE1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUkgyIiwgMHhmZmZlM2E4YywgMTYsIDQpIHsKKwkJUEYyM01EXzAwLCBQRjIzTURfMDEsIFBGMjNNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjIyTURfMDAsIFBGMjJNRF8wMSwgUEYyMk1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMjFNRF8wMCwgUEYyMU1EXzAxLCBQRjIxTURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYyME1EXzAwLCBQRjIwTURfMDEsIFBGMjBNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSSDEiLCAweGZmZmUzYThlLCAxNiwgNCkgeworCQlQRjE5TURfMDAsIFBGMTlNRF8wMSwgUEYxOU1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMThNRF8wMCwgUEYxOE1EXzAxLCBQRjE4TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYxN01EXzAwLCBQRjE3TURfMDEsIFBGMTdNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjE2TURfMDAsIFBGMTZNRF8wMSwgUEYxNk1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBGQ1JMNCIsIDB4ZmZmZTNhOTAsIDE2LCA0KSB7CisJCVBGMTVNRF8wMCwgUEYxNU1EXzAxLCBQRjE1TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYxNE1EXzAwLCBQRjE0TURfMDEsIFBGMTRNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjEzTURfMDAsIFBGMTNNRF8wMSwgUEYxM01EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMTJNRF8wMCwgUEYxMk1EXzAxLCBQRjEyTURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUkwzIiwgMHhmZmZlM2E5MiwgMTYsIDQpIHsKKwkJUEYxMU1EXzAwLCBQRjExTURfMDEsIFBGMTFNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjEwTURfMDAsIFBGMTBNRF8wMSwgUEYxME1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGOU1EXzAwLCBQRjlNRF8wMSwgUEY5TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEY4TURfMDAsIFBGOE1EXzAxLCBQRjhNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSTDIiLCAweGZmZmUzYTk0LCAxNiwgNCkgeworCQlQRjdNRF8wMCwgUEY3TURfMDEsIFBGN01EXzEwLCBQRjdNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjZNRF8wMCwgUEY2TURfMDEsIFBGNk1EXzEwLCBQRjZNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjVNRF8wMCwgUEY1TURfMDEsIFBGNU1EXzEwLCBQRjVNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjRNRF8wMCwgUEY0TURfMDEsIFBGNE1EXzEwLCBQRjRNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSTDEiLCAweGZmZmUzYTk2LCAxNiwgNCkgeworCQlQRjNNRF8wMCwgUEYzTURfMDEsIFBGM01EXzEwLCBQRjNNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjJNRF8wMCwgUEYyTURfMDEsIFBGMk1EXzEwLCBQRjJNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjFNRF8wMCwgUEYxTURfMDEsIFBGMU1EXzEwLCBQRjFNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjBNRF8wMCwgUEYwTURfMDEsIFBGME1EXzEwLCBQRjBNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSTCIsIDB4ZmZmZTM4MDIsIDE2KSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBBN19EQVRBLCBQQTZfREFUQSwgUEE1X0RBVEEsIFBBNF9EQVRBLAorCQlQQTNfREFUQSwgUEEyX0RBVEEsIFBBMV9EQVRBLCBQQTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEJEUkwiLCAweGZmZmUzODgyLCAxNikgeworCQkwLCAwLCAwLCBQQjEyX0RBVEEsCisJCVBCMTFfREFUQSwgUEIxMF9EQVRBLCBQQjlfREFUQSwgUEI4X0RBVEEsCisJCVBCN19EQVRBLCBQQjZfREFUQSwgUEI1X0RBVEEsIFBCNF9EQVRBLAorCQlQQjNfREFUQSwgUEIyX0RBVEEsIFBCMV9EQVRBLCBQQjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUENEUkwiLCAweGZmZmUzOTAyLCAxNikgeworCQkwLCBQQzE0X0RBVEEsIFBDMTNfREFUQSwgUEMxMl9EQVRBLAorCQlQQzExX0RBVEEsIFBDMTBfREFUQSwgUEM5X0RBVEEsIFBDOF9EQVRBLAorCQlQQzdfREFUQSwgUEM2X0RBVEEsIFBDNV9EQVRBLCBQQzRfREFUQSwKKwkJUEMzX0RBVEEsIFBDMl9EQVRBLCBQQzFfREFUQSwgUEMwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBERFJMIiwgMHhmZmZlMzk4MiwgMTYpIHsKKwkJUEQxNV9EQVRBLCBQRDE0X0RBVEEsIFBEMTNfREFUQSwgUEQxMl9EQVRBLAorCQlQRDExX0RBVEEsIFBEMTBfREFUQSwgUEQ5X0RBVEEsIFBEOF9EQVRBLAorCQlQRDdfREFUQSwgUEQ2X0RBVEEsIFBENV9EQVRBLCBQRDRfREFUQSwKKwkJUEQzX0RBVEEsIFBEMl9EQVRBLCBQRDFfREFUQSwgUEQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBFRFJMIiwgMHhmZmZlM2EwMiwgMTYpIHsKKwkJUEUxNV9EQVRBLCBQRTE0X0RBVEEsIFBFMTNfREFUQSwgUEUxMl9EQVRBLAorCQlQRTExX0RBVEEsIFBFMTBfREFUQSwgUEU5X0RBVEEsIFBFOF9EQVRBLAorCQlQRTdfREFUQSwgUEU2X0RBVEEsIFBFNV9EQVRBLCBQRTRfREFUQSwKKwkJUEUzX0RBVEEsIFBFMl9EQVRBLCBQRTFfREFUQSwgUEUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBGRFJIIiwgMHhmZmZlM2E4MCwgMTYpIHsKKwkJMCwgUEYzMF9EQVRBLCBQRjI5X0RBVEEsIFBGMjhfREFUQSwKKwkJUEYyN19EQVRBLCBQRjI2X0RBVEEsIFBGMjVfREFUQSwgUEYyNF9EQVRBLAorCQlQRjIzX0RBVEEsIFBGMjJfREFUQSwgUEYyMV9EQVRBLCBQRjIwX0RBVEEsCisJCVBGMTlfREFUQSwgUEYxOF9EQVRBLCBQRjE3X0RBVEEsIFBGMTZfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEZEUkwiLCAweGZmZmUzYTgyLCAxNikgeworCQlQRjE1X0RBVEEsIFBGMTRfREFUQSwgUEYxM19EQVRBLCBQRjEyX0RBVEEsCisJCVBGMTFfREFUQSwgUEYxMF9EQVRBLCBQRjlfREFUQSwgUEY4X0RBVEEsCisJCVBGN19EQVRBLCBQRjZfREFUQSwgUEY1X0RBVEEsIFBGNF9EQVRBLAorCQlQRjNfREFUQSwgUEYyX0RBVEEsIFBGMV9EQVRBLCBQRjBfREFUQSB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvIHNoNzIwM19waW5tdXhfaW5mbyA9IHsKKwkubmFtZSA9ICJzaDcyMDNfcGZjIiwKKwkucmVzZXJ2ZWRfaWQgPSBQSU5NVVhfUkVTRVJWRUQsCisJLmRhdGEgPSB7IFBJTk1VWF9EQVRBX0JFR0lOLCBQSU5NVVhfREFUQV9FTkQgfSwKKwkuaW5wdXQgPSB7IFBJTk1VWF9JTlBVVF9CRUdJTiwgUElOTVVYX0lOUFVUX0VORCB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5EIH0sCisJLm1hcmsgPSB7IFBJTk1VWF9NQVJLX0JFR0lOLCBQSU5NVVhfTUFSS19FTkQgfSwKKwkuZnVuY3Rpb24gPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLmZpcnN0X2dwaW8gPSBHUElPX1BBNywKKwkubGFzdF9ncGlvID0gR1BJT19GTl9MQ0RfREFUQTAsCisKKwkuZ3Bpb3MgPSBwaW5tdXhfZ3Bpb3MsCisJLmNmZ19yZWdzID0gcGlubXV4X2NvbmZpZ19yZWdzLAorCS5kYXRhX3JlZ3MgPSBwaW5tdXhfZGF0YV9yZWdzLAorCisJLmdwaW9fZGF0YSA9IHBpbm11eF9kYXRhLAorCS5ncGlvX2RhdGFfc2l6ZSA9IEFSUkFZX1NJWkUocGlubXV4X2RhdGEpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGxhdF9waW5tdXhfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfcGlubXV4KCZzaDcyMDNfcGlubXV4X2luZm8pOworfQorCithcmNoX2luaXRjYWxsKHBsYXRfcGlubXV4X3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCmluZGV4IDUxMWRlNTUuLmUwN2M2OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQpAQCAtMjQsNCArMjQsOCBAQAogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKQk6PSBjbG9jay1zaDc3MTAubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyKQk6PSBjbG9jay1zaDc3MTIubwogCisjIFBpbm11eCBzZXR1cAorcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkJOj0gcGlubXV4LXNoNzcyMC5vCisKIG9iai15CSs9ICQoY2xvY2steSkKK29iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9ICQocGlubXV4LXkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Bpbm11eC1zaDc3MjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcGlubXV4LXNoNzcyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYTE1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Bpbm11eC1zaDc3MjAuYwpAQCAtMCwwICsxLDEyNDIgQEAKKy8qCisgKiBTSDc3MjAgUGlubXV4CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCAgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIwLmg+CisKK2VudW0geworCVBJTk1VWF9SRVNFUlZFRCA9IDAsCisKKwlQSU5NVVhfREFUQV9CRUdJTiwKKwlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJUFRBM19EQVRBLCBQVEEyX0RBVEEsIFBUQTFfREFUQSwgUFRBMF9EQVRBLAorCVBUQjdfREFUQSwgUFRCNl9EQVRBLCBQVEI1X0RBVEEsIFBUQjRfREFUQSwKKwlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEsCisJUFRDN19EQVRBLCBQVEM2X0RBVEEsIFBUQzVfREFUQSwgUFRDNF9EQVRBLAorCVBUQzNfREFUQSwgUFRDMl9EQVRBLCBQVEMxX0RBVEEsIFBUQzBfREFUQSwKKwlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJUFREM19EQVRBLCBQVEQyX0RBVEEsIFBURDFfREFUQSwgUFREMF9EQVRBLAorCVBURTZfREFUQSwgUFRFNV9EQVRBLCBQVEU0X0RBVEEsCisJUFRFM19EQVRBLCBQVEUyX0RBVEEsIFBURTFfREFUQSwgUFRFMF9EQVRBLAorCVBURjZfREFUQSwgUFRGNV9EQVRBLCBQVEY0X0RBVEEsCisJUFRGM19EQVRBLCBQVEYyX0RBVEEsIFBURjFfREFUQSwgUFRGMF9EQVRBLAorCVBURzZfREFUQSwgUFRHNV9EQVRBLCBQVEc0X0RBVEEsCisJUFRHM19EQVRBLCBQVEcyX0RBVEEsIFBURzFfREFUQSwgUFRHMF9EQVRBLAorCVBUSDZfREFUQSwgUFRINV9EQVRBLCBQVEg0X0RBVEEsCisJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBLAorCVBUSjZfREFUQSwgUFRKNV9EQVRBLCBQVEo0X0RBVEEsCisJUFRKM19EQVRBLCBQVEoyX0RBVEEsIFBUSjFfREFUQSwgUFRKMF9EQVRBLAorCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSwKKwlQVEw3X0RBVEEsIFBUTDZfREFUQSwgUFRMNV9EQVRBLCBQVEw0X0RBVEEsIFBUTDNfREFUQSwKKwlQVE03X0RBVEEsIFBUTTZfREFUQSwgUFRNNV9EQVRBLCBQVE00X0RBVEEsCisJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBLAorCVBUUDRfREFUQSwgUFRQM19EQVRBLCBQVFAyX0RBVEEsIFBUUDFfREFUQSwgUFRQMF9EQVRBLAorCVBUUjdfREFUQSwgUFRSNl9EQVRBLCBQVFI1X0RBVEEsIFBUUjRfREFUQSwKKwlQVFIzX0RBVEEsIFBUUjJfREFUQSwgUFRSMV9EQVRBLCBQVFIwX0RBVEEsCisJUFRTNF9EQVRBLCBQVFMzX0RBVEEsIFBUUzJfREFUQSwgUFRTMV9EQVRBLCBQVFMwX0RBVEEsCisJUFRUNF9EQVRBLCBQVFQzX0RBVEEsIFBUVDJfREFUQSwgUFRUMV9EQVRBLCBQVFQwX0RBVEEsCisJUFRVNF9EQVRBLCBQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEsCisJUFRWNF9EQVRBLCBQVFYzX0RBVEEsIFBUVjJfREFUQSwgUFRWMV9EQVRBLCBQVFYwX0RBVEEsCisJUElOTVVYX0RBVEFfRU5ELAorCisJUElOTVVYX0lOUFVUX0JFR0lOLAorCVBUQTdfSU4sIFBUQTZfSU4sIFBUQTVfSU4sIFBUQTRfSU4sCisJUFRBM19JTiwgUFRBMl9JTiwgUFRBMV9JTiwgUFRBMF9JTiwKKwlQVEI3X0lOLCBQVEI2X0lOLCBQVEI1X0lOLCBQVEI0X0lOLAorCVBUQjNfSU4sIFBUQjJfSU4sIFBUQjFfSU4sIFBUQjBfSU4sCisJUFRDN19JTiwgUFRDNl9JTiwgUFRDNV9JTiwgUFRDNF9JTiwKKwlQVEMzX0lOLCBQVEMyX0lOLCBQVEMxX0lOLCBQVEMwX0lOLAorCVBURDdfSU4sIFBURDZfSU4sIFBURDVfSU4sIFBURDRfSU4sCisJUFREM19JTiwgUFREMl9JTiwgUFREMV9JTiwgUFREMF9JTiwKKwlQVEU2X0lOLCBQVEU1X0lOLCBQVEU0X0lOLAorCVBURTNfSU4sIFBURTJfSU4sIFBURTFfSU4sIFBURTBfSU4sCisJUFRGNl9JTiwgUFRGNV9JTiwgUFRGNF9JTiwKKwlQVEYzX0lOLCBQVEYyX0lOLCBQVEYxX0lOLCBQVEYwX0lOLAorCVBURzZfSU4sIFBURzVfSU4sIFBURzRfSU4sCisJUFRHM19JTiwgUFRHMl9JTiwgUFRHMV9JTiwgUFRHMF9JTiwKKwlQVEg2X0lOLCBQVEg1X0lOLCBQVEg0X0lOLAorCVBUSDNfSU4sIFBUSDJfSU4sIFBUSDFfSU4sIFBUSDBfSU4sCisJUFRKNl9JTiwgUFRKNV9JTiwgUFRKNF9JTiwKKwlQVEozX0lOLCBQVEoyX0lOLCBQVEoxX0lOLCBQVEowX0lOLAorCVBUSzNfSU4sIFBUSzJfSU4sIFBUSzFfSU4sIFBUSzBfSU4sCisJUFRMN19JTiwgUFRMNl9JTiwgUFRMNV9JTiwgUFRMNF9JTiwgUFRMM19JTiwKKwlQVE03X0lOLCBQVE02X0lOLCBQVE01X0lOLCBQVE00X0lOLAorCVBUTTNfSU4sIFBUTTJfSU4sIFBUTTFfSU4sIFBUTTBfSU4sCisJUFRQNF9JTiwgUFRQM19JTiwgUFRQMl9JTiwgUFRQMV9JTiwgUFRQMF9JTiwKKwlQVFI3X0lOLCBQVFI2X0lOLCBQVFI1X0lOLCBQVFI0X0lOLAorCVBUUjNfSU4sIFBUUjJfSU4sIFBUUjFfSU4sIFBUUjBfSU4sCisJUFRTNF9JTiwgUFRTM19JTiwgUFRTMl9JTiwgUFRTMV9JTiwgUFRTMF9JTiwKKwlQVFQ0X0lOLCBQVFQzX0lOLCBQVFQyX0lOLCBQVFQxX0lOLCBQVFQwX0lOLAorCVBUVTRfSU4sIFBUVTNfSU4sIFBUVTJfSU4sIFBUVTFfSU4sIFBUVTBfSU4sCisJUFRWNF9JTiwgUFRWM19JTiwgUFRWMl9JTiwgUFRWMV9JTiwgUFRWMF9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQVEE3X0lOX1BVLCBQVEE2X0lOX1BVLCBQVEE1X0lOX1BVLCBQVEE0X0lOX1BVLAorCVBUQTNfSU5fUFUsIFBUQTJfSU5fUFUsIFBUQTFfSU5fUFUsIFBUQTBfSU5fUFUsCisJUFRCN19JTl9QVSwgUFRCNl9JTl9QVSwgUFRCNV9JTl9QVSwgUFRCNF9JTl9QVSwKKwlQVEIzX0lOX1BVLCBQVEIyX0lOX1BVLCBQVEIxX0lOX1BVLCBQVEIwX0lOX1BVLAorCVBUQzdfSU5fUFUsIFBUQzZfSU5fUFUsIFBUQzVfSU5fUFUsIFBUQzRfSU5fUFUsCisJUFRDM19JTl9QVSwgUFRDMl9JTl9QVSwgUFRDMV9JTl9QVSwgUFRDMF9JTl9QVSwKKwlQVEQ3X0lOX1BVLCBQVEQ2X0lOX1BVLCBQVEQ1X0lOX1BVLCBQVEQ0X0lOX1BVLAorCVBURDNfSU5fUFUsIFBURDJfSU5fUFUsIFBURDFfSU5fUFUsIFBURDBfSU5fUFUsCisJUFRFNF9JTl9QVSwgUFRFM19JTl9QVSwgUFRFMl9JTl9QVSwgUFRFMV9JTl9QVSwgUFRFMF9JTl9QVSwKKwlQVEYwX0lOX1BVLAorCVBURzZfSU5fUFUsIFBURzVfSU5fUFUsIFBURzRfSU5fUFUsCisJUFRHM19JTl9QVSwgUFRHMl9JTl9QVSwgUFRHMV9JTl9QVSwgUFRHMF9JTl9QVSwKKwlQVEg2X0lOX1BVLCBQVEg1X0lOX1BVLCBQVEg0X0lOX1BVLAorCVBUSDNfSU5fUFUsIFBUSDJfSU5fUFUsIFBUSDFfSU5fUFUsIFBUSDBfSU5fUFUsCisJUFRKNl9JTl9QVSwgUFRKNV9JTl9QVSwgUFRKNF9JTl9QVSwKKwlQVEozX0lOX1BVLCBQVEoyX0lOX1BVLCBQVEoxX0lOX1BVLCBQVEowX0lOX1BVLAorCVBUSzNfSU5fUFUsIFBUSzJfSU5fUFUsIFBUSzFfSU5fUFUsIFBUSzBfSU5fUFUsCisJUFRMN19JTl9QVSwgUFRMNl9JTl9QVSwgUFRMNV9JTl9QVSwgUFRMNF9JTl9QVSwgUFRMM19JTl9QVSwKKwlQVE03X0lOX1BVLCBQVE02X0lOX1BVLCBQVE01X0lOX1BVLCBQVE00X0lOX1BVLAorCVBUTTNfSU5fUFUsIFBUTTJfSU5fUFUsIFBUTTFfSU5fUFUsIFBUTTBfSU5fUFUsCisJUFRQNF9JTl9QVSwgUFRQM19JTl9QVSwgUFRQMl9JTl9QVSwgUFRQMV9JTl9QVSwgUFRQMF9JTl9QVSwKKwlQVFI3X0lOX1BVLCBQVFI2X0lOX1BVLCBQVFI1X0lOX1BVLCBQVFI0X0lOX1BVLAorCVBUUjNfSU5fUFUsIFBUUjJfSU5fUFUsIFBUUjFfSU5fUFUsIFBUUjBfSU5fUFUsCisJUFRTNF9JTl9QVSwgUFRTM19JTl9QVSwgUFRTMl9JTl9QVSwgUFRTMV9JTl9QVSwgUFRTMF9JTl9QVSwKKwlQVFQ0X0lOX1BVLCBQVFQzX0lOX1BVLCBQVFQyX0lOX1BVLCBQVFQxX0lOX1BVLCBQVFQwX0lOX1BVLAorCVBUVTRfSU5fUFUsIFBUVTNfSU5fUFUsIFBUVTJfSU5fUFUsIFBUVTFfSU5fUFUsIFBUVTBfSU5fUFUsCisJUFRWNF9JTl9QVSwgUFRWM19JTl9QVSwgUFRWMl9JTl9QVSwgUFRWMV9JTl9QVSwgUFRWMF9JTl9QVSwKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUFRBN19PVVQsIFBUQTZfT1VULCBQVEE1X09VVCwgUFRBNF9PVVQsCisJUFRBM19PVVQsIFBUQTJfT1VULCBQVEExX09VVCwgUFRBMF9PVVQsCisJUFRCN19PVVQsIFBUQjZfT1VULCBQVEI1X09VVCwgUFRCNF9PVVQsCisJUFRCM19PVVQsIFBUQjJfT1VULCBQVEIxX09VVCwgUFRCMF9PVVQsCisJUFRDN19PVVQsIFBUQzZfT1VULCBQVEM1X09VVCwgUFRDNF9PVVQsCisJUFRDM19PVVQsIFBUQzJfT1VULCBQVEMxX09VVCwgUFRDMF9PVVQsCisJUFREN19PVVQsIFBURDZfT1VULCBQVEQ1X09VVCwgUFRENF9PVVQsCisJUFREM19PVVQsIFBURDJfT1VULCBQVEQxX09VVCwgUFREMF9PVVQsCisJUFRFNF9PVVQsIFBURTNfT1VULCBQVEUyX09VVCwgUFRFMV9PVVQsIFBURTBfT1VULAorCVBURjBfT1VULAorCVBURzZfT1VULCBQVEc1X09VVCwgUFRHNF9PVVQsCisJUFRHM19PVVQsIFBURzJfT1VULCBQVEcxX09VVCwgUFRHMF9PVVQsCisJUFRINl9PVVQsIFBUSDVfT1VULCBQVEg0X09VVCwKKwlQVEgzX09VVCwgUFRIMl9PVVQsIFBUSDFfT1VULCBQVEgwX09VVCwKKwlQVEo2X09VVCwgUFRKNV9PVVQsIFBUSjRfT1VULAorCVBUSjNfT1VULCBQVEoyX09VVCwgUFRKMV9PVVQsIFBUSjBfT1VULAorCVBUSzNfT1VULCBQVEsyX09VVCwgUFRLMV9PVVQsIFBUSzBfT1VULAorCVBUTDdfT1VULCBQVEw2X09VVCwgUFRMNV9PVVQsIFBUTDRfT1VULCBQVEwzX09VVCwKKwlQVE03X09VVCwgUFRNNl9PVVQsIFBUTTVfT1VULCBQVE00X09VVCwKKwlQVE0zX09VVCwgUFRNMl9PVVQsIFBUTTFfT1VULCBQVE0wX09VVCwKKwlQVFA0X09VVCwgUFRQM19PVVQsIFBUUDJfT1VULCBQVFAxX09VVCwgUFRQMF9PVVQsCisJUFRSN19PVVQsIFBUUjZfT1VULCBQVFI1X09VVCwgUFRSNF9PVVQsCisJUFRSM19PVVQsIFBUUjJfT1VULCBQVFIxX09VVCwgUFRSMF9PVVQsCisJUFRTNF9PVVQsIFBUUzNfT1VULCBQVFMyX09VVCwgUFRTMV9PVVQsIFBUUzBfT1VULAorCVBUVDRfT1VULCBQVFQzX09VVCwgUFRUMl9PVVQsIFBUVDFfT1VULCBQVFQwX09VVCwKKwlQVFU0X09VVCwgUFRVM19PVVQsIFBUVTJfT1VULCBQVFUxX09VVCwgUFRVMF9PVVQsCisJUFRWNF9PVVQsIFBUVjNfT1VULCBQVFYyX09VVCwgUFRWMV9PVVQsIFBUVjBfT1VULAorCVBJTk1VWF9PVVRQVVRfRU5ELAorCisJUElOTVVYX0ZVTkNUSU9OX0JFR0lOLAorCVBUQTdfRk4sIFBUQTZfRk4sIFBUQTVfRk4sIFBUQTRfRk4sCisJUFRBM19GTiwgUFRBMl9GTiwgUFRBMV9GTiwgUFRBMF9GTiwKKwlQVEI3X0ZOLCBQVEI2X0ZOLCBQVEI1X0ZOLCBQVEI0X0ZOLAorCVBUQjNfRk4sIFBUQjJfRk4sIFBUQjFfRk4sIFBUQjBfRk4sCisJUFRDN19GTiwgUFRDNl9GTiwgUFRDNV9GTiwgUFRDNF9GTiwKKwlQVEMzX0ZOLCBQVEMyX0ZOLCBQVEMxX0ZOLCBQVEMwX0ZOLAorCVBURDdfRk4sIFBURDZfRk4sIFBURDVfRk4sIFBURDRfRk4sCisJUFREM19GTiwgUFREMl9GTiwgUFREMV9GTiwgUFREMF9GTiwKKwlQVEU2X0ZOLCBQVEU1X0ZOLCBQVEU0X0ZOLAorCVBURTNfRk4sIFBURTJfRk4sIFBURTFfRk4sIFBURTBfRk4sCisJUFRGNl9GTiwgUFRGNV9GTiwgUFRGNF9GTiwKKwlQVEYzX0ZOLCBQVEYyX0ZOLCBQVEYxX0ZOLCBQVEYwX0ZOLAorCVBURzZfRk4sIFBURzVfRk4sIFBURzRfRk4sCisJUFRHM19GTiwgUFRHMl9GTiwgUFRHMV9GTiwgUFRHMF9GTiwKKwlQVEg2X0ZOLCBQVEg1X0ZOLCBQVEg0X0ZOLAorCVBUSDNfRk4sIFBUSDJfRk4sIFBUSDFfRk4sIFBUSDBfRk4sCisJUFRKNl9GTiwgUFRKNV9GTiwgUFRKNF9GTiwKKwlQVEozX0ZOLCBQVEoyX0ZOLCBQVEoxX0ZOLCBQVEowX0ZOLAorCVBUSzNfRk4sIFBUSzJfRk4sIFBUSzFfRk4sIFBUSzBfRk4sCisJUFRMN19GTiwgUFRMNl9GTiwgUFRMNV9GTiwgUFRMNF9GTiwgUFRMM19GTiwKKwlQVE03X0ZOLCBQVE02X0ZOLCBQVE01X0ZOLCBQVE00X0ZOLAorCVBUTTNfRk4sIFBUTTJfRk4sIFBUTTFfRk4sIFBUTTBfRk4sCisJUFRQNF9GTiwgUFRQM19GTiwgUFRQMl9GTiwgUFRQMV9GTiwgUFRQMF9GTiwKKwlQVFI3X0ZOLCBQVFI2X0ZOLCBQVFI1X0ZOLCBQVFI0X0ZOLAorCVBUUjNfRk4sIFBUUjJfRk4sIFBUUjFfRk4sIFBUUjBfRk4sCisJUFRTNF9GTiwgUFRTM19GTiwgUFRTMl9GTiwgUFRTMV9GTiwgUFRTMF9GTiwKKwlQVFQ0X0ZOLCBQVFQzX0ZOLCBQVFQyX0ZOLCBQVFQxX0ZOLCBQVFQwX0ZOLAorCVBUVTRfRk4sIFBUVTNfRk4sIFBUVTJfRk4sIFBUVTFfRk4sIFBUVTBfRk4sCisJUFRWNF9GTiwgUFRWM19GTiwgUFRWMl9GTiwgUFRWMV9GTiwgUFRWMF9GTiwKKworCVBTRUxBXzFfMF8wMCwgUFNFTEFfMV8wXzAxLCBQU0VMQV8xXzBfMTAsCisJUFNFTEFfM18yXzAwLCBQU0VMQV8zXzJfMDEsIFBTRUxBXzNfMl8xMCwgUFNFTEFfM18yXzExLAorCVBTRUxBXzVfNF8wMCwgUFNFTEFfNV80XzAxLCBQU0VMQV81XzRfMTAsIFBTRUxBXzVfNF8xMSwKKwlQU0VMQV83XzZfMDAsIFBTRUxBXzdfNl8wMSwgUFNFTEFfN182XzEwLAorCVBTRUxBXzlfOF8wMCwgUFNFTEFfOV84XzAxLCBQU0VMQV85XzhfMTAsCisJUFNFTEFfMTFfMTBfMDAsIFBTRUxBXzExXzEwXzAxLCBQU0VMQV8xMV8xMF8xMCwKKwlQU0VMQV8xM18xMl8wMCwgUFNFTEFfMTNfMTJfMTAsCisJUFNFTEFfMTVfMTRfMDAsIFBTRUxBXzE1XzE0XzEwLAorCVBTRUxCXzlfOF8wMCwgUFNFTEJfOV84XzExLAorCVBTRUxCXzExXzEwXzAwLCBQU0VMQl8xMV8xMF8wMSwgUFNFTEJfMTFfMTBfMTAsIFBTRUxCXzExXzEwXzExLAorCVBTRUxCXzEzXzEyXzAwLCBQU0VMQl8xM18xMl8wMSwgUFNFTEJfMTNfMTJfMTAsIFBTRUxCXzEzXzEyXzExLAorCVBTRUxCXzE1XzE0XzAwLCBQU0VMQl8xNV8xNF8xMSwKKwlQU0VMQ185XzhfMDAsIFBTRUxDXzlfOF8xMCwKKwlQU0VMQ18xMV8xMF8wMCwgUFNFTENfMTFfMTBfMTAsCisJUFNFTENfMTNfMTJfMDAsCVBTRUxDXzEzXzEyXzAxLAlQU0VMQ18xM18xMl8xMCwKKwlQU0VMQ18xNV8xNF8wMCwJUFNFTENfMTVfMTRfMDEsCVBTRUxDXzE1XzE0XzEwLAorCVBTRUxEXzFfMF8wMCwgUFNFTERfMV8wXzEwLAorCVBTRUxEXzExXzEwXzAwLAlQU0VMRF8xMV8xMF8wMSwKKwlQU0VMRF8xNV8xNF8wMCwJUFNFTERfMTVfMTRfMDEsCVBTRUxEXzE1XzE0XzEwLAorCVBJTk1VWF9GVU5DVElPTl9FTkQsCisKKwlQSU5NVVhfTUFSS19CRUdJTiwKKwlEMzFfTUFSSywgRDMwX01BUkssIEQyOV9NQVJLLCBEMjhfTUFSSywKKwlEMjdfTUFSSywgRDI2X01BUkssIEQyNV9NQVJLLCBEMjRfTUFSSywKKwlEMjNfTUFSSywgRDIyX01BUkssIEQyMV9NQVJLLCBEMjBfTUFSSywKKwlEMTlfTUFSSywgRDE4X01BUkssIEQxN19NQVJLLCBEMTZfTUFSSywKKwlJT0lTMTZfTUFSSywgUkFTX01BUkssIENBU19NQVJLLCBDS0VfTUFSSywKKwlDUzVCX0NFMUFfTUFSSywgQ1M2Ql9DRTFCX01BUkssCisJQTI1X01BUkssIEEyNF9NQVJLLCBBMjNfTUFSSywgQTIyX01BUkssCisJQTIxX01BUkssIEEyMF9NQVJLLCBBMTlfTUFSSywgQTBfTUFSSywKKwlSRUZPVVRfTUFSSywgSVJRT1VUX01BUkssCisJTENEX0RBVEExNV9NQVJLLCBMQ0RfREFUQTE0X01BUkssCisJTENEX0RBVEExM19NQVJLLCBMQ0RfREFUQTEyX01BUkssCisJTENEX0RBVEExMV9NQVJLLCBMQ0RfREFUQTEwX01BUkssCisJTENEX0RBVEE5X01BUkssIExDRF9EQVRBOF9NQVJLLAorCUxDRF9EQVRBN19NQVJLLCBMQ0RfREFUQTZfTUFSSywKKwlMQ0RfREFUQTVfTUFSSywgTENEX0RBVEE0X01BUkssCisJTENEX0RBVEEzX01BUkssIExDRF9EQVRBMl9NQVJLLAorCUxDRF9EQVRBMV9NQVJLLCBMQ0RfREFUQTBfTUFSSywKKwlMQ0RfTV9ESVNQX01BUkssCisJTENEX0NMMV9NQVJLLCBMQ0RfQ0wyX01BUkssCisJTENEX0RPTl9NQVJLLCBMQ0RfRkxNX01BUkssCisJTENEX1ZFUFdDX01BUkssIExDRF9WQ1BXQ19NQVJLLAorCUFGRV9SWElOX01BUkssIEFGRV9SREVUX01BUkssCisJQUZFX0ZTX01BUkssIEFGRV9UWE9VVF9NQVJLLAorCUFGRV9TQ0xLX01BUkssIEFGRV9STFlDTlRfTUFSSywKKwlBRkVfSEMxX01BUkssCisJSUlDX1NDTF9NQVJLLCBJSUNfU0RBX01BUkssCisJREExX01BUkssIERBMF9NQVJLLAorCUFOM19NQVJLLCBBTjJfTUFSSywgQU4xX01BUkssIEFOMF9NQVJLLCBBRFRSR19NQVJLLAorCVVTQjFEX1JDVl9NQVJLLCBVU0IxRF9UWFNFMF9NQVJLLAorCVVTQjFEX1RYRFBMU19NQVJLLCBVU0IxRF9ETU5TX01BUkssCisJVVNCMURfRFBMU19NQVJLLCBVU0IxRF9TUEVFRF9NQVJLLAorCVVTQjFEX1RYRU5MX01BUkssCisJVVNCMl9QV1JfRU5fTUFSSywgVVNCMV9QV1JfRU5fVVNCRl9VUExVUF9NQVJLLCBVU0IxRF9TVVNQRU5EX01BUkssCisJSVJRNV9NQVJLLCBJUlE0X01BUkssCisJSVJRM19JUkwzX01BUkssIElSUTJfSVJMMl9NQVJLLAorCUlSUTFfSVJMMV9NQVJLLCBJUlEwX0lSTDBfTUFSSywKKwlQQ0NfUkVHX01BUkssIFBDQ19EUlZfTUFSSywKKwlQQ0NfQlZEMl9NQVJLLCBQQ0NfQlZEMV9NQVJLLAorCVBDQ19DRDJfTUFSSywgUENDX0NEMV9NQVJLLAorCVBDQ19SRVNFVF9NQVJLLCBQQ0NfUkRZX01BUkssCisJUENDX1ZTMl9NQVJLLCBQQ0NfVlMxX01BUkssCisJQVVEQVRBM19NQVJLLCBBVURBVEEyX01BUkssIEFVREFUQTFfTUFSSywgQVVEQVRBMF9NQVJLLAorCUFVRENLX01BUkssIEFVRFNZTkNfTUFSSywgQVNFQlJLQUtfTUFSSywgVFJTVF9NQVJLLAorCVRNU19NQVJLLCBURE9fTUFSSywgVERJX01BUkssIFRDS19NQVJLLAorCURBQ0sxX01BUkssIERSRVExX01BUkssIERBQ0swX01BUkssIERSRVEwX01BUkssCisJVEVORDFfTUFSSywgVEVORDBfTUFSSywKKwlTSU9GMF9TWU5DX01BUkssIFNJT0YwX01DTEtfTUFSSywKKwlTSU9GMF9UWERfTUFSSywgU0lPRjBfUlhEX01BUkssCisJU0lPRjBfU0NLX01BUkssCisJU0lPRjFfU1lOQ19NQVJLLCBTSU9GMV9NQ0xLX01BUkssCisJU0lPRjFfVFhEX01BUkssIFNJT0YxX1JYRF9NQVJLLAorCVNJT0YxX1NDS19NQVJLLAorCVNDSUYwX1RYRF9NQVJLLCBTQ0lGMF9SWERfTUFSSywKKwlTQ0lGMF9SVFNfTUFSSywgU0NJRjBfQ1RTX01BUkssIFNDSUYwX1NDS19NQVJLLAorCVNDSUYxX1RYRF9NQVJLLCBTQ0lGMV9SWERfTUFSSywKKwlTQ0lGMV9SVFNfTUFSSywgU0NJRjFfQ1RTX01BUkssIFNDSUYxX1NDS19NQVJLLAorCVRQVV9UTzFfTUFSSywgVFBVX1RPMF9NQVJLLAorCVRQVV9USTNCX01BUkssIFRQVV9USTNBX01BUkssCisJVFBVX1RJMkJfTUFSSywgVFBVX1RJMkFfTUFSSywKKwlUUFVfVE8zX01BUkssIFRQVV9UTzJfTUFSSywKKwlTSU1fRF9NQVJLLCBTSU1fQ0xLX01BUkssIFNJTV9SU1RfTUFSSywKKwlNTUNfREFUX01BUkssIE1NQ19DTURfTUFSSywKKwlNTUNfQ0xLX01BUkssIE1NQ19WRERPTl9NQVJLLAorCU1NQ19PRE1PRF9NQVJLLAorCVNUQVRVUzBfTUFSSywgU1RBVFVTMV9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisJLyogUFRBIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEE3X0RBVEEsIFBUQTdfSU4sIFBUQTdfT1VULCBQVEE3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEE2X0RBVEEsIFBUQTZfSU4sIFBUQTZfT1VULCBQVEE2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEE1X0RBVEEsIFBUQTVfSU4sIFBUQTVfT1VULCBQVEE1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEE0X0RBVEEsIFBUQTRfSU4sIFBUQTRfT1VULCBQVEE0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEzX0RBVEEsIFBUQTNfSU4sIFBUQTNfT1VULCBQVEEzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEyX0RBVEEsIFBUQTJfSU4sIFBUQTJfT1VULCBQVEEyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEExX0RBVEEsIFBUQTFfSU4sIFBUQTFfT1VULCBQVEExX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEwX0RBVEEsIFBUQTBfSU4sIFBUQTBfT1VULCBQVEEwX0lOX1BVKSwKKworCS8qIFBUQiBHUElPICovCisJUElOTVVYX0RBVEEoUFRCN19EQVRBLCBQVEI3X0lOLCBQVEI3X09VVCwgUFRCN19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCNl9EQVRBLCBQVEI2X0lOLCBQVEI2X09VVCwgUFRCNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCNV9EQVRBLCBQVEI1X0lOLCBQVEI1X09VVCwgUFRCNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCNF9EQVRBLCBQVEI0X0lOLCBQVEI0X09VVCwgUFRCNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCM19EQVRBLCBQVEIzX0lOLCBQVEIzX09VVCwgUFRCM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMl9EQVRBLCBQVEIyX0lOLCBQVEIyX09VVCwgUFRCMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMV9EQVRBLCBQVEIxX0lOLCBQVEIxX09VVCwgUFRCMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMF9EQVRBLCBQVEIwX0lOLCBQVEIwX09VVCwgUFRCMF9JTl9QVSksCisKKwkvKiBQVEMgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUQzdfREFUQSwgUFRDN19JTiwgUFRDN19PVVQsIFBUQzdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzZfREFUQSwgUFRDNl9JTiwgUFRDNl9PVVQsIFBUQzZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzVfREFUQSwgUFRDNV9JTiwgUFRDNV9PVVQsIFBUQzVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzRfREFUQSwgUFRDNF9JTiwgUFRDNF9PVVQsIFBUQzRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzNfREFUQSwgUFRDM19JTiwgUFRDM19PVVQsIFBUQzNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzJfREFUQSwgUFRDMl9JTiwgUFRDMl9PVVQsIFBUQzJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzFfREFUQSwgUFRDMV9JTiwgUFRDMV9PVVQsIFBUQzFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzBfREFUQSwgUFRDMF9JTiwgUFRDMF9PVVQsIFBUQzBfSU5fUFUpLAorCisJLyogUFREIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEQ3X0RBVEEsIFBURDdfSU4sIFBURDdfT1VULCBQVEQ3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ2X0RBVEEsIFBURDZfSU4sIFBURDZfT1VULCBQVEQ2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ1X0RBVEEsIFBURDVfSU4sIFBURDVfT1VULCBQVEQ1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ0X0RBVEEsIFBURDRfSU4sIFBURDRfT1VULCBQVEQ0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQzX0RBVEEsIFBURDNfSU4sIFBURDNfT1VULCBQVEQzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQyX0RBVEEsIFBURDJfSU4sIFBURDJfT1VULCBQVEQyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQxX0RBVEEsIFBURDFfSU4sIFBURDFfT1VULCBQVEQxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQwX0RBVEEsIFBURDBfSU4sIFBURDBfT1VULCBQVEQwX0lOX1BVKSwKKworCS8qIFBURSBHUElPICovCisJUElOTVVYX0RBVEEoUFRFNl9EQVRBLCBQVEU2X0lOKSwKKwlQSU5NVVhfREFUQShQVEU1X0RBVEEsIFBURTVfSU4pLAorCVBJTk1VWF9EQVRBKFBURTRfREFUQSwgUFRFNF9JTiwgUFRFNF9PVVQsIFBURTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTNfREFUQSwgUFRFM19JTiwgUFRFM19PVVQsIFBURTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTJfREFUQSwgUFRFMl9JTiwgUFRFMl9PVVQsIFBURTJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTFfREFUQSwgUFRFMV9JTiwgUFRFMV9PVVQsIFBURTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTBfREFUQSwgUFRFMF9JTiwgUFRFMF9PVVQsIFBURTBfSU5fUFUpLAorCisJLyogUFRGIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEY2X0RBVEEsIFBURjZfSU4pLAorCVBJTk1VWF9EQVRBKFBURjVfREFUQSwgUFRGNV9JTiksCisJUElOTVVYX0RBVEEoUFRGNF9EQVRBLCBQVEY0X0lOKSwKKwlQSU5NVVhfREFUQShQVEYzX0RBVEEsIFBURjNfSU4pLAorCVBJTk1VWF9EQVRBKFBURjJfREFUQSwgUFRGMl9JTiksCisJUElOTVVYX0RBVEEoUFRGMV9EQVRBLCBQVEYxX0lOKSwKKwlQSU5NVVhfREFUQShQVEYwX0RBVEEsIFBURjBfSU4sIFBURjBfT1VULCBQVEYwX0lOX1BVKSwKKworCS8qIFBURyBHUElPICovCisJUElOTVVYX0RBVEEoUFRHNl9EQVRBLCBQVEc2X0lOLCBQVEc2X09VVCwgUFRHNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHNV9EQVRBLCBQVEc1X0lOLCBQVEc1X09VVCwgUFRHNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHNF9EQVRBLCBQVEc0X0lOLCBQVEc0X09VVCwgUFRHNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHM19EQVRBLCBQVEczX0lOLCBQVEczX09VVCwgUFRHM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHMl9EQVRBLCBQVEcyX0lOLCBQVEcyX09VVCwgUFRHMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHMV9EQVRBLCBQVEcxX0lOLCBQVEcxX09VVCwgUFRHMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHMF9EQVRBLCBQVEcwX0lOLCBQVEcwX09VVCwgUFRHMF9JTl9QVSksCisKKwkvKiBQVEggR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUSDZfREFUQSwgUFRINl9JTiwgUFRINl9PVVQsIFBUSDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDVfREFUQSwgUFRINV9JTiwgUFRINV9PVVQsIFBUSDVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDRfREFUQSwgUFRINF9JTiwgUFRINF9PVVQsIFBUSDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDNfREFUQSwgUFRIM19JTiwgUFRIM19PVVQsIFBUSDNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDJfREFUQSwgUFRIMl9JTiwgUFRIMl9PVVQsIFBUSDJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDFfREFUQSwgUFRIMV9JTiwgUFRIMV9PVVQsIFBUSDFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDBfREFUQSwgUFRIMF9JTiwgUFRIMF9PVVQsIFBUSDBfSU5fUFUpLAorCisJLyogUFRKIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEo2X0RBVEEsIFBUSjZfSU4sIFBUSjZfT1VULCBQVEo2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEo1X0RBVEEsIFBUSjVfSU4sIFBUSjVfT1VULCBQVEo1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEo0X0RBVEEsIFBUSjRfSU4sIFBUSjRfT1VULCBQVEo0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEozX0RBVEEsIFBUSjNfSU4sIFBUSjNfT1VULCBQVEozX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEoyX0RBVEEsIFBUSjJfSU4sIFBUSjJfT1VULCBQVEoyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEoxX0RBVEEsIFBUSjFfSU4sIFBUSjFfT1VULCBQVEoxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEowX0RBVEEsIFBUSjBfSU4sIFBUSjBfT1VULCBQVEowX0lOX1BVKSwKKworCS8qIFBUSyBHUElPICovCisJUElOTVVYX0RBVEEoUFRLM19EQVRBLCBQVEszX0lOLCBQVEszX09VVCwgUFRLM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRLMl9EQVRBLCBQVEsyX0lOLCBQVEsyX09VVCwgUFRLMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRLMV9EQVRBLCBQVEsxX0lOLCBQVEsxX09VVCwgUFRLMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRLMF9EQVRBLCBQVEswX0lOLCBQVEswX09VVCwgUFRLMF9JTl9QVSksCisKKwkvKiBQVEwgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUTDdfREFUQSwgUFRMN19JTiwgUFRMN19PVVQsIFBUTDdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDZfREFUQSwgUFRMNl9JTiwgUFRMNl9PVVQsIFBUTDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDVfREFUQSwgUFRMNV9JTiwgUFRMNV9PVVQsIFBUTDVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDRfREFUQSwgUFRMNF9JTiwgUFRMNF9PVVQsIFBUTDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDNfREFUQSwgUFRMM19JTiwgUFRMM19PVVQsIFBUTDNfSU5fUFUpLAorCisJLyogUFRNIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVE03X0RBVEEsIFBUTTdfSU4sIFBUTTdfT1VULCBQVE03X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE02X0RBVEEsIFBUTTZfSU4sIFBUTTZfT1VULCBQVE02X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE01X0RBVEEsIFBUTTVfSU4sIFBUTTVfT1VULCBQVE01X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE00X0RBVEEsIFBUTTRfSU4sIFBUTTRfT1VULCBQVE00X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0zX0RBVEEsIFBUTTNfSU4sIFBUTTNfT1VULCBQVE0zX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0yX0RBVEEsIFBUTTJfSU4sIFBUTTJfT1VULCBQVE0yX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0xX0RBVEEsIFBUTTFfSU4sIFBUTTFfT1VULCBQVE0xX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0wX0RBVEEsIFBUTTBfSU4sIFBUTTBfT1VULCBQVE0wX0lOX1BVKSwKKworCS8qIFBUUCBHUElPICovCisJUElOTVVYX0RBVEEoUFRQNF9EQVRBLCBQVFA0X0lOLCBQVFA0X09VVCwgUFRQNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQM19EQVRBLCBQVFAzX0lOLCBQVFAzX09VVCwgUFRQM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQMl9EQVRBLCBQVFAyX0lOLCBQVFAyX09VVCwgUFRQMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQMV9EQVRBLCBQVFAxX0lOLCBQVFAxX09VVCwgUFRQMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQMF9EQVRBLCBQVFAwX0lOLCBQVFAwX09VVCwgUFRQMF9JTl9QVSksCisKKwkvKiBQVFIgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUUjdfREFUQSwgUFRSN19JTiwgUFRSN19PVVQsIFBUUjdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjZfREFUQSwgUFRSNl9JTiwgUFRSNl9PVVQsIFBUUjZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjVfREFUQSwgUFRSNV9JTiwgUFRSNV9PVVQsIFBUUjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjRfREFUQSwgUFRSNF9JTiwgUFRSNF9PVVQsIFBUUjRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjNfREFUQSwgUFRSM19JTiwgUFRSM19PVVQsIFBUUjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjJfREFUQSwgUFRSMl9JTiwgUFRSMl9PVVQsIFBUUjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjFfREFUQSwgUFRSMV9JTiwgUFRSMV9PVVQsIFBUUjFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjBfREFUQSwgUFRSMF9JTiwgUFRSMF9PVVQsIFBUUjBfSU5fUFUpLAorCisJLyogUFRTIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFM0X0RBVEEsIFBUUzRfSU4sIFBUUzRfT1VULCBQVFM0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMzX0RBVEEsIFBUUzNfSU4sIFBUUzNfT1VULCBQVFMzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMyX0RBVEEsIFBUUzJfSU4sIFBUUzJfT1VULCBQVFMyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMxX0RBVEEsIFBUUzFfSU4sIFBUUzFfT1VULCBQVFMxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMwX0RBVEEsIFBUUzBfSU4sIFBUUzBfT1VULCBQVFMwX0lOX1BVKSwKKworCS8qIFBUVCBHUElPICovCisJUElOTVVYX0RBVEEoUFRUNF9EQVRBLCBQVFQ0X0lOLCBQVFQ0X09VVCwgUFRUNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUM19EQVRBLCBQVFQzX0lOLCBQVFQzX09VVCwgUFRUM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUMl9EQVRBLCBQVFQyX0lOLCBQVFQyX09VVCwgUFRUMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUMV9EQVRBLCBQVFQxX0lOLCBQVFQxX09VVCwgUFRUMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUMF9EQVRBLCBQVFQwX0lOLCBQVFQwX09VVCwgUFRUMF9JTl9QVSksCisKKwkvKiBQVFUgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUVTRfREFUQSwgUFRVNF9JTiwgUFRVNF9PVVQsIFBUVTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTNfREFUQSwgUFRVM19JTiwgUFRVM19PVVQsIFBUVTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTJfREFUQSwgUFRVMl9JTiwgUFRVMl9PVVQsIFBUVTJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTFfREFUQSwgUFRVMV9JTiwgUFRVMV9PVVQsIFBUVTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTBfREFUQSwgUFRVMF9JTiwgUFRVMF9PVVQsIFBUVTBfSU5fUFUpLAorCisJLyogUFRWIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFY0X0RBVEEsIFBUVjRfSU4sIFBUVjRfT1VULCBQVFY0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYzX0RBVEEsIFBUVjNfSU4sIFBUVjNfT1VULCBQVFYzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYyX0RBVEEsIFBUVjJfSU4sIFBUVjJfT1VULCBQVFYyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYxX0RBVEEsIFBUVjFfSU4sIFBUVjFfT1VULCBQVFYxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYwX0RBVEEsIFBUVjBfSU4sIFBUVjBfT1VULCBQVFYwX0lOX1BVKSwKKworCS8qIFBUQSBGTiAqLworCVBJTk1VWF9EQVRBKEQyM19NQVJLLCBQVEE3X0ZOKSwKKwlQSU5NVVhfREFUQShEMjJfTUFSSywgUFRBNl9GTiksCisJUElOTVVYX0RBVEEoRDIxX01BUkssIFBUQTVfRk4pLAorCVBJTk1VWF9EQVRBKEQyMF9NQVJLLCBQVEE0X0ZOKSwKKwlQSU5NVVhfREFUQShEMTlfTUFSSywgUFRBM19GTiksCisJUElOTVVYX0RBVEEoRDE4X01BUkssIFBUQTJfRk4pLAorCVBJTk1VWF9EQVRBKEQxN19NQVJLLCBQVEExX0ZOKSwKKwlQSU5NVVhfREFUQShEMTZfTUFSSywgUFRBMF9GTiksCisKKwkvKiBQVEIgRk4gKi8KKwlQSU5NVVhfREFUQShEMzFfTUFSSywgUFRCN19GTiksCisJUElOTVVYX0RBVEEoRDMwX01BUkssIFBUQjZfRk4pLAorCVBJTk1VWF9EQVRBKEQyOV9NQVJLLCBQVEI1X0ZOKSwKKwlQSU5NVVhfREFUQShEMjhfTUFSSywgUFRCNF9GTiksCisJUElOTVVYX0RBVEEoRDI3X01BUkssIFBUQjNfRk4pLAorCVBJTk1VWF9EQVRBKEQyNl9NQVJLLCBQVEIyX0ZOKSwKKwlQSU5NVVhfREFUQShEMjVfTUFSSywgUFRCMV9GTiksCisJUElOTVVYX0RBVEEoRDI0X01BUkssIFBUQjBfRk4pLAorCisJLyogUFRDIEZOICovCisJUElOTVVYX0RBVEEoTENEX0RBVEE3X01BUkssIFBUQzdfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBNl9NQVJLLCBQVEM2X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTVfTUFSSywgUFRDNV9GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEE0X01BUkssIFBUQzRfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBM19NQVJLLCBQVEMzX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTJfTUFSSywgUFRDMl9GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEExX01BUkssIFBUQzFfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMF9NQVJLLCBQVEMwX0ZOKSwKKworCS8qIFBURCBGTiAqLworCVBJTk1VWF9EQVRBKExDRF9EQVRBMTVfTUFSSywgUFREN19GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEExNF9NQVJLLCBQVEQ2X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTEzX01BUkssIFBURDVfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTJfTUFSSywgUFRENF9GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEExMV9NQVJLLCBQVEQzX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTEwX01BUkssIFBURDJfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBOV9NQVJLLCBQVEQxX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQThfTUFSSywgUFREMF9GTiksCisKKwkvKiBQVEUgRk4gKi8KKwlQSU5NVVhfREFUQShJSUNfU0NMX01BUkssIFBTRUxCXzlfOF8wMCwgUFRFNl9GTiksCisJUElOTVVYX0RBVEEoQUZFX1JYSU5fTUFSSywgUFNFTEJfOV84XzExLCBQVEU2X0ZOKSwKKwlQSU5NVVhfREFUQShJSUNfU0RBX01BUkssIFBTRUxCXzlfOF8wMCwgUFRFNV9GTiksCisJUElOTVVYX0RBVEEoQUZFX1JERVRfTUFSSywgUFNFTEJfOV84XzExLCBQVEU1X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfTV9ESVNQX01BUkssIFBURTRfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9DTDFfTUFSSywgUFRFM19GTiksCisJUElOTVVYX0RBVEEoTENEX0NMMl9NQVJLLCBQVEUyX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfRE9OX01BUkssIFBURTFfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9GTE1fTUFSSywgUFRFMF9GTiksCisKKwkvKiBQVEYgRk4gKi8KKwlQSU5NVVhfREFUQShEQTFfTUFSSywgUFRGNl9GTiksCisJUElOTVVYX0RBVEEoREEwX01BUkssIFBURjVfRk4pLAorCVBJTk1VWF9EQVRBKEFOM19NQVJLLCBQVEY0X0ZOKSwKKwlQSU5NVVhfREFUQShBTjJfTUFSSywgUFRGM19GTiksCisJUElOTVVYX0RBVEEoQU4xX01BUkssIFBURjJfRk4pLAorCVBJTk1VWF9EQVRBKEFOMF9NQVJLLCBQVEYxX0ZOKSwKKwlQSU5NVVhfREFUQShBRFRSR19NQVJLLCBQVEYwX0ZOKSwKKworCS8qIFBURyBGTiAqLworCVBJTk1VWF9EQVRBKFVTQjFEX1JDVl9NQVJLLCBQU0VMQV8zXzJfMDAsIFBURzZfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9GU19NQVJLLCBQU0VMQV8zXzJfMDEsIFBURzZfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19SRUdfTUFSSywgUFNFTEFfM18yXzEwLCBQVEc2X0ZOKSwKKwlQSU5NVVhfREFUQShJUlE1X01BUkssIFBTRUxBXzNfMl8xMSwgUFRHNl9GTiksCisJUElOTVVYX0RBVEEoVVNCMURfVFhTRTBfTUFSSywgUFNFTEFfNV80XzAwLCBQVEc1X0ZOKSwKKwlQSU5NVVhfREFUQShBRkVfVFhPVVRfTUFSSywgUFNFTEFfNV80XzAxLCBQVEc1X0ZOKSwKKwlQSU5NVVhfREFUQShQQ0NfRFJWX01BUkssIFBTRUxBXzVfNF8xMCwgUFRHNV9GTiksCisJUElOTVVYX0RBVEEoSVJRNF9NQVJLLCBQU0VMQV81XzRfMTEsIFBURzVfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjFEX1RYRFBMU19NQVJLLCBQU0VMQV83XzZfMDAsIFBURzRfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9TQ0xLX01BUkssIFBTRUxBXzdfNl8wMSwgUFRHNF9GTiksCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssIFBTRUxBXzdfNl8xMCwgUFRHNF9GTiksCisJUElOTVVYX0RBVEEoVVNCMURfRE1OU19NQVJLLCBQU0VMQV85XzhfMDAsIFBURzNfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9STFlDTlRfTUFSSywgUFNFTEFfOV84XzAxLCBQVEczX0ZOKSwKKwlQSU5NVVhfREFUQShQQ0NfQlZEMl9NQVJLLCBQU0VMQV85XzhfMTAsIFBURzNfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjFEX0RQTFNfTUFSSywgUFNFTEFfMTFfMTBfMDAsIFBURzJfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9IQzFfTUFSSywgUFNFTEFfMTFfMTBfMDEsIFBURzJfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19CVkQxX01BUkssIFBTRUxBXzExXzEwXzEwLCBQVEcyX0ZOKSwKKwlQSU5NVVhfREFUQShVU0IxRF9TUEVFRF9NQVJLLCBQU0VMQV8xM18xMl8wMCwgUFRHMV9GTiksCisJUElOTVVYX0RBVEEoUENDX0NEMl9NQVJLLCBQU0VMQV8xM18xMl8xMCwgUFRHMV9GTiksCisJUElOTVVYX0RBVEEoVVNCMURfVFhFTkxfTUFSSywgUFNFTEFfMTVfMTRfMDAsIFBURzBfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19DRDFfTUFSSywgUFNFTEFfMTVfMTRfMTAsIFBURzBfRk4pLAorCisJLyogUFRIIEZOICovCisJUElOTVVYX0RBVEEoUkFTX01BUkssIFBUSDZfRk4pLAorCVBJTk1VWF9EQVRBKENBU19NQVJLLCBQVEg1X0ZOKSwKKwlQSU5NVVhfREFUQShDS0VfTUFSSywgUFRINF9GTiksCisJUElOTVVYX0RBVEEoU1RBVFVTMV9NQVJLLCBQVEgzX0ZOKSwKKwlQSU5NVVhfREFUQShTVEFUVVMwX01BUkssIFBUSDJfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjJfUFdSX0VOX01BUkssIFBUSDFfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjFfUFdSX0VOX1VTQkZfVVBMVVBfTUFSSywgUFRIMF9GTiksCisKKwkvKiBQVEogRk4gKi8KKwlQSU5NVVhfREFUQShBVURDS19NQVJLLCBQVEo2X0ZOKSwKKwlQSU5NVVhfREFUQShBU0VCUktBS19NQVJLLCBQVEo1X0ZOKSwKKwlQSU5NVVhfREFUQShBVURBVEEzX01BUkssIFBUSjRfRk4pLAorCVBJTk1VWF9EQVRBKEFVREFUQTJfTUFSSywgUFRKM19GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBMV9NQVJLLCBQVEoyX0ZOKSwKKwlQSU5NVVhfREFUQShBVURBVEEwX01BUkssIFBUSjFfRk4pLAorCVBJTk1VWF9EQVRBKEFVRFNZTkNfTUFSSywgUFRKMF9GTiksCisKKwkvKiBQVEsgRk4gKi8KKwlQSU5NVVhfREFUQShQQ0NfUkVTRVRfTUFSSywgUFRLM19GTiksCisJUElOTVVYX0RBVEEoUENDX1JEWV9NQVJLLCBQVEsyX0ZOKSwKKwlQSU5NVVhfREFUQShQQ0NfVlMyX01BUkssIFBUSzFfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19WUzFfTUFSSywgUFRLMF9GTiksCisKKwkvKiBQVEwgRk4gKi8KKwlQSU5NVVhfREFUQShUUlNUX01BUkssIFBUTDdfRk4pLAorCVBJTk1VWF9EQVRBKFRNU19NQVJLLCBQVEw2X0ZOKSwKKwlQSU5NVVhfREFUQShURE9fTUFSSywgUFRMNV9GTiksCisJUElOTVVYX0RBVEEoVERJX01BUkssIFBUTDRfRk4pLAorCVBJTk1VWF9EQVRBKFRDS19NQVJLLCBQVEwzX0ZOKSwKKworCS8qIFBUTSBGTiAqLworCVBJTk1VWF9EQVRBKERSRVExX01BUkssIFBUTTdfRk4pLAorCVBJTk1VWF9EQVRBKERSRVEwX01BUkssIFBUTTZfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0sxX01BUkssIFBUTTVfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0swX01BUkssIFBUTTRfRk4pLAorCVBJTk1VWF9EQVRBKFRFTkQxX01BUkssIFBUTTNfRk4pLAorCVBJTk1VWF9EQVRBKFRFTkQwX01BUkssIFBUTTJfRk4pLAorCVBJTk1VWF9EQVRBKENTNUJfQ0UxQV9NQVJLLCBQVE0xX0ZOKSwKKwlQSU5NVVhfREFUQShDUzZCX0NFMUJfTUFSSywgUFRNMF9GTiksCisKKwkvKiBQVFAgRk4gKi8KKwlQSU5NVVhfREFUQShVU0IxRF9TVVNQRU5EX01BUkssIFBTRUxBXzFfMF8wMCwgUFRQNF9GTiksCisJUElOTVVYX0RBVEEoUkVGT1VUX01BUkssIFBTRUxBXzFfMF8wMSwgUFRQNF9GTiksCisJUElOTVVYX0RBVEEoSVJRT1VUX01BUkssIFBTRUxBXzFfMF8xMCwgUFRQNF9GTiksCisJUElOTVVYX0RBVEEoSVJRM19JUkwzX01BUkssIFBUUDNfRk4pLAorCVBJTk1VWF9EQVRBKElSUTJfSVJMMl9NQVJLLCBQVFAyX0ZOKSwKKwlQSU5NVVhfREFUQShJUlExX0lSTDFfTUFSSywgUFRQMV9GTiksCisJUElOTVVYX0RBVEEoSVJRMF9JUkwwX01BUkssIFBUUDBfRk4pLAorCisJLyogUFRSIEZOICovCisJUElOTVVYX0RBVEEoQTI1X01BUkssIFBUUjdfRk4pLAorCVBJTk1VWF9EQVRBKEEyNF9NQVJLLCBQVFI2X0ZOKSwKKwlQSU5NVVhfREFUQShBMjNfTUFSSywgUFRSNV9GTiksCisJUElOTVVYX0RBVEEoQTIyX01BUkssIFBUUjRfRk4pLAorCVBJTk1VWF9EQVRBKEEyMV9NQVJLLCBQVFIzX0ZOKSwKKwlQSU5NVVhfREFUQShBMjBfTUFSSywgUFRSMl9GTiksCisJUElOTVVYX0RBVEEoQTE5X01BUkssIFBUUjFfRk4pLAorCVBJTk1VWF9EQVRBKEEwX01BUkssIFBUUjBfRk4pLAorCisJLyogUFRTIEZOICovCisJUElOTVVYX0RBVEEoU0lPRjBfU1lOQ19NQVJLLCBQVFM0X0ZOKSwKKwlQSU5NVVhfREFUQShTSU9GMF9NQ0xLX01BUkssIFBUUzNfRk4pLAorCVBJTk1VWF9EQVRBKFNJT0YwX1RYRF9NQVJLLCBQVFMyX0ZOKSwKKwlQSU5NVVhfREFUQShTSU9GMF9SWERfTUFSSywgUFRTMV9GTiksCisJUElOTVVYX0RBVEEoU0lPRjBfU0NLX01BUkssIFBUUzBfRk4pLAorCisJLyogUFRUIEZOICovCisJUElOTVVYX0RBVEEoU0NJRjBfQ1RTX01BUkssIFBTRUxCXzE1XzE0XzAwLCBQVFQ0X0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVE8xX01BUkssIFBTRUxCXzE1XzE0XzExLCBQVFQ0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SVFNfTUFSSywgUFNFTEJfMTVfMTRfMDAsIFBUVDNfRk4pLAorCVBJTk1VWF9EQVRBKFRQVV9UTzBfTUFSSywgUFNFTEJfMTVfMTRfMTEsIFBUVDNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1RYRF9NQVJLLCBQVFQyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SWERfTUFSSywgUFRUMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfU0NLX01BUkssIFBUVDBfRk4pLAorCisJLyogUFRVIEZOICovCisJUElOTVVYX0RBVEEoU0lPRjFfU1lOQ19NQVJLLCBQVFU0X0ZOKSwKKwlQSU5NVVhfREFUQShTSU9GMV9NQ0xLX01BUkssIFBTRUxEXzExXzEwXzAwLCBQVFUzX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkzQl9NQVJLLCBQU0VMRF8xMV8xMF8wMSwgUFRVM19GTiksCisJUElOTVVYX0RBVEEoU0lPRjFfVFhEX01BUkssIFBTRUxEXzE1XzE0XzAwLCBQVFUyX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkzQV9NQVJLLCBQU0VMRF8xNV8xNF8wMSwgUFRVMl9GTiksCisJUElOTVVYX0RBVEEoTU1DX0RBVF9NQVJLLCBQU0VMRF8xNV8xNF8xMCwgUFRVMl9GTiksCisJUElOTVVYX0RBVEEoU0lPRjFfUlhEX01BUkssIFBTRUxDXzEzXzEyXzAwLCBQVFUxX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkyQl9NQVJLLCBQU0VMQ18xM18xMl8wMSwgUFRVMV9GTiksCisJUElOTVVYX0RBVEEoTU1DX0NNRF9NQVJLLCBQU0VMQ18xM18xMl8xMCwgUFRVMV9GTiksCisJUElOTVVYX0RBVEEoU0lPRjFfU0NLX01BUkssIFBTRUxDXzE1XzE0XzAwLCBQVFUwX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkyQV9NQVJLLCBQU0VMQ18xNV8xNF8wMSwgUFRVMF9GTiksCisJUElOTVVYX0RBVEEoTU1DX0NMS19NQVJLLCBQU0VMQ18xNV8xNF8xMCwgUFRVMF9GTiksCisKKwkvKiBQVFYgRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGMV9DVFNfTUFSSywgUFNFTEJfMTFfMTBfMDAsIFBUVjRfRk4pLAorCVBJTk1VWF9EQVRBKFRQVV9UTzNfTUFSSywgUFNFTEJfMTFfMTBfMDEsIFBUVjRfRk4pLAorCVBJTk1VWF9EQVRBKE1NQ19WRERPTl9NQVJLLCBQU0VMQl8xMV8xMF8xMCwgUFRWNF9GTiksCisJUElOTVVYX0RBVEEoTENEX1ZFUFdDX01BUkssIFBTRUxCXzExXzEwXzExLCBQVFY0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9SVFNfTUFSSywgUFNFTEJfMTNfMTJfMDAsIFBUVjNfRk4pLAorCVBJTk1VWF9EQVRBKFRQVV9UTzJfTUFSSywgUFNFTEJfMTNfMTJfMDEsIFBUVjNfRk4pLAorCVBJTk1VWF9EQVRBKE1NQ19PRE1PRF9NQVJLLCBQU0VMQl8xM18xMl8xMCwgUFRWM19GTiksCisJUElOTVVYX0RBVEEoTENEX1ZDUFdDX01BUkssIFBTRUxCXzEzXzEyXzExLCBQVFYzX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9UWERfTUFSSywgUFNFTENfOV84XzAwLCBQVFYyX0ZOKSwKKwlQSU5NVVhfREFUQShTSU1fRF9NQVJLLCBQU0VMQ185XzhfMTAsIFBUVjJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYxX1JYRF9NQVJLLCBQU0VMQ18xMV8xMF8wMCwgUFRWMV9GTiksCisJUElOTVVYX0RBVEEoU0lNX1JTVF9NQVJLLCBQU0VMQ18xMV8xMF8xMCwgUFRWMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfU0NLX01BUkssIFBTRUxEXzFfMF8wMCwgUFRWMF9GTiksCisJUElOTVVYX0RBVEEoU0lNX0NMS19NQVJLLCBQU0VMRF8xXzBfMTAsIFBUVjBfRk4pLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKwkvKiBQVEEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUQTcsIFBUQTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEE2LCBQVEE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBNSwgUFRBNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTQsIFBUQTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEzLCBQVEEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMiwgUFRBMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTEsIFBUQTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEwLCBQVEEwX0RBVEEpLAorCisJLyogUFRCICovCisJUElOTVVYX0dQSU8oR1BJT19QVEI3LCBQVEI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCNiwgUFRCNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjUsIFBUQjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEI0LCBQVEI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMywgUFRCM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjIsIFBUQjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEIxLCBQVEIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMCwgUFRCMF9EQVRBKSwKKworCS8qIFBUQyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRDNywgUFRDN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzYsIFBUQzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEM1LCBQVEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDNCwgUFRDNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzMsIFBUQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEMyLCBQVEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDMSwgUFRDMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzAsIFBUQzBfREFUQSksCisKKwkvKiBQVEQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURDcsIFBURDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQ2LCBQVEQ2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRENSwgUFRENV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDQsIFBURDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQzLCBQVEQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFREMiwgUFREMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDEsIFBURDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQwLCBQVEQwX0RBVEEpLAorCisJLyogUFRFICovCisJUElOTVVYX0dQSU8oR1BJT19QVEU2LCBQVEU2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFNSwgUFRFNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTQsIFBURTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUzLCBQVEUzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFMiwgUFRFMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTEsIFBURTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUwLCBQVEUwX0RBVEEpLAorCisJLyogUFRGICovCisJUElOTVVYX0dQSU8oR1BJT19QVEY2LCBQVEY2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGNSwgUFRGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjQsIFBURjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYzLCBQVEYzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMiwgUFRGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjEsIFBURjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYwLCBQVEYwX0RBVEEpLAorCisJLyogUFRHICovCisJUElOTVVYX0dQSU8oR1BJT19QVEc2LCBQVEc2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHNSwgUFRHNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzQsIFBURzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEczLCBQVEczX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHMiwgUFRHMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzEsIFBURzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEcwLCBQVEcwX0RBVEEpLAorCisJLyogUFRIICovCisJUElOTVVYX0dQSU8oR1BJT19QVEg2LCBQVEg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRINSwgUFRINV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDQsIFBUSDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgzLCBQVEgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMiwgUFRIMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDEsIFBUSDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgwLCBQVEgwX0RBVEEpLAorCisJLyogUFRKICovCisJUElOTVVYX0dQSU8oR1BJT19QVEo2LCBQVEo2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKNSwgUFRKNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjQsIFBUSjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEozLCBQVEozX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKMiwgUFRKMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjEsIFBUSjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEowLCBQVEowX0RBVEEpLAorCisJLyogUFRLICovCisJUElOTVVYX0dQSU8oR1BJT19QVEszLCBQVEszX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMiwgUFRLMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzEsIFBUSzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEswLCBQVEswX0RBVEEpLAorCisJLyogUFRMICovCisJUElOTVVYX0dQSU8oR1BJT19QVEw3LCBQVEw3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMNiwgUFRMNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDUsIFBUTDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEw0LCBQVEw0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMywgUFRMM19EQVRBKSwKKworCS8qIFBUTSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRNNywgUFRNN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTYsIFBUTTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE01LCBQVE01X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNNCwgUFRNNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTMsIFBUTTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0yLCBQVE0yX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNMSwgUFRNMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTAsIFBUTTBfREFUQSksCisKKwkvKiBQVFAgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUUDQsIFBUUDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFAzLCBQVFAzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRQMiwgUFRQMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUDEsIFBUUDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFAwLCBQVFAwX0RBVEEpLAorCisJLyogUFRSICovCisJUElOTVVYX0dQSU8oR1BJT19QVFI3LCBQVFI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSNiwgUFRSNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjUsIFBUUjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFI0LCBQVFI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMywgUFRSM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjIsIFBUUjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFIxLCBQVFIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMCwgUFRSMF9EQVRBKSwKKworCS8qIFBUUyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRTNCwgUFRTNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzMsIFBUUzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMyLCBQVFMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTMSwgUFRTMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzAsIFBUUzBfREFUQSksCisKKwkvKiBQVFQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUVDQsIFBUVDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQzLCBQVFQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMiwgUFRUMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDEsIFBUVDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQwLCBQVFQwX0RBVEEpLAorCisJLyogUFRVICovCisJUElOTVVYX0dQSU8oR1BJT19QVFU0LCBQVFU0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMywgUFRVM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTIsIFBUVTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUxLCBQVFUxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMCwgUFRVMF9EQVRBKSwKKworCS8qIFBUViAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRWNCwgUFRWNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjMsIFBUVjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYyLCBQVFYyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMSwgUFRWMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjAsIFBUVjBfREFUQSksCisKKwkvKiBCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QzMSwgRDMxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDMwLCBEMzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjksIEQyOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyOCwgRDI4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI3LCBEMjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjYsIEQyNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNSwgRDI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI0LCBEMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjMsIEQyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyMiwgRDIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIxLCBEMjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjAsIEQyMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxOSwgRDE5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDE4LCBEMThfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTcsIEQxN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxNiwgRDE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU9JUzE2LCBJT0lTMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SQVMsIFJBU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NBUywgQ0FTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0tFLCBDS0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzVCX0NFMUEsIENTNUJfQ0UxQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTNkJfQ0UxQiwgQ1M2Ql9DRTFCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI1LCBBMjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjQsIEEyNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMywgQTIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIyLCBBMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjEsIEEyMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMCwgQTIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTE5LCBBMTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMCwgQTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SRUZPVVQsIFJFRk9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUU9VVCwgSVJRT1VUX01BUkspLAorCisJLyogTENEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExNSwgTENEX0RBVEExNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTQsIExDRF9EQVRBMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTEzLCBMQ0RfREFUQTEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExMiwgTENEX0RBVEExMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTEsIExDRF9EQVRBMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTEwLCBMQ0RfREFUQTEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE5LCBMQ0RfREFUQTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTgsIExDRF9EQVRBOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBNywgTENEX0RBVEE3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE2LCBMQ0RfREFUQTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTUsIExDRF9EQVRBNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBNCwgTENEX0RBVEE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEEzLCBMQ0RfREFUQTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTIsIExDRF9EQVRBMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMSwgTENEX0RBVEExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEEwLCBMQ0RfREFUQTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfTV9ESVNQLCBMQ0RfTV9ESVNQX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0NMMSwgTENEX0NMMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9DTDIsIExDRF9DTDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfRE9OLCBMQ0RfRE9OX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0ZMTSwgTENEX0ZMTV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9WRVBXQywgTENEX1ZFUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX1ZDUFdDLCBMQ0RfVkNQV0NfTUFSSyksCisKKwkvKiBBRkVJRiAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQUZFX1JYSU4sIEFGRV9SWElOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQUZFX1JERVQsIEFGRV9SREVUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQUZFX0ZTLCBBRkVfRlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRkVfVFhPVVQsIEFGRV9UWE9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FGRV9TQ0xLLCBBRkVfU0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FGRV9STFlDTlQsIEFGRV9STFlDTlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRkVfSEMxLCBBRkVfSEMxX01BUkspLAorCisJLyogSUlDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9JSUNfU0NMLCBJSUNfU0NMX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSUlDX1NEQSwgSUlDX1NEQV9NQVJLKSwKKworCS8qIERBQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fREExLCBEQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQTAsIERBMF9NQVJLKSwKKworCS8qIEFEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQU4zLCBBTjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BTjIsIEFOMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FOMSwgQU4xX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQU4wLCBBTjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRFRSRywgQURUUkdfTUFSSyksCisKKwkvKiBVU0IgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQjFEX1JDViwgVVNCMURfUkNWX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMURfVFhTRTAsIFVTQjFEX1RYU0UwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMURfVFhEUExTLCBVU0IxRF9UWERQTFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0IxRF9ETU5TLCBVU0IxRF9ETU5TX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMURfRFBMUywgVVNCMURfRFBMU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQjFEX1NQRUVELCBVU0IxRF9TUEVFRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQjFEX1RYRU5MLCBVU0IxRF9UWEVOTF9NQVJLKSwKKworCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMl9QV1JfRU4sIFVTQjJfUFdSX0VOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMV9QV1JfRU5fVVNCRl9VUExVUCwKKwkJICAgIFVTQjFfUFdSX0VOX1VTQkZfVVBMVVBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0IxRF9TVVNQRU5ELCBVU0IxRF9TVVNQRU5EX01BUkspLAorCisJLyogSU5UQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNSwgSVJRNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTQsIElSUTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEzX0lSTDMsIElSUTNfSVJMM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTJfSVJMMiwgSVJRMl9JUkwyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMV9JUkwxLCBJUlExX0lSTDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEwX0lSTDAsIElSUTBfSVJMMF9NQVJLKSwKKworCS8qIFBDQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fUENDX1JFRywgUENDX1JFR19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BDQ19EUlYsIFBDQ19EUlZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfQlZEMiwgUENDX0JWRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfQlZEMSwgUENDX0JWRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfQ0QyLCBQQ0NfQ0QyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUENDX0NEMSwgUENDX0NEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BDQ19SRVNFVCwgUENDX1JFU0VUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUENDX1JEWSwgUENDX1JEWV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BDQ19WUzIsIFBDQ19WUzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfVlMxLCBQQ0NfVlMxX01BUkspLAorCisJLyogSFVESSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMywgQVVEQVRBM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTIsIEFVREFUQTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEExLCBBVURBVEExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMCwgQVVEQVRBMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRENLLCBBVURDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRFNZTkMsIEFVRFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BU0VCUktBSywgQVNFQlJLQUtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUlNULCBUUlNUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVE1TLCBUTVNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9URE8sIFRET19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RESSwgVERJX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENLLCBUQ0tfTUFSSyksCisKKwkvKiBETUFDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMSwgREFDSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMSwgRFJFUTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMCwgREFDSzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMCwgRFJFUTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9URU5EMSwgVEVORDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9URU5EMCwgVEVORDBfTUFSSyksCisKKwkvKiBTSU9GMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfU1lOQywgU0lPRjBfU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX01DTEssIFNJT0YwX01DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9UWEQsIFNJT0YwX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX1JYRCwgU0lPRjBfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfU0NLLCBTSU9GMF9TQ0tfTUFSSyksCisKKwkvKiBTSU9GMSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU1lOQywgU0lPRjFfU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX01DTEssIFNJT0YxX01DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMV9UWEQsIFNJT0YxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1JYRCwgU0lPRjFfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU0NLLCBTSU9GMV9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfVFhELCBTQ0lGMF9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9SWEQsIFNDSUYwX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1JUUywgU0NJRjBfUlRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfQ1RTLCBTQ0lGMF9DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9TQ0ssIFNDSUYwX1NDS19NQVJLKSwKKworCS8qIFNDSUYxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9UWEQsIFNDSUYxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1JYRCwgU0NJRjFfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUlRTLCBTQ0lGMV9SVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9DVFMsIFNDSUYxX0NUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1NDSywgU0NJRjFfU0NLX01BUkspLAorCisJLyogVFBVICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUFVfVE8xLCBUUFVfVE8xX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFBVX1RPMCwgVFBVX1RPMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTNCLCBUUFVfVEkzQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTNBLCBUUFVfVEkzQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTJCLCBUUFVfVEkyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTJBLCBUUFVfVEkyQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9UTzMsIFRQVV9UTzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUFVfVE8yLCBUUFVfVE8yX01BUkspLAorCisJLyogU0lNICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fRCwgU0lNX0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fQ0xLLCBTSU1fQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lNX1JTVCwgU0lNX1JTVF9NQVJLKSwKKworCS8qIE1NQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTU1DX0RBVCwgTU1DX0RBVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01NQ19DTUQsIE1NQ19DTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NTUNfQ0xLLCBNTUNfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTU1DX1ZERE9OLCBNTUNfVkRET05fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NTUNfT0RNT0QsIE1NQ19PRE1PRF9NQVJLKSwKKworCS8qIFNZU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NUQVRVUzAsIFNUQVRVUzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TVEFUVVMxLCBTVEFUVVMxX01BUkspLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyBwaW5tdXhfY29uZmlnX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQUNSIiwgMHhhNDA1MDEwMCwgMTYsIDIpIHsKKwkJUFRBN19GTiwgUFRBN19PVVQsIFBUQTdfSU5fUFUsIFBUQTdfSU4sCisJCVBUQTZfRk4sIFBUQTZfT1VULCBQVEE2X0lOX1BVLCBQVEE2X0lOLAorCQlQVEE1X0ZOLCBQVEE1X09VVCwgUFRBNV9JTl9QVSwgUFRBNV9JTiwKKwkJUFRBNF9GTiwgUFRBNF9PVVQsIFBUQTRfSU5fUFUsIFBUQTRfSU4sCisJCVBUQTNfRk4sIFBUQTNfT1VULCBQVEEzX0lOX1BVLCBQVEEzX0lOLAorCQlQVEEyX0ZOLCBQVEEyX09VVCwgUFRBMl9JTl9QVSwgUFRBMl9JTiwKKwkJUFRBMV9GTiwgUFRBMV9PVVQsIFBUQTFfSU5fUFUsIFBUQTFfSU4sCisJCVBUQTBfRk4sIFBUQTBfT1VULCBQVEEwX0lOX1BVLCBQVEEwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBCQ1IiLCAweGE0MDUwMTAyLCAxNiwgMikgeworCQlQVEI3X0ZOLCBQVEI3X09VVCwgUFRCN19JTl9QVSwgUFRCN19JTiwKKwkJUFRCNl9GTiwgUFRCNl9PVVQsIFBUQjZfSU5fUFUsIFBUQjZfSU4sCisJCVBUQjVfRk4sIFBUQjVfT1VULCBQVEI1X0lOX1BVLCBQVEI1X0lOLAorCQlQVEI0X0ZOLCBQVEI0X09VVCwgUFRCNF9JTl9QVSwgUFRCNF9JTiwKKwkJUFRCM19GTiwgUFRCM19PVVQsIFBUQjNfSU5fUFUsIFBUQjNfSU4sCisJCVBUQjJfRk4sIFBUQjJfT1VULCBQVEIyX0lOX1BVLCBQVEIyX0lOLAorCQlQVEIxX0ZOLCBQVEIxX09VVCwgUFRCMV9JTl9QVSwgUFRCMV9JTiwKKwkJUFRCMF9GTiwgUFRCMF9PVVQsIFBUQjBfSU5fUFUsIFBUQjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUiIsIDB4YTQwNTAxMDQsIDE2LCAyKSB7CisJCVBUQzdfRk4sIFBUQzdfT1VULCBQVEM3X0lOX1BVLCBQVEM3X0lOLAorCQlQVEM2X0ZOLCBQVEM2X09VVCwgUFRDNl9JTl9QVSwgUFRDNl9JTiwKKwkJUFRDNV9GTiwgUFRDNV9PVVQsIFBUQzVfSU5fUFUsIFBUQzVfSU4sCisJCVBUQzRfRk4sIFBUQzRfT1VULCBQVEM0X0lOX1BVLCBQVEM0X0lOLAorCQlQVEMzX0ZOLCBQVEMzX09VVCwgUFRDM19JTl9QVSwgUFRDM19JTiwKKwkJUFRDMl9GTiwgUFRDMl9PVVQsIFBUQzJfSU5fUFUsIFBUQzJfSU4sCisJCVBUQzFfRk4sIFBUQzFfT1VULCBQVEMxX0lOX1BVLCBQVEMxX0lOLAorCQlQVEMwX0ZOLCBQVEMwX09VVCwgUFRDMF9JTl9QVSwgUFRDMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSIiwgMHhhNDA1MDEwNiwgMTYsIDIpIHsKKwkJUFREN19GTiwgUFREN19PVVQsIFBURDdfSU5fUFUsIFBURDdfSU4sCisJCVBURDZfRk4sIFBURDZfT1VULCBQVEQ2X0lOX1BVLCBQVEQ2X0lOLAorCQlQVEQ1X0ZOLCBQVEQ1X09VVCwgUFRENV9JTl9QVSwgUFRENV9JTiwKKwkJUFRENF9GTiwgUFRENF9PVVQsIFBURDRfSU5fUFUsIFBURDRfSU4sCisJCVBURDNfRk4sIFBURDNfT1VULCBQVEQzX0lOX1BVLCBQVEQzX0lOLAorCQlQVEQyX0ZOLCBQVEQyX09VVCwgUFREMl9JTl9QVSwgUFREMl9JTiwKKwkJUFREMV9GTiwgUFREMV9PVVQsIFBURDFfSU5fUFUsIFBURDFfSU4sCisJCVBURDBfRk4sIFBURDBfT1VULCBQVEQwX0lOX1BVLCBQVEQwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1IiLCAweGE0MDUwMTA4LCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlQVEU2X0ZOLCAwLCAwLCBQVEU2X0lOLAorCQlQVEU1X0ZOLCAwLCAwLCBQVEU1X0lOLAorCQlQVEU0X0ZOLCBQVEU0X09VVCwgUFRFNF9JTl9QVSwgUFRFNF9JTiwKKwkJUFRFM19GTiwgUFRFM19PVVQsIFBURTNfSU5fUFUsIFBURTNfSU4sCisJCVBURTJfRk4sIFBURTJfT1VULCBQVEUyX0lOX1BVLCBQVEUyX0lOLAorCQlQVEUxX0ZOLCBQVEUxX09VVCwgUFRFMV9JTl9QVSwgUFRFMV9JTiwKKwkJUFRFMF9GTiwgUFRFMF9PVVQsIFBURTBfSU5fUFUsIFBURTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUiIsIDB4YTQwNTAxMGEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVBURjZfRk4sIDAsIDAsIFBURjZfSU4sCisJCVBURjVfRk4sIDAsIDAsIFBURjVfSU4sCisJCVBURjRfRk4sIDAsIDAsIFBURjRfSU4sCisJCVBURjNfRk4sIDAsIDAsIFBURjNfSU4sCisJCVBURjJfRk4sIDAsIDAsIFBURjJfSU4sCisJCVBURjFfRk4sIDAsIDAsIFBURjFfSU4sCisJCVBURjBfRk4sIDAsIDAsIFBURjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEdDUiIsIDB4YTQwNTAxMGMsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVBURzZfRk4sIFBURzZfT1VULCBQVEc2X0lOX1BVLCBQVEc2X0lOLAorCQlQVEc1X0ZOLCBQVEc1X09VVCwgUFRHNV9JTl9QVSwgUFRHNV9JTiwKKwkJUFRHNF9GTiwgUFRHNF9PVVQsIFBURzRfSU5fUFUsIFBURzRfSU4sCisJCVBURzNfRk4sIFBURzNfT1VULCBQVEczX0lOX1BVLCBQVEczX0lOLAorCQlQVEcyX0ZOLCBQVEcyX09VVCwgUFRHMl9JTl9QVSwgUFRHMl9JTiwKKwkJUFRHMV9GTiwgUFRHMV9PVVQsIFBURzFfSU5fUFUsIFBURzFfSU4sCisJCVBURzBfRk4sIFBURzBfT1VULCBQVEcwX0lOX1BVLCBQVEcwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBIQ1IiLCAweGE0MDUwMTBlLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlQVEg2X0ZOLCBQVEg2X09VVCwgUFRINl9JTl9QVSwgUFRINl9JTiwKKwkJUFRINV9GTiwgUFRINV9PVVQsIFBUSDVfSU5fUFUsIFBUSDVfSU4sCisJCVBUSDRfRk4sIFBUSDRfT1VULCBQVEg0X0lOX1BVLCBQVEg0X0lOLAorCQlQVEgzX0ZOLCBQVEgzX09VVCwgUFRIM19JTl9QVSwgUFRIM19JTiwKKwkJUFRIMl9GTiwgUFRIMl9PVVQsIFBUSDJfSU5fUFUsIFBUSDJfSU4sCisJCVBUSDFfRk4sIFBUSDFfT1VULCBQVEgxX0lOX1BVLCBQVEgxX0lOLAorCQlQVEgwX0ZOLCBQVEgwX09VVCwgUFRIMF9JTl9QVSwgUFRIMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQSkNSIiwgMHhhNDA1MDExMCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJUFRKNl9GTiwgUFRKNl9PVVQsIFBUSjZfSU5fUFUsIFBUSjZfSU4sCisJCVBUSjVfRk4sIFBUSjVfT1VULCBQVEo1X0lOX1BVLCBQVEo1X0lOLAorCQlQVEo0X0ZOLCBQVEo0X09VVCwgUFRKNF9JTl9QVSwgUFRKNF9JTiwKKwkJUFRKM19GTiwgUFRKM19PVVQsIFBUSjNfSU5fUFUsIFBUSjNfSU4sCisJCVBUSjJfRk4sIFBUSjJfT1VULCBQVEoyX0lOX1BVLCBQVEoyX0lOLAorCQlQVEoxX0ZOLCBQVEoxX09VVCwgUFRKMV9JTl9QVSwgUFRKMV9JTiwKKwkJUFRKMF9GTiwgUFRKMF9PVVQsIFBUSjBfSU5fUFUsIFBUSjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEtDUiIsIDB4YTQwNTAxMTIsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUSzNfRk4sIFBUSzNfT1VULCBQVEszX0lOX1BVLCBQVEszX0lOLAorCQlQVEsyX0ZOLCBQVEsyX09VVCwgUFRLMl9JTl9QVSwgUFRLMl9JTiwKKwkJUFRLMV9GTiwgUFRLMV9PVVQsIFBUSzFfSU5fUFUsIFBUSzFfSU4sCisJCVBUSzBfRk4sIFBUSzBfT1VULCBQVEswX0lOX1BVLCBQVEswX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBMQ1IiLCAweGE0MDUwMTE0LCAxNiwgMikgeworCQlQVEw3X0ZOLCBQVEw3X09VVCwgUFRMN19JTl9QVSwgUFRMN19JTiwKKwkJUFRMNl9GTiwgUFRMNl9PVVQsIFBUTDZfSU5fUFUsIFBUTDZfSU4sCisJCVBUTDVfRk4sIFBUTDVfT1VULCBQVEw1X0lOX1BVLCBQVEw1X0lOLAorCQlQVEw0X0ZOLCBQVEw0X09VVCwgUFRMNF9JTl9QVSwgUFRMNF9JTiwKKwkJUFRMM19GTiwgUFRMM19PVVQsIFBUTDNfSU5fUFUsIFBUTDNfSU4sCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUE1DUiIsIDB4YTQwNTAxMTYsIDE2LCAyKSB7CisJCVBUTTdfRk4sIFBUTTdfT1VULCBQVE03X0lOX1BVLCBQVE03X0lOLAorCQlQVE02X0ZOLCBQVE02X09VVCwgUFRNNl9JTl9QVSwgUFRNNl9JTiwKKwkJUFRNNV9GTiwgUFRNNV9PVVQsIFBUTTVfSU5fUFUsIFBUTTVfSU4sCisJCVBUTTRfRk4sIFBUTTRfT1VULCBQVE00X0lOX1BVLCBQVE00X0lOLAorCQlQVE0zX0ZOLCBQVE0zX09VVCwgUFRNM19JTl9QVSwgUFRNM19JTiwKKwkJUFRNMl9GTiwgUFRNMl9PVVQsIFBUTTJfSU5fUFUsIFBUTTJfSU4sCisJCVBUTTFfRk4sIFBUTTFfT1VULCBQVE0xX0lOX1BVLCBQVE0xX0lOLAorCQlQVE0wX0ZOLCBQVE0wX09VVCwgUFRNMF9JTl9QVSwgUFRNMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQUENSIiwgMHhhNDA1MDExOCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRQNF9GTiwgUFRQNF9PVVQsIFBUUDRfSU5fUFUsIFBUUDRfSU4sCisJCVBUUDNfRk4sIFBUUDNfT1VULCBQVFAzX0lOX1BVLCBQVFAzX0lOLAorCQlQVFAyX0ZOLCBQVFAyX09VVCwgUFRQMl9JTl9QVSwgUFRQMl9JTiwKKwkJUFRQMV9GTiwgUFRQMV9PVVQsIFBUUDFfSU5fUFUsIFBUUDFfSU4sCisJCVBUUDBfRk4sIFBUUDBfT1VULCBQVFAwX0lOX1BVLCBQVFAwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBSQ1IiLCAweGE0MDUwMTFhLCAxNiwgMikgeworCQlQVFI3X0ZOLCBQVFI3X09VVCwgUFRSN19JTl9QVSwgUFRSN19JTiwKKwkJUFRSNl9GTiwgUFRSNl9PVVQsIFBUUjZfSU5fUFUsIFBUUjZfSU4sCisJCVBUUjVfRk4sIFBUUjVfT1VULCBQVFI1X0lOX1BVLCBQVFI1X0lOLAorCQlQVFI0X0ZOLCBQVFI0X09VVCwgUFRSNF9JTl9QVSwgUFRSNF9JTiwKKwkJUFRSM19GTiwgUFRSM19PVVQsIFBUUjNfSU5fUFUsIFBUUjNfSU4sCisJCVBUUjJfRk4sIFBUUjJfT1VULCBQVFIyX0lOX1BVLCBQVFIyX0lOLAorCQlQVFIxX0ZOLCBQVFIxX09VVCwgUFRSMV9JTl9QVSwgUFRSMV9JTiwKKwkJUFRSMF9GTiwgUFRSMF9PVVQsIFBUUjBfSU5fUFUsIFBUUjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNDUiIsIDB4YTQwNTAxMWMsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUUzRfRk4sIFBUUzRfT1VULCBQVFM0X0lOX1BVLCBQVFM0X0lOLAorCQlQVFMzX0ZOLCBQVFMzX09VVCwgUFRTM19JTl9QVSwgUFRTM19JTiwKKwkJUFRTMl9GTiwgUFRTMl9PVVQsIFBUUzJfSU5fUFUsIFBUUzJfSU4sCisJCVBUUzFfRk4sIFBUUzFfT1VULCBQVFMxX0lOX1BVLCBQVFMxX0lOLAorCQlQVFMwX0ZOLCBQVFMwX09VVCwgUFRTMF9JTl9QVSwgUFRTMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVENSIiwgMHhhNDA1MDExZSwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRUNF9GTiwgUFRUNF9PVVQsIFBUVDRfSU5fUFUsIFBUVDRfSU4sCisJCVBUVDNfRk4sIFBUVDNfT1VULCBQVFQzX0lOX1BVLCBQVFQzX0lOLAorCQlQVFQyX0ZOLCBQVFQyX09VVCwgUFRUMl9JTl9QVSwgUFRUMl9JTiwKKwkJUFRUMV9GTiwgUFRUMV9PVVQsIFBUVDFfSU5fUFUsIFBUVDFfSU4sCisJCVBUVDBfRk4sIFBUVDBfT1VULCBQVFQwX0lOX1BVLCBQVFQwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBVQ1IiLCAweGE0MDUwMTIwLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQVFU0X0ZOLCBQVFU0X09VVCwgUFRVNF9JTl9QVSwgUFRVNF9JTiwKKwkJUFRVM19GTiwgUFRVM19PVVQsIFBUVTNfSU5fUFUsIFBUVTNfSU4sCisJCVBUVTJfRk4sIFBUVTJfT1VULCBQVFUyX0lOX1BVLCBQVFUyX0lOLAorCQlQVFUxX0ZOLCBQVFUxX09VVCwgUFRVMV9JTl9QVSwgUFRVMV9JTiwKKwkJUFRVMF9GTiwgUFRVMF9PVVQsIFBUVTBfSU5fUFUsIFBUVTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFZDUiIsIDB4YTQwNTAxMjIsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUVjRfRk4sIFBUVjRfT1VULCBQVFY0X0lOX1BVLCBQVFY0X0lOLAorCQlQVFYzX0ZOLCBQVFYzX09VVCwgUFRWM19JTl9QVSwgUFRWM19JTiwKKwkJUFRWMl9GTiwgUFRWMl9PVVQsIFBUVjJfSU5fUFUsIFBUVjJfSU4sCisJCVBUVjFfRk4sIFBUVjFfT1VULCBQVFYxX0lOX1BVLCBQVFYxX0lOLAorCQlQVFYwX0ZOLCBQVFYwX09VVCwgUFRWMF9JTl9QVSwgUFRWMF9JTiB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSIiwgMHhhNDA1MDE0MCwgOCkgeworCQlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJCVBUQTNfREFUQSwgUFRBMl9EQVRBLCBQVEExX0RBVEEsIFBUQTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEJEUiIsIDB4YTQwNTAxNDIsIDgpIHsKKwkJUFRCN19EQVRBLCBQVEI2X0RBVEEsIFBUQjVfREFUQSwgUFRCNF9EQVRBLAorCQlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBDRFIiLCAweGE0MDUwMTQ0LCA4KSB7CisJCVBUQzdfREFUQSwgUFRDNl9EQVRBLCBQVEM1X0RBVEEsIFBUQzRfREFUQSwKKwkJUFRDM19EQVRBLCBQVEMyX0RBVEEsIFBUQzFfREFUQSwgUFRDMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRERSIiwgMHhhNDA1MDEyNiwgOCkgeworCQlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJCVBURDNfREFUQSwgUFREMl9EQVRBLCBQVEQxX0RBVEEsIFBURDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEVEUiIsIDB4YTQwNTAxNDgsIDgpIHsKKwkJMCwgUFRFNl9EQVRBLCBQVEU1X0RBVEEsIFBURTRfREFUQSwKKwkJUFRFM19EQVRBLCBQVEUyX0RBVEEsIFBURTFfREFUQSwgUFRFMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRkRSIiwgMHhhNDA1MDE0YSwgOCkgeworCQkwLCBQVEY2X0RBVEEsIFBURjVfREFUQSwgUFRGNF9EQVRBLAorCQlQVEYzX0RBVEEsIFBURjJfREFUQSwgUFRGMV9EQVRBLCBQVEYwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBHRFIiLCAweGE0MDUwMTRjLCA4KSB7CisJCTAsIFBURzZfREFUQSwgUFRHNV9EQVRBLCBQVEc0X0RBVEEsCisJCVBURzNfREFUQSwgUFRHMl9EQVRBLCBQVEcxX0RBVEEsIFBURzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEhEUiIsIDB4YTQwNTAxNGUsIDgpIHsKKwkJMCwgUFRINl9EQVRBLCBQVEg1X0RBVEEsIFBUSDRfREFUQSwKKwkJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhhNDA1MDE1MCwgOCkgeworCQkwLCBQVEo2X0RBVEEsIFBUSjVfREFUQSwgUFRKNF9EQVRBLAorCQlQVEozX0RBVEEsIFBUSjJfREFUQSwgUFRKMV9EQVRBLCBQVEowX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBLRFIiLCAweGE0MDUwMTUyLCA4KSB7CisJCTAsIDAsIDAsIDAsCisJCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUExEUiIsIDB4YTQwNTAxNTQsIDgpIHsKKwkJUFRMN19EQVRBLCBQVEw2X0RBVEEsIFBUTDVfREFUQSwgUFRMNF9EQVRBLAorCQlQVEwzX0RBVEEsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBNRFIiLCAweGE0MDUwMTU2LCA4KSB7CisJCVBUTTdfREFUQSwgUFRNNl9EQVRBLCBQVE01X0RBVEEsIFBUTTRfREFUQSwKKwkJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQUERSIiwgMHhhNDA1MDE1OCwgOCkgeworCQkwLCAwLCAwLCBQVFA0X0RBVEEsCisJCVBUUDNfREFUQSwgUFRQMl9EQVRBLCBQVFAxX0RBVEEsIFBUUDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFJEUiIsIDB4YTQwNTAxNWEsIDgpIHsKKwkJUFRSN19EQVRBLCBQVFI2X0RBVEEsIFBUUjVfREFUQSwgUFRSNF9EQVRBLAorCQlQVFIzX0RBVEEsIFBUUjJfREFUQSwgUFRSMV9EQVRBLCBQVFIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBTRFIiLCAweGE0MDUwMTVjLCA4KSB7CisJCTAsIDAsIDAsIFBUUzRfREFUQSwKKwkJUFRTM19EQVRBLCBQVFMyX0RBVEEsIFBUUzFfREFUQSwgUFRTMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQVERSIiwgMHhhNDA1MDE1ZSwgOCkgeworCQkwLCAwLCAwLCBQVFQ0X0RBVEEsCisJCVBUVDNfREFUQSwgUFRUMl9EQVRBLCBQVFQxX0RBVEEsIFBUVDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFVEUiIsIDB4YTQwNTAxNjAsIDgpIHsKKwkJMCwgMCwgMCwgUFRVNF9EQVRBLAorCQlQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBWRFIiLCAweGE0MDUwMTYyLCA4KSB7CisJCTAsIDAsIDAsIFBUVjRfREFUQSwKKwkJUFRWM19EQVRBLCBQVFYyX0RBVEEsIFBUVjFfREFUQSwgUFRWMF9EQVRBIH0KKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gc2g3NzIwX3Bpbm11eF9pbmZvID0geworCS5uYW1lID0gInNoNzcyMF9wZmMiLAorCS5yZXNlcnZlZF9pZCA9IFBJTk1VWF9SRVNFUlZFRCwKKwkuZGF0YSA9IHsgUElOTVVYX0RBVEFfQkVHSU4sIFBJTk1VWF9EQVRBX0VORCB9LAorCS5pbnB1dCA9IHsgUElOTVVYX0lOUFVUX0JFR0lOLCBQSU5NVVhfSU5QVVRfRU5EIH0sCisJLmlucHV0X3B1ID0geyBQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5EIH0sCisJLm1hcmsgPSB7IFBJTk1VWF9NQVJLX0JFR0lOLCBQSU5NVVhfTUFSS19FTkQgfSwKKwkuZnVuY3Rpb24gPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLmZpcnN0X2dwaW8gPSBHUElPX1BUQTcsCisJLmxhc3RfZ3BpbyA9IEdQSU9fRk5fU1RBVFVTMSwKKworCS5ncGlvcyA9IHBpbm11eF9ncGlvcywKKwkuY2ZnX3JlZ3MgPSBwaW5tdXhfY29uZmlnX3JlZ3MsCisJLmRhdGFfcmVncyA9IHBpbm11eF9kYXRhX3JlZ3MsCisKKwkuZ3Bpb19kYXRhID0gcGlubXV4X2RhdGEsCisJLmdwaW9fZGF0YV9zaXplID0gQVJSQVlfU0laRShwaW5tdXhfZGF0YSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbGF0X3Bpbm11eF9zZXR1cCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9waW5tdXgoJnNoNzcyMF9waW5tdXhfaW5mbyk7Cit9CisKK2FyY2hfaW5pdGNhbGwocGxhdF9waW5tdXhfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZnB1LmMKaW5kZXggMmQ0NTJmNi4uMjc4MDkxNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2ZwdS5jCkBAIC0zNiw3ICszNiw3IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGZsb2F0NjRfc3ViKHVuc2lnbmVkIGxvbmcgbG9uZyBhLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBiKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGludCBmbG9hdDMyX3N1Yih1bnNpZ25lZCBsb25nIGludCBhLCB1bnNpZ25lZCBsb25nIGludCBiKTsKLQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IGZsb2F0NjRfdG9fZmxvYXQzMih1bnNpZ25lZCBsb25nIGxvbmcgYSk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGZwdV9leGNlcHRpb25fZmxhZ3M7CiAKIC8qCkBAIC00MTcsNiArNDE3LDI5IEBACiAKIAkJcmVncy0+cGMgPSBuZXh0cGM7CiAJCXJldHVybiAxOworCX0gZWxzZSBpZiAoKGZpbnNuICYgMHhmMGJkKSA9PSAweGYwYmQpIHsKKwkJLyogZmNudmRzIC0gZG91YmxlIHRvIHNpbmdsZSBwcmVjaXNpb24gY29udmVydCAqLworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisJCWludCBtOworCQl1bnNpZ25lZCBpbnQgaHg7CisKKwkJbSA9IChmaW5zbiA+PiA5KSAmIDB4NzsKKwkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOworCisJCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKKwkJCSYmICgoaHggJiAweDdmZmZmZmZmKSA8IDB4MDAxMDAwMDApKSB7CisJCQkvKiBzdWJub3JtYWwgZG91YmxlIHRvIGZsb2F0IGNvbnZlcnNpb24gKi8KKwkJCWxvbmcgbG9uZyBsbHg7CisKKwkJCWxseCA9ICgobG9uZyBsb25nKXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV0gPDwgMzIpCisJCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKworCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnB1bCA9IGZsb2F0NjRfdG9fZmxvYXQzMihsbHgpOworCQl9IGVsc2UKKwkJCXJldHVybiAwOworCisJCXJlZ3MtPnBjID0gbmV4dHBjOworCQlyZXR1cm4gMTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCmluZGV4IDI1NGM1YzUuLmQ5YmRjOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKQEAgLTE3OCwxMCArMTc5LDE0IEBACiB9CiBfX2luaXRjYWxsKHNoNzc2MF9kZXZpY2VzX3NldHVwKTsKIAorI2RlZmluZSBJTlRDX0lDUgkweGZmZDAwMDAwVUwKKyNkZWZpbmUgSU5UQ19JQ1JfSVJMTQkoMSA8PCA3KQorCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cF9waW5zKGludCBtb2RlKQogewogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJROgorCQljdHJsX291dHcoY3RybF9pbncoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnEpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zb2Z0ZmxvYXQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc29mdGZsb2F0LmMKaW5kZXggODI4Y2I1Ny4uMmI3NDdmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zb2Z0ZmxvYXQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NvZnRmbG9hdC5jCkBAIC04NSw2ICs4NSw3IEBACiBmbG9hdDMyIGZsb2F0MzJfZGl2KGZsb2F0MzIgYSwgZmxvYXQzMiBiKTsKIGZsb2F0MzIgZmxvYXQzMl9tdWwoZmxvYXQzMiBhLCBmbG9hdDMyIGIpOwogZmxvYXQ2NCBmbG9hdDY0X211bChmbG9hdDY0IGEsIGZsb2F0NjQgYik7CitmbG9hdDMyIGZsb2F0NjRfdG9fZmxvYXQzMihmbG9hdDY0IGEpOwogaW5saW5lIHZvaWQgYWRkMTI4KGJpdHM2NCBhMCwgYml0czY0IGExLCBiaXRzNjQgYjAsIGJpdHM2NCBiMSwgYml0czY0ICogejBQdHIsCiAJCSAgIGJpdHM2NCAqIHoxUHRyKTsKIGlubGluZSB2b2lkIHN1YjEyOChiaXRzNjQgYTAsIGJpdHM2NCBhMSwgYml0czY0IGIwLCBiaXRzNjQgYjEsIGJpdHM2NCAqIHowUHRyLApAQCAtODkwLDMgKzg5MSwzMSBAQAogCX0KIAlyZXR1cm4gcm91bmRBbmRQYWNrRmxvYXQ2NCh6U2lnbiwgekV4cCwgelNpZzApOwogfQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFJldHVybnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlCisgKiAgYGEnIHRvIHRoZSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4gIFRoZSBjb252ZXJzaW9uIGlzCisgKiAgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludAorICogIEFyaXRobWV0aWMuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICovCitmbG9hdDMyIGZsb2F0NjRfdG9fZmxvYXQzMihmbG9hdDY0IGEpCit7CisgICAgZmxhZyBhU2lnbjsKKyAgICBpbnQxNiBhRXhwOworICAgIGJpdHM2NCBhU2lnOworICAgIGJpdHMzMiB6U2lnOworCisgICAgYVNpZyA9IGV4dHJhY3RGbG9hdDY0RnJhYyggYSApOworICAgIGFFeHAgPSBleHRyYWN0RmxvYXQ2NEV4cCggYSApOworICAgIGFTaWduID0gZXh0cmFjdEZsb2F0NjRTaWduKCBhICk7CisKKyAgICBzaGlmdDY0UmlnaHRKYW1taW5nKCBhU2lnLCAyMiwgJmFTaWcgKTsKKyAgICB6U2lnID0gYVNpZzsKKyAgICBpZiAoIGFFeHAgfHwgelNpZyApIHsKKyAgICAgICAgelNpZyB8PSAweDQwMDAwMDAwOworICAgICAgICBhRXhwIC09IDB4MzgxOworICAgIH0KKyAgICByZXR1cm4gcm91bmRBbmRQYWNrRmxvYXQzMihhU2lnbiwgYUV4cCwgelNpZyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCmluZGV4IDkzODFhZDguLmJlOWEwYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCkBAIC0yNyw1ICsyNywxMCBAQAogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2KQk6PSBjbG9jay1zaDc3MjIubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykJOj0gY2xvY2stc2h4My5vCiAKKyMgUGlubXV4IHNldHVwCitwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQk6PSBwaW5tdXgtc2g3NzIyLm8KK3Bpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCTo9IHBpbm11eC1zaDc3MjMubworCiBvYmoteQkJCSs9ICQoY2xvY2steSkKIG9iai0kKENPTkZJR19TTVApCSs9ICQoc21wLXkpCitvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSAkKHBpbm11eC15KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOWQwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIyLmMKQEAgLTAsMCArMSwxNzgzIEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CisKK2VudW0geworCVBJTk1VWF9SRVNFUlZFRCA9IDAsCisKKwlQSU5NVVhfREFUQV9CRUdJTiwKKwlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJUFRBM19EQVRBLCBQVEEyX0RBVEEsIFBUQTFfREFUQSwgUFRBMF9EQVRBLAorCVBUQjdfREFUQSwgUFRCNl9EQVRBLCBQVEI1X0RBVEEsIFBUQjRfREFUQSwKKwlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEsCisJUFRDN19EQVRBLCBQVEM1X0RBVEEsIFBUQzRfREFUQSwgUFRDM19EQVRBLCBQVEMyX0RBVEEsIFBUQzBfREFUQSwKKwlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJUFREM19EQVRBLCBQVEQyX0RBVEEsIFBURDFfREFUQSwgUFREMF9EQVRBLAorCVBURTdfREFUQSwgUFRFNl9EQVRBLCBQVEU1X0RBVEEsIFBURTRfREFUQSwgUFRFMV9EQVRBLCBQVEUwX0RBVEEsCisJUFRGNl9EQVRBLCBQVEY1X0RBVEEsIFBURjRfREFUQSwKKwlQVEYzX0RBVEEsIFBURjJfREFUQSwgUFRGMV9EQVRBLCBQVEYwX0RBVEEsCisJUFRHNF9EQVRBLCBQVEczX0RBVEEsIFBURzJfREFUQSwgUFRHMV9EQVRBLCBQVEcwX0RBVEEsCisJUFRIN19EQVRBLCBQVEg2X0RBVEEsIFBUSDVfREFUQSwgUFRINF9EQVRBLAorCVBUSDNfREFUQSwgUFRIMl9EQVRBLCBQVEgxX0RBVEEsIFBUSDBfREFUQSwKKwlQVEo3X0RBVEEsIFBUSjZfREFUQSwgUFRKNV9EQVRBLCBQVEoxX0RBVEEsIFBUSjBfREFUQSwKKwlQVEs2X0RBVEEsIFBUSzVfREFUQSwgUFRLNF9EQVRBLAorCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSwKKwlQVEw3X0RBVEEsIFBUTDZfREFUQSwgUFRMNV9EQVRBLCBQVEw0X0RBVEEsCisJUFRMM19EQVRBLCBQVEwyX0RBVEEsIFBUTDFfREFUQSwgUFRMMF9EQVRBLAorCVBUTTdfREFUQSwgUFRNNl9EQVRBLCBQVE01X0RBVEEsIFBUTTRfREFUQSwKKwlQVE0zX0RBVEEsIFBUTTJfREFUQSwgUFRNMV9EQVRBLCBQVE0wX0RBVEEsCisJUFRON19EQVRBLCBQVE42X0RBVEEsIFBUTjVfREFUQSwgUFRONF9EQVRBLAorCVBUTjNfREFUQSwgUFROMl9EQVRBLCBQVE4xX0RBVEEsIFBUTjBfREFUQSwKKwlQVFE2X0RBVEEsIFBUUTVfREFUQSwgUFRRNF9EQVRBLAorCVBUUTNfREFUQSwgUFRRMl9EQVRBLCBQVFExX0RBVEEsIFBUUTBfREFUQSwKKwlQVFI0X0RBVEEsIFBUUjNfREFUQSwgUFRSMl9EQVRBLCBQVFIxX0RBVEEsIFBUUjBfREFUQSwKKwlQVFM0X0RBVEEsIFBUUzNfREFUQSwgUFRTMl9EQVRBLCBQVFMxX0RBVEEsIFBUUzBfREFUQSwKKwlQVFQ0X0RBVEEsIFBUVDNfREFUQSwgUFRUMl9EQVRBLCBQVFQxX0RBVEEsIFBUVDBfREFUQSwKKwlQVFU0X0RBVEEsIFBUVTNfREFUQSwgUFRVMl9EQVRBLCBQVFUxX0RBVEEsIFBUVTBfREFUQSwKKwlQVFY0X0RBVEEsIFBUVjNfREFUQSwgUFRWMl9EQVRBLCBQVFYxX0RBVEEsIFBUVjBfREFUQSwKKwlQVFc2X0RBVEEsIFBUVzVfREFUQSwgUFRXNF9EQVRBLAorCVBUVzNfREFUQSwgUFRXMl9EQVRBLCBQVFcxX0RBVEEsIFBUVzBfREFUQSwKKwlQVFg2X0RBVEEsIFBUWDVfREFUQSwgUFRYNF9EQVRBLAorCVBUWDNfREFUQSwgUFRYMl9EQVRBLCBQVFgxX0RBVEEsIFBUWDBfREFUQSwKKwlQVFk2X0RBVEEsIFBUWTVfREFUQSwgUFRZNF9EQVRBLAorCVBUWTNfREFUQSwgUFRZMl9EQVRBLCBQVFkxX0RBVEEsIFBUWTBfREFUQSwKKwlQVFo1X0RBVEEsIFBUWjRfREFUQSwgUFRaM19EQVRBLCBQVFoyX0RBVEEsIFBUWjFfREFUQSwgUFRaMF9EQVRBLAorCVBJTk1VWF9EQVRBX0VORCwKKworCVBJTk1VWF9JTlBVVF9CRUdJTiwKKwlQVEE3X0lOLCBQVEE2X0lOLCBQVEE1X0lOLCBQVEE0X0lOLAorCVBUQTNfSU4sIFBUQTJfSU4sIFBUQTFfSU4sIFBUQTBfSU4sCisJUFRCN19JTiwgUFRCNl9JTiwgUFRCNV9JTiwgUFRCNF9JTiwKKwlQVEIzX0lOLCBQVEIyX0lOLCBQVEIxX0lOLCBQVEIwX0lOLAorCVBUQzdfSU4sIFBUQzVfSU4sIFBUQzRfSU4sIFBUQzNfSU4sIFBUQzJfSU4sIFBUQzBfSU4sCisJUFREN19JTiwgUFRENl9JTiwgUFRENV9JTiwgUFRENF9JTiwgUFREM19JTiwgUFREMl9JTiwgUFREMV9JTiwKKwlQVEU3X0lOLCBQVEU2X0lOLCBQVEU1X0lOLCBQVEU0X0lOLCBQVEUxX0lOLCBQVEUwX0lOLAorCVBURjZfSU4sIFBURjVfSU4sIFBURjRfSU4sIFBURjNfSU4sIFBURjJfSU4sIFBURjFfSU4sCisJUFRINl9JTiwgUFRINV9JTiwgUFRIMV9JTiwgUFRIMF9JTiwKKwlQVEoxX0lOLCBQVEowX0lOLAorCVBUSzZfSU4sIFBUSzVfSU4sIFBUSzRfSU4sIFBUSzNfSU4sIFBUSzJfSU4sIFBUSzBfSU4sCisJUFRMN19JTiwgUFRMNl9JTiwgUFRMNV9JTiwgUFRMNF9JTiwKKwlQVEwzX0lOLCBQVEwyX0lOLCBQVEwxX0lOLCBQVEwwX0lOLAorCVBUTTdfSU4sIFBUTTZfSU4sIFBUTTVfSU4sIFBUTTRfSU4sCisJUFRNM19JTiwgUFRNMl9JTiwgUFRNMV9JTiwgUFRNMF9JTiwKKwlQVE43X0lOLCBQVE42X0lOLCBQVE41X0lOLCBQVE40X0lOLAorCVBUTjNfSU4sIFBUTjJfSU4sIFBUTjFfSU4sIFBUTjBfSU4sCisJUFRRNV9JTiwgUFRRNF9JTiwgUFRRM19JTiwgUFRRMl9JTiwgUFRRMF9JTiwKKwlQVFIyX0lOLAorCVBUUzRfSU4sIFBUUzJfSU4sIFBUUzFfSU4sCisJUFRUNF9JTiwgUFRUM19JTiwgUFRUMl9JTiwgUFRUMV9JTiwKKwlQVFU0X0lOLCBQVFUzX0lOLCBQVFUyX0lOLCBQVFUxX0lOLCBQVFUwX0lOLAorCVBUVjRfSU4sIFBUVjNfSU4sIFBUVjJfSU4sIFBUVjFfSU4sIFBUVjBfSU4sCisJUFRXNl9JTiwgUFRXNF9JTiwgUFRXM19JTiwgUFRXMl9JTiwgUFRXMV9JTiwgUFRXMF9JTiwKKwlQVFg2X0lOLCBQVFg1X0lOLCBQVFg0X0lOLCBQVFgzX0lOLCBQVFgyX0lOLCBQVFgxX0lOLCBQVFgwX0lOLAorCVBUWTVfSU4sIFBUWTRfSU4sIFBUWTNfSU4sIFBUWTJfSU4sIFBUWTBfSU4sCisJUFRaNV9JTiwgUFRaNF9JTiwgUFRaM19JTiwgUFRaMl9JTiwgUFRaMV9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExET1dOX0JFR0lOLAorCVBUQTdfSU5fUEQsIFBUQTZfSU5fUEQsIFBUQTVfSU5fUEQsIFBUQTRfSU5fUEQsCisJUFRBM19JTl9QRCwgUFRBMl9JTl9QRCwgUFRBMV9JTl9QRCwgUFRBMF9JTl9QRCwKKwlQVEU3X0lOX1BELCBQVEU2X0lOX1BELCBQVEU1X0lOX1BELCBQVEU0X0lOX1BELAlQVEUxX0lOX1BELCBQVEUwX0lOX1BELAorCVBURjZfSU5fUEQsIFBURjVfSU5fUEQsIFBURjRfSU5fUEQsIFBURjNfSU5fUEQsIFBURjJfSU5fUEQsIFBURjFfSU5fUEQsCisJUFRINl9JTl9QRCwgUFRINV9JTl9QRCwgUFRIMV9JTl9QRCwgUFRIMF9JTl9QRCwKKwlQVEs2X0lOX1BELCBQVEs1X0lOX1BELCBQVEs0X0lOX1BELCBQVEszX0lOX1BELCBQVEsyX0lOX1BELCBQVEswX0lOX1BELAorCVBUTDdfSU5fUEQsIFBUTDZfSU5fUEQsIFBUTDVfSU5fUEQsIFBUTDRfSU5fUEQsCisJUFRMM19JTl9QRCwgUFRMMl9JTl9QRCwgUFRMMV9JTl9QRCwgUFRMMF9JTl9QRCwKKwlQVE03X0lOX1BELCBQVE02X0lOX1BELCBQVE01X0lOX1BELCBQVE00X0lOX1BELAorCVBUTTNfSU5fUEQsIFBUTTJfSU5fUEQsIFBUTTFfSU5fUEQsIFBUTTBfSU5fUEQsCisJUFRRNV9JTl9QRCwgUFRRNF9JTl9QRCwgUFRRM19JTl9QRCwgUFRRMl9JTl9QRCwKKwlQVFM0X0lOX1BELCBQVFMyX0lOX1BELCBQVFMxX0lOX1BELAorCVBUVDRfSU5fUEQsIFBUVDNfSU5fUEQsIFBUVDJfSU5fUEQsIFBUVDFfSU5fUEQsCisJUFRVNF9JTl9QRCwgUFRVM19JTl9QRCwgUFRVMl9JTl9QRCwgUFRVMV9JTl9QRCwgUFRVMF9JTl9QRCwKKwlQVFY0X0lOX1BELCBQVFYzX0lOX1BELCBQVFYyX0lOX1BELCBQVFYxX0lOX1BELCBQVFYwX0lOX1BELAorCVBUVzZfSU5fUEQsIFBUVzRfSU5fUEQsCVBUVzNfSU5fUEQsIFBUVzJfSU5fUEQsIFBUVzFfSU5fUEQsIFBUVzBfSU5fUEQsCisJUFRYNl9JTl9QRCwgUFRYNV9JTl9QRCwgUFRYNF9JTl9QRCwKKwlQVFgzX0lOX1BELCBQVFgyX0lOX1BELCBQVFgxX0lOX1BELCBQVFgwX0lOX1BELAorCVBJTk1VWF9JTlBVVF9QVUxMRE9XTl9FTkQsCisKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLAorCVBUQzdfSU5fUFUsIFBUQzVfSU5fUFUsCisJUFREN19JTl9QVSwgUFRENl9JTl9QVSwgUFRENV9JTl9QVSwgUFRENF9JTl9QVSwKKwlQVEQzX0lOX1BVLCBQVEQyX0lOX1BVLCBQVEQxX0lOX1BVLAorCVBUSjFfSU5fUFUsIFBUSjBfSU5fUFUsCisJUFRRMF9JTl9QVSwKKwlQVFIyX0lOX1BVLAorCVBUWDZfSU5fUFUsCisJUFRZNV9JTl9QVSwgUFRZNF9JTl9QVSwgUFRZM19JTl9QVSwgUFRZMl9JTl9QVSwgUFRZMF9JTl9QVSwKKwlQVFo1X0lOX1BVLCBQVFo0X0lOX1BVLCBQVFozX0lOX1BVLCBQVFoyX0lOX1BVLCBQVFoxX0lOX1BVLAorCVBJTk1VWF9JTlBVVF9QVUxMVVBfRU5ELAorCisJUElOTVVYX09VVFBVVF9CRUdJTiwKKwlQVEE3X09VVCwgUFRBNV9PVVQsCisJUFRCN19PVVQsIFBUQjZfT1VULCBQVEI1X09VVCwgUFRCNF9PVVQsCisJUFRCM19PVVQsIFBUQjJfT1VULCBQVEIxX09VVCwgUFRCMF9PVVQsCisJUFRDNF9PVVQsIFBUQzNfT1VULCBQVEMyX09VVCwgUFRDMF9PVVQsCisJUFRENl9PVVQsIFBURDVfT1VULCBQVEQ0X09VVCwKKwlQVEQzX09VVCwgUFREMl9PVVQsIFBURDFfT1VULCBQVEQwX09VVCwKKwlQVEU3X09VVCwgUFRFNl9PVVQsIFBURTVfT1VULCBQVEU0X09VVCwgUFRFMV9PVVQsIFBURTBfT1VULAorCVBURjZfT1VULCBQVEY1X09VVCwgUFRGNF9PVVQsIFBURjNfT1VULCBQVEYyX09VVCwgUFRGMF9PVVQsCisJUFRHNF9PVVQsIFBURzNfT1VULCBQVEcyX09VVCwgUFRHMV9PVVQsIFBURzBfT1VULAorCVBUSDdfT1VULCBQVEg2X09VVCwgUFRINV9PVVQsIFBUSDRfT1VULAorCVBUSDNfT1VULCBQVEgyX09VVCwgUFRIMV9PVVQsIFBUSDBfT1VULAorCVBUSjdfT1VULCBQVEo2X09VVCwgUFRKNV9PVVQsIFBUSjFfT1VULCBQVEowX09VVCwKKwlQVEs2X09VVCwgUFRLNV9PVVQsIFBUSzRfT1VULCBQVEszX09VVCwgUFRLMV9PVVQsIFBUSzBfT1VULAorCVBUTDdfT1VULCBQVEw2X09VVCwgUFRMNV9PVVQsIFBUTDRfT1VULAorCVBUTDNfT1VULCBQVEwyX09VVCwgUFRMMV9PVVQsIFBUTDBfT1VULAorCVBUTTdfT1VULCBQVE02X09VVCwgUFRNNV9PVVQsIFBUTTRfT1VULAorCVBUTTNfT1VULCBQVE0yX09VVCwgUFRNMV9PVVQsIFBUTTBfT1VULAorCVBUTjdfT1VULCBQVE42X09VVCwgUFRONV9PVVQsIFBUTjRfT1VULAorCVBUTjNfT1VULCBQVE4yX09VVCwgUFROMV9PVVQsIFBUTjBfT1VULAlQVFE2X09VVCwgUFRRNV9PVVQsIFBUUTRfT1VULAorCVBUUTNfT1VULCBQVFEyX09VVCwgUFRRMV9PVVQsIFBUUTBfT1VULAorCVBUUjRfT1VULCBQVFIzX09VVCwgUFRSMV9PVVQsIFBUUjBfT1VULAorCVBUUzNfT1VULCBQVFMyX09VVCwgUFRTMF9PVVQsCisJUFRUNF9PVVQsIFBUVDNfT1VULCBQVFQyX09VVCwgUFRUMF9PVVQsCisJUFRVNF9PVVQsIFBUVTNfT1VULCBQVFUyX09VVCwgUFRVMF9PVVQsCisJUFRWNF9PVVQsIFBUVjNfT1VULCBQVFYyX09VVCwgUFRWMV9PVVQsIFBUVjBfT1VULAorCVBUVzVfT1VULCBQVFc0X09VVCwgUFRXM19PVVQsIFBUVzJfT1VULCBQVFcxX09VVCwgUFRXMF9PVVQsCisJUFRYNl9PVVQsIFBUWDVfT1VULCBQVFg0X09VVCwgUFRYM19PVVQsIFBUWDJfT1VULCBQVFgxX09VVCwgUFRYMF9PVVQsCisJUFRZNV9PVVQsIFBUWTRfT1VULCBQVFkzX09VVCwgUFRZMl9PVVQsIFBUWTFfT1VULCBQVFkwX09VVCwKKwlQSU5NVVhfT1VUUFVUX0VORCwKKworCVBJTk1VWF9NQVJLX0JFR0lOLAorCVNDSUYwX1RYRF9NQVJLLCBTQ0lGMF9SWERfTUFSSywKKwlTQ0lGMF9SVFNfTUFSSywgU0NJRjBfQ1RTX01BUkssIFNDSUYwX1NDS19NQVJLLAorCVNDSUYxX1RYRF9NQVJLLCBTQ0lGMV9SWERfTUFSSywKKwlTQ0lGMV9SVFNfTUFSSywgU0NJRjFfQ1RTX01BUkssIFNDSUYxX1NDS19NQVJLLAorCVNDSUYyX1RYRF9NQVJLLCBTQ0lGMl9SWERfTUFSSywKKwlTQ0lGMl9SVFNfTUFSSywgU0NJRjJfQ1RTX01BUkssIFNDSUYyX1NDS19NQVJLLAorCVNJT1RYRF9NQVJLLCBTSU9SWERfTUFSSywKKwlTSU9EX01BUkssIFNJT1NUUkIwX01BUkssIFNJT1NUUkIxX01BUkssCisJU0lPU0NLX01BUkssIFNJT01DS19NQVJLLAorCVZJT19EMTVfTUFSSywgVklPX0QxNF9NQVJLLCBWSU9fRDEzX01BUkssIFZJT19EMTJfTUFSSywKKwlWSU9fRDExX01BUkssIFZJT19EMTBfTUFSSywgVklPX0Q5X01BUkssIFZJT19EOF9NQVJLLAorCVZJT19EN19NQVJLLCBWSU9fRDZfTUFSSywgVklPX0Q1X01BUkssIFZJT19ENF9NQVJLLAorCVZJT19EM19NQVJLLCBWSU9fRDJfTUFSSywgVklPX0QxX01BUkssIFZJT19EMF9NQVJLLAorCVZJT19DTEtfTUFSSywgVklPX1ZEX01BUkssIFZJT19IRF9NQVJLLCBWSU9fRkxEX01BUkssCisJVklPX0NLT19NQVJLLCBWSU9fU1RFWF9NQVJLLCBWSU9fU1RFTV9NQVJLLCBWSU9fVkQyX01BUkssCisJVklPX0hEMl9NQVJLLCBWSU9fQ0xLMl9NQVJLLAorCUxDREQyM19NQVJLLCBMQ0REMjJfTUFSSywgTENERDIxX01BUkssIExDREQyMF9NQVJLLAorCUxDREQxOV9NQVJLLCBMQ0REMThfTUFSSywgTENERDE3X01BUkssIExDREQxNl9NQVJLLAorCUxDREQxNV9NQVJLLCBMQ0REMTRfTUFSSywgTENERDEzX01BUkssIExDREQxMl9NQVJLLAorCUxDREQxMV9NQVJLLCBMQ0REMTBfTUFSSywgTENERDlfTUFSSywgTENERDhfTUFSSywKKwlMQ0REN19NQVJLLCBMQ0RENl9NQVJLLCBMQ0RENV9NQVJLLCBMQ0RENF9NQVJLLAorCUxDREQzX01BUkssIExDREQyX01BUkssIExDREQxX01BUkssIExDREQwX01BUkssCisJTENETENMS19NQVJLLCBMQ0RET05fTUFSSywgTENEVkNQV0NfTUFSSywgTENEVkVQV0NfTUFSSywKKwlMQ0RWU1lOX01BUkssIExDRERDS19NQVJLLCBMQ0RIU1lOX01BUkssIExDRERJU1BfTUFSSywKKwlMQ0RSU19NQVJLLCBMQ0RDU19NQVJLLCBMQ0RXUl9NQVJLLCBMQ0RSRF9NQVJLLAorCUxDRERPTjJfTUFSSywgTENEVkNQV0MyX01BUkssIExDRFZFUFdDMl9NQVJLLCBMQ0RWU1lOMl9NQVJLLAorCUxDRENTMl9NQVJLLAorCUlPSVMxNl9NQVJLLCBBMjVfTUFSSywgQTI0X01BUkssIEEyM19NQVJLLCBBMjJfTUFSSywKKwlCU19NQVJLLCBDUzZCX0NFMUJfTUFSSywgV0FJVF9NQVJLLCBDUzZBX0NFMkJfTUFSSywKKwlIUEQ2M19NQVJLLCBIUEQ2Ml9NQVJLLCBIUEQ2MV9NQVJLLCBIUEQ2MF9NQVJLLAorCUhQRDU5X01BUkssIEhQRDU4X01BUkssIEhQRDU3X01BUkssIEhQRDU2X01BUkssCisJSFBENTVfTUFSSywgSFBENTRfTUFSSywgSFBENTNfTUFSSywgSFBENTJfTUFSSywKKwlIUEQ1MV9NQVJLLCBIUEQ1MF9NQVJLLCBIUEQ0OV9NQVJLLCBIUEQ0OF9NQVJLLAorCUhQRFFNN19NQVJLLCBIUERRTTZfTUFSSywgSFBEUU01X01BUkssIEhQRFFNNF9NQVJLLAorCUlSUTBfTUFSSywgSVJRMV9NQVJLLCBJUlEyX01BUkssIElSUTNfTUFSSywKKwlJUlE0X01BUkssIElSUTVfTUFSSywgSVJRNl9NQVJLLCBJUlE3X01BUkssCisJU0RISUNEX01BUkssIFNESElXUF9NQVJLLCBTREhJRDNfTUFSSywgU0RISUQyX01BUkssCisJU0RISUQxX01BUkssIFNESElEMF9NQVJLLCBTREhJQ01EX01BUkssIFNESElDTEtfTUFSSywKKwlTSVVBT0xSX01BUkssIFNJVUFPQlRfTUFSSywgU0lVQUlTTERfTUFSSywgU0lVQUlMUl9NQVJLLAorCVNJVUFJQlRfTUFSSywgU0lVQU9TTERfTUFSSywgU0lVTUNLQV9NQVJLLCBTSVVGQ0tBX01BUkssCisJU0lVQk9MUl9NQVJLLCBTSVVCT0JUX01BUkssIFNJVUJJU0xEX01BUkssIFNJVUJJTFJfTUFSSywKKwlTSVVCSUJUX01BUkssIFNJVUJPU0xEX01BUkssIFNJVU1DS0JfTUFSSywgU0lVRkNLQl9NQVJLLAorCUFVRFNZTkNfTUFSSywgQVVEQVRBM19NQVJLLCBBVURBVEEyX01BUkssIEFVREFUQTFfTUFSSywJQVVEQVRBMF9NQVJLLAorCURBQ0tfTUFSSywgRFJFUTBfTUFSSywKKwlEVl9DTEtJX01BUkssIERWX0NMS19NQVJLLCBEVl9IU1lOQ19NQVJLLCBEVl9WU1lOQ19NQVJLLAorCURWX0QxNV9NQVJLLCBEVl9EMTRfTUFSSywgRFZfRDEzX01BUkssIERWX0QxMl9NQVJLLAorCURWX0QxMV9NQVJLLCBEVl9EMTBfTUFSSywgRFZfRDlfTUFSSywgRFZfRDhfTUFSSywKKwlEVl9EN19NQVJLLCBEVl9ENl9NQVJLLCBEVl9ENV9NQVJLLCBEVl9ENF9NQVJLLAorCURWX0QzX01BUkssIERWX0QyX01BUkssIERWX0QxX01BUkssIERWX0QwX01BUkssCisJU1RBVFVTMF9NQVJLLCBQRFNUQVRVU19NQVJLLAorCVNJT0YwX01DS19NQVJLLCBTSU9GMF9TQ0tfTUFSSywKKwlTSU9GMF9TWU5DX01BUkssIFNJT0YwX1NTMV9NQVJLLCBTSU9GMF9TUzJfTUFSSywKKwlTSU9GMF9UWERfTUFSSywJU0lPRjBfUlhEX01BUkssCisJU0lPRjFfTUNLX01BUkssIFNJT0YxX1NDS19NQVJLLAorCVNJT0YxX1NZTkNfTUFSSywgU0lPRjFfU1MxX01BUkssIFNJT0YxX1NTMl9NQVJLLAorCVNJT0YxX1RYRF9NQVJLLCBTSU9GMV9SWERfTUFSSywKKwlTSU1fRF9NQVJLLCBTSU1fQ0xLX01BUkssIFNJTV9SU1RfTUFSSywKKwlUU19TREFUX01BUkssIFRTX1NDS19NQVJLLCBUU19TREVOX01BUkssIFRTX1NQU1lOQ19NQVJLLAorCUlSREFfSU5fTUFSSywgSVJEQV9PVVRfTUFSSywKKwlUUFVUT19NQVJLLAorCUZDRV9NQVJLLCBOQUY3X01BUkssIE5BRjZfTUFSSywgTkFGNV9NQVJLLCBOQUY0X01BUkssCisJTkFGM19NQVJLLCBOQUYyX01BUkssIE5BRjFfTUFSSywgTkFGMF9NQVJLLCBGQ0RFX01BUkssCisJRk9FX01BUkssIEZTQ19NQVJLLCBGV0VfTUFSSywgRlJCX01BUkssCisJS0VZSU4wX01BUkssIEtFWUlOMV9NQVJLLCBLRVlJTjJfTUFSSywgS0VZSU4zX01BUkssIEtFWUlONF9NQVJLLAorCUtFWU9VVDBfTUFSSywgS0VZT1VUMV9NQVJLLCBLRVlPVVQyX01BUkssIEtFWU9VVDNfTUFSSywKKwlLRVlPVVQ0X0lONl9NQVJLLCBLRVlPVVQ1X0lONV9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKKworCVBJTk1VWF9GVU5DVElPTl9CRUdJTiwKKwlWSU9fRDdfU0NJRjFfU0NLLCBWSU9fRDZfU0NJRjFfUlhELCBWSU9fRDVfU0NJRjFfVFhELCBWSU9fRDQsCisJVklPX0QzLCBWSU9fRDIsIFZJT19EMSwgVklPX0QwX0xDRExDTEssCisJSFBENTUsIEhQRDU0LCBIUEQ1MywgSFBENTIsIEhQRDUxLCBIUEQ1MCwgSFBENDksIEhQRDQ4LAorCUlPSVMxNiwgSFBEUU03LCBIUERRTTYsIEhQRFFNNSwgSFBEUU00LAorCVNESElDRCwgU0RISVdQLCBTREhJRDMsIElSUTJfU0RISUQyLCBTREhJRDEsIFNESElEMCwgU0RISUNNRCwgU0RISUNMSywKKwlBMjUsIEEyNCwgQTIzLCBBMjIsIElSUTUsIElSUTRfQlMsCisJUFRGNiwgU0lPU0NLX1NJVUJPQlQsIFNJT1NUUkIxX1NJVUJPTFIsCisJU0lPU1RSQjBfU0lVQklCVCwgU0lPRF9TSVVCSUxSLCBTSU9SWERfU0lVQklTTEQsIFNJT1RYRF9TSVVCT1NMRCwKKwlBVURTWU5DLCBBVURBVEEzLCBBVURBVEEyLCBBVURBVEExLCBBVURBVEEwLAorCUxDRFZDUFdDX0xDRFZDUFdDMiwgTENEVlNZTjJfREFDSywgTENEVlNZTiwgTENERElTUF9MQ0RSUywKKwlMQ0RIU1lOX0xDRENTLCBMQ0RET05fTENERE9OMiwgTENERDE3X0RWX0hTWU5DLCBMQ0REMTZfRFZfVlNZTkMsCisJU1RBVFVTMCwgUERTVEFUVVMsIElSUTEsIElSUTAsCisJU0lVQUlMUl9TSU9GMV9TUzIsIFNJVUFJQlRfU0lPRjFfU1MxLCBTSVVBT0xSX1NJT0YxX1NZTkMsCisJU0lVQU9CVF9TSU9GMV9TQ0ssIFNJVUFJU0xEX1NJT0YxX1JYRCwgU0lVQU9TTERfU0lPRjFfVFhELCBQVEswLAorCUxDREQxNV9EVl9EMTUsIExDREQxNF9EVl9EMTQsIExDREQxM19EVl9EMTMsIExDREQxMl9EVl9EMTIsCisJTENERDExX0RWX0QxMSwgTENERDEwX0RWX0QxMCwgTENERDlfRFZfRDksIExDREQ4X0RWX0Q4LAorCUxDREQ3X0RWX0Q3LCBMQ0RENl9EVl9ENiwgTENERDVfRFZfRDUsIExDREQ0X0RWX0Q0LAorCUxDREQzX0RWX0QzLCBMQ0REMl9EVl9EMiwgTENERDFfRFZfRDEsIExDREQwX0RWX0QwLAorCUhQRDYzLCBIUEQ2MiwgSFBENjEsIEhQRDYwLCBIUEQ1OSwgSFBENTgsIEhQRDU3LCBIUEQ1NiwKKwlTSU9GMF9TUzJfU0lNX1JTVCwgU0lPRjBfU1MxX1RTX1NQU1lOQywgU0lPRjBfU1lOQ19UU19TREVOLAorCVNJT0YwX1NDS19UU19TQ0ssIFBUUTIsIFBUUTEsIFBUUTAsCisJTENEUkQsIENTNkJfQ0UxQl9MQ0RDUzIsIFdBSVQsIExDRERDS19MQ0RXUiwgTENEVkVQV0NfTENEVkVQV0MyLAorCVNDSUYwX0NUU19TSVVBSVNQRCwgU0NJRjBfUlRTX1NJVUFPU1BELAorCVNDSUYwX1NDS19UUFVUTywgU0NJRjBfUlhELCBTQ0lGMF9UWEQsCisJRk9FX1ZJT19WRDIsIEZXRSwgRlNDLCBEUkVRMCwgRkNERSwKKwlOQUYyX1ZJT19EMTAsIE5BRjFfVklPX0Q5LCBOQUYwX1ZJT19EOCwKKwlGUkJfVklPX0NMSzIsIEZDRV9WSU9fSEQyLAorCU5BRjdfVklPX0QxNSwgTkFGNl9WSU9fRDE0LCBOQUY1X1ZJT19EMTMsIE5BRjRfVklPX0QxMiwgTkFGM19WSU9fRDExLAorCVZJT19GTERfU0NJRjJfQ1RTLCBWSU9fQ0tPX1NDSUYyX1JUUywgVklPX1NURVhfU0NJRjJfU0NLLAorCVZJT19TVEVNX1NDSUYyX1RYRCwgVklPX0hEX1NDSUYyX1JYRCwKKwlWSU9fVkRfU0NJRjFfQ1RTLCBWSU9fQ0xLX1NDSUYxX1JUUywKKwlDUzZBX0NFMkIsIExDREQyMywgTENERDIyLCBMQ0REMjEsIExDREQyMCwKKwlMQ0REMTlfRFZfQ0xLSSwgTENERDE4X0RWX0NMSywKKwlLRVlPVVQ1X0lONSwgS0VZT1VUNF9JTjYsIEtFWU9VVDMsIEtFWU9VVDIsIEtFWU9VVDEsIEtFWU9VVDAsCisJS0VZSU40X0lSUTcsIEtFWUlOMywgS0VZSU4yLCBLRVlJTjEsIEtFWUlOMF9JUlE2LAorCisJUFNBMTVfS0VZSU4wLCBQU0ExNV9JUlE2LCBQU0ExNF9LRVlJTjQsIFBTQTE0X0lSUTcsCisJUFNBOV9JUlE0LCBQU0E5X0JTLCBQU0E0X0lSUTIsIFBTQTRfU0RISUQyLAorCVBTQjE1X1NJT1RYRCwgUFNCMTVfU0lVQk9TTEQsIFBTQjE0X1NJT1JYRCwgUFNCMTRfU0lVQklTTEQsCisJUFNCMTNfU0lPRCwgUFNCMTNfU0lVQklMUiwgUFNCMTJfU0lPU1RSQjAsIFBTQjEyX1NJVUJJQlQsCisJUFNCMTFfU0lPU1RSQjEsIFBTQjExX1NJVUJPTFIsIFBTQjEwX1NJT1NDSywgUFNCMTBfU0lVQk9CVCwKKwlQU0I5X1NJT01DSywgUFNCOV9TSVVNQ0tCLCBQU0I4X1NJT0YwX01DSywgUFNCOF9JUlEzLAorCVBTQjdfU0lPRjBfVFhELCBQU0I3X0lSREFfT1VULCBQU0I2X1NJT0YwX1JYRCwgUFNCNl9JUkRBX0lOLAorCVBTQjVfU0lPRjBfU0NLLCBQU0I1X1RTX1NDSywgUFNCNF9TSU9GMF9TWU5DLCBQU0I0X1RTX1NERU4sCisJUFNCM19TSU9GMF9TUzEsIFBTQjNfVFNfU1BTWU5DLCBQU0IyX1NJT0YwX1NTMiwgUFNCMl9TSU1fUlNULAorCVBTQjFfU0lVTUNLQSwgUFNCMV9TSU9GMV9NQ0ssIFBTQjBfU0lVQU9TTEQsIFBTQjBfU0lPRjFfVFhELAorCVBTQzE1X1NJVUFJU0xELCBQU0MxNV9TSU9GMV9SWEQsIFBTQzE0X1NJVUFPQlQsIFBTQzE0X1NJT0YxX1NDSywKKwlQU0MxM19TSVVBT0xSLCBQU0MxM19TSU9GMV9TWU5DLCBQU0MxMl9TSVVBSUJULCBQU0MxMl9TSU9GMV9TUzEsCisJUFNDMTFfU0lVQUlMUiwgUFNDMTFfU0lPRjFfU1MyLCBQU0MwX05BRiwgUFNDMF9WSU8sCisJUFNEMTNfVklPLCBQU0QxM19TQ0lGMiwgUFNEMTJfVklPLCBQU0QxMl9TQ0lGMSwKKwlQU0QxMV9WSU8sIFBTRDExX1NDSUYxLCBQU0QxMF9WSU9fRDAsIFBTRDEwX0xDRExDTEssCisJUFNEOV9TSU9NQ0tfU0lVTUNLQiwgUFNEOV9TSVVGQ0tCLCBQU0Q4X1NDSUYwX1NDSywgUFNEOF9UUFVUTywKKwlQU0Q3X1NDSUYwX1JUUywgUFNEN19TSVVBT1NQRCwgUFNENl9TQ0lGMF9DVFMsIFBTRDZfU0lVQUlTUEQsCisJUFNENV9DUzZCX0NFMUIsIFBTRDVfTENEQ1MyLAorCVBTRDNfTENEVkVQV0NfTENEVkNQV0MsIFBTRDNfTENEVkVQV0MyX0xDRFZDUFdDMiwKKwlQU0QyX0xDRERPTiwgUFNEMl9MQ0RET04yLCBQU0QwX0xDREQxOV9MQ0REMCwgUFNEMF9EViwKKwlQU0UxNV9TSU9GMF9NQ0tfSVJRMywgUFNFMTVfU0lNX0QsCisJUFNFMTRfU0lPRjBfVFhEX0lSREFfT1VULCBQU0UxNF9TSU1fQ0xLLAorCVBTRTEzX1NJT0YwX1JYRF9JUkRBX0lOLCBQU0UxM19UU19TREFULCBQU0UxMl9MQ0RWU1lOMiwgUFNFMTJfREFDSywKKwlQU0UxMV9TSVVNQ0tBX1NJT0YxX01DSywgUFNFMTFfU0lVRkNLQSwKKwlQU0UzX0ZMQ1RMLCBQU0UzX1ZJTywgUFNFMl9OQUYyLCBQU0UyX1ZJT19EMTAsCisJUFNFMV9OQUYxLCBQU0UxX1ZJT19EOSwgUFNFMF9OQUYwLCBQU0UwX1ZJT19EOCwKKworCUhJWkExNF9LRVlTQywgSElaQTE0X0hJWiwKKwlISVpBMTBfTkFGLCBISVpBMTBfSElaLAorCUhJWkE5X1ZJTywgSElaQTlfSElaLAorCUhJWkE4X0xDREMsIEhJWkE4X0hJWiwKKwlISVpBN19MQ0RDLCBISVpBN19ISVosCisJSElaQTZfTENEQywgSElaQTZfSElaLAorCUhJWkIxX1ZJTywgSElaQjFfSElaLAorCUhJWkIwX1ZJTywgSElaQjBfSElaLAorCUhJWkMxNV9JUlE3LCBISVpDMTVfSElaLAorCUhJWkMxNF9JUlE2LCBISVpDMTRfSElaLAorCUhJWkMxM19JUlE1LCBISVpDMTNfSElaLAorCUhJWkMxMl9JUlE0LCBISVpDMTJfSElaLAorCUhJWkMxMV9JUlEzLCBISVpDMTFfSElaLAorCUhJWkMxMF9JUlEyLCBISVpDMTBfSElaLAorCUhJWkM5X0lSUTEsIEhJWkM5X0hJWiwKKwlISVpDOF9JUlEwLCBISVpDOF9ISVosCisJTVNFTEI5X1ZJTywgTVNFTEI5X1ZJTzIsCisJTVNFTEI4X1JHQiwgTVNFTEI4X1NZUywKKwlQSU5NVVhfRlVOQ1RJT05fRU5ELAorfTsKKworc3RhdGljIHBpbm11eF9lbnVtX3QgcGlubXV4X2RhdGFbXSA9IHsKKwkvKiBQVEEgKi8KKwlQSU5NVVhfREFUQShQVEE3X0RBVEEsIFBUQTdfSU4sIFBUQTdfSU5fUEQsIFBUQTdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEE2X0RBVEEsIFBUQTZfSU4sIFBUQTZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUQTVfREFUQSwgUFRBNV9JTiwgUFRBNV9JTl9QRCwgUFRBNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQTRfREFUQSwgUFRBNF9JTiwgUFRBNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRBM19EQVRBLCBQVEEzX0lOLCBQVEEzX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEEyX0RBVEEsIFBUQTJfSU4sIFBUQTJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUQTFfREFUQSwgUFRBMV9JTiwgUFRBMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRBMF9EQVRBLCBQVEEwX0lOLCBQVEEwX0lOX1BEKSwKKworCS8qIFBUQiAqLworCVBJTk1VWF9EQVRBKFBUQjdfREFUQSwgUFRCN19JTiwgUFRCN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjZfREFUQSwgUFRCNl9JTiwgUFRCNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjVfREFUQSwgUFRCNV9JTiwgUFRCNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjRfREFUQSwgUFRCNF9JTiwgUFRCNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjNfREFUQSwgUFRCM19JTiwgUFRCM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjJfREFUQSwgUFRCMl9JTiwgUFRCMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjFfREFUQSwgUFRCMV9JTiwgUFRCMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjBfREFUQSwgUFRCMF9JTiwgUFRCMF9PVVQpLAorCisJLyogUFRDICovCisJUElOTVVYX0RBVEEoUFRDN19EQVRBLCBQVEM3X0lOLCBQVEM3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEM1X0RBVEEsIFBUQzVfSU4sIFBUQzVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzRfREFUQSwgUFRDNF9JTiwgUFRDNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzNfREFUQSwgUFRDM19JTiwgUFRDM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzJfREFUQSwgUFRDMl9JTiwgUFRDMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzBfREFUQSwgUFRDMF9JTiwgUFRDMF9PVVQpLAorCisJLyogUFREICovCisJUElOTVVYX0RBVEEoUFREN19EQVRBLCBQVEQ3X0lOLCBQVEQ3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ2X0RBVEEsIFBURDZfT1VULCBQVEQ2X0lOLCBQVEQ2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ1X0RBVEEsIFBURDVfT1VULCBQVEQ1X0lOLCBQVEQ1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ0X0RBVEEsIFBURDRfT1VULCBQVEQ0X0lOLCBQVEQ0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQzX0RBVEEsIFBURDNfT1VULCBQVEQzX0lOLCBQVEQzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQyX0RBVEEsIFBURDJfT1VULCBQVEQyX0lOLCBQVEQyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQxX0RBVEEsIFBURDFfT1VULCBQVEQxX0lOLCBQVEQxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQwX0RBVEEsIFBURDBfT1VUKSwKKworCS8qIFBURSAqLworCVBJTk1VWF9EQVRBKFBURTdfREFUQSwgUFRFN19PVVQsIFBURTdfSU4sIFBURTdfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTZfREFUQSwgUFRFNl9PVVQsIFBURTZfSU4sIFBURTZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTVfREFUQSwgUFRFNV9PVVQsIFBURTVfSU4sIFBURTVfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTRfREFUQSwgUFRFNF9PVVQsIFBURTRfSU4sIFBURTRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTFfREFUQSwgUFRFMV9PVVQsIFBURTFfSU4sIFBURTFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTBfREFUQSwgUFRFMF9PVVQsIFBURTBfSU4sIFBURTBfSU5fUEQpLAorCisJLyogUFRGICovCisJUElOTVVYX0RBVEEoUFRGNl9EQVRBLCBQVEY2X09VVCwgUFRGNl9JTiwgUFRGNl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGNV9EQVRBLCBQVEY1X09VVCwgUFRGNV9JTiwgUFRGNV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGNF9EQVRBLCBQVEY0X09VVCwgUFRGNF9JTiwgUFRGNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGM19EQVRBLCBQVEYzX09VVCwgUFRGM19JTiwgUFRGM19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGMl9EQVRBLCBQVEYyX09VVCwgUFRGMl9JTiwgUFRGMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGMV9EQVRBLCBQVEYxX0lOLCBQVEYxX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEYwX0RBVEEsIFBURjBfT1VUKSwKKworCS8qIFBURyAqLworCVBJTk1VWF9EQVRBKFBURzRfREFUQSwgUFRHNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzNfREFUQSwgUFRHM19PVVQpLAorCVBJTk1VWF9EQVRBKFBURzJfREFUQSwgUFRHMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzFfREFUQSwgUFRHMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzBfREFUQSwgUFRHMF9PVVQpLAorCisJLyogUFRIICovCisJUElOTVVYX0RBVEEoUFRIN19EQVRBLCBQVEg3X09VVCksCisJUElOTVVYX0RBVEEoUFRINl9EQVRBLCBQVEg2X09VVCwgUFRINl9JTiwgUFRINl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRINV9EQVRBLCBQVEg1X09VVCwgUFRINV9JTiwgUFRINV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRINF9EQVRBLCBQVEg0X09VVCksCisJUElOTVVYX0RBVEEoUFRIM19EQVRBLCBQVEgzX09VVCksCisJUElOTVVYX0RBVEEoUFRIMl9EQVRBLCBQVEgyX09VVCksCisJUElOTVVYX0RBVEEoUFRIMV9EQVRBLCBQVEgxX09VVCwgUFRIMV9JTiwgUFRIMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRIMF9EQVRBLCBQVEgwX09VVCwgUFRIMF9JTiwgUFRIMF9JTl9QRCksCisKKwkvKiBQVEogKi8KKwlQSU5NVVhfREFUQShQVEo3X0RBVEEsIFBUSjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEo2X0RBVEEsIFBUSjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEo1X0RBVEEsIFBUSjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEoxX0RBVEEsIFBUSjFfT1VULCBQVEoxX0lOLCBQVEoxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEowX0RBVEEsIFBUSjBfT1VULCBQVEowX0lOLCBQVEowX0lOX1BVKSwKKworCS8qIFBUSyAqLworCVBJTk1VWF9EQVRBKFBUSzZfREFUQSwgUFRLNl9PVVQsIFBUSzZfSU4sIFBUSzZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSzVfREFUQSwgUFRLNV9PVVQsIFBUSzVfSU4sIFBUSzVfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSzRfREFUQSwgUFRLNF9PVVQsIFBUSzRfSU4sIFBUSzRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSzNfREFUQSwgUFRLM19PVVQsIFBUSzNfSU4sIFBUSzNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSzJfREFUQSwgUFRLMl9JTiwgUFRLMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRLMV9EQVRBLCBQVEsxX09VVCksCisJUElOTVVYX0RBVEEoUFRLMF9EQVRBLCBQVEswX09VVCwgUFRLMF9JTiwgUFRLMF9JTl9QRCksCisKKwkvKiBQVEwgKi8KKwlQSU5NVVhfREFUQShQVEw3X0RBVEEsIFBUTDdfT1VULCBQVEw3X0lOLCBQVEw3X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEw2X0RBVEEsIFBUTDZfT1VULCBQVEw2X0lOLCBQVEw2X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEw1X0RBVEEsIFBUTDVfT1VULCBQVEw1X0lOLCBQVEw1X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEw0X0RBVEEsIFBUTDRfT1VULCBQVEw0X0lOLCBQVEw0X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEwzX0RBVEEsIFBUTDNfT1VULCBQVEwzX0lOLCBQVEwzX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEwyX0RBVEEsIFBUTDJfT1VULCBQVEwyX0lOLCBQVEwyX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEwxX0RBVEEsIFBUTDFfT1VULCBQVEwxX0lOLCBQVEwxX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEwwX0RBVEEsIFBUTDBfT1VULCBQVEwwX0lOLCBQVEwwX0lOX1BEKSwKKworCS8qIFBUTSAqLworCVBJTk1VWF9EQVRBKFBUTTdfREFUQSwgUFRNN19PVVQsIFBUTTdfSU4sIFBUTTdfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTZfREFUQSwgUFRNNl9PVVQsIFBUTTZfSU4sIFBUTTZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTVfREFUQSwgUFRNNV9PVVQsIFBUTTVfSU4sIFBUTTVfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTRfREFUQSwgUFRNNF9PVVQsIFBUTTRfSU4sIFBUTTRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTNfREFUQSwgUFRNM19PVVQsIFBUTTNfSU4sIFBUTTNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTJfREFUQSwgUFRNMl9PVVQsIFBUTTJfSU4sIFBUTTJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTFfREFUQSwgUFRNMV9PVVQsIFBUTTFfSU4sIFBUTTFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTBfREFUQSwgUFRNMF9PVVQsIFBUTTBfSU4sIFBUTTBfSU5fUEQpLAorCisJLyogUFROICovCisJUElOTVVYX0RBVEEoUFRON19EQVRBLCBQVE43X09VVCwgUFRON19JTiksCisJUElOTVVYX0RBVEEoUFRONl9EQVRBLCBQVE42X09VVCwgUFRONl9JTiksCisJUElOTVVYX0RBVEEoUFRONV9EQVRBLCBQVE41X09VVCwgUFRONV9JTiksCisJUElOTVVYX0RBVEEoUFRONF9EQVRBLCBQVE40X09VVCwgUFRONF9JTiksCisJUElOTVVYX0RBVEEoUFROM19EQVRBLCBQVE4zX09VVCwgUFROM19JTiksCisJUElOTVVYX0RBVEEoUFROMl9EQVRBLCBQVE4yX09VVCwgUFROMl9JTiksCisJUElOTVVYX0RBVEEoUFROMV9EQVRBLCBQVE4xX09VVCwgUFROMV9JTiksCisJUElOTVVYX0RBVEEoUFROMF9EQVRBLCBQVE4wX09VVCwgUFROMF9JTiksCisKKwkvKiBQVFEgKi8KKwlQSU5NVVhfREFUQShQVFE2X0RBVEEsIFBUUTZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFE1X0RBVEEsIFBUUTVfT1VULCBQVFE1X0lOLCBQVFE1X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFE0X0RBVEEsIFBUUTRfT1VULCBQVFE0X0lOLCBQVFE0X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFEzX0RBVEEsIFBUUTNfT1VULCBQVFEzX0lOLCBQVFEzX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFEyX0RBVEEsIFBUUTJfSU4sIFBUUTJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUUTFfREFUQSwgUFRRMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUTBfREFUQSwgUFRRMF9PVVQsIFBUUTBfSU4sIFBUUTBfSU5fUFUpLAorCisJLyogUFRSICovCisJUElOTVVYX0RBVEEoUFRSNF9EQVRBLCBQVFI0X09VVCksCisJUElOTVVYX0RBVEEoUFRSM19EQVRBLCBQVFIzX09VVCksCisJUElOTVVYX0RBVEEoUFRSMl9EQVRBLCBQVFIyX0lOLCBQVFIyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFIxX0RBVEEsIFBUUjFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFIwX0RBVEEsIFBUUjBfT1VUKSwKKworCS8qIFBUUyAqLworCVBJTk1VWF9EQVRBKFBUUzRfREFUQSwgUFRTNF9JTiwgUFRTNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRTM19EQVRBLCBQVFMzX09VVCksCisJUElOTVVYX0RBVEEoUFRTMl9EQVRBLCBQVFMyX09VVCwgUFRTMl9JTiwgUFRTMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRTMV9EQVRBLCBQVFMxX0lOLCBQVFMxX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFMwX0RBVEEsIFBUUzBfT1VUKSwKKworCS8qIFBUVCAqLworCVBJTk1VWF9EQVRBKFBUVDRfREFUQSwgUFRUNF9PVVQsIFBUVDRfSU4sIFBUVDRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVDNfREFUQSwgUFRUM19PVVQsIFBUVDNfSU4sIFBUVDNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVDJfREFUQSwgUFRUMl9PVVQsIFBUVDJfSU4sIFBUVDJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVDFfREFUQSwgUFRUMV9JTiwgUFRUMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRUMF9EQVRBLCBQVFQwX09VVCksCisKKwkvKiBQVFUgKi8KKwlQSU5NVVhfREFUQShQVFU0X0RBVEEsIFBUVTRfT1VULCBQVFU0X0lOLCBQVFU0X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFUzX0RBVEEsIFBUVTNfT1VULCBQVFUzX0lOLCBQVFUzX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFUyX0RBVEEsIFBUVTJfT1VULCBQVFUyX0lOLCBQVFUyX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFUxX0RBVEEsIFBUVTFfSU4sIFBUVTFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVTBfREFUQSwgUFRVMF9PVVQsIFBUVTBfSU4sIFBUVTBfSU5fUEQpLAorCisJLyogUFRWICovCisJUElOTVVYX0RBVEEoUFRWNF9EQVRBLCBQVFY0X09VVCwgUFRWNF9JTiwgUFRWNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRWM19EQVRBLCBQVFYzX09VVCwgUFRWM19JTiwgUFRWM19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRWMl9EQVRBLCBQVFYyX09VVCwgUFRWMl9JTiwgUFRWMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRWMV9EQVRBLCBQVFYxX09VVCwgUFRWMV9JTiwgUFRWMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRWMF9EQVRBLCBQVFYwX09VVCwgUFRWMF9JTiwgUFRWMF9JTl9QRCksCisKKwkvKiBQVFcgKi8KKwlQSU5NVVhfREFUQShQVFc2X0RBVEEsIFBUVzZfSU4sIFBUVzZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzVfREFUQSwgUFRXNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVzRfREFUQSwgUFRXNF9PVVQsIFBUVzRfSU4sIFBUVzRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzNfREFUQSwgUFRXM19PVVQsIFBUVzNfSU4sIFBUVzNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzJfREFUQSwgUFRXMl9PVVQsIFBUVzJfSU4sIFBUVzJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzFfREFUQSwgUFRXMV9PVVQsIFBUVzFfSU4sIFBUVzFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzBfREFUQSwgUFRXMF9PVVQsIFBUVzBfSU4sIFBUVzBfSU5fUEQpLAorCisJLyogUFRYICovCisJUElOTVVYX0RBVEEoUFRYNl9EQVRBLCBQVFg2X09VVCwgUFRYNl9JTiwgUFRYNl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYNV9EQVRBLCBQVFg1X09VVCwgUFRYNV9JTiwgUFRYNV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYNF9EQVRBLCBQVFg0X09VVCwgUFRYNF9JTiwgUFRYNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYM19EQVRBLCBQVFgzX09VVCwgUFRYM19JTiwgUFRYM19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYMl9EQVRBLCBQVFgyX09VVCwgUFRYMl9JTiwgUFRYMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYMV9EQVRBLCBQVFgxX09VVCwgUFRYMV9JTiwgUFRYMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYMF9EQVRBLCBQVFgwX09VVCwgUFRYMF9JTiwgUFRYMF9JTl9QRCksCisKKwkvKiBQVFkgKi8KKwlQSU5NVVhfREFUQShQVFk1X0RBVEEsIFBUWTVfT1VULCBQVFk1X0lOLCBQVFk1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFk0X0RBVEEsIFBUWTRfT1VULCBQVFk0X0lOLCBQVFk0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFkzX0RBVEEsIFBUWTNfT1VULCBQVFkzX0lOLCBQVFkzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFkyX0RBVEEsIFBUWTJfT1VULCBQVFkyX0lOLCBQVFkyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFkxX0RBVEEsIFBUWTFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFkwX0RBVEEsIFBUWTBfT1VULCBQVFkwX0lOLCBQVFkwX0lOX1BVKSwKKworCS8qIFBUWiAqLworCVBJTk1VWF9EQVRBKFBUWjVfREFUQSwgUFRaNV9JTiwgUFRaNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRaNF9EQVRBLCBQVFo0X0lOLCBQVFo0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFozX0RBVEEsIFBUWjNfSU4sIFBUWjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUWjJfREFUQSwgUFRaMl9JTiwgUFRaMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRaMV9EQVRBLCBQVFoxX0lOLCBQVFoxX0lOX1BVKSwKKworCS8qIFNDSUYwICovCisJUElOTVVYX0RBVEEoU0NJRjBfVFhEX01BUkssIFNDSUYwX1RYRCksCisJUElOTVVYX0RBVEEoU0NJRjBfUlhEX01BUkssIFNDSUYwX1JYRCksCisJUElOTVVYX0RBVEEoU0NJRjBfUlRTX01BUkssIFBTRDdfU0NJRjBfUlRTLCBTQ0lGMF9SVFNfU0lVQU9TUEQpLAorCVBJTk1VWF9EQVRBKFNDSUYwX0NUU19NQVJLLCBQU0Q2X1NDSUYwX0NUUywgU0NJRjBfQ1RTX1NJVUFJU1BEKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9TQ0tfTUFSSywgUFNEOF9TQ0lGMF9TQ0ssIFNDSUYwX1NDS19UUFVUTyksCisKKwkvKiBTQ0lGMSAqLworCVBJTk1VWF9EQVRBKFNDSUYxX1RYRF9NQVJLLCBQU0QxMV9TQ0lGMSwgVklPX0Q1X1NDSUYxX1RYRCksCisJUElOTVVYX0RBVEEoU0NJRjFfUlhEX01BUkssIFBTRDExX1NDSUYxLCBWSU9fRDZfU0NJRjFfUlhEKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9SVFNfTUFSSywgUFNEMTJfU0NJRjEsIFZJT19DTEtfU0NJRjFfUlRTKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9DVFNfTUFSSywgUFNEMTJfU0NJRjEsIFZJT19WRF9TQ0lGMV9DVFMpLAorCVBJTk1VWF9EQVRBKFNDSUYxX1NDS19NQVJLLCBQU0QxMV9TQ0lGMSwgVklPX0Q3X1NDSUYxX1NDSyksCisKKwkvKiBTQ0lGMiAqLworCVBJTk1VWF9EQVRBKFNDSUYyX1RYRF9NQVJLLCBQU0QxM19TQ0lGMiwgVklPX1NURU1fU0NJRjJfVFhEKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9SWERfTUFSSywgUFNEMTNfU0NJRjIsIFZJT19IRF9TQ0lGMl9SWEQpLAorCVBJTk1VWF9EQVRBKFNDSUYyX1JUU19NQVJLLCBQU0QxM19TQ0lGMiwgVklPX0NLT19TQ0lGMl9SVFMpLAorCVBJTk1VWF9EQVRBKFNDSUYyX0NUU19NQVJLLCBQU0QxM19TQ0lGMiwgVklPX0ZMRF9TQ0lGMl9DVFMpLAorCVBJTk1VWF9EQVRBKFNDSUYyX1NDS19NQVJLLCBQU0QxM19TQ0lGMiwgVklPX1NURVhfU0NJRjJfU0NLKSwKKworCS8qIFNJTyAqLworCVBJTk1VWF9EQVRBKFNJT1RYRF9NQVJLLCBQU0IxNV9TSU9UWEQsIFNJT1RYRF9TSVVCT1NMRCksCisJUElOTVVYX0RBVEEoU0lPUlhEX01BUkssIFBTQjE0X1NJT1JYRCwgU0lPUlhEX1NJVUJJU0xEKSwKKwlQSU5NVVhfREFUQShTSU9EX01BUkssIFBTQjEzX1NJT0QsIFNJT0RfU0lVQklMUiksCisJUElOTVVYX0RBVEEoU0lPU1RSQjBfTUFSSywgUFNCMTJfU0lPU1RSQjAsIFNJT1NUUkIwX1NJVUJJQlQpLAorCVBJTk1VWF9EQVRBKFNJT1NUUkIxX01BUkssIFBTQjExX1NJT1NUUkIxLCBTSU9TVFJCMV9TSVVCT0xSKSwKKwlQSU5NVVhfREFUQShTSU9TQ0tfTUFSSywgUFNCMTBfU0lPU0NLLCBTSU9TQ0tfU0lVQk9CVCksCisJUElOTVVYX0RBVEEoU0lPTUNLX01BUkssIFBTRDlfU0lPTUNLX1NJVU1DS0IsIFBTQjlfU0lPTUNLLCBQVEY2KSwKKworCS8qIENFVSAqLworCVBJTk1VWF9EQVRBKFZJT19EMTVfTUFSSywgUFNDMF9WSU8sIEhJWkExMF9OQUYsIE5BRjdfVklPX0QxNSksCisJUElOTVVYX0RBVEEoVklPX0QxNF9NQVJLLCBQU0MwX1ZJTywgSElaQTEwX05BRiwgTkFGNl9WSU9fRDE0KSwKKwlQSU5NVVhfREFUQShWSU9fRDEzX01BUkssIFBTQzBfVklPLCBISVpBMTBfTkFGLCBOQUY1X1ZJT19EMTMpLAorCVBJTk1VWF9EQVRBKFZJT19EMTJfTUFSSywgUFNDMF9WSU8sIEhJWkExMF9OQUYsIE5BRjRfVklPX0QxMiksCisJUElOTVVYX0RBVEEoVklPX0QxMV9NQVJLLCBQU0MwX1ZJTywgSElaQTEwX05BRiwgTkFGM19WSU9fRDExKSwKKwlQSU5NVVhfREFUQShWSU9fRDEwX01BUkssIFBTRTJfVklPX0QxMCwgSElaQjBfVklPLCBOQUYyX1ZJT19EMTApLAorCVBJTk1VWF9EQVRBKFZJT19EOV9NQVJLLCBQU0UxX1ZJT19EOSwgSElaQjBfVklPLCBOQUYxX1ZJT19EOSksCisJUElOTVVYX0RBVEEoVklPX0Q4X01BUkssIFBTRTBfVklPX0Q4LCBISVpCMF9WSU8sIE5BRjBfVklPX0Q4KSwKKwlQSU5NVVhfREFUQShWSU9fRDdfTUFSSywgUFNEMTFfVklPLCBWSU9fRDdfU0NJRjFfU0NLKSwKKwlQSU5NVVhfREFUQShWSU9fRDZfTUFSSywgUFNEMTFfVklPLCBWSU9fRDZfU0NJRjFfUlhEKSwKKwlQSU5NVVhfREFUQShWSU9fRDVfTUFSSywgUFNEMTFfVklPLCBWSU9fRDVfU0NJRjFfVFhEKSwKKwlQSU5NVVhfREFUQShWSU9fRDRfTUFSSywgVklPX0Q0KSwKKwlQSU5NVVhfREFUQShWSU9fRDNfTUFSSywgVklPX0QzKSwKKwlQSU5NVVhfREFUQShWSU9fRDJfTUFSSywgVklPX0QyKSwKKwlQSU5NVVhfREFUQShWSU9fRDFfTUFSSywgVklPX0QxKSwKKwlQSU5NVVhfREFUQShWSU9fRDBfTUFSSywgUFNEMTBfVklPX0QwLCBWSU9fRDBfTENETENMSyksCisJUElOTVVYX0RBVEEoVklPX0NMS19NQVJLLCBQU0QxMl9WSU8sIE1TRUxCOV9WSU8sIFZJT19DTEtfU0NJRjFfUlRTKSwKKwlQSU5NVVhfREFUQShWSU9fVkRfTUFSSywgUFNEMTJfVklPLCBNU0VMQjlfVklPLCBWSU9fVkRfU0NJRjFfQ1RTKSwKKwlQSU5NVVhfREFUQShWSU9fSERfTUFSSywgUFNEMTNfVklPLCBNU0VMQjlfVklPLCBWSU9fSERfU0NJRjJfUlhEKSwKKwlQSU5NVVhfREFUQShWSU9fRkxEX01BUkssIFBTRDEzX1ZJTywgSElaQTlfVklPLCBWSU9fRkxEX1NDSUYyX0NUUyksCisJUElOTVVYX0RBVEEoVklPX0NLT19NQVJLLCBQU0QxM19WSU8sIEhJWkE5X1ZJTywgVklPX0NLT19TQ0lGMl9SVFMpLAorCVBJTk1VWF9EQVRBKFZJT19TVEVYX01BUkssIFBTRDEzX1ZJTywgSElaQTlfVklPLCBWSU9fU1RFWF9TQ0lGMl9TQ0spLAorCVBJTk1VWF9EQVRBKFZJT19TVEVNX01BUkssIFBTRDEzX1ZJTywgSElaQTlfVklPLCBWSU9fU1RFTV9TQ0lGMl9UWEQpLAorCVBJTk1VWF9EQVRBKFZJT19WRDJfTUFSSywgUFNFM19WSU8sIE1TRUxCOV9WSU8yLAorCQkgICAgSElaQjBfVklPLCBGT0VfVklPX1ZEMiksCisJUElOTVVYX0RBVEEoVklPX0hEMl9NQVJLLCBQU0UzX1ZJTywgTVNFTEI5X1ZJTzIsCisJCSAgICBISVpCMV9WSU8sIEhJWkIxX1ZJTywgRkNFX1ZJT19IRDIpLAorCVBJTk1VWF9EQVRBKFZJT19DTEsyX01BUkssIFBTRTNfVklPLCBNU0VMQjlfVklPMiwKKwkJICAgIEhJWkIxX1ZJTywgRlJCX1ZJT19DTEsyKSwKKworCS8qIExDREMgKi8KKwlQSU5NVVhfREFUQShMQ0REMjNfTUFSSywgSElaQThfTENEQywgTENERDIzKSwKKwlQSU5NVVhfREFUQShMQ0REMjJfTUFSSywgSElaQThfTENEQywgTENERDIyKSwKKwlQSU5NVVhfREFUQShMQ0REMjFfTUFSSywgSElaQThfTENEQywgTENERDIxKSwKKwlQSU5NVVhfREFUQShMQ0REMjBfTUFSSywgSElaQThfTENEQywgTENERDIwKSwKKwlQSU5NVVhfREFUQShMQ0REMTlfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxOV9EVl9DTEtJKSwKKwlQSU5NVVhfREFUQShMQ0REMThfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxOF9EVl9DTEspLAorCVBJTk1VWF9EQVRBKExDREQxN19NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywKKwkJICAgIExDREQxN19EVl9IU1lOQyksCisJUElOTVVYX0RBVEEoTENERDE2X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLAorCQkgICAgTENERDE2X0RWX1ZTWU5DKSwKKwlQSU5NVVhfREFUQShMQ0REMTVfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxNV9EVl9EMTUpLAorCVBJTk1VWF9EQVRBKExDREQxNF9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDE0X0RWX0QxNCksCisJUElOTVVYX0RBVEEoTENERDEzX01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMTNfRFZfRDEzKSwKKwlQSU5NVVhfREFUQShMQ0REMTJfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxMl9EVl9EMTIpLAorCVBJTk1VWF9EQVRBKExDREQxMV9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDExX0RWX0QxMSksCisJUElOTVVYX0RBVEEoTENERDEwX01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMTBfRFZfRDEwKSwKKwlQSU5NVVhfREFUQShMQ0REOV9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDlfRFZfRDkpLAorCVBJTk1VWF9EQVRBKExDREQ4X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REOF9EVl9EOCksCisJUElOTVVYX0RBVEEoTENERDdfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQ3X0RWX0Q3KSwKKwlQSU5NVVhfREFUQShMQ0RENl9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDZfRFZfRDYpLAorCVBJTk1VWF9EQVRBKExDREQ1X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0RENV9EVl9ENSksCisJUElOTVVYX0RBVEEoTENERDRfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQ0X0RWX0Q0KSwKKwlQSU5NVVhfREFUQShMQ0REM19NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDNfRFZfRDMpLAorCVBJTk1VWF9EQVRBKExDREQyX01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMl9EVl9EMiksCisJUElOTVVYX0RBVEEoTENERDFfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxX0RWX0QxKSwKKwlQSU5NVVhfREFUQShMQ0REMF9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDBfRFZfRDApLAorCVBJTk1VWF9EQVRBKExDRExDTEtfTUFSSywgUFNEMTBfTENETENMSywgVklPX0QwX0xDRExDTEspLAorCS8qIE1haW4gTENEICovCisJUElOTVVYX0RBVEEoTENERE9OX01BUkssIFBTRDJfTENERE9OLCBISVpBN19MQ0RDLCBMQ0RET05fTENERE9OMiksCisJUElOTVVYX0RBVEEoTENEVkNQV0NfTUFSSywgUFNEM19MQ0RWRVBXQ19MQ0RWQ1BXQywKKwkJICAgIEhJWkE2X0xDREMsIExDRFZDUFdDX0xDRFZDUFdDMiksCisJUElOTVVYX0RBVEEoTENEVkVQV0NfTUFSSywgUFNEM19MQ0RWRVBXQ19MQ0RWQ1BXQywKKwkJICAgIEhJWkE2X0xDREMsIExDRFZFUFdDX0xDRFZFUFdDMiksCisJUElOTVVYX0RBVEEoTENEVlNZTl9NQVJLLCBISVpBN19MQ0RDLCBMQ0RWU1lOKSwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJUElOTVVYX0RBVEEoTENERENLX01BUkssIE1TRUxCOF9SR0IsIEhJWkE4X0xDREMsIExDRERDS19MQ0RXUiksCisJUElOTVVYX0RBVEEoTENESFNZTl9NQVJLLCBNU0VMQjhfUkdCLCBISVpBN19MQ0RDLCBMQ0RIU1lOX0xDRENTKSwKKwlQSU5NVVhfREFUQShMQ0RESVNQX01BUkssIE1TRUxCOF9SR0IsIEhJWkE3X0xDREMsIExDRERJU1BfTENEUlMpLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfREFUQShMQ0RSU19NQVJLLCBNU0VMQjhfU1lTLCBISVpBN19MQ0RDLCBMQ0RESVNQX0xDRFJTKSwKKwlQSU5NVVhfREFUQShMQ0RDU19NQVJLLCBNU0VMQjhfU1lTLCBISVpBN19MQ0RDLCBMQ0RIU1lOX0xDRENTKSwKKwlQSU5NVVhfREFUQShMQ0RXUl9NQVJLLCBNU0VMQjhfU1lTLCBISVpBOF9MQ0RDLCBMQ0REQ0tfTENEV1IpLAorCVBJTk1VWF9EQVRBKExDRFJEX01BUkssIEhJWkE3X0xDREMsIExDRFJEKSwKKwkvKiBTdWIgTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfREFUQShMQ0RET04yX01BUkssIFBTRDJfTENERE9OMiwgSElaQTdfTENEQywgTENERE9OX0xDRERPTjIpLAorCVBJTk1VWF9EQVRBKExDRFZDUFdDMl9NQVJLLCBQU0QzX0xDRFZFUFdDMl9MQ0RWQ1BXQzIsCisJCSAgICBISVpBNl9MQ0RDLCBMQ0RWQ1BXQ19MQ0RWQ1BXQzIpLAorCVBJTk1VWF9EQVRBKExDRFZFUFdDMl9NQVJLLCBQU0QzX0xDRFZFUFdDMl9MQ0RWQ1BXQzIsCisJCSAgICBISVpBNl9MQ0RDLCBMQ0RWRVBXQ19MQ0RWRVBXQzIpLAorCVBJTk1VWF9EQVRBKExDRFZTWU4yX01BUkssIFBTRTEyX0xDRFZTWU4yLCBISVpBOF9MQ0RDLCBMQ0RWU1lOMl9EQUNLKSwKKwlQSU5NVVhfREFUQShMQ0RDUzJfTUFSSywgUFNENV9MQ0RDUzIsIENTNkJfQ0UxQl9MQ0RDUzIpLAorCisJLyogQlNDICovCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssIElPSVMxNiksCisJUElOTVVYX0RBVEEoQTI1X01BUkssIEEyNSksCisJUElOTVVYX0RBVEEoQTI0X01BUkssIEEyNCksCisJUElOTVVYX0RBVEEoQTIzX01BUkssIEEyMyksCisJUElOTVVYX0RBVEEoQTIyX01BUkssIEEyMiksCisJUElOTVVYX0RBVEEoQlNfTUFSSywgUFNBOV9CUywgSVJRNF9CUyksCisJUElOTVVYX0RBVEEoQ1M2Ql9DRTFCX01BUkssIFBTRDVfQ1M2Ql9DRTFCLCBDUzZCX0NFMUJfTENEQ1MyKSwKKwlQSU5NVVhfREFUQShXQUlUX01BUkssIFdBSVQpLAorCVBJTk1VWF9EQVRBKENTNkFfQ0UyQl9NQVJLLCBDUzZBX0NFMkIpLAorCisJLyogU0JTQyAqLworCVBJTk1VWF9EQVRBKEhQRDYzX01BUkssIEhQRDYzKSwKKwlQSU5NVVhfREFUQShIUEQ2Ml9NQVJLLCBIUEQ2MiksCisJUElOTVVYX0RBVEEoSFBENjFfTUFSSywgSFBENjEpLAorCVBJTk1VWF9EQVRBKEhQRDYwX01BUkssIEhQRDYwKSwKKwlQSU5NVVhfREFUQShIUEQ1OV9NQVJLLCBIUEQ1OSksCisJUElOTVVYX0RBVEEoSFBENThfTUFSSywgSFBENTgpLAorCVBJTk1VWF9EQVRBKEhQRDU3X01BUkssIEhQRDU3KSwKKwlQSU5NVVhfREFUQShIUEQ1Nl9NQVJLLCBIUEQ1NiksCisJUElOTVVYX0RBVEEoSFBENTVfTUFSSywgSFBENTUpLAorCVBJTk1VWF9EQVRBKEhQRDU0X01BUkssIEhQRDU0KSwKKwlQSU5NVVhfREFUQShIUEQ1M19NQVJLLCBIUEQ1MyksCisJUElOTVVYX0RBVEEoSFBENTJfTUFSSywgSFBENTIpLAorCVBJTk1VWF9EQVRBKEhQRDUxX01BUkssIEhQRDUxKSwKKwlQSU5NVVhfREFUQShIUEQ1MF9NQVJLLCBIUEQ1MCksCisJUElOTVVYX0RBVEEoSFBENDlfTUFSSywgSFBENDkpLAorCVBJTk1VWF9EQVRBKEhQRDQ4X01BUkssIEhQRDQ4KSwKKwlQSU5NVVhfREFUQShIUERRTTdfTUFSSywgSFBEUU03KSwKKwlQSU5NVVhfREFUQShIUERRTTZfTUFSSywgSFBEUU02KSwKKwlQSU5NVVhfREFUQShIUERRTTVfTUFSSywgSFBEUU01KSwKKwlQSU5NVVhfREFUQShIUERRTTRfTUFSSywgSFBEUU00KSwKKworCS8qIElSUSAqLworCVBJTk1VWF9EQVRBKElSUTBfTUFSSywgSElaQzhfSVJRMCwgSVJRMCksCisJUElOTVVYX0RBVEEoSVJRMV9NQVJLLCBISVpDOV9JUlExLCBJUlExKSwKKwlQSU5NVVhfREFUQShJUlEyX01BUkssIFBTQTRfSVJRMiwgSElaQzEwX0lSUTIsIElSUTJfU0RISUQyKSwKKwlQSU5NVVhfREFUQShJUlEzX01BUkssIFBTRTE1X1NJT0YwX01DS19JUlEzLCBQU0I4X0lSUTMsCisJCSAgICBISVpDMTFfSVJRMywgUFRRMCksCisJUElOTVVYX0RBVEEoSVJRNF9NQVJLLCBQU0E5X0lSUTQsIEhJWkMxMl9JUlE0LCBJUlE0X0JTKSwKKwlQSU5NVVhfREFUQShJUlE1X01BUkssIEhJWkMxM19JUlE1LCBJUlE1KSwKKwlQSU5NVVhfREFUQShJUlE2X01BUkssIFBTQTE1X0lSUTYsIEhJWkMxNF9JUlE2LCBLRVlJTjBfSVJRNiksCisJUElOTVVYX0RBVEEoSVJRN19NQVJLLCBQU0ExNF9JUlE3LCBISVpDMTVfSVJRNywgS0VZSU40X0lSUTcpLAorCisJLyogU0RISSAqLworCVBJTk1VWF9EQVRBKFNESElDRF9NQVJLLCBTREhJQ0QpLAorCVBJTk1VWF9EQVRBKFNESElXUF9NQVJLLCBTREhJV1ApLAorCVBJTk1VWF9EQVRBKFNESElEM19NQVJLLCBTREhJRDMpLAorCVBJTk1VWF9EQVRBKFNESElEMl9NQVJLLCBQU0E0X1NESElEMiwgSVJRMl9TREhJRDIpLAorCVBJTk1VWF9EQVRBKFNESElEMV9NQVJLLCBTREhJRDEpLAorCVBJTk1VWF9EQVRBKFNESElEMF9NQVJLLCBTREhJRDApLAorCVBJTk1VWF9EQVRBKFNESElDTURfTUFSSywgU0RISUNNRCksCisJUElOTVVYX0RBVEEoU0RISUNMS19NQVJLLCBTREhJQ0xLKSwKKworCS8qIFNJVSAtIFBvcnQgQSAqLworCVBJTk1VWF9EQVRBKFNJVUFPTFJfTUFSSywgUFNDMTNfU0lVQU9MUiwgU0lVQU9MUl9TSU9GMV9TWU5DKSwKKwlQSU5NVVhfREFUQShTSVVBT0JUX01BUkssIFBTQzE0X1NJVUFPQlQsIFNJVUFPQlRfU0lPRjFfU0NLKSwKKwlQSU5NVVhfREFUQShTSVVBSVNMRF9NQVJLLCBQU0MxNV9TSVVBSVNMRCwgU0lVQUlTTERfU0lPRjFfUlhEKSwKKwlQSU5NVVhfREFUQShTSVVBSUxSX01BUkssIFBTQzExX1NJVUFJTFIsIFNJVUFJTFJfU0lPRjFfU1MyKSwKKwlQSU5NVVhfREFUQShTSVVBSUJUX01BUkssIFBTQzEyX1NJVUFJQlQsIFNJVUFJQlRfU0lPRjFfU1MxKSwKKwlQSU5NVVhfREFUQShTSVVBT1NMRF9NQVJLLCBQU0IwX1NJVUFPU0xELCBTSVVBT1NMRF9TSU9GMV9UWEQpLAorCVBJTk1VWF9EQVRBKFNJVU1DS0FfTUFSSywgUFNFMTFfU0lVTUNLQV9TSU9GMV9NQ0ssIFBTQjFfU0lVTUNLQSwgUFRLMCksCisJUElOTVVYX0RBVEEoU0lVRkNLQV9NQVJLLCBQU0UxMV9TSVVGQ0tBLCBQVEswKSwKKworCS8qIFNJVSAtIFBvcnQgQiAqLworCVBJTk1VWF9EQVRBKFNJVUJPTFJfTUFSSywgUFNCMTFfU0lVQk9MUiwgU0lPU1RSQjFfU0lVQk9MUiksCisJUElOTVVYX0RBVEEoU0lVQk9CVF9NQVJLLCBQU0IxMF9TSVVCT0JULCBTSU9TQ0tfU0lVQk9CVCksCisJUElOTVVYX0RBVEEoU0lVQklTTERfTUFSSywgUFNCMTRfU0lVQklTTEQsIFNJT1JYRF9TSVVCSVNMRCksCisJUElOTVVYX0RBVEEoU0lVQklMUl9NQVJLLCBQU0IxM19TSVVCSUxSLCBTSU9EX1NJVUJJTFIpLAorCVBJTk1VWF9EQVRBKFNJVUJJQlRfTUFSSywgUFNCMTJfU0lVQklCVCwgU0lPU1RSQjBfU0lVQklCVCksCisJUElOTVVYX0RBVEEoU0lVQk9TTERfTUFSSywgUFNCMTVfU0lVQk9TTEQsIFNJT1RYRF9TSVVCT1NMRCksCisJUElOTVVYX0RBVEEoU0lVTUNLQl9NQVJLLCBQU0Q5X1NJT01DS19TSVVNQ0tCLCBQU0I5X1NJVU1DS0IsIFBURjYpLAorCVBJTk1VWF9EQVRBKFNJVUZDS0JfTUFSSywgUFNEOV9TSVVGQ0tCLCBQVEY2KSwKKworCS8qIEFVRCAqLworCVBJTk1VWF9EQVRBKEFVRFNZTkNfTUFSSywgQVVEU1lOQyksCisJUElOTVVYX0RBVEEoQVVEQVRBM19NQVJLLCBBVURBVEEzKSwKKwlQSU5NVVhfREFUQShBVURBVEEyX01BUkssIEFVREFUQTIpLAorCVBJTk1VWF9EQVRBKEFVREFUQTFfTUFSSywgQVVEQVRBMSksCisJUElOTVVYX0RBVEEoQVVEQVRBMF9NQVJLLCBBVURBVEEwKSwKKworCS8qIERNQUMgKi8KKwlQSU5NVVhfREFUQShEQUNLX01BUkssIFBTRTEyX0RBQ0ssIExDRFZTWU4yX0RBQ0spLAorCVBJTk1VWF9EQVRBKERSRVEwX01BUkssIERSRVEwKSwKKworCS8qIFZPVSAqLworCVBJTk1VWF9EQVRBKERWX0NMS0lfTUFSSywgUFNEMF9EViwgTENERDE5X0RWX0NMS0kpLAorCVBJTk1VWF9EQVRBKERWX0NMS19NQVJLLCBQU0QwX0RWLCBMQ0REMThfRFZfQ0xLKSwKKwlQSU5NVVhfREFUQShEVl9IU1lOQ19NQVJLLCBQU0QwX0RWLCBMQ0REMTdfRFZfSFNZTkMpLAorCVBJTk1VWF9EQVRBKERWX1ZTWU5DX01BUkssIFBTRDBfRFYsIExDREQxNl9EVl9WU1lOQyksCisJUElOTVVYX0RBVEEoRFZfRDE1X01BUkssIFBTRDBfRFYsIExDREQxNV9EVl9EMTUpLAorCVBJTk1VWF9EQVRBKERWX0QxNF9NQVJLLCBQU0QwX0RWLCBMQ0REMTRfRFZfRDE0KSwKKwlQSU5NVVhfREFUQShEVl9EMTNfTUFSSywgUFNEMF9EViwgTENERDEzX0RWX0QxMyksCisJUElOTVVYX0RBVEEoRFZfRDEyX01BUkssIFBTRDBfRFYsIExDREQxMl9EVl9EMTIpLAorCVBJTk1VWF9EQVRBKERWX0QxMV9NQVJLLCBQU0QwX0RWLCBMQ0REMTFfRFZfRDExKSwKKwlQSU5NVVhfREFUQShEVl9EMTBfTUFSSywgUFNEMF9EViwgTENERDEwX0RWX0QxMCksCisJUElOTVVYX0RBVEEoRFZfRDlfTUFSSywgUFNEMF9EViwgTENERDlfRFZfRDkpLAorCVBJTk1VWF9EQVRBKERWX0Q4X01BUkssIFBTRDBfRFYsIExDREQ4X0RWX0Q4KSwKKwlQSU5NVVhfREFUQShEVl9EN19NQVJLLCBQU0QwX0RWLCBMQ0REN19EVl9ENyksCisJUElOTVVYX0RBVEEoRFZfRDZfTUFSSywgUFNEMF9EViwgTENERDZfRFZfRDYpLAorCVBJTk1VWF9EQVRBKERWX0Q1X01BUkssIFBTRDBfRFYsIExDREQ1X0RWX0Q1KSwKKwlQSU5NVVhfREFUQShEVl9ENF9NQVJLLCBQU0QwX0RWLCBMQ0RENF9EVl9ENCksCisJUElOTVVYX0RBVEEoRFZfRDNfTUFSSywgUFNEMF9EViwgTENERDNfRFZfRDMpLAorCVBJTk1VWF9EQVRBKERWX0QyX01BUkssIFBTRDBfRFYsIExDREQyX0RWX0QyKSwKKwlQSU5NVVhfREFUQShEVl9EMV9NQVJLLCBQU0QwX0RWLCBMQ0REMV9EVl9EMSksCisJUElOTVVYX0RBVEEoRFZfRDBfTUFSSywgUFNEMF9EViwgTENERDBfRFZfRDApLAorCisJLyogQ1BHICovCisJUElOTVVYX0RBVEEoU1RBVFVTMF9NQVJLLCBTVEFUVVMwKSwKKwlQSU5NVVhfREFUQShQRFNUQVRVU19NQVJLLCBQRFNUQVRVUyksCisKKwkvKiBTSU9GMCAqLworCVBJTk1VWF9EQVRBKFNJT0YwX01DS19NQVJLLCBQU0UxNV9TSU9GMF9NQ0tfSVJRMywgUFNCOF9TSU9GMF9NQ0ssIFBUUTApLAorCVBJTk1VWF9EQVRBKFNJT0YwX1NDS19NQVJLLCBQU0I1X1NJT0YwX1NDSywgU0lPRjBfU0NLX1RTX1NDSyksCisJUElOTVVYX0RBVEEoU0lPRjBfU1lOQ19NQVJLLCBQU0I0X1NJT0YwX1NZTkMsIFNJT0YwX1NZTkNfVFNfU0RFTiksCisJUElOTVVYX0RBVEEoU0lPRjBfU1MxX01BUkssIFBTQjNfU0lPRjBfU1MxLCBTSU9GMF9TUzFfVFNfU1BTWU5DKSwKKwlQSU5NVVhfREFUQShTSU9GMF9TUzJfTUFSSywgUFNCMl9TSU9GMF9TUzIsIFNJT0YwX1NTMl9TSU1fUlNUKSwKKwlQSU5NVVhfREFUQShTSU9GMF9UWERfTUFSSywgUFNFMTRfU0lPRjBfVFhEX0lSREFfT1VULAorCQkgICAgUFNCN19TSU9GMF9UWEQsIFBUUTEpLAorCVBJTk1VWF9EQVRBKFNJT0YwX1JYRF9NQVJLLCBQU0UxM19TSU9GMF9SWERfSVJEQV9JTiwKKwkJICAgIFBTQjZfU0lPRjBfUlhELCBQVFEyKSwKKworCS8qIFNJT0YxICovCisJUElOTVVYX0RBVEEoU0lPRjFfTUNLX01BUkssIFBTRTExX1NJVU1DS0FfU0lPRjFfTUNLLAorCQkgICAgUFNCMV9TSU9GMV9NQ0ssIFBUSzApLAorCVBJTk1VWF9EQVRBKFNJT0YxX1NDS19NQVJLLCBQU0MxNF9TSU9GMV9TQ0ssIFNJVUFPQlRfU0lPRjFfU0NLKSwKKwlQSU5NVVhfREFUQShTSU9GMV9TWU5DX01BUkssIFBTQzEzX1NJT0YxX1NZTkMsIFNJVUFPTFJfU0lPRjFfU1lOQyksCisJUElOTVVYX0RBVEEoU0lPRjFfU1MxX01BUkssIFBTQzEyX1NJT0YxX1NTMSwgU0lVQUlCVF9TSU9GMV9TUzEpLAorCVBJTk1VWF9EQVRBKFNJT0YxX1NTMl9NQVJLLCBQU0MxMV9TSU9GMV9TUzIsIFNJVUFJTFJfU0lPRjFfU1MyKSwKKwlQSU5NVVhfREFUQShTSU9GMV9UWERfTUFSSywgUFNCMF9TSU9GMV9UWEQsIFNJVUFPU0xEX1NJT0YxX1RYRCksCisJUElOTVVYX0RBVEEoU0lPRjFfUlhEX01BUkssIFBTQzE1X1NJT0YxX1JYRCwgU0lVQUlTTERfU0lPRjFfUlhEKSwKKworCS8qIFNJTSAqLworCVBJTk1VWF9EQVRBKFNJTV9EX01BUkssIFBTRTE1X1NJTV9ELCBQVFEwKSwKKwlQSU5NVVhfREFUQShTSU1fQ0xLX01BUkssIFBTRTE0X1NJTV9DTEssIFBUUTEpLAorCVBJTk1VWF9EQVRBKFNJTV9SU1RfTUFSSywgUFNCMl9TSU1fUlNULCBTSU9GMF9TUzJfU0lNX1JTVCksCisKKwkvKiBUU0lGICovCisJUElOTVVYX0RBVEEoVFNfU0RBVF9NQVJLLCBQU0UxM19UU19TREFULCBQVFEyKSwKKwlQSU5NVVhfREFUQShUU19TQ0tfTUFSSywgUFNCNV9UU19TQ0ssIFNJT0YwX1NDS19UU19TQ0spLAorCVBJTk1VWF9EQVRBKFRTX1NERU5fTUFSSywgUFNCNF9UU19TREVOLCBTSU9GMF9TWU5DX1RTX1NERU4pLAorCVBJTk1VWF9EQVRBKFRTX1NQU1lOQ19NQVJLLCBQU0IzX1RTX1NQU1lOQywgU0lPRjBfU1MxX1RTX1NQU1lOQyksCisKKwkvKiBJUkRBICovCisJUElOTVVYX0RBVEEoSVJEQV9JTl9NQVJLLCBQU0UxM19TSU9GMF9SWERfSVJEQV9JTiwgUFNCNl9JUkRBX0lOLCBQVFEyKSwKKwlQSU5NVVhfREFUQShJUkRBX09VVF9NQVJLLCBQU0UxNF9TSU9GMF9UWERfSVJEQV9PVVQsCisJCSAgICBQU0I3X0lSREFfT1VULCBQVFExKSwKKworCS8qIFRQVSAqLworCVBJTk1VWF9EQVRBKFRQVVRPX01BUkssIFBTRDhfVFBVVE8sIFNDSUYwX1NDS19UUFVUTyksCisKKwkvKiBGTENUTCAqLworCVBJTk1VWF9EQVRBKEZDRV9NQVJLLCBQU0UzX0ZMQ1RMLCBGQ0VfVklPX0hEMiksCisJUElOTVVYX0RBVEEoTkFGN19NQVJLLCBQU0MwX05BRiwgSElaQTEwX05BRiwgTkFGN19WSU9fRDE1KSwKKwlQSU5NVVhfREFUQShOQUY2X01BUkssIFBTQzBfTkFGLCBISVpBMTBfTkFGLCBOQUY2X1ZJT19EMTQpLAorCVBJTk1VWF9EQVRBKE5BRjVfTUFSSywgUFNDMF9OQUYsIEhJWkExMF9OQUYsIE5BRjVfVklPX0QxMyksCisJUElOTVVYX0RBVEEoTkFGNF9NQVJLLCBQU0MwX05BRiwgSElaQTEwX05BRiwgTkFGNF9WSU9fRDEyKSwKKwlQSU5NVVhfREFUQShOQUYzX01BUkssIFBTQzBfTkFGLCBISVpBMTBfTkFGLCBOQUYzX1ZJT19EMTEpLAorCVBJTk1VWF9EQVRBKE5BRjJfTUFSSywgUFNFMl9OQUYyLCBISVpCMF9WSU8sIE5BRjJfVklPX0QxMCksCisJUElOTVVYX0RBVEEoTkFGMV9NQVJLLCBQU0UxX05BRjEsIEhJWkIwX1ZJTywgTkFGMV9WSU9fRDkpLAorCVBJTk1VWF9EQVRBKE5BRjBfTUFSSywgUFNFMF9OQUYwLCBISVpCMF9WSU8sIE5BRjBfVklPX0Q4KSwKKwlQSU5NVVhfREFUQShGQ0RFX01BUkssIEZDREUpLAorCVBJTk1VWF9EQVRBKEZPRV9NQVJLLCBQU0UzX0ZMQ1RMLCBISVpCMF9WSU8sIEZPRV9WSU9fVkQyKSwKKwlQSU5NVVhfREFUQShGU0NfTUFSSywgRlNDKSwKKwlQSU5NVVhfREFUQShGV0VfTUFSSywgRldFKSwKKwlQSU5NVVhfREFUQShGUkJfTUFSSywgUFNFM19GTENUTCwgRlJCX1ZJT19DTEsyKSwKKworCS8qIEtFWVNDICovCisJUElOTVVYX0RBVEEoS0VZSU4wX01BUkssIFBTQTE1X0tFWUlOMCwgSElaQzE0X0lSUTYsIEtFWUlOMF9JUlE2KSwKKwlQSU5NVVhfREFUQShLRVlJTjFfTUFSSywgSElaQTE0X0tFWVNDLCBLRVlJTjEpLAorCVBJTk1VWF9EQVRBKEtFWUlOMl9NQVJLLCBISVpBMTRfS0VZU0MsIEtFWUlOMiksCisJUElOTVVYX0RBVEEoS0VZSU4zX01BUkssIEhJWkExNF9LRVlTQywgS0VZSU4zKSwKKwlQSU5NVVhfREFUQShLRVlJTjRfTUFSSywgUFNBMTRfS0VZSU40LCBISVpDMTVfSVJRNywgS0VZSU40X0lSUTcpLAorCVBJTk1VWF9EQVRBKEtFWU9VVDBfTUFSSywgSElaQTE0X0tFWVNDLCBLRVlPVVQwKSwKKwlQSU5NVVhfREFUQShLRVlPVVQxX01BUkssIEhJWkExNF9LRVlTQywgS0VZT1VUMSksCisJUElOTVVYX0RBVEEoS0VZT1VUMl9NQVJLLCBISVpBMTRfS0VZU0MsIEtFWU9VVDIpLAorCVBJTk1VWF9EQVRBKEtFWU9VVDNfTUFSSywgSElaQTE0X0tFWVNDLCBLRVlPVVQzKSwKKwlQSU5NVVhfREFUQShLRVlPVVQ0X0lONl9NQVJLLCBISVpBMTRfS0VZU0MsIEtFWU9VVDRfSU42KSwKKwlQSU5NVVhfREFUQShLRVlPVVQ1X0lONV9NQVJLLCBISVpBMTRfS0VZU0MsIEtFWU9VVDVfSU41KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2dwaW8gcGlubXV4X2dwaW9zW10gPSB7CisJLyogUFRBICovCisJUElOTVVYX0dQSU8oR1BJT19QVEE3LCBQVEE3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBNiwgUFRBNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTUsIFBUQTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEE0LCBQVEE0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMywgUFRBM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTIsIFBUQTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEExLCBQVEExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMCwgUFRBMF9EQVRBKSwKKworCS8qIFBUQiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRCNywgUFRCN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjYsIFBUQjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEI1LCBQVEI1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCNCwgUFRCNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjMsIFBUQjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEIyLCBQVEIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMSwgUFRCMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjAsIFBUQjBfREFUQSksCisKKwkvKiBQVEMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUQzcsIFBUQzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEM1LCBQVEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDNCwgUFRDNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzMsIFBUQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEMyLCBQVEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDMCwgUFRDMF9EQVRBKSwKKworCS8qIFBURCAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRENywgUFREN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDYsIFBURDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQ1LCBQVEQ1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRENCwgUFRENF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDMsIFBURDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQyLCBQVEQyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFREMSwgUFREMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDAsIFBURDBfREFUQSksCisKKwkvKiBQVEUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURTcsIFBURTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEU2LCBQVEU2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFNSwgUFRFNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTQsIFBURTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUxLCBQVEUxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFMCwgUFRFMF9EQVRBKSwKKworCS8qIFBURiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRGNiwgUFRGNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjUsIFBURjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEY0LCBQVEY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMywgUFRGM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjIsIFBURjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYxLCBQVEYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMCwgUFRGMF9EQVRBKSwKKworCS8qIFBURyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRHNCwgUFRHNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzMsIFBURzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEcyLCBQVEcyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHMSwgUFRHMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzAsIFBURzBfREFUQSksCisKKwkvKiBQVEggKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUSDcsIFBUSDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEg2LCBQVEg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRINSwgUFRINV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDQsIFBUSDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgzLCBQVEgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMiwgUFRIMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDEsIFBUSDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgwLCBQVEgwX0RBVEEpLAorCisJLyogUFRKICovCisJUElOTVVYX0dQSU8oR1BJT19QVEo3LCBQVEo3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKNiwgUFRKNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjUsIFBUSjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEoxLCBQVEoxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKMCwgUFRKMF9EQVRBKSwKKworCS8qIFBUSyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRLNiwgUFRLNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzUsIFBUSzVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEs0LCBQVEs0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMywgUFRLM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzIsIFBUSzJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEsxLCBQVEsxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMCwgUFRLMF9EQVRBKSwKKworCS8qIFBUTCAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRMNywgUFRMN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDYsIFBUTDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEw1LCBQVEw1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMNCwgUFRMNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDMsIFBUTDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEwyLCBQVEwyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMSwgUFRMMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDAsIFBUTDBfREFUQSksCisKKwkvKiBQVE0gKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUTTcsIFBUTTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE02LCBQVE02X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNNSwgUFRNNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTQsIFBUTTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0zLCBQVE0zX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNMiwgUFRNMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTEsIFBUTTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0wLCBQVE0wX0RBVEEpLAorCisJLyogUFROICovCisJUElOTVVYX0dQSU8oR1BJT19QVE43LCBQVE43X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRONiwgUFRONl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjUsIFBUTjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE40LCBQVE40X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFROMywgUFROM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjIsIFBUTjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE4xLCBQVE4xX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFROMCwgUFROMF9EQVRBKSwKKworCS8qIFBUUSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRRNiwgUFRRNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUTUsIFBUUTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFE0LCBQVFE0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRRMywgUFRRM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUTIsIFBUUTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFExLCBQVFExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRRMCwgUFRRMF9EQVRBKSwKKworCS8qIFBUUiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRSNCwgUFRSNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjMsIFBUUjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFIyLCBQVFIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMSwgUFRSMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjAsIFBUUjBfREFUQSksCisKKwkvKiBQVFMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUUzQsIFBUUzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMzLCBQVFMzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTMiwgUFRTMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzEsIFBUUzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMwLCBQVFMwX0RBVEEpLAorCisJLyogUFRUICovCisJUElOTVVYX0dQSU8oR1BJT19QVFQ0LCBQVFQ0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMywgUFRUM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDIsIFBUVDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQxLCBQVFQxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMCwgUFRUMF9EQVRBKSwKKworCS8qIFBUVSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRVNCwgUFRVNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTMsIFBUVTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUyLCBQVFUyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMSwgUFRVMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTAsIFBUVTBfREFUQSksCisKKwkvKiBQVFYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUVjQsIFBUVjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYzLCBQVFYzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMiwgUFRWMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjEsIFBUVjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYwLCBQVFYwX0RBVEEpLAorCisJLyogUFRXICovCisJUElOTVVYX0dQSU8oR1BJT19QVFc2LCBQVFc2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXNSwgUFRXNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzQsIFBUVzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFczLCBQVFczX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXMiwgUFRXMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzEsIFBUVzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFcwLCBQVFcwX0RBVEEpLAorCisJLyogUFRYICovCisJUElOTVVYX0dQSU8oR1BJT19QVFg2LCBQVFg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYNSwgUFRYNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDQsIFBUWDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgzLCBQVFgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYMiwgUFRYMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDEsIFBUWDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgwLCBQVFgwX0RBVEEpLAorCisJLyogUFRZICovCisJUElOTVVYX0dQSU8oR1BJT19QVFk1LCBQVFk1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZNCwgUFRZNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTMsIFBUWTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFkyLCBQVFkyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZMSwgUFRZMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTAsIFBUWTBfREFUQSksCisKKwkvKiBQVFogKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUWjUsIFBUWjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFo0LCBQVFo0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRaMywgUFRaM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjIsIFBUWjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFoxLCBQVFoxX0RBVEEpLAorCisJLyogU0NJRjAgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1RYRCwgU0NJRjBfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUlhELCBTQ0lGMF9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9SVFMsIFNDSUYwX1JUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX0NUUywgU0NJRjBfQ1RTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfU0NLLCBTQ0lGMF9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGMSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfVFhELCBTQ0lGMV9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9SWEQsIFNDSUYxX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1JUUywgU0NJRjFfUlRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfQ1RTLCBTQ0lGMV9DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9TQ0ssIFNDSUYxX1NDS19NQVJLKSwKKworCS8qIFNDSUYyICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9UWEQsIFNDSUYyX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1JYRCwgU0NJRjJfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfUlRTLCBTQ0lGMl9SVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9DVFMsIFNDSUYyX0NUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1NDSywgU0NJRjJfU0NLX01BUkspLAorCisJLyogU0lPICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9UWEQsIFNJT1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT1JYRCwgU0lPUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRCwgU0lPRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT1NUUkIwLCBTSU9TVFJCMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT1NUUkIxLCBTSU9TVFJCMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT1NDSywgU0lPU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPTUNLLCBTSU9NQ0tfTUFSSyksCisKKwkvKiBDRVUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTUsIFZJT19EMTVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDE0LCBWSU9fRDE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxMywgVklPX0QxM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTIsIFZJT19EMTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDExLCBWSU9fRDExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxMCwgVklPX0QxMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EOSwgVklPX0Q5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q4LCBWSU9fRDhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDcsIFZJT19EN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19ENiwgVklPX0Q2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q1LCBWSU9fRDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDQsIFZJT19ENF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMywgVklPX0QzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QyLCBWSU9fRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDEsIFZJT19EMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMCwgVklPX0QwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0NMSywgVklPX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19WRCwgVklPX1ZEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0hELCBWSU9fSERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRkxELCBWSU9fRkxEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0NLTywgVklPX0NLT19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19TVEVYLCBWSU9fU1RFWF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19TVEVNLCBWSU9fU1RFTV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19WRDIsIFZJT19WRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fSEQyLCBWSU9fSEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0NMSzIsIFZJT19DTEsyX01BUkspLAorCisJLyogTENEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDIzLCBMQ0REMjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMjIsIExDREQyMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyMSwgTENERDIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDIwLCBMQ0REMjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTksIExDREQxOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxOCwgTENERDE4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE3LCBMQ0REMTdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTYsIExDREQxNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxNSwgTENERDE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE0LCBMQ0REMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTMsIExDREQxM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxMiwgTENERDEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDExLCBMQ0REMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTAsIExDREQxMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ5LCBMQ0REOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ4LCBMQ0REOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ3LCBMQ0REN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ2LCBMQ0RENl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ1LCBMQ0RENV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ0LCBMQ0RENF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQzLCBMQ0REM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyLCBMQ0REMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxLCBMQ0REMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQwLCBMQ0REMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRExDTEssIExDRExDTEtfTUFSSyksCisJLyogTWFpbiBMQ0QgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRERPTiwgTENERE9OX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVkNQV0MsIExDRFZDUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVkVQV0MsIExDRFZFUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVlNZTiwgTENEVlNZTl9NQVJLKSwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REQ0ssIExDRERDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREhTWU4sIExDREhTWU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RESVNQLCBMQ0RESVNQX01BUkspLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFJTLCBMQ0RSU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRENTLCBMQ0RDU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFdSLCBMQ0RXUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFJELCBMQ0RSRF9NQVJLKSwKKwkvKiBTdWIgTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRERPTjIsIExDRERPTjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RWQ1BXQzIsIExDRFZDUFdDMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFZFUFdDMiwgTENEVkVQV0MyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVlNZTjIsIExDRFZTWU4yX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEQ1MyLCBMQ0RDUzJfTUFSSyksCisKKwkvKiBCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lPSVMxNiwgSU9JUzE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI1LCBBMjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjQsIEEyNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMywgQTIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIyLCBBMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CUywgQlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzZCX0NFMUIsIENTNkJfQ0UxQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1dBSVQsIFdBSVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzZBX0NFMkIsIENTNkFfQ0UyQl9NQVJLKSwKKworCS8qIFNCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDYzLCBIUEQ2M19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDYyLCBIUEQ2Ml9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDYxLCBIUEQ2MV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDYwLCBIUEQ2MF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU5LCBIUEQ1OV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU4LCBIUEQ1OF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU3LCBIUEQ1N19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU2LCBIUEQ1Nl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU1LCBIUEQ1NV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU0LCBIUEQ1NF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDUzLCBIUEQ1M19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDUyLCBIUEQ1Ml9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDUxLCBIUEQ1MV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDUwLCBIUEQ1MF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDQ5LCBIUEQ0OV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDQ4LCBIUEQ0OF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRFFNNywgSFBEUU03X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSFBEUU02LCBIUERRTTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUERRTTUsIEhQRFFNNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRFFNNCwgSFBEUU00X01BUkspLAorCisJLyogSVJRICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEwLCBJUlEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMSwgSVJRMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTIsIElSUTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEzLCBJUlEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNCwgSVJRNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTUsIElSUTVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE2LCBJUlE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNywgSVJRN19NQVJLKSwKKworCS8qIFNESEkgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESElDRCwgU0RISUNEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISVdQLCBTREhJV1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJRDMsIFNESElEM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESElEMiwgU0RISUQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISUQxLCBTREhJRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJRDAsIFNESElEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESElDTUQsIFNESElDTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJQ0xLLCBTREhJQ0xLX01BUkspLAorCisJLyogU0lVIC0gUG9ydCBBICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBT0xSLCBTSVVBT0xSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQU9CVCwgU0lVQU9CVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFJU0xELCBTSVVBSVNMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFJTFIsIFNJVUFJTFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBSUJULCBTSVVBSUJUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQU9TTEQsIFNJVUFPU0xEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVTUNLQSwgU0lVTUNLQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUZDS0EsIFNJVUZDS0FfTUFSSyksCisKKwkvKiBTSVUgLSBQb3J0IEIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJPTFIsIFNJVUJPTFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCT0JULCBTSVVCT0JUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQklTTEQsIFNJVUJJU0xEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQklMUiwgU0lVQklMUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJJQlQsIFNJVUJJQlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCT1NMRCwgU0lVQk9TTERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVNQ0tCLCBTSVVNQ0tCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVRkNLQiwgU0lVRkNLQl9NQVJLKSwKKworCS8qIEFVRCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEU1lOQywgQVVEU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTMsIEFVREFUQTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEEyLCBBVURBVEEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMSwgQVVEQVRBMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTAsIEFVREFUQTBfTUFSSyksCisKKwkvKiBETUFDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLLCBEQUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTAsIERSRVEwX01BUkspLAorCisJLyogVk9VICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9DTEtJLCBEVl9DTEtJX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfQ0xLLCBEVl9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9IU1lOQywgRFZfSFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9WU1lOQywgRFZfVlNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTUsIERWX0QxNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxNCwgRFZfRDE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDEzLCBEVl9EMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTIsIERWX0QxMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxMSwgRFZfRDExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDEwLCBEVl9EMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EOSwgRFZfRDlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EOCwgRFZfRDhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENywgRFZfRDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENiwgRFZfRDZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENSwgRFZfRDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENCwgRFZfRDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMywgRFZfRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMiwgRFZfRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMSwgRFZfRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMCwgRFZfRDBfTUFSSyksCisKKwkvKiBDUEcgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NUQVRVUzAsIFNUQVRVUzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QRFNUQVRVUywgUERTVEFUVVNfTUFSSyksCisKKwkvKiBTSU9GMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfTUNLLCBTSU9GMF9NQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9TQ0ssIFNJT0YwX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX1NZTkMsIFNJT0YwX1NZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9TUzEsIFNJT0YwX1NTMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX1NTMiwgU0lPRjBfU1MyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfVFhELCBTSU9GMF9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9SWEQsIFNJT0YwX1JYRF9NQVJLKSwKKworCS8qIFNJT0YxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMV9NQ0ssIFNJT0YxX01DS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1NDSywgU0lPRjFfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU1lOQywgU0lPRjFfU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1NTMSwgU0lPRjFfU1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU1MyLCBTSU9GMV9TUzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMV9UWEQsIFNJT0YxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1JYRCwgU0lPRjFfUlhEX01BUkspLAorCisJLyogU0lNICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fRCwgU0lNX0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fQ0xLLCBTSU1fQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lNX1JTVCwgU0lNX1JTVF9NQVJLKSwKKworCS8qIFRTSUYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RTX1NEQVQsIFRTX1NEQVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UU19TQ0ssIFRTX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RTX1NERU4sIFRTX1NERU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UU19TUFNZTkMsIFRTX1NQU1lOQ19NQVJLKSwKKworCS8qIElSREEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSREFfSU4sIElSREFfSU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkRBX09VVCwgSVJEQV9PVVRfTUFSSyksCisKKwkvKiBUUFUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVVRPLCBUUFVUT19NQVJLKSwKKworCS8qIEZMQ1RMICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9GQ0UsIEZDRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjcsIE5BRjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY2LCBOQUY2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGNSwgTkFGNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjQsIE5BRjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYzLCBOQUYzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMiwgTkFGMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjEsIE5BRjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYwLCBOQUYwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRkNERSwgRkNERV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZPRSwgRk9FX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNDLCBGU0NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GV0UsIEZXRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZSQiwgRlJCX01BUkspLAorCisJLyogS0VZU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlOMCwgS0VZSU4wX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZSU4xLCBLRVlJTjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlJTjIsIEtFWUlOMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlOMywgS0VZSU4zX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZSU40LCBLRVlJTjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlPVVQwLCBLRVlPVVQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUMSwgS0VZT1VUMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDIsIEtFWU9VVDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlPVVQzLCBLRVlPVVQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUNF9JTjYsIEtFWU9VVDRfSU42X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUNV9JTjUsIEtFWU9VVDVfSU41X01BUkspLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyBwaW5tdXhfY29uZmlnX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQUNSIiwgMHhhNDA1MDEwMCwgMTYsIDIpIHsKKwkJVklPX0Q3X1NDSUYxX1NDSywgUFRBN19PVVQsIFBUQTdfSU5fUEQsIFBUQTdfSU4sCisJCVZJT19ENl9TQ0lGMV9SWEQsIDAsIFBUQTZfSU5fUEQsIFBUQTZfSU4sCisJCVZJT19ENV9TQ0lGMV9UWEQsIFBUQTVfT1VULCBQVEE1X0lOX1BELCBQVEE1X0lOLAorCQlWSU9fRDQsIDAsIFBUQTRfSU5fUEQsIFBUQTRfSU4sCisJCVZJT19EMywgMCwgUFRBM19JTl9QRCwgUFRBM19JTiwKKwkJVklPX0QyLCAwLCBQVEEyX0lOX1BELCBQVEEyX0lOLAorCQlWSU9fRDEsIDAsIFBUQTFfSU5fUEQsIFBUQTFfSU4sCisJCVZJT19EMF9MQ0RMQ0xLLCAwLCBQVEEwX0lOX1BELCBQVEEwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBCQ1IiLCAweGE0MDUwMTAyLCAxNiwgMikgeworCQlIUEQ1NSwgUFRCN19PVVQsIDAsIFBUQjdfSU4sCisJCUhQRDU0LCBQVEI2X09VVCwgMCwgUFRCNl9JTiwKKwkJSFBENTMsIFBUQjVfT1VULCAwLCBQVEI1X0lOLAorCQlIUEQ1MiwgUFRCNF9PVVQsIDAsIFBUQjRfSU4sCisJCUhQRDUxLCBQVEIzX09VVCwgMCwgUFRCM19JTiwKKwkJSFBENTAsIFBUQjJfT1VULCAwLCBQVEIyX0lOLAorCQlIUEQ0OSwgUFRCMV9PVVQsIDAsIFBUQjFfSU4sCisJCUhQRDQ4LCBQVEIwX09VVCwgMCwgUFRCMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSIiwgMHhhNDA1MDEwNCwgMTYsIDIpIHsKKwkJMCwgMCwgUFRDN19JTl9QVSwgUFRDN19JTiwKKwkJMCwgMCwgMCwgMCwKKwkJSU9JUzE2LCAwLCBQVEM1X0lOX1BVLCBQVEM1X0lOLAorCQlIUERRTTcsIFBUQzRfT1VULCAwLCBQVEM0X0lOLAorCQlIUERRTTYsIFBUQzNfT1VULCAwLCBQVEMzX0lOLAorCQlIUERRTTUsIFBUQzJfT1VULCAwLCBQVEMyX0lOLAorCQkwLCAwLCAwLCAwLAorCQlIUERRTTQsIFBUQzBfT1VULCAwLCBQVEMwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBEQ1IiLCAweGE0MDUwMTA2LCAxNiwgMikgeworCQlTREhJQ0QsIDAsIFBURDdfSU5fUFUsIFBURDdfSU4sCisJCVNESElXUCwgUFRENl9PVVQsIFBURDZfSU5fUFUsIFBURDZfSU4sCisJCVNESElEMywgUFRENV9PVVQsIFBURDVfSU5fUFUsIFBURDVfSU4sCisJCUlSUTJfU0RISUQyLCBQVEQ0X09VVCwgUFRENF9JTl9QVSwgUFRENF9JTiwKKwkJU0RISUQxLCBQVEQzX09VVCwgUFREM19JTl9QVSwgUFREM19JTiwKKwkJU0RISUQwLCBQVEQyX09VVCwgUFREMl9JTl9QVSwgUFREMl9JTiwKKwkJU0RISUNNRCwgUFREMV9PVVQsIFBURDFfSU5fUFUsIFBURDFfSU4sCisJCVNESElDTEssIFBURDBfT1VULCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1IiLCAweGE0MDUwMTA4LCAxNiwgMikgeworCQlBMjUsIFBURTdfT1VULCBQVEU3X0lOX1BELCBQVEU3X0lOLAorCQlBMjQsIFBURTZfT1VULCBQVEU2X0lOX1BELCBQVEU2X0lOLAorCQlBMjMsIFBURTVfT1VULCBQVEU1X0lOX1BELCBQVEU1X0lOLAorCQlBMjIsIFBURTRfT1VULCBQVEU0X0lOX1BELCBQVEU0X0lOLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlJUlE1LCBQVEUxX09VVCwgUFRFMV9JTl9QRCwgUFRFMV9JTiwKKwkJSVJRNF9CUywgUFRFMF9PVVQsIFBURTBfSU5fUEQsIFBURTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUiIsIDB4YTQwNTAxMGEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVBURjYsIFBURjZfT1VULCBQVEY2X0lOX1BELCBQVEY2X0lOLAorCQlTSU9TQ0tfU0lVQk9CVCwgUFRGNV9PVVQsIFBURjVfSU5fUEQsIFBURjVfSU4sCisJCVNJT1NUUkIxX1NJVUJPTFIsIFBURjRfT1VULCBQVEY0X0lOX1BELCBQVEY0X0lOLAorCQlTSU9TVFJCMF9TSVVCSUJULCBQVEYzX09VVCwgUFRGM19JTl9QRCwgUFRGM19JTiwKKwkJU0lPRF9TSVVCSUxSLCBQVEYyX09VVCwgUFRGMl9JTl9QRCwgUFRGMl9JTiwKKwkJU0lPUlhEX1NJVUJJU0xELCAwLCBQVEYxX0lOX1BELCBQVEYxX0lOLAorCQlTSU9UWERfU0lVQk9TTEQsIFBURjBfT1VULCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBHQ1IiLCAweGE0MDUwMTBjLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlBVURTWU5DLCBQVEc0X09VVCwgMCwgMCwKKwkJQVVEQVRBMywgUFRHM19PVVQsIDAsIDAsCisJCUFVREFUQTIsIFBURzJfT1VULCAwLCAwLAorCQlBVURBVEExLCBQVEcxX09VVCwgMCwgMCwKKwkJQVVEQVRBMCwgUFRHMF9PVVQsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEhDUiIsIDB4YTQwNTAxMGUsIDE2LCAyKSB7CisJCUxDRFZDUFdDX0xDRFZDUFdDMiwgUFRIN19PVVQsIDAsIDAsCisJCUxDRFZTWU4yX0RBQ0ssIFBUSDZfT1VULCBQVEg2X0lOX1BELCBQVEg2X0lOLAorCQlMQ0RWU1lOLCBQVEg1X09VVCwgUFRINV9JTl9QRCwgUFRINV9JTiwKKwkJTENERElTUF9MQ0RSUywgUFRINF9PVVQsIDAsIDAsCisJCUxDREhTWU5fTENEQ1MsIFBUSDNfT1VULCAwLCAwLAorCQlMQ0RET05fTENERE9OMiwgUFRIMl9PVVQsIDAsIDAsCisJCUxDREQxN19EVl9IU1lOQywgUFRIMV9PVVQsIFBUSDFfSU5fUEQsIFBUSDFfSU4sCisJCUxDREQxNl9EVl9WU1lOQywgUFRIMF9PVVQsIFBUSDBfSU5fUEQsIFBUSDBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEpDUiIsIDB4YTQwNTAxMTAsIDE2LCAyKSB7CisJCVNUQVRVUzAsIFBUSjdfT1VULCAwLCAwLAorCQkwLCBQVEo2X09VVCwgMCwgMCwKKwkJUERTVEFUVVMsIFBUSjVfT1VULCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlJUlExLCBQVEoxX09VVCwgUFRKMV9JTl9QVSwgUFRKMV9JTiwKKwkJSVJRMCwgUFRKMF9PVVQsIFBUSjBfSU5fUFUsIFBUSjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEtDUiIsIDB4YTQwNTAxMTIsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVNJVUFJTFJfU0lPRjFfU1MyLCBQVEs2X09VVCwgUFRLNl9JTl9QRCwgUFRLNl9JTiwKKwkJU0lVQUlCVF9TSU9GMV9TUzEsIFBUSzVfT1VULCBQVEs1X0lOX1BELCBQVEs1X0lOLAorCQlTSVVBT0xSX1NJT0YxX1NZTkMsIFBUSzRfT1VULCBQVEs0X0lOX1BELCBQVEs0X0lOLAorCQlTSVVBT0JUX1NJT0YxX1NDSywgUFRLM19PVVQsIFBUSzNfSU5fUEQsIFBUSzNfSU4sCisJCVNJVUFJU0xEX1NJT0YxX1JYRCwgMCwgUFRLMl9JTl9QRCwgUFRLMl9JTiwKKwkJU0lVQU9TTERfU0lPRjFfVFhELCBQVEsxX09VVCwgMCwgMCwKKwkJUFRLMCwgUFRLMF9PVVQsIFBUSzBfSU5fUEQsIFBUSzBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUExDUiIsIDB4YTQwNTAxMTQsIDE2LCAyKSB7CisJCUxDREQxNV9EVl9EMTUsIFBUTDdfT1VULCBQVEw3X0lOX1BELCBQVEw3X0lOLAorCQlMQ0REMTRfRFZfRDE0LCBQVEw2X09VVCwgUFRMNl9JTl9QRCwgUFRMNl9JTiwKKwkJTENERDEzX0RWX0QxMywgUFRMNV9PVVQsIFBUTDVfSU5fUEQsIFBUTDVfSU4sCisJCUxDREQxMl9EVl9EMTIsIFBUTDRfT1VULCBQVEw0X0lOX1BELCBQVEw0X0lOLAorCQlMQ0REMTFfRFZfRDExLCBQVEwzX09VVCwgUFRMM19JTl9QRCwgUFRMM19JTiwKKwkJTENERDEwX0RWX0QxMCwgUFRMMl9PVVQsIFBUTDJfSU5fUEQsIFBUTDJfSU4sCisJCUxDREQ5X0RWX0Q5LCBQVEwxX09VVCwgUFRMMV9JTl9QRCwgUFRMMV9JTiwKKwkJTENERDhfRFZfRDgsIFBUTDBfT1VULCBQVEwwX0lOX1BELCBQVEwwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBNQ1IiLCAweGE0MDUwMTE2LCAxNiwgMikgeworCQlMQ0REN19EVl9ENywgUFRNN19PVVQsIFBUTTdfSU5fUEQsIFBUTTdfSU4sCisJCUxDREQ2X0RWX0Q2LCBQVE02X09VVCwgUFRNNl9JTl9QRCwgUFRNNl9JTiwKKwkJTENERDVfRFZfRDUsIFBUTTVfT1VULCBQVE01X0lOX1BELCBQVE01X0lOLAorCQlMQ0RENF9EVl9ENCwgUFRNNF9PVVQsIFBUTTRfSU5fUEQsIFBUTTRfSU4sCisJCUxDREQzX0RWX0QzLCBQVE0zX09VVCwgUFRNM19JTl9QRCwgUFRNM19JTiwKKwkJTENERDJfRFZfRDIsIFBUTTJfT1VULCBQVE0yX0lOX1BELCBQVE0yX0lOLAorCQlMQ0REMV9EVl9EMSwgUFRNMV9PVVQsIFBUTTFfSU5fUEQsIFBUTTFfSU4sCisJCUxDREQwX0RWX0QwLCBQVE0wX09VVCwgUFRNMF9JTl9QRCwgUFRNMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQTkNSIiwgMHhhNDA1MDExOCwgMTYsIDIpIHsKKwkJSFBENjMsIFBUTjdfT1VULCAwLCBQVE43X0lOLAorCQlIUEQ2MiwgUFRONl9PVVQsIDAsIFBUTjZfSU4sCisJCUhQRDYxLCBQVE41X09VVCwgMCwgUFRONV9JTiwKKwkJSFBENjAsIFBUTjRfT1VULCAwLCBQVE40X0lOLAorCQlIUEQ1OSwgUFROM19PVVQsIDAsIFBUTjNfSU4sCisJCUhQRDU4LCBQVE4yX09VVCwgMCwgUFROMl9JTiwKKwkJSFBENTcsIFBUTjFfT1VULCAwLCBQVE4xX0lOLAorCQlIUEQ1NiwgUFROMF9PVVQsIDAsIFBUTjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFFDUiIsIDB4YTQwNTAxMWEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVNJT0YwX1NTMl9TSU1fUlNULCBQVFE2X09VVCwgMCwgMCwKKwkJU0lPRjBfU1MxX1RTX1NQU1lOQywgUFRRNV9PVVQsIFBUUTVfSU5fUEQsIFBUUTVfSU4sCisJCVNJT0YwX1NZTkNfVFNfU0RFTiwgUFRRNF9PVVQsIFBUUTRfSU5fUEQsIFBUUTRfSU4sCisJCVNJT0YwX1NDS19UU19TQ0ssIFBUUTNfT1VULCBQVFEzX0lOX1BELCBQVFEzX0lOLAorCQlQVFEyLCAwLCBQVFEyX0lOX1BELCBQVFEyX0lOLAorCQlQVFExLCBQVFExX09VVCwgMCwgMCwKKwkJUFRRMCwgUFRRMF9PVVQsIFBUUTBfSU5fUFUsIFBUUTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFJDUiIsIDB4YTQwNTAxMWMsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCUxDRFJELCBQVFI0X09VVCwgMCwgMCwKKwkJQ1M2Ql9DRTFCX0xDRENTMiwgUFRSM19PVVQsIDAsIDAsCisJCVdBSVQsIDAsIFBUUjJfSU5fUFUsIFBUUjJfSU4sCisJCUxDRERDS19MQ0RXUiwgUFRSMV9PVVQsIDAsIDAsCisJCUxDRFZFUFdDX0xDRFZFUFdDMiwgUFRSMF9PVVQsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNDUiIsIDB4YTQwNTAxMWUsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVNDSUYwX0NUU19TSVVBSVNQRCwgMCwgUFRTNF9JTl9QRCwgUFRTNF9JTiwKKwkJU0NJRjBfUlRTX1NJVUFPU1BELCBQVFMzX09VVCwgMCwgMCwKKwkJU0NJRjBfU0NLX1RQVVRPLCBQVFMyX09VVCwgUFRTMl9JTl9QRCwgUFRTMl9JTiwKKwkJU0NJRjBfUlhELCAwLCBQVFMxX0lOX1BELCBQVFMxX0lOLAorCQlTQ0lGMF9UWEQsIFBUUzBfT1VULCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBUQ1IiLCAweGE0MDUwMTQwLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlGT0VfVklPX1ZEMiwgUFRUNF9PVVQsIFBUVDRfSU5fUEQsIFBUVDRfSU4sCisJCUZXRSwgUFRUM19PVVQsIFBUVDNfSU5fUEQsIFBUVDNfSU4sCisJCUZTQywgUFRUMl9PVVQsIFBUVDJfSU5fUEQsIFBUVDJfSU4sCisJCURSRVEwLCAwLCBQVFQxX0lOX1BELCBQVFQxX0lOLAorCQlGQ0RFLCBQVFQwX09VVCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVUNSIiwgMHhhNDA1MDE0MiwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJTkFGMl9WSU9fRDEwLCBQVFU0X09VVCwgUFRVNF9JTl9QRCwgUFRVNF9JTiwKKwkJTkFGMV9WSU9fRDksIFBUVTNfT1VULCBQVFUzX0lOX1BELCBQVFUzX0lOLAorCQlOQUYwX1ZJT19EOCwgUFRVMl9PVVQsIFBUVTJfSU5fUEQsIFBUVTJfSU4sCisJCUZSQl9WSU9fQ0xLMiwgMCwgUFRVMV9JTl9QRCwgUFRVMV9JTiwKKwkJRkNFX1ZJT19IRDIsIFBUVTBfT1VULCBQVFUwX0lOX1BELCBQVFUwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBWQ1IiLCAweGE0MDUwMTQ0LCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlOQUY3X1ZJT19EMTUsIFBUVjRfT1VULCBQVFY0X0lOX1BELCBQVFY0X0lOLAorCQlOQUY2X1ZJT19EMTQsIFBUVjNfT1VULCBQVFYzX0lOX1BELCBQVFYzX0lOLAorCQlOQUY1X1ZJT19EMTMsIFBUVjJfT1VULCBQVFYyX0lOX1BELCBQVFYyX0lOLAorCQlOQUY0X1ZJT19EMTIsIFBUVjFfT1VULCBQVFYxX0lOX1BELCBQVFYxX0lOLAorCQlOQUYzX1ZJT19EMTEsIFBUVjBfT1VULCBQVFYwX0lOX1BELCBQVFYwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBXQ1IiLCAweGE0MDUwMTQ2LCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlWSU9fRkxEX1NDSUYyX0NUUywgMCwgUFRXNl9JTl9QRCwgUFRXNl9JTiwKKwkJVklPX0NLT19TQ0lGMl9SVFMsIFBUVzVfT1VULCAwLCAwLAorCQlWSU9fU1RFWF9TQ0lGMl9TQ0ssIFBUVzRfT1VULCBQVFc0X0lOX1BELCBQVFc0X0lOLAorCQlWSU9fU1RFTV9TQ0lGMl9UWEQsIFBUVzNfT1VULCBQVFczX0lOX1BELCBQVFczX0lOLAorCQlWSU9fSERfU0NJRjJfUlhELCBQVFcyX09VVCwgUFRXMl9JTl9QRCwgUFRXMl9JTiwKKwkJVklPX1ZEX1NDSUYxX0NUUywgUFRXMV9PVVQsIFBUVzFfSU5fUEQsIFBUVzFfSU4sCisJCVZJT19DTEtfU0NJRjFfUlRTLCBQVFcwX09VVCwgUFRXMF9JTl9QRCwgUFRXMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQWENSIiwgMHhhNDA1MDE0OCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJQ1M2QV9DRTJCLCBQVFg2X09VVCwgUFRYNl9JTl9QVSwgUFRYNl9JTiwKKwkJTENERDIzLCBQVFg1X09VVCwgUFRYNV9JTl9QRCwgUFRYNV9JTiwKKwkJTENERDIyLCBQVFg0X09VVCwgUFRYNF9JTl9QRCwgUFRYNF9JTiwKKwkJTENERDIxLCBQVFgzX09VVCwgUFRYM19JTl9QRCwgUFRYM19JTiwKKwkJTENERDIwLCBQVFgyX09VVCwgUFRYMl9JTl9QRCwgUFRYMl9JTiwKKwkJTENERDE5X0RWX0NMS0ksIFBUWDFfT1VULCBQVFgxX0lOX1BELCBQVFgxX0lOLAorCQlMQ0REMThfRFZfQ0xLLCBQVFgwX09VVCwgUFRYMF9JTl9QRCwgUFRYMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQWUNSIiwgMHhhNDA1MDE0YSwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJS0VZT1VUNV9JTjUsIFBUWTVfT1VULCBQVFk1X0lOX1BVLCBQVFk1X0lOLAorCQlLRVlPVVQ0X0lONiwgUFRZNF9PVVQsIFBUWTRfSU5fUFUsIFBUWTRfSU4sCisJCUtFWU9VVDMsIFBUWTNfT1VULCBQVFkzX0lOX1BVLCBQVFkzX0lOLAorCQlLRVlPVVQyLCBQVFkyX09VVCwgUFRZMl9JTl9QVSwgUFRZMl9JTiwKKwkJS0VZT1VUMSwgUFRZMV9PVVQsIDAsIDAsCisJCUtFWU9VVDAsIFBUWTBfT1VULCBQVFkwX0lOX1BVLCBQVFkwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBaQ1IiLCAweGE0MDUwMTRjLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlLRVlJTjRfSVJRNywgMCwgUFRaNV9JTl9QVSwgUFRaNV9JTiwKKwkJS0VZSU4zLCAwLCBQVFo0X0lOX1BVLCBQVFo0X0lOLAorCQlLRVlJTjIsIDAsIFBUWjNfSU5fUFUsIFBUWjNfSU4sCisJCUtFWUlOMSwgMCwgUFRaMl9JTl9QVSwgUFRaMl9JTiwKKwkJS0VZSU4wX0lSUTYsIDAsIFBUWjFfSU5fUFUsIFBUWjFfSU4sCisJCTAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNFTEEiLCAweGE0MDUwMTRlLCAxNiwgMSkgeworCQlQU0ExNV9LRVlJTjAsIFBTQTE1X0lSUTYsCisJCVBTQTE0X0tFWUlONCwgUFNBMTRfSVJRNywKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUFNBOV9JUlE0LCBQU0E5X0JTLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlQU0E0X0lSUTIsIFBTQTRfU0RISUQyLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxCIiwgMHhhNDA1MDE1MCwgMTYsIDEpIHsKKwkJUFNCMTVfU0lPVFhELCBQU0IxNV9TSVVCT1NMRCwKKwkJUFNCMTRfU0lPUlhELCBQU0IxNF9TSVVCSVNMRCwKKwkJUFNCMTNfU0lPRCwgUFNCMTNfU0lVQklMUiwKKwkJUFNCMTJfU0lPU1RSQjAsIFBTQjEyX1NJVUJJQlQsCisJCVBTQjExX1NJT1NUUkIxLCBQU0IxMV9TSVVCT0xSLAorCQlQU0IxMF9TSU9TQ0ssIFBTQjEwX1NJVUJPQlQsCisJCVBTQjlfU0lPTUNLLCBQU0I5X1NJVU1DS0IsCisJCVBTQjhfU0lPRjBfTUNLLCBQU0I4X0lSUTMsCisJCVBTQjdfU0lPRjBfVFhELCBQU0I3X0lSREFfT1VULAorCQlQU0I2X1NJT0YwX1JYRCwgUFNCNl9JUkRBX0lOLAorCQlQU0I1X1NJT0YwX1NDSywgUFNCNV9UU19TQ0ssCisJCVBTQjRfU0lPRjBfU1lOQywgUFNCNF9UU19TREVOLAorCQlQU0IzX1NJT0YwX1NTMSwgUFNCM19UU19TUFNZTkMsCisJCVBTQjJfU0lPRjBfU1MyLCBQU0IyX1NJTV9SU1QsCisJCVBTQjFfU0lVTUNLQSwgUFNCMV9TSU9GMV9NQ0ssCisJCVBTQjBfU0lVQU9TTEQsIFBTQjBfU0lPRjFfVFhEIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxDIiwgMHhhNDA1MDE1MiwgMTYsIDEpIHsKKwkJUFNDMTVfU0lVQUlTTEQsIFBTQzE1X1NJT0YxX1JYRCwKKwkJUFNDMTRfU0lVQU9CVCwgUFNDMTRfU0lPRjFfU0NLLAorCQlQU0MxM19TSVVBT0xSLCBQU0MxM19TSU9GMV9TWU5DLAorCQlQU0MxMl9TSVVBSUJULCBQU0MxMl9TSU9GMV9TUzEsCisJCVBTQzExX1NJVUFJTFIsIFBTQzExX1NJT0YxX1NTMiwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUFNDMF9OQUYsIFBTQzBfVklPIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxEIiwgMHhhNDA1MDE1NCwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUFNEMTNfVklPLCBQU0QxM19TQ0lGMiwKKwkJUFNEMTJfVklPLCBQU0QxMl9TQ0lGMSwKKwkJUFNEMTFfVklPLCBQU0QxMV9TQ0lGMSwKKwkJUFNEMTBfVklPX0QwLCBQU0QxMF9MQ0RMQ0xLLAorCQlQU0Q5X1NJT01DS19TSVVNQ0tCLCBQU0Q5X1NJVUZDS0IsCisJCVBTRDhfU0NJRjBfU0NLLCBQU0Q4X1RQVVRPLAorCQlQU0Q3X1NDSUYwX1JUUywgUFNEN19TSVVBT1NQRCwKKwkJUFNENl9TQ0lGMF9DVFMsIFBTRDZfU0lVQUlTUEQsCisJCVBTRDVfQ1M2Ql9DRTFCLCBQU0Q1X0xDRENTMiwKKwkJMCwgMCwKKwkJUFNEM19MQ0RWRVBXQ19MQ0RWQ1BXQywgUFNEM19MQ0RWRVBXQzJfTENEVkNQV0MyLAorCQlQU0QyX0xDRERPTiwgUFNEMl9MQ0RET04yLAorCQkwLCAwLAorCQlQU0QwX0xDREQxOV9MQ0REMCwgUFNEMF9EViB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQU0VMRSIsIDB4YTQwNTAxNTYsIDE2LCAxKSB7CisJCVBTRTE1X1NJT0YwX01DS19JUlEzLCBQU0UxNV9TSU1fRCwKKwkJUFNFMTRfU0lPRjBfVFhEX0lSREFfT1VULCBQU0UxNF9TSU1fQ0xLLAorCQlQU0UxM19TSU9GMF9SWERfSVJEQV9JTiwgUFNFMTNfVFNfU0RBVCwKKwkJUFNFMTJfTENEVlNZTjIsIFBTRTEyX0RBQ0ssCisJCVBTRTExX1NJVU1DS0FfU0lPRjFfTUNLLCBQU0UxMV9TSVVGQ0tBLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlQU0UzX0ZMQ1RMLCBQU0UzX1ZJTywKKwkJUFNFMl9OQUYyLCBQU0UyX1ZJT19EMTAsCisJCVBTRTFfTkFGMSwgUFNFMV9WSU9fRDksCisJCVBTRTBfTkFGMCwgUFNFMF9WSU9fRDggfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiSElaQ1JBIiwgMHhhNDA1MDE1OCwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJSElaQTE0X0tFWVNDLCBISVpBMTRfSElaLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlISVpBMTBfTkFGLCBISVpBMTBfSElaLAorCQlISVpBOV9WSU8sIEhJWkE5X0hJWiwKKwkJSElaQThfTENEQywgSElaQThfSElaLAorCQlISVpBN19MQ0RDLCBISVpBN19ISVosCisJCUhJWkE2X0xDREMsIEhJWkE2X0hJWiwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJISVpDUkIiLCAweGE0MDUwMTVhLCAxNiwgMSkgeworCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlISVpCMV9WSU8sIEhJWkIxX0hJWiwKKwkJSElaQjBfVklPLCBISVpCMF9ISVogfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiSElaQ1JDIiwgMHhhNDA1MDE1YywgMTYsIDEpIHsKKwkJSElaQzE1X0lSUTcsIEhJWkMxNV9ISVosCisJCUhJWkMxNF9JUlE2LCBISVpDMTRfSElaLAorCQlISVpDMTNfSVJRNSwgSElaQzEzX0hJWiwKKwkJSElaQzEyX0lSUTQsIEhJWkMxMl9ISVosCisJCUhJWkMxMV9JUlEzLCBISVpDMTFfSElaLAorCQlISVpDMTBfSVJRMiwgSElaQzEwX0hJWiwKKwkJSElaQzlfSVJRMSwgSElaQzlfSElaLAorCQlISVpDOF9JUlEwLCBISVpDOF9ISVosCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiTVNFTENSQiIsIDB4YTQwNTAxODIsIDE2LCAxKSB7CisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCU1TRUxCOV9WSU8sIE1TRUxCOV9WSU8yLAorCQlNU0VMQjhfUkdCLCBNU0VMQjhfU1lTLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwIH0KKwl9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9kYXRhX3JlZyBwaW5tdXhfZGF0YV9yZWdzW10gPSB7CisJeyBQSU5NVVhfREFUQV9SRUcoIlBBRFIiLCAweGE0MDUwMTIwLCA4KSB7CisJCVBUQTdfREFUQSwgUFRBNl9EQVRBLCBQVEE1X0RBVEEsIFBUQTRfREFUQSwKKwkJUFRBM19EQVRBLCBQVEEyX0RBVEEsIFBUQTFfREFUQSwgUFRBMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQQkRSIiwgMHhhNDA1MDEyMiwgOCkgeworCQlQVEI3X0RBVEEsIFBUQjZfREFUQSwgUFRCNV9EQVRBLCBQVEI0X0RBVEEsCisJCVBUQjNfREFUQSwgUFRCMl9EQVRBLCBQVEIxX0RBVEEsIFBUQjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUENEUiIsIDB4YTQwNTAxMjQsIDgpIHsKKwkJUFRDN19EQVRBLCAwLCBQVEM1X0RBVEEsIFBUQzRfREFUQSwKKwkJUFRDM19EQVRBLCBQVEMyX0RBVEEsIDAsIFBUQzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEREUiIsIDB4YTQwNTAxMjYsIDgpIHsKKwkJUFREN19EQVRBLCBQVEQ2X0RBVEEsIFBURDVfREFUQSwgUFRENF9EQVRBLAorCQlQVEQzX0RBVEEsIFBURDJfREFUQSwgUFREMV9EQVRBLCBQVEQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBFRFIiLCAweGE0MDUwMTI4LCA4KSB7CisJCVBURTdfREFUQSwgUFRFNl9EQVRBLCBQVEU1X0RBVEEsIFBURTRfREFUQSwKKwkJMCwgMCwgUFRFMV9EQVRBLCBQVEUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBGRFIiLCAweGE0MDUwMTJhLCA4KSB7CisJCTAsIFBURjZfREFUQSwgUFRGNV9EQVRBLCBQVEY0X0RBVEEsCisJCVBURjNfREFUQSwgUFRGMl9EQVRBLCBQVEYxX0RBVEEsIFBURjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEdEUiIsIDB4YTQwNTAxMmMsIDgpIHsKKwkJMCwgMCwgMCwgUFRHNF9EQVRBLAorCQlQVEczX0RBVEEsIFBURzJfREFUQSwgUFRHMV9EQVRBLCBQVEcwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBIRFIiLCAweGE0MDUwMTJlLCA4KSB7CisJCVBUSDdfREFUQSwgUFRINl9EQVRBLCBQVEg1X0RBVEEsIFBUSDRfREFUQSwKKwkJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhhNDA1MDEzMCwgOCkgeworCQlQVEo3X0RBVEEsIFBUSjZfREFUQSwgUFRKNV9EQVRBLCAwLAorCQkwLCAwLCBQVEoxX0RBVEEsIFBUSjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEtEUiIsIDB4YTQwNTAxMzIsIDgpIHsKKwkJMCwgUFRLNl9EQVRBLCBQVEs1X0RBVEEsIFBUSzRfREFUQSwKKwkJUFRLM19EQVRBLCBQVEsyX0RBVEEsIFBUSzFfREFUQSwgUFRLMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQTERSIiwgMHhhNDA1MDEzNCwgOCkgeworCQlQVEw3X0RBVEEsIFBUTDZfREFUQSwgUFRMNV9EQVRBLCBQVEw0X0RBVEEsCisJCVBUTDNfREFUQSwgUFRMMl9EQVRBLCBQVEwxX0RBVEEsIFBUTDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE1EUiIsIDB4YTQwNTAxMzYsIDgpIHsKKwkJUFRNN19EQVRBLCBQVE02X0RBVEEsIFBUTTVfREFUQSwgUFRNNF9EQVRBLAorCQlQVE0zX0RBVEEsIFBUTTJfREFUQSwgUFRNMV9EQVRBLCBQVE0wX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBORFIiLCAweGE0MDUwMTM4LCA4KSB7CisJCVBUTjdfREFUQSwgUFRONl9EQVRBLCBQVE41X0RBVEEsIFBUTjRfREFUQSwKKwkJUFROM19EQVRBLCBQVE4yX0RBVEEsIFBUTjFfREFUQSwgUFROMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQUURSIiwgMHhhNDA1MDEzYSwgOCkgeworCQkwLCBQVFE2X0RBVEEsIFBUUTVfREFUQSwgUFRRNF9EQVRBLAorCQlQVFEzX0RBVEEsIFBUUTJfREFUQSwgUFRRMV9EQVRBLCBQVFEwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBSRFIiLCAweGE0MDUwMTNjLCA4KSB7CisJCTAsIDAsIDAsIFBUUjRfREFUQSwKKwkJUFRSM19EQVRBLCBQVFIyX0RBVEEsIFBUUjFfREFUQSwgUFRSMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQU0RSIiwgMHhhNDA1MDEzZSwgOCkgeworCQkwLCAwLCAwLCBQVFM0X0RBVEEsCisJCVBUUzNfREFUQSwgUFRTMl9EQVRBLCBQVFMxX0RBVEEsIFBUUzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFREUiIsIDB4YTQwNTAxNjAsIDgpIHsKKwkJMCwgMCwgMCwgUFRUNF9EQVRBLAorCQlQVFQzX0RBVEEsIFBUVDJfREFUQSwgUFRUMV9EQVRBLCBQVFQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBVRFIiLCAweGE0MDUwMTYyLCA4KSB7CisJCTAsIDAsIDAsIFBUVTRfREFUQSwKKwkJUFRVM19EQVRBLCBQVFUyX0RBVEEsIFBUVTFfREFUQSwgUFRVMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQVkRSIiwgMHhhNDA1MDE2NCwgOCkgeworCQkwLCAwLCAwLCBQVFY0X0RBVEEsCisJCVBUVjNfREFUQSwgUFRWMl9EQVRBLCBQVFYxX0RBVEEsIFBUVjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFdEUiIsIDB4YTQwNTAxNjYsIDgpIHsKKwkJMCwgUFRXNl9EQVRBLCBQVFc1X0RBVEEsIFBUVzRfREFUQSwKKwkJUFRXM19EQVRBLCBQVFcyX0RBVEEsIFBUVzFfREFUQSwgUFRXMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQWERSIiwgMHhhNDA1MDE2OCwgOCkgeworCQkwLCBQVFg2X0RBVEEsIFBUWDVfREFUQSwgUFRYNF9EQVRBLAorCQlQVFgzX0RBVEEsIFBUWDJfREFUQSwgUFRYMV9EQVRBLCBQVFgwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBZRFIiLCAweGE0MDUwMTZhLCA4KSB7CisJCTAsIFBUWTZfREFUQSwgUFRZNV9EQVRBLCBQVFk0X0RBVEEsCisJCVBUWTNfREFUQSwgUFRZMl9EQVRBLCBQVFkxX0RBVEEsIFBUWTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFpEUiIsIDB4YTQwNTAxNmMsIDgpIHsKKwkJMCwgMCwgUFRaNV9EQVRBLCBQVFo0X0RBVEEsCisJCVBUWjNfREFUQSwgUFRaMl9EQVRBLCBQVFoxX0RBVEEsIFBUWjBfREFUQSB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvIHNoNzcyMl9waW5tdXhfaW5mbyA9IHsKKwkubmFtZSA9ICJzaDc3MjJfcGZjIiwKKwkucmVzZXJ2ZWRfaWQgPSBQSU5NVVhfUkVTRVJWRUQsCisJLmRhdGEgPSB7IFBJTk1VWF9EQVRBX0JFR0lOLCBQSU5NVVhfREFUQV9FTkQgfSwKKwkuaW5wdXQgPSB7IFBJTk1VWF9JTlBVVF9CRUdJTiwgUElOTVVYX0lOUFVUX0VORCB9LAorCS5pbnB1dF9wZCA9IHsgUElOTVVYX0lOUFVUX1BVTExET1dOX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTERPV05fRU5EIH0sCisJLmlucHV0X3B1ID0geyBQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5EIH0sCisJLm1hcmsgPSB7IFBJTk1VWF9NQVJLX0JFR0lOLCBQSU5NVVhfTUFSS19FTkQgfSwKKwkuZnVuY3Rpb24gPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLmZpcnN0X2dwaW8gPSBHUElPX1BUQTcsCisJLmxhc3RfZ3BpbyA9IEdQSU9fRk5fS0VZT1VUNV9JTjUsCisKKwkuZ3Bpb3MgPSBwaW5tdXhfZ3Bpb3MsCisJLmNmZ19yZWdzID0gcGlubXV4X2NvbmZpZ19yZWdzLAorCS5kYXRhX3JlZ3MgPSBwaW5tdXhfZGF0YV9yZWdzLAorCisJLmdwaW9fZGF0YSA9IHBpbm11eF9kYXRhLAorCS5ncGlvX2RhdGFfc2l6ZSA9IEFSUkFZX1NJWkUocGlubXV4X2RhdGEpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGxhdF9waW5tdXhfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfcGlubXV4KCZzaDc3MjJfcGlubXV4X2luZm8pOworfQorCithcmNoX2luaXRjYWxsKHBsYXRfcGlubXV4X3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGJmNWVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMy5jCkBAIC0wLDAgKzEsMTkwOSBAQAorLyoKKyAqIFNINzcyMyBQaW5tdXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGNwdS9zaDc3MjMuaD4KKworZW51bSB7CisJUElOTVVYX1JFU0VSVkVEID0gMCwKKworCVBJTk1VWF9EQVRBX0JFR0lOLAorCVBUQTdfREFUQSwgUFRBNl9EQVRBLCBQVEE1X0RBVEEsIFBUQTRfREFUQSwKKwlQVEEzX0RBVEEsIFBUQTJfREFUQSwgUFRBMV9EQVRBLCBQVEEwX0RBVEEsCisJUFRCN19EQVRBLCBQVEI2X0RBVEEsIFBUQjVfREFUQSwgUFRCNF9EQVRBLAorCVBUQjNfREFUQSwgUFRCMl9EQVRBLCBQVEIxX0RBVEEsIFBUQjBfREFUQSwKKwlQVEM3X0RBVEEsIFBUQzZfREFUQSwgUFRDNV9EQVRBLCBQVEM0X0RBVEEsCisJUFRDM19EQVRBLCBQVEMyX0RBVEEsIFBUQzFfREFUQSwgUFRDMF9EQVRBLAorCVBURDdfREFUQSwgUFRENl9EQVRBLCBQVEQ1X0RBVEEsIFBURDRfREFUQSwKKwlQVEQzX0RBVEEsIFBURDJfREFUQSwgUFREMV9EQVRBLCBQVEQwX0RBVEEsCisJUFRFNV9EQVRBLCBQVEU0X0RBVEEsIFBURTNfREFUQSwgUFRFMl9EQVRBLCBQVEUxX0RBVEEsIFBURTBfREFUQSwKKwlQVEY3X0RBVEEsIFBURjZfREFUQSwgUFRGNV9EQVRBLCBQVEY0X0RBVEEsCisJUFRGM19EQVRBLCBQVEYyX0RBVEEsIFBURjFfREFUQSwgUFRGMF9EQVRBLAorCVBURzVfREFUQSwgUFRHNF9EQVRBLCBQVEczX0RBVEEsIFBURzJfREFUQSwgUFRHMV9EQVRBLCBQVEcwX0RBVEEsCisJUFRIN19EQVRBLCBQVEg2X0RBVEEsIFBUSDVfREFUQSwgUFRINF9EQVRBLAorCVBUSDNfREFUQSwgUFRIMl9EQVRBLCBQVEgxX0RBVEEsIFBUSDBfREFUQSwKKwlQVEo3X0RBVEEsIFBUSjVfREFUQSwgUFRKM19EQVRBLCBQVEoyX0RBVEEsIFBUSjFfREFUQSwgUFRKMF9EQVRBLAorCVBUSzdfREFUQSwgUFRLNl9EQVRBLCBQVEs1X0RBVEEsIFBUSzRfREFUQSwKKwlQVEszX0RBVEEsIFBUSzJfREFUQSwgUFRLMV9EQVRBLCBQVEswX0RBVEEsCisJUFRMN19EQVRBLCBQVEw2X0RBVEEsIFBUTDVfREFUQSwgUFRMNF9EQVRBLAorCVBUTDNfREFUQSwgUFRMMl9EQVRBLCBQVEwxX0RBVEEsIFBUTDBfREFUQSwKKwlQVE03X0RBVEEsIFBUTTZfREFUQSwgUFRNNV9EQVRBLCBQVE00X0RBVEEsCisJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBLAorCVBUTjdfREFUQSwgUFRONl9EQVRBLCBQVE41X0RBVEEsIFBUTjRfREFUQSwKKwlQVE4zX0RBVEEsIFBUTjJfREFUQSwgUFROMV9EQVRBLCBQVE4wX0RBVEEsCisJUFRRM19EQVRBLCBQVFEyX0RBVEEsIFBUUTFfREFUQSwgUFRRMF9EQVRBLAorCVBUUjdfREFUQSwgUFRSNl9EQVRBLCBQVFI1X0RBVEEsIFBUUjRfREFUQSwKKwlQVFIzX0RBVEEsIFBUUjJfREFUQSwgUFRSMV9EQVRBLCBQVFIwX0RBVEEsCisJUFRTN19EQVRBLCBQVFM2X0RBVEEsIFBUUzVfREFUQSwgUFRTNF9EQVRBLAorCVBUUzNfREFUQSwgUFRTMl9EQVRBLCBQVFMxX0RBVEEsIFBUUzBfREFUQSwKKwlQVFQ1X0RBVEEsIFBUVDRfREFUQSwgUFRUM19EQVRBLCBQVFQyX0RBVEEsIFBUVDFfREFUQSwgUFRUMF9EQVRBLAorCVBUVTVfREFUQSwgUFRVNF9EQVRBLCBQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEsCisJUFRWN19EQVRBLCBQVFY2X0RBVEEsIFBUVjVfREFUQSwgUFRWNF9EQVRBLAorCVBUVjNfREFUQSwgUFRWMl9EQVRBLCBQVFYxX0RBVEEsIFBUVjBfREFUQSwKKwlQVFc3X0RBVEEsIFBUVzZfREFUQSwgUFRXNV9EQVRBLCBQVFc0X0RBVEEsCisJUFRXM19EQVRBLCBQVFcyX0RBVEEsIFBUVzFfREFUQSwgUFRXMF9EQVRBLAorCVBUWDdfREFUQSwgUFRYNl9EQVRBLCBQVFg1X0RBVEEsIFBUWDRfREFUQSwKKwlQVFgzX0RBVEEsIFBUWDJfREFUQSwgUFRYMV9EQVRBLCBQVFgwX0RBVEEsCisJUFRZN19EQVRBLCBQVFk2X0RBVEEsIFBUWTVfREFUQSwgUFRZNF9EQVRBLAorCVBUWTNfREFUQSwgUFRZMl9EQVRBLCBQVFkxX0RBVEEsIFBUWTBfREFUQSwKKwlQVFo3X0RBVEEsIFBUWjZfREFUQSwgUFRaNV9EQVRBLCBQVFo0X0RBVEEsCisJUFRaM19EQVRBLCBQVFoyX0RBVEEsIFBUWjFfREFUQSwgUFRaMF9EQVRBLAorCVBJTk1VWF9EQVRBX0VORCwKKworCVBJTk1VWF9JTlBVVF9CRUdJTiwKKwlQVEE3X0lOLCBQVEE2X0lOLCBQVEE1X0lOLCBQVEE0X0lOLAorCVBUQTNfSU4sIFBUQTJfSU4sIFBUQTFfSU4sIFBUQTBfSU4sCisJUFRCN19JTiwgUFRCNl9JTiwgUFRCNV9JTiwgUFRCNF9JTiwKKwlQVEIzX0lOLCBQVEIyX0lOLCBQVEIxX0lOLCBQVEIwX0lOLAorCVBUQzdfSU4sIFBUQzZfSU4sIFBUQzVfSU4sIFBUQzRfSU4sCisJUFRDM19JTiwgUFRDMl9JTiwgUFRDMV9JTiwgUFRDMF9JTiwKKwlQVEQ3X0lOLCBQVEQ2X0lOLCBQVEQ1X0lOLCBQVEQ0X0lOLAorCVBURDNfSU4sIFBURDJfSU4sIFBURDFfSU4sIFBURDBfSU4sCisJUFRFNV9JTiwgUFRFNF9JTiwgUFRFM19JTiwgUFRFMl9JTiwgUFRFMV9JTiwgUFRFMF9JTiwKKwlQVEY3X0lOLCBQVEY2X0lOLCBQVEY1X0lOLCBQVEY0X0lOLAorCVBURjNfSU4sIFBURjJfSU4sIFBURjFfSU4sIFBURjBfSU4sCisJUFRIN19JTiwgUFRINl9JTiwgUFRINV9JTiwgUFRINF9JTiwKKwlQVEgzX0lOLCBQVEgyX0lOLCBQVEgxX0lOLCBQVEgwX0lOLAorCVBUSjNfSU4sIFBUSjJfSU4sIFBUSjFfSU4sIFBUSjBfSU4sCisJUFRLN19JTiwgUFRLNl9JTiwgUFRLNV9JTiwgUFRLNF9JTiwKKwlQVEszX0lOLCBQVEsyX0lOLCBQVEsxX0lOLCBQVEswX0lOLAorCVBUTDdfSU4sIFBUTDZfSU4sIFBUTDVfSU4sIFBUTDRfSU4sCisJUFRMM19JTiwgUFRMMl9JTiwgUFRMMV9JTiwgUFRMMF9JTiwKKwlQVE03X0lOLCBQVE02X0lOLCBQVE01X0lOLCBQVE00X0lOLAorCVBUTTNfSU4sIFBUTTJfSU4sIFBUTTFfSU4sIFBUTTBfSU4sCisJUFRON19JTiwgUFRONl9JTiwgUFRONV9JTiwgUFRONF9JTiwKKwlQVE4zX0lOLCBQVE4yX0lOLCBQVE4xX0lOLCBQVE4wX0lOLAorCVBUUTNfSU4sIFBUUTJfSU4sIFBUUTFfSU4sIFBUUTBfSU4sCisJUFRSN19JTiwgUFRSNl9JTiwgUFRSNV9JTiwgUFRSNF9JTiwKKwlQVFIzX0lOLCBQVFIyX0lOLCBQVFIxX0lOLCBQVFIwX0lOLAorCVBUUzdfSU4sIFBUUzZfSU4sIFBUUzVfSU4sIFBUUzRfSU4sCisJUFRTM19JTiwgUFRTMl9JTiwgUFRTMV9JTiwgUFRTMF9JTiwKKwlQVFQ1X0lOLCBQVFQ0X0lOLCBQVFQzX0lOLCBQVFQyX0lOLCBQVFQxX0lOLCBQVFQwX0lOLAorCVBUVTVfSU4sIFBUVTRfSU4sIFBUVTNfSU4sIFBUVTJfSU4sIFBUVTFfSU4sIFBUVTBfSU4sCisJUFRWN19JTiwgUFRWNl9JTiwgUFRWNV9JTiwgUFRWNF9JTiwKKwlQVFYzX0lOLCBQVFYyX0lOLCBQVFYxX0lOLCBQVFYwX0lOLAorCVBUVzdfSU4sIFBUVzZfSU4sIFBUVzVfSU4sIFBUVzRfSU4sCisJUFRXM19JTiwgUFRXMl9JTiwgUFRXMV9JTiwgUFRXMF9JTiwKKwlQVFg3X0lOLCBQVFg2X0lOLCBQVFg1X0lOLCBQVFg0X0lOLAorCVBUWDNfSU4sIFBUWDJfSU4sIFBUWDFfSU4sIFBUWDBfSU4sCisJUFRZN19JTiwgUFRZNl9JTiwgUFRZNV9JTiwgUFRZNF9JTiwKKwlQVFkzX0lOLCBQVFkyX0lOLCBQVFkxX0lOLCBQVFkwX0lOLAorCVBUWjdfSU4sIFBUWjZfSU4sIFBUWjVfSU4sIFBUWjRfSU4sCisJUFRaM19JTiwgUFRaMl9JTiwgUFRaMV9JTiwgUFRaMF9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQVEE0X0lOX1BVLCBQVEEzX0lOX1BVLCBQVEEyX0lOX1BVLCBQVEExX0lOX1BVLCBQVEEwX0lOX1BVLAorCVBUQjJfSU5fUFUsIFBUQjFfSU5fUFUsCisJUFRSMl9JTl9QVSwKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUFRBN19PVVQsIFBUQTZfT1VULCBQVEE1X09VVCwgUFRBNF9PVVQsCisJUFRBM19PVVQsIFBUQTJfT1VULCBQVEExX09VVCwgUFRBMF9PVVQsCisJUFRCN19PVVQsIFBUQjZfT1VULCBQVEI1X09VVCwgUFRCNF9PVVQsCisJUFRCM19PVVQsIFBUQjJfT1VULCBQVEIxX09VVCwgUFRCMF9PVVQsCisJUFRDN19PVVQsIFBUQzZfT1VULCBQVEM1X09VVCwgUFRDNF9PVVQsCisJUFRDM19PVVQsIFBUQzJfT1VULCBQVEMxX09VVCwgUFRDMF9PVVQsCisJUFREN19PVVQsIFBURDZfT1VULCBQVEQ1X09VVCwgUFRENF9PVVQsCisJUFREM19PVVQsIFBURDJfT1VULCBQVEQxX09VVCwgUFREMF9PVVQsCisJUFRFNV9PVVQsIFBURTRfT1VULCBQVEUzX09VVCwgUFRFMl9PVVQsIFBURTFfT1VULCBQVEUwX09VVCwKKwlQVEY3X09VVCwgUFRGNl9PVVQsIFBURjVfT1VULCBQVEY0X09VVCwKKwlQVEYzX09VVCwgUFRGMl9PVVQsIFBURjFfT1VULCBQVEYwX09VVCwKKwlQVEc1X09VVCwgUFRHNF9PVVQsIFBURzNfT1VULCBQVEcyX09VVCwgUFRHMV9PVVQsIFBURzBfT1VULAorCVBUSDdfT1VULCBQVEg2X09VVCwgUFRINV9PVVQsIFBUSDRfT1VULAorCVBUSDNfT1VULCBQVEgyX09VVCwgUFRIMV9PVVQsIFBUSDBfT1VULAorCVBUSjdfT1VULCBQVEo1X09VVCwgUFRKM19PVVQsIFBUSjJfT1VULCBQVEoxX09VVCwgUFRKMF9PVVQsCisJUFRLN19PVVQsIFBUSzZfT1VULCBQVEs1X09VVCwgUFRLNF9PVVQsCisJUFRLM19PVVQsIFBUSzJfT1VULCBQVEsxX09VVCwgUFRLMF9PVVQsCisJUFRMN19PVVQsIFBUTDZfT1VULCBQVEw1X09VVCwgUFRMNF9PVVQsCisJUFRMM19PVVQsIFBUTDJfT1VULCBQVEwxX09VVCwgUFRMMF9PVVQsCisJUFRNN19PVVQsIFBUTTZfT1VULCBQVE01X09VVCwgUFRNNF9PVVQsCisJUFRNM19PVVQsIFBUTTJfT1VULCBQVE0xX09VVCwgUFRNMF9PVVQsCisJUFRON19PVVQsIFBUTjZfT1VULCBQVE41X09VVCwgUFRONF9PVVQsCisJUFROM19PVVQsIFBUTjJfT1VULCBQVE4xX09VVCwgUFROMF9PVVQsCisJUFRSN19PVVQsIFBUUjZfT1VULCBQVFI1X09VVCwgUFRSNF9PVVQsCisJUFRSMV9PVVQsIFBUUjBfT1VULAorCVBUUzdfT1VULCBQVFM2X09VVCwgUFRTNV9PVVQsIFBUUzRfT1VULAorCVBUUzNfT1VULCBQVFMyX09VVCwgUFRTMV9PVVQsIFBUUzBfT1VULAorCVBUVDVfT1VULCBQVFQ0X09VVCwgUFRUM19PVVQsIFBUVDJfT1VULCBQVFQxX09VVCwgUFRUMF9PVVQsCisJUFRVNV9PVVQsIFBUVTRfT1VULCBQVFUzX09VVCwgUFRVMl9PVVQsIFBUVTFfT1VULCBQVFUwX09VVCwKKwlQVFY3X09VVCwgUFRWNl9PVVQsIFBUVjVfT1VULCBQVFY0X09VVCwKKwlQVFYzX09VVCwgUFRWMl9PVVQsIFBUVjFfT1VULCBQVFYwX09VVCwKKwlQVFc3X09VVCwgUFRXNl9PVVQsIFBUVzVfT1VULCBQVFc0X09VVCwKKwlQVFczX09VVCwgUFRXMl9PVVQsIFBUVzFfT1VULCBQVFcwX09VVCwKKwlQVFg3X09VVCwgUFRYNl9PVVQsIFBUWDVfT1VULCBQVFg0X09VVCwKKwlQVFgzX09VVCwgUFRYMl9PVVQsIFBUWDFfT1VULCBQVFgwX09VVCwKKwlQVFk3X09VVCwgUFRZNl9PVVQsIFBUWTVfT1VULCBQVFk0X09VVCwKKwlQVFkzX09VVCwgUFRZMl9PVVQsIFBUWTFfT1VULCBQVFkwX09VVCwKKwlQVFo3X09VVCwgUFRaNl9PVVQsIFBUWjVfT1VULCBQVFo0X09VVCwKKwlQVFozX09VVCwgUFRaMl9PVVQsIFBUWjFfT1VULCBQVFowX09VVCwKKwlQSU5NVVhfT1VUUFVUX0VORCwKKworCVBJTk1VWF9GVU5DVElPTl9CRUdJTiwKKwlQVEE3X0ZOLCBQVEE2X0ZOLCBQVEE1X0ZOLCBQVEE0X0ZOLAorCVBUQTNfRk4sIFBUQTJfRk4sIFBUQTFfRk4sIFBUQTBfRk4sCisJUFRCN19GTiwgUFRCNl9GTiwgUFRCNV9GTiwgUFRCNF9GTiwKKwlQVEIzX0ZOLCBQVEIyX0ZOLCBQVEIxX0ZOLCBQVEIwX0ZOLAorCVBUQzdfRk4sIFBUQzZfRk4sIFBUQzVfRk4sIFBUQzRfRk4sCisJUFRDM19GTiwgUFRDMl9GTiwgUFRDMV9GTiwgUFRDMF9GTiwKKwlQVEQ3X0ZOLCBQVEQ2X0ZOLCBQVEQ1X0ZOLCBQVEQ0X0ZOLAorCVBURDNfRk4sIFBURDJfRk4sIFBURDFfRk4sIFBURDBfRk4sCisJUFRFNV9GTiwgUFRFNF9GTiwgUFRFM19GTiwgUFRFMl9GTiwgUFRFMV9GTiwgUFRFMF9GTiwKKwlQVEY3X0ZOLCBQVEY2X0ZOLCBQVEY1X0ZOLCBQVEY0X0ZOLAorCVBURjNfRk4sIFBURjJfRk4sIFBURjFfRk4sIFBURjBfRk4sCisJUFRHNV9GTiwgUFRHNF9GTiwgUFRHM19GTiwgUFRHMl9GTiwgUFRHMV9GTiwgUFRHMF9GTiwKKwlQVEg3X0ZOLCBQVEg2X0ZOLCBQVEg1X0ZOLCBQVEg0X0ZOLAorCVBUSDNfRk4sIFBUSDJfRk4sIFBUSDFfRk4sIFBUSDBfRk4sCisJUFRKN19GTiwgUFRKNV9GTiwgUFRKM19GTiwgUFRKMl9GTiwgUFRKMV9GTiwgUFRKMF9GTiwKKwlQVEs3X0ZOLCBQVEs2X0ZOLCBQVEs1X0ZOLCBQVEs0X0ZOLAorCVBUSzNfRk4sIFBUSzJfRk4sIFBUSzFfRk4sIFBUSzBfRk4sCisJUFRMN19GTiwgUFRMNl9GTiwgUFRMNV9GTiwgUFRMNF9GTiwKKwlQVEwzX0ZOLCBQVEwyX0ZOLCBQVEwxX0ZOLCBQVEwwX0ZOLAorCVBUTTdfRk4sIFBUTTZfRk4sIFBUTTVfRk4sIFBUTTRfRk4sCisJUFRNM19GTiwgUFRNMl9GTiwgUFRNMV9GTiwgUFRNMF9GTiwKKwlQVE43X0ZOLCBQVE42X0ZOLCBQVE41X0ZOLCBQVE40X0ZOLAorCVBUTjNfRk4sIFBUTjJfRk4sIFBUTjFfRk4sIFBUTjBfRk4sCisJUFRRM19GTiwgUFRRMl9GTiwgUFRRMV9GTiwgUFRRMF9GTiwKKwlQVFI3X0ZOLCBQVFI2X0ZOLCBQVFI1X0ZOLCBQVFI0X0ZOLAorCVBUUjNfRk4sIFBUUjJfRk4sIFBUUjFfRk4sIFBUUjBfRk4sCisJUFRTN19GTiwgUFRTNl9GTiwgUFRTNV9GTiwgUFRTNF9GTiwKKwlQVFMzX0ZOLCBQVFMyX0ZOLCBQVFMxX0ZOLCBQVFMwX0ZOLAorCVBUVDVfRk4sIFBUVDRfRk4sIFBUVDNfRk4sIFBUVDJfRk4sIFBUVDFfRk4sIFBUVDBfRk4sCisJUFRVNV9GTiwgUFRVNF9GTiwgUFRVM19GTiwgUFRVMl9GTiwgUFRVMV9GTiwgUFRVMF9GTiwKKwlQVFY3X0ZOLCBQVFY2X0ZOLCBQVFY1X0ZOLCBQVFY0X0ZOLAorCVBUVjNfRk4sIFBUVjJfRk4sIFBUVjFfRk4sIFBUVjBfRk4sCisJUFRXN19GTiwgUFRXNl9GTiwgUFRXNV9GTiwgUFRXNF9GTiwKKwlQVFczX0ZOLCBQVFcyX0ZOLCBQVFcxX0ZOLCBQVFcwX0ZOLAorCVBUWDdfRk4sIFBUWDZfRk4sIFBUWDVfRk4sIFBUWDRfRk4sCisJUFRYM19GTiwgUFRYMl9GTiwgUFRYMV9GTiwgUFRYMF9GTiwKKwlQVFk3X0ZOLCBQVFk2X0ZOLCBQVFk1X0ZOLCBQVFk0X0ZOLAorCVBUWTNfRk4sIFBUWTJfRk4sIFBUWTFfRk4sIFBUWTBfRk4sCisJUFRaN19GTiwgUFRaNl9GTiwgUFRaNV9GTiwgUFRaNF9GTiwKKwlQVFozX0ZOLCBQVFoyX0ZOLCBQVFoxX0ZOLCBQVFowX0ZOLAorCisKKwlQU0ExNV9QU0ExNF9GTjEsIFBTQTE1X1BTQTE0X0ZOMiwKKwlQU0ExM19QU0ExMl9GTjEsIFBTQTEzX1BTQTEyX0ZOMiwKKwlQU0ExMV9QU0ExMF9GTjEsIFBTQTExX1BTQTEwX0ZOMiwKKwlQU0E1X1BTQTRfRk4xLCBQU0E1X1BTQTRfRk4yLCBQU0E1X1BTQTRfRk4zLAorCVBTQTNfUFNBMl9GTjEsIFBTQTNfUFNBMl9GTjIsCisJUFNCMTVfUFNCMTRfRk4xLCBQU0IxNV9QU0IxNF9GTjIsCisJUFNCMTNfUFNCMTJfTENEQ19SR0IsIFBTQjEzX1BTQjEyX0xDRENfU1lTLAorCVBTQjlfUFNCOF9GTjEsIFBTQjlfUFNCOF9GTjIsIFBTQjlfUFNCOF9GTjMsCisJUFNCN19QU0I2X0ZOMSwgUFNCN19QU0I2X0ZOMiwKKwlQU0I1X1BTQjRfRk4xLCBQU0I1X1BTQjRfRk4yLAorCVBTQjNfUFNCMl9GTjEsIFBTQjNfUFNCMl9GTjIsCisJUFNDMTVfUFNDMTRfRk4xLCBQU0MxNV9QU0MxNF9GTjIsCisJUFNDMTNfUFNDMTJfRk4xLCBQU0MxM19QU0MxMl9GTjIsCisJUFNDMTFfUFNDMTBfRk4xLCBQU0MxMV9QU0MxMF9GTjIsIFBTQzExX1BTQzEwX0ZOMywKKwlQU0M5X1BTQzhfRk4xLCBQU0M5X1BTQzhfRk4yLAorCVBTQzdfUFNDNl9GTjEsIFBTQzdfUFNDNl9GTjIsIFBTQzdfUFNDNl9GTjMsCisJUFNEMTVfUFNEMTRfRk4xLCBQU0QxNV9QU0QxNF9GTjIsCisJUFNEMTNfUFNEMTJfRk4xLCBQU0QxM19QU0QxMl9GTjIsCisJUFNEMTFfUFNEMTBfRk4xLCBQU0QxMV9QU0QxMF9GTjIsIFBTRDExX1BTRDEwX0ZOMywKKwlQU0Q5X1BTRDhfRk4xLCBQU0Q5X1BTRDhfRk4yLAorCVBTRDdfUFNENl9GTjEsIFBTRDdfUFNENl9GTjIsCisJUFNENV9QU0Q0X0ZOMSwgUFNENV9QU0Q0X0ZOMiwKKwlQU0QzX1BTRDJfRk4xLCBQU0QzX1BTRDJfRk4yLAorCVBTRDFfUFNEMF9GTjEsIFBTRDFfUFNEMF9GTjIsCisJUElOTVVYX0ZVTkNUSU9OX0VORCwKKworCVBJTk1VWF9NQVJLX0JFR0lOLAorCVNDSUYwX1BUVF9UWERfTUFSSywgU0NJRjBfUFRUX1JYRF9NQVJLLAorCVNDSUYwX1BUVF9TQ0tfTUFSSywgU0NJRjBfUFRVX1RYRF9NQVJLLAorCVNDSUYwX1BUVV9SWERfTUFSSywgU0NJRjBfUFRVX1NDS19NQVJLLAorCisJU0NJRjFfUFRTX1RYRF9NQVJLLCBTQ0lGMV9QVFNfUlhEX01BUkssCisJU0NJRjFfUFRTX1NDS19NQVJLLCBTQ0lGMV9QVFZfVFhEX01BUkssCisJU0NJRjFfUFRWX1JYRF9NQVJLLCBTQ0lGMV9QVFZfU0NLX01BUkssCisKKwlTQ0lGMl9QVFRfVFhEX01BUkssIFNDSUYyX1BUVF9SWERfTUFSSywKKwlTQ0lGMl9QVFRfU0NLX01BUkssIFNDSUYyX1BUVV9UWERfTUFSSywKKwlTQ0lGMl9QVFVfUlhEX01BUkssIFNDSUYyX1BUVV9TQ0tfTUFSSywKKworCVNDSUYzX1BUU19UWERfTUFSSywgU0NJRjNfUFRTX1JYRF9NQVJLLAorCVNDSUYzX1BUU19TQ0tfTUFSSywgU0NJRjNfUFRTX1JUU19NQVJLLAorCVNDSUYzX1BUU19DVFNfTUFSSywgU0NJRjNfUFRWX1RYRF9NQVJLLAorCVNDSUYzX1BUVl9SWERfTUFSSywgU0NJRjNfUFRWX1NDS19NQVJLLAorCVNDSUYzX1BUVl9SVFNfTUFSSywgU0NJRjNfUFRWX0NUU19NQVJLLAorCisJU0NJRjRfUFRFX1RYRF9NQVJLLCBTQ0lGNF9QVEVfUlhEX01BUkssCisJU0NJRjRfUFRFX1NDS19NQVJLLCBTQ0lGNF9QVE5fVFhEX01BUkssCisJU0NJRjRfUFROX1JYRF9NQVJLLCBTQ0lGNF9QVE5fU0NLX01BUkssCisKKwlTQ0lGNV9QVEVfVFhEX01BUkssIFNDSUY1X1BURV9SWERfTUFSSywKKwlTQ0lGNV9QVEVfU0NLX01BUkssIFNDSUY1X1BUTl9UWERfTUFSSywKKwlTQ0lGNV9QVE5fUlhEX01BUkssIFNDSUY1X1BUTl9TQ0tfTUFSSywKKworCVZJT19EMTVfTUFSSywgVklPX0QxNF9NQVJLLCBWSU9fRDEzX01BUkssIFZJT19EMTJfTUFSSywKKwlWSU9fRDExX01BUkssIFZJT19EMTBfTUFSSywgVklPX0Q5X01BUkssIFZJT19EOF9NQVJLLAorCVZJT19EN19NQVJLLCBWSU9fRDZfTUFSSywgVklPX0Q1X01BUkssIFZJT19ENF9NQVJLLAorCVZJT19EM19NQVJLLCBWSU9fRDJfTUFSSywgVklPX0QxX01BUkssIFZJT19EMF9NQVJLLAorCVZJT19GTERfTUFSSywgVklPX0NLT19NQVJLLAorCVZJT19WRDFfTUFSSywgVklPX0hEMV9NQVJLLCBWSU9fQ0xLMV9NQVJLLAorCVZJT19IRDJfTUFSSywgVklPX1ZEMl9NQVJLLCBWSU9fQ0xLMl9NQVJLLAorCisJTENERDIzX01BUkssIExDREQyMl9NQVJLLCBMQ0REMjFfTUFSSywgTENERDIwX01BUkssCisJTENERDE5X01BUkssIExDREQxOF9NQVJLLCBMQ0REMTdfTUFSSywgTENERDE2X01BUkssCisJTENERDE1X01BUkssIExDREQxNF9NQVJLLCBMQ0REMTNfTUFSSywgTENERDEyX01BUkssCisJTENERDExX01BUkssIExDREQxMF9NQVJLLCBMQ0REOV9NQVJLLCBMQ0REOF9NQVJLLAorCUxDREQ3X01BUkssIExDREQ2X01BUkssIExDREQ1X01BUkssIExDREQ0X01BUkssCisJTENERDNfTUFSSywgTENERDJfTUFSSywgTENERDFfTUFSSywgTENERDBfTUFSSywKKwlMQ0RET05fTUFSSywgTENEVkNQV0NfTUFSSywgTENEVkVQV0NfTUFSSywKKwlMQ0RWU1lOX01BUkssIExDRERDS19NQVJLLCBMQ0RIU1lOX01BUkssIExDRERJU1BfTUFSSywKKwlMQ0RSU19NQVJLLCBMQ0RDU19NQVJLLCBMQ0RXUl9NQVJLLCBMQ0RSRF9NQVJLLAorCUxDRExDTEtfUFRSX01BUkssIExDRExDTEtfUFRXX01BUkssCisKKwlJUlEwX01BUkssIElSUTFfTUFSSywgSVJRMl9NQVJLLCBJUlEzX01BUkssCisJSVJRNF9NQVJLLCBJUlE1X01BUkssIElSUTZfTUFSSywgSVJRN19NQVJLLAorCisJQVVEQVRBM19NQVJLLCBBVURBVEEyX01BUkssIEFVREFUQTFfTUFSSywgQVVEQVRBMF9NQVJLLAorCUFVRENLX01BUkssIEFVRFNZTkNfTUFSSywKKworCVNESEkwQ0RfUFREX01BUkssIFNESEkwV1BfUFREX01BUkssCisJU0RISTBEM19QVERfTUFSSywgU0RISTBEMl9QVERfTUFSSywKKwlTREhJMEQxX1BURF9NQVJLLCBTREhJMEQwX1BURF9NQVJLLAorCVNESEkwQ01EX1BURF9NQVJLLCBTREhJMENMS19QVERfTUFSSywKKworCVNESEkwQ0RfUFRTX01BUkssIFNESEkwV1BfUFRTX01BUkssCisJU0RISTBEM19QVFNfTUFSSywgU0RISTBEMl9QVFNfTUFSSywKKwlTREhJMEQxX1BUU19NQVJLLCBTREhJMEQwX1BUU19NQVJLLAorCVNESEkwQ01EX1BUU19NQVJLLCBTREhJMENMS19QVFNfTUFSSywKKworCVNESEkxQ0RfTUFSSywgU0RISTFXUF9NQVJLLCBTREhJMUQzX01BUkssIFNESEkxRDJfTUFSSywKKwlTREhJMUQxX01BUkssIFNESEkxRDBfTUFSSywgU0RISTFDTURfTUFSSywgU0RISTFDTEtfTUFSSywKKworCVNJVUFGQ0tfTUFSSywgU0lVQUlMUl9NQVJLLCBTSVVBSUJUX01BUkssIFNJVUFJU0xEX01BUkssCisJU0lVQU9MUl9NQVJLLCBTSVVBT0JUX01BUkssIFNJVUFPU0xEX01BUkssIFNJVUFNQ0tfTUFSSywKKwlTSVVBSVNQRF9NQVJLLCBTSVVBT1NQRF9NQVJLLAorCisJU0lVQkZDS19NQVJLLCBTSVVCSUxSX01BUkssIFNJVUJJQlRfTUFSSywgU0lVQklTTERfTUFSSywKKwlTSVVCT0xSX01BUkssIFNJVUJPQlRfTUFSSywgU0lVQk9TTERfTUFSSywgU0lVQk1DS19NQVJLLAorCisJSVJEQV9JTl9NQVJLLCBJUkRBX09VVF9NQVJLLAorCisJRFZfQ0xLSV9NQVJLLCBEVl9DTEtfTUFSSywgRFZfSFNZTkNfTUFSSywgRFZfVlNZTkNfTUFSSywKKwlEVl9EMTVfTUFSSywgRFZfRDE0X01BUkssIERWX0QxM19NQVJLLCBEVl9EMTJfTUFSSywKKwlEVl9EMTFfTUFSSywgRFZfRDEwX01BUkssIERWX0Q5X01BUkssIERWX0Q4X01BUkssCisJRFZfRDdfTUFSSywgRFZfRDZfTUFSSywgRFZfRDVfTUFSSywgRFZfRDRfTUFSSywKKwlEVl9EM19NQVJLLCBEVl9EMl9NQVJLLCBEVl9EMV9NQVJLLCBEVl9EMF9NQVJLLAorCisJS0VZSU4wX01BUkssIEtFWUlOMV9NQVJLLCBLRVlJTjJfTUFSSywgS0VZSU4zX01BUkssIEtFWUlONF9NQVJLLAorCUtFWU9VVDBfTUFSSywgS0VZT1VUMV9NQVJLLCBLRVlPVVQyX01BUkssIEtFWU9VVDNfTUFSSywKKwlLRVlPVVQ0X0lONl9NQVJLLCBLRVlPVVQ1X0lONV9NQVJLLAorCisJTVNJT0YwX1BURl9UWERfTUFSSywgTVNJT0YwX1BURl9SWERfTUFSSywgTVNJT0YwX1BURl9NQ0tfTUFSSywKKwlNU0lPRjBfUFRGX1RTWU5DX01BUkssIE1TSU9GMF9QVEZfVFNDS19NQVJLLCBNU0lPRjBfUFRGX1JTWU5DX01BUkssCisJTVNJT0YwX1BURl9SU0NLX01BUkssIE1TSU9GMF9QVEZfU1MxX01BUkssIE1TSU9GMF9QVEZfU1MyX01BUkssCisKKwlNU0lPRjBfUFRUX1RYRF9NQVJLLCBNU0lPRjBfUFRUX1JYRF9NQVJLLCBNU0lPRjBfUFRYX01DS19NQVJLLAorCU1TSU9GMF9QVFRfVFNZTkNfTUFSSywgTVNJT0YwX1BUVF9UU0NLX01BUkssIE1TSU9GMF9QVFRfUlNZTkNfTUFSSywKKwlNU0lPRjBfUFRUX1JTQ0tfTUFSSywgTVNJT0YwX1BUVF9TUzFfTUFSSywgTVNJT0YwX1BUVF9TUzJfTUFSSywKKworCU1TSU9GMV9UWERfTUFSSywgTVNJT0YxX1JYRF9NQVJLLCBNU0lPRjFfTUNLX01BUkssCisJTVNJT0YxX1RTWU5DX01BUkssIE1TSU9GMV9UU0NLX01BUkssIE1TSU9GMV9SU1lOQ19NQVJLLAorCU1TSU9GMV9SU0NLX01BUkssIE1TSU9GMV9TUzFfTUFSSywgTVNJT0YxX1NTMl9NQVJLLAorCisJVFMwX1NEQVRfTUFSSywgVFMwX1NDS19NQVJLLCBUUzBfU0RFTl9NQVJLLCBUUzBfU1BTWU5DX01BUkssCisKKwlGQ0VfTUFSSywgTkFGN19NQVJLLCBOQUY2X01BUkssIE5BRjVfTUFSSywgTkFGNF9NQVJLLAorCU5BRjNfTUFSSywgTkFGMl9NQVJLLCBOQUYxX01BUkssIE5BRjBfTUFSSywgRkNERV9NQVJLLAorCUZPRV9NQVJLLCBGU0NfTUFSSywgRldFX01BUkssIEZSQl9NQVJLLAorCisJREFDSzFfTUFSSywgRFJFUTFfTUFSSywgREFDSzBfTUFSSywgRFJFUTBfTUFSSywKKworCUFOM19NQVJLLCBBTjJfTUFSSywgQU4xX01BUkssIEFOMF9NQVJLLCBBRFRSR19NQVJLLAorCisJU1RBVFVTMF9NQVJLLCBQRFNUQVRVU19NQVJLLAorCisJVFBVVE8zX01BUkssIFRQVVRPMl9NQVJLLCBUUFVUTzFfTUFSSywgVFBVVE8wX01BUkssCisKKwlEMzFfTUFSSywgRDMwX01BUkssIEQyOV9NQVJLLCBEMjhfTUFSSywKKwlEMjdfTUFSSywgRDI2X01BUkssIEQyNV9NQVJLLCBEMjRfTUFSSywKKwlEMjNfTUFSSywgRDIyX01BUkssIEQyMV9NQVJLLCBEMjBfTUFSSywKKwlEMTlfTUFSSywgRDE4X01BUkssIEQxN19NQVJLLCBEMTZfTUFSSywKKwlJT0lTMTZfTUFSSywgV0FJVF9NQVJLLCBCU19NQVJLLAorCUEyNV9NQVJLLCBBMjRfTUFSSywgQTIzX01BUkssIEEyMl9NQVJLLAorCUNTNkJfQ0UxQl9NQVJLLCBDUzZBX0NFMkJfTUFSSywKKwlDUzVCX0NFMUFfTUFSSywgQ1M1QV9DRTJBX01BUkssCisJV0UzX0lDSU9XUl9NQVJLLCBXRTJfSUNJT1JEX01BUkssCisKKwlJREVEMTVfTUFSSywgSURFRDE0X01BUkssIElERUQxM19NQVJLLCBJREVEMTJfTUFSSywKKwlJREVEMTFfTUFSSywgSURFRDEwX01BUkssIElERUQ5X01BUkssIElERUQ4X01BUkssCisJSURFRDdfTUFSSywgSURFRDZfTUFSSywgSURFRDVfTUFSSywgSURFRDRfTUFSSywKKwlJREVEM19NQVJLLCBJREVEMl9NQVJLLCBJREVEMV9NQVJLLCBJREVEMF9NQVJLLAorCURJUkVDVElPTl9NQVJLLCBFWEJVRl9FTkJfTUFSSywgSURFUlNUX01BUkssIElPREFDS19NQVJLLAorCUlPRFJFUV9NQVJLLCBJREVJT1JEWV9NQVJLLCBJREVJTlRfTUFSSywgSURFSU9XUl9NQVJLLAorCUlERUlPUkRfTUFSSywgSURFQ1MxX01BUkssIElERUNTMF9NQVJLLCBJREVBMl9NQVJLLAorCUlERUExX01BUkssIElERUEwX01BUkssCisJUElOTVVYX01BUktfRU5ELAorfTsKKworc3RhdGljIHBpbm11eF9lbnVtX3QgcGlubXV4X2RhdGFbXSA9IHsKKwkvKiBQVEEgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUQTdfREFUQSwgUFRBN19JTiwgUFRBN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQTZfREFUQSwgUFRBNl9JTiwgUFRBNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQTVfREFUQSwgUFRBNV9JTiwgUFRBNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQTRfREFUQSwgUFRBNF9JTiwgUFRBNF9PVVQsIFBUQTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQTNfREFUQSwgUFRBM19JTiwgUFRBM19PVVQsIFBUQTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQTJfREFUQSwgUFRBMl9JTiwgUFRBMl9PVVQsIFBUQTJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQTFfREFUQSwgUFRBMV9JTiwgUFRBMV9PVVQsIFBUQTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQTBfREFUQSwgUFRBMF9JTiwgUFRBMF9PVVQsIFBUQTBfSU5fUFUpLAorCisJLyogUFRCIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEI3X0RBVEEsIFBUQjdfSU4sIFBUQjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEI2X0RBVEEsIFBUQjZfSU4sIFBUQjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEI1X0RBVEEsIFBUQjVfSU4sIFBUQjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEI0X0RBVEEsIFBUQjRfSU4sIFBUQjRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEIzX0RBVEEsIFBUQjNfSU4sIFBUQjNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEIyX0RBVEEsIFBUQjJfSU4sIFBUQjJfT1VULCBQVEIyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEIxX0RBVEEsIFBUQjFfSU4sIFBUQjFfT1VULCBQVEIxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEIwX0RBVEEsIFBUQjBfSU4sIFBUQjBfT1VUKSwKKworCS8qIFBUQyBHUElPICovCisJUElOTVVYX0RBVEEoUFRDN19EQVRBLCBQVEM3X0lOLCBQVEM3X09VVCksCisJUElOTVVYX0RBVEEoUFRDNl9EQVRBLCBQVEM2X0lOLCBQVEM2X09VVCksCisJUElOTVVYX0RBVEEoUFRDNV9EQVRBLCBQVEM1X0lOLCBQVEM1X09VVCksCisJUElOTVVYX0RBVEEoUFRDNF9EQVRBLCBQVEM0X0lOLCBQVEM0X09VVCksCisJUElOTVVYX0RBVEEoUFRDM19EQVRBLCBQVEMzX0lOLCBQVEMzX09VVCksCisJUElOTVVYX0RBVEEoUFRDMl9EQVRBLCBQVEMyX0lOLCBQVEMyX09VVCksCisJUElOTVVYX0RBVEEoUFRDMV9EQVRBLCBQVEMxX0lOLCBQVEMxX09VVCksCisJUElOTVVYX0RBVEEoUFRDMF9EQVRBLCBQVEMwX0lOLCBQVEMwX09VVCksCisKKwkvKiBQVEQgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBURDdfREFUQSwgUFREN19JTiwgUFREN19PVVQpLAorCVBJTk1VWF9EQVRBKFBURDZfREFUQSwgUFRENl9JTiwgUFRENl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDVfREFUQSwgUFRENV9JTiwgUFRENV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDRfREFUQSwgUFRENF9JTiwgUFRENF9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDNfREFUQSwgUFREM19JTiwgUFREM19PVVQpLAorCVBJTk1VWF9EQVRBKFBURDJfREFUQSwgUFREMl9JTiwgUFREMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDFfREFUQSwgUFREMV9JTiwgUFREMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDBfREFUQSwgUFREMF9JTiwgUFREMF9PVVQpLAorCisJLyogUFRFIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEU1X0RBVEEsIFBURTVfSU4sIFBURTVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEU0X0RBVEEsIFBURTRfSU4sIFBURTRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEUzX0RBVEEsIFBURTNfSU4sIFBURTNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEUyX0RBVEEsIFBURTJfSU4sIFBURTJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEUxX0RBVEEsIFBURTFfSU4sIFBURTFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEUwX0RBVEEsIFBURTBfSU4sIFBURTBfT1VUKSwKKworCS8qIFBURiBHUElPICovCisJUElOTVVYX0RBVEEoUFRGN19EQVRBLCBQVEY3X0lOLCBQVEY3X09VVCksCisJUElOTVVYX0RBVEEoUFRGNl9EQVRBLCBQVEY2X0lOLCBQVEY2X09VVCksCisJUElOTVVYX0RBVEEoUFRGNV9EQVRBLCBQVEY1X0lOLCBQVEY1X09VVCksCisJUElOTVVYX0RBVEEoUFRGNF9EQVRBLCBQVEY0X0lOLCBQVEY0X09VVCksCisJUElOTVVYX0RBVEEoUFRGM19EQVRBLCBQVEYzX0lOLCBQVEYzX09VVCksCisJUElOTVVYX0RBVEEoUFRGMl9EQVRBLCBQVEYyX0lOLCBQVEYyX09VVCksCisJUElOTVVYX0RBVEEoUFRGMV9EQVRBLCBQVEYxX0lOLCBQVEYxX09VVCksCisJUElOTVVYX0RBVEEoUFRGMF9EQVRBLCBQVEYwX0lOLCBQVEYwX09VVCksCisKKwkvKiBQVEcgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBURzVfREFUQSwgUFRHNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzRfREFUQSwgUFRHNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzNfREFUQSwgUFRHM19PVVQpLAorCVBJTk1VWF9EQVRBKFBURzJfREFUQSwgUFRHMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzFfREFUQSwgUFRHMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzBfREFUQSwgUFRHMF9PVVQpLAorCisJLyogUFRIIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEg3X0RBVEEsIFBUSDdfSU4sIFBUSDdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEg2X0RBVEEsIFBUSDZfSU4sIFBUSDZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEg1X0RBVEEsIFBUSDVfSU4sIFBUSDVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEg0X0RBVEEsIFBUSDRfSU4sIFBUSDRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEgzX0RBVEEsIFBUSDNfSU4sIFBUSDNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEgyX0RBVEEsIFBUSDJfSU4sIFBUSDJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEgxX0RBVEEsIFBUSDFfSU4sIFBUSDFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEgwX0RBVEEsIFBUSDBfSU4sIFBUSDBfT1VUKSwKKworCS8qIFBUSiBHUElPICovCisJUElOTVVYX0RBVEEoUFRKN19EQVRBLCBQVEo3X09VVCksCisJUElOTVVYX0RBVEEoUFRKNV9EQVRBLCBQVEo1X09VVCksCisJUElOTVVYX0RBVEEoUFRKM19EQVRBLCBQVEozX0lOLCBQVEozX09VVCksCisJUElOTVVYX0RBVEEoUFRKMl9EQVRBLCBQVEoyX0lOLCBQVEoyX09VVCksCisJUElOTVVYX0RBVEEoUFRKMV9EQVRBLCBQVEoxX0lOLCBQVEoxX09VVCksCisJUElOTVVYX0RBVEEoUFRKMF9EQVRBLCBQVEowX0lOLCBQVEowX09VVCksCisKKwkvKiBQVEsgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUSzdfREFUQSwgUFRLN19JTiwgUFRLN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzZfREFUQSwgUFRLNl9JTiwgUFRLNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzVfREFUQSwgUFRLNV9JTiwgUFRLNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzRfREFUQSwgUFRLNF9JTiwgUFRLNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzNfREFUQSwgUFRLM19JTiwgUFRLM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzJfREFUQSwgUFRLMl9JTiwgUFRLMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzFfREFUQSwgUFRLMV9JTiwgUFRLMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzBfREFUQSwgUFRLMF9JTiwgUFRLMF9PVVQpLAorCisJLyogUFRMIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEw3X0RBVEEsIFBUTDdfSU4sIFBUTDdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEw2X0RBVEEsIFBUTDZfSU4sIFBUTDZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEw1X0RBVEEsIFBUTDVfSU4sIFBUTDVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEw0X0RBVEEsIFBUTDRfSU4sIFBUTDRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEwzX0RBVEEsIFBUTDNfSU4sIFBUTDNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEwyX0RBVEEsIFBUTDJfSU4sIFBUTDJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEwxX0RBVEEsIFBUTDFfSU4sIFBUTDFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEwwX0RBVEEsIFBUTDBfSU4sIFBUTDBfT1VUKSwKKworCS8qIFBUTSBHUElPICovCisJUElOTVVYX0RBVEEoUFRNN19EQVRBLCBQVE03X0lOLCBQVE03X09VVCksCisJUElOTVVYX0RBVEEoUFRNNl9EQVRBLCBQVE02X0lOLCBQVE02X09VVCksCisJUElOTVVYX0RBVEEoUFRNNV9EQVRBLCBQVE01X0lOLCBQVE01X09VVCksCisJUElOTVVYX0RBVEEoUFRNNF9EQVRBLCBQVE00X0lOLCBQVE00X09VVCksCisJUElOTVVYX0RBVEEoUFRNM19EQVRBLCBQVE0zX0lOLCBQVE0zX09VVCksCisJUElOTVVYX0RBVEEoUFRNMl9EQVRBLCBQVE0yX0lOLCBQVE0yX09VVCksCisJUElOTVVYX0RBVEEoUFRNMV9EQVRBLCBQVE0xX0lOLCBQVE0xX09VVCksCisJUElOTVVYX0RBVEEoUFRNMF9EQVRBLCBQVE0wX0lOLCBQVE0wX09VVCksCisKKwkvKiBQVE4gR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUTjdfREFUQSwgUFRON19JTiwgUFRON19PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjZfREFUQSwgUFRONl9JTiwgUFRONl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjVfREFUQSwgUFRONV9JTiwgUFRONV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjRfREFUQSwgUFRONF9JTiwgUFRONF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjNfREFUQSwgUFROM19JTiwgUFROM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjJfREFUQSwgUFROMl9JTiwgUFROMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjFfREFUQSwgUFROMV9JTiwgUFROMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjBfREFUQSwgUFROMF9JTiwgUFROMF9PVVQpLAorCisJLyogUFRRIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFEzX0RBVEEsIFBUUTNfSU4pLAorCVBJTk1VWF9EQVRBKFBUUTJfREFUQSwgUFRRMl9JTiksCisJUElOTVVYX0RBVEEoUFRRMV9EQVRBLCBQVFExX0lOKSwKKwlQSU5NVVhfREFUQShQVFEwX0RBVEEsIFBUUTBfSU4pLAorCisJLyogUFRSIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFI3X0RBVEEsIFBUUjdfSU4sIFBUUjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVFI2X0RBVEEsIFBUUjZfSU4sIFBUUjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFI1X0RBVEEsIFBUUjVfSU4sIFBUUjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFI0X0RBVEEsIFBUUjRfSU4sIFBUUjRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFIzX0RBVEEsIFBUUjNfSU4pLAorCVBJTk1VWF9EQVRBKFBUUjJfREFUQSwgUFRSMl9JTiwgUFRSMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRSMV9EQVRBLCBQVFIxX0lOLCBQVFIxX09VVCksCisJUElOTVVYX0RBVEEoUFRSMF9EQVRBLCBQVFIwX0lOLCBQVFIwX09VVCksCisKKwkvKiBQVFMgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUUzdfREFUQSwgUFRTN19JTiwgUFRTN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzZfREFUQSwgUFRTNl9JTiwgUFRTNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzVfREFUQSwgUFRTNV9JTiwgUFRTNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzRfREFUQSwgUFRTNF9JTiwgUFRTNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzNfREFUQSwgUFRTM19JTiwgUFRTM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzJfREFUQSwgUFRTMl9JTiwgUFRTMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzFfREFUQSwgUFRTMV9JTiwgUFRTMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzBfREFUQSwgUFRTMF9JTiwgUFRTMF9PVVQpLAorCisJLyogUFRUIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFQ1X0RBVEEsIFBUVDVfSU4sIFBUVDVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQ0X0RBVEEsIFBUVDRfSU4sIFBUVDRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQzX0RBVEEsIFBUVDNfSU4sIFBUVDNfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQyX0RBVEEsIFBUVDJfSU4sIFBUVDJfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQxX0RBVEEsIFBUVDFfSU4sIFBUVDFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQwX0RBVEEsIFBUVDBfSU4sIFBUVDBfT1VUKSwKKworCS8qIFBUVSBHUElPICovCisJUElOTVVYX0RBVEEoUFRVNV9EQVRBLCBQVFU1X0lOLCBQVFU1X09VVCksCisJUElOTVVYX0RBVEEoUFRVNF9EQVRBLCBQVFU0X0lOLCBQVFU0X09VVCksCisJUElOTVVYX0RBVEEoUFRVM19EQVRBLCBQVFUzX0lOLCBQVFUzX09VVCksCisJUElOTVVYX0RBVEEoUFRVMl9EQVRBLCBQVFUyX0lOLCBQVFUyX09VVCksCisJUElOTVVYX0RBVEEoUFRVMV9EQVRBLCBQVFUxX0lOLCBQVFUxX09VVCksCisJUElOTVVYX0RBVEEoUFRVMF9EQVRBLCBQVFUwX0lOLCBQVFUwX09VVCksCisKKwkvKiBQVFYgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUVjdfREFUQSwgUFRWN19JTiwgUFRWN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjZfREFUQSwgUFRWNl9JTiwgUFRWNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjVfREFUQSwgUFRWNV9JTiwgUFRWNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjRfREFUQSwgUFRWNF9JTiwgUFRWNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjNfREFUQSwgUFRWM19JTiwgUFRWM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjJfREFUQSwgUFRWMl9JTiwgUFRWMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjFfREFUQSwgUFRWMV9JTiwgUFRWMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjBfREFUQSwgUFRWMF9JTiwgUFRWMF9PVVQpLAorCisJLyogUFRXIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFc3X0RBVEEsIFBUVzdfSU4sIFBUVzdfT1VUKSwKKwlQSU5NVVhfREFUQShQVFc2X0RBVEEsIFBUVzZfSU4sIFBUVzZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFc1X0RBVEEsIFBUVzVfSU4sIFBUVzVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFc0X0RBVEEsIFBUVzRfSU4sIFBUVzRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFczX0RBVEEsIFBUVzNfSU4sIFBUVzNfT1VUKSwKKwlQSU5NVVhfREFUQShQVFcyX0RBVEEsIFBUVzJfSU4sIFBUVzJfT1VUKSwKKwlQSU5NVVhfREFUQShQVFcxX0RBVEEsIFBUVzFfSU4sIFBUVzFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFcwX0RBVEEsIFBUVzBfSU4sIFBUVzBfT1VUKSwKKworCS8qIFBUWCBHUElPICovCisJUElOTVVYX0RBVEEoUFRYN19EQVRBLCBQVFg3X0lOLCBQVFg3X09VVCksCisJUElOTVVYX0RBVEEoUFRYNl9EQVRBLCBQVFg2X0lOLCBQVFg2X09VVCksCisJUElOTVVYX0RBVEEoUFRYNV9EQVRBLCBQVFg1X0lOLCBQVFg1X09VVCksCisJUElOTVVYX0RBVEEoUFRYNF9EQVRBLCBQVFg0X0lOLCBQVFg0X09VVCksCisJUElOTVVYX0RBVEEoUFRYM19EQVRBLCBQVFgzX0lOLCBQVFgzX09VVCksCisJUElOTVVYX0RBVEEoUFRYMl9EQVRBLCBQVFgyX0lOLCBQVFgyX09VVCksCisJUElOTVVYX0RBVEEoUFRYMV9EQVRBLCBQVFgxX0lOLCBQVFgxX09VVCksCisJUElOTVVYX0RBVEEoUFRYMF9EQVRBLCBQVFgwX0lOLCBQVFgwX09VVCksCisKKwkvKiBQVFkgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUWTdfREFUQSwgUFRZN19JTiwgUFRZN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTZfREFUQSwgUFRZNl9JTiwgUFRZNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTVfREFUQSwgUFRZNV9JTiwgUFRZNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTRfREFUQSwgUFRZNF9JTiwgUFRZNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTNfREFUQSwgUFRZM19JTiwgUFRZM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTJfREFUQSwgUFRZMl9JTiwgUFRZMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTFfREFUQSwgUFRZMV9JTiwgUFRZMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTBfREFUQSwgUFRZMF9JTiwgUFRZMF9PVVQpLAorCisJLyogUFRaIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFo3X0RBVEEsIFBUWjdfSU4sIFBUWjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVFo2X0RBVEEsIFBUWjZfSU4sIFBUWjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFo1X0RBVEEsIFBUWjVfSU4sIFBUWjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFo0X0RBVEEsIFBUWjRfSU4sIFBUWjRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFozX0RBVEEsIFBUWjNfSU4sIFBUWjNfT1VUKSwKKwlQSU5NVVhfREFUQShQVFoyX0RBVEEsIFBUWjJfSU4sIFBUWjJfT1VUKSwKKwlQSU5NVVhfREFUQShQVFoxX0RBVEEsIFBUWjFfSU4sIFBUWjFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFowX0RBVEEsIFBUWjBfSU4sIFBUWjBfT1VUKSwKKworCS8qIFBUQSBGTiAqLworCVBJTk1VWF9EQVRBKEQyM19NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTdfRk4pLAorCVBJTk1VWF9EQVRBKEtFWU9VVDJfTUFSSywgUFNBMTVfUFNBMTRfRk4yLCBQVEE3X0ZOKSwKKwlQSU5NVVhfREFUQShEMjJfTUFSSywgUFNBMTVfUFNBMTRfRk4xLCBQVEE2X0ZOKSwKKwlQSU5NVVhfREFUQShLRVlPVVQxX01BUkssIFBTQTE1X1BTQTE0X0ZOMiwgUFRBNl9GTiksCisJUElOTVVYX0RBVEEoRDIxX01BUkssIFBTQTE1X1BTQTE0X0ZOMSwgUFRBNV9GTiksCisJUElOTVVYX0RBVEEoS0VZT1VUMF9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTVfRk4pLAorCVBJTk1VWF9EQVRBKEQyMF9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTRfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlONF9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTRfRk4pLAorCVBJTk1VWF9EQVRBKEQxOV9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTNfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlOM19NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTNfRk4pLAorCVBJTk1VWF9EQVRBKEQxOF9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTJfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlOMl9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTJfRk4pLAorCVBJTk1VWF9EQVRBKEQxN19NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTFfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlOMV9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTFfRk4pLAorCVBJTk1VWF9EQVRBKEQxNl9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTBfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlOMF9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTBfRk4pLAorCisJLyogUFRCIEZOICovCisJUElOTVVYX0RBVEEoRDMxX01BUkssIFBUQjdfRk4pLAorCVBJTk1VWF9EQVRBKEQzMF9NQVJLLCBQVEI2X0ZOKSwKKwlQSU5NVVhfREFUQShEMjlfTUFSSywgUFRCNV9GTiksCisJUElOTVVYX0RBVEEoRDI4X01BUkssIFBUQjRfRk4pLAorCVBJTk1VWF9EQVRBKEQyN19NQVJLLCBQVEIzX0ZOKSwKKwlQSU5NVVhfREFUQShEMjZfTUFSSywgUFNBMTVfUFNBMTRfRk4xLCBQVEIyX0ZOKSwKKwlQSU5NVVhfREFUQShLRVlPVVQ1X0lONV9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQjJfRk4pLAorCVBJTk1VWF9EQVRBKEQyNV9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQjFfRk4pLAorCVBJTk1VWF9EQVRBKEtFWU9VVDRfSU42X01BUkssIFBTQTE1X1BTQTE0X0ZOMiwgUFRCMV9GTiksCisJUElOTVVYX0RBVEEoRDI0X01BUkssIFBTQTE1X1BTQTE0X0ZOMSwgUFRCMF9GTiksCisJUElOTVVYX0RBVEEoS0VZT1VUM19NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQjBfRk4pLAorCisJLyogUFRDIEZOICovCisJUElOTVVYX0RBVEEoSURFRDE1X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRDN19GTiksCisJUElOTVVYX0RBVEEoU0RISTFDRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBUQzdfRk4pLAorCVBJTk1VWF9EQVRBKElERUQxNF9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBUQzZfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkxV1BfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEM2X0ZOKSwKKwlQSU5NVVhfREFUQShJREVEMTNfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEM1X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMUQzX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRDNV9GTiksCisJUElOTVVYX0RBVEEoSURFRDEyX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRDNF9GTiksCisJUElOTVVYX0RBVEEoU0RISTFEMl9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBUQzRfRk4pLAorCVBJTk1VWF9EQVRBKElERUQxMV9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBUQzNfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkxRDFfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEMzX0ZOKSwKKwlQSU5NVVhfREFUQShJREVEMTBfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEMyX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMUQwX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRDMl9GTiksCisJUElOTVVYX0RBVEEoSURFRDlfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEMxX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMUNNRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBUQzFfRk4pLAorCVBJTk1VWF9EQVRBKElERUQ4X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRDMF9GTiksCisJUElOTVVYX0RBVEEoU0RISTFDTEtfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEMwX0ZOKSwKKworCS8qIFBURCBGTiAqLworCVBJTk1VWF9EQVRBKElERUQ3X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFREN19GTiksCisJUElOTVVYX0RBVEEoU0RISTBDRF9QVERfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEQ3X0ZOKSwKKwlQSU5NVVhfREFUQShJREVENl9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURDZfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkwV1BfUFREX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRENl9GTiksCisJUElOTVVYX0RBVEEoSURFRDVfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEQ1X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQzX1BURF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURDVfRk4pLAorCVBJTk1VWF9EQVRBKElERUQ0X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRENF9GTiksCisJUElOTVVYX0RBVEEoU0RISTBEMl9QVERfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEQ0X0ZOKSwKKwlQSU5NVVhfREFUQShJREVEM19NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURDNfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkwRDFfUFREX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFREM19GTiksCisJUElOTVVYX0RBVEEoSURFRDJfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEQyX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQwX1BURF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURDJfRk4pLAorCVBJTk1VWF9EQVRBKElERUQxX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFREMV9GTiksCisJUElOTVVYX0RBVEEoU0RISTBDTURfUFREX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFREMV9GTiksCisJUElOTVVYX0RBVEEoSURFRDBfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEQwX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMENMS19QVERfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEQwX0ZOKSwKKworCS8qIFBURSBGTiAqLworCVBJTk1VWF9EQVRBKERJUkVDVElPTl9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURTVfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY1X1BURV9TQ0tfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEU1X0ZOKSwKKwlQSU5NVVhfREFUQShFWEJVRl9FTkJfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEU0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9QVEVfUlhEX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRFNF9GTiksCisJUElOTVVYX0RBVEEoSURFUlNUX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRFM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjVfUFRFX1RYRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURTNfRk4pLAorCVBJTk1VWF9EQVRBKElPREFDS19NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURTJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY0X1BURV9TQ0tfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEUyX0ZOKSwKKwlQSU5NVVhfREFUQShJT0RSRVFfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEUxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVEVfUlhEX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRFMV9GTiksCisJUElOTVVYX0RBVEEoSURFSU9SRFlfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEUwX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVEVfVFhEX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRFMF9GTiksCisKKwkvKiBQVEYgRk4gKi8KKwlQSU5NVVhfREFUQShJREVJTlRfTUFSSywgUFRGN19GTiksCisJUElOTVVYX0RBVEEoSURFSU9XUl9NQVJLLCBQU0E1X1BTQTRfRk4xLCBQVEY2X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1NTMl9NQVJLLCBQU0E1X1BTQTRfRk4yLCBQVEY2X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1JTWU5DX01BUkssIFBTQTVfUFNBNF9GTjMsIFBURjZfRk4pLAorCVBJTk1VWF9EQVRBKElERUlPUkRfTUFSSywgUFNBNV9QU0E0X0ZOMSwgUFRGNV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BURl9TUzFfTUFSSywgUFNBNV9QU0E0X0ZOMiwgUFRGNV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BURl9SU0NLX01BUkssIFBTQTVfUFNBNF9GTjMsIFBURjVfRk4pLAorCVBJTk1VWF9EQVRBKElERUNTMV9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURjRfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVEZfVFNZTkNfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEY0X0ZOKSwKKwlQSU5NVVhfREFUQShJREVDUzBfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEYzX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1RTQ0tfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEYzX0ZOKSwKKwlQSU5NVVhfREFUQShJREVBMl9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURjJfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVEZfUlhEX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRGMl9GTiksCisJUElOTVVYX0RBVEEoSURFQTFfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEYxX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1RYRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURjFfRk4pLAorCVBJTk1VWF9EQVRBKElERUEwX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRGMF9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BURl9NQ0tfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEYwX0ZOKSwKKworCS8qIFBURyBGTiAqLworCVBJTk1VWF9EQVRBKEFVRENLX01BUkssIFBURzVfRk4pLAorCVBJTk1VWF9EQVRBKEFVRFNZTkNfTUFSSywgUFRHNF9GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBM19NQVJLLCBQU0EzX1BTQTJfRk4xLCBQVEczX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVUTzNfTUFSSywgUFNBM19QU0EyX0ZOMiwgUFRHM19GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBMl9NQVJLLCBQU0EzX1BTQTJfRk4xLCBQVEcyX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVUTzJfTUFSSywgUFNBM19QU0EyX0ZOMiwgUFRHMl9GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBMV9NQVJLLCBQU0EzX1BTQTJfRk4xLCBQVEcxX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVUTzFfTUFSSywgUFNBM19QU0EyX0ZOMiwgUFRHMV9GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBMF9NQVJLLCBQU0EzX1BTQTJfRk4xLCBQVEcwX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVUTzBfTUFSSywgUFNBM19QU0EyX0ZOMiwgUFRHMF9GTiksCisKKwkvKiBQVEcgRk4gKi8KKwlQSU5NVVhfREFUQShMQ0RWQ1BXQ19NQVJLLCBQVEg3X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RSRF9NQVJLLCBQU0IxNV9QU0IxNF9GTjEsIFBUSDZfRk4pLAorCVBJTk1VWF9EQVRBKERWX0NMS0lfTUFSSywgUFNCMTVfUFNCMTRfRk4yLCBQVEg2X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RWU1lOX01BUkssIFBTQjE1X1BTQjE0X0ZOMSwgUFRINV9GTiksCisJUElOTVVYX0RBVEEoRFZfQ0xLX01BUkssIFBTQjE1X1BTQjE0X0ZOMiwgUFRINV9GTiksCisJUElOTVVYX0RBVEEoTENERElTUF9NQVJLLCBQU0IxM19QU0IxMl9MQ0RDX1JHQiwgUFRINF9GTiksCisJUElOTVVYX0RBVEEoTENEUlNfTUFSSywgUFNCMTNfUFNCMTJfTENEQ19TWVMsIFBUSDRfRk4pLAorCVBJTk1VWF9EQVRBKExDREhTWU5fTUFSSywgUFNCMTNfUFNCMTJfTENEQ19SR0IsIFBUSDNfRk4pLAorCVBJTk1VWF9EQVRBKExDRENTX01BUkssIFBTQjEzX1BTQjEyX0xDRENfU1lTLCBQVEgzX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RET05fTUFSSywgUFRIMl9GTiksCisJUElOTVVYX0RBVEEoTENERENLX01BUkssIFBTQjEzX1BTQjEyX0xDRENfUkdCLCBQVEgxX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RXUl9NQVJLLCBQU0IxM19QU0IxMl9MQ0RDX1NZUywgUFRIMV9GTiksCisJUElOTVVYX0RBVEEoTENEVkVQV0NfTUFSSywgUFRIMF9GTiksCisKKwkvKiBQVEogRk4gKi8KKwlQSU5NVVhfREFUQShTVEFUVVMwX01BUkssIFBUSjdfRk4pLAorCVBJTk1VWF9EQVRBKFBEU1RBVFVTX01BUkssIFBUSjVfRk4pLAorCVBJTk1VWF9EQVRBKEEyNV9NQVJLLCBQVEozX0ZOKSwKKwlQSU5NVVhfREFUQShBMjRfTUFSSywgUFRKMl9GTiksCisJUElOTVVYX0RBVEEoQTIzX01BUkssIFBUSjFfRk4pLAorCVBJTk1VWF9EQVRBKEEyMl9NQVJLLCBQVEowX0ZOKSwKKworCS8qIFBUSyBGTiAqLworCVBJTk1VWF9EQVRBKFNJVUFGQ0tfTUFSSywgUFRLN19GTiksCisJUElOTVVYX0RBVEEoU0lVQUlMUl9NQVJLLCBQU0I5X1BTQjhfRk4xLCBQVEs2X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfU1MyX01BUkssIFBTQjlfUFNCOF9GTjIsIFBUSzZfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9SU1lOQ19NQVJLLCBQU0I5X1BTQjhfRk4zLCBQVEs2X0ZOKSwKKwlQSU5NVVhfREFUQShTSVVBSUJUX01BUkssIFBTQjlfUFNCOF9GTjEsIFBUSzVfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9TUzFfTUFSSywgUFNCOV9QU0I4X0ZOMiwgUFRLNV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YxX1JTQ0tfTUFSSywgUFNCOV9QU0I4X0ZOMywgUFRLNV9GTiksCisJUElOTVVYX0RBVEEoU0lVQUlTTERfTUFSSywgUFNCN19QU0I2X0ZOMSwgUFRLNF9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YxX1JYRF9NQVJLLCBQU0I3X1BTQjZfRk4yLCBQVEs0X0ZOKSwKKwlQSU5NVVhfREFUQShTSVVBT0xSX01BUkssIFBTQjdfUFNCNl9GTjEsIFBUSzNfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9UU1lOQ19NQVJLLCBQU0I3X1BTQjZfRk4yLCBQVEszX0ZOKSwKKwlQSU5NVVhfREFUQShTSVVBT0JUX01BUkssIFBTQjdfUFNCNl9GTjEsIFBUSzJfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9UU0NLX01BUkssIFBTQjdfUFNCNl9GTjIsIFBUSzJfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUFPU0xEX01BUkssIFBTQjdfUFNCNl9GTjEsIFBUSzFfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9SWERfTUFSSywgUFNCN19QU0I2X0ZOMiwgUFRLMV9GTiksCisJUElOTVVYX0RBVEEoU0lVQU1DS19NQVJLLCBQU0I3X1BTQjZfRk4xLCBQVEswX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfTUNLX01BUkssIFBTQjdfUFNCNl9GTjIsIFBUSzBfRk4pLAorCisJLyogUFRMIEZOICovCisJUElOTVVYX0RBVEEoTENERDE1X01BUkssIFBTQjVfUFNCNF9GTjEsIFBUTDdfRk4pLAorCVBJTk1VWF9EQVRBKERWX0QxNV9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVEw3X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMTRfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMNl9GTiksCisJUElOTVVYX0RBVEEoRFZfRDE0X01BUkssIFBTQjVfUFNCNF9GTjIsIFBUTDZfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxM19NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVEw1X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMTNfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMNV9GTiksCisJUElOTVVYX0RBVEEoTENERDEyX01BUkssIFBTQjVfUFNCNF9GTjEsIFBUTDRfRk4pLAorCVBJTk1VWF9EQVRBKERWX0QxMl9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVEw0X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMTFfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMM19GTiksCisJUElOTVVYX0RBVEEoRFZfRDExX01BUkssIFBTQjVfUFNCNF9GTjIsIFBUTDNfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxMF9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVEwyX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMTBfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMMl9GTiksCisJUElOTVVYX0RBVEEoTENERDlfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMMV9GTiksCisJUElOTVVYX0RBVEEoRFZfRDlfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMMV9GTiksCisJUElOTVVYX0RBVEEoTENERDhfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMMF9GTiksCisJUElOTVVYX0RBVEEoRFZfRDhfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMMF9GTiksCisKKwkvKiBQVE0gRk4gKi8KKwlQSU5NVVhfREFUQShMQ0REN19NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE03X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EN19NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE03X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RENl9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE02X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9ENl9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE02X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RENV9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE01X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9ENV9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE01X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RENF9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE00X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9ENF9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE00X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REM19NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE0zX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EM19NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE0zX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMl9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE0yX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMl9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE0yX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMV9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE0xX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMV9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE0xX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMF9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE0wX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMF9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE0wX0ZOKSwKKworCS8qIFBUTiBGTiAqLworCVBJTk1VWF9EQVRBKExDREQyM19NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE43X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9QVE5fU0NLX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjdfRk4pLAorCVBJTk1VWF9EQVRBKExDREQyMl9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE42X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9QVE5fUlhEX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjZfRk4pLAorCVBJTk1VWF9EQVRBKExDREQyMV9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE41X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9QVE5fVFhEX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjVfRk4pLAorCVBJTk1VWF9EQVRBKExDREQyMF9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE40X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVE5fU0NLX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjRfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxOV9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE4zX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVE5fUlhEX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjNfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxOF9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE4yX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVE5fVFhEX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjJfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxN19NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE4xX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9WU1lOQ19NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE4xX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMTZfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFROMF9GTiksCisJUElOTVVYX0RBVEEoRFZfSFNZTkNfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFROMF9GTiksCisKKwkvKiBQVFEgRk4gKi8KKwlQSU5NVVhfREFUQShBTjNfTUFSSywgUFRRM19GTiksCisJUElOTVVYX0RBVEEoQU4yX01BUkssIFBUUTJfRk4pLAorCVBJTk1VWF9EQVRBKEFOMV9NQVJLLCBQVFExX0ZOKSwKKwlQSU5NVVhfREFUQShBTjBfTUFSSywgUFRRMF9GTiksCisKKwkvKiBQVFIgRk4gKi8KKwlQSU5NVVhfREFUQShDUzZCX0NFMUJfTUFSSywgUFRSN19GTiksCisJUElOTVVYX0RBVEEoQ1M2QV9DRTJCX01BUkssIFBUUjZfRk4pLAorCVBJTk1VWF9EQVRBKENTNUJfQ0UxQV9NQVJLLCBQVFI1X0ZOKSwKKwlQSU5NVVhfREFUQShDUzVBX0NFMkFfTUFSSywgUFRSNF9GTiksCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssIFBTQTEzX1BTQTEyX0ZOMSwgUFRSM19GTiksCisJUElOTVVYX0RBVEEoTENETENMS19QVFJfTUFSSywgUFNBMTNfUFNBMTJfRk4yLCBQVFIzX0ZOKSwKKwlQSU5NVVhfREFUQShXQUlUX01BUkssIFBUUjJfRk4pLAorCVBJTk1VWF9EQVRBKFdFM19JQ0lPV1JfTUFSSywgUFRSMV9GTiksCisJUElOTVVYX0RBVEEoV0UyX0lDSU9SRF9NQVJLLCBQVFIwX0ZOKSwKKworCS8qIFBUUyBGTiAqLworCVBJTk1VWF9EQVRBKFNDSUYxX1BUU19TQ0tfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFM3X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMENEX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzdfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYxX1BUU19SWERfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFM2X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMFdQX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzZfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYxX1BUU19UWERfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFM1X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQzX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzVfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUU19DVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFM0X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQyX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzRfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUU19SVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFMzX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQxX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUU19TQ0tfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFMyX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQwX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUU19SWERfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFMxX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMENNRF9QVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4yLCBQVFMxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFNfVFhEX01BUkssIFBTQzE1X1BTQzE0X0ZOMSwgUFRTMF9GTiksCisJUElOTVVYX0RBVEEoU0RISTBDTEtfUFRTX01BUkssIFBTQzE1X1BTQzE0X0ZOMiwgUFRTMF9GTiksCisKKwkvKiBQVFQgRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGMF9QVFRfU0NLX01BUkssIFBTQzEzX1BTQzEyX0ZOMSwgUFRUNV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BUVF9UU0NLX01BUkssIFBTQzEzX1BTQzEyX0ZOMiwgUFRUNV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUFRUX1JYRF9NQVJLLCBQU0MxM19QU0MxMl9GTjEsIFBUVDRfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFRfUlhEX01BUkssIFBTQzEzX1BTQzEyX0ZOMiwgUFRUNF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUFRUX1RYRF9NQVJLLCBQU0MxM19QU0MxMl9GTjEsIFBUVDNfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFRfVFhEX01BUkssIFBTQzEzX1BTQzEyX0ZOMiwgUFRUM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjJfUFRUX1NDS19NQVJLLCBQU0MxMV9QU0MxMF9GTjEsIFBUVDJfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFRfVFNZTkNfTUFSSywgUFNDMTFfUFNDMTBfRk4yLCBQVFQyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9QVFRfUlhEX01BUkssIFBTQzExX1BTQzEwX0ZOMSwgUFRUMV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BUVF9TUzFfTUFSSywgUFNDMTFfUFNDMTBfRk4yLCBQVFQxX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRUX1JTQ0tfTUFSSywgUFNDMTFfUFNDMTBfRk4zLCBQVFQxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9QVFRfVFhEX01BUkssIFBTQzExX1BTQzEwX0ZOMSwgUFRUMF9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BUVF9TUzJfTUFSSywgUFNDMTFfUFNDMTBfRk4yLCBQVFQwX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRUX1JTWU5DX01BUkssIFBTQzExX1BTQzEwX0ZOMywgUFRUMF9GTiksCisKKwkvKiBQVFUgRk4gKi8KKwlQSU5NVVhfREFUQShGQ0RFX01BUkssIFBTQzlfUFNDOF9GTjEsIFBUVTVfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1BUVV9TQ0tfTUFSSywgUFNDOV9QU0M4X0ZOMiwgUFRVNV9GTiksCisJUElOTVVYX0RBVEEoRlNDX01BUkssIFBTQzlfUFNDOF9GTjEsIFBUVTRfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1BUVV9SWERfTUFSSywgUFNDOV9QU0M4X0ZOMiwgUFRVNF9GTiksCisJUElOTVVYX0RBVEEoRldFX01BUkssIFBTQzlfUFNDOF9GTjEsIFBUVTNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1BUVV9UWERfTUFSSywgUFNDOV9QU0M4X0ZOMiwgUFRVM19GTiksCisJUElOTVVYX0RBVEEoRk9FX01BUkssIFBTQzdfUFNDNl9GTjEsIFBUVTJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYyX1BUVV9TQ0tfTUFSSywgUFNDN19QU0M2X0ZOMiwgUFRVMl9GTiksCisJUElOTVVYX0RBVEEoVklPX1ZEMl9NQVJLLCBQU0M3X1BTQzZfRk4zLCBQVFUyX0ZOKSwKKwlQSU5NVVhfREFUQShGUkJfTUFSSywgUFNDN19QU0M2X0ZOMSwgUFRVMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjJfUFRVX1JYRF9NQVJLLCBQU0M3X1BTQzZfRk4yLCBQVFUxX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fQ0xLMl9NQVJLLCBQU0M3X1BTQzZfRk4zLCBQVFUxX0ZOKSwKKwlQSU5NVVhfREFUQShGQ0VfTUFSSywgUFNDN19QU0M2X0ZOMSwgUFRVMF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjJfUFRVX1RYRF9NQVJLLCBQU0M3X1BTQzZfRk4yLCBQVFUwX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fSEQyX01BUkssIFBTQzdfUFNDNl9GTjMsIFBUVTBfRk4pLAorCisJLyogUFRWIEZOICovCisJUElOTVVYX0RBVEEoTkFGN19NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFY3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9QVFZfU0NLX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjdfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTVfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWN19GTiksCisJUElOTVVYX0RBVEEoTkFGNl9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFY2X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9QVFZfUlhEX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjZfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTRfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWNl9GTiksCisJUElOTVVYX0RBVEEoTkFGNV9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFY1X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9QVFZfVFhEX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjVfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTNfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWNV9GTiksCisJUElOTVVYX0RBVEEoTkFGNF9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFY0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFZfQ1RTX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjRfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTJfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWNF9GTiksCisJUElOTVVYX0RBVEEoTkFGM19NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFYzX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFZfUlRTX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjNfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTFfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWM19GTiksCisJUElOTVVYX0RBVEEoTkFGMl9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFYyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFZfU0NLX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjJfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTBfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWMl9GTiksCisJUElOTVVYX0RBVEEoTkFGMV9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFYxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFZfUlhEX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjFfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EOV9NQVJLLCBQU0M3X1BTQzZfRk4zLCBQVFYxX0ZOKSwKKwlQSU5NVVhfREFUQShOQUYwX01BUkssIFBTQzdfUFNDNl9GTjEsIFBUVjBfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUVl9UWERfTUFSSywgUFNDN19QU0M2X0ZOMiwgUFRWMF9GTiksCisJUElOTVVYX0RBVEEoVklPX0Q4X01BUkssIFBTQzdfUFNDNl9GTjMsIFBUVjBfRk4pLAorCisJLyogUFRXIEZOICovCisJUElOTVVYX0RBVEEoSVJRN19NQVJLLCBQVFc3X0ZOKSwKKwlQSU5NVVhfREFUQShJUlE2X01BUkssIFBUVzZfRk4pLAorCVBJTk1VWF9EQVRBKElSUTVfTUFSSywgUFRXNV9GTiksCisJUElOTVVYX0RBVEEoSVJRNF9NQVJLLCBQU0QxNV9QU0QxNF9GTjEsIFBUVzRfRk4pLAorCVBJTk1VWF9EQVRBKExDRExDTEtfUFRXX01BUkssIFBTRDE1X1BTRDE0X0ZOMiwgUFRXNF9GTiksCisJUElOTVVYX0RBVEEoSVJRM19NQVJLLCBQU0QxM19QU0QxMl9GTjEsIFBUVzNfRk4pLAorCVBJTk1VWF9EQVRBKEFEVFJHX01BUkssIFBTRDEzX1BTRDEyX0ZOMiwgUFRXM19GTiksCisJUElOTVVYX0RBVEEoSVJRMl9NQVJLLCBQU0QxMV9QU0QxMF9GTjEsIFBUVzJfRk4pLAorCVBJTk1VWF9EQVRBKEJTX01BUkssIFBTRDExX1BTRDEwX0ZOMiwgUFRXMl9GTiksCisJUElOTVVYX0RBVEEoVklPX0NLT19NQVJLLCBQU0QxMV9QU0QxMF9GTjMsIFBUVzJfRk4pLAorCVBJTk1VWF9EQVRBKElSUTFfTUFSSywgUFNEOV9QU0Q4X0ZOMSwgUFRXMV9GTiksCisJUElOTVVYX0RBVEEoU0lVQUlTUERfTUFSSywgUFNEOV9QU0Q4X0ZOMiwgUFRXMV9GTiksCisJUElOTVVYX0RBVEEoSVJRMF9NQVJLLCBQU0Q3X1BTRDZfRk4xLCBQVFcwX0ZOKSwKKwlQSU5NVVhfREFUQShTSVVBT1NQRF9NQVJLLCBQU0Q3X1BTRDZfRk4yLCBQVFcwX0ZOKSwKKworCS8qIFBUWCBGTiAqLworCVBJTk1VWF9EQVRBKERBQ0sxX01BUkssIFBUWDdfRk4pLAorCVBJTk1VWF9EQVRBKERSRVExX01BUkssIFBTRDNfUFNEMl9GTjEsIFBUWDZfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFhfTUNLX01BUkssIFBTRDNfUFNEMl9GTjIsIFBUWDZfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0sxX01BUkssIFBUWDVfRk4pLAorCVBJTk1VWF9EQVRBKElSREFfT1VUX01BUkssIFBTRDVfUFNENF9GTjIsIFBUWDVfRk4pLAorCVBJTk1VWF9EQVRBKERSRVExX01BUkssIFBUWDRfRk4pLAorCVBJTk1VWF9EQVRBKElSREFfSU5fTUFSSywgUFNENV9QU0Q0X0ZOMiwgUFRYNF9GTiksCisJUElOTVVYX0RBVEEoVFMwX1NEQVRfTUFSSywgUFRYM19GTiksCisJUElOTVVYX0RBVEEoVFMwX1NDS19NQVJLLCBQVFgyX0ZOKSwKKwlQSU5NVVhfREFUQShUUzBfU0RFTl9NQVJLLCBQVFgxX0ZOKSwKKwlQSU5NVVhfREFUQShUUzBfU1BTWU5DX01BUkssIFBUWDBfRk4pLAorCisJLyogUFRZIEZOICovCisJUElOTVVYX0RBVEEoVklPX0Q3X01BUkssIFBUWTdfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19ENl9NQVJLLCBQVFk2X0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDVfTUFSSywgUFRZNV9GTiksCisJUElOTVVYX0RBVEEoVklPX0Q0X01BUkssIFBUWTRfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EM19NQVJLLCBQVFkzX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDJfTUFSSywgUFRZMl9GTiksCisJUElOTVVYX0RBVEEoVklPX0QxX01BUkssIFBUWTFfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMF9NQVJLLCBQVFkwX0ZOKSwKKworCS8qIFBUWiBGTiAqLworCVBJTk1VWF9EQVRBKFNJVUJPQlRfTUFSSywgUFRaN19GTiksCisJUElOTVVYX0RBVEEoU0lVQk9MUl9NQVJLLCBQVFo2X0ZOKSwKKwlQSU5NVVhfREFUQShTSVVCT1NMRF9NQVJLLCBQVFo1X0ZOKSwKKwlQSU5NVVhfREFUQShTSVVCTUNLX01BUkssIFBUWjRfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19GTERfTUFSSywgUFNEMV9QU0QwX0ZOMSwgUFRaM19GTiksCisJUElOTVVYX0RBVEEoU0lVQkZDS19NQVJLLCBQU0QxX1BTRDBfRk4yLCBQVFozX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fSEQxX01BUkssIFBTRDFfUFNEMF9GTjEsIFBUWjJfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUJJTFJfTUFSSywgUFNEMV9QU0QwX0ZOMiwgUFRaMl9GTiksCisJUElOTVVYX0RBVEEoVklPX1ZEMV9NQVJLLCBQU0QxX1BTRDBfRk4xLCBQVFoxX0ZOKSwKKwlQSU5NVVhfREFUQShTSVVCSUJUX01BUkssIFBTRDFfUFNEMF9GTjIsIFBUWjFfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19DTEsxX01BUkssIFBTRDFfUFNEMF9GTjEsIFBUWjBfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUJJU0xEX01BUkssIFBTRDFfUFNEMF9GTjIsIFBUWjBfRk4pLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKwkvKiBQVEEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUQTcsIFBUQTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEE2LCBQVEE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBNSwgUFRBNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTQsIFBUQTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEzLCBQVEEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMiwgUFRBMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTEsIFBUQTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEwLCBQVEEwX0RBVEEpLAorCisJLyogUFRCICovCisJUElOTVVYX0dQSU8oR1BJT19QVEI3LCBQVEI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCNiwgUFRCNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjUsIFBUQjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEI0LCBQVEI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMywgUFRCM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjIsIFBUQjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEIxLCBQVEIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMCwgUFRCMF9EQVRBKSwKKworCS8qIFBUQyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRDNywgUFRDN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzYsIFBUQzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEM1LCBQVEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDNCwgUFRDNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzMsIFBUQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEMyLCBQVEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDMSwgUFRDMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzAsIFBUQzBfREFUQSksCisKKwkvKiBQVEQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURDcsIFBURDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQ2LCBQVEQ2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRENSwgUFRENV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDQsIFBURDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQzLCBQVEQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFREMiwgUFREMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDEsIFBURDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQwLCBQVEQwX0RBVEEpLAorCisJLyogUFRFICovCisJUElOTVVYX0dQSU8oR1BJT19QVEU1LCBQVEU1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFNCwgUFRFNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTMsIFBURTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUyLCBQVEUyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFMSwgUFRFMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTAsIFBURTBfREFUQSksCisKKwkvKiBQVEYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURjcsIFBURjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEY2LCBQVEY2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGNSwgUFRGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjQsIFBURjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYzLCBQVEYzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMiwgUFRGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjEsIFBURjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYwLCBQVEYwX0RBVEEpLAorCisJLyogUFRHICovCisJUElOTVVYX0dQSU8oR1BJT19QVEc1LCBQVEc1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHNCwgUFRHNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzMsIFBURzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEcyLCBQVEcyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHMSwgUFRHMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzAsIFBURzBfREFUQSksCisKKwkvKiBQVEggKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUSDcsIFBUSDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEg2LCBQVEg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRINSwgUFRINV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDQsIFBUSDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgzLCBQVEgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMiwgUFRIMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDEsIFBUSDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgwLCBQVEgwX0RBVEEpLAorCisJLyogUFRKICovCisJUElOTVVYX0dQSU8oR1BJT19QVEo3LCBQVEo3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKNSwgUFRKNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjMsIFBUSjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEoyLCBQVEoyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKMSwgUFRKMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjAsIFBUSjBfREFUQSksCisKKwkvKiBQVEsgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUSzcsIFBUSzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEs2LCBQVEs2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLNSwgUFRLNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzQsIFBUSzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEszLCBQVEszX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMiwgUFRLMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzEsIFBUSzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEswLCBQVEswX0RBVEEpLAorCisJLyogUFRMICovCisJUElOTVVYX0dQSU8oR1BJT19QVEw3LCBQVEw3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMNiwgUFRMNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDUsIFBUTDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEw0LCBQVEw0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMywgUFRMM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDIsIFBUTDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEwxLCBQVEwxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMCwgUFRMMF9EQVRBKSwKKworCS8qIFBUTSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRNNywgUFRNN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTYsIFBUTTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE01LCBQVE01X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNNCwgUFRNNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTMsIFBUTTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0yLCBQVE0yX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNMSwgUFRNMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTAsIFBUTTBfREFUQSksCisKKwkvKiBQVE4gKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUTjcsIFBUTjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE42LCBQVE42X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRONSwgUFRONV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjQsIFBUTjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE4zLCBQVE4zX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFROMiwgUFROMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjEsIFBUTjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE4wLCBQVE4wX0RBVEEpLAorCisJLyogUFRRICovCisJUElOTVVYX0dQSU8oR1BJT19QVFEzLCBQVFEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRRMiwgUFRRMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUTEsIFBUUTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFEwLCBQVFEwX0RBVEEpLAorCisJLyogUFRSICovCisJUElOTVVYX0dQSU8oR1BJT19QVFI3LCBQVFI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSNiwgUFRSNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjUsIFBUUjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFI0LCBQVFI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMywgUFRSM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjIsIFBUUjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFIxLCBQVFIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMCwgUFRSMF9EQVRBKSwKKworCS8qIFBUUyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRTNywgUFRTN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzYsIFBUUzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFM1LCBQVFM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTNCwgUFRTNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzMsIFBUUzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMyLCBQVFMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTMSwgUFRTMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzAsIFBUUzBfREFUQSksCisKKwkvKiBQVFQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUVDUsIFBUVDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQ0LCBQVFQ0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMywgUFRUM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDIsIFBUVDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQxLCBQVFQxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMCwgUFRUMF9EQVRBKSwKKworCS8qIFBUVSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRVNSwgUFRVNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTQsIFBUVTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUzLCBQVFUzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMiwgUFRVMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTEsIFBUVTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUwLCBQVFUwX0RBVEEpLAorCisJLyogUFRWICovCisJUElOTVVYX0dQSU8oR1BJT19QVFY3LCBQVFY3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWNiwgUFRWNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjUsIFBUVjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFY0LCBQVFY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMywgUFRWM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjIsIFBUVjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYxLCBQVFYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMCwgUFRWMF9EQVRBKSwKKworCS8qIFBUVyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRXNywgUFRXN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzYsIFBUVzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFc1LCBQVFc1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXNCwgUFRXNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzMsIFBUVzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFcyLCBQVFcyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXMSwgUFRXMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzAsIFBUVzBfREFUQSksCisKKwkvKiBQVFggKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUWDcsIFBUWDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFg2LCBQVFg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYNSwgUFRYNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDQsIFBUWDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgzLCBQVFgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYMiwgUFRYMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDEsIFBUWDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgwLCBQVFgwX0RBVEEpLAorCisJLyogUFRZICovCisJUElOTVVYX0dQSU8oR1BJT19QVFk3LCBQVFk3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZNiwgUFRZNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTUsIFBUWTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFk0LCBQVFk0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZMywgUFRZM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTIsIFBUWTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFkxLCBQVFkxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZMCwgUFRZMF9EQVRBKSwKKworCS8qIFBUWiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRaNywgUFRaN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjYsIFBUWjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFo1LCBQVFo1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRaNCwgUFRaNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjMsIFBUWjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFoyLCBQVFoyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRaMSwgUFRaMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjAsIFBUWjBfREFUQSksCisKKwkvKiBTQ0lGMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUFRUX1RYRCwgU0NJRjBfUFRUX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1BUVF9SWEQsIFNDSUYwX1BUVF9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9QVFRfU0NLLCBTQ0lGMF9QVFRfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUFRVX1RYRCwgU0NJRjBfUFRVX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1BUVV9SWEQsIFNDSUYwX1BUVV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9QVFVfU0NLLCBTQ0lGMF9QVFVfU0NLX01BUkspLAorCisJLyogU0NJRjEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1BUU19UWEQsIFNDSUYxX1BUU19UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9QVFNfUlhELCBTQ0lGMV9QVFNfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUFRTX1NDSywgU0NJRjFfUFRTX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1BUVl9UWEQsIFNDSUYxX1BUVl9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9QVFZfUlhELCBTQ0lGMV9QVFZfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUFRWX1NDSywgU0NJRjFfUFRWX1NDS19NQVJLKSwKKworCS8qIFNDSUYyICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9QVFRfVFhELCBTQ0lGMl9QVFRfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfUFRUX1JYRCwgU0NJRjJfUFRUX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1BUVF9TQ0ssIFNDSUYyX1BUVF9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9QVFVfVFhELCBTQ0lGMl9QVFVfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfUFRVX1JYRCwgU0NJRjJfUFRVX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1BUVV9TQ0ssIFNDSUYyX1BUVV9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGMyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRTX1RYRCwgU0NJRjNfUFRTX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1BUU19SWEQsIFNDSUYzX1BUU19SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19QVFNfU0NLLCBTQ0lGM19QVFNfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRTX1JUUywgU0NJRjNfUFRTX1JUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1BUU19DVFMsIFNDSUYzX1BUU19DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19QVFZfVFhELCBTQ0lGM19QVFZfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRWX1JYRCwgU0NJRjNfUFRWX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1BUVl9TQ0ssIFNDSUYzX1BUVl9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19QVFZfUlRTLCBTQ0lGM19QVFZfUlRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRWX0NUUywgU0NJRjNfUFRWX0NUU19NQVJLKSwKKworCS8qIFNDSUY0ICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9QVEVfVFhELCBTQ0lGNF9QVEVfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfUFRFX1JYRCwgU0NJRjRfUFRFX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1BURV9TQ0ssIFNDSUY0X1BURV9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9QVE5fVFhELCBTQ0lGNF9QVE5fVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfUFROX1JYRCwgU0NJRjRfUFROX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1BUTl9TQ0ssIFNDSUY0X1BUTl9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGNSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfUFRFX1RYRCwgU0NJRjVfUFRFX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY1X1BURV9SWEQsIFNDSUY1X1BURV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9QVEVfU0NLLCBTQ0lGNV9QVEVfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfUFROX1RYRCwgU0NJRjVfUFROX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY1X1BUTl9SWEQsIFNDSUY1X1BUTl9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9QVE5fU0NLLCBTQ0lGNV9QVE5fU0NLX01BUkspLAorCisJLyogQ0VVICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDE1LCBWSU9fRDE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxNCwgVklPX0QxNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTMsIFZJT19EMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDEyLCBWSU9fRDEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxMSwgVklPX0QxMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTAsIFZJT19EMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDksIFZJT19EOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EOCwgVklPX0Q4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q3LCBWSU9fRDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDYsIFZJT19ENl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19ENSwgVklPX0Q1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q0LCBWSU9fRDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDMsIFZJT19EM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMiwgVklPX0QyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxLCBWSU9fRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDAsIFZJT19EMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19DTEsxLCBWSU9fQ0xLMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19WRDEsIFZJT19WRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fSEQxLCBWSU9fSEQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0ZMRCwgVklPX0ZMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19DS08sIFZJT19DS09fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fVkQyLCBWSU9fVkQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0hEMiwgVklPX0hEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19DTEsyLCBWSU9fQ0xLMl9NQVJLKSwKKworCS8qIExDREMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyMywgTENERDIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDIyLCBMQ0REMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMjEsIExDREQyMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyMCwgTENERDIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE5LCBMQ0REMTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTgsIExDREQxOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxNywgTENERDE3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE2LCBMQ0REMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTUsIExDREQxNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxNCwgTENERDE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDEzLCBMQ0REMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTIsIExDREQxMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxMSwgTENERDExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDEwLCBMQ0REMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REOSwgTENERDlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REOCwgTENERDhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENywgTENERDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENiwgTENERDZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENSwgTENERDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENCwgTENERDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMywgTENERDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMiwgTENERDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMSwgTENERDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMCwgTENERDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RMQ0xLX1BUUiwgTENETENMS19QVFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RMQ0xLX1BUVywgTENETENMS19QVFdfTUFSSyksCisJLyogTWFpbiBMQ0QgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRERPTiwgTENERE9OX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVkNQV0MsIExDRFZDUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVkVQV0MsIExDRFZFUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVlNZTiwgTENEVlNZTl9NQVJLKSwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REQ0ssIExDRERDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREhTWU4sIExDREhTWU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RESVNQLCBMQ0RESVNQX01BUkspLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFJTLCBMQ0RSU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRENTLCBMQ0RDU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFdSLCBMQ0RXUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFJELCBMQ0RSRF9NQVJLKSwKKworCS8qIElSUSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMCwgSVJRMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTEsIElSUTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEyLCBJUlEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMywgSVJRM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTQsIElSUTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE1LCBJUlE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNiwgSVJRNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTcsIElSUTdfTUFSSyksCisKKwkvKiBBVUQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRENLLCBBVURDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRFNZTkMsIEFVRFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEEzLCBBVURBVEEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMiwgQVVEQVRBMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTEsIEFVREFUQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEEwLCBBVURBVEEwX01BUkspLAorCisJLyogU0RISTAgKFBURCkgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwQ0RfUFRELCBTREhJMENEX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwV1BfUFRELCBTREhJMFdQX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDNfUFRELCBTREhJMEQzX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDJfUFRELCBTREhJMEQyX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDFfUFRELCBTREhJMEQxX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDBfUFRELCBTREhJMEQwX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwQ01EX1BURCwgU0RISTBDTURfUFREX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBDTEtfUFRELCBTREhJMENMS19QVERfTUFSSyksCisKKwkvKiBTREhJMCAoUFRTKSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBDRF9QVFMsIFNESEkwQ0RfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBXUF9QVFMsIFNESEkwV1BfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBEM19QVFMsIFNESEkwRDNfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBEMl9QVFMsIFNESEkwRDJfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBEMV9QVFMsIFNESEkwRDFfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBEMF9QVFMsIFNESEkwRDBfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBDTURfUFRTLCBTREhJMENNRF9QVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMENMS19QVFMsIFNESEkwQ0xLX1BUU19NQVJLKSwKKworCS8qIFNESEkxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUNELCBTREhJMUNEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTFXUCwgU0RISTFXUF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkxRDMsIFNESEkxRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUQyLCBTREhJMUQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTFEMSwgU0RISTFEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkxRDAsIFNESEkxRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUNNRCwgU0RISTFDTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUNMSywgU0RISTFDTEtfTUFSSyksCisKKwkvKiBTSVVBICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBRkNLLCBTSVVBRkNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQUlMUiwgU0lVQUlMUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFJQlQsIFNJVUFJQlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBSVNMRCwgU0lVQUlTTERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBT0xSLCBTSVVBT0xSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQU9CVCwgU0lVQU9CVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFPU0xELCBTSVVBT1NMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFNQ0ssIFNJVUFNQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBSVNQRCwgU0lVQUlTUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVPU1BELCBTSVVBT1NQRF9NQVJLKSwKKworCS8qIFNJVUIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJGQ0ssIFNJVUJGQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCSUxSLCBTSVVCSUxSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQklCVCwgU0lVQklCVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJJU0xELCBTSVVCSVNMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJPTFIsIFNJVUJPTFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCT0JULCBTSVVCT0JUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQk9TTEQsIFNJVUJPU0xEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQk1DSywgU0lVQk1DS19NQVJLKSwKKworCS8qIElSREEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSREFfSU4sIElSREFfSU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkRBX09VVCwgSVJEQV9PVVRfTUFSSyksCisKKwkvKiBWT1UgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0NMS0ksIERWX0NMS0lfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9DTEssIERWX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0hTWU5DLCBEVl9IU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX1ZTWU5DLCBEVl9WU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxNSwgRFZfRDE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDE0LCBEVl9EMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTMsIERWX0QxM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxMiwgRFZfRDEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDExLCBEVl9EMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTAsIERWX0QxMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q5LCBEVl9EOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q4LCBEVl9EOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q3LCBEVl9EN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q2LCBEVl9ENl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q1LCBEVl9ENV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q0LCBEVl9ENF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QzLCBEVl9EM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QyLCBEVl9EMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxLCBEVl9EMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QwLCBEVl9EMF9NQVJLKSwKKworCS8qIEtFWVNDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlJTjAsIEtFWUlOMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlOMSwgS0VZSU4xX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZSU4yLCBLRVlJTjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlJTjMsIEtFWUlOM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlONCwgS0VZSU40X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUMCwgS0VZT1VUMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDEsIEtFWU9VVDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlPVVQyLCBLRVlPVVQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUMywgS0VZT1VUM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDRfSU42LCBLRVlPVVQ0X0lONl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDVfSU41LCBLRVlPVVQ1X0lONV9NQVJLKSwKKworCS8qIE1TSU9GMCAoUFRGKSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9UWEQsIE1TSU9GMF9QVEZfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9SWEQsIE1TSU9GMF9QVEZfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9NQ0ssIE1TSU9GMF9QVEZfTUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9UU1lOQywgTVNJT0YwX1BURl9UU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVEZfVFNDSywgTVNJT0YwX1BURl9UU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9SU1lOQywgTVNJT0YwX1BURl9SU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVEZfUlNDSywgTVNJT0YwX1BURl9SU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9TUzEsIE1TSU9GMF9QVEZfU1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9TUzIsIE1TSU9GMF9QVEZfU1MyX01BUkspLAorCisJLyogTVNJT0YwIChQVFQrUFRYKSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9UWEQsIE1TSU9GMF9QVFRfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9SWEQsIE1TSU9GMF9QVFRfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUWF9NQ0ssIE1TSU9GMF9QVFhfTUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9UU1lOQywgTVNJT0YwX1BUVF9UU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVFRfVFNDSywgTVNJT0YwX1BUVF9UU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9SU1lOQywgTVNJT0YwX1BUVF9SU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVFRfUlNDSywgTVNJT0YwX1BUVF9SU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9TUzEsIE1TSU9GMF9QVFRfU1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9TUzIsIE1TSU9GMF9QVFRfU1MyX01BUkspLAorCisJLyogTVNJT0YxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjFfVFhELCBNU0lPRjFfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YxX1JYRCwgTVNJT0YxX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9NQ0ssIE1TSU9GMV9NQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjFfVFNZTkMsIE1TSU9GMV9UU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9UU0NLLCBNU0lPRjFfVFNDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9SU1lOQywgTVNJT0YxX1JTWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YxX1JTQ0ssIE1TSU9GMV9SU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YxX1NTMSwgTVNJT0YxX1NTMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9TUzIsIE1TSU9GMV9TUzJfTUFSSyksCisKKwkvKiBUU0lGICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUzBfU0RBVCwgVFMwX1NEQVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUzBfU0NLLCBUUzBfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFMwX1NERU4sIFRTMF9TREVOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFMwX1NQU1lOQywgVFMwX1NQU1lOQ19NQVJLKSwKKworCS8qIEZMQ1RMICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9GQ0UsIEZDRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjcsIE5BRjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY2LCBOQUY2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGNSwgTkFGNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjQsIE5BRjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYzLCBOQUYzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMiwgTkFGMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjEsIE5BRjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYwLCBOQUYwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRkNERSwgRkNERV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZPRSwgRk9FX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNDLCBGU0NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GV0UsIEZXRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZSQiwgRlJCX01BUkspLAorCisJLyogRE1BQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzEsIERBQ0sxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTEsIERSRVExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzAsIERBQ0swX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTAsIERSRVEwX01BUkspLAorCisJLyogQURDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9BTjMsIEFOM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FOMiwgQU4yX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQU4xLCBBTjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BTjAsIEFOMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FEVFJHLCBBRFRSR19NQVJLKSwKKworCS8qIENQRyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU1RBVFVTMCwgU1RBVFVTMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BEU1RBVFVTLCBQRFNUQVRVU19NQVJLKSwKKworCS8qIFRQVSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fVFBVVE8wLCBUUFVUTzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUFVUTzEsIFRQVVRPMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVVRPMiwgVFBVVE8yX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFBVVE8zLCBUUFVUTzNfTUFSSyksCisKKwkvKiBCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QzMSwgRDMxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDMwLCBEMzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjksIEQyOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyOCwgRDI4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI3LCBEMjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjYsIEQyNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNSwgRDI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI0LCBEMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjMsIEQyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyMiwgRDIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIxLCBEMjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjAsIEQyMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxOSwgRDE5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDE4LCBEMThfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTcsIEQxN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxNiwgRDE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU9JUzE2LCBJT0lTMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XQUlULCBXQUlUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQlMsIEJTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI1LCBBMjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjQsIEEyNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMywgQTIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIyLCBBMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzZCX0NFMUIsIENTNkJfQ0UxQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTNkFfQ0UyQiwgQ1M2QV9DRTJCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M1Ql9DRTFBLCBDUzVCX0NFMUFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzVBX0NFMkEsIENTNUFfQ0UyQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1dFM19JQ0lPV1IsIFdFM19JQ0lPV1JfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XRTJfSUNJT1JELCBXRTJfSUNJT1JEX01BUkspLAorCisJLyogQVRBUEkgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQxNSwgSURFRDE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFRDE0LCBJREVEMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEMTMsIElERUQxM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQxMiwgSURFRDEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFRDExLCBJREVEMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEMTAsIElERUQxMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ5LCBJREVEOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ4LCBJREVEOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ3LCBJREVEN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ2LCBJREVENl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ1LCBJREVENV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ0LCBJREVENF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQzLCBJREVEM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQyLCBJREVEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQxLCBJREVEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQwLCBJREVEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RJUkVDVElPTiwgRElSRUNUSU9OX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVhCVUZfRU5CLCBFWEJVRl9FTkJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVSU1QsIElERVJTVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lPREFDSywgSU9EQUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU9EUkVRLCBJT0RSRVFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVJT1JEWSwgSURFSU9SRFlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVJTlQsIElERUlOVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUlPV1IsIElERUlPV1JfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVJT1JELCBJREVJT1JEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFQ1MxLCBJREVDUzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVDUzAsIElERUNTMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUEyLCBJREVBMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUExLCBJREVBMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUEwLCBJREVBMF9NQVJLKSwKKyB9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9jZmdfcmVnIHBpbm11eF9jb25maWdfcmVnc1tdID0geworCXsgUElOTVVYX0NGR19SRUcoIlBBQ1IiLCAweGE0MDUwMTAwLCAxNiwgMikgeworCQlQVEE3X0ZOLCBQVEE3X09VVCwgMCwgUFRBN19JTiwKKwkJUFRBNl9GTiwgUFRBNl9PVVQsIDAsIFBUQTZfSU4sCisJCVBUQTVfRk4sIFBUQTVfT1VULCAwLCBQVEE1X0lOLAorCQlQVEE0X0ZOLCBQVEE0X09VVCwgUFRBNF9JTl9QVSwgUFRBNF9JTiwKKwkJUFRBM19GTiwgUFRBM19PVVQsIFBUQTNfSU5fUFUsIFBUQTNfSU4sCisJCVBUQTJfRk4sIFBUQTJfT1VULCBQVEEyX0lOX1BVLCBQVEEyX0lOLAorCQlQVEExX0ZOLCBQVEExX09VVCwgUFRBMV9JTl9QVSwgUFRBMV9JTiwKKwkJUFRBMF9GTiwgUFRBMF9PVVQsIFBUQTBfSU5fUFUsIFBUQTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJDUiIsIDB4YTQwNTAxMDIsIDE2LCAyKSB7CisJCVBUQjdfRk4sIFBUQjdfT1VULCAwLCBQVEI3X0lOLAorCQlQVEI2X0ZOLCBQVEI2X09VVCwgMCwgUFRCNl9JTiwKKwkJUFRCNV9GTiwgUFRCNV9PVVQsIDAsIFBUQjVfSU4sCisJCVBUQjRfRk4sIFBUQjRfT1VULCAwLCBQVEI0X0lOLAorCQlQVEIzX0ZOLCBQVEIzX09VVCwgMCwgUFRCM19JTiwKKwkJUFRCMl9GTiwgUFRCMl9PVVQsIFBUQjJfSU5fUFUsIFBUQjJfSU4sCisJCVBUQjFfRk4sIFBUQjFfT1VULCBQVEIxX0lOX1BVLCBQVEIxX0lOLAorCQlQVEIwX0ZOLCBQVEIwX09VVCwgMCwgUFRCMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSIiwgMHhhNDA1MDEwNCwgMTYsIDIpIHsKKwkJUFRDN19GTiwgUFRDN19PVVQsIDAsIFBUQzdfSU4sCisJCVBUQzZfRk4sIFBUQzZfT1VULCAwLCBQVEM2X0lOLAorCQlQVEM1X0ZOLCBQVEM1X09VVCwgMCwgUFRDNV9JTiwKKwkJUFRDNF9GTiwgUFRDNF9PVVQsIDAsIFBUQzRfSU4sCisJCVBUQzNfRk4sIFBUQzNfT1VULCAwLCBQVEMzX0lOLAorCQlQVEMyX0ZOLCBQVEMyX09VVCwgMCwgUFRDMl9JTiwKKwkJUFRDMV9GTiwgUFRDMV9PVVQsIDAsIFBUQzFfSU4sCisJCVBUQzBfRk4sIFBUQzBfT1VULCAwLCBQVEMwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBEQ1IiLCAweGE0MDUwMTA2LCAxNiwgMikgeworCQlQVEQ3X0ZOLCBQVEQ3X09VVCwgMCwgUFREN19JTiwKKwkJUFRENl9GTiwgUFRENl9PVVQsIDAsIFBURDZfSU4sCisJCVBURDVfRk4sIFBURDVfT1VULCAwLCBQVEQ1X0lOLAorCQlQVEQ0X0ZOLCBQVEQ0X09VVCwgMCwgUFRENF9JTiwKKwkJUFREM19GTiwgUFREM19PVVQsIDAsIFBURDNfSU4sCisJCVBURDJfRk4sIFBURDJfT1VULCAwLCBQVEQyX0lOLAorCQlQVEQxX0ZOLCBQVEQxX09VVCwgMCwgUFREMV9JTiwKKwkJUFREMF9GTiwgUFREMF9PVVQsIDAsIFBURDBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEVDUiIsIDB4YTQwNTAxMDgsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBURTVfRk4sIFBURTVfT1VULCAwLCBQVEU1X0lOLAorCQlQVEU0X0ZOLCBQVEU0X09VVCwgMCwgUFRFNF9JTiwKKwkJUFRFM19GTiwgUFRFM19PVVQsIDAsIFBURTNfSU4sCisJCVBURTJfRk4sIFBURTJfT1VULCAwLCBQVEUyX0lOLAorCQlQVEUxX0ZOLCBQVEUxX09VVCwgMCwgUFRFMV9JTiwKKwkJUFRFMF9GTiwgUFRFMF9PVVQsIDAsIFBURTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUiIsIDB4YTQwNTAxMGEsIDE2LCAyKSB7CisJCVBURjdfRk4sIFBURjdfT1VULCAwLCBQVEY3X0lOLAorCQlQVEY2X0ZOLCBQVEY2X09VVCwgMCwgUFRGNl9JTiwKKwkJUFRGNV9GTiwgUFRGNV9PVVQsIDAsIFBURjVfSU4sCisJCVBURjRfRk4sIFBURjRfT1VULCAwLCBQVEY0X0lOLAorCQlQVEYzX0ZOLCBQVEYzX09VVCwgMCwgUFRGM19JTiwKKwkJUFRGMl9GTiwgUFRGMl9PVVQsIDAsIFBURjJfSU4sCisJCVBURjFfRk4sIFBURjFfT1VULCAwLCBQVEYxX0lOLAorCQlQVEYwX0ZOLCBQVEYwX09VVCwgMCwgUFRGMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQR0NSIiwgMHhhNDA1MDEwYywgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRHNV9GTiwgUFRHNV9PVVQsIDAsIDAsCisJCVBURzRfRk4sIFBURzRfT1VULCAwLCAwLAorCQlQVEczX0ZOLCBQVEczX09VVCwgMCwgMCwKKwkJUFRHMl9GTiwgUFRHMl9PVVQsIDAsIDAsCisJCVBURzFfRk4sIFBURzFfT1VULCAwLCAwLAorCQlQVEcwX0ZOLCBQVEcwX09VVCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQSENSIiwgMHhhNDA1MDEwZSwgMTYsIDIpIHsKKwkJUFRIN19GTiwgUFRIN19PVVQsIDAsIFBUSDdfSU4sCisJCVBUSDZfRk4sIFBUSDZfT1VULCAwLCBQVEg2X0lOLAorCQlQVEg1X0ZOLCBQVEg1X09VVCwgMCwgUFRINV9JTiwKKwkJUFRINF9GTiwgUFRINF9PVVQsIDAsIFBUSDRfSU4sCisJCVBUSDNfRk4sIFBUSDNfT1VULCAwLCBQVEgzX0lOLAorCQlQVEgyX0ZOLCBQVEgyX09VVCwgMCwgUFRIMl9JTiwKKwkJUFRIMV9GTiwgUFRIMV9PVVQsIDAsIFBUSDFfSU4sCisJCVBUSDBfRk4sIFBUSDBfT1VULCAwLCBQVEgwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBKQ1IiLCAweGE0MDUwMTEwLCAxNiwgMikgeworCQlQVEo3X0ZOLCBQVEo3X09VVCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRKNV9GTiwgUFRKNV9PVVQsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUSjNfRk4sIFBUSjNfT1VULCAwLCBQVEozX0lOLAorCQlQVEoyX0ZOLCBQVEoyX09VVCwgMCwgUFRKMl9JTiwKKwkJUFRKMV9GTiwgUFRKMV9PVVQsIDAsIFBUSjFfSU4sCisJCVBUSjBfRk4sIFBUSjBfT1VULCAwLCBQVEowX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBLQ1IiLCAweGE0MDUwMTEyLCAxNiwgMikgeworCQlQVEs3X0ZOLCBQVEs3X09VVCwgMCwgUFRLN19JTiwKKwkJUFRLNl9GTiwgUFRLNl9PVVQsIDAsIFBUSzZfSU4sCisJCVBUSzVfRk4sIFBUSzVfT1VULCAwLCBQVEs1X0lOLAorCQlQVEs0X0ZOLCBQVEs0X09VVCwgMCwgUFRLNF9JTiwKKwkJUFRLM19GTiwgUFRLM19PVVQsIDAsIFBUSzNfSU4sCisJCVBUSzJfRk4sIFBUSzJfT1VULCAwLCBQVEsyX0lOLAorCQlQVEsxX0ZOLCBQVEsxX09VVCwgMCwgUFRLMV9JTiwKKwkJUFRLMF9GTiwgUFRLMF9PVVQsIDAsIFBUSzBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUExDUiIsIDB4YTQwNTAxMTQsIDE2LCAyKSB7CisJCVBUTDdfRk4sIFBUTDdfT1VULCAwLCBQVEw3X0lOLAorCQlQVEw2X0ZOLCBQVEw2X09VVCwgMCwgUFRMNl9JTiwKKwkJUFRMNV9GTiwgUFRMNV9PVVQsIDAsIFBUTDVfSU4sCisJCVBUTDRfRk4sIFBUTDRfT1VULCAwLCBQVEw0X0lOLAorCQlQVEwzX0ZOLCBQVEwzX09VVCwgMCwgUFRMM19JTiwKKwkJUFRMMl9GTiwgUFRMMl9PVVQsIDAsIFBUTDJfSU4sCisJCVBUTDFfRk4sIFBUTDFfT1VULCAwLCBQVEwxX0lOLAorCQlQVEwwX0ZOLCBQVEwwX09VVCwgMCwgUFRMMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQTUNSIiwgMHhhNDA1MDExNiwgMTYsIDIpIHsKKwkJUFRNN19GTiwgUFRNN19PVVQsIDAsIFBUTTdfSU4sCisJCVBUTTZfRk4sIFBUTTZfT1VULCAwLCBQVE02X0lOLAorCQlQVE01X0ZOLCBQVE01X09VVCwgMCwgUFRNNV9JTiwKKwkJUFRNNF9GTiwgUFRNNF9PVVQsIDAsIFBUTTRfSU4sCisJCVBUTTNfRk4sIFBUTTNfT1VULCAwLCBQVE0zX0lOLAorCQlQVE0yX0ZOLCBQVE0yX09VVCwgMCwgUFRNMl9JTiwKKwkJUFRNMV9GTiwgUFRNMV9PVVQsIDAsIFBUTTFfSU4sCisJCVBUTTBfRk4sIFBUTTBfT1VULCAwLCBQVE0wX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBOQ1IiLCAweGE0MDUwMTE4LCAxNiwgMikgeworCQlQVE43X0ZOLCBQVE43X09VVCwgMCwgUFRON19JTiwKKwkJUFRONl9GTiwgUFRONl9PVVQsIDAsIFBUTjZfSU4sCisJCVBUTjVfRk4sIFBUTjVfT1VULCAwLCBQVE41X0lOLAorCQlQVE40X0ZOLCBQVE40X09VVCwgMCwgUFRONF9JTiwKKwkJUFROM19GTiwgUFROM19PVVQsIDAsIFBUTjNfSU4sCisJCVBUTjJfRk4sIFBUTjJfT1VULCAwLCBQVE4yX0lOLAorCQlQVE4xX0ZOLCBQVE4xX09VVCwgMCwgUFROMV9JTiwKKwkJUFROMF9GTiwgUFROMF9PVVQsIDAsIFBUTjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFFDUiIsIDB4YTQwNTAxMWEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUUTNfRk4sIDAsIDAsIFBUUTNfSU4sCisJCVBUUTJfRk4sIDAsIDAsIFBUUTJfSU4sCisJCVBUUTFfRk4sIDAsIDAsIFBUUTFfSU4sCisJCVBUUTBfRk4sIDAsIDAsIFBUUTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFJDUiIsIDB4YTQwNTAxMWMsIDE2LCAyKSB7CisJCVBUUjdfRk4sIFBUUjdfT1VULCAwLCBQVFI3X0lOLAorCQlQVFI2X0ZOLCBQVFI2X09VVCwgMCwgUFRSNl9JTiwKKwkJUFRSNV9GTiwgUFRSNV9PVVQsIDAsIFBUUjVfSU4sCisJCVBUUjRfRk4sIFBUUjRfT1VULCAwLCBQVFI0X0lOLAorCQlQVFIzX0ZOLCAwLCAwLCBQVFIzX0lOLAorCQlQVFIyX0ZOLCAwLCBQVFIyX0lOX1BVLCBQVFIyX0lOLAorCQlQVFIxX0ZOLCBQVFIxX09VVCwgMCwgUFRSMV9JTiwKKwkJUFRSMF9GTiwgUFRSMF9PVVQsIDAsIFBUUjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNDUiIsIDB4YTQwNTAxMWUsIDE2LCAyKSB7CisJCVBUUzdfRk4sIFBUUzdfT1VULCAwLCBQVFM3X0lOLAorCQlQVFM2X0ZOLCBQVFM2X09VVCwgMCwgUFRTNl9JTiwKKwkJUFRTNV9GTiwgUFRTNV9PVVQsIDAsIFBUUzVfSU4sCisJCVBUUzRfRk4sIFBUUzRfT1VULCAwLCBQVFM0X0lOLAorCQlQVFMzX0ZOLCBQVFMzX09VVCwgMCwgUFRTM19JTiwKKwkJUFRTMl9GTiwgUFRTMl9PVVQsIDAsIFBUUzJfSU4sCisJCVBUUzFfRk4sIFBUUzFfT1VULCAwLCBQVFMxX0lOLAorCQlQVFMwX0ZOLCBQVFMwX09VVCwgMCwgUFRTMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVENSIiwgMHhhNDA1MDE0MCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRUNV9GTiwgUFRUNV9PVVQsIDAsIFBUVDVfSU4sCisJCVBUVDRfRk4sIFBUVDRfT1VULCAwLCBQVFQ0X0lOLAorCQlQVFQzX0ZOLCBQVFQzX09VVCwgMCwgUFRUM19JTiwKKwkJUFRUMl9GTiwgUFRUMl9PVVQsIDAsIFBUVDJfSU4sCisJCVBUVDFfRk4sIFBUVDFfT1VULCAwLCBQVFQxX0lOLAorCQlQVFQwX0ZOLCBQVFQwX09VVCwgMCwgUFRUMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVUNSIiwgMHhhNDA1MDE0MiwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRVNV9GTiwgUFRVNV9PVVQsIDAsIFBUVTVfSU4sCisJCVBUVTRfRk4sIFBUVTRfT1VULCAwLCBQVFU0X0lOLAorCQlQVFUzX0ZOLCBQVFUzX09VVCwgMCwgUFRVM19JTiwKKwkJUFRVMl9GTiwgUFRVMl9PVVQsIDAsIFBUVTJfSU4sCisJCVBUVTFfRk4sIFBUVTFfT1VULCAwLCBQVFUxX0lOLAorCQlQVFUwX0ZOLCBQVFUwX09VVCwgMCwgUFRVMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVkNSIiwgMHhhNDA1MDE0NCwgMTYsIDIpIHsKKwkJUFRWN19GTiwgUFRWN19PVVQsIDAsIFBUVjdfSU4sCisJCVBUVjZfRk4sIFBUVjZfT1VULCAwLCBQVFY2X0lOLAorCQlQVFY1X0ZOLCBQVFY1X09VVCwgMCwgUFRWNV9JTiwKKwkJUFRWNF9GTiwgUFRWNF9PVVQsIDAsIFBUVjRfSU4sCisJCVBUVjNfRk4sIFBUVjNfT1VULCAwLCBQVFYzX0lOLAorCQlQVFYyX0ZOLCBQVFYyX09VVCwgMCwgUFRWMl9JTiwKKwkJUFRWMV9GTiwgUFRWMV9PVVQsIDAsIFBUVjFfSU4sCisJCVBUVjBfRk4sIFBUVjBfT1VULCAwLCBQVFYwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBXQ1IiLCAweGE0MDUwMTQ2LCAxNiwgMikgeworCQlQVFc3X0ZOLCBQVFc3X09VVCwgMCwgUFRXN19JTiwKKwkJUFRXNl9GTiwgUFRXNl9PVVQsIDAsIFBUVzZfSU4sCisJCVBUVzVfRk4sIFBUVzVfT1VULCAwLCBQVFc1X0lOLAorCQlQVFc0X0ZOLCBQVFc0X09VVCwgMCwgUFRXNF9JTiwKKwkJUFRXM19GTiwgUFRXM19PVVQsIDAsIFBUVzNfSU4sCisJCVBUVzJfRk4sIFBUVzJfT1VULCAwLCBQVFcyX0lOLAorCQlQVFcxX0ZOLCBQVFcxX09VVCwgMCwgUFRXMV9JTiwKKwkJUFRXMF9GTiwgUFRXMF9PVVQsIDAsIFBUVzBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFhDUiIsIDB4YTQwNTAxNDgsIDE2LCAyKSB7CisJCVBUWDdfRk4sIFBUWDdfT1VULCAwLCBQVFg3X0lOLAorCQlQVFg2X0ZOLCBQVFg2X09VVCwgMCwgUFRYNl9JTiwKKwkJUFRYNV9GTiwgUFRYNV9PVVQsIDAsIFBUWDVfSU4sCisJCVBUWDRfRk4sIFBUWDRfT1VULCAwLCBQVFg0X0lOLAorCQlQVFgzX0ZOLCBQVFgzX09VVCwgMCwgUFRYM19JTiwKKwkJUFRYMl9GTiwgUFRYMl9PVVQsIDAsIFBUWDJfSU4sCisJCVBUWDFfRk4sIFBUWDFfT1VULCAwLCBQVFgxX0lOLAorCQlQVFgwX0ZOLCBQVFgwX09VVCwgMCwgUFRYMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQWUNSIiwgMHhhNDA1MDE0YSwgMTYsIDIpIHsKKwkJUFRZN19GTiwgUFRZN19PVVQsIDAsIFBUWTdfSU4sCisJCVBUWTZfRk4sIFBUWTZfT1VULCAwLCBQVFk2X0lOLAorCQlQVFk1X0ZOLCBQVFk1X09VVCwgMCwgUFRZNV9JTiwKKwkJUFRZNF9GTiwgUFRZNF9PVVQsIDAsIFBUWTRfSU4sCisJCVBUWTNfRk4sIFBUWTNfT1VULCAwLCBQVFkzX0lOLAorCQlQVFkyX0ZOLCBQVFkyX09VVCwgMCwgUFRZMl9JTiwKKwkJUFRZMV9GTiwgUFRZMV9PVVQsIDAsIFBUWTFfSU4sCisJCVBUWTBfRk4sIFBUWTBfT1VULCAwLCBQVFkwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBaQ1IiLCAweGE0MDUwMTRjLCAxNiwgMikgeworCQlQVFo3X0ZOLCBQVFo3X09VVCwgMCwgUFRaN19JTiwKKwkJUFRaNl9GTiwgUFRaNl9PVVQsIDAsIFBUWjZfSU4sCisJCVBUWjVfRk4sIFBUWjVfT1VULCAwLCBQVFo1X0lOLAorCQlQVFo0X0ZOLCBQVFo0X09VVCwgMCwgUFRaNF9JTiwKKwkJUFRaM19GTiwgUFRaM19PVVQsIDAsIFBUWjNfSU4sCisJCVBUWjJfRk4sIFBUWjJfT1VULCAwLCBQVFoyX0lOLAorCQlQVFoxX0ZOLCBQVFoxX09VVCwgMCwgUFRaMV9JTiwKKwkJUFRaMF9GTiwgUFRaMF9PVVQsIDAsIFBUWjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNFTEEiLCAweGE0MDUwMTRlLCAxNiwgMikgeworCQlQU0ExNV9QU0ExNF9GTjEsIFBTQTE1X1BTQTE0X0ZOMiwgMCwgMCwKKwkJUFNBMTNfUFNBMTJfRk4xLCBQU0ExM19QU0ExMl9GTjIsIDAsIDAsCisJCVBTQTExX1BTQTEwX0ZOMSwgUFNBMTFfUFNBMTBfRk4yLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQU0E1X1BTQTRfRk4xLCBQU0E1X1BTQTRfRk4yLCBQU0E1X1BTQTRfRk4zLCAwLAorCQlQU0EzX1BTQTJfRk4xLCBQU0EzX1BTQTJfRk4yLCAwLCAwLAorCQkwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxCIiwgMHhhNDA1MDE1MCwgMTYsIDIpIHsKKwkJUFNCMTVfUFNCMTRfRk4xLCBQU0IxNV9QU0IxNF9GTjIsIDAsIDAsCisJCVBTQjEzX1BTQjEyX0xDRENfUkdCLCBQU0IxM19QU0IxMl9MQ0RDX1NZUywgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFNCOV9QU0I4X0ZOMSwgUFNCOV9QU0I4X0ZOMiwgUFNCOV9QU0I4X0ZOMywgMCwKKwkJUFNCN19QU0I2X0ZOMSwgUFNCN19QU0I2X0ZOMiwgMCwgMCwKKwkJUFNCNV9QU0I0X0ZOMSwgUFNCNV9QU0I0X0ZOMiwgMCwgMCwKKwkJUFNCM19QU0IyX0ZOMSwgUFNCM19QU0IyX0ZOMiwgMCwgMCwKKwkJMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQU0VMQyIsIDB4YTQwNTAxNTIsIDE2LCAyKSB7CisJCVBTQzE1X1BTQzE0X0ZOMSwgUFNDMTVfUFNDMTRfRk4yLCAwLCAwLAorCQlQU0MxM19QU0MxMl9GTjEsIFBTQzEzX1BTQzEyX0ZOMiwgMCwgMCwKKwkJUFNDMTFfUFNDMTBfRk4xLCBQU0MxMV9QU0MxMF9GTjIsIFBTQzExX1BTQzEwX0ZOMywgMCwKKwkJUFNDOV9QU0M4X0ZOMSwgUFNDOV9QU0M4X0ZOMiwgMCwgMCwKKwkJUFNDN19QU0M2X0ZOMSwgUFNDN19QU0M2X0ZOMiwgUFNDN19QU0M2X0ZOMywgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQU0VMRCIsIDB4YTQwNTAxNTQsIDE2LCAyKSB7CisJCVBTRDE1X1BTRDE0X0ZOMSwgUFNEMTVfUFNEMTRfRk4yLCAwLCAwLAorCQlQU0QxM19QU0QxMl9GTjEsIFBTRDEzX1BTRDEyX0ZOMiwgMCwgMCwKKwkJUFNEMTFfUFNEMTBfRk4xLCBQU0QxMV9QU0QxMF9GTjIsIFBTRDExX1BTRDEwX0ZOMywgMCwKKwkJUFNEOV9QU0Q4X0ZOMSwgUFNEOV9QU0Q4X0ZOMiwgMCwgMCwKKwkJUFNEN19QU0Q2X0ZOMSwgUFNEN19QU0Q2X0ZOMiwgMCwgMCwKKwkJUFNENV9QU0Q0X0ZOMSwgUFNENV9QU0Q0X0ZOMiwgMCwgMCwKKwkJUFNEM19QU0QyX0ZOMSwgUFNEM19QU0QyX0ZOMiwgMCwgMCwKKwkJUFNEMV9QU0QwX0ZOMSwgUFNEMV9QU0QwX0ZOMiwgMCwgMCB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSIiwgMHhhNDA1MDEyMCwgOCkgeworCQlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJCVBUQTNfREFUQSwgUFRBMl9EQVRBLCBQVEExX0RBVEEsIFBUQTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEJEUiIsIDB4YTQwNTAxMjIsIDgpIHsKKwkJUFRCN19EQVRBLCBQVEI2X0RBVEEsIFBUQjVfREFUQSwgUFRCNF9EQVRBLAorCQlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBDRFIiLCAweGE0MDUwMTI0LCA4KSB7CisJCVBUQzdfREFUQSwgUFRDNl9EQVRBLCBQVEM1X0RBVEEsIFBUQzRfREFUQSwKKwkJUFRDM19EQVRBLCBQVEMyX0RBVEEsIFBUQzFfREFUQSwgUFRDMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRERSIiwgMHhhNDA1MDEyNiwgOCkgeworCQlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJCVBURDNfREFUQSwgUFREMl9EQVRBLCBQVEQxX0RBVEEsIFBURDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEVEUiIsIDB4YTQwNTAxMjgsIDgpIHsKKwkJMCwgMCwgUFRFNV9EQVRBLCBQVEU0X0RBVEEsCisJCVBURTNfREFUQSwgUFRFMl9EQVRBLCBQVEUxX0RBVEEsIFBURTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEZEUiIsIDB4YTQwNTAxMmEsIDgpIHsKKwkJUFRGN19EQVRBLCBQVEY2X0RBVEEsIFBURjVfREFUQSwgUFRGNF9EQVRBLAorCQlQVEYzX0RBVEEsIFBURjJfREFUQSwgUFRGMV9EQVRBLCBQVEYwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBHRFIiLCAweGE0MDUwMTJjLCA4KSB7CisJCTAsIDAsIFBURzVfREFUQSwgUFRHNF9EQVRBLAorCQlQVEczX0RBVEEsIFBURzJfREFUQSwgUFRHMV9EQVRBLCBQVEcwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBIRFIiLCAweGE0MDUwMTJlLCA4KSB7CisJCVBUSDdfREFUQSwgUFRINl9EQVRBLCBQVEg1X0RBVEEsIFBUSDRfREFUQSwKKwkJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhhNDA1MDEzMCwgOCkgeworCQlQVEo3X0RBVEEsIDAsIFBUSjVfREFUQSwgMCwKKwkJUFRKM19EQVRBLCBQVEoyX0RBVEEsIFBUSjFfREFUQSwgUFRKMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQS0RSIiwgMHhhNDA1MDEzMiwgOCkgeworCQlQVEs3X0RBVEEsIFBUSzZfREFUQSwgUFRLNV9EQVRBLCBQVEs0X0RBVEEsCisJCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUExEUiIsIDB4YTQwNTAxMzQsIDgpIHsKKwkJUFRMN19EQVRBLCBQVEw2X0RBVEEsIFBUTDVfREFUQSwgUFRMNF9EQVRBLAorCQlQVEwzX0RBVEEsIFBUTDJfREFUQSwgUFRMMV9EQVRBLCBQVEwwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBNRFIiLCAweGE0MDUwMTM2LCA4KSB7CisJCVBUTTdfREFUQSwgUFRNNl9EQVRBLCBQVE01X0RBVEEsIFBUTTRfREFUQSwKKwkJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQTkRSIiwgMHhhNDA1MDEzOCwgOCkgeworCQlQVE43X0RBVEEsIFBUTjZfREFUQSwgUFRONV9EQVRBLCBQVE40X0RBVEEsCisJCVBUTjNfREFUQSwgUFROMl9EQVRBLCBQVE4xX0RBVEEsIFBUTjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFFEUiIsIDB4YTQwNTAxM2EsIDgpIHsKKwkJMCwgMCwgMCwgMCwKKwkJUFRRM19EQVRBLCBQVFEyX0RBVEEsIFBUUTFfREFUQSwgUFRRMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQUkRSIiwgMHhhNDA1MDEzYywgOCkgeworCQlQVFI3X0RBVEEsIFBUUjZfREFUQSwgUFRSNV9EQVRBLCBQVFI0X0RBVEEsCisJCVBUUjNfREFUQSwgUFRSMl9EQVRBLCBQVFIxX0RBVEEsIFBUUjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFNEUiIsIDB4YTQwNTAxM2UsIDgpIHsKKwkJUFRTN19EQVRBLCBQVFM2X0RBVEEsIFBUUzVfREFUQSwgUFRTNF9EQVRBLAorCQlQVFMzX0RBVEEsIFBUUzJfREFUQSwgUFRTMV9EQVRBLCBQVFMwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBURFIiLCAweGE0MDUwMTYwLCA4KSB7CisJCTAsIDAsIFBUVDVfREFUQSwgUFRUNF9EQVRBLAorCQlQVFQzX0RBVEEsIFBUVDJfREFUQSwgUFRUMV9EQVRBLCBQVFQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBVRFIiLCAweGE0MDUwMTYyLCA4KSB7CisJCTAsIDAsIFBUVTVfREFUQSwgUFRVNF9EQVRBLAorCQlQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBWRFIiLCAweGE0MDUwMTY0LCA4KSB7CisJCVBUVjdfREFUQSwgUFRWNl9EQVRBLCBQVFY1X0RBVEEsIFBUVjRfREFUQSwKKwkJUFRWM19EQVRBLCBQVFYyX0RBVEEsIFBUVjFfREFUQSwgUFRWMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQV0RSIiwgMHhhNDA1MDE2NiwgOCkgeworCQlQVFc3X0RBVEEsIFBUVzZfREFUQSwgUFRXNV9EQVRBLCBQVFc0X0RBVEEsCisJCVBUVzNfREFUQSwgUFRXMl9EQVRBLCBQVFcxX0RBVEEsIFBUVzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFhEUiIsIDB4YTQwNTAxNjgsIDgpIHsKKwkJUFRYN19EQVRBLCBQVFg2X0RBVEEsIFBUWDVfREFUQSwgUFRYNF9EQVRBLAorCQlQVFgzX0RBVEEsIFBUWDJfREFUQSwgUFRYMV9EQVRBLCBQVFgwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBZRFIiLCAweGE0MDUwMTZhLCA4KSB7CisJCVBUWTdfREFUQSwgUFRZNl9EQVRBLCBQVFk1X0RBVEEsIFBUWTRfREFUQSwKKwkJUFRZM19EQVRBLCBQVFkyX0RBVEEsIFBUWTFfREFUQSwgUFRZMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQWkRSIiwgMHhhNDA1MDE2YywgOCkgeworCQlQVFo3X0RBVEEsIFBUWjZfREFUQSwgUFRaNV9EQVRBLCBQVFo0X0RBVEEsCisJCVBUWjNfREFUQSwgUFRaMl9EQVRBLCBQVFoxX0RBVEEsIFBUWjBfREFUQSB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvIHNoNzcyM19waW5tdXhfaW5mbyA9IHsKKwkubmFtZSA9ICJzaDc3MjNfcGZjIiwKKwkucmVzZXJ2ZWRfaWQgPSBQSU5NVVhfUkVTRVJWRUQsCisJLmRhdGEgPSB7IFBJTk1VWF9EQVRBX0JFR0lOLCBQSU5NVVhfREFUQV9FTkQgfSwKKwkuaW5wdXQgPSB7IFBJTk1VWF9JTlBVVF9CRUdJTiwgUElOTVVYX0lOUFVUX0VORCB9LAorCS5pbnB1dF9wdSA9IHsgUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwgUElOTVVYX0lOUFVUX1BVTExVUF9FTkQgfSwKKwkub3V0cHV0ID0geyBQSU5NVVhfT1VUUFVUX0JFR0lOLCBQSU5NVVhfT1VUUFVUX0VORCB9LAorCS5tYXJrID0geyBQSU5NVVhfTUFSS19CRUdJTiwgUElOTVVYX01BUktfRU5EIH0sCisJLmZ1bmN0aW9uID0geyBQSU5NVVhfRlVOQ1RJT05fQkVHSU4sIFBJTk1VWF9GVU5DVElPTl9FTkQgfSwKKworCS5maXJzdF9ncGlvID0gR1BJT19QVEE3LAorCS5sYXN0X2dwaW8gPSBHUElPX0ZOX0lERUEwLAorCisJLmdwaW9zID0gcGlubXV4X2dwaW9zLAorCS5jZmdfcmVncyA9IHBpbm11eF9jb25maWdfcmVncywKKwkuZGF0YV9yZWdzID0gcGlubXV4X2RhdGFfcmVncywKKworCS5ncGlvX2RhdGEgPSBwaW5tdXhfZGF0YSwKKwkuZ3Bpb19kYXRhX3NpemUgPSBBUlJBWV9TSVpFKHBpbm11eF9kYXRhKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBsYXRfcGlubXV4X3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3Bpbm11eCgmc2g3NzIzX3Bpbm11eF9pbmZvKTsKK30KKworYXJjaF9pbml0Y2FsbChwbGF0X3Bpbm11eF9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc21wLXNoeDMuYwppbmRleCBlNWUwNjg0Li5iODg2OWFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NtcC1zaHgzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU0gtWDMgU01QCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDggIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIE1hZ251cyBEYW1tCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTE0LDYgKzE0LDIyIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorc3RhdGljIGlycXJldHVybl90IGlwaV9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCit7CisJdW5zaWduZWQgaW50IG1lc3NhZ2UgPSAodW5zaWduZWQgaW50KShsb25nKWFyZzsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IG9mZnMgPSA0ICogY3B1OworCXVuc2lnbmVkIGludCB4OworCisJeCA9IGN0cmxfaW5sKDB4ZmU0MTAwNzAgKyBvZmZzKTsgLyogQzBJTklUSUNJLi5DbklOVElDSSAqLworCXggJj0gKDEgPDwgKG1lc3NhZ2UgPDwgMikpOworCWN0cmxfb3V0bCh4LCAweGZlNDEwMDgwICsgb2Zmcyk7IC8qIEMwSU5USUNJQ0xSLi5DbklOVElDSUNMUiAqLworCisJc21wX21lc3NhZ2VfcmVjdihtZXNzYWdlKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogdm9pZCBfX2luaXQgcGxhdF9zbXBfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gMDsKQEAgLTQwLDYgKzU2LDEzIEBACiAKIHZvaWQgX19pbml0IHBsYXRfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKKwlpbnQgaTsKKworCUJVSUxEX0JVR19PTihTTVBfTVNHX05SID49IDgpOworCisJZm9yIChpID0gMDsgaSA8IFNNUF9NU0dfTlI7IGkrKykKKwkJcmVxdWVzdF9pcnEoMTA0ICsgaSwgaXBpX2ludGVycnVwdF9oYW5kbGVyLCBJUlFGX0RJU0FCTEVELAorCQkJICAgICJJUEkiLCAodm9pZCAqKShsb25nKWkpOwogfQogCiAjZGVmaW5lIFNUQkNSX1JFRyhwaHlzX2lkKSAoMHhmZTQwMDAwNCB8IChwaHlzX2lkIDw8IDEyKSkKQEAgLTU5LDcgKzgyLDcgQEAKIAkJY3RybF9vdXRsKFNUQkNSX01TVFAsIFNUQkNSX1JFRyhjcHUpKTsKIAogCXdoaWxlICghKGN0cmxfaW5sKFNUQkNSX1JFRyhjcHUpKSAmIFNUQkNSX01TVFApKQotCQk7CisJCWNwdV9yZWxheCgpOwogCiAJLyogU3RhcnQgdXAgc2Vjb25kYXJ5IHByb2Nlc3NvciBieSBzZW5kaW5nIGEgcmVzZXQgKi8KIAljdHJsX291dGwoU1RCQ1JfQVBfVkFMLCBTVEJDUl9SRUcoY3B1KSk7CkBAIC03NSw0NiArOTgsNiBAQAogCXVuc2lnbmVkIGxvbmcgYWRkciA9IDB4ZmU0MTAwNzAgKyAoY3B1ICogNCk7CiAKIAlCVUdfT04oY3B1ID49IDQpOwotCUJVR19PTihtZXNzYWdlID49IFNNUF9NU0dfTlIpOwogCiAJY3RybF9vdXRsKDEgPDwgKG1lc3NhZ2UgPDwgMiksIGFkZHIpOyAvKiBDMElOVElDSS4uQ25JTlRJQ0kgKi8KIH0KLQotc3RydWN0IGlwaV9kYXRhIHsKLQl2b2lkICgqaGFuZGxlcikodm9pZCAqKTsKLQl2b2lkICphcmc7Ci0JdW5zaWduZWQgaW50IG1lc3NhZ2U7Ci19OwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgaXBpX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgaXBpX2RhdGEgKmlkID0gYXJnOwotCXVuc2lnbmVkIGludCBjcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQl1bnNpZ25lZCBpbnQgb2ZmcyA9IDQgKiBjcHU7Ci0JdW5zaWduZWQgaW50IHg7Ci0KLQl4ID0gY3RybF9pbmwoMHhmZTQxMDA3MCArIG9mZnMpOyAvKiBDMElOSVRJQ0kuLkNuSU5USUNJICovCi0JeCAmPSAoMSA8PCAoaWQtPm1lc3NhZ2UgPDwgMikpOwotCWN0cmxfb3V0bCh4LCAweGZlNDEwMDgwICsgb2Zmcyk7IC8qIEMwSU5USUNJQ0xSLi5DbklOVElDSUNMUiAqLwotCi0JaWQtPmhhbmRsZXIoaWQtPmFyZyk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXBpX2RhdGEgaXBpX2hhbmRsZXJzW1NNUF9NU0dfTlJdOwotCi1pbnQgcGxhdF9yZWdpc3Rlcl9pcGlfaGFuZGxlcih1bnNpZ25lZCBpbnQgbWVzc2FnZSwKLQkJCSAgICAgIHZvaWQgKCpoYW5kbGVyKSh2b2lkICopLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGlwaV9kYXRhICppZCA9ICZpcGlfaGFuZGxlcnNbbWVzc2FnZV07Ci0KLQlCVUdfT04oU01QX01TR19OUiA+PSA4KTsKLQlCVUdfT04obWVzc2FnZSA+PSBTTVBfTVNHX05SKTsKLQotCWlkLT5oYW5kbGVyID0gaGFuZGxlcjsKLQlpZC0+YXJnID0gYXJnOwotCWlkLT5tZXNzYWdlID0gbWVzc2FnZTsKLQotCXJldHVybiByZXF1ZXN0X2lycSgxMDQgKyBtZXNzYWdlLCBpcGlfaW50ZXJydXB0X2hhbmRsZXIsIDAsICJJUEkiLCBpZCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9NYWtlZmlsZQppbmRleCA4NjQ2MzYzLi5jZTQ2MDJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvTWFrZWZpbGUKQEAgLTUsMyArNSw4IEBACiAKIG9iai0kKENPTkZJR19TSF9GUFUpCQkrPSBmcHUubwogb2JqLSQoQ09ORklHX0tBTExTWU1TKQkJKz0gdW53aW5kLm8KKworIyBQcmltYXJ5IG9uLWNoaXAgY2xvY2tzIChjb21tb24pCitjbG9jay0kKENPTkZJR19DUFVfU0g1KQkJOj0gY2xvY2stc2g1Lm8KKworb2JqLXkJCQkrPSAkKGNsb2NrLXkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2Nsb2NrLXNoNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmM0OTI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYwpAQCAtMCwwICsxLDc5IEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYworICoKKyAqIFNILTUgc3VwcG9ydCBmb3IgdGhlIGNsb2NrIGZyYW1ld29yaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIGludCBpZmNfdGFibGVbXSA9IHsgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNiwgMjQgfTsKKworLyogQ2xvY2ssIFBvd2VyIGFuZCBSZXNldCBDb250cm9sbGVyICovCisjZGVmaW5lCUNQUkNfQkxPQ0tfT0ZGCTB4MDEwMTAwMDAKKyNkZWZpbmUgQ1BSQ19CQVNFCShQSFlTX1BFUklQSEVSQUxfQkxPQ0sgKyBDUFJDX0JMT0NLX09GRikKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3ByY19iYXNlOworCitzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbmwoY3ByY19iYXNlICsgMHgwMCkgPj4gNikgJiAweDAwMDc7CisJY2xrLT5yYXRlICo9IGlmY190YWJsZVtpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g1X21hc3Rlcl9jbGtfb3BzID0geworCS5pbml0CQk9IG1hc3Rlcl9jbGtfaW5pdCwKK307CisKK3N0YXRpYyB2b2lkIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW53KGNwcmNfYmFzZSkgPj4gMTIpICYgMHgwMDA3OworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX3RhYmxlW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDVfbW9kdWxlX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW53KGNwcmNfYmFzZSkgPj4gMykgJiAweDAwMDc7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfdGFibGVbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNV9idXNfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGJ1c19jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbncoY3ByY19iYXNlKSAmIDB4MDAwNyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfdGFibGVbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNV9jcHVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGNwdV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzICpzaDVfY2xrX29wc1tdID0geworCSZzaDVfbWFzdGVyX2Nsa19vcHMsCisJJnNoNV9tb2R1bGVfY2xrX29wcywKKwkmc2g1X2J1c19jbGtfb3BzLAorCSZzaDVfY3B1X2Nsa19vcHMsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2luaXRfY2xrX29wcyhzdHJ1Y3QgY2xrX29wcyAqKm9wcywgaW50IGlkeCkKK3sKKwljcHJjX2Jhc2UgPSBvbmNoaXBfcmVtYXAoQ1BSQ19CQVNFLCAxMDI0LCAiQ1BSQyIpOworCUJVR19PTighY3ByY19iYXNlKTsKKworCWlmIChpZHggPCBBUlJBWV9TSVpFKHNoNV9jbGtfb3BzKSkKKwkJKm9wcyA9IHNoNV9jbGtfb3BzW2lkeF07Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcmFzaF9kdW1wLmMgYi9hcmNoL3NoL2tlcm5lbC9jcmFzaF9kdW1wLmMKaW5kZXggNGEyZWNiZS4uOTVkMjE2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NyYXNoX2R1bXAuYwpAQCAtMTAsNiArMTAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCit1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKwogLyoqCiAgKiBjb3B5X29sZG1lbV9wYWdlIC0gY29weSBvbmUgcGFnZSBmcm9tICJvbGRtZW0iCiAgKiBAcGZuOiBwYWdlIGZyYW1lIG51bWJlciB0byBiZSBjb3BpZWQKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2R1bXBfdGFzay5jIGIvYXJjaC9zaC9rZXJuZWwvZHVtcF90YXNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYjdjZTAuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZHVtcF90YXNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8YXNtL2ZwdS5oPgotCi0vKgotICogQ2FwdHVyZSB0aGUgdXNlciBzcGFjZSByZWdpc3RlcnMgaWYgdGhlIHRhc2sgaXMgbm90IHJ1bm5pbmcgKGluIHVzZXIgc3BhY2UpCi0gKi8KLWludCBkdW1wX3Rhc2tfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgZWxmX2dyZWdzZXRfdCAqcmVncykKLXsKLQlzdHJ1Y3QgcHRfcmVncyBwdHJlZ3M7Ci0KLQlwdHJlZ3MgPSAqdGFza19wdF9yZWdzKHRzayk7Ci0JZWxmX2NvcmVfY29weV9yZWdzKHJlZ3MsICZwdHJlZ3MpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLWludCBkdW1wX3Rhc2tfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBlbGZfZnByZWdzZXRfdCAqZnB1KQotewotCWludCBmcHZhbGlkID0gMDsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NIX0ZQVSkKLQlmcHZhbGlkID0gISF0c2tfdXNlZF9tYXRoKHRzayk7Ci0JaWYgKGZwdmFsaWQpIHsKLQkJdW5sYXp5X2ZwdSh0c2ssIHRhc2tfcHRfcmVncyh0c2spKTsKLQkJbWVtY3B5KGZwdSwgJnRzay0+dGhyZWFkLmZwdS5oYXJkLCBzaXplb2YoKmZwdSkpOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIGZwdmFsaWQ7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggZWZiYjQyNi4uMWE1Y2Y5ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTM3MSwzICszNzEsNDcgQEAKICNlbmRpZgogNzoJLmxvbmcJZG9fc3lzY2FsbF90cmFjZV9lbnRlcgogODoJLmxvbmcJZG9fc3lzY2FsbF90cmFjZV9sZWF2ZQorCisjaWZkZWYgQ09ORklHX0ZUUkFDRQorCS5hbGlnbiAyCisJLmdsb2JsCV9tY291bnQKKwkudHlwZQlfbWNvdW50LEBmdW5jdGlvbgorCS5nbG9ibAltY291bnQKKwkudHlwZQltY291bnQsQGZ1bmN0aW9uCitfbWNvdW50OgorbWNvdW50OgorCW1vdi5sCXI0LCBALXIxNQorCW1vdi5sCXI1LCBALXIxNQorCW1vdi5sCXI2LCBALXIxNQorCW1vdi5sCXI3LCBALXIxNQorCXN0cy5sCXByLCBALXIxNQorCisJbW92LmwJQCgyMCxyMTUpLHI0CisJc3RzCXByLCByNQorCisJbW92LmwJMWYsIHI2CisJbW92LmwJZnRyYWNlX3N0dWIsIHI3CQorCWNtcC9lcQlyNiwgcjcKKwlidAlza2lwX3RyYWNlCisKKwltb3YubAlAcjYsIHI2CisJanNyCUByNgorCSBub3AKKworc2tpcF90cmFjZToKKworCWxkcy5sCUByMTUrLCBwcgorCW1vdi5sCUByMTUrLCByNworCW1vdi5sCUByMTUrLCByNgorCW1vdi5sCUByMTUrLCByNQorCXJ0cworCSBtb3YubAlAcjE1KywgcjQKKworCS5hbGlnbiAyCisxOgkubG9uZwlmdHJhY2VfdHJhY2VfZnVuY3Rpb24KKworCS5nbG9ibAlmdHJhY2Vfc3R1YgorZnRyYWNlX3N0dWI6CisJcnRzCisJIG5vcAorI2VuZGlmIC8qIENPTkZJR19GVFJBQ0UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2dwaW8uYyBiL2FyY2gvc2gva2VybmVsL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjhiODEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jCkBAIC0wLDAgKzEsNDk4IEBACisvKgorICogUGlubXV4ZWQgR1BJTyBzdXBwb3J0IGZvciBTdXBlckguCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvICpyZWdpc3RlcmVkX2dwaW87CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9fY29udHJvbGxlcih1bnNpZ25lZCBncGlvKQoreworCWlmICghcmVnaXN0ZXJlZF9ncGlvKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChncGlvIDwgcmVnaXN0ZXJlZF9ncGlvLT5maXJzdF9ncGlvKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChncGlvID4gcmVnaXN0ZXJlZF9ncGlvLT5sYXN0X2dwaW8pCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHJlZ2lzdGVyZWRfZ3BpbzsKK30KKworc3RhdGljIGludCBlbnVtX2luX3JhbmdlKHBpbm11eF9lbnVtX3QgZW51bV9pZCwgc3RydWN0IHBpbm11eF9yYW5nZSAqcikKK3sKKwlpZiAoZW51bV9pZCA8IHItPmJlZ2luKQorCQlyZXR1cm4gMDsKKworCWlmIChlbnVtX2lkID4gci0+ZW5kKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlYWRfd3JpdGVfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKKwkJCSAgdW5zaWduZWQgbG9uZyBmaWVsZF93aWR0aCwgdW5zaWduZWQgbG9uZyBpbl9wb3MsCisJCQkgIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCBkb193cml0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGEsIG1hc2ssIHBvczsKKworCWRhdGEgPSAwOworCW1hc2sgPSAoMSA8PCBmaWVsZF93aWR0aCkgLSAxOworCXBvcyA9IHJlZ193aWR0aCAtICgoaW5fcG9zICsgMSkgKiBmaWVsZF93aWR0aCk7CisKKyNpZmRlZiBERUJVRworCXByX2luZm8oIiVzLCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJCSJyX3dpZHRoID0gJWxkLCBmX3dpZHRoID0gJWxkXG4iLAorCQlkb193cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIsIHJlZywgdmFsdWUsIHBvcywKKwkJcmVnX3dpZHRoLCBmaWVsZF93aWR0aCk7CisjZW5kaWYKKworCXN3aXRjaCAocmVnX3dpZHRoKSB7CisJY2FzZSA4OgorCQlkYXRhID0gY3RybF9pbmIocmVnKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJZGF0YSA9IGN0cmxfaW53KHJlZyk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWRhdGEgPSBjdHJsX2lubChyZWcpOworCQlicmVhazsKKwl9CisKKwlpZiAoIWRvX3dyaXRlKQorCQlyZXR1cm4gKGRhdGEgPj4gcG9zKSAmIG1hc2s7CisKKwlkYXRhICY9IH4obWFzayA8PCBwb3MpOworCWRhdGEgfD0gdmFsdWUgPDwgcG9zOworCisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIDg6CisJCWN0cmxfb3V0YihkYXRhLCByZWcpOworCQlicmVhazsKKwljYXNlIDE2OgorCQljdHJsX291dHcoZGF0YSwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJY3RybF9vdXRsKGRhdGEsIHJlZyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfZGF0YV9yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKKwkJCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKipkcnAsIGludCAqYml0cCkKK3sKKwlwaW5tdXhfZW51bV90IGVudW1faWQgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZW51bV9pZDsKKwlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkYXRhX3JlZzsKKwlpbnQgaywgbjsKKworCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKQorCQlyZXR1cm4gLTE7CisKKwlrID0gMDsKKwl3aGlsZSAoMSkgeworCQlkYXRhX3JlZyA9IGdwaW9jLT5kYXRhX3JlZ3MgKyBrOworCisJCWlmICghZGF0YV9yZWctPnJlZ193aWR0aCkKKwkJCWJyZWFrOworCisJCWZvciAobiA9IDA7IG4gPCBkYXRhX3JlZy0+cmVnX3dpZHRoOyBuKyspIHsKKwkJCWlmIChkYXRhX3JlZy0+ZW51bV9pZHNbbl0gPT0gZW51bV9pZCkgeworCQkJCSpkcnAgPSBkYXRhX3JlZzsKKwkJCQkqYml0cCA9IG47CisJCQkJcmV0dXJuIDA7CisKKwkJCX0KKwkJfQorCQlrKys7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9jb25maWdfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHBpbm11eF9lbnVtX3QgZW51bV9pZCwKKwkJCSAgc3RydWN0IHBpbm11eF9jZmdfcmVnICoqY3JwLCBpbnQgKmluZGV4cCwKKwkJCSAgdW5zaWduZWQgbG9uZyAqKmNudHApCit7CisJc3RydWN0IHBpbm11eF9jZmdfcmVnICpjb25maWdfcmVnOworCXVuc2lnbmVkIGxvbmcgcl93aWR0aCwgZl93aWR0aDsKKwlpbnQgaywgbjsKKworCWsgPSAwOworCXdoaWxlICgxKSB7CisJCWNvbmZpZ19yZWcgPSBncGlvYy0+Y2ZnX3JlZ3MgKyBrOworCisJCXJfd2lkdGggPSBjb25maWdfcmVnLT5yZWdfd2lkdGg7CisJCWZfd2lkdGggPSBjb25maWdfcmVnLT5maWVsZF93aWR0aDsKKworCQlpZiAoIXJfd2lkdGgpCisJCQlicmVhazsKKwkJZm9yIChuID0gMDsgbiA8IChyX3dpZHRoIC8gZl93aWR0aCkgKiAxIDw8IGZfd2lkdGg7IG4rKykgeworCQkJaWYgKGNvbmZpZ19yZWctPmVudW1faWRzW25dID09IGVudW1faWQpIHsKKwkJCQkqY3JwID0gY29uZmlnX3JlZzsKKwkJCQkqaW5kZXhwID0gbjsKKwkJCQkqY250cCA9ICZjb25maWdfcmVnLT5jbnRbbiAvICgxIDw8IGZfd2lkdGgpXTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlrKys7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9ncGlvX2VudW1faWQoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKKwkJCSAgICBpbnQgcG9zLCBwaW5tdXhfZW51bV90ICplbnVtX2lkcCkKK3sKKwlwaW5tdXhfZW51bV90IGVudW1faWQgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZW51bV9pZDsKKwlwaW5tdXhfZW51bV90ICpkYXRhID0gZ3Bpb2MtPmdwaW9fZGF0YTsKKwlpbnQgazsKKworCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKSB7CisJCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPm1hcmspKSB7CisJCQlwcl9lcnIoIm5vbiBkYXRhL21hcmsgZW51bV9pZCBmb3IgZ3BpbyAlZFxuIiwgZ3Bpbyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlpZiAocG9zKSB7CisJCSplbnVtX2lkcCA9IGRhdGFbcG9zICsgMV07CisJCXJldHVybiBwb3MgKyAxOworCX0KKworCWZvciAoayA9IDA7IGsgPCBncGlvYy0+Z3Bpb19kYXRhX3NpemU7IGsrKykgeworCQlpZiAoZGF0YVtrXSA9PSBlbnVtX2lkKSB7CisJCQkqZW51bV9pZHAgPSBkYXRhW2sgKyAxXTsKKwkJCXJldHVybiBrICsgMTsKKwkJfQorCX0KKworCXByX2VycigiY2Fubm90IGxvY2F0ZSBkYXRhL21hcmsgZW51bV9pZCBmb3IgZ3BpbyAlZFxuIiwgZ3Bpbyk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHdyaXRlX2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKKwkJCSAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKKwkJCSAgICBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyBuY29tYiwgcG9zLCB2YWx1ZTsKKworCW5jb21iID0gMSA8PCBjcnAtPmZpZWxkX3dpZHRoOworCXBvcyA9IGluZGV4IC8gbmNvbWI7CisJdmFsdWUgPSBpbmRleCAlIG5jb21iOworCisJcmV0dXJuIHJlYWRfd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKKwkJCSAgICAgIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgdmFsdWUsIDEpOworfQorCitzdGF0aWMgaW50IGNoZWNrX2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKKwkJCSAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKKwkJCSAgICBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyBuY29tYiwgcG9zLCB2YWx1ZTsKKworCW5jb21iID0gMSA8PCBjcnAtPmZpZWxkX3dpZHRoOworCXBvcyA9IGluZGV4IC8gbmNvbWI7CisJdmFsdWUgPSBpbmRleCAlIG5jb21iOworCisJaWYgKHJlYWRfd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKKwkJCSAgIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgMCwgMCkgPT0gdmFsdWUpCisJCXJldHVybiAwOworCisJcmV0dXJuIC0xOworfQorCitlbnVtIHsgR1BJT19DRkdfRFJZUlVOLCBHUElPX0NGR19SRVEsIEdQSU9fQ0ZHX0ZSRUUgfTsKKworaW50IHBpbm11eF9jb25maWdfZ3BpbyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvLAorCQkgICAgICAgaW50IHBpbm11eF90eXBlLCBpbnQgY2ZnX21vZGUpCit7CisJc3RydWN0IHBpbm11eF9jZmdfcmVnICpjciA9IE5VTEw7CisJcGlubXV4X2VudW1fdCBlbnVtX2lkOworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgKnJhbmdlOworCWludCBpbl9yYW5nZSwgcG9zLCBpbmRleDsKKwl1bnNpZ25lZCBsb25nICpjbnRwOworCisJc3dpdGNoIChwaW5tdXhfdHlwZSkgeworCisJY2FzZSBQSU5NVVhfVFlQRV9GVU5DVElPTjoKKwkJcmFuZ2UgPSBOVUxMOworCQlicmVhazsKKworCWNhc2UgUElOTVVYX1RZUEVfT1VUUFVUOgorCQlyYW5nZSA9ICZncGlvYy0+b3V0cHV0OworCQlicmVhazsKKworCWNhc2UgUElOTVVYX1RZUEVfSU5QVVQ6CisJCXJhbmdlID0gJmdwaW9jLT5pbnB1dDsKKwkJYnJlYWs7CisKKwljYXNlIFBJTk1VWF9UWVBFX0lOUFVUX1BVTExVUDoKKwkJcmFuZ2UgPSAmZ3Bpb2MtPmlucHV0X3B1OworCQlicmVhazsKKworCWNhc2UgUElOTVVYX1RZUEVfSU5QVVRfUFVMTERPV046CisJCXJhbmdlID0gJmdwaW9jLT5pbnB1dF9wZDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlnb3RvIG91dF9lcnI7CisJfQorCisJcG9zID0gMDsKKwllbnVtX2lkID0gMDsKKwlpbmRleCA9IDA7CisJd2hpbGUgKDEpIHsKKwkJcG9zID0gZ2V0X2dwaW9fZW51bV9pZChncGlvYywgZ3BpbywgcG9zLCAmZW51bV9pZCk7CisJCWlmIChwb3MgPD0gMCkKKwkJCWdvdG8gb3V0X2VycjsKKworCQlpZiAoIWVudW1faWQpCisJCQlicmVhazsKKworCQlpbl9yYW5nZSA9IGVudW1faW5fcmFuZ2UoZW51bV9pZCwgJmdwaW9jLT5mdW5jdGlvbik7CisJCWlmICghaW5fcmFuZ2UgJiYgcmFuZ2UpCisJCQlpbl9yYW5nZSA9IGVudW1faW5fcmFuZ2UoZW51bV9pZCwgcmFuZ2UpOworCisJCWlmICghaW5fcmFuZ2UpCisJCQljb250aW51ZTsKKworCQlpZiAoZ2V0X2NvbmZpZ19yZWcoZ3Bpb2MsIGVudW1faWQsICZjciwgJmluZGV4LCAmY250cCkgIT0gMCkKKwkJCWdvdG8gb3V0X2VycjsKKworCQlzd2l0Y2ggKGNmZ19tb2RlKSB7CisJCWNhc2UgR1BJT19DRkdfRFJZUlVOOgorCQkJaWYgKCEqY250cCB8fCAhY2hlY2tfY29uZmlnX3JlZyhncGlvYywgY3IsIGluZGV4KSkKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BJT19DRkdfUkVROgorCQkJaWYgKHdyaXRlX2NvbmZpZ19yZWcoZ3Bpb2MsIGNyLCBpbmRleCkgIT0gMCkKKwkJCQlnb3RvIG91dF9lcnI7CisJCQkqY250cCA9ICpjbnRwICsgMTsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BJT19DRkdfRlJFRToKKwkJCSpjbnRwID0gKmNudHAgLSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKyBvdXRfZXJyOgorCXJldHVybiAtMTsKK30KKworc3RhdGljIERFRklORV9TUElOTE9DSyhncGlvX2xvY2spOworCitpbnQgX19ncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKmR1bW15OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIHJldCwgcGlubXV4X3R5cGU7CisKKwlyZXQgPSAtRUlOVkFMOworCisJaWYgKCFncGlvYykKKwkJZ290byBlcnJfb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJaWYgKChncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFKSAhPSBQSU5NVVhfVFlQRV9OT05FKQorCQlnb3RvIGVycl91bmxvY2s7CisKKwkvKiBzZXR1cCBwaW4gZnVuY3Rpb24gaGVyZSBpZiBubyBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBwaW4gKi8KKworCWlmIChnZXRfZGF0YV9yZWcoZ3Bpb2MsIGdwaW8sICZkdW1teSwgJmkpICE9IDApCisJCXBpbm11eF90eXBlID0gUElOTVVYX1RZUEVfRlVOQ1RJT047CisJZWxzZQorCQlwaW5tdXhfdHlwZSA9IFBJTk1VWF9UWVBFX0dQSU87CisKKwlpZiAocGlubXV4X3R5cGUgPT0gUElOTVVYX1RZUEVfRlVOQ1RJT04pIHsKKwkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgZ3BpbywKKwkJCQkgICAgICAgcGlubXV4X3R5cGUsCisJCQkJICAgICAgIEdQSU9fQ0ZHX0RSWVJVTikgIT0gMCkKKwkJCWdvdG8gZXJyX3VubG9jazsKKworCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQkJCSAgICAgICBwaW5tdXhfdHlwZSwKKwkJCQkgICAgICAgR1BJT19DRkdfUkVRKSAhPSAwKQorCQkJQlVHKCk7CisJfQorCisJZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzID0gcGlubXV4X3R5cGU7CisKKwlyZXQgPSAwOworIGVycl91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisgZXJyX291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChfX2dwaW9fcmVxdWVzdCk7CisKK3ZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBwaW5tdXhfdHlwZTsKKworCWlmICghZ3Bpb2MpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKKwlwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sIHBpbm11eF90eXBlLCBHUElPX0NGR19GUkVFKTsKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBQSU5NVVhfVFlQRV9OT05FOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZnJlZSk7CisKK3N0YXRpYyBpbnQgcGlubXV4X2RpcmVjdGlvbihzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJICAgIHVuc2lnbmVkIGdwaW8sIGludCBuZXdfcGlubXV4X3R5cGUpCit7CisJaW50IHJldCwgcGlubXV4X3R5cGU7CisKKwlyZXQgPSAtRUlOVkFMOworCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKKworCXN3aXRjaCAocGlubXV4X3R5cGUpIHsKKwljYXNlIFBJTk1VWF9UWVBFX0dQSU86CisJCWJyZWFrOworCWNhc2UgUElOTVVYX1RZUEVfT1VUUFVUOgorCWNhc2UgUElOTVVYX1RZUEVfSU5QVVQ6CisJY2FzZSBQSU5NVVhfVFlQRV9JTlBVVF9QVUxMVVA6CisJY2FzZSBQSU5NVVhfVFlQRV9JTlBVVF9QVUxMRE9XTjoKKwkJcGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLCBwaW5tdXhfdHlwZSwgR1BJT19DRkdfRlJFRSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQkJICAgICAgIG5ld19waW5tdXhfdHlwZSwKKwkJCSAgICAgICBHUElPX0NGR19EUllSVU4pICE9IDApCisJCWdvdG8gZXJyX291dDsKKworCWlmIChwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sCisJCQkgICAgICAgbmV3X3Bpbm11eF90eXBlLAorCQkJICAgICAgIEdQSU9fQ0ZHX1JFUSkgIT0gMCkKKwkJQlVHKCk7CisKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBuZXdfcGlubXV4X3R5cGU7CisKKwlyZXQgPSAwOworIGVycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKCFncGlvYykKKwkJZ290byBlcnJfb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIGdwaW8sIFBJTk1VWF9UWVBFX0lOUFVUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKyBlcnJfb3V0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX2lucHV0KTsKKworc3RhdGljIGludCBfX2dwaW9fZ2V0X3NldF92YWx1ZShzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJCXVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSwKKwkJCQlpbnQgZG9fd3JpdGUpCit7CisJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIgPSBOVUxMOworCWludCBiaXQgPSAwOworCisJaWYgKGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmRyLCAmYml0KSAhPSAwKQorCQlCVUcoKTsKKwllbHNlCisJCXZhbHVlID0gcmVhZF93cml0ZV9yZWcoZHItPnJlZywgZHItPnJlZ193aWR0aCwKKwkJCQkgICAgICAgMSwgYml0LCB2YWx1ZSwgZG9fd3JpdGUpOworCisJcmV0dXJuIHZhbHVlOworfQorCitpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoIWdwaW9jKQorCQlnb3RvIGVycl9vdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIHZhbHVlLCAxKTsKKwlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBncGlvLCBQSU5NVVhfVFlQRV9PVVRQVVQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworIGVycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KTsKKworaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB2YWx1ZSA9IDA7CisKKwlpZiAoIWdwaW9jKQorCQlCVUcoKTsKKwllbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCQl2YWx1ZSA9IF9fZ3Bpb19nZXRfc2V0X3ZhbHVlKGdwaW9jLCBncGlvLCAwLCAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorRVhQT1JUX1NZTUJPTChncGlvX2dldF92YWx1ZSk7CisKK3ZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZ3Bpb2MpCisJCUJVRygpOworCWVsc2UgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJCV9fZ3Bpb19nZXRfc2V0X3ZhbHVlKGdwaW9jLCBncGlvLCB2YWx1ZSwgMSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZ3Bpb19zZXRfdmFsdWUpOworCitpbnQgcmVnaXN0ZXJfcGlubXV4KHN0cnVjdCBwaW5tdXhfaW5mbyAqcGlwKQoreworCXJlZ2lzdGVyZWRfZ3BpbyA9IHBpcDsKKwlwcl9pbmZvKCJwaW5tdXg6ICVzIGhhbmRsaW5nIGdwaW8gJWQgLT4gJWRcbiIsCisJCXBpcC0+bmFtZSwgcGlwLT5maXJzdF9ncGlvLCBwaXAtPmxhc3RfZ3Bpbyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lvLmMgYi9hcmNoL3NoL2tlcm5lbC9pby5jCmluZGV4IDJiODk5MTIuLjI5Y2Y0NTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaW8uYwpAQCAtMTksMTIgKzE5LDEyIEBACiAgKiBDb3B5IGRhdGEgZnJvbSBJTyBtZW1vcnkgc3BhY2UgdG8gInJlYWwiIG1lbW9yeSBzcGFjZS4KICAqIFRoaXMgbmVlZHMgdG8gYmUgb3B0aW1pemVkLgogICovCi12b2lkIG1lbWNweV9mcm9taW8odm9pZCAqdG8sIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3ZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICp0bywgY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpmcm9tLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCWNoYXIgKnAgPSB0bzsKKwl1bnNpZ25lZCBjaGFyICpwID0gdG87CiAgICAgICAgIHdoaWxlIChjb3VudCkgewogICAgICAgICAgICAgICAgIGNvdW50LS07Ci0gICAgICAgICAgICAgICAgKnAgPSByZWFkYigodm9pZCBfX2lvbWVtICopZnJvbSk7CisgICAgICAgICAgICAgICAgKnAgPSByZWFkYihmcm9tKTsKICAgICAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgICAgICAgZnJvbSsrOwogICAgICAgICB9CkBAIC0zNywxMCArMzcsMTAgQEAKICAqLwogdm9pZCBtZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCWNvbnN0IGNoYXIgKnAgPSBmcm9tOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBmcm9tOwogICAgICAgICB3aGlsZSAoY291bnQpIHsKICAgICAgICAgICAgICAgICBjb3VudC0tOwotICAgICAgICAgICAgICAgIHdyaXRlYigqcCwgKHZvaWQgX19pb21lbSAqKXRvKTsKKyAgICAgICAgICAgICAgICB3cml0ZWIoKnAsIHRvKTsKICAgICAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgICAgICAgdG8rKzsKICAgICAgICAgfQpAQCAtNTUsNyArNTUsNyBAQAogewogICAgICAgICB3aGlsZSAoY291bnQpIHsKICAgICAgICAgICAgICAgICBjb3VudC0tOwotICAgICAgICAgICAgICAgIHdyaXRlYihjLCAodm9pZCBfX2lvbWVtICopZHN0KTsKKyAgICAgICAgICAgICAgICB3cml0ZWIoYywgZHN0KTsKICAgICAgICAgICAgICAgICBkc3QrKzsKICAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jIGIvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jCmluZGV4IGRiNzY5NDQuLjVhN2Y1NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMKQEAgLTE5LDM4ICsxOSwzMyBAQAogLyogU0gzIGhhcyBhIFBDTUNJQSBidWcgdGhhdCBuZWVkcyBhIGR1bW15IHJlYWQgZnJvbSBhcmVhIDYgZm9yIGEKICAqIHdvcmthcm91bmQuICovCiAvKiBJJ20gbm90IHN1cmUgU0g3NzA5IGhhcyB0aGlzIGtpbmQgb2YgYnVnICovCi0jZGVmaW5lIGR1bW15X3JlYWQoKQljdHJsX2luYigweGJhMDAwMDAwKQorI2RlZmluZSBkdW1teV9yZWFkKCkJX19yYXdfcmVhZGIoMHhiYTAwMDAwMCkKICNlbHNlCiAjZGVmaW5lIGR1bW15X3JlYWQoKQogI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgZ2VuZXJpY19pb19iYXNlOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGVsYXkodm9pZCkKLXsKLQljdHJsX2ludygweGEwMDAwMDAwKTsKLX0KLQogdTggZ2VuZXJpY19pbmIodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXJldHVybiBjdHJsX2luYigodW5zaWduZWQgbG9uZyBfX2ZvcmNlKV9faW9wb3J0X21hcChwb3J0LCAxKSk7CisJcmV0dXJuIF9fcmF3X3JlYWRiKF9faW9wb3J0X21hcChwb3J0LCAxKSk7CiB9CiAKIHUxNiBnZW5lcmljX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JcmV0dXJuIGN0cmxfaW53KCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpX19pb3BvcnRfbWFwKHBvcnQsIDIpKTsKKwlyZXR1cm4gX19yYXdfcmVhZHcoX19pb3BvcnRfbWFwKHBvcnQsIDIpKTsKIH0KIAogdTMyIGdlbmVyaWNfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQlyZXR1cm4gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlfX2lvcG9ydF9tYXAocG9ydCwgNCkpOworCXJldHVybiBfX3Jhd19yZWFkbChfX2lvcG9ydF9tYXAocG9ydCwgNCkpOwogfQogCiB1OCBnZW5lcmljX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKIAl1bnNpZ25lZCBsb25nIHYgPSBnZW5lcmljX2luYihwb3J0KTsKIAotCWRlbGF5KCk7CisJY3RybF9kZWxheSgpOwogCXJldHVybiB2OwogfQogCkBAIC01OCw3ICs1Myw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB2ID0gZ2VuZXJpY19pbncocG9ydCk7CiAKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIAlyZXR1cm4gdjsKIH0KIApAQCAtNjYsNyArNjEsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgdiA9IGdlbmVyaWNfaW5sKHBvcnQpOwogCi0JZGVsYXkoKTsKKwljdHJsX2RlbGF5KCk7CiAJcmV0dXJuIHY7CiB9CiAKQEAgLTgxLDcgKzc2LDcgQEAKIAl2b2xhdGlsZSB1OCAqcG9ydF9hZGRyOwogCXU4ICpidWYgPSBkc3Q7CiAKLQlwb3J0X2FkZHIgPSAodm9sYXRpbGUgdTggKilfX2lvcG9ydF9tYXAocG9ydCwgMSk7CisJcG9ydF9hZGRyID0gKHZvbGF0aWxlIHU4IF9fZm9yY2UgKilfX2lvcG9ydF9tYXAocG9ydCwgMSk7CiAJd2hpbGUgKGNvdW50LS0pCiAJCSpidWYrKyA9ICpwb3J0X2FkZHI7CiB9CkBAIC05MSw3ICs4Niw3IEBACiAJdm9sYXRpbGUgdTE2ICpwb3J0X2FkZHI7CiAJdTE2ICpidWYgPSBkc3Q7CiAKLQlwb3J0X2FkZHIgPSAodm9sYXRpbGUgdTE2ICopX19pb3BvcnRfbWFwKHBvcnQsIDIpOworCXBvcnRfYWRkciA9ICh2b2xhdGlsZSB1MTYgX19mb3JjZSAqKV9faW9wb3J0X21hcChwb3J0LCAyKTsKIAl3aGlsZSAoY291bnQtLSkKIAkJKmJ1ZisrID0gKnBvcnRfYWRkcjsKIApAQCAtMTAzLDcgKzk4LDcgQEAKIAl2b2xhdGlsZSB1MzIgKnBvcnRfYWRkcjsKIAl1MzIgKmJ1ZiA9IGRzdDsKIAotCXBvcnRfYWRkciA9ICh2b2xhdGlsZSB1MzIgKilfX2lvcG9ydF9tYXAocG9ydCwgNCk7CisJcG9ydF9hZGRyID0gKHZvbGF0aWxlIHUzMiBfX2ZvcmNlICopX19pb3BvcnRfbWFwKHBvcnQsIDQpOwogCXdoaWxlIChjb3VudC0tKQogCQkqYnVmKysgPSAqcG9ydF9hZGRyOwogCkBAIC0xMTIsMzUgKzEwNywzNSBAQAogCiB2b2lkIGdlbmVyaWNfb3V0Yih1OCBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JY3RybF9vdXRiKGIsICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpX19pb3BvcnRfbWFwKHBvcnQsIDEpKTsKKwlfX3Jhd193cml0ZWIoYiwgX19pb3BvcnRfbWFwKHBvcnQsIDEpKTsKIH0KIAogdm9pZCBnZW5lcmljX291dHcodTE2IGIsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQljdHJsX291dHcoYiwgKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlfX2lvcG9ydF9tYXAocG9ydCwgMikpOworCV9fcmF3X3dyaXRldyhiLCBfX2lvcG9ydF9tYXAocG9ydCwgMikpOwogfQogCiB2b2lkIGdlbmVyaWNfb3V0bCh1MzIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewotCWN0cmxfb3V0bChiLCAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKV9faW9wb3J0X21hcChwb3J0LCA0KSk7CisJX19yYXdfd3JpdGVsKGIsIF9faW9wb3J0X21hcChwb3J0LCA0KSk7CiB9CiAKIHZvaWQgZ2VuZXJpY19vdXRiX3AodTggYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCWdlbmVyaWNfb3V0YihiLCBwb3J0KTsKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIH0KIAogdm9pZCBnZW5lcmljX291dHdfcCh1MTYgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCWdlbmVyaWNfb3V0dyhiLCBwb3J0KTsKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIH0KIAogdm9pZCBnZW5lcmljX291dGxfcCh1MzIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCWdlbmVyaWNfb3V0bChiLCBwb3J0KTsKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIH0KIAogLyoKQEAgLTE4NCwzNiArMTc5LDYgQEAKIAlkdW1teV9yZWFkKCk7CiB9CiAKLXU4IGdlbmVyaWNfcmVhZGIodm9pZCBfX2lvbWVtICphZGRyKQotewotCXJldHVybiBjdHJsX2luYigodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHIpOwotfQotCi11MTYgZ2VuZXJpY19yZWFkdyh2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JcmV0dXJuIGN0cmxfaW53KCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcik7Ci19Ci0KLXUzMiBnZW5lcmljX3JlYWRsKHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlyZXR1cm4gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyKTsKLX0KLQotdm9pZCBnZW5lcmljX3dyaXRlYih1OCBiLCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JY3RybF9vdXRiKGIsICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcik7Ci19Ci0KLXZvaWQgZ2VuZXJpY193cml0ZXcodTE2IGIsIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQljdHJsX291dHcoYiwgKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyKTsKLX0KLQotdm9pZCBnZW5lcmljX3dyaXRlbCh1MzIgYiwgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWN0cmxfb3V0bChiLCAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHIpOwotfQotCiB2b2lkIF9faW9tZW0gKmdlbmVyaWNfaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBzaXplKQogewogCXJldHVybiAodm9pZCBfX2lvbWVtICopKGFkZHIgKyBnZW5lcmljX2lvX2Jhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9zaC9rZXJuZWwva3Byb2Jlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Njg1MGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTAsMCArMSw1ODQgQEAKKy8qCisgKiBLZXJuZWwgcHJvYmVzIChrcHJvYmVzKSBmb3IgU3VwZXJICisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IENocmlzIFNtaXRoIDxjaHJpcy5zbWl0aEBzdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGluZW8gU29sdXRpb25zLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworREVGSU5FX1BFUl9DUFUoc3RydWN0IGtwcm9iZSAqLCBjdXJyZW50X2twcm9iZSkgPSBOVUxMOworREVGSU5FX1BFUl9DUFUoc3RydWN0IGtwcm9iZV9jdGxibGssIGtwcm9iZV9jdGxibGspOworCitzdGF0aWMgc3RydWN0IGtwcm9iZSBzYXZlZF9jdXJyZW50X29wY29kZTsKK3N0YXRpYyBzdHJ1Y3Qga3Byb2JlIHNhdmVkX25leHRfb3Bjb2RlOworc3RhdGljIHN0cnVjdCBrcHJvYmUgc2F2ZWRfbmV4dF9vcGNvZGUyOworCisjZGVmaW5lIE9QQ09ERV9KTVAoeCkJKCgoeCkgJiAweEYwRkYpID09IDB4NDAyYikKKyNkZWZpbmUgT1BDT0RFX0pTUih4KQkoKCh4KSAmIDB4RjBGRikgPT0gMHg0MDBiKQorI2RlZmluZSBPUENPREVfQlJBKHgpCSgoKHgpICYgMHhGMDAwKSA9PSAweGEwMDApCisjZGVmaW5lIE9QQ09ERV9CUkFGKHgpCSgoKHgpICYgMHhGMEZGKSA9PSAweDAwMjMpCisjZGVmaW5lIE9QQ09ERV9CU1IoeCkJKCgoeCkgJiAweEYwMDApID09IDB4YjAwMCkKKyNkZWZpbmUgT1BDT0RFX0JTUkYoeCkJKCgoeCkgJiAweEYwRkYpID09IDB4MDAwMykKKworI2RlZmluZSBPUENPREVfQkZfUyh4KQkoKCh4KSAmIDB4RkYwMCkgPT0gMHg4ZjAwKQorI2RlZmluZSBPUENPREVfQlRfUyh4KQkoKCh4KSAmIDB4RkYwMCkgPT0gMHg4ZDAwKQorCisjZGVmaW5lIE9QQ09ERV9CRih4KQkoKCh4KSAmIDB4RkYwMCkgPT0gMHg4YjAwKQorI2RlZmluZSBPUENPREVfQlQoeCkJKCgoeCkgJiAweEZGMDApID09IDB4ODkwMCkKKworI2RlZmluZSBPUENPREVfUlRTKHgpCSgoKHgpICYgMHgwMDBGKSA9PSAweDAwMGIpCisjZGVmaW5lIE9QQ09ERV9SVEUoeCkJKCgoeCkgJiAweEZGRkYpID09IDB4MDAyYikKKworaW50IF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJa3Byb2JlX29wY29kZV90IG9wY29kZSA9ICooa3Byb2JlX29wY29kZV90ICopIChwLT5hZGRyKTsKKworCWlmIChPUENPREVfUlRFKG9wY29kZSkpCisJCXJldHVybiAtRUZBVUxUOwkvKiBCYWQgYnJlYWtwb2ludCAqLworCisJcC0+b3Bjb2RlID0gb3Bjb2RlOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19rcHJvYmVzIGFyY2hfY29weV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwltZW1jcHkocC0+YWluc24uaW5zbiwgcC0+YWRkciwgTUFYX0lOU05fU0laRSAqIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKKwlwLT5vcGNvZGUgPSAqcC0+YWRkcjsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9hcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJKnAtPmFkZHIgPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylwLT5hZGRyLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpcC0+YWRkciArIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9kaXNhcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJKnAtPmFkZHIgPSBwLT5vcGNvZGU7CisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIsCisJCQkgICAodW5zaWduZWQgbG9uZylwLT5hZGRyICsgc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCkpOworfQorCitpbnQgX19rcHJvYmVzIGFyY2hfdHJhbXBvbGluZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlpZiAoKnAtPmFkZHIgPT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBJZiBhbiBpbGxlZ2FsIHNsb3QgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIG9jY3VycyBmb3IgYW4gYWRkcmVzcworICogY29udGFpbmluZyBhIGtwcm9iZSwgcmVtb3ZlIHRoZSBwcm9iZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIGV4Y2VwdGlvbiB3YXMgaGFuZGxlZCBzdWNjZXNzZnVsbHksIDEgb3RoZXJ3aXNlLgorICovCitpbnQgX19rcHJvYmVzIGtwcm9iZV9oYW5kbGVfaWxsc2xvdCh1bnNpZ25lZCBsb25nIHBjKQoreworCXN0cnVjdCBrcHJvYmUgKnAgPSBnZXRfa3Byb2JlKChrcHJvYmVfb3Bjb2RlX3QgKikgcGMgKyAxKTsKKworCWlmIChwICE9IE5VTEwpIHsKKwkJcHJpbnRrKCJXYXJuaW5nOiByZW1vdmluZyBrcHJvYmUgZnJvbSBkZWxheSBzbG90OiAweCUuOHhcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KXBjICsgMik7CisJCXVucmVnaXN0ZXJfa3Byb2JlKHApOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJaWYgKHNhdmVkX25leHRfb3Bjb2RlLmFkZHIgIT0gMHgwKSB7CisJCWFyY2hfZGlzYXJtX2twcm9iZShwKTsKKwkJYXJjaF9kaXNhcm1fa3Byb2JlKCZzYXZlZF9uZXh0X29wY29kZSk7CisJCXNhdmVkX25leHRfb3Bjb2RlLmFkZHIgPSAweDA7CisJCXNhdmVkX25leHRfb3Bjb2RlLm9wY29kZSA9IDB4MDsKKworCQlpZiAoc2F2ZWRfbmV4dF9vcGNvZGUyLmFkZHIgIT0gMHgwKSB7CisJCQlhcmNoX2Rpc2FybV9rcHJvYmUoJnNhdmVkX25leHRfb3Bjb2RlMik7CisJCQlzYXZlZF9uZXh0X29wY29kZTIuYWRkciA9IDB4MDsKKwkJCXNhdmVkX25leHRfb3Bjb2RlMi5vcGNvZGUgPSAweDA7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQoreworCWtjYi0+cHJldl9rcHJvYmUua3AgPSBrcHJvYmVfcnVubmluZygpOworCWtjYi0+cHJldl9rcHJvYmUuc3RhdHVzID0ga2NiLT5rcHJvYmVfc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3sKKwlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IGtjYi0+cHJldl9rcHJvYmUua3A7CisJa2NiLT5rcHJvYmVfc3RhdHVzID0ga2NiLT5wcmV2X2twcm9iZS5zdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSBzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQoreworCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0gcDsKK30KKworLyoKKyAqIFNpbmdsZXN0ZXAgaXMgaW1wbGVtZW50ZWQgYnkgZGlzYWJsaW5nIHRoZSBjdXJyZW50IGtwcm9iZSBhbmQgc2V0dGluZyBvbmUKKyAqIG9uIHRoZSBuZXh0IGluc3RydWN0aW9uLCBmb2xsb3dpbmcgYnJhbmNoZXMuIFR3byBwcm9iZXMgYXJlIHNldCBpZiB0aGUKKyAqIGJyYW5jaCBpcyBjb25kaXRpb25hbC4KKyAqLworc3RhdGljIHZvaWQgX19rcHJvYmVzIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHIgPSBOVUxMOworCXNhdmVkX2N1cnJlbnRfb3Bjb2RlLmFkZHIgPSAoa3Byb2JlX29wY29kZV90ICopIChyZWdzLT5wYyk7CisJYWRkciA9IHNhdmVkX2N1cnJlbnRfb3Bjb2RlLmFkZHI7CisKKwlpZiAocCAhPSBOVUxMKSB7CisJCWFyY2hfZGlzYXJtX2twcm9iZShwKTsKKworCQlpZiAoT1BDT0RFX0pTUihwLT5vcGNvZGUpIHx8IE9QQ09ERV9KTVAocC0+b3Bjb2RlKSkgeworCQkJdW5zaWduZWQgaW50IHJlZ19uciA9ICgocC0+b3Bjb2RlID4+IDgpICYgMHgwMDBGKTsKKwkJCXNhdmVkX25leHRfb3Bjb2RlLmFkZHIgPQorCQkJICAgIChrcHJvYmVfb3Bjb2RlX3QgKikgcmVncy0+cmVnc1tyZWdfbnJdOworCQl9IGVsc2UgaWYgKE9QQ09ERV9CUkEocC0+b3Bjb2RlKSB8fCBPUENPREVfQlNSKHAtPm9wY29kZSkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZGlzcCA9IChwLT5vcGNvZGUgJiAweDBGRkYpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9CisJCQkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSAocmVncy0+cGMgKyA0ICsgZGlzcCAqIDIpOworCisJCX0gZWxzZSBpZiAoT1BDT0RFX0JSQUYocC0+b3Bjb2RlKSB8fCBPUENPREVfQlNSRihwLT5vcGNvZGUpKSB7CisJCQl1bnNpZ25lZCBpbnQgcmVnX25yID0gKChwLT5vcGNvZGUgPj4gOCkgJiAweDAwMEYpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9CisJCQkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSAocmVncy0+cGMgKyA0ICsKKwkJCQkJCSByZWdzLT5yZWdzW3JlZ19ucl0pOworCisJCX0gZWxzZSBpZiAoT1BDT0RFX1JUUyhwLT5vcGNvZGUpKSB7CisJCQlzYXZlZF9uZXh0X29wY29kZS5hZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSByZWdzLT5wcjsKKworCQl9IGVsc2UgaWYgKE9QQ09ERV9CRihwLT5vcGNvZGUpIHx8IE9QQ09ERV9CVChwLT5vcGNvZGUpKSB7CisJCQl1bnNpZ25lZCBsb25nIGRpc3AgPSAocC0+b3Bjb2RlICYgMHgwMEZGKTsKKwkJCS8qIGNhc2UgMSAqLworCQkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9IHAtPmFkZHIgKyAxOworCQkJLyogY2FzZSAyICovCisJCQlzYXZlZF9uZXh0X29wY29kZTIuYWRkciA9CisJCQkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSAocmVncy0+cGMgKyA0ICsgZGlzcCAqIDIpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUyLm9wY29kZSA9ICooc2F2ZWRfbmV4dF9vcGNvZGUyLmFkZHIpOworCQkJYXJjaF9hcm1fa3Byb2JlKCZzYXZlZF9uZXh0X29wY29kZTIpOworCisJCX0gZWxzZSBpZiAoT1BDT0RFX0JGX1MocC0+b3Bjb2RlKSB8fCBPUENPREVfQlRfUyhwLT5vcGNvZGUpKSB7CisJCQl1bnNpZ25lZCBsb25nIGRpc3AgPSAocC0+b3Bjb2RlICYgMHgwMEZGKTsKKwkJCS8qIGNhc2UgMSAqLworCQkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9IHAtPmFkZHIgKyAyOworCQkJLyogY2FzZSAyICovCisJCQlzYXZlZF9uZXh0X29wY29kZTIuYWRkciA9CisJCQkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSAocmVncy0+cGMgKyA0ICsgZGlzcCAqIDIpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUyLm9wY29kZSA9ICooc2F2ZWRfbmV4dF9vcGNvZGUyLmFkZHIpOworCQkJYXJjaF9hcm1fa3Byb2JlKCZzYXZlZF9uZXh0X29wY29kZTIpOworCisJCX0gZWxzZSB7CisJCQlzYXZlZF9uZXh0X29wY29kZS5hZGRyID0gcC0+YWRkciArIDE7CisJCX0KKworCQlzYXZlZF9uZXh0X29wY29kZS5vcGNvZGUgPSAqKHNhdmVkX25leHRfb3Bjb2RlLmFkZHIpOworCQlhcmNoX2FybV9rcHJvYmUoJnNhdmVkX25leHRfb3Bjb2RlKTsKKwl9Cit9CisKKy8qIENhbGxlZCB3aXRoIGtyZXRwcm9iZV9sb2NrIGhlbGQgKi8KK3ZvaWQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCisJCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmktPnJldF9hZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSByZWdzLT5wcjsKKworCS8qIFJlcGxhY2UgdGhlIHJldHVybiBhZGRyIHdpdGggdHJhbXBvbGluZSBhZGRyICovCisJcmVncy0+cHIgPSAodW5zaWduZWQgbG9uZylrcmV0cHJvYmVfdHJhbXBvbGluZTsKK30KKworc3RhdGljIGludCBfX2twcm9iZXMga3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZSAqcDsKKwlpbnQgcmV0ID0gMDsKKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2I7CisKKwkvKgorCSAqIFdlIGRvbid0IHdhbnQgdG8gYmUgcHJlZW1wdGVkIGZvciB0aGUgZW50aXJlCisJICogZHVyYXRpb24gb2Yga3Byb2JlIHByb2Nlc3NpbmcKKwkgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlrY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCisJYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgKHJlZ3MtPnBjKTsKKworCS8qIENoZWNrIHdlJ3JlIG5vdCBhY3R1YWxseSByZWN1cnNpbmcgKi8KKwlpZiAoa3Byb2JlX3J1bm5pbmcoKSkgeworCQlwID0gZ2V0X2twcm9iZShhZGRyKTsKKwkJaWYgKHApIHsKKwkJCWlmIChrY2ItPmtwcm9iZV9zdGF0dXMgPT0gS1BST0JFX0hJVF9TUyAmJgorCQkJICAgICpwLT5haW5zbi5pbnNuID09IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04pIHsKKwkJCQlnb3RvIG5vX2twcm9iZTsKKwkJCX0KKwkJCS8qIFdlIGhhdmUgcmVlbnRlcmVkIHRoZSBrcHJvYmVfaGFuZGxlcigpLCBzaW5jZQorCQkJICogYW5vdGhlciBwcm9iZSB3YXMgaGl0IHdoaWxlIHdpdGhpbiB0aGUgaGFuZGxlci4KKwkJCSAqIFdlIGhlcmUgc2F2ZSB0aGUgb3JpZ2luYWwga3Byb2JlcyB2YXJpYWJsZXMgYW5kCisJCQkgKiBqdXN0IHNpbmdsZSBzdGVwIG9uIHRoZSBpbnN0cnVjdGlvbiBvZiB0aGUgbmV3IHByb2JlCisJCQkgKiB3aXRob3V0IGNhbGxpbmcgYW55IHVzZXIgaGFuZGxlcnMuCisJCQkgKi8KKwkJCXNhdmVfcHJldmlvdXNfa3Byb2JlKGtjYik7CisJCQlzZXRfY3VycmVudF9rcHJvYmUocCwgcmVncywga2NiKTsKKwkJCWtwcm9iZXNfaW5jX25taXNzZWRfY291bnQocCk7CisJCQlwcmVwYXJlX3NpbmdsZXN0ZXAocCwgcmVncyk7CisJCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfUkVFTlRFUjsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJcCA9IF9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpOworCQkJaWYgKHAtPmJyZWFrX2hhbmRsZXIgJiYgcC0+YnJlYWtfaGFuZGxlcihwLCByZWdzKSkgeworCQkJCWdvdG8gc3NfcHJvYmU7CisJCQl9CisJCX0KKwkJZ290byBub19rcHJvYmU7CisJfQorCisJcCA9IGdldF9rcHJvYmUoYWRkcik7CisJaWYgKCFwKSB7CisJCS8qIE5vdCBvbmUgb2Ygb3VyczogbGV0IGtlcm5lbCBoYW5kbGUgaXQgKi8KKwkJaWYgKCooa3Byb2JlX29wY29kZV90ICopYWRkciAhPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKSB7CisJCQkvKgorCQkJICogVGhlIGJyZWFrcG9pbnQgaW5zdHJ1Y3Rpb24gd2FzIHJlbW92ZWQgcmlnaHQKKwkJCSAqIGFmdGVyIHdlIGhpdCBpdC4gQW5vdGhlciBjcHUgaGFzIHJlbW92ZWQKKwkJCSAqIGVpdGhlciBhIHByb2JlcG9pbnQgb3IgYSBkZWJ1Z2dlciBicmVha3BvaW50CisJCQkgKiBhdCB0aGlzIGFkZHJlc3MuIEluIGVpdGhlciBjYXNlLCBubyBmdXJ0aGVyCisJCQkgKiBoYW5kbGluZyBvZiB0aGlzIGludGVycnVwdCBpcyBhcHByb3ByaWF0ZS4KKwkJCSAqLworCQkJcmV0ID0gMTsKKwkJfQorCisJCWdvdG8gbm9fa3Byb2JlOworCX0KKworCXNldF9jdXJyZW50X2twcm9iZShwLCByZWdzLCBrY2IpOworCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfQUNUSVZFOworCisJaWYgKHAtPnByZV9oYW5kbGVyICYmIHAtPnByZV9oYW5kbGVyKHAsIHJlZ3MpKQorCQkvKiBoYW5kbGVyIGhhcyBhbHJlYWR5IHNldCB0aGluZ3MgdXAsIHNvIHNraXAgc3Mgc2V0dXAgKi8KKwkJcmV0dXJuIDE7CisKK3NzX3Byb2JlOgorCXByZXBhcmVfc2luZ2xlc3RlcChwLCByZWdzKTsKKwlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTOworCXJldHVybiAxOworCitub19rcHJvYmU6CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBGb3IgZnVuY3Rpb24tcmV0dXJuIHByb2JlcywgaW5pdF9rcHJvYmVzKCkgZXN0YWJsaXNoZXMgYSBwcm9iZXBvaW50CisgKiBoZXJlLiBXaGVuIGEgcmV0cHJvYmVkIGZ1bmN0aW9uIHJldHVybnMsIHRoaXMgcHJvYmUgaXMgaGl0IGFuZAorICogdHJhbXBvbGluZV9wcm9iZV9oYW5kbGVyKCkgcnVucywgY2FsbGluZyB0aGUga3JldHByb2JlJ3MgaGFuZGxlci4KKyAqLworc3RhdGljIHZvaWQgX191c2VkIGtyZXRwcm9iZV90cmFtcG9saW5lX2hvbGRlcih2b2lkKQoreworCWFzbSB2b2xhdGlsZSAoIi5nbG9ibCBrcmV0cHJvYmVfdHJhbXBvbGluZVxuIgorCQkgICAgICAia3JldHByb2JlX3RyYW1wb2xpbmU6XG5cdCIKKwkJICAgICAgIm5vcFxuIik7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiB3ZSBoaXQgdGhlIHByb2JlIHBvaW50IGF0IGtyZXRwcm9iZV90cmFtcG9saW5lCisgKi8KK2ludCBfX2twcm9iZXMgdHJhbXBvbGluZV9wcm9iZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpID0gTlVMTDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwgZW1wdHlfcnA7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFncywgb3JpZ19yZXRfYWRkcmVzcyA9IDA7CisJdW5zaWduZWQgbG9uZyB0cmFtcG9saW5lX2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZykma3JldHByb2JlX3RyYW1wb2xpbmU7CisKKwlJTklUX0hMSVNUX0hFQUQoJmVtcHR5X3JwKTsKKwlrcmV0cHJvYmVfaGFzaF9sb2NrKGN1cnJlbnQsICZoZWFkLCAmZmxhZ3MpOworCisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbgorCSAqIHRhc2sgZWl0aGVyIGJlY2F1c2UgYW4gbXVsdGlwbGUgZnVuY3Rpb25zIGluIHRoZSBjYWxsIHBhdGgKKwkgKiBoYXZlIGEgcmV0dXJuIHByb2JlIGluc3RhbGxlZCBvbiB0aGVtLCBhbmQvb3IgbW9yZSB0aGVuIG9uZSByZXR1cm4KKwkgKiByZXR1cm4gcHJvYmUgd2FzIHJlZ2lzdGVyZWQgZm9yIGEgdGFyZ2V0IGZ1bmN0aW9uLgorCSAqCisJICogV2UgY2FuIGhhbmRsZSB0aGlzIGJlY2F1c2U6CisJICogICAgIC0gaW5zdGFuY2VzIGFyZSBhbHdheXMgaW5zZXJ0ZWQgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QKKwkgKiAgICAgLSB3aGVuIG11bHRpcGxlIHJldHVybiBwcm9iZXMgYXJlIHJlZ2lzdGVyZWQgZm9yIHRoZSBzYW1lCisJICogICAgICAgZnVuY3Rpb24sIHRoZSBmaXJzdCBpbnN0YW5jZSdzIHJldF9hZGRyIHdpbGwgcG9pbnQgdG8gdGhlCisJICogICAgICAgcmVhbCByZXR1cm4gYWRkcmVzcywgYW5kIGFsbCB0aGUgcmVzdCB3aWxsIHBvaW50IHRvCisJICogICAgICAga3JldHByb2JlX3RyYW1wb2xpbmUKKwkgKi8KKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJpLCBub2RlLCB0bXAsIGhlYWQsIGhsaXN0KSB7CisJCWlmIChyaS0+dGFzayAhPSBjdXJyZW50KQorCQkJLyogYW5vdGhlciB0YXNrIGlzIHNoYXJpbmcgb3VyIGhhc2ggYnVja2V0ICovCisJCQljb250aW51ZTsKKworCQlpZiAocmktPnJwICYmIHJpLT5ycC0+aGFuZGxlcikgeworCQkJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSAmcmktPnJwLT5rcDsKKwkJCXJpLT5ycC0+aGFuZGxlcihyaSwgcmVncyk7CisJCQlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IE5VTEw7CisJCX0KKworCQlvcmlnX3JldF9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpcmktPnJldF9hZGRyOworCQlyZWN5Y2xlX3JwX2luc3QocmksICZlbXB0eV9ycCk7CisKKwkJaWYgKG9yaWdfcmV0X2FkZHJlc3MgIT0gdHJhbXBvbGluZV9hZGRyZXNzKQorCQkJLyoKKwkJCSAqIFRoaXMgaXMgdGhlIHJlYWwgcmV0dXJuIGFkZHJlc3MuIEFueSBvdGhlcgorCQkJICogaW5zdGFuY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhc2sgYXJlIGZvcgorCQkJICogb3RoZXIgY2FsbHMgZGVlcGVyIG9uIHRoZSBjYWxsIHN0YWNrCisJCQkgKi8KKwkJCWJyZWFrOworCX0KKworCWtyZXRwcm9iZV9hc3NlcnQocmksIG9yaWdfcmV0X2FkZHJlc3MsIHRyYW1wb2xpbmVfYWRkcmVzcyk7CisKKwlyZWdzLT5wYyA9IG9yaWdfcmV0X2FkZHJlc3M7CisJa3JldHByb2JlX2hhc2hfdW5sb2NrKGN1cnJlbnQsICZmbGFncyk7CisKKwlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJpLCBub2RlLCB0bXAsICZlbXB0eV9ycCwgaGxpc3QpIHsKKwkJaGxpc3RfZGVsKCZyaS0+aGxpc3QpOworCQlrZnJlZShyaSk7CisJfQorCisJcmV0dXJuIG9yaWdfcmV0X2FkZHJlc3M7Cit9CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzIHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBrcHJvYmUgKnAgPSBOVUxMOworCisJaWYgKCFjdXIpCisJCXJldHVybiAwOworCisJaWYgKChrY2ItPmtwcm9iZV9zdGF0dXMgIT0gS1BST0JFX1JFRU5URVIpICYmIGN1ci0+cG9zdF9oYW5kbGVyKSB7CisJCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfU1NET05FOworCQljdXItPnBvc3RfaGFuZGxlcihjdXIsIHJlZ3MsIDApOworCX0KKworCWlmIChzYXZlZF9uZXh0X29wY29kZS5hZGRyICE9IDB4MCkgeworCQlhcmNoX2Rpc2FybV9rcHJvYmUoJnNhdmVkX25leHRfb3Bjb2RlKTsKKwkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9IDB4MDsKKwkJc2F2ZWRfbmV4dF9vcGNvZGUub3Bjb2RlID0gMHgwOworCisJCWFkZHIgPSBzYXZlZF9jdXJyZW50X29wY29kZS5hZGRyOworCQlzYXZlZF9jdXJyZW50X29wY29kZS5hZGRyID0gMHgwOworCisJCXAgPSBnZXRfa3Byb2JlKGFkZHIpOworCQlhcmNoX2FybV9rcHJvYmUocCk7CisKKwkJaWYgKHNhdmVkX25leHRfb3Bjb2RlMi5hZGRyICE9IDB4MCkgeworCQkJYXJjaF9kaXNhcm1fa3Byb2JlKCZzYXZlZF9uZXh0X29wY29kZTIpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUyLmFkZHIgPSAweDA7CisJCQlzYXZlZF9uZXh0X29wY29kZTIub3Bjb2RlID0gMHgwOworCQl9CisJfQorCisJLyogUmVzdG9yZSBiYWNrIHRoZSBvcmlnaW5hbCBzYXZlZCBrcHJvYmVzIHZhcmlhYmxlcyBhbmQgY29udGludWUuICovCisJaWYgKGtjYi0+a3Byb2JlX3N0YXR1cyA9PSBLUFJPQkVfUkVFTlRFUikgeworCQlyZXN0b3JlX3ByZXZpb3VzX2twcm9iZShrY2IpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXNldF9jdXJyZW50X2twcm9iZSgpOworCitvdXQ6CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCisJcmV0dXJuIDE7Cit9CisKK2ludCBfX2twcm9iZXMga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCit7CisJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKwljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICplbnRyeTsKKworCXN3aXRjaCAoa2NiLT5rcHJvYmVfc3RhdHVzKSB7CisJY2FzZSBLUFJPQkVfSElUX1NTOgorCWNhc2UgS1BST0JFX1JFRU5URVI6CisJCS8qCisJCSAqIFdlIGFyZSBoZXJlIGJlY2F1c2UgdGhlIGluc3RydWN0aW9uIGJlaW5nIHNpbmdsZQorCQkgKiBzdGVwcGVkIGNhdXNlZCBhIHBhZ2UgZmF1bHQuIFdlIHJlc2V0IHRoZSBjdXJyZW50CisJCSAqIGtwcm9iZSwgcG9pbnQgdGhlIHBjIGJhY2sgdG8gdGhlIHByb2JlIGFkZHJlc3MKKwkJICogYW5kIGFsbG93IHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gY29udGludWUgYXMgYQorCQkgKiBub3JtYWwgcGFnZSBmYXVsdC4KKwkJICovCisJCXJlZ3MtPnBjID0gKHVuc2lnbmVkIGxvbmcpY3VyLT5hZGRyOworCQlpZiAoa2NiLT5rcHJvYmVfc3RhdHVzID09IEtQUk9CRV9SRUVOVEVSKQorCQkJcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoa2NiKTsKKwkJZWxzZQorCQkJcmVzZXRfY3VycmVudF9rcHJvYmUoKTsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCQlicmVhazsKKwljYXNlIEtQUk9CRV9ISVRfQUNUSVZFOgorCWNhc2UgS1BST0JFX0hJVF9TU0RPTkU6CisJCS8qCisJCSAqIFdlIGluY3JlbWVudCB0aGUgbm1pc3NlZCBjb3VudCBmb3IgYWNjb3VudGluZywKKwkJICogd2UgY2FuIGFsc28gdXNlIG5wcmUvbnBvc3RmYXVsdCBjb3VudCBmb3IgYWNjb3VudGluZworCQkgKiB0aGVzZSBzcGVjaWZpYyBmYXVsdCBjYXNlcy4KKwkJICovCisJCWtwcm9iZXNfaW5jX25taXNzZWRfY291bnQoY3VyKTsKKworCQkvKgorCQkgKiBXZSBjb21lIGhlcmUgYmVjYXVzZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHByZS9wb3N0CisJCSAqIGhhbmRsZXIgY2F1c2VkIHRoZSBwYWdlX2ZhdWx0LCB0aGlzIGNvdWxkIGhhcHBlbgorCQkgKiBpZiBoYW5kbGVyIHRyaWVzIHRvIGFjY2VzcyB1c2VyIHNwYWNlIGJ5CisJCSAqIGNvcHlfZnJvbV91c2VyKCksIGdldF91c2VyKCkgZXRjLiBMZXQgdGhlCisJCSAqIHVzZXItc3BlY2lmaWVkIGhhbmRsZXIgdHJ5IHRvIGZpeCBpdCBmaXJzdC4KKwkJICovCisJCWlmIChjdXItPmZhdWx0X2hhbmRsZXIgJiYgY3VyLT5mYXVsdF9oYW5kbGVyKGN1ciwgcmVncywgdHJhcG5yKSkKKwkJCXJldHVybiAxOworCisJCS8qCisJCSAqIEluIGNhc2UgdGhlIHVzZXItc3BlY2lmaWVkIGZhdWx0IGhhbmRsZXIgcmV0dXJuZWQKKwkJICogemVybywgdHJ5IHRvIGZpeCB1cC4KKwkJICovCisJCWlmICgoZW50cnkgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5wYykpICE9IE5VTEwpIHsKKwkJCXJlZ3MtPnBjID0gZW50cnktPmZpeHVwOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKgorCQkgKiBmaXh1cF9leGNlcHRpb24oKSBjb3VsZCBub3QgaGFuZGxlIGl0LAorCQkgKiBMZXQgZG9fcGFnZV9mYXVsdCgpIGZpeCBpdC4KKwkJICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogV3JhcHBlciByb3V0aW5lIHRvIGZvciBoYW5kbGluZyBleGNlcHRpb25zLgorICovCitpbnQgX19rcHJvYmVzIGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBrcHJvYmUgKnAgPSBOVUxMOworCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IChzdHJ1Y3QgZGllX2FyZ3MgKilkYXRhOworCWludCByZXQgPSBOT1RJRllfRE9ORTsKKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCisJYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgKGFyZ3MtPnJlZ3MtPnBjKTsKKwlpZiAodmFsID09IERJRV9UUkFQKSB7CisJCWlmICgha3Byb2JlX3J1bm5pbmcoKSkgeworCQkJaWYgKGtwcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKSB7CisJCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCQl9IGVsc2UgeworCQkJCS8qIE5vdCBhIGtwcm9iZSB0cmFwICovCisJCQkJcmV0ID0gTk9USUZZX0RPTkU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwID0gZ2V0X2twcm9iZShhZGRyKTsKKwkJCWlmICgoa2NiLT5rcHJvYmVfc3RhdHVzID09IEtQUk9CRV9ISVRfU1MpIHx8CisJCQkgICAgKGtjYi0+a3Byb2JlX3N0YXR1cyA9PSBLUFJPQkVfUkVFTlRFUikpIHsKKwkJCQlpZiAocG9zdF9rcHJvYmVfaGFuZGxlcihhcmdzLT5yZWdzKSkKKwkJCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCQl9IGVsc2UgeworCQkJCWlmIChrcHJvYmVfaGFuZGxlcihhcmdzLT5yZWdzKSkgeworCQkJCQlyZXQgPSBOT1RJRllfU1RPUDsKKwkJCQl9IGVsc2UgeworCQkJCQlwID0gX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSk7CisJCQkJCWlmIChwLT5icmVha19oYW5kbGVyICYmCisJCQkJCSAgICBwLT5icmVha19oYW5kbGVyKHAsIGFyZ3MtPnJlZ3MpKQorCQkJCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IF9fa3Byb2JlcyBzZXRqbXBfcHJlX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGpwcm9iZSAqanAgPSBjb250YWluZXJfb2YocCwgc3RydWN0IGpwcm9iZSwga3ApOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKworCWtjYi0+anByb2JlX3NhdmVkX3JlZ3MgPSAqcmVnczsKKwlrY2ItPmpwcm9iZV9zYXZlZF9yMTUgPSByZWdzLT5yZWdzWzE1XTsKKwlhZGRyID0ga2NiLT5qcHJvYmVfc2F2ZWRfcjE1OworCisJLyoKKwkgKiBUQkQ6IEFzIExpbnVzIHBvaW50ZWQgb3V0LCBnY2MgYXNzdW1lcyB0aGF0IHRoZSBjYWxsZWUKKwkgKiBvd25zIHRoZSBhcmd1bWVudCBzcGFjZSBhbmQgY291bGQgb3ZlcndyaXRlIGl0LCBlLmcuCisJICogdGFpbGNhbGwgb3B0aW1pemF0aW9uLiBTbywgdG8gYmUgYWJzb2x1dGVseSBzYWZlCisJICogd2UgYWxzbyBzYXZlIGFuZCByZXN0b3JlIGVub3VnaCBzdGFjayBieXRlcyB0byBjb3ZlcgorCSAqIHRoZSBhcmd1bWVudCBhcmVhLgorCSAqLworCW1lbWNweShrY2ItPmpwcm9iZXNfc3RhY2ssIChrcHJvYmVfb3Bjb2RlX3QgKikgYWRkciwKKwkgICAgICAgTUlOX1NUQUNLX1NJWkUoYWRkcikpOworCisJcmVncy0+cGMgPSAodW5zaWduZWQgbG9uZykoanAtPmVudHJ5KTsKKworCXJldHVybiAxOworfQorCit2b2lkIF9fa3Byb2JlcyBqcHJvYmVfcmV0dXJuKHZvaWQpCit7CisJYXNtIHZvbGF0aWxlICgidHJhcGEgIzB4M2Fcblx0IiAianByb2JlX3JldHVybl9lbmQ6XG5cdCIgIm5vcFxuXHQiKTsKK30KKworaW50IF9fa3Byb2JlcyBsb25nam1wX2JyZWFrX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CisJdW5zaWduZWQgbG9uZyBzdGFja19hZGRyID0ga2NiLT5qcHJvYmVfc2F2ZWRfcjE1OworCXU4ICphZGRyID0gKHU4ICopcmVncy0+cGM7CisKKwlpZiAoKGFkZHIgPj0gKHU4ICopanByb2JlX3JldHVybikgJiYKKwkgICAgKGFkZHIgPD0gKHU4ICopanByb2JlX3JldHVybl9lbmQpKSB7CisJCSpyZWdzID0ga2NiLT5qcHJvYmVfc2F2ZWRfcmVnczsKKworCQltZW1jcHkoKGtwcm9iZV9vcGNvZGVfdCAqKXN0YWNrX2FkZHIsIGtjYi0+anByb2Jlc19zdGFjaywKKwkJICAgICAgIE1JTl9TVEFDS19TSVpFKHN0YWNrX2FkZHIpKTsKKworCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGtwcm9iZSB0cmFtcG9saW5lX3AgPSB7CisJLmFkZHIgPSAoa3Byb2JlX29wY29kZV90ICopJmtyZXRwcm9iZV90cmFtcG9saW5lLAorCS5wcmVfaGFuZGxlciA9IHRyYW1wb2xpbmVfcHJvYmVfaGFuZGxlcgorfTsKKworaW50IF9faW5pdCBhcmNoX2luaXRfa3Byb2Jlcyh2b2lkKQoreworCXNhdmVkX25leHRfb3Bjb2RlLmFkZHIgPSAweDA7CisJc2F2ZWRfbmV4dF9vcGNvZGUub3Bjb2RlID0gMHgwOworCisJc2F2ZWRfY3VycmVudF9vcGNvZGUuYWRkciA9IDB4MDsKKwlzYXZlZF9jdXJyZW50X29wY29kZS5vcGNvZGUgPSAweDA7CisKKwlzYXZlZF9uZXh0X29wY29kZTIuYWRkciA9IDB4MDsKKwlzYXZlZF9uZXh0X29wY29kZTIub3Bjb2RlID0gMHgwOworCisJcmV0dXJuIHJlZ2lzdGVyX2twcm9iZSgmdHJhbXBvbGluZV9wKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYyBiL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYwppbmRleCAxMjliMmNmLi5jMWVhNDFlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9tYWNodmVjLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvbWFjaHZlYy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKQEAgLTEyNSw5ICsxMjYsNiBAQAogCW12X3NldChpbnNiKTsJbXZfc2V0KGluc3cpOwltdl9zZXQoaW5zbCk7CiAJbXZfc2V0KG91dHNiKTsJbXZfc2V0KG91dHN3KTsJbXZfc2V0KG91dHNsKTsKIAotCW12X3NldChyZWFkYik7CW12X3NldChyZWFkdyk7CW12X3NldChyZWFkbCk7Ci0JbXZfc2V0KHdyaXRlYik7CW12X3NldCh3cml0ZXcpOwltdl9zZXQod3JpdGVsKTsKLQogCW12X3NldChpb3BvcnRfbWFwKTsKIAltdl9zZXQoaW9wb3J0X3VubWFwKTsKIAltdl9zZXQoaXJxX2RlbXV4KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYwppbmRleCAzMzI2YTQ1Li5iOTY1ZjAyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC03LDcgKzcsMTEgQEAKICAqCiAgKiAgU3VwZXJIIHZlcnNpb246ICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIE5paWJlIFl1dGFrYSAmIEtheiBLb2ppbWEKICAqCQkgICAgIENvcHlyaWdodCAoQykgMjAwNiBMaW5lbyBTb2x1dGlvbnMgSW5jLiBzdXBwb3J0IFNINEEgVUJDCi0gKgkJICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA3ICBQYXVsIE11bmR0CisgKgkJICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA4ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMjYsNiArMzAsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWJjLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgorI2luY2x1ZGUgPGFzbS9zeXNjYWxscy5oPgogCiBzdGF0aWMgaW50IGhsdF9jb3VudGVyOwogaW50IHViY191c2VyY250ID0gMDsKQEAgLTExMSwxNSArMTE2LDIxIEBACiB7CiAJcHJpbnRrKCJcbiIpOwogCXByaW50aygiUGlkIDogJWQsIENvbW06ICUyMHNcbiIsIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBjdXJyZW50LT5jb21tKTsKKwlwcmludGsoIkNQVSA6ICVkICAgICVzICAoJXMgJS4qcylcbiIsCisJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgcHJpbnRfdGFpbnRlZCgpLCBpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKKwkgICAgICAgKGludClzdHJjc3BuKGluaXRfdXRzbmFtZSgpLT52ZXJzaW9uLCAiICIpLAorCSAgICAgICBpbml0X3V0c25hbWUoKS0+dmVyc2lvbik7CisKIAlwcmludF9zeW1ib2woIlBDIGlzIGF0ICVzXG4iLCBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpKTsKKwlwcmludF9zeW1ib2woIlBSIGlzIGF0ICVzXG4iLCByZWdzLT5wcik7CisKIAlwcmludGsoIlBDICA6ICUwOGx4IFNQICA6ICUwOGx4IFNSICA6ICUwOGx4ICIsCiAJICAgICAgIHJlZ3MtPnBjLCByZWdzLT5yZWdzWzE1XSwgcmVncy0+c3IpOwogI2lmZGVmIENPTkZJR19NTVUKLQlwcmludGsoIlRFQSA6ICUwOHggICAgIiwgY3RybF9pbmwoTU1VX1RFQSkpOworCXByaW50aygiVEVBIDogJTA4eFxuIiwgY3RybF9pbmwoTU1VX1RFQSkpOwogI2Vsc2UKLQlwcmludGsoIiAgICAgICAgICAgICAgICAgICIpOworCXByaW50aygiXG4iKTsKICNlbmRpZgotCXByaW50aygiJXNcbiIsIHByaW50X3RhaW50ZWQoKSk7CiAKIAlwcmludGsoIlIwICA6ICUwOGx4IFIxICA6ICUwOGx4IFIyICA6ICUwOGx4IFIzICA6ICUwOGx4XG4iLAogCSAgICAgICByZWdzLT5yZWdzWzBdLHJlZ3MtPnJlZ3NbMV0sCkBAIC0xNjIsNiArMTczLDcgQEAKIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisJaW50IHBpZDsKIAogCW1lbXNldCgmcmVncywgMCwgc2l6ZW9mKHJlZ3MpKTsKIAlyZWdzLnJlZ3NbNF0gPSAodW5zaWduZWQgbG9uZylhcmc7CkBAIC0xNzEsOCArMTgzLDEyIEBACiAJcmVncy5zciA9ICgxIDw8IDMwKTsKIAogCS8qIE9rLCBjcmVhdGUgdGhlIG5ldyBwcm9jZXNzLi4gKi8KLQlyZXR1cm4gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsIDAsCi0JCSAgICAgICAmcmVncywgMCwgTlVMTCwgTlVMTCk7CisJcGlkID0gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsIDAsCisJCSAgICAgICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKKworCXRyYWNlX21hcmsoa2VybmVsX2FyY2hfa3RocmVhZF9jcmVhdGUsICJwaWQgJWQgZm4gJXAiLCBwaWQsIGZuKTsKKworCXJldHVybiBwaWQ7CiB9CiAKIC8qCkBAIC0yMTAsMTAgKzIyNiwxMCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAogCWZwdmFsaWQgPSAhIXRza191c2VkX21hdGgodHNrKTsKLQlpZiAoZnB2YWxpZCkgewotCQl1bmxhenlfZnB1KHRzaywgcmVncyk7Ci0JCW1lbWNweShmcHUsICZ0c2stPnRocmVhZC5mcHUuaGFyZCwgc2l6ZW9mKCpmcHUpKTsKLQl9CisJaWYgKGZwdmFsaWQpCisJCWZwdmFsaWQgPSAhZnByZWdzX2dldCh0c2ssIE5VTEwsIDAsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB1c2VyX2ZwdV9zdHJ1Y3QpLAorCQkJCSAgICAgIGZwdSwgTlVMTCk7CiAjZW5kaWYKIAogCXJldHVybiBmcHZhbGlkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGI5ZGJkMmQuLmI3YWEwOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CkBAIC0zOTUsNiArMzk2LDcgQEAKIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisJaW50IHBpZDsKIAogCW1lbXNldCgmcmVncywgMCwgc2l6ZW9mKHJlZ3MpKTsKIAlyZWdzLnJlZ3NbMl0gPSAodW5zaWduZWQgbG9uZylhcmc7CkBAIC00MDMsOCArNDA1LDEzIEBACiAJcmVncy5wYyA9ICh1bnNpZ25lZCBsb25nKWtlcm5lbF90aHJlYWRfaGVscGVyOwogCXJlZ3Muc3IgPSAoMSA8PCAzMCk7CiAKLQlyZXR1cm4gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsIDAsCi0JCSAgICAgICAmcmVncywgMCwgTlVMTCwgTlVMTCk7CisJLyogT2ssIGNyZWF0ZSB0aGUgbmV3IHByb2Nlc3MuLiAqLworCXBpZCA9IGRvX2ZvcmsoZmxhZ3MgfCBDTE9ORV9WTSB8IENMT05FX1VOVFJBQ0VELCAwLAorCQkgICAgICAmcmVncywgMCwgTlVMTCwgTlVMTCk7CisKKwl0cmFjZV9tYXJrKGtlcm5lbF9hcmNoX2t0aHJlYWRfY3JlYXRlLCAicGlkICVkIGZuICVwIiwgcGlkLCBmbik7CisKKwlyZXR1cm4gcGlkOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwppbmRleCAwMzVjYjMwLi4yOWNhMDlkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwpAQCAtMSwxMiArMSwxNCBAQAogLyoKLSAqIGxpbnV4L2FyY2gvc2gva2VybmVsL3B0cmFjZS5jCisgKiBTdXBlckggcHJvY2VzcyB0cmFjaW5nCiAgKgotICogT3JpZ2luYWwgeDg2IGltcGxlbWVudGF0aW9uOgotICoJQnkgUm9zcyBCaXJvIDEvMjMvOTIKLSAqCWVkaXRlZCBieSBMaW51cyBUb3J2YWxkcworICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBLYXogS29qaW1hICYgTmlpYmUgWXV0YWthCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA4ICBQYXVsIE11bmR0CiAgKgotICogU3VwZXJIIHZlcnNpb246ICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBLYXogS29qaW1hICYgTmlpYmUgWXV0YWthCi0gKiBBdWRpdCBzdXBwb3J0OiBZdWljaGkgTmFrYW11cmEgPHluYWthbUBoaXRhY2hpc29mdC5qcD4KKyAqIEF1ZGl0IHN1cHBvcnQgYnkgWXVpY2hpIE5ha2FtdXJhIDx5bmFrYW1AaGl0YWNoaXNvZnQuanA+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMjIsMTYgKzI0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZWNjb21wLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvcmVnc2V0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0KLS8qCi0gKiBkb2VzIG5vdCB5ZXQgY2F0Y2ggc2lnbmFscyBzZW50IHdoZW4gdGhlIGNoaWxkIGRpZXMuCi0gKiBpbiBleGl0LmMgb3IgaW4gc2lnbmFsLmMuCi0gKi8KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CiAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgd2lsbCBnZXQgYSB3b3JkIG9mZiBvZiB0aGUgcHJvY2VzcyBrZXJuZWwgc3RhY2suCkBAIC02MSwxNiArNjIsMTIgQEAKIAogdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewotCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKGNoaWxkKTsKLQlsb25nIHBjOwotCi0JcGMgPSBnZXRfc3RhY2tfbG9uZyhjaGlsZCwgKGxvbmcpJnJlZ3MtPnBjKTsKLQogCS8qIE5leHQgc2NoZWR1bGluZyB3aWxsIHNldCB1cCBVQkMgKi8KIAlpZiAoY2hpbGQtPnRocmVhZC51YmNfcGMgPT0gMCkKIAkJdWJjX3VzZXJjbnQgKz0gMTsKIAotCWNoaWxkLT50aHJlYWQudWJjX3BjID0gcGM7CisJY2hpbGQtPnRocmVhZC51YmNfcGMgPSBnZXRfc3RhY2tfbG9uZyhjaGlsZCwKKwkJCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpKTsKIAogCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKIH0KQEAgLTEwMiw5ICs5OSwyMTMgQEAKIAl1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoY2hpbGQpOwogfQogCitzdGF0aWMgaW50IGdlbnJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCSAgICAgICB2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpOworCWludCByZXQ7CisKKwlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCSAgcmVncy0+cmVncywKKwkJCQkgIDAsIDE2ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlpZiAoIXJldCkKKwkJLyogUEMsIFBSLCBTUiwgR0JSLCBNQUNILCBNQUNMLCBUUkEgKi8KKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJICAmcmVncy0+cGMsCisJCQkJCSAgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSwKKwkJCQkJICBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dF96ZXJvKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSwgLTEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnZW5yZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkgICAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkgICAgICAgY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFyZ2V0KTsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCSByZWdzLT5yZWdzLAorCQkJCSAwLCAxNiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJaWYgKCFyZXQgJiYgY291bnQgPiAwKQorCQlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJCSAmcmVncy0+cGMsCisJCQkJCSBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpLAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CisJaWYgKCFyZXQpCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbl9pZ25vcmUoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJCQlzaXplb2Yoc3RydWN0IHB0X3JlZ3MpLCAtMSk7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1NIX0ZQVQoraW50IGZwcmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJICAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJICAgICAgIHZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpbml0X2ZwdSh0YXJnZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCisJCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCQkgICAmdGFyZ2V0LT50aHJlYWQuZnB1LmhhcmQsIDAsIC0xKTsKKworCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCSAgICZ0YXJnZXQtPnRocmVhZC5mcHUuc29mdCwgMCwgLTEpOworfQorCitzdGF0aWMgaW50IGZwcmVnc19zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJICAgICAgIGNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpbml0X2ZwdSh0YXJnZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodGFyZ2V0KTsKKworCWlmICgoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKKwkJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJICAmdGFyZ2V0LT50aHJlYWQuZnB1LmhhcmQsIDAsIC0xKTsKKworCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJICAmdGFyZ2V0LT50aHJlYWQuZnB1LnNvZnQsIDAsIC0xKTsKK30KKworc3RhdGljIGludCBmcHJlZ3NfYWN0aXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0KQoreworCXJldHVybiB0c2tfdXNlZF9tYXRoKHRhcmdldCkgPyByZWdzZXQtPm4gOiAwOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0hfRFNQCitzdGF0aWMgaW50IGRzcHJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCSAgICAgICB2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgcHRfZHNwcmVncyAqcmVncyA9IHRhc2tfcHRfZHNwcmVncyh0YXJnZXQpOworCWludCByZXQ7CisKKwlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCByZWdzLAorCQkJCSAgMCwgc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSk7CisJaWYgKCFyZXQpCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXRfemVybygmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncyksIC0xKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHNwcmVnc19zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJICAgICAgIGNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQoreworCXN0cnVjdCBwdF9kc3ByZWdzICpyZWdzID0gdGFza19wdF9kc3ByZWdzKHRhcmdldCk7CisJaW50IHJldDsKKworCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwgcmVncywKKwkJCQkgMCwgc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSk7CisJaWYgKCFyZXQpCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbl9pZ25vcmUoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJCQlzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpLCAtMSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRzcHJlZ3NfYWN0aXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCkKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpOworCisJcmV0dXJuIHJlZ3MtPnNyICYgU1JfRFNQID8gcmVnc2V0LT5uIDogMDsKK30KKyNlbmRpZgorCisvKgorICogVGhlc2UgYXJlIG91ciBuYXRpdmUgcmVnc2V0IGZsYXZvdXJzLgorICovCitlbnVtIHNoX3JlZ3NldCB7CisJUkVHU0VUX0dFTkVSQUwsCisjaWZkZWYgQ09ORklHX1NIX0ZQVQorCVJFR1NFVF9GUFUsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0hfRFNQCisJUkVHU0VUX0RTUCwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCBzaF9yZWdzZXRzW10gPSB7CisJLyoKKwkgKiBGb3JtYXQgaXM6CisJICoJUjAgLS0+IFIxNQorCSAqCVBDLCBQUiwgU1IsIEdCUiwgTUFDSCwgTUFDTCwgVFJBCisJICovCisJW1JFR1NFVF9HRU5FUkFMXSA9IHsKKwkJLmNvcmVfbm90ZV90eXBlCT0gTlRfUFJTVEFUVVMsCisJCS5uCQk9IEVMRl9OR1JFRywKKwkJLnNpemUJCT0gc2l6ZW9mKGxvbmcpLAorCQkuYWxpZ24JCT0gc2l6ZW9mKGxvbmcpLAorCQkuZ2V0CQk9IGdlbnJlZ3NfZ2V0LAorCQkuc2V0CQk9IGdlbnJlZ3Nfc2V0LAorCX0sCisKKyNpZmRlZiBDT05GSUdfU0hfRlBVCisJW1JFR1NFVF9GUFVdID0geworCQkuY29yZV9ub3RlX3R5cGUJPSBOVF9QUkZQUkVHLAorCQkubgkJPSBzaXplb2Yoc3RydWN0IHVzZXJfZnB1X3N0cnVjdCkgLyBzaXplb2YobG9uZyksCisJCS5zaXplCQk9IHNpemVvZihsb25nKSwKKwkJLmFsaWduCQk9IHNpemVvZihsb25nKSwKKwkJLmdldAkJPSBmcHJlZ3NfZ2V0LAorCQkuc2V0CQk9IGZwcmVnc19zZXQsCisJCS5hY3RpdmUJCT0gZnByZWdzX2FjdGl2ZSwKKwl9LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0hfRFNQCisJW1JFR1NFVF9EU1BdID0geworCQkubgkJPSBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpIC8gc2l6ZW9mKGxvbmcpLAorCQkuc2l6ZQkJPSBzaXplb2YobG9uZyksCisJCS5hbGlnbgkJPSBzaXplb2YobG9uZyksCisJCS5nZXQJCT0gZHNwcmVnc19nZXQsCisJCS5zZXQJCT0gZHNwcmVnc19zZXQsCisJCS5hY3RpdmUJCT0gZHNwcmVnc19hY3RpdmUsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3IHVzZXJfc2hfbmF0aXZlX3ZpZXcgPSB7CisJLm5hbWUJCT0gInNoIiwKKwkuZV9tYWNoaW5lCT0gRU1fU0gsCisJLnJlZ3NldHMJPSBzaF9yZWdzZXRzLAorCS5uCQk9IEFSUkFZX1NJWkUoc2hfcmVnc2V0cyksCit9OworCitjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyAqdGFza191c2VyX3JlZ3NldF92aWV3KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlyZXR1cm4gJnVzZXJfc2hfbmF0aXZlX3ZpZXc7Cit9CisKIGxvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgdXNlciAqIGR1bW15ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIF9fdXNlciAqZGF0YXAgPSAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhOwogCWludCByZXQ7CiAKIAlzd2l0Y2ggKHJlcXVlc3QpIHsKQEAgLTEzMyw3ICszMzQsNyBAQAogCQkJdG1wID0gISF0c2tfdXNlZF9tYXRoKGNoaWxkKTsKIAkJZWxzZQogCQkJdG1wID0gMDsKLQkJcmV0ID0gcHV0X3VzZXIodG1wLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhKTsKKwkJcmV0ID0gcHV0X3VzZXIodG1wLCBkYXRhcCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTU3LDM0ICszNTgsMzkgQEAKIAkJfQogCQlicmVhazsKIAorCWNhc2UgUFRSQUNFX0dFVFJFR1M6CisJCXJldHVybiBjb3B5X3JlZ3NldF90b191c2VyKGNoaWxkLCAmdXNlcl9zaF9uYXRpdmVfdmlldywKKwkJCQkJICAgUkVHU0VUX0dFTkVSQUwsCisJCQkJCSAgIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncyksCisJCQkJCSAgICh2b2lkIF9fdXNlciAqKWRhdGEpOworCWNhc2UgUFRSQUNFX1NFVFJFR1M6CisJCXJldHVybiBjb3B5X3JlZ3NldF9mcm9tX3VzZXIoY2hpbGQsICZ1c2VyX3NoX25hdGl2ZV92aWV3LAorCQkJCQkgICAgIFJFR1NFVF9HRU5FUkFMLAorCQkJCQkgICAgIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncyksCisJCQkJCSAgICAgKGNvbnN0IHZvaWQgX191c2VyICopZGF0YSk7CisjaWZkZWYgQ09ORklHX1NIX0ZQVQorCWNhc2UgUFRSQUNFX0dFVEZQUkVHUzoKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X3RvX3VzZXIoY2hpbGQsICZ1c2VyX3NoX25hdGl2ZV92aWV3LAorCQkJCQkgICBSRUdTRVRfRlBVLAorCQkJCQkgICAwLCBzaXplb2Yoc3RydWN0IHVzZXJfZnB1X3N0cnVjdCksCisJCQkJCSAgICh2b2lkIF9fdXNlciAqKWRhdGEpOworCWNhc2UgUFRSQUNFX1NFVEZQUkVHUzoKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X2Zyb21fdXNlcihjaGlsZCwgJnVzZXJfc2hfbmF0aXZlX3ZpZXcsCisJCQkJCSAgICAgUkVHU0VUX0ZQVSwKKwkJCQkJICAgICAwLCBzaXplb2Yoc3RydWN0IHVzZXJfZnB1X3N0cnVjdCksCisJCQkJCSAgICAgKGNvbnN0IHZvaWQgX191c2VyICopZGF0YSk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfU0hfRFNQCi0JY2FzZSBQVFJBQ0VfR0VURFNQUkVHUzogewotCQl1bnNpZ25lZCBsb25nIGRwOwotCi0JCXJldCA9IC1FSU87Ci0JCWRwID0gKCh1bnNpZ25lZCBsb25nKSBjaGlsZCkgKyBUSFJFQURfU0laRSAtCi0JCQkgc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKTsKLQkJaWYgKCooKGludCAqKSAoZHAgLSA0KSkgPT0gU1JfRkQpIHsKLQkJCWNvcHlfdG9fdXNlcigodm9pZCAqKWFkZHIsICh2b2lkICopIGRwLAotCQkJCXNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykpOwotCQkJcmV0ID0gMDsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIFBUUkFDRV9TRVREU1BSRUdTOiB7Ci0JCXVuc2lnbmVkIGxvbmcgZHA7Ci0KLQkJcmV0ID0gLUVJTzsKLQkJZHAgPSAoKHVuc2lnbmVkIGxvbmcpIGNoaWxkKSArIFRIUkVBRF9TSVpFIC0KLQkJCSBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpOwotCQlpZiAoKigoaW50ICopIChkcCAtIDQpKSA9PSBTUl9GRCkgewotCQkJY29weV9mcm9tX3VzZXIoKHZvaWQgKikgZHAsICh2b2lkICopYWRkciwKLQkJCQlzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpKTsKLQkJCXJldCA9IDA7Ci0JCX0KLQkJYnJlYWs7Ci0JfQorCWNhc2UgUFRSQUNFX0dFVERTUFJFR1M6CisJCXJldHVybiBjb3B5X3JlZ3NldF90b191c2VyKGNoaWxkLCAmdXNlcl9zaF9uYXRpdmVfdmlldywKKwkJCQkJICAgUkVHU0VUX0RTUCwKKwkJCQkJICAgMCwgc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSwKKwkJCQkJICAgKHZvaWQgX191c2VyICopZGF0YSk7CisJY2FzZSBQVFJBQ0VfU0VURFNQUkVHUzoKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X2Zyb21fdXNlcihjaGlsZCwgJnVzZXJfc2hfbmF0aXZlX3ZpZXcsCisJCQkJCSAgICAgUkVHU0VUX0RTUCwKKwkJCQkJICAgICAwLCBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpLAorCQkJCQkgICAgIChjb25zdCB2b2lkIF9fdXNlciAqKWRhdGEpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JJTkZNVF9FTEZfRkRQSUMKIAljYXNlIFBUUkFDRV9HRVRGRFBJQzogewpAQCAtMjAyLDcgKzQwOCw3IEBACiAJCX0KIAogCQlyZXQgPSAwOwotCQlpZiAocHV0X3VzZXIodG1wLCAodW5zaWduZWQgbG9uZyAqKSBkYXRhKSkgeworCQlpZiAocHV0X3VzZXIodG1wLCBkYXRhcCkpIHsKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYwppbmRleCA5YzY0MjQ4Li5lMTViMDk5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogCiAvKiBUaGlzIG1hc2sgZGVmaW5lcyB0aGUgYml0cyBvZiB0aGUgU1Igd2hpY2ggdGhlIHVzZXIgaXMgbm90IGFsbG93ZWQgdG8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IGRlODMyMDUuLmU3MTUyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jcmFzaF9kdW1wLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xNDQsNiArMTQ3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgZnJlZV9tZW07CiAJdW5zaWduZWQgbG9uZyBsb25nIGNyYXNoX3NpemUsIGNyYXNoX2Jhc2U7CisJdm9pZCAqdnA7CiAJaW50IHJldDsKIAogCWZyZWVfbWVtID0gKCh1bnNpZ25lZCBsb25nIGxvbmcpbWF4X2xvd19wZm4gLSBtaW5fbG93X3BmbikgPDwgUEFHRV9TSElGVDsKQEAgLTE1MiwxMiArMTU2LDE0IEBACiAJCQkmY3Jhc2hfc2l6ZSwgJmNyYXNoX2Jhc2UpOwogCWlmIChyZXQgPT0gMCAmJiBjcmFzaF9zaXplKSB7CiAJCWlmIChjcmFzaF9iYXNlIDw9IDApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImNyYXNoa2VybmVsIHJlc2VydmF0aW9uIGZhaWxlZCAtICIKLQkJCQkJInlvdSBoYXZlIHRvIHNwZWNpZnkgYSBiYXNlIGFkZHJlc3NcbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaWYgKHJlc2VydmVfYm9vdG1lbShjcmFzaF9iYXNlLCBjcmFzaF9zaXplLAorCQkJdnAgPSBhbGxvY19ib290bWVtX25vcGFuaWMoY3Jhc2hfc2l6ZSk7IAorCQkJaWYgKCF2cCkgeworCQkJCXByaW50ayhLRVJOX0lORk8gImNyYXNoa2VybmVsIGFsbG9jYXRpb24gIgorCQkJCSAgICAgICAiZmFpbGVkXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQljcmFzaF9iYXNlID0gX19wYSh2cCk7CisJCX0gZWxzZSBpZiAocmVzZXJ2ZV9ib290bWVtKGNyYXNoX2Jhc2UsIGNyYXNoX3NpemUsCiAJCQkJCUJPT1RNRU1fRVhDTFVTSVZFKSA8IDApIHsKIAkJCXByaW50ayhLRVJOX0lORk8gImNyYXNoa2VybmVsIHJlc2VydmF0aW9uIGZhaWxlZCAtICIKIAkJCQkJIm1lbW9yeSBpcyBpbiB1c2VcbiIpOwpAQCAtMTc5LDYgKzE4NSwyNCBAQAoge30KICNlbmRpZgogCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWQordm9pZCBfX2NwdWluaXQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrID0gY2xrX2dldChOVUxMLCAiY3B1X2NsayIpOworCisJaWYgKElTX0VSUihjbGspKQorCQlwYW5pYygiTmVlZCBhIHNhbmUgQ1BVIGNsb2NrIGRlZmluaXRpb24hIik7CisKKwlsb29wc19wZXJfamlmZnkgPSAoY2xrX2dldF9yYXRlKGNsaykgPj4gMSkgLyBIWjsKKworCXByaW50ayhLRVJOX0lORk8gIkNhbGlicmF0aW5nIGRlbGF5IGxvb3AgKHNraXBwZWQpLi4uICIKKwkJCSAiJWx1LiUwMmx1IEJvZ29NSVBTIFBSRVNFVCAobHBqPSVsdSlcbiIsCisJCQkgbG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAorCQkJIChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSAlIDEwMCwKKwkJCSBsb29wc19wZXJfamlmZnkpOworfQorI2VuZGlmCisKIHZvaWQgX19pbml0IF9fYWRkX2FjdGl2ZV9yYW5nZSh1bnNpZ25lZCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCQkJCXVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKQEAgLTIzMiwxNSArMjU2LDE3IEBACiAJICogY2FzZSBvZiB1cyBhY2NpZGVudGFsbHkgaW5pdGlhbGl6aW5nIHRoZSBib290bWVtIGFsbG9jYXRvciB3aXRoCiAJICogYW4gaW52YWxpZCBSQU0gYXJlYS4KIAkgKi8KLQlyZXNlcnZlX2Jvb3RtZW0oX19NRU1PUllfU1RBUlQrUEFHRV9TSVpFLAotCQkoUEZOX1BIWVMoZnJlZV9wZm4pK2Jvb3RtYXBfc2l6ZStQQUdFX1NJWkUtMSktX19NRU1PUllfU1RBUlQsCi0JCUJPT1RNRU1fREVGQVVMVCk7CisJcmVzZXJ2ZV9ib290bWVtKF9fTUVNT1JZX1NUQVJUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQsCisJCQkoUEZOX1BIWVMoZnJlZV9wZm4pICsgYm9vdG1hcF9zaXplICsgUEFHRV9TSVpFIC0gMSkgLQorCQkJKF9fTUVNT1JZX1NUQVJUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpLAorCQkJQk9PVE1FTV9ERUZBVUxUKTsKIAogCS8qCiAJICogcmVzZXJ2ZSBwaHlzaWNhbCBwYWdlIDAgLSBpdCdzIGEgc3BlY2lhbCBCSU9TIHBhZ2Ugb24gbWFueSBib3hlcywKIAkgKiBlbmFibGluZyBjbGVhbiByZWJvb3RzLCBTTVAgb3BlcmF0aW9uLCBsYXB0b3AgZnVuY3Rpb25zLgogCSAqLwotCXJlc2VydmVfYm9vdG1lbShfX01FTU9SWV9TVEFSVCwgUEFHRV9TSVpFLCBCT09UTUVNX0RFRkFVTFQpOworCXJlc2VydmVfYm9vdG1lbShfX01FTU9SWV9TVEFSVCwgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQsCisJCQlCT09UTUVNX0RFRkFVTFQpOwogCiAJc3BhcnNlX21lbW9yeV9wcmVzZW50X3dpdGhfYWN0aXZlX3JlZ2lvbnMoMCk7CiAKQEAgLTI0OCwxNyArMjc0LDE4IEBACiAJUk9PVF9ERVYgPSBSb290X1JBTTA7CiAKIAlpZiAoTE9BREVSX1RZUEUgJiYgSU5JVFJEX1NUQVJUKSB7Ci0JCWlmIChJTklUUkRfU1RBUlQgKyBJTklUUkRfU0laRSA8PSAobWF4X2xvd19wZm4gPDwgUEFHRV9TSElGVCkpIHsKLQkJCXJlc2VydmVfYm9vdG1lbShJTklUUkRfU1RBUlQgKyBfX01FTU9SWV9TVEFSVCwKLQkJCQkJSU5JVFJEX1NJWkUsIEJPT1RNRU1fREVGQVVMVCk7Ci0JCQlpbml0cmRfc3RhcnQgPSBJTklUUkRfU1RBUlQgKyBQQUdFX09GRlNFVCArCi0JCQkJCV9fTUVNT1JZX1NUQVJUOworCQl1bnNpZ25lZCBsb25nIGluaXRyZF9zdGFydF9waHlzID0gSU5JVFJEX1NUQVJUICsgX19NRU1PUllfU1RBUlQ7CisKKwkJaWYgKGluaXRyZF9zdGFydF9waHlzICsgSU5JVFJEX1NJWkUgPD0gUEZOX1BIWVMobWF4X2xvd19wZm4pKSB7CisJCQlyZXNlcnZlX2Jvb3RtZW0oaW5pdHJkX3N0YXJ0X3BoeXMsIElOSVRSRF9TSVpFLAorCQkJCQlCT09UTUVNX0RFRkFVTFQpOworCQkJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShpbml0cmRfc3RhcnRfcGh5cyk7CiAJCQlpbml0cmRfZW5kID0gaW5pdHJkX3N0YXJ0ICsgSU5JVFJEX1NJWkU7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoImluaXRyZCBleHRlbmRzIGJleW9uZCBlbmQgb2YgbWVtb3J5ICIKLQkJCSAgICAiKDB4JTA4bHggPiAweCUwOGx4KVxuZGlzYWJsaW5nIGluaXRyZFxuIiwKLQkJCQkgICAgSU5JVFJEX1NUQVJUICsgSU5JVFJEX1NJWkUsCi0JCQkJICAgIG1heF9sb3dfcGZuIDw8IFBBR0VfU0hJRlQpOworCQkJICAgICAgICIoMHglMDhseCA+IDB4JTA4bHgpXG5kaXNhYmxpbmcgaW5pdHJkXG4iLAorCQkJICAgICAgIGluaXRyZF9zdGFydF9waHlzICsgSU5JVFJEX1NJWkUsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpUEZOX1BIWVMobWF4X2xvd19wZm4pKTsKIAkJCWluaXRyZF9zdGFydCA9IDA7CiAJCX0KIAl9CkBAIC01MzAsNiArNTU3LDggQEAKIHN0YXRpYyBpbnQgX19pbml0IHNoX2RlYnVnZnNfaW5pdCh2b2lkKQogewogCXNoX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigic2giLCBOVUxMKTsKKwlpZiAoIXNoX2RlYnVnZnNfcm9vdCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKElTX0VSUihzaF9kZWJ1Z2ZzX3Jvb3QpKQogCQlyZXR1cm4gUFRSX0VSUihzaF9kZWJ1Z2ZzX3Jvb3QpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYwppbmRleCA2ZTFiMWMyLi5kOTE3YjdiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KIAogZXh0ZXJuIGludCBkdW1wX2ZwdShzdHJ1Y3QgcHRfcmVncyAqLCBlbGZfZnByZWdzZXRfdCAqKTsKIGV4dGVybiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgbm9faXJxX3R5cGU7CkBAIC0xMzMsNiArMTM0LDkgQEAKIEVYUE9SVF9TWU1CT0woY2xlYXJfdXNlcl9wYWdlKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0ZUUkFDRQorRVhQT1JUX1NZTUJPTChtY291bnQpOworI2VuZGlmCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMpOwogI2lmZGVmIENPTkZJR19JUFY2CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IDUxNjg5ZDIuLjY5ZDA5YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogCiAjZGVmaW5lIF9CTE9DS0FCTEUgKH4oc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpKQpAQCAtMjE1LDYgKzIxNiw5IEBACiAJc2lnc2V0X3Qgc2V0OwogCWludCByMDsKIAorICAgICAgICAvKiBBbHdheXMgbWFrZSBhbnkgcGVuZGluZyByZXN0YXJ0ZWQgc3lzdGVtIGNhbGxzIHJldHVybiAtRUlOVFIgKi8KKwljdXJyZW50X3RocmVhZF9pbmZvKCktPnJlc3RhcnRfYmxvY2suZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGw7CisKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKIAkJZ290byBiYWRmcmFtZTsKIApAQCAtMjQ3LDkgKzI1MSwxMSBAQAogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gUkVMT0NfSElERSgmX19yZWdzLCAwKTsKIAlzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICpmcmFtZSA9IChzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICopcmVncy0+cmVnc1sxNV07CiAJc2lnc2V0X3Qgc2V0OwotCXN0YWNrX3Qgc3Q7CiAJaW50IHIwOwogCisJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOworCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCiAJCWdvdG8gYmFkZnJhbWU7CiAKQEAgLTI2NSwxMSArMjcxLDkgQEAKIAlpZiAocmVzdG9yZV9zaWdjb250ZXh0KHJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQsICZyMCkpCiAJCWdvdG8gYmFkZnJhbWU7CiAKLQlpZiAoX19jb3B5X2Zyb21fdXNlcigmc3QsICZmcmFtZS0+dWMudWNfc3RhY2ssIHNpemVvZihzdCkpKQorCWlmIChkb19zaWdhbHRzdGFjaygmZnJhbWUtPnVjLnVjX3N0YWNrLCBOVUxMLAorCQkJICAgcmVncy0+cmVnc1sxNV0pID09IC1FRkFVTFQpCiAJCWdvdG8gYmFkZnJhbWU7Ci0JLyogSXQgaXMgbW9yZSBkaWZmaWN1bHQgdG8gYXZvaWQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHRoYW4gdG8KLQkgICBjYWxsIGl0IGFuZCBpZ25vcmUgZXJyb3JzLiAgKi8KLQlkb19zaWdhbHRzdGFjaygoY29uc3Qgc3RhY2tfdCBfX3VzZXIgKikmc3QsIE5VTEwsICh1bnNpZ25lZCBsb25nKWZyYW1lKTsKIAogCXJldHVybiByMDsKIApAQCAtNDI5LDcgKzQzMyw3IEBACiAKIAkvKiBDcmVhdGUgdGhlIHVjb250ZXh0LiAgKi8KIAllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2ZsYWdzKTsKLQllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2xpbmspOworCWVyciB8PSBfX3B1dF91c2VyKE5VTEwsICZmcmFtZS0+dWMudWNfbGluayk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoKHZvaWQgKiljdXJyZW50LT5zYXNfc3Nfc3AsCiAJCQkgICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOwogCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZWdzLT5yZWdzWzE1XSksCkBAIC00OTIsMzcgKzQ5Niw0MyBAQAogCXJldHVybiAtRUZBVUxUOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK2hhbmRsZV9zeXNjYWxsX3Jlc3RhcnQodW5zaWduZWQgbG9uZyBzYXZlX3IwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gKnNhKQoreworCS8qIElmIHdlJ3JlIG5vdCBmcm9tIGEgc3lzY2FsbCwgYmFpbCBvdXQgKi8KKwlpZiAocmVncy0+dHJhIDwgMCkKKwkJcmV0dXJuOworCisJLyogY2hlY2sgZm9yIHN5c3RlbSBjYWxsIHJlc3RhcnQuLiAqLworCXN3aXRjaCAocmVncy0+cmVnc1swXSkgeworCQljYXNlIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s6CisJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgorCQlub19zeXN0ZW1fY2FsbF9yZXN0YXJ0OgorCQkJcmVncy0+cmVnc1swXSA9IC1FSU5UUjsKKwkJCXJlZ3MtPnNyIHw9IDE7CisJCQlicmVhazsKKworCQljYXNlIC1FUkVTVEFSVFNZUzoKKwkJCWlmICghKHNhLT5zYV9mbGFncyAmIFNBX1JFU1RBUlQpKQorCQkJCWdvdG8gbm9fc3lzdGVtX2NhbGxfcmVzdGFydDsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSAtRVJFU1RBUlROT0lOVFI6CisJCQlyZWdzLT5yZWdzWzBdID0gc2F2ZV9yMDsKKwkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoY3RybF9pbncocmVncy0+cGMgLSA0KSk7CisJCQlicmVhazsKKwl9Cit9CisKIC8qCiAgKiBPSywgd2UncmUgaW52b2tpbmcgYSBoYW5kbGVyCiAgKi8KLQogc3RhdGljIGludAogaGFuZGxlX3NpZ25hbCh1bnNpZ25lZCBsb25nIHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAogCSAgICAgIHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgc2F2ZV9yMCkKIHsKIAlpbnQgcmV0OwogCi0JLyogQXJlIHdlIGZyb20gYSBzeXN0ZW0gY2FsbD8gKi8KLQlpZiAocmVncy0+dHJhID49IDApIHsKLQkJLyogSWYgc28sIGNoZWNrIHN5c3RlbSBjYWxsIHJlc3RhcnRpbmcuLiAqLwotCQlzd2l0Y2ggKHJlZ3MtPnJlZ3NbMF0pIHsKLQkJCWNhc2UgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzoKLQkJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgotCQkJbm9fc3lzdGVtX2NhbGxfcmVzdGFydDoKLQkJCQlyZWdzLT5yZWdzWzBdID0gLUVJTlRSOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIC1FUkVTVEFSVFNZUzoKLQkJCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkKLQkJCQkJZ290byBub19zeXN0ZW1fY2FsbF9yZXN0YXJ0OwotCQkJLyogZmFsbHRocm91Z2ggKi8KLQkJCWNhc2UgLUVSRVNUQVJUTk9JTlRSOgotCQkJCXJlZ3MtPnJlZ3NbMF0gPSBzYXZlX3IwOwotCQkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoCi0JCQkJCQljdHJsX2ludyhyZWdzLT5wYyAtIDQpKTsKLQkJCQlicmVhazsKLQkJfQotCX0KIAogCS8qIFNldCB1cCB0aGUgc3RhY2sgZnJhbWUgKi8KIAlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykKQEAgLTU4MCw2ICs1OTAsOSBAQAogCiAJc2lnbnIgPSBnZXRfc2lnbmFsX3RvX2RlbGl2ZXIoJmluZm8sICZrYSwgcmVncywgTlVMTCk7CiAJaWYgKHNpZ25yID4gMCkgeworCQlpZiAocmVncy0+c3IgJiAxKQorCQkJaGFuZGxlX3N5c2NhbGxfcmVzdGFydChzYXZlX3IwLCByZWdzLCAma2Euc2EpOworCiAJCS8qIFdoZWUhICBBY3R1YWxseSBkZWxpdmVyIHRoZSBzaWduYWwuICAqLwogCQlpZiAoaGFuZGxlX3NpZ25hbChzaWduciwgJmthLCAmaW5mbywgb2xkc2V0LAogCQkJCSAgcmVncywgc2F2ZV9yMCkgPT0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCAxZDYyZGZlLi5jZTNlODUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtNDMsNiArNDMsMTAgQEAKIAogI2RlZmluZSBfQkxPQ0tBQkxFICh+KHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKSkKIAorc3RhdGljIHZvaWQKK2hhbmRsZV9zaWduYWwodW5zaWduZWQgbG9uZyBzaWcsIHNpZ2luZm9fdCAqaW5mbywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKKwkJc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKKwogLyoKICAqIE5vdGUgdGhhdCAnaW5pdCcgaXMgYSBzcGVjaWFsIHByb2Nlc3M6IGl0IGRvZXNuJ3QgZ2V0IHNpZ25hbHMgaXQgZG9lc24ndAogICogd2FudCB0byBoYW5kbGUuIFRodXMgeW91IGNhbm5vdCBraWxsIGluaXQgZXZlbiB3aXRoIGEgU0lHS0lMTCBldmVuIGJ5CkBAIC0zNzEsNiArMzc1LDkgQEAKIAlzaWdzZXRfdCBzZXQ7CiAJbG9uZyBsb25nIHJldDsKIAorCS8qIEFsd2F5cyBtYWtlIGFueSBwZW5kaW5nIHJlc3RhcnRlZCBzeXN0ZW0gY2FsbHMgcmV0dXJuIC1FSU5UUiAqLworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jay5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbDsKKwogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQogCQlnb3RvIGJhZGZyYW1lOwogCkBAIC00MDgsNiArNDE1LDkgQEAKIAlzdGFja190IF9fdXNlciBzdDsKIAlsb25nIGxvbmcgcmV0OwogCisJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOworCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCiAJCWdvdG8gYmFkZnJhbWU7CiAKQEAgLTUzNSw3ICs1NDUsNyBAQAogCQkgKiBPbiBTSDUgYWxsIGVkaXRlZCBwb2ludGVycyBhcmUgc3ViamVjdCB0byBORUZGCiAJCSAqLwogCQlERVJFRl9SRUdfUFIgPSAoREVSRUZfUkVHX1BSICYgTkVGRl9TSUdOKSA/Ci0gICAgICAgIAkJIAkoREVSRUZfUkVHX1BSIHwgTkVGRl9NQVNLKSA6IERFUkVGX1JFR19QUjsKKwkJCShERVJFRl9SRUdfUFIgfCBORUZGX01BU0spIDogREVSRUZfUkVHX1BSOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIERpZmZlcmVudCBhcHByb2FjaCBvbiBTSDUuCkBAIC01NTAsMTAgKzU2MCwxMCBAQAogCQkgKi8KIAkJREVSRUZfUkVHX1BSID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lLT5yZXRjb2RlIHwgMHgwMTsKIAkJREVSRUZfUkVHX1BSID0gKERFUkVGX1JFR19QUiAmIE5FRkZfU0lHTikgPwotICAgICAgICAJCSAJKERFUkVGX1JFR19QUiB8IE5FRkZfTUFTSykgOiBERVJFRl9SRUdfUFI7CisJCQkoREVSRUZfUkVHX1BSIHwgTkVGRl9NQVNLKSA6IERFUkVGX1JFR19QUjsKIAogCQlpZiAoX19jb3B5X3RvX3VzZXIoZnJhbWUtPnJldGNvZGUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXNhX2RlZmF1bHRfcmVzdG9yZXIgJiAofjEpLCAxNikgIT0gMCkKKwkJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKXNhX2RlZmF1bHRfcmVzdG9yZXIgJiAofjEpKSwgMTYpICE9IDApCiAJCQlnb3RvIGdpdmVfc2lnc2VndjsKIAogCQkvKiBDb2hlcmUgdGhlIHRyYW1wb2xpbmUgd2l0aCB0aGUgSS1jYWNoZS4gKi8KQEAgLTU2Niw3ICs1NzYsNyBAQAogCSAqLwogCXJlZ3MtPnJlZ3NbUkVHX1NQXSA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKIAlyZWdzLT5yZWdzW1JFR19TUF0gPSAocmVncy0+cmVnc1tSRUdfU1BdICYgTkVGRl9TSUdOKSA/Ci0gICAgICAgIAkJIChyZWdzLT5yZWdzW1JFR19TUF0gfCBORUZGX01BU0spIDogcmVncy0+cmVnc1tSRUdfU1BdOworCQkgKHJlZ3MtPnJlZ3NbUkVHX1NQXSB8IE5FRkZfTUFTSykgOiByZWdzLT5yZWdzW1JFR19TUF07CiAJcmVncy0+cmVnc1tSRUdfQVJHMV0gPSBzaWduYWw7IC8qIEFyZyBmb3Igc2lnbmFsIGhhbmRsZXIgKi8KIAogICAgICAgICAvKiBGSVhNRToKQEAgLTY1Miw3ICs2NjIsNyBAQAogCQkgKiBPbiBTSDUgYWxsIGVkaXRlZCBwb2ludGVycyBhcmUgc3ViamVjdCB0byBORUZGCiAJCSAqLwogCQlERVJFRl9SRUdfUFIgPSAoREVSRUZfUkVHX1BSICYgTkVGRl9TSUdOKSA/Ci0gICAgICAgIAkJIAkoREVSRUZfUkVHX1BSIHwgTkVGRl9NQVNLKSA6IERFUkVGX1JFR19QUjsKKwkJCShERVJFRl9SRUdfUFIgfCBORUZGX01BU0spIDogREVSRUZfUkVHX1BSOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIERpZmZlcmVudCBhcHByb2FjaCBvbiBTSDUuCkBAIC02NjgsMTAgKzY3OCwxMCBAQAogCiAJCURFUkVGX1JFR19QUiA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZS0+cmV0Y29kZSB8IDB4MDE7CiAJCURFUkVGX1JFR19QUiA9IChERVJFRl9SRUdfUFIgJiBORUZGX1NJR04pID8KLSAgICAgICAgCQkgCShERVJFRl9SRUdfUFIgfCBORUZGX01BU0spIDogREVSRUZfUkVHX1BSOworCQkJKERFUkVGX1JFR19QUiB8IE5FRkZfTUFTSykgOiBERVJFRl9SRUdfUFI7CiAKIAkJaWYgKF9fY29weV90b191c2VyKGZyYW1lLT5yZXRjb2RlLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzYV9kZWZhdWx0X3J0X3Jlc3RvcmVyICYgKH4xKSwgMTYpICE9IDApCisJCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZylzYV9kZWZhdWx0X3J0X3Jlc3RvcmVyICYgKH4xKSksIDE2KSAhPSAwKQogCQkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAKIAkJZmx1c2hfaWNhY2hlX3JhbmdlKERFUkVGX1JFR19QUi0xLCBERVJFRl9SRUdfUFItMSsxNSk7CkBAIC02ODMsNyArNjkzLDcgQEAKIAkgKi8KIAlyZWdzLT5yZWdzW1JFR19TUF0gPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CiAJcmVncy0+cmVnc1tSRUdfU1BdID0gKHJlZ3MtPnJlZ3NbUkVHX1NQXSAmIE5FRkZfU0lHTikgPwotICAgICAgICAJCSAocmVncy0+cmVnc1tSRUdfU1BdIHwgTkVGRl9NQVNLKSA6IHJlZ3MtPnJlZ3NbUkVHX1NQXTsKKwkJIChyZWdzLT5yZWdzW1JFR19TUF0gfCBORUZGX01BU0spIDogcmVncy0+cmVnc1tSRUdfU1BdOwogCXJlZ3MtPnJlZ3NbUkVHX0FSRzFdID0gc2lnbmFsOyAvKiBBcmcgZm9yIHNpZ25hbCBoYW5kbGVyICovCiAJcmVncy0+cmVnc1tSRUdfQVJHMl0gPSAodW5zaWduZWQgbG9uZyBsb25nKSh1bnNpZ25lZCBsb25nKShzaWduZWQgbG9uZykmZnJhbWUtPmluZm87CiAJcmVncy0+cmVnc1tSRUdfQVJHM10gPSAodW5zaWduZWQgbG9uZyBsb25nKSh1bnNpZ25lZCBsb25nKShzaWduZWQgbG9uZykmZnJhbWUtPnVjLnVjX21jb250ZXh0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc21wLmMgYi9hcmNoL3NoL2tlcm5lbC9zbXAuYwppbmRleCAwMDE3NzhmLi41MDhkZmIwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zbXAuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBTTVAgc3VwcG9ydCBmb3IgdGhlIFN1cGVySCBwcm9jZXNzb3JzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDcgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwOCBQYXVsIE11bmR0CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA3IEFraW8gSWRlaGFyYQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC04Niw5ICs4NiwxMiBAQAogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyogRW5hYmxlIGxvY2FsIHRpbWVycyAqLworCWxvY2FsX3RpbWVyX3NldHVwKGNwdSk7CiAJY2FsaWJyYXRlX2RlbGF5KCk7CiAKLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc21wX3N0b3JlX2NwdV9pbmZvKGNwdSk7CiAKIAljcHVfc2V0KGNwdSwgY3B1X29ubGluZV9tYXApOwpAQCAtMTg2LDYgKzE4OSw0MiBAQAogCXBsYXRfc2VuZF9pcGkoY3B1LCBTTVBfTVNHX0ZVTkNUSU9OX1NJTkdMRSk7CiB9CiAKK3ZvaWQgc21wX3RpbWVyX2Jyb2FkY2FzdChjcHVtYXNrX3QgbWFzaykKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKQorCQlwbGF0X3NlbmRfaXBpKGNwdSwgU01QX01TR19USU1FUik7Cit9CisKK3N0YXRpYyB2b2lkIGlwaV90aW1lcih2b2lkKQoreworCWlycV9lbnRlcigpOworCWxvY2FsX3RpbWVyX2ludGVycnVwdCgpOworCWlycV9leGl0KCk7Cit9CisKK3ZvaWQgc21wX21lc3NhZ2VfcmVjdih1bnNpZ25lZCBpbnQgbXNnKQoreworCXN3aXRjaCAobXNnKSB7CisJY2FzZSBTTVBfTVNHX0ZVTkNUSU9OOgorCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOworCQlicmVhazsKKwljYXNlIFNNUF9NU0dfUkVTQ0hFRFVMRToKKwkJYnJlYWs7CisJY2FzZSBTTVBfTVNHX0ZVTkNUSU9OX1NJTkdMRToKKwkJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7CisJCWJyZWFrOworCWNhc2UgU01QX01TR19USU1FUjoKKwkJaXBpX3RpbWVyKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNNUCAlZDogJXMoKTogdW5rbm93biBJUEkgJWRcbiIsCisJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBtc2cpOworCQlicmVhazsKKwl9Cit9CisKIC8qIE5vdCByZWFsbHkgU01QIHN0dWZmIC4uLiAqLwogaW50IHNldHVwX3Byb2ZpbGluZ190aW1lcih1bnNpZ25lZCBpbnQgbXVsdGlwbGllcikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gvc2gva2VybmVsL3N0YWNrdHJhY2UuYwppbmRleCA1NGQxZjYxLi4xYTJhNWViIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zdGFja3RyYWNlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFN0YWNrIHRyYWNlIG1hbmFnZW1lbnQgZnVuY3Rpb25zCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNiAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDggIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMzYsMyArMzYsMjQgQEAKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzYXZlX3N0YWNrX3RyYWNlKTsKKwordm9pZCBzYXZlX3N0YWNrX3RyYWNlX3RzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKK3sKKwl1bnNpZ25lZCBsb25nICpzcCA9ICh1bnNpZ25lZCBsb25nICopdHNrLT50aHJlYWQuc3A7CisKKwl3aGlsZSAoIWtzdGFja19lbmQoc3ApKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9ICpzcCsrOworCisJCWlmIChfX2tlcm5lbF90ZXh0X2FkZHJlc3MoYWRkcikpIHsKKwkJCWlmIChpbl9zY2hlZF9mdW5jdGlvbnMoYWRkcikpCisJCQkJYnJlYWs7CisJCQlpZiAodHJhY2UtPnNraXAgPiAwKQorCQkJCXRyYWNlLT5za2lwLS07CisJCQllbHNlCisJCQkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBhZGRyOworCQkJaWYgKHRyYWNlLT5ucl9lbnRyaWVzID49IHRyYWNlLT5tYXhfZW50cmllcykKKwkJCQlicmVhazsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNhdmVfc3RhY2tfdHJhY2VfdHNrKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N5c19zaC5jIGIvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKaW5kZXggOTA2MWI4Ni4uMzhmMDk4YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKQEAgLTE3MCw2ICsxNzEsOCBAQAogCXZlcnNpb24gPSBjYWxsID4+IDE2OyAvKiBoYWNrIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAJY2FsbCAmPSAweGZmZmY7CiAKKwl0cmFjZV9tYXJrKGtlcm5lbF9hcmNoX2lwY19jYWxsLCAiY2FsbCAldSBmaXJzdCAlZCIsIGNhbGwsIGZpcnN0KTsKKwogCWlmIChjYWxsIDw9IFNFTVRJTUVET1ApCiAJCXN3aXRjaCAoY2FsbCkgewogCQljYXNlIFNFTU9QOgpAQCAtMTg2LDcgKzE4OSw3IEBACiAJCQl1bmlvbiBzZW11biBmb3VydGg7CiAJCQlpZiAoIXB0cikKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmIChnZXRfdXNlcihmb3VydGguX19wYWQsICh2b2lkICogX191c2VyICopIHB0cikpCisJCQlpZiAoZ2V0X3VzZXIoZm91cnRoLl9fcGFkLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKikgcHRyKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCXJldHVybiBzeXNfc2VtY3RsIChmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoKTsKIAkJCX0KQEAgLTI2MSwxMyArMjY0LDEzIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLWFzbWxpbmthZ2UgaW50IHN5c191bmFtZShzdHJ1Y3Qgb2xkX3V0c25hbWUgKiBuYW1lKQorYXNtbGlua2FnZSBpbnQgc3lzX3VuYW1lKHN0cnVjdCBvbGRfdXRzbmFtZSBfX3VzZXIgKm5hbWUpCiB7CiAJaW50IGVycjsKIAlpZiAoIW5hbWUpCiAJCXJldHVybiAtRUZBVUxUOwogCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0JZXJyID0gY29weV90b191c2VyKG5hbWUsIHV0c25hbWUoKSwgc2l6ZW9mICgqbmFtZSkpOworCWVyciA9IGNvcHlfdG9fdXNlcihuYW1lLCB1dHNuYW1lKCksIHNpemVvZigqbmFtZSkpOwogCXVwX3JlYWQoJnV0c19zZW0pOwogCXJldHVybiBlcnI/LUVGQVVMVDowOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc3lzX3NoMzIuYyBiL2FyY2gvc2gva2VybmVsL3N5c19zaDMyLmMKaW5kZXggZjBhYTVjMy4uZGJiYTFlMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzX3NoMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zeXNfc2gzMi5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KIAogLyoKICAqIHN5c19waXBlKCkgaXMgdGhlIG5vcm1hbCBDIGNhbGxpbmcgc3RhbmRhcmQgZm9yIGNyZWF0aW5nCkBAIC0zNywxMyArMzgsMTMgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWFzbWxpbmthZ2Ugc3NpemVfdCBzeXNfcHJlYWRfd3JhcHBlcih1bnNpZ25lZCBpbnQgZmQsIGNoYXIgKiBidWYsCithc21saW5rYWdlIHNzaXplX3Qgc3lzX3ByZWFkX3dyYXBwZXIodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICBzaXplX3QgY291bnQsIGxvbmcgZHVtbXksIGxvZmZfdCBwb3MpCiB7CiAJcmV0dXJuIHN5c19wcmVhZDY0KGZkLCBidWYsIGNvdW50LCBwb3MpOwogfQogCi1hc21saW5rYWdlIHNzaXplX3Qgc3lzX3B3cml0ZV93cmFwcGVyKHVuc2lnbmVkIGludCBmZCwgY29uc3QgY2hhciAqIGJ1ZiwKK2FzbWxpbmthZ2Ugc3NpemVfdCBzeXNfcHdyaXRlX3dyYXBwZXIodW5zaWduZWQgaW50IGZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb25nIGR1bW15LCBsb2ZmX3QgcG9zKQogewogCXJldHVybiBzeXNfcHdyaXRlNjQoZmQsIGJ1ZiwgY291bnQsIHBvcyk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMKaW5kZXggMDc1OGI1ZS4uMjNjYTcxMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVfMzIuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCi0gKiAgYXJjaC9zaC9rZXJuZWwvdGltZS5jCisgKiAgYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jCiAgKgogICogIENvcHlyaWdodCAoQykgMTk5OSAgVGV0c3V5YSBPa2FkYSAmIE5paWJlIFl1dGFrYQogICogIENvcHlyaWdodCAoQykgMjAwMCAgUGhpbGlwcCBSdW1wZiA8cHJ1bXBmQHR1eC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDggIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgIE0uIFIuIEJyb3duICA8bXJicm93bkBsaW51eC1zaC5vcmc+CiAgKgogICogIFNvbWUgY29kZSB0YWtlbiBmcm9tIGkzODYgdmVyc2lvbi4KQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CS8qIGZvciBydGNfbG9jayAqLworI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9ydGMuaD4KICNpbmNsdWRlIDxhc20vdGltZXIuaD4KQEAgLTI1Myw2ICsyNTUsMTAgQEAKIAlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsCiAJCQkJLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOwogCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUCisJbG9jYWxfdGltZXJfc2V0dXAoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKyNlbmRpZgorCiAJLyoKIAkgKiBGaW5kIHRoZSB0aW1lciB0byB1c2UgYXMgdGhlIHN5c3RlbSB0aW1lciwgaXQgd2lsbCBiZQogCSAqIGluaXRpYWxpemVkIGZvciB1cy4KQEAgLTI2MCw2ICsyNjYsNyBAQAogCXN5c190aW1lciA9IGdldF9zeXNfdGltZXIoKTsKIAlwcmludGsoS0VSTl9JTkZPICJVc2luZyAlcyBmb3Igc3lzdGVtIHRpbWVyXG4iLCBzeXNfdGltZXItPm5hbWUpOwogCisKIAlpZiAoc3lzX3RpbWVyLT5vcHMtPnJlYWQpCiAJCWNsb2Nrc291cmNlX3NoLnJlYWQgPSBzeXNfdGltZXItPm9wcy0+cmVhZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZV82NC5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZV82NC5jCmluZGV4IDc5MWVkYWIuLmJiYjJhZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzY0LmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KIAogI2RlZmluZSBUTVVfVE9DUl9JTklUCTB4MDAKICNkZWZpbmUgVE1VMF9UQ1JfSU5JVAkweDAwMjAKQEAgLTUxLDE0ICs1Miw2IEBACiAjZGVmaW5lIFJUQ19SQ1IxX0NJRQkweDEwCS8qIENhcnJ5IEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUgUlRDX1JDUjEJKHJ0Y19iYXNlICsgMHgzOCkKIAotLyogQ2xvY2ssIFBvd2VyIGFuZCBSZXNldCBDb250cm9sbGVyICovCi0jZGVmaW5lCUNQUkNfQkxPQ0tfT0ZGCTB4MDEwMTAwMDAKLSNkZWZpbmUgQ1BSQ19CQVNFCVBIWVNfUEVSSVBIRVJBTF9CTE9DSyArIENQUkNfQkxPQ0tfT0ZGCi0KLSNkZWZpbmUgRlJRQ1IJCShjcHJjX2Jhc2UrMHgwKQotI2RlZmluZSBXVENTUgkJKGNwcmNfYmFzZSsweDAwMTgpCi0jZGVmaW5lIFNUQkNSCQkoY3ByY19iYXNlKzB4MDAzMCkKLQogLyogVGltZSBNYW5hZ2VtZW50IFVuaXQgKi8KICNkZWZpbmUJVE1VX0JMT0NLX09GRgkweDAxMDIwMDAwCiAjZGVmaW5lIFRNVV9CQVNFCVBIWVNfUEVSSVBIRVJBTF9CTE9DSyArIFRNVV9CTE9DS19PRkYKQEAgLTI5MywxMDMgKzI4NiwxNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotCi1zdGF0aWMgX19pbml0IHVuc2lnbmVkIGludCBnZXRfY3B1X2h6KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGNvdW50OwotCXVuc2lnbmVkIGxvbmcgX19kdW1teTsKLQl1bnNpZ25lZCBsb25nIGN0Y192YWxfaW5pdCwgY3RjX3ZhbDsKLQotCS8qCi0JKiogUmVnYXJkbGVzcyB0aGUgdG9vbGNoYWluLCBmb3JjZSB0aGUgY29tcGlsZXIgdG8gdXNlIHRoZQotCSoqIGFyYml0cmFyeSByZWdpc3RlciByMyBhcyBhIGNsb2NrIHRpY2sgY291bnRlci4KLQkqKiBOT1RFOiByMyBtdXN0IGJlIGluIGFjY29yZGFuY2Ugd2l0aCBzaDY0X3J0Y19pbnRlcnJ1cHQoKQotCSovCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBsb25nICBfX3J0Y19pcnFfZmxhZyBfX2FzbV9fICgicjMiKTsKLQotCWxvY2FsX2lycV9lbmFibGUoKTsKLQlkbyB7fSB3aGlsZSAoY3RybF9pbmIocnRjX2Jhc2UpICE9IDApOwotCWN0cmxfb3V0YihSVENfUkNSMV9DSUUsIFJUQ19SQ1IxKTsgLyogRW5hYmxlIGNhcnJ5IGludGVycnVwdCAqLwotCi0JLyoKLQkgKiByMyBpcyBhcmJpdHJhcnkuIENEQyBkb2VzIG5vdCBzdXBwb3J0ICI9eiIuCi0JICovCi0JY3RjX3ZhbF9pbml0ID0gMHhmZmZmZmZmZjsKLQljdGNfdmFsID0gY3RjX3ZhbF9pbml0OwotCi0JYXNtIHZvbGF0aWxlKCJnZXR0cgl0cjAsICUxXG5cdCIKLQkJICAgICAicHV0Y29uCSUwLCAiIF9fQ1RDICJcblx0IgotCQkgICAgICJhbmQJJTIsIHI2MywgJTJcblx0IgotCQkgICAgICJwdGEJJCs0LCB0cjBcblx0IgotCQkgICAgICJiZXEvbAklMiwgcjYzLCB0cjBcblx0IgotCQkgICAgICJwdGFicwklMSwgdHIwXG5cdCIKLQkJICAgICAiZ2V0Y29uCSIgX19DVEMgIiwgJTBcblx0IgotCQk6ICI9ciIoY3RjX3ZhbCksICI9ciIgKF9fZHVtbXkpLCAiPXIiIChfX3J0Y19pcnFfZmxhZykKLQkJOiAiMCIgKDApKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCS8qCi0JICogU0gtMzoKLQkgKiBDUFUgY2xvY2sgPSA0IHN0YWdlcyAqIGxvb3AKLQkgKiB0c3QgICAgcm0scm0gICAgICBpZiBpZCBleAotCSAqIGJ0L3MgICAxYiAgICAgICAgICAgIGlmIGlkIGV4Ci0JICogYWRkICAgICMxLHJkICAgICAgICAgICAgaWYgaWQgZXgKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmKSBwaXBlIGxpbmUgc3RvbGUKLQkgKiB0c3QgICAgcm0scm0gICAgICAgICAgICAgICAgICBpZiBpZCBleAotICAgICAgICAgKiAuLi4uCi0JICoKLQkgKgotCSAqIFNILTQ6Ci0JICogQ1BVIGNsb2NrID0gNiBzdGFnZXMgKiBsb29wCi0JICogSSBkb24ndCBrbm93IHdoeS4KLSAgICAgICAgICogLi4uLgotCSAqCi0JICogU0gtNToKLQkgKiBVc2UgQ1RDIHJlZ2lzdGVyIHRvIGNvdW50LiAgVGhpcyBhcHByb2FjaCByZXR1cm5zIHRoZSByaWdodCB2YWx1ZQotCSAqIGV2ZW4gaWYgdGhlIEktY2FjaGUgaXMgZGlzYWJsZWQgKGUuZy4gd2hpbHN0IGRlYnVnZ2luZy4pCi0JICoKLQkgKi8KLQotCWNvdW50ID0gY3RjX3ZhbF9pbml0IC0gY3RjX3ZhbDsgLyogQ1RDIGNvdW50cyBkb3duICovCi0KLQkvKgotCSAqIFRoaXMgcmVhbGx5IGlzIGNvdW50IGJ5IHRoZSBudW1iZXIgb2YgY2xvY2sgY3ljbGVzCi0gICAgICAgICAqIGJ5IHRoZSByYXRpbyBiZXR3ZWVuIGEgY29tcGxldGUgUjY0Q05UCi0gICAgICAgICAqIHdyYXAtYXJvdW5kICgxMjgpIGFuZCBDVUkgaW50ZXJydXB0IGJlaW5nIHJhaXNlZCAoNjQpLgotCSAqLwotCXJldHVybiBjb3VudCoyOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc2g2NF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOwotCi0JY3RybF9vdXRiKDAsIFJUQ19SQ1IxKTsJLyogRGlzYWJsZSBDYXJyeSBJbnRlcnJ1cHRzICovCi0JcmVncy0+cmVnc1szXSA9IDE7CS8qIFVzaW5nIHIzICovCi0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgID0gewogCS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0LAogCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCiAJLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gInRpbWVyIiwKIH07Ci1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnExICA9IHsKLQkuaGFuZGxlciA9IHNoNjRfcnRjX2ludGVycnVwdCwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKLQkubmFtZSA9ICJydGMiLAotfTsKIAogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNwdV9jbG9jaywgbWFzdGVyX2Nsb2NrLCBidXNfY2xvY2ssIG1vZHVsZV9jbG9jazsKIAl1bnNpZ25lZCBsb25nIGludGVydmFsOwotCXVuc2lnbmVkIGxvbmcgZnJxY3IsIGlmYywgcGZjOwotCXN0YXRpYyBpbnQgaWZjX3RhYmxlW10gPSB7IDIsIDQsIDYsIDgsIDEwLCAxMiwgMTYsIDI0IH07Ci0jZGVmaW5lIGJmY190YWJsZSBpZmNfdGFibGUJLyogU2FtZSAqLwotI2RlZmluZSBwZmNfdGFibGUgaWZjX3RhYmxlCS8qIFNhbWUgKi8KKwlzdHJ1Y3QgY2xrICpjbGs7CiAKIAl0bXVfYmFzZSA9IG9uY2hpcF9yZW1hcChUTVVfQkFTRSwgMTAyNCwgIlRNVSIpOwogCWlmICghdG11X2Jhc2UpIHsKQEAgLTQwMSw1MCArMzA4LDE5IEBACiAJCXBhbmljKCJVbmFibGUgdG8gcmVtYXAgUlRDXG4iKTsKIAl9CiAKLQljcHJjX2Jhc2UgPSBvbmNoaXBfcmVtYXAoQ1BSQ19CQVNFLCAxMDI0LCAiQ1BSQyIpOwotCWlmICghY3ByY19iYXNlKSB7Ci0JCXBhbmljKCJVbmFibGUgdG8gcmVtYXAgQ1BSQ1xuIik7Ci0JfQorCWNsayA9IGNsa19nZXQoTlVMTCwgImNwdV9jbGsiKTsKKwlzY2FsZWRfcmVjaXBfY3RjX3RpY2tzX3Blcl9qaWZmeSA9ICgoMVVMTCA8PCBDVENfSklGRllfU0NBTEVfU0hJRlQpIC8KKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKGNsa19nZXRfcmF0ZShjbGspIC8gSFopKTsKIAogCXJ0Y19zaF9nZXRfdGltZSgmeHRpbWUpOwogCiAJc2V0dXBfaXJxKFRJTUVSX0lSUSwgJmlycTApOwotCXNldHVwX2lycShSVENfSVJRLCAmaXJxMSk7CiAKLQkvKiBDaGVjayBob3cgZmFzdCBpdCBpcy4uICovCi0JY3B1X2Nsb2NrID0gZ2V0X2NwdV9oeigpOwotCi0JLyogTm90ZSBjYXJlZnVsIG9yZGVyIG9mIG9wZXJhdGlvbnMgdG8gbWFpbnRhaW4gcmVhc29uYWJsZSBwcmVjaXNpb24gYW5kIGF2b2lkIG92ZXJmbG93LiAqLwotCXNjYWxlZF9yZWNpcF9jdGNfdGlja3NfcGVyX2ppZmZ5ID0gKCgxVUxMIDw8IENUQ19KSUZGWV9TQ0FMRV9TSElGVCkgLyAodW5zaWduZWQgbG9uZyBsb25nKShjcHVfY2xvY2sgLyBIWikpOwotCi0JZnJlZV9pcnEoUlRDX0lSUSwgTlVMTCk7Ci0KLQlwcmludGsoIkNQVSBjbG9jazogJWQuJTAyZE1IelxuIiwKLQkgICAgICAgKGNwdV9jbG9jayAvIDEwMDAwMDApLCAoY3B1X2Nsb2NrICUgMTAwMDAwMCkvMTAwMDApOwotCXsKLQkJdW5zaWduZWQgc2hvcnQgYmZjOwotCQlmcnFjciA9IGN0cmxfaW5sKEZSUUNSKTsKLQkJaWZjICA9IGlmY190YWJsZVsoZnJxY3I+PiA2KSAmIDB4MDAwN107Ci0JCWJmYyAgPSBiZmNfdGFibGVbKGZycWNyPj4gMykgJiAweDAwMDddOwotCQlwZmMgID0gcGZjX3RhYmxlWyhmcnFjcj4+IDEyKSAmIDB4MDAwN107Ci0JCW1hc3Rlcl9jbG9jayA9IGNwdV9jbG9jayAqIGlmYzsKLQkJYnVzX2Nsb2NrID0gbWFzdGVyX2Nsb2NrL2JmYzsKLQl9Ci0KLQlwcmludGsoIkJ1cyBjbG9jazogJWQuJTAyZE1IelxuIiwKLQkgICAgICAgKGJ1c19jbG9jay8xMDAwMDAwKSwgKGJ1c19jbG9jayAlIDEwMDAwMDApLzEwMDAwKTsKLQltb2R1bGVfY2xvY2sgPSBtYXN0ZXJfY2xvY2svcGZjOwotCXByaW50aygiTW9kdWxlIGNsb2NrOiAlZC4lMDJkTUh6XG4iLAotCSAgICAgICAobW9kdWxlX2Nsb2NrLzEwMDAwMDApLCAobW9kdWxlX2Nsb2NrICUgMTAwMDAwMCkvMTAwMDApOwotCWludGVydmFsID0gKG1vZHVsZV9jbG9jay8oSFoqNCkpOworCWNsayA9IGNsa19nZXQoTlVMTCwgIm1vZHVsZV9jbGsiKTsKKwlpbnRlcnZhbCA9IChjbGtfZ2V0X3JhdGUoY2xrKS8oSFoqNCkpOwogCiAJcHJpbnRrKCJJbnRlcnZhbCA9ICVsZFxuIiwgaW50ZXJ2YWwpOwogCi0JY3VycmVudF9jcHVfZGF0YS5jcHVfY2xvY2sgICAgPSBjcHVfY2xvY2s7Ci0JY3VycmVudF9jcHVfZGF0YS5tYXN0ZXJfY2xvY2sgPSBtYXN0ZXJfY2xvY2s7Ci0JY3VycmVudF9jcHVfZGF0YS5idXNfY2xvY2sgICAgPSBidXNfY2xvY2s7Ci0JY3VycmVudF9jcHVfZGF0YS5tb2R1bGVfY2xvY2sgPSBtb2R1bGVfY2xvY2s7Ci0KIAkvKiBTdGFydCBUTVUwICovCiAJY3RybF9vdXRiKFRNVV9UU1RSX09GRiwgVE1VX1RTVFIpOwogCWN0cmxfb3V0YihUTVVfVE9DUl9JTklULCBUTVVfVE9DUik7CkBAIC00NTQsMzYgKzMzMCw2IEBACiAJY3RybF9vdXRiKFRNVV9UU1RSX0lOSVQsIFRNVV9UU1RSKTsKIH0KIAotdm9pZCBlbnRlcl9kZWVwX3N0YW5kYnkodm9pZCkKLXsKLQkvKiBEaXNhYmxlIHdhdGNoZG9nIHRpbWVyICovCi0JY3RybF9vdXRsKDB4YTUwMDAwMDAsIFdUQ1NSKTsKLQkvKiBDb25maWd1cmUgZGVlcCBzdGFuZGJ5IG9uIHNsZWVwICovCi0JY3RybF9vdXRsKDB4MDMsIFNUQkNSKTsKLQotI2lmZGVmIENPTkZJR19TSF9BTFBIQU5VTUVSSUMKLQl7Ci0JCWV4dGVybiB2b2lkIG1hY2hfYWxwaGFudW0oaW50IHBvc2l0aW9uLCB1bnNpZ25lZCBjaGFyIHZhbHVlKTsKLQkJZXh0ZXJuIHZvaWQgbWFjaF9hbHBoYW51bV9icmlnaHRuZXNzKGludCBzZXR0aW5nKTsKLQkJY2hhciBoYWx0ZWRbXSA9ICJIYWx0ZWQuICI7Ci0JCWludCBpOwotCQltYWNoX2FscGhhbnVtX2JyaWdodG5lc3MoNik7IC8qIGRpbW1lc3Qgc2V0dGluZyBhYm92ZSBvZmYgKi8KLQkJZm9yIChpPTA7IGk8ODsgaSsrKSB7Ci0JCQltYWNoX2FscGhhbnVtKGksIGhhbHRlZFtpXSk7Ci0JCX0KLQkJYXNtIF9fdm9sYXRpbGVfXyAoInN5bmNvIik7Ci0JfQotI2VuZGlmCi0KLQlhc20gX192b2xhdGlsZV9fICgic2xlZXAiKTsKLQlhc20gX192b2xhdGlsZV9fICgic3luY2kiKTsKLQlhc20gX192b2xhdGlsZV9fICgibm9wIik7Ci0JYXNtIF9fdm9sYXRpbGVfXyAoIm5vcCIpOwotCWFzbSBfX3ZvbGF0aWxlX18gKCJub3AiKTsKLQlhc20gX192b2xhdGlsZV9fICgibm9wIik7Ci0JcGFuaWMoIlVuZXhwZWN0ZWQgd2FrZXVwIVxuIik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLyogUlRDIGJhc2UsIGZpbGxlZCBpbiBieSBydGNfaW5pdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL01ha2VmaWxlCmluZGV4IGJjZjI0NGYuLjBiN2Y4NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvTWFrZWZpbGUKQEAgLTgsMyArOCw0IEBACiBvYmotJChDT05GSUdfU0hfTVRVMikJCSs9IHRpbWVyLW10dTIubwogb2JqLSQoQ09ORklHX1NIX0NNVCkJCSs9IHRpbWVyLWNtdC5vCiAKK29iai0kKENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVCkJKz0gdGltZXItYnJvYWRjYXN0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1icm9hZGNhc3QuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1icm9hZGNhc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjMxNzYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWJyb2FkY2FzdC5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBEdW1teSBsb2NhbCB0aW1lcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgUGF1bCBNdW5kdAorICoKKyAqIGNsb25lZCBmcm9tOgorICoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgQVJNIEx0ZC4KKyAqICBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlLCBsb2NhbF9jbG9ja2V2ZW50KTsKKworLyoKKyAqIFVzZWQgb24gU01QIGZvciBlaXRoZXIgdGhlIGxvY2FsIHRpbWVyIG9yIFNNUF9NU0dfVElNRVIKKyAqLwordm9pZCBsb2NhbF90aW1lcl9pbnRlcnJ1cHQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjbGsgPSAmX19nZXRfY3B1X3Zhcihsb2NhbF9jbG9ja2V2ZW50KTsKKworCWNsay0+ZXZlbnRfaGFuZGxlcihjbGspOworfQorCitzdGF0aWMgdm9pZCBkdW1teV90aW1lcl9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCQkgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2xrKQoreworfQorCit2b2lkIF9fY3B1aW5pdCBsb2NhbF90aW1lcl9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsayA9ICZwZXJfY3B1KGxvY2FsX2Nsb2NrZXZlbnQsIGNwdSk7CisKKwljbGstPm5hbWUJCT0gImR1bW15X3RpbWVyIjsKKwljbGstPmZlYXR1cmVzCQk9IENMT0NLX0VWVF9GRUFUX0RVTU1ZOworCWNsay0+cmF0aW5nCQk9IDIwMDsKKwljbGstPm11bHQJCT0gMTsKKwljbGstPnNldF9tb2RlCQk9IGR1bW15X3RpbWVyX3NldF9tb2RlOworCWNsay0+YnJvYWRjYXN0CQk9IHNtcF90aW1lcl9icm9hZGNhc3Q7CisJY2xrLT5jcHVtYXNrCQk9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2xrKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1jbXQuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1jbXQuYwppbmRleCBkMjBjOGMzLi5jMTI3MjkzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItY210LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWNtdC5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHN5c190aW1lcl9vcHMgY210X3RpbWVyX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyX29wcyBjbXRfdGltZXJfb3BzID0gewogCS5pbml0CQk9IGNtdF90aW1lcl9pbml0LAogCS5zdGFydAkJPSBjbXRfdGltZXJfc3RhcnQsCiAJLnN0b3AJCT0gY210X3RpbWVyX3N0b3AsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKaW5kZXggMWNhOWFkNC4uYWFhZjkwZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYwpAQCAtMjgsNDMgKzI4LDkwIEBACiAjZGVmaW5lIFRNVV9UT0NSX0lOSVQJMHgwMAogI2RlZmluZSBUTVVfVENSX0lOSVQJMHgwMDIwCiAKKyNkZWZpbmUgVE1VMAkJKDApCisjZGVmaW5lIFRNVTEJCSgxKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3RtdV9zdGFydChpbnQgdG11X251bSkKK3sKKwljdHJsX291dGIoY3RybF9pbmIoVE1VXzAxMl9UU1RSKSB8ICgweDE8PHRtdV9udW0pLCBUTVVfMDEyX1RTVFIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3RtdV9zZXRfaXJxKGludCB0bXVfbnVtLCBpbnQgZW5hYmxlZCkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHRtdV90Y3IgPSBUTVUwX1RDUiArICgweGMqdG11X251bSk7CisJY3RybF9vdXR3KCAoZW5hYmxlZCA/IGN0cmxfaW53KHRtdV90Y3IpIHwgKDE8PDUpIDogY3RybF9pbncodG11X3RjcikgJiB+KDE8PDUpKSwgdG11X3Rjcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfdG11X3N0b3AoaW50IHRtdV9udW0pCit7CisJY3RybF9vdXRiKGN0cmxfaW5iKFRNVV8wMTJfVFNUUikgJiB+KDB4MTw8dG11X251bSksIFRNVV8wMTJfVFNUUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfdG11X2NsZWFyX3N0YXR1cyhpbnQgdG11X251bSkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHRtdV90Y3IgPSBUTVUwX1RDUiArICgweGMqdG11X251bSk7CisJLyogQ2xlYXIgVU5GIGJpdCAqLworCWN0cmxfb3V0dyhjdHJsX2ludyh0bXVfdGNyKSAmIH4weDEwMCwgdG11X3Rjcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfdG11X3JlYWQoaW50IHRtdV9udW0pCit7CisgICAgICAgIHJldHVybiBjdHJsX2lubChUTVUwX1RDTlQrMHhDKnRtdV9udW0pOworfQorCiBzdGF0aWMgaW50IHRtdV90aW1lcl9zdGFydCh2b2lkKQogewotCWN0cmxfb3V0YihjdHJsX2luYihUTVVfMDEyX1RTVFIpIHwgMHgzLCBUTVVfMDEyX1RTVFIpOworCV90bXVfc3RhcnQoVE1VMCk7CisJX3RtdV9zdGFydChUTVUxKTsKKwlfdG11X3NldF9pcnEoVE1VMCwxKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdG11MF90aW1lcl9zZXRfaW50ZXJ2YWwodW5zaWduZWQgbG9uZyBpbnRlcnZhbCwgdW5zaWduZWQgaW50IHJlbG9hZCkKK3N0YXRpYyBpbnQgdG11X3RpbWVyX3N0b3Aodm9pZCkKIHsKLQljdHJsX291dGwoaW50ZXJ2YWwsIFRNVTBfVENOVCk7CisJX3RtdV9zdG9wKFRNVTApOworCV90bXVfc3RvcChUTVUxKTsKKwlfdG11X2NsZWFyX3N0YXR1cyhUTVUwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGFsc28gd2hlbiB0aGUgbW9kdWxlX2NsayBpcyBzY2FsZWQgdGhlIFRNVTEKKyAqIHdpbGwgc2hvdyB0aGUgc2FtZSBmcmVxdWVuY3kKKyAqLworc3RhdGljIGludCB0bXVzX2FyZV9zY2FsZWQ7CisKK3N0YXRpYyBjeWNsZV90IHRtdV90aW1lcl9yZWFkKHZvaWQpCit7CisJcmV0dXJuICgoY3ljbGVfdCkofl90bXVfcmVhZChUTVUxKSkpPDx0bXVzX2FyZV9zY2FsZWQ7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG11X2xhdGVzdF9pbnRlcnZhbFszXTsKK3N0YXRpYyB2b2lkIHRtdV90aW1lcl9zZXRfaW50ZXJ2YWwoaW50IHRtdV9udW0sIHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwsIHVuc2lnbmVkIGludCByZWxvYWQpCit7CisJdW5zaWduZWQgbG9uZyB0bXVfdGNudCA9IFRNVTBfVENOVCArIHRtdV9udW0qMHhDOworCXVuc2lnbmVkIGxvbmcgdG11X3Rjb3IgPSBUTVUwX1RDT1IgKyB0bXVfbnVtKjB4QzsKKworCV90bXVfc3RvcCh0bXVfbnVtKTsKKworCWN0cmxfb3V0bChpbnRlcnZhbCwgdG11X3RjbnQpOworCXRtdV9sYXRlc3RfaW50ZXJ2YWxbdG11X251bV0gPSBpbnRlcnZhbDsKIAogCS8qCiAJICogVENOVCByZWxvYWRzIGZyb20gVENPUiBvbiB1bmRlcmZsb3csIGNsZWFyIGl0IGlmIHdlIGRvbid0CiAJICogaW50ZW5kIHRvIGF1dG8tcmVsb2FkCiAJICovCi0JaWYgKHJlbG9hZCkKLQkJY3RybF9vdXRsKGludGVydmFsLCBUTVUwX1RDT1IpOwotCWVsc2UKLQkJY3RybF9vdXRsKDAsIFRNVTBfVENPUik7CisJY3RybF9vdXRsKCByZWxvYWQgPyBpbnRlcnZhbCA6IDAgLCB0bXVfdGNvcik7CiAKLQl0bXVfdGltZXJfc3RhcnQoKTsKLX0KLQotc3RhdGljIGludCB0bXVfdGltZXJfc3RvcCh2b2lkKQotewotCWN0cmxfb3V0YihjdHJsX2luYihUTVVfMDEyX1RTVFIpICYgfjB4MywgVE1VXzAxMl9UU1RSKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGN5Y2xlX3QgdG11X3RpbWVyX3JlYWQodm9pZCkKLXsKLQlyZXR1cm4gfmN0cmxfaW5sKFRNVTFfVENOVCk7CisJX3RtdV9zdGFydCh0bXVfbnVtKTsKIH0KIAogc3RhdGljIGludCB0bXVfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBjeWNsZXMsCiAJCQkgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7Ci0JdG11MF90aW1lcl9zZXRfaW50ZXJ2YWwoY3ljbGVzLCAxKTsKKwl0bXVfdGltZXJfc2V0X2ludGVydmFsKFRNVTAsY3ljbGVzLCBldnQtPm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMpOworCV90bXVfc2V0X2lycShUTVUwLDEpOwogCXJldHVybiAwOwogfQogCkBAIC05NiwxMiArMTQzLDggQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCB0bXVfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmR1bW15KQogewogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZ0bXUwX2Nsb2NrZXZlbnQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lcl9zdGF0dXM7Ci0KLQkvKiBDbGVhciBVTkYgYml0ICovCi0JdGltZXJfc3RhdHVzID0gY3RybF9pbncoVE1VMF9UQ1IpOwotCXRpbWVyX3N0YXR1cyAmPSB+MHgxMDA7Ci0JY3RybF9vdXR3KHRpbWVyX3N0YXR1cywgVE1VMF9UQ1IpOworCV90bXVfY2xlYXJfc3RhdHVzKFRNVTApOworCV90bXVfc2V0X2lycShUTVUwLHRtdTBfY2xvY2tldmVudC5tb2RlICE9IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpOwogCiAJZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CiAKQEAgLTEwOSw1NiArMTUyLDczIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRtdTBfaXJxID0gewotCS5uYW1lCQk9ICJwZXJpb2RpYyB0aW1lciIsCisJLm5hbWUJCT0gInBlcmlvZGljL29uZXNob3QgdGltZXIiLAogCS5oYW5kbGVyCT0gdG11X3RpbWVyX2ludGVycnVwdCwKIAkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCiAJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIH07CiAKLXN0YXRpYyB2b2lkIHRtdTBfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHZvaWQgX19pbml0IHRtdV9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTggZGl2aXNvciA9IFRNVV9UQ1JfSU5JVCAmIDB4NzsKLQljdHJsX291dHcoVE1VX1RDUl9JTklULCBUTVUwX1RDUik7Ci0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoNCA8PCAoZGl2aXNvciA8PCAxKSk7CisJdTggZGl2aXNvciAgPSBUTVVfVENSX0lOSVQgJiAweDc7CisJaW50IHRtdV9udW0gPSBjbGstPm5hbWVbM10tJzAnOworCWN0cmxfb3V0dyhUTVVfVENSX0lOSVQsIFRNVTBfVENSKyh0bXVfbnVtKjB4QykpOworCWNsay0+cmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoNCA8PCAoZGl2aXNvciA8PCAxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHRtdTBfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdm9pZCB0bXVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTggZGl2aXNvciA9IGN0cmxfaW53KFRNVTBfVENSKSAmIDB4NzsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICg0IDw8IChkaXZpc29yIDw8IDEpKTsKKwlpbnQgdG11X251bSA9IGNsay0+bmFtZVszXS0nMCc7CisJdW5zaWduZWQgbG9uZyBwcmV2X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGRpdmlzb3IgPSBjdHJsX2ludyhUTVUwX1RDUit0bXVfbnVtKjB4QykgJiAweDc7CisJY2xrLT5yYXRlICA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoNCA8PCAoZGl2aXNvciA8PCAxKSk7CisKKwlpZihwcmV2X3JhdGU9PWNsa19nZXRfcmF0ZShjbGspKQorCQlyZXR1cm47CisKKwlpZih0bXVfbnVtKQorCQlyZXR1cm47IC8qIE5vIG1vcmUgd29yayBvbiBUTVUxICovCisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdG11c19hcmVfc2NhbGVkID0gKHByZXZfcmF0ZSA+IGNsay0+cmF0ZSk7CisKKwlfdG11X3N0b3AoVE1VMCk7CisKKwl0bXUwX2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhjbGstPnJhdGUsIE5TRUNfUEVSX1NFQywKKwkJCQl0bXUwX2Nsb2NrZXZlbnQuc2hpZnQpOworCXRtdTBfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPQorCQkJY2xvY2tldmVudF9kZWx0YTJucygtMSwgJnRtdTBfY2xvY2tldmVudCk7CisJdG11MF9jbG9ja2V2ZW50Lm1pbl9kZWx0YV9ucyA9CisJCQljbG9ja2V2ZW50X2RlbHRhMm5zKDEsICZ0bXUwX2Nsb2NrZXZlbnQpOworCisJaWYgKHRtdXNfYXJlX3NjYWxlZCkKKwkJdG11X2xhdGVzdF9pbnRlcnZhbFtUTVUwXSA+Pj0gMTsKKwllbHNlCisJCXRtdV9sYXRlc3RfaW50ZXJ2YWxbVE1VMF0gPDw9IDE7CisKKwl0bXVfdGltZXJfc2V0X2ludGVydmFsKFRNVTAsCisJCXRtdV9sYXRlc3RfaW50ZXJ2YWxbVE1VMF0sCisJCXRtdTBfY2xvY2tldmVudC5tb2RlID09IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKTsKKworCV90bXVfc3RhcnQoVE1VMCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyB0bXUwX2Nsa19vcHMgPSB7Ci0JLmluaXQJCT0gdG11MF9jbGtfaW5pdCwKLQkucmVjYWxjCQk9IHRtdTBfY2xrX3JlY2FsYywKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyB0bXVfY2xrX29wcyA9IHsKKwkuaW5pdAkJPSB0bXVfY2xrX2luaXQsCisJLnJlY2FsYwkJPSB0bXVfY2xrX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHRtdTBfY2xrID0gewogCS5uYW1lCQk9ICJ0bXUwX2NsayIsCi0JLm9wcwkJPSAmdG11MF9jbGtfb3BzLAotfTsKLQotc3RhdGljIHZvaWQgdG11MV9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTggZGl2aXNvciA9IFRNVV9UQ1JfSU5JVCAmIDB4NzsKLQljdHJsX291dHcoZGl2aXNvciwgVE1VMV9UQ1IpOwotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKDQgPDwgKGRpdmlzb3IgPDwgMSkpOwotfQotCi1zdGF0aWMgdm9pZCB0bXUxX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCXU4IGRpdmlzb3IgPSBjdHJsX2ludyhUTVUxX1RDUikgJiAweDc7Ci0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoNCA8PCAoZGl2aXNvciA8PCAxKSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyB0bXUxX2Nsa19vcHMgPSB7Ci0JLmluaXQJCT0gdG11MV9jbGtfaW5pdCwKLQkucmVjYWxjCQk9IHRtdTFfY2xrX3JlY2FsYywKKwkub3BzCQk9ICZ0bXVfY2xrX29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHRtdTFfY2xrID0gewogCS5uYW1lCQk9ICJ0bXUxX2NsayIsCi0JLm9wcwkJPSAmdG11MV9jbGtfb3BzLAorCS5vcHMJCT0gJnRtdV9jbGtfb3BzLAogfTsKIAogc3RhdGljIGludCB0bXVfdGltZXJfaW5pdCh2b2lkKQpAQCAtMTg5LDExICsyNDksMTIgQEAKIAlmcmVxdWVuY3kgPSBjbGtfZ2V0X3JhdGUoJnRtdTBfY2xrKTsKIAlpbnRlcnZhbCA9IChmcmVxdWVuY3kgKyBIWiAvIDIpIC8gSFo7CiAKLQlzaF9ocHRfZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKCZ0bXUxX2Nsayk7Ci0JY3RybF9vdXRsKH4wLCBUTVUxX1RDTlQpOwotCWN0cmxfb3V0bCh+MCwgVE1VMV9UQ09SKTsKKwl0bXVfdGltZXJfc2V0X2ludGVydmFsKFRNVTAsaW50ZXJ2YWwsIDEpOworCXRtdV90aW1lcl9zZXRfaW50ZXJ2YWwoVE1VMSx+MCwxKTsKIAotCXRtdTBfdGltZXJfc2V0X2ludGVydmFsKGludGVydmFsLCAxKTsKKwlfdG11X3N0YXJ0KFRNVTEpOworCisJc2hfaHB0X2ZyZXF1ZW5jeSA9IGNsa19nZXRfcmF0ZSgmdG11MV9jbGspOwogCiAJdG11MF9jbG9ja2V2ZW50Lm11bHQgPSBkaXZfc2MoZnJlcXVlbmN5LCBOU0VDX1BFUl9TRUMsCiAJCQkJICAgICAgdG11MF9jbG9ja2V2ZW50LnNoaWZ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCmluZGV4IDUxMWE5NDIuLmIzNTliMDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9mcHUuaD4KKyNpbmNsdWRlIDxhc20va3Byb2Jlcy5oPgogCiAjaWZkZWYgQ09ORklHX1NIX0tHREIKICNpbmNsdWRlIDxhc20va2dkYi5oPgpAQCAtMTkyLDYgKzE5Myw3IEBACiAJaW50IHJldCwgaW5kZXgsIGNvdW50OwogCXVuc2lnbmVkIGxvbmcgKnJtLCAqcm47CiAJdW5zaWduZWQgY2hhciAqc3JjLCAqZHN0OworCXVuc2lnbmVkIGNoYXIgX191c2VyICpzcmN1LCAqZHN0dTsKIAogCWluZGV4ID0gKGluc3RydWN0aW9uPj44KSYxNTsJLyogMHgwRjAwICovCiAJcm4gPSAmcmVncy0+cmVnc1tpbmRleF07CkBAIC0yMDYsMjggKzIwOCwyOCBAQAogCWNhc2UgMDogLyogbW92Lltid2xdIHRvL2Zyb20gbWVtb3J5IHZpYSByMCtybiAqLwogCQlpZiAoaW5zdHJ1Y3Rpb24gJiA4KSB7CiAJCQkvKiBmcm9tIG1lbW9yeSAqLwotCQkJc3JjID0gKHVuc2lnbmVkIGNoYXIqKSAqcm07Ci0JCQlzcmMgKz0gcmVncy0+cmVnc1swXTsKLQkJCWRzdCA9ICh1bnNpZ25lZCBjaGFyKikgcm47Ci0JCQkqKHVuc2lnbmVkIGxvbmcqKWRzdCA9IDA7CisJCQlzcmN1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJtOworCQkJc3JjdSArPSByZWdzLT5yZWdzWzBdOworCQkJZHN0ID0gKHVuc2lnbmVkIGNoYXIgKilybjsKKwkJCSoodW5zaWduZWQgbG9uZyAqKWRzdCA9IDA7CiAKICNpZiAhZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKIAkJCWRzdCArPSA0LWNvdW50OwogI2VuZGlmCi0JCQlpZiAobWEtPmZyb20oZHN0LCBzcmMsIGNvdW50KSkKKwkJCWlmIChtYS0+ZnJvbShkc3QsIHNyY3UsIGNvdW50KSkKIAkJCQlnb3RvIGZldGNoX2ZhdWx0OwogCiAJCQlzaWduX2V4dGVuZChjb3VudCwgZHN0KTsKIAkJfSBlbHNlIHsKIAkJCS8qIHRvIG1lbW9yeSAqLwotCQkJc3JjID0gKHVuc2lnbmVkIGNoYXIqKSBybTsKKwkJCXNyYyA9ICh1bnNpZ25lZCBjaGFyICopcm07CiAjaWYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCiAJCQlzcmMgKz0gNC1jb3VudDsKICNlbmRpZgotCQkJZHN0ID0gKHVuc2lnbmVkIGNoYXIqKSAqcm47Ci0JCQlkc3QgKz0gcmVncy0+cmVnc1swXTsKKwkJCWRzdHUgPSAodW5zaWduZWQgY2hhciBfX3VzZXIgKikqcm47CisJCQlkc3R1ICs9IHJlZ3MtPnJlZ3NbMF07CiAKLQkJCWlmIChtYS0+dG8oZHN0LCBzcmMsIGNvdW50KSkKKwkJCWlmIChtYS0+dG8oZHN0dSwgc3JjLCBjb3VudCkpCiAJCQkJZ290byBmZXRjaF9mYXVsdDsKIAkJfQogCQlyZXQgPSAwOwpAQCAtMjM1LDEwICsyMzcsMTAgQEAKIAogCWNhc2UgMTogLyogbW92LmwgUm0sQChkaXNwLFJuKSAqLwogCQlzcmMgPSAodW5zaWduZWQgY2hhciopIHJtOwotCQlkc3QgPSAodW5zaWduZWQgY2hhciopICpybjsKLQkJZHN0ICs9IChpbnN0cnVjdGlvbiYweDAwMEYpPDwyOworCQlkc3R1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJuOworCQlkc3R1ICs9IChpbnN0cnVjdGlvbiYweDAwMEYpPDwyOwogCi0JCWlmIChtYS0+dG8oZHN0LCBzcmMsIDQpKQorCQlpZiAobWEtPnRvKGRzdHUsIHNyYywgNCkpCiAJCQlnb3RvIGZldGNoX2ZhdWx0OwogCQlyZXQgPSAwOwogCQlicmVhazsKQEAgLTI0NywyOCArMjQ5LDI4IEBACiAJCWlmIChpbnN0cnVjdGlvbiAmIDQpCiAJCQkqcm4gLT0gY291bnQ7CiAJCXNyYyA9ICh1bnNpZ25lZCBjaGFyKikgcm07Ci0JCWRzdCA9ICh1bnNpZ25lZCBjaGFyKikgKnJuOworCQlkc3R1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJuOwogI2lmICFkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQogCQlzcmMgKz0gNC1jb3VudDsKICNlbmRpZgotCQlpZiAobWEtPnRvKGRzdCwgc3JjLCBjb3VudCkpCisJCWlmIChtYS0+dG8oZHN0dSwgc3JjLCBjb3VudCkpCiAJCQlnb3RvIGZldGNoX2ZhdWx0OwogCQlyZXQgPSAwOwogCQlicmVhazsKIAogCWNhc2UgNTogLyogbW92LmwgQChkaXNwLFJtKSxSbiAqLwotCQlzcmMgPSAodW5zaWduZWQgY2hhciopICpybTsKLQkJc3JjICs9IChpbnN0cnVjdGlvbiYweDAwMEYpPDwyOwotCQlkc3QgPSAodW5zaWduZWQgY2hhciopIHJuOwotCQkqKHVuc2lnbmVkIGxvbmcqKWRzdCA9IDA7CisJCXNyY3UgPSAodW5zaWduZWQgY2hhciBfX3VzZXIgKikqcm07CisJCXNyY3UgKz0gKGluc3RydWN0aW9uICYgMHgwMDBGKSA8PCAyOworCQlkc3QgPSAodW5zaWduZWQgY2hhciAqKXJuOworCQkqKHVuc2lnbmVkIGxvbmcgKilkc3QgPSAwOwogCi0JCWlmIChtYS0+ZnJvbShkc3QsIHNyYywgNCkpCisJCWlmIChtYS0+ZnJvbShkc3QsIHNyY3UsIDQpKQogCQkJZ290byBmZXRjaF9mYXVsdDsKIAkJcmV0ID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIDY6CS8qIG1vdi5bYndsXSBmcm9tIG1lbW9yeSwgcG9zc2libHkgd2l0aCBwb3N0LWluY3JlbWVudCAqLwotCQlzcmMgPSAodW5zaWduZWQgY2hhciopICpybTsKKwkJc3JjdSA9ICh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSpybTsKIAkJaWYgKGluc3RydWN0aW9uICYgNCkKIAkJCSpybSArPSBjb3VudDsKIAkJZHN0ID0gKHVuc2lnbmVkIGNoYXIqKSBybjsKQEAgLTI3Nyw3ICsyNzksNyBAQAogI2lmICFkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQogCQlkc3QgKz0gNC1jb3VudDsKICNlbmRpZgotCQlpZiAobWEtPmZyb20oZHN0LCBzcmMsIGNvdW50KSkKKwkJaWYgKG1hLT5mcm9tKGRzdCwgc3JjdSwgY291bnQpKQogCQkJZ290byBmZXRjaF9mYXVsdDsKIAkJc2lnbl9leHRlbmQoY291bnQsIGRzdCk7CiAJCXJldCA9IDA7CkBAIC0yODYsMjggKzI4OCwyOCBAQAogCWNhc2UgODoKIAkJc3dpdGNoICgoaW5zdHJ1Y3Rpb24mMHhGRjAwKT4+OCkgewogCQljYXNlIDB4ODE6IC8qIG1vdi53IFIwLEAoZGlzcCxSbikgKi8KLQkJCXNyYyA9ICh1bnNpZ25lZCBjaGFyKikgJnJlZ3MtPnJlZ3NbMF07CisJCQlzcmMgPSAodW5zaWduZWQgY2hhciAqKSAmcmVncy0+cmVnc1swXTsKICNpZiAhZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKIAkJCXNyYyArPSAyOwogI2VuZGlmCi0JCQlkc3QgPSAodW5zaWduZWQgY2hhciopICpybTsgLyogY2FsbGVkIFJuIGluIHRoZSBzcGVjICovCi0JCQlkc3QgKz0gKGluc3RydWN0aW9uJjB4MDAwRik8PDE7CisJCQlkc3R1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJtOyAvKiBjYWxsZWQgUm4gaW4gdGhlIHNwZWMgKi8KKwkJCWRzdHUgKz0gKGluc3RydWN0aW9uICYgMHgwMDBGKSA8PCAxOwogCi0JCQlpZiAobWEtPnRvKGRzdCwgc3JjLCAyKSkKKwkJCWlmIChtYS0+dG8oZHN0dSwgc3JjLCAyKSkKIAkJCQlnb3RvIGZldGNoX2ZhdWx0OwogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMHg4NTogLyogbW92LncgQChkaXNwLFJtKSxSMCAqLwotCQkJc3JjID0gKHVuc2lnbmVkIGNoYXIqKSAqcm07Ci0JCQlzcmMgKz0gKGluc3RydWN0aW9uJjB4MDAwRik8PDE7Ci0JCQlkc3QgPSAodW5zaWduZWQgY2hhciopICZyZWdzLT5yZWdzWzBdOwotCQkJKih1bnNpZ25lZCBsb25nKilkc3QgPSAwOworCQkJc3JjdSA9ICh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSpybTsKKwkJCXNyY3UgKz0gKGluc3RydWN0aW9uICYgMHgwMDBGKSA8PCAxOworCQkJZHN0ID0gKHVuc2lnbmVkIGNoYXIgKikgJnJlZ3MtPnJlZ3NbMF07CisJCQkqKHVuc2lnbmVkIGxvbmcgKilkc3QgPSAwOwogCiAjaWYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCiAJCQlkc3QgKz0gMjsKICNlbmRpZgotCQkJaWYgKG1hLT5mcm9tKGRzdCwgc3JjLCAyKSkKKwkJCWlmIChtYS0+ZnJvbShkc3QsIHNyY3UsIDIpKQogCQkJCWdvdG8gZmV0Y2hfZmF1bHQ7CiAJCQlzaWduX2V4dGVuZCgyLCBkc3QpOwogCQkJcmV0ID0gMDsKQEAgLTMzMyw3ICszMzUsOCBAQAogCQkJCSAgIHN0cnVjdCBtZW1fYWNjZXNzICptYSkKIHsKIAlvcGNvZGVfdCBpbnN0cnVjdGlvbjsKLQl2b2lkICphZGRyID0gKHZvaWQgKikocmVncy0+cGMgKyBpbnN0cnVjdGlvbl9zaXplKG9sZF9pbnN0cnVjdGlvbikpOworCXZvaWQgX191c2VyICphZGRyID0gKHZvaWQgX191c2VyICopKHJlZ3MtPnBjICsKKwkJaW5zdHJ1Y3Rpb25fc2l6ZShvbGRfaW5zdHJ1Y3Rpb24pKTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHJ1Y3Rpb24sIGFkZHIsIHNpemVvZihpbnN0cnVjdGlvbikpKSB7CiAJCS8qIHRoZSBpbnN0cnVjdGlvbi1mZXRjaCBmYXVsdGVkICovCkBAIC01MTEsMTQgKzUxNCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIENPTkZJR19DUFVfSEFTX1NSX1JCCi0jZGVmaW5lIGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKHgpCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0YyByMl9iYW5rLCAlMFxuXHQiIDogIj1yIiAoKHgpKSkKLSNlbHNlCi0jZGVmaW5lIGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKHgpCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdiByNCwgJTBcblx0IiA6ICI9ciIgKCh4KSkpCi0jZW5kaWYKLQogLyoKICAqIEhhbmRsZSB2YXJpb3VzIGFkZHJlc3MgZXJyb3IgZXhjZXB0aW9uczoKICAqICAtIGluc3RydWN0aW9uIGFkZHJlc3MgZXJyb3I6CkBAIC01NDIsNyArNTM3LDcgQEAKIAogCS8qIEludGVudGlvbmFsIGlmZGVmICovCiAjaWZkZWYgQ09ORklHX0NQVV9IQVNfU1JfUkIKLQlsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcihlcnJvcl9jb2RlKTsKKwllcnJvcl9jb2RlID0gbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoKTsKICNlbmRpZgogCiAJb2xkZnMgPSBnZXRfZnMoKTsKQEAgLTU1OSw3ICs1NTQsNyBAQAogCQl9CiAKIAkJc2V0X2ZzKFVTRVJfRFMpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmluc3RydWN0aW9uLCAodm9pZCAqKShyZWdzLT5wYyksCisJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHJ1Y3Rpb24sICh2b2lkIF9fdXNlciAqKShyZWdzLT5wYyksCiAJCQkJICAgc2l6ZW9mKGluc3RydWN0aW9uKSkpIHsKIAkJCS8qIEFyZ2guIEZhdWx0IG9uIHRoZSBpbnN0cnVjdGlvbiBpdHNlbGYuCiAJCQkgICBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gbm9uLVNNUApAQCAtNTg5LDcgKzU4NCw3IEBACiAJCQlkaWUoInVuYWxpZ25lZCBwcm9ncmFtIGNvdW50ZXIiLCByZWdzLCBlcnJvcl9jb2RlKTsKIAogCQlzZXRfZnMoS0VSTkVMX0RTKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbnN0cnVjdGlvbiwgKHZvaWQgKikocmVncy0+cGMpLAorCQlpZiAoY29weV9mcm9tX3VzZXIoJmluc3RydWN0aW9uLCAodm9pZCBfX3VzZXIgKikocmVncy0+cGMpLAogCQkJCSAgIHNpemVvZihpbnN0cnVjdGlvbikpKSB7CiAJCQkvKiBBcmdoLiBGYXVsdCBvbiB0aGUgaW5zdHJ1Y3Rpb24gaXRzZWxmLgogCQkJICAgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIG5vbi1TTVAKQEAgLTY4Myw3ICs2NzgsNyBAQAogCX0KICNlbmRpZgogCi0JbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoZXJyb3JfY29kZSk7CisJZXJyb3JfY29kZSA9IGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJQ0hLX1JFTU9URV9ERUJVRyhyZWdzKTsKQEAgLTczOSwxMSArNzM0LDEzIEBACiAJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKQogewogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gUkVMT0NfSElERSgmX19yZWdzLCAwKTsKLQl1bnNpZ25lZCBsb25nIGVycm9yX2NvZGU7CisJdW5zaWduZWQgbG9uZyBpbnN0OwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLSNpZmRlZiBDT05GSUdfU0hfRlBVX0VNVQotCXVuc2lnbmVkIHNob3J0IGluc3QgPSAwOwogCisJaWYgKGtwcm9iZV9oYW5kbGVfaWxsc2xvdChyZWdzLT5wYykgPT0gMCkKKwkJcmV0dXJuOworCisjaWZkZWYgQ09ORklHX1NIX0ZQVV9FTVUKIAlnZXRfdXNlcihpbnN0LCAodW5zaWduZWQgc2hvcnQgKilyZWdzLT5wYyArIDEpOwogCWlmICghZG9fZnB1X2luc3QoaW5zdCwgcmVncykpIHsKIAkJZ2V0X3VzZXIoaW5zdCwgKHVuc2lnbmVkIHNob3J0ICopcmVncy0+cGMpOwpAQCAtNzU0LDEyICs3NTEsMTIgQEAKIAkvKiBub3QgYSBGUFUgaW5zdC4gKi8KICNlbmRpZgogCi0JbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoZXJyb3JfY29kZSk7CisJaW5zdCA9IGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJQ0hLX1JFTU9URV9ERUJVRyhyZWdzKTsKIAlmb3JjZV9zaWcoU0lHSUxMLCB0c2spOwotCWRpZV9pZl9ub19maXh1cCgiaWxsZWdhbCBzbG90IGluc3RydWN0aW9uIiwgcmVncywgZXJyb3JfY29kZSk7CisJZGllX2lmX25vX2ZpeHVwKCJpbGxlZ2FsIHNsb3QgaW5zdHJ1Y3Rpb24iLCByZWdzLCBpbnN0KTsKIH0KIAogYXNtbGlua2FnZSB2b2lkIGRvX2V4Y2VwdGlvbl9lcnJvcih1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LApAQCAtNzY5LDcgKzc2Niw3IEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBSRUxPQ19ISURFKCZfX3JlZ3MsIDApOwogCWxvbmcgZXg7CiAKLQlsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcihleCk7CisJZXggPSBsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcigpOwogCWRpZV9pZl9rZXJuZWwoImV4Y2VwdGlvbiIsIHJlZ3MsIGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9saWIvZGl2NjQtZ2VuZXJpYy5jIGIvYXJjaC9zaC9saWIvZGl2NjQtZ2VuZXJpYy5jCmluZGV4IDRiZWYzYjUuLjYwZTc2YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbGliL2RpdjY0LWdlbmVyaWMuYworKysgYi9hcmNoL3NoL2xpYi9kaXY2NC1nZW5lcmljLmMKQEAgLTMsNiArMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKIGV4dGVybiB1aW50NjRfdCBfX3hkaXY2NF8zMih1NjQgbiwgdTMyIGQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2xpYi9pby5jIGIvYXJjaC9zaC9saWIvaW8uYwppbmRleCA0ZjU0ZWM0Li44OGRmZTZlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2xpYi9pby5jCisrKyBiL2FyY2gvc2gvbGliL2lvLmMKQEAgLTE0LDEyICsxNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLXZvaWQgX19yYXdfcmVhZHNsKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YXAsIGludCBsZW4pCit2b2lkIF9fcmF3X3JlYWRzbChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmRhdGFwLCBpbnQgbGVuKQogewogCXUzMiAqZGF0YTsKIAogCWZvciAoZGF0YSA9IGRhdGFwOyAobGVuICE9IDApICYmICgoKHUzMilkYXRhICYgMHgxZikgIT0gMCk7IGxlbi0tKQotCQkqZGF0YSsrID0gY3RybF9pbmwoYWRkcik7CisJCSpkYXRhKysgPSBfX3Jhd19yZWFkbChhZGRyKTsKIAogCWlmIChsaWtlbHkobGVuID49ICgweDIwID4+IDIpKSkgewogCQlpbnQgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNjsKQEAgLTU5LDExICs1OSwxMSBAQAogCX0KIAogCWZvciAoOyBsZW4gIT0gMDsgbGVuLS0pCi0JCSpkYXRhKysgPSBjdHJsX2lubChhZGRyKTsKKwkJKmRhdGErKyA9IF9fcmF3X3JlYWRsKGFkZHIpOwogfQogRVhQT1JUX1NZTUJPTChfX3Jhd19yZWFkc2wpOwogCi12b2lkIF9fcmF3X3dyaXRlc2wodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQordm9pZCBfX3Jhd193cml0ZXNsKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAlpZiAobGlrZWx5KGxlbiAhPSAwKSkgewogCQlpbnQgdG1wMTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vS2NvbmZpZyBiL2FyY2gvc2gvbW0vS2NvbmZpZwppbmRleCA4YTAzOTI2Li41NTVlYzk3IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL0tjb25maWcKKysrIGIvYXJjaC9zaC9tbS9LY29uZmlnCkBAIC0xMzIsNyArMTMyLDExIEBACiAKIGNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRwogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNQQVJTRU1FTQorCWRlcGVuZHMgb24gU1BBUlNFTUVNICYmIE1NVQorCitjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBNTVUKIAogY29uZmlnIEFSQ0hfTUVNT1JZX1BST0JFCiAJZGVmX2Jvb2wgeQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMgYi9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYwppbmRleCAwZTE4OWNjLi41YmEwNjdiIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYwpAQCAtMTMwLDEyICsxMzAsMTggQEAKIAlkY2FjaGVfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGNhY2hlIiwgU19JUlVTUiwgc2hfZGVidWdmc19yb290LAogCQkJCQkgICAgKHVuc2lnbmVkIGludCAqKUNBQ0hFX1RZUEVfRENBQ0hFLAogCQkJCQkgICAgJmNhY2hlX2RlYnVnZnNfZm9wcyk7CisJaWYgKCFkY2FjaGVfZGVudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoSVNfRVJSKGRjYWNoZV9kZW50cnkpKQogCQlyZXR1cm4gUFRSX0VSUihkY2FjaGVfZGVudHJ5KTsKIAogCWljYWNoZV9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpY2FjaGUiLCBTX0lSVVNSLCBzaF9kZWJ1Z2ZzX3Jvb3QsCiAJCQkJCSAgICAodW5zaWduZWQgaW50ICopQ0FDSEVfVFlQRV9JQ0FDSEUsCiAJCQkJCSAgICAmY2FjaGVfZGVidWdmc19mb3BzKTsKKwlpZiAoIWljYWNoZV9kZW50cnkpIHsKKwkJZGVidWdmc19yZW1vdmUoZGNhY2hlX2RlbnRyeSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAlpZiAoSVNfRVJSKGljYWNoZV9kZW50cnkpKSB7CiAJCWRlYnVnZnNfcmVtb3ZlKGRjYWNoZV9kZW50cnkpOwogCQlyZXR1cm4gUFRSX0VSUihpY2FjaGVfZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCmluZGV4IDFmZGM4ZDkuLjVjZmUwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwpAQCAtMjYxLDcgKzI2MSw3IEBACiB9CiAKIC8qIFRPRE86IFNlbGVjdGl2ZSBpY2FjaGUgaW52YWxpZGF0aW9uIHRocm91Z2ggSUMgYWRkcmVzcyBhcnJheS4uICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZmx1c2hfaWNhY2hlX2FsbCh2b2lkKQorc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZmx1c2hfaWNhY2hlX2FsbCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNjcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMgYi9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYwppbmRleCA2NGI4ZjdmLi45ZjhlYTNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYworKysgYi9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYwpAQCAtMTYsMTQgKzE2LDYgQEAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXN0cnVjdCBkbWFfY29oZXJlbnRfbWVtIHsKLQl2b2lkCQkqdmlydF9iYXNlOwotCXUzMgkJZGV2aWNlX2Jhc2U7Ci0JaW50CQlzaXplOwotCWludAkJZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZwkqYml0bWFwOwotfTsKLQogdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApCiB7CkBAIC00NCw3ICszNiw3IEBACiAJICovCiAJZG1hX2NhY2hlX3N5bmMoZGV2LCByZXQsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKIAotCXJldF9ub2NhY2hlID0gaW9yZW1hcF9ub2NhY2hlKHZpcnRfdG9fcGh5cyhyZXQpLCBzaXplKTsKKwlyZXRfbm9jYWNoZSA9ICh2b2lkIF9fZm9yY2UgKilpb3JlbWFwX25vY2FjaGUodmlydF90b19waHlzKHJldCksIHNpemUpOwogCWlmICghcmV0X25vY2FjaGUpIHsKIAkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylyZXQsIG9yZGVyKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC01OCwxMiArNTAsMTAgQEAKIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCSB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewotCXN0cnVjdCBkbWFfY29oZXJlbnRfbWVtICptZW0gPSBkZXYgPyBkZXYtPmRtYV9tZW0gOiBOVUxMOwogCWludCBvcmRlciA9IGdldF9vcmRlcihzaXplKTsKIAogCWlmICghZG1hX3JlbGVhc2VfZnJvbV9jb2hlcmVudChkZXYsIG9yZGVyLCB2YWRkcikpIHsKIAkJV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOwkvKiBmb3IgcG9ydGFiaWxpdHkgKi8KLQkJQlVHX09OKG1lbSAmJiBtZW0tPmZsYWdzICYgRE1BX01FTU9SWV9FWENMVVNJVkUpOwogCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChkbWFfaGFuZGxlKSwgb3JkZXIpOwogCQlpb3VubWFwKHZhZGRyKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2ZhdWx0XzMyLmMgYi9hcmNoL3NoL21tL2ZhdWx0XzMyLmMKaW5kZXggMGM3NzZmZC4uODk4ZDQ3NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9mYXVsdF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vZmF1bHRfMzIuYwpAQCAtMiw3ICsyLDcgQEAKICAqIFBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgU0ggd2l0aCBhbiBNTVUuCiAgKgogICogIENvcHlyaWdodCAoQykgMTk5OSAgTmlpYmUgWXV0YWthCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDggIFBhdWwgTXVuZHQKICAqCiAgKiAgQmFzZWQgb24gbGludXgvYXJjaC9pMzg2L21tL2ZhdWx0LmM6CiAgKiAgIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CiAjaW5jbHVkZSA8YXNtL2lvX3RyYXBwZWQuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CkBAIC0zNywxMCArMzgsMTAgQEAKIAlpbnQgZmF1bHQ7CiAJc2lnaW5mb190IGluZm87CiAKLSNpZmRlZiBDT05GSUdfU0hfS0dEQgotCWlmIChrZ2RiX25vZmF1bHQgJiYga2dkYl9idXNfZXJyX2hvb2spCi0JCWtnZGJfYnVzX2Vycl9ob29rKCk7Ci0jZW5kaWYKKwkvKgorCSAqIFdlIGRvbid0IGJvdGhlciB3aXRoIGFueSBub3RpZmllciBjYWxsYmFja3MgaGVyZSwgYXMgdGhleSBhcmUKKwkgKiBhbGwgaGFuZGxlZCB0aHJvdWdoIHRoZSBfX2RvX3BhZ2VfZmF1bHQoKSBmYXN0LXBhdGguCisJICovCiAKIAl0c2sgPSBjdXJyZW50OwogCXNpX2NvZGUgPSBTRUdWX01BUEVSUjsKQEAgLTYxLDcgKzYyLDYgQEAKIAkJcGdkID0gZ2V0X1RUQigpICsgb2Zmc2V0OwogCQlwZ2RfayA9IHN3YXBwZXJfcGdfZGlyICsgb2Zmc2V0OwogCi0JCS8qIFRoaXMgd2lsbCBuZXZlciBoYXBwZW4gd2l0aCB0aGUgZm9sZGVkIHBhZ2UgdGFibGUuICovCiAJCWlmICghcGdkX3ByZXNlbnQoKnBnZCkpIHsKIAkJCWlmICghcGdkX3ByZXNlbnQoKnBnZF9rKSkKIAkJCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOwpAQCAtNzEsOSArNzEsMTMgQEAKIAogCQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7CiAJCXB1ZF9rID0gcHVkX29mZnNldChwZ2RfaywgYWRkcmVzcyk7Ci0JCWlmIChwdWRfcHJlc2VudCgqcHVkKSB8fCAhcHVkX3ByZXNlbnQoKnB1ZF9rKSkKLQkJCWdvdG8gYmFkX2FyZWFfbm9zZW1hcGhvcmU7Ci0JCXNldF9wdWQocHVkLCAqcHVkX2spOworCisJCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpIHsKKwkJCWlmICghcHVkX3ByZXNlbnQoKnB1ZF9rKSkKKwkJCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOworCQkJc2V0X3B1ZChwdWQsICpwdWRfayk7CisJCQlyZXR1cm47CisJCX0KIAogCQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7CiAJCXBtZF9rID0gcG1kX29mZnNldChwdWRfaywgYWRkcmVzcyk7CkBAIC0yNDIsNiArMjQ2LDI1IEBACiAJCWdvdG8gbm9fY29udGV4dDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwKQoreworCWludCByZXQgPSAwOworCisJdHJhY2VfbWFyayhrZXJuZWxfYXJjaF90cmFwX2VudHJ5LCAidHJhcF9pZCAlZCBpcCAjcCVsZCIsCisJCSAgIHRyYXAgPj4gNSwgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSk7CisKKyNpZmRlZiBDT05GSUdfS1BST0JFUworCWlmICghdXNlcl9tb2RlKHJlZ3MpKSB7CisJCXByZWVtcHRfZGlzYWJsZSgpOworCQlpZiAoa3Byb2JlX3J1bm5pbmcoKSAmJiBrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLCB0cmFwKSkKKwkJCXJldCA9IDE7CisJCXByZWVtcHRfZW5hYmxlKCk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gcmV0OworfQorCiAjaWZkZWYgQ09ORklHX1NIX1NUT1JFX1FVRVVFUwogLyoKICAqIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgZm9yIHRoZSBTSC00IHN0b3JlIHF1ZXVlcywgYXMgcGFnZXMgZm9yIHRoaXMKQEAgLTI2NSwxMiArMjg4LDE4IEBACiAJcG1kX3QgKnBtZDsKIAlwdGVfdCAqcHRlOwogCXB0ZV90IGVudHJ5OworCWludCByZXQgPSAwOworCisJaWYgKG5vdGlmeV9wYWdlX2ZhdWx0KHJlZ3MsIGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCkpKQorCQlnb3RvIG91dDsKIAogI2lmZGVmIENPTkZJR19TSF9LR0RCCiAJaWYgKGtnZGJfbm9mYXVsdCAmJiBrZ2RiX2J1c19lcnJfaG9vaykKIAkJa2dkYl9idXNfZXJyX2hvb2soKTsKICNlbmRpZgogCisJcmV0ID0gMTsKKwogCS8qCiAJICogV2UgZG9uJ3QgdGFrZSBwYWdlIGZhdWx0cyBmb3IgUDEsIFAyLCBhbmQgcGFydHMgb2YgUDQsIHRoZXNlCiAJICogYXJlIGFsd2F5cyBtYXBwZWQsIHdoZXRoZXIgaXQgYmUgZHVlIHRvIGxlZ2FjeSBiZWhhdmlvdXIgaW4KQEAgLTI4MCwyNCArMzA5LDIzIEBACiAJCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyZXNzKTsKIAl9IGVsc2UgewogCQlpZiAodW5saWtlbHkoYWRkcmVzcyA+PSBUQVNLX1NJWkUgfHwgIWN1cnJlbnQtPm1tKSkKLQkJCXJldHVybiAxOworCQkJZ290byBvdXQ7CiAKIAkJcGdkID0gcGdkX29mZnNldChjdXJyZW50LT5tbSwgYWRkcmVzcyk7CiAJfQogCiAJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOwogCWlmIChwdWRfbm9uZV9vcl9jbGVhcl9iYWQocHVkKSkKLQkJcmV0dXJuIDE7CisJCWdvdG8gb3V0OwogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKIAlpZiAocG1kX25vbmVfb3JfY2xlYXJfYmFkKHBtZCkpCi0JCXJldHVybiAxOwotCisJCWdvdG8gb3V0OwogCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7CiAJZW50cnkgPSAqcHRlOwogCWlmICh1bmxpa2VseShwdGVfbm9uZShlbnRyeSkgfHwgcHRlX25vdF9wcmVzZW50KGVudHJ5KSkpCi0JCXJldHVybiAxOworCQlnb3RvIG91dDsKIAlpZiAodW5saWtlbHkod3JpdGVhY2Nlc3MgJiYgIXB0ZV93cml0ZShlbnRyeSkpKQotCQlyZXR1cm4gMTsKKwkJZ290byBvdXQ7CiAKIAlpZiAod3JpdGVhY2Nlc3MpCiAJCWVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpOwpAQCAtMzE0LDUgKzM0Miw4IEBACiAJc2V0X3B0ZShwdGUsIGVudHJ5KTsKIAl1cGRhdGVfbW11X2NhY2hlKE5VTEwsIGFkZHJlc3MsIGVudHJ5KTsKIAotCXJldHVybiAwOworCXJldCA9IDA7CitvdXQ6CisJdHJhY2VfbWFyayhrZXJuZWxfYXJjaF90cmFwX2V4aXQsIE1BUktfTk9BUkdTKTsKKwlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pbml0LmMgYi9hcmNoL3NoL21tL2luaXQuYwppbmRleCBiNzVhN2FjLi4yYTUzOTQzIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2luaXQuYworKysgYi9hcmNoL3NoL21tL2luaXQuYwpAQCAtMjMsNyArMjMsMTkgQEAKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07Ci11bnNpZ25lZCBsb25nIGNhY2hlZF90b191bmNhY2hlZCA9IDA7CisKKyNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKy8qCisgKiBIYW5kbGUgdHJpdmlhbCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGNhY2hlZCBhbmQgdW5jYWNoZWQKKyAqIHNlZ21lbnRzLCBtYWtpbmcgdXNlIG9mIHRoZSAxOjEgbWFwcGluZyByZWxhdGlvbnNoaXAgaW4KKyAqIDUxMk1CIGxvd21lbS4KKyAqCisgKiBUaGlzIGlzIHRoZSBvZmZzZXQgb2YgdGhlIHVuY2FjaGVkIHNlY3Rpb24gZnJvbSBpdHMgY2FjaGVkIGFsaWFzLgorICogRGVmYXVsdCB2YWx1ZSBvbmx5IHZhbGlkIGluIDI5IGJpdCBtb2RlLCBpbiAzMmJpdCBtb2RlIHdpbGwgYmUKKyAqIG92ZXJyaWRkZW4gaW4gcG1iX2luaXQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgY2FjaGVkX3RvX3VuY2FjaGVkID0gUDJTRUcgLSBQMVNFRzsKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01NVQogc3RhdGljIHZvaWQgc2V0X3B0ZV9waHlzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBwcm90KQpAQCAtNTgsOSArNzAsNyBAQAogCX0KIAogCXNldF9wdGUocHRlLCBwZm5fcHRlKHBoeXMgPj4gUEFHRV9TSElGVCwgcHJvdCkpOwotCi0JaWYgKGNhY2hlZF90b191bmNhY2hlZCkKLQkJZmx1c2hfdGxiX29uZShnZXRfYXNpZCgpLCBhZGRyKTsKKwlmbHVzaF90bGJfb25lKGdldF9hc2lkKCksIGFkZHIpOwogfQogCiAvKgpAQCAtMTEzLDcgKzEyMyw2IEBACiAJCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpIHsKIAkJCXB0ZV90ICpwdGVfdGFibGU7CiAJCQlwdGVfdGFibGUgPSAocHRlX3QgKilhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwotCQkJbWVtc2V0KHB0ZV90YWJsZSwgMCwgUEFHRV9TSVpFKTsKIAkJCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmluaXRfbW0sIHBtZCwgcHRlX3RhYmxlKTsKIAkJfQogCkBAIC0xNjUsMTUgKzE3NCw2IEBACiAjaWZkZWYgQ09ORklHX1NVUEVSSDMyCiAJLyogU2V0IHVwIHRoZSB1bmNhY2hlZCBmaXhtYXAgKi8KIAlzZXRfZml4bWFwX25vY2FjaGUoRklYX1VOQ0FDSEVELCBfX3BhKCZfX3VuY2FjaGVkX3N0YXJ0KSk7Ci0KLSNpZmRlZiBDT05GSUdfMjlCSVQKLQkvKgotCSAqIEhhbmRsZSB0cml2aWFsIHRyYW5zaXRpb25zIGJldHdlZW4gY2FjaGVkIGFuZCB1bmNhY2hlZAotCSAqIHNlZ21lbnRzLCBtYWtpbmcgdXNlIG9mIHRoZSAxOjEgbWFwcGluZyByZWxhdGlvbnNoaXAgaW4KLQkgKiA1MTJNQiBsb3dtZW0uCi0JICovCi0JY2FjaGVkX3RvX3VuY2FjaGVkID0gUDJTRUcgLSBQMVNFRzsKLSNlbmRpZgogI2VuZGlmCiB9CiAKQEAgLTI2NSw2ICsyNjUsMzUgQEAKIH0KICNlbmRpZgogCisjaWYgVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVAorc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp0aHJlYWRfaW5mb19jYWNoZTsKKworc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOworCisJdGkgPSBrbWVtX2NhY2hlX2FsbG9jKHRocmVhZF9pbmZvX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkodGkgPT0gTlVMTCkpCisJCXJldHVybiBOVUxMOworI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQorCW1lbXNldCh0aSwgMCwgVEhSRUFEX1NJWkUpOworI2VuZGlmCisJcmV0dXJuIHRpOworfQorCit2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUodGhyZWFkX2luZm9fY2FjaGUsIHRpKTsKK30KKwordm9pZCB0aHJlYWRfaW5mb19jYWNoZV9pbml0KHZvaWQpCit7CisJdGhyZWFkX2luZm9fY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidGhyZWFkX2luZm8iLCBUSFJFQURfU0laRSwKKwkJCQkJICAgICAgVEhSRUFEX1NJWkUsIDAsIE5VTEwpOworCUJVR19PTih0aHJlYWRfaW5mb19jYWNoZSA9PSBOVUxMKTsKK30KKyNlbmRpZiAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCisKICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSkKIHsKQEAgLTI5Miw0ICszMjEsMjEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKTsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKK2ludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgZW5kX3BmbiA9IHN0YXJ0X3BmbiArIChzaXplID4+IFBBR0VfU0hJRlQpOworCWludCByZXQ7CisKKwlyZXQgPSBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgMTIwICogSFopOworCWlmICh1bmxpa2VseShyZXQpKQorCQlwcmludGsoIiVzOiBGYWlsZWQsIG9mZmxpbmVfcGFnZXMoKSA9PSAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVtb3ZlX21lbW9yeSk7CiAjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wZy1ub21tdS5jIGIvYXJjaC9zaC9tbS9wZy1ub21tdS5jCmluZGV4IDY3N2RkNTcuLjkxZWQ0ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vcGctbm9tbXUuYworKysgYi9hcmNoL3NoL21tL3BnLW5vbW11LmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wbWIuYyBiL2FyY2gvc2gvbW0vcG1iLmMKaW5kZXggY2VmNzI3Ni4uODQyNDE2NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wbWIuYworKysgYi9hcmNoL3NoL21tL3BtYi5jCkBAIC0zOTQsNiArMzk0LDggQEAKIAogCWRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInBtYiIsIFNfSUZSRUcgfCBTX0lSVUdPLAogCQkJCSAgICAgc2hfZGVidWdmc19yb290LCBOVUxMLCAmcG1iX2RlYnVnZnNfZm9wcyk7CisJaWYgKCFkZW50cnkpCisJCXJldHVybiAtRU5PTUVNOwogCWlmIChJU19FUlIoZGVudHJ5KSkKIAkJcmV0dXJuIFBUUl9FUlIoZGVudHJ5KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS90bGItbm9tbXUuYyBiL2FyY2gvc2gvbW0vdGxiLW5vbW11LmMKaW5kZXggMTUxMTFiYy4uNzFjNzQyYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS90bGItbm9tbXUuYworKysgYi9hcmNoL3NoL21tL3RsYi1ub21tdS5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAvKgogICogTm90aGluZyB0b28gdGVycmlibHkgZXhjaXRpbmcgaGVyZSAuLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCmluZGV4IDBhMTFjYzA4Li5kNGZiMTFmIDEwMDY0NAotLS0gYS9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCkBAIC0zMCw2ICszMCw3IEBACiBEUkVBTUNBU1QJCVNIX0RSRUFNQ0FTVAogU05BUEdFQVIJCVNIX1NFQ1VSRUVER0U1NDEwCiBFRE9TSzc3MDUJCVNIX0VET1NLNzcwNQorRURPU0s3NzYwCQlTSF9FRE9TSzc3NjAKIFNINDIwMl9NSUNST0RFVgkJU0hfU0g0MjAyX01JQ1JPREVWCiBTSDAzCQkJU0hfU0gwMwogTEFORElTSwkJCVNIX0xBTkRJU0sKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZwppbmRleCA5NzY3MWRhLi5lNTk0NTU5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnCkBAIC0zNyw2ICszNyw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIkdlbmVyYWwgbWFjaGluZSBzZXR1cCIKIAogY29uZmlnIFNNUApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9LYnVpbGQgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL0tidWlsZAppbmRleCAyYmE3MTgzLi4yZDI3NjlkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL0tidWlsZAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL0tidWlsZApAQCAtMTUsOCArMTUsNiBAQAogaGVhZGVyLXkgKz0gc2lnbmFsXzY0LmgKIGhlYWRlci15ICs9IHN0YXRfMzIuaAogaGVhZGVyLXkgKz0gc3RhdF82NC5oCi1oZWFkZXIteSArPSBzdGF0ZnNfMzIuaAotaGVhZGVyLXkgKz0gc3RhdGZzXzY0LmgKIGhlYWRlci15ICs9IHVuaXN0ZF8zMi5oCiBoZWFkZXIteSArPSB1bmlzdGRfNjQuaAogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9lbGZfMzIuaAppbmRleCBiN2FiNjA1Li4zODFhMWI1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZWxmXzMyLmgKQEAgLTEzNyw2ICsxMzcsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STQkoTlVMTCkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoKGliY3MyKT9QRVJfU1ZSNDpQRVJfTElOVVgpCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKIAogI2VuZGlmIC8qICEoX19BU01TUEFSQ19FTEZfSCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZWxmXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl82NC5oCmluZGV4IDA4MThhMTMuLjQyNWMyZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZWxmXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9lbGZfNjQuaApAQCAtMTk1LDcgKzE5NSw3IEBACiAKICNkZWZpbmUgRUxGX1BMQVRGT1JNCShOVUxMKQogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpCQkJXAorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCQkJCVwKIGRvIHsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzOyBcCiAJbmV3X2ZsYWdzICY9IF9USUZfMzJCSVQ7CQkJXAogCWlmICgoZXgpLmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCVwKQEAgLTIwOCw5ICsyMDgsNyBAQAogCWVsc2UJCQkJCQlcCiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9BQklfUEVORElORyk7CVwKIAkvKiBmbHVzaF90aHJlYWQgd2lsbCB1cGRhdGUgcGdkIGNhY2hlICovCVwKLQlpZiAoaWJjczIpCQkJCQlcCi0JCXNldF9wZXJzb25hbGl0eShQRVJfU1ZSNCk7CQlcCi0JZWxzZSBpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgIT0gUEVSX0xJTlVYMzIpCVwKKwlpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgIT0gUEVSX0xJTlVYMzIpCVwKIAkJc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCk7CQlcCiB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXRmcy5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zdGF0ZnMuaAppbmRleCA1ZTkzN2E3Li41NWU2MDdhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXRmcy5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3RhdGZzLmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9fX0FTTV9TUEFSQ19TVEFURlNfSAogI2RlZmluZSBfX19BU01fU1BBUkNfU1RBVEZTX0gKLSNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQotI2luY2x1ZGUgPGFzbS9zdGF0ZnNfNjQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8YXNtL3N0YXRmc18zMi5oPgotI2VuZGlmCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXRmc18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zdGF0ZnNfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA0NTIwZi4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXRmc18zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9TUEFSQ19TVEFURlNfSAotI2RlZmluZSBfU1BBUkNfU1RBVEZTX0gKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3RhdGZzXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXRmc182NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWIzYzg5Li4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3RhdGZzXzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0jaWZuZGVmIF9TUEFSQzY0X1NUQVRGU19ICi0jZGVmaW5lIF9TUEFSQzY0X1NUQVRGU19ICi0KLSNpZm5kZWYgX19LRVJORUxfU1RSSUNUX05BTUVTCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi10eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAlmc2lkX3Q7Ci0KLSNlbmRpZgotCi1zdHJ1Y3Qgc3RhdGZzIHsKLQlsb25nIGZfdHlwZTsKLQlsb25nIGZfYnNpemU7Ci0JbG9uZyBmX2Jsb2NrczsKLQlsb25nIGZfYmZyZWU7Ci0JbG9uZyBmX2JhdmFpbDsKLQlsb25nIGZfZmlsZXM7Ci0JbG9uZyBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JbG9uZyBmX25hbWVsZW47Ci0JbG9uZyBmX2Zyc2l6ZTsKLQlsb25nIGZfc3BhcmVbNV07Ci19OwotCi1zdHJ1Y3Qgc3RhdGZzNjQgewotCWxvbmcgZl90eXBlOwotCWxvbmcgZl9ic2l6ZTsKLQlsb25nIGZfYmxvY2tzOwotCWxvbmcgZl9iZnJlZTsKLQlsb25nIGZfYmF2YWlsOwotCWxvbmcgZl9maWxlczsKLQlsb25nIGZfZmZyZWU7Ci0JX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKLQlsb25nIGZfbmFtZWxlbjsKLQlsb25nIGZfZnJzaXplOwotCWxvbmcgZl9zcGFyZVs1XTsKLX07Ci0KLXN0cnVjdCBjb21wYXRfc3RhdGZzNjQgewotCV9fdTMyIGZfdHlwZTsKLQlfX3UzMiBmX2JzaXplOwotCV9fdTY0IGZfYmxvY2tzOwotCV9fdTY0IGZfYmZyZWU7Ci0JX191NjQgZl9iYXZhaWw7Ci0JX191NjQgZl9maWxlczsKLQlfX3U2NCBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JX191MzIgZl9uYW1lbGVuOwotCV9fdTMyIGZfZnJzaXplOwotCV9fdTMyIGZfc3BhcmVbNV07Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fMzIuaAppbmRleCAyOTg5OWZkLi44MGZlNTQ3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb18zMi5oCkBAIC0xMzUsNiArMTM1LDcgQEAKICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTkJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nCiAJCQkJCSAqIFRJRl9ORUVEX1JFU0NIRUQgKi8KICNkZWZpbmUgVElGX01FTURJRQkJMTAKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTEJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogLyogYXMgYWJvdmUsIGJ1dCBhcyBiaXQgdmFsdWVzICovCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCkBAIC0xNDgsNiArMTQ5LDcgQEAKICNkZWZpbmUgX1RJRl9ET19OT1RJRllfUkVTVU1FX01BU0sJKF9USUZfTk9USUZZX1JFU1VNRSB8IFwKIAkJCQkJIF9USUZfU0lHUEVORElORyB8IFwKIAkJCQkJIF9USUZfUkVTVE9SRV9TSUdNQVNLKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fNjQuaAppbmRleCBjMGE3MzdkLi42MzlhYzgwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb182NC5oCkBAIC0yMzcsNiArMjM3LDcgQEAKICNkZWZpbmUgVElGX0FCSV9QRU5ESU5HCQkxMgogI2RlZmluZSBUSUZfTUVNRElFCQkxMwogI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMTQKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTUJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQpAQCAtMjQ5LDYgKzI1MCw3IEBACiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMTw8VElGX1NZU0NBTExfQVVESVQpCiAjZGVmaW5lIF9USUZfQUJJX1BFTkRJTkcJKDE8PFRJRl9BQklfUEVORElORykKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9VU0VSX1dPUktfTUFTSwkoKDB4ZmYgPDwgVElfRkxBR19XU0FWRURfU0hJRlQpIHwgXAogCQkJCSBfVElGX0RPX05PVElGWV9SRVNVTUVfTUFTSyB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX3NtcC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMKaW5kZXggY2UzZDQ1ZC4uN2E2YTVlNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1fc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYwppbmRleCAwYzU2NGJhLi41ZmMzODZkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvS2NvbmZpZyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnCmluZGV4IDU0NDZlMmEuLjAzNWIxNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnCkBAIC05Niw2ICs5Niw3IEBACiAJZGVmX2Jvb2wgeQogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2NobWMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvY2htYy5jCmluZGV4IDk2N2IwNDguLjNiOWY0ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvY2htYy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvY2htYy5jCkBAIC04MzEsNyArODMxLDcgQEAKIAlpZiAoIXVzM21jX3BsYXRmb3JtKCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JX19hc21fXyAoInJkcHIgJSV2ZXIsICUwIiA6ICI9ciIgKHZlcikpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZHByICUldmVyLCAlMCIgOiAiPXIiICh2ZXIpKTsKIAlpZiAoKHZlciA+PiAzMlVMKSA9PSBfX0pBTEFQRU5PX0lEIHx8CiAJICAgICh2ZXIgPj4gMzJVTCkgPT0gX19TRVJSQU5PX0lEKSB7CiAJCW1jX3R5cGUgPSBNQ19UWVBFX0pCVVM7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2lvbW11LmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lvbW11LmMKaW5kZXggMmEzN2E2Yy4uMWNjMTk5NSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb21tdS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW9tbXUuYwpAQCAtNTc1LDcgKzU3NSw3IEBACiAJCX0KIAkJLyogQWxsb2NhdGUgaW9tbXUgZW50cmllcyBmb3IgdGhhdCBzZWdtZW50ICovCiAJCXBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIFNHX0VOVF9QSFlTX0FERFJFU1Mocyk7Ci0JCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgc2xlbik7CisJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgc2xlbiwgSU9fUEFHRV9TSVpFKTsKIAkJZW50cnkgPSBpb21tdV9yYW5nZV9hbGxvYyhkZXYsIGlvbW11LCBucGFnZXMsICZoYW5kbGUpOwogCiAJCS8qIEhhbmRsZSBmYWlsdXJlICovCkBAIC02NDcsNyArNjQ3LDggQEAKIAkJCWlvcHRlX3QgKmJhc2U7CiAKIAkJCXZhZGRyID0gcy0+ZG1hX2FkZHJlc3MgJiBJT19QQUdFX01BU0s7Ci0JCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMocy0+ZG1hX2FkZHJlc3MsIHMtPmRtYV9sZW5ndGgpOworCQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoLAorCQkJCQkJIElPX1BBR0VfU0laRSk7CiAJCQlpb21tdV9yYW5nZV9mcmVlKGlvbW11LCB2YWRkciwgbnBhZ2VzKTsKIAogCQkJZW50cnkgPSAodmFkZHIgLSBpb21tdS0+cGFnZV90YWJsZV9tYXBfYmFzZSkKQEAgLTcxNSw3ICs3MTYsNyBAQAogCiAJCWlmICghbGVuKQogCQkJYnJlYWs7Ci0JCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfaGFuZGxlLCBsZW4pOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSwgbGVuLCBJT19QQUdFX1NJWkUpOwogCQlpb21tdV9yYW5nZV9mcmVlKGlvbW11LCBkbWFfaGFuZGxlLCBucGFnZXMpOwogCiAJCWVudHJ5ID0gKChkbWFfaGFuZGxlIC0gaW9tbXUtPnBhZ2VfdGFibGVfbWFwX2Jhc2UpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2lvbW11X2NvbW1vbi5oIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb21tdV9jb21tb24uaAppbmRleCA1M2IxOWM4Li41OTFmNTg3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2lvbW11X2NvbW1vbi5oCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW9tbXVfY29tbW9uLmgKQEAgLTM1LDE3ICszNSw2IEBACiAKICNkZWZpbmUgU0dfRU5UX1BIWVNfQUREUkVTUyhTRykJKF9fcGEoc2dfdmlydCgoU0cpKSkpCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpb21tdV9udW1fcGFnZXModW5zaWduZWQgbG9uZyB2YWRkciwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2xlbikKLXsKLQl1bnNpZ25lZCBsb25nIG5wYWdlczsKLQotCW5wYWdlcyA9IElPX1BBR0VfQUxJR04odmFkZHIgKyBzbGVuKSAtICh2YWRkciAmIElPX1BBR0VfTUFTSyk7Ci0JbnBhZ2VzID4+PSBJT19QQUdFX1NISUZUOwotCi0JcmV0dXJuIG5wYWdlczsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgaXNfc3Bhbl9ib3VuZGFyeSh1bnNpZ25lZCBsb25nIGVudHJ5LAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgc2hpZnQsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBib3VuZGFyeV9zaXplLApAQCAtNTMsNyArNDIsOCBAQAogCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCiB7CiAJdW5zaWduZWQgbG9uZyBwYWRkciA9IFNHX0VOVF9QSFlTX0FERFJFU1Mob3V0cyk7Ci0JaW50IG5yID0gaW9tbXVfbnVtX3BhZ2VzKHBhZGRyLCBvdXRzLT5kbWFfbGVuZ3RoICsgc2ctPmxlbmd0aCk7CisJaW50IG5yID0gaW9tbXVfbnVtX3BhZ2VzKHBhZGRyLCBvdXRzLT5kbWFfbGVuZ3RoICsgc2ctPmxlbmd0aCwKKwkJCQkgSU9fUEFHRV9TSVpFKTsKIAogCXJldHVybiBpb21tdV9pc19zcGFuX2JvdW5kYXJ5KGVudHJ5LCBuciwgc2hpZnQsIGJvdW5kYXJ5X3NpemUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKaW5kZXggZTg2YzczZS4uMzRhMWZkZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCkBAIC0zODQsNyArMzg0LDcgQEAKIAkJfQogCQkvKiBBbGxvY2F0ZSBpb21tdSBlbnRyaWVzIGZvciB0aGF0IHNlZ21lbnQgKi8KIAkJcGFkZHIgPSAodW5zaWduZWQgbG9uZykgU0dfRU5UX1BIWVNfQUREUkVTUyhzKTsKLQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHBhZGRyLCBzbGVuKTsKKwkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHBhZGRyLCBzbGVuLCBJT19QQUdFX1NJWkUpOwogCQllbnRyeSA9IGlvbW11X3JhbmdlX2FsbG9jKGRldiwgaW9tbXUsIG5wYWdlcywgJmhhbmRsZSk7CiAKIAkJLyogSGFuZGxlIGZhaWx1cmUgKi8KQEAgLTQ2MSw3ICs0NjEsOCBAQAogCQkJdW5zaWduZWQgbG9uZyB2YWRkciwgbnBhZ2VzOwogCiAJCQl2YWRkciA9IHMtPmRtYV9hZGRyZXNzICYgSU9fUEFHRV9NQVNLOwotCQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoKTsKKwkJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhzLT5kbWFfYWRkcmVzcywgcy0+ZG1hX2xlbmd0aCwKKwkJCQkJCSBJT19QQUdFX1NJWkUpOwogCQkJaW9tbXVfcmFuZ2VfZnJlZShpb21tdSwgdmFkZHIsIG5wYWdlcyk7CiAJCQkvKiBYWFggZGVtYXA/IFhYWCAqLwogCQkJcy0+ZG1hX2FkZHJlc3MgPSBETUFfRVJST1JfQ09ERTsKQEAgLTUwMCw3ICs1MDEsNyBAQAogCiAJCWlmICghbGVuKQogCQkJYnJlYWs7Ci0JCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfaGFuZGxlLCBsZW4pOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSwgbGVuLCBJT19QQUdFX1NJWkUpOwogCQlpb21tdV9yYW5nZV9mcmVlKGlvbW11LCBkbWFfaGFuZGxlLCBucGFnZXMpOwogCiAJCWVudHJ5ID0gKChkbWFfaGFuZGxlIC0gaW9tbXUtPnBhZ2VfdGFibGVfbWFwX2Jhc2UpID4+IElPX1BBR0VfU0hJRlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKaW5kZXggMmJlMTY2Yy4uZTU2MjcxMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KIAogI2luY2x1ZGUgPGFzbS9oZWFkLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgpAQCAtMTE1LDYgKzExNiw5IEBACiAJYXRvbWljX2luYygmaW5pdF9tbS5tbV9jb3VudCk7CiAJY3VycmVudC0+YWN0aXZlX21tID0gJmluaXRfbW07CiAKKwkvKiBpbmZvcm0gdGhlIG5vdGlmaWVycyBhYm91dCB0aGUgbmV3IGNwdSAqLworCW5vdGlmeV9jcHVfc3RhcnRpbmcoY3B1aWQpOworCiAJd2hpbGUgKCFjcHVfaXNzZXQoY3B1aWQsIHNtcF9jb21tZW5jZWRfbWFzaykpCiAJCXJtYigpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMKaW5kZXggMzMyMGM5ZC4uZTgwMDUwMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwpAQCAtNTgsMTUgKzU4LDYgQEAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vY29tcGF0X3NpZ25hbC5oPgogCi0vKiAzMi1iaXQgdGltZXZhbCBhbmQgcmVsYXRlZCBmbG90c2FtLiAgKi8KLQotc3RhdGljIGlubGluZSBsb25nIHB1dF90djMyKHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKm8sIHN0cnVjdCB0aW1ldmFsICppKQotewotCXJldHVybiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG8sIHNpemVvZigqbykpIHx8Ci0JCShfX3B1dF91c2VyKGktPnR2X3NlYywgJm8tPnR2X3NlYykgfAotCQkgX19wdXRfdXNlcihpLT50dl91c2VjLCAmby0+dHZfdXNlYykpKTsKLX0KLQogI2lmZGVmIENPTkZJR19TWVNWSVBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2lwYyh1MzIgY2FsbCwgdTMyIGZpcnN0LCB1MzIgc2Vjb25kLCB1MzIgdGhpcmQsIGNvbXBhdF91cHRyX3QgcHRyLCB1MzIgZmlmdGgpCiB7CkBAIC0xNDgsNDEgKzEzOSw2IEBACiAJCXJldHVybiBzeXNfZnRydW5jYXRlKGZkLCAoaGlnaCA8PCAzMikgfCBsb3cpOwogfQogCi1pbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICpzdGF0YnVmKQotewotCWNvbXBhdF9pbm9fdCBpbm87Ci0JaW50IGVycjsKLQotCWlmIChzdGF0LT5zaXplID4gTUFYX05PTl9MRlMgfHwgIW9sZF92YWxpZF9kZXYoc3RhdC0+ZGV2KSB8fAotCSAgICAhb2xkX3ZhbGlkX2RldihzdGF0LT5yZGV2KSkKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0KLQlpbm8gPSBzdGF0LT5pbm87Ci0JaWYgKHNpemVvZihpbm8pIDwgc2l6ZW9mKHN0YXQtPmlubykgJiYgaW5vICE9IHN0YXQtPmlubykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0KLQllcnIgID0gcHV0X3VzZXIob2xkX2VuY29kZV9kZXYoc3RhdC0+ZGV2KSwgJnN0YXRidWYtPnN0X2Rldik7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmlubywgJnN0YXRidWYtPnN0X2lubyk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm1vZGUsICZzdGF0YnVmLT5zdF9tb2RlKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+bmxpbmssICZzdGF0YnVmLT5zdF9ubGluayk7Ci0JZXJyIHw9IHB1dF91c2VyKGhpZ2gybG93dWlkKHN0YXQtPnVpZCksICZzdGF0YnVmLT5zdF91aWQpOwotCWVyciB8PSBwdXRfdXNlcihoaWdoMmxvd2dpZChzdGF0LT5naWQpLCAmc3RhdGJ1Zi0+c3RfZ2lkKTsKLQllcnIgfD0gcHV0X3VzZXIob2xkX2VuY29kZV9kZXYoc3RhdC0+cmRldiksICZzdGF0YnVmLT5zdF9yZGV2KTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+c2l6ZSwgJnN0YXRidWYtPnN0X3NpemUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5hdGltZS50dl9zZWMsICZzdGF0YnVmLT5zdF9hdGltZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmF0aW1lLnR2X25zZWMsICZzdGF0YnVmLT5zdF9hdGltZV9uc2VjKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfc2VjLCAmc3RhdGJ1Zi0+c3RfbXRpbWUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5tdGltZS50dl9uc2VjLCAmc3RhdGJ1Zi0+c3RfbXRpbWVfbnNlYyk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmN0aW1lLnR2X3NlYywgJnN0YXRidWYtPnN0X2N0aW1lKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+Y3RpbWUudHZfbnNlYywgJnN0YXRidWYtPnN0X2N0aW1lX25zZWMpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5ibGtzaXplLCAmc3RhdGJ1Zi0+c3RfYmxrc2l6ZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmJsb2NrcywgJnN0YXRidWYtPnN0X2Jsb2Nrcyk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5fX3VudXNlZDRbMF0pOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+X191bnVzZWQ0WzFdKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBpbnQgY3BfY29tcGF0X3N0YXQ2NChzdHJ1Y3Qga3N0YXQgKnN0YXQsCiAJCQkgICAgc3RydWN0IGNvbXBhdF9zdGF0NjQgX191c2VyICpzdGF0YnVmKQogewpAQCAtNTIyLDU5ICs0NzgsNiBAQAogCiAjZW5kaWYgIC8qIENPTkZJR19NT0RVTEVTICovCiAKLS8qIFRyYW5zbGF0aW9ucyBkdWUgdG8gdGltZV90IHNpemUgZGlmZmVyZW5jZXMuICBXaGljaCBhZmZlY3RzIGFsbAotICAgc29ydHMgb2YgdGhpbmdzLCBsaWtlIHRpbWV2YWwgYW5kIGl0aW1lcnZhbC4gICovCi0KLWV4dGVybiBzdHJ1Y3QgdGltZXpvbmUgc3lzX3R6OwotCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfZ2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LAotCQkJCSAgIHN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQotewotCWlmICh0dikgewotCQlzdHJ1Y3QgdGltZXZhbCBrdHY7Ci0JCWRvX2dldHRpbWVvZmRheSgma3R2KTsKLQkJaWYgKHB1dF90djMyKHR2LCAma3R2KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAodHopIHsKLQkJaWYgKGNvcHlfdG9fdXNlcih0eiwgJnN5c190eiwgc2l6ZW9mKHN5c190eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgZ2V0X3RzMzIoc3RydWN0IHRpbWVzcGVjICpvLCBzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICppKQotewotCWxvbmcgdXNlYzsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBpLCBzaXplb2YoKmkpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKF9fZ2V0X3VzZXIoby0+dHZfc2VjLCAmaS0+dHZfc2VjKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKF9fZ2V0X3VzZXIodXNlYywgJmktPnR2X3VzZWMpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlvLT50dl9uc2VjID0gdXNlYyAqIDEwMDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZyBzeXMzMl9zZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsCi0JCQkJICAgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0Jc3RydWN0IHRpbWVzcGVjIGt0czsKLQlzdHJ1Y3QgdGltZXpvbmUga3R6OwotCi0gCWlmICh0dikgewotCQlpZiAoZ2V0X3RzMzIoJmt0cywgdHYpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmICh0eikgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmt0eiwgdHosIHNpemVvZihrdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldHVybiBkb19zeXNfc2V0dGltZW9mZGF5KHR2ID8gJmt0cyA6IE5VTEwsIHR6ID8gJmt0eiA6IE5VTEwpOwotfQotCiBhc21saW5rYWdlIGNvbXBhdF9zc2l6ZV90IHN5czMyX3ByZWFkNjQodW5zaWduZWQgaW50IGZkLAogCQkJCQljaGFyIF9fdXNlciAqdWJ1ZiwKIAkJCQkJY29tcGF0X3NpemVfdCBjb3VudCwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKaW5kZXggNWRhZWU0Yi4uYjJmYTRjMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKQEAgLTQxLDggKzQxLDggQEAKIC8qMTAwKi8gLndvcmQgc3lzMzJfZ2V0cHJpb3JpdHksIHN5czMyX3J0X3NpZ3JldHVybiwgc3lzMzJfcnRfc2lnYWN0aW9uLCBzeXMzMl9ydF9zaWdwcm9jbWFzaywgc3lzMzJfcnRfc2lncGVuZGluZwogCS53b3JkIGNvbXBhdF9zeXNfcnRfc2lndGltZWR3YWl0LCBzeXMzMl9ydF9zaWdxdWV1ZWluZm8sIGNvbXBhdF9zeXNfcnRfc2lnc3VzcGVuZCwgc3lzX3NldHJlc3VpZCwgc3lzX2dldHJlc3VpZAogLyoxMTAqLwkud29yZCBzeXNfc2V0cmVzZ2lkLCBzeXNfZ2V0cmVzZ2lkLCBzeXNfc2V0cmVnaWQsIHN5c19uaXNfc3lzY2FsbCwgc3lzX25pc19zeXNjYWxsCi0JLndvcmQgc3lzMzJfZ2V0Z3JvdXBzLCBzeXMzMl9nZXR0aW1lb2ZkYXksIHN5czMyX2dldHJ1c2FnZSwgc3lzX25pc19zeXNjYWxsLCBzeXNfZ2V0Y3dkCi0vKjEyMCovCS53b3JkIGNvbXBhdF9zeXNfcmVhZHYsIGNvbXBhdF9zeXNfd3JpdGV2LCBzeXMzMl9zZXR0aW1lb2ZkYXksIHN5c19mY2hvd24xNiwgc3lzX2ZjaG1vZAorCS53b3JkIHN5czMyX2dldGdyb3VwcywgY29tcGF0X3N5c19nZXR0aW1lb2ZkYXksIHN5czMyX2dldHJ1c2FnZSwgc3lzX25pc19zeXNjYWxsLCBzeXNfZ2V0Y3dkCisvKjEyMCovCS53b3JkIGNvbXBhdF9zeXNfcmVhZHYsIGNvbXBhdF9zeXNfd3JpdGV2LCBjb21wYXRfc3lzX3NldHRpbWVvZmRheSwgc3lzX2ZjaG93bjE2LCBzeXNfZmNobW9kCiAJLndvcmQgc3lzX25pc19zeXNjYWxsLCBzeXNfc2V0cmV1aWQxNiwgc3lzX3NldHJlZ2lkMTYsIHN5c19yZW5hbWUsIHN5c190cnVuY2F0ZQogLyoxMzAqLwkud29yZCBzeXNfZnRydW5jYXRlLCBzeXNfZmxvY2ssIGNvbXBhdF9zeXNfbHN0YXQ2NCwgc3lzX25pc19zeXNjYWxsLCBzeXNfbmlzX3N5c2NhbGwKIAkud29yZCBzeXNfbmlzX3N5c2NhbGwsIHN5czMyX21rZGlyLCBzeXNfcm1kaXIsIGNvbXBhdF9zeXNfdXRpbWVzLCBjb21wYXRfc3lzX3N0YXQ2NApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC91czNfY3B1ZnJlcS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91czNfY3B1ZnJlcS5jCmluZGV4IDQ3ZTNhY2EuLjM2NWI2NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdXMzX2NwdWZyZXEuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3VzM19jcHVmcmVxLmMKQEAgLTE4Myw3ICsxODMsNiBAQAogCXRhYmxlWzNdLmluZGV4ID0gMDsKIAl0YWJsZVszXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKIAotCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDA7CiAJcG9saWN5LT5jdXIgPSBjbG9ja190aWNrOwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcgYi9hcmNoL3VtL0tjb25maWcKaW5kZXggNjk3NjgxMi4uMzkzYmNjZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnCisrKyBiL2FyY2gvdW0vS2NvbmZpZwpAQCAtMjI5LDYgKzIyOSw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIHNvdXJjZSAiZHJpdmVycy9ibG9jay9LY29uZmlnIgogCiBzb3VyY2UgImFyY2gvdW0vS2NvbmZpZy5jaGFyIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnLmkzODYgYi9hcmNoL3VtL0tjb25maWcuaTM4NgppbmRleCBlMDllZGZhLi4xZjU3YzExIDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcuaTM4NgorKysgYi9hcmNoL3VtL0tjb25maWcuaTM4NgpAQCAtOSw4ICs5LDkgQEAKIAlkZWZhdWx0IHkKIAogY29uZmlnIFg4Nl8zMgotICAgICAgIGJvb2wKLSAgICAgICBkZWZhdWx0IHkKKwlib29sCisJZGVmYXVsdCB5CisgIAlzZWxlY3QgSEFWRV9BT1VUCiAKIGNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQogCWRlZl9ib29sIHkKQEAgLTQyLDYgKzQzLDMgQEAKIGNvbmZpZyBHRU5FUklDX0hXRUlHSFQKIAlib29sCiAJZGVmYXVsdCB5Ci0KLWNvbmZpZyBBUkNIX1NVUFBPUlRTX0FPVVQKLQlkZWZfYm9vbCB5CmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcueDg2XzY0IGIvYXJjaC91bS9LY29uZmlnLng4Nl82NAppbmRleCA1Njk2ZTdiLi40MGIzNDA3IDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcueDg2XzY0CisrKyBiL2FyY2gvdW0vS2NvbmZpZy54ODZfNjQKQEAgLTM3LDYgKzM3LDMgQEAKIGNvbmZpZyBHRU5FUklDX0hXRUlHSFQKIAlib29sCiAJZGVmYXVsdCB5Ci0KLWNvbmZpZyBBUkNIX1NVUFBPUlRTX0FPVVQKLQlkZWZfYm9vbCB5CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9leGVjLmMgYi9hcmNoL3VtL2tlcm5lbC9leGVjLmMKaW5kZXggZjVkN2Y0NS4uNTk4NzExYyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvZXhlYy5jCisrKyBiL2FyY2gvdW0va2VybmVsL2V4ZWMuYwpAQCAtNDIsMjMgKzQyLDExIEBACiAJUFRfUkVHU19TUChyZWdzKSA9IGVzcDsKIH0KIAotI2lmZGVmIENPTkZJR19UVFlfTE9HCi1leHRlcm4gdm9pZCBsb2dfZXhlYyhjaGFyICoqYXJndiwgdm9pZCAqdHR5KTsKLSNlbmRpZgotCiBzdGF0aWMgbG9uZyBleGVjdmUxKGNoYXIgKmZpbGUsIGNoYXIgX191c2VyICogX191c2VyICphcmd2LAogCQkgICAgY2hhciBfX3VzZXIgKl9fdXNlciAqZW52KQogewogCWxvbmcgZXJyb3I7Ci0jaWZkZWYgQ09ORklHX1RUWV9MT0cKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCi0JbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKLQl0dHkgPSBnZXRfY3VycmVudF90dHkoKTsKLQlpZiAodHR5KQotCQlsb2dfZXhlYyhhcmd2LCB0dHkpOwotCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKLSNlbmRpZgogCWVycm9yID0gZG9fZXhlY3ZlKGZpbGUsIGFyZ3YsIGVudiwgJmN1cnJlbnQtPnRocmVhZC5yZWdzKTsKIAlpZiAoZXJyb3IgPT0gMCkgewogCQl0YXNrX2xvY2soY3VycmVudCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L01ha2VmaWxlIGIvYXJjaC91bS9vcy1MaW51eC9NYWtlZmlsZQppbmRleCA4YTQ4ZDZhLi5kNjZmMDM4IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vb3MtTGludXgvTWFrZWZpbGUKQEAgLTcsOSArNyw2IEBACiAJcmVnaXN0ZXJzLm8gc2lnaW8ubyBzaWduYWwubyBzdGFydF91cC5vIHRpbWUubyB0dHkubyB1YWNjZXNzLm8gXAogCXVtaWQubyB0bHMubyB1c2VyX3N5bXMubyB1dGlsLm8gZHJpdmVycy8gc3lzLSQoU1VCQVJDSCkvIHNrYXMvCiAKLW9iai0kKENPTkZJR19UVFlfTE9HKSArPSB0dHlfbG9nLm8KLXVzZXItb2Jqcy0kKENPTkZJR19UVFlfTE9HKSArPSB0dHlfbG9nLm8KLQogVVNFUl9PQkpTIDo9ICQodXNlci1vYmpzLXkpIGFpby5vIGVsZl9hdXgubyBleGVjdnAubyBmaWxlLm8gaGVscGVyLm8gaXJxLm8gXAogCW1haW4ubyBtZW0ubyBwcm9jZXNzLm8gcmVnaXN0ZXJzLm8gc2lnaW8ubyBzaWduYWwubyBzdGFydF91cC5vIHRpbWUubyBcCiAJdHR5Lm8gdGxzLm8gdWFjY2Vzcy5vIHVtaWQubyB1dGlsLm8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdHR5X2xvZy5jIGIvYXJjaC91bS9vcy1MaW51eC90dHlfbG9nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNjQ4ZTYuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9vcy1MaW51eC90dHlfbG9nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pIGFuZAotICogZ2VvZmZyZXkgaGluZyA8Z2hpbmdAbmV0Lm9oaW8tc3RhdGUuZWR1PgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlICJpbml0LmgiCi0jaW5jbHVkZSAidXNlci5oIgotI2luY2x1ZGUgIm9zLmgiCi0KLSNkZWZpbmUgVFRZX0xPR19ESVIgIi4vIgotCi0vKiBTZXQgZWFybHkgaW4gYm9vdCBhbmQgdGhlbiB1bmNoYW5nZWQgKi8KLXN0YXRpYyBjaGFyICp0dHlfbG9nX2RpciA9IFRUWV9MT0dfRElSOwotc3RhdGljIGludCB0dHlfbG9nX2ZkID0gLTE7Ci0KLSNkZWZpbmUgVFRZX0xPR19PUEVOIDEKLSNkZWZpbmUgVFRZX0xPR19DTE9TRSAyCi0jZGVmaW5lIFRUWV9MT0dfV1JJVEUgMwotI2RlZmluZSBUVFlfTE9HX0VYRUMgNAotCi0jZGVmaW5lIFRUWV9SRUFEIDEKLSNkZWZpbmUgVFRZX1dSSVRFIDIKLQotc3RydWN0IHR0eV9sb2dfYnVmIHsKLQlpbnQgd2hhdDsKLQl1bnNpZ25lZCBsb25nIHR0eTsKLQlpbnQgbGVuOwotCWludCBkaXJlY3Rpb247Ci0JdW5zaWduZWQgbG9uZyBzZWM7Ci0JdW5zaWduZWQgbG9uZyB1c2VjOwotfTsKLQotaW50IG9wZW5fdHR5X2xvZyh2b2lkICp0dHksIHZvaWQgKmN1cnJlbnRfdHR5KQotewotCXN0cnVjdCB0aW1ldmFsIHR2OwotCXN0cnVjdCB0dHlfbG9nX2J1ZiBkYXRhOwotCWNoYXIgYnVmW3N0cmxlbih0dHlfbG9nX2RpcikgKyBzaXplb2YoIjAxMjM0NTY3ODkwLTAxMjM0NTY3XDAiKV07Ci0JaW50IGZkOwotCi0JZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JaWYodHR5X2xvZ19mZCAhPSAtMSl7Ci0JCWRhdGEgPSAoKHN0cnVjdCB0dHlfbG9nX2J1ZikgeyAud2hhdCAJPSBUVFlfTE9HX09QRU4sCi0JCQkJCSAgICAgICAudHR5ICA9ICh1bnNpZ25lZCBsb25nKSB0dHksCi0JCQkJCSAgICAgICAubGVuICA9IHNpemVvZihjdXJyZW50X3R0eSksCi0JCQkJCSAgICAgICAuZGlyZWN0aW9uID0gMCwKLQkJCQkJICAgICAgIC5zZWMgPSB0di50dl9zZWMsCi0JCQkJCSAgICAgICAudXNlYyA9IHR2LnR2X3VzZWMgfSApOwotCQl3cml0ZSh0dHlfbG9nX2ZkLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKLQkJd3JpdGUodHR5X2xvZ19mZCwgJmN1cnJlbnRfdHR5LCBkYXRhLmxlbik7Ci0JCXJldHVybiB0dHlfbG9nX2ZkOwotCX0KLQotCXNwcmludGYoYnVmLCAiJXMvJTB1LSUwdSIsIHR0eV9sb2dfZGlyLCAodW5zaWduZWQgaW50KSB0di50dl9zZWMsCi0gCQkodW5zaWduZWQgaW50KSB0di50dl91c2VjKTsKLQotCWZkID0gb3Nfb3Blbl9maWxlKGJ1Ziwgb2ZfYXBwZW5kKG9mX2NyZWF0ZShvZl9yZHdyKE9QRU5GTEFHUygpKSkpLAotCQkJICAwNjQ0KTsKLQlpZihmZCA8IDApewotCQlwcmludGsoIm9wZW5fdHR5X2xvZyA6IGNvdWxkbid0IG9wZW4gJyVzJywgZXJybm8gPSAlZFxuIiwKLQkJICAgICAgIGJ1ZiwgLWZkKTsKLQl9Ci0JcmV0dXJuIGZkOwotfQotCi12b2lkIGNsb3NlX3R0eV9sb2coaW50IGZkLCB2b2lkICp0dHkpCi17Ci0Jc3RydWN0IHR0eV9sb2dfYnVmIGRhdGE7Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0KLQlpZih0dHlfbG9nX2ZkICE9IC0xKXsKLQkJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JCWRhdGEgPSAoKHN0cnVjdCB0dHlfbG9nX2J1ZikgeyAud2hhdCAJPSBUVFlfTE9HX0NMT1NFLAotCQkJCQkgICAgICAgLnR0eSAgPSAodW5zaWduZWQgbG9uZykgdHR5LAotCQkJCQkgICAgICAgLmxlbiAgPSAwLAotCQkJCQkgICAgICAgLmRpcmVjdGlvbiA9IDAsCi0JCQkJCSAgICAgICAuc2VjID0gdHYudHZfc2VjLAotCQkJCQkgICAgICAgLnVzZWMgPSB0di50dl91c2VjIH0gKTsKLQkJd3JpdGUodHR5X2xvZ19mZCwgJmRhdGEsIHNpemVvZihkYXRhKSk7Ci0JCXJldHVybjsKLQl9Ci0Jb3NfY2xvc2VfZmlsZShmZCk7Ci19Ci0KLXN0YXRpYyBpbnQgbG9nX2NodW5rKGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQotewotCWludCB0b3RhbCA9IDAsIHRyeSwgbWlzc2VkLCBuOwotCWNoYXIgY2h1bmtbNjRdOwotCi0Jd2hpbGUobGVuID4gMCl7Ci0JCXRyeSA9IChsZW4gPiBzaXplb2YoY2h1bmspKSA/IHNpemVvZihjaHVuaykgOiBsZW47Ci0JCW1pc3NlZCA9IGNvcHlfZnJvbV91c2VyX3Byb2MoY2h1bmssIChjaGFyICopIGJ1ZiwgdHJ5KTsKLQkJdHJ5IC09IG1pc3NlZDsKLQkJbiA9IHdyaXRlKGZkLCBjaHVuaywgdHJ5KTsKLQkJaWYobiAhPSB0cnkpIHsKLQkJCWlmKG4gPCAwKQotCQkJCXJldHVybiAtZXJybm87Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQlpZihtaXNzZWQgIT0gMCkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCWxlbiAtPSB0cnk7Ci0JCXRvdGFsICs9IHRyeTsKLQkJYnVmICs9IHRyeTsKLQl9Ci0KLQlyZXR1cm4gdG90YWw7Ci19Ci0KLWludCB3cml0ZV90dHlfbG9nKGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuLCB2b2lkICp0dHksIGludCBpc19yZWFkKQotewotCXN0cnVjdCB0aW1ldmFsIHR2OwotCXN0cnVjdCB0dHlfbG9nX2J1ZiBkYXRhOwotCWludCBkaXJlY3Rpb247Ci0KLQlpZihmZCA9PSB0dHlfbG9nX2ZkKXsKLQkJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JCWRpcmVjdGlvbiA9IGlzX3JlYWQgPyBUVFlfUkVBRCA6IFRUWV9XUklURTsKLQkJZGF0YSA9ICgoc3RydWN0IHR0eV9sb2dfYnVmKSB7IC53aGF0IAk9IFRUWV9MT0dfV1JJVEUsCi0JCQkJCSAgICAgICAudHR5ICA9ICh1bnNpZ25lZCBsb25nKSB0dHksCi0JCQkJCSAgICAgICAubGVuICA9IGxlbiwKLQkJCQkJICAgICAgIC5kaXJlY3Rpb24gPSBkaXJlY3Rpb24sCi0JCQkJCSAgICAgICAuc2VjID0gdHYudHZfc2VjLAotCQkJCQkgICAgICAgLnVzZWMgPSB0di50dl91c2VjIH0gKTsKLQkJd3JpdGUodHR5X2xvZ19mZCwgJmRhdGEsIHNpemVvZihkYXRhKSk7Ci0JfQotCi0JcmV0dXJuIGxvZ19jaHVuayhmZCwgYnVmLCBsZW4pOwotfQotCi12b2lkIGxvZ19leGVjKGNoYXIgKiphcmd2LCB2b2lkICp0dHkpCi17Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0Jc3RydWN0IHR0eV9sb2dfYnVmIGRhdGE7Ci0JY2hhciAqKnB0ciwqYXJnOwotCWludCBsZW47Ci0KLQlpZih0dHlfbG9nX2ZkID09IC0xKSByZXR1cm47Ci0KLQlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKLQotCWxlbiA9IDA7Ci0JZm9yKHB0ciA9IGFyZ3Y7IDsgcHRyKyspewotCQlpZihjb3B5X2Zyb21fdXNlcl9wcm9jKCZhcmcsIHB0ciwgc2l6ZW9mKGFyZykpKQotCQkJcmV0dXJuOwotCQlpZihhcmcgPT0gTlVMTCkgYnJlYWs7Ci0JCWxlbiArPSBzdHJsZW5fdXNlcl9wcm9jKGFyZyk7Ci0JfQotCi0JZGF0YSA9ICgoc3RydWN0IHR0eV9sb2dfYnVmKSB7IC53aGF0IAk9IFRUWV9MT0dfRVhFQywKLQkJCQkgICAgICAgLnR0eSAgPSAodW5zaWduZWQgbG9uZykgdHR5LAotCQkJCSAgICAgICAubGVuICA9IGxlbiwKLQkJCQkgICAgICAgLmRpcmVjdGlvbiA9IDAsCi0JCQkJICAgICAgIC5zZWMgPSB0di50dl9zZWMsCi0JCQkJICAgICAgIC51c2VjID0gdHYudHZfdXNlYyB9ICk7Ci0Jd3JpdGUodHR5X2xvZ19mZCwgJmRhdGEsIHNpemVvZihkYXRhKSk7Ci0KLQlmb3IocHRyID0gYXJndjsgOyBwdHIrKyl7Ci0JCWlmKGNvcHlfZnJvbV91c2VyX3Byb2MoJmFyZywgcHRyLCBzaXplb2YoYXJnKSkpCi0JCQlyZXR1cm47Ci0JCWlmKGFyZyA9PSBOVUxMKSBicmVhazsKLQkJbG9nX2NodW5rKHR0eV9sb2dfZmQsIGFyZywgc3RybGVuX3VzZXJfcHJvYyhhcmcpKTsKLQl9Ci19Ci0KLWV4dGVybiB2b2lkIHJlZ2lzdGVyX3R0eV9sb2dnZXIoaW50ICgqb3BlbmVyKSh2b2lkICosIHZvaWQgKiksCi0JCQkJaW50ICgqd3JpdGVyKShpbnQsIGNvbnN0IGNoYXIgKiwgaW50LAotCQkJCQkgICAgICB2b2lkICosIGludCksCi0JCQkJdm9pZCAoKmNsb3NlcikoaW50LCB2b2lkICopKTsKLQotc3RhdGljIGludCByZWdpc3Rlcl9sb2dnZXIodm9pZCkKLXsKLQlyZWdpc3Rlcl90dHlfbG9nZ2VyKG9wZW5fdHR5X2xvZywgd3JpdGVfdHR5X2xvZywgY2xvc2VfdHR5X2xvZyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLV9fdW1sX2luaXRjYWxsKHJlZ2lzdGVyX2xvZ2dlcik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNldF90dHlfbG9nX2RpcihjaGFyICpuYW1lLCBpbnQgKmFkZCkKLXsKLQl0dHlfbG9nX2RpciA9IG5hbWU7Ci0JcmV0dXJuIDA7Ci19Ci0KLV9fdW1sX3NldHVwKCJ0dHlfbG9nX2Rpcj0iLCBzZXRfdHR5X2xvZ19kaXIsCi0idHR5X2xvZ19kaXI9PGRpcmVjdG9yeT5cbiIKLSIgICAgVGhpcyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgbG9ncyBvZiBhbGwgcHR5XG4iCi0iICAgIGRhdGEgZnJvbSB0aGlzIFVNTCBtYWNoaW5lIHdpbGwgYmUgd3JpdHRlbi5cblxuIgotKTsKLQotc3RhdGljIGludCBfX2luaXQgc2V0X3R0eV9sb2dfZmQoY2hhciAqbmFtZSwgaW50ICphZGQpCi17Ci0JY2hhciAqZW5kOwotCi0JdHR5X2xvZ19mZCA9IHN0cnRvdWwobmFtZSwgJmVuZCwgMCk7Ci0JaWYoKCplbmQgIT0gJ1wwJykgfHwgKGVuZCA9PSBuYW1lKSl7Ci0JCXByaW50Zigic2V0X3R0eV9sb2dfZmQgLSBzdHJ0b3VsIGZhaWxlZCBvbiAnJXMnXG4iLCBuYW1lKTsKLQkJdHR5X2xvZ19mZCA9IC0xOwotCX0KLQotCSphZGQgPSAwOwotCXJldHVybiAwOwotfQotCi1fX3VtbF9zZXR1cCgidHR5X2xvZ19mZD0iLCBzZXRfdHR5X2xvZ19mZCwKLSJ0dHlfbG9nX2ZkPTxmZD5cbiIKLSIgICAgVGhpcyBpcyB1c2VkIHRvIHNwZWNpZnkgYSBwcmVjb25maWd1cmVkIGZpbGUgZGVzY3JpcHRvciB0byB3aGljaCBhbGxcbiIKLSIgICAgdHR5IGRhdGEgd2lsbCBiZSB3cml0dGVuLiAgUHJlY29uZmlndXJlIHRoZSBkZXNjcmlwdG9yIHdpdGggc29tZXRoaW5nXG4iCi0iICAgIGxpa2UgJzEwPnR0eV9sb2cgdHR5X2xvZ19mZD0xMCcuXG5cbiIKLSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jIGIvYXJjaC91bS9zeXMtaTM4Ni9zaWduYWwuYwppbmRleCBmZDBjMjVhLi4xMjk2NDczIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMKQEAgLTE3OSw3ICsxNzksOCBAQAogCWlmIChoYXZlX2ZweF9yZWdzKSB7CiAJCXN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0IGZweDsKIAotCQllcnIgPSBjb3B5X2Zyb21fdXNlcigmZnB4LCAmc2MuZnBzdGF0ZS0+X2Z4c3JfZW52WzBdLAorCQllcnIgPSBjb3B5X2Zyb21fdXNlcigmZnB4LAorCQkJJigoc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqKXNjLmZwc3RhdGUpLT5fZnhzcl9lbnZbMF0sCiAJCQkJICAgICBzaXplb2Yoc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QpKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggNWEzNGM1NC4uNWI5YjEyMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0xOCw2ICsxOCw3IEBACiAjIyMgQXJjaCBzZXR0aW5ncwogY29uZmlnIFg4NgogCWRlZl9ib29sIHkKKwlzZWxlY3QgSEFWRV9BT1VUIGlmIFg4Nl8zMgogCXNlbGVjdCBIQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLCiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKQEAgLTM5LDEwICs0MCw2IEBACiAJZGVmYXVsdCAiYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZyIgaWYgWDg2XzMyCiAJZGVmYXVsdCAiYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnIiBpZiBYODZfNjQKIAotCi1jb25maWcgR0VORVJJQ19MT0NLQlJFQUsKLQlkZWZfYm9vbCBuCi0KIGNvbmZpZyBHRU5FUklDX1RJTUUKIAlkZWZfYm9vbCB5CiAKQEAgLTk1LDcgKzkyLDcgQEAKIAlkZWZfYm9vbCB5CiAKIGNvbmZpZyBHRU5FUklDX0dQSU8KLQlkZWZfYm9vbCBuCisJYm9vbAogCiBjb25maWcgQVJDSF9NQVlfSEFWRV9QQ19GREMKIAlkZWZfYm9vbCB5CkBAIC0xMDYsMTIgKzEwMyw2IEBACiBjb25maWcgUldTRU1fWENIR0FERF9BTEdPUklUSE0KIAlkZWZfYm9vbCBYODZfWEFERAogCi1jb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCi0JZGVmX2Jvb2wgbgotCi1jb25maWcgQVJDSF9IQVNfSUxPRzJfVTY0Ci0JZGVmX2Jvb2wgbgotCiBjb25maWcgQVJDSF9IQVNfQ1BVX0lETEVfV0FJVAogCWRlZl9ib29sIHkKIApAQCAtMTUzLDkgKzE0NCw2IEBACiAJYm9vbAogCWRlZmF1bHQgWDg2XzY0CiAKLWNvbmZpZyBBUkNIX1NVUFBPUlRTX0FPVVQKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBBUkNIX1NVUFBPUlRTX09QVElNSVpFRF9JTkxJTklORwogCWRlZl9ib29sIHkKIApAQCAtMjA2LDYgKzE5NCw3IEBACiBjb25maWcgS1RJTUVfU0NBTEFSCiAJZGVmX2Jvb2wgWDg2XzMyCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCkBAIC03NjEsOSArNzUwLDggQEAKIAkgIFNheSBOIG90aGVyd2lzZS4KIAogY29uZmlnIFg4Nl9SRUJPT1RGSVhVUFMKLQlkZWZfYm9vbCBuCi0JcHJvbXB0ICJFbmFibGUgWDg2IGJvYXJkIHNwZWNpZmljIGZpeHVwcyBmb3IgcmVib290IgotCWRlcGVuZHMgb24gWDg2XzMyICYmIFg4NgorCWJvb2wgIkVuYWJsZSBYODYgYm9hcmQgc3BlY2lmaWMgZml4dXBzIGZvciByZWJvb3QiCisJZGVwZW5kcyBvbiBYODZfMzIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgY2hpcHNldCBhbmQvb3IgYm9hcmQgc3BlY2lmaWMgZml4dXBzIHRvIGJlIGRvbmUKIAkgIGluIG9yZGVyIHRvIGdldCByZWJvb3QgdG8gd29yayBjb3JyZWN0bHkuIFRoaXMgaXMgb25seSBuZWVkZWQgb24KQEAgLTk0NywxNiArOTM1LDE3IEBACiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgKEhJR0hNRU02NEcgfHwgSElHSE1FTTRHKQogCiBjb25maWcgWDg2X1BBRQotCWRlZl9ib29sIG4KLQlwcm9tcHQgIlBBRSAoUGh5c2ljYWwgQWRkcmVzcyBFeHRlbnNpb24pIFN1cHBvcnQiCisJYm9vbCAiUEFFIChQaHlzaWNhbCBBZGRyZXNzIEV4dGVuc2lvbikgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIFg4Nl8zMiAmJiAhSElHSE1FTTRHCi0Jc2VsZWN0IFJFU09VUkNFU182NEJJVAogCWhlbHAKIAkgIFBBRSBpcyByZXF1aXJlZCBmb3IgTlggc3VwcG9ydCwgYW5kIGZ1cnRoZXJtb3JlIGVuYWJsZXMKIAkgIGxhcmdlciBzd2Fwc3BhY2Ugc3VwcG9ydCBmb3Igbm9uLW92ZXJjb21taXQgcHVycG9zZXMuIEl0CiAJICBoYXMgdGhlIGNvc3Qgb2YgbW9yZSBwYWdldGFibGUgbG9va3VwIG92ZXJoZWFkLCBhbmQgYWxzbwogCSAgY29uc3VtZXMgbW9yZSBwYWdldGFibGUgc3BhY2UgcGVyIHByb2Nlc3MuCiAKK2NvbmZpZyBBUkNIX1BIWVNfQUREUl9UXzY0QklUCisgICAgICAgZGVmX2Jvb2wgWDg2XzY0IHx8IFg4Nl9QQUUKKwogIyBDb21tb24gTlVNQSBGZWF0dXJlcwogY29uZmlnIE5VTUEKIAlib29sICJOdW1hIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTY2hlZHVsZXIgU3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKQEAgLTEyNDEsOCArMTIzMCw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgRUZJCi0JZGVmX2Jvb2wgbgotCXByb21wdCAiRUZJIHJ1bnRpbWUgc2VydmljZSBzdXBwb3J0IgorCWJvb2wgIkVGSSBydW50aW1lIHNlcnZpY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFDUEkKIAktLS1oZWxwLS0tCiAJVGhpcyBlbmFibGVzIHRoZSBrZXJuZWwgdG8gdXNlIEVGSSBydW50aW1lIHNlcnZpY2VzIHRoYXQgYXJlCkBAIC0xMjU1LDE0ICsxMjQzLDYgQEAKICAgCXJlc3VsdGFudCBrZXJuZWwgc2hvdWxkIGNvbnRpbnVlIHRvIGJvb3Qgb24gZXhpc3Rpbmcgbm9uLUVGSQogICAJcGxhdGZvcm1zLgogCi1jb25maWcgSVJRQkFMQU5DRQotCWRlZl9ib29sIHkKLQlwcm9tcHQgIkVuYWJsZSBrZXJuZWwgaXJxIGJhbGFuY2luZyIKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBTTVAgJiYgWDg2X0lPX0FQSUMKLQloZWxwCi0JICBUaGUgZGVmYXVsdCB5ZXMgd2lsbCBhbGxvdyB0aGUga2VybmVsIHRvIGRvIGlycSBsb2FkIGJhbGFuY2luZy4KLQkgIFNheWluZyBubyB3aWxsIGtlZXAgdGhlIGtlcm5lbCBmcm9tIGRvaW5nIGlycSBsb2FkIGJhbGFuY2luZy4KLQogY29uZmlnIFNFQ0NPTVAKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJFbmFibGUgc2VjY29tcCB0byBzYWZlbHkgY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUiCkBAIC0xODg2LDcgKzE4NjYsNyBAQAogCiBjb25maWcgSUEzMl9BT1VUCiAgICAgICAgdHJpc3RhdGUgIklBMzIgYS5vdXQgc3VwcG9ydCIKLSAgICAgICBkZXBlbmRzIG9uIElBMzJfRU1VTEFUSU9OICYmIEFSQ0hfU1VQUE9SVFNfQU9VVAorICAgICAgIGRlcGVuZHMgb24gSUEzMl9FTVVMQVRJT04KICAgICAgICBoZWxwCiAgICAgICAgICBTdXBwb3J0IG9sZCBhLm91dCBiaW5hcmllcyBpbiB0aGUgMzJiaXQgZW11bGF0aW9uLgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmVzYS5jCmluZGV4IDFlNmZlMDIuLjk5YjMwNzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmVzYS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmVzYS5jCkBAIC04OCwxNCArODgsMTEgQEAKIAkJCSAgICh2bWluZm8ubWVtb3J5X2xheW91dCA9PSA0IHx8CiAJCQkgICAgdm1pbmZvLm1lbW9yeV9sYXlvdXQgPT0gNikgJiYKIAkJCSAgIHZtaW5mby5tZW1vcnlfcGxhbmVzID09IDEpIHsKLSNpZmRlZiBDT05GSUdfRkIKKyNpZmRlZiBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQKIAkJCS8qIEdyYXBoaWNzIG1vZGUsIGNvbG9yLCBsaW5lYXIgZnJhbWUgYnVmZmVyCiAJCQkgICBzdXBwb3J0ZWQuICBPbmx5IHJlZ2lzdGVyIHRoZSBtb2RlIGlmCiAJCQkgICBpZiBmcmFtZWJ1ZmZlciBpcyBjb25maWd1cmVkLCBob3dldmVyLAotCQkJICAgb3RoZXJ3aXNlIHRoZSB1c2VyIHdpbGwgYmUgbGVmdCB3aXRob3V0IGEgc2NyZWVuLgotCQkJICAgV2UgZG9uJ3QgcmVxdWlyZSBDT05GSUdfRkJfVkVTQSwgaG93ZXZlciwgc2luY2UKLQkJCSAgIHNvbWUgb2YgdGhlIG90aGVyIGZyYW1lYnVmZmVyIGRyaXZlcnMgY2FuIHVzZQotCQkJICAgdGhpcyBtb2RlLXNldHRpbmcsIHRvby4gKi8KKwkJCSAgIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGJlIGxlZnQgd2l0aG91dCBhIHNjcmVlbi4gKi8KIAkJCW1pID0gR0VUX0hFQVAoc3RydWN0IG1vZGVfaW5mbywgMSk7CiAJCQltaS0+bW9kZSA9IG1vZGUgKyBWSURFT19GSVJTVF9WRVNBOwogCQkJbWktPmRlcHRoID0gdm1pbmZvLmJwcDsKQEAgLTEzMywxMCArMTMwLDEyIEBACiAJaWYgKCh2bWluZm8ubW9kZV9hdHRyICYgMHgxNSkgPT0gMHgwNSkgewogCQkvKiBJdCdzIGEgc3VwcG9ydGVkIHRleHQgbW9kZSAqLwogCQlpc19ncmFwaGljID0gMDsKKyNpZmRlZiBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQKIAl9IGVsc2UgaWYgKCh2bWluZm8ubW9kZV9hdHRyICYgMHg5OSkgPT0gMHg5OSkgewogCQkvKiBJdCdzIGEgZ3JhcGhpY3MgbW9kZSB3aXRoIGxpbmVhciBmcmFtZSBidWZmZXIgKi8KIAkJaXNfZ3JhcGhpYyA9IDE7CiAJCXZlc2FfbW9kZSB8PSAweDQwMDA7IC8qIFJlcXVlc3QgbGluZWFyIGZyYW1lIGJ1ZmZlciAqLworI2VuZGlmCiAJfSBlbHNlIHsKIAkJcmV0dXJuIC0xOwkvKiBJbnZhbGlkIG1vZGUgKi8KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnIGIvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZwppbmRleCA1MmQwMzU5Li4xM2I4Yzg2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCisrKyBiL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKQEAgLTI4Nyw3ICsyODcsNiBAQAogIyBDT05GSUdfTVRSUl9TQU5JVElaRVIgaXMgbm90IHNldAogQ09ORklHX1g4Nl9QQVQ9eQogQ09ORklHX0VGST15Ci0jIENPTkZJR19JUlFCQUxBTkNFIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggZWI0MzE0Ny4uMjU2YjAwYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCkBAIC01NzEsOCArNTcxLDggQEAKIAkucXVhZCBjb21wYXRfc3lzX3NldHJsaW1pdAkvKiA3NSAqLwogCS5xdWFkIGNvbXBhdF9zeXNfb2xkX2dldHJsaW1pdAkvKiBvbGRfZ2V0cmxpbWl0ICovCiAJLnF1YWQgY29tcGF0X3N5c19nZXRydXNhZ2UKLQkucXVhZCBzeXMzMl9nZXR0aW1lb2ZkYXkKLQkucXVhZCBzeXMzMl9zZXR0aW1lb2ZkYXkKKwkucXVhZCBjb21wYXRfc3lzX2dldHRpbWVvZmRheQorCS5xdWFkIGNvbXBhdF9zeXNfc2V0dGltZW9mZGF5CiAJLnF1YWQgc3lzX2dldGdyb3VwczE2CS8qIDgwICovCiAJLnF1YWQgc3lzX3NldGdyb3VwczE2CiAJLnF1YWQgc3lzMzJfb2xkX3NlbGVjdApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jIGIvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jCmluZGV4IGJlZGE0MjMuLjJlMDlkY2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYworKysgYi9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMKQEAgLTQ5LDQxICs0OSw2IEBACiAKICNkZWZpbmUgQUEoX194KQkJKCh1bnNpZ25lZCBsb25nKShfX3gpKQogCi1pbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICprYnVmLCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICp1YnVmKQotewotCWNvbXBhdF9pbm9fdCBpbm87Ci0KLQl0eXBlb2YodWJ1Zi0+c3RfdWlkKSB1aWQgPSAwOwotCXR5cGVvZih1YnVmLT5zdF9naWQpIGdpZCA9IDA7Ci0JU0VUX1VJRCh1aWQsIGtidWYtPnVpZCk7Ci0JU0VUX0dJRChnaWQsIGtidWYtPmdpZCk7Ci0JaWYgKCFvbGRfdmFsaWRfZGV2KGtidWYtPmRldikgfHwgIW9sZF92YWxpZF9kZXYoa2J1Zi0+cmRldikpCi0JCXJldHVybiAtRU9WRVJGTE9XOwotCWlmIChrYnVmLT5zaXplID49IDB4N2ZmZmZmZmYpCi0JCXJldHVybiAtRU9WRVJGTE9XOwotCWlubyA9IGtidWYtPmlubzsKLQlpZiAoc2l6ZW9mKGlubykgPCBzaXplb2Yoa2J1Zi0+aW5vKSAmJiBpbm8gIT0ga2J1Zi0+aW5vKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVidWYsIHNpemVvZihzdHJ1Y3QgY29tcGF0X3N0YXQpKSB8fAotCSAgICBfX3B1dF91c2VyKG9sZF9lbmNvZGVfZGV2KGtidWYtPmRldiksICZ1YnVmLT5zdF9kZXYpIHx8Ci0JICAgIF9fcHV0X3VzZXIoaW5vLCAmdWJ1Zi0+c3RfaW5vKSB8fAotCSAgICBfX3B1dF91c2VyKGtidWYtPm1vZGUsICZ1YnVmLT5zdF9tb2RlKSB8fAotCSAgICBfX3B1dF91c2VyKGtidWYtPm5saW5rLCAmdWJ1Zi0+c3RfbmxpbmspIHx8Ci0JICAgIF9fcHV0X3VzZXIodWlkLCAmdWJ1Zi0+c3RfdWlkKSB8fAotCSAgICBfX3B1dF91c2VyKGdpZCwgJnVidWYtPnN0X2dpZCkgfHwKLQkgICAgX19wdXRfdXNlcihvbGRfZW5jb2RlX2RldihrYnVmLT5yZGV2KSwgJnVidWYtPnN0X3JkZXYpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+c2l6ZSwgJnVidWYtPnN0X3NpemUpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+YXRpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfYXRpbWUpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+YXRpbWUudHZfbnNlYywgJnVidWYtPnN0X2F0aW1lX25zZWMpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+bXRpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfbXRpbWUpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+bXRpbWUudHZfbnNlYywgJnVidWYtPnN0X210aW1lX25zZWMpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+Y3RpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfY3RpbWUpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+Y3RpbWUudHZfbnNlYywgJnVidWYtPnN0X2N0aW1lX25zZWMpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+Ymxrc2l6ZSwgJnVidWYtPnN0X2Jsa3NpemUpIHx8Ci0JICAgIF9fcHV0X3VzZXIoa2J1Zi0+YmxvY2tzLCAmdWJ1Zi0+c3RfYmxvY2tzKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl90cnVuY2F0ZTY0KGNoYXIgX191c2VyICpmaWxlbmFtZSwKIAkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXRfbG93LApAQCAtNDAyLDc1ICszNjcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBsb25nIGdldF90djMyKHN0cnVjdCB0aW1ldmFsICpvLCBzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICppKQotewotCWludCBlcnIgPSAtRUZBVUxUOwotCi0JaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgaSwgc2l6ZW9mKCppKSkpIHsKLQkJZXJyID0gX19nZXRfdXNlcihvLT50dl9zZWMsICZpLT50dl9zZWMpOwotCQllcnIgfD0gX19nZXRfdXNlcihvLT50dl91c2VjLCAmaS0+dHZfdXNlYyk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBwdXRfdHYzMihzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICpvLCBzdHJ1Y3QgdGltZXZhbCAqaSkKLXsKLQlpbnQgZXJyID0gLUVGQVVMVDsKLQotCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBvLCBzaXplb2YoKm8pKSkgewotCQllcnIgPSBfX3B1dF91c2VyKGktPnR2X3NlYywgJm8tPnR2X3NlYyk7Ci0JCWVyciB8PSBfX3B1dF91c2VyKGktPnR2X3VzZWMsICZvLT50dl91c2VjKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQogYXNtbGlua2FnZSBsb25nIHN5czMyX2FsYXJtKHVuc2lnbmVkIGludCBzZWNvbmRzKQogewogCXJldHVybiBhbGFybV9zZXRpdGltZXIoc2Vjb25kcyk7CiB9CiAKLS8qCi0gKiBUcmFuc2xhdGlvbnMgZHVlIHRvIHRpbWVfdCBzaXplIGRpZmZlcmVuY2VzLiBXaGljaCBhZmZlY3RzIGFsbAotICogc29ydHMgb2YgdGhpbmdzLCBsaWtlIHRpbWV2YWwgYW5kIGl0aW1lcnZhbC4KLSAqLwotYXNtbGlua2FnZSBsb25nIHN5czMyX2dldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKLQkJCQkgICBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlpZiAodHYpIHsKLQkJc3RydWN0IHRpbWV2YWwga3R2OwotCi0JCWRvX2dldHRpbWVvZmRheSgma3R2KTsKLQkJaWYgKHB1dF90djMyKHR2LCAma3R2KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAodHopIHsKLQkJaWYgKGNvcHlfdG9fdXNlcih0eiwgJnN5c190eiwgc2l6ZW9mKHN5c190eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfc2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LAotCQkJCSAgIHN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQotewotCXN0cnVjdCB0aW1ldmFsIGt0djsKLQlzdHJ1Y3QgdGltZXNwZWMga3RzOwotCXN0cnVjdCB0aW1lem9uZSBrdHo7Ci0KLQlpZiAodHYpIHsKLQkJaWYgKGdldF90djMyKCZrdHYsIHR2KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlrdHMudHZfc2VjID0ga3R2LnR2X3NlYzsKLQkJa3RzLnR2X25zZWMgPSBrdHYudHZfdXNlYyAqIE5TRUNfUEVSX1VTRUM7Ci0JfQotCWlmICh0eikgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmt0eiwgdHosIHNpemVvZihrdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldHVybiBkb19zeXNfc2V0dGltZW9mZGF5KHR2ID8gJmt0cyA6IE5VTEwsIHR6ID8gJmt0eiA6IE5VTEwpOwotfQotCiBzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgewogCXVuc2lnbmVkIGludCBuOwogCXVuc2lnbmVkIGludCBpbnA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMGQ0MWYwMy4uZDdlNWE1OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtMjMsNyArMjMsNyBAQAogQ0ZMQUdTX3RzYy5vCQk6PSAkKG5vc3RhY2twKQogCiBvYmoteQkJCTo9IHByb2Nlc3NfJChCSVRTKS5vIHNpZ25hbF8kKEJJVFMpLm8gZW50cnlfJChCSVRTKS5vCi1vYmoteQkJCSs9IHRyYXBzLm8gaXJxXyQoQklUUykubyBkdW1wc3RhY2tfJChCSVRTKS5vCitvYmoteQkJCSs9IHRyYXBzLm8gaXJxLm8gaXJxXyQoQklUUykubyBkdW1wc3RhY2tfJChCSVRTKS5vCiBvYmoteQkJCSs9IHRpbWVfJChCSVRTKS5vIGlvcG9ydC5vIGxkdC5vCiBvYmoteQkJCSs9IHNldHVwLm8gaTgyNTkubyBpcnFpbml0XyQoQklUUykubyBzZXR1cF9wZXJjcHUubwogb2JqLSQoQ09ORklHX1g4Nl9WSVNXUykJKz0gdmlzd3NfcXVpcmtzLm8KQEAgLTYwLDggKzYwLDggQEAKIG9iai0kKENPTkZJR19YODZfNjRfU01QKQkrPSB0c2Nfc3luYy5vIHNtcGNvbW1vbi5vCiBvYmotJChDT05GSUdfWDg2X1RSQU1QT0xJTkUpCSs9IHRyYW1wb2xpbmVfJChCSVRTKS5vCiBvYmotJChDT05GSUdfWDg2X01QUEFSU0UpCSs9IG1wcGFyc2Uubwotb2JqLSQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQkrPSBhcGljXyQoQklUUykubyBubWkubwotb2JqLSQoQ09ORklHX1g4Nl9JT19BUElDKQkrPSBpb19hcGljXyQoQklUUykubworb2JqLSQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQkrPSBhcGljLm8gbm1pLm8KK29iai0kKENPTkZJR19YODZfSU9fQVBJQykJKz0gaW9fYXBpYy5vCiBvYmotJChDT05GSUdfWDg2X1JFQk9PVEZJWFVQUykJKz0gcmVib290X2ZpeHVwc18zMi5vCiBvYmotJChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCSs9IGZ0cmFjZS5vCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjXyQoQklUUykubwpAQCAtMTA4LDcgKzEwOCw3IEBACiAjIDY0IGJpdCBzcGVjaWZpYyBmaWxlcwogaWZlcSAoJChDT05GSUdfWDg2XzY0KSx5KQogICAgICAgICBvYmoteQkJCQkrPSBnZW5hcGljXzY0Lm8gZ2VuYXBpY19mbGF0XzY0Lm8gZ2VueDJhcGljX3V2X3gubyB0bGJfdXYubwotCW9iai15CQkJCSs9IGJpb3NfdXYubworCW9iai15CQkJCSs9IGJpb3NfdXYubyB1dl9pcnEubyB1dl9zeXNmcy5vCiAgICAgICAgIG9iai15CQkJCSs9IGdlbngyYXBpY19jbHVzdGVyLm8KICAgICAgICAgb2JqLXkJCQkJKz0gZ2VueDJhcGljX3BoeXMubwogICAgICAgICBvYmotJChDT05GSUdfWDg2X1BNX1RJTUVSKQkrPSBwbXRpbWVyXzY0Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCBlYjg3NWNkLi4wZDFjMjZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC0xMjU2LDcgKzEyNTYsNyBAQAogCiAJY291bnQgPQogCSAgICBhY3BpX3RhYmxlX3BhcnNlX21hZHQoQUNQSV9NQURUX1RZUEVfSU5URVJSVVBUX09WRVJSSURFLCBhY3BpX3BhcnNlX2ludF9zcmNfb3ZyLAotCQkJCSAgTlJfSVJRX1ZFQ1RPUlMpOworCQkJCSAgbnJfaXJxcyk7CiAJaWYgKGNvdW50IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYCiAJCSAgICAgICAiRXJyb3IgcGFyc2luZyBpbnRlcnJ1cHQgc291cmNlIG92ZXJyaWRlcyBlbnRyeVxuIik7CkBAIC0xMjc2LDcgKzEyNzYsNyBAQAogCiAJY291bnQgPQogCSAgICBhY3BpX3RhYmxlX3BhcnNlX21hZHQoQUNQSV9NQURUX1RZUEVfTk1JX1NPVVJDRSwgYWNwaV9wYXJzZV9ubWlfc3JjLAotCQkJCSAgTlJfSVJRX1ZFQ1RPUlMpOworCQkJCSAgbnJfaXJxcyk7CiAJaWYgKGNvdW50IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJFcnJvciBwYXJzaW5nIE5NSSBTUkMgZW50cnlcbiIpOwogCQkvKiBUQkQ6IENsZWFudXAgdG8gYWxsb3cgZmFsbGJhY2sgdG8gTVBTICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYwppbmRleCA0MjZlNWQ5Li5jNDRjZDZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgogCiAjaW5jbHVkZSAicmVhbG1vZGUvd2FrZXVwLmgiCiAjaW5jbHVkZSAic2xlZXAuaCIKQEAgLTk4LDYgKzk5LDggQEAKIAloZWFkZXItPnRyYW1wb2xpbmVfc2VnbWVudCA9IHNldHVwX3RyYW1wb2xpbmUoKSA+PiA0OwogI2lmZGVmIENPTkZJR19TTVAKIAlzdGFja19zdGFydC5zcCA9IHRlbXBfc3RhY2sgKyA0MDk2OworCWVhcmx5X2dkdF9kZXNjci5hZGRyZXNzID0KKwkJCSh1bnNpZ25lZCBsb25nKWdldF9jcHVfZ2R0X3RhYmxlKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAjZW5kaWYKIAlpbml0aWFsX2NvZGUgPSAodW5zaWduZWQgbG9uZyl3YWtldXBfbG9uZzY0OwogCXNhdmVkX21hZ2ljID0gMHgxMjM0NTY3ODlhYmNkZWYwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCmluZGV4IDM0ZTRkMTEuLmE4ZmQ5ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKQEAgLTI5NSw3ICsyOTUsNyBAQAogCQl1NjQgYWRkcmVzcywgc2l6ZV90IHNpemUpCiB7CiAJaW50IHMgPSAwOwotCXVuc2lnbmVkIHBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGFkZHJlc3MsIHNpemUpOworCXVuc2lnbmVkIHBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGFkZHJlc3MsIHNpemUsIFBBR0VfU0laRSk7CiAKIAlhZGRyZXNzICY9IFBBR0VfTUFTSzsKIApAQCAtNjgwLDcgKzY4MCw4IEBACiAJICAgIGlvbW11LT5leGNsdXNpb25fc3RhcnQgPCBkbWFfZG9tLT5hcGVydHVyZV9zaXplKSB7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnRwYWdlID0gaW9tbXUtPmV4Y2x1c2lvbl9zdGFydCA+PiBQQUdFX1NISUZUOwogCQlpbnQgcGFnZXMgPSBpb21tdV9udW1fcGFnZXMoaW9tbXUtPmV4Y2x1c2lvbl9zdGFydCwKLQkJCQkJICAgIGlvbW11LT5leGNsdXNpb25fbGVuZ3RoKTsKKwkJCQkJICAgIGlvbW11LT5leGNsdXNpb25fbGVuZ3RoLAorCQkJCQkgICAgUEFHRV9TSVpFKTsKIAkJZG1hX29wc19yZXNlcnZlX2FkZHJlc3NlcyhkbWFfZG9tLCBzdGFydHBhZ2UsIHBhZ2VzKTsKIAl9CiAKQEAgLTkzNSw3ICs5MzYsNyBAQAogCXVuc2lnbmVkIGxvbmcgYWxpZ25fbWFzayA9IDA7CiAJaW50IGk7CiAKLQlwYWdlcyA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgc2l6ZSk7CisJcGFnZXMgPSBpb21tdV9udW1fcGFnZXMocGFkZHIsIHNpemUsIFBBR0VfU0laRSk7CiAJcGFkZHIgJj0gUEFHRV9NQVNLOwogCiAJaWYgKGFsaWduKQpAQCAtOTgwLDcgKzk4MSw3IEBACiAJaWYgKChkbWFfYWRkciA9PSAwKSB8fCAoZG1hX2FkZHIgKyBzaXplID4gZG1hX2RvbS0+YXBlcnR1cmVfc2l6ZSkpCiAJCXJldHVybjsKIAotCXBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGRtYV9hZGRyLCBzaXplKTsKKwlwYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfYWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKIAlkbWFfYWRkciAmPSBQQUdFX01BU0s7CiAJc3RhcnQgPSBkbWFfYWRkcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhN2Y5NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljLmMKQEAgLTAsMCArMSwyMjM4IEBACisvKgorICoJTG9jYWwgQVBJQyBoYW5kbGluZywgbG9jYWwgQVBJQyB0aW1lcnMKKyAqCisgKgkoYykgMTk5OSwgMjAwMCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqCisgKglGaXhlcworICoJTWFjaWVqIFcuIFJvenlja2kJOglCaXRzIGZvciBnZW51aW5lIDgyNDg5RFggQVBJQ3M7CisgKgkJCQkJdGhhbmtzIHRvIEVyaWMgR2lsbW9yZQorICoJCQkJCWFuZCBSb2xmIEcuIFRld3MKKyAqCQkJCQlmb3IgdGVzdGluZyB0aGVzZSBleHRlbnNpdmVseS4KKyAqCU1hY2llaiBXLiBSb3p5Y2tpCToJVmFyaW91cyB1cGRhdGVzIGFuZCBmaXhlcy4KKyAqCU1pa2FlbCBQZXR0ZXJzc29uCToJUG93ZXIgTWFuYWdlbWVudCBmb3IgVVAtQVBJQy4KKyAqCVBhdmVsIE1hY2hlayBhbmQKKyAqCU1pa2FlbCBQZXR0ZXJzc29uCToJUE0gY29udmVydGVkIHRvIGRyaXZlciBtb2RlbC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGlfcG10bXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2hfaG9va3MuaD4KKyNpbmNsdWRlIDxhc20vaHBldC5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2k4MjUzLmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgorI2luY2x1ZGUgPGFzbS9pZGxlLmg+CisjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KKworI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgorI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgorI2luY2x1ZGUgPG1hY2hfaXBpLmg+CisKKy8qCisgKiBTYW5pdHkgY2hlY2sKKyAqLworI2lmICgoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiAweDBGKSAhPSAweDBGKQorIyBlcnJvciBTUFVSSU9VU19BUElDX1ZFQ1RPUiBkZWZpbml0aW9uIGVycm9yCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfMzIKKy8qCisgKiBLbm9iIHRvIGNvbnRyb2wgb3VyIHdpbGxpbmduZXNzIHRvIGVuYWJsZSB0aGUgbG9jYWwgQVBJQy4KKyAqCisgKiArMT1mb3JjZS1lbmFibGUKKyAqLworc3RhdGljIGludCBmb3JjZV9lbmFibGVfbG9jYWxfYXBpYzsKKy8qCisgKiBBUElDIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX2xhcGljKGNoYXIgKmFyZykKK3sKKwlmb3JjZV9lbmFibGVfbG9jYWxfYXBpYyA9IDE7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibGFwaWMiLCBwYXJzZV9sYXBpYyk7CisvKiBMb2NhbCBBUElDIHdhcyBkaXNhYmxlZCBieSB0aGUgQklPUyBhbmQgZW5hYmxlZCBieSB0aGUga2VybmVsICovCitzdGF0aWMgaW50IGVuYWJsZWRfdmlhX2FwaWNiYXNlOworCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKK3N0YXRpYyBpbnQgYXBpY19jYWxpYnJhdGVfcG10bXIgX19pbml0ZGF0YTsKK3N0YXRpYyBfX2luaXQgaW50IHNldHVwX2FwaWNwbXRpbWVyKGNoYXIgKnMpCit7CisJYXBpY19jYWxpYnJhdGVfcG10bXIgPSAxOworCW5vdHNjX3NldHVwKE5VTEwpOworCXJldHVybiAwOworfQorX19zZXR1cCgiYXBpY3BtdGltZXIiLCBzZXR1cF9hcGljcG10aW1lcik7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgSEFWRV9YMkFQSUMKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9YMkFQSUMKK2ludCB4MmFwaWM7CisvKiB4MmFwaWMgZW5hYmxlZCBiZWZvcmUgT1MgaGFuZG92ZXIgKi8KK2ludCB4MmFwaWNfcHJlZW5hYmxlZDsKK2ludCBkaXNhYmxlX3gyYXBpYzsKK3N0YXRpYyBfX2luaXQgaW50IHNldHVwX25veDJhcGljKGNoYXIgKnN0cikKK3sKKwlkaXNhYmxlX3gyYXBpYyA9IDE7CisJc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9YMkFQSUMpOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm5veDJhcGljIiwgc2V0dXBfbm94MmFwaWMpOworI2VuZGlmCisKK3Vuc2lnbmVkIGxvbmcgbXBfbGFwaWNfYWRkcjsKK2ludCBkaXNhYmxlX2FwaWM7CisvKiBEaXNhYmxlIGxvY2FsIEFQSUMgdGltZXIgZnJvbSB0aGUga2VybmVsIGNvbW1hbmRsaW5lIG9yIHZpYSBkbWkgcXVpcmsgKi8KK3N0YXRpYyBpbnQgZGlzYWJsZV9hcGljX3RpbWVyIF9fY3B1aW5pdGRhdGE7CisvKiBMb2NhbCBBUElDIHRpbWVyIHdvcmtzIGluIEMyICovCitpbnQgbG9jYWxfYXBpY190aW1lcl9jMl9vazsKK0VYUE9SVF9TWU1CT0xfR1BMKGxvY2FsX2FwaWNfdGltZXJfYzJfb2spOworCitpbnQgZmlyc3Rfc3lzdGVtX3ZlY3RvciA9IDB4ZmU7CisKK2NoYXIgc3lzdGVtX3ZlY3RvcnNbTlJfVkVDVE9SU10gPSB7IFswIC4uLiBOUl9WRUNUT1JTLTFdID0gU1lTX1ZFQ1RPUl9GUkVFfTsKKworLyoKKyAqIERlYnVnIGxldmVsLCBleHBvcnRlZCBmb3IgaW9fYXBpYy5jCisgKi8KK3Vuc2lnbmVkIGludCBhcGljX3ZlcmJvc2l0eTsKKworaW50IHBpY19tb2RlOworCisvKiBIYXZlIHdlIGZvdW5kIGFuIE1QIHRhYmxlICovCitpbnQgc21wX2ZvdW5kX2NvbmZpZzsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsYXBpY19yZXNvdXJjZSA9IHsKKwkubmFtZSA9ICJMb2NhbCBBUElDIiwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsaWJyYXRpb25fcmVzdWx0OworCitzdGF0aWMgaW50IGxhcGljX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpOworc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfc2V0dXAoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpOworc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfYnJvYWRjYXN0KGNwdW1hc2tfdCBtYXNrKTsKK3N0YXRpYyB2b2lkIGFwaWNfcG1fYWN0aXZhdGUodm9pZCk7CisKKy8qCisgKiBUaGUgbG9jYWwgYXBpYyB0aW1lciBjYW4gYmUgdXNlZCBmb3IgYW55IGZ1bmN0aW9uIHdoaWNoIGlzIENQVSBsb2NhbC4KKyAqLworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgbGFwaWNfY2xvY2tldmVudCA9IHsKKwkubmFtZQkJPSAibGFwaWMiLAorCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVAorCQkJfCBDTE9DS19FVlRfRkVBVF9DM1NUT1AgfCBDTE9DS19FVlRfRkVBVF9EVU1NWSwKKwkuc2hpZnQJCT0gMzIsCisJLnNldF9tb2RlCT0gbGFwaWNfdGltZXJfc2V0dXAsCisJLnNldF9uZXh0X2V2ZW50CT0gbGFwaWNfbmV4dF9ldmVudCwKKwkuYnJvYWRjYXN0CT0gbGFwaWNfdGltZXJfYnJvYWRjYXN0LAorCS5yYXRpbmcJCT0gMTAwLAorCS5pcnEJCT0gLTEsCit9Oworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UsIGxhcGljX2V2ZW50cyk7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFwaWNfcGh5czsKKworLyoKKyAqIEdldCB0aGUgTEFQSUMgdmVyc2lvbgorICovCitzdGF0aWMgaW5saW5lIGludCBsYXBpY19nZXRfdmVyc2lvbih2b2lkKQoreworCXJldHVybiBHRVRfQVBJQ19WRVJTSU9OKGFwaWNfcmVhZChBUElDX0xWUikpOworfQorCisvKgorICogQ2hlY2ssIGlmIHRoZSBBUElDIGlzIGludGVncmF0ZWQgb3IgYSBzZXBhcmF0ZSBjaGlwCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGxhcGljX2lzX2ludGVncmF0ZWQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJcmV0dXJuIDE7CisjZWxzZQorCXJldHVybiBBUElDX0lOVEVHUkFURUQobGFwaWNfZ2V0X3ZlcnNpb24oKSk7CisjZW5kaWYKK30KKworLyoKKyAqIENoZWNrLCB3aGV0aGVyIHRoaXMgaXMgYSBtb2Rlcm4gb3IgYSBmaXJzdCBnZW5lcmF0aW9uIEFQSUMKKyAqLworc3RhdGljIGludCBtb2Rlcm5fYXBpYyh2b2lkKQoreworCS8qIEFNRCBzeXN0ZW1zIHVzZSBvbGQgQVBJQyB2ZXJzaW9ucywgc28gY2hlY2sgdGhlIENQVSAqLworCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKKwkgICAgYm9vdF9jcHVfZGF0YS54ODYgPj0gMHhmKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gbGFwaWNfZ2V0X3ZlcnNpb24oKSA+PSAweDE0OworfQorCisvKgorICogUGFyYXZpcnQga2VybmVscyBhbHNvIG1pZ2h0IGJlIHVzaW5nIHRoZXNlIGJlbG93IG9wcy4gU28gd2Ugc3RpbGwKKyAqIHVzZSBnZW5lcmljIGFwaWNfcmVhZCgpL2FwaWNfd3JpdGUoKSwgd2hpY2ggbWlnaHQgYmUgcG9pbnRpbmcgdG8gZGlmZmVyZW50CisgKiBvcHMgaW4gUEFSQVZJUlQgY2FzZS4KKyAqLwordm9pZCB4YXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCit7CisJd2hpbGUgKGFwaWNfcmVhZChBUElDX0lDUikgJiBBUElDX0lDUl9CVVNZKQorCQljcHVfcmVsYXgoKTsKK30KKwordTMyIHNhZmVfeGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQoreworCXUzMiBzZW5kX3N0YXR1czsKKwlpbnQgdGltZW91dDsKKworCXRpbWVvdXQgPSAwOworCWRvIHsKKwkJc2VuZF9zdGF0dXMgPSBhcGljX3JlYWQoQVBJQ19JQ1IpICYgQVBJQ19JQ1JfQlVTWTsKKwkJaWYgKCFzZW5kX3N0YXR1cykKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTAwKTsKKwl9IHdoaWxlICh0aW1lb3V0KysgPCAxMDAwKTsKKworCXJldHVybiBzZW5kX3N0YXR1czsKK30KKwordm9pZCB4YXBpY19pY3Jfd3JpdGUodTMyIGxvdywgdTMyIGlkKQoreworCWFwaWNfd3JpdGUoQVBJQ19JQ1IyLCBTRVRfQVBJQ19ERVNUX0ZJRUxEKGlkKSk7CisJYXBpY193cml0ZShBUElDX0lDUiwgbG93KTsKK30KKwordTY0IHhhcGljX2ljcl9yZWFkKHZvaWQpCit7CisJdTMyIGljcjEsIGljcjI7CisKKwlpY3IyID0gYXBpY19yZWFkKEFQSUNfSUNSMik7CisJaWNyMSA9IGFwaWNfcmVhZChBUElDX0lDUik7CisKKwlyZXR1cm4gaWNyMSB8ICgodTY0KWljcjIgPDwgMzIpOworfQorCitzdGF0aWMgc3RydWN0IGFwaWNfb3BzIHhhcGljX29wcyA9IHsKKwkucmVhZCA9IG5hdGl2ZV9hcGljX21lbV9yZWFkLAorCS53cml0ZSA9IG5hdGl2ZV9hcGljX21lbV93cml0ZSwKKwkuaWNyX3JlYWQgPSB4YXBpY19pY3JfcmVhZCwKKwkuaWNyX3dyaXRlID0geGFwaWNfaWNyX3dyaXRlLAorCS53YWl0X2ljcl9pZGxlID0geGFwaWNfd2FpdF9pY3JfaWRsZSwKKwkuc2FmZV93YWl0X2ljcl9pZGxlID0gc2FmZV94YXBpY193YWl0X2ljcl9pZGxlLAorfTsKKworc3RydWN0IGFwaWNfb3BzIF9fcmVhZF9tb3N0bHkgKmFwaWNfb3BzID0gJnhhcGljX29wczsKK0VYUE9SVF9TWU1CT0xfR1BMKGFwaWNfb3BzKTsKKworI2lmZGVmIEhBVkVfWDJBUElDCitzdGF0aWMgdm9pZCB4MmFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQoreworCS8qIG5vIG5lZWQgdG8gd2FpdCBmb3IgaWNyIGlkbGUgaW4geDJhcGljICovCisJcmV0dXJuOworfQorCitzdGF0aWMgdTMyIHNhZmVfeDJhcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKK3sKKwkvKiBubyBuZWVkIHRvIHdhaXQgZm9yIGljciBpZGxlIGluIHgyYXBpYyAqLworCXJldHVybiAwOworfQorCit2b2lkIHgyYXBpY19pY3Jfd3JpdGUodTMyIGxvdywgdTMyIGlkKQoreworCXdybXNybChBUElDX0JBU0VfTVNSICsgKEFQSUNfSUNSID4+IDQpLCAoKF9fdTY0KSBpZCkgPDwgMzIgfCBsb3cpOworfQorCit1NjQgeDJhcGljX2ljcl9yZWFkKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlyZG1zcmwoQVBJQ19CQVNFX01TUiArIChBUElDX0lDUiA+PiA0KSwgdmFsKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgc3RydWN0IGFwaWNfb3BzIHgyYXBpY19vcHMgPSB7CisJLnJlYWQgPSBuYXRpdmVfYXBpY19tc3JfcmVhZCwKKwkud3JpdGUgPSBuYXRpdmVfYXBpY19tc3Jfd3JpdGUsCisJLmljcl9yZWFkID0geDJhcGljX2ljcl9yZWFkLAorCS5pY3Jfd3JpdGUgPSB4MmFwaWNfaWNyX3dyaXRlLAorCS53YWl0X2ljcl9pZGxlID0geDJhcGljX3dhaXRfaWNyX2lkbGUsCisJLnNhZmVfd2FpdF9pY3JfaWRsZSA9IHNhZmVfeDJhcGljX3dhaXRfaWNyX2lkbGUsCit9OworI2VuZGlmCisKKy8qKgorICogZW5hYmxlX05NSV90aHJvdWdoX0xWVDAgLSBlbmFibGUgTk1JIHRocm91Z2ggbG9jYWwgdmVjdG9yIHRhYmxlIDAKKyAqLwordm9pZCBfX2NwdWluaXQgZW5hYmxlX05NSV90aHJvdWdoX0xWVDAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdjsKKworCS8qIHVubWFzayBhbmQgc2V0IHRvIE5NSSAqLworCXYgPSBBUElDX0RNX05NSTsKKworCS8qIExldmVsIHRyaWdnZXJlZCBmb3IgODI0ODlEWCAoMzJiaXQgbW9kZSkgKi8KKwlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkKKwkJdiB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOworCisJYXBpY193cml0ZShBUElDX0xWVDAsIHYpOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorLyoqCisgKiBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0IC0gR2V0IG51bWJlciBvZiBwaHlzaWNhbCBicm9hZGNhc3QgSURzCisgKi8KK2ludCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KHZvaWQpCit7CisJcmV0dXJuIG1vZGVybl9hcGljKCkgPyAweGZmIDogMHhmOworfQorI2VuZGlmCisKKy8qKgorICogbGFwaWNfZ2V0X21heGx2dCAtIGdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgbG9jYWwgdmVjdG9yIHRhYmxlIGVudHJpZXMKKyAqLworaW50IGxhcGljX2dldF9tYXhsdnQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdjsKKworCXYgPSBhcGljX3JlYWQoQVBJQ19MVlIpOworCS8qCisJICogLSB3ZSBhbHdheXMgaGF2ZSBBUElDIGludGVncmF0ZWQgb24gNjRiaXQgbW9kZQorCSAqIC0gODI0ODlEWHMgZG8gbm90IHJlcG9ydCAjIG9mIExWVCBlbnRyaWVzCisJICovCisJcmV0dXJuIEFQSUNfSU5URUdSQVRFRChHRVRfQVBJQ19WRVJTSU9OKHYpKSA/IEdFVF9BUElDX01BWExWVCh2KSA6IDI7Cit9CisKKy8qCisgKiBMb2NhbCBBUElDIHRpbWVyCisgKi8KKworLyogQ2xvY2sgZGl2aXNvciAqLworI2RlZmluZSBBUElDX0RJVklTT1IgMTYKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgbG9jYWwgQVBJQyB0aW1lciwgd2l0aCBhIHRpbWVvdXQgb2YKKyAqICdjbG9ja3MnIEFQSUMgYnVzIGNsb2NrLiBEdXJpbmcgY2FsaWJyYXRpb24gd2UgYWN0dWFsbHkgY2FsbAorICogdGhpcyBmdW5jdGlvbiB0d2ljZSBvbiB0aGUgYm9vdCBDUFUsIG9uY2Ugd2l0aCBhIGJvZ3VzIHRpbWVvdXQKKyAqIHZhbHVlLCBzZWNvbmQgdGltZSBmb3IgcmVhbC4gVGhlIG90aGVyIChub25jYWxpYnJhdGluZykgQ1BVcworICogY2FsbCB0aGlzIGZ1bmN0aW9uIG9ubHkgb25jZSwgd2l0aCB0aGUgcmVhbCwgY2FsaWJyYXRlZCB2YWx1ZS4KKyAqCisgKiBXZSBkbyByZWFkcyBiZWZvcmUgd3JpdGVzIGV2ZW4gaWYgdW5uZWNlc3NhcnksIHRvIGdldCBhcm91bmQgdGhlCisgKiBQNSBBUElDIGRvdWJsZSB3cml0ZSBidWcuCisgKi8KK3N0YXRpYyB2b2lkIF9fc2V0dXBfQVBJQ19MVlRUKHVuc2lnbmVkIGludCBjbG9ja3MsIGludCBvbmVzaG90LCBpbnQgaXJxZW4pCit7CisJdW5zaWduZWQgaW50IGx2dHRfdmFsdWUsIHRtcF92YWx1ZTsKKworCWx2dHRfdmFsdWUgPSBMT0NBTF9USU1FUl9WRUNUT1I7CisJaWYgKCFvbmVzaG90KQorCQlsdnR0X3ZhbHVlIHw9IEFQSUNfTFZUX1RJTUVSX1BFUklPRElDOworCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQorCQlsdnR0X3ZhbHVlIHw9IFNFVF9BUElDX1RJTUVSX0JBU0UoQVBJQ19USU1FUl9CQVNFX0RJVik7CisKKwlpZiAoIWlycWVuKQorCQlsdnR0X3ZhbHVlIHw9IEFQSUNfTFZUX01BU0tFRDsKKworCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBsdnR0X3ZhbHVlKTsKKworCS8qCisJICogRGl2aWRlIFBJQ0xLIGJ5IDE2CisJICovCisJdG1wX3ZhbHVlID0gYXBpY19yZWFkKEFQSUNfVERDUik7CisJYXBpY193cml0ZShBUElDX1REQ1IsCisJCSh0bXBfdmFsdWUgJiB+KEFQSUNfVERSX0RJVl8xIHwgQVBJQ19URFJfRElWX1RNQkFTRSkpIHwKKwkJQVBJQ19URFJfRElWXzE2KTsKKworCWlmICghb25lc2hvdCkKKwkJYXBpY193cml0ZShBUElDX1RNSUNULCBjbG9ja3MgLyBBUElDX0RJVklTT1IpOworfQorCisvKgorICogU2V0dXAgZXh0ZW5kZWQgTFZULCBBTUQgc3BlY2lmaWMgKEs4LCBmYW1pbHkgMTBoKQorICoKKyAqIFZlY3RvciBtYXBwaW5ncyBhcmUgaGFyZCBjb2RlZC4gT24gSzggb25seSBvZmZzZXQgMCAoQVBJQzUwMCkgYW5kCisgKiBNQ0UgaW50ZXJydXB0cyBhcmUgc3VwcG9ydGVkLiBUaHVzIE1DRSBvZmZzZXQgbXVzdCBiZSBzZXQgdG8gMC4KKyAqCisgKiBJZiBtYXNrPTEsIHRoZSBMVlQgZW50cnkgZG9lcyBub3QgZ2VuZXJhdGUgaW50ZXJydXB0cyB3aGlsZSBtYXNrPTAKKyAqIGVuYWJsZXMgdGhlIHZlY3Rvci4gU2VlIGFsc28gdGhlIEJLREdzLgorICovCisKKyNkZWZpbmUgQVBJQ19FSUxWVF9MVlRPRkZfTUNFIDAKKyNkZWZpbmUgQVBJQ19FSUxWVF9MVlRPRkZfSUJTIDEKKworc3RhdGljIHZvaWQgc2V0dXBfQVBJQ19laWx2dCh1OCBsdnRfb2ZmLCB1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgcmVnID0gKGx2dF9vZmYgPDwgNCkgKyBBUElDX0VJTFZUMDsKKwl1bnNpZ25lZCBpbnQgIHYgICA9IChtYXNrIDw8IDE2KSB8IChtc2dfdHlwZSA8PCA4KSB8IHZlY3RvcjsKKworCWFwaWNfd3JpdGUocmVnLCB2KTsKK30KKwordTggc2V0dXBfQVBJQ19laWx2dF9tY2UodTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKK3sKKwlzZXR1cF9BUElDX2VpbHZ0KEFQSUNfRUlMVlRfTFZUT0ZGX01DRSwgdmVjdG9yLCBtc2dfdHlwZSwgbWFzayk7CisJcmV0dXJuIEFQSUNfRUlMVlRfTFZUT0ZGX01DRTsKK30KKwordTggc2V0dXBfQVBJQ19laWx2dF9pYnModTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKK3sKKwlzZXR1cF9BUElDX2VpbHZ0KEFQSUNfRUlMVlRfTFZUT0ZGX0lCUywgdmVjdG9yLCBtc2dfdHlwZSwgbWFzayk7CisJcmV0dXJuIEFQSUNfRUlMVlRfTFZUT0ZGX0lCUzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNldHVwX0FQSUNfZWlsdnRfaWJzKTsKKworLyoKKyAqIFByb2dyYW0gdGhlIG5leHQgZXZlbnQsIHJlbGF0aXZlIHRvIG5vdworICovCitzdGF0aWMgaW50IGxhcGljX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJYXBpY193cml0ZShBUElDX1RNSUNULCBkZWx0YSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgbGFwaWMgdGltZXIgaW4gcGVyaW9kaWMgb3Igb25lc2hvdCBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIGxhcGljX3RpbWVyX3NldHVwKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHY7CisKKwkvKiBMYXBpYyB1c2VkIGFzIGR1bW15IGZvciBicm9hZGNhc3QgPyAqLworCWlmIChldnQtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfRFVNTVkpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQlfX3NldHVwX0FQSUNfTFZUVChjYWxpYnJhdGlvbl9yZXN1bHQsCisJCQkJICBtb2RlICE9IENMT0NLX0VWVF9NT0RFX1BFUklPRElDLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOworCQl2IHw9IChBUElDX0xWVF9NQVNLRUQgfCBMT0NBTF9USU1FUl9WRUNUT1IpOworCQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgdik7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJYnJlYWs7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogTG9jYWwgQVBJQyB0aW1lciBicm9hZGNhc3QgZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfYnJvYWRjYXN0KGNwdW1hc2tfdCBtYXNrKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlzZW5kX0lQSV9tYXNrKG1hc2ssIExPQ0FMX1RJTUVSX1ZFQ1RPUik7CisjZW5kaWYKK30KKworLyoKKyAqIFNldHVwIHRoZSBsb2NhbCBBUElDIHRpbWVyIGZvciB0aGlzIENQVS4gQ29weSB0aGUgaW5pdGlsaXplZCB2YWx1ZXMKKyAqIG9mIHRoZSBib290IENQVSBhbmQgcmVnaXN0ZXIgdGhlIGNsb2NrIGV2ZW50IGluIHRoZSBmcmFtZXdvcmsuCisgKi8KK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBzZXR1cF9BUElDX3RpbWVyKHZvaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7CisKKwltZW1jcHkobGV2dCwgJmxhcGljX2Nsb2NrZXZlbnQsIHNpemVvZigqbGV2dCkpOworCWxldnQtPmNwdW1hc2sgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGxldnQpOworfQorCisvKgorICogSW4gdGhpcyBmdW5jdGlvbnMgd2UgY2FsaWJyYXRlIEFQSUMgYnVzIGNsb2NrcyB0byB0aGUgZXh0ZXJuYWwgdGltZXIuCisgKgorICogV2Ugd2FudCB0byBkbyB0aGUgY2FsaWJyYXRpb24gb25seSBvbmNlIHNpbmNlIHdlIHdhbnQgdG8gaGF2ZSBsb2NhbCB0aW1lcgorICogaXJxcyBzeW5jcm9uLiBDUFVzIGNvbm5lY3RlZCBieSB0aGUgc2FtZSBBUElDIGJ1cyBoYXZlIHRoZSB2ZXJ5IHNhbWUgYnVzCisgKiBmcmVxdWVuY3kuCisgKgorICogVGhpcyB3YXMgcHJldmlvdXNseSBkb25lIGJ5IHJlYWRpbmcgdGhlIFBJVC9IUEVUIGFuZCB3YWl0aW5nIGZvciBhIHdyYXAKKyAqIGFyb3VuZCB0byBmaW5kIG91dCwgdGhhdCBhIHRpY2sgaGFzIGVsYXBzZWQuIEkgaGF2ZSBhIGJveCwgd2hlcmUgdGhlIFBJVAorICogcmVhZG91dCBpcyBicm9rZW4sIHNvIGl0IG5ldmVyIGdldHMgb3V0IG9mIHRoZSB3YWl0IGxvb3AgYWdhaW4uIFRoaXMgd2FzCisgKiBhbHNvIHJlcG9ydGVkIGJ5IG90aGVycy4KKyAqCisgKiBNb25pdG9yaW5nIHRoZSBqaWZmaWVzIHZhbHVlIGlzIGluYWNjdXJhdGUgYW5kIHRoZSBjbG9ja2V2ZW50cworICogaW5mcmFzdHJ1Y3R1cmUgYWxsb3dzIHVzIHRvIGRvIGEgc2ltcGxlIHN1YnN0aXR1dGlvbiBvZiB0aGUgaW50ZXJydXB0CisgKiBoYW5kbGVyLgorICoKKyAqIFRoZSBjYWxpYnJhdGlvbiByb3V0aW5lIGFsc28gdXNlcyB0aGUgcG1fdGltZXIgd2hlbiBwb3NzaWJsZSwgYXMgdGhlIFBJVAorICogaGFwcGVucyB0byBydW4gd2F5IHRvbyBzbG93IChmYWN0b3IgMi4zIG9uIG15IFZBSU8gQ29yZUR1bywgd2hpY2ggZ29lcworICogYmFjayB0byBub3JtYWwgbGF0ZXIgaW4gdGhlIGJvb3QgcHJvY2VzcykuCisgKi8KKworI2RlZmluZSBMQVBJQ19DQUxfTE9PUFMJCShIWi8xMCkKKworc3RhdGljIF9faW5pdGRhdGEgaW50IGxhcGljX2NhbF9sb29wcyA9IC0xOworc3RhdGljIF9faW5pdGRhdGEgbG9uZyBsYXBpY19jYWxfdDEsIGxhcGljX2NhbF90MjsKK3N0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbG9uZyBsYXBpY19jYWxfdHNjMSwgbGFwaWNfY2FsX3RzYzI7CitzdGF0aWMgX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIGxhcGljX2NhbF9wbTEsIGxhcGljX2NhbF9wbTI7CitzdGF0aWMgX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIGxhcGljX2NhbF9qMSwgbGFwaWNfY2FsX2oyOworCisvKgorICogVGVtcG9yYXJ5IGludGVycnVwdCBoYW5kbGVyLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgbGFwaWNfY2FsX2hhbmRsZXIoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB0c2MgPSAwOworCWxvbmcgdGFwaWMgPSBhcGljX3JlYWQoQVBJQ19UTUNDVCk7CisJdW5zaWduZWQgbG9uZyBwbSA9IGFjcGlfcG1fcmVhZF9lYXJseSgpOworCisJaWYgKGNwdV9oYXNfdHNjKQorCQlyZHRzY2xsKHRzYyk7CisKKwlzd2l0Y2ggKGxhcGljX2NhbF9sb29wcysrKSB7CisJY2FzZSAwOgorCQlsYXBpY19jYWxfdDEgPSB0YXBpYzsKKwkJbGFwaWNfY2FsX3RzYzEgPSB0c2M7CisJCWxhcGljX2NhbF9wbTEgPSBwbTsKKwkJbGFwaWNfY2FsX2oxID0gamlmZmllczsKKwkJYnJlYWs7CisKKwljYXNlIExBUElDX0NBTF9MT09QUzoKKwkJbGFwaWNfY2FsX3QyID0gdGFwaWM7CisJCWxhcGljX2NhbF90c2MyID0gdHNjOworCQlpZiAocG0gPCBsYXBpY19jYWxfcG0xKQorCQkJcG0gKz0gQUNQSV9QTV9PVlJSVU47CisJCWxhcGljX2NhbF9wbTIgPSBwbTsKKwkJbGFwaWNfY2FsX2oyID0gamlmZmllczsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBjYWxpYnJhdGVfYnlfcG10aW1lcihsb25nIGRlbHRhcG0sIGxvbmcgKmRlbHRhKQoreworCWNvbnN0IGxvbmcgcG1fMTAwbXMgPSBQTVRNUl9USUNLU19QRVJfU0VDIC8gMTA7CisJY29uc3QgbG9uZyBwbV90aHJlc2ggPSBwbV8xMDBtcyAvIDEwMDsKKwl1bnNpZ25lZCBsb25nIG11bHQ7CisJdTY0IHJlczsKKworI2lmbmRlZiBDT05GSUdfWDg2X1BNX1RJTUVSCisJcmV0dXJuIC0xOworI2VuZGlmCisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0gdGltZXIgZGVsdGEgPSAlbGRcbiIsIGRlbHRhcG0pOworCisJLyogQ2hlY2ssIGlmIHRoZSBQTSB0aW1lciBpcyBhdmFpbGFibGUgKi8KKwlpZiAoIWRlbHRhcG0pCisJCXJldHVybiAtMTsKKworCW11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KFBNVE1SX1RJQ0tTX1BFUl9TRUMsIDIyKTsKKworCWlmIChkZWx0YXBtID4gKHBtXzEwMG1zIC0gcG1fdGhyZXNoKSAmJgorCSAgICBkZWx0YXBtIDwgKHBtXzEwMG1zICsgcG1fdGhyZXNoKSkgeworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0gdGltZXIgcmVzdWx0IG9rXG4iKTsKKwl9IGVsc2UgeworCQlyZXMgPSAoKCh1NjQpZGVsdGFwbSkgKiAgbXVsdCkgPj4gMjI7CisJCWRvX2RpdihyZXMsIDEwMDAwMDApOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUElDIGNhbGlicmF0aW9uIG5vdCBjb25zaXN0ZW50ICIKKwkJCSJ3aXRoIFBNIFRpbWVyOiAlbGRtcyBpbnN0ZWFkIG9mIDEwMG1zXG4iLAorCQkJKGxvbmcpcmVzKTsKKwkJLyogQ29ycmVjdCB0aGUgbGFwaWMgY291bnRlciB2YWx1ZSAqLworCQlyZXMgPSAoKCh1NjQpKCpkZWx0YSkpICogcG1fMTAwbXMpOworCQlkb19kaXYocmVzLCBkZWx0YXBtKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQVBJQyBkZWx0YSBhZGp1c3RlZCB0byBQTS1UaW1lcjogIgorCQkJIiVsdSAoJWxkKVxuIiwgKHVuc2lnbmVkIGxvbmcpcmVzLCAqZGVsdGEpOworCQkqZGVsdGEgPSAobG9uZylyZXM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNhbGlicmF0ZV9BUElDX2Nsb2NrKHZvaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7CisJdm9pZCAoKnJlYWxfaGFuZGxlcikoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KTsKKwl1bnNpZ25lZCBsb25nIGRlbHRhajsKKwlsb25nIGRlbHRhOworCWludCBwbV9yZWZlcmVuY2VkID0gMDsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwkvKiBSZXBsYWNlIHRoZSBnbG9iYWwgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlyZWFsX2hhbmRsZXIgPSBnbG9iYWxfY2xvY2tfZXZlbnQtPmV2ZW50X2hhbmRsZXI7CisJZ2xvYmFsX2Nsb2NrX2V2ZW50LT5ldmVudF9oYW5kbGVyID0gbGFwaWNfY2FsX2hhbmRsZXI7CisKKwkvKgorCSAqIFNldHVwIHRoZSBBUElDIGNvdW50ZXIgdG8gbWF4aW11bS4gVGhlcmUgaXMgbm8gd2F5IHRoZSBsYXBpYworCSAqIGNhbiB1bmRlcmZsb3cgaW4gdGhlIDEwMG1zIGRldGVjdGlvbiB0aW1lIGZyYW1lCisJICovCisJX19zZXR1cF9BUElDX0xWVFQoMHhmZmZmZmZmZiwgMCwgMCk7CisKKwkvKiBMZXQgdGhlIGludGVycnVwdHMgcnVuICovCisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJd2hpbGUgKGxhcGljX2NhbF9sb29wcyA8PSBMQVBJQ19DQUxfTE9PUFMpCisJCWNwdV9yZWxheCgpOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCS8qIFJlc3RvcmUgdGhlIHJlYWwgZXZlbnQgaGFuZGxlciAqLworCWdsb2JhbF9jbG9ja19ldmVudC0+ZXZlbnRfaGFuZGxlciA9IHJlYWxfaGFuZGxlcjsKKworCS8qIEJ1aWxkIGRlbHRhIHQxLXQyIGFzIGFwaWMgdGltZXIgY291bnRzIGRvd24gKi8KKwlkZWx0YSA9IGxhcGljX2NhbF90MSAtIGxhcGljX2NhbF90MjsKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gbGFwaWMgZGVsdGEgPSAlbGRcbiIsIGRlbHRhKTsKKworCS8qIHdlIHRydXN0IHRoZSBQTSBiYXNlZCBjYWxpYnJhdGlvbiBpZiBwb3NzaWJsZSAqLworCXBtX3JlZmVyZW5jZWQgPSAhY2FsaWJyYXRlX2J5X3BtdGltZXIobGFwaWNfY2FsX3BtMiAtIGxhcGljX2NhbF9wbTEsCisJCQkJCSZkZWx0YSk7CisKKwkvKiBDYWxjdWxhdGUgdGhlIHNjYWxlZCBtYXRoIG11bHRpcGxpY2F0aW9uIGZhY3RvciAqLworCWxhcGljX2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhkZWx0YSwgVElDS19OU0VDICogTEFQSUNfQ0FMX0xPT1BTLAorCQkJCSAgICAgICBsYXBpY19jbG9ja2V2ZW50LnNoaWZ0KTsKKwlsYXBpY19jbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9CisJCWNsb2NrZXZlbnRfZGVsdGEybnMoMHg3RkZGRkYsICZsYXBpY19jbG9ja2V2ZW50KTsKKwlsYXBpY19jbG9ja2V2ZW50Lm1pbl9kZWx0YV9ucyA9CisJCWNsb2NrZXZlbnRfZGVsdGEybnMoMHhGLCAmbGFwaWNfY2xvY2tldmVudCk7CisKKwljYWxpYnJhdGlvbl9yZXN1bHQgPSAoZGVsdGEgKiBBUElDX0RJVklTT1IpIC8gTEFQSUNfQ0FMX0xPT1BTOworCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gZGVsdGEgJWxkXG4iLCBkZWx0YSk7CisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gbXVsdDogJWxkXG4iLCBsYXBpY19jbG9ja2V2ZW50Lm11bHQpOworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIGNhbGlicmF0aW9uIHJlc3VsdDogJXVcbiIsCisJCSAgICBjYWxpYnJhdGlvbl9yZXN1bHQpOworCisJaWYgKGNwdV9oYXNfdHNjKSB7CisJCWRlbHRhID0gKGxvbmcpKGxhcGljX2NhbF90c2MyIC0gbGFwaWNfY2FsX3RzYzEpOworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBDUFUgY2xvY2sgc3BlZWQgaXMgIgorCQkJICAgICIlbGQuJTA0bGQgTUh6LlxuIiwKKwkJCSAgICAoZGVsdGEgLyBMQVBJQ19DQUxfTE9PUFMpIC8gKDEwMDAwMDAgLyBIWiksCisJCQkgICAgKGRlbHRhIC8gTEFQSUNfQ0FMX0xPT1BTKSAlICgxMDAwMDAwIC8gSFopKTsKKwl9CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBob3N0IGJ1cyBjbG9jayBzcGVlZCBpcyAiCisJCSAgICAiJXUuJTA0dSBNSHouXG4iLAorCQkgICAgY2FsaWJyYXRpb25fcmVzdWx0IC8gKDEwMDAwMDAgLyBIWiksCisJCSAgICBjYWxpYnJhdGlvbl9yZXN1bHQgJSAoMTAwMDAwMCAvIEhaKSk7CisKKwkvKgorCSAqIERvIGEgc2FuaXR5IGNoZWNrIG9uIHRoZSBBUElDIGNhbGlicmF0aW9uIHJlc3VsdAorCSAqLworCWlmIChjYWxpYnJhdGlvbl9yZXN1bHQgPCAoMTAwMDAwMCAvIEhaKSkgeworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJBUElDIGZyZXF1ZW5jeSB0b28gc2xvdywgZGlzYWJsaW5nIGFwaWMgdGltZXJcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbGV2dC0+ZmVhdHVyZXMgJj0gfkNMT0NLX0VWVF9GRUFUX0RVTU1ZOworCisJLyoKKwkgKiBQTSB0aW1lciBjYWxpYnJhdGlvbiBmYWlsZWQgb3Igbm90IHR1cm5lZCBvbgorCSAqIHNvIGxldHMgdHJ5IEFQSUMgdGltZXIgYmFzZWQgY2FsaWJyYXRpb24KKwkgKi8KKwlpZiAoIXBtX3JlZmVyZW5jZWQpIHsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIHZlcmlmeSBBUElDIHRpbWVyXG4iKTsKKworCQkvKgorCQkgKiBTZXR1cCB0aGUgYXBpYyB0aW1lciBtYW51YWxseQorCQkgKi8KKwkJbGV2dC0+ZXZlbnRfaGFuZGxlciA9IGxhcGljX2NhbF9oYW5kbGVyOworCQlsYXBpY190aW1lcl9zZXR1cChDTE9DS19FVlRfTU9ERV9QRVJJT0RJQywgbGV2dCk7CisJCWxhcGljX2NhbF9sb29wcyA9IC0xOworCisJCS8qIExldCB0aGUgaW50ZXJydXB0cyBydW4gKi8KKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCXdoaWxlIChsYXBpY19jYWxfbG9vcHMgPD0gTEFQSUNfQ0FMX0xPT1BTKQorCQkJY3B1X3JlbGF4KCk7CisKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCQkvKiBTdG9wIHRoZSBsYXBpYyB0aW1lciAqLworCQlsYXBpY190aW1lcl9zZXR1cChDTE9DS19FVlRfTU9ERV9TSFVURE9XTiwgbGV2dCk7CisKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCS8qIEppZmZpZXMgZGVsdGEgKi8KKwkJZGVsdGFqID0gbGFwaWNfY2FsX2oyIC0gbGFwaWNfY2FsX2oxOworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gamlmZmllcyBkZWx0YSA9ICVsdVxuIiwgZGVsdGFqKTsKKworCQkvKiBDaGVjaywgaWYgdGhlIGppZmZpZXMgcmVzdWx0IGlzIGNvbnNpc3RlbnQgKi8KKwkJaWYgKGRlbHRhaiA+PSBMQVBJQ19DQUxfTE9PUFMtMiAmJiBkZWx0YWogPD0gTEFQSUNfQ0FMX0xPT1BTKzIpCisJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gamlmZmllcyByZXN1bHQgb2tcbiIpOworCQllbHNlCisJCQlsZXZ0LT5mZWF0dXJlcyB8PSBDTE9DS19FVlRfRkVBVF9EVU1NWTsKKwl9IGVsc2UKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJaWYgKGxldnQtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfRFVNTVkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIkFQSUMgdGltZXIgZGlzYWJsZWQgZHVlIHRvIHZlcmlmaWNhdGlvbiBmYWlsdXJlLlxuIik7CisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgYm9vdCBBUElDCisgKgorICogQ2FsaWJyYXRlIGFuZCB2ZXJpZnkgdGhlIHJlc3VsdC4KKyAqLwordm9pZCBfX2luaXQgc2V0dXBfYm9vdF9BUElDX2Nsb2NrKHZvaWQpCit7CisJLyoKKwkgKiBUaGUgbG9jYWwgYXBpYyB0aW1lciBjYW4gYmUgZGlzYWJsZWQgdmlhIHRoZSBrZXJuZWwKKwkgKiBjb21tYW5kbGluZSBvciBmcm9tIHRoZSBDUFUgZGV0ZWN0aW9uIGNvZGUuIFJlZ2lzdGVyIHRoZSBsYXBpYworCSAqIHRpbWVyIGFzIGEgZHVtbXkgY2xvY2sgZXZlbnQgc291cmNlIG9uIFNNUCBzeXN0ZW1zLCBzbyB0aGUKKwkgKiBicm9hZGNhc3QgbWVjaGFuaXNtIGlzIHVzZWQuIE9uIFVQIHN5c3RlbXMgc2ltcGx5IGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAoZGlzYWJsZV9hcGljX3RpbWVyKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyBBUElDIHRpbWVyXG4iKTsKKwkJLyogTm8gYnJvYWRjYXN0IG9uIFVQICEgKi8KKwkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKSB7CisJCQlsYXBpY19jbG9ja2V2ZW50Lm11bHQgPSAxOworCQkJc2V0dXBfQVBJQ190aW1lcigpOworCQl9CisJCXJldHVybjsKKwl9CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJVc2luZyBsb2NhbCBBUElDIHRpbWVyIGludGVycnVwdHMuXG4iCisJCSAgICAiY2FsaWJyYXRpbmcgQVBJQyB0aW1lciAuLi5cbiIpOworCisJaWYgKGNhbGlicmF0ZV9BUElDX2Nsb2NrKCkpIHsKKwkJLyogTm8gYnJvYWRjYXN0IG9uIFVQICEgKi8KKwkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKQorCQkJc2V0dXBfQVBJQ190aW1lcigpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiBubWlfd2F0Y2hkb2cgaXMgc2V0IHRvIElPX0FQSUMsIHdlIG5lZWQgdGhlCisJICogUElUL0hQRVQgZ29pbmcuICBPdGhlcndpc2UgcmVnaXN0ZXIgbGFwaWMgYXMgYSBkdW1teQorCSAqIGRldmljZS4KKwkgKi8KKwlpZiAobm1pX3dhdGNoZG9nICE9IE5NSV9JT19BUElDKQorCQlsYXBpY19jbG9ja2V2ZW50LmZlYXR1cmVzICY9IH5DTE9DS19FVlRfRkVBVF9EVU1NWTsKKwllbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFQSUMgdGltZXIgcmVnaXN0ZXJlZCBhcyBkdW1teSwiCisJCQkiIGR1ZSB0byBubWlfd2F0Y2hkb2c9JWQhXG4iLCBubWlfd2F0Y2hkb2cpOworCisJLyogU2V0dXAgdGhlIGxhcGljIG9yIHJlcXVlc3QgdGhlIGJyb2FkY2FzdCAqLworCXNldHVwX0FQSUNfdGltZXIoKTsKK30KKwordm9pZCBfX2NwdWluaXQgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sodm9pZCkKK3sKKwlzZXR1cF9BUElDX3RpbWVyKCk7Cit9CisKKy8qCisgKiBUaGUgZ3V0cyBvZiB0aGUgYXBpYyB0aW1lciBpbnRlcnJ1cHQKKyAqLworc3RhdGljIHZvaWQgbG9jYWxfYXBpY190aW1lcl9pbnRlcnJ1cHQodm9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZwZXJfY3B1KGxhcGljX2V2ZW50cywgY3B1KTsKKworCS8qCisJICogTm9ybWFsbHkgd2Ugc2hvdWxkIG5vdCBiZSBoZXJlIHRpbGwgTEFQSUMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYnV0CisJICogaW4gc29tZSBjYXNlcyBsaWtlIGtkdW1wLCBpdHMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBhIHBlbmRpbmcgTEFQSUMKKwkgKiB0aW1lciBpbnRlcnJ1cHQgZnJvbSBwcmV2aW91cyBrZXJuZWwncyBjb250ZXh0IGFuZCBpcyBkZWxpdmVyZWQgaW4KKwkgKiBuZXcga2VybmVsIHRoZSBtb21lbnQgaW50ZXJydXB0cyBhcmUgZW5hYmxlZC4KKwkgKgorCSAqIEludGVycnVwdHMgYXJlIGVuYWJsZWQgZWFybHkgYW5kIExBUElDIGlzIHNldHVwIG11Y2ggbGF0ZXIsIGhlbmNlCisJICogaXRzIHBvc3NpYmxlIHRoYXQgd2hlbiB3ZSBnZXQgaGVyZSBldnQtPmV2ZW50X2hhbmRsZXIgaXMgTlVMTC4KKwkgKiBDaGVjayBmb3IgZXZlbnRfaGFuZGxlciBiZWluZyBOVUxMIGFuZCBkaXNjYXJkIHRoZSBpbnRlcnJ1cHQgYXMKKwkgKiBzcHVyaW91cy4KKwkgKi8KKwlpZiAoIWV2dC0+ZXZlbnRfaGFuZGxlcikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiU3B1cmlvdXMgTEFQSUMgdGltZXIgaW50ZXJydXB0IG9uIGNwdSAlZFxuIiwgY3B1KTsKKwkJLyogU3dpdGNoIGl0IG9mZiAqLworCQlsYXBpY190aW1lcl9zZXR1cChDTE9DS19FVlRfTU9ERV9TSFVURE9XTiwgZXZ0KTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogdGhlIE5NSSBkZWFkbG9jay1kZXRlY3RvciB1c2VzIHRoaXMuCisJICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWFkZF9wZGEoYXBpY190aW1lcl9pcnFzLCAxKTsKKyNlbHNlCisJcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5hcGljX3RpbWVyX2lycXMrKzsKKyNlbmRpZgorCisJZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7Cit9CisKKy8qCisgKiBMb2NhbCBBUElDIHRpbWVyIGludGVycnVwdC4gVGhpcyBpcyB0aGUgbW9zdCBuYXR1cmFsIHdheSBmb3IgZG9pbmcKKyAqIGxvY2FsIGludGVycnVwdHMsIGJ1dCBsb2NhbCB0aW1lciBpbnRlcnJ1cHRzIGNhbiBiZSBlbXVsYXRlZCBieQorICogYnJvYWRjYXN0IGludGVycnVwdHMgdG9vLiBbaW4gY2FzZSB0aGUgaHcgZG9lc24ndCBzdXBwb3J0IEFQSUMgdGltZXJzXQorICoKKyAqIFsgaWYgYSBzaW5nbGUtQ1BVIHN5c3RlbSBydW5zIGFuIFNNUCBrZXJuZWwgdGhlbiB3ZSBjYWxsIHRoZSBsb2NhbAorICogICBpbnRlcnJ1cHQgYXMgd2VsbC4gVGh1cyB3ZSBjYW5ub3QgaW5saW5lIHRoZSBsb2NhbCBpcnEgLi4uIF0KKyAqLwordm9pZCBzbXBfYXBpY190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOworCisJLyoKKwkgKiBOT1RFISBXZSdkIGJldHRlciBBQ0sgdGhlIGlycSBpbW1lZGlhdGVseSwKKwkgKiBiZWNhdXNlIHRpbWVyIGhhbmRsaW5nIGNhbiBiZSBzbG93LgorCSAqLworCWFja19BUElDX2lycSgpOworCS8qCisJICogdXBkYXRlX3Byb2Nlc3NfdGltZXMoKSBleHBlY3RzIHVzIHRvIGhhdmUgZG9uZSBpcnFfZW50ZXIoKS4KKwkgKiBCZXNpZGVzLCBpZiB3ZSBkb24ndCB0aW1lciBpbnRlcnJ1cHRzIGlnbm9yZSB0aGUgZ2xvYmFsCisJICogaW50ZXJydXB0IGxvY2ssIHdoaWNoIGlzIHRoZSBXcm9uZ1RoaW5nICh0bSkgdG8gZG8uCisJICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWV4aXRfaWRsZSgpOworI2VuZGlmCisJaXJxX2VudGVyKCk7CisJbG9jYWxfYXBpY190aW1lcl9pbnRlcnJ1cHQoKTsKKwlpcnFfZXhpdCgpOworCisJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKK30KKworaW50IHNldHVwX3Byb2ZpbGluZ190aW1lcih1bnNpZ25lZCBpbnQgbXVsdGlwbGllcikKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIExvY2FsIEFQSUMgc3RhcnQgYW5kIHNodXRkb3duCisgKi8KKworLyoqCisgKiBjbGVhcl9sb2NhbF9BUElDIC0gc2h1dGRvd24gdGhlIGxvY2FsIEFQSUMKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCwgd2hlbiBhIENQVSBpcyBkaXNhYmxlZCBhbmQgYmVmb3JlIHJlYm9vdGluZywgc28gdGhlIHN0YXRlIG9mCisgKiB0aGUgbG9jYWwgQVBJQyBoYXMgbm8gZGFuZ2xpbmcgbGVmdG92ZXJzLiBBbHNvIHVzZWQgdG8gY2xlYW5vdXQgYW55IEJJT1MKKyAqIGxlZnRvdmVycyBkdXJpbmcgYm9vdC4KKyAqLwordm9pZCBjbGVhcl9sb2NhbF9BUElDKHZvaWQpCit7CisJaW50IG1heGx2dDsKKwl1MzIgdjsKKworCS8qIEFQSUMgaGFzbid0IGJlZW4gbWFwcGVkIHlldCAqLworCWlmICghYXBpY19waHlzKQorCQlyZXR1cm47CisKKwltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CisJLyoKKwkgKiBNYXNraW5nIGFuIExWVCBlbnRyeSBjYW4gdHJpZ2dlciBhIGxvY2FsIEFQSUMgZXJyb3IKKwkgKiBpZiB0aGUgdmVjdG9yIGlzIHplcm8uIE1hc2sgTFZURVJSIGZpcnN0IHRvIHByZXZlbnQgdGhpcy4KKwkgKi8KKwlpZiAobWF4bHZ0ID49IDMpIHsKKwkJdiA9IEVSUk9SX0FQSUNfVkVDVE9SOyAvKiBhbnkgbm9uLXplcm8gdmVjdG9yIHdpbGwgZG8gKi8KKwkJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CisJfQorCS8qCisJICogQ2FyZWZ1bDogd2UgaGF2ZSB0byBzZXQgbWFza3Mgb25seSBmaXJzdCB0byBkZWFzc2VydAorCSAqIGFueSBsZXZlbC10cmlnZ2VyZWQgc291cmNlcy4KKwkgKi8KKwl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7CisJYXBpY193cml0ZShBUElDX0xWVFQsIHYgfCBBUElDX0xWVF9NQVNLRUQpOworCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CisJdiA9IGFwaWNfcmVhZChBUElDX0xWVDEpOworCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKKwlpZiAobWF4bHZ0ID49IDQpIHsKKwkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKKwkJYXBpY193cml0ZShBUElDX0xWVFBDLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKKwl9CisKKwkvKiBsZXRzIG5vdCB0b3VjaCB0aGlzIGlmIHdlIGRpZG4ndCBmcm9iIGl0ICovCisjaWYgZGVmaW5lZChDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwpIHx8IGRlZmluZWQoWDg2X01DRV9JTlRFTCkKKwlpZiAobWF4bHZ0ID49IDUpIHsKKwkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFRITVIpOworCQlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CisJfQorI2VuZGlmCisJLyoKKwkgKiBDbGVhbiBBUElDIHN0YXRlIGZvciBvdGhlciBPU3M6CisJICovCisJYXBpY193cml0ZShBUElDX0xWVFQsIEFQSUNfTFZUX01BU0tFRCk7CisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCk7CisJYXBpY193cml0ZShBUElDX0xWVDEsIEFQSUNfTFZUX01BU0tFRCk7CisJaWYgKG1heGx2dCA+PSAzKQorCQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCBBUElDX0xWVF9NQVNLRUQpOworCWlmIChtYXhsdnQgPj0gNCkKKwkJYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0xWVF9NQVNLRUQpOworCisJLyogSW50ZWdyYXRlZCBBUElDICghODI0ODlEWCkgPyAqLworCWlmIChsYXBpY19pc19pbnRlZ3JhdGVkKCkpIHsKKwkJaWYgKG1heGx2dCA+IDMpCisJCQkvKiBDbGVhciBFU1IgZHVlIHRvIFBlbnRpdW0gZXJyYXRhIDNBUCBhbmQgMTFBUCAqLworCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJCWFwaWNfcmVhZChBUElDX0VTUik7CisJfQorfQorCisvKioKKyAqIGRpc2FibGVfbG9jYWxfQVBJQyAtIGNsZWFyIGFuZCBkaXNhYmxlIHRoZSBsb2NhbCBBUElDCisgKi8KK3ZvaWQgZGlzYWJsZV9sb2NhbF9BUElDKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJY2xlYXJfbG9jYWxfQVBJQygpOworCisJLyoKKwkgKiBEaXNhYmxlIEFQSUMgKGltcGxpZXMgY2xlYXJpbmcgb2YgcmVnaXN0ZXJzCisJICogZm9yIDgyNDg5RFghKS4KKwkgKi8KKwl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOworCXZhbHVlICY9IH5BUElDX1NQSVZfQVBJQ19FTkFCTEVEOworCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyoKKwkgKiBXaGVuIExBUElDIHdhcyBkaXNhYmxlZCBieSB0aGUgQklPUyBhbmQgZW5hYmxlZCBieSB0aGUga2VybmVsLAorCSAqIHJlc3RvcmUgdGhlIGRpc2FibGVkIHN0YXRlLgorCSAqLworCWlmIChlbmFibGVkX3ZpYV9hcGljYmFzZSkgeworCQl1bnNpZ25lZCBpbnQgbCwgaDsKKworCQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7CisJCWwgJj0gfk1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRTsKKwkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOworCX0KKyNlbmRpZgorfQorCisvKgorICogSWYgTGludXggZW5hYmxlZCB0aGUgTEFQSUMgYWdhaW5zdCB0aGUgQklPUyBkZWZhdWx0IGRpc2FibGUgaXQgZG93biBiZWZvcmUKKyAqIHJlLWVudGVyaW5nIHRoZSBCSU9TIG9uIHNodXRkb3duLiAgT3RoZXJ3aXNlIHRoZSBCSU9TIG1heSBnZXQgY29uZnVzZWQgYW5kCisgKiBub3QgcG93ZXItb2ZmLiAgQWRkaXRpb25hbGx5IGNsZWFyIGFsbCBMVlQgZW50cmllcyBiZWZvcmUgZGlzYWJsZV9sb2NhbF9BUElDCisgKiBmb3IgdGhlIGNhc2Ugd2hlcmUgTGludXggZGlkbid0IGVuYWJsZSB0aGUgTEFQSUMuCisgKi8KK3ZvaWQgbGFwaWNfc2h1dGRvd24odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFjcHVfaGFzX2FwaWMpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwlpZiAoIWVuYWJsZWRfdmlhX2FwaWNiYXNlKQorCQljbGVhcl9sb2NhbF9BUElDKCk7CisJZWxzZQorI2VuZGlmCisJCWRpc2FibGVfbG9jYWxfQVBJQygpOworCisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRvIHZlcmlmeSB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgYSByZWFsIGxvY2FsIEFQSUMuCisgKiBDaGVjayB0aGVzZSBhZ2FpbnN0IHlvdXIgYm9hcmQgaWYgdGhlIENQVXMgYXJlbid0IGdldHRpbmcKKyAqIHN0YXJ0ZWQgZm9yIG5vIGFwcGFyZW50IHJlYXNvbi4KKyAqLworaW50IF9faW5pdCB2ZXJpZnlfbG9jYWxfQVBJQyh2b2lkKQoreworCXVuc2lnbmVkIGludCByZWcwLCByZWcxOworCisJLyoKKwkgKiBUaGUgdmVyc2lvbiByZWdpc3RlciBpcyByZWFkLW9ubHkgaW4gYSByZWFsIEFQSUMuCisJICovCisJcmVnMCA9IGFwaWNfcmVhZChBUElDX0xWUik7CisJYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgVkVSU0lPTjogJXhcbiIsIHJlZzApOworCWFwaWNfd3JpdGUoQVBJQ19MVlIsIHJlZzAgXiBBUElDX0xWUl9NQVNLKTsKKwlyZWcxID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKKwlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBWRVJTSU9OOiAleFxuIiwgcmVnMSk7CisKKwkvKgorCSAqIFRoZSB0d28gdmVyc2lvbiByZWFkcyBhYm92ZSBzaG91bGQgcHJpbnQgdGhlIHNhbWUKKwkgKiBudW1iZXJzLiAgSWYgdGhlIHNlY29uZCBvbmUgaXMgZGlmZmVyZW50LCB0aGVuIHdlCisJICogcG9rZSBhdCBhIG5vbi1BUElDLgorCSAqLworCWlmIChyZWcxICE9IHJlZzApCisJCXJldHVybiAwOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgdmVyc2lvbiBsb29rcyByZWFzb25hYmx5LgorCSAqLworCXJlZzEgPSBHRVRfQVBJQ19WRVJTSU9OKHJlZzApOworCWlmIChyZWcxID09IDB4MDAgfHwgcmVnMSA9PSAweGZmKQorCQlyZXR1cm4gMDsKKwlyZWcxID0gbGFwaWNfZ2V0X21heGx2dCgpOworCWlmIChyZWcxIDwgMHgwMiB8fCByZWcxID09IDB4ZmYpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBUaGUgSUQgcmVnaXN0ZXIgaXMgcmVhZC93cml0ZSBpbiBhIHJlYWwgQVBJQy4KKwkgKi8KKwlyZWcwID0gYXBpY19yZWFkKEFQSUNfSUQpOworCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIElEOiAleFxuIiwgcmVnMCk7CisJYXBpY193cml0ZShBUElDX0lELCByZWcwIF4gQVBJQ19JRF9NQVNLKTsKKwlyZWcxID0gYXBpY19yZWFkKEFQSUNfSUQpOworCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIElEOiAleFxuIiwgcmVnMSk7CisJYXBpY193cml0ZShBUElDX0lELCByZWcwKTsKKwlpZiAocmVnMSAhPSAocmVnMCBeIEFQSUNfSURfTUFTSykpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBUaGUgbmV4dCB0d28gYXJlIGp1c3QgdG8gc2VlIGlmIHdlIGhhdmUgc2FuZSB2YWx1ZXMuCisJICogVGhleSdyZSBvbmx5IHJlYWxseSByZWxldmFudCBpZiB3ZSdyZSBpbiBWaXJ0dWFsIFdpcmUKKwkgKiBjb21wYXRpYmlsaXR5IG1vZGUsIGJ1dCBtb3N0IGJveGVzIGFyZSBhbnltb3JlLgorCSAqLworCXJlZzAgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKKwlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBMVlQwOiAleFxuIiwgcmVnMCk7CisJcmVnMSA9IGFwaWNfcmVhZChBUElDX0xWVDEpOworCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIExWVDE6ICV4XG4iLCByZWcxKTsKKworCXJldHVybiAxOworfQorCisvKioKKyAqIHN5bmNfQXJiX0lEcyAtIHN5bmNocm9uaXplIEFQSUMgYnVzIGFyYml0cmF0aW9uIElEcworICovCit2b2lkIF9faW5pdCBzeW5jX0FyYl9JRHModm9pZCkKK3sKKwkvKgorCSAqIFVuc3VwcG9ydGVkIG9uIFA0IC0gc2VlIEludGVsIERldi4gTWFudWFsIFZvbC4gMywgQ2guIDguNi4xIEFuZCBub3QKKwkgKiBuZWVkZWQgb24gQU1ELgorCSAqLworCWlmIChtb2Rlcm5fYXBpYygpIHx8IGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBXYWl0IGZvciBpZGxlLgorCSAqLworCWFwaWNfd2FpdF9pY3JfaWRsZSgpOworCisJYXBpY19wcmludGsoQVBJQ19ERUJVRywgIlN5bmNocm9uaXppbmcgQXJiIElEcy5cbiIpOworCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIEFQSUNfREVTVF9BTExJTkMgfAorCQkJQVBJQ19JTlRfTEVWRUxUUklHIHwgQVBJQ19ETV9JTklUKTsKK30KKworLyoKKyAqIEFuIGluaXRpYWwgc2V0dXAgb2YgdGhlIHZpcnR1YWwgd2lyZSBtb2RlLgorICovCit2b2lkIF9faW5pdCBpbml0X2JzcF9BUElDKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJLyoKKwkgKiBEb24ndCBkbyB0aGUgc2V0dXAgbm93IGlmIHdlIGhhdmUgYSBTTVAgQklPUyBhcyB0aGUKKwkgKiB0aHJvdWdoLUkvTy1BUElDIHZpcnR1YWwgd2lyZSBtb2RlIG1pZ2h0IGJlIGFjdGl2ZS4KKwkgKi8KKwlpZiAoc21wX2ZvdW5kX2NvbmZpZyB8fCAhY3B1X2hhc19hcGljKQorCQlyZXR1cm47CisKKwkvKgorCSAqIERvIG5vdCB0cnVzdCB0aGUgbG9jYWwgQVBJQyBiZWluZyBlbXB0eSBhdCBib290dXAuCisJICovCisJY2xlYXJfbG9jYWxfQVBJQygpOworCisJLyoKKwkgKiBFbmFibGUgQVBJQy4KKwkgKi8KKwl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOworCXZhbHVlICY9IH5BUElDX1ZFQ1RPUl9NQVNLOworCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyogVGhpcyBiaXQgaXMgcmVzZXJ2ZWQgb24gUDQvWGVvbiBhbmQgc2hvdWxkIGJlIGNsZWFyZWQgKi8KKwlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSAmJgorCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMTUpKQorCQl2YWx1ZSAmPSB+QVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOworCWVsc2UKKyNlbmRpZgorCQl2YWx1ZSB8PSBBUElDX1NQSVZfRk9DVVNfRElTQUJMRUQ7CisJdmFsdWUgfD0gU1BVUklPVVNfQVBJQ19WRUNUT1I7CisJYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKKworCS8qCisJICogU2V0IHVwIHRoZSB2aXJ0dWFsIHdpcmUgbW9kZS4KKwkgKi8KKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9FWFRJTlQpOworCXZhbHVlID0gQVBJQ19ETV9OTUk7CisJaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCQkvKiA4MjQ4OURYICovCisJCXZhbHVlIHw9IEFQSUNfTFZUX0xFVkVMX1RSSUdHRVI7CisJYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgX19jcHVpbml0IGxhcGljX3NldHVwX2Vzcih2b2lkKQoreworCXVuc2lnbmVkIGludCBvbGR2YWx1ZSwgdmFsdWUsIG1heGx2dDsKKworCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk5vIEVTUiBmb3IgODI0ODlEWC5cbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGVzcl9kaXNhYmxlKSB7CisJCS8qCisJCSAqIFNvbWV0aGluZyB1bnRyYWNlYWJsZSBpcyBjcmVhdGluZyBiYWQgaW50ZXJydXB0cyBvbgorCQkgKiBzZWNvbmRhcnkgcXVhZHMgLi4uIGZvciB0aGUgbW9tZW50LCBqdXN0IGxlYXZlIHRoZQorCQkgKiBFU1IgZGlzYWJsZWQgLSB3ZSBjYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgd2l0aCB0aGUKKwkJICogZXJyb3JzIGFueXdheSAtIG1ibGlnaAorCQkgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiTGVhdmluZyBFU1IgZGlzYWJsZWQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKKwlpZiAobWF4bHZ0ID4gMykJCS8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8KKwkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJb2xkdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19FU1IpOworCisJLyogZW5hYmxlcyBzZW5kaW5nIGVycm9ycyAqLworCXZhbHVlID0gRVJST1JfQVBJQ19WRUNUT1I7CisJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdmFsdWUpOworCisJLyoKKwkgKiBzcGVjIHNheXMgY2xlYXIgZXJyb3JzIGFmdGVyIGVuYWJsaW5nIHZlY3Rvci4KKwkgKi8KKwlpZiAobWF4bHZ0ID4gMykKKwkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19FU1IpOworCWlmICh2YWx1ZSAhPSBvbGR2YWx1ZSkKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiRVNSIHZhbHVlIGJlZm9yZSBlbmFibGluZyAiCisJCQkidmVjdG9yOiAweCUwOHggIGFmdGVyOiAweCUwOHhcbiIsCisJCQlvbGR2YWx1ZSwgdmFsdWUpOworfQorCisKKy8qKgorICogc2V0dXBfbG9jYWxfQVBJQyAtIHNldHVwIHRoZSBsb2NhbCBBUElDCisgKi8KK3ZvaWQgX19jcHVpbml0IHNldHVwX2xvY2FsX0FQSUModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJaW50IGksIGo7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyogUG91bmQgdGhlIEVTUiByZWFsbHkgaGFyZCBvdmVyIHRoZSBoZWFkIHdpdGggYSBiaWcgaGFtbWVyIC0gbWJsaWdoICovCisJaWYgKGxhcGljX2lzX2ludGVncmF0ZWQoKSAmJiBlc3JfZGlzYWJsZSkgeworCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKKwkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKKwl9CisjZW5kaWYKKworCXByZWVtcHRfZGlzYWJsZSgpOworCisJLyoKKwkgKiBEb3VibGUtY2hlY2sgd2hldGhlciB0aGlzIEFQSUMgaXMgcmVhbGx5IHJlZ2lzdGVyZWQuCisJICogVGhpcyBpcyBtZWFuaW5nbGVzcyBpbiBjbHVzdGVyZWQgYXBpYyBtb2RlLCBzbyB3ZSBza2lwIGl0LgorCSAqLworCWlmICghYXBpY19pZF9yZWdpc3RlcmVkKCkpCisJCUJVRygpOworCisJLyoKKwkgKiBJbnRlbCByZWNvbW1lbmRzIHRvIHNldCBERlIsIExEUiBhbmQgVFBSIGJlZm9yZSBlbmFibGluZworCSAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCisJICogZG9jdW1lbnQgbnVtYmVyIDI5MjExNikuICBTbyBoZXJlIGl0IGdvZXMuLi4KKwkgKi8KKwlpbml0X2FwaWNfbGRyKCk7CisKKwkvKgorCSAqIFNldCBUYXNrIFByaW9yaXR5IHRvICdhY2NlcHQgYWxsJy4gV2UgbmV2ZXIgY2hhbmdlIHRoaXMKKwkgKiBsYXRlciBvbi4KKwkgKi8KKwl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOworCXZhbHVlICY9IH5BUElDX1RQUklfTUFTSzsKKwlhcGljX3dyaXRlKEFQSUNfVEFTS1BSSSwgdmFsdWUpOworCisJLyoKKwkgKiBBZnRlciBhIGNyYXNoLCB3ZSBubyBsb25nZXIgc2VydmljZSB0aGUgaW50ZXJydXB0cyBhbmQgYSBwZW5kaW5nCisJICogaW50ZXJydXB0IGZyb20gcHJldmlvdXMga2VybmVsIG1pZ2h0IHN0aWxsIGhhdmUgSVNSIGJpdCBzZXQuCisJICoKKwkgKiBNb3N0IHByb2JhYmx5IGJ5IG5vdyBDUFUgaGFzIHNlcnZpY2VkIHRoYXQgcGVuZGluZyBpbnRlcnJ1cHQgYW5kCisJICogaXQgbWlnaHQgbm90IGhhdmUgZG9uZSB0aGUgYWNrX0FQSUNfaXJxKCkgYmVjYXVzZSBpdCB0aG91Z2h0LAorCSAqIGludGVycnVwdCBjYW1lIGZyb20gaTgyNTkgYXMgRXh0SW50LiBMQVBJQyBkaWQgbm90IGdldCBFT0kgc28gaXQKKwkgKiBkb2VzIG5vdCBjbGVhciB0aGUgSVNSIGJpdCBhbmQgY3B1IHRoaW5rcyBpdCBoYXMgYWxyZWFkeSBzZXJpdmNlZAorCSAqIHRoZSBpbnRlcnJ1cHQuIEhlbmNlIGEgdmVjdG9yIG1pZ2h0IGdldCBsb2NrZWQuIEl0IHdhcyBub3RpY2VkCisJICogZm9yIHRpbWVyIGlycSAodmVjdG9yIDB4MzEpLiBJc3N1ZSBhbiBleHRyYSBFT0kgdG8gY2xlYXIgSVNSLgorCSAqLworCWZvciAoaSA9IEFQSUNfSVNSX05SIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19JU1IgKyBpKjB4MTApOworCQlmb3IgKGogPSAzMTsgaiA+PSAwOyBqLS0pIHsKKwkJCWlmICh2YWx1ZSAmICgxPDxqKSkKKwkJCQlhY2tfQVBJQ19pcnEoKTsKKwkJfQorCX0KKworCS8qCisJICogTm93IHRoYXQgd2UgYXJlIGFsbCBzZXQgdXAsIGVuYWJsZSB0aGUgQVBJQworCSAqLworCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7CisJdmFsdWUgJj0gfkFQSUNfVkVDVE9SX01BU0s7CisJLyoKKwkgKiBFbmFibGUgQVBJQworCSAqLworCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyoKKwkgKiBTb21lIHVua25vd24gSW50ZWwgSU8vQVBJQyAob3IgQVBJQykgZXJyYXRhIGlzIGJpdGluZyB1cyB3aXRoCisJICogY2VydGFpbiBuZXR3b3JraW5nIGNhcmRzLiBJZiBoaWdoIGZyZXF1ZW5jeSBpbnRlcnJ1cHRzIGFyZQorCSAqIGhhcHBlbmluZyBvbiBhIHBhcnRpY3VsYXIgSU9BUElDIHBpbiwgcGx1cyB0aGUgSU9BUElDIHJvdXRpbmcKKwkgKiBlbnRyeSBpcyBtYXNrZWQvdW5tYXNrZWQgYXQgYSBoaWdoIHJhdGUgYXMgd2VsbCB0aGVuIHNvb25lciBvcgorCSAqIGxhdGVyIElPQVBJQyBsaW5lIGdldHMgJ3N0dWNrJywgbm8gbW9yZSBpbnRlcnJ1cHRzIGFyZSByZWNlaXZlZAorCSAqIGZyb20gdGhlIGRldmljZS4gSWYgZm9jdXMgQ1BVIGlzIGRpc2FibGVkIHRoZW4gdGhlIGhhbmcgZ29lcworCSAqIGF3YXksIG9oIHdlbGwgOi0oCisJICoKKwkgKiBbIFRoaXMgYnVnIGNhbiBiZSByZXByb2R1Y2VkIGVhc2lseSB3aXRoIGEgbGV2ZWwtdHJpZ2dlcmVkCisJICogICBQQ0kgTmUyMDAwIG5ldHdvcmtpbmcgY2FyZHMgYW5kIFBJSS9QSUlJIHByb2Nlc3NvcnMsIGR1YWwKKwkgKiAgIEJYIGNoaXBzZXQuIF0KKwkgKi8KKwkvKgorCSAqIEFjdHVhbGx5IGRpc2FibGluZyB0aGUgZm9jdXMgQ1BVIGNoZWNrIGp1c3QgbWFrZXMgdGhlIGhhbmcgbGVzcworCSAqIGZyZXF1ZW50IGFzIGl0IG1ha2VzIHRoZSBpbnRlcnJ1cHQgZGlzdHJpYnV0b24gbW9kZWwgYmUgbW9yZQorCSAqIGxpa2UgTFJVIHRoYW4gTVJVICh0aGUgc2hvcnQtdGVybSBsb2FkIGlzIG1vcmUgZXZlbiBhY3Jvc3MgQ1BVcykuCisJICogU2VlIGFsc28gdGhlIGNvbW1lbnQgaW4gZW5kX2xldmVsX2lvYXBpY19pcnEoKS4gIC0tbWFjcm8KKwkgKi8KKworCS8qCisJICogLSBlbmFibGUgZm9jdXMgcHJvY2Vzc29yIChiaXQ9PTApCisJICogLSA2NGJpdCBtb2RlIGFsd2F5cyB1c2UgcHJvY2Vzc29yIGZvY3VzCisJICogICBzbyBubyBuZWVkIHRvIHNldCBpdAorCSAqLworCXZhbHVlICY9IH5BUElDX1NQSVZfRk9DVVNfRElTQUJMRUQ7CisjZW5kaWYKKworCS8qCisJICogU2V0IHNwdXJpb3VzIElSUSB2ZWN0b3IKKwkgKi8KKwl2YWx1ZSB8PSBTUFVSSU9VU19BUElDX1ZFQ1RPUjsKKwlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOworCisJLyoKKwkgKiBTZXQgdXAgTFZUMCwgTFZUMToKKwkgKgorCSAqIHNldCB1cCB0aHJvdWdoLWxvY2FsLUFQSUMgb24gdGhlIEJQJ3MgTElOVDAuIFRoaXMgaXMgbm90CisJICogc3RyaWN0bHkgbmVjZXNzYXJ5IGluIHB1cmUgc3ltbWV0cmljLUlPIG1vZGUsIGJ1dCBzb21ldGltZXMKKwkgKiB3ZSBkZWxlZ2F0ZSBpbnRlcnJ1cHRzIHRvIHRoZSA4MjU5QS4KKwkgKi8KKwkvKgorCSAqIFRPRE86IHNldCB1cCB0aHJvdWdoLWxvY2FsLUFQSUMgZnJvbSB0aHJvdWdoLUkvTy1BUElDPyAtLW1hY3JvCisJICovCisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQwKSAmIEFQSUNfTFZUX01BU0tFRDsKKwlpZiAoIXNtcF9wcm9jZXNzb3JfaWQoKSAmJiAocGljX21vZGUgfHwgIXZhbHVlKSkgeworCQl2YWx1ZSA9IEFQSUNfRE1fRVhUSU5UOworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJlbmFibGVkIEV4dElOVCBvbiBDUFUjJWRcbiIsCisJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl9IGVsc2UgeworCQl2YWx1ZSA9IEFQSUNfRE1fRVhUSU5UIHwgQVBJQ19MVlRfTUFTS0VEOworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJtYXNrZWQgRXh0SU5UIG9uIENQVSMlZFxuIiwKKwkJCQlzbXBfcHJvY2Vzc29yX2lkKCkpOworCX0KKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdmFsdWUpOworCisJLyoKKwkgKiBvbmx5IHRoZSBCUCBzaG91bGQgc2VlIHRoZSBMSU5UMSBOTUkgc2lnbmFsLCBvYnZpb3VzbHkuCisJICovCisJaWYgKCFzbXBfcHJvY2Vzc29yX2lkKCkpCisJCXZhbHVlID0gQVBJQ19ETV9OTUk7CisJZWxzZQorCQl2YWx1ZSA9IEFQSUNfRE1fTk1JIHwgQVBJQ19MVlRfTUFTS0VEOworCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQkJLyogODI0ODlEWCAqLworCQl2YWx1ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOworCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7CisKKwlwcmVlbXB0X2VuYWJsZSgpOworfQorCit2b2lkIF9fY3B1aW5pdCBlbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKQoreworCWxhcGljX3NldHVwX2VzcigpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXsKKwkJdW5zaWduZWQgaW50IHZhbHVlOworCQkvKiBEaXNhYmxlIHRoZSBsb2NhbCBhcGljIHRpbWVyICovCisJCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7CisJCXZhbHVlIHw9IChBUElDX0xWVF9NQVNLRUQgfCBMT0NBTF9USU1FUl9WRUNUT1IpOworCQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgdmFsdWUpOworCX0KKyNlbmRpZgorCisJc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2coTlVMTCk7CisJYXBpY19wbV9hY3RpdmF0ZSgpOworfQorCisjaWZkZWYgSEFWRV9YMkFQSUMKK3ZvaWQgY2hlY2tfeDJhcGljKHZvaWQpCit7CisJaW50IG1zciwgbXNyMjsKKworCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IsIG1zcjIpOworCisJaWYgKG1zciAmIFgyQVBJQ19FTkFCTEUpIHsKKwkJcHJpbnRrKCJ4MmFwaWMgZW5hYmxlZCBieSBCSU9TLCBzd2l0Y2hpbmcgdG8geDJhcGljIG9wc1xuIik7CisJCXgyYXBpY19wcmVlbmFibGVkID0geDJhcGljID0gMTsKKwkJYXBpY19vcHMgPSAmeDJhcGljX29wczsKKwl9Cit9CisKK3ZvaWQgZW5hYmxlX3gyYXBpYyh2b2lkKQoreworCWludCBtc3IsIG1zcjI7CisKKwlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyLCBtc3IyKTsKKwlpZiAoIShtc3IgJiBYMkFQSUNfRU5BQkxFKSkgeworCQlwcmludGsoIkVuYWJsaW5nIHgyYXBpY1xuIik7CisJCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IgfCBYMkFQSUNfRU5BQkxFLCAwKTsKKwl9Cit9CisKK3ZvaWQgZW5hYmxlX0lSX3gyYXBpYyh2b2lkKQoreworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFjcHVfaGFzX3gyYXBpYykKKwkJcmV0dXJuOworCisJaWYgKCF4MmFwaWNfcHJlZW5hYmxlZCAmJiBkaXNhYmxlX3gyYXBpYykgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiU2tpcHBlZCBlbmFibGluZyB4MmFwaWMgYW5kIEludGVycnVwdC1yZW1hcHBpbmcgIgorCQkgICAgICAgImJlY2F1c2Ugb2Ygbm94MmFwaWNcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHgyYXBpY19wcmVlbmFibGVkICYmIGRpc2FibGVfeDJhcGljKQorCQlwYW5pYygiQmlvcyBhbHJlYWR5IGVuYWJsZWQgeDJhcGljLCBjYW4ndCBlbmZvcmNlIG5veDJhcGljIik7CisKKwlpZiAoIXgyYXBpY19wcmVlbmFibGVkICYmIHNraXBfaW9hcGljX3NldHVwKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJTa2lwcGVkIGVuYWJsaW5nIHgyYXBpYyBhbmQgSW50ZXJydXB0LXJlbWFwcGluZyAiCisJCSAgICAgICAiYmVjYXVzZSBvZiBza2lwcGluZyBpby1hcGljIHNldHVwXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IGRtYXJfdGFibGVfaW5pdCgpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgImRtYXJfdGFibGVfaW5pdCgpIGZhaWxlZCB3aXRoICVkOlxuIiwgcmV0KTsKKworCQlpZiAoeDJhcGljX3ByZWVuYWJsZWQpCisJCQlwYW5pYygieDJhcGljIGVuYWJsZWQgYnkgYmlvcy4gQnV0IElSIGVuYWJsaW5nIGZhaWxlZCIpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgIk5vdCBlbmFibGluZyB4MmFwaWMsSW50ci1yZW1hcHBpbmdcbiIpOworCQlyZXR1cm47CisJfQorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCW1hc2tfODI1OUEoKTsKKworCXJldCA9IHNhdmVfbWFza19JT19BUElDX3NldHVwKCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9JTkZPICJTYXZpbmcgSU8tQVBJQyBzdGF0ZSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVuZDsKKwl9CisKKwlyZXQgPSBlbmFibGVfaW50cl9yZW1hcHBpbmcoMSk7CisKKwlpZiAocmV0ICYmIHgyYXBpY19wcmVlbmFibGVkKSB7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcGFuaWMoIngyYXBpYyBlbmFibGVkIGJ5IGJpb3MuIEJ1dCBJUiBlbmFibGluZyBmYWlsZWQiKTsKKwl9CisKKwlpZiAocmV0KQorCQlnb3RvIGVuZF9yZXN0b3JlOworCisJaWYgKCF4MmFwaWMpIHsKKwkJeDJhcGljID0gMTsKKwkJYXBpY19vcHMgPSAmeDJhcGljX29wczsKKwkJZW5hYmxlX3gyYXBpYygpOworCX0KKworZW5kX3Jlc3RvcmU6CisJaWYgKHJldCkKKwkJLyoKKwkJICogSVIgZW5hYmxpbmcgZmFpbGVkCisJCSAqLworCQlyZXN0b3JlX0lPX0FQSUNfc2V0dXAoKTsKKwllbHNlCisJCXJlaW5pdF9pbnRyX3JlbWFwcGVkX0lPX0FQSUMoeDJhcGljX3ByZWVuYWJsZWQpOworCitlbmQ6CisJdW5tYXNrXzgyNTlBKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJaWYgKCFyZXQpIHsKKwkJaWYgKCF4MmFwaWNfcHJlZW5hYmxlZCkKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAgICAiRW5hYmxlZCB4MmFwaWMgYW5kIGludGVycnVwdC1yZW1hcHBpbmdcbiIpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgIkVuYWJsZWQgSW50ZXJydXB0LXJlbWFwcGluZ1xuIik7CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIkZhaWxlZCB0byBlbmFibGUgSW50ZXJydXB0LXJlbWFwcGluZyBhbmQgeDJhcGljXG4iKTsKKyNlbHNlCisJaWYgKCFjcHVfaGFzX3gyYXBpYykKKwkJcmV0dXJuOworCisJaWYgKHgyYXBpY19wcmVlbmFibGVkKQorCQlwYW5pYygieDJhcGljIGVuYWJsZWQgcHJpb3IgT1MgaGFuZG92ZXIsIgorCQkgICAgICAiIGVuYWJsZSBDT05GSUdfSU5UUl9SRU1BUCIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxlIENPTkZJR19JTlRSX1JFTUFQIGZvciBlbmFibGluZyBpbnRyLXJlbWFwcGluZyAiCisJICAgICAgICIgYW5kIHgyYXBpY1xuIik7CisjZW5kaWYKKworCXJldHVybjsKK30KKyNlbmRpZiAvKiBIQVZFX1gyQVBJQyAqLworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorLyoKKyAqIERldGVjdCBhbmQgZW5hYmxlIGxvY2FsIEFQSUNzIG9uIG5vbi1TTVAgYm9hcmRzLgorICogT3JpZ2luYWwgY29kZSB3cml0dGVuIGJ5IEtlaXIgRnJhc2VyLgorICogT24gQU1ENjQgd2UgdHJ1c3QgdGhlIEJJT1MgLSBpZiBpdCBzYXlzIG5vIEFQSUMgaXQgaXMgbGlrZWx5CisgKiBub3QgY29ycmVjdGx5IHNldCB1cCAodXN1YWxseSB0aGUgQVBJQyB0aW1lciB3b24ndCB3b3JrIGV0Yy4pCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGRldGVjdF9pbml0X0FQSUModm9pZCkKK3sKKwlpZiAoIWNwdV9oYXNfYXBpYykgeworCQlwcmludGsoS0VSTl9JTkZPICJObyBsb2NhbCBBUElDIHByZXNlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbXBfbGFwaWNfYWRkciA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7CisJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gMDsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisvKgorICogRGV0ZWN0IGFuZCBpbml0aWFsaXplIEFQSUMKKyAqLworc3RhdGljIGludCBfX2luaXQgZGV0ZWN0X2luaXRfQVBJQyh2b2lkKQoreworCXUzMiBoLCBsLCBmZWF0dXJlczsKKworCS8qIERpc2FibGVkIGJ5IGtlcm5lbCBvcHRpb24/ICovCisJaWYgKGRpc2FibGVfYXBpYykKKwkJcmV0dXJuIC0xOworCisJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKKwljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQlpZiAoKGJvb3RfY3B1X2RhdGEueDg2ID09IDYgJiYgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPiAxKSB8fAorCQkgICAgKGJvb3RfY3B1X2RhdGEueDg2ID09IDE1KSkKKwkJCWJyZWFrOworCQlnb3RvIG5vX2FwaWM7CisJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiB8fCBib290X2NwdV9kYXRhLng4NiA9PSAxNSB8fAorCQkgICAgKGJvb3RfY3B1X2RhdGEueDg2ID09IDUgJiYgY3B1X2hhc19hcGljKSkKKwkJCWJyZWFrOworCQlnb3RvIG5vX2FwaWM7CisJZGVmYXVsdDoKKwkJZ290byBub19hcGljOworCX0KKworCWlmICghY3B1X2hhc19hcGljKSB7CisJCS8qCisJCSAqIE92ZXItcmlkZSBCSU9TIGFuZCB0cnkgdG8gZW5hYmxlIHRoZSBsb2NhbCBBUElDIG9ubHkgaWYKKwkJICogImxhcGljIiBzcGVjaWZpZWQuCisJCSAqLworCQlpZiAoIWZvcmNlX2VuYWJsZV9sb2NhbF9hcGljKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJMb2NhbCBBUElDIGRpc2FibGVkIGJ5IEJJT1MgLS0gIgorCQkJICAgICAgICJ5b3UgY2FuIGVuYWJsZSBpdCB3aXRoIFwibGFwaWNcIlxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJLyoKKwkJICogU29tZSBCSU9TZXMgZGlzYWJsZSB0aGUgbG9jYWwgQVBJQyBpbiB0aGUgQVBJQ19CQVNFCisJCSAqIE1TUi4gVGhpcyBjYW4gb25seSBiZSBkb25lIGluIHNvZnR3YXJlIGZvciBJbnRlbCBQNiBvciBsYXRlcgorCQkgKiBhbmQgQU1EIEs3IChNb2RlbCA+IDEpIG9yIGxhdGVyLgorCQkgKi8KKwkJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOworCQlpZiAoIShsICYgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJMb2NhbCBBUElDIGRpc2FibGVkIGJ5IEJJT1MgLS0gcmVlbmFibGluZy5cbiIpOworCQkJbCAmPSB+TVNSX0lBMzJfQVBJQ0JBU0VfQkFTRTsKKwkJCWwgfD0gTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFIHwgQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTsKKwkJCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKKwkJCWVuYWJsZWRfdmlhX2FwaWNiYXNlID0gMTsKKwkJfQorCX0KKwkvKgorCSAqIFRoZSBBUElDIGZlYXR1cmUgYml0IHNob3VsZCBub3cgYmUgZW5hYmxlZAorCSAqIGluIGBjcHVpZCcKKwkgKi8KKwlmZWF0dXJlcyA9IGNwdWlkX2VkeCgxKTsKKwlpZiAoIShmZWF0dXJlcyAmICgxIDw8IFg4Nl9GRUFUVVJFX0FQSUMpKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJDb3VsZCBub3QgZW5hYmxlIEFQSUMhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzZXRfY3B1X2NhcCgmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVBJQyk7CisJbXBfbGFwaWNfYWRkciA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7CisKKwkvKiBUaGUgQklPUyBtYXkgaGF2ZSBzZXQgdXAgdGhlIEFQSUMgYXQgc29tZSBvdGhlciBhZGRyZXNzICovCisJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOworCWlmIChsICYgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFKQorCQltcF9sYXBpY19hZGRyID0gbCAmIE1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7CisKKwlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBhbmQgZW5hYmxlZCBsb2NhbCBBUElDIVxuIik7CisKKwlhcGljX3BtX2FjdGl2YXRlKCk7CisKKwlyZXR1cm4gMDsKKworbm9fYXBpYzoKKwlwcmludGsoS0VSTl9JTkZPICJObyBsb2NhbCBBUElDIHByZXNlbnQgb3IgaGFyZHdhcmUgZGlzYWJsZWRcbiIpOworCXJldHVybiAtMTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAordm9pZCBfX2luaXQgZWFybHlfaW5pdF9sYXBpY19tYXBwaW5nKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7CisKKwkvKgorCSAqIElmIG5vIGxvY2FsIEFQSUMgY2FuIGJlIGZvdW5kIHRoZW4gZ28gb3V0CisJICogOiBpdCBtZWFucyB0aGVyZSBpcyBubyBtcGF0YWJsZSBhbmQgTUFEVAorCSAqLworCWlmICghc21wX2ZvdW5kX2NvbmZpZykKKwkJcmV0dXJuOworCisJcGh5c19hZGRyID0gbXBfbGFwaWNfYWRkcjsKKworCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBwaHlzX2FkZHIpOworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hcHBlZCBBUElDIHRvICUxNmx4ICglMTZseClcbiIsCisJCSAgICBBUElDX0JBU0UsIHBoeXNfYWRkcik7CisKKwkvKgorCSAqIEZldGNoIHRoZSBBUElDIElEIG9mIHRoZSBCU1AgaW4gY2FzZSB3ZSBoYXZlIGEKKwkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKG9yIHRoZSBNUCB0YWJsZSBpcyBicm9rZW4pLgorCSAqLworCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOworfQorI2VuZGlmCisKKy8qKgorICogaW5pdF9hcGljX21hcHBpbmdzIC0gaW5pdGlhbGl6ZSBBUElDIG1hcHBpbmdzCisgKi8KK3ZvaWQgX19pbml0IGluaXRfYXBpY19tYXBwaW5ncyh2b2lkKQoreworI2lmZGVmIEhBVkVfWDJBUElDCisJaWYgKHgyYXBpYykgeworCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCisJLyoKKwkgKiBJZiBubyBsb2NhbCBBUElDIGNhbiBiZSBmb3VuZCB0aGVuIHNldCB1cCBhIGZha2UgYWxsCisJICogemVyb2VzIHBhZ2UgdG8gc2ltdWxhdGUgdGhlIGxvY2FsIEFQSUMgYW5kIGFub3RoZXIKKwkgKiBvbmUgZm9yIHRoZSBJTy1BUElDLgorCSAqLworCWlmICghc21wX2ZvdW5kX2NvbmZpZyAmJiBkZXRlY3RfaW5pdF9BUElDKCkpIHsKKwkJYXBpY19waHlzID0gKHVuc2lnbmVkIGxvbmcpIGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKKwkJYXBpY19waHlzID0gX19wYShhcGljX3BoeXMpOworCX0gZWxzZQorCQlhcGljX3BoeXMgPSBtcF9sYXBpY19hZGRyOworCisJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9BUElDX0JBU0UsIGFwaWNfcGh5cyk7CisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibWFwcGVkIEFQSUMgdG8gJTA4bHggKCUwOGx4KVxuIiwKKwkJCQlBUElDX0JBU0UsIGFwaWNfcGh5cyk7CisKKwkvKgorCSAqIEZldGNoIHRoZSBBUElDIElEIG9mIHRoZSBCU1AgaW4gY2FzZSB3ZSBoYXZlIGEKKwkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKG9yIHRoZSBNUCB0YWJsZSBpcyBicm9rZW4pLgorCSAqLworCWlmIChib290X2NwdV9waHlzaWNhbF9hcGljaWQgPT0gLTFVKQorCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKK30KKworLyoKKyAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIElPLUFQSUMgYW5kIEFQSUMgaGFyZHdhcmUgaWYgdGhpcyBpcworICogYSBVUCBrZXJuZWwuCisgKi8KK2ludCBhcGljX3ZlcnNpb25bTUFYX0FQSUNTXTsKKworaW50IF9faW5pdCBBUElDX2luaXRfdW5pcHJvY2Vzc29yKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWlmIChkaXNhYmxlX2FwaWMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQXBpYyBkaXNhYmxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCFjcHVfaGFzX2FwaWMpIHsKKwkJZGlzYWJsZV9hcGljID0gMTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQXBpYyBkaXNhYmxlZCBieSBCSU9TXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKyNlbHNlCisJaWYgKCFzbXBfZm91bmRfY29uZmlnICYmICFjcHVfaGFzX2FwaWMpCisJCXJldHVybiAtMTsKKworCS8qCisJICogQ29tcGxhaW4gaWYgdGhlIEJJT1MgcHJldGVuZHMgdGhlcmUgaXMgb25lLgorCSAqLworCWlmICghY3B1X2hhc19hcGljICYmCisJICAgIEFQSUNfSU5URUdSQVRFRChhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgbG9jYWwgQVBJQyAweCV4IG5vdCBkZXRlY3RlZCEuLi5cbiIsCisJCSAgICAgICBib290X2NwdV9waHlzaWNhbF9hcGljaWQpOworCQljbGVhcl9jcHVfY2FwKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BUElDKTsKKwkJcmV0dXJuIC0xOworCX0KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9YMkFQSUMKKwllbmFibGVfSVJfeDJhcGljKCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJc2V0dXBfYXBpY19yb3V0aW5nKCk7CisjZW5kaWYKKworCXZlcmlmeV9sb2NhbF9BUElDKCk7CisJY29ubmVjdF9ic3BfQVBJQygpOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWFwaWNfd3JpdGUoQVBJQ19JRCwgU0VUX0FQSUNfSUQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSk7CisjZWxzZQorCS8qCisJICogSGFjazogSW4gY2FzZSBvZiBrZHVtcCwgYWZ0ZXIgYSBjcmFzaCwga2VybmVsIG1pZ2h0IGJlIGJvb3RpbmcKKwkgKiBvbiBhIGNwdSB3aXRoIG5vbi16ZXJvIGxhcGljIGlkLiBCdXQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkCisJICogbWlnaHQgYmUgemVybyBpZiByZWFkIGZyb20gTVAgdGFibGVzLiBHZXQgaXQgZnJvbSBMQVBJQy4KKwkgKi8KKyMgaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKKwlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKKyMgZW5kaWYKKyNlbmRpZgorCXBoeXNpZF9zZXRfbWFza19vZl9waHlzaWQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkLCAmcGh5c19jcHVfcHJlc2VudF9tYXApOworCXNldHVwX2xvY2FsX0FQSUMoKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwkvKgorCSAqIE5vdyBlbmFibGUgSU8tQVBJQ3MsIGFjdHVhbGx5IGNhbGwgY2xlYXJfSU9fQVBJQworCSAqIFdlIG5lZWQgY2xlYXJfSU9fQVBJQyBiZWZvcmUgZW5hYmxpbmcgdmVjdG9yIG9uIEJQCisJICovCisJaWYgKCFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQorCQllbmFibGVfSU9fQVBJQygpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwlpZiAoIXNtcF9mb3VuZF9jb25maWcgfHwgc2tpcF9pb2FwaWNfc2V0dXAgfHwgIW5yX2lvYXBpY3MpCisjZW5kaWYKKwkJbG9jYWxpc2Vfbm1pX3dhdGNoZG9nKCk7CisJZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKKworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCWlmIChzbXBfZm91bmRfY29uZmlnICYmICFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQorCQlzZXR1cF9JT19BUElDKCk7CisjIGlmZGVmIENPTkZJR19YODZfNjQKKwllbHNlCisJCW5yX2lvYXBpY3MgPSAwOworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJc2V0dXBfYm9vdF9BUElDX2Nsb2NrKCk7CisJY2hlY2tfbm1pX3dhdGNoZG9nKCk7CisjZWxzZQorCXNldHVwX2Jvb3RfY2xvY2soKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2NhbCBBUElDIGludGVycnVwdHMKKyAqLworCisvKgorICogVGhpcyBpbnRlcnJ1cHQgc2hvdWxkIF9uZXZlcl8gaGFwcGVuIHdpdGggb3VyIEFQSUMvU01QIGFyY2hpdGVjdHVyZQorICovCit2b2lkIHNtcF9zcHVyaW91c19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdTMyIHY7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJZXhpdF9pZGxlKCk7CisjZW5kaWYKKwlpcnFfZW50ZXIoKTsKKwkvKgorCSAqIENoZWNrIGlmIHRoaXMgcmVhbGx5IGlzIGEgc3B1cmlvdXMgaW50ZXJydXB0IGFuZCBBQ0sgaXQKKwkgKiBpZiBpdCBpcyBhIHZlY3RvcmVkIG9uZS4gIEp1c3QgaW4gY2FzZS4uLgorCSAqIFNwdXJpb3VzIGludGVycnVwdHMgc2hvdWxkIG5vdCBiZSBBQ0tlZC4KKwkgKi8KKwl2ID0gYXBpY19yZWFkKEFQSUNfSVNSICsgKChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIH4weDFmKSA+PiAxKSk7CisJaWYgKHYgJiAoMSA8PCAoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiAweDFmKSkpCisJCWFja19BUElDX2lycSgpOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWFkZF9wZGEoaXJxX3NwdXJpb3VzX2NvdW50LCAxKTsKKyNlbHNlCisJLyogc2VlIHN3LWRldi1tYW4gdm9sIDMsIGNoYXB0ZXIgNy40LjEzLjUgKi8KKwlwcmludGsoS0VSTl9JTkZPICJzcHVyaW91cyBBUElDIGludGVycnVwdCBvbiBDUFUjJWQsICIKKwkgICAgICAgInNob3VsZCBuZXZlciBoYXBwZW4uXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlycV9zcHVyaW91c19jb3VudCsrOworI2VuZGlmCisJaXJxX2V4aXQoKTsKK30KKworLyoKKyAqIFRoaXMgaW50ZXJydXB0IHNob3VsZCBuZXZlciBoYXBwZW4gd2l0aCBvdXIgQVBJQy9TTVAgYXJjaGl0ZWN0dXJlCisgKi8KK3ZvaWQgc21wX2Vycm9yX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1MzIgdiwgdjE7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJZXhpdF9pZGxlKCk7CisjZW5kaWYKKwlpcnFfZW50ZXIoKTsKKwkvKiBGaXJzdCB0aWNrbGUgdGhlIGhhcmR3YXJlLCBvbmx5IHRoZW4gcmVwb3J0IHdoYXQgd2VudCBvbi4gLS0gUkVXICovCisJdiA9IGFwaWNfcmVhZChBUElDX0VTUik7CisJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJdjEgPSBhcGljX3JlYWQoQVBJQ19FU1IpOworCWFja19BUElDX2lycSgpOworCWF0b21pY19pbmMoJmlycV9lcnJfY291bnQpOworCisJLyogSGVyZSBpcyB3aGF0IHRoZSBBUElDIGVycm9yIGJpdHMgbWVhbjoKKwkgICAwOiBTZW5kIENTIGVycm9yCisJICAgMTogUmVjZWl2ZSBDUyBlcnJvcgorCSAgIDI6IFNlbmQgYWNjZXB0IGVycm9yCisJICAgMzogUmVjZWl2ZSBhY2NlcHQgZXJyb3IKKwkgICA0OiBSZXNlcnZlZAorCSAgIDU6IFNlbmQgaWxsZWdhbCB2ZWN0b3IKKwkgICA2OiBSZWNlaXZlZCBpbGxlZ2FsIHZlY3RvcgorCSAgIDc6IElsbGVnYWwgcmVnaXN0ZXIgYWRkcmVzcworCSovCisJcHJpbnRrKEtFUk5fREVCVUcgIkFQSUMgZXJyb3Igb24gQ1BVJWQ6ICUwMngoJTAyeClcbiIsCisJCXNtcF9wcm9jZXNzb3JfaWQoKSwgdiAsIHYxKTsKKwlpcnFfZXhpdCgpOworfQorCisvKioKKyAqIGNvbm5lY3RfYnNwX0FQSUMgLSBhdHRhY2ggdGhlIEFQSUMgdG8gdGhlIGludGVycnVwdCBzeXN0ZW0KKyAqLwordm9pZCBfX2luaXQgY29ubmVjdF9ic3BfQVBJQyh2b2lkKQoreworI2lmZGVmIENPTkZJR19YODZfMzIKKwlpZiAocGljX21vZGUpIHsKKwkJLyoKKwkJICogRG8gbm90IHRydXN0IHRoZSBsb2NhbCBBUElDIGJlaW5nIGVtcHR5IGF0IGJvb3R1cC4KKwkJICovCisJCWNsZWFyX2xvY2FsX0FQSUMoKTsKKwkJLyoKKwkJICogUElDIG1vZGUsIGVuYWJsZSBBUElDIG1vZGUgaW4gdGhlIElNQ1IsIGkuZS4gIGNvbm5lY3QgQlNQJ3MKKwkJICogbG9jYWwgQVBJQyB0byBJTlQgYW5kIE5NSSBsaW5lcy4KKwkJICovCisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImxlYXZpbmcgUElDIG1vZGUsICIKKwkJCQkiZW5hYmxpbmcgQVBJQyBtb2RlLlxuIik7CisJCW91dGIoMHg3MCwgMHgyMik7CisJCW91dGIoMHgwMSwgMHgyMyk7CisJfQorI2VuZGlmCisJZW5hYmxlX2FwaWNfbW9kZSgpOworfQorCisvKioKKyAqIGRpc2Nvbm5lY3RfYnNwX0FQSUMgLSBkZXRhY2ggdGhlIEFQSUMgZnJvbSB0aGUgaW50ZXJydXB0IHN5c3RlbQorICogQHZpcnRfd2lyZV9zZXR1cDoJaW5kaWNhdGVzLCB3aGV0aGVyIHZpcnR1YWwgd2lyZSBtb2RlIGlzIHNlbGVjdGVkCisgKgorICogVmlydHVhbCB3aXJlIG1vZGUgaXMgbmVjZXNzYXJ5IHRvIGRlbGl2ZXIgbGVnYWN5IGludGVycnVwdHMgZXZlbiB3aGVuIHRoZQorICogQVBJQyBpcyBkaXNhYmxlZC4KKyAqLwordm9pZCBkaXNjb25uZWN0X2JzcF9BUElDKGludCB2aXJ0X3dpcmVfc2V0dXApCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWlmIChwaWNfbW9kZSkgeworCQkvKgorCQkgKiBQdXQgdGhlIGJvYXJkIGJhY2sgaW50byBQSUMgbW9kZSAoaGFzIGFuIGVmZmVjdCBvbmx5IG9uCisJCSAqIGNlcnRhaW4gb2xkZXIgYm9hcmRzKS4gIE5vdGUgdGhhdCBBUElDIGludGVycnVwdHMsIGluY2x1ZGluZworCQkgKiBJUElzLCB3b24ndCB3b3JrIGJleW9uZCB0aGlzIHBvaW50ISAgVGhlIG9ubHkgZXhjZXB0aW9uIGFyZQorCQkgKiBJTklUIElQSXMuCisJCSAqLworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJkaXNhYmxpbmcgQVBJQyBtb2RlLCAiCisJCQkJImVudGVyaW5nIFBJQyBtb2RlLlxuIik7CisJCW91dGIoMHg3MCwgMHgyMik7CisJCW91dGIoMHgwMCwgMHgyMyk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKworCS8qIEdvIGJhY2sgdG8gVmlydHVhbCBXaXJlIGNvbXBhdGliaWxpdHkgbW9kZSAqLworCisJLyogRm9yIHRoZSBzcHVyaW91cyBpbnRlcnJ1cHQgdXNlIHZlY3RvciBGLCBhbmQgZW5hYmxlIGl0ICovCisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKKwl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKKwl2YWx1ZSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOworCXZhbHVlIHw9IDB4ZjsKKwlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOworCisJaWYgKCF2aXJ0X3dpcmVfc2V0dXApIHsKKwkJLyoKKwkJICogRm9yIExWVDAgbWFrZSBpdCBlZGdlIHRyaWdnZXJlZCwgYWN0aXZlIGhpZ2gsCisJCSAqIGV4dGVybmFsIGFuZCBlbmFibGVkCisJCSAqLworCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVDApOworCQl2YWx1ZSAmPSB+KEFQSUNfTU9ERV9NQVNLIHwgQVBJQ19TRU5EX1BFTkRJTkcgfAorCQkJQVBJQ19JTlBVVF9QT0xBUklUWSB8IEFQSUNfTFZUX1JFTU9URV9JUlIgfAorCQkJQVBJQ19MVlRfTEVWRUxfVFJJR0dFUiB8IEFQSUNfTFZUX01BU0tFRCk7CisJCXZhbHVlIHw9IEFQSUNfTFZUX1JFTU9URV9JUlIgfCBBUElDX1NFTkRfUEVORElORzsKKwkJdmFsdWUgPSBTRVRfQVBJQ19ERUxJVkVSWV9NT0RFKHZhbHVlLCBBUElDX01PREVfRVhUSU5UKTsKKwkJYXBpY193cml0ZShBUElDX0xWVDAsIHZhbHVlKTsKKwl9IGVsc2UgeworCQkvKiBEaXNhYmxlIExWVDAgKi8KKwkJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCk7CisJfQorCisJLyoKKwkgKiBGb3IgTFZUMSBtYWtlIGl0IGVkZ2UgdHJpZ2dlcmVkLCBhY3RpdmUgaGlnaCwKKwkgKiBubWkgYW5kIGVuYWJsZWQKKwkgKi8KKwl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVDEpOworCXZhbHVlICY9IH4oQVBJQ19NT0RFX01BU0sgfCBBUElDX1NFTkRfUEVORElORyB8CisJCQlBUElDX0lOUFVUX1BPTEFSSVRZIHwgQVBJQ19MVlRfUkVNT1RFX0lSUiB8CisJCQlBUElDX0xWVF9MRVZFTF9UUklHR0VSIHwgQVBJQ19MVlRfTUFTS0VEKTsKKwl2YWx1ZSB8PSBBUElDX0xWVF9SRU1PVEVfSVJSIHwgQVBJQ19TRU5EX1BFTkRJTkc7CisJdmFsdWUgPSBTRVRfQVBJQ19ERUxJVkVSWV9NT0RFKHZhbHVlLCBBUElDX01PREVfTk1JKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOworfQorCit2b2lkIF9fY3B1aW5pdCBnZW5lcmljX3Byb2Nlc3Nvcl9pbmZvKGludCBhcGljaWQsIGludCB2ZXJzaW9uKQoreworCWludCBjcHU7CisJY3B1bWFza190IHRtcF9tYXA7CisKKwkvKgorCSAqIFZhbGlkYXRlIHZlcnNpb24KKwkgKi8KKwlpZiAodmVyc2lvbiA9PSAweDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQklPUyBidWcsIEFQSUMgdmVyc2lvbiBpcyAwIGZvciBDUFUjJWQhICIKKwkJCQkiZml4aW5nIHVwIHRvIDB4MTAuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIiwKKwkJCQl2ZXJzaW9uKTsKKwkJdmVyc2lvbiA9IDB4MTA7CisJfQorCWFwaWNfdmVyc2lvblthcGljaWRdID0gdmVyc2lvbjsKKworCWlmIChudW1fcHJvY2Vzc29ycyA+PSBOUl9DUFVTKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IE5SX0NQVVMgbGltaXQgb2YgJWkgcmVhY2hlZC4iCisJCQkiICBQcm9jZXNzb3IgaWdub3JlZC5cbiIsIE5SX0NQVVMpOworCQlyZXR1cm47CisJfQorCisJbnVtX3Byb2Nlc3NvcnMrKzsKKwljcHVzX2NvbXBsZW1lbnQodG1wX21hcCwgY3B1X3ByZXNlbnRfbWFwKTsKKwljcHUgPSBmaXJzdF9jcHUodG1wX21hcCk7CisKKwlwaHlzaWRfc2V0KGFwaWNpZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworCWlmIChhcGljaWQgPT0gYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSB7CisJCS8qCisJCSAqIHg4Nl9iaW9zX2NwdV9hcGljaWQgaXMgcmVxdWlyZWQgdG8gaGF2ZSBwcm9jZXNzb3JzIGxpc3RlZAorCQkgKiBpbiBzYW1lIG9yZGVyIGFzIGxvZ2ljYWwgY3B1IG51bWJlcnMuIEhlbmNlIHRoZSBmaXJzdAorCQkgKiBlbnRyeSBpcyBCU1AsIGFuZCBzbyBvbi4KKwkJICovCisJCWNwdSA9IDA7CisJfQorCWlmIChhcGljaWQgPiBtYXhfcGh5c2ljYWxfYXBpY2lkKQorCQltYXhfcGh5c2ljYWxfYXBpY2lkID0gYXBpY2lkOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogV291bGQgYmUgcHJlZmVyYWJsZSB0byBzd2l0Y2ggdG8gYmlnc21wIHdoZW4gQ09ORklHX0hPVFBMVUdfQ1BVPXkKKwkgKiBidXQgd2UgbmVlZCB0byB3b3JrIG90aGVyIGRlcGVuZGVuY2llcyBsaWtlIFNNUF9TVVNQRU5EIGV0YworCSAqIGJlZm9yZSB0aGlzIGNhbiBiZSBkb25lIHdpdGhvdXQgc29tZSBjb25mdXNpb24uCisJICogaWYgKENQVV9IT1RQTFVHX0VOQUJMRUQgfHwgbnVtX3Byb2Nlc3NvcnMgPiA4KQorCSAqICAgICAgIC0gQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgorCSAqLworCWlmIChtYXhfcGh5c2ljYWxfYXBpY2lkID49IDgpIHsKKwkJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKKwkJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQkJaWYgKCFBUElDX1hBUElDKHZlcnNpb24pKSB7CisJCQkJZGVmX3RvX2JpZ3NtcCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBJZiBQNCBhbmQgYWJvdmUgZmFsbCB0aHJvdWdoICovCisJCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCQlkZWZfdG9fYmlnc21wID0gMTsKKwkJfQorCX0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfWDg2X1NNUCkgfHwgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorCS8qIGFyZSB3ZSBiZWluZyBjYWxsZWQgZWFybHkgaW4ga2VybmVsIHN0YXJ0dXA/ICovCisJaWYgKGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fYXBpY2lkKSkgeworCQl1MTYgKmNwdV90b19hcGljaWQgPSBlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX2FwaWNpZCk7CisJCXUxNiAqYmlvc19jcHVfYXBpY2lkID0gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2Jpb3NfY3B1X2FwaWNpZCk7CisKKwkJY3B1X3RvX2FwaWNpZFtjcHVdID0gYXBpY2lkOworCQliaW9zX2NwdV9hcGljaWRbY3B1XSA9IGFwaWNpZDsKKwl9IGVsc2UgeworCQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0gYXBpY2lkOworCQlwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGNwdSkgPSBhcGljaWQ7CisJfQorI2VuZGlmCisKKwljcHVfc2V0KGNwdSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJY3B1X3NldChjcHUsIGNwdV9wcmVzZW50X21hcCk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJcmV0dXJuIHJlYWRfYXBpY19pZCgpOworfQorI2VuZGlmCisKKy8qCisgKiBQb3dlciBtYW5hZ2VtZW50CisgKi8KKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIHN0cnVjdCB7CisJLyoKKwkgKiAnYWN0aXZlJyBpcyB0cnVlIGlmIHRoZSBsb2NhbCBBUElDIHdhcyBlbmFibGVkIGJ5IHVzIGFuZAorCSAqIG5vdCB0aGUgQklPUzsgdGhpcyBzaWduaWZpZXMgdGhhdCB3ZSBhcmUgYWxzbyByZXNwb25zaWJsZQorCSAqIGZvciBkaXNhYmxpbmcgaXQgYmVmb3JlIGVudGVyaW5nIGFwbS9hY3BpIHN1c3BlbmQKKwkgKi8KKwlpbnQgYWN0aXZlOworCS8qIHIvdyBhcGljIGZpZWxkcyAqLworCXVuc2lnbmVkIGludCBhcGljX2lkOworCXVuc2lnbmVkIGludCBhcGljX3Rhc2twcmk7CisJdW5zaWduZWQgaW50IGFwaWNfbGRyOworCXVuc2lnbmVkIGludCBhcGljX2RmcjsKKwl1bnNpZ25lZCBpbnQgYXBpY19zcGl2OworCXVuc2lnbmVkIGludCBhcGljX2x2dHQ7CisJdW5zaWduZWQgaW50IGFwaWNfbHZ0cGM7CisJdW5zaWduZWQgaW50IGFwaWNfbHZ0MDsKKwl1bnNpZ25lZCBpbnQgYXBpY19sdnQxOworCXVuc2lnbmVkIGludCBhcGljX2x2dGVycjsKKwl1bnNpZ25lZCBpbnQgYXBpY190bWljdDsKKwl1bnNpZ25lZCBpbnQgYXBpY190ZGNyOworCXVuc2lnbmVkIGludCBhcGljX3RobXI7Cit9IGFwaWNfcG1fc3RhdGU7CisKK3N0YXRpYyBpbnQgbGFwaWNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbWF4bHZ0OworCisJaWYgKCFhcGljX3BtX3N0YXRlLmFjdGl2ZSkKKwkJcmV0dXJuIDA7CisKKwltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CisKKwlhcGljX3BtX3N0YXRlLmFwaWNfaWQgPSBhcGljX3JlYWQoQVBJQ19JRCk7CisJYXBpY19wbV9zdGF0ZS5hcGljX3Rhc2twcmkgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKKwlhcGljX3BtX3N0YXRlLmFwaWNfbGRyID0gYXBpY19yZWFkKEFQSUNfTERSKTsKKwlhcGljX3BtX3N0YXRlLmFwaWNfZGZyID0gYXBpY19yZWFkKEFQSUNfREZSKTsKKwlhcGljX3BtX3N0YXRlLmFwaWNfc3BpdiA9IGFwaWNfcmVhZChBUElDX1NQSVYpOworCWFwaWNfcG1fc3RhdGUuYXBpY19sdnR0ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7CisJaWYgKG1heGx2dCA+PSA0KQorCQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0cGMgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7CisJYXBpY19wbV9zdGF0ZS5hcGljX2x2dDAgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKKwlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MSA9IGFwaWNfcmVhZChBUElDX0xWVDEpOworCWFwaWNfcG1fc3RhdGUuYXBpY19sdnRlcnIgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOworCWFwaWNfcG1fc3RhdGUuYXBpY190bWljdCA9IGFwaWNfcmVhZChBUElDX1RNSUNUKTsKKwlhcGljX3BtX3N0YXRlLmFwaWNfdGRjciA9IGFwaWNfcmVhZChBUElDX1REQ1IpOworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKENPTkZJR19YODZfTUNFX0lOVEVMKQorCWlmIChtYXhsdnQgPj0gNSkKKwkJYXBpY19wbV9zdGF0ZS5hcGljX3RobXIgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKKyNlbmRpZgorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWRpc2FibGVfbG9jYWxfQVBJQygpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsYXBpY19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgbCwgaDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBtYXhsdnQ7CisKKwlpZiAoIWFwaWNfcG1fc3RhdGUuYWN0aXZlKQorCQlyZXR1cm4gMDsKKworCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworI2lmZGVmIEhBVkVfWDJBUElDCisJaWYgKHgyYXBpYykKKwkJZW5hYmxlX3gyYXBpYygpOworCWVsc2UKKyNlbmRpZgorCXsKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSBBUElDQkFTRSBwb2ludHMgdG8gdGhlIHJpZ2h0IGFkZHJlc3MKKwkJICoKKwkJICogRklYTUUhIFRoaXMgd2lsbCBiZSB3cm9uZyBpZiB3ZSBldmVyIHN1cHBvcnQgc3VzcGVuZCBvbgorCQkgKiBTTVAhIFdlJ2xsIG5lZWQgdG8gZG8gdGhpcyBhcyBwYXJ0IG9mIHRoZSBDUFUgcmVzdG9yZSEKKwkJICovCisJCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKKwkJbCAmPSB+TVNSX0lBMzJfQVBJQ0JBU0VfQkFTRTsKKwkJbCB8PSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUgfCBtcF9sYXBpY19hZGRyOworCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7CisJfQorCisJYXBpY193cml0ZShBUElDX0xWVEVSUiwgRVJST1JfQVBJQ19WRUNUT1IgfCBBUElDX0xWVF9NQVNLRUQpOworCWFwaWNfd3JpdGUoQVBJQ19JRCwgYXBpY19wbV9zdGF0ZS5hcGljX2lkKTsKKwlhcGljX3dyaXRlKEFQSUNfREZSLCBhcGljX3BtX3N0YXRlLmFwaWNfZGZyKTsKKwlhcGljX3dyaXRlKEFQSUNfTERSLCBhcGljX3BtX3N0YXRlLmFwaWNfbGRyKTsKKwlhcGljX3dyaXRlKEFQSUNfVEFTS1BSSSwgYXBpY19wbV9zdGF0ZS5hcGljX3Rhc2twcmkpOworCWFwaWNfd3JpdGUoQVBJQ19TUElWLCBhcGljX3BtX3N0YXRlLmFwaWNfc3Bpdik7CisJYXBpY193cml0ZShBUElDX0xWVDAsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnQwKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMSwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dDEpOworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKENPTkZJR19YODZfTUNFX0lOVEVMKQorCWlmIChtYXhsdnQgPj0gNSkKKwkJYXBpY193cml0ZShBUElDX0xWVFRITVIsIGFwaWNfcG1fc3RhdGUuYXBpY190aG1yKTsKKyNlbmRpZgorCWlmIChtYXhsdnQgPj0gNCkKKwkJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0cGMpOworCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0dCk7CisJYXBpY193cml0ZShBUElDX1REQ1IsIGFwaWNfcG1fc3RhdGUuYXBpY190ZGNyKTsKKwlhcGljX3dyaXRlKEFQSUNfVE1JQ1QsIGFwaWNfcG1fc3RhdGUuYXBpY190bWljdCk7CisJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJYXBpY19yZWFkKEFQSUNfRVNSKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0ZXJyKTsKKwlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKKwlhcGljX3JlYWQoQVBJQ19FU1IpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGRldmljZSBoYXMgbm8gc2h1dGRvd24gbWV0aG9kIC0gZnVsbHkgZnVuY3Rpb25pbmcgbG9jYWwgQVBJQ3MKKyAqIGFyZSBuZWVkZWQgb24gZXZlcnkgQ1BVIHVwIHVudGlsIG1hY2hpbmVfaGFsdC9yZXN0YXJ0L3Bvd2Vyb2ZmLgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGxhcGljX3N5c2NsYXNzID0geworCS5uYW1lCQk9ICJsYXBpYyIsCisJLnJlc3VtZQkJPSBsYXBpY19yZXN1bWUsCisJLnN1c3BlbmQJPSBsYXBpY19zdXNwZW5kLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGRldmljZV9sYXBpYyA9IHsKKwkuaWQJPSAwLAorCS5jbHMJPSAmbGFwaWNfc3lzY2xhc3MsCit9OworCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKQoreworCWFwaWNfcG1fc3RhdGUuYWN0aXZlID0gMTsKK30KKworc3RhdGljIGludCBfX2luaXQgaW5pdF9sYXBpY19zeXNmcyh2b2lkKQoreworCWludCBlcnJvcjsKKworCWlmICghY3B1X2hhc19hcGljKQorCQlyZXR1cm4gMDsKKwkvKiBYWFg6IHJlbW92ZSBzdXNwZW5kL3Jlc3VtZSBwcm9jcyBpZiAhYXBpY19wbV9zdGF0ZS5hY3RpdmU/ICovCisKKwllcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbGFwaWNfc3lzY2xhc3MpOworCWlmICghZXJyb3IpCisJCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZkZXZpY2VfbGFwaWMpOworCXJldHVybiBlcnJvcjsKK30KK2RldmljZV9pbml0Y2FsbChpbml0X2xhcGljX3N5c2ZzKTsKKworI2Vsc2UJLyogQ09ORklHX1BNICovCisKK3N0YXRpYyB2b2lkIGFwaWNfcG1fYWN0aXZhdGUodm9pZCkgeyB9CisKKyNlbmRpZgkvKiBDT05GSUdfUE0gKi8KKworI2lmZGVmIENPTkZJR19YODZfNjQKKy8qCisgKiBhcGljX2lzX2NsdXN0ZXJlZF9ib3goKSAtLSBDaGVjayBpZiB3ZSBjYW4gZXhwZWN0IGdvb2QgVFNDCisgKgorICogVGh1cyBmYXIsIHRoZSBtYWpvciB1c2VyIG9mIHRoaXMgaXMgSUJNJ3MgU3VtbWl0MiBzZXJpZXM6CisgKgorICogQ2x1c3RlcmVkIGJveGVzIG1heSBoYXZlIHVuc3luY2VkIFRTQyBwcm9ibGVtcyBpZiB0aGV5IGFyZQorICogbXVsdGktY2hhc3Npcy4gVXNlIGF2YWlsYWJsZSBkYXRhIHRvIHRha2UgYSBnb29kIGd1ZXNzLgorICogSWYgaW4gZG91YnQsIGdvIEhQRVQuCisgKi8KK19fY3B1aW5pdCBpbnQgYXBpY19pc19jbHVzdGVyZWRfYm94KHZvaWQpCit7CisJaW50IGksIGNsdXN0ZXJzLCB6ZXJvczsKKwl1bnNpZ25lZCBpZDsKKwl1MTYgKmJpb3NfY3B1X2FwaWNpZDsKKwlERUNMQVJFX0JJVE1BUChjbHVzdGVybWFwLCBOVU1fQVBJQ19DTFVTVEVSUyk7CisKKwkvKgorCSAqIHRoZXJlIGlzIG5vdCB0aGlzIGtpbmQgb2YgYm94IHdpdGggQU1EIENQVSB5ZXQuCisJICogU29tZSBBTUQgYm94IHdpdGggcXVhZGNvcmUgY3B1IGFuZCA4IHNvY2tldHMgYXBpY2lkCisJICogd2lsbCBiZSBbNCwgMHgyM10gb3IgWzgsIDB4MjddIGNvdWxkIGJlIHRob3VnaHQgdG8KKwkgKiB2c21wIGJveCBzdGlsbCBuZWVkIGNoZWNraW5nLi4uCisJICovCisJaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICYmICFpc192c21wX2JveCgpKQorCQlyZXR1cm4gMDsKKworCWJpb3NfY3B1X2FwaWNpZCA9IGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9iaW9zX2NwdV9hcGljaWQpOworCWJpdG1hcF96ZXJvKGNsdXN0ZXJtYXAsIE5VTV9BUElDX0NMVVNURVJTKTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJLyogYXJlIHdlIGJlaW5nIGNhbGxlZCBlYXJseSBpbiBrZXJuZWwgc3RhcnR1cD8gKi8KKwkJaWYgKGJpb3NfY3B1X2FwaWNpZCkgeworCQkJaWQgPSBiaW9zX2NwdV9hcGljaWRbaV07CisJCX0KKwkJZWxzZSBpZiAoaSA8IG5yX2NwdV9pZHMpIHsKKwkJCWlmIChjcHVfcHJlc2VudChpKSkKKwkJCQlpZCA9IHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgaSk7CisJCQllbHNlCisJCQkJY29udGludWU7CisJCX0KKwkJZWxzZQorCQkJYnJlYWs7CisKKwkJaWYgKGlkICE9IEJBRF9BUElDSUQpCisJCQlfX3NldF9iaXQoQVBJQ19DTFVTVEVSSUQoaWQpLCBjbHVzdGVybWFwKTsKKwl9CisKKwkvKiBQcm9ibGVtOiAgUGFydGlhbGx5IHBvcHVsYXRlZCBjaGFzc2lzIG1heSBub3QgaGF2ZSBDUFVzIGluIHNvbWUgb2YKKwkgKiB0aGUgQVBJQyBjbHVzdGVycyB0aGV5IGhhdmUgYmVlbiBhbGxvY2F0ZWQuICBPbmx5IHByZXNlbnQgQ1BVcyBoYXZlCisJICogeDg2X2Jpb3NfY3B1X2FwaWNpZCBlbnRyaWVzLCB0aHVzIGNhdXNpbmcgemVyb2VzIGluIHRoZSBiaXRtYXAuCisJICogU2luY2UgY2x1c3RlcnMgYXJlIGFsbG9jYXRlZCBzZXF1ZW50aWFsbHksIGNvdW50IHplcm9zIG9ubHkgaWYKKwkgKiB0aGV5IGFyZSBib3VuZGVkIGJ5IG9uZXMuCisJICovCisJY2x1c3RlcnMgPSAwOworCXplcm9zID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0FQSUNfQ0xVU1RFUlM7IGkrKykgeworCQlpZiAodGVzdF9iaXQoaSwgY2x1c3Rlcm1hcCkpIHsKKwkJCWNsdXN0ZXJzICs9IDEgKyB6ZXJvczsKKwkJCXplcm9zID0gMDsKKwkJfSBlbHNlCisJCQkrK3plcm9zOworCX0KKworCS8qIFNjYWxlTVAgdlNNUG93ZXJlZCBib3hlcyBoYXZlIG9uZSBjbHVzdGVyIHBlciBib2FyZCBhbmQgVFNDcyBhcmUKKwkgKiBub3QgZ3VhcmFudGVlZCB0byBiZSBzeW5jZWQgYmV0d2VlbiBib2FyZHMKKwkgKi8KKwlpZiAoaXNfdnNtcF9ib3goKSAmJiBjbHVzdGVycyA+IDEpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBJZiBjbHVzdGVycyA+IDIsIHRoZW4gc2hvdWxkIGJlIG11bHRpLWNoYXNzaXMuCisJICogTWF5IGhhdmUgdG8gcmV2aXNpdCB0aGlzIHdoZW4gbXVsdGktY29yZSArIGh5cGVydGhyZWFkZWQgQ1BVcyBjb21lCisJICogb3V0LCBidXQgQUZBSUsgdGhpcyB3aWxsIHdvcmsgZXZlbiBmb3IgdGhlbS4KKwkgKi8KKwlyZXR1cm4gKGNsdXN0ZXJzID4gMik7Cit9CisjZW5kaWYKKworLyoKKyAqIEFQSUMgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKKyAqLworc3RhdGljIGludCBfX2luaXQgc2V0dXBfZGlzYWJsZWFwaWMoY2hhciAqYXJnKQoreworCWRpc2FibGVfYXBpYyA9IDE7CisJc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9BUElDKTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJkaXNhYmxlYXBpYyIsIHNldHVwX2Rpc2FibGVhcGljKTsKKworLyogc2FtZSBhcyBkaXNhYmxlYXBpYywgZm9yIGNvbXBhdGliaWxpdHkgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX25vbGFwaWMoY2hhciAqYXJnKQoreworCXJldHVybiBzZXR1cF9kaXNhYmxlYXBpYyhhcmcpOworfQorZWFybHlfcGFyYW0oIm5vbGFwaWMiLCBzZXR1cF9ub2xhcGljKTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfbGFwaWNfdGltZXJfYzJfb2soY2hhciAqYXJnKQoreworCWxvY2FsX2FwaWNfdGltZXJfYzJfb2sgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImxhcGljX3RpbWVyX2MyX29rIiwgcGFyc2VfbGFwaWNfdGltZXJfYzJfb2spOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9kaXNhYmxlX2FwaWNfdGltZXIoY2hhciAqYXJnKQoreworCWRpc2FibGVfYXBpY190aW1lciA9IDE7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibm9hcGljdGltZXIiLCBwYXJzZV9kaXNhYmxlX2FwaWNfdGltZXIpOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9ub2xhcGljX3RpbWVyKGNoYXIgKmFyZykKK3sKKwlkaXNhYmxlX2FwaWNfdGltZXIgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm5vbGFwaWNfdGltZXIiLCBwYXJzZV9ub2xhcGljX3RpbWVyKTsKKworc3RhdGljIGludCBfX2luaXQgYXBpY19zZXRfdmVyYm9zaXR5KGNoYXIgKmFyZykKK3sKKwlpZiAoIWFyZykgIHsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCXNraXBfaW9hcGljX3NldHVwID0gMDsKKwkJcmV0dXJuIDA7CisjZW5kaWYKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN0cmNtcCgiZGVidWciLCBhcmcpID09IDApCisJCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19ERUJVRzsKKwllbHNlIGlmIChzdHJjbXAoInZlcmJvc2UiLCBhcmcpID09IDApCisJCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19WRVJCT1NFOworCWVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUElDIFZlcmJvc2l0eSBsZXZlbCAlcyBub3QgcmVjb2duaXNlZCIKKwkJCSIgdXNlIGFwaWM9dmVyYm9zZSBvciBhcGljPWRlYnVnXG4iLCBhcmcpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJhcGljIiwgYXBpY19zZXRfdmVyYm9zaXR5KTsKKworc3RhdGljIGludCBfX2luaXQgbGFwaWNfaW5zZXJ0X3Jlc291cmNlKHZvaWQpCit7CisJaWYgKCFhcGljX3BoeXMpCisJCXJldHVybiAtMTsKKworCS8qIFB1dCBsb2NhbCBBUElDIGludG8gdGhlIHJlc291cmNlIG1hcC4gKi8KKwlsYXBpY19yZXNvdXJjZS5zdGFydCA9IGFwaWNfcGh5czsKKwlsYXBpY19yZXNvdXJjZS5lbmQgPSBsYXBpY19yZXNvdXJjZS5zdGFydCArIFBBR0VfU0laRSAtIDE7CisJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmxhcGljX3Jlc291cmNlKTsKKworCXJldHVybiAwOworfQorCisvKgorICogbmVlZCBjYWxsIGluc2VydCBhZnRlciBlODIwX3Jlc2VydmVfcmVzb3VyY2VzKCkKKyAqIHRoYXQgaXMgdXNpbmcgcmVxdWVzdF9yZXNvdXJjZQorICovCitsYXRlX2luaXRjYWxsKGxhcGljX2luc2VydF9yZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpY18zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWNfMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFjODMxZC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpY18zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTgxOSArMCwwIEBACi0vKgotICoJTG9jYWwgQVBJQyBoYW5kbGluZywgbG9jYWwgQVBJQyB0aW1lcnMKLSAqCi0gKgkoYykgMTk5OSwgMjAwMCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KLSAqCi0gKglGaXhlcwotICoJTWFjaWVqIFcuIFJvenlja2kJOglCaXRzIGZvciBnZW51aW5lIDgyNDg5RFggQVBJQ3M7Ci0gKgkJCQkJdGhhbmtzIHRvIEVyaWMgR2lsbW9yZQotICoJCQkJCWFuZCBSb2xmIEcuIFRld3MKLSAqCQkJCQlmb3IgdGVzdGluZyB0aGVzZSBleHRlbnNpdmVseS4KLSAqCU1hY2llaiBXLiBSb3p5Y2tpCToJVmFyaW91cyB1cGRhdGVzIGFuZCBmaXhlcy4KLSAqCU1pa2FlbCBQZXR0ZXJzc29uCToJUG93ZXIgTWFuYWdlbWVudCBmb3IgVVAtQVBJQy4KLSAqCVBhdmVsIE1hY2hlayBhbmQKLSAqCU1pa2FlbCBQZXR0ZXJzc29uCToJUE0gY29udmVydGVkIHRvIGRyaXZlciBtb2RlbC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGlfcG10bXIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWkuaD4KLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vbXBzcGVjLmg+Ci0jaW5jbHVkZSA8YXNtL2Rlc2MuaD4KLSNpbmNsdWRlIDxhc20vYXJjaF9ob29rcy5oPgotI2luY2x1ZGUgPGFzbS9ocGV0Lmg+Ci0jaW5jbHVkZSA8YXNtL2k4MjUzLmg+Ci0jaW5jbHVkZSA8YXNtL25taS5oPgotCi0jaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0jaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci0jaW5jbHVkZSA8bWFjaF9pcGkuaD4KLQotLyoKLSAqIFNhbml0eSBjaGVjawotICovCi0jaWYgKChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIDB4MEYpICE9IDB4MEYpCi0jIGVycm9yIFNQVVJJT1VTX0FQSUNfVkVDVE9SIGRlZmluaXRpb24gZXJyb3IKLSNlbmRpZgotCi11bnNpZ25lZCBsb25nIG1wX2xhcGljX2FkZHI7Ci0KLS8qCi0gKiBLbm9iIHRvIGNvbnRyb2wgb3VyIHdpbGxpbmduZXNzIHRvIGVuYWJsZSB0aGUgbG9jYWwgQVBJQy4KLSAqCi0gKiArMT1mb3JjZS1lbmFibGUKLSAqLwotc3RhdGljIGludCBmb3JjZV9lbmFibGVfbG9jYWxfYXBpYzsKLWludCBkaXNhYmxlX2FwaWM7Ci0KLS8qIERpc2FibGUgbG9jYWwgQVBJQyB0aW1lciBmcm9tIHRoZSBrZXJuZWwgY29tbWFuZGxpbmUgb3IgdmlhIGRtaSBxdWlyayAqLwotc3RhdGljIGludCBkaXNhYmxlX2FwaWNfdGltZXIgX19jcHVpbml0ZGF0YTsKLS8qIExvY2FsIEFQSUMgdGltZXIgd29ya3MgaW4gQzIgKi8KLWludCBsb2NhbF9hcGljX3RpbWVyX2MyX29rOwotRVhQT1JUX1NZTUJPTF9HUEwobG9jYWxfYXBpY190aW1lcl9jMl9vayk7Ci0KLWludCBmaXJzdF9zeXN0ZW1fdmVjdG9yID0gMHhmZTsKLQotY2hhciBzeXN0ZW1fdmVjdG9yc1tOUl9WRUNUT1JTXSA9IHsgWzAgLi4uIE5SX1ZFQ1RPUlMtMV0gPSBTWVNfVkVDVE9SX0ZSRUV9OwotCi0vKgotICogRGVidWcgbGV2ZWwsIGV4cG9ydGVkIGZvciBpb19hcGljLmMKLSAqLwotdW5zaWduZWQgaW50IGFwaWNfdmVyYm9zaXR5OwotCi1pbnQgcGljX21vZGU7Ci0KLS8qIEhhdmUgd2UgZm91bmQgYW4gTVAgdGFibGUgKi8KLWludCBzbXBfZm91bmRfY29uZmlnOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGxhcGljX3Jlc291cmNlID0gewotCS5uYW1lID0gIkxvY2FsIEFQSUMiLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBjYWxpYnJhdGlvbl9yZXN1bHQ7Ci0KLXN0YXRpYyBpbnQgbGFwaWNfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAotCQkJICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCk7Ci1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9zZXR1cChlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKLQkJCSAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCk7Ci1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9icm9hZGNhc3QoY3B1bWFza190IG1hc2spOwotc3RhdGljIHZvaWQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKTsKLQotLyoKLSAqIFRoZSBsb2NhbCBhcGljIHRpbWVyIGNhbiBiZSB1c2VkIGZvciBhbnkgZnVuY3Rpb24gd2hpY2ggaXMgQ1BVIGxvY2FsLgotICovCi1zdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBsYXBpY19jbG9ja2V2ZW50ID0gewotCS5uYW1lCQk9ICJsYXBpYyIsCi0JLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9UCi0JCQl8IENMT0NLX0VWVF9GRUFUX0MzU1RPUCB8IENMT0NLX0VWVF9GRUFUX0RVTU1ZLAotCS5zaGlmdAkJPSAzMiwKLQkuc2V0X21vZGUJPSBsYXBpY190aW1lcl9zZXR1cCwKLQkuc2V0X25leHRfZXZlbnQJPSBsYXBpY19uZXh0X2V2ZW50LAotCS5icm9hZGNhc3QJPSBsYXBpY190aW1lcl9icm9hZGNhc3QsCi0JLnJhdGluZwkJPSAxMDAsCi0JLmlycQkJPSAtMSwKLX07Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgbGFwaWNfZXZlbnRzKTsKLQotLyogTG9jYWwgQVBJQyB3YXMgZGlzYWJsZWQgYnkgdGhlIEJJT1MgYW5kIGVuYWJsZWQgYnkgdGhlIGtlcm5lbCAqLwotc3RhdGljIGludCBlbmFibGVkX3ZpYV9hcGljYmFzZTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgYXBpY19waHlzOwotCi0vKgotICogR2V0IHRoZSBMQVBJQyB2ZXJzaW9uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGxhcGljX2dldF92ZXJzaW9uKHZvaWQpCi17Ci0JcmV0dXJuIEdFVF9BUElDX1ZFUlNJT04oYXBpY19yZWFkKEFQSUNfTFZSKSk7Ci19Ci0KLS8qCi0gKiBDaGVjaywgaWYgdGhlIEFQSUMgaXMgaW50ZWdyYXRlZCBvciBhIHNlcGFyYXRlIGNoaXAKLSAqLwotc3RhdGljIGlubGluZSBpbnQgbGFwaWNfaXNfaW50ZWdyYXRlZCh2b2lkKQotewotI2lmZGVmIENPTkZJR19YODZfNjQKLQlyZXR1cm4gMTsKLSNlbHNlCi0JcmV0dXJuIEFQSUNfSU5URUdSQVRFRChsYXBpY19nZXRfdmVyc2lvbigpKTsKLSNlbmRpZgotfQotCi0vKgotICogQ2hlY2ssIHdoZXRoZXIgdGhpcyBpcyBhIG1vZGVybiBvciBhIGZpcnN0IGdlbmVyYXRpb24gQVBJQwotICovCi1zdGF0aWMgaW50IG1vZGVybl9hcGljKHZvaWQpCi17Ci0JLyogQU1EIHN5c3RlbXMgdXNlIG9sZCBBUElDIHZlcnNpb25zLCBzbyBjaGVjayB0aGUgQ1BVICovCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCAmJgotCSAgICBib290X2NwdV9kYXRhLng4NiA+PSAweGYpCi0JCXJldHVybiAxOwotCXJldHVybiBsYXBpY19nZXRfdmVyc2lvbigpID49IDB4MTQ7Ci19Ci0KLS8qCi0gKiBQYXJhdmlydCBrZXJuZWxzIGFsc28gbWlnaHQgYmUgdXNpbmcgdGhlc2UgYmVsb3cgb3BzLiBTbyB3ZSBzdGlsbAotICogdXNlIGdlbmVyaWMgYXBpY19yZWFkKCkvYXBpY193cml0ZSgpLCB3aGljaCBtaWdodCBiZSBwb2ludGluZyB0byBkaWZmZXJlbnQKLSAqIG9wcyBpbiBQQVJBVklSVCBjYXNlLgotICovCi12b2lkIHhhcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKLXsKLQl3aGlsZSAoYXBpY19yZWFkKEFQSUNfSUNSKSAmIEFQSUNfSUNSX0JVU1kpCi0JCWNwdV9yZWxheCgpOwotfQotCi11MzIgc2FmZV94YXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCi17Ci0JdTMyIHNlbmRfc3RhdHVzOwotCWludCB0aW1lb3V0OwotCi0JdGltZW91dCA9IDA7Ci0JZG8gewotCQlzZW5kX3N0YXR1cyA9IGFwaWNfcmVhZChBUElDX0lDUikgJiBBUElDX0lDUl9CVVNZOwotCQlpZiAoIXNlbmRfc3RhdHVzKQotCQkJYnJlYWs7Ci0JCXVkZWxheSgxMDApOwotCX0gd2hpbGUgKHRpbWVvdXQrKyA8IDEwMDApOwotCi0JcmV0dXJuIHNlbmRfc3RhdHVzOwotfQotCi12b2lkIHhhcGljX2ljcl93cml0ZSh1MzIgbG93LCB1MzIgaWQpCi17Ci0JYXBpY193cml0ZShBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQoaWQpKTsKLQlhcGljX3dyaXRlKEFQSUNfSUNSLCBsb3cpOwotfQotCi11NjQgeGFwaWNfaWNyX3JlYWQodm9pZCkKLXsKLQl1MzIgaWNyMSwgaWNyMjsKLQotCWljcjIgPSBhcGljX3JlYWQoQVBJQ19JQ1IyKTsKLQlpY3IxID0gYXBpY19yZWFkKEFQSUNfSUNSKTsKLQotCXJldHVybiBpY3IxIHwgKCh1NjQpaWNyMiA8PCAzMik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXBpY19vcHMgeGFwaWNfb3BzID0gewotCS5yZWFkID0gbmF0aXZlX2FwaWNfbWVtX3JlYWQsCi0JLndyaXRlID0gbmF0aXZlX2FwaWNfbWVtX3dyaXRlLAotCS5pY3JfcmVhZCA9IHhhcGljX2ljcl9yZWFkLAotCS5pY3Jfd3JpdGUgPSB4YXBpY19pY3Jfd3JpdGUsCi0JLndhaXRfaWNyX2lkbGUgPSB4YXBpY193YWl0X2ljcl9pZGxlLAotCS5zYWZlX3dhaXRfaWNyX2lkbGUgPSBzYWZlX3hhcGljX3dhaXRfaWNyX2lkbGUsCi19OwotCi1zdHJ1Y3QgYXBpY19vcHMgX19yZWFkX21vc3RseSAqYXBpY19vcHMgPSAmeGFwaWNfb3BzOwotRVhQT1JUX1NZTUJPTF9HUEwoYXBpY19vcHMpOwotCi0vKioKLSAqIGVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwIC0gZW5hYmxlIE5NSSB0aHJvdWdoIGxvY2FsIHZlY3RvciB0YWJsZSAwCi0gKi8KLXZvaWQgX19jcHVpbml0IGVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQkvKiB1bm1hc2sgYW5kIHNldCB0byBOTUkgKi8KLQl2ID0gQVBJQ19ETV9OTUk7Ci0KLQkvKiBMZXZlbCB0cmlnZ2VyZWQgZm9yIDgyNDg5RFggKDMyYml0IG1vZGUpICovCi0JaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCi0JCXYgfD0gQVBJQ19MVlRfTEVWRUxfVFJJR0dFUjsKLQotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2KTsKLX0KLQotLyoqCi0gKiBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0IC0gR2V0IG51bWJlciBvZiBwaHlzaWNhbCBicm9hZGNhc3QgSURzCi0gKi8KLWludCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KHZvaWQpCi17Ci0JcmV0dXJuIG1vZGVybl9hcGljKCkgPyAweGZmIDogMHhmOwotfQotCi0vKioKLSAqIGxhcGljX2dldF9tYXhsdnQgLSBnZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxvY2FsIHZlY3RvciB0YWJsZSBlbnRyaWVzCi0gKi8KLWludCBsYXBpY19nZXRfbWF4bHZ0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQkvKgotCSAqIC0gd2UgYWx3YXlzIGhhdmUgQVBJQyBpbnRlZ3JhdGVkIG9uIDY0Yml0IG1vZGUKLQkgKiAtIDgyNDg5RFhzIGRvIG5vdCByZXBvcnQgIyBvZiBMVlQgZW50cmllcwotCSAqLwotCXJldHVybiBBUElDX0lOVEVHUkFURUQoR0VUX0FQSUNfVkVSU0lPTih2KSkgPyBHRVRfQVBJQ19NQVhMVlQodikgOiAyOwotfQotCi0vKgotICogTG9jYWwgQVBJQyB0aW1lcgotICovCi0KLS8qIENsb2NrIGRpdmlzb3IgKi8KLSNpZmRlZiBDT05GR19YODZfNjQKLSNkZWZpbmUgQVBJQ19ESVZJU09SIDEKLSNlbHNlCi0jZGVmaW5lIEFQSUNfRElWSVNPUiAxNgotI2VuZGlmCi0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIGxvY2FsIEFQSUMgdGltZXIsIHdpdGggYSB0aW1lb3V0IG9mCi0gKiAnY2xvY2tzJyBBUElDIGJ1cyBjbG9jay4gRHVyaW5nIGNhbGlicmF0aW9uIHdlIGFjdHVhbGx5IGNhbGwKLSAqIHRoaXMgZnVuY3Rpb24gdHdpY2Ugb24gdGhlIGJvb3QgQ1BVLCBvbmNlIHdpdGggYSBib2d1cyB0aW1lb3V0Ci0gKiB2YWx1ZSwgc2Vjb25kIHRpbWUgZm9yIHJlYWwuIFRoZSBvdGhlciAobm9uY2FsaWJyYXRpbmcpIENQVXMKLSAqIGNhbGwgdGhpcyBmdW5jdGlvbiBvbmx5IG9uY2UsIHdpdGggdGhlIHJlYWwsIGNhbGlicmF0ZWQgdmFsdWUuCi0gKgotICogV2UgZG8gcmVhZHMgYmVmb3JlIHdyaXRlcyBldmVuIGlmIHVubmVjZXNzYXJ5LCB0byBnZXQgYXJvdW5kIHRoZQotICogUDUgQVBJQyBkb3VibGUgd3JpdGUgYnVnLgotICovCi1zdGF0aWMgdm9pZCBfX3NldHVwX0FQSUNfTFZUVCh1bnNpZ25lZCBpbnQgY2xvY2tzLCBpbnQgb25lc2hvdCwgaW50IGlycWVuKQotewotCXVuc2lnbmVkIGludCBsdnR0X3ZhbHVlLCB0bXBfdmFsdWU7Ci0KLQlsdnR0X3ZhbHVlID0gTE9DQUxfVElNRVJfVkVDVE9SOwotCWlmICghb25lc2hvdCkKLQkJbHZ0dF92YWx1ZSB8PSBBUElDX0xWVF9USU1FUl9QRVJJT0RJQzsKLQlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkKLQkJbHZ0dF92YWx1ZSB8PSBTRVRfQVBJQ19USU1FUl9CQVNFKEFQSUNfVElNRVJfQkFTRV9ESVYpOwotCi0JaWYgKCFpcnFlbikKLQkJbHZ0dF92YWx1ZSB8PSBBUElDX0xWVF9NQVNLRUQ7Ci0KLQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgbHZ0dF92YWx1ZSk7Ci0KLQkvKgotCSAqIERpdmlkZSBQSUNMSyBieSAxNgotCSAqLwotCXRtcF92YWx1ZSA9IGFwaWNfcmVhZChBUElDX1REQ1IpOwotCWFwaWNfd3JpdGUoQVBJQ19URENSLAotCQkodG1wX3ZhbHVlICYgfihBUElDX1REUl9ESVZfMSB8IEFQSUNfVERSX0RJVl9UTUJBU0UpKSB8Ci0JCUFQSUNfVERSX0RJVl8xNik7Ci0KLQlpZiAoIW9uZXNob3QpCi0JCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgY2xvY2tzIC8gQVBJQ19ESVZJU09SKTsKLX0KLQotLyoKLSAqIFNldHVwIGV4dGVuZGVkIExWVCwgQU1EIHNwZWNpZmljIChLOCwgZmFtaWx5IDEwaCkKLSAqCi0gKiBWZWN0b3IgbWFwcGluZ3MgYXJlIGhhcmQgY29kZWQuIE9uIEs4IG9ubHkgb2Zmc2V0IDAgKEFQSUM1MDApIGFuZAotICogTUNFIGludGVycnVwdHMgYXJlIHN1cHBvcnRlZC4gVGh1cyBNQ0Ugb2Zmc2V0IG11c3QgYmUgc2V0IHRvIDAuCi0gKgotICogSWYgbWFzaz0xLCB0aGUgTFZUIGVudHJ5IGRvZXMgbm90IGdlbmVyYXRlIGludGVycnVwdHMgd2hpbGUgbWFzaz0wCi0gKiBlbmFibGVzIHRoZSB2ZWN0b3IuIFNlZSBhbHNvIHRoZSBCS0RHcy4KLSAqLwotCi0jZGVmaW5lIEFQSUNfRUlMVlRfTFZUT0ZGX01DRSAwCi0jZGVmaW5lIEFQSUNfRUlMVlRfTFZUT0ZGX0lCUyAxCi0KLXN0YXRpYyB2b2lkIHNldHVwX0FQSUNfZWlsdnQodTggbHZ0X29mZiwgdTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIHJlZyA9IChsdnRfb2ZmIDw8IDQpICsgQVBJQ19FSUxWVDA7Ci0JdW5zaWduZWQgaW50ICB2ICAgPSAobWFzayA8PCAxNikgfCAobXNnX3R5cGUgPDwgOCkgfCB2ZWN0b3I7Ci0KLQlhcGljX3dyaXRlKHJlZywgdik7Ci19Ci0KLXU4IHNldHVwX0FQSUNfZWlsdnRfbWNlKHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spCi17Ci0Jc2V0dXBfQVBJQ19laWx2dChBUElDX0VJTFZUX0xWVE9GRl9NQ0UsIHZlY3RvciwgbXNnX3R5cGUsIG1hc2spOwotCXJldHVybiBBUElDX0VJTFZUX0xWVE9GRl9NQ0U7Ci19Ci0KLXU4IHNldHVwX0FQSUNfZWlsdnRfaWJzKHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spCi17Ci0Jc2V0dXBfQVBJQ19laWx2dChBUElDX0VJTFZUX0xWVE9GRl9JQlMsIHZlY3RvciwgbXNnX3R5cGUsIG1hc2spOwotCXJldHVybiBBUElDX0VJTFZUX0xWVE9GRl9JQlM7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChzZXR1cF9BUElDX2VpbHZ0X2licyk7Ci0KLS8qCi0gKiBQcm9ncmFtIHRoZSBuZXh0IGV2ZW50LCByZWxhdGl2ZSB0byBub3cKLSAqLwotc3RhdGljIGludCBsYXBpY19uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCi0JCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQotewotCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgZGVsdGEpOwotCXJldHVybiAwOwotfQotCi0vKgotICogU2V0dXAgdGhlIGxhcGljIHRpbWVyIGluIHBlcmlvZGljIG9yIG9uZXNob3QgbW9kZQotICovCi1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9zZXR1cChlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKLQkJCSAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCB2OwotCi0JLyogTGFwaWMgdXNlZCBhcyBkdW1teSBmb3IgYnJvYWRjYXN0ID8gKi8KLQlpZiAoZXZ0LT5mZWF0dXJlcyAmIENMT0NLX0VWVF9GRUFUX0RVTU1ZKQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKLQkJX19zZXR1cF9BUElDX0xWVFQoY2FsaWJyYXRpb25fcmVzdWx0LAotCQkJCSAgbW9kZSAhPSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQywgMSk7Ci0JCWJyZWFrOwotCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgotCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046Ci0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQkJdiB8PSAoQVBJQ19MVlRfTUFTS0VEIHwgTE9DQUxfVElNRVJfVkVDVE9SKTsKLQkJYXBpY193cml0ZShBUElDX0xWVFQsIHYpOwotCQlicmVhazsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKLQkJLyogTm90aGluZyB0byBkbyBoZXJlICovCi0JCWJyZWFrOwotCX0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyoKLSAqIExvY2FsIEFQSUMgdGltZXIgYnJvYWRjYXN0IGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyB2b2lkIGxhcGljX3RpbWVyX2Jyb2FkY2FzdChjcHVtYXNrX3QgbWFzaykKLXsKLSNpZmRlZiBDT05GSUdfU01QCi0Jc2VuZF9JUElfbWFzayhtYXNrLCBMT0NBTF9USU1FUl9WRUNUT1IpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBTZXR1cCB0aGUgbG9jYWwgQVBJQyB0aW1lciBmb3IgdGhpcyBDUFUuIENvcHkgdGhlIGluaXRpbGl6ZWQgdmFsdWVzCi0gKiBvZiB0aGUgYm9vdCBDUFUgYW5kIHJlZ2lzdGVyIHRoZSBjbG9jayBldmVudCBpbiB0aGUgZnJhbWV3b3JrLgotICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc2V0dXBfQVBJQ190aW1lcih2b2lkKQotewotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmxldnQgPSAmX19nZXRfY3B1X3ZhcihsYXBpY19ldmVudHMpOwotCi0JbWVtY3B5KGxldnQsICZsYXBpY19jbG9ja2V2ZW50LCBzaXplb2YoKmxldnQpKTsKLQlsZXZ0LT5jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShsZXZ0KTsKLX0KLQotLyoKLSAqIEluIHRoaXMgZnVuY3Rpb25zIHdlIGNhbGlicmF0ZSBBUElDIGJ1cyBjbG9ja3MgdG8gdGhlIGV4dGVybmFsIHRpbWVyLgotICoKLSAqIFdlIHdhbnQgdG8gZG8gdGhlIGNhbGlicmF0aW9uIG9ubHkgb25jZSBzaW5jZSB3ZSB3YW50IHRvIGhhdmUgbG9jYWwgdGltZXIKLSAqIGlycXMgc3luY3Jvbi4gQ1BVcyBjb25uZWN0ZWQgYnkgdGhlIHNhbWUgQVBJQyBidXMgaGF2ZSB0aGUgdmVyeSBzYW1lIGJ1cwotICogZnJlcXVlbmN5LgotICoKLSAqIFRoaXMgd2FzIHByZXZpb3VzbHkgZG9uZSBieSByZWFkaW5nIHRoZSBQSVQvSFBFVCBhbmQgd2FpdGluZyBmb3IgYSB3cmFwCi0gKiBhcm91bmQgdG8gZmluZCBvdXQsIHRoYXQgYSB0aWNrIGhhcyBlbGFwc2VkLiBJIGhhdmUgYSBib3gsIHdoZXJlIHRoZSBQSVQKLSAqIHJlYWRvdXQgaXMgYnJva2VuLCBzbyBpdCBuZXZlciBnZXRzIG91dCBvZiB0aGUgd2FpdCBsb29wIGFnYWluLiBUaGlzIHdhcwotICogYWxzbyByZXBvcnRlZCBieSBvdGhlcnMuCi0gKgotICogTW9uaXRvcmluZyB0aGUgamlmZmllcyB2YWx1ZSBpcyBpbmFjY3VyYXRlIGFuZCB0aGUgY2xvY2tldmVudHMKLSAqIGluZnJhc3RydWN0dXJlIGFsbG93cyB1cyB0byBkbyBhIHNpbXBsZSBzdWJzdGl0dXRpb24gb2YgdGhlIGludGVycnVwdAotICogaGFuZGxlci4KLSAqCi0gKiBUaGUgY2FsaWJyYXRpb24gcm91dGluZSBhbHNvIHVzZXMgdGhlIHBtX3RpbWVyIHdoZW4gcG9zc2libGUsIGFzIHRoZSBQSVQKLSAqIGhhcHBlbnMgdG8gcnVuIHdheSB0b28gc2xvdyAoZmFjdG9yIDIuMyBvbiBteSBWQUlPIENvcmVEdW8sIHdoaWNoIGdvZXMKLSAqIGJhY2sgdG8gbm9ybWFsIGxhdGVyIGluIHRoZSBib290IHByb2Nlc3MpLgotICovCi0KLSNkZWZpbmUgTEFQSUNfQ0FMX0xPT1BTCQkoSFovMTApCi0KLXN0YXRpYyBfX2luaXRkYXRhIGludCBsYXBpY19jYWxfbG9vcHMgPSAtMTsKLXN0YXRpYyBfX2luaXRkYXRhIGxvbmcgbGFwaWNfY2FsX3QxLCBsYXBpY19jYWxfdDI7Ci1zdGF0aWMgX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIGxvbmcgbGFwaWNfY2FsX3RzYzEsIGxhcGljX2NhbF90c2MyOwotc3RhdGljIF9faW5pdGRhdGEgdW5zaWduZWQgbG9uZyBsYXBpY19jYWxfcG0xLCBsYXBpY19jYWxfcG0yOwotc3RhdGljIF9faW5pdGRhdGEgdW5zaWduZWQgbG9uZyBsYXBpY19jYWxfajEsIGxhcGljX2NhbF9qMjsKLQotLyoKLSAqIFRlbXBvcmFyeSBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IGxhcGljX2NhbF9oYW5kbGVyKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdHNjID0gMDsKLQlsb25nIHRhcGljID0gYXBpY19yZWFkKEFQSUNfVE1DQ1QpOwotCXVuc2lnbmVkIGxvbmcgcG0gPSBhY3BpX3BtX3JlYWRfZWFybHkoKTsKLQotCWlmIChjcHVfaGFzX3RzYykKLQkJcmR0c2NsbCh0c2MpOwotCi0Jc3dpdGNoIChsYXBpY19jYWxfbG9vcHMrKykgewotCWNhc2UgMDoKLQkJbGFwaWNfY2FsX3QxID0gdGFwaWM7Ci0JCWxhcGljX2NhbF90c2MxID0gdHNjOwotCQlsYXBpY19jYWxfcG0xID0gcG07Ci0JCWxhcGljX2NhbF9qMSA9IGppZmZpZXM7Ci0JCWJyZWFrOwotCi0JY2FzZSBMQVBJQ19DQUxfTE9PUFM6Ci0JCWxhcGljX2NhbF90MiA9IHRhcGljOwotCQlsYXBpY19jYWxfdHNjMiA9IHRzYzsKLQkJaWYgKHBtIDwgbGFwaWNfY2FsX3BtMSkKLQkJCXBtICs9IEFDUElfUE1fT1ZSUlVOOwotCQlsYXBpY19jYWxfcG0yID0gcG07Ci0JCWxhcGljX2NhbF9qMiA9IGppZmZpZXM7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgY2FsaWJyYXRlX0FQSUNfY2xvY2sodm9pZCkKLXsKLQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpsZXZ0ID0gJl9fZ2V0X2NwdV92YXIobGFwaWNfZXZlbnRzKTsKLQljb25zdCBsb25nIHBtXzEwMG1zID0gUE1UTVJfVElDS1NfUEVSX1NFQy8xMDsKLQljb25zdCBsb25nIHBtX3RocmVzaCA9IHBtXzEwMG1zLzEwMDsKLQl2b2lkICgqcmVhbF9oYW5kbGVyKShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpOwotCXVuc2lnbmVkIGxvbmcgZGVsdGFqOwotCWxvbmcgZGVsdGEsIGRlbHRhcG07Ci0JaW50IHBtX3JlZmVyZW5jZWQgPSAwOwotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCS8qIFJlcGxhY2UgdGhlIGdsb2JhbCBpbnRlcnJ1cHQgaGFuZGxlciAqLwotCXJlYWxfaGFuZGxlciA9IGdsb2JhbF9jbG9ja19ldmVudC0+ZXZlbnRfaGFuZGxlcjsKLQlnbG9iYWxfY2xvY2tfZXZlbnQtPmV2ZW50X2hhbmRsZXIgPSBsYXBpY19jYWxfaGFuZGxlcjsKLQotCS8qCi0JICogU2V0dXAgdGhlIEFQSUMgY291bnRlciB0byAxZTkuIFRoZXJlIGlzIG5vIHdheSB0aGUgbGFwaWMKLQkgKiBjYW4gdW5kZXJmbG93IGluIHRoZSAxMDBtcyBkZXRlY3Rpb24gdGltZSBmcmFtZQotCSAqLwotCV9fc2V0dXBfQVBJQ19MVlRUKDEwMDAwMDAwMDAsIDAsIDApOwotCi0JLyogTGV0IHRoZSBpbnRlcnJ1cHRzIHJ1biAqLwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQotCXdoaWxlIChsYXBpY19jYWxfbG9vcHMgPD0gTEFQSUNfQ0FMX0xPT1BTKQotCQljcHVfcmVsYXgoKTsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLQkvKiBSZXN0b3JlIHRoZSByZWFsIGV2ZW50IGhhbmRsZXIgKi8KLQlnbG9iYWxfY2xvY2tfZXZlbnQtPmV2ZW50X2hhbmRsZXIgPSByZWFsX2hhbmRsZXI7Ci0KLQkvKiBCdWlsZCBkZWx0YSB0MS10MiBhcyBhcGljIHRpbWVyIGNvdW50cyBkb3duICovCi0JZGVsdGEgPSBsYXBpY19jYWxfdDEgLSBsYXBpY19jYWxfdDI7Ci0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIGxhcGljIGRlbHRhID0gJWxkXG4iLCBkZWx0YSk7Ci0KLQkvKiBDaGVjaywgaWYgdGhlIFBNIHRpbWVyIGlzIGF2YWlsYWJsZSAqLwotCWRlbHRhcG0gPSBsYXBpY19jYWxfcG0yIC0gbGFwaWNfY2FsX3BtMTsKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0gdGltZXIgZGVsdGEgPSAlbGRcbiIsIGRlbHRhcG0pOwotCi0JaWYgKGRlbHRhcG0pIHsKLQkJdW5zaWduZWQgbG9uZyBtdWx0OwotCQl1NjQgcmVzOwotCi0JCW11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KFBNVE1SX1RJQ0tTX1BFUl9TRUMsIDIyKTsKLQotCQlpZiAoZGVsdGFwbSA+IChwbV8xMDBtcyAtIHBtX3RocmVzaCkgJiYKLQkJICAgIGRlbHRhcG0gPCAocG1fMTAwbXMgKyBwbV90aHJlc2gpKSB7Ci0JCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gUE0gdGltZXIgcmVzdWx0IG9rXG4iKTsKLQkJfSBlbHNlIHsKLQkJCXJlcyA9ICgoKHU2NCkgZGVsdGFwbSkgKiAgbXVsdCkgPj4gMjI7Ci0JCQlkb19kaXYocmVzLCAxMDAwMDAwKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFQSUMgY2FsaWJyYXRpb24gbm90IGNvbnNpc3RlbnQgIgotCQkJICAgICAgICJ3aXRoIFBNIFRpbWVyOiAlbGRtcyBpbnN0ZWFkIG9mIDEwMG1zXG4iLAotCQkJICAgICAgIChsb25nKXJlcyk7Ci0JCQkvKiBDb3JyZWN0IHRoZSBsYXBpYyBjb3VudGVyIHZhbHVlICovCi0JCQlyZXMgPSAoKCh1NjQpIGRlbHRhKSAqIHBtXzEwMG1zKTsKLQkJCWRvX2RpdihyZXMsIGRlbHRhcG0pOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiQVBJQyBkZWx0YSBhZGp1c3RlZCB0byBQTS1UaW1lcjogIgotCQkJICAgICAgICIlbHUgKCVsZClcbiIsICh1bnNpZ25lZCBsb25nKSByZXMsIGRlbHRhKTsKLQkJCWRlbHRhID0gKGxvbmcpIHJlczsKLQkJfQotCQlwbV9yZWZlcmVuY2VkID0gMTsKLQl9Ci0KLQkvKiBDYWxjdWxhdGUgdGhlIHNjYWxlZCBtYXRoIG11bHRpcGxpY2F0aW9uIGZhY3RvciAqLwotCWxhcGljX2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhkZWx0YSwgVElDS19OU0VDICogTEFQSUNfQ0FMX0xPT1BTLAotCQkJCSAgICAgICBsYXBpY19jbG9ja2V2ZW50LnNoaWZ0KTsKLQlsYXBpY19jbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9Ci0JCWNsb2NrZXZlbnRfZGVsdGEybnMoMHg3RkZGRkYsICZsYXBpY19jbG9ja2V2ZW50KTsKLQlsYXBpY19jbG9ja2V2ZW50Lm1pbl9kZWx0YV9ucyA9Ci0JCWNsb2NrZXZlbnRfZGVsdGEybnMoMHhGLCAmbGFwaWNfY2xvY2tldmVudCk7Ci0KLQljYWxpYnJhdGlvbl9yZXN1bHQgPSAoZGVsdGEgKiBBUElDX0RJVklTT1IpIC8gTEFQSUNfQ0FMX0xPT1BTOwotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gZGVsdGEgJWxkXG4iLCBkZWx0YSk7Ci0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gbXVsdDogJWxkXG4iLCBsYXBpY19jbG9ja2V2ZW50Lm11bHQpOwotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIGNhbGlicmF0aW9uIHJlc3VsdDogJXVcbiIsCi0JCSAgICBjYWxpYnJhdGlvbl9yZXN1bHQpOwotCi0JaWYgKGNwdV9oYXNfdHNjKSB7Ci0JCWRlbHRhID0gKGxvbmcpKGxhcGljX2NhbF90c2MyIC0gbGFwaWNfY2FsX3RzYzEpOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBDUFUgY2xvY2sgc3BlZWQgaXMgIgotCQkJICAgICIlbGQuJTA0bGQgTUh6LlxuIiwKLQkJCSAgICAoZGVsdGEgLyBMQVBJQ19DQUxfTE9PUFMpIC8gKDEwMDAwMDAgLyBIWiksCi0JCQkgICAgKGRlbHRhIC8gTEFQSUNfQ0FMX0xPT1BTKSAlICgxMDAwMDAwIC8gSFopKTsKLQl9Ci0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBob3N0IGJ1cyBjbG9jayBzcGVlZCBpcyAiCi0JCSAgICAiJXUuJTA0dSBNSHouXG4iLAotCQkgICAgY2FsaWJyYXRpb25fcmVzdWx0IC8gKDEwMDAwMDAgLyBIWiksCi0JCSAgICBjYWxpYnJhdGlvbl9yZXN1bHQgJSAoMTAwMDAwMCAvIEhaKSk7Ci0KLQkvKgotCSAqIERvIGEgc2FuaXR5IGNoZWNrIG9uIHRoZSBBUElDIGNhbGlicmF0aW9uIHJlc3VsdAotCSAqLwotCWlmIChjYWxpYnJhdGlvbl9yZXN1bHQgPCAoMTAwMDAwMCAvIEhaKSkgewotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJBUElDIGZyZXF1ZW5jeSB0b28gc2xvdywgZGlzYWJsaW5nIGFwaWMgdGltZXJcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JbGV2dC0+ZmVhdHVyZXMgJj0gfkNMT0NLX0VWVF9GRUFUX0RVTU1ZOwotCi0JLyogV2UgdHJ1c3QgdGhlIHBtIHRpbWVyIGJhc2VkIGNhbGlicmF0aW9uICovCi0JaWYgKCFwbV9yZWZlcmVuY2VkKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLiB2ZXJpZnkgQVBJQyB0aW1lclxuIik7Ci0KLQkJLyoKLQkJICogU2V0dXAgdGhlIGFwaWMgdGltZXIgbWFudWFsbHkKLQkJICovCi0JCWxldnQtPmV2ZW50X2hhbmRsZXIgPSBsYXBpY19jYWxfaGFuZGxlcjsKLQkJbGFwaWNfdGltZXJfc2V0dXAoQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMsIGxldnQpOwotCQlsYXBpY19jYWxfbG9vcHMgPSAtMTsKLQotCQkvKiBMZXQgdGhlIGludGVycnVwdHMgcnVuICovCi0JCWxvY2FsX2lycV9lbmFibGUoKTsKLQotCQl3aGlsZSAobGFwaWNfY2FsX2xvb3BzIDw9IExBUElDX0NBTF9MT09QUykKLQkJCWNwdV9yZWxheCgpOwotCi0JCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLQkJLyogU3RvcCB0aGUgbGFwaWMgdGltZXIgKi8KLQkJbGFwaWNfdGltZXJfc2V0dXAoQ0xPQ0tfRVZUX01PREVfU0hVVERPV04sIGxldnQpOwotCi0JCWxvY2FsX2lycV9lbmFibGUoKTsKLQotCQkvKiBKaWZmaWVzIGRlbHRhICovCi0JCWRlbHRhaiA9IGxhcGljX2NhbF9qMiAtIGxhcGljX2NhbF9qMTsKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIGppZmZpZXMgZGVsdGEgPSAlbHVcbiIsIGRlbHRhaik7Ci0KLQkJLyogQ2hlY2ssIGlmIHRoZSBqaWZmaWVzIHJlc3VsdCBpcyBjb25zaXN0ZW50ICovCi0JCWlmIChkZWx0YWogPj0gTEFQSUNfQ0FMX0xPT1BTLTIgJiYgZGVsdGFqIDw9IExBUElDX0NBTF9MT09QUysyKQotCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIGppZmZpZXMgcmVzdWx0IG9rXG4iKTsKLQkJZWxzZQotCQkJbGV2dC0+ZmVhdHVyZXMgfD0gQ0xPQ0tfRVZUX0ZFQVRfRFVNTVk7Ci0JfSBlbHNlCi0JCWxvY2FsX2lycV9lbmFibGUoKTsKLQotCWlmIChsZXZ0LT5mZWF0dXJlcyAmIENMT0NLX0VWVF9GRUFUX0RVTU1ZKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJBUElDIHRpbWVyIGRpc2FibGVkIGR1ZSB0byB2ZXJpZmljYXRpb24gZmFpbHVyZS5cbiIpOwotCQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogU2V0dXAgdGhlIGJvb3QgQVBJQwotICoKLSAqIENhbGlicmF0ZSBhbmQgdmVyaWZ5IHRoZSByZXN1bHQuCi0gKi8KLXZvaWQgX19pbml0IHNldHVwX2Jvb3RfQVBJQ19jbG9jayh2b2lkKQotewotCS8qCi0JICogVGhlIGxvY2FsIGFwaWMgdGltZXIgY2FuIGJlIGRpc2FibGVkIHZpYSB0aGUga2VybmVsCi0JICogY29tbWFuZGxpbmUgb3IgZnJvbSB0aGUgQ1BVIGRldGVjdGlvbiBjb2RlLiBSZWdpc3RlciB0aGUgbGFwaWMKLQkgKiB0aW1lciBhcyBhIGR1bW15IGNsb2NrIGV2ZW50IHNvdXJjZSBvbiBTTVAgc3lzdGVtcywgc28gdGhlCi0JICogYnJvYWRjYXN0IG1lY2hhbmlzbSBpcyB1c2VkLiBPbiBVUCBzeXN0ZW1zIHNpbXBseSBpZ25vcmUgaXQuCi0JICovCi0JaWYgKGRpc2FibGVfYXBpY190aW1lcikgewotCQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgQVBJQyB0aW1lclxuIik7Ci0JCS8qIE5vIGJyb2FkY2FzdCBvbiBVUCAhICovCi0JCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkgewotCQkJbGFwaWNfY2xvY2tldmVudC5tdWx0ID0gMTsKLQkJCXNldHVwX0FQSUNfdGltZXIoKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiVXNpbmcgbG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHRzLlxuIgotCQkgICAgImNhbGlicmF0aW5nIEFQSUMgdGltZXIgLi4uXG4iKTsKLQotCWlmIChjYWxpYnJhdGVfQVBJQ19jbG9jaygpKSB7Ci0JCS8qIE5vIGJyb2FkY2FzdCBvbiBVUCAhICovCi0JCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkKLQkJCXNldHVwX0FQSUNfdGltZXIoKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogSWYgbm1pX3dhdGNoZG9nIGlzIHNldCB0byBJT19BUElDLCB3ZSBuZWVkIHRoZQotCSAqIFBJVC9IUEVUIGdvaW5nLiAgT3RoZXJ3aXNlIHJlZ2lzdGVyIGxhcGljIGFzIGEgZHVtbXkKLQkgKiBkZXZpY2UuCi0JICovCi0JaWYgKG5taV93YXRjaGRvZyAhPSBOTUlfSU9fQVBJQykKLQkJbGFwaWNfY2xvY2tldmVudC5mZWF0dXJlcyAmPSB+Q0xPQ0tfRVZUX0ZFQVRfRFVNTVk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUElDIHRpbWVyIHJlZ2lzdGVyZWQgYXMgZHVtbXksIgotCQkJIiBkdWUgdG8gbm1pX3dhdGNoZG9nPSVkIVxuIiwgbm1pX3dhdGNoZG9nKTsKLQotCS8qIFNldHVwIHRoZSBsYXBpYyBvciByZXF1ZXN0IHRoZSBicm9hZGNhc3QgKi8KLQlzZXR1cF9BUElDX3RpbWVyKCk7Ci19Ci0KLXZvaWQgX19kZXZpbml0IHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrKHZvaWQpCi17Ci0Jc2V0dXBfQVBJQ190aW1lcigpOwotfQotCi0vKgotICogVGhlIGd1dHMgb2YgdGhlIGFwaWMgdGltZXIgaW50ZXJydXB0Ci0gKi8KLXN0YXRpYyB2b2lkIGxvY2FsX2FwaWNfdGltZXJfaW50ZXJydXB0KHZvaWQpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmcGVyX2NwdShsYXBpY19ldmVudHMsIGNwdSk7Ci0KLQkvKgotCSAqIE5vcm1hbGx5IHdlIHNob3VsZCBub3QgYmUgaGVyZSB0aWxsIExBUElDIGhhcyBiZWVuIGluaXRpYWxpemVkIGJ1dAotCSAqIGluIHNvbWUgY2FzZXMgbGlrZSBrZHVtcCwgaXRzIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgYSBwZW5kaW5nIExBUElDCi0JICogdGltZXIgaW50ZXJydXB0IGZyb20gcHJldmlvdXMga2VybmVsJ3MgY29udGV4dCBhbmQgaXMgZGVsaXZlcmVkIGluCi0JICogbmV3IGtlcm5lbCB0aGUgbW9tZW50IGludGVycnVwdHMgYXJlIGVuYWJsZWQuCi0JICoKLQkgKiBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGVhcmx5IGFuZCBMQVBJQyBpcyBzZXR1cCBtdWNoIGxhdGVyLCBoZW5jZQotCSAqIGl0cyBwb3NzaWJsZSB0aGF0IHdoZW4gd2UgZ2V0IGhlcmUgZXZ0LT5ldmVudF9oYW5kbGVyIGlzIE5VTEwuCi0JICogQ2hlY2sgZm9yIGV2ZW50X2hhbmRsZXIgYmVpbmcgTlVMTCBhbmQgZGlzY2FyZCB0aGUgaW50ZXJydXB0IGFzCi0JICogc3B1cmlvdXMuCi0JICovCi0JaWYgKCFldnQtPmV2ZW50X2hhbmRsZXIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIlNwdXJpb3VzIExBUElDIHRpbWVyIGludGVycnVwdCBvbiBjcHUgJWRcbiIsIGNwdSk7Ci0JCS8qIFN3aXRjaCBpdCBvZmYgKi8KLQkJbGFwaWNfdGltZXJfc2V0dXAoQ0xPQ0tfRVZUX01PREVfU0hVVERPV04sIGV2dCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIHRoZSBOTUkgZGVhZGxvY2stZGV0ZWN0b3IgdXNlcyB0aGlzLgotCSAqLwotI2lmZGVmIENPTkZJR19YODZfNjQKLQlhZGRfcGRhKGFwaWNfdGltZXJfaXJxcywgMSk7Ci0jZWxzZQotCXBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuYXBpY190aW1lcl9pcnFzKys7Ci0jZW5kaWYKLQotCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOwotfQotCi0vKgotICogTG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHQuIFRoaXMgaXMgdGhlIG1vc3QgbmF0dXJhbCB3YXkgZm9yIGRvaW5nCi0gKiBsb2NhbCBpbnRlcnJ1cHRzLCBidXQgbG9jYWwgdGltZXIgaW50ZXJydXB0cyBjYW4gYmUgZW11bGF0ZWQgYnkKLSAqIGJyb2FkY2FzdCBpbnRlcnJ1cHRzIHRvby4gW2luIGNhc2UgdGhlIGh3IGRvZXNuJ3Qgc3VwcG9ydCBBUElDIHRpbWVyc10KLSAqCi0gKiBbIGlmIGEgc2luZ2xlLUNQVSBzeXN0ZW0gcnVucyBhbiBTTVAga2VybmVsIHRoZW4gd2UgY2FsbCB0aGUgbG9jYWwKLSAqICAgaW50ZXJydXB0IGFzIHdlbGwuIFRodXMgd2UgY2Fubm90IGlubGluZSB0aGUgbG9jYWwgaXJxIC4uLiBdCi0gKi8KLXZvaWQgc21wX2FwaWNfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKLQotCS8qCi0JICogTk9URSEgV2UnZCBiZXR0ZXIgQUNLIHRoZSBpcnEgaW1tZWRpYXRlbHksCi0JICogYmVjYXVzZSB0aW1lciBoYW5kbGluZyBjYW4gYmUgc2xvdy4KLQkgKi8KLQlhY2tfQVBJQ19pcnEoKTsKLQkvKgotCSAqIHVwZGF0ZV9wcm9jZXNzX3RpbWVzKCkgZXhwZWN0cyB1cyB0byBoYXZlIGRvbmUgaXJxX2VudGVyKCkuCi0JICogQmVzaWRlcywgaWYgd2UgZG9uJ3QgdGltZXIgaW50ZXJydXB0cyBpZ25vcmUgdGhlIGdsb2JhbAotCSAqIGludGVycnVwdCBsb2NrLCB3aGljaCBpcyB0aGUgV3JvbmdUaGluZyAodG0pIHRvIGRvLgotCSAqLwotCWlycV9lbnRlcigpOwotCWxvY2FsX2FwaWNfdGltZXJfaW50ZXJydXB0KCk7Ci0JaXJxX2V4aXQoKTsKLQotCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Ci19Ci0KLWludCBzZXR1cF9wcm9maWxpbmdfdGltZXIodW5zaWduZWQgaW50IG11bHRpcGxpZXIpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qCi0gKiBMb2NhbCBBUElDIHN0YXJ0IGFuZCBzaHV0ZG93bgotICovCi0KLS8qKgotICogY2xlYXJfbG9jYWxfQVBJQyAtIHNodXRkb3duIHRoZSBsb2NhbCBBUElDCi0gKgotICogVGhpcyBpcyBjYWxsZWQsIHdoZW4gYSBDUFUgaXMgZGlzYWJsZWQgYW5kIGJlZm9yZSByZWJvb3RpbmcsIHNvIHRoZSBzdGF0ZSBvZgotICogdGhlIGxvY2FsIEFQSUMgaGFzIG5vIGRhbmdsaW5nIGxlZnRvdmVycy4gQWxzbyB1c2VkIHRvIGNsZWFub3V0IGFueSBCSU9TCi0gKiBsZWZ0b3ZlcnMgZHVyaW5nIGJvb3QuCi0gKi8KLXZvaWQgY2xlYXJfbG9jYWxfQVBJQyh2b2lkKQotewotCWludCBtYXhsdnQ7Ci0JdTMyIHY7Ci0KLQkvKiBBUElDIGhhc24ndCBiZWVuIG1hcHBlZCB5ZXQgKi8KLQlpZiAoIWFwaWNfcGh5cykKLQkJcmV0dXJuOwotCi0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCS8qCi0JICogTWFza2luZyBhbiBMVlQgZW50cnkgY2FuIHRyaWdnZXIgYSBsb2NhbCBBUElDIGVycm9yCi0JICogaWYgdGhlIHZlY3RvciBpcyB6ZXJvLiBNYXNrIExWVEVSUiBmaXJzdCB0byBwcmV2ZW50IHRoaXMuCi0JICovCi0JaWYgKG1heGx2dCA+PSAzKSB7Ci0JCXYgPSBFUlJPUl9BUElDX1ZFQ1RPUjsgLyogYW55IG5vbi16ZXJvIHZlY3RvciB3aWxsIGRvICovCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCX0KLQkvKgotCSAqIENhcmVmdWw6IHdlIGhhdmUgdG8gc2V0IG1hc2tzIG9ubHkgZmlyc3QgdG8gZGVhc3NlcnQKLQkgKiBhbnkgbGV2ZWwtdHJpZ2dlcmVkIHNvdXJjZXMuCi0JICovCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JaWYgKG1heGx2dCA+PSA0KSB7Ci0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JfQotCi0JLyogbGV0cyBub3QgdG91Y2ggdGhpcyBpZiB3ZSBkaWRuJ3QgZnJvYiBpdCAqLwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKFg4Nl9NQ0VfSU5URUwpCi0JaWYgKG1heGx2dCA+PSA1KSB7Ci0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKLQkJYXBpY193cml0ZShBUElDX0xWVFRITVIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCX0KLSNlbmRpZgotCS8qCi0JICogQ2xlYW4gQVBJQyBzdGF0ZSBmb3Igb3RoZXIgT1NzOgotCSAqLwotCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBBUElDX0xWVF9NQVNLRUQpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCBBUElDX0xWVF9NQVNLRUQpOwotCWlmIChtYXhsdnQgPj0gMykKLQkJYXBpY193cml0ZShBUElDX0xWVEVSUiwgQVBJQ19MVlRfTUFTS0VEKTsKLQlpZiAobWF4bHZ0ID49IDQpCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19MVlRfTUFTS0VEKTsKLQotCS8qIEludGVncmF0ZWQgQVBJQyAoITgyNDg5RFgpID8gKi8KLQlpZiAobGFwaWNfaXNfaW50ZWdyYXRlZCgpKSB7Ci0JCWlmIChtYXhsdnQgPiAzKQotCQkJLyogQ2xlYXIgRVNSIGR1ZSB0byBQZW50aXVtIGVycmF0YSAzQVAgYW5kIDExQVAgKi8KLQkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQlhcGljX3JlYWQoQVBJQ19FU1IpOwotCX0KLX0KLQotLyoqCi0gKiBkaXNhYmxlX2xvY2FsX0FQSUMgLSBjbGVhciBhbmQgZGlzYWJsZSB0aGUgbG9jYWwgQVBJQwotICovCi12b2lkIGRpc2FibGVfbG9jYWxfQVBJQyh2b2lkKQotewotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCWNsZWFyX2xvY2FsX0FQSUMoKTsKLQotCS8qCi0JICogRGlzYWJsZSBBUElDIChpbXBsaWVzIGNsZWFyaW5nIG9mIHJlZ2lzdGVycwotCSAqIGZvciA4MjQ4OURYISkuCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQl2YWx1ZSAmPSB+QVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCS8qCi0JICogV2hlbiBMQVBJQyB3YXMgZGlzYWJsZWQgYnkgdGhlIEJJT1MgYW5kIGVuYWJsZWQgYnkgdGhlIGtlcm5lbCwKLQkgKiByZXN0b3JlIHRoZSBkaXNhYmxlZCBzdGF0ZS4KLQkgKi8KLQlpZiAoZW5hYmxlZF92aWFfYXBpY2Jhc2UpIHsKLQkJdW5zaWduZWQgaW50IGwsIGg7Ci0KLQkJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCQlsICY9IH5NU1JfSUEzMl9BUElDQkFTRV9FTkFCTEU7Ci0JCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQl9Ci0jZW5kaWYKLX0KLQotLyoKLSAqIElmIExpbnV4IGVuYWJsZWQgdGhlIExBUElDIGFnYWluc3QgdGhlIEJJT1MgZGVmYXVsdCBkaXNhYmxlIGl0IGRvd24gYmVmb3JlCi0gKiByZS1lbnRlcmluZyB0aGUgQklPUyBvbiBzaHV0ZG93bi4gIE90aGVyd2lzZSB0aGUgQklPUyBtYXkgZ2V0IGNvbmZ1c2VkIGFuZAotICogbm90IHBvd2VyLW9mZi4gIEFkZGl0aW9uYWxseSBjbGVhciBhbGwgTFZUIGVudHJpZXMgYmVmb3JlIGRpc2FibGVfbG9jYWxfQVBJQwotICogZm9yIHRoZSBjYXNlIHdoZXJlIExpbnV4IGRpZG4ndCBlbmFibGUgdGhlIExBUElDLgotICovCi12b2lkIGxhcGljX3NodXRkb3duKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghY3B1X2hhc19hcGljKQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKCFlbmFibGVkX3ZpYV9hcGljYmFzZSkKLQkJY2xlYXJfbG9jYWxfQVBJQygpOwotCWVsc2UKLSNlbmRpZgotCQlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKLQotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgotICogVGhpcyBpcyB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBsb29raW5nIGF0IGEgcmVhbCBsb2NhbCBBUElDLgotICogQ2hlY2sgdGhlc2UgYWdhaW5zdCB5b3VyIGJvYXJkIGlmIHRoZSBDUFVzIGFyZW4ndCBnZXR0aW5nCi0gKiBzdGFydGVkIGZvciBubyBhcHBhcmVudCByZWFzb24uCi0gKi8KLWludCBfX2luaXQgdmVyaWZ5X2xvY2FsX0FQSUModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgcmVnMCwgcmVnMTsKLQotCS8qCi0JICogVGhlIHZlcnNpb24gcmVnaXN0ZXIgaXMgcmVhZC1vbmx5IGluIGEgcmVhbCBBUElDLgotCSAqLwotCXJlZzAgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIFZFUlNJT046ICV4XG4iLCByZWcwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZSLCByZWcwIF4gQVBJQ19MVlJfTUFTSyk7Ci0JcmVnMSA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgVkVSU0lPTjogJXhcbiIsIHJlZzEpOwotCi0JLyoKLQkgKiBUaGUgdHdvIHZlcnNpb24gcmVhZHMgYWJvdmUgc2hvdWxkIHByaW50IHRoZSBzYW1lCi0JICogbnVtYmVycy4gIElmIHRoZSBzZWNvbmQgb25lIGlzIGRpZmZlcmVudCwgdGhlbiB3ZQotCSAqIHBva2UgYXQgYSBub24tQVBJQy4KLQkgKi8KLQlpZiAocmVnMSAhPSByZWcwKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogQ2hlY2sgaWYgdGhlIHZlcnNpb24gbG9va3MgcmVhc29uYWJseS4KLQkgKi8KLQlyZWcxID0gR0VUX0FQSUNfVkVSU0lPTihyZWcwKTsKLQlpZiAocmVnMSA9PSAweDAwIHx8IHJlZzEgPT0gMHhmZikKLQkJcmV0dXJuIDA7Ci0JcmVnMSA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQlpZiAocmVnMSA8IDB4MDIgfHwgcmVnMSA9PSAweGZmKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogVGhlIElEIHJlZ2lzdGVyIGlzIHJlYWQvd3JpdGUgaW4gYSByZWFsIEFQSUMuCi0JICovCi0JcmVnMCA9IGFwaWNfcmVhZChBUElDX0lEKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBJRDogJXhcbiIsIHJlZzApOwotCWFwaWNfd3JpdGUoQVBJQ19JRCwgcmVnMCBeIEFQSUNfSURfTUFTSyk7Ci0JcmVnMSA9IGFwaWNfcmVhZChBUElDX0lEKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBJRDogJXhcbiIsIHJlZzEpOwotCWFwaWNfd3JpdGUoQVBJQ19JRCwgcmVnMCk7Ci0JaWYgKHJlZzEgIT0gKHJlZzAgXiBBUElDX0lEX01BU0spKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogVGhlIG5leHQgdHdvIGFyZSBqdXN0IHRvIHNlZSBpZiB3ZSBoYXZlIHNhbmUgdmFsdWVzLgotCSAqIFRoZXkncmUgb25seSByZWFsbHkgcmVsZXZhbnQgaWYgd2UncmUgaW4gVmlydHVhbCBXaXJlCi0JICogY29tcGF0aWJpbGl0eSBtb2RlLCBidXQgbW9zdCBib3hlcyBhcmUgYW55bW9yZS4KLQkgKi8KLQlyZWcwID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgTFZUMDogJXhcbiIsIHJlZzApOwotCXJlZzEgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBMVlQxOiAleFxuIiwgcmVnMSk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyoqCi0gKiBzeW5jX0FyYl9JRHMgLSBzeW5jaHJvbml6ZSBBUElDIGJ1cyBhcmJpdHJhdGlvbiBJRHMKLSAqLwotdm9pZCBfX2luaXQgc3luY19BcmJfSURzKHZvaWQpCi17Ci0JLyoKLQkgKiBVbnN1cHBvcnRlZCBvbiBQNCAtIHNlZSBJbnRlbCBEZXYuIE1hbnVhbCBWb2wuIDMsIENoLiA4LjYuMSBBbmQgbm90Ci0JICogbmVlZGVkIG9uIEFNRC4KLQkgKi8KLQlpZiAobW9kZXJuX2FwaWMoKSB8fCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpCi0JCXJldHVybjsKLQotCS8qCi0JICogV2FpdCBmb3IgaWRsZS4KLQkgKi8KLQlhcGljX3dhaXRfaWNyX2lkbGUoKTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJTeW5jaHJvbml6aW5nIEFyYiBJRHMuXG4iKTsKLQlhcGljX3dyaXRlKEFQSUNfSUNSLCBBUElDX0RFU1RfQUxMSU5DIHwKLQkJCUFQSUNfSU5UX0xFVkVMVFJJRyB8IEFQSUNfRE1fSU5JVCk7Ci19Ci0KLS8qCi0gKiBBbiBpbml0aWFsIHNldHVwIG9mIHRoZSB2aXJ0dWFsIHdpcmUgbW9kZS4KLSAqLwotdm9pZCBfX2luaXQgaW5pdF9ic3BfQVBJQyh2b2lkKQotewotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCS8qCi0JICogRG9uJ3QgZG8gdGhlIHNldHVwIG5vdyBpZiB3ZSBoYXZlIGEgU01QIEJJT1MgYXMgdGhlCi0JICogdGhyb3VnaC1JL08tQVBJQyB2aXJ0dWFsIHdpcmUgbW9kZSBtaWdodCBiZSBhY3RpdmUuCi0JICovCi0JaWYgKHNtcF9mb3VuZF9jb25maWcgfHwgIWNwdV9oYXNfYXBpYykKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBEbyBub3QgdHJ1c3QgdGhlIGxvY2FsIEFQSUMgYmVpbmcgZW1wdHkgYXQgYm9vdHVwLgotCSAqLwotCWNsZWFyX2xvY2FsX0FQSUMoKTsKLQotCS8qCi0JICogRW5hYmxlIEFQSUMuCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKLQl2YWx1ZSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCS8qIFRoaXMgYml0IGlzIHJlc2VydmVkIG9uIFA0L1hlb24gYW5kIHNob3VsZCBiZSBjbGVhcmVkICovCi0JaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgJiYKLQkgICAgKGJvb3RfY3B1X2RhdGEueDg2ID09IDE1KSkKLQkJdmFsdWUgJj0gfkFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRDsKLQllbHNlCi0jZW5kaWYKLQkJdmFsdWUgfD0gQVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOwotCXZhbHVlIHw9IFNQVVJJT1VTX0FQSUNfVkVDVE9SOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7Ci0KLQkvKgotCSAqIFNldCB1cCB0aGUgdmlydHVhbCB3aXJlIG1vZGUuCi0JICovCi0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRVhUSU5UKTsKLQl2YWx1ZSA9IEFQSUNfRE1fTk1JOwotCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQkJLyogODI0ODlEWCAqLwotCQl2YWx1ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBsYXBpY19zZXR1cF9lc3Iodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIG9sZHZhbHVlLCB2YWx1ZSwgbWF4bHZ0OwotCWlmIChsYXBpY19pc19pbnRlZ3JhdGVkKCkgJiYgIWVzcl9kaXNhYmxlKSB7Ci0JCWlmIChlc3JfZGlzYWJsZSkgewotCQkJLyoKLQkJCSAqIFNvbWV0aGluZyB1bnRyYWNlYWJsZSBpcyBjcmVhdGluZyBiYWQgaW50ZXJydXB0cyBvbgotCQkJICogc2Vjb25kYXJ5IHF1YWRzIC4uLiBmb3IgdGhlIG1vbWVudCwganVzdCBsZWF2ZSB0aGUKLQkJCSAqIEVTUiBkaXNhYmxlZCAtIHdlIGNhbid0IGRvIGFueXRoaW5nIHVzZWZ1bCB3aXRoIHRoZQotCQkJICogZXJyb3JzIGFueXdheSAtIG1ibGlnaAotCQkJICovCi0JCQlwcmludGsoS0VSTl9JTkZPICJMZWF2aW5nIEVTUiBkaXNhYmxlZC5cbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0JCS8qICE4MjQ4OURYICovCi0JCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQkJaWYgKG1heGx2dCA+IDMpCQkvKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICovCi0JCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJb2xkdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCi0JCS8qIGVuYWJsZXMgc2VuZGluZyBlcnJvcnMgKi8KLQkJdmFsdWUgPSBFUlJPUl9BUElDX1ZFQ1RPUjsKLQkJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdmFsdWUpOwotCQkvKgotCQkgKiBzcGVjIHNheXMgY2xlYXIgZXJyb3JzIGFmdGVyIGVuYWJsaW5nIHZlY3Rvci4KLQkJICovCi0JCWlmIChtYXhsdnQgPiAzKQotCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQkJaWYgKHZhbHVlICE9IG9sZHZhbHVlKQotCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiRVNSIHZhbHVlIGJlZm9yZSBlbmFibGluZyAiCi0JCQkJInZlY3RvcjogMHglMDhseCAgYWZ0ZXI6IDB4JTA4bHhcbiIsCi0JCQkJb2xkdmFsdWUsIHZhbHVlKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPICJObyBFU1IgZm9yIDgyNDg5RFguXG4iKTsKLQl9Ci19Ci0KLQotLyoqCi0gKiBzZXR1cF9sb2NhbF9BUElDIC0gc2V0dXAgdGhlIGxvY2FsIEFQSUMKLSAqLwotdm9pZCBfX2NwdWluaXQgc2V0dXBfbG9jYWxfQVBJQyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdmFsdWUsIGludGVncmF0ZWQ7Ci0JaW50IGksIGo7Ci0KLQkvKiBQb3VuZCB0aGUgRVNSIHJlYWxseSBoYXJkIG92ZXIgdGhlIGhlYWQgd2l0aCBhIGJpZyBoYW1tZXIgLSBtYmxpZ2ggKi8KLQlpZiAoZXNyX2Rpc2FibGUpIHsKLQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JfQotCi0JaW50ZWdyYXRlZCA9IGxhcGljX2lzX2ludGVncmF0ZWQoKTsKLQotCS8qCi0JICogRG91YmxlLWNoZWNrIHdoZXRoZXIgdGhpcyBBUElDIGlzIHJlYWxseSByZWdpc3RlcmVkLgotCSAqLwotCWlmICghYXBpY19pZF9yZWdpc3RlcmVkKCkpCi0JCVdBUk5fT05fT05DRSgxKTsKLQotCS8qCi0JICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMRFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKLQkgKiBhbiBBUElDLiAgU2VlIGUuZy4gIkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiIChJbnRlbAotCSAqIGRvY3VtZW50IG51bWJlciAyOTIxMTYpLiAgU28gaGVyZSBpdCBnb2VzLi4uCi0JICovCi0JaW5pdF9hcGljX2xkcigpOwotCi0JLyoKLQkgKiBTZXQgVGFzayBQcmlvcml0eSB0byAnYWNjZXB0IGFsbCcuIFdlIG5ldmVyIGNoYW5nZSB0aGlzCi0JICogbGF0ZXIgb24uCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKLQl2YWx1ZSAmPSB+QVBJQ19UUFJJX01BU0s7Ci0JYXBpY193cml0ZShBUElDX1RBU0tQUkksIHZhbHVlKTsKLQotCS8qCi0JICogQWZ0ZXIgYSBjcmFzaCwgd2Ugbm8gbG9uZ2VyIHNlcnZpY2UgdGhlIGludGVycnVwdHMgYW5kIGEgcGVuZGluZwotCSAqIGludGVycnVwdCBmcm9tIHByZXZpb3VzIGtlcm5lbCBtaWdodCBzdGlsbCBoYXZlIElTUiBiaXQgc2V0LgotCSAqCi0JICogTW9zdCBwcm9iYWJseSBieSBub3cgQ1BVIGhhcyBzZXJ2aWNlZCB0aGF0IHBlbmRpbmcgaW50ZXJydXB0IGFuZAotCSAqIGl0IG1pZ2h0IG5vdCBoYXZlIGRvbmUgdGhlIGFja19BUElDX2lycSgpIGJlY2F1c2UgaXQgdGhvdWdodCwKLQkgKiBpbnRlcnJ1cHQgY2FtZSBmcm9tIGk4MjU5IGFzIEV4dEludC4gTEFQSUMgZGlkIG5vdCBnZXQgRU9JIHNvIGl0Ci0JICogZG9lcyBub3QgY2xlYXIgdGhlIElTUiBiaXQgYW5kIGNwdSB0aGlua3MgaXQgaGFzIGFscmVhZHkgc2VyaXZjZWQKLQkgKiB0aGUgaW50ZXJydXB0LiBIZW5jZSBhIHZlY3RvciBtaWdodCBnZXQgbG9ja2VkLiBJdCB3YXMgbm90aWNlZAotCSAqIGZvciB0aW1lciBpcnEgKHZlY3RvciAweDMxKS4gSXNzdWUgYW4gZXh0cmEgRU9JIHRvIGNsZWFyIElTUi4KLQkgKi8KLQlmb3IgKGkgPSBBUElDX0lTUl9OUiAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfSVNSICsgaSoweDEwKTsKLQkJZm9yIChqID0gMzE7IGogPj0gMDsgai0tKSB7Ci0JCQlpZiAodmFsdWUgJiAoMTw8aikpCi0JCQkJYWNrX0FQSUNfaXJxKCk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIE5vdyB0aGF0IHdlIGFyZSBhbGwgc2V0IHVwLCBlbmFibGUgdGhlIEFQSUMKLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXZhbHVlICY9IH5BUElDX1ZFQ1RPUl9NQVNLOwotCS8qCi0JICogRW5hYmxlIEFQSUMKLQkgKi8KLQl2YWx1ZSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOwotCi0JLyoKLQkgKiBTb21lIHVua25vd24gSW50ZWwgSU8vQVBJQyAob3IgQVBJQykgZXJyYXRhIGlzIGJpdGluZyB1cyB3aXRoCi0JICogY2VydGFpbiBuZXR3b3JraW5nIGNhcmRzLiBJZiBoaWdoIGZyZXF1ZW5jeSBpbnRlcnJ1cHRzIGFyZQotCSAqIGhhcHBlbmluZyBvbiBhIHBhcnRpY3VsYXIgSU9BUElDIHBpbiwgcGx1cyB0aGUgSU9BUElDIHJvdXRpbmcKLQkgKiBlbnRyeSBpcyBtYXNrZWQvdW5tYXNrZWQgYXQgYSBoaWdoIHJhdGUgYXMgd2VsbCB0aGVuIHNvb25lciBvcgotCSAqIGxhdGVyIElPQVBJQyBsaW5lIGdldHMgJ3N0dWNrJywgbm8gbW9yZSBpbnRlcnJ1cHRzIGFyZSByZWNlaXZlZAotCSAqIGZyb20gdGhlIGRldmljZS4gSWYgZm9jdXMgQ1BVIGlzIGRpc2FibGVkIHRoZW4gdGhlIGhhbmcgZ29lcwotCSAqIGF3YXksIG9oIHdlbGwgOi0oCi0JICoKLQkgKiBbIFRoaXMgYnVnIGNhbiBiZSByZXByb2R1Y2VkIGVhc2lseSB3aXRoIGEgbGV2ZWwtdHJpZ2dlcmVkCi0JICogICBQQ0kgTmUyMDAwIG5ldHdvcmtpbmcgY2FyZHMgYW5kIFBJSS9QSUlJIHByb2Nlc3NvcnMsIGR1YWwKLQkgKiAgIEJYIGNoaXBzZXQuIF0KLQkgKi8KLQkvKgotCSAqIEFjdHVhbGx5IGRpc2FibGluZyB0aGUgZm9jdXMgQ1BVIGNoZWNrIGp1c3QgbWFrZXMgdGhlIGhhbmcgbGVzcwotCSAqIGZyZXF1ZW50IGFzIGl0IG1ha2VzIHRoZSBpbnRlcnJ1cHQgZGlzdHJpYnV0b24gbW9kZWwgYmUgbW9yZQotCSAqIGxpa2UgTFJVIHRoYW4gTVJVICh0aGUgc2hvcnQtdGVybSBsb2FkIGlzIG1vcmUgZXZlbiBhY3Jvc3MgQ1BVcykuCi0JICogU2VlIGFsc28gdGhlIGNvbW1lbnQgaW4gZW5kX2xldmVsX2lvYXBpY19pcnEoKS4gIC0tbWFjcm8KLQkgKi8KLQotCS8qIEVuYWJsZSBmb2N1cyBwcm9jZXNzb3IgKGJpdD09MCkgKi8KLQl2YWx1ZSAmPSB+QVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOwotCi0JLyoKLQkgKiBTZXQgc3B1cmlvdXMgSVJRIHZlY3RvcgotCSAqLwotCXZhbHVlIHw9IFNQVVJJT1VTX0FQSUNfVkVDVE9SOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7Ci0KLQkvKgotCSAqIFNldCB1cCBMVlQwLCBMVlQxOgotCSAqCi0JICogc2V0IHVwIHRocm91Z2gtbG9jYWwtQVBJQyBvbiB0aGUgQlAncyBMSU5UMC4gVGhpcyBpcyBub3QKLQkgKiBzdHJpY3RseSBuZWNlc3NhcnkgaW4gcHVyZSBzeW1tZXRyaWMtSU8gbW9kZSwgYnV0IHNvbWV0aW1lcwotCSAqIHdlIGRlbGVnYXRlIGludGVycnVwdHMgdG8gdGhlIDgyNTlBLgotCSAqLwotCS8qCi0JICogVE9ETzogc2V0IHVwIHRocm91Z2gtbG9jYWwtQVBJQyBmcm9tIHRocm91Z2gtSS9PLUFQSUM/IC0tbWFjcm8KLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVDApICYgQVBJQ19MVlRfTUFTS0VEOwotCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpICYmIChwaWNfbW9kZSB8fCAhdmFsdWUpKSB7Ci0JCXZhbHVlID0gQVBJQ19ETV9FWFRJTlQ7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImVuYWJsZWQgRXh0SU5UIG9uIENQVSMlZFxuIiwKLQkJCQlzbXBfcHJvY2Vzc29yX2lkKCkpOwotCX0gZWxzZSB7Ci0JCXZhbHVlID0gQVBJQ19ETV9FWFRJTlQgfCBBUElDX0xWVF9NQVNLRUQ7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hc2tlZCBFeHRJTlQgb24gQ1BVIyVkXG4iLAotCQkJCXNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JfQotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2YWx1ZSk7Ci0KLQkvKgotCSAqIG9ubHkgdGhlIEJQIHNob3VsZCBzZWUgdGhlIExJTlQxIE5NSSBzaWduYWwsIG9idmlvdXNseS4KLQkgKi8KLQlpZiAoIXNtcF9wcm9jZXNzb3JfaWQoKSkKLQkJdmFsdWUgPSBBUElDX0RNX05NSTsKLQllbHNlCi0JCXZhbHVlID0gQVBJQ19ETV9OTUkgfCBBUElDX0xWVF9NQVNLRUQ7Ci0JaWYgKCFpbnRlZ3JhdGVkKQkJLyogODI0ODlEWCAqLwotCQl2YWx1ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgX19jcHVpbml0IGVuZF9sb2NhbF9BUElDX3NldHVwKHZvaWQpCi17Ci0JbGFwaWNfc2V0dXBfZXNyKCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JewotCQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0JCS8qIERpc2FibGUgdGhlIGxvY2FsIGFwaWMgdGltZXIgKi8KLQkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQkJdmFsdWUgfD0gKEFQSUNfTFZUX01BU0tFRCB8IExPQ0FMX1RJTUVSX1ZFQ1RPUik7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2YWx1ZSk7Ci0JfQotI2VuZGlmCi0KLQlzZXR1cF9hcGljX25taV93YXRjaGRvZyhOVUxMKTsKLQlhcGljX3BtX2FjdGl2YXRlKCk7Ci19Ci0KLS8qCi0gKiBEZXRlY3QgYW5kIGluaXRpYWxpemUgQVBJQwotICovCi1zdGF0aWMgaW50IF9faW5pdCBkZXRlY3RfaW5pdF9BUElDKHZvaWQpCi17Ci0JdTMyIGgsIGwsIGZlYXR1cmVzOwotCi0JLyogRGlzYWJsZWQgYnkga2VybmVsIG9wdGlvbj8gKi8KLQlpZiAoZGlzYWJsZV9hcGljKQotCQlyZXR1cm4gLTE7Ci0KLQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewotCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCWlmICgoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiAmJiBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA+IDEpIHx8Ci0JCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMTUpKQotCQkJYnJlYWs7Ci0JCWdvdG8gbm9fYXBpYzsKLQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6Ci0JCWlmIChib290X2NwdV9kYXRhLng4NiA9PSA2IHx8IGJvb3RfY3B1X2RhdGEueDg2ID09IDE1IHx8Ci0JCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNSAmJiBjcHVfaGFzX2FwaWMpKQotCQkJYnJlYWs7Ci0JCWdvdG8gbm9fYXBpYzsKLQlkZWZhdWx0OgotCQlnb3RvIG5vX2FwaWM7Ci0JfQotCi0JaWYgKCFjcHVfaGFzX2FwaWMpIHsKLQkJLyoKLQkJICogT3Zlci1yaWRlIEJJT1MgYW5kIHRyeSB0byBlbmFibGUgdGhlIGxvY2FsIEFQSUMgb25seSBpZgotCQkgKiAibGFwaWMiIHNwZWNpZmllZC4KLQkJICovCi0JCWlmICghZm9yY2VfZW5hYmxlX2xvY2FsX2FwaWMpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIkxvY2FsIEFQSUMgZGlzYWJsZWQgYnkgQklPUyAtLSAiCi0JCQkgICAgICAgInlvdSBjYW4gZW5hYmxlIGl0IHdpdGggXCJsYXBpY1wiXG4iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQkvKgotCQkgKiBTb21lIEJJT1NlcyBkaXNhYmxlIHRoZSBsb2NhbCBBUElDIGluIHRoZSBBUElDX0JBU0UKLQkJICogTVNSLiBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgaW4gc29mdHdhcmUgZm9yIEludGVsIFA2IG9yIGxhdGVyCi0JCSAqIGFuZCBBTUQgSzcgKE1vZGVsID4gMSkgb3IgbGF0ZXIuCi0JCSAqLwotCQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JCWlmICghKGwgJiBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIkxvY2FsIEFQSUMgZGlzYWJsZWQgYnkgQklPUyAtLSByZWVuYWJsaW5nLlxuIik7Ci0JCQlsICY9IH5NU1JfSUEzMl9BUElDQkFTRV9CQVNFOwotCQkJbCB8PSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUgfCBBUElDX0RFRkFVTFRfUEhZU19CQVNFOwotCQkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCQkJZW5hYmxlZF92aWFfYXBpY2Jhc2UgPSAxOwotCQl9Ci0JfQotCS8qCi0JICogVGhlIEFQSUMgZmVhdHVyZSBiaXQgc2hvdWxkIG5vdyBiZSBlbmFibGVkCi0JICogaW4gYGNwdWlkJwotCSAqLwotCWZlYXR1cmVzID0gY3B1aWRfZWR4KDEpOwotCWlmICghKGZlYXR1cmVzICYgKDEgPDwgWDg2X0ZFQVRVUkVfQVBJQykpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkNvdWxkIG5vdCBlbmFibGUgQVBJQyFcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXNldF9jcHVfY2FwKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BUElDKTsKLQltcF9sYXBpY19hZGRyID0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRTsKLQotCS8qIFRoZSBCSU9TIG1heSBoYXZlIHNldCB1cCB0aGUgQVBJQyBhdCBzb21lIG90aGVyIGFkZHJlc3MgKi8KLQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JaWYgKGwgJiBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUpCi0JCW1wX2xhcGljX2FkZHIgPSBsICYgTVNSX0lBMzJfQVBJQ0JBU0VfQkFTRTsKLQotCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIGFuZCBlbmFibGVkIGxvY2FsIEFQSUMhXG4iKTsKLQotCWFwaWNfcG1fYWN0aXZhdGUoKTsKLQotCXJldHVybiAwOwotCi1ub19hcGljOgotCXByaW50ayhLRVJOX0lORk8gIk5vIGxvY2FsIEFQSUMgcHJlc2VudCBvciBoYXJkd2FyZSBkaXNhYmxlZFxuIik7Ci0JcmV0dXJuIC0xOwotfQotCi0vKioKLSAqIGluaXRfYXBpY19tYXBwaW5ncyAtIGluaXRpYWxpemUgQVBJQyBtYXBwaW5ncwotICovCi12b2lkIF9faW5pdCBpbml0X2FwaWNfbWFwcGluZ3Modm9pZCkKLXsKLQkvKgotCSAqIElmIG5vIGxvY2FsIEFQSUMgY2FuIGJlIGZvdW5kIHRoZW4gc2V0IHVwIGEgZmFrZSBhbGwKLQkgKiB6ZXJvZXMgcGFnZSB0byBzaW11bGF0ZSB0aGUgbG9jYWwgQVBJQyBhbmQgYW5vdGhlcgotCSAqIG9uZSBmb3IgdGhlIElPLUFQSUMuCi0JICovCi0JaWYgKCFzbXBfZm91bmRfY29uZmlnICYmIGRldGVjdF9pbml0X0FQSUMoKSkgewotCQlhcGljX3BoeXMgPSAodW5zaWduZWQgbG9uZykgYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOwotCQlhcGljX3BoeXMgPSBfX3BhKGFwaWNfcGh5cyk7Ci0JfSBlbHNlCi0JCWFwaWNfcGh5cyA9IG1wX2xhcGljX2FkZHI7Ci0KLQlzZXRfZml4bWFwX25vY2FjaGUoRklYX0FQSUNfQkFTRSwgYXBpY19waHlzKTsKLQlwcmludGsoS0VSTl9ERUJVRyAibWFwcGVkIEFQSUMgdG8gJTA4bHggKCUwOGx4KVxuIiwgQVBJQ19CQVNFLAotCSAgICAgICBhcGljX3BoeXMpOwotCi0JLyoKLQkgKiBGZXRjaCB0aGUgQVBJQyBJRCBvZiB0aGUgQlNQIGluIGNhc2Ugd2UgaGF2ZSBhCi0JICogZGVmYXVsdCBjb25maWd1cmF0aW9uIChvciB0aGUgTVAgdGFibGUgaXMgYnJva2VuKS4KLQkgKi8KLQlpZiAoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID09IC0xVSkKLQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7Ci0KLX0KLQotLyoKLSAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIElPLUFQSUMgYW5kIEFQSUMgaGFyZHdhcmUgaWYgdGhpcyBpcwotICogYSBVUCBrZXJuZWwuCi0gKi8KLQotaW50IGFwaWNfdmVyc2lvbltNQVhfQVBJQ1NdOwotCi1pbnQgX19pbml0IEFQSUNfaW5pdF91bmlwcm9jZXNzb3Iodm9pZCkKLXsKLQlpZiAoIXNtcF9mb3VuZF9jb25maWcgJiYgIWNwdV9oYXNfYXBpYykKLQkJcmV0dXJuIC0xOwotCi0JLyoKLQkgKiBDb21wbGFpbiBpZiB0aGUgQklPUyBwcmV0ZW5kcyB0aGVyZSBpcyBvbmUuCi0JICovCi0JaWYgKCFjcHVfaGFzX2FwaWMgJiYKLQkgICAgQVBJQ19JTlRFR1JBVEVEKGFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBsb2NhbCBBUElDICMlZCBub3QgZGV0ZWN0ZWQhLi4uXG4iLAotCQkgICAgICAgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKLQkJY2xlYXJfY3B1X2NhcCgmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVBJQyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQl2ZXJpZnlfbG9jYWxfQVBJQygpOwotCi0JY29ubmVjdF9ic3BfQVBJQygpOwotCi0JLyoKLQkgKiBIYWNrOiBJbiBjYXNlIG9mIGtkdW1wLCBhZnRlciBhIGNyYXNoLCBrZXJuZWwgbWlnaHQgYmUgYm9vdGluZwotCSAqIG9uIGEgY3B1IHdpdGggbm9uLXplcm8gbGFwaWMgaWQuIEJ1dCBib290X2NwdV9waHlzaWNhbF9hcGljaWQKLQkgKiBtaWdodCBiZSB6ZXJvIGlmIHJlYWQgZnJvbSBNUCB0YWJsZXMuIEdldCBpdCBmcm9tIExBUElDLgotCSAqLwotI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCi0JYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7Ci0jZW5kaWYKLQlwaHlzaWRfc2V0X21hc2tfb2ZfcGh5c2lkKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCwgJnBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLQotCXNldHVwX2xvY2FsX0FQSUMoKTsKLQotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCWlmICghc21wX2ZvdW5kX2NvbmZpZyB8fCBza2lwX2lvYXBpY19zZXR1cCB8fCAhbnJfaW9hcGljcykKLSNlbmRpZgotCQlsb2NhbGlzZV9ubWlfd2F0Y2hkb2coKTsKLQllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOwotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCWlmIChzbXBfZm91bmRfY29uZmlnKQotCQlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCi0JCQlzZXR1cF9JT19BUElDKCk7Ci0jZW5kaWYKLQlzZXR1cF9ib290X2Nsb2NrKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIExvY2FsIEFQSUMgaW50ZXJydXB0cwotICovCi0KLS8qCi0gKiBUaGlzIGludGVycnVwdCBzaG91bGQgX25ldmVyXyBoYXBwZW4gd2l0aCBvdXIgQVBJQy9TTVAgYXJjaGl0ZWN0dXJlCi0gKi8KLXZvaWQgc21wX3NwdXJpb3VzX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1bnNpZ25lZCBsb25nIHY7Ci0KLQlpcnFfZW50ZXIoKTsKLQkvKgotCSAqIENoZWNrIGlmIHRoaXMgcmVhbGx5IGlzIGEgc3B1cmlvdXMgaW50ZXJydXB0IGFuZCBBQ0sgaXQKLQkgKiBpZiBpdCBpcyBhIHZlY3RvcmVkIG9uZS4gIEp1c3QgaW4gY2FzZS4uLgotCSAqIFNwdXJpb3VzIGludGVycnVwdHMgc2hvdWxkIG5vdCBiZSBBQ0tlZC4KLQkgKi8KLQl2ID0gYXBpY19yZWFkKEFQSUNfSVNSICsgKChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIH4weDFmKSA+PiAxKSk7Ci0JaWYgKHYgJiAoMSA8PCAoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiAweDFmKSkpCi0JCWFja19BUElDX2lycSgpOwotCi0JLyogc2VlIHN3LWRldi1tYW4gdm9sIDMsIGNoYXB0ZXIgNy40LjEzLjUgKi8KLQlwcmludGsoS0VSTl9JTkZPICJzcHVyaW91cyBBUElDIGludGVycnVwdCBvbiBDUFUjJWQsICIKLQkgICAgICAgInNob3VsZCBuZXZlciBoYXBwZW4uXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlycV9zcHVyaW91c19jb3VudCsrOwotCWlycV9leGl0KCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGludGVycnVwdCBzaG91bGQgbmV2ZXIgaGFwcGVuIHdpdGggb3VyIEFQSUMvU01QIGFyY2hpdGVjdHVyZQotICovCi12b2lkIHNtcF9lcnJvcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyB2LCB2MTsKLQotCWlycV9lbnRlcigpOwotCS8qIEZpcnN0IHRpY2tsZSB0aGUgaGFyZHdhcmUsIG9ubHkgdGhlbiByZXBvcnQgd2hhdCB3ZW50IG9uLiAtLSBSRVcgKi8KLQl2ID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQl2MSA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0JYWNrX0FQSUNfaXJxKCk7Ci0JYXRvbWljX2luYygmaXJxX2Vycl9jb3VudCk7Ci0KLQkvKiBIZXJlIGlzIHdoYXQgdGhlIEFQSUMgZXJyb3IgYml0cyBtZWFuOgotCSAgIDA6IFNlbmQgQ1MgZXJyb3IKLQkgICAxOiBSZWNlaXZlIENTIGVycm9yCi0JICAgMjogU2VuZCBhY2NlcHQgZXJyb3IKLQkgICAzOiBSZWNlaXZlIGFjY2VwdCBlcnJvcgotCSAgIDQ6IFJlc2VydmVkCi0JICAgNTogU2VuZCBpbGxlZ2FsIHZlY3RvcgotCSAgIDY6IFJlY2VpdmVkIGlsbGVnYWwgdmVjdG9yCi0JICAgNzogSWxsZWdhbCByZWdpc3RlciBhZGRyZXNzCi0JKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiQVBJQyBlcnJvciBvbiBDUFUlZDogJTAybHgoJTAybHgpXG4iLAotCQlzbXBfcHJvY2Vzc29yX2lkKCksIHYgLCB2MSk7Ci0JaXJxX2V4aXQoKTsKLX0KLQotLyoqCi0gKiBjb25uZWN0X2JzcF9BUElDIC0gYXR0YWNoIHRoZSBBUElDIHRvIHRoZSBpbnRlcnJ1cHQgc3lzdGVtCi0gKi8KLXZvaWQgX19pbml0IGNvbm5lY3RfYnNwX0FQSUModm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKHBpY19tb2RlKSB7Ci0JCS8qCi0JCSAqIERvIG5vdCB0cnVzdCB0aGUgbG9jYWwgQVBJQyBiZWluZyBlbXB0eSBhdCBib290dXAuCi0JCSAqLwotCQljbGVhcl9sb2NhbF9BUElDKCk7Ci0JCS8qCi0JCSAqIFBJQyBtb2RlLCBlbmFibGUgQVBJQyBtb2RlIGluIHRoZSBJTUNSLCBpLmUuICBjb25uZWN0IEJTUCdzCi0JCSAqIGxvY2FsIEFQSUMgdG8gSU5UIGFuZCBOTUkgbGluZXMuCi0JCSAqLwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJsZWF2aW5nIFBJQyBtb2RlLCAiCi0JCQkJImVuYWJsaW5nIEFQSUMgbW9kZS5cbiIpOwotCQlvdXRiKDB4NzAsIDB4MjIpOwotCQlvdXRiKDB4MDEsIDB4MjMpOwotCX0KLSNlbmRpZgotCWVuYWJsZV9hcGljX21vZGUoKTsKLX0KLQotLyoqCi0gKiBkaXNjb25uZWN0X2JzcF9BUElDIC0gZGV0YWNoIHRoZSBBUElDIGZyb20gdGhlIGludGVycnVwdCBzeXN0ZW0KLSAqIEB2aXJ0X3dpcmVfc2V0dXA6CWluZGljYXRlcywgd2hldGhlciB2aXJ0dWFsIHdpcmUgbW9kZSBpcyBzZWxlY3RlZAotICoKLSAqIFZpcnR1YWwgd2lyZSBtb2RlIGlzIG5lY2Vzc2FyeSB0byBkZWxpdmVyIGxlZ2FjeSBpbnRlcnJ1cHRzIGV2ZW4gd2hlbiB0aGUKLSAqIEFQSUMgaXMgZGlzYWJsZWQuCi0gKi8KLXZvaWQgZGlzY29ubmVjdF9ic3BfQVBJQyhpbnQgdmlydF93aXJlX3NldHVwKQotewotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpZiAocGljX21vZGUpIHsKLQkJLyoKLQkJICogUHV0IHRoZSBib2FyZCBiYWNrIGludG8gUElDIG1vZGUgKGhhcyBhbiBlZmZlY3Qgb25seSBvbgotCQkgKiBjZXJ0YWluIG9sZGVyIGJvYXJkcykuICBOb3RlIHRoYXQgQVBJQyBpbnRlcnJ1cHRzLCBpbmNsdWRpbmcKLQkJICogSVBJcywgd29uJ3Qgd29yayBiZXlvbmQgdGhpcyBwb2ludCEgIFRoZSBvbmx5IGV4Y2VwdGlvbiBhcmUKLQkJICogSU5JVCBJUElzLgotCQkgKi8KLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiZGlzYWJsaW5nIEFQSUMgbW9kZSwgIgotCQkJCSJlbnRlcmluZyBQSUMgbW9kZS5cbiIpOwotCQlvdXRiKDB4NzAsIDB4MjIpOwotCQlvdXRiKDB4MDAsIDB4MjMpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0KLQkvKiBHbyBiYWNrIHRvIFZpcnR1YWwgV2lyZSBjb21wYXRpYmlsaXR5IG1vZGUgKi8KLQotCS8qIEZvciB0aGUgc3B1cmlvdXMgaW50ZXJydXB0IHVzZSB2ZWN0b3IgRiwgYW5kIGVuYWJsZSBpdCAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JdmFsdWUgJj0gfkFQSUNfVkVDVE9SX01BU0s7Ci0JdmFsdWUgfD0gQVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKLQl2YWx1ZSB8PSAweGY7Ci0JYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKLQotCWlmICghdmlydF93aXJlX3NldHVwKSB7Ci0JCS8qCi0JCSAqIEZvciBMVlQwIG1ha2UgaXQgZWRnZSB0cmlnZ2VyZWQsIGFjdGl2ZSBoaWdoLAotCQkgKiBleHRlcm5hbCBhbmQgZW5hYmxlZAotCQkgKi8KLQkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQkJdmFsdWUgJj0gfihBUElDX01PREVfTUFTSyB8IEFQSUNfU0VORF9QRU5ESU5HIHwKLQkJCUFQSUNfSU5QVVRfUE9MQVJJVFkgfCBBUElDX0xWVF9SRU1PVEVfSVJSIHwKLQkJCUFQSUNfTFZUX0xFVkVMX1RSSUdHRVIgfCBBUElDX0xWVF9NQVNLRUQpOwotCQl2YWx1ZSB8PSBBUElDX0xWVF9SRU1PVEVfSVJSIHwgQVBJQ19TRU5EX1BFTkRJTkc7Ci0JCXZhbHVlID0gU0VUX0FQSUNfREVMSVZFUllfTU9ERSh2YWx1ZSwgQVBJQ19NT0RFX0VYVElOVCk7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2YWx1ZSk7Ci0JfSBlbHNlIHsKLQkJLyogRGlzYWJsZSBMVlQwICovCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQpOwotCX0KLQotCS8qCi0JICogRm9yIExWVDEgbWFrZSBpdCBlZGdlIHRyaWdnZXJlZCwgYWN0aXZlIGhpZ2gsCi0JICogbm1pIGFuZCBlbmFibGVkCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKLQl2YWx1ZSAmPSB+KEFQSUNfTU9ERV9NQVNLIHwgQVBJQ19TRU5EX1BFTkRJTkcgfAotCQkJQVBJQ19JTlBVVF9QT0xBUklUWSB8IEFQSUNfTFZUX1JFTU9URV9JUlIgfAotCQkJQVBJQ19MVlRfTEVWRUxfVFJJR0dFUiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JdmFsdWUgfD0gQVBJQ19MVlRfUkVNT1RFX0lSUiB8IEFQSUNfU0VORF9QRU5ESU5HOwotCXZhbHVlID0gU0VUX0FQSUNfREVMSVZFUllfTU9ERSh2YWx1ZSwgQVBJQ19NT0RFX05NSSk7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKLX0KLQotdm9pZCBfX2NwdWluaXQgZ2VuZXJpY19wcm9jZXNzb3JfaW5mbyhpbnQgYXBpY2lkLCBpbnQgdmVyc2lvbikKLXsKLQlpbnQgY3B1OwotCWNwdW1hc2tfdCB0bXBfbWFwOwotCi0JLyoKLQkgKiBWYWxpZGF0ZSB2ZXJzaW9uCi0JICovCi0JaWYgKHZlcnNpb24gPT0gMHgwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkJJT1MgYnVnLCBBUElDIHZlcnNpb24gaXMgMCBmb3IgQ1BVIyVkISAiCi0JCQkJImZpeGluZyB1cCB0byAweDEwLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIsCi0JCQkJdmVyc2lvbik7Ci0JCXZlcnNpb24gPSAweDEwOwotCX0KLQlhcGljX3ZlcnNpb25bYXBpY2lkXSA9IHZlcnNpb247Ci0KLQlpZiAobnVtX3Byb2Nlc3NvcnMgPj0gTlJfQ1BVUykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBOUl9DUFVTIGxpbWl0IG9mICVpIHJlYWNoZWQuIgotCQkJIiAgUHJvY2Vzc29yIGlnbm9yZWQuXG4iLCBOUl9DUFVTKTsKLQkJcmV0dXJuOwotCX0KLQotCW51bV9wcm9jZXNzb3JzKys7Ci0JY3B1c19jb21wbGVtZW50KHRtcF9tYXAsIGNwdV9wcmVzZW50X21hcCk7Ci0JY3B1ID0gZmlyc3RfY3B1KHRtcF9tYXApOwotCi0JcGh5c2lkX3NldChhcGljaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLQlpZiAoYXBpY2lkID09IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCkgewotCQkvKgotCQkgKiB4ODZfYmlvc19jcHVfYXBpY2lkIGlzIHJlcXVpcmVkIHRvIGhhdmUgcHJvY2Vzc29ycyBsaXN0ZWQKLQkJICogaW4gc2FtZSBvcmRlciBhcyBsb2dpY2FsIGNwdSBudW1iZXJzLiBIZW5jZSB0aGUgZmlyc3QKLQkJICogZW50cnkgaXMgQlNQLCBhbmQgc28gb24uCi0JCSAqLwotCQljcHUgPSAwOwotCX0KLQlpZiAoYXBpY2lkID4gbWF4X3BoeXNpY2FsX2FwaWNpZCkKLQkJbWF4X3BoeXNpY2FsX2FwaWNpZCA9IGFwaWNpZDsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQkvKgotCSAqIFdvdWxkIGJlIHByZWZlcmFibGUgdG8gc3dpdGNoIHRvIGJpZ3NtcCB3aGVuIENPTkZJR19IT1RQTFVHX0NQVT15Ci0JICogYnV0IHdlIG5lZWQgdG8gd29yayBvdGhlciBkZXBlbmRlbmNpZXMgbGlrZSBTTVBfU1VTUEVORCBldGMKLQkgKiBiZWZvcmUgdGhpcyBjYW4gYmUgZG9uZSB3aXRob3V0IHNvbWUgY29uZnVzaW9uLgotCSAqIGlmIChDUFVfSE9UUExVR19FTkFCTEVEIHx8IG51bV9wcm9jZXNzb3JzID4gOCkKLQkgKiAgICAgICAtIEFzaG9rIFJhaiA8YXNob2sucmFqQGludGVsLmNvbT4KLQkgKi8KLQlpZiAobWF4X3BoeXNpY2FsX2FwaWNpZCA+PSA4KSB7Ci0JCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7Ci0JCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKLQkJCWlmICghQVBJQ19YQVBJQyh2ZXJzaW9uKSkgewotCQkJCWRlZl90b19iaWdzbXAgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogSWYgUDQgYW5kIGFib3ZlIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIFg4Nl9WRU5ET1JfQU1EOgotCQkJZGVmX3RvX2JpZ3NtcCA9IDE7Ci0JCX0KLQl9Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9TTVApIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLQkvKiBhcmUgd2UgYmVpbmcgY2FsbGVkIGVhcmx5IGluIGtlcm5lbCBzdGFydHVwPyAqLwotCWlmIChlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX2FwaWNpZCkpIHsKLQkJdTE2ICpjcHVfdG9fYXBpY2lkID0gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19hcGljaWQpOwotCQl1MTYgKmJpb3NfY3B1X2FwaWNpZCA9IGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9iaW9zX2NwdV9hcGljaWQpOwotCi0JCWNwdV90b19hcGljaWRbY3B1XSA9IGFwaWNpZDsKLQkJYmlvc19jcHVfYXBpY2lkW2NwdV0gPSBhcGljaWQ7Ci0JfSBlbHNlIHsKLQkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9IGFwaWNpZDsKLQkJcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBjcHUpID0gYXBpY2lkOwotCX0KLSNlbmRpZgotCi0JY3B1X3NldChjcHUsIGNwdV9wb3NzaWJsZV9tYXApOwotCWNwdV9zZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApOwotfQotCi0vKgotICogUG93ZXIgbWFuYWdlbWVudAotICovCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBzdHJ1Y3QgewotCS8qCi0JICogJ2FjdGl2ZScgaXMgdHJ1ZSBpZiB0aGUgbG9jYWwgQVBJQyB3YXMgZW5hYmxlZCBieSB1cyBhbmQKLQkgKiBub3QgdGhlIEJJT1M7IHRoaXMgc2lnbmlmaWVzIHRoYXQgd2UgYXJlIGFsc28gcmVzcG9uc2libGUKLQkgKiBmb3IgZGlzYWJsaW5nIGl0IGJlZm9yZSBlbnRlcmluZyBhcG0vYWNwaSBzdXNwZW5kCi0JICovCi0JaW50IGFjdGl2ZTsKLQkvKiByL3cgYXBpYyBmaWVsZHMgKi8KLQl1bnNpZ25lZCBpbnQgYXBpY19pZDsKLQl1bnNpZ25lZCBpbnQgYXBpY190YXNrcHJpOwotCXVuc2lnbmVkIGludCBhcGljX2xkcjsKLQl1bnNpZ25lZCBpbnQgYXBpY19kZnI7Ci0JdW5zaWduZWQgaW50IGFwaWNfc3BpdjsKLQl1bnNpZ25lZCBpbnQgYXBpY19sdnR0OwotCXVuc2lnbmVkIGludCBhcGljX2x2dHBjOwotCXVuc2lnbmVkIGludCBhcGljX2x2dDA7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0MTsKLQl1bnNpZ25lZCBpbnQgYXBpY19sdnRlcnI7Ci0JdW5zaWduZWQgaW50IGFwaWNfdG1pY3Q7Ci0JdW5zaWduZWQgaW50IGFwaWNfdGRjcjsKLQl1bnNpZ25lZCBpbnQgYXBpY190aG1yOwotfSBhcGljX3BtX3N0YXRlOwotCi1zdGF0aWMgaW50IGxhcGljX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG1heGx2dDsKLQotCWlmICghYXBpY19wbV9zdGF0ZS5hY3RpdmUpCi0JCXJldHVybiAwOwotCi0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCi0JYXBpY19wbV9zdGF0ZS5hcGljX2lkID0gYXBpY19yZWFkKEFQSUNfSUQpOwotCWFwaWNfcG1fc3RhdGUuYXBpY190YXNrcHJpID0gYXBpY19yZWFkKEFQSUNfVEFTS1BSSSk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2xkciA9IGFwaWNfcmVhZChBUElDX0xEUik7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2RmciA9IGFwaWNfcmVhZChBUElDX0RGUik7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX3NwaXYgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0dCA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCWlmIChtYXhsdnQgPj0gNCkKLQkJYXBpY19wbV9zdGF0ZS5hcGljX2x2dHBjID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sdnQwID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2x2dDEgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0ZXJyID0gYXBpY19yZWFkKEFQSUNfTFZURVJSKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfdG1pY3QgPSBhcGljX3JlYWQoQVBJQ19UTUlDVCk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX3RkY3IgPSBhcGljX3JlYWQoQVBJQ19URENSKTsKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfTUNFX1A0VEhFUk1BTCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X01DRV9JTlRFTCkKLQlpZiAobWF4bHZ0ID49IDUpCi0JCWFwaWNfcG1fc3RhdGUuYXBpY190aG1yID0gYXBpY19yZWFkKEFQSUNfTFZUVEhNUik7Ci0jZW5kaWYKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGFwaWNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgaW50IGwsIGg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgbWF4bHZ0OwotCi0JaWYgKCFhcGljX3BtX3N0YXRlLmFjdGl2ZSkKLQkJcmV0dXJuIDA7Ci0KLQltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JaWYgKHgyYXBpYykKLQkJZW5hYmxlX3gyYXBpYygpOwotCWVsc2UKLSNlbmRpZgotCXsKLQkJLyoKLQkJICogTWFrZSBzdXJlIHRoZSBBUElDQkFTRSBwb2ludHMgdG8gdGhlIHJpZ2h0IGFkZHJlc3MKLQkJICoKLQkJICogRklYTUUhIFRoaXMgd2lsbCBiZSB3cm9uZyBpZiB3ZSBldmVyIHN1cHBvcnQgc3VzcGVuZCBvbgotCQkgKiBTTVAhIFdlJ2xsIG5lZWQgdG8gZG8gdGhpcyBhcyBwYXJ0IG9mIHRoZSBDUFUgcmVzdG9yZSEKLQkJICovCi0JCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQkJbCAmPSB+TVNSX0lBMzJfQVBJQ0JBU0VfQkFTRTsKLQkJbCB8PSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUgfCBtcF9sYXBpY19hZGRyOwotCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JfQotCi0JYXBpY193cml0ZShBUElDX0xWVEVSUiwgRVJST1JfQVBJQ19WRUNUT1IgfCBBUElDX0xWVF9NQVNLRUQpOwotCWFwaWNfd3JpdGUoQVBJQ19JRCwgYXBpY19wbV9zdGF0ZS5hcGljX2lkKTsKLQlhcGljX3dyaXRlKEFQSUNfREZSLCBhcGljX3BtX3N0YXRlLmFwaWNfZGZyKTsKLQlhcGljX3dyaXRlKEFQSUNfTERSLCBhcGljX3BtX3N0YXRlLmFwaWNfbGRyKTsKLQlhcGljX3dyaXRlKEFQSUNfVEFTS1BSSSwgYXBpY19wbV9zdGF0ZS5hcGljX3Rhc2twcmkpOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCBhcGljX3BtX3N0YXRlLmFwaWNfc3Bpdik7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnQwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dDEpOwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKENPTkZJR19YODZfTUNFX0lOVEVMKQotCWlmIChtYXhsdnQgPj0gNSkKLQkJYXBpY193cml0ZShBUElDX0xWVFRITVIsIGFwaWNfcG1fc3RhdGUuYXBpY190aG1yKTsKLSNlbmRpZgotCWlmIChtYXhsdnQgPj0gNCkKLQkJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0cGMpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0dCk7Ci0JYXBpY193cml0ZShBUElDX1REQ1IsIGFwaWNfcG1fc3RhdGUuYXBpY190ZGNyKTsKLQlhcGljX3dyaXRlKEFQSUNfVE1JQ1QsIGFwaWNfcG1fc3RhdGUuYXBpY190bWljdCk7Ci0JYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JYXBpY19yZWFkKEFQSUNfRVNSKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0ZXJyKTsKLQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQlhcGljX3JlYWQoQVBJQ19FU1IpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUaGlzIGRldmljZSBoYXMgbm8gc2h1dGRvd24gbWV0aG9kIC0gZnVsbHkgZnVuY3Rpb25pbmcgbG9jYWwgQVBJQ3MKLSAqIGFyZSBuZWVkZWQgb24gZXZlcnkgQ1BVIHVwIHVudGlsIG1hY2hpbmVfaGFsdC9yZXN0YXJ0L3Bvd2Vyb2ZmLgotICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGxhcGljX3N5c2NsYXNzID0gewotCS5uYW1lCQk9ICJsYXBpYyIsCi0JLnJlc3VtZQkJPSBsYXBpY19yZXN1bWUsCi0JLnN1c3BlbmQJPSBsYXBpY19zdXNwZW5kLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGRldmljZV9sYXBpYyA9IHsKLQkuaWQJPSAwLAotCS5jbHMJPSAmbGFwaWNfc3lzY2xhc3MsCi19OwotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKQotewotCWFwaWNfcG1fc3RhdGUuYWN0aXZlID0gMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9sYXBpY19zeXNmcyh2b2lkKQotewotCWludCBlcnJvcjsKLQotCWlmICghY3B1X2hhc19hcGljKQotCQlyZXR1cm4gMDsKLQkvKiBYWFg6IHJlbW92ZSBzdXNwZW5kL3Jlc3VtZSBwcm9jcyBpZiAhYXBpY19wbV9zdGF0ZS5hY3RpdmU/ICovCi0KLQllcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbGFwaWNfc3lzY2xhc3MpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZkZXZpY2VfbGFwaWMpOwotCXJldHVybiBlcnJvcjsKLX0KLWRldmljZV9pbml0Y2FsbChpbml0X2xhcGljX3N5c2ZzKTsKLQotI2Vsc2UJLyogQ09ORklHX1BNICovCi0KLXN0YXRpYyB2b2lkIGFwaWNfcG1fYWN0aXZhdGUodm9pZCkgeyB9Ci0KLSNlbmRpZgkvKiBDT05GSUdfUE0gKi8KLQotLyoKLSAqIEFQSUMgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKLSAqLwotc3RhdGljIGludCBfX2luaXQgcGFyc2VfbGFwaWMoY2hhciAqYXJnKQotewotCWZvcmNlX2VuYWJsZV9sb2NhbF9hcGljID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJsYXBpYyIsIHBhcnNlX2xhcGljKTsKLQotc3RhdGljIGludCBfX2luaXQgc2V0dXBfZGlzYWJsZWFwaWMoY2hhciAqYXJnKQotewotCWRpc2FibGVfYXBpYyA9IDE7Ci0Jc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9BUElDKTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJkaXNhYmxlYXBpYyIsIHNldHVwX2Rpc2FibGVhcGljKTsKLQotLyogc2FtZSBhcyBkaXNhYmxlYXBpYywgZm9yIGNvbXBhdGliaWxpdHkgKi8KLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX25vbGFwaWMoY2hhciAqYXJnKQotewotCXJldHVybiBzZXR1cF9kaXNhYmxlYXBpYyhhcmcpOwotfQotZWFybHlfcGFyYW0oIm5vbGFwaWMiLCBzZXR1cF9ub2xhcGljKTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyc2VfbGFwaWNfdGltZXJfYzJfb2soY2hhciAqYXJnKQotewotCWxvY2FsX2FwaWNfdGltZXJfYzJfb2sgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImxhcGljX3RpbWVyX2MyX29rIiwgcGFyc2VfbGFwaWNfdGltZXJfYzJfb2spOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9kaXNhYmxlX2FwaWNfdGltZXIoY2hhciAqYXJnKQotewotCWRpc2FibGVfYXBpY190aW1lciA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibm9hcGljdGltZXIiLCBwYXJzZV9kaXNhYmxlX2FwaWNfdGltZXIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9ub2xhcGljX3RpbWVyKGNoYXIgKmFyZykKLXsKLQlkaXNhYmxlX2FwaWNfdGltZXIgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5vbGFwaWNfdGltZXIiLCBwYXJzZV9ub2xhcGljX3RpbWVyKTsKLQotc3RhdGljIGludCBfX2luaXQgYXBpY19zZXRfdmVyYm9zaXR5KGNoYXIgKmFyZykKLXsKLQlpZiAoIWFyZykgIHsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCXNraXBfaW9hcGljX3NldHVwID0gMDsKLQkJaW9hcGljX2ZvcmNlID0gMTsKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHN0cmNtcCgiZGVidWciLCBhcmcpID09IDApCi0JCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19ERUJVRzsKLQllbHNlIGlmIChzdHJjbXAoInZlcmJvc2UiLCBhcmcpID09IDApCi0JCWFwaWNfdmVyYm9zaXR5ID0gQVBJQ19WRVJCT1NFOwotCWVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJBUElDIFZlcmJvc2l0eSBsZXZlbCAlcyBub3QgcmVjb2duaXNlZCIKLQkJCSIgdXNlIGFwaWM9dmVyYm9zZSBvciBhcGljPWRlYnVnXG4iLCBhcmcpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJhcGljIiwgYXBpY19zZXRfdmVyYm9zaXR5KTsKLQotc3RhdGljIGludCBfX2luaXQgbGFwaWNfaW5zZXJ0X3Jlc291cmNlKHZvaWQpCi17Ci0JaWYgKCFhcGljX3BoeXMpCi0JCXJldHVybiAtMTsKLQotCS8qIFB1dCBsb2NhbCBBUElDIGludG8gdGhlIHJlc291cmNlIG1hcC4gKi8KLQlsYXBpY19yZXNvdXJjZS5zdGFydCA9IGFwaWNfcGh5czsKLQlsYXBpY19yZXNvdXJjZS5lbmQgPSBsYXBpY19yZXNvdXJjZS5zdGFydCArIFBBR0VfU0laRSAtIDE7Ci0JaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmxhcGljX3Jlc291cmNlKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogbmVlZCBjYWxsIGluc2VydCBhZnRlciBlODIwX3Jlc2VydmVfcmVzb3VyY2VzKCkKLSAqIHRoYXQgaXMgdXNpbmcgcmVxdWVzdF9yZXNvdXJjZQotICovCi1sYXRlX2luaXRjYWxsKGxhcGljX2luc2VydF9yZXNvdXJjZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpY182NC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWNfNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRkZGI2OS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpY182NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg0OCArMCwwIEBACi0vKgotICoJTG9jYWwgQVBJQyBoYW5kbGluZywgbG9jYWwgQVBJQyB0aW1lcnMKLSAqCi0gKgkoYykgMTk5OSwgMjAwMCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KLSAqCi0gKglGaXhlcwotICoJTWFjaWVqIFcuIFJvenlja2kJOglCaXRzIGZvciBnZW51aW5lIDgyNDg5RFggQVBJQ3M7Ci0gKgkJCQkJdGhhbmtzIHRvIEVyaWMgR2lsbW9yZQotICoJCQkJCWFuZCBSb2xmIEcuIFRld3MKLSAqCQkJCQlmb3IgdGVzdGluZyB0aGVzZSBleHRlbnNpdmVseS4KLSAqCU1hY2llaiBXLiBSb3p5Y2tpCToJVmFyaW91cyB1cGRhdGVzIGFuZCBmaXhlcy4KLSAqCU1pa2FlbCBQZXR0ZXJzc29uCToJUG93ZXIgTWFuYWdlbWVudCBmb3IgVVAtQVBJQy4KLSAqCVBhdmVsIE1hY2hlayBhbmQKLSAqCU1pa2FlbCBQZXR0ZXJzc29uCToJUE0gY29udmVydGVkIHRvIGRyaXZlciBtb2RlbC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGlfcG10bXIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWFyLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9tdHJyLmg+Ci0jaW5jbHVkZSA8YXNtL21wc3BlYy5oPgotI2luY2x1ZGUgPGFzbS9ocGV0Lmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vbm1pLmg+Ci0jaW5jbHVkZSA8YXNtL2lkbGUuaD4KLSNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KLSNpbmNsdWRlIDxhc20vYXBpYy5oPgotI2luY2x1ZGUgPGFzbS9pODI1OS5oPgotCi0jaW5jbHVkZSA8bWFjaF9pcGkuaD4KLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLQotLyogRGlzYWJsZSBsb2NhbCBBUElDIHRpbWVyIGZyb20gdGhlIGtlcm5lbCBjb21tYW5kbGluZSBvciB2aWEgZG1pIHF1aXJrICovCi1zdGF0aWMgaW50IGRpc2FibGVfYXBpY190aW1lciBfX2NwdWluaXRkYXRhOwotc3RhdGljIGludCBhcGljX2NhbGlicmF0ZV9wbXRtciBfX2luaXRkYXRhOwotaW50IGRpc2FibGVfYXBpYzsKLWludCBkaXNhYmxlX3gyYXBpYzsKLWludCB4MmFwaWM7Ci0KLS8qIHgyYXBpYyBlbmFibGVkIGJlZm9yZSBPUyBoYW5kb3ZlciAqLwotaW50IHgyYXBpY19wcmVlbmFibGVkOwotCi0vKiBMb2NhbCBBUElDIHRpbWVyIHdvcmtzIGluIEMyICovCi1pbnQgbG9jYWxfYXBpY190aW1lcl9jMl9vazsKLUVYUE9SVF9TWU1CT0xfR1BMKGxvY2FsX2FwaWNfdGltZXJfYzJfb2spOwotCi0vKgotICogRGVidWcgbGV2ZWwsIGV4cG9ydGVkIGZvciBpb19hcGljLmMKLSAqLwotdW5zaWduZWQgaW50IGFwaWNfdmVyYm9zaXR5OwotCi0vKiBIYXZlIHdlIGZvdW5kIGFuIE1QIHRhYmxlICovCi1pbnQgc21wX2ZvdW5kX2NvbmZpZzsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsYXBpY19yZXNvdXJjZSA9IHsKLQkubmFtZSA9ICJMb2NhbCBBUElDIiwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWSwKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsaWJyYXRpb25fcmVzdWx0OwotCi1zdGF0aWMgaW50IGxhcGljX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKLQkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpOwotc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfc2V0dXAoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCi0JCQkgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpOwotc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfYnJvYWRjYXN0KGNwdW1hc2tfdCBtYXNrKTsKLXN0YXRpYyB2b2lkIGFwaWNfcG1fYWN0aXZhdGUodm9pZCk7Ci0KLS8qCi0gKiBUaGUgbG9jYWwgYXBpYyB0aW1lciBjYW4gYmUgdXNlZCBmb3IgYW55IGZ1bmN0aW9uIHdoaWNoIGlzIENQVSBsb2NhbC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgbGFwaWNfY2xvY2tldmVudCA9IHsKLQkubmFtZQkJPSAibGFwaWMiLAotCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVAotCQkJfCBDTE9DS19FVlRfRkVBVF9DM1NUT1AgfCBDTE9DS19FVlRfRkVBVF9EVU1NWSwKLQkuc2hpZnQJCT0gMzIsCi0JLnNldF9tb2RlCT0gbGFwaWNfdGltZXJfc2V0dXAsCi0JLnNldF9uZXh0X2V2ZW50CT0gbGFwaWNfbmV4dF9ldmVudCwKLQkuYnJvYWRjYXN0CT0gbGFwaWNfdGltZXJfYnJvYWRjYXN0LAotCS5yYXRpbmcJCT0gMTAwLAotCS5pcnEJCT0gLTEsCi19Owotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UsIGxhcGljX2V2ZW50cyk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGFwaWNfcGh5czsKLQotdW5zaWduZWQgbG9uZyBtcF9sYXBpY19hZGRyOwotCi0vKgotICogR2V0IHRoZSBMQVBJQyB2ZXJzaW9uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGxhcGljX2dldF92ZXJzaW9uKHZvaWQpCi17Ci0JcmV0dXJuIEdFVF9BUElDX1ZFUlNJT04oYXBpY19yZWFkKEFQSUNfTFZSKSk7Ci19Ci0KLS8qCi0gKiBDaGVjaywgaWYgdGhlIEFQSUMgaXMgaW50ZWdyYXRlZCBvciBhIHNlcGFyYXRlIGNoaXAKLSAqLwotc3RhdGljIGlubGluZSBpbnQgbGFwaWNfaXNfaW50ZWdyYXRlZCh2b2lkKQotewotI2lmZGVmIENPTkZJR19YODZfNjQKLQlyZXR1cm4gMTsKLSNlbHNlCi0JcmV0dXJuIEFQSUNfSU5URUdSQVRFRChsYXBpY19nZXRfdmVyc2lvbigpKTsKLSNlbmRpZgotfQotCi0vKgotICogQ2hlY2ssIHdoZXRoZXIgdGhpcyBpcyBhIG1vZGVybiBvciBhIGZpcnN0IGdlbmVyYXRpb24gQVBJQwotICovCi1zdGF0aWMgaW50IG1vZGVybl9hcGljKHZvaWQpCi17Ci0JLyogQU1EIHN5c3RlbXMgdXNlIG9sZCBBUElDIHZlcnNpb25zLCBzbyBjaGVjayB0aGUgQ1BVICovCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCAmJgotCSAgICBib290X2NwdV9kYXRhLng4NiA+PSAweGYpCi0JCXJldHVybiAxOwotCXJldHVybiBsYXBpY19nZXRfdmVyc2lvbigpID49IDB4MTQ7Ci19Ci0KLS8qCi0gKiBQYXJhdmlydCBrZXJuZWxzIGFsc28gbWlnaHQgYmUgdXNpbmcgdGhlc2UgYmVsb3cgb3BzLiBTbyB3ZSBzdGlsbAotICogdXNlIGdlbmVyaWMgYXBpY19yZWFkKCkvYXBpY193cml0ZSgpLCB3aGljaCBtaWdodCBiZSBwb2ludGluZyB0byBkaWZmZXJlbnQKLSAqIG9wcyBpbiBQQVJBVklSVCBjYXNlLgotICovCi12b2lkIHhhcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKLXsKLQl3aGlsZSAoYXBpY19yZWFkKEFQSUNfSUNSKSAmIEFQSUNfSUNSX0JVU1kpCi0JCWNwdV9yZWxheCgpOwotfQotCi11MzIgc2FmZV94YXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCi17Ci0JdTMyIHNlbmRfc3RhdHVzOwotCWludCB0aW1lb3V0OwotCi0JdGltZW91dCA9IDA7Ci0JZG8gewotCQlzZW5kX3N0YXR1cyA9IGFwaWNfcmVhZChBUElDX0lDUikgJiBBUElDX0lDUl9CVVNZOwotCQlpZiAoIXNlbmRfc3RhdHVzKQotCQkJYnJlYWs7Ci0JCXVkZWxheSgxMDApOwotCX0gd2hpbGUgKHRpbWVvdXQrKyA8IDEwMDApOwotCi0JcmV0dXJuIHNlbmRfc3RhdHVzOwotfQotCi12b2lkIHhhcGljX2ljcl93cml0ZSh1MzIgbG93LCB1MzIgaWQpCi17Ci0JYXBpY193cml0ZShBUElDX0lDUjIsIFNFVF9BUElDX0RFU1RfRklFTEQoaWQpKTsKLQlhcGljX3dyaXRlKEFQSUNfSUNSLCBsb3cpOwotfQotCi11NjQgeGFwaWNfaWNyX3JlYWQodm9pZCkKLXsKLQl1MzIgaWNyMSwgaWNyMjsKLQotCWljcjIgPSBhcGljX3JlYWQoQVBJQ19JQ1IyKTsKLQlpY3IxID0gYXBpY19yZWFkKEFQSUNfSUNSKTsKLQotCXJldHVybiBpY3IxIHwgKCh1NjQpaWNyMiA8PCAzMik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXBpY19vcHMgeGFwaWNfb3BzID0gewotCS5yZWFkID0gbmF0aXZlX2FwaWNfbWVtX3JlYWQsCi0JLndyaXRlID0gbmF0aXZlX2FwaWNfbWVtX3dyaXRlLAotCS5pY3JfcmVhZCA9IHhhcGljX2ljcl9yZWFkLAotCS5pY3Jfd3JpdGUgPSB4YXBpY19pY3Jfd3JpdGUsCi0JLndhaXRfaWNyX2lkbGUgPSB4YXBpY193YWl0X2ljcl9pZGxlLAotCS5zYWZlX3dhaXRfaWNyX2lkbGUgPSBzYWZlX3hhcGljX3dhaXRfaWNyX2lkbGUsCi19OwotCi1zdHJ1Y3QgYXBpY19vcHMgX19yZWFkX21vc3RseSAqYXBpY19vcHMgPSAmeGFwaWNfb3BzOwotRVhQT1JUX1NZTUJPTF9HUEwoYXBpY19vcHMpOwotCi1zdGF0aWMgdm9pZCB4MmFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQotewotCS8qIG5vIG5lZWQgdG8gd2FpdCBmb3IgaWNyIGlkbGUgaW4geDJhcGljICovCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdTMyIHNhZmVfeDJhcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKLXsKLQkvKiBubyBuZWVkIHRvIHdhaXQgZm9yIGljciBpZGxlIGluIHgyYXBpYyAqLwotCXJldHVybiAwOwotfQotCi12b2lkIHgyYXBpY19pY3Jfd3JpdGUodTMyIGxvdywgdTMyIGlkKQotewotCXdybXNybChBUElDX0JBU0VfTVNSICsgKEFQSUNfSUNSID4+IDQpLCAoKF9fdTY0KSBpZCkgPDwgMzIgfCBsb3cpOwotfQotCi11NjQgeDJhcGljX2ljcl9yZWFkKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0KLQlyZG1zcmwoQVBJQ19CQVNFX01TUiArIChBUElDX0lDUiA+PiA0KSwgdmFsKTsKLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgc3RydWN0IGFwaWNfb3BzIHgyYXBpY19vcHMgPSB7Ci0JLnJlYWQgPSBuYXRpdmVfYXBpY19tc3JfcmVhZCwKLQkud3JpdGUgPSBuYXRpdmVfYXBpY19tc3Jfd3JpdGUsCi0JLmljcl9yZWFkID0geDJhcGljX2ljcl9yZWFkLAotCS5pY3Jfd3JpdGUgPSB4MmFwaWNfaWNyX3dyaXRlLAotCS53YWl0X2ljcl9pZGxlID0geDJhcGljX3dhaXRfaWNyX2lkbGUsCi0JLnNhZmVfd2FpdF9pY3JfaWRsZSA9IHNhZmVfeDJhcGljX3dhaXRfaWNyX2lkbGUsCi19OwotCi0vKioKLSAqIGVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwIC0gZW5hYmxlIE5NSSB0aHJvdWdoIGxvY2FsIHZlY3RvciB0YWJsZSAwCi0gKi8KLXZvaWQgX19jcHVpbml0IGVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQkvKiB1bm1hc2sgYW5kIHNldCB0byBOTUkgKi8KLQl2ID0gQVBJQ19ETV9OTUk7Ci0KLQkvKiBMZXZlbCB0cmlnZ2VyZWQgZm9yIDgyNDg5RFggKDMyYml0IG1vZGUpICovCi0JaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCi0JCXYgfD0gQVBJQ19MVlRfTEVWRUxfVFJJR0dFUjsKLQotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2KTsKLX0KLQotLyoqCi0gKiBsYXBpY19nZXRfbWF4bHZ0IC0gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsb2NhbCB2ZWN0b3IgdGFibGUgZW50cmllcwotICovCi1pbnQgbGFwaWNfZ2V0X21heGx2dCh2b2lkKQotewotCXVuc2lnbmVkIGludCB2OwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JLyoKLQkgKiAtIHdlIGFsd2F5cyBoYXZlIEFQSUMgaW50ZWdyYXRlZCBvbiA2NGJpdCBtb2RlCi0JICogLSA4MjQ4OURYcyBkbyBub3QgcmVwb3J0ICMgb2YgTFZUIGVudHJpZXMKLQkgKi8KLQlyZXR1cm4gQVBJQ19JTlRFR1JBVEVEKEdFVF9BUElDX1ZFUlNJT04odikpID8gR0VUX0FQSUNfTUFYTFZUKHYpIDogMjsKLX0KLQotLyoKLSAqIExvY2FsIEFQSUMgdGltZXIKLSAqLwotCi0vKiBDbG9jayBkaXZpc29yICovCi0jaWZkZWYgQ09ORkdfWDg2XzY0Ci0jZGVmaW5lIEFQSUNfRElWSVNPUiAxCi0jZWxzZQotI2RlZmluZSBBUElDX0RJVklTT1IgMTYKLSNlbmRpZgotCi0vKgotICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIHRoZSBsb2NhbCBBUElDIHRpbWVyLCB3aXRoIGEgdGltZW91dCBvZgotICogJ2Nsb2NrcycgQVBJQyBidXMgY2xvY2suIER1cmluZyBjYWxpYnJhdGlvbiB3ZSBhY3R1YWxseSBjYWxsCi0gKiB0aGlzIGZ1bmN0aW9uIHR3aWNlIG9uIHRoZSBib290IENQVSwgb25jZSB3aXRoIGEgYm9ndXMgdGltZW91dAotICogdmFsdWUsIHNlY29uZCB0aW1lIGZvciByZWFsLiBUaGUgb3RoZXIgKG5vbmNhbGlicmF0aW5nKSBDUFVzCi0gKiBjYWxsIHRoaXMgZnVuY3Rpb24gb25seSBvbmNlLCB3aXRoIHRoZSByZWFsLCBjYWxpYnJhdGVkIHZhbHVlLgotICoKLSAqIFdlIGRvIHJlYWRzIGJlZm9yZSB3cml0ZXMgZXZlbiBpZiB1bm5lY2Vzc2FyeSwgdG8gZ2V0IGFyb3VuZCB0aGUKLSAqIFA1IEFQSUMgZG91YmxlIHdyaXRlIGJ1Zy4KLSAqLwotc3RhdGljIHZvaWQgX19zZXR1cF9BUElDX0xWVFQodW5zaWduZWQgaW50IGNsb2NrcywgaW50IG9uZXNob3QsIGludCBpcnFlbikKLXsKLQl1bnNpZ25lZCBpbnQgbHZ0dF92YWx1ZSwgdG1wX3ZhbHVlOwotCi0JbHZ0dF92YWx1ZSA9IExPQ0FMX1RJTUVSX1ZFQ1RPUjsKLQlpZiAoIW9uZXNob3QpCi0JCWx2dHRfdmFsdWUgfD0gQVBJQ19MVlRfVElNRVJfUEVSSU9ESUM7Ci0JaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCi0JCWx2dHRfdmFsdWUgfD0gU0VUX0FQSUNfVElNRVJfQkFTRShBUElDX1RJTUVSX0JBU0VfRElWKTsKLQotCWlmICghaXJxZW4pCi0JCWx2dHRfdmFsdWUgfD0gQVBJQ19MVlRfTUFTS0VEOwotCi0JYXBpY193cml0ZShBUElDX0xWVFQsIGx2dHRfdmFsdWUpOwotCi0JLyoKLQkgKiBEaXZpZGUgUElDTEsgYnkgMTYKLQkgKi8KLQl0bXBfdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19URENSKTsKLQlhcGljX3dyaXRlKEFQSUNfVERDUiwKLQkJKHRtcF92YWx1ZSAmIH4oQVBJQ19URFJfRElWXzEgfCBBUElDX1REUl9ESVZfVE1CQVNFKSkgfAotCQlBUElDX1REUl9ESVZfMTYpOwotCi0JaWYgKCFvbmVzaG90KQotCQlhcGljX3dyaXRlKEFQSUNfVE1JQ1QsIGNsb2NrcyAvIEFQSUNfRElWSVNPUik7Ci19Ci0KLS8qCi0gKiBTZXR1cCBleHRlbmRlZCBMVlQsIEFNRCBzcGVjaWZpYyAoSzgsIGZhbWlseSAxMGgpCi0gKgotICogVmVjdG9yIG1hcHBpbmdzIGFyZSBoYXJkIGNvZGVkLiBPbiBLOCBvbmx5IG9mZnNldCAwIChBUElDNTAwKSBhbmQKLSAqIE1DRSBpbnRlcnJ1cHRzIGFyZSBzdXBwb3J0ZWQuIFRodXMgTUNFIG9mZnNldCBtdXN0IGJlIHNldCB0byAwLgotICoKLSAqIElmIG1hc2s9MSwgdGhlIExWVCBlbnRyeSBkb2VzIG5vdCBnZW5lcmF0ZSBpbnRlcnJ1cHRzIHdoaWxlIG1hc2s9MAotICogZW5hYmxlcyB0aGUgdmVjdG9yLiBTZWUgYWxzbyB0aGUgQktER3MuCi0gKi8KLQotI2RlZmluZSBBUElDX0VJTFZUX0xWVE9GRl9NQ0UgMAotI2RlZmluZSBBUElDX0VJTFZUX0xWVE9GRl9JQlMgMQotCi1zdGF0aWMgdm9pZCBzZXR1cF9BUElDX2VpbHZ0KHU4IGx2dF9vZmYsIHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spCi17Ci0JdW5zaWduZWQgbG9uZyByZWcgPSAobHZ0X29mZiA8PCA0KSArIEFQSUNfRUlMVlQwOwotCXVuc2lnbmVkIGludCAgdiAgID0gKG1hc2sgPDwgMTYpIHwgKG1zZ190eXBlIDw8IDgpIHwgdmVjdG9yOwotCi0JYXBpY193cml0ZShyZWcsIHYpOwotfQotCi11OCBzZXR1cF9BUElDX2VpbHZ0X21jZSh1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKQotewotCXNldHVwX0FQSUNfZWlsdnQoQVBJQ19FSUxWVF9MVlRPRkZfTUNFLCB2ZWN0b3IsIG1zZ190eXBlLCBtYXNrKTsKLQlyZXR1cm4gQVBJQ19FSUxWVF9MVlRPRkZfTUNFOwotfQotCi11OCBzZXR1cF9BUElDX2VpbHZ0X2licyh1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKQotewotCXNldHVwX0FQSUNfZWlsdnQoQVBJQ19FSUxWVF9MVlRPRkZfSUJTLCB2ZWN0b3IsIG1zZ190eXBlLCBtYXNrKTsKLQlyZXR1cm4gQVBJQ19FSUxWVF9MVlRPRkZfSUJTOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoc2V0dXBfQVBJQ19laWx2dF9pYnMpOwotCi0vKgotICogUHJvZ3JhbSB0aGUgbmV4dCBldmVudCwgcmVsYXRpdmUgdG8gbm93Ci0gKi8KLXN0YXRpYyBpbnQgbGFwaWNfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAotCQkJICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKLXsKLQlhcGljX3dyaXRlKEFQSUNfVE1JQ1QsIGRlbHRhKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNldHVwIHRoZSBsYXBpYyB0aW1lciBpbiBwZXJpb2RpYyBvciBvbmVzaG90IG1vZGUKLSAqLwotc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfc2V0dXAoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCi0JCQkgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgdjsKLQotCS8qIExhcGljIHVzZWQgYXMgZHVtbXkgZm9yIGJyb2FkY2FzdCA/ICovCi0JaWYgKGV2dC0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9EVU1NWSkKLQkJcmV0dXJuOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKLQljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6Ci0JCV9fc2V0dXBfQVBJQ19MVlRUKGNhbGlicmF0aW9uX3Jlc3VsdCwKLQkJCQkgIG1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMsIDEpOwotCQlicmVhazsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKLQljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgotCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JCXYgfD0gKEFQSUNfTFZUX01BU0tFRCB8IExPQ0FMX1RJTUVSX1ZFQ1RPUik7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2KTsKLQkJYnJlYWs7Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6Ci0JCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLwotCQlicmVhazsKLQl9Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qCi0gKiBMb2NhbCBBUElDIHRpbWVyIGJyb2FkY2FzdCBmdW5jdGlvbgotICovCi1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9icm9hZGNhc3QoY3B1bWFza190IG1hc2spCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXNlbmRfSVBJX21hc2sobWFzaywgTE9DQUxfVElNRVJfVkVDVE9SKTsKLSNlbmRpZgotfQotCi0vKgotICogU2V0dXAgdGhlIGxvY2FsIEFQSUMgdGltZXIgZm9yIHRoaXMgQ1BVLiBDb3B5IHRoZSBpbml0aWxpemVkIHZhbHVlcwotICogb2YgdGhlIGJvb3QgQ1BVIGFuZCByZWdpc3RlciB0aGUgY2xvY2sgZXZlbnQgaW4gdGhlIGZyYW1ld29yay4KLSAqLwotc3RhdGljIHZvaWQgc2V0dXBfQVBJQ190aW1lcih2b2lkKQotewotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmxldnQgPSAmX19nZXRfY3B1X3ZhcihsYXBpY19ldmVudHMpOwotCi0JbWVtY3B5KGxldnQsICZsYXBpY19jbG9ja2V2ZW50LCBzaXplb2YoKmxldnQpKTsKLQlsZXZ0LT5jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShsZXZ0KTsKLX0KLQotLyoKLSAqIEluIHRoaXMgZnVuY3Rpb24gd2UgY2FsaWJyYXRlIEFQSUMgYnVzIGNsb2NrcyB0byB0aGUgZXh0ZXJuYWwKLSAqIHRpbWVyLiBVbmZvcnR1bmF0ZWx5IHdlIGNhbm5vdCB1c2UgamlmZmllcyBhbmQgdGhlIHRpbWVyIGlycQotICogdG8gY2FsaWJyYXRlLCBzaW5jZSBzb21lIGxhdGVyIGJvb3R1cCBjb2RlIGRlcGVuZHMgb24gZ2V0dGluZwotICogdGhlIGZpcnN0IGlycT8gVWdoLgotICoKLSAqIFdlIHdhbnQgdG8gZG8gdGhlIGNhbGlicmF0aW9uIG9ubHkgb25jZSBzaW5jZSB3ZQotICogd2FudCB0byBoYXZlIGxvY2FsIHRpbWVyIGlycXMgc3luY3Jvbi4gQ1BVcyBjb25uZWN0ZWQKLSAqIGJ5IHRoZSBzYW1lIEFQSUMgYnVzIGhhdmUgdGhlIHZlcnkgc2FtZSBidXMgZnJlcXVlbmN5LgotICogQW5kIHdlIHdhbnQgdG8gaGF2ZSBpcnFzIG9mZiBhbnl3YXlzLCBubyBhY2NpZGVudGFsCi0gKiBBUElDIGlycSB0aGF0IHdheS4KLSAqLwotCi0jZGVmaW5lIFRJQ0tfQ09VTlQgMTAwMDAwMDAwCi0KLXN0YXRpYyBpbnQgX19pbml0IGNhbGlicmF0ZV9BUElDX2Nsb2NrKHZvaWQpCi17Ci0JdW5zaWduZWQgYXBpYywgYXBpY19zdGFydDsKLQl1bnNpZ25lZCBsb25nIHRzYywgdHNjX3N0YXJ0OwotCWludCByZXN1bHQ7Ci0KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0JLyoKLQkgKiBQdXQgd2hhdGV2ZXIgYXJiaXRyYXJ5IChidXQgbG9uZyBlbm91Z2gpIHRpbWVvdXQKLQkgKiB2YWx1ZSBpbnRvIHRoZSBBUElDIGNsb2NrLCB3ZSBqdXN0IHdhbnQgdG8gZ2V0IHRoZQotCSAqIGNvdW50ZXIgcnVubmluZyBmb3IgY2FsaWJyYXRpb24uCi0JICoKLQkgKiBObyBpbnRlcnJ1cHQgZW5hYmxlICEKLQkgKi8KLQlfX3NldHVwX0FQSUNfTFZUVCgyNTAwMDAwMDAsIDAsIDApOwotCi0JYXBpY19zdGFydCA9IGFwaWNfcmVhZChBUElDX1RNQ0NUKTsKLSNpZmRlZiBDT05GSUdfWDg2X1BNX1RJTUVSCi0JaWYgKGFwaWNfY2FsaWJyYXRlX3BtdG1yICYmIHBtdG1yX2lvcG9ydCkgewotCQlwbXRpbWVyX3dhaXQoNTAwMCk7ICAvKiA1bXMgd2FpdCAqLwotCQlhcGljID0gYXBpY19yZWFkKEFQSUNfVE1DQ1QpOwotCQlyZXN1bHQgPSAoYXBpY19zdGFydCAtIGFwaWMpICogMTAwMEwgLyA1OwotCX0gZWxzZQotI2VuZGlmCi0JewotCQlyZHRzY2xsKHRzY19zdGFydCk7Ci0KLQkJZG8gewotCQkJYXBpYyA9IGFwaWNfcmVhZChBUElDX1RNQ0NUKTsKLQkJCXJkdHNjbGwodHNjKTsKLQkJfSB3aGlsZSAoKHRzYyAtIHRzY19zdGFydCkgPCBUSUNLX0NPVU5UICYmCi0JCQkJKGFwaWNfc3RhcnQgLSBhcGljKSA8IFRJQ0tfQ09VTlQpOwotCi0JCXJlc3VsdCA9IChhcGljX3N0YXJ0IC0gYXBpYykgKiAxMDAwTCAqIHRzY19raHogLwotCQkJCQkodHNjIC0gdHNjX3N0YXJ0KTsKLQl9Ci0KLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiQVBJQyB0aW1lciBjYWxpYnJhdGlvbiByZXN1bHQgJWRcbiIsIHJlc3VsdCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJEZXRlY3RlZCAlZC4lMDNkIE1IeiBBUElDIHRpbWVyLlxuIiwKLQkJcmVzdWx0IC8gMTAwMCAvIDEwMDAsIHJlc3VsdCAvIDEwMDAgJSAxMDAwKTsKLQotCS8qIENhbGN1bGF0ZSB0aGUgc2NhbGVkIG1hdGggbXVsdGlwbGljYXRpb24gZmFjdG9yICovCi0JbGFwaWNfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKHJlc3VsdCwgTlNFQ19QRVJfU0VDLAotCQkJCSAgICAgICBsYXBpY19jbG9ja2V2ZW50LnNoaWZ0KTsKLQlsYXBpY19jbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9Ci0JCWNsb2NrZXZlbnRfZGVsdGEybnMoMHg3RkZGRkYsICZsYXBpY19jbG9ja2V2ZW50KTsKLQlsYXBpY19jbG9ja2V2ZW50Lm1pbl9kZWx0YV9ucyA9Ci0JCWNsb2NrZXZlbnRfZGVsdGEybnMoMHhGLCAmbGFwaWNfY2xvY2tldmVudCk7Ci0KLQljYWxpYnJhdGlvbl9yZXN1bHQgPSAocmVzdWx0ICogQVBJQ19ESVZJU09SKSAvIEhaOwotCi0JLyoKLQkgKiBEbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgQVBJQyBjYWxpYnJhdGlvbiByZXN1bHQKLQkgKi8KLQlpZiAoY2FsaWJyYXRpb25fcmVzdWx0IDwgKDEwMDAwMDAgLyBIWikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJIkFQSUMgZnJlcXVlbmN5IHRvbyBzbG93LCBkaXNhYmxpbmcgYXBpYyB0aW1lclxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNldHVwIHRoZSBib290IEFQSUMKLSAqCi0gKiBDYWxpYnJhdGUgYW5kIHZlcmlmeSB0aGUgcmVzdWx0LgotICovCi12b2lkIF9faW5pdCBzZXR1cF9ib290X0FQSUNfY2xvY2sodm9pZCkKLXsKLQkvKgotCSAqIFRoZSBsb2NhbCBhcGljIHRpbWVyIGNhbiBiZSBkaXNhYmxlZCB2aWEgdGhlIGtlcm5lbAotCSAqIGNvbW1hbmRsaW5lIG9yIGZyb20gdGhlIENQVSBkZXRlY3Rpb24gY29kZS4gUmVnaXN0ZXIgdGhlIGxhcGljCi0JICogdGltZXIgYXMgYSBkdW1teSBjbG9jayBldmVudCBzb3VyY2Ugb24gU01QIHN5c3RlbXMsIHNvIHRoZQotCSAqIGJyb2FkY2FzdCBtZWNoYW5pc20gaXMgdXNlZC4gT24gVVAgc3lzdGVtcyBzaW1wbHkgaWdub3JlIGl0LgotCSAqLwotCWlmIChkaXNhYmxlX2FwaWNfdGltZXIpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsaW5nIEFQSUMgdGltZXJcbiIpOwotCQkvKiBObyBicm9hZGNhc3Qgb24gVVAgISAqLwotCQlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpIHsKLQkJCWxhcGljX2Nsb2NrZXZlbnQubXVsdCA9IDE7Ci0JCQlzZXR1cF9BUElDX3RpbWVyKCk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlVzaW5nIGxvY2FsIEFQSUMgdGltZXIgaW50ZXJydXB0cy5cbiIKLQkJICAgICJjYWxpYnJhdGluZyBBUElDIHRpbWVyIC4uLlxuIik7Ci0KLQlpZiAoY2FsaWJyYXRlX0FQSUNfY2xvY2soKSkgewotCQkvKiBObyBicm9hZGNhc3Qgb24gVVAgISAqLwotCQlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpCi0JCQlzZXR1cF9BUElDX3RpbWVyKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIElmIG5taV93YXRjaGRvZyBpcyBzZXQgdG8gSU9fQVBJQywgd2UgbmVlZCB0aGUKLQkgKiBQSVQvSFBFVCBnb2luZy4gIE90aGVyd2lzZSByZWdpc3RlciBsYXBpYyBhcyBhIGR1bW15Ci0JICogZGV2aWNlLgotCSAqLwotCWlmIChubWlfd2F0Y2hkb2cgIT0gTk1JX0lPX0FQSUMpCi0JCWxhcGljX2Nsb2NrZXZlbnQuZmVhdHVyZXMgJj0gfkNMT0NLX0VWVF9GRUFUX0RVTU1ZOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVBJQyB0aW1lciByZWdpc3RlcmVkIGFzIGR1bW15LCIKLQkJCSIgZHVlIHRvIG5taV93YXRjaGRvZz0lZCFcbiIsIG5taV93YXRjaGRvZyk7Ci0KLQkvKiBTZXR1cCB0aGUgbGFwaWMgb3IgcmVxdWVzdCB0aGUgYnJvYWRjYXN0ICovCi0Jc2V0dXBfQVBJQ190aW1lcigpOwotfQotCi12b2lkIF9fY3B1aW5pdCBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayh2b2lkKQotewotCXNldHVwX0FQSUNfdGltZXIoKTsKLX0KLQotLyoKLSAqIFRoZSBndXRzIG9mIHRoZSBhcGljIHRpbWVyIGludGVycnVwdAotICovCi1zdGF0aWMgdm9pZCBsb2NhbF9hcGljX3RpbWVyX2ludGVycnVwdCh2b2lkKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJnBlcl9jcHUobGFwaWNfZXZlbnRzLCBjcHUpOwotCi0JLyoKLQkgKiBOb3JtYWxseSB3ZSBzaG91bGQgbm90IGJlIGhlcmUgdGlsbCBMQVBJQyBoYXMgYmVlbiBpbml0aWFsaXplZCBidXQKLQkgKiBpbiBzb21lIGNhc2VzIGxpa2Uga2R1bXAsIGl0cyBwb3NzaWJsZSB0aGF0IHRoZXJlIGlzIGEgcGVuZGluZyBMQVBJQwotCSAqIHRpbWVyIGludGVycnVwdCBmcm9tIHByZXZpb3VzIGtlcm5lbCdzIGNvbnRleHQgYW5kIGlzIGRlbGl2ZXJlZCBpbgotCSAqIG5ldyBrZXJuZWwgdGhlIG1vbWVudCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLgotCSAqCi0JICogSW50ZXJydXB0cyBhcmUgZW5hYmxlZCBlYXJseSBhbmQgTEFQSUMgaXMgc2V0dXAgbXVjaCBsYXRlciwgaGVuY2UKLQkgKiBpdHMgcG9zc2libGUgdGhhdCB3aGVuIHdlIGdldCBoZXJlIGV2dC0+ZXZlbnRfaGFuZGxlciBpcyBOVUxMLgotCSAqIENoZWNrIGZvciBldmVudF9oYW5kbGVyIGJlaW5nIE5VTEwgYW5kIGRpc2NhcmQgdGhlIGludGVycnVwdCBhcwotCSAqIHNwdXJpb3VzLgotCSAqLwotCWlmICghZXZ0LT5ldmVudF9oYW5kbGVyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJTcHVyaW91cyBMQVBJQyB0aW1lciBpbnRlcnJ1cHQgb24gY3B1ICVkXG4iLCBjcHUpOwotCQkvKiBTd2l0Y2ggaXQgb2ZmICovCi0JCWxhcGljX3RpbWVyX3NldHVwKENMT0NLX0VWVF9NT0RFX1NIVVRET1dOLCBldnQpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiB0aGUgTk1JIGRlYWRsb2NrLWRldGVjdG9yIHVzZXMgdGhpcy4KLQkgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JYWRkX3BkYShhcGljX3RpbWVyX2lycXMsIDEpOwotI2Vsc2UKLQlwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmFwaWNfdGltZXJfaXJxcysrOwotI2VuZGlmCi0KLQlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKLX0KLQotLyoKLSAqIExvY2FsIEFQSUMgdGltZXIgaW50ZXJydXB0LiBUaGlzIGlzIHRoZSBtb3N0IG5hdHVyYWwgd2F5IGZvciBkb2luZwotICogbG9jYWwgaW50ZXJydXB0cywgYnV0IGxvY2FsIHRpbWVyIGludGVycnVwdHMgY2FuIGJlIGVtdWxhdGVkIGJ5Ci0gKiBicm9hZGNhc3QgaW50ZXJydXB0cyB0b28uIFtpbiBjYXNlIHRoZSBodyBkb2Vzbid0IHN1cHBvcnQgQVBJQyB0aW1lcnNdCi0gKgotICogWyBpZiBhIHNpbmdsZS1DUFUgc3lzdGVtIHJ1bnMgYW4gU01QIGtlcm5lbCB0aGVuIHdlIGNhbGwgdGhlIGxvY2FsCi0gKiAgIGludGVycnVwdCBhcyB3ZWxsLiBUaHVzIHdlIGNhbm5vdCBpbmxpbmUgdGhlIGxvY2FsIGlycSAuLi4gXQotICovCi12b2lkIHNtcF9hcGljX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7Ci0KLQkvKgotCSAqIE5PVEUhIFdlJ2QgYmV0dGVyIEFDSyB0aGUgaXJxIGltbWVkaWF0ZWx5LAotCSAqIGJlY2F1c2UgdGltZXIgaGFuZGxpbmcgY2FuIGJlIHNsb3cuCi0JICovCi0JYWNrX0FQSUNfaXJxKCk7Ci0JLyoKLQkgKiB1cGRhdGVfcHJvY2Vzc190aW1lcygpIGV4cGVjdHMgdXMgdG8gaGF2ZSBkb25lIGlycV9lbnRlcigpLgotCSAqIEJlc2lkZXMsIGlmIHdlIGRvbid0IHRpbWVyIGludGVycnVwdHMgaWdub3JlIHRoZSBnbG9iYWwKLQkgKiBpbnRlcnJ1cHQgbG9jaywgd2hpY2ggaXMgdGhlIFdyb25nVGhpbmcgKHRtKSB0byBkby4KLQkgKi8KLQlleGl0X2lkbGUoKTsKLQlpcnFfZW50ZXIoKTsKLQlsb2NhbF9hcGljX3RpbWVyX2ludGVycnVwdCgpOwotCWlycV9leGl0KCk7Ci0KLQlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwotfQotCi1pbnQgc2V0dXBfcHJvZmlsaW5nX3RpbWVyKHVuc2lnbmVkIGludCBtdWx0aXBsaWVyKQotewotCXJldHVybiAtRUlOVkFMOwotfQotCi0KLS8qCi0gKiBMb2NhbCBBUElDIHN0YXJ0IGFuZCBzaHV0ZG93bgotICovCi0KLS8qKgotICogY2xlYXJfbG9jYWxfQVBJQyAtIHNodXRkb3duIHRoZSBsb2NhbCBBUElDCi0gKgotICogVGhpcyBpcyBjYWxsZWQsIHdoZW4gYSBDUFUgaXMgZGlzYWJsZWQgYW5kIGJlZm9yZSByZWJvb3RpbmcsIHNvIHRoZSBzdGF0ZSBvZgotICogdGhlIGxvY2FsIEFQSUMgaGFzIG5vIGRhbmdsaW5nIGxlZnRvdmVycy4gQWxzbyB1c2VkIHRvIGNsZWFub3V0IGFueSBCSU9TCi0gKiBsZWZ0b3ZlcnMgZHVyaW5nIGJvb3QuCi0gKi8KLXZvaWQgY2xlYXJfbG9jYWxfQVBJQyh2b2lkKQotewotCWludCBtYXhsdnQ7Ci0JdTMyIHY7Ci0KLQkvKiBBUElDIGhhc24ndCBiZWVuIG1hcHBlZCB5ZXQgKi8KLQlpZiAoIWFwaWNfcGh5cykKLQkJcmV0dXJuOwotCi0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCS8qCi0JICogTWFza2luZyBhbiBMVlQgZW50cnkgY2FuIHRyaWdnZXIgYSBsb2NhbCBBUElDIGVycm9yCi0JICogaWYgdGhlIHZlY3RvciBpcyB6ZXJvLiBNYXNrIExWVEVSUiBmaXJzdCB0byBwcmV2ZW50IHRoaXMuCi0JICovCi0JaWYgKG1heGx2dCA+PSAzKSB7Ci0JCXYgPSBFUlJPUl9BUElDX1ZFQ1RPUjsgLyogYW55IG5vbi16ZXJvIHZlY3RvciB3aWxsIGRvICovCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCX0KLQkvKgotCSAqIENhcmVmdWw6IHdlIGhhdmUgdG8gc2V0IG1hc2tzIG9ubHkgZmlyc3QgdG8gZGVhc3NlcnQKLQkgKiBhbnkgbGV2ZWwtdHJpZ2dlcmVkIHNvdXJjZXMuCi0JICovCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JaWYgKG1heGx2dCA+PSA0KSB7Ci0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JfQotCi0JLyogbGV0cyBub3QgdG91Y2ggdGhpcyBpZiB3ZSBkaWRuJ3QgZnJvYiBpdCAqLwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKFg4Nl9NQ0VfSU5URUwpCi0JaWYgKG1heGx2dCA+PSA1KSB7Ci0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKLQkJYXBpY193cml0ZShBUElDX0xWVFRITVIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCX0KLSNlbmRpZgotCS8qCi0JICogQ2xlYW4gQVBJQyBzdGF0ZSBmb3Igb3RoZXIgT1NzOgotCSAqLwotCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBBUElDX0xWVF9NQVNLRUQpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCBBUElDX0xWVF9NQVNLRUQpOwotCWlmIChtYXhsdnQgPj0gMykKLQkJYXBpY193cml0ZShBUElDX0xWVEVSUiwgQVBJQ19MVlRfTUFTS0VEKTsKLQlpZiAobWF4bHZ0ID49IDQpCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19MVlRfTUFTS0VEKTsKLQotCS8qIEludGVncmF0ZWQgQVBJQyAoITgyNDg5RFgpID8gKi8KLQlpZiAobGFwaWNfaXNfaW50ZWdyYXRlZCgpKSB7Ci0JCWlmIChtYXhsdnQgPiAzKQotCQkJLyogQ2xlYXIgRVNSIGR1ZSB0byBQZW50aXVtIGVycmF0YSAzQVAgYW5kIDExQVAgKi8KLQkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQlhcGljX3JlYWQoQVBJQ19FU1IpOwotCX0KLX0KLQotLyoqCi0gKiBkaXNhYmxlX2xvY2FsX0FQSUMgLSBjbGVhciBhbmQgZGlzYWJsZSB0aGUgbG9jYWwgQVBJQwotICovCi12b2lkIGRpc2FibGVfbG9jYWxfQVBJQyh2b2lkKQotewotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCWNsZWFyX2xvY2FsX0FQSUMoKTsKLQotCS8qCi0JICogRGlzYWJsZSBBUElDIChpbXBsaWVzIGNsZWFyaW5nIG9mIHJlZ2lzdGVycwotCSAqIGZvciA4MjQ4OURYISkuCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQl2YWx1ZSAmPSB+QVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCS8qCi0JICogV2hlbiBMQVBJQyB3YXMgZGlzYWJsZWQgYnkgdGhlIEJJT1MgYW5kIGVuYWJsZWQgYnkgdGhlIGtlcm5lbCwKLQkgKiByZXN0b3JlIHRoZSBkaXNhYmxlZCBzdGF0ZS4KLQkgKi8KLQlpZiAoZW5hYmxlZF92aWFfYXBpY2Jhc2UpIHsKLQkJdW5zaWduZWQgaW50IGwsIGg7Ci0KLQkJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCQlsICY9IH5NU1JfSUEzMl9BUElDQkFTRV9FTkFCTEU7Ci0JCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQl9Ci0jZW5kaWYKLX0KLQotLyoKLSAqIElmIExpbnV4IGVuYWJsZWQgdGhlIExBUElDIGFnYWluc3QgdGhlIEJJT1MgZGVmYXVsdCBkaXNhYmxlIGl0IGRvd24gYmVmb3JlCi0gKiByZS1lbnRlcmluZyB0aGUgQklPUyBvbiBzaHV0ZG93bi4gIE90aGVyd2lzZSB0aGUgQklPUyBtYXkgZ2V0IGNvbmZ1c2VkIGFuZAotICogbm90IHBvd2VyLW9mZi4gIEFkZGl0aW9uYWxseSBjbGVhciBhbGwgTFZUIGVudHJpZXMgYmVmb3JlIGRpc2FibGVfbG9jYWxfQVBJQwotICogZm9yIHRoZSBjYXNlIHdoZXJlIExpbnV4IGRpZG4ndCBlbmFibGUgdGhlIExBUElDLgotICovCi12b2lkIGxhcGljX3NodXRkb3duKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghY3B1X2hhc19hcGljKQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKCFlbmFibGVkX3ZpYV9hcGljYmFzZSkKLQkJY2xlYXJfbG9jYWxfQVBJQygpOwotCWVsc2UKLSNlbmRpZgotCQlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKLQotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgotICogVGhpcyBpcyB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBsb29raW5nIGF0IGEgcmVhbCBsb2NhbCBBUElDLgotICogQ2hlY2sgdGhlc2UgYWdhaW5zdCB5b3VyIGJvYXJkIGlmIHRoZSBDUFVzIGFyZW4ndCBnZXR0aW5nCi0gKiBzdGFydGVkIGZvciBubyBhcHBhcmVudCByZWFzb24uCi0gKi8KLWludCBfX2luaXQgdmVyaWZ5X2xvY2FsX0FQSUModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgcmVnMCwgcmVnMTsKLQotCS8qCi0JICogVGhlIHZlcnNpb24gcmVnaXN0ZXIgaXMgcmVhZC1vbmx5IGluIGEgcmVhbCBBUElDLgotCSAqLwotCXJlZzAgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIFZFUlNJT046ICV4XG4iLCByZWcwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZSLCByZWcwIF4gQVBJQ19MVlJfTUFTSyk7Ci0JcmVnMSA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgVkVSU0lPTjogJXhcbiIsIHJlZzEpOwotCi0JLyoKLQkgKiBUaGUgdHdvIHZlcnNpb24gcmVhZHMgYWJvdmUgc2hvdWxkIHByaW50IHRoZSBzYW1lCi0JICogbnVtYmVycy4gIElmIHRoZSBzZWNvbmQgb25lIGlzIGRpZmZlcmVudCwgdGhlbiB3ZQotCSAqIHBva2UgYXQgYSBub24tQVBJQy4KLQkgKi8KLQlpZiAocmVnMSAhPSByZWcwKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogQ2hlY2sgaWYgdGhlIHZlcnNpb24gbG9va3MgcmVhc29uYWJseS4KLQkgKi8KLQlyZWcxID0gR0VUX0FQSUNfVkVSU0lPTihyZWcwKTsKLQlpZiAocmVnMSA9PSAweDAwIHx8IHJlZzEgPT0gMHhmZikKLQkJcmV0dXJuIDA7Ci0JcmVnMSA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQlpZiAocmVnMSA8IDB4MDIgfHwgcmVnMSA9PSAweGZmKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogVGhlIElEIHJlZ2lzdGVyIGlzIHJlYWQvd3JpdGUgaW4gYSByZWFsIEFQSUMuCi0JICovCi0JcmVnMCA9IGFwaWNfcmVhZChBUElDX0lEKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBJRDogJXhcbiIsIHJlZzApOwotCWFwaWNfd3JpdGUoQVBJQ19JRCwgcmVnMCBeIEFQSUNfSURfTUFTSyk7Ci0JcmVnMSA9IGFwaWNfcmVhZChBUElDX0lEKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBJRDogJXhcbiIsIHJlZzEpOwotCWFwaWNfd3JpdGUoQVBJQ19JRCwgcmVnMCk7Ci0JaWYgKHJlZzEgIT0gKHJlZzAgXiBBUElDX0lEX01BU0spKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogVGhlIG5leHQgdHdvIGFyZSBqdXN0IHRvIHNlZSBpZiB3ZSBoYXZlIHNhbmUgdmFsdWVzLgotCSAqIFRoZXkncmUgb25seSByZWFsbHkgcmVsZXZhbnQgaWYgd2UncmUgaW4gVmlydHVhbCBXaXJlCi0JICogY29tcGF0aWJpbGl0eSBtb2RlLCBidXQgbW9zdCBib3hlcyBhcmUgYW55bW9yZS4KLQkgKi8KLQlyZWcwID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgTFZUMDogJXhcbiIsIHJlZzApOwotCXJlZzEgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBMVlQxOiAleFxuIiwgcmVnMSk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyoqCi0gKiBzeW5jX0FyYl9JRHMgLSBzeW5jaHJvbml6ZSBBUElDIGJ1cyBhcmJpdHJhdGlvbiBJRHMKLSAqLwotdm9pZCBfX2luaXQgc3luY19BcmJfSURzKHZvaWQpCi17Ci0JLyoKLQkgKiBVbnN1cHBvcnRlZCBvbiBQNCAtIHNlZSBJbnRlbCBEZXYuIE1hbnVhbCBWb2wuIDMsIENoLiA4LjYuMSBBbmQgbm90Ci0JICogbmVlZGVkIG9uIEFNRC4KLQkgKi8KLQlpZiAobW9kZXJuX2FwaWMoKSB8fCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpCi0JCXJldHVybjsKLQotCS8qCi0JICogV2FpdCBmb3IgaWRsZS4KLQkgKi8KLQlhcGljX3dhaXRfaWNyX2lkbGUoKTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJTeW5jaHJvbml6aW5nIEFyYiBJRHMuXG4iKTsKLQlhcGljX3dyaXRlKEFQSUNfSUNSLCBBUElDX0RFU1RfQUxMSU5DIHwKLQkJCUFQSUNfSU5UX0xFVkVMVFJJRyB8IEFQSUNfRE1fSU5JVCk7Ci19Ci0KLS8qCi0gKiBBbiBpbml0aWFsIHNldHVwIG9mIHRoZSB2aXJ0dWFsIHdpcmUgbW9kZS4KLSAqLwotdm9pZCBfX2luaXQgaW5pdF9ic3BfQVBJQyh2b2lkKQotewotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCS8qCi0JICogRG9uJ3QgZG8gdGhlIHNldHVwIG5vdyBpZiB3ZSBoYXZlIGEgU01QIEJJT1MgYXMgdGhlCi0JICogdGhyb3VnaC1JL08tQVBJQyB2aXJ0dWFsIHdpcmUgbW9kZSBtaWdodCBiZSBhY3RpdmUuCi0JICovCi0JaWYgKHNtcF9mb3VuZF9jb25maWcgfHwgIWNwdV9oYXNfYXBpYykKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBEbyBub3QgdHJ1c3QgdGhlIGxvY2FsIEFQSUMgYmVpbmcgZW1wdHkgYXQgYm9vdHVwLgotCSAqLwotCWNsZWFyX2xvY2FsX0FQSUMoKTsKLQotCS8qCi0JICogRW5hYmxlIEFQSUMuCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKLQl2YWx1ZSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCS8qIFRoaXMgYml0IGlzIHJlc2VydmVkIG9uIFA0L1hlb24gYW5kIHNob3VsZCBiZSBjbGVhcmVkICovCi0JaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgJiYKLQkgICAgKGJvb3RfY3B1X2RhdGEueDg2ID09IDE1KSkKLQkJdmFsdWUgJj0gfkFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRDsKLQllbHNlCi0jZW5kaWYKLQkJdmFsdWUgfD0gQVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOwotCXZhbHVlIHw9IFNQVVJJT1VTX0FQSUNfVkVDVE9SOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7Ci0KLQkvKgotCSAqIFNldCB1cCB0aGUgdmlydHVhbCB3aXJlIG1vZGUuCi0JICovCi0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRVhUSU5UKTsKLQl2YWx1ZSA9IEFQSUNfRE1fTk1JOwotCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQkJLyogODI0ODlEWCAqLwotCQl2YWx1ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBsYXBpY19zZXR1cF9lc3Iodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIG9sZHZhbHVlLCB2YWx1ZSwgbWF4bHZ0OwotCWlmIChsYXBpY19pc19pbnRlZ3JhdGVkKCkgJiYgIWVzcl9kaXNhYmxlKSB7Ci0JCWlmIChlc3JfZGlzYWJsZSkgewotCQkJLyoKLQkJCSAqIFNvbWV0aGluZyB1bnRyYWNlYWJsZSBpcyBjcmVhdGluZyBiYWQgaW50ZXJydXB0cyBvbgotCQkJICogc2Vjb25kYXJ5IHF1YWRzIC4uLiBmb3IgdGhlIG1vbWVudCwganVzdCBsZWF2ZSB0aGUKLQkJCSAqIEVTUiBkaXNhYmxlZCAtIHdlIGNhbid0IGRvIGFueXRoaW5nIHVzZWZ1bCB3aXRoIHRoZQotCQkJICogZXJyb3JzIGFueXdheSAtIG1ibGlnaAotCQkJICovCi0JCQlwcmludGsoS0VSTl9JTkZPICJMZWF2aW5nIEVTUiBkaXNhYmxlZC5cbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0JCS8qICE4MjQ4OURYICovCi0JCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQkJaWYgKG1heGx2dCA+IDMpCQkvKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICovCi0JCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJb2xkdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCi0JCS8qIGVuYWJsZXMgc2VuZGluZyBlcnJvcnMgKi8KLQkJdmFsdWUgPSBFUlJPUl9BUElDX1ZFQ1RPUjsKLQkJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdmFsdWUpOwotCQkvKgotCQkgKiBzcGVjIHNheXMgY2xlYXIgZXJyb3JzIGFmdGVyIGVuYWJsaW5nIHZlY3Rvci4KLQkJICovCi0JCWlmIChtYXhsdnQgPiAzKQotCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQkJaWYgKHZhbHVlICE9IG9sZHZhbHVlKQotCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiRVNSIHZhbHVlIGJlZm9yZSBlbmFibGluZyAiCi0JCQkJInZlY3RvcjogMHglMDhseCAgYWZ0ZXI6IDB4JTA4bHhcbiIsCi0JCQkJb2xkdmFsdWUsIHZhbHVlKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPICJObyBFU1IgZm9yIDgyNDg5RFguXG4iKTsKLQl9Ci19Ci0KLQotLyoqCi0gKiBzZXR1cF9sb2NhbF9BUElDIC0gc2V0dXAgdGhlIGxvY2FsIEFQSUMKLSAqLwotdm9pZCBfX2NwdWluaXQgc2V0dXBfbG9jYWxfQVBJQyh2b2lkKQotewotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQlpbnQgaSwgajsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQotCUJVSUxEX0JVR19PTigoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiAweDBmKSAhPSAweDBmKTsKLQotCS8qCi0JICogRG91YmxlLWNoZWNrIHdoZXRoZXIgdGhpcyBBUElDIGlzIHJlYWxseSByZWdpc3RlcmVkLgotCSAqIFRoaXMgaXMgbWVhbmluZ2xlc3MgaW4gY2x1c3RlcmVkIGFwaWMgbW9kZSwgc28gd2Ugc2tpcCBpdC4KLQkgKi8KLQlpZiAoIWFwaWNfaWRfcmVnaXN0ZXJlZCgpKQotCQlCVUcoKTsKLQotCS8qCi0JICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMRFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKLQkgKiBhbiBBUElDLiAgU2VlIGUuZy4gIkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiIChJbnRlbAotCSAqIGRvY3VtZW50IG51bWJlciAyOTIxMTYpLiAgU28gaGVyZSBpdCBnb2VzLi4uCi0JICovCi0JaW5pdF9hcGljX2xkcigpOwotCi0JLyoKLQkgKiBTZXQgVGFzayBQcmlvcml0eSB0byAnYWNjZXB0IGFsbCcuIFdlIG5ldmVyIGNoYW5nZSB0aGlzCi0JICogbGF0ZXIgb24uCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKLQl2YWx1ZSAmPSB+QVBJQ19UUFJJX01BU0s7Ci0JYXBpY193cml0ZShBUElDX1RBU0tQUkksIHZhbHVlKTsKLQotCS8qCi0JICogQWZ0ZXIgYSBjcmFzaCwgd2Ugbm8gbG9uZ2VyIHNlcnZpY2UgdGhlIGludGVycnVwdHMgYW5kIGEgcGVuZGluZwotCSAqIGludGVycnVwdCBmcm9tIHByZXZpb3VzIGtlcm5lbCBtaWdodCBzdGlsbCBoYXZlIElTUiBiaXQgc2V0LgotCSAqCi0JICogTW9zdCBwcm9iYWJseSBieSBub3cgQ1BVIGhhcyBzZXJ2aWNlZCB0aGF0IHBlbmRpbmcgaW50ZXJydXB0IGFuZAotCSAqIGl0IG1pZ2h0IG5vdCBoYXZlIGRvbmUgdGhlIGFja19BUElDX2lycSgpIGJlY2F1c2UgaXQgdGhvdWdodCwKLQkgKiBpbnRlcnJ1cHQgY2FtZSBmcm9tIGk4MjU5IGFzIEV4dEludC4gTEFQSUMgZGlkIG5vdCBnZXQgRU9JIHNvIGl0Ci0JICogZG9lcyBub3QgY2xlYXIgdGhlIElTUiBiaXQgYW5kIGNwdSB0aGlua3MgaXQgaGFzIGFscmVhZHkgc2VyaXZjZWQKLQkgKiB0aGUgaW50ZXJydXB0LiBIZW5jZSBhIHZlY3RvciBtaWdodCBnZXQgbG9ja2VkLiBJdCB3YXMgbm90aWNlZAotCSAqIGZvciB0aW1lciBpcnEgKHZlY3RvciAweDMxKS4gSXNzdWUgYW4gZXh0cmEgRU9JIHRvIGNsZWFyIElTUi4KLQkgKi8KLQlmb3IgKGkgPSBBUElDX0lTUl9OUiAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfSVNSICsgaSoweDEwKTsKLQkJZm9yIChqID0gMzE7IGogPj0gMDsgai0tKSB7Ci0JCQlpZiAodmFsdWUgJiAoMTw8aikpCi0JCQkJYWNrX0FQSUNfaXJxKCk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIE5vdyB0aGF0IHdlIGFyZSBhbGwgc2V0IHVwLCBlbmFibGUgdGhlIEFQSUMKLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXZhbHVlICY9IH5BUElDX1ZFQ1RPUl9NQVNLOwotCS8qCi0JICogRW5hYmxlIEFQSUMKLQkgKi8KLQl2YWx1ZSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOwotCi0JLyogV2UgYWx3YXlzIHVzZSBwcm9jZXNzb3IgZm9jdXMgKi8KLQotCS8qCi0JICogU2V0IHNwdXJpb3VzIElSUSB2ZWN0b3IKLQkgKi8KLQl2YWx1ZSB8PSBTUFVSSU9VU19BUElDX1ZFQ1RPUjsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwotCi0JLyoKLQkgKiBTZXQgdXAgTFZUMCwgTFZUMToKLQkgKgotCSAqIHNldCB1cCB0aHJvdWdoLWxvY2FsLUFQSUMgb24gdGhlIEJQJ3MgTElOVDAuIFRoaXMgaXMgbm90Ci0JICogc3RyaWN0bHkgbmVjZXNzYXJ5IGluIHB1cmUgc3ltbWV0cmljLUlPIG1vZGUsIGJ1dCBzb21ldGltZXMKLQkgKiB3ZSBkZWxlZ2F0ZSBpbnRlcnJ1cHRzIHRvIHRoZSA4MjU5QS4KLQkgKi8KLQkvKgotCSAqIFRPRE86IHNldCB1cCB0aHJvdWdoLWxvY2FsLUFQSUMgZnJvbSB0aHJvdWdoLUkvTy1BUElDPyAtLW1hY3JvCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQwKSAmIEFQSUNfTFZUX01BU0tFRDsKLQlpZiAoIXNtcF9wcm9jZXNzb3JfaWQoKSAmJiAhdmFsdWUpIHsKLQkJdmFsdWUgPSBBUElDX0RNX0VYVElOVDsKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiZW5hYmxlZCBFeHRJTlQgb24gQ1BVIyVkXG4iLAotCQkJICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JfSBlbHNlIHsKLQkJdmFsdWUgPSBBUElDX0RNX0VYVElOVCB8IEFQSUNfTFZUX01BU0tFRDsKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibWFza2VkIEV4dElOVCBvbiBDUFUjJWRcbiIsCi0JCQkgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl9Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHZhbHVlKTsKLQotCS8qCi0JICogb25seSB0aGUgQlAgc2hvdWxkIHNlZSB0aGUgTElOVDEgTk1JIHNpZ25hbCwgb2J2aW91c2x5LgotCSAqLwotCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQl2YWx1ZSA9IEFQSUNfRE1fTk1JOwotCWVsc2UKLQkJdmFsdWUgPSBBUElDX0RNX05NSSB8IEFQSUNfTFZUX01BU0tFRDsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXZvaWQgX19jcHVpbml0IGVuZF9sb2NhbF9BUElDX3NldHVwKHZvaWQpCi17Ci0JbGFwaWNfc2V0dXBfZXNyKCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JewotCQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0JCS8qIERpc2FibGUgdGhlIGxvY2FsIGFwaWMgdGltZXIgKi8KLQkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQkJdmFsdWUgfD0gKEFQSUNfTFZUX01BU0tFRCB8IExPQ0FMX1RJTUVSX1ZFQ1RPUik7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2YWx1ZSk7Ci0JfQotI2VuZGlmCi0KLQlzZXR1cF9hcGljX25taV93YXRjaGRvZyhOVUxMKTsKLQlhcGljX3BtX2FjdGl2YXRlKCk7Ci19Ci0KLXZvaWQgY2hlY2tfeDJhcGljKHZvaWQpCi17Ci0JaW50IG1zciwgbXNyMjsKLQotCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IsIG1zcjIpOwotCi0JaWYgKG1zciAmIFgyQVBJQ19FTkFCTEUpIHsKLQkJcHJpbnRrKCJ4MmFwaWMgZW5hYmxlZCBieSBCSU9TLCBzd2l0Y2hpbmcgdG8geDJhcGljIG9wc1xuIik7Ci0JCXgyYXBpY19wcmVlbmFibGVkID0geDJhcGljID0gMTsKLQkJYXBpY19vcHMgPSAmeDJhcGljX29wczsKLQl9Ci19Ci0KLXZvaWQgZW5hYmxlX3gyYXBpYyh2b2lkKQotewotCWludCBtc3IsIG1zcjI7Ci0KLQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyLCBtc3IyKTsKLQlpZiAoIShtc3IgJiBYMkFQSUNfRU5BQkxFKSkgewotCQlwcmludGsoIkVuYWJsaW5nIHgyYXBpY1xuIik7Ci0JCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IgfCBYMkFQSUNfRU5BQkxFLCAwKTsKLQl9Ci19Ci0KLXZvaWQgZW5hYmxlX0lSX3gyYXBpYyh2b2lkKQotewotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFjcHVfaGFzX3gyYXBpYykKLQkJcmV0dXJuOwotCi0JaWYgKCF4MmFwaWNfcHJlZW5hYmxlZCAmJiBkaXNhYmxlX3gyYXBpYykgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiU2tpcHBlZCBlbmFibGluZyB4MmFwaWMgYW5kIEludGVycnVwdC1yZW1hcHBpbmcgIgotCQkgICAgICAgImJlY2F1c2Ugb2Ygbm94MmFwaWNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHgyYXBpY19wcmVlbmFibGVkICYmIGRpc2FibGVfeDJhcGljKQotCQlwYW5pYygiQmlvcyBhbHJlYWR5IGVuYWJsZWQgeDJhcGljLCBjYW4ndCBlbmZvcmNlIG5veDJhcGljIik7Ci0KLQlpZiAoIXgyYXBpY19wcmVlbmFibGVkICYmIHNraXBfaW9hcGljX3NldHVwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJTa2lwcGVkIGVuYWJsaW5nIHgyYXBpYyBhbmQgSW50ZXJydXB0LXJlbWFwcGluZyAiCi0JCSAgICAgICAiYmVjYXVzZSBvZiBza2lwcGluZyBpby1hcGljIHNldHVwXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXJldCA9IGRtYXJfdGFibGVfaW5pdCgpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgImRtYXJfdGFibGVfaW5pdCgpIGZhaWxlZCB3aXRoICVkOlxuIiwgcmV0KTsKLQotCQlpZiAoeDJhcGljX3ByZWVuYWJsZWQpCi0JCQlwYW5pYygieDJhcGljIGVuYWJsZWQgYnkgYmlvcy4gQnV0IElSIGVuYWJsaW5nIGZhaWxlZCIpOwotCQllbHNlCi0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIk5vdCBlbmFibGluZyB4MmFwaWMsSW50ci1yZW1hcHBpbmdcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2tfODI1OUEoKTsKLQlzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCgpOwotCi0JcmV0ID0gZW5hYmxlX2ludHJfcmVtYXBwaW5nKDEpOwotCi0JaWYgKHJldCAmJiB4MmFwaWNfcHJlZW5hYmxlZCkgewotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCXBhbmljKCJ4MmFwaWMgZW5hYmxlZCBieSBiaW9zLiBCdXQgSVIgZW5hYmxpbmcgZmFpbGVkIik7Ci0JfQotCi0JaWYgKHJldCkKLQkJZ290byBlbmQ7Ci0KLQlpZiAoIXgyYXBpYykgewotCQl4MmFwaWMgPSAxOwotCQlhcGljX29wcyA9ICZ4MmFwaWNfb3BzOwotCQllbmFibGVfeDJhcGljKCk7Ci0JfQotZW5kOgotCWlmIChyZXQpCi0JCS8qCi0JCSAqIElSIGVuYWJsaW5nIGZhaWxlZAotCQkgKi8KLQkJcmVzdG9yZV9JT19BUElDX3NldHVwKCk7Ci0JZWxzZQotCQlyZWluaXRfaW50cl9yZW1hcHBlZF9JT19BUElDKHgyYXBpY19wcmVlbmFibGVkKTsKLQotCXVubWFza184MjU5QSgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCWlmICghcmV0KSB7Ci0JCWlmICgheDJhcGljX3ByZWVuYWJsZWQpCi0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIkVuYWJsZWQgeDJhcGljIGFuZCBpbnRlcnJ1cHQtcmVtYXBwaW5nXG4iKTsKLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICAgICJFbmFibGVkIEludGVycnVwdC1yZW1hcHBpbmdcbiIpOwotCX0gZWxzZQotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJGYWlsZWQgdG8gZW5hYmxlIEludGVycnVwdC1yZW1hcHBpbmcgYW5kIHgyYXBpY1xuIik7Ci0jZWxzZQotCWlmICghY3B1X2hhc194MmFwaWMpCi0JCXJldHVybjsKLQotCWlmICh4MmFwaWNfcHJlZW5hYmxlZCkKLQkJcGFuaWMoIngyYXBpYyBlbmFibGVkIHByaW9yIE9TIGhhbmRvdmVyLCIKLQkJICAgICAgIiBlbmFibGUgQ09ORklHX0lOVFJfUkVNQVAiKTsKLQotCXByaW50ayhLRVJOX0lORk8gIkVuYWJsZSBDT05GSUdfSU5UUl9SRU1BUCBmb3IgZW5hYmxpbmcgaW50ci1yZW1hcHBpbmcgIgotCSAgICAgICAiIGFuZCB4MmFwaWNcbiIpOwotI2VuZGlmCi0KLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBEZXRlY3QgYW5kIGVuYWJsZSBsb2NhbCBBUElDcyBvbiBub24tU01QIGJvYXJkcy4KLSAqIE9yaWdpbmFsIGNvZGUgd3JpdHRlbiBieSBLZWlyIEZyYXNlci4KLSAqIE9uIEFNRDY0IHdlIHRydXN0IHRoZSBCSU9TIC0gaWYgaXQgc2F5cyBubyBBUElDIGl0IGlzIGxpa2VseQotICogbm90IGNvcnJlY3RseSBzZXQgdXAgKHVzdWFsbHkgdGhlIEFQSUMgdGltZXIgd29uJ3Qgd29yayBldGMuKQotICovCi1zdGF0aWMgaW50IF9faW5pdCBkZXRlY3RfaW5pdF9BUElDKHZvaWQpCi17Ci0JaWYgKCFjcHVfaGFzX2FwaWMpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gbG9jYWwgQVBJQyBwcmVzZW50XG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCW1wX2xhcGljX2FkZHIgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOwotCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19pbml0IGVhcmx5X2luaXRfbGFwaWNfbWFwcGluZyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOwotCi0JLyoKLQkgKiBJZiBubyBsb2NhbCBBUElDIGNhbiBiZSBmb3VuZCB0aGVuIGdvIG91dAotCSAqIDogaXQgbWVhbnMgdGhlcmUgaXMgbm8gbXBhdGFibGUgYW5kIE1BRFQKLQkgKi8KLQlpZiAoIXNtcF9mb3VuZF9jb25maWcpCi0JCXJldHVybjsKLQotCXBoeXNfYWRkciA9IG1wX2xhcGljX2FkZHI7Ci0KLQlzZXRfZml4bWFwX25vY2FjaGUoRklYX0FQSUNfQkFTRSwgcGh5c19hZGRyKTsKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJtYXBwZWQgQVBJQyB0byAlMTZseCAoJTE2bHgpXG4iLAotCQkgICAgQVBJQ19CQVNFLCBwaHlzX2FkZHIpOwotCi0JLyoKLQkgKiBGZXRjaCB0aGUgQVBJQyBJRCBvZiB0aGUgQlNQIGluIGNhc2Ugd2UgaGF2ZSBhCi0JICogZGVmYXVsdCBjb25maWd1cmF0aW9uIChvciB0aGUgTVAgdGFibGUgaXMgYnJva2VuKS4KLQkgKi8KLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLX0KLQotLyoqCi0gKiBpbml0X2FwaWNfbWFwcGluZ3MgLSBpbml0aWFsaXplIEFQSUMgbWFwcGluZ3MKLSAqLwotdm9pZCBfX2luaXQgaW5pdF9hcGljX21hcHBpbmdzKHZvaWQpCi17Ci0JaWYgKHgyYXBpYykgewotCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogSWYgbm8gbG9jYWwgQVBJQyBjYW4gYmUgZm91bmQgdGhlbiBzZXQgdXAgYSBmYWtlIGFsbAotCSAqIHplcm9lcyBwYWdlIHRvIHNpbXVsYXRlIHRoZSBsb2NhbCBBUElDIGFuZCBhbm90aGVyCi0JICogb25lIGZvciB0aGUgSU8tQVBJQy4KLQkgKi8KLQlpZiAoIXNtcF9mb3VuZF9jb25maWcgJiYgZGV0ZWN0X2luaXRfQVBJQygpKSB7Ci0JCWFwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7Ci0JCWFwaWNfcGh5cyA9IF9fcGEoYXBpY19waHlzKTsKLQl9IGVsc2UKLQkJYXBpY19waHlzID0gbXBfbGFwaWNfYWRkcjsKLQotCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBhcGljX3BoeXMpOwotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hcHBlZCBBUElDIHRvICUxNmx4ICglMTZseClcbiIsCi0JCQkJQVBJQ19CQVNFLCBhcGljX3BoeXMpOwotCi0JLyoKLQkgKiBGZXRjaCB0aGUgQVBJQyBJRCBvZiB0aGUgQlNQIGluIGNhc2Ugd2UgaGF2ZSBhCi0JICogZGVmYXVsdCBjb25maWd1cmF0aW9uIChvciB0aGUgTVAgdGFibGUgaXMgYnJva2VuKS4KLQkgKi8KLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLX0KLQotLyoKLSAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIElPLUFQSUMgYW5kIEFQSUMgaGFyZHdhcmUgaWYgdGhpcyBpcwotICogYSBVUCBrZXJuZWwuCi0gKi8KLWludCBhcGljX3ZlcnNpb25bTUFYX0FQSUNTXTsKLQotaW50IF9faW5pdCBBUElDX2luaXRfdW5pcHJvY2Vzc29yKHZvaWQpCi17Ci0JaWYgKGRpc2FibGVfYXBpYykgewotCQlwcmludGsoS0VSTl9JTkZPICJBcGljIGRpc2FibGVkXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAoIWNwdV9oYXNfYXBpYykgewotCQlkaXNhYmxlX2FwaWMgPSAxOwotCQlwcmludGsoS0VSTl9JTkZPICJBcGljIGRpc2FibGVkIGJ5IEJJT1NcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZW5hYmxlX0lSX3gyYXBpYygpOwotCXNldHVwX2FwaWNfcm91dGluZygpOwotCi0JdmVyaWZ5X2xvY2FsX0FQSUMoKTsKLQotCWNvbm5lY3RfYnNwX0FQSUMoKTsKLQotCXBoeXNpZF9zZXRfbWFza19vZl9waHlzaWQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkLCAmcGh5c19jcHVfcHJlc2VudF9tYXApOwotCWFwaWNfd3JpdGUoQVBJQ19JRCwgU0VUX0FQSUNfSUQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSk7Ci0KLQlzZXR1cF9sb2NhbF9BUElDKCk7Ci0KLQkvKgotCSAqIE5vdyBlbmFibGUgSU8tQVBJQ3MsIGFjdHVhbGx5IGNhbGwgY2xlYXJfSU9fQVBJQwotCSAqIFdlIG5lZWQgY2xlYXJfSU9fQVBJQyBiZWZvcmUgZW5hYmxpbmcgdmVjdG9yIG9uIEJQCi0JICovCi0JaWYgKCFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQotCQllbmFibGVfSU9fQVBJQygpOwotCi0JaWYgKCFzbXBfZm91bmRfY29uZmlnIHx8IHNraXBfaW9hcGljX3NldHVwIHx8ICFucl9pb2FwaWNzKQotCQlsb2NhbGlzZV9ubWlfd2F0Y2hkb2coKTsKLQllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOwotCi0JaWYgKHNtcF9mb3VuZF9jb25maWcgJiYgIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCi0JCXNldHVwX0lPX0FQSUMoKTsKLQllbHNlCi0JCW5yX2lvYXBpY3MgPSAwOwotCXNldHVwX2Jvb3RfQVBJQ19jbG9jaygpOwotCWNoZWNrX25taV93YXRjaGRvZygpOwotCXJldHVybiAwOwotfQotCi0vKgotICogTG9jYWwgQVBJQyBpbnRlcnJ1cHRzCi0gKi8KLQotLyoKLSAqIFRoaXMgaW50ZXJydXB0IHNob3VsZCBfbmV2ZXJfIGhhcHBlbiB3aXRoIG91ciBBUElDL1NNUCBhcmNoaXRlY3R1cmUKLSAqLwotYXNtbGlua2FnZSB2b2lkIHNtcF9zcHVyaW91c19pbnRlcnJ1cHQodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQlleGl0X2lkbGUoKTsKLQlpcnFfZW50ZXIoKTsKLQkvKgotCSAqIENoZWNrIGlmIHRoaXMgcmVhbGx5IGlzIGEgc3B1cmlvdXMgaW50ZXJydXB0IGFuZCBBQ0sgaXQKLQkgKiBpZiBpdCBpcyBhIHZlY3RvcmVkIG9uZS4gIEp1c3QgaW4gY2FzZS4uLgotCSAqIFNwdXJpb3VzIGludGVycnVwdHMgc2hvdWxkIG5vdCBiZSBBQ0tlZC4KLQkgKi8KLQl2ID0gYXBpY19yZWFkKEFQSUNfSVNSICsgKChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIH4weDFmKSA+PiAxKSk7Ci0JaWYgKHYgJiAoMSA8PCAoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiAweDFmKSkpCi0JCWFja19BUElDX2lycSgpOwotCi0JYWRkX3BkYShpcnFfc3B1cmlvdXNfY291bnQsIDEpOwotCWlycV9leGl0KCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGludGVycnVwdCBzaG91bGQgbmV2ZXIgaGFwcGVuIHdpdGggb3VyIEFQSUMvU01QIGFyY2hpdGVjdHVyZQotICovCi1hc21saW5rYWdlIHZvaWQgc21wX2Vycm9yX2ludGVycnVwdCh2b2lkKQotewotCXVuc2lnbmVkIGludCB2LCB2MTsKLQotCWV4aXRfaWRsZSgpOwotCWlycV9lbnRlcigpOwotCS8qIEZpcnN0IHRpY2tsZSB0aGUgaGFyZHdhcmUsIG9ubHkgdGhlbiByZXBvcnQgd2hhdCB3ZW50IG9uLiAtLSBSRVcgKi8KLQl2ID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQl2MSA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0JYWNrX0FQSUNfaXJxKCk7Ci0JYXRvbWljX2luYygmaXJxX2Vycl9jb3VudCk7Ci0KLQkvKiBIZXJlIGlzIHdoYXQgdGhlIEFQSUMgZXJyb3IgYml0cyBtZWFuOgotCSAgIDA6IFNlbmQgQ1MgZXJyb3IKLQkgICAxOiBSZWNlaXZlIENTIGVycm9yCi0JICAgMjogU2VuZCBhY2NlcHQgZXJyb3IKLQkgICAzOiBSZWNlaXZlIGFjY2VwdCBlcnJvcgotCSAgIDQ6IFJlc2VydmVkCi0JICAgNTogU2VuZCBpbGxlZ2FsIHZlY3RvcgotCSAgIDY6IFJlY2VpdmVkIGlsbGVnYWwgdmVjdG9yCi0JICAgNzogSWxsZWdhbCByZWdpc3RlciBhZGRyZXNzCi0JKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiQVBJQyBlcnJvciBvbiBDUFUlZDogJTAyeCglMDJ4KVxuIiwKLQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCB2ICwgdjEpOwotCWlycV9leGl0KCk7Ci19Ci0KLS8qKgotICogY29ubmVjdF9ic3BfQVBJQyAtIGF0dGFjaCB0aGUgQVBJQyB0byB0aGUgaW50ZXJydXB0IHN5c3RlbQotICovCi12b2lkIF9faW5pdCBjb25uZWN0X2JzcF9BUElDKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWlmIChwaWNfbW9kZSkgewotCQkvKgotCQkgKiBEbyBub3QgdHJ1c3QgdGhlIGxvY2FsIEFQSUMgYmVpbmcgZW1wdHkgYXQgYm9vdHVwLgotCQkgKi8KLQkJY2xlYXJfbG9jYWxfQVBJQygpOwotCQkvKgotCQkgKiBQSUMgbW9kZSwgZW5hYmxlIEFQSUMgbW9kZSBpbiB0aGUgSU1DUiwgaS5lLiAgY29ubmVjdCBCU1AncwotCQkgKiBsb2NhbCBBUElDIHRvIElOVCBhbmQgTk1JIGxpbmVzLgotCQkgKi8KLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibGVhdmluZyBQSUMgbW9kZSwgIgotCQkJCSJlbmFibGluZyBBUElDIG1vZGUuXG4iKTsKLQkJb3V0YigweDcwLCAweDIyKTsKLQkJb3V0YigweDAxLCAweDIzKTsKLQl9Ci0jZW5kaWYKLQllbmFibGVfYXBpY19tb2RlKCk7Ci19Ci0KLS8qKgotICogZGlzY29ubmVjdF9ic3BfQVBJQyAtIGRldGFjaCB0aGUgQVBJQyBmcm9tIHRoZSBpbnRlcnJ1cHQgc3lzdGVtCi0gKiBAdmlydF93aXJlX3NldHVwOglpbmRpY2F0ZXMsIHdoZXRoZXIgdmlydHVhbCB3aXJlIG1vZGUgaXMgc2VsZWN0ZWQKLSAqCi0gKiBWaXJ0dWFsIHdpcmUgbW9kZSBpcyBuZWNlc3NhcnkgdG8gZGVsaXZlciBsZWdhY3kgaW50ZXJydXB0cyBldmVuIHdoZW4gdGhlCi0gKiBBUElDIGlzIGRpc2FibGVkLgotICovCi12b2lkIGRpc2Nvbm5lY3RfYnNwX0FQSUMoaW50IHZpcnRfd2lyZV9zZXR1cCkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKHBpY19tb2RlKSB7Ci0JCS8qCi0JCSAqIFB1dCB0aGUgYm9hcmQgYmFjayBpbnRvIFBJQyBtb2RlIChoYXMgYW4gZWZmZWN0IG9ubHkgb24KLQkJICogY2VydGFpbiBvbGRlciBib2FyZHMpLiAgTm90ZSB0aGF0IEFQSUMgaW50ZXJydXB0cywgaW5jbHVkaW5nCi0JCSAqIElQSXMsIHdvbid0IHdvcmsgYmV5b25kIHRoaXMgcG9pbnQhICBUaGUgb25seSBleGNlcHRpb24gYXJlCi0JCSAqIElOSVQgSVBJcy4KLQkJICovCi0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImRpc2FibGluZyBBUElDIG1vZGUsICIKLQkJCQkiZW50ZXJpbmcgUElDIG1vZGUuXG4iKTsKLQkJb3V0YigweDcwLCAweDIyKTsKLQkJb3V0YigweDAwLCAweDIzKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCi0JLyogR28gYmFjayB0byBWaXJ0dWFsIFdpcmUgY29tcGF0aWJpbGl0eSBtb2RlICovCi0KLQkvKiBGb3IgdGhlIHNwdXJpb3VzIGludGVycnVwdCB1c2UgdmVjdG9yIEYsIGFuZCBlbmFibGUgaXQgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXZhbHVlICY9IH5BUElDX1ZFQ1RPUl9NQVNLOwotCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7Ci0JdmFsdWUgfD0gMHhmOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7Ci0KLQlpZiAoIXZpcnRfd2lyZV9zZXR1cCkgewotCQkvKgotCQkgKiBGb3IgTFZUMCBtYWtlIGl0IGVkZ2UgdHJpZ2dlcmVkLCBhY3RpdmUgaGlnaCwKLQkJICogZXh0ZXJuYWwgYW5kIGVuYWJsZWQKLQkJICovCi0JCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JCXZhbHVlICY9IH4oQVBJQ19NT0RFX01BU0sgfCBBUElDX1NFTkRfUEVORElORyB8Ci0JCQlBUElDX0lOUFVUX1BPTEFSSVRZIHwgQVBJQ19MVlRfUkVNT1RFX0lSUiB8Ci0JCQlBUElDX0xWVF9MRVZFTF9UUklHR0VSIHwgQVBJQ19MVlRfTUFTS0VEKTsKLQkJdmFsdWUgfD0gQVBJQ19MVlRfUkVNT1RFX0lSUiB8IEFQSUNfU0VORF9QRU5ESU5HOwotCQl2YWx1ZSA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsdWUsIEFQSUNfTU9ERV9FWFRJTlQpOwotCQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdmFsdWUpOwotCX0gZWxzZSB7Ci0JCS8qIERpc2FibGUgTFZUMCAqLwotCQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEKTsKLQl9Ci0KLQkvKgotCSAqIEZvciBMVlQxIG1ha2UgaXQgZWRnZSB0cmlnZ2VyZWQsIGFjdGl2ZSBoaWdoLAotCSAqIG5taSBhbmQgZW5hYmxlZAotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JdmFsdWUgJj0gfihBUElDX01PREVfTUFTSyB8IEFQSUNfU0VORF9QRU5ESU5HIHwKLQkJCUFQSUNfSU5QVVRfUE9MQVJJVFkgfCBBUElDX0xWVF9SRU1PVEVfSVJSIHwKLQkJCUFQSUNfTFZUX0xFVkVMX1RSSUdHRVIgfCBBUElDX0xWVF9NQVNLRUQpOwotCXZhbHVlIHw9IEFQSUNfTFZUX1JFTU9URV9JUlIgfCBBUElDX1NFTkRfUEVORElORzsKLQl2YWx1ZSA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsdWUsIEFQSUNfTU9ERV9OTUkpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgX19jcHVpbml0IGdlbmVyaWNfcHJvY2Vzc29yX2luZm8oaW50IGFwaWNpZCwgaW50IHZlcnNpb24pCi17Ci0JaW50IGNwdTsKLQljcHVtYXNrX3QgdG1wX21hcDsKLQotCS8qCi0JICogVmFsaWRhdGUgdmVyc2lvbgotCSAqLwotCWlmICh2ZXJzaW9uID09IDB4MCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJCSU9TIGJ1ZywgQVBJQyB2ZXJzaW9uIGlzIDAgZm9yIENQVSMlZCEgIgotCQkJCSJmaXhpbmcgdXAgdG8gMHgxMC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iLAotCQkJCXZlcnNpb24pOwotCQl2ZXJzaW9uID0gMHgxMDsKLQl9Ci0JYXBpY192ZXJzaW9uW2FwaWNpZF0gPSB2ZXJzaW9uOwotCi0JaWYgKG51bV9wcm9jZXNzb3JzID49IE5SX0NQVVMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogTlJfQ1BVUyBsaW1pdCBvZiAlaSByZWFjaGVkLiIKLQkJCSIgIFByb2Nlc3NvciBpZ25vcmVkLlxuIiwgTlJfQ1BVUyk7Ci0JCXJldHVybjsKLQl9Ci0KLQludW1fcHJvY2Vzc29ycysrOwotCWNwdXNfY29tcGxlbWVudCh0bXBfbWFwLCBjcHVfcHJlc2VudF9tYXApOwotCWNwdSA9IGZpcnN0X2NwdSh0bXBfbWFwKTsKLQotCXBoeXNpZF9zZXQoYXBpY2lkLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci0JaWYgKGFwaWNpZCA9PSBib290X2NwdV9waHlzaWNhbF9hcGljaWQpIHsKLQkJLyoKLQkJICogeDg2X2Jpb3NfY3B1X2FwaWNpZCBpcyByZXF1aXJlZCB0byBoYXZlIHByb2Nlc3NvcnMgbGlzdGVkCi0JCSAqIGluIHNhbWUgb3JkZXIgYXMgbG9naWNhbCBjcHUgbnVtYmVycy4gSGVuY2UgdGhlIGZpcnN0Ci0JCSAqIGVudHJ5IGlzIEJTUCwgYW5kIHNvIG9uLgotCQkgKi8KLQkJY3B1ID0gMDsKLQl9Ci0JaWYgKGFwaWNpZCA+IG1heF9waHlzaWNhbF9hcGljaWQpCi0JCW1heF9waHlzaWNhbF9hcGljaWQgPSBhcGljaWQ7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyoKLQkgKiBXb3VsZCBiZSBwcmVmZXJhYmxlIHRvIHN3aXRjaCB0byBiaWdzbXAgd2hlbiBDT05GSUdfSE9UUExVR19DUFU9eQotCSAqIGJ1dCB3ZSBuZWVkIHRvIHdvcmsgb3RoZXIgZGVwZW5kZW5jaWVzIGxpa2UgU01QX1NVU1BFTkQgZXRjCi0JICogYmVmb3JlIHRoaXMgY2FuIGJlIGRvbmUgd2l0aG91dCBzb21lIGNvbmZ1c2lvbi4KLQkgKiBpZiAoQ1BVX0hPVFBMVUdfRU5BQkxFRCB8fCBudW1fcHJvY2Vzc29ycyA+IDgpCi0JICogICAgICAgLSBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+Ci0JICovCi0JaWYgKG1heF9waHlzaWNhbF9hcGljaWQgPj0gOCkgewotCQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewotCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6Ci0JCQlpZiAoIUFQSUNfWEFQSUModmVyc2lvbikpIHsKLQkJCQlkZWZfdG9fYmlnc21wID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8qIElmIFA0IGFuZCBhYm92ZSBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBYODZfVkVORE9SX0FNRDoKLQkJCWRlZl90b19iaWdzbXAgPSAxOwotCQl9Ci0JfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfU01QKSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCi0JLyogYXJlIHdlIGJlaW5nIGNhbGxlZCBlYXJseSBpbiBrZXJuZWwgc3RhcnR1cD8gKi8KLQlpZiAoZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19hcGljaWQpKSB7Ci0JCXUxNiAqY3B1X3RvX2FwaWNpZCA9IGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fYXBpY2lkKTsKLQkJdTE2ICpiaW9zX2NwdV9hcGljaWQgPSBlYXJseV9wZXJfY3B1X3B0cih4ODZfYmlvc19jcHVfYXBpY2lkKTsKLQotCQljcHVfdG9fYXBpY2lkW2NwdV0gPSBhcGljaWQ7Ci0JCWJpb3NfY3B1X2FwaWNpZFtjcHVdID0gYXBpY2lkOwotCX0gZWxzZSB7Ci0JCXBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSkgPSBhcGljaWQ7Ci0JCXBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KSA9IGFwaWNpZDsKLQl9Ci0jZW5kaWYKLQotCWNwdV9zZXQoY3B1LCBjcHVfcG9zc2libGVfbWFwKTsKLQljcHVfc2V0KGNwdSwgY3B1X3ByZXNlbnRfbWFwKTsKLX0KLQotaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQotewotCXJldHVybiByZWFkX2FwaWNfaWQoKTsKLX0KLQotLyoKLSAqIFBvd2VyIG1hbmFnZW1lbnQKLSAqLwotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgc3RydWN0IHsKLQkvKgotCSAqICdhY3RpdmUnIGlzIHRydWUgaWYgdGhlIGxvY2FsIEFQSUMgd2FzIGVuYWJsZWQgYnkgdXMgYW5kCi0JICogbm90IHRoZSBCSU9TOyB0aGlzIHNpZ25pZmllcyB0aGF0IHdlIGFyZSBhbHNvIHJlc3BvbnNpYmxlCi0JICogZm9yIGRpc2FibGluZyBpdCBiZWZvcmUgZW50ZXJpbmcgYXBtL2FjcGkgc3VzcGVuZAotCSAqLwotCWludCBhY3RpdmU7Ci0JLyogci93IGFwaWMgZmllbGRzICovCi0JdW5zaWduZWQgaW50IGFwaWNfaWQ7Ci0JdW5zaWduZWQgaW50IGFwaWNfdGFza3ByaTsKLQl1bnNpZ25lZCBpbnQgYXBpY19sZHI7Ci0JdW5zaWduZWQgaW50IGFwaWNfZGZyOwotCXVuc2lnbmVkIGludCBhcGljX3NwaXY7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0dDsKLQl1bnNpZ25lZCBpbnQgYXBpY19sdnRwYzsKLQl1bnNpZ25lZCBpbnQgYXBpY19sdnQwOwotCXVuc2lnbmVkIGludCBhcGljX2x2dDE7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0ZXJyOwotCXVuc2lnbmVkIGludCBhcGljX3RtaWN0OwotCXVuc2lnbmVkIGludCBhcGljX3RkY3I7Ci0JdW5zaWduZWQgaW50IGFwaWNfdGhtcjsKLX0gYXBpY19wbV9zdGF0ZTsKLQotc3RhdGljIGludCBsYXBpY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBtYXhsdnQ7Ci0KLQlpZiAoIWFwaWNfcG1fc3RhdGUuYWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQotCWFwaWNfcG1fc3RhdGUuYXBpY19pZCA9IGFwaWNfcmVhZChBUElDX0lEKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfdGFza3ByaSA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sZHIgPSBhcGljX3JlYWQoQVBJQ19MRFIpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19kZnIgPSBhcGljX3JlYWQoQVBJQ19ERlIpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19zcGl2ID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2x2dHQgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQlpZiAobWF4bHZ0ID49IDQpCi0JCWFwaWNfcG1fc3RhdGUuYXBpY19sdnRwYyA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MCA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sdnQxID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2x2dGVyciA9IGFwaWNfcmVhZChBUElDX0xWVEVSUik7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX3RtaWN0ID0gYXBpY19yZWFkKEFQSUNfVE1JQ1QpOwotCWFwaWNfcG1fc3RhdGUuYXBpY190ZGNyID0gYXBpY19yZWFkKEFQSUNfVERDUik7Ci0jaWYgZGVmaW5lZChDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfSU5URUwpCi0JaWYgKG1heGx2dCA+PSA1KQotCQlhcGljX3BtX3N0YXRlLmFwaWNfdGhtciA9IGFwaWNfcmVhZChBUElDX0xWVFRITVIpOwotI2VuZGlmCi0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZGlzYWJsZV9sb2NhbF9BUElDKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxhcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGludCBsLCBoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG1heGx2dDsKLQotCWlmICghYXBpY19wbV9zdGF0ZS5hY3RpdmUpCi0JCXJldHVybiAwOwotCi0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCWlmICh4MmFwaWMpCi0JCWVuYWJsZV94MmFwaWMoKTsKLQllbHNlCi0jZW5kaWYKLQl7Ci0JCS8qCi0JCSAqIE1ha2Ugc3VyZSB0aGUgQVBJQ0JBU0UgcG9pbnRzIHRvIHRoZSByaWdodCBhZGRyZXNzCi0JCSAqCi0JCSAqIEZJWE1FISBUaGlzIHdpbGwgYmUgd3JvbmcgaWYgd2UgZXZlciBzdXBwb3J0IHN1c3BlbmQgb24KLQkJICogU01QISBXZSdsbCBuZWVkIHRvIGRvIHRoaXMgYXMgcGFydCBvZiB0aGUgQ1BVIHJlc3RvcmUhCi0JCSAqLwotCQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JCWwgJj0gfk1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7Ci0JCWwgfD0gTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFIHwgbXBfbGFwaWNfYWRkcjsKLQkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCX0KLQotCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIEVSUk9SX0FQSUNfVkVDVE9SIHwgQVBJQ19MVlRfTUFTS0VEKTsKLQlhcGljX3dyaXRlKEFQSUNfSUQsIGFwaWNfcG1fc3RhdGUuYXBpY19pZCk7Ci0JYXBpY193cml0ZShBUElDX0RGUiwgYXBpY19wbV9zdGF0ZS5hcGljX2Rmcik7Ci0JYXBpY193cml0ZShBUElDX0xEUiwgYXBpY19wbV9zdGF0ZS5hcGljX2xkcik7Ci0JYXBpY193cml0ZShBUElDX1RBU0tQUkksIGFwaWNfcG1fc3RhdGUuYXBpY190YXNrcHJpKTsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgYXBpY19wbV9zdGF0ZS5hcGljX3NwaXYpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnQxKTsKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfTUNFX1A0VEhFUk1BTCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X01DRV9JTlRFTCkKLQlpZiAobWF4bHZ0ID49IDUpCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRUSE1SLCBhcGljX3BtX3N0YXRlLmFwaWNfdGhtcik7Ci0jZW5kaWYKLQlpZiAobWF4bHZ0ID49IDQpCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgYXBpY19wbV9zdGF0ZS5hcGljX2x2dHBjKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dHQpOwotCWFwaWNfd3JpdGUoQVBJQ19URENSLCBhcGljX3BtX3N0YXRlLmFwaWNfdGRjcik7Ci0JYXBpY193cml0ZShBUElDX1RNSUNULCBhcGljX3BtX3N0YXRlLmFwaWNfdG1pY3QpOwotCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCWFwaWNfcmVhZChBUElDX0VTUik7Ci0JYXBpY193cml0ZShBUElDX0xWVEVSUiwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dGVycik7Ci0JYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JYXBpY19yZWFkKEFQSUNfRVNSKTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogVGhpcyBkZXZpY2UgaGFzIG5vIHNodXRkb3duIG1ldGhvZCAtIGZ1bGx5IGZ1bmN0aW9uaW5nIGxvY2FsIEFQSUNzCi0gKiBhcmUgbmVlZGVkIG9uIGV2ZXJ5IENQVSB1cCB1bnRpbCBtYWNoaW5lX2hhbHQvcmVzdGFydC9wb3dlcm9mZi4KLSAqLwotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBsYXBpY19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAibGFwaWMiLAotCS5yZXN1bWUJCT0gbGFwaWNfcmVzdW1lLAotCS5zdXNwZW5kCT0gbGFwaWNfc3VzcGVuZCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBkZXZpY2VfbGFwaWMgPSB7Ci0JLmlkCT0gMCwKLQkuY2xzCT0gJmxhcGljX3N5c2NsYXNzLAotfTsKLQotc3RhdGljIHZvaWQgX19jcHVpbml0IGFwaWNfcG1fYWN0aXZhdGUodm9pZCkKLXsKLQlhcGljX3BtX3N0YXRlLmFjdGl2ZSA9IDE7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfbGFwaWNfc3lzZnModm9pZCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoIWNwdV9oYXNfYXBpYykKLQkJcmV0dXJuIDA7Ci0JLyogWFhYOiByZW1vdmUgc3VzcGVuZC9yZXN1bWUgcHJvY3MgaWYgIWFwaWNfcG1fc3RhdGUuYWN0aXZlPyAqLwotCi0JZXJyb3IgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmxhcGljX3N5c2NsYXNzKTsKLQlpZiAoIWVycm9yKQotCQllcnJvciA9IHN5c2Rldl9yZWdpc3RlcigmZGV2aWNlX2xhcGljKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci1kZXZpY2VfaW5pdGNhbGwoaW5pdF9sYXBpY19zeXNmcyk7Ci0KLSNlbHNlCS8qIENPTkZJR19QTSAqLwotCi1zdGF0aWMgdm9pZCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpIHsgfQotCi0jZW5kaWYJLyogQ09ORklHX1BNICovCi0KLS8qCi0gKiBhcGljX2lzX2NsdXN0ZXJlZF9ib3goKSAtLSBDaGVjayBpZiB3ZSBjYW4gZXhwZWN0IGdvb2QgVFNDCi0gKgotICogVGh1cyBmYXIsIHRoZSBtYWpvciB1c2VyIG9mIHRoaXMgaXMgSUJNJ3MgU3VtbWl0MiBzZXJpZXM6Ci0gKgotICogQ2x1c3RlcmVkIGJveGVzIG1heSBoYXZlIHVuc3luY2VkIFRTQyBwcm9ibGVtcyBpZiB0aGV5IGFyZQotICogbXVsdGktY2hhc3Npcy4gVXNlIGF2YWlsYWJsZSBkYXRhIHRvIHRha2UgYSBnb29kIGd1ZXNzLgotICogSWYgaW4gZG91YnQsIGdvIEhQRVQuCi0gKi8KLV9fY3B1aW5pdCBpbnQgYXBpY19pc19jbHVzdGVyZWRfYm94KHZvaWQpCi17Ci0JaW50IGksIGNsdXN0ZXJzLCB6ZXJvczsKLQl1bnNpZ25lZCBpZDsKLQl1MTYgKmJpb3NfY3B1X2FwaWNpZDsKLQlERUNMQVJFX0JJVE1BUChjbHVzdGVybWFwLCBOVU1fQVBJQ19DTFVTVEVSUyk7Ci0KLQkvKgotCSAqIHRoZXJlIGlzIG5vdCB0aGlzIGtpbmQgb2YgYm94IHdpdGggQU1EIENQVSB5ZXQuCi0JICogU29tZSBBTUQgYm94IHdpdGggcXVhZGNvcmUgY3B1IGFuZCA4IHNvY2tldHMgYXBpY2lkCi0JICogd2lsbCBiZSBbNCwgMHgyM10gb3IgWzgsIDB4MjddIGNvdWxkIGJlIHRob3VnaHQgdG8KLQkgKiB2c21wIGJveCBzdGlsbCBuZWVkIGNoZWNraW5nLi4uCi0JICovCi0JaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICYmICFpc192c21wX2JveCgpKQotCQlyZXR1cm4gMDsKLQotCWJpb3NfY3B1X2FwaWNpZCA9IGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9iaW9zX2NwdV9hcGljaWQpOwotCWJpdG1hcF96ZXJvKGNsdXN0ZXJtYXAsIE5VTV9BUElDX0NMVVNURVJTKTsKLQotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJLyogYXJlIHdlIGJlaW5nIGNhbGxlZCBlYXJseSBpbiBrZXJuZWwgc3RhcnR1cD8gKi8KLQkJaWYgKGJpb3NfY3B1X2FwaWNpZCkgewotCQkJaWQgPSBiaW9zX2NwdV9hcGljaWRbaV07Ci0JCX0KLQkJZWxzZSBpZiAoaSA8IG5yX2NwdV9pZHMpIHsKLQkJCWlmIChjcHVfcHJlc2VudChpKSkKLQkJCQlpZCA9IHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgaSk7Ci0JCQllbHNlCi0JCQkJY29udGludWU7Ci0JCX0KLQkJZWxzZQotCQkJYnJlYWs7Ci0KLQkJaWYgKGlkICE9IEJBRF9BUElDSUQpCi0JCQlfX3NldF9iaXQoQVBJQ19DTFVTVEVSSUQoaWQpLCBjbHVzdGVybWFwKTsKLQl9Ci0KLQkvKiBQcm9ibGVtOiAgUGFydGlhbGx5IHBvcHVsYXRlZCBjaGFzc2lzIG1heSBub3QgaGF2ZSBDUFVzIGluIHNvbWUgb2YKLQkgKiB0aGUgQVBJQyBjbHVzdGVycyB0aGV5IGhhdmUgYmVlbiBhbGxvY2F0ZWQuICBPbmx5IHByZXNlbnQgQ1BVcyBoYXZlCi0JICogeDg2X2Jpb3NfY3B1X2FwaWNpZCBlbnRyaWVzLCB0aHVzIGNhdXNpbmcgemVyb2VzIGluIHRoZSBiaXRtYXAuCi0JICogU2luY2UgY2x1c3RlcnMgYXJlIGFsbG9jYXRlZCBzZXF1ZW50aWFsbHksIGNvdW50IHplcm9zIG9ubHkgaWYKLQkgKiB0aGV5IGFyZSBib3VuZGVkIGJ5IG9uZXMuCi0JICovCi0JY2x1c3RlcnMgPSAwOwotCXplcm9zID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0FQSUNfQ0xVU1RFUlM7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgY2x1c3Rlcm1hcCkpIHsKLQkJCWNsdXN0ZXJzICs9IDEgKyB6ZXJvczsKLQkJCXplcm9zID0gMDsKLQkJfSBlbHNlCi0JCQkrK3plcm9zOwotCX0KLQotCS8qIFNjYWxlTVAgdlNNUG93ZXJlZCBib3hlcyBoYXZlIG9uZSBjbHVzdGVyIHBlciBib2FyZCBhbmQgVFNDcyBhcmUKLQkgKiBub3QgZ3VhcmFudGVlZCB0byBiZSBzeW5jZWQgYmV0d2VlbiBib2FyZHMKLQkgKi8KLQlpZiAoaXNfdnNtcF9ib3goKSAmJiBjbHVzdGVycyA+IDEpCi0JCXJldHVybiAxOwotCi0JLyoKLQkgKiBJZiBjbHVzdGVycyA+IDIsIHRoZW4gc2hvdWxkIGJlIG11bHRpLWNoYXNzaXMuCi0JICogTWF5IGhhdmUgdG8gcmV2aXNpdCB0aGlzIHdoZW4gbXVsdGktY29yZSArIGh5cGVydGhyZWFkZWQgQ1BVcyBjb21lCi0JICogb3V0LCBidXQgQUZBSUsgdGhpcyB3aWxsIHdvcmsgZXZlbiBmb3IgdGhlbS4KLQkgKi8KLQlyZXR1cm4gKGNsdXN0ZXJzID4gMik7Ci19Ci0KLXN0YXRpYyBfX2luaXQgaW50IHNldHVwX25veDJhcGljKGNoYXIgKnN0cikKLXsKLQlkaXNhYmxlX3gyYXBpYyA9IDE7Ci0JY2xlYXJfY3B1X2NhcCgmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfWDJBUElDKTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJub3gyYXBpYyIsIHNldHVwX25veDJhcGljKTsKLQotCi0vKgotICogQVBJQyBjb21tYW5kIGxpbmUgcGFyYW1ldGVycwotICovCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9kaXNhYmxlYXBpYyhjaGFyICphcmcpCi17Ci0JZGlzYWJsZV9hcGljID0gMTsKLQlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX0FQSUMpOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImRpc2FibGVhcGljIiwgc2V0dXBfZGlzYWJsZWFwaWMpOwotCi0vKiBzYW1lIGFzIGRpc2FibGVhcGljLCBmb3IgY29tcGF0aWJpbGl0eSAqLwotc3RhdGljIGludCBfX2luaXQgc2V0dXBfbm9sYXBpYyhjaGFyICphcmcpCi17Ci0JcmV0dXJuIHNldHVwX2Rpc2FibGVhcGljKGFyZyk7Ci19Ci1lYXJseV9wYXJhbSgibm9sYXBpYyIsIHNldHVwX25vbGFwaWMpOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9sYXBpY190aW1lcl9jMl9vayhjaGFyICphcmcpCi17Ci0JbG9jYWxfYXBpY190aW1lcl9jMl9vayA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibGFwaWNfdGltZXJfYzJfb2siLCBwYXJzZV9sYXBpY190aW1lcl9jMl9vayk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2Rpc2FibGVfYXBpY190aW1lcihjaGFyICphcmcpCi17Ci0JZGlzYWJsZV9hcGljX3RpbWVyID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJub2FwaWN0aW1lciIsIHBhcnNlX2Rpc2FibGVfYXBpY190aW1lcik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX25vbGFwaWNfdGltZXIoY2hhciAqYXJnKQotewotCWRpc2FibGVfYXBpY190aW1lciA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibm9sYXBpY190aW1lciIsIHBhcnNlX25vbGFwaWNfdGltZXIpOwotCi1zdGF0aWMgX19pbml0IGludCBzZXR1cF9hcGljcG10aW1lcihjaGFyICpzKQotewotCWFwaWNfY2FsaWJyYXRlX3BtdG1yID0gMTsKLQlub3RzY19zZXR1cChOVUxMKTsKLQlyZXR1cm4gMDsKLX0KLV9fc2V0dXAoImFwaWNwbXRpbWVyIiwgc2V0dXBfYXBpY3BtdGltZXIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBhcGljX3NldF92ZXJib3NpdHkoY2hhciAqYXJnKQotewotCWlmICghYXJnKSAgewotI2lmZGVmIENPTkZJR19YODZfNjQKLQkJc2tpcF9pb2FwaWNfc2V0dXAgPSAwOwotCQlpb2FwaWNfZm9yY2UgPSAxOwotCQlyZXR1cm4gMDsKLSNlbmRpZgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoc3RyY21wKCJkZWJ1ZyIsIGFyZykgPT0gMCkKLQkJYXBpY192ZXJib3NpdHkgPSBBUElDX0RFQlVHOwotCWVsc2UgaWYgKHN0cmNtcCgidmVyYm9zZSIsIGFyZykgPT0gMCkKLQkJYXBpY192ZXJib3NpdHkgPSBBUElDX1ZFUkJPU0U7Ci0JZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkFQSUMgVmVyYm9zaXR5IGxldmVsICVzIG5vdCByZWNvZ25pc2VkIgotCQkJIiB1c2UgYXBpYz12ZXJib3NlIG9yIGFwaWM9ZGVidWdcbiIsIGFyZyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImFwaWMiLCBhcGljX3NldF92ZXJib3NpdHkpOwotCi1zdGF0aWMgaW50IF9faW5pdCBsYXBpY19pbnNlcnRfcmVzb3VyY2Uodm9pZCkKLXsKLQlpZiAoIWFwaWNfcGh5cykKLQkJcmV0dXJuIC0xOwotCi0JLyogUHV0IGxvY2FsIEFQSUMgaW50byB0aGUgcmVzb3VyY2UgbWFwLiAqLwotCWxhcGljX3Jlc291cmNlLnN0YXJ0ID0gYXBpY19waHlzOwotCWxhcGljX3Jlc291cmNlLmVuZCA9IGxhcGljX3Jlc291cmNlLnN0YXJ0ICsgUEFHRV9TSVpFIC0gMTsKLQlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmbGFwaWNfcmVzb3VyY2UpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBuZWVkIGNhbGwgaW5zZXJ0IGFmdGVyIGU4MjBfcmVzZXJ2ZV9yZXNvdXJjZXMoKQotICogdGhhdCBpcyB1c2luZyByZXF1ZXN0X3Jlc291cmNlCi0gKi8KLWxhdGVfaW5pdGNhbGwobGFwaWNfaW5zZXJ0X3Jlc291cmNlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYmlvc191di5jCmluZGV4IGZkZDU4NWYuLmYwZGZlNmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Jpb3NfdXYuYwpAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKiBCSU9TIHJ1biB0aW1lIGludGVyZmFjZSByb3V0aW5lcy4KICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMTYsMzMgKzE0LDEyOCBAQAogICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChjKSBSdXNzIEFuZGVyc29uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgorI2luY2x1ZGUgPGFzbS9lZmkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS91di9iaW9zLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X2h1Yi5oPgogCi1jb25zdCBjaGFyICoKLXg4Nl9iaW9zX3N0cmVycm9yKGxvbmcgc3RhdHVzKQorc3RydWN0IHV2X3N5c3RhYiB1dl9zeXN0YWI7CisKK3M2NCB1dl9iaW9zX2NhbGwoZW51bSB1dl9iaW9zX2NtZCB3aGljaCwgdTY0IGExLCB1NjQgYTIsIHU2NCBhMywgdTY0IGE0LCB1NjQgYTUpCiB7Ci0JY29uc3QgY2hhciAqc3RyOwotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSAgMDogc3RyID0gIkNhbGwgY29tcGxldGVkIHdpdGhvdXQgZXJyb3IiOwlicmVhazsKLQljYXNlIC0xOiBzdHIgPSAiTm90IGltcGxlbWVudGVkIjsJCWJyZWFrOwotCWNhc2UgLTI6IHN0ciA9ICJJbnZhbGlkIGFyZ3VtZW50IjsJCWJyZWFrOwotCWNhc2UgLTM6IHN0ciA9ICJDYWxsIGNvbXBsZXRlZCB3aXRoIGVycm9yIjsJYnJlYWs7Ci0JZGVmYXVsdDogc3RyID0gIlVua25vd24gQklPUyBzdGF0dXMgY29kZSI7CWJyZWFrOworCXN0cnVjdCB1dl9zeXN0YWIgKnRhYiA9ICZ1dl9zeXN0YWI7CisKKwlpZiAoIXRhYi0+ZnVuY3Rpb24pCisJCS8qCisJCSAqIEJJT1MgZG9lcyBub3Qgc3VwcG9ydCBVViBzeXN0YWIKKwkJICovCisJCXJldHVybiBCSU9TX1NUQVRVU19VTklNUExFTUVOVEVEOworCisJcmV0dXJuIGVmaV9jYWxsNigodm9pZCAqKV9fdmEodGFiLT5mdW5jdGlvbiksCisJCQkJCSh1NjQpd2hpY2gsIGExLCBhMiwgYTMsIGE0LCBhNSk7Cit9CisKK3M2NCB1dl9iaW9zX2NhbGxfaXJxc2F2ZShlbnVtIHV2X2Jpb3NfY21kIHdoaWNoLCB1NjQgYTEsIHU2NCBhMiwgdTY0IGEzLAorCQkJCQl1NjQgYTQsIHU2NCBhNSkKK3sKKwl1bnNpZ25lZCBsb25nIGJpb3NfZmxhZ3M7CisJczY0IHJldDsKKworCWxvY2FsX2lycV9zYXZlKGJpb3NfZmxhZ3MpOworCXJldCA9IHV2X2Jpb3NfY2FsbCh3aGljaCwgYTEsIGEyLCBhMywgYTQsIGE1KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShiaW9zX2ZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3M2NCB1dl9iaW9zX2NhbGxfcmVlbnRyYW50KGVudW0gdXZfYmlvc19jbWQgd2hpY2gsIHU2NCBhMSwgdTY0IGEyLCB1NjQgYTMsCisJCQkJCXU2NCBhNCwgdTY0IGE1KQoreworCXM2NCByZXQ7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlyZXQgPSB1dl9iaW9zX2NhbGwod2hpY2gsIGExLCBhMiwgYTMsIGE0LCBhNSk7CisJcHJlZW1wdF9lbmFibGUoKTsKKworCXJldHVybiByZXQ7Cit9CisKKworbG9uZyBzbl9wYXJ0aXRpb25faWQ7CitFWFBPUlRfU1lNQk9MX0dQTChzbl9wYXJ0aXRpb25faWQpOworbG9uZyB1dl9jb2hlcmVuY3lfaWQ7CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9jb2hlcmVuY3lfaWQpOworbG9uZyB1dl9yZWdpb25fc2l6ZTsKK0VYUE9SVF9TWU1CT0xfR1BMKHV2X3JlZ2lvbl9zaXplKTsKK2ludCB1dl90eXBlOworCisKK3M2NCB1dl9iaW9zX2dldF9zbl9pbmZvKGludCBmYywgaW50ICp1dnR5cGUsIGxvbmcgKnBhcnRpZCwgbG9uZyAqY29oZXIsCisJCWxvbmcgKnJlZ2lvbikKK3sKKwlzNjQgcmV0OworCXU2NCB2MCwgdjE7CisJdW5pb24gcGFydGl0aW9uX2luZm9fdSBwYXJ0OworCisJcmV0ID0gdXZfYmlvc19jYWxsX2lycXNhdmUoVVZfQklPU19HRVRfU05fSU5GTywgZmMsCisJCQkJKHU2NCkoJnYwKSwgKHU2NCkoJnYxKSwgMCwgMCk7CisJaWYgKHJldCAhPSBCSU9TX1NUQVRVU19TVUNDRVNTKQorCQlyZXR1cm4gcmV0OworCisJcGFydC52YWwgPSB2MDsKKwlpZiAodXZ0eXBlKQorCQkqdXZ0eXBlID0gcGFydC5odWJfdmVyc2lvbjsKKwlpZiAocGFydGlkKQorCQkqcGFydGlkID0gcGFydC5wYXJ0aXRpb25faWQ7CisJaWYgKGNvaGVyKQorCQkqY29oZXIgPSBwYXJ0LmNvaGVyZW5jZV9pZDsKKwlpZiAocmVnaW9uKQorCQkqcmVnaW9uID0gcGFydC5yZWdpb25fc2l6ZTsKKwlyZXR1cm4gcmV0OworfQorCisKK3M2NCB1dl9iaW9zX2ZyZXFfYmFzZSh1NjQgY2xvY2tfdHlwZSwgdTY0ICp0aWNrc19wZXJfc2Vjb25kKQoreworCXJldHVybiB1dl9iaW9zX2NhbGwoVVZfQklPU19GUkVRX0JBU0UsIGNsb2NrX3R5cGUsCisJCQkgICAodTY0KXRpY2tzX3Blcl9zZWNvbmQsIDAsIDAsIDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXZfYmlvc19mcmVxX2Jhc2UpOworCisKKyNpZmRlZiBDT05GSUdfRUZJCit2b2lkIHV2X2Jpb3NfaW5pdCh2b2lkKQoreworCXN0cnVjdCB1dl9zeXN0YWIgKnRhYjsKKworCWlmICgoZWZpLnV2X3N5c3RhYiA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKSB8fAorCSAgICAoZWZpLnV2X3N5c3RhYiA9PSAodW5zaWduZWQgbG9uZylOVUxMKSkgeworCQlwcmludGsoS0VSTl9DUklUICJObyBFRkkgVVYgU3lzdGVtIFRhYmxlLlxuIik7CisJCXV2X3N5c3RhYi5mdW5jdGlvbiA9ICh1bnNpZ25lZCBsb25nKU5VTEw7CisJCXJldHVybjsKIAl9Ci0JcmV0dXJuIHN0cjsKLX0KIAotbG9uZwoteDg2X2Jpb3NfZnJlcV9iYXNlKHVuc2lnbmVkIGxvbmcgd2hpY2gsIHVuc2lnbmVkIGxvbmcgKnRpY2tzX3Blcl9zZWNvbmQsCi0JCSAgIHVuc2lnbmVkIGxvbmcgKmRyaWZ0X2luZm8pCi17Ci0Jc3RydWN0IHV2X2Jpb3NfcmV0dmFsIGlzcnY7CisJdGFiID0gKHN0cnVjdCB1dl9zeXN0YWIgKilpb3JlbWFwKGVmaS51dl9zeXN0YWIsCisJCQkJCXNpemVvZihzdHJ1Y3QgdXZfc3lzdGFiKSk7CisJaWYgKHN0cm5jbXAodGFiLT5zaWduYXR1cmUsICJVVlNUIiwgNCkgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJiYWQgc2lnbmF0dXJlIGluIFVWIHN5c3RlbSB0YWJsZSEiKTsKIAotCUJJT1NfQ0FMTChpc3J2LCBCSU9TX0ZSRVFfQkFTRSwgd2hpY2gsIDAsIDAsIDAsIDAsIDAsIDApOwotCSp0aWNrc19wZXJfc2Vjb25kID0gaXNydi52MDsKLQkqZHJpZnRfaW5mbyA9IGlzcnYudjE7Ci0JcmV0dXJuIGlzcnYuc3RhdHVzOworCS8qCisJICogQ29weSB0YWJsZSB0byBwZXJtYW5lbnQgc3BvdCBmb3IgbGF0ZXIgdXNlLgorCSAqLworCW1lbWNweSgmdXZfc3lzdGFiLCB0YWIsIHNpemVvZihzdHJ1Y3QgdXZfc3lzdGFiKSk7CisJaW91bm1hcCh0YWIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiRUZJIFVWIFN5c3RlbSBUYWJsZSBSZXZpc2lvbiAlZFxuIiwgdGFiLT5yZXZpc2lvbik7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh4ODZfYmlvc19mcmVxX2Jhc2UpOworI2Vsc2UJLyogIUNPTkZJR19FRkkgKi8KKwordm9pZCB1dl9iaW9zX2luaXQodm9pZCkgeyB9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS8uZ2l0aWdub3JlIGIvYXJjaC94ODYva2VybmVsL2NwdS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2N2RmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1Ly5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorY2FwZmxhZ3MuYwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKaW5kZXggMzJlNzM1Mi4uOGYxZTMxZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCkBAIC0yNDksNyArMjQ5LDcgQEAKIAl9CiAJbnVtYV9zZXRfbm9kZShjcHUsIG5vZGUpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiQ1BVICVkLyV4IC0+IE5vZGUgJWRcbiIsIGNwdSwgYXBpY2lkLCBub2RlKTsKKwlwcmludGsoS0VSTl9JTkZPICJDUFUgJWQvMHgleCAtPiBOb2RlICVkXG4iLCBjcHUsIGFwaWNpZCwgbm9kZSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwppbmRleCAwNmZjY2U1Li5iMDQ2MTg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgKEMpIDIwMDEtMjAwNCAgRGF2ZSBKb25lcy4gPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorICogIChDKSAyMDAxLTIwMDQgIERhdmUgSm9uZXMuIDxkYXZlakByZWRoYXQuY29tPgogICogIChDKSAyMDAyICBQYWRyYWlnIEJyYWR5LiA8cGFkcmFpZ0BhbnRlZmFjdG8uY29tPgogICoKICAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCkBAIC0xMDE5LDcgKzEwMTksNyBAQAogbW9kdWxlX3BhcmFtKHJldmlkX2VycmF0YSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmV2aWRfZXJyYXRhLCAiSWdub3JlIENQVSBSZXZpc2lvbiBJRCIpOwogCi1NT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Iik7CitNT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTiAoIkxvbmdoYXVsIGRyaXZlciBmb3IgVklBIEN5cml4IHByb2Nlc3NvcnMuIik7CiBNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jCmluZGV4IGI1Y2VkODAuLmMxYWM1NzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SKCJBcmphbiB2YW4gZGUgVmVuIDxhcmphbnZAcmVkaGF0LmNvbT4sIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiwgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOworTU9EVUxFX0FVVEhPUigiQXJqYW4gdmFuIGRlIFZlbiwgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUG93ZXJOb3chIGRyaXZlciBmb3IgQU1EIEs2LTIrIC8gSzYtMysgcHJvY2Vzc29ycy4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYwppbmRleCAwYTYxMTU5Li43YzdkNTZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQU1EIEs3IFBvd2Vybm93IGRyaXZlci4KLSAqICAoQykgMjAwMyBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4gb24gYmVoYWxmIG9mIFN1U0UgTGFicy4KKyAqICAoQykgMjAwMyBEYXZlIEpvbmVzIG9uIGJlaGFsZiBvZiBTdVNFIExhYnMuCiAgKiAgKEMpIDIwMDMtMjAwNCBEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPgogICoKICAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCkBAIC02OTIsNyArNjkyLDcgQEAKIG1vZHVsZV9wYXJhbShhY3BpX2ZvcmNlLCAgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYWNwaV9mb3JjZSwgIkZvcmNlIEFDUEkgdG8gYmUgdXNlZC4iKTsKIAotTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiIpOworTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04gKCJQb3dlcm5vdyBkcml2ZXIgZm9yIEFNRCBLNyBwcm9jZXNzb3JzLiIpOwogTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCA4NGJiMzk1Li4wMDhkMjNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtNyw3ICs3LDcgQEAKICAqICBTdXBwb3J0IDogbWFyay5sYW5nc2RvcmZAYW1kLmNvbQogICoKICAqICBCYXNlZCBvbiB0aGUgcG93ZXJub3ctazcuYyBtb2R1bGUgd3JpdHRlbiBieSBEYXZlIEpvbmVzLgotICogIChDKSAyMDAzIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiBvbiBiZWhhbGYgb2YgU3VTRSBMYWJzCisgKiAgKEMpIDIwMDMgRGF2ZSBKb25lcyBvbiBiZWhhbGYgb2YgU3VTRSBMYWJzCiAgKiAgKEMpIDIwMDQgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPgogICogIChDKSAyMDA0IFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KICAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwppbmRleCAxOTFmNzI2Li4wNGQwMzc2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKQEAgLTQzMSw3ICs0MzEsNyBAQAogfQogCiAKLU1PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4sIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKK01PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiwgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OICgiU3BlZWRzdGVwIGRyaXZlciBmb3IgSW50ZWwgbW9iaWxlIHByb2Nlc3NvcnMgb24gY2hpcHNldHMgd2l0aCBJQ0gtTSBzb3V0aGJyaWRnZXMuIik7CiBNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKaW5kZXggOTk0NjhkYi4uY2NlMGI2MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJCW5vZGUgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7CiAJbnVtYV9zZXRfbm9kZShjcHUsIG5vZGUpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiQ1BVICVkLyV4IC0+IE5vZGUgJWRcbiIsIGNwdSwgYXBpY2lkLCBub2RlKTsKKwlwcmludGsoS0VSTl9JTkZPICJDUFUgJWQvMHgleCAtPiBOb2RlICVkXG4iLCBjcHUsIGFwaWNpZCwgbm9kZSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svazcuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMKaW5kZXggZjM5MGM5Zi4uZGQzYWY2ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svazcuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9rNy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKLSAqIEF0aGxvbi9IYW1tZXIgc3BlY2lmaWMgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gUmVwb3J0aW5nCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+CisgKiBBdGhsb24gc3BlY2lmaWMgTWFjaGluZSBDaGVjayBFeGNlcHRpb24gUmVwb3J0aW5nCisgKiAoQykgQ29weXJpZ2h0IDIwMDIgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfMzIuYwppbmRleCA3NzRkODdjLi4wZWJmM2ZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfMzIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBtY2UuYyAtIHg4NiBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbiBSZXBvcnRpbmcKLSAqIChjKSAyMDAyIEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+LCBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KKyAqIChjKSAyMDAyIEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+LCBEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9ub24tZmF0YWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL25vbi1mYXRhbC5jCmluZGV4IGNjMWZjY2QuLmE3NGFmMTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL25vbi1mYXRhbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL25vbi1mYXRhbC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIE5vbiBGYXRhbCBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbiBSZXBvcnRpbmcKICAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIgRGF2ZSBKb25lcy4gPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorICogKEMpIENvcHlyaWdodCAyMDAyIERhdmUgSm9uZXMuIDxkYXZlakByZWRoYXQuY29tPgogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0byBjaGVjayBmb3Igbm9uLWZhdGFsIE1DRXMgZXZlcnkgMTVzCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdWlkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYwppbmRleCA2YTQ0ZDY0Li43MmNlZmQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYwpAQCAtMTQ3LDggKzE0Nyw4IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCi0JZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGNwdWlkX2NsYXNzLCBOVUxMLCBNS0RFVihDUFVJRF9NQUpPUiwgY3B1KSwKLQkJCQkgICAgTlVMTCwgImNwdSVkIiwgY3B1KTsKKwlkZXYgPSBkZXZpY2VfY3JlYXRlKGNwdWlkX2NsYXNzLCBOVUxMLCBNS0RFVihDUFVJRF9NQUpPUiwgY3B1KSwgTlVMTCwKKwkJCSAgICAiY3B1JWQiLCBjcHUpOwogCXJldHVybiBJU19FUlIoZGV2KSA/IFBUUl9FUlIoZGV2KSA6IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCmluZGV4IDcyZDBjNTYuLmY3Y2RiM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYwpAQCAtMTMsNiArMTMsOSBAQAogCiBzdGF0aWMgdm9pZCAqa2R1bXBfYnVmX3BhZ2U7CiAKKy8qIFN0b3JlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBlbGYgaGVhZGVyIG9mIGNyYXNoIGltYWdlLiAqLwordW5zaWduZWQgbG9uZyBsb25nIGVsZmNvcmVoZHJfYWRkciA9IEVMRkNPUkVfQUREUl9NQVg7CisKIC8qKgogICogY29weV9vbGRtZW1fcGFnZSAtIGNvcHkgb25lIHBhZ2UgZnJvbSAib2xkbWVtIgogICogQHBmbjogcGFnZSBmcmFtZSBudW1iZXIgdG8gYmUgY29waWVkCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF82NC5jIGIvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfNjQuYwppbmRleCBlOTBhNjBlLi4wNDViMzZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzY0LmMKQEAgLTEwLDYgKzEwLDkgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCit1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKwogLyoqCiAgKiBjb3B5X29sZG1lbV9wYWdlIC0gY29weSBvbmUgcGFnZSBmcm9tICJvbGRtZW0iCiAgKiBAcGZuOiBwYWdlIGZyYW1lIG51bWJlciB0byBiZSBjb3BpZWQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYwppbmRleCAyMDFlZTM1Li4xYTc4MTgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogCiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KIApAQCAtMzQzLDYgKzM0NCw3IEBACiAJcHJpbnRrKCJERUJVR19QQUdFQUxMT0MiKTsKICNlbmRpZgogCXByaW50aygiXG4iKTsKKwlzeXNmc19wcmludGtfbGFzdF9maWxlKCk7CiAJaWYgKG5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgZXJyLAogCQkJY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sIFNJR1NFR1YpID09IE5PVElGWV9TVE9QKQogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwppbmRleCAwODZjYzgxLi45NmE1ZGI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogCiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KIApAQCAtNDg5LDYgKzQ5MCw3IEBACiAJcHJpbnRrKCJERUJVR19QQUdFQUxMT0MiKTsKICNlbmRpZgogCXByaW50aygiXG4iKTsKKwlzeXNmc19wcmludGtfbGFzdF9maWxlKCk7CiAJaWYgKG5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgZXJyLAogCQkJY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sIFNJR1NFR1YpID09IE5PVElGWV9TVE9QKQogCQlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCmluZGV4IDc4ZTY0MmYuLmNlOTdiZjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwpAQCAtMTI4MiwxMiArMTI4MiwxMCBAQAogCWU4MjBfcmVzID0gcmVzOwogCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7CiAJCWVuZCA9IGU4MjAubWFwW2ldLmFkZHIgKyBlODIwLm1hcFtpXS5zaXplIC0gMTsKLSNpZm5kZWYgQ09ORklHX1JFU09VUkNFU182NEJJVAotCQlpZiAoZW5kID4gMHgxMDAwMDAwMDBVTEwpIHsKKwkJaWYgKGVuZCAhPSAocmVzb3VyY2Vfc2l6ZV90KWVuZCkgewogCQkJcmVzKys7CiAJCQljb250aW51ZTsKIAkJfQotI2VuZGlmCiAJCXJlcy0+bmFtZSA9IGU4MjBfdHlwZV90b19zdHJpbmcoZTgyMC5tYXBbaV0udHlwZSk7CiAJCXJlcy0+c3RhcnQgPSBlODIwLm1hcFtpXS5hZGRyOwogCQlyZXMtPmVuZCA9IGVuZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYyBiL2FyY2gveDg2L2tlcm5lbC9lZmkuYwppbmRleCA5NDVhMzFjLi4xMTE5ZDI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCkBAIC0zNjcsNiArMzY3LDEwIEBACiAJCQllZmkuc21iaW9zID0gY29uZmlnX3RhYmxlc1tpXS50YWJsZTsKIAkJCXByaW50aygiIFNNQklPUz0weCVseCAiLCBjb25maWdfdGFibGVzW2ldLnRhYmxlKTsKIAkJfSBlbHNlIGlmICghZWZpX2d1aWRjbXAoY29uZmlnX3RhYmxlc1tpXS5ndWlkLAorCQkJCQlVVl9TWVNURU1fVEFCTEVfR1VJRCkpIHsKKwkJCWVmaS51dl9zeXN0YWIgPSBjb25maWdfdGFibGVzW2ldLnRhYmxlOworCQkJcHJpbnRrKCIgVVZzeXN0YWI9MHglbHggIiwgY29uZmlnX3RhYmxlc1tpXS50YWJsZSk7CisJCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKGNvbmZpZ190YWJsZXNbaV0uZ3VpZCwKIAkJCQkJSENEUF9UQUJMRV9HVUlEKSkgewogCQkJZWZpLmhjZHAgPSBjb25maWdfdGFibGVzW2ldLnRhYmxlOwogCQkJcHJpbnRrKCIgSENEUD0weCVseCAiLCBjb25maWdfdGFibGVzW2ldLnRhYmxlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKaW5kZXggNGU0MjY5Yy4uYzM1NjQyMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKQEAgLTYyOSw3ICs2MjksNyBAQAogRU5UUlkoaXJxX2VudHJpZXNfc3RhcnQpCiAJUklORzBfSU5UX0ZSQU1FCiB2ZWN0b3I9MAotLnJlcHQgTlJfSVJRUworLnJlcHQgTlJfVkVDVE9SUwogCUFMSUdOCiAgLmlmIHZlY3RvcgogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfZmxhdF82NC5jIGIvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfZmxhdF82NC5jCmluZGV4IDllY2E1YmEuLjJlYzJkZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljX2ZsYXRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VuYXBpY19mbGF0XzY0LmMKQEAgLTE3OSw4ICsxNzksMTAgQEAKIAkgKiBpcyBhbiBleGFtcGxlKS4KIAkgKi8KIAlpZiAoYWNwaV9nYmxfRkFEVC5oZWFkZXIucmV2aXNpb24gPiBGQURUMl9SRVZJU0lPTl9JRCAmJgotCQkoYWNwaV9nYmxfRkFEVC5mbGFncyAmIEFDUElfRkFEVF9BUElDX1BIWVNJQ0FMKSkKKwkJKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfQVBJQ19QSFlTSUNBTCkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInN5c3RlbSBBUElDIG9ubHkgY2FuIHVzZSBwaHlzaWNhbCBmbGF0Iik7CiAJCXJldHVybiAxOworCX0KICNlbmRpZgogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfdXZfeC5jCmluZGV4IDMzNTgxZDkuLmJmZDUzMjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfdXZfeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9nZW54MmFwaWNfdXZfeC5jCkBAIC0zNDEsMTIgKzM0MSwxMiBAQAogCiBzdGF0aWMgX19pbml0IHZvaWQgdXZfcnRjX2luaXQodm9pZCkKIHsKLQlsb25nIHN0YXR1cywgdGlja3NfcGVyX3NlYywgZHJpZnQ7CisJbG9uZyBzdGF0dXM7CisJdTY0IHRpY2tzX3Blcl9zZWM7CiAKLQlzdGF0dXMgPQotCSAgICB4ODZfYmlvc19mcmVxX2Jhc2UoQklPU19GUkVRX0JBU0VfUkVBTFRJTUVfQ0xPQ0ssICZ0aWNrc19wZXJfc2VjLAotCQkJCQkmZHJpZnQpOwotCWlmIChzdGF0dXMgIT0gMCB8fCB0aWNrc19wZXJfc2VjIDwgMTAwMDAwKSB7CisJc3RhdHVzID0gdXZfYmlvc19mcmVxX2Jhc2UoQklPU19GUkVRX0JBU0VfUkVBTFRJTUVfQ0xPQ0ssCisJCQkJCSZ0aWNrc19wZXJfc2VjKTsKKwlpZiAoc3RhdHVzICE9IEJJT1NfU1RBVFVTX1NVQ0NFU1MgfHwgdGlja3NfcGVyX3NlYyA8IDEwMDAwMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkidW5hYmxlIHRvIGRldGVybWluZSBwbGF0Zm9ybSBSVEMgY2xvY2sgZnJlcXVlbmN5LCAiCiAJCQkiZ3Vlc3NpbmcuXG4iKTsKQEAgLTM1Niw3ICszNTYsMjIgQEAKIAkJc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kID0gdGlja3NfcGVyX3NlYzsKIH0KIAotc3RhdGljIGJvb2wgdXZfc3lzdGVtX2luaXRlZDsKKy8qCisgKiBDYWxsZWQgb24gZWFjaCBjcHUgdG8gaW5pdGlhbGl6ZSB0aGUgcGVyX2NwdSBVViBkYXRhIGFyZWEuCisgKiAJWlpaIGhvdHBsdWcgbm90IHN1cHBvcnRlZCB5ZXQKKyAqLwordm9pZCBfX2NwdWluaXQgdXZfY3B1X2luaXQodm9pZCkKK3sKKwkvKiBDUFUgMCBpbml0aWxpemF0aW9uIHdpbGwgYmUgZG9uZSB2aWEgdXZfc3lzdGVtX2luaXQuICovCisJaWYgKCF1dl9ibGFkZV9pbmZvKQorCQlyZXR1cm47CisKKwl1dl9ibGFkZV9pbmZvW3V2X251bWFfYmxhZGVfaWQoKV0ubnJfb25saW5lX2NwdXMrKzsKKworCWlmIChnZXRfdXZfc3lzdGVtX3R5cGUoKSA9PSBVVl9OT05fVU5JUVVFX0FQSUMpCisJCXNldF94MmFwaWNfZXh0cmFfYml0cyh1dl9odWJfaW5mby0+cG5vZGUpOworfQorCiAKIHZvaWQgX19pbml0IHV2X3N5c3RlbV9pbml0KHZvaWQpCiB7CkBAIC00MTIsNiArNDI3LDkgQEAKIAlnbm9kZV91cHBlciA9ICgoKHVuc2lnbmVkIGxvbmcpbm9kZV9pZC5zLm5vZGVfaWQpICYKIAkJICAgICAgIH4oKDEgPDwgbl92YWwpIC0gMSkpIDw8IG1fdmFsOwogCisJdXZfYmlvc19pbml0KCk7CisJdXZfYmlvc19nZXRfc25faW5mbygwLCAmdXZfdHlwZSwgJnNuX3BhcnRpdGlvbl9pZCwKKwkJCSAgICAmdXZfY29oZXJlbmN5X2lkLCAmdXZfcmVnaW9uX3NpemUpOwogCXV2X3J0Y19pbml0KCk7CiAKIAlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKQEAgLTQzMyw3ICs0NTEsNyBAQAogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z3BhX21hc2sgPSAoMSA8PCAobV92YWwgKyBuX3ZhbCkpIC0gMTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdub2RlX3VwcGVyID0gZ25vZGVfdXBwZXI7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbG9iYWxfbW1yX2Jhc2UgPSBtbXJfYmFzZTsKLQkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmNvaGVyZW5jeV9kb21haW5fbnVtYmVyID0gMDsvKiBaWlogKi8KKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmNvaGVyZW5jeV9kb21haW5fbnVtYmVyID0gdXZfY29oZXJlbmN5X2lkOwogCQl1dl9ub2RlX3RvX2JsYWRlW25pZF0gPSBibGFkZTsKIAkJdXZfY3B1X3RvX2JsYWRlW2NwdV0gPSBibGFkZTsKIAkJbWF4X3Bub2RlID0gbWF4KHBub2RlLCBtYXhfcG5vZGUpOwpAQCAtNDQ4LDIxICs0NjYsNiBAQAogCW1hcF9tbXJfaGlnaChtYXhfcG5vZGUpOwogCW1hcF9jb25maWdfaGlnaChtYXhfcG5vZGUpOwogCW1hcF9tbWlvaF9oaWdoKG1heF9wbm9kZSk7Ci0JdXZfc3lzdGVtX2luaXRlZCA9IHRydWU7CisKKwl1dl9jcHVfaW5pdCgpOwogfQotCi0vKgotICogQ2FsbGVkIG9uIGVhY2ggY3B1IHRvIGluaXRpYWxpemUgdGhlIHBlcl9jcHUgVVYgZGF0YSBhcmVhLgotICogCVpaWiBob3RwbHVnIG5vdCBzdXBwb3J0ZWQgeWV0Ci0gKi8KLXZvaWQgX19jcHVpbml0IHV2X2NwdV9pbml0KHZvaWQpCi17Ci0JQlVHX09OKCF1dl9zeXN0ZW1faW5pdGVkKTsKLQotCXV2X2JsYWRlX2luZm9bdXZfbnVtYV9ibGFkZV9pZCgpXS5ucl9vbmxpbmVfY3B1cysrOwotCi0JaWYgKGdldF91dl9zeXN0ZW1fdHlwZSgpID09IFVWX05PTl9VTklRVUVfQVBJQykKLQkJc2V0X3gyYXBpY19leHRyYV9iaXRzKHV2X2h1Yl9pbmZvLT5wbm9kZSk7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hwZXQuYyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKaW5kZXggYWNmNjJmYy4uNzcwMTdlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hwZXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCkBAIC0xLDI5ICsxLDQ5IEBACiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2hwZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgotI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CiAjaW5jbHVkZSA8YXNtL2k4MjUzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hwZXQuaD4KIAotI2RlZmluZSBIUEVUX01BU0sJQ0xPQ0tTT1VSQ0VfTUFTSygzMikKLSNkZWZpbmUgSFBFVF9TSElGVAkyMgorI2RlZmluZSBIUEVUX01BU0sJCQlDTE9DS1NPVVJDRV9NQVNLKDMyKQorI2RlZmluZSBIUEVUX1NISUZUCQkJMjIKIAogLyogRlNFQyA9IDEwXi0xNQogICAgTlNFQyA9IDEwXi05ICovCi0jZGVmaW5lIEZTRUNfUEVSX05TRUMJMTAwMDAwMEwKKyNkZWZpbmUgRlNFQ19QRVJfTlNFQwkJCTEwMDAwMDBMCisKKyNkZWZpbmUgSFBFVF9ERVZfVVNFRF9CSVQJCTIKKyNkZWZpbmUgSFBFVF9ERVZfVVNFRAkJCSgxIDw8IEhQRVRfREVWX1VTRURfQklUKQorI2RlZmluZSBIUEVUX0RFVl9WQUxJRAkJCTB4OAorI2RlZmluZSBIUEVUX0RFVl9GU0JfQ0FQCQkweDEwMDAKKyNkZWZpbmUgSFBFVF9ERVZfUEVSSV9DQVAJCTB4MjAwMAorCisjZGVmaW5lIEVWVF9UT19IUEVUX0RFVihldnQpIGNvbnRhaW5lcl9vZihldnQsIHN0cnVjdCBocGV0X2RldiwgZXZ0KQogCiAvKgogICogSFBFVCBhZGRyZXNzIGlzIHNldCBpbiBhY3BpL2Jvb3QuYywgd2hlbiBhbiBBQ1BJIGVudHJ5IGV4aXN0cwogICovCi11bnNpZ25lZCBsb25nIGhwZXRfYWRkcmVzczsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKmhwZXRfdmlydF9hZGRyZXNzOwordW5zaWduZWQgbG9uZwkJCQlocGV0X2FkZHJlc3M7Cit1bnNpZ25lZCBsb25nCQkJCWhwZXRfbnVtX3RpbWVyczsKK3N0YXRpYyB2b2lkIF9faW9tZW0JCQkqaHBldF92aXJ0X2FkZHJlc3M7CisKK3N0cnVjdCBocGV0X2RldiB7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZQlldnQ7CisJdW5zaWduZWQgaW50CQkJbnVtOworCWludAkJCQljcHU7CisJdW5zaWduZWQgaW50CQkJaXJxOworCXVuc2lnbmVkIGludAkJCWZsYWdzOworCWNoYXIJCQkJbmFtZVsxMF07Cit9OwogCiB1bnNpZ25lZCBsb25nIGhwZXRfcmVhZGwodW5zaWduZWQgbG9uZyBhKQogewpAQCAtNTksNyArNzksNyBAQAogc3RhdGljIGludCBib290X2hwZXRfZGlzYWJsZTsKIGludCBocGV0X2ZvcmNlX3VzZXI7CiAKLXN0YXRpYyBpbnQgX19pbml0IGhwZXRfc2V0dXAoY2hhciogc3RyKQorc3RhdGljIGludCBfX2luaXQgaHBldF9zZXR1cChjaGFyICpzdHIpCiB7CiAJaWYgKHN0cikgewogCQlpZiAoIXN0cm5jbXAoImRpc2FibGUiLCBzdHIsIDcpKQpAQCAtODAsNyArMTAwLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaXNfaHBldF9jYXBhYmxlKHZvaWQpCiB7Ci0JcmV0dXJuICghYm9vdF9ocGV0X2Rpc2FibGUgJiYgaHBldF9hZGRyZXNzKTsKKwlyZXR1cm4gIWJvb3RfaHBldF9kaXNhYmxlICYmIGhwZXRfYWRkcmVzczsKIH0KIAogLyoKQEAgLTEwMiw2ICsxMjIsOSBAQAogICogdGltZXIgMCBhbmQgdGltZXIgMSBpbiBjYXNlIG9mIFJUQyBlbXVsYXRpb24uCiAgKi8KICNpZmRlZiBDT05GSUdfSFBFVAorCitzdGF0aWMgdm9pZCBocGV0X3Jlc2VydmVfbXNpX3RpbWVycyhzdHJ1Y3QgaHBldF9kYXRhICpoZCk7CisKIHN0YXRpYyB2b2lkIGhwZXRfcmVzZXJ2ZV9wbGF0Zm9ybV90aW1lcnModW5zaWduZWQgbG9uZyBpZCkKIHsKIAlzdHJ1Y3QgaHBldCBfX2lvbWVtICpocGV0ID0gaHBldF92aXJ0X2FkZHJlc3M7CkBAIC0xMTEsMTAgKzEzNCwxMCBAQAogCiAJbnJ0aW1lcnMgPSAoKGlkICYgSFBFVF9JRF9OVU1CRVIpID4+IEhQRVRfSURfTlVNQkVSX1NISUZUKSArIDE7CiAKLQltZW1zZXQoJmhkLCAwLCBzaXplb2YgKGhkKSk7Ci0JaGQuaGRfcGh5c19hZGRyZXNzID0gaHBldF9hZGRyZXNzOwotCWhkLmhkX2FkZHJlc3MgPSBocGV0OwotCWhkLmhkX25pcnFzID0gbnJ0aW1lcnM7CisJbWVtc2V0KCZoZCwgMCwgc2l6ZW9mKGhkKSk7CisJaGQuaGRfcGh5c19hZGRyZXNzCT0gaHBldF9hZGRyZXNzOworCWhkLmhkX2FkZHJlc3MJCT0gaHBldDsKKwloZC5oZF9uaXJxcwkJPSBucnRpbWVyczsKIAlocGV0X3Jlc2VydmVfdGltZXIoJmhkLCAwKTsKIAogI2lmZGVmIENPTkZJR19IUEVUX0VNVUxBVEVfUlRDCkBAIC0xMzAsMTAgKzE1MywxMiBAQAogCWhkLmhkX2lycVsxXSA9IEhQRVRfTEVHQUNZX1JUQzsKIAogCWZvciAoaSA9IDI7IGkgPCBucnRpbWVyczsgdGltZXIrKywgaSsrKSB7Ci0JCWhkLmhkX2lycVtpXSA9IChyZWFkbCgmdGltZXItPmhwZXRfY29uZmlnKSAmIFRuX0lOVF9ST1VURV9DTkZfTUFTSykgPj4KLQkJCVRuX0lOVF9ST1VURV9DTkZfU0hJRlQ7CisJCWhkLmhkX2lycVtpXSA9IChyZWFkbCgmdGltZXItPmhwZXRfY29uZmlnKSAmCisJCQlUbl9JTlRfUk9VVEVfQ05GX01BU0spID4+IFRuX0lOVF9ST1VURV9DTkZfU0hJRlQ7CiAJfQogCisJaHBldF9yZXNlcnZlX21zaV90aW1lcnMoJmhkKTsKKwogCWhwZXRfYWxsb2MoJmhkKTsKIAogfQpAQCAtMjI3LDYwICsyNTIsNzAgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiaHBldCBjbG9ja2V2ZW50IHJlZ2lzdGVyZWRcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBocGV0X2xlZ2FjeV9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKLQkJCSAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQorc3RhdGljIGludCBocGV0X3NldHVwX21zaV9pcnEodW5zaWduZWQgaW50IGlycSk7CisKK3N0YXRpYyB2b2lkIGhwZXRfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCwgaW50IHRpbWVyKQogewogCXVuc2lnbmVkIGxvbmcgY2ZnLCBjbXAsIG5vdzsKIAl1aW50NjRfdCBkZWx0YTsKIAotCXN3aXRjaChtb2RlKSB7CisJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKLQkJZGVsdGEgPSAoKHVpbnQ2NF90KShOU0VDX1BFUl9TRUMvSFopKSAqIGhwZXRfY2xvY2tldmVudC5tdWx0OwotCQlkZWx0YSA+Pj0gaHBldF9jbG9ja2V2ZW50LnNoaWZ0OworCQlkZWx0YSA9ICgodWludDY0X3QpKE5TRUNfUEVSX1NFQy9IWikpICogZXZ0LT5tdWx0OworCQlkZWx0YSA+Pj0gZXZ0LT5zaGlmdDsKIAkJbm93ID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOwogCQljbXAgPSBub3cgKyAodW5zaWduZWQgbG9uZykgZGVsdGE7Ci0JCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9UMF9DRkcpOworCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKHRpbWVyKSk7CiAJCWNmZyB8PSBIUEVUX1ROX0VOQUJMRSB8IEhQRVRfVE5fUEVSSU9ESUMgfAogCQkgICAgICAgSFBFVF9UTl9TRVRWQUwgfCBIUEVUX1ROXzMyQklUOwotCQlocGV0X3dyaXRlbChjZmcsIEhQRVRfVDBfQ0ZHKTsKKwkJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1RuX0NGRyh0aW1lcikpOwogCQkvKgogCQkgKiBUaGUgZmlyc3Qgd3JpdGUgYWZ0ZXIgd3JpdGluZyBUTl9TRVRWQUwgdG8gdGhlCiAJCSAqIGNvbmZpZyByZWdpc3RlciBzZXRzIHRoZSBjb3VudGVyIHZhbHVlLCB0aGUgc2Vjb25kCiAJCSAqIHdyaXRlIHNldHMgdGhlIHBlcmlvZC4KIAkJICovCi0JCWhwZXRfd3JpdGVsKGNtcCwgSFBFVF9UMF9DTVApOworCQlocGV0X3dyaXRlbChjbXAsIEhQRVRfVG5fQ01QKHRpbWVyKSk7CiAJCXVkZWxheSgxKTsKLQkJaHBldF93cml0ZWwoKHVuc2lnbmVkIGxvbmcpIGRlbHRhLCBIUEVUX1QwX0NNUCk7CisJCWhwZXRfd3JpdGVsKCh1bnNpZ25lZCBsb25nKSBkZWx0YSwgSFBFVF9Ubl9DTVAodGltZXIpKTsKIAkJYnJlYWs7CiAKIAljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6Ci0JCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9UMF9DRkcpOworCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKHRpbWVyKSk7CiAJCWNmZyAmPSB+SFBFVF9UTl9QRVJJT0RJQzsKIAkJY2ZnIHw9IEhQRVRfVE5fRU5BQkxFIHwgSFBFVF9UTl8zMkJJVDsKLQkJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1QwX0NGRyk7CisJCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9Ubl9DRkcodGltZXIpKTsKIAkJYnJlYWs7CiAKIAljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKIAljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgotCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVDBfQ0ZHKTsKKwkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyh0aW1lcikpOwogCQljZmcgJj0gfkhQRVRfVE5fRU5BQkxFOwotCQlocGV0X3dyaXRlbChjZmcsIEhQRVRfVDBfQ0ZHKTsKKwkJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1RuX0NGRyh0aW1lcikpOwogCQlicmVhazsKIAogCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgotCQlocGV0X2VuYWJsZV9sZWdhY3lfaW50KCk7CisJCWlmICh0aW1lciA9PSAwKSB7CisJCQlocGV0X2VuYWJsZV9sZWdhY3lfaW50KCk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSBFVlRfVE9fSFBFVF9ERVYoZXZ0KTsKKwkJCWhwZXRfc2V0dXBfbXNpX2lycShoZGV2LT5pcnEpOworCQkJZGlzYWJsZV9pcnEoaGRldi0+aXJxKTsKKwkJCWlycV9zZXRfYWZmaW5pdHkoaGRldi0+aXJxLCBjcHVtYXNrX29mX2NwdShoZGV2LT5jcHUpKTsKKwkJCWVuYWJsZV9pcnEoaGRldi0+aXJxKTsKKwkJfQogCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgaHBldF9sZWdhY3lfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAotCQkJCSAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQorc3RhdGljIGludCBocGV0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCSAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCwgaW50IHRpbWVyKQogewogCXUzMiBjbnQ7CiAKIAljbnQgPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUik7CiAJY250ICs9ICh1MzIpIGRlbHRhOwotCWhwZXRfd3JpdGVsKGNudCwgSFBFVF9UMF9DTVApOworCWhwZXRfd3JpdGVsKGNudCwgSFBFVF9Ubl9DTVAodGltZXIpKTsKIAogCS8qCiAJICogV2UgbmVlZCB0byByZWFkIGJhY2sgdGhlIENNUCByZWdpc3RlciB0byBtYWtlIHN1cmUgdGhhdApAQCAtMjkyLDYgKzMyNywzNDcgQEAKIAlyZXR1cm4gKHMzMikoKHUzMilocGV0X3JlYWRsKEhQRVRfQ09VTlRFUikgLSBjbnQpID49IDAgPyAtRVRJTUUgOiAwOwogfQogCitzdGF0aWMgdm9pZCBocGV0X2xlZ2FjeV9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlocGV0X3NldF9tb2RlKG1vZGUsIGV2dCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaHBldF9sZWdhY3lfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAorCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXJldHVybiBocGV0X25leHRfZXZlbnQoZGVsdGEsIGV2dCwgMCk7Cit9CisKKy8qCisgKiBIUEVUIE1TSSBTdXBwb3J0CisgKi8KKyNpZmRlZiBDT05GSUdfUENJX01TSQorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGhwZXRfZGV2ICosIGNwdV9ocGV0X2Rldik7CitzdGF0aWMgc3RydWN0IGhwZXRfZGV2CSpocGV0X2RldnM7CisKK3ZvaWQgaHBldF9tc2lfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gZ2V0X2lycV9kYXRhKGlycSk7CisJdW5zaWduZWQgbG9uZyBjZmc7CisKKwkvKiB1bm1hc2sgaXQgKi8KKwljZmcgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKGhkZXYtPm51bSkpOworCWNmZyB8PSBIUEVUX1ROX0ZTQjsKKwlocGV0X3dyaXRlbChjZmcsIEhQRVRfVG5fQ0ZHKGhkZXYtPm51bSkpOworfQorCit2b2lkIGhwZXRfbXNpX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGNmZzsKKwlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKworCS8qIG1hc2sgaXQgKi8KKwljZmcgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKGhkZXYtPm51bSkpOworCWNmZyAmPSB+SFBFVF9UTl9GU0I7CisJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1RuX0NGRyhoZGV2LT5udW0pKTsKK30KKwordm9pZCBocGV0X21zaV93cml0ZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXN0cnVjdCBocGV0X2RldiAqaGRldiA9IGdldF9pcnFfZGF0YShpcnEpOworCisJaHBldF93cml0ZWwobXNnLT5kYXRhLCBIUEVUX1RuX1JPVVRFKGhkZXYtPm51bSkpOworCWhwZXRfd3JpdGVsKG1zZy0+YWRkcmVzc19sbywgSFBFVF9Ubl9ST1VURShoZGV2LT5udW0pICsgNCk7Cit9CisKK3ZvaWQgaHBldF9tc2lfcmVhZCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXN0cnVjdCBocGV0X2RldiAqaGRldiA9IGdldF9pcnFfZGF0YShpcnEpOworCisJbXNnLT5kYXRhID0gaHBldF9yZWFkbChIUEVUX1RuX1JPVVRFKGhkZXYtPm51bSkpOworCW1zZy0+YWRkcmVzc19sbyA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9ST1VURShoZGV2LT5udW0pICsgNCk7CisJbXNnLT5hZGRyZXNzX2hpID0gMDsKK30KKworc3RhdGljIHZvaWQgaHBldF9tc2lfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXN0cnVjdCBocGV0X2RldiAqaGRldiA9IEVWVF9UT19IUEVUX0RFVihldnQpOworCWhwZXRfc2V0X21vZGUobW9kZSwgZXZ0LCBoZGV2LT5udW0pOworfQorCitzdGF0aWMgaW50IGhwZXRfbXNpX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gRVZUX1RPX0hQRVRfREVWKGV2dCk7CisJcmV0dXJuIGhwZXRfbmV4dF9ldmVudChkZWx0YSwgZXZ0LCBoZGV2LT5udW0pOworfQorCitzdGF0aWMgaW50IGhwZXRfc2V0dXBfbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmIChhcmNoX3NldHVwX2hwZXRfbXNpKGlycSkpIHsKKwkJZGVzdHJveV9pcnEoaXJxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhwZXRfYXNzaWduX2lycShzdHJ1Y3QgaHBldF9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaXJxID0gY3JlYXRlX2lycSgpOworCWlmICghaXJxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNldF9pcnFfZGF0YShpcnEsIGRldik7CisKKwlpZiAoaHBldF9zZXR1cF9tc2lfaXJxKGlycSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2LT5pcnEgPSBpcnE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBocGV0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGhwZXRfZGV2ICpkZXYgPSAoc3RydWN0IGhwZXRfZGV2ICopZGF0YTsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpoZXZ0ID0gJmRldi0+ZXZ0OworCisJaWYgKCFoZXZ0LT5ldmVudF9oYW5kbGVyKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlNwdXJpb3VzIEhQRVQgdGltZXIgaW50ZXJydXB0IG9uIEhQRVQgdGltZXIgJWRcbiIsCisJCQkJZGV2LT5udW0pOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaGV2dC0+ZXZlbnRfaGFuZGxlcihoZXZ0KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgaHBldF9zZXR1cF9pcnEoc3RydWN0IGhwZXRfZGV2ICpkZXYpCit7CisKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGhwZXRfaW50ZXJydXB0X2hhbmRsZXIsCisJCQlJUlFGX1NIQVJFRHxJUlFGX05PQkFMQU5DSU5HLCBkZXYtPm5hbWUsIGRldikpCisJCXJldHVybiAtMTsKKworCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwlpcnFfc2V0X2FmZmluaXR5KGRldi0+aXJxLCBjcHVtYXNrX29mX2NwdShkZXYtPmNwdSkpOworCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworCisJcHJpbnRrKEtFUk5fREVCVUcgImhwZXQ6ICVzIGlycSAlZCBmb3IgTVNJXG4iLAorCQkJIGRldi0+bmFtZSwgZGV2LT5pcnEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBpbiBzcGVjaWZpYyBAY3B1ICovCitzdGF0aWMgdm9pZCBpbml0X29uZV9ocGV0X21zaV9jbG9ja2V2ZW50KHN0cnVjdCBocGV0X2RldiAqaGRldiwgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmaGRldi0+ZXZ0OworCXVpbnQ2NF90IGhwZXRfZnJlcTsKKworCVdBUk5fT04oY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJaWYgKCEoaGRldi0+ZmxhZ3MgJiBIUEVUX0RFVl9WQUxJRCkpCisJCXJldHVybjsKKworCWlmIChocGV0X3NldHVwX21zaV9pcnEoaGRldi0+aXJxKSkKKwkJcmV0dXJuOworCisJaGRldi0+Y3B1ID0gY3B1OworCXBlcl9jcHUoY3B1X2hwZXRfZGV2LCBjcHUpID0gaGRldjsKKwlldnQtPm5hbWUgPSBoZGV2LT5uYW1lOworCWhwZXRfc2V0dXBfaXJxKGhkZXYpOworCWV2dC0+aXJxID0gaGRldi0+aXJxOworCisJZXZ0LT5yYXRpbmcgPSAxMTA7CisJZXZ0LT5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX09ORVNIT1Q7CisJaWYgKGhkZXYtPmZsYWdzICYgSFBFVF9ERVZfUEVSSV9DQVApCisJCWV2dC0+ZmVhdHVyZXMgfD0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUM7CisKKwlldnQtPnNldF9tb2RlID0gaHBldF9tc2lfc2V0X21vZGU7CisJZXZ0LT5zZXRfbmV4dF9ldmVudCA9IGhwZXRfbXNpX25leHRfZXZlbnQ7CisJZXZ0LT5zaGlmdCA9IDMyOworCisJLyoKKwkgKiBUaGUgcGVyaW9kIGlzIGEgZmVtdG8gc2Vjb25kcyB2YWx1ZS4gV2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlCisJICogc2NhbGVkIG1hdGggbXVsdGlwbGljYXRpb24gZmFjdG9yIGZvciBuYW5vc2Vjb25kIHRvIGhwZXQgdGljaworCSAqIGNvbnZlcnNpb24uCisJICovCisJaHBldF9mcmVxID0gMTAwMDAwMDAwMDAwMDAwMFVMTDsKKwlkb19kaXYoaHBldF9mcmVxLCBocGV0X3BlcmlvZCk7CisJZXZ0LT5tdWx0ID0gZGl2X3NjKCh1bnNpZ25lZCBsb25nKSBocGV0X2ZyZXEsCisJCQkJICAgICAgTlNFQ19QRVJfU0VDLCBldnQtPnNoaWZ0KTsKKwkvKiBDYWxjdWxhdGUgdGhlIG1heCBkZWx0YSAqLworCWV2dC0+bWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweDdGRkZGRkZGLCBldnQpOworCS8qIDUgdXNlYyBtaW5pbXVtIHJlcHJvZ3JhbW1pbmcgZGVsdGEuICovCisJZXZ0LT5taW5fZGVsdGFfbnMgPSA1MDAwOworCisJZXZ0LT5jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoaGRldi0+Y3B1KTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoZXZ0KTsKK30KKworI2lmZGVmIENPTkZJR19IUEVUCisvKiBSZXNlcnZlIGF0IGxlYXN0IG9uZSB0aW1lciBmb3IgdXNlcnNwYWNlICgvZGV2L2hwZXQpICovCisjZGVmaW5lIFJFU0VSVkVfVElNRVJTIDEKKyNlbHNlCisjZGVmaW5lIFJFU0VSVkVfVElNRVJTIDAKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBocGV0X21zaV9jYXBhYmlsaXR5X2xvb2t1cCh1bnNpZ25lZCBpbnQgc3RhcnRfdGltZXIpCit7CisJdW5zaWduZWQgaW50IGlkOworCXVuc2lnbmVkIGludCBudW1fdGltZXJzOworCXVuc2lnbmVkIGludCBudW1fdGltZXJzX3VzZWQgPSAwOworCWludCBpOworCisJaWQgPSBocGV0X3JlYWRsKEhQRVRfSUQpOworCisJbnVtX3RpbWVycyA9ICgoaWQgJiBIUEVUX0lEX05VTUJFUikgPj4gSFBFVF9JRF9OVU1CRVJfU0hJRlQpOworCW51bV90aW1lcnMrKzsgLyogVmFsdWUgcmVhZCBvdXQgc3RhcnRzIGZyb20gMCAqLworCisJaHBldF9kZXZzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhwZXRfZGV2KSAqIG51bV90aW1lcnMsIEdGUF9LRVJORUwpOworCWlmICghaHBldF9kZXZzKQorCQlyZXR1cm47CisKKwlocGV0X251bV90aW1lcnMgPSBudW1fdGltZXJzOworCisJZm9yIChpID0gc3RhcnRfdGltZXI7IGkgPCBudW1fdGltZXJzIC0gUkVTRVJWRV9USU1FUlM7IGkrKykgeworCQlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSAmaHBldF9kZXZzW251bV90aW1lcnNfdXNlZF07CisJCXVuc2lnbmVkIGxvbmcgY2ZnID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyhpKSk7CisKKwkJLyogT25seSBjb25zaWRlciBIUEVUIHRpbWVyIHdpdGggTVNJIHN1cHBvcnQgKi8KKwkJaWYgKCEoY2ZnICYgSFBFVF9UTl9GU0JfQ0FQKSkKKwkJCWNvbnRpbnVlOworCisJCWhkZXYtPmZsYWdzID0gMDsKKwkJaWYgKGNmZyAmIEhQRVRfVE5fUEVSSU9ESUNfQ0FQKQorCQkJaGRldi0+ZmxhZ3MgfD0gSFBFVF9ERVZfUEVSSV9DQVA7CisJCWhkZXYtPm51bSA9IGk7CisKKwkJc3ByaW50ZihoZGV2LT5uYW1lLCAiaHBldCVkIiwgaSk7CisJCWlmIChocGV0X2Fzc2lnbl9pcnEoaGRldikpCisJCQljb250aW51ZTsKKworCQloZGV2LT5mbGFncyB8PSBIUEVUX0RFVl9GU0JfQ0FQOworCQloZGV2LT5mbGFncyB8PSBIUEVUX0RFVl9WQUxJRDsKKwkJbnVtX3RpbWVyc191c2VkKys7CisJCWlmIChudW1fdGltZXJzX3VzZWQgPT0gbnVtX3Bvc3NpYmxlX2NwdXMoKSkKKwkJCWJyZWFrOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIkhQRVQ6ICVkIHRpbWVycyBpbiB0b3RhbCwgJWQgdGltZXJzIHdpbGwgYmUgdXNlZCBmb3IgcGVyLWNwdSB0aW1lclxuIiwKKwkJbnVtX3RpbWVycywgbnVtX3RpbWVyc191c2VkKTsKK30KKworI2lmZGVmIENPTkZJR19IUEVUCitzdGF0aWMgdm9pZCBocGV0X3Jlc2VydmVfbXNpX3RpbWVycyhzdHJ1Y3QgaHBldF9kYXRhICpoZCkKK3sKKwlpbnQgaTsKKworCWlmICghaHBldF9kZXZzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgaHBldF9udW1fdGltZXJzOyBpKyspIHsKKwkJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gJmhwZXRfZGV2c1tpXTsKKworCQlpZiAoIShoZGV2LT5mbGFncyAmIEhQRVRfREVWX1ZBTElEKSkKKwkJCWNvbnRpbnVlOworCisJCWhkLT5oZF9pcnFbaGRldi0+bnVtXSA9IGhkZXYtPmlycTsKKwkJaHBldF9yZXNlcnZlX3RpbWVyKGhkLCBoZGV2LT5udW0pOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGhwZXRfZGV2ICpocGV0X2dldF91bnVzZWRfdGltZXIodm9pZCkKK3sKKwlpbnQgaTsKKworCWlmICghaHBldF9kZXZzKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBocGV0X251bV90aW1lcnM7IGkrKykgeworCQlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSAmaHBldF9kZXZzW2ldOworCisJCWlmICghKGhkZXYtPmZsYWdzICYgSFBFVF9ERVZfVkFMSUQpKQorCQkJY29udGludWU7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KEhQRVRfREVWX1VTRURfQklULAorCQkJKHVuc2lnbmVkIGxvbmcgKikmaGRldi0+ZmxhZ3MpKQorCQkJY29udGludWU7CisJCXJldHVybiBoZGV2OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IGhwZXRfd29ya19zdHJ1Y3QgeworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0ZTsKK307CisKK3N0YXRpYyB2b2lkIGhwZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCit7CisJc3RydWN0IGhwZXRfZGV2ICpoZGV2OworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IGhwZXRfd29ya19zdHJ1Y3QgKmhwZXRfd29yazsKKworCWhwZXRfd29yayA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgaHBldF93b3JrX3N0cnVjdCwgd29yay53b3JrKTsKKworCWhkZXYgPSBocGV0X2dldF91bnVzZWRfdGltZXIoKTsKKwlpZiAoaGRldikKKwkJaW5pdF9vbmVfaHBldF9tc2lfY2xvY2tldmVudChoZGV2LCBjcHUpOworCisJY29tcGxldGUoJmhwZXRfd29yay0+Y29tcGxldGUpOworfQorCitzdGF0aWMgaW50IGhwZXRfY3B1aHBfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwKKwkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJdW5zaWduZWQgbG9uZyBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OworCXN0cnVjdCBocGV0X3dvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gcGVyX2NwdShjcHVfaHBldF9kZXYsIGNwdSk7CisKKwlzd2l0Y2ggKGFjdGlvbiAmIDB4ZikgeworCWNhc2UgQ1BVX09OTElORToKKwkJSU5JVF9ERUxBWUVEX1dPUksoJndvcmsud29yaywgaHBldF93b3JrKTsKKwkJaW5pdF9jb21wbGV0aW9uKCZ3b3JrLmNvbXBsZXRlKTsKKwkJLyogRklYTUU6IGFkZCBzY2hlZHVsZV93b3JrX29uKCkgKi8KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGNwdSwgJndvcmsud29yaywgMCk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJndvcmsuY29tcGxldGUpOworCQlicmVhazsKKwljYXNlIENQVV9ERUFEOgorCQlpZiAoaGRldikgeworCQkJZnJlZV9pcnEoaGRldi0+aXJxLCBoZGV2KTsKKwkJCWhkZXYtPmZsYWdzICY9IH5IUEVUX0RFVl9VU0VEOworCQkJcGVyX2NwdShjcHVfaHBldF9kZXYsIGNwdSkgPSBOVUxMOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gTk9USUZZX09LOworfQorI2Vsc2UKKworc3RhdGljIGludCBocGV0X3NldHVwX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIGhwZXRfbXNpX2NhcGFiaWxpdHlfbG9va3VwKHVuc2lnbmVkIGludCBzdGFydF90aW1lcikKK3sKKwlyZXR1cm47Cit9CisKKyNpZmRlZiBDT05GSUdfSFBFVAorc3RhdGljIHZvaWQgaHBldF9yZXNlcnZlX21zaV90aW1lcnMoc3RydWN0IGhwZXRfZGF0YSAqaGQpCit7CisJcmV0dXJuOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaHBldF9jcHVocF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuLAorCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwlyZXR1cm4gTk9USUZZX09LOworfQorCisjZW5kaWYKKwogLyoKICAqIENsb2NrIHNvdXJjZSByZWxhdGVkIGNvZGUKICAqLwpAQCAtNDI3LDggKzgwMywxMCBAQAogCiAJaWYgKGlkICYgSFBFVF9JRF9MRUdTVVApIHsKIAkJaHBldF9sZWdhY3lfY2xvY2tldmVudF9yZWdpc3RlcigpOworCQlocGV0X21zaV9jYXBhYmlsaXR5X2xvb2t1cCgyKTsKIAkJcmV0dXJuIDE7CiAJfQorCWhwZXRfbXNpX2NhcGFiaWxpdHlfbG9va3VwKDApOwogCXJldHVybiAwOwogCiBvdXRfbm9ocGV0OgpAQCAtNDQ1LDYgKzgyMyw4IEBACiAgKi8KIHN0YXRpYyBfX2luaXQgaW50IGhwZXRfbGF0ZV9pbml0KHZvaWQpCiB7CisJaW50IGNwdTsKKwogCWlmIChib290X2hwZXRfZGlzYWJsZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTQ2MCw2ICs4NDAsMTMgQEAKIAogCWhwZXRfcmVzZXJ2ZV9wbGF0Zm9ybV90aW1lcnMoaHBldF9yZWFkbChIUEVUX0lEKSk7CiAKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlocGV0X2NwdWhwX25vdGlmeShOVUxMLCBDUFVfT05MSU5FLCAodm9pZCAqKShsb25nKWNwdSk7CisJfQorCisJLyogVGhpcyBub3RpZmllciBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHdvcmtxdWV1ZSBpcyByZWFkeSAqLworCWhvdGNwdV9ub3RpZmllcihocGV0X2NwdWhwX25vdGlmeSwgLTIwKTsKKwogCXJldHVybiAwOwogfQogZnNfaW5pdGNhbGwoaHBldF9sYXRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9pb19hcGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc2NGQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pb19hcGljLmMKQEAgLTAsMCArMSwzODk2IEBACisvKgorICoJSW50ZWwgSU8tQVBJQyBzdXBwb3J0IGZvciBtdWx0aS1QZW50aXVtIGhvc3RzLgorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCBJbmdvIE1vbG5hciwgSGFqbmFsa2EgU3phYm8KKyAqCisgKglNYW55IHRoYW5rcyB0byBTdGlnIFZlbmFhcyBmb3IgdHJ5aW5nIG91dCBjb3VudGxlc3MgZXhwZXJpbWVudGFsCisgKglwYXRjaGVzIGFuZCByZXBvcnRpbmcvZGVidWdnaW5nIHByb2JsZW1zIHBhdGllbnRseSEKKyAqCisgKgkoYykgMTk5OSwgTXVsdGlwbGUgSU8tQVBJQyBzdXBwb3J0LCBkZXZlbG9wZWQgYnkKKyAqCUtlbi1pY2hpIFlha3UgPHlha3VAY3NzMS5rYm5lcy5uZWMuY28uanA+IGFuZAorICogICAgICBIaWRlbWkgS2lzaGltb3RvIDxraXNpbW90b0Bjc3MxLmtibmVzLm5lYy5jby5qcD4sCisgKglmdXJ0aGVyIHRlc3RlZCBhbmQgY2xlYW5lZCB1cCBieSBaYWNoIEJyb3duIDx6YWJAcmVkaGF0LmNvbT4KKyAqCWFuZCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqCisgKglGaXhlcworICoJTWFjaWVqIFcuIFJvenlja2kJOglCaXRzIGZvciBnZW51aW5lIDgyNDg5RFggQVBJQ3M7CisgKgkJCQkJdGhhbmtzIHRvIEVyaWMgR2lsbW9yZQorICoJCQkJCWFuZCBSb2xmIEcuIFRld3MKKyAqCQkJCQlmb3IgdGVzdGluZyB0aGVzZSBleHRlbnNpdmVseQorICoJUGF1bCBEaWVmZW5iYXVnaAk6CUFkZGVkIGZ1bGwgQUNQSSBzdXBwb3J0CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorI2luY2x1ZGUgPGxpbnV4L2h0aXJxLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CS8qIHRpbWVfYWZ0ZXIoKSAqLworI2lmZGVmIENPTkZJR19BQ1BJCisjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ocGV0Lmg+CisKKyNpbmNsdWRlIDxhc20vaWRsZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS9hY3BpLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9pODI1OS5oPgorI2luY2x1ZGUgPGFzbS9ubWkuaD4KKyNpbmNsdWRlIDxhc20vbXNpZGVmLmg+CisjaW5jbHVkZSA8YXNtL2h5cGVydHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2lycV9yZW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vaHBldC5oPgorI2luY2x1ZGUgPGFzbS91di91dl9odWIuaD4KKyNpbmNsdWRlIDxhc20vdXYvdXZfaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoX2lwaS5oPgorI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgorI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgorCisjZGVmaW5lIF9fYXBpY2RlYnVnaW5pdCh0eXBlKSBzdGF0aWMgdHlwZSBfX2luaXQKKworLyoKKyAqICAgICAgSXMgdGhlIFNpUyBBUElDIHJtdyBidWcgcHJlc2VudCA/CisgKiAgICAgIC0xID0gZG9uJ3Qga25vdywgMCA9IG5vLCAxID0geWVzCisgKi8KK2ludCBzaXNfYXBpY19idWcgPSAtMTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhpb2FwaWNfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZlY3Rvcl9sb2NrKTsKKworLyoKKyAqICMgb2YgSVJRIHJvdXRpbmcgcmVnaXN0ZXJzCisgKi8KK2ludCBucl9pb2FwaWNfcmVnaXN0ZXJzW01BWF9JT19BUElDU107CisKKy8qIEkvTyBBUElDIGVudHJpZXMgKi8KK3N0cnVjdCBtcF9jb25maWdfaW9hcGljIG1wX2lvYXBpY3NbTUFYX0lPX0FQSUNTXTsKK2ludCBucl9pb2FwaWNzOworCisvKiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KK3N0cnVjdCBtcF9jb25maWdfaW50c3JjIG1wX2lycXNbTUFYX0lSUV9TT1VSQ0VTXTsKKworLyogIyBvZiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KK2ludCBtcF9pcnFfZW50cmllczsKKworI2lmIGRlZmluZWQgKENPTkZJR19NQ0EpIHx8IGRlZmluZWQgKENPTkZJR19FSVNBKQoraW50IG1wX2J1c19pZF90b190eXBlW01BWF9NUF9CVVNTRVNdOworI2VuZGlmCisKK0RFQ0xBUkVfQklUTUFQKG1wX2J1c19ub3RfcGNpLCBNQVhfTVBfQlVTU0VTKTsKKworaW50IHNraXBfaW9hcGljX3NldHVwOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9ub2FwaWMoY2hhciAqc3RyKQoreworCS8qIGRpc2FibGUgSU8tQVBJQyAqLworCWRpc2FibGVfaW9hcGljX3NldHVwKCk7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibm9hcGljIiwgcGFyc2Vfbm9hcGljKTsKKworc3RydWN0IGlycV9waW5fbGlzdDsKK3N0cnVjdCBpcnFfY2ZnIHsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXN0cnVjdCBpcnFfcGluX2xpc3QgKmlycV8yX3BpbjsKKwljcHVtYXNrX3QgZG9tYWluOworCWNwdW1hc2tfdCBvbGRfZG9tYWluOworCXVuc2lnbmVkIG1vdmVfY2xlYW51cF9jb3VudDsKKwl1OCB2ZWN0b3I7CisJdTggbW92ZV9pbl9wcm9ncmVzcyA6IDE7Cit9OworCisvKiBpcnFfY2ZnIGlzIGluZGV4ZWQgYnkgdGhlIHN1bSBvZiBhbGwgUlRFcyBpbiBhbGwgSS9PIEFQSUNzLiAqLworc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmd4W05SX0lSUVNdID0geworCVswXSAgPSB7IC5pcnEgPSAgMCwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTBfVkVDVE9SLCAgfSwKKwlbMV0gID0geyAuaXJxID0gIDEsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExX1ZFQ1RPUiwgIH0sCisJWzJdICA9IHsgLmlycSA9ICAyLCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMl9WRUNUT1IsICB9LAorCVszXSAgPSB7IC5pcnEgPSAgMywgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTNfVkVDVE9SLCAgfSwKKwlbNF0gID0geyAuaXJxID0gIDQsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE0X1ZFQ1RPUiwgIH0sCisJWzVdICA9IHsgLmlycSA9ICA1LCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRNV9WRUNUT1IsICB9LAorCVs2XSAgPSB7IC5pcnEgPSAgNiwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTZfVkVDVE9SLCAgfSwKKwlbN10gID0geyAuaXJxID0gIDcsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE3X1ZFQ1RPUiwgIH0sCisJWzhdICA9IHsgLmlycSA9ICA4LCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJROF9WRUNUT1IsICB9LAorCVs5XSAgPSB7IC5pcnEgPSAgOSwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTlfVkVDVE9SLCAgfSwKKwlbMTBdID0geyAuaXJxID0gMTAsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExMF9WRUNUT1IsIH0sCisJWzExXSA9IHsgLmlycSA9IDExLCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTFfVkVDVE9SLCB9LAorCVsxMl0gPSB7IC5pcnEgPSAxMiwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTEyX1ZFQ1RPUiwgfSwKKwlbMTNdID0geyAuaXJxID0gMTMsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExM19WRUNUT1IsIH0sCisJWzE0XSA9IHsgLmlycSA9IDE0LCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTRfVkVDVE9SLCB9LAorCVsxNV0gPSB7IC5pcnEgPSAxNSwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTE1X1ZFQ1RPUiwgfSwKK307CisKKyNkZWZpbmUgZm9yX2VhY2hfaXJxX2NmZyhpcnEsIGNmZykJCVwKKwlmb3IgKGlycSA9IDAsIGNmZyA9IGlycV9jZmd4OyBpcnEgPCBucl9pcnFzOyBpcnErKywgY2ZnKyspCisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NmZyAqaXJxX2NmZyh1bnNpZ25lZCBpbnQgaXJxKQoreworCXJldHVybiBpcnEgPCBucl9pcnFzID8gaXJxX2NmZ3ggKyBpcnEgOiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jZmcgKmlycV9jZmdfYWxsb2ModW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxX2NmZyhpcnEpOworfQorCisvKgorICogUm91Z2ggZXN0aW1hdGlvbiBvZiBob3cgbWFueSBzaGFyZWQgSVJRcyB0aGVyZSBhcmUsIGNhbiBiZSBjaGFuZ2VkCisgKiBhbnl0aW1lLgorICovCisjZGVmaW5lIE1BWF9QTFVTX1NIQVJFRF9JUlFTIE5SX0lSUVMKKyNkZWZpbmUgUElOX01BUF9TSVpFIChNQVhfUExVU19TSEFSRURfSVJRUyArIE5SX0lSUVMpCisKKy8qCisgKiBUaGlzIGlzIHBlcmZvcm1hbmNlLWNyaXRpY2FsLCB3ZSB3YW50IHRvIGRvIGl0IE8oMSkKKyAqCisgKiB0aGUgaW5kZXhpbmcgb3JkZXIgb2YgdGhpcyBhcnJheSBmYXZvcnMgMToxIG1hcHBpbmdzCisgKiBiZXR3ZWVuIHBpbnMgYW5kIElSUXMuCisgKi8KKworc3RydWN0IGlycV9waW5fbGlzdCB7CisJaW50IGFwaWMsIHBpbjsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBpcnFfcGluX2xpc3QgaXJxXzJfcGluX2hlYWRbUElOX01BUF9TSVpFXTsKK3N0YXRpYyBzdHJ1Y3QgaXJxX3Bpbl9saXN0ICppcnFfMl9waW5fcHRyOworCitzdGF0aWMgdm9pZCBfX2luaXQgaXJxXzJfcGluX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpwaW4gPSBpcnFfMl9waW5faGVhZDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPCBQSU5fTUFQX1NJWkU7IGkrKykKKwkJcGluW2ktMV0ubmV4dCA9ICZwaW5baV07CisKKwlpcnFfMl9waW5fcHRyID0gJnBpblswXTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfcGluX2xpc3QgKmdldF9vbmVfZnJlZV9pcnFfMl9waW4odm9pZCkKK3sKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpwaW4gPSBpcnFfMl9waW5fcHRyOworCisJaWYgKCFwaW4pCisJCXBhbmljKCJjYW4gbm90IGdldCBtb3JlIGlycV8yX3BpblxuIik7CisKKwlpcnFfMl9waW5fcHRyID0gcGluLT5uZXh0OworCXBpbi0+bmV4dCA9IE5VTEw7CisJcmV0dXJuIHBpbjsKK30KKworc3RydWN0IGlvX2FwaWMgeworCXVuc2lnbmVkIGludCBpbmRleDsKKwl1bnNpZ25lZCBpbnQgdW51c2VkWzNdOworCXVuc2lnbmVkIGludCBkYXRhOworfTsKKworc3RhdGljIF9fYXR0cmlidXRlX2NvbnN0X18gc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpY19iYXNlKGludCBpZHgpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikgX19maXhfdG9fdmlydChGSVhfSU9fQVBJQ19CQVNFXzAgKyBpZHgpCisJCSsgKG1wX2lvYXBpY3NbaWR4XS5tcF9hcGljYWRkciAmIH5QQUdFX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19hcGljX3JlYWQodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcpCit7CisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKKwl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOworCXJldHVybiByZWFkbCgmaW9fYXBpYy0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX3dyaXRlKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKKwl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOworCXdyaXRlbCh2YWx1ZSwgJmlvX2FwaWMtPmRhdGEpOworfQorCisvKgorICogUmUtd3JpdGUgYSB2YWx1ZTogdG8gYmUgdXNlZCBmb3IgcmVhZC1tb2RpZnktd3JpdGUKKyAqIGN5Y2xlcyB3aGVyZSB0aGUgcmVhZCBhbHJlYWR5IHNldCB1cCB0aGUgaW5kZXggcmVnaXN0ZXIuCisgKgorICogT2xkZXIgU2lTIEFQSUMgcmVxdWlyZXMgd2UgcmV3cml0ZSB0aGUgaW5kZXggcmVnaXN0ZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfbW9kaWZ5KHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKKworCWlmIChzaXNfYXBpY19idWcpCisJCXdyaXRlbChyZWcsICZpb19hcGljLT5pbmRleCk7CisJd3JpdGVsKHZhbHVlLCAmaW9fYXBpYy0+ZGF0YSk7Cit9CisKK3N0YXRpYyBib29sIGlvX2FwaWNfbGV2ZWxfYWNrX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnKGlycSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwllbnRyeSA9IGNmZy0+aXJxXzJfcGluOworCWZvciAoOzspIHsKKwkJdW5zaWduZWQgaW50IHJlZzsKKwkJaW50IHBpbjsKKworCQlpZiAoIWVudHJ5KQorCQkJYnJlYWs7CisJCXBpbiA9IGVudHJ5LT5waW47CisJCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbioyKTsKKwkJLyogSXMgdGhlIHJlbW90ZSBJUlIgYml0IHNldD8gKi8KKwkJaWYgKHJlZyAmIElPX0FQSUNfUkVESVJfUkVNT1RFX0lSUikgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmICghZW50cnktPm5leHQpCisJCQlicmVhazsKKwkJZW50cnkgPSBlbnRyeS0+bmV4dDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBmYWxzZTsKK30KKwordW5pb24gZW50cnlfdW5pb24geworCXN0cnVjdCB7IHUzMiB3MSwgdzI7IH07CisJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Cit9OworCitzdGF0aWMgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgaW9hcGljX3JlYWRfZW50cnkoaW50IGFwaWMsIGludCBwaW4pCit7CisJdW5pb24gZW50cnlfdW5pb24gZXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlldS53MSA9IGlvX2FwaWNfcmVhZChhcGljLCAweDEwICsgMiAqIHBpbik7CisJZXUudzIgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMSArIDIgKiBwaW4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmV0dXJuIGV1LmVudHJ5OworfQorCisvKgorICogV2hlbiB3ZSB3cml0ZSBhIG5ldyBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGhpZ2gKKyAqIHdvcmQgZmlyc3QhIElmIHRoZSBtYXNrIGJpdCBpbiB0aGUgbG93IHdvcmQgaXMgY2xlYXIsIHdlIHdpbGwgZW5hYmxlCisgKiB0aGUgaW50ZXJydXB0LCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGVudHJ5IGlzIGZ1bGx5IHBvcHVsYXRlZAorICogYmVmb3JlIHRoYXQgaGFwcGVucy4KKyAqLworc3RhdGljIHZvaWQKK19faW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLCBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKQoreworCXVuaW9uIGVudHJ5X3VuaW9uIGV1OworCWV1LmVudHJ5ID0gZTsKKwlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyAyKnBpbiwgZXUudzIpOworCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7Cit9CisKK3N0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCV9faW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFdoZW4gd2UgbWFzayBhbiBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGxvdworICogd29yZCBmaXJzdCwgaW4gb3JkZXIgdG8gc2V0IHRoZSBtYXNrIGJpdCBiZWZvcmUgd2UgY2hhbmdlIHRoZQorICogaGlnaCBiaXRzIQorICovCitzdGF0aWMgdm9pZCBpb2FwaWNfbWFza19lbnRyeShpbnQgYXBpYywgaW50IHBpbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuaW9uIGVudHJ5X3VuaW9uIGV1ID0geyAuZW50cnkubWFzayA9IDEgfTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7CisJaW9fYXBpY193cml0ZShhcGljLCAweDExICsgMipwaW4sIGV1LncyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworfQorCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIHZvaWQgX190YXJnZXRfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGRlc3QsIHU4IHZlY3RvcikKK3sKKwlpbnQgYXBpYywgcGluOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJZW50cnkgPSBjZmctPmlycV8yX3BpbjsKKwlmb3IgKDs7KSB7CisJCXVuc2lnbmVkIGludCByZWc7CisKKwkJaWYgKCFlbnRyeSkKKwkJCWJyZWFrOworCisJCWFwaWMgPSBlbnRyeS0+YXBpYzsKKwkJcGluID0gZW50cnktPnBpbjsKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCQkvKgorCQkgKiBXaXRoIGludGVycnVwdC1yZW1hcHBpbmcsIGRlc3RpbmF0aW9uIGluZm9ybWF0aW9uIGNvbWVzCisJCSAqIGZyb20gaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBlbnRyeS4KKwkJICovCisJCWlmICghaXJxX3JlbWFwcGVkKGlycSkpCisJCQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyBwaW4qMiwgZGVzdCk7CisjZWxzZQorCQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyBwaW4qMiwgZGVzdCk7CisjZW5kaWYKKwkJcmVnID0gaW9fYXBpY19yZWFkKGFwaWMsIDB4MTAgKyBwaW4qMik7CisJCXJlZyAmPSB+SU9fQVBJQ19SRURJUl9WRUNUT1JfTUFTSzsKKwkJcmVnIHw9IHZlY3RvcjsKKwkJaW9fYXBpY19tb2RpZnkoYXBpYywgMHgxMCArIHBpbioyLCByZWcpOworCQlpZiAoIWVudHJ5LT5uZXh0KQorCQkJYnJlYWs7CisJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJfQorfQorCitzdGF0aWMgaW50IGFzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKTsKKworc3RhdGljIHZvaWQgc2V0X2lvYXBpY19hZmZpbml0eV9pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBkZXN0OworCWNwdW1hc2tfdCB0bXA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CisJaWYgKGNwdXNfZW1wdHkodG1wKSkKKwkJcmV0dXJuOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQorCQlyZXR1cm47CisKKwljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKKwlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CisJLyoKKwkgKiBPbmx5IHRoZSBoaWdoIDggYml0cyBhcmUgdmFsaWQuCisJICovCisJZGVzdCA9IFNFVF9BUElDX0xPR0lDQUxfSUQoZGVzdCk7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlfX3RhcmdldF9JT19BUElDX2lycShpcnEsIGRlc3QsIGNmZy0+dmVjdG9yKTsKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKy8qCisgKiBUaGUgY29tbW9uIGNhc2UgaXMgMToxIElSUTwtPnBpbiBtYXBwaW5ncy4gU29tZXRpbWVzIHRoZXJlIGFyZQorICogc2hhcmVkIElTQS1zcGFjZSBJUlFzLCBzbyB3ZSBoYXZlIHRvIHN1cHBvcnQgdGhlbS4gV2UgYXJlIHN1cGVyCisgKiBmYXN0IGluIHRoZSBjb21tb24gY2FzZSwgYW5kIGZhc3QgZm9yIHNoYXJlZCBJU0Etc3BhY2UgSVJRcy4KKyAqLworc3RhdGljIHZvaWQgYWRkX3Bpbl90b19pcnEodW5zaWduZWQgaW50IGlycSwgaW50IGFwaWMsIGludCBwaW4pCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKKworCS8qIGZpcnN0IHRpbWUgdG8gcmVmZXIgaXJxX2NmZywgc28gd2l0aCBuZXcgKi8KKwljZmcgPSBpcnFfY2ZnX2FsbG9jKGlycSk7CisJZW50cnkgPSBjZmctPmlycV8yX3BpbjsKKwlpZiAoIWVudHJ5KSB7CisJCWVudHJ5ID0gZ2V0X29uZV9mcmVlX2lycV8yX3BpbigpOworCQljZmctPmlycV8yX3BpbiA9IGVudHJ5OworCQllbnRyeS0+YXBpYyA9IGFwaWM7CisJCWVudHJ5LT5waW4gPSBwaW47CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSAoZW50cnktPm5leHQpIHsKKwkJLyogbm90IGFnYWluLCBwbGVhc2UgKi8KKwkJaWYgKGVudHJ5LT5hcGljID09IGFwaWMgJiYgZW50cnktPnBpbiA9PSBwaW4pCisJCQlyZXR1cm47CisKKwkJZW50cnkgPSBlbnRyeS0+bmV4dDsKKwl9CisKKwllbnRyeS0+bmV4dCA9IGdldF9vbmVfZnJlZV9pcnFfMl9waW4oKTsKKwllbnRyeSA9IGVudHJ5LT5uZXh0OworCWVudHJ5LT5hcGljID0gYXBpYzsKKwllbnRyeS0+cGluID0gcGluOworfQorCisvKgorICogUmVyb3V0ZSBhbiBJUlEgdG8gYSBkaWZmZXJlbnQgcGluLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcmVwbGFjZV9waW5fYXRfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCQkJICAgICAgaW50IG9sZGFwaWMsIGludCBvbGRwaW4sCisJCQkJICAgICAgaW50IG5ld2FwaWMsIGludCBuZXdwaW4pCit7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcoaXJxKTsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGNmZy0+aXJxXzJfcGluOworCWludCByZXBsYWNlZCA9IDA7CisKKwl3aGlsZSAoZW50cnkpIHsKKwkJaWYgKGVudHJ5LT5hcGljID09IG9sZGFwaWMgJiYgZW50cnktPnBpbiA9PSBvbGRwaW4pIHsKKwkJCWVudHJ5LT5hcGljID0gbmV3YXBpYzsKKwkJCWVudHJ5LT5waW4gPSBuZXdwaW47CisJCQlyZXBsYWNlZCA9IDE7CisJCQkvKiBldmVyeSBvbmUgaXMgZGlmZmVyZW50LCByaWdodD8gKi8KKwkJCWJyZWFrOworCQl9CisJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJfQorCisJLyogd2h5PyBjYWxsIHJlcGxhY2UgYmVmb3JlIGFkZD8gKi8KKwlpZiAoIXJlcGxhY2VkKQorCQlhZGRfcGluX3RvX2lycShpcnEsIG5ld2FwaWMsIG5ld3Bpbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX21vZGlmeV9pcnEodW5zaWduZWQgaW50IGlycSwKKwkJCQlpbnQgbWFza19hbmQsIGludCBtYXNrX29yLAorCQkJCXZvaWQgKCpmaW5hbCkoc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkpKQoreworCWludCBwaW47CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKKworCWNmZyA9IGlycV9jZmcoaXJxKTsKKwlmb3IgKGVudHJ5ID0gY2ZnLT5pcnFfMl9waW47IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gZW50cnktPm5leHQpIHsKKwkJdW5zaWduZWQgaW50IHJlZzsKKwkJcGluID0gZW50cnktPnBpbjsKKwkJcmVnID0gaW9fYXBpY19yZWFkKGVudHJ5LT5hcGljLCAweDEwICsgcGluICogMik7CisJCXJlZyAmPSBtYXNrX2FuZDsKKwkJcmVnIHw9IG1hc2tfb3I7CisJCWlvX2FwaWNfbW9kaWZ5KGVudHJ5LT5hcGljLCAweDEwICsgcGluICogMiwgcmVnKTsKKwkJaWYgKGZpbmFsKQorCQkJZmluYWwoZW50cnkpOworCX0KK30KKworc3RhdGljIHZvaWQgX191bm1hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpb19hcGljX21vZGlmeV9pcnEoaXJxLCB+SU9fQVBJQ19SRURJUl9NQVNLRUQsIDAsIE5VTEwpOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAordm9pZCBpb19hcGljX3N5bmMoc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkpCit7CisJLyoKKwkgKiBTeW5jaHJvbml6ZSB0aGUgSU8tQVBJQyBhbmQgdGhlIENQVSBieSBkb2luZworCSAqIGEgZHVtbXkgcmVhZCBmcm9tIHRoZSBJTy1BUElDCisJICovCisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYzsKKwlpb19hcGljID0gaW9fYXBpY19iYXNlKGVudHJ5LT5hcGljKTsKKwlyZWFkbCgmaW9fYXBpYy0+ZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fbWFza19JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlvX2FwaWNfbW9kaWZ5X2lycShpcnEsIH4wLCBJT19BUElDX1JFRElSX01BU0tFRCwgJmlvX2FwaWNfc3luYyk7Cit9CisjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCitzdGF0aWMgdm9pZCBfX21hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpb19hcGljX21vZGlmeV9pcnEoaXJxLCB+MCwgSU9fQVBJQ19SRURJUl9NQVNLRUQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBfX21hc2tfYW5kX2VkZ2VfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpb19hcGljX21vZGlmeV9pcnEoaXJxLCB+SU9fQVBJQ19SRURJUl9MRVZFTF9UUklHR0VSLAorCQkJSU9fQVBJQ19SRURJUl9NQVNLRUQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBfX3VubWFza19hbmRfbGV2ZWxfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpb19hcGljX21vZGlmeV9pcnEoaXJxLCB+SU9fQVBJQ19SRURJUl9NQVNLRUQsCisJCQlJT19BUElDX1JFRElSX0xFVkVMX1RSSUdHRVIsIE5VTEwpOworfQorI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KKworc3RhdGljIHZvaWQgbWFza19JT19BUElDX2lycSAodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJX19tYXNrX0lPX0FQSUNfaXJxKGlycSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdW5tYXNrX0lPX0FQSUNfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlfX3VubWFza19JT19BUElDX2lycShpcnEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX0lPX0FQSUNfcGluKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcGluKQoreworCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OworCisJLyogQ2hlY2sgZGVsaXZlcnlfbW9kZSB0byBiZSBzdXJlIHdlJ3JlIG5vdCBjbGVhcmluZyBhbiBTTUkgcGluICovCisJZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOworCWlmIChlbnRyeS5kZWxpdmVyeV9tb2RlID09IGRlc3RfU01JKQorCQlyZXR1cm47CisJLyoKKwkgKiBEaXNhYmxlIGl0IGluIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgorCSAqLworCWlvYXBpY19tYXNrX2VudHJ5KGFwaWMsIHBpbik7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX0lPX0FQSUMgKHZvaWQpCit7CisJaW50IGFwaWMsIHBpbjsKKworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCisJCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspCisJCQljbGVhcl9JT19BUElDX3BpbihhcGljLCBwaW4pOworfQorCisjaWYgIWRlZmluZWQoQ09ORklHX1NNUCkgJiYgZGVmaW5lZChDT05GSUdfWDg2XzMyKQordm9pZCBzZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgaW50IGNmZzsKKworCS8qCisJICogV2FpdCBmb3IgaWRsZS4KKwkgKi8KKwlhcGljX3dhaXRfaWNyX2lkbGUoKTsKKwljZmcgPSBBUElDX0RNX0ZJWEVEIHwgQVBJQ19ERVNUX1NFTEYgfCB2ZWN0b3IgfCBBUElDX0RFU1RfTE9HSUNBTDsKKwkvKgorCSAqIFNlbmQgdGhlIElQSS4gVGhlIHdyaXRlIHRvIEFQSUNfSUNSIGZpcmVzIHRoaXMgb2ZmLgorCSAqLworCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIGNmZyk7Cit9CisjZW5kaWYgLyogIUNPTkZJR19TTVAgJiYgQ09ORklHX1g4Nl8zMiovCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKgorICogc3VwcG9ydCBmb3IgYnJva2VuIE1QIEJJT1NzLCBlbmFibGVzIGhhbmQtcmVkaXJlY3Rpb24gb2YgUElSUTAtNyB0bworICogc3BlY2lmaWMgQ1BVLXNpZGUgSVJRcy4KKyAqLworCisjZGVmaW5lIE1BWF9QSVJRUyA4CitzdGF0aWMgaW50IHBpcnFfZW50cmllcyBbTUFYX1BJUlFTXTsKK3N0YXRpYyBpbnQgcGlycXNfZW5hYmxlZDsKKworc3RhdGljIGludCBfX2luaXQgaW9hcGljX3BpcnFfc2V0dXAoY2hhciAqc3RyKQoreworCWludCBpLCBtYXg7CisJaW50IGludHNbTUFYX1BJUlFTKzFdOworCisJZ2V0X29wdGlvbnMoc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfUElSUVM7IGkrKykKKwkJcGlycV9lbnRyaWVzW2ldID0gLTE7CisKKwlwaXJxc19lbmFibGVkID0gMTsKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTworCQkJIlBJUlEgcmVkaXJlY3Rpb24sIHdvcmtpbmcgYXJvdW5kIGJyb2tlbiBNUC1CSU9TLlxuIik7CisJbWF4ID0gTUFYX1BJUlFTOworCWlmIChpbnRzWzBdIDwgTUFYX1BJUlFTKQorCQltYXggPSBpbnRzWzBdOworCisJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7CisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRworCQkJCSIuLi4gUElSUSVkIC0+IElSUSAlZFxuIiwgaSwgaW50c1tpKzFdKTsKKwkJLyoKKwkJICogUElSUXMgYXJlIG1hcHBlZCB1cHNpZGUgZG93biwgdXN1YWxseS4KKwkJICovCisJCXBpcnFfZW50cmllc1tNQVhfUElSUVMtaS0xXSA9IGludHNbaSsxXTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoInBpcnE9IiwgaW9hcGljX3BpcnFfc2V0dXApOworI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisvKiBJL08gQVBJQyBSVEUgY29udGVudHMgYXQgdGhlIE9TIGJvb3QgdXAgKi8KK3N0YXRpYyBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZWFybHlfaW9hcGljX2VudHJpZXNbTUFYX0lPX0FQSUNTXTsKKworLyoKKyAqIFNhdmVzIGFuZCBtYXNrcyBhbGwgdGhlIHVubWFza2VkIElPLUFQSUMgUlRFJ3MKKyAqLworaW50IHNhdmVfbWFza19JT19BUElDX3NldHVwKHZvaWQpCit7CisJdW5pb24gSU9fQVBJQ19yZWdfMDEgcmVnXzAxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGFwaWMsIHBpbjsKKworCS8qCisJICogVGhlIG51bWJlciBvZiBJTy1BUElDIElSUSByZWdpc3RlcnMgKD09ICNwaW5zKToKKwkgKi8KKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdID0gcmVnXzAxLmJpdHMuZW50cmllcysxOworCX0KKworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10gPQorCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkpICoKKwkJCQlucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFlYXJseV9pb2FwaWNfZW50cmllc1thcGljXSkKKwkJCWdvdG8gbm9tZW07CisJfQorCisJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykKKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgeworCQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CisKKwkJCWVudHJ5ID0gZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY11bcGluXSA9CisJCQkJaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKKwkJCWlmICghZW50cnkubWFzaykgeworCQkJCWVudHJ5Lm1hc2sgPSAxOworCQkJCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5KTsKKwkJCX0KKwkJfQorCisJcmV0dXJuIDA7CisKK25vbWVtOgorCXdoaWxlIChhcGljID49IDApCisJCWtmcmVlKGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWMtLV0pOworCW1lbXNldChlYXJseV9pb2FwaWNfZW50cmllcywgMCwKKwkJQVJSQVlfU0laRShlYXJseV9pb2FwaWNfZW50cmllcykpOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3ZvaWQgcmVzdG9yZV9JT19BUElDX3NldHVwKHZvaWQpCit7CisJaW50IGFwaWMsIHBpbjsKKworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJaWYgKCFlYXJseV9pb2FwaWNfZW50cmllc1thcGljXSkKKwkJCWJyZWFrOworCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKQorCQkJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwKKwkJCQkJICAgZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY11bcGluXSk7CisJCWtmcmVlKGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdKTsKKwkJZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10gPSBOVUxMOworCX0KK30KKwordm9pZCByZWluaXRfaW50cl9yZW1hcHBlZF9JT19BUElDKGludCBpbnRyX3JlbWFwcGluZykKK3sKKwkvKgorCSAqIGZvciBub3cgcGxhaW4gcmVzdG9yZSBvZiBwcmV2aW91cyBzZXR0aW5ncy4KKwkgKiBUQkQ6IEluIHRoZSBjYXNlIG9mIE9TIGVuYWJsaW5nIGludGVycnVwdC1yZW1hcHBpbmcsCisJICogSU8tQVBJQyBSVEUncyBuZWVkIHRvIGJlIHNldHVwIHRvIHBvaW50IHRvIGludGVycnVwdC1yZW1hcHBpbmcKKwkgKiB0YWJsZSBlbnRyaWVzLiBmb3Igbm93LCBkbyBhIHBsYWluIHJlc3RvcmUsIGFuZCB3YWl0IGZvcgorCSAqIHRoZSBzZXR1cF9JT19BUElDX2lycXMoKSB0byBkbyBwcm9wZXIgaW5pdGlhbGl6YXRpb24uCisJICovCisJcmVzdG9yZV9JT19BUElDX3NldHVwKCk7Cit9CisjZW5kaWYKKworLyoKKyAqIEZpbmQgdGhlIElSUSBlbnRyeSBudW1iZXIgb2YgYSBjZXJ0YWluIHBpbi4KKyAqLworc3RhdGljIGludCBmaW5kX2lycV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgaW50IHR5cGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKKwkJaWYgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSB0eXBlICYmCisJCSAgICAobXBfaXJxc1tpXS5tcF9kc3RhcGljID09IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkIHx8CisJCSAgICAgbXBfaXJxc1tpXS5tcF9kc3RhcGljID09IE1QX0FQSUNfQUxMKSAmJgorCQkgICAgbXBfaXJxc1tpXS5tcF9kc3RpcnEgPT0gcGluKQorCQkJcmV0dXJuIGk7CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBwaW4gdG8gd2hpY2ggSVJRW2lycV0gKElTQSkgaXMgY29ubmVjdGVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGZpbmRfaXNhX2lycV9waW4oaW50IGlycSwgaW50IHR5cGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgeworCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOworCisJCWlmICh0ZXN0X2JpdChsYnVzLCBtcF9idXNfbm90X3BjaSkgJiYKKwkJICAgIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSkgJiYKKwkJICAgIChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBpcnEpKQorCisJCQlyZXR1cm4gbXBfaXJxc1tpXS5tcF9kc3RpcnE7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBfX2luaXQgZmluZF9pc2FfaXJxX2FwaWMoaW50IGlycSwgaW50IHR5cGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgeworCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOworCisJCWlmICh0ZXN0X2JpdChsYnVzLCBtcF9idXNfbm90X3BjaSkgJiYKKwkJICAgIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSkgJiYKKwkJICAgIChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBpcnEpKQorCQkJYnJlYWs7CisJfQorCWlmIChpIDwgbXBfaXJxX2VudHJpZXMpIHsKKwkJaW50IGFwaWM7CisJCWZvcihhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgeworCQkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID09IG1wX2lycXNbaV0ubXBfZHN0YXBpYykKKwkJCQlyZXR1cm4gYXBpYzsKKwkJfQorCX0KKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIEZpbmQgYSBzcGVjaWZpYyBQQ0kgSVJRIGVudHJ5LgorICogTm90IGFuIF9faW5pdCwgcG9zc2libHkgbmVlZGVkIGJ5IG1vZHVsZXMKKyAqLworc3RhdGljIGludCBwaW5fMl9pcnEoaW50IGlkeCwgaW50IGFwaWMsIGludCBwaW4pOworCitpbnQgSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IHNsb3QsIGludCBwaW4pCit7CisJaW50IGFwaWMsIGksIGJlc3RfZ3Vlc3MgPSAtMTsKKworCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJxdWVyeWluZyBQQ0kgLT4gSVJRIG1hcHBpbmcgYnVzOiVkLCBzbG90OiVkLCBwaW46JWQuXG4iLAorCQlidXMsIHNsb3QsIHBpbik7CisJaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKSB7CisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlBDSSBCSU9TIHBhc3NlZCBub25leGlzdGVudCBQQ0kgYnVzICVkIVxuIiwgYnVzKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgeworCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOworCisJCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCisJCQlpZiAobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPT0gbXBfaXJxc1tpXS5tcF9kc3RhcGljIHx8CisJCQkgICAgbXBfaXJxc1tpXS5tcF9kc3RhcGljID09IE1QX0FQSUNfQUxMKQorCQkJCWJyZWFrOworCisJCWlmICghdGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCisJCSAgICAhbXBfaXJxc1tpXS5tcF9pcnF0eXBlICYmCisJCSAgICAoYnVzID09IGxidXMpICYmCisJCSAgICAoc2xvdCA9PSAoKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID4+IDIpICYgMHgxZikpKSB7CisJCQlpbnQgaXJxID0gcGluXzJfaXJxKGksYXBpYyxtcF9pcnFzW2ldLm1wX2RzdGlycSk7CisKKwkJCWlmICghKGFwaWMgfHwgSU9fQVBJQ19JUlEoaXJxKSkpCisJCQkJY29udGludWU7CisKKwkJCWlmIChwaW4gPT0gKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxICYgMykpCisJCQkJcmV0dXJuIGlycTsKKwkJCS8qCisJCQkgKiBVc2UgdGhlIGZpcnN0IGFsbC1idXQtcGluIG1hdGNoaW5nIGVudHJ5IGFzIGEKKwkJCSAqIGJlc3QtZ3Vlc3MgZnV6enkgcmVzdWx0IGZvciBicm9rZW4gbXB0YWJsZXMuCisJCQkgKi8KKwkJCWlmIChiZXN0X2d1ZXNzIDwgMCkKKwkJCQliZXN0X2d1ZXNzID0gaXJxOworCQl9CisJfQorCXJldHVybiBiZXN0X2d1ZXNzOworfQorCitFWFBPUlRfU1lNQk9MKElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0VJU0EpIHx8IGRlZmluZWQoQ09ORklHX01DQSkKKy8qCisgKiBFSVNBIEVkZ2UvTGV2ZWwgY29udHJvbCByZWdpc3RlciwgRUxDUgorICovCitzdGF0aWMgaW50IEVJU0FfRUxDUih1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmIChpcnEgPCAxNikgeworCQl1bnNpZ25lZCBpbnQgcG9ydCA9IDB4NGQwICsgKGlycSA+PiAzKTsKKwkJcmV0dXJuIChpbmIocG9ydCkgPj4gKGlycSAmIDcpKSAmIDE7CisJfQorCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCisJCQkiQnJva2VuIE1QdGFibGUgcmVwb3J0cyBJU0EgaXJxICVkXG4iLCBpcnEpOworCXJldHVybiAwOworfQorCisjZW5kaWYKKworLyogSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGVkZ2UgdHJpZ2dlcmVkLAorICogd2hlbiBsaXN0ZWQgYXMgY29uZm9ybWluZyBpbiB0aGUgTVAgdGFibGUuICovCisKKyNkZWZpbmUgZGVmYXVsdF9JU0FfdHJpZ2dlcihpZHgpCSgwKQorI2RlZmluZSBkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCSgwKQorCisvKiBFSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGFuZCBjYW4gYmUgZWRnZSBvciBsZXZlbAorICogdHJpZ2dlciBkZXBlbmRpbmcgb24gdGhlIEVMQ1IgdmFsdWUuICBJZiBhbiBpbnRlcnJ1cHQgaXMgbGlzdGVkIGFzCisgKiBFSVNBIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLCB0aGF0IG1lYW5zIGl0cyB0cmlnZ2VyIHR5cGUgbXVzdAorICogYmUgcmVhZCBpbiBmcm9tIHRoZSBFTENSICovCisKKyNkZWZpbmUgZGVmYXVsdF9FSVNBX3RyaWdnZXIoaWR4KQkoRUlTQV9FTENSKG1wX2lycXNbaWR4XS5tcF9zcmNidXNpcnEpKQorI2RlZmluZSBkZWZhdWx0X0VJU0FfcG9sYXJpdHkoaWR4KQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCisKKy8qIFBDSSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgb25lIGxldmVsIHRyaWdnZXJlZCwKKyAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLworCisjZGVmaW5lIGRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KQkoMSkKKyNkZWZpbmUgZGVmYXVsdF9QQ0lfcG9sYXJpdHkoaWR4KQkoMSkKKworLyogTUNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGxldmVsIHRyaWdnZXJlZCwKKyAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLworCisjZGVmaW5lIGRlZmF1bHRfTUNBX3RyaWdnZXIoaWR4KQkoMSkKKyNkZWZpbmUgZGVmYXVsdF9NQ0FfcG9sYXJpdHkoaWR4KQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCisKK3N0YXRpYyBpbnQgTVBCSU9TX3BvbGFyaXR5KGludCBpZHgpCit7CisJaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7CisJaW50IHBvbGFyaXR5OworCisJLyoKKwkgKiBEZXRlcm1pbmUgSVJRIGxpbmUgcG9sYXJpdHkgKGhpZ2ggYWN0aXZlIG9yIGxvdyBhY3RpdmUpOgorCSAqLworCXN3aXRjaCAobXBfaXJxc1tpZHhdLm1wX2lycWZsYWcgJiAzKQorCXsKKwkJY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVudCBwb2xhcml0eSAqLworCQkJaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKQorCQkJCXBvbGFyaXR5ID0gZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KTsKKwkJCWVsc2UKKwkJCQlwb2xhcml0eSA9IGRlZmF1bHRfUENJX3BvbGFyaXR5KGlkeCk7CisJCQlicmVhazsKKwkJY2FzZSAxOiAvKiBoaWdoIGFjdGl2ZSAqLworCQl7CisJCQlwb2xhcml0eSA9IDA7CisJCQlicmVhazsKKwkJfQorCQljYXNlIDI6IC8qIHJlc2VydmVkICovCisJCXsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOworCQkJcG9sYXJpdHkgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAzOiAvKiBsb3cgYWN0aXZlICovCisJCXsKKwkJCXBvbGFyaXR5ID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWRlZmF1bHQ6IC8qIGludmFsaWQgKi8KKwkJeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7CisJCQlwb2xhcml0eSA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcG9sYXJpdHk7Cit9CisKK3N0YXRpYyBpbnQgTVBCSU9TX3RyaWdnZXIoaW50IGlkeCkKK3sKKwlpbnQgYnVzID0gbXBfaXJxc1tpZHhdLm1wX3NyY2J1czsKKwlpbnQgdHJpZ2dlcjsKKworCS8qCisJICogRGV0ZXJtaW5lIElSUSB0cmlnZ2VyIG1vZGUgKGVkZ2Ugb3IgbGV2ZWwgc2Vuc2l0aXZlKToKKwkgKi8KKwlzd2l0Y2ggKChtcF9pcnFzW2lkeF0ubXBfaXJxZmxhZz4+MikgJiAzKQorCXsKKwkJY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVudCAqLworCQkJaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKQorCQkJCXRyaWdnZXIgPSBkZWZhdWx0X0lTQV90cmlnZ2VyKGlkeCk7CisJCQllbHNlCisJCQkJdHJpZ2dlciA9IGRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KTsKKyNpZiBkZWZpbmVkKENPTkZJR19FSVNBKSB8fCBkZWZpbmVkKENPTkZJR19NQ0EpCisJCQlzd2l0Y2ggKG1wX2J1c19pZF90b190eXBlW2J1c10pIHsKKwkJCQljYXNlIE1QX0JVU19JU0E6IC8qIElTQSBwaW4gKi8KKwkJCQl7CisJCQkJCS8qIHNldCBiZWZvcmUgdGhlIHN3aXRjaCAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBNUF9CVVNfRUlTQTogLyogRUlTQSBwaW4gKi8KKwkJCQl7CisJCQkJCXRyaWdnZXIgPSBkZWZhdWx0X0VJU0FfdHJpZ2dlcihpZHgpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBNUF9CVVNfUENJOiAvKiBQQ0kgcGluICovCisJCQkJeworCQkJCQkvKiBzZXQgYmVmb3JlIHRoZSBzd2l0Y2ggKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWNhc2UgTVBfQlVTX01DQTogLyogTUNBIHBpbiAqLworCQkJCXsKKwkJCQkJdHJpZ2dlciA9IGRlZmF1bHRfTUNBX3RyaWdnZXIoaWR4KTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWRlZmF1bHQ6CisJCQkJeworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKKwkJCQkJdHJpZ2dlciA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKyNlbmRpZgorCQkJYnJlYWs7CisJCWNhc2UgMTogLyogZWRnZSAqLworCQl7CisJCQl0cmlnZ2VyID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgMjogLyogcmVzZXJ2ZWQgKi8KKwkJeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7CisJCQl0cmlnZ2VyID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgMzogLyogbGV2ZWwgKi8KKwkJeworCQkJdHJpZ2dlciA9IDE7CisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0OiAvKiBpbnZhbGlkICovCisJCXsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOworCQkJdHJpZ2dlciA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gdHJpZ2dlcjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXJxX3BvbGFyaXR5KGludCBpZHgpCit7CisJcmV0dXJuIE1QQklPU19wb2xhcml0eShpZHgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcnFfdHJpZ2dlcihpbnQgaWR4KQoreworCXJldHVybiBNUEJJT1NfdHJpZ2dlcihpZHgpOworfQorCitpbnQgKCppb2FwaWNfcmVudW1iZXJfaXJxKShpbnQgaW9hcGljLCBpbnQgaXJxKTsKK3N0YXRpYyBpbnQgcGluXzJfaXJxKGludCBpZHgsIGludCBhcGljLCBpbnQgcGluKQoreworCWludCBpcnEsIGk7CisJaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7CisKKwkvKgorCSAqIERlYnVnZ2luZyBjaGVjaywgd2UgYXJlIGluIGJpZyB0cm91YmxlIGlmIHRoaXMgbWVzc2FnZSBwb3BzIHVwIQorCSAqLworCWlmIChtcF9pcnFzW2lkeF0ubXBfZHN0aXJxICE9IHBpbikKKwkJcHJpbnRrKEtFUk5fRVJSICJicm9rZW4gQklPUyBvciBNUFRBQkxFIHBhcnNlciwgYXlpZWUhIVxuIik7CisKKwlpZiAodGVzdF9iaXQoYnVzLCBtcF9idXNfbm90X3BjaSkpIHsKKwkJaXJxID0gbXBfaXJxc1tpZHhdLm1wX3NyY2J1c2lycTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBQQ0kgSVJRcyBhcmUgbWFwcGVkIGluIG9yZGVyCisJCSAqLworCQlpID0gaXJxID0gMDsKKwkJd2hpbGUgKGkgPCBhcGljKQorCQkJaXJxICs9IG5yX2lvYXBpY19yZWdpc3RlcnNbaSsrXTsKKwkJaXJxICs9IHBpbjsKKwkJLyoKKyAgICAgICAgICAgICAgICAgKiBGb3IgTVBTIG1vZGUsIHNvIGZhciBvbmx5IG5lZWRlZCBieSBFUzcwMDAgcGxhdGZvcm0KKyAgICAgICAgICAgICAgICAgKi8KKwkJaWYgKGlvYXBpY19yZW51bWJlcl9pcnEpCisJCQlpcnEgPSBpb2FwaWNfcmVudW1iZXJfaXJxKGFwaWMsIGlycSk7CisJfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogUENJIElSUSBjb21tYW5kIGxpbmUgcmVkaXJlY3Rpb24uIFllcywgbGltaXRzIGFyZSBoYXJkY29kZWQuCisJICovCisJaWYgKChwaW4gPj0gMTYpICYmIChwaW4gPD0gMjMpKSB7CisJCWlmIChwaXJxX2VudHJpZXNbcGluLTE2XSAhPSAtMSkgeworCQkJaWYgKCFwaXJxX2VudHJpZXNbcGluLTE2XSkgeworCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRworCQkJCQkJImRpc2FibGluZyBQSVJRJWRcbiIsIHBpbi0xNik7CisJCQl9IGVsc2UgeworCQkJCWlycSA9IHBpcnFfZW50cmllc1twaW4tMTZdOworCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRworCQkJCQkJInVzaW5nIFBJUlElZCAtPiBJUlEgJWRcbiIsCisJCQkJCQlwaW4tMTYsIGlycSk7CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKworCXJldHVybiBpcnE7Cit9CisKK3ZvaWQgbG9ja192ZWN0b3JfbG9jayh2b2lkKQoreworCS8qIFVzZWQgdG8gdGhlIG9ubGluZSBzZXQgb2YgY3B1cyBkb2VzIG5vdCBjaGFuZ2UKKwkgKiBkdXJpbmcgYXNzaWduX2lycV92ZWN0b3IuCisJICovCisJc3Bpbl9sb2NrKCZ2ZWN0b3JfbG9jayk7Cit9CisKK3ZvaWQgdW5sb2NrX3ZlY3Rvcl9sb2NrKHZvaWQpCit7CisJc3Bpbl91bmxvY2soJnZlY3Rvcl9sb2NrKTsKK30KKworc3RhdGljIGludCBfX2Fzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworCS8qCisJICogTk9URSEgVGhlIGxvY2FsIEFQSUMgaXNuJ3QgdmVyeSBnb29kIGF0IGhhbmRsaW5nCisJICogbXVsdGlwbGUgaW50ZXJydXB0cyBhdCB0aGUgc2FtZSBpbnRlcnJ1cHQgbGV2ZWwuCisJICogQXMgdGhlIGludGVycnVwdCBsZXZlbCBpcyBkZXRlcm1pbmVkIGJ5IHRha2luZyB0aGUKKwkgKiB2ZWN0b3IgbnVtYmVyIGFuZCBzaGlmdGluZyB0aGF0IHJpZ2h0IGJ5IDQsIHdlCisJICogd2FudCB0byBzcHJlYWQgdGhlc2Ugb3V0IGEgYml0IHNvIHRoYXQgdGhleSBkb24ndAorCSAqIGFsbCBmYWxsIGluIHRoZSBzYW1lIGludGVycnVwdCBsZXZlbC4KKwkgKgorCSAqIEFsc28sIHdlJ3ZlIGdvdCB0byBiZSBjYXJlZnVsIG5vdCB0byB0cmFzaCBnYXRlCisJICogMHg4MCwgYmVjYXVzZSBpbnQgMHg4MCBpcyBobSwga2luZCBvZiBpbXBvcnRhbnRpc2guIDspCisJICovCisJc3RhdGljIGludCBjdXJyZW50X3ZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IsIGN1cnJlbnRfb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBpbnQgb2xkX3ZlY3RvcjsKKwlpbnQgY3B1OworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisKKwkvKiBPbmx5IHRyeSBhbmQgYWxsb2NhdGUgaXJxcyBvbiBjcHVzIHRoYXQgYXJlIHByZXNlbnQgKi8KKwljcHVzX2FuZChtYXNrLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CisKKwlpZiAoKGNmZy0+bW92ZV9pbl9wcm9ncmVzcykgfHwgY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQpCisJCXJldHVybiAtRUJVU1k7CisKKwlvbGRfdmVjdG9yID0gY2ZnLT52ZWN0b3I7CisJaWYgKG9sZF92ZWN0b3IpIHsKKwkJY3B1bWFza190IHRtcDsKKwkJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7CisJCWlmICghY3B1c19lbXB0eSh0bXApKQorCQkJcmV0dXJuIDA7CisJfQorCisJZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCBtYXNrKSB7CisJCWNwdW1hc2tfdCBkb21haW4sIG5ld19tYXNrOworCQlpbnQgbmV3X2NwdTsKKwkJaW50IHZlY3Rvciwgb2Zmc2V0OworCisJCWRvbWFpbiA9IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihjcHUpOworCQljcHVzX2FuZChuZXdfbWFzaywgZG9tYWluLCBjcHVfb25saW5lX21hcCk7CisKKwkJdmVjdG9yID0gY3VycmVudF92ZWN0b3I7CisJCW9mZnNldCA9IGN1cnJlbnRfb2Zmc2V0OworbmV4dDoKKwkJdmVjdG9yICs9IDg7CisJCWlmICh2ZWN0b3IgPj0gZmlyc3Rfc3lzdGVtX3ZlY3RvcikgeworCQkJLyogSWYgd2UgcnVuIG91dCBvZiB2ZWN0b3JzIG9uIGxhcmdlIGJveGVuLCBtdXN0IHNoYXJlIHRoZW0uICovCisJCQlvZmZzZXQgPSAob2Zmc2V0ICsgMSkgJSA4OworCQkJdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiArIG9mZnNldDsKKwkJfQorCQlpZiAodW5saWtlbHkoY3VycmVudF92ZWN0b3IgPT0gdmVjdG9yKSkKKwkJCWNvbnRpbnVlOworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJaWYgKHZlY3RvciA9PSBJQTMyX1NZU0NBTExfVkVDVE9SKQorCQkJZ290byBuZXh0OworI2Vsc2UKKwkJaWYgKHZlY3RvciA9PSBTWVNDQUxMX1ZFQ1RPUikKKwkJCWdvdG8gbmV4dDsKKyNlbmRpZgorCQlmb3JfZWFjaF9jcHVfbWFza19ucihuZXdfY3B1LCBuZXdfbWFzaykKKwkJCWlmIChwZXJfY3B1KHZlY3Rvcl9pcnEsIG5ld19jcHUpW3ZlY3Rvcl0gIT0gLTEpCisJCQkJZ290byBuZXh0OworCQkvKiBGb3VuZCBvbmUhICovCisJCWN1cnJlbnRfdmVjdG9yID0gdmVjdG9yOworCQljdXJyZW50X29mZnNldCA9IG9mZnNldDsKKwkJaWYgKG9sZF92ZWN0b3IpIHsKKwkJCWNmZy0+bW92ZV9pbl9wcm9ncmVzcyA9IDE7CisJCQljZmctPm9sZF9kb21haW4gPSBjZmctPmRvbWFpbjsKKwkJfQorCQlmb3JfZWFjaF9jcHVfbWFza19ucihuZXdfY3B1LCBuZXdfbWFzaykKKwkJCXBlcl9jcHUodmVjdG9yX2lycSwgbmV3X2NwdSlbdmVjdG9yXSA9IGlycTsKKwkJY2ZnLT52ZWN0b3IgPSB2ZWN0b3I7CisJCWNmZy0+ZG9tYWluID0gZG9tYWluOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FTk9TUEM7Cit9CisKK3N0YXRpYyBpbnQgYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgY3B1bWFza190IG1hc2spCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJZXJyID0gX19hc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19jbGVhcl9pcnFfdmVjdG9yKGludCBpcnEpCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwljcHVtYXNrX3QgbWFzazsKKwlpbnQgY3B1LCB2ZWN0b3I7CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJQlVHX09OKCFjZmctPnZlY3Rvcik7CisKKwl2ZWN0b3IgPSBjZmctPnZlY3RvcjsKKwljcHVzX2FuZChtYXNrLCBjZmctPmRvbWFpbiwgY3B1X29ubGluZV9tYXApOworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgbWFzaykKKwkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSAtMTsKKworCWNmZy0+dmVjdG9yID0gMDsKKwljcHVzX2NsZWFyKGNmZy0+ZG9tYWluKTsKK30KKwordm9pZCBfX3NldHVwX3ZlY3Rvcl9pcnEoaW50IGNwdSkKK3sKKwkvKiBJbml0aWFsaXplIHZlY3Rvcl9pcnEgb24gYSBuZXcgY3B1ICovCisJLyogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHZlY3Rvcl9sb2NrIGhlbGQgKi8KKwlpbnQgaXJxLCB2ZWN0b3I7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKworCS8qIE1hcmsgdGhlIGludXNlIHZlY3RvcnMgKi8KKwlmb3JfZWFjaF9pcnFfY2ZnKGlycSwgY2ZnKSB7CisJCWlmICghY3B1X2lzc2V0KGNwdSwgY2ZnLT5kb21haW4pKQorCQkJY29udGludWU7CisJCXZlY3RvciA9IGNmZy0+dmVjdG9yOworCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXSA9IGlycTsKKwl9CisJLyogTWFyayB0aGUgZnJlZSB2ZWN0b3JzICovCisJZm9yICh2ZWN0b3IgPSAwOyB2ZWN0b3IgPCBOUl9WRUNUT1JTOyArK3ZlY3RvcikgeworCQlpcnEgPSBwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXTsKKwkJaWYgKGlycSA8IDApCisJCQljb250aW51ZTsKKworCQljZmcgPSBpcnFfY2ZnKGlycSk7CisJCWlmICghY3B1X2lzc2V0KGNwdSwgY2ZnLT5kb21haW4pKQorCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSAtMTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9hcGljX2NoaXA7CisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXJfaW9hcGljX2NoaXA7CisjZW5kaWYKKworI2RlZmluZSBJT0FQSUNfQVVUTyAgICAgLTEKKyNkZWZpbmUgSU9BUElDX0VER0UgICAgIDAKKyNkZWZpbmUgSU9BUElDX0xFVkVMICAgIDEKKworI2lmZGVmIENPTkZJR19YODZfMzIKK3N0YXRpYyBpbmxpbmUgaW50IElPX0FQSUNfaXJxX3RyaWdnZXIoaW50IGlycSkKK3sKKwlpbnQgYXBpYywgaWR4LCBwaW47CisKKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKKwkJCWlkeCA9IGZpbmRfaXJxX2VudHJ5KGFwaWMsIHBpbiwgbXBfSU5UKTsKKwkJCWlmICgoaWR4ICE9IC0xKSAmJiAoaXJxID09IHBpbl8yX2lycShpZHgsIGFwaWMsIHBpbikpKQorCQkJCXJldHVybiBpcnFfdHJpZ2dlcihpZHgpOworCQl9CisJfQorCS8qCisgICAgICAgICAqIG5vbmV4aXN0ZW50IElSUXMgYXJlIGVkZ2UgZGVmYXVsdAorICAgICAgICAgKi8KKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBJT19BUElDX2lycV90cmlnZ2VyKGludCBpcnEpCit7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgaW9hcGljX3JlZ2lzdGVyX2ludHIoaW50IGlycSwgdW5zaWduZWQgbG9uZyB0cmlnZ2VyKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJaWYgKCh0cmlnZ2VyID09IElPQVBJQ19BVVRPICYmIElPX0FQSUNfaXJxX3RyaWdnZXIoaXJxKSkgfHwKKwkgICAgdHJpZ2dlciA9PSBJT0FQSUNfTEVWRUwpCisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJZWxzZQorCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9MRVZFTDsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJaWYgKGlycV9yZW1hcHBlZChpcnEpKSB7CisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QQ05UWFQ7CisJCWlmICh0cmlnZ2VyKQorCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaXJfaW9hcGljX2NoaXAsCisJCQkJCQkgICAgICBoYW5kbGVfZmFzdGVvaV9pcnEsCisJCQkJCQkgICAgICJmYXN0ZW9pIik7CisJCWVsc2UKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlyX2lvYXBpY19jaGlwLAorCQkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJaWYgKCh0cmlnZ2VyID09IElPQVBJQ19BVVRPICYmIElPX0FQSUNfaXJxX3RyaWdnZXIoaXJxKSkgfHwKKwkgICAgdHJpZ2dlciA9PSBJT0FQSUNfTEVWRUwpCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlvYXBpY19jaGlwLAorCQkJCQkgICAgICBoYW5kbGVfZmFzdGVvaV9pcnEsCisJCQkJCSAgICAgICJmYXN0ZW9pIik7CisJZWxzZQorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKKwkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworfQorCitzdGF0aWMgaW50IHNldHVwX2lvYXBpY19lbnRyeShpbnQgYXBpYywgaW50IGlycSwKKwkJCSAgICAgIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBkZXN0aW5hdGlvbiwgaW50IHRyaWdnZXIsCisJCQkgICAgICBpbnQgcG9sYXJpdHksIGludCB2ZWN0b3IpCit7CisJLyoKKwkgKiBhZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6CisJICovCisJbWVtc2V0KGVudHJ5LDAsc2l6ZW9mKCplbnRyeSkpOworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkgeworCQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gbWFwX2lvYXBpY190b19pcihhcGljKTsKKwkJc3RydWN0IGlydGUgaXJ0ZTsKKwkJc3RydWN0IElSX0lPX0FQSUNfcm91dGVfZW50cnkgKmlyX2VudHJ5ID0KKwkJCShzdHJ1Y3QgSVJfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSBlbnRyeTsKKwkJaW50IGluZGV4OworCisJCWlmICghaW9tbXUpCisJCQlwYW5pYygiTm8gbWFwcGluZyBpb21tdSBmb3IgaW9hcGljICVkXG4iLCBhcGljKTsKKworCQlpbmRleCA9IGFsbG9jX2lydGUoaW9tbXUsIGlycSwgMSk7CisJCWlmIChpbmRleCA8IDApCisJCQlwYW5pYygiRmFpbGVkIHRvIGFsbG9jYXRlIElSVEUgZm9yIGlvYXBpYyAlZFxuIiwgYXBpYyk7CisKKwkJbWVtc2V0KCZpcnRlLCAwLCBzaXplb2YoaXJ0ZSkpOworCisJCWlydGUucHJlc2VudCA9IDE7CisJCWlydGUuZHN0X21vZGUgPSBJTlRfREVTVF9NT0RFOworCQlpcnRlLnRyaWdnZXJfbW9kZSA9IHRyaWdnZXI7CisJCWlydGUuZGx2cnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOworCQlpcnRlLnZlY3RvciA9IHZlY3RvcjsKKwkJaXJ0ZS5kZXN0X2lkID0gSVJURV9ERVNUKGRlc3RpbmF0aW9uKTsKKworCQltb2RpZnlfaXJ0ZShpcnEsICZpcnRlKTsKKworCQlpcl9lbnRyeS0+aW5kZXgyID0gKGluZGV4ID4+IDE1KSAmIDB4MTsKKwkJaXJfZW50cnktPnplcm8gPSAwOworCQlpcl9lbnRyeS0+Zm9ybWF0ID0gMTsKKwkJaXJfZW50cnktPmluZGV4ID0gKGluZGV4ICYgMHg3ZmZmKTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJZW50cnktPmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKKwkJZW50cnktPmRlc3RfbW9kZSA9IElOVF9ERVNUX01PREU7CisJCWVudHJ5LT5kZXN0ID0gZGVzdGluYXRpb247CisJfQorCisJZW50cnktPm1hc2sgPSAwOwkJCQkvKiBlbmFibGUgSVJRICovCisJZW50cnktPnRyaWdnZXIgPSB0cmlnZ2VyOworCWVudHJ5LT5wb2xhcml0eSA9IHBvbGFyaXR5OworCWVudHJ5LT52ZWN0b3IgPSB2ZWN0b3I7CisKKwkvKiBNYXNrIGxldmVsIHRyaWdnZXJlZCBpcnFzLgorCSAqIFVzZSBJUlFfREVMQVlFRF9ESVNBQkxFIGZvciBlZGdlIHRyaWdnZXJlZCBpcnFzLgorCSAqLworCWlmICh0cmlnZ2VyKQorCQllbnRyeS0+bWFzayA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX0lPX0FQSUNfaXJxKGludCBhcGljLCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgaXJxLAorCQkJICAgICAgaW50IHRyaWdnZXIsIGludCBwb2xhcml0eSkKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OworCWNwdW1hc2tfdCBtYXNrOworCisJaWYgKCFJT19BUElDX0lSUShpcnEpKQorCQlyZXR1cm47CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisKKwltYXNrID0gVEFSR0VUX0NQVVM7CisJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCisJCXJldHVybjsKKworCWNwdXNfYW5kKG1hc2ssIGNmZy0+ZG9tYWluLCBtYXNrKTsKKworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSxLRVJOX0RFQlVHCisJCSAgICAiSU9BUElDWyVkXTogU2V0IHJvdXRpbmcgZW50cnkgKCVkLSVkIC0+IDB4JXggLT4gIgorCQkgICAgIklSUSAlZCBNb2RlOiVpIEFjdGl2ZTolaSlcbiIsCisJCSAgICBhcGljLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwgcGluLCBjZmctPnZlY3RvciwKKwkJICAgIGlycSwgdHJpZ2dlciwgcG9sYXJpdHkpOworCisKKwlpZiAoc2V0dXBfaW9hcGljX2VudHJ5KG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBpcnEsICZlbnRyeSwKKwkJCSAgICAgICBjcHVfbWFza190b19hcGljaWQobWFzayksIHRyaWdnZXIsIHBvbGFyaXR5LAorCQkJICAgICAgIGNmZy0+dmVjdG9yKSkgeworCQlwcmludGsoIkZhaWxlZCB0byBzZXR1cCBpb2FwaWMgZW50cnkgZm9yIGlvYXBpYyAgJWQsIHBpbiAlZFxuIiwKKwkJICAgICAgIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBwaW4pOworCQlfX2NsZWFyX2lycV92ZWN0b3IoaXJxKTsKKwkJcmV0dXJuOworCX0KKworCWlvYXBpY19yZWdpc3Rlcl9pbnRyKGlycSwgdHJpZ2dlcik7CisJaWYgKGlycSA8IDE2KQorCQlkaXNhYmxlXzgyNTlBX2lycShpcnEpOworCisJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQ19pcnFzKHZvaWQpCit7CisJaW50IGFwaWMsIHBpbiwgaWR4LCBpcnE7CisJaW50IG5vdGNvbiA9IDA7CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcgImluaXQgSU9fQVBJQyBJUlFzXG4iKTsKKworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgeworCisJCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljLCBwaW4sIG1wX0lOVCk7CisJCQlpZiAoaWR4ID09IC0xKSB7CisJCQkJaWYgKCFub3Rjb24pIHsKKwkJCQkJbm90Y29uID0gMTsKKwkJCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLAorCQkJCQkJS0VSTl9ERUJVRyAiICVkLSVkIiwKKwkJCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLAorCQkJCQkJcGluKTsKKwkJCQl9IGVsc2UKKwkJCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiICVkLSVkIiwKKwkJCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLAorCQkJCQkJcGluKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChub3Rjb24pIHsKKwkJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsCisJCQkJCSIgKGFwaWNpZC1waW4pIG5vdCBjb25uZWN0ZWRcbiIpOworCQkJCW5vdGNvbiA9IDA7CisJCQl9CisKKwkJCWlycSA9IHBpbl8yX2lycShpZHgsIGFwaWMsIHBpbik7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCQkJaWYgKG11bHRpX3RpbWVyX2NoZWNrKGFwaWMsIGlycSkpCisJCQkJY29udGludWU7CisjZW5kaWYKKwkJCWFkZF9waW5fdG9faXJxKGlycSwgYXBpYywgcGluKTsKKworCQkJc2V0dXBfSU9fQVBJQ19pcnEoYXBpYywgcGluLCBpcnEsCisJCQkJCWlycV90cmlnZ2VyKGlkeCksIGlycV9wb2xhcml0eShpZHgpKTsKKwkJfQorCX0KKworCWlmIChub3Rjb24pCisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwKKwkJCSIgKGFwaWNpZC1waW4pIG5vdCBjb25uZWN0ZWRcbiIpOworfQorCisvKgorICogU2V0IHVwIHRoZSB0aW1lciBwaW4sIHBvc3NpYmx5IHdpdGggdGhlIDgyNTlBLW1hc3RlciBiZWhpbmQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF90aW1lcl9JUlEwX3Bpbih1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHBpbiwKKwkJCQkJaW50IHZlY3RvcikKK3sKKwlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJCXJldHVybjsKKyNlbmRpZgorCisJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7CisKKwkvKgorCSAqIFdlIHVzZSBsb2dpY2FsIGRlbGl2ZXJ5IHRvIGdldCB0aGUgdGltZXIgSVJRCisJICogdG8gdGhlIGZpcnN0IENQVS4KKwkgKi8KKwllbnRyeS5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOworCWVudHJ5Lm1hc2sgPSAxOwkJCQkJLyogbWFzayBJUlEgbm93ICovCisJZW50cnkuZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChUQVJHRVRfQ1BVUyk7CisJZW50cnkuZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOworCWVudHJ5LnBvbGFyaXR5ID0gMDsKKwllbnRyeS50cmlnZ2VyID0gMDsKKwllbnRyeS52ZWN0b3IgPSB2ZWN0b3I7CisKKwkvKgorCSAqIFRoZSB0aW1lciBJUlEgZG9lc24ndCBoYXZlIHRvIGtub3cgdGhhdCBiZWhpbmQgdGhlCisJICogc2NlbmUgd2UgbWF5IGhhdmUgYSA4MjU5QS1tYXN0ZXIgaW4gQUVPSSBtb2RlIC4uLgorCSAqLworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKDAsICZpb2FwaWNfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworCisJLyoKKwkgKiBBZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6CisJICovCisJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOworfQorCisKK19fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9JT19BUElDKHZvaWQpCit7CisJaW50IGFwaWMsIGk7CisJdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOworCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKKwl1bmlvbiBJT19BUElDX3JlZ18wMiByZWdfMDI7CisJdW5pb24gSU9fQVBJQ19yZWdfMDMgcmVnXzAzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHICJudW1iZXIgb2YgTVAgSVJRIHNvdXJjZXM6ICVkLlxuIiwgbXBfaXJxX2VudHJpZXMpOworCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspCisJCXByaW50ayhLRVJOX0RFQlVHICJudW1iZXIgb2YgSU8tQVBJQyAjJWQgcmVnaXN0ZXJzOiAlZC5cbiIsCisJCSAgICAgICBtcF9pb2FwaWNzW2ldLm1wX2FwaWNpZCwgbnJfaW9hcGljX3JlZ2lzdGVyc1tpXSk7CisKKwkvKgorCSAqIFdlIGFyZSBhIGJpdCBjb25zZXJ2YXRpdmUgYWJvdXQgd2hhdCB3ZSBleHBlY3QuICBXZSBoYXZlIHRvCisJICoga25vdyBhYm91dCBldmVyeSBoYXJkd2FyZSBjaGFuZ2UgQVNBUC4KKwkgKi8KKwlwcmludGsoS0VSTl9JTkZPICJ0ZXN0aW5nIHRoZSBJTyBBUElDLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiIpOworCisJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgeworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAwKTsKKwlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDEpOworCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MTApCisJCXJlZ18wMi5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMik7CisJaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgyMCkKKwkJcmVnXzAzLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJcHJpbnRrKCJcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJJTyBBUElDICMlZC4uLi4uLlxuIiwgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMDogJTA4WFxuIiwgcmVnXzAwLnJhdyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgOiBwaHlzaWNhbCBBUElDIGlkOiAlMDJYXG4iLCByZWdfMDAuYml0cy5JRCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgOiBEZWxpdmVyeSBUeXBlOiAlWFxuIiwgcmVnXzAwLmJpdHMuZGVsaXZlcnlfdHlwZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgOiBMVFMgICAgICAgICAgOiAlWFxuIiwgcmVnXzAwLmJpdHMuTFRTKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMTogJTA4WFxuIiwgKihpbnQgKikmcmVnXzAxKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBtYXggcmVkaXJlY3Rpb24gZW50cmllczogJTA0WFxuIiwgcmVnXzAxLmJpdHMuZW50cmllcyk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBQUlEgaW1wbGVtZW50ZWQ6ICVYXG4iLCByZWdfMDEuYml0cy5QUlEpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IElPIEFQSUMgdmVyc2lvbjogJTA0WFxuIiwgcmVnXzAxLmJpdHMudmVyc2lvbik7CisKKwkvKgorCSAqIFNvbWUgSW50ZWwgY2hpcHNldHMgd2l0aCBJTyBBUElDIFZFUlNJT04gb2YgMHgxPyBkb24ndCBoYXZlIHJlZ18wMiwKKwkgKiBidXQgdGhlIHZhbHVlIG9mIHJlZ18wMiBpcyByZWFkIGFzIHRoZSBwcmV2aW91cyByZWFkIHJlZ2lzdGVyCisJICogdmFsdWUsIHNvIGlnbm9yZSBpdCBpZiByZWdfMDIgPT0gcmVnXzAxLgorCSAqLworCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MTAgJiYgcmVnXzAyLnJhdyAhPSByZWdfMDEucmF3KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMjogJTA4WFxuIiwgcmVnXzAyLnJhdyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IGFyYml0cmF0aW9uOiAlMDJYXG4iLCByZWdfMDIuYml0cy5hcmJpdHJhdGlvbik7CisJfQorCisJLyoKKwkgKiBTb21lIEludGVsIGNoaXBzZXRzIHdpdGggSU8gQVBJQyBWRVJTSU9OIG9mIDB4Mj8gZG9uJ3QgaGF2ZSByZWdfMDIKKwkgKiBvciByZWdfMDMsIGJ1dCB0aGUgdmFsdWUgb2YgcmVnXzBbMjNdIGlzIHJlYWQgYXMgdGhlIHByZXZpb3VzIHJlYWQKKwkgKiByZWdpc3RlciB2YWx1ZSwgc28gaWdub3JlIGl0IGlmIHJlZ18wMyA9PSByZWdfMFsxMl0uCisJICovCisJaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgyMCAmJiByZWdfMDMucmF3ICE9IHJlZ18wMi5yYXcgJiYKKwkgICAgcmVnXzAzLnJhdyAhPSByZWdfMDEucmF3KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMzogJTA4WFxuIiwgcmVnXzAzLnJhdyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IEJvb3QgRFQgICAgOiAlWFxuIiwgcmVnXzAzLmJpdHMuYm9vdF9EVCk7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gSVJRIHJlZGlyZWN0aW9uIHRhYmxlOlxuIik7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiIE5SIERzdCBNYXNrIFRyaWcgSVJSIFBvbCIKKwkJCSAgIiBTdGF0IERtb2QgRGVsaSBWZWN0OiAgIFxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDw9IHJlZ18wMS5iaXRzLmVudHJpZXM7IGkrKykgeworCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKKworCQllbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIGkpOworCisJCXByaW50ayhLRVJOX0RFQlVHICIgJTAyeCAlMDNYICIsCisJCQlpLAorCQkJZW50cnkuZGVzdAorCQkpOworCisJCXByaW50aygiJTFkICAgICUxZCAgICAlMWQgICAlMWQgICAlMWQgICAgJTFkICAgICUxZCAgICAlMDJYXG4iLAorCQkJZW50cnkubWFzaywKKwkJCWVudHJ5LnRyaWdnZXIsCisJCQllbnRyeS5pcnIsCisJCQllbnRyeS5wb2xhcml0eSwKKwkJCWVudHJ5LmRlbGl2ZXJ5X3N0YXR1cywKKwkJCWVudHJ5LmRlc3RfbW9kZSwKKwkJCWVudHJ5LmRlbGl2ZXJ5X21vZGUsCisJCQllbnRyeS52ZWN0b3IKKwkJKTsKKwl9CisJfQorCXByaW50ayhLRVJOX0RFQlVHICJJUlEgdG8gcGluIG1hcHBpbmdzOlxuIik7CisJZm9yX2VhY2hfaXJxX2NmZyhpcnEsIGNmZykgeworCQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGNmZy0+aXJxXzJfcGluOworCQlpZiAoIWVudHJ5KQorCQkJY29udGludWU7CisJCXByaW50ayhLRVJOX0RFQlVHICJJUlElZCAiLCBpcnEpOworCQlmb3IgKDs7KSB7CisJCQlwcmludGsoIi0+ICVkOiVkIiwgZW50cnktPmFwaWMsIGVudHJ5LT5waW4pOworCQkJaWYgKCFlbnRyeS0+bmV4dCkKKwkJCQlicmVhazsKKwkJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJCX0KKwkJcHJpbnRrKCJcbiIpOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBkb25lLlxuIik7CisKKwlyZXR1cm47Cit9CisKK19fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9BUElDX2JpdGZpZWxkKGludCBiYXNlKQoreworCXVuc2lnbmVkIGludCB2OworCWludCBpLCBqOworCisJaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHICIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZlxuIiBLRVJOX0RFQlVHKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXYgPSBhcGljX3JlYWQoYmFzZSArIGkqMHgxMCk7CisJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7CisJCQlpZiAodiAmICgxPDxqKSkKKwkJCQlwcmludGsoIjEiKTsKKwkJCWVsc2UKKwkJCQlwcmludGsoIjAiKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQorfQorCitfX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfbG9jYWxfQVBJQyh2b2lkICpkdW1teSkKK3sKKwl1bnNpZ25lZCBpbnQgdiwgdmVyLCBtYXhsdnQ7CisJdTY0IGljcjsKKworCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQorCQlyZXR1cm47CisKKwlwcmludGsoIlxuIiBLRVJOX0RFQlVHICJwcmludGluZyBsb2NhbCBBUElDIGNvbnRlbnRzIG9uIENQVSMlZC8lZDpcbiIsCisJCXNtcF9wcm9jZXNzb3JfaWQoKSwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOworCXYgPSBhcGljX3JlYWQoQVBJQ19JRCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgSUQ6ICAgICAgJTA4eCAoJTAxeClcbiIsIHYsIHJlYWRfYXBpY19pZCgpKTsKKwl2ID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKKwlwcmludGsoS0VSTl9JTkZPICIuLi4gQVBJQyBWRVJTSU9OOiAlMDh4XG4iLCB2KTsKKwl2ZXIgPSBHRVRfQVBJQ19WRVJTSU9OKHYpOworCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKKworCXYgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVEFTS1BSSTogJTA4eCAoJTAyeClcbiIsIHYsIHYgJiBBUElDX1RQUklfTUFTSyk7CisKKwlpZiAoQVBJQ19JTlRFR1JBVEVEKHZlcikpIHsgICAgICAgICAgICAgICAgICAgICAvKiAhODI0ODlEWCAqLworCQlpZiAoIUFQSUNfWEFQSUModmVyKSkgeworCQkJdiA9IGFwaWNfcmVhZChBUElDX0FSQlBSSSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgQVJCUFJJOiAlMDh4ICglMDJ4KVxuIiwgdiwKKwkJCSAgICAgICB2ICYgQVBJQ19BUkJQUklfTUFTSyk7CisJCX0KKwkJdiA9IGFwaWNfcmVhZChBUElDX1BST0NQUkkpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgUFJPQ1BSSTogJTA4eFxuIiwgdik7CisJfQorCisJLyoKKwkgKiBSZW1vdGUgcmVhZCBzdXBwb3J0ZWQgb25seSBpbiB0aGUgODI0ODlEWCBhbmQgbG9jYWwgQVBJQyBmb3IKKwkgKiBQZW50aXVtIHByb2Nlc3NvcnMuCisJICovCisJaWYgKCFBUElDX0lOVEVHUkFURUQodmVyKSB8fCBtYXhsdnQgPT0gMykgeworCQl2ID0gYXBpY19yZWFkKEFQSUNfUlJSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFJSUjogJTA4eFxuIiwgdik7CisJfQorCisJdiA9IGFwaWNfcmVhZChBUElDX0xEUik7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExEUjogJTA4eFxuIiwgdik7CisJaWYgKCF4MmFwaWNfZW5hYmxlZCgpKSB7CisJCXYgPSBhcGljX3JlYWQoQVBJQ19ERlIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgREZSOiAlMDh4XG4iLCB2KTsKKwl9CisJdiA9IGFwaWNfcmVhZChBUElDX1NQSVYpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBTUElWOiAlMDh4XG4iLCB2KTsKKworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJU1IgZmllbGQ6XG4iKTsKKwlwcmludF9BUElDX2JpdGZpZWxkKEFQSUNfSVNSKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1SIGZpZWxkOlxuIik7CisJcHJpbnRfQVBJQ19iaXRmaWVsZChBUElDX1RNUik7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElSUiBmaWVsZDpcbiIpOworCXByaW50X0FQSUNfYml0ZmllbGQoQVBJQ19JUlIpOworCisJaWYgKEFQSUNfSU5URUdSQVRFRCh2ZXIpKSB7ICAgICAgICAgICAgIC8qICE4MjQ4OURYICovCisJCWlmIChtYXhsdnQgPiAzKSAgICAgICAgIC8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8KKwkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOworCisJCXYgPSBhcGljX3JlYWQoQVBJQ19FU1IpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgRVNSOiAlMDh4XG4iLCB2KTsKKwl9CisKKwlpY3IgPSBhcGljX2ljcl9yZWFkKCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElDUjogJTA4eFxuIiwgKHUzMilpY3IpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJQ1IyOiAlMDh4XG4iLCAodTMyKShpY3IgPj4gMzIpKTsKKworCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUVDogJTA4eFxuIiwgdik7CisKKwlpZiAobWF4bHZ0ID4gMykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogUEMgaXMgTFZUIzQuICovCisJCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlRQQzogJTA4eFxuIiwgdik7CisJfQorCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUMDogJTA4eFxuIiwgdik7CisJdiA9IGFwaWNfcmVhZChBUElDX0xWVDEpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlQxOiAlMDh4XG4iLCB2KTsKKworCWlmIChtYXhsdnQgPiAyKSB7CQkJLyogRVJSIGlzIExWVCMzLiAqLworCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZURVJSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVEVSUjogJTA4eFxuIiwgdik7CisJfQorCisJdiA9IGFwaWNfcmVhZChBUElDX1RNSUNUKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1JQ1Q6ICUwOHhcbiIsIHYpOworCXYgPSBhcGljX3JlYWQoQVBJQ19UTUNDVCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRNQ0NUOiAlMDh4XG4iLCB2KTsKKwl2ID0gYXBpY19yZWFkKEFQSUNfVERDUik7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFREQ1I6ICUwOHhcbiIsIHYpOworCXByaW50aygiXG4iKTsKK30KKworX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X2FsbF9sb2NhbF9BUElDcyh2b2lkKQoreworCWludCBjcHU7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgcHJpbnRfbG9jYWxfQVBJQywgTlVMTCwgMSk7CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X1BJQyh2b2lkKQoreworCXVuc2lnbmVkIGludCB2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fREVCVUcgIlxucHJpbnRpbmcgUElDIGNvbnRlbnRzXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCisJdiA9IGluYigweGExKSA8PCA4IHwgaW5iKDB4MjEpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJTVI6ICUwNHhcbiIsIHYpOworCisJdiA9IGluYigweGEwKSA8PCA4IHwgaW5iKDB4MjApOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJUlI6ICUwNHhcbiIsIHYpOworCisJb3V0YigweDBiLDB4YTApOworCW91dGIoMHgwYiwweDIwKTsKKwl2ID0gaW5iKDB4YTApIDw8IDggfCBpbmIoMHgyMCk7CisJb3V0YigweDBhLDB4YTApOworCW91dGIoMHgwYSwweDIwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyAgSVNSOiAlMDR4XG4iLCB2KTsKKworCXYgPSBpbmIoMHg0ZDEpIDw8IDggfCBpbmIoMHg0ZDApOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDIEVMQ1I6ICUwNHhcbiIsIHYpOworfQorCitfX2FwaWNkZWJ1Z2luaXQoaW50KSBwcmludF9hbGxfSUNzKHZvaWQpCit7CisJcHJpbnRfUElDKCk7CisJcHJpbnRfYWxsX2xvY2FsX0FQSUNzKCk7CisJcHJpbnRfSU9fQVBJQygpOworCisJcmV0dXJuIDA7Cit9CisKK2ZzX2luaXRjYWxsKHByaW50X2FsbF9JQ3MpOworCisKKy8qIFdoZXJlIGlmIGFueXdoZXJlIGlzIHRoZSBpODI1OSBjb25uZWN0IGluIGV4dGVybmFsIGludCBtb2RlICovCitzdGF0aWMgc3RydWN0IHsgaW50IHBpbiwgYXBpYzsgfSBpb2FwaWNfaTgyNTkgPSB7IC0xLCAtMSB9OworCit2b2lkIF9faW5pdCBlbmFibGVfSU9fQVBJQyh2b2lkKQoreworCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKKwlpbnQgaTgyNTlfYXBpYywgaTgyNTlfcGluOworCWludCBhcGljOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaW50IGk7CisJaWYgKCFwaXJxc19lbmFibGVkKQorCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1BJUlFTOyBpKyspCisJCQlwaXJxX2VudHJpZXNbaV0gPSAtMTsKKyNlbmRpZgorCisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIElPLUFQSUMgSVJRIHJlZ2lzdGVycyAoPT0gI3BpbnMpOgorCSAqLworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCW5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY10gPSByZWdfMDEuYml0cy5lbnRyaWVzKzE7CisJfQorCWZvcihhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgeworCQlpbnQgcGluOworCQkvKiBTZWUgaWYgYW55IG9mIHRoZSBwaW5zIGlzIGluIEV4dElOVCBtb2RlICovCisJCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKKwkJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OworCQkJZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOworCisJCQkvKiBJZiB0aGUgaW50ZXJydXB0IGxpbmUgaXMgZW5hYmxlZCBhbmQgaW4gRXh0SW50IG1vZGUKKwkJCSAqIEkgaGF2ZSBmb3VuZCB0aGUgcGluIHdoZXJlIHRoZSBpODI1OSBpcyBjb25uZWN0ZWQuCisJCQkgKi8KKwkJCWlmICgoZW50cnkubWFzayA9PSAwKSAmJiAoZW50cnkuZGVsaXZlcnlfbW9kZSA9PSBkZXN0X0V4dElOVCkpIHsKKwkJCQlpb2FwaWNfaTgyNTkuYXBpYyA9IGFwaWM7CisJCQkJaW9hcGljX2k4MjU5LnBpbiAgPSBwaW47CisJCQkJZ290byBmb3VuZF9pODI1OTsKKwkJCX0KKwkJfQorCX0KKyBmb3VuZF9pODI1OToKKwkvKiBMb29rIHRvIHNlZSB3aGF0IGlmIHRoZSBNUCB0YWJsZSBoYXMgcmVwb3J0ZWQgdGhlIEV4dElOVCAqLworCS8qIElmIHdlIGNvdWxkIG5vdCBmaW5kIHRoZSBhcHByb3ByaWF0ZSBwaW4gYnkgbG9va2luZyBhdCB0aGUgaW9hcGljCisJICogdGhlIGk4MjU5IHByb2JhYmx5IGlzIG5vdCBjb25uZWN0ZWQgdGhlIGlvYXBpYyBidXQgZ2l2ZSB0aGUKKwkgKiBtcHRhYmxlIGEgY2hhbmNlIGFueXdheS4KKwkgKi8KKwlpODI1OV9waW4gID0gZmluZF9pc2FfaXJxX3BpbigwLCBtcF9FeHRJTlQpOworCWk4MjU5X2FwaWMgPSBmaW5kX2lzYV9pcnFfYXBpYygwLCBtcF9FeHRJTlQpOworCS8qIFRydXN0IHRoZSBNUCB0YWJsZSBpZiBub3RoaW5nIGlzIHNldHVwIGluIHRoZSBoYXJkd2FyZSAqLworCWlmICgoaW9hcGljX2k4MjU5LnBpbiA9PSAtMSkgJiYgKGk4MjU5X3BpbiA+PSAwKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFeHRJTlQgbm90IHNldHVwIGluIGhhcmR3YXJlIGJ1dCByZXBvcnRlZCBieSBNUCB0YWJsZVxuIik7CisJCWlvYXBpY19pODI1OS5waW4gID0gaTgyNTlfcGluOworCQlpb2FwaWNfaTgyNTkuYXBpYyA9IGk4MjU5X2FwaWM7CisJfQorCS8qIENvbXBsYWluIGlmIHRoZSBNUCB0YWJsZSBhbmQgdGhlIGhhcmR3YXJlIGRpc2FncmVlICovCisJaWYgKCgoaW9hcGljX2k4MjU5LmFwaWMgIT0gaTgyNTlfYXBpYykgfHwgKGlvYXBpY19pODI1OS5waW4gIT0gaTgyNTlfcGluKSkgJiYKKwkJKGk4MjU5X3BpbiA+PSAwKSAmJiAoaW9hcGljX2k4MjU5LnBpbiA+PSAwKSkKKwl7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkV4dElOVCBpbiBoYXJkd2FyZSBhbmQgTVAgdGFibGUgZGlmZmVyXG4iKTsKKwl9CisKKwkvKgorCSAqIERvIG5vdCB0cnVzdCB0aGUgSU8tQVBJQyBiZWluZyBlbXB0eSBhdCBib290dXAKKwkgKi8KKwljbGVhcl9JT19BUElDKCk7Cit9CisKKy8qCisgKiBOb3QgYW4gX19pbml0LCBuZWVkZWQgYnkgdGhlIHJlYm9vdCBjb2RlCisgKi8KK3ZvaWQgZGlzYWJsZV9JT19BUElDKHZvaWQpCit7CisJLyoKKwkgKiBDbGVhciB0aGUgSU8tQVBJQyBiZWZvcmUgcmVib290aW5nOgorCSAqLworCWNsZWFyX0lPX0FQSUMoKTsKKworCS8qCisJICogSWYgdGhlIGk4MjU5IGlzIHJvdXRlZCB0aHJvdWdoIGFuIElPQVBJQworCSAqIFB1dCB0aGF0IElPQVBJQyBpbiB2aXJ0dWFsIHdpcmUgbW9kZQorCSAqIHNvIGxlZ2FjeSBpbnRlcnJ1cHRzIGNhbiBiZSBkZWxpdmVyZWQuCisJICovCisJaWYgKGlvYXBpY19pODI1OS5waW4gIT0gLTEpIHsKKwkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CisKKwkJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7CisJCWVudHJ5Lm1hc2sgICAgICAgICAgICA9IDA7IC8qIEVuYWJsZWQgKi8KKwkJZW50cnkudHJpZ2dlciAgICAgICAgID0gMDsgLyogRWRnZSAqLworCQllbnRyeS5pcnIgICAgICAgICAgICAgPSAwOworCQllbnRyeS5wb2xhcml0eSAgICAgICAgPSAwOyAvKiBIaWdoICovCisJCWVudHJ5LmRlbGl2ZXJ5X3N0YXR1cyA9IDA7CisJCWVudHJ5LmRlc3RfbW9kZSAgICAgICA9IDA7IC8qIFBoeXNpY2FsICovCisJCWVudHJ5LmRlbGl2ZXJ5X21vZGUgICA9IGRlc3RfRXh0SU5UOyAvKiBFeHRJbnQgKi8KKwkJZW50cnkudmVjdG9yICAgICAgICAgID0gMDsKKwkJZW50cnkuZGVzdCAgICAgICAgICAgID0gcmVhZF9hcGljX2lkKCk7CisKKwkJLyoKKwkJICogQWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgorCQkgKi8KKwkJaW9hcGljX3dyaXRlX2VudHJ5KGlvYXBpY19pODI1OS5hcGljLCBpb2FwaWNfaTgyNTkucGluLCBlbnRyeSk7CisJfQorCisJZGlzY29ubmVjdF9ic3BfQVBJQyhpb2FwaWNfaTgyNTkucGluICE9IC0xKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfMzIKKy8qCisgKiBmdW5jdGlvbiB0byBzZXQgdGhlIElPLUFQSUMgcGh5c2ljYWwgSURzIGJhc2VkIG9uIHRoZQorICogdmFsdWVzIHN0b3JlZCBpbiB0aGUgTVBDIHRhYmxlLgorICoKKyAqIGJ5IE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4gIFR1ZSBEZWMgMjEgMTI6MjU6MDUgQ1NUIDE5OTkKKyAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfaW9hcGljX2lkc19mcm9tX21wYyh2b2lkKQoreworCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKKwlwaHlzaWRfbWFza190IHBoeXNfaWRfcHJlc2VudF9tYXA7CisJaW50IGFwaWM7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBvbGRfaWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh4ODZfcXVpcmtzLT5zZXR1cF9pb2FwaWNfaWRzICYmIHg4Nl9xdWlya3MtPnNldHVwX2lvYXBpY19pZHMoKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBEb24ndCBjaGVjayBJL08gQVBJQyBJRHMgZm9yIHhBUElDIHN5c3RlbXMuICBUaGV5IGhhdmUKKwkgKiBubyBtZWFuaW5nIHdpdGhvdXQgdGhlIHNlcmlhbCBBUElDIGJ1cy4KKwkgKi8KKwlpZiAoIShib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkKKwkJfHwgQVBJQ19YQVBJQyhhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkpCisJCXJldHVybjsKKwkvKgorCSAqIFRoaXMgaXMgYnJva2VuOyBhbnl0aGluZyB3aXRoIGEgcmVhbCBjcHUgY291bnQgaGFzIHRvCisJICogY2lyY3VtdmVudCB0aGlzIGlkaW9jeSByZWdhcmRsZXNzLgorCSAqLworCXBoeXNfaWRfcHJlc2VudF9tYXAgPSBpb2FwaWNfcGh5c19pZF9tYXAocGh5c19jcHVfcHJlc2VudF9tYXApOworCisJLyoKKwkgKiBTZXQgdGhlIElPQVBJQyBJRCB0byB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBNUEMgdGFibGUuCisJICovCisJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgeworCisJCS8qIFJlYWQgdGhlIHJlZ2lzdGVyIDAgdmFsdWUgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisKKwkJb2xkX2lkID0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQ7CisKKwkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgSU8tQVBJQyMlZCBJRCBpcyAlZCBpbiB0aGUgTVBDIHRhYmxlIS4uLlxuIiwKKwkJCQlhcGljLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7CisJCQlwcmludGsoS0VSTl9FUlIgIi4uLiBmaXhpbmcgdXAgdG8gJWQuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIiwKKwkJCQlyZWdfMDAuYml0cy5JRCk7CisJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9IHJlZ18wMC5iaXRzLklEOworCQl9CisKKwkJLyoKKwkJICogU2FuaXR5IGNoZWNrLCBpcyB0aGUgSUQgcmVhbGx5IGZyZWU/IEV2ZXJ5IEFQSUMgaW4gYQorCQkgKiBzeXN0ZW0gbXVzdCBoYXZlIGEgdW5pcXVlIElEIG9yIHdlIGdldCBsb3RzIG9mIG5pY2UKKwkJICogJ3N0dWNrIG9uIHNtcF9pbnZhbGlkYXRlX25lZWRlZCBJUEkgd2FpdCcgbWVzc2FnZXMuCisJCSAqLworCQlpZiAoY2hlY2tfYXBpY2lkX3VzZWQocGh5c19pZF9wcmVzZW50X21hcCwKKwkJCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBJTy1BUElDIyVkIElEICVkIGlzIGFscmVhZHkgdXNlZCEuLi5cbiIsCisJCQkJYXBpYywgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOworCQkJZm9yIChpID0gMDsgaSA8IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKTsgaSsrKQorCQkJCWlmICghcGh5c2lkX2lzc2V0KGksIHBoeXNfaWRfcHJlc2VudF9tYXApKQorCQkJCQlicmVhazsKKwkJCWlmIChpID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkKKwkJCQlwYW5pYygiTWF4IEFQSUMgSUQgZXhjZWVkZWQhXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiLi4uIGZpeGluZyB1cCB0byAlZC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iLAorCQkJCWkpOworCQkJcGh5c2lkX3NldChpLCBwaHlzX2lkX3ByZXNlbnRfbWFwKTsKKwkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID0gaTsKKwkJfSBlbHNlIHsKKwkJCXBoeXNpZF9tYXNrX3QgdG1wOworCQkJdG1wID0gYXBpY2lkX3RvX2NwdV9wcmVzZW50KG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKKwkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlNldHRpbmcgJWQgaW4gdGhlICIKKwkJCQkJInBoeXNfaWRfcHJlc2VudF9tYXBcbiIsCisJCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKKwkJCXBoeXNpZHNfb3IocGh5c19pZF9wcmVzZW50X21hcCwgcGh5c19pZF9wcmVzZW50X21hcCwgdG1wKTsKKwkJfQorCisKKwkJLyoKKwkJICogV2UgbmVlZCB0byBhZGp1c3QgdGhlIElSUSByb3V0aW5nIHRhYmxlCisJCSAqIGlmIHRoZSBJRCBjaGFuZ2VkLgorCQkgKi8KKwkJaWYgKG9sZF9pZCAhPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCkKKwkJCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKQorCQkJCWlmIChtcF9pcnFzW2ldLm1wX2RzdGFwaWMgPT0gb2xkX2lkKQorCQkJCQltcF9pcnFzW2ldLm1wX2RzdGFwaWMKKwkJCQkJCT0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQ7CisKKwkJLyoKKwkJICogUmVhZCB0aGUgcmlnaHQgdmFsdWUgZnJvbSB0aGUgTVBDIHRhYmxlIGFuZAorCQkgKiB3cml0ZSBpdCBpbnRvIHRoZSBJRCByZWdpc3Rlci4KKwkJICovCisJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCisJCQkiLi4uY2hhbmdpbmcgSU8tQVBJQyBwaHlzaWNhbCBBUElDIElEIHRvICVkIC4uLiIsCisJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7CisKKwkJcmVnXzAwLmJpdHMuSUQgPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCWlvX2FwaWNfd3JpdGUoYXBpYywgMCwgcmVnXzAwLnJhdyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisKKwkJLyoKKwkJICogU2FuaXR5IGNoZWNrCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJaWYgKHJlZ18wMC5iaXRzLklEICE9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKQorCQkJcHJpbnRrKCJjb3VsZCBub3Qgc2V0IElEIVxuIik7CisJCWVsc2UKKwkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBvay5cbiIpOworCX0KK30KKyNlbmRpZgorCitpbnQgbm9fdGltZXJfY2hlY2sgX19pbml0ZGF0YTsKKworc3RhdGljIGludCBfX2luaXQgbm90aW1lcmNoZWNrKGNoYXIgKnMpCit7CisJbm9fdGltZXJfY2hlY2sgPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgibm9fdGltZXJfY2hlY2siLCBub3RpbWVyY2hlY2spOworCisvKgorICogVGhlcmUgaXMgYSBuYXN0eSBidWcgaW4gc29tZSBvbGRlciBTTVAgYm9hcmRzLCB0aGVpciBtcHRhYmxlIGxpZXMKKyAqIGFib3V0IHRoZSB0aW1lciBJUlEuIFdlIGRvIHRoZSBmb2xsb3dpbmcgdG8gd29yayBhcm91bmQgdGhlIHNpdHVhdGlvbjoKKyAqCisgKgktIHRpbWVyIElSUSBkZWZhdWx0cyB0byBJTy1BUElDIElSUQorICoJLSBpZiB0aGlzIGZ1bmN0aW9uIGRldGVjdHMgdGhhdCB0aW1lciBJUlFzIGFyZSBkZWZ1bmN0LCB0aGVuIHdlIGZhbGwKKyAqCSAgYmFjayB0byBJU0EgdGltZXIgSVJRcworICovCitzdGF0aWMgaW50IF9faW5pdCB0aW1lcl9pcnFfd29ya3Modm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHQxID0gamlmZmllczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG5vX3RpbWVyX2NoZWNrKQorCQlyZXR1cm4gMTsKKworCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKwkvKiBMZXQgdGVuIHRpY2tzIHBhc3MuLi4gKi8KKwltZGVsYXkoKDEwICogMTAwMCkgLyBIWik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJLyoKKwkgKiBFeHBlY3QgYSBmZXcgdGlja3MgYXQgbGVhc3QsIHRvIGJlIHN1cmUgc29tZSBwb3NzaWJsZQorCSAqIGdsdWUgbG9naWMgZG9lcyBub3QgbG9jayB1cCBhZnRlciBvbmUgb3IgdHdvIGZpcnN0CisJICogdGlja3MgaW4gYSBub24tRXh0SU5UIG1vZGUuICBBbHNvIHRoZSBsb2NhbCBBUElDCisJICogbWlnaHQgaGF2ZSBjYWNoZWQgb25lIEV4dElOVCBpbnRlcnJ1cHQuICBGaW5hbGx5LCBhdAorCSAqIGxlYXN0IG9uZSB0aWNrIG1heSBiZSBsb3N0IGR1ZSB0byBkZWxheXMuCisJICovCisKKwkvKiBqaWZmaWVzIHdyYXA/ICovCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdDEgKyA0KSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbiB0aGUgU01QK0lPQVBJQyBjYXNlIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IHRoZXJlIGFyZSBhbiB1bnNwZWNpZmllZAorICogbnVtYmVyIG9mIHBlbmRpbmcgSVJRIGV2ZW50cyB1bmhhbmRsZWQuIFRoZXNlIGNhc2VzIGFyZSB2ZXJ5IHJhcmUsCisgKiBzbyB3ZSAncmVzZW5kJyB0aGVzZSBJUlFzIHZpYSBJUElzLCB0byB0aGUgc2FtZSBDUFUuIEl0J3MgbXVjaAorICogYmV0dGVyIHRvIGRvIGl0IHRoaXMgd2F5IGFzIHRodXMgd2UgZG8gbm90IGhhdmUgdG8gYmUgYXdhcmUgb2YKKyAqICdwZW5kaW5nJyBpbnRlcnJ1cHRzIGluIHRoZSBJUlEgcGF0aCwgZXhjZXB0IGF0IHRoaXMgcG9pbnQuCisgKi8KKy8qCisgKiBFZGdlIHRyaWdnZXJlZCBuZWVkcyB0byByZXNlbmQgYW55IGludGVycnVwdAorICogdGhhdCB3YXMgZGVsYXllZCBidXQgdGhpcyBpcyBub3cgaGFuZGxlZCBpbiB0aGUgZGV2aWNlCisgKiBpbmRlcGVuZGVudCBjb2RlLgorICovCisKKy8qCisgKiBTdGFydGluZyB1cCBhIGVkZ2UtdHJpZ2dlcmVkIElPLUFQSUMgaW50ZXJydXB0IGlzCisgKiBuYXN0eSAtIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZ2V0IHRoZSBlZGdlLgorICogSWYgaXQgaXMgYWxyZWFkeSBhc3NlcnRlZCBmb3Igc29tZSByZWFzb24sIHdlIG5lZWQKKyAqIHJldHVybiAxIHRvIGluZGljYXRlIHRoYXQgaXMgd2FzIHBlbmRpbmcuCisgKgorICogVGhpcyBpcyBub3QgY29tcGxldGUgLSB3ZSBzaG91bGQgYmUgYWJsZSB0byBmYWtlCisgKiBhbiBlZGdlIGV2ZW4gaWYgaXQgaXNuJ3Qgb24gdGhlIDgyNTlBLi4uCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2lvYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgd2FzX3BlbmRpbmcgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlpZiAoaXJxIDwgMTYpIHsKKwkJZGlzYWJsZV84MjU5QV9pcnEoaXJxKTsKKwkJaWYgKGk4MjU5QV9pcnFfcGVuZGluZyhpcnEpKQorCQkJd2FzX3BlbmRpbmcgPSAxOworCX0KKwlfX3VubWFza19JT19BUElDX2lycShpcnEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gd2FzX3BlbmRpbmc7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitzdGF0aWMgaW50IGlvYXBpY19yZXRyaWdnZXJfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyhpcnEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKwlzZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2ZfY3B1KGZpcnN0X2NwdShjZmctPmRvbWFpbikpLCBjZmctPnZlY3Rvcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAxOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgaW9hcGljX3JldHJpZ2dlcl9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlzZW5kX0lQSV9zZWxmKGlycV9jZmcoaXJxKS0+dmVjdG9yKTsKKworCXJldHVybiAxOworfQorI2VuZGlmCisKKy8qCisgKiBMZXZlbCBhbmQgZWRnZSB0cmlnZ2VyZWQgSU8tQVBJQyBpbnRlcnJ1cHRzIG5lZWQgZGlmZmVyZW50IGhhbmRsaW5nLAorICogc28gd2UgdXNlIHR3byBzZXBhcmF0ZSBJUlEgZGVzY3JpcHRvcnMuIEVkZ2UgdHJpZ2dlcmVkIElSUXMgY2FuIGJlCisgKiBoYW5kbGVkIHdpdGggdGhlIGxldmVsLXRyaWdnZXJlZCBkZXNjcmlwdG9yLCBidXQgdGhhdCBvbmUgaGFzIHNsaWdodGx5CisgKiBtb3JlIG92ZXJoZWFkLiBMZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0cyBjYW5ub3QgYmUgaGFuZGxlZCB3aXRoIHRoZQorICogZWRnZS10cmlnZ2VyZWQgaGFuZGxlciwgd2l0aG91dCByaXNraW5nIElSUSBzdG9ybXMgYW5kIG90aGVyIHVnbHkKKyAqIHJhY2VzLgorICovCisKKyNpZmRlZiBDT05GSUdfU01QCisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorc3RhdGljIHZvaWQgaXJfaXJxX21pZ3JhdGlvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCitzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksoaXJfbWlncmF0aW9uX3dvcmssIGlyX2lycV9taWdyYXRpb24pOworCisvKgorICogTWlncmF0ZSB0aGUgSU8tQVBJQyBpcnEgaW4gdGhlIHByZXNlbmNlIG9mIGludHItcmVtYXBwaW5nLgorICoKKyAqIEZvciBlZGdlIHRyaWdnZXJlZCwgaXJxIG1pZ3JhdGlvbiBpcyBhIHNpbXBsZSBhdG9taWMgdXBkYXRlKG9mIHZlY3RvcgorICogYW5kIGNwdSBkZXN0aW5hdGlvbikgb2YgSVJURSBhbmQgZmx1c2ggdGhlIGhhcmR3YXJlIGNhY2hlLgorICoKKyAqIEZvciBsZXZlbCB0cmlnZ2VyZWQsIHdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBpby1hcGljIFJURSBhc3dlbGwgd2l0aCB0aGUgdXBkYXRlCisgKiB2ZWN0b3IgaW5mb3JtYXRpb24sIGFsb25nIHdpdGggbW9kaWZ5aW5nIElSVEUgd2l0aCB2ZWN0b3IgYW5kIGRlc3RpbmF0aW9uLgorICogU28gaXJxIG1pZ3JhdGlvbiBmb3IgbGV2ZWwgdHJpZ2dlcmVkIGlzIGxpdHRsZSAgYml0IG1vcmUgY29tcGxleCBjb21wYXJlZCB0bworICogZWRnZSB0cmlnZ2VyZWQgbWlncmF0aW9uLiBCdXQgdGhlIGdvb2QgbmV3cyBpcywgd2UgdXNlIHRoZSBzYW1lIGFsZ29yaXRobQorICogZm9yIGxldmVsIHRyaWdnZXJlZCBtaWdyYXRpb24gYXMgd2UgaGF2ZSB0b2RheSwgb25seSBkaWZmZXJlbmNlIGJlaW5nLAorICogd2Ugbm93IGluaXRpYXRlIHRoZSBpcnEgbWlncmF0aW9uIGZyb20gcHJvY2VzcyBjb250ZXh0IGluc3RlYWQgb2YgdGhlCisgKiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBJbiBmdXR1cmUsIHdoZW4gd2UgZG8gYSBkaXJlY3RlZCBFT0kgKGNvbWJpbmVkIHdpdGggY3B1IEVPSSBicm9hZGNhc3QKKyAqIHN1cHByZXNzaW9uKSB0byB0aGUgSU8tQVBJQywgbGV2ZWwgdHJpZ2dlcmVkIGlycSBtaWdyYXRpb24gd2lsbCBhbHNvIGJlCisgKiBhcyBzaW1wbGUgYXMgZWRnZSB0cmlnZ2VyZWQgbWlncmF0aW9uIGFuZCB3ZSBjYW4gZG8gdGhlIGlycSBtaWdyYXRpb24KKyAqIHdpdGggYSBzaW1wbGUgYXRvbWljIHVwZGF0ZSB0byBJTy1BUElDIFJURS4KKyAqLworc3RhdGljIHZvaWQgbWlncmF0ZV9pb2FwaWNfaXJxKGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCWNwdW1hc2tfdCB0bXAsIGNsZWFudXBfbWFzazsKKwlzdHJ1Y3QgaXJ0ZSBpcnRlOworCWludCBtb2RpZnlfaW9hcGljX3J0ZTsKKwl1bnNpZ25lZCBpbnQgZGVzdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CisJaWYgKGNwdXNfZW1wdHkodG1wKSkKKwkJcmV0dXJuOworCisJaWYgKGdldF9pcnRlKGlycSwgJmlydGUpKQorCQlyZXR1cm47CisKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKKwkJcmV0dXJuOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOworCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCW1vZGlmeV9pb2FwaWNfcnRlID0gZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMOworCWlmIChtb2RpZnlfaW9hcGljX3J0ZSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJX190YXJnZXRfSU9fQVBJQ19pcnEoaXJxLCBkZXN0LCBjZmctPnZlY3Rvcik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJfQorCisJaXJ0ZS52ZWN0b3IgPSBjZmctPnZlY3RvcjsKKwlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdCk7CisKKwkvKgorCSAqIE1vZGlmaWVkIHRoZSBJUlRFIGFuZCBmbHVzaGVzIHRoZSBJbnRlcnJ1cHQgZW50cnkgY2FjaGUuCisJICovCisJbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7CisKKwlpZiAoY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSB7CisJCWNwdXNfYW5kKGNsZWFudXBfbWFzaywgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hcCk7CisJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50ID0gY3B1c193ZWlnaHQoY2xlYW51cF9tYXNrKTsKKwkJc2VuZF9JUElfbWFzayhjbGVhbnVwX21hc2ssIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKKwkJY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMDsKKwl9CisKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWwoaW50IGlycSkKK3sKKwlpbnQgcmV0ID0gLTE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCW1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKKworCWlmIChpb19hcGljX2xldmVsX2Fja19wZW5kaW5nKGlycSkpIHsKKwkJLyoKKwkJICogSW50ZXJydXB0IGluIHByb2dyZXNzLiBNaWdyYXRpbmcgaXJxIG5vdyB3aWxsIGNoYW5nZSB0aGUKKwkJICogdmVjdG9yIGluZm9ybWF0aW9uIGluIHRoZSBJTy1BUElDIFJURSBhbmQgdGhhdCB3aWxsIGNvbmZ1c2UKKwkJICogdGhlIEVPSSBicm9hZGNhc3QgcGVyZm9ybWVkIGJ5IGNwdS4KKwkJICogU28sIGRlbGF5IHRoZSBpcnEgbWlncmF0aW9uIHRvIHRoZSBuZXh0IGluc3RhbmNlLgorCQkgKi8KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpcl9taWdyYXRpb25fd29yaywgMSk7CisJCWdvdG8gdW5tYXNrOworCX0KKworCS8qIGV2ZXJ0aGluZyBpcyBjbGVhci4gd2UgaGF2ZSByaWdodCBvZiB3YXkgKi8KKwltaWdyYXRlX2lvYXBpY19pcnEoaXJxLCBkZXNjLT5wZW5kaW5nX21hc2spOworCisJcmV0ID0gMDsKKwlkZXNjLT5zdGF0dXMgJj0gfklSUV9NT1ZFX1BFTkRJTkc7CisJY3B1c19jbGVhcihkZXNjLT5wZW5kaW5nX21hc2spOworCit1bm1hc2s6CisJdW5tYXNrX0lPX0FQSUNfaXJxKGlycSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaXJfaXJxX21pZ3JhdGlvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJdW5zaWduZWQgaW50IGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKKwkJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCQlpZiAoIWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSB8fAorCQkJICAgICEoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykpIHsKKwkJCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9NT1ZFX1BFTkRJTkc7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBkZXNjLT5wZW5kaW5nX21hc2spOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQl9CisJfQorfQorCisvKgorICogTWlncmF0ZXMgdGhlIElSUSBkZXN0aW5hdGlvbiBpbiB0aGUgcHJvY2VzcyBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTCkgeworCQlkZXNjLT5zdGF0dXMgfD0gSVJRX01PVkVfUEVORElORzsKKwkJZGVzYy0+cGVuZGluZ19tYXNrID0gbWFzazsKKwkJbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWwoaXJxKTsKKwkJcmV0dXJuOworCX0KKworCW1pZ3JhdGVfaW9hcGljX2lycShpcnEsIG1hc2spOworfQorI2VuZGlmCisKK2FzbWxpbmthZ2Ugdm9pZCBzbXBfaXJxX21vdmVfY2xlYW51cF9pbnRlcnJ1cHQodm9pZCkKK3sKKwl1bnNpZ25lZCB2ZWN0b3IsIG1lOworCWFja19BUElDX2lycSgpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwlleGl0X2lkbGUoKTsKKyNlbmRpZgorCWlycV9lbnRlcigpOworCisJbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJZm9yICh2ZWN0b3IgPSBGSVJTVF9FWFRFUk5BTF9WRUNUT1I7IHZlY3RvciA8IE5SX1ZFQ1RPUlM7IHZlY3RvcisrKSB7CisJCXVuc2lnbmVkIGludCBpcnE7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwkJc3RydWN0IGlycV9jZmcgKmNmZzsKKwkJaXJxID0gX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdOworCisJCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCQlpZiAoIWRlc2MpCisJCQljb250aW51ZTsKKworCQljZmcgPSBpcnFfY2ZnKGlycSk7CisJCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJCWlmICghY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQpCisJCQlnb3RvIHVubG9jazsKKworCQlpZiAoKHZlY3RvciA9PSBjZmctPnZlY3RvcikgJiYgY3B1X2lzc2V0KG1lLCBjZmctPmRvbWFpbikpCisJCQlnb3RvIHVubG9jazsKKworCQlfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl0gPSAtMTsKKwkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQtLTsKK3VubG9jazoKKwkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCX0KKworCWlycV9leGl0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGlycV9jb21wbGV0ZV9tb3ZlKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcoaXJxKTsKKwl1bnNpZ25lZCB2ZWN0b3IsIG1lOworCisJaWYgKGxpa2VseSghY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSkKKwkJcmV0dXJuOworCisJdmVjdG9yID0gfmdldF9pcnFfcmVncygpLT5vcmlnX2F4OworCW1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWlmICgodmVjdG9yID09IGNmZy0+dmVjdG9yKSAmJiBjcHVfaXNzZXQobWUsIGNmZy0+ZG9tYWluKSkgeworCQljcHVtYXNrX3QgY2xlYW51cF9tYXNrOworCisJCWNwdXNfYW5kKGNsZWFudXBfbWFzaywgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hcCk7CisJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50ID0gY3B1c193ZWlnaHQoY2xlYW51cF9tYXNrKTsKKwkJc2VuZF9JUElfbWFzayhjbGVhbnVwX21hc2ssIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKKwkJY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMDsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGlycV9jb21wbGV0ZV9tb3ZlKHVuc2lnbmVkIGludCBpcnEpIHt9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorc3RhdGljIHZvaWQgYWNrX3gyYXBpY19sZXZlbCh1bnNpZ25lZCBpbnQgaXJxKQoreworCWFja194MkFQSUNfaXJxKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFja194MmFwaWNfZWRnZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWFja194MkFQSUNfaXJxKCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYWNrX2FwaWNfZWRnZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlycV9jb21wbGV0ZV9tb3ZlKGlycSk7CisJbW92ZV9uYXRpdmVfaXJxKGlycSk7CisJYWNrX0FQSUNfaXJxKCk7Cit9CisKK2F0b21pY190IGlycV9taXNfY291bnQ7CisKK3N0YXRpYyB2b2lkIGFja19hcGljX2xldmVsKHVuc2lnbmVkIGludCBpcnEpCit7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXVuc2lnbmVkIGxvbmcgdjsKKwlpbnQgaTsKKyNlbmRpZgorCWludCBkb191bm1hc2tfaXJxID0gMDsKKworCWlycV9jb21wbGV0ZV9tb3ZlKGlycSk7CisjaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKKwkvKiBJZiB3ZSBhcmUgbW92aW5nIHRoZSBpcnEgd2UgbmVlZCB0byBtYXNrIGl0ICovCisJaWYgKHVubGlrZWx5KGlycV90b19kZXNjKGlycSktPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpKSB7CisJCWRvX3VubWFza19pcnEgPSAxOworCQltYXNrX0lPX0FQSUNfaXJxKGlycSk7CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyoKKwkqIEl0IGFwcGVhcnMgdGhlcmUgaXMgYW4gZXJyYXR1bSB3aGljaCBhZmZlY3RzIGF0IGxlYXN0IHZlcnNpb24gMHgxMQorCSogb2YgSS9PIEFQSUMgKHRoYXQncyB0aGUgODIwOTNBQSBhbmQgY29yZXMgaW50ZWdyYXRlZCBpbnRvIHZhcmlvdXMKKwkqIGNoaXBzZXRzKS4gIFVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyBhIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQgaXMKKwkqIGVycm9uZW91c2x5IGRlbGl2ZXJlZCBhcyBlZGdlLXRyaWdnZXJlZCBvbmUgYnV0IHRoZSByZXNwZWN0aXZlIElSUgorCSogYml0IGdldHMgc2V0IG5ldmVydGhlbGVzcy4gIEFzIGEgcmVzdWx0IHRoZSBJL08gdW5pdCBleHBlY3RzIGFuIEVPSQorCSogbWVzc2FnZSBidXQgaXQgd2lsbCBuZXZlciBhcnJpdmUgYW5kIGZ1cnRoZXIgaW50ZXJydXB0cyBhcmUgYmxvY2tlZAorCSogZnJvbSB0aGUgc291cmNlLiAgVGhlIGV4YWN0IHJlYXNvbiBpcyBzbyBmYXIgdW5rbm93biwgYnV0IHRoZQorCSogcGhlbm9tZW5vbiB3YXMgb2JzZXJ2ZWQgd2hlbiB0d28gY29uc2VjdXRpdmUgaW50ZXJydXB0IHJlcXVlc3RzCisJKiBmcm9tIGEgZ2l2ZW4gc291cmNlIGdldCBkZWxpdmVyZWQgdG8gdGhlIHNhbWUgQ1BVIGFuZCB0aGUgc291cmNlIGlzCisJKiB0ZW1wb3JhcmlseSBkaXNhYmxlZCBpbiBiZXR3ZWVuLgorCSoKKwkqIEEgd29ya2Fyb3VuZCBpcyB0byBzaW11bGF0ZSBhbiBFT0kgbWVzc2FnZSBtYW51YWxseS4gIFdlIGFjaGlldmUgaXQKKwkqIGJ5IHNldHRpbmcgdGhlIHRyaWdnZXIgbW9kZSB0byBlZGdlIGFuZCB0aGVuIHRvIGxldmVsIHdoZW4gdGhlIGVkZ2UKKwkqIHRyaWdnZXIgbW9kZSBnZXRzIGRldGVjdGVkIGluIHRoZSBUTVIgb2YgYSBsb2NhbCBBUElDIGZvciBhCisJKiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0LiAgV2UgbWFzayB0aGUgc291cmNlIGZvciB0aGUgdGltZSBvZiB0aGUKKwkqIG9wZXJhdGlvbiB0byBwcmV2ZW50IGFuIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBlc2NhcGluZyBtZWFud2hpbGUuCisJKiBUaGUgaWRlYSBpcyBmcm9tIE1hbmZyZWQgU3ByYXVsLiAgLS1tYWNybworCSovCisJaSA9IGlycV9jZmcoaXJxKS0+dmVjdG9yOworCisJdiA9IGFwaWNfcmVhZChBUElDX1RNUiArICgoaSAmIH4weDFmKSA+PiAxKSk7CisjZW5kaWYKKworCS8qCisJICogV2UgbXVzdCBhY2tub3dsZWRnZSB0aGUgaXJxIGJlZm9yZSB3ZSBtb3ZlIGl0IG9yIHRoZSBhY2tub3dsZWRnZSB3aWxsCisJICogbm90IHByb3BhZ2F0ZSBwcm9wZXJseS4KKwkgKi8KKwlhY2tfQVBJQ19pcnEoKTsKKworCS8qIE5vdyB3ZSBjYW4gbW92ZSBhbmQgcmVuYWJsZSB0aGUgaXJxICovCisJaWYgKHVubGlrZWx5KGRvX3VubWFza19pcnEpKSB7CisJCS8qIE9ubHkgbWlncmF0ZSB0aGUgaXJxIGlmIHRoZSBhY2sgaGFzIGJlZW4gcmVjZWl2ZWQuCisJCSAqCisJCSAqIE9uIHJhcmUgb2NjYXNpb25zIHRoZSBicm9hZGNhc3QgbGV2ZWwgdHJpZ2dlcmVkIGFjayBnZXRzCisJCSAqIGRlbGF5ZWQgZ29pbmcgdG8gaW9hcGljcywgYW5kIGlmIHdlIHJlcHJvZ3JhbSB0aGUKKwkJICogdmVjdG9yIHdoaWxlIFJlbW90ZSBJUlIgaXMgc3RpbGwgc2V0IHRoZSBpcnEgd2lsbCBuZXZlcgorCQkgKiBmaXJlIGFnYWluLgorCQkgKgorCQkgKiBUbyBwcmV2ZW50IHRoaXMgc2NlbmFyaW8gd2UgcmVhZCB0aGUgUmVtb3RlIElSUiBiaXQKKwkJICogb2YgdGhlIGlvYXBpYy4gIFRoaXMgaGFzIHR3byBlZmZlY3RzLgorCQkgKiAtIE9uIGFueSBzYW5lIHN5c3RlbSB0aGUgcmVhZCBvZiB0aGUgaW9hcGljIHdpbGwKKwkJICogICBmbHVzaCB3cml0ZXMgKGFuZCBhY2tzKSBnb2luZyB0byB0aGUgaW9hcGljIGZyb20KKwkJICogICB0aGlzIGNwdS4KKwkJICogLSBXZSBnZXQgdG8gc2VlIGlmIHRoZSBBQ0sgaGFzIGFjdHVhbGx5IGJlZW4gZGVsaXZlcmVkLgorCQkgKgorCQkgKiBCYXNlZCBvbiBmYWlsZWQgZXhwZXJpbWVudHMgb2YgcmVwcm9ncmFtbWluZyB0aGUKKwkJICogaW9hcGljIGVudHJ5IGZyb20gb3V0c2lkZSBvZiBpcnEgY29udGV4dCBzdGFydGluZworCQkgKiB3aXRoIG1hc2tpbmcgdGhlIGlvYXBpYyBlbnRyeSBhbmQgdGhlbiBwb2xsaW5nIHVudGlsCisJCSAqIFJlbW90ZSBJUlIgd2FzIGNsZWFyIGJlZm9yZSByZXByb2dyYW1taW5nIHRoZQorCQkgKiBpb2FwaWMgSSBkb24ndCB0cnVzdCB0aGUgUmVtb3RlIElSUiBiaXQgdG8gYmUKKwkJICogY29tcGxldGV5IGFjY3VyYXRlLgorCQkgKgorCQkgKiBIb3dldmVyIHRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gb3RoZXIgd2F5IHRvIHBsdWcKKwkJICogdGhpcyByYWNlLCBzbyBpZiB0aGUgUmVtb3RlIElSUiBiaXQgaXMgbm90CisJCSAqIGFjY3VyYXRlIGFuZCBpcyBjYXVzaW5nIHByb2JsZW1zIHRoZW4gaXQgaXMgYSBoYXJkd2FyZSBidWcKKwkJICogYW5kIHlvdSBjYW4gZ28gdGFsayB0byB0aGUgY2hpcHNldCB2ZW5kb3IgYWJvdXQgaXQuCisJCSAqLworCQlpZiAoIWlvX2FwaWNfbGV2ZWxfYWNrX3BlbmRpbmcoaXJxKSkKKwkJCW1vdmVfbWFza2VkX2lycShpcnEpOworCQl1bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKCEodiAmICgxIDw8IChpICYgMHgxZikpKSkgeworCQlhdG9taWNfaW5jKCZpcnFfbWlzX2NvdW50KTsKKwkJc3Bpbl9sb2NrKCZpb2FwaWNfbG9jayk7CisJCV9fbWFza19hbmRfZWRnZV9JT19BUElDX2lycShpcnEpOworCQlfX3VubWFza19hbmRfbGV2ZWxfSU9fQVBJQ19pcnEoaXJxKTsKKwkJc3Bpbl91bmxvY2soJmlvYXBpY19sb2NrKTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpb2FwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQk9ICJJTy1BUElDIiwKKwkuc3RhcnR1cAk9IHN0YXJ0dXBfaW9hcGljX2lycSwKKwkubWFzawkJPSBtYXNrX0lPX0FQSUNfaXJxLAorCS51bm1hc2sJCT0gdW5tYXNrX0lPX0FQSUNfaXJxLAorCS5hY2sJCT0gYWNrX2FwaWNfZWRnZSwKKwkuZW9pCQk9IGFja19hcGljX2xldmVsLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5CT0gc2V0X2lvYXBpY19hZmZpbml0eV9pcnEsCisjZW5kaWYKKwkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCit9OworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXJfaW9hcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAiSVItSU8tQVBJQyIsCisJLnN0YXJ0dXAJPSBzdGFydHVwX2lvYXBpY19pcnEsCisJLm1hc2sJCT0gbWFza19JT19BUElDX2lycSwKKwkudW5tYXNrCQk9IHVubWFza19JT19BUElDX2lycSwKKwkuYWNrCQk9IGFja194MmFwaWNfZWRnZSwKKwkuZW9pCQk9IGFja194MmFwaWNfbGV2ZWwsCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkJPSBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycSwKKyNlbmRpZgorCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKK307CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfSU9fQVBJQ190cmFwcyh2b2lkKQoreworCWludCBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisKKwkvKgorCSAqIE5PVEUhIFRoZSBsb2NhbCBBUElDIGlzbid0IHZlcnkgZ29vZCBhdCBoYW5kbGluZworCSAqIG11bHRpcGxlIGludGVycnVwdHMgYXQgdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgorCSAqIEFzIHRoZSBpbnRlcnJ1cHQgbGV2ZWwgaXMgZGV0ZXJtaW5lZCBieSB0YWtpbmcgdGhlCisJICogdmVjdG9yIG51bWJlciBhbmQgc2hpZnRpbmcgdGhhdCByaWdodCBieSA0LCB3ZQorCSAqIHdhbnQgdG8gc3ByZWFkIHRoZXNlIG91dCBhIGJpdCBzbyB0aGF0IHRoZXkgZG9uJ3QKKwkgKiBhbGwgZmFsbCBpbiB0aGUgc2FtZSBpbnRlcnJ1cHQgbGV2ZWwuCisJICoKKwkgKiBBbHNvLCB3ZSd2ZSBnb3QgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdHJhc2ggZ2F0ZQorCSAqIDB4ODAsIGJlY2F1c2UgaW50IDB4ODAgaXMgaG0sIGtpbmQgb2YgaW1wb3J0YW50aXNoLiA7KQorCSAqLworCWZvcl9lYWNoX2lycV9jZmcoaXJxLCBjZmcpIHsKKwkJaWYgKElPX0FQSUNfSVJRKGlycSkgJiYgIWNmZy0+dmVjdG9yKSB7CisJCQkvKgorCQkJICogSG1tLi4gV2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeSBmb3IgdGhpcywKKwkJCSAqIHNvIGRlZmF1bHQgdG8gYW4gb2xkLWZhc2hpb25lZCA4MjU5CisJCQkgKiBpbnRlcnJ1cHQgaWYgd2UgY2FuLi4KKwkJCSAqLworCQkJaWYgKGlycSA8IDE2KQorCQkJCW1ha2VfODI1OUFfaXJxKGlycSk7CisJCQllbHNlIHsKKwkJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJCQkvKiBTdHJhbmdlLiBPaCwgd2VsbC4uICovCisJCQkJZGVzYy0+Y2hpcCA9ICZub19pcnFfY2hpcDsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAqIFRoZSBsb2NhbCBBUElDIGlycS1jaGlwIGltcGxlbWVudGF0aW9uOgorICovCisKK3N0YXRpYyB2b2lkIG1hc2tfbGFwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyB2OworCisJdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKK30KKworc3RhdGljIHZvaWQgdW5tYXNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgdjsKKworCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiAmIH5BUElDX0xWVF9NQVNLRUQpOworfQorCitzdGF0aWMgdm9pZCBhY2tfbGFwaWNfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQoreworCWFja19BUElDX2lycSgpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGxhcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAibG9jYWwtQVBJQyIsCisJLm1hc2sJCT0gbWFza19sYXBpY19pcnEsCisJLnVubWFzawkJPSB1bm1hc2tfbGFwaWNfaXJxLAorCS5hY2sJCT0gYWNrX2xhcGljX2lycSwKK307CisKK3N0YXRpYyB2b2lkIGxhcGljX3JlZ2lzdGVyX2ludHIoaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5zdGF0dXMgJj0gfklSUV9MRVZFTDsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZsYXBpY19jaGlwLCBoYW5kbGVfZWRnZV9pcnEsCisJCQkJICAgICAgImVkZ2UiKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNldHVwX25taSh2b2lkKQoreworCS8qCisJICogRGlydHkgdHJpY2sgdG8gZW5hYmxlIHRoZSBOTUkgd2F0Y2hkb2cgLi4uCisJICogV2UgcHV0IHRoZSA4MjU5QSBtYXN0ZXIgaW50byBBRU9JIG1vZGUgYW5kCisJICogdW5tYXNrIG9uIGFsbCBsb2NhbCBBUElDcyBMVlQwIGFzIE5NSS4KKwkgKgorCSAqIFRoZSBpZGVhIHRvIHVzZSB0aGUgODI1OUEgaW4gQUVPSSBtb2RlICgnODI1OUEgVmlydHVhbCBXaXJlJykKKwkgKiBpcyBmcm9tIE1hY2llaiBXLiBSb3p5Y2tpIC0gc28gd2UgZG8gbm90IGhhdmUgdG8gRU9JIGZyb20KKwkgKiB0aGUgTk1JIGhhbmRsZXIgb3IgdGhlIHRpbWVyIGludGVycnVwdC4KKwkgKi8KKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTyAiYWN0aXZhdGluZyBOTUkgV2F0Y2hkb2cgLi4uIik7CisKKwllbmFibGVfTk1JX3Rocm91Z2hfTFZUMCgpOworCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIGRvbmUuXG4iKTsKK30KKworLyoKKyAqIFRoaXMgbG9va3MgYSBiaXQgaGFja2lzaCBidXQgaXQncyBhYm91dCB0aGUgb25seSBvbmUgd2F5IG9mIHNlbmRpbmcKKyAqIGEgZmV3IElOVEEgY3ljbGVzIHRvIDgyNTlBcyBhbmQgYW55IGFzc29jaWF0ZWQgZ2x1ZSBsb2dpYy4gIElDUiBkb2VzCisgKiBub3Qgc3VwcG9ydCB0aGUgRXh0SU5UIG1vZGUsIHVuZm9ydHVuYXRlbHkuICBXZSBuZWVkIHRvIHNlbmQgdGhlc2UKKyAqIGN5Y2xlcyBhcyBzb21lIGk4MjQ4OURYLWJhc2VkIGJvYXJkcyBoYXZlIGdsdWUgbG9naWMgdGhhdCBrZWVwcyB0aGUKKyAqIDgyNTlBIGludGVycnVwdCBsaW5lIGFzc2VydGVkIHVudGlsIElOVEEuICAtLW1hY3JvCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgdW5sb2NrX0V4dElOVF9sb2dpYyh2b2lkKQoreworCWludCBhcGljLCBwaW4sIGk7CisJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnkwLCBlbnRyeTE7CisJdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2wsIHNhdmVfZnJlcV9zZWxlY3Q7CisKKwlwaW4gID0gZmluZF9pc2FfaXJxX3Bpbig4LCBtcF9JTlQpOworCWlmIChwaW4gPT0gLTEpIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm47CisJfQorCWFwaWMgPSBmaW5kX2lzYV9pcnFfYXBpYyg4LCBtcF9JTlQpOworCWlmIChhcGljID09IC0xKSB7CisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuOworCX0KKworCWVudHJ5MCA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7CisJY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKKworCW1lbXNldCgmZW50cnkxLCAwLCBzaXplb2YoZW50cnkxKSk7CisKKwllbnRyeTEuZGVzdF9tb2RlID0gMDsJCQkvKiBwaHlzaWNhbCBkZWxpdmVyeSAqLworCWVudHJ5MS5tYXNrID0gMDsJCQkvKiB1bm1hc2sgSVJRIG5vdyAqLworCWVudHJ5MS5kZXN0ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJZW50cnkxLmRlbGl2ZXJ5X21vZGUgPSBkZXN0X0V4dElOVDsKKwllbnRyeTEucG9sYXJpdHkgPSBlbnRyeTAucG9sYXJpdHk7CisJZW50cnkxLnRyaWdnZXIgPSAwOworCWVudHJ5MS52ZWN0b3IgPSAwOworCisJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkxKTsKKworCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CisJc2F2ZV9mcmVxX3NlbGVjdCA9IENNT1NfUkVBRChSVENfRlJFUV9TRUxFQ1QpOworCUNNT1NfV1JJVEUoKHNhdmVfZnJlcV9zZWxlY3QgJiB+UlRDX1JBVEVfU0VMRUNUKSB8IDB4NiwKKwkJICAgUlRDX0ZSRVFfU0VMRUNUKTsKKwlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCB8IFJUQ19QSUUsIFJUQ19DT05UUk9MKTsKKworCWkgPSAxMDA7CisJd2hpbGUgKGktLSA+IDApIHsKKwkJbWRlbGF5KDEwKTsKKwkJaWYgKChDTU9TX1JFQUQoUlRDX0lOVFJfRkxBR1MpICYgUlRDX1BGKSA9PSBSVENfUEYpCisJCQlpIC09IDEwOworCX0KKworCUNNT1NfV1JJVEUoc2F2ZV9jb250cm9sLCBSVENfQ09OVFJPTCk7CisJQ01PU19XUklURShzYXZlX2ZyZXFfc2VsZWN0LCBSVENfRlJFUV9TRUxFQ1QpOworCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7CisKKwlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeTApOworfQorCitzdGF0aWMgaW50IGRpc2FibGVfdGltZXJfcGluXzEgX19pbml0ZGF0YTsKKy8qIEFjdHVhbGx5IHRoZSBuZXh0IGlzIG9ic29sZXRlLCBidXQga2VlcCBpdCBmb3IgcGFyYW5vaWQgcmVhc29ucyAtQUsgKi8KK3N0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfdGltZXJfcGluX3NldHVwKGNoYXIgKmFyZykKK3sKKwlkaXNhYmxlX3RpbWVyX3Bpbl8xID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJkaXNhYmxlX3RpbWVyX3Bpbl8xIiwgZGlzYWJsZV90aW1lcl9waW5fc2V0dXApOworCitpbnQgdGltZXJfdGhyb3VnaF84MjU5IF9faW5pdGRhdGE7CisKKy8qCisgKiBUaGlzIGNvZGUgbWF5IGxvb2sgYSBiaXQgcGFyYW5vaWQsIGJ1dCBpdCdzIHN1cHBvc2VkIHRvIGNvb3BlcmF0ZSB3aXRoCisgKiBhIHdpZGUgcmFuZ2Ugb2YgYm9hcmRzIGFuZCBCSU9TIGJ1Z3MuICBGb3J0dW5hdGVseSBvbmx5IHRoZSB0aW1lciBJUlEKKyAqIGlzIHNvIHNjcmV3eS4gIFRoYW5rcyB0byBCcmlhbiBQZXJraW5zIGZvciB0ZXN0aW5nL2hhY2tpbmcgdGhpcyBiZWFzdAorICogZmFuYXRpY2FsbHkgb24gaGlzIHRydWx5IGJ1Z2d5IGJvYXJkLgorICoKKyAqIEZJWE1FOiByZWFsbHkgbmVlZCB0byByZXZhbXAgdGhpcyBmb3IgYWxsIHBsYXRmb3Jtcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBjaGVja190aW1lcih2b2lkKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnKDApOworCWludCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdmVyOworCWludCBub19waW4xID0gMDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXZlciA9IGFwaWNfcmVhZChBUElDX0xWUik7CisJdmVyID0gR0VUX0FQSUNfVkVSU0lPTih2ZXIpOworCisJLyoKKwkgKiBnZXQvc2V0IHRoZSB0aW1lciBJUlEgdmVjdG9yOgorCSAqLworCWRpc2FibGVfODI1OUFfaXJxKDApOworCWFzc2lnbl9pcnFfdmVjdG9yKDAsIFRBUkdFVF9DUFVTKTsKKworCS8qCisJICogQXMgSVJRMCBpcyB0byBiZSBlbmFibGVkIGluIHRoZSA4MjU5QSwgdGhlIHZpcnR1YWwKKwkgKiB3aXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiB0aGUgbG9jYWwgQVBJQy4gIEFsc28KKwkgKiB0aW1lciBpbnRlcnJ1cHRzIG5lZWQgdG8gYmUgYWNrbm93bGVkZ2VkIG1hbnVhbGx5IGluCisJICogdGhlIDgyNTlBIGZvciB0aGUgaTgyNDg5RFggd2hlbiB1c2luZyB0aGUgTk1JCisJICogd2F0Y2hkb2cgYXMgdGhhdCBBUElDIHRyZWF0cyBOTUlzIGFzIGxldmVsLXRyaWdnZXJlZC4KKwkgKiBUaGUgQUVPSSBtb2RlIHdpbGwgZmluaXNoIHRoZW0gaW4gdGhlIDgyNTlBCisJICogYXV0b21hdGljYWxseS4KKwkgKi8KKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9FWFRJTlQpOworCWluaXRfODI1OUEoMSk7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXRpbWVyX2FjayA9IChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMgJiYgIUFQSUNfSU5URUdSQVRFRCh2ZXIpKTsKKyNlbmRpZgorCisJcGluMSAgPSBmaW5kX2lzYV9pcnFfcGluKDAsIG1wX0lOVCk7CisJYXBpYzEgPSBmaW5kX2lzYV9pcnFfYXBpYygwLCBtcF9JTlQpOworCXBpbjIgID0gaW9hcGljX2k4MjU5LnBpbjsKKwlhcGljMiA9IGlvYXBpY19pODI1OS5hcGljOworCisJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLlRJTUVSOiB2ZWN0b3I9MHglMDJYICIKKwkJICAgICJhcGljMT0lZCBwaW4xPSVkIGFwaWMyPSVkIHBpbjI9JWRcbiIsCisJCSAgICBjZmctPnZlY3RvciwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKKworCS8qCisJICogU29tZSBCSU9TIHdyaXRlcnMgYXJlIGNsdWVsZXNzIGFuZCByZXBvcnQgdGhlIEV4dElOVEEKKwkgKiBJL08gQVBJQyBpbnB1dCBmcm9tIHRoZSBjYXNjYWRlZCA4MjU5QSBhcyB0aGUgdGltZXIKKwkgKiBpbnRlcnJ1cHQgaW5wdXQuICBTbyBqdXN0IGluIGNhc2UsIGlmIG9ubHkgb25lIHBpbgorCSAqIHdhcyBmb3VuZCBhYm92ZSwgdHJ5IGl0IGJvdGggZGlyZWN0bHkgYW5kIHRocm91Z2ggdGhlCisJICogODI1OUEuCisJICovCisJaWYgKHBpbjEgPT0gLTEpIHsKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKKwkJCXBhbmljKCJCSU9TIGJ1ZzogdGltZXIgbm90IGNvbm5lY3RlZCB0byBJTy1BUElDIik7CisjZW5kaWYKKwkJcGluMSA9IHBpbjI7CisJCWFwaWMxID0gYXBpYzI7CisJCW5vX3BpbjEgPSAxOworCX0gZWxzZSBpZiAocGluMiA9PSAtMSkgeworCQlwaW4yID0gcGluMTsKKwkJYXBpYzIgPSBhcGljMTsKKwl9CisKKwlpZiAocGluMSAhPSAtMSkgeworCQkvKgorCQkgKiBPaywgZG9lcyBJUlEwIHRocm91Z2ggdGhlIElPQVBJQyB3b3JrPworCQkgKi8KKwkJaWYgKG5vX3BpbjEpIHsKKwkJCWFkZF9waW5fdG9faXJxKDAsIGFwaWMxLCBwaW4xKTsKKwkJCXNldHVwX3RpbWVyX0lSUTBfcGluKGFwaWMxLCBwaW4xLCBjZmctPnZlY3Rvcik7CisJCX0KKwkJdW5tYXNrX0lPX0FQSUNfaXJxKDApOworCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKKwkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKKwkJCQlzZXR1cF9ubWkoKTsKKwkJCQllbmFibGVfODI1OUFfaXJxKDApOworCQkJfQorCQkJaWYgKGRpc2FibGVfdGltZXJfcGluXzEgPiAwKQorCQkJCWNsZWFyX0lPX0FQSUNfcGluKDAsIHBpbjEpOworCQkJZ290byBvdXQ7CisJCX0KKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKKwkJCXBhbmljKCJ0aW1lciBkb2Vzbid0IHdvcmsgdGhyb3VnaCBJbnRlcnJ1cHQtcmVtYXBwZWQgSU8tQVBJQyIpOworI2VuZGlmCisJCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMxLCBwaW4xKTsKKwkJaWYgKCFub19waW4xKQorCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9FUlIgIi4uTVAtQklPUyBidWc6ICIKKwkJCQkgICAgIjgyNTQgdGltZXIgbm90IGNvbm5lY3RlZCB0byBJTy1BUElDXG4iKTsKKworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgIgorCQkJICAgICIoSVJRMCkgdGhyb3VnaCB0aGUgODI1OUEgLi4uXG4iKTsKKwkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCisJCQkgICAgIi4uLi4uIChmb3VuZCBhcGljICVkIHBpbiAlZCkgLi4uXG4iLCBhcGljMiwgcGluMik7CisJCS8qCisJCSAqIGxlZ2FjeSBkZXZpY2VzIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gSU8gQVBJQyAjMAorCQkgKi8KKwkJcmVwbGFjZV9waW5fYXRfaXJxKDAsIGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMik7CisJCXNldHVwX3RpbWVyX0lSUTBfcGluKGFwaWMyLCBwaW4yLCBjZmctPnZlY3Rvcik7CisJCXVubWFza19JT19BUElDX2lycSgwKTsKKwkJZW5hYmxlXzgyNTlBX2lycSgwKTsKKwkJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7CisJCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uLi4gd29ya3MuXG4iKTsKKwkJCXRpbWVyX3Rocm91Z2hfODI1OSA9IDE7CisJCQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7CisJCQkJZGlzYWJsZV84MjU5QV9pcnEoMCk7CisJCQkJc2V0dXBfbm1pKCk7CisJCQkJZW5hYmxlXzgyNTlBX2lycSgwKTsKKwkJCX0KKwkJCWdvdG8gb3V0OworCQl9CisJCS8qCisJCSAqIENsZWFudXAsIGp1c3QgaW4gY2FzZSAuLi4KKwkJICovCisJCWRpc2FibGVfODI1OUFfaXJxKDApOworCQljbGVhcl9JT19BUElDX3BpbihhcGljMiwgcGluMik7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4uLiBmYWlsZWQuXG4iKTsKKwl9CisKKwlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fV0FSTklORyAidGltZXIgZG9lc24ndCB3b3JrICIKKwkJCSAgICAidGhyb3VnaCB0aGUgSU8tQVBJQyAtIGRpc2FibGluZyBOTUkgV2F0Y2hkb2chXG4iKTsKKwkJbm1pX3dhdGNoZG9nID0gTk1JX05PTkU7CisJfQorI2lmZGVmIENPTkZJR19YODZfMzIKKwl0aW1lcl9hY2sgPSAwOworI2VuZGlmCisKKwlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8KKwkJICAgICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyIGFzIFZpcnR1YWwgV2lyZSBJUlEuLi5cbiIpOworCisJbGFwaWNfcmVnaXN0ZXJfaW50cigwKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9GSVhFRCB8IGNmZy0+dmVjdG9yKTsJLyogRml4ZWQgbW9kZSAqLworCWVuYWJsZV84MjU5QV9pcnEoMCk7CisKKwlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKKwkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiB3b3Jrcy5cbiIpOworCQlnb3RvIG91dDsKKwl9CisJZGlzYWJsZV84MjU5QV9pcnEoMCk7CisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCB8IEFQSUNfRE1fRklYRUQgfCBjZmctPnZlY3Rvcik7CisJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiBmYWlsZWQuXG4iKTsKKworCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTworCQkgICAgIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgRXh0SU5UIElSUS4uLlxuIik7CisKKwlpbml0XzgyNTlBKDApOworCW1ha2VfODI1OUFfaXJxKDApOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0VYVElOVCk7CisKKwl1bmxvY2tfRXh0SU5UX2xvZ2ljKCk7CisKKwlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKKwkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiB3b3Jrcy5cbiIpOworCQlnb3RvIG91dDsKKwl9CisJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiBmYWlsZWQgOiguXG4iKTsKKwlwYW5pYygiSU8tQVBJQyArIHRpbWVyIGRvZXNuJ3Qgd29yayEgIEJvb3Qgd2l0aCBhcGljPWRlYnVnIGFuZCBzZW5kIGEgIgorCQkicmVwb3J0LiAgVGhlbiB0cnkgYm9vdGluZyB3aXRoIHRoZSAnbm9hcGljJyBvcHRpb24uXG4iKTsKK291dDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBUcmFkaXRpb25hbGx5IElTQSBJUlEyIGlzIHRoZSBjYXNjYWRlIElSUSwgYW5kIGlzIG5vdCBhdmFpbGFibGUKKyAqIHRvIGRldmljZXMuICBIb3dldmVyIHRoZXJlIG1heSBiZSBhbiBJL08gQVBJQyBwaW4gYXZhaWxhYmxlIGZvcgorICogdGhpcyBpbnRlcnJ1cHQgcmVnYXJkbGVzcy4gIFRoZSBwaW4gbWF5IGJlIGxlZnQgdW5jb25uZWN0ZWQsIGJ1dAorICogdHlwaWNhbGx5IGl0IHdpbGwgYmUgcmV1c2VkIGFzIGFuIEV4dElOVCBjYXNjYWRlIGludGVycnVwdCBmb3IKKyAqIHRoZSBtYXN0ZXIgODI1OUEuICBJbiB0aGUgTVBTIGNhc2Ugc3VjaCBhIHBpbiB3aWxsIG5vcm1hbGx5IGJlCisgKiByZXBvcnRlZCBhcyBhbiBFeHRJTlQgaW50ZXJydXB0IGluIHRoZSBNUCB0YWJsZS4gIFdpdGggQUNQSQorICogdGhlcmUgaXMgbm8gcHJvdmlzaW9uIGZvciBFeHRJTlQgaW50ZXJydXB0cywgYW5kIGluIHRoZSBhYnNlbmNlCisgKiBvZiBhbiBvdmVycmlkZSBpdCB3b3VsZCBiZSB0cmVhdGVkIGFzIGFuIG9yZGluYXJ5IElTQSBJL08gQVBJQworICogaW50ZXJydXB0LCB0aGF0IGlzIGVkZ2UtdHJpZ2dlcmVkIGFuZCB1bm1hc2tlZCBieSBkZWZhdWx0LiAgV2UKKyAqIHVzZWQgdG8gZG8gdGhpcywgYnV0IGl0IGNhdXNlZCBwcm9ibGVtcyBvbiBzb21lIHN5c3RlbXMgYmVjYXVzZQorICogb2YgdGhlIE5NSSB3YXRjaGRvZyBhbmQgc29tZXRpbWVzIElSUTAgb2YgdGhlIDgyNTQgdGltZXIgdXNpbmcKKyAqIHRoZSBzYW1lIEV4dElOVCBjYXNjYWRlIGludGVycnVwdCB0byBkcml2ZSB0aGUgbG9jYWwgQVBJQyBvZiB0aGUKKyAqIGJvb3RzdHJhcCBwcm9jZXNzb3IuICBUaGVyZWZvcmUgd2UgcmVmcmFpbiBmcm9tIHJvdXRpbmcgSVJRMiB0bworICogdGhlIEkvTyBBUElDIGluIGFsbCBjYXNlcyBub3cuICBObyBhY3R1YWwgZGV2aWNlIHNob3VsZCByZXF1ZXN0CisgKiBpdCBhbnl3YXkuICAtLW1hY3JvCisgKi8KKyNkZWZpbmUgUElDX0lSUVMJKDEgPDwgUElDX0NBU0NBREVfSVIpCisKK3ZvaWQgX19pbml0IHNldHVwX0lPX0FQSUModm9pZCkKK3sKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwllbmFibGVfSU9fQVBJQygpOworI2Vsc2UKKwkvKgorCSAqIGNhbGxpbmcgZW5hYmxlX0lPX0FQSUMoKSBpcyBtb3ZlZCB0byBzZXR1cF9sb2NhbF9BUElDIGZvciBCUAorCSAqLworI2VuZGlmCisKKwlpb19hcGljX2lycXMgPSB+UElDX0lSUVM7CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJFTkFCTElORyBJTy1BUElDIElSUXNcbiIpOworCS8qCisgICAgICAgICAqIFNldCB1cCBJTy1BUElDIElSUSByb3V0aW5nLgorICAgICAgICAgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKCFhY3BpX2lvYXBpYykKKwkJc2V0dXBfaW9hcGljX2lkc19mcm9tX21wYygpOworI2VuZGlmCisJc3luY19BcmJfSURzKCk7CisJc2V0dXBfSU9fQVBJQ19pcnFzKCk7CisJaW5pdF9JT19BUElDX3RyYXBzKCk7CisJY2hlY2tfdGltZXIoKTsKK30KKworLyoKKyAqICAgICAgQ2FsbGVkIGFmdGVyIGFsbCB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZS4gSWYgd2UgZGlkbnQgZmluZCBhbnkKKyAqICAgICAgQVBJQyBidWdzIHRoZW4gd2UgY2FuIGFsbG93IHRoZSBtb2RpZnkgZmFzdCBwYXRoCisgKi8KKworc3RhdGljIGludCBfX2luaXQgaW9fYXBpY19idWdfZmluYWxpemUodm9pZCkKK3sKKwlpZiAoc2lzX2FwaWNfYnVnID09IC0xKQorCQlzaXNfYXBpY19idWcgPSAwOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsKGlvX2FwaWNfYnVnX2ZpbmFsaXplKTsKKworc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhIHsKKwlzdHJ1Y3Qgc3lzX2RldmljZSBkZXY7CisJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnlbMF07Cit9Oworc3RhdGljIHN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSAqIG1wX2lvYXBpY19kYXRhW01BWF9JT19BUElDU107CisKK3N0YXRpYyBpbnQgaW9hcGljX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKmRhdGE7CisJaW50IGk7CisKKwlkYXRhID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhLCBkZXYpOworCWVudHJ5ID0gZGF0YS0+ZW50cnk7CisJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY19yZWdpc3RlcnNbZGV2LT5pZF07IGkgKyssIGVudHJ5ICsrICkKKwkJKmVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoZGV2LT5pZCwgaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpb2FwaWNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5OworCXN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKKwlpbnQgaTsKKworCWRhdGEgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEsIGRldik7CisJZW50cnkgPSBkYXRhLT5lbnRyeTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoZGV2LT5pZCwgMCk7CisJaWYgKHJlZ18wMC5iaXRzLklEICE9IG1wX2lvYXBpY3NbZGV2LT5pZF0ubXBfYXBpY2lkKSB7CisJCXJlZ18wMC5iaXRzLklEID0gbXBfaW9hcGljc1tkZXYtPmlkXS5tcF9hcGljaWQ7CisJCWlvX2FwaWNfd3JpdGUoZGV2LT5pZCwgMCwgcmVnXzAwLnJhdyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY19yZWdpc3RlcnNbZGV2LT5pZF07IGkrKykKKwkJaW9hcGljX3dyaXRlX2VudHJ5KGRldi0+aWQsIGksIGVudHJ5W2ldKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBpb2FwaWNfc3lzZGV2X2NsYXNzID0geworCS5uYW1lID0gImlvYXBpYyIsCisJLnN1c3BlbmQgPSBpb2FwaWNfc3VzcGVuZCwKKwkucmVzdW1lID0gaW9hcGljX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlvYXBpY19pbml0X3N5c2ZzKHZvaWQpCit7CisJc3RydWN0IHN5c19kZXZpY2UgKiBkZXY7CisJaW50IGksIHNpemUsIGVycm9yOworCisJZXJyb3IgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmlvYXBpY19zeXNkZXZfY2xhc3MpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKyApIHsKKwkJc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc3lzX2RldmljZSkgKyBucl9pb2FwaWNfcmVnaXN0ZXJzW2ldCisJCQkqIHNpemVvZihzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSk7CisJCW1wX2lvYXBpY19kYXRhW2ldID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtcF9pb2FwaWNfZGF0YVtpXSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBzdXNwZW5kL3Jlc3VtZSBJT0FQSUMgJWRcbiIsIGkpOworCQkJY29udGludWU7CisJCX0KKwkJZGV2ID0gJm1wX2lvYXBpY19kYXRhW2ldLT5kZXY7CisJCWRldi0+aWQgPSBpOworCQlkZXYtPmNscyA9ICZpb2FwaWNfc3lzZGV2X2NsYXNzOworCQllcnJvciA9IHN5c2Rldl9yZWdpc3RlcihkZXYpOworCQlpZiAoZXJyb3IpIHsKKwkJCWtmcmVlKG1wX2lvYXBpY19kYXRhW2ldKTsKKwkJCW1wX2lvYXBpY19kYXRhW2ldID0gTlVMTDsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc3VzcGVuZC9yZXN1bWUgSU9BUElDICVkXG4iLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2RldmljZV9pbml0Y2FsbChpb2FwaWNfaW5pdF9zeXNmcyk7CisKKy8qCisgKiBEeW5hbWljIGlycSBhbGxvY2F0ZSBhbmQgZGVhbGxvY2F0aW9uCisgKi8KK3Vuc2lnbmVkIGludCBjcmVhdGVfaXJxX25yKHVuc2lnbmVkIGludCBpcnFfd2FudCkKK3sKKwkvKiBBbGxvY2F0ZSBhbiB1bnVzZWQgaXJxICovCisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBpbnQgbmV3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlycV9jZmcgKmNmZ19uZXc7CisKKwlpcnFfd2FudCA9IG5yX2lycXMgLSAxOworCisJaXJxID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKwlmb3IgKG5ldyA9IGlycV93YW50OyBuZXcgPiAwOyBuZXctLSkgeworCQlpZiAocGxhdGZvcm1fbGVnYWN5X2lycShuZXcpKQorCQkJY29udGludWU7CisJCWNmZ19uZXcgPSBpcnFfY2ZnKG5ldyk7CisJCWlmIChjZmdfbmV3ICYmIGNmZ19uZXctPnZlY3RvciAhPSAwKQorCQkJY29udGludWU7CisJCS8qIGNoZWNrIGlmIG5lZWQgdG8gY3JlYXRlIG9uZSAqLworCQlpZiAoIWNmZ19uZXcpCisJCQljZmdfbmV3ID0gaXJxX2NmZ19hbGxvYyhuZXcpOworCQlpZiAoX19hc3NpZ25faXJxX3ZlY3RvcihuZXcsIFRBUkdFVF9DUFVTKSA9PSAwKQorCQkJaXJxID0gbmV3OworCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKworCWlmIChpcnEgPiAwKSB7CisJCWR5bmFtaWNfaXJxX2luaXQoaXJxKTsKKwl9CisJcmV0dXJuIGlycTsKK30KKworaW50IGNyZWF0ZV9pcnEodm9pZCkKK3sKKwlpbnQgaXJxOworCisJaXJxID0gY3JlYXRlX2lycV9ucihucl9pcnFzIC0gMSk7CisKKwlpZiAoaXJxID09IDApCisJCWlycSA9IC0xOworCisJcmV0dXJuIGlycTsKK30KKwordm9pZCBkZXN0cm95X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkeW5hbWljX2lycV9jbGVhbnVwKGlycSk7CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCWZyZWVfaXJ0ZShpcnEpOworI2VuZGlmCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJX19jbGVhcl9pcnFfdmVjdG9yKGlycSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIE1TSSBtZXNzYWdlIGNvbXBvc2l0aW9uCisgKi8KKyNpZmRlZiBDT05GSUdfUENJX01TSQorc3RhdGljIGludCBtc2lfY29tcG9zZV9tc2coc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGRlc3Q7CisJY3B1bWFza190IHRtcDsKKworCXRtcCA9IFRBUkdFVF9DUFVTOworCWVyciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgdG1wKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIHRtcCk7CisJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKKwkJc3RydWN0IGlydGUgaXJ0ZTsKKwkJaW50IGlyX2luZGV4OworCQl1MTYgc3ViX2hhbmRsZTsKKworCQlpcl9pbmRleCA9IG1hcF9pcnFfdG9faXJ0ZV9oYW5kbGUoaXJxLCAmc3ViX2hhbmRsZSk7CisJCUJVR19PTihpcl9pbmRleCA9PSAtMSk7CisKKwkJbWVtc2V0ICgmaXJ0ZSwgMCwgc2l6ZW9mKGlydGUpKTsKKworCQlpcnRlLnByZXNlbnQgPSAxOworCQlpcnRlLmRzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKKwkJaXJ0ZS50cmlnZ2VyX21vZGUgPSAwOyAvKiBlZGdlICovCisJCWlydGUuZGx2cnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOworCQlpcnRlLnZlY3RvciA9IGNmZy0+dmVjdG9yOworCQlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdCk7CisKKwkJbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7CisKKwkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISTsKKwkJbXNnLT5kYXRhID0gc3ViX2hhbmRsZTsKKwkJbXNnLT5hZGRyZXNzX2xvID0gTVNJX0FERFJfQkFTRV9MTyB8IE1TSV9BRERSX0lSX0VYVF9JTlQgfAorCQkJCSAgTVNJX0FERFJfSVJfU0hWIHwKKwkJCQkgIE1TSV9BRERSX0lSX0lOREVYMShpcl9pbmRleCkgfAorCQkJCSAgTVNJX0FERFJfSVJfSU5ERVgyKGlyX2luZGV4KTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISTsKKwkJbXNnLT5hZGRyZXNzX2xvID0KKwkJCU1TSV9BRERSX0JBU0VfTE8gfAorCQkJKChJTlRfREVTVF9NT0RFID09IDApID8KKwkJCQlNU0lfQUREUl9ERVNUX01PREVfUEhZU0lDQUw6CisJCQkJTVNJX0FERFJfREVTVF9NT0RFX0xPR0lDQUwpIHwKKwkJCSgoSU5UX0RFTElWRVJZX01PREUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/CisJCQkJTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVOgorCQkJCU1TSV9BRERSX1JFRElSRUNUSU9OX0xPV1BSSSkgfAorCQkJTVNJX0FERFJfREVTVF9JRChkZXN0KTsKKworCQltc2ctPmRhdGEgPQorCQkJTVNJX0RBVEFfVFJJR0dFUl9FREdFIHwKKwkJCU1TSV9EQVRBX0xFVkVMX0FTU0VSVCB8CisJCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPworCQkJCU1TSV9EQVRBX0RFTElWRVJZX0ZJWEVEOgorCQkJCU1TSV9EQVRBX0RFTElWRVJZX0xPV1BSSSkgfAorCQkJTVNJX0RBVEFfVkVDVE9SKGNmZy0+dmVjdG9yKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIHNldF9tc2lfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCXVuc2lnbmVkIGludCBkZXN0OworCWNwdW1hc2tfdCB0bXA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CisJaWYgKGNwdXNfZW1wdHkodG1wKSkKKwkJcmV0dXJuOworCisJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCisJCXJldHVybjsKKworCWNmZyA9IGlycV9jZmcoaXJxKTsKKwljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKKwlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CisKKwlyZWFkX21zaV9tc2coaXJxLCAmbXNnKTsKKworCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKKwltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOworCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUX0lEX01BU0s7CisJbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKKworCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7Cit9CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorLyoKKyAqIE1pZ3JhdGUgdGhlIE1TSSBpcnEgdG8gYW5vdGhlciBjcHVtYXNrLiBUaGlzIG1pZ3JhdGlvbiBpcworICogZG9uZSBpbiB0aGUgcHJvY2VzcyBjb250ZXh0IHVzaW5nIGludGVycnVwdC1yZW1hcHBpbmcgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGlyX3NldF9tc2lfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJdW5zaWduZWQgaW50IGRlc3Q7CisJY3B1bWFza190IHRtcCwgY2xlYW51cF9tYXNrOworCXN0cnVjdCBpcnRlIGlydGU7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CisJaWYgKGNwdXNfZW1wdHkodG1wKSkKKwkJcmV0dXJuOworCisJaWYgKGdldF9pcnRlKGlycSwgJmlydGUpKQorCQlyZXR1cm47CisKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKKwkJcmV0dXJuOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOworCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKKworCWlydGUudmVjdG9yID0gY2ZnLT52ZWN0b3I7CisJaXJ0ZS5kZXN0X2lkID0gSVJURV9ERVNUKGRlc3QpOworCisJLyoKKwkgKiBhdG9taWNhbGx5IHVwZGF0ZSB0aGUgSVJURSB3aXRoIHRoZSBuZXcgZGVzdGluYXRpb24gYW5kIHZlY3Rvci4KKwkgKi8KKwltb2RpZnlfaXJ0ZShpcnEsICZpcnRlKTsKKworCS8qCisJICogQWZ0ZXIgdGhpcyBwb2ludCwgYWxsIHRoZSBpbnRlcnJ1cHRzIHdpbGwgc3RhcnQgYXJyaXZpbmcKKwkgKiBhdCB0aGUgbmV3IGRlc3RpbmF0aW9uLiBTbywgdGltZSB0byBjbGVhbnVwIHRoZSBwcmV2aW91cworCSAqIHZlY3RvciBhbGxvY2F0aW9uLgorCSAqLworCWlmIChjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpIHsKKwkJY3B1c19hbmQoY2xlYW51cF9tYXNrLCBjZmctPm9sZF9kb21haW4sIGNwdV9vbmxpbmVfbWFwKTsKKwkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQgPSBjcHVzX3dlaWdodChjbGVhbnVwX21hc2spOworCQlzZW5kX0lQSV9tYXNrKGNsZWFudXBfbWFzaywgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IpOworCQljZmctPm1vdmVfaW5fcHJvZ3Jlc3MgPSAwOworCX0KKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWRlc2MtPmFmZmluaXR5ID0gbWFzazsKK30KKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworLyoKKyAqIElSUSBDaGlwIGZvciBNU0kgUENJL1BDSS1YL1BDSS1FeHByZXNzIERldmljZXMsCisgKiB3aGljaCBpbXBsZW1lbnQgdGhlIE1TSSBvciBNU0ktWCBDYXBhYmlsaXR5IFN0cnVjdHVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtc2lfY2hpcCA9IHsKKwkubmFtZQkJPSAiUENJLU1TSSIsCisJLnVubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKKwkubWFzawkJPSBtYXNrX21zaV9pcnEsCisJLmFjawkJPSBhY2tfYXBpY19lZGdlLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5CT0gc2V0X21zaV9pcnFfYWZmaW5pdHksCisjZW5kaWYKKwkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCit9OworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNpX2lyX2NoaXAgPSB7CisJLm5hbWUJCT0gIklSLVBDSS1NU0kiLAorCS51bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCisJLm1hc2sJCT0gbWFza19tc2lfaXJxLAorCS5hY2sJCT0gYWNrX3gyYXBpY19lZGdlLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5CT0gaXJfc2V0X21zaV9pcnFfYWZmaW5pdHksCisjZW5kaWYKKwkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCit9OworCisvKgorICogTWFwIHRoZSBQQ0kgZGV2IHRvIHRoZSBjb3JyZXNwb25kaW5nIHJlbWFwcGluZyBoYXJkd2FyZSB1bml0CisgKiBhbmQgYWxsb2NhdGUgJ252ZWMnIGNvbnNlY3V0aXZlIGludGVycnVwdC1yZW1hcHBpbmcgdGFibGUgZW50cmllcworICogaW4gaXQuCisgKi8KK3N0YXRpYyBpbnQgbXNpX2FsbG9jX2lydGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlycSwgaW50IG52ZWMpCit7CisJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKKwlpbnQgaW5kZXg7CisKKwlpb21tdSA9IG1hcF9kZXZfdG9faXIoZGV2KTsKKwlpZiAoIWlvbW11KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIlVuYWJsZSB0byBtYXAgUENJICVzIHRvIGlvbW11XG4iLCBwY2lfbmFtZShkZXYpKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJaW5kZXggPSBhbGxvY19pcnRlKGlvbW11LCBpcnEsIG52ZWMpOworCWlmIChpbmRleCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiVW5hYmxlIHRvIGFsbG9jYXRlICVkIElSVEUgZm9yIFBDSSAlc1xuIiwgbnZlYywKKwkJICAgICAgIHBjaV9uYW1lKGRldikpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisJcmV0dXJuIGluZGV4OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIGludCBpcnEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXNpX21zZyBtc2c7CisKKwlyZXQgPSBtc2lfY29tcG9zZV9tc2coZGV2LCBpcnEsICZtc2cpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc2V0X2lycV9tc2koaXJxLCBkZXNjKTsKKwl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCWlmIChpcnFfcmVtYXBwZWQoaXJxKSkgeworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCQkvKgorCQkgKiBpcnEgbWlncmF0aW9uIGluIHByb2Nlc3MgY29udGV4dAorCQkgKi8KKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9NT1ZFX1BDTlRYVDsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbXNpX2lyX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKKwl9IGVsc2UKKyNlbmRpZgorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZtc2lfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworCisJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJpcnEgJWQgZm9yIE1TSS9NU0ktWFxuIiwgaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGJ1aWxkX2lycV9mb3JfcGNpX2RldihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGludCBpcnE7CisKKwlpcnEgPSBkZXYtPmJ1cy0+bnVtYmVyOworCWlycSA8PD0gODsKKwlpcnEgfD0gZGV2LT5kZXZmbjsKKwlpcnEgPDw9IDEyOworCisJcmV0dXJuIGlycTsKK30KKworaW50IGFyY2hfc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBpcnFfd2FudDsKKworCWlycV93YW50ID0gYnVpbGRfaXJxX2Zvcl9wY2lfZGV2KGRldikgKyAweDEwMDsKKworCWlycSA9IGNyZWF0ZV9pcnFfbnIoaXJxX3dhbnQpOworCWlmIChpcnEgPT0gMCkKKwkJcmV0dXJuIC0xOworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlpZiAoIWludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJCWdvdG8gbm9faXI7CisKKwlyZXQgPSBtc2lfYWxsb2NfaXJ0ZShkZXYsIGlycSwgMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7Citub19pcjoKKyNlbmRpZgorCXJldCA9IHNldHVwX21zaV9pcnEoZGV2LCBkZXNjLCBpcnEpOworCWlmIChyZXQgPCAwKSB7CisJCWRlc3Ryb3lfaXJxKGlycSk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKK2Vycm9yOgorCWRlc3Ryb3lfaXJxKGlycSk7CisJcmV0dXJuIHJldDsKKyNlbmRpZgorfQorCitpbnQgYXJjaF9zZXR1cF9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCit7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgcmV0LCBzdWJfaGFuZGxlOworCXN0cnVjdCBtc2lfZGVzYyAqZGVzYzsKKwl1bnNpZ25lZCBpbnQgaXJxX3dhbnQ7CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSAwOworCWludCBpbmRleCA9IDA7CisjZW5kaWYKKworCWlycV93YW50ID0gYnVpbGRfaXJxX2Zvcl9wY2lfZGV2KGRldikgKyAweDEwMDsKKwlzdWJfaGFuZGxlID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CisJCWlycSA9IGNyZWF0ZV9pcnFfbnIoaXJxX3dhbnQtLSk7CisJCWlmIChpcnEgPT0gMCkKKwkJCXJldHVybiAtMTsKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCQlpZiAoIWludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJCQlnb3RvIG5vX2lyOworCisJCWlmICghc3ViX2hhbmRsZSkgeworCQkJLyoKKwkJCSAqIGFsbG9jYXRlIHRoZSBjb25zZWN1dGl2ZSBibG9jayBvZiBJUlRFJ3MKKwkJCSAqIGZvciAnbnZlYycKKwkJCSAqLworCQkJaW5kZXggPSBtc2lfYWxsb2NfaXJ0ZShkZXYsIGlycSwgbnZlYyk7CisJCQlpZiAoaW5kZXggPCAwKSB7CisJCQkJcmV0ID0gaW5kZXg7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlvbW11ID0gbWFwX2Rldl90b19pcihkZXYpOworCQkJaWYgKCFpb21tdSkgeworCQkJCXJldCA9IC1FTk9FTlQ7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJCS8qCisJCQkgKiBzZXR1cCB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBpcnEgYW5kIHRoZSBJUlRFCisJCQkgKiBiYXNlIGluZGV4LCB0aGUgc3ViX2hhbmRsZSBwb2ludGluZyB0byB0aGUKKwkJCSAqIGFwcHJvcHJpYXRlIGludGVycnVwdCByZW1hcCB0YWJsZSBlbnRyeS4KKwkJCSAqLworCQkJc2V0X2lydGVfaXJxKGlycSwgaW9tbXUsIGluZGV4LCBzdWJfaGFuZGxlKTsKKwkJfQorbm9faXI6CisjZW5kaWYKKwkJcmV0ID0gc2V0dXBfbXNpX2lycShkZXYsIGRlc2MsIGlycSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJvcjsKKwkJc3ViX2hhbmRsZSsrOworCX0KKwlyZXR1cm4gMDsKKworZXJyb3I6CisJZGVzdHJveV9pcnEoaXJxKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGFyY2hfdGVhcmRvd25fbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWRlc3Ryb3lfaXJxKGlycSk7Cit9CisKKyNpZmRlZiBDT05GSUdfRE1BUgorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIGRtYXJfbXNpX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBtc2lfbXNnIG1zZzsKKwl1bnNpZ25lZCBpbnQgZGVzdDsKKwljcHVtYXNrX3QgdG1wOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOworCWlmIChjcHVzX2VtcHR5KHRtcCkpCisJCXJldHVybjsKKworCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQorCQlyZXR1cm47CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7CisJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOworCisJZG1hcl9tc2lfcmVhZChpcnEsICZtc2cpOworCisJbXNnLmRhdGEgJj0gfk1TSV9EQVRBX1ZFQ1RPUl9NQVNLOworCW1zZy5kYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUihjZmctPnZlY3Rvcik7CisJbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RfSURfTUFTSzsKKwltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUX0lEKGRlc3QpOworCisJZG1hcl9tc2lfd3JpdGUoaXJxLCAmbXNnKTsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7Cit9CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCitzdHJ1Y3QgaXJxX2NoaXAgZG1hcl9tc2lfdHlwZSA9IHsKKwkubmFtZSA9ICJETUFSX01TSSIsCisJLnVubWFzayA9IGRtYXJfbXNpX3VubWFzaywKKwkubWFzayA9IGRtYXJfbXNpX21hc2ssCisJLmFjayA9IGFja19hcGljX2VkZ2UsCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkgPSBkbWFyX21zaV9zZXRfYWZmaW5pdHksCisjZW5kaWYKKwkucmV0cmlnZ2VyID0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCit9OworCitpbnQgYXJjaF9zZXR1cF9kbWFyX21zaSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCByZXQ7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCisJcmV0ID0gbXNpX2NvbXBvc2VfbXNnKE5VTEwsIGlycSwgJm1zZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZG1hcl9tc2lfd3JpdGUoaXJxLCAmbXNnKTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZkbWFyX21zaV90eXBlLCBoYW5kbGVfZWRnZV9pcnEsCisJCSJlZGdlIik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19IUEVUX1RJTUVSCisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgdm9pZCBocGV0X21zaV9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCXVuc2lnbmVkIGludCBkZXN0OworCWNwdW1hc2tfdCB0bXA7CisKKwljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKKwlpZiAoY3B1c19lbXB0eSh0bXApKQorCQlyZXR1cm47CisKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKKwkJcmV0dXJuOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOworCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKKworCWhwZXRfbXNpX3JlYWQoaXJxLCAmbXNnKTsKKworCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKKwltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOworCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUX0lEX01BU0s7CisJbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKKworCWhwZXRfbXNpX3dyaXRlKGlycSwgJm1zZyk7CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJZGVzYy0+YWZmaW5pdHkgPSBtYXNrOworfQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworc3RydWN0IGlycV9jaGlwIGhwZXRfbXNpX3R5cGUgPSB7CisJLm5hbWUgPSAiSFBFVF9NU0kiLAorCS51bm1hc2sgPSBocGV0X21zaV91bm1hc2ssCisJLm1hc2sgPSBocGV0X21zaV9tYXNrLAorCS5hY2sgPSBhY2tfYXBpY19lZGdlLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5ID0gaHBldF9tc2lfc2V0X2FmZmluaXR5LAorI2VuZGlmCisJLnJldHJpZ2dlciA9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAorfTsKKworaW50IGFyY2hfc2V0dXBfaHBldF9tc2kodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtc2lfbXNnIG1zZzsKKworCXJldCA9IG1zaV9jb21wb3NlX21zZyhOVUxMLCBpcnEsICZtc2cpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaHBldF9tc2lfd3JpdGUoaXJxLCAmbXNnKTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZocGV0X21zaV90eXBlLCBoYW5kbGVfZWRnZV9pcnEsCisJCSJlZGdlIik7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX1BDSV9NU0kgKi8KKy8qCisgKiBIeXBlcnRyYW5zcG9ydCBpbnRlcnJ1cHQgc3VwcG9ydAorICovCisjaWZkZWYgQ09ORklHX0hUX0lSUQorCisjaWZkZWYgQ09ORklHX1NNUAorCitzdGF0aWMgdm9pZCB0YXJnZXRfaHRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkZXN0LCB1OCB2ZWN0b3IpCit7CisJc3RydWN0IGh0X2lycV9tc2cgbXNnOworCWZldGNoX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKKworCW1zZy5hZGRyZXNzX2xvICY9IH4oSFRfSVJRX0xPV19WRUNUT1JfTUFTSyB8IEhUX0lSUV9MT1dfREVTVF9JRF9NQVNLKTsKKwltc2cuYWRkcmVzc19oaSAmPSB+KEhUX0lSUV9ISUdIX0RFU1RfSURfTUFTSyk7CisKKwltc2cuYWRkcmVzc19sbyB8PSBIVF9JUlFfTE9XX1ZFQ1RPUih2ZWN0b3IpIHwgSFRfSVJRX0xPV19ERVNUX0lEKGRlc3QpOworCW1zZy5hZGRyZXNzX2hpIHw9IEhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7CisKKwl3cml0ZV9odF9pcnFfbXNnKGlycSwgJm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9odF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwl1bnNpZ25lZCBpbnQgZGVzdDsKKwljcHVtYXNrX3QgdG1wOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOworCWlmIChjcHVzX2VtcHR5KHRtcCkpCisJCXJldHVybjsKKworCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQorCQlyZXR1cm47CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7CisJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOworCisJdGFyZ2V0X2h0X2lycShpcnEsIGRlc3QsIGNmZy0+dmVjdG9yKTsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBodF9pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAiUENJLUhUIiwKKwkubWFzawkJPSBtYXNrX2h0X2lycSwKKwkudW5tYXNrCQk9IHVubWFza19odF9pcnEsCisJLmFjawkJPSBhY2tfYXBpY19lZGdlLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5CT0gc2V0X2h0X2lycV9hZmZpbml0eSwKKyNlbmRpZgorCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKK307CisKK2ludCBhcmNoX3NldHVwX2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJaW50IGVycjsKKwljcHVtYXNrX3QgdG1wOworCisJdG1wID0gVEFSR0VUX0NQVVM7CisJZXJyID0gYXNzaWduX2lycV92ZWN0b3IoaXJxLCB0bXApOworCWlmICghZXJyKSB7CisJCXN0cnVjdCBodF9pcnFfbXNnIG1zZzsKKwkJdW5zaWduZWQgZGVzdDsKKworCQljZmcgPSBpcnFfY2ZnKGlycSk7CisJCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIHRtcCk7CisJCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKKworCQltc2cuYWRkcmVzc19oaSA9IEhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7CisKKwkJbXNnLmFkZHJlc3NfbG8gPQorCQkJSFRfSVJRX0xPV19CQVNFIHwKKwkJCUhUX0lSUV9MT1dfREVTVF9JRChkZXN0KSB8CisJCQlIVF9JUlFfTE9XX1ZFQ1RPUihjZmctPnZlY3RvcikgfAorCQkJKChJTlRfREVTVF9NT0RFID09IDApID8KKwkJCQlIVF9JUlFfTE9XX0RNX1BIWVNJQ0FMIDoKKwkJCQlIVF9JUlFfTE9XX0RNX0xPR0lDQUwpIHwKKwkJCUhUX0lSUV9MT1dfUlFFT0lfRURHRSB8CisJCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPworCQkJCUhUX0lSUV9MT1dfTVRfRklYRUQgOgorCQkJCUhUX0lSUV9MT1dfTVRfQVJCSVRSQVRFRCkgfAorCQkJSFRfSVJRX0xPV19JUlFfTUFTS0VEOworCisJCXdyaXRlX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKKworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZodF9pcnFfY2hpcCwKKwkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworCisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiaXJxICVkIGZvciBIVFxuIiwgaXJxKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKyNlbmRpZiAvKiBDT05GSUdfSFRfSVJRICovCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisvKgorICogUmUtdGFyZ2V0IHRoZSBpcnEgdG8gdGhlIHNwZWNpZmllZCBDUFUgYW5kIGVuYWJsZSB0aGUgc3BlY2lmaWVkIE1NUiBsb2NhdGVkCisgKiBvbiB0aGUgc3BlY2lmaWVkIGJsYWRlIHRvIGFsbG93IHRoZSBzZW5kaW5nIG9mIE1TSXMgdG8gdGhlIHNwZWNpZmllZCBDUFUuCisgKi8KK2ludCBhcmNoX2VuYWJsZV91dl9pcnEoY2hhciAqaXJxX25hbWUsIHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUsIGludCBtbXJfYmxhZGUsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIG1tcl9vZmZzZXQpCit7CisJY29uc3QgY3B1bWFza190ICplbGlnaWJsZV9jcHUgPSBnZXRfY3B1X21hc2soY3B1KTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCWludCBtbXJfcG5vZGU7CisJdW5zaWduZWQgbG9uZyBtbXJfdmFsdWU7CisJc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCWVyciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgKmVsaWdpYmxlX2NwdSk7CisJaWYgKGVyciAhPSAwKQorCQlyZXR1cm4gZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmdXZfaXJxX2NoaXAsIGhhbmRsZV9wZXJjcHVfaXJxLAorCQkJCSAgICAgIGlycV9uYW1lKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCisJbW1yX3ZhbHVlID0gMDsKKwllbnRyeSA9IChzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSZtbXJfdmFsdWU7CisJQlVHX09OKHNpemVvZihzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSkgIT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKworCWVudHJ5LT52ZWN0b3IgPSBjZmctPnZlY3RvcjsKKwllbnRyeS0+ZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOworCWVudHJ5LT5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOworCWVudHJ5LT5wb2xhcml0eSA9IDA7CisJZW50cnktPnRyaWdnZXIgPSAwOworCWVudHJ5LT5tYXNrID0gMDsKKwllbnRyeS0+ZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCgqZWxpZ2libGVfY3B1KTsKKworCW1tcl9wbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKG1tcl9ibGFkZSk7CisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KG1tcl9wbm9kZSwgbW1yX29mZnNldCwgbW1yX3ZhbHVlKTsKKworCXJldHVybiBpcnE7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgTU1SIGxvY2F0ZWQgb24gdGhlIHNwZWNpZmllZCBibGFkZSBzbyB0aGF0IE1TSXMgYXJlCisgKiBsb25nZXIgYWxsb3dlZCB0byBiZSBzZW50LgorICovCit2b2lkIGFyY2hfZGlzYWJsZV91dl9pcnEoaW50IG1tcl9ibGFkZSwgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgbW1yX3ZhbHVlOworCXN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKKwlpbnQgbW1yX3Bub2RlOworCisJbW1yX3ZhbHVlID0gMDsKKwllbnRyeSA9IChzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSZtbXJfdmFsdWU7CisJQlVHX09OKHNpemVvZihzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSkgIT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKworCWVudHJ5LT5tYXNrID0gMTsKKworCW1tcl9wbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKG1tcl9ibGFkZSk7CisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KG1tcl9wbm9kZSwgbW1yX29mZnNldCwgbW1yX3ZhbHVlKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCisKK2ludCBfX2luaXQgaW9fYXBpY19nZXRfcmVkaXJfZW50cmllcyAoaW50IGlvYXBpYykKK3sKKwl1bmlvbiBJT19BUElDX3JlZ18wMQlyZWdfMDE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlZ18wMS5iaXRzLmVudHJpZXM7Cit9CisKK2ludCBfX2luaXQgcHJvYmVfbnJfaXJxcyh2b2lkKQoreworCWludCBpZHg7CisJaW50IG5yID0gMDsKKyNpZm5kZWYgQ09ORklHX1hFTgorCWludCBucl9taW4gPSAzMjsKKyNlbHNlCisJaW50IG5yX21pbiA9IE5SX0lSUVM7CisjZW5kaWYKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgbnJfaW9hcGljczsgaWR4KyspCisJCW5yICs9IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaWR4KSArIDE7CisKKwkvKiBkb3VibGUgaXQgZm9yIGhvdHBsdWcgYW5kIG1zaSBhbmQgbm1pICovCisJbnIgPDw9IDE7CisKKwkvKiBzb21ldGhpbmcgd3JvbmcgPyAqLworCWlmIChuciA8IG5yX21pbikKKwkJbnIgPSBucl9taW47CisKKwlyZXR1cm4gbnI7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUEktYmFzZWQgSU9BUElDIENvbmZpZ3VyYXRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfQUNQSQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgoraW50IF9faW5pdCBpb19hcGljX2dldF91bmlxdWVfaWQoaW50IGlvYXBpYywgaW50IGFwaWNfaWQpCit7CisJdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOworCXN0YXRpYyBwaHlzaWRfbWFza190IGFwaWNfaWRfbWFwID0gUEhZU0lEX01BU0tfTk9ORTsKKwlwaHlzaWRfbWFza190IHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpID0gMDsKKworCS8qCisJICogVGhlIFA0IHBsYXRmb3JtIHN1cHBvcnRzIHVwIHRvIDI1NiBBUElDIElEcyBvbiB0d28gc2VwYXJhdGUgQVBJQworCSAqIGJ1c2VzIChvbmUgZm9yIExBUElDcywgb25lIGZvciBJT0FQSUNzKSwgd2hlcmUgcHJlZGVjZXNzb3JzIG9ubHkKKwkgKiBzdXBwb3J0cyB1cCB0byAxNiBvbiBvbmUgc2hhcmVkIEFQSUMgYnVzLgorCSAqCisJICogVEJEOiBFeHBhbmQgTEFQSUMvSU9BUElDIHN1cHBvcnQgb24gUDQtY2xhc3Mgc3lzdGVtcyB0byB0YWtlIGZ1bGwKKwkgKiAgICAgIGFkdmFudGFnZSBvZiBuZXcgQVBJQyBidXMgYXJjaGl0ZWN0dXJlLgorCSAqLworCisJaWYgKHBoeXNpZHNfZW1wdHkoYXBpY19pZF9tYXApKQorCQlhcGljX2lkX21hcCA9IGlvYXBpY19waHlzX2lkX21hcChwaHlzX2NwdV9wcmVzZW50X21hcCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCWlmIChhcGljX2lkID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT0FQSUNbJWRdOiBJbnZhbGlkIGFwaWNfaWQgJWQsIHRyeWluZyAiCisJCQkiJWRcbiIsIGlvYXBpYywgYXBpY19pZCwgcmVnXzAwLmJpdHMuSUQpOworCQlhcGljX2lkID0gcmVnXzAwLmJpdHMuSUQ7CisJfQorCisJLyoKKwkgKiBFdmVyeSBBUElDIGluIGEgc3lzdGVtIG11c3QgaGF2ZSBhIHVuaXF1ZSBJRCBvciB3ZSBnZXQgbG90cyBvZiBuaWNlCisJICogJ3N0dWNrIG9uIHNtcF9pbnZhbGlkYXRlX25lZWRlZCBJUEkgd2FpdCcgbWVzc2FnZXMuCisJICovCisJaWYgKGNoZWNrX2FwaWNpZF91c2VkKGFwaWNfaWRfbWFwLCBhcGljX2lkKSkgeworCisJCWZvciAoaSA9IDA7IGkgPCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCk7IGkrKykgeworCQkJaWYgKCFjaGVja19hcGljaWRfdXNlZChhcGljX2lkX21hcCwgaSkpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaSA9PSBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpCisJCQlwYW5pYygiTWF4IGFwaWNfaWQgZXhjZWVkZWQhXG4iKTsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT0FQSUNbJWRdOiBhcGljX2lkICVkIGFscmVhZHkgdXNlZCwgIgorCQkJInRyeWluZyAlZFxuIiwgaW9hcGljLCBhcGljX2lkLCBpKTsKKworCQlhcGljX2lkID0gaTsKKwl9CisKKwl0bXAgPSBhcGljaWRfdG9fY3B1X3ByZXNlbnQoYXBpY19pZCk7CisJcGh5c2lkc19vcihhcGljX2lkX21hcCwgYXBpY19pZF9tYXAsIHRtcCk7CisKKwlpZiAocmVnXzAwLmJpdHMuSUQgIT0gYXBpY19pZCkgeworCQlyZWdfMDAuYml0cy5JRCA9IGFwaWNfaWQ7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCWlvX2FwaWNfd3JpdGUoaW9hcGljLCAwLCByZWdfMDAucmF3KTsKKwkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJCS8qIFNhbml0eSBjaGVjayAqLworCQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gYXBpY19pZCkgeworCQkJcHJpbnRrKCJJT0FQSUNbJWRdOiBVbmFibGUgdG8gY2hhbmdlIGFwaWNfaWQhXG4iLCBpb2FwaWMpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KKwkJCSJJT0FQSUNbJWRdOiBBc3NpZ25lZCBhcGljX2lkICVkXG4iLCBpb2FwaWMsIGFwaWNfaWQpOworCisJcmV0dXJuIGFwaWNfaWQ7Cit9CisKK2ludCBfX2luaXQgaW9fYXBpY19nZXRfdmVyc2lvbihpbnQgaW9hcGljKQoreworCXVuaW9uIElPX0FQSUNfcmVnXzAxCXJlZ18wMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVnXzAxLmJpdHMudmVyc2lvbjsKK30KKyNlbmRpZgorCitpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcgKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsIGludCB0cmlnZ2VyaW5nLCBpbnQgcG9sYXJpdHkpCit7CisJaWYgKCFJT19BUElDX0lSUShpcnEpKSB7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsS0VSTl9FUlIgIklPQVBJQ1slZF06IEludmFsaWQgcmVmZXJlbmNlIHRvIElSUSAwXG4iLAorCQkJaW9hcGljKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBJUlFzIDwgMTYgYXJlIGFscmVhZHkgaW4gdGhlIGlycV8yX3BpbltdIG1hcAorCSAqLworCWlmIChpcnEgPj0gMTYpCisJCWFkZF9waW5fdG9faXJxKGlycSwgaW9hcGljLCBwaW4pOworCisJc2V0dXBfSU9fQVBJQ19pcnEoaW9hcGljLCBwaW4sIGlycSwgdHJpZ2dlcmluZywgcG9sYXJpdHkpOworCisJcmV0dXJuIDA7Cit9CisKKworaW50IGFjcGlfZ2V0X292ZXJyaWRlX2lycShpbnQgYnVzX2lycSwgaW50ICp0cmlnZ2VyLCBpbnQgKnBvbGFyaXR5KQoreworCWludCBpOworCisJaWYgKHNraXBfaW9hcGljX3NldHVwKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKKwkJaWYgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSBtcF9JTlQgJiYKKwkJICAgIG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID09IGJ1c19pcnEpCisJCQlicmVhazsKKwlpZiAoaSA+PSBtcF9pcnFfZW50cmllcykKKwkJcmV0dXJuIC0xOworCisJKnRyaWdnZXIgPSBpcnFfdHJpZ2dlcihpKTsKKwkqcG9sYXJpdHkgPSBpcnFfcG9sYXJpdHkoaSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLworCisvKgorICogVGhpcyBmdW5jdGlvbiBjdXJyZW50bHkgaXMgb25seSBhIGhlbHBlciBmb3IgdGhlIGkzODYgc21wIGJvb3QgcHJvY2VzcyB3aGVyZQorICogd2UgbmVlZCB0byByZXByb2dyYW0gdGhlIGlvcmVkdGJscyB0byBjYXRlciBmb3IgdGhlIGNwdXMgd2hpY2ggaGF2ZSBjb21lIG9ubGluZQorICogc28gbWFzayBpbiBhbGwgY2FzZXMgc2hvdWxkIHNpbXBseSBiZSBUQVJHRVRfQ1BVUworICovCisjaWZkZWYgQ09ORklHX1NNUAordm9pZCBfX2luaXQgc2V0dXBfaW9hcGljX2Rlc3Qodm9pZCkKK3sKKwlpbnQgcGluLCBpb2FwaWMsIGlycSwgaXJxX2VudHJ5OworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisKKwlpZiAoc2tpcF9pb2FwaWNfc2V0dXAgPT0gMSkKKwkJcmV0dXJuOworCisJZm9yIChpb2FwaWMgPSAwOyBpb2FwaWMgPCBucl9pb2FwaWNzOyBpb2FwaWMrKykgeworCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbaW9hcGljXTsgcGluKyspIHsKKwkJCWlycV9lbnRyeSA9IGZpbmRfaXJxX2VudHJ5KGlvYXBpYywgcGluLCBtcF9JTlQpOworCQkJaWYgKGlycV9lbnRyeSA9PSAtMSkKKwkJCQljb250aW51ZTsKKwkJCWlycSA9IHBpbl8yX2lycShpcnFfZW50cnksIGlvYXBpYywgcGluKTsKKworCQkJLyogc2V0dXBfSU9fQVBJQ19pcnFzIGNvdWxkIGZhaWwgdG8gZ2V0IHZlY3RvciBmb3Igc29tZSBkZXZpY2UKKwkJCSAqIHdoZW4geW91IGhhdmUgdG9vIG1hbnkgZGV2aWNlcywgYmVjYXVzZSBhdCB0aGF0IHRpbWUgb25seSBib290CisJCQkgKiBjcHUgaXMgb25saW5lLgorCQkJICovCisJCQljZmcgPSBpcnFfY2ZnKGlycSk7CisJCQlpZiAoIWNmZy0+dmVjdG9yKQorCQkJCXNldHVwX0lPX0FQSUNfaXJxKGlvYXBpYywgcGluLCBpcnEsCisJCQkJCQkgIGlycV90cmlnZ2VyKGlycV9lbnRyeSksCisJCQkJCQkgIGlycV9wb2xhcml0eShpcnFfZW50cnkpKTsKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCQkJZWxzZSBpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKKwkJCQlzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycShpcnEsIFRBUkdFVF9DUFVTKTsKKyNlbmRpZgorCQkJZWxzZQorCQkJCXNldF9pb2FwaWNfYWZmaW5pdHlfaXJxKGlycSwgVEFSR0VUX0NQVVMpOworCQl9CisKKwl9Cit9CisjZW5kaWYKKworI2RlZmluZSBJT0FQSUNfUkVTT1VSQ0VfTkFNRV9TSVpFIDExCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmlvYXBpY19yZXNvdXJjZXM7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKiBfX2luaXQgaW9hcGljX3NldHVwX3Jlc291cmNlcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwljaGFyICptZW07CisJaW50IGk7CisKKwlpZiAobnJfaW9hcGljcyA8PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCW4gPSBJT0FQSUNfUkVTT1VSQ0VfTkFNRV9TSVpFICsgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSk7CisJbiAqPSBucl9pb2FwaWNzOworCisJbWVtID0gYWxsb2NfYm9vdG1lbShuKTsKKwlyZXMgPSAodm9pZCAqKW1lbTsKKworCWlmIChtZW0gIT0gTlVMTCkgeworCQltZW0gKz0gc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBucl9pb2FwaWNzOworCisJCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKKwkJCXJlc1tpXS5uYW1lID0gbWVtOworCQkJcmVzW2ldLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0JVU1k7CisJCQlzcHJpbnRmKG1lbSwgICJJT0FQSUMgJXUiLCBpKTsKKwkJCW1lbSArPSBJT0FQSUNfUkVTT1VSQ0VfTkFNRV9TSVpFOworCQl9CisJfQorCisJaW9hcGljX3Jlc291cmNlcyA9IHJlczsKKworCXJldHVybiByZXM7Cit9CisKK3ZvaWQgX19pbml0IGlvYXBpY19pbml0X21hcHBpbmdzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBpb2FwaWNfcGh5cywgaWR4ID0gRklYX0lPX0FQSUNfQkFTRV8wOworCXN0cnVjdCByZXNvdXJjZSAqaW9hcGljX3JlczsKKwlpbnQgaTsKKworCWlycV8yX3Bpbl9pbml0KCk7CisJaW9hcGljX3JlcyA9IGlvYXBpY19zZXR1cF9yZXNvdXJjZXMoKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CisJCWlmIChzbXBfZm91bmRfY29uZmlnKSB7CisJCQlpb2FwaWNfcGh5cyA9IG1wX2lvYXBpY3NbaV0ubXBfYXBpY2FkZHI7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCQkJaWYgKCFpb2FwaWNfcGh5cykgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiV0FSTklORzogYm9ndXMgemVybyBJTy1BUElDICIKKwkJCQkgICAgICAgImFkZHJlc3MgZm91bmQgaW4gTVBUQUJMRSwgIgorCQkJCSAgICAgICAiZGlzYWJsaW5nIElPL0FQSUMgc3VwcG9ydCFcbiIpOworCQkJCXNtcF9mb3VuZF9jb25maWcgPSAwOworCQkJCXNraXBfaW9hcGljX3NldHVwID0gMTsKKwkJCQlnb3RvIGZha2VfaW9hcGljX3BhZ2U7CisJCQl9CisjZW5kaWYKKwkJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitmYWtlX2lvYXBpY19wYWdlOgorI2VuZGlmCisJCQlpb2FwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKQorCQkJCWFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKKwkJCWlvYXBpY19waHlzID0gX19wYShpb2FwaWNfcGh5cyk7CisJCX0KKwkJc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgaW9hcGljX3BoeXMpOworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsCisJCQkgICAgIm1hcHBlZCBJT0FQSUMgdG8gJTA4bHggKCUwOGx4KVxuIiwKKwkJCSAgICBfX2ZpeF90b192aXJ0KGlkeCksIGlvYXBpY19waHlzKTsKKwkJaWR4Kys7CisKKwkJaWYgKGlvYXBpY19yZXMgIT0gTlVMTCkgeworCQkJaW9hcGljX3Jlcy0+c3RhcnQgPSBpb2FwaWNfcGh5czsKKwkJCWlvYXBpY19yZXMtPmVuZCA9IGlvYXBpY19waHlzICsgKDQgKiAxMDI0KSAtIDE7CisJCQlpb2FwaWNfcmVzKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGlvYXBpY19pbnNlcnRfcmVzb3VyY2VzKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IHJlc291cmNlICpyID0gaW9hcGljX3Jlc291cmNlczsKKworCWlmICghcikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJJTyBBUElDIHJlc291cmNlcyBjb3VsZCBiZSBub3QgYmUgYWxsb2NhdGVkLlxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CisJCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHIpOworCQlyKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEluc2VydCB0aGUgSU8gQVBJQyByZXNvdXJjZXMgYWZ0ZXIgUENJIGluaXRpYWxpemF0aW9uIGhhcyBvY2N1cmVkIHRvIGhhbmRsZQorICogSU8gQVBJQ1MgdGhhdCBhcmUgbWFwcGVkIGluIG9uIGEgQkFSIGluIFBDSSBzcGFjZS4gKi8KK2xhdGVfaW5pdGNhbGwoaW9hcGljX2luc2VydF9yZXNvdXJjZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MTAyODkuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDI5MDggKzAsMCBAQAotLyoKLSAqCUludGVsIElPLUFQSUMgc3VwcG9ydCBmb3IgbXVsdGktUGVudGl1bSBob3N0cy4KLSAqCi0gKglDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIsIEhham5hbGthIFN6YWJvCi0gKgotICoJTWFueSB0aGFua3MgdG8gU3RpZyBWZW5hYXMgZm9yIHRyeWluZyBvdXQgY291bnRsZXNzIGV4cGVyaW1lbnRhbAotICoJcGF0Y2hlcyBhbmQgcmVwb3J0aW5nL2RlYnVnZ2luZyBwcm9ibGVtcyBwYXRpZW50bHkhCi0gKgotICoJKGMpIDE5OTksIE11bHRpcGxlIElPLUFQSUMgc3VwcG9ydCwgZGV2ZWxvcGVkIGJ5Ci0gKglLZW4taWNoaSBZYWt1IDx5YWt1QGNzczEua2JuZXMubmVjLmNvLmpwPiBhbmQKLSAqICAgICAgSGlkZW1pIEtpc2hpbW90byA8a2lzaW1vdG9AY3NzMS5rYm5lcy5uZWMuY28uanA+LAotICoJZnVydGhlciB0ZXN0ZWQgYW5kIGNsZWFuZWQgdXAgYnkgWmFjaCBCcm93biA8emFiQHJlZGhhdC5jb20+Ci0gKglhbmQgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKgotICoJRml4ZXMKLSAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzOwotICoJCQkJCXRoYW5rcyB0byBFcmljIEdpbG1vcmUKLSAqCQkJCQlhbmQgUm9sZiBHLiBUZXdzCi0gKgkJCQkJZm9yIHRlc3RpbmcgdGhlc2UgZXh0ZW5zaXZlbHkKLSAqCVBhdWwgRGllZmVuYmF1Z2gJOglBZGRlZCBmdWxsIEFDUEkgc3VwcG9ydAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvbXNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaHRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4JLyogdGltZV9hZnRlcigpICovCi0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL2Rlc2MuaD4KLSNpbmNsdWRlIDxhc20vdGltZXIuaD4KLSNpbmNsdWRlIDxhc20vaTgyNTkuaD4KLSNpbmNsdWRlIDxhc20vbm1pLmg+Ci0jaW5jbHVkZSA8YXNtL21zaWRlZi5oPgotI2luY2x1ZGUgPGFzbS9oeXBlcnRyYW5zcG9ydC5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotCi0jaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0jaW5jbHVkZSA8bWFjaF9hcGljZGVmLmg+Ci0KLSNkZWZpbmUgX19hcGljZGVidWdpbml0KHR5cGUpIHN0YXRpYyB0eXBlIF9faW5pdAotCi1pbnQgKCppb2FwaWNfcmVudW1iZXJfaXJxKShpbnQgaW9hcGljLCBpbnQgaXJxKTsKLWF0b21pY190IGlycV9taXNfY291bnQ7Ci0KLS8qIFdoZXJlIGlmIGFueXdoZXJlIGlzIHRoZSBpODI1OSBjb25uZWN0IGluIGV4dGVybmFsIGludCBtb2RlICovCi1zdGF0aWMgc3RydWN0IHsgaW50IHBpbiwgYXBpYzsgfSBpb2FwaWNfaTgyNTkgPSB7IC0xLCAtMSB9OwotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlvYXBpY19sb2NrKTsKLURFRklORV9TUElOTE9DSyh2ZWN0b3JfbG9jayk7Ci0KLWludCB0aW1lcl90aHJvdWdoXzgyNTkgX19pbml0ZGF0YTsKLQotLyoKLSAqCUlzIHRoZSBTaVMgQVBJQyBybXcgYnVnIHByZXNlbnQgPwotICoJLTEgPSBkb24ndCBrbm93LCAwID0gbm8sIDEgPSB5ZXMKLSAqLwotaW50IHNpc19hcGljX2J1ZyA9IC0xOwotCi0vKgotICogIyBvZiBJUlEgcm91dGluZyByZWdpc3RlcnMKLSAqLwotaW50IG5yX2lvYXBpY19yZWdpc3RlcnNbTUFYX0lPX0FQSUNTXTsKLQotLyogSS9PIEFQSUMgZW50cmllcyAqLwotc3RydWN0IG1wX2NvbmZpZ19pb2FwaWMgbXBfaW9hcGljc1tNQVhfSU9fQVBJQ1NdOwotaW50IG5yX2lvYXBpY3M7Ci0KLS8qIE1QIElSUSBzb3VyY2UgZW50cmllcyAqLwotc3RydWN0IG1wX2NvbmZpZ19pbnRzcmMgbXBfaXJxc1tNQVhfSVJRX1NPVVJDRVNdOwotCi0vKiAjIG9mIE1QIElSUSBzb3VyY2UgZW50cmllcyAqLwotaW50IG1wX2lycV9lbnRyaWVzOwotCi0jaWYgZGVmaW5lZCAoQ09ORklHX01DQSkgfHwgZGVmaW5lZCAoQ09ORklHX0VJU0EpCi1pbnQgbXBfYnVzX2lkX3RvX3R5cGVbTUFYX01QX0JVU1NFU107Ci0jZW5kaWYKLQotREVDTEFSRV9CSVRNQVAobXBfYnVzX25vdF9wY2ksIE1BWF9NUF9CVVNTRVMpOwotCi1zdGF0aWMgaW50IGRpc2FibGVfdGltZXJfcGluXzEgX19pbml0ZGF0YTsKLQotLyoKLSAqIFJvdWdoIGVzdGltYXRpb24gb2YgaG93IG1hbnkgc2hhcmVkIElSUXMgdGhlcmUgYXJlLCBjYW4KLSAqIGJlIGNoYW5nZWQgYW55dGltZS4KLSAqLwotI2RlZmluZSBNQVhfUExVU19TSEFSRURfSVJRUyBOUl9JUlFTCi0jZGVmaW5lIFBJTl9NQVBfU0laRSAoTUFYX1BMVVNfU0hBUkVEX0lSUVMgKyBOUl9JUlFTKQotCi0vKgotICogVGhpcyBpcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgd2Ugd2FudCB0byBkbyBpdCBPKDEpCi0gKgotICogdGhlIGluZGV4aW5nIG9yZGVyIG9mIHRoaXMgYXJyYXkgZmF2b3JzIDE6MSBtYXBwaW5ncwotICogYmV0d2VlbiBwaW5zIGFuZCBJUlFzLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJxX3Bpbl9saXN0IHsKLQlpbnQgYXBpYywgcGluLCBuZXh0OwotfSBpcnFfMl9waW5bUElOX01BUF9TSVpFXTsKLQotc3RydWN0IGlvX2FwaWMgewotCXVuc2lnbmVkIGludCBpbmRleDsKLQl1bnNpZ25lZCBpbnQgdW51c2VkWzNdOwotCXVuc2lnbmVkIGludCBkYXRhOwotfTsKLQotc3RhdGljIF9fYXR0cmlidXRlX2NvbnN0X18gc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpY19iYXNlKGludCBpZHgpCi17Ci0JcmV0dXJuICh2b2lkIF9faW9tZW0gKikgX19maXhfdG9fdmlydChGSVhfSU9fQVBJQ19CQVNFXzAgKyBpZHgpCi0JCSsgKG1wX2lvYXBpY3NbaWR4XS5tcF9hcGljYWRkciAmIH5QQUdFX01BU0spOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19hcGljX3JlYWQodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcpCi17Ci0Jc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKLQl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOwotCXJldHVybiByZWFkbCgmaW9fYXBpYy0+ZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX3dyaXRlKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0Jc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKLQl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOwotCXdyaXRlbCh2YWx1ZSwgJmlvX2FwaWMtPmRhdGEpOwotfQotCi0vKgotICogUmUtd3JpdGUgYSB2YWx1ZTogdG8gYmUgdXNlZCBmb3IgcmVhZC1tb2RpZnktd3JpdGUKLSAqIGN5Y2xlcyB3aGVyZSB0aGUgcmVhZCBhbHJlYWR5IHNldCB1cCB0aGUgaW5kZXggcmVnaXN0ZXIuCi0gKgotICogT2xkZXIgU2lTIEFQSUMgcmVxdWlyZXMgd2UgcmV3cml0ZSB0aGUgaW5kZXggcmVnaXN0ZXIKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfbW9kaWZ5KHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0Jdm9sYXRpbGUgc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKLQlpZiAoc2lzX2FwaWNfYnVnKQotCQl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOwotCXdyaXRlbCh2YWx1ZSwgJmlvX2FwaWMtPmRhdGEpOwotfQotCi11bmlvbiBlbnRyeV91bmlvbiB7Ci0Jc3RydWN0IHsgdTMyIHcxLCB3MjsgfTsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBpb2FwaWNfcmVhZF9lbnRyeShpbnQgYXBpYywgaW50IHBpbikKLXsKLQl1bmlvbiBlbnRyeV91bmlvbiBldTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWV1LncxID0gaW9fYXBpY19yZWFkKGFwaWMsIDB4MTAgKyAyICogcGluKTsKLQlldS53MiA9IGlvX2FwaWNfcmVhZChhcGljLCAweDExICsgMiAqIHBpbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gZXUuZW50cnk7Ci19Ci0KLS8qCi0gKiBXaGVuIHdlIHdyaXRlIGEgbmV3IElPIEFQSUMgcm91dGluZyBlbnRyeSwgd2UgbmVlZCB0byB3cml0ZSB0aGUgaGlnaAotICogd29yZCBmaXJzdCEgSWYgdGhlIG1hc2sgYml0IGluIHRoZSBsb3cgd29yZCBpcyBjbGVhciwgd2Ugd2lsbCBlbmFibGUKLSAqIHRoZSBpbnRlcnJ1cHQsIGFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW50cnkgaXMgZnVsbHkgcG9wdWxhdGVkCi0gKiBiZWZvcmUgdGhhdCBoYXBwZW5zLgotICovCi1zdGF0aWMgdm9pZAotX19pb2FwaWNfd3JpdGVfZW50cnkoaW50IGFwaWMsIGludCBwaW4sIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGUpCi17Ci0JdW5pb24gZW50cnlfdW5pb24gZXU7Ci0JZXUuZW50cnkgPSBlOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIDIqcGluLCBldS53Mik7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDEwICsgMipwaW4sIGV1LncxKTsKLX0KLQotc3RhdGljIHZvaWQgaW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLCBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JX19pb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogV2hlbiB3ZSBtYXNrIGFuIElPIEFQSUMgcm91dGluZyBlbnRyeSwgd2UgbmVlZCB0byB3cml0ZSB0aGUgbG93Ci0gKiB3b3JkIGZpcnN0LCBpbiBvcmRlciB0byBzZXQgdGhlIG1hc2sgYml0IGJlZm9yZSB3ZSBjaGFuZ2UgdGhlCi0gKiBoaWdoIGJpdHMhCi0gKi8KLXN0YXRpYyB2b2lkIGlvYXBpY19tYXNrX2VudHJ5KGludCBhcGljLCBpbnQgcGluKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5pb24gZW50cnlfdW5pb24gZXUgPSB7IC5lbnRyeS5tYXNrID0gMSB9OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDEwICsgMipwaW4sIGV1LncxKTsKLQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyAyKnBpbiwgZXUudzIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBUaGUgY29tbW9uIGNhc2UgaXMgMToxIElSUTwtPnBpbiBtYXBwaW5ncy4gU29tZXRpbWVzIHRoZXJlIGFyZQotICogc2hhcmVkIElTQS1zcGFjZSBJUlFzLCBzbyB3ZSBoYXZlIHRvIHN1cHBvcnQgdGhlbS4gV2UgYXJlIHN1cGVyCi0gKiBmYXN0IGluIHRoZSBjb21tb24gY2FzZSwgYW5kIGZhc3QgZm9yIHNoYXJlZCBJU0Etc3BhY2UgSVJRcy4KLSAqLwotc3RhdGljIHZvaWQgYWRkX3Bpbl90b19pcnEodW5zaWduZWQgaW50IGlycSwgaW50IGFwaWMsIGludCBwaW4pCi17Ci0Jc3RhdGljIGludCBmaXJzdF9mcmVlX2VudHJ5ID0gTlJfSVJRUzsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsKLQotCXdoaWxlIChlbnRyeS0+bmV4dCkKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQotCWlmIChlbnRyeS0+cGluICE9IC0xKSB7Ci0JCWVudHJ5LT5uZXh0ID0gZmlyc3RfZnJlZV9lbnRyeTsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQkJaWYgKCsrZmlyc3RfZnJlZV9lbnRyeSA+PSBQSU5fTUFQX1NJWkUpCi0JCQlwYW5pYygiaW9fYXBpYy5jOiB3aG9vcHMiKTsKLQl9Ci0JZW50cnktPmFwaWMgPSBhcGljOwotCWVudHJ5LT5waW4gPSBwaW47Ci19Ci0KLS8qCi0gKiBSZXJvdXRlIGFuIElSUSB0byBhIGRpZmZlcmVudCBwaW4uCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCByZXBsYWNlX3Bpbl9hdF9pcnEodW5zaWduZWQgaW50IGlycSwKLQkJCQkgICAgICBpbnQgb2xkYXBpYywgaW50IG9sZHBpbiwKLQkJCQkgICAgICBpbnQgbmV3YXBpYywgaW50IG5ld3BpbikKLXsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsKLQotCXdoaWxlICgxKSB7Ci0JCWlmIChlbnRyeS0+YXBpYyA9PSBvbGRhcGljICYmIGVudHJ5LT5waW4gPT0gb2xkcGluKSB7Ci0JCQllbnRyeS0+YXBpYyA9IG5ld2FwaWM7Ci0JCQllbnRyeS0+cGluID0gbmV3cGluOwotCQl9Ci0JCWlmICghZW50cnktPm5leHQpCi0JCQlicmVhazsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9fbW9kaWZ5X0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGxvbmcgZW5hYmxlLCB1bnNpZ25lZCBsb25nIGRpc2FibGUpCi17Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBpcnFfMl9waW4gKyBpcnE7Ci0JdW5zaWduZWQgaW50IHBpbiwgcmVnOwotCi0JZm9yICg7OykgewotCQlwaW4gPSBlbnRyeS0+cGluOwotCQlpZiAocGluID09IC0xKQotCQkJYnJlYWs7Ci0JCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbioyKTsKLQkJcmVnICY9IH5kaXNhYmxlOwotCQlyZWcgfD0gZW5hYmxlOwotCQlpb19hcGljX21vZGlmeShlbnRyeS0+YXBpYywgMHgxMCArIHBpbioyLCByZWcpOwotCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJYnJlYWs7Ci0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0JfQotfQotCi0vKiBtYXNrID0gMSAqLwotc3RhdGljIHZvaWQgX19tYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JX19tb2RpZnlfSU9fQVBJQ19pcnEoaXJxLCBJT19BUElDX1JFRElSX01BU0tFRCwgMCk7Ci19Ci0KLS8qIG1hc2sgPSAwICovCi1zdGF0aWMgdm9pZCBfX3VubWFza19JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCV9fbW9kaWZ5X0lPX0FQSUNfaXJxKGlycSwgMCwgSU9fQVBJQ19SRURJUl9NQVNLRUQpOwotfQotCi0vKiBtYXNrID0gMSwgdHJpZ2dlciA9IDAgKi8KLXN0YXRpYyB2b2lkIF9fbWFza19hbmRfZWRnZV9JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCV9fbW9kaWZ5X0lPX0FQSUNfaXJxKGlycSwgSU9fQVBJQ19SRURJUl9NQVNLRUQsCi0JCQkJSU9fQVBJQ19SRURJUl9MRVZFTF9UUklHR0VSKTsKLX0KLQotLyogbWFzayA9IDAsIHRyaWdnZXIgPSAxICovCi1zdGF0aWMgdm9pZCBfX3VubWFza19hbmRfbGV2ZWxfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlfX21vZGlmeV9JT19BUElDX2lycShpcnEsIElPX0FQSUNfUkVESVJfTEVWRUxfVFJJR0dFUiwKLQkJCQlJT19BUElDX1JFRElSX01BU0tFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JX19tYXNrX0lPX0FQSUNfaXJxKGlycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgdW5tYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9fdW5tYXNrX0lPX0FQSUNfaXJxKGlycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYXJfSU9fQVBJQ19waW4odW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCBwaW4pCi17Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQkvKiBDaGVjayBkZWxpdmVyeV9tb2RlIHRvIGJlIHN1cmUgd2UncmUgbm90IGNsZWFyaW5nIGFuIFNNSSBwaW4gKi8KLQllbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7Ci0JaWYgKGVudHJ5LmRlbGl2ZXJ5X21vZGUgPT0gZGVzdF9TTUkpCi0JCXJldHVybjsKLQotCS8qCi0JICogRGlzYWJsZSBpdCBpbiB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKLQkgKi8KLQlpb2FwaWNfbWFza19lbnRyeShhcGljLCBwaW4pOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhcl9JT19BUElDKHZvaWQpCi17Ci0JaW50IGFwaWMsIHBpbjsKLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCi0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspCi0JCQljbGVhcl9JT19BUElDX3BpbihhcGljLCBwaW4pOwotfQotCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIHZvaWQgc2V0X2lvYXBpY19hZmZpbml0eV9pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IGNwdW1hc2spCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcGluOwotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5ID0gaXJxXzJfcGluICsgaXJxOwotCXVuc2lnbmVkIGludCBhcGljaWRfdmFsdWU7Ci0JY3B1bWFza190IHRtcDsKLQotCWNwdXNfYW5kKHRtcCwgY3B1bWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXRtcCA9IFRBUkdFVF9DUFVTOwotCi0JY3B1c19hbmQoY3B1bWFzaywgdG1wLCBDUFVfTUFTS19BTEwpOwotCi0JYXBpY2lkX3ZhbHVlID0gY3B1X21hc2tfdG9fYXBpY2lkKGNwdW1hc2spOwotCS8qIFByZXBhcmUgdG8gZG8gdGhlIGlvX2FwaWNfd3JpdGUgKi8KLQlhcGljaWRfdmFsdWUgPSBhcGljaWRfdmFsdWUgPDwgMjQ7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JZm9yICg7OykgewotCQlwaW4gPSBlbnRyeS0+cGluOwotCQlpZiAocGluID09IC0xKQotCQkJYnJlYWs7Ci0JCWlvX2FwaWNfd3JpdGUoZW50cnktPmFwaWMsIDB4MTAgKyAxICsgcGluKjIsIGFwaWNpZF92YWx1ZSk7Ci0JCWlmICghZW50cnktPm5leHQpCi0JCQlicmVhazsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQl9Ci0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IGNwdW1hc2s7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0lSUUJBTEFOQ0UpCi0jIGluY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JLyoga2VybmVsX3RocmVhZCgpICovCi0jIGluY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CS8qIGtzdGF0ICovCi0jIGluY2x1ZGUgPGxpbnV4L3NsYWIuaD4JCS8qIGttYWxsb2MoKSAqLwotIyBpbmNsdWRlIDxsaW51eC90aW1lci5oPgotCi0jZGVmaW5lIElSUUJBTEFOQ0VfQ0hFQ0tfQVJDSCAtOTk5Ci0jZGVmaW5lIE1BWF9CQUxBTkNFRF9JUlFfSU5URVJWQUwJKDUqSFopCi0jZGVmaW5lIE1JTl9CQUxBTkNFRF9JUlFfSU5URVJWQUwJKEhaLzIpCi0jZGVmaW5lIEJBTEFOQ0VEX0lSUV9NT1JFX0RFTFRBCQkoSFovMTApCi0jZGVmaW5lIEJBTEFOQ0VEX0lSUV9MRVNTX0RFTFRBCQkoSFopCi0KLXN0YXRpYyBpbnQgaXJxYmFsYW5jZV9kaXNhYmxlZCBfX3JlYWRfbW9zdGx5ID0gSVJRQkFMQU5DRV9DSEVDS19BUkNIOwotc3RhdGljIGludCBwaHlzaWNhbF9iYWxhbmNlIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgbG9uZyBiYWxhbmNlZF9pcnFfaW50ZXJ2YWwgX19yZWFkX21vc3RseSA9IE1BWF9CQUxBTkNFRF9JUlFfSU5URVJWQUw7Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NwdV9pbmZvIHsKLQl1bnNpZ25lZCBsb25nICpsYXN0X2lycTsKLQl1bnNpZ25lZCBsb25nICppcnFfZGVsdGE7Ci0JdW5zaWduZWQgbG9uZyBpcnE7Ci19IGlycV9jcHVfZGF0YVtOUl9DUFVTXTsKLQotI2RlZmluZSBDUFVfSVJRKGNwdSkJCShpcnFfY3B1X2RhdGFbY3B1XS5pcnEpCi0jZGVmaW5lIExBU1RfQ1BVX0lSUShjcHUsIGlycSkgICAoaXJxX2NwdV9kYXRhW2NwdV0ubGFzdF9pcnFbaXJxXSkKLSNkZWZpbmUgSVJRX0RFTFRBKGNwdSwgaXJxKSAJKGlycV9jcHVfZGF0YVtjcHVdLmlycV9kZWx0YVtpcnFdKQotCi0jZGVmaW5lIElETEVfRU5PVUdIKGNwdSxub3cpIFwKLQkoaWRsZV9jcHUoY3B1KSAmJiAoKG5vdykgLSBwZXJfY3B1KGlycV9zdGF0LCAoY3B1KSkuaWRsZV90aW1lc3RhbXAgPiAxKSkKLQotI2RlZmluZSBJUlFfQUxMT1dFRChjcHUsIGFsbG93ZWRfbWFzaykJY3B1X2lzc2V0KGNwdSwgYWxsb3dlZF9tYXNrKQotCi0jZGVmaW5lIENQVV9UT19QQUNLQUdFSU5ERVgoaSkgKGZpcnN0X2NwdShwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSkpKQotCi1zdGF0aWMgY3B1bWFza190IGJhbGFuY2VfaXJxX2FmZmluaXR5W05SX0lSUVNdID0gewotCVswIC4uLiBOUl9JUlFTLTFdID0gQ1BVX01BU0tfQUxMCi19OwotCi12b2lkIHNldF9iYWxhbmNlX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQliYWxhbmNlX2lycV9hZmZpbml0eVtpcnFdID0gbWFzazsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbW92ZShpbnQgY3Vycl9jcHUsIGNwdW1hc2tfdCBhbGxvd2VkX21hc2ssCi0JCQl1bnNpZ25lZCBsb25nIG5vdywgaW50IGRpcmVjdGlvbikKLXsKLQlpbnQgc2VhcmNoX2lkbGUgPSAxOwotCWludCBjcHUgPSBjdXJyX2NwdTsKLQotCWdvdG8gaW5zaWRlOwotCi0JZG8gewotCQlpZiAodW5saWtlbHkoY3B1ID09IGN1cnJfY3B1KSkKLQkJCXNlYXJjaF9pZGxlID0gMDsKLWluc2lkZToKLQkJaWYgKGRpcmVjdGlvbiA9PSAxKSB7Ci0JCQljcHUrKzsKLQkJCWlmIChjcHUgPj0gTlJfQ1BVUykKLQkJCQljcHUgPSAwOwotCQl9IGVsc2UgewotCQkJY3B1LS07Ci0JCQlpZiAoY3B1ID09IC0xKQotCQkJCWNwdSA9IE5SX0NQVVMtMTsKLQkJfQotCX0gd2hpbGUgKCFjcHVfb25saW5lKGNwdSkgfHwgIUlSUV9BTExPV0VEKGNwdSwgYWxsb3dlZF9tYXNrKSB8fAotCQkJKHNlYXJjaF9pZGxlICYmICFJRExFX0VOT1VHSChjcHUsIG5vdykpKTsKLQotCXJldHVybiBjcHU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiYWxhbmNlX2lycShpbnQgY3B1LCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKLQljcHVtYXNrX3QgYWxsb3dlZF9tYXNrOwotCXVuc2lnbmVkIGludCBuZXdfY3B1OwotCi0JaWYgKGlycWJhbGFuY2VfZGlzYWJsZWQpCi0JCXJldHVybjsKLQotCWNwdXNfYW5kKGFsbG93ZWRfbWFzaywgY3B1X29ubGluZV9tYXAsIGJhbGFuY2VfaXJxX2FmZmluaXR5W2lycV0pOwotCW5ld19jcHUgPSBtb3ZlKGNwdSwgYWxsb3dlZF9tYXNrLCBub3csIDEpOwotCWlmIChjcHUgIT0gbmV3X2NwdSkKLQkJc2V0X3BlbmRpbmdfaXJxKGlycSwgY3B1bWFza19vZl9jcHUobmV3X2NwdSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcm90YXRlX2lycXNfYW1vbmdfY3B1cyh1bnNpZ25lZCBsb25nIHVzZWZ1bF9sb2FkX3RocmVzaG9sZCkKLXsKLQlpbnQgaSwgajsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlmb3IgKGogPSAwOyBqIDwgTlJfSVJRUzsgaisrKSB7Ci0JCQlpZiAoIWlycV9kZXNjW2pdLmFjdGlvbikKLQkJCQljb250aW51ZTsKLQkJCS8qIElzIGl0IGEgc2lnbmlmaWNhbnQgbG9hZCA/ICAqLwotCQkJaWYgKElSUV9ERUxUQShDUFVfVE9fUEFDS0FHRUlOREVYKGkpLCBqKSA8Ci0JCQkJCQl1c2VmdWxfbG9hZF90aHJlc2hvbGQpCi0JCQkJY29udGludWU7Ci0JCQliYWxhbmNlX2lycShpLCBqKTsKLQkJfQotCX0KLQliYWxhbmNlZF9pcnFfaW50ZXJ2YWwgPSBtYXgoKGxvbmcpTUlOX0JBTEFOQ0VEX0lSUV9JTlRFUlZBTCwKLQkJYmFsYW5jZWRfaXJxX2ludGVydmFsIC0gQkFMQU5DRURfSVJRX0xFU1NfREVMVEEpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgZG9faXJxX2JhbGFuY2Uodm9pZCkKLXsKLQlpbnQgaSwgajsKLQl1bnNpZ25lZCBsb25nIG1heF9jcHVfaXJxID0gMCwgbWluX2NwdV9pcnEgPSAofjApOwotCXVuc2lnbmVkIGxvbmcgbW92ZV90aGlzX2xvYWQgPSAwOwotCWludCBtYXhfbG9hZGVkID0gMCwgbWluX2xvYWRlZCA9IDA7Ci0JaW50IGxvYWQ7Ci0JdW5zaWduZWQgbG9uZyB1c2VmdWxfbG9hZF90aHJlc2hvbGQgPSBiYWxhbmNlZF9pcnFfaW50ZXJ2YWwgKyAxMDsKLQlpbnQgc2VsZWN0ZWRfaXJxOwotCWludCB0bXBfbG9hZGVkLCBmaXJzdF9hdHRlbXB0ID0gMTsKLQl1bnNpZ25lZCBsb25nIHRtcF9jcHVfaXJxOwotCXVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlID0gMDsKLQljcHVtYXNrX3QgYWxsb3dlZF9tYXNrLCB0YXJnZXRfY3B1X21hc2ssIHRtcDsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCWludCBwYWNrYWdlX2luZGV4OwotCQlDUFVfSVJRKGkpID0gMDsKLQkJaWYgKCFjcHVfb25saW5lKGkpKQotCQkJY29udGludWU7Ci0JCXBhY2thZ2VfaW5kZXggPSBDUFVfVE9fUEFDS0FHRUlOREVYKGkpOwotCQlmb3IgKGogPSAwOyBqIDwgTlJfSVJRUzsgaisrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHZhbHVlX25vdywgZGVsdGE7Ci0JCQkvKiBJcyB0aGlzIGFuIGFjdGl2ZSBJUlEgb3IgYmFsYW5jaW5nIGRpc2FibGVkID8gKi8KLQkJCWlmICghaXJxX2Rlc2Nbal0uYWN0aW9uIHx8IGlycV9iYWxhbmNpbmdfZGlzYWJsZWQoaikpCi0JCQkJY29udGludWU7Ci0JCQlpZiAocGFja2FnZV9pbmRleCA9PSBpKQotCQkJCUlSUV9ERUxUQShwYWNrYWdlX2luZGV4LCBqKSA9IDA7Ci0JCQkvKiBEZXRlcm1pbmUgdGhlIHRvdGFsIGNvdW50IHBlciBwcm9jZXNzb3IgcGVyIElSUSAqLwotCQkJdmFsdWVfbm93ID0gKHVuc2lnbmVkIGxvbmcpIGtzdGF0X2NwdShpKS5pcnFzW2pdOwotCi0JCQkvKiBEZXRlcm1pbmUgdGhlIGFjdGl2aXR5IHBlciBwcm9jZXNzb3IgcGVyIElSUSAqLwotCQkJZGVsdGEgPSB2YWx1ZV9ub3cgLSBMQVNUX0NQVV9JUlEoaSwgaik7Ci0KLQkJCS8qIFVwZGF0ZSBsYXN0X2NwdV9pcnFbXVtdIGZvciB0aGUgbmV4dCB0aW1lICovCi0JCQlMQVNUX0NQVV9JUlEoaSwgaikgPSB2YWx1ZV9ub3c7Ci0KLQkJCS8qIElnbm9yZSBJUlFzIHdob3NlIHJhdGUgaXMgbGVzcyB0aGFuIHRoZSBjbG9jayAqLwotCQkJaWYgKGRlbHRhIDwgdXNlZnVsX2xvYWRfdGhyZXNob2xkKQotCQkJCWNvbnRpbnVlOwotCQkJLyogdXBkYXRlIHRoZSBsb2FkIGZvciB0aGUgcHJvY2Vzc29yIG9yIHBhY2thZ2UgdG90YWwgKi8KLQkJCUlSUV9ERUxUQShwYWNrYWdlX2luZGV4LCBqKSArPSBkZWx0YTsKLQotCQkJLyogS2VlcCB0cmFjayBvZiB0aGUgaGlnaGVyIG51bWJlcmVkIHNpYmxpbmcgYXMgd2VsbCAqLwotCQkJaWYgKGkgIT0gcGFja2FnZV9pbmRleCkKLQkJCQlDUFVfSVJRKGkpICs9IGRlbHRhOwotCQkJLyoKLQkJCSAqIFdlIGhhdmUgc2libGluZyBBIGFuZCBzaWJsaW5nIEIgaW4gdGhlIHBhY2thZ2UKLQkJCSAqCi0JCQkgKiBjcHVfaXJxW0FdID0gbG9hZCBmb3IgY3B1IEEgKyBsb2FkIGZvciBjcHUgQgotCQkJICogY3B1X2lycVtCXSA9IGxvYWQgZm9yIGNwdSBCCi0JCQkgKi8KLQkJCUNQVV9JUlEocGFja2FnZV9pbmRleCkgKz0gZGVsdGE7Ci0JCX0KLQl9Ci0JLyogRmluZCB0aGUgbGVhc3QgbG9hZGVkIHByb2Nlc3NvciBwYWNrYWdlICovCi0JZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCWlmIChpICE9IENQVV9UT19QQUNLQUdFSU5ERVgoaSkpCi0JCQljb250aW51ZTsKLQkJaWYgKG1pbl9jcHVfaXJxID4gQ1BVX0lSUShpKSkgewotCQkJbWluX2NwdV9pcnEgPSBDUFVfSVJRKGkpOwotCQkJbWluX2xvYWRlZCA9IGk7Ci0JCX0KLQl9Ci0JbWF4X2NwdV9pcnEgPSBVTE9OR19NQVg7Ci0KLXRyeWFub3RoZXJjcHU6Ci0JLyoKLQkgKiBMb29rIGZvciBoZWF2aWVzdCBsb2FkZWQgcHJvY2Vzc29yLgotCSAqIFdlIG1heSBjb21lIGJhY2sgdG8gZ2V0IHRoZSBuZXh0IGhlYXZpZXN0IGxvYWRlZCBwcm9jZXNzb3IuCi0JICogU2tpcCBwcm9jZXNzb3JzIHdpdGggdHJpdmlhbCBsb2Fkcy4KLQkgKi8KLQl0bXBfY3B1X2lycSA9IDA7Ci0JdG1wX2xvYWRlZCA9IC0xOwotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlpZiAoaSAhPSBDUFVfVE9fUEFDS0FHRUlOREVYKGkpKQotCQkJY29udGludWU7Ci0JCWlmIChtYXhfY3B1X2lycSA8PSBDUFVfSVJRKGkpKQotCQkJY29udGludWU7Ci0JCWlmICh0bXBfY3B1X2lycSA8IENQVV9JUlEoaSkpIHsKLQkJCXRtcF9jcHVfaXJxID0gQ1BVX0lSUShpKTsKLQkJCXRtcF9sb2FkZWQgPSBpOwotCQl9Ci0JfQotCi0JaWYgKHRtcF9sb2FkZWQgPT0gLTEpIHsKLQkgLyoKLQkgICogSW4gdGhlIGNhc2Ugb2Ygc21hbGwgbnVtYmVyIG9mIGhlYXZ5IGludGVycnVwdCBzb3VyY2VzLAotCSAgKiBsb2FkaW5nIHNvbWUgb2YgdGhlIGNwdXMgdG9vIG11Y2guIFdlIHVzZSBJbmdvJ3Mgb3JpZ2luYWwKLQkgICogYXBwcm9hY2ggdG8gcm90YXRlIHRoZW0gYXJvdW5kLgotCSAgKi8KLQkJaWYgKCFmaXJzdF9hdHRlbXB0ICYmIGltYmFsYW5jZSA+PSB1c2VmdWxfbG9hZF90aHJlc2hvbGQpIHsKLQkJCXJvdGF0ZV9pcnFzX2Ftb25nX2NwdXModXNlZnVsX2xvYWRfdGhyZXNob2xkKTsKLQkJCXJldHVybjsKLQkJfQotCQlnb3RvIG5vdF93b3J0aF90aGVfZWZmb3J0OwotCX0KLQotCWZpcnN0X2F0dGVtcHQgPSAwOwkJLyogaGVhdmllc3Qgc2VhcmNoICovCi0JbWF4X2NwdV9pcnEgPSB0bXBfY3B1X2lycTsJLyogbG9hZCAqLwotCW1heF9sb2FkZWQgPSB0bXBfbG9hZGVkOwkvKiBwcm9jZXNzb3IgKi8KLQlpbWJhbGFuY2UgPSAobWF4X2NwdV9pcnEgLSBtaW5fY3B1X2lycSkgLyAyOwotCi0JLyoKLQkgKiBpZiBpbWJhbGFuY2UgaXMgbGVzcyB0aGFuIGFwcHJveCAxMCUgb2YgbWF4IGxvYWQsIHRoZW4KLQkgKiBvYnNlcnZlIGRpbWluaXNoaW5nIHJldHVybnMgYWN0aW9uLiAtIHF1aXQKLQkgKi8KLQlpZiAoaW1iYWxhbmNlIDwgKG1heF9jcHVfaXJxID4+IDMpKQotCQlnb3RvIG5vdF93b3J0aF90aGVfZWZmb3J0OwotCi10cnlhbm90aGVyaXJxOgotCS8qIGlmIHdlIHNlbGVjdCBhbiBJUlEgdG8gbW92ZSB0aGF0IGNhbid0IGdvIHdoZXJlIHdlIHdhbnQsIHRoZW4KLQkgKiBzZWUgaWYgdGhlcmUgaXMgYW5vdGhlciBvbmUgdG8gdHJ5LgotCSAqLwotCW1vdmVfdGhpc19sb2FkID0gMDsKLQlzZWxlY3RlZF9pcnEgPSAtMTsKLQlmb3IgKGogPSAwOyBqIDwgTlJfSVJRUzsgaisrKSB7Ci0JCS8qIElzIHRoaXMgYW4gYWN0aXZlIElSUT8gKi8KLQkJaWYgKCFpcnFfZGVzY1tqXS5hY3Rpb24pCi0JCQljb250aW51ZTsKLQkJaWYgKGltYmFsYW5jZSA8PSBJUlFfREVMVEEobWF4X2xvYWRlZCwgaikpCi0JCQljb250aW51ZTsKLQkJLyogVHJ5IHRvIGZpbmQgdGhlIElSUSB0aGF0IGlzIGNsb3Nlc3QgdG8gdGhlIGltYmFsYW5jZQotCQkgKiB3aXRob3V0IGdvaW5nIG92ZXIuCi0JCSAqLwotCQlpZiAobW92ZV90aGlzX2xvYWQgPCBJUlFfREVMVEEobWF4X2xvYWRlZCwgaikpIHsKLQkJCW1vdmVfdGhpc19sb2FkID0gSVJRX0RFTFRBKG1heF9sb2FkZWQsIGopOwotCQkJc2VsZWN0ZWRfaXJxID0gajsKLQkJfQotCX0KLQlpZiAoc2VsZWN0ZWRfaXJxID09IC0xKQotCQlnb3RvIHRyeWFub3RoZXJjcHU7Ci0KLQlpbWJhbGFuY2UgPSBtb3ZlX3RoaXNfbG9hZDsKLQotCS8qIEZvciBwaHlzaWNhbF9iYWxhbmNlIGNhc2UsIHdlIGFjY3VtdWxhdGVkIGJvdGggbG9hZAotCSAqIHZhbHVlcyBpbiB0aGUgb25lIG9mIHRoZSBzaWJsaW5ncyBjcHVfaXJxW10sCi0JICogdG8gdXNlIHRoZSBzYW1lIGNvZGUgZm9yIHBoeXNpY2FsIGFuZCBsb2dpY2FsIHByb2Nlc3NvcnMKLQkgKiBhcyBtdWNoIGFzIHBvc3NpYmxlLgotCSAqCi0JICogTk9URTogdGhlIGNwdV9pcnFbXSBhcnJheSBob2xkcyB0aGUgc3VtIG9mIHRoZSBsb2FkIGZvcgotCSAqIHNpYmxpbmcgQSBhbmQgc2libGluZyBCIGluIHRoZSBzbG90IGZvciB0aGUgbG93ZXN0IG51bWJlcmVkCi0JICogc2libGluZyAoQSksIF9BTkRfIHRoZSBsb2FkIGZvciBzaWJsaW5nIEIgaW4gdGhlIHNsb3QgZm9yCi0JICogdGhlIGhpZ2hlciBudW1iZXJlZCBzaWJsaW5nLgotCSAqCi0JICogV2Ugc2VlayB0aGUgbGVhc3QgbG9hZGVkIHNpYmxpbmcgYnkgbWFraW5nIHRoZSBjb21wYXJpc29uCi0JICogKEErQikvMiB2cyBCCi0JICovCi0JbG9hZCA9IENQVV9JUlEobWluX2xvYWRlZCkgPj4gMTsKLQlmb3JfZWFjaF9jcHVfbWFzayhqLCBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgbWluX2xvYWRlZCkpIHsKLQkJaWYgKGxvYWQgPiBDUFVfSVJRKGopKSB7Ci0JCQkvKiBUaGlzIHdvbid0IGNoYW5nZSBjcHVfc2libGluZ19tYXBbbWluX2xvYWRlZF0gKi8KLQkJCWxvYWQgPSBDUFVfSVJRKGopOwotCQkJbWluX2xvYWRlZCA9IGo7Ci0JCX0KLQl9Ci0KLQljcHVzX2FuZChhbGxvd2VkX21hc2ssCi0JCWNwdV9vbmxpbmVfbWFwLAotCQliYWxhbmNlX2lycV9hZmZpbml0eVtzZWxlY3RlZF9pcnFdKTsKLQl0YXJnZXRfY3B1X21hc2sgPSBjcHVtYXNrX29mX2NwdShtaW5fbG9hZGVkKTsKLQljcHVzX2FuZCh0bXAsIHRhcmdldF9jcHVfbWFzaywgYWxsb3dlZF9tYXNrKTsKLQotCWlmICghY3B1c19lbXB0eSh0bXApKSB7Ci0JCS8qIG1hcmsgZm9yIGNoYW5nZSBkZXN0aW5hdGlvbiAqLwotCQlzZXRfcGVuZGluZ19pcnEoc2VsZWN0ZWRfaXJxLCBjcHVtYXNrX29mX2NwdShtaW5fbG9hZGVkKSk7Ci0KLQkJLyogU2luY2Ugd2UgbWFkZSBhIGNoYW5nZSwgY29tZSBiYWNrIHNvb25lciB0bwotCQkgKiBjaGVjayBmb3IgbW9yZSB2YXJpYXRpb24uCi0JCSAqLwotCQliYWxhbmNlZF9pcnFfaW50ZXJ2YWwgPSBtYXgoKGxvbmcpTUlOX0JBTEFOQ0VEX0lSUV9JTlRFUlZBTCwKLQkJCWJhbGFuY2VkX2lycV9pbnRlcnZhbCAtIEJBTEFOQ0VEX0lSUV9MRVNTX0RFTFRBKTsKLQkJcmV0dXJuOwotCX0KLQlnb3RvIHRyeWFub3RoZXJpcnE7Ci0KLW5vdF93b3J0aF90aGVfZWZmb3J0OgotCS8qCi0JICogaWYgd2UgZGlkIG5vdCBmaW5kIGFuIElSUSB0byBtb3ZlLCB0aGVuIGFkanVzdCB0aGUgdGltZSBpbnRlcnZhbAotCSAqIHVwd2FyZAotCSAqLwotCWJhbGFuY2VkX2lycV9pbnRlcnZhbCA9IG1pbigobG9uZylNQVhfQkFMQU5DRURfSVJRX0lOVEVSVkFMLAotCQliYWxhbmNlZF9pcnFfaW50ZXJ2YWwgKyBCQUxBTkNFRF9JUlFfTU9SRV9ERUxUQSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGJhbGFuY2VkX2lycSh2b2lkICp1bnVzZWQpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBwcmV2X2JhbGFuY2VfdGltZSA9IGppZmZpZXM7Ci0JbG9uZyB0aW1lX3JlbWFpbmluZyA9IGJhbGFuY2VkX2lycV9pbnRlcnZhbDsKLQotCS8qIHB1c2ggZXZlcnl0aGluZyB0byBDUFUgMCB0byBnaXZlIHVzIGEgc3RhcnRpbmcgcG9pbnQuICAqLwotCWZvciAoaSA9IDAgOyBpIDwgTlJfSVJRUyA7IGkrKykgewotCQlpcnFfZGVzY1tpXS5wZW5kaW5nX21hc2sgPSBjcHVtYXNrX29mX2NwdSgwKTsKLQkJc2V0X3BlbmRpbmdfaXJxKGksIGNwdW1hc2tfb2ZfY3B1KDApKTsKLQl9Ci0KLQlzZXRfZnJlZXphYmxlKCk7Ci0JZm9yICggOyA7ICkgewotCQl0aW1lX3JlbWFpbmluZyA9IHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSh0aW1lX3JlbWFpbmluZyk7Ci0JCXRyeV90b19mcmVlemUoKTsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJCQlwcmV2X2JhbGFuY2VfdGltZStiYWxhbmNlZF9pcnFfaW50ZXJ2YWwpKSB7Ci0JCQlwcmVlbXB0X2Rpc2FibGUoKTsKLQkJCWRvX2lycV9iYWxhbmNlKCk7Ci0JCQlwcmV2X2JhbGFuY2VfdGltZSA9IGppZmZpZXM7Ci0JCQl0aW1lX3JlbWFpbmluZyA9IGJhbGFuY2VkX2lycV9pbnRlcnZhbDsKLQkJCXByZWVtcHRfZW5hYmxlKCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGJhbGFuY2VkX2lycV9pbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjOwotCWNwdW1hc2tfdCB0bXA7Ci0KLQljcHVzX3NoaWZ0X3JpZ2h0KHRtcCwgY3B1X29ubGluZV9tYXAsIDIpOwotCWMgPSAmYm9vdF9jcHVfZGF0YTsKLQkvKiBXaGVuIG5vdCBvdmVyd3JpdHRlbiBieSB0aGUgY29tbWFuZCBsaW5lIGFzayBzdWJhcmNoaXRlY3R1cmUuICovCi0JaWYgKGlycWJhbGFuY2VfZGlzYWJsZWQgPT0gSVJRQkFMQU5DRV9DSEVDS19BUkNIKQotCQlpcnFiYWxhbmNlX2Rpc2FibGVkID0gTk9fQkFMQU5DRV9JUlE7Ci0JaWYgKGlycWJhbGFuY2VfZGlzYWJsZWQpCi0JCXJldHVybiAwOwotCi0JIC8qIGRpc2FibGUgaXJxYmFsYW5jZSBjb21wbGV0ZWx5IGlmIHRoZXJlIGlzIG9ubHkgb25lIHByb2Nlc3NvciBvbmxpbmUgKi8KLQlpZiAobnVtX29ubGluZV9jcHVzKCkgPCAyKSB7Ci0JCWlycWJhbGFuY2VfZGlzYWJsZWQgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyoKLQkgKiBFbmFibGUgcGh5c2ljYWwgYmFsYW5jZSBvbmx5IGlmIG1vcmUgdGhhbiAxIHBoeXNpY2FsIHByb2Nlc3NvcgotCSAqIGlzIHByZXNlbnQKLQkgKi8KLQlpZiAoc21wX251bV9zaWJsaW5ncyA+IDEgJiYgIWNwdXNfZW1wdHkodG1wKSkKLQkJcGh5c2ljYWxfYmFsYW5jZSA9IDE7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJaXJxX2NwdV9kYXRhW2ldLmlycV9kZWx0YSA9IGt6YWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogTlJfSVJRUywgR0ZQX0tFUk5FTCk7Ci0JCWlycV9jcHVfZGF0YVtpXS5sYXN0X2lycSA9IGt6YWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogTlJfSVJRUywgR0ZQX0tFUk5FTCk7Ci0JCWlmIChpcnFfY3B1X2RhdGFbaV0uaXJxX2RlbHRhID09IE5VTEwgfHwgaXJxX2NwdV9kYXRhW2ldLmxhc3RfaXJxID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiYmFsYW5jZWRfaXJxX2luaXQ6IG91dCBvZiBtZW1vcnkiKTsKLQkJCWdvdG8gZmFpbGVkOwotCQl9Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiU3RhcnRpbmcgYmFsYW5jZWRfaXJxXG4iKTsKLQlpZiAoIUlTX0VSUihrdGhyZWFkX3J1bihiYWxhbmNlZF9pcnEsIE5VTEwsICJraXJxZCIpKSkKLQkJcmV0dXJuIDA7Ci0JcHJpbnRrKEtFUk5fRVJSICJiYWxhbmNlZF9pcnFfaW5pdDogZmFpbGVkIHRvIHNwYXduIGJhbGFuY2VkX2lycSIpOwotZmFpbGVkOgotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCWtmcmVlKGlycV9jcHVfZGF0YVtpXS5pcnFfZGVsdGEpOwotCQlpcnFfY3B1X2RhdGFbaV0uaXJxX2RlbHRhID0gTlVMTDsKLQkJa2ZyZWUoaXJxX2NwdV9kYXRhW2ldLmxhc3RfaXJxKTsKLQkJaXJxX2NwdV9kYXRhW2ldLmxhc3RfaXJxID0gTlVMTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBfX2RldmluaXQgaXJxYmFsYW5jZV9kaXNhYmxlKGNoYXIgKnN0cikKLXsKLQlpcnFiYWxhbmNlX2Rpc2FibGVkID0gMTsKLQlyZXR1cm4gMTsKLX0KLQotX19zZXR1cCgibm9pcnFiYWxhbmNlIiwgaXJxYmFsYW5jZV9kaXNhYmxlKTsKLQotbGF0ZV9pbml0Y2FsbChiYWxhbmNlZF9pcnFfaW5pdCk7Ci0jZW5kaWYgLyogQ09ORklHX0lSUUJBTEFOQ0UgKi8KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KLSNpZm5kZWYgQ09ORklHX1NNUAotdm9pZCBzZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpCi17Ci0JdW5zaWduZWQgaW50IGNmZzsKLQotCS8qCi0JICogV2FpdCBmb3IgaWRsZS4KLQkgKi8KLQlhcGljX3dhaXRfaWNyX2lkbGUoKTsKLQljZmcgPSBBUElDX0RNX0ZJWEVEIHwgQVBJQ19ERVNUX1NFTEYgfCB2ZWN0b3IgfCBBUElDX0RFU1RfTE9HSUNBTDsKLQkvKgotCSAqIFNlbmQgdGhlIElQSS4gVGhlIHdyaXRlIHRvIEFQSUNfSUNSIGZpcmVzIHRoaXMgb2ZmLgotCSAqLwotCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIGNmZyk7Ci19Ci0jZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KLQotCi0vKgotICogc3VwcG9ydCBmb3IgYnJva2VuIE1QIEJJT1NzLCBlbmFibGVzIGhhbmQtcmVkaXJlY3Rpb24gb2YgUElSUTAtNyB0bwotICogc3BlY2lmaWMgQ1BVLXNpZGUgSVJRcy4KLSAqLwotCi0jZGVmaW5lIE1BWF9QSVJRUyA4Ci1zdGF0aWMgaW50IHBpcnFfZW50cmllcyBbTUFYX1BJUlFTXTsKLXN0YXRpYyBpbnQgcGlycXNfZW5hYmxlZDsKLWludCBza2lwX2lvYXBpY19zZXR1cDsKLQotc3RhdGljIGludCBfX2luaXQgaW9hcGljX3BpcnFfc2V0dXAoY2hhciAqc3RyKQotewotCWludCBpLCBtYXg7Ci0JaW50IGludHNbTUFYX1BJUlFTKzFdOwotCi0JZ2V0X29wdGlvbnMoc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfUElSUVM7IGkrKykKLQkJcGlycV9lbnRyaWVzW2ldID0gLTE7Ci0KLQlwaXJxc19lbmFibGVkID0gMTsKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTwotCQkJIlBJUlEgcmVkaXJlY3Rpb24sIHdvcmtpbmcgYXJvdW5kIGJyb2tlbiBNUC1CSU9TLlxuIik7Ci0JbWF4ID0gTUFYX1BJUlFTOwotCWlmIChpbnRzWzBdIDwgTUFYX1BJUlFTKQotCQltYXggPSBpbnRzWzBdOwotCi0JZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRwotCQkJCSIuLi4gUElSUSVkIC0+IElSUSAlZFxuIiwgaSwgaW50c1tpKzFdKTsKLQkJLyoKLQkJICogUElSUXMgYXJlIG1hcHBlZCB1cHNpZGUgZG93biwgdXN1YWxseS4KLQkJICovCi0JCXBpcnFfZW50cmllc1tNQVhfUElSUVMtaS0xXSA9IGludHNbaSsxXTsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoInBpcnE9IiwgaW9hcGljX3BpcnFfc2V0dXApOwotCi0vKgotICogRmluZCB0aGUgSVJRIGVudHJ5IG51bWJlciBvZiBhIGNlcnRhaW4gcGluLgotICovCi1zdGF0aWMgaW50IGZpbmRfaXJxX2VudHJ5KGludCBhcGljLCBpbnQgcGluLCBpbnQgdHlwZSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKQotCQlpZiAobXBfaXJxc1tpXS5tcF9pcnF0eXBlID09IHR5cGUgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX2RzdGFwaWMgPT0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgfHwKLQkJICAgICBtcF9pcnFzW2ldLm1wX2RzdGFwaWMgPT0gTVBfQVBJQ19BTEwpICYmCi0JCSAgICBtcF9pcnFzW2ldLm1wX2RzdGlycSA9PSBwaW4pCi0JCQlyZXR1cm4gaTsKLQotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIEZpbmQgdGhlIHBpbiB0byB3aGljaCBJUlFbaXJxXSAoSVNBKSBpcyBjb25uZWN0ZWQKLSAqLwotc3RhdGljIGludCBfX2luaXQgZmluZF9pc2FfaXJxX3BpbihpbnQgaXJxLCBpbnQgdHlwZSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKSB7Ci0JCWludCBsYnVzID0gbXBfaXJxc1tpXS5tcF9zcmNidXM7Ci0KLQkJaWYgKHRlc3RfYml0KGxidXMsIG1wX2J1c19ub3RfcGNpKSAmJgotCQkgICAgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSB0eXBlKSAmJgotCQkgICAgKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID09IGlycSkpCi0KLQkJCXJldHVybiBtcF9pcnFzW2ldLm1wX2RzdGlycTsKLQl9Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBmaW5kX2lzYV9pcnFfYXBpYyhpbnQgaXJxLCBpbnQgdHlwZSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKSB7Ci0JCWludCBsYnVzID0gbXBfaXJxc1tpXS5tcF9zcmNidXM7Ci0KLQkJaWYgKHRlc3RfYml0KGxidXMsIG1wX2J1c19ub3RfcGNpKSAmJgotCQkgICAgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSB0eXBlKSAmJgotCQkgICAgKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID09IGlycSkpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPCBtcF9pcnFfZW50cmllcykgewotCQlpbnQgYXBpYzsKLQkJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID09IG1wX2lycXNbaV0ubXBfZHN0YXBpYykKLQkJCQlyZXR1cm4gYXBpYzsKLQkJfQotCX0KLQotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIEZpbmQgYSBzcGVjaWZpYyBQQ0kgSVJRIGVudHJ5LgotICogTm90IGFuIF9faW5pdCwgcG9zc2libHkgbmVlZGVkIGJ5IG1vZHVsZXMKLSAqLwotc3RhdGljIGludCBwaW5fMl9pcnEoaW50IGlkeCwgaW50IGFwaWMsIGludCBwaW4pOwotCi1pbnQgSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IHNsb3QsIGludCBwaW4pCi17Ci0JaW50IGFwaWMsIGksIGJlc3RfZ3Vlc3MgPSAtMTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJxdWVyeWluZyBQQ0kgLT4gSVJRIG1hcHBpbmcgYnVzOiVkLCAiCi0JCSJzbG90OiVkLCBwaW46JWQuXG4iLCBidXMsIHNsb3QsIHBpbik7Ci0JaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSSBCSU9TIHBhc3NlZCBub25leGlzdGVudCBQQ0kgYnVzICVkIVxuIiwgYnVzKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgewotCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOwotCi0JCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCi0JCQlpZiAobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPT0gbXBfaXJxc1tpXS5tcF9kc3RhcGljIHx8Ci0JCQkgICAgbXBfaXJxc1tpXS5tcF9kc3RhcGljID09IE1QX0FQSUNfQUxMKQotCQkJCWJyZWFrOwotCi0JCWlmICghdGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCi0JCSAgICAhbXBfaXJxc1tpXS5tcF9pcnF0eXBlICYmCi0JCSAgICAoYnVzID09IGxidXMpICYmCi0JCSAgICAoc2xvdCA9PSAoKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID4+IDIpICYgMHgxZikpKSB7Ci0JCQlpbnQgaXJxID0gcGluXzJfaXJxKGksIGFwaWMsIG1wX2lycXNbaV0ubXBfZHN0aXJxKTsKLQotCQkJaWYgKCEoYXBpYyB8fCBJT19BUElDX0lSUShpcnEpKSkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHBpbiA9PSAobXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgJiAzKSkKLQkJCQlyZXR1cm4gaXJxOwotCQkJLyoKLQkJCSAqIFVzZSB0aGUgZmlyc3QgYWxsLWJ1dC1waW4gbWF0Y2hpbmcgZW50cnkgYXMgYQotCQkJICogYmVzdC1ndWVzcyBmdXp6eSByZXN1bHQgZm9yIGJyb2tlbiBtcHRhYmxlcy4KLQkJCSAqLwotCQkJaWYgKGJlc3RfZ3Vlc3MgPCAwKQotCQkJCWJlc3RfZ3Vlc3MgPSBpcnE7Ci0JCX0KLQl9Ci0JcmV0dXJuIGJlc3RfZ3Vlc3M7Ci19Ci1FWFBPUlRfU1lNQk9MKElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKTsKLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gY3VycmVudGx5IGlzIG9ubHkgYSBoZWxwZXIgZm9yIHRoZSBpMzg2IHNtcCBib290IHByb2Nlc3Mgd2hlcmUKLSAqIHdlIG5lZWQgdG8gcmVwcm9ncmFtIHRoZSBpb3JlZHRibHMgdG8gY2F0ZXIgZm9yIHRoZSBjcHVzIHdoaWNoIGhhdmUgY29tZSBvbmxpbmUKLSAqIHNvIG1hc2sgaW4gYWxsIGNhc2VzIHNob3VsZCBzaW1wbHkgYmUgVEFSR0VUX0NQVVMKLSAqLwotI2lmZGVmIENPTkZJR19TTVAKLXZvaWQgX19pbml0IHNldHVwX2lvYXBpY19kZXN0KHZvaWQpCi17Ci0JaW50IHBpbiwgaW9hcGljLCBpcnEsIGlycV9lbnRyeTsKLQotCWlmIChza2lwX2lvYXBpY19zZXR1cCA9PSAxKQotCQlyZXR1cm47Ci0KLQlmb3IgKGlvYXBpYyA9IDA7IGlvYXBpYyA8IG5yX2lvYXBpY3M7IGlvYXBpYysrKSB7Ci0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1tpb2FwaWNdOyBwaW4rKykgewotCQkJaXJxX2VudHJ5ID0gZmluZF9pcnFfZW50cnkoaW9hcGljLCBwaW4sIG1wX0lOVCk7Ci0JCQlpZiAoaXJxX2VudHJ5ID09IC0xKQotCQkJCWNvbnRpbnVlOwotCQkJaXJxID0gcGluXzJfaXJxKGlycV9lbnRyeSwgaW9hcGljLCBwaW4pOwotCQkJc2V0X2lvYXBpY19hZmZpbml0eV9pcnEoaXJxLCBUQVJHRVRfQ1BVUyk7Ci0JCX0KLQotCX0KLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfRUlTQSkgfHwgZGVmaW5lZChDT05GSUdfTUNBKQotLyoKLSAqIEVJU0EgRWRnZS9MZXZlbCBjb250cm9sIHJlZ2lzdGVyLCBFTENSCi0gKi8KLXN0YXRpYyBpbnQgRUlTQV9FTENSKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaWYgKGlycSA8IDE2KSB7Ci0JCXVuc2lnbmVkIGludCBwb3J0ID0gMHg0ZDAgKyAoaXJxID4+IDMpOwotCQlyZXR1cm4gKGluYihwb3J0KSA+PiAoaXJxICYgNykpICYgMTsKLQl9Ci0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KLQkJCSJCcm9rZW4gTVB0YWJsZSByZXBvcnRzIElTQSBpcnEgJWRcbiIsIGlycSk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotLyogSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGVkZ2UgdHJpZ2dlcmVkLAotICogd2hlbiBsaXN0ZWQgYXMgY29uZm9ybWluZyBpbiB0aGUgTVAgdGFibGUuICovCi0KLSNkZWZpbmUgZGVmYXVsdF9JU0FfdHJpZ2dlcihpZHgpCSgwKQotI2RlZmluZSBkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCSgwKQotCi0vKiBFSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGFuZCBjYW4gYmUgZWRnZSBvciBsZXZlbAotICogdHJpZ2dlciBkZXBlbmRpbmcgb24gdGhlIEVMQ1IgdmFsdWUuICBJZiBhbiBpbnRlcnJ1cHQgaXMgbGlzdGVkIGFzCi0gKiBFSVNBIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLCB0aGF0IG1lYW5zIGl0cyB0cmlnZ2VyIHR5cGUgbXVzdAotICogYmUgcmVhZCBpbiBmcm9tIHRoZSBFTENSICovCi0KLSNkZWZpbmUgZGVmYXVsdF9FSVNBX3RyaWdnZXIoaWR4KQkoRUlTQV9FTENSKG1wX2lycXNbaWR4XS5tcF9zcmNidXNpcnEpKQotI2RlZmluZSBkZWZhdWx0X0VJU0FfcG9sYXJpdHkoaWR4KQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCi0KLS8qIFBDSSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgb25lIGxldmVsIHRyaWdnZXJlZCwKLSAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLwotCi0jZGVmaW5lIGRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KQkoMSkKLSNkZWZpbmUgZGVmYXVsdF9QQ0lfcG9sYXJpdHkoaWR4KQkoMSkKLQotLyogTUNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGxldmVsIHRyaWdnZXJlZCwKLSAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLwotCi0jZGVmaW5lIGRlZmF1bHRfTUNBX3RyaWdnZXIoaWR4KQkoMSkKLSNkZWZpbmUgZGVmYXVsdF9NQ0FfcG9sYXJpdHkoaWR4KQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCi0KLXN0YXRpYyBpbnQgTVBCSU9TX3BvbGFyaXR5KGludCBpZHgpCi17Ci0JaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7Ci0JaW50IHBvbGFyaXR5OwotCi0JLyoKLQkgKiBEZXRlcm1pbmUgSVJRIGxpbmUgcG9sYXJpdHkgKGhpZ2ggYWN0aXZlIG9yIGxvdyBhY3RpdmUpOgotCSAqLwotCXN3aXRjaCAobXBfaXJxc1tpZHhdLm1wX2lycWZsYWcgJiAzKSB7Ci0JY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVudCBwb2xhcml0eSAqLwotCXsKLQkJcG9sYXJpdHkgPSB0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKT8KLQkJCWRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCk6Ci0JCQlkZWZhdWx0X1BDSV9wb2xhcml0eShpZHgpOwotCQlicmVhazsKLQl9Ci0JY2FzZSAxOiAvKiBoaWdoIGFjdGl2ZSAqLwotCXsKLQkJcG9sYXJpdHkgPSAwOwotCQlicmVhazsKLQl9Ci0JY2FzZSAyOiAvKiByZXNlcnZlZCAqLwotCXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCXBvbGFyaXR5ID0gMTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgMzogLyogbG93IGFjdGl2ZSAqLwotCXsKLQkJcG9sYXJpdHkgPSAxOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDogLyogaW52YWxpZCAqLwotCXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCXBvbGFyaXR5ID0gMTsKLQkJYnJlYWs7Ci0JfQotCX0KLQlyZXR1cm4gcG9sYXJpdHk7Ci19Ci0KLXN0YXRpYyBpbnQgTVBCSU9TX3RyaWdnZXIoaW50IGlkeCkKLXsKLQlpbnQgYnVzID0gbXBfaXJxc1tpZHhdLm1wX3NyY2J1czsKLQlpbnQgdHJpZ2dlcjsKLQotCS8qCi0JICogRGV0ZXJtaW5lIElSUSB0cmlnZ2VyIG1vZGUgKGVkZ2Ugb3IgbGV2ZWwgc2Vuc2l0aXZlKToKLQkgKi8KLQlzd2l0Y2ggKChtcF9pcnFzW2lkeF0ubXBfaXJxZmxhZz4+MikgJiAzKSB7Ci0JY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVudCAqLwotCXsKLQkJdHJpZ2dlciA9IHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpPwotCQkJCWRlZmF1bHRfSVNBX3RyaWdnZXIoaWR4KToKLQkJCQlkZWZhdWx0X1BDSV90cmlnZ2VyKGlkeCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRUlTQSkgfHwgZGVmaW5lZChDT05GSUdfTUNBKQotCQlzd2l0Y2ggKG1wX2J1c19pZF90b190eXBlW2J1c10pIHsKLQkJY2FzZSBNUF9CVVNfSVNBOiAvKiBJU0EgcGluICovCi0JCXsKLQkJCS8qIHNldCBiZWZvcmUgdGhlIHN3aXRjaCAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBNUF9CVVNfRUlTQTogLyogRUlTQSBwaW4gKi8KLQkJewotCQkJdHJpZ2dlciA9IGRlZmF1bHRfRUlTQV90cmlnZ2VyKGlkeCk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIE1QX0JVU19QQ0k6IC8qIFBDSSBwaW4gKi8KLQkJewotCQkJLyogc2V0IGJlZm9yZSB0aGUgc3dpdGNoICovCi0JCQlicmVhazsKLQkJfQotCQljYXNlIE1QX0JVU19NQ0E6IC8qIE1DQSBwaW4gKi8KLQkJewotCQkJdHJpZ2dlciA9IGRlZmF1bHRfTUNBX3RyaWdnZXIoaWR4KTsKLQkJCWJyZWFrOwotCQl9Ci0JCWRlZmF1bHQ6Ci0JCXsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOwotCQkJdHJpZ2dlciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLSNlbmRpZgotCQlicmVhazsKLQl9Ci0JY2FzZSAxOiAvKiBlZGdlICovCi0JewotCQl0cmlnZ2VyID0gMDsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgMjogLyogcmVzZXJ2ZWQgKi8KLQl7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOwotCQl0cmlnZ2VyID0gMTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgMzogLyogbGV2ZWwgKi8KLQl7Ci0JCXRyaWdnZXIgPSAxOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDogLyogaW52YWxpZCAqLwotCXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCXRyaWdnZXIgPSAwOwotCQlicmVhazsKLQl9Ci0JfQotCXJldHVybiB0cmlnZ2VyOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfcG9sYXJpdHkoaW50IGlkeCkKLXsKLQlyZXR1cm4gTVBCSU9TX3BvbGFyaXR5KGlkeCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90cmlnZ2VyKGludCBpZHgpCi17Ci0JcmV0dXJuIE1QQklPU190cmlnZ2VyKGlkeCk7Ci19Ci0KLXN0YXRpYyBpbnQgcGluXzJfaXJxKGludCBpZHgsIGludCBhcGljLCBpbnQgcGluKQotewotCWludCBpcnEsIGk7Ci0JaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7Ci0KLQkvKgotCSAqIERlYnVnZ2luZyBjaGVjaywgd2UgYXJlIGluIGJpZyB0cm91YmxlIGlmIHRoaXMgbWVzc2FnZSBwb3BzIHVwIQotCSAqLwotCWlmIChtcF9pcnFzW2lkeF0ubXBfZHN0aXJxICE9IHBpbikKLQkJcHJpbnRrKEtFUk5fRVJSICJicm9rZW4gQklPUyBvciBNUFRBQkxFIHBhcnNlciwgYXlpZWUhIVxuIik7Ci0KLQlpZiAodGVzdF9iaXQoYnVzLCBtcF9idXNfbm90X3BjaSkpCi0JCWlycSA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXNpcnE7Ci0JZWxzZSB7Ci0JCS8qCi0JCSAqIFBDSSBJUlFzIGFyZSBtYXBwZWQgaW4gb3JkZXIKLQkJICovCi0JCWkgPSBpcnEgPSAwOwotCQl3aGlsZSAoaSA8IGFwaWMpCi0JCQlpcnEgKz0gbnJfaW9hcGljX3JlZ2lzdGVyc1tpKytdOwotCQlpcnEgKz0gcGluOwotCi0JCS8qCi0JCSAqIEZvciBNUFMgbW9kZSwgc28gZmFyIG9ubHkgbmVlZGVkIGJ5IEVTNzAwMCBwbGF0Zm9ybQotCQkgKi8KLQkJaWYgKGlvYXBpY19yZW51bWJlcl9pcnEpCi0JCQlpcnEgPSBpb2FwaWNfcmVudW1iZXJfaXJxKGFwaWMsIGlycSk7Ci0JfQotCi0JLyoKLQkgKiBQQ0kgSVJRIGNvbW1hbmQgbGluZSByZWRpcmVjdGlvbi4gWWVzLCBsaW1pdHMgYXJlIGhhcmRjb2RlZC4KLQkgKi8KLQlpZiAoKHBpbiA+PSAxNikgJiYgKHBpbiA8PSAyMykpIHsKLQkJaWYgKHBpcnFfZW50cmllc1twaW4tMTZdICE9IC0xKSB7Ci0JCQlpZiAoIXBpcnFfZW50cmllc1twaW4tMTZdKSB7Ci0JCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0RFQlVHCi0JCQkJCQkiZGlzYWJsaW5nIFBJUlElZFxuIiwgcGluLTE2KTsKLQkJCX0gZWxzZSB7Ci0JCQkJaXJxID0gcGlycV9lbnRyaWVzW3Bpbi0xNl07Ci0JCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0RFQlVHCi0JCQkJCQkidXNpbmcgUElSUSVkIC0+IElSUSAlZFxuIiwKLQkJCQkJCXBpbi0xNiwgaXJxKTsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gaXJxOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBJT19BUElDX2lycV90cmlnZ2VyKGludCBpcnEpCi17Ci0JaW50IGFwaWMsIGlkeCwgcGluOwotCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7Ci0JCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljLCBwaW4sIG1wX0lOVCk7Ci0JCQlpZiAoKGlkeCAhPSAtMSkgJiYgKGlycSA9PSBwaW5fMl9pcnEoaWR4LCBhcGljLCBwaW4pKSkKLQkJCQlyZXR1cm4gaXJxX3RyaWdnZXIoaWR4KTsKLQkJfQotCX0KLQkvKgotCSAqIG5vbmV4aXN0ZW50IElSUXMgYXJlIGVkZ2UgZGVmYXVsdAotCSAqLwotCXJldHVybiAwOwotfQotCi0vKiBpcnFfdmVjdG9ycyBpcyBpbmRleGVkIGJ5IHRoZSBzdW0gb2YgYWxsIFJURXMgaW4gYWxsIEkvTyBBUElDcy4gKi8KLXN0YXRpYyB1OCBpcnFfdmVjdG9yW05SX0lSUV9WRUNUT1JTXSBfX3JlYWRfbW9zdGx5ID0geyBGSVJTVF9ERVZJQ0VfVkVDVE9SICwgMCB9OwotCi1zdGF0aWMgaW50IF9fYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSkKLXsKLQlzdGF0aWMgaW50IGN1cnJlbnRfdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiwgY3VycmVudF9vZmZzZXQ7Ci0JaW50IHZlY3Rvciwgb2Zmc2V0OwotCi0JQlVHX09OKCh1bnNpZ25lZClpcnEgPj0gTlJfSVJRX1ZFQ1RPUlMpOwotCi0JaWYgKGlycV92ZWN0b3JbaXJxXSA+IDApCi0JCXJldHVybiBpcnFfdmVjdG9yW2lycV07Ci0KLQl2ZWN0b3IgPSBjdXJyZW50X3ZlY3RvcjsKLQlvZmZzZXQgPSBjdXJyZW50X29mZnNldDsKLW5leHQ6Ci0JdmVjdG9yICs9IDg7Ci0JaWYgKHZlY3RvciA+PSBmaXJzdF9zeXN0ZW1fdmVjdG9yKSB7Ci0JCW9mZnNldCA9IChvZmZzZXQgKyAxKSAlIDg7Ci0JCXZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IgKyBvZmZzZXQ7Ci0JfQotCWlmICh2ZWN0b3IgPT0gY3VycmVudF92ZWN0b3IpCi0JCXJldHVybiAtRU5PU1BDOwotCWlmICh0ZXN0X2FuZF9zZXRfYml0KHZlY3RvciwgdXNlZF92ZWN0b3JzKSkKLQkJZ290byBuZXh0OwotCi0JY3VycmVudF92ZWN0b3IgPSB2ZWN0b3I7Ci0JY3VycmVudF9vZmZzZXQgPSBvZmZzZXQ7Ci0JaXJxX3ZlY3RvcltpcnFdID0gdmVjdG9yOwotCi0JcmV0dXJuIHZlY3RvcjsKLX0KLQotc3RhdGljIGludCBhc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHZlY3RvcjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCXZlY3RvciA9IF9fYXNzaWduX2lycV92ZWN0b3IoaXJxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHZlY3RvcjsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpb2FwaWNfY2hpcDsKLQotI2RlZmluZSBJT0FQSUNfQVVUTwktMQotI2RlZmluZSBJT0FQSUNfRURHRQkwCi0jZGVmaW5lIElPQVBJQ19MRVZFTAkxCi0KLXN0YXRpYyB2b2lkIGlvYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEsIGludCB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgdHJpZ2dlcikKLXsKLQlpZiAoKHRyaWdnZXIgPT0gSU9BUElDX0FVVE8gJiYgSU9fQVBJQ19pcnFfdHJpZ2dlcihpcnEpKSB8fAotCSAgICB0cmlnZ2VyID09IElPQVBJQ19MRVZFTCkgewotCQlpcnFfZGVzY1tpcnFdLnN0YXR1cyB8PSBJUlFfTEVWRUw7Ci0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlvYXBpY19jaGlwLAotCQkJCQkgaGFuZGxlX2Zhc3Rlb2lfaXJxLCAiZmFzdGVvaSIpOwotCX0gZWxzZSB7Ci0JCWlycV9kZXNjW2lycV0uc3RhdHVzICY9IH5JUlFfTEVWRUw7Ci0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlvYXBpY19jaGlwLAotCQkJCQkgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCX0KLQlzZXRfaW50cl9nYXRlKHZlY3RvciwgaW50ZXJydXB0W2lycV0pOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQ19pcnFzKHZvaWQpCi17Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0JaW50IGFwaWMsIHBpbiwgaWR4LCBpcnEsIGZpcnN0X25vdGNvbiA9IDEsIHZlY3RvcjsKLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRyAiaW5pdCBJT19BUElDIElSUXNcbiIpOwotCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKLQotCQkvKgotCQkgKiBhZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6Ci0JCSAqLwotCQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKLQotCQllbnRyeS5kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7Ci0JCWVudHJ5LmRlc3RfbW9kZSA9IElOVF9ERVNUX01PREU7Ci0JCWVudHJ5Lm1hc2sgPSAwOwkJCQkvKiBlbmFibGUgSVJRICovCi0JCWVudHJ5LmRlc3QubG9naWNhbC5sb2dpY2FsX2Rlc3QgPQotCQkJCQljcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOwotCi0JCWlkeCA9IGZpbmRfaXJxX2VudHJ5KGFwaWMsIHBpbiwgbXBfSU5UKTsKLQkJaWYgKGlkeCA9PSAtMSkgewotCQkJaWYgKGZpcnN0X25vdGNvbikgewotCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRwotCQkJCQkJIiBJTy1BUElDIChhcGljaWQtcGluKSAlZC0lZCIsCi0JCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwKLQkJCQkJCXBpbik7Ci0JCQkJZmlyc3Rfbm90Y29uID0gMDsKLQkJCX0gZWxzZQotCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiwgJWQtJWQiLAotCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwgcGluKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKCFmaXJzdF9ub3Rjb24pIHsKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBub3QgY29ubmVjdGVkLlxuIik7Ci0JCQlmaXJzdF9ub3Rjb24gPSAxOwotCQl9Ci0KLQkJZW50cnkudHJpZ2dlciA9IGlycV90cmlnZ2VyKGlkeCk7Ci0JCWVudHJ5LnBvbGFyaXR5ID0gaXJxX3BvbGFyaXR5KGlkeCk7Ci0KLQkJaWYgKGlycV90cmlnZ2VyKGlkeCkpIHsKLQkJCWVudHJ5LnRyaWdnZXIgPSAxOwotCQkJZW50cnkubWFzayA9IDE7Ci0JCX0KLQotCQlpcnEgPSBwaW5fMl9pcnEoaWR4LCBhcGljLCBwaW4pOwotCQkvKgotCQkgKiBza2lwIGFkZGluZyB0aGUgdGltZXIgaW50IG9uIHNlY29uZGFyeSBub2Rlcywgd2hpY2ggY2F1c2VzCi0JCSAqIGEgc21hbGwgYnV0IHBhaW5mdWwgcmlmdCBpbiB0aGUgdGltZS1zcGFjZSBjb250aW51dW0KLQkJICovCi0JCWlmIChtdWx0aV90aW1lcl9jaGVjayhhcGljLCBpcnEpKQotCQkJY29udGludWU7Ci0JCWVsc2UKLQkJCWFkZF9waW5fdG9faXJxKGlycSwgYXBpYywgcGluKTsKLQotCQlpZiAoIWFwaWMgJiYgIUlPX0FQSUNfSVJRKGlycSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoSU9fQVBJQ19JUlEoaXJxKSkgewotCQkJdmVjdG9yID0gYXNzaWduX2lycV92ZWN0b3IoaXJxKTsKLQkJCWVudHJ5LnZlY3RvciA9IHZlY3RvcjsKLQkJCWlvYXBpY19yZWdpc3Rlcl9pbnRyKGlycSwgdmVjdG9yLCBJT0FQSUNfQVVUTyk7Ci0KLQkJCWlmICghYXBpYyAmJiAoaXJxIDwgMTYpKQotCQkJCWRpc2FibGVfODI1OUFfaXJxKGlycSk7Ci0JCX0KLQkJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOwotCX0KLQl9Ci0KLQlpZiAoIWZpcnN0X25vdGNvbikKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIG5vdCBjb25uZWN0ZWQuXG4iKTsKLX0KLQotLyoKLSAqIFNldCB1cCB0aGUgdGltZXIgcGluLCBwb3NzaWJseSB3aXRoIHRoZSA4MjU5QS1tYXN0ZXIgYmVoaW5kLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfdGltZXJfSVJRMF9waW4odW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCBwaW4sCi0JCQkJCWludCB2ZWN0b3IpCi17Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKLQotCS8qCi0JICogV2UgdXNlIGxvZ2ljYWwgZGVsaXZlcnkgdG8gZ2V0IHRoZSB0aW1lciBJUlEKLQkgKiB0byB0aGUgZmlyc3QgQ1BVLgotCSAqLwotCWVudHJ5LmRlc3RfbW9kZSA9IElOVF9ERVNUX01PREU7Ci0JZW50cnkubWFzayA9IDE7CQkJCQkvKiBtYXNrIElSUSBub3cgKi8KLQllbnRyeS5kZXN0LmxvZ2ljYWwubG9naWNhbF9kZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKFRBUkdFVF9DUFVTKTsKLQllbnRyeS5kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7Ci0JZW50cnkucG9sYXJpdHkgPSAwOwotCWVudHJ5LnRyaWdnZXIgPSAwOwotCWVudHJ5LnZlY3RvciA9IHZlY3RvcjsKLQotCS8qCi0JICogVGhlIHRpbWVyIElSUSBkb2Vzbid0IGhhdmUgdG8ga25vdyB0aGF0IGJlaGluZCB0aGUKLQkgKiBzY2VuZSB3ZSBtYXkgaGF2ZSBhIDgyNTlBLW1hc3RlciBpbiBBRU9JIG1vZGUgLi4uCi0JICovCi0JaW9hcGljX3JlZ2lzdGVyX2ludHIoMCwgdmVjdG9yLCBJT0FQSUNfRURHRSk7Ci0KLQkvKgotCSAqIEFkZCBpdCB0byB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKLQkgKi8KLQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7Ci19Ci0KLQotX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X0lPX0FQSUModm9pZCkKLXsKLQlpbnQgYXBpYywgaTsKLQl1bmlvbiBJT19BUElDX3JlZ18wMCByZWdfMDA7Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDEgcmVnXzAxOwotCXVuaW9uIElPX0FQSUNfcmVnXzAyIHJlZ18wMjsKLQl1bmlvbiBJT19BUElDX3JlZ18wMyByZWdfMDM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAibnVtYmVyIG9mIE1QIElSUSBzb3VyY2VzOiAlZC5cbiIsIG1wX2lycV9lbnRyaWVzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKQotCQlwcmludGsoS0VSTl9ERUJVRyAibnVtYmVyIG9mIElPLUFQSUMgIyVkIHJlZ2lzdGVyczogJWQuXG4iLAotCQkgICAgICAgbXBfaW9hcGljc1tpXS5tcF9hcGljaWQsIG5yX2lvYXBpY19yZWdpc3RlcnNbaV0pOwotCi0JLyoKLQkgKiBXZSBhcmUgYSBiaXQgY29uc2VydmF0aXZlIGFib3V0IHdoYXQgd2UgZXhwZWN0LiAgV2UgaGF2ZSB0bwotCSAqIGtub3cgYWJvdXQgZXZlcnkgaGFyZHdhcmUgY2hhbmdlIEFTQVAuCi0JICovCi0JcHJpbnRrKEtFUk5fSU5GTyAidGVzdGluZyB0aGUgSU8gQVBJQy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4iKTsKLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMCk7Ci0JcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKLQlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwKQotCQlyZWdfMDIucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDIpOwotCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MjApCi0JCXJlZ18wMy5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJJTyBBUElDICMlZC4uLi4uLlxuIiwgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMDogJTA4WFxuIiwgcmVnXzAwLnJhdyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgOiBwaHlzaWNhbCBBUElDIGlkOiAlMDJYXG4iLCByZWdfMDAuYml0cy5JRCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgOiBEZWxpdmVyeSBUeXBlOiAlWFxuIiwgcmVnXzAwLmJpdHMuZGVsaXZlcnlfdHlwZSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgOiBMVFMgICAgICAgICAgOiAlWFxuIiwgcmVnXzAwLmJpdHMuTFRTKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMTogJTA4WFxuIiwgcmVnXzAxLnJhdyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogbWF4IHJlZGlyZWN0aW9uIGVudHJpZXM6ICUwNFhcbiIsIHJlZ18wMS5iaXRzLmVudHJpZXMpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogUFJRIGltcGxlbWVudGVkOiAlWFxuIiwgcmVnXzAxLmJpdHMuUFJRKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBJTyBBUElDIHZlcnNpb246ICUwNFhcbiIsIHJlZ18wMS5iaXRzLnZlcnNpb24pOwotCi0JLyoKLQkgKiBTb21lIEludGVsIGNoaXBzZXRzIHdpdGggSU8gQVBJQyBWRVJTSU9OIG9mIDB4MT8gZG9uJ3QgaGF2ZSByZWdfMDIsCi0JICogYnV0IHRoZSB2YWx1ZSBvZiByZWdfMDIgaXMgcmVhZCBhcyB0aGUgcHJldmlvdXMgcmVhZCByZWdpc3RlcgotCSAqIHZhbHVlLCBzbyBpZ25vcmUgaXQgaWYgcmVnXzAyID09IHJlZ18wMS4KLQkgKi8KLQlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwICYmIHJlZ18wMi5yYXcgIT0gcmVnXzAxLnJhdykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDI6ICUwOFhcbiIsIHJlZ18wMi5yYXcpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBhcmJpdHJhdGlvbjogJTAyWFxuIiwgcmVnXzAyLmJpdHMuYXJiaXRyYXRpb24pOwotCX0KLQotCS8qCi0JICogU29tZSBJbnRlbCBjaGlwc2V0cyB3aXRoIElPIEFQSUMgVkVSU0lPTiBvZiAweDI/IGRvbid0IGhhdmUgcmVnXzAyCi0JICogb3IgcmVnXzAzLCBidXQgdGhlIHZhbHVlIG9mIHJlZ18wWzIzXSBpcyByZWFkIGFzIHRoZSBwcmV2aW91cyByZWFkCi0JICogcmVnaXN0ZXIgdmFsdWUsIHNvIGlnbm9yZSBpdCBpZiByZWdfMDMgPT0gcmVnXzBbMTJdLgotCSAqLwotCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MjAgJiYgcmVnXzAzLnJhdyAhPSByZWdfMDIucmF3ICYmCi0JICAgIHJlZ18wMy5yYXcgIT0gcmVnXzAxLnJhdykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDM6ICUwOFhcbiIsIHJlZ18wMy5yYXcpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBCb290IERUICAgIDogJVhcbiIsIHJlZ18wMy5iaXRzLmJvb3RfRFQpOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIElSUSByZWRpcmVjdGlvbiB0YWJsZTpcbiIpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiBOUiBMb2cgUGh5IE1hc2sgVHJpZyBJUlIgUG9sIgotCQkJICAiIFN0YXQgRGVzdCBEZWxpIFZlY3Q6ICAgXG4iKTsKLQotCWZvciAoaSA9IDA7IGkgPD0gcmVnXzAxLmJpdHMuZW50cmllczsgaSsrKSB7Ci0JCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCi0JCWVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgaSk7Ci0KLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlMDJ4ICUwM1ggJTAyWCAgIiwKLQkJCWksCi0JCQllbnRyeS5kZXN0LmxvZ2ljYWwubG9naWNhbF9kZXN0LAotCQkJZW50cnkuZGVzdC5waHlzaWNhbC5waHlzaWNhbF9kZXN0Ci0JCSk7Ci0KLQkJcHJpbnRrKCIlMWQgICAgJTFkICAgICUxZCAgICUxZCAgICUxZCAgICAlMWQgICAgJTFkICAgICUwMlhcbiIsCi0JCQllbnRyeS5tYXNrLAotCQkJZW50cnkudHJpZ2dlciwKLQkJCWVudHJ5LmlyciwKLQkJCWVudHJ5LnBvbGFyaXR5LAotCQkJZW50cnkuZGVsaXZlcnlfc3RhdHVzLAotCQkJZW50cnkuZGVzdF9tb2RlLAotCQkJZW50cnkuZGVsaXZlcnlfbW9kZSwKLQkJCWVudHJ5LnZlY3RvcgotCQkpOwotCX0KLQl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgIklSUSB0byBwaW4gbWFwcGluZ3M6XG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5ID0gaXJxXzJfcGluICsgaTsKLQkJaWYgKGVudHJ5LT5waW4gPCAwKQotCQkJY29udGludWU7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJJUlElZCAiLCBpKTsKLQkJZm9yICg7OykgewotCQkJcHJpbnRrKCItPiAlZDolZCIsIGVudHJ5LT5hcGljLCBlbnRyeS0+cGluKTsKLQkJCWlmICghZW50cnktPm5leHQpCi0JCQkJYnJlYWs7Ci0JCQllbnRyeSA9IGlycV8yX3BpbiArIGVudHJ5LT5uZXh0OwotCQl9Ci0JCXByaW50aygiXG4iKTsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gZG9uZS5cbiIpOwotCi0JcmV0dXJuOwotfQotCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfQVBJQ19iaXRmaWVsZChpbnQgYmFzZSkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQlpbnQgaSwgajsKLQotCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWZcbiIgS0VSTl9ERUJVRyk7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQl2ID0gYXBpY19yZWFkKGJhc2UgKyBpKjB4MTApOwotCQlmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgewotCQkJaWYgKHYgJiAoMTw8aikpCi0JCQkJcHJpbnRrKCIxIik7Ci0JCQllbHNlCi0JCQkJcHJpbnRrKCIwIik7Ci0JCX0KLQkJcHJpbnRrKCJcbiIpOwotCX0KLX0KLQotX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X2xvY2FsX0FQSUModm9pZCAqZHVtbXkpCi17Ci0JdW5zaWduZWQgaW50IHYsIHZlciwgbWF4bHZ0OwotCXU2NCBpY3I7Ci0KLQlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKCJcbiIgS0VSTl9ERUJVRyAicHJpbnRpbmcgbG9jYWwgQVBJQyBjb250ZW50cyBvbiBDUFUjJWQvJWQ6XG4iLAotCQlzbXBfcHJvY2Vzc29yX2lkKCksIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfSUQpOwotCXByaW50ayhLRVJOX0lORk8gIi4uLiBBUElDIElEOiAgICAgICUwOHggKCUwMXgpXG4iLCB2LAotCQkJR0VUX0FQSUNfSUQodikpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCXByaW50ayhLRVJOX0lORk8gIi4uLiBBUElDIFZFUlNJT046ICUwOHhcbiIsIHYpOwotCXZlciA9IEdFVF9BUElDX1ZFUlNJT04odik7Ci0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCi0JdiA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUQVNLUFJJOiAlMDh4ICglMDJ4KVxuIiwgdiwgdiAmIEFQSUNfVFBSSV9NQVNLKTsKLQotCWlmIChBUElDX0lOVEVHUkFURUQodmVyKSkgewkJCS8qICE4MjQ4OURYICovCi0JCXYgPSBhcGljX3JlYWQoQVBJQ19BUkJQUkkpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgQVJCUFJJOiAlMDh4ICglMDJ4KVxuIiwgdiwKLQkJCXYgJiBBUElDX0FSQlBSSV9NQVNLKTsKLQkJdiA9IGFwaWNfcmVhZChBUElDX1BST0NQUkkpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgUFJPQ1BSSTogJTA4eFxuIiwgdik7Ci0JfQotCi0JdiA9IGFwaWNfcmVhZChBUElDX0VPSSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIEVPSTogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1JSUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFJSUjogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xEUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExEUjogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0RGUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIERGUjogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBTUElWOiAlMDh4XG4iLCB2KTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJU1IgZmllbGQ6XG4iKTsKLQlwcmludF9BUElDX2JpdGZpZWxkKEFQSUNfSVNSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1SIGZpZWxkOlxuIik7Ci0JcHJpbnRfQVBJQ19iaXRmaWVsZChBUElDX1RNUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElSUiBmaWVsZDpcbiIpOwotCXByaW50X0FQSUNfYml0ZmllbGQoQVBJQ19JUlIpOwotCi0JaWYgKEFQSUNfSU5URUdSQVRFRCh2ZXIpKSB7CQkvKiAhODI0ODlEWCAqLwotCQlpZiAobWF4bHZ0ID4gMykJCS8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8KLQkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQl2ID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIEVTUjogJTA4eFxuIiwgdik7Ci0JfQotCi0JaWNyID0gYXBpY19pY3JfcmVhZCgpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJQ1I6ICUwOHhcbiIsIGljcik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElDUjI6ICUwOHhcbiIsIGljciA+PiAzMik7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVFQ6ICUwOHhcbiIsIHYpOwotCi0JaWYgKG1heGx2dCA+IDMpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIFBDIGlzIExWVCM0LiAqLwotCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUUEM6ICUwOHhcbiIsIHYpOwotCX0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVDA6ICUwOHhcbiIsIHYpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUMTogJTA4eFxuIiwgdik7Ci0KLQlpZiAobWF4bHZ0ID4gMikgewkJCS8qIEVSUiBpcyBMVlQjMy4gKi8KLQkJdiA9IGFwaWNfcmVhZChBUElDX0xWVEVSUik7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlRFUlI6ICUwOHhcbiIsIHYpOwotCX0KLQotCXYgPSBhcGljX3JlYWQoQVBJQ19UTUlDVCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRNSUNUOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfVE1DQ1QpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUTUNDVDogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1REQ1IpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBURENSOiAlMDh4XG4iLCB2KTsKLQlwcmludGsoIlxuIik7Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9hbGxfbG9jYWxfQVBJQ3Modm9pZCkKLXsKLQlvbl9lYWNoX2NwdShwcmludF9sb2NhbF9BUElDLCBOVUxMLCAxKTsKLX0KLQotX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X1BJQyh2b2lkKQotewotCXVuc2lnbmVkIGludCB2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIlxucHJpbnRpbmcgUElDIGNvbnRlbnRzXG4iKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwotCi0JdiA9IGluYigweGExKSA8PCA4IHwgaW5iKDB4MjEpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJTVI6ICUwNHhcbiIsIHYpOwotCi0JdiA9IGluYigweGEwKSA8PCA4IHwgaW5iKDB4MjApOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJUlI6ICUwNHhcbiIsIHYpOwotCi0Jb3V0YigweDBiLCAweGEwKTsKLQlvdXRiKDB4MGIsIDB4MjApOwotCXYgPSBpbmIoMHhhMCkgPDwgOCB8IGluYigweDIwKTsKLQlvdXRiKDB4MGEsIDB4YTApOwotCW91dGIoMHgwYSwgMHgyMCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElTUjogJTA0eFxuIiwgdik7Ci0KLQl2ID0gaW5iKDB4NGQxKSA8PCA4IHwgaW5iKDB4NGQwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyBFTENSOiAlMDR4XG4iLCB2KTsKLX0KLQotX19hcGljZGVidWdpbml0KGludCkgcHJpbnRfYWxsX0lDcyh2b2lkKQotewotCXByaW50X1BJQygpOwotCXByaW50X2FsbF9sb2NhbF9BUElDcygpOwotCXByaW50X0lPX0FQSUMoKTsKLQotCXJldHVybiAwOwotfQotCi1mc19pbml0Y2FsbChwcmludF9hbGxfSUNzKTsKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZW5hYmxlX0lPX0FQSUModm9pZCkKLXsKLQl1bmlvbiBJT19BUElDX3JlZ18wMSByZWdfMDE7Ci0JaW50IGk4MjU5X2FwaWMsIGk4MjU5X3BpbjsKLQlpbnQgaSwgYXBpYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZm9yIChpID0gMDsgaSA8IFBJTl9NQVBfU0laRTsgaSsrKSB7Ci0JCWlycV8yX3BpbltpXS5waW4gPSAtMTsKLQkJaXJxXzJfcGluW2ldLm5leHQgPSAwOwotCX0KLQlpZiAoIXBpcnFzX2VuYWJsZWQpCi0JCWZvciAoaSA9IDA7IGkgPCBNQVhfUElSUVM7IGkrKykKLQkJCXBpcnFfZW50cmllc1tpXSA9IC0xOwotCi0JLyoKLQkgKiBUaGUgbnVtYmVyIG9mIElPLUFQSUMgSVJRIHJlZ2lzdGVycyAoPT0gI3BpbnMpOgotCSAqLwotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCW5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY10gPSByZWdfMDEuYml0cy5lbnRyaWVzKzE7Ci0JfQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJaW50IHBpbjsKLQkJLyogU2VlIGlmIGFueSBvZiB0aGUgcGlucyBpcyBpbiBFeHRJTlQgbW9kZSAqLwotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7Ci0JCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQkJCWVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKLQotCi0JCQkvKiBJZiB0aGUgaW50ZXJydXB0IGxpbmUgaXMgZW5hYmxlZCBhbmQgaW4gRXh0SW50IG1vZGUKLQkJCSAqIEkgaGF2ZSBmb3VuZCB0aGUgcGluIHdoZXJlIHRoZSBpODI1OSBpcyBjb25uZWN0ZWQuCi0JCQkgKi8KLQkJCWlmICgoZW50cnkubWFzayA9PSAwKSAmJiAoZW50cnkuZGVsaXZlcnlfbW9kZSA9PSBkZXN0X0V4dElOVCkpIHsKLQkJCQlpb2FwaWNfaTgyNTkuYXBpYyA9IGFwaWM7Ci0JCQkJaW9hcGljX2k4MjU5LnBpbiAgPSBwaW47Ci0JCQkJZ290byBmb3VuZF9pODI1OTsKLQkJCX0KLQkJfQotCX0KLSBmb3VuZF9pODI1OToKLQkvKiBMb29rIHRvIHNlZSB3aGF0IGlmIHRoZSBNUCB0YWJsZSBoYXMgcmVwb3J0ZWQgdGhlIEV4dElOVCAqLwotCS8qIElmIHdlIGNvdWxkIG5vdCBmaW5kIHRoZSBhcHByb3ByaWF0ZSBwaW4gYnkgbG9va2luZyBhdCB0aGUgaW9hcGljCi0JICogdGhlIGk4MjU5IHByb2JhYmx5IGlzIG5vdCBjb25uZWN0ZWQgdGhlIGlvYXBpYyBidXQgZ2l2ZSB0aGUKLQkgKiBtcHRhYmxlIGEgY2hhbmNlIGFueXdheS4KLQkgKi8KLQlpODI1OV9waW4gID0gZmluZF9pc2FfaXJxX3BpbigwLCBtcF9FeHRJTlQpOwotCWk4MjU5X2FwaWMgPSBmaW5kX2lzYV9pcnFfYXBpYygwLCBtcF9FeHRJTlQpOwotCS8qIFRydXN0IHRoZSBNUCB0YWJsZSBpZiBub3RoaW5nIGlzIHNldHVwIGluIHRoZSBoYXJkd2FyZSAqLwotCWlmICgoaW9hcGljX2k4MjU5LnBpbiA9PSAtMSkgJiYgKGk4MjU5X3BpbiA+PSAwKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJFeHRJTlQgbm90IHNldHVwIGluIGhhcmR3YXJlIGJ1dCByZXBvcnRlZCBieSBNUCB0YWJsZVxuIik7Ci0JCWlvYXBpY19pODI1OS5waW4gID0gaTgyNTlfcGluOwotCQlpb2FwaWNfaTgyNTkuYXBpYyA9IGk4MjU5X2FwaWM7Ci0JfQotCS8qIENvbXBsYWluIGlmIHRoZSBNUCB0YWJsZSBhbmQgdGhlIGhhcmR3YXJlIGRpc2FncmVlICovCi0JaWYgKCgoaW9hcGljX2k4MjU5LmFwaWMgIT0gaTgyNTlfYXBpYykgfHwgKGlvYXBpY19pODI1OS5waW4gIT0gaTgyNTlfcGluKSkgJiYKLQkJKGk4MjU5X3BpbiA+PSAwKSAmJiAoaW9hcGljX2k4MjU5LnBpbiA+PSAwKSkKLQl7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkV4dElOVCBpbiBoYXJkd2FyZSBhbmQgTVAgdGFibGUgZGlmZmVyXG4iKTsKLQl9Ci0KLQkvKgotCSAqIERvIG5vdCB0cnVzdCB0aGUgSU8tQVBJQyBiZWluZyBlbXB0eSBhdCBib290dXAKLQkgKi8KLQljbGVhcl9JT19BUElDKCk7Ci19Ci0KLS8qCi0gKiBOb3QgYW4gX19pbml0LCBuZWVkZWQgYnkgdGhlIHJlYm9vdCBjb2RlCi0gKi8KLXZvaWQgZGlzYWJsZV9JT19BUElDKHZvaWQpCi17Ci0JLyoKLQkgKiBDbGVhciB0aGUgSU8tQVBJQyBiZWZvcmUgcmVib290aW5nOgotCSAqLwotCWNsZWFyX0lPX0FQSUMoKTsKLQotCS8qCi0JICogSWYgdGhlIGk4MjU5IGlzIHJvdXRlZCB0aHJvdWdoIGFuIElPQVBJQwotCSAqIFB1dCB0aGF0IElPQVBJQyBpbiB2aXJ0dWFsIHdpcmUgbW9kZQotCSAqIHNvIGxlZ2FjeSBpbnRlcnJ1cHRzIGNhbiBiZSBkZWxpdmVyZWQuCi0JICovCi0JaWYgKGlvYXBpY19pODI1OS5waW4gIT0gLTEpIHsKLQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQkJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7Ci0JCWVudHJ5Lm1hc2sgICAgICAgICAgICA9IDA7IC8qIEVuYWJsZWQgKi8KLQkJZW50cnkudHJpZ2dlciAgICAgICAgID0gMDsgLyogRWRnZSAqLwotCQllbnRyeS5pcnIgICAgICAgICAgICAgPSAwOwotCQllbnRyeS5wb2xhcml0eSAgICAgICAgPSAwOyAvKiBIaWdoICovCi0JCWVudHJ5LmRlbGl2ZXJ5X3N0YXR1cyA9IDA7Ci0JCWVudHJ5LmRlc3RfbW9kZSAgICAgICA9IDA7IC8qIFBoeXNpY2FsICovCi0JCWVudHJ5LmRlbGl2ZXJ5X21vZGUgICA9IGRlc3RfRXh0SU5UOyAvKiBFeHRJbnQgKi8KLQkJZW50cnkudmVjdG9yICAgICAgICAgID0gMDsKLQkJZW50cnkuZGVzdC5waHlzaWNhbC5waHlzaWNhbF9kZXN0ID0gcmVhZF9hcGljX2lkKCk7Ci0KLQkJLyoKLQkJICogQWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgotCQkgKi8KLQkJaW9hcGljX3dyaXRlX2VudHJ5KGlvYXBpY19pODI1OS5hcGljLCBpb2FwaWNfaTgyNTkucGluLCBlbnRyeSk7Ci0JfQotCWRpc2Nvbm5lY3RfYnNwX0FQSUMoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSk7Ci19Ci0KLS8qCi0gKiBmdW5jdGlvbiB0byBzZXQgdGhlIElPLUFQSUMgcGh5c2ljYWwgSURzIGJhc2VkIG9uIHRoZQotICogdmFsdWVzIHN0b3JlZCBpbiB0aGUgTVBDIHRhYmxlLgotICoKLSAqIGJ5IE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4gIFR1ZSBEZWMgMjEgMTI6MjU6MDUgQ1NUIDE5OTkKLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfaW9hcGljX2lkc19mcm9tX21wYyh2b2lkKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKLQlwaHlzaWRfbWFza190IHBoeXNfaWRfcHJlc2VudF9tYXA7Ci0JaW50IGFwaWM7Ci0JaW50IGk7Ci0JdW5zaWduZWQgY2hhciBvbGRfaWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICh4ODZfcXVpcmtzLT5zZXR1cF9pb2FwaWNfaWRzICYmIHg4Nl9xdWlya3MtPnNldHVwX2lvYXBpY19pZHMoKSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBEb24ndCBjaGVjayBJL08gQVBJQyBJRHMgZm9yIHhBUElDIHN5c3RlbXMuICBUaGV5IGhhdmUKLQkgKiBubyBtZWFuaW5nIHdpdGhvdXQgdGhlIHNlcmlhbCBBUElDIGJ1cy4KLQkgKi8KLQlpZiAoIShib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkKLQkJfHwgQVBJQ19YQVBJQyhhcGljX3ZlcnNpb25bYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkXSkpCi0JCXJldHVybjsKLQkvKgotCSAqIFRoaXMgaXMgYnJva2VuOyBhbnl0aGluZyB3aXRoIGEgcmVhbCBjcHUgY291bnQgaGFzIHRvCi0JICogY2lyY3VtdmVudCB0aGlzIGlkaW9jeSByZWdhcmRsZXNzLgotCSAqLwotCXBoeXNfaWRfcHJlc2VudF9tYXAgPSBpb2FwaWNfcGh5c19pZF9tYXAocGh5c19jcHVfcHJlc2VudF9tYXApOwotCi0JLyoKLQkgKiBTZXQgdGhlIElPQVBJQyBJRCB0byB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBNUEMgdGFibGUuCi0JICovCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCi0JCS8qIFJlYWQgdGhlIHJlZ2lzdGVyIDAgdmFsdWUgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQkJb2xkX2lkID0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQ7Ci0KLQkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgSU8tQVBJQyMlZCBJRCBpcyAlZCBpbiB0aGUgTVBDIHRhYmxlIS4uLlxuIiwKLQkJCQlhcGljLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7Ci0JCQlwcmludGsoS0VSTl9FUlIgIi4uLiBmaXhpbmcgdXAgdG8gJWQuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIiwKLQkJCQlyZWdfMDAuYml0cy5JRCk7Ci0JCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9IHJlZ18wMC5iaXRzLklEOwotCQl9Ci0KLQkJLyoKLQkJICogU2FuaXR5IGNoZWNrLCBpcyB0aGUgSUQgcmVhbGx5IGZyZWU/IEV2ZXJ5IEFQSUMgaW4gYQotCQkgKiBzeXN0ZW0gbXVzdCBoYXZlIGEgdW5pcXVlIElEIG9yIHdlIGdldCBsb3RzIG9mIG5pY2UKLQkJICogJ3N0dWNrIG9uIHNtcF9pbnZhbGlkYXRlX25lZWRlZCBJUEkgd2FpdCcgbWVzc2FnZXMuCi0JCSAqLwotCQlpZiAoY2hlY2tfYXBpY2lkX3VzZWQocGh5c19pZF9wcmVzZW50X21hcCwKLQkJCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBJTy1BUElDIyVkIElEICVkIGlzIGFscmVhZHkgdXNlZCEuLi5cbiIsCi0JCQkJYXBpYywgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOwotCQkJZm9yIChpID0gMDsgaSA8IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKTsgaSsrKQotCQkJCWlmICghcGh5c2lkX2lzc2V0KGksIHBoeXNfaWRfcHJlc2VudF9tYXApKQotCQkJCQlicmVhazsKLQkJCWlmIChpID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkKLQkJCQlwYW5pYygiTWF4IEFQSUMgSUQgZXhjZWVkZWQhXG4iKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiLi4uIGZpeGluZyB1cCB0byAlZC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iLAotCQkJCWkpOwotCQkJcGh5c2lkX3NldChpLCBwaHlzX2lkX3ByZXNlbnRfbWFwKTsKLQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID0gaTsKLQkJfSBlbHNlIHsKLQkJCXBoeXNpZF9tYXNrX3QgdG1wOwotCQkJdG1wID0gYXBpY2lkX3RvX2NwdV9wcmVzZW50KG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlNldHRpbmcgJWQgaW4gdGhlICIKLQkJCQkJInBoeXNfaWRfcHJlc2VudF9tYXBcbiIsCi0JCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKLQkJCXBoeXNpZHNfb3IocGh5c19pZF9wcmVzZW50X21hcCwgcGh5c19pZF9wcmVzZW50X21hcCwgdG1wKTsKLQkJfQotCi0KLQkJLyoKLQkJICogV2UgbmVlZCB0byBhZGp1c3QgdGhlIElSUSByb3V0aW5nIHRhYmxlCi0JCSAqIGlmIHRoZSBJRCBjaGFuZ2VkLgotCQkgKi8KLQkJaWYgKG9sZF9pZCAhPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCkKLQkJCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKQotCQkJCWlmIChtcF9pcnFzW2ldLm1wX2RzdGFwaWMgPT0gb2xkX2lkKQotCQkJCQltcF9pcnFzW2ldLm1wX2RzdGFwaWMKLQkJCQkJCT0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQ7Ci0KLQkJLyoKLQkJICogUmVhZCB0aGUgcmlnaHQgdmFsdWUgZnJvbSB0aGUgTVBDIHRhYmxlIGFuZAotCQkgKiB3cml0ZSBpdCBpbnRvIHRoZSBJRCByZWdpc3Rlci4KLQkJICovCi0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCi0JCQkiLi4uY2hhbmdpbmcgSU8tQVBJQyBwaHlzaWNhbCBBUElDIElEIHRvICVkIC4uLiIsCi0JCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7Ci0KLQkJcmVnXzAwLmJpdHMuSUQgPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCWlvX2FwaWNfd3JpdGUoYXBpYywgMCwgcmVnXzAwLnJhdyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQkJLyoKLQkJICogU2FuaXR5IGNoZWNrCi0JCSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJaWYgKHJlZ18wMC5iaXRzLklEICE9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKQotCQkJcHJpbnRrKCJjb3VsZCBub3Qgc2V0IElEIVxuIik7Ci0JCWVsc2UKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBvay5cbiIpOwotCX0KLX0KLQotaW50IG5vX3RpbWVyX2NoZWNrIF9faW5pdGRhdGE7Ci0KLXN0YXRpYyBpbnQgX19pbml0IG5vdGltZXJjaGVjayhjaGFyICpzKQotewotCW5vX3RpbWVyX2NoZWNrID0gMTsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoIm5vX3RpbWVyX2NoZWNrIiwgbm90aW1lcmNoZWNrKTsKLQotLyoKLSAqIFRoZXJlIGlzIGEgbmFzdHkgYnVnIGluIHNvbWUgb2xkZXIgU01QIGJvYXJkcywgdGhlaXIgbXB0YWJsZSBsaWVzCi0gKiBhYm91dCB0aGUgdGltZXIgSVJRLiBXZSBkbyB0aGUgZm9sbG93aW5nIHRvIHdvcmsgYXJvdW5kIHRoZSBzaXR1YXRpb246Ci0gKgotICoJLSB0aW1lciBJUlEgZGVmYXVsdHMgdG8gSU8tQVBJQyBJUlEKLSAqCS0gaWYgdGhpcyBmdW5jdGlvbiBkZXRlY3RzIHRoYXQgdGltZXIgSVJRcyBhcmUgZGVmdW5jdCwgdGhlbiB3ZSBmYWxsCi0gKgkgIGJhY2sgdG8gSVNBIHRpbWVyIElSUXMKLSAqLwotc3RhdGljIGludCBfX2luaXQgdGltZXJfaXJxX3dvcmtzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0MSA9IGppZmZpZXM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChub190aW1lcl9jaGVjaykKLQkJcmV0dXJuIDE7Ci0KLQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JLyogTGV0IHRlbiB0aWNrcyBwYXNzLi4uICovCi0JbWRlbGF5KCgxMCAqIDEwMDApIC8gSFopOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCS8qCi0JICogRXhwZWN0IGEgZmV3IHRpY2tzIGF0IGxlYXN0LCB0byBiZSBzdXJlIHNvbWUgcG9zc2libGUKLQkgKiBnbHVlIGxvZ2ljIGRvZXMgbm90IGxvY2sgdXAgYWZ0ZXIgb25lIG9yIHR3byBmaXJzdAotCSAqIHRpY2tzIGluIGEgbm9uLUV4dElOVCBtb2RlLiAgQWxzbyB0aGUgbG9jYWwgQVBJQwotCSAqIG1pZ2h0IGhhdmUgY2FjaGVkIG9uZSBFeHRJTlQgaW50ZXJydXB0LiAgRmluYWxseSwgYXQKLQkgKiBsZWFzdCBvbmUgdGljayBtYXkgYmUgbG9zdCBkdWUgdG8gZGVsYXlzLgotCSAqLwotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHQxICsgNCkpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbiB0aGUgU01QK0lPQVBJQyBjYXNlIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IHRoZXJlIGFyZSBhbiB1bnNwZWNpZmllZAotICogbnVtYmVyIG9mIHBlbmRpbmcgSVJRIGV2ZW50cyB1bmhhbmRsZWQuIFRoZXNlIGNhc2VzIGFyZSB2ZXJ5IHJhcmUsCi0gKiBzbyB3ZSAncmVzZW5kJyB0aGVzZSBJUlFzIHZpYSBJUElzLCB0byB0aGUgc2FtZSBDUFUuIEl0J3MgbXVjaAotICogYmV0dGVyIHRvIGRvIGl0IHRoaXMgd2F5IGFzIHRodXMgd2UgZG8gbm90IGhhdmUgdG8gYmUgYXdhcmUgb2YKLSAqICdwZW5kaW5nJyBpbnRlcnJ1cHRzIGluIHRoZSBJUlEgcGF0aCwgZXhjZXB0IGF0IHRoaXMgcG9pbnQuCi0gKi8KLS8qCi0gKiBFZGdlIHRyaWdnZXJlZCBuZWVkcyB0byByZXNlbmQgYW55IGludGVycnVwdAotICogdGhhdCB3YXMgZGVsYXllZCBidXQgdGhpcyBpcyBub3cgaGFuZGxlZCBpbiB0aGUgZGV2aWNlCi0gKiBpbmRlcGVuZGVudCBjb2RlLgotICovCi0KLS8qCi0gKiBTdGFydHVwIHF1aXJrOgotICoKLSAqIFN0YXJ0aW5nIHVwIGEgZWRnZS10cmlnZ2VyZWQgSU8tQVBJQyBpbnRlcnJ1cHQgaXMKLSAqIG5hc3R5IC0gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBnZXQgdGhlIGVkZ2UuCi0gKiBJZiBpdCBpcyBhbHJlYWR5IGFzc2VydGVkIGZvciBzb21lIHJlYXNvbiwgd2UgbmVlZAotICogcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdCBpcyB3YXMgcGVuZGluZy4KLSAqCi0gKiBUaGlzIGlzIG5vdCBjb21wbGV0ZSAtIHdlIHNob3VsZCBiZSBhYmxlIHRvIGZha2UKLSAqIGFuIGVkZ2UgZXZlbiBpZiBpdCBpc24ndCBvbiB0aGUgODI1OUEuLi4KLSAqCi0gKiAoV2UgZG8gdGhpcyBmb3IgbGV2ZWwtdHJpZ2dlcmVkIElSUXMgdG9vIC0gaXQgY2Fubm90IGh1cnQuKQotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfaW9hcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCB3YXNfcGVuZGluZyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWlmIChpcnEgPCAxNikgewotCQlkaXNhYmxlXzgyNTlBX2lycShpcnEpOwotCQlpZiAoaTgyNTlBX2lycV9wZW5kaW5nKGlycSkpCi0JCQl3YXNfcGVuZGluZyA9IDE7Ci0JfQotCV9fdW5tYXNrX0lPX0FQSUNfaXJxKGlycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiB3YXNfcGVuZGluZzsKLX0KLQotc3RhdGljIHZvaWQgYWNrX2lvYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQltb3ZlX25hdGl2ZV9pcnEoaXJxKTsKLQlhY2tfQVBJQ19pcnEoKTsKLX0KLQotc3RhdGljIHZvaWQgYWNrX2lvYXBpY19xdWlya19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHY7Ci0JaW50IGk7Ci0KLQltb3ZlX25hdGl2ZV9pcnEoaXJxKTsKLS8qCi0gKiBJdCBhcHBlYXJzIHRoZXJlIGlzIGFuIGVycmF0dW0gd2hpY2ggYWZmZWN0cyBhdCBsZWFzdCB2ZXJzaW9uIDB4MTEKLSAqIG9mIEkvTyBBUElDICh0aGF0J3MgdGhlIDgyMDkzQUEgYW5kIGNvcmVzIGludGVncmF0ZWQgaW50byB2YXJpb3VzCi0gKiBjaGlwc2V0cykuICBVbmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IGlzCi0gKiBlcnJvbmVvdXNseSBkZWxpdmVyZWQgYXMgZWRnZS10cmlnZ2VyZWQgb25lIGJ1dCB0aGUgcmVzcGVjdGl2ZSBJUlIKLSAqIGJpdCBnZXRzIHNldCBuZXZlcnRoZWxlc3MuICBBcyBhIHJlc3VsdCB0aGUgSS9PIHVuaXQgZXhwZWN0cyBhbiBFT0kKLSAqIG1lc3NhZ2UgYnV0IGl0IHdpbGwgbmV2ZXIgYXJyaXZlIGFuZCBmdXJ0aGVyIGludGVycnVwdHMgYXJlIGJsb2NrZWQKLSAqIGZyb20gdGhlIHNvdXJjZS4gIFRoZSBleGFjdCByZWFzb24gaXMgc28gZmFyIHVua25vd24sIGJ1dCB0aGUKLSAqIHBoZW5vbWVub24gd2FzIG9ic2VydmVkIHdoZW4gdHdvIGNvbnNlY3V0aXZlIGludGVycnVwdCByZXF1ZXN0cwotICogZnJvbSBhIGdpdmVuIHNvdXJjZSBnZXQgZGVsaXZlcmVkIHRvIHRoZSBzYW1lIENQVSBhbmQgdGhlIHNvdXJjZSBpcwotICogdGVtcG9yYXJpbHkgZGlzYWJsZWQgaW4gYmV0d2Vlbi4KLSAqCi0gKiBBIHdvcmthcm91bmQgaXMgdG8gc2ltdWxhdGUgYW4gRU9JIG1lc3NhZ2UgbWFudWFsbHkuICBXZSBhY2hpZXZlIGl0Ci0gKiBieSBzZXR0aW5nIHRoZSB0cmlnZ2VyIG1vZGUgdG8gZWRnZSBhbmQgdGhlbiB0byBsZXZlbCB3aGVuIHRoZSBlZGdlCi0gKiB0cmlnZ2VyIG1vZGUgZ2V0cyBkZXRlY3RlZCBpbiB0aGUgVE1SIG9mIGEgbG9jYWwgQVBJQyBmb3IgYQotICogbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdC4gIFdlIG1hc2sgdGhlIHNvdXJjZSBmb3IgdGhlIHRpbWUgb2YgdGhlCi0gKiBvcGVyYXRpb24gdG8gcHJldmVudCBhbiBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgZXNjYXBpbmcgbWVhbndoaWxlLgotICogVGhlIGlkZWEgaXMgZnJvbSBNYW5mcmVkIFNwcmF1bC4gIC0tbWFjcm8KLSAqLwotCWkgPSBpcnFfdmVjdG9yW2lycV07Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfVE1SICsgKChpICYgfjB4MWYpID4+IDEpKTsKLQotCWFja19BUElDX2lycSgpOwotCi0JaWYgKCEodiAmICgxIDw8IChpICYgMHgxZikpKSkgewotCQlhdG9taWNfaW5jKCZpcnFfbWlzX2NvdW50KTsKLQkJc3Bpbl9sb2NrKCZpb2FwaWNfbG9jayk7Ci0JCV9fbWFza19hbmRfZWRnZV9JT19BUElDX2lycShpcnEpOwotCQlfX3VubWFza19hbmRfbGV2ZWxfSU9fQVBJQ19pcnEoaXJxKTsKLQkJc3Bpbl91bmxvY2soJmlvYXBpY19sb2NrKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgaW9hcGljX3JldHJpZ2dlcl9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlzZW5kX0lQSV9zZWxmKGlycV92ZWN0b3JbaXJxXSk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpb2FwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lIAkJPSAiSU8tQVBJQyIsCi0JLnN0YXJ0dXAgCT0gc3RhcnR1cF9pb2FwaWNfaXJxLAotCS5tYXNrCSAJPSBtYXNrX0lPX0FQSUNfaXJxLAotCS51bm1hc2sJIAk9IHVubWFza19JT19BUElDX2lycSwKLQkuYWNrIAkJPSBhY2tfaW9hcGljX2lycSwKLQkuZW9pIAkJPSBhY2tfaW9hcGljX3F1aXJrX2lycSwKLSNpZmRlZiBDT05GSUdfU01QCi0JLnNldF9hZmZpbml0eSAJPSBzZXRfaW9hcGljX2FmZmluaXR5X2lycSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfSU9fQVBJQ190cmFwcyh2b2lkKQotewotCWludCBpcnE7Ci0KLQkvKgotCSAqIE5PVEUhIFRoZSBsb2NhbCBBUElDIGlzbid0IHZlcnkgZ29vZCBhdCBoYW5kbGluZwotCSAqIG11bHRpcGxlIGludGVycnVwdHMgYXQgdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgotCSAqIEFzIHRoZSBpbnRlcnJ1cHQgbGV2ZWwgaXMgZGV0ZXJtaW5lZCBieSB0YWtpbmcgdGhlCi0JICogdmVjdG9yIG51bWJlciBhbmQgc2hpZnRpbmcgdGhhdCByaWdodCBieSA0LCB3ZQotCSAqIHdhbnQgdG8gc3ByZWFkIHRoZXNlIG91dCBhIGJpdCBzbyB0aGF0IHRoZXkgZG9uJ3QKLQkgKiBhbGwgZmFsbCBpbiB0aGUgc2FtZSBpbnRlcnJ1cHQgbGV2ZWwuCi0JICoKLQkgKiBBbHNvLCB3ZSd2ZSBnb3QgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdHJhc2ggZ2F0ZQotCSAqIDB4ODAsIGJlY2F1c2UgaW50IDB4ODAgaXMgaG0sIGtpbmQgb2YgaW1wb3J0YW50aXNoLiA7KQotCSAqLwotCWZvciAoaXJxID0gMDsgaXJxIDwgTlJfSVJRUyA7IGlycSsrKSB7Ci0JCWlmIChJT19BUElDX0lSUShpcnEpICYmICFpcnFfdmVjdG9yW2lycV0pIHsKLQkJCS8qCi0JCQkgKiBIbW0uLiBXZSBkb24ndCBoYXZlIGFuIGVudHJ5IGZvciB0aGlzLAotCQkJICogc28gZGVmYXVsdCB0byBhbiBvbGQtZmFzaGlvbmVkIDgyNTkKLQkJCSAqIGludGVycnVwdCBpZiB3ZSBjYW4uLgotCQkJICovCi0JCQlpZiAoaXJxIDwgMTYpCi0JCQkJbWFrZV84MjU5QV9pcnEoaXJxKTsKLQkJCWVsc2UKLQkJCQkvKiBTdHJhbmdlLiBPaCwgd2VsbC4uICovCi0JCQkJaXJxX2Rlc2NbaXJxXS5jaGlwID0gJm5vX2lycV9jaGlwOwotCQl9Ci0JfQotfQotCi0vKgotICogVGhlIGxvY2FsIEFQSUMgaXJxLWNoaXAgaW1wbGVtZW50YXRpb246Ci0gKi8KLQotc3RhdGljIHZvaWQgYWNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWFja19BUElDX2lycSgpOwotfQotCi1zdGF0aWMgdm9pZCBtYXNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgdjsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubWFza19sYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHY7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHYgJiB+QVBJQ19MVlRfTUFTS0VEKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsYXBpY19jaGlwIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUJCT0gImxvY2FsLUFQSUMiLAotCS5tYXNrCQk9IG1hc2tfbGFwaWNfaXJxLAotCS51bm1hc2sJCT0gdW5tYXNrX2xhcGljX2lycSwKLQkuYWNrCQk9IGFja19sYXBpY19pcnEsCi19OwotCi1zdGF0aWMgdm9pZCBsYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEsIGludCB2ZWN0b3IpCi17Ci0JaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJj0gfklSUV9MRVZFTDsKLQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZsYXBpY19jaGlwLCBoYW5kbGVfZWRnZV9pcnEsCi0JCQkJICAgICAgImVkZ2UiKTsKLQlzZXRfaW50cl9nYXRlKHZlY3RvciwgaW50ZXJydXB0W2lycV0pOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfbm1pKHZvaWQpCi17Ci0JLyoKLQkgKiBEaXJ0eSB0cmljayB0byBlbmFibGUgdGhlIE5NSSB3YXRjaGRvZyAuLi4KLQkgKiBXZSBwdXQgdGhlIDgyNTlBIG1hc3RlciBpbnRvIEFFT0kgbW9kZSBhbmQKLQkgKiB1bm1hc2sgb24gYWxsIGxvY2FsIEFQSUNzIExWVDAgYXMgTk1JLgotCSAqCi0JICogVGhlIGlkZWEgdG8gdXNlIHRoZSA4MjU5QSBpbiBBRU9JIG1vZGUgKCc4MjU5QSBWaXJ0dWFsIFdpcmUnKQotCSAqIGlzIGZyb20gTWFjaWVqIFcuIFJvenlja2kgLSBzbyB3ZSBkbyBub3QgaGF2ZSB0byBFT0kgZnJvbQotCSAqIHRoZSBOTUkgaGFuZGxlciBvciB0aGUgdGltZXIgaW50ZXJydXB0LgotCSAqLwotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPICJhY3RpdmF0aW5nIE5NSSBXYXRjaGRvZyAuLi4iKTsKLQotCWVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwKCk7Ci0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIgZG9uZS5cbiIpOwotfQotCi0vKgotICogVGhpcyBsb29rcyBhIGJpdCBoYWNraXNoIGJ1dCBpdCdzIGFib3V0IHRoZSBvbmx5IG9uZSB3YXkgb2Ygc2VuZGluZwotICogYSBmZXcgSU5UQSBjeWNsZXMgdG8gODI1OUFzIGFuZCBhbnkgYXNzb2NpYXRlZCBnbHVlIGxvZ2ljLiAgSUNSIGRvZXMKLSAqIG5vdCBzdXBwb3J0IHRoZSBFeHRJTlQgbW9kZSwgdW5mb3J0dW5hdGVseS4gIFdlIG5lZWQgdG8gc2VuZCB0aGVzZQotICogY3ljbGVzIGFzIHNvbWUgaTgyNDg5RFgtYmFzZWQgYm9hcmRzIGhhdmUgZ2x1ZSBsb2dpYyB0aGF0IGtlZXBzIHRoZQotICogODI1OUEgaW50ZXJydXB0IGxpbmUgYXNzZXJ0ZWQgdW50aWwgSU5UQS4gIC0tbWFjcm8KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCB1bmxvY2tfRXh0SU5UX2xvZ2ljKHZvaWQpCi17Ci0JaW50IGFwaWMsIHBpbiwgaTsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTAsIGVudHJ5MTsKLQl1bnNpZ25lZCBjaGFyIHNhdmVfY29udHJvbCwgc2F2ZV9mcmVxX3NlbGVjdDsKLQotCXBpbiAgPSBmaW5kX2lzYV9pcnFfcGluKDgsIG1wX0lOVCk7Ci0JaWYgKHBpbiA9PSAtMSkgewotCQlXQVJOX09OX09OQ0UoMSk7Ci0JCXJldHVybjsKLQl9Ci0JYXBpYyA9IGZpbmRfaXNhX2lycV9hcGljKDgsIG1wX0lOVCk7Ci0JaWYgKGFwaWMgPT0gLTEpIHsKLQkJV0FSTl9PTl9PTkNFKDEpOwotCQlyZXR1cm47Ci0JfQotCi0JZW50cnkwID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKLQljbGVhcl9JT19BUElDX3BpbihhcGljLCBwaW4pOwotCi0JbWVtc2V0KCZlbnRyeTEsIDAsIHNpemVvZihlbnRyeTEpKTsKLQotCWVudHJ5MS5kZXN0X21vZGUgPSAwOwkJCS8qIHBoeXNpY2FsIGRlbGl2ZXJ5ICovCi0JZW50cnkxLm1hc2sgPSAwOwkJCS8qIHVubWFzayBJUlEgbm93ICovCi0JZW50cnkxLmRlc3QucGh5c2ljYWwucGh5c2ljYWxfZGVzdCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWVudHJ5MS5kZWxpdmVyeV9tb2RlID0gZGVzdF9FeHRJTlQ7Ci0JZW50cnkxLnBvbGFyaXR5ID0gZW50cnkwLnBvbGFyaXR5OwotCWVudHJ5MS50cmlnZ2VyID0gMDsKLQllbnRyeTEudmVjdG9yID0gMDsKLQotCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5MSk7Ci0KLQlzYXZlX2NvbnRyb2wgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOwotCXNhdmVfZnJlcV9zZWxlY3QgPSBDTU9TX1JFQUQoUlRDX0ZSRVFfU0VMRUNUKTsKLQlDTU9TX1dSSVRFKChzYXZlX2ZyZXFfc2VsZWN0ICYgflJUQ19SQVRFX1NFTEVDVCkgfCAweDYsCi0JCSAgIFJUQ19GUkVRX1NFTEVDVCk7Ci0JQ01PU19XUklURShzYXZlX2NvbnRyb2wgfCBSVENfUElFLCBSVENfQ09OVFJPTCk7Ci0KLQlpID0gMTAwOwotCXdoaWxlIChpLS0gPiAwKSB7Ci0JCW1kZWxheSgxMCk7Ci0JCWlmICgoQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKSAmIFJUQ19QRikgPT0gUlRDX1BGKQotCQkJaSAtPSAxMDsKLQl9Ci0KLQlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCwgUlRDX0NPTlRST0wpOwotCUNNT1NfV1JJVEUoc2F2ZV9mcmVxX3NlbGVjdCwgUlRDX0ZSRVFfU0VMRUNUKTsKLQljbGVhcl9JT19BUElDX3BpbihhcGljLCBwaW4pOwotCi0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkwKTsKLX0KLQotLyoKLSAqIFRoaXMgY29kZSBtYXkgbG9vayBhIGJpdCBwYXJhbm9pZCwgYnV0IGl0J3Mgc3VwcG9zZWQgdG8gY29vcGVyYXRlIHdpdGgKLSAqIGEgd2lkZSByYW5nZSBvZiBib2FyZHMgYW5kIEJJT1MgYnVncy4gIEZvcnR1bmF0ZWx5IG9ubHkgdGhlIHRpbWVyIElSUQotICogaXMgc28gc2NyZXd5LiAgVGhhbmtzIHRvIEJyaWFuIFBlcmtpbnMgZm9yIHRlc3RpbmcvaGFja2luZyB0aGlzIGJlYXN0Ci0gKiBmYW5hdGljYWxseSBvbiBoaXMgdHJ1bHkgYnVnZ3kgYm9hcmQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfdGltZXIodm9pZCkKLXsKLQlpbnQgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yOwotCWludCBub19waW4xID0gMDsKLQlpbnQgdmVjdG9yOwotCXVuc2lnbmVkIGludCB2ZXI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCXZlciA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JdmVyID0gR0VUX0FQSUNfVkVSU0lPTih2ZXIpOwotCi0JLyoKLQkgKiBnZXQvc2V0IHRoZSB0aW1lciBJUlEgdmVjdG9yOgotCSAqLwotCWRpc2FibGVfODI1OUFfaXJxKDApOwotCXZlY3RvciA9IGFzc2lnbl9pcnFfdmVjdG9yKDApOwotCXNldF9pbnRyX2dhdGUodmVjdG9yLCBpbnRlcnJ1cHRbMF0pOwotCi0JLyoKLQkgKiBBcyBJUlEwIGlzIHRvIGJlIGVuYWJsZWQgaW4gdGhlIDgyNTlBLCB0aGUgdmlydHVhbAotCSAqIHdpcmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIHRoZSBsb2NhbCBBUElDLiAgQWxzbwotCSAqIHRpbWVyIGludGVycnVwdHMgbmVlZCB0byBiZSBhY2tub3dsZWRnZWQgbWFudWFsbHkgaW4KLQkgKiB0aGUgODI1OUEgZm9yIHRoZSBpODI0ODlEWCB3aGVuIHVzaW5nIHRoZSBOTUkKLQkgKiB3YXRjaGRvZyBhcyB0aGF0IEFQSUMgdHJlYXRzIE5NSXMgYXMgbGV2ZWwtdHJpZ2dlcmVkLgotCSAqIFRoZSBBRU9JIG1vZGUgd2lsbCBmaW5pc2ggdGhlbSBpbiB0aGUgODI1OUEKLQkgKiBhdXRvbWF0aWNhbGx5LgotCSAqLwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0VYVElOVCk7Ci0JaW5pdF84MjU5QSgxKTsKLQl0aW1lcl9hY2sgPSAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDICYmICFBUElDX0lOVEVHUkFURUQodmVyKSk7Ci0KLQlwaW4xICA9IGZpbmRfaXNhX2lycV9waW4oMCwgbXBfSU5UKTsKLQlhcGljMSA9IGZpbmRfaXNhX2lycV9hcGljKDAsIG1wX0lOVCk7Ci0JcGluMiAgPSBpb2FwaWNfaTgyNTkucGluOwotCWFwaWMyID0gaW9hcGljX2k4MjU5LmFwaWM7Ci0KLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uVElNRVI6IHZlY3Rvcj0weCUwMlggIgotCQkgICAgImFwaWMxPSVkIHBpbjE9JWQgYXBpYzI9JWQgcGluMj0lZFxuIiwKLQkJICAgIHZlY3RvciwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKLQotCS8qCi0JICogU29tZSBCSU9TIHdyaXRlcnMgYXJlIGNsdWVsZXNzIGFuZCByZXBvcnQgdGhlIEV4dElOVEEKLQkgKiBJL08gQVBJQyBpbnB1dCBmcm9tIHRoZSBjYXNjYWRlZCA4MjU5QSBhcyB0aGUgdGltZXIKLQkgKiBpbnRlcnJ1cHQgaW5wdXQuICBTbyBqdXN0IGluIGNhc2UsIGlmIG9ubHkgb25lIHBpbgotCSAqIHdhcyBmb3VuZCBhYm92ZSwgdHJ5IGl0IGJvdGggZGlyZWN0bHkgYW5kIHRocm91Z2ggdGhlCi0JICogODI1OUEuCi0JICovCi0JaWYgKHBpbjEgPT0gLTEpIHsKLQkJcGluMSA9IHBpbjI7Ci0JCWFwaWMxID0gYXBpYzI7Ci0JCW5vX3BpbjEgPSAxOwotCX0gZWxzZSBpZiAocGluMiA9PSAtMSkgewotCQlwaW4yID0gcGluMTsKLQkJYXBpYzIgPSBhcGljMTsKLQl9Ci0KLQlpZiAocGluMSAhPSAtMSkgewotCQkvKgotCQkgKiBPaywgZG9lcyBJUlEwIHRocm91Z2ggdGhlIElPQVBJQyB3b3JrPwotCQkgKi8KLQkJaWYgKG5vX3BpbjEpIHsKLQkJCWFkZF9waW5fdG9faXJxKDAsIGFwaWMxLCBwaW4xKTsKLQkJCXNldHVwX3RpbWVyX0lSUTBfcGluKGFwaWMxLCBwaW4xLCB2ZWN0b3IpOwotCQl9Ci0JCXVubWFza19JT19BUElDX2lycSgwKTsKLQkJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7Ci0JCQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7Ci0JCQkJc2V0dXBfbm1pKCk7Ci0JCQkJZW5hYmxlXzgyNTlBX2lycSgwKTsKLQkJCX0KLQkJCWlmIChkaXNhYmxlX3RpbWVyX3Bpbl8xID4gMCkKLQkJCQljbGVhcl9JT19BUElDX3BpbigwLCBwaW4xKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMxLCBwaW4xKTsKLQkJaWYgKCFub19waW4xKQotCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9FUlIgIi4uTVAtQklPUyBidWc6ICIKLQkJCQkgICAgIjgyNTQgdGltZXIgbm90IGNvbm5lY3RlZCB0byBJTy1BUElDXG4iKTsKLQotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgIgotCQkJICAgICIoSVJRMCkgdGhyb3VnaCB0aGUgODI1OUEgLi4uXG4iKTsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCi0JCQkgICAgIi4uLi4uIChmb3VuZCBhcGljICVkIHBpbiAlZCkgLi4uXG4iLCBhcGljMiwgcGluMik7Ci0JCS8qCi0JCSAqIGxlZ2FjeSBkZXZpY2VzIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8gSU8gQVBJQyAjMAotCQkgKi8KLQkJcmVwbGFjZV9waW5fYXRfaXJxKDAsIGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMik7Ci0JCXNldHVwX3RpbWVyX0lSUTBfcGluKGFwaWMyLCBwaW4yLCB2ZWN0b3IpOwotCQl1bm1hc2tfSU9fQVBJQ19pcnEoMCk7Ci0JCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLi4uIHdvcmtzLlxuIik7Ci0JCQl0aW1lcl90aHJvdWdoXzgyNTkgPSAxOwotCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQkJCWRpc2FibGVfODI1OUFfaXJxKDApOwotCQkJCXNldHVwX25taSgpOwotCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCQl9Ci0JCQlnb3RvIG91dDsKLQkJfQotCQkvKgotCQkgKiBDbGVhbnVwLCBqdXN0IGluIGNhc2UgLi4uCi0JCSAqLwotCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzIsIHBpbjIpOwotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uLi4gZmFpbGVkLlxuIik7Ci0JfQotCi0JaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX1dBUk5JTkcgInRpbWVyIGRvZXNuJ3Qgd29yayAiCi0JCQkgICAgInRocm91Z2ggdGhlIElPLUFQSUMgLSBkaXNhYmxpbmcgTk1JIFdhdGNoZG9nIVxuIik7Ci0JCW5taV93YXRjaGRvZyA9IE5NSV9OT05FOwotCX0KLQl0aW1lcl9hY2sgPSAwOwotCi0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCi0JCSAgICAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBWaXJ0dWFsIFdpcmUgSVJRLi4uXG4iKTsKLQotCWxhcGljX3JlZ2lzdGVyX2ludHIoMCwgdmVjdG9yKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9GSVhFRCB8IHZlY3Rvcik7CS8qIEZpeGVkIG1vZGUgKi8KLQllbmFibGVfODI1OUFfaXJxKDApOwotCi0JaWYgKHRpbWVyX2lycV93b3JrcygpKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gd29ya3MuXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWRpc2FibGVfODI1OUFfaXJxKDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0ZJWEVEIHwgdmVjdG9yKTsKLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIGZhaWxlZC5cbiIpOwotCi0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCi0JCSAgICAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBFeHRJTlQgSVJRLi4uXG4iKTsKLQotCWluaXRfODI1OUEoMCk7Ci0JbWFrZV84MjU5QV9pcnEoMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRVhUSU5UKTsKLQotCXVubG9ja19FeHRJTlRfbG9naWMoKTsKLQotCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIHdvcmtzLlxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIGZhaWxlZCA6KC5cbiIpOwotCXBhbmljKCJJTy1BUElDICsgdGltZXIgZG9lc24ndCB3b3JrISAgQm9vdCB3aXRoIGFwaWM9ZGVidWcgYW5kIHNlbmQgYSAiCi0JCSJyZXBvcnQuICBUaGVuIHRyeSBib290aW5nIHdpdGggdGhlICdub2FwaWMnIG9wdGlvbi5cbiIpOwotb3V0OgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyoKLSAqIFRyYWRpdGlvbmFsbHkgSVNBIElSUTIgaXMgdGhlIGNhc2NhZGUgSVJRLCBhbmQgaXMgbm90IGF2YWlsYWJsZQotICogdG8gZGV2aWNlcy4gIEhvd2V2ZXIgdGhlcmUgbWF5IGJlIGFuIEkvTyBBUElDIHBpbiBhdmFpbGFibGUgZm9yCi0gKiB0aGlzIGludGVycnVwdCByZWdhcmRsZXNzLiAgVGhlIHBpbiBtYXkgYmUgbGVmdCB1bmNvbm5lY3RlZCwgYnV0Ci0gKiB0eXBpY2FsbHkgaXQgd2lsbCBiZSByZXVzZWQgYXMgYW4gRXh0SU5UIGNhc2NhZGUgaW50ZXJydXB0IGZvcgotICogdGhlIG1hc3RlciA4MjU5QS4gIEluIHRoZSBNUFMgY2FzZSBzdWNoIGEgcGluIHdpbGwgbm9ybWFsbHkgYmUKLSAqIHJlcG9ydGVkIGFzIGFuIEV4dElOVCBpbnRlcnJ1cHQgaW4gdGhlIE1QIHRhYmxlLiAgV2l0aCBBQ1BJCi0gKiB0aGVyZSBpcyBubyBwcm92aXNpb24gZm9yIEV4dElOVCBpbnRlcnJ1cHRzLCBhbmQgaW4gdGhlIGFic2VuY2UKLSAqIG9mIGFuIG92ZXJyaWRlIGl0IHdvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gb3JkaW5hcnkgSVNBIEkvTyBBUElDCi0gKiBpbnRlcnJ1cHQsIHRoYXQgaXMgZWRnZS10cmlnZ2VyZWQgYW5kIHVubWFza2VkIGJ5IGRlZmF1bHQuICBXZQotICogdXNlZCB0byBkbyB0aGlzLCBidXQgaXQgY2F1c2VkIHByb2JsZW1zIG9uIHNvbWUgc3lzdGVtcyBiZWNhdXNlCi0gKiBvZiB0aGUgTk1JIHdhdGNoZG9nIGFuZCBzb21ldGltZXMgSVJRMCBvZiB0aGUgODI1NCB0aW1lciB1c2luZwotICogdGhlIHNhbWUgRXh0SU5UIGNhc2NhZGUgaW50ZXJydXB0IHRvIGRyaXZlIHRoZSBsb2NhbCBBUElDIG9mIHRoZQotICogYm9vdHN0cmFwIHByb2Nlc3Nvci4gIFRoZXJlZm9yZSB3ZSByZWZyYWluIGZyb20gcm91dGluZyBJUlEyIHRvCi0gKiB0aGUgSS9PIEFQSUMgaW4gYWxsIGNhc2VzIG5vdy4gIE5vIGFjdHVhbCBkZXZpY2Ugc2hvdWxkIHJlcXVlc3QKLSAqIGl0IGFueXdheS4gIC0tbWFjcm8KLSAqLwotI2RlZmluZSBQSUNfSVJRUwkoMSA8PCBQSUNfQ0FTQ0FERV9JUikKLQotdm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQyh2b2lkKQotewotCWludCBpOwotCi0JLyogUmVzZXJ2ZSBhbGwgdGhlIHN5c3RlbSB2ZWN0b3JzLiAqLwotCWZvciAoaSA9IGZpcnN0X3N5c3RlbV92ZWN0b3I7IGkgPCBOUl9WRUNUT1JTOyBpKyspCi0JCXNldF9iaXQoaSwgdXNlZF92ZWN0b3JzKTsKLQotCWVuYWJsZV9JT19BUElDKCk7Ci0KLQlpb19hcGljX2lycXMgPSB+UElDX0lSUVM7Ci0KLQlwcmludGsoIkVOQUJMSU5HIElPLUFQSUMgSVJRc1xuIik7Ci0KLQkvKgotCSAqIFNldCB1cCBJTy1BUElDIElSUSByb3V0aW5nLgotCSAqLwotCWlmICghYWNwaV9pb2FwaWMpCi0JCXNldHVwX2lvYXBpY19pZHNfZnJvbV9tcGMoKTsKLQlzeW5jX0FyYl9JRHMoKTsKLQlzZXR1cF9JT19BUElDX2lycXMoKTsKLQlpbml0X0lPX0FQSUNfdHJhcHMoKTsKLQljaGVja190aW1lcigpOwotfQotCi0vKgotICoJQ2FsbGVkIGFmdGVyIGFsbCB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZS4gSWYgd2UgZGlkbnQgZmluZCBhbnkKLSAqCUFQSUMgYnVncyB0aGVuIHdlIGNhbiBhbGxvdyB0aGUgbW9kaWZ5IGZhc3QgcGF0aAotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGlvX2FwaWNfYnVnX2ZpbmFsaXplKHZvaWQpCi17Ci0JaWYgKHNpc19hcGljX2J1ZyA9PSAtMSkKLQkJc2lzX2FwaWNfYnVnID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotbGF0ZV9pbml0Y2FsbChpb19hcGljX2J1Z19maW5hbGl6ZSk7Ci0KLXN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSB7Ci0Jc3RydWN0IHN5c19kZXZpY2UgZGV2OwotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5WzBdOwotfTsKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKm1wX2lvYXBpY19kYXRhW01BWF9JT19BUElDU107Ci0KLXN0YXRpYyBpbnQgaW9hcGljX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKmRhdGE7Ci0JaW50IGk7Ci0KLQlkYXRhID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhLCBkZXYpOwotCWVudHJ5ID0gZGF0YS0+ZW50cnk7Ci0JZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY19yZWdpc3RlcnNbZGV2LT5pZF07IGkrKykKLQkJZW50cnlbaV0gPSBpb2FwaWNfcmVhZF9lbnRyeShkZXYtPmlkLCBpKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlvYXBpY19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhICpkYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOwotCWludCBpOwotCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSwgZGV2KTsKLQllbnRyeSA9IGRhdGEtPmVudHJ5OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChkZXYtPmlkLCAwKTsKLQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gbXBfaW9hcGljc1tkZXYtPmlkXS5tcF9hcGljaWQpIHsKLQkJcmVnXzAwLmJpdHMuSUQgPSBtcF9pb2FwaWNzW2Rldi0+aWRdLm1wX2FwaWNpZDsKLQkJaW9fYXBpY193cml0ZShkZXYtPmlkLCAwLCByZWdfMDAucmF3KTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1tkZXYtPmlkXTsgaSsrKQotCQlpb2FwaWNfd3JpdGVfZW50cnkoZGV2LT5pZCwgaSwgZW50cnlbaV0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGlvYXBpY19zeXNkZXZfY2xhc3MgPSB7Ci0JLm5hbWUgPSAiaW9hcGljIiwKLQkuc3VzcGVuZCA9IGlvYXBpY19zdXNwZW5kLAotCS5yZXN1bWUgPSBpb2FwaWNfcmVzdW1lLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW9hcGljX2luaXRfc3lzZnModm9pZCkKLXsKLQlzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2OwotCWludCBpLCBzaXplLCBlcnJvciA9IDA7Ci0KLQllcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmaW9hcGljX3N5c2Rldl9jbGFzcyk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IHN5c19kZXZpY2UpICsgbnJfaW9hcGljX3JlZ2lzdGVyc1tpXQotCQkJKiBzaXplb2Yoc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkpOwotCQltcF9pb2FwaWNfZGF0YVtpXSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbXBfaW9hcGljX2RhdGFbaV0pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc3VzcGVuZC9yZXN1bWUgSU9BUElDICVkXG4iLCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWRldiA9ICZtcF9pb2FwaWNfZGF0YVtpXS0+ZGV2OwotCQlkZXYtPmlkID0gaTsKLQkJZGV2LT5jbHMgPSAmaW9hcGljX3N5c2Rldl9jbGFzczsKLQkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoZGV2KTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlrZnJlZShtcF9pb2FwaWNfZGF0YVtpXSk7Ci0JCQltcF9pb2FwaWNfZGF0YVtpXSA9IE5VTEw7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHN1c3BlbmQvcmVzdW1lIElPQVBJQyAlZFxuIiwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1kZXZpY2VfaW5pdGNhbGwoaW9hcGljX2luaXRfc3lzZnMpOwotCi0vKgotICogRHluYW1pYyBpcnEgYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGlvbgotICovCi1pbnQgY3JlYXRlX2lycSh2b2lkKQotewotCS8qIEFsbG9jYXRlIGFuIHVudXNlZCBpcnEgKi8KLQlpbnQgaXJxLCBuZXcsIHZlY3RvciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlycSA9IC1FTk9TUEM7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JZm9yIChuZXcgPSAoTlJfSVJRUyAtIDEpOyBuZXcgPj0gMDsgbmV3LS0pIHsKLQkJaWYgKHBsYXRmb3JtX2xlZ2FjeV9pcnEobmV3KSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoaXJxX3ZlY3RvcltuZXddICE9IDApCi0JCQljb250aW51ZTsKLQkJdmVjdG9yID0gX19hc3NpZ25faXJxX3ZlY3RvcihuZXcpOwotCQlpZiAobGlrZWx5KHZlY3RvciA+IDApKQotCQkJaXJxID0gbmV3OwotCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQotCWlmIChpcnEgPj0gMCkgewotCQlzZXRfaW50cl9nYXRlKHZlY3RvciwgaW50ZXJydXB0W2lycV0pOwotCQlkeW5hbWljX2lycV9pbml0KGlycSk7Ci0JfQotCXJldHVybiBpcnE7Ci19Ci0KLXZvaWQgZGVzdHJveV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZHluYW1pY19pcnFfY2xlYW51cChpcnEpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JY2xlYXJfYml0KGlycV92ZWN0b3JbaXJxXSwgdXNlZF92ZWN0b3JzKTsKLQlpcnFfdmVjdG9yW2lycV0gPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBNU0kgbWVzc2FnZSBjb21wb3NpdGlvbgotICovCi0jaWZkZWYgQ09ORklHX1BDSV9NU0kKLXN0YXRpYyBpbnQgbXNpX2NvbXBvc2VfbXNnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQotewotCWludCB2ZWN0b3I7Ci0JdW5zaWduZWQgZGVzdDsKLQotCXZlY3RvciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSk7Ci0JaWYgKHZlY3RvciA+PSAwKSB7Ci0JCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOwotCi0JCW1zZy0+YWRkcmVzc19oaSA9IE1TSV9BRERSX0JBU0VfSEk7Ci0JCW1zZy0+YWRkcmVzc19sbyA9Ci0JCQlNU0lfQUREUl9CQVNFX0xPIHwKLQkJCSgoSU5UX0RFU1RfTU9ERSA9PSAwKSA/Ci1NU0lfQUREUl9ERVNUX01PREVfUEhZU0lDQUw6Ci0JCQkJTVNJX0FERFJfREVTVF9NT0RFX0xPR0lDQUwpIHwKLQkJCSgoSU5UX0RFTElWRVJZX01PREUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/Ci0JCQkJTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVOgotCQkJCU1TSV9BRERSX1JFRElSRUNUSU9OX0xPV1BSSSkgfAotCQkJTVNJX0FERFJfREVTVF9JRChkZXN0KTsKLQotCQltc2ctPmRhdGEgPQotCQkJTVNJX0RBVEFfVFJJR0dFUl9FREdFIHwKLQkJCU1TSV9EQVRBX0xFVkVMX0FTU0VSVCB8Ci0JCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPwotTVNJX0RBVEFfREVMSVZFUllfRklYRUQ6Ci0JCQkJTVNJX0RBVEFfREVMSVZFUllfTE9XUFJJKSB8Ci0JCQlNU0lfREFUQV9WRUNUT1IodmVjdG9yKTsKLQl9Ci0JcmV0dXJuIHZlY3RvcjsKLX0KLQotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkIHNldF9tc2lfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQotewotCXN0cnVjdCBtc2lfbXNnIG1zZzsKLQl1bnNpZ25lZCBpbnQgZGVzdDsKLQljcHVtYXNrX3QgdG1wOwotCWludCB2ZWN0b3I7Ci0KLQljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoY3B1c19lbXB0eSh0bXApKQotCQl0bXAgPSBUQVJHRVRfQ1BVUzsKLQotCXZlY3RvciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSk7Ci0JaWYgKHZlY3RvciA8IDApCi0JCXJldHVybjsKLQotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQobWFzayk7Ci0KLQlyZWFkX21zaV9tc2coaXJxLCAmbXNnKTsKLQotCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKLQltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IodmVjdG9yKTsKLQltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVF9JRF9NQVNLOwotCW1zZy5hZGRyZXNzX2xvIHw9IE1TSV9BRERSX0RFU1RfSUQoZGVzdCk7Ci0KLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7Ci0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IG1hc2s7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCi0vKgotICogSVJRIENoaXAgZm9yIE1TSSBQQ0kvUENJLVgvUENJLUV4cHJlc3MgRGV2aWNlcywKLSAqIHdoaWNoIGltcGxlbWVudCB0aGUgTVNJIG9yIE1TSS1YIENhcGFiaWxpdHkgU3RydWN0dXJlLgotICovCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zaV9jaGlwID0gewotCS5uYW1lCQk9ICJQQ0ktTVNJIiwKLQkudW5tYXNrCQk9IHVubWFza19tc2lfaXJxLAotCS5tYXNrCQk9IG1hc2tfbXNpX2lycSwKLQkuYWNrCQk9IGFja19pb2FwaWNfaXJxLAotI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5CT0gc2V0X21zaV9pcnFfYWZmaW5pdHksCi0jZW5kaWYKLQkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCi19OwotCi1pbnQgYXJjaF9zZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKLXsKLQlzdHJ1Y3QgbXNpX21zZyBtc2c7Ci0JaW50IGlycSwgcmV0OwotCWlycSA9IGNyZWF0ZV9pcnEoKTsKLQlpZiAoaXJxIDwgMCkKLQkJcmV0dXJuIGlycTsKLQotCXJldCA9IG1zaV9jb21wb3NlX21zZyhkZXYsIGlycSwgJm1zZyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGVzdHJveV9pcnEoaXJxKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlzZXRfaXJxX21zaShpcnEsIGRlc2MpOwotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKLQotCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJm1zaV9jaGlwLCBoYW5kbGVfZWRnZV9pcnEsCi0JCQkJICAgICAgImVkZ2UiKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGFyY2hfdGVhcmRvd25fbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWRlc3Ryb3lfaXJxKGlycSk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfUENJX01TSSAqLwotCi0vKgotICogSHlwZXJ0cmFuc3BvcnQgaW50ZXJydXB0IHN1cHBvcnQKLSAqLwotI2lmZGVmIENPTkZJR19IVF9JUlEKLQotI2lmZGVmIENPTkZJR19TTVAKLQotc3RhdGljIHZvaWQgdGFyZ2V0X2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZGVzdCkKLXsKLQlzdHJ1Y3QgaHRfaXJxX21zZyBtc2c7Ci0JZmV0Y2hfaHRfaXJxX21zZyhpcnEsICZtc2cpOwotCi0JbXNnLmFkZHJlc3NfbG8gJj0gfihIVF9JUlFfTE9XX0RFU1RfSURfTUFTSyk7Ci0JbXNnLmFkZHJlc3NfaGkgJj0gfihIVF9JUlFfSElHSF9ERVNUX0lEX01BU0spOwotCi0JbXNnLmFkZHJlc3NfbG8gfD0gSFRfSVJRX0xPV19ERVNUX0lEKGRlc3QpOwotCW1zZy5hZGRyZXNzX2hpIHw9IEhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7Ci0KLQl3cml0ZV9odF9pcnFfbXNnKGlycSwgJm1zZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9odF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0JY3B1bWFza190IHRtcDsKLQotCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXRtcCA9IFRBUkdFVF9DUFVTOwotCi0JY3B1c19hbmQobWFzaywgdG1wLCBDUFVfTUFTS19BTEwpOwotCi0JZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChtYXNrKTsKLQotCXRhcmdldF9odF9pcnEoaXJxLCBkZXN0KTsKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gbWFzazsKLX0KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGh0X2lycV9jaGlwID0gewotCS5uYW1lCQk9ICJQQ0ktSFQiLAotCS5tYXNrCQk9IG1hc2tfaHRfaXJxLAotCS51bm1hc2sJCT0gdW5tYXNrX2h0X2lycSwKLQkuYWNrCQk9IGFja19pb2FwaWNfaXJxLAotI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5CT0gc2V0X2h0X2lycV9hZmZpbml0eSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLWludCBhcmNoX3NldHVwX2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWludCB2ZWN0b3I7Ci0KLQl2ZWN0b3IgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEpOwotCWlmICh2ZWN0b3IgPj0gMCkgewotCQlzdHJ1Y3QgaHRfaXJxX21zZyBtc2c7Ci0JCXVuc2lnbmVkIGRlc3Q7Ci0JCWNwdW1hc2tfdCB0bXA7Ci0KLQkJY3B1c19jbGVhcih0bXApOwotCQljcHVfc2V0KHZlY3RvciA+PiA4LCB0bXApOwotCQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7Ci0KLQkJbXNnLmFkZHJlc3NfaGkgPSBIVF9JUlFfSElHSF9ERVNUX0lEKGRlc3QpOwotCi0JCW1zZy5hZGRyZXNzX2xvID0KLQkJCUhUX0lSUV9MT1dfQkFTRSB8Ci0JCQlIVF9JUlFfTE9XX0RFU1RfSUQoZGVzdCkgfAotCQkJSFRfSVJRX0xPV19WRUNUT1IodmVjdG9yKSB8Ci0JCQkoKElOVF9ERVNUX01PREUgPT0gMCkgPwotCQkJCUhUX0lSUV9MT1dfRE1fUEhZU0lDQUwgOgotCQkJCUhUX0lSUV9MT1dfRE1fTE9HSUNBTCkgfAotCQkJSFRfSVJRX0xPV19SUUVPSV9FREdFIHwKLQkJCSgoSU5UX0RFTElWRVJZX01PREUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/Ci0JCQkJSFRfSVJRX0xPV19NVF9GSVhFRCA6Ci0JCQkJSFRfSVJRX0xPV19NVF9BUkJJVFJBVEVEKSB8Ci0JCQlIVF9JUlFfTE9XX0lSUV9NQVNLRUQ7Ci0KLQkJd3JpdGVfaHRfaXJxX21zZyhpcnEsICZtc2cpOwotCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmh0X2lycV9jaGlwLAotCQkJCQkgICAgICBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci0JfQotCXJldHVybiB2ZWN0b3I7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0hUX0lSUSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCQkJQUNQSS1iYXNlZCBJT0FQSUMgQ29uZmlndXJhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmZGVmIENPTkZJR19BQ1BJCi0KLWludCBfX2luaXQgaW9fYXBpY19nZXRfdW5pcXVlX2lkKGludCBpb2FwaWMsIGludCBhcGljX2lkKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKLQlzdGF0aWMgcGh5c2lkX21hc2tfdCBhcGljX2lkX21hcCA9IFBIWVNJRF9NQVNLX05PTkU7Ci0JcGh5c2lkX21hc2tfdCB0bXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaSA9IDA7Ci0KLQkvKgotCSAqIFRoZSBQNCBwbGF0Zm9ybSBzdXBwb3J0cyB1cCB0byAyNTYgQVBJQyBJRHMgb24gdHdvIHNlcGFyYXRlIEFQSUMKLQkgKiBidXNlcyAob25lIGZvciBMQVBJQ3MsIG9uZSBmb3IgSU9BUElDcyksIHdoZXJlIHByZWRlY2Vzc29ycyBvbmx5Ci0JICogc3VwcG9ydHMgdXAgdG8gMTYgb24gb25lIHNoYXJlZCBBUElDIGJ1cy4KLQkgKgotCSAqIFRCRDogRXhwYW5kIExBUElDL0lPQVBJQyBzdXBwb3J0IG9uIFA0LWNsYXNzIHN5c3RlbXMgdG8gdGFrZSBmdWxsCi0JICogICAgICBhZHZhbnRhZ2Ugb2YgbmV3IEFQSUMgYnVzIGFyY2hpdGVjdHVyZS4KLQkgKi8KLQotCWlmIChwaHlzaWRzX2VtcHR5KGFwaWNfaWRfbWFwKSkKLQkJYXBpY19pZF9tYXAgPSBpb2FwaWNfcGh5c19pZF9tYXAocGh5c19jcHVfcHJlc2VudF9tYXApOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQlpZiAoYXBpY19pZCA+PSBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSU9BUElDWyVkXTogSW52YWxpZCBhcGljX2lkICVkLCB0cnlpbmcgIgotCQkJIiVkXG4iLCBpb2FwaWMsIGFwaWNfaWQsIHJlZ18wMC5iaXRzLklEKTsKLQkJYXBpY19pZCA9IHJlZ18wMC5iaXRzLklEOwotCX0KLQotCS8qCi0JICogRXZlcnkgQVBJQyBpbiBhIHN5c3RlbSBtdXN0IGhhdmUgYSB1bmlxdWUgSUQgb3Igd2UgZ2V0IGxvdHMgb2YgbmljZQotCSAqICdzdHVjayBvbiBzbXBfaW52YWxpZGF0ZV9uZWVkZWQgSVBJIHdhaXQnIG1lc3NhZ2VzLgotCSAqLwotCWlmIChjaGVja19hcGljaWRfdXNlZChhcGljX2lkX21hcCwgYXBpY19pZCkpIHsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpOyBpKyspIHsKLQkJCWlmICghY2hlY2tfYXBpY2lkX3VzZWQoYXBpY19pZF9tYXAsIGkpKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGkgPT0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKQotCQkJcGFuaWMoIk1heCBhcGljX2lkIGV4Y2VlZGVkIVxuIik7Ci0KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSU9BUElDWyVkXTogYXBpY19pZCAlZCBhbHJlYWR5IHVzZWQsICIKLQkJCSJ0cnlpbmcgJWRcbiIsIGlvYXBpYywgYXBpY19pZCwgaSk7Ci0KLQkJYXBpY19pZCA9IGk7Ci0JfQotCi0JdG1wID0gYXBpY2lkX3RvX2NwdV9wcmVzZW50KGFwaWNfaWQpOwotCXBoeXNpZHNfb3IoYXBpY19pZF9tYXAsIGFwaWNfaWRfbWFwLCB0bXApOwotCi0JaWYgKHJlZ18wMC5iaXRzLklEICE9IGFwaWNfaWQpIHsKLQkJcmVnXzAwLmJpdHMuSUQgPSBhcGljX2lkOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlpb19hcGljX3dyaXRlKGlvYXBpYywgMCwgcmVnXzAwLnJhdyk7Ci0JCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCQkvKiBTYW5pdHkgY2hlY2sgKi8KLQkJaWYgKHJlZ18wMC5iaXRzLklEICE9IGFwaWNfaWQpIHsKLQkJCXByaW50aygiSU9BUElDWyVkXTogVW5hYmxlIHRvIGNoYW5nZSBhcGljX2lkIVxuIiwgaW9hcGljKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCi0JCQkiSU9BUElDWyVkXTogQXNzaWduZWQgYXBpY19pZCAlZFxuIiwgaW9hcGljLCBhcGljX2lkKTsKLQotCXJldHVybiBhcGljX2lkOwotfQotCi0KLWludCBfX2luaXQgaW9fYXBpY19nZXRfdmVyc2lvbihpbnQgaW9hcGljKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAxCXJlZ18wMTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmVnXzAxLmJpdHMudmVyc2lvbjsKLX0KLQotCi1pbnQgX19pbml0IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaW50IGlvYXBpYykKLXsKLQl1bmlvbiBJT19BUElDX3JlZ18wMQlyZWdfMDE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJlZ18wMS5iaXRzLmVudHJpZXM7Ci19Ci0KLQotaW50IGlvX2FwaWNfc2V0X3BjaV9yb3V0aW5nKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsIGludCBlZGdlX2xldmVsLCBpbnQgYWN0aXZlX2hpZ2hfbG93KQotewotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCi0JaWYgKCFJT19BUElDX0lSUShpcnEpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSU9BUElDWyVkXTogSW52YWxpZCByZWZlcmVuY2UgdG8gSVJRIDBcbiIsCi0JCQlpb2FwaWMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIEdlbmVyYXRlIGEgUENJIElSUSByb3V0aW5nIGVudHJ5IGFuZCBwcm9ncmFtIHRoZSBJT0FQSUMgYWNjb3JkaW5nbHkuCi0JICogTm90ZSB0aGF0IHdlIG1hc2sgKGRpc2FibGUpIElSUXMgbm93IC0tIHRoZXNlIGdldCBlbmFibGVkIHdoZW4gdGhlCi0JICogY29ycmVzcG9uZGluZyBkZXZpY2UgZHJpdmVyIHJlZ2lzdGVycyBmb3IgdGhpcyBJUlEuCi0JICovCi0KLQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKLQotCWVudHJ5LmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKLQllbnRyeS5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOwotCWVudHJ5LmRlc3QubG9naWNhbC5sb2dpY2FsX2Rlc3QgPSBjcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOwotCWVudHJ5LnRyaWdnZXIgPSBlZGdlX2xldmVsOwotCWVudHJ5LnBvbGFyaXR5ID0gYWN0aXZlX2hpZ2hfbG93OwotCWVudHJ5Lm1hc2sgID0gMTsKLQotCS8qCi0JICogSVJRcyA8IDE2IGFyZSBhbHJlYWR5IGluIHRoZSBpcnFfMl9waW5bXSBtYXAKLQkgKi8KLQlpZiAoaXJxID49IDE2KQotCQlhZGRfcGluX3RvX2lycShpcnEsIGlvYXBpYywgcGluKTsKLQotCWVudHJ5LnZlY3RvciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSk7Ci0KLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCBLRVJOX0RFQlVHICJJT0FQSUNbJWRdOiBTZXQgUENJIHJvdXRpbmcgZW50cnkgIgotCQkiKCVkLSVkIC0+IDB4JXggLT4gSVJRICVkIE1vZGU6JWkgQWN0aXZlOiVpKVxuIiwgaW9hcGljLAotCQltcF9pb2FwaWNzW2lvYXBpY10ubXBfYXBpY2lkLCBwaW4sIGVudHJ5LnZlY3RvciwgaXJxLAotCQllZGdlX2xldmVsLCBhY3RpdmVfaGlnaF9sb3cpOwotCi0JaW9hcGljX3JlZ2lzdGVyX2ludHIoaXJxLCBlbnRyeS52ZWN0b3IsIGVkZ2VfbGV2ZWwpOwotCi0JaWYgKCFpb2FwaWMgJiYgKGlycSA8IDE2KSkKLQkJZGlzYWJsZV84MjU5QV9pcnEoaXJxKTsKLQotCWlvYXBpY193cml0ZV9lbnRyeShpb2FwaWMsIHBpbiwgZW50cnkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBhY3BpX2dldF9vdmVycmlkZV9pcnEoaW50IGJ1c19pcnEsIGludCAqdHJpZ2dlciwgaW50ICpwb2xhcml0eSkKLXsKLQlpbnQgaTsKLQotCWlmIChza2lwX2lvYXBpY19zZXR1cCkKLQkJcmV0dXJuIC0xOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspCi0JCWlmIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gbXBfSU5UICYmCi0JCSAgICBtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBidXNfaXJxKQotCQkJYnJlYWs7Ci0JaWYgKGkgPj0gbXBfaXJxX2VudHJpZXMpCi0JCXJldHVybiAtMTsKLQotCSp0cmlnZ2VyID0gaXJxX3RyaWdnZXIoaSk7Ci0JKnBvbGFyaXR5ID0gaXJxX3BvbGFyaXR5KGkpOwotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KLQotc3RhdGljIGludCBfX2luaXQgcGFyc2VfZGlzYWJsZV90aW1lcl9waW5fMShjaGFyICphcmcpCi17Ci0JZGlzYWJsZV90aW1lcl9waW5fMSA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiZGlzYWJsZV90aW1lcl9waW5fMSIsIHBhcnNlX2Rpc2FibGVfdGltZXJfcGluXzEpOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9lbmFibGVfdGltZXJfcGluXzEoY2hhciAqYXJnKQotewotCWRpc2FibGVfdGltZXJfcGluXzEgPSAtMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJlbmFibGVfdGltZXJfcGluXzEiLCBwYXJzZV9lbmFibGVfdGltZXJfcGluXzEpOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9ub2FwaWMoY2hhciAqYXJnKQotewotCS8qIGRpc2FibGUgSU8tQVBJQyAqLwotCWRpc2FibGVfaW9hcGljX3NldHVwKCk7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibm9hcGljIiwgcGFyc2Vfbm9hcGljKTsKLQotdm9pZCBfX2luaXQgaW9hcGljX2luaXRfbWFwcGluZ3Modm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGlvYXBpY19waHlzLCBpZHggPSBGSVhfSU9fQVBJQ19CQVNFXzA7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7Ci0JCWlmIChzbXBfZm91bmRfY29uZmlnKSB7Ci0JCQlpb2FwaWNfcGh5cyA9IG1wX2lvYXBpY3NbaV0ubXBfYXBpY2FkZHI7Ci0JCQlpZiAoIWlvYXBpY19waHlzKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJXQVJOSU5HOiBib2d1cyB6ZXJvIElPLUFQSUMgIgotCQkJCSAgICAgICAiYWRkcmVzcyBmb3VuZCBpbiBNUFRBQkxFLCAiCi0JCQkJICAgICAgICJkaXNhYmxpbmcgSU8vQVBJQyBzdXBwb3J0IVxuIik7Ci0JCQkJc21wX2ZvdW5kX2NvbmZpZyA9IDA7Ci0JCQkJc2tpcF9pb2FwaWNfc2V0dXAgPSAxOwotCQkJCWdvdG8gZmFrZV9pb2FwaWNfcGFnZTsKLQkJCX0KLQkJfSBlbHNlIHsKLWZha2VfaW9hcGljX3BhZ2U6Ci0JCQlpb2FwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKQotCQkJCSAgICAgIGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQkJCWlvYXBpY19waHlzID0gX19wYShpb2FwaWNfcGh5cyk7Ci0JCX0KLQkJc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgaW9hcGljX3BoeXMpOwotCQlwcmludGsoS0VSTl9ERUJVRyAibWFwcGVkIElPQVBJQyB0byAlMDhseCAoJTA4bHgpXG4iLAotCQkgICAgICAgX19maXhfdG9fdmlydChpZHgpLCBpb2FwaWNfcGh5cyk7Ci0JCWlkeCsrOwotCX0KLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMDYzYWUuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NzQgKzAsMCBAQAotLyoKLSAqCUludGVsIElPLUFQSUMgc3VwcG9ydCBmb3IgbXVsdGktUGVudGl1bSBob3N0cy4KLSAqCi0gKglDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIsIEhham5hbGthIFN6YWJvCi0gKgotICoJTWFueSB0aGFua3MgdG8gU3RpZyBWZW5hYXMgZm9yIHRyeWluZyBvdXQgY291bnRsZXNzIGV4cGVyaW1lbnRhbAotICoJcGF0Y2hlcyBhbmQgcmVwb3J0aW5nL2RlYnVnZ2luZyBwcm9ibGVtcyBwYXRpZW50bHkhCi0gKgotICoJKGMpIDE5OTksIE11bHRpcGxlIElPLUFQSUMgc3VwcG9ydCwgZGV2ZWxvcGVkIGJ5Ci0gKglLZW4taWNoaSBZYWt1IDx5YWt1QGNzczEua2JuZXMubmVjLmNvLmpwPiBhbmQKLSAqICAgICAgSGlkZW1pIEtpc2hpbW90byA8a2lzaW1vdG9AY3NzMS5rYm5lcy5uZWMuY28uanA+LAotICoJZnVydGhlciB0ZXN0ZWQgYW5kIGNsZWFuZWQgdXAgYnkgWmFjaCBCcm93biA8emFiQHJlZGhhdC5jb20+Ci0gKglhbmQgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKgotICoJRml4ZXMKLSAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzOwotICoJCQkJCXRoYW5rcyB0byBFcmljIEdpbG1vcmUKLSAqCQkJCQlhbmQgUm9sZiBHLiBUZXdzCi0gKgkJCQkJZm9yIHRlc3RpbmcgdGhlc2UgZXh0ZW5zaXZlbHkKLSAqCVBhdWwgRGllZmVuYmF1Z2gJOglBZGRlZCBmdWxsIEFDUEkgc3VwcG9ydAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaHRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWFyLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2lmZGVmIENPTkZJR19BQ1BJCi0jaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KLQotI2luY2x1ZGUgPGFzbS9pZGxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb3RvLmg+Ci0jaW5jbHVkZSA8YXNtL2FjcGkuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL2k4MjU5Lmg+Ci0jaW5jbHVkZSA8YXNtL25taS5oPgotI2luY2x1ZGUgPGFzbS9tc2lkZWYuaD4KLSNpbmNsdWRlIDxhc20vaHlwZXJ0cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxhc20vaXJxX3JlbWFwcGluZy5oPgotCi0jaW5jbHVkZSA8bWFjaF9pcGkuaD4KLSNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KLQotI2RlZmluZSBfX2FwaWNkZWJ1Z2luaXQodHlwZSkgc3RhdGljIHR5cGUgX19pbml0Ci0KLXN0cnVjdCBpcnFfY2ZnIHsKLQljcHVtYXNrX3QgZG9tYWluOwotCWNwdW1hc2tfdCBvbGRfZG9tYWluOwotCXVuc2lnbmVkIG1vdmVfY2xlYW51cF9jb3VudDsKLQl1OCB2ZWN0b3I7Ci0JdTggbW92ZV9pbl9wcm9ncmVzcyA6IDE7Ci19OwotCi0vKiBpcnFfY2ZnIGlzIGluZGV4ZWQgYnkgdGhlIHN1bSBvZiBhbGwgUlRFcyBpbiBhbGwgSS9PIEFQSUNzLiAqLwotc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmdbTlJfSVJRU10gX19yZWFkX21vc3RseSA9IHsKLQlbMF0gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMF9WRUNUT1IsICB9LAotCVsxXSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExX1ZFQ1RPUiwgIH0sCi0JWzJdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTJfVkVDVE9SLCAgfSwKLQlbM10gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRM19WRUNUT1IsICB9LAotCVs0XSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE0X1ZFQ1RPUiwgIH0sCi0JWzVdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTVfVkVDVE9SLCAgfSwKLQlbNl0gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRNl9WRUNUT1IsICB9LAotCVs3XSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE3X1ZFQ1RPUiwgIH0sCi0JWzhdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUThfVkVDVE9SLCAgfSwKLQlbOV0gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJROV9WRUNUT1IsICB9LAotCVsxMF0gPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExMF9WRUNUT1IsIH0sCi0JWzExXSA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTExX1ZFQ1RPUiwgfSwKLQlbMTJdID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTJfVkVDVE9SLCB9LAotCVsxM10gPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExM19WRUNUT1IsIH0sCi0JWzE0XSA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTE0X1ZFQ1RPUiwgfSwKLQlbMTVdID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTVfVkVDVE9SLCB9LAotfTsKLQotc3RhdGljIGludCBhc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBjcHVtYXNrX3QgbWFzayk7Ci0KLWludCBmaXJzdF9zeXN0ZW1fdmVjdG9yID0gMHhmZTsKLQotY2hhciBzeXN0ZW1fdmVjdG9yc1tOUl9WRUNUT1JTXSA9IHsgWzAgLi4uIE5SX1ZFQ1RPUlMtMV0gPSBTWVNfVkVDVE9SX0ZSRUV9OwotCi1pbnQgc2lzX2FwaWNfYnVnOyAvKiBub3QgYWN0dWFsbHkgc3VwcG9ydGVkLCBkdW1teSBmb3IgY29tcGlsZSAqLwotCi1zdGF0aWMgaW50IG5vX3RpbWVyX2NoZWNrOwotCi1zdGF0aWMgaW50IGRpc2FibGVfdGltZXJfcGluXzEgX19pbml0ZGF0YTsKLQotaW50IHRpbWVyX3Rocm91Z2hfODI1OSBfX2luaXRkYXRhOwotCi0vKiBXaGVyZSBpZiBhbnl3aGVyZSBpcyB0aGUgaTgyNTkgY29ubmVjdCBpbiBleHRlcm5hbCBpbnQgbW9kZSAqLwotc3RhdGljIHN0cnVjdCB7IGludCBwaW4sIGFwaWM7IH0gaW9hcGljX2k4MjU5ID0geyAtMSwgLTEgfTsKLQotc3RhdGljIERFRklORV9TUElOTE9DSyhpb2FwaWNfbG9jayk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZlY3Rvcl9sb2NrKTsKLQotLyoKLSAqICMgb2YgSVJRIHJvdXRpbmcgcmVnaXN0ZXJzCi0gKi8KLWludCBucl9pb2FwaWNfcmVnaXN0ZXJzW01BWF9JT19BUElDU107Ci0KLS8qIEkvTyBBUElDIFJURSBjb250ZW50cyBhdCB0aGUgT1MgYm9vdCB1cCAqLwotc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVhcmx5X2lvYXBpY19lbnRyaWVzW01BWF9JT19BUElDU107Ci0KLS8qIEkvTyBBUElDIGVudHJpZXMgKi8KLXN0cnVjdCBtcF9jb25maWdfaW9hcGljIG1wX2lvYXBpY3NbTUFYX0lPX0FQSUNTXTsKLWludCBucl9pb2FwaWNzOwotCi0vKiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KLXN0cnVjdCBtcF9jb25maWdfaW50c3JjIG1wX2lycXNbTUFYX0lSUV9TT1VSQ0VTXTsKLQotLyogIyBvZiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KLWludCBtcF9pcnFfZW50cmllczsKLQotREVDTEFSRV9CSVRNQVAobXBfYnVzX25vdF9wY2ksIE1BWF9NUF9CVVNTRVMpOwotCi0vKgotICogUm91Z2ggZXN0aW1hdGlvbiBvZiBob3cgbWFueSBzaGFyZWQgSVJRcyB0aGVyZSBhcmUsIGNhbgotICogYmUgY2hhbmdlZCBhbnl0aW1lLgotICovCi0jZGVmaW5lIE1BWF9QTFVTX1NIQVJFRF9JUlFTIE5SX0lSUVMKLSNkZWZpbmUgUElOX01BUF9TSVpFIChNQVhfUExVU19TSEFSRURfSVJRUyArIE5SX0lSUVMpCi0KLS8qCi0gKiBUaGlzIGlzIHBlcmZvcm1hbmNlLWNyaXRpY2FsLCB3ZSB3YW50IHRvIGRvIGl0IE8oMSkKLSAqCi0gKiB0aGUgaW5kZXhpbmcgb3JkZXIgb2YgdGhpcyBhcnJheSBmYXZvcnMgMToxIG1hcHBpbmdzCi0gKiBiZXR3ZWVuIHBpbnMgYW5kIElSUXMuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBpcnFfcGluX2xpc3QgewotCXNob3J0IGFwaWMsIHBpbiwgbmV4dDsKLX0gaXJxXzJfcGluW1BJTl9NQVBfU0laRV07Ci0KLXN0cnVjdCBpb19hcGljIHsKLQl1bnNpZ25lZCBpbnQgaW5kZXg7Ci0JdW5zaWduZWQgaW50IHVudXNlZFszXTsKLQl1bnNpZ25lZCBpbnQgZGF0YTsKLX07Ci0KLXN0YXRpYyBfX2F0dHJpYnV0ZV9jb25zdF9fIHN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWNfYmFzZShpbnQgaWR4KQotewotCXJldHVybiAodm9pZCBfX2lvbWVtICopIF9fZml4X3RvX3ZpcnQoRklYX0lPX0FQSUNfQkFTRV8wICsgaWR4KQotCQkrIChtcF9pb2FwaWNzW2lkeF0ubXBfYXBpY2FkZHIgJiB+UEFHRV9NQVNLKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fYXBpY19yZWFkKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnKQotewotCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7Ci0Jd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKLQlyZXR1cm4gcmVhZGwoJmlvX2FwaWMtPmRhdGEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY193cml0ZSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQotewotCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7Ci0Jd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKLQl3cml0ZWwodmFsdWUsICZpb19hcGljLT5kYXRhKTsKLX0KLQotLyoKLSAqIFJlLXdyaXRlIGEgdmFsdWU6IHRvIGJlIHVzZWQgZm9yIHJlYWQtbW9kaWZ5LXdyaXRlCi0gKiBjeWNsZXMgd2hlcmUgdGhlIHJlYWQgYWxyZWFkeSBzZXQgdXAgdGhlIGluZGV4IHJlZ2lzdGVyLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnkodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOwotCXdyaXRlbCh2YWx1ZSwgJmlvX2FwaWMtPmRhdGEpOwotfQotCi1zdGF0aWMgYm9vbCBpb19hcGljX2xldmVsX2Fja19wZW5kaW5nKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWVudHJ5ID0gaXJxXzJfcGluICsgaXJxOwotCWZvciAoOzspIHsKLQkJdW5zaWduZWQgaW50IHJlZzsKLQkJaW50IHBpbjsKLQotCQlwaW4gPSBlbnRyeS0+cGluOwotCQlpZiAocGluID09IC0xKQotCQkJYnJlYWs7Ci0JCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbioyKTsKLQkJLyogSXMgdGhlIHJlbW90ZSBJUlIgYml0IHNldD8gKi8KLQkJaWYgKHJlZyAmIElPX0FQSUNfUkVESVJfUkVNT1RFX0lSUikgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmICghZW50cnktPm5leHQpCi0JCQlicmVhazsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotLyoKLSAqIFN5bmNocm9uaXplIHRoZSBJTy1BUElDIGFuZCB0aGUgQ1BVIGJ5IGRvaW5nCi0gKiBhIGR1bW15IHJlYWQgZnJvbSB0aGUgSU8tQVBJQwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19zeW5jKHVuc2lnbmVkIGludCBhcGljKQotewotCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7Ci0JcmVhZGwoJmlvX2FwaWMtPmRhdGEpOwotfQotCi0jZGVmaW5lIF9fRE9fQUNUSU9OKFIsIEFDVElPTiwgRklOQUwpCQkJCQlcCi0JCQkJCQkJCQlcCi17CQkJCQkJCQkJXAotCWludCBwaW47CQkJCQkJCVwKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsJCQlcCi0JCQkJCQkJCQlcCi0JQlVHX09OKGlycSA+PSBOUl9JUlFTKTsJCQkJCQlcCi0JZm9yICg7OykgewkJCQkJCQlcCi0JCXVuc2lnbmVkIGludCByZWc7CQkJCQlcCi0JCXBpbiA9IGVudHJ5LT5waW47CQkJCQlcCi0JCWlmIChwaW4gPT0gLTEpCQkJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQlyZWcgPSBpb19hcGljX3JlYWQoZW50cnktPmFwaWMsIDB4MTAgKyBSICsgcGluKjIpOwlcCi0JCXJlZyBBQ1RJT047CQkJCQkJXAotCQlpb19hcGljX21vZGlmeShlbnRyeS0+YXBpYywgcmVnKTsJCQlcCi0JCUZJTkFMOwkJCQkJCQlcCi0JCWlmICghZW50cnktPm5leHQpCQkJCQlcCi0JCQlicmVhazsJCQkJCQlcCi0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7CQkJXAotCX0JCQkJCQkJCVwKLX0KLQotdW5pb24gZW50cnlfdW5pb24gewotCXN0cnVjdCB7IHUzMiB3MSwgdzI7IH07Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci19OwotCi1zdGF0aWMgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgaW9hcGljX3JlYWRfZW50cnkoaW50IGFwaWMsIGludCBwaW4pCi17Ci0JdW5pb24gZW50cnlfdW5pb24gZXU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlldS53MSA9IGlvX2FwaWNfcmVhZChhcGljLCAweDEwICsgMiAqIHBpbik7Ci0JZXUudzIgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMSArIDIgKiBwaW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGV1LmVudHJ5OwotfQotCi0vKgotICogV2hlbiB3ZSB3cml0ZSBhIG5ldyBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGhpZ2gKLSAqIHdvcmQgZmlyc3QhIElmIHRoZSBtYXNrIGJpdCBpbiB0aGUgbG93IHdvcmQgaXMgY2xlYXIsIHdlIHdpbGwgZW5hYmxlCi0gKiB0aGUgaW50ZXJydXB0LCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGVudHJ5IGlzIGZ1bGx5IHBvcHVsYXRlZAotICogYmVmb3JlIHRoYXQgaGFwcGVucy4KLSAqLwotc3RhdGljIHZvaWQKLV9faW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLCBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKQotewotCXVuaW9uIGVudHJ5X3VuaW9uIGV1OwotCWV1LmVudHJ5ID0gZTsKLQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyAyKnBpbiwgZXUudzIpOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9faW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIFdoZW4gd2UgbWFzayBhbiBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGxvdwotICogd29yZCBmaXJzdCwgaW4gb3JkZXIgdG8gc2V0IHRoZSBtYXNrIGJpdCBiZWZvcmUgd2UgY2hhbmdlIHRoZQotICogaGlnaCBiaXRzIQotICovCi1zdGF0aWMgdm9pZCBpb2FwaWNfbWFza19lbnRyeShpbnQgYXBpYywgaW50IHBpbikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuaW9uIGVudHJ5X3VuaW9uIGV1ID0geyAuZW50cnkubWFzayA9IDEgfTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDExICsgMipwaW4sIGV1LncyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotfQotCi0jaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIHZvaWQgX190YXJnZXRfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGRlc3QsIHU4IHZlY3RvcikKLXsKLQlpbnQgYXBpYywgcGluOwotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5ID0gaXJxXzJfcGluICsgaXJxOwotCi0JQlVHX09OKGlycSA+PSBOUl9JUlFTKTsKLQlmb3IgKDs7KSB7Ci0JCXVuc2lnbmVkIGludCByZWc7Ci0JCWFwaWMgPSBlbnRyeS0+YXBpYzsKLQkJcGluID0gZW50cnktPnBpbjsKLQkJaWYgKHBpbiA9PSAtMSkKLQkJCWJyZWFrOwotCQkvKgotCQkgKiBXaXRoIGludGVycnVwdC1yZW1hcHBpbmcsIGRlc3RpbmF0aW9uIGluZm9ybWF0aW9uIGNvbWVzCi0JCSAqIGZyb20gaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBlbnRyeS4KLQkJICovCi0JCWlmICghaXJxX3JlbWFwcGVkKGlycSkpCi0JCQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyBwaW4qMiwgZGVzdCk7Ci0JCXJlZyA9IGlvX2FwaWNfcmVhZChhcGljLCAweDEwICsgcGluKjIpOwotCQlyZWcgJj0gfklPX0FQSUNfUkVESVJfVkVDVE9SX01BU0s7Ci0JCXJlZyB8PSB2ZWN0b3I7Ci0JCWlvX2FwaWNfbW9kaWZ5KGFwaWMsIHJlZyk7Ci0JCWlmICghZW50cnktPm5leHQpCi0JCQlicmVhazsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9pb2FwaWNfYWZmaW5pdHlfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0JY3B1bWFza190IHRtcDsKLQotCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXJldHVybjsKLQotCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQotCQlyZXR1cm47Ci0KLQljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKLQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7Ci0KLQkvKgotCSAqIE9ubHkgdGhlIGhpZ2ggOCBiaXRzIGFyZSB2YWxpZC4KLQkgKi8KLQlkZXN0ID0gU0VUX0FQSUNfTE9HSUNBTF9JRChkZXN0KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9fdGFyZ2V0X0lPX0FQSUNfaXJxKGlycSwgZGVzdCwgY2ZnLT52ZWN0b3IpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIFRoZSBjb21tb24gY2FzZSBpcyAxOjEgSVJRPC0+cGluIG1hcHBpbmdzLiBTb21ldGltZXMgdGhlcmUgYXJlCi0gKiBzaGFyZWQgSVNBLXNwYWNlIElSUXMsIHNvIHdlIGhhdmUgdG8gc3VwcG9ydCB0aGVtLiBXZSBhcmUgc3VwZXIKLSAqIGZhc3QgaW4gdGhlIGNvbW1vbiBjYXNlLCBhbmQgZmFzdCBmb3Igc2hhcmVkIElTQS1zcGFjZSBJUlFzLgotICovCi1zdGF0aWMgdm9pZCBhZGRfcGluX3RvX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgYXBpYywgaW50IHBpbikKLXsKLQlzdGF0aWMgaW50IGZpcnN0X2ZyZWVfZW50cnkgPSBOUl9JUlFTOwotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5ID0gaXJxXzJfcGluICsgaXJxOwotCi0JQlVHX09OKGlycSA+PSBOUl9JUlFTKTsKLQl3aGlsZSAoZW50cnktPm5leHQpCi0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0KLQlpZiAoZW50cnktPnBpbiAhPSAtMSkgewotCQllbnRyeS0+bmV4dCA9IGZpcnN0X2ZyZWVfZW50cnk7Ci0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0JCWlmICgrK2ZpcnN0X2ZyZWVfZW50cnkgPj0gUElOX01BUF9TSVpFKQotCQkJcGFuaWMoImlvX2FwaWMuYzogcmFuIG91dCBvZiBpcnFfMl9waW4gZW50cmllcyEiKTsKLQl9Ci0JZW50cnktPmFwaWMgPSBhcGljOwotCWVudHJ5LT5waW4gPSBwaW47Ci19Ci0KLS8qCi0gKiBSZXJvdXRlIGFuIElSUSB0byBhIGRpZmZlcmVudCBwaW4uCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCByZXBsYWNlX3Bpbl9hdF9pcnEodW5zaWduZWQgaW50IGlycSwKLQkJCQkgICAgICBpbnQgb2xkYXBpYywgaW50IG9sZHBpbiwKLQkJCQkgICAgICBpbnQgbmV3YXBpYywgaW50IG5ld3BpbikKLXsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsKLQotCXdoaWxlICgxKSB7Ci0JCWlmIChlbnRyeS0+YXBpYyA9PSBvbGRhcGljICYmIGVudHJ5LT5waW4gPT0gb2xkcGluKSB7Ci0JCQllbnRyeS0+YXBpYyA9IG5ld2FwaWM7Ci0JCQllbnRyeS0+cGluID0gbmV3cGluOwotCQl9Ci0JCWlmICghZW50cnktPm5leHQpCi0JCQlicmVhazsKLQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQl9Ci19Ci0KLQotI2RlZmluZSBET19BQ1RJT04obmFtZSxSLEFDVElPTiwgRklOQUwpCQkJCQlcCi0JCQkJCQkJCQlcCi0Jc3RhdGljIHZvaWQgbmFtZSMjX0lPX0FQSUNfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQkJXAotCV9fRE9fQUNUSU9OKFIsIEFDVElPTiwgRklOQUwpCi0KLS8qIG1hc2sgPSAxICovCi1ET19BQ1RJT04oX19tYXNrLAkwLCB8PSBJT19BUElDX1JFRElSX01BU0tFRCwgaW9fYXBpY19zeW5jKGVudHJ5LT5hcGljKSkKLQotLyogbWFzayA9IDAgKi8KLURPX0FDVElPTihfX3VubWFzaywJMCwgJj0gfklPX0FQSUNfUkVESVJfTUFTS0VELCApCi0KLXN0YXRpYyB2b2lkIG1hc2tfSU9fQVBJQ19pcnEgKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9fbWFza19JT19BUElDX2lycShpcnEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubWFza19JT19BUElDX2lycSAodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JX191bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhcl9JT19BUElDX3Bpbih1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHBpbikKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCS8qIENoZWNrIGRlbGl2ZXJ5X21vZGUgdG8gYmUgc3VyZSB3ZSdyZSBub3QgY2xlYXJpbmcgYW4gU01JIHBpbiAqLwotCWVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKLQlpZiAoZW50cnkuZGVsaXZlcnlfbW9kZSA9PSBkZXN0X1NNSSkKLQkJcmV0dXJuOwotCS8qCi0JICogRGlzYWJsZSBpdCBpbiB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKLQkgKi8KLQlpb2FwaWNfbWFza19lbnRyeShhcGljLCBwaW4pOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhcl9JT19BUElDICh2b2lkKQotewotCWludCBhcGljLCBwaW47Ci0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKQotCQkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKLX0KLQotLyoKLSAqIFNhdmVzIGFuZCBtYXNrcyBhbGwgdGhlIHVubWFza2VkIElPLUFQSUMgUlRFJ3MKLSAqLwotaW50IHNhdmVfbWFza19JT19BUElDX3NldHVwKHZvaWQpCi17Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDEgcmVnXzAxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGFwaWMsIHBpbjsKLQotCS8qCi0JICogVGhlIG51bWJlciBvZiBJTy1BUElDIElSUSByZWdpc3RlcnMgKD09ICNwaW5zKToKLQkgKi8KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdID0gcmVnXzAxLmJpdHMuZW50cmllcysxOwotCX0KLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10gPQotCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkpICoKLQkJCQlucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFlYXJseV9pb2FwaWNfZW50cmllc1thcGljXSkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCi0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKLQkJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCi0JCQllbnRyeSA9IGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdW3Bpbl0gPQotCQkJCWlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7Ci0JCQlpZiAoIWVudHJ5Lm1hc2spIHsKLQkJCQllbnRyeS5tYXNrID0gMTsKLQkJCQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7Ci0JCQl9Ci0JCX0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByZXN0b3JlX0lPX0FQSUNfc2V0dXAodm9pZCkKLXsKLQlpbnQgYXBpYywgcGluOwotCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykKLQkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykKLQkJCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sCi0JCQkJCSAgIGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdW3Bpbl0pOwotfQotCi12b2lkIHJlaW5pdF9pbnRyX3JlbWFwcGVkX0lPX0FQSUMoaW50IGludHJfcmVtYXBwaW5nKQotewotCS8qCi0JICogZm9yIG5vdyBwbGFpbiByZXN0b3JlIG9mIHByZXZpb3VzIHNldHRpbmdzLgotCSAqIFRCRDogSW4gdGhlIGNhc2Ugb2YgT1MgZW5hYmxpbmcgaW50ZXJydXB0LXJlbWFwcGluZywKLQkgKiBJTy1BUElDIFJURSdzIG5lZWQgdG8gYmUgc2V0dXAgdG8gcG9pbnQgdG8gaW50ZXJydXB0LXJlbWFwcGluZwotCSAqIHRhYmxlIGVudHJpZXMuIGZvciBub3csIGRvIGEgcGxhaW4gcmVzdG9yZSwgYW5kIHdhaXQgZm9yCi0JICogdGhlIHNldHVwX0lPX0FQSUNfaXJxcygpIHRvIGRvIHByb3BlciBpbml0aWFsaXphdGlvbi4KLQkgKi8KLQlyZXN0b3JlX0lPX0FQSUNfc2V0dXAoKTsKLX0KLQotaW50IHNraXBfaW9hcGljX3NldHVwOwotaW50IGlvYXBpY19mb3JjZTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyc2Vfbm9hcGljKGNoYXIgKnN0cikKLXsKLQlkaXNhYmxlX2lvYXBpY19zZXR1cCgpOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5vYXBpYyIsIHBhcnNlX25vYXBpYyk7Ci0KLS8qIEFjdHVhbGx5IHRoZSBuZXh0IGlzIG9ic29sZXRlLCBidXQga2VlcCBpdCBmb3IgcGFyYW5vaWQgcmVhc29ucyAtQUsgKi8KLXN0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfdGltZXJfcGluX3NldHVwKGNoYXIgKmFyZykKLXsKLQlkaXNhYmxlX3RpbWVyX3Bpbl8xID0gMTsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoImRpc2FibGVfdGltZXJfcGluXzEiLCBkaXNhYmxlX3RpbWVyX3Bpbl9zZXR1cCk7Ci0KLQotLyoKLSAqIEZpbmQgdGhlIElSUSBlbnRyeSBudW1iZXIgb2YgYSBjZXJ0YWluIHBpbi4KLSAqLwotc3RhdGljIGludCBmaW5kX2lycV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgaW50IHR5cGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKLQkJaWYgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSB0eXBlICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9kc3RhcGljID09IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkIHx8Ci0JCSAgICAgbXBfaXJxc1tpXS5tcF9kc3RhcGljID09IE1QX0FQSUNfQUxMKSAmJgotCQkgICAgbXBfaXJxc1tpXS5tcF9kc3RpcnEgPT0gcGluKQotCQkJcmV0dXJuIGk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiBGaW5kIHRoZSBwaW4gdG8gd2hpY2ggSVJRW2lycV0gKElTQSkgaXMgY29ubmVjdGVkCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGZpbmRfaXNhX2lycV9waW4oaW50IGlycSwgaW50IHR5cGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgewotCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOwotCi0JCWlmICh0ZXN0X2JpdChsYnVzLCBtcF9idXNfbm90X3BjaSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBpcnEpKQotCi0JCQlyZXR1cm4gbXBfaXJxc1tpXS5tcF9kc3RpcnE7Ci0JfQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZmluZF9pc2FfaXJxX2FwaWMoaW50IGlycSwgaW50IHR5cGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgewotCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOwotCi0JCWlmICh0ZXN0X2JpdChsYnVzLCBtcF9idXNfbm90X3BjaSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBpcnEpKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpIDwgbXBfaXJxX2VudHJpZXMpIHsKLQkJaW50IGFwaWM7Ci0JCWZvcihhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID09IG1wX2lycXNbaV0ubXBfZHN0YXBpYykKLQkJCQlyZXR1cm4gYXBpYzsKLQkJfQotCX0KLQotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIEZpbmQgYSBzcGVjaWZpYyBQQ0kgSVJRIGVudHJ5LgotICogTm90IGFuIF9faW5pdCwgcG9zc2libHkgbmVlZGVkIGJ5IG1vZHVsZXMKLSAqLwotc3RhdGljIGludCBwaW5fMl9pcnEoaW50IGlkeCwgaW50IGFwaWMsIGludCBwaW4pOwotCi1pbnQgSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IHNsb3QsIGludCBwaW4pCi17Ci0JaW50IGFwaWMsIGksIGJlc3RfZ3Vlc3MgPSAtMTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJxdWVyeWluZyBQQ0kgLT4gSVJRIG1hcHBpbmcgYnVzOiVkLCBzbG90OiVkLCBwaW46JWQuXG4iLAotCQlidXMsIHNsb3QsIHBpbik7Ci0JaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlBDSSBCSU9TIHBhc3NlZCBub25leGlzdGVudCBQQ0kgYnVzICVkIVxuIiwgYnVzKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgewotCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOwotCi0JCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCi0JCQlpZiAobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPT0gbXBfaXJxc1tpXS5tcF9kc3RhcGljIHx8Ci0JCQkgICAgbXBfaXJxc1tpXS5tcF9kc3RhcGljID09IE1QX0FQSUNfQUxMKQotCQkJCWJyZWFrOwotCi0JCWlmICghdGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCi0JCSAgICAhbXBfaXJxc1tpXS5tcF9pcnF0eXBlICYmCi0JCSAgICAoYnVzID09IGxidXMpICYmCi0JCSAgICAoc2xvdCA9PSAoKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID4+IDIpICYgMHgxZikpKSB7Ci0JCQlpbnQgaXJxID0gcGluXzJfaXJxKGksYXBpYyxtcF9pcnFzW2ldLm1wX2RzdGlycSk7Ci0KLQkJCWlmICghKGFwaWMgfHwgSU9fQVBJQ19JUlEoaXJxKSkpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChwaW4gPT0gKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxICYgMykpCi0JCQkJcmV0dXJuIGlycTsKLQkJCS8qCi0JCQkgKiBVc2UgdGhlIGZpcnN0IGFsbC1idXQtcGluIG1hdGNoaW5nIGVudHJ5IGFzIGEKLQkJCSAqIGJlc3QtZ3Vlc3MgZnV6enkgcmVzdWx0IGZvciBicm9rZW4gbXB0YWJsZXMuCi0JCQkgKi8KLQkJCWlmIChiZXN0X2d1ZXNzIDwgMCkKLQkJCQliZXN0X2d1ZXNzID0gaXJxOwotCQl9Ci0JfQotCUJVR19PTihiZXN0X2d1ZXNzID49IE5SX0lSUVMpOwotCXJldHVybiBiZXN0X2d1ZXNzOwotfQotCi0vKiBJU0EgaW50ZXJydXB0cyBhcmUgYWx3YXlzIHBvbGFyaXR5IHplcm8gZWRnZSB0cmlnZ2VyZWQsCi0gKiB3aGVuIGxpc3RlZCBhcyBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZS4gKi8KLQotI2RlZmluZSBkZWZhdWx0X0lTQV90cmlnZ2VyKGlkeCkJKDApCi0jZGVmaW5lIGRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCkJKDApCi0KLS8qIFBDSSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgb25lIGxldmVsIHRyaWdnZXJlZCwKLSAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLwotCi0jZGVmaW5lIGRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KQkoMSkKLSNkZWZpbmUgZGVmYXVsdF9QQ0lfcG9sYXJpdHkoaWR4KQkoMSkKLQotc3RhdGljIGludCBNUEJJT1NfcG9sYXJpdHkoaW50IGlkeCkKLXsKLQlpbnQgYnVzID0gbXBfaXJxc1tpZHhdLm1wX3NyY2J1czsKLQlpbnQgcG9sYXJpdHk7Ci0KLQkvKgotCSAqIERldGVybWluZSBJUlEgbGluZSBwb2xhcml0eSAoaGlnaCBhY3RpdmUgb3IgbG93IGFjdGl2ZSk6Ci0JICovCi0Jc3dpdGNoIChtcF9pcnFzW2lkeF0ubXBfaXJxZmxhZyAmIDMpCi0JewotCQljYXNlIDA6IC8qIGNvbmZvcm1zLCBpZS4gYnVzLXR5cGUgZGVwZW5kZW50IHBvbGFyaXR5ICovCi0JCQlpZiAodGVzdF9iaXQoYnVzLCBtcF9idXNfbm90X3BjaSkpCi0JCQkJcG9sYXJpdHkgPSBkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpOwotCQkJZWxzZQotCQkJCXBvbGFyaXR5ID0gZGVmYXVsdF9QQ0lfcG9sYXJpdHkoaWR4KTsKLQkJCWJyZWFrOwotCQljYXNlIDE6IC8qIGhpZ2ggYWN0aXZlICovCi0JCXsKLQkJCXBvbGFyaXR5ID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgMjogLyogcmVzZXJ2ZWQgKi8KLQkJewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCQlwb2xhcml0eSA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIDM6IC8qIGxvdyBhY3RpdmUgKi8KLQkJewotCQkJcG9sYXJpdHkgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGVmYXVsdDogLyogaW52YWxpZCAqLwotCQl7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKLQkJCXBvbGFyaXR5ID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiBwb2xhcml0eTsKLX0KLQotc3RhdGljIGludCBNUEJJT1NfdHJpZ2dlcihpbnQgaWR4KQotewotCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzOwotCWludCB0cmlnZ2VyOwotCi0JLyoKLQkgKiBEZXRlcm1pbmUgSVJRIHRyaWdnZXIgbW9kZSAoZWRnZSBvciBsZXZlbCBzZW5zaXRpdmUpOgotCSAqLwotCXN3aXRjaCAoKG1wX2lycXNbaWR4XS5tcF9pcnFmbGFnPj4yKSAmIDMpCi0JewotCQljYXNlIDA6IC8qIGNvbmZvcm1zLCBpZS4gYnVzLXR5cGUgZGVwZW5kZW50ICovCi0JCQlpZiAodGVzdF9iaXQoYnVzLCBtcF9idXNfbm90X3BjaSkpCi0JCQkJdHJpZ2dlciA9IGRlZmF1bHRfSVNBX3RyaWdnZXIoaWR4KTsKLQkJCWVsc2UKLQkJCQl0cmlnZ2VyID0gZGVmYXVsdF9QQ0lfdHJpZ2dlcihpZHgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTogLyogZWRnZSAqLwotCQl7Ci0JCQl0cmlnZ2VyID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgMjogLyogcmVzZXJ2ZWQgKi8KLQkJewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCQl0cmlnZ2VyID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgMzogLyogbGV2ZWwgKi8KLQkJewotCQkJdHJpZ2dlciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQlkZWZhdWx0OiAvKiBpbnZhbGlkICovCi0JCXsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOwotCQkJdHJpZ2dlciA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gdHJpZ2dlcjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3BvbGFyaXR5KGludCBpZHgpCi17Ci0JcmV0dXJuIE1QQklPU19wb2xhcml0eShpZHgpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdHJpZ2dlcihpbnQgaWR4KQotewotCXJldHVybiBNUEJJT1NfdHJpZ2dlcihpZHgpOwotfQotCi1zdGF0aWMgaW50IHBpbl8yX2lycShpbnQgaWR4LCBpbnQgYXBpYywgaW50IHBpbikKLXsKLQlpbnQgaXJxLCBpOwotCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzOwotCi0JLyoKLQkgKiBEZWJ1Z2dpbmcgY2hlY2ssIHdlIGFyZSBpbiBiaWcgdHJvdWJsZSBpZiB0aGlzIG1lc3NhZ2UgcG9wcyB1cCEKLQkgKi8KLQlpZiAobXBfaXJxc1tpZHhdLm1wX2RzdGlycSAhPSBwaW4pCi0JCXByaW50ayhLRVJOX0VSUiAiYnJva2VuIEJJT1Mgb3IgTVBUQUJMRSBwYXJzZXIsIGF5aWVlISFcbiIpOwotCi0JaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKSB7Ci0JCWlycSA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXNpcnE7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogUENJIElSUXMgYXJlIG1hcHBlZCBpbiBvcmRlcgotCQkgKi8KLQkJaSA9IGlycSA9IDA7Ci0JCXdoaWxlIChpIDwgYXBpYykKLQkJCWlycSArPSBucl9pb2FwaWNfcmVnaXN0ZXJzW2krK107Ci0JCWlycSArPSBwaW47Ci0JfQotCUJVR19PTihpcnEgPj0gTlJfSVJRUyk7Ci0JcmV0dXJuIGlycTsKLX0KLQotdm9pZCBsb2NrX3ZlY3Rvcl9sb2NrKHZvaWQpCi17Ci0JLyogVXNlZCB0byB0aGUgb25saW5lIHNldCBvZiBjcHVzIGRvZXMgbm90IGNoYW5nZQotCSAqIGR1cmluZyBhc3NpZ25faXJxX3ZlY3Rvci4KLQkgKi8KLQlzcGluX2xvY2soJnZlY3Rvcl9sb2NrKTsKLX0KLQotdm9pZCB1bmxvY2tfdmVjdG9yX2xvY2sodm9pZCkKLXsKLQlzcGluX3VubG9jaygmdmVjdG9yX2xvY2spOwotfQotCi1zdGF0aWMgaW50IF9fYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci0JLyoKLQkgKiBOT1RFISBUaGUgbG9jYWwgQVBJQyBpc24ndCB2ZXJ5IGdvb2QgYXQgaGFuZGxpbmcKLQkgKiBtdWx0aXBsZSBpbnRlcnJ1cHRzIGF0IHRoZSBzYW1lIGludGVycnVwdCBsZXZlbC4KLQkgKiBBcyB0aGUgaW50ZXJydXB0IGxldmVsIGlzIGRldGVybWluZWQgYnkgdGFraW5nIHRoZQotCSAqIHZlY3RvciBudW1iZXIgYW5kIHNoaWZ0aW5nIHRoYXQgcmlnaHQgYnkgNCwgd2UKLQkgKiB3YW50IHRvIHNwcmVhZCB0aGVzZSBvdXQgYSBiaXQgc28gdGhhdCB0aGV5IGRvbid0Ci0JICogYWxsIGZhbGwgaW4gdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgotCSAqCi0JICogQWxzbywgd2UndmUgZ290IHRvIGJlIGNhcmVmdWwgbm90IHRvIHRyYXNoIGdhdGUKLQkgKiAweDgwLCBiZWNhdXNlIGludCAweDgwIGlzIGhtLCBraW5kIG9mIGltcG9ydGFudGlzaC4gOykKLQkgKi8KLQlzdGF0aWMgaW50IGN1cnJlbnRfdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiwgY3VycmVudF9vZmZzZXQgPSAwOwotCXVuc2lnbmVkIGludCBvbGRfdmVjdG9yOwotCWludCBjcHU7Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKLQotCUJVR19PTigodW5zaWduZWQpaXJxID49IE5SX0lSUVMpOwotCWNmZyA9ICZpcnFfY2ZnW2lycV07Ci0KLQkvKiBPbmx5IHRyeSBhbmQgYWxsb2NhdGUgaXJxcyBvbiBjcHVzIHRoYXQgYXJlIHByZXNlbnQgKi8KLQljcHVzX2FuZChtYXNrLCBtYXNrLCBjcHVfb25saW5lX21hcCk7Ci0KLQlpZiAoKGNmZy0+bW92ZV9pbl9wcm9ncmVzcykgfHwgY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlvbGRfdmVjdG9yID0gY2ZnLT52ZWN0b3I7Ci0JaWYgKG9sZF92ZWN0b3IpIHsKLQkJY3B1bWFza190IHRtcDsKLQkJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7Ci0JCWlmICghY3B1c19lbXB0eSh0bXApKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0JZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCBtYXNrKSB7Ci0JCWNwdW1hc2tfdCBkb21haW4sIG5ld19tYXNrOwotCQlpbnQgbmV3X2NwdTsKLQkJaW50IHZlY3Rvciwgb2Zmc2V0OwotCi0JCWRvbWFpbiA9IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihjcHUpOwotCQljcHVzX2FuZChuZXdfbWFzaywgZG9tYWluLCBjcHVfb25saW5lX21hcCk7Ci0KLQkJdmVjdG9yID0gY3VycmVudF92ZWN0b3I7Ci0JCW9mZnNldCA9IGN1cnJlbnRfb2Zmc2V0OwotbmV4dDoKLQkJdmVjdG9yICs9IDg7Ci0JCWlmICh2ZWN0b3IgPj0gZmlyc3Rfc3lzdGVtX3ZlY3RvcikgewotCQkJLyogSWYgd2UgcnVuIG91dCBvZiB2ZWN0b3JzIG9uIGxhcmdlIGJveGVuLCBtdXN0IHNoYXJlIHRoZW0uICovCi0JCQlvZmZzZXQgPSAob2Zmc2V0ICsgMSkgJSA4OwotCQkJdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiArIG9mZnNldDsKLQkJfQotCQlpZiAodW5saWtlbHkoY3VycmVudF92ZWN0b3IgPT0gdmVjdG9yKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAodmVjdG9yID09IElBMzJfU1lTQ0FMTF9WRUNUT1IpCi0JCQlnb3RvIG5leHQ7Ci0JCWZvcl9lYWNoX2NwdV9tYXNrX25yKG5ld19jcHUsIG5ld19tYXNrKQotCQkJaWYgKHBlcl9jcHUodmVjdG9yX2lycSwgbmV3X2NwdSlbdmVjdG9yXSAhPSAtMSkKLQkJCQlnb3RvIG5leHQ7Ci0JCS8qIEZvdW5kIG9uZSEgKi8KLQkJY3VycmVudF92ZWN0b3IgPSB2ZWN0b3I7Ci0JCWN1cnJlbnRfb2Zmc2V0ID0gb2Zmc2V0OwotCQlpZiAob2xkX3ZlY3RvcikgewotCQkJY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMTsKLQkJCWNmZy0+b2xkX2RvbWFpbiA9IGNmZy0+ZG9tYWluOwotCQl9Ci0JCWZvcl9lYWNoX2NwdV9tYXNrX25yKG5ld19jcHUsIG5ld19tYXNrKQotCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBuZXdfY3B1KVt2ZWN0b3JdID0gaXJxOwotCQljZmctPnZlY3RvciA9IHZlY3RvcjsKLQkJY2ZnLT5kb21haW4gPSBkb21haW47Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gLUVOT1NQQzsKLX0KLQotc3RhdGljIGludCBhc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQllcnIgPSBfX2Fzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2NsZWFyX2lycV92ZWN0b3IoaW50IGlycSkKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwotCWNwdW1hc2tfdCBtYXNrOwotCWludCBjcHUsIHZlY3RvcjsKLQotCUJVR19PTigodW5zaWduZWQpaXJxID49IE5SX0lSUVMpOwotCWNmZyA9ICZpcnFfY2ZnW2lycV07Ci0JQlVHX09OKCFjZmctPnZlY3Rvcik7Ci0KLQl2ZWN0b3IgPSBjZmctPnZlY3RvcjsKLQljcHVzX2FuZChtYXNrLCBjZmctPmRvbWFpbiwgY3B1X29ubGluZV9tYXApOwotCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgbWFzaykKLQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSAtMTsKLQotCWNmZy0+dmVjdG9yID0gMDsKLQljcHVzX2NsZWFyKGNmZy0+ZG9tYWluKTsKLX0KLQotdm9pZCBfX3NldHVwX3ZlY3Rvcl9pcnEoaW50IGNwdSkKLXsKLQkvKiBJbml0aWFsaXplIHZlY3Rvcl9pcnEgb24gYSBuZXcgY3B1ICovCi0JLyogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHZlY3Rvcl9sb2NrIGhlbGQgKi8KLQlpbnQgaXJxLCB2ZWN0b3I7Ci0KLQkvKiBNYXJrIHRoZSBpbnVzZSB2ZWN0b3JzICovCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyArK2lycSkgewotCQlpZiAoIWNwdV9pc3NldChjcHUsIGlycV9jZmdbaXJxXS5kb21haW4pKQotCQkJY29udGludWU7Ci0JCXZlY3RvciA9IGlycV9jZmdbaXJxXS52ZWN0b3I7Ci0JCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdID0gaXJxOwotCX0KLQkvKiBNYXJrIHRoZSBmcmVlIHZlY3RvcnMgKi8KLQlmb3IgKHZlY3RvciA9IDA7IHZlY3RvciA8IE5SX1ZFQ1RPUlM7ICsrdmVjdG9yKSB7Ci0JCWlycSA9IHBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdOwotCQlpZiAoaXJxIDwgMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIWNwdV9pc3NldChjcHUsIGlycV9jZmdbaXJxXS5kb21haW4pKQotCQkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSAtMTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9hcGljX2NoaXA7Ci0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXJfaW9hcGljX2NoaXA7Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgaW9hcGljX3JlZ2lzdGVyX2ludHIoaW50IGlycSwgdW5zaWduZWQgbG9uZyB0cmlnZ2VyKQotewotCWlmICh0cmlnZ2VyKQotCQlpcnFfZGVzY1tpcnFdLnN0YXR1cyB8PSBJUlFfTEVWRUw7Ci0JZWxzZQotCQlpcnFfZGVzY1tpcnFdLnN0YXR1cyAmPSB+SVJRX0xFVkVMOwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKLQkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgfD0gSVJRX01PVkVfUENOVFhUOwotCQlpZiAodHJpZ2dlcikKLQkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlyX2lvYXBpY19jaGlwLAotCQkJCQkJICAgICAgaGFuZGxlX2Zhc3Rlb2lfaXJxLAotCQkJCQkJICAgICAiZmFzdGVvaSIpOwotCQllbHNlCi0JCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpcl9pb2FwaWNfY2hpcCwKLQkJCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCWlmICh0cmlnZ2VyKQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKLQkJCQkJICAgICAgaGFuZGxlX2Zhc3Rlb2lfaXJxLAotCQkJCQkgICAgICAiZmFzdGVvaSIpOwotCWVsc2UKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaW9hcGljX2NoaXAsCi0JCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLX0KLQotc3RhdGljIGludCBzZXR1cF9pb2FwaWNfZW50cnkoaW50IGFwaWMsIGludCBpcnEsCi0JCQkgICAgICBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnksCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb24sIGludCB0cmlnZ2VyLAotCQkJICAgICAgaW50IHBvbGFyaXR5LCBpbnQgdmVjdG9yKQotewotCS8qCi0JICogYWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgotCSAqLwotCW1lbXNldChlbnRyeSwwLHNpemVvZigqZW50cnkpKTsKLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpIHsKLQkJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IG1hcF9pb2FwaWNfdG9faXIoYXBpYyk7Ci0JCXN0cnVjdCBpcnRlIGlydGU7Ci0JCXN0cnVjdCBJUl9JT19BUElDX3JvdXRlX2VudHJ5ICppcl9lbnRyeSA9Ci0JCQkoc3RydWN0IElSX0lPX0FQSUNfcm91dGVfZW50cnkgKikgZW50cnk7Ci0JCWludCBpbmRleDsKLQotCQlpZiAoIWlvbW11KQotCQkJcGFuaWMoIk5vIG1hcHBpbmcgaW9tbXUgZm9yIGlvYXBpYyAlZFxuIiwgYXBpYyk7Ci0KLQkJaW5kZXggPSBhbGxvY19pcnRlKGlvbW11LCBpcnEsIDEpOwotCQlpZiAoaW5kZXggPCAwKQotCQkJcGFuaWMoIkZhaWxlZCB0byBhbGxvY2F0ZSBJUlRFIGZvciBpb2FwaWMgJWRcbiIsIGFwaWMpOwotCi0JCW1lbXNldCgmaXJ0ZSwgMCwgc2l6ZW9mKGlydGUpKTsKLQotCQlpcnRlLnByZXNlbnQgPSAxOwotCQlpcnRlLmRzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKLQkJaXJ0ZS50cmlnZ2VyX21vZGUgPSB0cmlnZ2VyOwotCQlpcnRlLmRsdnJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKLQkJaXJ0ZS52ZWN0b3IgPSB2ZWN0b3I7Ci0JCWlydGUuZGVzdF9pZCA9IElSVEVfREVTVChkZXN0aW5hdGlvbik7Ci0KLQkJbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7Ci0KLQkJaXJfZW50cnktPmluZGV4MiA9IChpbmRleCA+PiAxNSkgJiAweDE7Ci0JCWlyX2VudHJ5LT56ZXJvID0gMDsKLQkJaXJfZW50cnktPmZvcm1hdCA9IDE7Ci0JCWlyX2VudHJ5LT5pbmRleCA9IChpbmRleCAmIDB4N2ZmZik7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7Ci0JCWVudHJ5LT5kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7Ci0JCWVudHJ5LT5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOwotCQllbnRyeS0+ZGVzdCA9IGRlc3RpbmF0aW9uOwotCX0KLQotCWVudHJ5LT5tYXNrID0gMDsJCQkJLyogZW5hYmxlIElSUSAqLwotCWVudHJ5LT50cmlnZ2VyID0gdHJpZ2dlcjsKLQllbnRyeS0+cG9sYXJpdHkgPSBwb2xhcml0eTsKLQllbnRyeS0+dmVjdG9yID0gdmVjdG9yOwotCi0JLyogTWFzayBsZXZlbCB0cmlnZ2VyZWQgaXJxcy4KLQkgKiBVc2UgSVJRX0RFTEFZRURfRElTQUJMRSBmb3IgZWRnZSB0cmlnZ2VyZWQgaXJxcy4KLQkgKi8KLQlpZiAodHJpZ2dlcikKLQkJZW50cnktPm1hc2sgPSAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzZXR1cF9JT19BUElDX2lycShpbnQgYXBpYywgaW50IHBpbiwgdW5zaWduZWQgaW50IGlycSwKLQkJCSAgICAgIGludCB0cmlnZ2VyLCBpbnQgcG9sYXJpdHkpCi17Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcgKyBpcnE7Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0JY3B1bWFza190IG1hc2s7Ci0KLQlpZiAoIUlPX0FQSUNfSVJRKGlycSkpCi0JCXJldHVybjsKLQotCW1hc2sgPSBUQVJHRVRfQ1BVUzsKLQlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKLQkJcmV0dXJuOwotCi0JY3B1c19hbmQobWFzaywgY2ZnLT5kb21haW4sIG1hc2spOwotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLEtFUk5fREVCVUcKLQkJICAgICJJT0FQSUNbJWRdOiBTZXQgcm91dGluZyBlbnRyeSAoJWQtJWQgLT4gMHgleCAtPiAiCi0JCSAgICAiSVJRICVkIE1vZGU6JWkgQWN0aXZlOiVpKVxuIiwKLQkJICAgIGFwaWMsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBwaW4sIGNmZy0+dmVjdG9yLAotCQkgICAgaXJxLCB0cmlnZ2VyLCBwb2xhcml0eSk7Ci0KLQotCWlmIChzZXR1cF9pb2FwaWNfZW50cnkobXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQsIGlycSwgJmVudHJ5LAotCQkJICAgICAgIGNwdV9tYXNrX3RvX2FwaWNpZChtYXNrKSwgdHJpZ2dlciwgcG9sYXJpdHksCi0JCQkgICAgICAgY2ZnLT52ZWN0b3IpKSB7Ci0JCXByaW50aygiRmFpbGVkIHRvIHNldHVwIGlvYXBpYyBlbnRyeSBmb3IgaW9hcGljICAlZCwgcGluICVkXG4iLAotCQkgICAgICAgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQsIHBpbik7Ci0JCV9fY2xlYXJfaXJxX3ZlY3RvcihpcnEpOwotCQlyZXR1cm47Ci0JfQotCi0JaW9hcGljX3JlZ2lzdGVyX2ludHIoaXJxLCB0cmlnZ2VyKTsKLQlpZiAoaXJxIDwgMTYpCi0JCWRpc2FibGVfODI1OUFfaXJxKGlycSk7Ci0KLQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9JT19BUElDX2lycXModm9pZCkKLXsKLQlpbnQgYXBpYywgcGluLCBpZHgsIGlycSwgZmlyc3Rfbm90Y29uID0gMTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRyAiaW5pdCBJT19BUElDIElSUXNcbiIpOwotCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKLQotCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljLHBpbixtcF9JTlQpOwotCQlpZiAoaWR4ID09IC0xKSB7Ci0JCQlpZiAoZmlyc3Rfbm90Y29uKSB7Ci0JCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0RFQlVHICIgSU8tQVBJQyAoYXBpY2lkLXBpbikgJWQtJWQiLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwgcGluKTsKLQkJCQlmaXJzdF9ub3Rjb24gPSAwOwotCQkJfSBlbHNlCi0JCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLCAlZC0lZCIsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBwaW4pOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFmaXJzdF9ub3Rjb24pIHsKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBub3QgY29ubmVjdGVkLlxuIik7Ci0JCQlmaXJzdF9ub3Rjb24gPSAxOwotCQl9Ci0KLQkJaXJxID0gcGluXzJfaXJxKGlkeCwgYXBpYywgcGluKTsKLQkJYWRkX3Bpbl90b19pcnEoaXJxLCBhcGljLCBwaW4pOwotCi0JCXNldHVwX0lPX0FQSUNfaXJxKGFwaWMsIHBpbiwgaXJxLAotCQkJCSAgaXJxX3RyaWdnZXIoaWR4KSwgaXJxX3BvbGFyaXR5KGlkeCkpOwotCX0KLQl9Ci0KLQlpZiAoIWZpcnN0X25vdGNvbikKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIG5vdCBjb25uZWN0ZWQuXG4iKTsKLX0KLQotLyoKLSAqIFNldCB1cCB0aGUgdGltZXIgcGluLCBwb3NzaWJseSB3aXRoIHRoZSA4MjU5QS1tYXN0ZXIgYmVoaW5kLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfdGltZXJfSVJRMF9waW4odW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCBwaW4sCi0JCQkJCWludCB2ZWN0b3IpCi17Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7Ci0KLQkvKgotCSAqIFdlIHVzZSBsb2dpY2FsIGRlbGl2ZXJ5IHRvIGdldCB0aGUgdGltZXIgSVJRCi0JICogdG8gdGhlIGZpcnN0IENQVS4KLQkgKi8KLQllbnRyeS5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOwotCWVudHJ5Lm1hc2sgPSAxOwkJCQkJLyogbWFzayBJUlEgbm93ICovCi0JZW50cnkuZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChUQVJHRVRfQ1BVUyk7Ci0JZW50cnkuZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOwotCWVudHJ5LnBvbGFyaXR5ID0gMDsKLQllbnRyeS50cmlnZ2VyID0gMDsKLQllbnRyeS52ZWN0b3IgPSB2ZWN0b3I7Ci0KLQkvKgotCSAqIFRoZSB0aW1lciBJUlEgZG9lc24ndCBoYXZlIHRvIGtub3cgdGhhdCBiZWhpbmQgdGhlCi0JICogc2NlbmUgd2UgbWF5IGhhdmUgYSA4MjU5QS1tYXN0ZXIgaW4gQUVPSSBtb2RlIC4uLgotCSAqLwotCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKDAsICZpb2FwaWNfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCi0JLyoKLQkgKiBBZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6Ci0JICovCi0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOwotfQotCi0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9JT19BUElDKHZvaWQpCi17Ci0JaW50IGFwaWMsIGk7Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOwotCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKLQl1bmlvbiBJT19BUElDX3JlZ18wMiByZWdfMDI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAibnVtYmVyIG9mIE1QIElSUSBzb3VyY2VzOiAlZC5cbiIsIG1wX2lycV9lbnRyaWVzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKQotCQlwcmludGsoS0VSTl9ERUJVRyAibnVtYmVyIG9mIElPLUFQSUMgIyVkIHJlZ2lzdGVyczogJWQuXG4iLAotCQkgICAgICAgbXBfaW9hcGljc1tpXS5tcF9hcGljaWQsIG5yX2lvYXBpY19yZWdpc3RlcnNbaV0pOwotCi0JLyoKLQkgKiBXZSBhcmUgYSBiaXQgY29uc2VydmF0aXZlIGFib3V0IHdoYXQgd2UgZXhwZWN0LiAgV2UgaGF2ZSB0bwotCSAqIGtub3cgYWJvdXQgZXZlcnkgaGFyZHdhcmUgY2hhbmdlIEFTQVAuCi0JICovCi0JcHJpbnRrKEtFUk5fSU5GTyAidGVzdGluZyB0aGUgSU8gQVBJQy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4iKTsKLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMCk7Ci0JcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKLQlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwKQotCQlyZWdfMDIucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQlwcmludGsoIlxuIik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIklPIEFQSUMgIyVkLi4uLi4uXG4iLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gcmVnaXN0ZXIgIzAwOiAlMDhYXG4iLCByZWdfMDAucmF3KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICA6IHBoeXNpY2FsIEFQSUMgaWQ6ICUwMlhcbiIsIHJlZ18wMC5iaXRzLklEKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMTogJTA4WFxuIiwgKihpbnQgKikmcmVnXzAxKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBtYXggcmVkaXJlY3Rpb24gZW50cmllczogJTA0WFxuIiwgcmVnXzAxLmJpdHMuZW50cmllcyk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBQUlEgaW1wbGVtZW50ZWQ6ICVYXG4iLCByZWdfMDEuYml0cy5QUlEpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IElPIEFQSUMgdmVyc2lvbjogJTA0WFxuIiwgcmVnXzAxLmJpdHMudmVyc2lvbik7Ci0KLQlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMjogJTA4WFxuIiwgcmVnXzAyLnJhdyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IGFyYml0cmF0aW9uOiAlMDJYXG4iLCByZWdfMDIuYml0cy5hcmJpdHJhdGlvbik7Ci0JfQotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gSVJRIHJlZGlyZWN0aW9uIHRhYmxlOlxuIik7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiIE5SIERzdCBNYXNrIFRyaWcgSVJSIFBvbCIKLQkJCSAgIiBTdGF0IERtb2QgRGVsaSBWZWN0OiAgIFxuIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDw9IHJlZ18wMS5iaXRzLmVudHJpZXM7IGkrKykgewotCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCQllbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIGkpOwotCi0JCXByaW50ayhLRVJOX0RFQlVHICIgJTAyeCAlMDNYICIsCi0JCQlpLAotCQkJZW50cnkuZGVzdAotCQkpOwotCi0JCXByaW50aygiJTFkICAgICUxZCAgICAlMWQgICAlMWQgICAlMWQgICAgJTFkICAgICUxZCAgICAlMDJYXG4iLAotCQkJZW50cnkubWFzaywKLQkJCWVudHJ5LnRyaWdnZXIsCi0JCQllbnRyeS5pcnIsCi0JCQllbnRyeS5wb2xhcml0eSwKLQkJCWVudHJ5LmRlbGl2ZXJ5X3N0YXR1cywKLQkJCWVudHJ5LmRlc3RfbW9kZSwKLQkJCWVudHJ5LmRlbGl2ZXJ5X21vZGUsCi0JCQllbnRyeS52ZWN0b3IKLQkJKTsKLQl9Ci0JfQotCXByaW50ayhLRVJOX0RFQlVHICJJUlEgdG8gcGluIG1hcHBpbmdzOlxuIik7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGk7Ci0JCWlmIChlbnRyeS0+cGluIDwgMCkKLQkJCWNvbnRpbnVlOwotCQlwcmludGsoS0VSTl9ERUJVRyAiSVJRJWQgIiwgaSk7Ci0JCWZvciAoOzspIHsKLQkJCXByaW50aygiLT4gJWQ6JWQiLCBlbnRyeS0+YXBpYywgZW50cnktPnBpbik7Ci0JCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJCWJyZWFrOwotCQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQkJfQotCQlwcmludGsoIlxuIik7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIGRvbmUuXG4iKTsKLQotCXJldHVybjsKLX0KLQotX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X0FQSUNfYml0ZmllbGQoaW50IGJhc2UpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0JaW50IGksIGo7Ci0KLQlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmXG4iIEtFUk5fREVCVUcpOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJdiA9IGFwaWNfcmVhZChiYXNlICsgaSoweDEwKTsKLQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKLQkJCWlmICh2ICYgKDE8PGopKQotCQkJCXByaW50aygiMSIpOwotCQkJZWxzZQotCQkJCXByaW50aygiMCIpOwotCQl9Ci0JCXByaW50aygiXG4iKTsKLQl9Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9sb2NhbF9BUElDKHZvaWQgKmR1bW15KQotewotCXVuc2lnbmVkIGludCB2LCB2ZXIsIG1heGx2dDsKLQl1bnNpZ25lZCBsb25nIGljcjsKLQotCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQotCQlyZXR1cm47Ci0KLQlwcmludGsoIlxuIiBLRVJOX0RFQlVHICJwcmludGluZyBsb2NhbCBBUElDIGNvbnRlbnRzIG9uIENQVSMlZC8lZDpcbiIsCi0JCXNtcF9wcm9jZXNzb3JfaWQoKSwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19JRCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgSUQ6ICAgICAgJTA4eCAoJTAxeClcbiIsIHYsIHJlYWRfYXBpY19pZCgpKTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQlwcmludGsoS0VSTl9JTkZPICIuLi4gQVBJQyBWRVJTSU9OOiAlMDh4XG4iLCB2KTsKLQl2ZXIgPSBHRVRfQVBJQ19WRVJTSU9OKHYpOwotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVEFTS1BSSTogJTA4eCAoJTAyeClcbiIsIHYsIHYgJiBBUElDX1RQUklfTUFTSyk7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfQVJCUFJJKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgQVJCUFJJOiAlMDh4ICglMDJ4KVxuIiwgdiwKLQkJdiAmIEFQSUNfQVJCUFJJX01BU0spOwotCXYgPSBhcGljX3JlYWQoQVBJQ19QUk9DUFJJKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgUFJPQ1BSSTogJTA4eFxuIiwgdik7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfRU9JKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgRU9JOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfUlJSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgUlJSOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTERSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTERSOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfREZSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgREZSOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFNQSVY6ICUwOHhcbiIsIHYpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElTUiBmaWVsZDpcbiIpOwotCXByaW50X0FQSUNfYml0ZmllbGQoQVBJQ19JU1IpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUTVIgZmllbGQ6XG4iKTsKLQlwcmludF9BUElDX2JpdGZpZWxkKEFQSUNfVE1SKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgSVJSIGZpZWxkOlxuIik7Ci0JcHJpbnRfQVBJQ19iaXRmaWVsZChBUElDX0lSUik7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgRVNSOiAlMDh4XG4iLCB2KTsKLQotCWljciA9IGFwaWNfaWNyX3JlYWQoKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgSUNSOiAlMDh4XG4iLCAodTMyKWljcik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElDUjI6ICUwOHhcbiIsICh1MzIpKGljciA+PiAzMikpOwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlRUOiAlMDh4XG4iLCB2KTsKLQotCWlmIChtYXhsdnQgPiAzKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQQyBpcyBMVlQjNC4gKi8KLQkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVFBDOiAlMDh4XG4iLCB2KTsKLQl9Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlQwOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVDE6ICUwOHhcbiIsIHYpOwotCi0JaWYgKG1heGx2dCA+IDIpIHsJCQkvKiBFUlIgaXMgTFZUIzMuICovCi0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZURVJSOiAlMDh4XG4iLCB2KTsKLQl9Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfVE1JQ1QpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUTUlDVDogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1RNQ0NUKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1DQ1Q6ICUwOHhcbiIsIHYpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19URENSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVERDUjogJTA4eFxuIiwgdik7Ci0JcHJpbnRrKCJcbiIpOwotfQotCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfYWxsX2xvY2FsX0FQSUNzKHZvaWQpCi17Ci0Jb25fZWFjaF9jcHUocHJpbnRfbG9jYWxfQVBJQywgTlVMTCwgMSk7Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9QSUModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX0RFQlVHICJcbnByaW50aW5nIFBJQyBjb250ZW50c1xuIik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKLQotCXYgPSBpbmIoMHhhMSkgPDwgOCB8IGluYigweDIxKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyAgSU1SOiAlMDR4XG4iLCB2KTsKLQotCXYgPSBpbmIoMHhhMCkgPDwgOCB8IGluYigweDIwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyAgSVJSOiAlMDR4XG4iLCB2KTsKLQotCW91dGIoMHgwYiwweGEwKTsKLQlvdXRiKDB4MGIsMHgyMCk7Ci0JdiA9IGluYigweGEwKSA8PCA4IHwgaW5iKDB4MjApOwotCW91dGIoMHgwYSwweGEwKTsKLQlvdXRiKDB4MGEsMHgyMCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElTUjogJTA0eFxuIiwgdik7Ci0KLQl2ID0gaW5iKDB4NGQxKSA8PCA4IHwgaW5iKDB4NGQwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyBFTENSOiAlMDR4XG4iLCB2KTsKLX0KLQotX19hcGljZGVidWdpbml0KGludCkgcHJpbnRfYWxsX0lDcyh2b2lkKQotewotCXByaW50X1BJQygpOwotCXByaW50X2FsbF9sb2NhbF9BUElDcygpOwotCXByaW50X0lPX0FQSUMoKTsKLQotCXJldHVybiAwOwotfQotCi1mc19pbml0Y2FsbChwcmludF9hbGxfSUNzKTsKLQotCi12b2lkIF9faW5pdCBlbmFibGVfSU9fQVBJQyh2b2lkKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKLQlpbnQgaTgyNTlfYXBpYywgaTgyNTlfcGluOwotCWludCBpLCBhcGljOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUElOX01BUF9TSVpFOyBpKyspIHsKLQkJaXJxXzJfcGluW2ldLnBpbiA9IC0xOwotCQlpcnFfMl9waW5baV0ubmV4dCA9IDA7Ci0JfQotCi0JLyoKLQkgKiBUaGUgbnVtYmVyIG9mIElPLUFQSUMgSVJRIHJlZ2lzdGVycyAoPT0gI3BpbnMpOgotCSAqLwotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCW5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY10gPSByZWdfMDEuYml0cy5lbnRyaWVzKzE7Ci0JfQotCWZvcihhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQlpbnQgcGluOwotCQkvKiBTZWUgaWYgYW55IG9mIHRoZSBwaW5zIGlzIGluIEV4dElOVCBtb2RlICovCi0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKLQkJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCQkJZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOwotCi0JCQkvKiBJZiB0aGUgaW50ZXJydXB0IGxpbmUgaXMgZW5hYmxlZCBhbmQgaW4gRXh0SW50IG1vZGUKLQkJCSAqIEkgaGF2ZSBmb3VuZCB0aGUgcGluIHdoZXJlIHRoZSBpODI1OSBpcyBjb25uZWN0ZWQuCi0JCQkgKi8KLQkJCWlmICgoZW50cnkubWFzayA9PSAwKSAmJiAoZW50cnkuZGVsaXZlcnlfbW9kZSA9PSBkZXN0X0V4dElOVCkpIHsKLQkJCQlpb2FwaWNfaTgyNTkuYXBpYyA9IGFwaWM7Ci0JCQkJaW9hcGljX2k4MjU5LnBpbiAgPSBwaW47Ci0JCQkJZ290byBmb3VuZF9pODI1OTsKLQkJCX0KLQkJfQotCX0KLSBmb3VuZF9pODI1OToKLQkvKiBMb29rIHRvIHNlZSB3aGF0IGlmIHRoZSBNUCB0YWJsZSBoYXMgcmVwb3J0ZWQgdGhlIEV4dElOVCAqLwotCWk4MjU5X3BpbiAgPSBmaW5kX2lzYV9pcnFfcGluKDAsIG1wX0V4dElOVCk7Ci0JaTgyNTlfYXBpYyA9IGZpbmRfaXNhX2lycV9hcGljKDAsIG1wX0V4dElOVCk7Ci0JLyogVHJ1c3QgdGhlIE1QIHRhYmxlIGlmIG5vdGhpbmcgaXMgc2V0dXAgaW4gdGhlIGhhcmR3YXJlICovCi0JaWYgKChpb2FwaWNfaTgyNTkucGluID09IC0xKSAmJiAoaTgyNTlfcGluID49IDApKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkV4dElOVCBub3Qgc2V0dXAgaW4gaGFyZHdhcmUgYnV0IHJlcG9ydGVkIGJ5IE1QIHRhYmxlXG4iKTsKLQkJaW9hcGljX2k4MjU5LnBpbiAgPSBpODI1OV9waW47Ci0JCWlvYXBpY19pODI1OS5hcGljID0gaTgyNTlfYXBpYzsKLQl9Ci0JLyogQ29tcGxhaW4gaWYgdGhlIE1QIHRhYmxlIGFuZCB0aGUgaGFyZHdhcmUgZGlzYWdyZWUgKi8KLQlpZiAoKChpb2FwaWNfaTgyNTkuYXBpYyAhPSBpODI1OV9hcGljKSB8fCAoaW9hcGljX2k4MjU5LnBpbiAhPSBpODI1OV9waW4pKSAmJgotCQkoaTgyNTlfcGluID49IDApICYmIChpb2FwaWNfaTgyNTkucGluID49IDApKQotCXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRXh0SU5UIGluIGhhcmR3YXJlIGFuZCBNUCB0YWJsZSBkaWZmZXJcbiIpOwotCX0KLQotCS8qCi0JICogRG8gbm90IHRydXN0IHRoZSBJTy1BUElDIGJlaW5nIGVtcHR5IGF0IGJvb3R1cAotCSAqLwotCWNsZWFyX0lPX0FQSUMoKTsKLX0KLQotLyoKLSAqIE5vdCBhbiBfX2luaXQsIG5lZWRlZCBieSB0aGUgcmVib290IGNvZGUKLSAqLwotdm9pZCBkaXNhYmxlX0lPX0FQSUModm9pZCkKLXsKLQkvKgotCSAqIENsZWFyIHRoZSBJTy1BUElDIGJlZm9yZSByZWJvb3Rpbmc6Ci0JICovCi0JY2xlYXJfSU9fQVBJQygpOwotCi0JLyoKLQkgKiBJZiB0aGUgaTgyNTkgaXMgcm91dGVkIHRocm91Z2ggYW4gSU9BUElDCi0JICogUHV0IHRoYXQgSU9BUElDIGluIHZpcnR1YWwgd2lyZSBtb2RlCi0JICogc28gbGVnYWN5IGludGVycnVwdHMgY2FuIGJlIGRlbGl2ZXJlZC4KLQkgKi8KLQlpZiAoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSkgewotCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKLQkJZW50cnkubWFzayAgICAgICAgICAgID0gMDsgLyogRW5hYmxlZCAqLwotCQllbnRyeS50cmlnZ2VyICAgICAgICAgPSAwOyAvKiBFZGdlICovCi0JCWVudHJ5LmlyciAgICAgICAgICAgICA9IDA7Ci0JCWVudHJ5LnBvbGFyaXR5ICAgICAgICA9IDA7IC8qIEhpZ2ggKi8KLQkJZW50cnkuZGVsaXZlcnlfc3RhdHVzID0gMDsKLQkJZW50cnkuZGVzdF9tb2RlICAgICAgID0gMDsgLyogUGh5c2ljYWwgKi8KLQkJZW50cnkuZGVsaXZlcnlfbW9kZSAgID0gZGVzdF9FeHRJTlQ7IC8qIEV4dEludCAqLwotCQllbnRyeS52ZWN0b3IgICAgICAgICAgPSAwOwotCQllbnRyeS5kZXN0ICAgICAgICAgICAgPSByZWFkX2FwaWNfaWQoKTsKLQotCQkvKgotCQkgKiBBZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6Ci0JCSAqLwotCQlpb2FwaWNfd3JpdGVfZW50cnkoaW9hcGljX2k4MjU5LmFwaWMsIGlvYXBpY19pODI1OS5waW4sIGVudHJ5KTsKLQl9Ci0KLQlkaXNjb25uZWN0X2JzcF9BUElDKGlvYXBpY19pODI1OS5waW4gIT0gLTEpOwotfQotCi0vKgotICogVGhlcmUgaXMgYSBuYXN0eSBidWcgaW4gc29tZSBvbGRlciBTTVAgYm9hcmRzLCB0aGVpciBtcHRhYmxlIGxpZXMKLSAqIGFib3V0IHRoZSB0aW1lciBJUlEuIFdlIGRvIHRoZSBmb2xsb3dpbmcgdG8gd29yayBhcm91bmQgdGhlIHNpdHVhdGlvbjoKLSAqCi0gKgktIHRpbWVyIElSUSBkZWZhdWx0cyB0byBJTy1BUElDIElSUQotICoJLSBpZiB0aGlzIGZ1bmN0aW9uIGRldGVjdHMgdGhhdCB0aW1lciBJUlFzIGFyZSBkZWZ1bmN0LCB0aGVuIHdlIGZhbGwKLSAqCSAgYmFjayB0byBJU0EgdGltZXIgSVJRcwotICovCi1zdGF0aWMgaW50IF9faW5pdCB0aW1lcl9pcnFfd29ya3Modm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHQxID0gamlmZmllczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCS8qIExldCB0ZW4gdGlja3MgcGFzcy4uLiAqLwotCW1kZWxheSgoMTAgKiAxMDAwKSAvIEhaKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkvKgotCSAqIEV4cGVjdCBhIGZldyB0aWNrcyBhdCBsZWFzdCwgdG8gYmUgc3VyZSBzb21lIHBvc3NpYmxlCi0JICogZ2x1ZSBsb2dpYyBkb2VzIG5vdCBsb2NrIHVwIGFmdGVyIG9uZSBvciB0d28gZmlyc3QKLQkgKiB0aWNrcyBpbiBhIG5vbi1FeHRJTlQgbW9kZS4gIEFsc28gdGhlIGxvY2FsIEFQSUMKLQkgKiBtaWdodCBoYXZlIGNhY2hlZCBvbmUgRXh0SU5UIGludGVycnVwdC4gIEZpbmFsbHksIGF0Ci0JICogbGVhc3Qgb25lIHRpY2sgbWF5IGJlIGxvc3QgZHVlIHRvIGRlbGF5cy4KLQkgKi8KLQotCS8qIGppZmZpZXMgd3JhcD8gKi8KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0MSArIDQpKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEluIHRoZSBTTVArSU9BUElDIGNhc2UgaXQgbWlnaHQgaGFwcGVuIHRoYXQgdGhlcmUgYXJlIGFuIHVuc3BlY2lmaWVkCi0gKiBudW1iZXIgb2YgcGVuZGluZyBJUlEgZXZlbnRzIHVuaGFuZGxlZC4gVGhlc2UgY2FzZXMgYXJlIHZlcnkgcmFyZSwKLSAqIHNvIHdlICdyZXNlbmQnIHRoZXNlIElSUXMgdmlhIElQSXMsIHRvIHRoZSBzYW1lIENQVS4gSXQncyBtdWNoCi0gKiBiZXR0ZXIgdG8gZG8gaXQgdGhpcyB3YXkgYXMgdGh1cyB3ZSBkbyBub3QgaGF2ZSB0byBiZSBhd2FyZSBvZgotICogJ3BlbmRpbmcnIGludGVycnVwdHMgaW4gdGhlIElSUSBwYXRoLCBleGNlcHQgYXQgdGhpcyBwb2ludC4KLSAqLwotLyoKLSAqIEVkZ2UgdHJpZ2dlcmVkIG5lZWRzIHRvIHJlc2VuZCBhbnkgaW50ZXJydXB0Ci0gKiB0aGF0IHdhcyBkZWxheWVkIGJ1dCB0aGlzIGlzIG5vdyBoYW5kbGVkIGluIHRoZSBkZXZpY2UKLSAqIGluZGVwZW5kZW50IGNvZGUuCi0gKi8KLQotLyoKLSAqIFN0YXJ0aW5nIHVwIGEgZWRnZS10cmlnZ2VyZWQgSU8tQVBJQyBpbnRlcnJ1cHQgaXMKLSAqIG5hc3R5IC0gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBnZXQgdGhlIGVkZ2UuCi0gKiBJZiBpdCBpcyBhbHJlYWR5IGFzc2VydGVkIGZvciBzb21lIHJlYXNvbiwgd2UgbmVlZAotICogcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdCBpcyB3YXMgcGVuZGluZy4KLSAqCi0gKiBUaGlzIGlzIG5vdCBjb21wbGV0ZSAtIHdlIHNob3VsZCBiZSBhYmxlIHRvIGZha2UKLSAqIGFuIGVkZ2UgZXZlbiBpZiBpdCBpc24ndCBvbiB0aGUgODI1OUEuLi4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfaW9hcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCB3YXNfcGVuZGluZyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWlmIChpcnEgPCAxNikgewotCQlkaXNhYmxlXzgyNTlBX2lycShpcnEpOwotCQlpZiAoaTgyNTlBX2lycV9wZW5kaW5nKGlycSkpCi0JCQl3YXNfcGVuZGluZyA9IDE7Ci0JfQotCV9fdW5tYXNrX0lPX0FQSUNfaXJxKGlycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiB3YXNfcGVuZGluZzsKLX0KLQotc3RhdGljIGludCBpb2FwaWNfcmV0cmlnZ2VyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSAmaXJxX2NmZ1tpcnFdOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQlzZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2ZfY3B1KGZpcnN0X2NwdShjZmctPmRvbWFpbikpLCBjZmctPnZlY3Rvcik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAxOwotfQotCi0vKgotICogTGV2ZWwgYW5kIGVkZ2UgdHJpZ2dlcmVkIElPLUFQSUMgaW50ZXJydXB0cyBuZWVkIGRpZmZlcmVudCBoYW5kbGluZywKLSAqIHNvIHdlIHVzZSB0d28gc2VwYXJhdGUgSVJRIGRlc2NyaXB0b3JzLiBFZGdlIHRyaWdnZXJlZCBJUlFzIGNhbiBiZQotICogaGFuZGxlZCB3aXRoIHRoZSBsZXZlbC10cmlnZ2VyZWQgZGVzY3JpcHRvciwgYnV0IHRoYXQgb25lIGhhcyBzbGlnaHRseQotICogbW9yZSBvdmVyaGVhZC4gTGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgY2Fubm90IGJlIGhhbmRsZWQgd2l0aCB0aGUKLSAqIGVkZ2UtdHJpZ2dlcmVkIGhhbmRsZXIsIHdpdGhvdXQgcmlza2luZyBJUlEgc3Rvcm1zIGFuZCBvdGhlciB1Z2x5Ci0gKiByYWNlcy4KLSAqLwotCi0jaWZkZWYgQ09ORklHX1NNUAotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLXN0YXRpYyB2b2lkIGlyX2lycV9taWdyYXRpb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQotc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGlyX21pZ3JhdGlvbl93b3JrLCBpcl9pcnFfbWlncmF0aW9uKTsKLQotLyoKLSAqIE1pZ3JhdGUgdGhlIElPLUFQSUMgaXJxIGluIHRoZSBwcmVzZW5jZSBvZiBpbnRyLXJlbWFwcGluZy4KLSAqCi0gKiBGb3IgZWRnZSB0cmlnZ2VyZWQsIGlycSBtaWdyYXRpb24gaXMgYSBzaW1wbGUgYXRvbWljIHVwZGF0ZShvZiB2ZWN0b3IKLSAqIGFuZCBjcHUgZGVzdGluYXRpb24pIG9mIElSVEUgYW5kIGZsdXNoIHRoZSBoYXJkd2FyZSBjYWNoZS4KLSAqCi0gKiBGb3IgbGV2ZWwgdHJpZ2dlcmVkLCB3ZSBuZWVkIHRvIG1vZGlmeSB0aGUgaW8tYXBpYyBSVEUgYXN3ZWxsIHdpdGggdGhlIHVwZGF0ZQotICogdmVjdG9yIGluZm9ybWF0aW9uLCBhbG9uZyB3aXRoIG1vZGlmeWluZyBJUlRFIHdpdGggdmVjdG9yIGFuZCBkZXN0aW5hdGlvbi4KLSAqIFNvIGlycSBtaWdyYXRpb24gZm9yIGxldmVsIHRyaWdnZXJlZCBpcyBsaXR0bGUgIGJpdCBtb3JlIGNvbXBsZXggY29tcGFyZWQgdG8KLSAqIGVkZ2UgdHJpZ2dlcmVkIG1pZ3JhdGlvbi4gQnV0IHRoZSBnb29kIG5ld3MgaXMsIHdlIHVzZSB0aGUgc2FtZSBhbGdvcml0aG0KLSAqIGZvciBsZXZlbCB0cmlnZ2VyZWQgbWlncmF0aW9uIGFzIHdlIGhhdmUgdG9kYXksIG9ubHkgZGlmZmVyZW5jZSBiZWluZywKLSAqIHdlIG5vdyBpbml0aWF0ZSB0aGUgaXJxIG1pZ3JhdGlvbiBmcm9tIHByb2Nlc3MgY29udGV4dCBpbnN0ZWFkIG9mIHRoZQotICogaW50ZXJydXB0IGNvbnRleHQuCi0gKgotICogSW4gZnV0dXJlLCB3aGVuIHdlIGRvIGEgZGlyZWN0ZWQgRU9JIChjb21iaW5lZCB3aXRoIGNwdSBFT0kgYnJvYWRjYXN0Ci0gKiBzdXBwcmVzc2lvbikgdG8gdGhlIElPLUFQSUMsIGxldmVsIHRyaWdnZXJlZCBpcnEgbWlncmF0aW9uIHdpbGwgYWxzbyBiZQotICogYXMgc2ltcGxlIGFzIGVkZ2UgdHJpZ2dlcmVkIG1pZ3JhdGlvbiBhbmQgd2UgY2FuIGRvIHRoZSBpcnEgbWlncmF0aW9uCi0gKiB3aXRoIGEgc2ltcGxlIGF0b21pYyB1cGRhdGUgdG8gSU8tQVBJQyBSVEUuCi0gKi8KLXN0YXRpYyB2b2lkIG1pZ3JhdGVfaW9hcGljX2lycShpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQljcHVtYXNrX3QgdG1wLCBjbGVhbnVwX21hc2s7Ci0Jc3RydWN0IGlydGUgaXJ0ZTsKLQlpbnQgbW9kaWZ5X2lvYXBpY19ydGUgPSBkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUw7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXJldHVybjsKLQotCWlmIChnZXRfaXJ0ZShpcnEsICZpcnRlKSkKLQkJcmV0dXJuOwotCi0JaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCi0JCXJldHVybjsKLQotCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOwotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKLQotCWlmIChtb2RpZnlfaW9hcGljX3J0ZSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJX190YXJnZXRfSU9fQVBJQ19pcnEoaXJxLCBkZXN0LCBjZmctPnZlY3Rvcik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JfQotCi0JaXJ0ZS52ZWN0b3IgPSBjZmctPnZlY3RvcjsKLQlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdCk7Ci0KLQkvKgotCSAqIE1vZGlmaWVkIHRoZSBJUlRFIGFuZCBmbHVzaGVzIHRoZSBJbnRlcnJ1cHQgZW50cnkgY2FjaGUuCi0JICovCi0JbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7Ci0KLQlpZiAoY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSB7Ci0JCWNwdXNfYW5kKGNsZWFudXBfbWFzaywgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hcCk7Ci0JCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50ID0gY3B1c193ZWlnaHQoY2xlYW51cF9tYXNrKTsKLQkJc2VuZF9JUElfbWFzayhjbGVhbnVwX21hc2ssIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKLQkJY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMDsKLQl9Ci0KLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gbWFzazsKLX0KLQotc3RhdGljIGludCBtaWdyYXRlX2lycV9yZW1hcHBlZF9sZXZlbChpbnQgaXJxKQotewotCWludCByZXQgPSAtMTsKLQotCW1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKLQotCWlmIChpb19hcGljX2xldmVsX2Fja19wZW5kaW5nKGlycSkpIHsKLQkJLyoKLQkgCSAqIEludGVycnVwdCBpbiBwcm9ncmVzcy4gTWlncmF0aW5nIGlycSBub3cgd2lsbCBjaGFuZ2UgdGhlCi0JCSAqIHZlY3RvciBpbmZvcm1hdGlvbiBpbiB0aGUgSU8tQVBJQyBSVEUgYW5kIHRoYXQgd2lsbCBjb25mdXNlCi0JCSAqIHRoZSBFT0kgYnJvYWRjYXN0IHBlcmZvcm1lZCBieSBjcHUuCi0JCSAqIFNvLCBkZWxheSB0aGUgaXJxIG1pZ3JhdGlvbiB0byB0aGUgbmV4dCBpbnN0YW5jZS4KLQkJICovCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXJfbWlncmF0aW9uX3dvcmssIDEpOwotCQlnb3RvIHVubWFzazsKLQl9Ci0KLQkvKiBldmVydGhpbmcgaXMgY2xlYXIuIHdlIGhhdmUgcmlnaHQgb2Ygd2F5ICovCi0JbWlncmF0ZV9pb2FwaWNfaXJxKGlycSwgaXJxX2Rlc2NbaXJxXS5wZW5kaW5nX21hc2spOwotCi0JcmV0ID0gMDsKLQlpcnFfZGVzY1tpcnFdLnN0YXR1cyAmPSB+SVJRX01PVkVfUEVORElORzsKLQljcHVzX2NsZWFyKGlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrKTsKLQotdW5tYXNrOgotCXVubWFza19JT19BUElDX2lycShpcnEpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGlyX2lycV9taWdyYXRpb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCWludCBpcnE7Ci0KLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykgewotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQkJCWlmICghZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5IHx8Ci0JCQkgICAgIShkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSkgewotCQkJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01PVkVfUEVORElORzsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsCi0JCQkJCSAgICAgICAgIGlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQkJfQotCX0KLX0KLQotLyoKLSAqIE1pZ3JhdGVzIHRoZSBJUlEgZGVzdGluYXRpb24gaW4gdGhlIHByb2Nlc3MgY29udGV4dC4KLSAqLwotc3RhdGljIHZvaWQgc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci0JaWYgKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX0xFVkVMKSB7Ci0JCWlycV9kZXNjW2lycV0uc3RhdHVzIHw9IElSUV9NT1ZFX1BFTkRJTkc7Ci0JCWlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrID0gbWFzazsKLQkJbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWwoaXJxKTsKLQkJcmV0dXJuOwotCX0KLQotCW1pZ3JhdGVfaW9hcGljX2lycShpcnEsIG1hc2spOwotfQotI2VuZGlmCi0KLWFzbWxpbmthZ2Ugdm9pZCBzbXBfaXJxX21vdmVfY2xlYW51cF9pbnRlcnJ1cHQodm9pZCkKLXsKLQl1bnNpZ25lZCB2ZWN0b3IsIG1lOwotCWFja19BUElDX2lycSgpOwotCWV4aXRfaWRsZSgpOwotCWlycV9lbnRlcigpOwotCi0JbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZm9yICh2ZWN0b3IgPSBGSVJTVF9FWFRFUk5BTF9WRUNUT1I7IHZlY3RvciA8IE5SX1ZFQ1RPUlM7IHZlY3RvcisrKSB7Ci0JCXVuc2lnbmVkIGludCBpcnE7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKLQkJc3RydWN0IGlycV9jZmcgKmNmZzsKLQkJaXJxID0gX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdOwotCQlpZiAoaXJxID49IE5SX0lSUVMpCi0JCQljb250aW51ZTsKLQotCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JCWNmZyA9IGlycV9jZmcgKyBpcnE7Ci0JCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0JCWlmICghY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQpCi0JCQlnb3RvIHVubG9jazsKLQotCQlpZiAoKHZlY3RvciA9PSBjZmctPnZlY3RvcikgJiYgY3B1X2lzc2V0KG1lLCBjZmctPmRvbWFpbikpCi0JCQlnb3RvIHVubG9jazsKLQotCQlfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl0gPSAtMTsKLQkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQtLTsKLXVubG9jazoKLQkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwotCX0KLQotCWlycV9leGl0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlycV9jb21wbGV0ZV9tb3ZlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcgKyBpcnE7Ci0JdW5zaWduZWQgdmVjdG9yLCBtZTsKLQotCWlmIChsaWtlbHkoIWNmZy0+bW92ZV9pbl9wcm9ncmVzcykpCi0JCXJldHVybjsKLQotCXZlY3RvciA9IH5nZXRfaXJxX3JlZ3MoKS0+b3JpZ19heDsKLQltZSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpZiAoKHZlY3RvciA9PSBjZmctPnZlY3RvcikgJiYgY3B1X2lzc2V0KG1lLCBjZmctPmRvbWFpbikpIHsKLQkJY3B1bWFza190IGNsZWFudXBfbWFzazsKLQotCQljcHVzX2FuZChjbGVhbnVwX21hc2ssIGNmZy0+b2xkX2RvbWFpbiwgY3B1X29ubGluZV9tYXApOwotCQljZmctPm1vdmVfY2xlYW51cF9jb3VudCA9IGNwdXNfd2VpZ2h0KGNsZWFudXBfbWFzayk7Ci0JCXNlbmRfSVBJX21hc2soY2xlYW51cF9tYXNrLCBJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUik7Ci0JCWNmZy0+bW92ZV9pbl9wcm9ncmVzcyA9IDA7Ci0JfQotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcnFfY29tcGxldGVfbW92ZSh1bnNpZ25lZCBpbnQgaXJxKSB7fQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLXN0YXRpYyB2b2lkIGFja194MmFwaWNfbGV2ZWwodW5zaWduZWQgaW50IGlycSkKLXsKLQlhY2tfeDJBUElDX2lycSgpOwotfQotCi1zdGF0aWMgdm9pZCBhY2tfeDJhcGljX2VkZ2UodW5zaWduZWQgaW50IGlycSkKLXsKLQlhY2tfeDJBUElDX2lycSgpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGFja19hcGljX2VkZ2UodW5zaWduZWQgaW50IGlycSkKLXsKLQlpcnFfY29tcGxldGVfbW92ZShpcnEpOwotCW1vdmVfbmF0aXZlX2lycShpcnEpOwotCWFja19BUElDX2lycSgpOwotfQotCi1zdGF0aWMgdm9pZCBhY2tfYXBpY19sZXZlbCh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBkb191bm1hc2tfaXJxID0gMDsKLQotCWlycV9jb21wbGV0ZV9tb3ZlKGlycSk7Ci0jaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKLQkvKiBJZiB3ZSBhcmUgbW92aW5nIHRoZSBpcnEgd2UgbmVlZCB0byBtYXNrIGl0ICovCi0JaWYgKHVubGlrZWx5KGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX01PVkVfUEVORElORykpIHsKLQkJZG9fdW5tYXNrX2lycSA9IDE7Ci0JCW1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKLQl9Ci0jZW5kaWYKLQotCS8qCi0JICogV2UgbXVzdCBhY2tub3dsZWRnZSB0aGUgaXJxIGJlZm9yZSB3ZSBtb3ZlIGl0IG9yIHRoZSBhY2tub3dsZWRnZSB3aWxsCi0JICogbm90IHByb3BhZ2F0ZSBwcm9wZXJseS4KLQkgKi8KLQlhY2tfQVBJQ19pcnEoKTsKLQotCS8qIE5vdyB3ZSBjYW4gbW92ZSBhbmQgcmVuYWJsZSB0aGUgaXJxICovCi0JaWYgKHVubGlrZWx5KGRvX3VubWFza19pcnEpKSB7Ci0JCS8qIE9ubHkgbWlncmF0ZSB0aGUgaXJxIGlmIHRoZSBhY2sgaGFzIGJlZW4gcmVjZWl2ZWQuCi0JCSAqCi0JCSAqIE9uIHJhcmUgb2NjYXNpb25zIHRoZSBicm9hZGNhc3QgbGV2ZWwgdHJpZ2dlcmVkIGFjayBnZXRzCi0JCSAqIGRlbGF5ZWQgZ29pbmcgdG8gaW9hcGljcywgYW5kIGlmIHdlIHJlcHJvZ3JhbSB0aGUKLQkJICogdmVjdG9yIHdoaWxlIFJlbW90ZSBJUlIgaXMgc3RpbGwgc2V0IHRoZSBpcnEgd2lsbCBuZXZlcgotCQkgKiBmaXJlIGFnYWluLgotCQkgKgotCQkgKiBUbyBwcmV2ZW50IHRoaXMgc2NlbmFyaW8gd2UgcmVhZCB0aGUgUmVtb3RlIElSUiBiaXQKLQkJICogb2YgdGhlIGlvYXBpYy4gIFRoaXMgaGFzIHR3byBlZmZlY3RzLgotCQkgKiAtIE9uIGFueSBzYW5lIHN5c3RlbSB0aGUgcmVhZCBvZiB0aGUgaW9hcGljIHdpbGwKLQkJICogICBmbHVzaCB3cml0ZXMgKGFuZCBhY2tzKSBnb2luZyB0byB0aGUgaW9hcGljIGZyb20KLQkJICogICB0aGlzIGNwdS4KLQkJICogLSBXZSBnZXQgdG8gc2VlIGlmIHRoZSBBQ0sgaGFzIGFjdHVhbGx5IGJlZW4gZGVsaXZlcmVkLgotCQkgKgotCQkgKiBCYXNlZCBvbiBmYWlsZWQgZXhwZXJpbWVudHMgb2YgcmVwcm9ncmFtbWluZyB0aGUKLQkJICogaW9hcGljIGVudHJ5IGZyb20gb3V0c2lkZSBvZiBpcnEgY29udGV4dCBzdGFydGluZwotCQkgKiB3aXRoIG1hc2tpbmcgdGhlIGlvYXBpYyBlbnRyeSBhbmQgdGhlbiBwb2xsaW5nIHVudGlsCi0JCSAqIFJlbW90ZSBJUlIgd2FzIGNsZWFyIGJlZm9yZSByZXByb2dyYW1taW5nIHRoZQotCQkgKiBpb2FwaWMgSSBkb24ndCB0cnVzdCB0aGUgUmVtb3RlIElSUiBiaXQgdG8gYmUKLQkJICogY29tcGxldGV5IGFjY3VyYXRlLgotCQkgKgotCQkgKiBIb3dldmVyIHRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gb3RoZXIgd2F5IHRvIHBsdWcKLQkJICogdGhpcyByYWNlLCBzbyBpZiB0aGUgUmVtb3RlIElSUiBiaXQgaXMgbm90Ci0JCSAqIGFjY3VyYXRlIGFuZCBpcyBjYXVzaW5nIHByb2JsZW1zIHRoZW4gaXQgaXMgYSBoYXJkd2FyZSBidWcKLQkJICogYW5kIHlvdSBjYW4gZ28gdGFsayB0byB0aGUgY2hpcHNldCB2ZW5kb3IgYWJvdXQgaXQuCi0JCSAqLwotCQlpZiAoIWlvX2FwaWNfbGV2ZWxfYWNrX3BlbmRpbmcoaXJxKSkKLQkJCW1vdmVfbWFza2VkX2lycShpcnEpOwotCQl1bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9hcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZSAJCT0gIklPLUFQSUMiLAotCS5zdGFydHVwIAk9IHN0YXJ0dXBfaW9hcGljX2lycSwKLQkubWFzawkgCT0gbWFza19JT19BUElDX2lycSwKLQkudW5tYXNrCSAJPSB1bm1hc2tfSU9fQVBJQ19pcnEsCi0JLmFjayAJCT0gYWNrX2FwaWNfZWRnZSwKLQkuZW9pIAkJPSBhY2tfYXBpY19sZXZlbCwKLSNpZmRlZiBDT05GSUdfU01QCi0JLnNldF9hZmZpbml0eSAJPSBzZXRfaW9hcGljX2FmZmluaXR5X2lycSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcl9pb2FwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lIAkJPSAiSVItSU8tQVBJQyIsCi0JLnN0YXJ0dXAgCT0gc3RhcnR1cF9pb2FwaWNfaXJxLAotCS5tYXNrCSAJPSBtYXNrX0lPX0FQSUNfaXJxLAotCS51bm1hc2sJIAk9IHVubWFza19JT19BUElDX2lycSwKLQkuYWNrIAkJPSBhY2tfeDJhcGljX2VkZ2UsCi0JLmVvaSAJCT0gYWNrX3gyYXBpY19sZXZlbCwKLSNpZmRlZiBDT05GSUdfU01QCi0JLnNldF9hZmZpbml0eSAJPSBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfSU9fQVBJQ190cmFwcyh2b2lkKQotewotCWludCBpcnE7Ci0KLQkvKgotCSAqIE5PVEUhIFRoZSBsb2NhbCBBUElDIGlzbid0IHZlcnkgZ29vZCBhdCBoYW5kbGluZwotCSAqIG11bHRpcGxlIGludGVycnVwdHMgYXQgdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgotCSAqIEFzIHRoZSBpbnRlcnJ1cHQgbGV2ZWwgaXMgZGV0ZXJtaW5lZCBieSB0YWtpbmcgdGhlCi0JICogdmVjdG9yIG51bWJlciBhbmQgc2hpZnRpbmcgdGhhdCByaWdodCBieSA0LCB3ZQotCSAqIHdhbnQgdG8gc3ByZWFkIHRoZXNlIG91dCBhIGJpdCBzbyB0aGF0IHRoZXkgZG9uJ3QKLQkgKiBhbGwgZmFsbCBpbiB0aGUgc2FtZSBpbnRlcnJ1cHQgbGV2ZWwuCi0JICoKLQkgKiBBbHNvLCB3ZSd2ZSBnb3QgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdHJhc2ggZ2F0ZQotCSAqIDB4ODAsIGJlY2F1c2UgaW50IDB4ODAgaXMgaG0sIGtpbmQgb2YgaW1wb3J0YW50aXNoLiA7KQotCSAqLwotCWZvciAoaXJxID0gMDsgaXJxIDwgTlJfSVJRUyA7IGlycSsrKSB7Ci0JCWlmIChJT19BUElDX0lSUShpcnEpICYmICFpcnFfY2ZnW2lycV0udmVjdG9yKSB7Ci0JCQkvKgotCQkJICogSG1tLi4gV2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeSBmb3IgdGhpcywKLQkJCSAqIHNvIGRlZmF1bHQgdG8gYW4gb2xkLWZhc2hpb25lZCA4MjU5Ci0JCQkgKiBpbnRlcnJ1cHQgaWYgd2UgY2FuLi4KLQkJCSAqLwotCQkJaWYgKGlycSA8IDE2KQotCQkJCW1ha2VfODI1OUFfaXJxKGlycSk7Ci0JCQllbHNlCi0JCQkJLyogU3RyYW5nZS4gT2gsIHdlbGwuLiAqLwotCQkJCWlycV9kZXNjW2lycV0uY2hpcCA9ICZub19pcnFfY2hpcDsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgdW5tYXNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgdjsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiAmIH5BUElDX0xWVF9NQVNLRUQpOwotfQotCi1zdGF0aWMgdm9pZCBtYXNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgdjsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFja19sYXBpY19pcnEgKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JYWNrX0FQSUNfaXJxKCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbGFwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCQk9ICJsb2NhbC1BUElDIiwKLQkubWFzawkJPSBtYXNrX2xhcGljX2lycSwKLQkudW5tYXNrCQk9IHVubWFza19sYXBpY19pcnEsCi0JLmFjawkJPSBhY2tfbGFwaWNfaXJxLAotfTsKLQotc3RhdGljIHZvaWQgbGFwaWNfcmVnaXN0ZXJfaW50cihpbnQgaXJxKQotewotCWlycV9kZXNjW2lycV0uc3RhdHVzICY9IH5JUlFfTEVWRUw7Ci0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbGFwaWNfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLAotCQkJCSAgICAgICJlZGdlIik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ubWkodm9pZCkKLXsKLQkvKgotIAkgKiBEaXJ0eSB0cmljayB0byBlbmFibGUgdGhlIE5NSSB3YXRjaGRvZyAuLi4KLQkgKiBXZSBwdXQgdGhlIDgyNTlBIG1hc3RlciBpbnRvIEFFT0kgbW9kZSBhbmQKLQkgKiB1bm1hc2sgb24gYWxsIGxvY2FsIEFQSUNzIExWVDAgYXMgTk1JLgotCSAqCi0JICogVGhlIGlkZWEgdG8gdXNlIHRoZSA4MjU5QSBpbiBBRU9JIG1vZGUgKCc4MjU5QSBWaXJ0dWFsIFdpcmUnKQotCSAqIGlzIGZyb20gTWFjaWVqIFcuIFJvenlja2kgLSBzbyB3ZSBkbyBub3QgaGF2ZSB0byBFT0kgZnJvbQotCSAqIHRoZSBOTUkgaGFuZGxlciBvciB0aGUgdGltZXIgaW50ZXJydXB0LgotCSAqLyAKLQlwcmludGsoS0VSTl9JTkZPICJhY3RpdmF0aW5nIE5NSSBXYXRjaGRvZyAuLi4iKTsKLQotCWVuYWJsZV9OTUlfdGhyb3VnaF9MVlQwKCk7Ci0KLQlwcmludGsoIiBkb25lLlxuIik7Ci19Ci0KLS8qCi0gKiBUaGlzIGxvb2tzIGEgYml0IGhhY2tpc2ggYnV0IGl0J3MgYWJvdXQgdGhlIG9ubHkgb25lIHdheSBvZiBzZW5kaW5nCi0gKiBhIGZldyBJTlRBIGN5Y2xlcyB0byA4MjU5QXMgYW5kIGFueSBhc3NvY2lhdGVkIGdsdWUgbG9naWMuICBJQ1IgZG9lcwotICogbm90IHN1cHBvcnQgdGhlIEV4dElOVCBtb2RlLCB1bmZvcnR1bmF0ZWx5LiAgV2UgbmVlZCB0byBzZW5kIHRoZXNlCi0gKiBjeWNsZXMgYXMgc29tZSBpODI0ODlEWC1iYXNlZCBib2FyZHMgaGF2ZSBnbHVlIGxvZ2ljIHRoYXQga2VlcHMgdGhlCi0gKiA4MjU5QSBpbnRlcnJ1cHQgbGluZSBhc3NlcnRlZCB1bnRpbCBJTlRBLiAgLS1tYWNybwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHVubG9ja19FeHRJTlRfbG9naWModm9pZCkKLXsKLQlpbnQgYXBpYywgcGluLCBpOwotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5MCwgZW50cnkxOwotCXVuc2lnbmVkIGNoYXIgc2F2ZV9jb250cm9sLCBzYXZlX2ZyZXFfc2VsZWN0OwotCi0JcGluICA9IGZpbmRfaXNhX2lycV9waW4oOCwgbXBfSU5UKTsKLQlhcGljID0gZmluZF9pc2FfaXJxX2FwaWMoOCwgbXBfSU5UKTsKLQlpZiAocGluID09IC0xKQotCQlyZXR1cm47Ci0KLQllbnRyeTAgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOwotCi0JY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKLQotCW1lbXNldCgmZW50cnkxLCAwLCBzaXplb2YoZW50cnkxKSk7Ci0KLQllbnRyeTEuZGVzdF9tb2RlID0gMDsJCQkvKiBwaHlzaWNhbCBkZWxpdmVyeSAqLwotCWVudHJ5MS5tYXNrID0gMDsJCQkvKiB1bm1hc2sgSVJRIG5vdyAqLwotCWVudHJ5MS5kZXN0ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZW50cnkxLmRlbGl2ZXJ5X21vZGUgPSBkZXN0X0V4dElOVDsKLQllbnRyeTEucG9sYXJpdHkgPSBlbnRyeTAucG9sYXJpdHk7Ci0JZW50cnkxLnRyaWdnZXIgPSAwOwotCWVudHJ5MS52ZWN0b3IgPSAwOwotCi0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkxKTsKLQotCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7Ci0Jc2F2ZV9mcmVxX3NlbGVjdCA9IENNT1NfUkVBRChSVENfRlJFUV9TRUxFQ1QpOwotCUNNT1NfV1JJVEUoKHNhdmVfZnJlcV9zZWxlY3QgJiB+UlRDX1JBVEVfU0VMRUNUKSB8IDB4NiwKLQkJICAgUlRDX0ZSRVFfU0VMRUNUKTsKLQlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCB8IFJUQ19QSUUsIFJUQ19DT05UUk9MKTsKLQotCWkgPSAxMDA7Ci0Jd2hpbGUgKGktLSA+IDApIHsKLQkJbWRlbGF5KDEwKTsKLQkJaWYgKChDTU9TX1JFQUQoUlRDX0lOVFJfRkxBR1MpICYgUlRDX1BGKSA9PSBSVENfUEYpCi0JCQlpIC09IDEwOwotCX0KLQotCUNNT1NfV1JJVEUoc2F2ZV9jb250cm9sLCBSVENfQ09OVFJPTCk7Ci0JQ01PU19XUklURShzYXZlX2ZyZXFfc2VsZWN0LCBSVENfRlJFUV9TRUxFQ1QpOwotCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7Ci0KLQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeTApOwotfQotCi0vKgotICogVGhpcyBjb2RlIG1heSBsb29rIGEgYml0IHBhcmFub2lkLCBidXQgaXQncyBzdXBwb3NlZCB0byBjb29wZXJhdGUgd2l0aAotICogYSB3aWRlIHJhbmdlIG9mIGJvYXJkcyBhbmQgQklPUyBidWdzLiAgRm9ydHVuYXRlbHkgb25seSB0aGUgdGltZXIgSVJRCi0gKiBpcyBzbyBzY3Jld3kuICBUaGFua3MgdG8gQnJpYW4gUGVya2lucyBmb3IgdGVzdGluZy9oYWNraW5nIHRoaXMgYmVhc3QKLSAqIGZhbmF0aWNhbGx5IG9uIGhpcyB0cnVseSBidWdneSBib2FyZC4KLSAqCi0gKiBGSVhNRTogcmVhbGx5IG5lZWQgdG8gcmV2YW1wIHRoaXMgZm9yIG1vZGVybiBwbGF0Zm9ybXMgb25seS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBjaGVja190aW1lcih2b2lkKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgMDsKLQlpbnQgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG5vX3BpbjEgPSAwOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JLyoKLQkgKiBnZXQvc2V0IHRoZSB0aW1lciBJUlEgdmVjdG9yOgotCSAqLwotCWRpc2FibGVfODI1OUFfaXJxKDApOwotCWFzc2lnbl9pcnFfdmVjdG9yKDAsIFRBUkdFVF9DUFVTKTsKLQotCS8qCi0JICogQXMgSVJRMCBpcyB0byBiZSBlbmFibGVkIGluIHRoZSA4MjU5QSwgdGhlIHZpcnR1YWwKLQkgKiB3aXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiB0aGUgbG9jYWwgQVBJQy4KLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9FWFRJTlQpOwotCWluaXRfODI1OUEoMSk7Ci0KLQlwaW4xICA9IGZpbmRfaXNhX2lycV9waW4oMCwgbXBfSU5UKTsKLQlhcGljMSA9IGZpbmRfaXNhX2lycV9hcGljKDAsIG1wX0lOVCk7Ci0JcGluMiAgPSBpb2FwaWNfaTgyNTkucGluOwotCWFwaWMyID0gaW9hcGljX2k4MjU5LmFwaWM7Ci0KLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uVElNRVI6IHZlY3Rvcj0weCUwMlggIgotCQkgICAgImFwaWMxPSVkIHBpbjE9JWQgYXBpYzI9JWQgcGluMj0lZFxuIiwKLQkJICAgIGNmZy0+dmVjdG9yLCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjIpOwotCi0JLyoKLQkgKiBTb21lIEJJT1Mgd3JpdGVycyBhcmUgY2x1ZWxlc3MgYW5kIHJlcG9ydCB0aGUgRXh0SU5UQQotCSAqIEkvTyBBUElDIGlucHV0IGZyb20gdGhlIGNhc2NhZGVkIDgyNTlBIGFzIHRoZSB0aW1lcgotCSAqIGludGVycnVwdCBpbnB1dC4gIFNvIGp1c3QgaW4gY2FzZSwgaWYgb25seSBvbmUgcGluCi0JICogd2FzIGZvdW5kIGFib3ZlLCB0cnkgaXQgYm90aCBkaXJlY3RseSBhbmQgdGhyb3VnaCB0aGUKLQkgKiA4MjU5QS4KLQkgKi8KLQlpZiAocGluMSA9PSAtMSkgewotCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKLQkJCXBhbmljKCJCSU9TIGJ1ZzogdGltZXIgbm90IGNvbm5lY3RlZCB0byBJTy1BUElDIik7Ci0JCXBpbjEgPSBwaW4yOwotCQlhcGljMSA9IGFwaWMyOwotCQlub19waW4xID0gMTsKLQl9IGVsc2UgaWYgKHBpbjIgPT0gLTEpIHsKLQkJcGluMiA9IHBpbjE7Ci0JCWFwaWMyID0gYXBpYzE7Ci0JfQotCi0JaWYgKHBpbjEgIT0gLTEpIHsKLQkJLyoKLQkJICogT2ssIGRvZXMgSVJRMCB0aHJvdWdoIHRoZSBJT0FQSUMgd29yaz8KLQkJICovCi0JCWlmIChub19waW4xKSB7Ci0JCQlhZGRfcGluX3RvX2lycSgwLCBhcGljMSwgcGluMSk7Ci0JCQlzZXR1cF90aW1lcl9JUlEwX3BpbihhcGljMSwgcGluMSwgY2ZnLT52ZWN0b3IpOwotCQl9Ci0JCXVubWFza19JT19BUElDX2lycSgwKTsKLQkJaWYgKCFub190aW1lcl9jaGVjayAmJiB0aW1lcl9pcnFfd29ya3MoKSkgewotCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQkJCXNldHVwX25taSgpOwotCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCQl9Ci0JCQlpZiAoZGlzYWJsZV90aW1lcl9waW5fMSA+IDApCi0JCQkJY2xlYXJfSU9fQVBJQ19waW4oMCwgcGluMSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKLQkJCXBhbmljKCJ0aW1lciBkb2Vzbid0IHdvcmsgdGhyb3VnaCBJbnRlcnJ1cHQtcmVtYXBwZWQgSU8tQVBJQyIpOwotCQljbGVhcl9JT19BUElDX3BpbihhcGljMSwgcGluMSk7Ci0JCWlmICghbm9fcGluMSkKLQkJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fRVJSICIuLk1QLUJJT1MgYnVnOiAiCi0JCQkJICAgICI4MjU0IHRpbWVyIG5vdCBjb25uZWN0ZWQgdG8gSU8tQVBJQ1xuIik7Ci0KLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyICIKLQkJCSAgICAiKElSUTApIHRocm91Z2ggdGhlIDgyNTlBIC4uLlxuIik7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTwotCQkJICAgICIuLi4uLiAoZm91bmQgYXBpYyAlZCBwaW4gJWQpIC4uLlxuIiwgYXBpYzIsIHBpbjIpOwotCQkvKgotCQkgKiBsZWdhY3kgZGV2aWNlcyBzaG91bGQgYmUgY29ubmVjdGVkIHRvIElPIEFQSUMgIzAKLQkJICovCi0JCXJlcGxhY2VfcGluX2F0X2lycSgwLCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjIpOwotCQlzZXR1cF90aW1lcl9JUlEwX3BpbihhcGljMiwgcGluMiwgY2ZnLT52ZWN0b3IpOwotCQl1bm1hc2tfSU9fQVBJQ19pcnEoMCk7Ci0JCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLi4uIHdvcmtzLlxuIik7Ci0JCQl0aW1lcl90aHJvdWdoXzgyNTkgPSAxOwotCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQkJCWRpc2FibGVfODI1OUFfaXJxKDApOwotCQkJCXNldHVwX25taSgpOwotCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCQl9Ci0JCQlnb3RvIG91dDsKLQkJfQotCQkvKgotCQkgKiBDbGVhbnVwLCBqdXN0IGluIGNhc2UgLi4uCi0JCSAqLwotCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzIsIHBpbjIpOwotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uLi4gZmFpbGVkLlxuIik7Ci0JfQotCi0JaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX1dBUk5JTkcgInRpbWVyIGRvZXNuJ3Qgd29yayAiCi0JCQkgICAgInRocm91Z2ggdGhlIElPLUFQSUMgLSBkaXNhYmxpbmcgTk1JIFdhdGNoZG9nIVxuIik7Ci0JCW5taV93YXRjaGRvZyA9IE5NSV9OT05FOwotCX0KLQotCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTwotCQkgICAgIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgVmlydHVhbCBXaXJlIElSUS4uLlxuIik7Ci0KLQlsYXBpY19yZWdpc3Rlcl9pbnRyKDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0ZJWEVEIHwgY2ZnLT52ZWN0b3IpOwkvKiBGaXhlZCBtb2RlICovCi0JZW5hYmxlXzgyNTlBX2lycSgwKTsKLQotCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIHdvcmtzLlxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9GSVhFRCB8IGNmZy0+dmVjdG9yKTsKLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIGZhaWxlZC5cbiIpOwotCi0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCi0JCSAgICAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBFeHRJTlQgSVJRLi4uXG4iKTsKLQotCWluaXRfODI1OUEoMCk7Ci0JbWFrZV84MjU5QV9pcnEoMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRVhUSU5UKTsKLQotCXVubG9ja19FeHRJTlRfbG9naWMoKTsKLQotCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIHdvcmtzLlxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIGZhaWxlZCA6KC5cbiIpOwotCXBhbmljKCJJTy1BUElDICsgdGltZXIgZG9lc24ndCB3b3JrISAgQm9vdCB3aXRoIGFwaWM9ZGVidWcgYW5kIHNlbmQgYSAiCi0JCSJyZXBvcnQuICBUaGVuIHRyeSBib290aW5nIHdpdGggdGhlICdub2FwaWMnIG9wdGlvbi5cbiIpOwotb3V0OgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgbm90aW1lcmNoZWNrKGNoYXIgKnMpCi17Ci0Jbm9fdGltZXJfY2hlY2sgPSAxOwotCXJldHVybiAxOwotfQotX19zZXR1cCgibm9fdGltZXJfY2hlY2siLCBub3RpbWVyY2hlY2spOwotCi0vKgotICogVHJhZGl0aW9uYWxseSBJU0EgSVJRMiBpcyB0aGUgY2FzY2FkZSBJUlEsIGFuZCBpcyBub3QgYXZhaWxhYmxlCi0gKiB0byBkZXZpY2VzLiAgSG93ZXZlciB0aGVyZSBtYXkgYmUgYW4gSS9PIEFQSUMgcGluIGF2YWlsYWJsZSBmb3IKLSAqIHRoaXMgaW50ZXJydXB0IHJlZ2FyZGxlc3MuICBUaGUgcGluIG1heSBiZSBsZWZ0IHVuY29ubmVjdGVkLCBidXQKLSAqIHR5cGljYWxseSBpdCB3aWxsIGJlIHJldXNlZCBhcyBhbiBFeHRJTlQgY2FzY2FkZSBpbnRlcnJ1cHQgZm9yCi0gKiB0aGUgbWFzdGVyIDgyNTlBLiAgSW4gdGhlIE1QUyBjYXNlIHN1Y2ggYSBwaW4gd2lsbCBub3JtYWxseSBiZQotICogcmVwb3J0ZWQgYXMgYW4gRXh0SU5UIGludGVycnVwdCBpbiB0aGUgTVAgdGFibGUuICBXaXRoIEFDUEkKLSAqIHRoZXJlIGlzIG5vIHByb3Zpc2lvbiBmb3IgRXh0SU5UIGludGVycnVwdHMsIGFuZCBpbiB0aGUgYWJzZW5jZQotICogb2YgYW4gb3ZlcnJpZGUgaXQgd291bGQgYmUgdHJlYXRlZCBhcyBhbiBvcmRpbmFyeSBJU0EgSS9PIEFQSUMKLSAqIGludGVycnVwdCwgdGhhdCBpcyBlZGdlLXRyaWdnZXJlZCBhbmQgdW5tYXNrZWQgYnkgZGVmYXVsdC4gIFdlCi0gKiB1c2VkIHRvIGRvIHRoaXMsIGJ1dCBpdCBjYXVzZWQgcHJvYmxlbXMgb24gc29tZSBzeXN0ZW1zIGJlY2F1c2UKLSAqIG9mIHRoZSBOTUkgd2F0Y2hkb2cgYW5kIHNvbWV0aW1lcyBJUlEwIG9mIHRoZSA4MjU0IHRpbWVyIHVzaW5nCi0gKiB0aGUgc2FtZSBFeHRJTlQgY2FzY2FkZSBpbnRlcnJ1cHQgdG8gZHJpdmUgdGhlIGxvY2FsIEFQSUMgb2YgdGhlCi0gKiBib290c3RyYXAgcHJvY2Vzc29yLiAgVGhlcmVmb3JlIHdlIHJlZnJhaW4gZnJvbSByb3V0aW5nIElSUTIgdG8KLSAqIHRoZSBJL08gQVBJQyBpbiBhbGwgY2FzZXMgbm93LiAgTm8gYWN0dWFsIGRldmljZSBzaG91bGQgcmVxdWVzdAotICogaXQgYW55d2F5LiAgLS1tYWNybwotICovCi0jZGVmaW5lIFBJQ19JUlFTCSgxPDwyKQotCi12b2lkIF9faW5pdCBzZXR1cF9JT19BUElDKHZvaWQpCi17Ci0KLQkvKgotCSAqIGNhbGxpbmcgZW5hYmxlX0lPX0FQSUMoKSBpcyBtb3ZlZCB0byBzZXR1cF9sb2NhbF9BUElDIGZvciBCUAotCSAqLwotCi0JaW9fYXBpY19pcnFzID0gflBJQ19JUlFTOwotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiRU5BQkxJTkcgSU8tQVBJQyBJUlFzXG4iKTsKLQotCXN5bmNfQXJiX0lEcygpOwotCXNldHVwX0lPX0FQSUNfaXJxcygpOwotCWluaXRfSU9fQVBJQ190cmFwcygpOwotCWNoZWNrX3RpbWVyKCk7Ci19Ci0KLXN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSB7Ci0Jc3RydWN0IHN5c19kZXZpY2UgZGV2OwotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5WzBdOwotfTsKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKiBtcF9pb2FwaWNfZGF0YVtNQVhfSU9fQVBJQ1NdOwotCi1zdGF0aWMgaW50IGlvYXBpY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhICpkYXRhOwotCWludCBpOwotCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSwgZGV2KTsKLQllbnRyeSA9IGRhdGEtPmVudHJ5OwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2Rldi0+aWRdOyBpICsrLCBlbnRyeSArKyApCi0JCSplbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGRldi0+aWQsIGkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW9hcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bmlvbiBJT19BUElDX3JlZ18wMCByZWdfMDA7Ci0JaW50IGk7Ci0KLQlkYXRhID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhLCBkZXYpOwotCWVudHJ5ID0gZGF0YS0+ZW50cnk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGRldi0+aWQsIDApOwotCWlmIChyZWdfMDAuYml0cy5JRCAhPSBtcF9pb2FwaWNzW2Rldi0+aWRdLm1wX2FwaWNpZCkgewotCQlyZWdfMDAuYml0cy5JRCA9IG1wX2lvYXBpY3NbZGV2LT5pZF0ubXBfYXBpY2lkOwotCQlpb19hcGljX3dyaXRlKGRldi0+aWQsIDAsIHJlZ18wMC5yYXcpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2Rldi0+aWRdOyBpKyspCi0JCWlvYXBpY193cml0ZV9lbnRyeShkZXYtPmlkLCBpLCBlbnRyeVtpXSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgaW9hcGljX3N5c2Rldl9jbGFzcyA9IHsKLQkubmFtZSA9ICJpb2FwaWMiLAotCS5zdXNwZW5kID0gaW9hcGljX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGlvYXBpY19yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpb2FwaWNfaW5pdF9zeXNmcyh2b2lkKQotewotCXN0cnVjdCBzeXNfZGV2aWNlICogZGV2OwotCWludCBpLCBzaXplLCBlcnJvcjsKLQotCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZpb2FwaWNfc3lzZGV2X2NsYXNzKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKysgKSB7Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IHN5c19kZXZpY2UpICsgbnJfaW9hcGljX3JlZ2lzdGVyc1tpXQotCQkJKiBzaXplb2Yoc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkpOwotCQltcF9pb2FwaWNfZGF0YVtpXSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbXBfaW9hcGljX2RhdGFbaV0pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc3VzcGVuZC9yZXN1bWUgSU9BUElDICVkXG4iLCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWRldiA9ICZtcF9pb2FwaWNfZGF0YVtpXS0+ZGV2OwotCQlkZXYtPmlkID0gaTsKLQkJZGV2LT5jbHMgPSAmaW9hcGljX3N5c2Rldl9jbGFzczsKLQkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoZGV2KTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlrZnJlZShtcF9pb2FwaWNfZGF0YVtpXSk7Ci0JCQltcF9pb2FwaWNfZGF0YVtpXSA9IE5VTEw7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHN1c3BlbmQvcmVzdW1lIElPQVBJQyAlZFxuIiwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1kZXZpY2VfaW5pdGNhbGwoaW9hcGljX2luaXRfc3lzZnMpOwotCi0vKgotICogRHluYW1pYyBpcnEgYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGlvbgotICovCi1pbnQgY3JlYXRlX2lycSh2b2lkKQotewotCS8qIEFsbG9jYXRlIGFuIHVudXNlZCBpcnEgKi8KLQlpbnQgaXJxOwotCWludCBuZXc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlycSA9IC1FTk9TUEM7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JZm9yIChuZXcgPSAoTlJfSVJRUyAtIDEpOyBuZXcgPj0gMDsgbmV3LS0pIHsKLQkJaWYgKHBsYXRmb3JtX2xlZ2FjeV9pcnEobmV3KSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoaXJxX2NmZ1tuZXddLnZlY3RvciAhPSAwKQotCQkJY29udGludWU7Ci0JCWlmIChfX2Fzc2lnbl9pcnFfdmVjdG9yKG5ldywgVEFSR0VUX0NQVVMpID09IDApCi0JCQlpcnEgPSBuZXc7Ci0JCWJyZWFrOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGlycSA+PSAwKSB7Ci0JCWR5bmFtaWNfaXJxX2luaXQoaXJxKTsKLQl9Ci0JcmV0dXJuIGlycTsKLX0KLQotdm9pZCBkZXN0cm95X2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkeW5hbWljX2lycV9jbGVhbnVwKGlycSk7Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCWZyZWVfaXJ0ZShpcnEpOwotI2VuZGlmCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JX19jbGVhcl9pcnFfdmVjdG9yKGlycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIE1TSSBtZXNzYWdlIGNvbXBvc2l0aW9uCi0gKi8KLSNpZmRlZiBDT05GSUdfUENJX01TSQotc3RhdGljIGludCBtc2lfY29tcG9zZV9tc2coc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCi17Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcgKyBpcnE7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBkZXN0OwotCWNwdW1hc2tfdCB0bXA7Ci0KLQl0bXAgPSBUQVJHRVRfQ1BVUzsKLQllcnIgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEsIHRtcCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIHRtcCk7Ci0JZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKLQkJc3RydWN0IGlydGUgaXJ0ZTsKLQkJaW50IGlyX2luZGV4OwotCQl1MTYgc3ViX2hhbmRsZTsKLQotCQlpcl9pbmRleCA9IG1hcF9pcnFfdG9faXJ0ZV9oYW5kbGUoaXJxLCAmc3ViX2hhbmRsZSk7Ci0JCUJVR19PTihpcl9pbmRleCA9PSAtMSk7Ci0KLQkJbWVtc2V0ICgmaXJ0ZSwgMCwgc2l6ZW9mKGlydGUpKTsKLQotCQlpcnRlLnByZXNlbnQgPSAxOwotCQlpcnRlLmRzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKLQkJaXJ0ZS50cmlnZ2VyX21vZGUgPSAwOyAvKiBlZGdlICovCi0JCWlydGUuZGx2cnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOwotCQlpcnRlLnZlY3RvciA9IGNmZy0+dmVjdG9yOwotCQlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdCk7Ci0KLQkJbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7Ci0KLQkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISTsKLQkJbXNnLT5kYXRhID0gc3ViX2hhbmRsZTsKLQkJbXNnLT5hZGRyZXNzX2xvID0gTVNJX0FERFJfQkFTRV9MTyB8IE1TSV9BRERSX0lSX0VYVF9JTlQgfAotCQkJCSAgTVNJX0FERFJfSVJfU0hWIHwKLQkJCQkgIE1TSV9BRERSX0lSX0lOREVYMShpcl9pbmRleCkgfAotCQkJCSAgTVNJX0FERFJfSVJfSU5ERVgyKGlyX2luZGV4KTsKLQl9IGVsc2UKLSNlbmRpZgotCXsKLQkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISTsKLQkJbXNnLT5hZGRyZXNzX2xvID0KLQkJCU1TSV9BRERSX0JBU0VfTE8gfAotCQkJKChJTlRfREVTVF9NT0RFID09IDApID8KLQkJCQlNU0lfQUREUl9ERVNUX01PREVfUEhZU0lDQUw6Ci0JCQkJTVNJX0FERFJfREVTVF9NT0RFX0xPR0lDQUwpIHwKLQkJCSgoSU5UX0RFTElWRVJZX01PREUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/Ci0JCQkJTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVOgotCQkJCU1TSV9BRERSX1JFRElSRUNUSU9OX0xPV1BSSSkgfAotCQkJTVNJX0FERFJfREVTVF9JRChkZXN0KTsKLQotCQltc2ctPmRhdGEgPQotCQkJTVNJX0RBVEFfVFJJR0dFUl9FREdFIHwKLQkJCU1TSV9EQVRBX0xFVkVMX0FTU0VSVCB8Ci0JCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPwotCQkJCU1TSV9EQVRBX0RFTElWRVJZX0ZJWEVEOgotCQkJCU1TSV9EQVRBX0RFTElWRVJZX0xPV1BSSSkgfAotCQkJTVNJX0RBVEFfVkVDVE9SKGNmZy0+dmVjdG9yKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkIHNldF9tc2lfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOwotCXN0cnVjdCBtc2lfbXNnIG1zZzsKLQl1bnNpZ25lZCBpbnQgZGVzdDsKLQljcHVtYXNrX3QgdG1wOwotCi0JY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7Ci0JaWYgKGNwdXNfZW1wdHkodG1wKSkKLQkJcmV0dXJuOwotCi0JaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCi0JCXJldHVybjsKLQotCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOwotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKLQotCXJlYWRfbXNpX21zZyhpcnEsICZtc2cpOwotCi0JbXNnLmRhdGEgJj0gfk1TSV9EQVRBX1ZFQ1RPUl9NQVNLOwotCW1zZy5kYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUihjZmctPnZlY3Rvcik7Ci0JbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RfSURfTUFTSzsKLQltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUX0lEKGRlc3QpOwotCi0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOwotfQotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLS8qCi0gKiBNaWdyYXRlIHRoZSBNU0kgaXJxIHRvIGFub3RoZXIgY3B1bWFzay4gVGhpcyBtaWdyYXRpb24gaXMKLSAqIGRvbmUgaW4gdGhlIHByb2Nlc3MgY29udGV4dCB1c2luZyBpbnRlcnJ1cHQtcmVtYXBwaW5nIGhhcmR3YXJlLgotICovCi1zdGF0aWMgdm9pZCBpcl9zZXRfbXNpX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKLQl1bnNpZ25lZCBpbnQgZGVzdDsKLQljcHVtYXNrX3QgdG1wLCBjbGVhbnVwX21hc2s7Ci0Jc3RydWN0IGlydGUgaXJ0ZTsKLQotCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXJldHVybjsKLQotCWlmIChnZXRfaXJ0ZShpcnEsICZpcnRlKSkKLQkJcmV0dXJuOwotCi0JaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCi0JCXJldHVybjsKLQotCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOwotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKLQotCWlydGUudmVjdG9yID0gY2ZnLT52ZWN0b3I7Ci0JaXJ0ZS5kZXN0X2lkID0gSVJURV9ERVNUKGRlc3QpOwotCi0JLyoKLQkgKiBhdG9taWNhbGx5IHVwZGF0ZSB0aGUgSVJURSB3aXRoIHRoZSBuZXcgZGVzdGluYXRpb24gYW5kIHZlY3Rvci4KLQkgKi8KLQltb2RpZnlfaXJ0ZShpcnEsICZpcnRlKTsKLQotCS8qCi0JICogQWZ0ZXIgdGhpcyBwb2ludCwgYWxsIHRoZSBpbnRlcnJ1cHRzIHdpbGwgc3RhcnQgYXJyaXZpbmcKLQkgKiBhdCB0aGUgbmV3IGRlc3RpbmF0aW9uLiBTbywgdGltZSB0byBjbGVhbnVwIHRoZSBwcmV2aW91cwotCSAqIHZlY3RvciBhbGxvY2F0aW9uLgotCSAqLwotCWlmIChjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpIHsKLQkJY3B1c19hbmQoY2xlYW51cF9tYXNrLCBjZmctPm9sZF9kb21haW4sIGNwdV9vbmxpbmVfbWFwKTsKLQkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQgPSBjcHVzX3dlaWdodChjbGVhbnVwX21hc2spOwotCQlzZW5kX0lQSV9tYXNrKGNsZWFudXBfbWFzaywgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IpOwotCQljZmctPm1vdmVfaW5fcHJvZ3Jlc3MgPSAwOwotCX0KLQotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOwotfQotI2VuZGlmCi0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCi0vKgotICogSVJRIENoaXAgZm9yIE1TSSBQQ0kvUENJLVgvUENJLUV4cHJlc3MgRGV2aWNlcywKLSAqIHdoaWNoIGltcGxlbWVudCB0aGUgTVNJIG9yIE1TSS1YIENhcGFiaWxpdHkgU3RydWN0dXJlLgotICovCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zaV9jaGlwID0gewotCS5uYW1lCQk9ICJQQ0ktTVNJIiwKLQkudW5tYXNrCQk9IHVubWFza19tc2lfaXJxLAotCS5tYXNrCQk9IG1hc2tfbXNpX2lycSwKLQkuYWNrCQk9IGFja19hcGljX2VkZ2UsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkJPSBzZXRfbXNpX2lycV9hZmZpbml0eSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtc2lfaXJfY2hpcCA9IHsKLQkubmFtZQkJPSAiSVItUENJLU1TSSIsCi0JLnVubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKLQkubWFzawkJPSBtYXNrX21zaV9pcnEsCi0JLmFjawkJPSBhY2tfeDJhcGljX2VkZ2UsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkJPSBpcl9zZXRfbXNpX2lycV9hZmZpbml0eSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLS8qCi0gKiBNYXAgdGhlIFBDSSBkZXYgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVtYXBwaW5nIGhhcmR3YXJlIHVuaXQKLSAqIGFuZCBhbGxvY2F0ZSAnbnZlYycgY29uc2VjdXRpdmUgaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBlbnRyaWVzCi0gKiBpbiBpdC4KLSAqLwotc3RhdGljIGludCBtc2lfYWxsb2NfaXJ0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaXJxLCBpbnQgbnZlYykKLXsKLQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OwotCWludCBpbmRleDsKLQotCWlvbW11ID0gbWFwX2Rldl90b19pcihkZXYpOwotCWlmICghaW9tbXUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiVW5hYmxlIHRvIG1hcCBQQ0kgJXMgdG8gaW9tbXVcbiIsIHBjaV9uYW1lKGRldikpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0KLQlpbmRleCA9IGFsbG9jX2lydGUoaW9tbXUsIGlycSwgbnZlYyk7Ci0JaWYgKGluZGV4IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgJWQgSVJURSBmb3IgUENJICVzXG4iLCBudmVjLAotCQkgICAgICAgIHBjaV9uYW1lKGRldikpOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0JcmV0dXJuIGluZGV4OwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIGludCBpcnEpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgbXNpX21zZyBtc2c7Ci0KLQlyZXQgPSBtc2lfY29tcG9zZV9tc2coZGV2LCBpcnEsICZtc2cpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0Jc2V0X2lycV9tc2koaXJxLCBkZXNjKTsKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCWlmIChpcnFfcmVtYXBwZWQoaXJxKSkgewotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQkJLyoKLQkJICogaXJxIG1pZ3JhdGlvbiBpbiBwcm9jZXNzIGNvbnRleHQKLQkJICovCi0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QQ05UWFQ7Ci0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJm1zaV9pcl9jaGlwLCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci0JfSBlbHNlCi0jZW5kaWYKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbXNpX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgYXJjaF9zZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqZGVzYykKLXsKLQlpbnQgaXJxLCByZXQ7Ci0KLQlpcnEgPSBjcmVhdGVfaXJxKCk7Ci0JaWYgKGlycSA8IDApCi0JCXJldHVybiBpcnE7Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCWlmICghaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKLQkJZ290byBub19pcjsKLQotCXJldCA9IG1zaV9hbGxvY19pcnRlKGRldiwgaXJxLCAxKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJvcjsKLW5vX2lyOgotI2VuZGlmCi0JcmV0ID0gc2V0dXBfbXNpX2lycShkZXYsIGRlc2MsIGlycSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGVzdHJveV9pcnEoaXJxKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIDA7Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotZXJyb3I6Ci0JZGVzdHJveV9pcnEoaXJxKTsKLQlyZXR1cm4gcmV0OwotI2VuZGlmCi19Ci0KLWludCBhcmNoX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKLXsKLQlpbnQgaXJxLCByZXQsIHN1Yl9oYW5kbGU7Ci0Jc3RydWN0IG1zaV9kZXNjICpkZXNjOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IDA7Ci0JaW50IGluZGV4ID0gMDsKLSNlbmRpZgotCi0Jc3ViX2hhbmRsZSA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewotCQlpcnEgPSBjcmVhdGVfaXJxKCk7Ci0JCWlmIChpcnEgPCAwKQotCQkJcmV0dXJuIGlycTsKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCQlpZiAoIWludHJfcmVtYXBwaW5nX2VuYWJsZWQpCi0JCQlnb3RvIG5vX2lyOwotCi0JCWlmICghc3ViX2hhbmRsZSkgewotCQkJLyoKLQkJCSAqIGFsbG9jYXRlIHRoZSBjb25zZWN1dGl2ZSBibG9jayBvZiBJUlRFJ3MKLQkJCSAqIGZvciAnbnZlYycKLQkJCSAqLwotCQkJaW5kZXggPSBtc2lfYWxsb2NfaXJ0ZShkZXYsIGlycSwgbnZlYyk7Ci0JCQlpZiAoaW5kZXggPCAwKSB7Ci0JCQkJcmV0ID0gaW5kZXg7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlvbW11ID0gbWFwX2Rldl90b19pcihkZXYpOwotCQkJaWYgKCFpb21tdSkgewotCQkJCXJldCA9IC1FTk9FTlQ7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJCS8qCi0JCQkgKiBzZXR1cCB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBpcnEgYW5kIHRoZSBJUlRFCi0JCQkgKiBiYXNlIGluZGV4LCB0aGUgc3ViX2hhbmRsZSBwb2ludGluZyB0byB0aGUKLQkJCSAqIGFwcHJvcHJpYXRlIGludGVycnVwdCByZW1hcCB0YWJsZSBlbnRyeS4KLQkJCSAqLwotCQkJc2V0X2lydGVfaXJxKGlycSwgaW9tbXUsIGluZGV4LCBzdWJfaGFuZGxlKTsKLQkJfQotbm9faXI6Ci0jZW5kaWYKLQkJcmV0ID0gc2V0dXBfbXNpX2lycShkZXYsIGRlc2MsIGlycSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBlcnJvcjsKLQkJc3ViX2hhbmRsZSsrOwotCX0KLQlyZXR1cm4gMDsKLQotZXJyb3I6Ci0JZGVzdHJveV9pcnEoaXJxKTsKLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGFyY2hfdGVhcmRvd25fbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWRlc3Ryb3lfaXJxKGlycSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfRE1BUgotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkIGRtYXJfbXNpX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKLQlzdHJ1Y3QgbXNpX21zZyBtc2c7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0JY3B1bWFza190IHRtcDsKLQotCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXJldHVybjsKLQotCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQotCQlyZXR1cm47Ci0KLQljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKLQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7Ci0KLQlkbWFyX21zaV9yZWFkKGlycSwgJm1zZyk7Ci0KLQltc2cuZGF0YSAmPSB+TVNJX0RBVEFfVkVDVE9SX01BU0s7Ci0JbXNnLmRhdGEgfD0gTVNJX0RBVEFfVkVDVE9SKGNmZy0+dmVjdG9yKTsKLQltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVF9JRF9NQVNLOwotCW1zZy5hZGRyZXNzX2xvIHw9IE1TSV9BRERSX0RFU1RfSUQoZGVzdCk7Ci0KLQlkbWFyX21zaV93cml0ZShpcnEsICZtc2cpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOwotfQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQotc3RydWN0IGlycV9jaGlwIGRtYXJfbXNpX3R5cGUgPSB7Ci0JLm5hbWUgPSAiRE1BUl9NU0kiLAotCS51bm1hc2sgPSBkbWFyX21zaV91bm1hc2ssCi0JLm1hc2sgPSBkbWFyX21zaV9tYXNrLAotCS5hY2sgPSBhY2tfYXBpY19lZGdlLAotI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5ID0gZG1hcl9tc2lfc2V0X2FmZmluaXR5LAotI2VuZGlmCi0JLnJldHJpZ2dlciA9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAotfTsKLQotaW50IGFyY2hfc2V0dXBfZG1hcl9tc2kodW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBtc2lfbXNnIG1zZzsKLQotCXJldCA9IG1zaV9jb21wb3NlX21zZyhOVUxMLCBpcnEsICZtc2cpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCWRtYXJfbXNpX3dyaXRlKGlycSwgJm1zZyk7Ci0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmZG1hcl9tc2lfdHlwZSwgaGFuZGxlX2VkZ2VfaXJxLAotCQkiZWRnZSIpOwotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBDT05GSUdfUENJX01TSSAqLwotLyoKLSAqIEh5cGVydHJhbnNwb3J0IGludGVycnVwdCBzdXBwb3J0Ci0gKi8KLSNpZmRlZiBDT05GSUdfSFRfSVJRCi0KLSNpZmRlZiBDT05GSUdfU01QCi0KLXN0YXRpYyB2b2lkIHRhcmdldF9odF9pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGRlc3QsIHU4IHZlY3RvcikKLXsKLQlzdHJ1Y3QgaHRfaXJxX21zZyBtc2c7Ci0JZmV0Y2hfaHRfaXJxX21zZyhpcnEsICZtc2cpOwotCi0JbXNnLmFkZHJlc3NfbG8gJj0gfihIVF9JUlFfTE9XX1ZFQ1RPUl9NQVNLIHwgSFRfSVJRX0xPV19ERVNUX0lEX01BU0spOwotCW1zZy5hZGRyZXNzX2hpICY9IH4oSFRfSVJRX0hJR0hfREVTVF9JRF9NQVNLKTsKLQotCW1zZy5hZGRyZXNzX2xvIHw9IEhUX0lSUV9MT1dfVkVDVE9SKHZlY3RvcikgfCBIVF9JUlFfTE9XX0RFU1RfSUQoZGVzdCk7Ci0JbXNnLmFkZHJlc3NfaGkgfD0gSFRfSVJRX0hJR0hfREVTVF9JRChkZXN0KTsKLQotCXdyaXRlX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2h0X2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKLQl1bnNpZ25lZCBpbnQgZGVzdDsKLQljcHVtYXNrX3QgdG1wOwotCi0JY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7Ci0JaWYgKGNwdXNfZW1wdHkodG1wKSkKLQkJcmV0dXJuOwotCi0JaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCi0JCXJldHVybjsKLQotCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOwotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKLQotCXRhcmdldF9odF9pcnEoaXJxLCBkZXN0LCBjZmctPnZlY3Rvcik7Ci0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IG1hc2s7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBodF9pcnFfY2hpcCA9IHsKLQkubmFtZQkJPSAiUENJLUhUIiwKLQkubWFzawkJPSBtYXNrX2h0X2lycSwKLQkudW5tYXNrCQk9IHVubWFza19odF9pcnEsCi0JLmFjawkJPSBhY2tfYXBpY19lZGdlLAotI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5CT0gc2V0X2h0X2lycV9hZmZpbml0eSwKLSNlbmRpZgotCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLWludCBhcmNoX3NldHVwX2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOwotCWludCBlcnI7Ci0JY3B1bWFza190IHRtcDsKLQotCXRtcCA9IFRBUkdFVF9DUFVTOwotCWVyciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgdG1wKTsKLQlpZiAoIWVycikgewotCQlzdHJ1Y3QgaHRfaXJxX21zZyBtc2c7Ci0JCXVuc2lnbmVkIGRlc3Q7Ci0KLQkJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgdG1wKTsKLQkJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwotCi0JCW1zZy5hZGRyZXNzX2hpID0gSFRfSVJRX0hJR0hfREVTVF9JRChkZXN0KTsKLQotCQltc2cuYWRkcmVzc19sbyA9Ci0JCQlIVF9JUlFfTE9XX0JBU0UgfAotCQkJSFRfSVJRX0xPV19ERVNUX0lEKGRlc3QpIHwKLQkJCUhUX0lSUV9MT1dfVkVDVE9SKGNmZy0+dmVjdG9yKSB8Ci0JCQkoKElOVF9ERVNUX01PREUgPT0gMCkgPwotCQkJCUhUX0lSUV9MT1dfRE1fUEhZU0lDQUwgOgotCQkJCUhUX0lSUV9MT1dfRE1fTE9HSUNBTCkgfAotCQkJSFRfSVJRX0xPV19SUUVPSV9FREdFIHwKLQkJCSgoSU5UX0RFTElWRVJZX01PREUgIT0gZGVzdF9Mb3dlc3RQcmlvKSA/Ci0JCQkJSFRfSVJRX0xPV19NVF9GSVhFRCA6Ci0JCQkJSFRfSVJRX0xPV19NVF9BUkJJVFJBVEVEKSB8Ci0JCQlIVF9JUlFfTE9XX0lSUV9NQVNLRUQ7Ci0KLQkJd3JpdGVfaHRfaXJxX21zZyhpcnEsICZtc2cpOwotCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmh0X2lycV9jaGlwLAotCQkJCQkgICAgICBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0hUX0lSUSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJLWJhc2VkIElPQVBJQyBDb25maWd1cmF0aW9uCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgQ09ORklHX0FDUEkKLQotI2RlZmluZSBJT19BUElDX01BWF9JRAkJMHhGRQotCi1pbnQgX19pbml0IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMgKGludCBpb2FwaWMpCi17Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDEJcmVnXzAxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZWdfMDEuYml0cy5lbnRyaWVzOwotfQotCi0KLWludCBpb19hcGljX3NldF9wY2lfcm91dGluZyAoaW50IGlvYXBpYywgaW50IHBpbiwgaW50IGlycSwgaW50IHRyaWdnZXJpbmcsIGludCBwb2xhcml0eSkKLXsKLQlpZiAoIUlPX0FQSUNfSVJRKGlycSkpIHsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCxLRVJOX0VSUiAiSU9BUElDWyVkXTogSW52YWxpZCByZWZlcmVuY2UgdG8gSVJRIDBcbiIsCi0JCQlpb2FwaWMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIElSUXMgPCAxNiBhcmUgYWxyZWFkeSBpbiB0aGUgaXJxXzJfcGluW10gbWFwCi0JICovCi0JaWYgKGlycSA+PSAxNikKLQkJYWRkX3Bpbl90b19pcnEoaXJxLCBpb2FwaWMsIHBpbik7Ci0KLQlzZXR1cF9JT19BUElDX2lycShpb2FwaWMsIHBpbiwgaXJxLCB0cmlnZ2VyaW5nLCBwb2xhcml0eSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1pbnQgYWNwaV9nZXRfb3ZlcnJpZGVfaXJxKGludCBidXNfaXJxLCBpbnQgKnRyaWdnZXIsIGludCAqcG9sYXJpdHkpCi17Ci0JaW50IGk7Ci0KLQlpZiAoc2tpcF9pb2FwaWNfc2V0dXApCi0JCXJldHVybiAtMTsKLQotCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKQotCQlpZiAobXBfaXJxc1tpXS5tcF9pcnF0eXBlID09IG1wX0lOVCAmJgotCQkgICAgbXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgPT0gYnVzX2lycSkKLQkJCWJyZWFrOwotCWlmIChpID49IG1wX2lycV9lbnRyaWVzKQotCQlyZXR1cm4gLTE7Ci0KLQkqdHJpZ2dlciA9IGlycV90cmlnZ2VyKGkpOwotCSpwb2xhcml0eSA9IGlycV9wb2xhcml0eShpKTsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCi0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGN1cnJlbnRseSBpcyBvbmx5IGEgaGVscGVyIGZvciB0aGUgaTM4NiBzbXAgYm9vdCBwcm9jZXNzIHdoZXJlCi0gKiB3ZSBuZWVkIHRvIHJlcHJvZ3JhbSB0aGUgaW9yZWR0YmxzIHRvIGNhdGVyIGZvciB0aGUgY3B1cyB3aGljaCBoYXZlIGNvbWUgb25saW5lCi0gKiBzbyBtYXNrIGluIGFsbCBjYXNlcyBzaG91bGQgc2ltcGx5IGJlIFRBUkdFVF9DUFVTCi0gKi8KLSNpZmRlZiBDT05GSUdfU01QCi12b2lkIF9faW5pdCBzZXR1cF9pb2FwaWNfZGVzdCh2b2lkKQotewotCWludCBwaW4sIGlvYXBpYywgaXJxLCBpcnFfZW50cnk7Ci0KLQlpZiAoc2tpcF9pb2FwaWNfc2V0dXAgPT0gMSkKLQkJcmV0dXJuOwotCi0JZm9yIChpb2FwaWMgPSAwOyBpb2FwaWMgPCBucl9pb2FwaWNzOyBpb2FwaWMrKykgewotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbaW9hcGljXTsgcGluKyspIHsKLQkJCWlycV9lbnRyeSA9IGZpbmRfaXJxX2VudHJ5KGlvYXBpYywgcGluLCBtcF9JTlQpOwotCQkJaWYgKGlycV9lbnRyeSA9PSAtMSkKLQkJCQljb250aW51ZTsKLQkJCWlycSA9IHBpbl8yX2lycShpcnFfZW50cnksIGlvYXBpYywgcGluKTsKLQotCQkJLyogc2V0dXBfSU9fQVBJQ19pcnFzIGNvdWxkIGZhaWwgdG8gZ2V0IHZlY3RvciBmb3Igc29tZSBkZXZpY2UKLQkJCSAqIHdoZW4geW91IGhhdmUgdG9vIG1hbnkgZGV2aWNlcywgYmVjYXVzZSBhdCB0aGF0IHRpbWUgb25seSBib290Ci0JCQkgKiBjcHUgaXMgb25saW5lLgotCQkJICovCi0JCQlpZiAoIWlycV9jZmdbaXJxXS52ZWN0b3IpCi0JCQkJc2V0dXBfSU9fQVBJQ19pcnEoaW9hcGljLCBwaW4sIGlycSwKLQkJCQkJCSAgaXJxX3RyaWdnZXIoaXJxX2VudHJ5KSwKLQkJCQkJCSAgaXJxX3BvbGFyaXR5KGlycV9lbnRyeSkpOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JCQllbHNlIGlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKQotCQkJCXNldF9pcl9pb2FwaWNfYWZmaW5pdHlfaXJxKGlycSwgVEFSR0VUX0NQVVMpOwotI2VuZGlmCi0JCQllbHNlCi0JCQkJc2V0X2lvYXBpY19hZmZpbml0eV9pcnEoaXJxLCBUQVJHRVRfQ1BVUyk7Ci0JCX0KLQotCX0KLX0KLSNlbmRpZgotCi0jZGVmaW5lIElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkUgMTEKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqaW9hcGljX3Jlc291cmNlczsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqIF9faW5pdCBpb2FwaWNfc2V0dXBfcmVzb3VyY2VzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBuOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWNoYXIgKm1lbTsKLQlpbnQgaTsKLQotCWlmIChucl9pb2FwaWNzIDw9IDApCi0JCXJldHVybiBOVUxMOwotCi0JbiA9IElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkUgKyBzaXplb2Yoc3RydWN0IHJlc291cmNlKTsKLQluICo9IG5yX2lvYXBpY3M7Ci0KLQltZW0gPSBhbGxvY19ib290bWVtKG4pOwotCXJlcyA9ICh2b2lkICopbWVtOwotCi0JaWYgKG1lbSAhPSBOVUxMKSB7Ci0JCW1lbSArPSBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIG5yX2lvYXBpY3M7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewotCQkJcmVzW2ldLm5hbWUgPSBtZW07Ci0JCQlyZXNbaV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKLQkJCXNwcmludGYobWVtLCAgIklPQVBJQyAldSIsIGkpOwotCQkJbWVtICs9IElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkU7Ci0JCX0KLQl9Ci0KLQlpb2FwaWNfcmVzb3VyY2VzID0gcmVzOwotCi0JcmV0dXJuIHJlczsKLX0KLQotdm9pZCBfX2luaXQgaW9hcGljX2luaXRfbWFwcGluZ3Modm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGlvYXBpY19waHlzLCBpZHggPSBGSVhfSU9fQVBJQ19CQVNFXzA7Ci0Jc3RydWN0IHJlc291cmNlICppb2FwaWNfcmVzOwotCWludCBpOwotCi0JaW9hcGljX3JlcyA9IGlvYXBpY19zZXR1cF9yZXNvdXJjZXMoKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7Ci0JCWlmIChzbXBfZm91bmRfY29uZmlnKSB7Ci0JCQlpb2FwaWNfcGh5cyA9IG1wX2lvYXBpY3NbaV0ubXBfYXBpY2FkZHI7Ci0JCX0gZWxzZSB7Ci0JCQlpb2FwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKQotCQkJCWFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKLQkJCWlvYXBpY19waHlzID0gX19wYShpb2FwaWNfcGh5cyk7Ci0JCX0KLQkJc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgaW9hcGljX3BoeXMpOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsCi0JCQkgICAgIm1hcHBlZCBJT0FQSUMgdG8gJTAxNmx4ICglMDE2bHgpXG4iLAotCQkJICAgIF9fZml4X3RvX3ZpcnQoaWR4KSwgaW9hcGljX3BoeXMpOwotCQlpZHgrKzsKLQotCQlpZiAoaW9hcGljX3JlcyAhPSBOVUxMKSB7Ci0JCQlpb2FwaWNfcmVzLT5zdGFydCA9IGlvYXBpY19waHlzOwotCQkJaW9hcGljX3Jlcy0+ZW5kID0gaW9hcGljX3BoeXMgKyAoNCAqIDEwMjQpIC0gMTsKLQkJCWlvYXBpY19yZXMrKzsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgaW9hcGljX2luc2VydF9yZXNvdXJjZXModm9pZCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBpb2FwaWNfcmVzb3VyY2VzOwotCi0JaWYgKCFyKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIklPIEFQSUMgcmVzb3VyY2VzIGNvdWxkIGJlIG5vdCBiZSBhbGxvY2F0ZWQuXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKLQkJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcik7Ci0JCXIrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogSW5zZXJ0IHRoZSBJTyBBUElDIHJlc291cmNlcyBhZnRlciBQQ0kgaW5pdGlhbGl6YXRpb24gaGFzIG9jY3VyZWQgdG8gaGFuZGxlCi0gKiBJTyBBUElDUyB0aGF0IGFyZSBtYXBwZWQgaW4gb24gYSBCQVIgaW4gUENJIHNwYWNlLiAqLwotbGF0ZV9pbml0Y2FsbChpb2FwaWNfaW5zZXJ0X3Jlc291cmNlcyk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2Y2YzUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29tbW9uIGludGVycnVwdCBjb2RlIGZvciAzMiBhbmQgNjQgYml0CisgKi8KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorCithdG9taWNfdCBpcnFfZXJyX2NvdW50OworCisvKgorICogJ3doYXQgc2hvdWxkIHdlIGRvIGlmIHdlIGdldCBhIGh3IGlycSBldmVudCBvbiBhbiBpbGxlZ2FsIHZlY3RvcicuCisgKiBlYWNoIGFyY2hpdGVjdHVyZSBoYXMgdG8gYW5zd2VyIHRoaXMgdGhlbXNlbHZlcy4KKyAqLwordm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXByaW50ayhLRVJOX0VSUiAidW5leHBlY3RlZCBJUlEgdHJhcCBhdCB2ZWN0b3IgJTAyeFxuIiwgaXJxKTsKKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCS8qCisJICogQ3VycmVudGx5IHVuZXhwZWN0ZWQgdmVjdG9ycyBoYXBwZW4gb25seSBvbiBTTVAgYW5kIEFQSUMuCisJICogV2UgX211c3RfIGFjayB0aGVzZSBiZWNhdXNlIGV2ZXJ5IGxvY2FsIEFQSUMgaGFzIG9ubHkgTgorCSAqIGlycSBzbG90cyBwZXIgcHJpb3JpdHkgbGV2ZWwsIGFuZCBhICdoYW5naW5nLCB1bmFja2VkJyBJUlEKKwkgKiBob2xkcyB1cCBhbiBpcnEgc2xvdCAtIGluIGV4Y2Vzc2l2ZSBjYXNlcyAod2hlbiBtdWx0aXBsZQorCSAqIHVuZXhwZWN0ZWQgdmVjdG9ycyBvY2N1cikgdGhhdCBtaWdodCBsb2NrIHVwIHRoZSBBUElDCisJICogY29tcGxldGVseS4KKwkgKiBCdXQgb25seSBhY2sgd2hlbiB0aGUgQVBJQyBpcyBlbmFibGVkIC1BSworCSAqLworCWlmIChjcHVfaGFzX2FwaWMpCisJCWFja19BUElDX2lycSgpOworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBpcnFfc3RhdHMoeCkJCSgmcGVyX2NwdShpcnFfc3RhdCx4KSkKKyNlbHNlCisjIGRlZmluZSBpcnFfc3RhdHMoeCkJCWNwdV9wZGEoeCkKKyNlbmRpZgorLyoKKyAqIC9wcm9jL2ludGVycnVwdHMgcHJpbnRpbmc6CisgKi8KK3N0YXRpYyBpbnQgc2hvd19vdGhlcl9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCkKK3sKKwlpbnQgajsKKworCXNlcV9wcmludGYocCwgIk5NSTogIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+X19ubWlfY291bnQpOworCXNlcV9wcmludGYocCwgIiAgTm9uLW1hc2thYmxlIGludGVycnVwdHNcbiIpOworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCXNlcV9wcmludGYocCwgIkxPQzogIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+YXBpY190aW1lcl9pcnFzKTsKKwlzZXFfcHJpbnRmKHAsICIgIExvY2FsIHRpbWVyIGludGVycnVwdHNcbiIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NNUAorCXNlcV9wcmludGYocCwgIlJFUzogIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3Jlc2NoZWRfY291bnQpOworCXNlcV9wcmludGYocCwgIiAgUmVzY2hlZHVsaW5nIGludGVycnVwdHNcbiIpOworCXNlcV9wcmludGYocCwgIkNBTDogIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX2NhbGxfY291bnQpOworCXNlcV9wcmludGYocCwgIiAgRnVuY3Rpb24gY2FsbCBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHJpbnRmKHAsICJUTEI6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV90bGJfY291bnQpOworCXNlcV9wcmludGYocCwgIiAgVExCIHNob290ZG93bnNcbiIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKKwlzZXFfcHJpbnRmKHAsICJUUk06ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV90aGVybWFsX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIFRoZXJtYWwgZXZlbnQgaW50ZXJydXB0c1xuIik7CisjIGlmZGVmIENPTkZJR19YODZfNjQKKwlzZXFfcHJpbnRmKHAsICJUSFI6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV90aHJlc2hvbGRfY291bnQpOworCXNlcV9wcmludGYocCwgIiAgVGhyZXNob2xkIEFQSUMgaW50ZXJydXB0c1xuIik7CisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlzZXFfcHJpbnRmKHAsICJTUFU6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9zcHVyaW91c19jb3VudCk7CisJc2VxX3ByaW50ZihwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKKyNlbmRpZgorCXNlcV9wcmludGYocCwgIkVSUjogJTEwdVxuIiwgYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpKTsKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykKKwlzZXFfcHJpbnRmKHAsICJNSVM6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfbWlzX2NvdW50KSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgYW55X2NvdW50ID0gMDsKKwlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7CisJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWlmIChpID4gbnJfaXJxcykKKwkJcmV0dXJuIDA7CisKKwlpZiAoaSA9PSBucl9pcnFzKQorCQlyZXR1cm4gc2hvd19vdGhlcl9pbnRlcnJ1cHRzKHApOworCisJLyogcHJpbnQgaGVhZGVyICovCisJaWYgKGkgPT0gMCkgeworCQlzZXFfcHJpbnRmKHAsICIgICAgICAgICAgICIpOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCQlzZXFfcHJpbnRmKHAsICJDUFUlLThkIixqKTsKKwkJc2VxX3B1dGMocCwgJ1xuJyk7CisJfQorCisJZGVzYyA9IGlycV90b19kZXNjKGkpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisjaWZuZGVmIENPTkZJR19TTVAKKwlhbnlfY291bnQgPSBrc3RhdF9pcnFzKGkpOworI2Vsc2UKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCWFueV9jb3VudCB8PSBrc3RhdF9pcnFzX2NwdShpLCBqKTsKKyNlbmRpZgorCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKKwlpZiAoIWFjdGlvbiAmJiAhYW55X2NvdW50KQorCQlnb3RvIG91dDsKKworCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CisjaWZuZGVmIENPTkZJR19TTVAKKwlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOworI2Vsc2UKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOworI2VuZGlmCisJc2VxX3ByaW50ZihwLCAiICU4cyIsIGRlc2MtPmNoaXAtPm5hbWUpOworCXNlcV9wcmludGYocCwgIi0lLThzIiwgZGVzYy0+bmFtZSk7CisKKwlpZiAoYWN0aW9uKSB7CisJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOworCQl3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkgIT0gTlVMTCkKKwkJCXNlcV9wcmludGYocCwgIiwgJXMiLCBhY3Rpb24tPm5hbWUpOworCX0KKworCXNlcV9wdXRjKHAsICdcbicpOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIC9wcm9jL3N0YXQgaGVscGVycworICovCit1NjQgYXJjaF9pcnFfc3RhdF9jcHUodW5zaWduZWQgaW50IGNwdSkKK3sKKwl1NjQgc3VtID0gaXJxX3N0YXRzKGNwdSktPl9fbm1pX2NvdW50OworCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5hcGljX3RpbWVyX2lycXM7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU01QCisJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfcmVzY2hlZF9jb3VudDsKKwlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmlycV9jYWxsX2NvdW50OworCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3RsYl9jb3VudDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfTUNFCisJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfdGhlcm1hbF9jb3VudDsKKyMgaWZkZWYgQ09ORklHX1g4Nl82NAorCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3RocmVzaG9sZF9jb3VudDsKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfc3B1cmlvdXNfY291bnQ7CisjZW5kaWYKKwlyZXR1cm4gc3VtOworfQorCit1NjQgYXJjaF9pcnFfc3RhdCh2b2lkKQoreworCXU2NCBzdW0gPSBhdG9taWNfcmVhZCgmaXJxX2Vycl9jb3VudCk7CisKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwlzdW0gKz0gYXRvbWljX3JlYWQoJmlycV9taXNfY291bnQpOworI2VuZGlmCisJcmV0dXJuIHN1bTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYwppbmRleCBiNzFlMDJkLi5hNTEzODI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCkBAIC0yNSwyOSArMjUsNiBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IHB0X3JlZ3MgKiwgaXJxX3JlZ3MpOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGlycV9yZWdzKTsKIAotLyoKLSAqICd3aGF0IHNob3VsZCB3ZSBkbyBpZiB3ZSBnZXQgYSBodyBpcnEgZXZlbnQgb24gYW4gaWxsZWdhbCB2ZWN0b3InLgotICogZWFjaCBhcmNoaXRlY3R1cmUgaGFzIHRvIGFuc3dlciB0aGlzIHRoZW1zZWx2ZXMuCi0gKi8KLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlwcmludGsoS0VSTl9FUlIgInVuZXhwZWN0ZWQgSVJRIHRyYXAgYXQgdmVjdG9yICUwMnhcbiIsIGlycSk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQkvKgotCSAqIEN1cnJlbnRseSB1bmV4cGVjdGVkIHZlY3RvcnMgaGFwcGVuIG9ubHkgb24gU01QIGFuZCBBUElDLgotCSAqIFdlIF9tdXN0XyBhY2sgdGhlc2UgYmVjYXVzZSBldmVyeSBsb2NhbCBBUElDIGhhcyBvbmx5IE4KLQkgKiBpcnEgc2xvdHMgcGVyIHByaW9yaXR5IGxldmVsLCBhbmQgYSAnaGFuZ2luZywgdW5hY2tlZCcgSVJRCi0JICogaG9sZHMgdXAgYW4gaXJxIHNsb3QgLSBpbiBleGNlc3NpdmUgY2FzZXMgKHdoZW4gbXVsdGlwbGUKLQkgKiB1bmV4cGVjdGVkIHZlY3RvcnMgb2NjdXIpIHRoYXQgbWlnaHQgbG9jayB1cCB0aGUgQVBJQwotCSAqIGNvbXBsZXRlbHkuCi0JICogQnV0IG9ubHkgYWNrIHdoZW4gdGhlIEFQSUMgaXMgZW5hYmxlZCAtQUsKLQkgKi8KLQlpZiAoY3B1X2hhc19hcGljKQotCQlhY2tfQVBJQ19pcnEoKTsKLSNlbmRpZgotfQotCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cKIC8qIERlYnVnZ2luZyBjaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3c6IGlzIHRoZXJlIGxlc3MgdGhhbiAxS0IgZnJlZT8gKi8KIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfb3ZlcmZsb3codm9pZCkKQEAgLTIyMywyMCArMjAwLDI1IEBACiB7CiAJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzOwogCS8qIGhpZ2ggYml0IHVzZWQgaW4gcmV0X2Zyb21fIGNvZGUgKi8KLQlpbnQgb3ZlcmZsb3csIGlycSA9IH5yZWdzLT5vcmlnX2F4OwotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCWludCBvdmVyZmxvdzsKKwl1bnNpZ25lZCB2ZWN0b3IgPSB+cmVncy0+b3JpZ19heDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJdW5zaWduZWQgaXJxOwogCi0JaWYgKHVubGlrZWx5KCh1bnNpZ25lZClpcnEgPj0gTlJfSVJRUykpIHsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBjYW5ub3QgaGFuZGxlIElSUSAlZFxuIiwKLQkJCQkJX19mdW5jX18sIGlycSk7Ci0JCUJVRygpOwotCX0KIAogCW9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogCWlycV9lbnRlcigpOworCWlycSA9IF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXTsKIAogCW92ZXJmbG93ID0gY2hlY2tfc3RhY2tfb3ZlcmZsb3coKTsKIAorCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWlmICh1bmxpa2VseSghZGVzYykpIHsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBjYW5ub3QgaGFuZGxlIElSUSAlZCB2ZWN0b3IgJSN4IGNwdSAlZFxuIiwKKwkJCQkJX19mdW5jX18sIGlycSwgdmVjdG9yLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQlCVUcoKTsKKwl9CisKIAlpZiAoIWV4ZWN1dGVfb25faXJxX3N0YWNrKG92ZXJmbG93LCBkZXNjLCBpcnEpKSB7CiAJCWlmICh1bmxpa2VseShvdmVyZmxvdykpCiAJCQlwcmludF9zdGFja19vdmVyZmxvdygpOwpAQCAtMjQ4LDE0NiArMjMwLDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyoKLSAqIEludGVycnVwdCBzdGF0aXN0aWNzOgotICovCi0KLWF0b21pY190IGlycV9lcnJfY291bnQ7Ci0KLS8qCi0gKiAvcHJvYy9pbnRlcnJ1cHRzIHByaW50aW5nOgotICovCi0KLWludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQotewotCWludCBpID0gKihsb2ZmX3QgKikgdiwgajsKLQlzdHJ1Y3QgaXJxYWN0aW9uICogYWN0aW9uOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoaSA9PSAwKSB7Ci0JCXNlcV9wcmludGYocCwgIiAgICAgICAgICAgIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIkNQVSUtOGQiLGopOwotCQlzZXFfcHV0YyhwLCAnXG4nKTsKLQl9Ci0KLQlpZiAoaSA8IE5SX0lSUVMpIHsKLQkJdW5zaWduZWQgYW55X2NvdW50ID0gMDsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwotI2lmbmRlZiBDT05GSUdfU01QCi0JCWFueV9jb3VudCA9IGtzdGF0X2lycXMoaSk7Ci0jZWxzZQotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlhbnlfY291bnQgfD0ga3N0YXRfY3B1KGopLmlycXNbaV07Ci0jZW5kaWYKLQkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOwotCQlpZiAoIWFjdGlvbiAmJiAhYW55X2NvdW50KQotCQkJZ290byBza2lwOwotCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsaSk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKLSNlbHNlCi0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOwotI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIiAlOHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKLQkJc2VxX3ByaW50ZihwLCAiLSUtOHMiLCBpcnFfZGVzY1tpXS5uYW1lKTsKLQotCQlpZiAoYWN0aW9uKSB7Ci0JCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKLQkJCXdoaWxlICgoYWN0aW9uID0gYWN0aW9uLT5uZXh0KSAhPSBOVUxMKQotCQkJCXNlcV9wcmludGYocCwgIiwgJXMiLCBhY3Rpb24tPm5hbWUpOwotCQl9Ci0KLQkJc2VxX3B1dGMocCwgJ1xuJyk7Ci1za2lwOgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7Ci0JfSBlbHNlIGlmIChpID09IE5SX0lSUVMpIHsKLQkJc2VxX3ByaW50ZihwLCAiTk1JOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBubWlfY291bnQoaikpOwotCQlzZXFfcHJpbnRmKHAsICIgIE5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXG4iKTsKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQkJc2VxX3ByaW50ZihwLCAiTE9DOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLAotCQkJCXBlcl9jcHUoaXJxX3N0YXQsaikuYXBpY190aW1lcl9pcnFzKTsKLQkJc2VxX3ByaW50ZihwLCAiICBMb2NhbCB0aW1lciBpbnRlcnJ1cHRzXG4iKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TTVAKLQkJc2VxX3ByaW50ZihwLCAiUkVTOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLAotCQkJCXBlcl9jcHUoaXJxX3N0YXQsaikuaXJxX3Jlc2NoZWRfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIFJlc2NoZWR1bGluZyBpbnRlcnJ1cHRzXG4iKTsKLQkJc2VxX3ByaW50ZihwLCAiQ0FMOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLAotCQkJCXBlcl9jcHUoaXJxX3N0YXQsaikuaXJxX2NhbGxfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIEZ1bmN0aW9uIGNhbGwgaW50ZXJydXB0c1xuIik7Ci0JCXNlcV9wcmludGYocCwgIlRMQjogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKLQkJCQlwZXJfY3B1KGlycV9zdGF0LGopLmlycV90bGJfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIFRMQiBzaG9vdGRvd25zXG4iKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfTUNFCi0JCXNlcV9wcmludGYocCwgIlRSTTogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKLQkJCQlwZXJfY3B1KGlycV9zdGF0LGopLmlycV90aGVybWFsX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBUaGVybWFsIGV2ZW50IGludGVycnVwdHNcbiIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JCXNlcV9wcmludGYocCwgIlNQVTogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKLQkJCQlwZXJfY3B1KGlycV9zdGF0LGopLmlycV9zcHVyaW91c19jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgU3B1cmlvdXMgaW50ZXJydXB0c1xuIik7Ci0jZW5kaWYKLQkJc2VxX3ByaW50ZihwLCAiRVJSOiAlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX2Vycl9jb3VudCkpOwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9JT19BUElDKQotCQlzZXFfcHJpbnRmKHAsICJNSVM6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfbWlzX2NvdW50KSk7Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiAvcHJvYy9zdGF0IGhlbHBlcnMKLSAqLwotdTY0IGFyY2hfaXJxX3N0YXRfY3B1KHVuc2lnbmVkIGludCBjcHUpCi17Ci0JdTY0IHN1bSA9IG5taV9jb3VudChjcHUpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0Jc3VtICs9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuYXBpY190aW1lcl9pcnFzOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NNUAotCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmlycV9yZXNjaGVkX2NvdW50OwotCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmlycV9jYWxsX2NvdW50OwotCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmlycV90bGJfY291bnQ7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X01DRQotCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmlycV90aGVybWFsX2NvdW50OwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0Jc3VtICs9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkuaXJxX3NwdXJpb3VzX2NvdW50OwotI2VuZGlmCi0JcmV0dXJuIHN1bTsKLX0KLQotdTY0IGFyY2hfaXJxX3N0YXQodm9pZCkKLXsKLQl1NjQgc3VtID0gYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0Jc3VtICs9IGF0b21pY19yZWFkKCZpcnFfbWlzX2NvdW50KTsKLSNlbmRpZgotCXJldHVybiBzdW07Ci19Ci0KICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKICNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KIApAQCAtMzk1LDIwICsyMzcsMjIgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCXN0YXRpYyBpbnQgd2FybmVkOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAotCWZvciAoaXJxID0gMDsgaXJxIDwgTlJfSVJRUzsgaXJxKyspIHsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKIAkJY3B1bWFza190IG1hc2s7CisKIAkJaWYgKGlycSA9PSAyKQogCQkJY29udGludWU7CiAKLQkJY3B1c19hbmQobWFzaywgaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgbWFwKTsKKwkJY3B1c19hbmQobWFzaywgZGVzYy0+YWZmaW5pdHksIG1hcCk7CiAJCWlmIChhbnlfb25saW5lX2NwdShtYXNrKSA9PSBOUl9DUFVTKSB7CiAJCQlwcmludGsoIkJyZWFraW5nIGFmZmluaXR5IGZvciBpcnEgJWlcbiIsIGlycSk7CiAJCQltYXNrID0gbWFwOwogCQl9Ci0JCWlmIChpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eSkKLQkJCWlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5KGlycSwgbWFzayk7Ci0JCWVsc2UgaWYgKGlycV9kZXNjW2lycV0uYWN0aW9uICYmICEod2FybmVkKyspKQorCQlpZiAoZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KQorCQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgbWFzayk7CisJCWVsc2UgaWYgKGRlc2MtPmFjdGlvbiAmJiAhKHdhcm5lZCsrKSkKIAkJCXByaW50aygiQ2Fubm90IHNldCBhZmZpbml0eSBmb3IgaXJxICVpXG4iLCBpcnEpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycV82NC5jIGIvYXJjaC94ODYva2VybmVsL2lycV82NC5jCmluZGV4IGYwNjVmZTkuLjYwZWI4NGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzY0LmMKQEAgLTE4LDI4ICsxOCw2IEBACiAjaW5jbHVkZSA8YXNtL2lkbGUuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKLWF0b21pY190IGlycV9lcnJfY291bnQ7Ci0KLS8qCi0gKiAnd2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yJy4KLSAqIGVhY2ggYXJjaGl0ZWN0dXJlIGhhcyB0byBhbnN3ZXIgdGhpcyB0aGVtc2VsdmVzLgotICovCi12b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAidW5leHBlY3RlZCBJUlEgdHJhcCBhdCB2ZWN0b3IgJTAyeFxuIiwgaXJxKTsKLQkvKgotCSAqIEN1cnJlbnRseSB1bmV4cGVjdGVkIHZlY3RvcnMgaGFwcGVuIG9ubHkgb24gU01QIGFuZCBBUElDLgotCSAqIFdlIF9tdXN0XyBhY2sgdGhlc2UgYmVjYXVzZSBldmVyeSBsb2NhbCBBUElDIGhhcyBvbmx5IE4KLQkgKiBpcnEgc2xvdHMgcGVyIHByaW9yaXR5IGxldmVsLCBhbmQgYSAnaGFuZ2luZywgdW5hY2tlZCcgSVJRCi0JICogaG9sZHMgdXAgYW4gaXJxIHNsb3QgLSBpbiBleGNlc3NpdmUgY2FzZXMgKHdoZW4gbXVsdGlwbGUKLQkgKiB1bmV4cGVjdGVkIHZlY3RvcnMgb2NjdXIpIHRoYXQgbWlnaHQgbG9jayB1cCB0aGUgQVBJQwotCSAqIGNvbXBsZXRlbHkuCi0JICogQnV0IGRvbid0IGFjayB3aGVuIHRoZSBBUElDIGlzIGRpc2FibGVkLiAtQUsKLQkgKi8KLQlpZiAoIWRpc2FibGVfYXBpYykKLQkJYWNrX0FQSUNfaXJxKCk7Ci19Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVwogLyoKICAqIFByb2JhYmlsaXN0aWMgc3RhY2sgb3ZlcmZsb3cgY2hlY2s6CkBAIC02NSwxMjIgKzQzLDYgQEAKICNlbmRpZgogCiAvKgotICogR2VuZXJpYywgY29udHJvbGxlci1pbmRlcGVuZGVudCBmdW5jdGlvbnM6Ci0gKi8KLQotaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCi17Ci0JaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqOwotCXN0cnVjdCBpcnFhY3Rpb24gKiBhY3Rpb247Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChpID09IDApIHsKLQkJc2VxX3ByaW50ZihwLCAiICAgICAgICAgICAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiQ1BVJS04ZCIsaik7Ci0JCXNlcV9wdXRjKHAsICdcbicpOwotCX0KLQotCWlmIChpIDwgTlJfSVJRUykgewotCQl1bnNpZ25lZCBhbnlfY291bnQgPSAwOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQkJYW55X2NvdW50ID0ga3N0YXRfaXJxcyhpKTsKLSNlbHNlCi0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCWFueV9jb3VudCB8PSBrc3RhdF9jcHUoaikuaXJxc1tpXTsKLSNlbmRpZgotCQlhY3Rpb24gPSBpcnFfZGVzY1tpXS5hY3Rpb247Ci0JCWlmICghYWN0aW9uICYmICFhbnlfY291bnQpCi0JCQlnb3RvIHNraXA7Ci0JCXNlcV9wcmludGYocCwgIiUzZDogIixpKTsKLSNpZm5kZWYgQ09ORklHX1NNUAotCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwotI2Vsc2UKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7Ci0jZW5kaWYKLQkJc2VxX3ByaW50ZihwLCAiICU4cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOwotCQlzZXFfcHJpbnRmKHAsICItJS04cyIsIGlycV9kZXNjW2ldLm5hbWUpOwotCi0JCWlmIChhY3Rpb24pIHsKLQkJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwotCQkJd2hpbGUgKChhY3Rpb24gPSBhY3Rpb24tPm5leHQpICE9IE5VTEwpCi0JCQkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7Ci0JCX0KLQkJc2VxX3B1dGMocCwgJ1xuJyk7Ci1za2lwOgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7Ci0JfSBlbHNlIGlmIChpID09IE5SX0lSUVMpIHsKLQkJc2VxX3ByaW50ZihwLCAiTk1JOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfcGRhKGopLT5fX25taV9jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgTm9uLW1hc2thYmxlIGludGVycnVwdHNcbiIpOwotCQlzZXFfcHJpbnRmKHAsICJMT0M6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGNwdV9wZGEoaiktPmFwaWNfdGltZXJfaXJxcyk7Ci0JCXNlcV9wcmludGYocCwgIiAgTG9jYWwgdGltZXIgaW50ZXJydXB0c1xuIik7Ci0jaWZkZWYgQ09ORklHX1NNUAotCQlzZXFfcHJpbnRmKHAsICJSRVM6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGNwdV9wZGEoaiktPmlycV9yZXNjaGVkX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBSZXNjaGVkdWxpbmcgaW50ZXJydXB0c1xuIik7Ci0JCXNlcV9wcmludGYocCwgIkNBTDogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgY3B1X3BkYShqKS0+aXJxX2NhbGxfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIEZ1bmN0aW9uIGNhbGwgaW50ZXJydXB0c1xuIik7Ci0JCXNlcV9wcmludGYocCwgIlRMQjogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgY3B1X3BkYShqKS0+aXJxX3RsYl9jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgVExCIHNob290ZG93bnNcbiIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9NQ0UKLQkJc2VxX3ByaW50ZihwLCAiVFJNOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfcGRhKGopLT5pcnFfdGhlcm1hbF9jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgVGhlcm1hbCBldmVudCBpbnRlcnJ1cHRzXG4iKTsKLQkJc2VxX3ByaW50ZihwLCAiVEhSOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfcGRhKGopLT5pcnFfdGhyZXNob2xkX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBUaHJlc2hvbGQgQVBJQyBpbnRlcnJ1cHRzXG4iKTsKLSNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICJTUFU6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGNwdV9wZGEoaiktPmlycV9zcHVyaW91c19jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgU3B1cmlvdXMgaW50ZXJydXB0c1xuIik7Ci0JCXNlcV9wcmludGYocCwgIkVSUjogJTEwdVxuIiwgYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiAvcHJvYy9zdGF0IGhlbHBlcnMKLSAqLwotdTY0IGFyY2hfaXJxX3N0YXRfY3B1KHVuc2lnbmVkIGludCBjcHUpCi17Ci0JdTY0IHN1bSA9IGNwdV9wZGEoY3B1KS0+X19ubWlfY291bnQ7Ci0KLQlzdW0gKz0gY3B1X3BkYShjcHUpLT5hcGljX3RpbWVyX2lycXM7Ci0jaWZkZWYgQ09ORklHX1NNUAotCXN1bSArPSBjcHVfcGRhKGNwdSktPmlycV9yZXNjaGVkX2NvdW50OwotCXN1bSArPSBjcHVfcGRhKGNwdSktPmlycV9jYWxsX2NvdW50OwotCXN1bSArPSBjcHVfcGRhKGNwdSktPmlycV90bGJfY291bnQ7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X01DRQotCXN1bSArPSBjcHVfcGRhKGNwdSktPmlycV90aGVybWFsX2NvdW50OwotCXN1bSArPSBjcHVfcGRhKGNwdSktPmlycV90aHJlc2hvbGRfY291bnQ7Ci0jZW5kaWYKLQlzdW0gKz0gY3B1X3BkYShjcHUpLT5pcnFfc3B1cmlvdXNfY291bnQ7Ci0JcmV0dXJuIHN1bTsKLX0KLQotdTY0IGFyY2hfaXJxX3N0YXQodm9pZCkKLXsKLQlyZXR1cm4gYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpOwotfQotCi0vKgogICogZG9fSVJRIGhhbmRsZXMgYWxsIG5vcm1hbCBkZXZpY2UgSVJRJ3MgKHRoZSBzcGVjaWFsCiAgKiBTTVAgY3Jvc3MtQ1BVIGludGVycnVwdHMgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMKICAqIGhhbmRsZXJzKS4KQEAgLTE4OCw2ICs1MCw3IEBACiBhc21saW5rYWdlIHVuc2lnbmVkIGludCBkb19JUlEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAogCS8qIGhpZ2ggYml0IHVzZWQgaW4gcmV0X2Zyb21fIGNvZGUgICovCiAJdW5zaWduZWQgdmVjdG9yID0gfnJlZ3MtPm9yaWdfYXg7CkBAIC0yMDEsOCArNjQsOSBAQAogCXN0YWNrX292ZXJmbG93X2NoZWNrKHJlZ3MpOwogI2VuZGlmCiAKLQlpZiAobGlrZWx5KGlycSA8IE5SX0lSUVMpKQotCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlpZiAobGlrZWx5KGRlc2MpKQorCQlnZW5lcmljX2hhbmRsZV9pcnFfZGVzYyhpcnEsIGRlc2MpOwogCWVsc2UgewogCQlpZiAoIWRpc2FibGVfYXBpYykKIAkJCWFja19BUElDX2lycSgpOwpAQCAtMjIzLDggKzg3LDkgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCXN0YXRpYyBpbnQgd2FybmVkOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAotCWZvciAoaXJxID0gMDsgaXJxIDwgTlJfSVJRUzsgaXJxKyspIHsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKIAkJY3B1bWFza190IG1hc2s7CiAJCWludCBicmVha19hZmZpbml0eSA9IDA7CiAJCWludCBzZXRfYWZmaW5pdHkgPSAxOwpAQCAtMjMzLDMyICs5OCwzMiBAQAogCQkJY29udGludWU7CiAKIAkJLyogaW50ZXJydXB0J3MgYXJlIGRpc2FibGVkIGF0IHRoaXMgcG9pbnQgKi8KLQkJc3Bpbl9sb2NrKCZpcnFfZGVzY1tpcnFdLmxvY2spOworCQlzcGluX2xvY2soJmRlc2MtPmxvY2spOwogCiAJCWlmICghaXJxX2hhc19hY3Rpb24oaXJxKSB8fAotCQkgICAgY3B1c19lcXVhbChpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBtYXApKSB7Ci0JCQlzcGluX3VubG9jaygmaXJxX2Rlc2NbaXJxXS5sb2NrKTsKKwkJICAgIGNwdXNfZXF1YWwoZGVzYy0+YWZmaW5pdHksIG1hcCkpIHsKKwkJCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJY3B1c19hbmQobWFzaywgaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgbWFwKTsKKwkJY3B1c19hbmQobWFzaywgZGVzYy0+YWZmaW5pdHksIG1hcCk7CiAJCWlmIChjcHVzX2VtcHR5KG1hc2spKSB7CiAJCQlicmVha19hZmZpbml0eSA9IDE7CiAJCQltYXNrID0gbWFwOwogCQl9CiAKLQkJaWYgKGlycV9kZXNjW2lycV0uY2hpcC0+bWFzaykKLQkJCWlycV9kZXNjW2lycV0uY2hpcC0+bWFzayhpcnEpOworCQlpZiAoZGVzYy0+Y2hpcC0+bWFzaykKKwkJCWRlc2MtPmNoaXAtPm1hc2soaXJxKTsKIAotCQlpZiAoaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkpCi0JCQlpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eShpcnEsIG1hc2spOworCQlpZiAoZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KQorCQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgbWFzayk7CiAJCWVsc2UgaWYgKCEod2FybmVkKyspKQogCQkJc2V0X2FmZmluaXR5ID0gMDsKIAotCQlpZiAoaXJxX2Rlc2NbaXJxXS5jaGlwLT51bm1hc2spCi0JCQlpcnFfZGVzY1tpcnFdLmNoaXAtPnVubWFzayhpcnEpOworCQlpZiAoZGVzYy0+Y2hpcC0+dW5tYXNrKQorCQkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CiAKLQkJc3Bpbl91bmxvY2soJmlycV9kZXNjW2lycV0ubG9jayk7CisJCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIAogCQlpZiAoYnJlYWtfYWZmaW5pdHkgJiYgc2V0X2FmZmluaXR5KQogCQkJcHJpbnRrKCJCcm9rZSBhZmZpbml0eSBmb3IgaXJxICVpXG4iLCBpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycWluaXRfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMKaW5kZXggOTIwMGExZS4uODQ1YWE5OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycWluaXRfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jCkBAIC02OSw2ICs2OSwxMyBAQAogCSAqIDE2IG9sZC1zdHlsZSBJTlRBLWN5Y2xlIGludGVycnVwdHM6CiAJICovCiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJLyogZmlyc3QgdGltZSBjYWxsIHRoaXMgaXJxX2Rlc2MgKi8KKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CisKKwkJZGVzYy0+c3RhdHVzID0gSVJRX0RJU0FCTEVEOworCQlkZXNjLT5hY3Rpb24gPSBOVUxMOworCQlkZXNjLT5kZXB0aCA9IDE7CisKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaSwgJmk4MjU5QV9jaGlwLAogCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAiWFQiKTsKIAl9CkBAIC04Myw2ICs5MCwyNyBAQAogCS5uYW1lID0gImNhc2NhZGUiLAogfTsKIAorREVGSU5FX1BFUl9DUFUodmVjdG9yX2lycV90LCB2ZWN0b3JfaXJxKSA9IHsKKwlbMCAuLi4gSVJRMF9WRUNUT1IgLSAxXSA9IC0xLAorCVtJUlEwX1ZFQ1RPUl0gPSAwLAorCVtJUlExX1ZFQ1RPUl0gPSAxLAorCVtJUlEyX1ZFQ1RPUl0gPSAyLAorCVtJUlEzX1ZFQ1RPUl0gPSAzLAorCVtJUlE0X1ZFQ1RPUl0gPSA0LAorCVtJUlE1X1ZFQ1RPUl0gPSA1LAorCVtJUlE2X1ZFQ1RPUl0gPSA2LAorCVtJUlE3X1ZFQ1RPUl0gPSA3LAorCVtJUlE4X1ZFQ1RPUl0gPSA4LAorCVtJUlE5X1ZFQ1RPUl0gPSA5LAorCVtJUlExMF9WRUNUT1JdID0gMTAsCisJW0lSUTExX1ZFQ1RPUl0gPSAxMSwKKwlbSVJRMTJfVkVDVE9SXSA9IDEyLAorCVtJUlExM19WRUNUT1JdID0gMTMsCisJW0lSUTE0X1ZFQ1RPUl0gPSAxNCwKKwlbSVJRMTVfVkVDVE9SXSA9IDE1LAorCVtJUlExNV9WRUNUT1IgKyAxIC4uLiBOUl9WRUNUT1JTIC0gMV0gPSAtMQorfTsKKwogLyogT3ZlcnJpZGRlbiBpbiBwYXJhdmlydC5jICovCiB2b2lkIGluaXRfSVJRKHZvaWQpIF9fYXR0cmlidXRlX18oKHdlYWssIGFsaWFzKCJuYXRpdmVfaW5pdF9JUlEiKSkpOwogCkBAIC05OCwyMiArMTI2LDE0IEBACiAJICogdXMuIChzb21lIG9mIHRoZXNlIHdpbGwgYmUgb3ZlcnJpZGRlbiBhbmQgYmVjb21lCiAJICogJ3NwZWNpYWwnIFNNUCBpbnRlcnJ1cHRzKQogCSAqLwotCWZvciAoaSA9IDA7IGkgPCAoTlJfVkVDVE9SUyAtIEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUik7IGkrKykgewotCQlpbnQgdmVjdG9yID0gRklSU1RfRVhURVJOQUxfVkVDVE9SICsgaTsKLQkJaWYgKGkgPj0gTlJfSVJRUykKLQkJCWJyZWFrOworCWZvciAoaSA9ICBGSVJTVF9FWFRFUk5BTF9WRUNUT1I7IGkgPCBOUl9WRUNUT1JTOyBpKyspIHsKIAkJLyogU1lTQ0FMTF9WRUNUT1Igd2FzIHJlc2VydmVkIGluIHRyYXBfaW5pdC4gKi8KLQkJaWYgKCF0ZXN0X2JpdCh2ZWN0b3IsIHVzZWRfdmVjdG9ycykpCi0JCQlzZXRfaW50cl9nYXRlKHZlY3RvciwgaW50ZXJydXB0W2ldKTsKKwkJaWYgKGkgIT0gU1lTQ0FMTF9WRUNUT1IpCisJCQlzZXRfaW50cl9nYXRlKGksIGludGVycnVwdFtpXSk7CiAJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKLQkvKgotCSAqIElSUTAgbXVzdCBiZSBnaXZlbiBhIGZpeGVkIGFzc2lnbm1lbnQgYW5kIGluaXRpYWxpemVkLAotCSAqIGJlY2F1c2UgaXQncyB1c2VkIGJlZm9yZSB0aGUgSU8tQVBJQyBpcyBzZXQgdXAuCi0JICovCi0Jc2V0X2ludHJfZ2F0ZShGSVJTVF9ERVZJQ0VfVkVDVE9SLCBpbnRlcnJ1cHRbMF0pOwogCisjaWYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKIAkvKgogCSAqIFRoZSByZXNjaGVkdWxlIGludGVycnVwdCBpcyBhIENQVS10by1DUFUgcmVzY2hlZHVsZS1oZWxwZXIKIAkgKiBJUEksIGRyaXZlbiBieSB3YWtldXAuCkBAIC0xMjgsNiArMTQ4LDkgQEAKIAogCS8qIElQSSBmb3Igc2luZ2xlIGNhbGwgZnVuY3Rpb24gKi8KIAlzZXRfaW50cl9nYXRlKENBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUiwgY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KTsKKworCS8qIExvdyBwcmlvcml0eSBJUEkgdG8gY2xlYW51cCBhZnRlciBtb3ZpbmcgYW4gaXJxICovCisJc2V0X2ludHJfZ2F0ZShJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUiwgaXJxX21vdmVfY2xlYW51cF9pbnRlcnJ1cHQpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jCmluZGV4IDViNWJlOWQuLmZmMDIzNTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfNjQuYwpAQCAtMTQyLDIzICsxNDIsMTkgQEAKIAlpbml0X2JzcF9BUElDKCk7CiAJaW5pdF84MjU5QSgwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspIHsKLQkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSBOVUxMOwotCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJLyogZmlyc3QgdGltZSBjYWxsIHRoaXMgaXJxX2Rlc2MgKi8KKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CiAKLQkJaWYgKGkgPCAxNikgewotCQkJLyoKLQkJCSAqIDE2IG9sZC1zdHlsZSBJTlRBLWN5Y2xlIGludGVycnVwdHM6Ci0JCQkgKi8KLQkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGksICZpODI1OUFfY2hpcCwKKwkJZGVzYy0+c3RhdHVzID0gSVJRX0RJU0FCTEVEOworCQlkZXNjLT5hY3Rpb24gPSBOVUxMOworCQlkZXNjLT5kZXB0aCA9IDE7CisKKwkJLyoKKwkJICogMTYgb2xkLXN0eWxlIElOVEEtY3ljbGUgaW50ZXJydXB0czoKKwkJICovCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGksICZpODI1OUFfY2hpcCwKIAkJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJYVCIpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqICdoaWdoJyBQQ0kgSVJRcyBmaWxsZWQgaW4gb24gZGVtYW5kCi0JCQkgKi8KLQkJCWlycV9kZXNjW2ldLmNoaXAgPSAmbm9faXJxX2NoaXA7Ci0JCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKaW5kZXggZDAyZGVmMC4uNzc0YWM0OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKQEAgLTc4LDYgKzc4LDM0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIElmIHdlIGRvbid0IGRvIHRoYXQsIHRoZXJlIGlzIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBndWVzdAorICogd2lsbCBjYWxpYnJhdGUgdW5kZXIgaGVhdnkgbG9hZCAtIHRodXMsIGdldHRpbmcgYSBsb3dlciBscGogLQorICogYW5kIGV4ZWN1dGUgdGhlIGRlbGF5cyB0aGVtc2VsdmVzIHdpdGhvdXQgbG9hZC4gVGhpcyBpcyB3cm9uZywKKyAqIGJlY2F1c2Ugbm8gZGVsYXkgbG9vcCBjYW4gZmluaXNoIGJlZm9yZWhhbmQuCisgKiBBbnkgaGV1cmlzdGljcyBpcyBzdWJqZWN0IHRvIGZhaWwsIGJlY2F1c2UgdWx0aW1hdGVseSwgYSBsYXJnZQorICogcG9sbCBvZiBndWVzdHMgY2FuIGJlIHJ1bm5pbmcgYW5kIHRyb3VibGUgZWFjaCBvdGhlci4gU28gd2UgcHJlc2V0CisgKiBscGogaGVyZQorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fZ2V0X3RzY19raHoodm9pZCkKK3sKKwlyZXR1cm4gcHJlc2V0X2xwajsKK30KKworc3RhdGljIHZvaWQga3ZtX2dldF9wcmVzZXRfbHBqKHZvaWQpCit7CisJc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKnNyYzsKKwl1bnNpZ25lZCBsb25nIGtoejsKKwl1NjQgbHBqOworCisJc3JjID0gJnBlcl9jcHUoaHZfY2xvY2ssIDApOworCWtoeiA9IHB2Y2xvY2tfdHNjX2toeihzcmMpOworCisJbHBqID0gKCh1NjQpa2h6ICogMTAwMCk7CisJZG9fZGl2KGxwaiwgSFopOworCXByZXNldF9scGogPSBscGo7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2Uga3ZtX2Nsb2NrID0gewogCS5uYW1lID0gImt2bS1jbG9jayIsCiAJLnJlYWQgPSBrdm1fY2xvY2tfcmVhZCwKQEAgLTE1Myw2ICsxODEsNyBAQAogCQlwdl90aW1lX29wcy5nZXRfd2FsbGNsb2NrID0ga3ZtX2dldF93YWxsY2xvY2s7CiAJCXB2X3RpbWVfb3BzLnNldF93YWxsY2xvY2sgPSBrdm1fc2V0X3dhbGxjbG9jazsKIAkJcHZfdGltZV9vcHMuc2NoZWRfY2xvY2sgPSBrdm1fY2xvY2tfcmVhZDsKKwkJcHZfdGltZV9vcHMuZ2V0X3RzY19raHogPSBrdm1fZ2V0X3RzY19raHo7CiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAJCXB2X2FwaWNfb3BzLnNldHVwX3NlY29uZGFyeV9jbG9jayA9IGt2bV9zZXR1cF9zZWNvbmRhcnlfY2xvY2s7CiAjZW5kaWYKQEAgLTE2Myw2ICsxOTIsNyBAQAogI2lmZGVmIENPTkZJR19LRVhFQwogCQltYWNoaW5lX29wcy5jcmFzaF9zaHV0ZG93biAgPSBrdm1fY3Jhc2hfc2h1dGRvd247CiAjZW5kaWYKKwkJa3ZtX2dldF9wcmVzZXRfbHBqKCk7CiAJCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZrdm1fY2xvY2spOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYyBiL2FyY2gveDg2L2tlcm5lbC9tc3IuYwppbmRleCAyZTJhZjVkLi44MmE3YzdlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21zci5jCkBAIC0xNjMsOCArMTYzLDggQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQlkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEobXNyX2NsYXNzLCBOVUxMLCBNS0RFVihNU1JfTUFKT1IsIGNwdSksCi0JCQkJICAgIE5VTEwsICJtc3IlZCIsIGNwdSk7CisJZGV2ID0gZGV2aWNlX2NyZWF0ZShtc3JfY2xhc3MsIE5VTEwsIE1LREVWKE1TUl9NQUpPUiwgY3B1KSwgTlVMTCwKKwkJCSAgICAibXNyJWQiLCBjcHUpOwogCXJldHVybiBJU19FUlIoZGV2KSA/IFBUUl9FUlIoZGV2KSA6IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKaW5kZXggMDgwZDFkMi4uZTFlNzMxZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKQEAgLTIxNywxNiArMjE3LDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19JT01NVV9ERUJVRyAqLwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBudW1fZG1hX3BhZ2VzKHVuc2lnbmVkIGxvbmcgZG1hLCB1bnNpZ25lZCBpbnQgZG1hbGVuKQotewotCXVuc2lnbmVkIGludCBucGFnZXM7Ci0KLQlucGFnZXMgPSBQQUdFX0FMSUdOKGRtYSArIGRtYWxlbikgLSAoZG1hICYgUEFHRV9NQVNLKTsKLQlucGFnZXMgPj49IFBBR0VfU0hJRlQ7Ci0KLQlyZXR1cm4gbnBhZ2VzOwotfQotCiBzdGF0aWMgaW5saW5lIGludCB0cmFuc2xhdGlvbl9lbmFibGVkKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsKQogewogCS8qIG9ubHkgUEhCcyB3aXRoIHRyYW5zbGF0aW9uIGVuYWJsZWQgaGF2ZSBhbiBJT01NVSB0YWJsZSAqLwpAQCAtNDA4LDcgKzM5OCw3IEBACiAJCWlmIChkbWFsZW4gPT0gMCkKIAkJCWJyZWFrOwogCi0JCW5wYWdlcyA9IG51bV9kbWFfcGFnZXMoZG1hLCBkbWFsZW4pOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hLCBkbWFsZW4sIFBBR0VfU0laRSk7CiAJCWlvbW11X2ZyZWUodGJsLCBkbWEsIG5wYWdlcyk7CiAJfQogfQpAQCAtNDI3LDcgKzQxNyw3IEBACiAJCUJVR19PTighc2dfcGFnZShzKSk7CiAKIAkJdmFkZHIgPSAodW5zaWduZWQgbG9uZykgc2dfdmlydChzKTsKLQkJbnBhZ2VzID0gbnVtX2RtYV9wYWdlcyh2YWRkciwgcy0+bGVuZ3RoKTsKKwkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHZhZGRyLCBzLT5sZW5ndGgsIFBBR0VfU0laRSk7CiAKIAkJZW50cnkgPSBpb21tdV9yYW5nZV9hbGxvYyhkZXYsIHRibCwgbnBhZ2VzKTsKIAkJaWYgKGVudHJ5ID09IGJhZF9kbWFfYWRkcmVzcykgewpAQCAtNDY0LDcgKzQ1NCw3IEBACiAJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBmaW5kX2lvbW11X3RhYmxlKGRldik7CiAKIAl1YWRkciA9ICh1bnNpZ25lZCBsb25nKXZhZGRyOwotCW5wYWdlcyA9IG51bV9kbWFfcGFnZXModWFkZHIsIHNpemUpOworCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyh1YWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKIAogCXJldHVybiBpb21tdV9hbGxvYyhkZXYsIHRibCwgdmFkZHIsIG5wYWdlcywgZGlyZWN0aW9uKTsKIH0KQEAgLTQ3NSw3ICs0NjUsNyBAQAogCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZmluZF9pb21tdV90YWJsZShkZXYpOwogCXVuc2lnbmVkIGludCBucGFnZXM7CiAKLQlucGFnZXMgPSBudW1fZG1hX3BhZ2VzKGRtYV9oYW5kbGUsIHNpemUpOworCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfaGFuZGxlLCBzaXplLCBQQUdFX1NJWkUpOwogCWlvbW11X2ZyZWUodGJsLCBkbWFfaGFuZGxlLCBucGFnZXMpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwppbmRleCAwYTM4MjRlLi4xOTI2MjQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKQEAgLTEyNSwxMyArMTI1LDEzIEBACiAJcGNpX3N3aW90bGJfaW5pdCgpOwogfQogCi11bnNpZ25lZCBsb25nIGlvbW11X251bV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQordW5zaWduZWQgbG9uZyBpb21tdV9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHJvdW5kdXAoKGFkZHIgJiB+UEFHRV9NQVNLKSArIGxlbiwgUEFHRV9TSVpFKTsKIAogCXJldHVybiBzaXplID4+IFBBR0VfU0hJRlQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGlvbW11X251bV9wYWdlcyk7CitFWFBPUlRfU1lNQk9MKGlvbW11X25yX3BhZ2VzKTsKICNlbmRpZgogCiB2b2lkICpkbWFfZ2VuZXJpY19hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYwppbmRleCAxNDVmMWM4Li5lM2Y3NWJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiBzdGF0aWMgZG1hX2FkZHJfdCBkbWFfbWFwX2FyZWEoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IHBoeXNfbWVtLAogCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyLCB1bnNpZ25lZCBsb25nIGFsaWduX21hc2spCiB7Ci0JdW5zaWduZWQgbG9uZyBucGFnZXMgPSBpb21tdV9udW1fcGFnZXMocGh5c19tZW0sIHNpemUpOworCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHBoeXNfbWVtLCBzaXplLCBQQUdFX1NJWkUpOwogCXVuc2lnbmVkIGxvbmcgaW9tbXVfcGFnZSA9IGFsbG9jX2lvbW11KGRldiwgbnBhZ2VzLCBhbGlnbl9tYXNrKTsKIAlpbnQgaTsKIApAQCAtMjg1LDcgKzI4NSw3IEBACiAJCXJldHVybjsKIAogCWlvbW11X3BhZ2UgPSAoZG1hX2FkZHIgLSBpb21tdV9idXNfYmFzZSk+PlBBR0VfU0hJRlQ7Ci0JbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGRtYV9hZGRyLCBzaXplKTsKKwlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2FkZHIsIHNpemUsIFBBR0VfU0laRSk7CiAJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CiAJCWlvbW11X2dhdHRfYmFzZVtpb21tdV9wYWdlICsgaV0gPSBnYXJ0X3VubWFwcGVkX2VudHJ5OwogCQlDTEVBUl9MRUFLKGlvbW11X3BhZ2UgKyBpKTsKQEAgLTM2OCw3ICszNjgsNyBAQAogCQl9CiAKIAkJYWRkciA9IHBoeXNfYWRkcjsKLQkJcGFnZXMgPSBpb21tdV9udW1fcGFnZXMocy0+b2Zmc2V0LCBzLT5sZW5ndGgpOworCQlwYWdlcyA9IGlvbW11X251bV9wYWdlcyhzLT5vZmZzZXQsIHMtPmxlbmd0aCwgUEFHRV9TSVpFKTsKIAkJd2hpbGUgKHBhZ2VzLS0pIHsKIAkJCWlvbW11X2dhdHRfYmFzZVtpb21tdV9wYWdlXSA9IEdQVEVfRU5DT0RFKGFkZHIpOwogCQkJU0VUX0xFQUsoaW9tbXVfcGFnZSk7CkBAIC00NTEsNyArNDUxLDcgQEAKIAogCQlzZWdfc2l6ZSArPSBzLT5sZW5ndGg7CiAJCW5lZWQgPSBuZXh0bmVlZDsKLQkJcGFnZXMgKz0gaW9tbXVfbnVtX3BhZ2VzKHMtPm9mZnNldCwgcy0+bGVuZ3RoKTsKKwkJcGFnZXMgKz0gaW9tbXVfbnVtX3BhZ2VzKHMtPm9mZnNldCwgcy0+bGVuZ3RoLCBQQUdFX1NJWkUpOwogCQlwcyA9IHM7CiAJfQogCWlmIChkbWFfbWFwX2NvbnQoZGV2LCBzdGFydF9zZywgaSAtIHN0YXJ0LCBzZ21hcCwgcGFnZXMsIG5lZWQpIDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jCmluZGV4IDA1ZmJlOWEuLjRmOWM1NWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suYwpAQCAtOTcsNiArOTcsMTggQEAKIAlyZXR1cm4gZHN0LT52ZXJzaW9uOwogfQogCit1bnNpZ25lZCBsb25nIHB2Y2xvY2tfdHNjX2toeihzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqc3JjKQoreworCXU2NCBwdl90c2Nfa2h6ID0gMTAwMDAwMFVMTCA8PCAzMjsKKworCWRvX2Rpdihwdl90c2Nfa2h6LCBzcmMtPnRzY190b19zeXN0ZW1fbXVsKTsKKwlpZiAoc3JjLT50c2Nfc2hpZnQgPCAwKQorCQlwdl90c2Nfa2h6IDw8PSAtc3JjLT50c2Nfc2hpZnQ7CisJZWxzZQorCQlwdl90c2Nfa2h6ID4+PSBzcmMtPnRzY19zaGlmdDsKKwlyZXR1cm4gcHZfdHNjX2toejsKK30KKwogY3ljbGVfdCBwdmNsb2NrX2Nsb2Nrc291cmNlX3JlYWQoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKnNyYykKIHsKIAlzdHJ1Y3QgcHZjbG9ja19zaGFkb3dfdGltZSBzaGFkb3c7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKaW5kZXggZjZhMTFiOS4uNjc0NjVlZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYwpAQCAtMzUsOSArMzUsNiBAQAogCWlmICghKHdvcmQgJiAoMSA8PCAxMykpKSB7CiAJCWRldl9pbmZvKCZkZXYtPmRldiwgIkludGVsIEU3NTIwLzczMjAvNzUyNSBkZXRlY3RlZDsgIgogCQkJImRpc2FibGluZyBpcnEgYmFsYW5jaW5nIGFuZCBhZmZpbml0eVxuIik7Ci0jaWZkZWYgQ09ORklHX0lSUUJBTEFOQ0UKLQkJaXJxYmFsYW5jZV9kaXNhYmxlKCIiKTsKLSNlbmRpZgogCQlub2lycWRlYnVnX3NldHVwKCIiKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCQlub19pcnFfYWZmaW5pdHkgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3J0Yy5jIGIvYXJjaC94ODYva2VybmVsL3J0Yy5jCmluZGV4IDA1MTkxYmIuLmRkNmYyYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ydGMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJDRF9UT19CSU4oY21vc19taW51dGVzKTsKKwkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtNjksOCArNjksOCBAQAogCiAJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKIAkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKLQkJCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKKwkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcyxSVENfU0VDT05EUyk7CiAJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLFJUQ19NSU5VVEVTKTsKQEAgLTEyNCwxNiArMTI0LDE2IEBACiAJV0FSTl9PTl9PTkNFKFJUQ19BTFdBWVNfQkNEICYmIChzdGF0dXMgJiBSVENfRE1fQklOQVJZKSk7CiAKIAlpZiAoUlRDX0FMV0FZU19CQ0QgfHwgIShzdGF0dXMgJiBSVENfRE1fQklOQVJZKSkgewotCQlCQ0RfVE9fQklOKHNlYyk7Ci0JCUJDRF9UT19CSU4obWluKTsKLQkJQkNEX1RPX0JJTihob3VyKTsKLQkJQkNEX1RPX0JJTihkYXkpOwotCQlCQ0RfVE9fQklOKG1vbik7Ci0JCUJDRF9UT19CSU4oeWVhcik7CisJCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwkJbWluID0gYmNkMmJpbihtaW4pOworCQlob3VyID0gYmNkMmJpbihob3VyKTsKKwkJZGF5ID0gYmNkMmJpbihkYXkpOworCQltb24gPSBiY2QyYmluKG1vbik7CisJCXllYXIgPSBiY2QyYmluKHllYXIpOwogCX0KIAogCWlmIChjZW50dXJ5KSB7Ci0JCUJDRF9UT19CSU4oY2VudHVyeSk7CisJCWNlbnR1cnkgPSBiY2QyYmluKGNlbnR1cnkpOwogCQl5ZWFyICs9IGNlbnR1cnkgKiAxMDA7CiAJCXByaW50ayhLRVJOX0lORk8gIkV4dGVuZGVkIENNT1MgeWVhcjogJWRcbiIsIGNlbnR1cnkgKiAxMDApOwogCX0gZWxzZQpAQCAtMjIzLDExICsyMjMsMjUgQEAKIHN0YXRpYyBfX2luaXQgaW50IGFkZF9ydGNfY21vcyh2b2lkKQogewogI2lmZGVmIENPTkZJR19QTlAKLQlpZiAoIXBucF9wbGF0Zm9ybV9kZXZpY2VzKQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19kZXZpY2UpOwotI2Vsc2UKKwlzdGF0aWMgY29uc3QgY2hhciAqaWRzW10gX19pbml0Y29uc3QgPQorCSAgICB7ICJQTlAwYjAwIiwgIlBOUDBiMDEiLCAiUE5QMGIwMiIsIH07CisJc3RydWN0IHBucF9kZXYgKmRldjsKKwlzdHJ1Y3QgcG5wX2lkICppZDsKKwlpbnQgaTsKKworCXBucF9mb3JfZWFjaF9kZXYoZGV2KSB7CisJCWZvciAoaWQgPSBkZXYtPmlkOyBpZDsgaWQgPSBpZC0+bmV4dCkgeworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWRzKTsgaSsrKSB7CisJCQkJaWYgKGNvbXBhcmVfcG5wX2lkKGlkLCBpZHNbaV0pICE9IDApCisJCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorI2VuZGlmCisKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19kZXZpY2UpOwotI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KKwlkZXZfaW5mbygmcnRjX2RldmljZS5kZXYsCisJCSAicmVnaXN0ZXJlZCBwbGF0Zm9ybSBSVEMgZGV2aWNlIChubyBQTlAgZGV2aWNlIGZvdW5kKVxuIik7CiAJcmV0dXJuIDA7CiB9CiBkZXZpY2VfaW5pdGNhbGwoYWRkX3J0Y19jbW9zKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggMjI1NTc4Mi4uMGZhNjc5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTU2MSw3ICs1NjEsMTMgQEAKIAogfQogCi0jaWZkZWYgQ09ORklHX1BST0NfVk1DT1JFCisvKgorICogTm90ZTogZWxmY29yZWhkcl9hZGRyIGlzIG5vdCBqdXN0IGxpbWl0ZWQgdG8gdm1jb3JlLiBJdCBpcyBhbHNvIHVzZWQgYnkKKyAqIGlzX2tkdW1wX2tlcm5lbCgpIHRvIGRldGVybWluZSBpZiB3ZSBhcmUgYm9vdGluZyBhZnRlciBhIHBhbmljLiBIZW5jZQorICogaWZkZWYgaXQgdW5kZXIgQ09ORklHX0NSQVNIX0RVTVAgYW5kIG5vdCBDT05GSUdfUFJPQ19WTUNPUkUuCisgKi8KKworI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCiAvKiBlbGZjb3JlaGRyPSBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIGVsZiBjb3JlIGhlYWRlcgogICogc3RvcmVkIGJ5IHRoZSBjcmFzaGVkIGtlcm5lbC4gVGhpcyBvcHRpb24gd2lsbCBiZSBwYXNzZWQKICAqIGJ5IGtleGVjIGxvYWRlciB0byB0aGUgY2FwdHVyZSBrZXJuZWwuCkBAIC0xMDY3LDYgKzEwNzMsNyBAQAogI2VuZGlmCiAKIAlwcmVmaWxsX3Bvc3NpYmxlX21hcCgpOworCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWluaXRfY3B1X3RvX25vZGUoKTsKICNlbmRpZgpAQCAtMTA3NCw2ICsxMDgxLDkgQEAKIAlpbml0X2FwaWNfbWFwcGluZ3MoKTsKIAlpb2FwaWNfaW5pdF9tYXBwaW5ncygpOwogCisJLyogbmVlZCB0byB3YWl0IGZvciBpb19hcGljIGlzIG1hcHBlZCAqLworCW5yX2lycXMgPSBwcm9iZV9ucl9pcnFzKCk7CisKIAlrdm1fZ3Vlc3RfaW5pdCgpOwogCiAJZTgyMF9yZXNlcnZlX3Jlc291cmNlcygpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCmluZGV4IDBlNjdmNzIuLjQxMGM4OGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKQEAgLTE0MCwyNSArMTQwLDMwIEBACiAgKi8KIHZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZCkKIHsKLQlzc2l6ZV90IHNpemUgPSBQRVJDUFVfRU5PVUdIX1JPT007CisJc3NpemVfdCBzaXplLCBvbGRfc2l6ZTsKIAljaGFyICpwdHI7CiAJaW50IGNwdTsKKwl1bnNpZ25lZCBsb25nIGFsaWduID0gMTsKIAogCS8qIFNldHVwIGNwdV9wZGEgbWFwICovCiAJc2V0dXBfY3B1X3BkYV9tYXAoKTsKIAogCS8qIENvcHkgc2VjdGlvbiBmb3IgZWFjaCBDUFUgKHdlIGRpc2NhcmQgdGhlIG9yaWdpbmFsKSAqLwotCXNpemUgPSBQRVJDUFVfRU5PVUdIX1JPT007CisJb2xkX3NpemUgPSBQRVJDUFVfRU5PVUdIX1JPT007CisJYWxpZ24gPSBtYXhfdCh1bnNpZ25lZCBsb25nLCBQQUdFX1NJWkUsIGFsaWduKTsKKwlzaXplID0gcm91bmR1cChvbGRfc2l6ZSwgYWxpZ24pOwogCXByaW50ayhLRVJOX0lORk8gIlBFUkNQVTogQWxsb2NhdGluZyAlemQgYnl0ZXMgb2YgcGVyIGNwdSBkYXRhXG4iLAogCQkJICBzaXplKTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKICNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKLQkJcHRyID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhzaXplKTsKKwkJcHRyID0gX19hbGxvY19ib290bWVtKHNpemUsIGFsaWduLAorCQkJCSBfX3BhKE1BWF9ETUFfQUREUkVTUykpOwogI2Vsc2UKIAkJaW50IG5vZGUgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOwogCQlpZiAoIW5vZGVfb25saW5lKG5vZGUpIHx8ICFOT0RFX0RBVEEobm9kZSkpIHsKLQkJCXB0ciA9IGFsbG9jX2Jvb3RtZW1fcGFnZXMoc2l6ZSk7CisJCQlwdHIgPSBfX2FsbG9jX2Jvb3RtZW0oc2l6ZSwgYWxpZ24sCisJCQkJCSBfX3BhKE1BWF9ETUFfQUREUkVTUykpOwogCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJICAgICAgICJjcHUgJWQgaGFzIG5vIG5vZGUgJWQgb3Igbm9kZS1sb2NhbCBtZW1vcnlcbiIsCiAJCQkJY3B1LCBub2RlKTsKQEAgLTE2Nyw3ICsxNzIsOCBAQAogCQkJCQkgY3B1LCBfX3BhKHB0cikpOwogCQl9CiAJCWVsc2UgewotCQkJcHRyID0gYWxsb2NfYm9vdG1lbV9wYWdlc19ub2RlKE5PREVfREFUQShub2RlKSwgc2l6ZSk7CisJCQlwdHIgPSBfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZSksIHNpemUsIGFsaWduLAorCQkJCQkJCV9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CiAJCQlpZiAocHRyKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICJwZXIgY3B1IGRhdGEgZm9yIGNwdSVkIG9uIG5vZGUlZCBhdCAlMDE2bHhcbiIsCiAJCQkJCSBjcHUsIG5vZGUsIF9fcGEocHRyKSk7CkBAIC0xNzUsNyArMTgxLDYgQEAKICNlbmRpZgogCQlwZXJfY3B1X29mZnNldChjcHUpID0gcHRyIC0gX19wZXJfY3B1X3N0YXJ0OwogCQltZW1jcHkocHRyLCBfX3Blcl9jcHVfc3RhcnQsIF9fcGVyX2NwdV9lbmQgLSBfX3Blcl9jcHVfc3RhcnQpOwotCiAJfQogCiAJcHJpbnRrKEtFUk5fREVCVUcgIk5SX0NQVVM6ICVkLCBucl9jcHVfaWRzOiAlZCwgbnJfbm9kZV9pZHMgJWRcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwppbmRleCA4YzNhY2E3Li43ZWNlODE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKQEAgLTI4Miw2ICsyODIsOCBAQAogCWNwdV9zZXQoY3B1aWQsIGNwdV9jYWxsaW5fbWFwKTsKIH0KIAorc3RhdGljIGludCBfX2NwdWluaXRkYXRhIHVuc2FmZV9zbXA7CisKIC8qCiAgKiBBY3RpdmF0ZSBhIHNlY29uZGFyeSBwcm9jZXNzb3IuCiAgKi8KQEAgLTM5Nyw3ICszOTksNyBAQAogCQkJCWdvdG8gdmFsaWRfazc7CiAKIAkJLyogSWYgd2UgZ2V0IGhlcmUsIG5vdCBhIGNlcnRpZmllZCBTTVAgY2FwYWJsZSBBTUQgc3lzdGVtLiAqLwotCQlhZGRfdGFpbnQoVEFJTlRfVU5TQUZFX1NNUCk7CisJCXVuc2FmZV9zbXAgPSAxOwogCX0KIAogdmFsaWRfazc6CkBAIC00MTQsMTIgKzQxNiwxMCBAQAogCSAqIERvbid0IHRhaW50IGlmIHdlIGFyZSBydW5uaW5nIFNNUCBrZXJuZWwgb24gYSBzaW5nbGUgbm9uLU1QCiAJICogYXBwcm92ZWQgQXRobG9uCiAJICovCi0JaWYgKHRhaW50ZWQgJiBUQUlOVF9VTlNBRkVfU01QKSB7Ci0JCWlmIChudW1fb25saW5lX2NwdXMoKSkKLQkJCXByaW50ayhLRVJOX0lORk8gIldBUk5JTkc6IFRoaXMgY29tYmluYXRpb24gb2YgQU1EIgotCQkJCSJwcm9jZXNzb3JzIGlzIG5vdCBzdWl0YWJsZSBmb3IgU01QLlxuIik7Ci0JCWVsc2UKLQkJCXRhaW50ZWQgJj0gflRBSU5UX1VOU0FGRV9TTVA7CisJaWYgKHVuc2FmZV9zbXAgJiYgbnVtX29ubGluZV9jcHVzKCkgPiAxKSB7CisJCXByaW50ayhLRVJOX0lORk8gIldBUk5JTkc6IFRoaXMgY29tYmluYXRpb24gb2YgQU1EIgorCQkJInByb2Nlc3NvcnMgaXMgbm90IHN1aXRhYmxlIGZvciBTTVAuXG4iKTsKKwkJYWRkX3RhaW50KFRBSU5UX1VOU0FGRV9TTVApOwogCX0KIH0KIApAQCAtNTQzLDEwICs1NDMsMTAgQEAKIAlpbnQgdGltZW91dDsKIAl1MzIgc3RhdHVzOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiSW5xdWlyaW5nIHJlbW90ZSBBUElDICMlZC4uLlxuIiwgYXBpY2lkKTsKKwlwcmludGsoS0VSTl9JTkZPICJJbnF1aXJpbmcgcmVtb3RlIEFQSUMgMHgleC4uLlxuIiwgYXBpY2lkKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ3MpOyBpKyspIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgIyVkICVzOiAiLCBhcGljaWQsIG5hbWVzW2ldKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgMHgleCAlczogIiwgYXBpY2lkLCBuYW1lc1tpXSk7CiAKIAkJLyoKIAkJICogV2FpdCBmb3IgaWRsZS4KQEAgLTg3NCw3ICs4NzQsNyBAQAogCXN0YXJ0X2lwID0gc2V0dXBfdHJhbXBvbGluZSgpOwogCiAJLyogU28gd2Ugc2VlIHdoYXQncyB1cCAgICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiQm9vdGluZyBwcm9jZXNzb3IgJWQvJWQgaXAgJWx4XG4iLAorCXByaW50ayhLRVJOX0lORk8gIkJvb3RpbmcgcHJvY2Vzc29yICVkIEFQSUMgMHgleCBpcCAweCVseFxuIiwKIAkJCSAgY3B1LCBhcGljaWQsIHN0YXJ0X2lwKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdXZfaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlZjUyOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC91dl9pcnEuYwpAQCAtMCwwICsxLDc5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogU0dJIFVWIElSUSBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X2lycS5oPgorCitzdGF0aWMgdm9pZCB1dl9ub29wKHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXZfbm9vcF9yZXQodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXZfYWNrX2FwaWModW5zaWduZWQgaW50IGlycSkKK3sKKwlhY2tfQVBJQ19pcnEoKTsKK30KKworc3RydWN0IGlycV9jaGlwIHV2X2lycV9jaGlwID0geworCS5uYW1lCQk9ICJVVi1DT1JFIiwKKwkuc3RhcnR1cAk9IHV2X25vb3BfcmV0LAorCS5zaHV0ZG93bgk9IHV2X25vb3AsCisJLmVuYWJsZQkJPSB1dl9ub29wLAorCS5kaXNhYmxlCT0gdXZfbm9vcCwKKwkuYWNrCQk9IHV2X25vb3AsCisJLm1hc2sJCT0gdXZfbm9vcCwKKwkudW5tYXNrCQk9IHV2X25vb3AsCisJLmVvaQkJPSB1dl9hY2tfYXBpYywKKwkuZW5kCQk9IHV2X25vb3AsCit9OworCisvKgorICogU2V0IHVwIGEgbWFwcGluZyBvZiBhbiBhdmFpbGFibGUgaXJxIGFuZCB2ZWN0b3IsIGFuZCBlbmFibGUgdGhlIHNwZWNpZmllZAorICogTU1SIHRoYXQgZGVmaW5lcyB0aGUgTVNJIHRoYXQgaXMgdG8gYmUgc2VudCB0byB0aGUgc3BlY2lmaWVkIENQVSB3aGVuIGFuCisgKiBpbnRlcnJ1cHQgaXMgcmFpc2VkLgorICovCitpbnQgdXZfc2V0dXBfaXJxKGNoYXIgKmlycV9uYW1lLCBpbnQgY3B1LCBpbnQgbW1yX2JsYWRlLAorCQkgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQoreworCWludCBpcnE7CisJaW50IHJldDsKKworCWlycSA9IGNyZWF0ZV9pcnEoKTsKKwlpZiAoaXJxIDw9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXQgPSBhcmNoX2VuYWJsZV91dl9pcnEoaXJxX25hbWUsIGlycSwgY3B1LCBtbXJfYmxhZGUsIG1tcl9vZmZzZXQpOworCWlmIChyZXQgIT0gaXJxKQorCQlkZXN0cm95X2lycShpcnEpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV2X3NldHVwX2lycSk7CisKKy8qCisgKiBUZWFyIGRvd24gYSBtYXBwaW5nIG9mIGFuIGlycSBhbmQgdmVjdG9yLCBhbmQgZGlzYWJsZSB0aGUgc3BlY2lmaWVkIE1NUiB0aGF0CisgKiBkZWZpbmVkIHRoZSBNU0kgdGhhdCB3YXMgdG8gYmUgc2VudCB0byB0aGUgc3BlY2lmaWVkIENQVSB3aGVuIGFuIGludGVycnVwdAorICogd2FzIHJhaXNlZC4KKyAqCisgKiBTZXQgbW1yX2JsYWRlIGFuZCBtbXJfb2Zmc2V0IHRvIHdoYXQgd2FzIHBhc3NlZCBpbiBvbiB1dl9zZXR1cF9pcnEoKS4KKyAqLwordm9pZCB1dl90ZWFyZG93bl9pcnEodW5zaWduZWQgaW50IGlycSwgaW50IG1tcl9ibGFkZSwgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQoreworCWFyY2hfZGlzYWJsZV91dl9pcnEobW1yX2JsYWRlLCBtbXJfb2Zmc2V0KTsKKwlkZXN0cm95X2lycShpcnEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXZfdGVhcmRvd25faXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC91dl9zeXNmcy5jIGIvYXJjaC94ODYva2VybmVsL3V2X3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmOWI5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC91dl9zeXNmcy5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBUaGlzIGZpbGUgc3VwcG9ydHMgdGhlIC9zeXMvZmlybXdhcmUvc2dpX3V2IGludGVyZmFjZXMgZm9yIFNHSSBVVi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKGMpIFJ1c3MgQW5kZXJzb24KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8YXNtL3V2L2Jpb3MuaD4KKworc3RydWN0IGtvYmplY3QgKnNnaV91dl9rb2JqOworCitzdGF0aWMgc3NpemVfdCBwYXJ0aXRpb25faWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsZFxuIiwgc25fcGFydGl0aW9uX2lkKTsKK30KKworc3RhdGljIHNzaXplX3QgY29oZXJlbmNlX2lkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQlzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGRcbiIsIHBhcnRpdGlvbl9jb2hlcmVuY2VfaWQoKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcGFydGl0aW9uX2lkX2F0dHIgPQorCV9fQVRUUihwYXJ0aXRpb25faWQsIFNfSVJVR08sIHBhcnRpdGlvbl9pZF9zaG93LCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjb2hlcmVuY2VfaWRfYXR0ciA9CisJX19BVFRSKGNvaGVyZW5jZV9pZCwgU19JUlVHTywgY29oZXJlbmNlX2lkX3Nob3csIE5VTEwpOworCisKK3N0YXRpYyBpbnQgX19pbml0IHNnaV91dl9zeXNmc19pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlpZiAoIXNnaV91dl9rb2JqKQorCQlzZ2lfdXZfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoInNnaV91diIsIGZpcm13YXJlX2tvYmopOworCWlmICghc2dpX3V2X2tvYmopIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAia29iamVjdF9jcmVhdGVfYW5kX2FkZCBzZ2lfdXYgZmFpbGVkIFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKHNnaV91dl9rb2JqLCAmcGFydGl0aW9uX2lkX2F0dHIuYXR0cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNmc19jcmVhdGVfZmlsZSBwYXJ0aXRpb25faWQgZmFpbGVkIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoc2dpX3V2X2tvYmosICZjb2hlcmVuY2VfaWRfYXR0ci5hdHRyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInN5c2ZzX2NyZWF0ZV9maWxlIGNvaGVyZW5jZV9pZCBmYWlsZWQgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZGV2aWNlX2luaXRjYWxsKHNnaV91dl9zeXNmc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYwppbmRleCA2MWE5N2U2Li4wYzk2NjdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCkBAIC00ODQsMTAgKzQ4NCwxMSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2NvYmFsdF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY29iYWx0X2xvY2ssIGZsYWdzKTsKLQlpZiAoKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTIHwgSVJRX1dBSVRJTkcpKSkKLQkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJj0gfihJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUyB8IElSUV9XQUlUSU5HKTsKKwlpZiAoKGRlc2MtPnN0YXR1cyAmIChJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUyB8IElSUV9XQUlUSU5HKSkpCisJCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTIHwgSVJRX1dBSVRJTkcpOwogCWVuYWJsZV9jb2JhbHRfaXJxKGlycSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29iYWx0X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTUwNiw5ICs1MDcsMTAgQEAKIHN0YXRpYyB2b2lkIGVuZF9jb2JhbHRfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNvYmFsdF9sb2NrLCBmbGFncyk7Ci0JaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkKKwlpZiAoIShkZXNjLT5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkKIAkJZW5hYmxlX2NvYmFsdF9pcnEoaXJxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2JhbHRfbG9jaywgZmxhZ3MpOwogfQpAQCAtNjI2LDEyICs2MjgsMTIgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyByZWFsaXJxOworCWRlc2MgPSBpcnFfdG9fZGVzYyhyZWFsaXJxKTsKIAogCS8qCiAJICogaGFuZGxlIHRoaXMgJ3ZpcnR1YWwgaW50ZXJydXB0JyBhcyBhIENvYmFsdCBvbmUgbm93LgogCSAqLwotCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbcmVhbGlycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUocmVhbGlycSwgZGVzYyk7CiAKIAlpZiAobGlrZWx5KGRlc2MtPmFjdGlvbiAhPSBOVUxMKSkKIAkJaGFuZGxlX0lSUV9ldmVudChyZWFsaXJxLCBkZXNjLT5hY3Rpb24pOwpAQCAtNjYyLDI3ICs2NjQsMjkgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBDT19JUlFfQVBJQzAgKyBDT19BUElDX0xBU1QgKyAxOyBpKyspIHsKLQkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSAwOwotCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGkpOworCisJCWRlc2MtPnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKKwkJZGVzYy0+YWN0aW9uID0gMDsKKwkJZGVzYy0+ZGVwdGggPSAxOwogCiAJCWlmIChpID09IDApIHsKLQkJCWlycV9kZXNjW2ldLmNoaXAgPSAmY29iYWx0X2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZjb2JhbHRfaXJxX3R5cGU7CiAJCX0KIAkJZWxzZSBpZiAoaSA9PSBDT19JUlFfSURFMCkgewotCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZjb2JhbHRfaXJxX3R5cGU7CisJCQlkZXNjLT5jaGlwID0gJmNvYmFsdF9pcnFfdHlwZTsKIAkJfQogCQllbHNlIGlmIChpID09IENPX0lSUV9JREUxKSB7Ci0JCQlpcnFfZGVzY1tpXS5jaGlwID0gJmNvYmFsdF9pcnFfdHlwZTsKKwkJCWRlc2MtPmNoaXAgPSAmY29iYWx0X2lycV90eXBlOwogCQl9CiAJCWVsc2UgaWYgKGkgPT0gQ09fSVJRXzgyNTkpIHsKLQkJCWlycV9kZXNjW2ldLmNoaXAgPSAmcGlpeDRfbWFzdGVyX2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZwaWl4NF9tYXN0ZXJfaXJxX3R5cGU7CiAJCX0KIAkJZWxzZSBpZiAoaSA8IENPX0lSUV9BUElDMCkgewotCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZwaWl4NF92aXJ0dWFsX2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZwaWl4NF92aXJ0dWFsX2lycV90eXBlOwogCQl9CiAJCWVsc2UgaWYgKElTX0NPX0FQSUMoaSkpIHsKLQkJCWlycV9kZXNjW2ldLmNoaXAgPSAmY29iYWx0X2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZjb2JhbHRfaXJxX3R5cGU7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jIGIvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKaW5kZXggNjk1Mzg1OS4uMjU0ZWUwNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKQEAgLTIzNSwxMSArMjM1LDE0IEBACiAKIHZvaWQgX19pbml0IHZtaV90aW1lX2luaXQodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgY3B1OwogCS8qIERpc2FibGUgUElUOiBCSU9TZXMgc3RhcnQgUElUIENIMCB3aXRoIDE4LjJoeiBwZXJpZGljLiAqLwogCW91dGJfcGl0KDB4M2EsIFBJVF9NT0RFKTsgLyogYmluYXJ5LCBtb2RlIDUsIExTQi9NU0IsIGNoIDAgKi8KIAogCXZtaV90aW1lX2luaXRfY2xvY2tldmVudCgpOwogCXNldHVwX2lycSgwLCAmdm1pX2Nsb2NrX2FjdGlvbik7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZtaV9nZXRfdGltZXJfdmVjdG9yKCldID0gMDsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL01ha2VmaWxlIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlCmluZGV4IGQwZTk0MGIuLmMwMjM0MzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKQEAgLTMsMTAgKzMsMTMgQEAKICMKIAogY29tbW9uLW9ianMgPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV9tYWluLm8gaW9hcGljLm8gXAotICAgICAgICAgICAgICAgIGNvYWxlc2NlZF9tbWlvLm8pCisgICAgICAgICAgICAgICAgY29hbGVzY2VkX21taW8ubyBpcnFfY29tbS5vKQogaWZlcSAoJChDT05GSUdfS1ZNX1RSQUNFKSx5KQogY29tbW9uLW9ianMgKz0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9rdm0vLCBrdm1fdHJhY2UubykKIGVuZGlmCitpZmVxICgkKENPTkZJR19ETUFSKSx5KQorY29tbW9uLW9ianMgKz0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9rdm0vLCB2dGQubykKK2VuZGlmCiAKIEVYVFJBX0NGTEFHUyArPSAtSXZpcnQva3ZtIC1JYXJjaC94ODYva3ZtCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1NC5jIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKaW5kZXggYzBmNzg3Mi4uNjM0MTMyYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU0LmMKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKQEAgLTIwMCwxMyArMjAwLDE0IEBACiAKIAlpZiAoIWF0b21pY19pbmNfYW5kX3Rlc3QoJnB0LT5wZW5kaW5nKSkKIAkJc2V0X2JpdChLVk1fUkVRX1BFTkRJTkdfVElNRVIsICZ2Y3B1MC0+cmVxdWVzdHMpOwotCWlmICh2Y3B1MCAmJiB3YWl0cXVldWVfYWN0aXZlKCZ2Y3B1MC0+d3EpKSB7Ci0JCXZjcHUwLT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFOworCisJaWYgKHZjcHUwICYmIHdhaXRxdWV1ZV9hY3RpdmUoJnZjcHUwLT53cSkpCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdmNwdTAtPndxKTsKLQl9CiAKIAlwdC0+dGltZXIuZXhwaXJlcyA9IGt0aW1lX2FkZF9ucyhwdC0+dGltZXIuZXhwaXJlcywgcHQtPnBlcmlvZCk7CiAJcHQtPnNjaGVkdWxlZCA9IGt0aW1lX3RvX25zKHB0LT50aW1lci5leHBpcmVzKTsKKwlpZiAocHQtPnBlcmlvZCkKKwkJcHMtPmNoYW5uZWxzWzBdLmNvdW50X2xvYWRfdGltZSA9IHB0LT50aW1lci5leHBpcmVzOwogCiAJcmV0dXJuIChwdC0+cGVyaW9kID09IDAgPyAwIDogMSk7CiB9CkBAIC0yMTUsMTIgKzIxNiwyMiBAQAogewogCXN0cnVjdCBrdm1fcGl0ICpwaXQgPSB2Y3B1LT5rdm0tPmFyY2gudnBpdDsKIAotCWlmIChwaXQgJiYgdmNwdS0+dmNwdV9pZCA9PSAwICYmIHBpdC0+cGl0X3N0YXRlLmluamVjdF9wZW5kaW5nKQorCWlmIChwaXQgJiYgdmNwdS0+dmNwdV9pZCA9PSAwICYmIHBpdC0+cGl0X3N0YXRlLmlycV9hY2spCiAJCXJldHVybiBhdG9taWNfcmVhZCgmcGl0LT5waXRfc3RhdGUucGl0X3RpbWVyLnBlbmRpbmcpOwotCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGt2bV9waXRfYWNrX2lycShzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pCit7CisJc3RydWN0IGt2bV9rcGl0X3N0YXRlICpwcyA9IGNvbnRhaW5lcl9vZihraWFuLCBzdHJ1Y3Qga3ZtX2twaXRfc3RhdGUsCisJCQkJCQkgaXJxX2Fja19ub3RpZmllcik7CisJc3Bpbl9sb2NrKCZwcy0+aW5qZWN0X2xvY2spOworCWlmIChhdG9taWNfZGVjX3JldHVybigmcHMtPnBpdF90aW1lci5wZW5kaW5nKSA8IDApCisJCWF0b21pY19pbmMoJnBzLT5waXRfdGltZXIucGVuZGluZyk7CisJcHMtPmlycV9hY2sgPSAxOworCXNwaW5fdW5sb2NrKCZwcy0+aW5qZWN0X2xvY2spOworfQorCiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcGl0X3RpbWVyX2ZuKHN0cnVjdCBocnRpbWVyICpkYXRhKQogewogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcHM7CkBAIC0yNTUsOCArMjY2LDkgQEAKIAlocnRpbWVyX2NhbmNlbCgmcHQtPnRpbWVyKTsKIH0KIAotc3RhdGljIHZvaWQgY3JlYXRlX3BpdF90aW1lcihzdHJ1Y3Qga3ZtX2twaXRfdGltZXIgKnB0LCB1MzIgdmFsLCBpbnQgaXNfcGVyaW9kKQorc3RhdGljIHZvaWQgY3JlYXRlX3BpdF90aW1lcihzdHJ1Y3Qga3ZtX2twaXRfc3RhdGUgKnBzLCB1MzIgdmFsLCBpbnQgaXNfcGVyaW9kKQogeworCXN0cnVjdCBrdm1fa3BpdF90aW1lciAqcHQgPSAmcHMtPnBpdF90aW1lcjsKIAlzNjQgaW50ZXJ2YWw7CiAKIAlpbnRlcnZhbCA9IG11bGRpdjY0KHZhbCwgTlNFQ19QRVJfU0VDLCBLVk1fUElUX0ZSRVEpOwpAQCAtMjY4LDYgKzI4MCw3IEBACiAJcHQtPnBlcmlvZCA9IChpc19wZXJpb2QgPT0gMCkgPyAwIDogaW50ZXJ2YWw7CiAJcHQtPnRpbWVyLmZ1bmN0aW9uID0gcGl0X3RpbWVyX2ZuOwogCWF0b21pY19zZXQoJnB0LT5wZW5kaW5nLCAwKTsKKwlwcy0+aXJxX2FjayA9IDE7CiAKIAlocnRpbWVyX3N0YXJ0KCZwdC0+dGltZXIsIGt0aW1lX2FkZF9ucyhrdGltZV9nZXQoKSwgaW50ZXJ2YWwpLAogCQkgICAgICBIUlRJTUVSX01PREVfQUJTKTsKQEAgLTMwMiwxMSArMzE1LDExIEBACiAJY2FzZSAxOgogICAgICAgICAvKiBGSVhNRTogZW5oYW5jZSBtb2RlIDQgcHJlY2lzaW9uICovCiAJY2FzZSA0OgotCQljcmVhdGVfcGl0X3RpbWVyKCZwcy0+cGl0X3RpbWVyLCB2YWwsIDApOworCQljcmVhdGVfcGl0X3RpbWVyKHBzLCB2YWwsIDApOwogCQlicmVhazsKIAljYXNlIDI6CiAJY2FzZSAzOgotCQljcmVhdGVfcGl0X3RpbWVyKCZwcy0+cGl0X3RpbWVyLCB2YWwsIDEpOworCQljcmVhdGVfcGl0X3RpbWVyKHBzLCB2YWwsIDEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXN0cm95X3BpdF90aW1lcigmcHMtPnBpdF90aW1lcik7CkBAIC01MjAsNyArNTMzLDcgQEAKIAltdXRleF91bmxvY2soJnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCiAJYXRvbWljX3NldCgmcGl0LT5waXRfc3RhdGUucGl0X3RpbWVyLnBlbmRpbmcsIDApOwotCXBpdC0+cGl0X3N0YXRlLmluamVjdF9wZW5kaW5nID0gMTsKKwlwaXQtPnBpdF9zdGF0ZS5pcnFfYWNrID0gMTsKIH0KIAogc3RydWN0IGt2bV9waXQgKmt2bV9jcmVhdGVfcGl0KHN0cnVjdCBrdm0gKmt2bSkKQEAgLTUzNCw2ICs1NDcsNyBAQAogCiAJbXV0ZXhfaW5pdCgmcGl0LT5waXRfc3RhdGUubG9jayk7CiAJbXV0ZXhfbG9jaygmcGl0LT5waXRfc3RhdGUubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBpdC0+cGl0X3N0YXRlLmluamVjdF9sb2NrKTsKIAogCS8qIEluaXRpYWxpemUgUElPIGRldmljZSAqLwogCXBpdC0+ZGV2LnJlYWQgPSBwaXRfaW9wb3J0X3JlYWQ7CkBAIC01NTUsNiArNTY5LDkgQEAKIAlwaXRfc3RhdGUtPnBpdCA9IHBpdDsKIAlocnRpbWVyX2luaXQoJnBpdF9zdGF0ZS0+cGl0X3RpbWVyLnRpbWVyLAogCQkgICAgIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX0FCUyk7CisJcGl0X3N0YXRlLT5pcnFfYWNrX25vdGlmaWVyLmdzaSA9IDA7CisJcGl0X3N0YXRlLT5pcnFfYWNrX25vdGlmaWVyLmlycV9hY2tlZCA9IGt2bV9waXRfYWNrX2lycTsKKwlrdm1fcmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihrdm0sICZwaXRfc3RhdGUtPmlycV9hY2tfbm90aWZpZXIpOwogCW11dGV4X3VubG9jaygmcGl0LT5waXRfc3RhdGUubG9jayk7CiAKIAlrdm1fcGl0X3Jlc2V0KHBpdCk7CkBAIC01NzgsMTAgKzU5NSw4IEBACiBzdGF0aWMgdm9pZCBfX2luamVjdF9waXRfdGltZXJfaW50cihzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKLQlrdm1faW9hcGljX3NldF9pcnEoa3ZtLT5hcmNoLnZpb2FwaWMsIDAsIDEpOwotCWt2bV9pb2FwaWNfc2V0X2lycShrdm0tPmFyY2gudmlvYXBpYywgMCwgMCk7Ci0Ja3ZtX3BpY19zZXRfaXJxKHBpY19pcnFjaGlwKGt2bSksIDAsIDEpOwotCWt2bV9waWNfc2V0X2lycShwaWNfaXJxY2hpcChrdm0pLCAwLCAwKTsKKwlrdm1fc2V0X2lycShrdm0sIDAsIDEpOworCWt2bV9zZXRfaXJxKGt2bSwgMCwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOwogfQogCkBAIC01OTIsMzcgKzYwNywxOSBAQAogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcHM7CiAKIAlpZiAodmNwdSAmJiBwaXQpIHsKKwkJaW50IGluamVjdCA9IDA7CiAJCXBzID0gJnBpdC0+cGl0X3N0YXRlOwogCi0JCS8qIFRyeSB0byBpbmplY3QgcGVuZGluZyBpbnRlcnJ1cHRzIHdoZW46Ci0JCSAqIDEuIFBlbmRpbmcgZXhpc3RzCi0JCSAqIDIuIExhc3QgaW50ZXJydXB0IHdhcyBhY2NlcHRlZCBvciB3YWl0ZWQgZm9yIHRvbyBsb25nIHRpbWUqLwotCQlpZiAoYXRvbWljX3JlYWQoJnBzLT5waXRfdGltZXIucGVuZGluZykgJiYKLQkJICAgIChwcy0+aW5qZWN0X3BlbmRpbmcgfHwKLQkJICAgIChqaWZmaWVzIC0gcHMtPmxhc3RfaW5qZWN0ZWRfdGltZQotCQkJCT49IEtWTV9NQVhfUElUX0lOVFJfSU5URVJWQUwpKSkgewotCQkJcHMtPmluamVjdF9wZW5kaW5nID0gMDsKKwkJLyogVHJ5IHRvIGluamVjdCBwZW5kaW5nIGludGVycnVwdHMgd2hlbgorCQkgKiBsYXN0IG9uZSBoYXMgYmVlbiBhY2tlZC4KKwkJICovCisJCXNwaW5fbG9jaygmcHMtPmluamVjdF9sb2NrKTsKKwkJaWYgKGF0b21pY19yZWFkKCZwcy0+cGl0X3RpbWVyLnBlbmRpbmcpICYmIHBzLT5pcnFfYWNrKSB7CisJCQlwcy0+aXJxX2FjayA9IDA7CisJCQlpbmplY3QgPSAxOworCQl9CisJCXNwaW5fdW5sb2NrKCZwcy0+aW5qZWN0X2xvY2spOworCQlpZiAoaW5qZWN0KQogCQkJX19pbmplY3RfcGl0X3RpbWVyX2ludHIoa3ZtKTsKLQkJCXBzLT5sYXN0X2luamVjdGVkX3RpbWUgPSBqaWZmaWVzOwotCQl9Ci0JfQotfQotCi12b2lkIGt2bV9waXRfdGltZXJfaW50cl9wb3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlYykKLXsKLQlzdHJ1Y3Qga3ZtX2FyY2ggKmFyY2ggPSAmdmNwdS0+a3ZtLT5hcmNoOwotCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcHM7Ci0KLQlpZiAodmNwdSAmJiBhcmNoLT52cGl0KSB7Ci0JCXBzID0gJmFyY2gtPnZwaXQtPnBpdF9zdGF0ZTsKLQkJaWYgKGF0b21pY19yZWFkKCZwcy0+cGl0X3RpbWVyLnBlbmRpbmcpICYmCi0JCSgoKGFyY2gtPnZwaWMtPnBpY3NbMF0uaW1yICYgMSkgPT0gMCAmJgotCQkgIGFyY2gtPnZwaWMtPnBpY3NbMF0uaXJxX2Jhc2UgPT0gdmVjKSB8fAotCQkgIChhcmNoLT52aW9hcGljLT5yZWRpcnRibFswXS5maWVsZHMudmVjdG9yID09IHZlYyAmJgotCQkgIGFyY2gtPnZpb2FwaWMtPnJlZGlydGJsWzBdLmZpZWxkcy5tYXNrICE9IDEpKSkgewotCQkJcHMtPmluamVjdF9wZW5kaW5nID0gMTsKLQkJCWF0b21pY19kZWMoJnBzLT5waXRfdGltZXIucGVuZGluZyk7Ci0JCQlwcy0+Y2hhbm5lbHNbMF0uY291bnRfbG9hZF90aW1lID0ga3RpbWVfZ2V0KCk7Ci0JCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTQuaCBiL2FyY2gveDg2L2t2bS9pODI1NC5oCmluZGV4IGRiMjVjMmEuLmU0MzZkNDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1NC5oCisrKyBiL2FyY2gveDg2L2t2bS9pODI1NC5oCkBAIC04LDcgKzgsNiBAQAogCWludCBpcnE7CiAJczY0IHBlcmlvZDsgLyogdW5pdDogbnMgKi8KIAlzNjQgc2NoZWR1bGVkOwotCWt0aW1lX3QgbGFzdF91cGRhdGU7CiAJYXRvbWljX3QgcGVuZGluZzsKIH07CiAKQEAgLTM0LDggKzMzLDkgQEAKIAl1MzIgICAgc3BlYWtlcl9kYXRhX29uOwogCXN0cnVjdCBtdXRleCBsb2NrOwogCXN0cnVjdCBrdm1fcGl0ICpwaXQ7Ci0JYm9vbCBpbmplY3RfcGVuZGluZzsgLyogaWYgaW5qZWN0IHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCXVuc2lnbmVkIGxvbmcgbGFzdF9pbmplY3RlZF90aW1lOworCXNwaW5sb2NrX3QgaW5qZWN0X2xvY2s7CisJdW5zaWduZWQgbG9uZyBpcnFfYWNrOworCXN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciBpcnFfYWNrX25vdGlmaWVyOwogfTsKIAogc3RydWN0IGt2bV9waXQgewpAQCAtNTQsNyArNTQsNiBAQAogI2RlZmluZSBLVk1fUElUX0NIQU5ORUxfTUFTSwkgICAgMHgzCiAKIHZvaWQga3ZtX2luamVjdF9waXRfdGltZXJfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotdm9pZCBrdm1fcGl0X3RpbWVyX2ludHJfcG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWMpOwogdm9pZCBrdm1fcGl0X2xvYWRfY291bnQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgY2hhbm5lbCwgdTMyIHZhbCk7CiBzdHJ1Y3Qga3ZtX3BpdCAqa3ZtX2NyZWF0ZV9waXQoc3RydWN0IGt2bSAqa3ZtKTsKIHZvaWQga3ZtX2ZyZWVfcGl0KHN0cnVjdCBrdm0gKmt2bSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTkuYyBiL2FyY2gveDg2L2t2bS9pODI1OS5jCmluZGV4IGMzMTE2NGUuLjE3ZTQxZTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1OS5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1OS5jCkBAIC0zMCw2ICszMCwxOSBAQAogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KIAorc3RhdGljIHZvaWQgcGljX2NsZWFyX2lzcihzdHJ1Y3Qga3ZtX2twaWNfc3RhdGUgKnMsIGludCBpcnEpCit7CisJcy0+aXNyICY9IH4oMSA8PCBpcnEpOworCXMtPmlzcl9hY2sgfD0gKDEgPDwgaXJxKTsKK30KKwordm9pZCBrdm1fcGljX2NsZWFyX2lzcl9hY2soc3RydWN0IGt2bSAqa3ZtKQoreworCXN0cnVjdCBrdm1fcGljICpzID0gcGljX2lycWNoaXAoa3ZtKTsKKwlzLT5waWNzWzBdLmlzcl9hY2sgPSAweGZmOworCXMtPnBpY3NbMV0uaXNyX2FjayA9IDB4ZmY7Cit9CisKIC8qCiAgKiBzZXQgaXJxIGxldmVsLiBJZiBhbiBlZGdlIGlzIGRldGVjdGVkLCB0aGVuIHRoZSBJUlIgaXMgc2V0IHRvIDEKICAqLwpAQCAtMTQxLDExICsxNTQsMTIgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHBpY19pbnRhY2soc3RydWN0IGt2bV9rcGljX3N0YXRlICpzLCBpbnQgaXJxKQogeworCXMtPmlzciB8PSAxIDw8IGlycTsKIAlpZiAocy0+YXV0b19lb2kpIHsKIAkJaWYgKHMtPnJvdGF0ZV9vbl9hdXRvX2VvaSkKIAkJCXMtPnByaW9yaXR5X2FkZCA9IChpcnEgKyAxKSAmIDc7Ci0JfSBlbHNlCi0JCXMtPmlzciB8PSAoMSA8PCBpcnEpOworCQlwaWNfY2xlYXJfaXNyKHMsIGlycSk7CisJfQogCS8qCiAJICogV2UgZG9uJ3QgY2xlYXIgYSBsZXZlbCBzZW5zaXRpdmUgaW50ZXJydXB0IGhlcmUKIAkgKi8KQEAgLTE1Myw5ICsxNjcsMTAgQEAKIAkJcy0+aXJyICY9IH4oMSA8PCBpcnEpOwogfQogCi1pbnQga3ZtX3BpY19yZWFkX2lycShzdHJ1Y3Qga3ZtX3BpYyAqcykKK2ludCBrdm1fcGljX3JlYWRfaXJxKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlpbnQgaXJxLCBpcnEyLCBpbnRubzsKKwlzdHJ1Y3Qga3ZtX3BpYyAqcyA9IHBpY19pcnFjaGlwKGt2bSk7CiAKIAlpcnEgPSBwaWNfZ2V0X2lycSgmcy0+cGljc1swXSk7CiAJaWYgKGlycSA+PSAwKSB7CkBAIC0xODEsMTYgKzE5NiwzMiBAQAogCQlpbnRubyA9IHMtPnBpY3NbMF0uaXJxX2Jhc2UgKyBpcnE7CiAJfQogCXBpY191cGRhdGVfaXJxKHMpOworCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgaXJxKTsKIAogCXJldHVybiBpbnRubzsKIH0KIAogdm9pZCBrdm1fcGljX3Jlc2V0KHN0cnVjdCBrdm1fa3BpY19zdGF0ZSAqcykKIHsKKwlpbnQgaXJxLCBpcnFiYXNlOworCXN0cnVjdCBrdm0gKmt2bSA9IHMtPnBpY3Nfc3RhdGUtPmlycV9yZXF1ZXN0X29wYXF1ZTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUwID0ga3ZtLT52Y3B1c1swXTsKKworCWlmIChzID09ICZzLT5waWNzX3N0YXRlLT5waWNzWzBdKQorCQlpcnFiYXNlID0gMDsKKwllbHNlCisJCWlycWJhc2UgPSA4OworCisJZm9yIChpcnEgPSAwOyBpcnEgPCBQSUNfTlVNX1BJTlMvMjsgaXJxKyspIHsKKwkJaWYgKHZjcHUwICYmIGt2bV9hcGljX2FjY2VwdF9waWNfaW50cih2Y3B1MCkpCisJCQlpZiAocy0+aXJyICYgKDEgPDwgaXJxKSB8fCBzLT5pc3IgJiAoMSA8PCBpcnEpKQorCQkJCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgaXJxK2lycWJhc2UpOworCX0KIAlzLT5sYXN0X2lyciA9IDA7CiAJcy0+aXJyID0gMDsKIAlzLT5pbXIgPSAwOwogCXMtPmlzciA9IDA7CisJcy0+aXNyX2FjayA9IDB4ZmY7CiAJcy0+cHJpb3JpdHlfYWRkID0gMDsKIAlzLT5pcnFfYmFzZSA9IDA7CiAJcy0+cmVhZF9yZWdfc2VsZWN0ID0gMDsKQEAgLTI0Myw3ICsyNzQsNyBAQAogCQkJCXByaW9yaXR5ID0gZ2V0X3ByaW9yaXR5KHMsIHMtPmlzcik7CiAJCQkJaWYgKHByaW9yaXR5ICE9IDgpIHsKIAkJCQkJaXJxID0gKHByaW9yaXR5ICsgcy0+cHJpb3JpdHlfYWRkKSAmIDc7Ci0JCQkJCXMtPmlzciAmPSB+KDEgPDwgaXJxKTsKKwkJCQkJcGljX2NsZWFyX2lzcihzLCBpcnEpOwogCQkJCQlpZiAoY21kID09IDUpCiAJCQkJCQlzLT5wcmlvcml0eV9hZGQgPSAoaXJxICsgMSkgJiA3OwogCQkJCQlwaWNfdXBkYXRlX2lycShzLT5waWNzX3N0YXRlKTsKQEAgLTI1MSw3ICsyODIsNyBAQAogCQkJCWJyZWFrOwogCQkJY2FzZSAzOgogCQkJCWlycSA9IHZhbCAmIDc7Ci0JCQkJcy0+aXNyICY9IH4oMSA8PCBpcnEpOworCQkJCXBpY19jbGVhcl9pc3IocywgaXJxKTsKIAkJCQlwaWNfdXBkYXRlX2lycShzLT5waWNzX3N0YXRlKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgNjoKQEAgLTI2MCw4ICsyOTEsOCBAQAogCQkJCWJyZWFrOwogCQkJY2FzZSA3OgogCQkJCWlycSA9IHZhbCAmIDc7Ci0JCQkJcy0+aXNyICY9IH4oMSA8PCBpcnEpOwogCQkJCXMtPnByaW9yaXR5X2FkZCA9IChpcnEgKyAxKSAmIDc7CisJCQkJcGljX2NsZWFyX2lzcihzLCBpcnEpOwogCQkJCXBpY191cGRhdGVfaXJxKHMtPnBpY3Nfc3RhdGUpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKQEAgLTMwMyw3ICszMzQsNyBAQAogCQkJcy0+cGljc19zdGF0ZS0+cGljc1swXS5pcnIgJj0gfigxIDw8IDIpOwogCQl9CiAJCXMtPmlyciAmPSB+KDEgPDwgcmV0KTsKLQkJcy0+aXNyICY9IH4oMSA8PCByZXQpOworCQlwaWNfY2xlYXJfaXNyKHMsIHJldCk7CiAJCWlmIChhZGRyMSA+PiA3IHx8IHJldCAhPSAyKQogCQkJcGljX3VwZGF0ZV9pcnEocy0+cGljc19zdGF0ZSk7CiAJfSBlbHNlIHsKQEAgLTQyMiwxMCArNDUzLDE0IEBACiB7CiAJc3RydWN0IGt2bSAqa3ZtID0gb3BhcXVlOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bS0+dmNwdXNbMF07CisJc3RydWN0IGt2bV9waWMgKnMgPSBwaWNfaXJxY2hpcChrdm0pOworCWludCBpcnEgPSBwaWNfZ2V0X2lycSgmcy0+cGljc1swXSk7CiAKLQlwaWNfaXJxY2hpcChrdm0pLT5vdXRwdXQgPSBsZXZlbDsKLQlpZiAodmNwdSkKKwlzLT5vdXRwdXQgPSBsZXZlbDsKKwlpZiAodmNwdSAmJiBsZXZlbCAmJiAocy0+cGljc1swXS5pc3JfYWNrICYgKDEgPDwgaXJxKSkpIHsKKwkJcy0+cGljc1swXS5pc3JfYWNrICY9IH4oMSA8PCBpcnEpOwogCQlrdm1fdmNwdV9raWNrKHZjcHUpOworCX0KIH0KIAogc3RydWN0IGt2bV9waWMgKmt2bV9jcmVhdGVfcGljKHN0cnVjdCBrdm0gKmt2bSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pcnEuYyBiL2FyY2gveDg2L2t2bS9pcnEuYwppbmRleCA3NmQ3MzZiLi5jMDE5YjhlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaXJxLmMKKysrIGIvYXJjaC94ODYva3ZtL2lycS5jCkBAIC03Miw3ICs3Miw3IEBACiAJCWlmIChrdm1fYXBpY19hY2NlcHRfcGljX2ludHIodikpIHsKIAkJCXMgPSBwaWNfaXJxY2hpcCh2LT5rdm0pOwogCQkJcy0+b3V0cHV0ID0gMDsJCS8qIFBJQyAqLwotCQkJdmVjdG9yID0ga3ZtX3BpY19yZWFkX2lycShzKTsKKwkJCXZlY3RvciA9IGt2bV9waWNfcmVhZF9pcnEodi0+a3ZtKTsKIAkJfQogCX0KIAlyZXR1cm4gdmVjdG9yOwpAQCAtOTAsNyArOTAsNiBAQAogdm9pZCBrdm1fdGltZXJfaW50cl9wb3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlYykKIHsKIAlrdm1fYXBpY190aW1lcl9pbnRyX3Bvc3QodmNwdSwgdmVjKTsKLQlrdm1fcGl0X3RpbWVyX2ludHJfcG9zdCh2Y3B1LCB2ZWMpOwogCS8qIFRPRE86IFBJVCwgUlRDIGV0Yy4gKi8KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV90aW1lcl9pbnRyX3Bvc3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5oIGIvYXJjaC94ODYva3ZtL2lycS5oCmluZGV4IDdjYTQ3Y2IuLmYxN2M4ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pcnEuaAorKysgYi9hcmNoL3g4Ni9rdm0vaXJxLmgKQEAgLTQyLDYgKzQyLDcgQEAKIAl1OCBpcnI7CQkvKiBpbnRlcnJ1cHQgcmVxdWVzdCByZWdpc3RlciAqLwogCXU4IGltcjsJCS8qIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCiAJdTggaXNyOwkJLyogaW50ZXJydXB0IHNlcnZpY2UgcmVnaXN0ZXIgKi8KKwl1OCBpc3JfYWNrOwkvKiBpbnRlcnJ1cHQgYWNrIGRldGVjdGlvbiAqLwogCXU4IHByaW9yaXR5X2FkZDsJLyogaGlnaGVzdCBpcnEgcHJpb3JpdHkgKi8KIAl1OCBpcnFfYmFzZTsKIAl1OCByZWFkX3JlZ19zZWxlY3Q7CkBAIC02MywxMiArNjQsMTMgQEAKIAl2b2lkICppcnFfcmVxdWVzdF9vcGFxdWU7CiAJaW50IG91dHB1dDsJCS8qIGludHIgZnJvbSBtYXN0ZXIgUElDICovCiAJc3RydWN0IGt2bV9pb19kZXZpY2UgZGV2OworCXZvaWQgKCphY2tfbm90aWZpZXIpKHZvaWQgKm9wYXF1ZSwgaW50IGlycSk7CiB9OwogCiBzdHJ1Y3Qga3ZtX3BpYyAqa3ZtX2NyZWF0ZV9waWMoc3RydWN0IGt2bSAqa3ZtKTsKLXZvaWQga3ZtX3BpY19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKTsKLWludCBrdm1fcGljX3JlYWRfaXJxKHN0cnVjdCBrdm1fcGljICpzKTsKK2ludCBrdm1fcGljX3JlYWRfaXJxKHN0cnVjdCBrdm0gKmt2bSk7CiB2b2lkIGt2bV9waWNfdXBkYXRlX2lycShzdHJ1Y3Qga3ZtX3BpYyAqcyk7Cit2b2lkIGt2bV9waWNfY2xlYXJfaXNyX2FjayhzdHJ1Y3Qga3ZtICprdm0pOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fcGljICpwaWNfaXJxY2hpcChzdHJ1Y3Qga3ZtICprdm0pCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2NhY2hlX3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjgxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rdm0va3ZtX2NhY2hlX3JlZ3MuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIEFTTV9LVk1fQ0FDSEVfUkVHU19ICisjZGVmaW5lIEFTTV9LVk1fQ0FDSEVfUkVHU19ICisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBrdm1fcmVnaXN0ZXJfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCSAgICAgIGVudW0ga3ZtX3JlZyByZWcpCit7CisJaWYgKCF0ZXN0X2JpdChyZWcsICh1bnNpZ25lZCBsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCkpCisJCWt2bV94ODZfb3BzLT5jYWNoZV9yZWcodmNwdSwgcmVnKTsKKworCXJldHVybiB2Y3B1LT5hcmNoLnJlZ3NbcmVnXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICAgICAgZW51bSBrdm1fcmVnIHJlZywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl2Y3B1LT5hcmNoLnJlZ3NbcmVnXSA9IHZhbDsKKwlfX3NldF9iaXQocmVnLCAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfZGlydHkpOworCV9fc2V0X2JpdChyZWcsICh1bnNpZ25lZCBsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBrdm1fcmlwX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUklQKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9yaXBfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JJUCwgdmFsKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCmluZGV4IDczZjQzZGUuLjY1NzE5MjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9sYXBpYy5jCisrKyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KICNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgogI2luY2x1ZGUgImlycS5oIgogCiAjZGVmaW5lIFBSSWQ2NCAiZCIKQEAgLTMzOCwxMyArMzM5LDcgQEAKIAkJfSBlbHNlCiAJCQlhcGljX2NsZWFyX3ZlY3Rvcih2ZWN0b3IsIGFwaWMtPnJlZ3MgKyBBUElDX1RNUik7CiAKLQkJaWYgKHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFKQotCQkJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKLQkJZWxzZSBpZiAodmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfSEFMVEVEKSB7Ci0JCQl2Y3B1LT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFOwotCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnZjcHUtPndxKSkKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnZjcHUtPndxKTsKLQkJfQorCQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCiAJCXJlc3VsdCA9IChvcmlnX2lyciA9PSAwKTsKIAkJYnJlYWs7CkBAIC0zNzAsMjEgKzM2NSwxOCBAQAogCQkJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9JTklUX1JFQ0VJVkVEOwogCQkJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkgICAgICAgIklnbm9yaW5nIGRlLWFzc2VydCBJTklUIHRvIHZjcHUgJWRcbiIsCi0JCQkgICAgICAgdmNwdS0+dmNwdV9pZCk7CisJCQlhcGljX2RlYnVnKCJJZ25vcmluZyBkZS1hc3NlcnQgSU5JVCB0byB2Y3B1ICVkXG4iLAorCQkJCSAgIHZjcHUtPnZjcHVfaWQpOwogCQl9Ci0KIAkJYnJlYWs7CiAKIAljYXNlIEFQSUNfRE1fU1RBUlRVUDoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlNJUEkgdG8gdmNwdSAlZCB2ZWN0b3IgMHglMDJ4XG4iLAotCQkgICAgICAgdmNwdS0+dmNwdV9pZCwgdmVjdG9yKTsKKwkJYXBpY19kZWJ1ZygiU0lQSSB0byB2Y3B1ICVkIHZlY3RvciAweCUwMnhcbiIsCisJCQkgICB2Y3B1LT52Y3B1X2lkLCB2ZWN0b3IpOwogCQlpZiAodmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfSU5JVF9SRUNFSVZFRCkgewogCQkJdmNwdS0+YXJjaC5zaXBpX3ZlY3RvciA9IHZlY3RvcjsKIAkJCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfU0lQSV9SRUNFSVZFRDsKLQkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZ2Y3B1LT53cSkpCi0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ2Y3B1LT53cSk7CisJCQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCQl9CiAJCWJyZWFrOwogCkBAIC00MzgsNyArNDMwLDcgQEAKIHN0YXRpYyB2b2lkIGFwaWNfc2V0X2VvaShzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQogewogCWludCB2ZWN0b3IgPSBhcGljX2ZpbmRfaGlnaGVzdF9pc3IoYXBpYyk7Ci0KKwlpbnQgdHJpZ2dlcl9tb2RlOwogCS8qCiAJICogTm90IGV2ZXJ5IHdyaXRlIEVPSSB3aWxsIGhhcyBjb3JyZXNwb25kaW5nIElTUiwKIAkgKiBvbmUgZXhhbXBsZSBpcyB3aGVuIEtlcm5lbCBjaGVjayB0aW1lciBvbiBzZXR1cF9JT19BUElDCkBAIC00NTAsNyArNDQyLDEwIEBACiAJYXBpY191cGRhdGVfcHByKGFwaWMpOwogCiAJaWYgKGFwaWNfdGVzdF9hbmRfY2xlYXJfdmVjdG9yKHZlY3RvciwgYXBpYy0+cmVncyArIEFQSUNfVE1SKSkKLQkJa3ZtX2lvYXBpY191cGRhdGVfZW9pKGFwaWMtPnZjcHUtPmt2bSwgdmVjdG9yKTsKKwkJdHJpZ2dlcl9tb2RlID0gSU9BUElDX0xFVkVMX1RSSUc7CisJZWxzZQorCQl0cmlnZ2VyX21vZGUgPSBJT0FQSUNfRURHRV9UUklHOworCWt2bV9pb2FwaWNfdXBkYXRlX2VvaShhcGljLT52Y3B1LT5rdm0sIHZlY3RvciwgdHJpZ2dlcl9tb2RlKTsKIH0KIAogc3RhdGljIHZvaWQgYXBpY19zZW5kX2lwaShzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQpAQCAtNTU4LDggKzU1Myw3IEBACiAJc3RydWN0IGt2bV9ydW4gKnJ1biA9IHZjcHUtPnJ1bjsKIAogCXNldF9iaXQoS1ZNX1JFUV9SRVBPUlRfVFBSX0FDQ0VTUywgJnZjcHUtPnJlcXVlc3RzKTsKLQlrdm1feDg2X29wcy0+Y2FjaGVfcmVncyh2Y3B1KTsKLQlydW4tPnRwcl9hY2Nlc3MucmlwID0gdmNwdS0+YXJjaC5yaXA7CisJcnVuLT50cHJfYWNjZXNzLnJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAlydW4tPnRwcl9hY2Nlc3MuaXNfd3JpdGUgPSB3cml0ZTsKIH0KIApAQCAtNjgzLDkgKzY3Nyw5IEBACiAJICogUmVmZXIgU0RNIDguNC4xCiAJICovCiAJaWYgKGxlbiAhPSA0IHx8IGFsaWdubWVudCkgewotCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSICJhcGljIHdyaXRlOiBiYWQgc2l6ZT0lZCAlbHhcbiIsCi0JCQkgICAgICAgbGVuLCAobG9uZylhZGRyZXNzKTsKKwkJLyogRG9uJ3Qgc2hvdXQgbG91ZCwgJGluZmFtb3VzX29zIHdvdWxkIGNhdXNlIG9ubHkgbm9pc2UuICovCisJCWFwaWNfZGVidWcoImFwaWMgd3JpdGU6IGJhZCBzaXplPSVkICVseFxuIiwKKwkJCSAgIGxlbiwgKGxvbmcpYWRkcmVzcyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk0NywxMCArOTQxLDkgQEAKIAogCWlmKCFhdG9taWNfaW5jX2FuZF90ZXN0KCZhcGljLT50aW1lci5wZW5kaW5nKSkKIAkJc2V0X2JpdChLVk1fUkVRX1BFTkRJTkdfVElNRVIsICZhcGljLT52Y3B1LT5yZXF1ZXN0cyk7Ci0JaWYgKHdhaXRxdWV1ZV9hY3RpdmUocSkpIHsKLQkJYXBpYy0+dmNwdS0+YXJjaC5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9SVU5OQUJMRTsKKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZShxKSkKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHEpOwotCX0KKwogCWlmIChhcGljX2x2dHRfcGVyaW9kKGFwaWMpKSB7CiAJCXJlc3VsdCA9IDE7CiAJCWFwaWMtPnRpbWVyLmRldi5leHBpcmVzID0ga3RpbWVfYWRkX25zKApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS5jCmluZGV4IDNkYTI1MDguLjk5YzIzOWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuYworKysgYi9hcmNoL3g4Ni9rdm0vbW11LmMKQEAgLTcwLDYgKzcwLDkgQEAKIG1vZHVsZV9wYXJhbShkYmcsIGJvb2wsIDA2NDQpOwogI2VuZGlmCiAKK3N0YXRpYyBpbnQgb29zX3NoYWRvdyA9IDE7Cittb2R1bGVfcGFyYW0ob29zX3NoYWRvdywgYm9vbCwgMDY0NCk7CisKICNpZm5kZWYgTU1VX0RFQlVHCiAjZGVmaW5lIEFTU0VSVCh4KSBkbyB7IH0gd2hpbGUgKDApCiAjZWxzZQpAQCAtMTM1LDE4ICsxMzgsMjQgQEAKICNkZWZpbmUgQUNDX1VTRVJfTUFTSyAgICBQVF9VU0VSX01BU0sKICNkZWZpbmUgQUNDX0FMTCAgICAgICAgICAoQUNDX0VYRUNfTUFTSyB8IEFDQ19XUklURV9NQVNLIHwgQUNDX1VTRVJfTUFTSykKIAotc3RydWN0IGt2bV9wdl9tbXVfb3BfYnVmZmVyIHsKLQl2b2lkICpwdHI7Ci0JdW5zaWduZWQgbGVuOwotCXVuc2lnbmVkIHByb2Nlc3NlZDsKLQljaGFyIGJ1Zls1MTJdIF9fYWxpZ25lZChzaXplb2YobG9uZykpOwotfTsKKyNkZWZpbmUgU0hBRE9XX1BUX0lOREVYKGFkZHIsIGxldmVsKSBQVDY0X0lOREVYKGFkZHIsIGxldmVsKQogCiBzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyB7CiAJdTY0ICpzaGFkb3dfcHRlc1tSTUFQX0VYVF07CiAJc3RydWN0IGt2bV9ybWFwX2Rlc2MgKm1vcmU7CiB9OwogCitzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrIHsKKwlpbnQgKCplbnRyeSkoc3RydWN0IGt2bV9zaGFkb3dfd2FsayAqd2Fsaywgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkgICAgIHU2NCBhZGRyLCB1NjQgKnNwdGUsIGludCBsZXZlbCk7Cit9OworCitzdHJ1Y3Qga3ZtX3Vuc3luY193YWxrIHsKKwlpbnQgKCplbnRyeSkgKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCBzdHJ1Y3Qga3ZtX3Vuc3luY193YWxrICp3YWxrKTsKK307CisKK3R5cGVkZWYgaW50ICgqbW11X3BhcmVudF93YWxrX2ZuKSAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCk7CisKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcHRlX2NoYWluX2NhY2hlOwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpybWFwX2Rlc2NfY2FjaGU7CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1tdV9wYWdlX2hlYWRlcl9jYWNoZTsKQEAgLTQwNSwxNiArNDE0LDE5IEBACiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCByZXQgPSAwOwogCiAJYWRkciA9IGdmbl90b19odmEoa3ZtLCBnZm4pOwogCWlmIChrdm1faXNfZXJyb3JfaHZhKGFkZHIpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIHJldDsKIAorCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7CiAJaWYgKHZtYSAmJiBpc192bV9odWdldGxiX3BhZ2Uodm1hKSkKLQkJcmV0dXJuIDE7CisJCXJldCA9IDE7CisJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaXNfbGFyZ2VwYWdlX2JhY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGxhcmdlX2dmbikKQEAgLTY0OSw4ICs2NjEsNiBAQAogCiAJaWYgKHdyaXRlX3Byb3RlY3RlZCkKIAkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7Ci0KLQlhY2NvdW50X3NoYWRvd2VkKGt2bSwgZ2ZuKTsKIH0KIAogc3RhdGljIGludCBrdm1fdW5tYXBfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCkKQEAgLTg1OSw2ICs4NjksNzcgQEAKIAlCVUcoKTsKIH0KIAorCitzdGF0aWMgdm9pZCBtbXVfcGFyZW50X3dhbGsoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKKwkJCSAgICBtbXVfcGFyZW50X3dhbGtfZm4gZm4pCit7CisJc3RydWN0IGt2bV9wdGVfY2hhaW4gKnB0ZV9jaGFpbjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYXJlbnRfc3A7CisJaW50IGk7CisKKwlpZiAoIXNwLT5tdWx0aW1hcHBlZCAmJiBzcC0+cGFyZW50X3B0ZSkgeworCQlwYXJlbnRfc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwLT5wYXJlbnRfcHRlKSk7CisJCWZuKHZjcHUsIHBhcmVudF9zcCk7CisJCW1tdV9wYXJlbnRfd2Fsayh2Y3B1LCBwYXJlbnRfc3AsIGZuKTsKKwkJcmV0dXJuOworCX0KKwlobGlzdF9mb3JfZWFjaF9lbnRyeShwdGVfY2hhaW4sIG5vZGUsICZzcC0+cGFyZW50X3B0ZXMsIGxpbmspCisJCWZvciAoaSA9IDA7IGkgPCBOUl9QVEVfQ0hBSU5fRU5UUklFUzsgKytpKSB7CisJCQlpZiAoIXB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbaV0pCisJCQkJYnJlYWs7CisJCQlwYXJlbnRfc3AgPSBwYWdlX2hlYWRlcihfX3BhKHB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbaV0pKTsKKwkJCWZuKHZjcHUsIHBhcmVudF9zcCk7CisJCQltbXVfcGFyZW50X3dhbGsodmNwdSwgcGFyZW50X3NwLCBmbik7CisJCX0KK30KKworc3RhdGljIHZvaWQga3ZtX21tdV91cGRhdGVfdW5zeW5jX2JpdG1hcCh1NjQgKnNwdGUpCit7CisJdW5zaWduZWQgaW50IGluZGV4OworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwID0gcGFnZV9oZWFkZXIoX19wYShzcHRlKSk7CisKKwlpbmRleCA9IHNwdGUgLSBzcC0+c3B0OworCV9fc2V0X2JpdChpbmRleCwgc3AtPnVuc3luY19jaGlsZF9iaXRtYXApOworCXNwLT51bnN5bmNfY2hpbGRyZW4gPSAxOworfQorCitzdGF0aWMgdm9pZCBrdm1fbW11X3VwZGF0ZV9wYXJlbnRzX3Vuc3luYyhzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3sKKwlzdHJ1Y3Qga3ZtX3B0ZV9jaGFpbiAqcHRlX2NoYWluOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCWludCBpOworCisJaWYgKCFzcC0+cGFyZW50X3B0ZSkKKwkJcmV0dXJuOworCisJaWYgKCFzcC0+bXVsdGltYXBwZWQpIHsKKwkJa3ZtX21tdV91cGRhdGVfdW5zeW5jX2JpdG1hcChzcC0+cGFyZW50X3B0ZSk7CisJCXJldHVybjsKKwl9CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShwdGVfY2hhaW4sIG5vZGUsICZzcC0+cGFyZW50X3B0ZXMsIGxpbmspCisJCWZvciAoaSA9IDA7IGkgPCBOUl9QVEVfQ0hBSU5fRU5UUklFUzsgKytpKSB7CisJCQlpZiAoIXB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbaV0pCisJCQkJYnJlYWs7CisJCQlrdm1fbW11X3VwZGF0ZV91bnN5bmNfYml0bWFwKHB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbaV0pOworCQl9Cit9CisKK3N0YXRpYyBpbnQgdW5zeW5jX3dhbGtfZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3sKKwlzcC0+dW5zeW5jX2NoaWxkcmVuID0gMTsKKwlrdm1fbW11X3VwZGF0ZV9wYXJlbnRzX3Vuc3luYyhzcCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9tbXVfbWFya19wYXJlbnRzX3Vuc3luYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCW1tdV9wYXJlbnRfd2Fsayh2Y3B1LCBzcCwgdW5zeW5jX3dhbGtfZm4pOworCWt2bV9tbXVfdXBkYXRlX3BhcmVudHNfdW5zeW5jKHNwKTsKK30KKwogc3RhdGljIHZvaWQgbm9ucGFnaW5nX3ByZWZldGNoX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKIHsKQEAgLTg2OCw2ICs5NDksNTggQEAKIAkJc3AtPnNwdFtpXSA9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOwogfQogCitzdGF0aWMgaW50IG5vbnBhZ2luZ19zeW5jX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBub25wYWdpbmdfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKQoreworfQorCisjZGVmaW5lIGZvcl9lYWNoX3Vuc3luY19jaGlsZHJlbihiaXRtYXAsIGlkeCkJCVwKKwlmb3IgKGlkeCA9IGZpbmRfZmlyc3RfYml0KGJpdG1hcCwgNTEyKTsJCVwKKwkgICAgIGlkeCA8IDUxMjsJCQkJCVwKKwkgICAgIGlkeCA9IGZpbmRfbmV4dF9iaXQoYml0bWFwLCA1MTIsIGlkeCsxKSkKKworc3RhdGljIGludCBtbXVfdW5zeW5jX3dhbGsoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsCisJCQkgICBzdHJ1Y3Qga3ZtX3Vuc3luY193YWxrICp3YWxrZXIpCit7CisJaW50IGksIHJldDsKKworCWlmICghc3AtPnVuc3luY19jaGlsZHJlbikKKwkJcmV0dXJuIDA7CisKKwlmb3JfZWFjaF91bnN5bmNfY2hpbGRyZW4oc3AtPnVuc3luY19jaGlsZF9iaXRtYXAsIGkpIHsKKwkJdTY0IGVudCA9IHNwLT5zcHRbaV07CisKKwkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShlbnQpKSB7CisJCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpjaGlsZDsKKwkJCWNoaWxkID0gcGFnZV9oZWFkZXIoZW50ICYgUFQ2NF9CQVNFX0FERFJfTUFTSyk7CisKKwkJCWlmIChjaGlsZC0+dW5zeW5jX2NoaWxkcmVuKSB7CisJCQkJcmV0ID0gbW11X3Vuc3luY193YWxrKGNoaWxkLCB3YWxrZXIpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CisJCQkJX19jbGVhcl9iaXQoaSwgc3AtPnVuc3luY19jaGlsZF9iaXRtYXApOworCQkJfQorCisJCQlpZiAoY2hpbGQtPnVuc3luYykgeworCQkJCXJldCA9IHdhbGtlci0+ZW50cnkoY2hpbGQsIHdhbGtlcik7CisJCQkJX19jbGVhcl9iaXQoaSwgc3AtPnVuc3luY19jaGlsZF9iaXRtYXApOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZmluZF9maXJzdF9iaXQoc3AtPnVuc3luY19jaGlsZF9iaXRtYXAsIDUxMikgPT0gNTEyKQorCQlzcC0+dW5zeW5jX2NoaWxkcmVuID0gMDsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGt2bV9tbXVfcGFnZSAqa3ZtX21tdV9sb29rdXBfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKIHsKIAl1bnNpZ25lZCBpbmRleDsKQEAgLTg4OCw2ICsxMDIxLDU5IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIGt2bV91bmxpbmtfdW5zeW5jX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3sKKwlXQVJOX09OKCFzcC0+dW5zeW5jKTsKKwlzcC0+dW5zeW5jID0gMDsKKwktLWt2bS0+c3RhdC5tbXVfdW5zeW5jOworfQorCitzdGF0aWMgaW50IGt2bV9tbXVfemFwX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCk7CisKK3N0YXRpYyBpbnQga3ZtX3N5bmNfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCWlmIChzcC0+cm9sZS5nbGV2ZWxzICE9IHZjcHUtPmFyY2gubW11LnJvb3RfbGV2ZWwpIHsKKwkJa3ZtX21tdV96YXBfcGFnZSh2Y3B1LT5rdm0sIHNwKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcm1hcF93cml0ZV9wcm90ZWN0KHZjcHUtPmt2bSwgc3AtPmdmbik7CisJaWYgKHZjcHUtPmFyY2gubW11LnN5bmNfcGFnZSh2Y3B1LCBzcCkpIHsKKwkJa3ZtX21tdV96YXBfcGFnZSh2Y3B1LT5rdm0sIHNwKTsKKwkJcmV0dXJuIDE7CisJfQorCisJa3ZtX21tdV9mbHVzaF90bGIodmNwdSk7CisJa3ZtX3VubGlua191bnN5bmNfcGFnZSh2Y3B1LT5rdm0sIHNwKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHN5bmNfd2Fsa2VyIHsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJc3RydWN0IGt2bV91bnN5bmNfd2FsayB3YWxrZXI7Cit9OworCitzdGF0aWMgaW50IG1tdV9zeW5jX2ZuKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCBzdHJ1Y3Qga3ZtX3Vuc3luY193YWxrICp3YWxrKQoreworCXN0cnVjdCBzeW5jX3dhbGtlciAqc3luY193YWxrID0gY29udGFpbmVyX29mKHdhbGssIHN0cnVjdCBzeW5jX3dhbGtlciwKKwkJCQkJCSAgICAgd2Fsa2VyKTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBzeW5jX3dhbGstPnZjcHU7CisKKwlrdm1fc3luY19wYWdlKHZjcHUsIHNwKTsKKwlyZXR1cm4gKG5lZWRfcmVzY2hlZCgpIHx8IHNwaW5fbmVlZGJyZWFrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKSk7Cit9CisKK3N0YXRpYyB2b2lkIG1tdV9zeW5jX2NoaWxkcmVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCit7CisJc3RydWN0IHN5bmNfd2Fsa2VyIHdhbGtlciA9IHsKKwkJLndhbGtlciA9IHsgLmVudHJ5ID0gbW11X3N5bmNfZm4sIH0sCisJCS52Y3B1ID0gdmNwdSwKKwl9OworCisJd2hpbGUgKG1tdV91bnN5bmNfd2FsayhzcCwgJndhbGtlci53YWxrZXIpKQorCQljb25kX3Jlc2NoZWRfbG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qga3ZtX21tdV9wYWdlICprdm1fbW11X2dldF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkJICAgICBnZm5fdCBnZm4sCiAJCQkJCSAgICAgZ3ZhX3QgZ2FkZHIsCkBAIC05MDEsNyArMTA4Nyw3IEBACiAJdW5zaWduZWQgcXVhZHJhbnQ7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKIAogCXJvbGUud29yZCA9IDA7CiAJcm9sZS5nbGV2ZWxzID0gdmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbDsKQEAgLTkxNyw5ICsxMTAzLDIwIEBACiAJCSBnZm4sIHJvbGUud29yZCk7CiAJaW5kZXggPSBrdm1fcGFnZV90YWJsZV9oYXNoZm4oZ2ZuKTsKIAlidWNrZXQgPSAmdmNwdS0+a3ZtLT5hcmNoLm1tdV9wYWdlX2hhc2hbaW5kZXhdOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHNwLCBub2RlLCBidWNrZXQsIGhhc2hfbGluaykKLQkJaWYgKHNwLT5nZm4gPT0gZ2ZuICYmIHNwLT5yb2xlLndvcmQgPT0gcm9sZS53b3JkKSB7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzcCwgbm9kZSwgdG1wLCBidWNrZXQsIGhhc2hfbGluaykKKwkJaWYgKHNwLT5nZm4gPT0gZ2ZuKSB7CisJCQlpZiAoc3AtPnVuc3luYykKKwkJCQlpZiAoa3ZtX3N5bmNfcGFnZSh2Y3B1LCBzcCkpCisJCQkJCWNvbnRpbnVlOworCisJCQlpZiAoc3AtPnJvbGUud29yZCAhPSByb2xlLndvcmQpCisJCQkJY29udGludWU7CisKIAkJCW1tdV9wYWdlX2FkZF9wYXJlbnRfcHRlKHZjcHUsIHNwLCBwYXJlbnRfcHRlKTsKKwkJCWlmIChzcC0+dW5zeW5jX2NoaWxkcmVuKSB7CisJCQkJc2V0X2JpdChLVk1fUkVRX01NVV9TWU5DLCAmdmNwdS0+cmVxdWVzdHMpOworCQkJCWt2bV9tbXVfbWFya19wYXJlbnRzX3Vuc3luYyh2Y3B1LCBzcCk7CisJCQl9CiAJCQlwZ3ByaW50aygiJXM6IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gc3A7CiAJCX0KQEAgLTkzMSw4ICsxMTI4LDEwIEBACiAJc3AtPmdmbiA9IGdmbjsKIAlzcC0+cm9sZSA9IHJvbGU7CiAJaGxpc3RfYWRkX2hlYWQoJnNwLT5oYXNoX2xpbmssIGJ1Y2tldCk7Ci0JaWYgKCFtZXRhcGh5c2ljYWwpCisJaWYgKCFtZXRhcGh5c2ljYWwpIHsKIAkJcm1hcF93cml0ZV9wcm90ZWN0KHZjcHUtPmt2bSwgZ2ZuKTsKKwkJYWNjb3VudF9zaGFkb3dlZCh2Y3B1LT5rdm0sIGdmbik7CisJfQogCWlmIChzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSAhPSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlKQogCQl2Y3B1LT5hcmNoLm1tdS5wcmVmZXRjaF9wYWdlKHZjcHUsIHNwKTsKIAllbHNlCkBAIC05NDAsNiArMTEzOSwzNSBAQAogCXJldHVybiBzcDsKIH0KIAorc3RhdGljIGludCB3YWxrX3NoYWRvdyhzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrICp3YWxrZXIsCisJCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyKQoreworCWhwYV90IHNoYWRvd19hZGRyOworCWludCBsZXZlbDsKKwlpbnQgcjsKKwl1NjQgKnNwdGVwOworCXVuc2lnbmVkIGluZGV4OworCisJc2hhZG93X2FkZHIgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2hwYTsKKwlsZXZlbCA9IHZjcHUtPmFyY2gubW11LnNoYWRvd19yb290X2xldmVsOworCWlmIChsZXZlbCA9PSBQVDMyRV9ST09UX0xFVkVMKSB7CisJCXNoYWRvd19hZGRyID0gdmNwdS0+YXJjaC5tbXUucGFlX3Jvb3RbKGFkZHIgPj4gMzApICYgM107CisJCXNoYWRvd19hZGRyICY9IFBUNjRfQkFTRV9BRERSX01BU0s7CisJCS0tbGV2ZWw7CisJfQorCisJd2hpbGUgKGxldmVsID49IFBUX1BBR0VfVEFCTEVfTEVWRUwpIHsKKwkJaW5kZXggPSBTSEFET1dfUFRfSU5ERVgoYWRkciwgbGV2ZWwpOworCQlzcHRlcCA9ICgodTY0ICopX192YShzaGFkb3dfYWRkcikpICsgaW5kZXg7CisJCXIgPSB3YWxrZXItPmVudHJ5KHdhbGtlciwgdmNwdSwgYWRkciwgc3B0ZXAsIGxldmVsKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwkJc2hhZG93X2FkZHIgPSAqc3B0ZXAgJiBQVDY0X0JBU0VfQUREUl9NQVNLOworCQktLWxldmVsOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQga3ZtX21tdV9wYWdlX3VubGlua19jaGlsZHJlbihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJCSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKIHsKQEAgLTk1NSw3ICsxMTgzLDYgQEAKIAkJCQlybWFwX3JlbW92ZShrdm0sICZwdFtpXSk7CiAJCQlwdFtpXSA9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOwogCQl9Ci0JCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOwogCQlyZXR1cm47CiAJfQogCkBAIC05NzQsNyArMTIwMSw2IEBACiAJCX0KIAkJcHRbaV0gPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKIAl9Ci0Ja3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9tbXVfcHV0X3BhZ2Uoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHU2NCAqcGFyZW50X3B0ZSkKQEAgLTk5MSwxMSArMTIxNywxMCBAQAogCQkJa3ZtLT52Y3B1c1tpXS0+YXJjaC5sYXN0X3B0ZV91cGRhdGVkID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQga3ZtX21tdV96YXBfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQorc3RhdGljIHZvaWQga3ZtX21tdV91bmxpbmtfcGFyZW50cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewogCXU2NCAqcGFyZW50X3B0ZTsKIAotCSsra3ZtLT5zdGF0Lm1tdV9zaGFkb3dfemFwcGVkOwogCXdoaWxlIChzcC0+bXVsdGltYXBwZWQgfHwgc3AtPnBhcmVudF9wdGUpIHsKIAkJaWYgKCFzcC0+bXVsdGltYXBwZWQpCiAJCQlwYXJlbnRfcHRlID0gc3AtPnBhcmVudF9wdGU7CkBAIC0xMDEwLDIxICsxMjM1LDU5IEBACiAJCWt2bV9tbXVfcHV0X3BhZ2Uoc3AsIHBhcmVudF9wdGUpOwogCQlzZXRfc2hhZG93X3B0ZShwYXJlbnRfcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CiAJfQorfQorCitzdHJ1Y3QgemFwX3dhbGtlciB7CisJc3RydWN0IGt2bV91bnN5bmNfd2FsayB3YWxrZXI7CisJc3RydWN0IGt2bSAqa3ZtOworCWludCB6YXBwZWQ7Cit9OworCitzdGF0aWMgaW50IG1tdV96YXBfZm4oc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHN0cnVjdCBrdm1fdW5zeW5jX3dhbGsgKndhbGspCit7CisJc3RydWN0IHphcF93YWxrZXIgKnphcF93YWxrID0gY29udGFpbmVyX29mKHdhbGssIHN0cnVjdCB6YXBfd2Fsa2VyLAorCQkJCQkJICAgICB3YWxrZXIpOworCWt2bV9tbXVfemFwX3BhZ2UoemFwX3dhbGstPmt2bSwgc3ApOworCXphcF93YWxrLT56YXBwZWQgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1tdV96YXBfdW5zeW5jX2NoaWxkcmVuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCit7CisJc3RydWN0IHphcF93YWxrZXIgd2Fsa2VyID0geworCQkud2Fsa2VyID0geyAuZW50cnkgPSBtbXVfemFwX2ZuLCB9LAorCQkua3ZtID0ga3ZtLAorCQkuemFwcGVkID0gMCwKKwl9OworCisJaWYgKHNwLT5yb2xlLmxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwpCisJCXJldHVybiAwOworCW1tdV91bnN5bmNfd2FsayhzcCwgJndhbGtlci53YWxrZXIpOworCXJldHVybiB3YWxrZXIuemFwcGVkOworfQorCitzdGF0aWMgaW50IGt2bV9tbXVfemFwX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3sKKwlpbnQgcmV0OworCSsra3ZtLT5zdGF0Lm1tdV9zaGFkb3dfemFwcGVkOworCXJldCA9IG1tdV96YXBfdW5zeW5jX2NoaWxkcmVuKGt2bSwgc3ApOwogCWt2bV9tbXVfcGFnZV91bmxpbmtfY2hpbGRyZW4oa3ZtLCBzcCk7CisJa3ZtX21tdV91bmxpbmtfcGFyZW50cyhrdm0sIHNwKTsKKwlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKKwlpZiAoIXNwLT5yb2xlLmludmFsaWQgJiYgIXNwLT5yb2xlLm1ldGFwaHlzaWNhbCkKKwkJdW5hY2NvdW50X3NoYWRvd2VkKGt2bSwgc3AtPmdmbik7CisJaWYgKHNwLT51bnN5bmMpCisJCWt2bV91bmxpbmtfdW5zeW5jX3BhZ2Uoa3ZtLCBzcCk7CiAJaWYgKCFzcC0+cm9vdF9jb3VudCkgewotCQlpZiAoIXNwLT5yb2xlLm1ldGFwaHlzaWNhbCAmJiAhc3AtPnJvbGUuaW52YWxpZCkKLQkJCXVuYWNjb3VudF9zaGFkb3dlZChrdm0sIHNwLT5nZm4pOwogCQlobGlzdF9kZWwoJnNwLT5oYXNoX2xpbmspOwogCQlrdm1fbW11X2ZyZWVfcGFnZShrdm0sIHNwKTsKIAl9IGVsc2UgewotCQlpbnQgaW52YWxpZCA9IHNwLT5yb2xlLmludmFsaWQ7Ci0JCWxpc3RfbW92ZSgmc3AtPmxpbmssICZrdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcyk7CiAJCXNwLT5yb2xlLmludmFsaWQgPSAxOworCQlsaXN0X21vdmUoJnNwLT5saW5rLCAma3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMpOwogCQlrdm1fcmVsb2FkX3JlbW90ZV9tbXVzKGt2bSk7Ci0JCWlmICghc3AtPnJvbGUubWV0YXBoeXNpY2FsICYmICFpbnZhbGlkKQotCQkJdW5hY2NvdW50X3NoYWRvd2VkKGt2bSwgc3AtPmdmbik7CiAJfQogCWt2bV9tbXVfcmVzZXRfbGFzdF9wdGVfdXBkYXRlZChrdm0pOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0xMDc3LDggKzEzNDAsOSBAQAogCQlpZiAoc3AtPmdmbiA9PSBnZm4gJiYgIXNwLT5yb2xlLm1ldGFwaHlzaWNhbCkgewogCQkJcGdwcmludGsoIiVzOiBnZm4gJWx4IHJvbGUgJXhcbiIsIF9fZnVuY19fLCBnZm4sCiAJCQkJIHNwLT5yb2xlLndvcmQpOwotCQkJa3ZtX21tdV96YXBfcGFnZShrdm0sIHNwKTsKIAkJCXIgPSAxOworCQkJaWYgKGt2bV9tbXVfemFwX3BhZ2Uoa3ZtLCBzcCkpCisJCQkJbiA9IGJ1Y2tldC0+Zmlyc3Q7CiAJCX0KIAlyZXR1cm4gcjsKIH0KQEAgLTExMDEsNiArMTM2NSwyMCBAQAogCV9fc2V0X2JpdChzbG90LCAmc3AtPnNsb3RfYml0bWFwKTsKIH0KIAorc3RhdGljIHZvaWQgbW11X2NvbnZlcnRfbm90cmFwKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCWludCBpOworCXU2NCAqcHQgPSBzcC0+c3B0OworCisJaWYgKHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlID09IHNoYWRvd19ub3RyYXBfbm9ucHJlc2VudF9wdGUpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBQVDY0X0VOVF9QRVJfUEFHRTsgKytpKSB7CisJCWlmIChwdFtpXSA9PSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlKQorCQkJc2V0X3NoYWRvd19wdGUoJnB0W2ldLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJfQorfQorCiBzdHJ1Y3QgcGFnZSAqZ3ZhX3RvX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC0xMTEwLDIwICsxMzg4LDExNiBAQAogCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKQogCQlyZXR1cm4gTlVMTDsKIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlwYWdlID0gZ2ZuX3RvX3BhZ2UodmNwdS0+a3ZtLCBncGEgPj4gUEFHRV9TSElGVCk7Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCXJldHVybiBwYWdlOwogfQogCitzdGF0aWMgaW50IGt2bV91bnN5bmNfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCXVuc2lnbmVkIGluZGV4OworCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqczsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm47CisKKwlpbmRleCA9IGt2bV9wYWdlX3RhYmxlX2hhc2hmbihzcC0+Z2ZuKTsKKwlidWNrZXQgPSAmdmNwdS0+a3ZtLT5hcmNoLm1tdV9wYWdlX2hhc2hbaW5kZXhdOworCS8qIGRvbid0IHVuc3luYyBpZiBwYWdldGFibGUgaXMgc2hhZG93ZWQgd2l0aCBtdWx0aXBsZSByb2xlcyAqLworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocywgbm9kZSwgbiwgYnVja2V0LCBoYXNoX2xpbmspIHsKKwkJaWYgKHMtPmdmbiAhPSBzcC0+Z2ZuIHx8IHMtPnJvbGUubWV0YXBoeXNpY2FsKQorCQkJY29udGludWU7CisJCWlmIChzLT5yb2xlLndvcmQgIT0gc3AtPnJvbGUud29yZCkKKwkJCXJldHVybiAxOworCX0KKwlrdm1fbW11X21hcmtfcGFyZW50c191bnN5bmModmNwdSwgc3ApOworCSsrdmNwdS0+a3ZtLT5zdGF0Lm1tdV91bnN5bmM7CisJc3AtPnVuc3luYyA9IDE7CisJbW11X2NvbnZlcnRfbm90cmFwKHNwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbXVfbmVlZF93cml0ZV9wcm90ZWN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLAorCQkJCSAgYm9vbCBjYW5fdW5zeW5jKQoreworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNoYWRvdzsKKworCXNoYWRvdyA9IGt2bV9tbXVfbG9va3VwX3BhZ2UodmNwdS0+a3ZtLCBnZm4pOworCWlmIChzaGFkb3cpIHsKKwkJaWYgKHNoYWRvdy0+cm9sZS5sZXZlbCAhPSBQVF9QQUdFX1RBQkxFX0xFVkVMKQorCQkJcmV0dXJuIDE7CisJCWlmIChzaGFkb3ctPnVuc3luYykKKwkJCXJldHVybiAwOworCQlpZiAoY2FuX3Vuc3luYyAmJiBvb3Nfc2hhZG93KQorCQkJcmV0dXJuIGt2bV91bnN5bmNfcGFnZSh2Y3B1LCBzaGFkb3cpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnNoYWRvd19wdGUsCisJCSAgICB1bnNpZ25lZCBwdGVfYWNjZXNzLCBpbnQgdXNlcl9mYXVsdCwKKwkJICAgIGludCB3cml0ZV9mYXVsdCwgaW50IGRpcnR5LCBpbnQgbGFyZ2VwYWdlLAorCQkgICAgZ2ZuX3QgZ2ZuLCBwZm5fdCBwZm4sIGJvb2wgc3BlY3VsYXRpdmUsCisJCSAgICBib29sIGNhbl91bnN5bmMpCit7CisJdTY0IHNwdGU7CisJaW50IHJldCA9IDA7CisJLyoKKwkgKiBXZSBkb24ndCBzZXQgdGhlIGFjY2Vzc2VkIGJpdCwgc2luY2Ugd2Ugc29tZXRpbWVzIHdhbnQgdG8gc2VlCisJICogd2hldGhlciB0aGUgZ3Vlc3QgYWN0dWFsbHkgdXNlZCB0aGUgcHRlIChpbiBvcmRlciB0byBkZXRlY3QKKwkgKiBkZW1hbmQgcGFnaW5nKS4KKwkgKi8KKwlzcHRlID0gc2hhZG93X2Jhc2VfcHJlc2VudF9wdGUgfCBzaGFkb3dfZGlydHlfbWFzazsKKwlpZiAoIXNwZWN1bGF0aXZlKQorCQlzcHRlIHw9IHNoYWRvd19hY2Nlc3NlZF9tYXNrOworCWlmICghZGlydHkpCisJCXB0ZV9hY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOworCWlmIChwdGVfYWNjZXNzICYgQUNDX0VYRUNfTUFTSykKKwkJc3B0ZSB8PSBzaGFkb3dfeF9tYXNrOworCWVsc2UKKwkJc3B0ZSB8PSBzaGFkb3dfbnhfbWFzazsKKwlpZiAocHRlX2FjY2VzcyAmIEFDQ19VU0VSX01BU0spCisJCXNwdGUgfD0gc2hhZG93X3VzZXJfbWFzazsKKwlpZiAobGFyZ2VwYWdlKQorCQlzcHRlIHw9IFBUX1BBR0VfU0laRV9NQVNLOworCisJc3B0ZSB8PSAodTY0KXBmbiA8PCBQQUdFX1NISUZUOworCisJaWYgKChwdGVfYWNjZXNzICYgQUNDX1dSSVRFX01BU0spCisJICAgIHx8ICh3cml0ZV9mYXVsdCAmJiAhaXNfd3JpdGVfcHJvdGVjdGlvbih2Y3B1KSAmJiAhdXNlcl9mYXVsdCkpIHsKKworCQlpZiAobGFyZ2VwYWdlICYmIGhhc193cnByb3RlY3RlZF9wYWdlKHZjcHUtPmt2bSwgZ2ZuKSkgeworCQkJcmV0ID0gMTsKKwkJCXNwdGUgPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKKwkJCWdvdG8gc2V0X3B0ZTsKKwkJfQorCisJCXNwdGUgfD0gUFRfV1JJVEFCTEVfTUFTSzsKKworCQlpZiAobW11X25lZWRfd3JpdGVfcHJvdGVjdCh2Y3B1LCBnZm4sIGNhbl91bnN5bmMpKSB7CisJCQlwZ3ByaW50aygiJXM6IGZvdW5kIHNoYWRvdyBwYWdlIGZvciAlbHgsIG1hcmtpbmcgcm9cbiIsCisJCQkJIF9fZnVuY19fLCBnZm4pOworCQkJcmV0ID0gMTsKKwkJCXB0ZV9hY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOworCQkJaWYgKGlzX3dyaXRlYmxlX3B0ZShzcHRlKSkKKwkJCQlzcHRlICY9IH5QVF9XUklUQUJMRV9NQVNLOworCQl9CisJfQorCisJaWYgKHB0ZV9hY2Nlc3MgJiBBQ0NfV1JJVEVfTUFTSykKKwkJbWFya19wYWdlX2RpcnR5KHZjcHUtPmt2bSwgZ2ZuKTsKKworc2V0X3B0ZToKKwlzZXRfc2hhZG93X3B0ZShzaGFkb3dfcHRlLCBzcHRlKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCBtbXVfc2V0X3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnNoYWRvd19wdGUsCiAJCQkgdW5zaWduZWQgcHRfYWNjZXNzLCB1bnNpZ25lZCBwdGVfYWNjZXNzLAogCQkJIGludCB1c2VyX2ZhdWx0LCBpbnQgd3JpdGVfZmF1bHQsIGludCBkaXJ0eSwKIAkJCSBpbnQgKnB0d3JpdGUsIGludCBsYXJnZXBhZ2UsIGdmbl90IGdmbiwKIAkJCSBwZm5fdCBwZm4sIGJvb2wgc3BlY3VsYXRpdmUpCiB7Ci0JdTY0IHNwdGU7CiAJaW50IHdhc19ybWFwcGVkID0gMDsKIAlpbnQgd2FzX3dyaXRlYmxlID0gaXNfd3JpdGVibGVfcHRlKCpzaGFkb3dfcHRlKTsKIApAQCAtMTE1NCw1OSArMTUyOCwxOSBAQAogCQkJCXdhc19ybWFwcGVkID0gMTsKIAkJfQogCX0KLQotCS8qCi0JICogV2UgZG9uJ3Qgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIHNpbmNlIHdlIHNvbWV0aW1lcyB3YW50IHRvIHNlZQotCSAqIHdoZXRoZXIgdGhlIGd1ZXN0IGFjdHVhbGx5IHVzZWQgdGhlIHB0ZSAoaW4gb3JkZXIgdG8gZGV0ZWN0Ci0JICogZGVtYW5kIHBhZ2luZykuCi0JICovCi0Jc3B0ZSA9IHNoYWRvd19iYXNlX3ByZXNlbnRfcHRlIHwgc2hhZG93X2RpcnR5X21hc2s7Ci0JaWYgKCFzcGVjdWxhdGl2ZSkKLQkJcHRlX2FjY2VzcyB8PSBQVF9BQ0NFU1NFRF9NQVNLOwotCWlmICghZGlydHkpCi0JCXB0ZV9hY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOwotCWlmIChwdGVfYWNjZXNzICYgQUNDX0VYRUNfTUFTSykKLQkJc3B0ZSB8PSBzaGFkb3dfeF9tYXNrOwotCWVsc2UKLQkJc3B0ZSB8PSBzaGFkb3dfbnhfbWFzazsKLQlpZiAocHRlX2FjY2VzcyAmIEFDQ19VU0VSX01BU0spCi0JCXNwdGUgfD0gc2hhZG93X3VzZXJfbWFzazsKLQlpZiAobGFyZ2VwYWdlKQotCQlzcHRlIHw9IFBUX1BBR0VfU0laRV9NQVNLOwotCi0Jc3B0ZSB8PSAodTY0KXBmbiA8PCBQQUdFX1NISUZUOwotCi0JaWYgKChwdGVfYWNjZXNzICYgQUNDX1dSSVRFX01BU0spCi0JICAgIHx8ICh3cml0ZV9mYXVsdCAmJiAhaXNfd3JpdGVfcHJvdGVjdGlvbih2Y3B1KSAmJiAhdXNlcl9mYXVsdCkpIHsKLQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc2hhZG93OwotCi0JCXNwdGUgfD0gUFRfV1JJVEFCTEVfTUFTSzsKLQotCQlzaGFkb3cgPSBrdm1fbW11X2xvb2t1cF9wYWdlKHZjcHUtPmt2bSwgZ2ZuKTsKLQkJaWYgKHNoYWRvdyB8fAotCQkgICAobGFyZ2VwYWdlICYmIGhhc193cnByb3RlY3RlZF9wYWdlKHZjcHUtPmt2bSwgZ2ZuKSkpIHsKLQkJCXBncHJpbnRrKCIlczogZm91bmQgc2hhZG93IHBhZ2UgZm9yICVseCwgbWFya2luZyByb1xuIiwKLQkJCQkgX19mdW5jX18sIGdmbik7Ci0JCQlwdGVfYWNjZXNzICY9IH5BQ0NfV1JJVEVfTUFTSzsKLQkJCWlmIChpc193cml0ZWJsZV9wdGUoc3B0ZSkpIHsKLQkJCQlzcHRlICY9IH5QVF9XUklUQUJMRV9NQVNLOwotCQkJCWt2bV94ODZfb3BzLT50bGJfZmx1c2godmNwdSk7Ci0JCQl9Ci0JCQlpZiAod3JpdGVfZmF1bHQpCi0JCQkJKnB0d3JpdGUgPSAxOwotCQl9CisJaWYgKHNldF9zcHRlKHZjcHUsIHNoYWRvd19wdGUsIHB0ZV9hY2Nlc3MsIHVzZXJfZmF1bHQsIHdyaXRlX2ZhdWx0LAorCQkgICAgICBkaXJ0eSwgbGFyZ2VwYWdlLCBnZm4sIHBmbiwgc3BlY3VsYXRpdmUsIHRydWUpKSB7CisJCWlmICh3cml0ZV9mYXVsdCkKKwkJCSpwdHdyaXRlID0gMTsKKwkJa3ZtX3g4Nl9vcHMtPnRsYl9mbHVzaCh2Y3B1KTsKIAl9CiAKLQlpZiAocHRlX2FjY2VzcyAmIEFDQ19XUklURV9NQVNLKQotCQltYXJrX3BhZ2VfZGlydHkodmNwdS0+a3ZtLCBnZm4pOwotCi0JcGdwcmludGsoIiVzOiBzZXR0aW5nIHNwdGUgJWxseFxuIiwgX19mdW5jX18sIHNwdGUpOworCXBncHJpbnRrKCIlczogc2V0dGluZyBzcHRlICVsbHhcbiIsIF9fZnVuY19fLCAqc2hhZG93X3B0ZSk7CiAJcGdwcmludGsoImluc3RhbnRpYXRpbmcgJXMgUFRFICglcykgYXQgJWxkICglbGx4KSBhZGRyICVwXG4iLAotCQkgKHNwdGUmUFRfUEFHRV9TSVpFX01BU0spPyAiMk1CIiA6ICI0a0IiLAotCQkgKHNwdGUmUFRfV1JJVEFCTEVfTUFTSyk/IlJXIjoiUiIsIGdmbiwgc3B0ZSwgc2hhZG93X3B0ZSk7Ci0Jc2V0X3NoYWRvd19wdGUoc2hhZG93X3B0ZSwgc3B0ZSk7Ci0JaWYgKCF3YXNfcm1hcHBlZCAmJiAoc3B0ZSAmIFBUX1BBR0VfU0laRV9NQVNLKQotCSAgICAmJiAoc3B0ZSAmIFBUX1BSRVNFTlRfTUFTSykpCisJCSBpc19sYXJnZV9wdGUoKnNoYWRvd19wdGUpPyAiMk1CIiA6ICI0a0IiLAorCQkgaXNfcHJlc2VudF9wdGUoKnNoYWRvd19wdGUpPyJSVyI6IlIiLCBnZm4sCisJCSAqc2hhZG93X3B0ZSwgc2hhZG93X3B0ZSk7CisJaWYgKCF3YXNfcm1hcHBlZCAmJiBpc19sYXJnZV9wdGUoKnNoYWRvd19wdGUpKQogCQkrK3ZjcHUtPmt2bS0+c3RhdC5scGFnZXM7CiAKIAlwYWdlX2hlYWRlcl91cGRhdGVfc2xvdCh2Y3B1LT5rdm0sIHNoYWRvd19wdGUsIGdmbik7CkBAIC0xMjMwLDU0ICsxNTY0LDY3IEBACiB7CiB9CiAKLXN0YXRpYyBpbnQgX19kaXJlY3RfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgdiwgaW50IHdyaXRlLAotCQkJICAgaW50IGxhcmdlcGFnZSwgZ2ZuX3QgZ2ZuLCBwZm5fdCBwZm4sCi0JCQkgICBpbnQgbGV2ZWwpCitzdHJ1Y3QgZGlyZWN0X3NoYWRvd193YWxrIHsKKwlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrIHdhbGtlcjsKKwlwZm5fdCBwZm47CisJaW50IHdyaXRlOworCWludCBsYXJnZXBhZ2U7CisJaW50IHB0X3dyaXRlOworfTsKKworc3RhdGljIGludCBkaXJlY3RfbWFwX2VudHJ5KHN0cnVjdCBrdm1fc2hhZG93X3dhbGsgKl93YWxrLAorCQkJICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSAgICB1NjQgYWRkciwgdTY0ICpzcHRlcCwgaW50IGxldmVsKQogewotCWhwYV90IHRhYmxlX2FkZHIgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2hwYTsKLQlpbnQgcHRfd3JpdGUgPSAwOworCXN0cnVjdCBkaXJlY3Rfc2hhZG93X3dhbGsgKndhbGsgPQorCQljb250YWluZXJfb2YoX3dhbGssIHN0cnVjdCBkaXJlY3Rfc2hhZG93X3dhbGssIHdhbGtlcik7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CisJZ2ZuX3QgcHNldWRvX2dmbjsKKwlnZm5fdCBnZm4gPSBhZGRyID4+IFBBR0VfU0hJRlQ7CiAKLQlmb3IgKDsgOyBsZXZlbC0tKSB7Ci0JCXUzMiBpbmRleCA9IFBUNjRfSU5ERVgodiwgbGV2ZWwpOwotCQl1NjQgKnRhYmxlOwotCi0JCUFTU0VSVChWQUxJRF9QQUdFKHRhYmxlX2FkZHIpKTsKLQkJdGFibGUgPSBfX3ZhKHRhYmxlX2FkZHIpOwotCi0JCWlmIChsZXZlbCA9PSAxKSB7Ci0JCQltbXVfc2V0X3NwdGUodmNwdSwgJnRhYmxlW2luZGV4XSwgQUNDX0FMTCwgQUNDX0FMTCwKLQkJCQkgICAgIDAsIHdyaXRlLCAxLCAmcHRfd3JpdGUsIDAsIGdmbiwgcGZuLCBmYWxzZSk7Ci0JCQlyZXR1cm4gcHRfd3JpdGU7Ci0JCX0KLQotCQlpZiAobGFyZ2VwYWdlICYmIGxldmVsID09IDIpIHsKLQkJCW1tdV9zZXRfc3B0ZSh2Y3B1LCAmdGFibGVbaW5kZXhdLCBBQ0NfQUxMLCBBQ0NfQUxMLAotCQkJCSAgICAgMCwgd3JpdGUsIDEsICZwdF93cml0ZSwgMSwgZ2ZuLCBwZm4sIGZhbHNlKTsKLQkJCXJldHVybiBwdF93cml0ZTsKLQkJfQotCi0JCWlmICh0YWJsZVtpbmRleF0gPT0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpIHsKLQkJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKm5ld190YWJsZTsKLQkJCWdmbl90IHBzZXVkb19nZm47Ci0KLQkJCXBzZXVkb19nZm4gPSAodiAmIFBUNjRfRElSX0JBU0VfQUREUl9NQVNLKQotCQkJCT4+IFBBR0VfU0hJRlQ7Ci0JCQluZXdfdGFibGUgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHBzZXVkb19nZm4sCi0JCQkJCQkgICAgIHYsIGxldmVsIC0gMSwKLQkJCQkJCSAgICAgMSwgQUNDX0FMTCwgJnRhYmxlW2luZGV4XSk7Ci0JCQlpZiAoIW5ld190YWJsZSkgewotCQkJCXBncHJpbnRrKCJub25wYWdpbmdfbWFwOiBFTk9NRU1cbiIpOwotCQkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCi0JCQlzZXRfc2hhZG93X3B0ZSgmdGFibGVbaW5kZXhdLAotCQkJCSAgICAgICBfX3BhKG5ld190YWJsZS0+c3B0KQotCQkJCSAgICAgICB8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX1dSSVRBQkxFX01BU0sKLQkJCQkgICAgICAgfCBzaGFkb3dfdXNlcl9tYXNrIHwgc2hhZG93X3hfbWFzayk7Ci0JCX0KLQkJdGFibGVfYWRkciA9IHRhYmxlW2luZGV4XSAmIFBUNjRfQkFTRV9BRERSX01BU0s7CisJaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwKKwkgICAgfHwgKHdhbGstPmxhcmdlcGFnZSAmJiBsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpKSB7CisJCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgQUNDX0FMTCwgQUNDX0FMTCwKKwkJCSAgICAgMCwgd2Fsay0+d3JpdGUsIDEsICZ3YWxrLT5wdF93cml0ZSwKKwkJCSAgICAgd2Fsay0+bGFyZ2VwYWdlLCBnZm4sIHdhbGstPnBmbiwgZmFsc2UpOworCQkrK3ZjcHUtPnN0YXQucGZfZml4ZWQ7CisJCXJldHVybiAxOwogCX0KKworCWlmICgqc3B0ZXAgPT0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpIHsKKwkJcHNldWRvX2dmbiA9IChhZGRyICYgUFQ2NF9ESVJfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CisJCXNwID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCBwc2V1ZG9fZ2ZuLCAoZ3ZhX3QpYWRkciwgbGV2ZWwgLSAxLAorCQkJCSAgICAgIDEsIEFDQ19BTEwsIHNwdGVwKTsKKwkJaWYgKCFzcCkgeworCQkJcGdwcmludGsoIm5vbnBhZ2luZ19tYXA6IEVOT01FTVxuIik7CisJCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4od2Fsay0+cGZuKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsCisJCQkgICAgICAgX19wYShzcC0+c3B0KQorCQkJICAgICAgIHwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfV1JJVEFCTEVfTUFTSworCQkJICAgICAgIHwgc2hhZG93X3VzZXJfbWFzayB8IHNoYWRvd194X21hc2spOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RpcmVjdF9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCB2LCBpbnQgd3JpdGUsCisJCQlpbnQgbGFyZ2VwYWdlLCBnZm5fdCBnZm4sIHBmbl90IHBmbikKK3sKKwlpbnQgcjsKKwlzdHJ1Y3QgZGlyZWN0X3NoYWRvd193YWxrIHdhbGtlciA9IHsKKwkJLndhbGtlciA9IHsgLmVudHJ5ID0gZGlyZWN0X21hcF9lbnRyeSwgfSwKKwkJLnBmbiA9IHBmbiwKKwkJLmxhcmdlcGFnZSA9IGxhcmdlcGFnZSwKKwkJLndyaXRlID0gd3JpdGUsCisJCS5wdF93cml0ZSA9IDAsCisJfTsKKworCXIgPSB3YWxrX3NoYWRvdygmd2Fsa2VyLndhbGtlciwgdmNwdSwgZ2ZuIDw8IFBBR0VfU0hJRlQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJcmV0dXJuIHdhbGtlci5wdF93cml0ZTsKIH0KIAogc3RhdGljIGludCBub25wYWdpbmdfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgdiwgaW50IHdyaXRlLCBnZm5fdCBnZm4pCkBAIC0xMjg3LDE2ICsxNjM0LDE0IEBACiAJcGZuX3QgcGZuOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlpZiAoaXNfbGFyZ2VwYWdlX2JhY2tlZCh2Y3B1LCBnZm4gJiB+KEtWTV9QQUdFU19QRVJfSFBBR0UtMSkpKSB7CiAJCWdmbiAmPSB+KEtWTV9QQUdFU19QRVJfSFBBR0UtMSk7CiAJCWxhcmdlcGFnZSA9IDE7CiAJfQogCiAJbW11X3NlcSA9IHZjcHUtPmt2bS0+bW11X25vdGlmaWVyX3NlcTsKLQkvKiBpbXBsaWNpdCBtYigpLCB3ZSdsbCByZWFkIGJlZm9yZSBQVCBsb2NrIGlzIHVubG9ja2VkICovCisJc21wX3JtYigpOwogCXBmbiA9IGdmbl90b19wZm4odmNwdS0+a3ZtLCBnZm4pOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAkvKiBtbWlvICovCiAJaWYgKGlzX2Vycm9yX3BmbihwZm4pKSB7CkBAIC0xMzA4LDggKzE2NTMsNyBAQAogCWlmIChtbXVfbm90aWZpZXJfcmV0cnkodmNwdSwgbW11X3NlcSkpCiAJCWdvdG8gb3V0X3VubG9jazsKIAlrdm1fbW11X2ZyZWVfc29tZV9wYWdlcyh2Y3B1KTsKLQlyID0gX19kaXJlY3RfbWFwKHZjcHUsIHYsIHdyaXRlLCBsYXJnZXBhZ2UsIGdmbiwgcGZuLAotCQkJIFBUMzJFX1JPT1RfTEVWRUwpOworCXIgPSBfX2RpcmVjdF9tYXAodmNwdSwgdiwgd3JpdGUsIGxhcmdlcGFnZSwgZ2ZuLCBwZm4pOwogCXNwaW5fdW5sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKIAogCkBAIC0xNDA1LDYgKzE3NDksMzcgQEAKIAl2Y3B1LT5hcmNoLm1tdS5yb290X2hwYSA9IF9fcGEodmNwdS0+YXJjaC5tbXUucGFlX3Jvb3QpOwogfQogCitzdGF0aWMgdm9pZCBtbXVfc3luY19yb290cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaW50IGk7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CisKKwlpZiAoIVZBTElEX1BBR0UodmNwdS0+YXJjaC5tbXUucm9vdF9ocGEpKQorCQlyZXR1cm47CisJaWYgKHZjcHUtPmFyY2gubW11LnNoYWRvd19yb290X2xldmVsID09IFBUNjRfUk9PVF9MRVZFTCkgeworCQlocGFfdCByb290ID0gdmNwdS0+YXJjaC5tbXUucm9vdF9ocGE7CisJCXNwID0gcGFnZV9oZWFkZXIocm9vdCk7CisJCW1tdV9zeW5jX2NoaWxkcmVuKHZjcHUsIHNwKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCWhwYV90IHJvb3QgPSB2Y3B1LT5hcmNoLm1tdS5wYWVfcm9vdFtpXTsKKworCQlpZiAocm9vdCkgeworCQkJcm9vdCAmPSBQVDY0X0JBU0VfQUREUl9NQVNLOworCQkJc3AgPSBwYWdlX2hlYWRlcihyb290KTsKKwkJCW1tdV9zeW5jX2NoaWxkcmVuKHZjcHUsIHNwKTsKKwkJfQorCX0KK30KKwordm9pZCBrdm1fbW11X3N5bmNfcm9vdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CisJbW11X3N5bmNfcm9vdHModmNwdSk7CisJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOworfQorCiBzdGF0aWMgZ3BhX3Qgbm9ucGFnaW5nX2d2YV90b19ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2YWRkcikKIHsKIAlyZXR1cm4gdmFkZHI7CkBAIC0xNDQ2LDE1ICsxODIxLDEzIEBACiAJaWYgKHIpCiAJCXJldHVybiByOwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWlmIChpc19sYXJnZXBhZ2VfYmFja2VkKHZjcHUsIGdmbiAmIH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKSkpIHsKIAkJZ2ZuICY9IH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKTsKIAkJbGFyZ2VwYWdlID0gMTsKIAl9CiAJbW11X3NlcSA9IHZjcHUtPmt2bS0+bW11X25vdGlmaWVyX3NlcTsKLQkvKiBpbXBsaWNpdCBtYigpLCB3ZSdsbCByZWFkIGJlZm9yZSBQVCBsb2NrIGlzIHVubG9ja2VkICovCisJc21wX3JtYigpOwogCXBmbiA9IGdmbl90b19wZm4odmNwdS0+a3ZtLCBnZm4pOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJaWYgKGlzX2Vycm9yX3BmbihwZm4pKSB7CiAJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOwogCQlyZXR1cm4gMTsKQEAgLTE0NjQsNyArMTgzNyw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAlrdm1fbW11X2ZyZWVfc29tZV9wYWdlcyh2Y3B1KTsKIAlyID0gX19kaXJlY3RfbWFwKHZjcHUsIGdwYSwgZXJyb3JfY29kZSAmIFBGRVJSX1dSSVRFX01BU0ssCi0JCQkgbGFyZ2VwYWdlLCBnZm4sIHBmbiwga3ZtX3g4Nl9vcHMtPmdldF90ZHBfbGV2ZWwoKSk7CisJCQkgbGFyZ2VwYWdlLCBnZm4sIHBmbik7CiAJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCiAJcmV0dXJuIHI7CkBAIC0xNDg5LDYgKzE4NjIsOCBAQAogCWNvbnRleHQtPmd2YV90b19ncGEgPSBub25wYWdpbmdfZ3ZhX3RvX2dwYTsKIAljb250ZXh0LT5mcmVlID0gbm9ucGFnaW5nX2ZyZWU7CiAJY29udGV4dC0+cHJlZmV0Y2hfcGFnZSA9IG5vbnBhZ2luZ19wcmVmZXRjaF9wYWdlOworCWNvbnRleHQtPnN5bmNfcGFnZSA9IG5vbnBhZ2luZ19zeW5jX3BhZ2U7CisJY29udGV4dC0+aW52bHBnID0gbm9ucGFnaW5nX2ludmxwZzsKIAljb250ZXh0LT5yb290X2xldmVsID0gMDsKIAljb250ZXh0LT5zaGFkb3dfcm9vdF9sZXZlbCA9IFBUMzJFX1JPT1RfTEVWRUw7CiAJY29udGV4dC0+cm9vdF9ocGEgPSBJTlZBTElEX1BBR0U7CkBAIC0xNTM2LDYgKzE5MTEsOCBAQAogCWNvbnRleHQtPnBhZ2VfZmF1bHQgPSBwYWdpbmc2NF9wYWdlX2ZhdWx0OwogCWNvbnRleHQtPmd2YV90b19ncGEgPSBwYWdpbmc2NF9ndmFfdG9fZ3BhOwogCWNvbnRleHQtPnByZWZldGNoX3BhZ2UgPSBwYWdpbmc2NF9wcmVmZXRjaF9wYWdlOworCWNvbnRleHQtPnN5bmNfcGFnZSA9IHBhZ2luZzY0X3N5bmNfcGFnZTsKKwljb250ZXh0LT5pbnZscGcgPSBwYWdpbmc2NF9pbnZscGc7CiAJY29udGV4dC0+ZnJlZSA9IHBhZ2luZ19mcmVlOwogCWNvbnRleHQtPnJvb3RfbGV2ZWwgPSBsZXZlbDsKIAljb250ZXh0LT5zaGFkb3dfcm9vdF9sZXZlbCA9IGxldmVsOwpAQCAtMTU1Nyw2ICsxOTM0LDggQEAKIAljb250ZXh0LT5ndmFfdG9fZ3BhID0gcGFnaW5nMzJfZ3ZhX3RvX2dwYTsKIAljb250ZXh0LT5mcmVlID0gcGFnaW5nX2ZyZWU7CiAJY29udGV4dC0+cHJlZmV0Y2hfcGFnZSA9IHBhZ2luZzMyX3ByZWZldGNoX3BhZ2U7CisJY29udGV4dC0+c3luY19wYWdlID0gcGFnaW5nMzJfc3luY19wYWdlOworCWNvbnRleHQtPmludmxwZyA9IHBhZ2luZzMyX2ludmxwZzsKIAljb250ZXh0LT5yb290X2xldmVsID0gUFQzMl9ST09UX0xFVkVMOwogCWNvbnRleHQtPnNoYWRvd19yb290X2xldmVsID0gUFQzMkVfUk9PVF9MRVZFTDsKIAljb250ZXh0LT5yb290X2hwYSA9IElOVkFMSURfUEFHRTsKQEAgLTE1NzYsNiArMTk1NSw4IEBACiAJY29udGV4dC0+cGFnZV9mYXVsdCA9IHRkcF9wYWdlX2ZhdWx0OwogCWNvbnRleHQtPmZyZWUgPSBub25wYWdpbmdfZnJlZTsKIAljb250ZXh0LT5wcmVmZXRjaF9wYWdlID0gbm9ucGFnaW5nX3ByZWZldGNoX3BhZ2U7CisJY29udGV4dC0+c3luY19wYWdlID0gbm9ucGFnaW5nX3N5bmNfcGFnZTsKKwljb250ZXh0LT5pbnZscGcgPSBub25wYWdpbmdfaW52bHBnOwogCWNvbnRleHQtPnNoYWRvd19yb290X2xldmVsID0ga3ZtX3g4Nl9vcHMtPmdldF90ZHBfbGV2ZWwoKTsKIAljb250ZXh0LT5yb290X2hwYSA9IElOVkFMSURfUEFHRTsKIApAQCAtMTY0Nyw2ICsyMDI4LDcgQEAKIAlzcGluX2xvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCWt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHZjcHUpOwogCW1tdV9hbGxvY19yb290cyh2Y3B1KTsKKwltbXVfc3luY19yb290cyh2Y3B1KTsKIAlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAJa3ZtX3g4Nl9vcHMtPnNldF9jcjModmNwdSwgdmNwdS0+YXJjaC5tbXUucm9vdF9ocGEpOwogCWt2bV9tbXVfZmx1c2hfdGxiKHZjcHUpOwpAQCAtMTc2NywxNSArMjE0OSwxMyBAQAogCQlyZXR1cm47CiAJZ2ZuID0gKGdwdGUgJiBQVDY0X0JBU0VfQUREUl9NQVNLKSA+PiBQQUdFX1NISUZUOwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWlmIChpc19sYXJnZV9wdGUoZ3B0ZSkgJiYgaXNfbGFyZ2VwYWdlX2JhY2tlZCh2Y3B1LCBnZm4pKSB7CiAJCWdmbiAmPSB+KEtWTV9QQUdFU19QRVJfSFBBR0UtMSk7CiAJCXZjcHUtPmFyY2gudXBkYXRlX3B0ZS5sYXJnZXBhZ2UgPSAxOwogCX0KIAl2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUubW11X3NlcSA9IHZjcHUtPmt2bS0+bW11X25vdGlmaWVyX3NlcTsKLQkvKiBpbXBsaWNpdCBtYigpLCB3ZSdsbCByZWFkIGJlZm9yZSBQVCBsb2NrIGlzIHVubG9ja2VkICovCisJc21wX3JtYigpOwogCXBmbiA9IGdmbl90b19wZm4odmNwdS0+a3ZtLCBnZm4pOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAlpZiAoaXNfZXJyb3JfcGZuKHBmbikpIHsKIAkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CkBAIC0xODM3LDcgKzIyMTcsNyBAQAogCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbik7CiAJYnVja2V0ID0gJnZjcHUtPmt2bS0+YXJjaC5tbXVfcGFnZV9oYXNoW2luZGV4XTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNwLCBub2RlLCBuLCBidWNrZXQsIGhhc2hfbGluaykgewotCQlpZiAoc3AtPmdmbiAhPSBnZm4gfHwgc3AtPnJvbGUubWV0YXBoeXNpY2FsKQorCQlpZiAoc3AtPmdmbiAhPSBnZm4gfHwgc3AtPnJvbGUubWV0YXBoeXNpY2FsIHx8IHNwLT5yb2xlLmludmFsaWQpCiAJCQljb250aW51ZTsKIAkJcHRlX3NpemUgPSBzcC0+cm9sZS5nbGV2ZWxzID09IFBUMzJfUk9PVF9MRVZFTCA/IDQgOiA4OwogCQltaXNhbGlnbmVkID0gKG9mZnNldCBeIChvZmZzZXQgKyBieXRlcyAtIDEpKSAmIH4ocHRlX3NpemUgLSAxKTsKQEAgLTE4NTUsNyArMjIzNSw4IEBACiAJCQkgKi8KIAkJCXBncHJpbnRrKCJtaXNhbGlnbmVkOiBncGEgJWxseCBieXRlcyAlZCByb2xlICV4XG4iLAogCQkJCSBncGEsIGJ5dGVzLCBzcC0+cm9sZS53b3JkKTsKLQkJCWt2bV9tbXVfemFwX3BhZ2UodmNwdS0+a3ZtLCBzcCk7CisJCQlpZiAoa3ZtX21tdV96YXBfcGFnZSh2Y3B1LT5rdm0sIHNwKSkKKwkJCQluID0gYnVja2V0LT5maXJzdDsKIAkJCSsrdmNwdS0+a3ZtLT5zdGF0Lm1tdV9mbG9vZGVkOwogCQkJY29udGludWU7CiAJCX0KQEAgLTE5NjksNiArMjM1MCwxNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX21tdV9wYWdlX2ZhdWx0KTsKIAordm9pZCBrdm1fbW11X2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSkKK3sKKwlzcGluX2xvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOworCXZjcHUtPmFyY2gubW11LmludmxwZyh2Y3B1LCBndmEpOworCXNwaW5fdW5sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKKwlrdm1fbW11X2ZsdXNoX3RsYih2Y3B1KTsKKwkrK3ZjcHUtPnN0YXQuaW52bHBnOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX21tdV9pbnZscGcpOworCiB2b2lkIGt2bV9lbmFibGVfdGRwKHZvaWQpCiB7CiAJdGRwX2VuYWJsZWQgPSB0cnVlOwpAQCAtMjA1NSw2ICsyNDQ2LDcgQEAKIHsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKIAorCXNwaW5fbG9jaygma3ZtLT5tbXVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzcCwgJmt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzLCBsaW5rKSB7CiAJCWludCBpOwogCQl1NjQgKnB0OwpAQCAtMjA2OCw2ICsyNDYwLDggQEAKIAkJCWlmIChwdFtpXSAmIFBUX1dSSVRBQkxFX01BU0spCiAJCQkJcHRbaV0gJj0gflBUX1dSSVRBQkxFX01BU0s7CiAJfQorCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOworCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKIH0KIAogdm9pZCBrdm1fbW11X3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKQpAQCAtMjA3Niw3ICsyNDcwLDkgQEAKIAogCXNwaW5fbG9jaygma3ZtLT5tbXVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNwLCBub2RlLCAma3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMsIGxpbmspCi0JCWt2bV9tbXVfemFwX3BhZ2Uoa3ZtLCBzcCk7CisJCWlmIChrdm1fbW11X3phcF9wYWdlKGt2bSwgc3ApKQorCQkJbm9kZSA9IGNvbnRhaW5lcl9vZihrdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcy5uZXh0LAorCQkJCQkgICAgc3RydWN0IGt2bV9tbXVfcGFnZSwgbGluayk7CiAJc3Bpbl91bmxvY2soJmt2bS0+bW11X2xvY2spOwogCiAJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CkBAIC0yMjkxLDE4ICsyNjg3LDE4IEBACiAJCSAgZ3BhX3QgYWRkciwgdW5zaWduZWQgbG9uZyAqcmV0KQogewogCWludCByOwotCXN0cnVjdCBrdm1fcHZfbW11X29wX2J1ZmZlciBidWZmZXI7CisJc3RydWN0IGt2bV9wdl9tbXVfb3BfYnVmZmVyICpidWZmZXIgPSAmdmNwdS0+YXJjaC5tbXVfb3BfYnVmZmVyOwogCi0JYnVmZmVyLnB0ciA9IGJ1ZmZlci5idWY7Ci0JYnVmZmVyLmxlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGJ5dGVzLCBzaXplb2YgYnVmZmVyLmJ1Zik7Ci0JYnVmZmVyLnByb2Nlc3NlZCA9IDA7CisJYnVmZmVyLT5wdHIgPSBidWZmZXItPmJ1ZjsKKwlidWZmZXItPmxlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGJ5dGVzLCBzaXplb2YgYnVmZmVyLT5idWYpOworCWJ1ZmZlci0+cHJvY2Vzc2VkID0gMDsKIAotCXIgPSBrdm1fcmVhZF9ndWVzdCh2Y3B1LT5rdm0sIGFkZHIsIGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4pOworCXIgPSBrdm1fcmVhZF9ndWVzdCh2Y3B1LT5rdm0sIGFkZHIsIGJ1ZmZlci0+YnVmLCBidWZmZXItPmxlbik7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCi0Jd2hpbGUgKGJ1ZmZlci5sZW4pIHsKLQkJciA9IGt2bV9wdl9tbXVfb3Bfb25lKHZjcHUsICZidWZmZXIpOworCXdoaWxlIChidWZmZXItPmxlbikgeworCQlyID0ga3ZtX3B2X21tdV9vcF9vbmUodmNwdSwgYnVmZmVyKTsKIAkJaWYgKHIgPCAwKQogCQkJZ290byBvdXQ7CiAJCWlmIChyID09IDApCkBAIC0yMzExLDcgKzI3MDcsNyBAQAogCiAJciA9IDE7CiBvdXQ6Ci0JKnJldCA9IGJ1ZmZlci5wcm9jZXNzZWQ7CisJKnJldCA9IGJ1ZmZlci0+cHJvY2Vzc2VkOwogCXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IDRhODE0YmYuLjYxM2VjOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC0yNSwxMSArMjUsMTEgQEAKICNpZiBQVFRZUEUgPT0gNjQKIAkjZGVmaW5lIHB0X2VsZW1lbnRfdCB1NjQKIAkjZGVmaW5lIGd1ZXN0X3dhbGtlciBndWVzdF93YWxrZXI2NAorCSNkZWZpbmUgc2hhZG93X3dhbGtlciBzaGFkb3dfd2Fsa2VyNjQKIAkjZGVmaW5lIEZOQU1FKG5hbWUpIHBhZ2luZyMjNjRfIyNuYW1lCiAJI2RlZmluZSBQVF9CQVNFX0FERFJfTUFTSyBQVDY0X0JBU0VfQUREUl9NQVNLCiAJI2RlZmluZSBQVF9ESVJfQkFTRV9BRERSX01BU0sgUFQ2NF9ESVJfQkFTRV9BRERSX01BU0sKIAkjZGVmaW5lIFBUX0lOREVYKGFkZHIsIGxldmVsKSBQVDY0X0lOREVYKGFkZHIsIGxldmVsKQotCSNkZWZpbmUgU0hBRE9XX1BUX0lOREVYKGFkZHIsIGxldmVsKSBQVDY0X0lOREVYKGFkZHIsIGxldmVsKQogCSNkZWZpbmUgUFRfTEVWRUxfTUFTSyhsZXZlbCkgUFQ2NF9MRVZFTF9NQVNLKGxldmVsKQogCSNkZWZpbmUgUFRfTEVWRUxfQklUUyBQVDY0X0xFVkVMX0JJVFMKIAkjaWZkZWYgQ09ORklHX1g4Nl82NApAQCAtNDIsMTEgKzQyLDExIEBACiAjZWxpZiBQVFRZUEUgPT0gMzIKIAkjZGVmaW5lIHB0X2VsZW1lbnRfdCB1MzIKIAkjZGVmaW5lIGd1ZXN0X3dhbGtlciBndWVzdF93YWxrZXIzMgorCSNkZWZpbmUgc2hhZG93X3dhbGtlciBzaGFkb3dfd2Fsa2VyMzIKIAkjZGVmaW5lIEZOQU1FKG5hbWUpIHBhZ2luZyMjMzJfIyNuYW1lCiAJI2RlZmluZSBQVF9CQVNFX0FERFJfTUFTSyBQVDMyX0JBU0VfQUREUl9NQVNLCiAJI2RlZmluZSBQVF9ESVJfQkFTRV9BRERSX01BU0sgUFQzMl9ESVJfQkFTRV9BRERSX01BU0sKIAkjZGVmaW5lIFBUX0lOREVYKGFkZHIsIGxldmVsKSBQVDMyX0lOREVYKGFkZHIsIGxldmVsKQotCSNkZWZpbmUgU0hBRE9XX1BUX0lOREVYKGFkZHIsIGxldmVsKSBQVDY0X0lOREVYKGFkZHIsIGxldmVsKQogCSNkZWZpbmUgUFRfTEVWRUxfTUFTSyhsZXZlbCkgUFQzMl9MRVZFTF9NQVNLKGxldmVsKQogCSNkZWZpbmUgUFRfTEVWRUxfQklUUyBQVDMyX0xFVkVMX0JJVFMKIAkjZGVmaW5lIFBUX01BWF9GVUxMX0xFVkVMUyAyCkBAIC03Myw2ICs3MywxNyBAQAogCXUzMiBlcnJvcl9jb2RlOwogfTsKIAorc3RydWN0IHNoYWRvd193YWxrZXIgeworCXN0cnVjdCBrdm1fc2hhZG93X3dhbGsgd2Fsa2VyOworCXN0cnVjdCBndWVzdF93YWxrZXIgKmd1ZXN0X3dhbGtlcjsKKwlpbnQgdXNlcl9mYXVsdDsKKwlpbnQgd3JpdGVfZmF1bHQ7CisJaW50IGxhcmdlcGFnZTsKKwlpbnQgKnB0d3JpdGU7CisJcGZuX3QgcGZuOworCXU2NCAqc3B0ZXA7Cit9OworCiBzdGF0aWMgZ2ZuX3QgZ3B0ZV90b19nZm4ocHRfZWxlbWVudF90IGdwdGUpCiB7CiAJcmV0dXJuIChncHRlICYgUFRfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CkBAIC05MSwxNCArMTAyLDEwIEBACiAJcHRfZWxlbWVudF90ICp0YWJsZTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlwYWdlID0gZ2ZuX3RvX3BhZ2Uoa3ZtLCB0YWJsZV9nZm4pOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAl0YWJsZSA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQogCXJldCA9IENNUFhDSEcoJnRhYmxlW2luZGV4XSwgb3JpZ19wdGUsIG5ld19wdGUpOwotCiAJa3VubWFwX2F0b21pYyh0YWJsZSwgS01fVVNFUjApOwogCiAJa3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwYWdlKTsKQEAgLTI3NCw4NiArMjgxLDg5IEBACiAvKgogICogRmV0Y2ggYSBzaGFkb3cgcHRlIGZvciBhIHNwZWNpZmljIGxldmVsIGluIHRoZSBwYWdpbmcgaGllcmFyY2h5LgogICovCitzdGF0aWMgaW50IEZOQU1FKHNoYWRvd193YWxrX2VudHJ5KShzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrICpfc3csCisJCQkJICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsCisJCQkJICAgIHU2NCAqc3B0ZXAsIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3Qgc2hhZG93X3dhbGtlciAqc3cgPQorCQljb250YWluZXJfb2YoX3N3LCBzdHJ1Y3Qgc2hhZG93X3dhbGtlciwgd2Fsa2VyKTsKKwlzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICpndyA9IHN3LT5ndWVzdF93YWxrZXI7CisJdW5zaWduZWQgYWNjZXNzID0gZ3ctPnB0X2FjY2VzczsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzaGFkb3dfcGFnZTsKKwl1NjQgc3B0ZTsKKwlpbnQgbWV0YXBoeXNpY2FsOworCWdmbl90IHRhYmxlX2dmbjsKKwlpbnQgcjsKKwlwdF9lbGVtZW50X3QgY3Vycl9wdGU7CisKKwlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTAorCSAgICB8fCAoc3ctPmxhcmdlcGFnZSAmJiBsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpKSB7CisJCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgYWNjZXNzLCBndy0+cHRlX2FjY2VzcyAmIGFjY2VzcywKKwkJCSAgICAgc3ctPnVzZXJfZmF1bHQsIHN3LT53cml0ZV9mYXVsdCwKKwkJCSAgICAgZ3ctPnB0ZXNbZ3ctPmxldmVsLTFdICYgUFRfRElSVFlfTUFTSywKKwkJCSAgICAgc3ctPnB0d3JpdGUsIHN3LT5sYXJnZXBhZ2UsIGd3LT5nZm4sIHN3LT5wZm4sCisJCQkgICAgIGZhbHNlKTsKKwkJc3ctPnNwdGVwID0gc3B0ZXA7CisJCXJldHVybiAxOworCX0KKworCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGVwKSAmJiAhaXNfbGFyZ2VfcHRlKCpzcHRlcCkpCisJCXJldHVybiAwOworCisJaWYgKGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSB7CisJCXNldF9zaGFkb3dfcHRlKHNwdGVwLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOworCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNwdGVwKTsKKwl9CisKKwlpZiAobGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMICYmIGd3LT5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpIHsKKwkJbWV0YXBoeXNpY2FsID0gMTsKKwkJaWYgKCFpc19kaXJ0eV9wdGUoZ3ctPnB0ZXNbbGV2ZWwgLSAxXSkpCisJCQlhY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOworCQl0YWJsZV9nZm4gPSBncHRlX3RvX2dmbihndy0+cHRlc1tsZXZlbCAtIDFdKTsKKwl9IGVsc2UgeworCQltZXRhcGh5c2ljYWwgPSAwOworCQl0YWJsZV9nZm4gPSBndy0+dGFibGVfZ2ZuW2xldmVsIC0gMl07CisJfQorCXNoYWRvd19wYWdlID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCB0YWJsZV9nZm4sIChndmFfdClhZGRyLCBsZXZlbC0xLAorCQkJCSAgICAgICBtZXRhcGh5c2ljYWwsIGFjY2Vzcywgc3B0ZXApOworCWlmICghbWV0YXBoeXNpY2FsKSB7CisJCXIgPSBrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLCBndy0+cHRlX2dwYVtsZXZlbCAtIDJdLAorCQkJCQkgICZjdXJyX3B0ZSwgc2l6ZW9mKGN1cnJfcHRlKSk7CisJCWlmIChyIHx8IGN1cnJfcHRlICE9IGd3LT5wdGVzW2xldmVsIC0gMl0pIHsKKwkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihzdy0+cGZuKTsKKwkJCXN3LT5zcHRlcCA9IE5VTEw7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXNwdGUgPSBfX3BhKHNoYWRvd19wYWdlLT5zcHQpIHwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfQUNDRVNTRURfTUFTSworCQl8IFBUX1dSSVRBQkxFX01BU0sgfCBQVF9VU0VSX01BU0s7CisJKnNwdGVwID0gc3B0ZTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHU2NCAqRk5BTUUoZmV0Y2gpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgYWRkciwKLQkJCSBzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICp3YWxrZXIsCisJCQkgc3RydWN0IGd1ZXN0X3dhbGtlciAqZ3Vlc3Rfd2Fsa2VyLAogCQkJIGludCB1c2VyX2ZhdWx0LCBpbnQgd3JpdGVfZmF1bHQsIGludCBsYXJnZXBhZ2UsCiAJCQkgaW50ICpwdHdyaXRlLCBwZm5fdCBwZm4pCiB7Ci0JaHBhX3Qgc2hhZG93X2FkZHI7Ci0JaW50IGxldmVsOwotCXU2NCAqc2hhZG93X2VudDsKLQl1bnNpZ25lZCBhY2Nlc3MgPSB3YWxrZXItPnB0X2FjY2VzczsKKwlzdHJ1Y3Qgc2hhZG93X3dhbGtlciB3YWxrZXIgPSB7CisJCS53YWxrZXIgPSB7IC5lbnRyeSA9IEZOQU1FKHNoYWRvd193YWxrX2VudHJ5KSwgfSwKKwkJLmd1ZXN0X3dhbGtlciA9IGd1ZXN0X3dhbGtlciwKKwkJLnVzZXJfZmF1bHQgPSB1c2VyX2ZhdWx0LAorCQkud3JpdGVfZmF1bHQgPSB3cml0ZV9mYXVsdCwKKwkJLmxhcmdlcGFnZSA9IGxhcmdlcGFnZSwKKwkJLnB0d3JpdGUgPSBwdHdyaXRlLAorCQkucGZuID0gcGZuLAorCX07CiAKLQlpZiAoIWlzX3ByZXNlbnRfcHRlKHdhbGtlci0+cHRlc1t3YWxrZXItPmxldmVsIC0gMV0pKQorCWlmICghaXNfcHJlc2VudF9wdGUoZ3Vlc3Rfd2Fsa2VyLT5wdGVzW2d1ZXN0X3dhbGtlci0+bGV2ZWwgLSAxXSkpCiAJCXJldHVybiBOVUxMOwogCi0Jc2hhZG93X2FkZHIgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2hwYTsKLQlsZXZlbCA9IHZjcHUtPmFyY2gubW11LnNoYWRvd19yb290X2xldmVsOwotCWlmIChsZXZlbCA9PSBQVDMyRV9ST09UX0xFVkVMKSB7Ci0JCXNoYWRvd19hZGRyID0gdmNwdS0+YXJjaC5tbXUucGFlX3Jvb3RbKGFkZHIgPj4gMzApICYgM107Ci0JCXNoYWRvd19hZGRyICY9IFBUNjRfQkFTRV9BRERSX01BU0s7Ci0JCS0tbGV2ZWw7Ci0JfQorCXdhbGtfc2hhZG93KCZ3YWxrZXIud2Fsa2VyLCB2Y3B1LCBhZGRyKTsKIAotCWZvciAoOyA7IGxldmVsLS0pIHsKLQkJdTMyIGluZGV4ID0gU0hBRE9XX1BUX0lOREVYKGFkZHIsIGxldmVsKTsKLQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc2hhZG93X3BhZ2U7Ci0JCXU2NCBzaGFkb3dfcHRlOwotCQlpbnQgbWV0YXBoeXNpY2FsOwotCQlnZm5fdCB0YWJsZV9nZm47Ci0KLQkJc2hhZG93X2VudCA9ICgodTY0ICopX192YShzaGFkb3dfYWRkcikpICsgaW5kZXg7Ci0JCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKQotCQkJYnJlYWs7Ci0KLQkJaWYgKGxhcmdlcGFnZSAmJiBsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpCi0JCQlicmVhazsKLQotCQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzaGFkb3dfZW50KQotCQkgICAgJiYgIWlzX2xhcmdlX3B0ZSgqc2hhZG93X2VudCkpIHsKLQkJCXNoYWRvd19hZGRyID0gKnNoYWRvd19lbnQgJiBQVDY0X0JBU0VfQUREUl9NQVNLOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoaXNfbGFyZ2VfcHRlKCpzaGFkb3dfZW50KSkKLQkJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc2hhZG93X2VudCk7Ci0KLQkJaWYgKGxldmVsIC0gMSA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMCi0JCSAgICAmJiB3YWxrZXItPmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgewotCQkJbWV0YXBoeXNpY2FsID0gMTsKLQkJCWlmICghaXNfZGlydHlfcHRlKHdhbGtlci0+cHRlc1tsZXZlbCAtIDFdKSkKLQkJCQlhY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOwotCQkJdGFibGVfZ2ZuID0gZ3B0ZV90b19nZm4od2Fsa2VyLT5wdGVzW2xldmVsIC0gMV0pOwotCQl9IGVsc2UgewotCQkJbWV0YXBoeXNpY2FsID0gMDsKLQkJCXRhYmxlX2dmbiA9IHdhbGtlci0+dGFibGVfZ2ZuW2xldmVsIC0gMl07Ci0JCX0KLQkJc2hhZG93X3BhZ2UgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHRhYmxlX2dmbiwgYWRkciwgbGV2ZWwtMSwKLQkJCQkJICAgICAgIG1ldGFwaHlzaWNhbCwgYWNjZXNzLAotCQkJCQkgICAgICAgc2hhZG93X2VudCk7Ci0JCWlmICghbWV0YXBoeXNpY2FsKSB7Ci0JCQlpbnQgcjsKLQkJCXB0X2VsZW1lbnRfdCBjdXJyX3B0ZTsKLQkJCXIgPSBrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLAotCQkJCQkJICB3YWxrZXItPnB0ZV9ncGFbbGV2ZWwgLSAyXSwKLQkJCQkJCSAgJmN1cnJfcHRlLCBzaXplb2YoY3Vycl9wdGUpKTsKLQkJCWlmIChyIHx8IGN1cnJfcHRlICE9IHdhbGtlci0+cHRlc1tsZXZlbCAtIDJdKSB7Ci0JCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCX0KLQkJc2hhZG93X2FkZHIgPSBfX3BhKHNoYWRvd19wYWdlLT5zcHQpOwotCQlzaGFkb3dfcHRlID0gc2hhZG93X2FkZHIgfCBQVF9QUkVTRU5UX01BU0sgfCBQVF9BQ0NFU1NFRF9NQVNLCi0JCQl8IFBUX1dSSVRBQkxFX01BU0sgfCBQVF9VU0VSX01BU0s7Ci0JCXNldF9zaGFkb3dfcHRlKHNoYWRvd19lbnQsIHNoYWRvd19wdGUpOwotCX0KLQotCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzaGFkb3dfZW50LCBhY2Nlc3MsIHdhbGtlci0+cHRlX2FjY2VzcyAmIGFjY2VzcywKLQkJICAgICB1c2VyX2ZhdWx0LCB3cml0ZV9mYXVsdCwKLQkJICAgICB3YWxrZXItPnB0ZXNbd2Fsa2VyLT5sZXZlbC0xXSAmIFBUX0RJUlRZX01BU0ssCi0JCSAgICAgcHR3cml0ZSwgbGFyZ2VwYWdlLCB3YWxrZXItPmdmbiwgcGZuLCBmYWxzZSk7Ci0KLQlyZXR1cm4gc2hhZG93X2VudDsKKwlyZXR1cm4gd2Fsa2VyLnNwdGVwOwogfQogCiAvKgpAQCAtNDA3LDcgKzQxNyw2IEBACiAJCXJldHVybiAwOwogCX0KIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlpZiAod2Fsa2VyLmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgewogCQlnZm5fdCBsYXJnZV9nZm47CiAJCWxhcmdlX2dmbiA9IHdhbGtlci5nZm4gJiB+KEtWTV9QQUdFU19QRVJfSFBBR0UtMSk7CkBAIC00MTcsOSArNDI2LDggQEAKIAkJfQogCX0KIAltbXVfc2VxID0gdmNwdS0+a3ZtLT5tbXVfbm90aWZpZXJfc2VxOwotCS8qIGltcGxpY2l0IG1iKCksIHdlJ2xsIHJlYWQgYmVmb3JlIFBUIGxvY2sgaXMgdW5sb2NrZWQgKi8KKwlzbXBfcm1iKCk7CiAJcGZuID0gZ2ZuX3RvX3Bmbih2Y3B1LT5rdm0sIHdhbGtlci5nZm4pOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAkvKiBtbWlvICovCiAJaWYgKGlzX2Vycm9yX3BmbihwZm4pKSB7CkBAIC00NTMsNiArNDYxLDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgRk5BTUUoc2hhZG93X2ludmxwZ19lbnRyeSkoc3RydWN0IGt2bV9zaGFkb3dfd2FsayAqX3N3LAorCQkJCSAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsCisJCQkJICAgICAgdTY0ICpzcHRlcCwgaW50IGxldmVsKQoreworCisJaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwpIHsKKwkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKQorCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7CisJCXNldF9zaGFkb3dfcHRlKHNwdGVwLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJCXJldHVybiAxOworCX0KKwlpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgRk5BTUUoaW52bHBnKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSkKK3sKKwlzdHJ1Y3Qgc2hhZG93X3dhbGtlciB3YWxrZXIgPSB7CisJCS53YWxrZXIgPSB7IC5lbnRyeSA9IEZOQU1FKHNoYWRvd19pbnZscGdfZW50cnkpLCB9LAorCX07CisKKwl3YWxrX3NoYWRvdygmd2Fsa2VyLndhbGtlciwgdmNwdSwgZ3ZhKTsKK30KKwogc3RhdGljIGdwYV90IEZOQU1FKGd2YV90b19ncGEpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgdmFkZHIpCiB7CiAJc3RydWN0IGd1ZXN0X3dhbGtlciB3YWxrZXI7CkBAIC00OTksMTIgKzUzMiw2NiBAQAogCX0KIH0KIAorLyoKKyAqIFVzaW5nIHRoZSBjYWNoZWQgaW5mb3JtYXRpb24gZnJvbSBzcC0+Z2ZucyBpcyBzYWZlIGJlY2F1c2U6CisgKiAtIFRoZSBzcHRlIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgc3RydWN0IHBhZ2UsIHNvIHRoZSBwZm4gZm9yIGEgZ2l2ZW4gZ2ZuCisgKiAgIGNhbid0IGNoYW5nZSB1bmxlc3MgYWxsIHNwdGVzIHBvaW50aW5nIHRvIGl0IGFyZSBudWtlZCBmaXJzdC4KKyAqIC0gQWxpYXMgY2hhbmdlcyB6YXAgdGhlIGVudGlyZSBzaGFkb3cgY2FjaGUuCisgKi8KK3N0YXRpYyBpbnQgRk5BTUUoc3luY19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCWludCBpLCBvZmZzZXQsIG5yX3ByZXNlbnQ7CisKKwlvZmZzZXQgPSBucl9wcmVzZW50ID0gMDsKKworCWlmIChQVFRZUEUgPT0gMzIpCisJCW9mZnNldCA9IHNwLT5yb2xlLnF1YWRyYW50IDw8IFBUNjRfTEVWRUxfQklUUzsKKworCWZvciAoaSA9IDA7IGkgPCBQVDY0X0VOVF9QRVJfUEFHRTsgaSsrKSB7CisJCXVuc2lnbmVkIHB0ZV9hY2Nlc3M7CisJCXB0X2VsZW1lbnRfdCBncHRlOworCQlncGFfdCBwdGVfZ3BhOworCQlnZm5fdCBnZm4gPSBzcC0+Z2Zuc1tpXTsKKworCQlpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShzcC0+c3B0W2ldKSkKKwkJCWNvbnRpbnVlOworCisJCXB0ZV9ncGEgPSBnZm5fdG9fZ3BhKHNwLT5nZm4pOworCQlwdGVfZ3BhICs9IChpK29mZnNldCkgKiBzaXplb2YocHRfZWxlbWVudF90KTsKKworCQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfYXRvbWljKHZjcHUtPmt2bSwgcHRlX2dwYSwgJmdwdGUsCisJCQkJCSAgc2l6ZW9mKHB0X2VsZW1lbnRfdCkpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGdwdGVfdG9fZ2ZuKGdwdGUpICE9IGdmbiB8fCAhaXNfcHJlc2VudF9wdGUoZ3B0ZSkgfHwKKwkJICAgICEoZ3B0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKSB7CisJCQl1NjQgbm9ucHJlc2VudDsKKworCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCAmc3AtPnNwdFtpXSk7CisJCQlpZiAoaXNfcHJlc2VudF9wdGUoZ3B0ZSkpCisJCQkJbm9ucHJlc2VudCA9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOworCQkJZWxzZQorCQkJCW5vbnByZXNlbnQgPSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlOworCQkJc2V0X3NoYWRvd19wdGUoJnNwLT5zcHRbaV0sIG5vbnByZXNlbnQpOworCQkJY29udGludWU7CisJCX0KKworCQlucl9wcmVzZW50Kys7CisJCXB0ZV9hY2Nlc3MgPSBzcC0+cm9sZS5hY2Nlc3MgJiBGTkFNRShncHRlX2FjY2VzcykodmNwdSwgZ3B0ZSk7CisJCXNldF9zcHRlKHZjcHUsICZzcC0+c3B0W2ldLCBwdGVfYWNjZXNzLCAwLCAwLAorCQkJIGlzX2RpcnR5X3B0ZShncHRlKSwgMCwgZ2ZuLAorCQkJIHNwdGVfdG9fcGZuKHNwLT5zcHRbaV0pLCB0cnVlLCBmYWxzZSk7CisJfQorCisJcmV0dXJuICFucl9wcmVzZW50OworfQorCiAjdW5kZWYgcHRfZWxlbWVudF90CiAjdW5kZWYgZ3Vlc3Rfd2Fsa2VyCisjdW5kZWYgc2hhZG93X3dhbGtlcgogI3VuZGVmIEZOQU1FCiAjdW5kZWYgUFRfQkFTRV9BRERSX01BU0sKICN1bmRlZiBQVF9JTkRFWAotI3VuZGVmIFNIQURPV19QVF9JTkRFWAogI3VuZGVmIFBUX0xFVkVMX01BU0sKICN1bmRlZiBQVF9ESVJfQkFTRV9BRERSX01BU0sKICN1bmRlZiBQVF9MRVZFTF9CSVRTCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKaW5kZXggODIzM2I4Ni4uOWM0Y2U2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS5jCisrKyBiL2FyY2gveDg2L2t2bS9zdm0uYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImt2bV9zdm0uaCIKICNpbmNsdWRlICJpcnEuaCIKICNpbmNsdWRlICJtbXUuaCIKKyNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zNSwxMCArMzYsNiBAQAogI2RlZmluZSBJT1BNX0FMTE9DX09SREVSIDIKICNkZWZpbmUgTVNSUE1fQUxMT0NfT1JERVIgMQogCi0jZGVmaW5lIERCX1ZFQ1RPUiAxCi0jZGVmaW5lIFVEX1ZFQ1RPUiA2Ci0jZGVmaW5lIEdQX1ZFQ1RPUiAxMwotCiAjZGVmaW5lIERSN19HRF9NQVNLICgxIDw8IDEzKQogI2RlZmluZSBEUjZfQkRfTUFTSyAoMSA8PCAxMykKIApAQCAtNDcsNyArNDQsNyBAQAogCiAjZGVmaW5lIFNWTV9GRUFUVVJFX05QVCAgKDEgPDwgMCkKICNkZWZpbmUgU1ZNX0ZFQVRVUkVfTEJSViAoMSA8PCAxKQotI2RlZmluZSBTVk1fREVBVFVSRV9TVk1MICgxIDw8IDIpCisjZGVmaW5lIFNWTV9GRUFUVVJFX1NWTUwgKDEgPDwgMikKIAogI2RlZmluZSBERUJVR0NUTF9SRVNFUlZFRF9CSVRTICh+KDB4M2ZVTEwpKQogCkBAIC0yMzYsMTMgKzIzMywxMSBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5PUFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQotCWlmIChzdm0tPm5leHRfcmlwIC0gc3ZtLT52bWNiLT5zYXZlLnJpcCA+IE1BWF9JTlNUX1NJWkUpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGlwIDB4JWxseCBuZXh0IDB4JWxseFxuIiwKLQkJICAgICAgIF9fZnVuY19fLAotCQkgICAgICAgc3ZtLT52bWNiLT5zYXZlLnJpcCwKLQkJICAgICAgIHN2bS0+bmV4dF9yaXApOworCWlmIChzdm0tPm5leHRfcmlwIC0ga3ZtX3JpcF9yZWFkKHZjcHUpID4gTUFYX0lOU1RfU0laRSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaXAgMHglbHggbmV4dCAweCVsbHhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywga3ZtX3JpcF9yZWFkKHZjcHUpLCBzdm0tPm5leHRfcmlwKTsKIAotCXZjcHUtPmFyY2gucmlwID0gc3ZtLT52bWNiLT5zYXZlLnJpcCA9IHN2bS0+bmV4dF9yaXA7CisJa3ZtX3JpcF93cml0ZSh2Y3B1LCBzdm0tPm5leHRfcmlwKTsKIAlzdm0tPnZtY2ItPmNvbnRyb2wuaW50X3N0YXRlICY9IH5TVk1fSU5URVJSVVBUX1NIQURPV19NQVNLOwogCiAJdmNwdS0+YXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gPSAxOwpAQCAtNTMwLDYgKzUyNSw3IEBACiAJCQkJKDFVTEwgPDwgSU5URVJDRVBUX0NQVUlEKSB8CiAJCQkJKDFVTEwgPDwgSU5URVJDRVBUX0lOVkQpIHwKIAkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfSExUKSB8CisJCQkJKDFVTEwgPDwgSU5URVJDRVBUX0lOVkxQRykgfAogCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9JTlZMUEdBKSB8CiAJCQkJKDFVTEwgPDwgSU5URVJDRVBUX0lPSU9fUFJPVCkgfAogCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9NU1JfUFJPVCkgfApAQCAtNTgxLDYgKzU3Nyw3IEBACiAJc2F2ZS0+ZHI3ID0gMHg0MDA7CiAJc2F2ZS0+cmZsYWdzID0gMjsKIAlzYXZlLT5yaXAgPSAweDAwMDBmZmYwOworCXN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JJUF0gPSBzYXZlLT5yaXA7CiAKIAkvKgogCSAqIGNyMCB2YWwgb24gY3B1IGluaXQgc2hvdWxkIGJlIDB4NjAwMDAwMTAsIHdlIGVuYWJsZSBjcHUKQEAgLTU5Myw3ICs1OTAsOCBAQAogCWlmIChucHRfZW5hYmxlZCkgewogCQkvKiBTZXR1cCBWTUNCIGZvciBOZXN0ZWQgUGFnaW5nICovCiAJCWNvbnRyb2wtPm5lc3RlZF9jdGwgPSAxOwotCQljb250cm9sLT5pbnRlcmNlcHQgJj0gfigxVUxMIDw8IElOVEVSQ0VQVF9UQVNLX1NXSVRDSCk7CisJCWNvbnRyb2wtPmludGVyY2VwdCAmPSB+KCgxVUxMIDw8IElOVEVSQ0VQVF9UQVNLX1NXSVRDSCkgfAorCQkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfSU5WTFBHKSk7CiAJCWNvbnRyb2wtPmludGVyY2VwdF9leGNlcHRpb25zICY9IH4oMSA8PCBQRl9WRUNUT1IpOwogCQljb250cm9sLT5pbnRlcmNlcHRfY3JfcmVhZCAmPSB+KElOVEVSQ0VQVF9DUjBfTUFTS3wKIAkJCQkJCUlOVEVSQ0VQVF9DUjNfTUFTSyk7CkBAIC02MTUsMTAgKzYxMywxMiBAQAogCWluaXRfdm1jYihzdm0pOwogCiAJaWYgKHZjcHUtPnZjcHVfaWQgIT0gMCkgewotCQlzdm0tPnZtY2ItPnNhdmUucmlwID0gMDsKKwkJa3ZtX3JpcF93cml0ZSh2Y3B1LCAwKTsKIAkJc3ZtLT52bWNiLT5zYXZlLmNzLmJhc2UgPSBzdm0tPnZjcHUuYXJjaC5zaXBpX3ZlY3RvciA8PCAxMjsKIAkJc3ZtLT52bWNiLT5zYXZlLmNzLnNlbGVjdG9yID0gc3ZtLT52Y3B1LmFyY2guc2lwaV92ZWN0b3IgPDwgODsKIAl9CisJdmNwdS0+YXJjaC5yZWdzX2F2YWlsID0gfjA7CisJdmNwdS0+YXJjaC5yZWdzX2RpcnR5ID0gfjA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcyMSwyMyArNzIxLDYgQEAKIAlyZHRzY2xsKHZjcHUtPmFyY2guaG9zdF90c2MpOwogfQogCi1zdGF0aWMgdm9pZCBzdm1fY2FjaGVfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7Ci0KLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSBzdm0tPnZtY2ItPnNhdmUucmF4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHN2bS0+dm1jYi0+c2F2ZS5yc3A7Ci0JdmNwdS0+YXJjaC5yaXAgPSBzdm0tPnZtY2ItPnNhdmUucmlwOwotfQotCi1zdGF0aWMgdm9pZCBzdm1fZGVjYWNoZV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKLQlzdm0tPnZtY2ItPnNhdmUucmF4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCXN2bS0+dm1jYi0+c2F2ZS5yc3AgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF07Ci0Jc3ZtLT52bWNiLT5zYXZlLnJpcCA9IHZjcHUtPmFyY2gucmlwOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdm1fZ2V0X3JmbGFncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJcmV0dXJuIHRvX3N2bSh2Y3B1KS0+dm1jYi0+c2F2ZS5yZmxhZ3M7CkBAIC0xMDQwLDcgKzEwMjMsNyBAQAogCWlmIChucHRfZW5hYmxlZCkKIAkJc3ZtX2ZsdXNoX3RsYigmc3ZtLT52Y3B1KTsKIAotCWlmIChldmVudF9pbmplY3Rpb24pCisJaWYgKCFucHRfZW5hYmxlZCAmJiBldmVudF9pbmplY3Rpb24pCiAJCWt2bV9tbXVfdW5wcm90ZWN0X3BhZ2VfdmlydCgmc3ZtLT52Y3B1LCBmYXVsdF9hZGRyZXNzKTsKIAlyZXR1cm4ga3ZtX21tdV9wYWdlX2ZhdWx0KCZzdm0tPnZjcHUsIGZhdWx0X2FkZHJlc3MsIGVycm9yX2NvZGUpOwogfQpAQCAtMTEzOSwxNCArMTEyMiwxNCBAQAogCiBzdGF0aWMgaW50IGhhbHRfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKLQlzdm0tPm5leHRfcmlwID0gc3ZtLT52bWNiLT5zYXZlLnJpcCArIDE7CisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDE7CiAJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKIAlyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdCgmc3ZtLT52Y3B1KTsKIH0KIAogc3RhdGljIGludCB2bW1jYWxsX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7Ci0Jc3ZtLT5uZXh0X3JpcCA9IHN2bS0+dm1jYi0+c2F2ZS5yaXAgKyAzOworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOwogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CiAJa3ZtX2VtdWxhdGVfaHlwZXJjYWxsKCZzdm0tPnZjcHUpOwogCXJldHVybiAxOwpAQCAtMTE3OCwxMSArMTE2MSwxOCBAQAogCiBzdGF0aWMgaW50IGNwdWlkX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7Ci0Jc3ZtLT5uZXh0X3JpcCA9IHN2bS0+dm1jYi0+c2F2ZS5yaXAgKyAyOworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAyOwogCWt2bV9lbXVsYXRlX2NwdWlkKCZzdm0tPnZjcHUpOwogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGludmxwZ19pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCWlmIChlbXVsYXRlX2luc3RydWN0aW9uKCZzdm0tPnZjcHUsIGt2bV9ydW4sIDAsIDAsIDApICE9IEVNVUxBVEVfRE9ORSkKKwkJcHJfdW5pbXBsKCZzdm0tPnZjcHUsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sCiAJCQkJICAgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CkBAIC0xMjczLDkgKzEyNjMsOSBAQAogCQlLVk1UUkFDRV8zRChNU1JfUkVBRCwgJnN2bS0+dmNwdSwgZWN4LCAodTMyKWRhdGEsCiAJCQkgICAgKHUzMikoZGF0YSA+PiAzMiksIGhhbmRsZXIpOwogCi0JCXN2bS0+dm1jYi0+c2F2ZS5yYXggPSBkYXRhICYgMHhmZmZmZmZmZjsKKwkJc3ZtLT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSA9IGRhdGEgJiAweGZmZmZmZmZmOwogCQlzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdID0gZGF0YSA+PiAzMjsKLQkJc3ZtLT5uZXh0X3JpcCA9IHN2bS0+dm1jYi0+c2F2ZS5yaXAgKyAyOworCQlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMjsKIAkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKIAl9CiAJcmV0dXJuIDE7CkBAIC0xMzU5LDEzICsxMzQ5LDEzIEBACiBzdGF0aWMgaW50IHdybXNyX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJdTMyIGVjeCA9IHN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07Ci0JdTY0IGRhdGEgPSAoc3ZtLT52bWNiLT5zYXZlLnJheCAmIC0xdSkKKwl1NjQgZGF0YSA9IChzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdICYgLTF1KQogCQl8ICgodTY0KShzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdICYgLTF1KSA8PCAzMik7CiAKIAlLVk1UUkFDRV8zRChNU1JfV1JJVEUsICZzdm0tPnZjcHUsIGVjeCwgKHUzMilkYXRhLCAodTMyKShkYXRhID4+IDMyKSwKIAkJICAgIGhhbmRsZXIpOwogCi0Jc3ZtLT5uZXh0X3JpcCA9IHN2bS0+dm1jYi0+c2F2ZS5yaXAgKyAyOworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAyOwogCWlmIChzdm1fc2V0X21zcigmc3ZtLT52Y3B1LCBlY3gsIGRhdGEpKQogCQlrdm1faW5qZWN0X2dwKCZzdm0tPnZjcHUsIDApOwogCWVsc2UKQEAgLTE0MzYsNyArMTQyNiw3IEBACiAJW1NWTV9FWElUX0NQVUlEXQkJCT0gY3B1aWRfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9JTlZEXSAgICAgICAgICAgICAgICAgICAgICAgICA9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9ITFRdCQkJCT0gaGFsdF9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX0lOVkxQR10JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9JTlZMUEddCQkJPSBpbnZscGdfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9JTlZMUEdBXQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0lPSU9dIAkJICAJPSBpb19pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX01TUl0JCQkJPSBtc3JfaW50ZXJjZXB0aW9uLApAQCAtMTUzOCw2ICsxNTI4LDcgQEAKIAogCUtWTVRSQUNFXzFEKElOSl9WSVJRLCAmc3ZtLT52Y3B1LCAodTMyKWlycSwgaGFuZGxlcik7CiAKKwkrK3N2bS0+dmNwdS5zdGF0LmlycV9pbmplY3Rpb25zOwogCWNvbnRyb2wgPSAmc3ZtLT52bWNiLT5jb250cm9sOwogCWNvbnRyb2wtPmludF92ZWN0b3IgPSBpcnE7CiAJY29udHJvbC0+aW50X2N0bCAmPSB+Vl9JTlRSX1BSSU9fTUFTSzsKQEAgLTE3MTYsNiArMTcwNywxMiBAQAogCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfY3RsIHw9IGNyOCAmIFZfVFBSX01BU0s7CiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIFIgInIiCisjZWxzZQorI2RlZmluZSBSICJlIgorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHN2bV92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwpAQCAtMTcyMyw2ICsxNzIwLDEwIEBACiAJdTE2IGdzX3NlbGVjdG9yOwogCXUxNiBsZHRfc2VsZWN0b3I7CiAKKwlzdm0tPnZtY2ItPnNhdmUucmF4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdOworCXN2bS0+dm1jYi0+c2F2ZS5yc3AgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF07CisJc3ZtLT52bWNiLT5zYXZlLnJpcCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUklQXTsKKwogCXByZV9zdm1fcnVuKHN2bSk7CiAKIAlzeW5jX2xhcGljX3RvX2NyOCh2Y3B1KTsKQEAgLTE3NTAsMTkgKzE3NTEsMTQgQEAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAlhc20gdm9sYXRpbGUgKAorCQkicHVzaCAlJSJSImJwOyBcblx0IgorCQkibW92ICVjW3JieF0oJVtzdm1dKSwgJSUiUiJieCBcblx0IgorCQkibW92ICVjW3JjeF0oJVtzdm1dKSwgJSUiUiJjeCBcblx0IgorCQkibW92ICVjW3JkeF0oJVtzdm1dKSwgJSUiUiJkeCBcblx0IgorCQkibW92ICVjW3JzaV0oJVtzdm1dKSwgJSUiUiJzaSBcblx0IgorCQkibW92ICVjW3JkaV0oJVtzdm1dKSwgJSUiUiJkaSBcblx0IgorCQkibW92ICVjW3JicF0oJVtzdm1dKSwgJSUiUiJicCBcblx0IgogI2lmZGVmIENPTkZJR19YODZfNjQKLQkJInB1c2ggJSVyYnA7IFxuXHQiCi0jZWxzZQotCQkicHVzaCAlJWVicDsgXG5cdCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCQkibW92ICVjW3JieF0oJVtzdm1dKSwgJSVyYnggXG5cdCIKLQkJIm1vdiAlY1tyY3hdKCVbc3ZtXSksICUlcmN4IFxuXHQiCi0JCSJtb3YgJWNbcmR4XSglW3N2bV0pLCAlJXJkeCBcblx0IgotCQkibW92ICVjW3JzaV0oJVtzdm1dKSwgJSVyc2kgXG5cdCIKLQkJIm1vdiAlY1tyZGldKCVbc3ZtXSksICUlcmRpIFxuXHQiCi0JCSJtb3YgJWNbcmJwXSglW3N2bV0pLCAlJXJicCBcblx0IgogCQkibW92ICVjW3I4XSglW3N2bV0pLCAgJSVyOCAgXG5cdCIKIAkJIm1vdiAlY1tyOV0oJVtzdm1dKSwgICUlcjkgIFxuXHQiCiAJCSJtb3YgJWNbcjEwXSglW3N2bV0pLCAlJXIxMCBcblx0IgpAQCAtMTc3MSw0MSArMTc2NywyNCBAQAogCQkibW92ICVjW3IxM10oJVtzdm1dKSwgJSVyMTMgXG5cdCIKIAkJIm1vdiAlY1tyMTRdKCVbc3ZtXSksICUlcjE0IFxuXHQiCiAJCSJtb3YgJWNbcjE1XSglW3N2bV0pLCAlJXIxNSBcblx0IgotI2Vsc2UKLQkJIm1vdiAlY1tyYnhdKCVbc3ZtXSksICUlZWJ4IFxuXHQiCi0JCSJtb3YgJWNbcmN4XSglW3N2bV0pLCAlJWVjeCBcblx0IgotCQkibW92ICVjW3JkeF0oJVtzdm1dKSwgJSVlZHggXG5cdCIKLQkJIm1vdiAlY1tyc2ldKCVbc3ZtXSksICUlZXNpIFxuXHQiCi0JCSJtb3YgJWNbcmRpXSglW3N2bV0pLCAlJWVkaSBcblx0IgotCQkibW92ICVjW3JicF0oJVtzdm1dKSwgJSVlYnAgXG5cdCIKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAogCQkvKiBFbnRlciBndWVzdCBtb2RlICovCi0JCSJwdXNoICUlcmF4IFxuXHQiCi0JCSJtb3YgJWNbdm1jYl0oJVtzdm1dKSwgJSVyYXggXG5cdCIKKwkJInB1c2ggJSUiUiJheCBcblx0IgorCQkibW92ICVjW3ZtY2JdKCVbc3ZtXSksICUlIlIiYXggXG5cdCIKIAkJX19leChTVk1fVk1MT0FEKSAiXG5cdCIKIAkJX19leChTVk1fVk1SVU4pICJcblx0IgogCQlfX2V4KFNWTV9WTVNBVkUpICJcblx0IgotCQkicG9wICUlcmF4IFxuXHQiCi0jZWxzZQotCQkvKiBFbnRlciBndWVzdCBtb2RlICovCi0JCSJwdXNoICUlZWF4IFxuXHQiCi0JCSJtb3YgJWNbdm1jYl0oJVtzdm1dKSwgJSVlYXggXG5cdCIKLQkJX19leChTVk1fVk1MT0FEKSAiXG5cdCIKLQkJX19leChTVk1fVk1SVU4pICJcblx0IgotCQlfX2V4KFNWTV9WTVNBVkUpICJcblx0IgotCQkicG9wICUlZWF4IFxuXHQiCi0jZW5kaWYKKwkJInBvcCAlJSJSImF4IFxuXHQiCiAKIAkJLyogU2F2ZSBndWVzdCByZWdpc3RlcnMsIGxvYWQgaG9zdCByZWdpc3RlcnMgKi8KKwkJIm1vdiAlJSJSImJ4LCAlY1tyYnhdKCVbc3ZtXSkgXG5cdCIKKwkJIm1vdiAlJSJSImN4LCAlY1tyY3hdKCVbc3ZtXSkgXG5cdCIKKwkJIm1vdiAlJSJSImR4LCAlY1tyZHhdKCVbc3ZtXSkgXG5cdCIKKwkJIm1vdiAlJSJSInNpLCAlY1tyc2ldKCVbc3ZtXSkgXG5cdCIKKwkJIm1vdiAlJSJSImRpLCAlY1tyZGldKCVbc3ZtXSkgXG5cdCIKKwkJIm1vdiAlJSJSImJwLCAlY1tyYnBdKCVbc3ZtXSkgXG5cdCIKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCSJtb3YgJSVyYngsICVjW3JieF0oJVtzdm1dKSBcblx0IgotCQkibW92ICUlcmN4LCAlY1tyY3hdKCVbc3ZtXSkgXG5cdCIKLQkJIm1vdiAlJXJkeCwgJWNbcmR4XSglW3N2bV0pIFxuXHQiCi0JCSJtb3YgJSVyc2ksICVjW3JzaV0oJVtzdm1dKSBcblx0IgotCQkibW92ICUlcmRpLCAlY1tyZGldKCVbc3ZtXSkgXG5cdCIKLQkJIm1vdiAlJXJicCwgJWNbcmJwXSglW3N2bV0pIFxuXHQiCiAJCSJtb3YgJSVyOCwgICVjW3I4XSglW3N2bV0pIFxuXHQiCiAJCSJtb3YgJSVyOSwgICVjW3I5XSglW3N2bV0pIFxuXHQiCiAJCSJtb3YgJSVyMTAsICVjW3IxMF0oJVtzdm1dKSBcblx0IgpAQCAtMTgxNCwxOCArMTc5Myw4IEBACiAJCSJtb3YgJSVyMTMsICVjW3IxM10oJVtzdm1dKSBcblx0IgogCQkibW92ICUlcjE0LCAlY1tyMTRdKCVbc3ZtXSkgXG5cdCIKIAkJIm1vdiAlJXIxNSwgJWNbcjE1XSglW3N2bV0pIFxuXHQiCi0KLQkJInBvcCAgJSVyYnA7IFxuXHQiCi0jZWxzZQotCQkibW92ICUlZWJ4LCAlY1tyYnhdKCVbc3ZtXSkgXG5cdCIKLQkJIm1vdiAlJWVjeCwgJWNbcmN4XSglW3N2bV0pIFxuXHQiCi0JCSJtb3YgJSVlZHgsICVjW3JkeF0oJVtzdm1dKSBcblx0IgotCQkibW92ICUlZXNpLCAlY1tyc2ldKCVbc3ZtXSkgXG5cdCIKLQkJIm1vdiAlJWVkaSwgJWNbcmRpXSglW3N2bV0pIFxuXHQiCi0JCSJtb3YgJSVlYnAsICVjW3JicF0oJVtzdm1dKSBcblx0IgotCi0JCSJwb3AgICUlZWJwOyBcblx0IgogI2VuZGlmCisJCSJwb3AgJSUiUiJicCIKIAkJOgogCQk6IFtzdm1dImEiKHN2bSksCiAJCSAgW3ZtY2JdImkiKG9mZnNldG9mKHN0cnVjdCB2Y3B1X3N2bSwgdm1jYl9wYSkpLApAQCAtMTg0NiwxMSArMTgxNSw5IEBACiAJCSAgW3IxNV0iaSIob2Zmc2V0b2Yoc3RydWN0IHZjcHVfc3ZtLCB2Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUjE1XSkpCiAjZW5kaWYKIAkJOiAiY2MiLCAibWVtb3J5IgorCQksIFIiYngiLCBSImN4IiwgUiJkeCIsIFIic2kiLCBSImRpIgogI2lmZGVmIENPTkZJR19YODZfNjQKLQkJLCAicmJ4IiwgInJjeCIsICJyZHgiLCAicnNpIiwgInJkaSIKIAkJLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIgLCAicjEyIiwgInIxMyIsICJyMTQiLCAicjE1IgotI2Vsc2UKLQkJLCAiZWJ4IiwgImVjeCIsICJlZHgiICwgImVzaSIsICJlZGkiCiAjZW5kaWYKIAkJKTsKIApAQCAtMTg1OCw2ICsxODI1LDkgQEAKIAkJbG9hZF9kYl9yZWdzKHN2bS0+aG9zdF9kYl9yZWdzKTsKIAogCXZjcHUtPmFyY2guY3IyID0gc3ZtLT52bWNiLT5zYXZlLmNyMjsKKwl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSBzdm0tPnZtY2ItPnNhdmUucmF4OworCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHN2bS0+dm1jYi0+c2F2ZS5yc3A7CisJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SSVBdID0gc3ZtLT52bWNiLT5zYXZlLnJpcDsKIAogCXdyaXRlX2RyNihzdm0tPmhvc3RfZHI2KTsKIAl3cml0ZV9kcjcoc3ZtLT5ob3N0X2RyNyk7CkBAIC0xODc5LDYgKzE4NDksOCBAQAogCXN2bS0+bmV4dF9yaXAgPSAwOwogfQogCisjdW5kZWYgUgorCiBzdGF0aWMgdm9pZCBzdm1fc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcm9vdCkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKQEAgLTE5NzcsOCArMTk0OSw2IEBACiAJLnNldF9nZHQgPSBzdm1fc2V0X2dkdCwKIAkuZ2V0X2RyID0gc3ZtX2dldF9kciwKIAkuc2V0X2RyID0gc3ZtX3NldF9kciwKLQkuY2FjaGVfcmVncyA9IHN2bV9jYWNoZV9yZWdzLAotCS5kZWNhY2hlX3JlZ3MgPSBzdm1fZGVjYWNoZV9yZWdzLAogCS5nZXRfcmZsYWdzID0gc3ZtX2dldF9yZmxhZ3MsCiAJLnNldF9yZmxhZ3MgPSBzdm1fc2V0X3JmbGFncywKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC5jCmluZGV4IDcwNDFjYzUuLjI2NDNiNDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXguYworKysgYi9hcmNoL3g4Ni9rdm0vdm14LmMKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgImt2bV9jYWNoZV9yZWdzLmgiCisjaW5jbHVkZSAieDg2LmgiCiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgpAQCAtNDcsNiArNDksOSBAQAogc3RhdGljIGludCBlbmFibGVfZXB0ID0gMTsKIG1vZHVsZV9wYXJhbShlbmFibGVfZXB0LCBib29sLCAwKTsKIAorc3RhdGljIGludCBlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUgPSAwOworbW9kdWxlX3BhcmFtKGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSwgYm9vbCwgMCk7CisKIHN0cnVjdCB2bWNzIHsKIAl1MzIgcmV2aXNpb25faWQ7CiAJdTMyIGFib3J0OwpAQCAtNTYsNiArNjEsNyBAQAogc3RydWN0IHZjcHVfdm14IHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgICAgICAgdmNwdTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgbG9jYWxfdmNwdXNfbGluazsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgaG9zdF9yc3A7CiAJaW50ICAgICAgICAgICAgICAgICAgIGxhdW5jaGVkOwogCXU4ICAgICAgICAgICAgICAgICAgICBmYWlsOwogCXUzMiAgICAgICAgICAgICAgICAgICBpZHRfdmVjdG9yaW5nX2luZm87CkBAIC04Myw2ICs4OSw3IEBACiAJCX0gaXJxOwogCX0gcm1vZGU7CiAJaW50IHZwaWQ7CisJYm9vbCBlbXVsYXRpb25fcmVxdWlyZWQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2Y3B1X3ZteCAqdG9fdm14KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTQ2OCw3ICs0NzUsNyBAQAogCWlmICghdmNwdS0+ZnB1X2FjdGl2ZSkKIAkJZWIgfD0gMXUgPDwgTk1fVkVDVE9SOwogCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQotCQllYiB8PSAxdSA8PCAxOworCQllYiB8PSAxdSA8PCBEQl9WRUNUT1I7CiAJaWYgKHZjcHUtPmFyY2gucm1vZGUuYWN0aXZlKQogCQllYiA9IH4wOwogCWlmICh2bV9uZWVkX2VwdCgpKQpAQCAtNzE1LDkgKzcyMiw5IEBACiAJdW5zaWduZWQgbG9uZyByaXA7CiAJdTMyIGludGVycnVwdGliaWxpdHk7CiAKLQlyaXAgPSB2bWNzX3JlYWRsKEdVRVNUX1JJUCk7CisJcmlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwogCXJpcCArPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTik7Ci0Jdm1jc193cml0ZWwoR1VFU1RfUklQLCByaXApOworCWt2bV9yaXBfd3JpdGUodmNwdSwgcmlwKTsKIAogCS8qCiAJICogV2UgZW11bGF0ZWQgYW4gaW5zdHJ1Y3Rpb24sIHNvIHRlbXBvcmFyeSBpbnRlcnJ1cHQgYmxvY2tpbmcKQEAgLTczMywxOSArNzQwLDM1IEBACiBzdGF0aWMgdm9pZCB2bXhfcXVldWVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbnIsCiAJCQkJYm9vbCBoYXNfZXJyb3JfY29kZSwgdTMyIGVycm9yX2NvZGUpCiB7CisJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CisKKwlpZiAoaGFzX2Vycm9yX2NvZGUpCisJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9FWENFUFRJT05fRVJST1JfQ09ERSwgZXJyb3JfY29kZSk7CisKKwlpZiAodmNwdS0+YXJjaC5ybW9kZS5hY3RpdmUpIHsKKwkJdm14LT5ybW9kZS5pcnEucGVuZGluZyA9IHRydWU7CisJCXZteC0+cm1vZGUuaXJxLnZlY3RvciA9IG5yOworCQl2bXgtPnJtb2RlLmlycS5yaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7CisJCWlmIChuciA9PSBCUF9WRUNUT1IpCisJCQl2bXgtPnJtb2RlLmlycS5yaXArKzsKKwkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKKwkJCSAgICAgbnIgfCBJTlRSX1RZUEVfU09GVF9JTlRSCisJCQkgICAgIHwgKGhhc19lcnJvcl9jb2RlID8gSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLIDogMCkKKwkJCSAgICAgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CisJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlNUUlVDVElPTl9MRU4sIDEpOworCQlrdm1fcmlwX3dyaXRlKHZjcHUsIHZteC0+cm1vZGUuaXJxLnJpcCAtIDEpOworCQlyZXR1cm47CisJfQorCiAJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKIAkJICAgICBuciB8IElOVFJfVFlQRV9FWENFUFRJT04KIAkJICAgICB8IChoYXNfZXJyb3JfY29kZSA/IElOVFJfSU5GT19ERUxJVkVSX0NPREVfTUFTSyA6IDApCiAJCSAgICAgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7Ci0JaWYgKGhhc19lcnJvcl9jb2RlKQotCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfRVhDRVBUSU9OX0VSUk9SX0NPREUsIGVycm9yX2NvZGUpOwogfQogCiBzdGF0aWMgYm9vbCB2bXhfZXhjZXB0aW9uX2luamVjdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQotCXJldHVybiAhKHZteC0+aWR0X3ZlY3RvcmluZ19pbmZvICYgVkVDVE9SSU5HX0lORk9fVkFMSURfTUFTSyk7CisJcmV0dXJuIGZhbHNlOwogfQogCiAvKgpAQCAtOTQ3LDI0ICs5NzAsMTkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogU3luYyB0aGUgcnNwIGFuZCByaXAgcmVnaXN0ZXJzIGludG8gdGhlIHZjcHUgc3RydWN0dXJlLiAgVGhpcyBhbGxvd3MKLSAqIHJlZ2lzdGVycyB0byBiZSBhY2Nlc3NlZCBieSBpbmRleGluZyB2Y3B1LT5hcmNoLnJlZ3MuCi0gKi8KLXN0YXRpYyB2b2lkIHZjcHVfbG9hZF9yc3BfcmlwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyB2b2lkIHZteF9jYWNoZV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGt2bV9yZWcgcmVnKQogewotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHZtY3NfcmVhZGwoR1VFU1RfUlNQKTsKLQl2Y3B1LT5hcmNoLnJpcCA9IHZtY3NfcmVhZGwoR1VFU1RfUklQKTsKLX0KLQotLyoKLSAqIFN5bmNzIHJzcCBhbmQgcmlwIGJhY2sgaW50byB0aGUgdm1jcy4gIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcG9zc2libGUKLSAqIG1vZGlmaWNhdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgdmNwdV9wdXRfcnNwX3JpcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jdm1jc193cml0ZWwoR1VFU1RfUlNQLCB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF0pOwotCXZtY3Nfd3JpdGVsKEdVRVNUX1JJUCwgdmNwdS0+YXJjaC5yaXApOworCV9fc2V0X2JpdChyZWcsICh1bnNpZ25lZCBsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCk7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFZDUFVfUkVHU19SU1A6CisJCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHZtY3NfcmVhZGwoR1VFU1RfUlNQKTsKKwkJYnJlYWs7CisJY2FzZSBWQ1BVX1JFR1NfUklQOgorCQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JJUF0gPSB2bWNzX3JlYWRsKEdVRVNUX1JJUCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIGludCBzZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCkBAIC0xMDA3LDE3ICsxMDI1LDkgQEAKIAogc3RhdGljIGludCB2bXhfZ2V0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7Ci0JdTMyIGlkdHZfaW5mb19maWVsZDsKLQotCWlkdHZfaW5mb19maWVsZCA9IHZteC0+aWR0X3ZlY3RvcmluZ19pbmZvOwotCWlmIChpZHR2X2luZm9fZmllbGQgJiBJTlRSX0lORk9fVkFMSURfTUFTSykgewotCQlpZiAoaXNfZXh0ZXJuYWxfaW50ZXJydXB0KGlkdHZfaW5mb19maWVsZCkpCi0JCQlyZXR1cm4gaWR0dl9pbmZvX2ZpZWxkICYgVkVDVE9SSU5HX0lORk9fVkVDVE9SX01BU0s7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0RFQlVHICJwZW5kaW5nIGV4Y2VwdGlvbjogbm90IGhhbmRsZWQgeWV0XG4iKTsKLQl9Ci0JcmV0dXJuIC0xOworCWlmICghdmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZykKKwkJcmV0dXJuIC0xOworCXJldHVybiB2Y3B1LT5hcmNoLmludGVycnVwdC5ucjsKIH0KIAogc3RhdGljIF9faW5pdCBpbnQgY3B1X2hhc19rdm1fc3VwcG9ydCh2b2lkKQpAQCAtMTAzMSw5ICsxMDQxLDkgQEAKIAl1NjQgbXNyOwogCiAJcmRtc3JsKE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTCwgbXNyKTsKLQlyZXR1cm4gKG1zciAmIChNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0xfTE9DS0VEIHwKLQkJICAgICAgIE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVEKSkKLQkgICAgPT0gTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MX0xPQ0tFRDsKKwlyZXR1cm4gKG1zciAmIChGRUFUVVJFX0NPTlRST0xfTE9DS0VEIHwKKwkJICAgICAgIEZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVEKSkKKwkgICAgPT0gRkVBVFVSRV9DT05UUk9MX0xPQ0tFRDsKIAkvKiBsb2NrZWQgYnV0IG5vdCBlbmFibGVkICovCiB9CiAKQEAgLTEwNDUsMTQgKzEwNTUsMTQgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZwZXJfY3B1KHZjcHVzX29uX2NwdSwgY3B1KSk7CiAJcmRtc3JsKE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTCwgb2xkKTsKLQlpZiAoKG9sZCAmIChNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0xfTE9DS0VEIHwKLQkJICAgIE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVEKSkKLQkgICAgIT0gKE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9MT0NLRUQgfAotCQlNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRCkpCisJaWYgKChvbGQgJiAoRkVBVFVSRV9DT05UUk9MX0xPQ0tFRCB8CisJCSAgICBGRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRCkpCisJICAgICE9IChGRUFUVVJFX0NPTlRST0xfTE9DS0VEIHwKKwkJRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRUQpKQogCQkvKiBlbmFibGUgYW5kIGxvY2sgKi8KIAkJd3Jtc3JsKE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTCwgb2xkIHwKLQkJICAgICAgIE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9MT0NLRUQgfAotCQkgICAgICAgTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRUQpOworCQkgICAgICAgRkVBVFVSRV9DT05UUk9MX0xPQ0tFRCB8CisJCSAgICAgICBGRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRCk7CiAJd3JpdGVfY3I0KHJlYWRfY3I0KCkgfCBYODZfQ1I0X1ZNWEUpOyAvKiBGSVhNRTogbm90IGNwdSBob3RwbHVnIHNhZmUgKi8KIAlhc20gdm9sYXRpbGUgKEFTTV9WTVhfVk1YT05fUkFYCiAJCSAgICAgIDogOiAiYSIoJnBoeXNfYWRkciksICJtIihwaHlzX2FkZHIpCkBAIC0xMTIwLDcgKzExMzAsOCBAQAogCSAgICAgIENQVV9CQVNFRF9DUjNfU1RPUkVfRVhJVElORyB8CiAJICAgICAgQ1BVX0JBU0VEX1VTRV9JT19CSVRNQVBTIHwKIAkgICAgICBDUFVfQkFTRURfTU9WX0RSX0VYSVRJTkcgfAotCSAgICAgIENQVV9CQVNFRF9VU0VfVFNDX09GRlNFVElORzsKKwkgICAgICBDUFVfQkFTRURfVVNFX1RTQ19PRkZTRVRJTkcgfAorCSAgICAgIENQVV9CQVNFRF9JTlZMUEdfRVhJVElORzsKIAlvcHQgPSBDUFVfQkFTRURfVFBSX1NIQURPVyB8CiAJICAgICAgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyB8CiAJICAgICAgQ1BVX0JBU0VEX0FDVElWQVRFX1NFQ09OREFSWV9DT05UUk9MUzsKQEAgLTExNDksOSArMTE2MCwxMSBAQAogCQlfY3B1X2Jhc2VkX2V4ZWNfY29udHJvbCAmPSB+Q1BVX0JBU0VEX1RQUl9TSEFET1c7CiAjZW5kaWYKIAlpZiAoX2NwdV9iYXNlZF8ybmRfZXhlY19jb250cm9sICYgU0VDT05EQVJZX0VYRUNfRU5BQkxFX0VQVCkgewotCQkvKiBDUjMgYWNjZXNzZXMgZG9uJ3QgbmVlZCB0byBjYXVzZSBWTSBFeGl0cyB3aGVuIEVQVCBlbmFibGVkICovCisJCS8qIENSMyBhY2Nlc3NlcyBhbmQgaW52bHBnIGRvbid0IG5lZWQgdG8gY2F1c2UgVk0gRXhpdHMgd2hlbiBFUFQKKwkJICAgZW5hYmxlZCAqLwogCQltaW4gJj0gfihDUFVfQkFTRURfQ1IzX0xPQURfRVhJVElORyB8Ci0JCQkgQ1BVX0JBU0VEX0NSM19TVE9SRV9FWElUSU5HKTsKKwkJCSBDUFVfQkFTRURfQ1IzX1NUT1JFX0VYSVRJTkcgfAorCQkJIENQVV9CQVNFRF9JTlZMUEdfRVhJVElORyk7CiAJCWlmIChhZGp1c3Rfdm14X2NvbnRyb2xzKG1pbiwgb3B0LCBNU1JfSUEzMl9WTVhfUFJPQ0JBU0VEX0NUTFMsCiAJCQkJCSZfY3B1X2Jhc2VkX2V4ZWNfY29udHJvbCkgPCAwKQogCQkJcmV0dXJuIC1FSU87CkBAIC0xMjg4LDcgKzEzMDEsOSBAQAogc3RhdGljIHZvaWQgZW50ZXJfcG1vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAKKwl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDE7CiAJdmNwdS0+YXJjaC5ybW9kZS5hY3RpdmUgPSAwOwogCiAJdm1jc193cml0ZWwoR1VFU1RfVFJfQkFTRSwgdmNwdS0+YXJjaC5ybW9kZS50ci5iYXNlKTsKQEAgLTEzMDUsNiArMTMyMCw5IEBACiAKIAl1cGRhdGVfZXhjZXB0aW9uX2JpdG1hcCh2Y3B1KTsKIAorCWlmIChlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUpCisJCXJldHVybjsKKwogCWZpeF9wbW9kZV9kYXRhc2VnKFZDUFVfU1JFR19FUywgJnZjcHUtPmFyY2gucm1vZGUuZXMpOwogCWZpeF9wbW9kZV9kYXRhc2VnKFZDUFVfU1JFR19EUywgJnZjcHUtPmFyY2gucm1vZGUuZHMpOwogCWZpeF9wbW9kZV9kYXRhc2VnKFZDUFVfU1JFR19HUywgJnZjcHUtPmFyY2gucm1vZGUuZ3MpOwpAQCAtMTM0NSw3ICsxMzYzLDkgQEAKIHN0YXRpYyB2b2lkIGVudGVyX3Jtb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCisJdm14LT5lbXVsYXRpb25fcmVxdWlyZWQgPSAxOwogCXZjcHUtPmFyY2gucm1vZGUuYWN0aXZlID0gMTsKIAogCXZjcHUtPmFyY2gucm1vZGUudHIuYmFzZSA9IHZtY3NfcmVhZGwoR1VFU1RfVFJfQkFTRSk7CkBAIC0xMzY3LDYgKzEzODcsOSBAQAogCXZtY3Nfd3JpdGVsKEdVRVNUX0NSNCwgdm1jc19yZWFkbChHVUVTVF9DUjQpIHwgWDg2X0NSNF9WTUUpOwogCXVwZGF0ZV9leGNlcHRpb25fYml0bWFwKHZjcHUpOwogCisJaWYgKGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSkKKwkJZ290byBjb250aW51ZV9ybW9kZTsKKwogCXZtY3Nfd3JpdGUxNihHVUVTVF9TU19TRUxFQ1RPUiwgdm1jc19yZWFkbChHVUVTVF9TU19CQVNFKSA+PiA0KTsKIAl2bWNzX3dyaXRlMzIoR1VFU1RfU1NfTElNSVQsIDB4ZmZmZik7CiAJdm1jc193cml0ZTMyKEdVRVNUX1NTX0FSX0JZVEVTLCAweGYzKTsKQEAgLTEzODIsNiArMTQwNSw3IEBACiAJZml4X3Jtb2RlX3NlZyhWQ1BVX1NSRUdfR1MsICZ2Y3B1LT5hcmNoLnJtb2RlLmdzKTsKIAlmaXhfcm1vZGVfc2VnKFZDUFVfU1JFR19GUywgJnZjcHUtPmFyY2gucm1vZGUuZnMpOwogCitjb250aW51ZV9ybW9kZToKIAlrdm1fbW11X3Jlc2V0X2NvbnRleHQodmNwdSk7CiAJaW5pdF9ybW9kZSh2Y3B1LT5rdm0pOwogfQpAQCAtMTcxNSw2ICsxNzM5LDE4NiBAQAogCXZtY3Nfd3JpdGVsKEdVRVNUX0dEVFJfQkFTRSwgZHQtPmJhc2UpOwogfQogCitzdGF0aWMgYm9vbCBybW9kZV9zZWdtZW50X3ZhbGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNlZykKK3sKKwlzdHJ1Y3Qga3ZtX3NlZ21lbnQgdmFyOworCXUzMiBhcjsKKworCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmdmFyLCBzZWcpOworCWFyID0gdm14X3NlZ21lbnRfYWNjZXNzX3JpZ2h0cygmdmFyKTsKKworCWlmICh2YXIuYmFzZSAhPSAodmFyLnNlbGVjdG9yIDw8IDQpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKHZhci5saW1pdCAhPSAweGZmZmYpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoYXIgIT0gMHhmMykKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNvZGVfc2VnbWVudF92YWxpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9zZWdtZW50IGNzOworCXVuc2lnbmVkIGludCBjc19ycGw7CisKKwl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJmNzLCBWQ1BVX1NSRUdfQ1MpOworCWNzX3JwbCA9IGNzLnNlbGVjdG9yICYgU0VMRUNUT1JfUlBMX01BU0s7CisKKwlpZiAofmNzLnR5cGUgJiAoQVJfVFlQRV9DT0RFX01BU0t8QVJfVFlQRV9BQ0NFU1NFU19NQVNLKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghY3MucykKKwkJcmV0dXJuIGZhbHNlOworCWlmICghKH5jcy50eXBlICYgKEFSX1RZUEVfQ09ERV9NQVNLfEFSX1RZUEVfV1JJVEVBQkxFX01BU0spKSkgeworCQlpZiAoY3MuZHBsID4gY3NfcnBsKQorCQkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSBpZiAoY3MudHlwZSAmIEFSX1RZUEVfQ09ERV9NQVNLKSB7CisJCWlmIChjcy5kcGwgIT0gY3NfcnBsKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoIWNzLnByZXNlbnQpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFRPRE86IEFkZCBSZXNlcnZlZCBmaWVsZCBjaGVjaywgdGhpcydsbCByZXF1aXJlIGEgbmV3IG1lbWJlciBpbiB0aGUga3ZtX3NlZ21lbnRfZmllbGQgc3RydWN0dXJlICovCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHN0YWNrX3NlZ21lbnRfdmFsaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fc2VnbWVudCBzczsKKwl1bnNpZ25lZCBpbnQgc3NfcnBsOworCisJdm14X2dldF9zZWdtZW50KHZjcHUsICZzcywgVkNQVV9TUkVHX1NTKTsKKwlzc19ycGwgPSBzcy5zZWxlY3RvciAmIFNFTEVDVE9SX1JQTF9NQVNLOworCisJaWYgKChzcy50eXBlICE9IDMpIHx8IChzcy50eXBlICE9IDcpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFzcy5zKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKHNzLmRwbCAhPSBzc19ycGwpIC8qIERQTCAhPSBSUEwgKi8KKwkJcmV0dXJuIGZhbHNlOworCWlmICghc3MucHJlc2VudCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGRhdGFfc2VnbWVudF92YWxpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpCit7CisJc3RydWN0IGt2bV9zZWdtZW50IHZhcjsKKwl1bnNpZ25lZCBpbnQgcnBsOworCisJdm14X2dldF9zZWdtZW50KHZjcHUsICZ2YXIsIHNlZyk7CisJcnBsID0gdmFyLnNlbGVjdG9yICYgU0VMRUNUT1JfUlBMX01BU0s7CisKKwlpZiAoIXZhci5zKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCF2YXIucHJlc2VudCkKKwkJcmV0dXJuIGZhbHNlOworCWlmICh+dmFyLnR5cGUgJiAoQVJfVFlQRV9DT0RFX01BU0t8QVJfVFlQRV9XUklURUFCTEVfTUFTSykpIHsKKwkJaWYgKHZhci5kcGwgPCBycGwpIC8qIERQTCA8IFJQTCAqLworCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIFRPRE86IEFkZCBvdGhlciBtZW1iZXJzIHRvIGt2bV9zZWdtZW50X2ZpZWxkIHRvIGFsbG93IGNoZWNraW5nIGZvciBvdGhlciBhY2Nlc3MKKwkgKiByaWdodHMgZmxhZ3MKKwkgKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdHJfdmFsaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fc2VnbWVudCB0cjsKKworCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmdHIsIFZDUFVfU1JFR19UUik7CisKKwlpZiAodHIuc2VsZWN0b3IgJiBTRUxFQ1RPUl9USV9NQVNLKQkvKiBUSSA9IDEgKi8KKwkJcmV0dXJuIGZhbHNlOworCWlmICgodHIudHlwZSAhPSAzKSB8fCAodHIudHlwZSAhPSAxMSkpIC8qIFRPRE86IENoZWNrIGlmIGd1ZXN0IGlzIGluIElBMzJlIG1vZGUgKi8KKwkJcmV0dXJuIGZhbHNlOworCWlmICghdHIucHJlc2VudCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGxkdHJfdmFsaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fc2VnbWVudCBsZHRyOworCisJdm14X2dldF9zZWdtZW50KHZjcHUsICZsZHRyLCBWQ1BVX1NSRUdfTERUUik7CisKKwlpZiAobGR0ci5zZWxlY3RvciAmIFNFTEVDVE9SX1RJX01BU0spCS8qIFRJID0gMSAqLworCQlyZXR1cm4gZmFsc2U7CisJaWYgKGxkdHIudHlwZSAhPSAyKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFsZHRyLnByZXNlbnQpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjc19zc19ycGxfY2hlY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fc2VnbWVudCBjcywgc3M7CisKKwl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJmNzLCBWQ1BVX1NSRUdfQ1MpOworCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmc3MsIFZDUFVfU1JFR19TUyk7CisKKwlyZXR1cm4gKChjcy5zZWxlY3RvciAmIFNFTEVDVE9SX1JQTF9NQVNLKSA9PQorCQkgKHNzLnNlbGVjdG9yICYgU0VMRUNUT1JfUlBMX01BU0spKTsKK30KKworLyoKKyAqIENoZWNrIGlmIGd1ZXN0IHN0YXRlIGlzIHZhbGlkLiBSZXR1cm5zIHRydWUgaWYgdmFsaWQsIGZhbHNlIGlmCisgKiBub3QuCisgKiBXZSBhc3N1bWUgdGhhdCByZWdpc3RlcnMgYXJlIGFsd2F5cyB1c2FibGUKKyAqLworc3RhdGljIGJvb2wgZ3Vlc3Rfc3RhdGVfdmFsaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCS8qIHJlYWwgbW9kZSBndWVzdCBzdGF0ZSBjaGVja3MgKi8KKwlpZiAoISh2Y3B1LT5hcmNoLmNyMCAmIFg4Nl9DUjBfUEUpKSB7CisJCWlmICghcm1vZGVfc2VnbWVudF92YWxpZCh2Y3B1LCBWQ1BVX1NSRUdfQ1MpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoIXJtb2RlX3NlZ21lbnRfdmFsaWQodmNwdSwgVkNQVV9TUkVHX1NTKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCFybW9kZV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19EUykpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghcm1vZGVfc2VnbWVudF92YWxpZCh2Y3B1LCBWQ1BVX1NSRUdfRVMpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoIXJtb2RlX3NlZ21lbnRfdmFsaWQodmNwdSwgVkNQVV9TUkVHX0ZTKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCFybW9kZV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19HUykpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkvKiBwcm90ZWN0ZWQgbW9kZSBndWVzdCBzdGF0ZSBjaGVja3MgKi8KKwkJaWYgKCFjc19zc19ycGxfY2hlY2sodmNwdSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghY29kZV9zZWdtZW50X3ZhbGlkKHZjcHUpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoIXN0YWNrX3NlZ21lbnRfdmFsaWQodmNwdSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghZGF0YV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19EUykpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghZGF0YV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19FUykpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghZGF0YV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19GUykpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghZGF0YV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19HUykpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghdHJfdmFsaWQodmNwdSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghbGR0cl92YWxpZCh2Y3B1KSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJLyogVE9ETzoKKwkgKiAtIEFkZCBjaGVja3Mgb24gUklQCisJICogLSBBZGQgY2hlY2tzIG9uIFJGTEFHUworCSAqLworCisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBpbnQgaW5pdF9ybW9kZV90c3Moc3RydWN0IGt2bSAqa3ZtKQogewogCWdmbl90IGZuID0gcm1vZGVfdHNzX2Jhc2Uoa3ZtKSA+PiBQQUdFX1NISUZUOwpAQCAtMTcyNiw3ICsxOTMwLDggQEAKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCWRhdGEgPSBUU1NfQkFTRV9TSVpFICsgVFNTX1JFRElSRUNUSU9OX1NJWkU7Ci0JciA9IGt2bV93cml0ZV9ndWVzdF9wYWdlKGt2bSwgZm4rKywgJmRhdGEsIDB4NjYsIHNpemVvZih1MTYpKTsKKwlyID0ga3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoa3ZtLCBmbisrLCAmZGF0YSwKKwkJCVRTU19JT1BCX0JBU0VfT0ZGU0VULCBzaXplb2YodTE2KSk7CiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIAlyID0ga3ZtX2NsZWFyX2d1ZXN0X3BhZ2Uoa3ZtLCBmbisrLCAwLCBQQUdFX1NJWkUpOwpAQCAtMTc4OSw3ICsxOTk0LDcgQEAKIAl2bWNzX3dyaXRlMTYoc2YtPnNlbGVjdG9yLCAwKTsKIAl2bWNzX3dyaXRlbChzZi0+YmFzZSwgMCk7CiAJdm1jc193cml0ZTMyKHNmLT5saW1pdCwgMHhmZmZmKTsKLQl2bWNzX3dyaXRlMzIoc2YtPmFyX2J5dGVzLCAweDkzKTsKKwl2bWNzX3dyaXRlMzIoc2YtPmFyX2J5dGVzLCAweGYzKTsKIH0KIAogc3RhdGljIGludCBhbGxvY19hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm0gKmt2bSkKQEAgLTE4MDgsOSArMjAxMyw3IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWt2bS0+YXJjaC5hcGljX2FjY2Vzc19wYWdlID0gZ2ZuX3RvX3BhZ2Uoa3ZtLCAweGZlZTAwKTsKLQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogb3V0OgogCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiByOwpAQCAtMTgzMiwxMCArMjAzNSw4IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfcGFnZXRhYmxlID0gZ2ZuX3RvX3BhZ2Uoa3ZtLAogCQkJVk1YX0VQVF9JREVOVElUWV9QQUdFVEFCTEVfQUREUiA+PiBQQUdFX1NISUZUKTsKLQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogb3V0OgogCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiByOwpAQCAtMTkxNyw3ICsyMTE4LDggQEAKIAl9CiAJaWYgKCF2bV9uZWVkX2VwdCgpKQogCQlleGVjX2NvbnRyb2wgfD0gQ1BVX0JBU0VEX0NSM19TVE9SRV9FWElUSU5HIHwKLQkJCQlDUFVfQkFTRURfQ1IzX0xPQURfRVhJVElORzsKKwkJCQlDUFVfQkFTRURfQ1IzX0xPQURfRVhJVElORyAgfAorCQkJCUNQVV9CQVNFRF9JTlZMUEdfRVhJVElORzsKIAl2bWNzX3dyaXRlMzIoQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgZXhlY19jb250cm9sKTsKIAogCWlmIChjcHVfaGFzX3NlY29uZGFyeV9leGVjX2N0cmxzKCkpIHsKQEAgLTIwMTksNiArMjIyMSw3IEBACiAJdTY0IG1zcjsKIAlpbnQgcmV0OwogCisJdmNwdS0+YXJjaC5yZWdzX2F2YWlsID0gfigoMSA8PCBWQ1BVX1JFR1NfUklQKSB8ICgxIDw8IFZDUFVfUkVHU19SU1ApKTsKIAlkb3duX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CiAJaWYgKCFpbml0X3Jtb2RlKHZteC0+dmNwdS5rdm0pKSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0yMDM2LDYgKzIyMzksNyBAQAogCiAJZnhfaW5pdCgmdm14LT52Y3B1KTsKIAorCXNlZ19zZXR1cChWQ1BVX1NSRUdfQ1MpOwogCS8qCiAJICogR1VFU1RfQ1NfQkFTRSBzaG91bGQgcmVhbGx5IGJlIDB4ZmZmZjAwMDAsIGJ1dCBWVCB2bTg2IG1vZGUKIAkgKiBpbnNpc3RzIG9uIGhhdmluZyBHVUVTVF9DU19CQVNFID09IEdVRVNUX0NTX1NFTEVDVE9SIDw8IDQuICBTaWdoLgpAQCAtMjA0Nyw4ICsyMjUxLDYgQEAKIAkJdm1jc193cml0ZTE2KEdVRVNUX0NTX1NFTEVDVE9SLCB2bXgtPnZjcHUuYXJjaC5zaXBpX3ZlY3RvciA8PCA4KTsKIAkJdm1jc193cml0ZWwoR1VFU1RfQ1NfQkFTRSwgdm14LT52Y3B1LmFyY2guc2lwaV92ZWN0b3IgPDwgMTIpOwogCX0KLQl2bWNzX3dyaXRlMzIoR1VFU1RfQ1NfTElNSVQsIDB4ZmZmZik7Ci0Jdm1jc193cml0ZTMyKEdVRVNUX0NTX0FSX0JZVEVTLCAweDliKTsKIAogCXNlZ19zZXR1cChWQ1BVX1NSRUdfRFMpOwogCXNlZ19zZXR1cChWQ1BVX1NSRUdfRVMpOwpAQCAtMjA3MiwxMCArMjI3NCwxMCBAQAogCiAJdm1jc193cml0ZWwoR1VFU1RfUkZMQUdTLCAweDAyKTsKIAlpZiAodm14LT52Y3B1LnZjcHVfaWQgPT0gMCkKLQkJdm1jc193cml0ZWwoR1VFU1RfUklQLCAweGZmZjApOworCQlrdm1fcmlwX3dyaXRlKHZjcHUsIDB4ZmZmMCk7CiAJZWxzZQotCQl2bWNzX3dyaXRlbChHVUVTVF9SSVAsIDApOwotCXZtY3Nfd3JpdGVsKEdVRVNUX1JTUCwgMCk7CisJCWt2bV9yaXBfd3JpdGUodmNwdSwgMCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU1AsIDApOwogCiAJLyogdG9kbzogZHIwID0gZHIxID0gZHIyID0gZHIzID0gMDsgZHI2ID0gMHhmZmZmMGZmMCAqLwogCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgMHg0MDApOwpAQCAtMjEyNSw2ICsyMzI3LDkgQEAKIAogCXJldCA9IDA7CiAKKwkvKiBIQUNLOiBEb24ndCBlbmFibGUgZW11bGF0aW9uIG9uIGd1ZXN0IGJvb3QvcmVzZXQgKi8KKwl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDA7CisKIG91dDoKIAl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiByZXQ7CkBAIC0yMTM2LDE0ICsyMzQxLDE1IEBACiAKIAlLVk1UUkFDRV8xRChJTkpfVklSUSwgdmNwdSwgKHUzMilpcnEsIGhhbmRsZXIpOwogCisJKyt2Y3B1LT5zdGF0LmlycV9pbmplY3Rpb25zOwogCWlmICh2Y3B1LT5hcmNoLnJtb2RlLmFjdGl2ZSkgewogCQl2bXgtPnJtb2RlLmlycS5wZW5kaW5nID0gdHJ1ZTsKIAkJdm14LT5ybW9kZS5pcnEudmVjdG9yID0gaXJxOwotCQl2bXgtPnJtb2RlLmlycS5yaXAgPSB2bWNzX3JlYWRsKEdVRVNUX1JJUCk7CisJCXZteC0+cm1vZGUuaXJxLnJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKIAkJCSAgICAgaXJxIHwgSU5UUl9UWVBFX1NPRlRfSU5UUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKIAkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOU1RSVUNUSU9OX0xFTiwgMSk7Ci0JCXZtY3Nfd3JpdGVsKEdVRVNUX1JJUCwgdm14LT5ybW9kZS5pcnEucmlwIC0gMSk7CisJCWt2bV9yaXBfd3JpdGUodmNwdSwgdm14LT5ybW9kZS5pcnEucmlwIC0gMSk7CiAJCXJldHVybjsKIAl9CiAJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKQEAgLTIxNTQsNyArMjM2MCw2IEBACiB7CiAJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKIAkJCUlOVFJfVFlQRV9OTUlfSU5UUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLIHwgTk1JX1ZFQ1RPUik7Ci0JdmNwdS0+YXJjaC5ubWlfcGVuZGluZyA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9kb19pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTIxNjYsNyArMjM3MSw3IEBACiAJY2xlYXJfYml0KGJpdF9pbmRleCwgJnZjcHUtPmFyY2guaXJxX3BlbmRpbmdbd29yZF9pbmRleF0pOwogCWlmICghdmNwdS0+YXJjaC5pcnFfcGVuZGluZ1t3b3JkX2luZGV4XSkKIAkJY2xlYXJfYml0KHdvcmRfaW5kZXgsICZ2Y3B1LT5hcmNoLmlycV9zdW1tYXJ5KTsKLQl2bXhfaW5qZWN0X2lycSh2Y3B1LCBpcnEpOworCWt2bV9xdWV1ZV9pbnRlcnJ1cHQodmNwdSwgaXJxKTsKIH0KIAogCkBAIC0yMTgwLDEzICsyMzg1LDEyIEBACiAJCSAodm1jc19yZWFkMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPKSAmIDMpID09IDApOwogCiAJaWYgKHZjcHUtPmFyY2guaW50ZXJydXB0X3dpbmRvd19vcGVuICYmCi0JICAgIHZjcHUtPmFyY2guaXJxX3N1bW1hcnkgJiYKLQkgICAgISh2bWNzX3JlYWQzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQpICYgSU5UUl9JTkZPX1ZBTElEX01BU0spKQotCQkvKgotCQkgKiBJZiBpbnRlcnJ1cHRzIGVuYWJsZWQsIGFuZCBub3QgYmxvY2tlZCBieSBzdGkgb3IgbW92IHNzLiBHb29kLgotCQkgKi8KKwkgICAgdmNwdS0+YXJjaC5pcnFfc3VtbWFyeSAmJiAhdmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZykKIAkJa3ZtX2RvX2luamVjdF9pcnEodmNwdSk7CiAKKwlpZiAodmNwdS0+YXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gJiYgdmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZykKKwkJdm14X2luamVjdF9pcnEodmNwdSwgdmNwdS0+YXJjaC5pbnRlcnJ1cHQubnIpOworCiAJY3B1X2Jhc2VkX3ZtX2V4ZWNfY29udHJvbCA9IHZtY3NfcmVhZDMyKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpOwogCWlmICghdmNwdS0+YXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gJiYKIAkgICAgKHZjcHUtPmFyY2guaXJxX3N1bW1hcnkgfHwga3ZtX3J1bi0+cmVxdWVzdF9pbnRlcnJ1cHRfd2luZG93KSkKQEAgLTIyMzcsOSArMjQ0MSw2IEBACiBzdGF0aWMgaW50IGhhbmRsZV9ybW9kZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgaW50IHZlYywgdTMyIGVycl9jb2RlKQogewotCWlmICghdmNwdS0+YXJjaC5ybW9kZS5hY3RpdmUpCi0JCXJldHVybiAwOwotCiAJLyoKIAkgKiBJbnN0cnVjdGlvbiB3aXRoIGFkZHJlc3Mgc2l6ZSBvdmVycmlkZSBwcmVmaXggb3Bjb2RlIDB4NjcKIAkgKiBDYXVzZSB0aGUgI1NTIGZhdWx0IHdpdGggMCBlcnJvciBjb2RlIGluIFZNODYgbW9kZS4KQEAgLTIyNDcsNiArMjQ0OCwyNSBAQAogCWlmICgoKHZlYyA9PSBHUF9WRUNUT1IpIHx8ICh2ZWMgPT0gU1NfVkVDVE9SKSkgJiYgZXJyX2NvZGUgPT0gMCkKIAkJaWYgKGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgTlVMTCwgMCwgMCwgMCkgPT0gRU1VTEFURV9ET05FKQogCQkJcmV0dXJuIDE7CisJLyoKKwkgKiBGb3J3YXJkIGFsbCBvdGhlciBleGNlcHRpb25zIHRoYXQgYXJlIHZhbGlkIGluIHJlYWwgbW9kZS4KKwkgKiBGSVhNRTogQnJlYWtzIGd1ZXN0IGRlYnVnZ2luZyBpbiByZWFsIG1vZGUsIG5lZWRzIHRvIGJlIGZpeGVkIHdpdGgKKwkgKiAgICAgICAgdGhlIHJlcXVpcmVkIGRlYnVnZ2luZyBpbmZyYXN0cnVjdHVyZSByZXdvcmsuCisJICovCisJc3dpdGNoICh2ZWMpIHsKKwljYXNlIERFX1ZFQ1RPUjoKKwljYXNlIERCX1ZFQ1RPUjoKKwljYXNlIEJQX1ZFQ1RPUjoKKwljYXNlIE9GX1ZFQ1RPUjoKKwljYXNlIEJSX1ZFQ1RPUjoKKwljYXNlIFVEX1ZFQ1RPUjoKKwljYXNlIERGX1ZFQ1RPUjoKKwljYXNlIFNTX1ZFQ1RPUjoKKwljYXNlIEdQX1ZFQ1RPUjoKKwljYXNlIE1GX1ZFQ1RPUjoKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCB2ZWMpOworCQlyZXR1cm4gMTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyODgsNyArMjUwOCw3IEBACiAJfQogCiAJZXJyb3JfY29kZSA9IDA7Ci0JcmlwID0gdm1jc19yZWFkbChHVUVTVF9SSVApOworCXJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAlpZiAoaW50cl9pbmZvICYgSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLKQogCQllcnJvcl9jb2RlID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpOwogCWlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpIHsKQEAgLTIyOTgsNyArMjUxOCw3IEBACiAJCWNyMiA9IHZtY3NfcmVhZGwoRVhJVF9RVUFMSUZJQ0FUSU9OKTsKIAkJS1ZNVFJBQ0VfM0QoUEFHRV9GQVVMVCwgdmNwdSwgZXJyb3JfY29kZSwgKHUzMiljcjIsCiAJCQkgICAgKHUzMikoKHU2NCljcjIgPj4gMzIpLCBoYW5kbGVyKTsKLQkJaWYgKHZlY3RfaW5mbyAmIFZFQ1RPUklOR19JTkZPX1ZBTElEX01BU0spCisJCWlmICh2Y3B1LT5hcmNoLmludGVycnVwdC5wZW5kaW5nIHx8IHZjcHUtPmFyY2guZXhjZXB0aW9uLnBlbmRpbmcpCiAJCQlrdm1fbW11X3VucHJvdGVjdF9wYWdlX3ZpcnQodmNwdSwgY3IyKTsKIAkJcmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBjcjIsIGVycm9yX2NvZGUpOwogCX0KQEAgLTIzODYsMjcgKzI2MDYsMjUgQEAKIAlyZWcgPSAoZXhpdF9xdWFsaWZpY2F0aW9uID4+IDgpICYgMTU7CiAJc3dpdGNoICgoZXhpdF9xdWFsaWZpY2F0aW9uID4+IDQpICYgMykgewogCWNhc2UgMDogLyogbW92IHRvIGNyICovCi0JCUtWTVRSQUNFXzNEKENSX1dSSVRFLCB2Y3B1LCAodTMyKWNyLCAodTMyKXZjcHUtPmFyY2gucmVnc1tyZWddLAotCQkJICAgICh1MzIpKCh1NjQpdmNwdS0+YXJjaC5yZWdzW3JlZ10gPj4gMzIpLCBoYW5kbGVyKTsKKwkJS1ZNVFJBQ0VfM0QoQ1JfV1JJVEUsIHZjcHUsICh1MzIpY3IsCisJCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpLAorCQkJICAgICh1MzIpKCh1NjQpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgcmVnKSA+PiAzMiksCisJCQkgICAgaGFuZGxlcik7CiAJCXN3aXRjaCAoY3IpIHsKIAkJY2FzZSAwOgotCQkJdmNwdV9sb2FkX3JzcF9yaXAodmNwdSk7Ci0JCQlrdm1fc2V0X2NyMCh2Y3B1LCB2Y3B1LT5hcmNoLnJlZ3NbcmVnXSk7CisJCQlrdm1fc2V0X2NyMCh2Y3B1LCBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSAzOgotCQkJdmNwdV9sb2FkX3JzcF9yaXAodmNwdSk7Ci0JCQlrdm1fc2V0X2NyMyh2Y3B1LCB2Y3B1LT5hcmNoLnJlZ3NbcmVnXSk7CisJCQlrdm1fc2V0X2NyMyh2Y3B1LCBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSA0OgotCQkJdmNwdV9sb2FkX3JzcF9yaXAodmNwdSk7Ci0JCQlrdm1fc2V0X2NyNCh2Y3B1LCB2Y3B1LT5hcmNoLnJlZ3NbcmVnXSk7CisJCQlrdm1fc2V0X2NyNCh2Y3B1LCBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSA4OgotCQkJdmNwdV9sb2FkX3JzcF9yaXAodmNwdSk7Ci0JCQlrdm1fc2V0X2NyOCh2Y3B1LCB2Y3B1LT5hcmNoLnJlZ3NbcmVnXSk7CisJCQlrdm1fc2V0X2NyOCh2Y3B1LCBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlpZiAoaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSkKIAkJCQlyZXR1cm4gMTsKQEAgLTI0MTUsNyArMjYzMyw2IEBACiAJCX07CiAJCWJyZWFrOwogCWNhc2UgMjogLyogY2x0cyAqLwotCQl2Y3B1X2xvYWRfcnNwX3JpcCh2Y3B1KTsKIAkJdm14X2ZwdV9kZWFjdGl2YXRlKHZjcHUpOwogCQl2Y3B1LT5hcmNoLmNyMCAmPSB+WDg2X0NSMF9UUzsKIAkJdm1jc193cml0ZWwoQ1IwX1JFQURfU0hBRE9XLCB2Y3B1LT5hcmNoLmNyMCk7CkBAIC0yNDI2LDIxICsyNjQzLDE3IEBACiAJY2FzZSAxOiAvKm1vdiBmcm9tIGNyKi8KIAkJc3dpdGNoIChjcikgewogCQljYXNlIDM6Ci0JCQl2Y3B1X2xvYWRfcnNwX3JpcCh2Y3B1KTsKLQkJCXZjcHUtPmFyY2gucmVnc1tyZWddID0gdmNwdS0+YXJjaC5jcjM7Ci0JCQl2Y3B1X3B1dF9yc3BfcmlwKHZjcHUpOworCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIHJlZywgdmNwdS0+YXJjaC5jcjMpOwogCQkJS1ZNVFJBQ0VfM0QoQ1JfUkVBRCwgdmNwdSwgKHUzMiljciwKLQkJCQkgICAgKHUzMil2Y3B1LT5hcmNoLnJlZ3NbcmVnXSwKLQkJCQkgICAgKHUzMikoKHU2NCl2Y3B1LT5hcmNoLnJlZ3NbcmVnXSA+PiAzMiksCisJCQkJICAgICh1MzIpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgcmVnKSwKKwkJCQkgICAgKHUzMikoKHU2NClrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpID4+IDMyKSwKIAkJCQkgICAgaGFuZGxlcik7CiAJCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgODoKLQkJCXZjcHVfbG9hZF9yc3BfcmlwKHZjcHUpOwotCQkJdmNwdS0+YXJjaC5yZWdzW3JlZ10gPSBrdm1fZ2V0X2NyOCh2Y3B1KTsKLQkJCXZjcHVfcHV0X3JzcF9yaXAodmNwdSk7CisJCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgcmVnLCBrdm1fZ2V0X2NyOCh2Y3B1KSk7CiAJCQlLVk1UUkFDRV8yRChDUl9SRUFELCB2Y3B1LCAodTMyKWNyLAotCQkJCSAgICAodTMyKXZjcHUtPmFyY2gucmVnc1tyZWddLCBoYW5kbGVyKTsKKwkJCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpLCBoYW5kbGVyKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtMjQ3Miw3ICsyNjg1LDYgQEAKIAlleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7CiAJZHIgPSBleGl0X3F1YWxpZmljYXRpb24gJiA3OwogCXJlZyA9IChleGl0X3F1YWxpZmljYXRpb24gPj4gOCkgJiAxNTsKLQl2Y3B1X2xvYWRfcnNwX3JpcCh2Y3B1KTsKIAlpZiAoZXhpdF9xdWFsaWZpY2F0aW9uICYgMTYpIHsKIAkJLyogbW92IGZyb20gZHIgKi8KIAkJc3dpdGNoIChkcikgewpAQCAtMjQ4NSwxMiArMjY5NywxMSBAQAogCQlkZWZhdWx0OgogCQkJdmFsID0gMDsKIAkJfQotCQl2Y3B1LT5hcmNoLnJlZ3NbcmVnXSA9IHZhbDsKKwkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIHJlZywgdmFsKTsKIAkJS1ZNVFJBQ0VfMkQoRFJfUkVBRCwgdmNwdSwgKHUzMilkciwgKHUzMil2YWwsIGhhbmRsZXIpOwogCX0gZWxzZSB7CiAJCS8qIG1vdiB0byBkciAqLwogCX0KLQl2Y3B1X3B1dF9yc3BfcmlwKHZjcHUpOwogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJcmV0dXJuIDE7CiB9CkBAIC0yNTgzLDYgKzI3OTQsMTUgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBoYW5kbGVfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJdTY0IGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZtY3NfcmVhZDY0KEVYSVRfUVVBTElGSUNBVElPTik7CisKKwlrdm1fbW11X2ludmxwZyh2Y3B1LCBleGl0X3F1YWxpZmljYXRpb24pOworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgaGFuZGxlX3diaW52ZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CkBAIC0yNjk1LDYgKzI5MTUsNDMgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHZvaWQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCXN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOworCWludCBlcnI7CisKKwlwcmVlbXB0X2VuYWJsZSgpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKworCXdoaWxlICghZ3Vlc3Rfc3RhdGVfdmFsaWQodmNwdSkpIHsKKwkJZXJyID0gZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBrdm1fcnVuLCAwLCAwLCAwKTsKKworCQlzd2l0Y2ggKGVycikgeworCQkJY2FzZSBFTVVMQVRFX0RPTkU6CisJCQkJYnJlYWs7CisJCQljYXNlIEVNVUxBVEVfRE9fTU1JTzoKKwkJCQlrdm1fcmVwb3J0X2VtdWxhdGlvbl9mYWlsdXJlKHZjcHUsICJtbWlvIik7CisJCQkJLyogVE9ETzogSGFuZGxlIE1NSU8gKi8KKwkJCQlyZXR1cm47CisJCQlkZWZhdWx0OgorCQkJCWt2bV9yZXBvcnRfZW11bGF0aW9uX2ZhaWx1cmUodmNwdSwgImVtdWxhdGlvbiBmYWlsdXJlIik7CisJCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJYnJlYWs7CisJCWlmIChuZWVkX3Jlc2NoZWQoKSkKKwkJCXNjaGVkdWxlKCk7CisJfQorCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKworCS8qIEd1ZXN0IHN0YXRlIHNob3VsZCBiZSB2YWxpZCBub3csIG5vIG1vcmUgZW11bGF0aW9uIHNob3VsZCBiZSBuZWVkZWQgKi8KKwl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDA7Cit9CisKIC8qCiAgKiBUaGUgZXhpdCBoYW5kbGVycyByZXR1cm4gMSBpZiB0aGUgZXhpdCB3YXMgaGFuZGxlZCBmdWxseSBhbmQgZ3Vlc3QgZXhlY3V0aW9uCiAgKiBtYXkgcmVzdW1lLiAgT3RoZXJ3aXNlIHRoZXkgc2V0IHRoZSBrdm1fcnVuIHBhcmFtZXRlciB0byBpbmRpY2F0ZSB3aGF0IG5lZWRzCkBAIC0yNzE0LDYgKzI5NzEsNyBAQAogCVtFWElUX1JFQVNPTl9NU1JfV1JJVEVdICAgICAgICAgICAgICAgPSBoYW5kbGVfd3Jtc3IsCiAJW0VYSVRfUkVBU09OX1BFTkRJTkdfSU5URVJSVVBUXSAgICAgICA9IGhhbmRsZV9pbnRlcnJ1cHRfd2luZG93LAogCVtFWElUX1JFQVNPTl9ITFRdICAgICAgICAgICAgICAgICAgICAgPSBoYW5kbGVfaGFsdCwKKwlbRVhJVF9SRUFTT05fSU5WTFBHXQkJICAgICAgPSBoYW5kbGVfaW52bHBnLAogCVtFWElUX1JFQVNPTl9WTUNBTExdICAgICAgICAgICAgICAgICAgPSBoYW5kbGVfdm1jYWxsLAogCVtFWElUX1JFQVNPTl9UUFJfQkVMT1dfVEhSRVNIT0xEXSAgICAgPSBoYW5kbGVfdHByX2JlbG93X3RocmVzaG9sZCwKIAlbRVhJVF9SRUFTT05fQVBJQ19BQ0NFU1NdICAgICAgICAgICAgID0gaGFuZGxlX2FwaWNfYWNjZXNzLApAQCAtMjczNSw4ICsyOTkzLDggQEAKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAl1MzIgdmVjdG9yaW5nX2luZm8gPSB2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbzsKIAotCUtWTVRSQUNFXzNEKFZNRVhJVCwgdmNwdSwgZXhpdF9yZWFzb24sICh1MzIpdm1jc19yZWFkbChHVUVTVF9SSVApLAotCQkgICAgKHUzMikoKHU2NCl2bWNzX3JlYWRsKEdVRVNUX1JJUCkgPj4gMzIpLCBlbnRyeWV4aXQpOworCUtWTVRSQUNFXzNEKFZNRVhJVCwgdmNwdSwgZXhpdF9yZWFzb24sICh1MzIpa3ZtX3JpcF9yZWFkKHZjcHUpLAorCQkgICAgKHUzMikoKHU2NClrdm1fcmlwX3JlYWQodmNwdSkgPj4gMzIpLCBlbnRyeWV4aXQpOwogCiAJLyogQWNjZXNzIENSMyBkb24ndCBjYXVzZSBWTUV4aXQgaW4gcGFnaW5nIG1vZGUsIHNvIHdlIG5lZWQKIAkgKiB0byBzeW5jIHdpdGggZ3Vlc3QgcmVhbCBDUjMuICovCkBAIC0yODI5LDg4ICszMDg3LDkyIEBACiAJCWVuYWJsZV9pcnFfd2luZG93KHZjcHUpOwogfQogCi1zdGF0aWMgdm9pZCB2bXhfaW50cl9hc3Npc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIHZvaWQgdm14X2NvbXBsZXRlX2ludGVycnVwdHMoc3RydWN0IHZjcHVfdm14ICp2bXgpCiB7Ci0Jc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7Ci0JdTMyIGlkdHZfaW5mb19maWVsZCwgaW50cl9pbmZvX2ZpZWxkLCBleGl0X2ludHJfaW5mb19maWVsZDsKLQlpbnQgdmVjdG9yOworCXUzMiBleGl0X2ludHJfaW5mbzsKKwl1MzIgaWR0X3ZlY3RvcmluZ19pbmZvOworCWJvb2wgdW5ibG9ja19ubWk7CisJdTggdmVjdG9yOworCWludCB0eXBlOworCWJvb2wgaWR0dl9pbmZvX3ZhbGlkOworCXUzMiBlcnJvcjsKIAotCXVwZGF0ZV90cHJfdGhyZXNob2xkKHZjcHUpOwotCi0JaW50cl9pbmZvX2ZpZWxkID0gdm1jc19yZWFkMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxEKTsKLQlleGl0X2ludHJfaW5mb19maWVsZCA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9JTkZPKTsKLQlpZHR2X2luZm9fZmllbGQgPSB2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbzsKLQlpZiAoaW50cl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX1ZBTElEX01BU0spIHsKLQkJaWYgKGlkdHZfaW5mb19maWVsZCAmIElOVFJfSU5GT19WQUxJRF9NQVNLKSB7Ci0JCQkvKiBUT0RPOiBmYXVsdCB3aGVuIElEVF9WZWN0b3JpbmcgKi8KLQkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJGYXVsdCB3aGVuIElEVF9WZWN0b3JpbmdcbiIpOwotCQl9Ci0JCWVuYWJsZV9pbnRyX3dpbmRvdyh2Y3B1KTsKLQkJcmV0dXJuOwotCX0KLQlpZiAodW5saWtlbHkoaWR0dl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX1ZBTElEX01BU0spKSB7Ci0JCWlmICgoaWR0dl9pbmZvX2ZpZWxkICYgVkVDVE9SSU5HX0lORk9fVFlQRV9NQVNLKQotCQkgICAgPT0gSU5UUl9UWVBFX0VYVF9JTlRSCi0JCSAgICAmJiB2Y3B1LT5hcmNoLnJtb2RlLmFjdGl2ZSkgewotCQkJdTggdmVjdCA9IGlkdHZfaW5mb19maWVsZCAmIFZFQ1RPUklOR19JTkZPX1ZFQ1RPUl9NQVNLOwotCi0JCQl2bXhfaW5qZWN0X2lycSh2Y3B1LCB2ZWN0KTsKLQkJCWVuYWJsZV9pbnRyX3dpbmRvdyh2Y3B1KTsKLQkJCXJldHVybjsKLQkJfQotCi0JCUtWTVRSQUNFXzFEKFJFREVMSVZFUl9FVlQsIHZjcHUsIGlkdHZfaW5mb19maWVsZCwgaGFuZGxlcik7Ci0KLQkJLyoKLQkJICogU0RNIDM6IDI1LjcuMS4yCi0JCSAqIENsZWFyIGJpdCAiYmxvY2sgYnkgTk1JIiBiZWZvcmUgVk0gZW50cnkgaWYgYSBOTUkgZGVsaXZlcnkKLQkJICogZmF1bHRlZC4KLQkJICovCi0JCWlmICgoaWR0dl9pbmZvX2ZpZWxkICYgVkVDVE9SSU5HX0lORk9fVFlQRV9NQVNLKQotCQkgICAgPT0gSU5UUl9UWVBFX05NSV9JTlRSICYmIGNwdV9oYXNfdmlydHVhbF9ubWlzKCkpCi0JCQl2bWNzX3dyaXRlMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLAotCQkJCXZtY3NfcmVhZDMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTykgJgotCQkJCX5HVUVTVF9JTlRSX1NUQVRFX05NSSk7Ci0KLQkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwgaWR0dl9pbmZvX2ZpZWxkCi0JCQkJJiB+SU5UUl9JTkZPX1JFU1ZEX0JJVFNfTUFTSyk7Ci0JCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlNUUlVDVElPTl9MRU4sCi0JCQkJdm1jc19yZWFkMzIoVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pKTsKLQotCQlpZiAodW5saWtlbHkoaWR0dl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLKSkKLQkJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9FWENFUFRJT05fRVJST1JfQ09ERSwKLQkJCQl2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0VSUk9SX0NPREUpKTsKLQkJZW5hYmxlX2ludHJfd2luZG93KHZjcHUpOwotCQlyZXR1cm47Ci0JfQorCWV4aXRfaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pOwogCWlmIChjcHVfaGFzX3ZpcnR1YWxfbm1pcygpKSB7CisJCXVuYmxvY2tfbm1pID0gKGV4aXRfaW50cl9pbmZvICYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JKSAhPSAwOworCQl2ZWN0b3IgPSBleGl0X2ludHJfaW5mbyAmIElOVFJfSU5GT19WRUNUT1JfTUFTSzsKIAkJLyoKIAkJICogU0RNIDM6IDI1LjcuMS4yCiAJCSAqIFJlLXNldCBiaXQgImJsb2NrIGJ5IE5NSSIgYmVmb3JlIFZNIGVudHJ5IGlmIHZtZXhpdCBjYXVzZWQgYnkKIAkJICogYSBndWVzdCBJUkVUIGZhdWx0LgogCQkgKi8KLQkJaWYgKChleGl0X2ludHJfaW5mb19maWVsZCAmIElOVFJfSU5GT19VTkJMT0NLX05NSSkgJiYKLQkJICAgIChleGl0X2ludHJfaW5mb19maWVsZCAmIElOVFJfSU5GT19WRUNUT1JfTUFTSykgIT0gOCkKLQkJCXZtY3Nfd3JpdGUzMihHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCi0JCQkJdm1jc19yZWFkMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPKSB8Ci0JCQkJR1VFU1RfSU5UUl9TVEFURV9OTUkpOwotCQllbHNlIGlmICh2Y3B1LT5hcmNoLm5taV9wZW5kaW5nKSB7Ci0JCQlpZiAodm14X25taV9lbmFibGVkKHZjcHUpKQotCQkJCXZteF9pbmplY3Rfbm1pKHZjcHUpOworCQlpZiAodW5ibG9ja19ubWkgJiYgdmVjdG9yICE9IERGX1ZFQ1RPUikKKwkJCXZtY3Nfc2V0X2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLAorCQkJCSAgICAgIEdVRVNUX0lOVFJfU1RBVEVfTk1JKTsKKwl9CisKKwlpZHRfdmVjdG9yaW5nX2luZm8gPSB2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbzsKKwlpZHR2X2luZm9fdmFsaWQgPSBpZHRfdmVjdG9yaW5nX2luZm8gJiBWRUNUT1JJTkdfSU5GT19WQUxJRF9NQVNLOworCXZlY3RvciA9IGlkdF92ZWN0b3JpbmdfaW5mbyAmIFZFQ1RPUklOR19JTkZPX1ZFQ1RPUl9NQVNLOworCXR5cGUgPSBpZHRfdmVjdG9yaW5nX2luZm8gJiBWRUNUT1JJTkdfSU5GT19UWVBFX01BU0s7CisJaWYgKHZteC0+dmNwdS5hcmNoLm5taV9pbmplY3RlZCkgeworCQkvKgorCQkgKiBTRE0gMzogMjUuNy4xLjIKKwkJICogQ2xlYXIgYml0ICJibG9jayBieSBOTUkiIGJlZm9yZSBWTSBlbnRyeSBpZiBhIE5NSSBkZWxpdmVyeQorCQkgKiBmYXVsdGVkLgorCQkgKi8KKwkJaWYgKGlkdHZfaW5mb192YWxpZCAmJiB0eXBlID09IElOVFJfVFlQRV9OTUlfSU5UUikKKwkJCXZtY3NfY2xlYXJfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCisJCQkJCUdVRVNUX0lOVFJfU1RBVEVfTk1JKTsKKwkJZWxzZQorCQkJdm14LT52Y3B1LmFyY2gubm1pX2luamVjdGVkID0gZmFsc2U7CisJfQorCWt2bV9jbGVhcl9leGNlcHRpb25fcXVldWUoJnZteC0+dmNwdSk7CisJaWYgKGlkdHZfaW5mb192YWxpZCAmJiB0eXBlID09IElOVFJfVFlQRV9FWENFUFRJT04pIHsKKwkJaWYgKGlkdF92ZWN0b3JpbmdfaW5mbyAmIFZFQ1RPUklOR19JTkZPX0RFTElWRVJfQ09ERV9NQVNLKSB7CisJCQllcnJvciA9IHZtY3NfcmVhZDMyKElEVF9WRUNUT1JJTkdfRVJST1JfQ09ERSk7CisJCQlrdm1fcXVldWVfZXhjZXB0aW9uX2UoJnZteC0+dmNwdSwgdmVjdG9yLCBlcnJvcik7CisJCX0gZWxzZQorCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbigmdm14LT52Y3B1LCB2ZWN0b3IpOworCQl2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbyA9IDA7CisJfQorCWt2bV9jbGVhcl9pbnRlcnJ1cHRfcXVldWUoJnZteC0+dmNwdSk7CisJaWYgKGlkdHZfaW5mb192YWxpZCAmJiB0eXBlID09IElOVFJfVFlQRV9FWFRfSU5UUikgeworCQlrdm1fcXVldWVfaW50ZXJydXB0KCZ2bXgtPnZjcHUsIHZlY3Rvcik7CisJCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZteF9pbnRyX2Fzc2lzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdXBkYXRlX3Rwcl90aHJlc2hvbGQodmNwdSk7CisKKwlpZiAoY3B1X2hhc192aXJ0dWFsX25taXMoKSkgeworCQlpZiAodmNwdS0+YXJjaC5ubWlfcGVuZGluZyAmJiAhdmNwdS0+YXJjaC5ubWlfaW5qZWN0ZWQpIHsKKwkJCWlmICh2bXhfbm1pX2VuYWJsZWQodmNwdSkpIHsKKwkJCQl2Y3B1LT5hcmNoLm5taV9wZW5kaW5nID0gZmFsc2U7CisJCQkJdmNwdS0+YXJjaC5ubWlfaW5qZWN0ZWQgPSB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQllbmFibGVfaW50cl93aW5kb3codmNwdSk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCWlmICh2Y3B1LT5hcmNoLm5taV9pbmplY3RlZCkgeworCQkJdm14X2luamVjdF9ubWkodmNwdSk7CiAJCQllbmFibGVfaW50cl93aW5kb3codmNwdSk7CiAJCQlyZXR1cm47CiAJCX0KLQogCX0KLQlpZiAoIWt2bV9jcHVfaGFzX2ludGVycnVwdCh2Y3B1KSkKLQkJcmV0dXJuOwotCWlmICh2bXhfaXJxX2VuYWJsZWQodmNwdSkpIHsKLQkJdmVjdG9yID0ga3ZtX2NwdV9nZXRfaW50ZXJydXB0KHZjcHUpOwotCQl2bXhfaW5qZWN0X2lycSh2Y3B1LCB2ZWN0b3IpOwotCQlrdm1fdGltZXJfaW50cl9wb3N0KHZjcHUsIHZlY3Rvcik7Ci0JfSBlbHNlCi0JCWVuYWJsZV9pcnFfd2luZG93KHZjcHUpOworCWlmICghdmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZyAmJiBrdm1fY3B1X2hhc19pbnRlcnJ1cHQodmNwdSkpIHsKKwkJaWYgKHZteF9pcnFfZW5hYmxlZCh2Y3B1KSkKKwkJCWt2bV9xdWV1ZV9pbnRlcnJ1cHQodmNwdSwga3ZtX2NwdV9nZXRfaW50ZXJydXB0KHZjcHUpKTsKKwkJZWxzZQorCQkJZW5hYmxlX2lycV93aW5kb3codmNwdSk7CisJfQorCWlmICh2Y3B1LT5hcmNoLmludGVycnVwdC5wZW5kaW5nKSB7CisJCXZteF9pbmplY3RfaXJxKHZjcHUsIHZjcHUtPmFyY2guaW50ZXJydXB0Lm5yKTsKKwkJa3ZtX3RpbWVyX2ludHJfcG9zdCh2Y3B1LCB2Y3B1LT5hcmNoLmludGVycnVwdC5ucik7CisJfQogfQogCiAvKgpAQCAtMjkyMiw5ICszMTg0LDkgQEAKIHN0YXRpYyB2b2lkIGZpeHVwX3Jtb2RlX2lycShzdHJ1Y3QgdmNwdV92bXggKnZteCkKIHsKIAl2bXgtPnJtb2RlLmlycS5wZW5kaW5nID0gMDsKLQlpZiAodm1jc19yZWFkbChHVUVTVF9SSVApICsgMSAhPSB2bXgtPnJtb2RlLmlycS5yaXApCisJaWYgKGt2bV9yaXBfcmVhZCgmdm14LT52Y3B1KSArIDEgIT0gdm14LT5ybW9kZS5pcnEucmlwKQogCQlyZXR1cm47Ci0Jdm1jc193cml0ZWwoR1VFU1RfUklQLCB2bXgtPnJtb2RlLmlycS5yaXApOworCWt2bV9yaXBfd3JpdGUoJnZteC0+dmNwdSwgdm14LT5ybW9kZS5pcnEucmlwKTsKIAlpZiAodm14LT5pZHRfdmVjdG9yaW5nX2luZm8gJiBWRUNUT1JJTkdfSU5GT19WQUxJRF9NQVNLKSB7CiAJCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvICY9IH5WRUNUT1JJTkdfSU5GT19UWVBFX01BU0s7CiAJCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvIHw9IElOVFJfVFlQRV9FWFRfSU5UUjsKQEAgLTI5MzYsMTEgKzMxOTgsMzAgQEAKIAkJfCB2bXgtPnJtb2RlLmlycS52ZWN0b3I7CiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIFIgInIiCisjZGVmaW5lIFEgInEiCisjZWxzZQorI2RlZmluZSBSICJlIgorI2RlZmluZSBRICJsIgorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHZteF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCXUzMiBpbnRyX2luZm87CiAKKwkvKiBIYW5kbGUgaW52YWxpZCBndWVzdCBzdGF0ZSBpbnN0ZWFkIG9mIGVudGVyaW5nIFZNWCAqLworCWlmICh2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCAmJiBlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUpIHsKKwkJaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUodmNwdSwga3ZtX3J1bik7CisJCXJldHVybjsKKwl9CisKKwlpZiAodGVzdF9iaXQoVkNQVV9SRUdTX1JTUCwgKHVuc2lnbmVkIGxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2RpcnR5KSkKKwkJdm1jc193cml0ZWwoR1VFU1RfUlNQLCB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF0pOworCWlmICh0ZXN0X2JpdChWQ1BVX1JFR1NfUklQLCAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfZGlydHkpKQorCQl2bWNzX3dyaXRlbChHVUVTVF9SSVAsIHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUklQXSk7CisKIAkvKgogCSAqIExvYWRpbmcgZ3Vlc3QgZnB1IG1heSBoYXZlIGNsZWFyZWQgaG9zdCBjcjAudHMKIAkgKi8KQEAgLTI5NDgsMjYgKzMyMjksMjUgQEAKIAogCWFzbSgKIAkJLyogU3RvcmUgaG9zdCByZWdpc3RlcnMgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCSJwdXNoICUlcmR4OyBwdXNoICUlcmJwOyIKLQkJInB1c2ggJSVyY3ggXG5cdCIKLSNlbHNlCi0JCSJwdXNoICUlZWR4OyBwdXNoICUlZWJwOyIKLQkJInB1c2ggJSVlY3ggXG5cdCIKLSNlbmRpZgorCQkicHVzaCAlJSJSImR4OyBwdXNoICUlIlIiYnA7IgorCQkicHVzaCAlJSJSImN4IFxuXHQiCisJCSJjbXAgJSUiUiJzcCwgJWNbaG9zdF9yc3BdKCUwKSBcblx0IgorCQkiamUgMWYgXG5cdCIKKwkJIm1vdiAlJSJSInNwLCAlY1tob3N0X3JzcF0oJTApIFxuXHQiCiAJCV9fZXgoQVNNX1ZNWF9WTVdSSVRFX1JTUF9SRFgpICJcblx0IgorCQkiMTogXG5cdCIKIAkJLyogQ2hlY2sgaWYgdm1sYXVuY2ggb2Ygdm1yZXN1bWUgaXMgbmVlZGVkICovCiAJCSJjbXBsICQwLCAlY1tsYXVuY2hlZF0oJTApIFxuXHQiCiAJCS8qIExvYWQgZ3Vlc3QgcmVnaXN0ZXJzLiAgRG9uJ3QgY2xvYmJlciBmbGFncy4gKi8KKwkJIm1vdiAlY1tjcjJdKCUwKSwgJSUiUiJheCBcblx0IgorCQkibW92ICUlIlIiYXgsICUlY3IyIFxuXHQiCisJCSJtb3YgJWNbcmF4XSglMCksICUlIlIiYXggXG5cdCIKKwkJIm1vdiAlY1tyYnhdKCUwKSwgJSUiUiJieCBcblx0IgorCQkibW92ICVjW3JkeF0oJTApLCAlJSJSImR4IFxuXHQiCisJCSJtb3YgJWNbcnNpXSglMCksICUlIlIic2kgXG5cdCIKKwkJIm1vdiAlY1tyZGldKCUwKSwgJSUiUiJkaSBcblx0IgorCQkibW92ICVjW3JicF0oJTApLCAlJSJSImJwIFxuXHQiCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCQkibW92ICVjW2NyMl0oJTApLCAlJXJheCBcblx0IgotCQkibW92ICUlcmF4LCAlJWNyMiBcblx0IgotCQkibW92ICVjW3JheF0oJTApLCAlJXJheCBcblx0IgotCQkibW92ICVjW3JieF0oJTApLCAlJXJieCBcblx0IgotCQkibW92ICVjW3JkeF0oJTApLCAlJXJkeCBcblx0IgotCQkibW92ICVjW3JzaV0oJTApLCAlJXJzaSBcblx0IgotCQkibW92ICVjW3JkaV0oJTApLCAlJXJkaSBcblx0IgotCQkibW92ICVjW3JicF0oJTApLCAlJXJicCBcblx0IgogCQkibW92ICVjW3I4XSglMCksICAlJXI4ICBcblx0IgogCQkibW92ICVjW3I5XSglMCksICAlJXI5ICBcblx0IgogCQkibW92ICVjW3IxMF0oJTApLCAlJXIxMCBcblx0IgpAQCAtMjk3NiwxOCArMzI1Niw5IEBACiAJCSJtb3YgJWNbcjEzXSglMCksICUlcjEzIFxuXHQiCiAJCSJtb3YgJWNbcjE0XSglMCksICUlcjE0IFxuXHQiCiAJCSJtb3YgJWNbcjE1XSglMCksICUlcjE1IFxuXHQiCi0JCSJtb3YgJWNbcmN4XSglMCksICUlcmN4IFxuXHQiIC8qIGtpbGxzICUwIChyY3gpICovCi0jZWxzZQotCQkibW92ICVjW2NyMl0oJTApLCAlJWVheCBcblx0IgotCQkibW92ICUlZWF4LCAgICUlY3IyIFxuXHQiCi0JCSJtb3YgJWNbcmF4XSglMCksICUlZWF4IFxuXHQiCi0JCSJtb3YgJWNbcmJ4XSglMCksICUlZWJ4IFxuXHQiCi0JCSJtb3YgJWNbcmR4XSglMCksICUlZWR4IFxuXHQiCi0JCSJtb3YgJWNbcnNpXSglMCksICUlZXNpIFxuXHQiCi0JCSJtb3YgJWNbcmRpXSglMCksICUlZWRpIFxuXHQiCi0JCSJtb3YgJWNbcmJwXSglMCksICUlZWJwIFxuXHQiCi0JCSJtb3YgJWNbcmN4XSglMCksICUlZWN4IFxuXHQiIC8qIGtpbGxzICUwIChlY3gpICovCiAjZW5kaWYKKwkJIm1vdiAlY1tyY3hdKCUwKSwgJSUiUiJjeCBcblx0IiAvKiBraWxscyAlMCAoZWN4KSAqLworCiAJCS8qIEVudGVyIGd1ZXN0IG1vZGUgKi8KIAkJImpuZSAuTGxhdW5jaGVkIFxuXHQiCiAJCV9fZXgoQVNNX1ZNWF9WTUxBVU5DSCkgIlxuXHQiCkBAIC0yOTk1LDE1ICszMjY2LDE1IEBACiAJCSIuTGxhdW5jaGVkOiAiIF9fZXgoQVNNX1ZNWF9WTVJFU1VNRSkgIlxuXHQiCiAJCSIuTGt2bV92bXhfcmV0dXJuOiAiCiAJCS8qIFNhdmUgZ3Vlc3QgcmVnaXN0ZXJzLCBsb2FkIGhvc3QgcmVnaXN0ZXJzLCBrZWVwIGZsYWdzICovCisJCSJ4Y2hnICUwLCAgICAgKCUlIlIic3ApIFxuXHQiCisJCSJtb3YgJSUiUiJheCwgJWNbcmF4XSglMCkgXG5cdCIKKwkJIm1vdiAlJSJSImJ4LCAlY1tyYnhdKCUwKSBcblx0IgorCQkicHVzaCJRIiAoJSUiUiJzcCk7IHBvcCJRIiAlY1tyY3hdKCUwKSBcblx0IgorCQkibW92ICUlIlIiZHgsICVjW3JkeF0oJTApIFxuXHQiCisJCSJtb3YgJSUiUiJzaSwgJWNbcnNpXSglMCkgXG5cdCIKKwkJIm1vdiAlJSJSImRpLCAlY1tyZGldKCUwKSBcblx0IgorCQkibW92ICUlIlIiYnAsICVjW3JicF0oJTApIFxuXHQiCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCQkieGNoZyAlMCwgICAgICglJXJzcCkgXG5cdCIKLQkJIm1vdiAlJXJheCwgJWNbcmF4XSglMCkgXG5cdCIKLQkJIm1vdiAlJXJieCwgJWNbcmJ4XSglMCkgXG5cdCIKLQkJInB1c2hxICglJXJzcCk7IHBvcHEgJWNbcmN4XSglMCkgXG5cdCIKLQkJIm1vdiAlJXJkeCwgJWNbcmR4XSglMCkgXG5cdCIKLQkJIm1vdiAlJXJzaSwgJWNbcnNpXSglMCkgXG5cdCIKLQkJIm1vdiAlJXJkaSwgJWNbcmRpXSglMCkgXG5cdCIKLQkJIm1vdiAlJXJicCwgJWNbcmJwXSglMCkgXG5cdCIKIAkJIm1vdiAlJXI4LCAgJWNbcjhdKCUwKSBcblx0IgogCQkibW92ICUlcjksICAlY1tyOV0oJTApIFxuXHQiCiAJCSJtb3YgJSVyMTAsICVjW3IxMF0oJTApIFxuXHQiCkBAIC0zMDEyLDI4ICszMjgzLDE2IEBACiAJCSJtb3YgJSVyMTMsICVjW3IxM10oJTApIFxuXHQiCiAJCSJtb3YgJSVyMTQsICVjW3IxNF0oJTApIFxuXHQiCiAJCSJtb3YgJSVyMTUsICVjW3IxNV0oJTApIFxuXHQiCi0JCSJtb3YgJSVjcjIsICUlcmF4ICAgXG5cdCIKLQkJIm1vdiAlJXJheCwgJWNbY3IyXSglMCkgXG5cdCIKLQotCQkicG9wICAlJXJicDsgcG9wICAlJXJicDsgcG9wICAlJXJkeCBcblx0IgotI2Vsc2UKLQkJInhjaGcgJTAsICglJWVzcCkgXG5cdCIKLQkJIm1vdiAlJWVheCwgJWNbcmF4XSglMCkgXG5cdCIKLQkJIm1vdiAlJWVieCwgJWNbcmJ4XSglMCkgXG5cdCIKLQkJInB1c2hsICglJWVzcCk7IHBvcGwgJWNbcmN4XSglMCkgXG5cdCIKLQkJIm1vdiAlJWVkeCwgJWNbcmR4XSglMCkgXG5cdCIKLQkJIm1vdiAlJWVzaSwgJWNbcnNpXSglMCkgXG5cdCIKLQkJIm1vdiAlJWVkaSwgJWNbcmRpXSglMCkgXG5cdCIKLQkJIm1vdiAlJWVicCwgJWNbcmJwXSglMCkgXG5cdCIKLQkJIm1vdiAlJWNyMiwgJSVlYXggIFxuXHQiCi0JCSJtb3YgJSVlYXgsICVjW2NyMl0oJTApIFxuXHQiCi0KLQkJInBvcCAlJWVicDsgcG9wICUlZWJwOyBwb3AgJSVlZHggXG5cdCIKICNlbmRpZgorCQkibW92ICUlY3IyLCAlJSJSImF4ICAgXG5cdCIKKwkJIm1vdiAlJSJSImF4LCAlY1tjcjJdKCUwKSBcblx0IgorCisJCSJwb3AgICUlIlIiYnA7IHBvcCAgJSUiUiJicDsgcG9wICAlJSJSImR4IFxuXHQiCiAJCSJzZXRiZSAlY1tmYWlsXSglMCkgXG5cdCIKIAkgICAgICA6IDogImMiKHZteCksICJkIigodW5zaWduZWQgbG9uZylIT1NUX1JTUCksCiAJCVtsYXVuY2hlZF0iaSIob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCBsYXVuY2hlZCkpLAogCQlbZmFpbF0iaSIob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCBmYWlsKSksCisJCVtob3N0X3JzcF0iaSIob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCBob3N0X3JzcCkpLAogCQlbcmF4XSJpIihvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdKSksCiAJCVtyYnhdImkiKG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF0pKSwKIAkJW3JjeF0iaSIob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCB2Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSkpLApAQCAtMzA1MywxNCArMzMxMiwxNSBAQAogI2VuZGlmCiAJCVtjcjJdImkiKG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdmNwdS5hcmNoLmNyMikpCiAJICAgICAgOiAiY2MiLCAibWVtb3J5IgorCQksIFIiYngiLCBSImRpIiwgUiJzaSIKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCSwgInJieCIsICJyZGkiLCAicnNpIgogCQksICJyOCIsICJyOSIsICJyMTAiLCAicjExIiwgInIxMiIsICJyMTMiLCAicjE0IiwgInIxNSIKLSNlbHNlCi0JCSwgImVieCIsICJlZGkiLCAicnNpIgogI2VuZGlmCiAJICAgICAgKTsKIAorCXZjcHUtPmFyY2gucmVnc19hdmFpbCA9IH4oKDEgPDwgVkNQVV9SRUdTX1JJUCkgfCAoMSA8PCBWQ1BVX1JFR1NfUlNQKSk7CisJdmNwdS0+YXJjaC5yZWdzX2RpcnR5ID0gMDsKKwogCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvID0gdm1jc19yZWFkMzIoSURUX1ZFQ1RPUklOR19JTkZPX0ZJRUxEKTsKIAlpZiAodm14LT5ybW9kZS5pcnEucGVuZGluZykKIAkJZml4dXBfcm1vZGVfaXJxKHZteCk7CkBAIC0zMDgwLDggKzMzNDAsMTMgQEAKIAkJS1ZNVFJBQ0VfMEQoTk1JLCB2Y3B1LCBoYW5kbGVyKTsKIAkJYXNtKCJpbnQgJDIiKTsKIAl9CisKKwl2bXhfY29tcGxldGVfaW50ZXJydXB0cyh2bXgpOwogfQogCisjdW5kZWYgUgorI3VuZGVmIFEKKwogc3RhdGljIHZvaWQgdm14X2ZyZWVfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CkBAIC0zMjI0LDggKzM0ODksNyBAQAogCS5zZXRfaWR0ID0gdm14X3NldF9pZHQsCiAJLmdldF9nZHQgPSB2bXhfZ2V0X2dkdCwKIAkuc2V0X2dkdCA9IHZteF9zZXRfZ2R0LAotCS5jYWNoZV9yZWdzID0gdmNwdV9sb2FkX3JzcF9yaXAsCi0JLmRlY2FjaGVfcmVncyA9IHZjcHVfcHV0X3JzcF9yaXAsCisJLmNhY2hlX3JlZyA9IHZteF9jYWNoZV9yZWcsCiAJLmdldF9yZmxhZ3MgPSB2bXhfZ2V0X3JmbGFncywKIAkuc2V0X3JmbGFncyA9IHZteF9zZXRfcmZsYWdzLAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14LmgKaW5kZXggMTdlMjU5OS4uM2UwMTBkMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC5oCisrKyBiL2FyY2gveDg2L2t2bS92bXguaApAQCAtMzMxLDkgKzMzMSw2IEBACiAKICNkZWZpbmUgQVJfUkVTRVJWRF9NQVNLIDB4ZmZmZTBmMDAKIAotI2RlZmluZSBNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0xfTE9DS0VEICAgICAgICAgMHgxCi0jZGVmaW5lIE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVEICAweDQKLQogI2RlZmluZSBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVAk5CiAjZGVmaW5lIElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QJMTAKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDBkNjgyZmMuLjRmMDY3N2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTQsMTAgKzQsMTQgQEAKICAqIGRlcml2ZWQgZnJvbSBkcml2ZXJzL2t2bS9rdm1fbWFpbi5jCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IFF1bXJhbmV0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUXVtcmFuZXQsIEluYy4KKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDgKICAqCiAgKiBBdXRob3JzOgogICogICBBdmkgS2l2aXR5ICAgPGF2aUBxdW1yYW5ldC5jb20+CiAgKiAgIFlhbml2IEthbWF5ICA8eWFuaXZAcXVtcmFuZXQuY29tPgorICogICBBbWl0IFNoYWggICAgPGFtaXQuc2hhaEBxdW1yYW5ldC5jb20+CisgKiAgIEJlbi1BbWkgWWFzc291ciA8YmVuYW1pQGlsLmlibS5jb20+CiAgKgogICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLiAgU2VlCiAgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgpAQCAtMTksMTQgKzIzLDE4IEBACiAjaW5jbHVkZSAibW11LmgiCiAjaW5jbHVkZSAiaTgyNTQuaCIKICNpbmNsdWRlICJ0c3MuaCIKKyNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgorI2luY2x1ZGUgIng4Ni5oIgogCiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rdm0uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KQEAgLTYxLDYgKzY5LDcgQEAKIAkJCQkgICAgc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgX191c2VyICplbnRyaWVzKTsKIAogc3RydWN0IGt2bV94ODZfb3BzICprdm1feDg2X29wczsKK0VYUE9SVF9TWU1CT0xfR1BMKGt2bV94ODZfb3BzKTsKIAogc3RydWN0IGt2bV9zdGF0c19kZWJ1Z2ZzX2l0ZW0gZGVidWdmc19lbnRyaWVzW10gPSB7CiAJeyAicGZfZml4ZWQiLCBWQ1BVX1NUQVQocGZfZml4ZWQpIH0sCkBAIC04Myw2ICs5Miw3IEBACiAJeyAiZnB1X3JlbG9hZCIsIFZDUFVfU1RBVChmcHVfcmVsb2FkKSB9LAogCXsgImluc25fZW11bGF0aW9uIiwgVkNQVV9TVEFUKGluc25fZW11bGF0aW9uKSB9LAogCXsgImluc25fZW11bGF0aW9uX2ZhaWwiLCBWQ1BVX1NUQVQoaW5zbl9lbXVsYXRpb25fZmFpbCkgfSwKKwl7ICJpcnFfaW5qZWN0aW9ucyIsIFZDUFVfU1RBVChpcnFfaW5qZWN0aW9ucykgfSwKIAl7ICJtbXVfc2hhZG93X3phcHBlZCIsIFZNX1NUQVQobW11X3NoYWRvd196YXBwZWQpIH0sCiAJeyAibW11X3B0ZV93cml0ZSIsIFZNX1NUQVQobW11X3B0ZV93cml0ZSkgfSwKIAl7ICJtbXVfcHRlX3VwZGF0ZWQiLCBWTV9TVEFUKG1tdV9wdGVfdXBkYXRlZCkgfSwKQEAgLTkwLDEyICsxMDAsMTIgQEAKIAl7ICJtbXVfZmxvb2RlZCIsIFZNX1NUQVQobW11X2Zsb29kZWQpIH0sCiAJeyAibW11X3JlY3ljbGVkIiwgVk1fU1RBVChtbXVfcmVjeWNsZWQpIH0sCiAJeyAibW11X2NhY2hlX21pc3MiLCBWTV9TVEFUKG1tdV9jYWNoZV9taXNzKSB9LAorCXsgIm1tdV91bnN5bmMiLCBWTV9TVEFUKG1tdV91bnN5bmMpIH0sCiAJeyAicmVtb3RlX3RsYl9mbHVzaCIsIFZNX1NUQVQocmVtb3RlX3RsYl9mbHVzaCkgfSwKIAl7ICJsYXJnZXBhZ2VzIiwgVk1fU1RBVChscGFnZXMpIH0sCiAJeyBOVUxMIH0KIH07CiAKLQogdW5zaWduZWQgbG9uZyBzZWdtZW50X2Jhc2UodTE2IHNlbGVjdG9yKQogewogCXN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlIGdkdDsKQEAgLTM1Miw2ICszNjIsNyBAQAogdm9pZCBrdm1fc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKQogewogCWlmIChjcjMgPT0gdmNwdS0+YXJjaC5jcjMgJiYgIXBkcHRyc19jaGFuZ2VkKHZjcHUpKSB7CisJCWt2bV9tbXVfc3luY19yb290cyh2Y3B1KTsKIAkJa3ZtX21tdV9mbHVzaF90bGIodmNwdSk7CiAJCXJldHVybjsKIAl9CkBAIC01NjQsNyArNTc1LDcgQEAKIAlodl9jbG9jay0+dHNjX3RvX3N5c3RlbV9tdWwgPSBkaXZfZnJhYyhuc2VjcywgdHBzMzIpOwogCiAJcHJfZGVidWcoIiVzOiB0c2Nfa2h6ICV1LCB0c2Nfc2hpZnQgJWQsIHRzY19tdWwgJXVcbiIsCi0JCSBfX0ZVTkNUSU9OX18sIHRzY19raHosIGh2X2Nsb2NrLT50c2Nfc2hpZnQsCisJCSBfX2Z1bmNfXywgdHNjX2toeiwgaHZfY2xvY2stPnRzY19zaGlmdCwKIAkJIGh2X2Nsb2NrLT50c2NfdG9fc3lzdGVtX211bCk7CiB9CiAKQEAgLTY2Miw2ICs2NzMsMTggQEAKIAkJcHJfdW5pbXBsKHZjcHUsICIlczogTVNSX0lBMzJfTUNHX0NUTCAweCVsbHgsIG5vcFxuIiwKIAkJCV9fZnVuY19fLCBkYXRhKTsKIAkJYnJlYWs7CisJY2FzZSBNU1JfSUEzMl9ERUJVR0NUTE1TUjoKKwkJaWYgKCFkYXRhKSB7CisJCQkvKiBXZSBzdXBwb3J0IHRoZSBub24tYWN0aXZhdGVkIGNhc2UgYWxyZWFkeSAqLworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoZGF0YSAmIH4oREVCVUdDVExNU1JfTEJSIHwgREVCVUdDVExNU1JfQlRGKSkgeworCQkJLyogVmFsdWVzIG90aGVyIHRoYW4gTEJSIGFuZCBCVEYgYXJlIHZlbmRvci1zcGVjaWZpYywKKwkJCSAgIHRodXMgcmVzZXJ2ZWQgYW5kIHNob3VsZCB0aHJvdyBhICNHUCAqLworCQkJcmV0dXJuIDE7CisJCX0KKwkJcHJfdW5pbXBsKHZjcHUsICIlczogTVNSX0lBMzJfREVCVUdDVExNU1IgMHglbGx4LCBub3BcbiIsCisJCQlfX2Z1bmNfXywgZGF0YSk7CisJCWJyZWFrOwogCWNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgogCWNhc2UgTVNSX0lBMzJfVUNPREVfV1JJVEU6CiAJCWJyZWFrOwpAQCAtNjkyLDEwICs3MTUsOCBAQAogCQkvKiAuLi5idXQgY2xlYW4gaXQgYmVmb3JlIGRvaW5nIHRoZSBhY3R1YWwgd3JpdGUgKi8KIAkJdmNwdS0+YXJjaC50aW1lX29mZnNldCA9IGRhdGEgJiB+KFBBR0VfTUFTSyB8IDEpOwogCi0JCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAkJdmNwdS0+YXJjaC50aW1lX3BhZ2UgPQogCQkJCWdmbl90b19wYWdlKHZjcHUtPmt2bSwgZGF0YSA+PiBQQUdFX1NISUZUKTsKLQkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCQlpZiAoaXNfZXJyb3JfcGFnZSh2Y3B1LT5hcmNoLnRpbWVfcGFnZSkpIHsKIAkJCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4odmNwdS0+YXJjaC50aW1lX3BhZ2UpOwpAQCAtNzUyLDggKzc3MywxNCBAQAogCWNhc2UgTVNSX0lBMzJfTUMwX01JU0MrODoKIAljYXNlIE1TUl9JQTMyX01DMF9NSVNDKzEyOgogCWNhc2UgTVNSX0lBMzJfTUMwX01JU0MrMTY6CisJY2FzZSBNU1JfSUEzMl9NQzBfTUlTQysyMDoKIAljYXNlIE1TUl9JQTMyX1VDT0RFX1JFVjoKIAljYXNlIE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OOgorCWNhc2UgTVNSX0lBMzJfREVCVUdDVExNU1I6CisJY2FzZSBNU1JfSUEzMl9MQVNUQlJBTkNIRlJPTUlQOgorCWNhc2UgTVNSX0lBMzJfTEFTVEJSQU5DSFRPSVA6CisJY2FzZSBNU1JfSUEzMl9MQVNUSU5URlJPTUlQOgorCWNhc2UgTVNSX0lBMzJfTEFTVElOVFRPSVA6CiAJCWRhdGEgPSAwOwogCQlicmVhazsKIAljYXNlIE1TUl9NVFJSY2FwOgpAQCAtOTAxLDYgKzkyOCw5IEBACiAJY2FzZSBLVk1fQ0FQX1BWX01NVToKIAkJciA9ICF0ZHBfZW5hYmxlZDsKIAkJYnJlYWs7CisJY2FzZSBLVk1fQ0FQX0lPTU1VOgorCQlyID0gaW50ZWxfaW9tbXVfZm91bmQoKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJciA9IDA7CiAJCWJyZWFrOwpAQCAtMTMwMywyOCArMTMzMywzMyBAQAogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgcjsKKwlzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpsYXBpYyA9IE5VTEw7CiAKIAlzd2l0Y2ggKGlvY3RsKSB7CiAJY2FzZSBLVk1fR0VUX0xBUElDOiB7Ci0JCXN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgbGFwaWM7CisJCWxhcGljID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9sYXBpY19zdGF0ZSksIEdGUF9LRVJORUwpOwogCi0JCW1lbXNldCgmbGFwaWMsIDAsIHNpemVvZiBsYXBpYyk7Ci0JCXIgPSBrdm1fdmNwdV9pb2N0bF9nZXRfbGFwaWModmNwdSwgJmxhcGljKTsKKwkJciA9IC1FTk9NRU07CisJCWlmICghbGFwaWMpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV92Y3B1X2lvY3RsX2dldF9sYXBpYyh2Y3B1LCBsYXBpYyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZsYXBpYywgc2l6ZW9mIGxhcGljKSkKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBsYXBpYywgc2l6ZW9mKHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUpKSkKIAkJCWdvdG8gb3V0OwogCQlyID0gMDsKIAkJYnJlYWs7CiAJfQogCWNhc2UgS1ZNX1NFVF9MQVBJQzogewotCQlzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlIGxhcGljOwotCi0JCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmxhcGljLCBhcmdwLCBzaXplb2YgbGFwaWMpKQorCQlsYXBpYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJciA9IC1FTk9NRU07CisJCWlmICghbGFwaWMpCiAJCQlnb3RvIG91dDsKLQkJciA9IGt2bV92Y3B1X2lvY3RsX3NldF9sYXBpYyh2Y3B1LCAmbGFwaWMpOzsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcihsYXBpYywgYXJncCwgc2l6ZW9mKHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUpKSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3ZjcHVfaW9jdGxfc2V0X2xhcGljKHZjcHUsIGxhcGljKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CkBAIC0xNDIyLDYgKzE0NTcsOCBAQAogCQlyID0gLUVJTlZBTDsKIAl9CiBvdXQ6CisJaWYgKGxhcGljKQorCQlrZnJlZShsYXBpYyk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE2MzAsNiArMTY2NywxNSBAQAogCXN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgciA9IC1FSU5WQUw7CisJLyoKKwkgKiBUaGlzIHVuaW9uIG1ha2VzIGl0IGNvbXBsZXRlbHkgZXhwbGljaXQgdG8gZ2NjLTMueAorCSAqIHRoYXQgdGhlc2UgdHdvIHZhcmlhYmxlcycgc3RhY2sgdXNhZ2Ugc2hvdWxkIGJlCisJICogY29tYmluZWQsIG5vdCBhZGRlZCB0b2dldGhlci4KKwkgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCBrdm1fcGl0X3N0YXRlIHBzOworCQlzdHJ1Y3Qga3ZtX21lbW9yeV9hbGlhcyBhbGlhczsKKwl9IHU7CiAKIAlzd2l0Y2ggKGlvY3RsKSB7CiAJY2FzZSBLVk1fU0VUX1RTU19BRERSOgpAQCAtMTY2MSwxNyArMTcwNywxNCBAQAogCWNhc2UgS1ZNX0dFVF9OUl9NTVVfUEFHRVM6CiAJCXIgPSBrdm1fdm1faW9jdGxfZ2V0X25yX21tdV9wYWdlcyhrdm0pOwogCQlicmVhazsKLQljYXNlIEtWTV9TRVRfTUVNT1JZX0FMSUFTOiB7Ci0JCXN0cnVjdCBrdm1fbWVtb3J5X2FsaWFzIGFsaWFzOwotCisJY2FzZSBLVk1fU0VUX01FTU9SWV9BTElBUzoKIAkJciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmYWxpYXMsIGFyZ3AsIHNpemVvZiBhbGlhcykpCisJCWlmIChjb3B5X2Zyb21fdXNlcigmdS5hbGlhcywgYXJncCwgc2l6ZW9mKHN0cnVjdCBrdm1fbWVtb3J5X2FsaWFzKSkpCiAJCQlnb3RvIG91dDsKLQkJciA9IGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X2FsaWFzKGt2bSwgJmFsaWFzKTsKKwkJciA9IGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X2FsaWFzKGt2bSwgJnUuYWxpYXMpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlicmVhazsKLQl9CiAJY2FzZSBLVk1fQ1JFQVRFX0lSUUNISVA6CiAJCXIgPSAtRU5PTUVNOwogCQlrdm0tPmFyY2gudnBpYyA9IGt2bV9jcmVhdGVfcGljKGt2bSk7CkBAIC0xNjk5LDEzICsxNzQyLDcgQEAKIAkJCWdvdG8gb3V0OwogCQlpZiAoaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkgewogCQkJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKLQkJCWlmIChpcnFfZXZlbnQuaXJxIDwgMTYpCi0JCQkJa3ZtX3BpY19zZXRfaXJxKHBpY19pcnFjaGlwKGt2bSksCi0JCQkJCWlycV9ldmVudC5pcnEsCi0JCQkJCWlycV9ldmVudC5sZXZlbCk7Ci0JCQlrdm1faW9hcGljX3NldF9pcnEoa3ZtLT5hcmNoLnZpb2FwaWMsCi0JCQkJCWlycV9ldmVudC5pcnEsCi0JCQkJCWlycV9ldmVudC5sZXZlbCk7CisJCQlrdm1fc2V0X2lycShrdm0sIGlycV9ldmVudC5pcnEsIGlycV9ldmVudC5sZXZlbCk7CiAJCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiAJCQlyID0gMDsKIAkJfQpAQCAtMTcxMyw2NSArMTc1MCw3NyBAQAogCX0KIAljYXNlIEtWTV9HRVRfSVJRQ0hJUDogewogCQkvKiAwOiBQSUMgbWFzdGVyLCAxOiBQSUMgc2xhdmUsIDI6IElPQVBJQyAqLwotCQlzdHJ1Y3Qga3ZtX2lycWNoaXAgY2hpcDsKKwkJc3RydWN0IGt2bV9pcnFjaGlwICpjaGlwID0ga21hbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAotCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjaGlwLCBhcmdwLCBzaXplb2YgY2hpcCkpCisJCXIgPSAtRU5PTUVNOworCQlpZiAoIWNoaXApCiAJCQlnb3RvIG91dDsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcihjaGlwLCBhcmdwLCBzaXplb2YgKmNoaXApKQorCQkJZ290byBnZXRfaXJxY2hpcF9vdXQ7CiAJCXIgPSAtRU5YSU87CiAJCWlmICghaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkKLQkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX3ZtX2lvY3RsX2dldF9pcnFjaGlwKGt2bSwgJmNoaXApOworCQkJZ290byBnZXRfaXJxY2hpcF9vdXQ7CisJCXIgPSBrdm1fdm1faW9jdGxfZ2V0X2lycWNoaXAoa3ZtLCBjaGlwKTsKKwkJaWYgKHIpCisJCQlnb3RvIGdldF9pcnFjaGlwX291dDsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgY2hpcCwgc2l6ZW9mICpjaGlwKSkKKwkJCWdvdG8gZ2V0X2lycWNoaXBfb3V0OworCQlyID0gMDsKKwlnZXRfaXJxY2hpcF9vdXQ6CisJCWtmcmVlKGNoaXApOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwotCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmY2hpcCwgc2l6ZW9mIGNoaXApKQotCQkJZ290byBvdXQ7Ci0JCXIgPSAwOwogCQlicmVhazsKIAl9CiAJY2FzZSBLVk1fU0VUX0lSUUNISVA6IHsKIAkJLyogMDogUElDIG1hc3RlciwgMTogUElDIHNsYXZlLCAyOiBJT0FQSUMgKi8KLQkJc3RydWN0IGt2bV9pcnFjaGlwIGNoaXA7CisJCXN0cnVjdCBrdm1faXJxY2hpcCAqY2hpcCA9IGttYWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAKLQkJciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmY2hpcCwgYXJncCwgc2l6ZW9mIGNoaXApKQorCQlyID0gLUVOT01FTTsKKwkJaWYgKCFjaGlwKQogCQkJZ290byBvdXQ7CisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoY2hpcCwgYXJncCwgc2l6ZW9mICpjaGlwKSkKKwkJCWdvdG8gc2V0X2lycWNoaXBfb3V0OwogCQlyID0gLUVOWElPOwogCQlpZiAoIWlycWNoaXBfaW5fa2VybmVsKGt2bSkpCi0JCQlnb3RvIG91dDsKLQkJciA9IGt2bV92bV9pb2N0bF9zZXRfaXJxY2hpcChrdm0sICZjaGlwKTsKKwkJCWdvdG8gc2V0X2lycWNoaXBfb3V0OworCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9pcnFjaGlwKGt2bSwgY2hpcCk7CisJCWlmIChyKQorCQkJZ290byBzZXRfaXJxY2hpcF9vdXQ7CisJCXIgPSAwOworCXNldF9pcnFjaGlwX291dDoKKwkJa2ZyZWUoY2hpcCk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7Ci0JCXIgPSAwOwogCQlicmVhazsKIAl9CiAJY2FzZSBLVk1fR0VUX1BJVDogewotCQlzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSBwczsKIAkJciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmcHMsIGFyZ3AsIHNpemVvZiBwcykpCisJCWlmIChjb3B5X2Zyb21fdXNlcigmdS5wcywgYXJncCwgc2l6ZW9mKHN0cnVjdCBrdm1fcGl0X3N0YXRlKSkpCiAJCQlnb3RvIG91dDsKIAkJciA9IC1FTlhJTzsKIAkJaWYgKCFrdm0tPmFyY2gudnBpdCkKIAkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX3ZtX2lvY3RsX2dldF9waXQoa3ZtLCAmcHMpOworCQlyID0ga3ZtX3ZtX2lvY3RsX2dldF9waXQoa3ZtLCAmdS5wcyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwcywgc2l6ZW9mIHBzKSkKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdS5wcywgc2l6ZW9mKHN0cnVjdCBrdm1fcGl0X3N0YXRlKSkpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TRVRfUElUOiB7Ci0JCXN0cnVjdCBrdm1fcGl0X3N0YXRlIHBzOwogCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwcywgYXJncCwgc2l6ZW9mIHBzKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1LnBzLCBhcmdwLCBzaXplb2YgdS5wcykpCiAJCQlnb3RvIG91dDsKIAkJciA9IC1FTlhJTzsKIAkJaWYgKCFrdm0tPmFyY2gudnBpdCkKIAkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9waXQoa3ZtLCAmcHMpOworCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9waXQoa3ZtLCAmdS5wcyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCXIgPSAwOwpAQCAtMjAxOCw5ICsyMDY3LDcgQEAKIAogCQl2YWwgPSAqKHU2NCAqKW5ldzsKIAotCQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJCXBhZ2UgPSBnZm5fdG9fcGFnZSh2Y3B1LT5rdm0sIGdwYSA+PiBQQUdFX1NISUZUKTsKLQkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCQlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKIAkJc2V0XzY0Yml0KCh1NjQgKikoa2FkZHIgKyBvZmZzZXRfaW5fcGFnZShncGEpKSwgdmFsKTsKQEAgLTIwNDAsNiArMjA4Nyw3IEBACiAKIGludCBlbXVsYXRlX2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGFkZHJlc3MpCiB7CisJa3ZtX21tdV9pbnZscGcodmNwdSwgYWRkcmVzcyk7CiAJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiB9CiAKQEAgLTIwODAsNyArMjEyOCw3IEBACiB2b2lkIGt2bV9yZXBvcnRfZW11bGF0aW9uX2ZhaWx1cmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBjaGFyICpjb250ZXh0KQogewogCXU4IG9wY29kZXNbNF07Ci0JdW5zaWduZWQgbG9uZyByaXAgPSB2Y3B1LT5hcmNoLnJpcDsKKwl1bnNpZ25lZCBsb25nIHJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAl1bnNpZ25lZCBsb25nIHJpcF9saW5lYXI7CiAKIAlpZiAoIXByaW50a19yYXRlbGltaXQoKSkKQEAgLTIxMDIsNiArMjE1MCwxNCBAQAogCS5jbXB4Y2hnX2VtdWxhdGVkICAgID0gZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZCwKIH07CiAKK3N0YXRpYyB2b2lkIGNhY2hlX2FsbF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKKwlrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUlNQKTsKKwlrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUklQKTsKKwl2Y3B1LT5hcmNoLnJlZ3NfZGlydHkgPSB+MDsKK30KKwogaW50IGVtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJc3RydWN0IGt2bV9ydW4gKnJ1biwKIAkJCXVuc2lnbmVkIGxvbmcgY3IyLApAQCAtMjExMSw4ICsyMTY3LDE1IEBACiAJaW50IHI7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYzsKIAorCWt2bV9jbGVhcl9leGNlcHRpb25fcXVldWUodmNwdSk7CiAJdmNwdS0+YXJjaC5tbWlvX2ZhdWx0X2NyMiA9IGNyMjsKLQlrdm1feDg2X29wcy0+Y2FjaGVfcmVncyh2Y3B1KTsKKwkvKgorCSAqIFRPRE86IGZpeCB4ODZfZW11bGF0ZS5jIHRvIHVzZSBndWVzdF9yZWFkL3dyaXRlX3JlZ2lzdGVyCisJICogaW5zdGVhZCBvZiBkaXJlY3QgLT5yZWdzIGFjY2Vzc2VzLCBjYW4gc2F2ZSBodW5kcmVkIGN5Y2xlcworCSAqIG9uIEludGVsIGZvciBpbnN0cnVjdGlvbnMgdGhhdCBkb24ndCByZWFkL2NoYW5nZSBSU1AsIGZvcgorCSAqIGZvciBleGFtcGxlLgorCSAqLworCWNhY2hlX2FsbF9yZWdzKHZjcHUpOwogCiAJdmNwdS0+bW1pb19pc193cml0ZSA9IDA7CiAJdmNwdS0+YXJjaC5waW8uc3RyaW5nID0gMDsKQEAgLTIxNzIsNyArMjIzNSw2IEBACiAJCXJldHVybiBFTVVMQVRFX0RPX01NSU87CiAJfQogCi0Ja3ZtX3g4Nl9vcHMtPmRlY2FjaGVfcmVncyh2Y3B1KTsKIAlrdm1feDg2X29wcy0+c2V0X3JmbGFncyh2Y3B1LCB2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5lZmxhZ3MpOwogCiAJaWYgKHZjcHUtPm1taW9faXNfd3JpdGUpIHsKQEAgLTIyMjUsMjAgKzIyODcsMTkgQEAKIAlzdHJ1Y3Qga3ZtX3Bpb19yZXF1ZXN0ICppbyA9ICZ2Y3B1LT5hcmNoLnBpbzsKIAlsb25nIGRlbHRhOwogCWludCByOwotCi0Ja3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAKIAlpZiAoIWlvLT5zdHJpbmcpIHsKLQkJaWYgKGlvLT5pbikKLQkJCW1lbWNweSgmdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdLCB2Y3B1LT5hcmNoLnBpb19kYXRhLAotCQkJICAgICAgIGlvLT5zaXplKTsKKwkJaWYgKGlvLT5pbikgeworCQkJdmFsID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JBWCk7CisJCQltZW1jcHkoJnZhbCwgdmNwdS0+YXJjaC5waW9fZGF0YSwgaW8tPnNpemUpOworCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIHZhbCk7CisJCX0KIAl9IGVsc2UgewogCQlpZiAoaW8tPmluKSB7CiAJCQlyID0gcGlvX2NvcHlfZGF0YSh2Y3B1KTsKLQkJCWlmIChyKSB7Ci0JCQkJa3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7CisJCQlpZiAocikKIAkJCQlyZXR1cm4gcjsKLQkJCX0KIAkJfQogCiAJCWRlbHRhID0gMTsKQEAgLTIyNDgsMTkgKzIzMDksMjQgQEAKIAkJCSAqIFRoZSBzaXplIG9mIHRoZSByZWdpc3RlciBzaG91bGQgcmVhbGx5IGRlcGVuZCBvbgogCQkJICogY3VycmVudCBhZGRyZXNzIHNpemUuCiAJCQkgKi8KLQkJCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSAtPSBkZWx0YTsKKwkJCXZhbCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQ1gpOworCQkJdmFsIC09IGRlbHRhOworCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQ1gsIHZhbCk7CiAJCX0KIAkJaWYgKGlvLT5kb3duKQogCQkJZGVsdGEgPSAtZGVsdGE7CiAJCWRlbHRhICo9IGlvLT5zaXplOwotCQlpZiAoaW8tPmluKQotCQkJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SREldICs9IGRlbHRhOwotCQllbHNlCi0JCQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTSV0gKz0gZGVsdGE7CisJCWlmIChpby0+aW4pIHsKKwkJCXZhbCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SREkpOworCQkJdmFsICs9IGRlbHRhOworCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SREksIHZhbCk7CisJCX0gZWxzZSB7CisJCQl2YWwgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUlNJKTsKKwkJCXZhbCArPSBkZWx0YTsKKwkJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUlNJLCB2YWwpOworCQl9CiAJfQogCi0Ja3ZtX3g4Nl9vcHMtPmRlY2FjaGVfcmVncyh2Y3B1KTsKLQogCWlvLT5jb3VudCAtPSBpby0+Y3VyX2NvdW50OwogCWlvLT5jdXJfY291bnQgPSAwOwogCkBAIC0yMzEzLDYgKzIzNzksNyBAQAogCQkgIGludCBzaXplLCB1bnNpZ25lZCBwb3J0KQogewogCXN0cnVjdCBrdm1faW9fZGV2aWNlICpwaW9fZGV2OworCXVuc2lnbmVkIGxvbmcgdmFsOwogCiAJdmNwdS0+cnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lPOwogCXZjcHUtPnJ1bi0+aW8uZGlyZWN0aW9uID0gaW4gPyBLVk1fRVhJVF9JT19JTiA6IEtWTV9FWElUX0lPX09VVDsKQEAgLTIzMzMsOCArMjQwMCw4IEBACiAJCUtWTVRSQUNFXzJEKElPX1dSSVRFLCB2Y3B1LCB2Y3B1LT5ydW4tPmlvLnBvcnQsICh1MzIpc2l6ZSwKIAkJCSAgICBoYW5kbGVyKTsKIAotCWt2bV94ODZfb3BzLT5jYWNoZV9yZWdzKHZjcHUpOwotCW1lbWNweSh2Y3B1LT5hcmNoLnBpb19kYXRhLCAmdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdLCA0KTsKKwl2YWwgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKKwltZW1jcHkodmNwdS0+YXJjaC5waW9fZGF0YSwgJnZhbCwgNCk7CiAKIAlrdm1feDg2X29wcy0+c2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIApAQCAtMjQ5MiwxMSArMjU1OSw2IEBACiAJS1ZNVFJBQ0VfMEQoSExULCB2Y3B1LCBoYW5kbGVyKTsKIAlpZiAoaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSkgewogCQl2Y3B1LT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX0hBTFRFRDsKLQkJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKLQkJa3ZtX3ZjcHVfYmxvY2sodmNwdSk7Ci0JCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKLQkJaWYgKHZjcHUtPmFyY2gubXBfc3RhdGUgIT0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFKQotCQkJcmV0dXJuIC1FSU5UUjsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlIHsKIAkJdmNwdS0+cnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0hMVDsKQEAgLTI1MTksMTMgKzI1ODEsMTEgQEAKIAl1bnNpZ25lZCBsb25nIG5yLCBhMCwgYTEsIGEyLCBhMywgcmV0OwogCWludCByID0gMTsKIAotCWt2bV94ODZfb3BzLT5jYWNoZV9yZWdzKHZjcHUpOwotCi0JbnIgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF07Ci0JYTAgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF07Ci0JYTEgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07Ci0JYTIgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF07Ci0JYTMgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTSV07CisJbnIgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKKwlhMCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQlgpOworCWExID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCk7CisJYTIgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRYKTsKKwlhMyA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SU0kpOwogCiAJS1ZNVFJBQ0VfMUQoVk1NQ0FMTCwgdmNwdSwgKHUzMiluciwgaGFuZGxlcik7CiAKQEAgLTI1NDgsOCArMjYwOCw3IEBACiAJCXJldCA9IC1LVk1fRU5PU1lTOwogCQlicmVhazsKIAl9Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gcmV0OwotCWt2bV94ODZfb3BzLT5kZWNhY2hlX3JlZ3ModmNwdSk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIHJldCk7CiAJKyt2Y3B1LT5zdGF0Lmh5cGVyY2FsbHM7CiAJcmV0dXJuIHI7CiB9CkBAIC0yNTU5LDYgKzI2MTgsNyBAQAogewogCWNoYXIgaW5zdHJ1Y3Rpb25bM107CiAJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyByaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7CiAKIAogCS8qCkBAIC0yNTY4LDkgKzI2MjgsOCBAQAogCSAqLwogCWt2bV9tbXVfemFwX2FsbCh2Y3B1LT5rdm0pOwogCi0Ja3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7CiAJa3ZtX3g4Nl9vcHMtPnBhdGNoX2h5cGVyY2FsbCh2Y3B1LCBpbnN0cnVjdGlvbik7Ci0JaWYgKGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKHZjcHUtPmFyY2gucmlwLCBpbnN0cnVjdGlvbiwgMywgdmNwdSkKKwlpZiAoZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQocmlwLCBpbnN0cnVjdGlvbiwgMywgdmNwdSkKIAkgICAgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0ID0gLUVGQVVMVDsKIApAQCAtMjcwMCwxMyArMjc1OSwxMiBAQAogCXUzMiBmdW5jdGlvbiwgaW5kZXg7CiAJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmUsICpiZXN0OwogCi0Ja3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7Ci0JZnVuY3Rpb24gPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF07Ci0JaW5kZXggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gMDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF0gPSAwOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSA9IDA7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdID0gMDsKKwlmdW5jdGlvbiA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOworCWluZGV4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIDApOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJYLCAwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JDWCwgMCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SRFgsIDApOwogCWJlc3QgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCB2Y3B1LT5hcmNoLmNwdWlkX25lbnQ7ICsraSkgewogCQllID0gJnZjcHUtPmFyY2guY3B1aWRfZW50cmllc1tpXTsKQEAgLTI3MjQsMTggKzI3ODIsMTcgQEAKIAkJCQliZXN0ID0gZTsKIAl9CiAJaWYgKGJlc3QpIHsKLQkJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gYmVzdC0+ZWF4OwotCQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF0gPSBiZXN0LT5lYng7Ci0JCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSA9IGJlc3QtPmVjeDsKLQkJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdID0gYmVzdC0+ZWR4OworCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgYmVzdC0+ZWF4KTsKKwkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQlgsIGJlc3QtPmVieCk7CisJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkNYLCBiZXN0LT5lY3gpOworCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JEWCwgYmVzdC0+ZWR4KTsKIAl9Ci0Ja3ZtX3g4Nl9vcHMtPmRlY2FjaGVfcmVncyh2Y3B1KTsKIAlrdm1feDg2X29wcy0+c2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAlLVk1UUkFDRV81RChDUFVJRCwgdmNwdSwgZnVuY3Rpb24sCi0JCSAgICAodTMyKXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSwKLQkJICAgICh1MzIpdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdLAotCQkgICAgKHUzMil2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF0sCi0JCSAgICAodTMyKXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRYXSwgaGFuZGxlcik7CisJCSAgICAodTMyKWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpLAorCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkJYKSwKKwkJICAgICh1MzIpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCksCisJCSAgICAodTMyKWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SRFgpLCBoYW5kbGVyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9lbXVsYXRlX2NwdWlkKTsKIApAQCAtMjc3Niw5ICsyODMzLDcgQEAKIAlpZiAoIWFwaWMgfHwgIWFwaWMtPnZhcGljX2FkZHIpCiAJCXJldHVybjsKIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlwYWdlID0gZ2ZuX3RvX3BhZ2UodmNwdS0+a3ZtLCBhcGljLT52YXBpY19hZGRyID4+IFBBR0VfU0hJRlQpOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAl2Y3B1LT5hcmNoLmFwaWMtPnZhcGljX3BhZ2UgPSBwYWdlOwogfQpAQCAtMjc5NiwyOCArMjg1MSwxMCBAQAogCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgX192Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQorc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJaW50IHI7CiAKLQlpZiAodW5saWtlbHkodmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfU0lQSV9SRUNFSVZFRCkpIHsKLQkJcHJfZGVidWcoInZjcHUgJWQgcmVjZWl2ZWQgc2lwaSB3aXRoIHZlY3RvciAjICV4XG4iLAotCQkgICAgICAgdmNwdS0+dmNwdV9pZCwgdmNwdS0+YXJjaC5zaXBpX3ZlY3Rvcik7Ci0JCWt2bV9sYXBpY19yZXNldCh2Y3B1KTsKLQkJciA9IGt2bV94ODZfb3BzLT52Y3B1X3Jlc2V0KHZjcHUpOwotCQlpZiAocikKLQkJCXJldHVybiByOwotCQl2Y3B1LT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFOwotCX0KLQotCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKLQl2YXBpY19lbnRlcih2Y3B1KTsKLQotcHJlZW1wdGVkOgotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQotCQlrdm1feDg2X29wcy0+Z3Vlc3RfZGVidWdfcHJlKHZjcHUpOwotCi1hZ2FpbjoKIAlpZiAodmNwdS0+cmVxdWVzdHMpCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9NTVVfUkVMT0FELCAmdmNwdS0+cmVxdWVzdHMpKQogCQkJa3ZtX21tdV91bmxvYWQodmNwdSk7CkBAIC0yODI5LDYgKzI4NjYsOCBAQAogCWlmICh2Y3B1LT5yZXF1ZXN0cykgewogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfTUlHUkFURV9USU1FUiwgJnZjcHUtPnJlcXVlc3RzKSkKIAkJCV9fa3ZtX21pZ3JhdGVfdGltZXJzKHZjcHUpOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfTU1VX1NZTkMsICZ2Y3B1LT5yZXF1ZXN0cykpCisJCQlrdm1fbW11X3N5bmNfcm9vdHModmNwdSk7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9UTEJfRkxVU0gsICZ2Y3B1LT5yZXF1ZXN0cykpCiAJCQlrdm1feDg2X29wcy0+dGxiX2ZsdXNoKHZjcHUpOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfUkVQT1JUX1RQUl9BQ0NFU1MsCkBAIC0yODU0LDIxICsyODkzLDE1IEBACiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0JaWYgKHZjcHUtPnJlcXVlc3RzIHx8IG5lZWRfcmVzY2hlZCgpKSB7CisJaWYgKHZjcHUtPnJlcXVlc3RzIHx8IG5lZWRfcmVzY2hlZCgpIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAkJciA9IDE7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCXByZWVtcHRfZW5hYmxlKCk7Ci0JCXIgPSAtRUlOVFI7Ci0JCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU5UUjsKLQkJKyt2Y3B1LT5zdGF0LnNpZ25hbF9leGl0czsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQorCQlrdm1feDg2X29wcy0+Z3Vlc3RfZGVidWdfcHJlKHZjcHUpOwogCiAJdmNwdS0+Z3Vlc3RfbW9kZSA9IDE7CiAJLyoKQEAgLTI5MTcsOCArMjk1MCw4IEBACiAJICogUHJvZmlsZSBLVk0gZXhpdCBSSVBzOgogCSAqLwogCWlmICh1bmxpa2VseShwcm9mX29uID09IEtWTV9QUk9GSUxJTkcpKSB7Ci0JCWt2bV94ODZfb3BzLT5jYWNoZV9yZWdzKHZjcHUpOwotCQlwcm9maWxlX2hpdChLVk1fUFJPRklMSU5HLCAodm9pZCAqKXZjcHUtPmFyY2gucmlwKTsKKwkJdW5zaWduZWQgbG9uZyByaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7CisJCXByb2ZpbGVfaGl0KEtWTV9QUk9GSUxJTkcsICh2b2lkICopcmlwKTsKIAl9CiAKIAlpZiAodmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZyAmJiBrdm1feDg2X29wcy0+ZXhjZXB0aW9uX2luamVjdGVkKHZjcHUpKQpAQCAtMjkyNywyNiArMjk2MCw2MyBAQAogCWt2bV9sYXBpY19zeW5jX2Zyb21fdmFwaWModmNwdSk7CiAKIAlyID0ga3ZtX3g4Nl9vcHMtPmhhbmRsZV9leGl0KGt2bV9ydW4sIHZjcHUpOwotCi0JaWYgKHIgPiAwKSB7Ci0JCWlmIChkbV9yZXF1ZXN0X2Zvcl9pcnFfaW5qZWN0aW9uKHZjcHUsIGt2bV9ydW4pKSB7Ci0JCQlyID0gLUVJTlRSOwotCQkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSOwotCQkJKyt2Y3B1LT5zdGF0LnJlcXVlc3RfaXJxX2V4aXRzOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKLQkJCWdvdG8gYWdhaW47Ci0JfQotCiBvdXQ6Ci0JdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKLQlpZiAociA+IDApIHsKLQkJa3ZtX3Jlc2NoZWQodmNwdSk7Ci0JCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKLQkJZ290byBwcmVlbXB0ZWQ7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgX192Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCWludCByOworCisJaWYgKHVubGlrZWx5KHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1NJUElfUkVDRUlWRUQpKSB7CisJCXByX2RlYnVnKCJ2Y3B1ICVkIHJlY2VpdmVkIHNpcGkgd2l0aCB2ZWN0b3IgIyAleFxuIiwKKwkJCSB2Y3B1LT52Y3B1X2lkLCB2Y3B1LT5hcmNoLnNpcGlfdmVjdG9yKTsKKwkJa3ZtX2xhcGljX3Jlc2V0KHZjcHUpOworCQlyID0ga3ZtX3g4Nl9vcHMtPnZjcHVfcmVzZXQodmNwdSk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfUlVOTkFCTEU7CiAJfQogCisJZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOworCXZhcGljX2VudGVyKHZjcHUpOworCisJciA9IDE7CisJd2hpbGUgKHIgPiAwKSB7CisJCWlmICh2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9SVU5OQUJMRSkKKwkJCXIgPSB2Y3B1X2VudGVyX2d1ZXN0KHZjcHUsIGt2bV9ydW4pOworCQllbHNlIHsKKwkJCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJCQlrdm1fdmNwdV9ibG9jayh2Y3B1KTsKKwkJCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9VTkhBTFQsICZ2Y3B1LT5yZXF1ZXN0cykpCisJCQkJaWYgKHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX0hBTFRFRCkKKwkJCQkJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9CisJCQkJCQkJS1ZNX01QX1NUQVRFX1JVTk5BQkxFOworCQkJaWYgKHZjcHUtPmFyY2gubXBfc3RhdGUgIT0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFKQorCQkJCXIgPSAtRUlOVFI7CisJCX0KKworCQlpZiAociA+IDApIHsKKwkJCWlmIChkbV9yZXF1ZXN0X2Zvcl9pcnFfaW5qZWN0aW9uKHZjcHUsIGt2bV9ydW4pKSB7CisJCQkJciA9IC1FSU5UUjsKKwkJCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVFI7CisJCQkJKyt2Y3B1LT5zdGF0LnJlcXVlc3RfaXJxX2V4aXRzOworCQkJfQorCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJciA9IC1FSU5UUjsKKwkJCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVFI7CisJCQkJKyt2Y3B1LT5zdGF0LnNpZ25hbF9leGl0czsKKwkJCX0KKwkJCWlmIChuZWVkX3Jlc2NoZWQoKSkgeworCQkJCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJCQkJa3ZtX3Jlc2NoZWQodmNwdSk7CisJCQkJZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOworCQkJfQorCQl9CisJfQorCisJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAlwb3N0X2t2bV9ydW5fc2F2ZSh2Y3B1LCBrdm1fcnVuKTsKIAogCXZhcGljX2V4aXQodmNwdSk7CkBAIC0yOTY2LDYgKzMwMzYsNyBAQAogCiAJaWYgKHVubGlrZWx5KHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1VOSU5JVElBTElaRUQpKSB7CiAJCWt2bV92Y3B1X2Jsb2NrKHZjcHUpOworCQljbGVhcl9iaXQoS1ZNX1JFUV9VTkhBTFQsICZ2Y3B1LT5yZXF1ZXN0cyk7CiAJCXIgPSAtRUFHQUlOOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yOTk5LDExICszMDcwLDkgQEAKIAkJfQogCX0KICNlbmRpZgotCWlmIChrdm1fcnVuLT5leGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9IWVBFUkNBTEwpIHsKLQkJa3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7Ci0JCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSA9IGt2bV9ydW4tPmh5cGVyY2FsbC5yZXQ7Ci0JCWt2bV94ODZfb3BzLT5kZWNhY2hlX3JlZ3ModmNwdSk7Ci0JfQorCWlmIChrdm1fcnVuLT5leGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9IWVBFUkNBTEwpCisJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLAorCQkJCSAgICAga3ZtX3J1bi0+aHlwZXJjYWxsLnJldCk7CiAKIAlyID0gX192Y3B1X3J1bih2Y3B1LCBrdm1fcnVuKTsKIApAQCAtMzAxOSwyOCArMzA4OCwyNiBAQAogewogCXZjcHVfbG9hZCh2Y3B1KTsKIAotCWt2bV94ODZfb3BzLT5jYWNoZV9yZWdzKHZjcHUpOwotCi0JcmVncy0+cmF4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCXJlZ3MtPnJieCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJYXTsKLQlyZWdzLT5yY3ggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07Ci0JcmVncy0+cmR4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdOwotCXJlZ3MtPnJzaSA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNJXTsKLQlyZWdzLT5yZGkgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JESV07Ci0JcmVncy0+cnNwID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdOwotCXJlZ3MtPnJicCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJQXTsKKwlyZWdzLT5yYXggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKKwlyZWdzLT5yYnggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkJYKTsKKwlyZWdzLT5yY3ggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKTsKKwlyZWdzLT5yZHggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRYKTsKKwlyZWdzLT5yc2kgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUlNJKTsKKwlyZWdzLT5yZGkgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRJKTsKKwlyZWdzLT5yc3AgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUlNQKTsKKwlyZWdzLT5yYnAgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkJQKTsKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JcmVncy0+cjggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1I4XTsKLQlyZWdzLT5yOSA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjldOwotCXJlZ3MtPnIxMCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjEwXTsKLQlyZWdzLT5yMTEgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1IxMV07Ci0JcmVncy0+cjEyID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SMTJdOwotCXJlZ3MtPnIxMyA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjEzXTsKLQlyZWdzLT5yMTQgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1IxNF07Ci0JcmVncy0+cjE1ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SMTVdOworCXJlZ3MtPnI4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1I4KTsKKwlyZWdzLT5yOSA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SOSk7CisJcmVncy0+cjEwID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1IxMCk7CisJcmVncy0+cjExID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1IxMSk7CisJcmVncy0+cjEyID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1IxMik7CisJcmVncy0+cjEzID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1IxMyk7CisJcmVncy0+cjE0ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1IxNCk7CisJcmVncy0+cjE1ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1IxNSk7CiAjZW5kaWYKIAotCXJlZ3MtPnJpcCA9IHZjcHUtPmFyY2gucmlwOworCXJlZ3MtPnJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAlyZWdzLT5yZmxhZ3MgPSBrdm1feDg2X29wcy0+Z2V0X3JmbGFncyh2Y3B1KTsKIAogCS8qCkBAIC0zMDU4LDI5ICszMTI1LDI5IEBACiB7CiAJdmNwdV9sb2FkKHZjcHUpOwogCi0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gcmVncy0+cmF4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJYXSA9IHJlZ3MtPnJieDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF0gPSByZWdzLT5yY3g7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdID0gcmVncy0+cmR4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNJXSA9IHJlZ3MtPnJzaTsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JESV0gPSByZWdzLT5yZGk7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdID0gcmVncy0+cnNwOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJQXSA9IHJlZ3MtPnJicDsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgcmVncy0+cmF4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCWCwgcmVncy0+cmJ4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JDWCwgcmVncy0+cmN4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JEWCwgcmVncy0+cmR4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JTSSwgcmVncy0+cnNpKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JESSwgcmVncy0+cmRpKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JTUCwgcmVncy0+cnNwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCUCwgcmVncy0+cmJwKTsKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SOF0gPSByZWdzLT5yODsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1I5XSA9IHJlZ3MtPnI5OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjEwXSA9IHJlZ3MtPnIxMDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1IxMV0gPSByZWdzLT5yMTE7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SMTJdID0gcmVncy0+cjEyOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjEzXSA9IHJlZ3MtPnIxMzsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1IxNF0gPSByZWdzLT5yMTQ7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SMTVdID0gcmVncy0+cjE1OworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUjgsIHJlZ3MtPnI4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1I5LCByZWdzLT5yOSk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SMTAsIHJlZ3MtPnIxMCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SMTEsIHJlZ3MtPnIxMSk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SMTIsIHJlZ3MtPnIxMik7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SMTMsIHJlZ3MtPnIxMyk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SMTQsIHJlZ3MtPnIxNCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SMTUsIHJlZ3MtPnIxNSk7CisKICNlbmRpZgogCi0JdmNwdS0+YXJjaC5yaXAgPSByZWdzLT5yaXA7CisJa3ZtX3JpcF93cml0ZSh2Y3B1LCByZWdzLT5yaXApOwogCWt2bV94ODZfb3BzLT5zZXRfcmZsYWdzKHZjcHUsIHJlZ3MtPnJmbGFncyk7CiAKLQlrdm1feDg2X29wcy0+ZGVjYWNoZV9yZWdzKHZjcHUpOwogCiAJdmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZyA9IGZhbHNlOwogCkBAIC0zMjk0LDExICszMzYxLDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQga3ZtX2xvYWRfcmVhbG1vZGVfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzZWxlY3RvciwgaW50IHNlZykKK3sKKwlzdHJ1Y3Qga3ZtX3NlZ21lbnQgc2VndmFyID0geworCQkuYmFzZSA9IHNlbGVjdG9yIDw8IDQsCisJCS5saW1pdCA9IDB4ZmZmZiwKKwkJLnNlbGVjdG9yID0gc2VsZWN0b3IsCisJCS50eXBlID0gMywKKwkJLnByZXNlbnQgPSAxLAorCQkuZHBsID0gMywKKwkJLmRiID0gMCwKKwkJLnMgPSAxLAorCQkubCA9IDAsCisJCS5nID0gMCwKKwkJLmF2bCA9IDAsCisJCS51bnVzYWJsZSA9IDAsCisJfTsKKwlrdm1feDg2X29wcy0+c2V0X3NlZ21lbnQodmNwdSwgJnNlZ3Zhciwgc2VnKTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzZWxlY3RvciwKIAkJCQlpbnQgdHlwZV9iaXRzLCBpbnQgc2VnKQogewogCXN0cnVjdCBrdm1fc2VnbWVudCBrdm1fc2VnOwogCisJaWYgKCEodmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1BFKSkKKwkJcmV0dXJuIGt2bV9sb2FkX3JlYWxtb2RlX3NlZ21lbnQodmNwdSwgc2VsZWN0b3IsIHNlZyk7CiAJaWYgKGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yX3RvX2t2bV9kZXNjdCh2Y3B1LCBzZWxlY3RvciwgJmt2bV9zZWcpKQogCQlyZXR1cm4gMTsKIAlrdm1fc2VnLnR5cGUgfD0gdHlwZV9iaXRzOwpAQCAtMzMxNiwxNyArMzQwNSwxNiBAQAogCQkJCXN0cnVjdCB0c3Nfc2VnbWVudF8zMiAqdHNzKQogewogCXRzcy0+Y3IzID0gdmNwdS0+YXJjaC5jcjM7Ci0JdHNzLT5laXAgPSB2Y3B1LT5hcmNoLnJpcDsKKwl0c3MtPmVpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAl0c3MtPmVmbGFncyA9IGt2bV94ODZfb3BzLT5nZXRfcmZsYWdzKHZjcHUpOwotCXRzcy0+ZWF4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCXRzcy0+ZWN4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQ1hdOwotCXRzcy0+ZWR4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdOwotCXRzcy0+ZWJ4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdOwotCXRzcy0+ZXNwID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdOwotCXRzcy0+ZWJwID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlBdOwotCXRzcy0+ZXNpID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU0ldOwotCXRzcy0+ZWRpID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SREldOwotCisJdHNzLT5lYXggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKKwl0c3MtPmVjeCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQ1gpOworCXRzcy0+ZWR4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JEWCk7CisJdHNzLT5lYnggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkJYKTsKKwl0c3MtPmVzcCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SU1ApOworCXRzcy0+ZWJwID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JCUCk7CisJdHNzLT5lc2kgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUlNJKTsKKwl0c3MtPmVkaSA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SREkpOwogCXRzcy0+ZXMgPSBnZXRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCBWQ1BVX1NSRUdfRVMpOwogCXRzcy0+Y3MgPSBnZXRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCBWQ1BVX1NSRUdfQ1MpOwogCXRzcy0+c3MgPSBnZXRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCBWQ1BVX1NSRUdfU1MpOwpAQCAtMzM0MiwxNyArMzQzMCwxNyBAQAogewogCWt2bV9zZXRfY3IzKHZjcHUsIHRzcy0+Y3IzKTsKIAotCXZjcHUtPmFyY2gucmlwID0gdHNzLT5laXA7CisJa3ZtX3JpcF93cml0ZSh2Y3B1LCB0c3MtPmVpcCk7CiAJa3ZtX3g4Nl9vcHMtPnNldF9yZmxhZ3ModmNwdSwgdHNzLT5lZmxhZ3MgfCAyKTsKIAotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSA9IHRzcy0+ZWF4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSA9IHRzcy0+ZWN4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRYXSA9IHRzcy0+ZWR4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJYXSA9IHRzcy0+ZWJ4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHRzcy0+ZXNwOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJQXSA9IHRzcy0+ZWJwOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNJXSA9IHRzcy0+ZXNpOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRJXSA9IHRzcy0+ZWRpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLCB0c3MtPmVheCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQ1gsIHRzcy0+ZWN4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JEWCwgdHNzLT5lZHgpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJYLCB0c3MtPmVieCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU1AsIHRzcy0+ZXNwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCUCwgdHNzLT5lYnApOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUlNJLCB0c3MtPmVzaSk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SREksIHRzcy0+ZWRpKTsKIAogCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5sZHRfc2VsZWN0b3IsIDAsIFZDUFVfU1JFR19MRFRSKSkKIAkJcmV0dXJuIDE7CkBAIC0zMzgwLDE2ICszNDY4LDE2IEBACiBzdGF0aWMgdm9pZCBzYXZlX3N0YXRlX3RvX3RzczE2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQlzdHJ1Y3QgdHNzX3NlZ21lbnRfMTYgKnRzcykKIHsKLQl0c3MtPmlwID0gdmNwdS0+YXJjaC5yaXA7CisJdHNzLT5pcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAl0c3MtPmZsYWcgPSBrdm1feDg2X29wcy0+Z2V0X3JmbGFncyh2Y3B1KTsKLQl0c3MtPmF4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCXRzcy0+Y3ggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07Ci0JdHNzLT5keCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRYXTsKLQl0c3MtPmJ4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdOwotCXRzcy0+c3AgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF07Ci0JdHNzLT5icCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJQXTsKLQl0c3MtPnNpID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU0ldOwotCXRzcy0+ZGkgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JESV07CisJdHNzLT5heCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOworCXRzcy0+Y3ggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKTsKKwl0c3MtPmR4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JEWCk7CisJdHNzLT5ieCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQlgpOworCXRzcy0+c3AgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUlNQKTsKKwl0c3MtPmJwID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JCUCk7CisJdHNzLT5zaSA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SU0kpOworCXRzcy0+ZGkgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRJKTsKIAogCXRzcy0+ZXMgPSBnZXRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCBWQ1BVX1NSRUdfRVMpOwogCXRzcy0+Y3MgPSBnZXRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCBWQ1BVX1NSRUdfQ1MpOwpAQCAtMzQwMiwxNiArMzQ5MCwxNiBAQAogc3RhdGljIGludCBsb2FkX3N0YXRlX2Zyb21fdHNzMTYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSBzdHJ1Y3QgdHNzX3NlZ21lbnRfMTYgKnRzcykKIHsKLQl2Y3B1LT5hcmNoLnJpcCA9IHRzcy0+aXA7CisJa3ZtX3JpcF93cml0ZSh2Y3B1LCB0c3MtPmlwKTsKIAlrdm1feDg2X29wcy0+c2V0X3JmbGFncyh2Y3B1LCB0c3MtPmZsYWcgfCAyKTsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSB0c3MtPmF4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSA9IHRzcy0+Y3g7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdID0gdHNzLT5keDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF0gPSB0c3MtPmJ4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHRzcy0+c3A7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlBdID0gdHNzLT5icDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTSV0gPSB0c3MtPnNpOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRJXSA9IHRzcy0+ZGk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIHRzcy0+YXgpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkNYLCB0c3MtPmN4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JEWCwgdHNzLT5keCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQlgsIHRzcy0+YngpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUlNQLCB0c3MtPnNwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCUCwgdHNzLT5icCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU0ksIHRzcy0+c2kpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkRJLCB0c3MtPmRpKTsKIAogCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5sZHQsIDAsIFZDUFVfU1JFR19MRFRSKSkKIAkJcmV0dXJuIDE7CkBAIC0zNTM0LDcgKzM2MjIsNiBAQAogCX0KIAogCWt2bV94ODZfb3BzLT5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwotCWt2bV94ODZfb3BzLT5jYWNoZV9yZWdzKHZjcHUpOwogCiAJaWYgKG5zZWdfZGVzYy50eXBlICYgOCkKIAkJcmV0ID0ga3ZtX3Rhc2tfc3dpdGNoXzMyKHZjcHUsIHRzc19zZWxlY3Rvciwgb2xkX3Rzc19iYXNlLApAQCAtMzU1OSw3ICszNjQ2LDYgQEAKIAl0cl9zZWcudHlwZSA9IDExOwogCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAmdHJfc2VnLCBWQ1BVX1NSRUdfVFIpOwogb3V0OgotCWt2bV94ODZfb3BzLT5kZWNhY2hlX3JlZ3ModmNwdSk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV90YXNrX3N3aXRjaCk7CkBAIC0zNjIyLDYgKzM3MDgsNyBAQAogCQkJcHJfZGVidWcoIlNldCBiYWNrIHBlbmRpbmcgaXJxICVkXG4iLAogCQkJCSBwZW5kaW5nX3ZlYyk7CiAJCX0KKwkJa3ZtX3BpY19jbGVhcl9pc3JfYWNrKHZjcHUtPmt2bSk7CiAJfQogCiAJa3ZtX3NldF9zZWdtZW50KHZjcHUsICZzcmVncy0+Y3MsIFZDUFVfU1JFR19DUyk7CkBAIC0zNjM0LDYgKzM3MjEsMTIgQEAKIAlrdm1fc2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT50ciwgVkNQVV9TUkVHX1RSKTsKIAlrdm1fc2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5sZHQsIFZDUFVfU1JFR19MRFRSKTsKIAorCS8qIE9sZGVyIHVzZXJzcGFjZSB3b24ndCB1bmhhbHQgdGhlIHZjcHUgb24gcmVzZXQuICovCisJaWYgKHZjcHUtPnZjcHVfaWQgPT0gMCAmJiBrdm1fcmlwX3JlYWQodmNwdSkgPT0gMHhmZmYwICYmCisJICAgIHNyZWdzLT5jcy5zZWxlY3RvciA9PSAweGYwMDAgJiYgc3JlZ3MtPmNzLmJhc2UgPT0gMHhmZmZmMDAwMCAmJgorCSAgICAhKHZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkpCisJCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfUlVOTkFCTEU7CisKIAl2Y3B1X3B1dCh2Y3B1KTsKIAogCXJldHVybiAwOwpAQCAtMzkxOCw2ICs0MDExLDcgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlJTklUX0xJU1RfSEVBRCgma3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMpOworCUlOSVRfTElTVF9IRUFEKCZrdm0tPmFyY2guYXNzaWduZWRfZGV2X2hlYWQpOwogCiAJcmV0dXJuIGt2bTsKIH0KQEAgLTM5NTAsNiArNDA0NCw4IEBACiAKIHZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pCiB7CisJa3ZtX2lvbW11X3VubWFwX2d1ZXN0KGt2bSk7CisJa3ZtX2ZyZWVfYWxsX2Fzc2lnbmVkX2RldmljZXMoa3ZtKTsKIAlrdm1fZnJlZV9waXQoa3ZtKTsKIAlrZnJlZShrdm0tPmFyY2gudnBpYyk7CiAJa2ZyZWUoa3ZtLT5hcmNoLnZpb2FwaWMpOwpAQCAtMzk4MSw3ICs0MDc3LDcgQEAKIAkJCXVzZXJzcGFjZV9hZGRyID0gZG9fbW1hcChOVUxMLCAwLAogCQkJCQkJIG5wYWdlcyAqIFBBR0VfU0laRSwKIAkJCQkJCSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAotCQkJCQkJIE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTLAorCQkJCQkJIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywKIAkJCQkJCSAwKTsKIAkJCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0YmU3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIEFSQ0hfWDg2X0tWTV9YODZfSAorI2RlZmluZSBBUkNIX1g4Nl9LVk1fWDg2X0gKKworI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fY2xlYXJfZXhjZXB0aW9uX3F1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nID0gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcXVldWVfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yKQoreworCXZjcHUtPmFyY2guaW50ZXJydXB0LnBlbmRpbmcgPSB0cnVlOworCXZjcHUtPmFyY2guaW50ZXJydXB0Lm5yID0gdmVjdG9yOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2NsZWFyX2ludGVycnVwdF9xdWV1ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZyA9IGZhbHNlOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODZfZW11bGF0ZS5jIGIvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMKaW5kZXggZjJmOTA0Ni4uZWEwNTExNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMKKysrIGIvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgRFBSSU5URihfZiwgX2EgLi4uKSBwcmludGYoX2YgLCAjIyBfYSkKICNlbHNlCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgogI2RlZmluZSBEUFJJTlRGKHguLi4pIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC00NiwyNSArNDcsMjYgQEAKICNkZWZpbmUgSW1wbGljaXRPcHMgKDE8PDEpCS8qIEltcGxpY2l0IGluIG9wY29kZS4gTm8gZ2VuZXJpYyBkZWNvZGUuICovCiAjZGVmaW5lIERzdFJlZyAgICAgICgyPDwxKQkvKiBSZWdpc3RlciBvcGVyYW5kLiAqLwogI2RlZmluZSBEc3RNZW0gICAgICAoMzw8MSkJLyogTWVtb3J5IG9wZXJhbmQuICovCi0jZGVmaW5lIERzdE1hc2sgICAgICgzPDwxKQorI2RlZmluZSBEc3RBY2MgICAgICAoNDw8MSkgICAgICAvKiBEZXN0aW5hdGlvbiBBY2N1bXVsYXRvciAqLworI2RlZmluZSBEc3RNYXNrICAgICAoNzw8MSkKIC8qIFNvdXJjZSBvcGVyYW5kIHR5cGUuICovCi0jZGVmaW5lIFNyY05vbmUgICAgICgwPDwzKQkvKiBObyBzb3VyY2Ugb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjSW1wbGljaXQgKDA8PDMpCS8qIFNvdXJjZSBvcGVyYW5kIGlzIGltcGxpY2l0IGluIHRoZSBvcGNvZGUuICovCi0jZGVmaW5lIFNyY1JlZyAgICAgICgxPDwzKQkvKiBSZWdpc3RlciBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNNZW0gICAgICAoMjw8MykJLyogTWVtb3J5IG9wZXJhbmQuICovCi0jZGVmaW5lIFNyY01lbTE2ICAgICgzPDwzKQkvKiBNZW1vcnkgb3BlcmFuZCAoMTYtYml0KS4gKi8KLSNkZWZpbmUgU3JjTWVtMzIgICAgKDQ8PDMpCS8qIE1lbW9yeSBvcGVyYW5kICgzMi1iaXQpLiAqLwotI2RlZmluZSBTcmNJbW0gICAgICAoNTw8MykJLyogSW1tZWRpYXRlIG9wZXJhbmQuICovCi0jZGVmaW5lIFNyY0ltbUJ5dGUgICg2PDwzKQkvKiA4LWJpdCBzaWduLWV4dGVuZGVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNNYXNrICAgICAoNzw8MykKKyNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDQpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbXBsaWNpdCAoMDw8NCkJLyogU291cmNlIG9wZXJhbmQgaXMgaW1wbGljaXQgaW4gdGhlIG9wY29kZS4gKi8KKyNkZWZpbmUgU3JjUmVnICAgICAgKDE8PDQpCS8qIFJlZ2lzdGVyIG9wZXJhbmQuICovCisjZGVmaW5lIFNyY01lbSAgICAgICgyPDw0KQkvKiBNZW1vcnkgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjTWVtMTYgICAgKDM8PDQpCS8qIE1lbW9yeSBvcGVyYW5kICgxNi1iaXQpLiAqLworI2RlZmluZSBTcmNNZW0zMiAgICAoNDw8NCkJLyogTWVtb3J5IG9wZXJhbmQgKDMyLWJpdCkuICovCisjZGVmaW5lIFNyY0ltbSAgICAgICg1PDw0KQkvKiBJbW1lZGlhdGUgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjSW1tQnl0ZSAgKDY8PDQpCS8qIDgtYml0IHNpZ24tZXh0ZW5kZWQgaW1tZWRpYXRlIG9wZXJhbmQuICovCisjZGVmaW5lIFNyY01hc2sgICAgICg3PDw0KQogLyogR2VuZXJpYyBNb2RSTSBkZWNvZGUuICovCi0jZGVmaW5lIE1vZFJNICAgICAgICgxPDw2KQorI2RlZmluZSBNb2RSTSAgICAgICAoMTw8NykKIC8qIERlc3RpbmF0aW9uIGlzIG9ubHkgd3JpdHRlbjsgbmV2ZXIgcmVhZC4gKi8KLSNkZWZpbmUgTW92ICAgICAgICAgKDE8PDcpCi0jZGVmaW5lIEJpdE9wICAgICAgICgxPDw4KQotI2RlZmluZSBNZW1BYnMgICAgICAoMTw8OSkgICAgICAvKiBNZW1vcnkgb3BlcmFuZCBpcyBhYnNvbHV0ZSBkaXNwbGFjZW1lbnQgKi8KLSNkZWZpbmUgU3RyaW5nICAgICAgKDE8PDEwKSAgICAgLyogU3RyaW5nIGluc3RydWN0aW9uIChyZXAgY2FwYWJsZSkgKi8KLSNkZWZpbmUgU3RhY2sgICAgICAgKDE8PDExKSAgICAgLyogU3RhY2sgaW5zdHJ1Y3Rpb24gKHB1c2gvcG9wKSAqLworI2RlZmluZSBNb3YgICAgICAgICAoMTw8OCkKKyNkZWZpbmUgQml0T3AgICAgICAgKDE8PDkpCisjZGVmaW5lIE1lbUFicyAgICAgICgxPDwxMCkgICAgICAvKiBNZW1vcnkgb3BlcmFuZCBpcyBhYnNvbHV0ZSBkaXNwbGFjZW1lbnQgKi8KKyNkZWZpbmUgU3RyaW5nICAgICAgKDE8PDEyKSAgICAgLyogU3RyaW5nIGluc3RydWN0aW9uIChyZXAgY2FwYWJsZSkgKi8KKyNkZWZpbmUgU3RhY2sgICAgICAgKDE8PDEzKSAgICAgLyogU3RhY2sgaW5zdHJ1Y3Rpb24gKHB1c2gvcG9wKSAqLwogI2RlZmluZSBHcm91cCAgICAgICAoMTw8MTQpICAgICAvKiBCaXRzIDM6NSBvZiBtb2RybSBieXRlIGV4dGVuZCBvcGNvZGUgKi8KICNkZWZpbmUgR3JvdXBEdWFsICAgKDE8PDE1KSAgICAgLyogQWx0ZXJuYXRlIGRlY29kaW5nIG9mIG1vZCA9PSAzICovCiAjZGVmaW5lIEdyb3VwTWFzayAgIDB4ZmYgICAgICAgIC8qIEdyb3VwIG51bWJlciBzdG9yZWQgaW4gYml0cyAwOjcgKi8KQEAgLTk0LDcgKzk2LDcgQEAKIAkvKiAweDIwIC0gMHgyNyAqLwogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKIAlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCi0JU3JjSW1tQnl0ZSwgU3JjSW1tLCAwLCAwLAorCURzdEFjYyB8IFNyY0ltbUJ5dGUsIERzdEFjYyB8IFNyY0ltbSwgMCwgMCwKIAkvKiAweDI4IC0gMHgyRiAqLwogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKIAlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCkBAIC0xMDYsNyArMTA4LDggQEAKIAkvKiAweDM4IC0gMHgzRiAqLwogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKIAlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCi0JMCwgMCwgMCwgMCwKKwlCeXRlT3AgfCBEc3RBY2MgfCBTcmNJbW0sIERzdEFjYyB8IFNyY0ltbSwKKwkwLCAwLAogCS8qIDB4NDAgLSAweDQ3ICovCiAJRHN0UmVnLCBEc3RSZWcsIERzdFJlZywgRHN0UmVnLCBEc3RSZWcsIERzdFJlZywgRHN0UmVnLCBEc3RSZWcsCiAJLyogMHg0OCAtIDB4NEYgKi8KQEAgLTE1Myw5ICsxNTYsMTYgQEAKIAkwLCAwLCBCeXRlT3AgfCBJbXBsaWNpdE9wcyB8IE1vdiB8IFN0cmluZywgSW1wbGljaXRPcHMgfCBNb3YgfCBTdHJpbmcsCiAJQnl0ZU9wIHwgSW1wbGljaXRPcHMgfCBNb3YgfCBTdHJpbmcsIEltcGxpY2l0T3BzIHwgTW92IHwgU3RyaW5nLAogCUJ5dGVPcCB8IEltcGxpY2l0T3BzIHwgU3RyaW5nLCBJbXBsaWNpdE9wcyB8IFN0cmluZywKLQkvKiAweEIwIC0gMHhCRiAqLwotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JRHN0UmVnIHwgU3JjSW1tIHwgTW92LCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCS8qIDB4QjAgLSAweEI3ICovCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCisJLyogMHhCOCAtIDB4QkYgKi8KKwlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKIAkvKiAweEMwIC0gMHhDNyAqLwogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sCiAJMCwgSW1wbGljaXRPcHMgfCBTdGFjaywgMCwgMCwKQEAgLTE2OSwxNyArMTc5LDIwIEBACiAJLyogMHhEOCAtIDB4REYgKi8KIAkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogCS8qIDB4RTAgLSAweEU3ICovCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLAorCVNyY05vbmUgfCBCeXRlT3AgfCBJbXBsaWNpdE9wcywgU3JjTm9uZSB8IEltcGxpY2l0T3BzLAorCVNyY05vbmUgfCBCeXRlT3AgfCBJbXBsaWNpdE9wcywgU3JjTm9uZSB8IEltcGxpY2l0T3BzLAogCS8qIDB4RTggLSAweEVGICovCiAJSW1wbGljaXRPcHMgfCBTdGFjaywgU3JjSW1tIHwgSW1wbGljaXRPcHMsCiAJSW1wbGljaXRPcHMsIFNyY0ltbUJ5dGUgfCBJbXBsaWNpdE9wcywKLQkwLCAwLCAwLCAwLAorCVNyY05vbmUgfCBCeXRlT3AgfCBJbXBsaWNpdE9wcywgU3JjTm9uZSB8IEltcGxpY2l0T3BzLAorCVNyY05vbmUgfCBCeXRlT3AgfCBJbXBsaWNpdE9wcywgU3JjTm9uZSB8IEltcGxpY2l0T3BzLAogCS8qIDB4RjAgLSAweEY3ICovCiAJMCwgMCwgMCwgMCwKIAlJbXBsaWNpdE9wcywgSW1wbGljaXRPcHMsIEdyb3VwIHwgR3JvdXAzX0J5dGUsIEdyb3VwIHwgR3JvdXAzLAogCS8qIDB4RjggLSAweEZGICovCiAJSW1wbGljaXRPcHMsIDAsIEltcGxpY2l0T3BzLCBJbXBsaWNpdE9wcywKLQkwLCAwLCBHcm91cCB8IEdyb3VwNCwgR3JvdXAgfCBHcm91cDUsCisJSW1wbGljaXRPcHMsIEltcGxpY2l0T3BzLCBHcm91cCB8IEdyb3VwNCwgR3JvdXAgfCBHcm91cDUsCiB9OwogCiBzdGF0aWMgdTE2IHR3b2J5dGVfdGFibGVbMjU2XSA9IHsKQEAgLTI2OCwxNSArMjgxLDE2IEBACiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sCiAJMCwgMCwgMCwgMCwKIAlbR3JvdXAzKjhdID0KLQlEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSB8IFNyY0ltbSwgMCwKLQlEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sIEJ5dGVPcCB8IERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwKKwlEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgMCwKKwlEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sIERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwKIAkwLCAwLCAwLCAwLAogCVtHcm91cDQqOF0gPQogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLAogCTAsIDAsIDAsIDAsIDAsIDAsCiAJW0dyb3VwNSo4XSA9Ci0JRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sIDAsIDAsCi0JU3JjTWVtIHwgTW9kUk0sIDAsIFNyY01lbSB8IE1vZFJNIHwgU3RhY2ssIDAsCisJRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sCisJU3JjTWVtIHwgTW9kUk0gfCBTdGFjaywgMCwKKwlTcmNNZW0gfCBNb2RSTSB8IFN0YWNrLCAwLCBTcmNNZW0gfCBNb2RSTSB8IFN0YWNrLCAwLAogCVtHcm91cDcqOF0gPQogCTAsIDAsIE1vZFJNIHwgU3JjTWVtLCBNb2RSTSB8IFNyY01lbSwKIAlTcmNOb25lIHwgTW9kUk0gfCBEc3RNZW0gfCBNb3YsIDAsCkBAIC04MzksNyArODUzLDcgQEAKIAkvKiBTaGFkb3cgY29weSBvZiByZWdpc3RlciBzdGF0ZS4gQ29tbWl0dGVkIG9uIHN1Y2Nlc3NmdWwgZW11bGF0aW9uLiAqLwogCiAJbWVtc2V0KGMsIDAsIHNpemVvZihzdHJ1Y3QgZGVjb2RlX2NhY2hlKSk7Ci0JYy0+ZWlwID0gY3R4dC0+dmNwdS0+YXJjaC5yaXA7CisJYy0+ZWlwID0ga3ZtX3JpcF9yZWFkKGN0eHQtPnZjcHUpOwogCWN0eHQtPmNzX2Jhc2UgPSBzZWdfYmFzZShjdHh0LCBWQ1BVX1NSRUdfQ1MpOwogCW1lbWNweShjLT5yZWdzLCBjdHh0LT52Y3B1LT5hcmNoLnJlZ3MsIHNpemVvZiBjLT5yZWdzKTsKIApAQCAtMTA0OCw2ICsxMDYyLDIzIEBACiAJCX0KIAkJYy0+ZHN0LnR5cGUgPSBPUF9NRU07CiAJCWJyZWFrOworCWNhc2UgRHN0QWNjOgorCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKKwkJYy0+ZHN0LmJ5dGVzID0gYy0+b3BfYnl0ZXM7CisJCWMtPmRzdC5wdHIgPSAmYy0+cmVnc1tWQ1BVX1JFR1NfUkFYXTsKKwkJc3dpdGNoIChjLT5vcF9ieXRlcykgeworCQkJY2FzZSAxOgorCQkJCWMtPmRzdC52YWwgPSAqKHU4ICopYy0+ZHN0LnB0cjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQljLT5kc3QudmFsID0gKih1MTYgKiljLT5kc3QucHRyOworCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCWMtPmRzdC52YWwgPSAqKHUzMiAqKWMtPmRzdC5wdHI7CisJCQkJYnJlYWs7CisJCX0KKwkJYy0+ZHN0Lm9yaWdfdmFsID0gYy0+ZHN0LnZhbDsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKGMtPnJpcF9yZWxhdGl2ZSkKQEAgLTExNTEsNiArMTE4MiwxNCBAQAogCWNhc2UgMToJLyogZGVjICovCiAJCWVtdWxhdGVfMW9wKCJkZWMiLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CiAJCWJyZWFrOworCWNhc2UgMjogLyogY2FsbCBuZWFyIGFicyAqLyB7CisJCWxvbmcgaW50IG9sZF9laXA7CisJCW9sZF9laXAgPSBjLT5laXA7CisJCWMtPmVpcCA9IGMtPnNyYy52YWw7CisJCWMtPnNyYy52YWwgPSBvbGRfZWlwOworCQllbXVsYXRlX3B1c2goY3R4dCk7CisJCWJyZWFrOworCX0KIAljYXNlIDQ6IC8qIGptcCBhYnMgKi8KIAkJYy0+ZWlwID0gYy0+c3JjLnZhbDsKIAkJYnJlYWs7CkBAIC0xMjUxLDYgKzEyOTAsOCBAQAogCXU2NCBtc3JfZGF0YTsKIAl1bnNpZ25lZCBsb25nIHNhdmVkX2VpcCA9IDA7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJdW5zaWduZWQgaW50IHBvcnQ7CisJaW50IGlvX2Rpcl9pbjsKIAlpbnQgcmMgPSAwOwogCiAJLyogU2hhZG93IGNvcHkgb2YgcmVnaXN0ZXIgc3RhdGUuIENvbW1pdHRlZCBvbiBzdWNjZXNzZnVsIGVtdWxhdGlvbi4KQEAgLTEyNjcsNyArMTMwOCw3IEBACiAJaWYgKGMtPnJlcF9wcmVmaXggJiYgKGMtPmQgJiBTdHJpbmcpKSB7CiAJCS8qIEFsbCBSRVAgcHJlZml4ZXMgaGF2ZSB0aGUgc2FtZSBmaXJzdCB0ZXJtaW5hdGlvbiBjb25kaXRpb24gKi8KIAkJaWYgKGMtPnJlZ3NbVkNQVV9SRUdTX1JDWF0gPT0gMCkgewotCQkJY3R4dC0+dmNwdS0+YXJjaC5yaXAgPSBjLT5laXA7CisJCQlrdm1fcmlwX3dyaXRlKGN0eHQtPnZjcHUsIGMtPmVpcCk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJLyogVGhlIHNlY29uZCB0ZXJtaW5hdGlvbiBjb25kaXRpb24gb25seSBhcHBsaWVzIGZvciBSRVBFCkBAIC0xMjgxLDE3ICsxMzIyLDE3IEBACiAJCQkJKGMtPmIgPT0gMHhhZSkgfHwgKGMtPmIgPT0gMHhhZikpIHsKIAkJCWlmICgoYy0+cmVwX3ByZWZpeCA9PSBSRVBFX1BSRUZJWCkgJiYKIAkJCQkoKGN0eHQtPmVmbGFncyAmIEVGTEdfWkYpID09IDApKSB7Ci0JCQkJCWN0eHQtPnZjcHUtPmFyY2gucmlwID0gYy0+ZWlwOworCQkJCQlrdm1fcmlwX3dyaXRlKGN0eHQtPnZjcHUsIGMtPmVpcCk7CiAJCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAkJCWlmICgoYy0+cmVwX3ByZWZpeCA9PSBSRVBORV9QUkVGSVgpICYmCiAJCQkJKChjdHh0LT5lZmxhZ3MgJiBFRkxHX1pGKSA9PSBFRkxHX1pGKSkgewotCQkJCWN0eHQtPnZjcHUtPmFyY2gucmlwID0gYy0+ZWlwOworCQkJCWt2bV9yaXBfd3JpdGUoY3R4dC0+dmNwdSwgYy0+ZWlwKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCX0KIAkJYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXS0tOwotCQljLT5laXAgPSBjdHh0LT52Y3B1LT5hcmNoLnJpcDsKKwkJYy0+ZWlwID0ga3ZtX3JpcF9yZWFkKGN0eHQtPnZjcHUpOwogCX0KIAogCWlmIChjLT5zcmMudHlwZSA9PSBPUF9NRU0pIHsKQEAgLTEzNTEsMjcgKzEzOTIsMTAgQEAKIAkgICAgICBzYmI6CQkvKiBzYmIgKi8KIAkJZW11bGF0ZV8yb3BfU3JjVigic2JiIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CiAJCWJyZWFrOwotCWNhc2UgMHgyMCAuLi4gMHgyMzoKKwljYXNlIDB4MjAgLi4uIDB4MjU6CiAJICAgICAgYW5kOgkJLyogYW5kICovCiAJCWVtdWxhdGVfMm9wX1NyY1YoImFuZCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwogCQlicmVhazsKLQljYXNlIDB4MjQ6ICAgICAgICAgICAgICAvKiBhbmQgYWwgaW1tOCAqLwotCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKLQkJYy0+ZHN0LnB0ciA9ICZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCQljLT5kc3QudmFsID0gKih1OCAqKWMtPmRzdC5wdHI7Ci0JCWMtPmRzdC5ieXRlcyA9IDE7Ci0JCWMtPmRzdC5vcmlnX3ZhbCA9IGMtPmRzdC52YWw7Ci0JCWdvdG8gYW5kOwotCWNhc2UgMHgyNTogICAgICAgICAgICAgIC8qIGFuZCBheCBpbW0xNiwgb3IgZWF4IGltbTMyICovCi0JCWMtPmRzdC50eXBlID0gT1BfUkVHOwotCQljLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKLQkJYy0+ZHN0LnB0ciA9ICZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCQlpZiAoYy0+b3BfYnl0ZXMgPT0gMikKLQkJCWMtPmRzdC52YWwgPSAqKHUxNiAqKWMtPmRzdC5wdHI7Ci0JCWVsc2UKLQkJCWMtPmRzdC52YWwgPSAqKHUzMiAqKWMtPmRzdC5wdHI7Ci0JCWMtPmRzdC5vcmlnX3ZhbCA9IGMtPmRzdC52YWw7Ci0JCWdvdG8gYW5kOwogCWNhc2UgMHgyOCAuLi4gMHgyZDoKIAkgICAgICBzdWI6CQkvKiBzdWIgKi8KIAkJZW11bGF0ZV8yb3BfU3JjVigic3ViIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CkBAIC0xNjU5LDcgKzE2ODMsNyBAQAogCWNhc2UgMHhhZSAuLi4gMHhhZjoJLyogc2NhcyAqLwogCQlEUFJJTlRGKCJVcmshIEkgZG9uJ3QgaGFuZGxlIFNDQVMuXG4iKTsKIAkJZ290byBjYW5ub3RfZW11bGF0ZTsKLQljYXNlIDB4Yjg6IC8qIG1vdiByLCBpbW0gKi8KKwljYXNlIDB4YjAgLi4uIDB4YmY6IC8qIG1vdiByLCBpbW0gKi8KIAkJZ290byBtb3Y7CiAJY2FzZSAweGMwIC4uLiAweGMxOgogCQllbXVsYXRlX2dycDIoY3R4dCk7CkBAIC0xNjc5LDYgKzE3MDMsMTYgQEAKIAkJYy0+c3JjLnZhbCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JDWF07CiAJCWVtdWxhdGVfZ3JwMihjdHh0KTsKIAkJYnJlYWs7CisJY2FzZSAweGU0OiAJLyogaW5iICovCisJY2FzZSAweGU1OiAJLyogaW4gKi8KKwkJcG9ydCA9IGluc25fZmV0Y2godTgsIDEsIGMtPmVpcCk7CisJCWlvX2Rpcl9pbiA9IDE7CisJCWdvdG8gZG9faW87CisJY2FzZSAweGU2OiAvKiBvdXRiICovCisJY2FzZSAweGU3OiAvKiBvdXQgKi8KKwkJcG9ydCA9IGluc25fZmV0Y2godTgsIDEsIGMtPmVpcCk7CisJCWlvX2Rpcl9pbiA9IDA7CisJCWdvdG8gZG9faW87CiAJY2FzZSAweGU4OiAvKiBjYWxsIChuZWFyKSAqLyB7CiAJCWxvbmcgaW50IHJlbDsKIAkJc3dpdGNoIChjLT5vcF9ieXRlcykgewpAQCAtMTcyOSw2ICsxNzYzLDIyIEBACiAJCWptcF9yZWwoYywgYy0+c3JjLnZhbCk7CiAJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsgLyogRGlzYWJsZSB3cml0ZWJhY2suICovCiAJCWJyZWFrOworCWNhc2UgMHhlYzogLyogaW4gYWwsZHggKi8KKwljYXNlIDB4ZWQ6IC8qIGluIChlL3IpYXgsZHggKi8KKwkJcG9ydCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWlvX2Rpcl9pbiA9IDE7CisJCWdvdG8gZG9faW87CisJY2FzZSAweGVlOiAvKiBvdXQgYWwsZHggKi8KKwljYXNlIDB4ZWY6IC8qIG91dCAoZS9yKWF4LGR4ICovCisJCXBvcnQgPSBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdOworCQlpb19kaXJfaW4gPSAwOworCWRvX2lvOglpZiAoa3ZtX2VtdWxhdGVfcGlvKGN0eHQtPnZjcHUsIE5VTEwsIGlvX2Rpcl9pbiwKKwkJCQkgICAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDogYy0+b3BfYnl0ZXMsCisJCQkJICAgcG9ydCkgIT0gMCkgeworCQkJYy0+ZWlwID0gc2F2ZWRfZWlwOworCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJfQorCQlyZXR1cm4gMDsKIAljYXNlIDB4ZjQ6ICAgICAgICAgICAgICAvKiBobHQgKi8KIAkJY3R4dC0+dmNwdS0+YXJjaC5oYWx0X3JlcXVlc3QgPSAxOwogCQlicmVhazsKQEAgLTE3NTQsNiArMTgwNCwxNCBAQAogCQljdHh0LT5lZmxhZ3MgfD0gWDg2X0VGTEFHU19JRjsKIAkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KIAkJYnJlYWs7CisJY2FzZSAweGZjOiAvKiBjbGQgKi8KKwkJY3R4dC0+ZWZsYWdzICY9IH5FRkxHX0RGOworCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIERpc2FibGUgd3JpdGViYWNrLiAqLworCQlicmVhazsKKwljYXNlIDB4ZmQ6IC8qIHN0ZCAqLworCQljdHh0LT5lZmxhZ3MgfD0gRUZMR19ERjsKKwkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KKwkJYnJlYWs7CiAJY2FzZSAweGZlIC4uLiAweGZmOgkvKiBHcnA0L0dycDUgKi8KIAkJcmMgPSBlbXVsYXRlX2dycDQ1KGN0eHQsIG9wcyk7CiAJCWlmIChyYyAhPSAwKQpAQCAtMTc2OCw3ICsxODI2LDcgQEAKIAogCS8qIENvbW1pdCBzaGFkb3cgcmVnaXN0ZXIgc3RhdGUuICovCiAJbWVtY3B5KGN0eHQtPnZjcHUtPmFyY2gucmVncywgYy0+cmVncywgc2l6ZW9mIGMtPnJlZ3MpOwotCWN0eHQtPnZjcHUtPmFyY2gucmlwID0gYy0+ZWlwOworCWt2bV9yaXBfd3JpdGUoY3R4dC0+dmNwdSwgYy0+ZWlwKTsKIAogZG9uZToKIAlpZiAocmMgPT0gWDg2RU1VTF9VTkhBTkRMRUFCTEUpIHsKQEAgLTE3OTMsNyArMTg1MSw3IEBACiAJCQkJZ290byBkb25lOwogCiAJCQkvKiBMZXQgdGhlIHByb2Nlc3NvciByZS1leGVjdXRlIHRoZSBmaXhlZCBoeXBlcmNhbGwgKi8KLQkJCWMtPmVpcCA9IGN0eHQtPnZjcHUtPmFyY2gucmlwOworCQkJYy0+ZWlwID0ga3ZtX3JpcF9yZWFkKGN0eHQtPnZjcHUpOwogCQkJLyogRGlzYWJsZSB3cml0ZWJhY2suICovCiAJCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CiAJCQlicmVhazsKQEAgLTE4ODksNyArMTk0Nyw3IEBACiAJCXJjID0ga3ZtX3NldF9tc3IoY3R4dC0+dmNwdSwgYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSwgbXNyX2RhdGEpOwogCQlpZiAocmMpIHsKIAkJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7Ci0JCQljLT5laXAgPSBjdHh0LT52Y3B1LT5hcmNoLnJpcDsKKwkJCWMtPmVpcCA9IGt2bV9yaXBfcmVhZChjdHh0LT52Y3B1KTsKIAkJfQogCQlyYyA9IFg4NkVNVUxfQ09OVElOVUU7CiAJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKQEAgLTE4OTksNyArMTk1Nyw3IEBACiAJCXJjID0ga3ZtX2dldF9tc3IoY3R4dC0+dmNwdSwgYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSwgJm1zcl9kYXRhKTsKIAkJaWYgKHJjKSB7CiAJCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOwotCQkJYy0+ZWlwID0gY3R4dC0+dmNwdS0+YXJjaC5yaXA7CisJCQljLT5laXAgPSBrdm1fcmlwX3JlYWQoY3R4dC0+dmNwdSk7CiAJCX0gZWxzZSB7CiAJCQljLT5yZWdzW1ZDUFVfUkVHU19SQVhdID0gKHUzMiltc3JfZGF0YTsKIAkJCWMtPnJlZ3NbVkNQVV9SRUdTX1JEWF0gPSBtc3JfZGF0YSA+PiAzMjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xndWVzdC9ib290LmMgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCmluZGV4IDY1ZjBiOGEuLjQ4ZWU0ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xndWVzdC9ib290LmMKKysrIGIvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYwpAQCAtNTgyLDcgKzU4Miw3IEBACiAJZm9yIChpID0gMDsgaSA8IExHVUVTVF9JUlFTOyBpKyspIHsKIAkJaW50IHZlY3RvciA9IEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiArIGk7CiAJCWlmICh2ZWN0b3IgIT0gU1lTQ0FMTF9WRUNUT1IpIHsKLQkJCXNldF9pbnRyX2dhdGUodmVjdG9yLCBpbnRlcnJ1cHRbaV0pOworCQkJc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsIGludGVycnVwdFt2ZWN0b3JdKTsKIAkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGksICZsZ3Vlc3RfaXJxX2NvbnRyb2xsZXIsCiAJCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLAogCQkJCQkJICAgICAgImxldmVsIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMKaW5kZXggZGYzN2ZjOS4uM2MzYjQ3MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL2JpZ3NtcC5jCisrKyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9iaWdzbXAuYwpAQCAtNDEsNiArNDEsMTAgQEAKIAkgeyB9CiB9OwogCitzdGF0aWMgY3B1bWFza190IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1KQoreworICAgICAgICByZXR1cm4gY3B1bWFza19vZl9jcHUoY3B1KTsKK30KIAogc3RhdGljIGludCBwcm9iZV9iaWdzbXAodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9lczcwMDAuYyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9lczcwMDAuYwppbmRleCA2NTEzZDQxLi4yODQ1OWNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZXM3MDAwLmMKKysrIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL2VzNzAwMC5jCkBAIC03NSw0ICs3NSwxOCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBjcHVtYXNrX3QgdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUpCit7CisJLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKKwkgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAorCSAqIHByaW9yaXR5IGludGVycnVwdCBkZWxpdmVyeSBtb2RlLgorCSAqCisJICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KKwkgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKKwkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgorCSAqLworCWNwdW1hc2tfdCBkb21haW4gPSB7IHsgWzBdID0gQVBJQ19BTExfQ1BVUywgfSB9OworCXJldHVybiBkb21haW47Cit9CisKIHN0cnVjdCBnZW5hcGljIF9faW5pdGRhdGFfcmVmb2sgYXBpY19lczcwMDAgPSBBUElDX0lOSVQoImVzNzAwMCIsIHByb2JlX2VzNzAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvbnVtYXEuYyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9udW1hcS5jCmluZGV4IDhjZjU4MzkuLjcxYTMwOWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9udW1hcS5jCisrKyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9udW1hcS5jCkBAIC0zOCw0ICszOCwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY3B1bWFza190IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1KQoreworCS8qIENhcmVmdWwuIFNvbWUgY3B1cyBkbyBub3Qgc3RyaWN0bHkgaG9ub3IgdGhlIHNldCBvZiBjcHVzCisJICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1c2luZyBsb3dlc3QKKwkgKiBwcmlvcml0eSBpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4KKwkgKgorCSAqIEluIHBhcnRpY3VsYXIgdGhlcmUgd2FzIGEgaHlwZXJ0aHJlYWRpbmcgY3B1IG9ic2VydmVkIHRvCisJICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCisJICogaHlwZXJ0aHJlYWQgd2FzIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc2l0aW5hdGlvbi4KKwkgKi8KKwljcHVtYXNrX3QgZG9tYWluID0geyB7IFswXSA9IEFQSUNfQUxMX0NQVVMsIH0gfTsKKwlyZXR1cm4gZG9tYWluOworfQorCiBzdHJ1Y3QgZ2VuYXBpYyBhcGljX251bWFxID0gQVBJQ19JTklUKCJOVU1BUSIsIHByb2JlX251bWFxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9zdW1taXQuYyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9zdW1taXQuYwppbmRleCA2YWQ2YjY3Li42MjcyYjVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvc3VtbWl0LmMKKysrIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL3N1bW1pdC5jCkBAIC0yMyw0ICsyMywxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY3B1bWFza190IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1KQoreworCS8qIENhcmVmdWwuIFNvbWUgY3B1cyBkbyBub3Qgc3RyaWN0bHkgaG9ub3IgdGhlIHNldCBvZiBjcHVzCisJICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1c2luZyBsb3dlc3QKKwkgKiBwcmlvcml0eSBpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4KKwkgKgorCSAqIEluIHBhcnRpY3VsYXIgdGhlcmUgd2FzIGEgaHlwZXJ0aHJlYWRpbmcgY3B1IG9ic2VydmVkIHRvCisJICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCisJICogaHlwZXJ0aHJlYWQgd2FzIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc2l0aW5hdGlvbi4KKwkgKi8KKwljcHVtYXNrX3QgZG9tYWluID0geyB7IFswXSA9IEFQSUNfQUxMX0NQVVMsIH0gfTsKKwlyZXR1cm4gZG9tYWluOworfQorCiBzdHJ1Y3QgZ2VuYXBpYyBhcGljX3N1bW1pdCA9IEFQSUNfSU5JVCgic3VtbWl0IiwgcHJvYmVfc3VtbWl0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jIGIvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMKaW5kZXggMTk5YTVmNC4uMGY2ZThhNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMKKysrIGIvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMKQEAgLTE0ODMsNyArMTQ4Myw3IEBACiAgKiB0aGUgaW50ZXJydXB0IG9mZiB0byBhbm90aGVyIENQVSAqLwogc3RhdGljIHZvaWQgYmVmb3JlX2hhbmRsZV92aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JaXJxX2Rlc2NfdCAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCV9fdTggY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJX3Jhd19zcGluX2xvY2soJnZpY19pcnFfbG9jayk7CkBAIC0xNTE4LDcgKzE1MTgsNyBAQAogLyogRmluaXNoIHRoZSBWSUMgaW50ZXJydXB0OiBiYXNpY2FsbHkgbWFzayAqLwogc3RhdGljIHZvaWQgYWZ0ZXJfaGFuZGxlX3ZpY19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlpcnFfZGVzY190ICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJaXJxX2Rlc2NfdCAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAlfcmF3X3NwaW5fbG9jaygmdmljX2lycV9sb2NrKTsKIAl7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9mYXVsdC5jIGIvYXJjaC94ODYvbW0vZmF1bHQuYwppbmRleCAzZjJiODk2Li4zMWU4NzMwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9mYXVsdC5jCisrKyBiL2FyY2gveDg2L21tL2ZhdWx0LmMKQEAgLTY0MCwyNCArNjQwLDIzIEBACiAJfQogCiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyogSXQncyBzYWZlIHRvIGFsbG93IGlycSdzIGFmdGVyIGNyMiBoYXMgYmVlbiBzYXZlZCBhbmQgdGhlIHZtYWxsb2MKLQkgICBmYXVsdCBoYXMgYmVlbiBoYW5kbGVkLiAqLwotCWlmIChyZWdzLT5mbGFncyAmIChYODZfRUZMQUdTX0lGIHwgWDg2X1ZNX01BU0spKQotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KIAkvKgotCSAqIElmIHdlJ3JlIGluIGFuIGludGVycnVwdCwgaGF2ZSBubyB1c2VyIGNvbnRleHQgb3IgYXJlIHJ1bm5pbmcgaW4gYW4KLQkgKiBhdG9taWMgcmVnaW9uIHRoZW4gd2UgbXVzdCBub3QgdGFrZSB0aGUgZmF1bHQuCisJICogSXQncyBzYWZlIHRvIGFsbG93IGlycSdzIGFmdGVyIGNyMiBoYXMgYmVlbiBzYXZlZCBhbmQgdGhlCisJICogdm1hbGxvYyBmYXVsdCBoYXMgYmVlbiBoYW5kbGVkLgorCSAqCisJICogVXNlci1tb2RlIHJlZ2lzdGVycyBjb3VudCBhcyBhIHVzZXIgYWNjZXNzIGV2ZW4gZm9yIGFueQorCSAqIHBvdGVudGlhbCBzeXN0ZW0gZmF1bHQgb3IgQ1BVIGJ1Z2xldC4KIAkgKi8KLQlpZiAoaW5fYXRvbWljKCkgfHwgIW1tKQotCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOwotI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLwotCWlmIChsaWtlbHkocmVncy0+ZmxhZ3MgJiBYODZfRUZMQUdTX0lGKSkKKwlpZiAodXNlcl9tb2RlX3ZtKHJlZ3MpKSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJZXJyb3JfY29kZSB8PSBQRl9VU0VSOworCX0gZWxzZSBpZiAocmVncy0+ZmxhZ3MgJiBYODZfRUZMQUdTX0lGKQogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CiAJaWYgKHVubGlrZWx5KGVycm9yX2NvZGUgJiBQRl9SU1ZEKSkKIAkJcGd0YWJsZV9iYWQoYWRkcmVzcywgcmVncywgZXJyb3JfY29kZSk7CisjZW5kaWYKIAogCS8qCiAJICogSWYgd2UncmUgaW4gYW4gaW50ZXJydXB0LCBoYXZlIG5vIHVzZXIgY29udGV4dCBvciBhcmUgcnVubmluZyBpbiBhbgpAQCAtNjY2LDE1ICs2NjUsOSBAQAogCWlmICh1bmxpa2VseShpbl9hdG9taWMoKSB8fCAhbW0pKQogCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOwogCi0JLyoKLQkgKiBVc2VyLW1vZGUgcmVnaXN0ZXJzIGNvdW50IGFzIGEgdXNlciBhY2Nlc3MgZXZlbiBmb3IgYW55Ci0JICogcG90ZW50aWFsIHN5c3RlbSBmYXVsdCBvciBDUFUgYnVnbGV0LgotCSAqLwotCWlmICh1c2VyX21vZGVfdm0ocmVncykpCi0JCWVycm9yX2NvZGUgfD0gUEZfVVNFUjsKIGFnYWluOgotI2VuZGlmCi0JLyogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvCisJLyoKKwkgKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRvIG9jY3VyIG9ubHkgdG8KIAkgKiBhZGRyZXNzZXMgaW4gdXNlciBzcGFjZS4gIEFsbCBvdGhlciBmYXVsdHMgcmVwcmVzZW50IGVycm9ycyBpbiB0aGUKIAkgKiBrZXJuZWwgYW5kIHNob3VsZCBnZW5lcmF0ZSBhbiBPT1BTLiAgVW5mb3J0dW5hdGVseSwgaW4gdGhlIGNhc2Ugb2YgYW4KIAkgKiBlcnJvbmVvdXMgZmF1bHQgb2NjdXJyaW5nIGluIGEgY29kZSBwYXRoIHdoaWNoIGFscmVhZHkgaG9sZHMgbW1hcF9zZW0KQEAgLTczNyw5ICs3MzAsNiBAQAogCQkJZ290byBiYWRfYXJlYTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi1zdXJ2aXZlOgotI2VuZGlmCiAJLyoKIAkgKiBJZiBmb3IgYW55IHJlYXNvbiBhdCBhbGwgd2UgY291bGRuJ3QgaGFuZGxlIHRoZSBmYXVsdCwKIAkgKiBtYWtlIHN1cmUgd2UgZXhpdCBncmFjZWZ1bGx5IHJhdGhlciB0aGFuIGVuZGxlc3NseSByZWRvCkBAIC04NzQsMTIgKzg2NCwxMSBAQAogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJaWYgKGlzX2dsb2JhbF9pbml0KHRzaykpIHsKIAkJeWllbGQoKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJZ290byBzdXJ2aXZlOwotI2Vsc2UKKwkJLyoKKwkJICogUmUtbG9va3VwIHRoZSB2bWEgLSBpbiB0aGVvcnkgdGhlIHZtYSB0cmVlIG1pZ2h0CisJCSAqIGhhdmUgY2hhbmdlZDoKKwkJICovCiAJCWdvdG8gYWdhaW47Ci0jZW5kaWYKIAl9CiAKIAlwcmludGsoIlZNOiBraWxsaW5nIHByb2Nlc3MgJXNcbiIsIHRzay0+Y29tbSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMgYi9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKaW5kZXggMTY1Yzg3MS4uYmNjMDc5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCisrKyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwpAQCAtMTM3LDYgKzEzNyw3IEBACiAKIAlyZXR1cm4gKHZvaWQqKSB2YWRkcjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGttYXBfYXRvbWljX3Bmbik7IC8qIHRlbXBvcmFyaWx5IGluIHVzZSBieSBpOTE1IEdFTSB1bnRpbCB2bWFwICovCiAKIHN0cnVjdCBwYWdlICprbWFwX2F0b21pY190b19wYWdlKHZvaWQgKnB0cikKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvcmVtYXAuYyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwppbmRleCBlNGM0M2VjLi5hZTcxZTExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC0yMjAsNiArMjIwLDEyIEBACiAJCXJldHVybiAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilwaHlzX3RvX3ZpcnQocGh5c19hZGRyKTsKIAogCS8qCisJICogQ2hlY2sgaWYgdGhlIHJlcXVlc3Qgc3BhbnMgbW9yZSB0aGFuIGFueSBCQVIgaW4gdGhlIGlvbWVtIHJlc291cmNlCisJICogdHJlZS4KKwkgKi8KKwlXQVJOX09OKGlvbWVtX21hcF9zYW5pdHlfY2hlY2socGh5c19hZGRyLCBzaXplKSk7CisKKwkvKgogCSAqIERvbid0IGFsbG93IGFueWJvZHkgdG8gcmVtYXAgbm9ybWFsIFJBTSB0aGF0IHdlJ3JlIHVzaW5nLi4KIAkgKi8KIAlmb3IgKHBmbiA9IHBoeXNfYWRkciA+PiBQQUdFX1NISUZUOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKaW5kZXggYTllYzg5Yy4uNDA3ZDg3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYworKysgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCkBAIC03OTIsNiArNzkyLDggQEAKIAkvKiBNdXN0IGF2b2lkIGFsaWFzaW5nIG1hcHBpbmdzIGluIHRoZSBoaWdobWVtIGNvZGUgKi8KIAlrbWFwX2ZsdXNoX3VudXNlZCgpOwogCisJdm1fdW5tYXBfYWxpYXNlcygpOworCiAJY3BhLnZhZGRyID0gYWRkcjsKIAljcGEubnVtcGFnZXMgPSBudW1wYWdlczsKIAljcGEubWFza19zZXQgPSBtYXNrX3NldDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCAwMDEzYTcyLi5iNjE1MzRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC04NzEsNiArODcxLDcgQEAKIAkJCS8qIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3RyYXkgbWFwcGluZ3Mgb2YKIAkJCSAgIHRoaXMgcGFnZSAqLwogCQkJa21hcF9mbHVzaF91bnVzZWQoKTsKKwkJCXZtX3VubWFwX2FsaWFzZXMoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9pcnEuYyBiL2FyY2gveDg2L3hlbi9pcnEuYwppbmRleCAyOGI4NWFiLi5iYjA0MjYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vaXJxLmMKKysrIGIvYXJjaC94ODYveGVuL2lycS5jCkBAIC0yMSw3ICsyMSw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBfX3hlbl9pbml0X0lSUSh2b2lkKQogewotI2lmZGVmIENPTkZJR19YODZfNjQKIAlpbnQgaTsKIAogCS8qIENyZWF0ZSBpZGVudGl0eSB2ZWN0b3ItPmlycSBtYXAgKi8KQEAgLTMxLDcgKzMwLDYgQEAKIAkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVtpXSA9IGk7CiAJfQotI2VuZGlmCS8qIENPTkZJR19YODZfNjQgKi8KIAogCXhlbl9pbml0X0lSUSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdS5jIGIvYXJjaC94ODYveGVuL21tdS5jCmluZGV4IGFlMTczZjYuLmQ0ZDUyZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tbXUuYworKysgYi9hcmNoL3g4Ni94ZW4vbW11LmMKQEAgLTg0Niw2ICs4NDYsNyBAQAogCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBmb3Iga21hcF9mbHVzaF91bnVzZWQgKi8KIAkJeGVuX21jX2lzc3VlKDApOwogCQlrbWFwX2ZsdXNoX3VudXNlZCgpOworCQl2bV91bm1hcF9hbGlhc2VzKCk7CiAJCXhlbl9tY19iYXRjaCgpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NwaW5sb2NrLmMgYi9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYwppbmRleCBkZDcxZTNhLi41NjAxNTA2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYworKysgYi9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJCUFERF9TVEFUUyh0YWtlbl9zbG93X3NwdXJpb3VzLCAheGVuX3Rlc3RfaXJxX3BlbmRpbmcoaXJxKSk7CiAJfSB3aGlsZSAoIXhlbl90ZXN0X2lycV9wZW5kaW5nKGlycSkpOyAvKiBjaGVjayBmb3Igc3B1cmlvdXMgd2FrZXVwcyAqLwogCi0Ja3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7CiAKIG91dDoKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3RpbWUuYyBiL2FyY2gveDg2L3hlbi90aW1lLmMKaW5kZXggMDA0YmE4Ni4uYzlmN2NkYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3RpbWUuYworKysgYi9hcmNoL3g4Ni94ZW4vdGltZS5jCkBAIC0xOTgsMTcgKzE5OCwxMCBAQAogLyogR2V0IHRoZSBUU0Mgc3BlZWQgZnJvbSBYZW4gKi8KIHVuc2lnbmVkIGxvbmcgeGVuX3RzY19raHoodm9pZCkKIHsKLQl1NjQgeGVuX2toeiA9IDEwMDAwMDBVTEwgPDwgMzI7Ci0JY29uc3Qgc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKmluZm8gPQorCXN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICppbmZvID0KIAkJJkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPnZjcHVfaW5mb1swXS50aW1lOwogCi0JZG9fZGl2KHhlbl9raHosIGluZm8tPnRzY190b19zeXN0ZW1fbXVsKTsKLQlpZiAoaW5mby0+dHNjX3NoaWZ0IDwgMCkKLQkJeGVuX2toeiA8PD0gLWluZm8tPnRzY19zaGlmdDsKLQllbHNlCi0JCXhlbl9raHogPj49IGluZm8tPnRzY19zaGlmdDsKLQotCXJldHVybiB4ZW5fa2h6OworCXJldHVybiBwdmNsb2NrX3RzY19raHooaW5mbyk7CiB9CiAKIGN5Y2xlX3QgeGVuX2Nsb2Nrc291cmNlX3JlYWQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL0tjb25maWcgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCmluZGV4IDAyZTQxN2QuLmEyMTMyNjAgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL0tjb25maWcKKysrIGIvYXJjaC94dGVuc2EvS2NvbmZpZwpAQCAtNTUsNiArNTUsNyBAQAogCWRlZmF1bHQgMTAwCiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgogCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3NldHVwLmMKaW5kZXggYTAwMzU5ZS4uOTYwNmQyYiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3NldHVwLmMKQEAgLTUzLDExICs1Myw2IEBACiBzdHJ1Y3QgZmRfb3BzICpmZF9vcHM7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFKSB8fCBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERV9NT0RVTEUpCi1leHRlcm4gc3RydWN0IGlkZV9vcHMgbm9faWRlX29wczsKLXN0cnVjdCBpZGVfb3BzICppZGVfb3BzOwotI2VuZGlmCi0KIGV4dGVybiBzdHJ1Y3QgcnRjX29wcyBub19ydGNfb3BzOwogc3RydWN0IHJ0Y19vcHMgKnJ0Y19vcHM7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDJkMDUzYjUuLmMzZGYzMGMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMjU3LDcgKzI1Nyw2IEBACiAKIAlxLT5yZXF1ZXN0X2ZuKHEpOwogfQotRVhQT1JUX1NZTUJPTChfX2dlbmVyaWNfdW5wbHVnX2RldmljZSk7CiAKIC8qKgogICogZ2VuZXJpY191bnBsdWdfZGV2aWNlIC0gZmlyZSBhIHJlcXVlc3QgcXVldWUKQEAgLTMyNSw2ICszMjQsOSBAQAogCiBzdGF0aWMgdm9pZCBibGtfaW52b2tlX3JlcXVlc3RfZm4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CisJaWYgKHVubGlrZWx5KGJsa19xdWV1ZV9zdG9wcGVkKHEpKSkKKwkJcmV0dXJuOworCiAJLyoKIAkgKiBvbmUgbGV2ZWwgb2YgcmVjdXJzaW9uIGlzIG9rIGFuZCBpcyBtdWNoIGZhc3RlciB0aGFuIGtpY2tpbmcKIAkgKiB0aGUgdW5wbHVnIGhhbmRsaW5nCkBAIC0zOTksOCArNDAxLDEzIEBACiBFWFBPUlRfU1lNQk9MKGJsa19zeW5jX3F1ZXVlKTsKIAogLyoqCi0gKiBibGtfcnVuX3F1ZXVlIC0gcnVuIGEgc2luZ2xlIGRldmljZSBxdWV1ZQorICogX19ibGtfcnVuX3F1ZXVlIC0gcnVuIGEgc2luZ2xlIGRldmljZSBxdWV1ZQogICogQHE6CVRoZSBxdWV1ZSB0byBydW4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgIFNlZSBAYmxrX3J1bl9xdWV1ZS4gVGhpcyB2YXJpYW50IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHF1ZXVlIGxvY2sKKyAqICAgIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgogICovCiB2b2lkIF9fYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKQEAgLTQxOCw2ICs0MjUsMTIgQEAKIC8qKgogICogYmxrX3J1bl9xdWV1ZSAtIHJ1biBhIHNpbmdsZSBkZXZpY2UgcXVldWUKICAqIEBxOiBUaGUgcXVldWUgdG8gcnVuCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICBJbnZva2UgcmVxdWVzdCBoYW5kbGluZyBvbiB0aGlzIHF1ZXVlLCBpZiBpdCBoYXMgcGVuZGluZyB3b3JrIHRvIGRvLgorICogICAgTWF5IGJlIHVzZWQgdG8gcmVzdGFydCBxdWV1ZWluZyB3aGVuIGEgcmVxdWVzdCBoYXMgY29tcGxldGVkLiBBbHNvCisgKiAgICBTZWUgQGJsa19zdGFydF9xdWV1ZWluZy4KKyAqCiAgKi8KIHZvaWQgYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKQEAgLTUwMSw2ICs1MTQsNyBAQAogCWluaXRfdGltZXIoJnEtPnVucGx1Z190aW1lcik7CiAJc2V0dXBfdGltZXIoJnEtPnRpbWVvdXQsIGJsa19ycV90aW1lZF9vdXRfdGltZXIsICh1bnNpZ25lZCBsb25nKSBxKTsKIAlJTklUX0xJU1RfSEVBRCgmcS0+dGltZW91dF9saXN0KTsKKwlJTklUX1dPUksoJnEtPnVucGx1Z193b3JrLCBibGtfdW5wbHVnX3dvcmspOwogCiAJa29iamVjdF9pbml0KCZxLT5rb2JqLCAmYmxrX3F1ZXVlX2t0eXBlKTsKIApAQCAtODg0LDcgKzg5OCw4IEBACiAgKgogICogVGhpcyBpcyBiYXNpY2FsbHkgYSBoZWxwZXIgdG8gcmVtb3ZlIHRoZSBuZWVkIHRvIGtub3cgd2hldGhlciBhIHF1ZXVlCiAgKiBpcyBwbHVnZ2VkIG9yIG5vdCBpZiBzb21lb25lIGp1c3Qgd2FudHMgdG8gaW5pdGlhdGUgZGlzcGF0Y2ggb2YgcmVxdWVzdHMKLSAqIGZvciB0aGlzIHF1ZXVlLgorICogZm9yIHRoaXMgcXVldWUuIFNob3VsZCBiZSB1c2VkIHRvIHN0YXJ0IHF1ZXVlaW5nIG9uIGEgZGV2aWNlIG91dHNpZGUKKyAqIG9mIC0+cmVxdWVzdF9mbigpIGNvbnRleHQuIEFsc28gc2VlIEBibGtfcnVuX3F1ZXVlLgogICoKICAqIFRoZSBxdWV1ZSBsb2NrIG11c3QgYmUgaGVsZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KQEAgLTEwMDMsOCArMTAxOCw5IEBACiB9CiAKIC8qKgotICogcGFydF9yb3VuZF9zdGF0cygpCS0gUm91bmQgb2ZmIHRoZSBwZXJmb3JtYW5jZSBzdGF0cyBvbiBhIHN0cnVjdAotICogZGlza19zdGF0cy4KKyAqIHBhcnRfcm91bmRfc3RhdHMoKSAtIFJvdW5kIG9mZiB0aGUgcGVyZm9ybWFuY2Ugc3RhdHMgb24gYSBzdHJ1Y3QgZGlza19zdGF0cy4KKyAqIEBjcHU6IGNwdSBudW1iZXIgZm9yIHN0YXRzIGFjY2VzcworICogQHBhcnQ6IHRhcmdldCBwYXJ0aXRpb24KICAqCiAgKiBUaGUgYXZlcmFnZSBJTyBxdWV1ZSBsZW5ndGggYW5kIHV0aWxpc2F0aW9uIHN0YXRpc3RpY3MgYXJlIG1haW50YWluZWQKICAqIGJ5IG9ic2VydmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcXVldWUgbGVuZ3RoIGFuZCB0aGUgYW1vdW50IG9mCkBAIC0xMDc1LDggKzEwOTEsMTUgQEAKIAkvKgogCSAqIGluaGVyaXQgRkFJTEZBU1QgZnJvbSBiaW8gKGZvciByZWFkLWFoZWFkLCBhbmQgZXhwbGljaXQgRkFJTEZBU1QpCiAJICovCi0JaWYgKGJpb19yd19haGVhZChiaW8pIHx8IGJpb19mYWlsZmFzdChiaW8pKQotCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1Q7CisJaWYgKGJpb19yd19haGVhZChiaW8pKQorCQlyZXEtPmNtZF9mbGFncyB8PSAoUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfAorCQkJCSAgIFJFUV9GQUlMRkFTVF9EUklWRVIpOworCWlmIChiaW9fZmFpbGZhc3RfZGV2KGJpbykpCisJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9ERVY7CisJaWYgKGJpb19mYWlsZmFzdF90cmFuc3BvcnQoYmlvKSkKKwkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVDsKKwlpZiAoYmlvX2ZhaWxmYXN0X2RyaXZlcihiaW8pKQorCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfRFJJVkVSOwogCiAJLyoKIAkgKiBSRVFfQkFSUklFUiBpbXBsaWVzIG5vIG1lcmdpbmcsIGJ1dCBsZXRzIG1ha2UgaXQgZXhwbGljaXQKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tZXJnZS5jIGIvYmxvY2svYmxrLW1lcmdlLmMKaW5kZXggOTA4ZDNlMS4uODY4MWNkNiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1lcmdlLmMKKysrIGIvYmxvY2svYmxrLW1lcmdlLmMKQEAgLTc3LDEyICs3NywyMCBAQAogCQkJY29udGludWU7CiAJCX0KIG5ld19zZWdtZW50OgorCQlpZiAobnJfcGh5c19zZWdzID09IDEgJiYgc2VnX3NpemUgPiBycS0+YmlvLT5iaV9zZWdfZnJvbnRfc2l6ZSkKKwkJCXJxLT5iaW8tPmJpX3NlZ19mcm9udF9zaXplID0gc2VnX3NpemU7CisKIAkJbnJfcGh5c19zZWdzKys7CiAJCWJ2cHJ2ID0gYnY7CiAJCXNlZ19zaXplID0gYnYtPmJ2X2xlbjsKIAkJaGlnaHBydiA9IGhpZ2g7CiAJfQogCisJaWYgKG5yX3BoeXNfc2VncyA9PSAxICYmIHNlZ19zaXplID4gcnEtPmJpby0+Ymlfc2VnX2Zyb250X3NpemUpCisJCXJxLT5iaW8tPmJpX3NlZ19mcm9udF9zaXplID0gc2VnX3NpemU7CisJaWYgKHNlZ19zaXplID4gcnEtPmJpb3RhaWwtPmJpX3NlZ19iYWNrX3NpemUpCisJCXJxLT5iaW90YWlsLT5iaV9zZWdfYmFja19zaXplID0gc2VnX3NpemU7CisKIAlycS0+bnJfcGh5c19zZWdtZW50cyA9IG5yX3BoeXNfc2VnczsKIH0KIApAQCAtMTA2LDcgKzExNCw4IEBACiAJaWYgKCF0ZXN0X2JpdChRVUVVRV9GTEFHX0NMVVNURVIsICZxLT5xdWV1ZV9mbGFncykpCiAJCXJldHVybiAwOwogCi0JaWYgKGJpby0+Ymlfc2l6ZSArIG54dC0+Ymlfc2l6ZSA+IHEtPm1heF9zZWdtZW50X3NpemUpCisJaWYgKGJpby0+Ymlfc2VnX2JhY2tfc2l6ZSArIG54dC0+Ymlfc2VnX2Zyb250X3NpemUgPgorCSAgICBxLT5tYXhfc2VnbWVudF9zaXplKQogCQlyZXR1cm4gMDsKIAogCWlmICghYmlvX2hhc19kYXRhKGJpbykpCkBAIC0zMDksNiArMzE4LDggQEAKIAkJCQlzdHJ1Y3QgcmVxdWVzdCAqbmV4dCkKIHsKIAlpbnQgdG90YWxfcGh5c19zZWdtZW50czsKKwl1bnNpZ25lZCBpbnQgc2VnX3NpemUgPQorCQlyZXEtPmJpb3RhaWwtPmJpX3NlZ19iYWNrX3NpemUgKyBuZXh0LT5iaW8tPmJpX3NlZ19mcm9udF9zaXplOwogCiAJLyoKIAkgKiBGaXJzdCBjaGVjayBpZiB0aGUgZWl0aGVyIG9mIHRoZSByZXF1ZXN0cyBhcmUgcmUtcXVldWVkCkBAIC0zMjQsOCArMzM1LDEzIEBACiAJCXJldHVybiAwOwogCiAJdG90YWxfcGh5c19zZWdtZW50cyA9IHJlcS0+bnJfcGh5c19zZWdtZW50cyArIG5leHQtPm5yX3BoeXNfc2VnbWVudHM7Ci0JaWYgKGJsa19waHlzX2NvbnRpZ19zZWdtZW50KHEsIHJlcS0+YmlvdGFpbCwgbmV4dC0+YmlvKSkKKwlpZiAoYmxrX3BoeXNfY29udGlnX3NlZ21lbnQocSwgcmVxLT5iaW90YWlsLCBuZXh0LT5iaW8pKSB7CisJCWlmIChyZXEtPm5yX3BoeXNfc2VnbWVudHMgPT0gMSkKKwkJCXJlcS0+YmlvLT5iaV9zZWdfZnJvbnRfc2l6ZSA9IHNlZ19zaXplOworCQlpZiAobmV4dC0+bnJfcGh5c19zZWdtZW50cyA9PSAxKQorCQkJbmV4dC0+YmlvdGFpbC0+Ymlfc2VnX2JhY2tfc2l6ZSA9IHNlZ19zaXplOwogCQl0b3RhbF9waHlzX3NlZ21lbnRzLS07CisJfQogCiAJaWYgKHRvdGFsX3BoeXNfc2VnbWVudHMgPiBxLT5tYXhfcGh5c19zZWdtZW50cykKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstc2V0dGluZ3MuYyBiL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCmluZGV4IGIyMWRjZGIuLjQxMzkyZmIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCisrKyBiL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCkBAIC0xNDEsOCArMTQxLDYgQEAKIAlpZiAocS0+dW5wbHVnX2RlbGF5ID09IDApCiAJCXEtPnVucGx1Z19kZWxheSA9IDE7CiAKLQlJTklUX1dPUksoJnEtPnVucGx1Z193b3JrLCBibGtfdW5wbHVnX3dvcmspOwotCiAJcS0+dW5wbHVnX3RpbWVyLmZ1bmN0aW9uID0gYmxrX3VucGx1Z190aW1lb3V0OwogCXEtPnVucGx1Z190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcTsKIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaAppbmRleCBlNWM1Nzk3Li5kMmU0OWFmIDEwMDY0NAotLS0gYS9ibG9jay9ibGsuaAorKysgYi9ibG9jay9ibGsuaApAQCAtMjAsNiArMjAsNyBAQAogdm9pZCBibGtfcnFfdGltZWRfb3V0X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiB2b2lkIGJsa19kZWxldGVfdGltZXIoc3RydWN0IHJlcXVlc3QgKik7CiB2b2lkIGJsa19hZGRfdGltZXIoc3RydWN0IHJlcXVlc3QgKik7Cit2b2lkIF9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwogCiAvKgogICogSW50ZXJuYWwgYXRvbWljIGZsYWdzIGZvciByZXF1ZXN0IGhhbmRsaW5nCmRpZmYgLS1naXQgYS9ibG9jay9ic2cuYyBiL2Jsb2NrL2JzZy5jCmluZGV4IDU2Y2IzNDMuLjAzNDExMmIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JzZy5jCisrKyBiL2Jsb2NrL2JzZy5jCkBAIC0xMDI0LDggKzEwMjQsNyBAQAogCWJjZC0+cmVsZWFzZSA9IHJlbGVhc2U7CiAJa3JlZl9pbml0KCZiY2QtPnJlZik7CiAJZGV2ID0gTUtERVYoYnNnX21ham9yLCBiY2QtPm1pbm9yKTsKLQljbGFzc19kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoYnNnX2NsYXNzLCBwYXJlbnQsIGRldiwgTlVMTCwKLQkJCQkJICAiJXMiLCBkZXZuYW1lKTsKKwljbGFzc19kZXYgPSBkZXZpY2VfY3JlYXRlKGJzZ19jbGFzcywgcGFyZW50LCBkZXYsIE5VTEwsICIlcyIsIGRldm5hbWUpOwogCWlmIChJU19FUlIoY2xhc3NfZGV2KSkgewogCQlyZXQgPSBQVFJfRVJSKGNsYXNzX2Rldik7CiAJCWdvdG8gcHV0X2RldjsKZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDA0NTE4OTIuLjU5MTczYTYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtNjEyLDcgKzYxMiw3IEBACiAJCSAqICAgcHJvY2Vzc2luZy4KIAkJICovCiAJCWJsa19yZW1vdmVfcGx1ZyhxKTsKLQkJcS0+cmVxdWVzdF9mbihxKTsKKwkJYmxrX3N0YXJ0X3F1ZXVlaW5nKHEpOwogCQlicmVhazsKIAogCWNhc2UgRUxFVkFUT1JfSU5TRVJUX1NPUlQ6CkBAIC05NTAsNyArOTUwLDcgQEAKIAkJICAgIGJsa19vcmRlcmVkX2N1cl9zZXEocSkgPT0gUVVFVUVfT1JEU0VRX0RSQUlOICYmCiAJCSAgICBibGtfb3JkZXJlZF9yZXFfc2VxKGZpcnN0X3JxKSA+IFFVRVVFX09SRFNFUV9EUkFJTikgewogCQkJYmxrX29yZGVyZWRfY29tcGxldGVfc2VxKHEsIFFVRVVFX09SRFNFUV9EUkFJTiwgMCk7Ci0JCQlxLT5yZXF1ZXN0X2ZuKHEpOworCQkJYmxrX3N0YXJ0X3F1ZXVlaW5nKHEpOwogCQl9CiAJfQogfQpAQCAtMTEwOSw4ICsxMTA5LDcgQEAKIAllbHZfZHJhaW5fZWxldmF0b3IocSk7CiAKIAl3aGlsZSAocS0+cnEuZWx2cHJpdikgewotCQlibGtfcmVtb3ZlX3BsdWcocSk7Ci0JCXEtPnJlcXVlc3RfZm4ocSk7CisJCWJsa19zdGFydF9xdWV1ZWluZyhxKTsKIAkJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCQltc2xlZXAoMTApOwogCQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwpAQCAtMTE2NiwxNSArMTE2NSwxMCBAQAogCQkJICBzaXplX3QgY291bnQpCiB7CiAJY2hhciBlbGV2YXRvcl9uYW1lW0VMVl9OQU1FX01BWF07Ci0Jc2l6ZV90IGxlbjsKIAlzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqZTsKIAotCWVsZXZhdG9yX25hbWVbc2l6ZW9mKGVsZXZhdG9yX25hbWUpIC0gMV0gPSAnXDAnOwotCXN0cm5jcHkoZWxldmF0b3JfbmFtZSwgbmFtZSwgc2l6ZW9mKGVsZXZhdG9yX25hbWUpIC0gMSk7Ci0JbGVuID0gc3RybGVuKGVsZXZhdG9yX25hbWUpOwotCi0JaWYgKGxlbiAmJiBlbGV2YXRvcl9uYW1lW2xlbiAtIDFdID09ICdcbicpCi0JCWVsZXZhdG9yX25hbWVbbGVuIC0gMV0gPSAnXDAnOworCXN0cmxjcHkoZWxldmF0b3JfbmFtZSwgbmFtZSwgc2l6ZW9mKGVsZXZhdG9yX25hbWUpKTsKKwlzdHJzdHJpcChlbGV2YXRvcl9uYW1lKTsKIAogCWUgPSBlbGV2YXRvcl9nZXQoZWxldmF0b3JfbmFtZSk7CiAJaWYgKCFlKSB7CmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuYwppbmRleCA0Y2QzNDMzLi42NDZlMWQyIDEwMDY0NAotLS0gYS9ibG9jay9nZW5oZC5jCisrKyBiL2Jsb2NrL2dlbmhkLmMKQEAgLTM1OCw3ICszNTgsNiBAQAogLyoqCiAgKiBibGtfYWxsb2NfZGV2dCAtIGFsbG9jYXRlIGEgZGV2X3QgZm9yIGEgcGFydGl0aW9uCiAgKiBAcGFydDogcGFydGl0aW9uIHRvIGFsbG9jYXRlIGRldl90IGZvcgotICogQGdmcF9tYXNrOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnCiAgKiBAZGV2dDogb3V0IHBhcmFtZXRlciBmb3IgcmVzdWx0aW5nIGRldl90CiAgKgogICogQWxsb2NhdGUgYSBkZXZfdCBmb3IgYmxvY2sgZGV2aWNlLgpAQCAtNTM1LDcgKzUzNCw3IEBACiAvKioKICAqIGdldF9nZW5kaXNrIC0gZ2V0IHBhcnRpdGlvbmluZyBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBkZXZpY2UKICAqIEBkZXZ0OiBkZXZpY2UgdG8gZ2V0IHBhcnRpdGlvbmluZyBpbmZvcm1hdGlvbiBmb3IKLSAqIEBwYXJ0OiByZXR1cm5lZCBwYXJ0aXRpb24gaW5kZXgKKyAqIEBwYXJ0bm86IHJldHVybmVkIHBhcnRpdGlvbiBpbmRleAogICoKICAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgc3RydWN0dXJlIGNvbnRhaW5pbmcgcGFydGl0aW9uaW5nCiAgKiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIGRldmljZSBAZGV2dC4KZGlmZiAtLWdpdCBhL2NyeXB0by9hc3luY190eC9hc3luY190eC5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKaW5kZXggZTgzNjJjMS4uZGNiZjFiZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKQEAgLTExNSwzNCArMTE1LDMyIEBACiAgKgkoc3RhcnQpIGRlcGVuZGVudCBvcGVyYXRpb25zIG9uIHRoZWlyIHRhcmdldCBjaGFubmVsCiAgKiBAdHg6IHRyYW5zYWN0aW9uIHdpdGggZGVwZW5kZW5jaWVzCiAgKi8KLXZvaWQKLWFzeW5jX3R4X3J1bl9kZXBlbmRlbmNpZXMoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCkKK3ZvaWQgYXN5bmNfdHhfcnVuX2RlcGVuZGVuY2llcyhzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQogewotCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqbmV4dCA9IHR4LT5uZXh0OworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVwID0gdHgtPm5leHQ7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXBfbmV4dDsKIAlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CiAKLQlpZiAoIW5leHQpCisJaWYgKCFkZXApCiAJCXJldHVybjsKIAotCXR4LT5uZXh0ID0gTlVMTDsKLQljaGFuID0gbmV4dC0+Y2hhbjsKKwljaGFuID0gZGVwLT5jaGFuOwogCiAJLyoga2VlcCBzdWJtaXR0aW5nIHVwIHVudGlsIGEgY2hhbm5lbCBzd2l0Y2ggaXMgZGV0ZWN0ZWQKIAkgKiBpbiB0aGF0IGNhc2Ugd2Ugd2lsbCBiZSBjYWxsZWQgYWdhaW4gYXMgYSByZXN1bHQgb2YKIAkgKiBwcm9jZXNzaW5nIHRoZSBpbnRlcnJ1cHQgZnJvbSBhc3luY190eF9jaGFubmVsX3N3aXRjaAogCSAqLwotCXdoaWxlIChuZXh0ICYmIG5leHQtPmNoYW4gPT0gY2hhbikgewotCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKl9uZXh0OworCWZvciAoOyBkZXA7IGRlcCA9IGRlcF9uZXh0KSB7CisJCXNwaW5fbG9ja19iaCgmZGVwLT5sb2NrKTsKKwkJZGVwLT5wYXJlbnQgPSBOVUxMOworCQlkZXBfbmV4dCA9IGRlcC0+bmV4dDsKKwkJaWYgKGRlcF9uZXh0ICYmIGRlcF9uZXh0LT5jaGFuID09IGNoYW4pCisJCQlkZXAtPm5leHQgPSBOVUxMOyAvKiAtPm5leHQgd2lsbCBiZSBzdWJtaXR0ZWQgKi8KKwkJZWxzZQorCQkJZGVwX25leHQgPSBOVUxMOyAvKiBzdWJtaXQgY3VycmVudCBkZXAgYW5kIHRlcm1pbmF0ZSAqLworCQlzcGluX3VubG9ja19iaCgmZGVwLT5sb2NrKTsKIAotCQlzcGluX2xvY2tfYmgoJm5leHQtPmxvY2spOwotCQluZXh0LT5wYXJlbnQgPSBOVUxMOwotCQlfbmV4dCA9IG5leHQtPm5leHQ7Ci0JCWlmIChfbmV4dCAmJiBfbmV4dC0+Y2hhbiA9PSBjaGFuKQotCQkJbmV4dC0+bmV4dCA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrX2JoKCZuZXh0LT5sb2NrKTsKLQotCQluZXh0LT50eF9zdWJtaXQobmV4dCk7Ci0JCW5leHQgPSBfbmV4dDsKKwkJZGVwLT50eF9zdWJtaXQoZGVwKTsKIAl9CiAKIAljaGFuLT5kZXZpY2UtPmRldmljZV9pc3N1ZV9wZW5kaW5nKGNoYW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29uZmlnCmluZGV4IDU5ZjMzZmEuLmQxOWI2ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL0tjb25maWcKQEAgLTEwMSw0ICsxMDEsNiBAQAogc291cmNlICJkcml2ZXJzL3Vpby9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMveGVuL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL0tjb25maWciCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCAyNzM1YmRlLi40NmM4NjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTk5LDMgKzk5LDQgQEAKIG9iai0kKENPTkZJR19TU0IpCQkrPSBzc2IvCiBvYmotJChDT05GSUdfVklSVElPKQkJKz0gdmlydGlvLwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUikJCSs9IHJlZ3VsYXRvci8KK29iai0kKENPTkZJR19TVEFHSU5HKQkJKz0gc3RhZ2luZy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggMTJjZjVkNC4uZGE0OWIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWcKQEAgLTI1OSw3ICsyNTksNyBAQAogCiBjb25maWcgQUNQSV9UT1NISUJBCiAJdHJpc3RhdGUgIlRvc2hpYmEgTGFwdG9wIEV4dHJhcyIKLQlkZXBlbmRzIG9uIFg4NgorCWRlcGVuZHMgb24gWDg2ICYmIElOUFVUCiAJc2VsZWN0IElOUFVUX1BPTExERVYKIAlzZWxlY3QgTkVUCiAJc2VsZWN0IFJGS0lMTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggYjFjNzIzZi4uNzBmN2Y2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC00MzEsNyArNDMxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFsYXJtX2F0dHIgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAiYWxhcm0iLCAubW9kZSA9IDA2NDQsIC5vd25lciA9IFRISVNfTU9EVUxFfSwKKwkuYXR0ciA9IHsubmFtZSA9ICJhbGFybSIsIC5tb2RlID0gMDY0NH0sCiAJLnNob3cgPSBhY3BpX2JhdHRlcnlfYWxhcm1fc2hvdywKIAkuc3RvcmUgPSBhY3BpX2JhdHRlcnlfYWxhcm1fc3RvcmUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2dsdWUuYyBiL2RyaXZlcnMvYWNwaS9nbHVlLmMKaW5kZXggM2M1NzhlZi4uMjQ2NDlhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2dsdWUuYworKysgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCkBAIC0yNjAsMTE1ICsyNjAsMyBAQAogfQogCiBhcmNoX2luaXRjYWxsKGluaXRfYWNwaV9kZXZpY2Vfbm90aWZ5KTsKLQotCi0jaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9DTU9TKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0NNT1NfTU9EVUxFKQotCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgdTMyIHJ0Y19oYW5kbGVyKHZvaWQgKmNvbnRleHQpCi17Ci0JYWNwaV9jbGVhcl9ldmVudChBQ1BJX0VWRU5UX1JUQyk7Ci0JYWNwaV9kaXNhYmxlX2V2ZW50KEFDUElfRVZFTlRfUlRDLCAwKTsKLQlyZXR1cm4gQUNQSV9JTlRFUlJVUFRfSEFORExFRDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJ0Y193YWtlX3NldHVwKHZvaWQpCi17Ci0JYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9SVEMsIHJ0Y19oYW5kbGVyLCBOVUxMKTsKLQkvKgotCSAqIEFmdGVyIHRoZSBSVEMgaGFuZGxlciBpcyBpbnN0YWxsZWQsIHRoZSBGaXhlZF9SVEMgZXZlbnQgc2hvdWxkCi0JICogYmUgZGlzYWJsZWQuIE9ubHkgd2hlbiB0aGUgUlRDIGFsYXJtIGlzIHNldCB3aWxsIGl0IGJlIGVuYWJsZWQuCi0JICovCi0JYWNwaV9jbGVhcl9ldmVudChBQ1BJX0VWRU5UX1JUQyk7Ci0JYWNwaV9kaXNhYmxlX2V2ZW50KEFDUElfRVZFTlRfUlRDLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgcnRjX3dha2Vfb24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWFjcGlfY2xlYXJfZXZlbnQoQUNQSV9FVkVOVF9SVEMpOwotCWFjcGlfZW5hYmxlX2V2ZW50KEFDUElfRVZFTlRfUlRDLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgcnRjX3dha2Vfb2ZmKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlhY3BpX2Rpc2FibGVfZXZlbnQoQUNQSV9FVkVOVF9SVEMsIDApOwotfQotI2Vsc2UKLSNkZWZpbmUgcnRjX3dha2Vfc2V0dXAoKQlkb3t9d2hpbGUoMCkKLSNkZWZpbmUgcnRjX3dha2Vfb24JCU5VTEwKLSNkZWZpbmUgcnRjX3dha2Vfb2ZmCQlOVUxMCi0jZW5kaWYKLQotLyogRXZlcnkgQUNQSSBwbGF0Zm9ybSBoYXMgYSBtYzE0NjgxOCBjb21wYXRpYmxlICJjbW9zIHJ0YyIuICBIZXJlIHdlIGZpbmQKLSAqIGl0cyBkZXZpY2Ugbm9kZSBhbmQgcGFzcyBleHRyYSBjb25maWcgZGF0YS4gIFRoaXMgaGVscHMgaXRzIGRyaXZlciB1c2UKLSAqIGNhcGFiaWxpdGllcyB0aGF0IHRoZSBub3ctb2Jzb2xldGUgbWMxNDY4MTggZGlkbid0IGhhdmUsIGFuZCBpbmZvcm1zIGl0Ci0gKiB0aGF0IHRoaXMgYm9hcmQncyBSVEMgaXMgd2FrZXVwLWNhcGFibGUgKHBlciBBQ1BJIHNwZWMpLgotICovCi0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLQotc3RhdGljIHN0cnVjdCBjbW9zX3J0Y19ib2FyZF9pbmZvIHJ0Y19pbmZvOwotCi0KLS8qIFBOUCBkZXZpY2VzIGFyZSByZWdpc3RlcmVkIGluIGEgc3Vic3lzX2luaXRjYWxsKCk7Ci0gKiBBQ1BJIHNwZWNpZmllcyB0aGUgUE5QIElEcyB0byB1c2UuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9wbnAuaD4KLQotc3RhdGljIGludCBfX2luaXQgcG5wX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqaWRzW10gPSB7ICJQTlAwYjAwIiwgIlBOUDBiMDEiLCAiUE5QMGIwMiIsIH07Ci0Jc3RydWN0IHBucF9kZXYgKnBucCA9IHRvX3BucF9kZXYoZGV2KTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlkcyk7IGkrKykgewotCQlpZiAoY29tcGFyZV9wbnBfaWQocG5wLT5pZCwgaWRzW2ldKSAhPSAwKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZSAqX19pbml0IGdldF9ydGNfZGV2KHZvaWQpCi17Ci0JcmV0dXJuIGJ1c19maW5kX2RldmljZSgmcG5wX2J1c190eXBlLCBOVUxMLCBOVUxMLCBwbnBfbWF0Y2gpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX3J0Y19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gZ2V0X3J0Y19kZXYoKTsKLQotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gMDsKLQotCWlmIChkZXYpIHsKLQkJcnRjX3dha2Vfc2V0dXAoKTsKLQkJcnRjX2luZm8ud2FrZV9vbiA9IHJ0Y193YWtlX29uOwotCQlydGNfaW5mby53YWtlX29mZiA9IHJ0Y193YWtlX29mZjsKLQotCQkvKiB3b3JrYXJvdW5kIGJ1ZyBpbiBzb21lIEFDUEkgdGFibGVzICovCi0JCWlmIChhY3BpX2dibF9GQURULm1vbnRoX2FsYXJtICYmICFhY3BpX2dibF9GQURULmRheV9hbGFybSkgewotCQkJREJHKCJib2d1cyBGQURUIG1vbnRoX2FsYXJtXG4iKTsKLQkJCWFjcGlfZ2JsX0ZBRFQubW9udGhfYWxhcm0gPSAwOwotCQl9Ci0KLQkJcnRjX2luZm8ucnRjX2RheV9hbGFybSA9IGFjcGlfZ2JsX0ZBRFQuZGF5X2FsYXJtOwotCQlydGNfaW5mby5ydGNfbW9uX2FsYXJtID0gYWNwaV9nYmxfRkFEVC5tb250aF9hbGFybTsKLQkJcnRjX2luZm8ucnRjX2NlbnR1cnkgPSBhY3BpX2dibF9GQURULmNlbnR1cnk7Ci0KLQkJLyogTk9URTogIFM0X1JUQ19XQUtFIGlzIE5PVCBjdXJyZW50bHkgdXNlZnVsIHRvIExpbnV4ICovCi0JCWlmIChhY3BpX2dibF9GQURULmZsYWdzICYgQUNQSV9GQURUX1M0X1JUQ19XQUtFKQotCQkJcHJpbnRrKFBSRUZJWCAiUlRDIGNhbiB3YWtlIGZyb20gUzRcbiIpOwotCi0KLQkJZGV2LT5wbGF0Zm9ybV9kYXRhID0gJnJ0Y19pbmZvOwotCi0JCS8qIFJUQyBhbHdheXMgd2FrZXMgZnJvbSBTMS9TMi9TMywgYW5kIG9mdGVuIFM0L1NURCAqLwotCQlkZXZpY2VfaW5pdF93YWtldXAoZGV2LCAxKTsKLQotCQlwdXRfZGV2aWNlKGRldik7Ci0JfSBlbHNlCi0JCURCRygiUlRDIHVuYXZhaWxhYmxlP1xuIik7Ci0JcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChhY3BpX3J0Y19pbml0KTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2JzLmMgYi9kcml2ZXJzL2FjcGkvc2JzLmMKaW5kZXggMTBhMzY1MS4uN2IwMTFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Nicy5jCisrKyBiL2RyaXZlcnMvYWNwaS9zYnMuYwpAQCAtNDYzLDcgKzQ2Myw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhbGFybV9hdHRyID0gewotCS5hdHRyID0gey5uYW1lID0gImFsYXJtIiwgLm1vZGUgPSAwNjQ0LCAub3duZXIgPSBUSElTX01PRFVMRX0sCisJLmF0dHIgPSB7Lm5hbWUgPSAiYWxhcm0iLCAubW9kZSA9IDA2NDR9LAogCS5zaG93ID0gYWNwaV9iYXR0ZXJ5X2FsYXJtX3Nob3csCiAJLnN0b3JlID0gYWNwaV9iYXR0ZXJ5X2FsYXJtX3N0b3JlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zbGVlcC9wcm9jLmMgYi9kcml2ZXJzL2FjcGkvc2xlZXAvcHJvYy5jCmluZGV4IGJmNWIwNGQuLjYzMWVlMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC9wcm9jLmMKKysrIGIvZHJpdmVycy9hY3BpL3NsZWVwL3Byb2MuYwpAQCAtMTIwLDEzICsxMjAsMTMgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCEocnRjX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlCQ0RfVE9fQklOKHNlYyk7Ci0JCUJDRF9UT19CSU4obWluKTsKLQkJQkNEX1RPX0JJTihocik7Ci0JCUJDRF9UT19CSU4oZGF5KTsKLQkJQkNEX1RPX0JJTihtbyk7Ci0JCUJDRF9UT19CSU4oeXIpOwotCQlCQ0RfVE9fQklOKGNlbnQpOworCQlzZWMgPSBiY2QyYmluKHNlYyk7CisJCW1pbiA9IGJjZDJiaW4obWluKTsKKwkJaHIgPSBiY2QyYmluKGhyKTsKKwkJZGF5ID0gYmNkMmJpbihkYXkpOworCQltbyA9IGJjZDJiaW4obW8pOworCQl5ciA9IGJjZDJiaW4oeXIpOworCQljZW50ID0gYmNkMmJpbihjZW50KTsKIAl9CiAKIAkvKiB3ZSdyZSB0cnVzdGluZyB0aGUgRkFEVCAoc2VlIGFib3ZlKSAqLwpAQCAtMjA0LDcgKzIwNCw3IEBACiB7CiAJdTMyIHZhbCA9IENNT1NfUkVBRChvZmZzZXQpOwogCWlmICghKHJ0Y19jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJDRF9UT19CSU4odmFsKTsKKwkJdmFsID0gYmNkMmJpbih2YWwpOwogCXJldHVybiB2YWw7CiB9CiAKQEAgLTIxMiw3ICsyMTIsNyBAQAogc3RhdGljIHZvaWQgY21vc19iY2Rfd3JpdGUodTMyIHZhbCwgaW50IG9mZnNldCwgaW50IHJ0Y19jb250cm9sKQogewogCWlmICghKHJ0Y19jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJJTl9UT19CQ0QodmFsKTsKKwkJdmFsID0gYmluMmJjZCh2YWwpOwogCUNNT1NfV1JJVEUodmFsLCBvZmZzZXQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc3lzdGVtLmMgYi9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKaW5kZXggOTFkZWM0NC4uMjRlODBmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3N5c3RlbS5jCisrKyBiL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYwpAQCAtMTE1LDcgKzExNSw2IEBACiAJdGFibGVfYXR0ci0+YXR0ci5yZWFkID0gYWNwaV90YWJsZV9zaG93OwogCXRhYmxlX2F0dHItPmF0dHIuYXR0ci5uYW1lID0gdGFibGVfYXR0ci0+bmFtZTsKIAl0YWJsZV9hdHRyLT5hdHRyLmF0dHIubW9kZSA9IDA0NDQ7Ci0JdGFibGVfYXR0ci0+YXR0ci5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29mX3BsYXRmb3JtLmMgYi9kcml2ZXJzL2F0YS9wYXRhX29mX3BsYXRmb3JtLmMKaW5kZXggNDA4ZGEzMC4uMWYxOGFkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vZl9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb2ZfcGxhdGZvcm0uYwpAQCAtNTIsNyArNTIsNyBAQAogCiAJcmV0ID0gb2ZfaXJxX3RvX3Jlc291cmNlKGRuLCAwLCAmaXJxX3Jlcyk7CiAJaWYgKHJldCA9PSBOT19JUlEpCi0JCWlycV9yZXMuc3RhcnQgPSBpcnFfcmVzLmVuZCA9IC0xOworCQlpcnFfcmVzLnN0YXJ0ID0gaXJxX3Jlcy5lbmQgPSAwOwogCWVsc2UKIAkJaXJxX3Jlcy5mbGFncyA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCmluZGV4IDQxYjQzNjEuLjAyYjU5NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwpAQCAtMTQ4LDYgKzE0OCw2NCBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCisKK3N0cnVjdCBwY21jaWFfY29uZmlnX2NoZWNrIHsKKwl1bnNpZ25lZCBsb25nIGN0bF9iYXNlOworCWludCBza2lwX3ZjYzsKKwlpbnQgaXNfa21lOworfTsKKworc3RhdGljIGludCBwY21jaWFfY2hlY2tfb25lX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldiwKKwkJCQkgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJCSAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgcGNtY2lhX2NvbmZpZ19jaGVjayAqc3RrID0gcHJpdl9kYXRhOworCisJLyogQ2hlY2sgZm9yIG1hdGNoaW5nIFZjYywgdW5sZXNzIHdlJ3JlIGRlc3BlcmF0ZSAqLworCWlmICghc3RrLT5za2lwX3ZjYykgeworCQlpZiAoY2ZnLT52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQkJaWYgKHZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfSBlbHNlIGlmIChkZmx0LT52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQkJaWYgKHZjYyAhPSBkZmx0LT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDApCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisKKwlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBkZXYtPmNvbmYuVnBwID0gY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCWVsc2UgaWYgKGRmbHQtPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKKwkJcGRldi0+Y29uZi5WcHAgPSBkZmx0LT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCisJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CisJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87CisJCXBkZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcGRldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCXBkZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCWlmIChpby0+bndpbiA9PSAyKSB7CisJCQlwZGV2LT5pby5OdW1Qb3J0czEgPSA4OworCQkJcGRldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gKHN0ay0+aXNfa21lKSA/IDIgOiAxOworCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBkZXYsICZwZGV2LT5pbykgIT0gMCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCXN0ay0+Y3RsX2Jhc2UgPSBwZGV2LT5pby5CYXNlUG9ydDI7CisJCX0gZWxzZSBpZiAoKGlvLT5ud2luID09IDEpICYmIChpby0+d2luWzBdLmxlbiA+PSAxNikpIHsKKwkJCXBkZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gMDsKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwZGV2LCAmcGRldi0+aW8pICE9IDApCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlzdGstPmN0bF9iYXNlID0gcGRldi0+aW8uQmFzZVBvcnQxICsgMHgwZTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJLyogSWYgd2UndmUgZ290IHRoaXMgZmFyLCB3ZSdyZSBkb25lICovCisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKK30KKwogLyoqCiAgKglwY21jaWFfaW5pdF9vbmUJCS0JYXR0YWNoIGEgUENNQ0lBIGludGVyZmFjZQogICoJQHBkZXY6IHBjbWNpYSBkZXZpY2UKQEAgLTE2MSwxOSArMjE5LDExIEBACiAJc3RydWN0IGF0YV9ob3N0ICpob3N0OwogCXN0cnVjdCBhdGFfcG9ydCAqYXA7CiAJc3RydWN0IGF0YV9wY21jaWFfaW5mbyAqaW5mbzsKLQl0dXBsZV90IHR1cGxlOwotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIHNob3J0IGJ1ZlsxMjhdOwotCQljaXNwYXJzZV90IHBhcnNlOwotCQljb25maWdfaW5mb190IGNvbmY7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdDsKLQl9ICpzdGsgPSBOVUxMOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZzsKLQlpbnQgcGFzcywgbGFzdF9yZXQgPSAwLCBsYXN0X2ZuID0gMCwgaXNfa21lID0gMCwgcmV0ID0gLUVOT01FTSwgcDsKKwlzdHJ1Y3QgcGNtY2lhX2NvbmZpZ19jaGVjayAqc3RrID0gTlVMTDsKKwlpbnQgbGFzdF9yZXQgPSAwLCBsYXN0X2ZuID0gMCwgaXNfa21lID0gMCwgcmV0ID0gLUVOT01FTSwgcDsKIAl1bnNpZ25lZCBsb25nIGlvX2Jhc2UsIGN0bF9iYXNlOwogCXZvaWQgX19pb21lbSAqaW9fYWRkciwgKmN0bF9hZGRyOwogCWludCBuX3BvcnRzID0gMTsKLQogCXN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zICpvcHMgPSAmcGNtY2lhX3BvcnRfb3BzOwogCiAJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC0xOTMsOTYgKzI0MywyNyBAQAogCXBkZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKIAlwZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotCS8qIEFsbG9jYXRlIHJlc291cmUgcHJvYmluZyBzdHJ1Y3R1cmVzICovCi0KLQlzdGsgPSBremFsbG9jKHNpemVvZigqc3RrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdGspCi0JCWdvdG8gb3V0MTsKLQotCWNmZyA9ICZzdGstPnBhcnNlLmNmdGFibGVfZW50cnk7Ci0KLQkvKiBUdXBsZXMgd2UgYXJlIHdhbGtpbmcgKi8KLQl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopJnN0ay0+YnVmOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7Ci0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0KIAkvKiBTZWUgaWYgd2UgaGF2ZSBhIG1hbnVmYWN0dXJlciBpZGVudGlmaWVyLiBVc2UgaXQgdG8gc2V0IGlzX2ttZSBmb3IKIAkgICB2ZW5kb3IgcXVpcmtzICovCiAJaXNfa21lID0gKChwZGV2LT5tYW5mX2lkID09IE1BTkZJRF9LTUUpICYmCiAJCSAgKChwZGV2LT5jYXJkX2lkID09IFBST0RJRF9LTUVfS1hMQzAwNV9BKSB8fAogCQkgICAocGRldi0+Y2FyZF9pZCA9PSBQUk9ESURfS01FX0tYTEMwMDVfQikpKTsKIAotCS8qIE5vdCBzdXJlIGlmIHRoaXMgaXMgcmlnaHQuLi4gbG9vayB1cCB0aGUgY3VycmVudCBWY2MgKi8KLQlDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8ocGRldiwgJnN0ay0+Y29uZikpOwotLyoJbGluay0+Y29uZi5WY2MgPSBzdGstPmNvbmYuVmNjOyAqLworCS8qIEFsbG9jYXRlIHJlc291cmUgcHJvYmluZyBzdHJ1Y3R1cmVzICovCiAKLQlwYXNzID0gaW9fYmFzZSA9IGN0bF9iYXNlID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKHBkZXYsICZ0dXBsZSkpOworCXN0ayA9IGt6YWxsb2Moc2l6ZW9mKCpzdGspLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0aykKKwkJZ290byBvdXQxOworCXN0ay0+aXNfa21lID0gaXNfa21lOworCXN0ay0+c2tpcF92Y2MgPSBpb19iYXNlID0gY3RsX2Jhc2UgPSAwOwogCi0JLyogTm93IG11bmNoIHRoZSByZXNvdXJjZXMgbG9va2luZyBmb3IgYSBzdWl0YWJsZSBzZXQgKi8KLQl3aGlsZSAoMSkgewotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKHBkZXYsICZ0dXBsZSkgIT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJaWYgKHBjbWNpYV9wYXJzZV90dXBsZShwZGV2LCAmdHVwbGUsICZzdGstPnBhcnNlKSAhPSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCQkvKiBDaGVjayBmb3IgbWF0Y2hpbmcgVmNjLCB1bmxlc3Mgd2UncmUgZGVzcGVyYXRlICovCi0JCWlmICghcGFzcykgewotCQkJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJCQlpZiAoc3RrLT5jb25mLlZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkKLQkJCQkJZ290byBuZXh0X2VudHJ5OwotCQkJfSBlbHNlIGlmIChzdGstPmRmbHQudmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJCQlpZiAoc3RrLT5jb25mLlZjYyAhPSBzdGstPmRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKQotCQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlwZGV2LT5jb25mLlZwcCA9IGNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKLQkJZWxzZSBpZiAoc3RrLT5kZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCXBkZXYtPmNvbmYuVnBwID0gc3RrLT5kZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7Ci0KLQkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoc3RrLT5kZmx0LmlvLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZzdGstPmRmbHQuaW87Ci0JCQlwZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKLQkJCXBkZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJCXBkZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJCXBkZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCQlpZiAoaW8tPm53aW4gPT0gMikgewotCQkJCXBkZXYtPmlvLk51bVBvcnRzMSA9IDg7Ci0JCQkJcGRldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJCXBkZXYtPmlvLk51bVBvcnRzMiA9IChpc19rbWUpID8gMiA6IDE7Ci0JCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBkZXYsICZwZGV2LT5pbykgIT0gMCkKLQkJCQkJZ290byBuZXh0X2VudHJ5OwotCQkJCWlvX2Jhc2UgPSBwZGV2LT5pby5CYXNlUG9ydDE7Ci0JCQkJY3RsX2Jhc2UgPSBwZGV2LT5pby5CYXNlUG9ydDI7Ci0JCQl9IGVsc2UgaWYgKChpby0+bndpbiA9PSAxKSAmJiAoaW8tPndpblswXS5sZW4gPj0gMTYpKSB7Ci0JCQkJcGRldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0JCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gMDsKLQkJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocGRldiwgJnBkZXYtPmlvKSAhPSAwKQotCQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQkJaW9fYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MTsKLQkJCQljdGxfYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MSArIDB4MGU7Ci0JCQl9IGVsc2UKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQkvKiBJZiB3ZSd2ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGRvbmUgKi8KLQkJCWJyZWFrOwotCQl9Ci1uZXh0X2VudHJ5OgotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCi0JCQltZW1jcHkoJnN0ay0+ZGZsdCwgY2ZnLCBzaXplb2Yoc3RrLT5kZmx0KSk7Ci0JCWlmIChwYXNzKSB7Ci0JCQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShwZGV2LCAmdHVwbGUpKTsKLQkJfSBlbHNlIGlmIChwY21jaWFfZ2V0X25leHRfdHVwbGUocGRldiwgJnR1cGxlKSAhPSAwKSB7Ci0JCQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKHBkZXYsICZ0dXBsZSkpOwotCQkJbWVtc2V0KCZzdGstPmRmbHQsIDAsIHNpemVvZihzdGstPmRmbHQpKTsKLQkJCXBhc3MrKzsKLQkJfQorCWlmIChwY21jaWFfbG9vcF9jb25maWcocGRldiwgcGNtY2lhX2NoZWNrX29uZV9jb25maWcsIHN0aykpIHsKKwkJc3RrLT5za2lwX3ZjYyA9IDE7CisJCWlmIChwY21jaWFfbG9vcF9jb25maWcocGRldiwgcGNtY2lhX2NoZWNrX29uZV9jb25maWcsIHN0aykpCisJCQlnb3RvIGZhaWxlZDsgLyogTm8gc3VpdGFibGUgY29uZmlnIGZvdW5kICovCiAJfQotCisJaW9fYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MTsKKwljdGxfYmFzZSA9IHN0ay0+Y3RsX2Jhc2U7CiAJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKHBkZXYsICZwZGV2LT5pcnEpKTsKIAlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihwZGV2LCAmcGRldi0+Y29uZikpOwogCkBAIC0zODQsNiArMzY1LDcgQEAKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwMzIsIDB4MDcwNCksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDMyLCAweDI5MDQpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDA0NSwgMHgwNDAxKSwJLyogU2FuRGlzayBDRkEgKi8KKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwNGYsIDB4MDAwMCksCS8qIEtpbmdzdG9uICovCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDk3LCAweDE2MjApLCAJLyogVEkgZW11bGF0ZWQgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwOTgsIDB4MDAwMCksCS8qIFRvc2hpYmEgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwYTQsIDB4MDAyZCksCkBAIC00MDQsOSArMzg2LDkgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiRVhQICAgIiwgIkNELVJPTSIsIDB4MGE1YzUyZmQsIDB4NjY1MzY1OTEpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJFWFAgICAiLCAiUG5QSURFIiwgMHgwYTVjNTJmZCwgMHgwYzY5NDcyOCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkZSRUVDT00iLCAiUENDQVJELUlERSIsIDB4NTcxNGNiZjcsIDB4NDhlMGFiOGUpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJIeXBlcnN0b25lIiwgIk1vZGVsMSIsIDB4M2Q1YjllZjUsIDB4Y2E2YWI0MjApLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJISVRBQ0hJIiwgIkZMQVNIIiwgMHhmNGY0Mzk0OSwgMHg5ZWI4NmFhZSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkhJVEFDSEkiLCAibWljcm9kcml2ZSIsIDB4ZjRmNDM5NDksIDB4YTZkNzYxNzgpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJIeXBlcnN0b25lIiwgIk1vZGVsMSIsIDB4M2Q1YjllZjUsIDB4Y2E2YWI0MjApLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJJQk0iLCAibWljcm9kcml2ZSIsIDB4YjU2OWE2ZTUsIDB4YTZkNzYxNzgpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJJQk0iLCAiSUJNMTdKU1NGUDIwIiwgMHhiNTY5YTZlNSwgMHhmMjUwODc1MyksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIktJTkdTVE9OIiwgIkNGOEdCIiwgMHgyZTZkMTgyOSwgMHhhY2JlNjgyZSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvS2NvbmZpZyBiL2RyaXZlcnMvYmFzZS9LY29uZmlnCmluZGV4IDYzMThmNmIuLmQ4ZThjNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYmFzZS9LY29uZmlnCkBAIC01NCw3ICs1NCw3IEBACiAJICBzdWNoIGZpcm13YXJlLCBhbmQgZG8gbm90IHdpc2ggdG8gdXNlIGFuIGluaXRyZC4KIAogCSAgVGhpcyBzaW5nbGUgb3B0aW9uIGNvbnRyb2xzIHRoZSBpbmNsdXNpb24gb2YgZmlybXdhcmUgZm9yCi0JICBldmVyeSBkcml2ZXIgd2hpY2ggdXNlZXMgcmVxdWVzdF9maXJtYXJlKCkgYW5kIHNoaXBzIGl0cworCSAgZXZlcnkgZHJpdmVyIHdoaWNoIHVzZXMgcmVxdWVzdF9maXJtYXJlKCkgYW5kIHNoaXBzIGl0cwogCSAgZmlybXdhcmUgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgdG8gYXZvaWQgYSBwcm9saWZlcmF0aW9uCiAJICBvZiAnSW5jbHVkZSBmaXJtd2FyZSBmb3IgeHh4IGRldmljZScgb3B0aW9ucy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2J1cy5jIGIvZHJpdmVycy9iYXNlL2J1cy5jCmluZGV4IGVmNTIyYWUuLjVhZWUxYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9idXMuYworKysgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKQEAgLTMzMyw5ICszMzMsNyBAQAogewogCWNvbnN0IGNoYXIgKm5hbWUgPSBkYXRhOwogCi0JaWYgKHN0cmNtcChuYW1lLCBkZXYtPmJ1c19pZCkgPT0gMCkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHN5c2ZzX3N0cmVxKG5hbWUsIGRldi0+YnVzX2lkKTsKIH0KIAogLyoqCkBAIC05ODIsNiArOTgwLDU2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChidXNfZ2V0X2RldmljZV9rbGlzdCk7CiAKKy8qCisgKiBZZXMsIHRoaXMgZm9yY2FibHkgYnJlYWtzIHRoZSBrbGlzdCBhYnN0cmFjdGlvbiB0ZW1wb3JhcmlseS4gIEl0CisgKiBqdXN0IHdhbnRzIHRvIHNvcnQgdGhlIGtsaXN0LCBub3QgY2hhbmdlIHJlZmVyZW5jZSBjb3VudHMgYW5kCisgKiB0YWtlL2Ryb3AgbG9ja3MgcmFwaWRseSBpbiB0aGUgcHJvY2Vzcy4gIEl0IGRvZXMgYWxsIHRoaXMgd2hpbGUKKyAqIGhvbGRpbmcgdGhlIGxvY2sgZm9yIHRoZSBsaXN0LCBzbyBvYmplY3RzIGNhbid0IG90aGVyd2lzZSBiZQorICogYWRkZWQvcmVtb3ZlZCB3aGlsZSB3ZSdyZSBzd2l6emxpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGRldmljZV9pbnNlcnRpb25fc29ydF9rbGlzdChzdHJ1Y3QgZGV2aWNlICphLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCQlpbnQgKCpjb21wYXJlKShjb25zdCBzdHJ1Y3QgZGV2aWNlICphLAorCQkJCQkJCWNvbnN0IHN0cnVjdCBkZXZpY2UgKmIpKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgZGV2aWNlICpiOworCisJbGlzdF9mb3JfZWFjaChwb3MsIGxpc3QpIHsKKwkJbiA9IGNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBrbGlzdF9ub2RlLCBuX25vZGUpOworCQliID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJCWlmIChjb21wYXJlKGEsIGIpIDw9IDApIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZhLT5rbm9kZV9idXMubl9ub2RlLAorCQkJCSAgICAgICAmYi0+a25vZGVfYnVzLm5fbm9kZSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJbGlzdF9tb3ZlX3RhaWwoJmEtPmtub2RlX2J1cy5uX25vZGUsIGxpc3QpOworfQorCit2b2lkIGJ1c19zb3J0X2JyZWFkdGhmaXJzdChzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywKKwkJCSAgIGludCAoKmNvbXBhcmUpKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmEsCisJCQkJCSAgY29uc3Qgc3RydWN0IGRldmljZSAqYikpCit7CisJTElTVF9IRUFEKHNvcnRlZF9kZXZpY2VzKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7CisJc3RydWN0IGtsaXN0X25vZGUgKm47CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBrbGlzdCAqZGV2aWNlX2tsaXN0OworCisJZGV2aWNlX2tsaXN0ID0gYnVzX2dldF9kZXZpY2Vfa2xpc3QoYnVzKTsKKworCXNwaW5fbG9jaygmZGV2aWNlX2tsaXN0LT5rX2xvY2spOworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmRldmljZV9rbGlzdC0+a19saXN0KSB7CisJCW4gPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3Qga2xpc3Rfbm9kZSwgbl9ub2RlKTsKKwkJZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJCWRldmljZV9pbnNlcnRpb25fc29ydF9rbGlzdChkZXYsICZzb3J0ZWRfZGV2aWNlcywgY29tcGFyZSk7CisJfQorCWxpc3Rfc3BsaWNlKCZzb3J0ZWRfZGV2aWNlcywgJmRldmljZV9rbGlzdC0+a19saXN0KTsKKwlzcGluX3VubG9jaygmZGV2aWNlX2tsaXN0LT5rX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnVzX3NvcnRfYnJlYWR0aGZpcnN0KTsKKwogaW50IF9faW5pdCBidXNlc19pbml0KHZvaWQpCiB7CiAJYnVzX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJidXMiLCAmYnVzX3VldmVudF9vcHMsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggYjk4Y2IxNC4uOGMyY2MyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC01MjMsMTEgKzUyMywxNiBAQAogICogZGV2aWNlX2luaXRpYWxpemUgLSBpbml0IGRldmljZSBzdHJ1Y3R1cmUuCiAgKiBAZGV2OiBkZXZpY2UuCiAgKgotICogVGhpcyBwcmVwYXJlcyB0aGUgZGV2aWNlIGZvciB1c2UgYnkgb3RoZXIgbGF5ZXJzLAotICogaW5jbHVkaW5nIGFkZGluZyBpdCB0byB0aGUgZGV2aWNlIGhpZXJhcmNoeS4KKyAqIFRoaXMgcHJlcGFyZXMgdGhlIGRldmljZSBmb3IgdXNlIGJ5IG90aGVyIGxheWVycyBieSBpbml0aWFsaXppbmcKKyAqIGl0cyBmaWVsZHMuCiAgKiBJdCBpcyB0aGUgZmlyc3QgaGFsZiBvZiBkZXZpY2VfcmVnaXN0ZXIoKSwgaWYgY2FsbGVkIGJ5Ci0gKiB0aGF0LCB0aG91Z2ggaXQgY2FuIGFsc28gYmUgY2FsbGVkIHNlcGFyYXRlbHksIHNvIG9uZQotICogbWF5IHVzZSBAZGV2J3MgZmllbGRzIChlLmcuIHRoZSByZWZjb3VudCkuCisgKiB0aGF0IGZ1bmN0aW9uLCB0aG91Z2ggaXQgY2FuIGFsc28gYmUgY2FsbGVkIHNlcGFyYXRlbHksIHNvIG9uZQorICogbWF5IHVzZSBAZGV2J3MgZmllbGRzLiBJbiBwYXJ0aWN1bGFyLCBnZXRfZGV2aWNlKCkvcHV0X2RldmljZSgpCisgKiBtYXkgYmUgdXNlZCBmb3IgcmVmZXJlbmNlIGNvdW50aW5nIG9mIEBkZXYgYWZ0ZXIgY2FsbGluZyB0aGlzCisgKiBmdW5jdGlvbi4KKyAqCisgKiBOT1RFOiBVc2UgcHV0X2RldmljZSgpIHRvIGdpdmUgdXAgeW91ciByZWZlcmVuY2UgaW5zdGVhZCBvZiBmcmVlaW5nCisgKiBAZGV2IGRpcmVjdGx5IG9uY2UgeW91IGhhdmUgY2FsbGVkIHRoaXMgZnVuY3Rpb24uCiAgKi8KIHZvaWQgZGV2aWNlX2luaXRpYWxpemUoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtODM1LDkgKzg0MCwxMyBAQAogICogVGhpcyBpcyBwYXJ0IDIgb2YgZGV2aWNlX3JlZ2lzdGVyKCksIHRob3VnaCBtYXkgYmUgY2FsbGVkCiAgKiBzZXBhcmF0ZWx5IF9pZmZfIGRldmljZV9pbml0aWFsaXplKCkgaGFzIGJlZW4gY2FsbGVkIHNlcGFyYXRlbHkuCiAgKgotICogVGhpcyBhZGRzIGl0IHRvIHRoZSBrb2JqZWN0IGhpZXJhcmNoeSB2aWEga29iamVjdF9hZGQoKSwgYWRkcyBpdAorICogVGhpcyBhZGRzIEBkZXYgdG8gdGhlIGtvYmplY3QgaGllcmFyY2h5IHZpYSBrb2JqZWN0X2FkZCgpLCBhZGRzIGl0CiAgKiB0byB0aGUgZ2xvYmFsIGFuZCBzaWJsaW5nIGxpc3RzIGZvciB0aGUgZGV2aWNlLCB0aGVuCiAgKiBhZGRzIGl0IHRvIHRoZSBvdGhlciByZWxldmFudCBzdWJzeXN0ZW1zIG9mIHRoZSBkcml2ZXIgbW9kZWwuCisgKgorICogTk9URTogX05ldmVyXyBkaXJlY3RseSBmcmVlIEBkZXYgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBldmVuCisgKiBpZiBpdCByZXR1cm5lZCBhbiBlcnJvciEgQWx3YXlzIHVzZSBwdXRfZGV2aWNlKCkgdG8gZ2l2ZSB1cCB5b3VyCisgKiByZWZlcmVuY2UgaW5zdGVhZC4KICAqLwogaW50IGRldmljZV9hZGQoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtOTY1LDYgKzk3NCwxMCBAQAogICogSS5lLiB5b3Ugc2hvdWxkIG9ubHkgY2FsbCB0aGUgdHdvIGhlbHBlcnMgc2VwYXJhdGVseSBpZgogICogaGF2ZSBhIGNsZWFybHkgZGVmaW5lZCBuZWVkIHRvIHVzZSBhbmQgcmVmY291bnQgdGhlIGRldmljZQogICogYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBoaWVyYXJjaHkuCisgKgorICogTk9URTogX05ldmVyXyBkaXJlY3RseSBmcmVlIEBkZXYgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBldmVuCisgKiBpZiBpdCByZXR1cm5lZCBhbiBlcnJvciEgQWx3YXlzIHVzZSBwdXRfZGV2aWNlKCkgdG8gZ2l2ZSB1cCB0aGUKKyAqIHJlZmVyZW5jZSBpbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIGluc3RlYWQuCiAgKi8KIGludCBkZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMTI0Myw3ICsxMjU2LDcgQEAKIAlyZXR1cm4gZGV2OwogCiBlcnJvcjoKLQlrZnJlZShkZXYpOworCXB1dF9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX2NyZWF0ZV92YXJncyk7CkBAIC0xMzE0LDYgKzEzMjcsMTEgQEAKICAqIGRldmljZV9yZW5hbWUgLSByZW5hbWVzIGEgZGV2aWNlCiAgKiBAZGV2OiB0aGUgcG9pbnRlciB0byB0aGUgc3RydWN0IGRldmljZSB0byBiZSByZW5hbWVkCiAgKiBAbmV3X25hbWU6IHRoZSBuZXcgbmFtZSBvZiB0aGUgZGV2aWNlCisgKgorICogSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gcHJvdmlkZSBtdXR1YWwKKyAqIGV4Y2x1c2lvbiBiZXR3ZWVuIHR3byBkaWZmZXJlbnQgY2FsbHMgb2YgZGV2aWNlX3JlbmFtZQorICogb24gdGhlIHNhbWUgZGV2aWNlIHRvIGVuc3VyZSB0aGF0IG5ld19uYW1lIGlzIHZhbGlkIGFuZAorICogd29uJ3QgY29uZmxpY3Qgd2l0aCBvdGhlciBkZXZpY2VzLgogICovCiBpbnQgZGV2aWNlX3JlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKm5ld19uYW1lKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RkLmMgYi9kcml2ZXJzL2Jhc2UvZGQuYwppbmRleCAzYWM0NDNiLi4yMGZlYmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZGQuYworKysgYi9kcml2ZXJzL2Jhc2UvZGQuYwpAQCAtMjU3LDYgKzI1Nyw5IEBACiAJICogaXMgYW4gZXJyb3IuCiAJICovCiAKKwlpZiAoZHJ2LT5idXMtPm1hdGNoICYmICFkcnYtPmJ1cy0+bWF0Y2goZGV2LCBkcnYpKQorCQlyZXR1cm4gMDsKKwogCWlmIChkZXYtPnBhcmVudCkJLyogTmVlZGVkIGZvciBVU0IgKi8KIAkJZG93bigmZGV2LT5wYXJlbnQtPnNlbSk7CiAJZG93bigmZGV2LT5zZW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwppbmRleCBjOWM5MmIwLi5iN2U1NzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworKysgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwpAQCAtMTY0LDggKzE2NCw3IEBACiAJCX0KIAkJLyogZmFsbHRocm91Z2ggKi8KIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmV4cGVjdGVkIHZhbHVlICglZClcbiIsIF9fZnVuY19fLAotCQkgICAgICAgbG9hZGluZyk7CisJCWRldl9lcnIoZGV2LCAiJXM6IHVuZXhwZWN0ZWQgdmFsdWUgKCVkKVxuIiwgX19mdW5jX18sIGxvYWRpbmcpOwogCQkvKiBmYWxsdGhyb3VnaCAqLwogCWNhc2UgLTE6CiAJCWZ3X2xvYWRfYWJvcnQoZndfcHJpdik7CkBAIC0zMDksNyArMzA4LDcgQEAKIAkqZGV2X3AgPSBOVUxMOwogCiAJaWYgKCFmd19wcml2IHx8ICFmX2RldikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBrbWFsbG9jIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlkZXZfZXJyKGRldmljZSwgIiVzOiBrbWFsbG9jIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2tmcmVlOwogCX0KQEAgLTMyOSw4ICszMjgsNyBAQAogCWZfZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAxOwogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcihmX2Rldik7CiAJaWYgKHJldHZhbCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLAotCQkgICAgICAgX19mdW5jX18pOworCQlkZXZfZXJyKGRldmljZSwgIiVzOiBkZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyb3Jfa2ZyZWU7CiAJfQogCSpkZXZfcCA9IGZfZGV2OwpAQCAtMzYzLDE1ICszNjEsMTMgQEAKIAlmd19wcml2LT5mdyA9IGZ3OwogCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmZl9kZXYtPmtvYmosICZmd19wcml2LT5hdHRyX2RhdGEpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogc3lzZnNfY3JlYXRlX2Jpbl9maWxlIGZhaWxlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKKwkJZGV2X2VycihkZXZpY2UsICIlczogc3lzZnNfY3JlYXRlX2Jpbl9maWxlIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIGVycm9yX3VucmVnOwogCX0KIAogCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZShmX2RldiwgJmRldl9hdHRyX2xvYWRpbmcpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2aWNlX2NyZWF0ZV9maWxlIGZhaWxlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKKwkJZGV2X2VycihkZXZpY2UsICIlczogZGV2aWNlX2NyZWF0ZV9maWxlIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIGVycm9yX3VucmVnOwogCX0KIApAQCAtNDAxLDggKzM5Nyw4IEBACiAKIAkqZmlybXdhcmVfcCA9IGZpcm13YXJlID0ga3phbGxvYyhzaXplb2YoKmZpcm13YXJlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaXJtd2FyZSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBrbWFsbG9jKHN0cnVjdCBmaXJtd2FyZSkgZmFpbGVkXG4iLAotCQkgICAgICAgX19mdW5jX18pOworCQlkZXZfZXJyKGRldmljZSwgIiVzOiBrbWFsbG9jKHN0cnVjdCBmaXJtd2FyZSkgZmFpbGVkXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CkBAIC00MTEsMTUgKzQwNywxNSBAQAogCSAgICAgYnVpbHRpbisrKSB7CiAJCWlmIChzdHJjbXAobmFtZSwgYnVpbHRpbi0+bmFtZSkpCiAJCQljb250aW51ZTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZmlybXdhcmU6IHVzaW5nIGJ1aWx0LWluIGZpcm13YXJlICVzXG4iLAotCQkgICAgICAgbmFtZSk7CisJCWRldl9pbmZvKGRldmljZSwgImZpcm13YXJlOiB1c2luZyBidWlsdC1pbiBmaXJtd2FyZSAlc1xuIiwKKwkJCSBuYW1lKTsKIAkJZmlybXdhcmUtPnNpemUgPSBidWlsdGluLT5zaXplOwogCQlmaXJtd2FyZS0+ZGF0YSA9IGJ1aWx0aW4tPmRhdGE7CiAJCXJldHVybiAwOwogCX0KIAogCWlmICh1ZXZlbnQpCi0JCXByaW50ayhLRVJOX0lORk8gImZpcm13YXJlOiByZXF1ZXN0aW5nICVzXG4iLCBuYW1lKTsKKwkJZGV2X2luZm8oZGV2aWNlLCAiZmlybXdhcmU6IHJlcXVlc3RpbmcgJXNcbiIsIG5hbWUpOwogCiAJcmV0dmFsID0gZndfc2V0dXBfZGV2aWNlKGZpcm13YXJlLCAmZl9kZXYsIG5hbWUsIGRldmljZSwgdWV2ZW50KTsKIAlpZiAocmV0dmFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCmluZGV4IGFmMGQxNzUuLjUyNjBlOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYworKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlIDxsaW51eC9tZW1vcnlfaG90cGx1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMzI1LDcgKzMyNyw3IEBACiAKIAlyZXR1cm4gY291bnQ7CiB9Ci1zdGF0aWMgQ0xBU1NfQVRUUihwcm9iZSwgMDcwMCwgTlVMTCwgbWVtb3J5X3Byb2JlX3N0b3JlKTsKK3N0YXRpYyBDTEFTU19BVFRSKHByb2JlLCBTX0lXVVNSLCBOVUxMLCBtZW1vcnlfcHJvYmVfc3RvcmUpOwogCiBzdGF0aWMgaW50IG1lbW9yeV9wcm9iZV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jIGIvZHJpdmVycy9iYXNlL25vZGUuYwppbmRleCA1MTE2Yjc4Li5mNTIwNzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3Mgbm9kZV9jbGFzcyA9IHsKIAkubmFtZSA9ICJub2RlIiwKQEAgLTYxLDM0ICs2Miw1MiBAQAogCXNpX21lbWluZm9fbm9kZSgmaSwgbmlkKTsKIAogCW4gPSBzcHJpbnRmKGJ1ZiwgIlxuIgotCQkgICAgICAgIk5vZGUgJWQgTWVtVG90YWw6ICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBNZW1GcmVlOiAgICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE1lbVVzZWQ6ICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgQWN0aXZlOiAgICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBJbmFjdGl2ZTogICAgICU4bHUga0JcbiIKLSNpZmRlZiBDT05GSUdfSElHSE1FTQotCQkgICAgICAgIk5vZGUgJWQgSGlnaFRvdGFsOiAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBIaWdoRnJlZTogICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIExvd1RvdGFsOiAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgTG93RnJlZTogICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBNZW1Ub3RhbDogICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgTWVtRnJlZTogICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE1lbVVzZWQ6ICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBBY3RpdmU6ICAgICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgSW5hY3RpdmU6ICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEFjdGl2ZShhbm9uKTogICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBJbmFjdGl2ZShhbm9uKTogJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgQWN0aXZlKGZpbGUpOiAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEluYWN0aXZlKGZpbGUpOiAlOGx1IGtCXG4iCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCQkgICAgICAgIk5vZGUgJWQgVW5ldmljdGFibGU6ICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE1sb2NrZWQ6ICAgICAgICAlOGx1IGtCXG4iCiAjZW5kaWYKLQkJICAgICAgICJOb2RlICVkIERpcnR5OiAgICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgV3JpdGViYWNrOiAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBGaWxlUGFnZXM6ICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE1hcHBlZDogICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgQW5vblBhZ2VzOiAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBQYWdlVGFibGVzOiAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE5GU19VbnN0YWJsZTogJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgQm91bmNlOiAgICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBXcml0ZWJhY2tUbXA6ICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIFNsYWI6ICAgICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgU1JlY2xhaW1hYmxlOiAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBTVW5yZWNsYWltOiAgICU4bHUga0JcbiIsCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJICAgICAgICJOb2RlICVkIEhpZ2hUb3RhbDogICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBIaWdoRnJlZTogICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgTG93VG90YWw6ICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIExvd0ZyZWU6ICAgICAgICAlOGx1IGtCXG4iCisjZW5kaWYKKwkJICAgICAgICJOb2RlICVkIERpcnR5OiAgICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBXcml0ZWJhY2s6ICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgRmlsZVBhZ2VzOiAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE1hcHBlZDogICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBBbm9uUGFnZXM6ICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgUGFnZVRhYmxlczogICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE5GU19VbnN0YWJsZTogICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBCb3VuY2U6ICAgICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgV3JpdGViYWNrVG1wOiAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIFNsYWI6ICAgICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBTUmVjbGFpbWFibGU6ICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgU1VucmVjbGFpbTogICAgICU4bHUga0JcbiIsCiAJCSAgICAgICBuaWQsIEsoaS50b3RhbHJhbSksCiAJCSAgICAgICBuaWQsIEsoaS5mcmVlcmFtKSwKIAkJICAgICAgIG5pZCwgSyhpLnRvdGFscmFtIC0gaS5mcmVlcmFtKSwKLQkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9BQ1RJVkUpKSwKLQkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9BTk9OKSArCisJCQkJbm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQUNUSVZFX0ZJTEUpKSwKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRV9BTk9OKSArCisJCQkJbm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfRklMRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9BTk9OKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfQU5PTikpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9GSUxFKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfRklMRSkpLAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9VTkVWSUNUQUJMRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX01MT0NLKSksCisjZW5kaWYKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCQkgICAgICAgbmlkLCBLKGkudG90YWxoaWdoKSwKIAkJICAgICAgIG5pZCwgSyhpLmZyZWVoaWdoKSwKQEAgLTE3Myw2ICsxOTIsOCBAQAogCQlzeXNkZXZfY3JlYXRlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfbWVtaW5mbyk7CiAJCXN5c2Rldl9jcmVhdGVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9udW1hc3RhdCk7CiAJCXN5c2Rldl9jcmVhdGVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9kaXN0YW5jZSk7CisKKwkJc2Nhbl91bmV2aWN0YWJsZV9yZWdpc3Rlcl9ub2RlKG5vZGUpOwogCX0KIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xOTIsNiArMjEzLDggQEAKIAlzeXNkZXZfcmVtb3ZlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfbnVtYXN0YXQpOwogCXN5c2Rldl9yZW1vdmVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9kaXN0YW5jZSk7CiAKKwlzY2FuX3VuZXZpY3RhYmxlX3VucmVnaXN0ZXJfbm9kZShub2RlKTsKKwogCXN5c2Rldl91bnJlZ2lzdGVyKCZub2RlLT5zeXNkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IDNmOTQwMzkuLmRmY2JmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC00MiwxMCArNDIsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9yZXNvdXJjZXM7IGkrKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpXTsKIAotCQlpZiAoKHItPmZsYWdzICYgKElPUkVTT1VSQ0VfSU98SU9SRVNPVVJDRV9NRU18Ci0JCQkJIElPUkVTT1VSQ0VfSVJRfElPUkVTT1VSQ0VfRE1BKSkgPT0gdHlwZSkKLQkJCWlmIChudW0tLSA9PSAwKQotCQkJCXJldHVybiByOworCQlpZiAodHlwZSA9PSByZXNvdXJjZV90eXBlKHIpICYmIG51bS0tID09IDApCisJCQlyZXR1cm4gcjsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC03OCwxMCArNzYsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9yZXNvdXJjZXM7IGkrKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpXTsKIAotCQlpZiAoKHItPmZsYWdzICYgKElPUkVTT1VSQ0VfSU98SU9SRVNPVVJDRV9NRU18Ci0JCQkJIElPUkVTT1VSQ0VfSVJRfElPUkVTT1VSQ0VfRE1BKSkgPT0gdHlwZSkKLQkJCWlmICghc3RyY21wKHItPm5hbWUsIG5hbWUpKQotCQkJCXJldHVybiByOworCQlpZiAodHlwZSA9PSByZXNvdXJjZV90eXBlKHIpICYmICFzdHJjbXAoci0+bmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gcjsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yNTksOSArMjU1LDkgQEAKIAogCQlwID0gci0+cGFyZW50OwogCQlpZiAoIXApIHsKLQkJCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQorCQkJaWYgKHJlc291cmNlX3R5cGUocikgPT0gSU9SRVNPVVJDRV9NRU0pCiAJCQkJcCA9ICZpb21lbV9yZXNvdXJjZTsKLQkJCWVsc2UgaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJCWVsc2UgaWYgKHJlc291cmNlX3R5cGUocikgPT0gSU9SRVNPVVJDRV9JTykKIAkJCQlwID0gJmlvcG9ydF9yZXNvdXJjZTsKIAkJfQogCkBAIC0yODIsOSArMjc4LDE0IEBACiAJCXJldHVybiByZXQ7CiAKICBmYWlsZWQ6Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQlpZiAocGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiAoSU9SRVNPVVJDRV9NRU18SU9SRVNPVVJDRV9JTykpCi0JCQlyZWxlYXNlX3Jlc291cmNlKCZwZGV2LT5yZXNvdXJjZVtpXSk7CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZwZGV2LT5yZXNvdXJjZVtpXTsKKwkJdW5zaWduZWQgbG9uZyB0eXBlID0gcmVzb3VyY2VfdHlwZShyKTsKKworCQlpZiAodHlwZSA9PSBJT1JFU09VUkNFX01FTSB8fCB0eXBlID09IElPUkVTT1VSQ0VfSU8pCisJCQlyZWxlYXNlX3Jlc291cmNlKHIpOworCX0KKwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9ybV9kZXZpY2VfYWRkKTsKQEAgLTMwNiw3ICszMDcsOSBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBwZGV2LT5udW1fcmVzb3VyY2VzOyBpKyspIHsKIAkJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZwZGV2LT5yZXNvdXJjZVtpXTsKLQkJCWlmIChyLT5mbGFncyAmIChJT1JFU09VUkNFX01FTXxJT1JFU09VUkNFX0lPKSkKKwkJCXVuc2lnbmVkIGxvbmcgdHlwZSA9IHJlc291cmNlX3R5cGUocik7CisKKwkJCWlmICh0eXBlID09IElPUkVTT1VSQ0VfTUVNIHx8IHR5cGUgPT0gSU9SRVNPVVJDRV9JTykKIAkJCQlyZWxlYXNlX3Jlc291cmNlKHIpOwogCQl9CiAJfQpAQCAtMzkxLDYgKzM5NCw1MyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSk7CiAKKy8qKgorICogcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEKKyAqIEBwYXJlbnQ6IHBhcmVudCBkZXZpY2UgZm9yIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCisgKiBAbmFtZTogYmFzZSBuYW1lIG9mIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCisgKiBAaWQ6IGluc3RhbmNlIGlkCisgKiBAZGF0YTogcGxhdGZvcm0gc3BlY2lmaWMgZGF0YSBmb3IgdGhpcyBwbGF0Zm9ybSBkZXZpY2UKKyAqIEBzaXplOiBzaXplIG9mIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzaW1wbGUgcGxhdGZvcm0gZGV2aWNlIHRoYXQgcmVxdWlyZXMgbWluaW1hbAorICogcmVzb3VyY2UgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBDYW5uZWQgcmVsZWFzZSBmdW5jdGlvbiBmcmVlaW5nIG1lbW9yeQorICogYWxsb2NhdGVkIGZvciB0aGUgZGV2aWNlIGFsbG93cyBkcml2ZXJzIHVzaW5nIHN1Y2ggZGV2aWNlcyB0byBiZQorICogdW5sb2FkZWQgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGRldmljZSB0byBiZQorICogZHJvcHBlZC4KKyAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoCisJCXN0cnVjdCBkZXZpY2UgKnBhcmVudCwKKwkJY29uc3QgY2hhciAqbmFtZSwgaW50IGlkLAorCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWludCByZXR2YWw7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKG5hbWUsIGlkKTsKKwlpZiAoIXBkZXYpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OworCisJaWYgKHNpemUpIHsKKwkJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsIHNpemUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3I7CisKKwlyZXR1cm4gcGRldjsKKworZXJyb3I6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOworfQorCiBzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihfZGV2LT5kcml2ZXIpOwpAQCAtODYyLDcgKzkxMiw3IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX0hJQkVSTkFUSU9OICovCiAKLXN0cnVjdCBwbV9leHRfb3BzIHBsYXRmb3JtX3BtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcG1fZXh0X29wcyBwbGF0Zm9ybV9wbV9vcHMgPSB7CiAJLmJhc2UgPSB7CiAJCS5wcmVwYXJlID0gcGxhdGZvcm1fcG1fcHJlcGFyZSwKIAkJLmNvbXBsZXRlID0gcGxhdGZvcm1fcG1fY29tcGxldGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCAyNzNhOTQ0Li42OTJjMjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAkJICogdHJhbnNpdGlvbiBpcyBpbiBwcm9ncmVzcyBpbiBvcmRlciB0byBhdm9pZCBsZWF2aW5nIHRoZW0KIAkJICogdW5oYW5kbGVkIGRvd24gdGhlIHJvYWQKIAkJICovCi0JCVdBUk5fT04odHJ1ZSk7CisJCWRldl9XQVJOKGRldiwgIlBhcmVudGxlc3MgZGV2aWNlIHJlZ2lzdGVyZWQgZHVyaW5nIGEgUE0gdHJhbnNhY3Rpb25cbiIpOwogCX0KIAogCWxpc3RfYWRkX3RhaWwoJmRldi0+cG93ZXIuZW50cnksICZkcG1fbGlzdCk7CkBAIC03NzgsMTAgKzc3OCw3IEBACiAKIHZvaWQgX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQoY29uc3QgY2hhciAqZnVuY3Rpb24sIHZvaWQgKmZuLCBpbnQgcmV0KQogewotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiAiLCBmdW5jdGlvbik7Ci0JCXByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKCIlcyByZXR1cm5zICIsIGZuKTsKLQkJcHJpbnRrKCIlZFxuIiwgcmV0KTsKLQl9CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiAlcEYgcmV0dXJucyAlZFxuIiwgZnVuY3Rpb24sIGZuLCByZXQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwppbmRleCBiODI2NTRlLi5kODc2YWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwpAQCAtOTAsNyArOTAsNyBAQAogc3RhdGljIERFVklDRV9BVFRSKG1hYywgU19JUlVHTywgYW9lZGlza19zaG93X21hYywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobmV0aWYsIFNfSVJVR08sIGFvZWRpc2tfc2hvd19uZXRpZiwgTlVMTCk7CiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbiA9IHsKLQkuYXR0ciA9IHsgLm5hbWUgPSAiZmlybXdhcmUtdmVyc2lvbiIsIC5tb2RlID0gU19JUlVHTywgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKKwkuYXR0ciA9IHsgLm5hbWUgPSAiZmlybXdhcmUtdmVyc2lvbiIsIC5tb2RlID0gU19JUlVHTyB9LAogCS5zaG93ID0gYW9lZGlza19zaG93X2Z3dmVyLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lY2hyLmMgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjaHIuYwppbmRleCAxZjU2ZDJjLi4yMDBlZmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjaHIuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjaHIuYwpAQCAtMjg0LDkgKzI4NCw5IEBACiAJCXJldHVybiBQVFJfRVJSKGFvZV9jbGFzcyk7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYXJkZXZzKTsgKytpKQotCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoYW9lX2NsYXNzLCBOVUxMLAotCQkJCSAgICAgIE1LREVWKEFPRV9NQUpPUiwgY2hhcmRldnNbaV0ubWlub3IpLAotCQkJCSAgICAgIE5VTEwsIGNoYXJkZXZzW2ldLm5hbWUpOworCQlkZXZpY2VfY3JlYXRlKGFvZV9jbGFzcywgTlVMTCwKKwkJCSAgICAgIE1LREVWKEFPRV9NQUpPUiwgY2hhcmRldnNbaV0ubWlub3IpLCBOVUxMLAorCQkJICAgICAgY2hhcmRldnNbaV0ubmFtZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKaW5kZXggNDlmMjc0MS4uNDMyY2Y0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKQEAgLTE4ODIsMTAgKzE4ODIsNiBAQAogCQkvKiBBbWlnYSwgTWFjLCAuLi4gZG9uJ3QgaGF2ZSBBdGFyaS1jb21wYXRpYmxlIGZsb3BweSA6LSkgKi8KIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoTUFDSF9JU19IQURFUykKLQkJLyogSGFkZXMgZG9lc24ndCBoYXZlIEF0YXJpLWNvbXBhdGlibGUgZmxvcHB5ICovCi0JCXJldHVybiAtRU5PREVWOwotCiAJaWYgKHJlZ2lzdGVyX2Jsa2RldihGTE9QUFlfTUFKT1IsImZkIikpCiAJCXJldHVybiAtRUJVU1k7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IGNmNjRkZGYuLjJjZWEyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtNDE3Miw3ICs0MTcyLDcgQEAKIAlpbnQgaSwgdW5pdCwgZHJpdmU7CiAJaW50IGVyciwgZHI7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCisjaWYgZGVmaW5lZChDT05GSUdfUFBDKQogCWlmIChjaGVja19sZWdhY3lfaW9wb3J0KEZEQzEpKQogCQlyZXR1cm4gLUVOT0RFVjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggN2IzMzUxMi4uOTAzNGNhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0zOTEsNyArMzkxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBpZF9hdHRyID0gewotCS5hdHRyID0geyAubmFtZSA9ICJwaWQiLCAubW9kZSA9IFNfSVJVR08sIC5vd25lciA9IFRISVNfTU9EVUxFIH0sCisJLmF0dHIgPSB7IC5uYW1lID0gInBpZCIsIC5tb2RlID0gU19JUlVHT30sCiAJLnNob3cgPSBwaWRfc2hvdywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BnLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZy5jCmluZGV4IGQ3MzFjYTQuLjlkZmEyNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BnLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGcuYwpAQCAtNjg2LDkgKzY4Niw4IEBACiAJZm9yICh1bml0ID0gMDsgdW5pdCA8IFBHX1VOSVRTOyB1bml0KyspIHsKIAkJc3RydWN0IHBnICpkZXYgPSAmZGV2aWNlc1t1bml0XTsKIAkJaWYgKGRldi0+cHJlc2VudCkKLQkJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShwZ19jbGFzcywgTlVMTCwKLQkJCQkJICAgICAgTUtERVYobWFqb3IsIHVuaXQpLCBOVUxMLAotCQkJCQkgICAgICAicGcldSIsIHVuaXQpOworCQkJZGV2aWNlX2NyZWF0ZShwZ19jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIHVuaXQpLCBOVUxMLAorCQkJCSAgICAgICJwZyV1IiwgdW5pdCk7CiAJfQogCWVyciA9IDA7CiAJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wdC5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcHQuYwppbmRleCA2NzNiOGIyLi41YWUyMjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wdC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3B0LmMKQEAgLTk3OSwxMiArOTc5LDEwIEBACiAKIAlmb3IgKHVuaXQgPSAwOyB1bml0IDwgUFRfVU5JVFM7IHVuaXQrKykKIAkJaWYgKHB0W3VuaXRdLnByZXNlbnQpIHsKLQkJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShwdF9jbGFzcywgTlVMTCwKLQkJCQkJICAgICAgTUtERVYobWFqb3IsIHVuaXQpLCBOVUxMLAotCQkJCQkgICAgICAicHQlZCIsIHVuaXQpOwotCQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHB0X2NsYXNzLCBOVUxMLAotCQkJCQkgICAgICBNS0RFVihtYWpvciwgdW5pdCArIDEyOCksIE5VTEwsCi0JCQkJCSAgICAgICJwdCVkbiIsIHVuaXQpOworCQkJZGV2aWNlX2NyZWF0ZShwdF9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIHVuaXQpLCBOVUxMLAorCQkJCSAgICAgICJwdCVkIiwgdW5pdCk7CisJCQlkZXZpY2VfY3JlYXRlKHB0X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgdW5pdCArIDEyOCksCisJCQkJICAgICAgTlVMTCwgInB0JWRuIiwgdW5pdCk7CiAJCX0KIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCAwZTA3NzE1Li4xOTVjYTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwpAQCAtMzAyLDkgKzMwMiw4IEBACiBzdGF0aWMgdm9pZCBwa3Rfc3lzZnNfZGV2X25ldyhzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkKQogewogCWlmIChjbGFzc19wa3RjZHZkKSB7Ci0JCXBkLT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoY2xhc3NfcGt0Y2R2ZCwgTlVMTCwKLQkJCQkJCXBkLT5wa3RfZGV2LCBOVUxMLAotCQkJCQkJIiVzIiwgcGQtPm5hbWUpOworCQlwZC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShjbGFzc19wa3RjZHZkLCBOVUxMLCBwZC0+cGt0X2RldiwgTlVMTCwKKwkJCQkJIiVzIiwgcGQtPm5hbWUpOwogCQlpZiAoSVNfRVJSKHBkLT5kZXYpKQogCQkJcGQtPmRldiA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IDNhMjgxZWYuLmY2MGU0MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTM0OSw4ICszNDksNiBAQAogCiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcms7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzZXRfd2FpdDsKLQotCWludCBzZ19zdGF0WzZdOwogfTsKIAogLyoKQEAgLTY4NSw3ICs2ODMsNiBAQAogCQlnb3RvIGRyb3A7CiAJfQogCXVycS0+bnNnID0gbl9lbGVtOwotCXNjLT5zZ19zdGF0W25fZWxlbSA8IDUgPyBuX2VsZW0gOiA1XSsrOwogCiAJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgewogCQl1Yl9jbWRfYnVpbGRfcGFja2V0KHNjLCBsdW4sIGNtZCwgdXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKaW5kZXggZjFjOGZlYi4uMTczMGQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKKysrIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKQEAgLTI0OSw3ICsyNDksNiBAQAogCXN0cnVjdCBIdkxwRXZlbnQgKmhldjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbVklPTUFYQkxPQ0tETUFdOwogCWludCBzZ2luZGV4OwotCWludCBzdGF0aW5kZXg7CiAJc3RydWN0IHZpb2Rhc2RfZGV2aWNlICpkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTI1OCwxMSArMjU3LDkgQEAKIAlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKSB7CiAJCWRpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKIAkJdmlvY21kID0gdmlvbWFqb3JzdWJ0eXBlX2Jsb2NraW8gfCB2aW9ibG9ja3JlYWQ7Ci0JCXN0YXRpbmRleCA9IDA7CiAJfSBlbHNlIHsKIAkJZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKIAkJdmlvY21kID0gdmlvbWFqb3JzdWJ0eXBlX2Jsb2NraW8gfCB2aW9ibG9ja3dyaXRlOwotCQlzdGF0aW5kZXggPSAxOwogCX0KIAogICAgICAgICBkID0gcmVxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYwppbmRleCBiY2Y1NzkyLi5lNmVlMjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKQEAgLTkwMSwyMyArOTAxLDIzIEBACiAJZm9yIChuID0gMDsgbiA8IDB4NDAwOyBuICs9IDB4NDApIHsKIAkJbGluay0+aW8uQmFzZVBvcnQxID0gbiBeIDB4MzAwOwogCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKKwkJaWYgKGkgPT0gMCkKIAkJCWJyZWFrOwogCX0KIAotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChpICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgaSk7CiAJCWxpbmstPmlycS5Bc3NpZ25lZElSUSA9IDA7CiAJfQogCiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKIAkJZ290byBmYWlsZWQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCmluZGV4IDI3MDU4NDcuLjJjYmU3MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKQEAgLTY3OCwxMDEgKzY3OCw3OCBAQAogCWtmcmVlKGluZm8pOwogfQogCi1zdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IGJ0M2NfY2hlY2tfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCQkgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkgICAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkgICAgIHZvaWQgKnByaXZfZGF0YSkKIHsKLQlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHRyeSA9ICh1bnNpZ25lZCBsb25nKSBwcml2X2RhdGE7CiAKLQlpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpCi0JCXJldHVybiBpOwotCi0JcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJaWYgKGNmLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBfZGV2LT5jb25mLlZwcCA9IGNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gOCkgJiYKKwkgICAgKGNmLT5pby53aW5bMF0uYmFzZSAhPSAwKSkgeworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSAodHJ5ID09IDApID8gMTYgOgorCQkJY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKK3N0YXRpYyBpbnQgYnQzY19jaGVja19jb25maWdfbm90cGlja3koc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCSAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmLAorCQkJCSAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHZjYywKKwkJCQkgICAgICB2b2lkICpwcml2X2RhdGEpCiB7Ci0JaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykKLQkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7Ci0JcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7Ci19CisJc3RhdGljIHVuc2lnbmVkIGludCBiYXNlWzVdID0geyAweDNmOCwgMHgyZjgsIDB4M2U4LCAweDJlOCwgMHgwIH07CisJaW50IGo7CiAKLXN0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCi17Ci0JaWYgKHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKSAhPSBDU19TVUNDRVNTKQotCQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKLQlyZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwlpZiAoKGNmLT5pby5ud2luID4gMCkgJiYgKChjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSykgPD0gMykpIHsKKwkJZm9yIChqID0gMDsgaiA8IDU7IGorKykgeworCQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGJhc2Vbal07CisJCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBiYXNlW2pdID8gMTYgOiAzOworCQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyBpbnQgYnQzY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBiYXNlWzVdID0geyAweDNmOCwgMHgyZjgsIDB4M2U4LCAweDJlOCwgMHgwIH07CiAJYnQzY19pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwotCXR1cGxlX3QgdHVwbGU7Ci0JdV9zaG9ydCBidWZbMjU2XTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmID0gJnBhcnNlLmNmdGFibGVfZW50cnk7Ci0JaW50IGksIGosIHRyeTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHRyeTsKIAotCS8qIEZpcnN0IHBhc3M6IGxvb2sgZm9yIGEgY29uZmlnIGVudHJ5IHRoYXQgbG9va3Mgbm9ybWFsLiAqLwotCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQkvKiBUd28gdHJpZXM6IHdpdGhvdXQgSU8gYWxpYXNlcywgdGhlbiB3aXRoIGFsaWFzZXMgKi8KLQlmb3IgKHRyeSA9IDA7IHRyeSA8IDI7IHRyeSsrKSB7Ci0JCWkgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0JCXdoaWxlIChpICE9IENTX05PX01PUkVfSVRFTVMpIHsKLQkJCWlmIChpICE9IENTX1NVQ0NFU1MpCi0JCQkJZ290byBuZXh0X2VudHJ5OwotCQkJaWYgKGNmLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQkJbGluay0+Y29uZi5WcHAgPSBjZi0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKLQkJCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gOCkgJiYgKGNmLT5pby53aW5bMF0uYmFzZSAhPSAwKSkgewotCQkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotCQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gKHRyeSA9PSAwKSA/IDE2IDogY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKLQkJCQkJZ290byBmb3VuZF9wb3J0OwotCQkJfQotbmV4dF9lbnRyeToKLQkJCWkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLQkJfQotCX0KKwkvKiBGaXJzdCBwYXNzOiBsb29rIGZvciBhIGNvbmZpZyBlbnRyeSB0aGF0IGxvb2tzIG5vcm1hbC4KKwkgICBUd28gdHJpZXM6IHdpdGhvdXQgSU8gYWxpYXNlcywgdGhlbiB3aXRoIGFsaWFzZXMgKi8KKwlmb3IgKHRyeSA9IDA7IHRyeSA8IDI7IHRyeSsrKQorCQlpZiAoIXBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBidDNjX2NoZWNrX2NvbmZpZywgKHZvaWQgKikgdHJ5KSkKKwkJCWdvdG8gZm91bmRfcG9ydDsKIAogCS8qIFNlY29uZCBwYXNzOiB0cnkgdG8gZmluZCBhbiBlbnRyeSB0aGF0IGlzbid0IHBpY2t5IGFib3V0CiAJICAgaXRzIGJhc2UgYWRkcmVzcywgdGhlbiB0cnkgdG8gZ3JhYiBhbnkgc3RhbmRhcmQgc2VyaWFsIHBvcnQKIAkgICBhZGRyZXNzLCBhbmQgZmluYWxseSB0cnkgdG8gZ2V0IGFueSBmcmVlIHBvcnQuICovCi0JaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLQl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7Ci0JCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY2YtPmlvLm53aW4gPiAwKSAmJiAoKGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSA8PSAzKSkgewotCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKLQkJCWZvciAoaiA9IDA7IGogPCA1OyBqKyspIHsKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBiYXNlW2pdOwotCQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gYmFzZVtqXSA/IDE2IDogMzsKLQkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQotCQkJCQlnb3RvIGZvdW5kX3BvcnQ7Ci0JCQl9Ci0JCX0KLQkJaSA9IG5leHRfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwotCX0KKwlpZiAoIXBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBidDNjX2NoZWNrX2NvbmZpZ19ub3RwaWNreSwgTlVMTCkpCisJCWdvdG8gZm91bmRfcG9ydDsKKworCUJUX0VSUigiTm8gdXNhYmxlIHBvcnQgcmFuZ2UgZm91bmQiKTsKKwljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIC1FTk9ERVYpOworCWdvdG8gZmFpbGVkOwogCiBmb3VuZF9wb3J0OgotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkJQlRfRVJSKCJObyB1c2FibGUgcG9ydCByYW5nZSBmb3VuZCIpOwotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwotCQlnb3RvIGZhaWxlZDsKLQl9Ci0KIAlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCX0KIAogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMKaW5kZXggNjhkMWQyNS4uOGU1NTZiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMKQEAgLTYwNywxMDIgKzYwNyw3OCBAQAogCWtmcmVlKGluZm8pOwogfQogCi1zdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IGJ0dWFydF9jaGVja19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmLAorCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgICAgICB2b2lkICpwcml2X2RhdGEpCiB7Ci0JaW50IGk7CisJaW50ICp0cnkgPSBwcml2X2RhdGE7CiAKLQlpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpCi0JCXJldHVybiBpOwotCi0JcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJaWYgKGNmLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBfZGV2LT5jb25mLlZwcCA9IGNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gOCkgJiYKKwkgICAgKGNmLT5pby53aW5bMF0uYmFzZSAhPSAwKSkgeworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSAoKnRyeSA9PSAwKSA/IDE2IDoKKwkJCWNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGludCBmaXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IGJ0dWFydF9jaGVja19jb25maWdfbm90cGlja3koc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiwKKwkJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQkJdW5zaWduZWQgaW50IHZjYywKKwkJCQkJdm9pZCAqcHJpdl9kYXRhKQogewotCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUpICE9IENTX1NVQ0NFU1MpCi0JCXJldHVybiBDU19OT19NT1JFX0lURU1TOwotCXJldHVybiBnZXRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwotfQorCXN0YXRpYyB1bnNpZ25lZCBpbnQgYmFzZVs1XSA9IHsgMHgzZjgsIDB4MmY4LCAweDNlOCwgMHgyZTgsIDB4MCB9OworCWludCBqOwogCi1zdGF0aWMgaW50IG5leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQotewotCWlmIChwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykKLQkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7Ci0JcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJaWYgKChjZi0+aW8ubndpbiA+IDApICYmICgoY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0spIDw9IDMpKSB7CisJCWZvciAoaiA9IDA7IGogPCA1OyBqKyspIHsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBiYXNlW2pdOworCQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gYmFzZVtqXSA/IDE2IDogMzsKKwkJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgaW50IGJ0dWFydF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBiYXNlWzVdID0geyAweDNmOCwgMHgyZjgsIDB4M2U4LCAweDJlOCwgMHgwIH07CiAJYnR1YXJ0X2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdCB0dXBsZTsKLQl1X3Nob3J0IGJ1ZlsyNTZdOwotCWNpc3BhcnNlX3QgcGFyc2U7Ci0JY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YgPSAmcGFyc2UuY2Z0YWJsZV9lbnRyeTsKLQlpbnQgaSwgaiwgdHJ5OworCWludCBpOworCWludCB0cnk7CiAKLQkvKiBGaXJzdCBwYXNzOiBsb29rIGZvciBhIGNvbmZpZyBlbnRyeSB0aGF0IGxvb2tzIG5vcm1hbC4gKi8KLQl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCS8qIFR3byB0cmllczogd2l0aG91dCBJTyBhbGlhc2VzLCB0aGVuIHdpdGggYWxpYXNlcyAqLwotCWZvciAodHJ5ID0gMDsgdHJ5IDwgMjsgdHJ5KyspIHsKLQkJaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLQkJd2hpbGUgKGkgIT0gQ1NfTk9fTU9SRV9JVEVNUykgewotCQkJaWYgKGkgIT0gQ1NfU1VDQ0VTUykKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQlpZiAoY2YtPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCQlsaW5rLT5jb25mLlZwcCA9IGNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwotCQkJaWYgKChjZi0+aW8ubndpbiA+IDApICYmIChjZi0+aW8ud2luWzBdLmxlbiA9PSA4KSAmJiAoY2YtPmlvLndpblswXS5iYXNlICE9IDApKSB7Ci0JCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSAodHJ5ID09IDApID8gMTYgOiBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQotCQkJCQlnb3RvIGZvdW5kX3BvcnQ7Ci0JCQl9Ci1uZXh0X2VudHJ5OgotCQkJaSA9IG5leHRfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwotCQl9Ci0JfQorCS8qIEZpcnN0IHBhc3M6IGxvb2sgZm9yIGEgY29uZmlnIGVudHJ5IHRoYXQgbG9va3Mgbm9ybWFsLgorCSAgIFR3byB0cmllczogd2l0aG91dCBJTyBhbGlhc2VzLCB0aGVuIHdpdGggYWxpYXNlcyAqLworCWZvciAodHJ5ID0gMDsgdHJ5IDwgMjsgdHJ5KyspCisJCWlmICghcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGJ0dWFydF9jaGVja19jb25maWcsICZ0cnkpKQorCQkJZ290byBmb3VuZF9wb3J0OwogCiAJLyogU2Vjb25kIHBhc3M6IHRyeSB0byBmaW5kIGFuIGVudHJ5IHRoYXQgaXNuJ3QgcGlja3kgYWJvdXQKIAkgICBpdHMgYmFzZSBhZGRyZXNzLCB0aGVuIHRyeSB0byBncmFiIGFueSBzdGFuZGFyZCBzZXJpYWwgcG9ydAogCSAgIGFkZHJlc3MsIGFuZCBmaW5hbGx5IHRyeSB0byBnZXQgYW55IGZyZWUgcG9ydC4gKi8KLQlpID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwotCXdoaWxlIChpICE9IENTX05PX01PUkVfSVRFTVMpIHsKLQkJaWYgKChpID09IENTX1NVQ0NFU1MpICYmIChjZi0+aW8ubndpbiA+IDApCi0JCSAgICAmJiAoKGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSA8PSAzKSkgewotCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKLQkJCWZvciAoaiA9IDA7IGogPCA1OyBqKyspIHsKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBiYXNlW2pdOwotCQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gYmFzZVtqXSA/IDE2IDogMzsKLQkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQotCQkJCQlnb3RvIGZvdW5kX3BvcnQ7Ci0JCQl9Ci0JCX0KLQkJaSA9IG5leHRfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwotCX0KKwlpZiAoIXBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBidHVhcnRfY2hlY2tfY29uZmlnX25vdHBpY2t5LCBOVUxMKSkKKwkJZ290byBmb3VuZF9wb3J0OworCisJQlRfRVJSKCJObyB1c2FibGUgcG9ydCByYW5nZSBmb3VuZCIpOworCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgLUVOT0RFVik7CisJZ290byBmYWlsZWQ7CiAKIGZvdW5kX3BvcnQ6Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQlCVF9FUlIoIk5vIHVzYWJsZSBwb3J0IHJhbmdlIGZvdW5kIik7Ci0JCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7Ci0JCWdvdG8gZmFpbGVkOwotCX0KLQogCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChpICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgaSk7CiAJCWxpbmstPmlycS5Bc3NpZ25lZElSUSA9IDA7CiAJfQogCiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKIAkJZ290byBmYWlsZWQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jCmluZGV4IGRhZTQ1Y2QuLmU2ZTZiMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMKQEAgLTU5MCw3NSArNTkwLDQwIEBACiAJa2ZyZWUoaW5mbyk7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKK3N0YXRpYyBpbnQgZHRsMV9jb25mY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiwKKwkJCSAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgdm9pZCAqcHJpdl9kYXRhKQogewotCWludCBpOwotCi0JaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKQotCQlyZXR1cm4gaTsKLQotCXJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwotfQotCi1zdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLQlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKSAhPSBDU19TVUNDRVNTKQotCQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKLQlyZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKLX0KLQotc3RhdGljIGludCBuZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLQlpZiAocGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUpICE9IENTX1NVQ0NFU1MpCi0JCXJldHVybiBDU19OT19NT1JFX0lURU1TOwotCXJldHVybiBnZXRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWlmICgoY2YtPmlvLm53aW4gPT0gMSkgJiYgKGNmLT5pby53aW5bMF0ubGVuID4gOCkpIHsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmLT5pby53aW5bMF0ubGVuOwkvKnlvICovCisJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIGludCBkdGwxX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlkdGwxX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdCB0dXBsZTsKLQl1X3Nob3J0IGJ1ZlsyNTZdOwotCWNpc3BhcnNlX3QgcGFyc2U7Ci0JY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YgPSAmcGFyc2UuY2Z0YWJsZV9lbnRyeTsKIAlpbnQgaTsKIAotCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQogCS8qIExvb2sgZm9yIGEgZ2VuZXJpYyBmdWxsLXNpemVkIHdpbmRvdyAqLwogCWxpbmstPmlvLk51bVBvcnRzMSA9IDg7Ci0JaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLQl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7Ci0JCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY2YtPmlvLm53aW4gPT0gMSkgJiYgKGNmLT5pby53aW5bMF0ubGVuID4gOCkpIHsKLQkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBjZi0+aW8ud2luWzBdLmxlbjsJLyp5byAqLwotCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKLQkJCQlicmVhazsKLQkJfQotCQlpID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0JfQotCi0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOworCWlmICghcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGR0bDFfY29uZmNoZWNrLCBOVUxMKSkKIAkJZ290byBmYWlsZWQ7Ci0JfQogCiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkJbGluay0+aXJxLkFzc2lnbmVkSVJRID0gMDsKIAl9CiAKIAlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChpICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOwogCQlnb3RvIGZhaWxlZDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IDcwMGZmOTYuLjEyMjI1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC0xMDQzLDE1ICsxMDQzLDYgQEAKIAkgIG9wZW4gc2VsZWN0cyBvbmUgb2YgdGhlIHRpbWVycyBzdXBwb3J0ZWQgYnkgdGhlIEhQRVQuICBUaGUgdGltZXJzIGFyZQogCSAgbm9uLXBlcmlvZGljIGFuZC9vciBwZXJpb2RpYy4KIAotY29uZmlnIEhQRVRfUlRDX0lSUQotCWJvb2wKLQlkZWZhdWx0IEhQRVRfRU1VTEFURV9SVEMKLQlkZXBlbmRzIG9uIFJUQyAmJiBIUEVUCi0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGRpc2FibGUgUlRDX0lSUSBpbiBkcml2ZXJzL2NoYXIvcnRjLmMuIEl0Ci0JICBpcyBhc3N1bWVkIHRoZSBwbGF0Zm9ybSBjYWxsZWQgaHBldF9hbGxvYyB3aXRoIHRoZSBSVEMgSVJRIHZhbHVlcyBmb3IKLQkgIHRoZSBIUEVUIHRpbWVycy4KLQogY29uZmlnIEhQRVRfTU1BUAogCWJvb2wgIkFsbG93IG1tYXAgb2YgSFBFVCIKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKaW5kZXggMzFkY2Q5MS4uZGM4ZDFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKQEAgLTQxNyw2ICs0MTcsNiBAQAogbW9kdWxlX2luaXQoYWdwX2FsaV9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9hbGlfY2xlYW51cCk7CiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKaW5kZXggNjAzYTk4Ni4uM2Y5ODI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKQEAgLTIyMywxMiArMjIzLDE0IEBACiAKIAljdXJyZW50X3NpemUgPSBBX1NJWkVfTFZMMihhZ3BfYnJpZGdlLT5jdXJyZW50X3NpemUpOwogCi0JLyogR2V0IHRoZSBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVycyAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhZ3BfYnJpZGdlLT5kZXYsIEFNRF9NTUJBU0UsICZ0ZW1wKTsKLQl0ZW1wID0gKHRlbXAgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLKTsKLQlhbWRfaXJvbmdhdGVfcHJpdmF0ZS5yZWdpc3RlcnMgPSAodm9sYXRpbGUgdTggX19pb21lbSAqKSBpb3JlbWFwKHRlbXAsIDQwOTYpOwotCWlmICghYW1kX2lyb25nYXRlX3ByaXZhdGUucmVnaXN0ZXJzKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIWFtZF9pcm9uZ2F0ZV9wcml2YXRlLnJlZ2lzdGVycykgeworCQkvKiBHZXQgdGhlIG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXJzICovCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhZ3BfYnJpZGdlLT5kZXYsIEFNRF9NTUJBU0UsICZ0ZW1wKTsKKwkJdGVtcCA9ICh0ZW1wICYgUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSyk7CisJCWFtZF9pcm9uZ2F0ZV9wcml2YXRlLnJlZ2lzdGVycyA9ICh2b2xhdGlsZSB1OCBfX2lvbWVtICopIGlvcmVtYXAodGVtcCwgNDA5Nik7CisJCWlmICghYW1kX2lyb25nYXRlX3ByaXZhdGUucmVnaXN0ZXJzKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJLyogV3JpdGUgb3V0IHRoZSBhZGRyZXNzIG9mIHRoZSBnYXR0IHRhYmxlICovCiAJd3JpdGVsKGFncF9icmlkZ2UtPmdhdHRfYnVzX2FkZHIsIGFtZF9pcm9uZ2F0ZV9wcml2YXRlLnJlZ2lzdGVycytBTURfQVRUQkFTRSk7CkBAIC00OTIsNiArNDk0LDI2IEBACiAJYWdwX3B1dF9icmlkZ2UoYnJpZGdlKTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgaW50IGFncF9hbWRrN19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZ3BfYW1kazdfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCXJldHVybiBhbWRfaXJvbmdhdGVfZHJpdmVyLmNvbmZpZ3VyZSgpOworfQorCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKIC8qIG11c3QgYmUgdGhlIHNhbWUgb3JkZXIgYXMgbmFtZSB0YWJsZSBhYm92ZSAqLwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFncF9hbWRrN19wY2lfdGFibGVbXSA9IHsKIAl7CkBAIC01MjgsNiArNTUwLDEwIEBACiAJLmlkX3RhYmxlCT0gYWdwX2FtZGs3X3BjaV90YWJsZSwKIAkucHJvYmUJCT0gYWdwX2FtZGs3X3Byb2JlLAogCS5yZW1vdmUJCT0gYWdwX2FtZGs3X3JlbW92ZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IGFncF9hbWRrN19zdXNwZW5kLAorCS5yZXN1bWUJCT0gYWdwX2FtZGs3X3Jlc3VtZSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2luaXQgYWdwX2FtZGs3X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCmluZGV4IDI4MTJlZTIuLjUyZjQzNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwpAQCAtNzcyLDYgKzc3Miw2IEBACiBtb2R1bGVfZXhpdChhZ3BfYW1kNjRfY2xlYW51cCk7CiAjZW5kaWYKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+LCBBbmRpIEtsZWVuIik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiwgQW5kaSBLbGVlbiIpOwogbW9kdWxlX3BhcmFtKGFncF90cnlfdW5zdXBwb3J0ZWQsIGJvb2wsIDApOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwppbmRleCBhZTI3OTFiLi5mMTUzN2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYwpAQCAtNTYxLDYgKzU2MSw2IEBACiBtb2R1bGVfaW5pdChhZ3BfYXRpX2luaXQpOwogbW9kdWxlX2V4aXQoYWdwX2F0aV9jbGVhbnVwKTsKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYwppbmRleCAzYTNjYzAzLi44YzYxN2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2JhY2tlbmQuYwpAQCAtMzQ5LDcgKzM0OSw3IEBACiBfX3NldHVwKCJhZ3A9IiwgYWdwX3NldHVwKTsKICNlbmRpZgogCi1NT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFHUCBHQVJUIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKEFHUEdBUlRfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKaW5kZXggMDQzZTM2Ni4uOWNmNmU5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCkBAIC01NCw4ICs1NCw3IEBACiAJCSBhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTY1UV9IQiB8fCBcCiAJCSBhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTY1R19IQiB8fCBcCiAJCSBhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTY1R01fSEIgfHwgXAotCQkgYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NUdNRV9IQiB8fCBcCi0JCSBhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0dNNDVfSEIpCisJCSBhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTY1R01FX0hCKQogCiAjZGVmaW5lIElTX0czMyAoYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9HMzNfSEIgfHwgXAogCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1EzNV9IQiB8fCBcCkBAIC02Myw3ICs2Miw4IEBACiAKICNkZWZpbmUgSVNfRzRYIChhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHRF9FX0hCIHx8IFwKIAkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9RNDVfSEIgfHwgXAotCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0c0NV9IQikKKwkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9HNDVfSEIgfHwgXAorCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0dNNDVfSEIpCiAKIGV4dGVybiBpbnQgYWdwX21lbW9yeV9yZXNlcnZlZDsKIApAQCAtMjE0LDggKzIxNCw4IEBACiAJaWYgKGFncF9icmlkZ2UtPmRyaXZlci0+bmVlZHNfc2NyYXRjaF9wYWdlKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBjdXJyZW50X3NpemUtPm51bV9lbnRyaWVzOyBpKyspIHsKIAkJCXdyaXRlbChhZ3BfYnJpZGdlLT5zY3JhdGNoX3BhZ2UsIGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGkqNCkpOwotCQkJcmVhZGwoaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QVEVfQkFTRSsoaSo0KSk7CS8qIFBDSSBwb3N0aW5nLiAqLwogCQl9CisJCXJlYWRsKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKChpLTEpKjQpKTsJLyogUENJIHBvc3RpbmcuICovCiAJfQogCWdsb2JhbF9jYWNoZV9mbHVzaCgpOwogCXJldHVybiAwOwpAQCAtNTI1LDggKzUyNSwxMCBAQAogCQlzaXplICs9IDQ7CiAJfSBlbHNlIGlmIChJU19HNFgpIHsKIAkJLyogT24gNCBzZXJpZXMgaGFyZHdhcmUsIEdUVCBzdG9sZW4gaXMgc2VwYXJhdGUgZnJvbSBncmFwaGljcwotCQkgKiBzdG9sZW4sIGlnbm9yZSBpdCBpbiBzdG9sZW4gZ3R0IGVudHJpZXMgY291bnRpbmcgKi8KLQkJc2l6ZSA9IDA7CisJCSAqIHN0b2xlbiwgaWdub3JlIGl0IGluIHN0b2xlbiBndHQgZW50cmllcyBjb3VudGluZy4gIEhvd2V2ZXIsCisJCSAqIDRLQiBvZiB0aGUgc3RvbGVuIG1lbW9yeSBkb2Vzbid0IGdldCBtYXBwZWQgdG8gdGhlIEdUVC4KKwkJICovCisJCXNpemUgPSA0OwogCX0gZWxzZSB7CiAJCS8qIE9uIHByZXZpb3VzIGhhcmR3YXJlLCB0aGUgR1RUIHNpemUgd2FzIGp1c3Qgd2hhdCB3YXMKIAkJICogcmVxdWlyZWQgdG8gbWFwIHRoZSBhcGVydHVyZS4KQEAgLTc3Myw4ICs3NzUsOCBAQAogCWlmIChhZ3BfYnJpZGdlLT5kcml2ZXItPm5lZWRzX3NjcmF0Y2hfcGFnZSkgewogCQlmb3IgKGkgPSBpbnRlbF9wcml2YXRlLmd0dF9lbnRyaWVzOyBpIDwgY3VycmVudF9zaXplLT5udW1fZW50cmllczsgaSsrKSB7CiAJCQl3cml0ZWwoYWdwX2JyaWRnZS0+c2NyYXRjaF9wYWdlLCBpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhpKjQpKTsKLQkJCXJlYWRsKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGkqNCkpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAkJfQorCQlyZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKygoaS0xKSo0KSk7CS8qIFBDSSBQb3N0aW5nLiAqLwogCX0KIAogCWdsb2JhbF9jYWNoZV9mbHVzaCgpOwpAQCAtOTg5LDggKzk5MSw4IEBACiAJaWYgKGFncF9icmlkZ2UtPmRyaXZlci0+bmVlZHNfc2NyYXRjaF9wYWdlKSB7CiAJCWZvciAoaSA9IGludGVsX3ByaXZhdGUuZ3R0X2VudHJpZXM7IGkgPCBjdXJyZW50X3NpemUtPm51bV9lbnRyaWVzOyBpKyspIHsKIAkJCXdyaXRlbChhZ3BfYnJpZGdlLT5zY3JhdGNoX3BhZ2UsIGludGVsX3ByaXZhdGUuZ3R0K2kpOwotCQkJcmVhZGwoaW50ZWxfcHJpdmF0ZS5ndHQraSk7CS8qIFBDSSBQb3N0aW5nLiAqLwogCQl9CisJCXJlYWRsKGludGVsX3ByaXZhdGUuZ3R0K2ktMSk7CS8qIFBDSSBQb3N0aW5nLiAqLwogCX0KIAogCWdsb2JhbF9jYWNoZV9mbHVzaCgpOwpAQCAtMjM4OCw1ICsyMzkwLDUgQEAKIG1vZHVsZV9pbml0KGFncF9pbnRlbF9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9pbnRlbF9jbGVhbnVwKTsKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKaW5kZXggZGM3MGQzNy4uMTZhY2VlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTnZpZGlhIEFHUEdBUlQgcm91dGluZXMuCiAgKiBCYXNlZCB1cG9uIGEgMi40IGFncGdhcnQgZGlmZiBieSB0aGUgZm9sa3MgZnJvbSBOVklESUEsIGFuZCBoYWNrZWQgdXAKLSAqIHRvIHdvcmsgaW4gMi41IGJ5IERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorICogdG8gd29yayBpbiAyLjUgYnkgRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yMDEsMTAgKzIwMSwxNSBAQAogc3RhdGljIGludCBudmlkaWFfaW5zZXJ0X21lbW9yeShzdHJ1Y3QgYWdwX21lbW9yeSAqbWVtLCBvZmZfdCBwZ19zdGFydCwgaW50IHR5cGUpCiB7CiAJaW50IGksIGo7CisJaW50IG1hc2tfdHlwZTsKIAotCWlmICgodHlwZSAhPSAwKSB8fCAobWVtLT50eXBlICE9IDApKQorCW1hc2tfdHlwZSA9IGFncF9nZW5lcmljX3R5cGVfdG9fbWFza190eXBlKG1lbS0+YnJpZGdlLCB0eXBlKTsKKwlpZiAobWFza190eXBlICE9IDAgfHwgdHlwZSAhPSBtZW0tPnR5cGUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKG1lbS0+cGFnZV9jb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKwogCWlmICgocGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnQpID4KIAkJKG52aWRpYV9wcml2YXRlLm51bV9hY3RpdmVfZW50cmllcyAtIGFncF9tZW1vcnlfcmVzZXJ2ZWQvUEFHRV9TSVpFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMjAsMTAgKzIyNSwxMyBAQAogCX0KIAlmb3IgKGkgPSAwLCBqID0gcGdfc3RhcnQ7IGkgPCBtZW0tPnBhZ2VfY291bnQ7IGkrKywgaisrKSB7CiAJCXdyaXRlbChhZ3BfYnJpZGdlLT5kcml2ZXItPm1hc2tfbWVtb3J5KGFncF9icmlkZ2UsCi0JCQltZW0tPm1lbW9yeVtpXSwgbWVtLT50eXBlKSwKKwkJCW1lbS0+bWVtb3J5W2ldLCBtYXNrX3R5cGUpLAogCQkJYWdwX2JyaWRnZS0+Z2F0dF90YWJsZStudmlkaWFfcHJpdmF0ZS5wZ19vZmZzZXQraik7Ci0JCXJlYWRsKGFncF9icmlkZ2UtPmdhdHRfdGFibGUrbnZpZGlhX3ByaXZhdGUucGdfb2Zmc2V0K2opOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAl9CisKKwkvKiBQQ0kgUG9zdGluZy4gKi8KKwlyZWFkbChhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlK252aWRpYV9wcml2YXRlLnBnX29mZnNldCtqIC0gMSk7CisKIAlhZ3BfYnJpZGdlLT5kcml2ZXItPnRsYl9mbHVzaChtZW0pOwogCXJldHVybiAwOwogfQpAQCAtMjMzLDkgKzI0MSwxNSBAQAogewogCWludCBpOwogCi0JaWYgKCh0eXBlICE9IDApIHx8IChtZW0tPnR5cGUgIT0gMCkpCisJaW50IG1hc2tfdHlwZTsKKworCW1hc2tfdHlwZSA9IGFncF9nZW5lcmljX3R5cGVfdG9fbWFza190eXBlKG1lbS0+YnJpZGdlLCB0eXBlKTsKKwlpZiAobWFza190eXBlICE9IDAgfHwgdHlwZSAhPSBtZW0tPnR5cGUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKG1lbS0+cGFnZV9jb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKwogCWZvciAoaSA9IHBnX3N0YXJ0OyBpIDwgKG1lbS0+cGFnZV9jb3VudCArIHBnX3N0YXJ0KTsgaSsrKQogCQl3cml0ZWwoYWdwX2JyaWRnZS0+c2NyYXRjaF9wYWdlLCBhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlK252aWRpYV9wcml2YXRlLnBnX29mZnNldCtpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwppbmRleCA5ZjRkNDllLi5kM2JkMjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYwpAQCAtNTk1LDQgKzU5NSw0IEBACiBtb2R1bGVfZXhpdChhZ3BfdmlhX2NsZWFudXApOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4iKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYXBwbGljb20uYyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCmluZGV4IGI4OTlkOTEuLjA1Njc0ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAkJc3RydWN0IHN0X3JhbV9pbyAqc3RfbG9jLCBzdHJ1Y3QgbWFpbGJveCAqbWFpbGJveCkKIHsKIAl2b2lkIF9faW9tZW0gKmZyb20gPSBhcGJzW0luZGV4Q2FyZF0uUmFtSU8gKyBSQU1fVE9fUEM7Ci0JdW5zaWduZWQgY2hhciAqdG8gPSAodW5zaWduZWQgY2hhciAqKSZtYWlsYm94OworCXVuc2lnbmVkIGNoYXIgKnRvID0gKHVuc2lnbmVkIGNoYXIgKiltYWlsYm94OwogI2lmZGVmIERFQlVHCiAJaW50IGM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ic3IuYyBiL2RyaXZlcnMvY2hhci9ic3IuYwppbmRleCBiNjUwYjRlLi40NTZmNTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYnNyLmMKKysrIGIvZHJpdmVycy9jaGFyL2Jzci5jCkBAIC0yMjksOSArMjI5LDggQEAKIAkJaWYgKHJlc3VsdCkKIAkJCWdvdG8gb3V0X2VycjsKIAotCQljdXItPmJzcl9kZXZpY2UgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoYnNyX2NsYXNzLCBOVUxMLAotCQkJCQkJCWN1ci0+YnNyX2RldiwKLQkJCQkJCQljdXIsIGN1ci0+YnNyX25hbWUpOworCQljdXItPmJzcl9kZXZpY2UgPSBkZXZpY2VfY3JlYXRlKGJzcl9jbGFzcywgTlVMTCwgY3VyLT5ic3JfZGV2LAorCQkJCQkJY3VyLCBjdXItPmJzcl9uYW1lKTsKIAkJaWYgKCFjdXItPmJzcl9kZXZpY2UpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiZGV2aWNlX2NyZWF0ZSBmYWlsZWQgZm9yICVzXG4iLAogCQkJICAgICAgIGN1ci0+YnNyX25hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RzMTI4Ni5jIGIvZHJpdmVycy9jaGFyL2RzMTI4Ni5jCmluZGV4IGZiNTg0OTMuLjBhODI2ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kczEyODYuYworKysgYi9kcml2ZXJzL2NoYXIvZHMxMjg2LmMKQEAgLTIxMCw4ICsyMTAsOCBAQAogCQlpZiAoc2VjICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQltaW4gPSBCSU4yQkNEKG1pbik7Ci0JCW1pbiA9IEJJTjJCQ0QoaHJzKTsKKwkJbWluID0gYmluMmJjZChtaW4pOworCQltaW4gPSBiaW4yYmNkKGhycyk7CiAKIAkJc3Bpbl9sb2NrKCZkczEyODZfbG9jayk7CiAJCXJ0Y193cml0ZShocnMsIFJUQ19IT1VSU19BTEFSTSk7CkBAIC0zNTMsNyArMzUzLDcgQEAKIAogCWRzMTI4Nl9nZXRfdGltZSgmdG0pOwogCWh1bmRyZWR0aCA9IHJ0Y19yZWFkKFJUQ19IVU5EUkVEVEhfU0VDT05EKTsKLQlCQ0RfVE9fQklOKGh1bmRyZWR0aCk7CisJaHVuZHJlZHRoID0gYmNkMmJpbihodW5kcmVkdGgpOwogCiAJcCArPSBzcHJpbnRmKHAsCiAJICAgICAgICAgICAgICJydGNfdGltZVx0OiAlMDJkOiUwMmQ6JTAyZC4lMDJkXG4iCkBAIC00NDMsNyArNDQzLDYgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIHNhdmVfY29udHJvbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgdWlwX3dhdGNoZG9nID0gamlmZmllczsKIAogCS8qCiAJICogcmVhZCBSVEMgb25jZSBhbnkgdXBkYXRlIGluIHByb2dyZXNzIGlzIGRvbmUuIFRoZSB1cGRhdGUKQEAgLTQ1Niw4ICs0NTUsNyBAQAogCSAqLwogCiAJaWYgKGRzMTI4Nl9pc191cGRhdGluZygpICE9IDApCi0JCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB1aXBfd2F0Y2hkb2cgKyAyKkhaLzEwMCkpCi0JCQliYXJyaWVyKCk7CisJCW1zbGVlcCgyMCk7CiAKIAkvKgogCSAqIE9ubHkgdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZnJvbSB0aGUgUlRDIGFyZSBzZXQuIFdlIGxlYXZlCkBAIC00NzksMTIgKzQ3NywxMiBAQAogCXJ0Y193cml0ZShzYXZlX2NvbnRyb2wsIFJUQ19DTUQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRzMTI4Nl9sb2NrLCBmbGFncyk7CiAKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fc2VjKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWluKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1faG91cik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21kYXkpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tb24pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV95ZWFyKTsKKwlydGNfdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnRjX3RtLT50bV9zZWMpOworCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJcnRjX3RtLT50bV9ob3VyID0gYmNkMmJpbihydGNfdG0tPnRtX2hvdXIpOworCXJ0Y190bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX3RtLT50bV9tZGF5KTsKKwlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCXJ0Y190bS0+dG1feWVhciA9IGJjZDJiaW4ocnRjX3RtLT50bV95ZWFyKTsKIAogCS8qCiAJICogQWNjb3VudCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBob3cgdGhlIFJUQyB1c2VzIHRoZSB2YWx1ZXMKQEAgLTUzMywxMiArNTMxLDEyIEBACiAJaWYgKHlycyA+PSAxMDApCiAJCXlycyAtPSAxMDA7CiAKLQlCSU5fVE9fQkNEKHNlYyk7Ci0JQklOX1RPX0JDRChtaW4pOwotCUJJTl9UT19CQ0QoaHJzKTsKLQlCSU5fVE9fQkNEKGRheSk7Ci0JQklOX1RPX0JDRChtb24pOwotCUJJTl9UT19CQ0QoeXJzKTsKKwlzZWMgPSBiaW4yYmNkKHNlYyk7CisJbWluID0gYmluMmJjZChtaW4pOworCWhycyA9IGJpbjJiY2QoaHJzKTsKKwlkYXkgPSBiaW4yYmNkKGRheSk7CisJbW9uID0gYmluMmJjZChtb24pOworCXlycyA9IGJpbjJiY2QoeXJzKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkczEyODZfbG9jaywgZmxhZ3MpOwogCXNhdmVfY29udHJvbCA9IHJ0Y19yZWFkKFJUQ19DTUQpOwpAQCAtNTc0LDggKzU3Miw4IEBACiAJY21kID0gcnRjX3JlYWQoUlRDX0NNRCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHMxMjg2X2xvY2ssIGZsYWdzKTsKIAotCUJDRF9UT19CSU4oYWxtX3RtLT50bV9taW4pOwotCUJDRF9UT19CSU4oYWxtX3RtLT50bV9ob3VyKTsKKwlhbG1fdG0tPnRtX21pbiA9IGJjZDJiaW4oYWxtX3RtLT50bV9taW4pOworCWFsbV90bS0+dG1faG91ciA9IGJjZDJiaW4oYWxtX3RtLT50bV9ob3VyKTsKIAlhbG1fdG0tPnRtX3NlYyA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kczEzMDIuYyBiL2RyaXZlcnMvY2hhci9kczEzMDIuYwppbmRleCBjNWU2N2E2Li4xNzA2OTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHMxMzAyLmMKKysrIGIvZHJpdmVycy9jaGFyL2RzMTMwMi5jCkBAIC0xMzEsMTIgKzEzMSwxMiBAQAogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JQkNEX1RPX0JJTihydGNfdG0tPnRtX3NlYyk7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21pbik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX2hvdXIpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tZGF5KTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbW9uKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1feWVhcik7CisJcnRjX3RtLT50bV9zZWMgPSBiY2QyYmluKHJ0Y190bS0+dG1fc2VjKTsKKwlydGNfdG0tPnRtX21pbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9taW4pOworCXJ0Y190bS0+dG1faG91ciA9IGJjZDJiaW4ocnRjX3RtLT50bV9ob3VyKTsKKwlydGNfdG0tPnRtX21kYXkgPSBiY2QyYmluKHJ0Y190bS0+dG1fbWRheSk7CisJcnRjX3RtLT50bV9tb24gPSBiY2QyYmluKHJ0Y190bS0+dG1fbW9uKTsKKwlydGNfdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ0Y190bS0+dG1feWVhcik7CiAKIAkvKgogCSAqIEFjY291bnQgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gaG93IHRoZSBSVEMgdXNlcyB0aGUgdmFsdWVzCkBAIC0yMTEsMTIgKzIxMSwxMiBAQAogCQkJZWxzZQogCQkJCXlycyAtPSAxOTAwOwkvKiBSVEMgKDcwLCA3MSwgLi4uIDk5KSAqLwogCi0JCQlCSU5fVE9fQkNEKHNlYyk7Ci0JCQlCSU5fVE9fQkNEKG1pbik7Ci0JCQlCSU5fVE9fQkNEKGhycyk7Ci0JCQlCSU5fVE9fQkNEKGRheSk7Ci0JCQlCSU5fVE9fQkNEKG1vbik7Ci0JCQlCSU5fVE9fQkNEKHlycyk7CisJCQlzZWMgPSBiaW4yYmNkKHNlYyk7CisJCQltaW4gPSBiaW4yYmNkKG1pbik7CisJCQlocnMgPSBiaW4yYmNkKGhycyk7CisJCQlkYXkgPSBiaW4yYmNkKGRheSk7CisJCQltb24gPSBiaW4yYmNkKG1vbik7CisJCQl5cnMgPSBiaW4yYmNkKHlycyk7CiAKIAkJCWxvY2tfa2VybmVsKCk7CiAJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHNwNTZrLmMgYi9kcml2ZXJzL2NoYXIvZHNwNTZrLmMKaW5kZXggY2E3YzcyYS4uODU4MzJhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RzcDU2ay5jCisrKyBiL2RyaXZlcnMvY2hhci9kc3A1NmsuYwpAQCAtNTA4LDggKzUwOCw4IEBACiAJCWVyciA9IFBUUl9FUlIoZHNwNTZrX2NsYXNzKTsKIAkJZ290byBvdXRfY2hyZGV2OwogCX0KLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoZHNwNTZrX2NsYXNzLCBOVUxMLCBNS0RFVihEU1A1NktfTUFKT1IsIDApLAotCQkJICAgICAgTlVMTCwgImRzcDU2ayIpOworCWRldmljZV9jcmVhdGUoZHNwNTZrX2NsYXNzLCBOVUxMLCBNS0RFVihEU1A1NktfTUFKT1IsIDApLCBOVUxMLAorCQkgICAgICAiZHNwNTZrIik7CiAKIAlwcmludGsoYmFubmVyKTsKIAlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9lcGNhLmMgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCmluZGV4IDQ5OThiMjcuLmNmMjQ2MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lcGNhLmMKKysrIGIvZHJpdmVycy9jaGFyL2VwY2EuYwpAQCAtMjQ3Nyw3ICsyNDc3LDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChtc2VjID09IC0xKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCW1zZWMgPSAweEZGRkY7CisJZWxzZSBpZiAobXNlYyA+IDB4RkZGRSkKKwkJbXNlYyA9IDB4RkZGRTsKKwllbHNlIGlmIChtc2VjIDwgMSkKKwkJbXNlYyA9IDE7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZXBjYV9sb2NrLCBmbGFncyk7CiAJZ2xvYmFsd2lub24oY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2hwZXQuYyBiL2RyaXZlcnMvY2hhci9ocGV0LmMKaW5kZXggZjNjZmI0Yy4uNDA4ZjVmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2hwZXQuYworKysgYi9kcml2ZXJzL2NoYXIvaHBldC5jCkBAIC0yMTksNyArMjE5LDcgQEAKIAlmb3IgKGlycSA9IGZpbmRfZmlyc3RfYml0KCZ2LCBIUEVUX01BWF9JUlEpOyBpcnEgPCBIUEVUX01BWF9JUlE7CiAJCWlycSA9IGZpbmRfbmV4dF9iaXQoJnYsIEhQRVRfTUFYX0lSUSwgMSArIGlycSkpIHsKIAotCQlpZiAoaXJxID49IE5SX0lSUVMpIHsKKwkJaWYgKGlycSA+PSBucl9pcnFzKSB7CiAJCQlpcnEgPSBIUEVUX01BWF9JUlE7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYwppbmRleCBlYzdhZGVkLi5iZjcwNDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYwpAQCAtMzY3LDEzICszNjcsMTMgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHAtPmxvY2ssIGZsYWdzKTsKIAogCWlmICgtLWhwLT5jb3VudCA9PSAwKSB7Ci0JCWlmIChocC0+b3BzLT5ub3RpZmllcl9kZWwpCi0JCQlocC0+b3BzLT5ub3RpZmllcl9kZWwoaHAsIGhwLT5kYXRhKTsKLQogCQkvKiBXZSBhcmUgZG9uZSB3aXRoIHRoZSB0dHkgcG9pbnRlciBub3cuICovCiAJCWhwLT50dHkgPSBOVUxMOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZocC0+bG9jaywgZmxhZ3MpOwogCisJCWlmIChocC0+b3BzLT5ub3RpZmllcl9kZWwpCisJCQlocC0+b3BzLT5ub3RpZmllcl9kZWwoaHAsIGhwLT5kYXRhKTsKKwogCQkvKgogCQkgKiBDaGFpbiBjYWxscyBjaGFyc19pbl9idWZmZXIoKSBhbmQgcmV0dXJucyBpbW1lZGlhdGVseSBpZgogCQkgKiB0aGVyZSBpcyBubyBidWZmZXJlZCBkYXRhIG90aGVyd2lzZSBzbGVlcHMgb24gYSB3YWl0IHF1ZXVlCkBAIC00MTYsMTEgKzQxNiwxMSBAQAogCWhwLT5uX291dGJ1ZiA9IDA7CiAJaHAtPnR0eSA9IE5VTEw7CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZocC0+bG9jaywgZmxhZ3MpOworCiAJaWYgKGhwLT5vcHMtPm5vdGlmaWVyX2RlbCkKIAkJCWhwLT5vcHMtPm5vdGlmaWVyX2RlbChocCwgaHAtPmRhdGEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHAtPmxvY2ssIGZsYWdzKTsKLQogCXdoaWxlKHRlbXBfb3Blbl9jb3VudCkgewogCQktLXRlbXBfb3Blbl9jb3VudDsKIAkJa3JlZl9wdXQoJmhwLT5rcmVmLCBkZXN0cm95X2h2Y19zdHJ1Y3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCmluZGV4IDUxNzM4YmQuLmQ0ZTdkY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKQEAgLTExOCwxOCArMTE4LDIxIEBACiAKIAltZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwKIAkJCQkgcGRldi0+bmFtZSk7Ci0JaWYgKG1lbSA9PSBOVUxMKQotCQlyZXR1cm4gLUVCVVNZOworCWlmIChtZW0gPT0gTlVMTCkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3JlZ2lvbjsKKwl9CiAKIAlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgbWVtKTsKLQlybmdfYmFzZSA9ICh1MzIgX19mb3JjZSBfX2lvbWVtICopaW9fcDJ2KHJlcy0+c3RhcnQpOworCXJuZ19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoIXJuZ19iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQogCiAJcmV0ID0gaHdybmdfcmVnaXN0ZXIoJm9tYXBfcm5nX29wcyk7Ci0JaWYgKHJldCkgewotCQlyZWxlYXNlX3Jlc291cmNlKG1lbSk7Ci0JCXJuZ19iYXNlID0gTlVMTDsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVnaXN0ZXI7CiAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiT01BUCBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciB2ZXIuICUwMnhcbiIsCiAJCW9tYXBfcm5nX3JlYWRfcmVnKFJOR19SRVZfUkVHKSk7CkBAIC0xMzgsNiArMTQxLDE4IEBACiAJcm5nX2RldiA9IHBkZXY7CiAKIAlyZXR1cm4gMDsKKworZXJyX3JlZ2lzdGVyOgorCWlvdW5tYXAocm5nX2Jhc2UpOworCXJuZ19iYXNlID0gTlVMTDsKK2Vycl9pb3JlbWFwOgorCXJlbGVhc2VfcmVzb3VyY2UobWVtKTsKK2Vycl9yZWdpb246CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWNsa19kaXNhYmxlKHJuZ19pY2spOworCQljbGtfcHV0KHJuZ19pY2spOworCX0KKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZXhpdCBvbWFwX3JuZ19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTE0OCw2ICsxNjMsOCBAQAogCiAJb21hcF9ybmdfd3JpdGVfcmVnKFJOR19NQVNLX1JFRywgMHgwKTsKIAorCWlvdW5tYXAocm5nX2Jhc2UpOworCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCWNsa19kaXNhYmxlKHJuZ19pY2spOwogCQljbGtfcHV0KHJuZ19pY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMgYi9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYwppbmRleCA2Nzc0NTcyLi43MGUwZWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYworKysgYi9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYwpAQCAtNzQ1LDEyICs3NDUsMTIgQEAKIAogCQlwQiA9IGkyQm9hcmRQdHJUYWJsZVtpXTsKIAkJaWYgKHBCICE9IE5VTEwpIHsKLQkJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShpcDJfY2xhc3MsIE5VTEwsCi0JCQkJCSAgICAgIE1LREVWKElQMl9JUExfTUFKT1IsIDQgKiBpKSwKLQkJCQkJICAgICAgTlVMTCwgImlwbCVkIiwgaSk7Ci0JCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoaXAyX2NsYXNzLCBOVUxMLAotCQkJCQkgICAgICBNS0RFVihJUDJfSVBMX01BSk9SLCA0ICogaSArIDEpLAotCQkJCQkgICAgICBOVUxMLCAic3RhdCVkIiwgaSk7CisJCQlkZXZpY2VfY3JlYXRlKGlwMl9jbGFzcywgTlVMTCwKKwkJCQkgICAgICBNS0RFVihJUDJfSVBMX01BSk9SLCA0ICogaSksCisJCQkJICAgICAgTlVMTCwgImlwbCVkIiwgaSk7CisJCQlkZXZpY2VfY3JlYXRlKGlwMl9jbGFzcywgTlVMTCwKKwkJCQkgICAgICBNS0RFVihJUDJfSVBMX01BSk9SLCA0ICogaSArIDEpLAorCQkJCSAgICAgIE5VTEwsICJzdGF0JWQiLCBpKTsKIAogCQkJZm9yIChib3ggPSAwOyBib3ggPCBBQlNfTUFYX0JPWEVTOyBib3grKykKIAkJCQlmb3IgKGogPSAwOyBqIDwgQUJTX0JJR0dFU1RfQk9YOyBqKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXAyNy1ydGMuYyBiL2RyaXZlcnMvY2hhci9pcDI3LXJ0Yy5jCmluZGV4IGVjOWQwNDQuLjJhYmQ4ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcDI3LXJ0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9pcDI3LXJ0Yy5jCkBAIC0xMzAsMTIgKzEzMCwxMiBAQAogCQlpZiAoeXJzID49IDEwMCkKIAkJCXlycyAtPSAxMDA7CiAKLQkJc2VjID0gQklOMkJDRChzZWMpOwotCQltaW4gPSBCSU4yQkNEKG1pbik7Ci0JCWhycyA9IEJJTjJCQ0QoaHJzKTsKLQkJZGF5ID0gQklOMkJDRChkYXkpOwotCQltb24gPSBCSU4yQkNEKG1vbik7Ci0JCXlycyA9IEJJTjJCQ0QoeXJzKTsKKwkJc2VjID0gYmluMmJjZChzZWMpOworCQltaW4gPSBiaW4yYmNkKG1pbik7CisJCWhycyA9IGJpbjJiY2QoaHJzKTsKKwkJZGF5ID0gYmluMmJjZChkYXkpOworCQltb24gPSBiaW4yYmNkKG1vbik7CisJCXlycyA9IGJpbjJiY2QoeXJzKTsKIAogCQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CiAJCXJ0Yy0+Y29udHJvbCB8PSBNNDhUMzVfUlRDX1NFVDsKQEAgLTMxMSwxMiArMzExLDEyIEBACiAJcnRjLT5jb250cm9sICY9IH5NNDhUMzVfUlRDX1JFQUQ7CiAJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CiAKLQlydGNfdG0tPnRtX3NlYyA9IEJDRDJCSU4ocnRjX3RtLT50bV9zZWMpOwotCXJ0Y190bS0+dG1fbWluID0gQkNEMkJJTihydGNfdG0tPnRtX21pbik7Ci0JcnRjX3RtLT50bV9ob3VyID0gQkNEMkJJTihydGNfdG0tPnRtX2hvdXIpOwotCXJ0Y190bS0+dG1fbWRheSA9IEJDRDJCSU4ocnRjX3RtLT50bV9tZGF5KTsKLQlydGNfdG0tPnRtX21vbiA9IEJDRDJCSU4ocnRjX3RtLT50bV9tb24pOwotCXJ0Y190bS0+dG1feWVhciA9IEJDRDJCSU4ocnRjX3RtLT50bV95ZWFyKTsKKwlydGNfdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnRjX3RtLT50bV9zZWMpOworCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJcnRjX3RtLT50bV9ob3VyID0gYmNkMmJpbihydGNfdG0tPnRtX2hvdXIpOworCXJ0Y190bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX3RtLT50bV9tZGF5KTsKKwlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCXJ0Y190bS0+dG1feWVhciA9IGJjZDJiaW4ocnRjX3RtLT50bV95ZWFyKTsKIAogCS8qCiAJICogQWNjb3VudCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBob3cgdGhlIFJUQyB1c2VzIHRoZSB2YWx1ZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfZGV2aW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMKaW5kZXggNjRlMWMxNi4uODM1YTMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMKQEAgLTg3MSw3ICs4NzEsNyBAQAogCWVudHJ5LT5kZXYgPSBkZXY7CiAKIAltdXRleF9sb2NrKCZyZWdfbGlzdF9tdXRleCk7Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGlwbWlfY2xhc3MsIGRldmljZSwgZGV2LCBOVUxMLCAiaXBtaSVkIiwgaWZfbnVtKTsKKwlkZXZpY2VfY3JlYXRlKGlwbWlfY2xhc3MsIGRldmljZSwgZGV2LCBOVUxMLCAiaXBtaSVkIiwgaWZfbnVtKTsKIAlsaXN0X2FkZCgmZW50cnktPmxpbmssICZyZWdfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZyZWdfbGlzdF9tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IDhlOGFmYjYuLjMxMjNiZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0yNjk1LDcgKzI2OTUsNyBAQAogCWZvciAoaSA9IDA7IDsgaSsrKSB7CiAJCWlmICghaXBtaV9kZWZhdWx0c1tpXS5wb3J0KQogCQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX1BQQ19NRVJHRQorI2lmZGVmIENPTkZJR19QUEMKIAkJaWYgKGNoZWNrX2xlZ2FjeV9pb3BvcnQoaXBtaV9kZWZhdWx0c1tpXS5wb3J0KSkKIAkJCWNvbnRpbnVlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMgYi9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKaW5kZXggNTA1ZDdhMS4uNDRlNWQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCisrKyBiL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYwpAQCAtNDYwMCw5ICs0NjAwLDggQEAKIAogCWlzdGFsbGlvbl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInN0YWxpb21lbSIpOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShpc3RhbGxpb25fY2xhc3MsIE5VTEwsCi0JCQkJICAgICAgTUtERVYoU1RMX1NJT01FTU1BSk9SLCBpKSwKLQkJCQkgICAgICBOVUxMLCAic3RhbGlvbWVtJWQiLCBpKTsKKwkJZGV2aWNlX2NyZWF0ZShpc3RhbGxpb25fY2xhc3MsIE5VTEwsIE1LREVWKFNUTF9TSU9NRU1NQUpPUiwgaSksCisJCQkgICAgICBOVUxMLCAic3RhbGlvbWVtJWQiLCBpKTsKIAogCXJldHVybiAwOwogZXJyX2RlaW5pdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKaW5kZXggN2IzYTIxMi4uZGUyNmE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKKysrIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKQEAgLTEyNDksNyArMTI0OSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoa2V5Y29kZSA+IE5SX0tFWVMpCisJaWYgKGtleWNvZGUgPj0gTlJfS0VZUykKIAkJaWYgKGtleWNvZGUgPj0gS0VZX0JSTF9ET1QxICYmIGtleWNvZGUgPD0gS0VZX0JSTF9ET1Q4KQogCQkJa2V5c3ltID0gSyhLVF9CUkwsIGtleWNvZGUgLSBLRVlfQlJMX0RPVDEgKyAxKTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2xwLmMgYi9kcml2ZXJzL2NoYXIvbHAuYwppbmRleCAzZjI3MTliLi5lNDQ0YzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbHAuYworKysgYi9kcml2ZXJzL2NoYXIvbHAuYwpAQCAtODEzLDggKzgxMyw4IEBACiAJaWYgKHJlc2V0KQogCQlscF9yZXNldChucik7CiAKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEobHBfY2xhc3MsIHBvcnQtPmRldiwgTUtERVYoTFBfTUFKT1IsIG5yKSwgTlVMTCwKLQkJCSAgICAgICJscCVkIiwgbnIpOworCWRldmljZV9jcmVhdGUobHBfY2xhc3MsIHBvcnQtPmRldiwgTUtERVYoTFBfTUFKT1IsIG5yKSwgTlVMTCwKKwkJICAgICAgImxwJWQiLCBucik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJscCVkOiB1c2luZyAlcyAoJXMpLlxuIiwgbnIsIHBvcnQtPm5hbWUsIAogCSAgICAgICAocG9ydC0+aXJxID09IFBBUlBPUlRfSVJRX05PTkUpPyJwb2xsaW5nIjoiaW50ZXJydXB0LWRyaXZlbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jCmluZGV4IDY3MmIwOGUuLjY0MzFmNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYworKysgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTk5Miw5ICs5OTIsOSBAQAogCiAJbWVtX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAibWVtIik7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2bGlzdCk7IGkrKykKLQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKG1lbV9jbGFzcywgTlVMTCwKLQkJCQkgICAgICBNS0RFVihNRU1fTUFKT1IsIGRldmxpc3RbaV0ubWlub3IpLAotCQkJCSAgICAgIE5VTEwsIGRldmxpc3RbaV0ubmFtZSk7CisJCWRldmljZV9jcmVhdGUobWVtX2NsYXNzLCBOVUxMLAorCQkJICAgICAgTUtERVYoTUVNX01BSk9SLCBkZXZsaXN0W2ldLm1pbm9yKSwgTlVMTCwKKwkJCSAgICAgIGRldmxpc3RbaV0ubmFtZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9taXNjLmMgYi9kcml2ZXJzL2NoYXIvbWlzYy5jCmluZGV4IDk5OWFhNzcuLmE1ZTBkYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9taXNjLmMKKysrIGIvZHJpdmVycy9jaGFyL21pc2MuYwpAQCAtMjE3LDggKzIxNyw4IEBACiAJCW1pc2NfbWlub3JzW21pc2MtPm1pbm9yID4+IDNdIHw9IDEgPDwgKG1pc2MtPm1pbm9yICYgNyk7CiAJZGV2ID0gTUtERVYoTUlTQ19NQUpPUiwgbWlzYy0+bWlub3IpOwogCi0JbWlzYy0+dGhpc19kZXZpY2UgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEobWlzY19jbGFzcywgbWlzYy0+cGFyZW50LAotCQkJCQkJICBkZXYsIE5VTEwsICIlcyIsIG1pc2MtPm5hbWUpOworCW1pc2MtPnRoaXNfZGV2aWNlID0gZGV2aWNlX2NyZWF0ZShtaXNjX2NsYXNzLCBtaXNjLT5wYXJlbnQsIGRldiwgTlVMTCwKKwkJCQkJICAiJXMiLCBtaXNjLT5uYW1lKTsKIAlpZiAoSVNfRVJSKG1pc2MtPnRoaXNfZGV2aWNlKSkgewogCQllcnIgPSBQVFJfRVJSKG1pc2MtPnRoaXNfZGV2aWNlKTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbW94YS5jIGIvZHJpdmVycy9jaGFyL21veGEuYwppbmRleCA1ZGY0MDAzLi4xMmQzMjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbW94YS5jCisrKyBiL2RyaXZlcnMvY2hhci9tb3hhLmMKQEAgLTUxMyw3ICs1MTMsNyBAQAogCQlzaXplX3QgbGVuKQogewogCXZvaWQgX19pb21lbSAqYmFzZUFkZHIgPSBicmQtPmJhc2VtZW07Ci0JY29uc3QgdTE2ICp1cHRyID0gcHRyOworCWNvbnN0IF9fbGUxNiAqdXB0ciA9IHB0cjsKIAlzaXplX3Qgd2xlbiwgbGVuMiwgajsKIAl1bnNpZ25lZCBsb25nIGtleSwgbG9hZGJ1ZiwgbG9hZGxlbiwgY2hlY2tzdW0sIGNoZWNrc3VtX29rOwogCXVuc2lnbmVkIGludCBpLCByZXRyeTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wYzg3MzZ4X2dwaW8uYyBiL2RyaXZlcnMvY2hhci9wYzg3MzZ4X2dwaW8uYwppbmRleCBiOTMwZGU1Li4zZjdkYThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGM4NzM2eF9ncGlvLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjODczNnhfZ3Bpby5jCkBAIC00MSw3ICs0MSw4IEBACiAjZGVmaW5lIFNJT19CQVNFMiAgICAgICAweDRFCS8qIGFsdCBjb21tYW5kLXJlZyB0byBjaGVjayAqLwogCiAjZGVmaW5lIFNJT19TSUQJCTB4MjAJLyogU3VwZXJJL08gSUQgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU0lPX1NJRF9WQUxVRQkweGU5CS8qIEV4cGVjdGVkIHZhbHVlIGluIFN1cGVySS9PIElEIFJlZ2lzdGVyICovCisjZGVmaW5lIFNJT19TSURfUEM4NzM2NQkweGU1CS8qIEV4cGVjdGVkIHZhbHVlIGluIElEIFJlZ2lzdGVyIGZvciBQQzg3MzY1ICovCisjZGVmaW5lIFNJT19TSURfUEM4NzM2NgkweGU5CS8qIEV4cGVjdGVkIHZhbHVlIGluIElEIFJlZ2lzdGVyIGZvciBQQzg3MzY2ICovCiAKICNkZWZpbmUgU0lPX0NGMQkJMHgyMQkvKiBjaGlwIGNvbmZpZywgYml0MCBpcyBjaGlwIGVuYWJsZSAqLwogCkBAIC05MSwxMyArOTIsMTcgQEAKIAogc3RhdGljIGludCBwYzg3MzZ4X3N1cGVyaW9fcHJlc2VudCh2b2lkKQogeworCWludCBpZDsKKwogCS8qIHRyeSB0aGUgMiBwb3NzaWJsZSB2YWx1ZXMsIHJlYWQgYSBoYXJkd2FyZSByZWcgdG8gdmVyaWZ5ICovCiAJc3VwZXJpb19jbWQgPSBTSU9fQkFTRTE7Ci0JaWYgKHN1cGVyaW9faW5iKFNJT19TSUQpID09IFNJT19TSURfVkFMVUUpCisJaWQgPSBzdXBlcmlvX2luYihTSU9fU0lEKTsKKwlpZiAoaWQgPT0gU0lPX1NJRF9QQzg3MzY1IHx8IGlkID09IFNJT19TSURfUEM4NzM2NikKIAkJcmV0dXJuIHN1cGVyaW9fY21kOwogCiAJc3VwZXJpb19jbWQgPSBTSU9fQkFTRTI7Ci0JaWYgKHN1cGVyaW9faW5iKFNJT19TSUQpID09IFNJT19TSURfVkFMVUUpCisJaWQgPSBzdXBlcmlvX2luYihTSU9fU0lEKTsKKwlpZiAoaWQgPT0gU0lPX1NJRF9QQzg3MzY1IHx8IGlkID09IFNJT19TSURfUEM4NzM2NikKIAkJcmV0dXJuIHN1cGVyaW9fY21kOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwppbmRleCBmMDcwYWU3Li5kYmI5MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKQEAgLTE3NTksNjUgKzE3NTksNDAgQEAKIAogLyo9PT09IEludGVyZmFjZSB0byBQQ01DSUEgTGF5ZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAorc3RhdGljIGludCBjbTQwMDBfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJICAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlpZiAoIWNmZy0+aW8ubndpbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBHZXQgdGhlIElPYWRkciAqLworCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZmctPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBjZmctPmlvLndpblswXS5sZW47CisJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJaWYgKCEoY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCWlmICghKGNmZy0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBjZmctPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworfQorCiBzdGF0aWMgaW50IGNtNDAwMF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rLCBpbnQgZGV2bm8pCiB7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldjsKLQl0dXBsZV90IHR1cGxlOwotCWNpc3BhcnNlX3QgcGFyc2U7Ci0JdV9jaGFyIGJ1Zls2NF07Ci0JaW50IGZhaWxfZm4sIGZhaWxfcmM7Ci0JaW50IHJjOwogCiAJLyogcmVhZCB0aGUgY29uZmlnLXR1cGxlcyAqLwotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0KLQlsaW5rLT5pby5CYXNlUG9ydDIgPSAwOwotCWxpbmstPmlvLk51bVBvcnRzMiA9IDA7Ci0JbGluay0+aW8uQXR0cmlidXRlczIgPSAwOwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCWZvciAocmMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0JICAgICByYyA9PSBDU19TVUNDRVNTOyByYyA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKSB7Ci0KLQkJcmMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKLQkJaWYgKHJjICE9IENTX1NVQ0NFU1MpCi0JCQljb250aW51ZTsKLQkJcmMgPSBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwotCQlpZiAocmMgIT0gQ1NfU1VDQ0VTUykKLQkJCWNvbnRpbnVlOwotCi0JCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmluZGV4OwotCi0JCWlmICghcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby5ud2luKQotCQkJY29udGludWU7Ci0KLQkJLyogR2V0IHRoZSBJT2FkZHIgKi8KLQkJbGluay0+aW8uQmFzZVBvcnQxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0uYmFzZTsKLQkJbGluay0+aW8uTnVtUG9ydHMxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0ubGVuOwotCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQlpZiAoIShwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCWlmICghKHBhcnNlLmNmdGFibGVfZW50cnkuaW8uZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLmZsYWdzCi0JCSAgICAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCi0JCXJjID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJaWYgKHJjID09IENTX1NVQ0NFU1MpCi0JCQlicmVhazsJLyogd2UgYXJlIGRvbmUgKi8KLQl9Ci0JaWYgKHJjICE9IENTX1NVQ0NFU1MpCisJaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBjbTQwMDBfY29uZmlnX2NoZWNrLCBOVUxMKSkKIAkJZ290byBjc19yZWxlYXNlOwogCiAJbGluay0+Y29uZi5JbnRUeXBlID0gMDAwMDAwMDI7CiAKLQlpZiAoKGZhaWxfcmMgPQotCSAgICAgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpICE9IENTX1NVQ0NFU1MpIHsKLQkJZmFpbF9mbiA9IFJlcXVlc3RDb25maWd1cmF0aW9uOworCWlmIChwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSkKIAkJZ290byBjc19yZWxlYXNlOwotCX0KIAogCWRldiA9IGxpbmstPnByaXY7CiAJc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsIERFVklDRV9OQU1FICIlZCIsIGRldm5vKTsKQEAgLTE4OTYsNyArMTg3MSw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGNtbV9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIGkpLCBOVUxMLCAiY21tJWQiLCBpKTsKKwlkZXZpY2VfY3JlYXRlKGNtbV9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIGkpLCBOVUxMLCAiY21tJWQiLCBpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMKaW5kZXggMGI1OTM0Yi4uNGYwNzIzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDA0MF9jcy5jCkBAIC01MjYsNjUgKzUyNiw0OSBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIGludCBjbTQwNDBfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJICAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlpbnQgcmM7CisJaWYgKCFjZmctPmlvLm53aW4pCisJCXJldHVybiAtRU5PREVWOworCisJLyogR2V0IHRoZSBJT2FkZHIgKi8KKwlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKKwlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2ZnLT5pby53aW5bMF0ubGVuOworCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworCWlmICghKGNmZy0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwlpZiAoIShjZmctPmlvLmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCisJcmMgPSBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZoYW5kbGVfdG9fZGV2KHBfZGV2KSwKKwkJICAgInBjbWNpYV9yZXF1ZXN0X2lvIHJldHVybmVkIDB4JXhcbiIsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKKwogc3RhdGljIGludCByZWFkZXJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgZGV2bm8pCiB7CiAJc3RydWN0IHJlYWRlcl9kZXYgKmRldjsKLQl0dXBsZV90IHR1cGxlOwotCWNpc3BhcnNlX3QgcGFyc2U7Ci0JdV9jaGFyIGJ1Zls2NF07Ci0JaW50IGZhaWxfZm4sIGZhaWxfcmM7Ci0JaW50IHJjOwotCi0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CisJaW50IGZhaWxfcmM7CiAKIAlsaW5rLT5pby5CYXNlUG9ydDIgPSAwOwogCWxpbmstPmlvLk51bVBvcnRzMiA9IDA7CiAJbGluay0+aW8uQXR0cmlidXRlczIgPSAwOwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCWZvciAocmMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0JICAgICByYyA9PSBDU19TVUNDRVNTOwotCSAgICAgcmMgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSkgewotCQlyYyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwotCQlpZiAocmMgIT0gQ1NfU1VDQ0VTUykKLQkJCWNvbnRpbnVlOwotCQlyYyA9IHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0JCWlmIChyYyAhPSBDU19TVUNDRVNTKQotCQkJY29udGludWU7CiAKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW5kZXg7Ci0KLQkJaWYgKCFwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLm53aW4pCi0JCQljb250aW51ZTsKLQotCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblswXS5iYXNlOwotCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblswXS5sZW47Ci0JCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCWlmICghKHBhcnNlLmNmdGFibGVfZW50cnkuaW8uZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJaWYgKCEocGFyc2UuY2Z0YWJsZV9lbnRyeS5pby5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8uZmxhZ3MKLQkJCQkJCSYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCXJjID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQotCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJmhhbmRsZV90b19kZXYobGluayksICJmb28iKTsKLQkJaWYgKHJjID09IENTX1NVQ0NFU1MpCi0JCQlicmVhazsKLQkJZWxzZQotCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZoYW5kbGVfdG9fZGV2KGxpbmspLAotCQkJCSAgICJwY21jaWFfcmVxdWVzdF9pbyBmYWlsZWQgMHgleFxuIiwgcmMpOwotCX0KLQlpZiAocmMgIT0gQ1NfU1VDQ0VTUykKKwlpZiAocGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGNtNDA0MF9jb25maWdfY2hlY2ssIE5VTEwpKQogCQlnb3RvIGNzX3JlbGVhc2U7CiAKIAlsaW5rLT5jb25mLkludFR5cGUgPSAwMDAwMDAwMjsKIAotCWlmICgoZmFpbF9yYyA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywmbGluay0+Y29uZikpCi0JCQkJCQkJCSE9Q1NfU1VDQ0VTUykgewotCQlmYWlsX2ZuID0gUmVxdWVzdENvbmZpZ3VyYXRpb247CisJZmFpbF9yYyA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCWlmIChmYWlsX3JjICE9IDApIHsKIAkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZoYW5kbGVfdG9fZGV2KGxpbmspLAogCQkJICAgInBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24gZmFpbGVkIDB4JXhcbiIsCiAJCQkgICBmYWlsX3JjKTsKQEAgLTY1Myw4ICs2MzcsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShjbXhfY2xhc3MsIE5VTEwsIE1LREVWKG1ham9yLCBpKSwgTlVMTCwKLQkJCSAgICAgICJjbXglZCIsIGkpOworCWRldmljZV9jcmVhdGUoY214X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgaSksIE5VTEwsICJjbXglZCIsIGkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL21haW4uYwppbmRleCA1ZWNhN2E5Li41MjE2ZmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9tYWluLmMKQEAgLTY1LDkgKzY1LDkgQEAKIAlzdHJ1Y3QgaXB3X2RldiAqaXB3ID0gY29udGFpbmVyX29mKHdvcmtfcmVib290LCBzdHJ1Y3QgaXB3X2RldiwKIAkJCXdvcmtfcmVib290KTsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGlwdy0+bGluazsKLQlpbnQgcmV0ID0gcGNjYXJkX3Jlc2V0X2NhcmQobGluay0+c29ja2V0KTsKKwlpbnQgcmV0ID0gcGNtY2lhX3Jlc2V0X2NhcmQobGluay0+c29ja2V0KTsKIAotCWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykKKwlpZiAocmV0ICE9IDApCiAJCWNzX2Vycm9yKGxpbmssIFJlc2V0Q2FyZCwgcmV0KTsKIH0KIApAQCAtODMsNyArODMsNiBAQAogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gaXB3LT5saW5rOwogCWludCByZXQ7Ci0JY29uZmlnX2luZm9fdCBjb25mOwogCXR1cGxlX3QgdHVwbGU7CiAJdW5zaWduZWQgc2hvcnQgYnVmWzY0XTsKIAljaXNwYXJzZV90IHBhcnNlOwpAQCAtMTA1LDcgKzEwNCw3IEBACiAJd2hpbGUgKHJldCA9PSAwKSB7CiAJCXJldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwogCi0JCWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeworCQlpZiAocmV0ICE9IDApIHsKIAkJCWNzX2Vycm9yKGxpbmssIEdldFR1cGxlRGF0YSwgcmV0KTsKIAkJCWdvdG8gZXhpdDA7CiAJCX0KQEAgLTExNiwyMSArMTE1LDIxIEBACiAKIAlyZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7CiAKLQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmV0ICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgcmV0KTsKIAkJZ290byBleGl0MDsKIAl9CiAKIAlyZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKIAotCWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXQgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIHJldCk7CiAJCWdvdG8gZXhpdDA7CiAJfQogCi0JcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKKwlyZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpOwogCi0JaWYgKHJldCAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHJldCAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFBhcnNlVHVwbGUsIHJldCk7CiAJCWdvdG8gZXhpdDA7CiAJfQpAQCAtMTUyLDIxICsxNTEsMjEgQEAKIAogCXJldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKIAotCWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXQgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBHZXRGaXJzdFR1cGxlLCByZXQpOwogCQlnb3RvIGV4aXQwOwogCX0KIAogCXJldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwogCi0JaWYgKHJldCAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHJldCAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIEdldFR1cGxlRGF0YSwgcmV0KTsKIAkJZ290byBleGl0MDsKIAl9CiAKLQlyZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOworCXJldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSk7CiAKLQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmV0ICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCByZXQpOwogCQlnb3RvIGV4aXQwOwogCX0KQEAgLTE4MSw3ICsxODAsNyBAQAogCiAJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKIAotCWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXQgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIHJldCk7CiAJCWdvdG8gZXhpdDA7CiAJfQpAQCAtMTk1LDIxICsxOTQsMjEgQEAKIAogCXJldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKIAotCWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXQgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBHZXRGaXJzdFR1cGxlLCByZXQpOwogCQlnb3RvIGV4aXQxOwogCX0KIAogCXJldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwogCi0JaWYgKHJldCAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHJldCAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIEdldFR1cGxlRGF0YSwgcmV0KTsKIAkJZ290byBleGl0MTsKIAl9CiAKLQlyZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOworCXJldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSk7CiAKLQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmV0ICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgUGFyc2VUdXBsZSwgcmV0KTsKIAkJZ290byBleGl0MTsKIAl9CkBAIC0yMjcsNyArMjI2LDcgQEAKIAkJcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmaXB3LT5yZXF1ZXN0X2NvbW1vbl9tZW1vcnksCiAJCQkJJmlwdy0+aGFuZGxlX2NvbW1vbl9tZW1vcnkpOwogCi0JCWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeworCQlpZiAocmV0ICE9IDApIHsKIAkJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RXaW5kb3csIHJldCk7CiAJCQlnb3RvIGV4aXQxOwogCQl9CkBAIC0yMzksNyArMjM4LDcgQEAKIAkJcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShpcHctPmhhbmRsZV9jb21tb25fbWVtb3J5LAogCQkJCSZtZW1yZXFfY29tbW9uX21lbW9yeSk7CiAKLQkJaWYgKHJldCAhPSBDU19TVUNDRVNTKSB7CisJCWlmIChyZXQgIT0gMCkgewogCQkJY3NfZXJyb3IobGluaywgTWFwTWVtUGFnZSwgcmV0KTsKIAkJCWdvdG8gZXhpdDE7CiAJCX0KQEAgLTI2MSw3ICsyNjAsNyBAQAogCQlyZXQgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZpcHctPnJlcXVlc3RfYXR0cl9tZW1vcnksCiAJCQkJJmlwdy0+aGFuZGxlX2F0dHJfbWVtb3J5KTsKIAotCQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIHsKKwkJaWYgKHJldCAhPSAwKSB7CiAJCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0V2luZG93LCByZXQpOwogCQkJZ290byBleGl0MjsKIAkJfQpAQCAtMjcyLDcgKzI3MSw3IEBACiAJCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UoaXB3LT5oYW5kbGVfYXR0cl9tZW1vcnksCiAJCQkJJm1lbXJlcV9hdHRyX21lbW9yeSk7CiAKLQkJaWYgKHJldCAhPSBDU19TVUNDRVNTKSB7CisJCWlmIChyZXQgIT0gMCkgewogCQkJY3NfZXJyb3IobGluaywgTWFwTWVtUGFnZSwgcmV0KTsKIAkJCWdvdG8gZXhpdDI7CiAJCX0KQEAgLTI5MiwyMCArMjkxLDExIEBACiAKIAlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CiAKLQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmV0ICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgcmV0KTsKIAkJZ290byBleGl0MzsKIAl9CiAKLQkvKiBMb29rIHVwIGN1cnJlbnQgVmNjICovCi0KLQlyZXQgPSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmY29uZik7Ci0KLQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIHsKLQkJY3NfZXJyb3IobGluaywgR2V0Q29uZmlndXJhdGlvbkluZm8sIHJldCk7Ci0JCWdvdG8gZXhpdDQ7Ci0JfQotCiAJcHJpbnRrKEtFUk5fSU5GTyBJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FICI6IENhcmQgdHlwZSAlc1xuIiwKIAkJCWlwdy0+aXNfdjJfY2FyZCA/ICJWMi9WMyIgOiAiVjEiKTsKIAlwcmludGsoS0VSTl9JTkZPIElQV0lSRUxFU1NfUENDQVJEX05BTUUKQEAgLTM0MSw3ICszMzEsNyBAQAogCSAqLwogCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwogCi0JaWYgKHJldCAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHJldCAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCByZXQpOwogCQlnb3RvIGV4aXQ0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwppbmRleCBjMjQwNTYyLi45YTYyNmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCkBAIC02MDEsNyArNjAxLDcgQEAKIAogICAgIGNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7CiAgICAgQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSk7Ci0gICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSk7CisgICAgQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSk7CiAKICAgICBpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpIGRmbHQgPSAqY2ZnOwogICAgIGlmIChjZmctPmluZGV4ID09IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcHBkZXYuYyBiL2RyaXZlcnMvY2hhci9wcGRldi5jCmluZGV4IGJlZTM5ZmQuLmM4NGMzNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wcGRldi5jCisrKyBiL2RyaXZlcnMvY2hhci9wcGRldi5jCkBAIC03NjAsOSArNzYwLDggQEAKIAogc3RhdGljIHZvaWQgcHBfYXR0YWNoKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQogewotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShwcGRldl9jbGFzcywgcG9ydC0+ZGV2LAotCQkJICAgICAgTUtERVYoUFBfTUFKT1IsIHBvcnQtPm51bWJlciksCi0JCQkgICAgICBOVUxMLCAicGFycG9ydCVkIiwgcG9ydC0+bnVtYmVyKTsKKwlkZXZpY2VfY3JlYXRlKHBwZGV2X2NsYXNzLCBwb3J0LT5kZXYsIE1LREVWKFBQX01BSk9SLCBwb3J0LT5udW1iZXIpLAorCQkgICAgICBOVUxMLCAicGFycG9ydCVkIiwgcG9ydC0+bnVtYmVyKTsKIH0KIAogc3RhdGljIHZvaWQgcHBfZGV0YWNoKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCmluZGV4IDZhZjQzNWIuLjcwNWE4MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYW5kb20uYworKysgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKQEAgLTU1OCw5ICs1NTgsMjYgQEAKIAl1bnNpZ25lZCBkb250X2NvdW50X2VudHJvcHk6MTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSBpbnB1dF90aW1lcl9zdGF0ZTsKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqaXJxX3RpbWVyX3N0YXRlW05SX0lSUVNdOwogCitzdGF0aWMgc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKmdldF90aW1lcl9yYW5kX3N0YXRlKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKGlycSA+PSBucl9pcnFzKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBpcnFfdGltZXJfc3RhdGVbaXJxXTsKK30KKworc3RhdGljIHZvaWQgc2V0X3RpbWVyX3JhbmRfc3RhdGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKnN0YXRlKQoreworCWlmIChpcnEgPj0gbnJfaXJxcykKKwkJcmV0dXJuOworCisJaXJxX3RpbWVyX3N0YXRlW2lycV0gPSBzdGF0ZTsKK30KKworc3RhdGljIHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlIGlucHV0X3RpbWVyX3N0YXRlOworCiAvKgogICogVGhpcyBmdW5jdGlvbiBhZGRzIGVudHJvcHkgdG8gdGhlIGVudHJvcHkgInBvb2wiIGJ5IHVzaW5nIHRpbWluZwogICogZGVsYXlzLiAgSXQgdXNlcyB0aGUgdGltZXJfcmFuZF9zdGF0ZSBzdHJ1Y3R1cmUgdG8gbWFrZSBhbiBlc3RpbWF0ZQpAQCAtNjQ4LDExICs2NjUsMTUgQEAKIAogdm9pZCBhZGRfaW50ZXJydXB0X3JhbmRvbW5lc3MoaW50IGlycSkKIHsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgaXJxX3RpbWVyX3N0YXRlW2lycV0gPT0gTlVMTCkKKwlzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGdldF90aW1lcl9yYW5kX3N0YXRlKGlycSk7CisKKwlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJREVCVUdfRU5UKCJpcnEgZXZlbnQgJWRcbiIsIGlycSk7Ci0JYWRkX3RpbWVyX3JhbmRvbW5lc3MoaXJxX3RpbWVyX3N0YXRlW2lycV0sIDB4MTAwICsgaXJxKTsKKwlhZGRfdGltZXJfcmFuZG9tbmVzcyhzdGF0ZSwgMHgxMDAgKyBpcnEpOwogfQogCiAjaWZkZWYgQ09ORklHX0JMT0NLCkBAIC05MTIsNyArOTMzLDEyIEBACiB7CiAJc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKnN0YXRlOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTIHx8IGlycV90aW1lcl9zdGF0ZVtpcnFdKQorCWlmIChpcnEgPj0gbnJfaXJxcykKKwkJcmV0dXJuOworCisJc3RhdGUgPSBnZXRfdGltZXJfcmFuZF9zdGF0ZShpcnEpOworCisJaWYgKHN0YXRlKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtOTIxLDcgKzk0Nyw3IEBACiAJICovCiAJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZSkKLQkJaXJxX3RpbWVyX3N0YXRlW2lycV0gPSBzdGF0ZTsKKwkJc2V0X3RpbWVyX3JhbmRfc3RhdGUoaXJxLCBzdGF0ZSk7CiB9CiAKICNpZmRlZiBDT05GSUdfQkxPQ0sKQEAgLTEyMDUsNyArMTIzMSw3IEBACiAJcmV0dXJuIHByb2NfZG9zdHJpbmcoJmZha2VfdGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnAsIHBwb3MpOwogfQogCi1zdGF0aWMgaW50IHV1aWRfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IHV1aWRfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwKIAkJCSB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmF3LmMgYi9kcml2ZXJzL2NoYXIvcmF3LmMKaW5kZXggNDdiOGNmMi4uZTEzOTM3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jhdy5jCisrKyBiL2RyaXZlcnMvY2hhci9yYXcuYwpAQCAtMTMxLDggKzEzMSw4IEBACiBzdGF0aWMgdm9pZCBiaW5kX2RldmljZShzdHJ1Y3QgcmF3X2NvbmZpZ19yZXF1ZXN0ICpycSkKIHsKIAlkZXZpY2VfZGVzdHJveShyYXdfY2xhc3MsIE1LREVWKFJBV19NQUpPUiwgcnEtPnJhd19taW5vcikpOwotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShyYXdfY2xhc3MsIE5VTEwsIE1LREVWKFJBV19NQUpPUiwgcnEtPnJhd19taW5vciksCi0JCQkgICAgICBOVUxMLCAicmF3JWQiLCBycS0+cmF3X21pbm9yKTsKKwlkZXZpY2VfY3JlYXRlKHJhd19jbGFzcywgTlVMTCwgTUtERVYoUkFXX01BSk9SLCBycS0+cmF3X21pbm9yKSwgTlVMTCwKKwkJICAgICAgInJhdyVkIiwgcnEtPnJhd19taW5vcik7CiB9CiAKIC8qCkBAIC0yODMsOCArMjgzLDcgQEAKIAkJcmV0ID0gUFRSX0VSUihyYXdfY2xhc3MpOwogCQlnb3RvIGVycm9yX3JlZ2lvbjsKIAl9Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHJhd19jbGFzcywgTlVMTCwgTUtERVYoUkFXX01BSk9SLCAwKSwgTlVMTCwKLQkJCSAgICAgICJyYXdjdGwiKTsKKwlkZXZpY2VfY3JlYXRlKHJhd19jbGFzcywgTlVMTCwgTUtERVYoUkFXX01BSk9SLCAwKSwgTlVMTCwgInJhd2N0bCIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ydGMuYyBiL2RyaXZlcnMvY2hhci9ydGMuYwppbmRleCBiNDc3MTBjLi4zMmRjODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcnRjLmMKKysrIGIvZHJpdmVycy9jaGFyL3J0Yy5jCkBAIC05Niw3ICs5Niw3IEBACiBzdGF0aWMgaW50IHJ0Y19pcnE7CiAjZW5kaWYKIAotI2lmZGVmCUNPTkZJR19IUEVUX1JUQ19JUlEKKyNpZmRlZglDT05GSUdfSFBFVF9FTVVMQVRFX1JUQwogI3VuZGVmCVJUQ19JUlEKICNlbmRpZgogCkBAIC01MTgsMTcgKzUxOCwxNyBAQAogCQlpZiAoIShDTU9TX1JFQUQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkgfHwKIAkJCQkJCQlSVENfQUxXQVlTX0JDRCkgewogCQkJaWYgKHNlYyA8IDYwKQotCQkJCUJJTl9UT19CQ0Qoc2VjKTsKKwkJCQlzZWMgPSBiaW4yYmNkKHNlYyk7CiAJCQllbHNlCiAJCQkJc2VjID0gMHhmZjsKIAogCQkJaWYgKG1pbiA8IDYwKQotCQkJCUJJTl9UT19CQ0QobWluKTsKKwkJCQltaW4gPSBiaW4yYmNkKG1pbik7CiAJCQllbHNlCiAJCQkJbWluID0gMHhmZjsKIAogCQkJaWYgKGhycyA8IDI0KQotCQkJCUJJTl9UT19CQ0QoaHJzKTsKKwkJCQlocnMgPSBiaW4yYmNkKGhycyk7CiAJCQllbHNlCiAJCQkJaHJzID0gMHhmZjsKIAkJfQpAQCAtNjE0LDEyICs2MTQsMTIgQEAKIAogCQlpZiAoIShDTU9TX1JFQUQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkKIAkJICAgIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCQlCSU5fVE9fQkNEKHNlYyk7Ci0JCQlCSU5fVE9fQkNEKG1pbik7Ci0JCQlCSU5fVE9fQkNEKGhycyk7Ci0JCQlCSU5fVE9fQkNEKGRheSk7Ci0JCQlCSU5fVE9fQkNEKG1vbik7Ci0JCQlCSU5fVE9fQkNEKHlycyk7CisJCQlzZWMgPSBiaW4yYmNkKHNlYyk7CisJCQltaW4gPSBiaW4yYmNkKG1pbik7CisJCQlocnMgPSBiaW4yYmNkKGhycyk7CisJCQlkYXkgPSBiaW4yYmNkKGRheSk7CisJCQltb24gPSBiaW4yYmNkKG1vbik7CisJCQl5cnMgPSBiaW4yYmNkKHlycyk7CiAJCX0KIAogCQlzYXZlX2NvbnRyb2wgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOwpAQCAtMTA5OSw3ICsxMDk5LDcgQEAKIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIAogCWlmICghKGN0cmwgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkKLQkJQkNEX1RPX0JJTih5ZWFyKTsgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLi4uICovCisJCXllYXIgPSBiY2QyYmluKHllYXIpOyAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uLi4gKi8KIAogCWlmICh5ZWFyIDwgMjApIHsKIAkJZXBvY2ggPSAyMDAwOwpAQCAtMTM1MiwxMyArMTM1MiwxMyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CiAKIAlpZiAoIShjdHJsICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQkNEX1RPX0JJTihydGNfdG0tPnRtX3NlYyk7Ci0JCUJDRF9UT19CSU4ocnRjX3RtLT50bV9taW4pOwotCQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1faG91cik7Ci0JCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tZGF5KTsKLQkJQkNEX1RPX0JJTihydGNfdG0tPnRtX21vbik7Ci0JCUJDRF9UT19CSU4ocnRjX3RtLT50bV95ZWFyKTsKLQkJQkNEX1RPX0JJTihydGNfdG0tPnRtX3dkYXkpOworCQlydGNfdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnRjX3RtLT50bV9zZWMpOworCQlydGNfdG0tPnRtX21pbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9taW4pOworCQlydGNfdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ0Y190bS0+dG1faG91cik7CisJCXJ0Y190bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX3RtLT50bV9tZGF5KTsKKwkJcnRjX3RtLT50bV9tb24gPSBiY2QyYmluKHJ0Y190bS0+dG1fbW9uKTsKKwkJcnRjX3RtLT50bV95ZWFyID0gYmNkMmJpbihydGNfdG0tPnRtX3llYXIpOworCQlydGNfdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJ0Y190bS0+dG1fd2RheSk7CiAJfQogCiAjaWZkZWYgQ09ORklHX01BQ0hfREVDU1RBVElPTgpAQCAtMTM5Miw5ICsxMzkyLDkgQEAKIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIAogCWlmICghKGN0cmwgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fc2VjKTsKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX21pbik7Ci0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9ob3VyKTsKKwkJYWxtX3RtLT50bV9zZWMgPSBiY2QyYmluKGFsbV90bS0+dG1fc2VjKTsKKwkJYWxtX3RtLT50bV9taW4gPSBiY2QyYmluKGFsbV90bS0+dG1fbWluKTsKKwkJYWxtX3RtLT50bV9ob3VyID0gYmNkMmJpbihhbG1fdG0tPnRtX2hvdXIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Nuc2MuYyBiL2RyaXZlcnMvY2hhci9zbnNjLmMKaW5kZXggM2NlNjBkZi4uMzJiNzRkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Nuc2MuYworKysgYi9kcml2ZXJzL2NoYXIvc25zYy5jCkBAIC00NDQsOCArNDQ0LDggQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAotCQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHNuc2NfY2xhc3MsIE5VTEwsIGRldiwgTlVMTCwKLQkJCQkJICAgICAgIiVzIiwgZGV2bmFtZSk7CisJCQlkZXZpY2VfY3JlYXRlKHNuc2NfY2xhc3MsIE5VTEwsIGRldiwgTlVMTCwKKwkJCQkgICAgICAiJXMiLCBkZXZuYW1lKTsKIAogCQkJaWE2NF9zbl9pcnRyX2ludHJfZW5hYmxlKHNjZC0+c2NkX25hc2lkLAogCQkJCQkJIDAgLyppZ25vcmVkICovICwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKaW5kZXggOGI4ZjA3YS4uOTYzYjAzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKQEAgLTQ3NDMsOCArNDc0Myw4IEBACiAJaWYgKElTX0VSUihzdGFsbGlvbl9jbGFzcykpCiAJCXByaW50aygiU1RBTExJT046IGZhaWxlZCB0byBjcmVhdGUgY2xhc3NcbiIpOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShzdGFsbGlvbl9jbGFzcywgTlVMTCwgTUtERVYoU1RMX1NJT01FTU1BSk9SLCBpKSwKLQkJCQkgICAgICBOVUxMLCAic3RhbGlvbWVtJWQiLCBpKTsKKwkJZGV2aWNlX2NyZWF0ZShzdGFsbGlvbl9jbGFzcywgTlVMTCwgTUtERVYoU1RMX1NJT01FTU1BSk9SLCBpKSwKKwkJCSAgICAgIE5VTEwsICJzdGFsaW9tZW0lZCIsIGkpOwogCiAJcmV0dXJuIDA7CiBlcnJfdW5ydHR5OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N4LmMgYi9kcml2ZXJzL2NoYXIvc3guYwppbmRleCA1YjhkN2ExLi5iYTRlODYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3guYworKysgYi9kcml2ZXJzL2NoYXIvc3guYwpAQCAtMjUwNCw3ICsyNTA0LDcgQEAKIAkJZGVsX3RpbWVyKCZib2FyZC0+dGltZXIpOwogCQlpZiAocGRldikgewogI2lmZGVmIENPTkZJR19QQ0kKLQkJCXBjaV9pb3VubWFwKHBkZXYsIGJvYXJkLT5iYXNlMik7CisJCQlpb3VubWFwKGJvYXJkLT5iYXNlMik7CiAJCQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgSVNfQ0ZfQk9BUkQoYm9hcmQpID8gMyA6IDIpOwogI2VuZGlmCiAJCX0gZWxzZSB7CkBAIC0yNjc3LDcgKzI2NzcsNyBAQAogCX0KIAlib2FyZC0+aHdfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCByZWcpOwogCWJvYXJkLT5iYXNlMiA9Ci0JYm9hcmQtPmJhc2UgPSBwY2lfaW9tYXAocGRldiwgcmVnLCBXSU5ET1dfTEVOKGJvYXJkKSk7CisJYm9hcmQtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUoYm9hcmQtPmh3X2Jhc2UsIFdJTkRPV19MRU4oYm9hcmQpKTsKIAlpZiAoIWJvYXJkLT5iYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfcmVnOwpAQCAtMjcwMyw3ICsyNzAzLDcgQEAKIAogCXJldHVybiAwOwogZXJyX3VubWFwOgotCXBjaV9pb3VubWFwKHBkZXYsIGJvYXJkLT5iYXNlMik7CisJaW91bm1hcChib2FyZC0+YmFzZTIpOwogZXJyX3JlZzoKIAlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgcmVnKTsKIGVycl9mbGFnOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5c3JxLmMgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwppbmRleCA4ZmRmZTljLi5jZTBkOWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3lzcnEuYworKysgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CiAjaW5jbHVkZSA8bGludXgva2JkX2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE2Nyw3ICsxNjgsNyBAQAogc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfc2hvd190aW1lcnNfb3AgPSB7CiAJLmhhbmRsZXIJPSBzeXNycV9oYW5kbGVfc2hvd190aW1lcnMsCiAJLmhlbHBfbXNnCT0gInNob3ctYWxsLXRpbWVycyhRKSIsCi0JLmFjdGlvbl9tc2cJPSAiU2hvdyBQZW5kaW5nIFRpbWVycyIsCisJLmFjdGlvbl9tc2cJPSAiU2hvdyBjbG9ja2V2ZW50IGRldmljZXMgJiBwZW5kaW5nIGhydGltZXJzIChubyBvdGhlcnMpIiwKIH07CiAKIHN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV9tb3VudHJvKGludCBrZXksIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC0zMjYsNiArMzI3LDcgQEAKIAkuaGFuZGxlcgk9IHN5c3JxX2hhbmRsZV9tb29tLAogCS5oZWxwX21zZwk9ICJGdWxsIiwKIAkuYWN0aW9uX21zZwk9ICJNYW51YWwgT09NIGV4ZWN1dGlvbiIsCisJLmVuYWJsZV9tYXNrCT0gU1lTUlFfRU5BQkxFX1NJR05BTCwKIH07CiAKIHN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV9raWxsKGludCBrZXksIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC01MzMsMyArNTM1LDMyIEBACiAJcmV0dXJuIF9fc3lzcnFfc3dhcF9rZXlfb3BzKGtleSwgTlVMTCwgb3BfcCk7CiB9CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfc3lzcnFfa2V5KTsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisvKgorICogd3JpdGluZyAnQycgdG8gL3Byb2Mvc3lzcnEtdHJpZ2dlciBpcyBsaWtlIHN5c3JxLUMKKyAqLworc3RhdGljIHNzaXplX3Qgd3JpdGVfc3lzcnFfdHJpZ2dlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlpZiAoY291bnQpIHsKKwkJY2hhciBjOworCisJCWlmIChnZXRfdXNlcihjLCBidWYpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCV9faGFuZGxlX3N5c3JxKGMsIE5VTEwsIDApOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc3lzcnFfdHJpZ2dlcl9vcGVyYXRpb25zID0geworCS53cml0ZQkJPSB3cml0ZV9zeXNycV90cmlnZ2VyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3lzcnFfaW5pdCh2b2lkKQoreworCXByb2NfY3JlYXRlKCJzeXNycS10cmlnZ2VyIiwgU19JV1VTUiwgTlVMTCwgJnByb2Nfc3lzcnFfdHJpZ2dlcl9vcGVyYXRpb25zKTsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHN5c3JxX2luaXQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwppbmRleCBhZTc2NmQ4Li45YzQ3ZGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKQEAgLTUyNSwxOSArNTI1LDE5IEBACiAJdGltZW91dCA9CiAJICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSk7CiAJaWYgKHRpbWVvdXQpCi0JCWNoaXAtPnZlbmRvci50aW1lb3V0X2EgPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCQljaGlwLT52ZW5kb3IudGltZW91dF9hID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKIAl0aW1lb3V0ID0KIAkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8yX0lEWCkpKTsKIAlpZiAodGltZW91dCkKLQkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYiA9IG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7CisJCWNoaXAtPnZlbmRvci50aW1lb3V0X2IgPSB1c2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwogCXRpbWVvdXQgPQogCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzNfSURYKSkpOwogCWlmICh0aW1lb3V0KQotCQljaGlwLT52ZW5kb3IudGltZW91dF9jID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKwkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYyA9IHVzZWNzX3RvX2ppZmZpZXModGltZW91dCk7CiAJdGltZW91dCA9CiAJICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfNF9JRFgpKSk7CiAJaWYgKHRpbWVvdXQpCi0JCWNoaXAtPnZlbmRvci50aW1lb3V0X2QgPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCQljaGlwLT52ZW5kb3IudGltZW91dF9kID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKIAogZHVyYXRpb246CiAJbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7CkBAIC01NTQsMTUgKzU1NCwyMiBAQAogCQlyZXR1cm47CiAKIAljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX1NIT1JUXSA9Ci0JICAgIG1zZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKKwkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQogCQkJICAgICAoKigoX19iZTMyICopIChkYXRhICsKIAkJCQkJICAgIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSkpOworCS8qIFRoZSBCcm9hZGNvbSBCQ00wMTAyIGNoaXBzZXQgaW4gYSBEZWxsIExhdGl0dWRlIEQ4MjAgZ2V0cyB0aGUgYWJvdmUKKwkgKiB2YWx1ZSB3cm9uZyBhbmQgYXBwYXJlbnRseSByZXBvcnRzIG1zZWNzIHJhdGhlciB0aGFuIHVzZWNzLiBTbyB3ZQorCSAqIGZpeCB1cCB0aGUgcmVzdWx0aW5nIHRvby1zbWFsbCBUUE1fU0hPUlQgdmFsdWUgdG8gbWFrZSB0aGluZ3Mgd29yay4KKwkgKi8KKwlpZiAoY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9TSE9SVF0gPCAoSFovMTAwKSkKKwkJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9TSE9SVF0gPSBIWjsKKwogCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fTUVESVVNXSA9Ci0JICAgIG1zZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKKwkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQogCQkJICAgICAoKigoX19iZTMyICopIChkYXRhICsKIAkJCQkJICAgIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMl9JRFgpKSkpOwogCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fTE9OR10gPQotCSAgICBtc2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1CisJICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKIAkJCSAgICAgKCooKF9fYmUzMiAqKSAoZGF0YSArCiAJCQkJCSAgICBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzNfSURYKSkpKTsKIH0KQEAgLTk1NCw3MiArOTYxLDYzIEBACiAKIC8qCiAgKiBEZXZpY2UgZmlsZSBzeXN0ZW0gaW50ZXJmYWNlIHRvIHRoZSBUUE0KKyAqCisgKiBJdCdzIGFzc3VyZWQgdGhhdCB0aGUgY2hpcCB3aWxsIGJlIG9wZW5lZCBqdXN0IG9uY2UsCisgKiBieSB0aGUgY2hlY2sgb2YgaXNfb3BlbiB2YXJpYWJsZSwgd2hpY2ggaXMgcHJvdGVjdGVkCisgKiBieSBkcml2ZXJfbG9jay4KICAqLwogaW50IHRwbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCByYyA9IDAsIG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IE5VTEwsICpwb3M7CiAKLQlsb2NrX2tlcm5lbCgpOwotCXNwaW5fbG9jaygmZHJpdmVyX2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZ0cG1fY2hpcF9saXN0LCBsaXN0KSB7CisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcywgJnRwbV9jaGlwX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHBvcy0+dmVuZG9yLm1pc2NkZXYubWlub3IgPT0gbWlub3IpIHsKIAkJCWNoaXAgPSBwb3M7CisJCQlnZXRfZGV2aWNlKGNoaXAtPmRldik7CiAJCQlicmVhazsKIAkJfQogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAotCWlmIChjaGlwID09IE5VTEwpIHsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQorCWlmICghY2hpcCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoY2hpcC0+bnVtX29wZW5zKSB7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmNoaXAtPmlzX29wZW4pKSB7CiAJCWRldl9kYmcoY2hpcC0+ZGV2LCAiQW5vdGhlciBwcm9jZXNzIG93bnMgdGhpcyBUUE1cbiIpOwotCQlyYyA9IC1FQlVTWTsKLQkJZ290byBlcnJfb3V0OworCQlwdXRfZGV2aWNlKGNoaXAtPmRldik7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JY2hpcC0+bnVtX29wZW5zKys7Ci0JZ2V0X2RldmljZShjaGlwLT5kZXYpOwotCi0Jc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKLQogCWNoaXAtPmRhdGFfYnVmZmVyID0ga21hbGxvYyhUUE1fQlVGU0laRSAqIHNpemVvZih1OCksIEdGUF9LRVJORUwpOwogCWlmIChjaGlwLT5kYXRhX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCWNoaXAtPm51bV9vcGVucy0tOworCQljbGVhcl9iaXQoMCwgJmNoaXAtPmlzX29wZW4pOwogCQlwdXRfZGV2aWNlKGNoaXAtPmRldik7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJYXRvbWljX3NldCgmY2hpcC0+ZGF0YV9wZW5kaW5nLCAwKTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNoaXA7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwotCi1lcnJfb3V0OgotCXNwaW5fdW5sb2NrKCZkcml2ZXJfbG9jayk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9vcGVuKTsKIAorLyoKKyAqIENhbGxlZCBvbiBmaWxlIGNsb3NlCisgKi8KIGludCB0cG1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCXNwaW5fbG9jaygmZHJpdmVyX2xvY2spOwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmY2hpcC0+dXNlcl9yZWFkX3RpbWVyKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJYXRvbWljX3NldCgmY2hpcC0+ZGF0YV9wZW5kaW5nLCAwKTsKLQljaGlwLT5udW1fb3BlbnMtLTsKLQlwdXRfZGV2aWNlKGNoaXAtPmRldik7CiAJa2ZyZWUoY2hpcC0+ZGF0YV9idWZmZXIpOwotCXNwaW5fdW5sb2NrKCZkcml2ZXJfbG9jayk7CisJY2xlYXJfYml0KDAsICZjaGlwLT5pc19vcGVuKTsKKwlwdXRfZGV2aWNlKGNoaXAtPmRldik7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fcmVsZWFzZSk7CkBAIC0xMDkzLDEzICsxMDkxLDExIEBACiAJfQogCiAJc3Bpbl9sb2NrKCZkcml2ZXJfbG9jayk7Ci0KLQlsaXN0X2RlbCgmY2hpcC0+bGlzdCk7Ci0KKwlsaXN0X2RlbF9yY3UoJmNoaXAtPmxpc3QpOwogCXNwaW5fdW5sb2NrKCZkcml2ZXJfbG9jayk7CisJc3luY2hyb25pemVfcmN1KCk7CiAKIAltaXNjX2RlcmVnaXN0ZXIoJmNoaXAtPnZlbmRvci5taXNjZGV2KTsKLQogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCBjaGlwLT52ZW5kb3IuYXR0cl9ncm91cCk7CiAJdHBtX2Jpb3NfbG9nX3RlYXJkb3duKGNoaXAtPmJpb3NfZGlyKTsKIApAQCAtMTE0NCwyNSArMTE0MCwzMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3BtX3Jlc3VtZSk7CiAKLS8qCi0gKiBPbmNlIGFsbCByZWZlcmVuY2VzIHRvIHBsYXRmb3JtIGRldmljZSBhcmUgZG93biB0byAwLAotICogcmVsZWFzZSBhbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMuCi0gKiBJbiBjYXNlIHZlbmRvciBwcm92aWRlZCByZWxlYXNlIGZ1bmN0aW9uLAotICogY2FsbCBpdCB0b28uCi0gKi8KLXN0YXRpYyB2b2lkIHRwbV9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCisvKiBJbiBjYXNlIHZlbmRvciBwcm92aWRlZCByZWxlYXNlIGZ1bmN0aW9uLCBjYWxsIGl0IHRvby4qLworCit2b2lkIHRwbV9kZXZfdmVuZG9yX3JlbGVhc2Uoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCiAJaWYgKGNoaXAtPnZlbmRvci5yZWxlYXNlKQotCQljaGlwLT52ZW5kb3IucmVsZWFzZShkZXYpOwotCi0JY2hpcC0+cmVsZWFzZShkZXYpOworCQljaGlwLT52ZW5kb3IucmVsZWFzZShjaGlwLT5kZXYpOwogCiAJY2xlYXJfYml0KGNoaXAtPmRldl9udW0sIGRldl9tYXNrKTsKIAlrZnJlZShjaGlwLT52ZW5kb3IubWlzY2Rldi5uYW1lKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9kZXZfdmVuZG9yX3JlbGVhc2UpOworCisKKy8qCisgKiBPbmNlIGFsbCByZWZlcmVuY2VzIHRvIHBsYXRmb3JtIGRldmljZSBhcmUgZG93biB0byAwLAorICogcmVsZWFzZSBhbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMuCisgKi8KK3ZvaWQgdHBtX2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXRwbV9kZXZfdmVuZG9yX3JlbGVhc2UoY2hpcCk7CisKKwljaGlwLT5yZWxlYXNlKGRldik7CiAJa2ZyZWUoY2hpcCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fZGV2X3JlbGVhc2UpOwogCiAvKgogICogQ2FsbGVkIGZyb20gdHBtXzxzcGVjaWZpYz4uYyBwcm9iZSBmdW5jdGlvbiBvbmx5IGZvciBkZXZpY2VzIApAQCAtMTE3MSw4ICsxMTc1LDggQEAKICAqIHVwb24gZXJyYW50IGV4aXQgZnJvbSB0aGlzIGZ1bmN0aW9uIHNwZWNpZmljIHByb2JlIGZ1bmN0aW9uIHNob3VsZCBjYWxsCiAgKiBwY2lfZGlzYWJsZV9kZXZpY2UKICAqLwotc3RydWN0IHRwbV9jaGlwICp0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYwotCQkJCSAgICAgICAqZW50cnkpCitzdHJ1Y3QgdHBtX2NoaXAgKnRwbV9yZWdpc3Rlcl9oYXJkd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCWNvbnN0IHN0cnVjdCB0cG1fdmVuZG9yX3NwZWNpZmljICplbnRyeSkKIHsKICNkZWZpbmUgREVWTkFNRV9TSVpFIDcKIApAQCAtMTE4MywxMSArMTE4Nyw4IEBACiAJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJZGV2bmFtZSA9IGttYWxsb2MoREVWTkFNRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAotCWlmIChjaGlwID09IE5VTEwgfHwgZGV2bmFtZSA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNoaXApOwotCQlrZnJlZShkZXZuYW1lKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChjaGlwID09IE5VTEwgfHwgZGV2bmFtZSA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlOwogCiAJbXV0ZXhfaW5pdCgmY2hpcC0+YnVmZmVyX211dGV4KTsKIAltdXRleF9pbml0KCZjaGlwLT50cG1fbXV0ZXgpOwpAQCAtMTIwNCw4ICsxMjA1LDcgQEAKIAogCWlmIChjaGlwLT5kZXZfbnVtID49IFRQTV9OVU1fREVWSUNFUykgewogCQlkZXZfZXJyKGRldiwgIk5vIGF2YWlsYWJsZSB0cG0gZGV2aWNlIG51bWJlcnNcbiIpOwotCQlrZnJlZShjaGlwKTsKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfSBlbHNlIGlmIChjaGlwLT5kZXZfbnVtID09IDApCiAJCWNoaXAtPnZlbmRvci5taXNjZGV2Lm1pbm9yID0gVFBNX01JTk9SOwogCWVsc2UKQEAgLTEyMzEsMjIgKzEyMzEsMjYgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc3Bpbl9sb2NrKCZkcml2ZXJfbG9jayk7Ci0KLQlsaXN0X2FkZCgmY2hpcC0+bGlzdCwgJnRwbV9jaGlwX2xpc3QpOwotCi0Jc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKLQogCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgY2hpcC0+dmVuZG9yLmF0dHJfZ3JvdXApKSB7Ci0JCWxpc3RfZGVsKCZjaGlwLT5saXN0KTsKIAkJbWlzY19kZXJlZ2lzdGVyKCZjaGlwLT52ZW5kb3IubWlzY2Rldik7CiAJCXB1dF9kZXZpY2UoY2hpcC0+ZGV2KTsKKwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAljaGlwLT5iaW9zX2RpciA9IHRwbV9iaW9zX2xvZ19zZXR1cChkZXZuYW1lKTsKIAorCS8qIE1ha2UgY2hpcCBhdmFpbGFibGUgKi8KKwlzcGluX2xvY2soJmRyaXZlcl9sb2NrKTsKKwlsaXN0X2FkZF9yY3UoJmNoaXAtPmxpc3QsICZ0cG1fY2hpcF9saXN0KTsKKwlzcGluX3VubG9jaygmZHJpdmVyX2xvY2spOworCiAJcmV0dXJuIGNoaXA7CisKK291dF9mcmVlOgorCWtmcmVlKGNoaXApOworCWtmcmVlKGRldm5hbWUpOworCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3JlZ2lzdGVyX2hhcmR3YXJlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaCBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKaW5kZXggZTg4NTE0OC4uOGUzMGRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaAorKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCkBAIC05MCw3ICs5MCw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwkvKiBEZXZpY2Ugc3R1ZmYgKi8KIAogCWludCBkZXZfbnVtOwkJLyogL2Rldi90cG0jICovCi0JaW50IG51bV9vcGVuczsJCS8qIG9ubHkgb25lIGFsbG93ZWQgKi8KKwl1bnNpZ25lZCBsb25nIGlzX29wZW47CS8qIG9ubHkgb25lIGFsbG93ZWQgKi8KIAlpbnQgdGltZV9leHBpcmVkOwogCiAJLyogRGF0YSBwYXNzZWQgdG8gYW5kIGZyb20gdGhlIHRwbSB2aWEgdGhlIHJlYWQvd3JpdGUgY2FsbHMgKi8KQEAgLTEzMiw2ICsxMzIsNyBAQAogCQkJCSBjb25zdCBzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYyAqKTsKIGV4dGVybiBpbnQgdHBtX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogZXh0ZXJuIGludCB0cG1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitleHRlcm4gdm9pZCB0cG1fZGV2X3ZlbmRvcl9yZWxlYXNlKHN0cnVjdCB0cG1fY2hpcCAqKTsKIGV4dGVybiBzc2l6ZV90IHRwbV93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsCiAJCQkgbG9mZl90ICopOwogZXh0ZXJuIHNzaXplX3QgdHBtX3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCmluZGV4IGVkMTg3OWMuLjcxN2FmN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCkBAIC02MzAsMTIgKzYzMCwyMyBAQAogCXsiIiwgMH0JCQkvKiBUZXJtaW5hdG9yICovCiB9OwogCitzdGF0aWMgX19kZXZleGl0IHZvaWQgdHBtX3Rpc19wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfZGV2ICpkZXYpCit7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gcG5wX2dldF9kcnZkYXRhKGRldik7CisKKwl0cG1fZGV2X3ZlbmRvcl9yZWxlYXNlKGNoaXApOworCisJa2ZyZWUoY2hpcCk7Cit9CisKKwogc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIHRpc19wbnBfZHJpdmVyID0gewogCS5uYW1lID0gInRwbV90aXMiLAogCS5pZF90YWJsZSA9IHRwbV9wbnBfdGJsLAogCS5wcm9iZSA9IHRwbV90aXNfcG5wX2luaXQsCiAJLnN1c3BlbmQgPSB0cG1fdGlzX3BucF9zdXNwZW5kLAogCS5yZXN1bWUgPSB0cG1fdGlzX3BucF9yZXN1bWUsCisJLnJlbW92ZSA9IHRwbV90aXNfcG5wX3JlbW92ZSwKIH07CiAKICNkZWZpbmUgVElTX0hJRF9VU1JfSURYIHNpemVvZih0cG1fcG5wX3RibCkvc2l6ZW9mKHN0cnVjdCBwbnBfZGV2aWNlX2lkKSAtMgpAQCAtNjgzLDYgKzY5NCw3IEBACiAJc3Bpbl9sb2NrKCZ0aXNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGksIGosICZ0aXNfY2hpcHMsIGxpc3QpIHsKIAkJY2hpcCA9IHRvX3RwbV9jaGlwKGkpOworCQl0cG1fcmVtb3ZlX2hhcmR3YXJlKGNoaXAtPmRldik7CiAJCWlvd3JpdGUzMih+VFBNX0dMT0JBTF9JTlRfRU5BQkxFICYKIAkJCSAgaW9yZWFkMzIoY2hpcC0+dmVuZG9yLmlvYmFzZSArCiAJCQkJICAgVFBNX0lOVF9FTkFCTEUoY2hpcC0+dmVuZG9yLgpAQCAtNjk0LDkgKzcwNiw5IEBACiAJCQlmcmVlX2lycShjaGlwLT52ZW5kb3IuaXJxLCBjaGlwKTsKIAkJaW91bm1hcChpLT5pb2Jhc2UpOwogCQlsaXN0X2RlbCgmaS0+bGlzdCk7Ci0JCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKIAl9CiAJc3Bpbl91bmxvY2soJnRpc19sb2NrKTsKKwogCWlmIChmb3JjZSkgewogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIAkJZHJpdmVyX3VucmVnaXN0ZXIoJnRpc19kcnYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pby5jIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCmluZGV4IDcwNTNkNjMuLjU5ZjQ3MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW8uYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKQEAgLTI4NTAsNyArMjg1MCw3IEBACiAJZWxzZQogCQl0dHlfbGluZV9uYW1lKGRyaXZlciwgaW5kZXgsIG5hbWUpOwogCi0JcmV0dXJuIGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh0dHlfY2xhc3MsIGRldmljZSwgZGV2LCBOVUxMLCBuYW1lKTsKKwlyZXR1cm4gZGV2aWNlX2NyZWF0ZSh0dHlfY2xhc3MsIGRldmljZSwgZGV2LCBOVUxMLCBuYW1lKTsKIH0KIEVYUE9SVF9TWU1CT0wodHR5X3JlZ2lzdGVyX2RldmljZSk7CiAKQEAgLTMwMzIsMTEgKzMwMzIsMTIgQEAKIAogdm9pZCBwcm9jX2NsZWFyX3R0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCXNwaW5fbG9ja19pcnEoJnAtPnNpZ2hhbmQtPnNpZ2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CiAJdHR5ID0gcC0+c2lnbmFsLT50dHk7CiAJcC0+c2lnbmFsLT50dHkgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycSgmcC0+c2lnaGFuZC0+c2lnbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwogCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMgYi9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKaW5kZXggYzJhZTUyZC4uNGYzYjNmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCisrKyBiL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYwpAQCAtNDgxLDEwICs0ODEsMTAgQEAKIAogdm9pZCB2Y3NfbWFrZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMSksCi0JCQkgICAgICBOVUxMLCAidmNzJXUiLCB0dHktPmluZGV4ICsgMSk7Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxMjkpLAotCQkJICAgICAgTlVMTCwgInZjc2EldSIsIHR0eS0+aW5kZXggKyAxKTsKKwlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxKSwgTlVMTCwKKwkJICAgICAgInZjcyV1IiwgdHR5LT5pbmRleCArIDEpOworCWRldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEyOSksIE5VTEwsCisJCSAgICAgICJ2Y3NhJXUiLCB0dHktPmluZGV4ICsgMSk7CiB9CiAKIHZvaWQgdmNzX3JlbW92ZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJCXBhbmljKCJ1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciB2Y3MgZGV2aWNlIiwgVkNTX01BSk9SKTsKIAl2Y19jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInZjIik7CiAKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgMCksIE5VTEwsICJ2Y3MiKTsKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgMTI4KSwgTlVMTCwgInZjc2EiKTsKKwlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIDApLCBOVUxMLCAidmNzIik7CisJZGV2aWNlX2NyZWF0ZSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCAxMjgpLCBOVUxMLCAidmNzYSIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYyBiL2RyaXZlcnMvY2hhci92aW90YXBlLmMKaW5kZXggN2E3MGE0MC4uZmZjOTI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlvdGFwZS5jCkBAIC04ODYsMTAgKzg4NiwxMCBAQAogCXN0YXRlW2ldLmN1cl9wYXJ0ID0gMDsKIAlmb3IgKGogPSAwOyBqIDwgTUFYX1BBUlRJVElPTlM7ICsraikKIAkJc3RhdGVbaV0ucGFydF9zdGF0X3J3aVtqXSA9IFZJT1RfSURMRTsKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEodGFwZV9jbGFzcywgTlVMTCwgTUtERVYoVklPVEFQRV9NQUpPUiwgaSksCi0JCQkgICAgICBOVUxMLCAiaXNlcmllcyF2dCVkIiwgaSk7Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHRhcGVfY2xhc3MsIE5VTEwsIE1LREVWKFZJT1RBUEVfTUFKT1IsIGkgfCAweDgwKSwKLQkJCSAgICAgIE5VTEwsICJpc2VyaWVzIW52dCVkIiwgaSk7CisJZGV2aWNlX2NyZWF0ZSh0YXBlX2NsYXNzLCBOVUxMLCBNS0RFVihWSU9UQVBFX01BSk9SLCBpKSwgTlVMTCwKKwkJICAgICAgImlzZXJpZXMhdnQlZCIsIGkpOworCWRldmljZV9jcmVhdGUodGFwZV9jbGFzcywgTlVMTCwgTUtERVYoVklPVEFQRV9NQUpPUiwgaSB8IDB4ODApLCBOVUxMLAorCQkgICAgICAiaXNlcmllcyFudnQlZCIsIGkpOwogCXByaW50ayhWSU9UQVBFX0tFUk5fSU5GTyAidGFwZSBpc2VyaWVzL3Z0JWQgaXMgaVNlcmllcyAiCiAJCQkicmVzb3VyY2UgJTEwLjEwcyB0eXBlICU0LjRzLCBtb2RlbCAlMy4zc1xuIiwKIAkJCWksIHZpb3RhcGVfdW5pdGluZm9baV0ucnNyY25hbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYwppbmRleCBmZmU5YjRlLi41NGM4MzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jCisrKyBiL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMKQEAgLTY0MSw3ICs2NDEsNyBAQAogCX0KIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKLQlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gTlJfSVJRUykKKwlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gbnJfaXJxcykKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXJldHVybiBjYXNjYWRlX2lycShpcnEsIGdpdV9nZXRfaXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dC5jIGIvZHJpdmVycy9jaGFyL3Z0LmMKaW5kZXggNTcwMjlmZS4uZDhmODNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0LmMKQEAgLTU5LDcgKzU5LDcgQEAKICAqIGJ5IE1hcnRpbiBNYXJlcyA8bWpAYXRyZXkua2FybGluLm1mZi5jdW5pLmN6PiwgSnVseSAxOTk4CiAgKgogICogUmVtb3ZlZCBvbGQtc3R5bGUgdGltZXJzLCBpbnRyb2R1Y2VkIGNvbnNvbGVfdGltZXIsIG1hZGUgdGltZXIKLSAqIGRlbGV0aW9uIFNNUC1zYWZlLiAgMTdKdW4wMCwgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorICogZGVsZXRpb24gU01QLXNhZmUuICAxN0p1bjAwLCBBbmRyZXcgTW9ydG9uCiAgKgogICogUmVtb3ZlZCBjb25zb2xlX2xvY2ssIGVuYWJsZWQgaW50ZXJydXB0cyBhY3Jvc3MgYWxsIGNvbnNvbGUgb3BlcmF0aW9ucwogICogMTMgTWFyY2ggMjAwMSwgQW5kcmV3IE1vcnRvbgpAQCAtMzAxLDcgKzMwMSw3IEBACiAJZCA9ICh1bnNpZ25lZCBzaG9ydCAqKSh2Yy0+dmNfb3JpZ2luICsgdmMtPnZjX3NpemVfcm93ICogdCk7CiAJcyA9ICh1bnNpZ25lZCBzaG9ydCAqKSh2Yy0+dmNfb3JpZ2luICsgdmMtPnZjX3NpemVfcm93ICogKHQgKyBucikpOwogCXNjcl9tZW1tb3ZldyhkLCBzLCAoYiAtIHQgLSBucikgKiB2Yy0+dmNfc2l6ZV9yb3cpOwotCXNjcl9tZW1zZXR3KGQgKyAoYiAtIHQgLSBucikgKiB2Yy0+dmNfY29scywgdmMtPnZjX3NjcmxfZXJhc2VfY2hhciwKKwlzY3JfbWVtc2V0dyhkICsgKGIgLSB0IC0gbnIpICogdmMtPnZjX2NvbHMsIHZjLT52Y192aWRlb19lcmFzZV9jaGFyLAogCQkgICAgdmMtPnZjX3NpemVfcm93ICogbnIpOwogfQogCkBAIC0zMTksNyArMzE5LDcgQEAKIAlzID0gKHVuc2lnbmVkIHNob3J0ICopKHZjLT52Y19vcmlnaW4gKyB2Yy0+dmNfc2l6ZV9yb3cgKiB0KTsKIAlzdGVwID0gdmMtPnZjX2NvbHMgKiBucjsKIAlzY3JfbWVtbW92ZXcocyArIHN0ZXAsIHMsIChiIC0gdCAtIG5yKSAqIHZjLT52Y19zaXplX3Jvdyk7Ci0Jc2NyX21lbXNldHcocywgdmMtPnZjX3NjcmxfZXJhc2VfY2hhciwgMiAqIHN0ZXApOworCXNjcl9tZW1zZXR3KHMsIHZjLT52Y192aWRlb19lcmFzZV9jaGFyLCAyICogc3RlcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX3VwZGF0ZV9yZWdpb24oc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgY291bnQpCkBAIC00MzQsNyArNDM0LDYgQEAKIAkgICAgICAgICAgICAgIHZjLT52Y19ibGluaywgdmMtPnZjX3VuZGVybGluZSwKIAkgICAgICAgICAgICAgIHZjLT52Y19yZXZlcnNlIF4gdmMtPnZjX2RlY3Njbm0sIHZjLT52Y19pdGFsaWMpOwogCXZjLT52Y192aWRlb19lcmFzZV9jaGFyID0gKGJ1aWxkX2F0dHIodmMsIHZjLT52Y19jb2xvciwgMSwgdmMtPnZjX2JsaW5rLCAwLCB2Yy0+dmNfZGVjc2NubSwgMCkgPDwgOCkgfCAnICc7Ci0JdmMtPnZjX3NjcmxfZXJhc2VfY2hhciA9IChidWlsZF9hdHRyKHZjLCB2Yy0+dmNfZGVmX2NvbG9yLCAxLCBmYWxzZSwgZmFsc2UsIHZjLT52Y19kZWNzY25tLCBmYWxzZSkgPDwgOCkgfCAnICc7CiB9CiAKIC8qIE5vdGU6IGludmVydGluZyB0aGUgc2NyZWVuIHR3aWNlIHNob3VsZCByZXZlcnQgdG8gdGhlIG9yaWdpbmFsIHN0YXRlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMgYi9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKaW5kZXggMjc4Yzk4NS4uZWQxMzJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCisrKyBiL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYwpAQCAtNjU3LDggKzY1Nyw3IEBACiAJCWdvdG8gZmFpbGVkMzsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoaWNhcF9jbGFzcywgZGV2LCBkZXZ0LCBOVUxMLAotCQkJICAgICAgIiVzJWQiLCBEUklWRVJfTkFNRSwgaWQpOworCWRldmljZV9jcmVhdGUoaWNhcF9jbGFzcywgZGV2LCBkZXZ0LCBOVUxMLCAiJXMlZCIsIERSSVZFUl9OQU1FLCBpZCk7CiAJcmV0dXJuIDA7CQkvKiBzdWNjZXNzICovCiAKICBmYWlsZWQzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwppbmRleCA3MWQyYWM0Li5jMjAxNzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwpAQCAtMjM3LDkgKzIzNywxMiBAQAogCiAJaWYgKHN0cmljdF9zdHJ0b3VsKGFyZywgMTYsICZiYXNlKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJaWYgKGJhc2UgPiBVSU5UX01BWCkKKwkJcmV0dXJuIC1FUkFOR0U7CisjZW5kaWYKIAlwcmludGsoS0VSTl9JTkZPICJQTVRNUiBJT1BvcnQgb3ZlcnJpZGU6IDB4JTA0eCAtPiAweCUwNGx4XG4iLAotCSAgICAgICAodW5zaWduZWQgaW50KXBtdG1yX2lvcG9ydCwgYmFzZSk7CisJICAgICAgIHBtdG1yX2lvcG9ydCwgYmFzZSk7CiAJcG10bXJfaW9wb3J0ID0gYmFzZTsKIAogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kY2EvZGNhLXN5c2ZzLmMgYi9kcml2ZXJzL2RjYS9kY2Etc3lzZnMuYwppbmRleCA3YWY0YjQwLi5iYjUzOGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RjYS9kY2Etc3lzZnMuYworKysgYi9kcml2ZXJzL2RjYS9kY2Etc3lzZnMuYwpAQCAtMTUsOSArMTUsOCBAQAogCXN0cnVjdCBkZXZpY2UgKmNkOwogCXN0YXRpYyBpbnQgcmVxX2NvdW50OwogCi0JY2QgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoZGNhX2NsYXNzLCBkY2EtPmNkLAotCQkJCSAgIE1LREVWKDAsIHNsb3QgKyAxKSwgTlVMTCwKLQkJCQkgICAicmVxdWVzdGVyJWQiLCByZXFfY291bnQrKyk7CisJY2QgPSBkZXZpY2VfY3JlYXRlKGRjYV9jbGFzcywgZGNhLT5jZCwgTUtERVYoMCwgc2xvdCArIDEpLCBOVUxMLAorCQkJICAgInJlcXVlc3RlciVkIiwgcmVxX2NvdW50KyspOwogCWlmIChJU19FUlIoY2QpKQogCQlyZXR1cm4gUFRSX0VSUihjZCk7CiAJcmV0dXJuIDA7CkBAIC00OCw4ICs0Nyw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JY2QgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoZGNhX2NsYXNzLCBkZXYsIE1LREVWKDAsIDApLCBOVUxMLAotCQkJCSAgICJkY2ElZCIsIGRjYS0+aWQpOworCWNkID0gZGV2aWNlX2NyZWF0ZShkY2FfY2xhc3MsIGRldiwgTUtERVYoMCwgMCksIE5VTEwsICJkY2ElZCIsIGRjYS0+aWQpOwogCWlmIChJU19FUlIoY2QpKSB7CiAJCXNwaW5fbG9jaygmZGNhX2lkcl9sb2NrKTsKIAkJaWRyX3JlbW92ZSgmZGNhX2lkciwgZGNhLT5pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9LY29uZmlnIGIvZHJpdmVycy9kbWEvS2NvbmZpZwppbmRleCBjZDMwMzkwLi45MDRlNTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hL0tjb25maWcKQEAgLTQ4LDEzICs0OCwxMyBAQAogCSAgY2FuIGJlIGludGVncmF0ZWQgaW4gY2hpcHMgc3VjaCBhcyB0aGUgQXRtZWwgQVQzMmFwNzAwMC4KIAogY29uZmlnIEZTTF9ETUEKLQlib29sICJGcmVlc2NhbGUgTVBDODV4eC9NUEM4M3h4IERNQSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUFBDCisJdHJpc3RhdGUgIkZyZWVzY2FsZSBFbG8gYW5kIEVsbyBQbHVzIERNQSBzdXBwb3J0IgorCWRlcGVuZHMgb24gRlNMX1NPQwogCXNlbGVjdCBETUFfRU5HSU5FCiAJLS0taGVscC0tLQotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgRE1BIGVuZ2luZS4gTm93LCBpdCBzdXBwb3J0Ci0JICBNUEM4NTYwLzQwLCBNUEM4NTU1LCBNUEM4NTQ4IGFuZCBNUEM4NjQxIHByb2Nlc3NvcnMuCi0JICBUaGUgTVBDODM0OSwgTVBDODM2MCBpcyBhbHNvIHN1cHBvcnRlZC4KKwkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIEVsbyBhbmQgRWxvIFBsdXMgRE1BIGNvbnRyb2xsZXJzLgorCSAgVGhlIEVsbyBpcyB0aGUgRE1BIGNvbnRyb2xsZXIgb24gc29tZSA4Mnh4IGFuZCA4M3h4IHBhcnRzLCBhbmQgdGhlCisJICBFbG8gUGx1cyBpcyB0aGUgRE1BIGNvbnRyb2xsZXIgb24gODV4eCBhbmQgODZ4eCBwYXJ0cy4KIAogY29uZmlnIE1WX1hPUgogCWJvb2wgIk1hcnZlbGwgWE9SIGVuZ2luZSBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCmluZGV4IGEwOGQxOTcuLmQxZTM4MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2RtYXRlc3QuYworKysgYi9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKQEAgLTMyNSw3ICszMjUsMTIgQEAKIAlzdHJ1Y3QgZG1hdGVzdF90aHJlYWQJKnRocmVhZDsKIAl1bnNpZ25lZCBpbnQJCWk7CiAKLQlkdGMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hdGVzdF9jaGFuKSwgR0ZQX0FUT01JQyk7CisJLyogSGF2ZSB3ZSBhbHJlYWR5IGJlZW4gdG9sZCBhYm91dCB0aGlzIGNoYW5uZWw/ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkdGMsICZkbWF0ZXN0X2NoYW5uZWxzLCBub2RlKQorCQlpZiAoZHRjLT5jaGFuID09IGNoYW4pCisJCQlyZXR1cm4gRE1BX0RVUDsKKworCWR0YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWF0ZXN0X2NoYW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWR0YykgewogCQlwcl93YXJuaW5nKCJkbWF0ZXN0OiBObyBtZW1vcnkgZm9yICVzXG4iLCBjaGFuLT5kZXYuYnVzX2lkKTsKIAkJcmV0dXJuIERNQV9OQUs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2xkbWEuYyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCmluZGV4IGMwMDU5Y2EuLjBiOTVkY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCkBAIC0zNzAsNyArMzcwLDEwIEBACiAJCQkJCXN0cnVjdCBkbWFfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfY2hhbihjaGFuKTsKLQlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyogSGFzIHRoaXMgY2hhbm5lbCBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkPyAqLworCWlmIChmc2xfY2hhbi0+ZGVzY19wb29sKQorCQlyZXR1cm4gMTsKIAogCS8qIFdlIG5lZWQgdGhlIGRlc2NyaXB0b3IgdG8gYmUgYWxpZ25lZCB0byAzMmJ5dGVzCiAJICogZm9yIG1lZXRpbmcgRlNMIERNQSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVtZW50LgpAQCAtNDEwLDYgKzQxMyw4IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKIAlkbWFfcG9vbF9kZXN0cm95KGZzbF9jaGFuLT5kZXNjX3Bvb2wpOworCisJZnNsX2NoYW4tPmRlc2NfcG9vbCA9IE5VTEw7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgpAQCAtNzg2LDE1OSArNzkxLDI5IEBACiAJZnNsX2NoYW5fbGRfY2xlYW51cChmc2xfY2hhbik7CiB9CiAKLXN0YXRpYyB2b2lkIGZzbF9kbWFfY2FsbGJhY2tfdGVzdCh2b2lkICpwYXJhbSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGZzbF9kbWFfY2hhbl9wcm9iZShzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKmZkZXYsCisJc3RydWN0IGRldmljZV9ub2RlICpub2RlLCB1MzIgZmVhdHVyZSwgY29uc3QgY2hhciAqY29tcGF0aWJsZSkKIHsKLQlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiA9IHBhcmFtOwotCWlmIChmc2xfY2hhbikKLQkJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAic2VsZnRlc3Q6IGNhbGxiYWNrIGlzIG9rIVxuIik7Ci19Ci0KLXN0YXRpYyBpbnQgZnNsX2RtYV9zZWxmX3Rlc3Qoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCi17Ci0Jc3RydWN0IGRtYV9jaGFuICpjaGFuOwotCWludCBlcnIgPSAwOwotCWRtYV9hZGRyX3QgZG1hX2Rlc3QsIGRtYV9zcmM7Ci0JZG1hX2Nvb2tpZV90IGNvb2tpZTsKLQl1OCAqc3JjLCAqZGVzdDsKLQlpbnQgaTsKLQlzaXplX3QgdGVzdF9zaXplOwotCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgxLCAqdHgyLCAqdHgzOwotCi0JdGVzdF9zaXplID0gNDA5NjsKLQotCXNyYyA9IGttYWxsb2ModGVzdF9zaXplICogMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcmMpIHsKLQkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LAotCQkJCSJzZWxmdGVzdDogQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgdGVzdCFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlkZXN0ID0gc3JjICsgdGVzdF9zaXplOwotCi0JZm9yIChpID0gMDsgaSA8IHRlc3Rfc2l6ZTsgaSsrKQotCQlzcmNbaV0gPSAodTgpIGk7Ci0KLQljaGFuID0gJmZzbF9jaGFuLT5jb21tb247Ci0KLQlpZiAoZnNsX2RtYV9hbGxvY19jaGFuX3Jlc291cmNlcyhjaGFuLCBOVUxMKSA8IDEpIHsKLQkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LAotCQkJCSJzZWxmdGVzdDogQ2Fubm90IGFsbG9jIHJlc291cmNlcyBmb3IgRE1BXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogVFggMSAqLwotCWRtYV9zcmMgPSBkbWFfbWFwX3NpbmdsZShmc2xfY2hhbi0+ZGV2LCBzcmMsIHRlc3Rfc2l6ZSAvIDIsCi0JCQkJIERNQV9UT19ERVZJQ0UpOwotCWRtYV9kZXN0ID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgZGVzdCwgdGVzdF9zaXplIC8gMiwKLQkJCQkgIERNQV9GUk9NX0RFVklDRSk7Ci0JdHgxID0gZnNsX2RtYV9wcmVwX21lbWNweShjaGFuLCBkbWFfZGVzdCwgZG1hX3NyYywgdGVzdF9zaXplIC8gMiwgMCk7Ci0JYXN5bmNfdHhfYWNrKHR4MSk7Ci0KLQljb29raWUgPSBmc2xfZG1hX3R4X3N1Ym1pdCh0eDEpOwotCWZzbF9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmcoY2hhbik7Ci0JbXNsZWVwKDIpOwotCi0JaWYgKGZzbF9kbWFfaXNfY29tcGxldGUoY2hhbiwgY29va2llLCBOVUxMLCBOVUxMKSAhPSBETUFfU1VDQ0VTUykgewotCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsICJzZWxmdGVzdDogVGltZSBvdXQhXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBmcmVlX3Jlc291cmNlczsKLQl9Ci0KLQkvKiBUZXN0IGZyZWUgYW5kIHJlLWFsbG9jIGNoYW5uZWwgcmVzb3VyY2VzICovCi0JZnNsX2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKGNoYW4pOwotCi0JaWYgKGZzbF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoY2hhbiwgTlVMTCkgPCAxKSB7Ci0JCWRldl9lcnIoZnNsX2NoYW4tPmRldiwKLQkJCQkic2VsZnRlc3Q6IENhbm5vdCBhbGxvYyByZXNvdXJjZXMgZm9yIERNQVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9yZXNvdXJjZXM7Ci0JfQotCi0JLyogQ29udGludWUgdG8gdGVzdAotCSAqIFRYIDIKLQkgKi8KLQlkbWFfc3JjID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgc3JjICsgdGVzdF9zaXplIC8gMiwKLQkJCQkJdGVzdF9zaXplIC8gNCwgRE1BX1RPX0RFVklDRSk7Ci0JZG1hX2Rlc3QgPSBkbWFfbWFwX3NpbmdsZShmc2xfY2hhbi0+ZGV2LCBkZXN0ICsgdGVzdF9zaXplIC8gMiwKLQkJCQkJdGVzdF9zaXplIC8gNCwgRE1BX0ZST01fREVWSUNFKTsKLQl0eDIgPSBmc2xfZG1hX3ByZXBfbWVtY3B5KGNoYW4sIGRtYV9kZXN0LCBkbWFfc3JjLCB0ZXN0X3NpemUgLyA0LCAwKTsKLQlhc3luY190eF9hY2sodHgyKTsKLQotCS8qIFRYIDMgKi8KLQlkbWFfc3JjID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgc3JjICsgdGVzdF9zaXplICogMyAvIDQsCi0JCQkJCXRlc3Rfc2l6ZSAvIDQsIERNQV9UT19ERVZJQ0UpOwotCWRtYV9kZXN0ID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgZGVzdCArIHRlc3Rfc2l6ZSAqIDMgLyA0LAotCQkJCQl0ZXN0X3NpemUgLyA0LCBETUFfRlJPTV9ERVZJQ0UpOwotCXR4MyA9IGZzbF9kbWFfcHJlcF9tZW1jcHkoY2hhbiwgZG1hX2Rlc3QsIGRtYV9zcmMsIHRlc3Rfc2l6ZSAvIDQsIDApOwotCWFzeW5jX3R4X2Fjayh0eDMpOwotCi0JLyogSW50ZXJydXB0IHR4IHRlc3QgKi8KLQl0eDEgPSBmc2xfZG1hX3ByZXBfaW50ZXJydXB0KGNoYW4sIDApOwotCWFzeW5jX3R4X2Fjayh0eDEpOwotCWNvb2tpZSA9IGZzbF9kbWFfdHhfc3VibWl0KHR4MSk7Ci0KLQkvKiBUZXN0IGV4Y2hhbmdpbmcgdGhlIHByZXBhcmVkIHR4IHNvcnQgKi8KLQljb29raWUgPSBmc2xfZG1hX3R4X3N1Ym1pdCh0eDMpOwotCWNvb2tpZSA9IGZzbF9kbWFfdHhfc3VibWl0KHR4Mik7Ci0KLQlpZiAoZG1hX2hhc19jYXAoRE1BX0lOVEVSUlVQVCwgKChzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKikKLQkgICAgZGV2X2dldF9kcnZkYXRhKGZzbF9jaGFuLT5kZXYtPnBhcmVudCkpLT5jb21tb24uY2FwX21hc2spKSB7Ci0JCXR4My0+Y2FsbGJhY2sgPSBmc2xfZG1hX2NhbGxiYWNrX3Rlc3Q7Ci0JCXR4My0+Y2FsbGJhY2tfcGFyYW0gPSBmc2xfY2hhbjsKLQl9Ci0JZnNsX2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZyhjaGFuKTsKLQltc2xlZXAoMik7Ci0KLQlpZiAoZnNsX2RtYV9pc19jb21wbGV0ZShjaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpICE9IERNQV9TVUNDRVNTKSB7Ci0JCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgInNlbGZ0ZXN0OiBUaW1lIG91dCFcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfcmVzb3VyY2VzOwotCX0KLQotCWVyciA9IG1lbWNtcChzcmMsIGRlc3QsIHRlc3Rfc2l6ZSk7Ci0JaWYgKGVycikgewotCQlmb3IgKGkgPSAwOyAoKihzcmMgKyBpKSA9PSAqKGRlc3QgKyBpKSkgJiYgKGkgPCB0ZXN0X3NpemUpOwotCQkJCWkrKyk7Ci0JCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgInNlbGZ0ZXN0OiBUZXN0IGZhaWxlZCwgZGF0YSAlZC8lbGQgaXMgIgotCQkJCSJlcnJvciEgc3JjIDB4JXgsIGRlc3QgMHgleFxuIiwKLQkJCQlpLCAobG9uZyl0ZXN0X3NpemUsICooc3JjICsgaSksICooZGVzdCArIGkpKTsKLQl9Ci0KLWZyZWVfcmVzb3VyY2VzOgotCWZzbF9kbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhjaGFuKTsKLW91dDoKLQlrZnJlZShzcmMpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IG9mX2ZzbF9kbWFfY2hhbl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsCi0JCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKLXsKLQlzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKmZkZXY7CiAJc3RydWN0IGZzbF9kbWFfY2hhbiAqbmV3X2ZzbF9jaGFuOwogCWludCBlcnI7CiAKLQlmZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7Ci0JQlVHX09OKCFmZGV2KTsKLQogCS8qIGFsbG9jIGNoYW5uZWwgKi8KIAluZXdfZnNsX2NoYW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnNsX2RtYV9jaGFuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXdfZnNsX2NoYW4pIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJObyBmcmVlIG1lbW9yeSBmb3IgYWxsb2NhdGluZyAiCisJCWRldl9lcnIoZmRldi0+ZGV2LCAiTm8gZnJlZSBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgIgogCQkJCSJkbWEgY2hhbm5lbHMhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogZ2V0IGRtYSBjaGFubmVsIHJlZ2lzdGVyIGJhc2UgKi8KLQllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRldi0+bm9kZSwgMCwgJm5ld19mc2xfY2hhbi0+cmVnKTsKKwllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5vZGUsIDAsICZuZXdfZnNsX2NoYW4tPnJlZyk7CiAJaWYgKGVycikgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkNhbid0IGdldCAlcyBwcm9wZXJ0eSAncmVnJ1xuIiwKLQkJCQlkZXYtPm5vZGUtPmZ1bGxfbmFtZSk7CisJCWRldl9lcnIoZmRldi0+ZGV2LCAiQ2FuJ3QgZ2V0ICVzIHByb3BlcnR5ICdyZWcnXG4iLAorCQkJCW5vZGUtPmZ1bGxfbmFtZSk7CiAJCWdvdG8gZXJyX25vX3JlZzsKIAl9CiAKLQluZXdfZnNsX2NoYW4tPmZlYXR1cmUgPSAqKHUzMiAqKW1hdGNoLT5kYXRhOworCW5ld19mc2xfY2hhbi0+ZmVhdHVyZSA9IGZlYXR1cmU7CiAKIAlpZiAoIWZkZXYtPmZlYXR1cmUpCiAJCWZkZXYtPmZlYXR1cmUgPSBuZXdfZnNsX2NoYW4tPmZlYXR1cmU7CkBAIC05NDgsMTMgKzgyMywxMyBAQAogCSAqLwogCVdBUk5fT04oZmRldi0+ZmVhdHVyZSAhPSBuZXdfZnNsX2NoYW4tPmZlYXR1cmUpOwogCi0JbmV3X2ZzbF9jaGFuLT5kZXYgPSAmZGV2LT5kZXY7CisJbmV3X2ZzbF9jaGFuLT5kZXYgPSAmbmV3X2ZzbF9jaGFuLT5jb21tb24uZGV2OwogCW5ld19mc2xfY2hhbi0+cmVnX2Jhc2UgPSBpb3JlbWFwKG5ld19mc2xfY2hhbi0+cmVnLnN0YXJ0LAogCQkJbmV3X2ZzbF9jaGFuLT5yZWcuZW5kIC0gbmV3X2ZzbF9jaGFuLT5yZWcuc3RhcnQgKyAxKTsKIAogCW5ld19mc2xfY2hhbi0+aWQgPSAoKG5ld19mc2xfY2hhbi0+cmVnLnN0YXJ0IC0gMHgxMDApICYgMHhmZmYpID4+IDc7CiAJaWYgKG5ld19mc2xfY2hhbi0+aWQgPiBGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiVGhlcmUgaXMgbm8gJWQgY2hhbm5lbCFcbiIsCisJCWRldl9lcnIoZmRldi0+ZGV2LCAiVGhlcmUgaXMgbm8gJWQgY2hhbm5lbCFcbiIsCiAJCQkJbmV3X2ZzbF9jaGFuLT5pZCk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX25vX2NoYW47CkBAIC05ODgsMjkgKzg2MywyMyBAQAogCQkJJmZkZXYtPmNvbW1vbi5jaGFubmVscyk7CiAJZmRldi0+Y29tbW9uLmNoYW5jbnQrKzsKIAotCW5ld19mc2xfY2hhbi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LT5ub2RlLCAwKTsKKwluZXdfZnNsX2NoYW4tPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5vZGUsIDApOwogCWlmIChuZXdfZnNsX2NoYW4tPmlycSAhPSBOT19JUlEpIHsKIAkJZXJyID0gcmVxdWVzdF9pcnEobmV3X2ZzbF9jaGFuLT5pcnEsCiAJCQkJCSZmc2xfZG1hX2NoYW5fZG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCQkJImZzbGRtYS1jaGFubmVsIiwgbmV3X2ZzbF9jaGFuKTsKIAkJaWYgKGVycikgewotCQkJZGV2X2VycigmZGV2LT5kZXYsICJETUEgY2hhbm5lbCAlcyByZXF1ZXN0X2lycSBlcnJvciAiCi0JCQkJIndpdGggcmV0dXJuICVkXG4iLCBkZXYtPm5vZGUtPmZ1bGxfbmFtZSwgZXJyKTsKKwkJCWRldl9lcnIoZmRldi0+ZGV2LCAiRE1BIGNoYW5uZWwgJXMgcmVxdWVzdF9pcnEgZXJyb3IgIgorCQkJCSJ3aXRoIHJldHVybiAlZFxuIiwgbm9kZS0+ZnVsbF9uYW1lLCBlcnIpOwogCQkJZ290byBlcnJfbm9faXJxOwogCQl9CiAJfQogCi0JZXJyID0gZnNsX2RtYV9zZWxmX3Rlc3QobmV3X2ZzbF9jaGFuKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9zZWxmX3Rlc3Q7Ci0KLQlkZXZfaW5mbygmZGV2LT5kZXYsICIjJWQgKCVzKSwgaXJxICVkXG4iLCBuZXdfZnNsX2NoYW4tPmlkLAotCQkJCW1hdGNoLT5jb21wYXRpYmxlLCBuZXdfZnNsX2NoYW4tPmlycSk7CisJZGV2X2luZm8oZmRldi0+ZGV2LCAiIyVkICglcyksIGlycSAlZFxuIiwgbmV3X2ZzbF9jaGFuLT5pZCwKKwkJCQljb21wYXRpYmxlLCBuZXdfZnNsX2NoYW4tPmlycSk7CiAKIAlyZXR1cm4gMDsKIAotZXJyX3NlbGZfdGVzdDoKLQlmcmVlX2lycShuZXdfZnNsX2NoYW4tPmlycSwgbmV3X2ZzbF9jaGFuKTsKIGVycl9ub19pcnE6CiAJbGlzdF9kZWwoJm5ld19mc2xfY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlKTsKIGVycl9ub19jaGFuOgpAQCAtMTAyMCwzOCArODg5LDIwIEBACiAJcmV0dXJuIGVycjsKIH0KIAotY29uc3QgdTMyIG1wYzg1NDBfZG1hX2lwX2ZlYXR1cmUgPSBGU0xfRE1BX0lQXzg1WFggfCBGU0xfRE1BX0JJR19FTkRJQU47Ci1jb25zdCB1MzIgbXBjODM0OV9kbWFfaXBfZmVhdHVyZSA9IEZTTF9ETUFfSVBfODNYWCB8IEZTTF9ETUFfTElUVExFX0VORElBTjsKLQotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfZnNsX2RtYV9jaGFuX2lkc1tdID0gewotCXsKLQkJLmNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiLAotCQkuZGF0YSA9ICh2b2lkICopJm1wYzg1NDBfZG1hX2lwX2ZlYXR1cmUsCi0JfSwKLQl7Ci0JCS5jb21wYXRpYmxlID0gImZzbCxlbG8tZG1hLWNoYW5uZWwiLAotCQkuZGF0YSA9ICh2b2lkICopJm1wYzgzNDlfZG1hX2lwX2ZlYXR1cmUsCi0JfSwKLQl7fQotfTsKLQotc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgb2ZfZnNsX2RtYV9jaGFuX2RyaXZlciA9IHsKLQkubmFtZSA9ICJvZi1mc2wtZG1hLWNoYW5uZWwiLAotCS5tYXRjaF90YWJsZSA9IG9mX2ZzbF9kbWFfY2hhbl9pZHMsCi0JLnByb2JlID0gb2ZfZnNsX2RtYV9jaGFuX3Byb2JlLAotfTsKLQotc3RhdGljIF9faW5pdCBpbnQgb2ZfZnNsX2RtYV9jaGFuX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIGZzbF9kbWFfY2hhbl9yZW1vdmUoc3RydWN0IGZzbF9kbWFfY2hhbiAqZmNoYW4pCiB7Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmb2ZfZnNsX2RtYV9jaGFuX2RyaXZlcik7CisJZnJlZV9pcnEoZmNoYW4tPmlycSwgZmNoYW4pOworCWxpc3RfZGVsKCZmY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlKTsKKwlpb3VubWFwKGZjaGFuLT5yZWdfYmFzZSk7CisJa2ZyZWUoZmNoYW4pOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBvZl9mc2xfZG1hX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKmRldiwKIAkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCWludCBlcnI7Ci0JdW5zaWduZWQgaW50IGlycTsKIAlzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKmZkZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKIAogCWZkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZkZXYpIHsKQEAgLTEwODUsOSArOTM2LDkgQEAKIAlmZGV2LT5jb21tb24uZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBmc2xfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nOwogCWZkZXYtPmNvbW1vbi5kZXYgPSAmZGV2LT5kZXY7CiAKLQlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkZXYtPm5vZGUsIDApOwotCWlmIChpcnEgIT0gTk9fSVJRKSB7Ci0JCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgJmZzbF9kbWFfZG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwlmZGV2LT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkZXYtPm5vZGUsIDApOworCWlmIChmZGV2LT5pcnEgIT0gTk9fSVJRKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKGZkZXYtPmlycSwgJmZzbF9kbWFfZG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCQkJImZzbGRtYS1kZXZpY2UiLCBmZGV2KTsKIAkJaWYgKGVycikgewogCQkJZGV2X2VycigmZGV2LT5kZXYsICJETUEgZGV2aWNlIHJlcXVlc3RfaXJxIGVycm9yICIKQEAgLTEwOTcsNyArOTQ4LDIxIEBACiAJfQogCiAJZGV2X3NldF9kcnZkYXRhKCYoZGV2LT5kZXYpLCBmZGV2KTsKLQlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoZGV2LT5ub2RlLCBvZl9mc2xfZG1hX2NoYW5faWRzLCAmZGV2LT5kZXYpOworCisJLyogV2UgY2Fubm90IHVzZSBvZl9wbGF0Zm9ybV9idXNfcHJvYmUoKSBiZWNhdXNlIHRoZXJlIGlzIG5vCisJICogb2ZfcGxhdGZvcm1fYnVzX3JlbW92ZS4gIEluc3RlYWQsIHdlIG1hbnVhbGx5IGluc3RhbnRpYXRlIGV2ZXJ5IERNQQorCSAqIGNoYW5uZWwgb2JqZWN0LgorCSAqLworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoZGV2LT5ub2RlLCBjaGlsZCkgeworCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2hpbGQsICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCIpKQorCQkJZnNsX2RtYV9jaGFuX3Byb2JlKGZkZXYsIGNoaWxkLAorCQkJCUZTTF9ETUFfSVBfODVYWCB8IEZTTF9ETUFfQklHX0VORElBTiwKKwkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiKTsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNoaWxkLCAiZnNsLGVsby1kbWEtY2hhbm5lbCIpKQorCQkJZnNsX2RtYV9jaGFuX3Byb2JlKGZkZXYsIGNoaWxkLAorCQkJCUZTTF9ETUFfSVBfODNYWCB8IEZTTF9ETUFfTElUVExFX0VORElBTiwKKwkJCQkiZnNsLGVsby1kbWEtY2hhbm5lbCIpOworCX0KIAogCWRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJmZkZXYtPmNvbW1vbik7CiAJcmV0dXJuIDA7CkBAIC0xMTA5LDYgKzk3NCwzMCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgb2ZfZnNsX2RtYV9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZfZGV2KQoreworCXN0cnVjdCBmc2xfZG1hX2RldmljZSAqZmRldjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJm9mX2Rldi0+ZGV2KTsKKworCWRtYV9hc3luY19kZXZpY2VfdW5yZWdpc3RlcigmZmRldi0+Y29tbW9uKTsKKworCWZvciAoaSA9IDA7IGkgPCBGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFOyBpKyspCisJCWlmIChmZGV2LT5jaGFuW2ldKQorCQkJZnNsX2RtYV9jaGFuX3JlbW92ZShmZGV2LT5jaGFuW2ldKTsKKworCWlmIChmZGV2LT5pcnEgIT0gTk9fSVJRKQorCQlmcmVlX2lycShmZGV2LT5pcnEsIGZkZXYpOworCisJaW91bm1hcChmZGV2LT5yZWdfYmFzZSk7CisKKwlrZnJlZShmZGV2KTsKKwlkZXZfc2V0X2RydmRhdGEoJm9mX2Rldi0+ZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBvZl9mc2xfZG1hX2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxlbG8tZG1hIiwgfSwKQEAgLTExMTYsMTUgKzEwMDUsMzIgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG9mX2ZzbF9kbWFfZHJpdmVyID0gewotCS5uYW1lID0gIm9mLWZzbC1kbWEiLAorCS5uYW1lID0gImZzbC1lbG8tZG1hIiwKIAkubWF0Y2hfdGFibGUgPSBvZl9mc2xfZG1hX2lkcywKIAkucHJvYmUgPSBvZl9mc2xfZG1hX3Byb2JlLAorCS5yZW1vdmUgPSBvZl9mc2xfZG1hX3JlbW92ZSwKIH07CiAKIHN0YXRpYyBfX2luaXQgaW50IG9mX2ZzbF9kbWFfaW5pdCh2b2lkKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm9mX2ZzbF9kbWFfZHJpdmVyKTsKKwlpbnQgcmV0OworCisJcHJfaW5mbygiRnJlZXNjYWxlIEVsbyAvIEVsbyBQbHVzIERNQSBkcml2ZXJcbiIpOworCisJcmV0ID0gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZvZl9mc2xfZG1hX2RyaXZlcik7CisJaWYgKHJldCkKKwkJcHJfZXJyKCJmc2xkbWE6IGZhaWxlZCB0byByZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXJcbiIpOworCisJcmV0dXJuIHJldDsKIH0KIAotc3Vic3lzX2luaXRjYWxsKG9mX2ZzbF9kbWFfY2hhbl9pbml0KTsKK3N0YXRpYyB2b2lkIF9fZXhpdCBvZl9mc2xfZG1hX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmb2ZfZnNsX2RtYV9kcml2ZXIpOworfQorCiBzdWJzeXNfaW5pdGNhbGwob2ZfZnNsX2RtYV9pbml0KTsKK21vZHVsZV9leGl0KG9mX2ZzbF9kbWFfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIEVsbyAvIEVsbyBQbHVzIERNQSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5oIGIvZHJpdmVycy9kbWEvZnNsZG1hLmgKaW5kZXggNmZhZjA3Yi4uNGYyMWE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZnNsZG1hLmgKKysrIGIvZHJpdmVycy9kbWEvZnNsZG1hLmgKQEAgLTExNCw2ICsxMTQsNyBAQAogCXN0cnVjdCBkbWFfZGV2aWNlIGNvbW1vbjsKIAlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpjaGFuW0ZTTF9ETUFfTUFYX0NIQU5TX1BFUl9ERVZJQ0VdOwogCXUzMiBmZWF0dXJlOwkJLyogVGhlIHNhbWUgYXMgRE1BIGNoYW5uZWxzICovCisJaW50IGlycTsJCS8qIENoYW5uZWwgSVJRICovCiB9OwogCiAvKiBEZWZpbmUgbWFjcm9zIGZvciBmc2xfZG1hX2NoYW4tPmZlYXR1cmUgcHJvcGVydHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMgYi9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jCmluZGV4IGJjOGM2ZTMuLjFlZjY4YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvaW9hdF9kbWEuYwpAQCAtOTcxLDExICs5NzEsOSBAQAogCXN3aXRjaCAoaW9hdF9jaGFuLT5kZXZpY2UtPnZlcnNpb24pIHsKIAljYXNlIElPQVRfVkVSXzFfMjoKIAkJcmV0dXJuIGlvYXQxX2RtYV9nZXRfbmV4dF9kZXNjcmlwdG9yKGlvYXRfY2hhbik7Ci0JCWJyZWFrOwogCWNhc2UgSU9BVF9WRVJfMl8wOgogCWNhc2UgSU9BVF9WRVJfM18wOgogCQlyZXR1cm4gaW9hdDJfZG1hX2dldF9uZXh0X2Rlc2NyaXB0b3IoaW9hdF9jaGFuKTsKLQkJYnJlYWs7CiAJfQogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCmluZGV4IDBlMDI0ZmUuLjg4NzA3MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCQljc3Jvdy0+bnJfcGFnZXMgPSAoci5lbmQgLSByLnN0YXJ0ICsgMSkgPj4gUEFHRV9TSElGVDsKIAkJY3Nyb3ctPmxhc3RfcGFnZSA9IGNzcm93LT5maXJzdF9wYWdlICsgY3Nyb3ctPm5yX3BhZ2VzIC0gMTsKIAkJY3Nyb3ctPm10eXBlID0gTUVNX1hEUjsKLQkJY3Nyb3ctPmVkYWNfbW9kZSA9IEVEQUNfRkxBR19FQyB8IEVEQUNfRkxBR19TRUNERUQ7CisJCWNzcm93LT5lZGFjX21vZGUgPSBFREFDX1NFQ0RFRDsKIAkJZGV2X2RiZyhtY2ktPmRldiwKIAkJCSJJbml0aWFsaXplZCBvbiBub2RlICVkLCBjaGFubWFzaz0weCV4LCIKIAkJCSIgZmlyc3RfcGFnZT0weCVseCwgbnJfcGFnZXM9MHgleFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCmluZGV4IDRhMTZiNWIuLmYwZDliNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYwpAQCAtMTE5LDYgKzExOSw3IEBACiAjZGVmaW5lCQkJRkVSUl9ORl9VTkNPUlJFQ1RBQkxFCShGRVJSX05GX00xMkVSUiB8IFwKIAkJCQkJCQlGRVJSX05GX00xMUVSUiB8IFwKIAkJCQkJCQlGRVJSX05GX00xMEVSUiB8IFwKKwkJCQkJCQlGRVJSX05GX005RVJSIHwgXAogCQkJCQkJCUZFUlJfTkZfTThFUlIgfCBcCiAJCQkJCQkJRkVSUl9ORl9NN0VSUiB8IFwKIAkJCQkJCQlGRVJSX05GX002RVJSIHwgXApAQCAtMzAxLDYgKzMwMiw5IEBACiB9OwogI2VuZGlmCiAKKy8qIGVuYWJsZXMgdGhlIHJlcG9ydCBvZiBtaXNjZWxsYW5lb3VzIG1lc3NhZ2VzIGFzIENFIGVycm9ycyAtIGRlZmF1bHQgb2ZmICovCitzdGF0aWMgaW50IG1pc2NfbWVzc2FnZXM7CisKIC8qIEVudW1lcmF0aW9uIG9mIHN1cHBvcnRlZCBkZXZpY2VzICovCiBlbnVtIGk1MDAwX2NoaXBzIHsKIAlJNTAwMFAgPSAwLApAQCAtNDY2LDcgKzQ3MCw4IEBACiAJCQkJCXN0cnVjdCBpNTAwMF9lcnJvcl9pbmZvICppbmZvLAogCQkJCQlpbnQgaGFuZGxlX2Vycm9ycykKIHsKLQljaGFyIG1zZ1tFREFDX01DX0xBQkVMX0xFTiArIDEgKyA5MF07CisJY2hhciBtc2dbRURBQ19NQ19MQUJFTF9MRU4gKyAxICsgMTYwXTsKKwljaGFyICpzcGVjaWZpYyA9IE5VTEw7CiAJdTMyIGFsbEVycm9yczsKIAlpbnQgYnJhbmNoOwogCWludCBjaGFubmVsOwpAQCAtNDgwLDExICs0ODUsNiBAQAogCWlmICghYWxsRXJyb3JzKQogCQlyZXR1cm47CQkvKiBpZiBubyBlcnJvciwgcmV0dXJuIG5vdyAqLwogCi0JLyogT05MWSBPTkUgb2YgdGhlIHBvc3NpYmxlIGVycm9yIGJpdHMgd2lsbCBiZSBzZXQsIGFzIHBlciB0aGUgZG9jcyAqLwotCWk1MDAwX21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLAotCQkJIkZBVEFMIEVSUk9SUyBGb3VuZCEhISAxc3QgRkFUQUwgRXJyIFJlZz0gMHgleFxuIiwKLQkJCWFsbEVycm9ycyk7Ci0KIAlicmFuY2ggPSBFWFRSQUNUX0ZCRENIQU5fSU5EWChpbmZvLT5mZXJyX2ZhdF9mYmQpOwogCWNoYW5uZWwgPSBicmFuY2g7CiAKQEAgLTUwMSwyOCArNTAxLDQyIEBACiAJCXJkd3IgPyAiV3JpdGUiIDogIlJlYWQiLCByYXMsIGNhcyk7CiAKIAkvKiBPbmx5IDEgYml0IHdpbGwgYmUgb24gKi8KLQlpZiAoYWxsRXJyb3JzICYgRkVSUl9GQVRfTTFFUlIpIHsKLQkJaTUwMDBfbWNfcHJpbnRrKG1jaSwgS0VSTl9FUlIsCi0JCQkJIkFsZXJ0IG9uIG5vbi1yZWR1bmRhbnQgcmV0cnkgb3IgZmFzdCAiCi0JCQkJInJlc2V0IHRpbWVvdXRcbiIpOworCXN3aXRjaCAoYWxsRXJyb3JzKSB7CisJY2FzZSBGRVJSX0ZBVF9NMUVSUjoKKwkJc3BlY2lmaWMgPSAiQWxlcnQgb24gbm9uLXJlZHVuZGFudCByZXRyeSBvciBmYXN0ICIKKwkJCQkicmVzZXQgdGltZW91dCI7CisJCWJyZWFrOworCWNhc2UgRkVSUl9GQVRfTTJFUlI6CisJCXNwZWNpZmljID0gIk5vcnRoYm91bmQgQ1JDIGVycm9yIG9uIG5vbi1yZWR1bmRhbnQgIgorCQkJCSJyZXRyeSI7CisJCWJyZWFrOworCWNhc2UgRkVSUl9GQVRfTTNFUlI6CisJCXsKKwkJc3RhdGljIGludCBkb25lOwogCi0JfSBlbHNlIGlmIChhbGxFcnJvcnMgJiBGRVJSX0ZBVF9NMkVSUikgewotCQlpNTAwMF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKLQkJCQkiTm9ydGhib3VuZCBDUkMgZXJyb3Igb24gbm9uLXJlZHVuZGFudCAiCi0JCQkJInJldHJ5XG4iKTsKKwkJLyoKKwkJICogVGhpcyBlcnJvciBpcyBnZW5lcmF0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlIGludGVsbGlnZW50CisJCSAqIHRocm90dGxpbmcgaXMgZGlzYWJsZWQgYW5kIHRoZSB0ZW1wZXJhdHVyZSBwYXNzZWQgdGhlCisJCSAqIHNwZWNpZmllZCBtaWRkbGUgcG9pbnQuIFNpbmNlIHRoaXMgaXMgc29tZXRoaW5nIHRoZSBCSU9TCisJCSAqIHNob3VsZCB0YWtlIGNhcmUgb2YsIHdlJ2xsIHdhcm4gb25seSBvbmNlIHRvIGF2b2lkCisJCSAqIHdvcnRobGVzc2x5IGZsb29kaW5nIHRoZSBsb2cuCisJCSAqLworCQlpZiAoZG9uZSkKKwkJCXJldHVybjsKKwkJZG9uZSsrOwogCi0JfSBlbHNlIGlmIChhbGxFcnJvcnMgJiBGRVJSX0ZBVF9NM0VSUikgewotCQlpNTAwMF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKLQkJCQkiPlRtaWQgVGhlcm1hbCBldmVudCB3aXRoIGludGVsbGlnZW50ICIKLQkJCQkidGhyb3R0bGluZyBkaXNhYmxlZFxuIik7CisJCXNwZWNpZmljID0gIj5UbWlkIFRoZXJtYWwgZXZlbnQgd2l0aCBpbnRlbGxpZ2VudCAiCisJCQkgICAidGhyb3R0bGluZyBkaXNhYmxlZCI7CisJCX0KKwkJYnJlYWs7CiAJfQogCiAJLyogRm9ybSBvdXQgbWVzc2FnZSAqLwogCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksCiAJCSAiKEJyYW5jaD0lZCBEUkFNLUJhbms9JWQgUkRXUj0lcyBSQVM9JWQgQ0FTPSVkICIKLQkJICJGQVRBTCBFcnI9MHgleCkiLAorCQkgIkZBVEFMIEVycj0weCV4ICglcykpIiwKIAkJIGJyYW5jaCA+PiAxLCBiYW5rLCByZHdyID8gIldyaXRlIiA6ICJSZWFkIiwgcmFzLCBjYXMsCi0JCSBhbGxFcnJvcnMpOworCQkgYWxsRXJyb3JzLCBzcGVjaWZpYyk7CiAKIAkvKiBDYWxsIHRoZSBoZWxwZXIgdG8gb3V0cHV0IG1lc3NhZ2UgKi8KIAllZGFjX21jX2hhbmRsZV9mYmRfdWUobWNpLCByYW5rLCBjaGFubmVsLCBjaGFubmVsICsgMSwgbXNnKTsKQEAgLTUzOSw3ICs1NTMsOCBAQAogCQkJCQlzdHJ1Y3QgaTUwMDBfZXJyb3JfaW5mbyAqaW5mbywKIAkJCQkJaW50IGhhbmRsZV9lcnJvcnMpCiB7Ci0JY2hhciBtc2dbRURBQ19NQ19MQUJFTF9MRU4gKyAxICsgOTBdOworCWNoYXIgbXNnW0VEQUNfTUNfTEFCRUxfTEVOICsgMSArIDE3MF07CisJY2hhciAqc3BlY2lmaWMgPSBOVUxMOwogCXUzMiBhbGxFcnJvcnM7CiAJdTMyIHVlX2Vycm9yczsKIAl1MzIgY2VfZXJyb3JzOwpAQCAtNTU3LDEwICs1NzIsNiBAQAogCQlyZXR1cm47CQkvKiBpZiBubyBlcnJvciwgcmV0dXJuIG5vdyAqLwogCiAJLyogT05MWSBPTkUgb2YgdGhlIHBvc3NpYmxlIGVycm9yIGJpdHMgd2lsbCBiZSBzZXQsIGFzIHBlciB0aGUgZG9jcyAqLwotCWk1MDAwX21jX3ByaW50ayhtY2ksIEtFUk5fV0FSTklORywKLQkJCSJOT04tRkFUQUwgRVJST1JTIEZvdW5kISEhIDFzdCBOT04tRkFUQUwgRXJyICIKLQkJCSJSZWc9IDB4JXhcbiIsIGFsbEVycm9ycyk7Ci0KIAl1ZV9lcnJvcnMgPSBhbGxFcnJvcnMgJiBGRVJSX05GX1VOQ09SUkVDVEFCTEU7CiAJaWYgKHVlX2Vycm9ycykgewogCQlkZWJ1Z2YwKCJcdFVuY29ycmVjdGVkIGJpdHM9IDB4JXhcbiIsIHVlX2Vycm9ycyk7CkBAIC01NzksMTIgKzU5MCw0NyBAQAogCQkJcmFuaywgY2hhbm5lbCwgY2hhbm5lbCArIDEsIGJyYW5jaCA+PiAxLCBiYW5rLAogCQkJcmR3ciA/ICJXcml0ZSIgOiAiUmVhZCIsIHJhcywgY2FzKTsKIAorCQlzd2l0Y2ggKHVlX2Vycm9ycykgeworCQljYXNlIEZFUlJfTkZfTTEyRVJSOgorCQkJc3BlY2lmaWMgPSAiTm9uLUFsaWFzZWQgVW5jb3JyZWN0YWJsZSBQYXRyb2wgRGF0YSBFQ0MiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NMTFFUlI6CisJCQlzcGVjaWZpYyA9ICJOb24tQWxpYXNlZCBVbmNvcnJlY3RhYmxlIFNwYXJlLUNvcHkgIgorCQkJCQkiRGF0YSBFQ0MiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NMTBFUlI6CisJCQlzcGVjaWZpYyA9ICJOb24tQWxpYXNlZCBVbmNvcnJlY3RhYmxlIE1pcnJvcmVkIERlbWFuZCAiCisJCQkJCSJEYXRhIEVDQyI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX005RVJSOgorCQkJc3BlY2lmaWMgPSAiTm9uLUFsaWFzZWQgVW5jb3JyZWN0YWJsZSBOb24tTWlycm9yZWQgIgorCQkJCQkiRGVtYW5kIERhdGEgRUNDIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTThFUlI6CisJCQlzcGVjaWZpYyA9ICJBbGlhc2VkIFVuY29ycmVjdGFibGUgUGF0cm9sIERhdGEgRUNDIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTdFUlI6CisJCQlzcGVjaWZpYyA9ICJBbGlhc2VkIFVuY29ycmVjdGFibGUgU3BhcmUtQ29weSBEYXRhIEVDQyI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX002RVJSOgorCQkJc3BlY2lmaWMgPSAiQWxpYXNlZCBVbmNvcnJlY3RhYmxlIE1pcnJvcmVkIERlbWFuZCAiCisJCQkJCSJEYXRhIEVDQyI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX001RVJSOgorCQkJc3BlY2lmaWMgPSAiQWxpYXNlZCBVbmNvcnJlY3RhYmxlIE5vbi1NaXJyb3JlZCBEZW1hbmQgIgorCQkJCQkiRGF0YSBFQ0MiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NNEVSUjoKKwkJCXNwZWNpZmljID0gIlVuY29ycmVjdGFibGUgRGF0YSBFQ0Mgb24gUmVwbGF5IjsKKwkJCWJyZWFrOworCQl9CisKIAkJLyogRm9ybSBvdXQgbWVzc2FnZSAqLwogCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLAogCQkJICIoQnJhbmNoPSVkIERSQU0tQmFuaz0lZCBSRFdSPSVzIFJBUz0lZCAiCi0JCQkgIkNBUz0lZCwgVUUgRXJyPTB4JXgpIiwKKwkJCSAiQ0FTPSVkLCBVRSBFcnI9MHgleCAoJXMpKSIsCiAJCQkgYnJhbmNoID4+IDEsIGJhbmssIHJkd3IgPyAiV3JpdGUiIDogIlJlYWQiLCByYXMsIGNhcywKLQkJCSB1ZV9lcnJvcnMpOworCQkJIHVlX2Vycm9ycywgc3BlY2lmaWMpOwogCiAJCS8qIENhbGwgdGhlIGhlbHBlciB0byBvdXRwdXQgbWVzc2FnZSAqLwogCQllZGFjX21jX2hhbmRsZV9mYmRfdWUobWNpLCByYW5rLCBjaGFubmVsLCBjaGFubmVsICsgMSwgbXNnKTsKQEAgLTYxNiw1MSArNjYyLDc0IEBACiAJCQlyYW5rLCBjaGFubmVsLCBicmFuY2ggPj4gMSwgYmFuaywKIAkJCXJkd3IgPyAiV3JpdGUiIDogIlJlYWQiLCByYXMsIGNhcyk7CiAKKwkJc3dpdGNoIChjZV9lcnJvcnMpIHsKKwkJY2FzZSBGRVJSX05GX00xN0VSUjoKKwkJCXNwZWNpZmljID0gIkNvcnJlY3RhYmxlIE5vbi1NaXJyb3JlZCBEZW1hbmQgRGF0YSBFQ0MiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NMThFUlI6CisJCQlzcGVjaWZpYyA9ICJDb3JyZWN0YWJsZSBNaXJyb3JlZCBEZW1hbmQgRGF0YSBFQ0MiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NMTlFUlI6CisJCQlzcGVjaWZpYyA9ICJDb3JyZWN0YWJsZSBTcGFyZS1Db3B5IERhdGEgRUNDIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTIwRVJSOgorCQkJc3BlY2lmaWMgPSAiQ29ycmVjdGFibGUgUGF0cm9sIERhdGEgRUNDIjsKKwkJCWJyZWFrOworCQl9CisKIAkJLyogRm9ybSBvdXQgbWVzc2FnZSAqLwogCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLAogCQkJICIoQnJhbmNoPSVkIERSQU0tQmFuaz0lZCBSRFdSPSVzIFJBUz0lZCAiCi0JCQkgIkNBUz0lZCwgQ0UgRXJyPTB4JXgpIiwgYnJhbmNoID4+IDEsIGJhbmssCi0JCQkgcmR3ciA/ICJXcml0ZSIgOiAiUmVhZCIsIHJhcywgY2FzLCBjZV9lcnJvcnMpOworCQkJICJDQVM9JWQsIENFIEVycj0weCV4ICglcykpIiwgYnJhbmNoID4+IDEsIGJhbmssCisJCQkgcmR3ciA/ICJXcml0ZSIgOiAiUmVhZCIsIHJhcywgY2FzLCBjZV9lcnJvcnMsCisJCQkgc3BlY2lmaWMpOwogCiAJCS8qIENhbGwgdGhlIGhlbHBlciB0byBvdXRwdXQgbWVzc2FnZSAqLwogCQllZGFjX21jX2hhbmRsZV9mYmRfY2UobWNpLCByYW5rLCBjaGFubmVsLCBtc2cpOwogCX0KIAotCS8qIFNlZSBpZiBhbnkgb2YgdGhlIHRoZXJtYWwgZXJyb3JzIGhhdmUgZmlyZWQgKi8KLQltaXNjX2Vycm9ycyA9IGFsbEVycm9ycyAmIEZFUlJfTkZfVEhFUk1BTDsKLQlpZiAobWlzY19lcnJvcnMpIHsKLQkJaTUwMDBfcHJpbnRrKEtFUk5fV0FSTklORywgIlx0VEhFUk1BTCBFcnJvciwgYml0cz0gMHgleFxuIiwKLQkJCW1pc2NfZXJyb3JzKTsKLQl9CisJaWYgKCFtaXNjX21lc3NhZ2VzKQorCQlyZXR1cm47CiAKLQkvKiBTZWUgaWYgYW55IG9mIHRoZSB0aGVybWFsIGVycm9ycyBoYXZlIGZpcmVkICovCi0JbWlzY19lcnJvcnMgPSBhbGxFcnJvcnMgJiBGRVJSX05GX05PTl9SRVRSWTsKKwltaXNjX2Vycm9ycyA9IGFsbEVycm9ycyAmIChGRVJSX05GX05PTl9SRVRSWSB8IEZFUlJfTkZfTk9SVEhfQ1JDIHwKKwkJCQkgICBGRVJSX05GX1NQRF9QUk9UT0NPTCB8IEZFUlJfTkZfRElNTV9TUEFSRSk7CiAJaWYgKG1pc2NfZXJyb3JzKSB7Ci0JCWk1MDAwX3ByaW50ayhLRVJOX1dBUk5JTkcsICJcdE5PTi1SZXRyeSAgRXJyb3JzLCBiaXRzPSAweCV4XG4iLAotCQkJbWlzY19lcnJvcnMpOwotCX0KKwkJc3dpdGNoIChtaXNjX2Vycm9ycykgeworCQljYXNlIEZFUlJfTkZfTTEzRVJSOgorCQkJc3BlY2lmaWMgPSAiTm9uLVJldHJ5IG9yIFJlZHVuZGFudCBSZXRyeSBGQkQgTWVtb3J5ICIKKwkJCQkJIkFsZXJ0IG9yIFJlZHVuZGFudCBGYXN0IFJlc2V0IFRpbWVvdXQiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NMTRFUlI6CisJCQlzcGVjaWZpYyA9ICJOb24tUmV0cnkgb3IgUmVkdW5kYW50IFJldHJ5IEZCRCAiCisJCQkJCSJDb25maWd1cmF0aW9uIEFsZXJ0IjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTE1RVJSOgorCQkJc3BlY2lmaWMgPSAiTm9uLVJldHJ5IG9yIFJlZHVuZGFudCBSZXRyeSBGQkQgIgorCQkJCQkiTm9ydGhib3VuZCBDUkMgZXJyb3Igb24gcmVhZCBkYXRhIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTIxRVJSOgorCQkJc3BlY2lmaWMgPSAiRkJEIE5vcnRoYm91bmQgQ1JDIGVycm9yIG9uICIKKwkJCQkJIkZCRCBTeW5jIFN0YXR1cyI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX00yMkVSUjoKKwkJCXNwZWNpZmljID0gIlNQRCBwcm90b2NvbCBlcnJvciI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX00yN0VSUjoKKwkJCXNwZWNpZmljID0gIkRJTU0tc3BhcmUgY29weSBzdGFydGVkIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTI4RVJSOgorCQkJc3BlY2lmaWMgPSAiRElNTS1zcGFyZSBjb3B5IGNvbXBsZXRlZCI7CisJCQlicmVhazsKKwkJfQorCQlicmFuY2ggPSBFWFRSQUNUX0ZCRENIQU5fSU5EWChpbmZvLT5mZXJyX25mX2ZiZCk7CiAKLQkvKiBTZWUgaWYgYW55IG9mIHRoZSB0aGVybWFsIGVycm9ycyBoYXZlIGZpcmVkICovCi0JbWlzY19lcnJvcnMgPSBhbGxFcnJvcnMgJiBGRVJSX05GX05PUlRIX0NSQzsKLQlpZiAobWlzY19lcnJvcnMpIHsKLQkJaTUwMDBfcHJpbnRrKEtFUk5fV0FSTklORywKLQkJCSJcdE5PUlRIQk9VTkQgQ1JDICBFcnJvciwgYml0cz0gMHgleFxuIiwKLQkJCW1pc2NfZXJyb3JzKTsKLQl9CisJCS8qIEZvcm0gb3V0IG1lc3NhZ2UgKi8KKwkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwKKwkJCSAiKEJyYW5jaD0lZCBFcnI9JSN4ICglcykpIiwgYnJhbmNoID4+IDEsCisJCQkgbWlzY19lcnJvcnMsIHNwZWNpZmljKTsKIAotCS8qIFNlZSBpZiBhbnkgb2YgdGhlIHRoZXJtYWwgZXJyb3JzIGhhdmUgZmlyZWQgKi8KLQltaXNjX2Vycm9ycyA9IGFsbEVycm9ycyAmIEZFUlJfTkZfU1BEX1BST1RPQ09MOwotCWlmIChtaXNjX2Vycm9ycykgewotCQlpNTAwMF9wcmludGsoS0VSTl9XQVJOSU5HLAotCQkJIlx0U1BEIFByb3RvY29sICBFcnJvciwgYml0cz0gMHgleFxuIiwKLQkJCW1pc2NfZXJyb3JzKTsKLQl9Ci0KLQkvKiBTZWUgaWYgYW55IG9mIHRoZSB0aGVybWFsIGVycm9ycyBoYXZlIGZpcmVkICovCi0JbWlzY19lcnJvcnMgPSBhbGxFcnJvcnMgJiBGRVJSX05GX0RJTU1fU1BBUkU7Ci0JaWYgKG1pc2NfZXJyb3JzKSB7Ci0JCWk1MDAwX3ByaW50ayhLRVJOX1dBUk5JTkcsICJcdERJTU0tU3BhcmUgIEVycm9yLCBiaXRzPSAweCV4XG4iLAotCQkJbWlzY19lcnJvcnMpOworCQkvKiBDYWxsIHRoZSBoZWxwZXIgdG8gb3V0cHV0IG1lc3NhZ2UgKi8KKwkJZWRhY19tY19oYW5kbGVfZmJkX2NlKG1jaSwgMCwgMCwgbXNnKTsKIAl9CiB9CiAKQEAgLTE0OTcsMyArMTU2Niw2IEBACiAKIG1vZHVsZV9wYXJhbShlZGFjX29wX3N0YXRlLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlZGFjX29wX3N0YXRlLCAiRURBQyBFcnJvciBSZXBvcnRpbmcgc3RhdGU6IDA9UG9sbCwxPU5NSSIpOworbW9kdWxlX3BhcmFtKG1pc2NfbWVzc2FnZXMsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1pc2NfbWVzc2FnZXMsICJMb2cgbWlzY2VsbGFuZW91cyBub24gZmF0YWwgbWVzc2FnZXMiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k4MjQ0M2J4Z3hfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k4MjQ0M2J4Z3hfZWRhYy5jCmluZGV4IGM1MzA1ZTMuLjU3Nzc2MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pODI0NDNieGd4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTgyNDQzYnhneF9lZGFjLmMKQEAgLTExNCw2ICsxMTQsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqaTgyNDQzYnhneF9wY2k7CiAKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbWNpX3BkZXY7CS8qIGluaXQgZGV2OiBpbiBjYXNlIHRoYXQgQUdQIGNvZGUgaGFzCisJCQkJCSAqIGFscmVhZHkgcmVnaXN0ZXJlZCBkcml2ZXIKKwkJCQkJICovCisKK3N0YXRpYyBpbnQgaTgyNDQzYnhneF9yZWdpc3RlcmVkID0gMTsKKwogc3RhdGljIHZvaWQgaTgyNDQzYnhneF9lZGFjbWNfZ2V0X2Vycm9yX2luZm8oc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAogCQkJCXN0cnVjdCBpODI0NDNieGd4X2VkYWNtY19lcnJvcl9pbmZvCiAJCQkJKmluZm8pCkBAIC0zNDUsMTAgKzM1MSwxNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgaTgyNDQzYnhneF9lZGFjbWNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogeworCWludCByYzsKKwogCWRlYnVnZjAoIk1DOiAiIF9fRklMRV9fICI6ICVzKClcbiIsIF9fZnVuY19fKTsKIAogCS8qIGRvbid0IG5lZWQgdG8gY2FsbCBwY2lfZGV2aWNlX2VuYWJsZSgpICovCi0JcmV0dXJuIGk4MjQ0M2J4Z3hfZWRhY21jX3Byb2JlMShwZGV2LCBlbnQtPmRyaXZlcl9kYXRhKTsKKwlyYyA9IGk4MjQ0M2J4Z3hfZWRhY21jX3Byb2JlMShwZGV2LCBlbnQtPmRyaXZlcl9kYXRhKTsKKworCWlmIChtY2lfcGRldiA9PSBOVUxMKQorCQltY2lfcGRldiA9IHBjaV9kZXZfZ2V0KHBkZXYpOworCisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgaTgyNDQzYnhneF9lZGFjbWNfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTM4NywxNSArNDAwLDYxIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGk4MjQ0M2J4Z3hfZWRhY21jX2luaXQodm9pZCkKIHsKKwlpbnQgcGNpX3JjOwogICAgICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBPUFNUQVRFIGlzIHNldCBjb3JyZWN0bHkgZm9yIFBPTEwgb3IgTk1JICovCiAgICAgICAgb3BzdGF0ZV9pbml0KCk7CiAKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaTgyNDQzYnhneF9lZGFjbWNfZHJpdmVyKTsKKwlwY2lfcmMgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpODI0NDNieGd4X2VkYWNtY19kcml2ZXIpOworCWlmIChwY2lfcmMgPCAwKQorCQlnb3RvIGZhaWwwOworCisJaWYgKG1jaV9wZGV2ID09IE5VTEwpIHsKKwkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkID0gJmk4MjQ0M2J4Z3hfcGNpX3RibFswXTsKKwkJaW50IGkgPSAwOworCQlpODI0NDNieGd4X3JlZ2lzdGVyZWQgPSAwOworCisJCXdoaWxlIChtY2lfcGRldiA9PSBOVUxMICYmIGlkLT52ZW5kb3IgIT0gMCkgeworCQkJbWNpX3BkZXYgPSBwY2lfZ2V0X2RldmljZShpZC0+dmVuZG9yLAorCQkJCQlpZC0+ZGV2aWNlLCBOVUxMKTsKKwkJCWkrKzsKKwkJCWlkID0gJmk4MjQ0M2J4Z3hfcGNpX3RibFtpXTsKKwkJfQorCQlpZiAoIW1jaV9wZGV2KSB7CisJCQlkZWJ1Z2YwKCJpODI0NDNieGd4IHBjaV9nZXRfZGV2aWNlIGZhaWxcbiIpOworCQkJcGNpX3JjID0gLUVOT0RFVjsKKwkJCWdvdG8gZmFpbDE7CisJCX0KKworCQlwY2lfcmMgPSBpODI0NDNieGd4X2VkYWNtY19pbml0X29uZShtY2lfcGRldiwgaTgyNDQzYnhneF9wY2lfdGJsKTsKKworCQlpZiAocGNpX3JjIDwgMCkgeworCQkJZGVidWdmMCgiaTgyNDQzYnhneCBpbml0IGZhaWxcbiIpOworCQkJcGNpX3JjID0gLUVOT0RFVjsKKwkJCWdvdG8gZmFpbDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDE6CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpODI0NDNieGd4X2VkYWNtY19kcml2ZXIpOworCitmYWlsMDoKKwlpZiAobWNpX3BkZXYgIT0gTlVMTCkKKwkJcGNpX2Rldl9wdXQobWNpX3BkZXYpOworCisJcmV0dXJuIHBjaV9yYzsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGk4MjQ0M2J4Z3hfZWRhY21jX2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmk4MjQ0M2J4Z3hfZWRhY21jX2RyaXZlcik7CisKKwlpZiAoIWk4MjQ0M2J4Z3hfcmVnaXN0ZXJlZCkKKwkJaTgyNDQzYnhneF9lZGFjbWNfcmVtb3ZlX29uZShtY2lfcGRldik7CisKKwlpZiAobWNpX3BkZXYpCisJCXBjaV9kZXZfcHV0KG1jaV9wZGV2KTsKIH0KIAogbW9kdWxlX2luaXQoaTgyNDQzYnhneF9lZGFjbWNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKaW5kZXggMjI2NWQ5Yy4uMGNmY2IyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvZWRhYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KQEAgLTQwLDcgKzQxLDcgQEAKICNlbmRpZgogCiBzdGF0aWMgdTMyIG9yaWdfbDJfZXJyX2Rpc2FibGU7Ci1zdGF0aWMgdTMyIG9yaWdfaGlkMTsKK3N0YXRpYyB1MzIgb3JpZ19oaWQxWzJdOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqIE1DIFNZU0ZTIHBhcnRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC02NDcsNiArNjQ4LDkgQEAKIAl7CiAJIC5jb21wYXRpYmxlID0gImZzbCw4NTY4LWwyLWNhY2hlLWNvbnRyb2xsZXIiLAogCSB9LAorCXsKKwkgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItbDItY2FjaGUtY29udHJvbGxlciIsCisJIH0sCiAJe30sCiB9OwogCkBAIC05MTIsNyArOTE2LDggQEAKIAkJLyogcmVnaXN0ZXIgaW50ZXJydXB0cyAqLwogCQlwZGF0YS0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob3AtPm5vZGUsIDApOwogCQlyZXMgPSBkZXZtX3JlcXVlc3RfaXJxKCZvcC0+ZGV2LCBwZGF0YS0+aXJxLAotCQkJCSAgICAgICBtcGM4NXh4X21jX2lzciwgSVJRRl9ESVNBQkxFRCwKKwkJCQkgICAgICAgbXBjODV4eF9tY19pc3IsCisJCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKIAkJCQkgICAgICAgIltFREFDXSBNQyBlcnIiLCBtY2kpOwogCQlpZiAocmVzIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIHJlcXVlc3QgaXJxICVkIGZvciAiCkBAIC05ODAsNiArOTg1LDkgQEAKIAl7CiAJIC5jb21wYXRpYmxlID0gImZzbCw4NTY4LW1lbW9yeS1jb250cm9sbGVyIiwKIAkgfSwKKwl7CisJIC5jb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLW1lbW9yeS1jb250cm9sbGVyIiwKKwkgfSwKIAl7fSwKIH07CiAKQEAgLTk5NSw2ICsxMDAzLDE0IEBACiAJCSAgIH0sCiB9OwogCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtcGM4NXh4X21jX2NsZWFyX3JmeGUodm9pZCAqZGF0YSkKK3sKKwlvcmlnX2hpZDFbc21wX3Byb2Nlc3Nvcl9pZCgpXSA9IG1mc3ByKFNQUk5fSElEMSk7CisJbXRzcHIoU1BSTl9ISUQxLCAob3JpZ19oaWQxW3NtcF9wcm9jZXNzb3JfaWQoKV0gJiB+MHgyMDAwMCkpOworfQorCisKIHN0YXRpYyBpbnQgX19pbml0IG1wYzg1eHhfbWNfaW5pdCh2b2lkKQogewogCWludCByZXMgPSAwOwpAQCAtMTAzMCwxOSArMTA0NiwyMiBAQAogCSAqIG5lZWQgdG8gY2xlYXIgSElEMVtSRlhFXSB0byBkaXNhYmxlIG1hY2hpbmUgY2hlY2sgaW50CiAJICogc28gd2UgY2FuIGNhdGNoIGl0CiAJICovCi0JaWYgKGVkYWNfb3Bfc3RhdGUgPT0gRURBQ19PUFNUQVRFX0lOVCkgewotCQlvcmlnX2hpZDEgPSBtZnNwcihTUFJOX0hJRDEpOwotCQltdHNwcihTUFJOX0hJRDEsIChvcmlnX2hpZDEgJiB+MHgyMDAwMCkpOwotCX0KKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfSU5UKQorCQlvbl9lYWNoX2NwdShtcGM4NXh4X21jX2NsZWFyX3JmeGUsIE5VTEwsIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKIG1vZHVsZV9pbml0KG1wYzg1eHhfbWNfaW5pdCk7CiAKK3N0YXRpYyB2b2lkIF9fZXhpdCBtcGM4NXh4X21jX3Jlc3RvcmVfaGlkMSh2b2lkICpkYXRhKQoreworCW10c3ByKFNQUk5fSElEMSwgb3JpZ19oaWQxW3NtcF9wcm9jZXNzb3JfaWQoKV0pOworfQorCiBzdGF0aWMgdm9pZCBfX2V4aXQgbXBjODV4eF9tY19leGl0KHZvaWQpCiB7Ci0JbXRzcHIoU1BSTl9ISUQxLCBvcmlnX2hpZDEpOworCW9uX2VhY2hfY3B1KG1wYzg1eHhfbWNfcmVzdG9yZV9oaWQxLCBOVUxMLCAwKTsKICNpZmRlZiBDT05GSUdfUENJCiAJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzg1eHhfcGNpX2Vycl9kcml2ZXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNhcmQuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jCmluZGV4IGJiZDczYTQuLjQxOGMxOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jCkBAIC0xODksMzkgKzE4OSwxNiBAQAogCTYzLCA1LCA3LCA4LCAxMCwgMTMsIDE2LCAxOCwgMjEsIDI0LCAyNiwgMjksIDMyLCAzNSwgMzcsIDQwCiB9OwogCi1zdHJ1Y3QgYm1fZGF0YSB7Ci0Jc3RydWN0IGZ3X3RyYW5zYWN0aW9uIHQ7Ci0Jc3RydWN0IHsKLQkJX19iZTMyIGFyZzsKLQkJX19iZTMyIGRhdGE7Ci0JfSBsb2NrOwotCXUzMiBvbGQ7Ci0JaW50IHJjb2RlOwotCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7Ci19OwotCi1zdGF0aWMgdm9pZAotY29tcGxldGVfYm1fbG9jayhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAotCQkgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYm1fZGF0YSAqYm1kID0gZGF0YTsKLQotCWlmIChyY29kZSA9PSBSQ09ERV9DT01QTEVURSkKLQkJYm1kLT5vbGQgPSBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKSBwYXlsb2FkKTsKLQlibWQtPnJjb2RlID0gcmNvZGU7Ci0JY29tcGxldGUoJmJtZC0+ZG9uZSk7Ci19Ci0KIHN0YXRpYyB2b2lkCiBmd19jYXJkX2JtX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmd19jYXJkLCB3b3JrLndvcmspOwogCXN0cnVjdCBmd19kZXZpY2UgKnJvb3RfZGV2aWNlOwogCXN0cnVjdCBmd19ub2RlICpyb290X25vZGUsICpsb2NhbF9ub2RlOwotCXN0cnVjdCBibV9kYXRhIGJtZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByb290X2lkLCBuZXdfcm9vdF9pZCwgaXJtX2lkLCBnYXBfY291bnQsIGdlbmVyYXRpb24sIGdyYWNlOworCWludCByb290X2lkLCBuZXdfcm9vdF9pZCwgaXJtX2lkLCBnYXBfY291bnQsIGdlbmVyYXRpb24sIGdyYWNlLCByY29kZTsKIAlib29sIGRvX3Jlc2V0ID0gZmFsc2U7CisJX19iZTMyIGxvY2tfZGF0YVsyXTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJbG9jYWxfbm9kZSA9IGNhcmQtPmxvY2FsX25vZGU7CkBAIC0yNjMsMzMgKzI0MCwyOCBAQAogCQkJZ290byBwaWNrX21lOwogCQl9CiAKLQkJYm1kLmxvY2suYXJnID0gY3B1X3RvX2JlMzIoMHgzZik7Ci0JCWJtZC5sb2NrLmRhdGEgPSBjcHVfdG9fYmUzMihsb2NhbF9ub2RlLT5ub2RlX2lkKTsKKwkJbG9ja19kYXRhWzBdID0gY3B1X3RvX2JlMzIoMHgzZik7CisJCWxvY2tfZGF0YVsxXSA9IGNwdV90b19iZTMyKGxvY2FsX25vZGUtPm5vZGVfaWQpOwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAotCQlpbml0X2NvbXBsZXRpb24oJmJtZC5kb25lKTsKLQkJZndfc2VuZF9yZXF1ZXN0KGNhcmQsICZibWQudCwgVENPREVfTE9DS19DT01QQVJFX1NXQVAsCi0JCQkJaXJtX2lkLCBnZW5lcmF0aW9uLAotCQkJCVNDT0RFXzEwMCwgQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQlVTX01BTkFHRVJfSUQsCi0JCQkJJmJtZC5sb2NrLCBzaXplb2YoYm1kLmxvY2spLAotCQkJCWNvbXBsZXRlX2JtX2xvY2ssICZibWQpOwotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZibWQuZG9uZSk7CisJCXJjb2RlID0gZndfcnVuX3RyYW5zYWN0aW9uKGNhcmQsIFRDT0RFX0xPQ0tfQ09NUEFSRV9TV0FQLAorCQkJCWlybV9pZCwgZ2VuZXJhdGlvbiwgU0NPREVfMTAwLAorCQkJCUNTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX0JVU19NQU5BR0VSX0lELAorCQkJCWxvY2tfZGF0YSwgc2l6ZW9mKGxvY2tfZGF0YSkpOwogCi0JCWlmIChibWQucmNvZGUgPT0gUkNPREVfR0VORVJBVElPTikgewotCQkJLyoKLQkJCSAqIEFub3RoZXIgYnVzIHJlc2V0IGhhcHBlbmVkLiBKdXN0IHJldHVybiwKLQkJCSAqIHRoZSBCTSB3b3JrIGhhcyBiZWVuIHJlc2NoZWR1bGVkLgotCQkJICovCisJCWlmIChyY29kZSA9PSBSQ09ERV9HRU5FUkFUSU9OKQorCQkJLyogQW5vdGhlciBidXMgcmVzZXQsIEJNIHdvcmsgaGFzIGJlZW4gcmVzY2hlZHVsZWQuICovCiAJCQlnb3RvIG91dDsKLQkJfQogCi0JCWlmIChibWQucmNvZGUgPT0gUkNPREVfQ09NUExFVEUgJiYgYm1kLm9sZCAhPSAweDNmKQorCQlpZiAocmNvZGUgPT0gUkNPREVfQ09NUExFVEUgJiYKKwkJICAgIGxvY2tfZGF0YVswXSAhPSBjcHVfdG9fYmUzMigweDNmKSkKIAkJCS8qIFNvbWVib2R5IGVsc2UgaXMgQk0sIGxldCB0aGVtIGRvIHRoZSB3b3JrLiAqLwogCQkJZ290byBvdXQ7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGJtZC5yY29kZSAhPSBSQ09ERV9DT01QTEVURSkgeworCisJCWlmIChyY29kZSAhPSBSQ09ERV9DT01QTEVURSkgewogCQkJLyoKIAkJCSAqIFRoZSBsb2NrIHJlcXVlc3QgZmFpbGVkLCBtYXliZSB0aGUgSVJNCiAJCQkgKiBpc24ndCByZWFsbHkgSVJNIGNhcGFibGUgYWZ0ZXIgYWxsLiBMZXQncwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1jZGV2LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYwppbmRleCAyZTZkNTg0Li5lZDAzMjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYwpAQCAtNzIwLDggKzcyMCw4IEBACiAjZGVmaW5lIEdFVF9QQVlMT0FEX0xFTkdUSCh2KQkoKHYpICYgMHhmZmZmKQogI2RlZmluZSBHRVRfSU5URVJSVVBUKHYpCSgoKHYpID4+IDE2KSAmIDB4MDEpCiAjZGVmaW5lIEdFVF9TS0lQKHYpCQkoKCh2KSA+PiAxNykgJiAweDAxKQotI2RlZmluZSBHRVRfVEFHKHYpCQkoKCh2KSA+PiAxOCkgJiAweDAyKQotI2RlZmluZSBHRVRfU1kodikJCSgoKHYpID4+IDIwKSAmIDB4MDQpCisjZGVmaW5lIEdFVF9UQUcodikJCSgoKHYpID4+IDE4KSAmIDB4MDMpCisjZGVmaW5lIEdFVF9TWSh2KQkJKCgodikgPj4gMjApICYgMHgwZikKICNkZWZpbmUgR0VUX0hFQURFUl9MRU5HVEgodikJKCgodikgPj4gMjQpICYgMHhmZikKIAogc3RhdGljIGludCBpb2N0bF9xdWV1ZV9pc28oc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCkBAIC05MTMsNyArOTEzLDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBsb25nCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuYwppbmRleCAwODU1ZmI1Li4zZmNjZGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctZGV2aWNlLmMKQEAgLTM4MSw0NiArMzgxLDIxIEBACiAJX19BVFRSX05VTEwsCiB9OwogCi1zdHJ1Y3QgcmVhZF9xdWFkbGV0X2NhbGxiYWNrX2RhdGEgewotCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7Ci0JaW50IHJjb2RlOwotCXUzMiBkYXRhOwotfTsKLQotc3RhdGljIHZvaWQKLWNvbXBsZXRlX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUsCi0JCSAgICAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgcmVhZF9xdWFkbGV0X2NhbGxiYWNrX2RhdGEgKmNhbGxiYWNrX2RhdGEgPSBkYXRhOwotCi0JaWYgKHJjb2RlID09IFJDT0RFX0NPTVBMRVRFKQotCQljYWxsYmFja19kYXRhLT5kYXRhID0gYmUzMl90b19jcHUoKihfX2JlMzIgKilwYXlsb2FkKTsKLQljYWxsYmFja19kYXRhLT5yY29kZSA9IHJjb2RlOwotCWNvbXBsZXRlKCZjYWxsYmFja19kYXRhLT5kb25lKTsKLX0KLQogc3RhdGljIGludAogcmVhZF9yb20oc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLCBpbnQgZ2VuZXJhdGlvbiwgaW50IGluZGV4LCB1MzIgKmRhdGEpCiB7Ci0Jc3RydWN0IHJlYWRfcXVhZGxldF9jYWxsYmFja19kYXRhIGNhbGxiYWNrX2RhdGE7Ci0Jc3RydWN0IGZ3X3RyYW5zYWN0aW9uIHQ7Ci0JdTY0IG9mZnNldDsKKwlpbnQgcmNvZGU7CiAKIAkvKiBkZXZpY2UtPm5vZGVfaWQsIGFjY2Vzc2VkIGJlbG93LCBtdXN0IG5vdCBiZSBvbGRlciB0aGFuIGdlbmVyYXRpb24gKi8KIAlzbXBfcm1iKCk7CiAKLQlpbml0X2NvbXBsZXRpb24oJmNhbGxiYWNrX2RhdGEuZG9uZSk7Ci0KLQlvZmZzZXQgPSAoQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfQ09ORklHX1JPTSkgKyBpbmRleCAqIDQ7Ci0JZndfc2VuZF9yZXF1ZXN0KGRldmljZS0+Y2FyZCwgJnQsIFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNULAorCXJjb2RlID0gZndfcnVuX3RyYW5zYWN0aW9uKGRldmljZS0+Y2FyZCwgVENPREVfUkVBRF9RVUFETEVUX1JFUVVFU1QsCiAJCQlkZXZpY2UtPm5vZGVfaWQsIGdlbmVyYXRpb24sIGRldmljZS0+bWF4X3NwZWVkLAotCQkJb2Zmc2V0LCBOVUxMLCA0LCBjb21wbGV0ZV90cmFuc2FjdGlvbiwgJmNhbGxiYWNrX2RhdGEpOworCQkJKENTUl9SRUdJU1RFUl9CQVNFIHwgQ1NSX0NPTkZJR19ST00pICsgaW5kZXggKiA0LAorCQkJZGF0YSwgNCk7CisJYmUzMl90b19jcHVzKGRhdGEpOwogCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmY2FsbGJhY2tfZGF0YS5kb25lKTsKLQotCSpkYXRhID0gY2FsbGJhY2tfZGF0YS5kYXRhOwotCi0JcmV0dXJuIGNhbGxiYWNrX2RhdGEucmNvZGU7CisJcmV0dXJuIHJjb2RlOwogfQogCiAjZGVmaW5lIFJFQURfQklCX1JPTV9TSVpFCTI1NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1zYnAyLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYwppbmRleCBhYWZmNTBlLi5lZjBiOWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYwpAQCAtMjksNiArMjksNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CkBAIC0xODEsMTAgKzE4MiwxNiBAQAogI2RlZmluZSBTQlAyX01BWF9MT0dJTl9PUkJfVElNRU9VVAk0MDAwMFUJLyogVGltZW91dCBpbiBtcyAqLwogI2RlZmluZSBTQlAyX09SQl9USU1FT1VUCQkyMDAwVQkvKiBUaW1lb3V0IGluIG1zICovCiAjZGVmaW5lIFNCUDJfT1JCX05VTEwJCQkweDgwMDAwMDAwCi0jZGVmaW5lIFNCUDJfTUFYX1NHX0VMRU1FTlRfTEVOR1RICTB4ZjAwMAogI2RlZmluZSBTQlAyX1JFVFJZX0xJTUlUCQkweGYJCS8qIDE1IHJldHJpZXMgKi8KICNkZWZpbmUgU0JQMl9DWUNMRV9MSU1JVAkJKDB4YzggPDwgMTIpCS8qIDIwMCAxMjV1cyBjeWNsZXMgKi8KIAorLyoKKyAqIFRoZSBkZWZhdWx0IG1heGltdW0gcy9nIHNlZ21lbnQgc2l6ZSBvZiBhIEZpcmVXaXJlIGNvbnRyb2xsZXIgaXMKKyAqIHVzdWFsbHkgMHgxMDAwMCwgYnV0IFNCUC0yIG9ubHkgYWxsb3dzIDB4ZmZmZi4gU2luY2UgYnVmZmVycyBoYXZlIHRvCisgKiBiZSBxdWFkbGV0LWFsaWduZWQsIHdlIHNldCB0aGUgbGVuZ3RoIGxpbWl0IHRvIDB4ZmZmZiAmIH4zLgorICovCisjZGVmaW5lIFNCUDJfTUFYX1NFR19TSVpFCQkweGZmZmMKKwogLyogVW5pdCBkaXJlY3Rvcnkga2V5cyAqLwogI2RlZmluZSBTQlAyX0NTUl9VTklUX0NIQVJBQ1RFUklTVElDUwkweDNhCiAjZGVmaW5lIFNCUDJfQ1NSX0ZJUk1XQVJFX1JFVklTSU9OCTB4M2MKQEAgLTYyMSwyNSArNjI4LDE1IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHZvaWQKLWNvbXBsZXRlX2FnZW50X3Jlc2V0X3dyaXRlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUsCi0JCQkgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkb25lKQotewotCWNvbXBsZXRlKGRvbmUpOwotfQotCiBzdGF0aWMgdm9pZCBzYnAyX2FnZW50X3Jlc2V0KHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUpCiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGx1LT50Z3QtPnVuaXQtPmRldmljZS5wYXJlbnQpOwotCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOwotCXN0cnVjdCBmd190cmFuc2FjdGlvbiB0OwotCXN0YXRpYyB1MzIgejsKKwlfX2JlMzIgZCA9IDA7CiAKLQlmd19zZW5kX3JlcXVlc3QoZGV2aWNlLT5jYXJkLCAmdCwgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNULAotCQkJbHUtPnRndC0+bm9kZV9pZCwgbHUtPmdlbmVyYXRpb24sIGRldmljZS0+bWF4X3NwZWVkLAotCQkJbHUtPmNvbW1hbmRfYmxvY2tfYWdlbnRfYWRkcmVzcyArIFNCUDJfQUdFTlRfUkVTRVQsCi0JCQkmeiwgc2l6ZW9mKHopLCBjb21wbGV0ZV9hZ2VudF9yZXNldF93cml0ZSwgJmRvbmUpOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRvbmUpOworCWZ3X3J1bl90cmFuc2FjdGlvbihkZXZpY2UtPmNhcmQsIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVCwKKwkJCSAgIGx1LT50Z3QtPm5vZGVfaWQsIGx1LT5nZW5lcmF0aW9uLCBkZXZpY2UtPm1heF9zcGVlZCwKKwkJCSAgIGx1LT5jb21tYW5kX2Jsb2NrX2FnZW50X2FkZHJlc3MgKyBTQlAyX0FHRU5UX1JFU0VULAorCQkJICAgJmQsIHNpemVvZihkKSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC02NTMsNyArNjUwLDcgQEAKIHsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UobHUtPnRndC0+dW5pdC0+ZGV2aWNlLnBhcmVudCk7CiAJc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0OwotCXN0YXRpYyB1MzIgejsKKwlzdGF0aWMgX19iZTMyIGQ7CiAKIAl0ID0ga21hbGxvYyhzaXplb2YoKnQpLCBHRlBfQVRPTUlDKTsKIAlpZiAodCA9PSBOVUxMKQpAQCAtNjYyLDcgKzY1OSw3IEBACiAJZndfc2VuZF9yZXF1ZXN0KGRldmljZS0+Y2FyZCwgdCwgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNULAogCQkJbHUtPnRndC0+bm9kZV9pZCwgbHUtPmdlbmVyYXRpb24sIGRldmljZS0+bWF4X3NwZWVkLAogCQkJbHUtPmNvbW1hbmRfYmxvY2tfYWdlbnRfYWRkcmVzcyArIFNCUDJfQUdFTlRfUkVTRVQsCi0JCQkmeiwgc2l6ZW9mKHopLCBjb21wbGV0ZV9hZ2VudF9yZXNldF93cml0ZV9ub193YWl0LCB0KTsKKwkJCSZkLCBzaXplb2YoZCksIGNvbXBsZXRlX2FnZW50X3Jlc2V0X3dyaXRlX25vX3dhaXQsIHQpOwogfQogCiBzdGF0aWMgdm9pZCBzYnAyX3NldF9nZW5lcmF0aW9uKHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUsIGludCBnZW5lcmF0aW9uKQpAQCAtODIzLDEzICs4MjAsNiBAQAogCWtyZWZfcHV0KCZ0Z3QtPmtyZWYsIHNicDJfcmVsZWFzZV90YXJnZXQpOwogfQogCi1zdGF0aWMgdm9pZAotY29tcGxldGVfc2V0X2J1c3lfdGltZW91dChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAotCQkJICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkb25lKQotewotCWNvbXBsZXRlKGRvbmUpOwotfQotCiAvKgogICogV3JpdGUgcmV0cmFuc21pdCByZXRyeSB2YWx1ZXMgaW50byB0aGUgQlVTWV9USU1FT1VUIHJlZ2lzdGVyLgogICogLSBUaGUgc2luZ2xlLXBoYXNlIHJldHJ5IHByb3RvY29sIGlzIHN1cHBvcnRlZCBieSBhbGwgU0JQLTIgZGV2aWNlcywgYnV0IHRoZQpAQCAtODQ5LDE3ICs4MzksMTIgQEAKIHN0YXRpYyB2b2lkIHNicDJfc2V0X2J1c3lfdGltZW91dChzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1KQogewogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShsdS0+dGd0LT51bml0LT5kZXZpY2UucGFyZW50KTsKLQlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKLQlzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gdDsKLQlzdGF0aWMgX19iZTMyIGJ1c3lfdGltZW91dDsKKwlfX2JlMzIgZCA9IGNwdV90b19iZTMyKFNCUDJfQ1lDTEVfTElNSVQgfCBTQlAyX1JFVFJZX0xJTUlUKTsKIAotCWJ1c3lfdGltZW91dCA9IGNwdV90b19iZTMyKFNCUDJfQ1lDTEVfTElNSVQgfCBTQlAyX1JFVFJZX0xJTUlUKTsKLQotCWZ3X3NlbmRfcmVxdWVzdChkZXZpY2UtPmNhcmQsICZ0LCBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QsCi0JCQlsdS0+dGd0LT5ub2RlX2lkLCBsdS0+Z2VuZXJhdGlvbiwgZGV2aWNlLT5tYXhfc3BlZWQsCi0JCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9CVVNZX1RJTUVPVVQsICZidXN5X3RpbWVvdXQsCi0JCQlzaXplb2YoYnVzeV90aW1lb3V0KSwgY29tcGxldGVfc2V0X2J1c3lfdGltZW91dCwgJmRvbmUpOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRvbmUpOworCWZ3X3J1bl90cmFuc2FjdGlvbihkZXZpY2UtPmNhcmQsIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVCwKKwkJCSAgIGx1LT50Z3QtPm5vZGVfaWQsIGx1LT5nZW5lcmF0aW9uLCBkZXZpY2UtPm1heF9zcGVlZCwKKwkJCSAgIENTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX0JVU1lfVElNRU9VVCwKKwkJCSAgICZkLCBzaXplb2YoZCkpOwogfQogCiBzdGF0aWMgdm9pZCBzYnAyX3JlY29ubmVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwpAQCAtMTEyMSw2ICsxMTA2LDEwIEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAJdTMyIG1vZGVsLCBmaXJtd2FyZV9yZXZpc2lvbjsKIAorCWlmIChkbWFfZ2V0X21heF9zZWdfc2l6ZShkZXZpY2UtPmNhcmQtPmRldmljZSkgPiBTQlAyX01BWF9TRUdfU0laRSkKKwkJQlVHX09OKGRtYV9zZXRfbWF4X3NlZ19zaXplKGRldmljZS0+Y2FyZC0+ZGV2aWNlLAorCQkJCQkgICAgU0JQMl9NQVhfU0VHX1NJWkUpKTsKKwogCXNob3N0ID0gc2NzaV9ob3N0X2FsbG9jKCZzY3NpX2RyaXZlcl90ZW1wbGF0ZSwgc2l6ZW9mKCp0Z3QpKTsKIAlpZiAoc2hvc3QgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMzY5LDE0ICsxMzU4LDEyIEBACiBzYnAyX21hcF9zY2F0dGVybGlzdChzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiAqb3JiLCBzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsCiAJCSAgICAgc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSkKIHsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCWludCBzZ19sZW4sIGwsIGksIGosIGNvdW50OwotCWRtYV9hZGRyX3Qgc2dfYWRkcjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gc2NzaV9zZ2xpc3Qob3JiLT5jbWQpOworCWludCBpLCBuOwogCi0Jc2cgPSBzY3NpX3NnbGlzdChvcmItPmNtZCk7Ci0JY291bnQgPSBkbWFfbWFwX3NnKGRldmljZS0+Y2FyZC0+ZGV2aWNlLCBzZywgc2NzaV9zZ19jb3VudChvcmItPmNtZCksCi0JCQkgICBvcmItPmNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCWlmIChjb3VudCA9PSAwKQorCW4gPSBkbWFfbWFwX3NnKGRldmljZS0+Y2FyZC0+ZGV2aWNlLCBzZywgc2NzaV9zZ19jb3VudChvcmItPmNtZCksCisJCSAgICAgICBvcmItPmNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOworCWlmIChuID09IDApCiAJCWdvdG8gZmFpbDsKIAogCS8qCkBAIC0xMzg2LDcgKzEzNzMsNyBAQAogCSAqIGFzIHRoZSBzZWNvbmQgZ2VuZXJhdGlvbiBpUG9kIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBwYWdlCiAJICogdGFibGVzLgogCSAqLwotCWlmIChjb3VudCA9PSAxICYmIHNnX2RtYV9sZW4oc2cpIDwgU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEgpIHsKKwlpZiAobiA9PSAxKSB7CiAJCW9yYi0+cmVxdWVzdC5kYXRhX2Rlc2NyaXB0b3IuaGlnaCA9CiAJCQljcHVfdG9fYmUzMihsdS0+dGd0LT5hZGRyZXNzX2hpZ2gpOwogCQlvcmItPnJlcXVlc3QuZGF0YV9kZXNjcmlwdG9yLmxvdyAgPQpAQCAtMTM5NiwyOSArMTM4Myw5IEBACiAJCXJldHVybiAwOwogCX0KIAotCS8qCi0JICogQ29udmVydCB0aGUgc2NhdHRlcmxpc3QgdG8gYW4gc2JwMiBwYWdlIHRhYmxlLiAgSWYgYW55Ci0JICogc2NhdHRlcmxpc3QgZW50cmllcyBhcmUgdG9vIGJpZyBmb3Igc2JwMiwgd2Ugc3BsaXQgdGhlbSBhcyB3ZQotCSAqIGdvLiAgRXZlbiBpZiB3ZSBhc2sgdGhlIGJsb2NrIEkvTyBsYXllciB0byBub3QgZ2l2ZSB1cyBzZwotCSAqIGVsZW1lbnRzIGxhcmdlciB0aGFuIDY1NTM1IGJ5dGVzLCBzb21lIElPTU1VcyBtYXkgbWVyZ2Ugc2cgZWxlbWVudHMKLQkgKiBkdXJpbmcgRE1BIG1hcHBpbmcsIGFuZCBMaW51eCBjdXJyZW50bHkgZG9lc24ndCBwcmV2ZW50IHRoaXMuCi0JICovCi0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBjb3VudDsgaSsrLCBzZyA9IHNnX25leHQoc2cpKSB7Ci0JCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOwotCQlzZ19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwotCQl3aGlsZSAoc2dfbGVuKSB7Ci0JCQkvKiBGSVhNRTogVGhpcyB3b24ndCBnZXQgdXMgb3V0IG9mIHRoZSBwaW5jaC4gKi8KLQkJCWlmICh1bmxpa2VseShqID49IEFSUkFZX1NJWkUob3JiLT5wYWdlX3RhYmxlKSkpIHsKLQkJCQlmd19lcnJvcigicGFnZSB0YWJsZSBvdmVyZmxvd1xuIik7Ci0JCQkJZ290byBmYWlsX3BhZ2VfdGFibGU7Ci0JCQl9Ci0JCQlsID0gbWluKHNnX2xlbiwgU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEgpOwotCQkJb3JiLT5wYWdlX3RhYmxlW2pdLmxvdyA9IGNwdV90b19iZTMyKHNnX2FkZHIpOwotCQkJb3JiLT5wYWdlX3RhYmxlW2pdLmhpZ2ggPSBjcHVfdG9fYmUzMihsIDw8IDE2KTsKLQkJCXNnX2FkZHIgKz0gbDsKLQkJCXNnX2xlbiAtPSBsOwotCQkJaisrOwotCQl9CisJZm9yX2VhY2hfc2coc2csIHNnLCBuLCBpKSB7CisJCW9yYi0+cGFnZV90YWJsZVtpXS5oaWdoID0gY3B1X3RvX2JlMzIoc2dfZG1hX2xlbihzZykgPDwgMTYpOworCQlvcmItPnBhZ2VfdGFibGVbaV0ubG93ID0gY3B1X3RvX2JlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAl9CiAKIAlvcmItPnBhZ2VfdGFibGVfYnVzID0KQEAgLTE0MzcsMTMgKzE0MDQsMTMgQEAKIAlvcmItPnJlcXVlc3QuZGF0YV9kZXNjcmlwdG9yLmhpZ2ggPSBjcHVfdG9fYmUzMihsdS0+dGd0LT5hZGRyZXNzX2hpZ2gpOwogCW9yYi0+cmVxdWVzdC5kYXRhX2Rlc2NyaXB0b3IubG93ICA9IGNwdV90b19iZTMyKG9yYi0+cGFnZV90YWJsZV9idXMpOwogCW9yYi0+cmVxdWVzdC5taXNjIHw9IGNwdV90b19iZTMyKENPTU1BTkRfT1JCX1BBR0VfVEFCTEVfUFJFU0VOVCB8Ci0JCQkJCSBDT01NQU5EX09SQl9EQVRBX1NJWkUoaikpOworCQkJCQkgQ09NTUFORF9PUkJfREFUQV9TSVpFKG4pKTsKIAogCXJldHVybiAwOwogCiAgZmFpbF9wYWdlX3RhYmxlOgotCWRtYV91bm1hcF9zZyhkZXZpY2UtPmNhcmQtPmRldmljZSwgc2csIHNjc2lfc2dfY291bnQob3JiLT5jbWQpLAotCQkgICAgIG9yYi0+Y21kLT5zY19kYXRhX2RpcmVjdGlvbik7CisJZG1hX3VubWFwX3NnKGRldmljZS0+Y2FyZC0+ZGV2aWNlLCBzY3NpX3NnbGlzdChvcmItPmNtZCksCisJCSAgICAgc2NzaV9zZ19jb3VudChvcmItPmNtZCksIG9yYi0+Y21kLT5zY19kYXRhX2RpcmVjdGlvbik7CiAgZmFpbDoKIAlyZXR1cm4gLUVOT01FTTsKIH0KQEAgLTE0NTYsNyArMTQyMyw3IEBACiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGx1LT50Z3QtPnVuaXQtPmRldmljZS5wYXJlbnQpOwogCXN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiICpvcmI7CiAJdW5zaWduZWQgaW50IG1heF9wYXlsb2FkOwotCWludCByZXR2YWwgPSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCWludCBnZW5lcmF0aW9uLCByZXR2YWwgPSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCiAJLyoKIAkgKiBCaWRpcmVjdGlvbmFsIGNvbW1hbmRzIGFyZSBub3QgeWV0IGltcGxlbWVudGVkLCBhbmQgdW5rbm93bgpAQCAtMTUwMCw2ICsxNDY3LDkgQEAKIAlpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCiAJCW9yYi0+cmVxdWVzdC5taXNjIHw9IGNwdV90b19iZTMyKENPTU1BTkRfT1JCX0RJUkVDVElPTik7CiAKKwlnZW5lcmF0aW9uID0gZGV2aWNlLT5nZW5lcmF0aW9uOworCXNtcF9ybWIoKTsgICAgLyogc2JwMl9tYXBfc2NhdHRlcmxpc3QgbG9va3MgYXQgdGd0LT5hZGRyZXNzX2hpZ2ggKi8KKwogCWlmIChzY3NpX3NnX2NvdW50KGNtZCkgJiYgc2JwMl9tYXBfc2NhdHRlcmxpc3Qob3JiLCBkZXZpY2UsIGx1KSA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC0xNTEyLDcgKzE0ODIsNyBAQAogCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXZpY2UtPmNhcmQtPmRldmljZSwgb3JiLT5iYXNlLnJlcXVlc3RfYnVzKSkKIAkJZ290byBvdXQ7CiAKLQlzYnAyX3NlbmRfb3JiKCZvcmItPmJhc2UsIGx1LCBsdS0+dGd0LT5ub2RlX2lkLCBsdS0+Z2VuZXJhdGlvbiwKKwlzYnAyX3NlbmRfb3JiKCZvcmItPmJhc2UsIGx1LCBsdS0+dGd0LT5ub2RlX2lkLCBnZW5lcmF0aW9uLAogCQkgICAgICBsdS0+Y29tbWFuZF9ibG9ja19hZ2VudF9hZGRyZXNzICsgU0JQMl9PUkJfUE9JTlRFUik7CiAJcmV0dmFsID0gMDsKICBvdXQ6CkBAIC0xNTY0LDYgKzE1MzQsOCBAQAogCWlmIChsdS0+dGd0LT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF8xMjhLX01BWF9UUkFOUykKIAkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDEyOCAqIDEwMjQgLyA1MTIpOwogCisJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgU0JQMl9NQVhfU0VHX1NJWkUpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uYwppbmRleCBlNWQxYTBiLi4wMjJhYzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKICAqLwogdm9pZAogZndfc2VuZF9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnQsCi0JCWludCB0Y29kZSwgaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCisJCWludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAogCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAogCQl2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLAogCQlmd190cmFuc2FjdGlvbl9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19kYXRhKQpAQCAtMjc5LDEzICsyNzksMTQgQEAKIAljYXJkLT5jdXJyZW50X3RsYWJlbCA9IChjYXJkLT5jdXJyZW50X3RsYWJlbCArIDEpICYgMHgxZjsKIAljYXJkLT50bGFiZWxfbWFzayB8PSAoMSA8PCB0bGFiZWwpOwogCi0JdC0+bm9kZV9pZCA9IG5vZGVfaWQ7CisJdC0+bm9kZV9pZCA9IGRlc3RpbmF0aW9uX2lkOwogCXQtPnRsYWJlbCA9IHRsYWJlbDsKIAl0LT5jYWxsYmFjayA9IGNhbGxiYWNrOwogCXQtPmNhbGxiYWNrX2RhdGEgPSBjYWxsYmFja19kYXRhOwogCi0JZndfZmlsbF9yZXF1ZXN0KCZ0LT5wYWNrZXQsIHRjb2RlLCB0LT50bGFiZWwsIG5vZGVfaWQsIGNhcmQtPm5vZGVfaWQsCi0JCQlnZW5lcmF0aW9uLCBzcGVlZCwgb2Zmc2V0LCBwYXlsb2FkLCBsZW5ndGgpOworCWZ3X2ZpbGxfcmVxdWVzdCgmdC0+cGFja2V0LCB0Y29kZSwgdC0+dGxhYmVsLAorCQkJZGVzdGluYXRpb25faWQsIGNhcmQtPm5vZGVfaWQsIGdlbmVyYXRpb24sCisJCQlzcGVlZCwgb2Zmc2V0LCBwYXlsb2FkLCBsZW5ndGgpOwogCXQtPnBhY2tldC5jYWxsYmFjayA9IHRyYW5zbWl0X2NvbXBsZXRlX2NhbGxiYWNrOwogCiAJbGlzdF9hZGRfdGFpbCgmdC0+bGluaywgJmNhcmQtPnRyYW5zYWN0aW9uX2xpc3QpOwpAQCAtMjk2LDYgKzI5Nyw0NSBAQAogfQogRVhQT1JUX1NZTUJPTChmd19zZW5kX3JlcXVlc3QpOwogCitzdHJ1Y3QgdHJhbnNhY3Rpb25fY2FsbGJhY2tfZGF0YSB7CisJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKKwl2b2lkICpwYXlsb2FkOworCWludCByY29kZTsKK307CisKK3N0YXRpYyB2b2lkIHRyYW5zYWN0aW9uX2NhbGxiYWNrKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUsCisJCQkJIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHRyYW5zYWN0aW9uX2NhbGxiYWNrX2RhdGEgKmQgPSBkYXRhOworCisJaWYgKHJjb2RlID09IFJDT0RFX0NPTVBMRVRFKQorCQltZW1jcHkoZC0+cGF5bG9hZCwgcGF5bG9hZCwgbGVuZ3RoKTsKKwlkLT5yY29kZSA9IHJjb2RlOworCWNvbXBsZXRlKCZkLT5kb25lKTsKK30KKworLyoqCisgKiBmd19ydW5fdHJhbnNhY3Rpb24gLSBzZW5kIHJlcXVlc3QgYW5kIHNsZWVwIHVudGlsIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZAorICoKKyAqIFJldHVybnMgdGhlIFJDT0RFLgorICovCitpbnQgZndfcnVuX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbl9pZCwKKwkJaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKKwkJdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgdHJhbnNhY3Rpb25fY2FsbGJhY2tfZGF0YSBkOworCXN0cnVjdCBmd190cmFuc2FjdGlvbiB0OworCisJaW5pdF9jb21wbGV0aW9uKCZkLmRvbmUpOworCWQucGF5bG9hZCA9IGRhdGE7CisJZndfc2VuZF9yZXF1ZXN0KGNhcmQsICZ0LCB0Y29kZSwgZGVzdGluYXRpb25faWQsIGdlbmVyYXRpb24sIHNwZWVkLAorCQkJb2Zmc2V0LCBkYXRhLCBsZW5ndGgsIHRyYW5zYWN0aW9uX2NhbGxiYWNrLCAmZCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmZC5kb25lKTsKKworCXJldHVybiBkLnJjb2RlOworfQorRVhQT1JUX1NZTUJPTChmd19ydW5fdHJhbnNhY3Rpb24pOworCiBzdGF0aWMgREVGSU5FX01VVEVYKHBoeV9jb25maWdfbXV0ZXgpOwogc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihwaHlfY29uZmlnX2RvbmUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmggYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmgKaW5kZXggMmFlMWIwZC4uMDI3ZjU4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5oCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uaApAQCAtNDI2LDExICs0MjYsMTQgQEAKIAogdm9pZAogZndfc2VuZF9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnQsCi0JCWludCB0Y29kZSwgaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCi0JCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCi0JCXZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgsCisJCWludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAorCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoLAogCQlmd190cmFuc2FjdGlvbl9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19kYXRhKTsKIAoraW50IGZ3X3J1bl90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb25faWQsCisJCSAgICAgICBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAorCQkgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCk7CisKIGludCBmd19jYW5jZWxfdHJhbnNhY3Rpb24oc3RydWN0IGZ3X2NhcmQgKmNhcmQsCiAJCQkgIHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKaW5kZXggNDU1NTc1Yi4uM2U1MjZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwpAQCAtMTUsNiArMTUsMTEgQEAKICAqLwogc3RhdGljIGNoYXIgZG1pX2VtcHR5X3N0cmluZ1tdID0gIiAgICAgICAgIjsKIAorLyoKKyAqIENhdGNoIHRvbyBlYXJseSBjYWxscyB0byBkbWlfY2hlY2tfc3lzdGVtKCk6CisgKi8KK3N0YXRpYyBpbnQgZG1pX2luaXRpYWxpemVkOworCiBzdGF0aWMgY29uc3QgY2hhciAqIF9faW5pdCBkbWlfc3RyaW5nX25vc2F2ZShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0sIHU4IHMpCiB7CiAJY29uc3QgdTggKmJwID0gKCh1OCAqKSBkbSkgKyBkbS0+bGVuZ3RoOwpAQCAtMzY2LDcgKzM3MSw3IEBACiAKIAlpZiAoZWZpX2VuYWJsZWQpIHsKIAkJaWYgKGVmaS5zbWJpb3MgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikKLQkJCWdvdG8gb3V0OworCQkJZ290byBlcnJvcjsKIAogCQkvKiBUaGlzIGlzIGNhbGxlZCBhcyBhIGNvcmVfaW5pdGNhbGwoKSBiZWNhdXNlIGl0IGlzbid0CiAJCSAqIG5lZWRlZCBkdXJpbmcgZWFybHkgYm9vdC4gIFRoaXMgYWxzbyBtZWFucyB3ZSBjYW4KQEAgLTM3NCwxMyArMzc5LDEzIEBACiAJCSAqLwogCQlwID0gZG1pX2lvcmVtYXAoZWZpLnNtYmlvcywgMzIpOwogCQlpZiAocCA9PSBOVUxMKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIGVycm9yOwogCiAJCXJjID0gZG1pX3ByZXNlbnQocCArIDB4MTApOyAvKiBvZmZzZXQgb2YgX0RNSV8gc3RyaW5nICovCiAJCWRtaV9pb3VubWFwKHAsIDMyKTsKIAkJaWYgKCFyYykgewogCQkJZG1pX2F2YWlsYWJsZSA9IDE7Ci0JCQlyZXR1cm47CisJCQlnb3RvIG91dDsKIAkJfQogCX0KIAllbHNlIHsKQEAgLTM5MSwxOSArMzk2LDIyIEBACiAJCSAqLwogCQlwID0gZG1pX2lvcmVtYXAoMHhGMDAwMCwgMHgxMDAwMCk7CiAJCWlmIChwID09IE5VTEwpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gZXJyb3I7CiAKIAkJZm9yIChxID0gcDsgcSA8IHAgKyAweDEwMDAwOyBxICs9IDE2KSB7CiAJCQlyYyA9IGRtaV9wcmVzZW50KHEpOwogCQkJaWYgKCFyYykgewogCQkJCWRtaV9hdmFpbGFibGUgPSAxOwogCQkJCWRtaV9pb3VubWFwKHAsIDB4MTAwMDApOwotCQkJCXJldHVybjsKKwkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQogCQlkbWlfaW91bm1hcChwLCAweDEwMDAwKTsKIAl9Ci0gb3V0OglwcmludGsoS0VSTl9JTkZPICJETUkgbm90IHByZXNlbnQgb3IgaW52YWxpZC5cbiIpOworIGVycm9yOgorCXByaW50ayhLRVJOX0lORk8gIkRNSSBub3QgcHJlc2VudCBvciBpbnZhbGlkLlxuIik7Cisgb3V0OgorCWRtaV9pbml0aWFsaXplZCA9IDE7CiB9CiAKIC8qKgpAQCAtNDI0LDYgKzQzMiw4IEBACiAJaW50IGksIGNvdW50ID0gMDsKIAljb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCA9IGxpc3Q7CiAKKwlXQVJOKCFkbWlfaW5pdGlhbGl6ZWQsIEtFUk5fRVJSICJkbWkgY2hlY2s6IG5vdCBpbml0aWFsaXplZCB5ZXQuXG4iKTsKKwogCXdoaWxlIChkLT5pZGVudCkgewogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkLT5tYXRjaGVzKTsgaSsrKSB7CiAJCQlpbnQgcyA9IGQtPm1hdGNoZXNbaV0uc2xvdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKaW5kZXggYjkxZWY2My4uNDM1MzQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKQEAgLTMzNCw5ICszMzQsOSBAQAogLyoKICAqICBSb3V0aW5lcyBmb3IgcGFyc2luZyB0aGUgaUJGVCBkYXRhIHRvIGJlIGh1bWFuIHJlYWRhYmxlLgogICovCi1zc2l6ZV90IGliZnRfYXR0cl9zaG93X2luaXRpYXRvcihzdHJ1Y3QgaWJmdF9rb2JqZWN0ICplbnRyeSwKLQkJCQkgIHN0cnVjdCBpYmZ0X2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGliZnRfYXR0cl9zaG93X2luaXRpYXRvcihzdHJ1Y3QgaWJmdF9rb2JqZWN0ICplbnRyeSwKKwkJCQkJc3RydWN0IGliZnRfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCiB7CiAJc3RydWN0IGliZnRfaW5pdGlhdG9yICppbml0aWF0b3IgPSBlbnRyeS0+aW5pdGlhdG9yOwogCXZvaWQgKmliZnRfbG9jID0gZW50cnktPmhlYWRlcjsKQEAgLTM3Niw5ICszNzYsOSBAQAogCXJldHVybiBzdHIgLSBidWY7CiB9CiAKLXNzaXplX3QgaWJmdF9hdHRyX3Nob3dfbmljKHN0cnVjdCBpYmZ0X2tvYmplY3QgKmVudHJ5LAotCQkJICAgIHN0cnVjdCBpYmZ0X2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBpYmZ0X2F0dHJfc2hvd19uaWMoc3RydWN0IGliZnRfa29iamVjdCAqZW50cnksCisJCQkJICBzdHJ1Y3QgaWJmdF9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGliZnRfbmljICpuaWMgPSBlbnRyeS0+bmljOwogCXZvaWQgKmliZnRfbG9jID0gZW50cnktPmhlYWRlcjsKQEAgLTQ0MCw5ICs0NDAsOSBAQAogCXJldHVybiBzdHIgLSBidWY7CiB9OwogCi1zc2l6ZV90IGliZnRfYXR0cl9zaG93X3RhcmdldChzdHJ1Y3QgaWJmdF9rb2JqZWN0ICplbnRyeSwKLQkJCSAgICAgICBzdHJ1Y3QgaWJmdF9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICAgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgaWJmdF9hdHRyX3Nob3dfdGFyZ2V0KHN0cnVjdCBpYmZ0X2tvYmplY3QgKmVudHJ5LAorCQkJCSAgICAgc3RydWN0IGliZnRfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY2hhciAqYnVmKQogewogCXN0cnVjdCBpYmZ0X3RndCAqdGd0ID0gZW50cnktPnRndDsKIAl2b2lkICppYmZ0X2xvYyA9IGVudHJ5LT5oZWFkZXI7CkBAIC03MzIsNyArNzMyLDYgQEAKIAogCWF0dHItPmF0dHIubmFtZSA9IG5hbWU7CiAJYXR0ci0+YXR0ci5tb2RlID0gU19JUlVTUjsKLQlhdHRyLT5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlhdHRyLT5oZHIgPSBoZHI7CiAJYXR0ci0+c2hvdyA9IHNob3c7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwppbmRleCA4ZDI5NDA1Li5mYWExY2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKQEAgLTY3LDE3ICs2NywyOCBAQAogICogd2hlbiBzZXR0aW5nIGRpcmVjdGlvbiwgYW5kIG90aGVyd2lzZSBpbGxlZ2FsLiAgVW50aWwgYm9hcmQgc2V0dXAgY29kZQogICogYW5kIGRyaXZlcnMgdXNlIGV4cGxpY2l0IHJlcXVlc3RzIGV2ZXJ5d2hlcmUgKHdoaWNoIHdvbid0IGhhcHBlbiB3aGVuCiAgKiB0aG9zZSBjYWxscyBoYXZlIG5vIHRlZXRoKSB3ZSBjYW4ndCBhdm9pZCBhdXRvcmVxdWVzdGluZy4gIFRoaXMgbmFnCi0gKiBtZXNzYWdlIHNob3VsZCBtb3RpdmF0ZSBzd2l0Y2hpbmcgdG8gZXhwbGljaXQgcmVxdWVzdHMuLi4KKyAqIG1lc3NhZ2Ugc2hvdWxkIG1vdGl2YXRlIHN3aXRjaGluZyB0byBleHBsaWNpdCByZXF1ZXN0cy4uLiBzbyBzaG91bGQKKyAqIHRoZSB3ZWFrZXIgY2xlYW51cCBhZnRlciBmYXVsdHMsIGNvbXBhcmVkIHRvIGdwaW9fcmVxdWVzdCgpLgogICovCi1zdGF0aWMgdm9pZCBncGlvX2Vuc3VyZV9yZXF1ZXN0ZWQoc3RydWN0IGdwaW9fZGVzYyAqZGVzYykKK3N0YXRpYyBpbnQgZ3Bpb19lbnN1cmVfcmVxdWVzdGVkKHN0cnVjdCBncGlvX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIG9mZnNldCkKIHsKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChGTEFHX1JFUVVFU1RFRCwgJmRlc2MtPmZsYWdzKSA9PSAwKSB7Ci0JCXByX3dhcm5pbmcoIkdQSU8tJWQgYXV0b3JlcXVlc3RlZFxuIiwgKGludCkoZGVzYyAtIGdwaW9fZGVzYykpOworCQlzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwID0gZGVzYy0+Y2hpcDsKKwkJaW50IGdwaW8gPSBjaGlwLT5iYXNlICsgb2Zmc2V0OworCisJCWlmICghdHJ5X21vZHVsZV9nZXQoY2hpcC0+b3duZXIpKSB7CisJCQlwcl9lcnIoIkdQSU8tJWQ6IG1vZHVsZSBjYW4ndCBiZSBnb3R0ZW4gXG4iLCBncGlvKTsKKwkJCWNsZWFyX2JpdChGTEFHX1JFUVVFU1RFRCwgJmRlc2MtPmZsYWdzKTsKKwkJCS8qIGxvc2UgKi8KKwkJCXJldHVybiAtRUlPOworCQl9CisJCXByX3dhcm5pbmcoIkdQSU8tJWQgYXV0b3JlcXVlc3RlZFxuIiwgZ3Bpbyk7CiAJCWRlc2Nfc2V0X2xhYmVsKGRlc2MsICJbYXV0b10iKTsKLQkJaWYgKCF0cnlfbW9kdWxlX2dldChkZXNjLT5jaGlwLT5vd25lcikpCi0JCQlwcl9lcnIoIkdQSU8tJWQ6IG1vZHVsZSBjYW4ndCBiZSBnb3R0ZW4gXG4iLAotCQkJCQkoaW50KShkZXNjIC0gZ3Bpb19kZXNjKSk7CisJCS8qIGNhbGxlciBtdXN0IGNoaXAtPnJlcXVlc3QoKSB3L28gc3BpbmxvY2sgKi8KKwkJaWYgKGNoaXAtPnJlcXVlc3QpCisJCQlyZXR1cm4gMTsKIAl9CisJcmV0dXJuIDA7CiB9CiAKIC8qIGNhbGxlciBob2xkcyBncGlvX2xvY2sgKk9SKiBncGlvIGlzIG1hcmtlZCBhcyByZXF1ZXN0ZWQgKi8KQEAgLTIzNyw3ICsyNDgsNyBAQAogCWlmICghdGVzdF9iaXQoRkxBR19FWFBPUlQsICZkZXNjLT5mbGFncykpCiAJCXN0YXR1cyA9IC1FSU87CiAJZWxzZQotCQlzdGF0dXMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBncGlvX2dldF92YWx1ZV9jYW5zbGVlcChncGlvKSk7CisJCXN0YXR1cyA9IHNwcmludGYoYnVmLCAiJWRcbiIsICEhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAoZ3BpbykpOwogCiAJbXV0ZXhfdW5sb2NrKCZzeXNmc19sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNzUyLDYgKzc2Myw3IEBACiBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQogewogCXN0cnVjdCBncGlvX2Rlc2MJKmRlc2M7CisJc3RydWN0IGdwaW9fY2hpcAkqY2hpcDsKIAlpbnQJCQlzdGF0dXMgPSAtRUlOVkFMOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCkBAIC03NjAsMTQgKzc3MiwxNSBAQAogCWlmICghZ3Bpb19pc192YWxpZChncGlvKSkKIAkJZ290byBkb25lOwogCWRlc2MgPSAmZ3Bpb19kZXNjW2dwaW9dOwotCWlmIChkZXNjLT5jaGlwID09IE5VTEwpCisJY2hpcCA9IGRlc2MtPmNoaXA7CisJaWYgKGNoaXAgPT0gTlVMTCkKIAkJZ290byBkb25lOwogCi0JaWYgKCF0cnlfbW9kdWxlX2dldChkZXNjLT5jaGlwLT5vd25lcikpCisJaWYgKCF0cnlfbW9kdWxlX2dldChjaGlwLT5vd25lcikpCiAJCWdvdG8gZG9uZTsKIAogCS8qIE5PVEU6ICBncGlvX3JlcXVlc3QoKSBjYW4gYmUgY2FsbGVkIGluIGVhcmx5IGJvb3QsCi0JICogYmVmb3JlIElSUXMgYXJlIGVuYWJsZWQuCisJICogYmVmb3JlIElSUXMgYXJlIGVuYWJsZWQsIGZvciBub24tc2xlZXBpbmcgKFNPQykgR1BJT3MuCiAJICovCiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChGTEFHX1JFUVVFU1RFRCwgJmRlc2MtPmZsYWdzKSA9PSAwKSB7CkBAIC03NzUsNyArNzg4LDIwIEBACiAJCXN0YXR1cyA9IDA7CiAJfSBlbHNlIHsKIAkJc3RhdHVzID0gLUVCVVNZOwotCQltb2R1bGVfcHV0KGRlc2MtPmNoaXAtPm93bmVyKTsKKwkJbW9kdWxlX3B1dChjaGlwLT5vd25lcik7CisJfQorCisJaWYgKGNoaXAtPnJlcXVlc3QpIHsKKwkJLyogY2hpcC0+cmVxdWVzdCBtYXkgc2xlZXAgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJCXN0YXR1cyA9IGNoaXAtPnJlcXVlc3QoY2hpcCwgZ3BpbyAtIGNoaXAtPmJhc2UpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRlc2Nfc2V0X2xhYmVsKGRlc2MsIE5VTEwpOworCQkJbW9kdWxlX3B1dChjaGlwLT5vd25lcik7CisJCQljbGVhcl9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncyk7CisJCX0KIAl9CiAKIGRvbmU6CkBAIC03OTEsNiArODE3LDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlzdHJ1Y3QgZ3Bpb19kZXNjCSpkZXNjOworCXN0cnVjdCBncGlvX2NoaXAJKmNoaXA7CisKKwltaWdodF9zbGVlcCgpOwogCiAJaWYgKCFncGlvX2lzX3ZhbGlkKGdwaW8pKSB7CiAJCVdBUk5fT04oZXh0cmFfY2hlY2tzKTsKQEAgLTgwMiw5ICs4MzEsMTcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAKIAlkZXNjID0gJmdwaW9fZGVzY1tncGlvXTsKLQlpZiAoZGVzYy0+Y2hpcCAmJiB0ZXN0X2FuZF9jbGVhcl9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncykpIHsKKwljaGlwID0gZGVzYy0+Y2hpcDsKKwlpZiAoY2hpcCAmJiB0ZXN0X2JpdChGTEFHX1JFUVVFU1RFRCwgJmRlc2MtPmZsYWdzKSkgeworCQlpZiAoY2hpcC0+ZnJlZSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJCQltaWdodF9zbGVlcF9pZihleHRyYV9jaGVja3MgJiYgY2hpcC0+Y2FuX3NsZWVwKTsKKwkJCWNoaXAtPmZyZWUoY2hpcCwgZ3BpbyAtIGNoaXAtPmJhc2UpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCQl9CiAJCWRlc2Nfc2V0X2xhYmVsKGRlc2MsIE5VTEwpOwogCQltb2R1bGVfcHV0KGRlc2MtPmNoaXAtPm93bmVyKTsKKwkJY2xlYXJfYml0KEZMQUdfUkVRVUVTVEVELCAmZGVzYy0+ZmxhZ3MpOwogCX0gZWxzZQogCQlXQVJOX09OKGV4dHJhX2NoZWNrcyk7CiAKQEAgLTg2OSw3ICs5MDYsOSBAQAogCWdwaW8gLT0gY2hpcC0+YmFzZTsKIAlpZiAoZ3BpbyA+PSBjaGlwLT5uZ3BpbykKIAkJZ290byBmYWlsOwotCWdwaW9fZW5zdXJlX3JlcXVlc3RlZChkZXNjKTsKKwlzdGF0dXMgPSBncGlvX2Vuc3VyZV9yZXF1ZXN0ZWQoZGVzYywgZ3Bpbyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKIAogCS8qIG5vdyB3ZSBrbm93IHRoZSBncGlvIGlzIHZhbGlkIGFuZCBjaGlwIHdvbid0IHZhbmlzaCAqLwogCkBAIC04NzcsOSArOTE2LDIyIEBACiAKIAltaWdodF9zbGVlcF9pZihleHRyYV9jaGVja3MgJiYgY2hpcC0+Y2FuX3NsZWVwKTsKIAorCWlmIChzdGF0dXMpIHsKKwkJc3RhdHVzID0gY2hpcC0+cmVxdWVzdChjaGlwLCBncGlvKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXByX2RlYnVnKCJHUElPLSVkOiBjaGlwIHJlcXVlc3QgZmFpbCwgJWRcbiIsCisJCQkJY2hpcC0+YmFzZSArIGdwaW8sIHN0YXR1cyk7CisJCQkvKiBhbmQgaXQncyBub3QgYXZhaWxhYmxlIHRvIGFueW9uZSBlbHNlIC4uLgorCQkJICogZ3Bpb19yZXF1ZXN0KCkgaXMgdGhlIGZ1bGx5IGNsZWFuIHNvbHV0aW9uLgorCQkJICovCisJCQlnb3RvIGxvc2U7CisJCX0KKwl9CisKIAlzdGF0dXMgPSBjaGlwLT5kaXJlY3Rpb25faW5wdXQoY2hpcCwgZ3Bpbyk7CiAJaWYgKHN0YXR1cyA9PSAwKQogCQljbGVhcl9iaXQoRkxBR19JU19PVVQsICZkZXNjLT5mbGFncyk7Citsb3NlOgogCXJldHVybiBzdGF0dXM7CiBmYWlsOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwpAQCAtOTA3LDcgKzk1OSw5IEBACiAJZ3BpbyAtPSBjaGlwLT5iYXNlOwogCWlmIChncGlvID49IGNoaXAtPm5ncGlvKQogCQlnb3RvIGZhaWw7Ci0JZ3Bpb19lbnN1cmVfcmVxdWVzdGVkKGRlc2MpOworCXN0YXR1cyA9IGdwaW9fZW5zdXJlX3JlcXVlc3RlZChkZXNjLCBncGlvKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOwogCiAJLyogbm93IHdlIGtub3cgdGhlIGdwaW8gaXMgdmFsaWQgYW5kIGNoaXAgd29uJ3QgdmFuaXNoICovCiAKQEAgLTkxNSw5ICs5NjksMjIgQEAKIAogCW1pZ2h0X3NsZWVwX2lmKGV4dHJhX2NoZWNrcyAmJiBjaGlwLT5jYW5fc2xlZXApOwogCisJaWYgKHN0YXR1cykgeworCQlzdGF0dXMgPSBjaGlwLT5yZXF1ZXN0KGNoaXAsIGdwaW8pOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJcHJfZGVidWcoIkdQSU8tJWQ6IGNoaXAgcmVxdWVzdCBmYWlsLCAlZFxuIiwKKwkJCQljaGlwLT5iYXNlICsgZ3Bpbywgc3RhdHVzKTsKKwkJCS8qIGFuZCBpdCdzIG5vdCBhdmFpbGFibGUgdG8gYW55b25lIGVsc2UgLi4uCisJCQkgKiBncGlvX3JlcXVlc3QoKSBpcyB0aGUgZnVsbHkgY2xlYW4gc29sdXRpb24uCisJCQkgKi8KKwkJCWdvdG8gbG9zZTsKKwkJfQorCX0KKwogCXN0YXR1cyA9IGNoaXAtPmRpcmVjdGlvbl9vdXRwdXQoY2hpcCwgZ3BpbywgdmFsdWUpOwogCWlmIChzdGF0dXMgPT0gMCkKIAkJc2V0X2JpdChGTEFHX0lTX09VVCwgJmRlc2MtPmZsYWdzKTsKK2xvc2U6CiAJcmV0dXJuIHN0YXR1czsKIGZhaWw6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CkBAIC0xMDA4LDYgKzEwNzUsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fZ3Bpb19jYW5zbGVlcCk7CiAKKy8qKgorICogX19ncGlvX3RvX2lycSgpIC0gcmV0dXJuIHRoZSBJUlEgY29ycmVzcG9uZGluZyB0byBhIEdQSU8KKyAqIEBncGlvOiBncGlvIHdob3NlIElSUSB3aWxsIGJlIHJldHVybmVkIChhbHJlYWR5IHJlcXVlc3RlZCkKKyAqIENvbnRleHQ6IGFueQorICoKKyAqIFRoaXMgaXMgdXNlZCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRvIGltcGxlbWVudCBncGlvX3RvX2lycSgpLgorICogSXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBJUlEgc2lnbmFsZWQgYnkgdGhpcyAoaW5wdXQpIEdQSU8sCisgKiBvciBhIG5lZ2F0aXZlIGVycm5vLgorICovCitpbnQgX19ncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQoreworCXN0cnVjdCBncGlvX2NoaXAJKmNoaXA7CisKKwljaGlwID0gZ3Bpb190b19jaGlwKGdwaW8pOworCXJldHVybiBjaGlwLT50b19pcnEgPyBjaGlwLT50b19pcnEoY2hpcCwgZ3BpbyAtIGNoaXAtPmJhc2UpIDogLUVOWElPOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19ncGlvX3RvX2lycSk7CisKIAogCiAvKiBUaGVyZSdzIG5vIHZhbHVlIGluIG1ha2luZyBpdCBlYXN5IHRvIGlubGluZSBHUElPIGNhbGxzIHRoYXQgbWF5IHNsZWVwLgpAQCAtMTAyMCw3ICsxMTA1LDcgQEAKIAogCW1pZ2h0X3NsZWVwX2lmKGV4dHJhX2NoZWNrcyk7CiAJY2hpcCA9IGdwaW9fdG9fY2hpcChncGlvKTsKLQlyZXR1cm4gY2hpcC0+Z2V0KGNoaXAsIGdwaW8gLSBjaGlwLT5iYXNlKTsKKwlyZXR1cm4gY2hpcC0+Z2V0ID8gY2hpcC0+Z2V0KGNoaXAsIGdwaW8gLSBjaGlwLT5iYXNlKSA6IDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChncGlvX2dldF92YWx1ZV9jYW5zbGVlcCk7CiAKQEAgLTEwNTgsNyArMTE0Myw3IEBACiAKIAkJaWYgKCFpc19vdXQpIHsKIAkJCWludAkJaXJxID0gZ3Bpb190b19pcnEoZ3Bpbyk7Ci0JCQlzdHJ1Y3QgaXJxX2Rlc2MJKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwkJCXN0cnVjdCBpcnFfZGVzYwkqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAkJCS8qIFRoaXMgcmFjZXMgd2l0aCByZXF1ZXN0X2lycSgpLCBzZXRfaXJxX3R5cGUoKSwKIAkJCSAqIGFuZCBzZXRfaXJxX3dha2UoKSAuLi4gYnV0IHRob3NlIGFyZSAicmFyZSIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vbWF4NzMwMS5jIGIvZHJpdmVycy9ncGlvL21heDczMDEuYwppbmRleCAzOWM3OTVhLi44YjI0ZDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vbWF4NzMwMS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9tYXg3MzAxLmMKQEAgLTI1NSwxMCArMjU1LDYgQEAKIAl0cy0+Y2hpcC5kZXYgPSAmc3BpLT5kZXY7CiAJdHMtPmNoaXAub3duZXIgPSBUSElTX01PRFVMRTsKIAotCXJldCA9IGdwaW9jaGlwX2FkZCgmdHMtPmNoaXApOwotCWlmIChyZXQpCi0JCWdvdG8gZXhpdF9kZXN0cm95OwotCiAJLyoKIAkgKiB0cmlzdGF0ZSBhbGwgcGlucyBpbiBoYXJkd2FyZSBhbmQgY2FjaGUgdGhlCiAJICogcmVnaXN0ZXIgdmFsdWVzIGZvciBsYXRlciB1c2UuCkBAIC0yNjksMTcgKzI2NSwxOSBAQAogCQltYXg3MzAxX3dyaXRlKHNwaSwgMHgwOCArIGksIDB4QUEpOwogCQl0cy0+cG9ydF9jb25maWdbaV0gPSAweEFBOwogCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7Ci0JCQlpbnQgaWR4ID0gdHMtPmNoaXAuYmFzZSArIChpIC0gMSkgKiA0ICsgajsKLQkJCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KGlkeCk7CisJCQlpbnQgb2Zmc2V0ID0gKGkgLSAxKSAqIDQgKyBqOworCQkJcmV0ID0gbWF4NzMwMV9kaXJlY3Rpb25faW5wdXQoJnRzLT5jaGlwLCBvZmZzZXQpOwogCQkJaWYgKHJldCkKLQkJCQlnb3RvIGV4aXRfcmVtb3ZlOwotCQkJZ3Bpb19mcmVlKGlkeCk7CisJCQkJZ290byBleGl0X2Rlc3Ryb3k7CiAJCX0KIAl9CisKKwlyZXQgPSBncGlvY2hpcF9hZGQoJnRzLT5jaGlwKTsKKwlpZiAocmV0KQorCQlnb3RvIGV4aXRfZGVzdHJveTsKKwogCXJldHVybiByZXQ7CiAKLWV4aXRfcmVtb3ZlOgotCWdwaW9jaGlwX3JlbW92ZSgmdHMtPmNoaXApOwogZXhpdF9kZXN0cm95OgogCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIE5VTEwpOwogCW11dGV4X2Rlc3Ryb3koJnRzLT5sb2NrKTsKQEAgLTMyNSwxMyArMzIzLDE1IEBACiB7CiAJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJm1heDczMDFfZHJpdmVyKTsKIH0KKy8qIHJlZ2lzdGVyIGFmdGVyIHNwaSBwb3N0Y29yZSBpbml0Y2FsbCBhbmQgYmVmb3JlCisgKiBzdWJzeXMgaW5pdGNhbGxzIHRoYXQgbWF5IHJlbHkgb24gdGhlc2UgR1BJT3MKKyAqLworc3Vic3lzX2luaXRjYWxsKG1heDczMDFfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYXg3MzAxX2V4aXQodm9pZCkKIHsKIAlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJm1heDczMDFfZHJpdmVyKTsKIH0KLQotbW9kdWxlX2luaXQobWF4NzMwMV9pbml0KTsKIG1vZHVsZV9leGl0KG1heDczMDFfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIkp1ZXJnZW4gQmVpc2VydCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL21heDczMnguYyBiL2RyaXZlcnMvZ3Bpby9tYXg3MzJ4LmMKaW5kZXggYjUxYzgxMy4uNTVhZTlhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL21heDczMnguYworKysgYi9kcml2ZXJzL2dwaW8vbWF4NzMyeC5jCkBAIC0zNzIsNyArMzcyLDEwIEBACiB7CiAJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZtYXg3MzJ4X2RyaXZlcik7CiB9Ci1tb2R1bGVfaW5pdChtYXg3MzJ4X2luaXQpOworLyogcmVnaXN0ZXIgYWZ0ZXIgaTJjIHBvc3Rjb3JlIGluaXRjYWxsIGFuZCBiZWZvcmUKKyAqIHN1YnN5cyBpbml0Y2FsbHMgdGhhdCBtYXkgcmVseSBvbiB0aGVzZSBHUElPcworICovCitzdWJzeXNfaW5pdGNhbGwobWF4NzMyeF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IG1heDczMnhfZXhpdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL21jcDIzczA4LmMgYi9kcml2ZXJzL2dwaW8vbWNwMjNzMDguYwppbmRleCA4YTFiNDA1Li44OWMxZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vbWNwMjNzMDguYworKysgYi9kcml2ZXJzL2dwaW8vbWNwMjNzMDguYwpAQCAtNDE5LDcgKzQxOSwxMCBAQAogewogCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZtY3AyM3MwOF9kcml2ZXIpOwogfQotbW9kdWxlX2luaXQobWNwMjNzMDhfaW5pdCk7CisvKiByZWdpc3RlciBhZnRlciBzcGkgcG9zdGNvcmUgaW5pdGNhbGwgYW5kIGJlZm9yZQorICogc3Vic3lzIGluaXRjYWxscyB0aGF0IG1heSByZWx5IG9uIHRoZXNlIEdQSU9zCisgKi8KK3N1YnN5c19pbml0Y2FsbChtY3AyM3MwOF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IG1jcDIzczA4X2V4aXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMgYi9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jCmluZGV4IGNjODQ2ODYuLjljZWViODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKKysrIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwpAQCAtMjg5LDcgKzI4OSwxMCBAQAogewogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmcGNhOTUzeF9kcml2ZXIpOwogfQotbW9kdWxlX2luaXQocGNhOTUzeF9pbml0KTsKKy8qIHJlZ2lzdGVyIGFmdGVyIGkyYyBwb3N0Y29yZSBpbml0Y2FsbCBhbmQgYmVmb3JlCisgKiBzdWJzeXMgaW5pdGNhbGxzIHRoYXQgbWF5IHJlbHkgb24gdGhlc2UgR1BJT3MKKyAqLworc3Vic3lzX2luaXRjYWxsKHBjYTk1M3hfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwY2E5NTN4X2V4aXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9wY2Y4NTd4LmMgYi9kcml2ZXJzL2dwaW8vcGNmODU3eC5jCmluZGV4IGZjOWM2YWUuLjRiYzIwNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9wY2Y4NTd4LmMKKysrIGIvZHJpdmVycy9ncGlvL3BjZjg1N3guYwpAQCAtMzUxLDcgKzM1MSwxMCBAQAogewogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmcGNmODU3eF9kcml2ZXIpOwogfQotbW9kdWxlX2luaXQocGNmODU3eF9pbml0KTsKKy8qIHJlZ2lzdGVyIGFmdGVyIGkyYyBwb3N0Y29yZSBpbml0Y2FsbCBhbmQgYmVmb3JlCisgKiBzdWJzeXMgaW5pdGNhbGxzIHRoYXQgbWF5IHJlbHkgb24gdGhlc2UgR1BJT3MKKyAqLworc3Vic3lzX2luaXRjYWxsKHBjZjg1N3hfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwY2Y4NTd4X2V4aXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggNjEwZDZmZC4uOTA5NzUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTYsNyArNiw3IEBACiAjCiBtZW51Y29uZmlnIERSTQogCXRyaXN0YXRlICJEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZXIgKFhGcmVlODYgNC4xLjAgYW5kIGhpZ2hlciBEUkkgc3VwcG9ydCkiCi0JZGVwZW5kcyBvbiAoQUdQIHx8IEFHUD1uKSAmJiBQQ0kgJiYgIUVNVUxBVEVEX0NNUFhDSEcKKwlkZXBlbmRzIG9uIChBR1AgfHwgQUdQPW4pICYmIFBDSSAmJiAhRU1VTEFURURfQ01QWENIRyAmJiBTSE1FTQogCWhlbHAKIAkgIEtlcm5lbC1sZXZlbCBzdXBwb3J0IGZvciB0aGUgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAoRFJJKQogCSAgaW50cm9kdWNlZCBpbiBYRnJlZTg2IDQuMC4gSWYgeW91IHNheSBZIGhlcmUsIHlvdSBuZWVkIHRvIHNlbGVjdApAQCAtODcsNiArODcsNyBAQAogY29uZmlnIERSTV9TSVMKIAl0cmlzdGF0ZSAiU2lTIHZpZGVvIGNhcmRzIgogCWRlcGVuZHMgb24gRFJNICYmIEFHUAorCWRlcGVuZHMgb24gRkJfU0lTIHx8IEZCX1NJUz1uCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgU2lTIDYzMCBvciBjb21wYXRpYmxlIHZpZGVvCiAgICAgICAgICAgY2hpcHNldC4gSWYgTSBpcyBzZWxlY3RlZCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNpcy4gQUdQCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggZTlmOWE5Ny4uNzRkYTk5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtNCw4ICs0LDkgQEAKIAogY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KIAotZHJtLXkgICAgICAgOj0JZHJtX2F1dGgubyBkcm1fYnVmcy5vIGRybV9jb250ZXh0Lm8gZHJtX2RtYS5vIGRybV9kcmF3YWJsZS5vIFwKLQkJZHJtX2Rydi5vIGRybV9mb3BzLm8gZHJtX2lvY3RsLm8gZHJtX2lycS5vIFwKK2RybS15ICAgICAgIDo9CWRybV9hdXRoLm8gZHJtX2J1ZnMubyBkcm1fY2FjaGUubyBcCisJCWRybV9jb250ZXh0Lm8gZHJtX2RtYS5vIGRybV9kcmF3YWJsZS5vIFwKKwkJZHJtX2Rydi5vIGRybV9mb3BzLm8gZHJtX2dlbS5vIGRybV9pb2N0bC5vIGRybV9pcnEubyBcCiAJCWRybV9sb2NrLm8gZHJtX21lbW9yeS5vIGRybV9wcm9jLm8gZHJtX3N0dWIubyBkcm1fdm0ubyBcCiAJCWRybV9hZ3BzdXBwb3J0Lm8gZHJtX3NjYXR0ZXIubyBhdGlfcGNpZ2FydC5vIGRybV9wY2kubyBcCiAJCWRybV9zeXNmcy5vIGRybV9oYXNodGFiLm8gZHJtX3NtYW4ubyBkcm1fbW0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hZ3BzdXBwb3J0LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2FncHN1cHBvcnQuYwppbmRleCBhZWZhNWFjLi4zZDMzYjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2FncHN1cHBvcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2FncHN1cHBvcnQuYwpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9hZ3AuaD4KIAogI2lmIF9fT1NfSEFTX0FHUAogCkBAIC00NTIsNCArNDUzLDUzIEBACiAJcmV0dXJuIGFncF91bmJpbmRfbWVtb3J5KGhhbmRsZSk7CiB9CiAKLSNlbmRpZgkJCQkvKiBfX09TX0hBU19BR1AgKi8KKy8qKgorICogQmluZHMgYSBjb2xsZWN0aW9uIG9mIHBhZ2VzIGludG8gQUdQIG1lbW9yeSBhdCB0aGUgZ2l2ZW4gb2Zmc2V0LCByZXR1cm5pbmcKKyAqIHRoZSBBR1AgbWVtb3J5IHN0cnVjdHVyZSBjb250YWluaW5nIHRoZW0uCisgKgorICogTm8gcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIHBhZ2VzIGR1cmluZyB0aGlzIHRpbWUgLS0gaXQgaXMgdXAgdG8gdGhlCisgKiBjYWxsZXIgdG8gaGFuZGxlIHRoYXQuCisgKi8KK0RSTV9BR1BfTUVNICoKK2RybV9hZ3BfYmluZF9wYWdlcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAorCQkgICB1bnNpZ25lZCBsb25nIG51bV9wYWdlcywKKwkJICAgdWludDMyX3QgZ3R0X29mZnNldCwKKwkJICAgdTMyIHR5cGUpCit7CisJRFJNX0FHUF9NRU0gKm1lbTsKKwlpbnQgcmV0LCBpOworCisJRFJNX0RFQlVHKCJcbiIpOworCisJbWVtID0gZHJtX2FncF9hbGxvY2F0ZV9tZW1vcnkoZGV2LT5hZ3AtPmJyaWRnZSwgbnVtX3BhZ2VzLAorCQkJCSAgICAgIHR5cGUpOworCWlmIChtZW0gPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICVsZCBwYWdlc1xuIiwKKwkJCSAgbnVtX3BhZ2VzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKQorCQltZW0tPm1lbW9yeVtpXSA9IHBoeXNfdG9fZ2FydChwYWdlX3RvX3BoeXMocGFnZXNbaV0pKTsKKwltZW0tPnBhZ2VfY291bnQgPSBudW1fcGFnZXM7CisKKwltZW0tPmlzX2ZsdXNoZWQgPSB0cnVlOworCXJldCA9IGRybV9hZ3BfYmluZF9tZW1vcnkobWVtLCBndHRfb2Zmc2V0IC8gUEFHRV9TSVpFKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYmluZCBBR1AgbWVtb3J5OiAlZFxuIiwgcmV0KTsKKwkJYWdwX2ZyZWVfbWVtb3J5KG1lbSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBtZW07Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hZ3BfYmluZF9wYWdlcyk7CisKK3ZvaWQgZHJtX2FncF9jaGlwc2V0X2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJYWdwX2ZsdXNoX2NoaXBzZXQoZGV2LT5hZ3AtPmJyaWRnZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hZ3BfY2hpcHNldF9mbHVzaCk7CisKKyNlbmRpZiAvKiBfX09TX0hBU19BR1AgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2FjaGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTk5NGEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jYWNoZS5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUWC4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEF1dGhvcnM6IFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpCitzdGF0aWMgdm9pZAorZHJtX2NsZmx1c2hfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl1aW50OF90ICpwYWdlX3ZpcnR1YWw7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAodW5saWtlbHkocGFnZSA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJcGFnZV92aXJ0dWFsID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWZvciAoaSA9IDA7IGkgPCBQQUdFX1NJWkU7IGkgKz0gYm9vdF9jcHVfZGF0YS54ODZfY2xmbHVzaF9zaXplKQorCQljbGZsdXNoKHBhZ2VfdmlydHVhbCArIGkpOworCWt1bm1hcF9hdG9taWMocGFnZV92aXJ0dWFsLCBLTV9VU0VSMCk7Cit9CisjZW5kaWYKKwordm9pZAorZHJtX2NsZmx1c2hfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2VzW10sIHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzKQoreworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KQorCWlmIChjcHVfaGFzX2NsZmx1c2gpIHsKKwkJdW5zaWduZWQgbG9uZyBpOworCisJCW1iKCk7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7ICsraSkKKwkJCWRybV9jbGZsdXNoX3BhZ2UoKnBhZ2VzKyspOworCQltYigpOworCisJCXJldHVybjsKKwl9CisKKwl3YmludmQoKTsKKyNlbmRpZgorfQorRVhQT1JUX1NZTUJPTChkcm1fY2xmbHVzaF9wYWdlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwppbmRleCA0NTJjMmQ4Li45NmY0MTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKQEAgLTExNiw3ICsxMTYsMTMgQEAKIAogCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1dBSVRfVkJMQU5LLCBkcm1fd2FpdF92YmxhbmssIDApLAogCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERVNFVF9DVEwsIGRybV9tb2Rlc2V0X2N0bCwgMCksCisKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9VUERBVEVfRFJBVywgZHJtX3VwZGF0ZV9kcmF3YWJsZV9pbmZvLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAorCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VNX0NMT1NFLCBkcm1fZ2VtX2Nsb3NlX2lvY3RsLCAwKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9HRU1fRkxJTkssIGRybV9nZW1fZmxpbmtfaW9jdGwsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9HRU1fT1BFTiwgZHJtX2dlbV9vcGVuX2lvY3RsLCBEUk1fQVVUSCksCiB9OwogCiAjZGVmaW5lIERSTV9DT1JFX0lPQ1RMX0NPVU5UCUFSUkFZX1NJWkUoIGRybV9pb2N0bHMgKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYwppbmRleCA4NTFhNTNmLi4wZDQ2NjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJbWVtc2V0KHByaXYsIDAsIHNpemVvZigqcHJpdikpOwogCWZpbHAtPnByaXZhdGVfZGF0YSA9IHByaXY7CiAJcHJpdi0+ZmlscCA9IGZpbHA7Ci0JcHJpdi0+dWlkID0gY3VycmVudC0+ZXVpZDsKKwlwcml2LT51aWQgPSBjdXJyZW50X2V1aWQoKTsKIAlwcml2LT5waWQgPSB0YXNrX3BpZF9ucihjdXJyZW50KTsKIAlwcml2LT5taW5vciA9IGlkcl9maW5kKCZkcm1fbWlub3JzX2lkciwgbWlub3JfaWQpOwogCXByaXYtPmlvY3RsX2NvdW50ID0gMDsKQEAgLTI1Niw2ICsyNTYsOSBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmxoZWFkKTsKIAorCWlmIChkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkKKwkJZHJtX2dlbV9vcGVuKGRldiwgcHJpdik7CisKIAlpZiAoZGV2LT5kcml2ZXItPm9wZW4pIHsKIAkJcmV0ID0gZGV2LT5kcml2ZXItPm9wZW4oZGV2LCBwcml2KTsKIAkJaWYgKHJldCA8IDApCkBAIC00MDAsNiArNDAzLDkgQEAKIAkJZGV2LT5kcml2ZXItPnJlY2xhaW1fYnVmZmVycyhkZXYsIGZpbGVfcHJpdik7CiAJfQogCisJaWYgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKQorCQlkcm1fZ2VtX3JlbGVhc2UoZGV2LCBmaWxlX3ByaXYpOworCiAJZHJtX2Zhc3luYygtMSwgZmlscCwgMCk7CiAKIAltdXRleF9sb2NrKCZkZXYtPmN0eGxpc3RfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkMWFmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKQEAgLTAsMCArMSw0MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSAiZHJtUC5oIgorCisvKiogQGZpbGUgZHJtX2dlbS5jCisgKgorICogVGhpcyBmaWxlIHByb3ZpZGVzIHNvbWUgb2YgdGhlIGJhc2UgaW9jdGxzIGFuZCBsaWJyYXJ5IHJvdXRpbmVzIGZvcgorICogdGhlIGdyYXBoaWNzIG1lbW9yeSBtYW5hZ2VyIGltcGxlbWVudGVkIGJ5IGVhY2ggZGV2aWNlIGRyaXZlci4KKyAqCisgKiBCZWNhdXNlIHZhcmlvdXMgZGV2aWNlcyBoYXZlIGRpZmZlcmVudCByZXF1aXJlbWVudHMgaW4gdGVybXMgb2YKKyAqIHN5bmNocm9uaXphdGlvbiBhbmQgbWlncmF0aW9uIHN0cmF0ZWdpZXMsIGltcGxlbWVudGluZyB0aGF0IGlzIGxlZnQgdXAgdG8KKyAqIHRoZSBkcml2ZXIsIGFuZCBhbGwgdGhhdCB0aGUgZ2VuZXJhbCBBUEkgcHJvdmlkZXMgc2hvdWxkIGJlIGdlbmVyaWMgLS0KKyAqIGFsbG9jYXRpbmcgb2JqZWN0cywgcmVhZGluZy93cml0aW5nIGRhdGEgd2l0aCB0aGUgY3B1LCBmcmVlaW5nIG9iamVjdHMuCisgKiBFdmVuIHRoZXJlLCBwbGF0Zm9ybS1kZXBlbmRlbnQgb3B0aW1pemF0aW9ucyBmb3IgcmVhZGluZy93cml0aW5nIGRhdGEgd2l0aAorICogdGhlIENQVSBtZWFuIHdlJ2xsIGxpa2VseSBob29rIHRob3NlIG91dCB0byBkcml2ZXItc3BlY2lmaWMgY2FsbHMuICBIb3dldmVyLAorICogdGhlIERSSTIgaW1wbGVtZW50YXRpb24gd2FudHMgdG8gaGF2ZSBhdCBsZWFzdCBhbGxvY2F0ZS9tbWFwIGJlIGdlbmVyaWMuCisgKgorICogVGhlIGdvYWwgd2FzIHRvIGhhdmUgc3dhcC1iYWNrZWQgb2JqZWN0IGFsbG9jYXRpb24gbWFuYWdlZCB0aHJvdWdoCisgKiBzdHJ1Y3QgZmlsZS4gIEhvd2V2ZXIsIGZpbGUgZGVzY3JpcHRvcnMgYXMgaGFuZGxlcyB0byBhIHN0cnVjdCBmaWxlIGhhdmUKKyAqIHR3byBtYWpvciBmYWlsaW5nczoKKyAqIC0gUHJvY2VzcyBsaW1pdHMgcHJldmVudCBtb3JlIHRoYW4gMTAyNCBvciBzbyBiZWluZyB1c2VkIGF0IGEgdGltZSBieQorICogICBkZWZhdWx0LgorICogLSBJbmFiaWxpdHkgdG8gYWxsb2NhdGUgaGlnaCBmZHMgd2lsbCBhZ2dyYXZhdGUgdGhlIFggU2VydmVyJ3Mgc2VsZWN0KCkKKyAqICAgaGFuZGxpbmcsIGFuZCBsaWtlbHkgdGhhdCBvZiBtYW55IEdMIGNsaWVudCBhcHBsaWNhdGlvbnMgYXMgd2VsbC4KKyAqCisgKiBUaGlzIGxlZCB0byBhIHBsYW4gb2YgdXNpbmcgb3VyIG93biBpbnRlZ2VyIElEcyAoY2FsbGVkIGhhbmRsZXMsIGZvbGxvd2luZworICogRFJNIHRlcm1pbm9sb2d5KSB0byBtaW1pYyBmZHMsIGFuZCBpbXBsZW1lbnQgdGhlIGZkIHN5c2NhbGxzIHdlIG5lZWQgYXMKKyAqIGlvY3Rscy4gIFRoZSBvYmplY3RzIHRoZW1zZWx2ZXMgd2lsbCBzdGlsbCBpbmNsdWRlIHRoZSBzdHJ1Y3QgZmlsZSBzbworICogdGhhdCB3ZSBjYW4gdHJhbnNpdGlvbiB0byBmZHMgaWYgdGhlIHJlcXVpcmVkIGtlcm5lbCBpbmZyYXN0cnVjdHVyZSBzaG93cworICogdXAgYXQgYSBsYXRlciBkYXRlLCBhbmQgYXMgb3VyIGludGVyZmFjZSB3aXRoIHNobWZzIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4KKyAqLworCisvKioKKyAqIEluaXRpYWxpemUgdGhlIEdFTSBkZXZpY2UgZmllbGRzCisgKi8KKworaW50Citkcm1fZ2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwlpZHJfaW5pdCgmZGV2LT5vYmplY3RfbmFtZV9pZHIpOworCWF0b21pY19zZXQoJmRldi0+b2JqZWN0X2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPm9iamVjdF9tZW1vcnksIDApOworCWF0b21pY19zZXQoJmRldi0+cGluX2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPnBpbl9tZW1vcnksIDApOworCWF0b21pY19zZXQoJmRldi0+Z3R0X2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPmd0dF9tZW1vcnksIDApOworCXJldHVybiAwOworfQorCisvKioKKyAqIEFsbG9jYXRlIGEgR0VNIG9iamVjdCBvZiB0aGUgc3BlY2lmaWVkIHNpemUgd2l0aCBzaG1mcyBiYWNraW5nIHN0b3JlCisgKi8KK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqCitkcm1fZ2VtX29iamVjdF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKworCUJVR19PTigoc2l6ZSAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCk7CisKKwlvYmogPSBrY2FsbG9jKDEsIHNpemVvZigqb2JqKSwgR0ZQX0tFUk5FTCk7CisKKwlvYmotPmRldiA9IGRldjsKKwlvYmotPmZpbHAgPSBzaG1lbV9maWxlX3NldHVwKCJkcm0gbW0gb2JqZWN0Iiwgc2l6ZSwgMCk7CisJaWYgKElTX0VSUihvYmotPmZpbHApKSB7CisJCWtmcmVlKG9iaik7CisJCXJldHVybiBOVUxMOworCX0KKworCWtyZWZfaW5pdCgmb2JqLT5yZWZjb3VudCk7CisJa3JlZl9pbml0KCZvYmotPmhhbmRsZWNvdW50KTsKKwlvYmotPnNpemUgPSBzaXplOworCWlmIChkZXYtPmRyaXZlci0+Z2VtX2luaXRfb2JqZWN0ICE9IE5VTEwgJiYKKwkgICAgZGV2LT5kcml2ZXItPmdlbV9pbml0X29iamVjdChvYmopICE9IDApIHsKKwkJZnB1dChvYmotPmZpbHApOworCQlrZnJlZShvYmopOworCQlyZXR1cm4gTlVMTDsKKwl9CisJYXRvbWljX2luYygmZGV2LT5vYmplY3RfY291bnQpOworCWF0b21pY19hZGQob2JqLT5zaXplLCAmZGV2LT5vYmplY3RfbWVtb3J5KTsKKwlyZXR1cm4gb2JqOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX29iamVjdF9hbGxvYyk7CisKKy8qKgorICogUmVtb3ZlcyB0aGUgbWFwcGluZyBmcm9tIGhhbmRsZSB0byBmaWxwIGZvciB0aGlzIG9iamVjdC4KKyAqLworc3RhdGljIGludAorZHJtX2dlbV9oYW5kbGVfZGVsZXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlscCwgaW50IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCisJLyogVGhpcyBpcyBncm9zcy4gVGhlIGlkciBzeXN0ZW0gZG9lc24ndCBsZXQgdXMgdHJ5IGEgZGVsZXRlIGFuZAorCSAqIHJldHVybiBhbiBlcnJvciBjb2RlLiAgSXQganVzdCBzcGV3cyBpZiB5b3UgZmFpbCBhdCBkZWxldGluZy4KKwkgKiBTbywgd2UgaGF2ZSB0byBncmFiIGEgbG9jayBhcm91bmQgZmluZGluZyB0aGUgb2JqZWN0IGFuZCB0aGVuCisJICogZG9pbmcgdGhlIGRlbGV0ZSBvbiBpdCBhbmQgZHJvcHBpbmcgdGhlIHJlZmNvdW50LCBvciB0aGUgdXNlcgorCSAqIGNvdWxkIHJhY2UgdXMgdG8gZG91YmxlLWRlY3JlbWVudCB0aGUgcmVmY291bnQgYW5kIGNhdXNlIGEKKwkgKiB1c2UtYWZ0ZXItZnJlZSBsYXRlci4gIEdpdmVuIHRoZSBmcmVxdWVuY3kgb2Ygb3VyIGhhbmRsZSBsb29rdXBzLAorCSAqIHdlIG1heSB3YW50IHRvIHVzZSBpZGEgZm9yIG51bWJlciBhbGxvY2F0aW9uIGFuZCBhIGhhc2ggdGFibGUKKwkgKiBmb3IgdGhlIHBvaW50ZXJzLCBhbnl3YXkuCisJICovCisJc3Bpbl9sb2NrKCZmaWxwLT50YWJsZV9sb2NrKTsKKworCS8qIENoZWNrIGlmIHdlIGN1cnJlbnRseSBoYXZlIGEgcmVmZXJlbmNlIG9uIHRoZSBvYmplY3QgKi8KKwlvYmogPSBpZHJfZmluZCgmZmlscC0+b2JqZWN0X2lkciwgaGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2soJmZpbHAtPnRhYmxlX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2ID0gb2JqLT5kZXY7CisKKwkvKiBSZWxlYXNlIHJlZmVyZW5jZSBhbmQgZGVjcmVtZW50IHJlZmNvdW50LiAqLworCWlkcl9yZW1vdmUoJmZpbHAtPm9iamVjdF9pZHIsIGhhbmRsZSk7CisJc3Bpbl91bmxvY2soJmZpbHAtPnRhYmxlX2xvY2spOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X2hhbmRsZV91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ3JlYXRlIGEgaGFuZGxlIGZvciB0aGlzIG9iamVjdC4gVGhpcyBhZGRzIGEgaGFuZGxlIHJlZmVyZW5jZQorICogdG8gdGhlIG9iamVjdCwgd2hpY2ggaW5jbHVkZXMgYSByZWd1bGFyIHJlZmVyZW5jZSBjb3VudC4gQ2FsbGVycworICogd2lsbCBsaWtlbHkgd2FudCB0byBkZXJlZmVyZW5jZSB0aGUgb2JqZWN0IGFmdGVyd2FyZHMuCisgKi8KK2ludAorZHJtX2dlbV9oYW5kbGVfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkgICAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCSAgICAgICBpbnQgKmhhbmRsZXApCit7CisJaW50CXJldDsKKworCS8qCisJICogR2V0IHRoZSB1c2VyLXZpc2libGUgaGFuZGxlIHVzaW5nIGlkci4KKwkgKi8KK2FnYWluOgorCS8qIGVuc3VyZSB0aGVyZSBpcyBzcGFjZSBhdmFpbGFibGUgdG8gYWxsb2NhdGUgYSBoYW5kbGUgKi8KKwlpZiAoaWRyX3ByZV9nZXQoJmZpbGVfcHJpdi0+b2JqZWN0X2lkciwgR0ZQX0tFUk5FTCkgPT0gMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBkbyB0aGUgYWxsb2NhdGlvbiB1bmRlciBvdXIgc3BpbmxvY2sgKi8KKwlzcGluX2xvY2soJmZpbGVfcHJpdi0+dGFibGVfbG9jayk7CisJcmV0ID0gaWRyX2dldF9uZXdfYWJvdmUoJmZpbGVfcHJpdi0+b2JqZWN0X2lkciwgb2JqLCAxLCBoYW5kbGVwKTsKKwlzcGluX3VubG9jaygmZmlsZV9wcml2LT50YWJsZV9sb2NrKTsKKwlpZiAocmV0ID09IC1FQUdBSU4pCisJCWdvdG8gYWdhaW47CisKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlkcm1fZ2VtX29iamVjdF9oYW5kbGVfcmVmZXJlbmNlKG9iaik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1faGFuZGxlX2NyZWF0ZSk7CisKKy8qKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgbmFtZWQgYnkgdGhlIGhhbmRsZS4gKi8KK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqCitkcm1fZ2VtX29iamVjdF9sb29rdXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxwLAorCQkgICAgICBpbnQgaGFuZGxlKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCisJc3Bpbl9sb2NrKCZmaWxwLT50YWJsZV9sb2NrKTsKKworCS8qIENoZWNrIGlmIHdlIGN1cnJlbnRseSBoYXZlIGEgcmVmZXJlbmNlIG9uIHRoZSBvYmplY3QgKi8KKwlvYmogPSBpZHJfZmluZCgmZmlscC0+b2JqZWN0X2lkciwgaGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2soJmZpbHAtPnRhYmxlX2xvY2spOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKworCXNwaW5fdW5sb2NrKCZmaWxwLT50YWJsZV9sb2NrKTsKKworCXJldHVybiBvYmo7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fb2JqZWN0X2xvb2t1cCk7CisKKy8qKgorICogUmVsZWFzZXMgdGhlIGhhbmRsZSB0byBhbiBtbSBvYmplY3QuCisgKi8KK2ludAorZHJtX2dlbV9jbG9zZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9nZW1fY2xvc2UgKmFyZ3MgPSBkYXRhOworCWludCByZXQ7CisKKwlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gZHJtX2dlbV9oYW5kbGVfZGVsZXRlKGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogQ3JlYXRlIGEgZ2xvYmFsIG5hbWUgZm9yIGFuIG9iamVjdCwgcmV0dXJuaW5nIHRoZSBuYW1lLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgbmFtZSBkb2VzIG5vdCBob2xkIGEgcmVmZXJlbmNlOyB3aGVuIHRoZSBvYmplY3QKKyAqIGlzIGZyZWVkLCB0aGUgbmFtZSBnb2VzIGF3YXkuCisgKi8KK2ludAorZHJtX2dlbV9mbGlua19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9nZW1fZmxpbmsgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCisJCXJldHVybiAtRU5PREVWOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIC1FQkFERjsKKworYWdhaW46CisJaWYgKGlkcl9wcmVfZ2V0KCZkZXYtPm9iamVjdF9uYW1lX2lkciwgR0ZQX0tFUk5FTCkgPT0gMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJaWYgKG9iai0+bmFtZSkgeworCQlhcmdzLT5uYW1lID0gb2JqLT5uYW1lOworCQlzcGluX3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZkZXYtPm9iamVjdF9uYW1lX2lkciwgb2JqLCAxLAorCQkJCSAmb2JqLT5uYW1lKTsKKwlzcGluX3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwlpZiAocmV0ID09IC1FQUdBSU4pCisJCWdvdG8gYWdhaW47CisKKwlpZiAocmV0ICE9IDApIHsKKwkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIExlYXZlIHRoZSByZWZlcmVuY2UgZnJvbSB0aGUgbG9va3VwIGFyb3VuZCBhcyB0aGUKKwkgKiBuYW1lIHRhYmxlIG5vdyBob2xkcyBvbmUKKwkgKi8KKwlhcmdzLT5uYW1lID0gKHVpbnQ2NF90KSBvYmotPm5hbWU7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBPcGVuIGFuIG9iamVjdCB1c2luZyB0aGUgZ2xvYmFsIG5hbWUsIHJldHVybmluZyBhIGhhbmRsZSBhbmQgdGhlIHNpemUuCisgKgorICogVGhpcyBoYW5kbGUgKG9mIGNvdXJzZSkgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCwgc28gdGhlIG9iamVjdAorICogd2lsbCBub3QgZ28gYXdheSB1bnRpbCB0aGUgaGFuZGxlIGlzIGRlbGV0ZWQuCisgKi8KK2ludAorZHJtX2dlbV9vcGVuX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fZ2VtX29wZW4gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisJaW50IGhhbmRsZTsKKworCWlmICghKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJb2JqID0gaWRyX2ZpbmQoJmRldi0+b2JqZWN0X25hbWVfaWRyLCAoaW50KSBhcmdzLT5uYW1lKTsKKwlpZiAob2JqKQorCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKwlzcGluX3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBvYmosICZoYW5kbGUpOworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlhcmdzLT5oYW5kbGUgPSBoYW5kbGU7CisJYXJncy0+c2l6ZSA9IG9iai0+c2l6ZTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIENhbGxlZCBhdCBkZXZpY2Ugb3BlbiB0aW1lLCBzZXRzIHVwIHRoZSBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5nIHJlZmNvdW50aW5nCisgKiBvZiBtbSBvYmplY3RzLgorICovCit2b2lkCitkcm1fZ2VtX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpCit7CisJaWRyX2luaXQoJmZpbGVfcHJpdmF0ZS0+b2JqZWN0X2lkcik7CisJc3Bpbl9sb2NrX2luaXQoJmZpbGVfcHJpdmF0ZS0+dGFibGVfbG9jayk7Cit9CisKKy8qKgorICogQ2FsbGVkIGF0IGRldmljZSBjbG9zZSB0byByZWxlYXNlIHRoZSBmaWxlJ3MKKyAqIGhhbmRsZSByZWZlcmVuY2VzIG9uIG9iamVjdHMuCisgKi8KK3N0YXRpYyBpbnQKK2RybV9nZW1fb2JqZWN0X3JlbGVhc2VfaGFuZGxlKGludCBpZCwgdm9pZCAqcHRyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gcHRyOworCisJZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKG9iaik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDYWxsZWQgYXQgY2xvc2UgdGltZSB3aGVuIHRoZSBmaWxwIGlzIGdvaW5nIGF3YXkuCisgKgorICogUmVsZWFzZXMgYW55IHJlbWFpbmluZyByZWZlcmVuY2VzIG9uIG9iamVjdHMgYnkgdGhpcyBmaWxwLgorICovCit2b2lkCitkcm1fZ2VtX3JlbGVhc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpCit7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlkcl9mb3JfZWFjaCgmZmlsZV9wcml2YXRlLT5vYmplY3RfaWRyLAorCQkgICAgICZkcm1fZ2VtX29iamVjdF9yZWxlYXNlX2hhbmRsZSwgTlVMTCk7CisKKwlpZHJfZGVzdHJveSgmZmlsZV9wcml2YXRlLT5vYmplY3RfaWRyKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKK30KKworLyoqCisgKiBDYWxsZWQgYWZ0ZXIgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgaGFzIGJlZW4gbG9zdC4KKyAqCisgKiBGcmVlcyB0aGUgb2JqZWN0CisgKi8KK3ZvaWQKK2RybV9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICopIGtyZWY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRldi0+c3RydWN0X211dGV4KSk7CisKKwlpZiAoZGV2LT5kcml2ZXItPmdlbV9mcmVlX29iamVjdCAhPSBOVUxMKQorCQlkZXYtPmRyaXZlci0+Z2VtX2ZyZWVfb2JqZWN0KG9iaik7CisKKwlmcHV0KG9iai0+ZmlscCk7CisJYXRvbWljX2RlYygmZGV2LT5vYmplY3RfY291bnQpOworCWF0b21pY19zdWIob2JqLT5zaXplLCAmZGV2LT5vYmplY3RfbWVtb3J5KTsKKwlrZnJlZShvYmopOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX29iamVjdF9mcmVlKTsKKworLyoqCisgKiBDYWxsZWQgYWZ0ZXIgdGhlIGxhc3QgaGFuZGxlIHRvIHRoZSBvYmplY3QgaGFzIGJlZW4gY2xvc2VkCisgKgorICogUmVtb3ZlcyBhbnkgbmFtZSBmb3IgdGhlIG9iamVjdC4gTm90ZSB0aGF0IHRoaXMgbXVzdCBiZQorICogY2FsbGVkIGJlZm9yZSBkcm1fZ2VtX29iamVjdF9mcmVlIG9yIHdlJ2xsIGJlIHRvdWNoaW5nCisgKiBmcmVlZCBtZW1vcnkKKyAqLwordm9pZAorZHJtX2dlbV9vYmplY3RfaGFuZGxlX2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBjb250YWluZXJfb2Yoa3JlZiwKKwkJCQkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0LAorCQkJCQkJICBoYW5kbGVjb3VudCk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCisJLyogUmVtb3ZlIGFueSBuYW1lIGZvciB0aGlzIG9iamVjdCAqLworCXNwaW5fbG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwlpZiAob2JqLT5uYW1lKSB7CisJCWlkcl9yZW1vdmUoJmRldi0+b2JqZWN0X25hbWVfaWRyLCBvYmotPm5hbWUpOworCQlzcGluX3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKwkJLyoKKwkJICogVGhlIG9iamVjdCBuYW1lIGhlbGQgYSByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QsIGRyb3AKKwkJICogdGhhdCBub3cuCisJCSAqLworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCX0gZWxzZQorCQlzcGluX3VubG9jaygmZGV2LT5vYmplY3RfbmFtZV9sb2NrKTsKKworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZSk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCmluZGV4IDUzZjBlNWEuLjQwOTFiOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwpAQCAtNjMsNyArNjMsNyBAQAogCSAgICBwLT5kZXZudW0gIT0gUENJX1NMT1QoZGV2LT5wZGV2LT5kZXZmbikgfHwgcC0+ZnVuY251bSAhPSBQQ0lfRlVOQyhkZXYtPnBkZXYtPmRldmZuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwLT5pcnEgPSBkZXYtPmlycTsKKwlwLT5pcnEgPSBkZXYtPnBkZXYtPmlycTsKIAogCURSTV9ERUJVRygiJWQ6JWQ6JWQgPT4gSVJRICVkXG4iLCBwLT5idXNudW0sIHAtPmRldm51bSwgcC0+ZnVuY251bSwKIAkJICBwLT5pcnEpOwpAQCAtNzEsMjUgKzcxLDEzNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB2YmxhbmtfZGlzYWJsZV9mbih1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopYXJnOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJaW50IGk7CisKKwlpZiAoIWRldi0+dmJsYW5rX2Rpc2FibGVfYWxsb3dlZCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2NydGNzOyBpKyspIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKKwkJaWYgKGF0b21pY19yZWFkKCZkZXYtPnZibGFua19yZWZjb3VudFtpXSkgPT0gMCAmJgorCQkgICAgZGV2LT52YmxhbmtfZW5hYmxlZFtpXSkgeworCQkJRFJNX0RFQlVHKCJkaXNhYmxpbmcgdmJsYW5rIG9uIGNydGMgJWRcbiIsIGkpOworCQkJZGV2LT5sYXN0X3ZibGFua1tpXSA9CisJCQkJZGV2LT5kcml2ZXItPmdldF92YmxhbmtfY291bnRlcihkZXYsIGkpOworCQkJZGV2LT5kcml2ZXItPmRpc2FibGVfdmJsYW5rKGRldiwgaSk7CisJCQlkZXYtPnZibGFua19lbmFibGVkW2ldID0gMDsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkcm1fdmJsYW5rX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwkvKiBCYWlsIGlmIHRoZSBkcml2ZXIgZGlkbid0IGNhbGwgZHJtX3ZibGFua19pbml0KCkgKi8KKwlpZiAoZGV2LT5udW1fY3J0Y3MgPT0gMCkKKwkJcmV0dXJuOworCisJZGVsX3RpbWVyKCZkZXYtPnZibGFua19kaXNhYmxlX3RpbWVyKTsKKworCXZibGFua19kaXNhYmxlX2ZuKCh1bnNpZ25lZCBsb25nKWRldik7CisKKwlkcm1fZnJlZShkZXYtPnZibF9xdWV1ZSwgc2l6ZW9mKCpkZXYtPnZibF9xdWV1ZSkgKiBkZXYtPm51bV9jcnRjcywKKwkJIERSTV9NRU1fRFJJVkVSKTsKKwlkcm1fZnJlZShkZXYtPnZibF9zaWdzLCBzaXplb2YoKmRldi0+dmJsX3NpZ3MpICogZGV2LT5udW1fY3J0Y3MsCisJCSBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUoZGV2LT5fdmJsYW5rX2NvdW50LCBzaXplb2YoKmRldi0+X3ZibGFua19jb3VudCkgKgorCQkgZGV2LT5udW1fY3J0Y3MsIERSTV9NRU1fRFJJVkVSKTsKKwlkcm1fZnJlZShkZXYtPnZibGFua19yZWZjb3VudCwgc2l6ZW9mKCpkZXYtPnZibGFua19yZWZjb3VudCkgKgorCQkgZGV2LT5udW1fY3J0Y3MsIERSTV9NRU1fRFJJVkVSKTsKKwlkcm1fZnJlZShkZXYtPnZibGFua19lbmFibGVkLCBzaXplb2YoKmRldi0+dmJsYW5rX2VuYWJsZWQpICoKKwkJIGRldi0+bnVtX2NydGNzLCBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUoZGV2LT5sYXN0X3ZibGFuaywgc2l6ZW9mKCpkZXYtPmxhc3RfdmJsYW5rKSAqIGRldi0+bnVtX2NydGNzLAorCQkgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGRldi0+dmJsYW5rX2lubW9kZXNldCwgc2l6ZW9mKCpkZXYtPnZibGFua19pbm1vZGVzZXQpICoKKwkJIGRldi0+bnVtX2NydGNzLCBEUk1fTUVNX0RSSVZFUik7CisKKwlkZXYtPm51bV9jcnRjcyA9IDA7Cit9CisKK2ludCBkcm1fdmJsYW5rX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG51bV9jcnRjcykKK3sKKwlpbnQgaSwgcmV0ID0gLUVOT01FTTsKKworCXNldHVwX3RpbWVyKCZkZXYtPnZibGFua19kaXNhYmxlX3RpbWVyLCB2YmxhbmtfZGlzYWJsZV9mbiwKKwkJICAgICh1bnNpZ25lZCBsb25nKWRldik7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+dmJsX2xvY2spOworCWF0b21pY19zZXQoJmRldi0+dmJsX3NpZ25hbF9wZW5kaW5nLCAwKTsKKwlkZXYtPm51bV9jcnRjcyA9IG51bV9jcnRjczsKKworCWRldi0+dmJsX3F1ZXVlID0gZHJtX2FsbG9jKHNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCkgKiBudW1fY3J0Y3MsCisJCQkJICAgRFJNX01FTV9EUklWRVIpOworCWlmICghZGV2LT52YmxfcXVldWUpCisJCWdvdG8gZXJyOworCisJZGV2LT52Ymxfc2lncyA9IGRybV9hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkgKiBudW1fY3J0Y3MsCisJCQkJICBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFkZXYtPnZibF9zaWdzKQorCQlnb3RvIGVycjsKKworCWRldi0+X3ZibGFua19jb3VudCA9IGRybV9hbGxvYyhzaXplb2YoYXRvbWljX3QpICogbnVtX2NydGNzLAorCQkJCSAgICAgIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIWRldi0+X3ZibGFua19jb3VudCkKKwkJZ290byBlcnI7CisKKwlkZXYtPnZibGFua19yZWZjb3VudCA9IGRybV9hbGxvYyhzaXplb2YoYXRvbWljX3QpICogbnVtX2NydGNzLAorCQkJCQkgRFJNX01FTV9EUklWRVIpOworCWlmICghZGV2LT52YmxhbmtfcmVmY291bnQpCisJCWdvdG8gZXJyOworCisJZGV2LT52YmxhbmtfZW5hYmxlZCA9IGRybV9jYWxsb2MobnVtX2NydGNzLCBzaXplb2YoaW50KSwKKwkJCQkJIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIWRldi0+dmJsYW5rX2VuYWJsZWQpCisJCWdvdG8gZXJyOworCisJZGV2LT5sYXN0X3ZibGFuayA9IGRybV9jYWxsb2MobnVtX2NydGNzLCBzaXplb2YodTMyKSwgRFJNX01FTV9EUklWRVIpOworCWlmICghZGV2LT5sYXN0X3ZibGFuaykKKwkJZ290byBlcnI7CisKKwlkZXYtPnZibGFua19pbm1vZGVzZXQgPSBkcm1fY2FsbG9jKG51bV9jcnRjcywgc2l6ZW9mKGludCksCisJCQkJCSBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFkZXYtPnZibGFua19pbm1vZGVzZXQpCisJCWdvdG8gZXJyOworCisJLyogWmVybyBwZXItY3J0YyB2Ymxhbmsgc3R1ZmYgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NydGNzOyBpKyspIHsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT52YmxfcXVldWVbaV0pOworCQlJTklUX0xJU1RfSEVBRCgmZGV2LT52Ymxfc2lnc1tpXSk7CisJCWF0b21pY19zZXQoJmRldi0+X3ZibGFua19jb3VudFtpXSwgMCk7CisJCWF0b21pY19zZXQoJmRldi0+dmJsYW5rX3JlZmNvdW50W2ldLCAwKTsKKwl9CisKKwlkZXYtPnZibGFua19kaXNhYmxlX2FsbG93ZWQgPSAwOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlkcm1fdmJsYW5rX2NsZWFudXAoZGV2KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX2luaXQpOworCiAvKioKICAqIEluc3RhbGwgSVJRIGhhbmRsZXIuCiAgKgogICogXHBhcmFtIGRldiBEUk0gZGV2aWNlLgotICogXHBhcmFtIGlycSBJUlEgbnVtYmVyLgogICoKLSAqIEluaXRpYWxpemVzIHRoZSBJUlEgcmVsYXRlZCBkYXRhLCBhbmQgc2V0dXBzIGRybV9kZXZpY2U6OnZibF9xdWV1ZS4gSW5zdGFsbHMgdGhlIGhhbmRsZXIsIGNhbGxpbmcgdGhlIGRyaXZlcgorICogSW5pdGlhbGl6ZXMgdGhlIElSUSByZWxhdGVkIGRhdGEuIEluc3RhbGxzIHRoZSBoYW5kbGVyLCBjYWxsaW5nIHRoZSBkcml2ZXIKICAqIFxjIGRybV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoKSBhbmQgXGMgZHJtX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoKSBmdW5jdGlvbnMKICAqIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbi4KICAqLwotc3RhdGljIGludCBkcm1faXJxX2luc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitpbnQgZHJtX2lycV9pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIHNoX2ZsYWdzID0gMDsKIAogCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9IQVZFX0lSUSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGRldi0+aXJxID09IDApCisJaWYgKGRldi0+cGRldi0+aXJxID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpAQCAtMTA3LDE4ICsyMTksNyBAQAogCWRldi0+aXJxX2VuYWJsZWQgPSAxOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0JRFJNX0RFQlVHKCJpcnE9JWRcbiIsIGRldi0+aXJxKTsKLQotCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0lSUV9WQkwpKSB7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+dmJsX3F1ZXVlKTsKLQotCQlzcGluX2xvY2tfaW5pdCgmZGV2LT52YmxfbG9jayk7Ci0KLQkJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmJsX3NpZ3MpOwotCQlJTklUX0xJU1RfSEVBRCgmZGV2LT52Ymxfc2lnczIpOwotCi0JCWRldi0+dmJsX3BlbmRpbmcgPSAwOwotCX0KKwlEUk1fREVCVUcoImlycT0lZFxuIiwgZGV2LT5wZGV2LT5pcnEpOwogCiAJLyogQmVmb3JlIGluc3RhbGxpbmcgaGFuZGxlciAqLwogCWRldi0+ZHJpdmVyLT5pcnFfcHJlaW5zdGFsbChkZXYpOwpAQCAtMTI3LDggKzIyOCw5IEBACiAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSVJRX1NIQVJFRCkpCiAJCXNoX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgZGV2LT5kcml2ZXItPmlycV9oYW5kbGVyLAorCXJldCA9IHJlcXVlc3RfaXJxKGRybV9kZXZfdG9faXJxKGRldiksIGRldi0+ZHJpdmVyLT5pcnFfaGFuZGxlciwKIAkJCSAgc2hfZmxhZ3MsIGRldi0+ZGV2bmFtZSwgZGV2KTsKKwogCWlmIChyZXQgPCAwKSB7CiAJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkJZGV2LT5pcnFfZW5hYmxlZCA9IDA7CkBAIC0xMzcsMTAgKzIzOSwxNiBAQAogCX0KIAogCS8qIEFmdGVyIGluc3RhbGxpbmcgaGFuZGxlciAqLwotCWRldi0+ZHJpdmVyLT5pcnFfcG9zdGluc3RhbGwoZGV2KTsKKwlyZXQgPSBkZXYtPmRyaXZlci0+aXJxX3Bvc3RpbnN0YWxsKGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlkZXYtPmlycV9lbmFibGVkID0gMDsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woZHJtX2lycV9pbnN0YWxsKTsKIAogLyoqCiAgKiBVbmluc3RhbGwgdGhlIElSUSBoYW5kbGVyLgpAQCAtMTY0LDE3ICsyNzIsMTggQEAKIAlpZiAoIWlycV9lbmFibGVkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCURSTV9ERUJVRygiaXJxPSVkXG4iLCBkZXYtPmlycSk7CisJRFJNX0RFQlVHKCJpcnE9JWRcbiIsIGRldi0+cGRldi0+aXJxKTsKIAogCWRldi0+ZHJpdmVyLT5pcnFfdW5pbnN0YWxsKGRldik7CiAKLQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlmcmVlX2lycShkZXYtPnBkZXYtPmlycSwgZGV2KTsKKworCWRybV92YmxhbmtfY2xlYW51cChkZXYpOwogCiAJZGV2LT5sb2NrZWRfdGFza2xldF9mdW5jID0gTlVMTDsKIAogCXJldHVybiAwOwogfQotCiBFWFBPUlRfU1lNQk9MKGRybV9pcnFfdW5pbnN0YWxsKTsKIAogLyoqCkBAIC0yMDEsNyArMzEwLDcgQEAKIAkJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0hBVkVfSVJRKSkKIAkJCXJldHVybiAwOwogCQlpZiAoZGV2LT5pZl92ZXJzaW9uIDwgRFJNX0lGX1ZFUlNJT04oMSwgMikgJiYKLQkJICAgIGN0bC0+aXJxICE9IGRldi0+aXJxKQorCQkgICAgY3RsLT5pcnEgIT0gZGV2LT5wZGV2LT5pcnEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dXJuIGRybV9pcnFfaW5zdGFsbChkZXYpOwogCWNhc2UgRFJNX1VOSU5TVF9IQU5ETEVSOgpAQCAtMjE0LDYgKzMyMywxNzQgQEAKIH0KIAogLyoqCisgKiBkcm1fdmJsYW5rX2NvdW50IC0gcmV0cmlldmUgImNvb2tlZCIgdmJsYW5rIGNvdW50ZXIgdmFsdWUKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBjcnRjOiB3aGljaCBjb3VudGVyIHRvIHJldHJpZXZlCisgKgorICogRmV0Y2hlcyB0aGUgImNvb2tlZCIgdmJsYW5rIGNvdW50IHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mCisgKiB2YmxhbmsgZXZlbnRzIHNpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgaW5jbHVkaW5nIGxvc3QgZXZlbnRzIGR1ZSB0bworICogbW9kZXNldHRpbmcgYWN0aXZpdHkuCisgKi8KK3UzMiBkcm1fdmJsYW5rX2NvdW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCXJldHVybiBhdG9taWNfcmVhZCgmZGV2LT5fdmJsYW5rX2NvdW50W2NydGNdKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX3ZibGFua19jb3VudCk7CisKKy8qKgorICogZHJtX3VwZGF0ZV92YmxhbmtfY291bnQgLSB1cGRhdGUgdGhlIG1hc3RlciB2YmxhbmsgY291bnRlcgorICogQGRldjogRFJNIGRldmljZQorICogQGNydGM6IGNvdW50ZXIgdG8gdXBkYXRlCisgKgorICogQ2FsbCBiYWNrIGludG8gdGhlIGRyaXZlciB0byB1cGRhdGUgdGhlIGFwcHJvcHJpYXRlIHZibGFuayBjb3VudGVyCisgKiAoc3BlY2lmaWVkIGJ5IEBjcnRjKS4gIERlYWwgd2l0aCB3cmFwYXJvdW5kLCBpZiBpdCBvY2N1cnJlZCwgYW5kCisgKiB1cGRhdGUgdGhlIGxhc3QgcmVhZCB2YWx1ZSBzbyB3ZSBjYW4gZGVhbCB3aXRoIHdyYXBhcm91bmQgb24gdGhlIG5leHQKKyAqIGNhbGwgaWYgbmVjZXNzYXJ5LgorICoKKyAqIE9ubHkgbmVjZXNzYXJ5IHdoZW4gZ29pbmcgZnJvbSBvZmYtPm9uLCB0byBhY2NvdW50IGZvciBmcmFtZXMgd2UKKyAqIGRpZG4ndCBnZXQgYW4gaW50ZXJydXB0IGZvci4KKyAqCisgKiBOb3RlOiBjYWxsZXIgbXVzdCBob2xkIGRldi0+dmJsX2xvY2sgc2luY2UgdGhpcyByZWFkcyAmIHdyaXRlcworICogZGV2aWNlIHZibGFuayBmaWVsZHMuCisgKi8KK3N0YXRpYyB2b2lkIGRybV91cGRhdGVfdmJsYW5rX2NvdW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCXUzMiBjdXJfdmJsYW5rLCBkaWZmOworCisJLyoKKwkgKiBJbnRlcnJ1cHRzIHdlcmUgZGlzYWJsZWQgcHJpb3IgdG8gdGhpcyBjYWxsLCBzbyBkZWFsIHdpdGggY291bnRlcgorCSAqIHdyYXAgaWYgbmVlZGVkLgorCSAqIE5PVEUhICBJdCdzIHBvc3NpYmxlIHdlIGxvc3QgYSBmdWxsIGRldi0+bWF4X3ZibGFua19jb3VudCBldmVudHMKKwkgKiBoZXJlIGlmIHRoZSByZWdpc3RlciBpcyBzbWFsbCBvciB3ZSBoYWQgdmJsYW5rIGludGVycnVwdHMgb2ZmIGZvcgorCSAqIGEgbG9uZyB0aW1lLgorCSAqLworCWN1cl92YmxhbmsgPSBkZXYtPmRyaXZlci0+Z2V0X3ZibGFua19jb3VudGVyKGRldiwgY3J0Yyk7CisJZGlmZiA9IGN1cl92YmxhbmsgLSBkZXYtPmxhc3RfdmJsYW5rW2NydGNdOworCWlmIChjdXJfdmJsYW5rIDwgZGV2LT5sYXN0X3ZibGFua1tjcnRjXSkgeworCQlkaWZmICs9IGRldi0+bWF4X3ZibGFua19jb3VudDsKKworCQlEUk1fREVCVUcoImxhc3RfdmJsYW5rWyVkXT0weCV4LCBjdXJfdmJsYW5rPTB4JXggPT4gZGlmZj0weCV4XG4iLAorCQkJICBjcnRjLCBkZXYtPmxhc3RfdmJsYW5rW2NydGNdLCBjdXJfdmJsYW5rLCBkaWZmKTsKKwl9CisKKwlEUk1fREVCVUcoImVuYWJsaW5nIHZibGFuayBpbnRlcnJ1cHRzIG9uIGNydGMgJWQsIG1pc3NlZCAlZFxuIiwKKwkJICBjcnRjLCBkaWZmKTsKKworCWF0b21pY19hZGQoZGlmZiwgJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSk7Cit9CisKKy8qKgorICogZHJtX3ZibGFua19nZXQgLSBnZXQgYSByZWZlcmVuY2UgY291bnQgb24gdmJsYW5rIGV2ZW50cworICogQGRldjogRFJNIGRldmljZQorICogQGNydGM6IHdoaWNoIENSVEMgdG8gb3duCisgKgorICogQWNxdWlyZSBhIHJlZmVyZW5jZSBjb3VudCBvbiB2YmxhbmsgZXZlbnRzIHRvIGF2b2lkIGhhdmluZyB0aGVtIGRpc2FibGVkCisgKiB3aGlsZSBpbiB1c2UuCisgKgorICogUkVUVVJOUworICogWmVybyBvbiBzdWNjZXNzLCBub256ZXJvIG9uIGZhaWx1cmUuCisgKi8KK2ludCBkcm1fdmJsYW5rX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKKwkvKiBHb2luZyBmcm9tIDAtPjEgbWVhbnMgd2UgaGF2ZSB0byBlbmFibGUgaW50ZXJydXB0cyBhZ2FpbiAqLworCWlmIChhdG9taWNfYWRkX3JldHVybigxLCAmZGV2LT52YmxhbmtfcmVmY291bnRbY3J0Y10pID09IDEgJiYKKwkgICAgIWRldi0+dmJsYW5rX2VuYWJsZWRbY3J0Y10pIHsKKwkJcmV0ID0gZGV2LT5kcml2ZXItPmVuYWJsZV92YmxhbmsoZGV2LCBjcnRjKTsKKwkJRFJNX0RFQlVHKCJlbmFibGluZyB2Ymxhbmsgb24gY3J0YyAlZCwgcmV0OiAlZFxuIiwgY3J0YywgcmV0KTsKKwkJaWYgKHJldCkKKwkJCWF0b21pY19kZWMoJmRldi0+dmJsYW5rX3JlZmNvdW50W2NydGNdKTsKKwkJZWxzZSB7CisJCQlkZXYtPnZibGFua19lbmFibGVkW2NydGNdID0gMTsKKwkJCWRybV91cGRhdGVfdmJsYW5rX2NvdW50KGRldiwgY3J0Yyk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX3ZibGFua19nZXQpOworCisvKioKKyAqIGRybV92YmxhbmtfcHV0IC0gZ2l2ZSB1cCBvd25lcnNoaXAgb2YgdmJsYW5rIGV2ZW50cworICogQGRldjogRFJNIGRldmljZQorICogQGNydGM6IHdoaWNoIGNvdW50ZXIgdG8gZ2l2ZSB1cAorICoKKyAqIFJlbGVhc2Ugb3duZXJzaGlwIG9mIGEgZ2l2ZW4gdmJsYW5rIGNvdW50ZXIsIHR1cm5pbmcgb2ZmIGludGVycnVwdHMKKyAqIGlmIHBvc3NpYmxlLgorICovCit2b2lkIGRybV92YmxhbmtfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCS8qIExhc3QgdXNlciBzY2hlZHVsZXMgaW50ZXJydXB0IGRpc2FibGUgKi8KKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT52YmxhbmtfcmVmY291bnRbY3J0Y10pKQorCQltb2RfdGltZXIoJmRldi0+dmJsYW5rX2Rpc2FibGVfdGltZXIsIGppZmZpZXMgKyA1KkRSTV9IWik7Cit9CitFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfcHV0KTsKKworLyoqCisgKiBkcm1fbW9kZXNldF9jdGwgLSBoYW5kbGUgdmJsYW5rIGV2ZW50IGNvdW50ZXIgY2hhbmdlcyBhY3Jvc3MgbW9kZSBzd2l0Y2gKKyAqIEBEUk1fSU9DVExfQVJHUzogc3RhbmRhcmQgaW9jdGwgYXJndW1lbnRzCisgKgorICogQXBwbGljYXRpb25zIHNob3VsZCBjYWxsIHRoZSAlX0RSTV9QUkVfTU9ERVNFVCBhbmQgJV9EUk1fUE9TVF9NT0RFU0VUCisgKiBpb2N0bHMgYXJvdW5kIG1vZGVzZXR0aW5nIHNvIHRoYXQgYW55IGxvc3QgdmJsYW5rIGV2ZW50cyBhcmUgYWNjb3VudGVkIGZvci4KKyAqCisgKiBHZW5lcmFsbHkgdGhlIGNvdW50ZXIgd2lsbCByZXNldCBhY3Jvc3MgbW9kZSBzZXRzLiAgSWYgaW50ZXJydXB0cyBhcmUKKyAqIGVuYWJsZWQgYXJvdW5kIHRoaXMgY2FsbCwgd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBzaW5jZSB0aGUgY291bnRlcgorICogd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBpbmNyZW1lbnRlZC4KKyAqLworaW50IGRybV9tb2Rlc2V0X2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9tb2Rlc2V0X2N0bCAqbW9kZXNldCA9IGRhdGE7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlpbnQgY3J0YywgcmV0ID0gMDsKKworCS8qIElmIGRybV92YmxhbmtfaW5pdCgpIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQsIGp1c3Qgbm8tb3AgKi8KKwlpZiAoIWRldi0+bnVtX2NydGNzKQorCQlnb3RvIG91dDsKKworCWNydGMgPSBtb2Rlc2V0LT5jcnRjOworCWlmIChjcnRjID49IGRldi0+bnVtX2NydGNzKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVG8gYXZvaWQgYWxsIHRoZSBwcm9ibGVtcyB0aGF0IG1pZ2h0IGhhcHBlbiBpZiBpbnRlcnJ1cHRzCisJICogd2VyZSBlbmFibGVkL2Rpc2FibGVkIGFyb3VuZCBvciBiZXR3ZWVuIHRoZXNlIGNhbGxzLCB3ZSBqdXN0CisJICogaGF2ZSB0aGUga2VybmVsIHRha2UgYSByZWZlcmVuY2Ugb24gdGhlIENSVEMgKGp1c3Qgb25jZSB0aG91Z2gKKwkgKiB0byBhdm9pZCBjb3JydXB0aW5nIHRoZSBjb3VudCBpZiBtdWx0aXBsZSwgbWlzbWF0Y2ggY2FsbHMgb2NjdXIpLAorCSAqIHNvIHRoYXQgaW50ZXJydXB0cyByZW1haW4gZW5hYmxlZCBpbiB0aGUgaW50ZXJpbS4KKwkgKi8KKwlzd2l0Y2ggKG1vZGVzZXQtPmNtZCkgeworCWNhc2UgX0RSTV9QUkVfTU9ERVNFVDoKKwkJaWYgKCFkZXYtPnZibGFua19pbm1vZGVzZXRbY3J0Y10pIHsKKwkJCWRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSA9IDE7CisJCQlkcm1fdmJsYW5rX2dldChkZXYsIGNydGMpOworCQl9CisJCWJyZWFrOworCWNhc2UgX0RSTV9QT1NUX01PREVTRVQ6CisJCWlmIChkZXYtPnZibGFua19pbm1vZGVzZXRbY3J0Y10pIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CisJCQlkZXYtPnZibGFua19kaXNhYmxlX2FsbG93ZWQgPSAxOworCQkJZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdID0gMDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKKwkJCWRybV92YmxhbmtfcHV0KGRldiwgY3J0Yyk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoqCiAgKiBXYWl0IGZvciBWQkxBTksuCiAgKgogICogXHBhcmFtIGlub2RlIGRldmljZSBpbm9kZS4KQEAgLTIzMiwxNCArNTA5LDE0IEBACiAgKgogICogSWYgYSBzaWduYWwgaXMgbm90IHJlcXVlc3RlZCwgdGhlbiBjYWxscyB2Ymxhbmtfd2FpdCgpLgogICovCi1pbnQgZHJtX3dhaXRfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoraW50IGRybV93YWl0X3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJdW5pb24gZHJtX3dhaXRfdmJsYW5rICp2Ymx3YWl0ID0gZGF0YTsKLQlzdHJ1Y3QgdGltZXZhbCBub3c7CiAJaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgaW50IGZsYWdzLCBzZXE7CisJdW5zaWduZWQgaW50IGZsYWdzLCBzZXEsIGNydGM7CiAKLQlpZiAoKCFkZXYtPmlycSkgfHwgKCFkZXYtPmlycV9lbmFibGVkKSkKKwlpZiAoKCFkZXYtPnBkZXYtPmlycSkgfHwgKCFkZXYtPmlycV9lbmFibGVkKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodmJsd2FpdC0+cmVxdWVzdC50eXBlICYKQEAgLTI1MSwxMyArNTI4LDE3IEBACiAJfQogCiAJZmxhZ3MgPSB2Ymx3YWl0LT5yZXF1ZXN0LnR5cGUgJiBfRFJNX1ZCTEFOS19GTEFHU19NQVNLOworCWNydGMgPSBmbGFncyAmIF9EUk1fVkJMQU5LX1NFQ09OREFSWSA/IDEgOiAwOwogCi0JaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgKGZsYWdzICYgX0RSTV9WQkxBTktfU0VDT05EQVJZKSA/Ci0JCQkJICAgIERSSVZFUl9JUlFfVkJMMiA6IERSSVZFUl9JUlFfVkJMKSkKKwlpZiAoY3J0YyA+PSBkZXYtPm51bV9jcnRjcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzZXEgPSBhdG9taWNfcmVhZCgoZmxhZ3MgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkpID8gJmRldi0+dmJsX3JlY2VpdmVkMgotCQkJICA6ICZkZXYtPnZibF9yZWNlaXZlZCk7CisJcmV0ID0gZHJtX3ZibGFua19nZXQoZGV2LCBjcnRjKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFjcXVpcmUgdmJsYW5rIGNvdW50ZXIsICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlzZXEgPSBkcm1fdmJsYW5rX2NvdW50KGRldiwgY3J0Yyk7CiAKIAlzd2l0Y2ggKHZibHdhaXQtPnJlcXVlc3QudHlwZSAmIF9EUk1fVkJMQU5LX1RZUEVTX01BU0spIHsKIAljYXNlIF9EUk1fVkJMQU5LX1JFTEFUSVZFOgpAQCAtMjY2LDcgKzU0Nyw4IEBACiAJY2FzZSBfRFJNX1ZCTEFOS19BQlNPTFVURToKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoKGZsYWdzICYgX0RSTV9WQkxBTktfTkVYVE9OTUlTUykgJiYKQEAgLTI3Niw4ICs1NTgsNyBAQAogCiAJaWYgKGZsYWdzICYgX0RSTV9WQkxBTktfU0lHTkFMKSB7CiAJCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKnZibF9zaWdzID0gKGZsYWdzICYgX0RSTV9WQkxBTktfU0VDT05EQVJZKQotCQkJCSAgICAgID8gJmRldi0+dmJsX3NpZ3MyIDogJmRldi0+dmJsX3NpZ3M7CisJCXN0cnVjdCBsaXN0X2hlYWQgKnZibF9zaWdzID0gJmRldi0+dmJsX3NpZ3NbY3J0Y107CiAJCXN0cnVjdCBkcm1fdmJsX3NpZyAqdmJsX3NpZzsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwpAQCAtMjk4LDIyICs1NzksMjkgQEAKIAkJCX0KIAkJfQogCi0JCWlmIChkZXYtPnZibF9wZW5kaW5nID49IDEwMCkgeworCQlpZiAoYXRvbWljX3JlYWQoJmRldi0+dmJsX3NpZ25hbF9wZW5kaW5nKSA+PSAxMDApIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKLQkJCXJldHVybiAtRUJVU1k7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIGRvbmU7CiAJCX0KIAotCQlkZXYtPnZibF9wZW5kaW5nKys7Ci0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwogCi0JCWlmICghCi0JCSAgICAodmJsX3NpZyA9Ci0JCSAgICAgZHJtX2FsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX3ZibF9zaWcpLCBEUk1fTUVNX0RSSVZFUikpKSB7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwkJdmJsX3NpZyA9IGRybV9jYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBkcm1fdmJsX3NpZyksCisJCQkJICAgICBEUk1fTUVNX0RSSVZFUik7CisJCWlmICghdmJsX3NpZykgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZG9uZTsKIAkJfQogCi0JCW1lbXNldCgodm9pZCAqKXZibF9zaWcsIDAsIHNpemVvZigqdmJsX3NpZykpOworCQlyZXQgPSBkcm1fdmJsYW5rX2dldChkZXYsIGNydGMpOworCQlpZiAocmV0KSB7CisJCQlkcm1fZnJlZSh2Ymxfc2lnLCBzaXplb2Yoc3RydWN0IGRybV92Ymxfc2lnKSwKKwkJCQkgRFJNX01FTV9EUklWRVIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWF0b21pY19pbmMoJmRldi0+dmJsX3NpZ25hbF9wZW5kaW5nKTsKIAogCQl2Ymxfc2lnLT5zZXF1ZW5jZSA9IHZibHdhaXQtPnJlcXVlc3Quc2VxdWVuY2U7CiAJCXZibF9zaWctPmluZm8uc2lfc2lnbm8gPSB2Ymx3YWl0LT5yZXF1ZXN0LnNpZ25hbDsKQEAgLTMyNywyMCArNjE1LDI5IEBACiAKIAkJdmJsd2FpdC0+cmVwbHkuc2VxdWVuY2UgPSBzZXE7CiAJfSBlbHNlIHsKLQkJaWYgKGZsYWdzICYgX0RSTV9WQkxBTktfU0VDT05EQVJZKSB7Ci0JCQlpZiAoZGV2LT5kcml2ZXItPnZibGFua193YWl0MikKLQkJCQlyZXQgPSBkZXYtPmRyaXZlci0+dmJsYW5rX3dhaXQyKGRldiwgJnZibHdhaXQtPnJlcXVlc3Quc2VxdWVuY2UpOwotCQl9IGVsc2UgaWYgKGRldi0+ZHJpdmVyLT52Ymxhbmtfd2FpdCkKLQkJCXJldCA9Ci0JCQkgICAgZGV2LT5kcml2ZXItPnZibGFua193YWl0KGRldiwKLQkJCQkJCSAgICAgJnZibHdhaXQtPnJlcXVlc3Quc2VxdWVuY2UpOworCQlEUk1fREVCVUcoIndhaXRpbmcgb24gdmJsYW5rIGNvdW50ICVkLCBjcnRjICVkXG4iLAorCQkJICB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlLCBjcnRjKTsKKwkJRFJNX1dBSVRfT04ocmV0LCBkZXYtPnZibF9xdWV1ZVtjcnRjXSwgMyAqIERSTV9IWiwKKwkJCSAgICAoKGRybV92YmxhbmtfY291bnQoZGV2LCBjcnRjKQorCQkJICAgICAgLSB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKIAotCQlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7Ci0JCXZibHdhaXQtPnJlcGx5LnR2YWxfc2VjID0gbm93LnR2X3NlYzsKLQkJdmJsd2FpdC0+cmVwbHkudHZhbF91c2VjID0gbm93LnR2X3VzZWM7CisJCWlmIChyZXQgIT0gLUVJTlRSKSB7CisJCQlzdHJ1Y3QgdGltZXZhbCBub3c7CisKKwkJCWRvX2dldHRpbWVvZmRheSgmbm93KTsKKworCQkJdmJsd2FpdC0+cmVwbHkudHZhbF9zZWMgPSBub3cudHZfc2VjOworCQkJdmJsd2FpdC0+cmVwbHkudHZhbF91c2VjID0gbm93LnR2X3VzZWM7CisJCQl2Ymx3YWl0LT5yZXBseS5zZXF1ZW5jZSA9IGRybV92YmxhbmtfY291bnQoZGV2LCBjcnRjKTsKKwkJCURSTV9ERUJVRygicmV0dXJuaW5nICVkIHRvIGNsaWVudFxuIiwKKwkJCQkgIHZibHdhaXQtPnJlcGx5LnNlcXVlbmNlKTsKKwkJfSBlbHNlIHsKKwkJCURSTV9ERUJVRygidmJsYW5rIHdhaXQgaW50ZXJydXB0ZWQgYnkgc2lnbmFsXG4iKTsKKwkJfQogCX0KIAotICAgICAgZG9uZToKK2RvbmU6CisJZHJtX3ZibGFua19wdXQoZGV2LCBjcnRjKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNDgsNDQgKzY0NSw1NyBAQAogICogU2VuZCB0aGUgVkJMQU5LIHNpZ25hbHMuCiAgKgogICogXHBhcmFtIGRldiBEUk0gZGV2aWNlLgorICogXHBhcmFtIGNydGMgQ1JUQyB3aGVyZSB0aGUgdmJsYW5rIGV2ZW50IG9jY3VycmVkCiAgKgogICogU2VuZHMgYSBzaWduYWwgZm9yIGVhY2ggdGFzayBpbiBkcm1fZGV2aWNlOjp2Ymxfc2lncyBhbmQgZW1wdGllcyB0aGUgbGlzdC4KICAqCiAgKiBJZiBhIHNpZ25hbCBpcyBub3QgcmVxdWVzdGVkLCB0aGVuIGNhbGxzIHZibGFua193YWl0KCkuCiAgKi8KLXZvaWQgZHJtX3ZibF9zZW5kX3NpZ25hbHMoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdm9pZCBkcm1fdmJsX3NlbmRfc2lnbmFscyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKIHsKKwlzdHJ1Y3QgZHJtX3ZibF9zaWcgKnZibF9zaWcsICp0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqdmJsX3NpZ3M7CisJdW5zaWduZWQgaW50IHZibF9zZXE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBmbGFncyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1fdmJsX3NpZyAqdmJsX3NpZywgKnRtcDsKLQkJc3RydWN0IGxpc3RfaGVhZCAqdmJsX3NpZ3MgPSBpID8gJmRldi0+dmJsX3NpZ3MyIDogJmRldi0+dmJsX3NpZ3M7Ci0JCXVuc2lnbmVkIGludCB2Ymxfc2VxID0gYXRvbWljX3JlYWQoaSA/ICZkZXYtPnZibF9yZWNlaXZlZDIgOgotCQkJCQkJICAgJmRldi0+dmJsX3JlY2VpdmVkKTsKKwl2Ymxfc2lncyA9ICZkZXYtPnZibF9zaWdzW2NydGNdOworCXZibF9zZXEgPSBkcm1fdmJsYW5rX2NvdW50KGRldiwgY3J0Yyk7CiAKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZibF9zaWcsIHRtcCwgdmJsX3NpZ3MsIGhlYWQpIHsKLQkJCWlmICgodmJsX3NlcSAtIHZibF9zaWctPnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpIHsKLQkJCQl2Ymxfc2lnLT5pbmZvLnNpX2NvZGUgPSB2Ymxfc2VxOwotCQkJCXNlbmRfc2lnX2luZm8odmJsX3NpZy0+aW5mby5zaV9zaWdubywKLQkJCQkJICAgICAgJnZibF9zaWctPmluZm8sIHZibF9zaWctPnRhc2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2Ymxfc2lnLCB0bXAsIHZibF9zaWdzLCBoZWFkKSB7CisJICAgIGlmICgodmJsX3NlcSAtIHZibF9zaWctPnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpIHsKKwkJdmJsX3NpZy0+aW5mby5zaV9jb2RlID0gdmJsX3NlcTsKKwkJc2VuZF9zaWdfaW5mbyh2Ymxfc2lnLT5pbmZvLnNpX3NpZ25vLAorCQkJICAgICAgJnZibF9zaWctPmluZm8sIHZibF9zaWctPnRhc2spOwogCi0JCQkJbGlzdF9kZWwoJnZibF9zaWctPmhlYWQpOworCQlsaXN0X2RlbCgmdmJsX3NpZy0+aGVhZCk7CiAKLQkJCQlkcm1fZnJlZSh2Ymxfc2lnLCBzaXplb2YoKnZibF9zaWcpLAotCQkJCQkgRFJNX01FTV9EUklWRVIpOwotCi0JCQkJZGV2LT52YmxfcGVuZGluZy0tOwotCQkJfQotCQl9CisJCWRybV9mcmVlKHZibF9zaWcsIHNpemVvZigqdmJsX3NpZyksCisJCQkgRFJNX01FTV9EUklWRVIpOworCQlhdG9taWNfZGVjKCZkZXYtPnZibF9zaWduYWxfcGVuZGluZyk7CisJCWRybV92YmxhbmtfcHV0KGRldiwgY3J0Yyk7CisJICAgIH0KIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBmbGFncyk7CiB9CiAKLUVYUE9SVF9TWU1CT0woZHJtX3ZibF9zZW5kX3NpZ25hbHMpOworLyoqCisgKiBkcm1faGFuZGxlX3ZibGFuayAtIGhhbmRsZSBhIHZibGFuayBldmVudAorICogQGRldjogRFJNIGRldmljZQorICogQGNydGM6IHdoZXJlIHRoaXMgZXZlbnQgb2NjdXJyZWQKKyAqCisgKiBEcml2ZXJzIHNob3VsZCBjYWxsIHRoaXMgcm91dGluZSBpbiB0aGVpciB2YmxhbmsgaW50ZXJydXB0IGhhbmRsZXJzIHRvCisgKiB1cGRhdGUgdGhlIHZibGFuayBjb3VudGVyIGFuZCBzZW5kIGFueSBzaWduYWxzIHRoYXQgbWF5IGJlIHBlbmRpbmcuCisgKi8KK3ZvaWQgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJYXRvbWljX2luYygmZGV2LT5fdmJsYW5rX2NvdW50W2NydGNdKTsKKwlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZVtjcnRjXSk7CisJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2LCBjcnRjKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2hhbmRsZV92YmxhbmspOwogCiAvKioKICAqIFRhc2tsZXQgd3JhcHBlciBmdW5jdGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWVtb3J5LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jCmluZGV4IDAxNzcwMTIuLjgwM2JjOWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWVtb3J5LmMKQEAgLTEzMyw2ICsxMzMsNyBAQAogewogCXJldHVybiBkcm1fYWdwX2ZyZWVfbWVtb3J5KGhhbmRsZSkgPyAwIDogLUVJTlZBTDsKIH0KK0VYUE9SVF9TWU1CT0woZHJtX2ZyZWVfYWdwKTsKIAogLyoqIFdyYXBwZXIgYXJvdW5kIGFncF9iaW5kX21lbW9yeSgpICovCiBpbnQgZHJtX2JpbmRfYWdwKERSTV9BR1BfTUVNICogaGFuZGxlLCB1bnNpZ25lZCBpbnQgc3RhcnQpCkBAIC0xNDUsNiArMTQ2LDcgQEAKIHsKIAlyZXR1cm4gZHJtX2FncF91bmJpbmRfbWVtb3J5KGhhbmRsZSk7CiB9CitFWFBPUlRfU1lNQk9MKGRybV91bmJpbmRfYWdwKTsKIAogI2Vsc2UgIC8qICBfX09TX0hBU19BR1AgICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKmFncF9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCmluZGV4IGRjZmY5ZTkuLjIxN2FkN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKQEAgLTE2OSw2ICsxNjksNyBAQAogCiAJcmV0dXJuIGNoaWxkOwogfQorRVhQT1JUX1NZTUJPTChkcm1fbW1fZ2V0X2Jsb2NrKTsKIAogLyoKICAqIFB1dCBhIGJsb2NrLiBNZXJnZSB3aXRoIHRoZSBwcmV2aW91cyBhbmQgLyBvciBuZXh0IGJsb2NrIGlmIHRoZXkgYXJlIGZyZWUuCkBAIC0yMTcsNiArMjE4LDcgQEAKIAkJZHJtX2ZyZWUoY3VyLCBzaXplb2YoKmN1ciksIERSTV9NRU1fTU0pOwogCX0KIH0KK0VYUE9SVF9TWU1CT0woZHJtX21tX3B1dF9ibG9jayk7CiAKIHN0cnVjdCBkcm1fbW1fbm9kZSAqZHJtX21tX3NlYXJjaF9mcmVlKGNvbnN0IHN0cnVjdCBkcm1fbW0gKiBtbSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKQEAgLTI2NSw2ICsyNjcsNyBAQAogCiAJcmV0dXJuIChoZWFkLT5uZXh0LT5uZXh0ID09IGhlYWQpOwogfQorRVhQT1JUX1NZTUJPTChkcm1fbW1fc2VhcmNoX2ZyZWUpOwogCiBpbnQgZHJtX21tX2luaXQoc3RydWN0IGRybV9tbSAqIG1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CkBAIC0yNzMsNyArMjc2LDcgQEAKIAogCXJldHVybiBkcm1fbW1fY3JlYXRlX3RhaWxfbm9kZShtbSwgc3RhcnQsIHNpemUpOwogfQotCitFWFBPUlRfU1lNQk9MKGRybV9tbV9pbml0KTsKIAogdm9pZCBkcm1fbW1fdGFrZWRvd24oc3RydWN0IGRybV9tbSAqIG1tKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYwppbmRleCA5M2IxZTA0Li5kNDkwZGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYwpAQCAtNDksNiArNDksMTAgQEAKIAkJCSAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CiBzdGF0aWMgaW50IGRybV9idWZzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKIAkJCSBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOworc3RhdGljIGludCBkcm1fZ2VtX25hbWVfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOworc3RhdGljIGludCBkcm1fZ2VtX29iamVjdF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKICNpZiBEUk1fREVCVUdfQ09ERQogc3RhdGljIGludCBkcm1fdm1hX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKIAkJCWludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CkBAIC02MCwxMyArNjQsMTYgQEAKIHN0YXRpYyBzdHJ1Y3QgZHJtX3Byb2NfbGlzdCB7CiAJY29uc3QgY2hhciAqbmFtZTsJLyoqPCBmaWxlIG5hbWUgKi8KIAlpbnQgKCpmKSAoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsJCS8qKjwgcHJvYyBjYWxsYmFjayovCisJdTMyIGRyaXZlcl9mZWF0dXJlczsgLyoqPCBSZXF1aXJlZCBkcml2ZXIgZmVhdHVyZXMgZm9yIHRoaXMgZW50cnkgKi8KIH0gZHJtX3Byb2NfbGlzdFtdID0gewotCXsibmFtZSIsIGRybV9uYW1lX2luZm99LAotCXsibWVtIiwgZHJtX21lbV9pbmZvfSwKLQl7InZtIiwgZHJtX3ZtX2luZm99LAotCXsiY2xpZW50cyIsIGRybV9jbGllbnRzX2luZm99LAotCXsicXVldWVzIiwgZHJtX3F1ZXVlc19pbmZvfSwKLQl7ImJ1ZnMiLCBkcm1fYnVmc19pbmZvfSwKKwl7Im5hbWUiLCBkcm1fbmFtZV9pbmZvLCAwfSwKKwl7Im1lbSIsIGRybV9tZW1faW5mbywgMH0sCisJeyJ2bSIsIGRybV92bV9pbmZvLCAwfSwKKwl7ImNsaWVudHMiLCBkcm1fY2xpZW50c19pbmZvLCAwfSwKKwl7InF1ZXVlcyIsIGRybV9xdWV1ZXNfaW5mbywgMH0sCisJeyJidWZzIiwgZHJtX2J1ZnNfaW5mbywgMH0sCisJeyJnZW1fbmFtZXMiLCBkcm1fZ2VtX25hbWVfaW5mbywgRFJJVkVSX0dFTX0sCisJeyJnZW1fb2JqZWN0cyIsIGRybV9nZW1fb2JqZWN0X2luZm8sIERSSVZFUl9HRU19LAogI2lmIERSTV9ERUJVR19DT0RFCiAJeyJ2bWEiLCBkcm1fdm1hX2luZm99LAogI2VuZGlmCkBAIC05MCw4ICs5Nyw5IEBACiBpbnQgZHJtX3Byb2NfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vciwgaW50IG1pbm9yX2lkLAogCQkgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCkKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKLQlpbnQgaSwgajsKKwlpbnQgaSwgaiwgcmV0OwogCWNoYXIgbmFtZVs2NF07CiAKIAlzcHJpbnRmKG5hbWUsICIlZCIsIG1pbm9yX2lkKTsKQEAgLTEwMiwyMyArMTEwLDQyIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IERSTV9QUk9DX0VOVFJJRVM7IGkrKykgeworCQl1MzIgZmVhdHVyZXMgPSBkcm1fcHJvY19saXN0W2ldLmRyaXZlcl9mZWF0dXJlczsKKworCQlpZiAoZmVhdHVyZXMgIT0gMCAmJgorCQkgICAgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBmZWF0dXJlcykgIT0gZmVhdHVyZXMpCisJCQljb250aW51ZTsKKwogCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShkcm1fcHJvY19saXN0W2ldLm5hbWUsCiAJCQkJCVNfSUZSRUcgfCBTX0lSVUdPLCBtaW5vci0+ZGV2X3Jvb3QpOwogCQlpZiAoIWVudCkgewogCQkJRFJNX0VSUk9SKCJDYW5ub3QgY3JlYXRlIC9wcm9jL2RyaS8lcy8lc1xuIiwKIAkJCQkgIG5hbWUsIGRybV9wcm9jX2xpc3RbaV0ubmFtZSk7Ci0JCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQotCQkJCXJlbW92ZV9wcm9jX2VudHJ5KGRybV9wcm9jX2xpc3RbaV0ubmFtZSwKLQkJCQkJCSAgbWlub3ItPmRldl9yb290KTsKLQkJCXJlbW92ZV9wcm9jX2VudHJ5KG5hbWUsIHJvb3QpOwotCQkJbWlub3ItPmRldl9yb290ID0gTlVMTDsKLQkJCXJldHVybiAtMTsKKwkJCXJldCA9IC0xOworCQkJZ290byBmYWlsOwogCQl9CiAJCWVudC0+cmVhZF9wcm9jID0gZHJtX3Byb2NfbGlzdFtpXS5mOwogCQllbnQtPmRhdGEgPSBtaW5vcjsKIAl9CiAKKwlpZiAoZGV2LT5kcml2ZXItPnByb2NfaW5pdCkgeworCQlyZXQgPSBkZXYtPmRyaXZlci0+cHJvY19pbml0KG1pbm9yKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJEUk06IERyaXZlciBmYWlsZWQgdG8gaW5pdGlhbGl6ZSAiCisJCQkJICAiL3Byb2MvZHJpLlxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKKyBmYWlsOgorCisJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJcmVtb3ZlX3Byb2NfZW50cnkoZHJtX3Byb2NfbGlzdFtpXS5uYW1lLAorCQkJCSAgbWlub3ItPmRldl9yb290KTsKKwlyZW1vdmVfcHJvY19lbnRyeShuYW1lLCByb290KTsKKwltaW5vci0+ZGV2X3Jvb3QgPSBOVUxMOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMTMzLDEyICsxNjAsMTYgQEAKICAqLwogaW50IGRybV9wcm9jX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCkKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKIAlpbnQgaTsKIAljaGFyIG5hbWVbNjRdOwogCiAJaWYgKCFyb290IHx8ICFtaW5vci0+ZGV2X3Jvb3QpCiAJCXJldHVybiAwOwogCisJaWYgKGRldi0+ZHJpdmVyLT5wcm9jX2NsZWFudXApCisJCWRldi0+ZHJpdmVyLT5wcm9jX2NsZWFudXAobWlub3IpOworCiAJZm9yIChpID0gMDsgaSA8IERSTV9QUk9DX0VOVFJJRVM7IGkrKykKIAkJcmVtb3ZlX3Byb2NfZW50cnkoZHJtX3Byb2NfbGlzdFtpXS5uYW1lLCBtaW5vci0+ZGV2X3Jvb3QpOwogCXNwcmludGYobmFtZSwgIiVkIiwgbWlub3ItPmluZGV4KTsKQEAgLTQ4MCw2ICs1MTEsODQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdHJ1Y3QgZHJtX2dlbV9uYW1lX2luZm9fZGF0YSB7CisgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbGVuOworICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICpidWY7CisgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZW9mOworfTsKKworc3RhdGljIGludCBkcm1fZ2VtX29uZV9uYW1lX2luZm8oaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBwdHI7CisJc3RydWN0IGRybV9nZW1fbmFtZV9pbmZvX2RhdGEgICAqbmlkID0gZGF0YTsKKworCURSTV9JTkZPKCJuYW1lICVkIHNpemUgJWRcbiIsIG9iai0+bmFtZSwgb2JqLT5zaXplKTsKKwlpZiAobmlkLT5lb2YpCisJCXJldHVybiAwOworCisJbmlkLT5sZW4gKz0gc3ByaW50ZigmbmlkLT5idWZbbmlkLT5sZW5dLAorCQkJICAgICIlNmQlOWQlOGQlOWRcbiIsCisJCQkgICAgb2JqLT5uYW1lLCBvYmotPnNpemUsCisJCQkgICAgYXRvbWljX3JlYWQoJm9iai0+aGFuZGxlY291bnQucmVmY291bnQpLAorCQkJICAgIGF0b21pY19yZWFkKCZvYmotPnJlZmNvdW50LnJlZmNvdW50KSk7CisJaWYgKG5pZC0+bGVuID4gRFJNX1BST0NfTElNSVQpIHsKKwkJbmlkLT5lb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHJtX2dlbV9uYW1lX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2dlbV9uYW1lX2luZm9fZGF0YSBuaWQ7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCW5pZC5sZW4gPSBzcHJpbnRmKGJ1ZiwgIiAgbmFtZSAgICAgc2l6ZSBoYW5kbGVzIHJlZmNvdW50XG4iKTsKKwluaWQuYnVmID0gYnVmOworCW5pZC5lb2YgPSAwOworCWlkcl9mb3JfZWFjaCgmZGV2LT5vYmplY3RfbmFtZV9pZHIsIGRybV9nZW1fb25lX25hbWVfaW5mbywgJm5pZCk7CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJaWYgKG5pZC5sZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbmlkLmxlbiAtIG9mZnNldDsKK30KKworc3RhdGljIGludCBkcm1fZ2VtX29iamVjdF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlpbnQgbGVuID0gMDsKKworCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgeworCQkqZW9mID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOworCSplb2YgPSAwOworCURSTV9QUk9DX1BSSU5UKCIlZCBvYmplY3RzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5vYmplY3RfY291bnQpKTsKKwlEUk1fUFJPQ19QUklOVCgiJWQgb2JqZWN0IGJ5dGVzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5vYmplY3RfbWVtb3J5KSk7CisJRFJNX1BST0NfUFJJTlQoIiVkIHBpbm5lZFxuIiwgYXRvbWljX3JlYWQoJmRldi0+cGluX2NvdW50KSk7CisJRFJNX1BST0NfUFJJTlQoIiVkIHBpbiBieXRlc1xuIiwgYXRvbWljX3JlYWQoJmRldi0+cGluX21lbW9yeSkpOworCURSTV9QUk9DX1BSSU5UKCIlZCBndHQgYnl0ZXNcbiIsIGF0b21pY19yZWFkKCZkZXYtPmd0dF9tZW1vcnkpKTsKKwlEUk1fUFJPQ19QUklOVCgiJWQgZ3R0IHRvdGFsXG4iLCBkZXYtPmd0dF90b3RhbCk7CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKICNpZiBEUk1fREVCVUdfQ09ERQogCiBzdGF0aWMgaW50IGRybV9fdm1hX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jCmluZGV4IGMyZjU4NGYuLjE0MWUzMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jCkBAIC0xMDcsNyArMTA3LDYgQEAKICNpZmRlZiBfX2FscGhhX18KIAlkZXYtPmhvc2UgPSBwZGV2LT5zeXNkYXRhOwogI2VuZGlmCi0JZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKIAlpZiAoZHJtX2h0X2NyZWF0ZSgmZGV2LT5tYXBfaGFzaCwgMTIpKSB7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTUyLDYgKzE1MSwxNSBAQAogCQlnb3RvIGVycm9yX291dF91bnJlZzsKIAl9CiAKKwlpZiAoZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSB7CisJCXJldGNvZGUgPSBkcm1fZ2VtX2luaXQoZGV2KTsKKwkJaWYgKHJldGNvZGUpIHsKKwkJCURSTV9FUlJPUigiQ2Fubm90IGluaXRpYWxpemUgZ3JhcGhpY3MgZXhlY3V0aW9uICIKKwkJCQkgICJtYW5hZ2VyIChHRU0pXG4iKTsKKwkJCWdvdG8gZXJyb3Jfb3V0X3VucmVnOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiAKICAgICAgIGVycm9yX291dF91bnJlZzoKQEAgLTMxNyw2ICszMjUsNyBAQAogaW50IGRybV9wdXRfbWlub3Ioc3RydWN0IGRybV9taW5vciAqKm1pbm9yX3ApCiB7CiAJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAqbWlub3JfcDsKKwogCURSTV9ERUJVRygicmVsZWFzZSBzZWNvbmRhcnkgbWlub3IgJWRcbiIsIG1pbm9yLT5pbmRleCk7CiAKIAlpZiAobWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0xFR0FDWSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwppbmRleCBhZjIxMWEwLi4xNjExYjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCkBAIC0xODQsNyArMTg0LDcgQEAKIGVycl9vdXRfZmlsZXM6CiAJaWYgKGkgPiAwKQogCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQotCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZtaW5vci0+a2RldiwgJmRldmljZV9hdHRyc1tpXSk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm1pbm9yLT5rZGV2LCAmZGV2aWNlX2F0dHJzW2pdKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmbWlub3ItPmtkZXYpOwogZXJyX291dDoKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCBhOWU2MDQ2Li41YmE3OGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMyw3ICszLDEyIEBACiAjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkgaW4gWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyLgogCiBjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQotaTkxNS15IDo9IGk5MTVfZHJ2Lm8gaTkxNV9kbWEubyBpOTE1X2lycS5vIGk5MTVfbWVtLm8KK2k5MTUteSA6PSBpOTE1X2Rydi5vIGk5MTVfZG1hLm8gaTkxNV9pcnEubyBpOTE1X21lbS5vIGk5MTVfb3ByZWdpb24ubyBcCisgICAgICAgICAgaTkxNV9zdXNwZW5kLm8gXAorCSAgaTkxNV9nZW0ubyBcCisJICBpOTE1X2dlbV9kZWJ1Zy5vIFwKKwkgIGk5MTVfZ2VtX3Byb2MubyBcCisJICBpOTE1X2dlbV90aWxpbmcubwogCiBpOTE1LSQoQ09ORklHX0NPTVBBVCkgICArPSBpOTE1X2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggODg5NzQzNC4uZGIzNDc4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC00MCw0MCArNDAsOTYgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1faTkxNV9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJihkZXZfcHJpdi0+cmluZyk7Ci0JdTMyIGxhc3RfaGVhZCA9IEk5MTVfUkVBRChMUF9SSU5HICsgUklOR19IRUFEKSAmIEhFQURfQUREUjsKKwl1MzIgYWN0aGRfcmVnID0gSVNfSTk2NUcoZGV2KSA/IEFDVEhEX0k5NjUgOiBBQ1RIRDsKKwl1MzIgbGFzdF9hY3RoZCA9IEk5MTVfUkVBRChhY3RoZF9yZWcpOworCXUzMiBhY3RoZDsKKwl1MzIgbGFzdF9oZWFkID0gSTkxNV9SRUFEKFBSQjBfSEVBRCkgJiBIRUFEX0FERFI7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewotCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEKExQX1JJTkcgKyBSSU5HX0hFQUQpICYgSEVBRF9BRERSOworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEKFBSQjBfSEVBRCkgJiBIRUFEX0FERFI7CisJCWFjdGhkID0gSTkxNV9SRUFEKGFjdGhkX3JlZyk7CiAJCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIChyaW5nLT50YWlsICsgOCk7CiAJCWlmIChyaW5nLT5zcGFjZSA8IDApCiAJCQlyaW5nLT5zcGFjZSArPSByaW5nLT5TaXplOwogCQlpZiAocmluZy0+c3BhY2UgPj0gbikKIAkJCXJldHVybiAwOwogCi0JCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CisJCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CiAKIAkJaWYgKHJpbmctPmhlYWQgIT0gbGFzdF9oZWFkKQogCQkJaSA9IDA7CisJCWlmIChhY3RoZCAhPSBsYXN0X2FjdGhkKQorCQkJaSA9IDA7CiAKIAkJbGFzdF9oZWFkID0gcmluZy0+aGVhZDsKKwkJbGFzdF9hY3RoZCA9IGFjdGhkOworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisKIAl9CiAKIAlyZXR1cm4gLUVCVVNZOwogfQogCisvKioKKyAqIFNldHMgdXAgdGhlIGhhcmR3YXJlIHN0YXR1cyBwYWdlIGZvciBkZXZpY2VzIHRoYXQgbmVlZCBhIHBoeXNpY2FsIGFkZHJlc3MKKyAqIGluIHRoZSByZWdpc3Rlci4KKyAqLworc3RhdGljIGludCBpOTE1X2luaXRfcGh5c19od3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwkvKiBQcm9ncmFtIEhhcmR3YXJlIFN0YXR1cyBQYWdlICovCisJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPQorCQlkcm1fcGNpX2FsbG9jKGRldiwgUEFHRV9TSVpFLCBQQUdFX1NJWkUsIDB4ZmZmZmZmZmYpOworCisJaWYgKCFkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCkgeworCQlEUk1fRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID0gZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWgtPnZhZGRyOworCWRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UgPSBkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haC0+YnVzYWRkcjsKKworCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7CisKKwlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UpOworCURSTV9ERUJVRygiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogRnJlZXMgdGhlIGhhcmR3YXJlIHN0YXR1cyBwYWdlLCB3aGV0aGVyIGl0J3MgYSBwaHlzaWNhbCBhZGRyZXNzIG9yIGEgdmlydHVhbAorICogYWRkcmVzcyBzZXQgdXAgYnkgdGhlIFggU2VydmVyLgorICovCitzdGF0aWMgdm9pZCBpOTE1X2ZyZWVfaHdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKSB7CisJCWRybV9wY2lfZnJlZShkZXYsIGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKTsKKwkJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPSBOVUxMOworCX0KKworCWlmIChkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKSB7CisJCWRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIgPSAwOworCQlkcm1fY29yZV9pb3JlbWFwZnJlZSgmZGV2X3ByaXYtPmh3c19tYXAsIGRldik7CisJfQorCisJLyogTmVlZCB0byByZXdyaXRlIGhhcmR3YXJlIHN0YXR1cyBwYWdlICovCisJSTkxNV9XUklURShIV1NfUEdBLCAweDFmZmZmMDAwKTsKK30KKwogdm9pZCBpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k5MTVfcmluZ19idWZmZXJfdCAqcmluZyA9ICYoZGV2X3ByaXYtPnJpbmcpOwogCi0JcmluZy0+aGVhZCA9IEk5MTVfUkVBRChMUF9SSU5HICsgUklOR19IRUFEKSAmIEhFQURfQUREUjsKLQlyaW5nLT50YWlsID0gSTkxNV9SRUFEKExQX1JJTkcgKyBSSU5HX1RBSUwpICYgVEFJTF9BRERSOworCXJpbmctPmhlYWQgPSBJOTE1X1JFQUQoUFJCMF9IRUFEKSAmIEhFQURfQUREUjsKKwlyaW5nLT50YWlsID0gSTkxNV9SRUFEKFBSQjBfVEFJTCkgJiBUQUlMX0FERFI7CiAJcmluZy0+c3BhY2UgPSByaW5nLT5oZWFkIC0gKHJpbmctPnRhaWwgKyA4KTsKIAlpZiAocmluZy0+c3BhY2UgPCAwKQogCQlyaW5nLT5zcGFjZSArPSByaW5nLT5TaXplOwogCi0JaWYgKHJpbmctPmhlYWQgPT0gcmluZy0+dGFpbCkKKwlpZiAocmluZy0+aGVhZCA9PSByaW5nLT50YWlsICYmIGRldl9wcml2LT5zYXJlYV9wcml2KQogCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9SSU5HX0VNUFRZOwogfQogCkBAIC04NCwyOCArMTQwLDE5IEBACiAJICogbWF5IG5vdCBoYXZlIGJlZW4gY2FsbGVkIGZyb20gdXNlcnNwYWNlIGFuZCBhZnRlciBkZXZfcHJpdmF0ZQogCSAqIGlzIGZyZWVkLCBpdCdzIHRvbyBsYXRlLgogCSAqLwotCWlmIChkZXYtPmlycSkKKwlpZiAoZGV2LT5pcnFfZW5hYmxlZCkKIAkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKIAogCWlmIChkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0KSB7CiAJCWRybV9jb3JlX2lvcmVtYXBmcmVlKCZkZXZfcHJpdi0+cmluZy5tYXAsIGRldik7Ci0JCWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPSAwOwotCQlkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID0gMDsKKwkJZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCA9IE5VTEw7CisJCWRldl9wcml2LT5yaW5nLm1hcC5oYW5kbGUgPSBOVUxMOwogCQlkZXZfcHJpdi0+cmluZy5tYXAuc2l6ZSA9IDA7CiAJfQogCi0JaWYgKGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKSB7Ci0JCWRybV9wY2lfZnJlZShkZXYsIGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKTsKLQkJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPSBOVUxMOwotCQkvKiBOZWVkIHRvIHJld3JpdGUgaGFyZHdhcmUgc3RhdHVzIHBhZ2UgKi8KLQkJSTkxNV9XUklURSgweDAyMDgwLCAweDFmZmZmMDAwKTsKLQl9Ci0KLQlpZiAoZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcikgewotCQlkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyID0gMDsKLQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoJmRldl9wcml2LT5od3NfbWFwLCBkZXYpOwotCQlJOTE1X1dSSVRFKDB4MjA4MCwgMHgxZmZmZjAwMCk7Ci0JfQorCS8qIENsZWFyIHRoZSBIV1MgdmlydHVhbCBhZGRyZXNzIGF0IHRlYXJkb3duICovCisJaWYgKEk5MTVfTkVFRF9HRlhfSFdTKGRldikpCisJCWk5MTVfZnJlZV9od3MoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIxLDM0ICsxNjgsMzQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGV2X3ByaXYtPm1taW9fbWFwID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPm1taW9fb2Zmc2V0KTsKLQlpZiAoIWRldl9wcml2LT5tbWlvX21hcCkgewotCQlpOTE1X2RtYV9jbGVhbnVwKGRldik7Ci0JCURSTV9FUlJPUigiY2FuIG5vdCBmaW5kIG1taW8gbWFwIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWRldl9wcml2LT5zYXJlYV9wcml2ID0gKGRybV9pOTE1X3NhcmVhX3QgKikKIAkgICAgKCh1OCAqKSBkZXZfcHJpdi0+c2FyZWEtPmhhbmRsZSArIGluaXQtPnNhcmVhX3ByaXZfb2Zmc2V0KTsKIAotCWRldl9wcml2LT5yaW5nLlN0YXJ0ID0gaW5pdC0+cmluZ19zdGFydDsKLQlkZXZfcHJpdi0+cmluZy5FbmQgPSBpbml0LT5yaW5nX2VuZDsKLQlkZXZfcHJpdi0+cmluZy5TaXplID0gaW5pdC0+cmluZ19zaXplOwotCWRldl9wcml2LT5yaW5nLnRhaWxfbWFzayA9IGRldl9wcml2LT5yaW5nLlNpemUgLSAxOworCWlmIChpbml0LT5yaW5nX3NpemUgIT0gMCkgeworCQlpZiAoZGV2X3ByaXYtPnJpbmcucmluZ19vYmogIT0gTlVMTCkgeworCQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOworCQkJRFJNX0VSUk9SKCJDbGllbnQgdHJpZWQgdG8gaW5pdGlhbGl6ZSByaW5nYnVmZmVyIGluICIKKwkJCQkgICJHRU0gbW9kZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCi0JZGV2X3ByaXYtPnJpbmcubWFwLm9mZnNldCA9IGluaXQtPnJpbmdfc3RhcnQ7Ci0JZGV2X3ByaXYtPnJpbmcubWFwLnNpemUgPSBpbml0LT5yaW5nX3NpemU7Ci0JZGV2X3ByaXYtPnJpbmcubWFwLnR5cGUgPSAwOwotCWRldl9wcml2LT5yaW5nLm1hcC5mbGFncyA9IDA7Ci0JZGV2X3ByaXYtPnJpbmcubWFwLm10cnIgPSAwOworCQlkZXZfcHJpdi0+cmluZy5TaXplID0gaW5pdC0+cmluZ19zaXplOworCQlkZXZfcHJpdi0+cmluZy50YWlsX21hc2sgPSBkZXZfcHJpdi0+cmluZy5TaXplIC0gMTsKIAotCWRybV9jb3JlX2lvcmVtYXAoJmRldl9wcml2LT5yaW5nLm1hcCwgZGV2KTsKKwkJZGV2X3ByaXYtPnJpbmcubWFwLm9mZnNldCA9IGluaXQtPnJpbmdfc3RhcnQ7CisJCWRldl9wcml2LT5yaW5nLm1hcC5zaXplID0gaW5pdC0+cmluZ19zaXplOworCQlkZXZfcHJpdi0+cmluZy5tYXAudHlwZSA9IDA7CisJCWRldl9wcml2LT5yaW5nLm1hcC5mbGFncyA9IDA7CisJCWRldl9wcml2LT5yaW5nLm1hcC5tdHJyID0gMDsKIAotCWlmIChkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID09IE5VTEwpIHsKLQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOwotCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgotCQkJICAiIHJpbmcgYnVmZmVyXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWRybV9jb3JlX2lvcmVtYXAoJmRldl9wcml2LT5yaW5nLm1hcCwgZGV2KTsKKworCQlpZiAoZGV2X3ByaXYtPnJpbmcubWFwLmhhbmRsZSA9PSBOVUxMKSB7CisJCQlpOTE1X2RtYV9jbGVhbnVwKGRldik7CisJCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgorCQkJCSAgIiByaW5nIGJ1ZmZlclxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCX0KIAogCWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPSBkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlOwpAQCAtMTU5LDM0ICsyMDYsMTAgQEAKIAlkZXZfcHJpdi0+Y3VycmVudF9wYWdlID0gMDsKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZfY3VycmVudF9wYWdlID0gZGV2X3ByaXYtPmN1cnJlbnRfcGFnZTsKIAotCS8qIFdlIGFyZSB1c2luZyBzZXBhcmF0ZSB2YWx1ZXMgYXMgcGxhY2Vob2xkZXJzIGZvciBtZWNoYW5pc21zIGZvcgotCSAqIHByaXZhdGUgYmFja2J1ZmZlci9kZXB0aGJ1ZmZlciB1c2FnZS4KLQkgKi8KLQlkZXZfcHJpdi0+dXNlX21pX2JhdGNoYnVmZmVyX3N0YXJ0ID0gMDsKLQlpZiAoSVNfSTk2NUcoZGV2KSkgLyogOTY1IGRvZXNuJ3Qgc3VwcG9ydCBvbGRlciBtZXRob2QgKi8KLQkJZGV2X3ByaXYtPnVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydCA9IDE7Ci0KIAkvKiBBbGxvdyBoYXJkd2FyZSBiYXRjaGJ1ZmZlcnMgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLgogCSAqLwogCWRldl9wcml2LT5hbGxvd19iYXRjaGJ1ZmZlciA9IDE7CiAKLQkvKiBQcm9ncmFtIEhhcmR3YXJlIFN0YXR1cyBQYWdlICovCi0JaWYgKCFJOTE1X05FRURfR0ZYX0hXUyhkZXYpKSB7Ci0JCWRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoID0KLQkJCWRybV9wY2lfYWxsb2MoZGV2LCBQQUdFX1NJWkUsIFBBR0VfU0laRSwgMHhmZmZmZmZmZik7Ci0KLQkJaWYgKCFkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCkgewotCQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOwotCQkJRFJNX0VSUk9SKCJDYW4gbm90IGFsbG9jYXRlIGhhcmR3YXJlIHN0YXR1cyBwYWdlXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9IGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT52YWRkcjsKLQkJZGV2X3ByaXYtPmRtYV9zdGF0dXNfcGFnZSA9IGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT5idXNhZGRyOwotCi0JCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7Ci0JCUk5MTVfV1JJVEUoMHgwMjA4MCwgZGV2X3ByaXYtPmRtYV9zdGF0dXNfcGFnZSk7Ci0JfQotCURSTV9ERUJVRygiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwMSwxMSArMjI0LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFkZXZfcHJpdi0+bW1pb19tYXApIHsKLQkJRFJNX0VSUk9SKCJjYW4gbm90IGZpbmQgbW1pbyBtYXAhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJaWYgKGRldl9wcml2LT5yaW5nLm1hcC5oYW5kbGUgPT0gTlVMTCkgewogCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgogCQkJICAiIHJpbmcgYnVmZmVyXG4iKTsKQEAgLTIyMCw5ICsyMzgsOSBAQAogCURSTV9ERUJVRygiaHcgc3RhdHVzIHBhZ2UgQCAlcFxuIiwgZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKTsKIAogCWlmIChkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyICE9IDApCi0JCUk5MTVfV1JJVEUoMHgwMjA4MCwgZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcik7CisJCUk5MTVfV1JJVEUoSFdTX1BHQSwgZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcik7CiAJZWxzZQotCQlJOTE1X1dSSVRFKDB4MDIwODAsIGRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UpOworCQlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UpOwogCURSTV9ERUJVRygiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CiAKIAlyZXR1cm4gMDsKQEAgLTM2Nyw5ICszODUsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpOTE1X2VtaXRfYm94KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqIGJveGVzLAotCQkJIGludCBpLCBpbnQgRFIxLCBpbnQgRFI0KQoraW50CitpOTE1X2VtaXRfYm94KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICpib3hlcywKKwkgICAgICBpbnQgaSwgaW50IERSMSwgaW50IERSNCkKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBib3g7CkBAIC00MTUsMTQgKzQzNCwxNSBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwogCi0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9ICsrZGV2X3ByaXYtPmNvdW50ZXI7Ci0KKwlkZXZfcHJpdi0+Y291bnRlcisrOwogCWlmIChkZXZfcHJpdi0+Y291bnRlciA+IDB4N0ZGRkZGRkZVTCkKLQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyID0gMTsKKwkJZGV2X3ByaXYtPmNvdW50ZXIgPSAwOworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyOwogCiAJQkVHSU5fTFBfUklORyg0KTsKLQlPVVRfUklORyhDTURfU1RPUkVfRFdPUkRfSURYKTsKLQlPVVRfUklORygyMCk7CisJT1VUX1JJTkcoTUlfU1RPUkVfRFdPUkRfSU5ERVgpOworCU9VVF9SSU5HKDUgPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQpOwogCU9VVF9SSU5HKGRldl9wcml2LT5jb3VudGVyKTsKIAlPVVRfUklORygwKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKQEAgLTQ4Niw3ICs1MDYsNyBAQAogCQkJCXJldHVybiByZXQ7CiAJCX0KIAotCQlpZiAoZGV2X3ByaXYtPnVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydCkgeworCQlpZiAoIUlTX0k4MzAoZGV2KSAmJiAhSVNfODQ1RyhkZXYpKSB7CiAJCQlCRUdJTl9MUF9SSU5HKDIpOwogCQkJaWYgKElTX0k5NjVHKGRldikpIHsKIAkJCQlPVVRfUklORyhNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAoMiA8PCA2KSB8IE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSk7CkBAIC01MTYsMTUgKzUzNiwxOCBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwogCisJaWYgKCFkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlEUk1fREVCVUcoIiVzOiBwYWdlPSVkIHBmQ3VycmVudFBhZ2U9JWRcbiIsCi0JCSAgX19GVU5DVElPTl9fLAorCQkgIF9fZnVuY19fLAogCQkgIGRldl9wcml2LT5jdXJyZW50X3BhZ2UsCiAJCSAgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmX2N1cnJlbnRfcGFnZSk7CiAKIAlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKIAogCUJFR0lOX0xQX1JJTkcoMik7Ci0JT1VUX1JJTkcoSU5TVF9QQVJTRVJfQ0xJRU5UIHwgSU5TVF9PUF9GTFVTSCB8IElOU1RfRkxVU0hfTUFQX0NBQ0hFKTsKKwlPVVRfUklORyhNSV9GTFVTSCB8IE1JX1JFQURfRkxVU0gpOwogCU9VVF9SSU5HKDApOwogCUFEVkFOQ0VfTFBfUklORygpOwogCkBAIC01NDksOCArNTcyLDggQEAKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gZGV2X3ByaXYtPmNvdW50ZXIrKzsKIAogCUJFR0lOX0xQX1JJTkcoNCk7Ci0JT1VUX1JJTkcoQ01EX1NUT1JFX0RXT1JEX0lEWCk7Ci0JT1VUX1JJTkcoMjApOworCU9VVF9SSU5HKE1JX1NUT1JFX0RXT1JEX0lOREVYKTsKKwlPVVRfUklORyg1IDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKIAlPVVRfUklORyhkZXZfcHJpdi0+Y291bnRlcik7CiAJT1VUX1JJTkcoMCk7CiAJQURWQU5DRV9MUF9SSU5HKCk7CkBAIC01NzAsOSArNTkzLDE1IEBACiBzdGF0aWMgaW50IGk5MTVfZmx1c2hfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOworCWludCByZXQ7CiAKLQlyZXR1cm4gaTkxNV9xdWllc2NlbnQoZGV2KTsKKwlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0ID0gaTkxNV9xdWllc2NlbnQoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaTkxNV9iYXRjaGJ1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtNTkzLDE2ICs2MjIsMTkgQEAKIAlEUk1fREVCVUcoImk5MTUgYmF0Y2hidWZmZXIsIHN0YXJ0ICV4IHVzZWQgJWQgY2xpcHJlY3RzICVkXG4iLAogCQkgIGJhdGNoLT5zdGFydCwgYmF0Y2gtPnVzZWQsIGJhdGNoLT5udW1fY2xpcHJlY3RzKTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CisJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCiAJaWYgKGJhdGNoLT5udW1fY2xpcHJlY3RzICYmIERSTV9WRVJJRllBUkVBX1JFQUQoYmF0Y2gtPmNsaXByZWN0cywKIAkJCQkJCSAgICAgICBiYXRjaC0+bnVtX2NsaXByZWN0cyAqCiAJCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldCA9IGk5MTVfZGlzcGF0Y2hfYmF0Y2hidWZmZXIoZGV2LCBiYXRjaCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlzYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gKGludClod19zdGF0dXNbNV07CisJaWYgKHNhcmVhX3ByaXYpCisJCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KWh3X3N0YXR1c1s1XTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MTksNyArNjUxLDcgQEAKIAlEUk1fREVCVUcoImk5MTUgY21kYnVmZmVyLCBidWYgJXAgc3ogJWQgY2xpcHJlY3RzICVkXG4iLAogCQkgIGNtZGJ1Zi0+YnVmLCBjbWRidWYtPnN6LCBjbWRidWYtPm51bV9jbGlwcmVjdHMpOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKKwlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKIAlpZiAoY21kYnVmLT5udW1fY2xpcHJlY3RzICYmCiAJICAgIERSTV9WRVJJRllBUkVBX1JFQUQoY21kYnVmLT5jbGlwcmVjdHMsCkBAIC02MjksMjQgKzY2MSwzMyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmV0ID0gaTkxNV9kaXNwYXRjaF9jbWRidWZmZXIoZGV2LCBjbWRidWYpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJpOTE1X2Rpc3BhdGNoX2NtZGJ1ZmZlciBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KWh3X3N0YXR1c1s1XTsKKwlpZiAoc2FyZWFfcHJpdikKKwkJc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChpbnQpaHdfc3RhdHVzWzVdOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGk5MTVfZmxpcF9idWZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewotCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJaW50IHJldDsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CisJRFJNX0RFQlVHKCIlc1xuIiwgX19mdW5jX18pOwogCi0JcmV0dXJuIGk5MTVfZGlzcGF0Y2hfZmxpcChkZXYpOworCVJJTkdfTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXQgPSBpOTE1X2Rpc3BhdGNoX2ZsaXAoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaTkxNV9nZXRwYXJhbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtNjYzLDcgKzcwNCw3IEBACiAKIAlzd2l0Y2ggKHBhcmFtLT5wYXJhbSkgewogCWNhc2UgSTkxNV9QQVJBTV9JUlFfQUNUSVZFOgotCQl2YWx1ZSA9IGRldi0+aXJxID8gMSA6IDA7CisJCXZhbHVlID0gZGV2LT5wZGV2LT5pcnEgPyAxIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBJOTE1X1BBUkFNX0FMTE9XX0JBVENIQlVGRkVSOgogCQl2YWx1ZSA9IGRldl9wcml2LT5hbGxvd19iYXRjaGJ1ZmZlciA/IDEgOiAwOwpAQCAtNjcxLDYgKzcxMiwxMiBAQAogCWNhc2UgSTkxNV9QQVJBTV9MQVNUX0RJU1BBVENIOgogCQl2YWx1ZSA9IFJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7CiAJCWJyZWFrOworCWNhc2UgSTkxNV9QQVJBTV9DSElQU0VUX0lEOgorCQl2YWx1ZSA9IGRldi0+cGNpX2RldmljZTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19HRU06CisJCXZhbHVlID0gMTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJVbmtub3duIHBhcmFtZXRlciAlZFxuIiwgcGFyYW0tPnBhcmFtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02OTcsOCArNzQ0LDYgQEAKIAogCXN3aXRjaCAocGFyYW0tPnBhcmFtKSB7CiAJY2FzZSBJOTE1X1NFVFBBUkFNX1VTRV9NSV9CQVRDSEJVRkZFUl9TVEFSVDoKLQkJaWYgKCFJU19JOTY1RyhkZXYpKQotCQkJZGV2X3ByaXYtPnVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydCA9IHBhcmFtLT52YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBJOTE1X1NFVFBBUkFNX1RFWF9MUlVfTE9HX0dSQU5VTEFSSVRZOgogCQlkZXZfcHJpdi0+dGV4X2xydV9sb2dfZ3JhbnVsYXJpdHkgPSBwYXJhbS0+dmFsdWU7CkBAIC03NDksOCArNzk0LDggQEAKIAlkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgPSBkZXZfcHJpdi0+aHdzX21hcC5oYW5kbGU7CiAKIAltZW1zZXQoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlLCAwLCBQQUdFX1NJWkUpOwotCUk5MTVfV1JJVEUoMHgwMjA4MCwgZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcik7Ci0JRFJNX0RFQlVHKCJsb2FkIGh3cyAweDIwODAgd2l0aCBnZnggbWVtIDB4JXhcbiIsCisJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKKwlEUk1fREVCVUcoImxvYWQgaHdzIEhXU19QR0Egd2l0aCBnZnggbWVtIDB4JXhcbiIsCiAJCQlkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKIAlEUk1fREVCVUcoImxvYWQgaHdzIGF0ICVwXG4iLCBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpOwogCXJldHVybiAwOwpAQCAtNzc2LDE0ICs4MjEsMzggQEAKIAltZW1zZXQoZGV2X3ByaXYsIDAsIHNpemVvZihkcm1faTkxNV9wcml2YXRlX3QpKTsKIAogCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OworCWRldl9wcml2LT5kZXYgPSBkZXY7CiAKIAkvKiBBZGQgcmVnaXN0ZXIgbWFwIChuZWVkZWQgZm9yIHN1c3BlbmQvcmVzdW1lKSAqLwogCWJhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KGRldiwgbW1pb19iYXIpOwogCXNpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIG1taW9fYmFyKTsKIAotCXJldCA9IGRybV9hZGRtYXAoZGV2LCBiYXNlLCBzaXplLCBfRFJNX1JFR0lTVEVSUywKLQkJCSBfRFJNX0tFUk5FTCB8IF9EUk1fRFJJVkVSLAotCQkJICZkZXZfcHJpdi0+bW1pb19tYXApOworCWRldl9wcml2LT5yZWdzID0gaW9yZW1hcChiYXNlLCBzaXplKTsKKworCWk5MTVfZ2VtX2xvYWQoZGV2KTsKKworCS8qIEluaXQgSFdTICovCisJaWYgKCFJOTE1X05FRURfR0ZYX0hXUyhkZXYpKSB7CisJCXJldCA9IGk5MTVfaW5pdF9waHlzX2h3cyhkZXYpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIE9uIHRoZSA5NDVHL0dNLCB0aGUgY2hpcHNldCByZXBvcnRzIHRoZSBNU0kgY2FwYWJpbGl0eSBvbiB0aGUKKwkgKiBpbnRlZ3JhdGVkIGdyYXBoaWNzIGV2ZW4gdGhvdWdoIHRoZSBzdXBwb3J0IGlzbid0IGFjdHVhbGx5IHRoZXJlCisJICogYWNjb3JkaW5nIHRvIHRoZSBwdWJsaXNoZWQgc3BlY3MuICBJdCBkb2Vzbid0IGFwcGVhciB0byBmdW5jdGlvbgorCSAqIGNvcnJlY3RseSBpbiB0ZXN0aW5nIG9uIDk0NUcuCisJICogVGhpcyBtYXkgYmUgYSBzaWRlIGVmZmVjdCBvZiBNU0kgaGF2aW5nIGJlZW4gbWFkZSBhdmFpbGFibGUgZm9yIFBFRworCSAqIGFuZCB0aGUgcmVnaXN0ZXJzIGJlaW5nIGNsb3NlbHkgYXNzb2NpYXRlZC4KKwkgKi8KKwlpZiAoIUlTX0k5NDVHKGRldikgJiYgIUlTX0k5NDVHTShkZXYpKQorCQlpZiAocGNpX2VuYWJsZV9tc2koZGV2LT5wZGV2KSkKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGVuYWJsZSBNU0lcbiIpOworCisJaW50ZWxfb3ByZWdpb25faW5pdChkZXYpOworCisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT51c2VyX2lycV9sb2NrKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc5MSw4ICs4NjAsMTUgQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKGRldl9wcml2LT5tbWlvX21hcCkKLQkJZHJtX3JtbWFwKGRldiwgZGV2X3ByaXYtPm1taW9fbWFwKTsKKwlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkKKwkJcGNpX2Rpc2FibGVfbXNpKGRldi0+cGRldik7CisKKwlpOTE1X2ZyZWVfaHdzKGRldik7CisKKwlpZiAoZGV2X3ByaXYtPnJlZ3MgIT0gTlVMTCkKKwkJaW91bm1hcChkZXZfcHJpdi0+cmVncyk7CisKKwlpbnRlbF9vcHJlZ2lvbl9mcmVlKGRldik7CiAKIAlkcm1fZnJlZShkZXYtPmRldl9wcml2YXRlLCBzaXplb2YoZHJtX2k5MTVfcHJpdmF0ZV90KSwKIAkJIERSTV9NRU1fRFJJVkVSKTsKQEAgLTgwMCw2ICs4NzYsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGk5MTVfZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqaTkxNV9maWxlX3ByaXY7CisKKwlEUk1fREVCVUcoIlxuIik7CisJaTkxNV9maWxlX3ByaXYgPSAoc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqKQorCSAgICBkcm1fYWxsb2Moc2l6ZW9mKCppOTE1X2ZpbGVfcHJpdiksIERSTV9NRU1fRklMRVMpOworCisJaWYgKCFpOTE1X2ZpbGVfcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmaWxlX3ByaXYtPmRyaXZlcl9wcml2ID0gaTkxNV9maWxlX3ByaXY7CisKKwlpOTE1X2ZpbGVfcHJpdi0+bW0ubGFzdF9nZW1fc2Vxbm8gPSAwOworCWk5MTVfZmlsZV9wcml2LT5tbS5sYXN0X2dlbV90aHJvdHRsZV9zZXFubyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBpOTE1X2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC04MDcsNiArOTAyLDggQEAKIAlpZiAoIWRldl9wcml2KQogCQlyZXR1cm47CiAKKwlpOTE1X2dlbV9sYXN0Y2xvc2UoZGV2KTsKKwogCWlmIChkZXZfcHJpdi0+YWdwX2hlYXApCiAJCWk5MTVfbWVtX3Rha2Vkb3duKCYoZGV2X3ByaXYtPmFncF9oZWFwKSk7CiAKQEAgLTgxOSw2ICs5MTYsMTMgQEAKIAlpOTE1X21lbV9yZWxlYXNlKGRldiwgZmlsZV9wcml2LCBkZXZfcHJpdi0+YWdwX2hlYXApOwogfQogCit2b2lkIGk5MTVfZHJpdmVyX3Bvc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICppOTE1X2ZpbGVfcHJpdiA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7CisKKwlkcm1fZnJlZShpOTE1X2ZpbGVfcHJpdiwgc2l6ZW9mKCppOTE1X2ZpbGVfcHJpdiksIERSTV9NRU1fRklMRVMpOworfQorCiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgaTkxNV9pb2N0bHNbXSA9IHsKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0lOSVQsIGk5MTVfZG1hX2luaXQsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9GTFVTSCwgaTkxNV9mbHVzaF9pb2N0bCwgRFJNX0FVVEgpLApAQCAtODM2LDcgKzk0MCwyMyBAQAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfU0VUX1ZCTEFOS19QSVBFLCAgaTkxNV92YmxhbmtfcGlwZV9zZXQsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSApLAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VUX1ZCTEFOS19QSVBFLCAgaTkxNV92YmxhbmtfcGlwZV9nZXQsIERSTV9BVVRIICksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9WQkxBTktfU1dBUCwgaTkxNV92Ymxhbmtfc3dhcCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfSFdTX0FERFIsIGk5MTVfc2V0X3N0YXR1c19wYWdlLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9IV1NfQUREUiwgaTkxNV9zZXRfc3RhdHVzX3BhZ2UsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fSU5JVCwgaTkxNV9nZW1faW5pdF9pb2N0bCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSLCBpOTE1X2dlbV9leGVjYnVmZmVyLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fUElOLCBpOTE1X2dlbV9waW5faW9jdGwsIERSTV9BVVRIfERSTV9ST09UX09OTFkpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1VOUElOLCBpOTE1X2dlbV91bnBpbl9pb2N0bCwgRFJNX0FVVEh8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fQlVTWSwgaTkxNV9nZW1fYnVzeV9pb2N0bCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1RIUk9UVExFLCBpOTE1X2dlbV90aHJvdHRsZV9pb2N0bCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX0VOVEVSVlQsIGk5MTVfZ2VtX2VudGVydnRfaW9jdGwsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fTEVBVkVWVCwgaTkxNV9nZW1fbGVhdmV2dF9pb2N0bCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9DUkVBVEUsIGk5MTVfZ2VtX2NyZWF0ZV9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fUFJFQUQsIGk5MTVfZ2VtX3ByZWFkX2lvY3RsLCAwKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9QV1JJVEUsIGk5MTVfZ2VtX3B3cml0ZV9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fTU1BUCwgaTkxNV9nZW1fbW1hcF9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fU0VUX0RPTUFJTiwgaTkxNV9nZW1fc2V0X2RvbWFpbl9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fU1dfRklOSVNILCBpOTE1X2dlbV9zd19maW5pc2hfaW9jdGwsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1NFVF9USUxJTkcsIGk5MTVfZ2VtX3NldF90aWxpbmcsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX0dFVF9USUxJTkcsIGk5MTVfZ2VtX2dldF90aWxpbmcsIDApLAogfTsKIAogaW50IGk5MTVfbWF4X2lvY3RsID0gRFJNX0FSUkFZX1NJWkUoaTkxNV9pb2N0bHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggOTNhZWQxYy4uYTgwZWFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC0zOCwyMTEgKzM4LDkgQEAKIAlpOTE1X1BDSV9JRFMKIH07CiAKLWVudW0gcGlwZSB7Ci0gICAgUElQRV9BID0gMCwKLSAgICBQSVBFX0IsCi19OwotCi1zdGF0aWMgYm9vbCBpOTE1X3BpcGVfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKHBpcGUgPT0gUElQRV9BKQotCQlyZXR1cm4gKEk5MTVfUkVBRChEUExMX0EpICYgRFBMTF9WQ09fRU5BQkxFKTsKLQllbHNlCi0JCXJldHVybiAoSTkxNV9SRUFEKERQTExfQikgJiBEUExMX1ZDT19FTkFCTEUpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X3NhdmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGxvbmcgcmVnID0gKHBpcGUgPT0gUElQRV9BID8gUEFMRVRURV9BIDogUEFMRVRURV9CKTsKLQl1MzIgKmFycmF5OwotCWludCBpOwotCi0JaWYgKCFpOTE1X3BpcGVfZW5hYmxlZChkZXYsIHBpcGUpKQotCQlyZXR1cm47Ci0KLQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwotCWVsc2UKLQkJYXJyYXkgPSBkZXZfcHJpdi0+c2F2ZV9wYWxldHRlX2I7Ci0KLQlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJYXJyYXlbaV0gPSBJOTE1X1JFQUQocmVnICsgKGkgPDwgMikpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X3Jlc3RvcmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGxvbmcgcmVnID0gKHBpcGUgPT0gUElQRV9BID8gUEFMRVRURV9BIDogUEFMRVRURV9CKTsKLQl1MzIgKmFycmF5OwotCWludCBpOwotCi0JaWYgKCFpOTE1X3BpcGVfZW5hYmxlZChkZXYsIHBpcGUpKQotCQlyZXR1cm47Ci0KLQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwotCWVsc2UKLQkJYXJyYXkgPSBkZXZfcHJpdi0+c2F2ZV9wYWxldHRlX2I7Ci0KLQlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJSTkxNV9XUklURShyZWcgKyAoaSA8PCAyKSwgYXJyYXlbaV0pOwotfQotCi1zdGF0aWMgdTggaTkxNV9yZWFkX2luZGV4ZWQodTE2IGluZGV4X3BvcnQsIHUxNiBkYXRhX3BvcnQsIHU4IHJlZykKLXsKLQlvdXRiKHJlZywgaW5kZXhfcG9ydCk7Ci0JcmV0dXJuIGluYihkYXRhX3BvcnQpOwotfQotCi1zdGF0aWMgdTggaTkxNV9yZWFkX2FyKHUxNiBzdDAxLCB1OCByZWcsIHUxNiBwYWxldHRlX2VuYWJsZSkKLXsKLQlpbmIoc3QwMSk7Ci0Jb3V0YihwYWxldHRlX2VuYWJsZSB8IHJlZywgVkdBX0FSX0lOREVYKTsKLQlyZXR1cm4gaW5iKFZHQV9BUl9EQVRBX1JFQUQpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X3dyaXRlX2FyKHU4IHN0MDEsIHU4IHJlZywgdTggdmFsLCB1MTYgcGFsZXR0ZV9lbmFibGUpCi17Ci0JaW5iKHN0MDEpOwotCW91dGIocGFsZXR0ZV9lbmFibGUgfCByZWcsIFZHQV9BUl9JTkRFWCk7Ci0Jb3V0Yih2YWwsIFZHQV9BUl9EQVRBX1dSSVRFKTsKLX0KLQotc3RhdGljIHZvaWQgaTkxNV93cml0ZV9pbmRleGVkKHUxNiBpbmRleF9wb3J0LCB1MTYgZGF0YV9wb3J0LCB1OCByZWcsIHU4IHZhbCkKLXsKLQlvdXRiKHJlZywgaW5kZXhfcG9ydCk7Ci0Jb3V0Yih2YWwsIGRhdGFfcG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5MTVfc2F2ZV92Z2Eoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBpOwotCXUxNiBjcl9pbmRleCwgY3JfZGF0YSwgc3QwMTsKLQotCS8qIFZHQSBjb2xvciBwYWxldHRlIHJlZ2lzdGVycyAqLwotCWRldl9wcml2LT5zYXZlREFDTUFTSyA9IGluYihWR0FfREFDTUFTSyk7Ci0JLyogREFDQ1JYIGF1dG9tYXRpY2FsbHkgaW5jcmVtZW50cyBkdXJpbmcgcmVhZCAqLwotCW91dGIoMCwgVkdBX0RBQ1JYKTsKLQkvKiBSZWFkIDMgYnl0ZXMgb2YgY29sb3IgZGF0YSBmcm9tIGVhY2ggaW5kZXggKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjU2ICogMzsgaSsrKQotCQlkZXZfcHJpdi0+c2F2ZURBQ0RBVEFbaV0gPSBpbmIoVkdBX0RBQ0RBVEEpOwotCi0JLyogTVNSIGJpdHMgKi8KLQlkZXZfcHJpdi0+c2F2ZU1TUiA9IGluYihWR0FfTVNSX1JFQUQpOwotCWlmIChkZXZfcHJpdi0+c2F2ZU1TUiAmIFZHQV9NU1JfQ0dBX01PREUpIHsKLQkJY3JfaW5kZXggPSBWR0FfQ1JfSU5ERVhfQ0dBOwotCQljcl9kYXRhID0gVkdBX0NSX0RBVEFfQ0dBOwotCQlzdDAxID0gVkdBX1NUMDFfQ0dBOwotCX0gZWxzZSB7Ci0JCWNyX2luZGV4ID0gVkdBX0NSX0lOREVYX01EQTsKLQkJY3JfZGF0YSA9IFZHQV9DUl9EQVRBX01EQTsKLQkJc3QwMSA9IFZHQV9TVDAxX01EQTsKLQl9Ci0KLQkvKiBDUlQgY29udHJvbGxlciByZWdzICovCi0JaTkxNV93cml0ZV9pbmRleGVkKGNyX2luZGV4LCBjcl9kYXRhLCAweDExLAotCQkJICAgaTkxNV9yZWFkX2luZGV4ZWQoY3JfaW5kZXgsIGNyX2RhdGEsIDB4MTEpICYKLQkJCSAgICh+MHg4MCkpOwotCWZvciAoaSA9IDA7IGkgPD0gMHgyNDsgaSsrKQotCQlkZXZfcHJpdi0+c2F2ZUNSW2ldID0KLQkJCWk5MTVfcmVhZF9pbmRleGVkKGNyX2luZGV4LCBjcl9kYXRhLCBpKTsKLQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgdHVybiBvZmYgQ1IgZ3JvdXAgMCB3cml0ZXMgKi8KLQlkZXZfcHJpdi0+c2F2ZUNSWzB4MTFdICY9IH4weDgwOwotCi0JLyogQXR0cmlidXRlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCi0JaW5iKHN0MDEpOwotCWRldl9wcml2LT5zYXZlQVJfSU5ERVggPSBpbmIoVkdBX0FSX0lOREVYKTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4MTQ7IGkrKykKLQkJZGV2X3ByaXYtPnNhdmVBUltpXSA9IGk5MTVfcmVhZF9hcihzdDAxLCBpLCAwKTsKLQlpbmIoc3QwMSk7Ci0Jb3V0YihkZXZfcHJpdi0+c2F2ZUFSX0lOREVYLCBWR0FfQVJfSU5ERVgpOwotCWluYihzdDAxKTsKLQotCS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IDk7IGkrKykKLQkJZGV2X3ByaXYtPnNhdmVHUltpXSA9Ci0JCQlpOTE1X3JlYWRfaW5kZXhlZChWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCBpKTsKLQotCWRldl9wcml2LT5zYXZlR1JbMHgxMF0gPQotCQlpOTE1X3JlYWRfaW5kZXhlZChWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDEwKTsKLQlkZXZfcHJpdi0+c2F2ZUdSWzB4MTFdID0KLQkJaTkxNV9yZWFkX2luZGV4ZWQoVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMSk7Ci0JZGV2X3ByaXYtPnNhdmVHUlsweDE4XSA9Ci0JCWk5MTVfcmVhZF9pbmRleGVkKFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIDB4MTgpOwotCi0JLyogU2VxdWVuY2VyIHJlZ2lzdGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWRldl9wcml2LT5zYXZlU1JbaV0gPQotCQkJaTkxNV9yZWFkX2luZGV4ZWQoVkdBX1NSX0lOREVYLCBWR0FfU1JfREFUQSwgaSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5MTVfcmVzdG9yZV92Z2Eoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBpOwotCXUxNiBjcl9pbmRleCwgY3JfZGF0YSwgc3QwMTsKLQotCS8qIE1TUiBiaXRzICovCi0Jb3V0YihkZXZfcHJpdi0+c2F2ZU1TUiwgVkdBX01TUl9XUklURSk7Ci0JaWYgKGRldl9wcml2LT5zYXZlTVNSICYgVkdBX01TUl9DR0FfTU9ERSkgewotCQljcl9pbmRleCA9IFZHQV9DUl9JTkRFWF9DR0E7Ci0JCWNyX2RhdGEgPSBWR0FfQ1JfREFUQV9DR0E7Ci0JCXN0MDEgPSBWR0FfU1QwMV9DR0E7Ci0JfSBlbHNlIHsKLQkJY3JfaW5kZXggPSBWR0FfQ1JfSU5ERVhfTURBOwotCQljcl9kYXRhID0gVkdBX0NSX0RBVEFfTURBOwotCQlzdDAxID0gVkdBX1NUMDFfTURBOwotCX0KLQotCS8qIFNlcXVlbmNlciByZWdpc3RlcnMsIGRvbid0IHdyaXRlIFNSMDcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQotCQlpOTE1X3dyaXRlX2luZGV4ZWQoVkdBX1NSX0lOREVYLCBWR0FfU1JfREFUQSwgaSwKLQkJCQkgICBkZXZfcHJpdi0+c2F2ZVNSW2ldKTsKLQotCS8qIENSVCBjb250cm9sbGVyIHJlZ3MgKi8KLQkvKiBFbmFibGUgQ1IgZ3JvdXAgMCB3cml0ZXMgKi8KLQlpOTE1X3dyaXRlX2luZGV4ZWQoY3JfaW5kZXgsIGNyX2RhdGEsIDB4MTEsIGRldl9wcml2LT5zYXZlQ1JbMHgxMV0pOwotCWZvciAoaSA9IDA7IGkgPD0gMHgyNDsgaSsrKQotCQlpOTE1X3dyaXRlX2luZGV4ZWQoY3JfaW5kZXgsIGNyX2RhdGEsIGksIGRldl9wcml2LT5zYXZlQ1JbaV0pOwotCi0JLyogR3JhcGhpY3MgY29udHJvbGxlciByZWdzICovCi0JZm9yIChpID0gMDsgaSA8IDk7IGkrKykKLQkJaTkxNV93cml0ZV9pbmRleGVkKFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIGksCi0JCQkJICAgZGV2X3ByaXYtPnNhdmVHUltpXSk7Ci0KLQlpOTE1X3dyaXRlX2luZGV4ZWQoVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMCwKLQkJCSAgIGRldl9wcml2LT5zYXZlR1JbMHgxMF0pOwotCWk5MTVfd3JpdGVfaW5kZXhlZChWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDExLAotCQkJICAgZGV2X3ByaXYtPnNhdmVHUlsweDExXSk7Ci0JaTkxNV93cml0ZV9pbmRleGVkKFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIDB4MTgsCi0JCQkgICBkZXZfcHJpdi0+c2F2ZUdSWzB4MThdKTsKLQotCS8qIEF0dHJpYnV0ZSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLwotCWluYihzdDAxKTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4MTQ7IGkrKykKLQkJaTkxNV93cml0ZV9hcihzdDAxLCBpLCBkZXZfcHJpdi0+c2F2ZUFSW2ldLCAwKTsKLQlpbmIoc3QwMSk7IC8qIHN3aXRjaCBiYWNrIHRvIGluZGV4IG1vZGUgKi8KLQlvdXRiKGRldl9wcml2LT5zYXZlQVJfSU5ERVggfCAweDIwLCBWR0FfQVJfSU5ERVgpOwotCWluYihzdDAxKTsKLQotCS8qIFZHQSBjb2xvciBwYWxldHRlIHJlZ2lzdGVycyAqLwotCW91dGIoZGV2X3ByaXYtPnNhdmVEQUNNQVNLLCBWR0FfREFDTUFTSyk7Ci0JLyogREFDQ1JYIGF1dG9tYXRpY2FsbHkgaW5jcmVtZW50cyBkdXJpbmcgcmVhZCAqLwotCW91dGIoMCwgVkdBX0RBQ1dYKTsKLQkvKiBSZWFkIDMgYnl0ZXMgb2YgY29sb3IgZGF0YSBmcm9tIGVhY2ggaW5kZXggKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjU2ICogMzsgaSsrKQotCQlvdXRiKGRldl9wcml2LT5zYXZlREFDREFUQVtpXSwgVkdBX0RBQ0RBVEEpOwotCi19Ci0KIHN0YXRpYyBpbnQgaTkxNV9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBpOwogCiAJaWYgKCFkZXYgfHwgIWRldl9wcml2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZGV2OiAlcCwgZGV2X3ByaXY6ICVwXG4iLCBkZXYsIGRldl9wcml2KTsKQEAgLTI1NCwxMjIgKzUyLDEwIEBACiAJCXJldHVybiAwOwogCiAJcGNpX3NhdmVfc3RhdGUoZGV2LT5wZGV2KTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYtPnBkZXYsIExCQiwgJmRldl9wcml2LT5zYXZlTEJCKTsKIAotCS8qIERpc3BsYXkgYXJiaXRyYXRpb24gY29udHJvbCAqLwotCWRldl9wcml2LT5zYXZlRFNQQVJCID0gSTkxNV9SRUFEKERTUEFSQik7CisJaTkxNV9zYXZlX3N0YXRlKGRldik7CiAKLQkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCi0JZGV2X3ByaXYtPnNhdmVQSVBFQUNPTkYgPSBJOTE1X1JFQUQoUElQRUFDT05GKTsKLQlkZXZfcHJpdi0+c2F2ZVBJUEVBU1JDID0gSTkxNV9SRUFEKFBJUEVBU1JDKTsKLQlkZXZfcHJpdi0+c2F2ZUZQQTAgPSBJOTE1X1JFQUQoRlBBMCk7Ci0JZGV2X3ByaXYtPnNhdmVGUEExID0gSTkxNV9SRUFEKEZQQTEpOwotCWRldl9wcml2LT5zYXZlRFBMTF9BID0gSTkxNV9SRUFEKERQTExfQSk7Ci0JaWYgKElTX0k5NjVHKGRldikpCi0JCWRldl9wcml2LT5zYXZlRFBMTF9BX01EID0gSTkxNV9SRUFEKERQTExfQV9NRCk7Ci0JZGV2X3ByaXYtPnNhdmVIVE9UQUxfQSA9IEk5MTVfUkVBRChIVE9UQUxfQSk7Ci0JZGV2X3ByaXYtPnNhdmVIQkxBTktfQSA9IEk5MTVfUkVBRChIQkxBTktfQSk7Ci0JZGV2X3ByaXYtPnNhdmVIU1lOQ19BID0gSTkxNV9SRUFEKEhTWU5DX0EpOwotCWRldl9wcml2LT5zYXZlVlRPVEFMX0EgPSBJOTE1X1JFQUQoVlRPVEFMX0EpOwotCWRldl9wcml2LT5zYXZlVkJMQU5LX0EgPSBJOTE1X1JFQUQoVkJMQU5LX0EpOwotCWRldl9wcml2LT5zYXZlVlNZTkNfQSA9IEk5MTVfUkVBRChWU1lOQ19BKTsKLQlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSA9IEk5MTVfUkVBRChCQ0xSUEFUX0EpOwotCi0JZGV2X3ByaXYtPnNhdmVEU1BBQ05UUiA9IEk5MTVfUkVBRChEU1BBQ05UUik7Ci0JZGV2X3ByaXYtPnNhdmVEU1BBU1RSSURFID0gSTkxNV9SRUFEKERTUEFTVFJJREUpOwotCWRldl9wcml2LT5zYXZlRFNQQVNJWkUgPSBJOTE1X1JFQUQoRFNQQVNJWkUpOwotCWRldl9wcml2LT5zYXZlRFNQQVBPUyA9IEk5MTVfUkVBRChEU1BBUE9TKTsKLQlkZXZfcHJpdi0+c2F2ZURTUEFCQVNFID0gSTkxNV9SRUFEKERTUEFCQVNFKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkgewotCQlkZXZfcHJpdi0+c2F2ZURTUEFTVVJGID0gSTkxNV9SRUFEKERTUEFTVVJGKTsKLQkJZGV2X3ByaXYtPnNhdmVEU1BBVElMRU9GRiA9IEk5MTVfUkVBRChEU1BBVElMRU9GRik7Ci0JfQotCWk5MTVfc2F2ZV9wYWxldHRlKGRldiwgUElQRV9BKTsKLQlkZXZfcHJpdi0+c2F2ZVBJUEVBU1RBVCA9IEk5MTVfUkVBRChJOTE1UkVHX1BJUEVBU1RBVCk7Ci0KLQkvKiBQaXBlICYgcGxhbmUgQiBpbmZvICovCi0JZGV2X3ByaXYtPnNhdmVQSVBFQkNPTkYgPSBJOTE1X1JFQUQoUElQRUJDT05GKTsKLQlkZXZfcHJpdi0+c2F2ZVBJUEVCU1JDID0gSTkxNV9SRUFEKFBJUEVCU1JDKTsKLQlkZXZfcHJpdi0+c2F2ZUZQQjAgPSBJOTE1X1JFQUQoRlBCMCk7Ci0JZGV2X3ByaXYtPnNhdmVGUEIxID0gSTkxNV9SRUFEKEZQQjEpOwotCWRldl9wcml2LT5zYXZlRFBMTF9CID0gSTkxNV9SRUFEKERQTExfQik7Ci0JaWYgKElTX0k5NjVHKGRldikpCi0JCWRldl9wcml2LT5zYXZlRFBMTF9CX01EID0gSTkxNV9SRUFEKERQTExfQl9NRCk7Ci0JZGV2X3ByaXYtPnNhdmVIVE9UQUxfQiA9IEk5MTVfUkVBRChIVE9UQUxfQik7Ci0JZGV2X3ByaXYtPnNhdmVIQkxBTktfQiA9IEk5MTVfUkVBRChIQkxBTktfQik7Ci0JZGV2X3ByaXYtPnNhdmVIU1lOQ19CID0gSTkxNV9SRUFEKEhTWU5DX0IpOwotCWRldl9wcml2LT5zYXZlVlRPVEFMX0IgPSBJOTE1X1JFQUQoVlRPVEFMX0IpOwotCWRldl9wcml2LT5zYXZlVkJMQU5LX0IgPSBJOTE1X1JFQUQoVkJMQU5LX0IpOwotCWRldl9wcml2LT5zYXZlVlNZTkNfQiA9IEk5MTVfUkVBRChWU1lOQ19CKTsKLQlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSA9IEk5MTVfUkVBRChCQ0xSUEFUX0EpOwotCi0JZGV2X3ByaXYtPnNhdmVEU1BCQ05UUiA9IEk5MTVfUkVBRChEU1BCQ05UUik7Ci0JZGV2X3ByaXYtPnNhdmVEU1BCU1RSSURFID0gSTkxNV9SRUFEKERTUEJTVFJJREUpOwotCWRldl9wcml2LT5zYXZlRFNQQlNJWkUgPSBJOTE1X1JFQUQoRFNQQlNJWkUpOwotCWRldl9wcml2LT5zYXZlRFNQQlBPUyA9IEk5MTVfUkVBRChEU1BCUE9TKTsKLQlkZXZfcHJpdi0+c2F2ZURTUEJCQVNFID0gSTkxNV9SRUFEKERTUEJCQVNFKTsKLQlpZiAoSVNfSTk2NUdNKGRldikgfHwgSVNfSUdEX0dNKGRldikpIHsKLQkJZGV2X3ByaXYtPnNhdmVEU1BCU1VSRiA9IEk5MTVfUkVBRChEU1BCU1VSRik7Ci0JCWRldl9wcml2LT5zYXZlRFNQQlRJTEVPRkYgPSBJOTE1X1JFQUQoRFNQQlRJTEVPRkYpOwotCX0KLQlpOTE1X3NhdmVfcGFsZXR0ZShkZXYsIFBJUEVfQik7Ci0JZGV2X3ByaXYtPnNhdmVQSVBFQlNUQVQgPSBJOTE1X1JFQUQoSTkxNVJFR19QSVBFQlNUQVQpOwotCi0JLyogQ1JUIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVBRFBBID0gSTkxNV9SRUFEKEFEUEEpOwotCi0JLyogTFZEUyBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyA9IEk5MTVfUkVBRChQRklUX1BHTV9SQVRJT1MpOwotCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwpOwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX0NUTDIpOwotCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKLQkJZGV2X3ByaXYtPnNhdmVQRklUX0NPTlRST0wgPSBJOTE1X1JFQUQoUEZJVF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZUxWRFNQUF9PTiA9IEk5MTVfUkVBRChMVkRTUFBfT04pOwotCWRldl9wcml2LT5zYXZlTFZEU1BQX09GRiA9IEk5MTVfUkVBRChMVkRTUFBfT0ZGKTsKLQlkZXZfcHJpdi0+c2F2ZVBQX0NZQ0xFID0gSTkxNV9SRUFEKFBQX0NZQ0xFKTsKLQotCS8qIEZJWE1FOiBzYXZlIFRWICYgU0RWTyBzdGF0ZSAqLwotCi0JLyogRkJDIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UgPSBJOTE1X1JFQUQoRkJDX0NGQl9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFID0gSTkxNV9SRUFEKEZCQ19MTF9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MMiA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTDIpOwotCWRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wpOwotCi0JLyogSW50ZXJydXB0IHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVJSVIgPSBJOTE1X1JFQUQoSTkxNVJFR19JTlRfSURFTlRJVFlfUik7Ci0JZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSTkxNVJFR19JTlRfRU5BQkxFX1IpOwotCWRldl9wcml2LT5zYXZlSU1SID0gSTkxNV9SRUFEKEk5MTVSRUdfSU5UX01BU0tfUik7Ci0KLQkvKiBWR0Egc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZVZDTEtfRElWSVNPUl9WR0EwID0gSTkxNV9SRUFEKFZDTEtfRElWSVNPUl9WR0EwKTsKLQlkZXZfcHJpdi0+c2F2ZVZDTEtfRElWSVNPUl9WR0ExID0gSTkxNV9SRUFEKFZDTEtfRElWSVNPUl9WR0ExKTsKLQlkZXZfcHJpdi0+c2F2ZVZDTEtfUE9TVF9ESVYgPSBJOTE1X1JFQUQoVkNMS19QT1NUX0RJVik7Ci0JZGV2X3ByaXYtPnNhdmVWR0FDTlRSTCA9IEk5MTVfUkVBRChWR0FDTlRSTCk7Ci0KLQkvKiBDbG9jayBnYXRpbmcgc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZURfU1RBVEUgPSBJOTE1X1JFQUQoRF9TVEFURSk7Ci0JZGV2X3ByaXYtPnNhdmVEU1BDTEtfR0FURV9EID0gSTkxNV9SRUFEKERTUENMS19HQVRFX0QpOwotCi0JLyogQ2FjaGUgbW9kZSBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wID0gSTkxNV9SRUFEKENBQ0hFX01PREVfMCk7Ci0KLQkvKiBNZW1vcnkgQXJiaXRyYXRpb24gc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZU1JX0FSQl9TVEFURSA9IEk5MTVfUkVBRChNSV9BUkJfU1RBVEUpOwotCi0JLyogU2NyYXRjaCBzcGFjZSAqLwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWRldl9wcml2LT5zYXZlU1dGMFtpXSA9IEk5MTVfUkVBRChTV0YwICsgKGkgPDwgMikpOwotCQlkZXZfcHJpdi0+c2F2ZVNXRjFbaV0gPSBJOTE1X1JFQUQoU1dGMTAgKyAoaSA8PCAyKSk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCWRldl9wcml2LT5zYXZlU1dGMltpXSA9IEk5MTVfUkVBRChTV0YzMCArIChpIDw8IDIpKTsKLQotCWk5MTVfc2F2ZV92Z2EoZGV2KTsKKwlpbnRlbF9vcHJlZ2lvbl9mcmVlKGRldik7CiAKIAlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgewogCQkvKiBTaHV0IGRvd24gdGhlIGRldmljZSAqLwpAQCAtMzgyLDE1NSArNjgsMTUgQEAKIAogc3RhdGljIGludCBpOTE1X3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGk7Ci0KIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShkZXYtPnBkZXYpOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYtPnBkZXYpKQogCQlyZXR1cm4gLTE7CiAJcGNpX3NldF9tYXN0ZXIoZGV2LT5wZGV2KTsKIAotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYtPnBkZXYsIExCQiwgZGV2X3ByaXYtPnNhdmVMQkIpOworCWk5MTVfcmVzdG9yZV9zdGF0ZShkZXYpOwogCi0JSTkxNV9XUklURShEU1BBUkIsIGRldl9wcml2LT5zYXZlRFNQQVJCKTsKLQotCS8qIFBpcGUgJiBwbGFuZSBBIGluZm8gKi8KLQkvKiBQcmltZSB0aGUgY2xvY2sgKi8KLQlpZiAoZGV2X3ByaXYtPnNhdmVEUExMX0EgJiBEUExMX1ZDT19FTkFCTEUpIHsKLQkJSTkxNV9XUklURShEUExMX0EsIGRldl9wcml2LT5zYXZlRFBMTF9BICYKLQkJCSAgIH5EUExMX1ZDT19FTkFCTEUpOwotCQl1ZGVsYXkoMTUwKTsKLQl9Ci0JSTkxNV9XUklURShGUEEwLCBkZXZfcHJpdi0+c2F2ZUZQQTApOwotCUk5MTVfV1JJVEUoRlBBMSwgZGV2X3ByaXYtPnNhdmVGUEExKTsKLQkvKiBBY3R1YWxseSBlbmFibGUgaXQgKi8KLQlJOTE1X1dSSVRFKERQTExfQSwgZGV2X3ByaXYtPnNhdmVEUExMX0EpOwotCXVkZWxheSgxNTApOwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlJOTE1X1dSSVRFKERQTExfQV9NRCwgZGV2X3ByaXYtPnNhdmVEUExMX0FfTUQpOwotCXVkZWxheSgxNTApOwotCi0JLyogUmVzdG9yZSBtb2RlICovCi0JSTkxNV9XUklURShIVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVIVE9UQUxfQSk7Ci0JSTkxNV9XUklURShIQkxBTktfQSwgZGV2X3ByaXYtPnNhdmVIQkxBTktfQSk7Ci0JSTkxNV9XUklURShIU1lOQ19BLCBkZXZfcHJpdi0+c2F2ZUhTWU5DX0EpOwotCUk5MTVfV1JJVEUoVlRPVEFMX0EsIGRldl9wcml2LT5zYXZlVlRPVEFMX0EpOwotCUk5MTVfV1JJVEUoVkJMQU5LX0EsIGRldl9wcml2LT5zYXZlVkJMQU5LX0EpOwotCUk5MTVfV1JJVEUoVlNZTkNfQSwgZGV2X3ByaXYtPnNhdmVWU1lOQ19BKTsKLQlJOTE1X1dSSVRFKEJDTFJQQVRfQSwgZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EpOwotCi0JLyogUmVzdG9yZSBwbGFuZSBpbmZvICovCi0JSTkxNV9XUklURShEU1BBU0laRSwgZGV2X3ByaXYtPnNhdmVEU1BBU0laRSk7Ci0JSTkxNV9XUklURShEU1BBUE9TLCBkZXZfcHJpdi0+c2F2ZURTUEFQT1MpOwotCUk5MTVfV1JJVEUoUElQRUFTUkMsIGRldl9wcml2LT5zYXZlUElQRUFTUkMpOwotCUk5MTVfV1JJVEUoRFNQQUJBU0UsIGRldl9wcml2LT5zYXZlRFNQQUJBU0UpOwotCUk5MTVfV1JJVEUoRFNQQVNUUklERSwgZGV2X3ByaXYtPnNhdmVEU1BBU1RSSURFKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkgewotCQlJOTE1X1dSSVRFKERTUEFTVVJGLCBkZXZfcHJpdi0+c2F2ZURTUEFTVVJGKTsKLQkJSTkxNV9XUklURShEU1BBVElMRU9GRiwgZGV2X3ByaXYtPnNhdmVEU1BBVElMRU9GRik7Ci0JfQotCi0JSTkxNV9XUklURShQSVBFQUNPTkYsIGRldl9wcml2LT5zYXZlUElQRUFDT05GKTsKLQotCWk5MTVfcmVzdG9yZV9wYWxldHRlKGRldiwgUElQRV9BKTsKLQkvKiBFbmFibGUgdGhlIHBsYW5lICovCi0JSTkxNV9XUklURShEU1BBQ05UUiwgZGV2X3ByaXYtPnNhdmVEU1BBQ05UUik7Ci0JSTkxNV9XUklURShEU1BBQkFTRSwgSTkxNV9SRUFEKERTUEFCQVNFKSk7Ci0KLQkvKiBQaXBlICYgcGxhbmUgQiBpbmZvICovCi0JaWYgKGRldl9wcml2LT5zYXZlRFBMTF9CICYgRFBMTF9WQ09fRU5BQkxFKSB7Ci0JCUk5MTVfV1JJVEUoRFBMTF9CLCBkZXZfcHJpdi0+c2F2ZURQTExfQiAmCi0JCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKLQkJdWRlbGF5KDE1MCk7Ci0JfQotCUk5MTVfV1JJVEUoRlBCMCwgZGV2X3ByaXYtPnNhdmVGUEIwKTsKLQlJOTE1X1dSSVRFKEZQQjEsIGRldl9wcml2LT5zYXZlRlBCMSk7Ci0JLyogQWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JSTkxNV9XUklURShEUExMX0IsIGRldl9wcml2LT5zYXZlRFBMTF9CKTsKLQl1ZGVsYXkoMTUwKTsKLQlpZiAoSVNfSTk2NUcoZGV2KSkKLQkJSTkxNV9XUklURShEUExMX0JfTUQsIGRldl9wcml2LT5zYXZlRFBMTF9CX01EKTsKLQl1ZGVsYXkoMTUwKTsKLQotCS8qIFJlc3RvcmUgbW9kZSAqLwotCUk5MTVfV1JJVEUoSFRPVEFMX0IsIGRldl9wcml2LT5zYXZlSFRPVEFMX0IpOwotCUk5MTVfV1JJVEUoSEJMQU5LX0IsIGRldl9wcml2LT5zYXZlSEJMQU5LX0IpOwotCUk5MTVfV1JJVEUoSFNZTkNfQiwgZGV2X3ByaXYtPnNhdmVIU1lOQ19CKTsKLQlJOTE1X1dSSVRFKFZUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9CKTsKLQlJOTE1X1dSSVRFKFZCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19CKTsKLQlJOTE1X1dSSVRFKFZTWU5DX0IsIGRldl9wcml2LT5zYXZlVlNZTkNfQik7Ci0JSTkxNV9XUklURShCQ0xSUEFUX0IsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9CKTsKLQotCS8qIFJlc3RvcmUgcGxhbmUgaW5mbyAqLwotCUk5MTVfV1JJVEUoRFNQQlNJWkUsIGRldl9wcml2LT5zYXZlRFNQQlNJWkUpOwotCUk5MTVfV1JJVEUoRFNQQlBPUywgZGV2X3ByaXYtPnNhdmVEU1BCUE9TKTsKLQlJOTE1X1dSSVRFKFBJUEVCU1JDLCBkZXZfcHJpdi0+c2F2ZVBJUEVCU1JDKTsKLQlJOTE1X1dSSVRFKERTUEJCQVNFLCBkZXZfcHJpdi0+c2F2ZURTUEJCQVNFKTsKLQlJOTE1X1dSSVRFKERTUEJTVFJJREUsIGRldl9wcml2LT5zYXZlRFNQQlNUUklERSk7Ci0JaWYgKElTX0k5NjVHKGRldikpIHsKLQkJSTkxNV9XUklURShEU1BCU1VSRiwgZGV2X3ByaXYtPnNhdmVEU1BCU1VSRik7Ci0JCUk5MTVfV1JJVEUoRFNQQlRJTEVPRkYsIGRldl9wcml2LT5zYXZlRFNQQlRJTEVPRkYpOwotCX0KLQotCUk5MTVfV1JJVEUoUElQRUJDT05GLCBkZXZfcHJpdi0+c2F2ZVBJUEVCQ09ORik7Ci0KLQlpOTE1X3Jlc3RvcmVfcGFsZXR0ZShkZXYsIFBJUEVfQik7Ci0JLyogRW5hYmxlIHRoZSBwbGFuZSAqLwotCUk5MTVfV1JJVEUoRFNQQkNOVFIsIGRldl9wcml2LT5zYXZlRFNQQkNOVFIpOwotCUk5MTVfV1JJVEUoRFNQQkJBU0UsIEk5MTVfUkVBRChEU1BCQkFTRSkpOwotCi0JLyogQ1JUIHN0YXRlICovCi0JSTkxNV9XUklURShBRFBBLCBkZXZfcHJpdi0+c2F2ZUFEUEEpOwotCi0JLyogTFZEUyBzdGF0ZSAqLwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlJOTE1X1dSSVRFKEJMQ19QV01fQ1RMMiwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIpOwotCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQotCQlJOTE1X1dSSVRFKExWRFMsIGRldl9wcml2LT5zYXZlTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKLQkJSTkxNV9XUklURShQRklUX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUEZJVF9DT05UUk9MKTsKLQotCUk5MTVfV1JJVEUoUEZJVF9QR01fUkFUSU9TLCBkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyk7Ci0JSTkxNV9XUklURShCTENfUFdNX0NUTCwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCk7Ci0JSTkxNV9XUklURShMVkRTUFBfT04sIGRldl9wcml2LT5zYXZlTFZEU1BQX09OKTsKLQlJOTE1X1dSSVRFKExWRFNQUF9PRkYsIGRldl9wcml2LT5zYXZlTFZEU1BQX09GRik7Ci0JSTkxNV9XUklURShQUF9DWUNMRSwgZGV2X3ByaXYtPnNhdmVQUF9DWUNMRSk7Ci0JSTkxNV9XUklURShQUF9DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wpOwotCi0JLyogRklYTUU6IHJlc3RvcmUgVFYgJiBTRFZPIHN0YXRlICovCi0KLQkvKiBGQkMgaW5mbyAqLwotCUk5MTVfV1JJVEUoRkJDX0NGQl9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19DRkJfQkFTRSk7Ci0JSTkxNV9XUklURShGQkNfTExfQkFTRSwgZGV2X3ByaXYtPnNhdmVGQkNfTExfQkFTRSk7Ci0JSTkxNV9XUklURShGQkNfQ09OVFJPTDIsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wyKTsKLQlJOTE1X1dSSVRFKEZCQ19DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MKTsKLQotCS8qIFZHQSBzdGF0ZSAqLwotCUk5MTVfV1JJVEUoVkdBQ05UUkwsIGRldl9wcml2LT5zYXZlVkdBQ05UUkwpOwotCUk5MTVfV1JJVEUoVkNMS19ESVZJU09SX1ZHQTAsIGRldl9wcml2LT5zYXZlVkNMS19ESVZJU09SX1ZHQTApOwotCUk5MTVfV1JJVEUoVkNMS19ESVZJU09SX1ZHQTEsIGRldl9wcml2LT5zYXZlVkNMS19ESVZJU09SX1ZHQTEpOwotCUk5MTVfV1JJVEUoVkNMS19QT1NUX0RJViwgZGV2X3ByaXYtPnNhdmVWQ0xLX1BPU1RfRElWKTsKLQl1ZGVsYXkoMTUwKTsKLQotCS8qIENsb2NrIGdhdGluZyBzdGF0ZSAqLwotCUk5MTVfV1JJVEUgKERfU1RBVEUsIGRldl9wcml2LT5zYXZlRF9TVEFURSk7Ci0JSTkxNV9XUklURSAoRFNQQ0xLX0dBVEVfRCwgZGV2X3ByaXYtPnNhdmVEU1BDTEtfR0FURV9EKTsKLQotCS8qIENhY2hlIG1vZGUgc3RhdGUgKi8KLQlJOTE1X1dSSVRFIChDQUNIRV9NT0RFXzAsIGRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wIHwgMHhmZmZmMDAwMCk7Ci0KLQkvKiBNZW1vcnkgYXJiaXRyYXRpb24gc3RhdGUgKi8KLQlJOTE1X1dSSVRFIChNSV9BUkJfU1RBVEUsIGRldl9wcml2LT5zYXZlTUlfQVJCX1NUQVRFIHwgMHhmZmZmMDAwMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlJOTE1X1dSSVRFKFNXRjAgKyAoaSA8PCAyKSwgZGV2X3ByaXYtPnNhdmVTV0YwW2ldKTsKLQkJSTkxNV9XUklURShTV0YxMCArIChpIDw8IDIpLCBkZXZfcHJpdi0+c2F2ZVNXRjFbaSs3XSk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCUk5MTVfV1JJVEUoU1dGMzAgKyAoaSA8PCAyKSwgZGV2X3ByaXYtPnNhdmVTV0YyW2ldKTsKLQotCWk5MTVfcmVzdG9yZV92Z2EoZGV2KTsKKwlpbnRlbF9vcHJlZ2lvbl9pbml0KGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU0MSwxNyArODcsMTkgQEAKIAkgKi8KIAkuZHJpdmVyX2ZlYXR1cmVzID0KIAkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfUkVRVUlSRV9BR1AgfCAvKiBEUklWRVJfVVNFX01UUlIgfCovCi0JICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0lSUV9WQkwgfAotCSAgICBEUklWRVJfSVJRX1ZCTDIsCisJICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0dFTSwKIAkubG9hZCA9IGk5MTVfZHJpdmVyX2xvYWQsCiAJLnVubG9hZCA9IGk5MTVfZHJpdmVyX3VubG9hZCwKKwkub3BlbiA9IGk5MTVfZHJpdmVyX29wZW4sCiAJLmxhc3RjbG9zZSA9IGk5MTVfZHJpdmVyX2xhc3RjbG9zZSwKIAkucHJlY2xvc2UgPSBpOTE1X2RyaXZlcl9wcmVjbG9zZSwKKwkucG9zdGNsb3NlID0gaTkxNV9kcml2ZXJfcG9zdGNsb3NlLAogCS5zdXNwZW5kID0gaTkxNV9zdXNwZW5kLAogCS5yZXN1bWUgPSBpOTE1X3Jlc3VtZSwKIAkuZGV2aWNlX2lzX2FncCA9IGk5MTVfZHJpdmVyX2RldmljZV9pc19hZ3AsCi0JLnZibGFua193YWl0ID0gaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQsCi0JLnZibGFua193YWl0MiA9IGk5MTVfZHJpdmVyX3ZibGFua193YWl0MiwKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmVuYWJsZV92YmxhbmsgPSBpOTE1X2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gaTkxNV9kaXNhYmxlX3ZibGFuaywKIAkuaXJxX3ByZWluc3RhbGwgPSBpOTE1X2RyaXZlcl9pcnFfcHJlaW5zdGFsbCwKIAkuaXJxX3Bvc3RpbnN0YWxsID0gaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsLAogCS5pcnFfdW5pbnN0YWxsID0gaTkxNV9kcml2ZXJfaXJxX3VuaW5zdGFsbCwKQEAgLTU1OSw2ICsxMDcsMTAgQEAKIAkucmVjbGFpbV9idWZmZXJzID0gZHJtX2NvcmVfcmVjbGFpbV9idWZmZXJzLAogCS5nZXRfbWFwX29mcyA9IGRybV9jb3JlX2dldF9tYXBfb2ZzLAogCS5nZXRfcmVnX29mcyA9IGRybV9jb3JlX2dldF9yZWdfb2ZzLAorCS5wcm9jX2luaXQgPSBpOTE1X2dlbV9wcm9jX2luaXQsCisJLnByb2NfY2xlYW51cCA9IGk5MTVfZ2VtX3Byb2NfY2xlYW51cCwKKwkuZ2VtX2luaXRfb2JqZWN0ID0gaTkxNV9nZW1faW5pdF9vYmplY3QsCisJLmdlbV9mcmVlX29iamVjdCA9IGk5MTVfZ2VtX2ZyZWVfb2JqZWN0LAogCS5pb2N0bHMgPSBpOTE1X2lvY3RscywKIAkuZm9wcyA9IHsKIAkJIC5vd25lciA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZDczMjZkOS4uZWFlNGVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0zMCw2ICszMCw4IEBACiAjaWZuZGVmIF9JOTE1X0RSVl9IXwogI2RlZmluZSBfSTkxNV9EUlZfSF8KIAorI2luY2x1ZGUgImk5MTVfcmVnLmgiCisKIC8qIEdlbmVyYWwgY3VzdG9taXphdGlvbjoKICAqLwogCkBAIC0zNyw3ICszOSwxMiBAQAogCiAjZGVmaW5lIERSSVZFUl9OQU1FCQkiaTkxNSIKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJJbnRlbCBHcmFwaGljcyIKLSNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA2MDExOSIKKyNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA4MDczMCIKKworZW51bSBwaXBlIHsKKwlQSVBFX0EgPSAwLAorCVBJUEVfQiwKK307CiAKIC8qIEludGVyZmFjZSBoaXN0b3J5OgogICoKQEAgLTUzLDE2ICs2MCwyMyBAQAogI2RlZmluZSBEUklWRVJfTUlOT1IJCTYKICNkZWZpbmUgRFJJVkVSX1BBVENITEVWRUwJMAogCisjZGVmaW5lIFdBVENIX0NPSEVSRU5DWQkwCisjZGVmaW5lIFdBVENIX0JVRgkwCisjZGVmaW5lIFdBVENIX0VYRUMJMAorI2RlZmluZSBXQVRDSF9MUlUJMAorI2RlZmluZSBXQVRDSF9SRUxPQwkwCisjZGVmaW5lIFdBVENIX0lOQUNUSVZFCTAKKyNkZWZpbmUgV0FUQ0hfUFdSSVRFCTAKKwogdHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X3JpbmdfYnVmZmVyIHsKIAlpbnQgdGFpbF9tYXNrOwotCXVuc2lnbmVkIGxvbmcgU3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBFbmQ7CiAJdW5zaWduZWQgbG9uZyBTaXplOwogCXU4ICp2aXJ0dWFsX3N0YXJ0OwogCWludCBoZWFkOwogCWludCB0YWlsOwogCWludCBzcGFjZTsKIAlkcm1fbG9jYWxfbWFwX3QgbWFwOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqcmluZ19vYmo7CiB9IGRybV9pOTE1X3JpbmdfYnVmZmVyX3Q7CiAKIHN0cnVjdCBtZW1fYmxvY2sgewpAQCAtNzYsMTMgKzkwLDI4IEBACiB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfdmJsX3N3YXAgewogCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKIAlkcm1fZHJhd2FibGVfdCBkcndfaWQ7Ci0JdW5zaWduZWQgaW50IHBpcGU7CisJdW5zaWduZWQgaW50IHBsYW5lOwogCXVuc2lnbmVkIGludCBzZXF1ZW5jZTsKIH0gZHJtX2k5MTVfdmJsX3N3YXBfdDsKIAorc3RydWN0IG9wcmVnaW9uX2hlYWRlcjsKK3N0cnVjdCBvcHJlZ2lvbl9hY3BpOworc3RydWN0IG9wcmVnaW9uX3N3c2NpOworc3RydWN0IG9wcmVnaW9uX2FzbGU7CisKK3N0cnVjdCBpbnRlbF9vcHJlZ2lvbiB7CisJc3RydWN0IG9wcmVnaW9uX2hlYWRlciAqaGVhZGVyOworCXN0cnVjdCBvcHJlZ2lvbl9hY3BpICphY3BpOworCXN0cnVjdCBvcHJlZ2lvbl9zd3NjaSAqc3dzY2k7CisJc3RydWN0IG9wcmVnaW9uX2FzbGUgKmFzbGU7CisJaW50IGVuYWJsZWQ7Cit9OworCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCisJdm9pZCBfX2lvbWVtICpyZWdzOwogCWRybV9sb2NhbF9tYXBfdCAqc2FyZWE7Ci0JZHJtX2xvY2FsX21hcF90ICptbWlvX21hcDsKIAogCWRybV9pOTE1X3NhcmVhX3QgKnNhcmVhX3ByaXY7CiAJZHJtX2k5MTVfcmluZ19idWZmZXJfdCByaW5nOwpAQCAtOTAsMjAgKzExOSwyNSBAQAogCWRybV9kbWFfaGFuZGxlX3QgKnN0YXR1c19wYWdlX2RtYWg7CiAJdm9pZCAqaHdfc3RhdHVzX3BhZ2U7CiAJZG1hX2FkZHJfdCBkbWFfc3RhdHVzX3BhZ2U7Ci0JdW5zaWduZWQgbG9uZyBjb3VudGVyOworCXVpbnQzMl90IGNvdW50ZXI7CiAJdW5zaWduZWQgaW50IHN0YXR1c19nZnhfYWRkcjsKIAlkcm1fbG9jYWxfbWFwX3QgaHdzX21hcDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmh3c19vYmo7CiAKIAl1bnNpZ25lZCBpbnQgY3BwOwogCWludCBiYWNrX29mZnNldDsKIAlpbnQgZnJvbnRfb2Zmc2V0OwogCWludCBjdXJyZW50X3BhZ2U7CiAJaW50IHBhZ2VfZmxpcHBpbmc7Ci0JaW50IHVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydDsKIAogCXdhaXRfcXVldWVfaGVhZF90IGlycV9xdWV1ZTsKIAlhdG9taWNfdCBpcnFfcmVjZWl2ZWQ7Ci0JYXRvbWljX3QgaXJxX2VtaXR0ZWQ7CisJLyoqIFByb3RlY3RzIHVzZXJfaXJxX3JlZmNvdW50IGFuZCBpcnFfbWFza19yZWcgKi8KKwlzcGlubG9ja190IHVzZXJfaXJxX2xvY2s7CisJLyoqIFJlZmNvdW50IGZvciBpOTE1X3VzZXJfaXJxX2dldCgpIHZlcnN1cyBpOTE1X3VzZXJfaXJxX3B1dCgpLiAqLworCWludCB1c2VyX2lycV9yZWZjb3VudDsKKwkvKiogQ2FjaGVkIHZhbHVlIG9mIElNUiB0byBhdm9pZCByZWFkcyBpbiB1cGRhdGluZyB0aGUgYml0ZmllbGQgKi8KKwl1MzIgaXJxX21hc2tfcmVnOwogCiAJaW50IHRleF9scnVfbG9nX2dyYW51bGFyaXR5OwogCWludCBhbGxvd19iYXRjaGJ1ZmZlcjsKQEAgLTExNSw2ICsxNDksOCBAQAogCWRybV9pOTE1X3ZibF9zd2FwX3QgdmJsX3N3YXBzOwogCXVuc2lnbmVkIGludCBzd2Fwc19wZW5kaW5nOwogCisJc3RydWN0IGludGVsX29wcmVnaW9uIG9wcmVnaW9uOworCiAJLyogUmVnaXN0ZXIgc3RhdGUgKi8KIAl1OCBzYXZlTEJCOwogCXUzMiBzYXZlRFNQQUNOVFI7CkBAIC0xMzksNyArMTc1LDcgQEAKIAl1MzIgc2F2ZURTUEFTVFJJREU7CiAJdTMyIHNhdmVEU1BBU0laRTsKIAl1MzIgc2F2ZURTUEFQT1M7Ci0JdTMyIHNhdmVEU1BBQkFTRTsKKwl1MzIgc2F2ZURTUEFBRERSOwogCXUzMiBzYXZlRFNQQVNVUkY7CiAJdTMyIHNhdmVEU1BBVElMRU9GRjsKIAl1MzIgc2F2ZVBGSVRfUEdNX1JBVElPUzsKQEAgLTE2MCwyNCArMTk2LDI0IEBACiAJdTMyIHNhdmVEU1BCU1RSSURFOwogCXUzMiBzYXZlRFNQQlNJWkU7CiAJdTMyIHNhdmVEU1BCUE9TOwotCXUzMiBzYXZlRFNQQkJBU0U7CisJdTMyIHNhdmVEU1BCQUREUjsKIAl1MzIgc2F2ZURTUEJTVVJGOwogCXUzMiBzYXZlRFNQQlRJTEVPRkY7Ci0JdTMyIHNhdmVWQ0xLX0RJVklTT1JfVkdBMDsKLQl1MzIgc2F2ZVZDTEtfRElWSVNPUl9WR0ExOwotCXUzMiBzYXZlVkNMS19QT1NUX0RJVjsKKwl1MzIgc2F2ZVZHQTA7CisJdTMyIHNhdmVWR0ExOworCXUzMiBzYXZlVkdBX1BEOwogCXUzMiBzYXZlVkdBQ05UUkw7CiAJdTMyIHNhdmVBRFBBOwogCXUzMiBzYXZlTFZEUzsKLQl1MzIgc2F2ZUxWRFNQUF9PTjsKLQl1MzIgc2F2ZUxWRFNQUF9PRkY7CisJdTMyIHNhdmVQUF9PTl9ERUxBWVM7CisJdTMyIHNhdmVQUF9PRkZfREVMQVlTOwogCXUzMiBzYXZlRFZPQTsKIAl1MzIgc2F2ZURWT0I7CiAJdTMyIHNhdmVEVk9DOwogCXUzMiBzYXZlUFBfT047CiAJdTMyIHNhdmVQUF9PRkY7CiAJdTMyIHNhdmVQUF9DT05UUk9MOwotCXUzMiBzYXZlUFBfQ1lDTEU7CisJdTMyIHNhdmVQUF9ESVZJU09SOwogCXUzMiBzYXZlUEZJVF9DT05UUk9MOwogCXUzMiBzYXZlX3BhbGV0dGVfYVsyNTZdOwogCXUzMiBzYXZlX3BhbGV0dGVfYlsyNTZdOwpAQCAtMTkwLDcgKzIyNiw3IEBACiAJdTMyIHNhdmVJTVI7CiAJdTMyIHNhdmVDQUNIRV9NT0RFXzA7CiAJdTMyIHNhdmVEX1NUQVRFOwotCXUzMiBzYXZlRFNQQ0xLX0dBVEVfRDsKKwl1MzIgc2F2ZUNHXzJEX0RJUzsKIAl1MzIgc2F2ZU1JX0FSQl9TVEFURTsKIAl1MzIgc2F2ZVNXRjBbMTZdOwogCXUzMiBzYXZlU1dGMVsxNl07CkBAIC0yMDMsOCArMjM5LDE4MCBAQAogCXU4IHNhdmVEQUNNQVNLOwogCXU4IHNhdmVEQUNEQVRBWzI1NiozXTsgLyogMjU2IDMtYnl0ZSBjb2xvcnMgKi8KIAl1OCBzYXZlQ1JbMzddOworCisJc3RydWN0IHsKKwkJc3RydWN0IGRybV9tbSBndHRfc3BhY2U7CisKKwkJLyoqCisJCSAqIExpc3Qgb2Ygb2JqZWN0cyBjdXJyZW50bHkgaW52b2x2ZWQgaW4gcmVuZGVyaW5nIGZyb20gdGhlCisJCSAqIHJpbmdidWZmZXIuCisJCSAqCisJCSAqIEEgcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIGJ1ZmZlciB3aGlsZSBvbiB0aGlzIGxpc3QuCisJCSAqLworCQlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9saXN0OworCisJCS8qKgorCQkgKiBMaXN0IG9mIG9iamVjdHMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgcmluZ2J1ZmZlciBidXQgd2hpY2gKKwkJICogc3RpbGwgaGF2ZSBhIHdyaXRlX2RvbWFpbiB3aGljaCBuZWVkcyB0byBiZSBmbHVzaGVkIGJlZm9yZQorCQkgKiB1bmJpbmRpbmcuCisJCSAqCisJCSAqIEEgcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIGJ1ZmZlciB3aGlsZSBvbiB0aGlzIGxpc3QuCisJCSAqLworCQlzdHJ1Y3QgbGlzdF9oZWFkIGZsdXNoaW5nX2xpc3Q7CisKKwkJLyoqCisJCSAqIExSVSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgcmluZ2J1ZmZlciBhbmQKKwkJICogYXJlIHJlYWR5IHRvIHVuYmluZCwgYnV0IGFyZSBzdGlsbCBpbiB0aGUgR1RULgorCQkgKgorCQkgKiBBIHJlZmVyZW5jZSBpcyBub3QgaGVsZCBvbiB0aGUgYnVmZmVyIHdoaWxlIG9uIHRoaXMgbGlzdCwKKwkJICogYXMgbWVyZWx5IGJlaW5nIEdUVC1ib3VuZCBzaG91bGRuJ3QgcHJldmVudCBpdHMgYmVpbmcKKwkJICogZnJlZWQsIGFuZCB3ZSdsbCBwdWxsIGl0IG9mZiB0aGUgbGlzdCBpbiB0aGUgZnJlZSBwYXRoLgorCQkgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCBpbmFjdGl2ZV9saXN0OworCisJCS8qKgorCQkgKiBMaXN0IG9mIGJyZWFkY3J1bWJzIGFzc29jaWF0ZWQgd2l0aCBHUFUgcmVxdWVzdHMgY3VycmVudGx5CisJCSAqIG91dHN0YW5kaW5nLgorCQkgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCByZXF1ZXN0X2xpc3Q7CisKKwkJLyoqCisJCSAqIFdlIGxlYXZlIHRoZSB1c2VyIElSUSBvZmYgYXMgbXVjaCBhcyBwb3NzaWJsZSwKKwkJICogYnV0IHRoaXMgbWVhbnMgdGhhdCByZXF1ZXN0cyB3aWxsIGZpbmlzaCBhbmQgbmV2ZXIKKwkJICogYmUgcmV0aXJlZCBvbmNlIHRoZSBzeXN0ZW0gZ29lcyBpZGxlLiBTZXQgYSB0aW1lciB0bworCQkgKiBmaXJlIHBlcmlvZGljYWxseSB3aGlsZSB0aGUgcmluZyBpcyBydW5uaW5nLiBXaGVuIGl0CisJCSAqIGZpcmVzLCBnbyByZXRpcmUgcmVxdWVzdHMuCisJCSAqLworCQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJldGlyZV93b3JrOworCisJCS8qKiBXb3JrIHRhc2sgZm9yIHZibGFuay1yZWxhdGVkIHJpbmcgYWNjZXNzICovCisJCXN0cnVjdCB3b3JrX3N0cnVjdCB2Ymxhbmtfd29yazsKKworCQl1aW50MzJfdCBuZXh0X2dlbV9zZXFubzsKKworCQkvKioKKwkJICogV2FpdGluZyBzZXF1ZW5jZSBudW1iZXIsIGlmIGFueQorCQkgKi8KKwkJdWludDMyX3Qgd2FpdGluZ19nZW1fc2Vxbm87CisKKwkJLyoqCisJCSAqIExhc3Qgc2VxIHNlZW4gYXQgaXJxIHRpbWUKKwkJICovCisJCXVpbnQzMl90IGlycV9nZW1fc2Vxbm87CisKKwkJLyoqCisJCSAqIEZsYWcgaWYgdGhlIFggU2VydmVyLCBhbmQgdGh1cyBEUk0sIGlzIG5vdCBjdXJyZW50bHkgaW4KKwkJICogY29udHJvbCBvZiB0aGUgZGV2aWNlLgorCQkgKgorCQkgKiBUaGlzIGlzIHNldCBiZXR3ZWVuIExlYXZlVlQgYW5kIEVudGVyVlQuICBJdCBuZWVkcyB0byBiZQorCQkgKiByZXBsYWNlZCB3aXRoIGEgc2VtYXBob3JlLiAgSXQgYWxzbyBuZWVkcyB0byBiZQorCQkgKiB0cmFuc2l0aW9uZWQgYXdheSBmcm9tIGZvciBrZXJuZWwgbW9kZXNldHRpbmcuCisJCSAqLworCQlpbnQgc3VzcGVuZGVkOworCisJCS8qKgorCQkgKiBGbGFnIGlmIHRoZSBoYXJkd2FyZSBhcHBlYXJzIHRvIGJlIHdlZGdlZC4KKwkJICoKKwkJICogVGhpcyBpcyBzZXQgd2hlbiBhdHRlbXB0cyB0byBpZGxlIHRoZSBkZXZpY2UgdGltZW91dC4KKwkJICogSXQgcHJldmVudHMgY29tbWFuZCBzdWJtaXNzaW9uIGZyb20gb2NjdXJpbmcgYW5kIG1ha2VzCisJCSAqIGV2ZXJ5IHBlbmRpbmcgcmVxdWVzdCBmYWlsCisJCSAqLworCQlpbnQgd2VkZ2VkOworCisJCS8qKiBCaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIFggdGlsaW5nICovCisJCXVpbnQzMl90IGJpdF82X3N3aXp6bGVfeDsKKwkJLyoqIEJpdCA2IHN3aXp6bGluZyByZXF1aXJlZCBmb3IgWSB0aWxpbmcgKi8KKwkJdWludDMyX3QgYml0XzZfc3dpenpsZV95OworCX0gbW07CiB9IGRybV9pOTE1X3ByaXZhdGVfdDsKIAorLyoqIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZSBhdHRhY2hlZCB0byBlYWNoIGRybV9nZW1fb2JqZWN0ICovCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisKKwkvKiogQ3VycmVudCBzcGFjZSBhbGxvY2F0ZWQgdG8gdGhpcyBvYmplY3QgaW4gdGhlIEdUVCwgaWYgYW55LiAqLworCXN0cnVjdCBkcm1fbW1fbm9kZSAqZ3R0X3NwYWNlOworCisJLyoqIFRoaXMgb2JqZWN0J3MgcGxhY2Ugb24gdGhlIGFjdGl2ZS9mbHVzaGluZy9pbmFjdGl2ZSBsaXN0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qKgorCSAqIFRoaXMgaXMgc2V0IGlmIHRoZSBvYmplY3QgaXMgb24gdGhlIGFjdGl2ZSBvciBmbHVzaGluZyBsaXN0cworCSAqIChoYXMgcGVuZGluZyByZW5kZXJpbmcpLCBhbmQgaXMgbm90IHNldCBpZiBpdCdzIG9uIGluYWN0aXZlIChyZWFkeQorCSAqIHRvIGJlIHVuYm91bmQpLgorCSAqLworCWludCBhY3RpdmU7CisKKwkvKioKKwkgKiBUaGlzIGlzIHNldCBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIHdyaXR0ZW4gdG8gc2luY2UgbGFzdCBib3VuZAorCSAqIHRvIHRoZSBHVFQKKwkgKi8KKwlpbnQgZGlydHk7CisKKwkvKiogQUdQIG1lbW9yeSBzdHJ1Y3R1cmUgZm9yIG91ciBHVFQgYmluZGluZy4gKi8KKwlEUk1fQUdQX01FTSAqYWdwX21lbTsKKworCXN0cnVjdCBwYWdlICoqcGFnZV9saXN0OworCisJLyoqCisJICogQ3VycmVudCBvZmZzZXQgb2YgdGhlIG9iamVjdCBpbiBHVFQgc3BhY2UuCisJICoKKwkgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIGd0dF9zcGFjZS0+c3RhcnQKKwkgKi8KKwl1aW50MzJfdCBndHRfb2Zmc2V0OworCisJLyoqIEJvb2xlYW4gd2hldGhlciB0aGlzIG9iamVjdCBoYXMgYSB2YWxpZCBndHQgb2Zmc2V0LiAqLworCWludCBndHRfYm91bmQ7CisKKwkvKiogSG93IG1hbnkgdXNlcnMgaGF2ZSBwaW5uZWQgdGhpcyBvYmplY3QgaW4gR1RUIHNwYWNlICovCisJaW50IHBpbl9jb3VudDsKKworCS8qKiBCcmVhZGNydW1iIG9mIGxhc3QgcmVuZGVyaW5nIHRvIHRoZSBidWZmZXIuICovCisJdWludDMyX3QgbGFzdF9yZW5kZXJpbmdfc2Vxbm87CisKKwkvKiogQ3VycmVudCB0aWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdC4gKi8KKwl1aW50MzJfdCB0aWxpbmdfbW9kZTsKKworCS8qKiBBR1AgbWFwcGluZyB0eXBlIChBR1BfVVNFUl9NRU1PUlkgb3IgQUdQX1VTRVJfQ0FDSEVEX01FTU9SWSAqLworCXVpbnQzMl90IGFncF90eXBlOworCisJLyoqCisJICogRmxhZ2dpbmcgb2Ygd2hpY2ggaW5kaXZpZHVhbCBwYWdlcyBhcmUgdmFsaWQgaW4gR0VNX0RPTUFJTl9DUFUgd2hlbgorCSAqIEdFTV9ET01BSU5fQ1BVIGlzIG5vdCBpbiB0aGUgb2JqZWN0J3MgcmVhZCBkb21haW4uCisJICovCisJdWludDhfdCAqcGFnZV9jcHVfdmFsaWQ7Cit9OworCisvKioKKyAqIFJlcXVlc3QgcXVldWUgc3RydWN0dXJlLgorICoKKyAqIFRoZSByZXF1ZXN0IHF1ZXVlIGFsbG93cyB1cyB0byBub3RlIHNlcXVlbmNlIG51bWJlcnMgdGhhdCBoYXZlIGJlZW4gZW1pdHRlZAorICogYW5kIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggYWN0aXZlIGJ1ZmZlcnMgdG8gYmUgcmV0aXJlZC4KKyAqCisgKiBCeSBrZWVwaW5nIHRoaXMgbGlzdCwgd2UgY2FuIGF2b2lkIGhhdmluZyB0byBkbyBxdWVzdGlvbmFibGUKKyAqIHNlcXVlbmNlLW51bWJlciBjb21wYXJpc29ucyBvbiBidWZmZXIgbGFzdF9yZW5kZXJpbmdfc2Vxbm9zLCBhbmQgYXNzb2NpYXRlCisgKiBhbiBlbWlzc2lvbiB0aW1lIHdpdGggc2Vxbm9zIGZvciB0cmFja2luZyBob3cgZmFyIGFoZWFkIG9mIHRoZSBHUFUgd2UgYXJlLgorICovCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgeworCS8qKiBHRU0gc2VxdWVuY2UgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QuICovCisJdWludDMyX3Qgc2Vxbm87CisKKwkvKiogVGltZSBhdCB3aGljaCB0aGlzIHJlcXVlc3Qgd2FzIGVtaXR0ZWQsIGluIGppZmZpZXMuICovCisJdW5zaWduZWQgbG9uZyBlbWl0dGVkX2ppZmZpZXM7CisKKwkvKiogQ2FjaGUgZG9tYWlucyB0aGF0IHdlcmUgZmx1c2hlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHJlcXVlc3QuICovCisJdWludDMyX3QgZmx1c2hfZG9tYWluczsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgeworCXN0cnVjdCB7CisJCXVpbnQzMl90IGxhc3RfZ2VtX3NlcW5vOworCQl1aW50MzJfdCBsYXN0X2dlbV90aHJvdHRsZV9zZXFubzsKKwl9IG1tOworfTsKKwogZXh0ZXJuIHN0cnVjdCBkcm1faW9jdGxfZGVzYyBpOTE1X2lvY3Rsc1tdOwogZXh0ZXJuIGludCBpOTE1X21heF9pb2N0bDsKIApAQCAtMjEyLDMxICs0MjAsNDIgQEAKIGV4dGVybiB2b2lkIGk5MTVfa2VybmVsX2xvc3RfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gaW50IGk5MTVfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiBleHRlcm4gaW50IGk5MTVfZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK2V4dGVybiBpbnQgaTkxNV9kcml2ZXJfb3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfcG9zdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IGk5MTVfZHJpdmVyX2RldmljZV9pc19hZ3Aoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIGxvbmcgaTkxNV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGk5MTVfZW1pdF9ib3goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKmJveGVzLAorCQkJIGludCBpLCBpbnQgRFIxLCBpbnQgRFI0KTsKIAogLyogaTkxNV9pcnEuYyAqLwogZXh0ZXJuIGludCBpOTE1X2lycV9lbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCBpOTE1X2lycV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwordm9pZCBpOTE1X3VzZXJfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgaTkxNV91c2VyX2lycV9wdXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKLWV4dGVybiBpbnQgaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7Ci1leHRlcm4gaW50IGk5MTVfZHJpdmVyX3ZibGFua193YWl0MihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKK2V4dGVybiB2b2lkIGk5MTVfZ2VtX3ZibGFua193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIGV4dGVybiBpcnFyZXR1cm5fdCBpOTE1X2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiBpbnQgaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gaW50IGk5MTVfdmJsYW5rX3BpcGVfc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCBpOTE1X3ZibGFua19waXBlX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBpbnQgaTkxNV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIGk5MTVfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIHUzMiBpOTE1X2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gaW50IGk5MTVfdmJsYW5rX3N3YXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gdm9pZCBpOTE1X2VuYWJsZV9pcnEoZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIG1hc2spOwogCiAvKiBpOTE1X21lbS5jICovCiBleHRlcm4gaW50IGk5MTVfbWVtX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC0yNTAsMTEgKzQ2OSw5OSBAQAogZXh0ZXJuIHZvaWQgaTkxNV9tZW1fdGFrZWRvd24oc3RydWN0IG1lbV9ibG9jayAqKmhlYXApOwogZXh0ZXJuIHZvaWQgaTkxNV9tZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKIAkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBtZW1fYmxvY2sgKmhlYXApOworLyogaTkxNV9nZW0uYyAqLworaW50IGk5MTVfZ2VtX2luaXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX3ByZWFkX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX3B3cml0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX3NldF9kb21haW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9zd19maW5pc2hfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV91bnBpbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fdGhyb3R0bGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fZW50ZXJ2dF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX2xlYXZldnRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9zZXRfdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fZ2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwordm9pZCBpOTE1X2dlbV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IGk5MTVfZ2VtX3Byb2NfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7Cit2b2lkIGk5MTVfZ2VtX3Byb2NfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CitpbnQgaTkxNV9nZW1faW5pdF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBpOTE1X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitpbnQgaTkxNV9nZW1fb2JqZWN0X3BpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdWludDMyX3QgYWxpZ25tZW50KTsKK3ZvaWQgaTkxNV9nZW1fb2JqZWN0X3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3ZvaWQgaTkxNV9nZW1fbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordWludDMyX3QgaTkxNV9nZXRfZ2VtX3NlcW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGk5MTVfZ2VtX3JldGlyZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogCi0jZGVmaW5lIEk5MTVfUkVBRChyZWcpICAgICAgICAgIERSTV9SRUFEMzIoZGV2X3ByaXYtPm1taW9fbWFwLCAocmVnKSkKLSNkZWZpbmUgSTkxNV9XUklURShyZWcsdmFsKSAgICAgRFJNX1dSSVRFMzIoZGV2X3ByaXYtPm1taW9fbWFwLCAocmVnKSwgKHZhbCkpCi0jZGVmaW5lIEk5MTVfUkVBRDE2KHJlZykJRFJNX1JFQUQxNihkZXZfcHJpdi0+bW1pb19tYXAsIChyZWcpKQotI2RlZmluZSBJOTE1X1dSSVRFMTYocmVnLHZhbCkJRFJNX1dSSVRFMTYoZGV2X3ByaXYtPm1taW9fbWFwLCAocmVnKSwgKHZhbCkpCisvKiBpOTE1X2dlbV90aWxpbmcuYyAqLwordm9pZCBpOTE1X2dlbV9kZXRlY3RfYml0XzZfc3dpenpsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworLyogaTkxNV9nZW1fZGVidWcuYyAqLwordm9pZCBpOTE1X2dlbV9kdW1wX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGxlbiwKKwkJCSAgY29uc3QgY2hhciAqd2hlcmUsIHVpbnQzMl90IG1hcmspOworI2lmIFdBVENIX0lOQUNUSVZFCit2b2lkIGk5MTVfdmVyaWZ5X2luYWN0aXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNoYXIgKmZpbGUsIGludCBsaW5lKTsKKyNlbHNlCisjZGVmaW5lIGk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgZmlsZSwgbGluZSkKKyNlbmRpZgordm9pZCBpOTE1X2dlbV9vYmplY3RfY2hlY2tfY29oZXJlbmN5KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgaGFuZGxlKTsKK3ZvaWQgaTkxNV9nZW1fZHVtcF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBsZW4sCisJCQkgIGNvbnN0IGNoYXIgKndoZXJlLCB1aW50MzJfdCBtYXJrKTsKK3ZvaWQgaTkxNV9kdW1wX2xydShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICp3aGVyZSk7CisKKy8qIGk5MTVfc3VzcGVuZC5jICovCitleHRlcm4gaW50IGk5MTVfc2F2ZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCisvKiBpOTE1X3N1c3BlbmQuYyAqLworZXh0ZXJuIGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IGk5MTVfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworLyogaTkxNV9vcHJlZ2lvbi5jICovCitleHRlcm4gaW50IGludGVsX29wcmVnaW9uX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF9vcHJlZ2lvbl9mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgb3ByZWdpb25fYXNsZV9pbnRyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgb3ByZWdpb25fZW5hYmxlX2FzbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKKy8qKgorICogTG9jayB0ZXN0IGZvciB3aGVuIGl0J3MganVzdCBmb3Igc3luY2hyb25pemF0aW9uIG9mIHJpbmcgYWNjZXNzLgorICoKKyAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3QgbmVlZCB0byBkbyBpdCB3aGVuIEdFTSBpcyBpbml0aWFsaXplZCBhcyBub2JvZHkgZWxzZQorICogaGFzIGFjY2VzcyB0byB0aGUgcmluZy4KKyAqLworI2RlZmluZSBSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdikgZG8gewkJCVwKKwlpZiAoKChkcm1faTkxNV9wcml2YXRlX3QgKilkZXYtPmRldl9wcml2YXRlKS0+cmluZy5yaW5nX29iaiA9PSBOVUxMKSBcCisJCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBJOTE1X1JFQUQocmVnKSAgICAgICAgICByZWFkbChkZXZfcHJpdi0+cmVncyArIChyZWcpKQorI2RlZmluZSBJOTE1X1dSSVRFKHJlZywgdmFsKSAgICAgd3JpdGVsKHZhbCwgZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgSTkxNV9SRUFEMTYocmVnKQlyZWFkdyhkZXZfcHJpdi0+cmVncyArIChyZWcpKQorI2RlZmluZSBJOTE1X1dSSVRFMTYocmVnLCB2YWwpCXdyaXRlbCh2YWwsIGRldl9wcml2LT5yZWdzICsgKHJlZykpCisjZGVmaW5lIEk5MTVfUkVBRDgocmVnKQkJcmVhZGIoZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgSTkxNV9XUklURTgocmVnLCB2YWwpCXdyaXRlYih2YWwsIGRldl9wcml2LT5yZWdzICsgKHJlZykpCiAKICNkZWZpbmUgSTkxNV9WRVJCT1NFIDAKIApAQCAtMjg0LDgxNiArNTkxLDI5IEBACiAJaWYgKEk5MTVfVkVSQk9TRSkgRFJNX0RFQlVHKCJBRFZBTkNFX0xQX1JJTkcgJXhcbiIsIG91dHJpbmcpOwlcCiAJZGV2X3ByaXYtPnJpbmcudGFpbCA9IG91dHJpbmc7CQkJCQlcCiAJZGV2X3ByaXYtPnJpbmcuc3BhY2UgLT0gb3V0Y291bnQgKiA0OwkJCQlcCi0JSTkxNV9XUklURShMUF9SSU5HICsgUklOR19UQUlMLCBvdXRyaW5nKTsJCQlcCisJSTkxNV9XUklURShQUkIwX1RBSUwsIG91dHJpbmcpOwkJCVwKIH0gd2hpbGUoMCkKIAotZXh0ZXJuIGludCBpOTE1X3dhaXRfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IG4sIGNvbnN0IGNoYXIgKmNhbGxlcik7Ci0KLS8qIEV4dGVuZGVkIGNvbmZpZyBzcGFjZSAqLwotI2RlZmluZSBMQkIgMHhmNAotCi0vKiBWR0Egc3R1ZmYgKi8KLQotI2RlZmluZSBWR0FfU1QwMV9NREEgMHgzYmEKLSNkZWZpbmUgVkdBX1NUMDFfQ0dBIDB4M2RhCi0KLSNkZWZpbmUgVkdBX01TUl9XUklURSAweDNjMgotI2RlZmluZSBWR0FfTVNSX1JFQUQgMHgzY2MKLSNkZWZpbmUgICBWR0FfTVNSX01FTV9FTiAoMTw8MSkKLSNkZWZpbmUgICBWR0FfTVNSX0NHQV9NT0RFICgxPDwwKQotCi0jZGVmaW5lIFZHQV9TUl9JTkRFWCAweDNjNAotI2RlZmluZSBWR0FfU1JfREFUQSAweDNjNQotCi0jZGVmaW5lIFZHQV9BUl9JTkRFWCAweDNjMAotI2RlZmluZSAgIFZHQV9BUl9WSURfRU4gKDE8PDUpCi0jZGVmaW5lIFZHQV9BUl9EQVRBX1dSSVRFIDB4M2MwCi0jZGVmaW5lIFZHQV9BUl9EQVRBX1JFQUQgMHgzYzEKLQotI2RlZmluZSBWR0FfR1JfSU5ERVggMHgzY2UKLSNkZWZpbmUgVkdBX0dSX0RBVEEgMHgzY2YKLS8qIEdSMDUgKi8KLSNkZWZpbmUgICBWR0FfR1JfTUVNX1JFQURfTU9ERV9TSElGVCAzCi0jZGVmaW5lICAgICBWR0FfR1JfTUVNX1JFQURfTU9ERV9QTEFORSAxCi0vKiBHUjA2ICovCi0jZGVmaW5lICAgVkdBX0dSX01FTV9NT0RFX01BU0sgMHhjCi0jZGVmaW5lICAgVkdBX0dSX01FTV9NT0RFX1NISUZUIDIKLSNkZWZpbmUgICBWR0FfR1JfTUVNX0EwMDAwX0FGRkZGIDAKLSNkZWZpbmUgICBWR0FfR1JfTUVNX0EwMDAwX0JGRkZGIDEKLSNkZWZpbmUgICBWR0FfR1JfTUVNX0IwMDAwX0I3RkZGIDIKLSNkZWZpbmUgICBWR0FfR1JfTUVNX0IwMDAwX0JGRkZGIDMKLQotI2RlZmluZSBWR0FfREFDTUFTSyAweDNjNgotI2RlZmluZSBWR0FfREFDUlggMHgzYzcKLSNkZWZpbmUgVkdBX0RBQ1dYIDB4M2M4Ci0jZGVmaW5lIFZHQV9EQUNEQVRBIDB4M2M5Ci0KLSNkZWZpbmUgVkdBX0NSX0lOREVYX01EQSAweDNiNAotI2RlZmluZSBWR0FfQ1JfREFUQV9NREEgMHgzYjUKLSNkZWZpbmUgVkdBX0NSX0lOREVYX0NHQSAweDNkNAotI2RlZmluZSBWR0FfQ1JfREFUQV9DR0EgMHgzZDUKLQotI2RlZmluZSBHRlhfT1BfVVNFUl9JTlRFUlJVUFQJCSgoMDw8MjkpfCgyPDwyMykpCi0jZGVmaW5lIEdGWF9PUF9CUkVBS1BPSU5UX0lOVEVSUlVQVAkoKDA8PDI5KXwoMTw8MjMpKQotI2RlZmluZSBDTURfUkVQT1JUX0hFQUQJCQkoNzw8MjMpCi0jZGVmaW5lIENNRF9TVE9SRV9EV09SRF9JRFgJCSgoMHgyMTw8MjMpIHwgMHgxKQotI2RlZmluZSBDTURfT1BfQkFUQ0hfQlVGRkVSICAoKDB4MDw8MjkpfCgweDMwPDwyMyl8MHgxKQotCi0jZGVmaW5lIElOU1RfUEFSU0VSX0NMSUVOVCAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgSU5TVF9PUF9GTFVTSCAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBJTlNUX0ZMVVNIX01BUF9DQUNIRSAweDAwMDAwMDAxCi0KLSNkZWZpbmUgQkIxX1NUQVJUX0FERFJfTUFTSyAgICh+MHg3KQotI2RlZmluZSBCQjFfUFJPVEVDVEVEICAgICAgICAgKDE8PDApCi0jZGVmaW5lIEJCMV9VTlBST1RFQ1RFRCAgICAgICAoMDw8MCkKLSNkZWZpbmUgQkIyX0VORF9BRERSX01BU0sgICAgICh+MHg3KQotCi0vKiBGcmFtZWJ1ZmZlciBjb21wcmVzc2lvbiAqLwotI2RlZmluZSBGQkNfQ0ZCX0JBU0UJCTB4MDMyMDAgLyogNGsgcGFnZSBhbGlnbmVkICovCi0jZGVmaW5lIEZCQ19MTF9CQVNFCQkweDAzMjA0IC8qIDRrIHBhZ2UgYWxpZ25lZCAqLwotI2RlZmluZSBGQkNfQ09OVFJPTAkJMHgwMzIwOAotI2RlZmluZSAgIEZCQ19DVExfRU4JCSgxPDwzMSkKLSNkZWZpbmUgICBGQkNfQ1RMX1BFUklPRElDCSgxPDwzMCkKLSNkZWZpbmUgICBGQkNfQ1RMX0lOVEVSVkFMX1NISUZUICgxNikKLSNkZWZpbmUgICBGQkNfQ1RMX1VOQ09NUFJFU1NJQkxFICgxPDwxNCkKLSNkZWZpbmUgICBGQkNfQ1RMX1NUUklERV9TSElGVAkoNSkKLSNkZWZpbmUgICBGQkNfQ1RMX0ZFTkNFTk8JKDE8PDApCi0jZGVmaW5lIEZCQ19DT01NQU5ECQkweDAzMjBjCi0jZGVmaW5lICAgRkJDX0NNRF9DT01QUkVTUwkoMTw8MCkKLSNkZWZpbmUgRkJDX1NUQVRVUwkJMHgwMzIxMAotI2RlZmluZSAgIEZCQ19TVEFUX0NPTVBSRVNTSU5HCSgxPDwzMSkKLSNkZWZpbmUgICBGQkNfU1RBVF9DT01QUkVTU0VECSgxPDwzMCkKLSNkZWZpbmUgICBGQkNfU1RBVF9NT0RJRklFRAkoMTw8MjkpCi0jZGVmaW5lICAgRkJDX1NUQVRfQ1VSUkVOVF9MSU5FCSgxPDwwKQotI2RlZmluZSBGQkNfQ09OVFJPTDIJCTB4MDMyMTQKLSNkZWZpbmUgICBGQkNfQ1RMX0ZFTkNFX0RCTAkoMDw8NCkKLSNkZWZpbmUgICBGQkNfQ1RMX0lETEVfSU1NCSgwPDwyKQotI2RlZmluZSAgIEZCQ19DVExfSURMRV9GVUxMCSgxPDwyKQotI2RlZmluZSAgIEZCQ19DVExfSURMRV9MSU5FCSgyPDwyKQotI2RlZmluZSAgIEZCQ19DVExfSURMRV9ERUJVRwkoMzw8MikKLSNkZWZpbmUgICBGQkNfQ1RMX0NQVV9GRU5DRQkoMTw8MSkKLSNkZWZpbmUgICBGQkNfQ1RMX1BMQU5FQQkoMDw8MCkKLSNkZWZpbmUgICBGQkNfQ1RMX1BMQU5FQgkoMTw8MCkKLSNkZWZpbmUgRkJDX0ZFTkNFX09GRgkJMHgwMzIxYgotCi0jZGVmaW5lIEZCQ19MTF9TSVpFCQkoMTUzNikKLSNkZWZpbmUgRkJDX0xMX1BBRAkJKDMyKQotCi0vKiBJbnRlcnJ1cHQgYml0czoKLSAqLwotI2RlZmluZSBVU0VSX0lOVF9GTEFHICAgICgxPDwxKQotI2RlZmluZSBWU1lOQ19QSVBFQl9GTEFHICgxPDw1KQotI2RlZmluZSBWU1lOQ19QSVBFQV9GTEFHICgxPDw3KQotI2RlZmluZSBIV0JfT09NX0ZMQUcgICAgICgxPDwxMykgLyogYmlubmVyIG91dCBvZiBtZW1vcnkgKi8KLQotI2RlZmluZSBJOTE1UkVHX0hXU1RBTQkJMHgwMjA5OAotI2RlZmluZSBJOTE1UkVHX0lOVF9JREVOVElUWV9SCTB4MDIwYTQKLSNkZWZpbmUgSTkxNVJFR19JTlRfTUFTS19SCTB4MDIwYTgKLSNkZWZpbmUgSTkxNVJFR19JTlRfRU5BQkxFX1IJMHgwMjBhMAotCi0jZGVmaW5lIEk5MTVSRUdfUElQRUFTVEFUCTB4NzAwMjQKLSNkZWZpbmUgSTkxNVJFR19QSVBFQlNUQVQJMHg3MTAyNAotCi0jZGVmaW5lIEk5MTVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUJKDFVTDw8MTcpCi0jZGVmaW5lIEk5MTVfVkJMQU5LX0NMRUFSCQkoMVVMPDwxKQotCi0jZGVmaW5lIFNSWF9JTkRFWAkJMHgzYzQKLSNkZWZpbmUgU1JYX0RBVEEJCTB4M2M1Ci0jZGVmaW5lIFNSMDEJCQkxCi0jZGVmaW5lIFNSMDFfU0NSRUVOX09GRgkJKDE8PDUpCi0KLSNkZWZpbmUgUFBDUgkJCTB4NjEyMDQKLSNkZWZpbmUgUFBDUl9PTgkJCSgxPDwwKQotCi0jZGVmaW5lIERWT0IJCQkweDYxMTQwCi0jZGVmaW5lIERWT0JfT04JCQkoMTw8MzEpCi0jZGVmaW5lIERWT0MJCQkweDYxMTYwCi0jZGVmaW5lIERWT0NfT04JCQkoMTw8MzEpCi0jZGVmaW5lIExWRFMJCQkweDYxMTgwCi0jZGVmaW5lIExWRFNfT04JCQkoMTw8MzEpCi0KLSNkZWZpbmUgQURQQQkJCTB4NjExMDAKLSNkZWZpbmUgQURQQV9EUE1TX01BU0sJCSh+KDM8PDEwKSkKLSNkZWZpbmUgQURQQV9EUE1TX09OCQkoMDw8MTApCi0jZGVmaW5lIEFEUEFfRFBNU19TVVNQRU5ECSgxPDwxMCkKLSNkZWZpbmUgQURQQV9EUE1TX1NUQU5EQlkJKDI8PDEwKQotI2RlZmluZSBBRFBBX0RQTVNfT0ZGCQkoMzw8MTApCi0KLSNkZWZpbmUgTk9QSUQgICAgICAgICAgICAgICAgICAgMHgyMDk0Ci0jZGVmaW5lIExQX1JJTkcJCQkweDIwMzAKLSNkZWZpbmUgSFBfUklORwkJCTB4MjA0MAotLyogVGhlIGJpbm5lciBoYXMgaXRzIG93biByaW5nIGJ1ZmZlcjoKLSAqLwotI2RlZmluZSBIV0JfUklORwkJMHgyNDAwCi0KLSNkZWZpbmUgUklOR19UQUlMCQkweDAwCi0jZGVmaW5lIFRBSUxfQUREUgkJMHgwMDFGRkZGOAotI2RlZmluZSBSSU5HX0hFQUQJCTB4MDQKLSNkZWZpbmUgSEVBRF9XUkFQX0NPVU5UCQkweEZGRTAwMDAwCi0jZGVmaW5lIEhFQURfV1JBUF9PTkUJCTB4MDAyMDAwMDAKLSNkZWZpbmUgSEVBRF9BRERSCQkweDAwMUZGRkZDCi0jZGVmaW5lIFJJTkdfU1RBUlQJCTB4MDgKLSNkZWZpbmUgU1RBUlRfQUREUgkJMHgweEZGRkZGMDAwCi0jZGVmaW5lIFJJTkdfTEVOCQkweDBDCi0jZGVmaW5lIFJJTkdfTlJfUEFHRVMJCTB4MDAxRkYwMDAKLSNkZWZpbmUgUklOR19SRVBPUlRfTUFTSwkweDAwMDAwMDA2Ci0jZGVmaW5lIFJJTkdfUkVQT1JUXzY0SwkJMHgwMDAwMDAwMgotI2RlZmluZSBSSU5HX1JFUE9SVF8xMjhLCTB4MDAwMDAwMDQKLSNkZWZpbmUgUklOR19OT19SRVBPUlQJCTB4MDAwMDAwMDAKLSNkZWZpbmUgUklOR19WQUxJRF9NQVNLCQkweDAwMDAwMDAxCi0jZGVmaW5lIFJJTkdfVkFMSUQJCTB4MDAwMDAwMDEKLSNkZWZpbmUgUklOR19JTlZBTElECQkweDAwMDAwMDAwCi0KLS8qIEluc3RydWN0aW9uIHBhcnNlciBlcnJvciByZWc6Ci0gKi8KLSNkZWZpbmUgSVBFSVIJCQkweDIwODgKLQotLyogU2NyYXRjaCBwYWQgZGVidWcgMCByZWc6Ci0gKi8KLSNkZWZpbmUgU0NQRDAJCQkweDIwOWMKLQotLyogRXJyb3Igc3RhdHVzIHJlZzoKLSAqLwotI2RlZmluZSBFU1IJCQkweDIwYjgKLQotLyogU2Vjb25kYXJ5IERNQSBmZXRjaCBhZGRyZXNzIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBETUFfRkFERF9TCQkweDIwZDQKLQotLyogTWVtb3J5IEludGVyZmFjZSBBcmJpdHJhdGlvbiBTdGF0ZQotICovCi0jZGVmaW5lIE1JX0FSQl9TVEFURQkJMHgyMGU0Ci0KLS8qIENhY2hlIG1vZGUgMCByZWcuCi0gKiAgLSBNYW5pcHVsYXRpbmcgcmVuZGVyIGNhY2hlIGJlaGF2aW91ciBpcyBjZW50cmFsCi0gKiAgICB0byB0aGUgY29uY2VwdCBvZiB6b25lIHJlbmRlcmluZywgdHVuaW5nIHRoaXMgcmVnIGNhbiBoZWxwIGF2b2lkCi0gKiAgICB1bm5lY2Vzc2FyeSByZW5kZXIgY2FjaGUgcmVhZHMgYW5kIGV2ZW4gd3JpdGVzIChmb3Igei9zdGVuY2lsKQotICogICAgYXQgYmVnaW5uaW5nIGFuZCBlbmQgb2Ygc2NlbmUuCisvKioKKyAqIFJlYWRzIGEgZHdvcmQgb3V0IG9mIHRoZSBzdGF0dXMgcGFnZSwgd2hpY2ggaXMgd3JpdHRlbiB0byBmcm9tIHRoZSBjb21tYW5kCisgKiBxdWV1ZSBieSBhdXRvbWF0aWMgdXBkYXRlcywgTUlfUkVQT1JUX0hFQUQsIE1JX1NUT1JFX0RBVEFfSU5ERVgsIG9yCisgKiBNSV9TVE9SRV9EQVRBX0lNTS4KICAqCi0gKiAtIFRvIGNoYW5nZSBhIGJpdCwgd3JpdGUgdG8gdGhpcyByZWcgd2l0aCBhIG1hc2sgYml0IHNldCBhbmQgdGhlCi0gKiBiaXQgb2YgaW50ZXJlc3QgZWl0aGVyIHNldCBvciBjbGVhcmVkLiAgRUc6IChCSVQ8PDE2KSB8IEJJVCB0byBzZXQuCisgKiBUaGUgZm9sbG93aW5nIGR3b3JkcyBoYXZlIGEgcmVzZXJ2ZWQgbWVhbmluZzoKKyAqIDB4MDA6IElTUiBjb3B5LCB1cGRhdGVkIHdoZW4gYW4gSVNSIGJpdCBub3Qgc2V0IGluIHRoZSBIV1NUQU0gY2hhbmdlcy4KKyAqIDB4MDQ6IHJpbmcgMCBoZWFkIHBvaW50ZXIKKyAqIDB4MDU6IHJpbmcgMSBoZWFkIHBvaW50ZXIgKDkxNS1jbGFzcykKKyAqIDB4MDY6IHJpbmcgMiBoZWFkIHBvaW50ZXIgKDkxNS1jbGFzcykKKyAqIDB4MTAtMHgxYjogQ29udGV4dCBzdGF0dXMgRFdvcmRzIChHTTQ1KQorICogMHgxZjogTGFzdCB3cml0dGVuIHN0YXR1cyBvZmZzZXQuIChHTTQ1KQorICoKKyAqIFRoZSBhcmVhIGZyb20gZHdvcmQgMHgyMCB0byAweDNmZiBpcyBhdmFpbGFibGUgZm9yIGRyaXZlciB1c2FnZS4KICAqLwotI2RlZmluZSBDYWNoZV9Nb2RlXzAJCTB4MjEyMAotI2RlZmluZSBDQUNIRV9NT0RFXzAJCTB4MjEyMAotI2RlZmluZSBDTTBfTUFTS19TSElGVCAgICAgICAgICAxNgotI2RlZmluZSBDTTBfSVpfT1BUX0RJU0FCTEUgICAgICAoMTw8NikKLSNkZWZpbmUgQ00wX1pSX09QVF9ESVNBQkxFICAgICAgKDE8PDUpCi0jZGVmaW5lIENNMF9ERVBUSF9FVklDVF9ESVNBQkxFICgxPDw0KQotI2RlZmluZSBDTTBfQ09MT1JfRVZJQ1RfRElTQUJMRSAoMTw8MykKLSNkZWZpbmUgQ00wX0RFUFRIX1dSSVRFX0RJU0FCTEUgKDE8PDEpCi0jZGVmaW5lIENNMF9SQ19PUF9GTFVTSF9ESVNBQkxFICgxPDwwKQotCi0KLS8qIEdyYXBoaWNzIGZsdXNoIGNvbnRyb2wuICBBIENQVSB3cml0ZSBmbHVzaGVzIHRoZSBHV0Igb2YgYWxsIHdyaXRlcy4KLSAqIFRoZSBkYXRhIGlzIGRpc2NhcmRlZC4KLSAqLwotI2RlZmluZSBHRlhfRkxTSF9DTlRMCQkweDIxNzAKLQotLyogQmlubmVyIGNvbnRyb2wuICBEZWZpbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgYmluIHBvaW50ZXIgbGlzdDoKLSAqLwotI2RlZmluZSBCSU5DVEwJCQkweDI0MjAKLSNkZWZpbmUgQkNfTUFTSwkJCSgxIDw8IDkpCi0KLS8qIEJpbm5lZCBzY2VuZSBpbmZvLgotICovCi0jZGVmaW5lIEJJTlNDRU5FCQkweDI0MjgKLSNkZWZpbmUgQlNfT1BfTE9BRAkJKDEgPDwgOCkKLSNkZWZpbmUgQlNfTUFTSwkJCSgxIDw8IDIyKQotCi0vKiBCaW4gY29tbWFuZCBwYXJzZXIgZGVidWcgcmVnOgotICovCi0jZGVmaW5lIEJDUEQJCQkweDI0ODAKLQotLyogQmluIG1lbW9yeSBjb250cm9sIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBCTUNECQkJMHgyNDg0Ci0KLS8qIEJpbiBkYXRhIGNhY2hlIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBCRENECQkJMHgyNDg4Ci0KLS8qIEJpbm5lciBwb2ludGVyIGNhY2hlIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBCUENECQkJMHgyNDhjCi0KLS8qIEJpbm5lciBzY3JhdGNoIHBhZCBkZWJ1ZyByZWc6Ci0gKi8KLSNkZWZpbmUgQklOU0tQRAkJCTB4MjRmMAotCi0vKiBIV0Igc2NyYXRjaCBwYWQgZGVidWcgcmVnOgotICovCi0jZGVmaW5lIEhXQlNLUEQJCQkweDI0ZjQKLQotLyogQmlubmVyIG1lbW9yeSBwb29sIHJlZzoKLSAqLwotI2RlZmluZSBCTVBfQlVGRkVSCQkweDI0MzAKLSNkZWZpbmUgQk1QX1BBR0VfU0laRV80SwkoMCA8PCAxMCkKLSNkZWZpbmUgQk1QX0JVRkZFUl9TSVpFX1NISUZUCTEKLSNkZWZpbmUgQk1QX0VOQUJMRQkJKDEgPDwgMCkKLQotLyogR2V0L3B1dCBtZW1vcnkgZnJvbSB0aGUgYmlubmVyIG1lbW9yeSBwb29sOgotICovCi0jZGVmaW5lIEJNUF9HRVQJCQkweDI0MzgKLSNkZWZpbmUgQk1QX1BVVAkJCTB4MjQ0MAotI2RlZmluZSBCTVBfT0ZGU0VUX1NISUZUCTUKLQotLyogM0Qgc3RhdGUgcGFja2V0czoKLSAqLwotI2RlZmluZSBHRlhfT1BfUkFTVEVSX1JVTEVTICAgICgoMHgzPDwyOSl8KDB4Nzw8MjQpKQotCi0jZGVmaW5lIEdGWF9PUF9TQ0lTU09SICAgICAgICAgKCgweDM8PDI5KXwoMHgxYzw8MjQpfCgweDEwPDwxOSkpCi0jZGVmaW5lIFNDX1VQREFURV9TQ0lTU09SICAgICAgICgweDE8PDEpCi0jZGVmaW5lIFNDX0VOQUJMRV9NQVNLICAgICAgICAgICgweDE8PDApCi0jZGVmaW5lIFNDX0VOQUJMRSAgICAgICAgICAgICAgICgweDE8PDApCi0KLSNkZWZpbmUgR0ZYX09QX0xPQURfSU5ESVJFQ1QgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4Nzw8MTYpKQotCi0jZGVmaW5lIEdGWF9PUF9TQ0lTU09SX0lORk8gICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgxPDwxNil8KDB4MSkpCi0jZGVmaW5lIFNDSV9ZTUlOX01BU0sgICAgICAoMHhmZmZmPDwxNikKLSNkZWZpbmUgU0NJX1hNSU5fTUFTSyAgICAgICgweGZmZmY8PDApCi0jZGVmaW5lIFNDSV9ZTUFYX01BU0sgICAgICAoMHhmZmZmPDwxNikKLSNkZWZpbmUgU0NJX1hNQVhfTUFTSyAgICAgICgweGZmZmY8PDApCi0KLSNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfRU5BQkxFCSAoKDB4Mzw8MjkpfCgweDFjPDwyNCl8KDB4MTA8PDE5KSkKLSNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfUkVDVAkgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgxPDwxNil8MSkKLSNkZWZpbmUgR0ZYX09QX0NPTE9SX0ZBQ1RPUiAgICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHgxPDwxNil8MHgwKQotI2RlZmluZSBHRlhfT1BfU1RJUFBMRSAgICAgICAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgzPDwxNikpCi0jZGVmaW5lIEdGWF9PUF9NQVBfSU5GTyAgICAgICAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8MHg0KQotI2RlZmluZSBHRlhfT1BfREVTVEJVRkZFUl9WQVJTICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDg1PDwxNil8MHgwKQotI2RlZmluZSBHRlhfT1BfRFJBV1JFQ1RfSU5GTyAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgwPDwxNil8KDB4MykpCi0KLSNkZWZpbmUgR0ZYX09QX0RSQVdSRUNUX0lORk9fSTk2NSAoKDB4NzkwMDw8MTYpfDB4MikKLQotI2RlZmluZSBTUkNfQ09QWV9CTFRfQ01EICAgICAgICAgICAgICAgICgoMjw8MjkpfCgweDQzPDwyMil8NCkKLSNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX0NNRAkJKCgyPDwyOSl8KDB4NTM8PDIyKXw2KQotI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfQUxQSEEJKDE8PDIxKQotI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfUkdCCSgxPDwyMCkKLSNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX1NSQ19USUxFRAkoMTw8MTUpCi0jZGVmaW5lIFhZX1NSQ19DT1BZX0JMVF9EU1RfVElMRUQJKDE8PDExKQotCi0jZGVmaW5lIE1JX0JBVENIX0JVRkZFUgkJKCgweDMwPDwyMyl8MSkKLSNkZWZpbmUgTUlfQkFUQ0hfQlVGRkVSX1NUQVJUCSgweDMxPDwyMykKLSNkZWZpbmUgTUlfQkFUQ0hfQlVGRkVSX0VORAkoMHhBPDwyMykKLSNkZWZpbmUgTUlfQkFUQ0hfTk9OX1NFQ1VSRQkoMSkKLSNkZWZpbmUgTUlfQkFUQ0hfTk9OX1NFQ1VSRV9JOTY1ICgxPDw4KQotCi0jZGVmaW5lIE1JX1dBSVRfRk9SX0VWRU5UICAgICAgICgoMHgzPDwyMykpCi0jZGVmaW5lIE1JX1dBSVRfRk9SX1BMQU5FX0JfRkxJUCAgICAgICgxPDw2KQotI2RlZmluZSBNSV9XQUlUX0ZPUl9QTEFORV9BX0ZMSVAgICAgICAoMTw8MikKLSNkZWZpbmUgTUlfV0FJVF9GT1JfUExBTkVfQV9TQ0FOTElORVMgKDE8PDEpCi0KLSNkZWZpbmUgTUlfTE9BRF9TQ0FOX0xJTkVTX0lOQ0wgICgoMHgxMjw8MjMpKQotCi0jZGVmaW5lIENNRF9PUF9ESVNQTEFZQlVGRkVSX0lORk8gKCgweDA8PDI5KXwoMHgxNDw8MjMpfDIpCi0jZGVmaW5lIEFTWU5DX0ZMSVAgICAgICAgICAgICAgICAgKDE8PDIyKQotI2RlZmluZSBESVNQTEFZX1BMQU5FX0EgICAgICAgICAgICgwPDwyMCkKLSNkZWZpbmUgRElTUExBWV9QTEFORV9CICAgICAgICAgICAoMTw8MjApCi0KLS8qIERpc3BsYXkgcmVncyAqLwotI2RlZmluZSBEU1BBQ05UUiAgICAgICAgICAgICAgICAweDcwMTgwCi0jZGVmaW5lIERTUEJDTlRSICAgICAgICAgICAgICAgIDB4NzExODAKLSNkZWZpbmUgRElTUFBMQU5FX1NFTF9QSVBFX01BU0sgICAgICAgICAgICAgICAgICgxPDwyNCkKLQotLyogRGVmaW5lIHRoZSByZWdpb24gb2YgaW50ZXJlc3QgZm9yIHRoZSBiaW5uZXI6Ci0gKi8KLSNkZWZpbmUgQ01EX09QX0JJTl9DT05UUk9MCSAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODQ8PDE2KXw0KQotCi0jZGVmaW5lIENNRF9PUF9ERVNUQlVGRkVSX0lORk8JICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4ZTw8MTYpfDEpCi0KLSNkZWZpbmUgQ01EX01JX0ZMVVNIICAgICAgICAgKDB4MDQgPDwgMjMpCi0jZGVmaW5lIE1JX05PX1dSSVRFX0ZMVVNIICAgICgxIDw8IDIpCi0jZGVmaW5lIE1JX1JFQURfRkxVU0ggICAgICAgICgxIDw8IDApCi0jZGVmaW5lIE1JX0VYRV9GTFVTSCAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIE1JX0VORF9TQ0VORSAgICAgICAgICgxIDw8IDQpIC8qIGZsdXNoIGJpbm5lciBhbmQgaW5jciBzY2VuZSBjb3VudCAqLwotI2RlZmluZSBNSV9TQ0VORV9DT1VOVCAgICAgICAoMSA8PCAzKSAvKiBqdXN0IGluY3JlbWVudCBzY2VuZSBjb3VudCAqLwotCi0jZGVmaW5lIEJSRUFEQ1JVTUJfQklUUyAzMQotI2RlZmluZSBCUkVBRENSVU1CX01BU0sgKCgxVSA8PCBCUkVBRENSVU1CX0JJVFMpIC0gMSkKLQotI2RlZmluZSBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpICAoKCh2b2xhdGlsZSB1MzIqKShkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpKVs1XSkKICNkZWZpbmUgUkVBRF9IV1NQKGRldl9wcml2LCByZWcpICAoKCh2b2xhdGlsZSB1MzIqKShkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpKVtyZWddKQorI2RlZmluZSBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpIFJFQURfSFdTUChkZXZfcHJpdiwgNSkKKyNkZWZpbmUgSTkxNV9HRU1fSFdTX0lOREVYCQkweDIwCiAKLSNkZWZpbmUgQkxDX1BXTV9DVEwJCTB4NjEyNTQKLSNkZWZpbmUgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9TSElGVAkJKDE3KQotCi0jZGVmaW5lIEJMQ19QV01fQ1RMMgkJMHg2MTI1MAotLyoqCi0gKiBUaGlzIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IDE1IGJpdHMgb2YgdGhlIG51bWJlciBvZiBiYWNrbGlnaHQgY3ljbGVzIGluIGEKLSAqIGNvbXBsZXRlIGN5Y2xlIG9mIHRoZSBtb2R1bGF0ZWQgYmFja2xpZ2h0IGNvbnRyb2wuCi0gKgotICogVGhlIGFjdHVhbCB2YWx1ZSBpcyB0aGlzIGZpZWxkIG11bHRpcGxpZWQgYnkgdHdvLgotICovCi0jZGVmaW5lIEJBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfTUFTSwkJKDB4N2ZmZiA8PCAxNykKLSNkZWZpbmUgQkxNX0xFR0FDWV9NT0RFCQkJCSgxIDw8IDE2KQotLyoqCi0gKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgY3ljbGVzIG91dCBvZiB0aGUgYmFja2xpZ2h0IG1vZHVsYXRpb24gY3ljbGUgZm9yIHdoaWNoCi0gKiB0aGUgYmFja2xpZ2h0IGlzIG9uLgotICoKLSAqIFRoaXMgZmllbGQgbXVzdCBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjeWNsZXMgaW4gdGhlIGNvbXBsZXRlCi0gKiBiYWNrbGlnaHQgbW9kdWxhdGlvbiBjeWNsZS4KLSAqLwotI2RlZmluZSBCQUNLTElHSFRfRFVUWV9DWUNMRV9TSElGVAkJKDApCi0jZGVmaW5lIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0sJCSgweGZmZmYpCi0KLSNkZWZpbmUgSTkxNV9HQ0ZHQwkJCTB4ZjAKLSNkZWZpbmUgSTkxNV9MT1dfRlJFUVVFTkNZX0VOQUJMRQkJKDEgPDwgNykKLSNkZWZpbmUgSTkxNV9ESVNQTEFZX0NMT0NLXzE5MF8yMDBfTUhaCQkoMCA8PCA0KQotI2RlZmluZSBJOTE1X0RJU1BMQVlfQ0xPQ0tfMzMzX01IWgkJKDQgPDwgNCkKLSNkZWZpbmUgSTkxNV9ESVNQTEFZX0NMT0NLX01BU0sJCQkoNyA8PCA0KQotCi0jZGVmaW5lIEk4NTVfSFBMTENDCQkJMHhjMAotI2RlZmluZSBJODU1X0NMT0NLX0NPTlRST0xfTUFTSwkJCSgzIDw8IDApCi0jZGVmaW5lIEk4NTVfQ0xPQ0tfMTMzXzIwMAkJCSgwIDw8IDApCi0jZGVmaW5lIEk4NTVfQ0xPQ0tfMTAwXzIwMAkJCSgxIDw8IDApCi0jZGVmaW5lIEk4NTVfQ0xPQ0tfMTAwXzEzMwkJCSgyIDw8IDApCi0jZGVmaW5lIEk4NTVfQ0xPQ0tfMTY2XzI1MAkJCSgzIDw8IDApCi0KLS8qIHAzMTcsIDMxOQotICovCi0jZGVmaW5lIFZDTEsyX1ZDT19NICAgICAgICAweDYwMDggLyogdHJlYXQgYXMgMTYgYml0PyAoaW5jbHVkZXMgbXNicykgKi8KLSNkZWZpbmUgVkNMSzJfVkNPX04gICAgICAgIDB4NjAwYQotI2RlZmluZSBWQ0xLMl9WQ09fRElWX1NFTCAgMHg2MDEyCi0KLSNkZWZpbmUgVkNMS19ESVZJU09SX1ZHQTAgICAweDYwMDAKLSNkZWZpbmUgVkNMS19ESVZJU09SX1ZHQTEgICAweDYwMDQKLSNkZWZpbmUgVkNMS19QT1NUX0RJVgkgICAgMHg2MDEwCi0vKiogU2VsZWN0cyBhIHBvc3QgZGl2aXNvciBvZiA0IGluc3RlYWQgb2YgMi4gKi8KLSMgZGVmaW5lIFZHQTFfUERfUDJfRElWXzQJKDEgPDwgMTUpCi0vKiogT3ZlcnJpZGVzIHRoZSBwMiBwb3N0IGRpdmlzb3IgZmllbGQgKi8KLSMgZGVmaW5lIFZHQTFfUERfUDFfRElWXzIJKDEgPDwgMTMpCi0jIGRlZmluZSBWR0ExX1BEX1AxX1NISUZUCTgKLS8qKiBQMSB2YWx1ZSBpcyAyIGdyZWF0ZXIgdGhhbiB0aGlzIGZpZWxkICovCi0jIGRlZmluZSBWR0ExX1BEX1AxX01BU0sJKDB4MWYgPDwgOCkKLS8qKiBTZWxlY3RzIGEgcG9zdCBkaXZpc29yIG9mIDQgaW5zdGVhZCBvZiAyLiAqLwotIyBkZWZpbmUgVkdBMF9QRF9QMl9ESVZfNAkoMSA8PCA3KQotLyoqIE92ZXJyaWRlcyB0aGUgcDIgcG9zdCBkaXZpc29yIGZpZWxkICovCi0jIGRlZmluZSBWR0EwX1BEX1AxX0RJVl8yCSgxIDw8IDUpCi0jIGRlZmluZSBWR0EwX1BEX1AxX1NISUZUCTAKLS8qKiBQMSB2YWx1ZSBpcyAyIGdyZWF0ZXIgdGhhbiB0aGlzIGZpZWxkICovCi0jIGRlZmluZSBWR0EwX1BEX1AxX01BU0sJKDB4MWYgPDwgMCkKLQotLyogUENJIEQgc3RhdGUgY29udHJvbCByZWdpc3RlciAqLwotI2RlZmluZSBEX1NUQVRFCQkweDYxMDQKLSNkZWZpbmUgRFNQQ0xLX0dBVEVfRAkweDYyMDAKLQotLyogSTgzMCBDUlRDIHJlZ2lzdGVycyAqLwotI2RlZmluZSBIVE9UQUxfQQkweDYwMDAwCi0jZGVmaW5lIEhCTEFOS19BCTB4NjAwMDQKLSNkZWZpbmUgSFNZTkNfQQkJMHg2MDAwOAotI2RlZmluZSBWVE9UQUxfQQkweDYwMDBjCi0jZGVmaW5lIFZCTEFOS19BCTB4NjAwMTAKLSNkZWZpbmUgVlNZTkNfQQkJMHg2MDAxNAotI2RlZmluZSBQSVBFQVNSQwkweDYwMDFjCi0jZGVmaW5lIEJDTFJQQVRfQQkweDYwMDIwCi0jZGVmaW5lIFZTWU5DU0hJRlRfQQkweDYwMDI4Ci0KLSNkZWZpbmUgSFRPVEFMX0IJMHg2MTAwMAotI2RlZmluZSBIQkxBTktfQgkweDYxMDA0Ci0jZGVmaW5lIEhTWU5DX0IJCTB4NjEwMDgKLSNkZWZpbmUgVlRPVEFMX0IJMHg2MTAwYwotI2RlZmluZSBWQkxBTktfQgkweDYxMDEwCi0jZGVmaW5lIFZTWU5DX0IJCTB4NjEwMTQKLSNkZWZpbmUgUElQRUJTUkMJMHg2MTAxYwotI2RlZmluZSBCQ0xSUEFUX0IJMHg2MTAyMAotI2RlZmluZSBWU1lOQ1NISUZUX0IJMHg2MTAyOAotCi0jZGVmaW5lIFBQX1NUQVRVUwkweDYxMjAwCi0jIGRlZmluZSBQUF9PTgkJCQkJKDEgPDwgMzEpCi0vKioKLSAqIEluZGljYXRlcyB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgb2YgdGhlIHBhbmVsIGFyZSBvbjoKLSAqCi0gKiAtIFBMTCBlbmFibGVkCi0gKiAtIHBpcGUgZW5hYmxlZAotICogLSBMVkRTL0RWT0IvRFZPQyBvbgotICovCi0jIGRlZmluZSBQUF9SRUFEWQkJCQkoMSA8PCAzMCkKLSMgZGVmaW5lIFBQX1NFUVVFTkNFX05PTkUJCQkoMCA8PCAyOCkKLSMgZGVmaW5lIFBQX1NFUVVFTkNFX09OCQkJCSgxIDw8IDI4KQotIyBkZWZpbmUgUFBfU0VRVUVOQ0VfT0ZGCQkJKDIgPDwgMjgpCi0jIGRlZmluZSBQUF9TRVFVRU5DRV9NQVNLCQkJMHgzMDAwMDAwMAotI2RlZmluZSBQUF9DT05UUk9MCTB4NjEyMDQKLSMgZGVmaW5lIFBPV0VSX1RBUkdFVF9PTgkJCSgxIDw8IDApCi0KLSNkZWZpbmUgTFZEU1BQX09OICAgICAgIDB4NjEyMDgKLSNkZWZpbmUgTFZEU1BQX09GRiAgICAgIDB4NjEyMGMKLSNkZWZpbmUgUFBfQ1lDTEUgICAgICAgIDB4NjEyMTAKLQotI2RlZmluZSBQRklUX0NPTlRST0wJMHg2MTIzMAotIyBkZWZpbmUgUEZJVF9FTkFCTEUJCQkJKDEgPDwgMzEpCi0jIGRlZmluZSBQRklUX1BJUEVfTUFTSwkJCQkoMyA8PCAyOSkKLSMgZGVmaW5lIFBGSVRfUElQRV9TSElGVAkJCTI5Ci0jIGRlZmluZSBWRVJUX0lOVEVSUF9ESVNBQkxFCQkJKDAgPDwgMTApCi0jIGRlZmluZSBWRVJUX0lOVEVSUF9CSUxJTkVBUgkJCSgxIDw8IDEwKQotIyBkZWZpbmUgVkVSVF9JTlRFUlBfTUFTSwkJCSgzIDw8IDEwKQotIyBkZWZpbmUgVkVSVF9BVVRPX1NDQUxFCQkJKDEgPDwgOSkKLSMgZGVmaW5lIEhPUklaX0lOVEVSUF9ESVNBQkxFCQkJKDAgPDwgNikKLSMgZGVmaW5lIEhPUklaX0lOVEVSUF9CSUxJTkVBUgkJCSgxIDw8IDYpCi0jIGRlZmluZSBIT1JJWl9JTlRFUlBfTUFTSwkJCSgzIDw8IDYpCi0jIGRlZmluZSBIT1JJWl9BVVRPX1NDQUxFCQkJKDEgPDwgNSkKLSMgZGVmaW5lIFBBTkVMXzhUTzZfRElUSEVSX0VOQUJMRQkJKDEgPDwgMykKLQotI2RlZmluZSBQRklUX1BHTV9SQVRJT1MJMHg2MTIzNAotIyBkZWZpbmUgUEZJVF9WRVJUX1NDQUxFX01BU0sJCQkweGZmZjAwMDAwCi0jIGRlZmluZSBQRklUX0hPUklaX1NDQUxFX01BU0sJCQkweDAwMDBmZmYwCi0KLSNkZWZpbmUgUEZJVF9BVVRPX1JBVElPUwkweDYxMjM4Ci0KLQotI2RlZmluZSBEUExMX0EJCTB4MDYwMTQKLSNkZWZpbmUgRFBMTF9CCQkweDA2MDE4Ci0jIGRlZmluZSBEUExMX1ZDT19FTkFCTEUJCQkoMSA8PCAzMSkKLSMgZGVmaW5lIERQTExfRFZPX0hJR0hfU1BFRUQJCQkoMSA8PCAzMCkKLSMgZGVmaW5lIERQTExfU1lOQ0xPQ0tfRU5BQkxFCQkJKDEgPDwgMjkpCi0jIGRlZmluZSBEUExMX1ZHQV9NT0RFX0RJUwkJCSgxIDw8IDI4KQotIyBkZWZpbmUgRFBMTEJfTU9ERV9EQUNfU0VSSUFMCQkJKDEgPDwgMjYpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExCX01PREVfTFZEUwkJCSgyIDw8IDI2KSAvKiBpOTE1ICovCi0jIGRlZmluZSBEUExMX01PREVfTUFTSwkJCQkoMyA8PCAyNikKLSMgZGVmaW5lIERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfMTAJKDAgPDwgMjQpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfNQkJKDEgPDwgMjQpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzE0CQkoMCA8PCAyNCkgLyogaTkxNSAqLwotIyBkZWZpbmUgRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfNwkJKDEgPDwgMjQpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExfUDJfQ0xPQ0tfRElWX01BU0sJCQkweDAzMDAwMDAwIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTSwkJMHgwMGZmMDAwMCAvKiBpOTE1ICovCi0vKioKLSAqICBUaGUgaTgzMCBnZW5lcmF0aW9uLCBpbiBEQUMvc2VyaWFsIG1vZGUsIGRlZmluZXMgcDEgYXMgdHdvIHBsdXMgdGhpcwotICogYml0ZmllbGQsIG9yIGp1c3QgMiBpZiBQTExfUDFfRElWSURFX0JZX1RXTyBpcyBzZXQuCi0gKi8KLSMgZGVmaW5lIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTS19JODMwCTB4MDAxZjAwMDAKLS8qKgotICogVGhlIGk4MzAgZ2VuZXJhdGlvbiwgaW4gTFZEUyBtb2RlLCBkZWZpbmVzIFAxIGFzIHRoZSBiaXQgbnVtYmVyIHNldCB3aXRoaW4KLSAqIHRoaXMgZmllbGQgKG9ubHkgb25lIGJpdCBtYXkgYmUgc2V0KS4KLSAqLwotIyBkZWZpbmUgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9NQVNLX0k4MzBfTFZEUwkweDAwM2YwMDAwCi0jIGRlZmluZSBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUCQkxNgotIyBkZWZpbmUgUExMX1AyX0RJVklERV9CWV80CQkJKDEgPDwgMjMpIC8qIGk4MzAsIHJlcXVpcmVkIGluIERWTyBub24tZ2FuZyAqLwotIyBkZWZpbmUgUExMX1AxX0RJVklERV9CWV9UV08JCQkoMSA8PCAyMSkgLyogaTgzMCAqLwotIyBkZWZpbmUgUExMX1JFRl9JTlBVVF9EUkVGQ0xLCQkJKDAgPDwgMTMpCi0jIGRlZmluZSBQTExfUkVGX0lOUFVUX1RWQ0xLSU5BCQkJKDEgPDwgMTMpIC8qIGk4MzAgKi8KLSMgZGVmaW5lIFBMTF9SRUZfSU5QVVRfVFZDTEtJTkJDCQkoMiA8PCAxMykgLyogU0RWTyBUVkNMS0lOICovCi0jIGRlZmluZSBQTExCX1JFRl9JTlBVVF9TUFJFQURTUEVDVFJVTUlOCSgzIDw8IDEzKQotIyBkZWZpbmUgUExMX1JFRl9JTlBVVF9NQVNLCQkJKDMgPDwgMTMpCi0jIGRlZmluZSBQTExfTE9BRF9QVUxTRV9QSEFTRV9TSElGVAkJOQotLyoKLSAqIFBhcmFsbGVsIHRvIFNlcmlhbCBMb2FkIFB1bHNlIHBoYXNlIHNlbGVjdGlvbi4KLSAqIFNlbGVjdHMgdGhlIHBoYXNlIGZvciB0aGUgMTBYIERQTEwgY2xvY2sgZm9yIHRoZSBQQ0llCi0gKiBkaWdpdGFsIGRpc3BsYXkgcG9ydC4gVGhlIHJhbmdlIGlzIDQgdG8gMTM7IDEwIG9yIG1vcmUKLSAqIGlzIGp1c3QgYSBmbGlwIGRlbGF5LiBUaGUgZGVmYXVsdCBpcyA2Ci0gKi8KLSMgZGVmaW5lIFBMTF9MT0FEX1BVTFNFX1BIQVNFX01BU0sJCSgweGYgPDwgUExMX0xPQURfUFVMU0VfUEhBU0VfU0hJRlQpCi0jIGRlZmluZSBESVNQTEFZX1JBVEVfU0VMRUNUX0ZQQTEJCSgxIDw8IDgpCi0KLS8qKgotICogU0RWTyBtdWx0aXBsaWVyIGZvciA5NDVHL0dNLiBOb3QgdXNlZCBvbiA5NjUuCi0gKgotICogXHNhIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSwotICovCi0jIGRlZmluZSBTRFZPX01VTFRJUExJRVJfTUFTSwkJCTB4MDAwMDAwZmYKLSMgZGVmaW5lIFNEVk9fTVVMVElQTElFUl9TSElGVF9ISVJFUwkJNAotIyBkZWZpbmUgU0RWT19NVUxUSVBMSUVSX1NISUZUX1ZHQQkJMAotCi0vKiogQGRlZmdyb3VwIERQTExfTUQKLSAqIEB7Ci0gKi8KLS8qKiBQaXBlIEEgU0RWTy9VREkgY2xvY2sgbXVsdGlwbGllci9kaXZpZGVyIHJlZ2lzdGVyIGZvciBHOTY1LiAqLwotI2RlZmluZSBEUExMX0FfTUQJCTB4MDYwMWMKLS8qKiBQaXBlIEIgU0RWTy9VREkgY2xvY2sgbXVsdGlwbGllci9kaXZpZGVyIHJlZ2lzdGVyIGZvciBHOTY1LiAqLwotI2RlZmluZSBEUExMX0JfTUQJCTB4MDYwMjAKLS8qKgotICogVURJIHBpeGVsIGRpdmlkZXIsIGNvbnRyb2xsaW5nIGhvdyBtYW55IHBpeGVscyBhcmUgc3R1ZmZlZCBpbnRvIGEgcGFja2V0LgotICoKLSAqIFZhbHVlIGlzIHBpeGVscyBtaW51cyAxLiAgTXVzdCBiZSBzZXQgdG8gMSBwaXhlbCBmb3IgU0RWTy4KLSAqLwotIyBkZWZpbmUgRFBMTF9NRF9VRElfRElWSURFUl9NQVNLCQkweDNmMDAwMDAwCi0jIGRlZmluZSBEUExMX01EX1VESV9ESVZJREVSX1NISUZUCQkyNAotLyoqIFVESSBwaXhlbCBkaXZpZGVyIGZvciBWR0EsIHNhbWUgYXMgRFBMTF9NRF9VRElfRElWSURFUl9NQVNLLiAqLwotIyBkZWZpbmUgRFBMTF9NRF9WR0FfVURJX0RJVklERVJfTUFTSwkJMHgwMDNmMDAwMAotIyBkZWZpbmUgRFBMTF9NRF9WR0FfVURJX0RJVklERVJfU0hJRlQJCTE2Ci0vKioKLSAqIFNEVk8vVURJIHBpeGVsIG11bHRpcGxpZXIuCi0gKgotICogU0RWTyByZXF1aXJlcyB0aGF0IHRoZSBidXMgY2xvY2sgcmF0ZSBiZSBiZXR3ZWVuIDEgYW5kIDIgR2h6LCBhbmQgdGhlIGJ1cwotICogY2xvY2sgcmF0ZSBpcyAxMCB0aW1lcyB0aGUgRFBMTCBjbG9jay4gIEF0IGxvdyByZXNvbHV0aW9uL3JlZnJlc2ggcmF0ZQotICogbW9kZXMsIHRoZSBidXMgcmF0ZSB3b3VsZCBiZSBiZWxvdyB0aGUgbGltaXRzLCBzbyBTRFZPIGFsbG93cyBmb3Igc3R1ZmZpbmcKLSAqIGR1bW15IGJ5dGVzIGluIHRoZSBkYXRhc3RyZWFtIGF0IGFuIGluY3JlYXNlZCBjbG9jayByYXRlLCB3aXRoIGJvdGggc2lkZXMgb2YKLSAqIHRoZSBsaW5rIGtub3dpbmcgaG93IG1hbnkgYnl0ZXMgYXJlIGZpbGwuCi0gKgotICogU28sIGZvciBhIG1vZGUgd2l0aCBhIGRvdGNsb2NrIG9mIDY1TWh6LCB3ZSB3b3VsZCB3YW50IHRvIGRvdWJsZSB0aGUgY2xvY2sKLSAqIHJhdGUgdG8gMTMwTWh6IHRvIGdldCBhIGJ1cyByYXRlIG9mIDEuMzBHaHouICBUaGUgRFBMTCBjbG9jayByYXRlIHdvdWxkIGJlCi0gKiBzZXQgdG8gMTMwTWh6LCBhbmQgdGhlIFNEVk8gbXVsdGlwbGllciBzZXQgdG8gMnggaW4gdGhpcyByZWdpc3RlciBhbmQKLSAqIHRocm91Z2ggYW4gU0RWTyBjb21tYW5kLgotICoKLSAqIFRoaXMgcmVnaXN0ZXIgZmllbGQgaGFzIHZhbHVlcyBvZiBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgbWludXMgMSwgd2l0aAotICogYSBtYXhpbXVtIG11bHRpcGxpZXIgb2YgNSBmb3IgU0RWTy4KLSAqLwotIyBkZWZpbmUgRFBMTF9NRF9VRElfTVVMVElQTElFUl9NQVNLCQkweDAwMDAzZjAwCi0jIGRlZmluZSBEUExMX01EX1VESV9NVUxUSVBMSUVSX1NISUZUCQk4Ci0vKiogU0RWTy9VREkgcGl4ZWwgbXVsdGlwbGllciBmb3IgVkdBLCBzYW1lIGFzIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSy4KLSAqIFRoaXMgYmVzdCBiZSBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgKDMpIG9yIHRoZSBDUlQgd29uJ3Qgd29yay4gTm8sCi0gKiBJIGRvbid0IGVudGlyZWx5IHVuZGVyc3RhbmQgd2hhdCB0aGlzIGRvZXMuLi4KLSAqLwotIyBkZWZpbmUgRFBMTF9NRF9WR0FfVURJX01VTFRJUExJRVJfTUFTSwkweDAwMDAwMDNmCi0jIGRlZmluZSBEUExMX01EX1ZHQV9VRElfTVVMVElQTElFUl9TSElGVAkwCi0vKiogQH0gKi8KLQotI2RlZmluZSBEUExMX1RFU1QJCTB4NjA2YwotIyBkZWZpbmUgRFBMTEJfVEVTVF9TRFZPX0RJVl8xCQkJKDAgPDwgMjIpCi0jIGRlZmluZSBEUExMQl9URVNUX1NEVk9fRElWXzIJCQkoMSA8PCAyMikKLSMgZGVmaW5lIERQTExCX1RFU1RfU0RWT19ESVZfNAkJCSgyIDw8IDIyKQotIyBkZWZpbmUgRFBMTEJfVEVTVF9TRFZPX0RJVl9NQVNLCQkoMyA8PCAyMikKLSMgZGVmaW5lIERQTExCX1RFU1RfTl9CWVBBU1MJCQkoMSA8PCAxOSkKLSMgZGVmaW5lIERQTExCX1RFU1RfTV9CWVBBU1MJCQkoMSA8PCAxOCkKLSMgZGVmaW5lIERQTExCX0lOUFVUX0JVRkZFUl9FTkFCTEUJCSgxIDw8IDE2KQotIyBkZWZpbmUgRFBMTEFfVEVTVF9OX0JZUEFTUwkJCSgxIDw8IDMpCi0jIGRlZmluZSBEUExMQV9URVNUX01fQllQQVNTCQkJKDEgPDwgMikKLSMgZGVmaW5lIERQTExBX0lOUFVUX0JVRkZFUl9FTkFCTEUJCSgxIDw8IDApCi0KLSNkZWZpbmUgQURQQQkJCTB4NjExMDAKLSNkZWZpbmUgQURQQV9EQUNfRU5BQkxFCQkoMTw8MzEpCi0jZGVmaW5lIEFEUEFfREFDX0RJU0FCTEUJMAotI2RlZmluZSBBRFBBX1BJUEVfU0VMRUNUX01BU0sJKDE8PDMwKQotI2RlZmluZSBBRFBBX1BJUEVfQV9TRUxFQ1QJMAotI2RlZmluZSBBRFBBX1BJUEVfQl9TRUxFQ1QJKDE8PDMwKQotI2RlZmluZSBBRFBBX1VTRV9WR0FfSFZQT0xBUklUWSAoMTw8MTUpCi0jZGVmaW5lIEFEUEFfU0VUU19IVlBPTEFSSVRZCTAKLSNkZWZpbmUgQURQQV9WU1lOQ19DTlRMX0RJU0FCTEUgKDE8PDExKQotI2RlZmluZSBBRFBBX1ZTWU5DX0NOVExfRU5BQkxFCTAKLSNkZWZpbmUgQURQQV9IU1lOQ19DTlRMX0RJU0FCTEUgKDE8PDEwKQotI2RlZmluZSBBRFBBX0hTWU5DX0NOVExfRU5BQkxFCTAKLSNkZWZpbmUgQURQQV9WU1lOQ19BQ1RJVkVfSElHSAkoMTw8NCkKLSNkZWZpbmUgQURQQV9WU1lOQ19BQ1RJVkVfTE9XCTAKLSNkZWZpbmUgQURQQV9IU1lOQ19BQ1RJVkVfSElHSAkoMTw8MykKLSNkZWZpbmUgQURQQV9IU1lOQ19BQ1RJVkVfTE9XCTAKLQotI2RlZmluZSBGUEEwCQkweDA2MDQwCi0jZGVmaW5lIEZQQTEJCTB4MDYwNDQKLSNkZWZpbmUgRlBCMAkJMHgwNjA0OAotI2RlZmluZSBGUEIxCQkweDA2MDRjCi0jIGRlZmluZSBGUF9OX0RJVl9NQVNLCQkJCTB4MDAzZjAwMDAKLSMgZGVmaW5lIEZQX05fRElWX1NISUZUCQkJCTE2Ci0jIGRlZmluZSBGUF9NMV9ESVZfTUFTSwkJCQkweDAwMDAzZjAwCi0jIGRlZmluZSBGUF9NMV9ESVZfU0hJRlQJCQk4Ci0jIGRlZmluZSBGUF9NMl9ESVZfTUFTSwkJCQkweDAwMDAwMDNmCi0jIGRlZmluZSBGUF9NMl9ESVZfU0hJRlQJCQkwCi0KLQotI2RlZmluZSBQT1JUX0hPVFBMVUdfRU4JCTB4NjExMTAKLSMgZGVmaW5lIFNEVk9CX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgMjYpCi0jIGRlZmluZSBTRFZPQ19IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDI1KQotIyBkZWZpbmUgVFZfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAxOCkKLSMgZGVmaW5lIENSVF9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDkpCi0jIGRlZmluZSBDUlRfSE9UUExVR19GT1JDRV9ERVRFQ1QJCSgxIDw8IDMpCi0KLSNkZWZpbmUgUE9SVF9IT1RQTFVHX1NUQVQJMHg2MTExNAotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfSU5UX1NUQVRVUwkJCSgxIDw8IDExKQotIyBkZWZpbmUgVFZfSE9UUExVR19JTlRfU1RBVFVTCQkJKDEgPDwgMTApCi0jIGRlZmluZSBDUlRfSE9UUExVR19NT05JVE9SX01BU0sJCSgzIDw8IDgpCi0jIGRlZmluZSBDUlRfSE9UUExVR19NT05JVE9SX0NPTE9SCQkoMyA8PCA4KQotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NT05PCQkoMiA8PCA4KQotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfTU9OSVRPUl9OT05FCQkoMCA8PCA4KQotIyBkZWZpbmUgU0RWT0NfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCA3KQotIyBkZWZpbmUgU0RWT0JfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCA2KQotCi0jZGVmaW5lIFNEVk9CCQkJMHg2MTE0MAotI2RlZmluZSBTRFZPQwkJCTB4NjExNjAKLSNkZWZpbmUgU0RWT19FTkFCTEUJCQkJKDEgPDwgMzEpCi0jZGVmaW5lIFNEVk9fUElQRV9CX1NFTEVDVAkJCSgxIDw8IDMwKQotI2RlZmluZSBTRFZPX1NUQUxMX1NFTEVDVAkJCSgxIDw8IDI5KQotI2RlZmluZSBTRFZPX0lOVEVSUlVQVF9FTkFCTEUJCQkoMSA8PCAyNikKLS8qKgotICogOTE1Ry9HTSBTRFZPIHBpeGVsIG11bHRpcGxpZXIuCi0gKgotICogUHJvZ3JhbW1lZCB2YWx1ZSBpcyBtdWx0aXBsaWVyIC0gMSwgdXAgdG8gNXguCi0gKgotICogXHNhIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSwotICovCi0jZGVmaW5lIFNEVk9fUE9SVF9NVUxUSVBMWV9NQVNLCQkJKDcgPDwgMjMpCi0jZGVmaW5lIFNEVk9fUE9SVF9NVUxUSVBMWV9TSElGVAkJMjMKLSNkZWZpbmUgU0RWT19QSEFTRV9TRUxFQ1RfTUFTSwkJCSgxNSA8PCAxOSkKLSNkZWZpbmUgU0RWT19QSEFTRV9TRUxFQ1RfREVGQVVMVAkJKDYgPDwgMTkpCi0jZGVmaW5lIFNEVk9fQ0xPQ0tfT1VUUFVUX0lOVkVSVAkJKDEgPDwgMTgpCi0jZGVmaW5lIFNEVk9DX0dBTkdfTU9ERQkJCQkoMSA8PCAxNikKLSNkZWZpbmUgU0RWT19CT1JERVJfRU5BQkxFCQkJKDEgPDwgNykKLSNkZWZpbmUgU0RWT0JfUENJRV9DT05DVVJSRU5DWQkJCSgxIDw8IDMpCi0jZGVmaW5lIFNEVk9fREVURUNURUQJCQkJKDEgPDwgMikKLS8qIEJpdHMgdG8gYmUgcHJlc2VydmVkIHdoZW4gd3JpdGluZyAqLwotI2RlZmluZSBTRFZPQl9QUkVTRVJWRV9NQVNLCQkJKCgxIDw8IDE3KSB8ICgxIDw8IDE2KSB8ICgxIDw8IDE0KSkKLSNkZWZpbmUgU0RWT0NfUFJFU0VSVkVfTUFTSwkJCSgxIDw8IDE3KQotCi0vKiogQGRlZmdyb3VwIExWRFMKLSAqIEB7Ci0gKi8KLS8qKgotICogVGhpcyByZWdpc3RlciBjb250cm9scyB0aGUgTFZEUyBvdXRwdXQgZW5hYmxlLCBwaXBlIHNlbGVjdGlvbiwgYW5kIGRhdGEKLSAqIGZvcm1hdCBzZWxlY3Rpb24uCi0gKgotICogQWxsIG9mIHRoZSBjbG9jay9kYXRhIHBhaXJzIGFyZSBmb3JjZSBwb3dlcmVkIGRvd24gYnkgcG93ZXIgc2VxdWVuY2luZy4KLSAqLwotI2RlZmluZSBMVkRTCQkJMHg2MTE4MAotLyoqCi0gKiBFbmFibGVzIHRoZSBMVkRTIHBvcnQuICBUaGlzIGJpdCBtdXN0IGJlIHNldCBiZWZvcmUgRFBMTHMgYXJlIGVuYWJsZWQsIGFzCi0gKiB0aGUgRFBMTCBzZW1hbnRpY3MgY2hhbmdlIHdoZW4gdGhlIExWRFMgaXMgYXNzaWduZWQgdG8gdGhhdCBwaXBlLgotICovCi0jIGRlZmluZSBMVkRTX1BPUlRfRU4JCQkoMSA8PCAzMSkKLS8qKiBTZWxlY3RzIHBpcGUgQiBmb3IgTFZEUyBkYXRhLiAgTXVzdCBiZSBzZXQgb24gcHJlLTk2NS4gKi8KLSMgZGVmaW5lIExWRFNfUElQRUJfU0VMRUNUCQkoMSA8PCAzMCkKLQotLyoqCi0gKiBFbmFibGVzIHRoZSBBMC1BMiBkYXRhIHBhaXJzIGFuZCBDTEtBLCBjb250YWluaW5nIDE4IGJpdHMgb2YgY29sb3IgZGF0YSBwZXIKLSAqIHBpeGVsLgotICovCi0jIGRlZmluZSBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9NQVNLCSgzIDw8IDgpCi0jIGRlZmluZSBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9ET1dOCSgwIDw8IDgpCi0jIGRlZmluZSBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9VUAkoMyA8PCA4KQotLyoqCi0gKiBDb250cm9scyB0aGUgQTMgZGF0YSBwYWlyLCB3aGljaCBjb250YWlucyB0aGUgYWRkaXRpb25hbCBMU0JzIGZvciAyNCBiaXQKLSAqIG1vZGUuICBPbmx5IGVuYWJsZWQgaWYgTFZEU19BMEEyX0NMS0FfUE9XRVJfVVAgYWxzbyBpbmRpY2F0ZXMgaXQgc2hvdWxkIGJlCi0gKiBvbi4KLSAqLwotIyBkZWZpbmUgTFZEU19BM19QT1dFUl9NQVNLCQkoMyA8PCA2KQotIyBkZWZpbmUgTFZEU19BM19QT1dFUl9ET1dOCQkoMCA8PCA2KQotIyBkZWZpbmUgTFZEU19BM19QT1dFUl9VUAkJKDMgPDwgNikKLS8qKgotICogQ29udHJvbHMgdGhlIENMS0IgcGFpci4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IHdoZW4gTFZEU19CMEIzX1BPV0VSX1VQCi0gKiBpcyBzZXQuCi0gKi8KLSMgZGVmaW5lIExWRFNfQ0xLQl9QT1dFUl9NQVNLCQkoMyA8PCA0KQotIyBkZWZpbmUgTFZEU19DTEtCX1BPV0VSX0RPV04JCSgwIDw8IDQpCi0jIGRlZmluZSBMVkRTX0NMS0JfUE9XRVJfVVAJCSgzIDw8IDQpCi0KLS8qKgotICogQ29udHJvbHMgdGhlIEIwLUIzIGRhdGEgcGFpcnMuICBUaGlzIG11c3QgYmUgc2V0IHRvIG1hdGNoIHRoZSBEUExMIHAyCi0gKiBzZXR0aW5nIGZvciB3aGV0aGVyIHdlIGFyZSBpbiBkdWFsLWNoYW5uZWwgbW9kZS4gIFRoZSBCMyBwYWlyIHdpbGwKLSAqIGFkZGl0aW9uYWxseSBvbmx5IGJlIHBvd2VyZWQgdXAgd2hlbiBMVkRTX0EzX1BPV0VSX1VQIGlzIHNldC4KLSAqLwotIyBkZWZpbmUgTFZEU19CMEIzX1BPV0VSX01BU0sJCSgzIDw8IDIpCi0jIGRlZmluZSBMVkRTX0IwQjNfUE9XRVJfRE9XTgkJKDAgPDwgMikKLSMgZGVmaW5lIExWRFNfQjBCM19QT1dFUl9VUAkJKDMgPDwgMikKLQotI2RlZmluZSBQSVBFQUNPTkYgMHg3MDAwOAotI2RlZmluZSBQSVBFQUNPTkZfRU5BQkxFCSgxPDwzMSkKLSNkZWZpbmUgUElQRUFDT05GX0RJU0FCTEUJMAotI2RlZmluZSBQSVBFQUNPTkZfRE9VQkxFX1dJREUJKDE8PDMwKQotI2RlZmluZSBJOTY1X1BJUEVDT05GX0FDVElWRQkoMTw8MzApCi0jZGVmaW5lIFBJUEVBQ09ORl9TSU5HTEVfV0lERQkwCi0jZGVmaW5lIFBJUEVBQ09ORl9QSVBFX1VOTE9DS0VEIDAKLSNkZWZpbmUgUElQRUFDT05GX1BJUEVfTE9DS0VECSgxPDwyNSkKLSNkZWZpbmUgUElQRUFDT05GX1BBTEVUVEUJMAotI2RlZmluZSBQSVBFQUNPTkZfR0FNTUEJCSgxPDwyNCkKLSNkZWZpbmUgUElQRUNPTkZfRk9SQ0VfQk9SREVSCSgxPDwyNSkKLSNkZWZpbmUgUElQRUNPTkZfUFJPR1JFU1NJVkUJKDAgPDwgMjEpCi0jZGVmaW5lIFBJUEVDT05GX0lOVEVSTEFDRV9XX0ZJRUxEX0lORElDQVRJT04JKDYgPDwgMjEpCi0jZGVmaW5lIFBJUEVDT05GX0lOVEVSTEFDRV9GSUVMRF8wX09OTFkJCSg3IDw8IDIxKQotCi0jZGVmaW5lIERTUEFSQgkgIDB4NzAwMzAKLSNkZWZpbmUgRFNQQVJCX0NTVEFSVF9NQVNLCSgweDdmIDw8IDcpCi0jZGVmaW5lIERTUEFSQl9DU1RBUlRfU0hJRlQJNwotI2RlZmluZSBEU1BBUkJfQlNUQVJUX01BU0sJKDB4N2YpCQkgCi0jZGVmaW5lIERTUEFSQl9CU1RBUlRfU0hJRlQJMAotCi0jZGVmaW5lIFBJUEVCQ09ORiAweDcxMDA4Ci0jZGVmaW5lIFBJUEVCQ09ORl9FTkFCTEUJKDE8PDMxKQotI2RlZmluZSBQSVBFQkNPTkZfRElTQUJMRQkwCi0jZGVmaW5lIFBJUEVCQ09ORl9ET1VCTEVfV0lERQkoMTw8MzApCi0jZGVmaW5lIFBJUEVCQ09ORl9ESVNBQkxFCTAKLSNkZWZpbmUgUElQRUJDT05GX0dBTU1BCQkoMTw8MjQpCi0jZGVmaW5lIFBJUEVCQ09ORl9QQUxFVFRFCTAKLQotI2RlZmluZSBQSVBFQkdDTUFYUkVECQkweDcxMDEwCi0jZGVmaW5lIFBJUEVCR0NNQVhHUkVFTgkJMHg3MTAxNAotI2RlZmluZSBQSVBFQkdDTUFYQkxVRQkJMHg3MTAxOAotI2RlZmluZSBQSVBFQlNUQVQJCTB4NzEwMjQKLSNkZWZpbmUgUElQRUJGUkFNRUhJR0gJCTB4NzEwNDAKLSNkZWZpbmUgUElQRUJGUkFNRVBJWEVMCQkweDcxMDQ0Ci0KLSNkZWZpbmUgRFNQQUNOVFIJCTB4NzAxODAKLSNkZWZpbmUgRFNQQkNOVFIJCTB4NzExODAKLSNkZWZpbmUgRElTUExBWV9QTEFORV9FTkFCTEUJCQkoMTw8MzEpCi0jZGVmaW5lIERJU1BMQVlfUExBTkVfRElTQUJMRQkJCTAKLSNkZWZpbmUgRElTUFBMQU5FX0dBTU1BX0VOQUJMRQkJCSgxPDwzMCkKLSNkZWZpbmUgRElTUFBMQU5FX0dBTU1BX0RJU0FCTEUJCQkwCi0jZGVmaW5lIERJU1BQTEFORV9QSVhGT1JNQVRfTUFTSwkJKDB4Zjw8MjYpCi0jZGVmaW5lIERJU1BQTEFORV84QlBQCQkJCSgweDI8PDI2KQotI2RlZmluZSBESVNQUExBTkVfMTVfMTZCUFAJCQkoMHg0PDwyNikKLSNkZWZpbmUgRElTUFBMQU5FXzE2QlBQCQkJCSgweDU8PDI2KQotI2RlZmluZSBESVNQUExBTkVfMzJCUFBfTk9fQUxQSEEJCSgweDY8PDI2KQotI2RlZmluZSBESVNQUExBTkVfMzJCUFAJCQkJKDB4Nzw8MjYpCi0jZGVmaW5lIERJU1BQTEFORV9TVEVSRU9fRU5BQkxFCQkJKDE8PDI1KQotI2RlZmluZSBESVNQUExBTkVfU1RFUkVPX0RJU0FCTEUJCTAKLSNkZWZpbmUgRElTUFBMQU5FX1NFTF9QSVBFX01BU0sJCQkoMTw8MjQpCi0jZGVmaW5lIERJU1BQTEFORV9TRUxfUElQRV9BCQkJMAotI2RlZmluZSBESVNQUExBTkVfU0VMX1BJUEVfQgkJCSgxPDwyNCkKLSNkZWZpbmUgRElTUFBMQU5FX1NSQ19LRVlfRU5BQkxFCQkoMTw8MjIpCi0jZGVmaW5lIERJU1BQTEFORV9TUkNfS0VZX0RJU0FCTEUJCTAKLSNkZWZpbmUgRElTUFBMQU5FX0xJTkVfRE9VQkxFCQkJKDE8PDIwKQotI2RlZmluZSBESVNQUExBTkVfTk9fTElORV9ET1VCTEUJCTAKLSNkZWZpbmUgRElTUFBMQU5FX1NURVJFT19QT0xBUklUWV9GSVJTVAkJMAotI2RlZmluZSBESVNQUExBTkVfU1RFUkVPX1BPTEFSSVRZX1NFQ09ORAkoMTw8MTgpCi0vKiBwbGFuZSBCIG9ubHkgKi8KLSNkZWZpbmUgRElTUFBMQU5FX0FMUEhBX1RSQU5TX0VOQUJMRQkJKDE8PDE1KQotI2RlZmluZSBESVNQUExBTkVfQUxQSEFfVFJBTlNfRElTQUJMRQkJMAotI2RlZmluZSBESVNQUExBTkVfU1BSSVRFX0FCT1ZFX0RJU1BMQVlBCQkwCi0jZGVmaW5lIERJU1BQTEFORV9TUFJJVEVfQUJPVkVfT1ZFUkxBWQkJKDEpCi0KLSNkZWZpbmUgRFNQQUJBU0UJCTB4NzAxODQKLSNkZWZpbmUgRFNQQVNUUklERQkJMHg3MDE4OAotCi0jZGVmaW5lIERTUEJCQVNFCQkweDcxMTg0Ci0jZGVmaW5lIERTUEJBRERSCQlEU1BCQkFTRQotI2RlZmluZSBEU1BCU1RSSURFCQkweDcxMTg4Ci0KLSNkZWZpbmUgRFNQQUtFWVZBTAkJMHg3MDE5NAotI2RlZmluZSBEU1BBS0VZTUFTSwkJMHg3MDE5OAotCi0jZGVmaW5lIERTUEFQT1MJCQkweDcwMThDIC8qIHJlc2VydmVkICovCi0jZGVmaW5lIERTUEFTSVpFCQkweDcwMTkwCi0jZGVmaW5lIERTUEJQT1MJCQkweDcxMThDCi0jZGVmaW5lIERTUEJTSVpFCQkweDcxMTkwCi0KLSNkZWZpbmUgRFNQQVNVUkYJCTB4NzAxOUMKLSNkZWZpbmUgRFNQQVRJTEVPRkYJCTB4NzAxQTQKLQotI2RlZmluZSBEU1BCU1VSRgkJMHg3MTE5QwotI2RlZmluZSBEU1BCVElMRU9GRgkJMHg3MTFBNAotCi0jZGVmaW5lIFZHQUNOVFJMCQkweDcxNDAwCi0jIGRlZmluZSBWR0FfRElTUF9ESVNBQkxFCQkJKDEgPDwgMzEpCi0jIGRlZmluZSBWR0FfMlhfTU9ERQkJCQkoMSA8PCAzMCkKLSMgZGVmaW5lIFZHQV9QSVBFX0JfU0VMRUNUCQkJKDEgPDwgMjkpCi0KLS8qCi0gKiBTb21lIEJJT1Mgc2NyYXRjaCBhcmVhIHJlZ2lzdGVycy4gIFRoZSA4NDUgKGFuZCA4MzA/KSBzdG9yZSB0aGUgYW1vdW50Ci0gKiBvZiB2aWRlbyBtZW1vcnkgYXZhaWxhYmxlIHRvIHRoZSBCSU9TIGluIFNXRjEuCi0gKi8KLQotI2RlZmluZSBTV0YwCQkJMHg3MTQxMAotCi0vKgotICogODU1IHNjcmF0Y2ggcmVnaXN0ZXJzLgotICovCi0jZGVmaW5lIFNXRjEwCQkJMHg3MDQxMAotCi0jZGVmaW5lIFNXRjMwCQkJMHg3MjQxNAotCi0vKgotICogT3ZlcmxheSByZWdpc3RlcnMuICBUaGVzZSBhcmUgb3ZlcmxheSByZWdpc3RlcnMgYWNjZXNzZWQgdmlhIE1NSU8uCi0gKiBUaG9zZSBsb2FkZWQgdmlhIHRoZSBvdmVybGF5IHJlZ2lzdGVyIHBhZ2UgYXJlIGRlZmluZWQgaW4gaTgzMF92aWRlby5jLgotICovCi0jZGVmaW5lIE9WQURECQkJMHgzMDAwMAotCi0jZGVmaW5lIERPVlNUQQkJCTB4MzAwMDgKLSNkZWZpbmUgT0NfQlVGCQkJKDB4Mzw8MjApCi0KLSNkZWZpbmUgT0dBTUM1CQkJMHgzMDAxMAotI2RlZmluZSBPR0FNQzQJCQkweDMwMDE0Ci0jZGVmaW5lIE9HQU1DMwkJCTB4MzAwMTgKLSNkZWZpbmUgT0dBTUMyCQkJMHgzMDAxYwotI2RlZmluZSBPR0FNQzEJCQkweDMwMDIwCi0jZGVmaW5lIE9HQU1DMAkJCTB4MzAwMjQKLS8qCi0gKiBQYWxldHRlIHJlZ2lzdGVycwotICovCi0jZGVmaW5lIFBBTEVUVEVfQQkJMHgwYTAwMAotI2RlZmluZSBQQUxFVFRFX0IJCTB4MGE4MDAKK2V4dGVybiBpbnQgaTkxNV93YWl0X3Jpbmcoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBuLCBjb25zdCBjaGFyICpjYWxsZXIpOwogCiAjZGVmaW5lIElTX0k4MzAoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgzNTc3KQogI2RlZmluZSBJU184NDVHKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU2MikKQEAgLTExMTksNyArNjM5LDcgQEAKIAogI2RlZmluZSBJU19JOTY1R00oZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTAyKQogCi0jZGVmaW5lIElTX0lHRF9HTShkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDJBNDIpCisjZGVmaW5lIElTX0dNNDUoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTQyKQogCiAjZGVmaW5lIElTX0c0WChkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMDIgfHwgXAogCQkgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkUxMiB8fCBcCkBAIC0xMTMzLDkgKzY1Myw5IEBACiAJCSAgICAgIElTX0k5NDVHTShkZXYpIHx8IElTX0k5NjVHKGRldikgfHwgSVNfRzMzKGRldikpCiAKICNkZWZpbmUgSVNfTU9CSUxFKGRldikgKElTX0k4MzAoZGV2KSB8fCBJU19JODVYKGRldikgfHwgSVNfSTkxNUdNKGRldikgfHwgXAotCQkJSVNfSTk0NUdNKGRldikgfHwgSVNfSTk2NUdNKGRldikgfHwgSVNfSUdEX0dNKGRldikpCisJCQlJU19JOTQ1R00oZGV2KSB8fCBJU19JOTY1R00oZGV2KSB8fCBJU19HTTQ1KGRldikpCiAKLSNkZWZpbmUgSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSAoSVNfRzMzKGRldikgfHwgSVNfSUdEX0dNKGRldikgfHwgSVNfRzRYKGRldikpCisjZGVmaW5lIEk5MTVfTkVFRF9HRlhfSFdTKGRldikgKElTX0czMyhkZXYpIHx8IElTX0dNNDUoZGV2KSB8fCBJU19HNFgoZGV2KSkKIAogI2RlZmluZSBQUklNQVJZX1JJTkdCVUZGRVJfU0laRSAgICAgICAgICgxMjgqMTAyNCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjNzNkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTAsMCArMSwyNTU4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkJICAgIHVpbnQzMl90IHdyaXRlX2RvbWFpbik7CitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbl9yYW5nZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgdWludDY0X3Qgb2Zmc2V0LAorCQkJCSB1aW50NjRfdCBzaXplLAorCQkJCSB1aW50MzJfdCByZWFkX2RvbWFpbnMsCisJCQkJIHVpbnQzMl90IHdyaXRlX2RvbWFpbik7CitzdGF0aWMgaW50CitpOTE1X2dlbV9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCSAgICB1aW50MzJfdCByZWFkX2RvbWFpbnMsCisJCSAgICB1aW50MzJfdCB3cml0ZV9kb21haW4pOworc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VfbGlzdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCitpbnQKK2k5MTVfZ2VtX2luaXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1faW5pdCAqYXJncyA9IGRhdGE7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpZiAoYXJncy0+Z3R0X3N0YXJ0ID49IGFyZ3MtPmd0dF9lbmQgfHwKKwkgICAgKGFyZ3MtPmd0dF9zdGFydCAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCB8fAorCSAgICAoYXJncy0+Z3R0X2VuZCAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHJtX21tX2luaXQoJmRldl9wcml2LT5tbS5ndHRfc3BhY2UsIGFyZ3MtPmd0dF9zdGFydCwKKwkgICAgYXJncy0+Z3R0X2VuZCAtIGFyZ3MtPmd0dF9zdGFydCk7CisKKwlkZXYtPmd0dF90b3RhbCA9ICh1aW50MzJfdCkgKGFyZ3MtPmd0dF9lbmQgLSBhcmdzLT5ndHRfc3RhcnQpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgbW0gb2JqZWN0IGFuZCByZXR1cm5zIGEgaGFuZGxlIHRvIGl0LgorICovCitpbnQKK2k5MTVfZ2VtX2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NyZWF0ZSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IGhhbmRsZSwgcmV0OworCisJYXJncy0+c2l6ZSA9IHJvdW5kdXAoYXJncy0+c2l6ZSwgUEFHRV9TSVpFKTsKKworCS8qIEFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0ICovCisJb2JqID0gZHJtX2dlbV9vYmplY3RfYWxsb2MoZGV2LCBhcmdzLT5zaXplKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgb2JqLCAmaGFuZGxlKTsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKG9iaik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYXJncy0+aGFuZGxlID0gaGFuZGxlOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogUmVhZHMgZGF0YSBmcm9tIHRoZSBvYmplY3QgcmVmZXJlbmNlZCBieSBoYW5kbGUuCisgKgorICogT24gZXJyb3IsIHRoZSBjb250ZW50cyBvZiAqZGF0YSBhcmUgdW5kZWZpbmVkLgorICovCitpbnQKK2k5MTVfZ2VtX3ByZWFkX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXNzaXplX3QgcmVhZDsKKwlsb2ZmX3Qgb2Zmc2V0OworCWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm4gLUVCQURGOworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCS8qIEJvdW5kcyBjaGVjayBzb3VyY2UuCisJICoKKwkgKiBYWFg6IFRoaXMgY291bGQgdXNlIHJldmlldyBmb3Igb3ZlcmZsb3cgaXNzdWVzLi4uCisJICovCisJaWYgKGFyZ3MtPm9mZnNldCA+IG9iai0+c2l6ZSB8fCBhcmdzLT5zaXplID4gb2JqLT5zaXplIHx8CisJICAgIGFyZ3MtPm9mZnNldCArIGFyZ3MtPnNpemUgPiBvYmotPnNpemUpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW5fcmFuZ2Uob2JqLCBhcmdzLT5vZmZzZXQsIGFyZ3MtPnNpemUsCisJCQkJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCAwKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiByZXQ7CisJfQorCisJb2Zmc2V0ID0gYXJncy0+b2Zmc2V0OworCisJcmVhZCA9IHZmc19yZWFkKG9iai0+ZmlscCwgKGNoYXIgX191c2VyICopKHVpbnRwdHJfdClhcmdzLT5kYXRhX3B0ciwKKwkJCWFyZ3MtPnNpemUsICZvZmZzZXQpOworCWlmIChyZWFkICE9IGFyZ3MtPnNpemUpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWlmIChyZWFkIDwgMCkKKwkJCXJldHVybiByZWFkOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2d0dF9wd3JpdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncywKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJc3NpemVfdCByZW1haW47CisJbG9mZl90IG9mZnNldDsKKwljaGFyIF9fdXNlciAqdXNlcl9kYXRhOworCWNoYXIgX19pb21lbSAqdmFkZHI7CisJY2hhciAqdmFkZHJfYXRvbWljOworCWludCBpLCBvLCBsOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXVuc2lnbmVkIGxvbmcgdW53cml0dGVuOworCisJdXNlcl9kYXRhID0gKGNoYXIgX191c2VyICopICh1aW50cHRyX3QpIGFyZ3MtPmRhdGFfcHRyOworCXJlbWFpbiA9IGFyZ3MtPnNpemU7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVzZXJfZGF0YSwgcmVtYWluKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgMCk7CisJaWYgKHJldCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gaTkxNV9nZW1fc2V0X2RvbWFpbihvYmosIGZpbGVfcHJpdiwKKwkJCQkgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlvZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldCArIGFyZ3MtPm9mZnNldDsKKwlvYmpfcHJpdi0+ZGlydHkgPSAxOworCisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQorCQkgKgorCQkgKiBpID0gcGFnZSBudW1iZXIKKwkJICogbyA9IG9mZnNldCB3aXRoaW4gcGFnZQorCQkgKiBsID0gYnl0ZXMgdG8gY29weQorCQkgKi8KKwkJaSA9IG9mZnNldCA+PiBQQUdFX1NISUZUOworCQlvID0gb2Zmc2V0ICYgKFBBR0VfU0laRS0xKTsKKwkJbCA9IHJlbWFpbjsKKwkJaWYgKChvICsgbCkgPiBQQUdFX1NJWkUpCisJCQlsID0gUEFHRV9TSVpFIC0gbzsKKworCQlwZm4gPSAoZGV2LT5hZ3AtPmJhc2UgPj4gUEFHRV9TSElGVCkgKyBpOworCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJLyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHRoZSBsb3cgcGVyZm9ybWFuY2Ugb2YgaW91bm1hcAorCQkgKiAoYXBwcm94aW1hdGUgMTAlIGNwdSBjb3N0IG9uIG5vcm1hbCAzRCB3b3JrbG9hZHMpLgorCQkgKiBrbWFwX2F0b21pYyBvbiBISUdITUVNIGtlcm5lbHMgaGFwcGVucyB0byBsZXQgdXMgbWFwIGNhcmQKKwkJICogbWVtb3J5IHdpdGhvdXQgdGFraW5nIElQSXMuICBXaGVuIHRoZSB2bWFwIHJld29yayBsYW5kcworCQkgKiB3ZSBzaG91bGQgYmUgYWJsZSB0byBkdW1wIHRoaXMgaGFjay4KKwkJICovCisJCXZhZGRyX2F0b21pYyA9IGttYXBfYXRvbWljX3BmbihwZm4sIEtNX1VTRVIwKTsKKyNpZiBXQVRDSF9QV1JJVEUKKwkJRFJNX0lORk8oInB3cml0ZSBpICVkIG8gJWQgbCAlZCBwZm4gJWxkIHZhZGRyICVwXG4iLAorCQkJIGksIG8sIGwsIHBmbiwgdmFkZHJfYXRvbWljKTsKKyNlbmRpZgorCQl1bndyaXR0ZW4gPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUodmFkZHJfYXRvbWljICsgbywKKwkJCQkJCQkgICAgICB1c2VyX2RhdGEsIGwpOworCQlrdW5tYXBfYXRvbWljKHZhZGRyX2F0b21pYywgS01fVVNFUjApOworCisJCWlmICh1bndyaXR0ZW4pCisjZW5kaWYgLyogQ09ORklHX0hJR0hNRU0gKi8KKwkJeworCQkJdmFkZHIgPSBpb3JlbWFwX3djKHBmbiA8PCBQQUdFX1NISUZULCBQQUdFX1NJWkUpOworI2lmIFdBVENIX1BXUklURQorCQkJRFJNX0lORk8oInB3cml0ZSBzbG93IGkgJWQgbyAlZCBsICVkICIKKwkJCQkgInBmbiAlbGQgdmFkZHIgJXBcbiIsCisJCQkJIGksIG8sIGwsIHBmbiwgdmFkZHIpOworI2VuZGlmCisJCQlpZiAodmFkZHIgPT0gTlVMTCkgeworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZ290byBmYWlsOworCQkJfQorCQkJdW53cml0dGVuID0gX19jb3B5X2Zyb21fdXNlcih2YWRkciArIG8sIHVzZXJfZGF0YSwgbCk7CisjaWYgV0FUQ0hfUFdSSVRFCisJCQlEUk1fSU5GTygidW53cml0dGVuICVsZFxuIiwgdW53cml0dGVuKTsKKyNlbmRpZgorCQkJaW91bm1hcCh2YWRkcik7CisJCQlpZiAodW53cml0dGVuKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCX0KKworCQlyZW1haW4gLT0gbDsKKwkJdXNlcl9kYXRhICs9IGw7CisJCW9mZnNldCArPSBsOworCX0KKyNpZiBXQVRDSF9QV1JJVEUgJiYgMQorCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7CisJaTkxNV9nZW1fZHVtcF9vYmplY3Qob2JqLCBhcmdzLT5vZmZzZXQgKyBhcmdzLT5zaXplLCBfX2Z1bmNfXywgfjApOworCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7CisjZW5kaWYKKworZmFpbDoKKwlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX3NobWVtX3B3cml0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MsCisJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWludCByZXQ7CisJbG9mZl90IG9mZnNldDsKKwlzc2l6ZV90IHdyaXR0ZW47CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXQgPSBpOTE1X2dlbV9zZXRfZG9tYWluKG9iaiwgZmlsZV9wcml2LAorCQkJCSAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7CisJaWYgKHJldCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlvZmZzZXQgPSBhcmdzLT5vZmZzZXQ7CisKKwl3cml0dGVuID0gdmZzX3dyaXRlKG9iai0+ZmlscCwKKwkJCSAgICAoY2hhciBfX3VzZXIgKikodWludHB0cl90KSBhcmdzLT5kYXRhX3B0ciwKKwkJCSAgICBhcmdzLT5zaXplLCAmb2Zmc2V0KTsKKwlpZiAod3JpdHRlbiAhPSBhcmdzLT5zaXplKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlpZiAod3JpdHRlbiA8IDApCisJCQlyZXR1cm4gd3JpdHRlbjsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBXcml0ZXMgZGF0YSB0byB0aGUgb2JqZWN0IHJlZmVyZW5jZWQgYnkgaGFuZGxlLgorICoKKyAqIE9uIGVycm9yLCB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB0aGF0IHdlcmUgdG8gYmUgbW9kaWZpZWQgYXJlIHVuZGVmaW5lZC4KKyAqLworaW50CitpOTE1X2dlbV9wd3JpdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUJBREY7CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJLyogQm91bmRzIGNoZWNrIGRlc3RpbmF0aW9uLgorCSAqCisJICogWFhYOiBUaGlzIGNvdWxkIHVzZSByZXZpZXcgZm9yIG92ZXJmbG93IGlzc3Vlcy4uLgorCSAqLworCWlmIChhcmdzLT5vZmZzZXQgPiBvYmotPnNpemUgfHwgYXJncy0+c2l6ZSA+IG9iai0+c2l6ZSB8fAorCSAgICBhcmdzLT5vZmZzZXQgKyBhcmdzLT5zaXplID4gb2JqLT5zaXplKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFdlIGNhbiBvbmx5IGRvIHRoZSBHVFQgcHdyaXRlIG9uIHVudGlsZWQgYnVmZmVycywgYXMgb3RoZXJ3aXNlCisJICogaXQgd291bGQgZW5kIHVwIGdvaW5nIHRocm91Z2ggdGhlIGZlbmNlZCBhY2Nlc3MsIGFuZCB3ZSdsbCBnZXQKKwkgKiBkaWZmZXJlbnQgZGV0aWxpbmcgYmVoYXZpb3IgYmV0d2VlbiByZWFkaW5nIGFuZCB3cml0aW5nLgorCSAqIHByZWFkL3B3cml0ZSBjdXJyZW50bHkgYXJlIHJlYWRpbmcgYW5kIHdyaXRpbmcgZnJvbSB0aGUgQ1BVCisJICogcGVyc3BlY3RpdmUsIHJlcXVpcmluZyBtYW51YWwgZGV0aWxpbmcgYnkgdGhlIGNsaWVudC4KKwkgKi8KKwlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUgJiYKKwkgICAgZGV2LT5ndHRfdG90YWwgIT0gMCkKKwkJcmV0ID0gaTkxNV9nZW1fZ3R0X3B3cml0ZShkZXYsIG9iaiwgYXJncywgZmlsZV9wcml2KTsKKwllbHNlCisJCXJldCA9IGk5MTVfZ2VtX3NobWVtX3B3cml0ZShkZXYsIG9iaiwgYXJncywgZmlsZV9wcml2KTsKKworI2lmIFdBVENIX1BXUklURQorCWlmIChyZXQpCisJCURSTV9JTkZPKCJwd3JpdGUgZmFpbGVkICVkXG4iLCByZXQpOworI2VuZGlmCisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiB1c2VyIHNwYWNlIHByZXBhcmVzIHRvIHVzZSBhbiBvYmplY3QKKyAqLworaW50CitpOTE1X2dlbV9zZXRfZG9tYWluX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbiAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldDsKKworCWlmICghKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm4gLUVCQURGOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworI2lmIFdBVENIX0JVRgorCURSTV9JTkZPKCJzZXRfZG9tYWluX2lvY3RsICVwKCVkKSwgJTA4eCAlMDh4XG4iLAorCQkgb2JqLCBvYmotPnNpemUsIGFyZ3MtPnJlYWRfZG9tYWlucywgYXJncy0+d3JpdGVfZG9tYWluKTsKKyNlbmRpZgorCXJldCA9IGk5MTVfZ2VtX3NldF9kb21haW4ob2JqLCBmaWxlX3ByaXYsCisJCQkJICBhcmdzLT5yZWFkX2RvbWFpbnMsIGFyZ3MtPndyaXRlX2RvbWFpbik7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIHVzZXIgc3BhY2UgaGFzIGRvbmUgd3JpdGVzIHRvIHRoaXMgYnVmZmVyCisgKi8KK2ludAoraTkxNV9nZW1fc3dfZmluaXNoX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fc3dfZmluaXNoICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiAtRUJBREY7CisJfQorCisjaWYgV0FUQ0hfQlVGCisJRFJNX0lORk8oIiVzOiBzd19maW5pc2ggJWQgKCVwICVkKVxuIiwKKwkJIF9fZnVuY19fLCBhcmdzLT5oYW5kbGUsIG9iaiwgb2JqLT5zaXplKTsKKyNlbmRpZgorCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCS8qIFBpbm5lZCBidWZmZXJzIG1heSBiZSBzY2Fub3V0LCBzbyBmbHVzaCB0aGUgY2FjaGUgKi8KKwlpZiAoKG9iai0+d3JpdGVfZG9tYWluICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgJiYgb2JqX3ByaXYtPnBpbl9jb3VudCkgeworCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOworCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKKwl9CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIE1hcHMgdGhlIGNvbnRlbnRzIG9mIGFuIG9iamVjdCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIGl0IGlzIG1hcHBlZAorICogaW50by4KKyAqCisgKiBXaGlsZSB0aGUgbWFwcGluZyBob2xkcyBhIHJlZmVyZW5jZSBvbiB0aGUgY29udGVudHMgb2YgdGhlIG9iamVjdCwgaXQgZG9lc24ndAorICogaW1wbHkgYSByZWYgb24gdGhlIG9iamVjdCBpdHNlbGYuCisgKi8KK2ludAoraTkxNV9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWxvZmZfdCBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJaWYgKCEoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUJBREY7CisKKwlvZmZzZXQgPSBhcmdzLT5vZmZzZXQ7CisKKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWFkZHIgPSBkb19tbWFwKG9iai0+ZmlscCwgMCwgYXJncy0+c2l6ZSwKKwkJICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCisJCSAgICAgICBhcmdzLT5vZmZzZXQpOworCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlmIChJU19FUlIoKHZvaWQgKilhZGRyKSkKKwkJcmV0dXJuIGFkZHI7CisKKwlhcmdzLT5hZGRyX3B0ciA9ICh1aW50NjRfdCkgYWRkcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHBhZ2VfY291bnQgPSBvYmotPnNpemUgLyBQQUdFX1NJWkU7CisJaW50IGk7CisKKwlpZiAob2JqX3ByaXYtPnBhZ2VfbGlzdCA9PSBOVUxMKQorCQlyZXR1cm47CisKKworCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspCisJCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0W2ldICE9IE5VTEwpIHsKKwkJCWlmIChvYmpfcHJpdi0+ZGlydHkpCisJCQkJc2V0X3BhZ2VfZGlydHkob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7CisJCQltYXJrX3BhZ2VfYWNjZXNzZWQob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7CisJCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7CisJCX0KKwlvYmpfcHJpdi0+ZGlydHkgPSAwOworCisJZHJtX2ZyZWUob2JqX3ByaXYtPnBhZ2VfbGlzdCwKKwkJIHBhZ2VfY291bnQgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCisJCSBEUk1fTUVNX0RSSVZFUik7CisJb2JqX3ByaXYtPnBhZ2VfbGlzdCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9vYmplY3RfbW92ZV90b19hY3RpdmUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkvKiBBZGQgYSByZWZlcmVuY2UgaWYgd2UncmUgbmV3bHkgZW50ZXJpbmcgdGhlIGFjdGl2ZSBsaXN0LiAqLworCWlmICghb2JqX3ByaXYtPmFjdGl2ZSkgeworCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKwkJb2JqX3ByaXYtPmFjdGl2ZSA9IDE7CisJfQorCS8qIE1vdmUgZnJvbSB3aGF0ZXZlciBsaXN0IHdlIHdlcmUgb24gdG8gdGhlIHRhaWwgb2YgZXhlY3V0aW9uLiAqLworCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bGlzdCwKKwkJICAgICAgICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpOworfQorCisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKwlpZiAob2JqX3ByaXYtPnBpbl9jb3VudCAhPSAwKQorCQlsaXN0X2RlbF9pbml0KCZvYmpfcHJpdi0+bGlzdCk7CisJZWxzZQorCQlsaXN0X21vdmVfdGFpbCgmb2JqX3ByaXYtPmxpc3QsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7CisKKwlpZiAob2JqX3ByaXYtPmFjdGl2ZSkgeworCQlvYmpfcHJpdi0+YWN0aXZlID0gMDsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwl9CisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworfQorCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgc2VxdWVuY2UgbnVtYmVyLCBlbWl0dGluZyBhIHdyaXRlIG9mIGl0IHRvIHRoZSBzdGF0dXMgcGFnZQorICogcGx1cyBhbiBpbnRlcnJ1cHQsIHdoaWNoIHdpbGwgdHJpZ2dlciBpOTE1X3VzZXJfaW50ZXJydXB0X2hhbmRsZXIuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBzdHJ1Y3RfbG9jayBoZWxkLgorICoKKyAqIFJldHVybmVkIHNlcXVlbmNlIG51bWJlcnMgYXJlIG5vbnplcm8gb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIHVpbnQzMl90CitpOTE1X2FkZF9yZXF1ZXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGZsdXNoX2RvbWFpbnMpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0OworCXVpbnQzMl90IHNlcW5vOworCWludCB3YXNfZW1wdHk7CisJUklOR19MT0NBTFM7CisKKwlyZXF1ZXN0ID0gZHJtX2NhbGxvYygxLCBzaXplb2YoKnJlcXVlc3QpLCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKHJlcXVlc3QgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBHcmFiIHRoZSBzZXFubyB3ZSdyZSBnb2luZyB0byBtYWtlIHRoaXMgcmVxdWVzdCBiZSwgYW5kIGJ1bXAgdGhlCisJICogbmV4dCAoc2tpcHBpbmcgMCBzbyBpdCBjYW4gYmUgdGhlIHJlc2VydmVkIG5vLXNlcW5vIHZhbHVlKS4KKwkgKi8KKwlzZXFubyA9IGRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubzsKKwlkZXZfcHJpdi0+bW0ubmV4dF9nZW1fc2Vxbm8rKzsKKwlpZiAoZGV2X3ByaXYtPm1tLm5leHRfZ2VtX3NlcW5vID09IDApCisJCWRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubysrOworCisJQkVHSU5fTFBfUklORyg0KTsKKwlPVVRfUklORyhNSV9TVE9SRV9EV09SRF9JTkRFWCk7CisJT1VUX1JJTkcoSTkxNV9HRU1fSFdTX0lOREVYIDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKKwlPVVRfUklORyhzZXFubyk7CisKKwlPVVRfUklORyhNSV9VU0VSX0lOVEVSUlVQVCk7CisJQURWQU5DRV9MUF9SSU5HKCk7CisKKwlEUk1fREVCVUcoIiVkXG4iLCBzZXFubyk7CisKKwlyZXF1ZXN0LT5zZXFubyA9IHNlcW5vOworCXJlcXVlc3QtPmVtaXR0ZWRfamlmZmllcyA9IGppZmZpZXM7CisJcmVxdWVzdC0+Zmx1c2hfZG9tYWlucyA9IGZsdXNoX2RvbWFpbnM7CisJd2FzX2VtcHR5ID0gbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmcmVxdWVzdC0+bGlzdCwgJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpOworCisJaWYgKHdhc19lbXB0eSAmJiAhZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCkKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZfcHJpdi0+bW0ucmV0aXJlX3dvcmssIEhaKTsKKwlyZXR1cm4gc2Vxbm87Cit9CisKKy8qKgorICogQ29tbWFuZCBleGVjdXRpb24gYmFycmllcgorICoKKyAqIEVuc3VyZXMgdGhhdCBhbGwgY29tbWFuZHMgaW4gdGhlIHJpbmcgYXJlIGZpbmlzaGVkCisgKiBiZWZvcmUgc2lnbmFsbGluZyB0aGUgQ1BVCisgKi8KK3N0YXRpYyB1aW50MzJfdAoraTkxNV9yZXRpcmVfY29tbWFuZHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBjbWQgPSBNSV9GTFVTSCB8IE1JX05PX1dSSVRFX0ZMVVNIOworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnMgPSAwOworCVJJTkdfTE9DQUxTOworCisJLyogVGhlIHNhbXBsZXIgYWx3YXlzIGdldHMgZmx1c2hlZCBvbiBpOTY1IChzaWdoKSAqLworCWlmIChJU19JOTY1RyhkZXYpKQorCQlmbHVzaF9kb21haW5zIHw9IEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSOworCUJFR0lOX0xQX1JJTkcoMik7CisJT1VUX1JJTkcoY21kKTsKKwlPVVRfUklORygwKTsgLyogbm9vcCAqLworCUFEVkFOQ0VfTFBfUklORygpOworCXJldHVybiBmbHVzaF9kb21haW5zOworfQorCisvKioKKyAqIE1vdmVzIGJ1ZmZlcnMgYXNzb2NpYXRlZCBvbmx5IHdpdGggdGhlIGdpdmVuIGFjdGl2ZSBzZXFubyBmcm9tIHRoZSBhY3RpdmUKKyAqIHRvIGluYWN0aXZlIGxpc3QsIHBvdGVudGlhbGx5IGZyZWVpbmcgdGhlbS4KKyAqLworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKiBNb3ZlIGFueSBidWZmZXJzIG9uIHRoZSBhY3RpdmUgbGlzdCB0aGF0IGFyZSBubyBsb25nZXIgcmVmZXJlbmNlZAorCSAqIGJ5IHRoZSByaW5nYnVmZmVyIHRvIHRoZSBmbHVzaGluZy9pbmFjdGl2ZSBsaXN0cyBhcyBhcHByb3ByaWF0ZS4KKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCQlvYmpfcHJpdiA9IGxpc3RfZmlyc3RfZW50cnkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCwKKwkJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAorCQkJCQkgICAgbGlzdCk7CisJCW9iaiA9IG9ial9wcml2LT5vYmo7CisKKwkJLyogSWYgdGhlIHNlcW5vIGJlaW5nIHJldGlyZWQgZG9lc24ndCBtYXRjaCB0aGUgb2xkZXN0IGluIHRoZQorCQkgKiBsaXN0LCB0aGVuIHRoZSBvbGRlc3QgaW4gdGhlIGxpc3QgbXVzdCBzdGlsbCBiZSBuZXdlciB0aGFuCisJCSAqIHRoaXMgc2Vxbm8uCisJCSAqLworCQlpZiAob2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vICE9IHJlcXVlc3QtPnNlcW5vKQorCQkJcmV0dXJuOworI2lmIFdBVENIX0xSVQorCQlEUk1fSU5GTygiJXM6IHJldGlyZSAlZCBtb3ZlcyB0byBpbmFjdGl2ZSBsaXN0ICVwXG4iLAorCQkJIF9fZnVuY19fLCByZXF1ZXN0LT5zZXFubywgb2JqKTsKKyNlbmRpZgorCisJCWlmIChvYmotPndyaXRlX2RvbWFpbiAhPSAwKSB7CisJCQlsaXN0X21vdmVfdGFpbCgmb2JqX3ByaXYtPmxpc3QsCisJCQkJICAgICAgICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCk7CisJCX0gZWxzZSB7CisJCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShvYmopOworCQl9CisJfQorCisJaWYgKHJlcXVlc3QtPmZsdXNoX2RvbWFpbnMgIT0gMCkgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYsICpuZXh0OworCisJCS8qIENsZWFyIHRoZSB3cml0ZSBkb21haW4gYW5kIGFjdGl2aXR5IGZyb20gYW55IGJ1ZmZlcnMKKwkJICogdGhhdCBhcmUganVzdCB3YWl0aW5nIGZvciBhIGZsdXNoIG1hdGNoaW5nIHRoZSBvbmUgcmV0aXJlZC4KKwkJICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmpfcHJpdiwgbmV4dCwKKwkJCQkJICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwgbGlzdCkgeworCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmpfcHJpdi0+b2JqOworCisJCQlpZiAob2JqLT53cml0ZV9kb21haW4gJiByZXF1ZXN0LT5mbHVzaF9kb21haW5zKSB7CisJCQkJb2JqLT53cml0ZV9kb21haW4gPSAwOworCQkJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKG9iaik7CisJCQl9CisJCX0KKworCX0KK30KKworLyoqCisgKiBSZXR1cm5zIHRydWUgaWYgc2VxMSBpcyBsYXRlciB0aGFuIHNlcTIuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfc2Vxbm9fcGFzc2VkKHVpbnQzMl90IHNlcTEsIHVpbnQzMl90IHNlcTIpCit7CisJcmV0dXJuIChpbnQzMl90KShzZXExIC0gc2VxMikgPj0gMDsKK30KKwordWludDMyX3QKK2k5MTVfZ2V0X2dlbV9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJcmV0dXJuIFJFQURfSFdTUChkZXZfcHJpdiwgSTkxNV9HRU1fSFdTX0lOREVYKTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgcmVxdWVzdCBsaXN0IGFzIHNlcXVlbmNlIG51bWJlcnMgYXJlIHBhc3NlZC4KKyAqLwordm9pZAoraTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3Qgc2Vxbm87CisKKwlzZXFubyA9IGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KSkgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7CisJCXVpbnQzMl90IHJldGlyaW5nX3NlcW5vOworCisJCXJlcXVlc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0LAorCQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QsCisJCQkJCSAgIGxpc3QpOworCQlyZXRpcmluZ19zZXFubyA9IHJlcXVlc3QtPnNlcW5vOworCisJCWlmIChpOTE1X3NlcW5vX3Bhc3NlZChzZXFubywgcmV0aXJpbmdfc2Vxbm8pIHx8CisJCSAgICBkZXZfcHJpdi0+bW0ud2VkZ2VkKSB7CisJCQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdChkZXYsIHJlcXVlc3QpOworCisJCQlsaXN0X2RlbCgmcmVxdWVzdC0+bGlzdCk7CisJCQlkcm1fZnJlZShyZXF1ZXN0LCBzaXplb2YoKnJlcXVlc3QpLCBEUk1fTUVNX0RSSVZFUik7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQorfQorCit2b2lkCitpOTE1X2dlbV9yZXRpcmVfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisKKwlkZXZfcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBkcm1faTkxNV9wcml2YXRlX3QsCisJCQkJbW0ucmV0aXJlX3dvcmsud29yayk7CisJZGV2ID0gZGV2X3ByaXYtPmRldjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2KTsKKwlpZiAoIWRldl9wcml2LT5tbS5zdXNwZW5kZWQgJiYKKwkgICAgIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5tbS5yZXRpcmVfd29yaywgSFopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworfQorCisvKioKKyAqIFdhaXRzIGZvciBhIHNlcXVlbmNlIG51bWJlciB0byBiZSBzaWduYWxlZCwgYW5kIGNsZWFucyB1cCB0aGUKKyAqIHJlcXVlc3QgYW5kIG9iamVjdCBsaXN0cyBhcHByb3ByaWF0ZWx5IGZvciB0aGF0IGV2ZW50LgorICovCitzdGF0aWMgaW50CitpOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBzZXFubykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0ID0gMDsKKworCUJVR19PTihzZXFubyA9PSAwKTsKKworCWlmICghaTkxNV9zZXFub19wYXNzZWQoaTkxNV9nZXRfZ2VtX3NlcW5vKGRldiksIHNlcW5vKSkgeworCQlkZXZfcHJpdi0+bW0ud2FpdGluZ19nZW1fc2Vxbm8gPSBzZXFubzsKKwkJaTkxNV91c2VyX2lycV9nZXQoZGV2KTsKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldl9wcml2LT5pcnFfcXVldWUsCisJCQkJCSAgICAgICBpOTE1X3NlcW5vX3Bhc3NlZChpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSwKKwkJCQkJCQkJIHNlcW5vKSB8fAorCQkJCQkgICAgICAgZGV2X3ByaXYtPm1tLndlZGdlZCk7CisJCWk5MTVfdXNlcl9pcnFfcHV0KGRldik7CisJCWRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyA9IDA7CisJfQorCWlmIChkZXZfcHJpdi0+bW0ud2VkZ2VkKQorCQlyZXQgPSAtRUlPOworCisJaWYgKHJldCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTKQorCQlEUk1fRVJST1IoIiVzIHJldHVybnMgJWQgKGF3YWl0aW5nICVkIGF0ICVkKVxuIiwKKwkJCSAgX19mdW5jX18sIHJldCwgc2Vxbm8sIGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpKTsKKworCS8qIERpcmVjdGx5IGRpc3BhdGNoIHJlcXVlc3QgcmV0aXJpbmcuICBXaGlsZSB3ZSBoYXZlIHRoZSB3b3JrIHF1ZXVlCisJICogdG8gaGFuZGxlIHRoaXMsIHRoZSB3YWl0ZXIgb24gYSByZXF1ZXN0IG9mdGVuIHdhbnRzIGFuIGFzc29jaWF0ZWQKKwkgKiBidWZmZXIgdG8gaGF2ZSBtYWRlIGl0IHRvIHRoZSBpbmFjdGl2ZSBsaXN0LCBhbmQgd2Ugd291bGQgbmVlZAorCSAqIGEgc2VwYXJhdGUgd2FpdCBxdWV1ZSB0byBoYW5kbGUgdGhhdC4KKwkgKi8KKwlpZiAocmV0ID09IDApCisJCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJICAgICAgIHVpbnQzMl90IGludmFsaWRhdGVfZG9tYWlucywKKwkgICAgICAgdWludDMyX3QgZmx1c2hfZG9tYWlucykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBjbWQ7CisJUklOR19MT0NBTFM7CisKKyNpZiBXQVRDSF9FWEVDCisJRFJNX0lORk8oIiVzOiBpbnZhbGlkYXRlICUwOHggZmx1c2ggJTA4eFxuIiwgX19mdW5jX18sCisJCSAgaW52YWxpZGF0ZV9kb21haW5zLCBmbHVzaF9kb21haW5zKTsKKyNlbmRpZgorCisJaWYgKGZsdXNoX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKQorCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKKworCWlmICgoaW52YWxpZGF0ZV9kb21haW5zIHwgZmx1c2hfZG9tYWlucykgJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQkJICAgICBJOTE1X0dFTV9ET01BSU5fR1RUKSkgeworCQkvKgorCQkgKiByZWFkL3dyaXRlIGNhY2hlczoKKwkJICoKKwkJICogSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiBpcyBhbHdheXMgaW52YWxpZGF0ZWQsIGJ1dCBpcworCQkgKiBvbmx5IGZsdXNoZWQgaWYgTUlfTk9fV1JJVEVfRkxVU0ggaXMgdW5zZXQuICBPbiA5NjUsIGl0IGlzCisJCSAqIGFsc28gZmx1c2hlZCBhdCAyZCB2ZXJzdXMgM2QgcGlwZWxpbmUgc3dpdGNoZXMuCisJCSAqCisJCSAqIHJlYWQtb25seSBjYWNoZXM6CisJCSAqCisJCSAqIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSIGlzIGZsdXNoZWQgb24gcHJlLTk2NSBpZgorCQkgKiBNSV9SRUFEX0ZMVVNIIGlzIHNldCwgYW5kIGlzIGFsd2F5cyBmbHVzaGVkIG9uIDk2NS4KKwkJICoKKwkJICogSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQgbWF5IG5vdCBleGlzdD8KKwkJICoKKwkJICogSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCB3aGljaCBleGlzdHMgb24gOTY1LCBpcworCQkgKiBpbnZhbGlkYXRlZCB3aGVuIE1JX0VYRV9GTFVTSCBpcyBzZXQuCisJCSAqCisJCSAqIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIHdoaWNoIGV4aXN0cyBvbiA5NjUsIGlzCisJCSAqIGludmFsaWRhdGVkIHdpdGggZXZlcnkgTUlfRkxVU0guCisJCSAqCisJCSAqIFRMQnM6CisJCSAqCisJCSAqIE9uIDk2NSwgVExCcyBhc3NvY2lhdGVkIHdpdGggSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQKKwkJICogYW5kIEk5MTVfR0VNX0RPTUFJTl9DUFUgaW4gYXJlIGludmFsaWRhdGVkIGF0IFBURSB3cml0ZSBhbmQKKwkJICogSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiBhbmQgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIKKwkJICogYXJlIGZsdXNoZWQgYXQgYW55IE1JX0ZMVVNILgorCQkgKi8KKworCQljbWQgPSBNSV9GTFVTSCB8IE1JX05PX1dSSVRFX0ZMVVNIOworCQlpZiAoKGludmFsaWRhdGVfZG9tYWluc3xmbHVzaF9kb21haW5zKSAmCisJCSAgICBJOTE1X0dFTV9ET01BSU5fUkVOREVSKQorCQkJY21kICY9IH5NSV9OT19XUklURV9GTFVTSDsKKwkJaWYgKCFJU19JOTY1RyhkZXYpKSB7CisJCQkvKgorCQkJICogT24gdGhlIDk2NSwgdGhlIHNhbXBsZXIgY2FjaGUgYWx3YXlzIGdldHMgZmx1c2hlZAorCQkJICogYW5kIHRoaXMgYml0IGlzIHJlc2VydmVkLgorCQkJICovCisJCQlpZiAoaW52YWxpZGF0ZV9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIpCisJCQkJY21kIHw9IE1JX1JFQURfRkxVU0g7CisJCX0KKwkJaWYgKGludmFsaWRhdGVfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTikKKwkJCWNtZCB8PSBNSV9FWEVfRkxVU0g7CisKKyNpZiBXQVRDSF9FWEVDCisJCURSTV9JTkZPKCIlczogcXVldWUgZmx1c2ggJTA4eCB0byByaW5nXG4iLCBfX2Z1bmNfXywgY21kKTsKKyNlbmRpZgorCQlCRUdJTl9MUF9SSU5HKDIpOworCQlPVVRfUklORyhjbWQpOworCQlPVVRfUklORygwKTsgLyogbm9vcCAqLworCQlBRFZBTkNFX0xQX1JJTkcoKTsKKwl9Cit9CisKKy8qKgorICogRW5zdXJlcyB0aGF0IGFsbCByZW5kZXJpbmcgdG8gdGhlIG9iamVjdCBoYXMgY29tcGxldGVkIGFuZCB0aGUgb2JqZWN0IGlzCisgKiBzYWZlIHRvIHVuYmluZCBmcm9tIHRoZSBHVFQgb3IgYWNjZXNzIGZyb20gdGhlIENQVS4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCByZXQ7CisKKwkvKiBJZiB0aGVyZSBhcmUgd3JpdGVzIHF1ZXVlZCB0byB0aGUgYnVmZmVyLCBmbHVzaCBhbmQKKwkgKiBjcmVhdGUgYSBuZXcgc2Vxbm8gdG8gd2FpdCBmb3IuCisJICovCisJaWYgKG9iai0+d3JpdGVfZG9tYWluICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKSB7CisJCXVpbnQzMl90IHdyaXRlX2RvbWFpbiA9IG9iai0+d3JpdGVfZG9tYWluOworI2lmIFdBVENIX0JVRgorCQlEUk1fSU5GTygiJXM6IGZsdXNoaW5nIG9iamVjdCAlcCBmcm9tIHdyaXRlIGRvbWFpbiAlMDh4XG4iLAorCQkJICBfX2Z1bmNfXywgb2JqLCB3cml0ZV9kb21haW4pOworI2VuZGlmCisJCWk5MTVfZ2VtX2ZsdXNoKGRldiwgMCwgd3JpdGVfZG9tYWluKTsKKworCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19hY3RpdmUob2JqKTsKKwkJb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vID0gaTkxNV9hZGRfcmVxdWVzdChkZXYsCisJCQkJCQkJCSAgd3JpdGVfZG9tYWluKTsKKwkJQlVHX09OKG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyA9PSAwKTsKKyNpZiBXQVRDSF9MUlUKKwkJRFJNX0lORk8oIiVzOiBmbHVzaCBtb3ZlcyB0byBleGVjIGxpc3QgJXBcbiIsIF9fZnVuY19fLCBvYmopOworI2VuZGlmCisJfQorCisJLyogSWYgdGhlcmUgaXMgcmVuZGVyaW5nIHF1ZXVlZCBvbiB0aGUgYnVmZmVyIGJlaW5nIGV2aWN0ZWQsIHdhaXQgZm9yCisJICogaXQuCisJICovCisJaWYgKG9ial9wcml2LT5hY3RpdmUpIHsKKyNpZiBXQVRDSF9CVUYKKwkJRFJNX0lORk8oIiVzOiBvYmplY3QgJXAgd2FpdCBmb3Igc2Vxbm8gJTA4eFxuIiwKKwkJCSAgX19mdW5jX18sIG9iaiwgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKyNlbmRpZgorCQlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdChkZXYsIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogVW5iaW5kcyBhbiBvYmplY3QgZnJvbSB0aGUgR1RUIGFwZXJ0dXJlLgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3RfdW5iaW5kKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCByZXQgPSAwOworCisjaWYgV0FUQ0hfQlVGCisJRFJNX0lORk8oIiVzOiVkICVwXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIG9iaik7CisJRFJNX0lORk8oImd0dF9zcGFjZSAlcFxuIiwgb2JqX3ByaXYtPmd0dF9zcGFjZSk7CisjZW5kaWYKKwlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChvYmpfcHJpdi0+cGluX2NvdW50ICE9IDApIHsKKwkJRFJNX0VSUk9SKCJBdHRlbXB0aW5nIHRvIHVuYmluZCBwaW5uZWQgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogV2FpdCBmb3IgYW55IHJlbmRlcmluZyB0byBjb21wbGV0ZQorCSAqLworCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmopOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJ3YWl0X3JlbmRlcmluZyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIE1vdmUgdGhlIG9iamVjdCB0byB0aGUgQ1BVIGRvbWFpbiB0byBlbnN1cmUgdGhhdAorCSAqIGFueSBwb3NzaWJsZSBDUFUgd3JpdGVzIHdoaWxlIGl0J3Mgbm90IGluIHRoZSBHVFQKKwkgKiBhcmUgZmx1c2hlZCB3aGVuIHdlIGdvIHRvIHJlbWFwIGl0LiBUaGlzIHdpbGwKKwkgKiBhbHNvIGVuc3VyZSB0aGF0IGFsbCBwZW5kaW5nIEdQVSB3cml0ZXMgYXJlIGZpbmlzaGVkCisJICogYmVmb3JlIHdlIHVuYmluZC4KKwkgKi8KKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbihvYmosIEk5MTVfR0VNX0RPTUFJTl9DUFUsCisJCQkJCSBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigic2V0X2RvbWFpbiBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChvYmpfcHJpdi0+YWdwX21lbSAhPSBOVUxMKSB7CisJCWRybV91bmJpbmRfYWdwKG9ial9wcml2LT5hZ3BfbWVtKTsKKwkJZHJtX2ZyZWVfYWdwKG9ial9wcml2LT5hZ3BfbWVtLCBvYmotPnNpemUgLyBQQUdFX1NJWkUpOworCQlvYmpfcHJpdi0+YWdwX21lbSA9IE5VTEw7CisJfQorCisJQlVHX09OKG9ial9wcml2LT5hY3RpdmUpOworCisJaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KG9iaik7CisKKwlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSkgeworCQlhdG9taWNfZGVjKCZkZXYtPmd0dF9jb3VudCk7CisJCWF0b21pY19zdWIob2JqLT5zaXplLCAmZGV2LT5ndHRfbWVtb3J5KTsKKworCQlkcm1fbW1fcHV0X2Jsb2NrKG9ial9wcml2LT5ndHRfc3BhY2UpOworCQlvYmpfcHJpdi0+Z3R0X3NwYWNlID0gTlVMTDsKKwl9CisKKwkvKiBSZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIExSVSBsaXN0IGlmIHByZXNlbnQuICovCisJaWYgKCFsaXN0X2VtcHR5KCZvYmpfcHJpdi0+bGlzdCkpCisJCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5saXN0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IHJldCA9IDA7CisKKwlmb3IgKDs7KSB7CisJCS8qIElmIHRoZXJlJ3MgYW4gaW5hY3RpdmUgYnVmZmVyIGF2YWlsYWJsZSBub3csIGdyYWIgaXQKKwkJICogYW5kIGJlIGRvbmUuCisJCSAqLworCQlpZiAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSkgeworCQkJb2JqX3ByaXYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwKKwkJCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKKwkJCQkJCSAgICBsaXN0KTsKKwkJCW9iaiA9IG9ial9wcml2LT5vYmo7CisJCQlCVUdfT04ob2JqX3ByaXYtPnBpbl9jb3VudCAhPSAwKTsKKyNpZiBXQVRDSF9MUlUKKwkJCURSTV9JTkZPKCIlczogZXZpY3RpbmcgJXBcbiIsIF9fZnVuY19fLCBvYmopOworI2VuZGlmCisJCQlCVUdfT04ob2JqX3ByaXYtPmFjdGl2ZSk7CisKKwkJCS8qIFdhaXQgb24gdGhlIHJlbmRlcmluZyBhbmQgdW5iaW5kIHRoZSBidWZmZXIuICovCisJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIElmIHdlIGRpZG4ndCBnZXQgYW55dGhpbmcsIGJ1dCB0aGUgcmluZyBpcyBzdGlsbCBwcm9jZXNzaW5nCisJCSAqIHRoaW5ncywgd2FpdCBmb3Igb25lIG9mIHRob3NlIHRoaW5ncyB0byBmaW5pc2ggYW5kIGhvcGVmdWxseQorCQkgKiBsZWF2ZSB1cyBhIGJ1ZmZlciB0byBldmljdC4KKwkJICovCisJCWlmICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpIHsKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKKworCQkJcmVxdWVzdCA9IGxpc3RfZmlyc3RfZW50cnkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QsCisJCQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QsCisJCQkJCQkgICBsaXN0KTsKKworCQkJcmV0ID0gaTkxNV93YWl0X3JlcXVlc3QoZGV2LCByZXF1ZXN0LT5zZXFubyk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCisJCQkvKiBpZiB3YWl0aW5nIGNhdXNlZCBhbiBvYmplY3QgdG8gYmVjb21lIGluYWN0aXZlLAorCQkJICogdGhlbiBsb29wIGFyb3VuZCBhbmQgd2FpdCBmb3IgaXQuIE90aGVyd2lzZSwgd2UKKwkJCSAqIGFzc3VtZSB0aGF0IHdhaXRpbmcgZnJlZWQgYW5kIHVuYm91bmQgc29tZXRoaW5nLAorCQkJICogc28gdGhlcmUgc2hvdWxkIG5vdyBiZSBzb21lIHNwYWNlIGluIHRoZSBHVFQKKwkJCSAqLworCQkJaWYgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkpCisJCQkJY29udGludWU7CisJCQlicmVhazsKKwkJfQorCisJCS8qIElmIHdlIGRpZG4ndCBoYXZlIGFueXRoaW5nIG9uIHRoZSByZXF1ZXN0IGxpc3QgYnV0IHRoZXJlCisJCSAqIGFyZSBidWZmZXJzIGF3YWl0aW5nIGEgZmx1c2gsIGVtaXQgb25lIGFuZCB0cnkgYWdhaW4uCisJCSAqIFdoZW4gd2Ugd2FpdCBvbiBpdCwgdGhvc2UgYnVmZmVycyB3YWl0aW5nIGZvciB0aGF0IGZsdXNoCisJCSAqIHdpbGwgZ2V0IG1vdmVkIHRvIGluYWN0aXZlLgorCQkgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkpIHsKKwkJCW9ial9wcml2ID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QsCisJCQkJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCisJCQkJCQkgICAgbGlzdCk7CisJCQlvYmogPSBvYmpfcHJpdi0+b2JqOworCisJCQlpOTE1X2dlbV9mbHVzaChkZXYsCisJCQkJICAgICAgIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgICAgICBvYmotPndyaXRlX2RvbWFpbik7CisJCQlpOTE1X2FkZF9yZXF1ZXN0KGRldiwgb2JqLT53cml0ZV9kb21haW4pOworCisJCQlvYmogPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKworCQlEUk1fRVJST1IoImluYWN0aXZlIGVtcHR5ICVkIHJlcXVlc3QgZW1wdHkgJWQgIgorCQkJICAiZmx1c2hpbmcgZW1wdHkgJWRcbiIsCisJCQkgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSwKKwkJCSAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCksCisJCQkgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CisJCS8qIElmIHdlIGRpZG4ndCBkbyBhbnkgb2YgdGhlIGFib3ZlLCB0aGVyZSdzIG5vdGhpbmcgdG8gYmUgZG9uZQorCQkgKiBhbmQgd2UganVzdCBjYW4ndCBmaXQgaXQgaW4uCisJCSAqLworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcGFnZV9jb3VudCwgaTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXQ7CisKKwlpZiAob2JqX3ByaXYtPnBhZ2VfbGlzdCkKKwkJcmV0dXJuIDA7CisKKwkvKiBHZXQgdGhlIGxpc3Qgb2YgcGFnZXMgb3V0IG9mIG91ciBzdHJ1Y3QgZmlsZS4gIFRoZXknbGwgYmUgcGlubmVkCisJICogYXQgdGhpcyBwb2ludCB1bnRpbCB3ZSByZWxlYXNlIHRoZW0uCisJICovCisJcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKKwlCVUdfT04ob2JqX3ByaXYtPnBhZ2VfbGlzdCAhPSBOVUxMKTsKKwlvYmpfcHJpdi0+cGFnZV9saXN0ID0gZHJtX2NhbGxvYyhwYWdlX2NvdW50LCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCisJCQkJCSBEUk1fTUVNX0RSSVZFUik7CisJaWYgKG9ial9wcml2LT5wYWdlX2xpc3QgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhbGVkIHRvIGFsbG9jYXRlIHBhZ2UgbGlzdFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlub2RlID0gb2JqLT5maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCW1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOworCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspIHsKKwkJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIGksIE5VTEwpOworCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHBhZ2UpOworCQkJRFJNX0VSUk9SKCJyZWFkX21hcHBpbmdfcGFnZSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQkJaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KG9iaik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCW9ial9wcml2LT5wYWdlX2xpc3RbaV0gPSBwYWdlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBGaW5kcyBmcmVlIHNwYWNlIGluIHRoZSBHVFQgYXBlcnR1cmUgYW5kIGJpbmRzIHRoZSBvYmplY3QgdGhlcmUuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX29iamVjdF9iaW5kX3RvX2d0dChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdW5zaWduZWQgYWxpZ25tZW50KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCXN0cnVjdCBkcm1fbW1fbm9kZSAqZnJlZV9zcGFjZTsKKwlpbnQgcGFnZV9jb3VudCwgcmV0OworCisJaWYgKGFsaWdubWVudCA9PSAwKQorCQlhbGlnbm1lbnQgPSBQQUdFX1NJWkU7CisJaWYgKGFsaWdubWVudCAmIChQQUdFX1NJWkUgLSAxKSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgb2JqZWN0IGFsaWdubWVudCByZXF1ZXN0ZWQgJXVcbiIsIGFsaWdubWVudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworIHNlYXJjaF9mcmVlOgorCWZyZWVfc3BhY2UgPSBkcm1fbW1fc2VhcmNoX2ZyZWUoJmRldl9wcml2LT5tbS5ndHRfc3BhY2UsCisJCQkJCW9iai0+c2l6ZSwgYWxpZ25tZW50LCAwKTsKKwlpZiAoZnJlZV9zcGFjZSAhPSBOVUxMKSB7CisJCW9ial9wcml2LT5ndHRfc3BhY2UgPSBkcm1fbW1fZ2V0X2Jsb2NrKGZyZWVfc3BhY2UsIG9iai0+c2l6ZSwKKwkJCQkJCSAgICAgICBhbGlnbm1lbnQpOworCQlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSAhPSBOVUxMKSB7CisJCQlvYmpfcHJpdi0+Z3R0X3NwYWNlLT5wcml2YXRlID0gb2JqOworCQkJb2JqX3ByaXYtPmd0dF9vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X3NwYWNlLT5zdGFydDsKKwkJfQorCX0KKwlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKSB7CisJCS8qIElmIHRoZSBndHQgaXMgZW1wdHkgYW5kIHdlJ3JlIHN0aWxsIGhhdmluZyB0cm91YmxlCisJCSAqIGZpdHRpbmcgb3VyIG9iamVjdCBpbiwgd2UncmUgb3V0IG9mIG1lbW9yeS4KKwkJICovCisjaWYgV0FUQ0hfTFJVCisJCURSTV9JTkZPKCIlczogR1RUIGZ1bGwsIGV2aWN0aW5nIHNvbWV0aGluZ1xuIiwgX19mdW5jX18pOworI2VuZGlmCisJCWlmIChsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkgJiYKKwkJICAgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSAmJgorCQkgICAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KSkgeworCQkJRFJNX0VSUk9SKCJHVFQgZnVsbCwgYnV0IExSVSBsaXN0IGVtcHR5XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJcmV0ID0gaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKGRldik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZXZpY3QgYSBidWZmZXIgJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWdvdG8gc2VhcmNoX2ZyZWU7CisJfQorCisjaWYgV0FUQ0hfQlVGCisJRFJNX0lORk8oIkJpbmRpbmcgb2JqZWN0IG9mIHNpemUgJWQgYXQgMHglMDh4XG4iLAorCQkgb2JqLT5zaXplLCBvYmpfcHJpdi0+Z3R0X29mZnNldCk7CisjZW5kaWYKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VfbGlzdChvYmopOworCWlmIChyZXQpIHsKKwkJZHJtX21tX3B1dF9ibG9jayhvYmpfcHJpdi0+Z3R0X3NwYWNlKTsKKwkJb2JqX3ByaXYtPmd0dF9zcGFjZSA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKKwkvKiBDcmVhdGUgYW4gQUdQIG1lbW9yeSBzdHJ1Y3R1cmUgcG9pbnRpbmcgYXQgb3VyIHBhZ2VzLCBhbmQgYmluZCBpdAorCSAqIGludG8gdGhlIEdUVC4KKwkgKi8KKwlvYmpfcHJpdi0+YWdwX21lbSA9IGRybV9hZ3BfYmluZF9wYWdlcyhkZXYsCisJCQkJCSAgICAgICBvYmpfcHJpdi0+cGFnZV9saXN0LAorCQkJCQkgICAgICAgcGFnZV9jb3VudCwKKwkJCQkJICAgICAgIG9ial9wcml2LT5ndHRfb2Zmc2V0LAorCQkJCQkgICAgICAgb2JqX3ByaXYtPmFncF90eXBlKTsKKwlpZiAob2JqX3ByaXYtPmFncF9tZW0gPT0gTlVMTCkgeworCQlpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qob2JqKTsKKwkJZHJtX21tX3B1dF9ibG9jayhvYmpfcHJpdi0+Z3R0X3NwYWNlKTsKKwkJb2JqX3ByaXYtPmd0dF9zcGFjZSA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlhdG9taWNfaW5jKCZkZXYtPmd0dF9jb3VudCk7CisJYXRvbWljX2FkZChvYmotPnNpemUsICZkZXYtPmd0dF9tZW1vcnkpOworCisJLyogQXNzZXJ0IHRoYXQgdGhlIG9iamVjdCBpcyBub3QgY3VycmVudGx5IGluIGFueSBHUFUgZG9tYWluLiBBcyBpdAorCSAqIHdhc24ndCBpbiB0aGUgR1RULCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IHdheSBpdCBjb3VsZCBoYXZlIGJlZW4gaW4KKwkgKiBhIEdQVSBjYWNoZQorCSAqLworCUJVR19PTihvYmotPnJlYWRfZG9tYWlucyAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVXxJOTE1X0dFTV9ET01BSU5fR1RUKSk7CisJQlVHX09OKG9iai0+d3JpdGVfZG9tYWluICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKTsKKworCXJldHVybiAwOworfQorCit2b2lkCitpOTE1X2dlbV9jbGZsdXNoX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdAkqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIHBhZ2UgbGlzdCBzZXQgdXAsIHRoZW4gd2UncmUgbm90IHBpbm5lZAorCSAqIHRvIEdQVSwgYW5kIHdlIGNhbiBpZ25vcmUgdGhlIGNhY2hlIGZsdXNoIGJlY2F1c2UgaXQnbGwgaGFwcGVuCisJICogYWdhaW4gYXQgYmluZCB0aW1lLgorCSAqLworCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0ID09IE5VTEwpCisJCXJldHVybjsKKworCWRybV9jbGZsdXNoX3BhZ2VzKG9ial9wcml2LT5wYWdlX2xpc3QsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSk7Cit9CisKKy8qCisgKiBTZXQgdGhlIG5leHQgZG9tYWluIGZvciB0aGUgc3BlY2lmaWVkIG9iamVjdC4gVGhpcworICogbWF5IG5vdCBhY3R1YWxseSBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgZmx1c2hpbmcvaW52YWxpZGluZyB0aG91Z2gsCisgKiBhcyB0aGF0IG1heSB3YW50IHRvIGJlIGJhdGNoZWQgd2l0aCBvdGhlciBzZXRfZG9tYWluIG9wZXJhdGlvbnMKKyAqCisgKiBUaGlzIGlzICh3ZSBob3BlKSB0aGUgb25seSByZWFsbHkgdHJpY2t5IHBhcnQgb2YgZ2VtLiBUaGUgZ29hbAorICogaXMgZmFpcmx5IHNpbXBsZSAtLSB0cmFjayB3aGljaCBjYWNoZXMgaG9sZCBiaXRzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBtYWtlIHN1cmUgdGhleSByZW1haW4gY29oZXJlbnQuIEEgZmV3IGNvbmNyZXRlIGV4YW1wbGVzIG1heQorICogaGVscCB0byBleHBsYWluIGhvdyBpdCB3b3Jrcy4gRm9yIHNob3J0aGFuZCwgd2UgdXNlIHRoZSBub3RhdGlvbgorICogKHJlYWRfZG9tYWlucywgd3JpdGVfZG9tYWluKSwgZS5nLiAoQ1BVLCBDUFUpIHRvIGluZGljYXRlIHRoZQorICogYSBwYWlyIG9mIHJlYWQgYW5kIHdyaXRlIGRvbWFpbiBtYXNrcy4KKyAqCisgKiBDYXNlIDE6IHRoZSBiYXRjaCBidWZmZXIKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVCisgKgkzLiBNYXBwZWQgdG8gR1RUCisgKgk0LiBSZWFkIGJ5IEdQVQorICoJNS4gVW5tYXBwZWQgZnJvbSBHVFQKKyAqCTYuIEZyZWVkCisgKgorICoJTGV0J3MgdGFrZSB0aGVzZSBhIHN0ZXAgYXQgYSB0aW1lCisgKgorICoJMS4gQWxsb2NhdGVkCisgKgkJUGFnZXMgYWxsb2NhdGVkIGZyb20gdGhlIGtlcm5lbCBtYXkgc3RpbGwgaGF2ZQorICoJCWNhY2hlIGNvbnRlbnRzLCBzbyB3ZSBzZXQgdGhlbSB0byAoQ1BVLCBDUFUpIGFsd2F5cy4KKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVICh1c2luZyBwd3JpdGUpCisgKgkJVGhlIHB3cml0ZSBmdW5jdGlvbiBjYWxscyBzZXRfZG9tYWluIChDUFUsIENQVSkgYW5kCisgKgkJdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgKGFzIG5vdGhpbmcgY2hhbmdlcykKKyAqCTMuIE1hcHBlZCBieSBHVFQKKyAqCQlUaGlzIGZ1bmN0aW9uIGFzc2VydHMgdGhhdCB0aGUgb2JqZWN0IGlzIG5vdAorICoJCWN1cnJlbnRseSBpbiBhbnkgR1BVLWJhc2VkIHJlYWQgb3Igd3JpdGUgZG9tYWlucworICoJNC4gUmVhZCBieSBHUFUKKyAqCQlpOTE1X2dlbV9leGVjYnVmZmVyIGNhbGxzIHNldF9kb21haW4gKENPTU1BTkQsIDApLgorICoJCUFzIHdyaXRlX2RvbWFpbiBpcyB6ZXJvLCB0aGlzIGZ1bmN0aW9uIGFkZHMgaW4gdGhlCisgKgkJY3VycmVudCByZWFkIGRvbWFpbnMgKENQVStDT01NQU5ELCAwKS4KKyAqCQlmbHVzaF9kb21haW5zIGlzIHNldCB0byBDUFUuCisgKgkJaW52YWxpZGF0ZV9kb21haW5zIGlzIHNldCB0byBDT01NQU5ECisgKgkJY2xmbHVzaCBpcyBydW4gdG8gZ2V0IGRhdGEgb3V0IG9mIHRoZSBDUFUgY2FjaGVzCisgKgkJdGhlbiBpOTE1X2Rldl9zZXRfZG9tYWluIGNhbGxzIGk5MTVfZ2VtX2ZsdXNoIHRvCisgKgkJZW1pdCBhbiBNSV9GTFVTSCBhbmQgZHJtX2FncF9jaGlwc2V0X2ZsdXNoCisgKgk1LiBVbm1hcHBlZCBmcm9tIEdUVAorICoJCWk5MTVfZ2VtX29iamVjdF91bmJpbmQgY2FsbHMgc2V0X2RvbWFpbiAoQ1BVLCBDUFUpCisgKgkJZmx1c2hfZG9tYWlucyBhbmQgaW52YWxpZGF0ZV9kb21haW5zIGVuZCB1cCBib3RoIHplcm8KKyAqCQlzbyBubyBmbHVzaGluZy9pbnZhbGlkYXRpbmcgaGFwcGVucworICoJNi4gRnJlZWQKKyAqCQl5YXksIGRvbmUKKyAqCisgKiBDYXNlIDI6IFRoZSBzaGFyZWQgcmVuZGVyIGJ1ZmZlcgorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJMi4gTWFwcGVkIHRvIEdUVAorICoJMy4gUmVhZC93cml0dGVuIGJ5IEdQVQorICoJNC4gc2V0X2RvbWFpbiB0byAoQ1BVLENQVSkKKyAqCTUuIFJlYWQvd3JpdHRlbiBieSBDUFUKKyAqCTYuIFJlYWQvd3JpdHRlbiBieSBHUFUKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCQlTYW1lIGFzIGxhc3QgZXhhbXBsZSwgKENQVSwgQ1BVKQorICoJMi4gTWFwcGVkIHRvIEdUVAorICoJCU5vdGhpbmcgY2hhbmdlcyAoYXNzZXJ0aW9ucyBmaW5kIHRoYXQgaXQgaXMgbm90IGluIHRoZSBHUFUpCisgKgkzLiBSZWFkL3dyaXR0ZW4gYnkgR1BVCisgKgkJZXhlY2J1ZmZlciBjYWxscyBzZXRfZG9tYWluIChSRU5ERVIsIFJFTkRFUikKKyAqCQlmbHVzaF9kb21haW5zIGdldHMgQ1BVCisgKgkJaW52YWxpZGF0ZV9kb21haW5zIGdldHMgR1BVCisgKgkJY2xmbHVzaCAob2JqKQorICoJCU1JX0ZMVVNIIGFuZCBkcm1fYWdwX2NoaXBzZXRfZmx1c2gKKyAqCTQuIHNldF9kb21haW4gKENQVSwgQ1BVKQorICoJCWZsdXNoX2RvbWFpbnMgZ2V0cyBHUFUKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgZ2V0cyBDUFUKKyAqCQl3YWl0X3JlbmRlcmluZyAob2JqKSB0byBtYWtlIHN1cmUgYWxsIGRyYXdpbmcgaXMgY29tcGxldGUuCisgKgkJVGhpcyB3aWxsIGluY2x1ZGUgYW4gTUlfRkxVU0ggdG8gZ2V0IHRoZSBkYXRhIGZyb20gR1BVCisgKgkJdG8gbWVtb3J5CisgKgkJY2xmbHVzaCAob2JqKSB0byBpbnZhbGlkYXRlIHRoZSBDUFUgY2FjaGUKKyAqCQlBbm90aGVyIE1JX0ZMVVNIIGluIGk5MTVfZ2VtX2ZsdXNoIChlbGltaW5hdGUgdGhpcyBzb21laG93PykKKyAqCTUuIFJlYWQvd3JpdHRlbiBieSBDUFUKKyAqCQljYWNoZSBsaW5lcyBhcmUgbG9hZGVkIGFuZCBkaXJ0aWVkCisgKgk2LiBSZWFkIHdyaXR0ZW4gYnkgR1BVCisgKgkJU2FtZSBhcyBsYXN0IEdQVSBhY2Nlc3MKKyAqCisgKiBDYXNlIDM6IFRoZSBjb25zdGFudCBidWZmZXIKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVCisgKgkzLiBSZWFkIGJ5IEdQVQorICoJNC4gVXBkYXRlZCAod3JpdHRlbikgYnkgQ1BVIGFnYWluCisgKgk1LiBSZWFkIGJ5IEdQVQorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJCShDUFUsIENQVSkKKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVCisgKgkJKENQVSwgQ1BVKQorICoJMy4gUmVhZCBieSBHUFUKKyAqCQkoQ1BVK1JFTkRFUiwgMCkKKyAqCQlmbHVzaF9kb21haW5zID0gQ1BVCisgKgkJaW52YWxpZGF0ZV9kb21haW5zID0gUkVOREVSCisgKgkJY2xmbHVzaCAob2JqKQorICoJCU1JX0ZMVVNICisgKgkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoCisgKgk0LiBVcGRhdGVkICh3cml0dGVuKSBieSBDUFUgYWdhaW4KKyAqCQkoQ1BVLCBDUFUpCisgKgkJZmx1c2hfZG9tYWlucyA9IDAgKG5vIHByZXZpb3VzIHdyaXRlIGRvbWFpbikKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgPSAwIChubyBuZXcgcmVhZCBkb21haW5zKQorICoJNS4gUmVhZCBieSBHUFUKKyAqCQkoQ1BVK1JFTkRFUiwgMCkKKyAqCQlmbHVzaF9kb21haW5zID0gQ1BVCisgKgkJaW52YWxpZGF0ZV9kb21haW5zID0gUkVOREVSCisgKgkJY2xmbHVzaCAob2JqKQorICoJCU1JX0ZMVVNICisgKgkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJICAgIHVpbnQzMl90IHJlYWRfZG9tYWlucywKKwkJCSAgICB1aW50MzJfdCB3cml0ZV9kb21haW4pCit7CisJc3RydWN0IGRybV9kZXZpY2UJCSpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdAkqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCXVpbnQzMl90CQkJaW52YWxpZGF0ZV9kb21haW5zID0gMDsKKwl1aW50MzJfdAkJCWZsdXNoX2RvbWFpbnMgPSAwOworCWludAkJCQlyZXQ7CisKKyNpZiBXQVRDSF9CVUYKKwlEUk1fSU5GTygiJXM6IG9iamVjdCAlcCByZWFkICUwOHggLT4gJTA4eCB3cml0ZSAlMDh4IC0+ICUwOHhcbiIsCisJCSBfX2Z1bmNfXywgb2JqLAorCQkgb2JqLT5yZWFkX2RvbWFpbnMsIHJlYWRfZG9tYWlucywKKwkJIG9iai0+d3JpdGVfZG9tYWluLCB3cml0ZV9kb21haW4pOworI2VuZGlmCisJLyoKKwkgKiBJZiB0aGUgb2JqZWN0IGlzbid0IG1vdmluZyB0byBhIG5ldyB3cml0ZSBkb21haW4sCisJICogbGV0IHRoZSBvYmplY3Qgc3RheSBpbiBtdWx0aXBsZSByZWFkIGRvbWFpbnMKKwkgKi8KKwlpZiAod3JpdGVfZG9tYWluID09IDApCisJCXJlYWRfZG9tYWlucyB8PSBvYmotPnJlYWRfZG9tYWluczsKKwllbHNlCisJCW9ial9wcml2LT5kaXJ0eSA9IDE7CisKKwkvKgorCSAqIEZsdXNoIHRoZSBjdXJyZW50IHdyaXRlIGRvbWFpbiBpZgorCSAqIHRoZSBuZXcgcmVhZCBkb21haW5zIGRvbid0IG1hdGNoLiBJbnZhbGlkYXRlCisJICogYW55IHJlYWQgZG9tYWlucyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgb2xkCisJICogd3JpdGUgZG9tYWluCisJICovCisJaWYgKG9iai0+d3JpdGVfZG9tYWluICYmIG9iai0+d3JpdGVfZG9tYWluICE9IHJlYWRfZG9tYWlucykgeworCQlmbHVzaF9kb21haW5zIHw9IG9iai0+d3JpdGVfZG9tYWluOworCQlpbnZhbGlkYXRlX2RvbWFpbnMgfD0gcmVhZF9kb21haW5zICYgfm9iai0+d3JpdGVfZG9tYWluOworCX0KKwkvKgorCSAqIEludmFsaWRhdGUgYW55IHJlYWQgY2FjaGVzIHdoaWNoIG1heSBoYXZlCisJICogc3RhbGUgZGF0YS4gVGhhdCBpcywgYW55IG5ldyByZWFkIGRvbWFpbnMuCisJICovCisJaW52YWxpZGF0ZV9kb21haW5zIHw9IHJlYWRfZG9tYWlucyAmIH5vYmotPnJlYWRfZG9tYWluczsKKwlpZiAoKGZsdXNoX2RvbWFpbnMgfCBpbnZhbGlkYXRlX2RvbWFpbnMpICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgeworI2lmIFdBVENIX0JVRgorCQlEUk1fSU5GTygiJXM6IENQVSBkb21haW4gZmx1c2ggJTA4eCBpbnZhbGlkYXRlICUwOHhcbiIsCisJCQkgX19mdW5jX18sIGZsdXNoX2RvbWFpbnMsIGludmFsaWRhdGVfZG9tYWlucyk7CisjZW5kaWYKKwkJLyoKKwkJICogSWYgd2UncmUgaW52YWxpZGluZyB0aGUgQ1BVIGNhY2hlIGFuZCBmbHVzaGluZyBhIEdQVSBjYWNoZSwKKwkJICogdGhlbiBwYXVzZSBmb3IgcmVuZGVyaW5nIHNvIHRoYXQgdGhlIEdQVSBjYWNoZXMgd2lsbCBiZQorCQkgKiBmbHVzaGVkIGJlZm9yZSB0aGUgY3B1IGNhY2hlIGlzIGludmFsaWRhdGVkCisJCSAqLworCQlpZiAoKGludmFsaWRhdGVfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpICYmCisJCSAgICAoZmx1c2hfZG9tYWlucyAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8CisJCQkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQpKSkgeworCQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKKwl9CisKKwlpZiAoKHdyaXRlX2RvbWFpbiB8IGZsdXNoX2RvbWFpbnMpICE9IDApCisJCW9iai0+d3JpdGVfZG9tYWluID0gd3JpdGVfZG9tYWluOworCisJLyogSWYgd2UncmUgaW52YWxpZGF0aW5nIHRoZSBDUFUgZG9tYWluLCBjbGVhciB0aGUgcGVyLXBhZ2UgQ1BVCisJICogZG9tYWluIGxpc3QgYXMgd2VsbC4KKwkgKi8KKwlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkICE9IE5VTEwgJiYKKwkgICAgKHdyaXRlX2RvbWFpbiAhPSAwIHx8CisJICAgICByZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSkgeworCQlkcm1fZnJlZShvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSwKKwkJCSBEUk1fTUVNX0RSSVZFUik7CisJCW9ial9wcml2LT5wYWdlX2NwdV92YWxpZCA9IE5VTEw7CisJfQorCW9iai0+cmVhZF9kb21haW5zID0gcmVhZF9kb21haW5zOworCisJZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMgfD0gaW52YWxpZGF0ZV9kb21haW5zOworCWRldi0+Zmx1c2hfZG9tYWlucyB8PSBmbHVzaF9kb21haW5zOworI2lmIFdBVENIX0JVRgorCURSTV9JTkZPKCIlczogcmVhZCAlMDh4IHdyaXRlICUwOHggaW52YWxpZGF0ZSAlMDh4IGZsdXNoICUwOHhcbiIsCisJCSBfX2Z1bmNfXywKKwkJIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKKwkJIGRldi0+aW52YWxpZGF0ZV9kb21haW5zLCBkZXYtPmZsdXNoX2RvbWFpbnMpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogU2V0IHRoZSByZWFkL3dyaXRlIGRvbWFpbiBvbiBhIHJhbmdlIG9mIHRoZSBvYmplY3QuCisgKgorICogQ3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgZm9yIENQVSByZWFkcywgb3RoZXJ3aXNlIGRyb3BzIHRvIG5vcm1hbAorICogaTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4oKS4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW5fcmFuZ2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJIHVpbnQ2NF90IG9mZnNldCwKKwkJCQkgdWludDY0X3Qgc2l6ZSwKKwkJCQkgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkJCSB1aW50MzJfdCB3cml0ZV9kb21haW4pCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcmV0LCBpOworCisJaWYgKG9iai0+cmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocmVhZF9kb21haW5zICE9IEk5MTVfR0VNX0RPTUFJTl9DUFUgfHwKKwkgICAgd3JpdGVfZG9tYWluICE9IDApCisJCXJldHVybiBpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbihvYmosCisJCQkJCQkgIHJlYWRfZG9tYWlucywgd3JpdGVfZG9tYWluKTsKKworCS8qIFdhaXQgb24gYW55IEdQVSByZW5kZXJpbmcgdG8gdGhlIG9iamVjdCB0byBiZSBmbHVzaGVkLiAqLworCWlmIChvYmotPndyaXRlX2RvbWFpbiAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8IEk5MTVfR0VNX0RPTUFJTl9HVFQpKSB7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmopOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkID09IE5VTEwpIHsKKwkJb2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkID0gZHJtX2NhbGxvYygxLCBvYmotPnNpemUgLyBQQUdFX1NJWkUsCisJCQkJCQkgICAgICBEUk1fTUVNX0RSSVZFUik7CisJfQorCisJLyogRmx1c2ggdGhlIGNhY2hlIG9uIGFueSBwYWdlcyB0aGF0IGFyZSBzdGlsbCBpbnZhbGlkIGZyb20gdGhlIENQVSdzCisJICogcGVyc3BlY3RpdmUuCisJICovCisJZm9yIChpID0gb2Zmc2V0IC8gUEFHRV9TSVpFOyBpIDw9IChvZmZzZXQgKyBzaXplIC0gMSkgLyBQQUdFX1NJWkU7IGkrKykgeworCQlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkW2ldKQorCQkJY29udGludWU7CisKKwkJZHJtX2NsZmx1c2hfcGFnZXMob2JqX3ByaXYtPnBhZ2VfbGlzdCArIGksIDEpOworCisJCW9ial9wcml2LT5wYWdlX2NwdV92YWxpZFtpXSA9IDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogT25jZSBhbGwgb2YgdGhlIG9iamVjdHMgaGF2ZSBiZWVuIHNldCBpbiB0aGUgcHJvcGVyIGRvbWFpbiwKKyAqIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBmbHVzaCBhbmQgaW52YWxpZGF0ZSBvcGVyYXRpb25zLgorICoKKyAqIFJldHVybnMgdGhlIHdyaXRlIGRvbWFpbnMgZmx1c2hlZCwgZm9yIHVzZSBpbiBmbHVzaCB0cmFja2luZy4KKyAqLworc3RhdGljIHVpbnQzMl90CitpOTE1X2dlbV9kZXZfc2V0X2RvbWFpbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnMgPSBkZXYtPmZsdXNoX2RvbWFpbnM7CisKKwkvKgorCSAqIE5vdyB0aGF0IGFsbCB0aGUgYnVmZmVycyBhcmUgc3luY2VkIHRvIHRoZSBwcm9wZXIgZG9tYWlucywKKwkgKiBmbHVzaCBhbmQgaW52YWxpZGF0ZSB0aGUgY29sbGVjdGVkIGRvbWFpbnMKKwkgKi8KKwlpZiAoZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMgfCBkZXYtPmZsdXNoX2RvbWFpbnMpIHsKKyNpZiBXQVRDSF9FWEVDCisJCURSTV9JTkZPKCIlczogaW52YWxpZGF0ZV9kb21haW5zICUwOHggZmx1c2hfZG9tYWlucyAlMDh4XG4iLAorCQkJICBfX2Z1bmNfXywKKwkJCSBkZXYtPmludmFsaWRhdGVfZG9tYWlucywKKwkJCSBkZXYtPmZsdXNoX2RvbWFpbnMpOworI2VuZGlmCisJCWk5MTVfZ2VtX2ZsdXNoKGRldiwKKwkJCSAgICAgICBkZXYtPmludmFsaWRhdGVfZG9tYWlucywKKwkJCSAgICAgICBkZXYtPmZsdXNoX2RvbWFpbnMpOworCQlkZXYtPmludmFsaWRhdGVfZG9tYWlucyA9IDA7CisJCWRldi0+Zmx1c2hfZG9tYWlucyA9IDA7CisJfQorCisJcmV0dXJuIGZsdXNoX2RvbWFpbnM7Cit9CisKKy8qKgorICogUGluIGFuIG9iamVjdCB0byB0aGUgR1RUIGFuZCBldmFsdWF0ZSB0aGUgcmVsb2NhdGlvbnMgbGFuZGluZyBpbiBpdC4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3Bpbl9hbmRfcmVsb2NhdGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICplbnRyeSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKnJlbG9jczsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCBpLCByZXQ7CisJdWludDMyX3QgbGFzdF9yZWxvY19vZmZzZXQgPSAtMTsKKwl2b2lkIF9faW9tZW0gKnJlbG9jX3BhZ2UgPSBOVUxMOworCisJLyogQ2hvb3NlIHRoZSBHVFQgb2Zmc2V0IGZvciBvdXIgYnVmZmVyIGFuZCBwdXQgaXQgdGhlcmUuICovCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosICh1aW50MzJfdCkgZW50cnktPmFsaWdubWVudCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWVudHJ5LT5vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKworCXJlbG9jcyA9IChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgX191c2VyICopCisJCSAodWludHB0cl90KSBlbnRyeS0+cmVsb2NzX3B0cjsKKwkvKiBBcHBseSB0aGUgcmVsb2NhdGlvbnMsIHVzaW5nIHRoZSBHVFQgYXBlcnR1cmUgdG8gYXZvaWQgY2FjaGUKKwkgKiBmbHVzaGluZyByZXF1aXJlbWVudHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5yZWxvY2F0aW9uX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICp0YXJnZXRfb2JqOworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqdGFyZ2V0X29ial9wcml2OworCQl1aW50MzJfdCByZWxvY192YWwsIHJlbG9jX29mZnNldDsKKwkJdWludDMyX3QgX19pb21lbSAqcmVsb2NfZW50cnk7CisKKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoJnJlbG9jLCByZWxvY3MgKyBpLCBzaXplb2YocmVsb2MpKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQl0YXJnZXRfb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKG9iai0+ZGV2LCBmaWxlX3ByaXYsCisJCQkJCQkgICByZWxvYy50YXJnZXRfaGFuZGxlKTsKKwkJaWYgKHRhcmdldF9vYmogPT0gTlVMTCkgeworCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQlyZXR1cm4gLUVCQURGOworCQl9CisJCXRhcmdldF9vYmpfcHJpdiA9IHRhcmdldF9vYmotPmRyaXZlcl9wcml2YXRlOworCisJCS8qIFRoZSB0YXJnZXQgYnVmZmVyIHNob3VsZCBoYXZlIGFwcGVhcmVkIGJlZm9yZSB1cyBpbiB0aGUKKwkJICogZXhlY19vYmplY3QgbGlzdCwgc28gaXQgc2hvdWxkIGhhdmUgYSBHVFQgc3BhY2UgYm91bmQgYnkgbm93LgorCQkgKi8KKwkJaWYgKHRhcmdldF9vYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpIHsKKwkJCURSTV9FUlJPUigiTm8gR1RUIHNwYWNlIGZvdW5kIGZvciBvYmplY3QgJWRcbiIsCisJCQkJICByZWxvYy50YXJnZXRfaGFuZGxlKTsKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOworCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChyZWxvYy5vZmZzZXQgPiBvYmotPnNpemUgLSA0KSB7CisJCQlEUk1fRVJST1IoIlJlbG9jYXRpb24gYmV5b25kIG9iamVjdCBib3VuZHM6ICIKKwkJCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCBzaXplICVkLlxuIiwKKwkJCQkgIG9iaiwgcmVsb2MudGFyZ2V0X2hhbmRsZSwKKwkJCQkgIChpbnQpIHJlbG9jLm9mZnNldCwgKGludCkgb2JqLT5zaXplKTsKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOworCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAocmVsb2Mub2Zmc2V0ICYgMykgeworCQkJRFJNX0VSUk9SKCJSZWxvY2F0aW9uIG5vdCA0LWJ5dGUgYWxpZ25lZDogIgorCQkJCSAgIm9iaiAlcCB0YXJnZXQgJWQgb2Zmc2V0ICVkLlxuIiwKKwkJCQkgIG9iaiwgcmVsb2MudGFyZ2V0X2hhbmRsZSwKKwkJCQkgIChpbnQpIHJlbG9jLm9mZnNldCk7CisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAocmVsb2Mud3JpdGVfZG9tYWluICYmIHRhcmdldF9vYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluICYmCisJCSAgICByZWxvYy53cml0ZV9kb21haW4gIT0gdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4pIHsKKwkJCURSTV9FUlJPUigiV3JpdGUgZG9tYWluIGNvbmZsaWN0OiAiCisJCQkJICAib2JqICVwIHRhcmdldCAlZCBvZmZzZXQgJWQgIgorCQkJCSAgIm5ldyAlMDh4IG9sZCAlMDh4XG4iLAorCQkJCSAgb2JqLCByZWxvYy50YXJnZXRfaGFuZGxlLAorCQkJCSAgKGludCkgcmVsb2Mub2Zmc2V0LAorCQkJCSAgcmVsb2Mud3JpdGVfZG9tYWluLAorCQkJCSAgdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4pOworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKyNpZiBXQVRDSF9SRUxPQworCQlEUk1fSU5GTygiJXM6IG9iaiAlcCBvZmZzZXQgJTA4eCB0YXJnZXQgJWQgIgorCQkJICJyZWFkICUwOHggd3JpdGUgJTA4eCBndHQgJTA4eCAiCisJCQkgInByZXN1bWVkICUwOHggZGVsdGEgJTA4eFxuIiwKKwkJCSBfX2Z1bmNfXywKKwkJCSBvYmosCisJCQkgKGludCkgcmVsb2Mub2Zmc2V0LAorCQkJIChpbnQpIHJlbG9jLnRhcmdldF9oYW5kbGUsCisJCQkgKGludCkgcmVsb2MucmVhZF9kb21haW5zLAorCQkJIChpbnQpIHJlbG9jLndyaXRlX2RvbWFpbiwKKwkJCSAoaW50KSB0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQsCisJCQkgKGludCkgcmVsb2MucHJlc3VtZWRfb2Zmc2V0LAorCQkJIHJlbG9jLmRlbHRhKTsKKyNlbmRpZgorCisJCXRhcmdldF9vYmotPnBlbmRpbmdfcmVhZF9kb21haW5zIHw9IHJlbG9jLnJlYWRfZG9tYWluczsKKwkJdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4gfD0gcmVsb2Mud3JpdGVfZG9tYWluOworCisJCS8qIElmIHRoZSByZWxvY2F0aW9uIGFscmVhZHkgaGFzIHRoZSByaWdodCB2YWx1ZSBpbiBpdCwgbm8KKwkJICogbW9yZSB3b3JrIG5lZWRzIHRvIGJlIGRvbmUuCisJCSAqLworCQlpZiAodGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0ID09IHJlbG9jLnByZXN1bWVkX29mZnNldCkgeworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE5vdyB0aGF0IHdlJ3JlIGdvaW5nIHRvIGFjdHVhbGx5IHdyaXRlIHNvbWUgZGF0YSBpbiwKKwkJICogbWFrZSBzdXJlIHRoYXQgYW55IHJlbmRlcmluZyB1c2luZyB0aGlzIGJ1ZmZlcidzIGNvbnRlbnRzCisJCSAqIGlzIGNvbXBsZXRlZC4KKwkJICovCisJCWk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmopOworCisJCS8qIEFzIHdlJ3JlIHdyaXRpbmcgdGhyb3VnaCB0aGUgZ3R0LCBmbHVzaAorCQkgKiBhbnkgQ1BVIHdyaXRlcyBiZWZvcmUgd2Ugd3JpdGUgdGhlIHJlbG9jYXRpb25zCisJCSAqLworCQlpZiAob2JqLT53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSB7CisJCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOworCQkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoKGRldik7CisJCQlvYmotPndyaXRlX2RvbWFpbiA9IDA7CisJCX0KKworCQkvKiBNYXAgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgcmVsb2NhdGlvbiB3ZSdyZSBnb2luZyB0bworCQkgKiBwZXJmb3JtLgorCQkgKi8KKwkJcmVsb2Nfb2Zmc2V0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyByZWxvYy5vZmZzZXQ7CisJCWlmIChyZWxvY19wYWdlID09IE5VTEwgfHwKKwkJICAgIChsYXN0X3JlbG9jX29mZnNldCAmIH4oUEFHRV9TSVpFIC0gMSkpICE9CisJCSAgICAocmVsb2Nfb2Zmc2V0ICYgfihQQUdFX1NJWkUgLSAxKSkpIHsKKwkJCWlmIChyZWxvY19wYWdlICE9IE5VTEwpCisJCQkJaW91bm1hcChyZWxvY19wYWdlKTsKKworCQkJcmVsb2NfcGFnZSA9IGlvcmVtYXBfd2MoZGV2LT5hZ3AtPmJhc2UgKworCQkJCQkJKHJlbG9jX29mZnNldCAmCisJCQkJCQkgfihQQUdFX1NJWkUgLSAxKSksCisJCQkJCQlQQUdFX1NJWkUpOworCQkJbGFzdF9yZWxvY19vZmZzZXQgPSByZWxvY19vZmZzZXQ7CisJCQlpZiAocmVsb2NfcGFnZSA9PSBOVUxMKSB7CisJCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0KKworCQlyZWxvY19lbnRyeSA9ICh1aW50MzJfdCBfX2lvbWVtICopKHJlbG9jX3BhZ2UgKworCQkJCQkgICAocmVsb2Nfb2Zmc2V0ICYgKFBBR0VfU0laRSAtIDEpKSk7CisJCXJlbG9jX3ZhbCA9IHRhcmdldF9vYmpfcHJpdi0+Z3R0X29mZnNldCArIHJlbG9jLmRlbHRhOworCisjaWYgV0FUQ0hfQlVGCisJCURSTV9JTkZPKCJBcHBsaWVkIHJlbG9jYXRpb246ICVwQDB4JTA4eCAlMDh4IC0+ICUwOHhcbiIsCisJCQkgIG9iaiwgKHVuc2lnbmVkIGludCkgcmVsb2Mub2Zmc2V0LAorCQkJICByZWFkbChyZWxvY19lbnRyeSksIHJlbG9jX3ZhbCk7CisjZW5kaWYKKwkJd3JpdGVsKHJlbG9jX3ZhbCwgcmVsb2NfZW50cnkpOworCisJCS8qIFdyaXRlIHRoZSB1cGRhdGVkIHByZXN1bWVkIG9mZnNldCBmb3IgdGhpcyBlbnRyeSBiYWNrIG91dAorCQkgKiB0byB0aGUgdXNlci4KKwkJICovCisJCXJlbG9jLnByZXN1bWVkX29mZnNldCA9IHRhcmdldF9vYmpfcHJpdi0+Z3R0X29mZnNldDsKKwkJcmV0ID0gY29weV90b191c2VyKHJlbG9jcyArIGksICZyZWxvYywgc2l6ZW9mKHJlbG9jKSk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwl9CisKKwlpZiAocmVsb2NfcGFnZSAhPSBOVUxMKQorCQlpb3VubWFwKHJlbG9jX3BhZ2UpOworCisjaWYgV0FUQ0hfQlVGCisJaWYgKDApCisJCWk5MTVfZ2VtX2R1bXBfb2JqZWN0KG9iaiwgMTI4LCBfX2Z1bmNfXywgfjApOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qKiBEaXNwYXRjaCBhIGJhdGNoYnVmZmVyIHRvIHRoZSByaW5nCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciAqZXhlYywKKwkJCSAgICAgIHVpbnQ2NF90IGV4ZWNfb2Zmc2V0KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqYm94ZXMgPSAoc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICopCisJCQkJCSAgICAgKHVpbnRwdHJfdCkgZXhlYy0+Y2xpcHJlY3RzX3B0cjsKKwlpbnQgbmJveCA9IGV4ZWMtPm51bV9jbGlwcmVjdHM7CisJaW50IGkgPSAwLCBjb3VudDsKKwl1aW50MzJfdAlleGVjX3N0YXJ0LCBleGVjX2xlbjsKKwlSSU5HX0xPQ0FMUzsKKworCWV4ZWNfc3RhcnQgPSAodWludDMyX3QpIGV4ZWNfb2Zmc2V0ICsgZXhlYy0+YmF0Y2hfc3RhcnRfb2Zmc2V0OworCWV4ZWNfbGVuID0gKHVpbnQzMl90KSBleGVjLT5iYXRjaF9sZW47CisKKwlpZiAoKGV4ZWNfc3RhcnQgfCBleGVjX2xlbikgJiAweDcpIHsKKwkJRFJNX0VSUk9SKCJhbGlnbm1lbnRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWV4ZWNfc3RhcnQpCisJCXJldHVybiAtRUlOVkFMOworCisJY291bnQgPSBuYm94ID8gbmJveCA6IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoaSA8IG5ib3gpIHsKKwkJCWludCByZXQgPSBpOTE1X2VtaXRfYm94KGRldiwgYm94ZXMsIGksCisJCQkJCQlleGVjLT5EUjEsIGV4ZWMtPkRSNCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZiAoSVNfSTgzMChkZXYpIHx8IElTXzg0NUcoZGV2KSkgeworCQkJQkVHSU5fTFBfUklORyg0KTsKKwkJCU9VVF9SSU5HKE1JX0JBVENIX0JVRkZFUik7CisJCQlPVVRfUklORyhleGVjX3N0YXJ0IHwgTUlfQkFUQ0hfTk9OX1NFQ1VSRSk7CisJCQlPVVRfUklORyhleGVjX3N0YXJ0ICsgZXhlY19sZW4gLSA0KTsKKwkJCU9VVF9SSU5HKDApOworCQkJQURWQU5DRV9MUF9SSU5HKCk7CisJCX0gZWxzZSB7CisJCQlCRUdJTl9MUF9SSU5HKDIpOworCQkJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJCQlPVVRfUklORyhNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfAorCQkJCQkgKDIgPDwgNikgfAorCQkJCQkgTUlfQkFUQ0hfTk9OX1NFQ1VSRV9JOTY1KTsKKwkJCQlPVVRfUklORyhleGVjX3N0YXJ0KTsKKwkJCX0gZWxzZSB7CisJCQkJT1VUX1JJTkcoTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwKKwkJCQkJICgyIDw8IDYpKTsKKwkJCQlPVVRfUklORyhleGVjX3N0YXJ0IHwgTUlfQkFUQ0hfTk9OX1NFQ1VSRSk7CisJCQl9CisJCQlBRFZBTkNFX0xQX1JJTkcoKTsKKwkJfQorCX0KKworCS8qIFhYWCBicmVhZGNydW1iICovCisJcmV0dXJuIDA7Cit9CisKKy8qIFRocm90dGxlIG91ciByZW5kZXJpbmcgYnkgd2FpdGluZyB1bnRpbCB0aGUgcmluZyBoYXMgY29tcGxldGVkIG91ciByZXF1ZXN0cworICogZW1pdHRlZCBvdmVyIDIwIG1zZWMgYWdvLgorICoKKyAqIFRoaXMgc2hvdWxkIGdldCB1cyByZWFzb25hYmxlIHBhcmFsbGVsaXNtIGJldHdlZW4gQ1BVIGFuZCBHUFUgYnV0IGFsc28KKyAqIHJlbGF0aXZlbHkgbG93IGxhdGVuY3kgd2hlbiBibG9ja2luZyBvbiBhIHBhcnRpY3VsYXIgcmVxdWVzdCB0byBmaW5pc2guCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX3JpbmdfdGhyb3R0bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqaTkxNV9maWxlX3ByaXYgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2OworCWludCByZXQgPSAwOworCXVpbnQzMl90IHNlcW5vOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXNlcW5vID0gaTkxNV9maWxlX3ByaXYtPm1tLmxhc3RfZ2VtX3Rocm90dGxlX3NlcW5vOworCWk5MTVfZmlsZV9wcml2LT5tbS5sYXN0X2dlbV90aHJvdHRsZV9zZXFubyA9CisJCWk5MTVfZmlsZV9wcml2LT5tbS5sYXN0X2dlbV9zZXFubzsKKwlpZiAoc2Vxbm8pCisJCXJldCA9IGk5MTVfd2FpdF9yZXF1ZXN0KGRldiwgc2Vxbm8pOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK2ludAoraTkxNV9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqaTkxNV9maWxlX3ByaXYgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCAqZXhlY19saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKipvYmplY3RfbGlzdCA9IE5VTEw7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpiYXRjaF9vYmo7CisJaW50IHJldCwgaSwgcGlubmVkID0gMDsKKwl1aW50NjRfdCBleGVjX29mZnNldDsKKwl1aW50MzJfdCBzZXFubywgZmx1c2hfZG9tYWluczsKKworI2lmIFdBVENIX0VYRUMKKwlEUk1fSU5GTygiYnVmZmVyc19wdHIgJWQgYnVmZmVyX2NvdW50ICVkIGxlbiAlMDh4XG4iLAorCQkgIChpbnQpIGFyZ3MtPmJ1ZmZlcnNfcHRyLCBhcmdzLT5idWZmZXJfY291bnQsIGFyZ3MtPmJhdGNoX2xlbik7CisjZW5kaWYKKworCWlmIChhcmdzLT5idWZmZXJfY291bnQgPCAxKSB7CisJCURSTV9FUlJPUigiZXhlY2J1ZiB3aXRoICVkIGJ1ZmZlcnNcbiIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBDb3B5IGluIHRoZSBleGVjIGxpc3QgZnJvbSB1c2VybGFuZCAqLworCWV4ZWNfbGlzdCA9IGRybV9jYWxsb2Moc2l6ZW9mKCpleGVjX2xpc3QpLCBhcmdzLT5idWZmZXJfY291bnQsCisJCQkgICAgICAgRFJNX01FTV9EUklWRVIpOworCW9iamVjdF9saXN0ID0gZHJtX2NhbGxvYyhzaXplb2YoKm9iamVjdF9saXN0KSwgYXJncy0+YnVmZmVyX2NvdW50LAorCQkJCSBEUk1fTUVNX0RSSVZFUik7CisJaWYgKGV4ZWNfbGlzdCA9PSBOVUxMIHx8IG9iamVjdF9saXN0ID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXhlYyBvciBvYmplY3QgbGlzdCAiCisJCQkgICJmb3IgJWQgYnVmZmVyc1xuIiwKKwkJCSAgYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBwcmVfbXV0ZXhfZXJyOworCX0KKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihleGVjX2xpc3QsCisJCQkgICAgIChzdHJ1Y3QgZHJtX2k5MTVfcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKKwkJCSAgICAgKHVpbnRwdHJfdCkgYXJncy0+YnVmZmVyc19wdHIsCisJCQkgICAgIHNpemVvZigqZXhlY19saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJaWYgKHJldCAhPSAwKSB7CisJCURSTV9FUlJPUigiY29weSAlZCBleGVjIGVudHJpZXMgZmFpbGVkICVkXG4iLAorCQkJICBhcmdzLT5idWZmZXJfY291bnQsIHJldCk7CisJCWdvdG8gcHJlX211dGV4X2VycjsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwlpZiAoZGV2X3ByaXYtPm1tLndlZGdlZCkgeworCQlEUk1fRVJST1IoIkV4ZWNidWYgd2hpbGUgd2VkZ2VkXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChkZXZfcHJpdi0+bW0uc3VzcGVuZGVkKSB7CisJCURSTV9FUlJPUigiRXhlY2J1ZiB3aGlsZSBWVC1zd2l0Y2hlZC5cbiIpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBaZXJvIHRoZSBnbG9hYmwgZmx1c2gvaW52YWxpZGF0ZSBmbGFncy4gVGhlc2UKKwkgKiB3aWxsIGJlIG1vZGlmaWVkIGFzIGVhY2ggb2JqZWN0IGlzIGJvdW5kIHRvIHRoZQorCSAqIGd0dAorCSAqLworCWRldi0+aW52YWxpZGF0ZV9kb21haW5zID0gMDsKKwlkZXYtPmZsdXNoX2RvbWFpbnMgPSAwOworCisJLyogTG9vayB1cCBvYmplY3QgaGFuZGxlcyBhbmQgcGVyZm9ybSB0aGUgcmVsb2NhdGlvbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJncy0+YnVmZmVyX2NvdW50OyBpKyspIHsKKwkJb2JqZWN0X2xpc3RbaV0gPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsCisJCQkJCQkgICAgICAgZXhlY19saXN0W2ldLmhhbmRsZSk7CisJCWlmIChvYmplY3RfbGlzdFtpXSA9PSBOVUxMKSB7CisJCQlEUk1fRVJST1IoIkludmFsaWQgb2JqZWN0IGhhbmRsZSAlZCBhdCBpbmRleCAlZFxuIiwKKwkJCQkgICBleGVjX2xpc3RbaV0uaGFuZGxlLCBpKTsKKwkJCXJldCA9IC1FQkFERjsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJb2JqZWN0X2xpc3RbaV0tPnBlbmRpbmdfcmVhZF9kb21haW5zID0gMDsKKwkJb2JqZWN0X2xpc3RbaV0tPnBlbmRpbmdfd3JpdGVfZG9tYWluID0gMDsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9hbmRfcmVsb2NhdGUob2JqZWN0X2xpc3RbaV0sCisJCQkJCQkgICAgICAgZmlsZV9wcml2LAorCQkJCQkJICAgICAgICZleGVjX2xpc3RbaV0pOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIm9iamVjdCBiaW5kIGFuZCByZWxvY2F0ZSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCQlwaW5uZWQgPSBpICsgMTsKKwl9CisKKwkvKiBTZXQgdGhlIHBlbmRpbmcgcmVhZCBkb21haW5zIGZvciB0aGUgYmF0Y2ggYnVmZmVyIHRvIENPTU1BTkQgKi8KKwliYXRjaF9vYmogPSBvYmplY3RfbGlzdFthcmdzLT5idWZmZXJfY291bnQtMV07CisJYmF0Y2hfb2JqLT5wZW5kaW5nX3JlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOworCWJhdGNoX29iai0+cGVuZGluZ193cml0ZV9kb21haW4gPSAwOworCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqZWN0X2xpc3RbaV07CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkJaWYgKG9ial9wcml2LT5ndHRfc3BhY2UgPT0gTlVMTCkgeworCQkJLyogV2UgZXZpY3RlZCB0aGUgYnVmZmVyIGluIHRoZSBwcm9jZXNzIG9mIHZhbGlkYXRpbmcKKwkJCSAqIG91ciBzZXQgb2YgYnVmZmVycyBpbi4gIFdlIGNvdWxkIHRyeSB0byByZWNvdmVyIGJ5CisJCQkgKiBraWNraW5nIHRoZW0gZXZlcnl0aGluZyBvdXQgYW5kIHRyeWluZyBhZ2FpbiBmcm9tCisJCQkgKiB0aGUgc3RhcnQuCisJCQkgKi8KKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCisJCS8qIG1ha2Ugc3VyZSBhbGwgcHJldmlvdXMgbWVtb3J5IG9wZXJhdGlvbnMgaGF2ZSBwYXNzZWQgKi8KKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4ob2JqLAorCQkJCQkJIG9iai0+cGVuZGluZ19yZWFkX2RvbWFpbnMsCisJCQkJCQkgb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwkvKiBGbHVzaC9pbnZhbGlkYXRlIGNhY2hlcyBhbmQgY2hpcHNldCBidWZmZXIgKi8KKwlmbHVzaF9kb21haW5zID0gaTkxNV9nZW1fZGV2X3NldF9kb21haW4oZGV2KTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKworI2lmIFdBVENIX0NPSEVSRU5DWQorCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykgeworCQlpOTE1X2dlbV9vYmplY3RfY2hlY2tfY29oZXJlbmN5KG9iamVjdF9saXN0W2ldLAorCQkJCQkJZXhlY19saXN0W2ldLmhhbmRsZSk7CisJfQorI2VuZGlmCisKKwlleGVjX29mZnNldCA9IGV4ZWNfbGlzdFthcmdzLT5idWZmZXJfY291bnQgLSAxXS5vZmZzZXQ7CisKKyNpZiBXQVRDSF9FWEVDCisJaTkxNV9nZW1fZHVtcF9vYmplY3Qob2JqZWN0X2xpc3RbYXJncy0+YnVmZmVyX2NvdW50IC0gMV0sCisJCQkgICAgICBhcmdzLT5iYXRjaF9sZW4sCisJCQkgICAgICBfX2Z1bmNfXywKKwkJCSAgICAgIH4wKTsKKyNlbmRpZgorCisJKHZvaWQpaTkxNV9hZGRfcmVxdWVzdChkZXYsIGZsdXNoX2RvbWFpbnMpOworCisJLyogRXhlYyB0aGUgYmF0Y2hidWZmZXIgKi8KKwlyZXQgPSBpOTE1X2Rpc3BhdGNoX2dlbV9leGVjYnVmZmVyKGRldiwgYXJncywgZXhlY19vZmZzZXQpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJkaXNwYXRjaCBmYWlsZWQgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIGNvbW1hbmRzIGluIHRoZSBiYXRjaCBidWZmZXIgYXJlCisJICogZmluaXNoZWQgYmVmb3JlIHRoZSBpbnRlcnJ1cHQgZmlyZXMKKwkgKi8KKwlmbHVzaF9kb21haW5zID0gaTkxNV9yZXRpcmVfY29tbWFuZHMoZGV2KTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKworCS8qCisJICogR2V0IGEgc2Vxbm8gcmVwcmVzZW50aW5nIHRoZSBleGVjdXRpb24gb2YgdGhlIGN1cnJlbnQgYnVmZmVyLAorCSAqIHdoaWNoIHdlIGNhbiB3YWl0IG9uLiAgV2Ugd291bGQgbGlrZSB0byBtaXRpZ2F0ZSB0aGVzZSBpbnRlcnJ1cHRzLAorCSAqIGxpa2VseSBieSBvbmx5IGNyZWF0aW5nIHNlcW5vcyBvY2Nhc2lvbmFsbHkgKHNvIHRoYXQgd2UgaGF2ZQorCSAqICpzb21lKiBpbnRlcnJ1cHRzIHJlcHJlc2VudGluZyBjb21wbGV0aW9uIG9mIGJ1ZmZlcnMgdGhhdCB3ZSBjYW4KKwkgKiB3YWl0IG9uIHdoZW4gdHJ5aW5nIHRvIGNsZWFyIHVwIGd0dCBzcGFjZSkuCisJICovCisJc2Vxbm8gPSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgZmx1c2hfZG9tYWlucyk7CisJQlVHX09OKHNlcW5vID09IDApOworCWk5MTVfZmlsZV9wcml2LT5tbS5sYXN0X2dlbV9zZXFubyA9IHNlcW5vOworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9iamVjdF9saXN0W2ldOworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShvYmopOworCQlvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8gPSBzZXFubzsKKyNpZiBXQVRDSF9MUlUKKwkJRFJNX0lORk8oIiVzOiBtb3ZlIHRvIGV4ZWMgbGlzdCAlcFxuIiwgX19mdW5jX18sIG9iaik7CisjZW5kaWYKKwl9CisjaWYgV0FUQ0hfTFJVCisJaTkxNV9kdW1wX2xydShkZXYsIF9fZnVuY19fKTsKKyNlbmRpZgorCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCisJLyogQ29weSB0aGUgbmV3IGJ1ZmZlciBvZmZzZXRzIGJhY2sgdG8gdGhlIHVzZXIncyBleGVjIGxpc3QuICovCisJcmV0ID0gY29weV90b191c2VyKChzdHJ1Y3QgZHJtX2k5MTVfcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKKwkJCSAgICh1aW50cHRyX3QpIGFyZ3MtPmJ1ZmZlcnNfcHRyLAorCQkJICAgZXhlY19saXN0LAorCQkJICAgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1IoImZhaWxlZCB0byBjb3B5ICVkIGV4ZWMgZW50cmllcyAiCisJCQkgICJiYWNrIHRvIHVzZXIgKCVkKVxuIiwKKwkJCSAgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKK2VycjoKKwlpZiAob2JqZWN0X2xpc3QgIT0gTlVMTCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcGlubmVkOyBpKyspCisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqZWN0X2xpc3RbaV0pOworCisJCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iamVjdF9saXN0W2ldKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKK3ByZV9tdXRleF9lcnI6CisJZHJtX2ZyZWUob2JqZWN0X2xpc3QsIHNpemVvZigqb2JqZWN0X2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50LAorCQkgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGV4ZWNfbGlzdCwgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50LAorCQkgRFJNX01FTV9EUklWRVIpOworCisJcmV0dXJuIHJldDsKK30KKworaW50CitpOTE1X2dlbV9vYmplY3RfcGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1aW50MzJfdCBhbGlnbm1lbnQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHJldDsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKwlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKSB7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9iaW5kX3RvX2d0dChvYmosIGFsaWdubWVudCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJRFJNX0VSUk9SKCJGYWlsdXJlIHRvIGJpbmQ6ICVkIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJb2JqX3ByaXYtPnBpbl9jb3VudCsrOworCisJLyogSWYgdGhlIG9iamVjdCBpcyBub3QgYWN0aXZlIGFuZCBub3QgcGVuZGluZyBhIGZsdXNoLAorCSAqIHJlbW92ZSBpdCBmcm9tIHRoZSBpbmFjdGl2ZSBsaXN0CisJICovCisJaWYgKG9ial9wcml2LT5waW5fY291bnQgPT0gMSkgeworCQlhdG9taWNfaW5jKCZkZXYtPnBpbl9jb3VudCk7CisJCWF0b21pY19hZGQob2JqLT5zaXplLCAmZGV2LT5waW5fbWVtb3J5KTsKKwkJaWYgKCFvYmpfcHJpdi0+YWN0aXZlICYmCisJCSAgICAob2JqLT53cml0ZV9kb21haW4gJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQkgICBJOTE1X0dFTV9ET01BSU5fR1RUKSkgPT0gMCAmJgorCQkgICAgIWxpc3RfZW1wdHkoJm9ial9wcml2LT5saXN0KSkKKwkJCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5saXN0KTsKKwl9CisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2k5MTVfZ2VtX29iamVjdF91bnBpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKwlvYmpfcHJpdi0+cGluX2NvdW50LS07CisJQlVHX09OKG9ial9wcml2LT5waW5fY291bnQgPCAwKTsKKwlCVUdfT04ob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKTsKKworCS8qIElmIHRoZSBvYmplY3QgaXMgbm8gbG9uZ2VyIHBpbm5lZCwgYW5kIGlzCisJICogbmVpdGhlciBhY3RpdmUgbm9yIGJlaW5nIGZsdXNoZWQsIHRoZW4gc3RpY2sgaXQgb24KKwkgKiB0aGUgaW5hY3RpdmUgbGlzdAorCSAqLworCWlmIChvYmpfcHJpdi0+cGluX2NvdW50ID09IDApIHsKKwkJaWYgKCFvYmpfcHJpdi0+YWN0aXZlICYmCisJCSAgICAob2JqLT53cml0ZV9kb21haW4gJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQkgICBJOTE1X0dFTV9ET01BSU5fR1RUKSkgPT0gMCkKKwkJCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bGlzdCwKKwkJCQkgICAgICAgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KTsKKwkJYXRvbWljX2RlYygmZGV2LT5waW5fY291bnQpOworCQlhdG9taWNfc3ViKG9iai0+c2l6ZSwgJmRldi0+cGluX21lbW9yeSk7CisJfQorCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKK30KKworaW50CitpOTE1X2dlbV9waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9waW4gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkJhZCBoYW5kbGUgaW4gaTkxNV9nZW1fcGluX2lvY3RsKCk6ICVkXG4iLAorCQkJICBhcmdzLT5oYW5kbGUpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FQkFERjsKKwl9CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIGFyZ3MtPmFsaWdubWVudCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFhYWCAtIGZsdXNoIHRoZSBDUFUgY2FjaGVzIGZvciBwaW5uZWQgb2JqZWN0cworCSAqIGFzIHRoZSBYIHNlcnZlciBkb2Vzbid0IG1hbmFnZSBkb21haW5zIHlldAorCSAqLworCWlmIChvYmotPndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpIHsKKwkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKKwkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoKGRldik7CisJCW9iai0+d3JpdGVfZG9tYWluID0gMDsKKwl9CisJYXJncy0+b2Zmc2V0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiAwOworfQorCitpbnQKK2k5MTVfZ2VtX3VucGluX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9waW4gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkJhZCBoYW5kbGUgaW4gaTkxNV9nZW1fdW5waW5faW9jdGwoKTogJWRcbiIsCisJCQkgIGFyZ3MtPmhhbmRsZSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gLUVCQURGOworCX0KKworCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworaW50CitpOTE1X2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2J1c3kgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiQmFkIGhhbmRsZSBpbiBpOTE1X2dlbV9idXN5X2lvY3RsKCk6ICVkXG4iLAorCQkJICBhcmdzLT5oYW5kbGUpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FQkFERjsKKwl9CisKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJYXJncy0+YnVzeSA9IG9ial9wcml2LT5hY3RpdmU7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiAwOworfQorCitpbnQKK2k5MTVfZ2VtX3Rocm90dGxlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKyAgICByZXR1cm4gaTkxNV9nZW1fcmluZ190aHJvdHRsZShkZXYsIGZpbGVfcHJpdik7Cit9CisKK2ludCBpOTE1X2dlbV9pbml0X29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisKKwlvYmpfcHJpdiA9IGRybV9jYWxsb2MoMSwgc2l6ZW9mKCpvYmpfcHJpdiksIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAob2JqX3ByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIFdlJ3ZlIGp1c3QgYWxsb2NhdGVkIHBhZ2VzIGZyb20gdGhlIGtlcm5lbCwKKwkgKiBzbyB0aGV5J3ZlIGp1c3QgYmVlbiB3cml0dGVuIGJ5IHRoZSBDUFUgd2l0aAorCSAqIHplcm9zLiBUaGV5J2xsIG5lZWQgdG8gYmUgY2xmbHVzaGVkIGJlZm9yZSB3ZQorCSAqIHVzZSB0aGVtIHdpdGggdGhlIEdQVS4KKwkgKi8KKwlvYmotPndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CisJb2JqLT5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ1BVOworCisJb2JqX3ByaXYtPmFncF90eXBlID0gQUdQX1VTRVJfTUVNT1JZOworCisJb2JqLT5kcml2ZXJfcHJpdmF0ZSA9IG9ial9wcml2OworCW9ial9wcml2LT5vYmogPSBvYmo7CisJSU5JVF9MSVNUX0hFQUQoJm9ial9wcml2LT5saXN0KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJd2hpbGUgKG9ial9wcml2LT5waW5fY291bnQgPiAwKQorCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKworCWk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKKworCWRybV9mcmVlKG9ial9wcml2LT5wYWdlX2NwdV92YWxpZCwgMSwgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKG9iai0+ZHJpdmVyX3ByaXZhdGUsIDEsIERSTV9NRU1fRFJJVkVSKTsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fc2V0X2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkgICAgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkgICAgdWludDMyX3Qgd3JpdGVfZG9tYWluKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlpbnQgcmV0OworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnM7CisKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKG9iaiwgcmVhZF9kb21haW5zLCB3cml0ZV9kb21haW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZmx1c2hfZG9tYWlucyA9IGk5MTVfZ2VtX2Rldl9zZXRfZG9tYWluKG9iai0+ZGV2KTsKKworCWlmIChmbHVzaF9kb21haW5zICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKQorCQkodm9pZCkgaTkxNV9hZGRfcmVxdWVzdChkZXYsIGZsdXNoX2RvbWFpbnMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKiBVbmJpbmRzIGFsbCBvYmplY3RzIHRoYXQgYXJlIG9uIHRoZSBnaXZlbiBidWZmZXIgbGlzdC4gKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2V2aWN0X2Zyb21fbGlzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0OworCisJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisJCW9ial9wcml2ID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLAorCQkJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCisJCQkJCSAgICBsaXN0KTsKKwkJb2JqID0gb2JqX3ByaXYtPm9iajsKKworCQlpZiAob2JqX3ByaXYtPnBpbl9jb3VudCAhPSAwKSB7CisJCQlEUk1fRVJST1IoIlBpbm5lZCBvYmplY3QgaW4gdW5iaW5kIGxpc3RcbiIpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlEUk1fRVJST1IoIkVycm9yIHVuYmluZGluZyBvYmplY3QgaW4gTGVhdmVWVDogJWRcbiIsCisJCQkJICByZXQpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1faWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IHNlcW5vLCBjdXJfc2Vxbm8sIGxhc3Rfc2Vxbm87CisJaW50IHN0dWNrLCByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpZiAoZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCB8fCBkZXZfcHJpdi0+cmluZy5yaW5nX29iaiA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBIYWNrISAgRG9uJ3QgbGV0IGFueWJvZHkgZG8gZXhlY2J1ZiB3aGlsZSB3ZSBkb24ndCBjb250cm9sIHRoZSBjaGlwLgorCSAqIFdlIG5lZWQgdG8gcmVwbGFjZSB0aGlzIHdpdGggYSBzZW1hcGhvcmUsIG9yIHNvbWV0aGluZy4KKwkgKi8KKwlkZXZfcHJpdi0+bW0uc3VzcGVuZGVkID0gMTsKKworCS8qIENhbmNlbCB0aGUgcmV0aXJlIHdvcmsgaGFuZGxlciwgd2FpdCBmb3IgaXQgdG8gZmluaXNoIGlmIHJ1bm5pbmcKKwkgKi8KKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldl9wcml2LT5tbS5yZXRpcmVfd29yayk7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CisKKwkvKiBGbHVzaCB0aGUgR1BVIGFsb25nIHdpdGggYWxsIG5vbi1DUFUgd3JpdGUgZG9tYWlucworCSAqLworCWk5MTVfZ2VtX2ZsdXNoKGRldiwgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpLAorCQkgICAgICAgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKTsKKwlzZXFubyA9IGk5MTVfYWRkX3JlcXVlc3QoZGV2LCB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQlJOTE1X0dFTV9ET01BSU5fR1RUKSk7CisKKwlpZiAoc2Vxbm8gPT0gMCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vID0gc2Vxbm87CisJbGFzdF9zZXFubyA9IDA7CisJc3R1Y2sgPSAwOworCWZvciAoOzspIHsKKwkJY3VyX3NlcW5vID0gaTkxNV9nZXRfZ2VtX3NlcW5vKGRldik7CisJCWlmIChpOTE1X3NlcW5vX3Bhc3NlZChjdXJfc2Vxbm8sIHNlcW5vKSkKKwkJCWJyZWFrOworCQlpZiAobGFzdF9zZXFubyA9PSBjdXJfc2Vxbm8pIHsKKwkJCWlmIChzdHVjaysrID4gMTAwKSB7CisJCQkJRFJNX0VSUk9SKCJoYXJkd2FyZSB3ZWRnZWRcbiIpOworCQkJCWRldl9wcml2LT5tbS53ZWRnZWQgPSAxOworCQkJCURSTV9XQUtFVVAoJmRldl9wcml2LT5pcnFfcXVldWUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCW1zbGVlcCgxMCk7CisJCWxhc3Rfc2Vxbm8gPSBjdXJfc2Vxbm87CisJfQorCWRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyA9IDA7CisKKwlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2KTsKKworCS8qIEFjdGl2ZSBhbmQgZmx1c2hpbmcgc2hvdWxkIG5vdyBiZSBlbXB0eSBhcyB3ZSd2ZQorCSAqIHdhaXRlZCBmb3IgYSBzZXF1ZW5jZSBoaWdoZXIgdGhhbiBhbnkgcGVuZGluZyBleGVjYnVmZmVyCisJICovCisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CisKKwkvKiBSZXF1ZXN0IHNob3VsZCBub3cgYmUgZW1wdHkgYXMgd2UndmUgYWxzbyB3YWl0ZWQKKwkgKiBmb3IgdGhlIGxhc3QgcmVxdWVzdCBpbiB0aGUgbGlzdAorCSAqLworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpOworCisJLyogTW92ZSBhbGwgYnVmZmVycyBvdXQgb2YgdGhlIEdUVC4gKi8KKwlyZXQgPSBpOTE1X2dlbV9ldmljdF9mcm9tX2xpc3QoZGV2LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOworCWlmIChyZXQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiByZXQ7CisJfQorCisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpOworCisJaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1faW5pdF9od3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IHJldDsKKworCS8qIElmIHdlIG5lZWQgYSBwaHlzaWNhbCBhZGRyZXNzIGZvciB0aGUgc3RhdHVzIHBhZ2UsIGl0J3MgYWxyZWFkeQorCSAqIGluaXRpYWxpemVkIGF0IGRyaXZlciBsb2FkIHRpbWUuCisJICovCisJaWYgKCFJOTE1X05FRURfR0ZYX0hXUyhkZXYpKQorCQlyZXR1cm4gMDsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2FsbG9jKGRldiwgNDA5Nik7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIHN0YXR1cyBwYWdlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlvYmpfcHJpdi0+YWdwX3R5cGUgPSBBR1BfVVNFUl9DQUNIRURfTUVNT1JZOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIDQwOTYpOworCWlmIChyZXQgIT0gMCkgeworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKworCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9IGttYXAob2JqX3ByaXYtPnBhZ2VfbGlzdFswXSk7CisJaWYgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIG1hcCBzdGF0dXMgcGFnZS5cbiIpOworCQltZW1zZXQoJmRldl9wcml2LT5od3NfbWFwLCAwLCBzaXplb2YoZGV2X3ByaXYtPmh3c19tYXApKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldl9wcml2LT5od3Nfb2JqID0gb2JqOworCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7CisJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKKwlJOTE1X1JFQUQoSFdTX1BHQSk7IC8qIHBvc3RpbmcgcmVhZCAqLworCURSTV9ERUJVRygiaHdzIG9mZnNldDogMHglMDh4XG4iLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9pbml0X3JpbmdidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IHJldDsKKwl1MzIgaGVhZDsKKworCXJldCA9IGk5MTVfZ2VtX2luaXRfaHdzKGRldik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfYWxsb2MoZGV2LCAxMjggKiAxMDI0KTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgcmluZ2J1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgNDA5Nik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogU2V0IHVwIHRoZSBrZXJuZWwgbWFwcGluZyBmb3IgdGhlIHJpbmcuICovCisJZGV2X3ByaXYtPnJpbmcuU2l6ZSA9IG9iai0+c2l6ZTsKKwlkZXZfcHJpdi0+cmluZy50YWlsX21hc2sgPSBvYmotPnNpemUgLSAxOworCisJZGV2X3ByaXYtPnJpbmcubWFwLm9mZnNldCA9IGRldi0+YWdwLT5iYXNlICsgb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CisJZGV2X3ByaXYtPnJpbmcubWFwLnNpemUgPSBvYmotPnNpemU7CisJZGV2X3ByaXYtPnJpbmcubWFwLnR5cGUgPSAwOworCWRldl9wcml2LT5yaW5nLm1hcC5mbGFncyA9IDA7CisJZGV2X3ByaXYtPnJpbmcubWFwLm10cnIgPSAwOworCisJZHJtX2NvcmVfaW9yZW1hcF93YygmZGV2X3ByaXYtPnJpbmcubWFwLCBkZXYpOworCWlmIChkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbWFwIHJpbmdidWZmZXIuXG4iKTsKKwkJbWVtc2V0KCZkZXZfcHJpdi0+cmluZywgMCwgc2l6ZW9mKGRldl9wcml2LT5yaW5nKSk7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXZfcHJpdi0+cmluZy5yaW5nX29iaiA9IG9iajsKKwlkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0ID0gZGV2X3ByaXYtPnJpbmcubWFwLmhhbmRsZTsKKworCS8qIFN0b3AgdGhlIHJpbmcgaWYgaXQncyBydW5uaW5nLiAqLworCUk5MTVfV1JJVEUoUFJCMF9DVEwsIDApOworCUk5MTVfV1JJVEUoUFJCMF9UQUlMLCAwKTsKKwlJOTE1X1dSSVRFKFBSQjBfSEVBRCwgMCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSByaW5nLiAqLworCUk5MTVfV1JJVEUoUFJCMF9TVEFSVCwgb2JqX3ByaXYtPmd0dF9vZmZzZXQpOworCWhlYWQgPSBJOTE1X1JFQUQoUFJCMF9IRUFEKSAmIEhFQURfQUREUjsKKworCS8qIEc0NSByaW5nIGluaXRpYWxpemF0aW9uIGZhaWxzIHRvIHJlc2V0IGhlYWQgdG8gemVybyAqLworCWlmIChoZWFkICE9IDApIHsKKwkJRFJNX0VSUk9SKCJSaW5nIGhlYWQgbm90IHJlc2V0IHRvIHplcm8gIgorCQkJICAiY3RsICUwOHggaGVhZCAlMDh4IHRhaWwgJTA4eCBzdGFydCAlMDh4XG4iLAorCQkJICBJOTE1X1JFQUQoUFJCMF9DVEwpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9IRUFEKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfVEFJTCksCisJCQkgIEk5MTVfUkVBRChQUkIwX1NUQVJUKSk7CisJCUk5MTVfV1JJVEUoUFJCMF9IRUFELCAwKTsKKworCQlEUk1fRVJST1IoIlJpbmcgaGVhZCBmb3JjZWQgdG8gemVybyAiCisJCQkgICJjdGwgJTA4eCBoZWFkICUwOHggdGFpbCAlMDh4IHN0YXJ0ICUwOHhcbiIsCisJCQkgIEk5MTVfUkVBRChQUkIwX0NUTCksCisJCQkgIEk5MTVfUkVBRChQUkIwX0hFQUQpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9UQUlMKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfU1RBUlQpKTsKKwl9CisKKwlJOTE1X1dSSVRFKFBSQjBfQ1RMLAorCQkgICAoKG9iai0+c2l6ZSAtIDQwOTYpICYgUklOR19OUl9QQUdFUykgfAorCQkgICBSSU5HX05PX1JFUE9SVCB8CisJCSAgIFJJTkdfVkFMSUQpOworCisJaGVhZCA9IEk5MTVfUkVBRChQUkIwX0hFQUQpICYgSEVBRF9BRERSOworCisJLyogSWYgdGhlIGhlYWQgaXMgc3RpbGwgbm90IHplcm8sIHRoZSByaW5nIGlzIGRlYWQgKi8KKwlpZiAoaGVhZCAhPSAwKSB7CisJCURSTV9FUlJPUigiUmluZyBpbml0aWFsaXphdGlvbiBmYWlsZWQgIgorCQkJICAiY3RsICUwOHggaGVhZCAlMDh4IHRhaWwgJTA4eCBzdGFydCAlMDh4XG4iLAorCQkJICBJOTE1X1JFQUQoUFJCMF9DVEwpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9IRUFEKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfVEFJTCksCisJCQkgIEk5MTVfUkVBRChQUkIwX1NUQVJUKSk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFVwZGF0ZSBvdXIgY2FjaGUgb2YgdGhlIHJpbmcgc3RhdGUgKi8KKwlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoZGV2X3ByaXYtPnJpbmcucmluZ19vYmogPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZHJtX2NvcmVfaW9yZW1hcGZyZWUoJmRldl9wcml2LT5yaW5nLm1hcCwgZGV2KTsKKworCWk5MTVfZ2VtX29iamVjdF91bnBpbihkZXZfcHJpdi0+cmluZy5yaW5nX29iaik7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZGV2X3ByaXYtPnJpbmcucmluZ19vYmopOworCWRldl9wcml2LT5yaW5nLnJpbmdfb2JqID0gTlVMTDsKKwltZW1zZXQoJmRldl9wcml2LT5yaW5nLCAwLCBzaXplb2YoZGV2X3ByaXYtPnJpbmcpKTsKKworCWlmIChkZXZfcHJpdi0+aHdzX29iaiAhPSBOVUxMKSB7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gZGV2X3ByaXYtPmh3c19vYmo7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkJa3VubWFwKG9ial9wcml2LT5wYWdlX2xpc3RbMF0pOworCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJZGV2X3ByaXYtPmh3c19vYmogPSBOVUxMOworCQltZW1zZXQoJmRldl9wcml2LT5od3NfbWFwLCAwLCBzaXplb2YoZGV2X3ByaXYtPmh3c19tYXApKTsKKwkJZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID0gTlVMTDsKKworCQkvKiBXcml0ZSBoaWdoIGFkZHJlc3MgaW50byBIV1NfUEdBIHdoZW4gZGlzYWJsaW5nLiAqLworCQlJOTE1X1dSSVRFKEhXU19QR0EsIDB4MWZmZmYwMDApOworCX0KK30KKworaW50CitpOTE1X2dlbV9lbnRlcnZ0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJaWYgKGRldl9wcml2LT5tbS53ZWRnZWQpIHsKKwkJRFJNX0VSUk9SKCJSZWVuYWJsaW5nIHdlZGdlZCBoYXJkd2FyZSwgZ29vZCBsdWNrXG4iKTsKKwkJZGV2X3ByaXYtPm1tLndlZGdlZCA9IDA7CisJfQorCisJcmV0ID0gaTkxNV9nZW1faW5pdF9yaW5nYnVmZmVyKGRldik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKTsKKwlkZXZfcHJpdi0+bW0uc3VzcGVuZGVkID0gMDsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWRybV9pcnFfaW5zdGFsbChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAoraTkxNV9nZW1fbGVhdmV2dF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGk5MTVfZ2VtX2lkbGUoZGV2KTsKKwlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZAoraTkxNV9nZW1fbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGk5MTVfZ2VtX2lkbGUoZGV2KTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1IoImZhaWxlZCB0byBpZGxlIGhhcmR3YXJlOiAlZFxuIiwgcmV0KTsKK30KKwordm9pZAoraTkxNV9nZW1fbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KTsKKwlJTklUX0RFTEFZRURfV09SSygmZGV2X3ByaXYtPm1tLnJldGlyZV93b3JrLAorCQkJICBpOTE1X2dlbV9yZXRpcmVfd29ya19oYW5kbGVyKTsKKwlJTklUX1dPUksoJmRldl9wcml2LT5tbS52Ymxhbmtfd29yaywKKwkJICBpOTE1X2dlbV92Ymxhbmtfd29ya19oYW5kbGVyKTsKKwlkZXZfcHJpdi0+bW0ubmV4dF9nZW1fc2Vxbm8gPSAxOworCisJaTkxNV9nZW1fZGV0ZWN0X2JpdF82X3N3aXp6bGUoZGV2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMWMwODgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEtlaXRoIFBhY2thcmQgPGtlaXRocEBrZWl0aHAuY29tPgorICoKKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworI2lmIFdBVENIX0lOQUNUSVZFCit2b2lkCitpOTE1X3ZlcmlmeV9pbmFjdGl2ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QsIGxpc3QpIHsKKwkJb2JqID0gb2JqX3ByaXYtPm9iajsKKwkJaWYgKG9ial9wcml2LT5waW5fY291bnQgfHwgb2JqX3ByaXYtPmFjdGl2ZSB8fAorCQkgICAgKG9iai0+d3JpdGVfZG9tYWluICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVIHwKKwkJCQkJICAgSTkxNV9HRU1fRE9NQUlOX0dUVCkpKQorCQkJRFJNX0VSUk9SKCJpbmFjdGl2ZSAlcCAocCAlZCBhICVkIHcgJXgpICAlczolZFxuIiwKKwkJCQkgIG9iaiwKKwkJCQkgIG9ial9wcml2LT5waW5fY291bnQsIG9ial9wcml2LT5hY3RpdmUsCisJCQkJICBvYmotPndyaXRlX2RvbWFpbiwgZmlsZSwgbGluZSk7CisJfQorfQorI2VuZGlmIC8qIFdBVENIX0lOQUNUSVZFICovCisKKworI2lmIFdBVENIX0JVRiB8IFdBVENIX0VYRUMgfCBXQVRDSF9QV1JJVEUKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9kdW1wX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBlbmQsCisJCSAgIHVpbnQzMl90IGJpYXMsIHVpbnQzMl90IG1hcmspCit7CisJdWludDMyX3QgKm1lbSA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwlpbnQgaTsKKwlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSA0KQorCQlEUk1fSU5GTygiJTA4eDogJTA4eCVzXG4iLAorCQkJICAoaW50KSAoYmlhcyArIGkpLCBtZW1baSAvIDRdLAorCQkJICAoYmlhcyArIGkgPT0gbWFyaykgPyAiICoqKioqKioqIiA6ICIiKTsKKwlrdW5tYXBfYXRvbWljKG1lbSwgS01fVVNFUjApOworCS8qIGdpdmUgc3lzbG9nIHRpbWUgdG8gY2F0Y2ggdXAgKi8KKwltc2xlZXAoMSk7Cit9CisKK3ZvaWQKK2k5MTVfZ2VtX2R1bXBfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgbGVuLAorCQkgICAgIGNvbnN0IGNoYXIgKndoZXJlLCB1aW50MzJfdCBtYXJrKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHBhZ2U7CisKKwlEUk1fSU5GTygiJXM6IG9iamVjdCBhdCBvZmZzZXQgJTA4eFxuIiwgd2hlcmUsIG9ial9wcml2LT5ndHRfb2Zmc2V0KTsKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgKGxlbiArIFBBR0VfU0laRS0xKSAvIFBBR0VfU0laRTsgcGFnZSsrKSB7CisJCWludCBwYWdlX2xlbiwgY2h1bmssIGNodW5rX2xlbjsKKworCQlwYWdlX2xlbiA9IGxlbiAtIHBhZ2UgKiBQQUdFX1NJWkU7CisJCWlmIChwYWdlX2xlbiA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuID0gUEFHRV9TSVpFOworCisJCWZvciAoY2h1bmsgPSAwOyBjaHVuayA8IHBhZ2VfbGVuOyBjaHVuayArPSAxMjgpIHsKKwkJCWNodW5rX2xlbiA9IHBhZ2VfbGVuIC0gY2h1bms7CisJCQlpZiAoY2h1bmtfbGVuID4gMTI4KQorCQkJCWNodW5rX2xlbiA9IDEyODsKKwkJCWk5MTVfZ2VtX2R1bXBfcGFnZShvYmpfcHJpdi0+cGFnZV9saXN0W3BhZ2VdLAorCQkJCQkgICBjaHVuaywgY2h1bmsgKyBjaHVua19sZW4sCisJCQkJCSAgIG9ial9wcml2LT5ndHRfb2Zmc2V0ICsKKwkJCQkJICAgcGFnZSAqIFBBR0VfU0laRSwKKwkJCQkJICAgbWFyayk7CisJCX0KKwl9Cit9CisjZW5kaWYKKworI2lmIFdBVENIX0xSVQordm9pZAoraTkxNV9kdW1wX2xydShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICp3aGVyZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QJCSpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QJKm9ial9wcml2OworCisJRFJNX0lORk8oImFjdGl2ZSBsaXN0ICVzIHtcbiIsIHdoZXJlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlEUk1fSU5GTygiICAgICVwOiAlMDh4XG4iLCBvYmpfcHJpdiwKKwkJCSBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCX0KKwlEUk1fSU5GTygifVxuIik7CisJRFJNX0lORk8oImZsdXNoaW5nIGxpc3QgJXMge1xuIiwgd2hlcmUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwKKwkJCSAgICBsaXN0KQorCXsKKwkJRFJNX0lORk8oIiAgICAlcDogJTA4eFxuIiwgb2JqX3ByaXYsCisJCQkgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKwl9CisJRFJNX0lORk8oIn1cbiIpOworCURSTV9JTkZPKCJpbmFjdGl2ZSAlcyB7XG4iLCB3aGVyZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0LCBsaXN0KSB7CisJCURSTV9JTkZPKCIgICAgJXA6ICUwOHhcbiIsIG9ial9wcml2LAorCQkJIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJfQorCURSTV9JTkZPKCJ9XG4iKTsKK30KKyNlbmRpZgorCisKKyNpZiBXQVRDSF9DT0hFUkVOQ1kKK3ZvaWQKK2k5MTVfZ2VtX29iamVjdF9jaGVja19jb2hlcmVuY3koc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBoYW5kbGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHBhZ2U7CisJdWludDMyX3QgKmd0dF9tYXBwaW5nOworCXVpbnQzMl90ICpiYWNraW5nX21hcCA9IE5VTEw7CisJaW50IGJhZF9jb3VudCA9IDA7CisKKwlEUk1fSU5GTygiJXM6IGNoZWNraW5nIGNvaGVyZW5jeSBvZiBvYmplY3QgJXBAMHglMDh4ICglZCwgJWRrYik6XG4iLAorCQkgX19mdW5jX18sIG9iaiwgb2JqX3ByaXYtPmd0dF9vZmZzZXQsIGhhbmRsZSwKKwkJIG9iai0+c2l6ZSAvIDEwMjQpOworCisJZ3R0X21hcHBpbmcgPSBpb3JlbWFwKGRldi0+YWdwLT5iYXNlICsgb2JqX3ByaXYtPmd0dF9vZmZzZXQsCisJCQkgICAgICBvYmotPnNpemUpOworCWlmIChndHRfbWFwcGluZyA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCBHVFQgc3BhY2VcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChwYWdlID0gMDsgcGFnZSA8IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsgcGFnZSsrKSB7CisJCWludCBpOworCisJCWJhY2tpbmdfbWFwID0ga21hcF9hdG9taWMob2JqX3ByaXYtPnBhZ2VfbGlzdFtwYWdlXSwgS01fVVNFUjApOworCisJCWlmIChiYWNraW5nX21hcCA9PSBOVUxMKSB7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byBtYXAgYmFja2luZyBwYWdlXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRSAvIDQ7IGkrKykgeworCQkJdWludDMyX3QgY3B1dmFsID0gYmFja2luZ19tYXBbaV07CisJCQl1aW50MzJfdCBndHR2YWwgPSByZWFkbChndHRfbWFwcGluZyArCisJCQkJCQlwYWdlICogMTAyNCArIGkpOworCisJCQlpZiAoY3B1dmFsICE9IGd0dHZhbCkgeworCQkJCURSTV9JTkZPKCJpbmNvaGVyZW50IENQVSB2cyBHUFUgYXQgMHglMDh4OiAiCisJCQkJCSAiMHglMDh4IHZzIDB4JTA4eFxuIiwKKwkJCQkJIChpbnQpKG9ial9wcml2LT5ndHRfb2Zmc2V0ICsKKwkJCQkJICAgICAgIHBhZ2UgKiBQQUdFX1NJWkUgKyBpICogNCksCisJCQkJCSBjcHV2YWwsIGd0dHZhbCk7CisJCQkJaWYgKGJhZF9jb3VudCsrID49IDgpIHsKKwkJCQkJRFJNX0lORk8oIi4uLlxuIik7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0KKwkJfQorCQlrdW5tYXBfYXRvbWljKGJhY2tpbmdfbWFwLCBLTV9VU0VSMCk7CisJCWJhY2tpbmdfbWFwID0gTlVMTDsKKwl9CisKKyBvdXQ6CisJaWYgKGJhY2tpbmdfbWFwICE9IE5VTEwpCisJCWt1bm1hcF9hdG9taWMoYmFja2luZ19tYXAsIEtNX1VTRVIwKTsKKwlpb3VubWFwKGd0dF9tYXBwaW5nKTsKKworCS8qIGdpdmUgc3lzbG9nIHRpbWUgdG8gY2F0Y2ggdXAgKi8KKwltc2xlZXAoMSk7CisKKwkvKiBEaXJlY3RseSBmbHVzaCB0aGUgb2JqZWN0LCBzaW5jZSB3ZSBqdXN0IGxvYWRlZCB2YWx1ZXMgd2l0aCB0aGUgQ1BVCisJICogZnJvbSB0aGUgYmFja2luZyBwYWdlcyBhbmQgd2UgZG9uJ3Qgd2FudCB0byBkaXN0dXJiIHRoZSBjYWNoZQorCSAqIG1hbmFnZW1lbnQgdGhhdCB3ZSdyZSB0cnlpbmcgdG8gb2JzZXJ2ZS4KKwkgKi8KKworCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Byb2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWQ0MTYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcHJvYy5jCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKiAgICBLZWl0aCBQYWNrYXJkIDxrZWl0aHBAa2VpdGhwLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fYWN0aXZlX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCQlpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgbGVuID0gMDsKKworCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgeworCQkqZW9mID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOworCSplb2YgPSAwOworCURSTV9QUk9DX1BSSU5UKCJBY3RpdmU6XG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CisJCWlmIChvYmotPm5hbWUpIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCisJCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0gZWxzZSB7CisJCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsCisJCQkJICAgICAgIG9iaiwKKwkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCQl9CisJfQorCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX2ZsdXNoaW5nX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCQkgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkZsdXNoaW5nOlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CisJCWlmIChvYmotPm5hbWUpIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCisJCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0gZWxzZSB7CisJCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsIG9iaiwKKwkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCQl9CisJfQorCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX2luYWN0aXZlX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCQkgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkluYWN0aXZlOlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CisJCWlmIChvYmotPm5hbWUpIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCisJCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0gZWxzZSB7CisJCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsIG9iaiwKKwkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCQl9CisJfQorCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX3JlcXVlc3RfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJCSBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqZ2VtX3JlcXVlc3Q7CisJaW50IGxlbiA9IDA7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKwlEUk1fUFJPQ19QUklOVCgiUmVxdWVzdDpcbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2VtX3JlcXVlc3QsICZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlEUk1fUFJPQ19QUklOVCgiICAgICVkIEAgJWQgJTA4eFxuIiwKKwkJCSAgICAgICBnZW1fcmVxdWVzdC0+c2Vxbm8sCisJCQkgICAgICAgKGludCkgKGppZmZpZXMgLSBnZW1fcmVxdWVzdC0+ZW1pdHRlZF9qaWZmaWVzKSwKKwkJCSAgICAgICBnZW1fcmVxdWVzdC0+Zmx1c2hfZG9tYWlucyk7CisJfQorCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX3NlcW5vX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSAgICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkN1cnJlbnQgc2VxdWVuY2U6ICVkXG4iLCBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSk7CisJRFJNX1BST0NfUFJJTlQoIldhaXRlciBzZXF1ZW5jZTogICVkXG4iLAorCQkgICAgICAgZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKKwlEUk1fUFJPQ19QUklOVCgiSVJRIHNlcXVlbmNlOiAgICAgJWRcbiIsIGRldl9wcml2LT5tbS5pcnFfZ2VtX3NlcW5vKTsKKwlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKKwkJcmV0dXJuIHJlcXVlc3Q7CisJKmVvZiA9IDE7CisJcmV0dXJuIGxlbiAtIG9mZnNldDsKK30KKworCitzdGF0aWMgaW50IGk5MTVfaW50ZXJydXB0X2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSAgICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkludGVycnVwdCBlbmFibGU6ICAgICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoSUVSKSk7CisJRFJNX1BST0NfUFJJTlQoIkludGVycnVwdCBpZGVudGl0eTogICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoSUlSKSk7CisJRFJNX1BST0NfUFJJTlQoIkludGVycnVwdCBtYXNrOiAgICAgICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoSU1SKSk7CisJRFJNX1BST0NfUFJJTlQoIlBpcGUgQSBzdGF0OiAgICAgICAgICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoUElQRUFTVEFUKSk7CisJRFJNX1BST0NfUFJJTlQoIlBpcGUgQiBzdGF0OiAgICAgICAgICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoUElQRUJTVEFUKSk7CisJRFJNX1BST0NfUFJJTlQoIkludGVycnVwdHMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkgICAgICAgYXRvbWljX3JlYWQoJmRldl9wcml2LT5pcnFfcmVjZWl2ZWQpKTsKKwlEUk1fUFJPQ19QUklOVCgiQ3VycmVudCBzZXF1ZW5jZTogICAgJWRcbiIsCisJCSAgICAgICBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSk7CisJRFJNX1BST0NfUFJJTlQoIldhaXRlciBzZXF1ZW5jZTogICAgICVkXG4iLAorCQkgICAgICAgZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKKwlEUk1fUFJPQ19QUklOVCgiSVJRIHNlcXVlbmNlOiAgICAgICAgJWRcbiIsCisJCSAgICAgICBkZXZfcHJpdi0+bW0uaXJxX2dlbV9zZXFubyk7CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3Byb2NfbGlzdCB7CisJLyoqIGZpbGUgbmFtZSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisJLyoqIHByb2MgY2FsbGJhY2sqLworCWludCAoKmYpIChjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOworfSBpOTE1X2dlbV9wcm9jX2xpc3RbXSA9IHsKKwl7Imk5MTVfZ2VtX2FjdGl2ZSIsIGk5MTVfZ2VtX2FjdGl2ZV9pbmZvfSwKKwl7Imk5MTVfZ2VtX2ZsdXNoaW5nIiwgaTkxNV9nZW1fZmx1c2hpbmdfaW5mb30sCisJeyJpOTE1X2dlbV9pbmFjdGl2ZSIsIGk5MTVfZ2VtX2luYWN0aXZlX2luZm99LAorCXsiaTkxNV9nZW1fcmVxdWVzdCIsIGk5MTVfZ2VtX3JlcXVlc3RfaW5mb30sCisJeyJpOTE1X2dlbV9zZXFubyIsIGk5MTVfZ2VtX3NlcW5vX2luZm99LAorCXsiaTkxNV9nZW1faW50ZXJydXB0IiwgaTkxNV9pbnRlcnJ1cHRfaW5mb30sCit9OworCisjZGVmaW5lIEk5MTVfR0VNX1BST0NfRU5UUklFUyBBUlJBWV9TSVpFKGk5MTVfZ2VtX3Byb2NfbGlzdCkKKworaW50IGk5MTVfZ2VtX3Byb2NfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBJOTE1X0dFTV9QUk9DX0VOVFJJRVM7IGkrKykgeworCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShpOTE1X2dlbV9wcm9jX2xpc3RbaV0ubmFtZSwKKwkJCQkJU19JRlJFRyB8IFNfSVJVR08sIG1pbm9yLT5kZXZfcm9vdCk7CisJCWlmICghZW50KSB7CisJCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL3Byb2MvZHJpLy4uLi8lc1xuIiwKKwkJCQkgIGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5uYW1lKTsKKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQkJcmVtb3ZlX3Byb2NfZW50cnkoaTkxNV9nZW1fcHJvY19saXN0W2ldLm5hbWUsCisJCQkJCQkgIG1pbm9yLT5kZXZfcm9vdCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZW50LT5yZWFkX3Byb2MgPSBpOTE1X2dlbV9wcm9jX2xpc3RbaV0uZjsKKwkJZW50LT5kYXRhID0gbWlub3I7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGk5MTVfZ2VtX3Byb2NfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlpbnQgaTsKKworCWlmICghbWlub3ItPmRldl9yb290KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9HRU1fUFJPQ19FTlRSSUVTOyBpKyspCisJCXJlbW92ZV9wcm9jX2VudHJ5KGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5uYW1lLCBtaW5vci0+ZGV2X3Jvb3QpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGI4NWFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKKy8qKiBAZmlsZSBpOTE1X2dlbV90aWxpbmcuYworICoKKyAqIFN1cHBvcnQgZm9yIG1hbmFnaW5nIHRpbGluZyBzdGF0ZSBvZiBidWZmZXIgb2JqZWN0cy4KKyAqCisgKiBUaGUgaWRlYSBiZWhpbmQgdGlsaW5nIGlzIHRvIGluY3JlYXNlIGNhY2hlIGhpdCByYXRlcyBieSByZWFycmFuZ2luZworICogcGl4ZWwgZGF0YSBzbyB0aGF0IGEgZ3JvdXAgb2YgcGl4ZWwgYWNjZXNzZXMgYXJlIGluIHRoZSBzYW1lIGNhY2hlbGluZS4KKyAqIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGZyb20gZG9pbmcgdGhpcyBvbiB0aGUgYmFjay9kZXB0aCBidWZmZXIgYXJlIG9uCisgKiB0aGUgb3JkZXIgb2YgMzAlLgorICoKKyAqIEludGVsIGFyY2hpdGVjdHVyZXMgbWFrZSB0aGlzIHNvbWV3aGF0IG1vcmUgY29tcGxpY2F0ZWQsIHRob3VnaCwgYnkKKyAqIGFkanVzdG1lbnRzIG1hZGUgdG8gYWRkcmVzc2luZyBvZiBkYXRhIHdoZW4gdGhlIG1lbW9yeSBpcyBpbiBpbnRlcmxlYXZlZAorICogbW9kZSAobWF0Y2hlZCBwYWlycyBvZiBESU1NUykgdG8gaW1wcm92ZSBtZW1vcnkgYmFuZHdpZHRoLgorICogRm9yIGludGVybGVhdmVkIG1lbW9yeSwgdGhlIENQVSBzZW5kcyBldmVyeSBzZXF1ZW50aWFsIDY0IGJ5dGVzCisgKiB0byBhbiBhbHRlcm5hdGUgbWVtb3J5IGNoYW5uZWwgc28gaXQgY2FuIGdldCB0aGUgYmFuZHdpZHRoIGZyb20gYm90aC4KKyAqCisgKiBUaGUgR1BVIGFsc28gcmVhcnJhbmdlcyBpdHMgYWNjZXNzZXMgZm9yIGluY3JlYXNlZCBiYW5kd2lkdGggdG8gaW50ZXJsZWF2ZWQKKyAqIG1lbW9yeSwgYW5kIGl0IG1hdGNoZXMgd2hhdCB0aGUgQ1BVIGRvZXMgZm9yIG5vbi10aWxlZC4gIEhvd2V2ZXIsIHdoZW4gdGlsZWQKKyAqIGl0IGRvZXMgaXQgYSBsaXR0bGUgZGlmZmVyZW50bHksIHNpbmNlIG9uZSB3YWxrcyBhZGRyZXNzZXMgbm90IGp1c3QgaW4gdGhlCisgKiBYIGRpcmVjdGlvbiBidXQgYWxzbyBZLiAgU28sIGFsb25nIHdpdGggYWx0ZXJuYXRpbmcgY2hhbm5lbHMgd2hlbiBiaXQKKyAqIDYgb2YgdGhlIGFkZHJlc3MgZmxpcHMsIGl0IGFsc28gYWx0ZXJuYXRlcyB3aGVuIG90aGVyIGJpdHMgZmxpcCAtLSAgQml0cyA5CisgKiAoZXZlcnkgNTEyIGJ5dGVzLCBhbiBYIHRpbGUgc2NhbmxpbmUpIGFuZCAxMCAoZXZlcnkgdHdvIFggdGlsZSBzY2FubGluZXMpCisgKiBhcmUgY29tbW9uIHRvIGJvdGggdGhlIDkxNSBhbmQgOTY1LWNsYXNzIGhhcmR3YXJlLgorICoKKyAqIFRoZSBDUFUgYWxzbyBzb21ldGltZXMgWE9ScyBpbiBoaWdoZXIgYml0cyBhcyB3ZWxsLCB0byBpbXByb3ZlCisgKiBiYW5kd2lkdGggZG9pbmcgc3RyaWRlZCBhY2Nlc3MgbGlrZSB3ZSBkbyBzbyBmcmVxdWVudGx5IGluIGdyYXBoaWNzLiAgVGhpcworICogaXMgY2FsbGVkICJDaGFubmVsIFhPUiBSYW5kb21pemF0aW9uIiBpbiB0aGUgTUNIIGRvY3VtZW50YXRpb24uICBUaGUgcmVzdWx0CisgKiBpcyB0aGF0IHRoZSBDUFUgaXMgWE9SaW5nIGluIGVpdGhlciBiaXQgMTEgb3IgYml0IDE3IHRvIGJpdCA2IG9mIGl0cyBhZGRyZXNzCisgKiBkZWNvZGUuCisgKgorICogQWxsIG9mIHRoaXMgYml0IDYgWE9SaW5nIGhhcyBhbiBlZmZlY3Qgb24gb3VyIG1lbW9yeSBtYW5hZ2VtZW50LAorICogYXMgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgM2QgZHJpdmVyIGNhbiBjb3JyZWN0bHkgYWRkcmVzcyBvYmplY3QKKyAqIGNvbnRlbnRzLgorICoKKyAqIElmIHdlIGRvbid0IGhhdmUgaW50ZXJsZWF2ZWQgbWVtb3J5LCBhbGwgdGlsaW5nIGlzIHNhZmUgYW5kIG5vIHN3aXp6bGluZyBpcworICogcmVxdWlyZWQuCisgKgorICogV2hlbiBiaXQgMTcgaXMgWE9SZWQgaW4sIHdlIHNpbXBseSByZWZ1c2UgdG8gdGlsZSBhdCBhbGwuICBCaXQKKyAqIDE3IGlzIG5vdCBqdXN0IGEgcGFnZSBvZmZzZXQsIHNvIGFzIHdlIHBhZ2UgYW4gb2JqZXQgb3V0IGFuZCBiYWNrIGluLAorICogaW5kaXZpZHVhbCBwYWdlcyBpbiBpdCB3aWxsIGhhdmUgZGlmZmVyZW50IGJpdCAxNyBhZGRyZXNzZXMsIHJlc3VsdGluZyBpbgorICogZWFjaCA2NCBieXRlcyBiZWluZyBzd2FwcGVkIHdpdGggaXRzIG5laWdoYm9yIQorICoKKyAqIE90aGVyd2lzZSwgaWYgaW50ZXJsZWF2ZWQsIHdlIGhhdmUgdG8gdGVsbCB0aGUgM2QgZHJpdmVyIHdoYXQgdGhlIGFkZHJlc3MKKyAqIHN3aXp6bGluZyBpdCBuZWVkcyB0byBkbyBpcywgc2luY2UgaXQncyB3cml0aW5nIHdpdGggdGhlIENQVSB0byB0aGUgcGFnZXMKKyAqIChiaXQgNiBhbmQgcG90ZW50aWFsbHkgYml0IDExIFhPUmVkIGluKSwgYW5kIHRoZSBHUFUgaXMgcmVhZGluZyBmcm9tIHRoZQorICogcGFnZXMgKGJpdCA2LCA5LCBhbmQgMTAgWE9SZWQgaW4pLCByZXN1bHRpbmcgaW4gYSBjdW11bGF0aXZlIGJpdCBzd2l6emxpbmcKKyAqIHJlcXVpcmVkIGJ5IHRoZSBDUFUgb2YgWE9SaW5nIGluIGJpdCA2LCA5LCAxMCwgYW5kIHBvdGVudGlhbGx5IDExLCBpbiBvcmRlcgorICogdG8gbWF0Y2ggd2hhdCB0aGUgR1BVIGV4cGVjdHMuCisgKi8KKworLyoqCisgKiBEZXRlY3RzIGJpdCA2IHN3aXp6bGluZyBvZiBhZGRyZXNzIGxvb2t1cCBiZXR3ZWVuIElHRCBhY2Nlc3MgYW5kIENQVQorICogYWNjZXNzIHRocm91Z2ggbWFpbiBtZW1vcnkuCisgKi8KK3ZvaWQKK2k5MTVfZ2VtX2RldGVjdF9iaXRfNl9zd2l6emxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3Qgc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CisJdWludDMyX3Qgc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CisKKwlpZiAoIUlTX0k5WFgoZGV2KSkgeworCQkvKiBBcyBmYXIgYXMgd2Uga25vdywgdGhlIDg2NSBkb2Vzbid0IGhhdmUgdGhlc2UgYml0IDYKKwkJICogc3dpenpsaW5nIGlzc3Vlcy4KKwkJICovCisJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKKwl9IGVsc2UgaWYgKCghSVNfSTk2NUcoZGV2KSAmJiAhSVNfRzMzKGRldikpIHx8IElTX0k5NjVHTShkZXYpIHx8CisJCSAgIElTX0dNNDUoZGV2KSkgeworCQl1aW50MzJfdCBkY2M7CisKKwkJLyogT24gOTE1LTk0NSBhbmQgR005NjUsIGNoYW5uZWwgaW50ZXJsZWF2ZSBieSB0aGUgQ1BVIGlzCisJCSAqIGRldGVybWluZWQgYnkgRENDLiAgVGhlIENQVSB3aWxsIGFsdGVybmF0ZSBiYXNlZCBvbiBiaXQgNgorCQkgKiBpbiBpbnRlcmxlYXZlZCBtb2RlLCBhbmQgdGhlIEdQVSB3aWxsIHRoZW4gYWxzbyBhbHRlcm5hdGUKKwkJICogb24gYml0IDYsIDksIGFuZCAxMCBmb3IgWCwgYnV0IHRoZSBDUFUgbWF5IGFsc28gb3B0aW9uYWxseQorCQkgKiBhbHRlcm5hdGUgYmFzZWQgb24gYml0IDE3IChYT1Igbm90IGRpc2FibGVkIGFuZCBYT1IKKwkJICogYml0ID09IDE3KS4KKwkJICovCisJCWRjYyA9IEk5MTVfUkVBRChEQ0MpOworCQlzd2l0Y2ggKGRjYyAmIERDQ19BRERSRVNTSU5HX01PREVfTUFTSykgeworCQljYXNlIERDQ19BRERSRVNTSU5HX01PREVfU0lOR0xFX0NIQU5ORUw6CisJCWNhc2UgRENDX0FERFJFU1NJTkdfTU9ERV9EVUFMX0NIQU5ORUxfQVNZTU1FVFJJQzoKKwkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCQlicmVhazsKKwkJY2FzZSBEQ0NfQUREUkVTU0lOR19NT0RFX0RVQUxfQ0hBTk5FTF9JTlRFUkxFQVZFRDoKKwkJCWlmIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpIHx8CisJCQkgICAgZGNjICYgRENDX0NIQU5ORUxfWE9SX0RJU0FCTEUpIHsKKwkJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMDsKKwkJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfOTsKKwkJCX0gZWxzZSBpZiAoSVNfSTk2NUdNKGRldikgfHwgSVNfR000NShkZXYpKSB7CisJCQkJLyogR005NjUgb25seSBkb2VzIGJpdCAxMS1iYXNlZCBjaGFubmVsCisJCQkJICogcmFuZG9taXphdGlvbgorCQkJCSAqLworCQkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzExOworCQkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzExOworCQkJfSBlbHNlIHsKKwkJCQkvKiBCaXQgMTcgb3IgcGVyaGFwcyBvdGhlciBzd2l6emxpbmcgKi8KKwkJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKKwkJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWlmIChkY2MgPT0gMHhmZmZmZmZmZikgeworCQkJRFJNX0VSUk9SKCJDb3VsZG4ndCByZWFkIGZyb20gTUNIQkFSLiAgIgorCQkJCSAgIkRpc2FibGluZyB0aWxpbmcuXG4iKTsKKwkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOworCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CisJCX0KKwl9IGVsc2UgeworCQkvKiBUaGUgOTY1LCBHMzMsIGFuZCBuZXdlciwgaGF2ZSBhIHZlcnkgZmxleGlibGUgbWVtb3J5CisJCSAqIGNvbmZpZ3VyYXRpb24uICBJdCB3aWxsIGVuYWJsZSBkdWFsLWNoYW5uZWwgbW9kZQorCQkgKiAoaW50ZXJsZWF2aW5nKSBvbiBhcyBtdWNoIG1lbW9yeSBhcyBpdCBjYW4sIGFuZCB0aGUgR1BVCisJCSAqIHdpbGwgYWRkaXRpb25hbGx5IHNvbWV0aW1lcyBlbmFibGUgZGlmZmVyZW50IGJpdCA2CisJCSAqIHN3aXp6bGluZyBmb3IgdGlsZWQgb2JqZWN0cyBmcm9tIHRoZSBDUFUuCisJCSAqCisJCSAqIEhlcmUncyB3aGF0IEkgZm91bmQgb24gdGhlIEc5NjU6CisJCSAqICAgIHNsb3QgZmlsbCAgICAgICAgIG1lbW9yeSBzaXplICBzd2l6emxpbmcKKwkJICogMEEgICAwQiAgIDFBICAgMUIgICAgMS1jaCAgIDItY2gKKwkJICogNTEyICAwICAgIDAgICAgMCAgICAgNTEyICAgIDAgICAgIE8KKwkJICogNTEyICAwICAgIDUxMiAgMCAgICAgMTYgICAgIDEwMDggIFgKKwkJICogNTEyICAwICAgIDAgICAgNTEyICAgMTYgICAgIDEwMDggIFgKKwkJICogMCAgICA1MTIgIDAgICAgNTEyICAgMTYgICAgIDEwMDggIFgKKwkJICogMTAyNCAxMDI0IDEwMjQgMCAgICAgMjA0OCAgIDEwMjQgIE8KKwkJICoKKwkJICogV2UgY291bGQgcHJvYmFibHkgZGV0ZWN0IHRoaXMgYmFzZWQgb24gZWl0aGVyIHRoZSBEUkIKKwkJICogbWF0Y2hpbmcsIHdoaWNoIHdhcyB0aGUgY2FzZSBmb3IgdGhlIHN3aXp6bGluZyByZXF1aXJlZCBpbgorCQkgKiB0aGUgdGFibGUgYWJvdmUsIG9yIGZyb20gdGhlIDEtY2ggdmFsdWUgYmVpbmcgbGVzcyB0aGFuCisJCSAqIHRoZSBtaW5pbXVtIHNpemUgb2YgYSByYW5rLgorCQkgKi8KKwkJaWYgKEk5MTVfUkVBRDE2KEMwRFJCMykgIT0gSTkxNV9SRUFEMTYoQzFEUkIzKSkgeworCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKKwkJfSBlbHNlIHsKKwkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwOworCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFXzk7CisJCX0KKwl9CisKKwlkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV94ID0gc3dpenpsZV94OworCWRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3kgPSBzd2l6emxlX3k7Cit9CisKKy8qKgorICogU2V0cyB0aGUgdGlsaW5nIG1vZGUgb2YgYW4gb2JqZWN0LCByZXR1cm5pbmcgdGhlIHJlcXVpcmVkIHN3aXp6bGluZyBvZgorICogYml0IDYgb2YgYWRkcmVzc2VzIGluIHRoZSBvYmplY3QuCisgKi8KK2ludAoraTkxNV9nZW1fc2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF90aWxpbmcgKmFyZ3MgPSBkYXRhOworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWlmIChhcmdzLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19OT05FKSB7CisJCW9ial9wcml2LT50aWxpbmdfbW9kZSA9IEk5MTVfVElMSU5HX05PTkU7CisJCWFyZ3MtPnN3aXp6bGVfbW9kZSA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCX0gZWxzZSB7CisJCWlmIChhcmdzLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19YKQorCQkJYXJncy0+c3dpenpsZV9tb2RlID0gZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeDsKKwkJZWxzZQorCQkJYXJncy0+c3dpenpsZV9tb2RlID0gZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeTsKKwkJLyogSWYgd2UgY2FuJ3QgaGFuZGxlIHRoZSBzd2l6emxpbmcsIG1ha2UgaXQgdW50aWxlZC4gKi8KKwkJaWYgKGFyZ3MtPnN3aXp6bGVfbW9kZSA9PSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTikgeworCQkJYXJncy0+dGlsaW5nX21vZGUgPSBJOTE1X1RJTElOR19OT05FOworCQkJYXJncy0+c3dpenpsZV9tb2RlID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCX0KKwl9CisJb2JqX3ByaXYtPnRpbGluZ19tb2RlID0gYXJncy0+dGlsaW5nX21vZGU7CisKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRpbGluZyBtb2RlIGFuZCByZXF1aXJlZCBiaXQgNiBzd2l6emxpbmcgZm9yIHRoZSBvYmplY3QuCisgKi8KK2ludAoraTkxNV9nZW1fZ2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcgKmFyZ3MgPSBkYXRhOworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWFyZ3MtPnRpbGluZ19tb2RlID0gb2JqX3ByaXYtPnRpbGluZ19tb2RlOworCXN3aXRjaCAob2JqX3ByaXYtPnRpbGluZ19tb2RlKSB7CisJY2FzZSBJOTE1X1RJTElOR19YOgorCQlhcmdzLT5zd2l6emxlX21vZGUgPSBkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV94OworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1k6CisJCWFyZ3MtPnN3aXp6bGVfbW9kZSA9IGRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3k7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfTk9ORToKKwkJYXJncy0+c3dpenpsZV9tb2RlID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigidW5rbm93biB0aWxpbmcgbW9kZVxuIik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCBkZjAzNjExLi5iYWFlNTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTMxLDEyICszMSw5MiBAQAogI2luY2x1ZGUgImk5MTVfZHJtLmgiCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKIAotI2RlZmluZSBVU0VSX0lOVF9GTEFHICgxPDwxKQotI2RlZmluZSBWU1lOQ19QSVBFQl9GTEFHICgxPDw1KQotI2RlZmluZSBWU1lOQ19QSVBFQV9GTEFHICgxPDw3KQotCiAjZGVmaW5lIE1BWF9OT1BJRCAoKHUzMil+MCkKIAorLyoqIFRoZXNlIGFyZSB0aGUgaW50ZXJydXB0cyB1c2VkIGJ5IHRoZSBkcml2ZXIgKi8KKyNkZWZpbmUgSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0sgKEk5MTVfVVNFUl9JTlRFUlJVUFQgfAkJXAorCQkJCSAgICBJOTE1X0FTTEVfSU5URVJSVVBUIHwJCVwKKwkJCQkgICAgSTkxNV9ESVNQTEFZX1BJUEVfQV9FVkVOVF9JTlRFUlJVUFQgfCBcCisJCQkJICAgIEk5MTVfRElTUExBWV9QSVBFX0JfRVZFTlRfSU5URVJSVVBUKQorCit2b2lkCitpOTE1X2VuYWJsZV9pcnEoZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIG1hc2spCit7CisJaWYgKChkZXZfcHJpdi0+aXJxX21hc2tfcmVnICYgbWFzaykgIT0gMCkgeworCQlkZXZfcHJpdi0+aXJxX21hc2tfcmVnICY9IH5tYXNrOworCQlJOTE1X1dSSVRFKElNUiwgZGV2X3ByaXYtPmlycV9tYXNrX3JlZyk7CisJCSh2b2lkKSBJOTE1X1JFQUQoSU1SKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraTkxNV9kaXNhYmxlX2lycShkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgbWFzaykKK3sKKwlpZiAoKGRldl9wcml2LT5pcnFfbWFza19yZWcgJiBtYXNrKSAhPSBtYXNrKSB7CisJCWRldl9wcml2LT5pcnFfbWFza19yZWcgfD0gbWFzazsKKwkJSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOworCQkodm9pZCkgSTkxNV9SRUFEKElNUik7CisJfQorfQorCisvKioKKyAqIGk5MTVfZ2V0X3BpcGUgLSByZXR1cm4gdGhlIHRoZSBwaXBlIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIHBsYW5lCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAcGxhbmU6IHBsYW5lIHRvIGxvb2sgZm9yCisgKgorICogVGhlIEludGVsIE1lc2EgJiAyRCBkcml2ZXJzIGNhbGwgdGhlIHZibGFuayByb3V0aW5lcyB3aXRoIGEgcGxhbmUgbnVtYmVyCisgKiByYXRoZXIgdGhhbiBhIHBpcGUgbnVtYmVyLCBzaW5jZSB0aGV5IG1heSBub3QgYWx3YXlzIGJlIGVxdWFsLiAgVGhpcyByb3V0aW5lCisgKiBtYXBzIHRoZSBnaXZlbiBAcGxhbmUgYmFjayB0byBhIHBpcGUgbnVtYmVyLgorICovCitzdGF0aWMgaW50CitpOTE1X2dldF9waXBlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwbGFuZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBkc3BjbnRyOworCisJZHNwY250ciA9IHBsYW5lID8gSTkxNV9SRUFEKERTUEJDTlRSKSA6IEk5MTVfUkVBRChEU1BBQ05UUik7CisKKwlyZXR1cm4gZHNwY250ciAmIERJU1BQTEFORV9TRUxfUElQRV9NQVNLID8gMSA6IDA7Cit9CisKKy8qKgorICogaTkxNV9nZXRfcGxhbmUgLSByZXR1cm4gdGhlIHRoZSBwbGFuZSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBwaXBlCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAcGlwZTogcGlwZSB0byBsb29rIGZvcgorICoKKyAqIFRoZSBJbnRlbCBNZXNhICYgMkQgZHJpdmVycyBjYWxsIHRoZSB2Ymxhbmsgcm91dGluZXMgd2l0aCBhIHBsYW5lIG51bWJlcgorICogcmF0aGVyIHRoYW4gYSBwbGFuZSBudW1iZXIsIHNpbmNlIHRoZXkgbWF5IG5vdCBhbHdheXMgYmUgZXF1YWwuICBUaGlzIHJvdXRpbmUKKyAqIG1hcHMgdGhlIGdpdmVuIEBwaXBlIGJhY2sgdG8gYSBwbGFuZSBudW1iZXIuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2V0X3BsYW5lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQoreworCWlmIChpOTE1X2dldF9waXBlKGRldiwgMCkgPT0gcGlwZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogaTkxNV9waXBlX2VuYWJsZWQgLSBjaGVjayBpZiBhIHBpcGUgaXMgZW5hYmxlZAorICogQGRldjogRFJNIGRldmljZQorICogQHBpcGU6IHBpcGUgdG8gY2hlY2sKKyAqCisgKiBSZWFkaW5nIGNlcnRhaW4gcmVnaXN0ZXJzIHdoZW4gdGhlIHBpcGUgaXMgZGlzYWJsZWQgY2FuIGhhbmcgdGhlIGNoaXAuCisgKiBVc2UgdGhpcyByb3V0aW5lIHRvIG1ha2Ugc3VyZSB0aGUgUExMIGlzIHJ1bm5pbmcgYW5kIHRoZSBwaXBlIGlzIGFjdGl2ZQorICogYmVmb3JlIHJlYWRpbmcgc3VjaCByZWdpc3RlcnMgaWYgdW5zdXJlLgorICovCitzdGF0aWMgaW50CitpOTE1X3BpcGVfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgcGlwZWNvbmYgPSBwaXBlID8gUElQRUJDT05GIDogUElQRUFDT05GOworCisJaWYgKEk5MTVfUkVBRChwaXBlY29uZikgJiBQSVBFQUNPTkZfRU5BQkxFKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCiAvKioKICAqIEVtaXQgYmxpdHMgZm9yIHNjaGVkdWxlZCBidWZmZXIgc3dhcHMuCiAgKgpAQCAtNDgsOCArMTI4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsICp0bXAsIGhpdHMsICpoaXQ7CiAJaW50IG5oaXRzLCBucmVjdHMsIHNsaWNlWzJdLCB1cHBlclsyXSwgbG93ZXJbMl0sIGk7Ci0JdW5zaWduZWQgY291bnRlclsyXSA9IHsgYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSwKLQkJCQlhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQyKSB9OworCXVuc2lnbmVkIGNvdW50ZXJbMl07CiAJc3RydWN0IGRybV9kcmF3YWJsZV9pbmZvICpkcnc7CiAJZHJtX2k5MTVfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCXUzMiBjcHAgPSBkZXZfcHJpdi0+Y3BwOwpAQCAtNzEsNiArMTUwLDkgQEAKIAkJc3JjX3BpdGNoID4+PSAyOwogCX0KIAorCWNvdW50ZXJbMF0gPSBkcm1fdmJsYW5rX2NvdW50KGRldiwgMCk7CisJY291bnRlclsxXSA9IGRybV92YmxhbmtfY291bnQoZGV2LCAxKTsKKwogCURSTV9ERUJVRygiXG4iKTsKIAogCUlOSVRfTElTVF9IRUFEKCZoaXRzKTsKQEAgLTgzLDEyICsxNjUsMTQgQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgdG1wLCAmZGV2X3ByaXYtPnZibF9zd2Fwcy5oZWFkKSB7CiAJCWRybV9pOTE1X3ZibF9zd2FwX3QgKnZibF9zd2FwID0KIAkJCWxpc3RfZW50cnkobGlzdCwgZHJtX2k5MTVfdmJsX3N3YXBfdCwgaGVhZCk7CisJCWludCBwaXBlID0gaTkxNV9nZXRfcGlwZShkZXYsIHZibF9zd2FwLT5wbGFuZSk7CiAKLQkJaWYgKChjb3VudGVyW3ZibF9zd2FwLT5waXBlXSAtIHZibF9zd2FwLT5zZXF1ZW5jZSkgPiAoMTw8MjMpKQorCQlpZiAoKGNvdW50ZXJbcGlwZV0gLSB2Ymxfc3dhcC0+c2VxdWVuY2UpID4gKDE8PDIzKSkKIAkJCWNvbnRpbnVlOwogCiAJCWxpc3RfZGVsKGxpc3QpOwogCQlkZXZfcHJpdi0+c3dhcHNfcGVuZGluZy0tOworCQlkcm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOwogCiAJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+c3dhcHNfbG9jayk7CiAJCXNwaW5fbG9jaygmZGV2LT5kcndfbG9jayk7CkBAIC0xODEsNyArMjY1LDcgQEAKIAkJCWRybV9pOTE1X3ZibF9zd2FwX3QgKnN3YXBfaGl0ID0KIAkJCQlsaXN0X2VudHJ5KGhpdCwgZHJtX2k5MTVfdmJsX3N3YXBfdCwgaGVhZCk7CiAJCQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcmVjdDsKLQkJCWludCBudW1fcmVjdHMsIHBpcGU7CisJCQlpbnQgbnVtX3JlY3RzLCBwbGFuZTsKIAkJCXVuc2lnbmVkIHNob3J0IHRvcCwgYm90dG9tOwogCiAJCQlkcncgPSBkcm1fZ2V0X2RyYXdhYmxlX2luZm8oZGV2LCBzd2FwX2hpdC0+ZHJ3X2lkKTsKQEAgLTE5MCw5ICsyNzQsOSBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQlyZWN0ID0gZHJ3LT5yZWN0czsKLQkJCXBpcGUgPSBzd2FwX2hpdC0+cGlwZTsKLQkJCXRvcCA9IHVwcGVyW3BpcGVdOwotCQkJYm90dG9tID0gbG93ZXJbcGlwZV07CisJCQlwbGFuZSA9IHN3YXBfaGl0LT5wbGFuZTsKKwkJCXRvcCA9IHVwcGVyW3BsYW5lXTsKKwkJCWJvdHRvbSA9IGxvd2VyW3BsYW5lXTsKIAogCQkJZm9yIChudW1fcmVjdHMgPSBkcnctPm51bV9yZWN0czsgbnVtX3JlY3RzLS07IHJlY3QrKykgewogCQkJCWludCB5MSA9IG1heChyZWN0LT55MSwgdG9wKTsKQEAgLTIyOSw2MSArMzEzLDEzOSBAQAogCX0KIH0KIAordTMyIGk5MTVfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwbGFuZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgaGlnaF9mcmFtZTsKKwl1bnNpZ25lZCBsb25nIGxvd19mcmFtZTsKKwl1MzIgaGlnaDEsIGhpZ2gyLCBsb3csIGNvdW50OworCWludCBwaXBlOworCisJcGlwZSA9IGk5MTVfZ2V0X3BpcGUoZGV2LCBwbGFuZSk7CisJaGlnaF9mcmFtZSA9IHBpcGUgPyBQSVBFQkZSQU1FSElHSCA6IFBJUEVBRlJBTUVISUdIOworCWxvd19mcmFtZSA9IHBpcGUgPyBQSVBFQkZSQU1FUElYRUwgOiBQSVBFQUZSQU1FUElYRUw7CisKKwlpZiAoIWk5MTVfcGlwZV9lbmFibGVkKGRldiwgcGlwZSkpIHsKKwkJRFJNX0VSUk9SKCJ0cnlpbmcgdG8gZ2V0IHZibGFuayBjb3VudCBmb3IgZGlzYWJsZWQgcGlwZSAlZFxuIiwgcGlwZSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSGlnaCAmIGxvdyByZWdpc3RlciBmaWVsZHMgYXJlbid0IHN5bmNocm9uaXplZCwgc28gbWFrZSBzdXJlCisJICogd2UgZ2V0IGEgbG93IHZhbHVlIHRoYXQncyBzdGFibGUgYWNyb3NzIHR3byByZWFkcyBvZiB0aGUgaGlnaAorCSAqIHJlZ2lzdGVyLgorCSAqLworCWRvIHsKKwkJaGlnaDEgPSAoKEk5MTVfUkVBRChoaWdoX2ZyYW1lKSAmIFBJUEVfRlJBTUVfSElHSF9NQVNLKSA+PgorCQkJIFBJUEVfRlJBTUVfSElHSF9TSElGVCk7CisJCWxvdyA9ICAoKEk5MTVfUkVBRChsb3dfZnJhbWUpICYgUElQRV9GUkFNRV9MT1dfTUFTSykgPj4KKwkJCVBJUEVfRlJBTUVfTE9XX1NISUZUKTsKKwkJaGlnaDIgPSAoKEk5MTVfUkVBRChoaWdoX2ZyYW1lKSAmIFBJUEVfRlJBTUVfSElHSF9NQVNLKSA+PgorCQkJIFBJUEVfRlJBTUVfSElHSF9TSElGVCk7CisJfSB3aGlsZSAoaGlnaDEgIT0gaGlnaDIpOworCisJY291bnQgPSAoaGlnaDEgPDwgOCkgfCBsb3c7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3ZvaWQKK2k5MTVfZ2VtX3ZibGFua193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKworCWRldl9wcml2ID0gY29udGFpbmVyX29mKHdvcmssIGRybV9pOTE1X3ByaXZhdGVfdCwKKwkJCQltbS52Ymxhbmtfd29yayk7CisJZGV2ID0gZGV2X3ByaXYtPmRldjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpOTE1X3ZibGFua190YXNrbGV0KGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cit9CisKIGlycXJldHVybl90IGk5MTVfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopIGFyZzsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXUxNiB0ZW1wOworCXUzMiBpaXI7CiAJdTMyIHBpcGVhX3N0YXRzLCBwaXBlYl9zdGF0czsKKwlpbnQgdmJsYW5rID0gMDsKIAotCXBpcGVhX3N0YXRzID0gSTkxNV9SRUFEKEk5MTVSRUdfUElQRUFTVEFUKTsKLQlwaXBlYl9zdGF0cyA9IEk5MTVfUkVBRChJOTE1UkVHX1BJUEVCU1RBVCk7CisJYXRvbWljX2luYygmZGV2X3ByaXYtPmlycV9yZWNlaXZlZCk7CiAKLQl0ZW1wID0gSTkxNV9SRUFEMTYoSTkxNVJFR19JTlRfSURFTlRJVFlfUik7CisJaWYgKGRldi0+cGRldi0+bXNpX2VuYWJsZWQpCisJCUk5MTVfV1JJVEUoSU1SLCB+MCk7CisJaWlyID0gSTkxNV9SRUFEKElJUik7CiAKLQl0ZW1wICY9IChVU0VSX0lOVF9GTEFHIHwgVlNZTkNfUElQRUFfRkxBRyB8IFZTWU5DX1BJUEVCX0ZMQUcpOwotCi0JRFJNX0RFQlVHKCIlcyBmbGFnPSUwOHhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcCk7Ci0KLQlpZiAodGVtcCA9PSAwKQorCWlmIChpaXIgPT0gMCkgeworCQlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkgeworCQkJSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOworCQkJKHZvaWQpIEk5MTVfUkVBRChJTVIpOworCQl9CiAJCXJldHVybiBJUlFfTk9ORTsKKwl9CiAKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfSURFTlRJVFlfUiwgdGVtcCk7Ci0JKHZvaWQpIEk5MTVfUkVBRDE2KEk5MTVSRUdfSU5UX0lERU5USVRZX1IpOwotCURSTV9SRUFETUVNT1JZQkFSUklFUigpOworCS8qCisJICogQ2xlYXIgdGhlIFBJUEUoQXxCKVNUQVQgcmVncyBiZWZvcmUgdGhlIElJUiBvdGhlcndpc2UKKwkgKiB3ZSBtYXkgZ2V0IGV4dHJhIGludGVycnVwdHMuCisJICovCisJaWYgKGlpciAmIEk5MTVfRElTUExBWV9QSVBFX0FfRVZFTlRfSU5URVJSVVBUKSB7CisJCXBpcGVhX3N0YXRzID0gSTkxNV9SRUFEKFBJUEVBU1RBVCk7CisJCWlmICghKGRldl9wcml2LT52YmxhbmtfcGlwZSAmIERSTV9JOTE1X1ZCTEFOS19QSVBFX0EpKQorCQkJcGlwZWFfc3RhdHMgJj0gfihQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFIHwKKwkJCQkJIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOworCQllbHNlIGlmIChwaXBlYV9zdGF0cyAmIChQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTfAorCQkJCQlQSVBFX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTKSkgeworCQkJdmJsYW5rKys7CisJCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIGk5MTVfZ2V0X3BsYW5lKGRldiwgMCkpOworCQl9CiAKLQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IFJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7CisJCUk5MTVfV1JJVEUoUElQRUFTVEFULCBwaXBlYV9zdGF0cyk7CisJfQorCWlmIChpaXIgJiBJOTE1X0RJU1BMQVlfUElQRV9CX0VWRU5UX0lOVEVSUlVQVCkgeworCQlwaXBlYl9zdGF0cyA9IEk5MTVfUkVBRChQSVBFQlNUQVQpOworCQkvKiBBY2sgdGhlIGV2ZW50ICovCisJCUk5MTVfV1JJVEUoUElQRUJTVEFULCBwaXBlYl9zdGF0cyk7CiAKLQlpZiAodGVtcCAmIFVTRVJfSU5UX0ZMQUcpCisJCS8qIFRoZSB2YmxhbmsgaW50ZXJydXB0IGdldHMgZW5hYmxlZCBldmVuIGlmIHdlIGRpZG4ndCBhc2sgZm9yCisJCSAgIGl0LCBzbyBtYWtlIHN1cmUgaXQncyBzaHV0IGRvd24gYWdhaW4gKi8KKwkJaWYgKCEoZGV2X3ByaXYtPnZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikpCisJCQlwaXBlYl9zdGF0cyAmPSB+KFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJCQkgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJCWVsc2UgaWYgKHBpcGViX3N0YXRzICYgKFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVN8CisJCQkJCVBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMpKSB7CisJCQl2YmxhbmsrKzsKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgaTkxNV9nZXRfcGxhbmUoZGV2LCAxKSk7CisJCX0KKworCQlpZiAocGlwZWJfc3RhdHMgJiBJOTE1X0xFR0FDWV9CTENfRVZFTlRfU1RBVFVTKQorCQkJb3ByZWdpb25fYXNsZV9pbnRyKGRldik7CisJCUk5MTVfV1JJVEUoUElQRUJTVEFULCBwaXBlYl9zdGF0cyk7CisJfQorCisJSTkxNV9XUklURShJSVIsIGlpcik7CisJaWYgKGRldi0+cGRldi0+bXNpX2VuYWJsZWQpCisJCUk5MTVfV1JJVEUoSU1SLCBkZXZfcHJpdi0+aXJxX21hc2tfcmVnKTsKKwkodm9pZCkgSTkxNV9SRUFEKElJUik7IC8qIEZsdXNoIHBvc3RlZCB3cml0ZXMgKi8KKworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPQorCQkJUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KTsKKworCWlmIChpaXIgJiBJOTE1X1VTRVJfSU5URVJSVVBUKSB7CisJCWRldl9wcml2LT5tbS5pcnFfZ2VtX3NlcW5vID0gaTkxNV9nZXRfZ2VtX3NlcW5vKGRldik7CiAJCURSTV9XQUtFVVAoJmRldl9wcml2LT5pcnFfcXVldWUpOworCX0KIAotCWlmICh0ZW1wICYgKFZTWU5DX1BJUEVBX0ZMQUcgfCBWU1lOQ19QSVBFQl9GTEFHKSkgewotCQlpbnQgdmJsYW5rX3BpcGUgPSBkZXZfcHJpdi0+dmJsYW5rX3BpcGU7CisJaWYgKGlpciAmIEk5MTVfQVNMRV9JTlRFUlJVUFQpCisJCW9wcmVnaW9uX2FzbGVfaW50cihkZXYpOwogCi0JCWlmICgodmJsYW5rX3BpcGUgJgotCQkgICAgIChEUk1fSTkxNV9WQkxBTktfUElQRV9BIHwgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikpCi0JCSAgICA9PSAoRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSB8IERSTV9JOTE1X1ZCTEFOS19QSVBFX0IpKSB7Ci0JCQlpZiAodGVtcCAmIFZTWU5DX1BJUEVBX0ZMQUcpCi0JCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCQkJaWYgKHRlbXAgJiBWU1lOQ19QSVBFQl9GTEFHKQotCQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkMik7Ci0JCX0gZWxzZSBpZiAoKCh0ZW1wICYgVlNZTkNfUElQRUFfRkxBRykgJiYKLQkJCSAgICAodmJsYW5rX3BpcGUgJiBEUk1fSTkxNV9WQkxBTktfUElQRV9BKSkgfHwKLQkJCSAgICgodGVtcCAmIFZTWU5DX1BJUEVCX0ZMQUcpICYmCi0JCQkgICAgKHZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikpKQotCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCi0JCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKLQkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKLQotCQlpZiAoZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPiAwKQorCWlmICh2YmxhbmsgJiYgZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPiAwKSB7CisJCWlmIChkZXZfcHJpdi0+cmluZy5yaW5nX29iaiA9PSBOVUxMKQogCQkJZHJtX2xvY2tlZF90YXNrbGV0KGRldiwgaTkxNV92YmxhbmtfdGFza2xldCk7Ci0JCUk5MTVfV1JJVEUoSTkxNVJFR19QSVBFQVNUQVQsCi0JCQlwaXBlYV9zdGF0c3xJOTE1X1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFfAotCQkJSTkxNV9WQkxBTktfQ0xFQVIpOwotCQlJOTE1X1dSSVRFKEk5MTVSRUdfUElQRUJTVEFULAotCQkJcGlwZWJfc3RhdHN8STkxNV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRXwKLQkJCUk5MTVfVkJMQU5LX0NMRUFSKTsKKwkJZWxzZQorCQkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPm1tLnZibGFua193b3JrKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0yOTgsMjMgKzQ2MCw0NSBAQAogCiAJRFJNX0RFQlVHKCJcbiIpOwogCi0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9ICsrZGV2X3ByaXYtPmNvdW50ZXI7Ci0KKwlkZXZfcHJpdi0+Y291bnRlcisrOwogCWlmIChkZXZfcHJpdi0+Y291bnRlciA+IDB4N0ZGRkZGRkZVTCkKLQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyID0gMTsKKwkJZGV2X3ByaXYtPmNvdW50ZXIgPSAxOworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyOwogCiAJQkVHSU5fTFBfUklORyg2KTsKLQlPVVRfUklORyhDTURfU1RPUkVfRFdPUkRfSURYKTsKLQlPVVRfUklORygyMCk7CisJT1VUX1JJTkcoTUlfU1RPUkVfRFdPUkRfSU5ERVgpOworCU9VVF9SSU5HKDUgPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQpOwogCU9VVF9SSU5HKGRldl9wcml2LT5jb3VudGVyKTsKIAlPVVRfUklORygwKTsKIAlPVVRfUklORygwKTsKLQlPVVRfUklORyhHRlhfT1BfVVNFUl9JTlRFUlJVUFQpOworCU9VVF9SSU5HKE1JX1VTRVJfSU5URVJSVVBUKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIAogCXJldHVybiBkZXZfcHJpdi0+Y291bnRlcjsKIH0KIAordm9pZCBpOTE1X3VzZXJfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT51c2VyX2lycV9sb2NrKTsKKwlpZiAoZGV2LT5pcnFfZW5hYmxlZCAmJiAoKytkZXZfcHJpdi0+dXNlcl9pcnFfcmVmY291bnQgPT0gMSkpCisJCWk5MTVfZW5hYmxlX2lycShkZXZfcHJpdiwgSTkxNV9VU0VSX0lOVEVSUlVQVCk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT51c2VyX2lycV9sb2NrKTsKK30KKwordm9pZCBpOTE1X3VzZXJfaXJxX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT51c2VyX2lycV9sb2NrKTsKKwlCVUdfT04oZGV2LT5pcnFfZW5hYmxlZCAmJiBkZXZfcHJpdi0+dXNlcl9pcnFfcmVmY291bnQgPD0gMCk7CisJaWYgKGRldi0+aXJxX2VuYWJsZWQgJiYgKC0tZGV2X3ByaXYtPnVzZXJfaXJxX3JlZmNvdW50ID09IDApKQorCQlpOTE1X2Rpc2FibGVfaXJxKGRldl9wcml2LCBJOTE1X1VTRVJfSU5URVJSVVBUKTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2spOworfQorCiBzdGF0aWMgaW50IGk5MTVfd2FpdF9pcnEoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBpcnFfbnIpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTMyMyw1NSArNTA3LDM0IEBACiAJRFJNX0RFQlVHKCJpcnFfbnI9JWQgYnJlYWRjcnVtYj0lZFxuIiwgaXJxX25yLAogCQkgIFJFQURfQlJFQURDUlVNQihkZXZfcHJpdikpOwogCi0JaWYgKFJFQURfQlJFQURDUlVNQihkZXZfcHJpdikgPj0gaXJxX25yKQorCWlmIChSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpID49IGlycV9ucikgeworCQlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYpIHsKKwkJCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0KKwkJCQlSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOworCQl9CiAJCXJldHVybiAwOworCX0KIAotCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CisJaWYgKGRldl9wcml2LT5zYXJlYV9wcml2KQorCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9XQUlUOwogCisJaTkxNV91c2VyX2lycV9nZXQoZGV2KTsKIAlEUk1fV0FJVF9PTihyZXQsIGRldl9wcml2LT5pcnFfcXVldWUsIDMgKiBEUk1fSFosCiAJCSAgICBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpID49IGlycV9ucik7CisJaTkxNV91c2VyX2lycV9wdXQoZGV2KTsKIAogCWlmIChyZXQgPT0gLUVCVVNZKSB7CiAJCURSTV9FUlJPUigiRUJVU1kgLS0gcmVjOiAlZCBlbWl0dGVkOiAlZFxuIiwKIAkJCSAgUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSwgKGludClkZXZfcHJpdi0+Y291bnRlcik7CiAJfQogCi0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9kcml2ZXJfdmJsYW5rX2RvX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSwKLQkJCQkgICAgICBhdG9taWNfdCAqY291bnRlcikKLXsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1bnNpZ25lZCBpbnQgY3VyX3ZibGFuazsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghZGV2X3ByaXYpIHsKLQkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWUsIDMgKiBEUk1fSFosCi0JCSAgICAoKChjdXJfdmJsYW5rID0gYXRvbWljX3JlYWQoY291bnRlcikpCi0JCQktICpzZXF1ZW5jZSkgPD0gKDE8PDIzKSkpOwotCi0JKnNlcXVlbmNlID0gY3VyX3ZibGFuazsKKwlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYpCisJCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0KKwkJCVJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7CiAKIAlyZXR1cm4gcmV0OwogfQogCi0KLWludCBpOTE1X2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQotewotCXJldHVybiBpOTE1X2RyaXZlcl92YmxhbmtfZG9fd2FpdChkZXYsIHNlcXVlbmNlLCAmZGV2LT52YmxfcmVjZWl2ZWQpOwotfQotCi1pbnQgaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCi17Ci0JcmV0dXJuIGk5MTVfZHJpdmVyX3ZibGFua19kb193YWl0KGRldiwgc2VxdWVuY2UsICZkZXYtPnZibF9yZWNlaXZlZDIpOwotfQotCiAvKiBOZWVkcyB0aGUgbG9jayBhcyBpdCB0b3VjaGVzIHRoZSByaW5nLgogICovCiBpbnQgaTkxNV9pcnFfZW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtMzgxLDE0ICs1NDQsMTUgQEAKIAlkcm1faTkxNV9pcnFfZW1pdF90ICplbWl0ID0gZGF0YTsKIAlpbnQgcmVzdWx0OwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKKwlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKIAlpZiAoIWRldl9wcml2KSB7CiAJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmVzdWx0ID0gaTkxNV9lbWl0X2lycShkZXYpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJaWYgKERSTV9DT1BZX1RPX1VTRVIoZW1pdC0+aXJxX3NlcSwgJnJlc3VsdCwgc2l6ZW9mKGludCkpKSB7CiAJCURSTV9FUlJPUigiY29weV90b191c2VyXG4iKTsKQEAgLTQxNCwxOCArNTc4LDc0IEBACiAJcmV0dXJuIGk5MTVfd2FpdF9pcnEoZGV2LCBpcnF3YWl0LT5pcnFfc2VxKTsKIH0KIAotc3RhdGljIHZvaWQgaTkxNV9lbmFibGVfaW50ZXJydXB0IChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoraW50IGk5MTVfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGxhbmUpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MTYgZmxhZzsKKwlpbnQgcGlwZSA9IGk5MTVfZ2V0X3BpcGUoZGV2LCBwbGFuZSk7CisJdTMyCXBpcGVzdGF0X3JlZyA9IDA7CisJdTMyCXBpcGVzdGF0OwogCi0JZmxhZyA9IDA7Ci0JaWYgKGRldl9wcml2LT52YmxhbmtfcGlwZSAmIERSTV9JOTE1X1ZCTEFOS19QSVBFX0EpCi0JCWZsYWcgfD0gVlNZTkNfUElQRUFfRkxBRzsKLQlpZiAoZGV2X3ByaXYtPnZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikKLQkJZmxhZyB8PSBWU1lOQ19QSVBFQl9GTEFHOworCXN3aXRjaCAocGlwZSkgeworCWNhc2UgMDoKKwkJcGlwZXN0YXRfcmVnID0gUElQRUFTVEFUOworCQlpOTE1X2VuYWJsZV9pcnEoZGV2X3ByaXYsIEk5MTVfRElTUExBWV9QSVBFX0FfRVZFTlRfSU5URVJSVVBUKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwaXBlc3RhdF9yZWcgPSBQSVBFQlNUQVQ7CisJCWk5MTVfZW5hYmxlX2lycShkZXZfcHJpdiwgSTkxNV9ESVNQTEFZX1BJUEVfQl9FVkVOVF9JTlRFUlJVUFQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IHBpcGUgJWRcbiIsCisJCQkgIHBpcGUpOworCQlicmVhazsKKwl9CiAKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfRU5BQkxFX1IsIFVTRVJfSU5UX0ZMQUcgfCBmbGFnKTsKKwlpZiAocGlwZXN0YXRfcmVnKSB7CisJCXBpcGVzdGF0ID0gSTkxNV9SRUFEKHBpcGVzdGF0X3JlZyk7CisJCWlmIChJU19JOTY1RyhkZXYpKQorCQkJcGlwZXN0YXQgfD0gUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX0VOQUJMRTsKKwkJZWxzZQorCQkJcGlwZXN0YXQgfD0gUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRTsKKwkJLyogQ2xlYXIgYW55IHN0YWxlIGludGVycnVwdCBzdGF0dXMgKi8KKwkJcGlwZXN0YXQgfD0gKFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMgfAorCQkJICAgICBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTKTsKKwkJSTkxNV9XUklURShwaXBlc3RhdF9yZWcsIHBpcGVzdGF0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwbGFuZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCWludCBwaXBlID0gaTkxNV9nZXRfcGlwZShkZXYsIHBsYW5lKTsKKwl1MzIJcGlwZXN0YXRfcmVnID0gMDsKKwl1MzIJcGlwZXN0YXQ7CisKKwlzd2l0Y2ggKHBpcGUpIHsKKwljYXNlIDA6CisJCXBpcGVzdGF0X3JlZyA9IFBJUEVBU1RBVDsKKwkJaTkxNV9kaXNhYmxlX2lycShkZXZfcHJpdiwgSTkxNV9ESVNQTEFZX1BJUEVfQV9FVkVOVF9JTlRFUlJVUFQpOworCQlicmVhazsKKwljYXNlIDE6CisJCXBpcGVzdGF0X3JlZyA9IFBJUEVCU1RBVDsKKwkJaTkxNV9kaXNhYmxlX2lycShkZXZfcHJpdiwgSTkxNV9ESVNQTEFZX1BJUEVfQl9FVkVOVF9JTlRFUlJVUFQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoInRyaWVkIHRvIGRpc2FibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBwaXBlICVkXG4iLAorCQkJICBwaXBlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHBpcGVzdGF0X3JlZykgeworCQlwaXBlc3RhdCA9IEk5MTVfUkVBRChwaXBlc3RhdF9yZWcpOworCQlwaXBlc3RhdCAmPSB+KFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJICAgICAgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJCS8qIENsZWFyIGFueSBzdGFsZSBpbnRlcnJ1cHQgc3RhdHVzICovCisJCXBpcGVzdGF0IHw9IChQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTIHwKKwkJCSAgICAgUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUyk7CisJCUk5MTVfV1JJVEUocGlwZXN0YXRfcmVnLCBwaXBlc3RhdCk7CisJfQogfQogCiAvKiBTZXQgdGhlIHZibGFuayBtb25pdG9yIHBpcGUKQEAgLTQzNCwyMiArNjU0LDEyIEBACiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JZHJtX2k5MTVfdmJsYW5rX3BpcGVfdCAqcGlwZSA9IGRhdGE7CiAKIAlpZiAoIWRldl9wcml2KSB7CiAJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAocGlwZS0+cGlwZSAmIH4oRFJNX0k5MTVfVkJMQU5LX1BJUEVfQXxEUk1fSTkxNV9WQkxBTktfUElQRV9CKSkgewotCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIGludmFsaWQgcGlwZSAweCV4XG4iLCBwaXBlLT5waXBlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGV2X3ByaXYtPnZibGFua19waXBlID0gcGlwZS0+cGlwZTsKLQotCWk5MTVfZW5hYmxlX2ludGVycnVwdCAoZGV2KTsKLQogCXJldHVybiAwOwogfQogCkBAIC00NTgsMTkgKzY2OCwxMyBAQAogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pOTE1X3ZibGFua19waXBlX3QgKnBpcGUgPSBkYXRhOwotCXUxNiBmbGFnOwogCiAJaWYgKCFkZXZfcHJpdikgewogCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZmxhZyA9IEk5MTVfUkVBRChJOTE1UkVHX0lOVF9FTkFCTEVfUik7Ci0JcGlwZS0+cGlwZSA9IDA7Ci0JaWYgKGZsYWcgJiBWU1lOQ19QSVBFQV9GTEFHKQotCQlwaXBlLT5waXBlIHw9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0E7Ci0JaWYgKGZsYWcgJiBWU1lOQ19QSVBFQl9GTEFHKQotCQlwaXBlLT5waXBlIHw9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0I7CisJcGlwZS0+cGlwZSA9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0EgfCBEUk1fSTkxNV9WQkxBTktfUElQRV9COwogCiAJcmV0dXJuIDA7CiB9CkBAIC00ODQsMTEgKzY4OCwxMiBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pOTE1X3ZibGFua19zd2FwX3QgKnN3YXAgPSBkYXRhOwogCWRybV9pOTE1X3ZibF9zd2FwX3QgKnZibF9zd2FwOwotCXVuc2lnbmVkIGludCBwaXBlLCBzZXF0eXBlLCBjdXJzZXE7CisJdW5zaWduZWQgaW50IHBpcGUsIHNlcXR5cGUsIGN1cnNlcSwgcGxhbmU7CiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWludCByZXQ7CiAKLQlpZiAoIWRldl9wcml2KSB7CisJaWYgKCFkZXZfcHJpdiB8fCAhZGV2X3ByaXYtPnNhcmVhX3ByaXYpIHsKIAkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01MDQsNyArNzA5LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcGlwZSA9IChzd2FwLT5zZXF0eXBlICYgX0RSTV9WQkxBTktfU0VDT05EQVJZKSA/IDEgOiAwOworCXBsYW5lID0gKHN3YXAtPnNlcXR5cGUgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkpID8gMSA6IDA7CisJcGlwZSA9IGk5MTVfZ2V0X3BpcGUoZGV2LCBwbGFuZSk7CiAKIAlzZXF0eXBlID0gc3dhcC0+c2VxdHlwZSAmIChfRFJNX1ZCTEFOS19SRUxBVElWRSB8IF9EUk1fVkJMQU5LX0FCU09MVVRFKTsKIApAQCAtNTIzLDcgKzcyOSwxNCBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5kcndfbG9jaywgaXJxZmxhZ3MpOwogCi0JY3Vyc2VxID0gYXRvbWljX3JlYWQocGlwZSA/ICZkZXYtPnZibF9yZWNlaXZlZDIgOiAmZGV2LT52YmxfcmVjZWl2ZWQpOworCS8qCisJICogV2UgdGFrZSB0aGUgcmVmIGhlcmUgYW5kIHB1dCBpdCB3aGVuIHRoZSBzd2FwIGFjdHVhbGx5IGNvbXBsZXRlcworCSAqIGluIHRoZSB0YXNrbGV0LgorCSAqLworCXJldCA9IGRybV92YmxhbmtfZ2V0KGRldiwgcGlwZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwljdXJzZXEgPSBkcm1fdmJsYW5rX2NvdW50KGRldiwgcGlwZSk7CiAKIAlpZiAoc2VxdHlwZSA9PSBfRFJNX1ZCTEFOS19SRUxBVElWRSkKIAkJc3dhcC0+c2VxdWVuY2UgKz0gY3Vyc2VxOwpAQCAtNTMzLDYgKzc0Niw3IEBACiAJCQlzd2FwLT5zZXF1ZW5jZSA9IGN1cnNlcSArIDE7CiAJCX0gZWxzZSB7CiAJCQlEUk1fREVCVUcoIk1pc3NlZCB0YXJnZXQgc2VxdWVuY2VcbiIpOworCQkJZHJtX3ZibGFua19wdXQoZGV2LCBwaXBlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtNTQzLDcgKzc1Nyw3IEBACiAJCXZibF9zd2FwID0gbGlzdF9lbnRyeShsaXN0LCBkcm1faTkxNV92Ymxfc3dhcF90LCBoZWFkKTsKIAogCQlpZiAodmJsX3N3YXAtPmRyd19pZCA9PSBzd2FwLT5kcmF3YWJsZSAmJgotCQkgICAgdmJsX3N3YXAtPnBpcGUgPT0gcGlwZSAmJgorCQkgICAgdmJsX3N3YXAtPnBsYW5lID09IHBsYW5lICYmCiAJCSAgICB2Ymxfc3dhcC0+c2VxdWVuY2UgPT0gc3dhcC0+c2VxdWVuY2UpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5zd2Fwc19sb2NrLCBpcnFmbGFncyk7CiAJCQlEUk1fREVCVUcoIkFscmVhZHkgc2NoZWR1bGVkXG4iKTsKQEAgLTU1NSw2ICs3NjksNyBAQAogCiAJaWYgKGRldl9wcml2LT5zd2Fwc19wZW5kaW5nID49IDEwMCkgewogCQlEUk1fREVCVUcoIlRvbyBtYW55IHN3YXBzIHF1ZXVlZFxuIik7CisJCWRybV92YmxhbmtfcHV0KGRldiwgcGlwZSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC01NjIsMTMgKzc3NywxNCBAQAogCiAJaWYgKCF2Ymxfc3dhcCkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgdG8gcXVldWUgc3dhcFxuIik7CisJCWRybV92YmxhbmtfcHV0KGRldiwgcGlwZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCURSTV9ERUJVRygiXG4iKTsKIAogCXZibF9zd2FwLT5kcndfaWQgPSBzd2FwLT5kcmF3YWJsZTsKLQl2Ymxfc3dhcC0+cGlwZSA9IHBpcGU7CisJdmJsX3N3YXAtPnBsYW5lID0gcGxhbmU7CiAJdmJsX3N3YXAtPnNlcXVlbmNlID0gc3dhcC0+c2VxdWVuY2U7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnN3YXBzX2xvY2ssIGlycWZsYWdzKTsKQEAgLTU4NywzNyArODAzLDYzIEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0hXU1RBTSwgMHhmZmZlKTsKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfTUFTS19SLCAweDApOwotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9FTkFCTEVfUiwgMHgwKTsKKwlJOTE1X1dSSVRFKEhXU1RBTSwgMHhlZmZlKTsKKwlJOTE1X1dSSVRFKElNUiwgMHhmZmZmZmZmZik7CisJSTkxNV9XUklURShJRVIsIDB4MCk7CiB9CiAKLXZvaWQgaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldCwgbnVtX3BpcGVzID0gMjsKIAogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+c3dhcHNfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT52Ymxfc3dhcHMuaGVhZCk7CiAJZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPSAwOwogCi0JaWYgKCFkZXZfcHJpdi0+dmJsYW5rX3BpcGUpCi0JCWRldl9wcml2LT52YmxhbmtfcGlwZSA9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0E7Ci0JaTkxNV9lbmFibGVfaW50ZXJydXB0KGRldik7CisJLyogU2V0IGluaXRpYWwgdW5tYXNrZWQgSVJRcyB0byBqdXN0IHRoZSBzZWxlY3RlZCB2YmxhbmsgcGlwZXMuICovCisJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyA9IH4wOworCisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRldiwgbnVtX3BpcGVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZGV2X3ByaXYtPnZibGFua19waXBlID0gRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSB8IERSTV9JOTE1X1ZCTEFOS19QSVBFX0I7CisJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmPSB+STkxNV9ESVNQTEFZX1BJUEVfQV9WQkxBTktfSU5URVJSVVBUOworCWRldl9wcml2LT5pcnFfbWFza19yZWcgJj0gfkk5MTVfRElTUExBWV9QSVBFX0JfVkJMQU5LX0lOVEVSUlVQVDsKKworCWRldi0+bWF4X3ZibGFua19jb3VudCA9IDB4ZmZmZmZmOyAvKiBvbmx5IDI0IGJpdHMgb2YgZnJhbWUgY291bnQgKi8KKworCWRldl9wcml2LT5pcnFfbWFza19yZWcgJj0gSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0s7CisKKwlJOTE1X1dSSVRFKElNUiwgZGV2X3ByaXYtPmlycV9tYXNrX3JlZyk7CisJSTkxNV9XUklURShJRVIsIEk5MTVfSU5URVJSVVBUX0VOQUJMRV9NQVNLKTsKKwkodm9pZCkgSTkxNV9SRUFEKElFUik7CisKKwlvcHJlZ2lvbl9lbmFibGVfYXNsZShkZXYpOwogCURSTV9JTklUX1dBSVRRVUVVRSgmZGV2X3ByaXYtPmlycV9xdWV1ZSk7CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBpOTE1X2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTE2IHRlbXA7CisJdTMyIHRlbXA7CiAKIAlpZiAoIWRldl9wcml2KQogCQlyZXR1cm47CiAKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19IV1NUQU0sIDB4ZmZmZik7Ci0JSTkxNV9XUklURTE2KEk5MTVSRUdfSU5UX01BU0tfUiwgMHhmZmZmKTsKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfRU5BQkxFX1IsIDB4MCk7CisJZGV2X3ByaXYtPnZibGFua19waXBlID0gMDsKIAotCXRlbXAgPSBJOTE1X1JFQUQxNihJOTE1UkVHX0lOVF9JREVOVElUWV9SKTsKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfSURFTlRJVFlfUiwgdGVtcCk7CisJSTkxNV9XUklURShIV1NUQU0sIDB4ZmZmZmZmZmYpOworCUk5MTVfV1JJVEUoSU1SLCAweGZmZmZmZmZmKTsKKwlJOTE1X1dSSVRFKElFUiwgMHgwKTsKKworCXRlbXAgPSBJOTE1X1JFQUQoUElQRUFTVEFUKTsKKwlJOTE1X1dSSVRFKFBJUEVBU1RBVCwgdGVtcCk7CisJdGVtcCA9IEk5MTVfUkVBRChQSVBFQlNUQVQpOworCUk5MTVfV1JJVEUoUElQRUJTVEFULCB0ZW1wKTsKKwl0ZW1wID0gSTkxNV9SRUFEKElJUik7CisJSTkxNV9XUklURShJSVIsIHRlbXApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9vcHJlZ2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9vcHJlZ2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ODdhMGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X29wcmVnaW9uLmMKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbiA8aG9uZy5saXVAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCA8bWpnQHJlZGhhdC5jb20+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorICogcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OLUlORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIElOVEVMIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKKyNkZWZpbmUgUENJX0FTTEUgMHhlNAorI2RlZmluZSBQQ0lfTEJQQyAweGY0CisjZGVmaW5lIFBDSV9BU0xTIDB4ZmMKKworI2RlZmluZSBPUFJFR0lPTl9TWiAgICAgICAgICAgICg4KjEwMjQpCisjZGVmaW5lIE9QUkVHSU9OX0hFQURFUl9PRkZTRVQgMAorI2RlZmluZSBPUFJFR0lPTl9BQ1BJX09GRlNFVCAgIDB4MTAwCisjZGVmaW5lIE9QUkVHSU9OX1NXU0NJX09GRlNFVCAgMHgyMDAKKyNkZWZpbmUgT1BSRUdJT05fQVNMRV9PRkZTRVQgICAweDMwMAorI2RlZmluZSBPUFJFR0lPTl9WQlRfT0ZGU0VUICAgIDB4MTAwMAorCisjZGVmaW5lIE9QUkVHSU9OX1NJR05BVFVSRSAiSW50ZWxHcmFwaGljc01lbSIKKyNkZWZpbmUgTUJPWF9BQ1BJICAgICAgKDE8PDApCisjZGVmaW5lIE1CT1hfU1dTQ0kgICAgICgxPDwxKQorI2RlZmluZSBNQk9YX0FTTEUgICAgICAoMTw8MikKKworc3RydWN0IG9wcmVnaW9uX2hlYWRlciB7CisgICAgICAgdTggc2lnbmF0dXJlWzE2XTsKKyAgICAgICB1MzIgc2l6ZTsKKyAgICAgICB1MzIgb3ByZWdpb25fdmVyOworICAgICAgIHU4IGJpb3NfdmVyWzMyXTsKKyAgICAgICB1OCB2Ymlvc192ZXJbMTZdOworICAgICAgIHU4IGRyaXZlcl92ZXJbMTZdOworICAgICAgIHUzMiBtYm94ZXM7CisgICAgICAgdTggcmVzZXJ2ZWRbMTY0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE9wUmVnaW9uIG1haWxib3ggIzE6IHB1YmxpYyBBQ1BJIG1ldGhvZHMgKi8KK3N0cnVjdCBvcHJlZ2lvbl9hY3BpIHsKKyAgICAgICB1MzIgZHJkeTsgICAgICAgLyogZHJpdmVyIHJlYWRpbmVzcyAqLworICAgICAgIHUzMiBjc3RzOyAgICAgICAvKiBub3RpZmljYXRpb24gc3RhdHVzICovCisgICAgICAgdTMyIGNldnQ7ICAgICAgIC8qIGN1cnJlbnQgZXZlbnQgKi8KKyAgICAgICB1OCByc3ZkMVsyMF07CisgICAgICAgdTMyIGRpZGxbOF07ICAgIC8qIHN1cHBvcnRlZCBkaXNwbGF5IGRldmljZXMgSUQgbGlzdCAqLworICAgICAgIHUzMiBjcGRsWzhdOyAgICAvKiBjdXJyZW50bHkgcHJlc2VudGVkIGRpc3BsYXkgbGlzdCAqLworICAgICAgIHUzMiBjYWRsWzhdOyAgICAvKiBjdXJyZW50bHkgYWN0aXZlIGRpc3BsYXkgbGlzdCAqLworICAgICAgIHUzMiBuYWRsWzhdOyAgICAvKiBuZXh0IGFjdGl2ZSBkZXZpY2VzIGxpc3QgKi8KKyAgICAgICB1MzIgYXNscDsgICAgICAgLyogQVNMIHNsZWVwIHRpbWUtb3V0ICovCisgICAgICAgdTMyIHRpZHg7ICAgICAgIC8qIHRvZ2dsZSB0YWJsZSBpbmRleCAqLworICAgICAgIHUzMiBjaHBkOyAgICAgICAvKiBjdXJyZW50IGhvdHBsdWcgZW5hYmxlIGluZGljYXRvciAqLworICAgICAgIHUzMiBjbGlkOyAgICAgICAvKiBjdXJyZW50IGxpZCBzdGF0ZSovCisgICAgICAgdTMyIGNkY2s7ICAgICAgIC8qIGN1cnJlbnQgZG9ja2luZyBzdGF0ZSAqLworICAgICAgIHUzMiBzeHN3OyAgICAgICAvKiBTeCBzdGF0ZSByZXN1bWUgKi8KKyAgICAgICB1MzIgZXZ0czsgICAgICAgLyogQVNMIHN1cHBvcnRlZCBldmVudHMgKi8KKyAgICAgICB1MzIgY25vdDsgICAgICAgLyogY3VycmVudCBPUyBub3RpZmljYXRpb24gKi8KKyAgICAgICB1MzIgbnJkeTsgICAgICAgLyogZHJpdmVyIHN0YXR1cyAqLworICAgICAgIHU4IHJzdmQyWzYwXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE9wUmVnaW9uIG1haWxib3ggIzI6IFNXU0NJICovCitzdHJ1Y3Qgb3ByZWdpb25fc3dzY2kgeworICAgICAgIHUzMiBzY2ljOyAgICAgICAvKiBTV1NDSSBjb21tYW5kfHN0YXR1c3xkYXRhICovCisgICAgICAgdTMyIHBhcm07ICAgICAgIC8qIGNvbW1hbmQgcGFyYW1ldGVycyAqLworICAgICAgIHUzMiBkc2xwOyAgICAgICAvKiBkcml2ZXIgc2xlZXAgdGltZS1vdXQgKi8KKyAgICAgICB1OCByc3ZkWzI0NF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBPcFJlZ2lvbiBtYWlsYm94ICMzOiBBU0xFICovCitzdHJ1Y3Qgb3ByZWdpb25fYXNsZSB7CisgICAgICAgdTMyIGFyZHk7ICAgICAgIC8qIGRyaXZlciByZWFkaW5lc3MgKi8KKyAgICAgICB1MzIgYXNsYzsgICAgICAgLyogQVNMRSBpbnRlcnJ1cHQgY29tbWFuZCAqLworICAgICAgIHUzMiB0Y2hlOyAgICAgICAvKiB0ZWNobm9sb2d5IGVuYWJsZWQgaW5kaWNhdG9yICovCisgICAgICAgdTMyIGFsc2k7ICAgICAgIC8qIGN1cnJlbnQgQUxTIGlsbHVtaW5hbmNlIHJlYWRpbmcgKi8KKyAgICAgICB1MzIgYmNscDsgICAgICAgLyogYmFja2xpZ2h0IGJyaWdodG5lc3MgdG8gc2V0ICovCisgICAgICAgdTMyIHBmaXQ7ICAgICAgIC8qIHBhbmVsIGZpdHRpbmcgc3RhdGUgKi8KKyAgICAgICB1MzIgY2JsdjsgICAgICAgLyogY3VycmVudCBicmlnaHRuZXNzIGxldmVsICovCisgICAgICAgdTE2IGJjbG1bMjBdOyAgIC8qIGJhY2tsaWdodCBsZXZlbCBkdXR5IGN5Y2xlIG1hcHBpbmcgdGFibGUgKi8KKyAgICAgICB1MzIgY3BmbTsgICAgICAgLyogY3VycmVudCBwYW5lbCBmaXR0aW5nIG1vZGUgKi8KKyAgICAgICB1MzIgZXBmbTsgICAgICAgLyogZW5hYmxlZCBwYW5lbCBmaXR0aW5nIG1vZGVzICovCisgICAgICAgdTggcGx1dFs3NF07ICAgIC8qIHBhbmVsIExVVCBhbmQgaWRlbnRpZmllciAqLworICAgICAgIHUzMiBwZm1iOyAgICAgICAvKiBQV00gZnJlcSBhbmQgbWluIGJyaWdodG5lc3MgKi8KKyAgICAgICB1OCByc3ZkWzEwMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBBU0xFIGlycSByZXF1ZXN0IGJpdHMgKi8KKyNkZWZpbmUgQVNMRV9TRVRfQUxTX0lMTFVNICAgICAoMSA8PCAwKQorI2RlZmluZSBBU0xFX1NFVF9CQUNLTElHSFQgICAgICgxIDw8IDEpCisjZGVmaW5lIEFTTEVfU0VUX1BGSVQgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgQVNMRV9TRVRfUFdNX0ZSRVEgICAgICAoMSA8PCAzKQorI2RlZmluZSBBU0xFX1JFUV9NU0sgICAgICAgICAgIDB4ZgorCisvKiByZXNwb25zZSBiaXRzIG9mIEFTTEUgaXJxIHJlcXVlc3QgKi8KKyNkZWZpbmUgQVNMRV9BTFNfSUxMVU1fRkFJTCAgICAoMjw8MTApCisjZGVmaW5lIEFTTEVfQkFDS0xJR0hUX0ZBSUwgICAgKDI8PDEyKQorI2RlZmluZSBBU0xFX1BGSVRfRkFJTCAgICAgICAgICgyPDwxNCkKKyNkZWZpbmUgQVNMRV9QV01fRlJFUV9GQUlMICAgICAoMjw8MTYpCisKKy8qIEFTTEUgYmFja2xpZ2h0IGJyaWdodG5lc3MgdG8gc2V0ICovCisjZGVmaW5lIEFTTEVfQkNMUF9WQUxJRCAgICAgICAgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIEFTTEVfQkNMUF9NU0sgICAgICAgICAgKH4oMTw8MzEpKQorCisvKiBBU0xFIHBhbmVsIGZpdHRpbmcgcmVxdWVzdCAqLworI2RlZmluZSBBU0xFX1BGSVRfVkFMSUQgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIEFTTEVfUEZJVF9DRU5URVIgKDE8PDApCisjZGVmaW5lIEFTTEVfUEZJVF9TVFJFVENIX1RFWFQgKDE8PDEpCisjZGVmaW5lIEFTTEVfUEZJVF9TVFJFVENIX0dGWCAoMTw8MikKKworLyogUFdNIGZyZXF1ZW5jeSBhbmQgbWluaW11bSBicmlnaHRuZXNzICovCisjZGVmaW5lIEFTTEVfUEZNQl9CUklHSFRORVNTX01BU0sgKDB4ZmYpCisjZGVmaW5lIEFTTEVfUEZNQl9CUklHSFRORVNTX1ZBTElEICgxPDw4KQorI2RlZmluZSBBU0xFX1BGTUJfUFdNX01BU0sgKDB4N2ZmZmZlMDApCisjZGVmaW5lIEFTTEVfUEZNQl9QV01fVkFMSUQgKDE8PDMxKQorCisjZGVmaW5lIEFTTEVfQ0JMVl9WQUxJRCAgICAgICAgICgxPDwzMSkKKworc3RhdGljIHUzMiBhc2xlX3NldF9iYWNrbGlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIGJjbHApCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgb3ByZWdpb25fYXNsZSAqYXNsZSA9IGRldl9wcml2LT5vcHJlZ2lvbi5hc2xlOworCXUzMiBibGNfcHdtX2N0bCwgYmxjX3B3bV9jdGwyOworCisJaWYgKCEoYmNscCAmIEFTTEVfQkNMUF9WQUxJRCkpCisJCXJldHVybiBBU0xFX0JBQ0tMSUdIVF9GQUlMOworCisJYmNscCAmPSBBU0xFX0JDTFBfTVNLOworCWlmIChiY2xwIDwgMCB8fCBiY2xwID4gMjU1KQorCQlyZXR1cm4gQVNMRV9CQUNLTElHSFRfRkFJTDsKKworCWJsY19wd21fY3RsID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKKwlibGNfcHdtX2N0bCAmPSB+QkFDS0xJR0hUX0RVVFlfQ1lDTEVfTUFTSzsKKwlibGNfcHdtX2N0bDIgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwyKTsKKworCWlmIChibGNfcHdtX2N0bDIgJiBCTE1fQ09NQklOQVRJT05fTU9ERSkKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYtPnBkZXYsIFBDSV9MQlBDLCBiY2xwKTsKKwllbHNlCisJCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsIGJsY19wd21fY3RsIHwgKChiY2xwICogMHgxMDEpLTEpKTsKKworCWFzbGUtPmNibHYgPSAoYmNscCoweDY0KS8weGZmIHwgQVNMRV9DQkxWX1ZBTElEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgYXNsZV9zZXRfYWxzX2lsbHVtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBhbHNpKQoreworCS8qIGFsc2kgaXMgdGhlIGN1cnJlbnQgQUxTIHJlYWRpbmcgaW4gbHV4LiAwIGluZGljYXRlcyBiZWxvdyBzZW5zb3IKKwkgICByYW5nZSwgMHhmZmZmIGluZGljYXRlcyBhYm92ZSBzZW5zb3IgcmFuZ2UuIDEtMHhmZmZlIGFyZSB2YWxpZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGFzbGVfc2V0X3B3bV9mcmVxKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBwZm1iKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKHBmbWIgJiBBU0xFX1BGTUJfUFdNX1ZBTElEKSB7CisJCXUzMiBibGNfcHdtX2N0bCA9IEk5MTVfUkVBRChCTENfUFdNX0NUTCk7CisJCXUzMiBwd20gPSBwZm1iICYgQVNMRV9QRk1CX1BXTV9NQVNLOworCQlibGNfcHdtX2N0bCAmPSBCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLOworCQlwd20gPSBwd20gPj4gOTsKKwkJLyogRklYTUUgLSB3aGF0IGRvIHdlIGRvIHdpdGggdGhlIFBXTT8gKi8KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgYXNsZV9zZXRfcGZpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgcGZpdCkKK3sKKwkvKiBQYW5lbCBmaXR0aW5nIGlzIGN1cnJlbnRseSBjb250cm9sbGVkIGJ5IHRoZSBYIGNvZGUsIHNvIHRoaXMgaXMgYQorCSAgIG5vb3AgdW50aWwgbW9kZXNldHRpbmcgc3VwcG9ydCB3b3JrcyBmdWxseSAqLworCWlmICghKHBmaXQgJiBBU0xFX1BGSVRfVkFMSUQpKQorCQlyZXR1cm4gQVNMRV9QRklUX0ZBSUw7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgb3ByZWdpb25fYXNsZV9pbnRyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgb3ByZWdpb25fYXNsZSAqYXNsZSA9IGRldl9wcml2LT5vcHJlZ2lvbi5hc2xlOworCXUzMiBhc2xlX3N0YXQgPSAwOworCXUzMiBhc2xlX3JlcTsKKworCWlmICghYXNsZSkKKwkJcmV0dXJuOworCisJYXNsZV9yZXEgPSBhc2xlLT5hc2xjICYgQVNMRV9SRVFfTVNLOworCisJaWYgKCFhc2xlX3JlcSkgeworCQlEUk1fREVCVUcoIm5vbiBhc2xlIHNldCByZXF1ZXN0Pz9cbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGFzbGVfcmVxICYgQVNMRV9TRVRfQUxTX0lMTFVNKQorCQlhc2xlX3N0YXQgfD0gYXNsZV9zZXRfYWxzX2lsbHVtKGRldiwgYXNsZS0+YWxzaSk7CisKKwlpZiAoYXNsZV9yZXEgJiBBU0xFX1NFVF9CQUNLTElHSFQpCisJCWFzbGVfc3RhdCB8PSBhc2xlX3NldF9iYWNrbGlnaHQoZGV2LCBhc2xlLT5iY2xwKTsKKworCWlmIChhc2xlX3JlcSAmIEFTTEVfU0VUX1BGSVQpCisJCWFzbGVfc3RhdCB8PSBhc2xlX3NldF9wZml0KGRldiwgYXNsZS0+cGZpdCk7CisKKwlpZiAoYXNsZV9yZXEgJiBBU0xFX1NFVF9QV01fRlJFUSkKKwkJYXNsZV9zdGF0IHw9IGFzbGVfc2V0X3B3bV9mcmVxKGRldiwgYXNsZS0+cGZtYik7CisKKwlhc2xlLT5hc2xjID0gYXNsZV9zdGF0OworfQorCisjZGVmaW5lIEFTTEVfQUxTX0VOICAgICgxPDwwKQorI2RlZmluZSBBU0xFX0JMQ19FTiAgICAoMTw8MSkKKyNkZWZpbmUgQVNMRV9QRklUX0VOICAgKDE8PDIpCisjZGVmaW5lIEFTTEVfUEZNQl9FTiAgICgxPDwzKQorCit2b2lkIG9wcmVnaW9uX2VuYWJsZV9hc2xlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgb3ByZWdpb25fYXNsZSAqYXNsZSA9IGRldl9wcml2LT5vcHJlZ2lvbi5hc2xlOworCisJaWYgKGFzbGUpIHsKKwkJdTMyIHBpcGViX3N0YXRzID0gSTkxNV9SRUFEKFBJUEVCU1RBVCk7CisJCWlmIChJU19NT0JJTEUoZGV2KSkgeworCQkJLyogTWFueSBkZXZpY2VzIHRyaWdnZXIgZXZlbnRzIHdpdGggYSB3cml0ZSB0byB0aGUKKwkJCSAgIGxlZ2FjeSBiYWNrbGlnaHQgY29udHJvbGxlciwgc28gd2UgbmVlZCB0byBlbnN1cmUKKwkJCSAgIHRoYXQgaXQncyBhYmxlIHRvIGdlbmVyYXRlIGludGVycnVwdHMgKi8KKwkJCUk5MTVfV1JJVEUoUElQRUJTVEFULCBwaXBlYl9zdGF0cyB8PQorCQkJCSAgIEk5MTVfTEVHQUNZX0JMQ19FVkVOVF9FTkFCTEUpOworCQkJaTkxNV9lbmFibGVfaXJxKGRldl9wcml2LCBJOTE1X0FTTEVfSU5URVJSVVBUIHwKKwkJCQkJSTkxNV9ESVNQTEFZX1BJUEVfQl9FVkVOVF9JTlRFUlJVUFQpOworCQl9IGVsc2UKKwkJCWk5MTVfZW5hYmxlX2lycShkZXZfcHJpdiwgSTkxNV9BU0xFX0lOVEVSUlVQVCk7CisKKwkJYXNsZS0+dGNoZSA9IEFTTEVfQUxTX0VOIHwgQVNMRV9CTENfRU4gfCBBU0xFX1BGSVRfRU4gfAorCQkJQVNMRV9QRk1CX0VOOworCQlhc2xlLT5hcmR5ID0gMTsKKwl9Cit9CisKKyNkZWZpbmUgQUNQSV9FVl9ESVNQTEFZX1NXSVRDSCAoMTw8MCkKKyNkZWZpbmUgQUNQSV9FVl9MSUQgICAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgQUNQSV9FVl9ET0NLICAgICAgICAgICAoMTw8MikKKworc3RhdGljIHN0cnVjdCBpbnRlbF9vcHJlZ2lvbiAqc3lzdGVtX29wcmVnaW9uOworCitpbnQgaW50ZWxfb3ByZWdpb25fdmlkZW9fZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkgICAgICAgdm9pZCAqZGF0YSkKK3sKKwkvKiBUaGUgb25seSB2aWRlbyBldmVudHMgcmVsZXZhbnQgdG8gb3ByZWdpb24gYXJlIDB4ODAuIFRoZXNlIGluZGljYXRlCisJICAgZWl0aGVyIGEgZG9ja2luZyBldmVudCwgbGlkIHN3aXRjaCBvciBkaXNwbGF5IHN3aXRjaCByZXF1ZXN0LiBJbgorCSAgIExpbnV4LCB0aGVzZSBhcmUgaGFuZGxlZCBieSB0aGUgZG9jaywgYnV0dG9uIGFuZCB2aWRlbyBkcml2ZXJzLgorCSAgIFdlIG1pZ2h0IHdhbnQgdG8gZml4IHRoZSB2aWRlbyBkcml2ZXIgdG8gYmUgb3ByZWdpb24tYXdhcmUgaW4KKwkgICBmdXR1cmUsIGJ1dCByaWdodCBub3cgd2UganVzdCBpbmRpY2F0ZSB0byB0aGUgZmlybXdhcmUgdGhhdCB0aGUKKwkgICByZXF1ZXN0IGhhcyBiZWVuIGhhbmRsZWQgKi8KKworCXN0cnVjdCBvcHJlZ2lvbl9hY3BpICphY3BpOworCisJaWYgKCFzeXN0ZW1fb3ByZWdpb24pCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCWFjcGkgPSBzeXN0ZW1fb3ByZWdpb24tPmFjcGk7CisJYWNwaS0+Y3N0cyA9IDA7CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGludGVsX29wcmVnaW9uX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gaW50ZWxfb3ByZWdpb25fdmlkZW9fZXZlbnQsCit9OworCitpbnQgaW50ZWxfb3ByZWdpb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX29wcmVnaW9uICpvcHJlZ2lvbiA9ICZkZXZfcHJpdi0+b3ByZWdpb247CisJdm9pZCAqYmFzZTsKKwl1MzIgYXNscywgbWJveGVzOworCWludCBlcnIgPSAwOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldi0+cGRldiwgUENJX0FTTFMsICZhc2xzKTsKKwlEUk1fREVCVUcoImdyYXBoaWMgb3ByZWdpb24gcGh5c2ljYWwgYWRkcjogMHgleFxuIiwgYXNscyk7CisJaWYgKGFzbHMgPT0gMCkgeworCQlEUk1fREVCVUcoIkFDUEkgT3BSZWdpb24gbm90IHN1cHBvcnRlZCFcbiIpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCWJhc2UgPSBpb3JlbWFwKGFzbHMsIE9QUkVHSU9OX1NaKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJb3ByZWdpb24tPmhlYWRlciA9IGJhc2U7CisJaWYgKG1lbWNtcChvcHJlZ2lvbi0+aGVhZGVyLT5zaWduYXR1cmUsIE9QUkVHSU9OX1NJR05BVFVSRSwgMTYpKSB7CisJCURSTV9ERUJVRygib3ByZWdpb24gc2lnbmF0dXJlIG1pc21hdGNoXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfb3V0OworCX0KKworCW1ib3hlcyA9IG9wcmVnaW9uLT5oZWFkZXItPm1ib3hlczsKKwlpZiAobWJveGVzICYgTUJPWF9BQ1BJKSB7CisJCURSTV9ERUJVRygiUHVibGljIEFDUEkgbWV0aG9kcyBzdXBwb3J0ZWRcbiIpOworCQlvcHJlZ2lvbi0+YWNwaSA9IGJhc2UgKyBPUFJFR0lPTl9BQ1BJX09GRlNFVDsKKwl9IGVsc2UgeworCQlEUk1fREVCVUcoIlB1YmxpYyBBQ1BJIG1ldGhvZHMgbm90IHN1cHBvcnRlZFxuIik7CisJCWVyciA9IC1FTk9UU1VQUDsKKwkJZ290byBlcnJfb3V0OworCX0KKwlvcHJlZ2lvbi0+ZW5hYmxlZCA9IDE7CisKKwlpZiAobWJveGVzICYgTUJPWF9TV1NDSSkgeworCQlEUk1fREVCVUcoIlNXU0NJIHN1cHBvcnRlZFxuIik7CisJCW9wcmVnaW9uLT5zd3NjaSA9IGJhc2UgKyBPUFJFR0lPTl9TV1NDSV9PRkZTRVQ7CisJfQorCWlmIChtYm94ZXMgJiBNQk9YX0FTTEUpIHsKKwkJRFJNX0RFQlVHKCJBU0xFIHN1cHBvcnRlZFxuIik7CisJCW9wcmVnaW9uLT5hc2xlID0gYmFzZSArIE9QUkVHSU9OX0FTTEVfT0ZGU0VUOworCX0KKworCS8qIE5vdGlmeSBCSU9TIHdlIGFyZSByZWFkeSB0byBoYW5kbGUgQUNQSSB2aWRlbyBleHQgbm90aWZzLgorCSAqIFJpZ2h0IG5vdywgYWxsIHRoZSBldmVudHMgYXJlIGhhbmRsZWQgYnkgdGhlIEFDUEkgdmlkZW8gbW9kdWxlLgorCSAqIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGVtLiAqLworCW9wcmVnaW9uLT5hY3BpLT5jc3RzID0gMDsKKwlvcHJlZ2lvbi0+YWNwaS0+ZHJkeSA9IDE7CisKKwlzeXN0ZW1fb3ByZWdpb24gPSBvcHJlZ2lvbjsKKwlyZWdpc3Rlcl9hY3BpX25vdGlmaWVyKCZpbnRlbF9vcHJlZ2lvbl9ub3RpZmllcik7CisKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwlpb3VubWFwKG9wcmVnaW9uLT5oZWFkZXIpOworCW9wcmVnaW9uLT5oZWFkZXIgPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgaW50ZWxfb3ByZWdpb25fZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX29wcmVnaW9uICpvcHJlZ2lvbiA9ICZkZXZfcHJpdi0+b3ByZWdpb247CisKKwlpZiAoIW9wcmVnaW9uLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwlvcHJlZ2lvbi0+YWNwaS0+ZHJkeSA9IDA7CisKKwlzeXN0ZW1fb3ByZWdpb24gPSBOVUxMOworCXVucmVnaXN0ZXJfYWNwaV9ub3RpZmllcigmaW50ZWxfb3ByZWdpb25fbm90aWZpZXIpOworCisJLyoganVzdCBjbGVhciBhbGwgb3ByZWdpb24gbWVtb3J5IHBvaW50ZXJzIG5vdyAqLworCWlvdW5tYXAob3ByZWdpb24tPmhlYWRlcik7CisJb3ByZWdpb24tPmhlYWRlciA9IE5VTEw7CisJb3ByZWdpb24tPmFjcGkgPSBOVUxMOworCW9wcmVnaW9uLT5zd3NjaSA9IE5VTEw7CisJb3ByZWdpb24tPmFzbGUgPSBOVUxMOworCisJb3ByZWdpb24tPmVuYWJsZWQgPSAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyZDlmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTAsMCArMSwxNDE3IEBACisvKiBDb3B5cmlnaHQgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRVTkdTVEVOIEdSQVBISUNTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0k5MTVfUkVHX0hfCisjZGVmaW5lIF9JOTE1X1JFR19IXworCisvKgorICogVGhlIEJyaWRnZSBkZXZpY2UncyBQQ0kgY29uZmlnIHNwYWNlIGhhcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqIGZiIGFwZXJ0dXJlIHNpemUgYW5kIHRoZSBhbW91bnQgb2YgcHJlLXJlc2VydmVkIG1lbW9yeS4KKyAqLworI2RlZmluZSBJTlRFTF9HTUNIX0NUUkwJCTB4NTIKKyNkZWZpbmUgSU5URUxfR01DSF9FTkFCTEVECTB4NAorI2RlZmluZSBJTlRFTF9HTUNIX01FTV9NQVNLCTB4MQorI2RlZmluZSBJTlRFTF9HTUNIX01FTV82NE0JMHgxCisjZGVmaW5lIElOVEVMX0dNQ0hfTUVNXzEyOE0JMAorCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19NQVNLCQkoMHg3IDw8IDQpCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19ESVNBQkxFRAkoMHgwIDw8IDQpCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMU0JKDB4MSA8PCA0KQorI2RlZmluZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzRNCSgweDIgPDwgNCkKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl84TQkoMHgzIDw8IDQpCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMTZNCSgweDQgPDwgNCkKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8zMk0JKDB4NSA8PCA0KQorCisjZGVmaW5lIElOVEVMXzkxNUdfR01DSF9HTVNfU1RPTEVOXzQ4TQkoMHg2IDw8IDQpCisjZGVmaW5lIElOVEVMXzkxNUdfR01DSF9HTVNfU1RPTEVOXzY0TQkoMHg3IDw8IDQpCisKKy8qIFBDSSBjb25maWcgc3BhY2UgKi8KKworI2RlZmluZSBIUExMQ0MJMHhjMCAvKiA4NTUgb25seSAqLworI2RlZmluZSAgIEdDX0NMT0NLX0NPTlRST0xfTUFTSwkJKDMgPDwgMCkKKyNkZWZpbmUgICBHQ19DTE9DS18xMzNfMjAwCQkoMCA8PCAwKQorI2RlZmluZSAgIEdDX0NMT0NLXzEwMF8yMDAJCSgxIDw8IDApCisjZGVmaW5lICAgR0NfQ0xPQ0tfMTAwXzEzMwkJKDIgPDwgMCkKKyNkZWZpbmUgICBHQ19DTE9DS18xNjZfMjUwCQkoMyA8PCAwKQorI2RlZmluZSBHQ0ZHQwkweGYwIC8qIDkxNSsgb25seSAqLworI2RlZmluZSAgIEdDX0xPV19GUkVRVUVOQ1lfRU5BQkxFCSgxIDw8IDcpCisjZGVmaW5lICAgR0NfRElTUExBWV9DTE9DS18xOTBfMjAwX01IWgkoMCA8PCA0KQorI2RlZmluZSAgIEdDX0RJU1BMQVlfQ0xPQ0tfMzMzX01IWgkoNCA8PCA0KQorI2RlZmluZSAgIEdDX0RJU1BMQVlfQ0xPQ0tfTUFTSwkJKDcgPDwgNCkKKyNkZWZpbmUgTEJCCTB4ZjQKKworLyogVkdBIHN0dWZmICovCisKKyNkZWZpbmUgVkdBX1NUMDFfTURBIDB4M2JhCisjZGVmaW5lIFZHQV9TVDAxX0NHQSAweDNkYQorCisjZGVmaW5lIFZHQV9NU1JfV1JJVEUgMHgzYzIKKyNkZWZpbmUgVkdBX01TUl9SRUFEIDB4M2NjCisjZGVmaW5lICAgVkdBX01TUl9NRU1fRU4gKDE8PDEpCisjZGVmaW5lICAgVkdBX01TUl9DR0FfTU9ERSAoMTw8MCkKKworI2RlZmluZSBWR0FfU1JfSU5ERVggMHgzYzQKKyNkZWZpbmUgVkdBX1NSX0RBVEEgMHgzYzUKKworI2RlZmluZSBWR0FfQVJfSU5ERVggMHgzYzAKKyNkZWZpbmUgICBWR0FfQVJfVklEX0VOICgxPDw1KQorI2RlZmluZSBWR0FfQVJfREFUQV9XUklURSAweDNjMAorI2RlZmluZSBWR0FfQVJfREFUQV9SRUFEIDB4M2MxCisKKyNkZWZpbmUgVkdBX0dSX0lOREVYIDB4M2NlCisjZGVmaW5lIFZHQV9HUl9EQVRBIDB4M2NmCisvKiBHUjA1ICovCisjZGVmaW5lICAgVkdBX0dSX01FTV9SRUFEX01PREVfU0hJRlQgMworI2RlZmluZSAgICAgVkdBX0dSX01FTV9SRUFEX01PREVfUExBTkUgMQorLyogR1IwNiAqLworI2RlZmluZSAgIFZHQV9HUl9NRU1fTU9ERV9NQVNLIDB4YworI2RlZmluZSAgIFZHQV9HUl9NRU1fTU9ERV9TSElGVCAyCisjZGVmaW5lICAgVkdBX0dSX01FTV9BMDAwMF9BRkZGRiAwCisjZGVmaW5lICAgVkdBX0dSX01FTV9BMDAwMF9CRkZGRiAxCisjZGVmaW5lICAgVkdBX0dSX01FTV9CMDAwMF9CN0ZGRiAyCisjZGVmaW5lICAgVkdBX0dSX01FTV9CMDAwMF9CRkZGRiAzCisKKyNkZWZpbmUgVkdBX0RBQ01BU0sgMHgzYzYKKyNkZWZpbmUgVkdBX0RBQ1JYIDB4M2M3CisjZGVmaW5lIFZHQV9EQUNXWCAweDNjOAorI2RlZmluZSBWR0FfREFDREFUQSAweDNjOQorCisjZGVmaW5lIFZHQV9DUl9JTkRFWF9NREEgMHgzYjQKKyNkZWZpbmUgVkdBX0NSX0RBVEFfTURBIDB4M2I1CisjZGVmaW5lIFZHQV9DUl9JTkRFWF9DR0EgMHgzZDQKKyNkZWZpbmUgVkdBX0NSX0RBVEFfQ0dBIDB4M2Q1CisKKy8qCisgKiBNZW1vcnkgaW50ZXJmYWNlIGluc3RydWN0aW9ucyB1c2VkIGJ5IHRoZSBrZXJuZWwKKyAqLworI2RlZmluZSBNSV9JTlNUUihvcGNvZGUsIGZsYWdzKSAoKChvcGNvZGUpIDw8IDIzKSB8IChmbGFncykpCisKKyNkZWZpbmUgTUlfTk9PUAkJCU1JX0lOU1RSKDAsIDApCisjZGVmaW5lIE1JX1VTRVJfSU5URVJSVVBUCU1JX0lOU1RSKDB4MDIsIDApCisjZGVmaW5lIE1JX1dBSVRfRk9SX0VWRU5UICAgICAgIE1JX0lOU1RSKDB4MDMsIDApCisjZGVmaW5lICAgTUlfV0FJVF9GT1JfUExBTkVfQl9GTElQICAgICAgKDE8PDYpCisjZGVmaW5lICAgTUlfV0FJVF9GT1JfUExBTkVfQV9GTElQICAgICAgKDE8PDIpCisjZGVmaW5lICAgTUlfV0FJVF9GT1JfUExBTkVfQV9TQ0FOTElORVMgKDE8PDEpCisjZGVmaW5lIE1JX0ZMVVNICQlNSV9JTlNUUigweDA0LCAwKQorI2RlZmluZSAgIE1JX1JFQURfRkxVU0gJCSgxIDw8IDApCisjZGVmaW5lICAgTUlfRVhFX0ZMVVNICQkoMSA8PCAxKQorI2RlZmluZSAgIE1JX05PX1dSSVRFX0ZMVVNICSgxIDw8IDIpCisjZGVmaW5lICAgTUlfU0NFTkVfQ09VTlQJKDEgPDwgMykgLyoganVzdCBpbmNyZW1lbnQgc2NlbmUgY291bnQgKi8KKyNkZWZpbmUgICBNSV9FTkRfU0NFTkUJCSgxIDw8IDQpIC8qIGZsdXNoIGJpbm5lciBhbmQgaW5jciBzY2VuZSBjb3VudCAqLworI2RlZmluZSBNSV9CQVRDSF9CVUZGRVJfRU5ECU1JX0lOU1RSKDB4MGEsIDApCisjZGVmaW5lIE1JX1JFUE9SVF9IRUFECQlNSV9JTlNUUigweDA3LCAwKQorI2RlZmluZSBNSV9MT0FEX1NDQU5fTElORVNfSU5DTCBNSV9JTlNUUigweDEyLCAwKQorI2RlZmluZSBNSV9TVE9SRV9EV09SRF9JTU0JTUlfSU5TVFIoMHgyMCwgMSkKKyNkZWZpbmUgICBNSV9NRU1fVklSVFVBTAkoMSA8PCAyMikgLyogOTY1KyBvbmx5ICovCisjZGVmaW5lIE1JX1NUT1JFX0RXT1JEX0lOREVYCU1JX0lOU1RSKDB4MjEsIDEpCisjZGVmaW5lICAgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQgMgorI2RlZmluZSBNSV9MT0FEX1JFR0lTVEVSX0lNTQlNSV9JTlNUUigweDIyLCAxKQorI2RlZmluZSBNSV9CQVRDSF9CVUZGRVIJCU1JX0lOU1RSKDB4MzAsIDEpCisjZGVmaW5lICAgTUlfQkFUQ0hfTk9OX1NFQ1VSRQkoMSkKKyNkZWZpbmUgICBNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUgKDE8PDgpCisjZGVmaW5lIE1JX0JBVENIX0JVRkZFUl9TVEFSVAlNSV9JTlNUUigweDMxLCAwKQorCisvKgorICogM0QgaW5zdHJ1Y3Rpb25zIHVzZWQgYnkgdGhlIGtlcm5lbAorICovCisjZGVmaW5lIEdGWF9JTlNUUihvcGNvZGUsIGZsYWdzKSAoKDB4MyA8PCAyOSkgfCAoKG9wY29kZSkgPDwgMjQpIHwgKGZsYWdzKSkKKworI2RlZmluZSBHRlhfT1BfUkFTVEVSX1JVTEVTICAgICgoMHgzPDwyOSl8KDB4Nzw8MjQpKQorI2RlZmluZSBHRlhfT1BfU0NJU1NPUiAgICAgICAgICgoMHgzPDwyOSl8KDB4MWM8PDI0KXwoMHgxMDw8MTkpKQorI2RlZmluZSAgIFNDX1VQREFURV9TQ0lTU09SICAgICAgICgweDE8PDEpCisjZGVmaW5lICAgU0NfRU5BQkxFX01BU0sgICAgICAgICAgKDB4MTw8MCkKKyNkZWZpbmUgICBTQ19FTkFCTEUgICAgICAgICAgICAgICAoMHgxPDwwKQorI2RlZmluZSBHRlhfT1BfTE9BRF9JTkRJUkVDVCAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg3PDwxNikpCisjZGVmaW5lIEdGWF9PUF9TQ0lTU09SX0lORk8gICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgxPDwxNil8KDB4MSkpCisjZGVmaW5lICAgU0NJX1lNSU5fTUFTSyAgICAgICgweGZmZmY8PDE2KQorI2RlZmluZSAgIFNDSV9YTUlOX01BU0sgICAgICAoMHhmZmZmPDwwKQorI2RlZmluZSAgIFNDSV9ZTUFYX01BU0sgICAgICAoMHhmZmZmPDwxNikKKyNkZWZpbmUgICBTQ0lfWE1BWF9NQVNLICAgICAgKDB4ZmZmZjw8MCkKKyNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfRU5BQkxFCSAoKDB4Mzw8MjkpfCgweDFjPDwyNCl8KDB4MTA8PDE5KSkKKyNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfUkVDVAkgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgxPDwxNil8MSkKKyNkZWZpbmUgR0ZYX09QX0NPTE9SX0ZBQ1RPUiAgICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHgxPDwxNil8MHgwKQorI2RlZmluZSBHRlhfT1BfU1RJUFBMRSAgICAgICAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgzPDwxNikpCisjZGVmaW5lIEdGWF9PUF9NQVBfSU5GTyAgICAgICAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8MHg0KQorI2RlZmluZSBHRlhfT1BfREVTVEJVRkZFUl9WQVJTICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDg1PDwxNil8MHgwKQorI2RlZmluZSBHRlhfT1BfREVTVEJVRkZFUl9JTkZPCSAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4OGU8PDE2KXwxKQorI2RlZmluZSBHRlhfT1BfRFJBV1JFQ1RfSU5GTyAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgwPDwxNil8KDB4MykpCisjZGVmaW5lIEdGWF9PUF9EUkFXUkVDVF9JTkZPX0k5NjUgICgoMHg3OTAwPDwxNil8MHgyKQorI2RlZmluZSBTUkNfQ09QWV9CTFRfQ01EICAgICAgICAgICAgICAgICgoMjw8MjkpfCgweDQzPDwyMil8NCkKKyNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX0NNRAkJKCgyPDwyOSl8KDB4NTM8PDIyKXw2KQorI2RlZmluZSBYWV9NT05PX1NSQ19DT1BZX0lNTV9CTFQJKCgyPDwyOSl8KDB4NzE8PDIyKXw1KQorI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfQUxQSEEJKDE8PDIxKQorI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfUkdCCSgxPDwyMCkKKyNkZWZpbmUgICBCTFRfREVQVEhfOAkJCSgwPDwyNCkKKyNkZWZpbmUgICBCTFRfREVQVEhfMTZfNTY1CQkoMTw8MjQpCisjZGVmaW5lICAgQkxUX0RFUFRIXzE2XzE1NTUJCSgyPDwyNCkKKyNkZWZpbmUgICBCTFRfREVQVEhfMzIJCQkoMzw8MjQpCisjZGVmaW5lICAgQkxUX1JPUF9HWENPUFkJCSgweGNjPDwxNikKKyNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX1NSQ19USUxFRAkoMTw8MTUpIC8qIDk2NSsgb25seSAqLworI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfRFNUX1RJTEVECSgxPDwxMSkgLyogOTY1KyBvbmx5ICovCisjZGVmaW5lIENNRF9PUF9ESVNQTEFZQlVGRkVSX0lORk8gKCgweDA8PDI5KXwoMHgxNDw8MjMpfDIpCisjZGVmaW5lICAgQVNZTkNfRkxJUCAgICAgICAgICAgICAgICAoMTw8MjIpCisjZGVmaW5lICAgRElTUExBWV9QTEFORV9BICAgICAgICAgICAoMDw8MjApCisjZGVmaW5lICAgRElTUExBWV9QTEFORV9CICAgICAgICAgICAoMTw8MjApCisKKy8qCisgKiBJbnN0cnVjdGlvbiBhbmQgaW50ZXJydXB0IGNvbnRyb2wgcmVncworICovCisKKyNkZWZpbmUgUFJCMF9UQUlMCTB4MDIwMzAKKyNkZWZpbmUgUFJCMF9IRUFECTB4MDIwMzQKKyNkZWZpbmUgUFJCMF9TVEFSVAkweDAyMDM4CisjZGVmaW5lIFBSQjBfQ1RMCTB4MDIwM2MKKyNkZWZpbmUgICBUQUlMX0FERFIJCTB4MDAxRkZGRjgKKyNkZWZpbmUgICBIRUFEX1dSQVBfQ09VTlQJMHhGRkUwMDAwMAorI2RlZmluZSAgIEhFQURfV1JBUF9PTkUJCTB4MDAyMDAwMDAKKyNkZWZpbmUgICBIRUFEX0FERFIJCTB4MDAxRkZGRkMKKyNkZWZpbmUgICBSSU5HX05SX1BBR0VTCQkweDAwMUZGMDAwCisjZGVmaW5lICAgUklOR19SRVBPUlRfTUFTSwkweDAwMDAwMDA2CisjZGVmaW5lICAgUklOR19SRVBPUlRfNjRLCTB4MDAwMDAwMDIKKyNkZWZpbmUgICBSSU5HX1JFUE9SVF8xMjhLCTB4MDAwMDAwMDQKKyNkZWZpbmUgICBSSU5HX05PX1JFUE9SVAkweDAwMDAwMDAwCisjZGVmaW5lICAgUklOR19WQUxJRF9NQVNLCTB4MDAwMDAwMDEKKyNkZWZpbmUgICBSSU5HX1ZBTElECQkweDAwMDAwMDAxCisjZGVmaW5lICAgUklOR19JTlZBTElECQkweDAwMDAwMDAwCisjZGVmaW5lIFBSQjFfVEFJTAkweDAyMDQwIC8qIDkxNSsgb25seSAqLworI2RlZmluZSBQUkIxX0hFQUQJMHgwMjA0NCAvKiA5MTUrIG9ubHkgKi8KKyNkZWZpbmUgUFJCMV9TVEFSVAkweDAyMDQ4IC8qIDkxNSsgb25seSAqLworI2RlZmluZSBQUkIxX0NUTAkweDAyMDRjIC8qIDkxNSsgb25seSAqLworI2RlZmluZSBBQ1RIRF9JOTY1CTB4MDIwNzQKKyNkZWZpbmUgSFdTX1BHQQkJMHgwMjA4MAorI2RlZmluZSBIV1NfQUREUkVTU19NQVNLCTB4ZmZmZmYwMDAKKyNkZWZpbmUgSFdTX1NUQVJUX0FERFJFU1NfU0hJRlQJNAorI2RlZmluZSBJUEVJUgkJMHgwMjA4OAorI2RlZmluZSBOT1BJRAkJMHgwMjA5NAorI2RlZmluZSBIV1NUQU0JCTB4MDIwOTgKKyNkZWZpbmUgU0NQRDAJCTB4MDIwOWMgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lIElFUgkJMHgwMjBhMAorI2RlZmluZSBJSVIJCTB4MDIwYTQKKyNkZWZpbmUgSU1SCQkweDAyMGE4CisjZGVmaW5lIElTUgkJMHgwMjBhYworI2RlZmluZSAgIEk5MTVfUElQRV9DT05UUk9MX05PVElGWV9JTlRFUlJVUFQJCSgxPDwxOCkKKyNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUE9SVF9JTlRFUlJVUFQJCQkoMTw8MTcpCisjZGVmaW5lICAgSTkxNV9SRU5ERVJfQ09NTUFORF9QQVJTRVJfRVJST1JfSU5URVJSVVBUCSgxPDwxNSkKKyNkZWZpbmUgICBJOTE1X0dNQ0hfVEhFUk1BTF9TRU5TT1JfRVZFTlRfSU5URVJSVVBUCSgxPDwxNCkKKyNkZWZpbmUgICBJOTE1X0hXQl9PT01fSU5URVJSVVBUCQkJKDE8PDEzKQorI2RlZmluZSAgIEk5MTVfU1lOQ19TVEFUVVNfSU5URVJSVVBUCQkJKDE8PDEyKQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QTEFORV9BX0ZMSVBfUEVORElOR19JTlRFUlJVUFQJKDE8PDExKQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QTEFORV9CX0ZMSVBfUEVORElOR19JTlRFUlJVUFQJKDE8PDEwKQorI2RlZmluZSAgIEk5MTVfT1ZFUkxBWV9QTEFORV9GTElQX1BFTkRJTkdfSU5URVJSVVBUCSgxPDw5KQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QTEFORV9DX0ZMSVBfUEVORElOR19JTlRFUlJVUFQJKDE8PDgpCisjZGVmaW5lICAgSTkxNV9ESVNQTEFZX1BJUEVfQV9WQkxBTktfSU5URVJSVVBUCQkoMTw8NykKKyNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUElQRV9BX0VWRU5UX0lOVEVSUlVQVAkJKDE8PDYpCisjZGVmaW5lICAgSTkxNV9ESVNQTEFZX1BJUEVfQl9WQkxBTktfSU5URVJSVVBUCQkoMTw8NSkKKyNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUElQRV9CX0VWRU5UX0lOVEVSUlVQVAkJKDE8PDQpCisjZGVmaW5lICAgSTkxNV9ERUJVR19JTlRFUlJVUFQJCQkJKDE8PDIpCisjZGVmaW5lICAgSTkxNV9VU0VSX0lOVEVSUlVQVAkJCQkoMTw8MSkKKyNkZWZpbmUgICBJOTE1X0FTTEVfSU5URVJSVVBUCQkJCSgxPDwwKQorI2RlZmluZSBFSVIJCTB4MDIwYjAKKyNkZWZpbmUgRU1SCQkweDAyMGI0CisjZGVmaW5lIEVTUgkJMHgwMjBiOAorI2RlZmluZSBJTlNUUE0JICAgICAgICAweDAyMGMwCisjZGVmaW5lIEFDVEhECSAgICAgICAgMHgwMjBjOAorI2RlZmluZSBGV19CTEMJCTB4MDIwZDgKKyNkZWZpbmUgRldfQkxDX1NFTEYJMHgwMjBlMCAvKiA5MTUrIG9ubHkgKi8KKyNkZWZpbmUgTUlfQVJCX1NUQVRFCTB4MDIwZTQgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lIENBQ0hFX01PREVfMAkweDAyMTIwIC8qIDkxNSsgb25seSAqLworI2RlZmluZSAgIENNMF9NQVNLX1NISUZUICAgICAgICAgIDE2CisjZGVmaW5lICAgQ00wX0laX09QVF9ESVNBQkxFICAgICAgKDE8PDYpCisjZGVmaW5lICAgQ00wX1pSX09QVF9ESVNBQkxFICAgICAgKDE8PDUpCisjZGVmaW5lICAgQ00wX0RFUFRIX0VWSUNUX0RJU0FCTEUgKDE8PDQpCisjZGVmaW5lICAgQ00wX0NPTE9SX0VWSUNUX0RJU0FCTEUgKDE8PDMpCisjZGVmaW5lICAgQ00wX0RFUFRIX1dSSVRFX0RJU0FCTEUgKDE8PDEpCisjZGVmaW5lICAgQ00wX1JDX09QX0ZMVVNIX0RJU0FCTEUgKDE8PDApCisjZGVmaW5lIEdGWF9GTFNIX0NOVEwJMHgwMjE3MCAvKiA5MTUrIG9ubHkgKi8KKworLyoKKyAqIEZyYW1lYnVmZmVyIGNvbXByZXNzaW9uICg5MTUrIG9ubHkpCisgKi8KKworI2RlZmluZSBGQkNfQ0ZCX0JBU0UJCTB4MDMyMDAgLyogNGsgcGFnZSBhbGlnbmVkICovCisjZGVmaW5lIEZCQ19MTF9CQVNFCQkweDAzMjA0IC8qIDRrIHBhZ2UgYWxpZ25lZCAqLworI2RlZmluZSBGQkNfQ09OVFJPTAkJMHgwMzIwOAorI2RlZmluZSAgIEZCQ19DVExfRU4JCSgxPDwzMSkKKyNkZWZpbmUgICBGQkNfQ1RMX1BFUklPRElDCSgxPDwzMCkKKyNkZWZpbmUgICBGQkNfQ1RMX0lOVEVSVkFMX1NISUZUICgxNikKKyNkZWZpbmUgICBGQkNfQ1RMX1VOQ09NUFJFU1NJQkxFICgxPDwxNCkKKyNkZWZpbmUgICBGQkNfQ1RMX1NUUklERV9TSElGVAkoNSkKKyNkZWZpbmUgICBGQkNfQ1RMX0ZFTkNFTk8JKDE8PDApCisjZGVmaW5lIEZCQ19DT01NQU5ECQkweDAzMjBjCisjZGVmaW5lICAgRkJDX0NNRF9DT01QUkVTUwkoMTw8MCkKKyNkZWZpbmUgRkJDX1NUQVRVUwkJMHgwMzIxMAorI2RlZmluZSAgIEZCQ19TVEFUX0NPTVBSRVNTSU5HCSgxPDwzMSkKKyNkZWZpbmUgICBGQkNfU1RBVF9DT01QUkVTU0VECSgxPDwzMCkKKyNkZWZpbmUgICBGQkNfU1RBVF9NT0RJRklFRAkoMTw8MjkpCisjZGVmaW5lICAgRkJDX1NUQVRfQ1VSUkVOVF9MSU5FCSgxPDwwKQorI2RlZmluZSBGQkNfQ09OVFJPTDIJCTB4MDMyMTQKKyNkZWZpbmUgICBGQkNfQ1RMX0ZFTkNFX0RCTAkoMDw8NCkKKyNkZWZpbmUgICBGQkNfQ1RMX0lETEVfSU1NCSgwPDwyKQorI2RlZmluZSAgIEZCQ19DVExfSURMRV9GVUxMCSgxPDwyKQorI2RlZmluZSAgIEZCQ19DVExfSURMRV9MSU5FCSgyPDwyKQorI2RlZmluZSAgIEZCQ19DVExfSURMRV9ERUJVRwkoMzw8MikKKyNkZWZpbmUgICBGQkNfQ1RMX0NQVV9GRU5DRQkoMTw8MSkKKyNkZWZpbmUgICBGQkNfQ1RMX1BMQU5FQQkoMDw8MCkKKyNkZWZpbmUgICBGQkNfQ1RMX1BMQU5FQgkoMTw8MCkKKyNkZWZpbmUgRkJDX0ZFTkNFX09GRgkJMHgwMzIxYgorCisjZGVmaW5lIEZCQ19MTF9TSVpFCQkoMTUzNikKKworLyoKKyAqIEdQSU8gcmVncworICovCisjZGVmaW5lIEdQSU9BCQkJMHg1MDEwCisjZGVmaW5lIEdQSU9CCQkJMHg1MDE0CisjZGVmaW5lIEdQSU9DCQkJMHg1MDE4CisjZGVmaW5lIEdQSU9ECQkJMHg1MDFjCisjZGVmaW5lIEdQSU9FCQkJMHg1MDIwCisjZGVmaW5lIEdQSU9GCQkJMHg1MDI0CisjZGVmaW5lIEdQSU9HCQkJMHg1MDI4CisjZGVmaW5lIEdQSU9ICQkJMHg1MDJjCisjIGRlZmluZSBHUElPX0NMT0NLX0RJUl9NQVNLCQkoMSA8PCAwKQorIyBkZWZpbmUgR1BJT19DTE9DS19ESVJfSU4JCSgwIDw8IDEpCisjIGRlZmluZSBHUElPX0NMT0NLX0RJUl9PVVQJCSgxIDw8IDEpCisjIGRlZmluZSBHUElPX0NMT0NLX1ZBTF9NQVNLCQkoMSA8PCAyKQorIyBkZWZpbmUgR1BJT19DTE9DS19WQUxfT1VUCQkoMSA8PCAzKQorIyBkZWZpbmUgR1BJT19DTE9DS19WQUxfSU4JCSgxIDw8IDQpCisjIGRlZmluZSBHUElPX0NMT0NLX1BVTExVUF9ESVNBQkxFCSgxIDw8IDUpCisjIGRlZmluZSBHUElPX0RBVEFfRElSX01BU0sJCSgxIDw8IDgpCisjIGRlZmluZSBHUElPX0RBVEFfRElSX0lOCQkoMCA8PCA5KQorIyBkZWZpbmUgR1BJT19EQVRBX0RJUl9PVVQJCSgxIDw8IDkpCisjIGRlZmluZSBHUElPX0RBVEFfVkFMX01BU0sJCSgxIDw8IDEwKQorIyBkZWZpbmUgR1BJT19EQVRBX1ZBTF9PVVQJCSgxIDw8IDExKQorIyBkZWZpbmUgR1BJT19EQVRBX1ZBTF9JTgkJKDEgPDwgMTIpCisjIGRlZmluZSBHUElPX0RBVEFfUFVMTFVQX0RJU0FCTEUJKDEgPDwgMTMpCisKKy8qCisgKiBDbG9jayBjb250cm9sICYgcG93ZXIgbWFuYWdlbWVudAorICovCisKKyNkZWZpbmUgVkdBMAkweDYwMDAKKyNkZWZpbmUgVkdBMQkweDYwMDQKKyNkZWZpbmUgVkdBX1BECTB4NjAxMAorI2RlZmluZSAgIFZHQTBfUERfUDJfRElWXzQJKDEgPDwgNykKKyNkZWZpbmUgICBWR0EwX1BEX1AxX0RJVl8yCSgxIDw8IDUpCisjZGVmaW5lICAgVkdBMF9QRF9QMV9TSElGVAkwCisjZGVmaW5lICAgVkdBMF9QRF9QMV9NQVNLCSgweDFmIDw8IDApCisjZGVmaW5lICAgVkdBMV9QRF9QMl9ESVZfNAkoMSA8PCAxNSkKKyNkZWZpbmUgICBWR0ExX1BEX1AxX0RJVl8yCSgxIDw8IDEzKQorI2RlZmluZSAgIFZHQTFfUERfUDFfU0hJRlQJOAorI2RlZmluZSAgIFZHQTFfUERfUDFfTUFTSwkoMHgxZiA8PCA4KQorI2RlZmluZSBEUExMX0EJMHgwNjAxNAorI2RlZmluZSBEUExMX0IJMHgwNjAxOAorI2RlZmluZSAgIERQTExfVkNPX0VOQUJMRQkJKDEgPDwgMzEpCisjZGVmaW5lICAgRFBMTF9EVk9fSElHSF9TUEVFRAkJKDEgPDwgMzApCisjZGVmaW5lICAgRFBMTF9TWU5DTE9DS19FTkFCTEUJCSgxIDw8IDI5KQorI2RlZmluZSAgIERQTExfVkdBX01PREVfRElTCQkoMSA8PCAyOCkKKyNkZWZpbmUgICBEUExMQl9NT0RFX0RBQ19TRVJJQUwJCSgxIDw8IDI2KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTEJfTU9ERV9MVkRTCQkoMiA8PCAyNikgLyogaTkxNSAqLworI2RlZmluZSAgIERQTExfTU9ERV9NQVNLCQkoMyA8PCAyNikKKyNkZWZpbmUgICBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzEwICgwIDw8IDI0KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTF9EQUNfU0VSSUFMX1AyX0NMT0NLX0RJVl81ICgxIDw8IDI0KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfMTQJKDAgPDwgMjQpIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMQl9MVkRTX1AyX0NMT0NLX0RJVl83CSgxIDw8IDI0KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTF9QMl9DTE9DS19ESVZfTUFTSwkweDAzMDAwMDAwIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0sJMHgwMGZmMDAwMCAvKiBpOTE1ICovCisKKyNkZWZpbmUgSTkxNV9GSUZPX1VOREVSUlVOX1NUQVRVUwkJKDFVTDw8MzEpCisjZGVmaW5lIEk5MTVfQ1JDX0VSUk9SX0VOQUJMRQkJCSgxVUw8PDI5KQorI2RlZmluZSBJOTE1X0NSQ19ET05FX0VOQUJMRQkJCSgxVUw8PDI4KQorI2RlZmluZSBJOTE1X0dNQlVTX0VWRU5UX0VOQUJMRQkJCSgxVUw8PDI3KQorI2RlZmluZSBJOTE1X1ZTWU5DX0lOVEVSUlVQVF9FTkFCTEUJCSgxVUw8PDI1KQorI2RlZmluZSBJOTE1X0RJU1BMQVlfTElORV9DT01QQVJFX0VOQUJMRQkoMVVMPDwyNCkKKyNkZWZpbmUgSTkxNV9EUFNUX0VWRU5UX0VOQUJMRQkJCSgxVUw8PDIzKQorI2RlZmluZSBJOTE1X0xFR0FDWV9CTENfRVZFTlRfRU5BQkxFCQkoMVVMPDwyMikKKyNkZWZpbmUgSTkxNV9PRERfRklFTERfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MjEpCisjZGVmaW5lIEk5MTVfRVZFTl9GSUVMRF9JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDIwKQorI2RlZmluZSBJOTE1X1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDE4KQkvKiA5NjUgb3IgbGF0ZXIgKi8KKyNkZWZpbmUgSTkxNV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MTcpCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9VUERBVEVEX0VOQUJMRQkJKDFVTDw8MTYpCisjZGVmaW5lIEk5MTVfQ1JDX0VSUk9SX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEzKQorI2RlZmluZSBJOTE1X0NSQ19ET05FX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEyKQorI2RlZmluZSBJOTE1X0dNQlVTX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDExKQorI2RlZmluZSBJOTE1X1ZTWU5DX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDkpCisjZGVmaW5lIEk5MTVfRElTUExBWV9MSU5FX0NPTVBBUkVfU1RBVFVTCSgxVUw8PDgpCisjZGVmaW5lIEk5MTVfRFBTVF9FVkVOVF9TVEFUVVMJCQkoMVVMPDw3KQorI2RlZmluZSBJOTE1X0xFR0FDWV9CTENfRVZFTlRfU1RBVFVTCQkoMVVMPDw2KQorI2RlZmluZSBJOTE1X09ERF9GSUVMRF9JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDw1KQorI2RlZmluZSBJOTE1X0VWRU5fRklFTERfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDw0KQorI2RlZmluZSBJOTE1X1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpCS8qIDk2NSBvciBsYXRlciAqLworI2RlZmluZSBJOTE1X1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDwxKQorI2RlZmluZSBJOTE1X09WRVJMQVlfVVBEQVRFRF9TVEFUVVMJCSgxVUw8PDApCisKKyNkZWZpbmUgU1JYX0lOREVYCQkweDNjNAorI2RlZmluZSBTUlhfREFUQQkJMHgzYzUKKyNkZWZpbmUgU1IwMQkJCTEKKyNkZWZpbmUgU1IwMV9TQ1JFRU5fT0ZGCQkoMTw8NSkKKworI2RlZmluZSBQUENSCQkJMHg2MTIwNAorI2RlZmluZSBQUENSX09OCQkJKDE8PDApCisKKyNkZWZpbmUgRFZPQgkJCTB4NjExNDAKKyNkZWZpbmUgRFZPQl9PTgkJCSgxPDwzMSkKKyNkZWZpbmUgRFZPQwkJCTB4NjExNjAKKyNkZWZpbmUgRFZPQ19PTgkJCSgxPDwzMSkKKyNkZWZpbmUgTFZEUwkJCTB4NjExODAKKyNkZWZpbmUgTFZEU19PTgkJCSgxPDwzMSkKKworI2RlZmluZSBBRFBBCQkJMHg2MTEwMAorI2RlZmluZSBBRFBBX0RQTVNfTUFTSwkJKH4oMzw8MTApKQorI2RlZmluZSBBRFBBX0RQTVNfT04JCSgwPDwxMCkKKyNkZWZpbmUgQURQQV9EUE1TX1NVU1BFTkQJKDE8PDEwKQorI2RlZmluZSBBRFBBX0RQTVNfU1RBTkRCWQkoMjw8MTApCisjZGVmaW5lIEFEUEFfRFBNU19PRkYJCSgzPDwxMCkKKworI2RlZmluZSBSSU5HX1RBSUwJCTB4MDAKKyNkZWZpbmUgVEFJTF9BRERSCQkweDAwMUZGRkY4CisjZGVmaW5lIFJJTkdfSEVBRAkJMHgwNAorI2RlZmluZSBIRUFEX1dSQVBfQ09VTlQJCTB4RkZFMDAwMDAKKyNkZWZpbmUgSEVBRF9XUkFQX09ORQkJMHgwMDIwMDAwMAorI2RlZmluZSBIRUFEX0FERFIJCTB4MDAxRkZGRkMKKyNkZWZpbmUgUklOR19TVEFSVAkJMHgwOAorI2RlZmluZSBTVEFSVF9BRERSCQkweEZGRkZGMDAwCisjZGVmaW5lIFJJTkdfTEVOCQkweDBDCisjZGVmaW5lIFJJTkdfTlJfUEFHRVMJCTB4MDAxRkYwMDAKKyNkZWZpbmUgUklOR19SRVBPUlRfTUFTSwkweDAwMDAwMDA2CisjZGVmaW5lIFJJTkdfUkVQT1JUXzY0SwkJMHgwMDAwMDAwMgorI2RlZmluZSBSSU5HX1JFUE9SVF8xMjhLCTB4MDAwMDAwMDQKKyNkZWZpbmUgUklOR19OT19SRVBPUlQJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUklOR19WQUxJRF9NQVNLCQkweDAwMDAwMDAxCisjZGVmaW5lIFJJTkdfVkFMSUQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUklOR19JTlZBTElECQkweDAwMDAwMDAwCisKKy8qIFNjcmF0Y2ggcGFkIGRlYnVnIDAgcmVnOgorICovCisjZGVmaW5lICAgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9NQVNLX0k4MzAJMHgwMDFmMDAwMAorLyoKKyAqIFRoZSBpODMwIGdlbmVyYXRpb24sIGluIExWRFMgbW9kZSwgZGVmaW5lcyBQMSBhcyB0aGUgYml0IG51bWJlciBzZXQgd2l0aGluCisgKiB0aGlzIGZpZWxkIChvbmx5IG9uZSBiaXQgbWF5IGJlIHNldCkuCisgKi8KKyNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSTgzMF9MVkRTCTB4MDAzZjAwMDAKKyNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUCTE2CisvKiBpODMwLCByZXF1aXJlZCBpbiBEVk8gbm9uLWdhbmcgKi8KKyNkZWZpbmUgICBQTExfUDJfRElWSURFX0JZXzQJCSgxIDw8IDIzKQorI2RlZmluZSAgIFBMTF9QMV9ESVZJREVfQllfVFdPCQkoMSA8PCAyMSkgLyogaTgzMCAqLworI2RlZmluZSAgIFBMTF9SRUZfSU5QVVRfRFJFRkNMSwkJKDAgPDwgMTMpCisjZGVmaW5lICAgUExMX1JFRl9JTlBVVF9UVkNMS0lOQQkoMSA8PCAxMykgLyogaTgzMCAqLworI2RlZmluZSAgIFBMTF9SRUZfSU5QVVRfVFZDTEtJTkJDCSgyIDw8IDEzKSAvKiBTRFZPIFRWQ0xLSU4gKi8KKyNkZWZpbmUgICBQTExCX1JFRl9JTlBVVF9TUFJFQURTUEVDVFJVTUlOICgzIDw8IDEzKQorI2RlZmluZSAgIFBMTF9SRUZfSU5QVVRfTUFTSwkJKDMgPDwgMTMpCisjZGVmaW5lICAgUExMX0xPQURfUFVMU0VfUEhBU0VfU0hJRlQJCTkKKy8qCisgKiBQYXJhbGxlbCB0byBTZXJpYWwgTG9hZCBQdWxzZSBwaGFzZSBzZWxlY3Rpb24uCisgKiBTZWxlY3RzIHRoZSBwaGFzZSBmb3IgdGhlIDEwWCBEUExMIGNsb2NrIGZvciB0aGUgUENJZQorICogZGlnaXRhbCBkaXNwbGF5IHBvcnQuIFRoZSByYW5nZSBpcyA0IHRvIDEzOyAxMCBvciBtb3JlCisgKiBpcyBqdXN0IGEgZmxpcCBkZWxheS4gVGhlIGRlZmF1bHQgaXMgNgorICovCisjZGVmaW5lICAgUExMX0xPQURfUFVMU0VfUEhBU0VfTUFTSwkJKDB4ZiA8PCBQTExfTE9BRF9QVUxTRV9QSEFTRV9TSElGVCkKKyNkZWZpbmUgICBESVNQTEFZX1JBVEVfU0VMRUNUX0ZQQTEJCSgxIDw8IDgpCisvKgorICogU0RWTyBtdWx0aXBsaWVyIGZvciA5NDVHL0dNLiBOb3QgdXNlZCBvbiA5NjUuCisgKi8KKyNkZWZpbmUgICBTRFZPX01VTFRJUExJRVJfTUFTSwkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgICBTRFZPX01VTFRJUExJRVJfU0hJRlRfSElSRVMJCTQKKyNkZWZpbmUgICBTRFZPX01VTFRJUExJRVJfU0hJRlRfVkdBCQkwCisjZGVmaW5lIERQTExfQV9NRCAweDA2MDFjIC8qIDk2NSsgb25seSAqLworLyoKKyAqIFVESSBwaXhlbCBkaXZpZGVyLCBjb250cm9sbGluZyBob3cgbWFueSBwaXhlbHMgYXJlIHN0dWZmZWQgaW50byBhIHBhY2tldC4KKyAqCisgKiBWYWx1ZSBpcyBwaXhlbHMgbWludXMgMS4gIE11c3QgYmUgc2V0IHRvIDEgcGl4ZWwgZm9yIFNEVk8uCisgKi8KKyNkZWZpbmUgICBEUExMX01EX1VESV9ESVZJREVSX01BU0sJCTB4M2YwMDAwMDAKKyNkZWZpbmUgICBEUExMX01EX1VESV9ESVZJREVSX1NISUZUCQkyNAorLyogVURJIHBpeGVsIGRpdmlkZXIgZm9yIFZHQSwgc2FtZSBhcyBEUExMX01EX1VESV9ESVZJREVSX01BU0suICovCisjZGVmaW5lICAgRFBMTF9NRF9WR0FfVURJX0RJVklERVJfTUFTSwkJMHgwMDNmMDAwMAorI2RlZmluZSAgIERQTExfTURfVkdBX1VESV9ESVZJREVSX1NISUZUCQkxNgorLyoKKyAqIFNEVk8vVURJIHBpeGVsIG11bHRpcGxpZXIuCisgKgorICogU0RWTyByZXF1aXJlcyB0aGF0IHRoZSBidXMgY2xvY2sgcmF0ZSBiZSBiZXR3ZWVuIDEgYW5kIDIgR2h6LCBhbmQgdGhlIGJ1cworICogY2xvY2sgcmF0ZSBpcyAxMCB0aW1lcyB0aGUgRFBMTCBjbG9jay4gIEF0IGxvdyByZXNvbHV0aW9uL3JlZnJlc2ggcmF0ZQorICogbW9kZXMsIHRoZSBidXMgcmF0ZSB3b3VsZCBiZSBiZWxvdyB0aGUgbGltaXRzLCBzbyBTRFZPIGFsbG93cyBmb3Igc3R1ZmZpbmcKKyAqIGR1bW15IGJ5dGVzIGluIHRoZSBkYXRhc3RyZWFtIGF0IGFuIGluY3JlYXNlZCBjbG9jayByYXRlLCB3aXRoIGJvdGggc2lkZXMgb2YKKyAqIHRoZSBsaW5rIGtub3dpbmcgaG93IG1hbnkgYnl0ZXMgYXJlIGZpbGwuCisgKgorICogU28sIGZvciBhIG1vZGUgd2l0aCBhIGRvdGNsb2NrIG9mIDY1TWh6LCB3ZSB3b3VsZCB3YW50IHRvIGRvdWJsZSB0aGUgY2xvY2sKKyAqIHJhdGUgdG8gMTMwTWh6IHRvIGdldCBhIGJ1cyByYXRlIG9mIDEuMzBHaHouICBUaGUgRFBMTCBjbG9jayByYXRlIHdvdWxkIGJlCisgKiBzZXQgdG8gMTMwTWh6LCBhbmQgdGhlIFNEVk8gbXVsdGlwbGllciBzZXQgdG8gMnggaW4gdGhpcyByZWdpc3RlciBhbmQKKyAqIHRocm91Z2ggYW4gU0RWTyBjb21tYW5kLgorICoKKyAqIFRoaXMgcmVnaXN0ZXIgZmllbGQgaGFzIHZhbHVlcyBvZiBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgbWludXMgMSwgd2l0aAorICogYSBtYXhpbXVtIG11bHRpcGxpZXIgb2YgNSBmb3IgU0RWTy4KKyAqLworI2RlZmluZSAgIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSwkJMHgwMDAwM2YwMAorI2RlZmluZSAgIERQTExfTURfVURJX01VTFRJUExJRVJfU0hJRlQJCTgKKy8qCisgKiBTRFZPL1VESSBwaXhlbCBtdWx0aXBsaWVyIGZvciBWR0EsIHNhbWUgYXMgRFBMTF9NRF9VRElfTVVMVElQTElFUl9NQVNLLgorICogVGhpcyBiZXN0IGJlIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSAoMykgb3IgdGhlIENSVCB3b24ndCB3b3JrLiBObywKKyAqIEkgZG9uJ3QgZW50aXJlbHkgdW5kZXJzdGFuZCB3aGF0IHRoaXMgZG9lcy4uLgorICovCisjZGVmaW5lICAgRFBMTF9NRF9WR0FfVURJX01VTFRJUExJRVJfTUFTSwkweDAwMDAwMDNmCisjZGVmaW5lICAgRFBMTF9NRF9WR0FfVURJX01VTFRJUExJRVJfU0hJRlQJMAorI2RlZmluZSBEUExMX0JfTUQgMHgwNjAyMCAvKiA5NjUrIG9ubHkgKi8KKyNkZWZpbmUgRlBBMAkweDA2MDQwCisjZGVmaW5lIEZQQTEJMHgwNjA0NAorI2RlZmluZSBGUEIwCTB4MDYwNDgKKyNkZWZpbmUgRlBCMQkweDA2MDRjCisjZGVmaW5lICAgRlBfTl9ESVZfTUFTSwkJMHgwMDNmMDAwMAorI2RlZmluZSAgIEZQX05fRElWX1NISUZUCQkxNgorI2RlZmluZSAgIEZQX00xX0RJVl9NQVNLCTB4MDAwMDNmMDAKKyNkZWZpbmUgICBGUF9NMV9ESVZfU0hJRlQJCSA4CisjZGVmaW5lICAgRlBfTTJfRElWX01BU0sJMHgwMDAwMDAzZgorI2RlZmluZSAgIEZQX00yX0RJVl9TSElGVAkJIDAKKyNkZWZpbmUgRFBMTF9URVNUCTB4NjA2YworI2RlZmluZSAgIERQTExCX1RFU1RfU0RWT19ESVZfMQkJKDAgPDwgMjIpCisjZGVmaW5lICAgRFBMTEJfVEVTVF9TRFZPX0RJVl8yCQkoMSA8PCAyMikKKyNkZWZpbmUgICBEUExMQl9URVNUX1NEVk9fRElWXzQJCSgyIDw8IDIyKQorI2RlZmluZSAgIERQTExCX1RFU1RfU0RWT19ESVZfTUFTSwkoMyA8PCAyMikKKyNkZWZpbmUgICBEUExMQl9URVNUX05fQllQQVNTCQkoMSA8PCAxOSkKKyNkZWZpbmUgICBEUExMQl9URVNUX01fQllQQVNTCQkoMSA8PCAxOCkKKyNkZWZpbmUgICBEUExMQl9JTlBVVF9CVUZGRVJfRU5BQkxFCSgxIDw8IDE2KQorI2RlZmluZSAgIERQTExBX1RFU1RfTl9CWVBBU1MJCSgxIDw8IDMpCisjZGVmaW5lICAgRFBMTEFfVEVTVF9NX0JZUEFTUwkJKDEgPDwgMikKKyNkZWZpbmUgICBEUExMQV9JTlBVVF9CVUZGRVJfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lIERfU1RBVEUJCTB4NjEwNAorI2RlZmluZSBDR18yRF9ESVMJMHg2MjAwCisjZGVmaW5lIENHXzNEX0RJUwkweDYyMDQKKworLyoKKyAqIFBhbGV0dGUgcmVncworICovCisKKyNkZWZpbmUgUEFMRVRURV9BCQkweDBhMDAwCisjZGVmaW5lIFBBTEVUVEVfQgkJMHgwYTgwMAorCisvKiBNQ0ggTU1JTyBzcGFjZSAqLworCisvKgorICogTUNIQkFSIG1pcnJvci4KKyAqCisgKiBUaGlzIG1pcnJvcnMgdGhlIE1DSEJBUiBNTUlPIHNwYWNlIHdob3NlIGxvY2F0aW9uIGlzIGRldGVybWluZWQgYnkKKyAqIGRldmljZSAwIGZ1bmN0aW9uIDAncyBwY2kgY29uZmlnIHJlZ2lzdGVyIDB4NDQgb3IgMHg0OCBhbmQgbWF0Y2hlcyBpdCBpbgorICogZXZlcnkgd2F5LiAgSXQgaXMgbm90IGFjY2Vzc2libGUgZnJvbSB0aGUgQ1AgcmVnaXN0ZXIgcmVhZCBpbnN0cnVjdGlvbnMuCisgKgorICovCisjZGVmaW5lIE1DSEJBUl9NSVJST1JfQkFTRQkweDEwMDAwCisKKy8qKiA5MTUtOTQ1IGFuZCBHTTk2NSBNQ0ggcmVnaXN0ZXIgY29udHJvbGxpbmcgRFJBTSBjaGFubmVsIGFjY2VzcyAqLworI2RlZmluZSBEQ0MJCQkweDEwMjAwCisjZGVmaW5lIERDQ19BRERSRVNTSU5HX01PREVfU0lOR0xFX0NIQU5ORUwJCSgwIDw8IDApCisjZGVmaW5lIERDQ19BRERSRVNTSU5HX01PREVfRFVBTF9DSEFOTkVMX0FTWU1NRVRSSUMJKDEgPDwgMCkKKyNkZWZpbmUgRENDX0FERFJFU1NJTkdfTU9ERV9EVUFMX0NIQU5ORUxfSU5URVJMRUFWRUQJKDIgPDwgMCkKKyNkZWZpbmUgRENDX0FERFJFU1NJTkdfTU9ERV9NQVNLCQkJKDMgPDwgMCkKKyNkZWZpbmUgRENDX0NIQU5ORUxfWE9SX0RJU0FCTEUJCQkJKDEgPDwgMTApCisKKy8qKiA5NjUgTUNIIHJlZ2lzdGVyIGNvbnRyb2xsaW5nIERSQU0gY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIEMwRFJCMwkJCTB4MTAyMDYKKyNkZWZpbmUgQzFEUkIzCQkJMHgxMDYwNgorCisvKgorICogT3ZlcmxheSByZWdzCisgKi8KKworI2RlZmluZSBPVkFERAkJCTB4MzAwMDAKKyNkZWZpbmUgRE9WU1RBCQkJMHgzMDAwOAorI2RlZmluZSBPQ19CVUYJCQkoMHgzPDwyMCkKKyNkZWZpbmUgT0dBTUM1CQkJMHgzMDAxMAorI2RlZmluZSBPR0FNQzQJCQkweDMwMDE0CisjZGVmaW5lIE9HQU1DMwkJCTB4MzAwMTgKKyNkZWZpbmUgT0dBTUMyCQkJMHgzMDAxYworI2RlZmluZSBPR0FNQzEJCQkweDMwMDIwCisjZGVmaW5lIE9HQU1DMAkJCTB4MzAwMjQKKworLyoKKyAqIERpc3BsYXkgZW5naW5lIHJlZ3MKKyAqLworCisvKiBQaXBlIEEgdGltaW5nIHJlZ3MgKi8KKyNkZWZpbmUgSFRPVEFMX0EJMHg2MDAwMAorI2RlZmluZSBIQkxBTktfQQkweDYwMDA0CisjZGVmaW5lIEhTWU5DX0EJCTB4NjAwMDgKKyNkZWZpbmUgVlRPVEFMX0EJMHg2MDAwYworI2RlZmluZSBWQkxBTktfQQkweDYwMDEwCisjZGVmaW5lIFZTWU5DX0EJCTB4NjAwMTQKKyNkZWZpbmUgUElQRUFTUkMJMHg2MDAxYworI2RlZmluZSBCQ0xSUEFUX0EJMHg2MDAyMAorCisvKiBQaXBlIEIgdGltaW5nIHJlZ3MgKi8KKyNkZWZpbmUgSFRPVEFMX0IJMHg2MTAwMAorI2RlZmluZSBIQkxBTktfQgkweDYxMDA0CisjZGVmaW5lIEhTWU5DX0IJCTB4NjEwMDgKKyNkZWZpbmUgVlRPVEFMX0IJMHg2MTAwYworI2RlZmluZSBWQkxBTktfQgkweDYxMDEwCisjZGVmaW5lIFZTWU5DX0IJCTB4NjEwMTQKKyNkZWZpbmUgUElQRUJTUkMJMHg2MTAxYworI2RlZmluZSBCQ0xSUEFUX0IJMHg2MTAyMAorCisvKiBWR0EgcG9ydCBjb250cm9sICovCisjZGVmaW5lIEFEUEEJCQkweDYxMTAwCisjZGVmaW5lICAgQURQQV9EQUNfRU5BQkxFCSgxPDwzMSkKKyNkZWZpbmUgICBBRFBBX0RBQ19ESVNBQkxFCTAKKyNkZWZpbmUgICBBRFBBX1BJUEVfU0VMRUNUX01BU0sJKDE8PDMwKQorI2RlZmluZSAgIEFEUEFfUElQRV9BX1NFTEVDVAkwCisjZGVmaW5lICAgQURQQV9QSVBFX0JfU0VMRUNUCSgxPDwzMCkKKyNkZWZpbmUgICBBRFBBX1VTRV9WR0FfSFZQT0xBUklUWSAoMTw8MTUpCisjZGVmaW5lICAgQURQQV9TRVRTX0hWUE9MQVJJVFkJMAorI2RlZmluZSAgIEFEUEFfVlNZTkNfQ05UTF9ESVNBQkxFICgxPDwxMSkKKyNkZWZpbmUgICBBRFBBX1ZTWU5DX0NOVExfRU5BQkxFIDAKKyNkZWZpbmUgICBBRFBBX0hTWU5DX0NOVExfRElTQUJMRSAoMTw8MTApCisjZGVmaW5lICAgQURQQV9IU1lOQ19DTlRMX0VOQUJMRSAwCisjZGVmaW5lICAgQURQQV9WU1lOQ19BQ1RJVkVfSElHSCAoMTw8NCkKKyNkZWZpbmUgICBBRFBBX1ZTWU5DX0FDVElWRV9MT1cJMAorI2RlZmluZSAgIEFEUEFfSFNZTkNfQUNUSVZFX0hJR0ggKDE8PDMpCisjZGVmaW5lICAgQURQQV9IU1lOQ19BQ1RJVkVfTE9XCTAKKyNkZWZpbmUgICBBRFBBX0RQTVNfTUFTSwkofigzPDwxMCkpCisjZGVmaW5lICAgQURQQV9EUE1TX09OCQkoMDw8MTApCisjZGVmaW5lICAgQURQQV9EUE1TX1NVU1BFTkQJKDE8PDEwKQorI2RlZmluZSAgIEFEUEFfRFBNU19TVEFOREJZCSgyPDwxMCkKKyNkZWZpbmUgICBBRFBBX0RQTVNfT0ZGCQkoMzw8MTApCisKKy8qIEhvdHBsdWcgY29udHJvbCAoOTQ1KyBvbmx5KSAqLworI2RlZmluZSBQT1JUX0hPVFBMVUdfRU4JCTB4NjExMTAKKyNkZWZpbmUgICBTRFZPQl9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDI2KQorI2RlZmluZSAgIFNEVk9DX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgMjUpCisjZGVmaW5lICAgVFZfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAxOCkKKyNkZWZpbmUgICBDUlRfSE9UUExVR19JTlRfRU4JCQkoMSA8PCA5KQorI2RlZmluZSAgIENSVF9IT1RQTFVHX0ZPUkNFX0RFVEVDVAkJKDEgPDwgMykKKworI2RlZmluZSBQT1JUX0hPVFBMVUdfU1RBVAkweDYxMTE0CisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfSU5UX1NUQVRVUwkJKDEgPDwgMTEpCisjZGVmaW5lICAgVFZfSE9UUExVR19JTlRfU1RBVFVTCQkJKDEgPDwgMTApCisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NQVNLCQkoMyA8PCA4KQorI2RlZmluZSAgIENSVF9IT1RQTFVHX01PTklUT1JfQ09MT1IJCSgzIDw8IDgpCisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NT05PCQkoMiA8PCA4KQorI2RlZmluZSAgIENSVF9IT1RQTFVHX01PTklUT1JfTk9ORQkJKDAgPDwgOCkKKyNkZWZpbmUgICBTRFZPQ19IT1RQTFVHX0lOVF9TVEFUVVMJCSgxIDw8IDcpCisjZGVmaW5lICAgU0RWT0JfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCA2KQorCisvKiBTRFZPIHBvcnQgY29udHJvbCAqLworI2RlZmluZSBTRFZPQgkJCTB4NjExNDAKKyNkZWZpbmUgU0RWT0MJCQkweDYxMTYwCisjZGVmaW5lICAgU0RWT19FTkFCTEUJCSgxIDw8IDMxKQorI2RlZmluZSAgIFNEVk9fUElQRV9CX1NFTEVDVAkoMSA8PCAzMCkKKyNkZWZpbmUgICBTRFZPX1NUQUxMX1NFTEVDVAkoMSA8PCAyOSkKKyNkZWZpbmUgICBTRFZPX0lOVEVSUlVQVF9FTkFCTEUJKDEgPDwgMjYpCisvKioKKyAqIDkxNUcvR00gU0RWTyBwaXhlbCBtdWx0aXBsaWVyLgorICoKKyAqIFByb2dyYW1tZWQgdmFsdWUgaXMgbXVsdGlwbGllciAtIDEsIHVwIHRvIDV4LgorICoKKyAqIFxzYSBEUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0sKKyAqLworI2RlZmluZSAgIFNEVk9fUE9SVF9NVUxUSVBMWV9NQVNLCSg3IDw8IDIzKQorI2RlZmluZSAgIFNEVk9fUE9SVF9NVUxUSVBMWV9TSElGVAkJMjMKKyNkZWZpbmUgICBTRFZPX1BIQVNFX1NFTEVDVF9NQVNLCSgxNSA8PCAxOSkKKyNkZWZpbmUgICBTRFZPX1BIQVNFX1NFTEVDVF9ERUZBVUxUCSg2IDw8IDE5KQorI2RlZmluZSAgIFNEVk9fQ0xPQ0tfT1VUUFVUX0lOVkVSVAkoMSA8PCAxOCkKKyNkZWZpbmUgICBTRFZPQ19HQU5HX01PREUJCSgxIDw8IDE2KQorI2RlZmluZSAgIFNEVk9fQk9SREVSX0VOQUJMRQkJKDEgPDwgNykKKyNkZWZpbmUgICBTRFZPQl9QQ0lFX0NPTkNVUlJFTkNZCSgxIDw8IDMpCisjZGVmaW5lICAgU0RWT19ERVRFQ1RFRAkJCSgxIDw8IDIpCisvKiBCaXRzIHRvIGJlIHByZXNlcnZlZCB3aGVuIHdyaXRpbmcgKi8KKyNkZWZpbmUgICBTRFZPQl9QUkVTRVJWRV9NQVNLICgoMSA8PCAxNykgfCAoMSA8PCAxNikgfCAoMSA8PCAxNCkgfCAoMSA8PCAyNikpCisjZGVmaW5lICAgU0RWT0NfUFJFU0VSVkVfTUFTSyAoKDEgPDwgMTcpIHwgKDEgPDwgMjYpKQorCisvKiBEVk8gcG9ydCBjb250cm9sICovCisjZGVmaW5lIERWT0EJCQkweDYxMTIwCisjZGVmaW5lIERWT0IJCQkweDYxMTQwCisjZGVmaW5lIERWT0MJCQkweDYxMTYwCisjZGVmaW5lICAgRFZPX0VOQUJMRQkJCSgxIDw8IDMxKQorI2RlZmluZSAgIERWT19QSVBFX0JfU0VMRUNUCQkoMSA8PCAzMCkKKyNkZWZpbmUgICBEVk9fUElQRV9TVEFMTF9VTlVTRUQJCSgwIDw8IDI4KQorI2RlZmluZSAgIERWT19QSVBFX1NUQUxMCQkoMSA8PCAyOCkKKyNkZWZpbmUgICBEVk9fUElQRV9TVEFMTF9UVgkJKDIgPDwgMjgpCisjZGVmaW5lICAgRFZPX1BJUEVfU1RBTExfTUFTSwkJKDMgPDwgMjgpCisjZGVmaW5lICAgRFZPX1VTRV9WR0FfU1lOQwkJKDEgPDwgMTUpCisjZGVmaW5lICAgRFZPX0RBVEFfT1JERVJfSTc0MAkJKDAgPDwgMTQpCisjZGVmaW5lICAgRFZPX0RBVEFfT1JERVJfRlAJCSgxIDw8IDE0KQorI2RlZmluZSAgIERWT19WU1lOQ19ESVNBQkxFCQkoMSA8PCAxMSkKKyNkZWZpbmUgICBEVk9fSFNZTkNfRElTQUJMRQkJKDEgPDwgMTApCisjZGVmaW5lICAgRFZPX1ZTWU5DX1RSSVNUQVRFCQkoMSA8PCA5KQorI2RlZmluZSAgIERWT19IU1lOQ19UUklTVEFURQkJKDEgPDwgOCkKKyNkZWZpbmUgICBEVk9fQk9SREVSX0VOQUJMRQkJKDEgPDwgNykKKyNkZWZpbmUgICBEVk9fREFUQV9PUkRFUl9HQlJHCQkoMSA8PCA2KQorI2RlZmluZSAgIERWT19EQVRBX09SREVSX1JHR0IJCSgwIDw8IDYpCisjZGVmaW5lICAgRFZPX0RBVEFfT1JERVJfR0JSR19FUlJBVEEJKDAgPDwgNikKKyNkZWZpbmUgICBEVk9fREFUQV9PUkRFUl9SR0dCX0VSUkFUQQkoMSA8PCA2KQorI2RlZmluZSAgIERWT19WU1lOQ19BQ1RJVkVfSElHSAkJKDEgPDwgNCkKKyNkZWZpbmUgICBEVk9fSFNZTkNfQUNUSVZFX0hJR0gJCSgxIDw8IDMpCisjZGVmaW5lICAgRFZPX0JMQU5LX0FDVElWRV9ISUdICQkoMSA8PCAyKQorI2RlZmluZSAgIERWT19PVVRQVVRfQ1NUQVRFX1BJWEVMUwkoMSA8PCAxKQkvKiBTREcgb25seSAqLworI2RlZmluZSAgIERWT19PVVRQVVRfU09VUkNFX1NJWkVfUElYRUxTCSgxIDw8IDApCS8qIFNERyBvbmx5ICovCisjZGVmaW5lICAgRFZPX1BSRVNFUlZFX01BU0sJCSgweDc8PDI0KQorI2RlZmluZSBEVk9BX1NSQ0RJTQkJMHg2MTEyNAorI2RlZmluZSBEVk9CX1NSQ0RJTQkJMHg2MTE0NAorI2RlZmluZSBEVk9DX1NSQ0RJTQkJMHg2MTE2NAorI2RlZmluZSAgIERWT19TUkNESU1fSE9SSVpPTlRBTF9TSElGVAkxMgorI2RlZmluZSAgIERWT19TUkNESU1fVkVSVElDQUxfU0hJRlQJMAorCisvKiBMVkRTIHBvcnQgY29udHJvbCAqLworI2RlZmluZSBMVkRTCQkJMHg2MTE4MAorLyoKKyAqIEVuYWJsZXMgdGhlIExWRFMgcG9ydC4gIFRoaXMgYml0IG11c3QgYmUgc2V0IGJlZm9yZSBEUExMcyBhcmUgZW5hYmxlZCwgYXMKKyAqIHRoZSBEUExMIHNlbWFudGljcyBjaGFuZ2Ugd2hlbiB0aGUgTFZEUyBpcyBhc3NpZ25lZCB0byB0aGF0IHBpcGUuCisgKi8KKyNkZWZpbmUgICBMVkRTX1BPUlRfRU4JCQkoMSA8PCAzMSkKKy8qIFNlbGVjdHMgcGlwZSBCIGZvciBMVkRTIGRhdGEuICBNdXN0IGJlIHNldCBvbiBwcmUtOTY1LiAqLworI2RlZmluZSAgIExWRFNfUElQRUJfU0VMRUNUCQkoMSA8PCAzMCkKKy8qCisgKiBFbmFibGVzIHRoZSBBMC1BMiBkYXRhIHBhaXJzIGFuZCBDTEtBLCBjb250YWluaW5nIDE4IGJpdHMgb2YgY29sb3IgZGF0YSBwZXIKKyAqIHBpeGVsLgorICovCisjZGVmaW5lICAgTFZEU19BMEEyX0NMS0FfUE9XRVJfTUFTSwkoMyA8PCA4KQorI2RlZmluZSAgIExWRFNfQTBBMl9DTEtBX1BPV0VSX0RPV04JKDAgPDwgOCkKKyNkZWZpbmUgICBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9VUAkoMyA8PCA4KQorLyoKKyAqIENvbnRyb2xzIHRoZSBBMyBkYXRhIHBhaXIsIHdoaWNoIGNvbnRhaW5zIHRoZSBhZGRpdGlvbmFsIExTQnMgZm9yIDI0IGJpdAorICogbW9kZS4gIE9ubHkgZW5hYmxlZCBpZiBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9VUCBhbHNvIGluZGljYXRlcyBpdCBzaG91bGQgYmUKKyAqIG9uLgorICovCisjZGVmaW5lICAgTFZEU19BM19QT1dFUl9NQVNLCQkoMyA8PCA2KQorI2RlZmluZSAgIExWRFNfQTNfUE9XRVJfRE9XTgkJKDAgPDwgNikKKyNkZWZpbmUgICBMVkRTX0EzX1BPV0VSX1VQCQkoMyA8PCA2KQorLyoKKyAqIENvbnRyb2xzIHRoZSBDTEtCIHBhaXIuICBUaGlzIHNob3VsZCBvbmx5IGJlIHNldCB3aGVuIExWRFNfQjBCM19QT1dFUl9VUAorICogaXMgc2V0LgorICovCisjZGVmaW5lICAgTFZEU19DTEtCX1BPV0VSX01BU0sJCSgzIDw8IDQpCisjZGVmaW5lICAgTFZEU19DTEtCX1BPV0VSX0RPV04JCSgwIDw8IDQpCisjZGVmaW5lICAgTFZEU19DTEtCX1BPV0VSX1VQCQkoMyA8PCA0KQorLyoKKyAqIENvbnRyb2xzIHRoZSBCMC1CMyBkYXRhIHBhaXJzLiAgVGhpcyBtdXN0IGJlIHNldCB0byBtYXRjaCB0aGUgRFBMTCBwMgorICogc2V0dGluZyBmb3Igd2hldGhlciB3ZSBhcmUgaW4gZHVhbC1jaGFubmVsIG1vZGUuICBUaGUgQjMgcGFpciB3aWxsCisgKiBhZGRpdGlvbmFsbHkgb25seSBiZSBwb3dlcmVkIHVwIHdoZW4gTFZEU19BM19QT1dFUl9VUCBpcyBzZXQuCisgKi8KKyNkZWZpbmUgICBMVkRTX0IwQjNfUE9XRVJfTUFTSwkJKDMgPDwgMikKKyNkZWZpbmUgICBMVkRTX0IwQjNfUE9XRVJfRE9XTgkJKDAgPDwgMikKKyNkZWZpbmUgICBMVkRTX0IwQjNfUE9XRVJfVVAJCSgzIDw8IDIpCisKKy8qIFBhbmVsIHBvd2VyIHNlcXVlbmNpbmcgKi8KKyNkZWZpbmUgUFBfU1RBVFVTCTB4NjEyMDAKKyNkZWZpbmUgICBQUF9PTgkJKDEgPDwgMzEpCisvKgorICogSW5kaWNhdGVzIHRoYXQgYWxsIGRlcGVuZGVuY2llcyBvZiB0aGUgcGFuZWwgYXJlIG9uOgorICoKKyAqIC0gUExMIGVuYWJsZWQKKyAqIC0gcGlwZSBlbmFibGVkCisgKiAtIExWRFMvRFZPQi9EVk9DIG9uCisgKi8KKyNkZWZpbmUgICBQUF9SRUFEWQkJKDEgPDwgMzApCisjZGVmaW5lICAgUFBfU0VRVUVOQ0VfTk9ORQkoMCA8PCAyOCkKKyNkZWZpbmUgICBQUF9TRVFVRU5DRV9PTgkoMSA8PCAyOCkKKyNkZWZpbmUgICBQUF9TRVFVRU5DRV9PRkYJKDIgPDwgMjgpCisjZGVmaW5lICAgUFBfU0VRVUVOQ0VfTUFTSwkweDMwMDAwMDAwCisjZGVmaW5lIFBQX0NPTlRST0wJMHg2MTIwNAorI2RlZmluZSAgIFBPV0VSX1RBUkdFVF9PTgkoMSA8PCAwKQorI2RlZmluZSBQUF9PTl9ERUxBWVMJMHg2MTIwOAorI2RlZmluZSBQUF9PRkZfREVMQVlTCTB4NjEyMGMKKyNkZWZpbmUgUFBfRElWSVNPUgkweDYxMjEwCisKKy8qIFBhbmVsIGZpdHRpbmcgKi8KKyNkZWZpbmUgUEZJVF9DT05UUk9MCTB4NjEyMzAKKyNkZWZpbmUgICBQRklUX0VOQUJMRQkJKDEgPDwgMzEpCisjZGVmaW5lICAgUEZJVF9QSVBFX01BU0sJKDMgPDwgMjkpCisjZGVmaW5lICAgUEZJVF9QSVBFX1NISUZUCTI5CisjZGVmaW5lICAgVkVSVF9JTlRFUlBfRElTQUJMRQkoMCA8PCAxMCkKKyNkZWZpbmUgICBWRVJUX0lOVEVSUF9CSUxJTkVBUgkoMSA8PCAxMCkKKyNkZWZpbmUgICBWRVJUX0lOVEVSUF9NQVNLCSgzIDw8IDEwKQorI2RlZmluZSAgIFZFUlRfQVVUT19TQ0FMRQkoMSA8PCA5KQorI2RlZmluZSAgIEhPUklaX0lOVEVSUF9ESVNBQkxFCSgwIDw8IDYpCisjZGVmaW5lICAgSE9SSVpfSU5URVJQX0JJTElORUFSCSgxIDw8IDYpCisjZGVmaW5lICAgSE9SSVpfSU5URVJQX01BU0sJKDMgPDwgNikKKyNkZWZpbmUgICBIT1JJWl9BVVRPX1NDQUxFCSgxIDw8IDUpCisjZGVmaW5lICAgUEFORUxfOFRPNl9ESVRIRVJfRU5BQkxFICgxIDw8IDMpCisjZGVmaW5lIFBGSVRfUEdNX1JBVElPUwkweDYxMjM0CisjZGVmaW5lICAgUEZJVF9WRVJUX1NDQUxFX01BU0sJCQkweGZmZjAwMDAwCisjZGVmaW5lICAgUEZJVF9IT1JJWl9TQ0FMRV9NQVNLCQkJMHgwMDAwZmZmMAorI2RlZmluZSBQRklUX0FVVE9fUkFUSU9TIDB4NjEyMzgKKworLyogQmFja2xpZ2h0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQkxDX1BXTV9DVEwJCTB4NjEyNTQKKyNkZWZpbmUgICBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX1NISUZUCQkoMTcpCisjZGVmaW5lIEJMQ19QV01fQ1RMMgkJMHg2MTI1MCAvKiA5NjUrIG9ubHkgKi8KKyNkZWZpbmUgICBCTE1fQ09NQklOQVRJT05fTU9ERSAoMSA8PCAzMCkKKy8qCisgKiBUaGlzIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IDE1IGJpdHMgb2YgdGhlIG51bWJlciBvZiBiYWNrbGlnaHQgY3ljbGVzIGluIGEKKyAqIGNvbXBsZXRlIGN5Y2xlIG9mIHRoZSBtb2R1bGF0ZWQgYmFja2xpZ2h0IGNvbnRyb2wuCisgKgorICogVGhlIGFjdHVhbCB2YWx1ZSBpcyB0aGlzIGZpZWxkIG11bHRpcGxpZWQgYnkgdHdvLgorICovCisjZGVmaW5lICAgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9NQVNLCQkoMHg3ZmZmIDw8IDE3KQorI2RlZmluZSAgIEJMTV9MRUdBQ1lfTU9ERQkJCQkoMSA8PCAxNikKKy8qCisgKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgY3ljbGVzIG91dCBvZiB0aGUgYmFja2xpZ2h0IG1vZHVsYXRpb24gY3ljbGUgZm9yIHdoaWNoCisgKiB0aGUgYmFja2xpZ2h0IGlzIG9uLgorICoKKyAqIFRoaXMgZmllbGQgbXVzdCBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjeWNsZXMgaW4gdGhlIGNvbXBsZXRlCisgKiBiYWNrbGlnaHQgbW9kdWxhdGlvbiBjeWNsZS4KKyAqLworI2RlZmluZSAgIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX1NISUZUCQkoMCkKKyNkZWZpbmUgICBCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLCQkoMHhmZmZmKQorCisvKiBUViBwb3J0IGNvbnRyb2wgKi8KKyNkZWZpbmUgVFZfQ1RMCQkJMHg2ODAwMAorLyoqIEVuYWJsZXMgdGhlIFRWIGVuY29kZXIgKi8KKyMgZGVmaW5lIFRWX0VOQ19FTkFCTEUJCQkoMSA8PCAzMSkKKy8qKiBTb3VyY2VzIHRoZSBUViBlbmNvZGVyIGlucHV0IGZyb20gcGlwZSBCIGluc3RlYWQgb2YgQS4gKi8KKyMgZGVmaW5lIFRWX0VOQ19QSVBFQl9TRUxFQ1QJCSgxIDw8IDMwKQorLyoqIE91dHB1dHMgY29tcG9zaXRlIHZpZGVvIChEQUMgQSBvbmx5KSAqLworIyBkZWZpbmUgVFZfRU5DX09VVFBVVF9DT01QT1NJVEUJKDAgPDwgMjgpCisvKiogT3V0cHV0cyBTVmlkZW8gdmlkZW8gKERBQyBCL0MpICovCisjIGRlZmluZSBUVl9FTkNfT1VUUFVUX1NWSURFTwkJKDEgPDwgMjgpCisvKiogT3V0cHV0cyBDb21wb25lbnQgdmlkZW8gKERBQyBBL0IvQykgKi8KKyMgZGVmaW5lIFRWX0VOQ19PVVRQVVRfQ09NUE9ORU5UCSgyIDw8IDI4KQorLyoqIE91dHB1dHMgQ29tcG9zaXRlIGFuZCBTVmlkZW8gKERBQyBBL0IvQykgKi8KKyMgZGVmaW5lIFRWX0VOQ19PVVRQVVRfU1ZJREVPX0NPTVBPU0lURQkoMyA8PCAyOCkKKyMgZGVmaW5lIFRWX1RSSUxFVkVMX1NZTkMJCSgxIDw8IDIxKQorLyoqIEVuYWJsZXMgc2xvdyBzeW5jIGdlbmVyYXRpb24gKDk0NUdNIG9ubHkpICovCisjIGRlZmluZSBUVl9TTE9XX1NZTkMJCQkoMSA8PCAyMCkKKy8qKiBTZWxlY3RzIDR4IG92ZXJzYW1wbGluZyBmb3IgNDgwaSBhbmQgNTc2cCAqLworIyBkZWZpbmUgVFZfT1ZFUlNBTVBMRV80WAkJKDAgPDwgMTgpCisvKiogU2VsZWN0cyAyeCBvdmVyc2FtcGxpbmcgZm9yIDcyMHAgYW5kIDEwODBpICovCisjIGRlZmluZSBUVl9PVkVSU0FNUExFXzJYCQkoMSA8PCAxOCkKKy8qKiBTZWxlY3RzIG5vIG92ZXJzYW1wbGluZyBmb3IgMTA4MHAgKi8KKyMgZGVmaW5lIFRWX09WRVJTQU1QTEVfTk9ORQkJKDIgPDwgMTgpCisvKiogU2VsZWN0cyA4eCBvdmVyc2FtcGxpbmcgKi8KKyMgZGVmaW5lIFRWX09WRVJTQU1QTEVfOFgJCSgzIDw8IDE4KQorLyoqIFNlbGVjdHMgcHJvZ3Jlc3NpdmUgbW9kZSByYXRoZXIgdGhhbiBpbnRlcmxhY2VkICovCisjIGRlZmluZSBUVl9QUk9HUkVTU0lWRQkJCSgxIDw8IDE3KQorLyoqIFNldHMgdGhlIGNvbG9yYnVyc3QgdG8gUEFMIG1vZGUuICBSZXF1aXJlZCBmb3Igbm9uLU0gUEFMIG1vZGVzLiAqLworIyBkZWZpbmUgVFZfUEFMX0JVUlNUCQkJKDEgPDwgMTYpCisvKiogRmllbGQgZm9yIHNldHRpbmcgZGVsYXkgb2YgWSBjb21wYXJlZCB0byBDICovCisjIGRlZmluZSBUVl9ZQ19TS0VXX01BU0sJCSg3IDw8IDEyKQorLyoqIEVuYWJsZXMgYSBmaXggZm9yIDQ4MHAvNTc2cCBzdGFuZGFyZCBkZWZpbml0aW9uIG1vZGVzIG9uIHRoZSA5MTVHTSBvbmx5ICovCisjIGRlZmluZSBUVl9FTkNfU0RQX0ZJWAkJCSgxIDw8IDExKQorLyoqCisgKiBFbmFibGVzIGEgZml4IGZvciB0aGUgOTE1R00gb25seS4KKyAqCisgKiBOb3Qgc3VyZSB3aGF0IGl0IGRvZXMuCisgKi8KKyMgZGVmaW5lIFRWX0VOQ19DMF9GSVgJCQkoMSA8PCAxMCkKKy8qKiBCaXRzIHRoYXQgbXVzdCBiZSBwcmVzZXJ2ZWQgYnkgc29mdHdhcmUgKi8KKyMgZGVmaW5lIFRWX0NUTF9TQVZFCQkJKCgzIDw8IDgpIHwgKDMgPDwgNikpCisjIGRlZmluZSBUVl9GVVNFX1NUQVRFX01BU0sJCSgzIDw8IDQpCisvKiogUmVhZC1vbmx5IHN0YXRlIHRoYXQgcmVwb3J0cyBhbGwgZmVhdHVyZXMgZW5hYmxlZCAqLworIyBkZWZpbmUgVFZfRlVTRV9TVEFURV9FTkFCTEVECQkoMCA8PCA0KQorLyoqIFJlYWQtb25seSBzdGF0ZSB0aGF0IHJlcG9ydHMgdGhhdCBNYWNyb3Zpc2lvbiBpcyBkaXNhYmxlZCBpbiBoYXJkd2FyZSovCisjIGRlZmluZSBUVl9GVVNFX1NUQVRFX05PX01BQ1JPVklTSU9OCSgxIDw8IDQpCisvKiogUmVhZC1vbmx5IHN0YXRlIHRoYXQgcmVwb3J0cyB0aGF0IFRWLW91dCBpcyBkaXNhYmxlZCBpbiBoYXJkd2FyZS4gKi8KKyMgZGVmaW5lIFRWX0ZVU0VfU1RBVEVfRElTQUJMRUQJCSgyIDw8IDQpCisvKiogTm9ybWFsIG9wZXJhdGlvbiAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX05PUk1BTAkJKDAgPDwgMCkKKy8qKiBFbmNvZGVyIHRlc3QgcGF0dGVybiAxIC0gY29tYm8gcGF0dGVybiAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX1BBVFRFUk5fMQkJKDEgPDwgMCkKKy8qKiBFbmNvZGVyIHRlc3QgcGF0dGVybiAyIC0gZnVsbCBzY3JlZW4gdmVydGljYWwgNzUlIGNvbG9yIGJhcnMgKi8KKyMgZGVmaW5lIFRWX1RFU1RfTU9ERV9QQVRURVJOXzIJCSgyIDw8IDApCisvKiogRW5jb2RlciB0ZXN0IHBhdHRlcm4gMyAtIGZ1bGwgc2NyZWVuIGhvcml6b250YWwgNzUlIGNvbG9yIGJhcnMgKi8KKyMgZGVmaW5lIFRWX1RFU1RfTU9ERV9QQVRURVJOXzMJCSgzIDw8IDApCisvKiogRW5jb2RlciB0ZXN0IHBhdHRlcm4gNCAtIHJhbmRvbSBub2lzZSAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX1BBVFRFUk5fNAkJKDQgPDwgMCkKKy8qKiBFbmNvZGVyIHRlc3QgcGF0dGVybiA1IC0gbGluZWFyIGNvbG9yIHJhbXBzICovCisjIGRlZmluZSBUVl9URVNUX01PREVfUEFUVEVSTl81CQkoNSA8PCAwKQorLyoqCisgKiBUaGlzIHRlc3QgbW9kZSBmb3JjZXMgdGhlIERBQ3MgdG8gNTAlIG9mIGZ1bGwgb3V0cHV0LgorICoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgbG9hZCBkZXRlY3Rpb24gaW4gY29tYmluYXRpb24gd2l0aCBUVkRBQ19TRU5TRV9NQVNLCisgKi8KKyMgZGVmaW5lIFRWX1RFU1RfTU9ERV9NT05JVE9SX0RFVEVDVAkoNyA8PCAwKQorIyBkZWZpbmUgVFZfVEVTVF9NT0RFX01BU0sJCSg3IDw8IDApCisKKyNkZWZpbmUgVFZfREFDCQkJMHg2ODAwNAorLyoqCisgKiBSZXBvcnRzIHRoYXQgREFDIHN0YXRlIGNoYW5nZSBsb2dpYyBoYXMgcmVwb3J0ZWQgY2hhbmdlIChSTykuCisgKgorICogVGhpcyBnZXRzIGNsZWFyZWQgd2hlbiBUVl9EQUNfU1RBVEVfRU4gaXMgY2xlYXJlZAorKi8KKyMgZGVmaW5lIFRWREFDX1NUQVRFX0NIRwkJKDEgPDwgMzEpCisjIGRlZmluZSBUVkRBQ19TRU5TRV9NQVNLCQkoNyA8PCAyOCkKKy8qKiBSZXBvcnRzIHRoYXQgREFDIEEgdm9sdGFnZSBpcyBhYm92ZSB0aGUgZGV0ZWN0IHRocmVzaG9sZCAqLworIyBkZWZpbmUgVFZEQUNfQV9TRU5TRQkJCSgxIDw8IDMwKQorLyoqIFJlcG9ydHMgdGhhdCBEQUMgQiB2b2x0YWdlIGlzIGFib3ZlIHRoZSBkZXRlY3QgdGhyZXNob2xkICovCisjIGRlZmluZSBUVkRBQ19CX1NFTlNFCQkJKDEgPDwgMjkpCisvKiogUmVwb3J0cyB0aGF0IERBQyBDIHZvbHRhZ2UgaXMgYWJvdmUgdGhlIGRldGVjdCB0aHJlc2hvbGQgKi8KKyMgZGVmaW5lIFRWREFDX0NfU0VOU0UJCQkoMSA8PCAyOCkKKy8qKgorICogRW5hYmxlcyBEQUMgc3RhdGUgZGV0ZWN0aW9uIGxvZ2ljLCBmb3IgbG9hZC1iYXNlZCBUViBkZXRlY3Rpb24uCisgKgorICogVGhlIFBMTCBvZiB0aGUgY2hvc2VuIHBpcGUgKGluIFRWX0NUTCkgbXVzdCBiZSBydW5uaW5nLCBhbmQgdGhlIGVuY29kZXIgc2V0CisgKiB0byBvZmYsIGZvciBsb2FkIGRldGVjdGlvbiB0byB3b3JrLgorICovCisjIGRlZmluZSBUVkRBQ19TVEFURV9DSEdfRU4JCSgxIDw8IDI3KQorLyoqIFNldHMgdGhlIERBQyBBIHNlbnNlIHZhbHVlIHRvIGhpZ2ggKi8KKyMgZGVmaW5lIFRWREFDX0FfU0VOU0VfQ1RMCQkoMSA8PCAyNikKKy8qKiBTZXRzIHRoZSBEQUMgQiBzZW5zZSB2YWx1ZSB0byBoaWdoICovCisjIGRlZmluZSBUVkRBQ19CX1NFTlNFX0NUTAkJKDEgPDwgMjUpCisvKiogU2V0cyB0aGUgREFDIEMgc2Vuc2UgdmFsdWUgdG8gaGlnaCAqLworIyBkZWZpbmUgVFZEQUNfQ19TRU5TRV9DVEwJCSgxIDw8IDI0KQorLyoqIE92ZXJyaWRlcyB0aGUgRU5DX0VOQUJMRSBhbmQgREFDIHZvbHRhZ2UgbGV2ZWxzICovCisjIGRlZmluZSBEQUNfQ1RMX09WRVJSSURFCQkoMSA8PCA3KQorLyoqIFNldHMgdGhlIHNsZXcgcmF0ZS4gIE11c3QgYmUgcHJlc2VydmVkIGluIHNvZnR3YXJlICovCisjIGRlZmluZSBFTkNfVFZEQUNfU0xFV19GQVNUCQkoMSA8PCA2KQorIyBkZWZpbmUgREFDX0FfMV8zX1YJCQkoMCA8PCA0KQorIyBkZWZpbmUgREFDX0FfMV8xX1YJCQkoMSA8PCA0KQorIyBkZWZpbmUgREFDX0FfMF83X1YJCQkoMiA8PCA0KQorIyBkZWZpbmUgREFDX0FfT0ZGCQkJKDMgPDwgNCkKKyMgZGVmaW5lIERBQ19CXzFfM19WCQkJKDAgPDwgMikKKyMgZGVmaW5lIERBQ19CXzFfMV9WCQkJKDEgPDwgMikKKyMgZGVmaW5lIERBQ19CXzBfN19WCQkJKDIgPDwgMikKKyMgZGVmaW5lIERBQ19CX09GRgkJCSgzIDw8IDIpCisjIGRlZmluZSBEQUNfQ18xXzNfVgkJCSgwIDw8IDApCisjIGRlZmluZSBEQUNfQ18xXzFfVgkJCSgxIDw8IDApCisjIGRlZmluZSBEQUNfQ18wXzdfVgkJCSgyIDw8IDApCisjIGRlZmluZSBEQUNfQ19PRkYJCQkoMyA8PCAwKQorCisvKioKKyAqIENTQyBjb2VmZmljaWVudHMgYXJlIHN0b3JlZCBpbiBhIGZsb2F0aW5nIHBvaW50IGZvcm1hdCB3aXRoIDkgYml0cyBvZgorICogbWFudGlzc2EgYW5kIDIgb3IgMyBiaXRzIG9mIGV4cG9uZW50LiAgVGhlIGV4cG9uZW50IGlzIHJlcHJlc2VudGVkIGFzIDIqKi1uLAorICogd2hlcmUgMi1iaXQgZXhwb25lbnRzIGFyZSB1bnNpZ25lZCBuLCBhbmQgMy1iaXQgZXhwb25lbnRzIGFyZSBzaWduZWQgbiB3aXRoCisgKiAtMSAoMHgzKSBiZWluZyB0aGUgb25seSBsZWdhbCBuZWdhdGl2ZSB2YWx1ZS4KKyAqLworI2RlZmluZSBUVl9DU0NfWQkJMHg2ODAxMAorIyBkZWZpbmUgVFZfUllfTUFTSwkJCTB4MDdmZjAwMDAKKyMgZGVmaW5lIFRWX1JZX1NISUZUCQkJMTYKKyMgZGVmaW5lIFRWX0dZX01BU0sJCQkweDAwMDAwZmZmCisjIGRlZmluZSBUVl9HWV9TSElGVAkJCTAKKworI2RlZmluZSBUVl9DU0NfWTIJCTB4NjgwMTQKKyMgZGVmaW5lIFRWX0JZX01BU0sJCQkweDA3ZmYwMDAwCisjIGRlZmluZSBUVl9CWV9TSElGVAkJCTE2CisvKioKKyAqIFkgYXR0ZW51YXRpb24gZm9yIGNvbXBvbmVudCB2aWRlby4KKyAqCisgKiBTdG9yZWQgaW4gMS45IGZpeGVkIHBvaW50LgorICovCisjIGRlZmluZSBUVl9BWV9NQVNLCQkJMHgwMDAwMDNmZgorIyBkZWZpbmUgVFZfQVlfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfQ1NDX1UJCTB4NjgwMTgKKyMgZGVmaW5lIFRWX1JVX01BU0sJCQkweDA3ZmYwMDAwCisjIGRlZmluZSBUVl9SVV9TSElGVAkJCTE2CisjIGRlZmluZSBUVl9HVV9NQVNLCQkJMHgwMDAwMDdmZgorIyBkZWZpbmUgVFZfR1VfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfQ1NDX1UyCQkweDY4MDFjCisjIGRlZmluZSBUVl9CVV9NQVNLCQkJMHgwN2ZmMDAwMAorIyBkZWZpbmUgVFZfQlVfU0hJRlQJCQkxNgorLyoqCisgKiBVIGF0dGVudWF0aW9uIGZvciBjb21wb25lbnQgdmlkZW8uCisgKgorICogU3RvcmVkIGluIDEuOSBmaXhlZCBwb2ludC4KKyAqLworIyBkZWZpbmUgVFZfQVVfTUFTSwkJCTB4MDAwMDAzZmYKKyMgZGVmaW5lIFRWX0FVX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX0NTQ19WCQkweDY4MDIwCisjIGRlZmluZSBUVl9SVl9NQVNLCQkJMHgwZmZmMDAwMAorIyBkZWZpbmUgVFZfUlZfU0hJRlQJCQkxNgorIyBkZWZpbmUgVFZfR1ZfTUFTSwkJCTB4MDAwMDA3ZmYKKyMgZGVmaW5lIFRWX0dWX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX0NTQ19WMgkJMHg2ODAyNAorIyBkZWZpbmUgVFZfQlZfTUFTSwkJCTB4MDdmZjAwMDAKKyMgZGVmaW5lIFRWX0JWX1NISUZUCQkJMTYKKy8qKgorICogViBhdHRlbnVhdGlvbiBmb3IgY29tcG9uZW50IHZpZGVvLgorICoKKyAqIFN0b3JlZCBpbiAxLjkgZml4ZWQgcG9pbnQuCisgKi8KKyMgZGVmaW5lIFRWX0FWX01BU0sJCQkweDAwMDAwN2ZmCisjIGRlZmluZSBUVl9BVl9TSElGVAkJCTAKKworI2RlZmluZSBUVl9DTFJfS05PQlMJCTB4NjgwMjgKKy8qKiAycy1jb21wbGVtZW50IGJyaWdodG5lc3MgYWRqdXN0bWVudCAqLworIyBkZWZpbmUgVFZfQlJJR0hUTkVTU19NQVNLCQkweGZmMDAwMDAwCisjIGRlZmluZSBUVl9CUklHSFRORVNTX1NISUZUCQkyNAorLyoqIENvbnRyYXN0IGFkanVzdG1lbnQsIGFzIGEgMi42IHVuc2lnbmVkIGZsb2F0aW5nIHBvaW50IG51bWJlciAqLworIyBkZWZpbmUgVFZfQ09OVFJBU1RfTUFTSwkJMHgwMGZmMDAwMAorIyBkZWZpbmUgVFZfQ09OVFJBU1RfU0hJRlQJCTE2CisvKiogU2F0dXJhdGlvbiBhZGp1c3RtZW50LCBhcyBhIDIuNiB1bnNpZ25lZCBmbG9hdGluZyBwb2ludCBudW1iZXIgKi8KKyMgZGVmaW5lIFRWX1NBVFVSQVRJT05fTUFTSwkJMHgwMDAwZmYwMAorIyBkZWZpbmUgVFZfU0FUVVJBVElPTl9TSElGVAkJOAorLyoqIEh1ZSBhZGp1c3RtZW50LCBhcyBhbiBpbnRlZ2VyIHBoYXNlIGFuZ2xlIGluIGRlZ3JlZXMgKi8KKyMgZGVmaW5lIFRWX0hVRV9NQVNLCQkJMHgwMDAwMDBmZgorIyBkZWZpbmUgVFZfSFVFX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX0NMUl9MRVZFTAkJMHg2ODAyYworLyoqIENvbnRyb2xzIHRoZSBEQUMgbGV2ZWwgZm9yIGJsYWNrICovCisjIGRlZmluZSBUVl9CTEFDS19MRVZFTF9NQVNLCQkweDAxZmYwMDAwCisjIGRlZmluZSBUVl9CTEFDS19MRVZFTF9TSElGVAkJMTYKKy8qKiBDb250cm9scyB0aGUgREFDIGxldmVsIGZvciBibGFua2luZyAqLworIyBkZWZpbmUgVFZfQkxBTktfTEVWRUxfTUFTSwkJMHgwMDAwMDFmZgorIyBkZWZpbmUgVFZfQkxBTktfTEVWRUxfU0hJRlQJCTAKKworI2RlZmluZSBUVl9IX0NUTF8xCQkweDY4MDMwCisvKiogTnVtYmVyIG9mIHBpeGVscyBpbiB0aGUgaHN5bmMuICovCisjIGRlZmluZSBUVl9IU1lOQ19FTkRfTUFTSwkJMHgxZmZmMDAwMAorIyBkZWZpbmUgVFZfSFNZTkNfRU5EX1NISUZUCQkxNgorLyoqIFRvdGFsIG51bWJlciBvZiBwaXhlbHMgbWludXMgb25lIGluIHRoZSBsaW5lIChkaXNwbGF5IGFuZCBibGFua2luZykuICovCisjIGRlZmluZSBUVl9IVE9UQUxfTUFTSwkJCTB4MDAwMDFmZmYKKyMgZGVmaW5lIFRWX0hUT1RBTF9TSElGVAkJMAorCisjZGVmaW5lIFRWX0hfQ1RMXzIJCTB4NjgwMzQKKy8qKiBFbmFibGVzIHRoZSBjb2xvcmJ1cnN0IChuZWVkZWQgZm9yIG5vbi1jb21wb25lbnQgY29sb3IpICovCisjIGRlZmluZSBUVl9CVVJTVF9FTkEJCQkoMSA8PCAzMSkKKy8qKiBPZmZzZXQgb2YgdGhlIGNvbG9yYnVyc3QgZnJvbSB0aGUgc3RhcnQgb2YgaHN5bmMsIGluIHBpeGVscyBtaW51cyBvbmUuICovCisjIGRlZmluZSBUVl9IQlVSU1RfU1RBUlRfU0hJRlQJCTE2CisjIGRlZmluZSBUVl9IQlVSU1RfU1RBUlRfTUFTSwkJMHgxZmZmMDAwMAorLyoqIExlbmd0aCBvZiB0aGUgY29sb3JidXJzdCAqLworIyBkZWZpbmUgVFZfSEJVUlNUX0xFTl9TSElGVAkJMAorIyBkZWZpbmUgVFZfSEJVUlNUX0xFTl9NQVNLCQkweDAwMDFmZmYKKworI2RlZmluZSBUVl9IX0NUTF8zCQkweDY4MDM4CisvKiogRW5kIG9mIGhibGFuaywgbWVhc3VyZWQgaW4gcGl4ZWxzIG1pbnVzIG9uZSBmcm9tIHN0YXJ0IG9mIGhzeW5jICovCisjIGRlZmluZSBUVl9IQkxBTktfRU5EX1NISUZUCQkxNgorIyBkZWZpbmUgVFZfSEJMQU5LX0VORF9NQVNLCQkweDFmZmYwMDAwCisvKiogU3RhcnQgb2YgaGJsYW5rLCBtZWFzdXJlZCBpbiBwaXhlbHMgbWludXMgb25lIGZyb20gc3RhcnQgb2YgaHN5bmMgKi8KKyMgZGVmaW5lIFRWX0hCTEFOS19TVEFSVF9TSElGVAkJMAorIyBkZWZpbmUgVFZfSEJMQU5LX1NUQVJUX01BU0sJCTB4MDAwMWZmZgorCisjZGVmaW5lIFRWX1ZfQ1RMXzEJCTB4NjgwM2MKKy8qKiBYWFggKi8KKyMgZGVmaW5lIFRWX05CUl9FTkRfU0hJRlQJCTE2CisjIGRlZmluZSBUVl9OQlJfRU5EX01BU0sJCTB4MDdmZjAwMDAKKy8qKiBYWFggKi8KKyMgZGVmaW5lIFRWX1ZJX0VORF9GMV9TSElGVAkJOAorIyBkZWZpbmUgVFZfVklfRU5EX0YxX01BU0sJCTB4MDAwMDNmMDAKKy8qKiBYWFggKi8KKyMgZGVmaW5lIFRWX1ZJX0VORF9GMl9TSElGVAkJMAorIyBkZWZpbmUgVFZfVklfRU5EX0YyX01BU0sJCTB4MDAwMDAwM2YKKworI2RlZmluZSBUVl9WX0NUTF8yCQkweDY4MDQwCisvKiogTGVuZ3RoIG9mIHZzeW5jLCBpbiBoYWxmIGxpbmVzICovCisjIGRlZmluZSBUVl9WU1lOQ19MRU5fTUFTSwkJMHgwN2ZmMDAwMAorIyBkZWZpbmUgVFZfVlNZTkNfTEVOX1NISUZUCQkxNgorLyoqIE9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdnN5bmMgaW4gZmllbGQgMSwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBoYWxmIGxpbmVzLgorICovCisjIGRlZmluZSBUVl9WU1lOQ19TVEFSVF9GMV9NQVNLCQkweDAwMDA3ZjAwCisjIGRlZmluZSBUVl9WU1lOQ19TVEFSVF9GMV9TSElGVAk4CisvKioKKyAqIE9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdnN5bmMgaW4gZmllbGQgMiwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBoYWxmIGxpbmVzLgorICovCisjIGRlZmluZSBUVl9WU1lOQ19TVEFSVF9GMl9NQVNLCQkweDAwMDAwMDdmCisjIGRlZmluZSBUVl9WU1lOQ19TVEFSVF9GMl9TSElGVAkwCisKKyNkZWZpbmUgVFZfVl9DVExfMwkJMHg2ODA0NAorLyoqIEVuYWJsZXMgZ2VuZXJhdGlvbiBvZiB0aGUgZXF1YWxpemF0aW9uIHNpZ25hbCAqLworIyBkZWZpbmUgVFZfRVFVQUxfRU5BCQkJKDEgPDwgMzEpCisvKiogTGVuZ3RoIG9mIHZzeW5jLCBpbiBoYWxmIGxpbmVzICovCisjIGRlZmluZSBUVl9WRVFfTEVOX01BU0sJCTB4MDA3ZjAwMDAKKyMgZGVmaW5lIFRWX1ZFUV9MRU5fU0hJRlQJCTE2CisvKiogT2Zmc2V0IG9mIHRoZSBzdGFydCBvZiBlcXVhbGl6YXRpb24gaW4gZmllbGQgMSwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbgorICogdGhlIG51bWJlciBvZiBoYWxmIGxpbmVzLgorICovCisjIGRlZmluZSBUVl9WRVFfU1RBUlRfRjFfTUFTSwkJMHgwMDA3ZjAwCisjIGRlZmluZSBUVl9WRVFfU1RBUlRfRjFfU0hJRlQJCTgKKy8qKgorICogT2Zmc2V0IG9mIHRoZSBzdGFydCBvZiBlcXVhbGl6YXRpb24gaW4gZmllbGQgMiwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbgorICogdGhlIG51bWJlciBvZiBoYWxmIGxpbmVzLgorICovCisjIGRlZmluZSBUVl9WRVFfU1RBUlRfRjJfTUFTSwkJMHgwMDAwMDdmCisjIGRlZmluZSBUVl9WRVFfU1RBUlRfRjJfU0hJRlQJCTAKKworI2RlZmluZSBUVl9WX0NUTF80CQkweDY4MDQ4CisvKioKKyAqIE9mZnNldCB0byBzdGFydCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdmVydGljYWwgc3RhcnQuCisgKi8KKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GMV9NQVNLCTB4MDAzZjAwMDAKKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GMV9TSElGVAkxNgorLyoqCisgKiBPZmZzZXQgdG8gdGhlIGVuZCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlIHN0YXJ0IG9mIE5CUi4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX0VORF9GMV9NQVNLCQkweDAwMDAwMGZmCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0YxX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfVl9DVExfNQkJMHg2ODA0YworLyoqCisgKiBPZmZzZXQgdG8gc3RhcnQgb2YgdmVydGljYWwgY29sb3JidXJzdCwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBsaW5lcyBmcm9tIHZlcnRpY2FsIHN0YXJ0LgorICovCisjIGRlZmluZSBUVl9WQlVSU1RfU1RBUlRfRjJfTUFTSwkweDAwM2YwMDAwCisjIGRlZmluZSBUVl9WQlVSU1RfU1RBUlRfRjJfU0hJRlQJMTYKKy8qKgorICogT2Zmc2V0IHRvIHRoZSBlbmQgb2YgdmVydGljYWwgY29sb3JidXJzdCwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBsaW5lcyBmcm9tIHRoZSBzdGFydCBvZiBOQlIuCisgKi8KKyMgZGVmaW5lIFRWX1ZCVVJTVF9FTkRfRjJfTUFTSwkJMHgwMDAwMDBmZgorIyBkZWZpbmUgVFZfVkJVUlNUX0VORF9GMl9TSElGVAkJMAorCisjZGVmaW5lIFRWX1ZfQ1RMXzYJCTB4NjgwNTAKKy8qKgorICogT2Zmc2V0IHRvIHN0YXJ0IG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB2ZXJ0aWNhbCBzdGFydC4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0YzX01BU0sJMHgwMDNmMDAwMAorIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0YzX1NISUZUCTE2CisvKioKKyAqIE9mZnNldCB0byB0aGUgZW5kIG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUgc3RhcnQgb2YgTkJSLgorICovCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0YzX01BU0sJCTB4MDAwMDAwZmYKKyMgZGVmaW5lIFRWX1ZCVVJTVF9FTkRfRjNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9WX0NUTF83CQkweDY4MDU0CisvKioKKyAqIE9mZnNldCB0byBzdGFydCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdmVydGljYWwgc3RhcnQuCisgKi8KKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GNF9NQVNLCTB4MDAzZjAwMDAKKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GNF9TSElGVAkxNgorLyoqCisgKiBPZmZzZXQgdG8gdGhlIGVuZCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlIHN0YXJ0IG9mIE5CUi4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX0VORF9GNF9NQVNLCQkweDAwMDAwMGZmCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0Y0X1NISUZUCQkwCisKKyNkZWZpbmUgVFZfU0NfQ1RMXzEJCTB4NjgwNjAKKy8qKiBUdXJucyBvbiB0aGUgZmlyc3Qgc3ViY2FycmllciBwaGFzZSBnZW5lcmF0aW9uIEREQSAqLworIyBkZWZpbmUgVFZfU0NfRERBMV9FTgkJCSgxIDw8IDMxKQorLyoqIFR1cm5zIG9uIHRoZSBmaXJzdCBzdWJjYXJyaWVyIHBoYXNlIGdlbmVyYXRpb24gRERBICovCisjIGRlZmluZSBUVl9TQ19EREEyX0VOCQkJKDEgPDwgMzApCisvKiogVHVybnMgb24gdGhlIGZpcnN0IHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDX0REQTNfRU4JCQkoMSA8PCAyOSkKKy8qKiBTZXRzIHRoZSBzdWJjYXJyaWVyIEREQSB0byByZXNldCBmcmVxdWVuY3kgZXZlcnkgb3RoZXIgZmllbGQgKi8KKyMgZGVmaW5lIFRWX1NDX1JFU0VUX0VWRVJZXzIJCSgwIDw8IDI0KQorLyoqIFNldHMgdGhlIHN1YmNhcnJpZXIgRERBIHRvIHJlc2V0IGZyZXF1ZW5jeSBldmVyeSBmb3VydGggZmllbGQgKi8KKyMgZGVmaW5lIFRWX1NDX1JFU0VUX0VWRVJZXzQJCSgxIDw8IDI0KQorLyoqIFNldHMgdGhlIHN1YmNhcnJpZXIgRERBIHRvIHJlc2V0IGZyZXF1ZW5jeSBldmVyeSBlaWdodGggZmllbGQgKi8KKyMgZGVmaW5lIFRWX1NDX1JFU0VUX0VWRVJZXzgJCSgyIDw8IDI0KQorLyoqIFNldHMgdGhlIHN1YmNhcnJpZXIgRERBIHRvIG5ldmVyIHJlc2V0IHRoZSBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIFRWX1NDX1JFU0VUX05FVkVSCQkoMyA8PCAyNCkKKy8qKiBTZXRzIHRoZSBwZWFrIGFtcGxpdHVkZSBvZiB0aGUgY29sb3JidXJzdC4qLworIyBkZWZpbmUgVFZfQlVSU1RfTEVWRUxfTUFTSwkJMHgwMGZmMDAwMAorIyBkZWZpbmUgVFZfQlVSU1RfTEVWRUxfU0hJRlQJCTE2CisvKiogU2V0cyB0aGUgaW5jcmVtZW50IG9mIHRoZSBmaXJzdCBzdWJjYXJyaWVyIHBoYXNlIGdlbmVyYXRpb24gRERBICovCisjIGRlZmluZSBUVl9TQ0REQTFfSU5DX01BU0sJCTB4MDAwMDBmZmYKKyMgZGVmaW5lIFRWX1NDRERBMV9JTkNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9TQ19DVExfMgkJMHg2ODA2NAorLyoqIFNldHMgdGhlIHJvbGxvdmVyIGZvciB0aGUgc2Vjb25kIHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDRERBMl9TSVpFX01BU0sJCTB4N2ZmZjAwMDAKKyMgZGVmaW5lIFRWX1NDRERBMl9TSVpFX1NISUZUCQkxNgorLyoqIFNldHMgdGhlIGluY3JlZW50IG9mIHRoZSBzZWNvbmQgc3ViY2FycmllciBwaGFzZSBnZW5lcmF0aW9uIEREQSAqLworIyBkZWZpbmUgVFZfU0NEREEyX0lOQ19NQVNLCQkweDAwMDA3ZmZmCisjIGRlZmluZSBUVl9TQ0REQTJfSU5DX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfU0NfQ1RMXzMJCTB4NjgwNjgKKy8qKiBTZXRzIHRoZSByb2xsb3ZlciBmb3IgdGhlIHRoaXJkIHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDRERBM19TSVpFX01BU0sJCTB4N2ZmZjAwMDAKKyMgZGVmaW5lIFRWX1NDRERBM19TSVpFX1NISUZUCQkxNgorLyoqIFNldHMgdGhlIGluY3JlZW50IG9mIHRoZSB0aGlyZCBzdWJjYXJyaWVyIHBoYXNlIGdlbmVyYXRpb24gRERBICovCisjIGRlZmluZSBUVl9TQ0REQTNfSU5DX01BU0sJCTB4MDAwMDdmZmYKKyMgZGVmaW5lIFRWX1NDRERBM19JTkNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9XSU5fUE9TCQkweDY4MDcwCisvKiogWCBjb29yZGluYXRlIG9mIHRoZSBkaXNwbGF5IGZyb20gdGhlIHN0YXJ0IG9mIGhvcml6b250YWwgYWN0aXZlICovCisjIGRlZmluZSBUVl9YUE9TX01BU0sJCQkweDFmZmYwMDAwCisjIGRlZmluZSBUVl9YUE9TX1NISUZUCQkJMTYKKy8qKiBZIGNvb3JkaW5hdGUgb2YgdGhlIGRpc3BsYXkgZnJvbSB0aGUgc3RhcnQgb2YgdmVydGljYWwgYWN0aXZlIChOQlIpICovCisjIGRlZmluZSBUVl9ZUE9TX01BU0sJCQkweDAwMDAwZmZmCisjIGRlZmluZSBUVl9ZUE9TX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX1dJTl9TSVpFCQkweDY4MDc0CisvKiogSG9yaXpvbnRhbCBzaXplIG9mIHRoZSBkaXNwbGF5IHdpbmRvdywgbWVhc3VyZWQgaW4gcGl4ZWxzKi8KKyMgZGVmaW5lIFRWX1hTSVpFX01BU0sJCQkweDFmZmYwMDAwCisjIGRlZmluZSBUVl9YU0laRV9TSElGVAkJCTE2CisvKioKKyAqIFZlcnRpY2FsIHNpemUgb2YgdGhlIGRpc3BsYXkgd2luZG93LCBtZWFzdXJlZCBpbiBwaXhlbHMuCisgKgorICogTXVzdCBiZSBldmVuIGZvciBpbnRlcmxhY2VkIG1vZGVzLgorICovCisjIGRlZmluZSBUVl9ZU0laRV9NQVNLCQkJMHgwMDAwMGZmZgorIyBkZWZpbmUgVFZfWVNJWkVfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfRklMVEVSX0NUTF8xCQkweDY4MDgwCisvKioKKyAqIEVuYWJsZXMgYXV0b21hdGljIHNjYWxpbmcgY2FsY3VsYXRpb24uCisgKgorICogSWYgc2V0LCB0aGUgcmVzdCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBpZ25vcmVkLCBhbmQgdGhlIGNhbGN1bGF0ZWQgdmFsdWVzIGNhbgorICogYmUgcmVhZCBiYWNrIGZyb20gdGhlIHJlZ2lzdGVyLgorICovCisjIGRlZmluZSBUVl9BVVRPX1NDQUxFCQkJKDEgPDwgMzEpCisvKioKKyAqIERpc2FibGVzIHRoZSB2ZXJ0aWNhbCBmaWx0ZXIuCisgKgorICogVGhpcyBpcyByZXF1aXJlZCBvbiBtb2RlcyBtb3JlIHRoYW4gMTAyNCBwaXhlbHMgd2lkZSAqLworIyBkZWZpbmUgVFZfVl9GSUxURVJfQllQQVNTCQkoMSA8PCAyOSkKKy8qKiBFbmFibGVzIGFkYXB0aXZlIHZlcnRpY2FsIGZpbHRlcmluZyAqLworIyBkZWZpbmUgVFZfVkFEQVBUCQkJKDEgPDwgMjgpCisjIGRlZmluZSBUVl9WQURBUFRfTU9ERV9NQVNLCQkoMyA8PCAyNikKKy8qKiBTZWxlY3RzIHRoZSBsZWFzdCBhZGFwdGl2ZSB2ZXJ0aWNhbCBmaWx0ZXJpbmcgbW9kZSAqLworIyBkZWZpbmUgVFZfVkFEQVBUX01PREVfTEVBU1QJCSgwIDw8IDI2KQorLyoqIFNlbGVjdHMgdGhlIG1vZGVyYXRlbHkgYWRhcHRpdmUgdmVydGljYWwgZmlsdGVyaW5nIG1vZGUgKi8KKyMgZGVmaW5lIFRWX1ZBREFQVF9NT0RFX01PREVSQVRFCSgxIDw8IDI2KQorLyoqIFNlbGVjdHMgdGhlIG1vc3QgYWRhcHRpdmUgdmVydGljYWwgZmlsdGVyaW5nIG1vZGUgKi8KKyMgZGVmaW5lIFRWX1ZBREFQVF9NT0RFX01PU1QJCSgzIDw8IDI2KQorLyoqCisgKiBTZXRzIHRoZSBob3Jpem9udGFsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIGhvcml6b250YWwgc2NhbGluZyBmYWN0b3IgZGl2aWRlZAorICogYnkgdGhlIG92ZXJzYW1wbGluZyByYXRlLiAgVFZfSFNDQUxFIHNob3VsZCBiZSBsZXNzIHRoYW4gMSwgYW5kIHNldCB0bzoKKyAqCisgKiAoc3JjIHdpZHRoIC0gMSkgLyAoKG92ZXJzYW1wbGUgKiBkZXN0IHdpZHRoKSAtIDEpCisgKi8KKyMgZGVmaW5lIFRWX0hTQ0FMRV9GUkFDX01BU0sJCTB4MDAwMDNmZmYKKyMgZGVmaW5lIFRWX0hTQ0FMRV9GUkFDX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfRklMVEVSX0NUTF8yCQkweDY4MDg0CisvKioKKyAqIFNldHMgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgMy4xNSBmaXhlZC1wb2ludCB2ZXJ0aWNhbCBzY2FsaW5nIGZhY3Rvci4KKyAqCisgKiBUVl9WU0NBTEUgc2hvdWxkIGJlIChzcmMgaGVpZ2h0IC0gMSkgLyAoKGludGVybGFjZSAqIGRlc3QgaGVpZ2h0KSAtIDEpCisgKi8KKyMgZGVmaW5lIFRWX1ZTQ0FMRV9JTlRfTUFTSwkJMHgwMDAzODAwMAorIyBkZWZpbmUgVFZfVlNDQUxFX0lOVF9TSElGVAkJMTUKKy8qKgorICogU2V0cyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSAzLjE1IGZpeGVkLXBvaW50IHZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIFxzYSBUVl9WU0NBTEVfSU5UX01BU0sKKyAqLworIyBkZWZpbmUgVFZfVlNDQUxFX0ZSQUNfTUFTSwkJMHgwMDAwN2ZmZgorIyBkZWZpbmUgVFZfVlNDQUxFX0ZSQUNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9GSUxURVJfQ1RMXzMJCTB4NjgwODgKKy8qKgorICogU2V0cyB0aGUgaW50ZWdlciBwYXJ0IG9mIHRoZSAzLjE1IGZpeGVkLXBvaW50IHZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIFRWX1ZTQ0FMRSBzaG91bGQgYmUgKHNyYyBoZWlnaHQgLSAxKSAvICgxLzQgKiAoZGVzdCBoZWlnaHQgLSAxKSkKKyAqCisgKiBGb3IgcHJvZ3Jlc3NpdmUgbW9kZXMsIFRWX1ZTQ0FMRV9JUF9JTlQgc2hvdWxkIGJlIHNldCB0byB6ZXJvZXMuCisgKi8KKyMgZGVmaW5lIFRWX1ZTQ0FMRV9JUF9JTlRfTUFTSwkJMHgwMDAzODAwMAorIyBkZWZpbmUgVFZfVlNDQUxFX0lQX0lOVF9TSElGVAkJMTUKKy8qKgorICogU2V0cyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSAzLjE1IGZpeGVkLXBvaW50IHZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIEZvciBwcm9ncmVzc2l2ZSBtb2RlcywgVFZfVlNDQUxFX0lQX0lOVCBzaG91bGQgYmUgc2V0IHRvIHplcm9lcy4KKyAqCisgKiBcc2EgVFZfVlNDQUxFX0lQX0lOVF9NQVNLCisgKi8KKyMgZGVmaW5lIFRWX1ZTQ0FMRV9JUF9GUkFDX01BU0sJCTB4MDAwMDdmZmYKKyMgZGVmaW5lIFRWX1ZTQ0FMRV9JUF9GUkFDX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfQ0NfQ09OVFJPTAkJMHg2ODA5MAorIyBkZWZpbmUgVFZfQ0NfRU5BQkxFCQkJKDEgPDwgMzEpCisvKioKKyAqIFNwZWNpZmllcyB3aGljaCBmaWVsZCB0byBzZW5kIHRoZSBDQyBkYXRhIGluLgorICoKKyAqIENDIGRhdGEgaXMgdXN1YWxseSBzZW50IGluIGZpZWxkIDAuCisgKi8KKyMgZGVmaW5lIFRWX0NDX0ZJRF9NQVNLCQkJKDEgPDwgMjcpCisjIGRlZmluZSBUVl9DQ19GSURfU0hJRlQJCTI3CisvKiogU2V0cyB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgQ0MgZGF0YS4gIFVzdWFsbHkgMTM1LiAqLworIyBkZWZpbmUgVFZfQ0NfSE9GRl9NQVNLCQkweDAzZmYwMDAwCisjIGRlZmluZSBUVl9DQ19IT0ZGX1NISUZUCQkxNgorLyoqIFNldHMgdGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBDQyBkYXRhLiAgVXN1YWxseSAyMSAqLworIyBkZWZpbmUgVFZfQ0NfTElORV9NQVNLCQkweDAwMDAwMDNmCisjIGRlZmluZSBUVl9DQ19MSU5FX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfQ0NfREFUQQkJMHg2ODA5NAorIyBkZWZpbmUgVFZfQ0NfUkRZCQkJKDEgPDwgMzEpCisvKiogU2Vjb25kIHdvcmQgb2YgQ0MgZGF0YSB0byBiZSB0cmFuc21pdHRlZC4gKi8KKyMgZGVmaW5lIFRWX0NDX0RBVEFfMl9NQVNLCQkweDAwN2YwMDAwCisjIGRlZmluZSBUVl9DQ19EQVRBXzJfU0hJRlQJCTE2CisvKiogRmlyc3Qgd29yZCBvZiBDQyBkYXRhIHRvIGJlIHRyYW5zbWl0dGVkLiAqLworIyBkZWZpbmUgVFZfQ0NfREFUQV8xX01BU0sJCTB4MDAwMDAwN2YKKyMgZGVmaW5lIFRWX0NDX0RBVEFfMV9TSElGVAkJMAorCisjZGVmaW5lIFRWX0hfTFVNQV8wCQkweDY4MTAwCisjZGVmaW5lIFRWX0hfTFVNQV81OQkJMHg2ODFlYworI2RlZmluZSBUVl9IX0NIUk9NQV8wCQkweDY4MjAwCisjZGVmaW5lIFRWX0hfQ0hST01BXzU5CQkweDY4MmVjCisjZGVmaW5lIFRWX1ZfTFVNQV8wCQkweDY4MzAwCisjZGVmaW5lIFRWX1ZfTFVNQV80MgkJMHg2ODNhOAorI2RlZmluZSBUVl9WX0NIUk9NQV8wCQkweDY4NDAwCisjZGVmaW5lIFRWX1ZfQ0hST01BXzQyCQkweDY4NGE4CisKKy8qIERpc3BsYXkgJiBjdXJzb3IgY29udHJvbCAqLworCisvKiBQaXBlIEEgKi8KKyNkZWZpbmUgUElQRUFEU0wJCTB4NzAwMDAKKyNkZWZpbmUgUElQRUFDT05GCQkweDcwMDA4CisjZGVmaW5lICAgUElQRUFDT05GX0VOQUJMRQkoMTw8MzEpCisjZGVmaW5lICAgUElQRUFDT05GX0RJU0FCTEUJMAorI2RlZmluZSAgIFBJUEVBQ09ORl9ET1VCTEVfV0lERQkoMTw8MzApCisjZGVmaW5lICAgSTk2NV9QSVBFQ09ORl9BQ1RJVkUJKDE8PDMwKQorI2RlZmluZSAgIFBJUEVBQ09ORl9TSU5HTEVfV0lERQkwCisjZGVmaW5lICAgUElQRUFDT05GX1BJUEVfVU5MT0NLRUQgMAorI2RlZmluZSAgIFBJUEVBQ09ORl9QSVBFX0xPQ0tFRAkoMTw8MjUpCisjZGVmaW5lICAgUElQRUFDT05GX1BBTEVUVEUJMAorI2RlZmluZSAgIFBJUEVBQ09ORl9HQU1NQQkJKDE8PDI0KQorI2RlZmluZSAgIFBJUEVDT05GX0ZPUkNFX0JPUkRFUgkoMTw8MjUpCisjZGVmaW5lICAgUElQRUNPTkZfUFJPR1JFU1NJVkUJKDAgPDwgMjEpCisjZGVmaW5lICAgUElQRUNPTkZfSU5URVJMQUNFX1dfRklFTERfSU5ESUNBVElPTgkoNiA8PCAyMSkKKyNkZWZpbmUgICBQSVBFQ09ORl9JTlRFUkxBQ0VfRklFTERfMF9PTkxZCQkoNyA8PCAyMSkKKyNkZWZpbmUgUElQRUFTVEFUCQkweDcwMDI0CisjZGVmaW5lICAgUElQRV9GSUZPX1VOREVSUlVOX1NUQVRVUwkJKDFVTDw8MzEpCisjZGVmaW5lICAgUElQRV9DUkNfRVJST1JfRU5BQkxFCQkJKDFVTDw8MjkpCisjZGVmaW5lICAgUElQRV9DUkNfRE9ORV9FTkFCTEUJCQkoMVVMPDwyOCkKKyNkZWZpbmUgICBQSVBFX0dNQlVTX0VWRU5UX0VOQUJMRQkJKDFVTDw8MjcpCisjZGVmaW5lICAgUElQRV9IT1RQTFVHX0lOVEVSUlVQVF9FTkFCTEUJCSgxVUw8PDI2KQorI2RlZmluZSAgIFBJUEVfVlNZTkNfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MjUpCisjZGVmaW5lICAgUElQRV9ESVNQTEFZX0xJTkVfQ09NUEFSRV9FTkFCTEUJKDFVTDw8MjQpCisjZGVmaW5lICAgUElQRV9EUFNUX0VWRU5UX0VOQUJMRQkJKDFVTDw8MjMpCisjZGVmaW5lICAgUElQRV9MRUdBQ1lfQkxDX0VWRU5UX0VOQUJMRQkJKDFVTDw8MjIpCisjZGVmaW5lICAgUElQRV9PRERfRklFTERfSU5URVJSVVBUX0VOQUJMRQkoMVVMPDwyMSkKKyNkZWZpbmUgICBQSVBFX0VWRU5fRklFTERfSU5URVJSVVBUX0VOQUJMRQkoMVVMPDwyMCkKKyNkZWZpbmUgICBQSVBFX0hPVFBMVUdfVFZfSU5URVJSVVBUX0VOQUJMRQkoMVVMPDwxOCkgLyogcHJlLTk2NSAqLworI2RlZmluZSAgIFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUJKDFVTDw8MTgpIC8qIDk2NSBvciBsYXRlciAqLworI2RlZmluZSAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUJCSgxVUw8PDE3KQorI2RlZmluZSAgIFBJUEVfT1ZFUkxBWV9VUERBVEVEX0VOQUJMRQkJKDFVTDw8MTYpCisjZGVmaW5lICAgUElQRV9DUkNfRVJST1JfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDwxMykKKyNkZWZpbmUgICBQSVBFX0NSQ19ET05FX0lOVEVSUlVQVF9TVEFUVVMJKDFVTDw8MTIpCisjZGVmaW5lICAgUElQRV9HTUJVU19JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDwxMSkKKyNkZWZpbmUgICBQSVBFX0hPVFBMVUdfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8MTApCisjZGVmaW5lICAgUElQRV9WU1lOQ19JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDw5KQorI2RlZmluZSAgIFBJUEVfRElTUExBWV9MSU5FX0NPTVBBUkVfU1RBVFVTCSgxVUw8PDgpCisjZGVmaW5lICAgUElQRV9EUFNUX0VWRU5UX1NUQVRVUwkJKDFVTDw8NykKKyNkZWZpbmUgICBQSVBFX0xFR0FDWV9CTENfRVZFTlRfU1RBVFVTCQkoMVVMPDw2KQorI2RlZmluZSAgIFBJUEVfT0REX0ZJRUxEX0lOVEVSUlVQVF9TVEFUVVMJKDFVTDw8NSkKKyNkZWZpbmUgICBQSVBFX0VWRU5fRklFTERfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDw0KQorI2RlZmluZSAgIFBJUEVfSE9UUExVR19UVl9JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpIC8qIHByZS05NjUgKi8KKyNkZWZpbmUgICBQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpIC8qIDk2NSBvciBsYXRlciAqLworI2RlZmluZSAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEpCisjZGVmaW5lICAgUElQRV9PVkVSTEFZX1VQREFURURfU1RBVFVTCQkoMVVMPDwwKQorCisjZGVmaW5lIERTUEFSQgkJCTB4NzAwMzAKKyNkZWZpbmUgICBEU1BBUkJfQ1NUQVJUX01BU0sJKDB4N2YgPDwgNykKKyNkZWZpbmUgICBEU1BBUkJfQ1NUQVJUX1NISUZUCTcKKyNkZWZpbmUgICBEU1BBUkJfQlNUQVJUX01BU0sJKDB4N2YpCisjZGVmaW5lICAgRFNQQVJCX0JTVEFSVF9TSElGVAkwCisvKgorICogVGhlIHR3byBwaXBlIGZyYW1lIGNvdW50ZXIgcmVnaXN0ZXJzIGFyZSBub3Qgc3luY2hyb25pemVkLCBzbworICogcmVhZGluZyBhIHN0YWJsZSB2YWx1ZSBpcyBzb21ld2hhdCB0cmlja3kuIFRoZSBmb2xsb3dpbmcgY29kZQorICogc2hvdWxkIHdvcms6CisgKgorICogIGRvIHsKKyAqICAgIGhpZ2gxID0gKChJTlJFRyhQSVBFQUZSQU1FSElHSCkgJiBQSVBFX0ZSQU1FX0hJR0hfTUFTSykgPj4KKyAqICAgICAgICAgICAgIFBJUEVfRlJBTUVfSElHSF9TSElGVDsKKyAqICAgIGxvdzEgPSAgKChJTlJFRyhQSVBFQUZSQU1FUElYRUwpICYgUElQRV9GUkFNRV9MT1dfTUFTSykgPj4KKyAqICAgICAgICAgICAgIFBJUEVfRlJBTUVfTE9XX1NISUZUKTsKKyAqICAgIGhpZ2gyID0gKChJTlJFRyhQSVBFQUZSQU1FSElHSCkgJiBQSVBFX0ZSQU1FX0hJR0hfTUFTSykgPj4KKyAqICAgICAgICAgICAgIFBJUEVfRlJBTUVfSElHSF9TSElGVCk7CisgKiAgfSB3aGlsZSAoaGlnaDEgIT0gaGlnaDIpOworICogIGZyYW1lID0gKGhpZ2gxIDw8IDgpIHwgbG93MTsKKyAqLworI2RlZmluZSBQSVBFQUZSQU1FSElHSCAgICAgICAgICAweDcwMDQwCisjZGVmaW5lICAgUElQRV9GUkFNRV9ISUdIX01BU0sgICAgMHgwMDAwZmZmZgorI2RlZmluZSAgIFBJUEVfRlJBTUVfSElHSF9TSElGVCAgIDAKKyNkZWZpbmUgUElQRUFGUkFNRVBJWEVMICAgICAgICAgMHg3MDA0NAorI2RlZmluZSAgIFBJUEVfRlJBTUVfTE9XX01BU0sgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgICBQSVBFX0ZSQU1FX0xPV19TSElGVCAgICAyNAorI2RlZmluZSAgIFBJUEVfUElYRUxfTUFTSyAgICAgICAgIDB4MDBmZmZmZmYKKyNkZWZpbmUgICBQSVBFX1BJWEVMX1NISUZUICAgICAgICAwCisKKy8qIEN1cnNvciBBICYgQiByZWdzICovCisjZGVmaW5lIENVUkFDTlRSCQkweDcwMDgwCisjZGVmaW5lICAgQ1VSU09SX01PREVfRElTQUJMRSAgIDB4MDAKKyNkZWZpbmUgICBDVVJTT1JfTU9ERV82NF8zMkJfQVggMHgwNworI2RlZmluZSAgIENVUlNPUl9NT0RFXzY0X0FSR0JfQVggKCgxIDw8IDUpIHwgQ1VSU09SX01PREVfNjRfMzJCX0FYKQorI2RlZmluZSAgIE1DVVJTT1JfR0FNTUFfRU5BQkxFICAoMSA8PCAyNikKKyNkZWZpbmUgQ1VSQUJBU0UJCTB4NzAwODQKKyNkZWZpbmUgQ1VSQVBPUwkJCTB4NzAwODgKKyNkZWZpbmUgICBDVVJTT1JfUE9TX01BU0sgICAgICAgMHgwMDdGRgorI2RlZmluZSAgIENVUlNPUl9QT1NfU0lHTiAgICAgICAweDgwMDAKKyNkZWZpbmUgICBDVVJTT1JfWF9TSElGVCAgICAgICAgMAorI2RlZmluZSAgIENVUlNPUl9ZX1NISUZUICAgICAgICAxNgorI2RlZmluZSBDVVJCQ05UUgkJMHg3MDBjMAorI2RlZmluZSBDVVJCQkFTRQkJMHg3MDBjNAorI2RlZmluZSBDVVJCUE9TCQkJMHg3MDBjOAorCisvKiBEaXNwbGF5IEEgY29udHJvbCAqLworI2RlZmluZSBEU1BBQ05UUiAgICAgICAgICAgICAgICAweDcwMTgwCisjZGVmaW5lICAgRElTUExBWV9QTEFORV9FTkFCTEUJCQkoMTw8MzEpCisjZGVmaW5lICAgRElTUExBWV9QTEFORV9ESVNBQkxFCQkJMAorI2RlZmluZSAgIERJU1BQTEFORV9HQU1NQV9FTkFCTEUJCSgxPDwzMCkKKyNkZWZpbmUgICBESVNQUExBTkVfR0FNTUFfRElTQUJMRQkJMAorI2RlZmluZSAgIERJU1BQTEFORV9QSVhGT1JNQVRfTUFTSwkJKDB4Zjw8MjYpCisjZGVmaW5lICAgRElTUFBMQU5FXzhCUFAJCQkoMHgyPDwyNikKKyNkZWZpbmUgICBESVNQUExBTkVfMTVfMTZCUFAJCQkoMHg0PDwyNikKKyNkZWZpbmUgICBESVNQUExBTkVfMTZCUFAJCQkoMHg1PDwyNikKKyNkZWZpbmUgICBESVNQUExBTkVfMzJCUFBfTk9fQUxQSEEJCSgweDY8PDI2KQorI2RlZmluZSAgIERJU1BQTEFORV8zMkJQUAkJCSgweDc8PDI2KQorI2RlZmluZSAgIERJU1BQTEFORV9TVEVSRU9fRU5BQkxFCQkoMTw8MjUpCisjZGVmaW5lICAgRElTUFBMQU5FX1NURVJFT19ESVNBQkxFCQkwCisjZGVmaW5lICAgRElTUFBMQU5FX1NFTF9QSVBFX01BU0sJCSgxPDwyNCkKKyNkZWZpbmUgICBESVNQUExBTkVfU0VMX1BJUEVfQQkJCTAKKyNkZWZpbmUgICBESVNQUExBTkVfU0VMX1BJUEVfQgkJCSgxPDwyNCkKKyNkZWZpbmUgICBESVNQUExBTkVfU1JDX0tFWV9FTkFCTEUJCSgxPDwyMikKKyNkZWZpbmUgICBESVNQUExBTkVfU1JDX0tFWV9ESVNBQkxFCQkwCisjZGVmaW5lICAgRElTUFBMQU5FX0xJTkVfRE9VQkxFCQkJKDE8PDIwKQorI2RlZmluZSAgIERJU1BQTEFORV9OT19MSU5FX0RPVUJMRQkJMAorI2RlZmluZSAgIERJU1BQTEFORV9TVEVSRU9fUE9MQVJJVFlfRklSU1QJMAorI2RlZmluZSAgIERJU1BQTEFORV9TVEVSRU9fUE9MQVJJVFlfU0VDT05ECSgxPDwxOCkKKyNkZWZpbmUgRFNQQUFERFIJCTB4NzAxODQKKyNkZWZpbmUgRFNQQVNUUklERQkJMHg3MDE4OAorI2RlZmluZSBEU1BBUE9TCQkJMHg3MDE4QyAvKiByZXNlcnZlZCAqLworI2RlZmluZSBEU1BBU0laRQkJMHg3MDE5MAorI2RlZmluZSBEU1BBU1VSRgkJMHg3MDE5QyAvKiA5NjUrIG9ubHkgKi8KKyNkZWZpbmUgRFNQQVRJTEVPRkYJCTB4NzAxQTQgLyogOTY1KyBvbmx5ICovCisKKy8qIFZCSU9TIGZsYWdzICovCisjZGVmaW5lIFNXRjAwCQkJMHg3MTQxMAorI2RlZmluZSBTV0YwMQkJCTB4NzE0MTQKKyNkZWZpbmUgU1dGMDIJCQkweDcxNDE4CisjZGVmaW5lIFNXRjAzCQkJMHg3MTQxYworI2RlZmluZSBTV0YwNAkJCTB4NzE0MjAKKyNkZWZpbmUgU1dGMDUJCQkweDcxNDI0CisjZGVmaW5lIFNXRjA2CQkJMHg3MTQyOAorI2RlZmluZSBTV0YxMAkJCTB4NzA0MTAKKyNkZWZpbmUgU1dGMTEJCQkweDcwNDE0CisjZGVmaW5lIFNXRjE0CQkJMHg3MTQyMAorI2RlZmluZSBTV0YzMAkJCTB4NzI0MTQKKyNkZWZpbmUgU1dGMzEJCQkweDcyNDE4CisjZGVmaW5lIFNXRjMyCQkJMHg3MjQxYworCisvKiBQaXBlIEIgKi8KKyNkZWZpbmUgUElQRUJEU0wJCTB4NzEwMDAKKyNkZWZpbmUgUElQRUJDT05GCQkweDcxMDA4CisjZGVmaW5lIFBJUEVCU1RBVAkJMHg3MTAyNAorI2RlZmluZSBQSVBFQkZSQU1FSElHSAkJMHg3MTA0MAorI2RlZmluZSBQSVBFQkZSQU1FUElYRUwJCTB4NzEwNDQKKworLyogRGlzcGxheSBCIGNvbnRyb2wgKi8KKyNkZWZpbmUgRFNQQkNOVFIJCTB4NzExODAKKyNkZWZpbmUgICBESVNQUExBTkVfQUxQSEFfVFJBTlNfRU5BQkxFCQkoMTw8MTUpCisjZGVmaW5lICAgRElTUFBMQU5FX0FMUEhBX1RSQU5TX0RJU0FCTEUJCTAKKyNkZWZpbmUgICBESVNQUExBTkVfU1BSSVRFX0FCT1ZFX0RJU1BMQVkJMAorI2RlZmluZSAgIERJU1BQTEFORV9TUFJJVEVfQUJPVkVfT1ZFUkxBWQkoMSkKKyNkZWZpbmUgRFNQQkFERFIJCTB4NzExODQKKyNkZWZpbmUgRFNQQlNUUklERQkJMHg3MTE4OAorI2RlZmluZSBEU1BCUE9TCQkJMHg3MTE4QworI2RlZmluZSBEU1BCU0laRQkJMHg3MTE5MAorI2RlZmluZSBEU1BCU1VSRgkJMHg3MTE5QworI2RlZmluZSBEU1BCVElMRU9GRgkJMHg3MTFBNAorCisvKiBWQklPUyByZWdzICovCisjZGVmaW5lIFZHQUNOVFJMCQkweDcxNDAwCisjIGRlZmluZSBWR0FfRElTUF9ESVNBQkxFCQkJKDEgPDwgMzEpCisjIGRlZmluZSBWR0FfMlhfTU9ERQkJCQkoMSA8PCAzMCkKKyMgZGVmaW5lIFZHQV9QSVBFX0JfU0VMRUNUCQkJKDEgPDwgMjkpCisKKyNlbmRpZiAvKiBfSTkxNV9SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzZmU3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCkBAIC0wLDAgKzEsNTA5IEBACisvKgorICoKKyAqIENvcHlyaWdodCAyMDA4IChjKSBJbnRlbCBDb3Jwb3JhdGlvbgorICogICBKZXNzZSBCYXJuZXMgPGpiYXJuZXNAdmlydHVvdXNnZWVrLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUVU5HU1RFTiBHUkFQSElDUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworc3RhdGljIGJvb2wgaTkxNV9waXBlX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChwaXBlID09IFBJUEVfQSkKKwkJcmV0dXJuIChJOTE1X1JFQUQoRFBMTF9BKSAmIERQTExfVkNPX0VOQUJMRSk7CisJZWxzZQorCQlyZXR1cm4gKEk5MTVfUkVBRChEUExMX0IpICYgRFBMTF9WQ09fRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9zYXZlX3BhbGV0dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHJlZyA9IChwaXBlID09IFBJUEVfQSA/IFBBTEVUVEVfQSA6IFBBTEVUVEVfQik7CisJdTMyICphcnJheTsKKwlpbnQgaTsKKworCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkKKwkJcmV0dXJuOworCisJaWYgKHBpcGUgPT0gUElQRV9BKQorCQlhcnJheSA9IGRldl9wcml2LT5zYXZlX3BhbGV0dGVfYTsKKwllbHNlCisJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9iOworCisJZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCWFycmF5W2ldID0gSTkxNV9SRUFEKHJlZyArIChpIDw8IDIpKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9yZXN0b3JlX3BhbGV0dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHJlZyA9IChwaXBlID09IFBJUEVfQSA/IFBBTEVUVEVfQSA6IFBBTEVUVEVfQik7CisJdTMyICphcnJheTsKKwlpbnQgaTsKKworCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkKKwkJcmV0dXJuOworCisJaWYgKHBpcGUgPT0gUElQRV9BKQorCQlhcnJheSA9IGRldl9wcml2LT5zYXZlX3BhbGV0dGVfYTsKKwllbHNlCisJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9iOworCisJZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCUk5MTVfV1JJVEUocmVnICsgKGkgPDwgMiksIGFycmF5W2ldKTsKK30KKworc3RhdGljIHU4IGk5MTVfcmVhZF9pbmRleGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUxNiBpbmRleF9wb3J0LCB1MTYgZGF0YV9wb3J0LCB1OCByZWcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCUk5MTVfV1JJVEU4KGluZGV4X3BvcnQsIHJlZyk7CisJcmV0dXJuIEk5MTVfUkVBRDgoZGF0YV9wb3J0KTsKK30KKworc3RhdGljIHU4IGk5MTVfcmVhZF9hcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MTYgc3QwMSwgdTggcmVnLCB1MTYgcGFsZXR0ZV9lbmFibGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCUk5MTVfUkVBRDgoc3QwMSk7CisJSTkxNV9XUklURTgoVkdBX0FSX0lOREVYLCBwYWxldHRlX2VuYWJsZSB8IHJlZyk7CisJcmV0dXJuIEk5MTVfUkVBRDgoVkdBX0FSX0RBVEFfUkVBRCk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfd3JpdGVfYXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTE2IHN0MDEsIHU4IHJlZywgdTggdmFsLCB1MTYgcGFsZXR0ZV9lbmFibGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCUk5MTVfUkVBRDgoc3QwMSk7CisJSTkxNV9XUklURTgoVkdBX0FSX0lOREVYLCBwYWxldHRlX2VuYWJsZSB8IHJlZyk7CisJSTkxNV9XUklURTgoVkdBX0FSX0RBVEFfV1JJVEUsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfd3JpdGVfaW5kZXhlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MTYgaW5kZXhfcG9ydCwgdTE2IGRhdGFfcG9ydCwgdTggcmVnLCB1OCB2YWwpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCUk5MTVfV1JJVEU4KGluZGV4X3BvcnQsIHJlZyk7CisJSTkxNV9XUklURTgoZGF0YV9wb3J0LCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3NhdmVfdmdhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKwl1MTYgY3JfaW5kZXgsIGNyX2RhdGEsIHN0MDE7CisKKwkvKiBWR0EgY29sb3IgcGFsZXR0ZSByZWdpc3RlcnMgKi8KKwlkZXZfcHJpdi0+c2F2ZURBQ01BU0sgPSBJOTE1X1JFQUQ4KFZHQV9EQUNNQVNLKTsKKwkvKiBEQUNDUlggYXV0b21hdGljYWxseSBpbmNyZW1lbnRzIGR1cmluZyByZWFkICovCisJSTkxNV9XUklURTgoVkdBX0RBQ1JYLCAwKTsKKwkvKiBSZWFkIDMgYnl0ZXMgb2YgY29sb3IgZGF0YSBmcm9tIGVhY2ggaW5kZXggKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2ICogMzsgaSsrKQorCQlkZXZfcHJpdi0+c2F2ZURBQ0RBVEFbaV0gPSBJOTE1X1JFQUQ4KFZHQV9EQUNEQVRBKTsKKworCS8qIE1TUiBiaXRzICovCisJZGV2X3ByaXYtPnNhdmVNU1IgPSBJOTE1X1JFQUQ4KFZHQV9NU1JfUkVBRCk7CisJaWYgKGRldl9wcml2LT5zYXZlTVNSICYgVkdBX01TUl9DR0FfTU9ERSkgeworCQljcl9pbmRleCA9IFZHQV9DUl9JTkRFWF9DR0E7CisJCWNyX2RhdGEgPSBWR0FfQ1JfREFUQV9DR0E7CisJCXN0MDEgPSBWR0FfU1QwMV9DR0E7CisJfSBlbHNlIHsKKwkJY3JfaW5kZXggPSBWR0FfQ1JfSU5ERVhfTURBOworCQljcl9kYXRhID0gVkdBX0NSX0RBVEFfTURBOworCQlzdDAxID0gVkdBX1NUMDFfTURBOworCX0KKworCS8qIENSVCBjb250cm9sbGVyIHJlZ3MgKi8KKwlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBjcl9pbmRleCwgY3JfZGF0YSwgMHgxMSwKKwkJCSAgIGk5MTVfcmVhZF9pbmRleGVkKGRldiwgY3JfaW5kZXgsIGNyX2RhdGEsIDB4MTEpICYKKwkJCSAgICh+MHg4MCkpOworCWZvciAoaSA9IDA7IGkgPD0gMHgyNDsgaSsrKQorCQlkZXZfcHJpdi0+c2F2ZUNSW2ldID0KKwkJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgY3JfaW5kZXgsIGNyX2RhdGEsIGkpOworCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCB0dXJuIG9mZiBDUiBncm91cCAwIHdyaXRlcyAqLworCWRldl9wcml2LT5zYXZlQ1JbMHgxMV0gJj0gfjB4ODA7CisKKwkvKiBBdHRyaWJ1dGUgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKwlJOTE1X1JFQUQ4KHN0MDEpOworCWRldl9wcml2LT5zYXZlQVJfSU5ERVggPSBJOTE1X1JFQUQ4KFZHQV9BUl9JTkRFWCk7CisJZm9yIChpID0gMDsgaSA8PSAweDE0OyBpKyspCisJCWRldl9wcml2LT5zYXZlQVJbaV0gPSBpOTE1X3JlYWRfYXIoZGV2LCBzdDAxLCBpLCAwKTsKKwlJOTE1X1JFQUQ4KHN0MDEpOworCUk5MTVfV1JJVEU4KFZHQV9BUl9JTkRFWCwgZGV2X3ByaXYtPnNhdmVBUl9JTkRFWCk7CisJSTkxNV9SRUFEOChzdDAxKTsKKworCS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkJZGV2X3ByaXYtPnNhdmVHUltpXSA9CisJCQlpOTE1X3JlYWRfaW5kZXhlZChkZXYsIFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIGkpOworCisJZGV2X3ByaXYtPnNhdmVHUlsweDEwXSA9CisJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMCk7CisJZGV2X3ByaXYtPnNhdmVHUlsweDExXSA9CisJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMSk7CisJZGV2X3ByaXYtPnNhdmVHUlsweDE4XSA9CisJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxOCk7CisKKwkvKiBTZXF1ZW5jZXIgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJZGV2X3ByaXYtPnNhdmVTUltpXSA9CisJCQlpOTE1X3JlYWRfaW5kZXhlZChkZXYsIFZHQV9TUl9JTkRFWCwgVkdBX1NSX0RBVEEsIGkpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3Jlc3RvcmVfdmdhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKwl1MTYgY3JfaW5kZXgsIGNyX2RhdGEsIHN0MDE7CisKKwkvKiBNU1IgYml0cyAqLworCUk5MTVfV1JJVEU4KFZHQV9NU1JfV1JJVEUsIGRldl9wcml2LT5zYXZlTVNSKTsKKwlpZiAoZGV2X3ByaXYtPnNhdmVNU1IgJiBWR0FfTVNSX0NHQV9NT0RFKSB7CisJCWNyX2luZGV4ID0gVkdBX0NSX0lOREVYX0NHQTsKKwkJY3JfZGF0YSA9IFZHQV9DUl9EQVRBX0NHQTsKKwkJc3QwMSA9IFZHQV9TVDAxX0NHQTsKKwl9IGVsc2UgeworCQljcl9pbmRleCA9IFZHQV9DUl9JTkRFWF9NREE7CisJCWNyX2RhdGEgPSBWR0FfQ1JfREFUQV9NREE7CisJCXN0MDEgPSBWR0FfU1QwMV9NREE7CisJfQorCisJLyogU2VxdWVuY2VyIHJlZ2lzdGVycywgZG9uJ3Qgd3JpdGUgU1IwNyAqLworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisJCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIFZHQV9TUl9JTkRFWCwgVkdBX1NSX0RBVEEsIGksCisJCQkJICAgZGV2X3ByaXYtPnNhdmVTUltpXSk7CisKKwkvKiBDUlQgY29udHJvbGxlciByZWdzICovCisJLyogRW5hYmxlIENSIGdyb3VwIDAgd3JpdGVzICovCisJaTkxNV93cml0ZV9pbmRleGVkKGRldiwgY3JfaW5kZXgsIGNyX2RhdGEsIDB4MTEsIGRldl9wcml2LT5zYXZlQ1JbMHgxMV0pOworCWZvciAoaSA9IDA7IGkgPD0gMHgyNDsgaSsrKQorCQlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBjcl9pbmRleCwgY3JfZGF0YSwgaSwgZGV2X3ByaXYtPnNhdmVDUltpXSk7CisKKwkvKiBHcmFwaGljcyBjb250cm9sbGVyIHJlZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCQlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCBpLAorCQkJCSAgIGRldl9wcml2LT5zYXZlR1JbaV0pOworCisJaTkxNV93cml0ZV9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMCwKKwkJCSAgIGRldl9wcml2LT5zYXZlR1JbMHgxMF0pOworCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIDB4MTEsCisJCQkgICBkZXZfcHJpdi0+c2F2ZUdSWzB4MTFdKTsKKwlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDE4LAorCQkJICAgZGV2X3ByaXYtPnNhdmVHUlsweDE4XSk7CisKKwkvKiBBdHRyaWJ1dGUgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKwlJOTE1X1JFQUQ4KHN0MDEpOyAvKiBzd2l0Y2ggYmFjayB0byBpbmRleCBtb2RlICovCisJZm9yIChpID0gMDsgaSA8PSAweDE0OyBpKyspCisJCWk5MTVfd3JpdGVfYXIoZGV2LCBzdDAxLCBpLCBkZXZfcHJpdi0+c2F2ZUFSW2ldLCAwKTsKKwlJOTE1X1JFQUQ4KHN0MDEpOyAvKiBzd2l0Y2ggYmFjayB0byBpbmRleCBtb2RlICovCisJSTkxNV9XUklURTgoVkdBX0FSX0lOREVYLCBkZXZfcHJpdi0+c2F2ZUFSX0lOREVYIHwgMHgyMCk7CisJSTkxNV9SRUFEOChzdDAxKTsKKworCS8qIFZHQSBjb2xvciBwYWxldHRlIHJlZ2lzdGVycyAqLworCUk5MTVfV1JJVEU4KFZHQV9EQUNNQVNLLCBkZXZfcHJpdi0+c2F2ZURBQ01BU0spOworCS8qIERBQ0NSWCBhdXRvbWF0aWNhbGx5IGluY3JlbWVudHMgZHVyaW5nIHJlYWQgKi8KKwlJOTE1X1dSSVRFOChWR0FfREFDV1gsIDApOworCS8qIFJlYWQgMyBieXRlcyBvZiBjb2xvciBkYXRhIGZyb20gZWFjaCBpbmRleCAqLworCWZvciAoaSA9IDA7IGkgPCAyNTYgKiAzOyBpKyspCisJCUk5MTVfV1JJVEU4KFZHQV9EQUNEQVRBLCBkZXZfcHJpdi0+c2F2ZURBQ0RBVEFbaV0pOworCit9CisKK2ludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBMQkIsICZkZXZfcHJpdi0+c2F2ZUxCQik7CisKKwkvKiBEaXNwbGF5IGFyYml0cmF0aW9uIGNvbnRyb2wgKi8KKwlkZXZfcHJpdi0+c2F2ZURTUEFSQiA9IEk5MTVfUkVBRChEU1BBUkIpOworCisJLyogUGlwZSAmIHBsYW5lIEEgaW5mbyAqLworCWRldl9wcml2LT5zYXZlUElQRUFDT05GID0gSTkxNV9SRUFEKFBJUEVBQ09ORik7CisJZGV2X3ByaXYtPnNhdmVQSVBFQVNSQyA9IEk5MTVfUkVBRChQSVBFQVNSQyk7CisJZGV2X3ByaXYtPnNhdmVGUEEwID0gSTkxNV9SRUFEKEZQQTApOworCWRldl9wcml2LT5zYXZlRlBBMSA9IEk5MTVfUkVBRChGUEExKTsKKwlkZXZfcHJpdi0+c2F2ZURQTExfQSA9IEk5MTVfUkVBRChEUExMX0EpOworCWlmIChJU19JOTY1RyhkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZURQTExfQV9NRCA9IEk5MTVfUkVBRChEUExMX0FfTUQpOworCWRldl9wcml2LT5zYXZlSFRPVEFMX0EgPSBJOTE1X1JFQUQoSFRPVEFMX0EpOworCWRldl9wcml2LT5zYXZlSEJMQU5LX0EgPSBJOTE1X1JFQUQoSEJMQU5LX0EpOworCWRldl9wcml2LT5zYXZlSFNZTkNfQSA9IEk5MTVfUkVBRChIU1lOQ19BKTsKKwlkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BID0gSTkxNV9SRUFEKFZUT1RBTF9BKTsKKwlkZXZfcHJpdi0+c2F2ZVZCTEFOS19BID0gSTkxNV9SRUFEKFZCTEFOS19BKTsKKwlkZXZfcHJpdi0+c2F2ZVZTWU5DX0EgPSBJOTE1X1JFQUQoVlNZTkNfQSk7CisJZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EgPSBJOTE1X1JFQUQoQkNMUlBBVF9BKTsKKworCWRldl9wcml2LT5zYXZlRFNQQUNOVFIgPSBJOTE1X1JFQUQoRFNQQUNOVFIpOworCWRldl9wcml2LT5zYXZlRFNQQVNUUklERSA9IEk5MTVfUkVBRChEU1BBU1RSSURFKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEFTSVpFID0gSTkxNV9SRUFEKERTUEFTSVpFKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEFQT1MgPSBJOTE1X1JFQUQoRFNQQVBPUyk7CisJZGV2X3ByaXYtPnNhdmVEU1BBQUREUiA9IEk5MTVfUkVBRChEU1BBQUREUik7CisJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVEU1BBU1VSRiA9IEk5MTVfUkVBRChEU1BBU1VSRik7CisJCWRldl9wcml2LT5zYXZlRFNQQVRJTEVPRkYgPSBJOTE1X1JFQUQoRFNQQVRJTEVPRkYpOworCX0KKwlpOTE1X3NhdmVfcGFsZXR0ZShkZXYsIFBJUEVfQSk7CisJZGV2X3ByaXYtPnNhdmVQSVBFQVNUQVQgPSBJOTE1X1JFQUQoUElQRUFTVEFUKTsKKworCS8qIFBpcGUgJiBwbGFuZSBCIGluZm8gKi8KKwlkZXZfcHJpdi0+c2F2ZVBJUEVCQ09ORiA9IEk5MTVfUkVBRChQSVBFQkNPTkYpOworCWRldl9wcml2LT5zYXZlUElQRUJTUkMgPSBJOTE1X1JFQUQoUElQRUJTUkMpOworCWRldl9wcml2LT5zYXZlRlBCMCA9IEk5MTVfUkVBRChGUEIwKTsKKwlkZXZfcHJpdi0+c2F2ZUZQQjEgPSBJOTE1X1JFQUQoRlBCMSk7CisJZGV2X3ByaXYtPnNhdmVEUExMX0IgPSBJOTE1X1JFQUQoRFBMTF9CKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVEUExMX0JfTUQgPSBJOTE1X1JFQUQoRFBMTF9CX01EKTsKKwlkZXZfcHJpdi0+c2F2ZUhUT1RBTF9CID0gSTkxNV9SRUFEKEhUT1RBTF9CKTsKKwlkZXZfcHJpdi0+c2F2ZUhCTEFOS19CID0gSTkxNV9SRUFEKEhCTEFOS19CKTsKKwlkZXZfcHJpdi0+c2F2ZUhTWU5DX0IgPSBJOTE1X1JFQUQoSFNZTkNfQik7CisJZGV2X3ByaXYtPnNhdmVWVE9UQUxfQiA9IEk5MTVfUkVBRChWVE9UQUxfQik7CisJZGV2X3ByaXYtPnNhdmVWQkxBTktfQiA9IEk5MTVfUkVBRChWQkxBTktfQik7CisJZGV2X3ByaXYtPnNhdmVWU1lOQ19CID0gSTkxNV9SRUFEKFZTWU5DX0IpOworCWRldl9wcml2LT5zYXZlQkNMUlBBVF9BID0gSTkxNV9SRUFEKEJDTFJQQVRfQSk7CisKKwlkZXZfcHJpdi0+c2F2ZURTUEJDTlRSID0gSTkxNV9SRUFEKERTUEJDTlRSKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEJTVFJJREUgPSBJOTE1X1JFQUQoRFNQQlNUUklERSk7CisJZGV2X3ByaXYtPnNhdmVEU1BCU0laRSA9IEk5MTVfUkVBRChEU1BCU0laRSk7CisJZGV2X3ByaXYtPnNhdmVEU1BCUE9TID0gSTkxNV9SRUFEKERTUEJQT1MpOworCWRldl9wcml2LT5zYXZlRFNQQkFERFIgPSBJOTE1X1JFQUQoRFNQQkFERFIpOworCWlmIChJU19JOTY1R00oZGV2KSB8fCBJU19HTTQ1KGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVEU1BCU1VSRiA9IEk5MTVfUkVBRChEU1BCU1VSRik7CisJCWRldl9wcml2LT5zYXZlRFNQQlRJTEVPRkYgPSBJOTE1X1JFQUQoRFNQQlRJTEVPRkYpOworCX0KKwlpOTE1X3NhdmVfcGFsZXR0ZShkZXYsIFBJUEVfQik7CisJZGV2X3ByaXYtPnNhdmVQSVBFQlNUQVQgPSBJOTE1X1JFQUQoUElQRUJTVEFUKTsKKworCS8qIENSVCBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlQURQQSA9IEk5MTVfUkVBRChBRFBBKTsKKworCS8qIExWRFMgc3RhdGUgKi8KKwlkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wgPSBJOTE1X1JFQUQoUFBfQ09OVFJPTCk7CisJZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MgPSBJOTE1X1JFQUQoUEZJVF9QR01fUkFUSU9TKTsKKwlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwyKTsKKwlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVMVkRTID0gSTkxNV9SRUFEKExWRFMpOworCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikpCisJCWRldl9wcml2LT5zYXZlUEZJVF9DT05UUk9MID0gSTkxNV9SRUFEKFBGSVRfQ09OVFJPTCk7CisJZGV2X3ByaXYtPnNhdmVQUF9PTl9ERUxBWVMgPSBJOTE1X1JFQUQoUFBfT05fREVMQVlTKTsKKwlkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMgPSBJOTE1X1JFQUQoUFBfT0ZGX0RFTEFZUyk7CisJZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SID0gSTkxNV9SRUFEKFBQX0RJVklTT1IpOworCisJLyogRklYTUU6IHNhdmUgVFYgJiBTRFZPIHN0YXRlICovCisKKwkvKiBGQkMgc3RhdGUgKi8KKwlkZXZfcHJpdi0+c2F2ZUZCQ19DRkJfQkFTRSA9IEk5MTVfUkVBRChGQkNfQ0ZCX0JBU0UpOworCWRldl9wcml2LT5zYXZlRkJDX0xMX0JBU0UgPSBJOTE1X1JFQUQoRkJDX0xMX0JBU0UpOworCWRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wyID0gSTkxNV9SRUFEKEZCQ19DT05UUk9MMik7CisJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTCk7CisKKwkvKiBJbnRlcnJ1cHQgc3RhdGUgKi8KKwlkZXZfcHJpdi0+c2F2ZUlJUiA9IEk5MTVfUkVBRChJSVIpOworCWRldl9wcml2LT5zYXZlSUVSID0gSTkxNV9SRUFEKElFUik7CisJZGV2X3ByaXYtPnNhdmVJTVIgPSBJOTE1X1JFQUQoSU1SKTsKKworCS8qIFZHQSBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlVkdBMCA9IEk5MTVfUkVBRChWR0EwKTsKKwlkZXZfcHJpdi0+c2F2ZVZHQTEgPSBJOTE1X1JFQUQoVkdBMSk7CisJZGV2X3ByaXYtPnNhdmVWR0FfUEQgPSBJOTE1X1JFQUQoVkdBX1BEKTsKKwlkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMID0gSTkxNV9SRUFEKFZHQUNOVFJMKTsKKworCS8qIENsb2NrIGdhdGluZyBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlRF9TVEFURSA9IEk5MTVfUkVBRChEX1NUQVRFKTsKKwlkZXZfcHJpdi0+c2F2ZUNHXzJEX0RJUyA9IEk5MTVfUkVBRChDR18yRF9ESVMpOworCisJLyogQ2FjaGUgbW9kZSBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wID0gSTkxNV9SRUFEKENBQ0hFX01PREVfMCk7CisKKwkvKiBNZW1vcnkgQXJiaXRyYXRpb24gc3RhdGUgKi8KKwlkZXZfcHJpdi0+c2F2ZU1JX0FSQl9TVEFURSA9IEk5MTVfUkVBRChNSV9BUkJfU1RBVEUpOworCisJLyogU2NyYXRjaCBzcGFjZSAqLworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWRldl9wcml2LT5zYXZlU1dGMFtpXSA9IEk5MTVfUkVBRChTV0YwMCArIChpIDw8IDIpKTsKKwkJZGV2X3ByaXYtPnNhdmVTV0YxW2ldID0gSTkxNV9SRUFEKFNXRjEwICsgKGkgPDwgMikpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlkZXZfcHJpdi0+c2F2ZVNXRjJbaV0gPSBJOTE1X1JFQUQoU1dGMzAgKyAoaSA8PCAyKSk7CisKKwlpOTE1X3NhdmVfdmdhKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGk5MTVfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBMQkIsIGRldl9wcml2LT5zYXZlTEJCKTsKKworCUk5MTVfV1JJVEUoRFNQQVJCLCBkZXZfcHJpdi0+c2F2ZURTUEFSQik7CisKKwkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCisJLyogUHJpbWUgdGhlIGNsb2NrICovCisJaWYgKGRldl9wcml2LT5zYXZlRFBMTF9BICYgRFBMTF9WQ09fRU5BQkxFKSB7CisJCUk5MTVfV1JJVEUoRFBMTF9BLCBkZXZfcHJpdi0+c2F2ZURQTExfQSAmCisJCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKKwkJRFJNX1VERUxBWSgxNTApOworCX0KKwlJOTE1X1dSSVRFKEZQQTAsIGRldl9wcml2LT5zYXZlRlBBMCk7CisJSTkxNV9XUklURShGUEExLCBkZXZfcHJpdi0+c2F2ZUZQQTEpOworCS8qIEFjdHVhbGx5IGVuYWJsZSBpdCAqLworCUk5MTVfV1JJVEUoRFBMTF9BLCBkZXZfcHJpdi0+c2F2ZURQTExfQSk7CisJRFJNX1VERUxBWSgxNTApOworCWlmIChJU19JOTY1RyhkZXYpKQorCQlJOTE1X1dSSVRFKERQTExfQV9NRCwgZGV2X3ByaXYtPnNhdmVEUExMX0FfTUQpOworCURSTV9VREVMQVkoMTUwKTsKKworCS8qIFJlc3RvcmUgbW9kZSAqLworCUk5MTVfV1JJVEUoSFRPVEFMX0EsIGRldl9wcml2LT5zYXZlSFRPVEFMX0EpOworCUk5MTVfV1JJVEUoSEJMQU5LX0EsIGRldl9wcml2LT5zYXZlSEJMQU5LX0EpOworCUk5MTVfV1JJVEUoSFNZTkNfQSwgZGV2X3ByaXYtPnNhdmVIU1lOQ19BKTsKKwlJOTE1X1dSSVRFKFZUT1RBTF9BLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BKTsKKwlJOTE1X1dSSVRFKFZCTEFOS19BLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19BKTsKKwlJOTE1X1dSSVRFKFZTWU5DX0EsIGRldl9wcml2LT5zYXZlVlNZTkNfQSk7CisJSTkxNV9XUklURShCQ0xSUEFUX0EsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9BKTsKKworCS8qIFJlc3RvcmUgcGxhbmUgaW5mbyAqLworCUk5MTVfV1JJVEUoRFNQQVNJWkUsIGRldl9wcml2LT5zYXZlRFNQQVNJWkUpOworCUk5MTVfV1JJVEUoRFNQQVBPUywgZGV2X3ByaXYtPnNhdmVEU1BBUE9TKTsKKwlJOTE1X1dSSVRFKFBJUEVBU1JDLCBkZXZfcHJpdi0+c2F2ZVBJUEVBU1JDKTsKKwlJOTE1X1dSSVRFKERTUEFBRERSLCBkZXZfcHJpdi0+c2F2ZURTUEFBRERSKTsKKwlJOTE1X1dSSVRFKERTUEFTVFJJREUsIGRldl9wcml2LT5zYXZlRFNQQVNUUklERSk7CisJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJSTkxNV9XUklURShEU1BBU1VSRiwgZGV2X3ByaXYtPnNhdmVEU1BBU1VSRik7CisJCUk5MTVfV1JJVEUoRFNQQVRJTEVPRkYsIGRldl9wcml2LT5zYXZlRFNQQVRJTEVPRkYpOworCX0KKworCUk5MTVfV1JJVEUoUElQRUFDT05GLCBkZXZfcHJpdi0+c2F2ZVBJUEVBQ09ORik7CisKKwlpOTE1X3Jlc3RvcmVfcGFsZXR0ZShkZXYsIFBJUEVfQSk7CisJLyogRW5hYmxlIHRoZSBwbGFuZSAqLworCUk5MTVfV1JJVEUoRFNQQUNOVFIsIGRldl9wcml2LT5zYXZlRFNQQUNOVFIpOworCUk5MTVfV1JJVEUoRFNQQUFERFIsIEk5MTVfUkVBRChEU1BBQUREUikpOworCisJLyogUGlwZSAmIHBsYW5lIEIgaW5mbyAqLworCWlmIChkZXZfcHJpdi0+c2F2ZURQTExfQiAmIERQTExfVkNPX0VOQUJMRSkgeworCQlJOTE1X1dSSVRFKERQTExfQiwgZGV2X3ByaXYtPnNhdmVEUExMX0IgJgorCQkJICAgfkRQTExfVkNPX0VOQUJMRSk7CisJCURSTV9VREVMQVkoMTUwKTsKKwl9CisJSTkxNV9XUklURShGUEIwLCBkZXZfcHJpdi0+c2F2ZUZQQjApOworCUk5MTVfV1JJVEUoRlBCMSwgZGV2X3ByaXYtPnNhdmVGUEIxKTsKKwkvKiBBY3R1YWxseSBlbmFibGUgaXQgKi8KKwlJOTE1X1dSSVRFKERQTExfQiwgZGV2X3ByaXYtPnNhdmVEUExMX0IpOworCURSTV9VREVMQVkoMTUwKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJSTkxNV9XUklURShEUExMX0JfTUQsIGRldl9wcml2LT5zYXZlRFBMTF9CX01EKTsKKwlEUk1fVURFTEFZKDE1MCk7CisKKwkvKiBSZXN0b3JlIG1vZGUgKi8KKwlJOTE1X1dSSVRFKEhUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZUhUT1RBTF9CKTsKKwlJOTE1X1dSSVRFKEhCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZUhCTEFOS19CKTsKKwlJOTE1X1dSSVRFKEhTWU5DX0IsIGRldl9wcml2LT5zYXZlSFNZTkNfQik7CisJSTkxNV9XUklURShWVE9UQUxfQiwgZGV2X3ByaXYtPnNhdmVWVE9UQUxfQik7CisJSTkxNV9XUklURShWQkxBTktfQiwgZGV2X3ByaXYtPnNhdmVWQkxBTktfQik7CisJSTkxNV9XUklURShWU1lOQ19CLCBkZXZfcHJpdi0+c2F2ZVZTWU5DX0IpOworCUk5MTVfV1JJVEUoQkNMUlBBVF9CLCBkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQik7CisKKwkvKiBSZXN0b3JlIHBsYW5lIGluZm8gKi8KKwlJOTE1X1dSSVRFKERTUEJTSVpFLCBkZXZfcHJpdi0+c2F2ZURTUEJTSVpFKTsKKwlJOTE1X1dSSVRFKERTUEJQT1MsIGRldl9wcml2LT5zYXZlRFNQQlBPUyk7CisJSTkxNV9XUklURShQSVBFQlNSQywgZGV2X3ByaXYtPnNhdmVQSVBFQlNSQyk7CisJSTkxNV9XUklURShEU1BCQUREUiwgZGV2X3ByaXYtPnNhdmVEU1BCQUREUik7CisJSTkxNV9XUklURShEU1BCU1RSSURFLCBkZXZfcHJpdi0+c2F2ZURTUEJTVFJJREUpOworCWlmIChJU19JOTY1RyhkZXYpKSB7CisJCUk5MTVfV1JJVEUoRFNQQlNVUkYsIGRldl9wcml2LT5zYXZlRFNQQlNVUkYpOworCQlJOTE1X1dSSVRFKERTUEJUSUxFT0ZGLCBkZXZfcHJpdi0+c2F2ZURTUEJUSUxFT0ZGKTsKKwl9CisKKwlJOTE1X1dSSVRFKFBJUEVCQ09ORiwgZGV2X3ByaXYtPnNhdmVQSVBFQkNPTkYpOworCisJaTkxNV9yZXN0b3JlX3BhbGV0dGUoZGV2LCBQSVBFX0IpOworCS8qIEVuYWJsZSB0aGUgcGxhbmUgKi8KKwlJOTE1X1dSSVRFKERTUEJDTlRSLCBkZXZfcHJpdi0+c2F2ZURTUEJDTlRSKTsKKwlJOTE1X1dSSVRFKERTUEJBRERSLCBJOTE1X1JFQUQoRFNQQkFERFIpKTsKKworCS8qIENSVCBzdGF0ZSAqLworCUk5MTVfV1JJVEUoQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKKworCS8qIExWRFMgc3RhdGUgKi8KKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJSTkxNV9XUklURShCTENfUFdNX0NUTDIsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyKTsKKwlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKKwkJSTkxNV9XUklURShMVkRTLCBkZXZfcHJpdi0+c2F2ZUxWRFMpOworCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikpCisJCUk5MTVfV1JJVEUoUEZJVF9DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZVBGSVRfQ09OVFJPTCk7CisKKwlJOTE1X1dSSVRFKFBGSVRfUEdNX1JBVElPUywgZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MpOworCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwpOworCUk5MTVfV1JJVEUoUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7CisJSTkxNV9XUklURShQUF9PRkZfREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMpOworCUk5MTVfV1JJVEUoUFBfRElWSVNPUiwgZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SKTsKKwlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisKKwkvKiBGSVhNRTogcmVzdG9yZSBUViAmIFNEVk8gc3RhdGUgKi8KKworCS8qIEZCQyBpbmZvICovCisJSTkxNV9XUklURShGQkNfQ0ZCX0JBU0UsIGRldl9wcml2LT5zYXZlRkJDX0NGQl9CQVNFKTsKKwlJOTE1X1dSSVRFKEZCQ19MTF9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFKTsKKwlJOTE1X1dSSVRFKEZCQ19DT05UUk9MMiwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIpOworCUk5MTVfV1JJVEUoRkJDX0NPTlRST0wsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wpOworCisJLyogVkdBIHN0YXRlICovCisJSTkxNV9XUklURShWR0FDTlRSTCwgZGV2X3ByaXYtPnNhdmVWR0FDTlRSTCk7CisJSTkxNV9XUklURShWR0EwLCBkZXZfcHJpdi0+c2F2ZVZHQTApOworCUk5MTVfV1JJVEUoVkdBMSwgZGV2X3ByaXYtPnNhdmVWR0ExKTsKKwlJOTE1X1dSSVRFKFZHQV9QRCwgZGV2X3ByaXYtPnNhdmVWR0FfUEQpOworCURSTV9VREVMQVkoMTUwKTsKKworCS8qIENsb2NrIGdhdGluZyBzdGF0ZSAqLworCUk5MTVfV1JJVEUgKERfU1RBVEUsIGRldl9wcml2LT5zYXZlRF9TVEFURSk7CisJSTkxNV9XUklURSAoQ0dfMkRfRElTLCBkZXZfcHJpdi0+c2F2ZUNHXzJEX0RJUyk7CisKKwkvKiBDYWNoZSBtb2RlIHN0YXRlICovCisJSTkxNV9XUklURSAoQ0FDSEVfTU9ERV8wLCBkZXZfcHJpdi0+c2F2ZUNBQ0hFX01PREVfMCB8IDB4ZmZmZjAwMDApOworCisJLyogTWVtb3J5IGFyYml0cmF0aW9uIHN0YXRlICovCisJSTkxNV9XUklURSAoTUlfQVJCX1NUQVRFLCBkZXZfcHJpdi0+c2F2ZU1JX0FSQl9TVEFURSB8IDB4ZmZmZjAwMDApOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJSTkxNV9XUklURShTV0YwMCArIChpIDw8IDIpLCBkZXZfcHJpdi0+c2F2ZVNXRjBbaV0pOworCQlJOTE1X1dSSVRFKFNXRjEwICsgKGkgPDwgMiksIGRldl9wcml2LT5zYXZlU1dGMVtpKzddKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJSTkxNV9XUklURShTV0YzMCArIChpIDw8IDIpLCBkZXZfcHJpdi0+c2F2ZVNXRjJbaV0pOworCisJaTkxNV9yZXN0b3JlX3ZnYShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKaW5kZXggNTU3MjkzOS4uOTdlZTU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKQEAgLTQ1LDE1ICs0NSwxNiBAQAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkuZHJpdmVyX2ZlYXR1cmVzID0KIAkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfVVNFX01UUlIgfCBEUklWRVJfUENJX0RNQSB8Ci0JICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwKLQkgICAgRFJJVkVSX0lSUV9WQkwsCisJICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVELAogCS5kZXZfcHJpdl9zaXplID0gc2l6ZW9mKGRybV9tZ2FfYnVmX3ByaXZfdCksCiAJLmxvYWQgPSBtZ2FfZHJpdmVyX2xvYWQsCiAJLnVubG9hZCA9IG1nYV9kcml2ZXJfdW5sb2FkLAogCS5sYXN0Y2xvc2UgPSBtZ2FfZHJpdmVyX2xhc3RjbG9zZSwKIAkuZG1hX3F1aWVzY2VudCA9IG1nYV9kcml2ZXJfZG1hX3F1aWVzY2VudCwKIAkuZGV2aWNlX2lzX2FncCA9IG1nYV9kcml2ZXJfZGV2aWNlX2lzX2FncCwKLQkudmJsYW5rX3dhaXQgPSBtZ2FfZHJpdmVyX3ZibGFua193YWl0LAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBtZ2FfZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gbWdhX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbWdhX2Rpc2FibGVfdmJsYW5rLAogCS5pcnFfcHJlaW5zdGFsbCA9IG1nYV9kcml2ZXJfaXJxX3ByZWluc3RhbGwsCiAJLmlycV9wb3N0aW5zdGFsbCA9IG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsLAogCS5pcnFfdW5pbnN0YWxsID0gbWdhX2RyaXZlcl9pcnFfdW5pbnN0YWxsLApAQCAtNjQsMjAgKzY1LDIwIEBACiAJLmlvY3RscyA9IG1nYV9pb2N0bHMsCiAJLmRtYV9pb2N0bCA9IG1nYV9kbWFfYnVmZmVycywKIAkuZm9wcyA9IHsKLQkJIC5vd25lciA9IFRISVNfTU9EVUxFLAotCQkgLm9wZW4gPSBkcm1fb3BlbiwKLQkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCSAuaW9jdGwgPSBkcm1faW9jdGwsCi0JCSAubW1hcCA9IGRybV9tbWFwLAotCQkgLnBvbGwgPSBkcm1fcG9sbCwKLQkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9wZW4gPSBkcm1fb3BlbiwKKwkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKKwkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkubW1hcCA9IGRybV9tbWFwLAorCQkucG9sbCA9IGRybV9wb2xsLAorCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKICNpZmRlZiBDT05GSUdfQ09NUEFUCi0JCSAuY29tcGF0X2lvY3RsID0gbWdhX2NvbXBhdF9pb2N0bCwKKwkJLmNvbXBhdF9pb2N0bCA9IG1nYV9jb21wYXRfaW9jdGwsCiAjZW5kaWYKLQkJIH0sCisJfSwKIAkucGNpX2RyaXZlciA9IHsKLQkJIC5uYW1lID0gRFJJVkVSX05BTUUsCi0JCSAuaWRfdGFibGUgPSBwY2lpZGxpc3QsCisJCS5uYW1lID0gRFJJVkVSX05BTUUsCisJCS5pZF90YWJsZSA9IHBjaWlkbGlzdCwKIAl9LAogCiAJLm5hbWUgPSBEUklWRVJfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgKaW5kZXggZjZlYmQyNC4uODgyNTdjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgKQEAgLTEyMCw2ICsxMjAsNyBAQAogCXUzMiBjbGVhcl9jbWQ7CiAJdTMyIG1hY2Nlc3M7CiAKKwlhdG9taWNfdCB2YmxfcmVjZWl2ZWQ7ICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIHZibGFua3MgcmVjZWl2ZWQuICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgZmVuY2VfcXVldWU7CiAJYXRvbWljX3QgbGFzdF9mZW5jZV9yZXRpcmVkOwogCXUzMiBuZXh0X2ZlbmNlX3RvX3Bvc3Q7CkBAIC0xODEsMTEgKzE4MiwxNCBAQAogZXh0ZXJuIGludCBtZ2Ffd2FycF9pbml0KGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwogCiAJCQkJLyogbWdhX2lycS5jICovCitleHRlcm4gaW50IG1nYV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIG1nYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdTMyIG1nYV9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGludCBtZ2FfZHJpdmVyX2ZlbmNlX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOwogZXh0ZXJuIGludCBtZ2FfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKIGV4dGVybiBpcnFyZXR1cm5fdCBtZ2FfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUyk7CiBleHRlcm4gdm9pZCBtZ2FfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiBpbnQgbWdhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBtZ2FfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIGxvbmcgbWdhX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pcnEuYwppbmRleCA5MzAyY2I4Li5iYWI0MmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pcnEuYwpAQCAtMSw1ICsxLDYgQEAKIC8qIG1nYV9pcnEuYyAtLSBJUlEgaGFuZGxpbmcgZm9yIHJhZGVvbiAtKi0gbGludXgtYyAtKi0KLSAqCisgKi8KKy8qCiAgKiBDb3B5cmlnaHQgKEMpIFRoZSBXZWF0aGVyIENoYW5uZWwsIEluYy4gIDIwMDIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoZSBXZWF0aGVyIENoYW5uZWwgKFRNKSBmdW5kZWQgVHVuZ3N0ZW4gR3JhcGhpY3MgdG8gZGV2ZWxvcCB0aGUKQEAgLTM1LDYgKzM2LDE4IEBACiAjaW5jbHVkZSAibWdhX2RybS5oIgogI2luY2x1ZGUgIm1nYV9kcnYuaCIKIAordTMyIG1nYV9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJY29uc3QgZHJtX21nYV9wcml2YXRlX3QgKmNvbnN0IGRldl9wcml2ID0KKwkJKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoY3J0YyAhPSAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCk7Cit9CisKKwogaXJxcmV0dXJuX3QgbWdhX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKSBhcmc7CkBAIC00Nyw5ICs2MCw4IEBACiAJLyogVkJMQU5LIGludGVycnVwdCAqLwogCWlmIChzdGF0dXMgJiBNR0FfVkxJTkVQRU4pIHsKIAkJTUdBX1dSSVRFKE1HQV9JQ0xFQVIsIE1HQV9WTElORUlDTFIpOwotCQlhdG9taWNfaW5jKCZkZXYtPnZibF9yZWNlaXZlZCk7Ci0JCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKLQkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKKwkJYXRvbWljX2luYygmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCk7CisJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CiAJCWhhbmRsZWQgPSAxOwogCX0KIApAQCAtNTgsNiArNzAsNyBAQAogCQljb25zdCB1MzIgcHJpbV9zdGFydCA9IE1HQV9SRUFEKE1HQV9QUklNQUREUkVTUyk7CiAJCWNvbnN0IHUzMiBwcmltX2VuZCA9IE1HQV9SRUFEKE1HQV9QUklNRU5EKTsKIAorCiAJCU1HQV9XUklURShNR0FfSUNMRUFSLCBNR0FfU09GVFJBUElDTFIpOwogCiAJCS8qIEluIGFkZGl0aW9uIHRvIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQtcGVuZGluZyBiaXQsIHdlCkBAIC03MiwyOCArODUsMzkgQEAKIAkJaGFuZGxlZCA9IDE7CiAJfQogCi0JaWYgKGhhbmRsZWQpIHsKKwlpZiAoaGFuZGxlZCkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KIAlyZXR1cm4gSVJRX05PTkU7CiB9CiAKLWludCBtZ2FfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQoraW50IG1nYV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewotCXVuc2lnbmVkIGludCBjdXJfdmJsYW5rOwotCWludCByZXQgPSAwOworCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCi0JLyogQXNzdW1lIHRoYXQgdGhlIHVzZXIgaGFzIG1pc3NlZCB0aGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIKLQkgKiBieSBhYm91dCBhIGRheSByYXRoZXIgdGhhbiBzaGUgd2FudHMgdG8gd2FpdCBmb3IgeWVhcnMKLQkgKiB1c2luZyB2ZXJ0aWNhbCBibGFua3MuLi4KKwlpZiAoY3J0YyAhPSAwKSB7CisJCURSTV9FUlJPUigidHJpZWQgdG8gZW5hYmxlIHZibGFuayBvbiBub24tZXhpc3RlbnQgY3J0YyAlZFxuIiwKKwkJCSAgY3J0Yyk7CisJCXJldHVybiAwOworCX0KKworCU1HQV9XUklURShNR0FfSUVOLCBNR0FfVkxJTkVJRU4gfCBNR0FfU09GVFJBUEVOKTsKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIG1nYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlpZiAoY3J0YyAhPSAwKSB7CisJCURSTV9FUlJPUigidHJpZWQgdG8gZGlzYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IGNydGMgJWRcbiIsCisJCQkgIGNydGMpOworCX0KKworCS8qIERvICpOT1QqIGRpc2FibGUgdGhlIHZlcnRpY2FsIHJlZnJlc2ggaW50ZXJydXB0LiAgTUdBIGRvZXNuJ3QgaGF2ZQorCSAqIGEgbmljZSBoYXJkd2FyZSBjb3VudGVyIHRoYXQgdHJhY2tzIHRoZSBudW1iZXIgb2YgcmVmcmVzaGVzIHdoZW4KKwkgKiB0aGUgaW50ZXJydXB0IGlzIGRpc2FibGVkLCBhbmQgdGhlIGtlcm5lbCBkb2Vzbid0IGtub3cgdGhlIHJlZnJlc2gKKwkgKiByYXRlIHRvIGNhbGN1bGF0ZSBhbiBlc3RpbWF0ZS4KIAkgKi8KLQlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlLCAzICogRFJNX0haLAotCQkgICAgKCgoY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkpCi0JCSAgICAgIC0gKnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKLQotCSpzZXF1ZW5jZSA9IGN1cl92Ymxhbms7Ci0KLQlyZXR1cm4gcmV0OworCS8qIE1HQV9XUklURShNR0FfSUVOLCBNR0FfVkxJTkVJRU4gfCBNR0FfU09GVFJBUEVOKTsgKi8KIH0KIAogaW50IG1nYV9kcml2ZXJfZmVuY2Vfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKQEAgLTEyNSwxNCArMTQ5LDIyIEBACiAJTUdBX1dSSVRFKE1HQV9JQ0xFQVIsIH4wKTsKIH0KIAotdm9pZCBtZ2FfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCBtZ2FfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJRFJNX0lOSVRfV0FJVFFVRVVFKCZkZXZfcHJpdi0+ZmVuY2VfcXVldWUpOwogCi0JLyogVHVybiBvbiB2ZXJ0aWNhbCBibGFuayBpbnRlcnJ1cHQgYW5kIHNvZnQgdHJhcCBpbnRlcnJ1cHQuICovCi0JTUdBX1dSSVRFKE1HQV9JRU4sIE1HQV9WTElORUlFTiB8IE1HQV9TT0ZUUkFQRU4pOworCS8qIFR1cm4gb24gc29mdCB0cmFwIGludGVycnVwdC4gIFZlcnRpY2FsIGJsYW5rIGludGVycnVwdHMgYXJlIGVuYWJsZWQKKwkgKiBpbiBtZ2FfZW5hYmxlX3ZibGFuay4KKwkgKi8KKwlNR0FfV1JJVEUoTUdBX0lFTiwgTUdBX1NPRlRSQVBFTik7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgbWdhX2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3N0YXRlLmMKaW5kZXggZDNmOGFhZC4uYjcxMGZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9zdGF0ZS5jCkBAIC0xMDIyLDcgKzEwMjIsNyBAQAogCiAJc3dpdGNoIChwYXJhbS0+cGFyYW0pIHsKIAljYXNlIE1HQV9QQVJBTV9JUlFfTlI6Ci0JCXZhbHVlID0gZGV2LT5pcnE7CisJCXZhbHVlID0gZHJtX2Rldl90b19pcnEoZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBNR0FfUEFSQU1fQ0FSRF9UWVBFOgogCQl2YWx1ZSA9IGRldl9wcml2LT5jaGlwc2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmMKaW5kZXggNjEwOGU3NS4uMzI2NWQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jCkBAIC00MywxMiArNDMsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlcl9mZWF0dXJlcyA9CiAJICAgIERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX1VTRV9NVFJSIHwgRFJJVkVSX1BDSV9ETUEgfCBEUklWRVJfU0cgfAotCSAgICBEUklWRVJfSEFWRV9ETUEgfCBEUklWRVJfSEFWRV9JUlEgfCBEUklWRVJfSVJRX1NIQVJFRCB8Ci0JICAgIERSSVZFUl9JUlFfVkJMLAorCSAgICBEUklWRVJfSEFWRV9ETUEgfCBEUklWRVJfSEFWRV9JUlEgfCBEUklWRVJfSVJRX1NIQVJFRCwKIAkuZGV2X3ByaXZfc2l6ZSA9IHNpemVvZihkcm1fcjEyOF9idWZfcHJpdl90KSwKIAkucHJlY2xvc2UgPSByMTI4X2RyaXZlcl9wcmVjbG9zZSwKIAkubGFzdGNsb3NlID0gcjEyOF9kcml2ZXJfbGFzdGNsb3NlLAotCS52Ymxhbmtfd2FpdCA9IHIxMjhfZHJpdmVyX3ZibGFua193YWl0LAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSByMTI4X2dldF92YmxhbmtfY291bnRlciwKKwkuZW5hYmxlX3ZibGFuayA9IHIxMjhfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSByMTI4X2Rpc2FibGVfdmJsYW5rLAogCS5pcnFfcHJlaW5zdGFsbCA9IHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsLAogCS5pcnFfcG9zdGluc3RhbGwgPSByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwsCiAJLmlycV91bmluc3RhbGwgPSByMTI4X2RyaXZlcl9pcnFfdW5pbnN0YWxsLApAQCAtNTksMjEgKzYwLDIwIEBACiAJLmlvY3RscyA9IHIxMjhfaW9jdGxzLAogCS5kbWFfaW9jdGwgPSByMTI4X2NjZV9idWZmZXJzLAogCS5mb3BzID0gewotCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCSAub3BlbiA9IGRybV9vcGVuLAotCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKLQkJIC5tbWFwID0gZHJtX21tYXAsCi0JCSAucG9sbCA9IGRybV9wb2xsLAotCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub3BlbiA9IGRybV9vcGVuLAorCQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCQkuaW9jdGwgPSBkcm1faW9jdGwsCisJCS5tbWFwID0gZHJtX21tYXAsCisJCS5wb2xsID0gZHJtX3BvbGwsCisJCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogI2lmZGVmIENPTkZJR19DT01QQVQKLQkJIC5jb21wYXRfaW9jdGwgPSByMTI4X2NvbXBhdF9pb2N0bCwKKwkJLmNvbXBhdF9pb2N0bCA9IHIxMjhfY29tcGF0X2lvY3RsLAogI2VuZGlmCiAJfSwKLQogCS5wY2lfZHJpdmVyID0gewotCQkgLm5hbWUgPSBEUklWRVJfTkFNRSwKLQkJIC5pZF90YWJsZSA9IHBjaWlkbGlzdCwKKwkJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJLmlkX3RhYmxlID0gcGNpaWRsaXN0LAogCX0sCiAKIAkubmFtZSA9IERSSVZFUl9OQU1FLApAQCAtODcsNiArODcsNyBAQAogc3RhdGljIGludCBfX2luaXQgcjEyOF9pbml0KHZvaWQpCiB7CiAJZHJpdmVyLm51bV9pb2N0bHMgPSByMTI4X21heF9pb2N0bDsKKwogCXJldHVybiBkcm1faW5pdCgmZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmgKaW5kZXggMDExMTA1ZS4uNTg5OGIyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5oCkBAIC0yOSw3ICsyOSw3IEBACiAgKiAgICBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4KICAqICAgIEtldmluIEUuIE1hcnRpbiA8bWFydGluQHZhbGludXguY29tPgogICogICAgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPgotICogICAgTWljaGVsIETDpG56ZXIgPGRhZW56ZXJtQHN0dWRlbnQuZXRoei5jaD4KKyAqICAgIE1pY2hlbCBE77+9emVyIDxkYWVuemVybUBzdHVkZW50LmV0aHouY2g+CiAgKi8KIAogI2lmbmRlZiBfX1IxMjhfRFJWX0hfXwpAQCAtOTcsNiArOTcsOCBAQAogCXUzMiBjcnRjX29mZnNldDsKIAl1MzIgY3J0Y19vZmZzZXRfY250bDsKIAorCWF0b21pY190IHZibF9yZWNlaXZlZDsKKwogCXUzMiBjb2xvcl9mbXQ7CiAJdW5zaWduZWQgaW50IGZyb250X29mZnNldDsKIAl1bnNpZ25lZCBpbnQgZnJvbnRfcGl0Y2g7CkBAIC0xNDksMTEgKzE1MSwxMiBAQAogZXh0ZXJuIGludCByMTI4X2RvX2NjZV9pZGxlKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KTsKIGV4dGVybiBpbnQgcjEyOF9kb19jbGVhbnVwX2NjZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiAKLWV4dGVybiBpbnQgcjEyOF9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOwotCitleHRlcm4gaW50IHIxMjhfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCByMTI4X2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB1MzIgcjEyOF9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGlycXJldHVybl90IHIxMjhfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUyk7CiBleHRlcm4gdm9pZCByMTI4X2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gdm9pZCByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworZXh0ZXJuIGludCByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCByMTI4X2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIGV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gdm9pZCByMTI4X2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2lycS5jCmluZGV4IGM3NmZkY2EuLmQ3MzQ5MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pcnEuYwpAQCAtMzUsNiArMzUsMTYgQEAKICNpbmNsdWRlICJyMTI4X2RybS5oIgogI2luY2x1ZGUgInIxMjhfZHJ2LmgiCiAKK3UzMiByMTI4X2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwljb25zdCBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChjcnRjICE9IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+dmJsX3JlY2VpdmVkKTsKK30KKwogaXJxcmV0dXJuX3QgcjEyOF9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0IGRybV9kZXZpY2UgKikgYXJnOwpAQCAtNDYsMzAgKzU2LDM4IEBACiAJLyogVkJMQU5LIGludGVycnVwdCAqLwogCWlmIChzdGF0dXMgJiBSMTI4X0NSVENfVkJMQU5LX0lOVCkgewogCQlSMTI4X1dSSVRFKFIxMjhfR0VOX0lOVF9TVEFUVVMsIFIxMjhfQ1JUQ19WQkxBTktfSU5UX0FLKTsKLQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCQlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZSk7Ci0JCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldik7CisJCWF0b21pY19pbmMoJmRldl9wcml2LT52YmxfcmVjZWl2ZWQpOworCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDApOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCXJldHVybiBJUlFfTk9ORTsKIH0KIAotaW50IHIxMjhfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQoraW50IHIxMjhfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKIHsKLQl1bnNpZ25lZCBpbnQgY3VyX3ZibGFuazsKLQlpbnQgcmV0ID0gMDsKKwlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCS8qIEFzc3VtZSB0aGF0IHRoZSB1c2VyIGhhcyBtaXNzZWQgdGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyCi0JICogYnkgYWJvdXQgYSBkYXkgcmF0aGVyIHRoYW4gc2hlIHdhbnRzIHRvIHdhaXQgZm9yIHllYXJzCi0JICogdXNpbmcgdmVydGljYWwgYmxhbmtzLi4uCisJaWYgKGNydGMgIT0gMCkgeworCQlEUk1fRVJST1IoIiVzOiAgYmFkIGNydGMgJWRcbiIsIF9fZnVuY19fLCBjcnRjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJUjEyOF9XUklURShSMTI4X0dFTl9JTlRfQ05UTCwgUjEyOF9DUlRDX1ZCTEFOS19JTlRfRU4pOworCXJldHVybiAwOworfQorCit2b2lkIHIxMjhfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJaWYgKGNydGMgIT0gMCkKKwkJRFJNX0VSUk9SKCIlczogIGJhZCBjcnRjICVkXG4iLCBfX2Z1bmNfXywgY3J0Yyk7CisKKwkvKgorCSAqIEZJWE1FOiBpbXBsZW1lbnQgcHJvcGVyIGludGVycnVwdCBkaXNhYmxlIGJ5IHVzaW5nIHRoZSB2YmxhbmsKKwkgKiBjb3VudGVyIHJlZ2lzdGVyIChpZiBhdmFpbGFibGUpCisJICoKKwkgKiBSMTI4X1dSSVRFKFIxMjhfR0VOX0lOVF9DTlRMLAorCSAqICAgICAgICAgICAgUjEyOF9SRUFEKFIxMjhfR0VOX0lOVF9DTlRMKSAmIH5SMTI4X0NSVENfVkJMQU5LX0lOVF9FTik7CiAJICovCi0JRFJNX1dBSVRfT04ocmV0LCBkZXYtPnZibF9xdWV1ZSwgMyAqIERSTV9IWiwKLQkJICAgICgoKGN1cl92YmxhbmsgPSBhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpKQotCQkgICAgICAtICpzZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7Ci0KLQkqc2VxdWVuY2UgPSBjdXJfdmJsYW5rOwotCi0JcmV0dXJuIHJldDsKIH0KIAogdm9pZCByMTI4X2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKQEAgLTgyLDEyICsxMDAsOSBAQAogCVIxMjhfV1JJVEUoUjEyOF9HRU5fSU5UX1NUQVRVUywgUjEyOF9DUlRDX1ZCTEFOS19JTlRfQUspOwogfQogCi12b2lkIHIxMjhfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9yMTI4X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCi0JLyogVHVybiBvbiBWQkwgaW50ZXJydXB0ICovCi0JUjEyOF9XUklURShSMTI4X0dFTl9JTlRfQ05UTCwgUjEyOF9DUlRDX1ZCTEFOS19JTlRfRU4pOworCXJldHVybiBkcm1fdmJsYW5rX2luaXQoZGV2LCAxKTsKIH0KIAogdm9pZCByMTI4X2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0ZS5jCmluZGV4IDUxYTlhZmMuLmY3YTViNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X3N0YXRlLmMKQEAgLTE2MjksNyArMTYyOSw3IEBACiAKIAlzd2l0Y2ggKHBhcmFtLT5wYXJhbSkgewogCWNhc2UgUjEyOF9QQVJBTV9JUlFfTlI6Ci0JCXZhbHVlID0gZGV2LT5pcnE7CisJCXZhbHVlID0gZHJtX2Rldl90b19pcnEoZGV2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYwppbmRleCAyNDhhYjRhLi41OWEyMTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKQEAgLTcxLDcgKzcxLDggQEAKIAogc3RhdGljIHUzMiBJR1BfUkVBRF9NQ0lORChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBhZGRyKQogewotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKQorCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlyZXR1cm4gUlM2OTBfUkVBRF9NQ0lORChkZXZfcHJpdiwgYWRkcik7CiAJZWxzZQogCQlyZXR1cm4gUlM0ODBfUkVBRF9NQ0lORChkZXZfcHJpdiwgYWRkcik7CkBAIC04Miw3ICs4Myw4IEBACiAKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJcmV0dXJuIFI1MDBfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlY1MTVfTUNfRkJfTE9DQVRJT04pOwotCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApCisJZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJCSAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpCiAJCXJldHVybiBSUzY5MF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzY5MF9NQ19GQl9MT0NBVElPTik7CiAJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KQogCQlyZXR1cm4gUjUwMF9SRUFEX01DSU5EKGRldl9wcml2LCBSNTIwX01DX0ZCX0xPQ0FUSU9OKTsKQEAgLTk0LDcgKzk2LDggQEAKIHsKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJUjUwMF9XUklURV9NQ0lORChSVjUxNV9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKLQllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKQorCWVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCQkgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKIAllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpCiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKQEAgLTEwNiw3ICsxMDksOCBAQAogewogCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTE1KQogCQlSNTAwX1dSSVRFX01DSU5EKFJWNTE1X01DX0FHUF9MT0NBVElPTiwgYWdwX2xvYyk7Ci0JZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkKKwllbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkJICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0xPQ0FUSU9OLCBhZ3BfbG9jKTsKIAllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpCiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19BR1BfTE9DQVRJT04sIGFncF9sb2MpOwpAQCAtMTIyLDE1ICsxMjYsMTcgQEAKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkgewogCQlSNTAwX1dSSVRFX01DSU5EKFJWNTE1X01DX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUlY1MTVfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwotCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgeworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJCSAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpIHsKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0JBU0UsIGFncF9iYXNlX2xvKTsKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwogCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KSB7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19BR1BfQkFTRSwgYWdwX2Jhc2VfbG8pOwogCQlSNTAwX1dSSVRFX01DSU5EKFI1MjBfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwotCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQ4MCkgeworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0MDApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDgwKSkgewogCQlSQURFT05fV1JJVEUoUkFERU9OX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7Ci0JCVJBREVPTl9XUklURShSUzQ4MF9BR1BfQkFTRV8yLCAwKTsKKwkJUkFERU9OX1dSSVRFKFJTNDgwX0FHUF9CQVNFXzIsIGFncF9iYXNlX2hpKTsKIAl9IGVsc2UgewogCQlSQURFT05fV1JJVEUoUkFERU9OX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1IyMDApCkBAIC0zNDcsNiArMzUzLDcgQEAKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjM1MCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlYzNTApIHx8CiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWMzgwKSB8fAorCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQwMCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0ODApKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFIzMDAgTWljcm9jb2RlXG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CkBAIC0zNTYsNiArMzYzLDcgQEAKIAkJCQkgICAgIFIzMDBfY3BfbWljcm9jb2RlW2ldWzBdKTsKIAkJfQogCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjQyMCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjQyMykgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY0MTApKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFI0MDAgTWljcm9jb2RlXG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CkBAIC0zNjQsOCArMzcyLDkgQEAKIAkJCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0RBVEFMLAogCQkJCSAgICAgUjQyMF9jcF9taWNyb2NvZGVbaV1bMF0pOwogCQl9Ci0JfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJTNjkwIE1pY3JvY29kZVxuIik7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKSB7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJTNjkwL1JTNzQwIE1pY3JvY29kZVxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewogCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCiAJCQkJICAgICBSUzY5MF9jcF9taWNyb2NvZGVbaV1bMV0pOwpAQCAtNjI2LDggKzYzNSw2IEBACiAJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKICNlbmRpZgogCi0JLyogU3RhcnQgd2l0aCBhc3N1bWluZyB0aGF0IHdyaXRlYmFjayBkb2Vzbid0IHdvcmsgKi8KLQlkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzID0gMDsKIAogCS8qIEluaXRpYWxpemUgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgcG9pbnRlci4gIFRoaXMgd2lsbCBjYXVzZQogCSAqIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIHZhbHVlcyB0byBiZSB3cml0dGVuIG91dCB0byBtZW1vcnkKQEAgLTY0Niw4ICs2NTMsMTggQEAKIAlSQURFT05fV1JJVEUoUkFERU9OX1NDUkFUQ0hfVU1TSywgMHg3KTsKIAogCS8qIFR1cm4gb24gYnVzIG1hc3RlcmluZyAqLwotCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UkFERU9OX0JVU19NQVNURVJfRElTOwotCVJBREVPTl9XUklURShSQURFT05fQlVTX0NOVEwsIHRtcCk7CisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDAwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKSB7CisJCS8qIHJzNDAwLCByczY5MC9yczc0MCAqLworCQl0bXAgPSBSQURFT05fUkVBRChSQURFT05fQlVTX0NOVEwpICYgflJTNDAwX0JVU19NQVNURVJfRElTOworCQlSQURFT05fV1JJVEUoUkFERU9OX0JVU19DTlRMLCB0bXApOworCX0gZWxzZSBpZiAoISgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjM4MCkgfHwKKwkJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I0MjMpKSkgeworCQkvKiByMXh4LCByMnh4LCByMzAwLCByKHYpMzUwLCByNDIwL3I0ODEsIHJzNDgwICovCisJCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UkFERU9OX0JVU19NQVNURVJfRElTOworCQlSQURFT05fV1JJVEUoUkFERU9OX0JVU19DTlRMLCB0bXApOworCX0gLyogUENJRSBjYXJkcyBhcHBlYXJzIHRvIG5vdCBuZWVkIHRoaXMgKi8KIAogCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1lID0gZGV2X3ByaXYtPnNjcmF0Y2hbMF0gPSAwOwogCVJBREVPTl9XUklURShSQURFT05fTEFTVF9GUkFNRV9SRUcsIGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1lKTsKQEAgLTY3NCw2ICs2OTEsOSBAQAogewogCXUzMiB0bXA7CiAKKwkvKiBTdGFydCB3aXRoIGFzc3VtaW5nIHRoYXQgd3JpdGViYWNrIGRvZXNuJ3Qgd29yayAqLworCWRldl9wcml2LT53cml0ZWJhY2tfd29ya3MgPSAwOworCiAJLyogV3JpdGViYWNrIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGV2ZXJ5d2hlcmUsIHRlc3QgaXQgaGVyZSBhbmQgcG9zc2libHkKIAkgKiBlbmFibGUgaXQgaWYgaXQgYXBwZWFycyB0byB3b3JrCiAJICovCkBAIC03MTksNyArNzM5LDggQEAKIAkJCSAgZGV2X3ByaXYtPmdhcnRfc2l6ZSk7CiAKIAkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzQ4MF9NQ19NSVNDX0NOVEwpOwotCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkKKwkJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCQkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQkJSUdQX1dSSVRFX01DSU5EKFJTNDgwX01DX01JU0NfQ05UTCwgKFJTNDgwX0dBUlRfSU5ERVhfUkVHX0VOIHwKIAkJCQkJCQkgICAgIFJTNjkwX0JMT0NLX0dGWF9EM19FTikpOwogCQllbHNlCkBAIC04MTIsNiArODMzLDcgQEAKIAl1MzIgdG1wOwogCiAJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkgfHwKIAkgICAgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19JR1BHQVJUKSkgewogCQlyYWRlb25fc2V0X2lncGdhcnQoZGV2X3ByaXYsIG9uKTsKIAkJcmV0dXJuOwpAQCAtMTI4Niw3ICsxMzA4LDcgQEAKIAlyYWRlb25fY3BfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIGRldl9wcml2KTsKIAogCXJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKLQlyYWRlb25fZW5hYmxlX2ludGVycnVwdChkZXYpOworCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX1NXX0lOVF9FTkFCTEUsIDEpOwogCiAJRFJNX0RFQlVHKCJyYWRlb25fZG9fcmVzdW1lX2NwKCkgY29tcGxldGVcbiIpOwogCkBAIC0xNzA4LDYgKzE3MzAsNyBAQAogCWNhc2UgQ0hJUF9SMzAwOgogCWNhc2UgQ0hJUF9SMzUwOgogCWNhc2UgQ0hJUF9SNDIwOgorCWNhc2UgQ0hJUF9SNDIzOgogCWNhc2UgQ0hJUF9SVjQxMDoKIAljYXNlIENISVBfUlY1MTU6CiAJY2FzZSBDSElQX1I1MjA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCmluZGV4IDYzN2JkN2YuLjcxYWY3NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCkBAIC01Miw2ICs1MiwyOCBAQAogCQkgICAgICAgICJyMzAwIikpOwogfQogCitzdGF0aWMgaW50IHJhZGVvbl9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJLyogRGlzYWJsZSAqYWxsKiBpbnRlcnJ1cHRzICovCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApCisJCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgMCk7CisJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJLyogUmVzdG9yZSBpbnRlcnJ1cHQgcmVnaXN0ZXJzICovCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApCisJCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgZGV2X3ByaXYtPnI1MDBfZGlzcF9pcnFfcmVnKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgZGV2X3ByaXYtPmlycV9lbmFibGVfcmVnKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewogCXJhZGVvbl9QQ0lfSURTCiB9OwpAQCAtNTksOCArODEsNyBAQAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkuZHJpdmVyX2ZlYXR1cmVzID0KIAkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfVVNFX01UUlIgfCBEUklWRVJfUENJX0RNQSB8IERSSVZFUl9TRyB8Ci0JICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9JUlFfU0hBUkVEIHwKLQkgICAgRFJJVkVSX0lSUV9WQkwgfCBEUklWRVJfSVJRX1ZCTDIsCisJICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9JUlFfU0hBUkVELAogCS5kZXZfcHJpdl9zaXplID0gc2l6ZW9mKGRybV9yYWRlb25fYnVmX3ByaXZfdCksCiAJLmxvYWQgPSByYWRlb25fZHJpdmVyX2xvYWQsCiAJLmZpcnN0b3BlbiA9IHJhZGVvbl9kcml2ZXJfZmlyc3RvcGVuLApAQCAtNjksOCArOTAsMTEgQEAKIAkucG9zdGNsb3NlID0gcmFkZW9uX2RyaXZlcl9wb3N0Y2xvc2UsCiAJLmxhc3RjbG9zZSA9IHJhZGVvbl9kcml2ZXJfbGFzdGNsb3NlLAogCS51bmxvYWQgPSByYWRlb25fZHJpdmVyX3VubG9hZCwKLQkudmJsYW5rX3dhaXQgPSByYWRlb25fZHJpdmVyX3ZibGFua193YWl0LAotCS52Ymxhbmtfd2FpdDIgPSByYWRlb25fZHJpdmVyX3ZibGFua193YWl0MiwKKwkuc3VzcGVuZCA9IHJhZGVvbl9zdXNwZW5kLAorCS5yZXN1bWUgPSByYWRlb25fcmVzdW1lLAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSByYWRlb25fZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gcmFkZW9uX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gcmFkZW9uX2Rpc2FibGVfdmJsYW5rLAogCS5kcmlfbGlicmFyeV9uYW1lID0gZHJpX2xpYnJhcnlfbmFtZSwKIAkuaXJxX3ByZWluc3RhbGwgPSByYWRlb25fZHJpdmVyX2lycV9wcmVpbnN0YWxsLAogCS5pcnFfcG9zdGluc3RhbGwgPSByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKaW5kZXggMDk5MzgxNi4uNGRiYjgxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKQEAgLTEyMiw5ICsxMjIsMTIgQEAKIAlDSElQX1JWMzUwLAogCUNISVBfUlYzODAsCiAJQ0hJUF9SNDIwLAorCUNISVBfUjQyMywKIAlDSElQX1JWNDEwLAorCUNISVBfUlM0MDAsCiAJQ0hJUF9SUzQ4MCwKIAlDSElQX1JTNjkwLAorCUNISVBfUlM3NDAsCiAJQ0hJUF9SVjUxNSwKIAlDSElQX1I1MjAsCiAJQ0hJUF9SVjUzMCwKQEAgLTM3OCwxNyArMzgxLDE3IEBACiAJCQkgICAgICAgc3RydWN0IG1lbV9ibG9jayAqaGVhcCk7CiAKIAkJCQkvKiByYWRlb25faXJxLmMgKi8KK2V4dGVybiB2b2lkIHJhZGVvbl9pcnFfc2V0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBtYXNrLCBpbnQgc3RhdGUpOwogZXh0ZXJuIGludCByYWRlb25faXJxX2VtaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCByYWRlb25faXJxX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogCiBleHRlcm4gdm9pZCByYWRlb25fZG9fcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKLWV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl92Ymxhbmtfd2FpdDIoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJICAgICAgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7CitleHRlcm4gdTMyIHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIGludCByYWRlb25fZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCByYWRlb25fZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGlycXJldHVybl90IHJhZGVvbl9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKIGV4dGVybiB2b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gdm9pZCByYWRlb25fZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgcmFkZW9uX3ZibGFua19jcnRjX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTM5NywxOSArNDAwLDIyIEBACiBleHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIGV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfZmlyc3RvcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBkcm1fZmlsZSAqIGZpbHApOworZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiB2b2lkIHJhZGVvbl9kcml2ZXJfcG9zdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiB2b2lkIHJhZGVvbl9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKiBmaWxwX3ByaXYpOworZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBsb25nIHJhZGVvbl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJdW5zaWduZWQgbG9uZyBhcmcpOwogCiAvKiByMzAwX2NtZGJ1Zi5jICovCiBleHRlcm4gdm9pZCByMzAwX2luaXRfcmVnX2ZsYWdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCi1leHRlcm4gaW50IHIzMDBfZG9fY3BfY21kYnVmKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAorZXh0ZXJuIGludCByMzAwX2RvX2NwX2NtZGJ1ZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKLQkJCSAgICAgZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90ICogY21kYnVmKTsKKwkJCSAgICAgZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90ICpjbWRidWYpOwogCiAvKiBGbGFncyBmb3Igc3RhdHMuYm94ZXMKICAqLwpAQCAtNDM0LDggKzQ0MCwzMSBAQAogIwlkZWZpbmUgUkFERU9OX1NDSVNTT1JfMV9FTkFCTEUJCSgxIDw8IDI5KQogIwlkZWZpbmUgUkFERU9OX1NDSVNTT1JfMl9FTkFCTEUJCSgxIDw8IDMwKQogCisvKgorICogUENJRSByYWRlb25zIChydjM3MC9ydjM4MCwgcnY0MTAsIHI0MjMvcjQzMC9yNDgwLCByNXh4KQorICogZG9uJ3QgaGF2ZSBhbiBleHBsaWNpdCBidXMgbWFzdGVyaW5nIGRpc2FibGUgYml0LiAgSXQncyBoYW5kbGVkCisgKiBieSB0aGUgUENJIEQtc3RhdGVzLiAgUE1JX0JNX0RJUyBkaXNhYmxlcyBELXN0YXRlIGJ1cyBtYXN0ZXIKKyAqIGhhbmRsaW5nLCBub3QgYnVzIG1hc3RlcmluZyBpdHNlbGYuCisgKi8KICNkZWZpbmUgUkFERU9OX0JVU19DTlRMCQkJMHgwMDMwCisvKiByMXh4LCByMnh4LCByMzAwLCByKHYpMzUwLCByNDIwL3I0ODEsIHJzNDgwICovCiAjCWRlZmluZSBSQURFT05fQlVTX01BU1RFUl9ESVMJCSgxIDw8IDYpCisvKiByczQwMCwgcnM2OTAvcnM3NDAgKi8KKyMJZGVmaW5lIFJTNDAwX0JVU19NQVNURVJfRElTCQkoMSA8PCAxNCkKKyMJZGVmaW5lIFJTNDAwX01TSV9SRUFSTQkJICAgICAgICAoMSA8PCAyMCkKKy8qIHNlZSBSUzQ4MF9NU0lfUkVBUk0gaW4gQUlDX0NOVEwgZm9yIHJzNDgwICovCisKKyNkZWZpbmUgUkFERU9OX0JVU19DTlRMMQkJMHgwMDM0CisjCWRlZmluZSBSQURFT05fUE1JX0JNX0RJUwkJKDEgPDwgMikKKyMJZGVmaW5lIFJBREVPTl9QTUlfSU5UX0RJUwkJKDEgPDwgMykKKworI2RlZmluZSBSVjM3MF9CVVNfQ05UTAkJCTB4MDA0YworIwlkZWZpbmUgUlYzNzBfUE1JX0JNX0RJUwkJICAgICAgICAoMSA8PCA1KQorIwlkZWZpbmUgUlYzNzBfUE1JX0lOVF9ESVMJCSgxIDw8IDYpCisKKyNkZWZpbmUgUkFERU9OX01TSV9SRUFSTV9FTgkJMHgwMTYwCisvKiBydjM3MC9ydjM4MCwgcnY0MTAsIHI0MjMvcjQzMC9yNDgwLCByNXh4ICovCisjCWRlZmluZSBSVjM3MF9NU0lfUkVBUk1fRU4JCSgxIDw8IDApCiAKICNkZWZpbmUgUkFERU9OX0NMT0NLX0NOVExfREFUQQkJMHgwMDBjCiAjCWRlZmluZSBSQURFT05fUExMX1dSX0VOCQkJKDEgPDwgNykKQEAgLTYyMyw2ICs2NTIsNyBAQAogIwlkZWZpbmUgUkFERU9OX1NXX0lOVF9URVNUCQkoMSA8PCAyNSkKICMJZGVmaW5lIFJBREVPTl9TV19JTlRfVEVTVF9BQ0sJCSgxIDw8IDI1KQogIwlkZWZpbmUgUkFERU9OX1NXX0lOVF9GSVJFCQkoMSA8PCAyNikKKyMgICAgICAgZGVmaW5lIFI1MDBfRElTUExBWV9JTlRfU1RBVFVTICAgICAgICAgICgxIDw8IDApCiAKICNkZWZpbmUgUkFERU9OX0hPU1RfUEFUSF9DTlRMCQkweDAxMzAKICMJZGVmaW5lIFJBREVPTl9IRFBfU09GVF9SRVNFVAkJKDEgPDwgMjYpCkBAIC05MDcsNiArOTM3LDcgQEAKIAogI2RlZmluZSBSQURFT05fQUlDX0NOVEwJCQkweDAxZDAKICMJZGVmaW5lIFJBREVPTl9QQ0lHQVJUX1RSQU5TTEFURV9FTgkoMSA8PCAwKQorIwlkZWZpbmUgUlM0ODBfTVNJX1JFQVJNCSAgICAgICAgICAgICAgICAoMSA8PCAzKQogI2RlZmluZSBSQURFT05fQUlDX1NUQVQJCQkweDAxZDQKICNkZWZpbmUgUkFERU9OX0FJQ19QVF9CQVNFCQkweDAxZDgKICNkZWZpbmUgUkFERU9OX0FJQ19MT19BRERSCQkweDAxZGMKQEAgLTExMTYsNiArMTE0Nyw5IEBACiAKICNkZWZpbmUgUjIwMF9WQVBfUFZTX0NOVExfMSAgICAgICAgICAgICAgIDB4MjJEMAogCisjZGVmaW5lIFJBREVPTl9DUlRDX0NSTlRfRlJBTUUgMHgwMjE0CisjZGVmaW5lIFJBREVPTl9DUlRDMl9DUk5UX0ZSQU1FIDB4MDMxNAorCiAjZGVmaW5lIFI1MDBfRDFDUlRDX1NUQVRVUyAweDYwOWMKICNkZWZpbmUgUjUwMF9EMkNSVENfU1RBVFVTIDB4Njg5YwogI2RlZmluZSBSNTAwX0NSVENfVl9CTEFOSyAoMTw8MCkKQEAgLTEyMDAsNyArMTIzNCw4IEBACiAKICNkZWZpbmUgSUdQX1dSSVRFX01DSU5EKGFkZHIsIHZhbCkJCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgICAgICAgXAorCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwgICBcCisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkgICAgICBcCiAJCVJTNjkwX1dSSVRFX01DSU5EKGFkZHIsIHZhbCk7CQkJCVwKIAllbHNlCQkJCQkJCQlcCiAJCVJTNDgwX1dSSVRFX01DSU5EKGFkZHIsIHZhbCk7CQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKaW5kZXggZWU0MGQxOS4uNTA3OWY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKQEAgLTI3LDcgKzI3LDcgQEAKICAqCiAgKiBBdXRob3JzOgogICogICAgS2VpdGggV2hpdHdlbGwgPGtlaXRoQHR1bmdzdGVuZ3JhcGhpY3MuY29tPgotICogICAgTWljaGVsIETDpG56ZXIgPG1pY2hlbEBkYWVuemVyLm5ldD4KKyAqICAgIE1pY2hlbCBE77+9emVyIDxtaWNoZWxAZGFlbnplci5uZXQ+CiAgKi8KIAogI2luY2x1ZGUgImRybVAuaCIKQEAgLTM1LDEyICszNSwxMjggQEAKICNpbmNsdWRlICJyYWRlb25fZHJtLmgiCiAjaW5jbHVkZSAicmFkZW9uX2Rydi5oIgogCi1zdGF0aWMgX19pbmxpbmVfXyB1MzIgcmFkZW9uX2Fja25vd2xlZGdlX2lycXMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwKLQkJCQkJICAgICAgdTMyIG1hc2spCit2b2lkIHJhZGVvbl9pcnFfc2V0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBtYXNrLCBpbnQgc3RhdGUpCiB7Ci0JdTMyIGlycXMgPSBSQURFT05fUkVBRChSQURFT05fR0VOX0lOVF9TVEFUVVMpICYgbWFzazsKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKHN0YXRlKQorCQlkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcgfD0gbWFzazsKKwllbHNlCisJCWRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyAmPSB+bWFzazsKKworCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcpOworfQorCitzdGF0aWMgdm9pZCByNTAwX3ZibF9pcnFfc2V0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBtYXNrLCBpbnQgc3RhdGUpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChzdGF0ZSkKKwkJZGV2X3ByaXYtPnI1MDBfZGlzcF9pcnFfcmVnIHw9IG1hc2s7CisJZWxzZQorCQlkZXZfcHJpdi0+cjUwMF9kaXNwX2lycV9yZWcgJj0gfm1hc2s7CisKKwlSQURFT05fV1JJVEUoUjUwMF9EeE1PREVfSU5UX01BU0ssIGRldl9wcml2LT5yNTAwX2Rpc3BfaXJxX3JlZyk7Cit9CisKK2ludCByYWRlb25fZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApIHsKKwkJc3dpdGNoIChjcnRjKSB7CisJCWNhc2UgMDoKKwkJCXI1MDBfdmJsX2lycV9zZXRfc3RhdGUoZGV2LCBSNTAwX0QxTU9ERV9JTlRfTUFTSywgMSk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcjUwMF92YmxfaXJxX3NldF9zdGF0ZShkZXYsIFI1MDBfRDJNT0RFX0lOVF9NQVNLLCAxKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ0cmllZCB0byBlbmFibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBjcnRjICVkXG4iLAorCQkJCSAgY3J0Yyk7CisJCQlyZXR1cm4gRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChjcnRjKSB7CisJCWNhc2UgMDoKKwkJCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX0NSVENfVkJMQU5LX01BU0ssIDEpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX0NSVEMyX1ZCTEFOS19NQVNLLCAxKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ0cmllZCB0byBlbmFibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBjcnRjICVkXG4iLAorCQkJCSAgY3J0Yyk7CisJCQlyZXR1cm4gRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmFkZW9uX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCQlzd2l0Y2ggKGNydGMpIHsKKwkJY2FzZSAwOgorCQkJcjUwMF92YmxfaXJxX3NldF9zdGF0ZShkZXYsIFI1MDBfRDFNT0RFX0lOVF9NQVNLLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlyNTAwX3ZibF9pcnFfc2V0X3N0YXRlKGRldiwgUjUwMF9EMk1PREVfSU5UX01BU0ssIDApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IGNydGMgJWRcbiIsCisJCQkJICBjcnRjKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChjcnRjKSB7CisJCWNhc2UgMDoKKwkJCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX0NSVENfVkJMQU5LX01BU0ssIDApOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX0NSVEMyX1ZCTEFOS19NQVNLLCAwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ0cmllZCB0byBlbmFibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBjcnRjICVkXG4iLAorCQkJCSAgY3J0Yyk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB1MzIgcmFkZW9uX2Fja25vd2xlZGdlX2lycXMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgKnI1MDBfZGlzcF9pbnQpCit7CisJdTMyIGlycXMgPSBSQURFT05fUkVBRChSQURFT05fR0VOX0lOVF9TVEFUVVMpOworCXUzMiBpcnFfbWFzayA9IFJBREVPTl9TV19JTlRfVEVTVDsKKworCSpyNTAwX2Rpc3BfaW50ID0gMDsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCQkvKiB2YmwgaW50ZXJydXB0cyBpbiBhIGRpZmZlcmVudCBwbGFjZSAqLworCisJCWlmIChpcnFzICYgUjUwMF9ESVNQTEFZX0lOVF9TVEFUVVMpIHsKKwkJCS8qIGlmIGEgZGlzcGxheSBpbnRlcnJ1cHQgKi8KKwkJCXUzMiBkaXNwX2lycTsKKworCQkJZGlzcF9pcnEgPSBSQURFT05fUkVBRChSNTAwX0RJU1BfSU5URVJSVVBUX1NUQVRVUyk7CisKKwkJCSpyNTAwX2Rpc3BfaW50ID0gZGlzcF9pcnE7CisJCQlpZiAoZGlzcF9pcnEgJiBSNTAwX0QxX1ZCTEFOS19JTlRFUlJVUFQpCisJCQkJUkFERU9OX1dSSVRFKFI1MDBfRDFNT0RFX1ZCTEFOS19TVEFUVVMsIFI1MDBfVkJMQU5LX0FDSyk7CisJCQlpZiAoZGlzcF9pcnEgJiBSNTAwX0QyX1ZCTEFOS19JTlRFUlJVUFQpCisJCQkJUkFERU9OX1dSSVRFKFI1MDBfRDJNT0RFX1ZCTEFOS19TVEFUVVMsIFI1MDBfVkJMQU5LX0FDSyk7CisJCX0KKwkJaXJxX21hc2sgfD0gUjUwMF9ESVNQTEFZX0lOVF9TVEFUVVM7CisJfSBlbHNlCisJCWlycV9tYXNrIHw9IFJBREVPTl9DUlRDX1ZCTEFOS19TVEFUIHwgUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUOworCisJaXJxcyAmPQlpcnFfbWFzazsKKwogCWlmIChpcnFzKQogCQlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfU1RBVFVTLCBpcnFzKTsKKwogCXJldHVybiBpcnFzOwogfQogCkBAIC02OCw0NCArMTg0LDMzIEBACiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0KIAkgICAgKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJdTMyIHN0YXQ7CisJdTMyIHI1MDBfZGlzcF9pbnQ7CiAKIAkvKiBPbmx5IGNvbnNpZGVyIHRoZSBiaXRzIHdlJ3JlIGludGVyZXN0ZWQgaW4gLSBvdGhlcnMgY291bGQgYmUgdXNlZAogCSAqIG91dHNpZGUgdGhlIERSTQogCSAqLwotCXN0YXQgPSByYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdiwgKFJBREVPTl9TV19JTlRfVEVTVF9BQ0sgfAotCQkJCQkJICBSQURFT05fQ1JUQ19WQkxBTktfU1RBVCB8Ci0JCQkJCQkgIFJBREVPTl9DUlRDMl9WQkxBTktfU1RBVCkpOworCXN0YXQgPSByYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdiwgJnI1MDBfZGlzcF9pbnQpOwogCWlmICghc3RhdCkKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJc3RhdCAmPSBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWc7CiAKIAkvKiBTVyBpbnRlcnJ1cHQgKi8KLQlpZiAoc3RhdCAmIFJBREVPTl9TV19JTlRfVEVTVCkgeworCWlmIChzdGF0ICYgUkFERU9OX1NXX0lOVF9URVNUKQogCQlEUk1fV0FLRVVQKCZkZXZfcHJpdi0+c3dpX3F1ZXVlKTsKLQl9CiAKIAkvKiBWQkxBTksgaW50ZXJydXB0ICovCi0JaWYgKHN0YXQgJiAoUkFERU9OX0NSVENfVkJMQU5LX1NUQVR8UkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUKSkgewotCQlpbnQgdmJsYW5rX2NydGMgPSBkZXZfcHJpdi0+dmJsYW5rX2NydGM7Ci0KLQkJaWYgKCh2YmxhbmtfY3J0YyAmCi0JCSAgICAgKERSTV9SQURFT05fVkJMQU5LX0NSVEMxIHwgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzIpKSA9PQotCQkgICAgKERSTV9SQURFT05fVkJMQU5LX0NSVEMxIHwgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzIpKSB7Ci0JCQlpZiAoc3RhdCAmIFJBREVPTl9DUlRDX1ZCTEFOS19TVEFUKQotCQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQkJCWlmIChzdGF0ICYgUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUKQotCQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkMik7Ci0JCX0gZWxzZSBpZiAoKChzdGF0ICYgUkFERU9OX0NSVENfVkJMQU5LX1NUQVQpICYmCi0JCQkgICAodmJsYW5rX2NydGMgJiBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMSkpIHx8Ci0JCQkgICAoKHN0YXQgJiBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQpICYmCi0JCQkgICAgKHZibGFua19jcnRjICYgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzIpKSkKLQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQotCQlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZSk7Ci0JCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldik7CisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApIHsKKwkJaWYgKHI1MDBfZGlzcF9pbnQgJiBSNTAwX0QxX1ZCTEFOS19JTlRFUlJVUFQpCisJCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDApOworCQlpZiAocjUwMF9kaXNwX2ludCAmIFI1MDBfRDJfVkJMQU5LX0lOVEVSUlVQVCkKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMSk7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXQgJiBSQURFT05fQ1JUQ19WQkxBTktfU1RBVCkKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CisJCWlmIChzdGF0ICYgUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUKQorCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKTsKIAl9Ci0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTE0NCw1NCArMjQ5LDMxIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCByYWRlb25fZHJpdmVyX3ZibGFua19kb193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJCQl1bnNpZ25lZCBpbnQgKnNlcXVlbmNlLCBpbnQgY3J0YykKK3UzMiByYWRlb25fZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewotCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9Ci0JICAgIChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGludCBjdXJfdmJsYW5rOwotCWludCByZXQgPSAwOwotCWludCBhY2sgPSAwOwotCWF0b21pY190ICpjb3VudGVyOworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKIAlpZiAoIWRldl9wcml2KSB7CiAJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoY3J0YyA9PSBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMSkgewotCQljb3VudGVyID0gJmRldi0+dmJsX3JlY2VpdmVkOwotCQlhY2sgfD0gUkFERU9OX0NSVENfVkJMQU5LX1NUQVQ7Ci0JfSBlbHNlIGlmIChjcnRjID09IERSTV9SQURFT05fVkJMQU5LX0NSVEMyKSB7Ci0JCWNvdW50ZXIgPSAmZGV2LT52YmxfcmVjZWl2ZWQyOwotCQlhY2sgfD0gUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUOwotCX0gZWxzZQorCWlmIChjcnRjIDwgMCB8fCBjcnRjID4gMSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgY3J0YyAlZFxuIiwgY3J0Yyk7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAotCXJhZGVvbl9hY2tub3dsZWRnZV9pcnFzKGRldl9wcml2LCBhY2spOwotCi0JZGV2X3ByaXYtPnN0YXRzLmJveGVzIHw9IFJBREVPTl9CT1hfV0FJVF9JRExFOwotCi0JLyogQXNzdW1lIHRoYXQgdGhlIHVzZXIgaGFzIG1pc3NlZCB0aGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIKLQkgKiBieSBhYm91dCBhIGRheSByYXRoZXIgdGhhbiBzaGUgd2FudHMgdG8gd2FpdCBmb3IgeWVhcnMKLQkgKiB1c2luZyB2ZXJ0aWNhbCBibGFua3MuLi4KLQkgKi8KLQlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlLCAzICogRFJNX0haLAotCQkgICAgKCgoY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKGNvdW50ZXIpKQotCQkgICAgICAtICpzZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7Ci0KLQkqc2VxdWVuY2UgPSBjdXJfdmJsYW5rOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IHJhZGVvbl9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKLXsKLQlyZXR1cm4gcmFkZW9uX2RyaXZlcl92YmxhbmtfZG9fd2FpdChkZXYsIHNlcXVlbmNlLCBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMSk7Ci19Ci0KLWludCByYWRlb25fZHJpdmVyX3ZibGFua193YWl0MihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQotewotCXJldHVybiByYWRlb25fZHJpdmVyX3ZibGFua19kb193YWl0KGRldiwgc2VxdWVuY2UsIERSTV9SQURFT05fVkJMQU5LX0NSVEMyKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCQlpZiAoY3J0YyA9PSAwKQorCQkJcmV0dXJuIFJBREVPTl9SRUFEKFI1MDBfRDFDUlRDX0ZSQU1FX0NPVU5UKTsKKwkJZWxzZQorCQkJcmV0dXJuIFJBREVPTl9SRUFEKFI1MDBfRDJDUlRDX0ZSQU1FX0NPVU5UKTsKKwl9IGVsc2UgeworCQlpZiAoY3J0YyA9PSAwKQorCQkJcmV0dXJuIFJBREVPTl9SRUFEKFJBREVPTl9DUlRDX0NSTlRfRlJBTUUpOworCQllbHNlCisJCQlyZXR1cm4gUkFERU9OX1JFQUQoUkFERU9OX0NSVEMyX0NSTlRfRlJBTUUpOworCX0KIH0KIAogLyogTmVlZHMgdGhlIGxvY2sgYXMgaXQgdG91Y2hlcyB0aGUgcmluZy4KQEAgLTIzNCw0NiArMzE2LDQxIEBACiAJcmV0dXJuIHJhZGVvbl93YWl0X2lycShkZXYsIGlycXdhaXQtPmlycV9zZXEpOwogfQogCi12b2lkIHJhZGVvbl9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0JZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcgPSBSQURFT05fU1dfSU5UX0VOQUJMRTsKLQlpZiAoZGV2X3ByaXYtPnZibGFua19jcnRjICYgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzEpCi0JCWRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyB8PSBSQURFT05fQ1JUQ19WQkxBTktfTUFTSzsKLQotCWlmIChkZXZfcHJpdi0+dmJsYW5rX2NydGMgJiBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMikKLQkJZGV2X3ByaXYtPmlycV9lbmFibGVfcmVnIHw9IFJBREVPTl9DUlRDMl9WQkxBTktfTUFTSzsKLQotCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcpOwotCWRldl9wcml2LT5pcnFfZW5hYmxlZCA9IDE7Ci19Ci0KIC8qIGRybV9kbWEuaCBob29rcwogKi8KIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPQogCSAgICAoZHJtX3JhZGVvbl9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgZHVtbXk7CiAKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKIAlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgMCk7CiAKIAkvKiBDbGVhciBiaXRzIGlmIHRoZXkncmUgYWxyZWFkeSBoaWdoICovCi0JcmFkZW9uX2Fja25vd2xlZGdlX2lycXMoZGV2X3ByaXYsIChSQURFT05fU1dfSU5UX1RFU1RfQUNLIHwKLQkJCQkJICAgUkFERU9OX0NSVENfVkJMQU5LX1NUQVQgfAotCQkJCQkgICBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQpKTsKKwlyYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdiwgJmR1bW15KTsKIH0KIAotdm9pZCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9CiAJICAgIChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CiAKIAlhdG9taWNfc2V0KCZkZXZfcHJpdi0+c3dpX2VtaXR0ZWQsIDApOwogCURSTV9JTklUX1dBSVRRVUVVRSgmZGV2X3ByaXYtPnN3aV9xdWV1ZSk7CiAKLQlyYWRlb25fZW5hYmxlX2ludGVycnVwdChkZXYpOworCXJldCA9IGRybV92YmxhbmtfaW5pdChkZXYsIDIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkZXYtPm1heF92YmxhbmtfY291bnQgPSAweDAwMWZmZmZmOworCisJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fU1dfSU5UX0VOQUJMRSwgMSk7CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCByYWRlb25fZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCkBAIC0yODUsNiArMzYyLDggQEAKIAogCWRldl9wcml2LT5pcnFfZW5hYmxlZCA9IDA7CiAKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KIAlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgMCk7CiB9CkBAIC0yOTMsMTggKzM3Miw4IEBACiBpbnQgcmFkZW9uX3ZibGFua19jcnRjX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXUzMiBmbGFnOwotCXUzMiB2YWx1ZTsKIAotCWZsYWcgPSBSQURFT05fUkVBRChSQURFT05fR0VOX0lOVF9DTlRMKTsKLQl2YWx1ZSA9IDA7Ci0KLQlpZiAoZmxhZyAmIFJBREVPTl9DUlRDX1ZCTEFOS19NQVNLKQotCQl2YWx1ZSB8PSBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMTsKLQotCWlmIChmbGFnICYgUkFERU9OX0NSVEMyX1ZCTEFOS19NQVNLKQotCQl2YWx1ZSB8PSBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMjsKLQlyZXR1cm4gdmFsdWU7CisJcmV0dXJuIGRldl9wcml2LT52YmxhbmtfY3J0YzsKIH0KIAogaW50IHJhZGVvbl92YmxhbmtfY3J0Y19zZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50NjRfdCB2YWx1ZSkKQEAgLTMxNSw2ICszODQsNSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZGV2X3ByaXYtPnZibGFua19jcnRjID0gKHVuc2lnbmVkIGludCl2YWx1ZTsKLQlyYWRlb25fZW5hYmxlX2ludGVycnVwdChkZXYpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKaW5kZXggMTFjMTQ2Yi4uNWQ3MTUzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCkBAIC0yOTk3LDcgKzI5OTcsNyBAQAogCQl2YWx1ZSA9IEdFVF9TQ1JBVENIKDIpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QQVJBTV9JUlFfTlI6Ci0JCXZhbHVlID0gZGV2LT5pcnE7CisJCXZhbHVlID0gZHJtX2Rldl90b19pcnEoZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUEFSQU1fR0FSVF9CQVNFOgogCQl2YWx1ZSA9IGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21tLmMKaW5kZXggYjM4Nzg3Ny4uYWYyMjExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19tbS5jCkBAIC00MSw3ICs0MSw3IEBACiAjZGVmaW5lIEFHUF9UWVBFIDEKIAogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfU0lTKQorI2lmIGRlZmluZWQoQ09ORklHX0ZCX1NJUykgfHwgZGVmaW5lZChDT05GSUdfRkJfU0lTX01PRFVMRSkKIC8qIGZiIG1hbmFnZW1lbnQgdmlhIGZiIGRldmljZSAqLwogCiAjZGVmaW5lIFNJU19NTV9BTElHTl9TSElGVCAwCkBAIC01Nyw3ICs1Nyw3IEBACiAJaWYgKHJlcS5zaXplID09IDApCiAJCXJldHVybiBOVUxMOwogCWVsc2UKLQkJcmV0dXJuICh2b2lkICopfnJlcS5vZmZzZXQ7CisJCXJldHVybiAodm9pZCAqKSh1bnNpZ25lZCBsb25nKX5yZXEub2Zmc2V0OwogfQogCiBzdGF0aWMgdm9pZCBzaXNfc21hbl9tbV9mcmVlKHZvaWQgKnByaXZhdGUsIHZvaWQgKnJlZikKQEAgLTc1LDEyICs3NSwxMiBAQAogCXJldHVybiB+KCh1bnNpZ25lZCBsb25nKXJlZik7CiB9CiAKLSNlbHNlIC8qIENPTkZJR19GQl9TSVMgKi8KKyNlbHNlIC8qIENPTkZJR19GQl9TSVNbX01PRFVMRV0gKi8KIAogI2RlZmluZSBTSVNfTU1fQUxJR05fU0hJRlQgNAogI2RlZmluZSBTSVNfTU1fQUxJR05fTUFTSyAoICgxIDw8IFNJU19NTV9BTElHTl9TSElGVCkgLSAxKQogCi0jZW5kaWYgLyogQ09ORklHX0ZCX1NJUyAqLworI2VuZGlmIC8qIENPTkZJR19GQl9TSVNbX01PRFVMRV0gKi8KIAogc3RhdGljIGludCBzaXNfZmJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKQEAgLTg5LDcgKzg5LDcgQEAKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotI2lmIGRlZmluZWQoQ09ORklHX0ZCX1NJUykKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9TSVMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1NJU19NT0RVTEUpCiAJewogCQlzdHJ1Y3QgZHJtX3NtYW5fbW0gc21hbl9tbTsKIAkJc21hbl9tbS5wcml2YXRlID0gKHZvaWQgKikweEZGRkZGRkZGOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwppbmRleCA4MGMwMWNkLi4wOTkzYjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwpAQCAtNDAsMTEgKzQwLDEzIEBACiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewogCS5kcml2ZXJfZmVhdHVyZXMgPQogCSAgICBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8IERSSVZFUl9IQVZFX0lSUSB8Ci0JICAgIERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0lSUV9WQkwsCisJICAgIERSSVZFUl9JUlFfU0hBUkVELAogCS5sb2FkID0gdmlhX2RyaXZlcl9sb2FkLAogCS51bmxvYWQgPSB2aWFfZHJpdmVyX3VubG9hZCwKIAkuY29udGV4dF9kdG9yID0gdmlhX2ZpbmFsX2NvbnRleHQsCi0JLnZibGFua193YWl0ID0gdmlhX2RyaXZlcl92Ymxhbmtfd2FpdCwKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gdmlhX2dldF92YmxhbmtfY291bnRlciwKKwkuZW5hYmxlX3ZibGFuayA9IHZpYV9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IHZpYV9kaXNhYmxlX3ZibGFuaywKIAkuaXJxX3ByZWluc3RhbGwgPSB2aWFfZHJpdmVyX2lycV9wcmVpbnN0YWxsLAogCS5pcnFfcG9zdGluc3RhbGwgPSB2aWFfZHJpdmVyX2lycV9wb3N0aW5zdGFsbCwKIAkuaXJxX3VuaW5zdGFsbCA9IHZpYV9kcml2ZXJfaXJxX3VuaW5zdGFsbCwKQEAgLTU5LDE3ICs2MSwxNyBAQAogCS5nZXRfcmVnX29mcyA9IGRybV9jb3JlX2dldF9yZWdfb2ZzLAogCS5pb2N0bHMgPSB2aWFfaW9jdGxzLAogCS5mb3BzID0gewotCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCSAub3BlbiA9IGRybV9vcGVuLAotCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKLQkJIC5tbWFwID0gZHJtX21tYXAsCi0JCSAucG9sbCA9IGRybV9wb2xsLAotCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCi0JfSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vcGVuID0gZHJtX29wZW4sCisJCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJCS5pb2N0bCA9IGRybV9pb2N0bCwKKwkJLm1tYXAgPSBkcm1fbW1hcCwKKwkJLnBvbGwgPSBkcm1fcG9sbCwKKwkJLmZhc3luYyA9IGRybV9mYXN5bmMsCisJCX0sCiAJLnBjaV9kcml2ZXIgPSB7Ci0JCSAubmFtZSA9IERSSVZFUl9OQU1FLAotCQkgLmlkX3RhYmxlID0gcGNpaWRsaXN0LAorCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQkuaWRfdGFibGUgPSBwY2lpZGxpc3QsCiAJfSwKIAogCS5uYW1lID0gRFJJVkVSX05BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5oCmluZGV4IDJkYWFlODEuLmNhZmNiODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5oCkBAIC03NSw2ICs3NSw3IEBACiAJc3RydWN0IHRpbWV2YWwgbGFzdF92Ymxhbms7CiAJaW50IGxhc3RfdmJsYW5rX3ZhbGlkOwogCXVuc2lnbmVkIHVzZWNfcGVyX3ZibGFuazsKKwlhdG9taWNfdCB2YmxfcmVjZWl2ZWQ7CiAJZHJtX3ZpYV9zdGF0ZV90IGhjX3N0YXRlOwogCWNoYXIgcGNpX2J1ZltWSUFfUENJX0JVRl9TSVpFXTsKIAljb25zdCB1aW50MzJfdCAqZmlyZV9vZmZzZXRzW1ZJQV9GSVJFX0JVRl9TSVpFXTsKQEAgLTEzMCwyMSArMTMxLDI0IEBACiBleHRlcm4gaW50IHZpYV9maW5hbF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgY29udGV4dCk7CiAKIGV4dGVybiBpbnQgdmlhX2RvX2NsZWFudXBfbWFwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiBpbnQgdmlhX2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7CitleHRlcm4gdTMyIHZpYV9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIGludCB2aWFfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCB2aWFfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogCiBleHRlcm4gaXJxcmV0dXJuX3QgdmlhX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOwogZXh0ZXJuIHZvaWQgdmlhX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gdm9pZCB2aWFfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CitleHRlcm4gaW50IHZpYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgdmlhX2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIAogZXh0ZXJuIGludCB2aWFfZG1hX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIHZvaWQgdmlhX2luaXRfY29tbWFuZF92ZXJpZmllcih2b2lkKTsKIGV4dGVybiBpbnQgdmlhX2RyaXZlcl9kbWFfcXVpZXNjZW50KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIHZpYV9pbml0X2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwotZXh0ZXJuIHZvaWQgdmlhX2NsZWFudXBfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7Ci1leHRlcm4gdm9pZCB2aWFfcmVsZWFzZV9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgY29udGV4dCk7CitleHRlcm4gdm9pZCB2aWFfaW5pdF9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworZXh0ZXJuIHZvaWQgdmlhX2NsZWFudXBfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHZpYV9yZWxlYXNlX2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGNvbnRleHQpOwogCi1leHRlcm4gdm9pZCB2aWFfcmVjbGFpbV9idWZmZXJzX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gdm9pZCB2aWFfcmVjbGFpbV9idWZmZXJzX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gdm9pZCB2aWFfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiBleHRlcm4gdm9pZCB2aWFfZG1hYmxpdF9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBlbmdpbmUsIGludCBmcm9tX2lycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2lycS5jCmluZGV4IGM2YmI5NzguLjY2NWQzMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2lycS5jCkBAIC00Myw3ICs0Myw3IEBACiAjZGVmaW5lIFZJQV9SRUdfSU5URVJSVVBUICAgICAgIDB4MjAwCiAKIC8qIFZJQV9SRUdfSU5URVJSVVBUICovCi0jZGVmaW5lIFZJQV9JUlFfR0xPQkFMICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBWSUFfSVJRX0dMT0JBTAkgICgxIDw8IDMxKQogI2RlZmluZSBWSUFfSVJRX1ZCTEFOS19FTkFCTEUgICAoMSA8PCAxOSkKICNkZWZpbmUgVklBX0lSUV9WQkxBTktfUEVORElORyAgKDEgPDwgMykKICNkZWZpbmUgVklBX0lSUV9IUVYwX0VOQUJMRSAgICAgKDEgPDwgMTEpCkBAIC02OCwxNiArNjgsMTUgQEAKIAogc3RhdGljIG1hc2thcnJheV90IHZpYV9wcm9fZ3JvdXBfYV9pcnFzW10gPSB7CiAJe1ZJQV9JUlFfSFFWMF9FTkFCTEUsIFZJQV9JUlFfSFFWMF9QRU5ESU5HLCAweDAwMDAwM0QwLCAweDAwMDA4MDEwLAotCSAweDAwMDAwMDAwfSwKKwkgMHgwMDAwMDAwMCB9LAogCXtWSUFfSVJRX0hRVjFfRU5BQkxFLCBWSUFfSVJRX0hRVjFfUEVORElORywgMHgwMDAwMTNEMCwgMHgwMDAwODAxMCwKLQkgMHgwMDAwMDAwMH0sCisJIDB4MDAwMDAwMDAgfSwKIAl7VklBX0lSUV9ETUEwX1REX0VOQUJMRSwgVklBX0lSUV9ETUEwX1REX1BFTkRJTkcsIFZJQV9QQ0lfRE1BX0NTUjAsCiAJIFZJQV9ETUFfQ1NSX1RBIHwgVklBX0RNQV9DU1JfVEQsIDB4MDAwMDAwMDh9LAogCXtWSUFfSVJRX0RNQTFfVERfRU5BQkxFLCBWSUFfSVJRX0RNQTFfVERfUEVORElORywgVklBX1BDSV9ETUFfQ1NSMSwKIAkgVklBX0RNQV9DU1JfVEEgfCBWSUFfRE1BX0NTUl9URCwgMHgwMDAwMDAwOH0sCiB9Owotc3RhdGljIGludCB2aWFfbnVtX3Byb19ncm91cF9hID0KLSAgICBzaXplb2YodmlhX3Byb19ncm91cF9hX2lycXMpIC8gc2l6ZW9mKG1hc2thcnJheV90KTsKK3N0YXRpYyBpbnQgdmlhX251bV9wcm9fZ3JvdXBfYSA9IEFSUkFZX1NJWkUodmlhX3Byb19ncm91cF9hX2lycXMpOwogc3RhdGljIGludCB2aWFfaXJxbWFwX3Byb19ncm91cF9hW10gPSB7MCwgMSwgLTEsIDIsIC0xLCAzfTsKIAogc3RhdGljIG1hc2thcnJheV90IHZpYV91bmljaHJvbWVfaXJxc1tdID0gewpAQCAtODYsMTQgKzg1LDI0IEBACiAJe1ZJQV9JUlFfRE1BMV9URF9FTkFCTEUsIFZJQV9JUlFfRE1BMV9URF9QRU5ESU5HLCBWSUFfUENJX0RNQV9DU1IxLAogCSBWSUFfRE1BX0NTUl9UQSB8IFZJQV9ETUFfQ1NSX1RELCAweDAwMDAwMDA4fQogfTsKLXN0YXRpYyBpbnQgdmlhX251bV91bmljaHJvbWUgPSBzaXplb2YodmlhX3VuaWNocm9tZV9pcnFzKSAvIHNpemVvZihtYXNrYXJyYXlfdCk7CitzdGF0aWMgaW50IHZpYV9udW1fdW5pY2hyb21lID0gQVJSQVlfU0laRSh2aWFfdW5pY2hyb21lX2lycXMpOwogc3RhdGljIGludCB2aWFfaXJxbWFwX3VuaWNocm9tZVtdID0gey0xLCAtMSwgLTEsIDAsIC0xLCAxfTsKIAorCiBzdGF0aWMgdW5zaWduZWQgdGltZV9kaWZmKHN0cnVjdCB0aW1ldmFsICpub3csIHN0cnVjdCB0aW1ldmFsICp0aGVuKQogewogCXJldHVybiAobm93LT50dl91c2VjID49IHRoZW4tPnR2X3VzZWMpID8KLQkgICAgbm93LT50dl91c2VjIC0gdGhlbi0+dHZfdXNlYyA6Ci0JICAgIDEwMDAwMDAgLSAodGhlbi0+dHZfdXNlYyAtIG5vdy0+dHZfdXNlYyk7CisJCW5vdy0+dHZfdXNlYyAtIHRoZW4tPnR2X3VzZWMgOgorCQkxMDAwMDAwIC0gKHRoZW4tPnR2X3VzZWMgLSBub3ctPnR2X3VzZWMpOworfQorCit1MzIgdmlhX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWlmIChjcnRjICE9IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+dmJsX3JlY2VpdmVkKTsKIH0KIAogaXJxcmV0dXJuX3QgdmlhX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpCkBAIC0xMDgsMjMgKzExNywyMiBAQAogCiAJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOwogCWlmIChzdGF0dXMgJiBWSUFfSVJRX1ZCTEFOS19QRU5ESU5HKSB7Ci0JCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQkJaWYgKCEoYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSAmIDB4MEYpKSB7CisJCWF0b21pY19pbmMoJmRldl9wcml2LT52YmxfcmVjZWl2ZWQpOworCQlpZiAoIShhdG9taWNfcmVhZCgmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCkgJiAweDBGKSkgewogCQkJZG9fZ2V0dGltZW9mZGF5KCZjdXJfdmJsYW5rKTsKIAkJCWlmIChkZXZfcHJpdi0+bGFzdF92YmxhbmtfdmFsaWQpIHsKIAkJCQlkZXZfcHJpdi0+dXNlY19wZXJfdmJsYW5rID0KLQkJCQkgICAgdGltZV9kaWZmKCZjdXJfdmJsYW5rLAotCQkJCQkgICAgICAmZGV2X3ByaXYtPmxhc3RfdmJsYW5rKSA+PiA0OworCQkJCQl0aW1lX2RpZmYoJmN1cl92YmxhbmssCisJCQkJCQkgICZkZXZfcHJpdi0+bGFzdF92YmxhbmspID4+IDQ7CiAJCQl9CiAJCQlkZXZfcHJpdi0+bGFzdF92YmxhbmsgPSBjdXJfdmJsYW5rOwogCQkJZGV2X3ByaXYtPmxhc3RfdmJsYW5rX3ZhbGlkID0gMTsKIAkJfQotCQlpZiAoIShhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpICYgMHhGRikpIHsKKwkJaWYgKCEoYXRvbWljX3JlYWQoJmRldl9wcml2LT52YmxfcmVjZWl2ZWQpICYgMHhGRikpIHsKIAkJCURSTV9ERUJVRygiVVMgcGVyIHZibGFuayBpczogJXVcbiIsCiAJCQkJICBkZXZfcHJpdi0+dXNlY19wZXJfdmJsYW5rKTsKIAkJfQotCQlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZSk7Ci0JCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldik7CisJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CiAJCWhhbmRsZWQgPSAxOwogCX0KIApAQCAtMTQ1LDYgKzE1Myw3IEBACiAJLyogQWNrbm93bGVnZSBpbnRlcnJ1cHRzICovCiAJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMpOwogCisKIAlpZiAoaGFuZGxlZCkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCWVsc2UKQEAgLTE2MywzMSArMTcyLDM0IEBACiAJfQogfQogCi1pbnQgdmlhX2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKK2ludCB2aWFfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKIHsKLQlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQl1bnNpZ25lZCBpbnQgY3VyX3ZibGFuazsKLQlpbnQgcmV0ID0gMDsKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBzdGF0dXM7CiAKLQlEUk1fREVCVUcoIlxuIik7Ci0JaWYgKCFkZXZfcHJpdikgewotCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKKwlpZiAoY3J0YyAhPSAwKSB7CisJCURSTV9FUlJPUigiJXM6ICBiYWQgY3J0YyAlZFxuIiwgX19mdW5jX18sIGNydGMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl2aWFkcnZfYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdik7CisJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOworCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzICYgVklBX0lSUV9WQkxBTktfRU5BQkxFKTsKIAotCS8qIEFzc3VtZSB0aGF0IHRoZSB1c2VyIGhhcyBtaXNzZWQgdGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyCi0JICogYnkgYWJvdXQgYSBkYXkgcmF0aGVyIHRoYW4gc2hlIHdhbnRzIHRvIHdhaXQgZm9yIHllYXJzCi0JICogdXNpbmcgdmVydGljYWwgYmxhbmtzLi4uCi0JICovCisJVklBX1dSSVRFOCgweDgzZDQsIDB4MTEpOworCVZJQV9XUklURTgoMHg4M2Q1LCBWSUFfUkVBRDgoMHg4M2Q1KSB8IDB4MzApOwogCi0JRFJNX1dBSVRfT04ocmV0LCBkZXYtPnZibF9xdWV1ZSwgMyAqIERSTV9IWiwKLQkJICAgICgoKGN1cl92YmxhbmsgPSBhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpKSAtCi0JCSAgICAgICpzZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7CisJcmV0dXJuIDA7Cit9CiAKLQkqc2VxdWVuY2UgPSBjdXJfdmJsYW5rOwotCXJldHVybiByZXQ7Cit2b2lkIHZpYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJVklBX1dSSVRFOCgweDgzZDQsIDB4MTEpOworCVZJQV9XUklURTgoMHg4M2Q1LCBWSUFfUkVBRDgoMHg4M2Q1KSAmIH4weDMwKTsKKworCWlmIChjcnRjICE9IDApCisJCURSTV9FUlJPUigiJXM6ICBiYWQgY3J0YyAlZFxuIiwgX19mdW5jX18sIGNydGMpOwogfQogCiBzdGF0aWMgaW50CkBAIC0yMzksNiArMjUxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisKIC8qCiAgKiBkcm1fZG1hLmggaG9va3MKICAqLwpAQCAtMjkyLDIzICszMDUsMjUgQEAKIAl9CiB9CiAKLXZvaWQgdmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitpbnQgdmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgc3RhdHVzOwogCi0JRFJNX0RFQlVHKCJcbiIpOwotCWlmIChkZXZfcHJpdikgewotCQlzdGF0dXMgPSBWSUFfUkVBRChWSUFfUkVHX0lOVEVSUlVQVCk7Ci0JCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzIHwgVklBX0lSUV9HTE9CQUwKLQkJCSAgfCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9tYXNrKTsKKwlEUk1fREVCVUcoInZpYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsXG4iKTsKKwlpZiAoIWRldl9wcml2KQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBTb21lIG1hZ2ljLCBvaCBmb3Igc29tZSBkYXRhIHNoZWV0cyAhICovCisJZHJtX3ZibGFua19pbml0KGRldiwgMSk7CisJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOworCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzIHwgVklBX0lSUV9HTE9CQUwKKwkJICB8IGRldl9wcml2LT5pcnFfZW5hYmxlX21hc2spOwogCi0JCVZJQV9XUklURTgoMHg4M2Q0LCAweDExKTsKLQkJVklBX1dSSVRFOCgweDgzZDUsIFZJQV9SRUFEOCgweDgzZDUpIHwgMHgzMCk7CisJLyogU29tZSBtYWdpYywgb2ggZm9yIHNvbWUgZGF0YSBzaGVldHMgISAqLworCVZJQV9XUklURTgoMHg4M2Q0LCAweDExKTsKKwlWSUFfV1JJVEU4KDB4ODNkNSwgVklBX1JFQUQ4KDB4ODNkNSkgfCAweDMwKTsKIAotCX0KKwlyZXR1cm4gMDsKIH0KIAogdm9pZCB2aWFfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCkBAIC0zMzksOSArMzU0LDYgQEAKIAlkcm1fdmlhX2lycV90ICpjdXJfaXJxID0gZGV2X3ByaXYtPnZpYV9pcnFzOwogCWludCBmb3JjZV9zZXF1ZW5jZTsKIAotCWlmICghZGV2LT5pcnEpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGlycXdhaXQtPnJlcXVlc3QuaXJxID49IGRldl9wcml2LT5udW1faXJxcykgewogCQlEUk1fRVJST1IoIlRyeWluZyB0byB3YWl0IG9uIHVua25vd24gaXJxICVkXG4iLAogCQkJICBpcnF3YWl0LT5yZXF1ZXN0LmlycSk7CkBAIC0zNTIsNyArMzY0LDggQEAKIAogCXN3aXRjaCAoaXJxd2FpdC0+cmVxdWVzdC50eXBlICYgflZJQV9JUlFfRkxBR1NfTUFTSykgewogCWNhc2UgVklBX0lSUV9SRUxBVElWRToKLQkJaXJxd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSArPSBhdG9taWNfcmVhZCgmY3VyX2lycS0+aXJxX3JlY2VpdmVkKTsKKwkJaXJxd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSArPQorCQkJYXRvbWljX3JlYWQoJmN1cl9pcnEtPmlycV9yZWNlaXZlZCk7CiAJCWlycXdhaXQtPnJlcXVlc3QudHlwZSAmPSB+X0RSTV9WQkxBTktfUkVMQVRJVkU7CiAJY2FzZSBWSUFfSVJRX0FCU09MVVRFOgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9tbS5jCmluZGV4IGU2NDA5NDkuLmY2OTRjYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYwpAQCAtOTMsOCArOTMsNyBAQAogCS8qIExhc3QgY29udGV4dCwgcGVyZm9ybSBjbGVhbnVwICovCiAJaWYgKGRldi0+Y3R4X2NvdW50ID09IDEgJiYgZGV2LT5kZXZfcHJpdmF0ZSkgewogCQlEUk1fREVCVUcoIkxhc3QgQ29udGV4dFxuIik7Ci0JCWlmIChkZXYtPmlycSkKLQkJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CisJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CiAJCXZpYV9jbGVhbnVwX2Z1dGV4KGRldl9wcml2KTsKIAkJdmlhX2RvX2NsZWFudXBfbWFwKGRldik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvS2NvbmZpZyBiL2RyaXZlcnMvaGlkL0tjb25maWcKaW5kZXggY2FjZjg5ZS4uZjU5OTlhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL2hpZC9LY29uZmlnCkBAIC02Nyw0ICs2NywyMDEgQEAKIAogc291cmNlICJkcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZyIKIAorbWVudSAiU3BlY2lhbCBISUQgZHJpdmVycyIKKwlkZXBlbmRzIG9uIEhJRAorCitjb25maWcgSElEX0NPTVBBVAorCWJvb2wgIkxvYWQgYWxsIEhJRCBkcml2ZXJzIG9uIGhpZCBjb3JlIGxvYWQiCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCUNvbXBhdGlibGUgb3B0aW9uIGZvciBvbGRlciB1c2Vyc3BhY2UuIElmIHlvdSBoYXZlIHN5c3RlbSB3aXRob3V0IHVkZXYKKwlzdXBwb3J0IG9mIG1vZHVsZSBsb2FkaW5nIHRocm91Z2ggYWxpYXNlcyBhbmQgYWxzbyBvbGQKKwltb2R1bGUtaW5pdC10b29scyB3aGljaCBjYW4ndCBoYW5kbGUgaGlkIGJ1cywgY2hvb3NlIFkgaGVyZS4gT3RoZXJ3aXNlCisJc2F5IE4uIElmIHlvdSBzYXkgTiBhbmQgeW91ciB1c2Vyc3BhY2UgaXMgb2xkIGVub3VnaCwgdGhlIG9ubHkKKwlmdW5jdGlvbmFsaXR5IHlvdSBsb3NlIGlzIG1vZHVsZXMgYXV0b2xvYWRpbmcuCisKKwlJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgSElEX0E0VEVDSAorCXRyaXN0YXRlICJBNCB0ZWNoIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBBNCB0ZWNoIFg1IGFuZCBXT1AtMzUgLyBUcnVzdCA0NTBMIG1pY2UuCisKK2NvbmZpZyBISURfQVBQTEUKKwl0cmlzdGF0ZSAiQXBwbGUiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiAoVVNCX0hJRCB8fCBCVF9ISURQKQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBzb21lIEFwcGxlIGRldmljZXMgd2hpY2ggbGVzcyBvciBtb3JlIGJyZWFrCisJSElEIHNwZWNpZmljYXRpb24uCisKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGtleWJvYXJkcyBvZglBcHBsZSBpQm9va3MsIFBvd2VyQm9va3MsCisJTWFjQm9va3MsIE1hY0Jvb2sgUHJvcyBhbmQgQXBwbGUgQWx1bWludW0uCisKK2NvbmZpZyBISURfQkVMS0lOCisJdHJpc3RhdGUgIkJlbGtpbiIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgQmVsa2luIEZsaXAgS1ZNIGFuZCBXaXJlbGVzcyBrZXlib2FyZC4KKworY29uZmlnIEhJRF9CUklHSFQKKwl0cmlzdGF0ZSAiQnJpZ2h0IiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBCcmlnaHQgQUJOVC0yIGtleWJvYXJkLgorCitjb25maWcgSElEX0NIRVJSWQorCXRyaXN0YXRlICJDaGVycnkiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIENoZXJyeSBDeW1vdGlvbiBrZXlib2FyZC4KKworY29uZmlnIEhJRF9DSElDT05ZCisJdHJpc3RhdGUgIkNoaWNvbnkiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIENoaWNvbnkgVGFjdGljYWwgcGFkLgorCitjb25maWcgSElEX0NZUFJFU1MKKwl0cmlzdGF0ZSAiQ3lwcmVzcyIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgY3lwcmVzcyBtb3VzZSBhbmQgYmFyY29kZSByZWFkZXJzLgorCitjb25maWcgSElEX0RFTEwKKwl0cmlzdGF0ZSAiRGVsbCIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgcXVpcmt5IERlbGwgSElEIGhhcmR3YXJlIHRoYXQgcmVxdWlyZQorCXNwZWNpYWwgTEVEIGhhbmRsaW5nIChXNzY1OCBhbmQgU0s4MTE1IG1vZGVscykKKworY29uZmlnIEhJRF9FWktFWQorCXRyaXN0YXRlICJFemtleSIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgRXprZXkgQlRDIDgxOTMga2V5Ym9hcmQuCisKK2NvbmZpZyBISURfR1lSQVRJT04KKwl0cmlzdGF0ZSAiR3lyYXRpb24iIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIEd5cmF0aW9uIHJlbW90ZSBjb250cm9sLgorCitjb25maWcgSElEX0xPR0lURUNICisJdHJpc3RhdGUgIkxvZ2l0ZWNoIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBMb2dpdGVjaCBkZXZpY2VzIHRoYXQgYXJlIG5vdCBmdWxseSBjb21wbGlhbnQgd2l0aCBISUQgc3RhbmRhcmQuCisKK2NvbmZpZyBMT0dJVEVDSF9GRgorCWJvb2wgIkxvZ2l0ZWNoIGZvcmNlIGZlZWRiYWNrIgorCWRlcGVuZHMgb24gSElEX0xPR0lURUNICisJc2VsZWN0IElOUFVUX0ZGX01FTUxFU1MKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBkZXZpY2VzOgorCSAgLSBMb2dpdGVjaCBXaW5nTWFuIENvcmRsZXNzIFJ1bWJsZVBhZAorCSAgLSBMb2dpdGVjaCBXaW5nTWFuIENvcmRsZXNzIFJ1bWJsZVBhZCAyCisJICAtIExvZ2l0ZWNoIFdpbmdNYW4gRm9yY2UgM0QKKwkgIC0gTG9naXRlY2ggRm9ybXVsYSBGb3JjZSBFWAorCSAgLSBMb2dpdGVjaCBNT01PIEZvcmNlIHdoZWVsCisKKwkgIGFuZCBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgZm9yIHRoZW0uCisJICBOb3RlOiBpZiB5b3Ugc2F5IE4gaGVyZSwgdGhpcyBkZXZpY2Ugd2lsbCBzdGlsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB3aXRob3V0CisJICBmb3JjZSBmZWVkYmFjay4KKworY29uZmlnIExPR0lSVU1CTEVQQUQyX0ZGCisJYm9vbCAiTG9naXRlY2ggUnVtYmxlcGFkIDIgZm9yY2UgZmVlZGJhY2siCisJZGVwZW5kcyBvbiBISURfTE9HSVRFQ0gKKwlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUworCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIExvZ2l0ZWNoCisJICBSdW1ibGVwYWQgMiBkZXZpY2VzLgorCitjb25maWcgSElEX01JQ1JPU09GVAorCXRyaXN0YXRlICJNaWNyb3NvZnQiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIE1pY3Jvc29mdCBkZXZpY2VzIHRoYXQgYXJlIG5vdCBmdWxseSBjb21wbGlhbnQgd2l0aCBISUQgc3RhbmRhcmQuCisKK2NvbmZpZyBISURfTU9OVEVSRVkKKwl0cmlzdGF0ZSAiTW9udGVyZXkiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIE1vbnRlcmV5IEdlbml1cyBLQjI5RS4KKworY29uZmlnIEhJRF9QQU5USEVSTE9SRAorCXRyaXN0YXRlICJQYW50aGVybG9yZCBkZXZpY2VzIHN1cHBvcnQiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIFBhbnRoZXJMb3JkL0dyZWVuQXNpYSBiYXNlZCBkZXZpY2Ugc3VwcG9ydC4KKworY29uZmlnIFBBTlRIRVJMT1JEX0ZGCisJYm9vbCAiUGFudGhlcmxvcmQgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhJRF9QQU5USEVSTE9SRAorCXNlbGVjdCBJTlBVVF9GRl9NRU1MRVNTCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFBhbnRoZXJMb3JkL0dyZWVuQXNpYSBiYXNlZCBnYW1lIGNvbnRyb2xsZXIKKwkgIG9yIGFkYXB0ZXIgYW5kIHdhbnQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGl0LgorCitjb25maWcgSElEX1BFVEFMWU5YCisJdHJpc3RhdGUgIlBldGFseW54IiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBQZXRhbHlueCBNYXh0ZXIgcmVtb3RlIGNvbnRyb2wuCisKK2NvbmZpZyBISURfU0FNU1VORworCXRyaXN0YXRlICJTYW1zdW5nIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBTYW1zdW5nIEluZnJhUmVkIHJlbW90ZSBjb250cm9sLgorCitjb25maWcgSElEX1NPTlkKKwl0cmlzdGF0ZSAiU29ueSIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgU29ueSBQUzMgY29udHJvbGxlci4KKworY29uZmlnIEhJRF9TVU5QTFVTCisJdHJpc3RhdGUgIlN1bnBsdXMiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIFN1bnBsdXMgd2lyZWxlc3MgZGVza3RvcC4KKworY29uZmlnIFRIUlVTVE1BU1RFUl9GRgorCXRyaXN0YXRlICJUaHJ1c3RNYXN0ZXIgZGV2aWNlcyBzdXBwb3J0IgorCWRlZmF1bHQgbQorCWRlcGVuZHMgb24gVVNCX0hJRAorCXNlbGVjdCBJTlBVVF9GRl9NRU1MRVNTCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFRIUlVTVE1BU1RFUiBGaXJlU3RvcmUgRHVhbCBQb3dlciAyIG9yCisJICBhIFRIUlVTVE1BU1RFUiBGZXJyYXJpIEdUIFJ1bWJsZSBGb3JjZSBvciBGb3JjZSBGZWVkYmFjayBXaGVlbC4KKworY29uZmlnIFpFUk9QTFVTX0ZGCisJdHJpc3RhdGUgIlplcm9wbHVzIGJhc2VkIGdhbWUgY29udHJvbGxlciBzdXBwb3J0IgorCWRlZmF1bHQgbQorCWRlcGVuZHMgb24gVVNCX0hJRAorCXNlbGVjdCBJTlBVVF9GRl9NRU1MRVNTCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFplcm9wbHVzIGJhc2VkIGdhbWUgY29udHJvbGxlci4KKworZW5kbWVudQorCiBlbmRpZiAjIEhJRF9TVVBQT1JUCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9NYWtlZmlsZSBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCmluZGV4IDI3NWRjNTIuLmIwOWU0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCkBAIC0xLDEzICsxLDQ2IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgSElEIGRyaXZlcgogIwotaGlkLW9ianMJCQk6PSBoaWQtY29yZS5vIGhpZC1pbnB1dC5vIGhpZC1pbnB1dC1xdWlya3MubworaGlkLW9ianMJCQk6PSBoaWQtY29yZS5vIGhpZC1pbnB1dC5vCiAKIG9iai0kKENPTkZJR19ISUQpCQkrPSBoaWQubwogCiBoaWQtJChDT05GSUdfSElEX0RFQlVHKQkJKz0gaGlkLWRlYnVnLm8KIGhpZC0kKENPTkZJR19ISURSQVcpCQkrPSBoaWRyYXcubwogCitpZmRlZiBDT05GSUdfSElEX0NPTVBBVAorb2JqLW0JCQkJKz0gaGlkLWR1bW15Lm8KK2VuZGlmCisKK2hpZC1sb2dpdGVjaC1vYmpzCQk6PSBoaWQtbGcubworaWZkZWYgQ09ORklHX0xPR0lURUNIX0ZGCisJaGlkLWxvZ2l0ZWNoLW9ianMJKz0gaGlkLWxnZmYubworZW5kaWYKK2lmZGVmIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRgorCWhpZC1sb2dpdGVjaC1vYmpzCSs9IGhpZC1sZzJmZi5vCitlbmRpZgorCitvYmotJChDT05GSUdfSElEX0E0VEVDSCkJKz0gaGlkLWE0dGVjaC5vCitvYmotJChDT05GSUdfSElEX0FQUExFKQkJKz0gaGlkLWFwcGxlLm8KK29iai0kKENPTkZJR19ISURfQkVMS0lOKQkrPSBoaWQtYmVsa2luLm8KK29iai0kKENPTkZJR19ISURfQlJJR0hUKQkrPSBoaWQtYnJpZ2h0Lm8KK29iai0kKENPTkZJR19ISURfQ0hFUlJZKQkrPSBoaWQtY2hlcnJ5Lm8KK29iai0kKENPTkZJR19ISURfQ0hJQ09OWSkJKz0gaGlkLWNoaWNvbnkubworb2JqLSQoQ09ORklHX0hJRF9DWVBSRVNTKQkrPSBoaWQtY3lwcmVzcy5vCitvYmotJChDT05GSUdfSElEX0RFTEwpCQkrPSBoaWQtZGVsbC5vCitvYmotJChDT05GSUdfSElEX0VaS0VZKQkJKz0gaGlkLWV6a2V5Lm8KK29iai0kKENPTkZJR19ISURfR1lSQVRJT04pCSs9IGhpZC1neXJhdGlvbi5vCitvYmotJChDT05GSUdfSElEX0xPR0lURUNIKQkrPSBoaWQtbG9naXRlY2gubworb2JqLSQoQ09ORklHX0hJRF9NSUNST1NPRlQpCSs9IGhpZC1taWNyb3NvZnQubworb2JqLSQoQ09ORklHX0hJRF9NT05URVJFWSkJKz0gaGlkLW1vbnRlcmV5Lm8KK29iai0kKENPTkZJR19ISURfUEFOVEhFUkxPUkQpCSs9IGhpZC1wbC5vCitvYmotJChDT05GSUdfSElEX1BFVEFMWU5YKQkrPSBoaWQtcGV0YWx5bngubworb2JqLSQoQ09ORklHX0hJRF9TQU1TVU5HKQkrPSBoaWQtc2Ftc3VuZy5vCitvYmotJChDT05GSUdfSElEX1NPTlkpCQkrPSBoaWQtc29ueS5vCitvYmotJChDT05GSUdfSElEX1NVTlBMVVMpCSs9IGhpZC1zdW5wbHVzLm8KK29iai0kKENPTkZJR19USFJVU1RNQVNURVJfRkYpCSs9IGhpZC10bWZmLm8KK29iai0kKENPTkZJR19aRVJPUExVU19GRikJKz0gaGlkLXpwZmYubworCiBvYmotJChDT05GSUdfVVNCX0hJRCkJCSs9IHVzYmhpZC8KIG9iai0kKENPTkZJR19VU0JfTU9VU0UpCQkrPSB1c2JoaWQvCiBvYmotJChDT05GSUdfVVNCX0tCRCkJCSs9IHVzYmhpZC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYyBiL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmNhMDBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLWE0dGVjaC5jCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgYTR0ZWNoICJzcGVjaWFsIiBkZXZpY2VzCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgUGF1bCBXYWxtc2xleQorICogIENvcHlyaWdodCAoYykgMjAwOCBKaXJpIFNsYWJ5CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKyNkZWZpbmUgQTRfMldIRUVMX01PVVNFX0hBQ0tfNwkweDAxCisjZGVmaW5lIEE0XzJXSEVFTF9NT1VTRV9IQUNLX0I4CTB4MDIKKworc3RydWN0IGE0dGVjaF9zYyB7CisJdW5zaWduZWQgbG9uZyBxdWlya3M7CisJdW5zaWduZWQgaW50IGh3X3doZWVsOworCV9fczMyIGRlbGF5ZWRfdmFsdWU7Cit9OworCitzdGF0aWMgaW50IGE0X2lucHV0X21hcHBlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJc3RydWN0IGE0dGVjaF9zYyAqYTQgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfUkVMICYmIHVzYWdlLT5jb2RlID09IFJFTF9XSEVFTCkKKwkJc2V0X2JpdChSRUxfSFdIRUVMLCAqYml0KTsKKworCWlmICgoYTQtPnF1aXJrcyAmIEE0XzJXSEVFTF9NT1VTRV9IQUNLXzcpICYmIHVzYWdlLT5oaWQgPT0gMHgwMDA5MDAwNykKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYTRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJc3RydWN0IGE0dGVjaF9zYyAqYTQgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisKKwlpZiAoIShoZGV2LT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHx8ICFmaWVsZC0+aGlkaW5wdXQgfHwKKwkJCSF1c2FnZS0+dHlwZSkKKwkJcmV0dXJuIDA7CisKKwlpbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7CisKKwlpZiAoYTQtPnF1aXJrcyAmIEE0XzJXSEVFTF9NT1VTRV9IQUNLX0I4KSB7CisJCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9SRUwgJiYgdXNhZ2UtPmNvZGUgPT0gUkVMX1dIRUVMKSB7CisJCQlhNC0+ZGVsYXllZF92YWx1ZSA9IHZhbHVlOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlpZiAodXNhZ2UtPmhpZCA9PSAweDAwMDEwMGI4KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfUkVMLCB2YWx1ZSA/IFJFTF9IV0hFRUwgOgorCQkJCQlSRUxfV0hFRUwsIGE0LT5kZWxheWVkX3ZhbHVlKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJaWYgKChhNC0+cXVpcmtzICYgQTRfMldIRUVMX01PVVNFX0hBQ0tfNykgJiYgdXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA3KSB7CisJCWE0LT5od193aGVlbCA9ICEhdmFsdWU7CisJCXJldHVybiAxOworCX0KKworCWlmICh1c2FnZS0+Y29kZSA9PSBSRUxfV0hFRUwgJiYgYTQtPmh3X3doZWVsKSB7CisJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgUkVMX0hXSEVFTCwgdmFsdWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhNF9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBhNHRlY2hfc2MgKmE0OworCWludCByZXQ7CisKKwlhNCA9IGt6YWxsb2Moc2l6ZW9mKCphNCksIEdGUF9LRVJORUwpOworCWlmIChhNCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIGRldmljZSBkZXNjcmlwdG9yXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlhNC0+cXVpcmtzID0gaWQtPmRyaXZlcl9kYXRhOworCisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIGE0KTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCWtmcmVlKGE0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhNF9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJc3RydWN0IGE0dGVjaF9zYyAqYTQgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwloaWRfaHdfc3RvcChoZGV2KTsKKwlrZnJlZShhNCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBhNF9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0E0VEVDSCwgVVNCX0RFVklDRV9JRF9BNFRFQ0hfV0NQMzJQVSksCisJCS5kcml2ZXJfZGF0YSA9IEE0XzJXSEVFTF9NT1VTRV9IQUNLXzcgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9YNV8wMDVEKSwKKwkJLmRyaXZlcl9kYXRhID0gQTRfMldIRUVMX01PVVNFX0hBQ0tfQjggfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgYTRfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBhNF9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYTR0ZWNoIiwKKwkuaWRfdGFibGUgPSBhNF9kZXZpY2VzLAorCS5pbnB1dF9tYXBwZWQgPSBhNF9pbnB1dF9tYXBwZWQsCisJLmV2ZW50ID0gYTRfZXZlbnQsCisJLnByb2JlID0gYTRfcHJvYmUsCisJLnJlbW92ZSA9IGE0X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgYTRfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZhNF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBhNF9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZhNF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhNF9pbml0KTsKK21vZHVsZV9leGl0KGE0X2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKGE0dGVjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYyBiL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkN2Y4OTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYwpAQCAtMCwwICsxLDQ4NCBAQAorLyoKKyAqICBVU0IgSElEIHF1aXJrcyBzdXBwb3J0IGZvciBMaW51eAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTkgQW5kcmVhcyBHYWwKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorICogIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEhhYm91c3RhayA8bWlrZS1AY2luY2kucnIuY29tPiBmb3IgQ29uY2VwdDIsIEluYworICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA3IFBhdWwgV2FsbXNsZXkKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKyNkZWZpbmUgQVBQTEVfUkRFU0NfSklTCQkweDAwMDEKKyNkZWZpbmUgQVBQTEVfSUdOT1JFX01PVVNFCTB4MDAwMgorI2RlZmluZSBBUFBMRV9IQVNfRk4JCTB4MDAwNAorI2RlZmluZSBBUFBMRV9ISURERVYJCTB4MDAwOAorI2RlZmluZSBBUFBMRV9JU09fS0VZQk9BUkQJMHgwMDEwCisjZGVmaW5lIEFQUExFX01JR0hUWU1PVVNFCTB4MDAyMAorI2RlZmluZSBBUFBMRV9JTlZFUlRfSFdIRUVMCTB4MDA0MAorI2RlZmluZSBBUFBMRV9JR05PUkVfSElESU5QVVQJMHgwMDgwCisjZGVmaW5lIEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OCTB4MDEwMAorCisjZGVmaW5lIEFQUExFX0ZMQUdfRktFWQkJMHgwMQorCitzdGF0aWMgdW5zaWduZWQgaW50IGZubW9kZSA9IDE7Cittb2R1bGVfcGFyYW0oZm5tb2RlLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm5tb2RlLCAiTW9kZSBvZiBmbiBrZXkgb24gQXBwbGUga2V5Ym9hcmRzICgwID0gZGlzYWJsZWQsICIKKwkJIlsxXSA9IGZrZXlzbGFzdCwgMiA9IGZrZXlzZmlyc3QpIik7CisKK3N0cnVjdCBhcHBsZV9zYyB7CisJdW5zaWduZWQgbG9uZyBxdWlya3M7CisJdW5zaWduZWQgaW50IGZuX29uOworCURFQ0xBUkVfQklUTUFQKHByZXNzZWRfZm4sIEtFWV9DTlQpOworCURFQ0xBUkVfQklUTUFQKHByZXNzZWRfbnVtbG9jaywgS0VZX0NOVCk7Cit9OworCitzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIHsKKwl1MTYgZnJvbTsKKwl1MTYgdG87CisJdTggZmxhZ3M7Cit9OworCitzdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiBhcHBsZV9mbl9rZXlzW10gPSB7CisJeyBLRVlfQkFDS1NQQUNFLCBLRVlfREVMRVRFIH0sCisJeyBLRVlfRjEsCUtFWV9CUklHSFRORVNTRE9XTiwgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjIsCUtFWV9CUklHSFRORVNTVVAsICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjMsCUtFWV9GTl9GNSwgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sIC8qIEV4cG9zw6kgKi8KKwl7IEtFWV9GNCwJS0VZX0ZOX0Y0LCAgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwgLyogRGFzaGJvYXJkICovCisJeyBLRVlfRjUsCUtFWV9LQkRJTExVTURPV04sICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjYsCUtFWV9LQkRJTExVTVVQLCAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjcsCUtFWV9QUkVWSU9VU1NPTkcsICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjgsCUtFWV9QTEFZUEFVU0UsICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjksCUtFWV9ORVhUU09ORywgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjEwLAlLRVlfTVVURSwgICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YxMSwJS0VZX1ZPTFVNRURPV04sICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GMTIsCUtFWV9WT0xVTUVVUCwgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfVVAsCUtFWV9QQUdFVVAgfSwKKwl7IEtFWV9ET1dOLAlLRVlfUEFHRURPV04gfSwKKwl7IEtFWV9MRUZULAlLRVlfSE9NRSB9LAorCXsgS0VZX1JJR0hULAlLRVlfRU5EIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiBwb3dlcmJvb2tfZm5fa2V5c1tdID0geworCXsgS0VZX0JBQ0tTUEFDRSwgS0VZX0RFTEVURSB9LAorCXsgS0VZX0YxLAlLRVlfQlJJR0hUTkVTU0RPV04sICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GMiwJS0VZX0JSSUdIVE5FU1NVUCwgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjMsCUtFWV9NVVRFLCAgICAgICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0Y0LAlLRVlfVk9MVU1FRE9XTiwgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GNSwJS0VZX1ZPTFVNRVVQLCAgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjYsCUtFWV9OVU1MT0NLLCAgICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0Y3LAlLRVlfU1dJVENIVklERU9NT0RFLCAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GOCwJS0VZX0tCRElMTFVNVE9HR0xFLCAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjksCUtFWV9LQkRJTExVTURPV04sICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YxMCwJS0VZX0tCRElMTFVNVVAsICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfVVAsCUtFWV9QQUdFVVAgfSwKKwl7IEtFWV9ET1dOLAlLRVlfUEFHRURPV04gfSwKKwl7IEtFWV9MRUZULAlLRVlfSE9NRSB9LAorCXsgS0VZX1JJR0hULAlLRVlfRU5EIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiBwb3dlcmJvb2tfbnVtbG9ja19rZXlzW10gPSB7CisJeyBLRVlfSiwJS0VZX0tQMSB9LAorCXsgS0VZX0ssCUtFWV9LUDIgfSwKKwl7IEtFWV9MLAlLRVlfS1AzIH0sCisJeyBLRVlfVSwJS0VZX0tQNCB9LAorCXsgS0VZX0ksCUtFWV9LUDUgfSwKKwl7IEtFWV9PLAlLRVlfS1A2IH0sCisJeyBLRVlfNywJS0VZX0tQNyB9LAorCXsgS0VZXzgsCUtFWV9LUDggfSwKKwl7IEtFWV85LAlLRVlfS1A5IH0sCisJeyBLRVlfTSwJS0VZX0tQMCB9LAorCXsgS0VZX0RPVCwJS0VZX0tQRE9UIH0sCisJeyBLRVlfU0xBU0gsCUtFWV9LUFBMVVMgfSwKKwl7IEtFWV9TRU1JQ09MT04sIEtFWV9LUE1JTlVTIH0sCisJeyBLRVlfUCwJS0VZX0tQQVNURVJJU0sgfSwKKwl7IEtFWV9NSU5VUywJS0VZX0tQRVFVQUwgfSwKKwl7IEtFWV8wLAlLRVlfS1BTTEFTSCB9LAorCXsgS0VZX0Y2LAlLRVlfTlVNTE9DSyB9LAorCXsgS0VZX0tQRU5URVIsCUtFWV9LUEVOVEVSIH0sCisJeyBLRVlfQkFDS1NQQUNFLCBLRVlfQkFDS1NQQUNFIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiBhcHBsZV9pc29fa2V5Ym9hcmRbXSA9IHsKKwl7IEtFWV9HUkFWRSwJS0VZXzEwMk5EIH0sCisJeyBLRVlfMTAyTkQsCUtFWV9HUkFWRSB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKmFwcGxlX2ZpbmRfdHJhbnNsYXRpb24oCisJCXN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKnRhYmxlLCB1MTYgZnJvbSkKK3sKKwlzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uICp0cmFuczsKKworCS8qIExvb2sgZm9yIHRoZSB0cmFuc2xhdGlvbiAqLworCWZvciAodHJhbnMgPSB0YWJsZTsgdHJhbnMtPmZyb207IHRyYW5zKyspCisJCWlmICh0cmFucy0+ZnJvbSA9PSBmcm9tKQorCQkJcmV0dXJuIHRyYW5zOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgaGlkaW5wdXRfYXBwbGVfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgYXBwbGVfc2MgKmFzYyA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOworCXN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOworCisJaWYgKHVzYWdlLT5jb2RlID09IEtFWV9GTikgeworCQlhc2MtPmZuX29uID0gISF2YWx1ZTsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSwgdmFsdWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoZm5tb2RlKSB7CisJCWludCBkb190cmFuc2xhdGU7CisKKwkJdHJhbnMgPSBhcHBsZV9maW5kX3RyYW5zbGF0aW9uKChoaWQtPnByb2R1Y3QgPCAweDIyMCB8fAorCQkJCQloaWQtPnByb2R1Y3QgPj0gMHgzMDApID8KKwkJCQkJcG93ZXJib29rX2ZuX2tleXMgOiBhcHBsZV9mbl9rZXlzLAorCQkJCQl1c2FnZS0+Y29kZSk7CisJCWlmICh0cmFucykgeworCQkJaWYgKHRlc3RfYml0KHVzYWdlLT5jb2RlLCBhc2MtPnByZXNzZWRfZm4pKQorCQkJCWRvX3RyYW5zbGF0ZSA9IDE7CisJCQllbHNlIGlmICh0cmFucy0+ZmxhZ3MgJiBBUFBMRV9GTEFHX0ZLRVkpCisJCQkJZG9fdHJhbnNsYXRlID0gKGZubW9kZSA9PSAyICYmIGFzYy0+Zm5fb24pIHx8CisJCQkJCShmbm1vZGUgPT0gMSAmJiAhYXNjLT5mbl9vbik7CisJCQllbHNlCisJCQkJZG9fdHJhbnNsYXRlID0gYXNjLT5mbl9vbjsKKworCQkJaWYgKGRvX3RyYW5zbGF0ZSkgeworCQkJCWlmICh2YWx1ZSkKKwkJCQkJc2V0X2JpdCh1c2FnZS0+Y29kZSwgYXNjLT5wcmVzc2VkX2ZuKTsKKwkJCQllbHNlCisJCQkJCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwgYXNjLT5wcmVzc2VkX2ZuKTsKKworCQkJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdHJhbnMtPnRvLAorCQkJCQkJdmFsdWUpOworCisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKworCQlpZiAoYXNjLT5xdWlya3MgJiBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiAmJgorCQkJCSh0ZXN0X2JpdCh1c2FnZS0+Y29kZSwgYXNjLT5wcmVzc2VkX251bWxvY2spIHx8CisJCQkJdGVzdF9iaXQoTEVEX05VTUwsIGlucHV0LT5sZWQpKSkgeworCQkJdHJhbnMgPSBhcHBsZV9maW5kX3RyYW5zbGF0aW9uKHBvd2VyYm9va19udW1sb2NrX2tleXMsCisJCQkJCXVzYWdlLT5jb2RlKTsKKworCQkJaWYgKHRyYW5zKSB7CisJCQkJaWYgKHZhbHVlKQorCQkJCQlzZXRfYml0KHVzYWdlLT5jb2RlLAorCQkJCQkJCWFzYy0+cHJlc3NlZF9udW1sb2NrKTsKKwkJCQllbHNlCisJCQkJCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwKKwkJCQkJCQlhc2MtPnByZXNzZWRfbnVtbG9jayk7CisKKwkJCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIHRyYW5zLT50bywKKwkJCQkJCXZhbHVlKTsKKwkJCX0KKworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlpZiAoYXNjLT5xdWlya3MgJiBBUFBMRV9JU09fS0VZQk9BUkQpIHsKKwkJdHJhbnMgPSBhcHBsZV9maW5kX3RyYW5zbGF0aW9uKGFwcGxlX2lzb19rZXlib2FyZCwgdXNhZ2UtPmNvZGUpOworCQlpZiAodHJhbnMpIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdHJhbnMtPnRvLCB2YWx1ZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwcGxlX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCXN0cnVjdCBhcHBsZV9zYyAqYXNjID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCisJaWYgKCEoaGRldi0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB8fCAhZmllbGQtPmhpZGlucHV0IHx8CisJCQkhdXNhZ2UtPnR5cGUpCisJCXJldHVybiAwOworCisJaWYgKChhc2MtPnF1aXJrcyAmIEFQUExFX0lOVkVSVF9IV0hFRUwpICYmCisJCQl1c2FnZS0+Y29kZSA9PSBSRUxfSFdIRUVMKSB7CisJCWlucHV0X2V2ZW50KGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQsIHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSwKKwkJCQktdmFsdWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoKGFzYy0+cXVpcmtzICYgQVBQTEVfSEFTX0ZOKSAmJgorCQkJaGlkaW5wdXRfYXBwbGVfZXZlbnQoaGRldiwgZmllbGQtPmhpZGlucHV0LT5pbnB1dCwKKwkJCQl1c2FnZSwgdmFsdWUpKQorCQlyZXR1cm4gMTsKKworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNYWNCb29rIEpJUyBrZXlib2FyZCBoYXMgd3JvbmcgbG9naWNhbCBtYXhpbXVtCisgKi8KK3N0YXRpYyB2b2lkIGFwcGxlX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwlzdHJ1Y3QgYXBwbGVfc2MgKmFzYyA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmICgoYXNjLT5xdWlya3MgJiBBUFBMRV9SREVTQ19KSVMpICYmIHJzaXplID49IDYwICYmCisJCQlyZGVzY1s1M10gPT0gMHg2NSAmJiByZGVzY1s1OV0gPT0gMHg2NSkgeworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiZml4aW5nIHVwIE1hY0Jvb2sgSklTIGtleWJvYXJkIHJlcG9ydCAiCisJCQkJImRlc2NyaXB0b3JcbiIpOworCQlyZGVzY1s1M10gPSByZGVzY1s1OV0gPSAweGU3OworCX0KK30KKworc3RhdGljIHZvaWQgYXBwbGVfc2V0dXBfaW5wdXQoc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqdHJhbnM7CisKKwlzZXRfYml0KEtFWV9OVU1MT0NLLCBpbnB1dC0+a2V5Yml0KTsKKworCS8qIEVuYWJsZSBhbGwgbmVlZGVkIGtleXMgKi8KKwlmb3IgKHRyYW5zID0gYXBwbGVfZm5fa2V5czsgdHJhbnMtPmZyb207IHRyYW5zKyspCisJCXNldF9iaXQodHJhbnMtPnRvLCBpbnB1dC0+a2V5Yml0KTsKKworCWZvciAodHJhbnMgPSBwb3dlcmJvb2tfZm5fa2V5czsgdHJhbnMtPmZyb207IHRyYW5zKyspCisJCXNldF9iaXQodHJhbnMtPnRvLCBpbnB1dC0+a2V5Yml0KTsKKworCWZvciAodHJhbnMgPSBwb3dlcmJvb2tfbnVtbG9ja19rZXlzOyB0cmFucy0+ZnJvbTsgdHJhbnMrKykKKwkJc2V0X2JpdCh0cmFucy0+dG8sIGlucHV0LT5rZXliaXQpOworCisJZm9yICh0cmFucyA9IGFwcGxlX2lzb19rZXlib2FyZDsgdHJhbnMtPmZyb207IHRyYW5zKyspCisJCXNldF9iaXQodHJhbnMtPnRvLCBpbnB1dC0+a2V5Yml0KTsKK30KKworc3RhdGljIGludCBhcHBsZV9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAodXNhZ2UtPmhpZCA9PSAoSElEX1VQX0NVU1RPTSB8IDB4MDAwMykpIHsKKwkJLyogVGhlIGZuIGtleSBvbiBBcHBsZSBVU0Iga2V5Ym9hcmRzICovCisJCXNldF9iaXQoRVZfUkVQLCBoaS0+aW5wdXQtPmV2Yml0KTsKKwkJaGlkX21hcF91c2FnZV9jbGVhcihoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIEtFWV9GTik7CisJCWFwcGxlX3NldHVwX2lucHV0KGhpLT5pbnB1dCk7CisJCXJldHVybiAxOworCX0KKworCS8qIHdlIHdhbnQgdGhlIGhpZCBsYXllciB0byBnbyB0aHJvdWdoIHN0YW5kYXJkIHBhdGggKHNldCBhbmQgaWdub3JlKSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwcGxlX2lucHV0X21hcHBlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJc3RydWN0IGFwcGxlX3NjICphc2MgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAoYXNjLT5xdWlya3MgJiBBUFBMRV9NSUdIVFlNT1VTRSkgeworCQlpZiAodXNhZ2UtPmhpZCA9PSBISURfR0RfWikKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfUkVMLCBSRUxfSFdIRUVMKTsKKwkJZWxzZSBpZiAodXNhZ2UtPmNvZGUgPT0gQlROXzEpCisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsIEVWX0tFWSwgQlROXzIpOworCQllbHNlIGlmICh1c2FnZS0+Y29kZSA9PSBCVE5fMikKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCBCVE5fMSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwbGVfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCWNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9IGlkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgYXBwbGVfc2MgKmFzYzsKKwl1bnNpZ25lZCBpbnQgY29ubmVjdF9tYXNrID0gSElEX0NPTk5FQ1RfREVGQVVMVDsKKwlpbnQgcmV0OworCisJLyogcmV0dXJuIHNvbWV0aGluZyBlbHNlIG9yIG1vdmUgdG8gaGlkIGxheWVyPyBkZXZpY2Ugd2lsbCByZXNpZGUKKwkgICBhbGxvY2F0ZWQgKi8KKwlpZiAoaWQtPmJ1cyA9PSBCVVNfVVNCICYmIChxdWlya3MgJiBBUFBMRV9JR05PUkVfTU9VU0UpICYmCisJCQl0b191c2JfaW50ZXJmYWNlKGhkZXYtPmRldi5wYXJlbnQpLT5jdXJfYWx0c2V0dGluZy0+CisJCQlkZXNjLmJJbnRlcmZhY2VQcm90b2NvbCA9PSBVU0JfSU5URVJGQUNFX1BST1RPQ09MX01PVVNFKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWFzYyA9IGt6YWxsb2Moc2l6ZW9mKCphc2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYXNjID09IE5VTEwpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2MgYXBwbGUgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWFzYy0+cXVpcmtzID0gcXVpcmtzOworCisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIGFzYyk7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWlmIChxdWlya3MgJiBBUFBMRV9ISURERVYpCisJCWNvbm5lY3RfbWFzayB8PSBISURfQ09OTkVDVF9ISURERVZfRk9SQ0U7CisJaWYgKHF1aXJrcyAmIEFQUExFX0lHTk9SRV9ISURJTlBVVCkKKwkJY29ubmVjdF9tYXNrICY9IH5ISURfQ09OTkVDVF9ISURJTlBVVDsKKworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBjb25uZWN0X21hc2spOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCWtmcmVlKGFzYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXBwbGVfcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWhpZF9od19zdG9wKGhkZXYpOworCWtmcmVlKGhpZF9nZXRfZHJ2ZGF0YShoZGV2KSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBhcHBsZV9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FUVl9JUkNPTlRST0wpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9ISURERVYgfCBBUFBMRV9JR05PUkVfSElESU5QVVQgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfSVJDT05UUk9MNCksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hJRERFViB8IEFQUExFX0lHTk9SRV9ISURJTlBVVCB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9NSUdIVFlNT1VTRSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX01JR0hUWU1PVVNFIHwgQVBQTEVfSU5WRVJUX0hXSEVFTCB9LAorCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0ZPVU5UQUlOX0FOU0kpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CisJCQlBUFBMRV9JR05PUkVfTU9VU0UgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fSVNPKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBBUFBMRV9IQVNfRk4gfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUl9BTlNJKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBBUFBMRV9IQVNfRk4gfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUl9JU08pLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CisJCQlBUFBMRV9JR05PUkVfTU9VU0UgfCBBUFBMRV9JU09fS0VZQk9BUkQgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSX0pJUyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIHwKKwkJCUFQUExFX0lHTk9SRV9NT1VTRSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0FOU0kpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CisJCQlBUFBMRV9JR05PUkVfTU9VU0UgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSM19JU08pLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CisJCQlBUFBMRV9JR05PUkVfTU9VU0UgfCBBUFBMRV9JU09fS0VZQk9BUkQgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSM19KSVMpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CisJCQlBUFBMRV9JR05PUkVfTU9VU0UgfCBBUFBMRV9SREVTQ19KSVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9BTlNJKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBBUFBMRV9IQVNfRk4gfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSVNPKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBBUFBMRV9IQVNfRk4gfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIHwgQVBQTEVfSVNPX0tFWUJPQVJEIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSklTKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBBUFBMRV9IQVNfRk4gfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIHwgQVBQTEVfUkRFU0NfSklTfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0FOU0kpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0lTTyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB8IEFQUExFX0lTT19LRVlCT0FSRCB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSklTKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfSEFTX0ZOIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfQU5TSSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIHwKKwkJCUFQUExFX0lHTk9SRV9NT1VTRSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0lTTyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIHwKKwkJCUFQUExFX0lHTk9SRV9NT1VTRSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0pJUyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIHwKKwkJCUFQUExFX0lHTk9SRV9NT1VTRSB8IEFQUExFX1JERVNDX0pJUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfQU5TSSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19JU08pLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CisJCQlBUFBMRV9JU09fS0VZQk9BUkQgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTX0pJUyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfQU5TSSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB8IEFQUExFX0lHTk9SRV9NT1VTRSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0lTTyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB8IEFQUExFX0lTT19LRVlCT0FSRCB8CisJCQlBUFBMRV9JR05PUkVfTU9VU0UgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklOR19KSVMpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfCBBUFBMRV9JR05PUkVfTU9VU0UgfCBBUFBMRV9SREVTQ19KSVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzJfQU5TSSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB8IEFQUExFX0lHTk9SRV9NT1VTRSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9JU08pLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfCBBUFBMRV9JU09fS0VZQk9BUkQgfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkcyX0pJUyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB8IEFQUExFX0lHTk9SRV9NT1VTRSB8IEFQUExFX1JERVNDX0pJUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9UUF9PTkxZKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBBUFBMRV9IQVNfRk4gfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjFfVFBfT05MWSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIHwKKwkJCUFQUExFX0lHTk9SRV9NT1VTRSB9LAorCisJLyogQXBwbGUgd2lyZWxlc3MgTWlnaHR5IE1vdXNlICovCisJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCAweDAzMGMpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9NSUdIVFlNT1VTRSB8IEFQUExFX0lOVkVSVF9IV0hFRUwgfSwKKworCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBhcHBsZV9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGFwcGxlX2RyaXZlciA9IHsKKwkubmFtZSA9ICJhcHBsZSIsCisJLmlkX3RhYmxlID0gYXBwbGVfZGV2aWNlcywKKwkucmVwb3J0X2ZpeHVwID0gYXBwbGVfcmVwb3J0X2ZpeHVwLAorCS5wcm9iZSA9IGFwcGxlX3Byb2JlLAorCS5yZW1vdmUgPSBhcHBsZV9yZW1vdmUsCisJLmV2ZW50ID0gYXBwbGVfZXZlbnQsCisJLmlucHV0X21hcHBpbmcgPSBhcHBsZV9pbnB1dF9tYXBwaW5nLAorCS5pbnB1dF9tYXBwZWQgPSBhcHBsZV9pbnB1dF9tYXBwZWQsCit9OworCitzdGF0aWMgaW50IGFwcGxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaGlkX3JlZ2lzdGVyX2RyaXZlcigmYXBwbGVfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgImNhbid0IHJlZ2lzdGVyIGFwcGxlIGRyaXZlclxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhcHBsZV9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZhcHBsZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhcHBsZV9pbml0KTsKK21vZHVsZV9leGl0KGFwcGxlX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKGFwcGxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYyBiL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmM4YTliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLWJlbGtpbi5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgYmVsa2luICJzcGVjaWFsIiBkZXZpY2VzCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgUGF1bCBXYWxtc2xleQorICogIENvcHlyaWdodCAoYykgMjAwOCBKaXJpIFNsYWJ5CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCisjZGVmaW5lIEJFTEtJTl9ISURERVYJMHgwMQorI2RlZmluZSBCRUxLSU5fV0tCRAkweDAyCisKKyNkZWZpbmUgYmVsa2luX21hcF9rZXlfY2xlYXIoYykJaGlkX21hcF91c2FnZV9jbGVhcihoaSwgdXNhZ2UsIGJpdCwgbWF4LCBcCisJCQkJCUVWX0tFWSwgKGMpKQorc3RhdGljIGludCBiZWxraW5faW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJdW5zaWduZWQgbG9uZyBxdWlya3MgPSAodW5zaWduZWQgbG9uZyloaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSIHx8CisJCQkhKHF1aXJrcyAmIEJFTEtJTl9XS0JEKSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwljYXNlIDB4MDNhOiBiZWxraW5fbWFwX2tleV9jbGVhcihLRVlfU09VTkQpOwkJYnJlYWs7CisJY2FzZSAweDAzYjogYmVsa2luX21hcF9rZXlfY2xlYXIoS0VZX0NBTUVSQSk7CQlicmVhazsKKwljYXNlIDB4MDNjOiBiZWxraW5fbWFwX2tleV9jbGVhcihLRVlfRE9DVU1FTlRTKTsJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGJlbGtpbl9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCXVuc2lnbmVkIGxvbmcgcXVpcmtzID0gaWQtPmRyaXZlcl9kYXRhOworCWludCByZXQ7CisKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgKHZvaWQgKilxdWlya3MpOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCB8CisJCSgocXVpcmtzICYgQkVMS0lOX0hJRERFVikgPyBISURfQ09OTkVDVF9ISURERVZfRk9SQ0UgOiAwKSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXJldHVybiAwOworZXJyX2ZyZWU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGJlbGtpbl9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JFTEtJTiwgVVNCX0RFVklDRV9JRF9GTElQX0tWTSksCisJCS5kcml2ZXJfZGF0YSA9IEJFTEtJTl9ISURERVYgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEFCVEVDLCBVU0JfREVWSUNFX0lEX0xBQlRFQ19XSVJFTEVTU19LRVlCT0FSRCksCisJCS5kcml2ZXJfZGF0YSA9IEJFTEtJTl9XS0JEIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIGJlbGtpbl9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGJlbGtpbl9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYmVsa2luIiwKKwkuaWRfdGFibGUgPSBiZWxraW5fZGV2aWNlcywKKwkuaW5wdXRfbWFwcGluZyA9IGJlbGtpbl9pbnB1dF9tYXBwaW5nLAorCS5wcm9iZSA9IGJlbGtpbl9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgYmVsa2luX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmYmVsa2luX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGJlbGtpbl9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZiZWxraW5fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYmVsa2luX2luaXQpOworbW9kdWxlX2V4aXQoYmVsa2luX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKGJlbGtpbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtYnJpZ2h0LmMgYi9kcml2ZXJzL2hpZC9oaWQtYnJpZ2h0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg1MTdhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1icmlnaHQuYwpAQCAtMCwwICsxLDcxIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgYnJpZ2h0ICJzcGVjaWFsIiBkZXZpY2VzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOCBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBCYXNlZCBvbiBoaWQtZGVsbCBkcml2ZXIKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0YXRpYyBpbnQgYnJpZ2h0X3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwl1c2JoaWRfc2V0X2xlZHMoaGRldik7CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBicmlnaHRfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CUklHSFQsIFVTQl9ERVZJQ0VfSURfQlJJR0hUX0FCTlQyKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBicmlnaHRfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBicmlnaHRfZHJpdmVyID0geworCS5uYW1lID0gImJyaWdodCIsCisJLmlkX3RhYmxlID0gYnJpZ2h0X2RldmljZXMsCisJLnByb2JlID0gYnJpZ2h0X3Byb2JlLAorfTsKKworc3RhdGljIGludCBicmlnaHRfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZicmlnaHRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgYnJpZ2h0X2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmJyaWdodF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChicmlnaHRfaW5pdCk7Cittb2R1bGVfZXhpdChicmlnaHRfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoYnJpZ2h0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jaGVycnkuYyBiL2RyaXZlcnMvaGlkL2hpZC1jaGVycnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODMzYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3Igc29tZSBjaGVycnkgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKy8qCisgKiBDaGVycnkgQ3ltb3Rpb24ga2V5Ym9hcmQgaGF2ZSBhbiBpbnZhbGlkIEhJRCByZXBvcnQgZGVzY3JpcHRvciwKKyAqIHRoYXQgbmVlZHMgZml4aW5nIGJlZm9yZSB3ZSBjYW4gcGFyc2UgaXQuCisgKi8KK3N0YXRpYyB2b2lkIGNoX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwlpZiAocnNpemUgPj0gMTcgJiYgcmRlc2NbMTFdID09IDB4M2MgJiYgcmRlc2NbMTJdID09IDB4MDIpIHsKKwkJZGV2X2luZm8oJmhkZXYtPmRldiwgImZpeGluZyB1cCBDaGVycnkgQ3ltb3Rpb24gcmVwb3J0ICIKKwkJCQkiZGVzY3JpcHRvclxuIik7CisJCXJkZXNjWzExXSA9IHJkZXNjWzE2XSA9IDB4ZmY7CisJCXJkZXNjWzEyXSA9IHJkZXNjWzE3XSA9IDB4MDM7CisJfQorfQorCisjZGVmaW5lIGNoX21hcF9rZXlfY2xlYXIoYykJaGlkX21hcF91c2FnZV9jbGVhcihoaSwgdXNhZ2UsIGJpdCwgbWF4LCBcCisJCQkJCUVWX0tFWSwgKGMpKQorc3RhdGljIGludCBjaF9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCWNhc2UgMHgzMDE6IGNoX21hcF9rZXlfY2xlYXIoS0VZX1BST0cxKTsJYnJlYWs7CisJY2FzZSAweDMwMjogY2hfbWFwX2tleV9jbGVhcihLRVlfUFJPRzIpOwlicmVhazsKKwljYXNlIDB4MzAzOiBjaF9tYXBfa2V5X2NsZWFyKEtFWV9QUk9HMyk7CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgY2hfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSEVSUlksIFVTQl9ERVZJQ0VfSURfQ0hFUlJZX0NZTU9USU9OKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBjaF9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGNoX2RyaXZlciA9IHsKKwkubmFtZSA9ICJjaGVycnkiLAorCS5pZF90YWJsZSA9IGNoX2RldmljZXMsCisJLnJlcG9ydF9maXh1cCA9IGNoX3JlcG9ydF9maXh1cCwKKwkuaW5wdXRfbWFwcGluZyA9IGNoX2lucHV0X21hcHBpbmcsCit9OworCitzdGF0aWMgaW50IGNoX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmY2hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgY2hfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmY2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY2hfaW5pdCk7Cittb2R1bGVfZXhpdChjaF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworSElEX0NPTVBBVF9MT0FEX0RSSVZFUihjaGVycnkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNoaWNvbnkuYyBiL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU0ZDQwOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBzb21lIGNoaWNvbnkgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworI2RlZmluZSBjaF9tYXBfa2V5X2NsZWFyKGMpCWhpZF9tYXBfdXNhZ2VfY2xlYXIoaGksIHVzYWdlLCBiaXQsIG1heCwgXAorCQkJCQlFVl9LRVksIChjKSkKK3N0YXRpYyBpbnQgY2hfaW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9NU1ZFTkRPUikKKwkJcmV0dXJuIDA7CisKKwlzZXRfYml0KEVWX1JFUCwgaGktPmlucHV0LT5ldmJpdCk7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJY2FzZSAweGZmMDE6IGNoX21hcF9rZXlfY2xlYXIoQlROXzEpOwlicmVhazsKKwljYXNlIDB4ZmYwMjogY2hfbWFwX2tleV9jbGVhcihCVE5fMik7CWJyZWFrOworCWNhc2UgMHhmZjAzOiBjaF9tYXBfa2V5X2NsZWFyKEJUTl8zKTsJYnJlYWs7CisJY2FzZSAweGZmMDQ6IGNoX21hcF9rZXlfY2xlYXIoQlROXzQpOwlicmVhazsKKwljYXNlIDB4ZmYwNTogY2hfbWFwX2tleV9jbGVhcihCVE5fNSk7CWJyZWFrOworCWNhc2UgMHhmZjA2OiBjaF9tYXBfa2V5X2NsZWFyKEJUTl82KTsJYnJlYWs7CisJY2FzZSAweGZmMDc6IGNoX21hcF9rZXlfY2xlYXIoQlROXzcpOwlicmVhazsKKwljYXNlIDB4ZmYwODogY2hfbWFwX2tleV9jbGVhcihCVE5fOCk7CWJyZWFrOworCWNhc2UgMHhmZjA5OiBjaF9tYXBfa2V5X2NsZWFyKEJUTl85KTsJYnJlYWs7CisJY2FzZSAweGZmMGE6IGNoX21hcF9rZXlfY2xlYXIoQlROX0EpOwlicmVhazsKKwljYXNlIDB4ZmYwYjogY2hfbWFwX2tleV9jbGVhcihCVE5fQik7CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGNoX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0hJQ09OWSwgVVNCX0RFVklDRV9JRF9DSElDT05ZX1RBQ1RJQ0FMX1BBRCkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgY2hfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBjaF9kcml2ZXIgPSB7CisJLm5hbWUgPSAiY2hpY29ueSIsCisJLmlkX3RhYmxlID0gY2hfZGV2aWNlcywKKwkuaW5wdXRfbWFwcGluZyA9IGNoX2lucHV0X21hcHBpbmcsCit9OworCitzdGF0aWMgaW50IGNoX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmY2hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgY2hfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmY2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY2hfaW5pdCk7Cittb2R1bGVfZXhpdChjaF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworSElEX0NPTVBBVF9MT0FEX0RSSVZFUihjaGljb255KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IDQyNmFjNWEuLjcyMWEzNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZC1kZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZHJhdy5oPgogCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCkBAIC0yNjgsOSArMjcwLDkgQEAKIHN0YXRpYyB1MzIgaXRlbV91ZGF0YShzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCiB7CiAJc3dpdGNoIChpdGVtLT5zaXplKSB7Ci0JCWNhc2UgMTogcmV0dXJuIGl0ZW0tPmRhdGEudTg7Ci0JCWNhc2UgMjogcmV0dXJuIGl0ZW0tPmRhdGEudTE2OwotCQljYXNlIDQ6IHJldHVybiBpdGVtLT5kYXRhLnUzMjsKKwljYXNlIDE6IHJldHVybiBpdGVtLT5kYXRhLnU4OworCWNhc2UgMjogcmV0dXJuIGl0ZW0tPmRhdGEudTE2OworCWNhc2UgNDogcmV0dXJuIGl0ZW0tPmRhdGEudTMyOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI3OCw5ICsyODAsOSBAQAogc3RhdGljIHMzMiBpdGVtX3NkYXRhKHN0cnVjdCBoaWRfaXRlbSAqaXRlbSkKIHsKIAlzd2l0Y2ggKGl0ZW0tPnNpemUpIHsKLQkJY2FzZSAxOiByZXR1cm4gaXRlbS0+ZGF0YS5zODsKLQkJY2FzZSAyOiByZXR1cm4gaXRlbS0+ZGF0YS5zMTY7Ci0JCWNhc2UgNDogcmV0dXJuIGl0ZW0tPmRhdGEuczMyOworCWNhc2UgMTogcmV0dXJuIGl0ZW0tPmRhdGEuczg7CisJY2FzZSAyOiByZXR1cm4gaXRlbS0+ZGF0YS5zMTY7CisJY2FzZSA0OiByZXR1cm4gaXRlbS0+ZGF0YS5zMzI7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjkyLDg3ICsyOTQsOTEgQEAKIHN0YXRpYyBpbnQgaGlkX3BhcnNlcl9nbG9iYWwoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgc3RydWN0IGhpZF9pdGVtICppdGVtKQogewogCXN3aXRjaCAoaXRlbS0+dGFnKSB7CisJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BVU0g6CiAKLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BVU0g6Ci0KLQkJCWlmIChwYXJzZXItPmdsb2JhbF9zdGFja19wdHIgPT0gSElEX0dMT0JBTF9TVEFDS19TSVpFKSB7Ci0JCQkJZGJnX2hpZCgiZ2xvYmFsIGVudmlyb21lbnQgc3RhY2sgb3ZlcmZsb3dcbiIpOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQotCQkJbWVtY3B5KHBhcnNlci0+Z2xvYmFsX3N0YWNrICsgcGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyKyssCi0JCQkJJnBhcnNlci0+Z2xvYmFsLCBzaXplb2Yoc3RydWN0IGhpZF9nbG9iYWwpKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QT1A6Ci0KLQkJCWlmICghcGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyKSB7Ci0JCQkJZGJnX2hpZCgiZ2xvYmFsIGVudmlyb21lbnQgc3RhY2sgdW5kZXJmbG93XG4iKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0KLQkJCW1lbWNweSgmcGFyc2VyLT5nbG9iYWwsIHBhcnNlci0+Z2xvYmFsX3N0YWNrICsgLS1wYXJzZXItPmdsb2JhbF9zdGFja19wdHIsCi0JCQkJc2l6ZW9mKHN0cnVjdCBoaWRfZ2xvYmFsKSk7Ci0JCQlyZXR1cm4gMDsKLQotCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfVVNBR0VfUEFHRToKLQkJCXBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPSBpdGVtX3VkYXRhKGl0ZW0pOwotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX0xPR0lDQUxfTUlOSU1VTToKLQkJCXBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bSA9IGl0ZW1fc2RhdGEoaXRlbSk7Ci0JCQlyZXR1cm4gMDsKLQotCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfTE9HSUNBTF9NQVhJTVVNOgotCQkJaWYgKHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bSA8IDApCi0JCQkJcGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKLQkJCWVsc2UKLQkJCQlwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21heGltdW0gPSBpdGVtX3VkYXRhKGl0ZW0pOwotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BIWVNJQ0FMX01JTklNVU06Ci0JCQlwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9taW5pbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QSFlTSUNBTF9NQVhJTVVNOgotCQkJaWYgKHBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21pbmltdW0gPCAwKQotCQkJCXBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW0gPSBpdGVtX3NkYXRhKGl0ZW0pOwotCQkJZWxzZQotCQkJCXBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW0gPSBpdGVtX3VkYXRhKGl0ZW0pOwotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1VOSVRfRVhQT05FTlQ6Ci0JCQlwYXJzZXItPmdsb2JhbC51bml0X2V4cG9uZW50ID0gaXRlbV9zZGF0YShpdGVtKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19VTklUOgotCQkJcGFyc2VyLT5nbG9iYWwudW5pdCA9IGl0ZW1fdWRhdGEoaXRlbSk7Ci0JCQlyZXR1cm4gMDsKLQotCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUkVQT1JUX1NJWkU6Ci0JCQlpZiAoKHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplID0gaXRlbV91ZGF0YShpdGVtKSkgPiAzMikgewotCQkJCWRiZ19oaWQoImludmFsaWQgcmVwb3J0X3NpemUgJWRcbiIsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKLQotCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUkVQT1JUX0NPVU5UOgotCQkJaWYgKChwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQgPSBpdGVtX3VkYXRhKGl0ZW0pKSA+IEhJRF9NQVhfVVNBR0VTKSB7Ci0JCQkJZGJnX2hpZCgiaW52YWxpZCByZXBvcnRfY291bnQgJWRcbiIsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9jb3VudCk7Ci0JCQkJcmV0dXJuIC0xOwotCQkJfQotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9JRDoKLQkJCWlmICgocGFyc2VyLT5nbG9iYWwucmVwb3J0X2lkID0gaXRlbV91ZGF0YShpdGVtKSkgPT0gMCkgewotCQkJCWRiZ19oaWQoInJlcG9ydF9pZCAwIGlzIGludmFsaWRcbiIpOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQkJCXJldHVybiAwOwotCi0JCWRlZmF1bHQ6Ci0JCQlkYmdfaGlkKCJ1bmtub3duIGdsb2JhbCB0YWcgMHgleFxuIiwgaXRlbS0+dGFnKTsKKwkJaWYgKHBhcnNlci0+Z2xvYmFsX3N0YWNrX3B0ciA9PSBISURfR0xPQkFMX1NUQUNLX1NJWkUpIHsKKwkJCWRiZ19oaWQoImdsb2JhbCBlbnZpcm9tZW50IHN0YWNrIG92ZXJmbG93XG4iKTsKIAkJCXJldHVybiAtMTsKKwkJfQorCisJCW1lbWNweShwYXJzZXItPmdsb2JhbF9zdGFjayArIHBhcnNlci0+Z2xvYmFsX3N0YWNrX3B0cisrLAorCQkJJnBhcnNlci0+Z2xvYmFsLCBzaXplb2Yoc3RydWN0IGhpZF9nbG9iYWwpKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUE9QOgorCisJCWlmICghcGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyKSB7CisJCQlkYmdfaGlkKCJnbG9iYWwgZW52aXJvbWVudCBzdGFjayB1bmRlcmZsb3dcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJbWVtY3B5KCZwYXJzZXItPmdsb2JhbCwgcGFyc2VyLT5nbG9iYWxfc3RhY2sgKworCQkJLS1wYXJzZXItPmdsb2JhbF9zdGFja19wdHIsIHNpemVvZihzdHJ1Y3QgaGlkX2dsb2JhbCkpOworCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19VU0FHRV9QQUdFOgorCQlwYXJzZXItPmdsb2JhbC51c2FnZV9wYWdlID0gaXRlbV91ZGF0YShpdGVtKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfTE9HSUNBTF9NSU5JTVVNOgorCQlwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW0gPSBpdGVtX3NkYXRhKGl0ZW0pOworCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19MT0dJQ0FMX01BWElNVU06CisJCWlmIChwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW0gPCAwKQorCQkJcGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKKwkJZWxzZQorCQkJcGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtID0gaXRlbV91ZGF0YShpdGVtKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUEhZU0lDQUxfTUlOSU1VTToKKwkJcGFyc2VyLT5nbG9iYWwucGh5c2ljYWxfbWluaW11bSA9IGl0ZW1fc2RhdGEoaXRlbSk7CisJCXJldHVybiAwOworCisJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BIWVNJQ0FMX01BWElNVU06CisJCWlmIChwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9taW5pbXVtIDwgMCkKKwkJCXBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW0gPSBpdGVtX3NkYXRhKGl0ZW0pOworCQllbHNlCisJCQlwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9tYXhpbXVtID0gaXRlbV91ZGF0YShpdGVtKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfVU5JVF9FWFBPTkVOVDoKKwkJcGFyc2VyLT5nbG9iYWwudW5pdF9leHBvbmVudCA9IGl0ZW1fc2RhdGEoaXRlbSk7CisJCXJldHVybiAwOworCisJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1VOSVQ6CisJCXBhcnNlci0+Z2xvYmFsLnVuaXQgPSBpdGVtX3VkYXRhKGl0ZW0pOworCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19SRVBPUlRfU0laRToKKwkJcGFyc2VyLT5nbG9iYWwucmVwb3J0X3NpemUgPSBpdGVtX3VkYXRhKGl0ZW0pOworCQlpZiAocGFyc2VyLT5nbG9iYWwucmVwb3J0X3NpemUgPiAzMikgeworCQkJZGJnX2hpZCgiaW52YWxpZCByZXBvcnRfc2l6ZSAlZFxuIiwKKwkJCQkJcGFyc2VyLT5nbG9iYWwucmVwb3J0X3NpemUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXJldHVybiAwOworCisJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9DT1VOVDoKKwkJcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50ID0gaXRlbV91ZGF0YShpdGVtKTsKKwkJaWYgKHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9jb3VudCA+IEhJRF9NQVhfVVNBR0VTKSB7CisJCQlkYmdfaGlkKCJpbnZhbGlkIHJlcG9ydF9jb3VudCAlZFxuIiwKKwkJCQkJcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19SRVBPUlRfSUQ6CisJCXBhcnNlci0+Z2xvYmFsLnJlcG9ydF9pZCA9IGl0ZW1fdWRhdGEoaXRlbSk7CisJCWlmIChwYXJzZXItPmdsb2JhbC5yZXBvcnRfaWQgPT0gMCkgeworCQkJZGJnX2hpZCgicmVwb3J0X2lkIDAgaXMgaW52YWxpZFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlkYmdfaGlkKCJ1bmtub3duIGdsb2JhbCB0YWcgMHgleFxuIiwgaXRlbS0+dGFnKTsKKwkJcmV0dXJuIC0xOwogCX0KIH0KIApAQCAtMzkzLDc3ICszOTksNzYgQEAKIAlkYXRhID0gaXRlbV91ZGF0YShpdGVtKTsKIAogCXN3aXRjaCAoaXRlbS0+dGFnKSB7CisJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfREVMSU1JVEVSOgogCi0JCWNhc2UgSElEX0xPQ0FMX0lURU1fVEFHX0RFTElNSVRFUjoKLQotCQkJaWYgKGRhdGEpIHsKLQkJCQkvKgotCQkJCSAqIFdlIHRyZWF0IGl0ZW1zIGJlZm9yZSB0aGUgZmlyc3QgZGVsaW1pdGVyCi0JCQkJICogYXMgZ2xvYmFsIHRvIGFsbCB1c2FnZSBzZXRzIChicmFuY2ggMCkuCi0JCQkJICogSW4gdGhlIG1vbWVudCB3ZSBwcm9jZXNzIG9ubHkgdGhlc2UgZ2xvYmFsCi0JCQkJICogaXRlbXMgYW5kIHRoZSBmaXJzdCBkZWxpbWl0ZXIgc2V0LgotCQkJCSAqLwotCQkJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aCAhPSAwKSB7Ci0JCQkJCWRiZ19oaWQoIm5lc3RlZCBkZWxpbWl0ZXJzXG4iKTsKLQkJCQkJcmV0dXJuIC0xOwotCQkJCX0KLQkJCQlwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aCsrOwotCQkJCXBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2JyYW5jaCsrOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGggPCAxKSB7Ci0JCQkJCWRiZ19oaWQoImJvZ3VzIGNsb3NlIGRlbGltaXRlclxuIik7Ci0JCQkJCXJldHVybiAtMTsKLQkJCQl9Ci0JCQkJcGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGgtLTsKKwkJaWYgKGRhdGEpIHsKKwkJCS8qCisJCQkgKiBXZSB0cmVhdCBpdGVtcyBiZWZvcmUgdGhlIGZpcnN0IGRlbGltaXRlcgorCQkJICogYXMgZ2xvYmFsIHRvIGFsbCB1c2FnZSBzZXRzIChicmFuY2ggMCkuCisJCQkgKiBJbiB0aGUgbW9tZW50IHdlIHByb2Nlc3Mgb25seSB0aGVzZSBnbG9iYWwKKwkJCSAqIGl0ZW1zIGFuZCB0aGUgZmlyc3QgZGVsaW1pdGVyIHNldC4KKwkJCSAqLworCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2RlcHRoICE9IDApIHsKKwkJCQlkYmdfaGlkKCJuZXN0ZWQgZGVsaW1pdGVyc1xuIik7CisJCQkJcmV0dXJuIC0xOwogCQkJfQotCQkJcmV0dXJuIDE7Ci0KLQkJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfVVNBR0U6Ci0KLQkJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9icmFuY2ggPiAxKSB7Ci0JCQkJZGJnX2hpZCgiYWx0ZXJuYXRpdmUgdXNhZ2UgaWdub3JlZFxuIik7Ci0JCQkJcmV0dXJuIDA7CisJCQlwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aCsrOworCQkJcGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfYnJhbmNoKys7CisJCX0gZWxzZSB7CisJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGggPCAxKSB7CisJCQkJZGJnX2hpZCgiYm9ndXMgY2xvc2UgZGVsaW1pdGVyXG4iKTsKKwkJCQlyZXR1cm4gLTE7CiAJCQl9CisJCQlwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aC0tOworCQl9CisJCXJldHVybiAxOwogCi0JCQlpZiAoaXRlbS0+c2l6ZSA8PSAyKQotCQkJCWRhdGEgPSAocGFyc2VyLT5nbG9iYWwudXNhZ2VfcGFnZSA8PCAxNikgKyBkYXRhOworCWNhc2UgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFOgogCi0JCQlyZXR1cm4gaGlkX2FkZF91c2FnZShwYXJzZXIsIGRhdGEpOwotCi0JCWNhc2UgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFX01JTklNVU06Ci0KLQkJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9icmFuY2ggPiAxKSB7Ci0JCQkJZGJnX2hpZCgiYWx0ZXJuYXRpdmUgdXNhZ2UgaWdub3JlZFxuIik7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0KLQkJCWlmIChpdGVtLT5zaXplIDw9IDIpCi0JCQkJZGF0YSA9IChwYXJzZXItPmdsb2JhbC51c2FnZV9wYWdlIDw8IDE2KSArIGRhdGE7Ci0KLQkJCXBhcnNlci0+bG9jYWwudXNhZ2VfbWluaW11bSA9IGRhdGE7CisJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9icmFuY2ggPiAxKSB7CisJCQlkYmdfaGlkKCJhbHRlcm5hdGl2ZSB1c2FnZSBpZ25vcmVkXG4iKTsKIAkJCXJldHVybiAwOworCQl9CiAKLQkJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfVVNBR0VfTUFYSU1VTToKKwkJaWYgKGl0ZW0tPnNpemUgPD0gMikKKwkJCWRhdGEgPSAocGFyc2VyLT5nbG9iYWwudXNhZ2VfcGFnZSA8PCAxNikgKyBkYXRhOwogCi0JCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfYnJhbmNoID4gMSkgewotCQkJCWRiZ19oaWQoImFsdGVybmF0aXZlIHVzYWdlIGlnbm9yZWRcbiIpOwotCQkJCXJldHVybiAwOworCQlyZXR1cm4gaGlkX2FkZF91c2FnZShwYXJzZXIsIGRhdGEpOworCisJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfVVNBR0VfTUlOSU1VTToKKworCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfYnJhbmNoID4gMSkgeworCQkJZGJnX2hpZCgiYWx0ZXJuYXRpdmUgdXNhZ2UgaWdub3JlZFxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChpdGVtLT5zaXplIDw9IDIpCisJCQlkYXRhID0gKHBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPDwgMTYpICsgZGF0YTsKKworCQlwYXJzZXItPmxvY2FsLnVzYWdlX21pbmltdW0gPSBkYXRhOworCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFX01BWElNVU06CisKKwkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2JyYW5jaCA+IDEpIHsKKwkJCWRiZ19oaWQoImFsdGVybmF0aXZlIHVzYWdlIGlnbm9yZWRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoaXRlbS0+c2l6ZSA8PSAyKQorCQkJZGF0YSA9IChwYXJzZXItPmdsb2JhbC51c2FnZV9wYWdlIDw8IDE2KSArIGRhdGE7CisKKwkJZm9yIChuID0gcGFyc2VyLT5sb2NhbC51c2FnZV9taW5pbXVtOyBuIDw9IGRhdGE7IG4rKykKKwkJCWlmIChoaWRfYWRkX3VzYWdlKHBhcnNlciwgbikpIHsKKwkJCQlkYmdfaGlkKCJoaWRfYWRkX3VzYWdlIGZhaWxlZFxuIik7CisJCQkJcmV0dXJuIC0xOwogCQkJfQorCQlyZXR1cm4gMDsKIAotCQkJaWYgKGl0ZW0tPnNpemUgPD0gMikKLQkJCQlkYXRhID0gKHBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPDwgMTYpICsgZGF0YTsKKwlkZWZhdWx0OgogCi0JCQlmb3IgKG4gPSBwYXJzZXItPmxvY2FsLnVzYWdlX21pbmltdW07IG4gPD0gZGF0YTsgbisrKQotCQkJCWlmIChoaWRfYWRkX3VzYWdlKHBhcnNlciwgbikpIHsKLQkJCQkJZGJnX2hpZCgiaGlkX2FkZF91c2FnZSBmYWlsZWRcbiIpOwotCQkJCQlyZXR1cm4gLTE7Ci0JCQkJfQotCQkJcmV0dXJuIDA7Ci0KLQkJZGVmYXVsdDoKLQotCQkJZGJnX2hpZCgidW5rbm93biBsb2NhbCBpdGVtIHRhZyAweCV4XG4iLCBpdGVtLT50YWcpOwotCQkJcmV0dXJuIDA7CisJCWRiZ19oaWQoInVua25vd24gbG9jYWwgaXRlbSB0YWcgMHgleFxuIiwgaXRlbS0+dGFnKTsKKwkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDgwLDI0ICs0ODUsMjQgQEAKIAlkYXRhID0gaXRlbV91ZGF0YShpdGVtKTsKIAogCXN3aXRjaCAoaXRlbS0+dGFnKSB7Ci0JCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfQkVHSU5fQ09MTEVDVElPTjoKLQkJCXJldCA9IG9wZW5fY29sbGVjdGlvbihwYXJzZXIsIGRhdGEgJiAweGZmKTsKLQkJCWJyZWFrOwotCQljYXNlIEhJRF9NQUlOX0lURU1fVEFHX0VORF9DT0xMRUNUSU9OOgotCQkJcmV0ID0gY2xvc2VfY29sbGVjdGlvbihwYXJzZXIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfSU5QVVQ6Ci0JCQlyZXQgPSBoaWRfYWRkX2ZpZWxkKHBhcnNlciwgSElEX0lOUFVUX1JFUE9SVCwgZGF0YSk7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfTUFJTl9JVEVNX1RBR19PVVRQVVQ6Ci0JCQlyZXQgPSBoaWRfYWRkX2ZpZWxkKHBhcnNlciwgSElEX09VVFBVVF9SRVBPUlQsIGRhdGEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfRkVBVFVSRToKLQkJCXJldCA9IGhpZF9hZGRfZmllbGQocGFyc2VyLCBISURfRkVBVFVSRV9SRVBPUlQsIGRhdGEpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkYmdfaGlkKCJ1bmtub3duIG1haW4gaXRlbSB0YWcgMHgleFxuIiwgaXRlbS0+dGFnKTsKLQkJCXJldCA9IDA7CisJY2FzZSBISURfTUFJTl9JVEVNX1RBR19CRUdJTl9DT0xMRUNUSU9OOgorCQlyZXQgPSBvcGVuX2NvbGxlY3Rpb24ocGFyc2VyLCBkYXRhICYgMHhmZik7CisJCWJyZWFrOworCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfRU5EX0NPTExFQ1RJT046CisJCXJldCA9IGNsb3NlX2NvbGxlY3Rpb24ocGFyc2VyKTsKKwkJYnJlYWs7CisJY2FzZSBISURfTUFJTl9JVEVNX1RBR19JTlBVVDoKKwkJcmV0ID0gaGlkX2FkZF9maWVsZChwYXJzZXIsIEhJRF9JTlBVVF9SRVBPUlQsIGRhdGEpOworCQlicmVhazsKKwljYXNlIEhJRF9NQUlOX0lURU1fVEFHX09VVFBVVDoKKwkJcmV0ID0gaGlkX2FkZF9maWVsZChwYXJzZXIsIEhJRF9PVVRQVVRfUkVQT1JULCBkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBISURfTUFJTl9JVEVNX1RBR19GRUFUVVJFOgorCQlyZXQgPSBoaWRfYWRkX2ZpZWxkKHBhcnNlciwgSElEX0ZFQVRVUkVfUkVQT1JULCBkYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGJnX2hpZCgidW5rbm93biBtYWluIGl0ZW0gdGFnIDB4JXhcbiIsIGl0ZW0tPnRhZyk7CisJCXJldCA9IDA7CiAJfQogCiAJbWVtc2V0KCZwYXJzZXItPmxvY2FsLCAwLCBzaXplb2YocGFyc2VyLT5sb2NhbCkpOwkvKiBSZXNldCB0aGUgbG9jYWwgcGFyc2VyIGVudmlyb25tZW50ICovCkBAIC01MzQsOSArNTM5LDEwIEBACiAgKiBGcmVlIGEgZGV2aWNlIHN0cnVjdHVyZSwgYWxsIHJlcG9ydHMsIGFuZCBhbGwgZmllbGRzLgogICovCiAKLXZvaWQgaGlkX2ZyZWVfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgdm9pZCBoaWRfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXVuc2lnbmVkIGksajsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGhpZF9kZXZpY2UsIGRldik7CisJdW5zaWduZWQgaSwgajsKIAogCWZvciAoaSA9IDA7IGkgPCBISURfUkVQT1JUX1RZUEVTOyBpKyspIHsKIAkJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmVwb3J0X2VudW0gPSBkZXZpY2UtPnJlcG9ydF9lbnVtICsgaTsKQEAgLTU1Miw3ICs1NTgsNiBAQAogCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7CiAJa2ZyZWUoZGV2aWNlKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGhpZF9mcmVlX2RldmljZSk7CiAKIC8qCiAgKiBGZXRjaCBhIHJlcG9ydCBkZXNjcmlwdGlvbiBpdGVtIGZyb20gdGhlIGRhdGEgc3RyZWFtLiBXZSBzdXBwb3J0IGxvbmcKQEAgLTU5Myw0NyArNTk4LDUyIEBACiAJaXRlbS0+c2l6ZSA9IGIgJiAzOwogCiAJc3dpdGNoIChpdGVtLT5zaXplKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gc3RhcnQ7CiAKLQkJY2FzZSAwOgotCQkJcmV0dXJuIHN0YXJ0OworCWNhc2UgMToKKwkJaWYgKChlbmQgLSBzdGFydCkgPCAxKQorCQkJcmV0dXJuIE5VTEw7CisJCWl0ZW0tPmRhdGEudTggPSAqc3RhcnQrKzsKKwkJcmV0dXJuIHN0YXJ0OwogCi0JCWNhc2UgMToKLQkJCWlmICgoZW5kIC0gc3RhcnQpIDwgMSkKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCWl0ZW0tPmRhdGEudTggPSAqc3RhcnQrKzsKLQkJCXJldHVybiBzdGFydDsKKwljYXNlIDI6CisJCWlmICgoZW5kIC0gc3RhcnQpIDwgMikKKwkJCXJldHVybiBOVUxMOworCQlpdGVtLT5kYXRhLnUxNiA9IGdldF91bmFsaWduZWRfbGUxNihzdGFydCk7CisJCXN0YXJ0ID0gKF9fdTggKikoKF9fbGUxNiAqKXN0YXJ0ICsgMSk7CisJCXJldHVybiBzdGFydDsKIAotCQljYXNlIDI6Ci0JCQlpZiAoKGVuZCAtIHN0YXJ0KSA8IDIpCi0JCQkJcmV0dXJuIE5VTEw7Ci0JCQlpdGVtLT5kYXRhLnUxNiA9IGdldF91bmFsaWduZWRfbGUxNihzdGFydCk7Ci0JCQlzdGFydCA9IChfX3U4ICopKChfX2xlMTYgKilzdGFydCArIDEpOwotCQkJcmV0dXJuIHN0YXJ0OwotCi0JCWNhc2UgMzoKLQkJCWl0ZW0tPnNpemUrKzsKLQkJCWlmICgoZW5kIC0gc3RhcnQpIDwgNCkKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCWl0ZW0tPmRhdGEudTMyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHN0YXJ0KTsKLQkJCXN0YXJ0ID0gKF9fdTggKikoKF9fbGUzMiAqKXN0YXJ0ICsgMSk7Ci0JCQlyZXR1cm4gc3RhcnQ7CisJY2FzZSAzOgorCQlpdGVtLT5zaXplKys7CisJCWlmICgoZW5kIC0gc3RhcnQpIDwgNCkKKwkJCXJldHVybiBOVUxMOworCQlpdGVtLT5kYXRhLnUzMiA9IGdldF91bmFsaWduZWRfbGUzMihzdGFydCk7CisJCXN0YXJ0ID0gKF9fdTggKikoKF9fbGUzMiAqKXN0YXJ0ICsgMSk7CisJCXJldHVybiBzdGFydDsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyoKKy8qKgorICogaGlkX3BhcnNlX3JlcG9ydCAtIHBhcnNlIGRldmljZSByZXBvcnQKKyAqCisgKiBAZGV2aWNlOiBoaWQgZGV2aWNlCisgKiBAc3RhcnQ6IHJlcG9ydCBzdGFydAorICogQHNpemU6IHJlcG9ydCBzaXplCisgKgogICogUGFyc2UgYSByZXBvcnQgZGVzY3JpcHRpb24gaW50byBhIGhpZF9kZXZpY2Ugc3RydWN0dXJlLiBSZXBvcnRzIGFyZQogICogZW51bWVyYXRlZCwgZmllbGRzIGFyZSBhdHRhY2hlZCB0byB0aGVzZSByZXBvcnRzLgorICogMCByZXR1cm5lZCBvbiBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uemVybyBlcnJvciB2YWx1ZS4KICAqLwotCi1zdHJ1Y3QgaGlkX2RldmljZSAqaGlkX3BhcnNlX3JlcG9ydChfX3U4ICpzdGFydCwgdW5zaWduZWQgc2l6ZSkKK2ludCBoaWRfcGFyc2VfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UsIF9fdTggKnN0YXJ0LAorCQl1bnNpZ25lZCBzaXplKQogewotCXN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlcjsKIAlzdHJ1Y3QgaGlkX2l0ZW0gaXRlbTsKIAlfX3U4ICplbmQ7Ci0JdW5zaWduZWQgaTsKKwlpbnQgcmV0OwogCXN0YXRpYyBpbnQgKCpkaXNwYXRjaF90eXBlW10pKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsCiAJCQkJICAgICAgc3RydWN0IGhpZF9pdGVtICppdGVtKSA9IHsKIAkJaGlkX3BhcnNlcl9tYWluLApAQCAtNjQyLDc2ICs2NTIsNTcgQEAKIAkJaGlkX3BhcnNlcl9yZXNlcnZlZAogCX07CiAKLQlpZiAoIShkZXZpY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2RldmljZSksIEdGUF9LRVJORUwpKSkKLQkJcmV0dXJuIE5VTEw7CisJaWYgKGRldmljZS0+ZHJpdmVyLT5yZXBvcnRfZml4dXApCisJCWRldmljZS0+ZHJpdmVyLT5yZXBvcnRfZml4dXAoZGV2aWNlLCBzdGFydCwgc2l6ZSk7CiAKLQlpZiAoIShkZXZpY2UtPmNvbGxlY3Rpb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24pICoKLQkJCQkgICBISURfREVGQVVMVF9OVU1fQ09MTEVDVElPTlMsIEdGUF9LRVJORUwpKSkgewotCQlrZnJlZShkZXZpY2UpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUgPSBISURfREVGQVVMVF9OVU1fQ09MTEVDVElPTlM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSElEX1JFUE9SVF9UWVBFUzsgaSsrKQotCQlJTklUX0xJU1RfSEVBRCgmZGV2aWNlLT5yZXBvcnRfZW51bVtpXS5yZXBvcnRfbGlzdCk7Ci0KLQlpZiAoIShkZXZpY2UtPnJkZXNjID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkpIHsKLQkJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKLQkJa2ZyZWUoZGV2aWNlKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWRldmljZS0+cmRlc2MgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChkZXZpY2UtPnJkZXNjID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCW1lbWNweShkZXZpY2UtPnJkZXNjLCBzdGFydCwgc2l6ZSk7CiAJZGV2aWNlLT5yc2l6ZSA9IHNpemU7CiAKLQlpZiAoIShwYXJzZXIgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX3BhcnNlcikpKSkgewotCQlrZnJlZShkZXZpY2UtPnJkZXNjKTsKLQkJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKLQkJa2ZyZWUoZGV2aWNlKTsKLQkJcmV0dXJuIE5VTEw7CisJcGFyc2VyID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IGhpZF9wYXJzZXIpKTsKKwlpZiAoIXBhcnNlcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKIAl9CisKIAltZW1zZXQocGFyc2VyLCAwLCBzaXplb2Yoc3RydWN0IGhpZF9wYXJzZXIpKTsKIAlwYXJzZXItPmRldmljZSA9IGRldmljZTsKIAogCWVuZCA9IHN0YXJ0ICsgc2l6ZTsKKwlyZXQgPSAtRUlOVkFMOwogCXdoaWxlICgoc3RhcnQgPSBmZXRjaF9pdGVtKHN0YXJ0LCBlbmQsICZpdGVtKSkgIT0gTlVMTCkgewogCiAJCWlmIChpdGVtLmZvcm1hdCAhPSBISURfSVRFTV9GT1JNQVRfU0hPUlQpIHsKIAkJCWRiZ19oaWQoInVuZXhwZWN0ZWQgbG9uZyBnbG9iYWwgaXRlbVxuIik7Ci0JCQloaWRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKLQkJCXZmcmVlKHBhcnNlcik7Ci0JCQlyZXR1cm4gTlVMTDsKKwkJCWdvdG8gZXJyOwogCQl9CiAKIAkJaWYgKGRpc3BhdGNoX3R5cGVbaXRlbS50eXBlXShwYXJzZXIsICZpdGVtKSkgewogCQkJZGJnX2hpZCgiaXRlbSAldSAldSAldSAldSBwYXJzaW5nIGZhaWxlZFxuIiwKIAkJCQlpdGVtLmZvcm1hdCwgKHVuc2lnbmVkKWl0ZW0uc2l6ZSwgKHVuc2lnbmVkKWl0ZW0udHlwZSwgKHVuc2lnbmVkKWl0ZW0udGFnKTsKLQkJCWhpZF9mcmVlX2RldmljZShkZXZpY2UpOwotCQkJdmZyZWUocGFyc2VyKTsKLQkJCXJldHVybiBOVUxMOworCQkJZ290byBlcnI7CiAJCX0KIAogCQlpZiAoc3RhcnQgPT0gZW5kKSB7CiAJCQlpZiAocGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0cikgewogCQkJCWRiZ19oaWQoInVuYmFsYW5jZWQgY29sbGVjdGlvbiBhdCBlbmQgb2YgcmVwb3J0IGRlc2NyaXB0aW9uXG4iKTsKLQkJCQloaWRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKLQkJCQl2ZnJlZShwYXJzZXIpOwotCQkJCXJldHVybiBOVUxMOworCQkJCWdvdG8gZXJyOwogCQkJfQogCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2RlcHRoKSB7CiAJCQkJZGJnX2hpZCgidW5iYWxhbmNlZCBkZWxpbWl0ZXIgYXQgZW5kIG9mIHJlcG9ydCBkZXNjcmlwdGlvblxuIik7Ci0JCQkJaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7Ci0JCQkJdmZyZWUocGFyc2VyKTsKLQkJCQlyZXR1cm4gTlVMTDsKKwkJCQlnb3RvIGVycjsKIAkJCX0KIAkJCXZmcmVlKHBhcnNlcik7Ci0JCQlyZXR1cm4gZGV2aWNlOworCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKIAlkYmdfaGlkKCJpdGVtIGZldGNoaW5nIGZhaWxlZCBhdCBvZmZzZXQgJWRcbiIsIChpbnQpKGVuZCAtIHN0YXJ0KSk7Ci0JaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7CitlcnI6CiAJdmZyZWUocGFyc2VyKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX3BhcnNlX3JlcG9ydCk7CiAKQEAgLTcyNCw5ICs3MTUsOSBAQAogc3RhdGljIHMzMiBzbnRvMzIoX191MzIgdmFsdWUsIHVuc2lnbmVkIG4pCiB7CiAJc3dpdGNoIChuKSB7Ci0JCWNhc2UgODogIHJldHVybiAoKF9fczgpdmFsdWUpOwotCQljYXNlIDE2OiByZXR1cm4gKChfX3MxNil2YWx1ZSk7Ci0JCWNhc2UgMzI6IHJldHVybiAoKF9fczMyKXZhbHVlKTsKKwljYXNlIDg6ICByZXR1cm4gKChfX3M4KXZhbHVlKTsKKwljYXNlIDE2OiByZXR1cm4gKChfX3MxNil2YWx1ZSk7CisJY2FzZSAzMjogcmV0dXJuICgoX19zMzIpdmFsdWUpOwogCX0KIAlyZXR1cm4gdmFsdWUgJiAoMSA8PCAobiAtIDEpKSA/IHZhbHVlIHwgKC0xIDw8IG4pIDogdmFsdWU7CiB9CkBAIC04MTUsOSArODA2LDczIEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgdm9pZCBoaWRfcHJvY2Vzc19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlLCBpbnQgaW50ZXJydXB0KQorLyoqCisgKiBoaWRfbWF0Y2hfcmVwb3J0IC0gY2hlY2sgaWYgZHJpdmVyJ3MgcmF3X2V2ZW50IHNob3VsZCBiZSBjYWxsZWQKKyAqCisgKiBAaGlkOiBoaWQgZGV2aWNlCisgKiBAcmVwb3J0X3R5cGU6IHR5cGUgdG8gbWF0Y2ggYWdhaW5zdAorICoKKyAqIGNvbXBhcmUgaGlkLT5kcml2ZXItPnJlcG9ydF90YWJsZS0+cmVwb3J0X3R5cGUgdG8gcmVwb3J0LT50eXBlCisgKi8KK3N0YXRpYyBpbnQgaGlkX21hdGNoX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0KQogeworCWNvbnN0IHN0cnVjdCBoaWRfcmVwb3J0X2lkICppZCA9IGhpZC0+ZHJpdmVyLT5yZXBvcnRfdGFibGU7CisKKwlpZiAoIWlkKSAvKiBOVUxMIG1lYW5zIGFsbCAqLworCQlyZXR1cm4gMTsKKworCWZvciAoOyBpZC0+cmVwb3J0X3R5cGUgIT0gSElEX1RFUk1JTkFUT1I7IGlkKyspCisJCWlmIChpZC0+cmVwb3J0X3R5cGUgPT0gSElEX0FOWV9JRCB8fAorCQkJCWlkLT5yZXBvcnRfdHlwZSA9PSByZXBvcnQtPnR5cGUpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBoaWRfbWF0Y2hfdXNhZ2UgLSBjaGVjayBpZiBkcml2ZXIncyBldmVudCBzaG91bGQgYmUgY2FsbGVkCisgKgorICogQGhpZDogaGlkIGRldmljZQorICogQHVzYWdlOiB1c2FnZSB0byBtYXRjaCBhZ2FpbnN0CisgKgorICogY29tcGFyZSBoaWQtPmRyaXZlci0+dXNhZ2VfdGFibGUtPnVzYWdlX3t0eXBlLGNvZGV9IHRvCisgKiB1c2FnZS0+dXNhZ2Vfe3R5cGUsY29kZX0KKyAqLworc3RhdGljIGludCBoaWRfbWF0Y2hfdXNhZ2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UpCit7CisJY29uc3Qgc3RydWN0IGhpZF91c2FnZV9pZCAqaWQgPSBoaWQtPmRyaXZlci0+dXNhZ2VfdGFibGU7CisKKwlpZiAoIWlkKSAvKiBOVUxMIG1lYW5zIGFsbCAqLworCQlyZXR1cm4gMTsKKworCWZvciAoOyBpZC0+dXNhZ2VfdHlwZSAhPSBISURfQU5ZX0lEIC0gMTsgaWQrKykKKwkJaWYgKChpZC0+dXNhZ2VfaGlkID09IEhJRF9BTllfSUQgfHwKKwkJCQlpZC0+dXNhZ2VfaGlkID09IHVzYWdlLT5oaWQpICYmCisJCQkJKGlkLT51c2FnZV90eXBlID09IEhJRF9BTllfSUQgfHwKKwkJCQlpZC0+dXNhZ2VfdHlwZSA9PSB1c2FnZS0+dHlwZSkgJiYKKwkJCQkoaWQtPnVzYWdlX2NvZGUgPT0gSElEX0FOWV9JRCB8fAorCQkJCSBpZC0+dXNhZ2VfY29kZSA9PSB1c2FnZS0+Y29kZSkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGlkX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSwgaW50IGludGVycnVwdCkKK3sKKwlzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydiA9IGhpZC0+ZHJpdmVyOworCWludCByZXQ7CisKIAloaWRfZHVtcF9pbnB1dCh1c2FnZSwgdmFsdWUpOworCisJaWYgKGhkcnYgJiYgaGRydi0+ZXZlbnQgJiYgaGlkX21hdGNoX3VzYWdlKGhpZCwgdXNhZ2UpKSB7CisJCXJldCA9IGhkcnYtPmV2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJaWYgKHJldCA8IDApCisJCQkJZGJnX2hpZCgiJXMncyBldmVudCBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJCQkJCWhkcnYtPm5hbWUsIHJldCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKIAlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCiAJCWhpZGlucHV0X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOwogCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYgJiYgaW50ZXJydXB0ICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKQEAgLTk0Niw0NCArMTAwMSw0NyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX3NldF9maWVsZCk7CiAKLWludCBoaWRfaW5wdXRfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCB0eXBlLCB1OCAqZGF0YSwgaW50IHNpemUsIGludCBpbnRlcnJ1cHQpCitzdGF0aWMgc3RydWN0IGhpZF9yZXBvcnQgKmhpZF9nZXRfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtLAorCQljb25zdCB1OCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXVuc2lnbmVkIGludCBuID0gMDsJLyogTm9ybWFsbHkgcmVwb3J0IG51bWJlciBpcyAwICovCisKKwkvKiBEZXZpY2UgdXNlcyBudW1iZXJlZCByZXBvcnRzLCBkYXRhWzBdIGlzIHJlcG9ydCBudW1iZXIgKi8KKwlpZiAocmVwb3J0X2VudW0tPm51bWJlcmVkKQorCQluID0gKmRhdGE7CisKKwlyZXBvcnQgPSByZXBvcnRfZW51bS0+cmVwb3J0X2lkX2hhc2hbbl07CisJaWYgKHJlcG9ydCA9PSBOVUxMKQorCQlkYmdfaGlkKCJ1bmRlZmluZWQgcmVwb3J0X2lkICV1IHJlY2VpdmVkXG4iLCBuKTsKKworCXJldHVybiByZXBvcnQ7Cit9CisKK3ZvaWQgaGlkX3JlcG9ydF9yYXdfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHR5cGUsIHU4ICpkYXRhLCBpbnQgc2l6ZSwKKwkJaW50IGludGVycnVwdCkKIHsKIAlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bSA9IGhpZC0+cmVwb3J0X2VudW0gKyB0eXBlOwogCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Ci0JaW50IG4sIHJzaXplLCBpOworCXVuc2lnbmVkIGludCBhOworCWludCByc2l6ZSwgY3NpemUgPSBzaXplOworCXU4ICpjZGF0YSA9IGRhdGE7CiAKLQlpZiAoIWhpZCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJcmVwb3J0ID0gaGlkX2dldF9yZXBvcnQocmVwb3J0X2VudW0sIGRhdGEpOworCWlmICghcmVwb3J0KQorCQlyZXR1cm47CiAKLQlpZiAoIXNpemUpIHsKLQkJZGJnX2hpZCgiZW1wdHkgcmVwb3J0XG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWRiZ19oaWQoInJlcG9ydCAoc2l6ZSAldSkgKCVzbnVtYmVyZWQpXG4iLCBzaXplLCByZXBvcnRfZW51bS0+bnVtYmVyZWQgPyAiIiA6ICJ1biIpOwotCi0JbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3JtYWxseSByZXBvcnQgbnVtYmVyIGlzIDAgKi8KLQlpZiAocmVwb3J0X2VudW0tPm51bWJlcmVkKSB7ICAgIC8qIERldmljZSB1c2VzIG51bWJlcmVkIHJlcG9ydHMsIGRhdGFbMF0gaXMgcmVwb3J0IG51bWJlciAqLwotCQluID0gKmRhdGErKzsKLQkJc2l6ZS0tOwotCX0KLQotCS8qIGR1bXAgdGhlIHJlcG9ydCAqLwotCWRiZ19oaWQoInJlcG9ydCAlZCAoc2l6ZSAldSkgPSAiLCBuLCBzaXplKTsKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotCQlkYmdfaGlkX2xpbmUoIiAlMDJ4IiwgZGF0YVtpXSk7Ci0JZGJnX2hpZF9saW5lKCJcbiIpOwotCi0JaWYgKCEocmVwb3J0ID0gcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW25dKSkgewotCQlkYmdfaGlkKCJ1bmRlZmluZWQgcmVwb3J0X2lkICVkIHJlY2VpdmVkXG4iLCBuKTsKLQkJcmV0dXJuIC0xOworCWlmIChyZXBvcnRfZW51bS0+bnVtYmVyZWQpIHsKKwkJY2RhdGErKzsKKwkJY3NpemUtLTsKIAl9CiAKIAlyc2l6ZSA9ICgocmVwb3J0LT5zaXplIC0gMSkgPj4gMykgKyAxOwogCi0JaWYgKHNpemUgPCByc2l6ZSkgewotCQlkYmdfaGlkKCJyZXBvcnQgJWQgaXMgdG9vIHNob3J0LCAoJWQgPCAlZClcbiIsIHJlcG9ydC0+aWQsIHNpemUsIHJzaXplKTsKLQkJbWVtc2V0KGRhdGEgKyBzaXplLCAwLCByc2l6ZSAtIHNpemUpOworCWlmIChjc2l6ZSA8IHJzaXplKSB7CisJCWRiZ19oaWQoInJlcG9ydCAlZCBpcyB0b28gc2hvcnQsICglZCA8ICVkKVxuIiwgcmVwb3J0LT5pZCwKKwkJCQljc2l6ZSwgcnNpemUpOworCQltZW1zZXQoY2RhdGEgKyBjc2l6ZSwgMCwgcnNpemUgLSBjc2l6ZSk7CiAJfQogCiAJaWYgKChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpICYmIGhpZC0+aGlkZGV2X3JlcG9ydF9ldmVudCkKQEAgLTk5NiwyNCArMTA1NCw2NjMgQEAKIAkJCWhpZHJhd19yZXBvcnRfZXZlbnQoaGlkLCBkYXRhLCBzaXplKTsKIAl9CiAKLQlmb3IgKG4gPSAwOyBuIDwgcmVwb3J0LT5tYXhmaWVsZDsgbisrKQotCQloaWRfaW5wdXRfZmllbGQoaGlkLCByZXBvcnQtPmZpZWxkW25dLCBkYXRhLCBpbnRlcnJ1cHQpOworCWZvciAoYSA9IDA7IGEgPCByZXBvcnQtPm1heGZpZWxkOyBhKyspCisJCWhpZF9pbnB1dF9maWVsZChoaWQsIHJlcG9ydC0+ZmllbGRbYV0sIGNkYXRhLCBpbnRlcnJ1cHQpOwogCiAJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKQogCQloaWRpbnB1dF9yZXBvcnRfZXZlbnQoaGlkLCByZXBvcnQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX3JlcG9ydF9yYXdfZXZlbnQpOworCisvKioKKyAqIGhpZF9pbnB1dF9yZXBvcnQgLSByZXBvcnQgZGF0YSBmcm9tIGxvd2VyIGxheWVyICh1c2IsIGJ0Li4uKQorICoKKyAqIEBoaWQ6IGhpZCBkZXZpY2UKKyAqIEB0eXBlOiBISUQgcmVwb3J0IHR5cGUgKEhJRF8qX1JFUE9SVCkKKyAqIEBkYXRhOiByZXBvcnQgY29udGVudHMKKyAqIEBzaXplOiBzaXplIG9mIGRhdGEgcGFyYW1ldGVyCisgKiBAaW50ZXJydXB0OiBjYWxsZWQgZnJvbSBhdG9taWM/CisgKgorICogVGhpcyBpcyBkYXRhIGVudHJ5IGZvciBsb3dlciBsYXllcnMuCisgKi8KK2ludCBoaWRfaW5wdXRfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCB0eXBlLCB1OCAqZGF0YSwgaW50IHNpemUsIGludCBpbnRlcnJ1cHQpCit7CisJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmVwb3J0X2VudW0gPSBoaWQtPnJlcG9ydF9lbnVtICsgdHlwZTsKKwlzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydiA9IGhpZC0+ZHJpdmVyOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKworCWlmICghaGlkIHx8ICFoaWQtPmRyaXZlcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIXNpemUpIHsKKwkJZGJnX2hpZCgiZW1wdHkgcmVwb3J0XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRiZ19oaWQoInJlcG9ydCAoc2l6ZSAldSkgKCVzbnVtYmVyZWQpXG4iLCBzaXplLCByZXBvcnRfZW51bS0+bnVtYmVyZWQgPyAiIiA6ICJ1biIpOworCisJcmVwb3J0ID0gaGlkX2dldF9yZXBvcnQocmVwb3J0X2VudW0sIGRhdGEpOworCWlmICghcmVwb3J0KQorCQlyZXR1cm4gLTE7CisKKwkvKiBkdW1wIHRoZSByZXBvcnQgKi8KKwlkYmdfaGlkKCJyZXBvcnQgJWQgKHNpemUgJXUpID0gIiwgcmVwb3J0LT5pZCwgc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJZGJnX2hpZF9saW5lKCIgJTAyeCIsIGRhdGFbaV0pOworCWRiZ19oaWRfbGluZSgiXG4iKTsKKworCWlmIChoZHJ2ICYmIGhkcnYtPnJhd19ldmVudCAmJiBoaWRfbWF0Y2hfcmVwb3J0KGhpZCwgcmVwb3J0KSkgeworCQlyZXQgPSBoZHJ2LT5yYXdfZXZlbnQoaGlkLCByZXBvcnQsIGRhdGEsIHNpemUpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CisJfQorCisJaGlkX3JlcG9ydF9yYXdfZXZlbnQoaGlkLCB0eXBlLCBkYXRhLCBzaXplLCBpbnRlcnJ1cHQpOwogCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChoaWRfaW5wdXRfcmVwb3J0KTsKIAorc3RhdGljIGJvb2wgaGlkX21hdGNoX29uZV9pZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKKwkJY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBpZC0+YnVzID09IGhkZXYtPmJ1cyAmJgorCQkoaWQtPnZlbmRvciA9PSBISURfQU5ZX0lEIHx8IGlkLT52ZW5kb3IgPT0gaGRldi0+dmVuZG9yKSAmJgorCQkoaWQtPnByb2R1Y3QgPT0gSElEX0FOWV9JRCB8fCBpZC0+cHJvZHVjdCA9PSBoZGV2LT5wcm9kdWN0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICpoaWRfbWF0Y2hfaWQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCWNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlmb3IgKDsgaWQtPmJ1czsgaWQrKykKKwkJaWYgKGhpZF9tYXRjaF9vbmVfaWQoaGRldiwgaWQpKQorCQkJcmV0dXJuIGlkOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBoaWRfaGlkZGV2X2xpc3RbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUdFLCBVU0JfREVWSUNFX0lEX01HRV9VUFMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01HRSwgVVNCX0RFVklDRV9JRF9NR0VfVVBTMSkgfSwKKwl7IH0KK307CisKK3N0YXRpYyBib29sIGhpZF9oaWRkZXYoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJcmV0dXJuICEhaGlkX21hdGNoX2lkKGhkZXYsIGhpZF9oaWRkZXZfbGlzdCk7Cit9CisKK2ludCBoaWRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgdW5zaWduZWQgaW50IGNvbm5lY3RfbWFzaykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqdHlwZXNbXSA9IHsgIkRldmljZSIsICJQb2ludGVyIiwgIk1vdXNlIiwgIkRldmljZSIsCisJCSJKb3lzdGljayIsICJHYW1lcGFkIiwgIktleWJvYXJkIiwgIktleXBhZCIsCisJCSJNdWx0aS1BeGlzIENvbnRyb2xsZXIiCisJfTsKKwljb25zdCBjaGFyICp0eXBlLCAqYnVzOworCWNoYXIgYnVmWzY0XTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgbGVuOworCisJaWYgKGhkZXYtPmJ1cyAhPSBCVVNfVVNCKQorCQljb25uZWN0X21hc2sgJj0gfkhJRF9DT05ORUNUX0hJRERFVjsKKwlpZiAoaGlkX2hpZGRldihoZGV2KSkKKwkJY29ubmVjdF9tYXNrIHw9IEhJRF9DT05ORUNUX0hJRERFVl9GT1JDRTsKKworCWlmICgoY29ubmVjdF9tYXNrICYgSElEX0NPTk5FQ1RfSElESU5QVVQpICYmICFoaWRpbnB1dF9jb25uZWN0KGhkZXYsCisJCQkJY29ubmVjdF9tYXNrICYgSElEX0NPTk5FQ1RfSElESU5QVVRfRk9SQ0UpKQorCQloZGV2LT5jbGFpbWVkIHw9IEhJRF9DTEFJTUVEX0lOUFVUOworCWlmICgoY29ubmVjdF9tYXNrICYgSElEX0NPTk5FQ1RfSElEREVWKSAmJiBoZGV2LT5oaWRkZXZfY29ubmVjdCAmJgorCQkJIWhkZXYtPmhpZGRldl9jb25uZWN0KGhkZXYsCisJCQkJY29ubmVjdF9tYXNrICYgSElEX0NPTk5FQ1RfSElEREVWX0ZPUkNFKSkKKwkJaGRldi0+Y2xhaW1lZCB8PSBISURfQ0xBSU1FRF9ISURERVY7CisJaWYgKChjb25uZWN0X21hc2sgJiBISURfQ09OTkVDVF9ISURSQVcpICYmICFoaWRyYXdfY29ubmVjdChoZGV2KSkKKwkJaGRldi0+Y2xhaW1lZCB8PSBISURfQ0xBSU1FRF9ISURSQVc7CisKKwlpZiAoIWhkZXYtPmNsYWltZWQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2xhaW1lZCBieSBuZWl0aGVyIGlucHV0LCBoaWRkZXYgbm9yICIKKwkJCQkiaGlkcmF3XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKChoZGV2LT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpICYmCisJCQkoY29ubmVjdF9tYXNrICYgSElEX0NPTk5FQ1RfRkYpICYmIGhkZXYtPmZmX2luaXQpCisJCWhkZXYtPmZmX2luaXQoaGRldik7CisKKwlsZW4gPSAwOworCWlmIChoZGV2LT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgImlucHV0Iik7CisJaWYgKGhkZXYtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpCisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiVzaGlkZGV2JWQiLCBsZW4gPyAiLCIgOiAiIiwKKwkJCQloZGV2LT5taW5vcik7CisJaWYgKGhkZXYtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURSQVcpCisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiVzaGlkcmF3JWQiLCBsZW4gPyAiLCIgOiAiIiwKKwkJCQkoKHN0cnVjdCBoaWRyYXcgKiloZGV2LT5oaWRyYXcpLT5taW5vcik7CisKKwl0eXBlID0gIkRldmljZSI7CisJZm9yIChpID0gMDsgaSA8IGhkZXYtPm1heGNvbGxlY3Rpb247IGkrKykgeworCQlzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24gKmNvbCA9ICZoZGV2LT5jb2xsZWN0aW9uW2ldOworCQlpZiAoY29sLT50eXBlID09IEhJRF9DT0xMRUNUSU9OX0FQUExJQ0FUSU9OICYmCisJCSAgIChjb2wtPnVzYWdlICYgSElEX1VTQUdFX1BBR0UpID09IEhJRF9VUF9HRU5ERVNLICYmCisJCSAgIChjb2wtPnVzYWdlICYgMHhmZmZmKSA8IEFSUkFZX1NJWkUodHlwZXMpKSB7CisJCQl0eXBlID0gdHlwZXNbY29sLT51c2FnZSAmIDB4ZmZmZl07CisJCQlicmVhazsKKwkJfQorCX0KKworCXN3aXRjaCAoaGRldi0+YnVzKSB7CisJY2FzZSBCVVNfVVNCOgorCQlidXMgPSAiVVNCIjsKKwkJYnJlYWs7CisJY2FzZSBCVVNfQkxVRVRPT1RIOgorCQlidXMgPSAiQkxVRVRPT1RIIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnVzID0gIjxVTktOT1dOPiI7CisJfQorCisJZGV2X2luZm8oJmhkZXYtPmRldiwgIiVzOiAlcyBISUQgdiV4LiUwMnggJXMgWyVzXSBvbiAlc1xuIiwKKwkJCWJ1ZiwgYnVzLCBoZGV2LT52ZXJzaW9uID4+IDgsIGhkZXYtPnZlcnNpb24gJiAweGZmLAorCQkJdHlwZSwgaGRldi0+bmFtZSwgaGRldi0+cGh5cyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGhpZF9jb25uZWN0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGhpZF9ibGFja2xpc3RbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BNFRFQ0gsIFVTQl9ERVZJQ0VfSURfQTRURUNIX1g1XzAwNUQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FUVl9JUkNPTlRST0wpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0lSQ09OVFJPTDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX01JR0hUWU1PVVNFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9BTlNJKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9JU08pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUl9BTlNJKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfSVNPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfSklTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0FOU0kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjNfSVNPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0pJUykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9BTlNJKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0lTTykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9BTlNJKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSVNPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSklTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0FOU0kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfSVNPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0pJUykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTX0FOU0kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19JU08pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19KSVMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfQU5TSSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklOR19JU08pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfSklTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9BTlNJKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9JU08pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkcyX0pJUykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fVFBfT05MWSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSMV9UUF9PTkxZKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BVkVSTUVESUEsIFVTQl9ERVZJQ0VfSURfQVZFUl9GTV9NUjgwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkVMS0lOLCBVU0JfREVWSUNFX0lEX0ZMSVBfS1ZNKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CUklHSFQsIFVTQl9ERVZJQ0VfSURfQlJJR0hUX0FCTlQyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSEVSUlksIFVTQl9ERVZJQ0VfSURfQ0hFUlJZX0NZTU9USU9OKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSElDT05ZLCBVU0JfREVWSUNFX0lEX0NISUNPTllfVEFDVElDQUxfUEFEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8xKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8yKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfTU9VU0UpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RFTEwsIFVTQl9ERVZJQ0VfSURfREVMTF9XNzY1OCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfREVMTCwgVVNCX0RFVklDRV9JRF9ERUxMX1NLODExNSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRVpLRVksIFVTQl9ERVZJQ0VfSURfQlRDXzgxOTMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dZUkFUSU9OLCBVU0JfREVWSUNFX0lEX0dZUkFUSU9OX1JFTU9URSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEFCVEVDLCBVU0JfREVWSUNFX0lEX0xBQlRFQ19XSVJFTEVTU19LRVlCT0FSRCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTVgzMDAwX1JFQ0VJVkVSKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSXzIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JFQ0VJVkVSKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9ESU5PVk9fREVTS1RPUCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfRElOT1ZPX0VER0UpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0RJTk9WT19NSU5JKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9LQkQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0VMSVRFX0tCRCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfQ09SRExFU1NfREVTS1RPUF9MWDUwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTFgzKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9WMTUwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9FWFRSRU1FXzNEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSEVFTCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9SVU1CTEVQQUQyXzIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJTkdNQU5fRjNEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GT1JDRTNEX1BSTykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JVTUJMRVBBRDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9TSURFV0lOREVSX0dWKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfTkU0SykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULCBVU0JfREVWSUNFX0lEX01TX0xLNkspIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19QUkVTRU5URVJfOEtfVVNCKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfV0lSRUxFU1NfT1BUSUNBTF9ERVNLVE9QXzNfMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9OVEVSRVksIFVTQl9ERVZJQ0VfSURfR0VOSVVTX0tCMjlFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QRVRBTFlOWCwgVVNCX0RFVklDRV9JRF9QRVRBTFlOWF9NQVhURVJfUkVNT1RFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TQU1TVU5HLCBVU0JfREVWSUNFX0lEX1NBTVNVTkdfSVJfUkVNT1RFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfUFMzX0NPTlRST0xMRVIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NVTlBMVVMsIFVTQl9ERVZJQ0VfSURfU1VOUExVU19XREVTS1RPUCkgfSwKKworCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgMHgwMzBjKSB9LAorCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfUFJFU0VOVEVSXzhLX0JUKSB9LAorCXsgfQorfTsKKworc3RhdGljIGludCBoaWRfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3sKKwlzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydiA9IGNvbnRhaW5lcl9vZihkcnYsIHN0cnVjdCBoaWRfZHJpdmVyLCBkcml2ZXIpOworCXN0cnVjdCBoaWRfZGV2aWNlICpoZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGhpZF9kZXZpY2UsIGRldik7CisKKwlpZiAoIWhpZF9tYXRjaF9pZChoZGV2LCBoZHJ2LT5pZF90YWJsZSkpCisJCXJldHVybiAwOworCisJLyogZ2VuZXJpYyB3YW50cyBhbGwgbm9uLWJsYWNrbGlzdGVkICovCisJaWYgKCFzdHJuY21wKGhkcnYtPm5hbWUsICJnZW5lcmljLSIsIDgpKQorCQlyZXR1cm4gIWhpZF9tYXRjaF9pZChoZGV2LCBoaWRfYmxhY2tsaXN0KTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGhpZF9kZXZpY2VfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBoaWRfZHJpdmVyICpoZHJ2ID0gY29udGFpbmVyX29mKGRldi0+ZHJpdmVyLAorCQkJc3RydWN0IGhpZF9kcml2ZXIsIGRyaXZlcik7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaGlkX2RldmljZSwgZGV2KTsKKwljb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWhkZXYtPmRyaXZlcikgeworCQlpZCA9IGhpZF9tYXRjaF9pZChoZGV2LCBoZHJ2LT5pZF90YWJsZSk7CisJCWlmIChpZCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJaGRldi0+ZHJpdmVyID0gaGRydjsKKwkJaWYgKGhkcnYtPnByb2JlKSB7CisJCQlyZXQgPSBoZHJ2LT5wcm9iZShoZGV2LCBpZCk7CisJCX0gZWxzZSB7IC8qIGRlZmF1bHQgcHJvYmUgKi8KKwkJCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKwkJfQorCQlpZiAocmV0KQorCQkJaGRldi0+ZHJpdmVyID0gTlVMTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoaWRfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaGlkX2RldmljZSwgZGV2KTsKKwlzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydiA9IGhkZXYtPmRyaXZlcjsKKworCWlmIChoZHJ2KSB7CisJCWlmIChoZHJ2LT5yZW1vdmUpCisJCQloZHJ2LT5yZW1vdmUoaGRldik7CisJCWVsc2UgLyogZGVmYXVsdCByZW1vdmUgKi8KKwkJCWhpZF9od19zdG9wKGhkZXYpOworCQloZGV2LT5kcml2ZXIgPSBOVUxMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaGlkX2RldmljZSwgZGV2KTsKKworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJISURfSUQ9JTA0WDolMDhYOiUwOFgiLAorCQkJaGRldi0+YnVzLCBoZGV2LT52ZW5kb3IsIGhkZXYtPnByb2R1Y3QpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJISURfTkFNRT0lcyIsIGhkZXYtPm5hbWUpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJISURfUEhZUz0lcyIsIGhkZXYtPnBoeXMpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJISURfVU5JUT0lcyIsIGhkZXYtPnVuaXEpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz1oaWQ6YiUwNFh2JTA4WHAlMDhYIiwKKwkJCWhkZXYtPmJ1cywgaGRldi0+dmVuZG9yLCBoZGV2LT5wcm9kdWN0KSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBidXNfdHlwZSBoaWRfYnVzX3R5cGUgPSB7CisJLm5hbWUJCT0gImhpZCIsCisJLm1hdGNoCQk9IGhpZF9idXNfbWF0Y2gsCisJLnByb2JlCQk9IGhpZF9kZXZpY2VfcHJvYmUsCisJLnJlbW92ZQkJPSBoaWRfZGV2aWNlX3JlbW92ZSwKKwkudWV2ZW50CQk9IGhpZF91ZXZlbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgaGlkX2lnbm9yZV9saXN0W10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FDRUNBRCwgVVNCX0RFVklDRV9JRF9BQ0VDQURfRkxBSVIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FDRUNBRCwgVVNCX0RFVklDRV9JRF9BQ0VDQURfMzAyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BRFNfVEVDSCwgVVNCX0RFVklDRV9JRF9BRFNfVEVDSF9SQURJT19TSTQ3MFgpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMTApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUkNBQkxFLCBVU0JfREVWSUNFX0lEX0FJUkNBQkxFMSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUxDT1IsIFVTQl9ERVZJQ0VfSURfQUxDT1JfVVNCUlMyMzIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FTVVMsIFVTQl9ERVZJQ0VfSURfQVNVU19MQ00pfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkVSS1NISVJFLCBVU0JfREVWSUNFX0lEX0JFUktTSElSRV9QQ1dEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSURDLCAweDAxMDMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZR05BTCwgVVNCX0RFVklDRV9JRF9DWUdOQUxfUkFESU9fU0k0NzBYKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DTUVESUEsIFVTQl9ERVZJQ0VfSURfQ00xMDkpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19ISURDT00pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19VTFRSQU1PVVNFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ERUxPUk1FLCBVU0JfREVWSUNFX0lEX0RFTE9STUVfRUFSVEhNQVRFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ERUxPUk1FLCBVU0JfREVWSUNFX0lEX0RFTE9STUVfRU1fTFQyMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRVNTRU5USUFMX1JFQUxJVFksIFVTQl9ERVZJQ0VfSURfRVNTRU5USUFMX1JFQUxJVFlfUDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dBTUVST04sIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BTWF9BREFQVE9SKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILCAweDAwMDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dFTkVSQUxfVE9VQ0gsIDB4MDAwMikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0VORVJBTF9UT1VDSCwgMHgwMDAzKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILCAweDAwMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMzApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMzApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF8wXzRfSUZfS0lUKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEXzBfMTZfMTZfSUZfS0lUKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEXzhfOF84X0lGX0tJVCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF8wXzhfN19JRl9LSVQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF84XzhfSUZfS0lUKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX1BISURHRVRfTU9UT1JDT05UUk9MKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HT1RPUCwgVVNCX0RFVklDRV9JRF9TVVBFUl9RMikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR09UT1AsIFVTQl9ERVZJQ0VfSURfR09HT1BFTikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR09UT1AsIFVTQl9ERVZJQ0VfSURfUEVOUE9XRVIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dSRUVOQVNJQSwgMHgwMDAzKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HUkVUQUdNQUNCRVRILCBVU0JfREVWSUNFX0lEX0dSRVRBR01BQ0JFVEhfSFVFWSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1JJRkZJTiwgVVNCX0RFVklDRV9JRF9QT1dFUk1BVEUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dSSUZGSU4sIFVTQl9ERVZJQ0VfSURfU09VTkRLTk9CKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fOTApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDYpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDcpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDgpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDYpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDcpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDYpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDcpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDgpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDkpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT181MDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT181MDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT181MDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT181MDMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT181MDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTAwMSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzEwMDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAzKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzEwMDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA2KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU1BVElPTiwgVVNCX0RFVklDRV9JRF9ESVNDX1NUQUtLQSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS0JHRUFSLCBVU0JfREVWSUNFX0lEX0tCR0VBUl9KQU1TVFVESU8pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tZRSwgVVNCX0RFVklDRV9JRF9LWUVfR1BFTl81NjApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0NBU1NZKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9QT0NLRVRDQVNTWSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTU9CSUxFQ0FTU1kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0pXTSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfRE1NUCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfVU1JUCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfWFJBWTEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1hSQVkyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9WSURFT0NPTSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfQ09NM0xBQikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfVEVMRVBPUlQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX05FVFdPUktBTkFMWVNFUikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfUE9XRVJDT05UUk9MKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9NQUNISU5FVEVTVCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUNDLCBVU0JfREVWSUNFX0lEX01DQ19QTUQxMDI0TFMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01DQywgVVNCX0RFVklDRV9JRF9NQ0NfUE1EMTIwOExTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST0NISVAsIFVTQl9ERVZJQ0VfSURfUElDS0lUMSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUlDUk9DSElQLCBVU0JfREVWSUNFX0lEX1BJQ0tJVDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05BVElPTkFMX1NFTUlDT05EVUNUT1IsIFVTQl9ERVZJQ0VfSURfTl9TX0hBUk1PTlkpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDIwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDMwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDEwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfT05UUkFLLCBVU0JfREVWSUNFX0lEX09OVFJBS19BRFUxMDAgKyAxMDgpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgMTE4KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDIwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfT05UUkFLLCBVU0JfREVWSUNFX0lEX09OVFJBS19BRFUxMDAgKyAzMDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgNDAwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDUwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BBTkpJVCwgMHgwMDAyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgsIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09VTkRHUkFQSCwgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTENEMikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09VTkRHUkFQSCwgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTENEMykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEVOWCwgVVNCX0RFVklDRV9JRF9URU5YX0lCVUREWTEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RFTlgsIFVTQl9ERVZJQ0VfSURfVEVOWF9JQlVERFkyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGIzMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiNjUxKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjY1NCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0xBQlBSTykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0dPVEVNUCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX1NLSVApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9DWUNMT1BTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfTENTUEVDKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgSElEX0FOWV9JRCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEXzRfUEhJREdFVFNFUlZPXzIwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMjApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF84XzhfNF9JRl9LSVQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1lFQUxJTkssIFVTQl9ERVZJQ0VfSURfWUVBTElOS19QMUtfUDRLX0IySykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfWkVST1BMVVMsIDB4MDAwNSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfWkVST1BMVVMsIDB4MDAzMCkgfSwKKwl7IH0KK307CisKK3N0YXRpYyBib29sIGhpZF9pZ25vcmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJc3dpdGNoIChoZGV2LT52ZW5kb3IpIHsKKwljYXNlIFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTOgorCQkvKiBpZ25vcmUgYWxsIENvZGUgTWVyY2VuYXJpZXMgSU9XYXJyaW9yIGRldmljZXMgKi8KKwkJaWYgKGhkZXYtPnByb2R1Y3QgPj0gVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XX0ZJUlNUICYmCisJCQkJaGRldi0+cHJvZHVjdCA8PSBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1dfTEFTVCkKKwkJCXJldHVybiB0cnVlOworCQlicmVhazsKKwljYXNlIFVTQl9WRU5ET1JfSURfTE9HSVRFQ0g6CisJCWlmIChoZGV2LT5wcm9kdWN0ID49IFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV9GSVJTVCAmJgorCQkJCWhkZXYtPnByb2R1Y3QgPD0gVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZX0xBU1QpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuICEhaGlkX21hdGNoX2lkKGhkZXYsIGhpZF9pZ25vcmVfbGlzdCk7Cit9CisKK2ludCBoaWRfYWRkX2RldmljZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwlzdGF0aWMgYXRvbWljX3QgaWQgPSBBVE9NSUNfSU5JVCgwKTsKKwlpbnQgcmV0OworCisJaWYgKFdBUk5fT04oaGRldi0+c3RhdHVzICYgSElEX1NUQVRfQURERUQpKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogd2UgbmVlZCB0byBraWxsIHRoZW0gaGVyZSwgb3RoZXJ3aXNlIHRoZXkgd2lsbCBzdGF5IGFsbG9jYXRlZCB0bworCSAqIHdhaXQgZm9yIGNvbWluZyBkcml2ZXIgKi8KKwlpZiAoaGlkX2lnbm9yZShoZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBYWFggaGFjaywgYW55IG90aGVyIGNsZWFuZXIgc29sdXRpb24gPCAyMCBidXNfaWQgYnl0ZXM/ICovCisJc3ByaW50ZihoZGV2LT5kZXYuYnVzX2lkLCAiJTA0WDolMDRYOiUwNFguJTA0WCIsIGhkZXYtPmJ1cywKKwkJCWhkZXYtPnZlbmRvciwgaGRldi0+cHJvZHVjdCwgYXRvbWljX2luY19yZXR1cm4oJmlkKSk7CisKKwlyZXQgPSBkZXZpY2VfYWRkKCZoZGV2LT5kZXYpOworCWlmICghcmV0KQorCQloZGV2LT5zdGF0dXMgfD0gSElEX1NUQVRfQURERUQ7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2FkZF9kZXZpY2UpOworCisvKioKKyAqIGhpZF9hbGxvY2F0ZV9kZXZpY2UgLSBhbGxvY2F0ZSBuZXcgaGlkIGRldmljZSBkZXNjcmlwdG9yCisgKgorICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgaGlkIGRldmljZSwgc28gdGhhdCBoaWRfZGVzdHJveV9kZXZpY2UgbWlnaHQgYmUKKyAqIHVzZWQgdG8gZnJlZSBpdC4KKyAqCisgKiBOZXcgaGlkX2RldmljZSBwb2ludGVyIGlzIHJldHVybmVkIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBFUlJfUFRSIGVuY29kZWQKKyAqIGVycm9yIHZhbHVlLgorICovCitzdHJ1Y3QgaGlkX2RldmljZSAqaGlkX2FsbG9jYXRlX2RldmljZSh2b2lkKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoZGV2OworCXVuc2lnbmVkIGludCBpOworCWludCByZXQgPSAtRU5PTUVNOworCisJaGRldiA9IGt6YWxsb2Moc2l6ZW9mKCpoZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGhkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKworCWRldmljZV9pbml0aWFsaXplKCZoZGV2LT5kZXYpOworCWhkZXYtPmRldi5yZWxlYXNlID0gaGlkX2RldmljZV9yZWxlYXNlOworCWhkZXYtPmRldi5idXMgPSAmaGlkX2J1c190eXBlOworCisJaGRldi0+Y29sbGVjdGlvbiA9IGtjYWxsb2MoSElEX0RFRkFVTFRfTlVNX0NPTExFQ1RJT05TLAorCQkJc2l6ZW9mKHN0cnVjdCBoaWRfY29sbGVjdGlvbiksIEdGUF9LRVJORUwpOworCWlmIChoZGV2LT5jb2xsZWN0aW9uID09IE5VTEwpCisJCWdvdG8gZXJyOworCWhkZXYtPmNvbGxlY3Rpb25fc2l6ZSA9IEhJRF9ERUZBVUxUX05VTV9DT0xMRUNUSU9OUzsKKworCWZvciAoaSA9IDA7IGkgPCBISURfUkVQT1JUX1RZUEVTOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZoZGV2LT5yZXBvcnRfZW51bVtpXS5yZXBvcnRfbGlzdCk7CisKKwlyZXR1cm4gaGRldjsKK2VycjoKKwlwdXRfZGV2aWNlKCZoZGV2LT5kZXYpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChoaWRfYWxsb2NhdGVfZGV2aWNlKTsKKworc3RhdGljIHZvaWQgaGlkX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaWYgKGhkZXYtPnN0YXR1cyAmIEhJRF9TVEFUX0FEREVEKSB7CisJCWRldmljZV9kZWwoJmhkZXYtPmRldik7CisJCWhkZXYtPnN0YXR1cyAmPSB+SElEX1NUQVRfQURERUQ7CisJfQorfQorCisvKioKKyAqIGhpZF9kZXN0cm95X2RldmljZSAtIGZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgZGV2aWNlCisgKgorICogQGhkZXY6IGhpZCBkZXZpY2UKKyAqCisgKiBJZiB5b3UgYWxsb2NhdGUgaGlkX2RldmljZSB0aHJvdWdoIGhpZF9hbGxvY2F0ZV9kZXZpY2UsIHlvdSBzaG91bGQgZXZlcgorICogZnJlZSBieSB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIGhpZF9kZXN0cm95X2RldmljZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwloaWRfcmVtb3ZlX2RldmljZShoZGV2KTsKKwlwdXRfZGV2aWNlKCZoZGV2LT5kZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2Rlc3Ryb3lfZGV2aWNlKTsKKworaW50IF9faGlkX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCWNvbnN0IGNoYXIgKm1vZF9uYW1lKQoreworCWhkcnYtPmRyaXZlci5uYW1lID0gaGRydi0+bmFtZTsKKwloZHJ2LT5kcml2ZXIuYnVzID0gJmhpZF9idXNfdHlwZTsKKwloZHJ2LT5kcml2ZXIub3duZXIgPSBvd25lcjsKKwloZHJ2LT5kcml2ZXIubW9kX25hbWUgPSBtb2RfbmFtZTsKKworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmhkcnYtPmRyaXZlcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX2hpZF9yZWdpc3Rlcl9kcml2ZXIpOworCit2b2lkIGhpZF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydikKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmaGRydi0+ZHJpdmVyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGhpZF91bnJlZ2lzdGVyX2RyaXZlcik7CisKKyNpZmRlZiBDT05GSUdfSElEX0NPTVBBVAorc3RhdGljIHZvaWQgaGlkX2NvbXBhdF9sb2FkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCit7CisJcmVxdWVzdF9tb2R1bGUoImhpZC1kdW1teSIpOworfQorc3RhdGljIERFQ0xBUkVfV09SSyhoaWRfY29tcGF0X3dvcmssIGhpZF9jb21wYXRfbG9hZCk7CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmhpZF9jb21wYXRfd3E7CisjZW5kaWYKKwogc3RhdGljIGludCBfX2luaXQgaGlkX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaGlkcmF3X2luaXQoKTsKKwlpbnQgcmV0OworCisJcmV0ID0gYnVzX3JlZ2lzdGVyKCZoaWRfYnVzX3R5cGUpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJISUQ6IGNhbid0IHJlZ2lzdGVyIGhpZCBidXNcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBoaWRyYXdfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2J1czsKKworI2lmZGVmIENPTkZJR19ISURfQ09NUEFUCisJaGlkX2NvbXBhdF93cSA9IGNyZWF0ZV93b3JrcXVldWUoImhpZF9jb21wYXQiKTsKKwlpZiAoIWhpZF9jb21wYXRfd3EpIHsKKwkJaGlkcmF3X2V4aXQoKTsKKwkJZ290byBlcnI7CisJfQorCXF1ZXVlX3dvcmsoaGlkX2NvbXBhdF93cSwgJmhpZF9jb21wYXRfd29yayk7CisjZW5kaWYKKworCXJldHVybiAwOworZXJyX2J1czoKKwlidXNfdW5yZWdpc3RlcigmaGlkX2J1c190eXBlKTsKK2VycjoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaGlkX2V4aXQodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfSElEX0NPTVBBVAorCWRlc3Ryb3lfd29ya3F1ZXVlKGhpZF9jb21wYXRfd3EpOworI2VuZGlmCiAJaGlkcmF3X2V4aXQoKTsKKwlidXNfdW5yZWdpc3RlcigmaGlkX2J1c190eXBlKTsKIH0KIAogbW9kdWxlX2luaXQoaGlkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWN5cHJlc3MuYyBiL2RyaXZlcnMvaGlkL2hpZC1jeXByZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ2OWQyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jeXByZXNzLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3Igc29tZSBjeXByZXNzICJzcGVjaWFsIiBkZXZpY2VzCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgUGF1bCBXYWxtc2xleQorICogIENvcHlyaWdodCAoYykgMjAwOCBKaXJpIFNsYWJ5CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKyNkZWZpbmUgQ1BfUkRFU0NfU1dBUFBFRF9NSU5fTUFYCTB4MDEKKyNkZWZpbmUgQ1BfMldIRUVMX01PVVNFX0hBQ0sJCTB4MDIKKyNkZWZpbmUgQ1BfMldIRUVMX01PVVNFX0hBQ0tfT04JCTB4MDQKKworLyoKKyAqIFNvbWUgVVNCIGJhcmNvZGUgcmVhZGVycyBmcm9tIGN5cHJlc3MgaGF2ZSB1c2FnZSBtaW4gYW5kIHVzYWdlIG1heCBpbgorICogdGhlIHdyb25nIG9yZGVyCisgKi8KK3N0YXRpYyB2b2lkIGNwX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICghKHF1aXJrcyAmIENQX1JERVNDX1NXQVBQRURfTUlOX01BWCkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCByc2l6ZSAtIDQ7IGkrKykKKwkJaWYgKHJkZXNjW2ldID09IDB4MjkgJiYgcmRlc2NbaSArIDJdID09IDB4MTkpIHsKKwkJCV9fdTggdG1wOworCisJCQlyZGVzY1tpXSA9IDB4MTk7CisJCQlyZGVzY1tpICsgMl0gPSAweDI5OworCQkJdG1wID0gcmRlc2NbaSArIDNdOworCQkJcmRlc2NbaSArIDNdID0gcmRlc2NbaSArIDFdOworCQkJcmRlc2NbaSArIDFdID0gdG1wOworCQl9Cit9CisKK3N0YXRpYyBpbnQgY3BfaW5wdXRfbWFwcGVkKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmICghKHF1aXJrcyAmIENQXzJXSEVFTF9NT1VTRV9IQUNLKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfUkVMICYmIHVzYWdlLT5jb2RlID09IFJFTF9XSEVFTCkKKwkJc2V0X2JpdChSRUxfSFdIRUVMLCAqYml0KTsKKwlpZiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA1KQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmICghKGhkZXYtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgfHwgIWZpZWxkLT5oaWRpbnB1dCB8fAorCQkJIXVzYWdlLT50eXBlIHx8ICEocXVpcmtzICYgQ1BfMldIRUVMX01PVVNFX0hBQ0spKQorCQlyZXR1cm4gMDsKKworCWlmICh1c2FnZS0+aGlkID09IDB4MDAwOTAwMDUpIHsKKwkJaWYgKHZhbHVlKQorCQkJcXVpcmtzIHw9ICBDUF8yV0hFRUxfTU9VU0VfSEFDS19PTjsKKwkJZWxzZQorCQkJcXVpcmtzICY9IH5DUF8yV0hFRUxfTU9VU0VfSEFDS19PTjsKKwkJaGlkX3NldF9kcnZkYXRhKGhkZXYsICh2b2lkICopcXVpcmtzKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHVzYWdlLT5jb2RlID09IFJFTF9XSEVFTCAmJiAocXVpcmtzICYgQ1BfMldIRUVMX01PVVNFX0hBQ0tfT04pKSB7CisJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKKworCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIFJFTF9IV0hFRUwsIHZhbHVlKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3BfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9IGlkLT5kcml2ZXJfZGF0YTsKKwlpbnQgcmV0OworCisJaGlkX3NldF9kcnZkYXRhKGhkZXYsICh2b2lkICopcXVpcmtzKTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBjcF9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzEpLAorCQkuZHJpdmVyX2RhdGEgPSBDUF9SREVTQ19TV0FQUEVEX01JTl9NQVggfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ1lQUkVTUywgVVNCX0RFVklDRV9JRF9DWVBSRVNTX0JBUkNPREVfMiksCisJCS5kcml2ZXJfZGF0YSA9IENQX1JERVNDX1NXQVBQRURfTUlOX01BWCB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfTU9VU0UpLAorCQkuZHJpdmVyX2RhdGEgPSBDUF8yV0hFRUxfTU9VU0VfSEFDSyB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBjcF9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGNwX2RyaXZlciA9IHsKKwkubmFtZSA9ICJjeXByZXNzIiwKKwkuaWRfdGFibGUgPSBjcF9kZXZpY2VzLAorCS5yZXBvcnRfZml4dXAgPSBjcF9yZXBvcnRfZml4dXAsCisJLmlucHV0X21hcHBlZCA9IGNwX2lucHV0X21hcHBlZCwKKwkuZXZlbnQgPSBjcF9ldmVudCwKKwkucHJvYmUgPSBjcF9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgY3BfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZjcF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBjcF9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZjcF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjcF9pbml0KTsKK21vZHVsZV9leGl0KGNwX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKGN5cHJlc3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWRlbGwuYyBiL2RyaXZlcnMvaGlkL2hpZC1kZWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwZDBkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1kZWxsLmMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBzb21lIGRlbGwgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0YXRpYyBpbnQgZGVsbF9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJdXNiaGlkX3NldF9sZWRzKGhkZXYpOworCisJcmV0dXJuIDA7CitlcnJfZnJlZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgZGVsbF9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RFTEwsIFVTQl9ERVZJQ0VfSURfREVMTF9XNzY1OCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfREVMTCwgVVNCX0RFVklDRV9JRF9ERUxMX1NLODExNSkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgZGVsbF9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGRlbGxfZHJpdmVyID0geworCS5uYW1lID0gImRlbGwiLAorCS5pZF90YWJsZSA9IGRlbGxfZGV2aWNlcywKKwkucHJvYmUgPSBkZWxsX3Byb2JlLAorfTsKKworc3RhdGljIGludCBkZWxsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmZGVsbF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBkZWxsX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmRlbGxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZGVsbF9pbml0KTsKK21vZHVsZV9leGl0KGRlbGxfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoZGVsbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZHVtbXkuYyBiL2RyaXZlcnMvaGlkL2hpZC1kdW1teS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNDhmODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtZHVtbXkuYwpAQCAtMCwwICsxLDcyIEBACisjaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKworc3RhdGljIGludCBfX2luaXQgaGlkX2R1bW15X2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfSElEX0E0VEVDSF9NT0RVTEUKKwlISURfQ09NUEFUX0NBTExfRFJJVkVSKGE0dGVjaCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSElEX0FQUExFX01PRFVMRQorCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoYXBwbGUpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9CRUxLSU5fTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihiZWxraW4pOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9CUklHSFRfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihicmlnaHQpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9DSEVSUllfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihjaGVycnkpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9DSElDT05ZX01PRFVMRQorCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoY2hpY29ueSk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSElEX0NZUFJFU1NfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihjeXByZXNzKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ISURfREVMTF9NT0RVTEUKKwlISURfQ09NUEFUX0NBTExfRFJJVkVSKGRlbGwpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9FWktFWV9NT0RVTEUKKwlISURfQ09NUEFUX0NBTExfRFJJVkVSKGV6a2V5KTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ISURfR1lSQVRJT05fTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihneXJhdGlvbik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSElEX0xPR0lURUNIX01PRFVMRQorCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIobG9naXRlY2gpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9NSUNST1NPRlRfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihtaWNyb3NvZnQpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9NT05URVJFWV9NT0RVTEUKKwlISURfQ09NUEFUX0NBTExfRFJJVkVSKG1vbnRlcmV5KTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ISURfUEFOVEhFUkxPUkRfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihwYW50aGVybG9yZCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSElEX1BFVEFMWU5YX01PRFVMRQorCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIocGV0YWx5bngpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9TQU1TVU5HX01PRFVMRQorCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoc2Ftc3VuZyk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSElEX1NPTllfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihzb255KTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ISURfU1VOUExVU19NT0RVTEUKKwlISURfQ09NUEFUX0NBTExfRFJJVkVSKHN1bnBsdXMpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1RIUlVTVE1BU1RFUl9GRl9NT0RVTEUKKwlISURfQ09NUEFUX0NBTExfRFJJVkVSKHRocnVzdG1hc3Rlcik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWkVST1BMVVNfRkZfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUih6ZXJvcGx1cyk7CisjZW5kaWYKKworCXJldHVybiAtRUlPOworfQorbW9kdWxlX2luaXQoaGlkX2R1bW15X2luaXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYyBiL2RyaXZlcnMvaGlkL2hpZC1lemtleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYjQyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgZXprZXkgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworI2RlZmluZSBlel9tYXBfcmVsKGMpCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfUkVMLCAoYykpCisjZGVmaW5lIGV6X21hcF9rZXkoYykJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIChjKSkKKworc3RhdGljIGludCBlel9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCWNhc2UgMHgyMzA6IGV6X21hcF9rZXkoQlROX01PVVNFKTsJYnJlYWs7CisJY2FzZSAweDIzMTogZXpfbWFwX3JlbChSRUxfV0hFRUwpOwlicmVhazsKKwkvKgorCSAqIHRoaXMga2V5Ym9hcmQgaGFzIGEgc2Nyb2xsd2hlZWwgaW1wbGVtZW50ZWQgaW4KKwkgKiB0b3RhbGx5IGJyb2tlbiB3YXkuIFdlIG1hcCB0aGlzIHVzYWdlIHRlbXBvcmFyaWx5CisJICogdG8gSFdIRUVMIGFuZCBoYW5kbGUgaXQgaW4gdGhlIGV2ZW50IHF1aXJrIGhhbmRsZXIKKwkgKi8KKwljYXNlIDB4MjMyOiBlel9tYXBfcmVsKFJFTF9IV0hFRUwpOwlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXpfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJaWYgKCEoaGRldi0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB8fCAhZmllbGQtPmhpZGlucHV0IHx8CisJCQkhdXNhZ2UtPnR5cGUpCisJCXJldHVybiAwOworCisJLyogaGFuZGxlIHRoZSB0ZW1wb3JhcnkgcXVpcmt5IG1hcHBpbmcgdG8gSFdIRUVMICovCisJaWYgKHVzYWdlLT50eXBlID09IEVWX1JFTCAmJiB1c2FnZS0+Y29kZSA9PSBSRUxfSFdIRUVMKSB7CisJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCBSRUxfV0hFRUwsIC12YWx1ZSk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgZXpfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FWktFWSwgVVNCX0RFVklDRV9JRF9CVENfODE5MykgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgZXpfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBlel9kcml2ZXIgPSB7CisJLm5hbWUgPSAiZXprZXkiLAorCS5pZF90YWJsZSA9IGV6X2RldmljZXMsCisJLmlucHV0X21hcHBpbmcgPSBlel9pbnB1dF9tYXBwaW5nLAorCS5ldmVudCA9IGV6X2V2ZW50LAorfTsKKworc3RhdGljIGludCBlel9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmV6X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGV6X2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmV6X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGV6X2luaXQpOworbW9kdWxlX2V4aXQoZXpfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoZXprZXkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWd5cmF0aW9uLmMgYi9kcml2ZXJzL2hpZC9oaWQtZ3lyYXRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzUxMjBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLWd5cmF0aW9uLmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBzb21lIGd5cmF0aW9uICJzcGVjaWFsIiBkZXZpY2VzCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgUGF1bCBXYWxtc2xleQorICogIENvcHlyaWdodCAoYykgMjAwOCBKaXJpIFNsYWJ5CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKyNkZWZpbmUgZ3lfbWFwX2tleV9jbGVhcihjKQloaWRfbWFwX3VzYWdlX2NsZWFyKGhpLCB1c2FnZSwgYml0LCBtYXgsIFwKKwkJCQkJRVZfS0VZLCAoYykpCitzdGF0aWMgaW50IGd5cmF0aW9uX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfTE9HSVZFTkRPUikKKwkJcmV0dXJuIDA7CisKKwlzZXRfYml0KEVWX1JFUCwgaGktPmlucHV0LT5ldmJpdCk7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJLyogUmVwb3J0ZWQgb24gR3lyYXRpb24gTUNFIFJlbW90ZSAqLworCWNhc2UgMHgwMGQ6IGd5X21hcF9rZXlfY2xlYXIoS0VZX0hPTUUpOwkJYnJlYWs7CisJY2FzZSAweDAyNDogZ3lfbWFwX2tleV9jbGVhcihLRVlfRFZEKTsJCWJyZWFrOworCWNhc2UgMHgwMjU6IGd5X21hcF9rZXlfY2xlYXIoS0VZX1BWUik7CQlicmVhazsKKwljYXNlIDB4MDQ2OiBneV9tYXBfa2V5X2NsZWFyKEtFWV9NRURJQSk7CWJyZWFrOworCWNhc2UgMHgwNDc6IGd5X21hcF9rZXlfY2xlYXIoS0VZX01QMyk7CQlicmVhazsKKwljYXNlIDB4MDQ5OiBneV9tYXBfa2V5X2NsZWFyKEtFWV9DQU1FUkEpOwlicmVhazsKKwljYXNlIDB4MDRhOiBneV9tYXBfa2V5X2NsZWFyKEtFWV9WSURFTyk7CWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGd5cmF0aW9uX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKKworCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSA9PSBISURfVVBfR0VOREVTSyAmJgorCQkJKHVzYWdlLT5oaWQgJiAweGZmKSA9PSAweDgyKSB7CisJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUsIDEpOworCQlpbnB1dF9zeW5jKGlucHV0KTsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSwgMCk7CisJCWlucHV0X3N5bmMoaW5wdXQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGd5cmF0aW9uX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1lSQVRJT04sIFVTQl9ERVZJQ0VfSURfR1lSQVRJT05fUkVNT1RFKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBneXJhdGlvbl9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGd5cmF0aW9uX2RyaXZlciA9IHsKKwkubmFtZSA9ICJneXJhdGlvbiIsCisJLmlkX3RhYmxlID0gZ3lyYXRpb25fZGV2aWNlcywKKwkuaW5wdXRfbWFwcGluZyA9IGd5cmF0aW9uX2lucHV0X21hcHBpbmcsCisJLmV2ZW50ID0gZ3lyYXRpb25fZXZlbnQsCit9OworCitzdGF0aWMgaW50IGd5cmF0aW9uX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmZ3lyYXRpb25fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgZ3lyYXRpb25fZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmZ3lyYXRpb25fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZ3lyYXRpb25faW5pdCk7Cittb2R1bGVfZXhpdChneXJhdGlvbl9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworSElEX0NPTVBBVF9MT0FEX0RSSVZFUihneXJhdGlvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmggYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhMWJhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaApAQCAtMCwwICsxLDQwNiBAQAorLyoKKyAqICBVU0IgSElEIHF1aXJrcyBzdXBwb3J0IGZvciBMaW51eAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTkgQW5kcmVhcyBHYWwKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorICogIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEhhYm91c3RhayA8bWlrZS1AY2luY2kucnIuY29tPiBmb3IgQ29uY2VwdDIsIEluYworICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA3IFBhdWwgV2FsbXNsZXkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIEhJRF9JRFNfSF9GSUxFCisjZGVmaW5lIEhJRF9JRFNfSF9GSUxFCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BNFRFQ0gJCTB4MDlkYQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVCTB4MDAwNgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0E0VEVDSF9YNV8wMDVECTB4MDAwYQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQUFTSElNQQkJMHgwNmQ2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUFTSElNQV9HQU1FUEFECTB4MDAyNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FBU0hJTUFfUFJFREFUT1IJMHgwMDI2CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BQ0VDQUQJCTB4MDQ2MAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FDRUNBRF9GTEFJUgkweDAwMDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BQ0VDQURfMzAyCTB4MDAwOAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQURTX1RFQ0ggCQkweDA2ZTEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BRFNfVEVDSF9SQURJT19TSTQ3MFgJMHhhMTU1CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BRkFURUNICQkweDE1YTQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BRkFURUNIX0FGOTAxNgkweDkwMTYKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FJUFRFSwkJMHgwOGNhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzAxCQkweDAwMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMTAJCTB4MDAxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18yMAkJMHgwMDIwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIxCQkweDAwMjEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMjIJCTB4MDAyMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18yMwkJMHgwMDIzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzI0CQkweDAwMjQKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FJUkNBQkxFCQkweDE2Q0EKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVJDQUJMRTEJCTB4MTUwMgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQUxDT1IJCTB4MDU4ZgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FMQ09SX1VTQlJTMjMyCTB4OTcyMAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQUxQUwkJMHgwNDMzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfSUJNX0dBTUVQQUQJMHgxMTAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BUFBMRQkJMHgwNWFjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUlHSFRZTU9VU0UJMHgwMzA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fQU5TSQkweDAyMGUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9JU08JMHgwMjBmCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSX0FOU0kJMHgwMjE0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSX0lTTwkweDAyMTUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfSklTCTB4MDIxNgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjNfQU5TSQkweDAyMTcKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0lTTwkweDAyMTgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0pJUwkweDAyMTkKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0FOU0kJMHgwMjFhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9JU08JMHgwMjFiCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMJMHgwMjFjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0FOU0kJMHgwMjIwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0lTTwkweDAyMjEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSklTCTB4MDIyMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfQU5TSQkweDAyMjMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0lTTwkweDAyMjQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0pJUwkweDAyMjUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0FOU0kgICAgMHgwMjI5CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9IRl9JU08gICAgIDB4MDIyYQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfSklTICAgICAweDAyMmIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfQU5TSSAgMHgwMjJjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTX0lTTyAgIDB4MDIyZAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19KSVMgICAweDAyMmUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9BTlNJCTB4MDIzMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkcyX0lTTwkweDAyMzEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9KSVMJMHgwMjMyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fVFBfT05MWQkweDAzMGEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIxX1RQX09OTFkJMHgwMzBiCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQVRWX0lSQ09OVFJPTAkweDgyNDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9JUkNPTlRST0w0CTB4ODI0MgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQVNVUwkJMHgwYjA1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVNVU19MQ00JCTB4MTcyNgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQVRFTgkJMHgwNTU3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVRFTl9VQzEwMEtNCTB4MjAwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fQ1MxMjRVCTB4MjIwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fMlBPUlRLVk0JMHgyMjA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTQkweDIyMDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOXzRQT1JUS1ZNQwkweDIyMDgKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FWRVJNRURJQQkJMHgwN2NhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVZFUl9GTV9NUjgwMAkweGI4MDAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0JFTEtJTiAgICAgICAgICAgMHgwNTBkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRkxJUF9LVk0gICAgICAgICAweDMyMDEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0JSSUdIVAkJMHgxMjQxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQlJJR0hUX0FCTlQyCTB4MTUwMworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQkVSS1NISVJFCQkweDBjOTgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9CRVJLU0hJUkVfUENXRAkweDExNDAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0NIRVJSWQkJMHgwNDZhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0hFUlJZX0NZTU9USU9OCTB4MDAyMworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQ0hJQwkJMHgwNWZlCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0hJQ19HQU1FUEFECTB4MDAxNAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQ0hJQ09OWQkJMHgwNGYyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0hJQ09OWV9UQUNUSUNBTF9QQUQJMHgwNDE4CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DSURDCQkweDE2NzcKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0NNRURJQQkJMHgwZDhjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ00xMDkJCTB4MDAwZQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTCQkweDA3YzAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XX0ZJUlNUCTB4MTUwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1dfTEFTVAkweDE1ZmYKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0NZR05BTAkJMHgxMGM0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lHTkFMX1JBRElPX1NJNDcwWAkweDgxOGEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0NZUFJFU1MJCTB4MDRiNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfTU9VU0UJMHgwMDAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19ISURDT00JMHg1NTAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19VTFRSQU1PVVNFCTB4NzQxNworI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8xCTB4ZGU2MQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8yCTB4ZGU2NAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfREVMTAkJMHg0MTNjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfREVMTF9XNzY1OAkweDIwMDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9ERUxMX1NLODExNQkweDIxMDUKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0RFTE9STUUJCTB4MTE2MworI2RlZmluZSBVU0JfREVWSUNFX0lEX0RFTE9STUVfRUFSVEhNQVRFIDB4MDEwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0RFTE9STUVfRU1fTFQyMAkweDAyMDAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0RNSQkJMHgwYzBiCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRE1JX0VOQwkJMHg1ZmFiCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FTE8JCTB4MDRFNworI2RlZmluZSBVU0JfREVWSUNFX0lEX0VMT19UUzI3MDAJMHgwMDIwCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FU1NFTlRJQUxfUkVBTElUWQkweDBkN2YKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9FU1NFTlRJQUxfUkVBTElUWV9QNSAweDAxMDAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0VaS0VZIAkJMHgwNTE4CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQlRDXzgxOTMJCTB4MDAwMgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfR0FNRVJPTgkJMHgwODEwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BTWF9BREFQVE9SCTB4MDAwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfR0VORVJBTF9UT1VDSAkweDBkZmMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0dMQUIJCTB4MDZjMgorI2RlZmluZSBVU0JfREVWSUNFX0lEXzRfUEhJREdFVFNFUlZPXzMwCTB4MDAzOAorI2RlZmluZSBVU0JfREVWSUNFX0lEXzFfUEhJREdFVFNFUlZPXzMwCTB4MDAzOQorI2RlZmluZSBVU0JfREVWSUNFX0lEXzBfMF80X0lGX0tJVAkweDAwNDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF8wXzE2XzE2X0lGX0tJVAkweDAwNDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF84XzhfOF9JRl9LSVQJMHgwMDQ1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfMF84XzdfSUZfS0lUCTB4MDA1MQorI2RlZmluZSBVU0JfREVWSUNFX0lEXzBfOF84X0lGX0tJVAkweDAwNTMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9QSElER0VUX01PVE9SQ09OVFJPTAkweDAwNTgKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0dPVE9QCQkweDA4ZjIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TVVBFUl9RMgkJMHgwMDdmCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR09HT1BFTgkJMHgwMGNlCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUEVOUE9XRVIJCTB4MDBmNAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfR1JFRU5BU0lBCQkweDBlOGYKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0dSRVRBR01BQ0JFVEgJMHgwOTcxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1JFVEFHTUFDQkVUSF9IVUVZCTB4MjAwNQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfR1JJRkZJTgkJMHgwNzdkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUE9XRVJNQVRFCQkweDA0MTAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREtOT0IJCTB4MDRBQQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfR1RDTwkJMHgwNzhjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT185MAkJMHgwMDkwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAJCTB4MDEwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAxCQkweDAxMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMwkJMHgwMTAzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDQJCTB4MDEwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTA1CQkweDAxMDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwNgkJMHgwMTA2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDcJCTB4MDEwNworI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTA4CQkweDAxMDgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwMAkJMHgwMjAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18yMDEJCTB4MDIwMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMjAyCQkweDAyMDIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwMwkJMHgwMjAzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18yMDQJCTB4MDIwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMjA1CQkweDAyMDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwNgkJMHgwMjA2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18yMDcJCTB4MDIwNworI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzAwCQkweDAzMDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwMQkJMHgwMzAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDIJCTB4MDMwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzAzCQkweDAzMDMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwNAkJMHgwMzA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDUJCTB4MDMwNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzA2CQkweDAzMDYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwNwkJMHgwMzA3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDgJCTB4MDMwOAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzA5CQkweDAzMDkKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzQwMAkJMHgwNDAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT180MDEJCTB4MDQwMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNDAyCQkweDA0MDIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzQwMwkJMHgwNDAzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT180MDQJCTB4MDQwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNDA1CQkweDA0MDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzUwMAkJMHgwNTAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT181MDEJCTB4MDUwMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNTAyCQkweDA1MDIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzUwMwkJMHgwNTAzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT181MDQJCTB4MDUwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwMAkJMHgxMDAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAxCQkweDEwMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDIJCTB4MTAwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwMwkJMHgxMDAzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA0CQkweDEwMDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDUJCTB4MTAwNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNgkJMHgxMDA2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA3CQkweDEwMDcKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0dZUkFUSU9OCQkweDBjMTYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HWVJBVElPTl9SRU1PVEUJMHgwMDAyCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9IQVBQCQkweDA3OGIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9VR0NJX0RSSVZJTkcJMHgwMDEwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVUdDSV9GTFlJTkcJMHgwMDIwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVUdDSV9GSUdIVElORwkweDAwMzAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0lNQVRJT04JCTB4MDcxOAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0RJU0NfU1RBS0tBCTB4ZDAwMAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfS0JHRUFSCQkweDA4NGUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9LQkdFQVJfSkFNU1RVRElPCTB4MTAwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTEFCVEVDCQkweDEwMjAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MQUJURUNfV0lSRUxFU1NfS0VZQk9BUkQJMHgwMDA2CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9MRAkJMHgwZjExCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfQ0FTU1kJCTB4MTAwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1BPQ0tFVENBU1NZCTB4MTAxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01PQklMRUNBU1NZCTB4MTAyMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX0pXTQkJMHgxMDgwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfRE1NUAkJMHgxMDgxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfVU1JUAkJMHgxMDkwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfWFJBWTEJCTB4MTEwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1hSQVkyCQkweDExMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9WSURFT0NPTQkweDEyMDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9DT00zTEFCCTB4MjAwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1RFTEVQT1JUCTB4MjAxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX05FVFdPUktBTkFMWVNFUiAweDIwMjAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9QT1dFUkNPTlRST0wJMHgyMDMwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTUFDSElORVRFU1QJMHgyMDQwCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSAkJMHgwNDZkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTFgzCTB4YzA0NAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1YxNTAJMHhjMDQ3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUkVDRUlWRVIJMHhjMTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV9GSVJTVCAgMHhjMTEwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV9MQVNUIDB4YzE0ZgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JVTUJMRVBBRAkweGMyMTEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9FWFRSRU1FXzNECTB4YzIxNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JVTUJMRVBBRDIJMHhjMjE4CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEMl8yCTB4YzIxOQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJTkdNQU5fRjNECTB4YzI4MworI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0ZPUkNFM0RfUFJPCTB4YzI4NgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dIRUVMCTB4YzI5NAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX01PTU9fV0hFRUwJMHhjMjk1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRUxJVEVfS0JECTB4YzMwYQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0tCRAkweGMzMTEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSCTB4YzUwYworI2RlZmluZSBVU0JfREVWSUNFX0lEX1M1MTBfUkVDRUlWRVJfMgkweGM1MTcKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9DT1JETEVTU19ERVNLVE9QX0xYNTAwCTB4YzUxMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX01YMzAwMF9SRUNFSVZFUgkweGM1MTMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fREVTS1RPUAkweGM3MDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fRURHRQkweGM3MTQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fTUlOSQkweGM3MWYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMMgkweGNhMDMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX01DQwkJMHgwOWRiCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUNDX1BNRDEwMjRMUwkweDAwNzYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQ0NfUE1EMTIwOExTCTB4MDA3YQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTUdFCQkweDA0NjMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NR0VfVVBTCQkweGZmZmYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NR0VfVVBTMQkJMHgwMDAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9NSUNST0NISVAJCTB4MDRkOAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BJQ0tJVDEJCTB4MDAzMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BJQ0tJVDIJCTB4MDAzMworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZUCQkweDA0NWUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TSURFV0lOREVSX0dWCTB4MDAzYgorI2RlZmluZSBVU0JfREVWSUNFX0lEX1dJUkVMRVNTX09QVElDQUxfREVTS1RPUF8zXzAgMHgwMDlkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfTkU0SwkJMHgwMGRiCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfTEs2SwkJMHgwMGY5CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfUFJFU0VOVEVSXzhLX0JUCTB4MDcwMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX01TX1BSRVNFTlRFUl84S19VU0IJMHgwNzEzCisKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX01PTlRFUkVZCQkweDA1NjYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HRU5JVVNfS0IyOUUJMHgzMDA0CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9OQ1IJCTB4MDQwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX05DUl9GSVJTVAkJMHgwMzAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTkNSX0xBU1QJCTB4MDNmZgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTkFUSU9OQUxfU0VNSUNPTkRVQ1RPUiAweDA0MDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9OX1NfSEFSTU9OWSAgICAgICAweGMzNTkKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX05BVFNVICAgICAgICAgICAgIDB4MDhiNworI2RlZmluZSBVU0JfREVWSUNFX0lEX05BVFNVX0dBTUVQQUQgICAgIDB4MDAwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTkVDCQkweDA3M2UKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9ORUNfVVNCX0dBTUVfUEFECTB4MDMwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfT05UUkFLCQkweDBhMDcKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwCTB4MDA2NAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfUEFOSklUCQkweDEzNGMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1BBTlRIRVJMT1JECTB4MDgxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BBTlRIRVJMT1JEX1RXSU5fVVNCX0pPWVNUSUNLCTB4MDAwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfUEVUQUxZTlgJCTB4MThiMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BFVEFMWU5YX01BWFRFUl9SRU1PVEUJMHgwMDM3CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QTEFZRE9UQ09NCTB4MGI0MworI2RlZmluZSBVU0JfREVWSUNFX0lEX1BMQVlET1RDT01fRU1TX1VTQklJCTB4MDAwMworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfU0FJVEVLCQkweDA2YTMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQUlURUtfUlVNQkxFUEFECTB4ZmYxNworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfU0FNU1VORwkJMHgwNDE5CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUJMHgwMDAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TT05ZCQkJMHgwNTRjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUgkweDAyNjgKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgJMHgxNWMyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRAkweDAwMzgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTENEMgkweDAwMzYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTENEMwkweDAwMzQKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1NVTgkJMHgwNDMwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUkFSSVRBTl9LVk1fRE9OR0xFCTB4Y2RhYgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfU1VOUExVUwkJMHgwNGZjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU1VOUExVU19XREVTS1RPUAkweDA1ZDgKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1RFTlgJCTB4MTEzMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMQkweDAwMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9URU5YX0lCVUREWTIJMHgwMDAyCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIJMHgwNDRmCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UT1BNQVgJCTB4MDY2MworI2RlZmluZSBVU0JfREVWSUNFX0lEX1RPUE1BWF9DT0JSQVBBRAkweDAxMDMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1RVUkJPWAkJMHgwNjJhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVFVSQk9YX0tFWUJPQVJECTB4MDIwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfVkVSTklFUgkJMHgwOGY3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9MQUJQUk8JMHgwMDAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9HT1RFTVAJMHgwMDAyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9TS0lQCTB4MDAwMworI2RlZmluZSBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfQ1lDTE9QUwkweDAwMDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0xDU1BFQwkweDAwMDYKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1dBQ09NCQkweDA1NmEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUAkJMHgwOTI1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMjAJMHg4MTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMjAJMHg4MTA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfOF84XzRfSUZfS0lUCTB4ODIwMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX1FVQURfVVNCX0pPWVBBRAkweDg4MDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9EVUFMX1VTQl9KT1lQQUQJMHg4ODY2CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVBfTFRECTB4NjY2NgorI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUF9MVEQyCTB4NjY3NworI2RlZmluZSBVU0JfREVWSUNFX0lEX1NNQVJUSk9ZX0RVQUxfUExVUyAweDg4MDIKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1lFQUxJTksJCTB4Njk5MworI2RlZmluZSBVU0JfREVWSUNFX0lEX1lFQUxJTktfUDFLX1A0S19CMksJMHhiMDAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9aRVJPUExVUwkJMHgwYzEyCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LWUUJCTB4MDQ1OAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0tZRV9HUEVOXzU2MAkweDUwMDMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQtcXVpcmtzLmMgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQtcXVpcmtzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZmVlYTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LXF1aXJrcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDg0ICswLDAgQEAKLS8qCi0gKiAgSElELWlucHV0IHVzYWdlIG1hcHBpbmcgcXVpcmtzCi0gKgotICogIFRoaXMgaXMgdXNlZCB0byBoYW5kbGUgSElELWlucHV0IG1hcHBpbmdzIGZvciBkZXZpY2VzIHZpb2xhdGluZwotICogIEhVVCAxLjEyIHNwZWNpZmljYXRpb24uCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSmlyaSBLb3NpbmEKLSAqLwotCi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaGlkLmg+Ci0KLSNkZWZpbmUgbWFwX2FicyhjKSAgICAgIGRvIHsgdXNhZ2UtPmNvZGUgPSBjOyB1c2FnZS0+dHlwZSA9IEVWX0FCUzsgKmJpdCA9IGlucHV0LT5hYnNiaXQ7ICptYXggPSBBQlNfTUFYOyB9IHdoaWxlICgwKQotI2RlZmluZSBtYXBfcmVsKGMpICAgICAgZG8geyB1c2FnZS0+Y29kZSA9IGM7IHVzYWdlLT50eXBlID0gRVZfUkVMOyAqYml0ID0gaW5wdXQtPnJlbGJpdDsgKm1heCA9IFJFTF9NQVg7IH0gd2hpbGUgKDApCi0jZGVmaW5lIG1hcF9rZXkoYykgICAgICBkbyB7IHVzYWdlLT5jb2RlID0gYzsgdXNhZ2UtPnR5cGUgPSBFVl9LRVk7ICpiaXQgPSBpbnB1dC0+a2V5Yml0OyAqbWF4ID0gS0VZX01BWDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgbWFwX2xlZChjKSAgICAgIGRvIHsgdXNhZ2UtPmNvZGUgPSBjOyB1c2FnZS0+dHlwZSA9IEVWX0xFRDsgKmJpdCA9IGlucHV0LT5sZWRiaXQ7ICptYXggPSBMRURfTUFYOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIG1hcF9hYnNfY2xlYXIoYykgICAgICAgIGRvIHsgbWFwX2FicyhjKTsgY2xlYXJfYml0KGMsICpiaXQpOyB9IHdoaWxlICgwKQotI2RlZmluZSBtYXBfa2V5X2NsZWFyKGMpICAgICAgICBkbyB7IG1hcF9rZXkoYyk7IGNsZWFyX2JpdChjLCAqYml0KTsgfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCBxdWlya19iZWxraW5fd2tiZChzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSKQotCQlyZXR1cm4gMDsKLQotCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQljYXNlIDB4MDNhOiBtYXBfa2V5X2NsZWFyKEtFWV9TT1VORCk7CQlicmVhazsKLQkJY2FzZSAweDAzYjogbWFwX2tleV9jbGVhcihLRVlfQ0FNRVJBKTsJCWJyZWFrOwotCQljYXNlIDB4MDNjOiBtYXBfa2V5X2NsZWFyKEtFWV9ET0NVTUVOVFMpOwlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBxdWlya19jaGVycnlfY3ltb3Rpb24oc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCi17Ci0JaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9DT05TVU1FUikKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKLQkJY2FzZSAweDMwMTogbWFwX2tleV9jbGVhcihLRVlfUFJPRzEpOwkJYnJlYWs7Ci0JCWNhc2UgMHgzMDI6IG1hcF9rZXlfY2xlYXIoS0VZX1BST0cyKTsJCWJyZWFrOwotCQljYXNlIDB4MzAzOiBtYXBfa2V5X2NsZWFyKEtFWV9QUk9HMyk7CQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBxdWlya19sb2dpdGVjaF91bHRyYXhfcmVtb3RlKHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfTE9HSVZFTkRPUikKLQkJcmV0dXJuIDA7Ci0KLQlzZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKLQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQkvKiBSZXBvcnRlZCBvbiBMb2dpdGVjaCBVbHRyYSBYIE1lZGlhIFJlbW90ZSAqLwotCQljYXNlIDB4MDA0OiBtYXBfa2V5X2NsZWFyKEtFWV9BR0FJTik7CQlicmVhazsKLQkJY2FzZSAweDAwZDogbWFwX2tleV9jbGVhcihLRVlfSE9NRSk7CQlicmVhazsKLQkJY2FzZSAweDAyNDogbWFwX2tleV9jbGVhcihLRVlfU0hVRkZMRSk7CQlicmVhazsKLQkJY2FzZSAweDAyNTogbWFwX2tleV9jbGVhcihLRVlfVFYpOwkJYnJlYWs7Ci0JCWNhc2UgMHgwMjY6IG1hcF9rZXlfY2xlYXIoS0VZX01FTlUpOwkJYnJlYWs7Ci0JCWNhc2UgMHgwMzE6IG1hcF9rZXlfY2xlYXIoS0VZX0FVRElPKTsJCWJyZWFrOwotCQljYXNlIDB4MDMyOiBtYXBfa2V5X2NsZWFyKEtFWV9URVhUKTsJCWJyZWFrOwotCQljYXNlIDB4MDMzOiBtYXBfa2V5X2NsZWFyKEtFWV9MQVNUKTsJCWJyZWFrOwotCQljYXNlIDB4MDQ3OiBtYXBfa2V5X2NsZWFyKEtFWV9NUDMpOwkJYnJlYWs7Ci0JCWNhc2UgMHgwNDg6IG1hcF9rZXlfY2xlYXIoS0VZX0RWRCk7CQlicmVhazsKLQkJY2FzZSAweDA0OTogbWFwX2tleV9jbGVhcihLRVlfTUVESUEpOwkJYnJlYWs7Ci0JCWNhc2UgMHgwNGE6IG1hcF9rZXlfY2xlYXIoS0VZX1ZJREVPKTsJCWJyZWFrOwotCQljYXNlIDB4MDRiOiBtYXBfa2V5X2NsZWFyKEtFWV9BTkdMRSk7CQlicmVhazsKLQkJY2FzZSAweDA0YzogbWFwX2tleV9jbGVhcihLRVlfTEFOR1VBR0UpOwlicmVhazsKLQkJY2FzZSAweDA0ZDogbWFwX2tleV9jbGVhcihLRVlfU1VCVElUTEUpOwlicmVhazsKLQkJY2FzZSAweDA1MTogbWFwX2tleV9jbGVhcihLRVlfUkVEKTsJCWJyZWFrOwotCQljYXNlIDB4MDUyOiBtYXBfa2V5X2NsZWFyKEtFWV9DTE9TRSk7CQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHF1aXJrX2d5cmF0aW9uX3JlbW90ZShzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0xPR0lWRU5ET1IpCi0JCXJldHVybiAwOwotCi0Jc2V0X2JpdChFVl9SRVAsIGlucHV0LT5ldmJpdCk7Ci0Jc3dpdGNoKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKLQkJLyogUmVwb3J0ZWQgb24gR3lyYXRpb24gTUNFIFJlbW90ZSAqLwotCQljYXNlIDB4MDBkOiBtYXBfa2V5X2NsZWFyKEtFWV9IT01FKTsJCWJyZWFrOwotCQljYXNlIDB4MDI0OiBtYXBfa2V5X2NsZWFyKEtFWV9EVkQpOwkJYnJlYWs7Ci0JCWNhc2UgMHgwMjU6IG1hcF9rZXlfY2xlYXIoS0VZX1BWUik7CQlicmVhazsKLQkJY2FzZSAweDA0NjogbWFwX2tleV9jbGVhcihLRVlfTUVESUEpOwkJYnJlYWs7Ci0JCWNhc2UgMHgwNDc6IG1hcF9rZXlfY2xlYXIoS0VZX01QMyk7CQlicmVhazsKLQkJY2FzZSAweDA0OTogbWFwX2tleV9jbGVhcihLRVlfQ0FNRVJBKTsJCWJyZWFrOwotCQljYXNlIDB4MDRhOiBtYXBfa2V5X2NsZWFyKEtFWV9WSURFTyk7CQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHF1aXJrX2NoaWNvbnlfdGFjdGljYWxfcGFkKHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfTVNWRU5ET1IpCi0JCXJldHVybiAwOwotCi0Jc2V0X2JpdChFVl9SRVAsIGlucHV0LT5ldmJpdCk7Ci0Jc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7Ci0JCWNhc2UgMHhmZjAxOiBtYXBfa2V5X2NsZWFyKEJUTl8xKTsJCWJyZWFrOwotCQljYXNlIDB4ZmYwMjogbWFwX2tleV9jbGVhcihCVE5fMik7CQlicmVhazsKLQkJY2FzZSAweGZmMDM6IG1hcF9rZXlfY2xlYXIoQlROXzMpOwkJYnJlYWs7Ci0JCWNhc2UgMHhmZjA0OiBtYXBfa2V5X2NsZWFyKEJUTl80KTsJCWJyZWFrOwotCQljYXNlIDB4ZmYwNTogbWFwX2tleV9jbGVhcihCVE5fNSk7CQlicmVhazsKLQkJY2FzZSAweGZmMDY6IG1hcF9rZXlfY2xlYXIoQlROXzYpOwkJYnJlYWs7Ci0JCWNhc2UgMHhmZjA3OiBtYXBfa2V5X2NsZWFyKEJUTl83KTsJCWJyZWFrOwotCQljYXNlIDB4ZmYwODogbWFwX2tleV9jbGVhcihCVE5fOCk7CQlicmVhazsKLQkJY2FzZSAweGZmMDk6IG1hcF9rZXlfY2xlYXIoQlROXzkpOwkJYnJlYWs7Ci0JCWNhc2UgMHhmZjBhOiBtYXBfa2V5X2NsZWFyKEJUTl9BKTsJCWJyZWFrOwotCQljYXNlIDB4ZmYwYjogbWFwX2tleV9jbGVhcihCVE5fQik7CQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBxdWlya19taWNyb3NvZnRfZXJnb25vbXlfa2Ioc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCi17Ci0JaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9NU1ZFTkRPUikKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQljYXNlIDB4ZmQwNjogbWFwX2tleV9jbGVhcihLRVlfQ0hBVCk7CQlicmVhazsKLQkJY2FzZSAweGZkMDc6IG1hcF9rZXlfY2xlYXIoS0VZX1BIT05FKTsJCWJyZWFrOwotCQljYXNlIDB4ZmYwNToKLQkJCXNldF9iaXQoRVZfUkVQLCBpbnB1dC0+ZXZiaXQpOwotCQkJbWFwX2tleV9jbGVhcihLRVlfRjEzKTsKLQkJCXNldF9iaXQoS0VZX0YxNCwgaW5wdXQtPmtleWJpdCk7Ci0JCQlzZXRfYml0KEtFWV9GMTUsIGlucHV0LT5rZXliaXQpOwotCQkJc2V0X2JpdChLRVlfRjE2LCBpbnB1dC0+a2V5Yml0KTsKLQkJCXNldF9iaXQoS0VZX0YxNywgaW5wdXQtPmtleWJpdCk7Ci0JCQlzZXRfYml0KEtFWV9GMTgsIGlucHV0LT5rZXliaXQpOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHF1aXJrX21pY3Jvc29mdF9wcmVzZW50ZXJfOGsoc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCi17Ci0JaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9NU1ZFTkRPUikKLQkJcmV0dXJuIDA7Ci0KLQlzZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKLQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQljYXNlIDB4ZmQwODogbWFwX2tleV9jbGVhcihLRVlfRk9SV0FSRCk7CWJyZWFrOwotCQljYXNlIDB4ZmQwOTogbWFwX2tleV9jbGVhcihLRVlfQkFDSyk7CQlicmVhazsKLQkJY2FzZSAweGZkMGI6IG1hcF9rZXlfY2xlYXIoS0VZX1BMQVlQQVVTRSk7CWJyZWFrOwotCQljYXNlIDB4ZmQwZTogbWFwX2tleV9jbGVhcihLRVlfQ0xPU0UpOwkJYnJlYWs7Ci0JCWNhc2UgMHhmZDBmOiBtYXBfa2V5X2NsZWFyKEtFWV9QTEFZKTsJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHF1aXJrX3BldGFseW54X3JlbW90ZShzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlpZiAoKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9MT0dJVkVORE9SKSAmJgotCQkJKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9DT05TVU1FUikpCi0JCXJldHVybiAwOwotCi0JaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpID09IEhJRF9VUF9MT0dJVkVORE9SKQotCQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQkJY2FzZSAweDA1YTogbWFwX2tleV9jbGVhcihLRVlfVEVYVCk7CQlicmVhazsKLQkJCWNhc2UgMHgwNWI6IG1hcF9rZXlfY2xlYXIoS0VZX1JFRCk7CQlicmVhazsKLQkJCWNhc2UgMHgwNWM6IG1hcF9rZXlfY2xlYXIoS0VZX0dSRUVOKTsJCWJyZWFrOwotCQkJY2FzZSAweDA1ZDogbWFwX2tleV9jbGVhcihLRVlfWUVMTE9XKTsJCWJyZWFrOwotCQkJY2FzZSAweDA1ZTogbWFwX2tleV9jbGVhcihLRVlfQkxVRSk7CQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIDA7Ci0JCX0KLQotCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSA9PSBISURfVVBfQ09OU1VNRVIpCi0JCXN3aXRjaCh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7Ci0JCQljYXNlIDB4MGY2OiBtYXBfa2V5X2NsZWFyKEtFWV9ORVhUKTsgICAgICAgICAgICBicmVhazsKLQkJCWNhc2UgMHgwZmE6IG1hcF9rZXlfY2xlYXIoS0VZX0JBQ0spOyAgICAgICAgICAgIGJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gMDsKLQkJfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHF1aXJrX2xvZ2l0ZWNoX3dpcmVsZXNzKHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfQ09OU1VNRVIpCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7Ci0JCWNhc2UgMHgxMDAxOiBtYXBfa2V5X2NsZWFyKEtFWV9NRVNTRU5HRVIpOwlicmVhazsKLQkJY2FzZSAweDEwMDM6IG1hcF9rZXlfY2xlYXIoS0VZX1NPVU5EKTsJCWJyZWFrOwotCQljYXNlIDB4MTAwNDogbWFwX2tleV9jbGVhcihLRVlfVklERU8pOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDA1OiBtYXBfa2V5X2NsZWFyKEtFWV9BVURJTyk7CQlicmVhazsKLQkJY2FzZSAweDEwMGE6IG1hcF9rZXlfY2xlYXIoS0VZX0RPQ1VNRU5UUyk7CWJyZWFrOwotCQljYXNlIDB4MTAxMTogbWFwX2tleV9jbGVhcihLRVlfUFJFVklPVVNTT05HKTsJYnJlYWs7Ci0JCWNhc2UgMHgxMDEyOiBtYXBfa2V5X2NsZWFyKEtFWV9ORVhUU09ORyk7CWJyZWFrOwotCQljYXNlIDB4MTAxMzogbWFwX2tleV9jbGVhcihLRVlfQ0FNRVJBKTsJCWJyZWFrOwotCQljYXNlIDB4MTAxNDogbWFwX2tleV9jbGVhcihLRVlfTUVTU0VOR0VSKTsJYnJlYWs7Ci0JCWNhc2UgMHgxMDE1OiBtYXBfa2V5X2NsZWFyKEtFWV9SRUNPUkQpOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDE2OiBtYXBfa2V5X2NsZWFyKEtFWV9QTEFZRVIpOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDE3OiBtYXBfa2V5X2NsZWFyKEtFWV9FSkVDVENEKTsJYnJlYWs7Ci0JCWNhc2UgMHgxMDE4OiBtYXBfa2V5X2NsZWFyKEtFWV9NRURJQSk7CQlicmVhazsKLQkJY2FzZSAweDEwMTk6IG1hcF9rZXlfY2xlYXIoS0VZX1BST0cxKTsJCWJyZWFrOwotCQljYXNlIDB4MTAxYTogbWFwX2tleV9jbGVhcihLRVlfUFJPRzIpOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDFiOiBtYXBfa2V5X2NsZWFyKEtFWV9QUk9HMyk7CQlicmVhazsKLQkJY2FzZSAweDEwMWY6IG1hcF9rZXlfY2xlYXIoS0VZX1pPT01JTik7CQlicmVhazsKLQkJY2FzZSAweDEwMjA6IG1hcF9rZXlfY2xlYXIoS0VZX1pPT01PVVQpOwlicmVhazsKLQkJY2FzZSAweDEwMjE6IG1hcF9rZXlfY2xlYXIoS0VZX1pPT01SRVNFVCk7CWJyZWFrOwotCQljYXNlIDB4MTAyMzogbWFwX2tleV9jbGVhcihLRVlfQ0xPU0UpOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDI3OiBtYXBfa2V5X2NsZWFyKEtFWV9NRU5VKTsJCWJyZWFrOwotCQkvKiB0aGlzIG9uZSBpcyBtYXJrZWQgYXMgJ1JvdGF0ZScgKi8KLQkJY2FzZSAweDEwMjg6IG1hcF9rZXlfY2xlYXIoS0VZX0FOR0xFKTsJCWJyZWFrOwotCQljYXNlIDB4MTAyOTogbWFwX2tleV9jbGVhcihLRVlfU0hVRkZMRSk7CWJyZWFrOwotCQljYXNlIDB4MTAyYTogbWFwX2tleV9jbGVhcihLRVlfQkFDSyk7CQlicmVhazsKLQkJY2FzZSAweDEwMmI6IG1hcF9rZXlfY2xlYXIoS0VZX0NZQ0xFV0lORE9XUyk7CWJyZWFrOwotCQljYXNlIDB4MTA0MTogbWFwX2tleV9jbGVhcihLRVlfQkFUVEVSWSk7CWJyZWFrOwotCQljYXNlIDB4MTA0MjogbWFwX2tleV9jbGVhcihLRVlfV09SRFBST0NFU1NPUik7CWJyZWFrOwotCQljYXNlIDB4MTA0MzogbWFwX2tleV9jbGVhcihLRVlfU1BSRUFEU0hFRVQpOwlicmVhazsKLQkJY2FzZSAweDEwNDQ6IG1hcF9rZXlfY2xlYXIoS0VZX1BSRVNFTlRBVElPTik7CWJyZWFrOwotCQljYXNlIDB4MTA0NTogbWFwX2tleV9jbGVhcihLRVlfVU5ETyk7CQlicmVhazsKLQkJY2FzZSAweDEwNDY6IG1hcF9rZXlfY2xlYXIoS0VZX1JFRE8pOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDQ3OiBtYXBfa2V5X2NsZWFyKEtFWV9QUklOVCk7CQlicmVhazsKLQkJY2FzZSAweDEwNDg6IG1hcF9rZXlfY2xlYXIoS0VZX1NBVkUpOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDQ5OiBtYXBfa2V5X2NsZWFyKEtFWV9QUk9HMSk7CQlicmVhazsKLQkJY2FzZSAweDEwNGE6IG1hcF9rZXlfY2xlYXIoS0VZX1BST0cyKTsJCWJyZWFrOwotCQljYXNlIDB4MTA0YjogbWFwX2tleV9jbGVhcihLRVlfUFJPRzMpOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDRjOiBtYXBfa2V5X2NsZWFyKEtFWV9QUk9HNCk7CQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHF1aXJrX2NoZXJyeV9nZW5pdXNfMjllKHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfQ09OU1VNRVIpCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7Ci0JCWNhc2UgMHgxNTY6IG1hcF9rZXlfY2xlYXIoS0VZX1dPUkRQUk9DRVNTT1IpOwlicmVhazsKLQkJY2FzZSAweDE1NzogbWFwX2tleV9jbGVhcihLRVlfU1BSRUFEU0hFRVQpOwlicmVhazsKLQkJY2FzZSAweDE1ODogbWFwX2tleV9jbGVhcihLRVlfUFJFU0VOVEFUSU9OKTsJYnJlYWs7Ci0JCWNhc2UgMHgxNWM6IG1hcF9rZXlfY2xlYXIoS0VZX1NUT1ApOwkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBxdWlya19idGNfODE5MyhzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSKQotCQlyZXR1cm4gMDsKLQotCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQljYXNlIDB4MjMwOiBtYXBfa2V5KEJUTl9NT1VTRSk7CQkJYnJlYWs7Ci0JCWNhc2UgMHgyMzE6IG1hcF9yZWwoUkVMX1dIRUVMKTsJCQlicmVhazsKLQkJLyogCi0JCSAqIHRoaXMga2V5Ym9hcmQgaGFzIGEgc2Nyb2xsd2hlZWwgaW1wbGVtZW50ZWQgaW4KLQkJICogdG90YWxseSBicm9rZW4gd2F5LiBXZSBtYXAgdGhpcyB1c2FnZSB0ZW1wb3JhcmlseQotCQkgKiB0byBIV0hFRUwgYW5kIGhhbmRsZSBpdCBpbiB0aGUgZXZlbnQgcXVpcmsgaGFuZGxlcgotCQkgKi8KLQkJY2FzZSAweDIzMjogbWFwX3JlbChSRUxfSFdIRUVMKTsJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgcXVpcmtfc3VucGx1c193ZGVza3RvcChzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSKQotCQlyZXR1cm4gMDsKLQotCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQljYXNlIDB4MjAwMzogbWFwX2tleV9jbGVhcihLRVlfWk9PTUlOKTsJCWJyZWFrOwotCQljYXNlIDB4MjEwMzogbWFwX2tleV9jbGVhcihLRVlfWk9PTU9VVCk7CWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi0jZGVmaW5lIFZFTkRPUl9JRF9CRUxLSU4JCQkweDEwMjAKLSNkZWZpbmUgREVWSUNFX0lEX0JFTEtJTl9XSVJFTEVTU19LRVlCT0FSRAkweDAwMDYKLQotI2RlZmluZSBWRU5ET1JfSURfQ0hFUlJZCQkJMHgwNDZhCi0jZGVmaW5lIERFVklDRV9JRF9DSEVSUllfQ1lNT1RJT04JCTB4MDAyMwotCi0jZGVmaW5lIFZFTkRPUl9JRF9DSElDT05ZCQkJMHgwNGYyCi0jZGVmaW5lIERFVklDRV9JRF9DSElDT05ZX1RBQ1RJQ0FMX1BBRAkJMHgwNDE4Ci0KLSNkZWZpbmUgVkVORE9SX0lEX0VaS0VZCQkJCTB4MDUxOAotI2RlZmluZSBERVZJQ0VfSURfQlRDXzgxOTMJCQkweDAwMDIKLQotI2RlZmluZSBWRU5ET1JfSURfR1lSQVRJT04JCQkweDBjMTYKLSNkZWZpbmUgREVWSUNFX0lEX0dZUkFUSU9OX1JFTU9URQkJMHgwMDAyCi0KLSNkZWZpbmUgVkVORE9SX0lEX0xPR0lURUNICQkJMHgwNDZkCi0jZGVmaW5lIERFVklDRV9JRF9MT0dJVEVDSF9SRUNFSVZFUgkJMHhjMTAxCi0jZGVmaW5lIERFVklDRV9JRF9TNTEwX1JFQ0VJVkVSCQkJMHhjNTBjCi0jZGVmaW5lIERFVklDRV9JRF9TNTEwX1JFQ0VJVkVSXzIJCTB4YzUxNwotI2RlZmluZSBERVZJQ0VfSURfTVgzMDAwX1JFQ0VJVkVSCQkweGM1MTMKLQotI2RlZmluZSBWRU5ET1JfSURfTUlDUk9TT0ZUCQkJMHgwNDVlCi0jZGVmaW5lIERFVklDRV9JRF9NUzRLCQkJCTB4MDBkYgotI2RlZmluZSBERVZJQ0VfSURfTVM2SwkJCQkweDAwZjkKLSNkZWZpbmUgREVWSUNFX0lTX01TX1BSRVNFTlRFUl84S19CVAkJMHgwNzAxCi0jZGVmaW5lIERFVklDRV9JRF9NU19QUkVTRU5URVJfOEtfVVNCCQkweDA3MTMKLQotI2RlZmluZSBWRU5ET1JfSURfTU9OVEVSRVkJCQkweDA1NjYKLSNkZWZpbmUgREVWSUNFX0lEX0dFTklVU19LQjI5RQkJCTB4MzAwNAotCi0jZGVmaW5lIFZFTkRPUl9JRF9QRVRBTFlOWAkJCTB4MThiMQotI2RlZmluZSBERVZJQ0VfSURfUEVUQUxZTlhfTUFYVEVSX1JFTU9URQkweDAwMzcKLQotI2RlZmluZSBWRU5ET1JfSURfU1VOUExVUwkJCTB4MDRmYwotI2RlZmluZSBERVZJQ0VfSURfU1VOUExVU19XREVTS1RPUAkJMHgwNWQ4Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2lucHV0X2JsYWNrbGlzdCB7Ci0JX191MTYgaWRWZW5kb3I7Ci0JX191MTYgaWRQcm9kdWN0OwotCWludCAoKnF1aXJrKShzdHJ1Y3QgaGlkX3VzYWdlICosIHN0cnVjdCBpbnB1dF9kZXYgKiwgdW5zaWduZWQgbG9uZyAqKiwgaW50ICopOwotfSBoaWRfaW5wdXRfYmxhY2tsaXN0W10gPSB7Ci0JeyBWRU5ET1JfSURfQkVMS0lOLCBERVZJQ0VfSURfQkVMS0lOX1dJUkVMRVNTX0tFWUJPQVJELCBxdWlya19iZWxraW5fd2tiZCB9LAotCi0JeyBWRU5ET1JfSURfQ0hFUlJZLCBERVZJQ0VfSURfQ0hFUlJZX0NZTU9USU9OLCBxdWlya19jaGVycnlfY3ltb3Rpb24gfSwKLQotCXsgVkVORE9SX0lEX0NISUNPTlksIERFVklDRV9JRF9DSElDT05ZX1RBQ1RJQ0FMX1BBRCwgcXVpcmtfY2hpY29ueV90YWN0aWNhbF9wYWQgfSwKLQotCXsgVkVORE9SX0lEX0VaS0VZLCBERVZJQ0VfSURfQlRDXzgxOTMsIHF1aXJrX2J0Y184MTkzIH0sCi0KLQl7IFZFTkRPUl9JRF9HWVJBVElPTiwgREVWSUNFX0lEX0dZUkFUSU9OX1JFTU9URSwgcXVpcmtfZ3lyYXRpb25fcmVtb3RlIH0sCi0KLQl7IFZFTkRPUl9JRF9MT0dJVEVDSCwgREVWSUNFX0lEX0xPR0lURUNIX1JFQ0VJVkVSLCBxdWlya19sb2dpdGVjaF91bHRyYXhfcmVtb3RlIH0sCi0JeyBWRU5ET1JfSURfTE9HSVRFQ0gsIERFVklDRV9JRF9TNTEwX1JFQ0VJVkVSLCBxdWlya19sb2dpdGVjaF93aXJlbGVzcyB9LAotCXsgVkVORE9SX0lEX0xPR0lURUNILCBERVZJQ0VfSURfUzUxMF9SRUNFSVZFUl8yLCBxdWlya19sb2dpdGVjaF93aXJlbGVzcyB9LAotCXsgVkVORE9SX0lEX0xPR0lURUNILCBERVZJQ0VfSURfTVgzMDAwX1JFQ0VJVkVSLCBxdWlya19sb2dpdGVjaF93aXJlbGVzcyB9LAotCi0JeyBWRU5ET1JfSURfTUlDUk9TT0ZULCBERVZJQ0VfSURfTVM0SywgcXVpcmtfbWljcm9zb2Z0X2VyZ29ub215X2tiIH0sCi0JeyBWRU5ET1JfSURfTUlDUk9TT0ZULCBERVZJQ0VfSURfTVM2SywgcXVpcmtfbWljcm9zb2Z0X2VyZ29ub215X2tiIH0sCi0JeyBWRU5ET1JfSURfTUlDUk9TT0ZULCBERVZJQ0VfSVNfTVNfUFJFU0VOVEVSXzhLX0JULCBxdWlya19taWNyb3NvZnRfcHJlc2VudGVyXzhrIH0sCi0JeyBWRU5ET1JfSURfTUlDUk9TT0ZULCBERVZJQ0VfSURfTVNfUFJFU0VOVEVSXzhLX1VTQiwgcXVpcmtfbWljcm9zb2Z0X3ByZXNlbnRlcl84ayB9LAotCi0JeyBWRU5ET1JfSURfTU9OVEVSRVksIERFVklDRV9JRF9HRU5JVVNfS0IyOUUsIHF1aXJrX2NoZXJyeV9nZW5pdXNfMjllIH0sCi0KLQl7IFZFTkRPUl9JRF9QRVRBTFlOWCwgREVWSUNFX0lEX1BFVEFMWU5YX01BWFRFUl9SRU1PVEUsIHF1aXJrX3BldGFseW54X3JlbW90ZSB9LAotCi0JeyBWRU5ET1JfSURfU1VOUExVUywgREVWSUNFX0lEX1NVTlBMVVNfV0RFU0tUT1AsIHF1aXJrX3N1bnBsdXNfd2Rlc2t0b3AgfSwKLQotCXsgMCwgMCwgTlVMTCB9Ci19OwotCi1pbnQgaGlkaW5wdXRfbWFwcGluZ19xdWlya3Moc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIAotCQkJCSAgIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LCAKLQkJCQkgICB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXQpOwotCWludCBpID0gMDsKLQkKLQl3aGlsZSAoaGlkX2lucHV0X2JsYWNrbGlzdFtpXS5xdWlyaykgewotCQlpZiAoaGlkX2lucHV0X2JsYWNrbGlzdFtpXS5pZFZlbmRvciA9PSBkZXZpY2UtPnZlbmRvciAmJgotCQkJCWhpZF9pbnB1dF9ibGFja2xpc3RbaV0uaWRQcm9kdWN0ID09IGRldmljZS0+cHJvZHVjdCkKLQkJCXJldHVybiBoaWRfaW5wdXRfYmxhY2tsaXN0W2ldLnF1aXJrKHVzYWdlLCBpbnB1dCwgYml0LCBtYXgpOwotCQlpKys7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgaGlkaW5wdXRfZXZlbnRfcXVpcmtzKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCi17Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7Ci0KLQlpbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7Ci0KLQlpZiAoKChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS181KSAmJiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA1KSkKLQkJfHwgKChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS183KSAmJiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA3KSkpIHsKLQkJaWYgKHZhbHVlKSBoaWQtPnF1aXJrcyB8PSAgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLX09OOwotCQllbHNlICAgICAgIGhpZC0+cXVpcmtzICY9IH5ISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfT047Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgoaGlkLT5xdWlya3MgJiBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfQjgpICYmCi0JCQkodXNhZ2UtPnR5cGUgPT0gRVZfUkVMKSAmJgotCQkJKHVzYWdlLT5jb2RlID09IFJFTF9XSEVFTCkpIHsKLQkJaGlkLT5kZWxheWVkX3ZhbHVlID0gdmFsdWU7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgoaGlkLT5xdWlya3MgJiBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfQjgpICYmCi0JCQkodXNhZ2UtPmhpZCA9PSAweDAwMDEwMGI4KSkgewotCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfUkVMLCB2YWx1ZSA/IFJFTF9IV0hFRUwgOiBSRUxfV0hFRUwsIGhpZC0+ZGVsYXllZF92YWx1ZSk7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgoaGlkLT5xdWlya3MgJiBISURfUVVJUktfSU5WRVJUX0hXSEVFTCkgJiYgKHVzYWdlLT5jb2RlID09IFJFTF9IV0hFRUwpKSB7Ci0JCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUsIC12YWx1ZSk7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgoaGlkLT5xdWlya3MgJiBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfT04pICYmICh1c2FnZS0+Y29kZSA9PSBSRUxfV0hFRUwpKSB7Ci0JCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgUkVMX0hXSEVFTCwgdmFsdWUpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX0FQUExFX0hBU19GTikgJiYgaGlkaW5wdXRfYXBwbGVfZXZlbnQoaGlkLCBpbnB1dCwgdXNhZ2UsIHZhbHVlKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBIYW5kbGluZyBNUyBrZXlib2FyZHMgc3BlY2lhbCBidXR0b25zICovCi0JaWYgKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX01JQ1JPU09GVF9LRVlTICYmIAotCQkJdXNhZ2UtPmhpZCA9PSAoSElEX1VQX01TVkVORE9SIHwgMHhmZjA1KSkgewotCQlpbnQga2V5ID0gMDsKLQkJc3RhdGljIGludCBsYXN0X2tleSA9IDA7Ci0JCXN3aXRjaCAodmFsdWUpIHsKLQkJCWNhc2UgMHgwMToga2V5ID0gS0VZX0YxNDsgYnJlYWs7Ci0JCQljYXNlIDB4MDI6IGtleSA9IEtFWV9GMTU7IGJyZWFrOwotCQkJY2FzZSAweDA0OiBrZXkgPSBLRVlfRjE2OyBicmVhazsKLQkJCWNhc2UgMHgwODoga2V5ID0gS0VZX0YxNzsgYnJlYWs7Ci0JCQljYXNlIDB4MTA6IGtleSA9IEtFWV9GMTg7IGJyZWFrOwotCQkJZGVmYXVsdDogYnJlYWs7Ci0JCX0KLQkJaWYgKGtleSkgewotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCBrZXksIDEpOwotCQkJbGFzdF9rZXkgPSBrZXk7Ci0JCX0gZWxzZSB7Ci0JCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIGxhc3Rfa2V5LCAwKTsKLQkJfQotCX0KLQotCS8qIGhhbmRsZSB0aGUgdGVtcG9yYXJ5IHF1aXJreSBtYXBwaW5nIHRvIEhXSEVFTCAqLwotCWlmIChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19IV0hFRUxfV0hFRUxfSU5WRVJUICYmCi0JCQl1c2FnZS0+dHlwZSA9PSBFVl9SRUwgJiYgdXNhZ2UtPmNvZGUgPT0gUkVMX0hXSEVFTCkgewotCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIFJFTF9XSEVFTCwgLXZhbHVlKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JLyogR3lyYXRpb24gTUNFIHJlbW90ZSAiU2xlZXAiIGtleSAqLwotCWlmIChoaWQtPnZlbmRvciA9PSBWRU5ET1JfSURfR1lSQVRJT04gJiYKLQkgICAgaGlkLT5wcm9kdWN0ID09IERFVklDRV9JRF9HWVJBVElPTl9SRU1PVEUgJiYKLQkgICAgKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgPT0gSElEX1VQX0dFTkRFU0sgJiYKLQkgICAgKHVzYWdlLT5oaWQgJiAweGZmKSA9PSAweDgyKSB7Ci0JCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUsIDEpOwotCQlpbnB1dF9zeW5jKGlucHV0KTsKLQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSwgMCk7Ci0JCWlucHV0X3N5bmMoaW5wdXQpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwppbmRleCAxYjJlOGRjLi43ZjE4M2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwpAQCAtMzIsMTEgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9oaWQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWQtZGVidWcuaD4KIAotc3RhdGljIGludCBoaWRfYXBwbGVfZm5tb2RlID0gMTsKLW1vZHVsZV9wYXJhbV9uYW1lZChwYl9mbm1vZGUsIGhpZF9hcHBsZV9mbm1vZGUsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBiX2ZubW9kZSwKLQkJIk1vZGUgb2YgZm4ga2V5IG9uIEFwcGxlIGtleWJvYXJkcyAoMCA9IGRpc2FibGVkLCAxID0gZmtleXNsYXN0LCAyID0gZmtleXNmaXJzdCkiKTsKLQogI2RlZmluZSB1bmsJS0VZX1VOS05PV04KIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaGlkX2tleWJvYXJkWzI1Nl0gPSB7CkBAIC01OCwyMjcgKzUzLDIwIEBACiAJMTUwLDE1OCwxNTksMTI4LDEzNiwxNzcsMTc4LDE3NiwxNDIsMTUyLDE3MywxNDAsdW5rLHVuayx1bmssdW5rCiB9OwogCi0vKiBleHRlbmRlZCBtYXBwaW5nIGZvciBjZXJ0YWluIExvZ2l0ZWNoIGhhcmR3YXJlIChMb2dpdGVjaCBjb3JkbGVzcyBkZXNrdG9wIExYNTAwKSAqLwotI2RlZmluZSBMT0dJVEVDSF9FWFBBTkRFRF9LRVlNQVBfU0laRSA4MAotc3RhdGljIGludCBsb2dpdGVjaF9leHBhbmRlZF9rZXltYXBbTE9HSVRFQ0hfRVhQQU5ERURfS0VZTUFQX1NJWkVdID0gewotCSAgMCwyMTYsICAwLDIxMywxNzUsMTU2LCAgMCwgIDAsICAwLCAgMCwKLQkxNDQsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwyMTIsCi0JMTc0LDE2NywxNTIsMTYxLDExMiwgIDAsICAwLCAgMCwxNTQsICAwLAotCSAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLQkgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0JICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotCSAgMCwgIDAsICAwLCAgMCwgIDAsMTgzLDE4NCwxODUsMTg2LDE4NywKLQkxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsICAwLCAgMCwgIDAKLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCV9fczMyIHg7CiAJX19zMzIgeTsKIH0gIGhpZF9oYXRfdG9fYXhpc1tdID0ge3sgMCwgMH0sIHsgMCwtMX0sIHsgMSwtMX0sIHsgMSwgMH0sIHsgMSwgMX0sIHsgMCwgMX0sIHstMSwgMX0sIHstMSwgMH0sIHstMSwtMX19OwogCi0jZGVmaW5lIG1hcF9hYnMoYykJZG8geyB1c2FnZS0+Y29kZSA9IGM7IHVzYWdlLT50eXBlID0gRVZfQUJTOyBiaXQgPSBpbnB1dC0+YWJzYml0OyBtYXggPSBBQlNfTUFYOyB9IHdoaWxlICgwKQotI2RlZmluZSBtYXBfcmVsKGMpCWRvIHsgdXNhZ2UtPmNvZGUgPSBjOyB1c2FnZS0+dHlwZSA9IEVWX1JFTDsgYml0ID0gaW5wdXQtPnJlbGJpdDsgbWF4ID0gUkVMX01BWDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgbWFwX2tleShjKQlkbyB7IHVzYWdlLT5jb2RlID0gYzsgdXNhZ2UtPnR5cGUgPSBFVl9LRVk7IGJpdCA9IGlucHV0LT5rZXliaXQ7IG1heCA9IEtFWV9NQVg7IH0gd2hpbGUgKDApCi0jZGVmaW5lIG1hcF9sZWQoYykJZG8geyB1c2FnZS0+Y29kZSA9IGM7IHVzYWdlLT50eXBlID0gRVZfTEVEOyBiaXQgPSBpbnB1dC0+bGVkYml0OyBtYXggPSBMRURfTUFYOyB9IHdoaWxlICgwKQorI2RlZmluZSBtYXBfYWJzKGMpCWhpZF9tYXBfdXNhZ2UoaGlkaW5wdXQsIHVzYWdlLCAmYml0LCAmbWF4LCBFVl9BQlMsIChjKSkKKyNkZWZpbmUgbWFwX3JlbChjKQloaWRfbWFwX3VzYWdlKGhpZGlucHV0LCB1c2FnZSwgJmJpdCwgJm1heCwgRVZfUkVMLCAoYykpCisjZGVmaW5lIG1hcF9rZXkoYykJaGlkX21hcF91c2FnZShoaWRpbnB1dCwgdXNhZ2UsICZiaXQsICZtYXgsIEVWX0tFWSwgKGMpKQorI2RlZmluZSBtYXBfbGVkKGMpCWhpZF9tYXBfdXNhZ2UoaGlkaW5wdXQsIHVzYWdlLCAmYml0LCAmbWF4LCBFVl9MRUQsIChjKSkKIAotI2RlZmluZSBtYXBfYWJzX2NsZWFyKGMpCWRvIHsgbWFwX2FicyhjKTsgY2xlYXJfYml0KGMsIGJpdCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIG1hcF9rZXlfY2xlYXIoYykJZG8geyBtYXBfa2V5KGMpOyBjbGVhcl9iaXQoYywgYml0KTsgfSB3aGlsZSAoMCkKLQotI2lmZGVmIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LCi0KLXN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gewotCXUxNiBmcm9tOwotCXUxNiB0bzsKLQl1OCBmbGFnczsKLX07Ci0KLSNkZWZpbmUgQVBQTEVfRkxBR19GS0VZIDB4MDEKLQotc3RhdGljIHN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gYXBwbGVfZm5fa2V5c1tdID0gewotCXsgS0VZX0JBQ0tTUEFDRSwgS0VZX0RFTEVURSB9LAotCXsgS0VZX0YxLCAgICAgICBLRVlfQlJJR0hUTkVTU0RPV04sIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0YyLCAgICAgICBLRVlfQlJJR0hUTkVTU1VQLCAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0YzLCAgICAgICBLRVlfRk5fRjUsICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LCAvKiBFeHBvc+kgKi8KLQl7IEtFWV9GNCwgICAgICAgS0VZX0ZOX0Y0LCAgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwgLyogRGFzaGJvYXJkICovCi0JeyBLRVlfRjUsICAgICAgIEtFWV9LQkRJTExVTURPV04sICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjYsICAgICAgIEtFWV9LQkRJTExVTVVQLCAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjcsICAgICAgIEtFWV9QUkVWSU9VU1NPTkcsICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjgsICAgICAgIEtFWV9QTEFZUEFVU0UsICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjksICAgICAgIEtFWV9ORVhUU09ORywgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjEwLCAgICAgIEtFWV9NVVRFLCAgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjExLCAgICAgIEtFWV9WT0xVTUVET1dOLCAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjEyLCAgICAgIEtFWV9WT0xVTUVVUCwgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfVVAsICAgICAgIEtFWV9QQUdFVVAgfSwKLQl7IEtFWV9ET1dOLCAgICAgS0VZX1BBR0VET1dOIH0sCi0JeyBLRVlfTEVGVCwgICAgIEtFWV9IT01FIH0sCi0JeyBLRVlfUklHSFQsICAgIEtFWV9FTkQgfSwKLQl7IH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGlkaW5wdXRfa2V5X3RyYW5zbGF0aW9uIHBvd2VyYm9va19mbl9rZXlzW10gPSB7Ci0JeyBLRVlfQkFDS1NQQUNFLCBLRVlfREVMRVRFIH0sCi0JeyBLRVlfRjEsICAgICAgIEtFWV9CUklHSFRORVNTRE9XTiwgICAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0YyLCAgICAgICBLRVlfQlJJR0hUTkVTU1VQLCAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKLQl7IEtFWV9GMywgICAgICAgS0VZX01VVEUsICAgICAgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjQsICAgICAgIEtFWV9WT0xVTUVET1dOLCAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0Y1LCAgICAgICBLRVlfVk9MVU1FVVAsICAgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKLQl7IEtFWV9GNiwgICAgICAgS0VZX05VTUxPQ0ssICAgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjcsICAgICAgIEtFWV9TV0lUQ0hWSURFT01PREUsICAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0Y4LCAgICAgICBLRVlfS0JESUxMVU1UT0dHTEUsICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKLQl7IEtFWV9GOSwgICAgICAgS0VZX0tCRElMTFVNRE9XTiwgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjEwLCAgICAgIEtFWV9LQkRJTExVTVVQLCAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX1VQLCAgICAgICBLRVlfUEFHRVVQIH0sCi0JeyBLRVlfRE9XTiwgICAgIEtFWV9QQUdFRE9XTiB9LAotCXsgS0VZX0xFRlQsICAgICBLRVlfSE9NRSB9LAotCXsgS0VZX1JJR0hULCAgICBLRVlfRU5EIH0sCi0JeyB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGhpZGlucHV0X2tleV90cmFuc2xhdGlvbiBwb3dlcmJvb2tfbnVtbG9ja19rZXlzW10gPSB7Ci0JeyBLRVlfSiwgICAgICAgIEtFWV9LUDEgfSwKLQl7IEtFWV9LLCAgICAgICAgS0VZX0tQMiB9LAotCXsgS0VZX0wsICAgICAgICBLRVlfS1AzIH0sCi0JeyBLRVlfVSwgICAgICAgIEtFWV9LUDQgfSwKLQl7IEtFWV9JLCAgICAgICAgS0VZX0tQNSB9LAotCXsgS0VZX08sICAgICAgICBLRVlfS1A2IH0sCi0JeyBLRVlfNywgICAgICAgIEtFWV9LUDcgfSwKLQl7IEtFWV84LCAgICAgICAgS0VZX0tQOCB9LAotCXsgS0VZXzksICAgICAgICBLRVlfS1A5IH0sCi0JeyBLRVlfTSwgICAgICAgIEtFWV9LUDAgfSwKLQl7IEtFWV9ET1QsICAgICAgS0VZX0tQRE9UIH0sCi0JeyBLRVlfU0xBU0gsICAgIEtFWV9LUFBMVVMgfSwKLQl7IEtFWV9TRU1JQ09MT04sIEtFWV9LUE1JTlVTIH0sCi0JeyBLRVlfUCwgICAgICAgIEtFWV9LUEFTVEVSSVNLIH0sCi0JeyBLRVlfTUlOVVMsICAgIEtFWV9LUEVRVUFMIH0sCi0JeyBLRVlfMCwgICAgICAgIEtFWV9LUFNMQVNIIH0sCi0JeyBLRVlfRjYsICAgICAgIEtFWV9OVU1MT0NLIH0sCi0JeyBLRVlfS1BFTlRFUiwgIEtFWV9LUEVOVEVSIH0sCi0JeyBLRVlfQkFDS1NQQUNFLCBLRVlfQkFDS1NQQUNFIH0sCi0JeyB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGhpZGlucHV0X2tleV90cmFuc2xhdGlvbiBhcHBsZV9pc29fa2V5Ym9hcmRbXSA9IHsKLQl7IEtFWV9HUkFWRSwgICAgS0VZXzEwMk5EIH0sCi0JeyBLRVlfMTAyTkQsICAgIEtFWV9HUkFWRSB9LAotCXsgfQotfTsKLQotc3RhdGljIHN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gKmZpbmRfdHJhbnNsYXRpb24oc3RydWN0IGhpZGlucHV0X2tleV90cmFuc2xhdGlvbiAqdGFibGUsIHUxNiBmcm9tKQotewotCXN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOwotCi0JLyogTG9vayBmb3IgdGhlIHRyYW5zbGF0aW9uICovCi0JZm9yICh0cmFucyA9IHRhYmxlOyB0cmFucy0+ZnJvbTsgdHJhbnMrKykKLQkJaWYgKHRyYW5zLT5mcm9tID09IGZyb20pCi0JCQlyZXR1cm4gdHJhbnM7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotaW50IGhpZGlucHV0X2FwcGxlX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAotCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCi17Ci0Jc3RydWN0IGhpZGlucHV0X2tleV90cmFuc2xhdGlvbiAqdHJhbnM7Ci0KLQlpZiAodXNhZ2UtPmNvZGUgPT0gS0VZX0ZOKSB7Ci0JCWlmICh2YWx1ZSkgaGlkLT5xdWlya3MgfD0gIEhJRF9RVUlSS19BUFBMRV9GTl9PTjsKLQkJZWxzZSAgICAgICBoaWQtPnF1aXJrcyAmPSB+SElEX1FVSVJLX0FQUExFX0ZOX09OOwotCi0JCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUsIHZhbHVlKTsKLQotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoaGlkX2FwcGxlX2ZubW9kZSkgewotCQlpbnQgZG9fdHJhbnNsYXRlOwotCi0JCXRyYW5zID0gZmluZF90cmFuc2xhdGlvbigoaGlkLT5wcm9kdWN0IDwgMHgyMjAgfHwKLQkJCQkJICBoaWQtPnByb2R1Y3QgPj0gMHgzMDApID8KLQkJCQkJIHBvd2VyYm9va19mbl9rZXlzIDogYXBwbGVfZm5fa2V5cywKLQkJCQkJIHVzYWdlLT5jb2RlKTsKLQkJaWYgKHRyYW5zKSB7Ci0JCQlpZiAodGVzdF9iaXQodXNhZ2UtPmNvZGUsIGhpZC0+YXBwbGVfcHJlc3NlZF9mbikpCi0JCQkJZG9fdHJhbnNsYXRlID0gMTsKLQkJCWVsc2UgaWYgKHRyYW5zLT5mbGFncyAmIEFQUExFX0ZMQUdfRktFWSkKLQkJCQlkb190cmFuc2xhdGUgPQotCQkJCQkoaGlkX2FwcGxlX2ZubW9kZSA9PSAyICYmICAoaGlkLT5xdWlya3MgJiBISURfUVVJUktfQVBQTEVfRk5fT04pKSB8fAotCQkJCQkoaGlkX2FwcGxlX2ZubW9kZSA9PSAxICYmICEoaGlkLT5xdWlya3MgJiBISURfUVVJUktfQVBQTEVfRk5fT04pKTsKLQkJCWVsc2UKLQkJCQlkb190cmFuc2xhdGUgPSAoaGlkLT5xdWlya3MgJiBISURfUVVJUktfQVBQTEVfRk5fT04pOwotCi0JCQlpZiAoZG9fdHJhbnNsYXRlKSB7Ci0JCQkJaWYgKHZhbHVlKQotCQkJCQlzZXRfYml0KHVzYWdlLT5jb2RlLCBoaWQtPmFwcGxlX3ByZXNzZWRfZm4pOwotCQkJCWVsc2UKLQkJCQkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCBoaWQtPmFwcGxlX3ByZXNzZWRfZm4pOwotCi0JCQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB0cmFucy0+dG8sIHZhbHVlKTsKLQotCQkJCXJldHVybiAxOwotCQkJfQotCQl9Ci0KLQkJaWYgKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX0FQUExFX05VTUxPQ0tfRU1VTEFUSU9OICYmICgKLQkJCQl0ZXN0X2JpdCh1c2FnZS0+Y29kZSwgaGlkLT5wYl9wcmVzc2VkX251bWxvY2spIHx8Ci0JCQkJdGVzdF9iaXQoTEVEX05VTUwsIGlucHV0LT5sZWQpKSkgewotCQkJdHJhbnMgPSBmaW5kX3RyYW5zbGF0aW9uKHBvd2VyYm9va19udW1sb2NrX2tleXMsIHVzYWdlLT5jb2RlKTsKLQotCQkJaWYgKHRyYW5zKSB7Ci0JCQkJaWYgKHZhbHVlKQotCQkJCQlzZXRfYml0KHVzYWdlLT5jb2RlLCBoaWQtPnBiX3ByZXNzZWRfbnVtbG9jayk7Ci0JCQkJZWxzZQotCQkJCQljbGVhcl9iaXQodXNhZ2UtPmNvZGUsIGhpZC0+cGJfcHJlc3NlZF9udW1sb2NrKTsKLQotCQkJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdHJhbnMtPnRvLCB2YWx1ZSk7Ci0JCQl9Ci0KLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JaWYgKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX0FQUExFX0lTT19LRVlCT0FSRCkgewotCQl0cmFucyA9IGZpbmRfdHJhbnNsYXRpb24oYXBwbGVfaXNvX2tleWJvYXJkLCB1c2FnZS0+Y29kZSk7Ci0JCWlmICh0cmFucykgewotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB0cmFucy0+dG8sIHZhbHVlKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGhpZGlucHV0X2FwcGxlX3NldHVwKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQotewotCXN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOwotCi0Jc2V0X2JpdChLRVlfTlVNTE9DSywgaW5wdXQtPmtleWJpdCk7Ci0KLQkvKiBFbmFibGUgYWxsIG5lZWRlZCBrZXlzICovCi0JZm9yICh0cmFucyA9IGFwcGxlX2ZuX2tleXM7IHRyYW5zLT5mcm9tOyB0cmFucysrKQotCQlzZXRfYml0KHRyYW5zLT50bywgaW5wdXQtPmtleWJpdCk7Ci0KLQlmb3IgKHRyYW5zID0gcG93ZXJib29rX2ZuX2tleXM7IHRyYW5zLT5mcm9tOyB0cmFucysrKQotCQlzZXRfYml0KHRyYW5zLT50bywgaW5wdXQtPmtleWJpdCk7Ci0KLQlmb3IgKHRyYW5zID0gcG93ZXJib29rX251bWxvY2tfa2V5czsgdHJhbnMtPmZyb207IHRyYW5zKyspCi0JCXNldF9iaXQodHJhbnMtPnRvLCBpbnB1dC0+a2V5Yml0KTsKLQotCWZvciAodHJhbnMgPSBhcHBsZV9pc29fa2V5Ym9hcmQ7IHRyYW5zLT5mcm9tOyB0cmFucysrKQotCQlzZXRfYml0KHRyYW5zLT50bywgaW5wdXQtPmtleWJpdCk7Ci0KLX0KLSNlbHNlCi1pbmxpbmUgaW50IGhpZGlucHV0X2FwcGxlX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsCi0JCQkJICAgICAgIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAotCQkJCSAgICAgICBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBoaWRpbnB1dF9hcHBsZV9zZXR1cChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKLXsKLX0KLSNlbmRpZgorI2RlZmluZSBtYXBfYWJzX2NsZWFyKGMpCWhpZF9tYXBfdXNhZ2VfY2xlYXIoaGlkaW5wdXQsIHVzYWdlLCAmYml0LCBcCisJCSZtYXgsIEVWX0FCUywgKGMpKQorI2RlZmluZSBtYXBfa2V5X2NsZWFyKGMpCWhpZF9tYXBfdXNhZ2VfY2xlYXIoaGlkaW5wdXQsIHVzYWdlLCAmYml0LCBcCisJCSZtYXgsIEVWX0tFWSwgKGMpKQogCiBzdGF0aWMgaW5saW5lIGludCBtYXRjaF9zY2FuY29kZShpbnQgY29kZSwgaW50IHNjYW5jb2RlKQogewpAQCAtMzY2LDcgKzE1NCw3IEBACiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBoaWRpbnB1dC0+aW5wdXQ7CiAJc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKLQlpbnQgbWF4ID0gMCwgY29kZSwgcmV0OworCWludCBtYXggPSAwLCBjb2RlOwogCXVuc2lnbmVkIGxvbmcgKmJpdCA9IE5VTEw7CiAKIAlmaWVsZC0+aGlkaW5wdXQgPSBoaWRpbnB1dDsKQEAgLTM4NSw0MDYgKzE3MywzNDUgQEAKIAkJZ290byBpZ25vcmU7CiAJfQogCi0JLyogaGFuZGxlIGlucHV0IG1hcHBpbmdzIGZvciBxdWlya3kgZGV2aWNlcyAqLwotCXJldCA9IGhpZGlucHV0X21hcHBpbmdfcXVpcmtzKHVzYWdlLCBpbnB1dCwgJmJpdCwgJm1heCk7Ci0JaWYgKHJldCkKLQkJZ290byBtYXBwZWQ7CisJaWYgKGRldmljZS0+ZHJpdmVyLT5pbnB1dF9tYXBwaW5nKSB7CisJCWludCByZXQgPSBkZXZpY2UtPmRyaXZlci0+aW5wdXRfbWFwcGluZyhkZXZpY2UsIGhpZGlucHV0LCBmaWVsZCwKKwkJCQl1c2FnZSwgJmJpdCwgJm1heCk7CisJCWlmIChyZXQgPiAwKQorCQkJZ290byBtYXBwZWQ7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBpZ25vcmU7CisJfQogCiAJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKwljYXNlIEhJRF9VUF9VTkRFRklORUQ6CisJCWdvdG8gaWdub3JlOwogCi0JCWNhc2UgSElEX1VQX1VOREVGSU5FRDoKLQkJCWdvdG8gaWdub3JlOworCWNhc2UgSElEX1VQX0tFWUJPQVJEOgorCQlzZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKIAotCQljYXNlIEhJRF9VUF9LRVlCT0FSRDoKKwkJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSA8IDI1NikgeworCQkJaWYgKCFoaWRfa2V5Ym9hcmRbdXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV0pIGdvdG8gaWdub3JlOworCQkJbWFwX2tleV9jbGVhcihoaWRfa2V5Ym9hcmRbdXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV0pOworCQl9IGVsc2UKKwkJCW1hcF9rZXkoS0VZX1VOS05PV04pOwogCi0JCQlzZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKKwkJYnJlYWs7CiAKLQkJCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgPCAyNTYpIHsKLQkJCQlpZiAoIWhpZF9rZXlib2FyZFt1c2FnZS0+aGlkICYgSElEX1VTQUdFXSkgZ290byBpZ25vcmU7Ci0JCQkJbWFwX2tleV9jbGVhcihoaWRfa2V5Ym9hcmRbdXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV0pOwotCQkJfSBlbHNlCi0JCQkJbWFwX2tleShLRVlfVU5LTk9XTik7CisJY2FzZSBISURfVVBfQlVUVE9OOgorCQljb2RlID0gKCh1c2FnZS0+aGlkIC0gMSkgJiAweGYpOwogCi0JCQlicmVhazsKLQotCQljYXNlIEhJRF9VUF9CVVRUT046Ci0KLQkJCWNvZGUgPSAoKHVzYWdlLT5oaWQgLSAxKSAmIDB4Zik7Ci0KLQkJCXN3aXRjaCAoZmllbGQtPmFwcGxpY2F0aW9uKSB7Ci0JCQkJY2FzZSBISURfR0RfTU9VU0U6Ci0JCQkJY2FzZSBISURfR0RfUE9JTlRFUjogIGNvZGUgKz0gMHgxMTA7IGJyZWFrOwotCQkJCWNhc2UgSElEX0dEX0pPWVNUSUNLOiBjb2RlICs9IDB4MTIwOyBicmVhazsKLQkJCQljYXNlIEhJRF9HRF9HQU1FUEFEOiAgY29kZSArPSAweDEzMDsgYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJc3dpdGNoIChmaWVsZC0+cGh5c2ljYWwpIHsKLQkJCQkJCWNhc2UgSElEX0dEX01PVVNFOgotCQkJCQkJY2FzZSBISURfR0RfUE9JTlRFUjogIGNvZGUgKz0gMHgxMTA7IGJyZWFrOwotCQkJCQkJY2FzZSBISURfR0RfSk9ZU1RJQ0s6IGNvZGUgKz0gMHgxMjA7IGJyZWFrOwotCQkJCQkJY2FzZSBISURfR0RfR0FNRVBBRDogIGNvZGUgKz0gMHgxMzA7IGJyZWFrOwotCQkJCQkJZGVmYXVsdDogICAgICAgICAgICAgIGNvZGUgKz0gMHgxMDA7Ci0JCQkJCX0KLQkJCX0KLQotCQkJLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgTG9naXRlY2ggQ29yZGxlc3MgRGVza3RvcCAqLwotCQkJaWYgKGZpZWxkLT5hcHBsaWNhdGlvbiAhPSBISURfR0RfTU9VU0UpIHsKLQkJCQlpZiAoZGV2aWNlLT5xdWlya3MgJiBISURfUVVJUktfTE9HSVRFQ0hfRVhQQU5ERURfS0VZTUFQKSB7Ci0JCQkJCWludCBoaWQgPSB1c2FnZS0+aGlkICYgSElEX1VTQUdFOwotCQkJCQlpZiAoaGlkIDwgTE9HSVRFQ0hfRVhQQU5ERURfS0VZTUFQX1NJWkUgJiYgbG9naXRlY2hfZXhwYW5kZWRfa2V5bWFwW2hpZF0gIT0gMCkKLQkJCQkJCWNvZGUgPSBsb2dpdGVjaF9leHBhbmRlZF9rZXltYXBbaGlkXTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChkZXZpY2UtPnF1aXJrcyAmIEhJRF9RVUlSS19MT0dJVEVDSF9JR05PUkVfRE9VQkxFRF9XSEVFTCkgewotCQkJCQlpbnQgaGlkID0gdXNhZ2UtPmhpZCAmIEhJRF9VU0FHRTsKLQkJCQkJaWYgKGhpZCA9PSA3IHx8IGhpZCA9PSA4KQotCQkJCQkJZ290byBpZ25vcmU7Ci0JCQkJfQotCQkJfQotCi0JCQltYXBfa2V5KGNvZGUpOwotCQkJYnJlYWs7Ci0KLQotCQljYXNlIEhJRF9VUF9TSU1VTEFUSU9OOgotCi0JCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGZmZmYpIHsKLQkJCQljYXNlIDB4YmE6IG1hcF9hYnMoQUJTX1JVRERFUik7ICAgYnJlYWs7Ci0JCQkJY2FzZSAweGJiOiBtYXBfYWJzKEFCU19USFJPVFRMRSk7IGJyZWFrOwotCQkJCWNhc2UgMHhjNDogbWFwX2FicyhBQlNfR0FTKTsgICAgICBicmVhazsKLQkJCQljYXNlIDB4YzU6IG1hcF9hYnMoQUJTX0JSQUtFKTsgICAgYnJlYWs7Ci0JCQkJY2FzZSAweGM4OiBtYXBfYWJzKEFCU19XSEVFTCk7ICAgIGJyZWFrOwotCQkJCWRlZmF1bHQ6ICAgZ290byBpZ25vcmU7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIEhJRF9VUF9HRU5ERVNLOgotCi0JCQlpZiAoKHVzYWdlLT5oaWQgJiAweGYwKSA9PSAweDgwKSB7CS8qIFN5c3RlbUNvbnRyb2wgKi8KLQkJCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGYpIHsKLQkJCQkJY2FzZSAweDE6IG1hcF9rZXlfY2xlYXIoS0VZX1BPV0VSKTsgIGJyZWFrOwotCQkJCQljYXNlIDB4MjogbWFwX2tleV9jbGVhcihLRVlfU0xFRVApOyAgYnJlYWs7Ci0JCQkJCWNhc2UgMHgzOiBtYXBfa2V5X2NsZWFyKEtFWV9XQUtFVVApOyBicmVhazsKLQkJCQkJZGVmYXVsdDogZ290byB1bmtub3duOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQotCQkJaWYgKCh1c2FnZS0+aGlkICYgMHhmMCkgPT0gMHg5MCkgewkvKiBELXBhZCAqLwotCQkJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewotCQkJCQljYXNlIEhJRF9HRF9VUDoJICAgdXNhZ2UtPmhhdF9kaXIgPSAxOyBicmVhazsKLQkJCQkJY2FzZSBISURfR0RfRE9XTjogIHVzYWdlLT5oYXRfZGlyID0gNTsgYnJlYWs7Ci0JCQkJCWNhc2UgSElEX0dEX1JJR0hUOiB1c2FnZS0+aGF0X2RpciA9IDM7IGJyZWFrOwotCQkJCQljYXNlIEhJRF9HRF9MRUZUOiAgdXNhZ2UtPmhhdF9kaXIgPSA3OyBicmVhazsKLQkJCQkJZGVmYXVsdDogZ290byB1bmtub3duOwotCQkJCX0KLQkJCQlpZiAoZmllbGQtPmRwYWQpIHsKLQkJCQkJbWFwX2FicyhmaWVsZC0+ZHBhZCk7Ci0JCQkJCWdvdG8gaWdub3JlOwotCQkJCX0KLQkJCQltYXBfYWJzKEFCU19IQVQwWCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewotCi0JCQkJLyogVGhlc2UgdXNhZ2UgSURzIG1hcCBkaXJlY3RseSB0byB0aGUgdXNhZ2UgY29kZXMuICovCi0JCQkJY2FzZSBISURfR0RfWDogY2FzZSBISURfR0RfWTogY2FzZSBISURfR0RfWjoKLQkJCQljYXNlIEhJRF9HRF9SWDogY2FzZSBISURfR0RfUlk6IGNhc2UgSElEX0dEX1JaOgotCQkJCWNhc2UgSElEX0dEX1NMSURFUjogY2FzZSBISURfR0RfRElBTDogY2FzZSBISURfR0RfV0hFRUw6Ci0JCQkJCWlmIChmaWVsZC0+ZmxhZ3MgJiBISURfTUFJTl9JVEVNX1JFTEFUSVZFKQotCQkJCQkJbWFwX3JlbCh1c2FnZS0+aGlkICYgMHhmKTsKLQkJCQkJZWxzZQotCQkJCQkJbWFwX2Ficyh1c2FnZS0+aGlkICYgMHhmKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhJRF9HRF9IQVRTV0lUQ0g6Ci0JCQkJCXVzYWdlLT5oYXRfbWluID0gZmllbGQtPmxvZ2ljYWxfbWluaW11bTsKLQkJCQkJdXNhZ2UtPmhhdF9tYXggPSBmaWVsZC0+bG9naWNhbF9tYXhpbXVtOwotCQkJCQltYXBfYWJzKEFCU19IQVQwWCk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBISURfR0RfU1RBUlQ6CW1hcF9rZXlfY2xlYXIoQlROX1NUQVJUKTsJYnJlYWs7Ci0JCQkJY2FzZSBISURfR0RfU0VMRUNUOgltYXBfa2V5X2NsZWFyKEJUTl9TRUxFQ1QpOwlicmVhazsKLQotCQkJCWRlZmF1bHQ6IGdvdG8gdW5rbm93bjsKLQkJCX0KLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBISURfVVBfTEVEOgotCi0JCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGZmZmYpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBISUQtVmFsdWU6ICAgICAgICAgICAgICAgICAgICovCi0JCQkJY2FzZSAweDAxOiAgbWFwX2xlZCAoTEVEX05VTUwpOyAgICAgYnJlYWs7ICAgIC8qICAgIk51bSBMb2NrIiAgICAgICAgICAgICAgICAgKi8KLQkJCQljYXNlIDB4MDI6ICBtYXBfbGVkIChMRURfQ0FQU0wpOyAgICBicmVhazsgICAgLyogICAiQ2FwcyBMb2NrIiAgICAgICAgICAgICAgICAqLwotCQkJCWNhc2UgMHgwMzogIG1hcF9sZWQgKExFRF9TQ1JPTExMKTsgIGJyZWFrOyAgICAvKiAgICJTY3JvbGwgTG9jayIgICAgICAgICAgICAgICovCi0JCQkJY2FzZSAweDA0OiAgbWFwX2xlZCAoTEVEX0NPTVBPU0UpOyAgYnJlYWs7ICAgIC8qICAgIkNvbXBvc2UiICAgICAgICAgICAgICAgICAgKi8KLQkJCQljYXNlIDB4MDU6ICBtYXBfbGVkIChMRURfS0FOQSk7ICAgICBicmVhazsgICAgLyogICAiS2FuYSIgICAgICAgICAgICAgICAgICAgICAqLwotCQkJCWNhc2UgMHgyNzogIG1hcF9sZWQgKExFRF9TTEVFUCk7ICAgIGJyZWFrOyAgICAvKiAgICJTdGFuZC1CeSIgICAgICAgICAgICAgICAgICovCi0JCQkJY2FzZSAweDRjOiAgbWFwX2xlZCAoTEVEX1NVU1BFTkQpOyAgYnJlYWs7ICAgIC8qICAgIlN5c3RlbSBTdXNwZW5kIiAgICAgICAgICAgKi8KLQkJCQljYXNlIDB4MDk6ICBtYXBfbGVkIChMRURfTVVURSk7ICAgICBicmVhazsgICAgLyogICAiTXV0ZSIgICAgICAgICAgICAgICAgICAgICAqLwotCQkJCWNhc2UgMHg0YjogIG1hcF9sZWQgKExFRF9NSVNDKTsgICAgIGJyZWFrOyAgICAvKiAgICJHZW5lcmljIEluZGljYXRvciIgICAgICAgICovCi0JCQkJY2FzZSAweDE5OiAgbWFwX2xlZCAoTEVEX01BSUwpOyAgICAgYnJlYWs7ICAgIC8qICAgIk1lc3NhZ2UgV2FpdGluZyIgICAgICAgICAgKi8KLQkJCQljYXNlIDB4NGQ6ICBtYXBfbGVkIChMRURfQ0hBUkdJTkcpOyBicmVhazsgICAgLyogICAiRXh0ZXJuYWwgUG93ZXIgQ29ubmVjdGVkIiAqLwotCi0JCQkJZGVmYXVsdDogZ290byBpZ25vcmU7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIEhJRF9VUF9ESUdJVElaRVI6Ci0KLQkJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIDB4ZmYpIHsKLQotCQkJCWNhc2UgMHgzMDogLyogVGlwUHJlc3N1cmUgKi8KLQkJCQkJaWYgKCF0ZXN0X2JpdChCVE5fVE9VQ0gsIGlucHV0LT5rZXliaXQpKSB7Ci0JCQkJCQlkZXZpY2UtPnF1aXJrcyB8PSBISURfUVVJUktfTk9UT1VDSDsKLQkJCQkJCXNldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOwotCQkJCQkJc2V0X2JpdChCVE5fVE9VQ0gsIGlucHV0LT5rZXliaXQpOwotCQkJCQl9Ci0KLQkJCQkJbWFwX2Fic19jbGVhcihBQlNfUFJFU1NVUkUpOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgMHgzMjogLyogSW5SYW5nZSAqLwotCQkJCQlzd2l0Y2ggKGZpZWxkLT5waHlzaWNhbCAmIDB4ZmYpIHsKLQkJCQkJCWNhc2UgMHgyMTogbWFwX2tleShCVE5fVE9PTF9NT1VTRSk7IGJyZWFrOwotCQkJCQkJY2FzZSAweDIyOiBtYXBfa2V5KEJUTl9UT09MX0ZJTkdFUik7IGJyZWFrOwotCQkJCQkJZGVmYXVsdDogbWFwX2tleShCVE5fVE9PTF9QRU4pOyBicmVhazsKLQkJCQkJfQotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgMHgzYzogLyogSW52ZXJ0ICovCi0JCQkJCW1hcF9rZXlfY2xlYXIoQlROX1RPT0xfUlVCQkVSKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIDB4MzM6IC8qIFRvdWNoICovCi0JCQkJY2FzZSAweDQyOiAvKiBUaXBTd2l0Y2ggKi8KLQkJCQljYXNlIDB4NDM6IC8qIFRpcFN3aXRjaDIgKi8KLQkJCQkJZGV2aWNlLT5xdWlya3MgJj0gfkhJRF9RVUlSS19OT1RPVUNIOwotCQkJCQltYXBfa2V5X2NsZWFyKEJUTl9UT1VDSCk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSAweDQ0OiAvKiBCYXJyZWxTd2l0Y2ggKi8KLQkJCQkJbWFwX2tleV9jbGVhcihCVE5fU1RZTFVTKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQlkZWZhdWx0OiAgZ290byB1bmtub3duOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBISURfVVBfQ09OU1VNRVI6CS8qIFVTQiBIVVQgdjEuMSwgcGFnZXMgNTYtNjIgKi8KLQotCQkJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7Ci0JCQkJY2FzZSAweDAwMDogZ290byBpZ25vcmU7Ci0JCQkJY2FzZSAweDAzNDogbWFwX2tleV9jbGVhcihLRVlfU0xFRVApOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDAzNjogbWFwX2tleV9jbGVhcihCVE5fTUlTQyk7CQlicmVhazsKLQotCQkJCWNhc2UgMHgwNDA6IG1hcF9rZXlfY2xlYXIoS0VZX01FTlUpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA0NTogbWFwX2tleV9jbGVhcihLRVlfUkFESU8pOwkJYnJlYWs7Ci0KLQkJCQljYXNlIDB4MDgzOiBtYXBfa2V5X2NsZWFyKEtFWV9MQVNUKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwODg6IG1hcF9rZXlfY2xlYXIoS0VZX1BDKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwODk6IG1hcF9rZXlfY2xlYXIoS0VZX1RWKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwOGE6IG1hcF9rZXlfY2xlYXIoS0VZX1dXVyk7CQlicmVhazsKLQkJCQljYXNlIDB4MDhiOiBtYXBfa2V5X2NsZWFyKEtFWV9EVkQpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA4YzogbWFwX2tleV9jbGVhcihLRVlfUEhPTkUpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA4ZDogbWFwX2tleV9jbGVhcihLRVlfUFJPR1JBTSk7CQlicmVhazsKLQkJCQljYXNlIDB4MDhlOiBtYXBfa2V5X2NsZWFyKEtFWV9WSURFT1BIT05FKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDA4ZjogbWFwX2tleV9jbGVhcihLRVlfR0FNRVMpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA5MDogbWFwX2tleV9jbGVhcihLRVlfTUVNTyk7CQlicmVhazsKLQkJCQljYXNlIDB4MDkxOiBtYXBfa2V5X2NsZWFyKEtFWV9DRCk7CQlicmVhazsKLQkJCQljYXNlIDB4MDkyOiBtYXBfa2V5X2NsZWFyKEtFWV9WQ1IpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA5MzogbWFwX2tleV9jbGVhcihLRVlfVFVORVIpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA5NDogbWFwX2tleV9jbGVhcihLRVlfRVhJVCk7CQlicmVhazsKLQkJCQljYXNlIDB4MDk1OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwOTY6IG1hcF9rZXlfY2xlYXIoS0VZX1RBUEUpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA5NzogbWFwX2tleV9jbGVhcihLRVlfVFYyKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwOTg6IG1hcF9rZXlfY2xlYXIoS0VZX1NBVCk7CQlicmVhazsKLQkJCQljYXNlIDB4MDlhOiBtYXBfa2V5X2NsZWFyKEtFWV9QVlIpOwkJYnJlYWs7Ci0KLQkJCQljYXNlIDB4MDljOiBtYXBfa2V5X2NsZWFyKEtFWV9DSEFOTkVMVVApOwlicmVhazsKLQkJCQljYXNlIDB4MDlkOiBtYXBfa2V5X2NsZWFyKEtFWV9DSEFOTkVMRE9XTik7CWJyZWFrOwotCQkJCWNhc2UgMHgwYTA6IG1hcF9rZXlfY2xlYXIoS0VZX1ZDUjIpOwkJYnJlYWs7Ci0KLQkJCQljYXNlIDB4MGIwOiBtYXBfa2V5X2NsZWFyKEtFWV9QTEFZKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwYjE6IG1hcF9rZXlfY2xlYXIoS0VZX1BBVVNFKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwYjI6IG1hcF9rZXlfY2xlYXIoS0VZX1JFQ09SRCk7CQlicmVhazsKLQkJCQljYXNlIDB4MGIzOiBtYXBfa2V5X2NsZWFyKEtFWV9GQVNURk9SV0FSRCk7CWJyZWFrOwotCQkJCWNhc2UgMHgwYjQ6IG1hcF9rZXlfY2xlYXIoS0VZX1JFV0lORCk7CQlicmVhazsKLQkJCQljYXNlIDB4MGI1OiBtYXBfa2V5X2NsZWFyKEtFWV9ORVhUU09ORyk7CWJyZWFrOwotCQkJCWNhc2UgMHgwYjY6IG1hcF9rZXlfY2xlYXIoS0VZX1BSRVZJT1VTU09ORyk7CWJyZWFrOwotCQkJCWNhc2UgMHgwYjc6IG1hcF9rZXlfY2xlYXIoS0VZX1NUT1BDRCk7CQlicmVhazsKLQkJCQljYXNlIDB4MGI4OiBtYXBfa2V5X2NsZWFyKEtFWV9FSkVDVENEKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwYmM6IG1hcF9rZXlfY2xlYXIoS0VZX01FRElBX1JFUEVBVCk7CWJyZWFrOwotCi0JCQkJY2FzZSAweDBjZDogbWFwX2tleV9jbGVhcihLRVlfUExBWVBBVVNFKTsJYnJlYWs7Ci0JCQkgICAgICAgIGNhc2UgMHgwZTA6IG1hcF9hYnNfY2xlYXIoQUJTX1ZPTFVNRSk7CQlicmVhazsKLQkJCQljYXNlIDB4MGUyOiBtYXBfa2V5X2NsZWFyKEtFWV9NVVRFKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwZTU6IG1hcF9rZXlfY2xlYXIoS0VZX0JBU1NCT09TVCk7CWJyZWFrOwotCQkJCWNhc2UgMHgwZTk6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPTFVNRVVQKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDBlYTogbWFwX2tleV9jbGVhcihLRVlfVk9MVU1FRE9XTik7CWJyZWFrOwotCi0JCQkJY2FzZSAweDE4MjogbWFwX2tleV9jbGVhcihLRVlfQk9PS01BUktTKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDE4MzogbWFwX2tleV9jbGVhcihLRVlfQ09ORklHKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgxODQ6IG1hcF9rZXlfY2xlYXIoS0VZX1dPUkRQUk9DRVNTT1IpOwlicmVhazsKLQkJCQljYXNlIDB4MTg1OiBtYXBfa2V5X2NsZWFyKEtFWV9FRElUT1IpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDE4NjogbWFwX2tleV9jbGVhcihLRVlfU1BSRUFEU0hFRVQpOwlicmVhazsKLQkJCQljYXNlIDB4MTg3OiBtYXBfa2V5X2NsZWFyKEtFWV9HUkFQSElDU0VESVRPUik7CWJyZWFrOwotCQkJCWNhc2UgMHgxODg6IG1hcF9rZXlfY2xlYXIoS0VZX1BSRVNFTlRBVElPTik7CWJyZWFrOwotCQkJCWNhc2UgMHgxODk6IG1hcF9rZXlfY2xlYXIoS0VZX0RBVEFCQVNFKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDE4YTogbWFwX2tleV9jbGVhcihLRVlfTUFJTCk7CQlicmVhazsKLQkJCQljYXNlIDB4MThiOiBtYXBfa2V5X2NsZWFyKEtFWV9ORVdTKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgxOGM6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPSUNFTUFJTCk7CWJyZWFrOwotCQkJCWNhc2UgMHgxOGQ6IG1hcF9rZXlfY2xlYXIoS0VZX0FERFJFU1NCT09LKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDE4ZTogbWFwX2tleV9jbGVhcihLRVlfQ0FMRU5EQVIpOwlicmVhazsKLQkJCQljYXNlIDB4MTkxOiBtYXBfa2V5X2NsZWFyKEtFWV9GSU5BTkNFKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgxOTI6IG1hcF9rZXlfY2xlYXIoS0VZX0NBTEMpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDE5NDogbWFwX2tleV9jbGVhcihLRVlfRklMRSk7CQlicmVhazsKLQkJCQljYXNlIDB4MTk2OiBtYXBfa2V5X2NsZWFyKEtFWV9XV1cpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDE5YzogbWFwX2tleV9jbGVhcihLRVlfTE9HT0ZGKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgxOWU6IG1hcF9rZXlfY2xlYXIoS0VZX0NPRkZFRSk7CQlicmVhazsKLQkJCQljYXNlIDB4MWE2OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgxYTc6IG1hcF9rZXlfY2xlYXIoS0VZX0RPQ1VNRU5UUyk7CWJyZWFrOwotCQkJCWNhc2UgMHgxYWI6IG1hcF9rZXlfY2xlYXIoS0VZX1NQRUxMQ0hFQ0spOwlicmVhazsKLQkJCQljYXNlIDB4MWI2OiBtYXBfa2V5X2NsZWFyKEtFWV9NRURJQSk7CQlicmVhazsKLQkJCQljYXNlIDB4MWI3OiBtYXBfa2V5X2NsZWFyKEtFWV9TT1VORCk7CQlicmVhazsKLQkJCQljYXNlIDB4MWJjOiBtYXBfa2V5X2NsZWFyKEtFWV9NRVNTRU5HRVIpOwlicmVhazsKLQkJCQljYXNlIDB4MWJkOiBtYXBfa2V5X2NsZWFyKEtFWV9JTkZPKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMDE6IG1hcF9rZXlfY2xlYXIoS0VZX05FVyk7CQlicmVhazsKLQkJCQljYXNlIDB4MjAyOiBtYXBfa2V5X2NsZWFyKEtFWV9PUEVOKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMDM6IG1hcF9rZXlfY2xlYXIoS0VZX0NMT1NFKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMDQ6IG1hcF9rZXlfY2xlYXIoS0VZX0VYSVQpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDIwNzogbWFwX2tleV9jbGVhcihLRVlfU0FWRSk7CQlicmVhazsKLQkJCQljYXNlIDB4MjA4OiBtYXBfa2V5X2NsZWFyKEtFWV9QUklOVCk7CQlicmVhazsKLQkJCQljYXNlIDB4MjA5OiBtYXBfa2V5X2NsZWFyKEtFWV9QUk9QUyk7CQlicmVhazsKLQkJCQljYXNlIDB4MjFhOiBtYXBfa2V5X2NsZWFyKEtFWV9VTkRPKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMWI6IG1hcF9rZXlfY2xlYXIoS0VZX0NPUFkpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDIxYzogbWFwX2tleV9jbGVhcihLRVlfQ1VUKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMWQ6IG1hcF9rZXlfY2xlYXIoS0VZX1BBU1RFKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMWY6IG1hcF9rZXlfY2xlYXIoS0VZX0ZJTkQpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDIyMTogbWFwX2tleV9jbGVhcihLRVlfU0VBUkNIKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMjI6IG1hcF9rZXlfY2xlYXIoS0VZX0dPVE8pOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDIyMzogbWFwX2tleV9jbGVhcihLRVlfSE9NRVBBR0UpOwlicmVhazsKLQkJCQljYXNlIDB4MjI0OiBtYXBfa2V5X2NsZWFyKEtFWV9CQUNLKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMjU6IG1hcF9rZXlfY2xlYXIoS0VZX0ZPUldBUkQpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDIyNjogbWFwX2tleV9jbGVhcihLRVlfU1RPUCk7CQlicmVhazsKLQkJCQljYXNlIDB4MjI3OiBtYXBfa2V5X2NsZWFyKEtFWV9SRUZSRVNIKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMmE6IG1hcF9rZXlfY2xlYXIoS0VZX0JPT0tNQVJLUyk7CWJyZWFrOwotCQkJCWNhc2UgMHgyMmQ6IG1hcF9rZXlfY2xlYXIoS0VZX1pPT01JTik7CQlicmVhazsKLQkJCQljYXNlIDB4MjJlOiBtYXBfa2V5X2NsZWFyKEtFWV9aT09NT1VUKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMmY6IG1hcF9rZXlfY2xlYXIoS0VZX1pPT01SRVNFVCk7CWJyZWFrOwotCQkJCWNhc2UgMHgyMzM6IG1hcF9rZXlfY2xlYXIoS0VZX1NDUk9MTFVQKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDIzNDogbWFwX2tleV9jbGVhcihLRVlfU0NST0xMRE9XTik7CWJyZWFrOwotCQkJCWNhc2UgMHgyMzg6IG1hcF9yZWwoUkVMX0hXSEVFTCk7CQlicmVhazsKLQkJCQljYXNlIDB4MjVmOiBtYXBfa2V5X2NsZWFyKEtFWV9DQU5DRUwpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDI3OTogbWFwX2tleV9jbGVhcihLRVlfUkVETyk7CQlicmVhazsKLQotCQkJCWNhc2UgMHgyODk6IG1hcF9rZXlfY2xlYXIoS0VZX1JFUExZKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyOGI6IG1hcF9rZXlfY2xlYXIoS0VZX0ZPUldBUkRNQUlMKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDI4YzogbWFwX2tleV9jbGVhcihLRVlfU0VORCk7CQlicmVhazsKLQotCQkJCWRlZmF1bHQ6ICAgIGdvdG8gaWdub3JlOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBISURfVVBfSFBWRU5ET1I6CS8qIFJlcG9ydGVkIG9uIGEgRHV0Y2ggbGF5b3V0IEhQNTMwOCAqLwotCi0JCQlzZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKLQkJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQkJICAgICAgICBjYXNlIDB4MDIxOiBtYXBfa2V5X2NsZWFyKEtFWV9QUklOVCk7ICAgICAgICAgICBicmVhazsKLQkJCQljYXNlIDB4MDcwOiBtYXBfa2V5X2NsZWFyKEtFWV9IUCk7CQlicmVhazsKLQkJCQljYXNlIDB4MDcxOiBtYXBfa2V5X2NsZWFyKEtFWV9DQU1FUkEpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA3MjogbWFwX2tleV9jbGVhcihLRVlfU09VTkQpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA3MzogbWFwX2tleV9jbGVhcihLRVlfUVVFU1RJT04pOwlicmVhazsKLQkJCQljYXNlIDB4MDgwOiBtYXBfa2V5X2NsZWFyKEtFWV9FTUFJTCk7CQlicmVhazsKLQkJCQljYXNlIDB4MDgxOiBtYXBfa2V5X2NsZWFyKEtFWV9DSEFUKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwODI6IG1hcF9rZXlfY2xlYXIoS0VZX1NFQVJDSCk7CQlicmVhazsKLQkJCQljYXNlIDB4MDgzOiBtYXBfa2V5X2NsZWFyKEtFWV9DT05ORUNUKTsJICAgICAgICBicmVhazsKLQkJCQljYXNlIDB4MDg0OiBtYXBfa2V5X2NsZWFyKEtFWV9GSU5BTkNFKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwODU6IG1hcF9rZXlfY2xlYXIoS0VZX1NQT1JUKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwODY6IG1hcF9rZXlfY2xlYXIoS0VZX1NIT1ApOwkgICAgICAgIGJyZWFrOwotCQkJCWRlZmF1bHQ6ICAgIGdvdG8gaWdub3JlOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBISURfVVBfTVNWRU5ET1I6Ci0KLQkJCWdvdG8gaWdub3JlOwotCi0JCWNhc2UgSElEX1VQX0NVU1RPTTogLyogUmVwb3J0ZWQgb24gTG9naXRlY2ggYW5kIEFwcGxlIFVTQiBrZXlib2FyZHMgKi8KLQotCQkJc2V0X2JpdChFVl9SRVAsIGlucHV0LT5ldmJpdCk7Ci0JCQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQkJCWNhc2UgMHgwMDM6Ci0JCQkJCS8qIFRoZSBmbiBrZXkgb24gQXBwbGUgVVNCIGtleWJvYXJkcyAqLwotCQkJCQltYXBfa2V5X2NsZWFyKEtFWV9GTik7Ci0JCQkJCWhpZGlucHV0X2FwcGxlX3NldHVwKGlucHV0KTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQlkZWZhdWx0OiAgICBnb3RvIGlnbm9yZTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgSElEX1VQX0xPR0lWRU5ET1I6Ci0KLQkJCWdvdG8gaWdub3JlOwotCQkKLQkJY2FzZSBISURfVVBfUElEOgotCi0JCQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQkJCWNhc2UgMHhhNDogbWFwX2tleV9jbGVhcihCVE5fREVBRCk7CWJyZWFrOwotCQkJCWRlZmF1bHQ6IGdvdG8gaWdub3JlOwotCQkJfQotCQkJYnJlYWs7Ci0KKwkJc3dpdGNoIChmaWVsZC0+YXBwbGljYXRpb24pIHsKKwkJY2FzZSBISURfR0RfTU9VU0U6CisJCWNhc2UgSElEX0dEX1BPSU5URVI6ICBjb2RlICs9IDB4MTEwOyBicmVhazsKKwkJY2FzZSBISURfR0RfSk9ZU1RJQ0s6IGNvZGUgKz0gMHgxMjA7IGJyZWFrOworCQljYXNlIEhJRF9HRF9HQU1FUEFEOiAgY29kZSArPSAweDEzMDsgYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCXVua25vd246Ci0JCQlpZiAoZmllbGQtPnJlcG9ydF9zaXplID09IDEpIHsKLQkJCQlpZiAoZmllbGQtPnJlcG9ydC0+dHlwZSA9PSBISURfT1VUUFVUX1JFUE9SVCkgewotCQkJCQltYXBfbGVkKExFRF9NSVNDKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCW1hcF9rZXkoQlROX01JU0MpOwotCQkJCWJyZWFrOworCQkJc3dpdGNoIChmaWVsZC0+cGh5c2ljYWwpIHsKKwkJCWNhc2UgSElEX0dEX01PVVNFOgorCQkJY2FzZSBISURfR0RfUE9JTlRFUjogIGNvZGUgKz0gMHgxMTA7IGJyZWFrOworCQkJY2FzZSBISURfR0RfSk9ZU1RJQ0s6IGNvZGUgKz0gMHgxMjA7IGJyZWFrOworCQkJY2FzZSBISURfR0RfR0FNRVBBRDogIGNvZGUgKz0gMHgxMzA7IGJyZWFrOworCQkJZGVmYXVsdDogICAgICAgICAgICAgIGNvZGUgKz0gMHgxMDA7CiAJCQl9Ci0JCQlpZiAoZmllbGQtPmZsYWdzICYgSElEX01BSU5fSVRFTV9SRUxBVElWRSkgewotCQkJCW1hcF9yZWwoUkVMX01JU0MpOwotCQkJCWJyZWFrOworCQl9CisKKwkJbWFwX2tleShjb2RlKTsKKwkJYnJlYWs7CisKKwljYXNlIEhJRF9VUF9TSU1VTEFUSU9OOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGZmZmYpIHsKKwkJY2FzZSAweGJhOiBtYXBfYWJzKEFCU19SVURERVIpOyAgIGJyZWFrOworCQljYXNlIDB4YmI6IG1hcF9hYnMoQUJTX1RIUk9UVExFKTsgYnJlYWs7CisJCWNhc2UgMHhjNDogbWFwX2FicyhBQlNfR0FTKTsgICAgICBicmVhazsKKwkJY2FzZSAweGM1OiBtYXBfYWJzKEFCU19CUkFLRSk7ICAgIGJyZWFrOworCQljYXNlIDB4Yzg6IG1hcF9hYnMoQUJTX1dIRUVMKTsgICAgYnJlYWs7CisJCWRlZmF1bHQ6ICAgZ290byBpZ25vcmU7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEhJRF9VUF9HRU5ERVNLOgorCQlpZiAoKHVzYWdlLT5oaWQgJiAweGYwKSA9PSAweDgwKSB7CS8qIFN5c3RlbUNvbnRyb2wgKi8KKwkJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIDB4ZikgeworCQkJY2FzZSAweDE6IG1hcF9rZXlfY2xlYXIoS0VZX1BPV0VSKTsgIGJyZWFrOworCQkJY2FzZSAweDI6IG1hcF9rZXlfY2xlYXIoS0VZX1NMRUVQKTsgIGJyZWFrOworCQkJY2FzZSAweDM6IG1hcF9rZXlfY2xlYXIoS0VZX1dBS0VVUCk7IGJyZWFrOworCQkJZGVmYXVsdDogZ290byB1bmtub3duOwogCQkJfQotCQkJbWFwX2FicyhBQlNfTUlTQyk7CiAJCQlicmVhazsKKwkJfQorCisJCWlmICgodXNhZ2UtPmhpZCAmIDB4ZjApID09IDB4OTApIHsJLyogRC1wYWQgKi8KKwkJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQkJY2FzZSBISURfR0RfVVA6CSAgIHVzYWdlLT5oYXRfZGlyID0gMTsgYnJlYWs7CisJCQljYXNlIEhJRF9HRF9ET1dOOiAgdXNhZ2UtPmhhdF9kaXIgPSA1OyBicmVhazsKKwkJCWNhc2UgSElEX0dEX1JJR0hUOiB1c2FnZS0+aGF0X2RpciA9IDM7IGJyZWFrOworCQkJY2FzZSBISURfR0RfTEVGVDogIHVzYWdlLT5oYXRfZGlyID0gNzsgYnJlYWs7CisJCQlkZWZhdWx0OiBnb3RvIHVua25vd247CisJCQl9CisJCQlpZiAoZmllbGQtPmRwYWQpIHsKKwkJCQltYXBfYWJzKGZpZWxkLT5kcGFkKTsKKwkJCQlnb3RvIGlnbm9yZTsKKwkJCX0KKwkJCW1hcF9hYnMoQUJTX0hBVDBYKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCS8qIFRoZXNlIHVzYWdlIElEcyBtYXAgZGlyZWN0bHkgdG8gdGhlIHVzYWdlIGNvZGVzLiAqLworCQljYXNlIEhJRF9HRF9YOiBjYXNlIEhJRF9HRF9ZOiBjYXNlIEhJRF9HRF9aOgorCQljYXNlIEhJRF9HRF9SWDogY2FzZSBISURfR0RfUlk6IGNhc2UgSElEX0dEX1JaOgorCQljYXNlIEhJRF9HRF9TTElERVI6IGNhc2UgSElEX0dEX0RJQUw6IGNhc2UgSElEX0dEX1dIRUVMOgorCQkJaWYgKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fUkVMQVRJVkUpCisJCQkJbWFwX3JlbCh1c2FnZS0+aGlkICYgMHhmKTsKKwkJCWVsc2UKKwkJCQltYXBfYWJzKHVzYWdlLT5oaWQgJiAweGYpOworCQkJYnJlYWs7CisKKwkJY2FzZSBISURfR0RfSEFUU1dJVENIOgorCQkJdXNhZ2UtPmhhdF9taW4gPSBmaWVsZC0+bG9naWNhbF9taW5pbXVtOworCQkJdXNhZ2UtPmhhdF9tYXggPSBmaWVsZC0+bG9naWNhbF9tYXhpbXVtOworCQkJbWFwX2FicyhBQlNfSEFUMFgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBISURfR0RfU1RBUlQ6CW1hcF9rZXlfY2xlYXIoQlROX1NUQVJUKTsJYnJlYWs7CisJCWNhc2UgSElEX0dEX1NFTEVDVDoJbWFwX2tleV9jbGVhcihCVE5fU0VMRUNUKTsJYnJlYWs7CisKKwkJZGVmYXVsdDogZ290byB1bmtub3duOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIEhJRF9VUF9MRUQ6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIDB4ZmZmZikgewkJICAgICAgLyogSElELVZhbHVlOiAgICAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4MDE6ICBtYXBfbGVkIChMRURfTlVNTCk7ICAgICBicmVhazsgICAgLyogICAiTnVtIExvY2siICAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4MDI6ICBtYXBfbGVkIChMRURfQ0FQU0wpOyAgICBicmVhazsgICAgLyogICAiQ2FwcyBMb2NrIiAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4MDM6ICBtYXBfbGVkIChMRURfU0NST0xMTCk7ICBicmVhazsgICAgLyogICAiU2Nyb2xsIExvY2siICAgICAgICAgICAgICAqLworCQljYXNlIDB4MDQ6ICBtYXBfbGVkIChMRURfQ09NUE9TRSk7ICBicmVhazsgICAgLyogICAiQ29tcG9zZSIgICAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4MDU6ICBtYXBfbGVkIChMRURfS0FOQSk7ICAgICBicmVhazsgICAgLyogICAiS2FuYSIgICAgICAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4Mjc6ICBtYXBfbGVkIChMRURfU0xFRVApOyAgICBicmVhazsgICAgLyogICAiU3RhbmQtQnkiICAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4NGM6ICBtYXBfbGVkIChMRURfU1VTUEVORCk7ICBicmVhazsgICAgLyogICAiU3lzdGVtIFN1c3BlbmQiICAgICAgICAgICAqLworCQljYXNlIDB4MDk6ICBtYXBfbGVkIChMRURfTVVURSk7ICAgICBicmVhazsgICAgLyogICAiTXV0ZSIgICAgICAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4NGI6ICBtYXBfbGVkIChMRURfTUlTQyk7ICAgICBicmVhazsgICAgLyogICAiR2VuZXJpYyBJbmRpY2F0b3IiICAgICAgICAqLworCQljYXNlIDB4MTk6ICBtYXBfbGVkIChMRURfTUFJTCk7ICAgICBicmVhazsgICAgLyogICAiTWVzc2FnZSBXYWl0aW5nIiAgICAgICAgICAqLworCQljYXNlIDB4NGQ6ICBtYXBfbGVkIChMRURfQ0hBUkdJTkcpOyBicmVhazsgICAgLyogICAiRXh0ZXJuYWwgUG93ZXIgQ29ubmVjdGVkIiAqLworCisJCWRlZmF1bHQ6IGdvdG8gaWdub3JlOworCQl9CisJCWJyZWFrOworCisJY2FzZSBISURfVVBfRElHSVRJWkVSOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGZmKSB7CisJCWNhc2UgMHgzMDogLyogVGlwUHJlc3N1cmUgKi8KKwkJCWlmICghdGVzdF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KSkgeworCQkJCWRldmljZS0+cXVpcmtzIHw9IEhJRF9RVUlSS19OT1RPVUNIOworCQkJCXNldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOworCQkJCXNldF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KTsKKwkJCX0KKwkJCW1hcF9hYnNfY2xlYXIoQUJTX1BSRVNTVVJFKTsKKwkJCWJyZWFrOworCisJCWNhc2UgMHgzMjogLyogSW5SYW5nZSAqLworCQkJc3dpdGNoIChmaWVsZC0+cGh5c2ljYWwgJiAweGZmKSB7CisJCQljYXNlIDB4MjE6IG1hcF9rZXkoQlROX1RPT0xfTU9VU0UpOyBicmVhazsKKwkJCWNhc2UgMHgyMjogbWFwX2tleShCVE5fVE9PTF9GSU5HRVIpOyBicmVhazsKKwkJCWRlZmF1bHQ6IG1hcF9rZXkoQlROX1RPT0xfUEVOKTsgYnJlYWs7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIDB4M2M6IC8qIEludmVydCAqLworCQkJbWFwX2tleV9jbGVhcihCVE5fVE9PTF9SVUJCRVIpOworCQkJYnJlYWs7CisKKwkJY2FzZSAweDMzOiAvKiBUb3VjaCAqLworCQljYXNlIDB4NDI6IC8qIFRpcFN3aXRjaCAqLworCQljYXNlIDB4NDM6IC8qIFRpcFN3aXRjaDIgKi8KKwkJCWRldmljZS0+cXVpcmtzICY9IH5ISURfUVVJUktfTk9UT1VDSDsKKwkJCW1hcF9rZXlfY2xlYXIoQlROX1RPVUNIKTsKKwkJCWJyZWFrOworCisJCWNhc2UgMHg0NDogLyogQmFycmVsU3dpdGNoICovCisJCQltYXBfa2V5X2NsZWFyKEJUTl9TVFlMVVMpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDogIGdvdG8gdW5rbm93bjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSElEX1VQX0NPTlNVTUVSOgkvKiBVU0IgSFVUIHYxLjEsIHBhZ2VzIDU2LTYyICovCisJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCQljYXNlIDB4MDAwOiBnb3RvIGlnbm9yZTsKKwkJY2FzZSAweDAzNDogbWFwX2tleV9jbGVhcihLRVlfU0xFRVApOwkJYnJlYWs7CisJCWNhc2UgMHgwMzY6IG1hcF9rZXlfY2xlYXIoQlROX01JU0MpOwkJYnJlYWs7CisKKwkJY2FzZSAweDA0MDogbWFwX2tleV9jbGVhcihLRVlfTUVOVSk7CQlicmVhazsKKwkJY2FzZSAweDA0NTogbWFwX2tleV9jbGVhcihLRVlfUkFESU8pOwkJYnJlYWs7CisKKwkJY2FzZSAweDA4MzogbWFwX2tleV9jbGVhcihLRVlfTEFTVCk7CQlicmVhazsKKwkJY2FzZSAweDA4ODogbWFwX2tleV9jbGVhcihLRVlfUEMpOwkJYnJlYWs7CisJCWNhc2UgMHgwODk6IG1hcF9rZXlfY2xlYXIoS0VZX1RWKTsJCWJyZWFrOworCQljYXNlIDB4MDhhOiBtYXBfa2V5X2NsZWFyKEtFWV9XV1cpOwkJYnJlYWs7CisJCWNhc2UgMHgwOGI6IG1hcF9rZXlfY2xlYXIoS0VZX0RWRCk7CQlicmVhazsKKwkJY2FzZSAweDA4YzogbWFwX2tleV9jbGVhcihLRVlfUEhPTkUpOwkJYnJlYWs7CisJCWNhc2UgMHgwOGQ6IG1hcF9rZXlfY2xlYXIoS0VZX1BST0dSQU0pOwkJYnJlYWs7CisJCWNhc2UgMHgwOGU6IG1hcF9rZXlfY2xlYXIoS0VZX1ZJREVPUEhPTkUpOwlicmVhazsKKwkJY2FzZSAweDA4ZjogbWFwX2tleV9jbGVhcihLRVlfR0FNRVMpOwkJYnJlYWs7CisJCWNhc2UgMHgwOTA6IG1hcF9rZXlfY2xlYXIoS0VZX01FTU8pOwkJYnJlYWs7CisJCWNhc2UgMHgwOTE6IG1hcF9rZXlfY2xlYXIoS0VZX0NEKTsJCWJyZWFrOworCQljYXNlIDB4MDkyOiBtYXBfa2V5X2NsZWFyKEtFWV9WQ1IpOwkJYnJlYWs7CisJCWNhc2UgMHgwOTM6IG1hcF9rZXlfY2xlYXIoS0VZX1RVTkVSKTsJCWJyZWFrOworCQljYXNlIDB4MDk0OiBtYXBfa2V5X2NsZWFyKEtFWV9FWElUKTsJCWJyZWFrOworCQljYXNlIDB4MDk1OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsJCWJyZWFrOworCQljYXNlIDB4MDk2OiBtYXBfa2V5X2NsZWFyKEtFWV9UQVBFKTsJCWJyZWFrOworCQljYXNlIDB4MDk3OiBtYXBfa2V5X2NsZWFyKEtFWV9UVjIpOwkJYnJlYWs7CisJCWNhc2UgMHgwOTg6IG1hcF9rZXlfY2xlYXIoS0VZX1NBVCk7CQlicmVhazsKKwkJY2FzZSAweDA5YTogbWFwX2tleV9jbGVhcihLRVlfUFZSKTsJCWJyZWFrOworCisJCWNhc2UgMHgwOWM6IG1hcF9rZXlfY2xlYXIoS0VZX0NIQU5ORUxVUCk7CWJyZWFrOworCQljYXNlIDB4MDlkOiBtYXBfa2V5X2NsZWFyKEtFWV9DSEFOTkVMRE9XTik7CWJyZWFrOworCQljYXNlIDB4MGEwOiBtYXBfa2V5X2NsZWFyKEtFWV9WQ1IyKTsJCWJyZWFrOworCisJCWNhc2UgMHgwYjA6IG1hcF9rZXlfY2xlYXIoS0VZX1BMQVkpOwkJYnJlYWs7CisJCWNhc2UgMHgwYjE6IG1hcF9rZXlfY2xlYXIoS0VZX1BBVVNFKTsJCWJyZWFrOworCQljYXNlIDB4MGIyOiBtYXBfa2V5X2NsZWFyKEtFWV9SRUNPUkQpOwkJYnJlYWs7CisJCWNhc2UgMHgwYjM6IG1hcF9rZXlfY2xlYXIoS0VZX0ZBU1RGT1JXQVJEKTsJYnJlYWs7CisJCWNhc2UgMHgwYjQ6IG1hcF9rZXlfY2xlYXIoS0VZX1JFV0lORCk7CQlicmVhazsKKwkJY2FzZSAweDBiNTogbWFwX2tleV9jbGVhcihLRVlfTkVYVFNPTkcpOwlicmVhazsKKwkJY2FzZSAweDBiNjogbWFwX2tleV9jbGVhcihLRVlfUFJFVklPVVNTT05HKTsJYnJlYWs7CisJCWNhc2UgMHgwYjc6IG1hcF9rZXlfY2xlYXIoS0VZX1NUT1BDRCk7CQlicmVhazsKKwkJY2FzZSAweDBiODogbWFwX2tleV9jbGVhcihLRVlfRUpFQ1RDRCk7CQlicmVhazsKKwkJY2FzZSAweDBiYzogbWFwX2tleV9jbGVhcihLRVlfTUVESUFfUkVQRUFUKTsJYnJlYWs7CisKKwkJY2FzZSAweDBjZDogbWFwX2tleV9jbGVhcihLRVlfUExBWVBBVVNFKTsJYnJlYWs7CisJCWNhc2UgMHgwZTA6IG1hcF9hYnNfY2xlYXIoQUJTX1ZPTFVNRSk7CQlicmVhazsKKwkJY2FzZSAweDBlMjogbWFwX2tleV9jbGVhcihLRVlfTVVURSk7CQlicmVhazsKKwkJY2FzZSAweDBlNTogbWFwX2tleV9jbGVhcihLRVlfQkFTU0JPT1NUKTsJYnJlYWs7CisJCWNhc2UgMHgwZTk6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPTFVNRVVQKTsJYnJlYWs7CisJCWNhc2UgMHgwZWE6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPTFVNRURPV04pOwlicmVhazsKKworCQljYXNlIDB4MTgyOiBtYXBfa2V5X2NsZWFyKEtFWV9CT09LTUFSS1MpOwlicmVhazsKKwkJY2FzZSAweDE4MzogbWFwX2tleV9jbGVhcihLRVlfQ09ORklHKTsJCWJyZWFrOworCQljYXNlIDB4MTg0OiBtYXBfa2V5X2NsZWFyKEtFWV9XT1JEUFJPQ0VTU09SKTsJYnJlYWs7CisJCWNhc2UgMHgxODU6IG1hcF9rZXlfY2xlYXIoS0VZX0VESVRPUik7CQlicmVhazsKKwkJY2FzZSAweDE4NjogbWFwX2tleV9jbGVhcihLRVlfU1BSRUFEU0hFRVQpOwlicmVhazsKKwkJY2FzZSAweDE4NzogbWFwX2tleV9jbGVhcihLRVlfR1JBUEhJQ1NFRElUT1IpOwlicmVhazsKKwkJY2FzZSAweDE4ODogbWFwX2tleV9jbGVhcihLRVlfUFJFU0VOVEFUSU9OKTsJYnJlYWs7CisJCWNhc2UgMHgxODk6IG1hcF9rZXlfY2xlYXIoS0VZX0RBVEFCQVNFKTsJYnJlYWs7CisJCWNhc2UgMHgxOGE6IG1hcF9rZXlfY2xlYXIoS0VZX01BSUwpOwkJYnJlYWs7CisJCWNhc2UgMHgxOGI6IG1hcF9rZXlfY2xlYXIoS0VZX05FV1MpOwkJYnJlYWs7CisJCWNhc2UgMHgxOGM6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPSUNFTUFJTCk7CWJyZWFrOworCQljYXNlIDB4MThkOiBtYXBfa2V5X2NsZWFyKEtFWV9BRERSRVNTQk9PSyk7CWJyZWFrOworCQljYXNlIDB4MThlOiBtYXBfa2V5X2NsZWFyKEtFWV9DQUxFTkRBUik7CWJyZWFrOworCQljYXNlIDB4MTkxOiBtYXBfa2V5X2NsZWFyKEtFWV9GSU5BTkNFKTsJCWJyZWFrOworCQljYXNlIDB4MTkyOiBtYXBfa2V5X2NsZWFyKEtFWV9DQUxDKTsJCWJyZWFrOworCQljYXNlIDB4MTk0OiBtYXBfa2V5X2NsZWFyKEtFWV9GSUxFKTsJCWJyZWFrOworCQljYXNlIDB4MTk2OiBtYXBfa2V5X2NsZWFyKEtFWV9XV1cpOwkJYnJlYWs7CisJCWNhc2UgMHgxOWM6IG1hcF9rZXlfY2xlYXIoS0VZX0xPR09GRik7CQlicmVhazsKKwkJY2FzZSAweDE5ZTogbWFwX2tleV9jbGVhcihLRVlfQ09GRkVFKTsJCWJyZWFrOworCQljYXNlIDB4MWE2OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsJCWJyZWFrOworCQljYXNlIDB4MWE3OiBtYXBfa2V5X2NsZWFyKEtFWV9ET0NVTUVOVFMpOwlicmVhazsKKwkJY2FzZSAweDFhYjogbWFwX2tleV9jbGVhcihLRVlfU1BFTExDSEVDSyk7CWJyZWFrOworCQljYXNlIDB4MWI2OiBtYXBfa2V5X2NsZWFyKEtFWV9NRURJQSk7CQlicmVhazsKKwkJY2FzZSAweDFiNzogbWFwX2tleV9jbGVhcihLRVlfU09VTkQpOwkJYnJlYWs7CisJCWNhc2UgMHgxYmM6IG1hcF9rZXlfY2xlYXIoS0VZX01FU1NFTkdFUik7CWJyZWFrOworCQljYXNlIDB4MWJkOiBtYXBfa2V5X2NsZWFyKEtFWV9JTkZPKTsJCWJyZWFrOworCQljYXNlIDB4MjAxOiBtYXBfa2V5X2NsZWFyKEtFWV9ORVcpOwkJYnJlYWs7CisJCWNhc2UgMHgyMDI6IG1hcF9rZXlfY2xlYXIoS0VZX09QRU4pOwkJYnJlYWs7CisJCWNhc2UgMHgyMDM6IG1hcF9rZXlfY2xlYXIoS0VZX0NMT1NFKTsJCWJyZWFrOworCQljYXNlIDB4MjA0OiBtYXBfa2V5X2NsZWFyKEtFWV9FWElUKTsJCWJyZWFrOworCQljYXNlIDB4MjA3OiBtYXBfa2V5X2NsZWFyKEtFWV9TQVZFKTsJCWJyZWFrOworCQljYXNlIDB4MjA4OiBtYXBfa2V5X2NsZWFyKEtFWV9QUklOVCk7CQlicmVhazsKKwkJY2FzZSAweDIwOTogbWFwX2tleV9jbGVhcihLRVlfUFJPUFMpOwkJYnJlYWs7CisJCWNhc2UgMHgyMWE6IG1hcF9rZXlfY2xlYXIoS0VZX1VORE8pOwkJYnJlYWs7CisJCWNhc2UgMHgyMWI6IG1hcF9rZXlfY2xlYXIoS0VZX0NPUFkpOwkJYnJlYWs7CisJCWNhc2UgMHgyMWM6IG1hcF9rZXlfY2xlYXIoS0VZX0NVVCk7CQlicmVhazsKKwkJY2FzZSAweDIxZDogbWFwX2tleV9jbGVhcihLRVlfUEFTVEUpOwkJYnJlYWs7CisJCWNhc2UgMHgyMWY6IG1hcF9rZXlfY2xlYXIoS0VZX0ZJTkQpOwkJYnJlYWs7CisJCWNhc2UgMHgyMjE6IG1hcF9rZXlfY2xlYXIoS0VZX1NFQVJDSCk7CQlicmVhazsKKwkJY2FzZSAweDIyMjogbWFwX2tleV9jbGVhcihLRVlfR09UTyk7CQlicmVhazsKKwkJY2FzZSAweDIyMzogbWFwX2tleV9jbGVhcihLRVlfSE9NRVBBR0UpOwlicmVhazsKKwkJY2FzZSAweDIyNDogbWFwX2tleV9jbGVhcihLRVlfQkFDSyk7CQlicmVhazsKKwkJY2FzZSAweDIyNTogbWFwX2tleV9jbGVhcihLRVlfRk9SV0FSRCk7CQlicmVhazsKKwkJY2FzZSAweDIyNjogbWFwX2tleV9jbGVhcihLRVlfU1RPUCk7CQlicmVhazsKKwkJY2FzZSAweDIyNzogbWFwX2tleV9jbGVhcihLRVlfUkVGUkVTSCk7CQlicmVhazsKKwkJY2FzZSAweDIyYTogbWFwX2tleV9jbGVhcihLRVlfQk9PS01BUktTKTsJYnJlYWs7CisJCWNhc2UgMHgyMmQ6IG1hcF9rZXlfY2xlYXIoS0VZX1pPT01JTik7CQlicmVhazsKKwkJY2FzZSAweDIyZTogbWFwX2tleV9jbGVhcihLRVlfWk9PTU9VVCk7CQlicmVhazsKKwkJY2FzZSAweDIyZjogbWFwX2tleV9jbGVhcihLRVlfWk9PTVJFU0VUKTsJYnJlYWs7CisJCWNhc2UgMHgyMzM6IG1hcF9rZXlfY2xlYXIoS0VZX1NDUk9MTFVQKTsJYnJlYWs7CisJCWNhc2UgMHgyMzQ6IG1hcF9rZXlfY2xlYXIoS0VZX1NDUk9MTERPV04pOwlicmVhazsKKwkJY2FzZSAweDIzODogbWFwX3JlbChSRUxfSFdIRUVMKTsJCWJyZWFrOworCQljYXNlIDB4MjVmOiBtYXBfa2V5X2NsZWFyKEtFWV9DQU5DRUwpOwkJYnJlYWs7CisJCWNhc2UgMHgyNzk6IG1hcF9rZXlfY2xlYXIoS0VZX1JFRE8pOwkJYnJlYWs7CisKKwkJY2FzZSAweDI4OTogbWFwX2tleV9jbGVhcihLRVlfUkVQTFkpOwkJYnJlYWs7CisJCWNhc2UgMHgyOGI6IG1hcF9rZXlfY2xlYXIoS0VZX0ZPUldBUkRNQUlMKTsJYnJlYWs7CisJCWNhc2UgMHgyOGM6IG1hcF9rZXlfY2xlYXIoS0VZX1NFTkQpOwkJYnJlYWs7CisKKwkJZGVmYXVsdDogICAgZ290byBpZ25vcmU7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEhJRF9VUF9IUFZFTkRPUjoJLyogUmVwb3J0ZWQgb24gYSBEdXRjaCBsYXlvdXQgSFA1MzA4ICovCisJCXNldF9iaXQoRVZfUkVQLCBpbnB1dC0+ZXZiaXQpOworCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwkJY2FzZSAweDAyMTogbWFwX2tleV9jbGVhcihLRVlfUFJJTlQpOyAgICAgICAgICAgYnJlYWs7CisJCWNhc2UgMHgwNzA6IG1hcF9rZXlfY2xlYXIoS0VZX0hQKTsJCWJyZWFrOworCQljYXNlIDB4MDcxOiBtYXBfa2V5X2NsZWFyKEtFWV9DQU1FUkEpOwkJYnJlYWs7CisJCWNhc2UgMHgwNzI6IG1hcF9rZXlfY2xlYXIoS0VZX1NPVU5EKTsJCWJyZWFrOworCQljYXNlIDB4MDczOiBtYXBfa2V5X2NsZWFyKEtFWV9RVUVTVElPTik7CWJyZWFrOworCQljYXNlIDB4MDgwOiBtYXBfa2V5X2NsZWFyKEtFWV9FTUFJTCk7CQlicmVhazsKKwkJY2FzZSAweDA4MTogbWFwX2tleV9jbGVhcihLRVlfQ0hBVCk7CQlicmVhazsKKwkJY2FzZSAweDA4MjogbWFwX2tleV9jbGVhcihLRVlfU0VBUkNIKTsJCWJyZWFrOworCQljYXNlIDB4MDgzOiBtYXBfa2V5X2NsZWFyKEtFWV9DT05ORUNUKTsJICAgICAgICBicmVhazsKKwkJY2FzZSAweDA4NDogbWFwX2tleV9jbGVhcihLRVlfRklOQU5DRSk7CQlicmVhazsKKwkJY2FzZSAweDA4NTogbWFwX2tleV9jbGVhcihLRVlfU1BPUlQpOwkJYnJlYWs7CisJCWNhc2UgMHgwODY6IG1hcF9rZXlfY2xlYXIoS0VZX1NIT1ApOwkgICAgICAgIGJyZWFrOworCQlkZWZhdWx0OiAgICBnb3RvIGlnbm9yZTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSElEX1VQX01TVkVORE9SOgorCQlnb3RvIGlnbm9yZTsKKworCWNhc2UgSElEX1VQX0NVU1RPTTogLyogUmVwb3J0ZWQgb24gTG9naXRlY2ggYW5kIEFwcGxlIFVTQiBrZXlib2FyZHMgKi8KKwkJc2V0X2JpdChFVl9SRVAsIGlucHV0LT5ldmJpdCk7CisJCWdvdG8gaWdub3JlOworCisJY2FzZSBISURfVVBfTE9HSVZFTkRPUjoKKwkJZ290byBpZ25vcmU7CisJCisJY2FzZSBISURfVVBfUElEOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwkJY2FzZSAweGE0OiBtYXBfa2V5X2NsZWFyKEJUTl9ERUFEKTsJYnJlYWs7CisJCWRlZmF1bHQ6IGdvdG8gaWdub3JlOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwl1bmtub3duOgorCQlpZiAoZmllbGQtPnJlcG9ydF9zaXplID09IDEpIHsKKwkJCWlmIChmaWVsZC0+cmVwb3J0LT50eXBlID09IEhJRF9PVVRQVVRfUkVQT1JUKSB7CisJCQkJbWFwX2xlZChMRURfTUlTQyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQltYXBfa2V5KEJUTl9NSVNDKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChmaWVsZC0+ZmxhZ3MgJiBISURfTUFJTl9JVEVNX1JFTEFUSVZFKSB7CisJCQltYXBfcmVsKFJFTF9NSVNDKTsKKwkJCWJyZWFrOworCQl9CisJCW1hcF9hYnMoQUJTX01JU0MpOworCQlicmVhazsKIAl9CiAKIG1hcHBlZDoKLQlpZiAoZGV2aWNlLT5xdWlya3MgJiBISURfUVVJUktfTUlHSFRZTU9VU0UpIHsKLQkJaWYgKHVzYWdlLT5oaWQgPT0gSElEX0dEX1opCi0JCQltYXBfcmVsKFJFTF9IV0hFRUwpOwotCQllbHNlIGlmICh1c2FnZS0+Y29kZSA9PSBCVE5fMSkKLQkJCW1hcF9rZXkoQlROXzIpOwotCQllbHNlIGlmICh1c2FnZS0+Y29kZSA9PSBCVE5fMikKLQkJCW1hcF9rZXkoQlROXzEpOwotCX0KLQotCWlmICgoZGV2aWNlLT5xdWlya3MgJiAoSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcgfCBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfNSB8Ci0JCQlISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfQjgpKSAmJiAodXNhZ2UtPnR5cGUgPT0gRVZfUkVMKSAmJgotCQkJKHVzYWdlLT5jb2RlID09IFJFTF9XSEVFTCkpCi0JCXNldF9iaXQoUkVMX0hXSEVFTCwgYml0KTsKLQotCWlmICgoKGRldmljZS0+cXVpcmtzICYgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzUpICYmICh1c2FnZS0+aGlkID09IDB4MDAwOTAwMDUpKQotCQl8fCAoKGRldmljZS0+cXVpcmtzICYgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcpICYmICh1c2FnZS0+aGlkID09IDB4MDAwOTAwMDcpKSkKKwlpZiAoZGV2aWNlLT5kcml2ZXItPmlucHV0X21hcHBlZCAmJiBkZXZpY2UtPmRyaXZlci0+aW5wdXRfbWFwcGVkKGRldmljZSwKKwkJCQloaWRpbnB1dCwgZmllbGQsIHVzYWdlLCAmYml0LCAmbWF4KSA8IDApCiAJCWdvdG8gaWdub3JlOwogCi0JaWYgKChkZXZpY2UtPnF1aXJrcyAmIEhJRF9RVUlSS19CQURfUkVMQVRJVkVfS0VZUykgJiYKLQkJdXNhZ2UtPnR5cGUgPT0gRVZfS0VZICYmIChmaWVsZC0+ZmxhZ3MgJiBISURfTUFJTl9JVEVNX1JFTEFUSVZFKSkKLQkJZmllbGQtPmZsYWdzICY9IH5ISURfTUFJTl9JVEVNX1JFTEFUSVZFOwotCiAJc2V0X2JpdCh1c2FnZS0+dHlwZSwgaW5wdXQtPmV2Yml0KTsKIAotCWlmIChkZXZpY2UtPnF1aXJrcyAmIEhJRF9RVUlSS19EVVBMSUNBVEVfVVNBR0VTICYmCi0JCQkodXNhZ2UtPnR5cGUgPT0gRVZfS0VZIHx8Ci0JCQkgdXNhZ2UtPnR5cGUgPT0gRVZfUkVMIHx8Ci0JCQkgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKSkKLQkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCBiaXQpOwotCiAJd2hpbGUgKHVzYWdlLT5jb2RlIDw9IG1heCAmJiB0ZXN0X2FuZF9zZXRfYml0KHVzYWdlLT5jb2RlLCBiaXQpKQogCQl1c2FnZS0+Y29kZSA9IGZpbmRfbmV4dF96ZXJvX2JpdChiaXQsIG1heCArIDEsIHVzYWdlLT5jb2RlKTsKIApAQCAtODU4LDEwICs1ODUsNiBAQAogCWlmICghdXNhZ2UtPnR5cGUpCiAJCXJldHVybjsKIAotCS8qIGhhbmRsZSBpbnB1dCBldmVudHMgZm9yIHF1aXJreSBkZXZpY2VzICovCi0JaWYgKGhpZGlucHV0X2V2ZW50X3F1aXJrcyhoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpKQotCQlyZXR1cm47Ci0KIAlpZiAodXNhZ2UtPmhhdF9taW4gPCB1c2FnZS0+aGF0X21heCB8fCB1c2FnZS0+aGF0X2RpcikgewogCQlpbnQgaGF0X2RpciA9IHVzYWdlLT5oYXRfZGlyOwogCQlpZiAoIWhhdF9kaXIpCkBAIC05NjEsMTQgKzY4NCwxNCBAQAogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JcmV0dXJuIGhpZC0+aGlkX29wZW4oaGlkKTsKKwlyZXR1cm4gaGlkLT5sbF9kcml2ZXItPm9wZW4oaGlkKTsKIH0KIAogc3RhdGljIHZvaWQgaGlkaW5wdXRfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaGlkLT5oaWRfY2xvc2UoaGlkKTsKKwloaWQtPmxsX2RyaXZlci0+Y2xvc2UoaGlkKTsKIH0KIAogLyoKQEAgLTk3Nyw3ICs3MDAsNyBAQAogICogUmVhZCBhbGwgcmVwb3J0cyBhbmQgaW5pdGlhbGl6ZSB0aGUgYWJzb2x1dGUgZmllbGQgdmFsdWVzLgogICovCiAKLWludCBoaWRpbnB1dF9jb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCitpbnQgaGlkaW5wdXRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgZm9yY2UpCiB7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKIAlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IE5VTEw7CkBAIC05ODUsMTkgKzcwOCwyMCBAQAogCWludCBpLCBqLCBrOwogCWludCBtYXhfcmVwb3J0X3R5cGUgPSBISURfT1VUUFVUX1JFUE9SVDsKIAotCWlmIChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19JR05PUkVfSElESU5QVVQpCi0JCXJldHVybiAtMTsKLQogCUlOSVRfTElTVF9IRUFEKCZoaWQtPmlucHV0cyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaGlkLT5tYXhjb2xsZWN0aW9uOyBpKyspCi0JCWlmIChoaWQtPmNvbGxlY3Rpb25baV0udHlwZSA9PSBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTiB8fAotCQkgICAgaGlkLT5jb2xsZWN0aW9uW2ldLnR5cGUgPT0gSElEX0NPTExFQ1RJT05fUEhZU0lDQUwpCi0JCQlpZiAoSVNfSU5QVVRfQVBQTElDQVRJT04oaGlkLT5jb2xsZWN0aW9uW2ldLnVzYWdlKSkKLQkJCQlicmVhazsKKwlpZiAoIWZvcmNlKSB7CisJCWZvciAoaSA9IDA7IGkgPCBoaWQtPm1heGNvbGxlY3Rpb247IGkrKykgeworCQkJc3RydWN0IGhpZF9jb2xsZWN0aW9uICpjb2wgPSAmaGlkLT5jb2xsZWN0aW9uW2ldOworCQkJaWYgKGNvbC0+dHlwZSA9PSBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTiB8fAorCQkJCQljb2wtPnR5cGUgPT0gSElEX0NPTExFQ1RJT05fUEhZU0lDQUwpCisJCQkJaWYgKElTX0lOUFVUX0FQUExJQ0FUSU9OKGNvbC0+dXNhZ2UpKQorCQkJCQlicmVhazsKKwkJfQogCi0JaWYgKGkgPT0gaGlkLT5tYXhjb2xsZWN0aW9uICYmIChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19ISURJTlBVVCkgPT0gMCkKLQkJcmV0dXJuIC0xOworCQlpZiAoaSA9PSBoaWQtPm1heGNvbGxlY3Rpb24pCisJCQlyZXR1cm4gLTE7CisJfQogCiAJaWYgKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX1NLSVBfT1VUUFVUX1JFUE9SVFMpCiAJCW1heF9yZXBvcnRfdHlwZSA9IEhJRF9JTlBVVF9SRVBPUlQ7CkBAIC0xMDE5LDcgKzc0Myw4IEBACiAJCQkJfQogCiAJCQkJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBoaWQpOwotCQkJCWlucHV0X2Rldi0+ZXZlbnQgPSBoaWQtPmhpZGlucHV0X2lucHV0X2V2ZW50OworCQkJCWlucHV0X2Rldi0+ZXZlbnQgPQorCQkJCQloaWQtPmxsX2RyaXZlci0+aGlkaW5wdXRfaW5wdXRfZXZlbnQ7CiAJCQkJaW5wdXRfZGV2LT5vcGVuID0gaGlkaW5wdXRfb3BlbjsKIAkJCQlpbnB1dF9kZXYtPmNsb3NlID0gaGlkaW5wdXRfY2xvc2U7CiAJCQkJaW5wdXRfZGV2LT5zZXRrZXljb2RlID0gaGlkaW5wdXRfc2V0a2V5Y29kZTsKQEAgLTEwMzIsNyArNzU3LDcgQEAKIAkJCQlpbnB1dF9kZXYtPmlkLnZlbmRvciAgPSBoaWQtPnZlbmRvcjsKIAkJCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBoaWQtPnByb2R1Y3Q7CiAJCQkJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gaGlkLT52ZXJzaW9uOwotCQkJCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9IGhpZC0+ZGV2OworCQkJCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9IGhpZC0+ZGV2LnBhcmVudDsKIAkJCQloaWRpbnB1dC0+aW5wdXQgPSBpbnB1dF9kZXY7CiAJCQkJbGlzdF9hZGRfdGFpbCgmaGlkaW5wdXQtPmxpc3QsICZoaWQtPmlucHV0cyk7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGcuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNmQ4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwpAQCAtMCwwICsxLDM0MiBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBzb21lIGxvZ2l0ZWNoICJzcGVjaWFsIiBkZXZpY2VzCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgUGF1bCBXYWxtc2xleQorICogIENvcHlyaWdodCAoYykgMjAwOCBKaXJpIFNsYWJ5CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorI2luY2x1ZGUgImhpZC1sZy5oIgorCisjZGVmaW5lIExHX1JERVNDCQkweDAwMQorI2RlZmluZSBMR19CQURfUkVMQVRJVkVfS0VZUwkweDAwMgorI2RlZmluZSBMR19EVVBMSUNBVEVfVVNBR0VTCTB4MDA0CisjZGVmaW5lIExHX1JFU0VUX0xFRFMJCTB4MDA4CisjZGVmaW5lIExHX0VYUEFOREVEX0tFWU1BUAkweDAxMAorI2RlZmluZSBMR19JR05PUkVfRE9VQkxFRF9XSEVFTAkweDAyMAorI2RlZmluZSBMR19XSVJFTEVTUwkJMHgwNDAKKyNkZWZpbmUgTEdfSU5WRVJUX0hXSEVFTAkweDA4MAorI2RlZmluZSBMR19OT0dFVAkJMHgxMDAKKyNkZWZpbmUgTEdfRkYJCQkweDIwMAorI2RlZmluZSBMR19GRjIJCQkweDQwMAorCisvKgorICogQ2VydGFpbiBMb2dpdGVjaCBrZXlib2FyZHMgc2VuZCBpbiByZXBvcnQgIzMga2V5cyB3aGljaCBhcmUgZmFyCisgKiBhYm92ZSB0aGUgbG9naWNhbCBtYXhpbXVtIGRlc2NyaWJlZCBpbiBkZXNjcmlwdG9yLiBUaGlzIGV4dGVuZHMKKyAqIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiAweDI4YyBvZiBsb2dpY2FsIG1heGltdW0gdG8gMHgxMDRkCisgKi8KK3N0YXRpYyB2b2lkIGxnX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmICgocXVpcmtzICYgTEdfUkRFU0MpICYmIHJzaXplID49IDkwICYmIHJkZXNjWzgzXSA9PSAweDI2ICYmCisJCQlyZGVzY1s4NF0gPT0gMHg4YyAmJiByZGVzY1s4NV0gPT0gMHgwMikgeworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiZml4aW5nIHVwIExvZ2l0ZWNoIGtleWJvYXJkIHJlcG9ydCAiCisJCQkJImRlc2NyaXB0b3JcbiIpOworCQlyZGVzY1s4NF0gPSByZGVzY1s4OV0gPSAweDRkOworCQlyZGVzY1s4NV0gPSByZGVzY1s5MF0gPSAweDEwOworCX0KK30KKworI2RlZmluZSBsZ19tYXBfa2V5X2NsZWFyKGMpCWhpZF9tYXBfdXNhZ2VfY2xlYXIoaGksIHVzYWdlLCBiaXQsIG1heCwgXAorCQlFVl9LRVksIChjKSkKKworc3RhdGljIGludCBsZ191bHRyYXhfcmVtb3RlX21hcHBpbmcoc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0xPR0lWRU5ET1IpCisJCXJldHVybiAwOworCisJc2V0X2JpdChFVl9SRVAsIGhpLT5pbnB1dC0+ZXZiaXQpOworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCS8qIFJlcG9ydGVkIG9uIExvZ2l0ZWNoIFVsdHJhIFggTWVkaWEgUmVtb3RlICovCisJY2FzZSAweDAwNDogbGdfbWFwX2tleV9jbGVhcihLRVlfQUdBSU4pOwlicmVhazsKKwljYXNlIDB4MDBkOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9IT01FKTsJCWJyZWFrOworCWNhc2UgMHgwMjQ6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1NIVUZGTEUpOwlicmVhazsKKwljYXNlIDB4MDI1OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9UVik7CQlicmVhazsKKwljYXNlIDB4MDI2OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9NRU5VKTsJCWJyZWFrOworCWNhc2UgMHgwMzE6IGxnX21hcF9rZXlfY2xlYXIoS0VZX0FVRElPKTsJYnJlYWs7CisJY2FzZSAweDAzMjogbGdfbWFwX2tleV9jbGVhcihLRVlfVEVYVCk7CQlicmVhazsKKwljYXNlIDB4MDMzOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9MQVNUKTsJCWJyZWFrOworCWNhc2UgMHgwNDc6IGxnX21hcF9rZXlfY2xlYXIoS0VZX01QMyk7CQlicmVhazsKKwljYXNlIDB4MDQ4OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9EVkQpOwkJYnJlYWs7CisJY2FzZSAweDA0OTogbGdfbWFwX2tleV9jbGVhcihLRVlfTUVESUEpOwlicmVhazsKKwljYXNlIDB4MDRhOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9WSURFTyk7CWJyZWFrOworCWNhc2UgMHgwNGI6IGxnX21hcF9rZXlfY2xlYXIoS0VZX0FOR0xFKTsJYnJlYWs7CisJY2FzZSAweDA0YzogbGdfbWFwX2tleV9jbGVhcihLRVlfTEFOR1VBR0UpOwlicmVhazsKKwljYXNlIDB4MDRkOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9TVUJUSVRMRSk7CWJyZWFrOworCWNhc2UgMHgwNTE6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1JFRCk7CQlicmVhazsKKwljYXNlIDB4MDUyOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9DTE9TRSk7CWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGxnX3dpcmVsZXNzX21hcHBpbmcoc3RydWN0IGhpZF9pbnB1dCAqaGksIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCWNhc2UgMHgxMDAxOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9NRVNTRU5HRVIpOwkJYnJlYWs7CisJY2FzZSAweDEwMDM6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1NPVU5EKTsJCWJyZWFrOworCWNhc2UgMHgxMDA0OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9WSURFTyk7CQlicmVhazsKKwljYXNlIDB4MTAwNTogbGdfbWFwX2tleV9jbGVhcihLRVlfQVVESU8pOwkJYnJlYWs7CisJY2FzZSAweDEwMGE6IGxnX21hcF9rZXlfY2xlYXIoS0VZX0RPQ1VNRU5UUyk7CQlicmVhazsKKwljYXNlIDB4MTAxMTogbGdfbWFwX2tleV9jbGVhcihLRVlfUFJFVklPVVNTT05HKTsJYnJlYWs7CisJY2FzZSAweDEwMTI6IGxnX21hcF9rZXlfY2xlYXIoS0VZX05FWFRTT05HKTsJCWJyZWFrOworCWNhc2UgMHgxMDEzOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9DQU1FUkEpOwkJYnJlYWs7CisJY2FzZSAweDEwMTQ6IGxnX21hcF9rZXlfY2xlYXIoS0VZX01FU1NFTkdFUik7CQlicmVhazsKKwljYXNlIDB4MTAxNTogbGdfbWFwX2tleV9jbGVhcihLRVlfUkVDT1JEKTsJCWJyZWFrOworCWNhc2UgMHgxMDE2OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9QTEFZRVIpOwkJYnJlYWs7CisJY2FzZSAweDEwMTc6IGxnX21hcF9rZXlfY2xlYXIoS0VZX0VKRUNUQ0QpOwkJYnJlYWs7CisJY2FzZSAweDEwMTg6IGxnX21hcF9rZXlfY2xlYXIoS0VZX01FRElBKTsJCWJyZWFrOworCWNhc2UgMHgxMDE5OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9QUk9HMSk7CQlicmVhazsKKwljYXNlIDB4MTAxYTogbGdfbWFwX2tleV9jbGVhcihLRVlfUFJPRzIpOwkJYnJlYWs7CisJY2FzZSAweDEwMWI6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1BST0czKTsJCWJyZWFrOworCWNhc2UgMHgxMDFmOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9aT09NSU4pOwkJYnJlYWs7CisJY2FzZSAweDEwMjA6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1pPT01PVVQpOwkJYnJlYWs7CisJY2FzZSAweDEwMjE6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1pPT01SRVNFVCk7CQlicmVhazsKKwljYXNlIDB4MTAyMzogbGdfbWFwX2tleV9jbGVhcihLRVlfQ0xPU0UpOwkJYnJlYWs7CisJY2FzZSAweDEwMjc6IGxnX21hcF9rZXlfY2xlYXIoS0VZX01FTlUpOwkJYnJlYWs7CisJLyogdGhpcyBvbmUgaXMgbWFya2VkIGFzICdSb3RhdGUnICovCisJY2FzZSAweDEwMjg6IGxnX21hcF9rZXlfY2xlYXIoS0VZX0FOR0xFKTsJCWJyZWFrOworCWNhc2UgMHgxMDI5OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9TSFVGRkxFKTsJCWJyZWFrOworCWNhc2UgMHgxMDJhOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9CQUNLKTsJCWJyZWFrOworCWNhc2UgMHgxMDJiOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9DWUNMRVdJTkRPV1MpOwlicmVhazsKKwljYXNlIDB4MTA0MTogbGdfbWFwX2tleV9jbGVhcihLRVlfQkFUVEVSWSk7CQlicmVhazsKKwljYXNlIDB4MTA0MjogbGdfbWFwX2tleV9jbGVhcihLRVlfV09SRFBST0NFU1NPUik7CWJyZWFrOworCWNhc2UgMHgxMDQzOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9TUFJFQURTSEVFVCk7CQlicmVhazsKKwljYXNlIDB4MTA0NDogbGdfbWFwX2tleV9jbGVhcihLRVlfUFJFU0VOVEFUSU9OKTsJYnJlYWs7CisJY2FzZSAweDEwNDU6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1VORE8pOwkJYnJlYWs7CisJY2FzZSAweDEwNDY6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1JFRE8pOwkJYnJlYWs7CisJY2FzZSAweDEwNDc6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1BSSU5UKTsJCWJyZWFrOworCWNhc2UgMHgxMDQ4OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9TQVZFKTsJCWJyZWFrOworCWNhc2UgMHgxMDQ5OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9QUk9HMSk7CQlicmVhazsKKwljYXNlIDB4MTA0YTogbGdfbWFwX2tleV9jbGVhcihLRVlfUFJPRzIpOwkJYnJlYWs7CisJY2FzZSAweDEwNGI6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1BST0czKTsJCWJyZWFrOworCWNhc2UgMHgxMDRjOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9QUk9HNCk7CQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBsZ19pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwkvKiBleHRlbmRlZCBtYXBwaW5nIGZvciBjZXJ0YWluIExvZ2l0ZWNoIGhhcmR3YXJlIChMb2dpdGVjaCBjb3JkbGVzcworCSAgIGRlc2t0b3AgTFg1MDApICovCisJc3RhdGljIGNvbnN0IHU4IGVfa2V5bWFwW10gPSB7CisJCSAgMCwyMTYsICAwLDIxMywxNzUsMTU2LCAgMCwgIDAsICAwLCAgMCwKKwkJMTQ0LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsMjEyLAorCQkxNzQsMTY3LDE1MiwxNjEsMTEyLCAgMCwgIDAsICAwLDE1NCwgIDAsCisJCSAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKwkJICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAorCQkgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisJCSAgMCwgIDAsICAwLCAgMCwgIDAsMTgzLDE4NCwxODUsMTg2LDE4NywKKwkJMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LCAgMCwgIDAsICAwCisJfTsKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKwl1bnNpZ25lZCBpbnQgaGlkID0gdXNhZ2UtPmhpZDsKKworCWlmIChoZGV2LT5wcm9kdWN0ID09IFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUkVDRUlWRVIgJiYKKwkJCWxnX3VsdHJheF9yZW1vdGVfbWFwcGluZyhoaSwgdXNhZ2UsIGJpdCwgbWF4KSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKHF1aXJrcyAmIExHX1dJUkVMRVNTKSAmJiBsZ193aXJlbGVzc19tYXBwaW5nKGhpLCB1c2FnZSwgYml0LCBtYXgpKQorCQlyZXR1cm4gMTsKKworCWlmICgoaGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9CVVRUT04pCisJCXJldHVybiAwOworCisJaGlkICY9IEhJRF9VU0FHRTsKKworCS8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIExvZ2l0ZWNoIENvcmRsZXNzIERlc2t0b3AgKi8KKwlpZiAoZmllbGQtPmFwcGxpY2F0aW9uID09IEhJRF9HRF9NT1VTRSkgeworCQlpZiAoKHF1aXJrcyAmIExHX0lHTk9SRV9ET1VCTEVEX1dIRUVMKSAmJgorCQkJCShoaWQgPT0gNyB8fCBoaWQgPT0gOCkpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJaWYgKChxdWlya3MgJiBMR19FWFBBTkRFRF9LRVlNQVApICYmCisJCQkJaGlkIDwgQVJSQVlfU0laRShlX2tleW1hcCkgJiYKKwkJCQllX2tleW1hcFtoaWRdICE9IDApIHsKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLAorCQkJCQllX2tleW1hcFtoaWRdKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdfaW5wdXRfbWFwcGVkKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmICgocXVpcmtzICYgTEdfQkFEX1JFTEFUSVZFX0tFWVMpICYmIHVzYWdlLT50eXBlID09IEVWX0tFWSAmJgorCQkJKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fUkVMQVRJVkUpKQorCQlmaWVsZC0+ZmxhZ3MgJj0gfkhJRF9NQUlOX0lURU1fUkVMQVRJVkU7CisKKwlpZiAoKHF1aXJrcyAmIExHX0RVUExJQ0FURV9VU0FHRVMpICYmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwKKwkJCSB1c2FnZS0+dHlwZSA9PSBFVl9SRUwgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKSkKKwkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCAqYml0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgcXVpcmtzID0gKHVuc2lnbmVkIGxvbmcpaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCisJaWYgKChxdWlya3MgJiBMR19JTlZFUlRfSFdIRUVMKSAmJiB1c2FnZS0+Y29kZSA9PSBSRUxfSFdIRUVMKSB7CisJCWlucHV0X2V2ZW50KGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQsIHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSwKKwkJCQktdmFsdWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ19wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCXVuc2lnbmVkIGxvbmcgcXVpcmtzID0gaWQtPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGludCBjb25uZWN0X21hc2sgPSBISURfQ09OTkVDVF9ERUZBVUxUOworCWludCByZXQ7CisKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgKHZvaWQgKilxdWlya3MpOworCisJaWYgKHF1aXJrcyAmIExHX05PR0VUKQorCQloZGV2LT5xdWlya3MgfD0gSElEX1FVSVJLX05PR0VUOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlpZiAocXVpcmtzICYgKExHX0ZGIHwgTEdfRkYyKSkKKwkJY29ubmVjdF9tYXNrICY9IH5ISURfQ09OTkVDVF9GRjsKKworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBjb25uZWN0X21hc2spOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlpZiAocXVpcmtzICYgTEdfUkVTRVRfTEVEUykKKwkJdXNiaGlkX3NldF9sZWRzKGhkZXYpOworCisJaWYgKHF1aXJrcyAmIExHX0ZGKQorCQlsZ2ZmX2luaXQoaGRldik7CisJaWYgKHF1aXJrcyAmIExHX0ZGMikKKwkJbGcyZmZfaW5pdChoZGV2KTsKKworCXJldHVybiAwOworZXJyX2ZyZWU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGxnX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTVgzMDAwX1JFQ0VJVkVSKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfUkRFU0MgfCBMR19XSVJFTEVTUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfUkRFU0MgfCBMR19XSVJFTEVTUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSXzIpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19SREVTQyB8IExHX1dJUkVMRVNTIH0sCisKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUkVDRUlWRVIpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19CQURfUkVMQVRJVkVfS0VZUyB9LAorCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0RJTk9WT19ERVNLVE9QKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfRFVQTElDQVRFX1VTQUdFUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9ESU5PVk9fRURHRSksCisJCS5kcml2ZXJfZGF0YSA9IExHX0RVUExJQ0FURV9VU0FHRVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfRElOT1ZPX01JTkkpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19EVVBMSUNBVEVfVVNBR0VTIH0sCisKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfS0JEKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfUkVTRVRfTEVEUyB9LAorCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0VMSVRFX0tCRCksCisJCS5kcml2ZXJfZGF0YSA9IExHX0lHTk9SRV9ET1VCTEVEX1dIRUVMIHwgTEdfRVhQQU5ERURfS0VZTUFQIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0NPUkRMRVNTX0RFU0tUT1BfTFg1MDApLAorCQkuZHJpdmVyX2RhdGEgPSBMR19JR05PUkVfRE9VQkxFRF9XSEVFTCB8IExHX0VYUEFOREVEX0tFWU1BUCB9LAorCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0xYMyksCisJCS5kcml2ZXJfZGF0YSA9IExHX0lOVkVSVF9IV0hFRUwgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfVjE1MCksCisJCS5kcml2ZXJfZGF0YSA9IExHX0lOVkVSVF9IV0hFRUwgfSwKKworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9FWFRSRU1FXzNEKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfTk9HRVQgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0hFRUwpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19OT0dFVCB8IExHX0ZGIH0sCisKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfRkYgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEMl8yKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfRkYgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0lOR01BTl9GM0QpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GT1JDRTNEX1BSTyksCisJCS5kcml2ZXJfZGF0YSA9IExHX0ZGIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX01PTU9fV0hFRUwpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMMiksCisJCS5kcml2ZXJfZGF0YSA9IExHX0ZGIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JVTUJMRVBBRDIpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19GRjIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgbGdfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBsZ19kcml2ZXIgPSB7CisJLm5hbWUgPSAibG9naXRlY2giLAorCS5pZF90YWJsZSA9IGxnX2RldmljZXMsCisJLnJlcG9ydF9maXh1cCA9IGxnX3JlcG9ydF9maXh1cCwKKwkuaW5wdXRfbWFwcGluZyA9IGxnX2lucHV0X21hcHBpbmcsCisJLmlucHV0X21hcHBlZCA9IGxnX2lucHV0X21hcHBlZCwKKwkuZXZlbnQgPSBsZ19ldmVudCwKKwkucHJvYmUgPSBsZ19wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgbGdfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZsZ19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBsZ19leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZsZ19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChsZ19pbml0KTsKK21vZHVsZV9leGl0KGxnX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKGxvZ2l0ZWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZy5oIGIvZHJpdmVycy9oaWQvaGlkLWxnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhZTc1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZy5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX19ISURfTEdfSAorI2RlZmluZSBfX0hJRF9MR19ICisKKyNpbmNsdWRlIDxsaW51eC9hdXRvY29uZi5oPgorCisjaWZkZWYgQ09ORklHX0xPR0lURUNIX0ZGCitpbnQgbGdmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBsZ2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpIHsgcmV0dXJuIC0xOyB9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRgoraW50IGxnMmZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGxnMmZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpIHsgcmV0dXJuIC0xOyB9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGcyZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZzJmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNmRjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtbGcyZmYuYwpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqICBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBMb2dpdGVjaCBSdW1ibGVwYWQgMgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKworI2luY2x1ZGUgInVzYmhpZC91c2JoaWQuaCIKKyNpbmNsdWRlICJoaWQtbGcuaCIKKworc3RydWN0IGxnMmZmX2RldmljZSB7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKK307CisKK3N0YXRpYyBpbnQgcGxheV9lZmZlY3Qoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbGcyZmZfZGV2aWNlICpsZzJmZiA9IGRhdGE7CisJaW50IHdlYWssIHN0cm9uZzsKKworCXN0cm9uZyA9IGVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZTsKKwl3ZWFrID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKKworCWlmICh3ZWFrIHx8IHN0cm9uZykgeworCQl3ZWFrID0gd2VhayAqIDB4ZmYgLyAweGZmZmY7CisJCXN0cm9uZyA9IHN0cm9uZyAqIDB4ZmYgLyAweGZmZmY7CisKKwkJbGcyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHg1MTsKKwkJbGcyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gd2VhazsKKwkJbGcyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzRdID0gc3Ryb25nOworCX0gZWxzZSB7CisJCWxnMmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4ZjM7CisJCWxnMmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IDB4MDA7CisJCWxnMmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs0XSA9IDB4MDA7CisJfQorCisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBsZzJmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBsZzJmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGxnMmZmX2RldmljZSAqbGcyZmY7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGlkLT5pbnB1dHMubmV4dCwKKwkJCQkJCXN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0KKwkJCSZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBoaWRpbnB1dC0+aW5wdXQ7CisJaW50IGVycm9yOworCisJaWYgKGxpc3RfZW1wdHkocmVwb3J0X2xpc3QpKSB7CisJCWRldl9lcnIoJmhpZC0+ZGV2LCAibm8gb3V0cHV0IHJlcG9ydCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKworCWlmIChyZXBvcnQtPm1heGZpZWxkIDwgMSkgeworCQlkZXZfZXJyKCZoaWQtPmRldiwgIm91dHB1dCByZXBvcnQgaXMgZW1wdHlcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKHJlcG9ydC0+ZmllbGRbMF0tPnJlcG9ydF9jb3VudCA8IDcpIHsKKwkJZGV2X2VycigmaGlkLT5kZXYsICJub3QgZW5vdWdoIHZhbHVlcyBpbiB0aGUgZmllbGRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlsZzJmZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsZzJmZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxnMmZmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNldF9iaXQoRkZfUlVNQkxFLCBkZXYtPmZmYml0KTsKKworCWVycm9yID0gaW5wdXRfZmZfY3JlYXRlX21lbWxlc3MoZGV2LCBsZzJmZiwgcGxheV9lZmZlY3QpOworCWlmIChlcnJvcikgeworCQlrZnJlZShsZzJmZik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlsZzJmZi0+cmVwb3J0ID0gcmVwb3J0OworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHhmMzsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4MDA7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDAwOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzNdID0gMHgwMDsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs0XSA9IDB4MDA7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNV0gPSAweDAwOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzZdID0gMHgwMDsKKworCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX09VVCk7CisKKwlkZXZfaW5mbygmaGlkLT5kZXYsICJGb3JjZSBmZWVkYmFjayBmb3IgTG9naXRlY2ggUnVtYmxlcGFkIDIgYnkgIgorCSAgICAgICAiQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+XG4iKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFhZmYwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBoaWQtY29tcGxpYW50IGZvciBzb21lIG9mIHRoZSBkZXZpY2VzIGZyb20KKyAqIExvZ2l0ZWNoLCBuYW1lbHk6CisgKiAtIFdpbmdNYW4gQ29yZGxlc3MgUnVtYmxlUGFkCisgKiAtIFdpbmdNYW4gRm9yY2UgM0QKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgSm9oYW5uIERlbmV1eAorICogIENvcHlyaWdodCAoYykgMjAwNiBBbnNzaSBIYW5udWxhIDxhbnNzaS5oYW5udWxhQGdtYWlsLmNvbT4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPGpvaGFubi5kZW5ldXhAaXQudXUuc2U+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisKKyNpbmNsdWRlICJ1c2JoaWQvdXNiaGlkLmgiCisjaW5jbHVkZSAiaGlkLWxnLmgiCisKK3N0cnVjdCBkZXZfdHlwZSB7CisJdTE2IGlkVmVuZG9yOworCXUxNiBpZFByb2R1Y3Q7CisJY29uc3Qgc2lnbmVkIHNob3J0ICpmZjsKK307CisKK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgZmZfcnVtYmxlW10gPSB7CisJRkZfUlVNQkxFLAorCS0xCit9OworCitzdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IGZmX2pveXN0aWNrW10gPSB7CisJRkZfQ09OU1RBTlQsCisJLTEKK307CisKK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgZmZfd2hlZWxbXSA9IHsKKwlGRl9DT05TVEFOVCwKKwlGRl9BVVRPQ0VOVEVSLAorCS0xCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl90eXBlIGRldmljZXNbXSA9IHsKKwl7IDB4MDQ2ZCwgMHhjMjExLCBmZl9ydW1ibGUgfSwKKwl7IDB4MDQ2ZCwgMHhjMjE5LCBmZl9ydW1ibGUgfSwKKwl7IDB4MDQ2ZCwgMHhjMjgzLCBmZl9qb3lzdGljayB9LAorCXsgMHgwNDZkLCAweGMyODYsIGZmX2pveXN0aWNrIH0sCisJeyAweDA0NmQsIDB4YzI5NCwgZmZfam95c3RpY2sgfSwKKwl7IDB4MDQ2ZCwgMHhjMjk1LCBmZl9qb3lzdGljayB9LAorCXsgMHgwNDZkLCAweGNhMDMsIGZmX3doZWVsIH0sCit9OworCitzdGF0aWMgaW50IGhpZF9sZ2ZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPSAmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKwlpbnQgeCwgeTsKKwl1bnNpZ25lZCBpbnQgbGVmdCwgcmlnaHQ7CisKKyNkZWZpbmUgQ0xBTVAoeCkgaWYgKHggPCAwKSB4ID0gMDsgaWYgKHggPiAweGZmKSB4ID0gMHhmZgorCisJc3dpdGNoIChlZmZlY3QtPnR5cGUpIHsKKwljYXNlIEZGX0NPTlNUQU5UOgorCQl4ID0gZWZmZWN0LT51LnJhbXAuc3RhcnRfbGV2ZWwgKyAweDdmOwkvKiAweDdmIGlzIGNlbnRlciAqLworCQl5ID0gZWZmZWN0LT51LnJhbXAuZW5kX2xldmVsICsgMHg3ZjsKKwkJQ0xBTVAoeCk7CisJCUNMQU1QKHkpOworCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4NTE7CisJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwODsKKwkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSB4OworCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IHk7CisJCWRiZ19oaWQoIih4LCB5KT0oJTA0eCwgJTA0eClcbiIsIHgsIHkpOworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOworCQlicmVhazsKKworCWNhc2UgRkZfUlVNQkxFOgorCQlyaWdodCA9IGVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZTsKKwkJbGVmdCA9IGVmZmVjdC0+dS5ydW1ibGUud2Vha19tYWduaXR1ZGU7CisJCXJpZ2h0ID0gcmlnaHQgKiAweGZmIC8gMHhmZmZmOworCQlsZWZ0ID0gbGVmdCAqIDB4ZmYgLyAweGZmZmY7CisJCUNMQU1QKGxlZnQpOworCQlDTEFNUChyaWdodCk7CisJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHg0MjsKKwkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDAwOworCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IGxlZnQ7CisJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzNdID0gcmlnaHQ7CisJCWRiZ19oaWQoIihsZWZ0LCByaWdodCk9KCUwNHgsICUwNHgpXG4iLCBsZWZ0LCByaWdodCk7CisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX09VVCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGlkX2xnZmZfc2V0X2F1dG9jZW50ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1MTYgbWFnbml0dWRlKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CisJX19zMzIgKnZhbHVlID0gcmVwb3J0LT5maWVsZFswXS0+dmFsdWU7CisJbWFnbml0dWRlID0gKG1hZ25pdHVkZSA+PiAxMikgJiAweGY7CisJKnZhbHVlKysgPSAweGZlOworCSp2YWx1ZSsrID0gMHgwZDsKKwkqdmFsdWUrKyA9IG1hZ25pdHVkZTsgICAvKiBjbG9ja3dpc2Ugc3RyZW5ndGggKi8KKwkqdmFsdWUrKyA9IG1hZ25pdHVkZTsgICAvKiBjb3VudGVyLWNsb2Nrd2lzZSBzdHJlbmd0aCAqLworCSp2YWx1ZSsrID0gMHg4MDsKKwkqdmFsdWUrKyA9IDB4MDA7CisJKnZhbHVlID0gMHgwMDsKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOworfQorCitpbnQgbGdmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpCit7CisJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhpZC0+aW5wdXRzLm5leHQsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhpZGlucHV0LT5pbnB1dDsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOworCWNvbnN0IHNpZ25lZCBzaG9ydCAqZmZfYml0cyA9IGZmX2pveXN0aWNrOworCWludCBlcnJvcjsKKwlpbnQgaTsKKworCS8qIEZpbmQgdGhlIHJlcG9ydCB0byB1c2UgKi8KKwlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKKwkJZXJyX2hpZCgiTm8gb3V0cHV0IHJlcG9ydCBmb3VuZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogQ2hlY2sgdGhhdCB0aGUgcmVwb3J0IGxvb2tzIG9rICovCisJcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfbGlzdC0+bmV4dCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOworCWlmICghcmVwb3J0KSB7CisJCWVycl9oaWQoIk5VTEwgb3V0cHV0IHJlcG9ydCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZmllbGQgPSByZXBvcnQtPmZpZWxkWzBdOworCWlmICghZmllbGQpIHsKKwkJZXJyX2hpZCgiTlVMTCBmaWVsZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2aWNlcyk7IGkrKykgeworCQlpZiAoZGV2LT5pZC52ZW5kb3IgPT0gZGV2aWNlc1tpXS5pZFZlbmRvciAmJgorCQkgICAgZGV2LT5pZC5wcm9kdWN0ID09IGRldmljZXNbaV0uaWRQcm9kdWN0KSB7CisJCQlmZl9iaXRzID0gZGV2aWNlc1tpXS5mZjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJZm9yIChpID0gMDsgZmZfYml0c1tpXSA+PSAwOyBpKyspCisJCXNldF9iaXQoZmZfYml0c1tpXSwgZGV2LT5mZmJpdCk7CisKKwllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGRldiwgTlVMTCwgaGlkX2xnZmZfcGxheSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAoIHRlc3RfYml0KEZGX0FVVE9DRU5URVIsIGRldi0+ZmZiaXQpICkKKwkJZGV2LT5mZi0+c2V0X2F1dG9jZW50ZXIgPSBoaWRfbGdmZl9zZXRfYXV0b2NlbnRlcjsKKworCXByaW50ayhLRVJOX0lORk8gIkZvcmNlIGZlZWRiYWNrIGZvciBMb2dpdGVjaCBmb3JjZSBmZWVkYmFjayBkZXZpY2VzIGJ5IEpvaGFubiBEZW5ldXggPGpvaGFubi5kZW5ldXhAaXQudXUuc2U+XG4iKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW1pY3Jvc29mdC5jIGIvZHJpdmVycy9oaWQvaGlkLW1pY3Jvc29mdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MThiMTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtbWljcm9zb2Z0LmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3Igc29tZSBtaWNyb3NvZnQgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworI2RlZmluZSBNU19ISURJTlBVVAkweDAxCisjZGVmaW5lIE1TX0VSR09OT01ZCTB4MDIKKyNkZWZpbmUgTVNfUFJFU0VOVEVSCTB4MDQKKyNkZWZpbmUgTVNfUkRFU0MJMHgwOAorI2RlZmluZSBNU19OT0dFVAkweDEwCisKKy8qCisgKiBNaWNyb3NvZnQgV2lyZWxlc3MgRGVza3RvcCBSZWNlaXZlciAoTW9kZWwgMTAyOCkgaGFzIHNldmVyYWwKKyAqICdVc2FnZSBNaW4vTWF4JyB3aGVyZSBpdCBvdWdodCB0byBoYXZlICdQaHlzaWNhbCBNaW4vTWF4JworICovCitzdGF0aWMgdm9pZCBtc19yZXBvcnRfZml4dXAoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIF9fdTggKnJkZXNjLAorCQl1bnNpZ25lZCBpbnQgcnNpemUpCit7CisJdW5zaWduZWQgbG9uZyBxdWlya3MgPSAodW5zaWduZWQgbG9uZyloaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAoKHF1aXJrcyAmIE1TX1JERVNDKSAmJiByc2l6ZSA9PSA1NzEgJiYgcmRlc2NbMjg0XSA9PSAweDE5ICYmCisJCQlyZGVzY1syODZdID09IDB4MmEgJiYgcmRlc2NbMzA0XSA9PSAweDE5ICYmCisJCQlyZGVzY1szMDZdID09IDB4MjkgJiYgcmRlc2NbMzUyXSA9PSAweDFhICYmCisJCQlyZGVzY1szNTVdID09IDB4MmEgJiYgcmRlc2NbNTU3XSA9PSAweDE5ICYmCisJCQlyZGVzY1s1NTldID09IDB4MjkpIHsKKwkJZGV2X2luZm8oJmhkZXYtPmRldiwgImZpeGluZyB1cCBNaWNyb3NvZnQgV2lyZWxlc3MgUmVjZWl2ZXIgIgorCQkJCSJNb2RlbCAxMDI4IHJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKKwkJcmRlc2NbMjg0XSA9IHJkZXNjWzMwNF0gPSByZGVzY1s1NTddID0gMHgzNTsKKwkJcmRlc2NbMzUyXSA9IDB4MzY7CisJCXJkZXNjWzI4Nl0gPSByZGVzY1szNTVdID0gMHg0NjsKKwkJcmRlc2NbMzA2XSA9IHJkZXNjWzU1OV0gPSAweDQ1OworCX0KK30KKworI2RlZmluZSBtc19tYXBfa2V5X2NsZWFyKGMpCWhpZF9tYXBfdXNhZ2VfY2xlYXIoaGksIHVzYWdlLCBiaXQsIG1heCwgXAorCQkJCQlFVl9LRVksIChjKSkKK3N0YXRpYyBpbnQgbXNfZXJnb25vbXlfa2JfcXVpcmsoc3RydWN0IGhpZF9pbnB1dCAqaGksIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGhpLT5pbnB1dDsKKworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCWNhc2UgMHhmZDA2OiBtc19tYXBfa2V5X2NsZWFyKEtFWV9DSEFUKTsJYnJlYWs7CisJY2FzZSAweGZkMDc6IG1zX21hcF9rZXlfY2xlYXIoS0VZX1BIT05FKTsJYnJlYWs7CisJY2FzZSAweGZmMDU6CisJCXNldF9iaXQoRVZfUkVQLCBpbnB1dC0+ZXZiaXQpOworCQltc19tYXBfa2V5X2NsZWFyKEtFWV9GMTMpOworCQlzZXRfYml0KEtFWV9GMTQsIGlucHV0LT5rZXliaXQpOworCQlzZXRfYml0KEtFWV9GMTUsIGlucHV0LT5rZXliaXQpOworCQlzZXRfYml0KEtFWV9GMTYsIGlucHV0LT5rZXliaXQpOworCQlzZXRfYml0KEtFWV9GMTcsIGlucHV0LT5rZXliaXQpOworCQlzZXRfYml0KEtFWV9GMTgsIGlucHV0LT5rZXliaXQpOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtc19wcmVzZW50ZXJfOGtfcXVpcmsoc3RydWN0IGhpZF9pbnB1dCAqaGksIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlzZXRfYml0KEVWX1JFUCwgaGktPmlucHV0LT5ldmJpdCk7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJY2FzZSAweGZkMDg6IG1zX21hcF9rZXlfY2xlYXIoS0VZX0ZPUldBUkQpOwlicmVhazsKKwljYXNlIDB4ZmQwOTogbXNfbWFwX2tleV9jbGVhcihLRVlfQkFDSyk7CWJyZWFrOworCWNhc2UgMHhmZDBiOiBtc19tYXBfa2V5X2NsZWFyKEtFWV9QTEFZUEFVU0UpOwlicmVhazsKKwljYXNlIDB4ZmQwZTogbXNfbWFwX2tleV9jbGVhcihLRVlfQ0xPU0UpOwlicmVhazsKKwljYXNlIDB4ZmQwZjogbXNfbWFwX2tleV9jbGVhcihLRVlfUExBWSk7CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtc19pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfTVNWRU5ET1IpCisJCXJldHVybiAwOworCisJaWYgKHF1aXJrcyAmIE1TX0VSR09OT01ZKSB7CisJCWludCByZXQgPSBtc19lcmdvbm9teV9rYl9xdWlyayhoaSwgdXNhZ2UsIGJpdCwgbWF4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKChxdWlya3MgJiBNU19QUkVTRU5URVIpICYmCisJCQltc19wcmVzZW50ZXJfOGtfcXVpcmsoaGksIHVzYWdlLCBiaXQsIG1heCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXNfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJdW5zaWduZWQgbG9uZyBxdWlya3MgPSAodW5zaWduZWQgbG9uZyloaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAoIShoZGV2LT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHx8ICFmaWVsZC0+aGlkaW5wdXQgfHwKKwkJCSF1c2FnZS0+dHlwZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBIYW5kbGluZyBNUyBrZXlib2FyZHMgc3BlY2lhbCBidXR0b25zICovCisJaWYgKHF1aXJrcyAmIE1TX0VSR09OT01ZICYmIHVzYWdlLT5oaWQgPT0gKEhJRF9VUF9NU1ZFTkRPUiB8IDB4ZmYwNSkpIHsKKwkJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBmaWVsZC0+aGlkaW5wdXQtPmlucHV0OworCQlzdGF0aWMgdW5zaWduZWQgaW50IGxhc3Rfa2V5ID0gMDsKKwkJdW5zaWduZWQgaW50IGtleSA9IDA7CisJCXN3aXRjaCAodmFsdWUpIHsKKwkJY2FzZSAweDAxOiBrZXkgPSBLRVlfRjE0OyBicmVhazsKKwkJY2FzZSAweDAyOiBrZXkgPSBLRVlfRjE1OyBicmVhazsKKwkJY2FzZSAweDA0OiBrZXkgPSBLRVlfRjE2OyBicmVhazsKKwkJY2FzZSAweDA4OiBrZXkgPSBLRVlfRjE3OyBicmVhazsKKwkJY2FzZSAweDEwOiBrZXkgPSBLRVlfRjE4OyBicmVhazsKKwkJfQorCQlpZiAoa2V5KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIGtleSwgMSk7CisJCQlsYXN0X2tleSA9IGtleTsKKwkJfSBlbHNlCisJCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIGxhc3Rfa2V5LCAwKTsKKworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtc19wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCXVuc2lnbmVkIGxvbmcgcXVpcmtzID0gaWQtPmRyaXZlcl9kYXRhOworCWludCByZXQ7CisKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgKHZvaWQgKilxdWlya3MpOworCisJaWYgKHF1aXJrcyAmIE1TX05PR0VUKQorCQloZGV2LT5xdWlya3MgfD0gSElEX1FVSVJLX05PR0VUOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCB8ICgocXVpcmtzICYgTVNfSElESU5QVVQpID8KKwkJCQlISURfQ09OTkVDVF9ISURJTlBVVF9GT1JDRSA6IDApKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0dXJuIDA7CitlcnJfZnJlZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgbXNfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfU0lERVdJTkRFUl9HViksCisJCS5kcml2ZXJfZGF0YSA9IE1TX0hJRElOUFVUIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19ORTRLKSwKKwkJLmRyaXZlcl9kYXRhID0gTVNfRVJHT05PTVkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULCBVU0JfREVWSUNFX0lEX01TX0xLNkspLAorCQkuZHJpdmVyX2RhdGEgPSBNU19FUkdPTk9NWSB8IE1TX1JERVNDIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19QUkVTRU5URVJfOEtfVVNCKSwKKwkJLmRyaXZlcl9kYXRhID0gTVNfUFJFU0VOVEVSIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9XSVJFTEVTU19PUFRJQ0FMX0RFU0tUT1BfM18wKSwKKwkJLmRyaXZlcl9kYXRhID0gTVNfTk9HRVQgfSwKKworCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfUFJFU0VOVEVSXzhLX0JUKSwKKwkJLmRyaXZlcl9kYXRhID0gTVNfUFJFU0VOVEVSIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIG1zX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgbXNfZHJpdmVyID0geworCS5uYW1lID0gIm1pY3Jvc29mdCIsCisJLmlkX3RhYmxlID0gbXNfZGV2aWNlcywKKwkucmVwb3J0X2ZpeHVwID0gbXNfcmVwb3J0X2ZpeHVwLAorCS5pbnB1dF9tYXBwaW5nID0gbXNfaW5wdXRfbWFwcGluZywKKwkuZXZlbnQgPSBtc19ldmVudCwKKwkucHJvYmUgPSBtc19wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgbXNfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZtc19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBtc19leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZtc19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtc19pbml0KTsKK21vZHVsZV9leGl0KG1zX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKG1pY3Jvc29mdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbW9udGVyZXkuYyBiL2RyaXZlcnMvaGlkL2hpZC1tb250ZXJleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTg1YTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtbW9udGVyZXkuYwpAQCAtMCwwICsxLDgyIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgbW9udGVyZXkgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0YXRpYyB2b2lkIG1yX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwlpZiAocnNpemUgPj0gMzAgJiYgcmRlc2NbMjldID09IDB4MDUgJiYgcmRlc2NbMzBdID09IDB4MDkpIHsKKwkJZGV2X2luZm8oJmhkZXYtPmRldiwgImZpeGluZyB1cCBidXR0b24vY29uc3VtZXIgaW4gSElEIHJlcG9ydCAiCisJCQkJImRlc2NyaXB0b3JcbiIpOworCQlyZGVzY1szMF0gPSAweDBjOworCX0KK30KKworI2RlZmluZSBtcl9tYXBfa2V5X2NsZWFyKGMpCWhpZF9tYXBfdXNhZ2VfY2xlYXIoaGksIHVzYWdlLCBiaXQsIG1heCwgXAorCQkJCQlFVl9LRVksIChjKSkKK3N0YXRpYyBpbnQgbXJfaW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9DT05TVU1FUikKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwljYXNlIDB4MTU2OiBtcl9tYXBfa2V5X2NsZWFyKEtFWV9XT1JEUFJPQ0VTU09SKTsJYnJlYWs7CisJY2FzZSAweDE1NzogbXJfbWFwX2tleV9jbGVhcihLRVlfU1BSRUFEU0hFRVQpOwkJYnJlYWs7CisJY2FzZSAweDE1ODogbXJfbWFwX2tleV9jbGVhcihLRVlfUFJFU0VOVEFUSU9OKTsJCWJyZWFrOworCWNhc2UgMHgxNWM6IG1yX21hcF9rZXlfY2xlYXIoS0VZX1NUT1ApOwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIG1yX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9OVEVSRVksIFVTQl9ERVZJQ0VfSURfR0VOSVVTX0tCMjlFKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBtcl9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIG1yX2RyaXZlciA9IHsKKwkubmFtZSA9ICJtb250ZXJleSIsCisJLmlkX3RhYmxlID0gbXJfZGV2aWNlcywKKwkucmVwb3J0X2ZpeHVwID0gbXJfcmVwb3J0X2ZpeHVwLAorCS5pbnB1dF9tYXBwaW5nID0gbXJfaW5wdXRfbWFwcGluZywKK307CisKK3N0YXRpYyBpbnQgbXJfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZtcl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBtcl9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZtcl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtcl9pbml0KTsKK21vZHVsZV9leGl0KG1yX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKG1vbnRlcmV5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1wZXRhbHlueC5jIGIvZHJpdmVycy9oaWQvaGlkLXBldGFseW54LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5NDVmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1wZXRhbHlueC5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgcGV0YWx5bnggInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKy8qIFBldGFseW54IE1heHRlciBSZW1vdGUgaGFzIG1heGltdW0gZm9yIGNvbnN1bWVyIHBhZ2Ugc2V0IHRvbyBsb3cgKi8KK3N0YXRpYyB2b2lkIHBsX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwlpZiAocnNpemUgPj0gNjAgJiYgcmRlc2NbMzldID09IDB4MmEgJiYgcmRlc2NbNDBdID09IDB4ZjUgJiYKKwkJCXJkZXNjWzQxXSA9PSAweDAwICYmIHJkZXNjWzU5XSA9PSAweDI2ICYmCisJCQlyZGVzY1s2MF0gPT0gMHhmOSAmJiByZGVzY1s2MV0gPT0gMHgwMCkgeworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiZml4aW5nIHVwIFBldGFseW54IE1heHRlciBSZW1vdGUgcmVwb3J0ICIKKwkJCQkiZGVzY3JpcHRvclxuIik7CisJCXJkZXNjWzYwXSA9IDB4ZmE7CisJCXJkZXNjWzQwXSA9IDB4ZmE7CisJfQorfQorCisjZGVmaW5lIHBsX21hcF9rZXlfY2xlYXIoYykJaGlkX21hcF91c2FnZV9jbGVhcihoaSwgdXNhZ2UsIGJpdCwgbWF4LCBcCisJCQkJCUVWX0tFWSwgKGMpKQorc3RhdGljIGludCBwbF9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgPT0gSElEX1VQX0xPR0lWRU5ET1IpIHsKKwkJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJCWNhc2UgMHgwNWE6IHBsX21hcF9rZXlfY2xlYXIoS0VZX1RFWFQpOwkJYnJlYWs7CisJCWNhc2UgMHgwNWI6IHBsX21hcF9rZXlfY2xlYXIoS0VZX1JFRCk7CQlicmVhazsKKwkJY2FzZSAweDA1YzogcGxfbWFwX2tleV9jbGVhcihLRVlfR1JFRU4pOwlicmVhazsKKwkJY2FzZSAweDA1ZDogcGxfbWFwX2tleV9jbGVhcihLRVlfWUVMTE9XKTsJYnJlYWs7CisJCWNhc2UgMHgwNWU6IHBsX21hcF9rZXlfY2xlYXIoS0VZX0JMVUUpOwkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgPT0gSElEX1VQX0NPTlNVTUVSKSB7CisJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCQljYXNlIDB4MGY2OiBwbF9tYXBfa2V5X2NsZWFyKEtFWV9ORVhUKTsJCWJyZWFrOworCQljYXNlIDB4MGZhOiBwbF9tYXBfa2V5X2NsZWFyKEtFWV9CQUNLKTsJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGxfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCisJaGRldi0+cXVpcmtzIHw9IEhJRF9RVUlSS19OT0dFVDsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBwbF9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BFVEFMWU5YLCBVU0JfREVWSUNFX0lEX1BFVEFMWU5YX01BWFRFUl9SRU1PVEUpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIHBsX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgcGxfZHJpdmVyID0geworCS5uYW1lID0gInBldGFseW54IiwKKwkuaWRfdGFibGUgPSBwbF9kZXZpY2VzLAorCS5yZXBvcnRfZml4dXAgPSBwbF9yZXBvcnRfZml4dXAsCisJLmlucHV0X21hcHBpbmcgPSBwbF9pbnB1dF9tYXBwaW5nLAorCS5wcm9iZSA9IHBsX3Byb2JlLAorfTsKKworc3RhdGljIGludCBwbF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnBsX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHBsX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnBsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBsX2luaXQpOworbW9kdWxlX2V4aXQocGxfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIocGV0YWx5bngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXBsLmMgYi9kcml2ZXJzL2hpZC9oaWQtcGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2Q4MTU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXBsLmMKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiAgRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgUGFudGhlckxvcmQvR3JlZW5Bc2lhIGJhc2VkIGRldmljZXMKKyAqCisgKiAgVGhlIGRldmljZXMgYXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHZhcmlvdXMgbmFtZXMgYW5kIHRoZSBzYW1lIFVTQiBkZXZpY2UgSUQKKyAqICBjYW4gYmUgdXNlZCBpbiBib3RoIGFkYXB0ZXJzIGFuZCBhY3R1YWwgZ2FtZSBjb250cm9sbGVycy4KKyAqCisgKiAgMDgxMDowMDAxICJUd2luIFVTQiBKb3lzdGljayIKKyAqICAgLSB0ZXN0ZWQgd2l0aCBQYW50aGVyTG9yZCBVU0IvUFMyIDJpbjEgQWRhcHRlcgorICogICAtIGNvbnRhaW5zIHR3byByZXBvcnRzLCBvbmUgZm9yIGVhY2ggcG9ydCAoSElEX1FVSVJLX01VTFRJX0lOUFVUKQorICoKKyAqICAwZThmOjAwMDMgIkdyZWVuQXNpYSBJbmMuICAgIFVTQiBKb3lzdGljayAgICAgIgorICogICAtIHRlc3RlZCB3aXRoIEs/P25nIEdhbWluZyBnYW1lcGFkCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNyBBbnNzaSBIYW5udWxhIDxhbnNzaS5oYW5udWxhQGdtYWlsLmNvbT4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisKKy8qICNkZWZpbmUgREVCVUcgKi8KKworI2RlZmluZSBkZWJ1Zyhmb3JtYXQsIGFyZy4uLikgcHJfZGVidWcoImhpZC1wbGZmOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworI2lmZGVmIENPTkZJR19QQU5USEVSTE9SRF9GRgorI2luY2x1ZGUgInVzYmhpZC91c2JoaWQuaCIKKworc3RydWN0IHBsZmZfZGV2aWNlIHsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworfTsKKworc3RhdGljIGludCBoaWRfcGxmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBsZmZfZGV2aWNlICpwbGZmID0gZGF0YTsKKwlpbnQgbGVmdCwgcmlnaHQ7CisKKwlsZWZ0ID0gZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOworCXJpZ2h0ID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKKwlkZWJ1ZygiY2FsbGVkIHdpdGggMHglMDR4IDB4JTA0eCIsIGxlZnQsIHJpZ2h0KTsKKworCWxlZnQgPSBsZWZ0ICogMHg3ZiAvIDB4ZmZmZjsKKwlyaWdodCA9IHJpZ2h0ICogMHg3ZiAvIDB4ZmZmZjsKKworCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gbGVmdDsKKwlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IHJpZ2h0OworCWRlYnVnKCJydW5uaW5nIHdpdGggMHglMDJ4IDB4JTAyeCIsIGxlZnQsIHJpZ2h0KTsKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHBsZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGxmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IHBsZmZfZGV2aWNlICpwbGZmOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPQorCQkJJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9wdHIgPSByZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CisJaW50IGVycm9yOworCisJLyogVGhlIGRldmljZSBjb250YWlucyBvbmUgb3V0cHV0IHJlcG9ydCBwZXIgcGh5c2ljYWwgZGV2aWNlLCBhbGwKKwkgICBjb250YWluaW5nIDEgZmllbGQsIHdoaWNoIGNvbnRhaW5zIDQgZmYwMC4wMDAyIHVzYWdlcyBhbmQgNCAxNmJpdAorCSAgIGFic29sdXRlIHZhbHVlcy4KKworCSAgIFRoZSBpbnB1dCByZXBvcnRzIGFsc28gY29udGFpbiBhIGZpZWxkIHdoaWNoIGNvbnRhaW5zCisJICAgOCBmZjAwLjAwMDEgdXNhZ2VzIGFuZCA4IGJvb2xlYW4gdmFsdWVzLiBUaGVpciBtZWFuaW5nIGlzCisJICAgY3VycmVudGx5IHVua25vd24uICovCisKKwlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKKwkJZGV2X2VycigmaGlkLT5kZXYsICJubyBvdXRwdXQgcmVwb3J0cyBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaGlkaW5wdXQsICZoaWQtPmlucHV0cywgbGlzdCkgeworCisJCXJlcG9ydF9wdHIgPSByZXBvcnRfcHRyLT5uZXh0OworCisJCWlmIChyZXBvcnRfcHRyID09IHJlcG9ydF9saXN0KSB7CisJCQlkZXZfZXJyKCZoaWQtPmRldiwgInJlcXVpcmVkIG91dHB1dCByZXBvcnQgaXMgIgorCQkJCQkibWlzc2luZ1xuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCXJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X3B0ciwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOworCQlpZiAocmVwb3J0LT5tYXhmaWVsZCA8IDEpIHsKKwkJCWRldl9lcnIoJmhpZC0+ZGV2LCAibm8gZmllbGRzIGluIHRoZSByZXBvcnRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQlpZiAocmVwb3J0LT5maWVsZFswXS0+cmVwb3J0X2NvdW50IDwgNCkgeworCQkJZGV2X2VycigmaGlkLT5kZXYsICJub3QgZW5vdWdoIHZhbHVlcyBpbiB0aGUgZmllbGRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQlwbGZmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBsZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGxmZikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWRldiA9IGhpZGlucHV0LT5pbnB1dDsKKworCQlzZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7CisKKwkJZXJyb3IgPSBpbnB1dF9mZl9jcmVhdGVfbWVtbGVzcyhkZXYsIHBsZmYsIGhpZF9wbGZmX3BsYXkpOworCQlpZiAoZXJyb3IpIHsKKwkJCWtmcmVlKHBsZmYpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJcGxmZi0+cmVwb3J0ID0gcmVwb3J0OworCQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4MDA7CisJCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKKwkJcGxmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDAwOworCQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IDB4MDA7CisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcGxmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisJfQorCisJZGV2X2luZm8oJmhpZC0+ZGV2LCAiRm9yY2UgZmVlZGJhY2sgZm9yIFBhbnRoZXJMb3JkL0dyZWVuQXNpYSAiCisJICAgICAgICJkZXZpY2VzIGJ5IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPlxuIik7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwbGZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHBsX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKworCWlmIChpZC0+ZHJpdmVyX2RhdGEpCisJCWhkZXYtPnF1aXJrcyB8PSBISURfUVVJUktfTVVMVElfSU5QVVQ7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCAmIH5ISURfQ09OTkVDVF9GRik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlwbGZmX2luaXQoaGRldik7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgcGxfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HQU1FUk9OLCBVU0JfREVWSUNFX0lEX0dBTUVST05fRFVBTF9QU1hfQURBUFRPUiksCisJCS5kcml2ZXJfZGF0YSA9IDEgfSwgLyogVHdpbiBVU0IgSm95c3RpY2sgKi8KKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1JFRU5BU0lBLCAweDAwMDMpLCB9LCAvKiBHcmVlbkFzaWEgSW5jLiBVU0IgSm95c3RpY2sgKi8KKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgcGxfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBwbF9kcml2ZXIgPSB7CisJLm5hbWUgPSAicGFudGhlcmxvcmQiLAorCS5pZF90YWJsZSA9IHBsX2RldmljZXMsCisJLnByb2JlID0gcGxfcHJvYmUsCit9OworCitzdGF0aWMgaW50IHBsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmcGxfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgcGxfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmcGxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocGxfaW5pdCk7Cittb2R1bGVfZXhpdChwbF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworSElEX0NPTVBBVF9MT0FEX0RSSVZFUihwYW50aGVybG9yZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc2Ftc3VuZy5jIGIvZHJpdmVycy9oaWQvaGlkLXNhbXN1bmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWYzYzA0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNhbXN1bmcuYwpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBzb21lIHNhbXN1bmcgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKy8qCisgKiBTYW1zdW5nIElyREEgcmVtb3RlIGNvbnRyb2xsZXIgKHJlcG9ydHMgYXMgQ3lwcmVzcyBVU0IgTW91c2UpLgorICoKKyAqIFZlbmRvciBzcGVjaWZpYyByZXBvcnQgIzQgaGFzIGEgc2l6ZSBvZiA0OCBiaXQsCisgKiBhbmQgdGhlcmVmb3JlIGlzIG5vdCBhY2NlcHRlZCB3aGVuIGluc3BlY3RpbmcgdGhlIGRlc2NyaXB0b3JzLgorICogQXMgYSB3b3JrYXJvdW5kIHdlIHJlaW50ZXJwcmV0IHRoZSByZXBvcnQgYXM6CisgKiAgIFZhcmlhYmxlIHR5cGUsIGNvdW50IDYsIHNpemUgOCBiaXQsIGxvZy4gbWF4aW11bSAyNTUKKyAqIFRoZSBidXJkZW4gdG8gcmVjb25zdHJ1Y3QgdGhlIGRhdGEgaXMgbW92ZWQgaW50byB1c2VyIHNwYWNlLgorICovCitzdGF0aWMgdm9pZCBzYW1zdW5nX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwlpZiAocnNpemUgPj0gMTgyICYmIHJkZXNjWzE3NV0gPT0gMHgyNSAmJiByZGVzY1sxNzZdID09IDB4NDAgJiYKKwkJCXJkZXNjWzE3N10gPT0gMHg3NSAmJiByZGVzY1sxNzhdID09IDB4MzAgJiYKKwkJCXJkZXNjWzE3OV0gPT0gMHg5NSAmJiByZGVzY1sxODBdID09IDB4MDEgJiYKKwkJCXJkZXNjWzE4Ml0gPT0gMHg0MCkgeworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiZml4aW5nIHVwIFNhbXN1bmcgSXJEQSByZXBvcnQgIgorCQkJCSJkZXNjcmlwdG9yXG4iKTsKKwkJcmRlc2NbMTc2XSA9IDB4ZmY7CisJCXJkZXNjWzE3OF0gPSAweDA4OworCQlyZGVzY1sxODBdID0gMHgwNjsKKwkJcmRlc2NbMTgyXSA9IDB4NDI7CisJfQorfQorCitzdGF0aWMgaW50IHNhbXN1bmdfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCWNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgKEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfSElESU5QVVQpIHwKKwkJCUhJRF9DT05ORUNUX0hJRERFVl9GT1JDRSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXJldHVybiAwOworZXJyX2ZyZWU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHNhbXN1bmdfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TQU1TVU5HLCBVU0JfREVWSUNFX0lEX1NBTVNVTkdfSVJfUkVNT1RFKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBzYW1zdW5nX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgc2Ftc3VuZ19kcml2ZXIgPSB7CisJLm5hbWUgPSAic2Ftc3VuZyIsCisJLmlkX3RhYmxlID0gc2Ftc3VuZ19kZXZpY2VzLAorCS5yZXBvcnRfZml4dXAgPSBzYW1zdW5nX3JlcG9ydF9maXh1cCwKKwkucHJvYmUgPSBzYW1zdW5nX3Byb2JlLAorfTsKKworc3RhdGljIGludCBzYW1zdW5nX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmc2Ftc3VuZ19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBzYW1zdW5nX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNhbXN1bmdfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2Ftc3VuZ19pbml0KTsKK21vZHVsZV9leGl0KHNhbXN1bmdfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoc2Ftc3VuZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWY4MDk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBzb21lIHNvbnkgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKy8qCisgKiBTZW5kaW5nIEhJRF9SRVFfR0VUX1JFUE9SVCBjaGFuZ2VzIHRoZSBvcGVyYXRpb24gbW9kZSBvZiB0aGUgcHMzIGNvbnRyb2xsZXIKKyAqIHRvICJvcGVyYXRpb25hbCIuICBXaXRob3V0IHRoaXMsIHRoZSBwczMgY29udHJvbGxlciB3aWxsIG5vdCByZXBvcnQgYW55CisgKiBldmVudHMuCisgKi8KK3N0YXRpYyBpbnQgc29ueV9zZXRfb3BlcmF0aW9uYWwoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGhkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCV9fdTE2IGlmbnVtID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwlpbnQgcmV0OworCWNoYXIgKmJ1ZiA9IGttYWxsb2MoMTgsIEdGUF9LRVJORUwpOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkJIEhJRF9SRVFfR0VUX1JFUE9SVCwKKwkJCQkgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwKKwkJCQkgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCQkgKDMgPDwgOCkgfCAweGYyLCBpZm51bSwgYnVmLCAxNywKKwkJCQkgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW4ndCBzZXQgb3BlcmF0aW9uYWwgbW9kZVxuIik7CisKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzb255X3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgfAorCQkJSElEX0NPTk5FQ1RfSElEREVWX0ZPUkNFKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gc29ueV9zZXRfb3BlcmF0aW9uYWwoaGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfc3RvcDsKKworCXJldHVybiAwOworZXJyX3N0b3A6CisJaGlkX2h3X3N0b3AoaGRldik7CitlcnJfZnJlZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgc29ueV9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUikgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgc29ueV9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIHNvbnlfZHJpdmVyID0geworCS5uYW1lID0gInNvbnkiLAorCS5pZF90YWJsZSA9IHNvbnlfZGV2aWNlcywKKwkucHJvYmUgPSBzb255X3Byb2JlLAorfTsKKworc3RhdGljIGludCBzb255X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmc29ueV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBzb255X2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNvbnlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc29ueV9pbml0KTsKK21vZHVsZV9leGl0KHNvbnlfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoc29ueSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc3VucGx1cy5jIGIvZHJpdmVycy9oaWQvaGlkLXN1bnBsdXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmE2OGY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXN1bnBsdXMuYwpAQCAtMCwwICsxLDgyIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgc3VucGx1cyAic3BlY2lhbCIgZGV2aWNlcworICoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTkgQW5kcmVhcyBHYWwKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorICogIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEhhYm91c3RhayA8bWlrZS1AY2luY2kucnIuY29tPiBmb3IgQ29uY2VwdDIsIEluYworICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA3IFBhdWwgV2FsbXNsZXkKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggSmlyaSBTbGFieQorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworc3RhdGljIHZvaWQgc3BfcmVwb3J0X2ZpeHVwKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBfX3U4ICpyZGVzYywKKwkJdW5zaWduZWQgaW50IHJzaXplKQoreworCWlmIChyc2l6ZSA+PSAxMDcgJiYgcmRlc2NbMTA0XSA9PSAweDI2ICYmIHJkZXNjWzEwNV0gPT0gMHg4MCAmJgorCQkJcmRlc2NbMTA2XSA9PSAweDAzKSB7CisJCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgU3VucGx1cyBXaXJlbGVzcyBEZXNrdG9wICIKKwkJCQkicmVwb3J0IGRlc2NyaXB0b3JcbiIpOworCQlyZGVzY1sxMDVdID0gcmRlc2NbMTEwXSA9IDB4MDM7CisJCXJkZXNjWzEwNl0gPSByZGVzY1sxMTFdID0gMHgyMTsKKwl9Cit9CisKKyNkZWZpbmUgc3BfbWFwX2tleV9jbGVhcihjKQloaWRfbWFwX3VzYWdlX2NsZWFyKGhpLCB1c2FnZSwgYml0LCBtYXgsIFwKKwkJRVZfS0VZLCAoYykpCitzdGF0aWMgaW50IHNwX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfQ09OU1VNRVIpCisJCXJldHVybiAwOworCisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJY2FzZSAweDIwMDM6IHNwX21hcF9rZXlfY2xlYXIoS0VZX1pPT01JTik7CQlicmVhazsKKwljYXNlIDB4MjEwMzogc3BfbWFwX2tleV9jbGVhcihLRVlfWk9PTU9VVCk7CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHNwX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU1VOUExVUywgVVNCX0RFVklDRV9JRF9TVU5QTFVTX1dERVNLVE9QKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBzcF9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIHNwX2RyaXZlciA9IHsKKwkubmFtZSA9ICJzdW5wbHVzIiwKKwkuaWRfdGFibGUgPSBzcF9kZXZpY2VzLAorCS5yZXBvcnRfZml4dXAgPSBzcF9yZXBvcnRfZml4dXAsCisJLmlucHV0X21hcHBpbmcgPSBzcF9pbnB1dF9tYXBwaW5nLAorfTsKKworc3RhdGljIGludCBzcF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnNwX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHNwX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNwX2luaXQpOworbW9kdWxlX2V4aXQoc3BfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoc3VucGx1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdG1mZi5jIGIvZHJpdmVycy9oaWQvaGlkLXRtZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjdjYmEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXRtZmYuYwpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIHZhcmlvdXMgSElEIGNvbXBsaWFudCBkZXZpY2VzIGJ5IFRocnVzdE1hc3RlcjoKKyAqICAgIFRocnVzdE1hc3RlciBGaXJlU3Rvcm0gRHVhbCBQb3dlciAyCisgKiBhbmQgcG9zc2libHkgb3RoZXJzIHdob3NlIGRldmljZSBpZHMgaGF2ZW4ndCBiZWVuIGFkZGVkLgorICoKKyAqICBNb2RpZmllZCB0byBzdXBwb3J0IFRocnVzdE1hc3RlciBkZXZpY2VzIGJ5IFppbnggVmVyaXR1c2UKKyAqICBvbiAyMDAzLTAxLTI1IGZyb20gdGhlIExvZ2l0ZWNoIGZvcmNlIGZlZWRiYWNrIGRyaXZlciwKKyAqICB3aGljaCBpcyBieSBKb2hhbm4gRGVuZXV4LgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDMgWmlueCBWZXJpdHVzZSA8emlueEBlcGljc29sLm9yZz4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIgSm9oYW5uIERlbmV1eAorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCisjaW5jbHVkZSAidXNiaGlkL3VzYmhpZC5oIgorCisvKiBVc2FnZXMgZm9yIHRocnVzdG1hc3RlciBkZXZpY2VzIEkga25vdyBhYm91dCAqLworI2RlZmluZSBUSFJVU1RNQVNURVJfVVNBR0VfRkYJKEhJRF9VUF9HRU5ERVNLIHwgMHhiYikKKworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCBmZl9ydW1ibGVbXSA9IHsKKwlGRl9SVU1CTEUsCisJLTEKK307CisKK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgZmZfam95c3RpY2tbXSA9IHsKKwlGRl9DT05TVEFOVCwKKwktMQorfTsKKworc3RydWN0IHRtZmZfZGV2aWNlIHsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfZmllbGQgKmZmX2ZpZWxkOworfTsKKworLyogQ2hhbmdlcyB2YWx1ZXMgZnJvbSAwIHRvIDB4ZmZmZiBpbnRvIHZhbHVlcyBmcm9tIG1pbmltdW0gdG8gbWF4aW11bSAqLworc3RhdGljIGlubGluZSBpbnQgdG1mZl9zY2FsZV91MTYodW5zaWduZWQgaW50IGluLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pCit7CisJaW50IHJldDsKKworCXJldCA9IChpbiAqIChtYXhpbXVtIC0gbWluaW11bSkgLyAweGZmZmYpICsgbWluaW11bTsKKwlpZiAocmV0IDwgbWluaW11bSkKKwkJcmV0dXJuIG1pbmltdW07CisJaWYgKHJldCA+IG1heGltdW0pCisJCXJldHVybiBtYXhpbXVtOworCXJldHVybiByZXQ7Cit9CisKKy8qIENoYW5nZXMgdmFsdWVzIGZyb20gLTB4ODAgdG8gMHg3ZiBpbnRvIHZhbHVlcyBmcm9tIG1pbmltdW0gdG8gbWF4aW11bSAqLworc3RhdGljIGlubGluZSBpbnQgdG1mZl9zY2FsZV9zOChpbnQgaW4sIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gKCgoaW4gKyAweDgwKSAqIChtYXhpbXVtIC0gbWluaW11bSkpIC8gMHhmZikgKyBtaW5pbXVtOworCWlmIChyZXQgPCBtaW5pbXVtKQorCQlyZXR1cm4gbWluaW11bTsKKwlpZiAocmV0ID4gbWF4aW11bSkKKwkJcmV0dXJuIG1heGltdW07CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0bWZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAorCQlzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRtZmZfZGV2aWNlICp0bWZmID0gZGF0YTsKKwlzdHJ1Y3QgaGlkX2ZpZWxkICpmZl9maWVsZCA9IHRtZmYtPmZmX2ZpZWxkOworCWludCB4LCB5OworCWludCBsZWZ0LCByaWdodDsJLyogUnVtYmxpbmcgKi8KKworCXN3aXRjaCAoZWZmZWN0LT50eXBlKSB7CisJY2FzZSBGRl9DT05TVEFOVDoKKwkJeCA9IHRtZmZfc2NhbGVfczgoZWZmZWN0LT51LnJhbXAuc3RhcnRfbGV2ZWwsCisJCQkJCWZmX2ZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCWZmX2ZpZWxkLT5sb2dpY2FsX21heGltdW0pOworCQl5ID0gdG1mZl9zY2FsZV9zOChlZmZlY3QtPnUucmFtcC5lbmRfbGV2ZWwsCisJCQkJCWZmX2ZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCWZmX2ZpZWxkLT5sb2dpY2FsX21heGltdW0pOworCisJCWRiZ19oaWQoIih4LCB5KT0oJTA0eCwgJTA0eClcbiIsIHgsIHkpOworCQlmZl9maWVsZC0+dmFsdWVbMF0gPSB4OworCQlmZl9maWVsZC0+dmFsdWVbMV0gPSB5OworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHRtZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOworCQlicmVhazsKKworCWNhc2UgRkZfUlVNQkxFOgorCQlsZWZ0ID0gdG1mZl9zY2FsZV91MTYoZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZSwKKwkJCQkJZmZfZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJZmZfZmllbGQtPmxvZ2ljYWxfbWF4aW11bSk7CisJCXJpZ2h0ID0gdG1mZl9zY2FsZV91MTYoZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlLAorCQkJCQlmZl9maWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQlmZl9maWVsZC0+bG9naWNhbF9tYXhpbXVtKTsKKworCQlkYmdfaGlkKCIobGVmdCxyaWdodCk9KCUwOHgsICUwOHgpXG4iLCBsZWZ0LCByaWdodCk7CisJCWZmX2ZpZWxkLT52YWx1ZVswXSA9IGxlZnQ7CisJCWZmX2ZpZWxkLT52YWx1ZVsxXSA9IHJpZ2h0OworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHRtZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG1mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGNvbnN0IHNpZ25lZCBzaG9ydCAqZmZfYml0cykKK3sKKwlzdHJ1Y3QgdG1mZl9kZXZpY2UgKnRtZmY7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGlkLT5pbnB1dHMubmV4dCwKKwkJCQkJCQlzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBoaWRpbnB1dC0+aW5wdXQ7CisJaW50IGVycm9yOworCWludCBpOworCisJdG1mZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0bWZmX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghdG1mZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBGaW5kIHRoZSByZXBvcnQgdG8gdXNlICovCisJcmVwb3J0X2xpc3QgPSAmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXBvcnQsIHJlcG9ydF9saXN0LCBsaXN0KSB7CisJCWludCBmaWVsZG51bTsKKworCQlmb3IgKGZpZWxkbnVtID0gMDsgZmllbGRudW0gPCByZXBvcnQtPm1heGZpZWxkOyArK2ZpZWxkbnVtKSB7CisJCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCA9IHJlcG9ydC0+ZmllbGRbZmllbGRudW1dOworCisJCQlpZiAoZmllbGQtPm1heHVzYWdlIDw9IDApCisJCQkJY29udGludWU7CisKKwkJCXN3aXRjaCAoZmllbGQtPnVzYWdlWzBdLmhpZCkgeworCQkJY2FzZSBUSFJVU1RNQVNURVJfVVNBR0VfRkY6CisJCQkJaWYgKGZpZWxkLT5yZXBvcnRfY291bnQgPCAyKSB7CisJCQkJCWRldl93YXJuKCZoaWQtPmRldiwgImlnbm9yaW5nIEZGIGZpZWxkICIKKwkJCQkJCSJ3aXRoIHJlcG9ydF9jb3VudCA8IDJcbiIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlpZiAoZmllbGQtPmxvZ2ljYWxfbWF4aW11bSA9PQorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSkgeworCQkJCQlkZXZfd2FybigmaGlkLT5kZXYsICJpZ25vcmluZyBGRiBmaWVsZCAiCisJCQkJCQkJIndpdGggbG9naWNhbF9tYXhpbXVtICIKKwkJCQkJCQkiPT0gbG9naWNhbF9taW5pbXVtXG4iKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJaWYgKHRtZmYtPnJlcG9ydCAmJiB0bWZmLT5yZXBvcnQgIT0gcmVwb3J0KSB7CisJCQkJCWRldl93YXJuKCZoaWQtPmRldiwgImlnbm9yaW5nIEZGIGZpZWxkICIKKwkJCQkJCQkiaW4gb3RoZXIgcmVwb3J0XG4iKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJaWYgKHRtZmYtPmZmX2ZpZWxkICYmIHRtZmYtPmZmX2ZpZWxkICE9IGZpZWxkKSB7CisJCQkJCWRldl93YXJuKCZoaWQtPmRldiwgImlnbm9yaW5nICIKKwkJCQkJCQkiZHVwbGljYXRlIEZGIGZpZWxkXG4iKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJdG1mZi0+cmVwb3J0ID0gcmVwb3J0OworCQkJCXRtZmYtPmZmX2ZpZWxkID0gZmllbGQ7CisKKwkJCQlmb3IgKGkgPSAwOyBmZl9iaXRzW2ldID49IDA7IGkrKykKKwkJCQkJc2V0X2JpdChmZl9iaXRzW2ldLCBpbnB1dF9kZXYtPmZmYml0KTsKKworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWRldl93YXJuKCZoaWQtPmRldiwgImlnbm9yaW5nIHVua25vd24gb3V0cHV0ICIKKwkJCQkJCSJ1c2FnZSAlMDh4XG4iLAorCQkJCQkJZmllbGQtPnVzYWdlWzBdLmhpZCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIXRtZmYtPnJlcG9ydCkgeworCQlkZXZfZXJyKCZoaWQtPmRldiwgImNhbid0IGZpbmQgRkYgZmllbGQgaW4gb3V0cHV0IHJlcG9ydHNcbiIpOworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbDsKKwl9CisKKwllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGlucHV0X2RldiwgdG1mZiwgdG1mZl9wbGF5KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbDsKKworCWRldl9pbmZvKCZoaWQtPmRldiwgImZvcmNlIGZlZWRiYWNrIGZvciBUaHJ1c3RNYXN0ZXIgZGV2aWNlcyBieSBaaW54ICIKKwkJCSJWZXJpdHVzZSA8emlueEBlcGljc29sLm9yZz4iKTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlrZnJlZSh0bWZmKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgdG1fcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfRkYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJdG1mZl9pbml0KGhkZXYsICh2b2lkICopaWQtPmRyaXZlcl9kYXRhKTsKKworCXJldHVybiAwOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCB0bV9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzAwKSwKKwkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpZmZfcnVtYmxlIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzA0KSwKKwkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpZmZfcnVtYmxlIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiNjUxKSwJLyogRkdUIFJ1bWJsZSBGb3JjZSBXaGVlbCAqLworCQkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZylmZl9ydW1ibGUgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGI2NTQpLAkvKiBGR1QgRm9yY2UgRmVlZGJhY2sgV2hlZWwgKi8KKwkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpZmZfam95c3RpY2sgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgdG1fZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciB0bV9kcml2ZXIgPSB7CisJLm5hbWUgPSAidGhydXN0bWFzdGVyIiwKKwkuaWRfdGFibGUgPSB0bV9kZXZpY2VzLAorCS5wcm9iZSA9IHRtX3Byb2JlLAorfTsKKworc3RhdGljIGludCB0bV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnRtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHRtX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnRtX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRtX2luaXQpOworbW9kdWxlX2V4aXQodG1fZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIodGhydXN0bWFzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC16cGZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtenBmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhODJmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtenBmZi5jCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIFplcm9wbHVzIGJhc2VkIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKyNpbmNsdWRlICJ1c2JoaWQvdXNiaGlkLmgiCisKK3N0cnVjdCB6cGZmX2RldmljZSB7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKK307CisKK3N0YXRpYyBpbnQgenBmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHpwZmZfZGV2aWNlICp6cGZmID0gZGF0YTsKKwlpbnQgbGVmdCwgcmlnaHQ7CisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgaXMgc3BlY2lmaWVkIHRoZSBvdGhlciB3YXkgYXJvdW5kIGluIHRoZSBaZXJvcGx1cworCSAqIGRhdGFzaGVldCBidXQgdGhlIG9yZGVyIGJlbG93IGlzIGNvcnJlY3QgZm9yIHRoZSBYRlggRXhlY3V0aW9uZXI7CisJICogaG93ZXZlciBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBYRlggRXhlY3V0aW9uZXIgaXMgYW4gZXhjZXB0aW9uCisJICovCisKKwlsZWZ0ID0gZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOworCXJpZ2h0ID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKKwlkYmdfaGlkKCJjYWxsZWQgd2l0aCAweCUwNHggMHglMDR4XG4iLCBsZWZ0LCByaWdodCk7CisKKwlsZWZ0ID0gbGVmdCAqIDB4N2YgLyAweGZmZmY7CisJcmlnaHQgPSByaWdodCAqIDB4N2YgLyAweGZmZmY7CisKKwl6cGZmLT5yZXBvcnQtPmZpZWxkWzJdLT52YWx1ZVswXSA9IGxlZnQ7CisJenBmZi0+cmVwb3J0LT5maWVsZFszXS0+dmFsdWVbMF0gPSByaWdodDsKKwlkYmdfaGlkKCJydW5uaW5nIHdpdGggMHglMDJ4IDB4JTAyeFxuIiwgbGVmdCwgcmlnaHQpOworCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgenBmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6cGZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgenBmZl9kZXZpY2UgKnpwZmY7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGlkLT5pbnB1dHMubmV4dCwKKwkJCQkJCXN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0KKwkJCSZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBoaWRpbnB1dC0+aW5wdXQ7CisJaW50IGVycm9yOworCisJaWYgKGxpc3RfZW1wdHkocmVwb3J0X2xpc3QpKSB7CisJCWRldl9lcnIoJmhpZC0+ZGV2LCAibm8gb3V0cHV0IHJlcG9ydCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKworCWlmIChyZXBvcnQtPm1heGZpZWxkIDwgNCkgeworCQlkZXZfZXJyKCZoaWQtPmRldiwgIm5vdCBlbm91Z2ggZmllbGRzIGluIHJlcG9ydFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXpwZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgenBmZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXpwZmYpCisJCXJldHVybiAtRU5PTUVNOworCisJc2V0X2JpdChGRl9SVU1CTEUsIGRldi0+ZmZiaXQpOworCisJZXJyb3IgPSBpbnB1dF9mZl9jcmVhdGVfbWVtbGVzcyhkZXYsIHpwZmYsIHpwZmZfcGxheSk7CisJaWYgKGVycm9yKSB7CisJCWtmcmVlKHpwZmYpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJenBmZi0+cmVwb3J0ID0gcmVwb3J0OworCXpwZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMDsKKwl6cGZmLT5yZXBvcnQtPmZpZWxkWzFdLT52YWx1ZVswXSA9IDB4MDI7CisJenBmZi0+cmVwb3J0LT5maWVsZFsyXS0+dmFsdWVbMF0gPSAweDAwOworCXpwZmYtPnJlcG9ydC0+ZmllbGRbM10tPnZhbHVlWzBdID0gMHgwMDsKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHpwZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOworCisJZGV2X2luZm8oJmhpZC0+ZGV2LCAiZm9yY2UgZmVlZGJhY2sgZm9yIFplcm9wbHVzIGJhc2VkIGRldmljZXMgYnkgIgorCSAgICAgICAiQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+XG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpwX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUICYgfkhJRF9DT05ORUNUX0ZGKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXpwZmZfaW5pdChoZGV2KTsKKworCXJldHVybiAwOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCB6cF9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1pFUk9QTFVTLCAweDAwMDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1pFUk9QTFVTLCAweDAwMzApIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIHpwX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgenBfZHJpdmVyID0geworCS5uYW1lID0gInplcm9wbHVzIiwKKwkuaWRfdGFibGUgPSB6cF9kZXZpY2VzLAorCS5wcm9iZSA9IHpwX3Byb2JlLAorfTsKKworc3RhdGljIGludCB6cF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnpwX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHpwX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnpwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHpwX2luaXQpOworbW9kdWxlX2V4aXQoenBfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoemVyb3BsdXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkcmF3LmMgYi9kcml2ZXJzL2hpZC9oaWRyYXcuYwppbmRleCBjNDBmMDQwLi5hZjNlZGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWRyYXcuYworKysgYi9kcml2ZXJzL2hpZC9oaWRyYXcuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJaWYgKCFkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoY291bnQgPiBISURfTUlOX0JVRkZFUl9TSVpFKSB7CisJaWYgKGNvdW50ID4gSElEX01BWF9CVUZGRVJfU0laRSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJoaWRyYXc6IHBpZCAlZCBwYXNzZWQgdG9vIGxhcmdlIHJlcG9ydFxuIiwKIAkJCQl0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTgxLDcgKzE4MSw3IEBACiAKIAlkZXYgPSBoaWRyYXdfdGFibGVbbWlub3JdOwogCWlmICghZGV2LT5vcGVuKyspCi0JCWRldi0+aGlkLT5oaWRfb3BlbihkZXYtPmhpZCk7CisJCWRldi0+aGlkLT5sbF9kcml2ZXItPm9wZW4oZGV2LT5oaWQpOwogCiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrKCZtaW5vcnNfbG9jayk7CkBAIC0yMDcsNyArMjA3LDcgQEAKIAlkZXYgPSBoaWRyYXdfdGFibGVbbWlub3JdOwogCWlmICghZGV2LT5vcGVuLS0pIHsKIAkJaWYgKGxpc3QtPmhpZHJhdy0+ZXhpc3QpCi0JCQlkZXYtPmhpZC0+aGlkX2Nsb3NlKGRldi0+aGlkKTsKKwkJCWRldi0+aGlkLT5sbF9kcml2ZXItPmNsb3NlKGRldi0+aGlkKTsKIAkJZWxzZQogCQkJa2ZyZWUobGlzdC0+aGlkcmF3KTsKIAl9CkBAIC0zMjYsOSArMzI2LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoaGlkcmF3X2NsYXNzLCBOVUxMLAotCQkJCQkgTUtERVYoaGlkcmF3X21ham9yLCBtaW5vciksIE5VTEwsCi0JCQkJCSAiJXMlZCIsICJoaWRyYXciLCBtaW5vcik7CisJZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKGhpZHJhd19jbGFzcywgTlVMTCwgTUtERVYoaGlkcmF3X21ham9yLCBtaW5vciksCisJCQkJIE5VTEwsICIlcyVkIiwgImhpZHJhdyIsIG1pbm9yKTsKIAogCWlmIChJU19FUlIoZGV2LT5kZXYpKSB7CiAJCXNwaW5fbG9jaygmbWlub3JzX2xvY2spOwpAQCAtMzY3LDcgKzM2Niw3IEBACiAJZGV2aWNlX2Rlc3Ryb3koaGlkcmF3X2NsYXNzLCBNS0RFVihoaWRyYXdfbWFqb3IsIGhpZHJhdy0+bWlub3IpKTsKIAogCWlmIChoaWRyYXctPm9wZW4pIHsKLQkJaGlkLT5oaWRfY2xvc2UoaGlkKTsKKwkJaGlkLT5sbF9kcml2ZXItPmNsb3NlKGhpZCk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaGlkcmF3LT53YWl0KTsKIAl9IGVsc2UgewogCQlrZnJlZShoaWRyYXcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWcgYi9kcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZwppbmRleCAxOGYwOTEwLi41ZDlhYTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZwpAQCAtMjQsODggKzI0LDEzIEBACiBjb21tZW50ICJJbnB1dCBjb3JlIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgSElEIGlucHV0IGxheWVyIG9yIEhJREJQIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfSElEICYmIElOUFVUPW4KIAotY29uZmlnIFVTQl9ISURJTlBVVF9QT1dFUkJPT0sKLQlib29sICJFbmFibGUgc3VwcG9ydCBmb3IgQXBwbGUgbGFwdG9wL2FsdW1pbnVtIFVTQiBzcGVjaWFsIGtleXMiCi0JZGVmYXVsdCBuCi0JZGVwZW5kcyBvbiBVU0JfSElECi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgc3BlY2lhbCBrZXlzIChGbiwgTnVtbG9jaykgb24KLQkgIEFwcGxlIGlCb29rcywgUG93ZXJCb29rcywgTWFjQm9va3MsIE1hY0Jvb2sgUHJvcyBhbmQgYWx1bWludW0gVVNCCi0JICBrZXlib2FyZHMuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBISURfRkYKLQlib29sICJGb3JjZSBmZWVkYmFjayBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gVVNCX0hJRCAmJiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlzIHlvdSB3YW50IGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGEgZmV3IEhJRCBkZXZpY2VzLgotCSAgU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGRldmljZXMuCi0KLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2lucHV0L2ZmLnR4dD4gZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcmNlCi0JICBmZWVkYmFjayBBUEkuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBISURfUElECiAJYm9vbCAiUElEIGRldmljZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gSElEX0ZGCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFBJRC1jb21wbGlhbnQgZGV2aWNlIGFuZCB3aXNoIHRvIGVuYWJsZSBmb3JjZQogCSAgZmVlZGJhY2sgZm9yIGl0LiBNaWNyb3NvZnQgU2lkZXdpbmRlciBGb3JjZSBGZWVkYmFjayAyIGlzIG9uZSBvZiBzdWNoCiAJICBkZXZpY2VzLgogCi1jb25maWcgTE9HSVRFQ0hfRkYKLQlib29sICJMb2dpdGVjaCBkZXZpY2VzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBISURfRkYKLQlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUyBpZiBVU0JfSElECi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgZGV2aWNlczoKLQkgIC0gTG9naXRlY2ggV2luZ01hbiBDb3JkbGVzcyBSdW1ibGVQYWQKLQkgIC0gTG9naXRlY2ggV2luZ01hbiBDb3JkbGVzcyBSdW1ibGVQYWQgMgotCSAgLSBMb2dpdGVjaCBXaW5nTWFuIEZvcmNlIDNECi0JICAtIExvZ2l0ZWNoIEZvcm11bGEgRm9yY2UgRVgKLQkgIC0gTG9naXRlY2ggTU9NTyBGb3JjZSB3aGVlbAotCi0JICBhbmQgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIGZvciB0aGVtLgotCSAgTm90ZTogaWYgeW91IHNheSBOIGhlcmUsIHRoaXMgZGV2aWNlIHdpbGwgc3RpbGwgYmUgc3VwcG9ydGVkLCBidXQgd2l0aG91dAotCSAgZm9yY2UgZmVlZGJhY2suCi0KLWNvbmZpZyBMT0dJUlVNQkxFUEFEMl9GRgotCWJvb2wgIkxvZ2l0ZWNoIFJ1bWJsZXBhZCAyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBISURfRkYKLQlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUyBpZiBVU0JfSElECi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgTG9naXRlY2gKLQkgIFJ1bWJsZXBhZCAyIGRldmljZXMuCi0KLWNvbmZpZyBQQU5USEVSTE9SRF9GRgotCWJvb2wgIlBhbnRoZXJMb3JkL0dyZWVuQXNpYSBiYXNlZCBkZXZpY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEhJRF9GRgotCXNlbGVjdCBJTlBVVF9GRl9NRU1MRVNTIGlmIFVTQl9ISUQKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUGFudGhlckxvcmQvR3JlZW5Bc2lhIGJhc2VkIGdhbWUgY29udHJvbGxlcgotCSAgb3IgYWRhcHRlciBhbmQgd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgaXQuCi0KLWNvbmZpZyBUSFJVU1RNQVNURVJfRkYKLQlib29sICJUaHJ1c3RNYXN0ZXIgZGV2aWNlcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gSElEX0ZGCi0Jc2VsZWN0IElOUFVUX0ZGX01FTUxFU1MgaWYgVVNCX0hJRAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBUSFJVU1RNQVNURVIgRmlyZVN0b3JlIER1YWwgUG93ZXIgMiBvcgotCSAgYSBUSFJVU1RNQVNURVIgRmVycmFyaSBHVCBSdW1ibGUgRm9yY2Ugb3IgRm9yY2UgRmVlZGJhY2sgV2hlZWwsCi0JICBhbmQgd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgaXQuCi0JICBOb3RlOiBpZiB5b3Ugc2F5IE4gaGVyZSwgdGhpcyBkZXZpY2Ugd2lsbCBzdGlsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB3aXRob3V0Ci0JICBmb3JjZSBmZWVkYmFjay4KLQotY29uZmlnIFpFUk9QTFVTX0ZGCi0JYm9vbCAiWmVyb3BsdXMgYmFzZWQgZ2FtZSBjb250cm9sbGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBISURfRkYKLQlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUyBpZiBVU0JfSElECi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFplcm9wbHVzIGJhc2VkIGdhbWUgY29udHJvbGxlciBhbmQgd2FudCB0bwotCSAgZW5hYmxlIGZvcmNlIGZlZWRiYWNrIGZvciBpdC4KLQogY29uZmlnIFVTQl9ISURERVYKIAlib29sICIvZGV2L2hpZGRldiByYXcgSElEIGRldmljZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX0hJRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL01ha2VmaWxlIGIvZHJpdmVycy9oaWQvdXNiaGlkL01ha2VmaWxlCmluZGV4IDAwYTdiNzAuLjEzMjllY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvTWFrZWZpbGUKQEAgLTEzLDI0ICsxMyw2IEBACiBpZmVxICgkKENPTkZJR19ISURfUElEKSx5KQogCXVzYmhpZC1vYmpzCSs9IGhpZC1waWRmZi5vCiBlbmRpZgotaWZlcSAoJChDT05GSUdfTE9HSVRFQ0hfRkYpLHkpCi0JdXNiaGlkLW9ianMJKz0gaGlkLWxnZmYubwotZW5kaWYKLWlmZXEgKCQoQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGKSx5KQotCXVzYmhpZC1vYmpzCSs9IGhpZC1sZzJmZi5vCi1lbmRpZgotaWZlcSAoJChDT05GSUdfUEFOVEhFUkxPUkRfRkYpLHkpCi0JdXNiaGlkLW9ianMJKz0gaGlkLXBsZmYubwotZW5kaWYKLWlmZXEgKCQoQ09ORklHX1RIUlVTVE1BU1RFUl9GRikseSkKLQl1c2JoaWQtb2JqcwkrPSBoaWQtdG1mZi5vCi1lbmRpZgotaWZlcSAoJChDT05GSUdfWkVST1BMVVNfRkYpLHkpCi0JdXNiaGlkLW9ianMJKz0gaGlkLXpwZmYubwotZW5kaWYKLWlmZXEgKCQoQ09ORklHX0hJRF9GRikseSkKLQl1c2JoaWQtb2JqcwkrPSBoaWQtZmYubwotZW5kaWYKIAogb2JqLSQoQ09ORklHX1VTQl9ISUQpCQkrPSB1c2JoaWQubwogb2JqLSQoQ09ORklHX1VTQl9LQkQpCQkrPSB1c2JrYmQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwppbmRleCAyN2ZlNGQ4Li43MDVhNDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwpAQCAtNDQsOCArNDQsNiBAQAogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEhJRCBjb3JlIGRyaXZlciIKICNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKIAotc3RhdGljIGNoYXIgKmhpZF90eXBlc1tdID0geyJEZXZpY2UiLCAiUG9pbnRlciIsICJNb3VzZSIsICJEZXZpY2UiLCAiSm95c3RpY2siLAotCQkJCSJHYW1lcGFkIiwgIktleWJvYXJkIiwgIktleXBhZCIsICJNdWx0aS1BeGlzIENvbnRyb2xsZXIifTsKIC8qCiAgKiBNb2R1bGUgcGFyYW1ldGVycy4KICAqLwpAQCAtNjEsMTIgKzU5LDYgQEAKIAkJIiBxdWlya3M9dmVuZG9ySUQ6cHJvZHVjdElEOnF1aXJrcyIKIAkJIiB3aGVyZSB2ZW5kb3JJRCwgcHJvZHVjdElELCBhbmQgcXVpcmtzIGFyZSBhbGwgaW4iCiAJCSIgMHgtcHJlZml4ZWQgaGV4Iik7Ci1zdGF0aWMgY2hhciAqcmRlc2NfcXVpcmtzX3BhcmFtW01BWF9VU0JISURfQk9PVF9RVUlSS1NdID0geyBbIDAgLi4uIChNQVhfVVNCSElEX0JPT1RfUVVJUktTIC0gMSkgXSA9IE5VTEwgfTsKLW1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChyZGVzY19xdWlya3MsIHJkZXNjX3F1aXJrc19wYXJhbSwgY2hhcnAsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhyZGVzY19xdWlya3MsICJBZGQvbW9kaWZ5IHJlcG9ydCBkZXNjcmlwdG9yIHF1aXJrcyBieSBzcGVjaWZ5aW5nICIKLQkJIiByZGVzY19xdWlya3M9dmVuZG9ySUQ6cHJvZHVjdElEOnJkZXNjX3F1aXJrcyIKLQkJIiB3aGVyZSB2ZW5kb3JJRCwgcHJvZHVjdElELCBhbmQgcmRlc2NfcXVpcmtzIGFyZSBhbGwgaW4iCi0JCSIgMHgtcHJlZml4ZWQgaGV4Iik7CiAvKgogICogSW5wdXQgc3VibWlzc2lvbiBhbmQgSS9PIGVycm9yIGhhbmRsZXIuCiAgKi8KQEAgLTE5NywzMSArMTg5LDMyIEBACiAJaW50CQkJc3RhdHVzOwogCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewotCQljYXNlIDA6CQkJLyogc3VjY2VzcyAqLwotCQkJdXNiaGlkLT5yZXRyeV9kZWxheSA9IDA7Ci0JCQloaWRfaW5wdXRfcmVwb3J0KHVyYi0+Y29udGV4dCwgSElEX0lOUFVUX1JFUE9SVCwKLQkJCQkJIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkJCQkgdXJiLT5hY3R1YWxfbGVuZ3RoLCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIC1FUElQRToJCS8qIHN0YWxsICovCi0JCQljbGVhcl9iaXQoSElEX0lOX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOwotCQkJc2V0X2JpdChISURfQ0xFQVJfSEFMVCwgJnVzYmhpZC0+aW9mbCk7Ci0JCQlzY2hlZHVsZV93b3JrKCZ1c2JoaWQtPnJlc2V0X3dvcmspOwotCQkJcmV0dXJuOwotCQljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KLQkJY2FzZSAtRU5PRU5UOgotCQljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLwotCQkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKLQkJCXJldHVybjsKLQkJY2FzZSAtRUlMU0VROgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCi0JCWNhc2UgLUVQUk9UTzoJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLwotCQljYXNlIC1FVElNRToJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLwotCQljYXNlIC1FVElNRURPVVQ6CS8qIFNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dC4uLiAqLwotCQkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKLQkJCWhpZF9pb19lcnJvcihoaWQpOwotCQkJcmV0dXJuOwotCQlkZWZhdWx0OgkJLyogZXJyb3IgKi8KLQkJCXdhcm4oImlucHV0IGlycSBzdGF0dXMgJWQgcmVjZWl2ZWQiLCB1cmItPnN0YXR1cyk7CisJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJdXNiaGlkLT5yZXRyeV9kZWxheSA9IDA7CisJCWhpZF9pbnB1dF9yZXBvcnQodXJiLT5jb250ZXh0LCBISURfSU5QVVRfUkVQT1JULAorCQkJCSB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgdXJiLT5hY3R1YWxfbGVuZ3RoLCAxKTsKKwkJYnJlYWs7CisJY2FzZSAtRVBJUEU6CQkvKiBzdGFsbCAqLworCQljbGVhcl9iaXQoSElEX0lOX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOworCQlzZXRfYml0KEhJRF9DTEVBUl9IQUxULCAmdXNiaGlkLT5pb2ZsKTsKKwkJc2NoZWR1bGVfd29yaygmdXNiaGlkLT5yZXNldF93b3JrKTsKKwkJcmV0dXJuOworCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLworCQljbGVhcl9iaXQoSElEX0lOX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOworCQlyZXR1cm47CisJY2FzZSAtRUlMU0VROgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCisJY2FzZSAtRVBST1RPOgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCisJY2FzZSAtRVRJTUU6CQkvKiBwcm90b2NvbCBlcnJvciBvciB1bnBsdWcgKi8KKwljYXNlIC1FVElNRURPVVQ6CS8qIFNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dC4uLiAqLworCQljbGVhcl9iaXQoSElEX0lOX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOworCQloaWRfaW9fZXJyb3IoaGlkKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQlkZXZfd2FybigmdXJiLT5kZXYtPmRldiwgImlucHV0IGlycSBzdGF0dXMgJWQgICIKKwkJCQkicmVjZWl2ZWRcbiIsIHVyYi0+c3RhdHVzKTsKIAl9CiAKIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwpAQCAtMjQwLDEzICsyMzMsMTYgQEAKIHN0YXRpYyBpbnQgaGlkX3N1Ym1pdF9vdXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKIAlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCWNoYXIgKnJhd19yZXBvcnQ7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKLQlyZXBvcnQgPSB1c2JoaWQtPm91dFt1c2JoaWQtPm91dHRhaWxdOworCXJlcG9ydCA9IHVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0dGFpbF0ucmVwb3J0OworCXJhd19yZXBvcnQgPSB1c2JoaWQtPm91dFt1c2JoaWQtPm91dHRhaWxdLnJhd19yZXBvcnQ7CiAKLQloaWRfb3V0cHV0X3JlcG9ydChyZXBvcnQsIHVzYmhpZC0+b3V0YnVmKTsKIAl1c2JoaWQtPnVyYm91dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9ICgocmVwb3J0LT5zaXplIC0gMSkgPj4gMykgKyAxICsgKHJlcG9ydC0+aWQgPiAwKTsKIAl1c2JoaWQtPnVyYm91dC0+ZGV2ID0gaGlkX3RvX3VzYl9kZXYoaGlkKTsKKwltZW1jcHkodXNiaGlkLT5vdXRidWYsIHJhd19yZXBvcnQsIHVzYmhpZC0+dXJib3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwlrZnJlZShyYXdfcmVwb3J0KTsKIAogCWRiZ19oaWQoInN1Ym1pdHRpbmcgb3V0IHVyYlxuIik7CiAKQEAgLTI2MiwxNyArMjU4LDIwIEBACiB7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKIAl1bnNpZ25lZCBjaGFyIGRpcjsKKwljaGFyICpyYXdfcmVwb3J0OwogCWludCBsZW47CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKIAlyZXBvcnQgPSB1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsdGFpbF0ucmVwb3J0OworCXJhd19yZXBvcnQgPSB1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsdGFpbF0ucmF3X3JlcG9ydDsKIAlkaXIgPSB1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsdGFpbF0uZGlyOwogCiAJbGVuID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOwogCWlmIChkaXIgPT0gVVNCX0RJUl9PVVQpIHsKLQkJaGlkX291dHB1dF9yZXBvcnQocmVwb3J0LCB1c2JoaWQtPmN0cmxidWYpOwogCQl1c2JoaWQtPnVyYmN0cmwtPnBpcGUgPSB1c2Jfc25kY3RybHBpcGUoaGlkX3RvX3VzYl9kZXYoaGlkKSwgMCk7CiAJCXVzYmhpZC0+dXJiY3RybC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGxlbjsKKwkJbWVtY3B5KHVzYmhpZC0+Y3RybGJ1ZiwgcmF3X3JlcG9ydCwgbGVuKTsKKwkJa2ZyZWUocmF3X3JlcG9ydCk7CiAJfSBlbHNlIHsKIAkJaW50IG1heHBhY2tldCwgcGFkbGVuOwogCkBAIC0zMTksMTcgKzMxOCwxOCBAQAogCWludCB1bnBsdWcgPSAwOwogCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewotCQljYXNlIDA6CQkJLyogc3VjY2VzcyAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgLUVTSFVURE9XTjoJLyogdW5wbHVnICovCi0JCQl1bnBsdWcgPSAxOwotCQljYXNlIC1FSUxTRVE6CQkvKiBwcm90b2NvbCBlcnJvciBvciB1bnBsdWcgKi8KLQkJY2FzZSAtRVBST1RPOgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCi0JCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLwotCQljYXNlIC1FTk9FTlQ6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoJCS8qIGVycm9yICovCi0JCQl3YXJuKCJvdXRwdXQgaXJxIHN0YXR1cyAlZCByZWNlaXZlZCIsIHVyYi0+c3RhdHVzKTsKKwljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLworCQl1bnBsdWcgPSAxOworCWNhc2UgLUVJTFNFUToJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLworCWNhc2UgLUVQUk9UTzoJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLworCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLworCWNhc2UgLUVOT0VOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCWRldl93YXJuKCZ1cmItPmRldi0+ZGV2LCAib3V0cHV0IGlycSBzdGF0dXMgJWQgIgorCQkJCSJyZWNlaXZlZFxuIiwgdXJiLT5zdGF0dXMpOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JoaWQtPm91dGxvY2ssIGZsYWdzKTsKQEAgLTM2NywyMSArMzY3LDIzIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKIAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQkJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KLQkJCWlmICh1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsdGFpbF0uZGlyID09IFVTQl9ESVJfSU4pCi0JCQkJaGlkX2lucHV0X3JlcG9ydCh1cmItPmNvbnRleHQsIHVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmx0YWlsXS5yZXBvcnQtPnR5cGUsCi0JCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT5hY3R1YWxfbGVuZ3RoLCAwKTsKLQkJCWJyZWFrOwotCQljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLwotCQkJdW5wbHVnID0gMTsKLQkJY2FzZSAtRUlMU0VROgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCi0JCWNhc2UgLUVQUk9UTzoJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLwotCQljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KLQkJY2FzZSAtRU5PRU5UOgotCQljYXNlIC1FUElQRToJCS8qIHJlcG9ydCBub3QgYXZhaWxhYmxlICovCi0JCQlicmVhazsKLQkJZGVmYXVsdDoJCS8qIGVycm9yICovCi0JCQl3YXJuKCJjdHJsIHVyYiBzdGF0dXMgJWQgcmVjZWl2ZWQiLCB1cmItPnN0YXR1cyk7CisJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJaWYgKHVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmx0YWlsXS5kaXIgPT0gVVNCX0RJUl9JTikKKwkJCWhpZF9pbnB1dF9yZXBvcnQodXJiLT5jb250ZXh0LAorCQkJCXVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmx0YWlsXS5yZXBvcnQtPnR5cGUsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCwgMCk7CisJCWJyZWFrOworCWNhc2UgLUVTSFVURE9XTjoJLyogdW5wbHVnICovCisJCXVucGx1ZyA9IDE7CisJY2FzZSAtRUlMU0VROgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCisJY2FzZSAtRVBST1RPOgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCisJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVQSVBFOgkJLyogcmVwb3J0IG5vdCBhdmFpbGFibGUgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCWRldl93YXJuKCZ1cmItPmRldi0+ZGV2LCAiY3RybCB1cmIgc3RhdHVzICVkICIKKwkJCQkicmVjZWl2ZWRcbiIsIHVyYi0+c3RhdHVzKTsKIAl9CiAKIAlpZiAodW5wbHVnKQpAQCAtNDA4LDYgKzQxMCw3IEBACiAJaW50IGhlYWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKKwlpbnQgbGVuID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOwogCiAJaWYgKChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19OT0dFVCkgJiYgZGlyID09IFVTQl9ESVJfSU4pCiAJCXJldHVybjsKQEAgLTQxOCwxMSArNDIxLDE4IEBACiAKIAkJaWYgKChoZWFkID0gKHVzYmhpZC0+b3V0aGVhZCArIDEpICYgKEhJRF9PVVRQVVRfRklGT19TSVpFIC0gMSkpID09IHVzYmhpZC0+b3V0dGFpbCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7Ci0JCQl3YXJuKCJvdXRwdXQgcXVldWUgZnVsbCIpOworCQkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAib3V0cHV0IHF1ZXVlIGZ1bGxcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAKLQkJdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXSA9IHJlcG9ydDsKKwkJdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXS5yYXdfcmVwb3J0ID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOworCQlpZiAoIXVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmF3X3JlcG9ydCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7CisJCQlkZXZfd2FybigmaGlkLT5kZXYsICJvdXRwdXQgcXVldWVpbmcgZmFpbGVkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQloaWRfb3V0cHV0X3JlcG9ydChyZXBvcnQsIHVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmF3X3JlcG9ydCk7CisJCXVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmVwb3J0ID0gcmVwb3J0OwogCQl1c2JoaWQtPm91dGhlYWQgPSBoZWFkOwogCiAJCWlmICghdGVzdF9hbmRfc2V0X2JpdChISURfT1VUX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpKQpAQCAtNDM3LDEwICs0NDcsMTkgQEAKIAogCWlmICgoaGVhZCA9ICh1c2JoaWQtPmN0cmxoZWFkICsgMSkgJiAoSElEX0NPTlRST0xfRklGT19TSVpFIC0gMSkpID09IHVzYmhpZC0+Y3RybHRhaWwpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5jdHJsbG9jaywgZmxhZ3MpOwotCQl3YXJuKCJjb250cm9sIHF1ZXVlIGZ1bGwiKTsKKwkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAiY29udHJvbCBxdWV1ZSBmdWxsXG4iKTsKIAkJcmV0dXJuOwogCX0KIAorCWlmIChkaXIgPT0gVVNCX0RJUl9PVVQpIHsKKwkJdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CisJCWlmICghdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKKwkJCWRldl93YXJuKCZoaWQtPmRldiwgImNvbnRyb2wgcXVldWVpbmcgZmFpbGVkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQloaWRfb3V0cHV0X3JlcG9ydChyZXBvcnQsIHVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmxoZWFkXS5yYXdfcmVwb3J0KTsKKwl9CiAJdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJlcG9ydCA9IHJlcG9ydDsKIAl1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsaGVhZF0uZGlyID0gZGlyOwogCXVzYmhpZC0+Y3RybGhlYWQgPSBoZWFkOwpAQCAtNDUxLDYgKzQ3MCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPmN0cmxsb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JoaWRfc3VibWl0X3JlcG9ydCk7CiAKIHN0YXRpYyBpbnQgdXNiX2hpZGlucHV0X2lucHV0X2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCiB7CkBAIC00NjUsNyArNDg1LDcgQEAKIAkJcmV0dXJuIC0xOwogCiAJaWYgKChvZmZzZXQgPSBoaWRpbnB1dF9maW5kX2ZpZWxkKGhpZCwgdHlwZSwgY29kZSwgJmZpZWxkKSkgPT0gLTEpIHsKLQkJd2FybigiZXZlbnQgZmllbGQgbm90IGZvdW5kIik7CisJCWRldl93YXJuKCZkZXYtPmRldiwgImV2ZW50IGZpZWxkIG5vdCBmb3VuZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTU2OCw3ICs1ODgsNyBAQAogCX0KIAogCWlmIChlcnIpCi0JCXdhcm4oInRpbWVvdXQgaW5pdGlhbGl6aW5nIHJlcG9ydHMiKTsKKwkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAidGltZW91dCBpbml0aWFsaXppbmcgcmVwb3J0c1xuIik7CiB9CiAKIC8qCkBAIC01OTgsNyArNjE4LDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB2b2lkIHVzYmhpZF9zZXRfbGVkcyhzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQordm9pZCB1c2JoaWRfc2V0X2xlZHMoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKIAlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKIAlpbnQgb2Zmc2V0OwpAQCAtNjA4LDYgKzYyOCw3IEBACiAJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgZmllbGQtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmhpZF9zZXRfbGVkcyk7CiAKIC8qCiAgKiBUcmF2ZXJzZSB0aGUgc3VwcGxpZWQgbGlzdCBvZiByZXBvcnRzIGFuZCBmaW5kIHRoZSBsb25nZXN0CkBAIC02NzUsNDMgKzY5NiwxNiBAQAogCXVzYl9idWZmZXJfZnJlZShkZXYsIHVzYmhpZC0+YnVmc2l6ZSwgdXNiaGlkLT5jdHJsYnVmLCB1c2JoaWQtPmN0cmxidWZfZG1hKTsKIH0KIAotLyoKLSAqIFNlbmRpbmcgSElEX1JFUV9HRVRfUkVQT1JUIGNoYW5nZXMgdGhlIG9wZXJhdGlvbiBtb2RlIG9mIHRoZSBwczMgY29udHJvbGxlcgotICogdG8gIm9wZXJhdGlvbmFsIi4gIFdpdGhvdXQgdGhpcywgdGhlIHBzMyBjb250cm9sbGVyIHdpbGwgbm90IHJlcG9ydCBhbnkKLSAqIGV2ZW50cy4KLSAqLwotc3RhdGljIHZvaWQgaGlkX2ZpeHVwX3NvbnlfcHMzX2NvbnRyb2xsZXIoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IGlmbnVtKQorc3RhdGljIGludCB1c2JoaWRfcGFyc2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKLQlpbnQgcmVzdWx0OwotCWNoYXIgKmJ1ZiA9IGttYWxsb2MoMTgsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFidWYpCi0JCXJldHVybjsKLQotCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAotCQkJCSBISURfUkVRX0dFVF9SRVBPUlQsCi0JCQkJIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8Ci0JCQkJIFVTQl9SRUNJUF9JTlRFUkZBQ0UsCi0JCQkJICgzIDw8IDgpIHwgMHhmMiwgaWZudW0sIGJ1ZiwgMTcsCi0JCQkJIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKLQotCWlmIChyZXN1bHQgPCAwKQotCQllcnJfaGlkKCIlcyBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKLQotCWtmcmVlKGJ1Zik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaGlkX2RldmljZSAqdXNiX2hpZF9jb25maWd1cmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGhpZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOwogCXN0cnVjdCBoaWRfZGVzY3JpcHRvciAqaGRlc2M7Ci0Jc3RydWN0IGhpZF9kZXZpY2UgKmhpZDsKIAl1MzIgcXVpcmtzID0gMDsKLQl1bnNpZ25lZCBpbnQgaW5zaXplID0gMCwgcnNpemUgPSAwOworCXVuc2lnbmVkIGludCByc2l6ZSA9IDA7CiAJY2hhciAqcmRlc2M7Ci0JaW50IG4sIGxlbjsKLQlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkOworCWludCByZXQsIG47CiAKIAlxdWlya3MgPSB1c2JoaWRfbG9va3VwX3F1aXJrKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCiAJCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CkBAIC03MjQsNjMgKzcxOCw3NSBAQAogCQkJCXF1aXJrcyB8PSBISURfUVVJUktfTk9HRVQ7CiAJfQogCi0JaWYgKHF1aXJrcyAmIEhJRF9RVUlSS19JR05PUkUpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKChxdWlya3MgJiBISURfUVVJUktfSUdOT1JFX01PVVNFKSAmJgotCQkoaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCA9PSBVU0JfSU5URVJGQUNFX1BST1RPQ09MX01PVVNFKSkKLQkJCXJldHVybiBOVUxMOwotCi0KIAlpZiAodXNiX2dldF9leHRyYV9kZXNjcmlwdG9yKGludGVyZmFjZSwgSElEX0RUX0hJRCwgJmhkZXNjKSAmJgogCSAgICAoIWludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzIHx8CiAJICAgICB1c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IoJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0sIEhJRF9EVF9ISUQsICZoZGVzYykpKSB7CiAJCWRiZ19oaWQoImNsYXNzIGRlc2NyaXB0b3Igbm90IHByZXNlbnRcbiIpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJaGlkLT52ZXJzaW9uID0gbGUxNl90b19jcHUoaGRlc2MtPmJjZEhJRCk7CisJaGlkLT5jb3VudHJ5ID0gaGRlc2MtPmJDb3VudHJ5Q29kZTsKKwogCWZvciAobiA9IDA7IG4gPCBoZGVzYy0+Yk51bURlc2NyaXB0b3JzOyBuKyspCiAJCWlmIChoZGVzYy0+ZGVzY1tuXS5iRGVzY3JpcHRvclR5cGUgPT0gSElEX0RUX1JFUE9SVCkKIAkJCXJzaXplID0gbGUxNl90b19jcHUoaGRlc2MtPmRlc2Nbbl0ud0Rlc2NyaXB0b3JMZW5ndGgpOwogCiAJaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IEhJRF9NQVhfREVTQ1JJUFRPUl9TSVpFKSB7CiAJCWRiZ19oaWQoIndlaXJkIHNpemUgb2YgcmVwb3J0IGRlc2NyaXB0b3IgKCV1KVxuIiwgcnNpemUpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCEocmRlc2MgPSBrbWFsbG9jKHJzaXplLCBHRlBfS0VSTkVMKSkpIHsKIAkJZGJnX2hpZCgiY291bGRuJ3QgYWxsb2NhdGUgcmRlc2MgbWVtb3J5XG4iKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWhpZF9zZXRfaWRsZShkZXYsIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAwLCAwKTsKIAotCWlmICgobiA9IGhpZF9nZXRfY2xhc3NfZGVzY3JpcHRvcihkZXYsIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCBISURfRFRfUkVQT1JULCByZGVzYywgcnNpemUpKSA8IDApIHsKKwlyZXQgPSBoaWRfZ2V0X2NsYXNzX2Rlc2NyaXB0b3IoZGV2LCBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCUhJRF9EVF9SRVBPUlQsIHJkZXNjLCByc2l6ZSk7CisJaWYgKHJldCA8IDApIHsKIAkJZGJnX2hpZCgicmVhZGluZyByZXBvcnQgZGVzY3JpcHRvciBmYWlsZWRcbiIpOwogCQlrZnJlZShyZGVzYyk7Ci0JCXJldHVybiBOVUxMOworCQlnb3RvIGVycjsKIAl9CiAKLQl1c2JoaWRfZml4dXBfcmVwb3J0X2Rlc2NyaXB0b3IobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKLQkJCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLCByZGVzYywKLQkJCXJzaXplLCByZGVzY19xdWlya3NfcGFyYW0pOwotCiAJZGJnX2hpZCgicmVwb3J0IGRlc2NyaXB0b3IgKHNpemUgJXUsIHJlYWQgJWQpID0gIiwgcnNpemUsIG4pOwogCWZvciAobiA9IDA7IG4gPCByc2l6ZTsgbisrKQogCQlkYmdfaGlkX2xpbmUoIiAlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpIHJkZXNjW25dKTsKIAlkYmdfaGlkX2xpbmUoIlxuIik7CiAKLQlpZiAoIShoaWQgPSBoaWRfcGFyc2VfcmVwb3J0KHJkZXNjLCBuKSkpIHsKKwlyZXQgPSBoaWRfcGFyc2VfcmVwb3J0KGhpZCwgcmRlc2MsIHJzaXplKTsKKwlrZnJlZShyZGVzYyk7CisJaWYgKHJldCkgewogCQlkYmdfaGlkKCJwYXJzaW5nIHJlcG9ydCBkZXNjcmlwdG9yIGZhaWxlZFxuIik7Ci0JCWtmcmVlKHJkZXNjKTsKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyOwogCX0KIAotCWtmcmVlKHJkZXNjKTsKIAloaWQtPnF1aXJrcyA9IHF1aXJrczsKIAotCWlmICghKHVzYmhpZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JoaWRfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQotCQlnb3RvIGZhaWxfbm9fdXNiaGlkOworCXJldHVybiAwOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdXNiaGlkX3N0YXJ0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGhpZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZDsKKwl1bnNpZ25lZCBpbnQgbiwgaW5zaXplID0gMDsKKwlpbnQgcmV0OworCisJV0FSTl9PTihoaWQtPmRyaXZlcl9kYXRhKTsKKworCXVzYmhpZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JoaWRfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVzYmhpZCA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KIAogCWhpZC0+ZHJpdmVyX2RhdGEgPSB1c2JoaWQ7CiAJdXNiaGlkLT5oaWQgPSBoaWQ7CkBAIC03OTksMjggKzgwNSwxMSBAQAogCQlpbnNpemUgPSBISURfTUFYX0JVRkZFUl9TSVpFOwogCiAJaWYgKGhpZF9hbGxvY19idWZmZXJzKGRldiwgaGlkKSkgewotCQloaWRfZnJlZV9idWZmZXJzKGRldiwgaGlkKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBmYWlsOwogCX0KIAotCWhpZC0+bmFtZVswXSA9IDA7Ci0KLQlpZiAoZGV2LT5tYW51ZmFjdHVyZXIpCi0JCXN0cmxjcHkoaGlkLT5uYW1lLCBkZXYtPm1hbnVmYWN0dXJlciwgc2l6ZW9mKGhpZC0+bmFtZSkpOwotCi0JaWYgKGRldi0+cHJvZHVjdCkgewotCQlpZiAoZGV2LT5tYW51ZmFjdHVyZXIpCi0JCQlzdHJsY2F0KGhpZC0+bmFtZSwgIiAiLCBzaXplb2YoaGlkLT5uYW1lKSk7Ci0JCXN0cmxjYXQoaGlkLT5uYW1lLCBkZXYtPnByb2R1Y3QsIHNpemVvZihoaWQtPm5hbWUpKTsKLQl9Ci0KLQlpZiAoIXN0cmxlbihoaWQtPm5hbWUpKQotCQlzbnByaW50ZihoaWQtPm5hbWUsIHNpemVvZihoaWQtPm5hbWUpLCAiSElEICUwNHg6JTA0eCIsCi0JCQkgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKLQkJCSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7Ci0KIAlmb3IgKG4gPSAwOyBuIDwgaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHM7IG4rKykgewotCiAJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CiAJCWludCBwaXBlOwogCQlpbnQgaW50ZXJ2YWw7CkBAIC04MzIsNyArODIxLDcgQEAKIAkJaW50ZXJ2YWwgPSBlbmRwb2ludC0+YkludGVydmFsOwogCiAJCS8qIFNvbWUgdmVuZG9ycyBnaXZlIGZ1bGxzcGVlZCBpbnRlcnZhbCBvbiBoaWdoc3BlZWQgZGV2aWRlcyAqLwotCQlpZiAocXVpcmtzICYgSElEX1FVSVJLX0ZVTExTUEVFRF9JTlRFUlZBTCAgJiYKKwkJaWYgKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX0ZVTExTUEVFRF9JTlRFUlZBTCAmJgogCQkgICAgZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgewogCQkJaW50ZXJ2YWwgPSBmbHMoZW5kcG9pbnQtPmJJbnRlcnZhbCo4KTsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGaXhpbmcgZnVsbHNwZWVkIHRvIGhpZ2hzcGVlZCBpbnRlcnZhbDogJWQgLT4gJWRcbiIsCkBAIC04NDMsNiArODMyLDcgQEAKIAkJaWYgKGhpZC0+Y29sbGVjdGlvbi0+dXNhZ2UgPT0gSElEX0dEX01PVVNFICYmIGhpZF9tb3VzZXBvbGxfaW50ZXJ2YWwgPiAwKQogCQkJaW50ZXJ2YWwgPSBoaWRfbW91c2Vwb2xsX2ludGVydmFsOwogCisJCXJldCA9IC1FTk9NRU07CiAJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVuZHBvaW50KSkgewogCQkJaWYgKHVzYmhpZC0+dXJiaW4pCiAJCQkJY29udGludWU7CkBAIC04NjgsNiArODU4LDcgQEAKIAogCWlmICghdXNiaGlkLT51cmJpbikgewogCQllcnJfaGlkKCJjb3VsZG4ndCBmaW5kIGFuIGlucHV0IGludGVycnVwdCBlbmRwb2ludCIpOworCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC04NzksNDQgKzg3MCwyNSBAQAogCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPm91dGxvY2spOwogCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPmN0cmxsb2NrKTsKIAotCWhpZC0+dmVyc2lvbiA9IGxlMTZfdG9fY3B1KGhkZXNjLT5iY2RISUQpOwotCWhpZC0+Y291bnRyeSA9IGhkZXNjLT5iQ291bnRyeUNvZGU7Ci0JaGlkLT5kZXYgPSAmaW50Zi0+ZGV2OwogCXVzYmhpZC0+aW50ZiA9IGludGY7CiAJdXNiaGlkLT5pZm51bSA9IGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwogCi0JaGlkLT5idXMgPSBCVVNfVVNCOwotCWhpZC0+dmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKLQloaWQtPnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKLQotCXVzYl9tYWtlX3BhdGgoZGV2LCBoaWQtPnBoeXMsIHNpemVvZihoaWQtPnBoeXMpKTsKLQlzdHJsY2F0KGhpZC0+cGh5cywgIi9pbnB1dCIsIHNpemVvZihoaWQtPnBoeXMpKTsKLQlsZW4gPSBzdHJsZW4oaGlkLT5waHlzKTsKLQlpZiAobGVuIDwgc2l6ZW9mKGhpZC0+cGh5cykgLSAxKQotCQlzbnByaW50ZihoaWQtPnBoeXMgKyBsZW4sIHNpemVvZihoaWQtPnBoeXMpIC0gbGVuLAotCQkJICIlZCIsIGludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKLQotCWlmICh1c2Jfc3RyaW5nKGRldiwgZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIsIGhpZC0+dW5pcSwgNjQpIDw9IDApCi0JCWhpZC0+dW5pcVswXSA9IDA7Ci0KIAl1c2JoaWQtPnVyYmN0cmwgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICghdXNiaGlkLT51cmJjdHJsKQorCWlmICghdXNiaGlkLT51cmJjdHJsKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKKwl9CiAKIAl1c2JfZmlsbF9jb250cm9sX3VyYih1c2JoaWQtPnVyYmN0cmwsIGRldiwgMCwgKHZvaWQgKikgdXNiaGlkLT5jciwKIAkJCSAgICAgdXNiaGlkLT5jdHJsYnVmLCAxLCBoaWRfY3RybCwgaGlkKTsKIAl1c2JoaWQtPnVyYmN0cmwtPnNldHVwX2RtYSA9IHVzYmhpZC0+Y3JfZG1hOwogCXVzYmhpZC0+dXJiY3RybC0+dHJhbnNmZXJfZG1hID0gdXNiaGlkLT5jdHJsYnVmX2RtYTsKIAl1c2JoaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2ZsYWdzIHw9IChVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCB8IFVSQl9OT19TRVRVUF9ETUFfTUFQKTsKLQloaWQtPmhpZGlucHV0X2lucHV0X2V2ZW50ID0gdXNiX2hpZGlucHV0X2lucHV0X2V2ZW50OwotCWhpZC0+aGlkX29wZW4gPSB1c2JoaWRfb3BlbjsKLQloaWQtPmhpZF9jbG9zZSA9IHVzYmhpZF9jbG9zZTsKLSNpZmRlZiBDT05GSUdfVVNCX0hJRERFVgotCWhpZC0+aGlkZGV2X2hpZF9ldmVudCA9IGhpZGRldl9oaWRfZXZlbnQ7Ci0JaGlkLT5oaWRkZXZfcmVwb3J0X2V2ZW50ID0gaGlkZGV2X3JlcG9ydF9ldmVudDsKLSNlbmRpZgotCWhpZC0+aGlkX291dHB1dF9yYXdfcmVwb3J0ID0gdXNiaGlkX291dHB1dF9yYXdfcmVwb3J0OwotCXJldHVybiBoaWQ7CisKKwl1c2JoaWRfaW5pdF9yZXBvcnRzKGhpZCk7CisJaGlkX2R1bXBfZGV2aWNlKGhpZCk7CisKKwlyZXR1cm4gMDsKIAogZmFpbDoKIAl1c2JfZnJlZV91cmIodXNiaGlkLT51cmJpbik7CkBAIC05MjQsMjQgKzg5NiwxOCBAQAogCXVzYl9mcmVlX3VyYih1c2JoaWQtPnVyYmN0cmwpOwogCWhpZF9mcmVlX2J1ZmZlcnMoZGV2LCBoaWQpOwogCWtmcmVlKHVzYmhpZCk7Ci1mYWlsX25vX3VzYmhpZDoKLQloaWRfZnJlZV9kZXZpY2UoaGlkKTsKLQotCXJldHVybiBOVUxMOworZXJyOgorCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGhpZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQorc3RhdGljIHZvaWQgdXNiaGlkX3N0b3Aoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7Ci0Jc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZDsKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKIAotCWlmICghaGlkKQorCWlmIChXQVJOX09OKCF1c2JoaWQpKQogCQlyZXR1cm47CiAKLQl1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwotCiAJc3Bpbl9sb2NrX2lycSgmdXNiaGlkLT5pbmxvY2spOwkvKiBTeW5jIHdpdGggZXJyb3IgaGFuZGxlciAqLwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJc2V0X2JpdChISURfRElTQ09OTkVDVEVELCAmdXNiaGlkLT5pb2ZsKTsKIAlzcGluX3VubG9ja19pcnEoJnVzYmhpZC0+aW5sb2NrKTsKIAl1c2Jfa2lsbF91cmIodXNiaGlkLT51cmJpbik7CkBAIC05NTgsODYgKzkyNCwxMDAgQEAKIAlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEUkFXKQogCQloaWRyYXdfZGlzY29ubmVjdChoaWQpOwogCisJaGlkLT5jbGFpbWVkID0gMDsKKwogCXVzYl9mcmVlX3VyYih1c2JoaWQtPnVyYmluKTsKIAl1c2JfZnJlZV91cmIodXNiaGlkLT51cmJjdHJsKTsKIAl1c2JfZnJlZV91cmIodXNiaGlkLT51cmJvdXQpOwogCiAJaGlkX2ZyZWVfYnVmZmVycyhoaWRfdG9fdXNiX2RldihoaWQpLCBoaWQpOwogCWtmcmVlKHVzYmhpZCk7Ci0JaGlkX2ZyZWVfZGV2aWNlKGhpZCk7CisJaGlkLT5kcml2ZXJfZGF0YSA9IE5VTEw7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaGlkX2xsX2RyaXZlciB1c2JfaGlkX2RyaXZlciA9IHsKKwkucGFyc2UgPSB1c2JoaWRfcGFyc2UsCisJLnN0YXJ0ID0gdXNiaGlkX3N0YXJ0LAorCS5zdG9wID0gdXNiaGlkX3N0b3AsCisJLm9wZW4gPSB1c2JoaWRfb3BlbiwKKwkuY2xvc2UgPSB1c2JoaWRfY2xvc2UsCisJLmhpZGlucHV0X2lucHV0X2V2ZW50ID0gdXNiX2hpZGlucHV0X2lucHV0X2V2ZW50LAorfTsKKwogc3RhdGljIGludCBoaWRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkOwotCWNoYXIgcGF0aFs2NF07Ci0JaW50IGk7Ci0JY2hhciAqYzsKKwlzaXplX3QgbGVuOworCWludCByZXQ7CiAKIAlkYmdfaGlkKCJISUQgcHJvYmUgY2FsbGVkIGZvciBpZm51bSAlZFxuIiwKIAkJCWludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CiAKLQlpZiAoIShoaWQgPSB1c2JfaGlkX2NvbmZpZ3VyZShpbnRmKSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JdXNiaGlkX2luaXRfcmVwb3J0cyhoaWQpOwotCWhpZF9kdW1wX2RldmljZShoaWQpOwotCWlmIChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19SRVNFVF9MRURTKQotCQl1c2JoaWRfc2V0X2xlZHMoaGlkKTsKLQotCWlmICghaGlkaW5wdXRfY29ubmVjdChoaWQpKQotCQloaWQtPmNsYWltZWQgfD0gSElEX0NMQUlNRURfSU5QVVQ7Ci0JaWYgKCFoaWRkZXZfY29ubmVjdChoaWQpKQotCQloaWQtPmNsYWltZWQgfD0gSElEX0NMQUlNRURfSElEREVWOwotCWlmICghaGlkcmF3X2Nvbm5lY3QoaGlkKSkKLQkJaGlkLT5jbGFpbWVkIHw9IEhJRF9DTEFJTUVEX0hJRFJBVzsKKwloaWQgPSBoaWRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKElTX0VSUihoaWQpKQorCQlyZXR1cm4gUFRSX0VSUihoaWQpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBoaWQpOworCWhpZC0+bGxfZHJpdmVyID0gJnVzYl9oaWRfZHJpdmVyOworCWhpZC0+aGlkX291dHB1dF9yYXdfcmVwb3J0ID0gdXNiaGlkX291dHB1dF9yYXdfcmVwb3J0OworCWhpZC0+ZmZfaW5pdCA9IGhpZF9waWRmZl9pbml0OworI2lmZGVmIENPTkZJR19VU0JfSElEREVWCisJaGlkLT5oaWRkZXZfY29ubmVjdCA9IGhpZGRldl9jb25uZWN0OworCWhpZC0+aGlkZGV2X2hpZF9ldmVudCA9IGhpZGRldl9oaWRfZXZlbnQ7CisJaGlkLT5oaWRkZXZfcmVwb3J0X2V2ZW50ID0gaGlkZGV2X3JlcG9ydF9ldmVudDsKKyNlbmRpZgorCWhpZC0+ZGV2LnBhcmVudCA9ICZpbnRmLT5kZXY7CisJaGlkLT5idXMgPSBCVVNfVVNCOworCWhpZC0+dmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwloaWQtPnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwloaWQtPm5hbWVbMF0gPSAwOwogCi0JaWYgKCFoaWQtPmNsYWltZWQpIHsKLQkJcHJpbnRrICgiSElEIGRldmljZSBjbGFpbWVkIGJ5IG5laXRoZXIgaW5wdXQsIGhpZGRldiBub3IgaGlkcmF3XG4iKTsKLQkJaGlkX2Rpc2Nvbm5lY3QoaW50Zik7Ci0JCXJldHVybiAtRU5PREVWOworCWlmIChkZXYtPm1hbnVmYWN0dXJlcikKKwkJc3RybGNweShoaWQtPm5hbWUsIGRldi0+bWFudWZhY3R1cmVyLCBzaXplb2YoaGlkLT5uYW1lKSk7CisKKwlpZiAoZGV2LT5wcm9kdWN0KSB7CisJCWlmIChkZXYtPm1hbnVmYWN0dXJlcikKKwkJCXN0cmxjYXQoaGlkLT5uYW1lLCAiICIsIHNpemVvZihoaWQtPm5hbWUpKTsKKwkJc3RybGNhdChoaWQtPm5hbWUsIGRldi0+cHJvZHVjdCwgc2l6ZW9mKGhpZC0+bmFtZSkpOwogCX0KIAotCWlmICgoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpKQotCQloaWRfZmZfaW5pdChoaWQpOworCWlmICghc3RybGVuKGhpZC0+bmFtZSkpCisJCXNucHJpbnRmKGhpZC0+bmFtZSwgc2l6ZW9mKGhpZC0+bmFtZSksICJISUQgJTA0eDolMDR4IiwKKwkJCSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAotCWlmIChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19TT05ZX1BTM19DT05UUk9MTEVSKQotCQloaWRfZml4dXBfc29ueV9wczNfY29udHJvbGxlcihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLAotCQkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisJdXNiX21ha2VfcGF0aChkZXYsIGhpZC0+cGh5cywgc2l6ZW9mKGhpZC0+cGh5cykpOworCXN0cmxjYXQoaGlkLT5waHlzLCAiL2lucHV0Iiwgc2l6ZW9mKGhpZC0+cGh5cykpOworCWxlbiA9IHN0cmxlbihoaWQtPnBoeXMpOworCWlmIChsZW4gPCBzaXplb2YoaGlkLT5waHlzKSAtIDEpCisJCXNucHJpbnRmKGhpZC0+cGh5cyArIGxlbiwgc2l6ZW9mKGhpZC0+cGh5cykgLSBsZW4sCisJCQkgIiVkIiwgaW50Zi0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyk7CisJaWYgKHVzYl9zdHJpbmcoZGV2LCBkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlciwgaGlkLT51bmlxLCA2NCkgPD0gMCkKKwkJaGlkLT51bmlxWzBdID0gMDsKIAotCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKLQkJcHJpbnRrKCJpbnB1dCIpOwotCWlmICgoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpICYmICgoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWKSB8fAotCQkJCWhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRFJBVykpCi0JCXByaW50aygiLCIpOwotCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpCi0JCXByaW50aygiaGlkZGV2JWQiLCBoaWQtPm1pbm9yKTsKLQlpZiAoKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSAmJiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWKSAmJgotCQkJKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRFJBVykpCi0JCXByaW50aygiLCIpOwotCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURSQVcpCi0JCXByaW50aygiaGlkcmF3JWQiLCAoKHN0cnVjdCBoaWRyYXcqKWhpZC0+aGlkcmF3KS0+bWlub3IpOwotCi0JYyA9ICJEZXZpY2UiOwotCWZvciAoaSA9IDA7IGkgPCBoaWQtPm1heGNvbGxlY3Rpb247IGkrKykgewotCQlpZiAoaGlkLT5jb2xsZWN0aW9uW2ldLnR5cGUgPT0gSElEX0NPTExFQ1RJT05fQVBQTElDQVRJT04gJiYKLQkJICAgIChoaWQtPmNvbGxlY3Rpb25baV0udXNhZ2UgJiBISURfVVNBR0VfUEFHRSkgPT0gSElEX1VQX0dFTkRFU0sgJiYKLQkJICAgIChoaWQtPmNvbGxlY3Rpb25baV0udXNhZ2UgJiAweGZmZmYpIDwgQVJSQVlfU0laRShoaWRfdHlwZXMpKSB7Ci0JCQljID0gaGlkX3R5cGVzW2hpZC0+Y29sbGVjdGlvbltpXS51c2FnZSAmIDB4ZmZmZl07Ci0JCQlicmVhazsKLQkJfQorCXJldCA9IGhpZF9hZGRfZGV2aWNlKGhpZCk7CisJaWYgKHJldCkgeworCQlpZiAocmV0ICE9IC1FTk9ERVYpCisJCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJjYW4ndCBhZGQgaGlkIGRldmljZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOwogCX0KIAotCXVzYl9tYWtlX3BhdGgoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgcGF0aCwgNjMpOwotCi0JcHJpbnRrKCI6IFVTQiBISUQgdiV4LiUwMnggJXMgWyVzXSBvbiAlc1xuIiwKLQkJaGlkLT52ZXJzaW9uID4+IDgsIGhpZC0+dmVyc2lvbiAmIDB4ZmYsIGMsIGhpZC0+bmFtZSwgcGF0aCk7Ci0KIAlyZXR1cm4gMDsKK2VycjoKKwloaWRfZGVzdHJveV9kZXZpY2UoaGlkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBoaWRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWlmIChXQVJOX09OKCFoaWQpKQorCQlyZXR1cm47CisKKwloaWRfZGVzdHJveV9kZXZpY2UoaGlkKTsKIH0KIAogc3RhdGljIGludCBoaWRfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCkBAIC0xMTA3LDkgKzEwODcsMjIgQEAKIAkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGhpZF91c2JfdGFibGVbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKEhJRF9BTllfSUQsIEhJRF9BTllfSUQpIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgaGlkX3VzYl9kcml2ZXIgPSB7CisJLm5hbWUgPSAiZ2VuZXJpYy11c2IiLAorCS5pZF90YWJsZSA9IGhpZF91c2JfdGFibGUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBoaWRfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CisJcmV0dmFsID0gaGlkX3JlZ2lzdGVyX2RyaXZlcigmaGlkX3VzYl9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gaGlkX3JlZ2lzdGVyX2ZhaWw7CiAJcmV0dmFsID0gdXNiaGlkX3F1aXJrc19pbml0KHF1aXJrc19wYXJhbSk7CiAJaWYgKHJldHZhbCkKIAkJZ290byB1c2JoaWRfcXVpcmtzX2luaXRfZmFpbDsKQEAgLTExMTksNyArMTExMiw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZoaWRfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIHVzYl9yZWdpc3Rlcl9mYWlsOwotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJCQlEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogdXNiX3JlZ2lzdGVyX2ZhaWw6CkBAIC0xMTI3LDYgKzExMjEsOCBAQAogaGlkZGV2X2luaXRfZmFpbDoKIAl1c2JoaWRfcXVpcmtzX2V4aXQoKTsKIHVzYmhpZF9xdWlya3NfaW5pdF9mYWlsOgorCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmaGlkX3VzYl9kcml2ZXIpOworaGlkX3JlZ2lzdGVyX2ZhaWw6CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTEzNSw2ICsxMTMxLDcgQEAKIAl1c2JfZGVyZWdpc3RlcigmaGlkX2RyaXZlcik7CiAJaGlkZGV2X2V4aXQoKTsKIAl1c2JoaWRfcXVpcmtzX2V4aXQoKTsKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmhpZF91c2JfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaGlkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1mZi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1mZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDBkYWM1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtZmYuYworKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiAgRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgaGlkIGRldmljZXMuCi0gKiAgTm90IGFsbCBoaWQgZGV2aWNlcyB1c2UgdGhlIHNhbWUgcHJvdG9jb2wuIEZvciBleGFtcGxlLCBzb21lIHVzZSBQSUQsCi0gKiAgb3RoZXIgdXNlIHRoZWlyIG93biBwcm9wcmlldGFyeSBwcm9jb3RvbC4KLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgSm9oYW5uIERlbmV1eAotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICoKLSAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGJ5Ci0gKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8am9oYW5uLmRlbmV1eEBpdC51dS5zZT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLQotI3VuZGVmIERFQlVHCi0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9oaWQuaD4KLSNpbmNsdWRlICJ1c2JoaWQuaCIKLQotLyoKLSAqIFRoaXMgdGFibGUgY29udGFpbnMgcG9pbnRlcnMgdG8gaW5pdGlhbGl6ZXJzLiBUbyBhZGQgc3VwcG9ydCBmb3IgbmV3Ci0gKiBkZXZpY2VzLCB5b3UgbmVlZCB0byBhZGQgdGhlIFVTQiB2ZW5kb3IgYW5kIHByb2R1Y3QgaWRzIGhlcmUuCi0gKi8KLXN0cnVjdCBoaWRfZmZfaW5pdGlhbGl6ZXIgewotCXUxNiBpZFZlbmRvcjsKLQl1MTYgaWRQcm9kdWN0OwotCWludCAoKmluaXQpKHN0cnVjdCBoaWRfZGV2aWNlKik7Ci19OwotCi0vKgotICogV2UgdHJ5IHBpZGZmIHdoZW4gbm8gb3RoZXIgZHJpdmVyIGlzIGZvdW5kIGJlY2F1c2UgUElEIGlzIHRoZQotICogc3RhbmRhcmRzIGNvbXBsaWFudCB3YXkgb2YgaW1wbGVtZW50aW5nIGZvcmNlIGZlZWRiYWNrIGluIEhJRC4KLSAqIHBpZGZmX2luaXQoKSB3aWxsIHF1aWNrbHkgYWJvcnQgaWYgdGhlIGRldmljZSBkb2Vzbid0IGFwcGVhciB0bwotICogYmUgYSBQSUQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgaGlkX2ZmX2luaXRpYWxpemVyIGluaXRzW10gPSB7Ci0jaWZkZWYgQ09ORklHX0xPR0lURUNIX0ZGCi0JeyAweDQ2ZCwgMHhjMjExLCBoaWRfbGdmZl9pbml0IH0sIC8qIExvZ2l0ZWNoIENvcmRsZXNzIHJ1bWJsZSBwYWQgKi8KLQl7IDB4NDZkLCAweGMyMTksIGhpZF9sZ2ZmX2luaXQgfSwgLyogTG9naXRlY2ggQ29yZGxlc3MgcnVtYmxlIHBhZCAyICovCi0JeyAweDQ2ZCwgMHhjMjgzLCBoaWRfbGdmZl9pbml0IH0sIC8qIExvZ2l0ZWNoIFdpbmdtYW4gRm9yY2UgM2QgKi8KLQl7IDB4NDZkLCAweGMyODYsIGhpZF9sZ2ZmX2luaXQgfSwgLyogTG9naXRlY2ggRm9yY2UgM0QgUHJvIEpveXN0aWNrICovCi0JeyAweDQ2ZCwgMHhjMjk0LCBoaWRfbGdmZl9pbml0IH0sIC8qIExvZ2l0ZWNoIEZvcm11bGEgRm9yY2UgRVggKi8KLQl7IDB4NDZkLCAweGMyOTUsIGhpZF9sZ2ZmX2luaXQgfSwgLyogTG9naXRlY2ggTU9NTyBmb3JjZSB3aGVlbCAqLwotCXsgMHg0NmQsIDB4Y2EwMywgaGlkX2xnZmZfaW5pdCB9LCAvKiBMb2dpdGVjaCBNT01PIGZvcmNlIHdoZWVsICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYKLQl7IDB4NDZkLCAweGMyMTgsIGhpZF9sZzJmZl9pbml0IH0sIC8qIExvZ2l0ZWNoIFJ1bWJsZXBhZCAyICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUEFOVEhFUkxPUkRfRkYKLQl7IDB4ODEwLCAweDAwMDEsIGhpZF9wbGZmX2luaXQgfSwgLyogIlR3aW4gVVNCIEpveXN0aWNrIiAqLwotCXsgMHhlOGYsIDB4MDAwMywgaGlkX3BsZmZfaW5pdCB9LCAvKiAiR3JlZW5Bc2lhIEluYy4gICAgVVNCIEpveXN0aWNrICAgICAiICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGCi0JeyAweDQ0ZiwgMHhiMzAwLCBoaWRfdG1mZl9pbml0IH0sCi0JeyAweDQ0ZiwgMHhiMzA0LCBoaWRfdG1mZl9pbml0IH0sCi0JeyAweDQ0ZiwgMHhiNjUxLCBoaWRfdG1mZl9pbml0IH0sIC8qIEZHVCBSdW1ibGUgRm9yY2UgV2hlZWwgKi8KLQl7IDB4NDRmLCAweGI2NTQsIGhpZF90bWZmX2luaXQgfSwgLyogRkdUIEZvcmNlIEZlZWRiYWNrIFdoZWVsICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWkVST1BMVVNfRkYKLQl7IDB4YzEyLCAweDAwMDUsIGhpZF96cGZmX2luaXQgfSwKLQl7IDB4YzEyLCAweDAwMzAsIGhpZF96cGZmX2luaXQgfSwKLSNlbmRpZgotCXsgMCwJIDAsCSBoaWRfcGlkZmZfaW5pdH0gIC8qIE1hdGNoZXMgYW55dGhpbmcgKi8KLX07Ci0KLWludCBoaWRfZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKQotewotCXN0cnVjdCBoaWRfZmZfaW5pdGlhbGl6ZXIgKmluaXQ7Ci0JaW50IHZlbmRvciA9IGxlMTZfdG9fY3B1KGhpZF90b191c2JfZGV2KGhpZCktPmRlc2NyaXB0b3IuaWRWZW5kb3IpOwotCWludCBwcm9kdWN0ID0gbGUxNl90b19jcHUoaGlkX3RvX3VzYl9kZXYoaGlkKS0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwotCi0JZm9yIChpbml0ID0gaW5pdHM7IGluaXQtPmlkVmVuZG9yOyBpbml0KyspCi0JCWlmIChpbml0LT5pZFZlbmRvciA9PSB2ZW5kb3IgJiYgaW5pdC0+aWRQcm9kdWN0ID09IHByb2R1Y3QpCi0JCQlicmVhazsKLQotCXJldHVybiBpbml0LT5pbml0KGhpZCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChoaWRfZmZfaW5pdCk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtbGcyZmYuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtbGcyZmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ2OWJkMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWxnMmZmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqICBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBMb2dpdGVjaCBSdW1ibGVwYWQgMgotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDggQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+Ci0gKi8KLQotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWQuaD4KLSNpbmNsdWRlICJ1c2JoaWQuaCIKLQotc3RydWN0IGxnMmZmX2RldmljZSB7Ci0Jc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKLX07Ci0KLXN0YXRpYyBpbnQgcGxheV9lZmZlY3Qoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAotCQkJIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKLXsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbGcyZmZfZGV2aWNlICpsZzJmZiA9IGRhdGE7Ci0JaW50IHdlYWssIHN0cm9uZzsKLQotCXN0cm9uZyA9IGVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZTsKLQl3ZWFrID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKLQotCWlmICh3ZWFrIHx8IHN0cm9uZykgewotCQl3ZWFrID0gd2VhayAqIDB4ZmYgLyAweGZmZmY7Ci0JCXN0cm9uZyA9IHN0cm9uZyAqIDB4ZmYgLyAweGZmZmY7Ci0KLQkJbGcyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHg1MTsKLQkJbGcyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gd2VhazsKLQkJbGcyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzRdID0gc3Ryb25nOwotCX0gZWxzZSB7Ci0JCWxnMmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4ZjM7Ci0JCWxnMmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IDB4MDA7Ci0JCWxnMmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs0XSA9IDB4MDA7Ci0JfQotCi0JdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBsZzJmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBoaWRfbGcyZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQotewotCXN0cnVjdCBsZzJmZl9kZXZpY2UgKmxnMmZmOwotCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Ci0Jc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhpZC0+aW5wdXRzLm5leHQsCi0JCQkJCQlzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdCA9Ci0JCQkmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2ID0gaGlkaW5wdXQtPmlucHV0OwotCWludCBlcnJvcjsKLQotCWlmIChsaXN0X2VtcHR5KHJlcG9ydF9saXN0KSkgewotCQlwcmludGsoS0VSTl9FUlIgImhpZC1sZzJmZjogbm8gb3V0cHV0IHJlcG9ydCBmb3VuZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKLQotCWlmIChyZXBvcnQtPm1heGZpZWxkIDwgMSkgewotCQlwcmludGsoS0VSTl9FUlIgImhpZC1sZzJmZjogb3V0cHV0IHJlcG9ydCBpcyBlbXB0eVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlpZiAocmVwb3J0LT5maWVsZFswXS0+cmVwb3J0X2NvdW50IDwgNykgewotCQlwcmludGsoS0VSTl9FUlIgImhpZC1sZzJmZjogbm90IGVub3VnaCB2YWx1ZXMgaW4gdGhlIGZpZWxkXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JbGcyZmYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGcyZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFsZzJmZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7Ci0KLQllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGRldiwgbGcyZmYsIHBsYXlfZWZmZWN0KTsKLQlpZiAoZXJyb3IpIHsKLQkJa2ZyZWUobGcyZmYpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JbGcyZmYtPnJlcG9ydCA9IHJlcG9ydDsKLQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4ZjM7Ci0JcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDAwOwotCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gMHgwMDsKLQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IDB4MDA7Ci0JcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNF0gPSAweDAwOwotCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzVdID0gMHgwMDsKLQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs2XSA9IDB4MDA7Ci0KLQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRm9yY2UgZmVlZGJhY2sgZm9yIExvZ2l0ZWNoIFJ1bWJsZXBhZCAyIGJ5ICIKLQkgICAgICAgIkFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtbGdmZi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1sZ2ZmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiN2FiNmEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1sZ2ZmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGhpZC1jb21wbGlhbnQgZm9yIHNvbWUgb2YgdGhlIGRldmljZXMgZnJvbQotICogTG9naXRlY2gsIG5hbWVseToKLSAqIC0gV2luZ01hbiBDb3JkbGVzcyBSdW1ibGVQYWQKLSAqIC0gV2luZ01hbiBGb3JjZSAzRAotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBKb2hhbm4gRGVuZXV4Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDA2IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPgotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICoKLSAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGJ5Ci0gKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8am9oYW5uLmRlbmV1eEBpdC51dS5zZT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWQuaD4KLSNpbmNsdWRlICJ1c2JoaWQuaCIKLQotc3RydWN0IGRldl90eXBlIHsKLQl1MTYgaWRWZW5kb3I7Ci0JdTE2IGlkUHJvZHVjdDsKLQljb25zdCBzaWduZWQgc2hvcnQgKmZmOwotfTsKLQotc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCBmZl9ydW1ibGVbXSA9IHsKLQlGRl9SVU1CTEUsCi0JLTEKLX07Ci0KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgZmZfam95c3RpY2tbXSA9IHsKLQlGRl9DT05TVEFOVCwKLQktMQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfdHlwZSBkZXZpY2VzW10gPSB7Ci0JeyAweDA0NmQsIDB4YzIxMSwgZmZfcnVtYmxlIH0sCi0JeyAweDA0NmQsIDB4YzIxOSwgZmZfcnVtYmxlIH0sCi0JeyAweDA0NmQsIDB4YzI4MywgZmZfam95c3RpY2sgfSwKLQl7IDB4MDQ2ZCwgMHhjMjg2LCBmZl9qb3lzdGljayB9LAotCXsgMHgwNDZkLCAweGMyOTQsIGZmX2pveXN0aWNrIH0sCi0JeyAweDA0NmQsIDB4YzI5NSwgZmZfam95c3RpY2sgfSwKLQl7IDB4MDQ2ZCwgMHhjYTAzLCBmZl9qb3lzdGljayB9LAotfTsKLQotc3RhdGljIGludCBoaWRfbGdmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQotewotCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OwotCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7Ci0JaW50IHgsIHk7Ci0JdW5zaWduZWQgaW50IGxlZnQsIHJpZ2h0OwotCi0jZGVmaW5lIENMQU1QKHgpIGlmICh4IDwgMCkgeCA9IDA7IGlmICh4ID4gMHhmZikgeCA9IDB4ZmYKLQotCXN3aXRjaCAoZWZmZWN0LT50eXBlKSB7Ci0JY2FzZSBGRl9DT05TVEFOVDoKLQkJeCA9IGVmZmVjdC0+dS5yYW1wLnN0YXJ0X2xldmVsICsgMHg3ZjsJLyogMHg3ZiBpcyBjZW50ZXIgKi8KLQkJeSA9IGVmZmVjdC0+dS5yYW1wLmVuZF9sZXZlbCArIDB4N2Y7Ci0JCUNMQU1QKHgpOwotCQlDTEFNUCh5KTsKLQkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweDUxOwotCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4MDg7Ci0JCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0geDsKLQkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbM10gPSB5OwotCQlkYmdfaGlkKCIoeCwgeSk9KCUwNHgsICUwNHgpXG4iLCB4LCB5KTsKLQkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfT1VUKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZGX1JVTUJMRToKLQkJcmlnaHQgPSBlZmZlY3QtPnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGU7Ci0JCWxlZnQgPSBlZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlOwotCQlyaWdodCA9IHJpZ2h0ICogMHhmZiAvIDB4ZmZmZjsKLQkJbGVmdCA9IGxlZnQgKiAweGZmIC8gMHhmZmZmOwotCQlDTEFNUChsZWZ0KTsKLQkJQ0xBTVAocmlnaHQpOwotCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4NDI7Ci0JCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKLQkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSBsZWZ0OwotCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IHJpZ2h0OwotCQlkYmdfaGlkKCIobGVmdCwgcmlnaHQpPSglMDR4LCAlMDR4KVxuIiwgbGVmdCwgcmlnaHQpOwotCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBoaWRfbGdmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpCi17Ci0Jc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhpZC0+aW5wdXRzLm5leHQsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOwotCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OwotCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhpZGlucHV0LT5pbnB1dDsKLQlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwotCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOwotCWNvbnN0IHNpZ25lZCBzaG9ydCAqZmZfYml0cyA9IGZmX2pveXN0aWNrOwotCWludCBlcnJvcjsKLQlpbnQgaTsKLQotCS8qIEZpbmQgdGhlIHJlcG9ydCB0byB1c2UgKi8KLQlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKLQkJZXJyX2hpZCgiTm8gb3V0cHV0IHJlcG9ydCBmb3VuZCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogQ2hlY2sgdGhhdCB0aGUgcmVwb3J0IGxvb2tzIG9rICovCi0JcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfbGlzdC0+bmV4dCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOwotCWlmICghcmVwb3J0KSB7Ci0JCWVycl9oaWQoIk5VTEwgb3V0cHV0IHJlcG9ydCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZmllbGQgPSByZXBvcnQtPmZpZWxkWzBdOwotCWlmICghZmllbGQpIHsKLQkJZXJyX2hpZCgiTlVMTCBmaWVsZCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2aWNlcyk7IGkrKykgewotCQlpZiAoZGV2LT5pZC52ZW5kb3IgPT0gZGV2aWNlc1tpXS5pZFZlbmRvciAmJgotCQkgICAgZGV2LT5pZC5wcm9kdWN0ID09IGRldmljZXNbaV0uaWRQcm9kdWN0KSB7Ci0JCQlmZl9iaXRzID0gZGV2aWNlc1tpXS5mZjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgZmZfYml0c1tpXSA+PSAwOyBpKyspCi0JCXNldF9iaXQoZmZfYml0c1tpXSwgZGV2LT5mZmJpdCk7Ci0KLQllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGRldiwgTlVMTCwgaGlkX2xnZmZfcGxheSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJGb3JjZSBmZWVkYmFjayBmb3IgTG9naXRlY2ggZm9yY2UgZmVlZGJhY2sgZGV2aWNlcyBieSBKb2hhbm4gRGVuZXV4IDxqb2hhbm4uZGVuZXV4QGl0LnV1LnNlPlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcGlkZmYuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcGlkZmYuYwppbmRleCAwMTEzMjYxLi40ODRlM2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXBpZGZmLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1waWRmZi5jCkBAIC0zOTcsNyArMzk3LDYgQEAKIAkJCSAgZWZmZWN0LT51LmNvbmRpdGlvbltpXS5sZWZ0X3NhdHVyYXRpb24pOwogCQlwaWRmZl9zZXQoJnBpZGZmLT5zZXRfY29uZGl0aW9uW1BJRF9ERUFEX0JBTkRdLAogCQkJICBlZmZlY3QtPnUuY29uZGl0aW9uW2ldLmRlYWRiYW5kKTsKLQkJdXNiaGlkX3dhaXRfaW8ocGlkZmYtPmhpZCk7CiAJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9TRVRfQ09ORElUSU9OXSwKIAkJCQkgIFVTQl9ESVJfT1VUKTsKIAl9CkBAIC01MTIsNyArNTExLDYgQEAKIAkJcGlkZmYtPmVmZmVjdF9vcGVyYXRpb25bUElEX0xPT1BfQ09VTlRdLnZhbHVlWzBdID0gbjsKIAl9CiAKLQl1c2JoaWRfd2FpdF9pbyhwaWRmZi0+aGlkKTsKIAl1c2JoaWRfc3VibWl0X3JlcG9ydChwaWRmZi0+aGlkLCBwaWRmZi0+cmVwb3J0c1tQSURfRUZGRUNUX09QRVJBVElPTl0sCiAJCQkgIFVTQl9ESVJfT1VUKTsKIH0KQEAgLTU0OCw2ICs1NDYsOSBAQAogCWludCBwaWRfaWQgPSBwaWRmZi0+cGlkX2lkW2VmZmVjdF9pZF07CiAKIAlkZWJ1Zygic3RhcnRpbmcgdG8gZXJhc2UgJWQvJWQiLCBlZmZlY3RfaWQsIHBpZGZmLT5waWRfaWRbZWZmZWN0X2lkXSk7CisJLyogV2FpdCBmb3IgdGhlIHF1ZXVlIHRvIGNsZWFyLiBXZSBkbyBub3Qgd2FudCBhIGZ1bGwgZmlmbyB0bworCSAgIHByZXZlbnQgdGhlIGVmZmVjdCByZW1vdmFsLiAqLworCXVzYmhpZF93YWl0X2lvKHBpZGZmLT5oaWQpOwogCXBpZGZmX3BsYXliYWNrX3BpZChwaWRmZiwgcGlkX2lkLCAwKTsKIAlwaWRmZl9lcmFzZV9waWQocGlkZmYsIHBpZF9pZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcGxmZi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1wbGZmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjgzY2YuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1wbGZmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqICBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBQYW50aGVyTG9yZC9HcmVlbkFzaWEgYmFzZWQgZGV2aWNlcwotICoKLSAqICBUaGUgZGV2aWNlcyBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdmFyaW91cyBuYW1lcyBhbmQgdGhlIHNhbWUgVVNCIGRldmljZSBJRAotICogIGNhbiBiZSB1c2VkIGluIGJvdGggYWRhcHRlcnMgYW5kIGFjdHVhbCBnYW1lIGNvbnRyb2xsZXJzLgotICoKLSAqICAwODEwOjAwMDEgIlR3aW4gVVNCIEpveXN0aWNrIgotICogICAtIHRlc3RlZCB3aXRoIFBhbnRoZXJMb3JkIFVTQi9QUzIgMmluMSBBZGFwdGVyCi0gKiAgIC0gY29udGFpbnMgdHdvIHJlcG9ydHMsIG9uZSBmb3IgZWFjaCBwb3J0IChISURfUVVJUktfTVVMVElfSU5QVVQpCi0gKgotICogIDBlOGY6MDAwMyAiR3JlZW5Bc2lhIEluYy4gICAgVVNCIEpveXN0aWNrICAgICAiCi0gKiAgIC0gdGVzdGVkIHdpdGggS8O2bmcgR2FtaW5nIGdhbWVwYWQKLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA3IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPgotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLQotLyogI2RlZmluZSBERUJVRyAqLwotCi0jZGVmaW5lIGRlYnVnKGZvcm1hdCwgYXJnLi4uKSBwcl9kZWJ1ZygiaGlkLXBsZmY6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCi0KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgotI2luY2x1ZGUgInVzYmhpZC5oIgotCi1zdHJ1Y3QgcGxmZl9kZXZpY2UgewotCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Ci19OwotCi1zdGF0aWMgaW50IGhpZF9wbGZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAotCQkJIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKLXsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgcGxmZl9kZXZpY2UgKnBsZmYgPSBkYXRhOwotCWludCBsZWZ0LCByaWdodDsKLQotCWxlZnQgPSBlZmZlY3QtPnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGU7Ci0JcmlnaHQgPSBlZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlOwotCWRlYnVnKCJjYWxsZWQgd2l0aCAweCUwNHggMHglMDR4IiwgbGVmdCwgcmlnaHQpOwotCi0JbGVmdCA9IGxlZnQgKiAweDdmIC8gMHhmZmZmOwotCXJpZ2h0ID0gcmlnaHQgKiAweDdmIC8gMHhmZmZmOwotCi0JcGxmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSBsZWZ0OwotCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzNdID0gcmlnaHQ7Ci0JZGVidWcoInJ1bm5pbmcgd2l0aCAweCUwMnggMHglMDJ4IiwgbGVmdCwgcmlnaHQpOwotCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcGxmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGhpZF9wbGZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKLXsKLQlzdHJ1Y3QgcGxmZl9kZXZpY2UgKnBsZmY7Ci0Jc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKLQlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdCA9Ci0JCQkmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X3B0ciA9IHJlcG9ydF9saXN0OwotCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKLQlpbnQgZXJyb3I7Ci0KLQkvKiBUaGUgZGV2aWNlIGNvbnRhaW5zIG9uZSBvdXRwdXQgcmVwb3J0IHBlciBwaHlzaWNhbCBkZXZpY2UsIGFsbAotCSAgIGNvbnRhaW5pbmcgMSBmaWVsZCwgd2hpY2ggY29udGFpbnMgNCBmZjAwLjAwMDIgdXNhZ2VzIGFuZCA0IDE2Yml0Ci0JICAgYWJzb2x1dGUgdmFsdWVzLgotCi0JICAgVGhlIGlucHV0IHJlcG9ydHMgYWxzbyBjb250YWluIGEgZmllbGQgd2hpY2ggY29udGFpbnMKLQkgICA4IGZmMDAuMDAwMSB1c2FnZXMgYW5kIDggYm9vbGVhbiB2YWx1ZXMuIFRoZWlyIG1lYW5pbmcgaXMKLQkgICBjdXJyZW50bHkgdW5rbm93bi4gKi8KLQotCWlmIChsaXN0X2VtcHR5KHJlcG9ydF9saXN0KSkgewotCQlwcmludGsoS0VSTl9FUlIgImhpZC1wbGZmOiBubyBvdXRwdXQgcmVwb3J0cyBmb3VuZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoaGlkaW5wdXQsICZoaWQtPmlucHV0cywgbGlzdCkgewotCi0JCXJlcG9ydF9wdHIgPSByZXBvcnRfcHRyLT5uZXh0OwotCi0JCWlmIChyZXBvcnRfcHRyID09IHJlcG9ydF9saXN0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImhpZC1wbGZmOiByZXF1aXJlZCBvdXRwdXQgcmVwb3J0IGlzIG1pc3NpbmdcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQotCQlyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9wdHIsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKLQkJaWYgKHJlcG9ydC0+bWF4ZmllbGQgPCAxKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImhpZC1wbGZmOiBubyBmaWVsZHMgaW4gdGhlIHJlcG9ydFxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCi0JCWlmIChyZXBvcnQtPmZpZWxkWzBdLT5yZXBvcnRfY291bnQgPCA0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImhpZC1wbGZmOiBub3QgZW5vdWdoIHZhbHVlcyBpbiB0aGUgZmllbGRcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQotCQlwbGZmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBsZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGxmZikKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCWRldiA9IGhpZGlucHV0LT5pbnB1dDsKLQotCQlzZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7Ci0KLQkJZXJyb3IgPSBpbnB1dF9mZl9jcmVhdGVfbWVtbGVzcyhkZXYsIHBsZmYsIGhpZF9wbGZmX3BsYXkpOwotCQlpZiAoZXJyb3IpIHsKLQkJCWtmcmVlKHBsZmYpOwotCQkJcmV0dXJuIGVycm9yOwotCQl9Ci0KLQkJcGxmZi0+cmVwb3J0ID0gcmVwb3J0OwotCQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4MDA7Ci0JCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKLQkJcGxmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDAwOwotCQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IDB4MDA7Ci0JCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcGxmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiaGlkLXBsZmY6IEZvcmNlIGZlZWRiYWNrIGZvciBQYW50aGVyTG9yZC9HcmVlbkFzaWEgIgotCSAgICAgICAiZGV2aWNlcyBieSBBbnNzaSBIYW5udWxhIDxhbnNzaS5oYW5udWxhQGdtYWlsLmNvbT5cbiIpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwppbmRleCBiMTVmODgyLi40N2ViZTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKQEAgLTE3LDQxMiArMTcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaGlkLmg+CiAKLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BNFRFQ0gJCTB4MDlkYQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVCTB4MDAwNgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0E0VEVDSF9YNV8wMDVECTB4MDAwYQotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQUFTSElNQQkJMHgwNmQ2Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUFTSElNQV9HQU1FUEFECTB4MDAyNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FBU0hJTUFfUFJFREFUT1IJMHgwMDI2Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BQ0VDQUQJCTB4MDQ2MAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FDRUNBRF9GTEFJUgkweDAwMDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BQ0VDQURfMzAyCTB4MDAwOAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQURTX1RFQ0ggCQkweDA2ZTEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BRFNfVEVDSF9SQURJT19TSTQ3MFgJMHhhMTU1Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BRkFURUNICQkweDE1YTQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BRkFURUNIX0FGOTAxNgkweDkwMTYKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0FJUFRFSwkJMHgwOGNhCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzAxCQkweDAwMDEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMTAJCTB4MDAxMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18yMAkJMHgwMDIwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIxCQkweDAwMjEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMjIJCTB4MDAyMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18yMwkJMHgwMDIzCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzI0CQkweDAwMjQKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0FJUkNBQkxFCQkweDE2Q0EKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVJDQUJMRTEJCTB4MTUwMgotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQUxDT1IJCTB4MDU4ZgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FMQ09SX1VTQlJTMjMyCTB4OTcyMAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQUxQUwkJMHgwNDMzCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfSUJNX0dBTUVQQUQJMHgxMTAxCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BUFBMRQkJMHgwNWFjCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUlHSFRZTU9VU0UJMHgwMzA0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fQU5TSQkweDAyMGUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9JU08JMHgwMjBmCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSX0FOU0kJMHgwMjE0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSX0lTTwkweDAyMTUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfSklTCTB4MDIxNgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjNfQU5TSQkweDAyMTcKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0lTTwkweDAyMTgKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0pJUwkweDAyMTkKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0FOU0kJMHgwMjFhCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9JU08JMHgwMjFiCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMJMHgwMjFjCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0FOU0kJMHgwMjIwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0lTTwkweDAyMjEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSklTCTB4MDIyMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfQU5TSQkweDAyMjMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0lTTwkweDAyMjQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0pJUwkweDAyMjUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0FOU0kgICAgMHgwMjI5Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9IRl9JU08gICAgIDB4MDIyYQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfSklTICAgICAweDAyMmIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfQU5TSSAgMHgwMjJjCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTX0lTTyAgIDB4MDIyZAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19KSVMgICAweDAyMmUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9BTlNJCTB4MDIzMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkcyX0lTTwkweDAyMzEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9KSVMJMHgwMjMyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fVFBfT05MWQkweDAzMGEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIxX1RQX09OTFkJMHgwMzBiCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfSVJDT05UUk9MNAkweDgyNDIKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0FTVVMJCTB4MGIwNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FTVVNfTENNCQkweDE3MjYKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0FURU4JCTB4MDU1NwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fVUMxMDBLTQkweDIwMDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOX0NTMTI0VQkweDIyMDIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOXzJQT1JUS1ZNCTB4MjIwNAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fNFBPUlRLVk0JMHgyMjA1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTUMJMHgyMjA4Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9CRUxLSU4gICAgICAgICAgIDB4MDUwZAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0ZMSVBfS1ZNICAgICAgICAgMHgzMjAxCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9CRVJLU0hJUkUJCTB4MGM5OAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0JFUktTSElSRV9QQ1dECTB4MTE0MAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQ0hFUlJZCQkweDA0NmEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSEVSUllfQ1lNT1RJT04JMHgwMDIzCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DSElDCQkweDA1ZmUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSElDX0dBTUVQQUQJMHgwMDE0Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DSURDCQkweDE2NzcKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0NNRURJQQkJMHgwZDhjCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ00xMDkJCTB4MDAwZQotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTCQkweDA3YzAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XX0ZJUlNUCTB4MTUwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1dfTEFTVAkweDE1ZmYKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0NZR05BTAkJMHgxMGM0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lHTkFMX1JBRElPX1NJNDcwWAkweDgxOGEKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0NZUFJFU1MJCTB4MDRiNAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfTU9VU0UJMHgwMDAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19ISURDT00JMHg1NTAwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19VTFRSQU1PVVNFCTB4NzQxNwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8xCTB4ZGU2MQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8yCTB4ZGU2NAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfREVMTAkJMHg0MTNjCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfREVMTF9XNzY1OAkweDIwMDUKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0RFTE9STUUJCTB4MTE2MwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0RFTE9STUVfRUFSVEhNQVRFIDB4MDEwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0RFTE9STUVfRU1fTFQyMAkweDAyMDAKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0RNSQkJMHgwYzBiCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfRE1JX0VOQwkJMHg1ZmFiCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FTE8JCTB4MDRFNwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0VMT19UUzI3MDAJMHgwMDIwCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FU1NFTlRJQUxfUkVBTElUWQkweDBkN2YKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9FU1NFTlRJQUxfUkVBTElUWV9QNSAweDAxMDAKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0VaS0VZIAkJMHgwNTE4Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQlRDXzgxOTMJCTB4MDAwMgotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfR0FNRVJPTgkJMHgwODEwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BTWF9BREFQVE9SCTB4MDAwMQotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfR0VORVJBTF9UT1VDSAkweDBkZmMKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0dMQUIJCTB4MDZjMgotI2RlZmluZSBVU0JfREVWSUNFX0lEXzRfUEhJREdFVFNFUlZPXzMwCTB4MDAzOAotI2RlZmluZSBVU0JfREVWSUNFX0lEXzFfUEhJREdFVFNFUlZPXzMwCTB4MDAzOQotI2RlZmluZSBVU0JfREVWSUNFX0lEXzBfMF80X0lGX0tJVAkweDAwNDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF8wXzE2XzE2X0lGX0tJVAkweDAwNDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF84XzhfOF9JRl9LSVQJMHgwMDQ1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfMF84XzdfSUZfS0lUCTB4MDA1MQotI2RlZmluZSBVU0JfREVWSUNFX0lEXzBfOF84X0lGX0tJVAkweDAwNTMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9QSElER0VUX01PVE9SQ09OVFJPTAkweDAwNTgKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0dPVE9QCQkweDA4ZjIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9TVVBFUl9RMgkJMHgwMDdmCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR09HT1BFTgkJMHgwMGNlCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfUEVOUE9XRVIJCTB4MDBmNAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfR1JFVEFHTUFDQkVUSAkweDA5NzEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HUkVUQUdNQUNCRVRIX0hVRVkJMHgyMDA1Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HUklGRklOCQkweDA3N2QKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9QT1dFUk1BVEUJCTB4MDQxMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ES05PQgkJMHgwNEFBCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HVENPCQkweDA3OGMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzkwCQkweDAwOTAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMAkJMHgwMTAwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDEJCTB4MDEwMQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAzCQkweDAxMDMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwNAkJMHgwMTA0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDUJCTB4MDEwNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTA2CQkweDAxMDYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwNwkJMHgwMTA3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDgJCTB4MDEwOAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMjAwCQkweDAyMDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwMQkJMHgwMjAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18yMDIJCTB4MDIwMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMjAzCQkweDAyMDMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwNAkJMHgwMjA0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18yMDUJCTB4MDIwNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMjA2CQkweDAyMDYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwNwkJMHgwMjA3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDAJCTB4MDMwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzAxCQkweDAzMDEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwMgkJMHgwMzAyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDMJCTB4MDMwMwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzA0CQkweDAzMDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwNQkJMHgwMzA1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDYJCTB4MDMwNgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzA3CQkweDAzMDcKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwOAkJMHgwMzA4Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDkJCTB4MDMwOQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNDAwCQkweDA0MDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzQwMQkJMHgwNDAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT180MDIJCTB4MDQwMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNDAzCQkweDA0MDMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzQwNAkJMHgwNDA0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT180MDUJCTB4MDQwNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNTAwCQkweDA1MDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzUwMQkJMHgwNTAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT181MDIJCTB4MDUwMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNTAzCQkweDA1MDMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzUwNAkJMHgwNTA0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAwCQkweDEwMDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDEJCTB4MTAwMQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwMgkJMHgxMDAyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAzCQkweDEwMDMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDQJCTB4MTAwNAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNQkJMHgxMDA1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA2CQkweDEwMDYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDcJCTB4MTAwNwotI2RlZmluZSBVU0JfVkVORE9SX0lEX0hBUFAJCTB4MDc4YgotI2RlZmluZSBVU0JfREVWSUNFX0lEX1VHQ0lfRFJJVklORwkweDAwMTAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9VR0NJX0ZMWUlORwkweDAwMjAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9VR0NJX0ZJR0hUSU5HCTB4MDAzMAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfSU1BVElPTgkJMHgwNzE4Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfRElTQ19TVEFLS0EJMHhkMDAwCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LQkdFQVIJCTB4MDg0ZQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0tCR0VBUl9KQU1TVFVESU8JMHgxMDAxCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9MRAkJMHgwZjExCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfQ0FTU1kJCTB4MTAwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1BPQ0tFVENBU1NZCTB4MTAxMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01PQklMRUNBU1NZCTB4MTAyMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX0pXTQkJMHgxMDgwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfRE1NUAkJMHgxMDgxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfVU1JUAkJMHgxMDkwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfWFJBWTEJCTB4MTEwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1hSQVkyCQkweDExMDEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9WSURFT0NPTQkweDEyMDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9DT00zTEFCCTB4MjAwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1RFTEVQT1JUCTB4MjAxMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX05FVFdPUktBTkFMWVNFUiAweDIwMjAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9QT1dFUkNPTlRST0wJMHgyMDMwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTUFDSElORVRFU1QJMHgyMDQwCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSAkJMHgwNDZkCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTFgzCTB4YzA0NAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1YxNTAJMHhjMDQ3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUkVDRUlWRVIJMHhjMTAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWSAgMHhjMTEwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yIDB4YzExMQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMyAweGMxMTIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQgMHhjMTEzCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81IDB4YzExNAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNiAweGMxMTUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzcgMHhjMTE2Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV84IDB4YzExNwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfOSAweGMxMTgKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzEwIDB4YzExOQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMTEgMHhjMTFhCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8xMiAweGMxMWIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzEzIDB4YzExYwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMTQgMHhjMTFkCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8xNSAweGMxMWUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzE2IDB4YzExZgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMTcgMHhjMTIwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8xOCAweGMxMjEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzE5IDB4YzEyMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjAgMHhjMTIzCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yMSAweGMxMjQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzIyIDB4YzEyNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjMgMHhjMTI2Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yNCAweGMxMjcKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzI1IDB4YzEyOAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjYgMHhjMTI5Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yNyAweGMxMmEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzI4IDB4YzEyYgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjkgMHhjMTJjCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zMCAweGMxMmQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzMxIDB4YzEyZQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMzIgMHhjMTJmCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zMyAweGMxMzAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzM0IDB4YzEzMQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMzUgMHhjMTMyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zNiAweGMxMzMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzM3IDB4YzEzNAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMzggMHhjMTM1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zOSAweGMxMzYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQwIDB4YzEzNwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNDEgMHhjMTM4Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV80MiAweGMxMzkKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQzIDB4YzEzYQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNDQgMHhjMTNiCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV80NSAweGMxM2MKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQ2IDB4YzEzZAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNDcgMHhjMTNlCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV80OCAweGMxM2YKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQ5IDB4YzE0MAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTAgMHhjMTQxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81MSAweGMxNDIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzUyIDB4YzE0MwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTMgMHhjMTQ0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81NCAweGMxNDUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzU1IDB4YzE0NgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTYgMHhjMTQ3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81NyAweGMxNDgKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzU4IDB4YzE0OQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTkgMHhjMTRhCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV82MCAweGMxNGIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzYxIDB4YzE0YwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNjIgMHhjMTRkCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV82MyAweGMxNGUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzY0IDB4YzE0ZgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0VYVFJFTUVfM0QJMHhjMjE1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0hFRUwJMHhjMjk0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRUxJVEVfS0JECTB4YzMwYQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0tCRAkweGMzMTEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSCTB4YzUwYwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1M1MTBfUkVDRUlWRVJfMgkweGM1MTcKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9DT1JETEVTU19ERVNLVE9QX0xYNTAwCTB4YzUxMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX01YMzAwMF9SRUNFSVZFUgkweGM1MTMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fREVTS1RPUAkweGM3MDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fRURHRQkweGM3MTQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fTUlOSQkweGM3MWYKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX01DQwkJMHgwOWRiCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUNDX1BNRDEwMjRMUwkweDAwNzYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQ0NfUE1EMTIwOExTCTB4MDA3YQotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfTUdFCQkweDA0NjMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9NR0VfVVBTCQkweGZmZmYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9NR0VfVVBTMQkJMHgwMDAxCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9NSUNST0NISVAJCTB4MDRkOAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1BJQ0tJVDEJCTB4MDAzMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX1BJQ0tJVDIJCTB4MDAzMwotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZUCQkweDA0NWUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9TSURFV0lOREVSX0dWCTB4MDAzYgotI2RlZmluZSBVU0JfREVWSUNFX0lEX1dJUkVMRVNTX09QVElDQUxfREVTS1RPUF8zXzAgMHgwMDlkCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfREVTS1RPUF9SRUNWXzEwMjggMHgwMGY5Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfTkU0SwkJMHgwMGRiCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfTEs2SwkJMHgwMGY5Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9NT05URVJFWQkJMHgwNTY2Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR0VOSVVTX0tCMjlFCTB4MzAwNAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfTkNSCQkweDA0MDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9OQ1JfRklSU1QJCTB4MDMwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX05DUl9MQVNUCQkweDAzZmYKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX05BVElPTkFMX1NFTUlDT05EVUNUT1IgMHgwNDAwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTl9TX0hBUk1PTlkgICAgICAgMHhjMzU5Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9OQVRTVSAgICAgICAgICAgICAweDA4YjcKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9OQVRTVV9HQU1FUEFEICAgICAweDAwMDEKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX05FQwkJMHgwNzNlCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTkVDX1VTQl9HQU1FX1BBRAkweDAzMDEKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX09OVFJBSwkJMHgwYTA3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMAkweDAwNjQKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1BBTkpJVAkJMHgxMzRjCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QQU5USEVSTE9SRAkweDA4MTAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9QQU5USEVSTE9SRF9UV0lOX1VTQl9KT1lTVElDSwkweDAwMDEKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1BFVEFMWU5YCQkweDE4YjEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9QRVRBTFlOWF9NQVhURVJfUkVNT1RFCTB4MDAzNwotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfUExBWURPVENPTQkweDBiNDMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9QTEFZRE9UQ09NX0VNU19VU0JJSQkweDAwMDMKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1NBSVRFSwkJMHgwNmEzCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfU0FJVEVLX1JVTUJMRVBBRAkweGZmMTcKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1NBTVNVTkcJCTB4MDQxOQotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NBTVNVTkdfSVJfUkVNT1RFCTB4MDAwMQotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfU09OWQkJCTB4MDU0YwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPTllfUFMzX0NPTlRST0xMRVIJMHgwMjY4Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TT1VOREdSQVBICTB4MTVjMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0QJMHgwMDM4Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TVU4JCTB4MDQzMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1JBUklUQU5fS1ZNX0RPTkdMRQkweGNkYWIKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1NVTlBMVVMJCTB4MDRmYwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NVTlBMVVNfV0RFU0tUT1AJMHgwNWQ4Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UT1BNQVgJCTB4MDY2MwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1RPUE1BWF9DT0JSQVBBRAkweDAxMDMKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1RVUkJPWAkJMHgwNjJhCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVFVSQk9YX0tFWUJPQVJECTB4MDIwMQotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfVkVSTklFUgkJMHgwOGY3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9MQUJQUk8JMHgwMDAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9HT1RFTVAJMHgwMDAyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9TS0lQCTB4MDAwMwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfQ1lDTE9QUwkweDAwMDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0xDU1BFQwkweDAwMDYKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1dBQ09NCQkweDA1NmEKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUAkJMHgwOTI1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMjAJMHg4MTAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMjAJMHg4MTA0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfOF84XzRfSUZfS0lUCTB4ODIwMQotI2RlZmluZSBVU0JfREVWSUNFX0lEX1FVQURfVVNCX0pPWVBBRAkweDg4MDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9EVUFMX1VTQl9KT1lQQUQJMHg4ODY2Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVBfTFRECTB4NjY3NwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NNQVJUSk9ZX0RVQUxfUExVUyAweDg4MDIKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1lFQUxJTksJCTB4Njk5MwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1lFQUxJTktfUDFLX1A0S19CMksJMHhiMDAxCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LWUUJCTB4MDQ1OAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0tZRV9HUEVOXzU2MAkweDUwMDMKKyNpbmNsdWRlICIuLi9oaWQtaWRzLmgiCiAKIC8qCiAgKiBBbHBoYWJldGljYWxseSBzb3J0ZWQgYmxhY2tsaXN0IGJ5IHF1aXJrIHR5cGUuCkBAIC00MzMsMTggKzI4LDEwIEBACiAJX191MTYgaWRQcm9kdWN0OwogCV9fdTMyIHF1aXJrczsKIH0gaGlkX2JsYWNrbGlzdFtdID0gewotCi0JeyBVU0JfVkVORE9SX0lEX0E0VEVDSCwgVVNCX0RFVklDRV9JRF9BNFRFQ0hfV0NQMzJQVSwgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcgfSwKLQl7IFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9YNV8wMDVELCBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfQjggfSwKLQl7IFVTQl9WRU5ET1JfSURfQ1lQUkVTUywgVVNCX0RFVklDRV9JRF9DWVBSRVNTX01PVVNFLCBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfNSB9LAotCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JFQ0VJVkVSLCBISURfUVVJUktfQkFEX1JFTEFUSVZFX0tFWVMgfSwKLQogCXsgVVNCX1ZFTkRPUl9JRF9BQVNISU1BLCBVU0JfREVWSUNFX0lEX0FBU0hJTUFfR0FNRVBBRCwgSElEX1FVSVJLX0JBRFBBRCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9BQVNISU1BLCBVU0JfREVWSUNFX0lEX0FBU0hJTUFfUFJFREFUT1IsIEhJRF9RVUlSS19CQURQQUQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQUxQUywgVVNCX0RFVklDRV9JRF9JQk1fR0FNRVBBRCwgSElEX1FVSVJLX0JBRFBBRCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9DSElDLCBVU0JfREVWSUNFX0lEX0NISUNfR0FNRVBBRCwgSElEX1FVSVJLX0JBRFBBRCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HQU1FUk9OLCBVU0JfREVWSUNFX0lEX0dBTUVST05fRFVBTF9QU1hfQURBUFRPUiwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0hBUFAsIFVTQl9ERVZJQ0VfSURfVUdDSV9EUklWSU5HLCBISURfUVVJUktfQkFEUEFEIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0hBUFAsIFVTQl9ERVZJQ0VfSURfVUdDSV9GTFlJTkcsIEhJRF9RVUlSS19CQURQQUQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfSEFQUCwgVVNCX0RFVklDRV9JRF9VR0NJX0ZJR0hUSU5HLCBISURfUVVJUktfQkFEUEFEIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCkBAIC00NTMsMTY5ICs0MCwxMSBAQAogCXsgVVNCX1ZFTkRPUl9JRF9TQUlURUssIFVTQl9ERVZJQ0VfSURfU0FJVEVLX1JVTUJMRVBBRCwgSElEX1FVSVJLX0JBRFBBRCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9UT1BNQVgsIFVTQl9ERVZJQ0VfSURfVE9QTUFYX0NPQlJBUEFELCBISURfUVVJUktfQkFEUEFEIH0sCiAKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfRElOT1ZPX0RFU0tUT1AsIEhJRF9RVUlSS19EVVBMSUNBVEVfVVNBR0VTIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0RJTk9WT19FREdFLCBISURfUVVJUktfRFVQTElDQVRFX1VTQUdFUyB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9ESU5PVk9fTUlOSSwgSElEX1FVSVJLX0RVUExJQ0FURV9VU0FHRVMgfSwKLQogCXsgVVNCX1ZFTkRPUl9JRF9BRkFURUNILCBVU0JfREVWSUNFX0lEX0FGQVRFQ0hfQUY5MDE2LCBISURfUVVJUktfRlVMTFNQRUVEX0lOVEVSVkFMIH0sCiAKLQl7IFVTQl9WRU5ET1JfSURfQkVMS0lOLCBVU0JfREVWSUNFX0lEX0ZMSVBfS1ZNLCBISURfUVVJUktfSElEREVWIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0lSQ09OVFJPTDQsIEhJRF9RVUlSS19ISURERVYgfCBISURfUVVJUktfSUdOT1JFX0hJRElOUFVUIH0sCi0JeyBVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUsIEhJRF9RVUlSS19ISURERVYgfCBISURfUVVJUktfSUdOT1JFX0hJRElOUFVUIH0sCi0JeyBVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9TSURFV0lOREVSX0dWLCBISURfUVVJUktfSElESU5QVVQgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9FWktFWSwgVVNCX0RFVklDRV9JRF9CVENfODE5MywgSElEX1FVSVJLX0hXSEVFTF9XSEVFTF9JTlZFUlQgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9BRFNfVEVDSCwgVVNCX0RFVklDRV9JRF9BRFNfVEVDSF9SQURJT19TSTQ3MFgsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18wMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzEwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjAsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18yMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18yNCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BSVJDQUJMRSwgVVNCX0RFVklDRV9JRF9BSVJDQUJMRTEsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQUxDT1IsIFVTQl9ERVZJQ0VfSURfQUxDT1JfVVNCUlMyMzIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQVNVUywgVVNCX0RFVklDRV9JRF9BU1VTX0xDTSwgSElEX1FVSVJLX0lHTk9SRX0sCi0JeyBVU0JfVkVORE9SX0lEX0JFUktTSElSRSwgVVNCX0RFVklDRV9JRF9CRVJLU0hJUkVfUENXRCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9DSURDLCAweDAxMDMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQ1lHTkFMLCBVU0JfREVWSUNFX0lEX0NZR05BTF9SQURJT19TSTQ3MFgsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQ01FRElBLCBVU0JfREVWSUNFX0lEX0NNMTA5LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19ISURDT00sIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQ1lQUkVTUywgVVNCX0RFVklDRV9JRF9DWVBSRVNTX1VMVFJBTU9VU0UsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfREVMT1JNRSwgVVNCX0RFVklDRV9JRF9ERUxPUk1FX0VBUlRITUFURSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9ERUxPUk1FLCBVU0JfREVWSUNFX0lEX0RFTE9STUVfRU1fTFQyMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9FU1NFTlRJQUxfUkVBTElUWSwgVVNCX0RFVklDRV9JRF9FU1NFTlRJQUxfUkVBTElUWV9QNSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILCAweDAwMDEsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR0VORVJBTF9UT1VDSCwgMHgwMDAyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dFTkVSQUxfVE9VQ0gsIDB4MDAwMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILCAweDAwMDQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF80X1BISURHRVRTRVJWT18zMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEXzFfUEhJREdFVFNFUlZPXzMwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF8wXzRfSUZfS0lULCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF8xNl8xNl9JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF84XzhfOF9JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF8wXzhfN19JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF8wXzhfOF9JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9QSElER0VUX01PVE9SQ09OVFJPTCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HT1RPUCwgVVNCX0RFVklDRV9JRF9TVVBFUl9RMiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HT1RPUCwgVVNCX0RFVklDRV9JRF9HT0dPUEVOLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dPVE9QLCBVU0JfREVWSUNFX0lEX1BFTlBPV0VSLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dSRVRBR01BQ0JFVEgsIFVTQl9ERVZJQ0VfSURfR1JFVEFHTUFDQkVUSF9IVUVZLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dSSUZGSU4sIFVTQl9ERVZJQ0VfSURfUE9XRVJNQVRFLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dSSUZGSU4sIFVTQl9ERVZJQ0VfSURfU09VTkRLTk9CLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT185MCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTAwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDEsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzEwMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTA0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDUsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzEwNiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTA3LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDgsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzIwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMjAxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzIwMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMjA0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDUsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzIwNiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMjA3LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDAsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzMwMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMzAyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzMwNCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMzA1LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDYsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzMwNywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMzA4LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzQwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fNDAxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzQwMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fNDA0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDUsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzUwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fNTAxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT181MDIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzUwMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fNTA0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAzLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA1LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA2LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA3LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0lNQVRJT04sIFVTQl9ERVZJQ0VfSURfRElTQ19TVEFLS0EsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfS0JHRUFSLCBVU0JfREVWSUNFX0lEX0tCR0VBUl9KQU1TVFVESU8sIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfQ0FTU1ksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfUE9DS0VUQ0FTU1ksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTU9CSUxFQ0FTU1ksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfSldNLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0RNTVAsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfVU1JUCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9YUkFZMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9YUkFZMiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9WSURFT0NPTSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9DT00zTEFCLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1RFTEVQT1JULCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX05FVFdPUktBTkFMWVNFUiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9QT1dFUkNPTlRST0wsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTUFDSElORVRFU1QsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTUNDLCBVU0JfREVWSUNFX0lEX01DQ19QTUQxMDI0TFMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTUNDLCBVU0JfREVWSUNFX0lEX01DQ19QTUQxMjA4TFMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTUdFLCBVU0JfREVWSUNFX0lEX01HRV9VUFMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTUdFLCBVU0JfREVWSUNFX0lEX01HRV9VUFMxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgMjAsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfT05UUkFLLCBVU0JfREVWSUNFX0lEX09OVFJBS19BRFUxMDAgKyAzMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDEwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDEwOCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDExOCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDIwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDMwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDQwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDUwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwNCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9TT1VOREdSQVBILCBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0QsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0xBQlBSTywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfR09URU1QLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9TS0lQLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9DWUNMT1BTLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9MQ1NQRUMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEXzRfUEhJREdFVFNFUlZPXzIwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF8xX1BISURHRVRTRVJWT18yMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfOF84XzRfSUZfS0lULCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1lFQUxJTkssIFVTQl9ERVZJQ0VfSURfWUVBTElOS19QMUtfUDRLX0IySywgSElEX1FVSVJLX0lHTk9SRSB9LAotCi0JeyBVU0JfVkVORE9SX0lEX0FDRUNBRCwgVVNCX0RFVklDRV9JRF9BQ0VDQURfRkxBSVIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQUNFQ0FELCBVU0JfREVWSUNFX0lEX0FDRUNBRF8zMDIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9NSUNST0NISVAsIFVTQl9ERVZJQ0VfSURfUElDS0lUMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9NSUNST0NISVAsIFVTQl9ERVZJQ0VfSURfUElDS0lUMiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0VMSVRFX0tCRCwgSElEX1FVSVJLX0xPR0lURUNIX0lHTk9SRV9ET1VCTEVEX1dIRUVMIHwgSElEX1FVSVJLX0xPR0lURUNIX0VYUEFOREVEX0tFWU1BUCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9DT1JETEVTU19ERVNLVE9QX0xYNTAwLCBISURfUVVJUktfTE9HSVRFQ0hfSUdOT1JFX0RPVUJMRURfV0hFRUwgfCBISURfUVVJUktfTE9HSVRFQ0hfRVhQQU5ERURfS0VZTUFQIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0xYMywgSElEX1FVSVJLX0lOVkVSVF9IV0hFRUwgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfVjE1MCwgSElEX1FVSVJLX0lOVkVSVF9IV0hFRUwgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfTkU0SywgSElEX1FVSVJLX01JQ1JPU09GVF9LRVlTIH0sCi0JeyBVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19MSzZLLCBISURfUVVJUktfTUlDUk9TT0ZUX0tFWVMgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9NSUdIVFlNT1VTRSwgSElEX1FVSVJLX01JR0hUWU1PVVNFIHwgSElEX1FVSVJLX0lOVkVSVF9IV0hFRUwgfSwKLQogCXsgVVNCX1ZFTkRPUl9JRF9QQU5USEVSTE9SRCwgVVNCX0RFVklDRV9JRF9QQU5USEVSTE9SRF9UV0lOX1VTQl9KT1lTVElDSywgSElEX1FVSVJLX01VTFRJX0lOUFVUIHwgSElEX1FVSVJLX1NLSVBfT1VUUFVUX1JFUE9SVFMgfSwKIAl7IFVTQl9WRU5ET1JfSURfUExBWURPVENPTSwgVVNCX0RFVklDRV9JRF9QTEFZRE9UQ09NX0VNU19VU0JJSSwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAKLQl7IFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSLCBISURfUVVJUktfU09OWV9QUzNfQ09OVFJPTExFUiB8IEhJRF9RVUlSS19ISURERVYgfSwKLQogCXsgVVNCX1ZFTkRPUl9JRF9BVEVOLCBVU0JfREVWSUNFX0lEX0FURU5fVUMxMDBLTSwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl9DUzEyNFUsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9BVEVOLCBVU0JfREVWSUNFX0lEX0FURU5fMlBPUlRLVk0sIEhJRF9RVUlSS19OT0dFVCB9LApAQCAtNjIzLDE0NCArNTIsMTMgQEAKIAl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOXzRQT1JUS1ZNQywgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0RNSSwgVVNCX0RFVklDRV9JRF9ETUlfRU5DLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfRUxPLCBVU0JfREVWSUNFX0lEX0VMT19UUzI3MDAsIEhJRF9RVUlSS19OT0dFVCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9FWFRSRU1FXzNELCBISURfUVVJUktfTk9HRVQgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0hFRUwsIEhJRF9RVUlSS19OT0dFVCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfV0lSRUxFU1NfT1BUSUNBTF9ERVNLVE9QXzNfMCwgSElEX1FVSVJLX05PR0VUIH0sCi0JeyBVU0JfVkVORE9SX0lEX1BFVEFMWU5YLCBVU0JfREVWSUNFX0lEX1BFVEFMWU5YX01BWFRFUl9SRU1PVEUsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9TVU4sIFVTQl9ERVZJQ0VfSURfUkFSSVRBTl9LVk1fRE9OR0xFLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfVFVSQk9YLCBVU0JfREVWSUNFX0lEX1RVUkJPWF9LRVlCT0FSRCwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF9EVUFMX1VTQl9KT1lQQUQsIEhJRF9RVUlSS19OT0dFVCB8IEhJRF9RVUlSS19NVUxUSV9JTlBVVCB8IEhJRF9RVUlSS19TS0lQX09VVFBVVF9SRVBPUlRTIH0sCiAJeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF9RVUFEX1VTQl9KT1lQQUQsIEhJRF9RVUlSS19OT0dFVCB8IEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCiAJeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUF9MVEQsIFVTQl9ERVZJQ0VfSURfU01BUlRKT1lfRFVBTF9QTFVTLCBISURfUVVJUktfTk9HRVQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9BTlNJLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9JU08sIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUl9BTlNJLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfSVNPLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB8IEhJRF9RVUlSS19BUFBMRV9JU09fS0VZQk9BUkR9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfSklTLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0FOU0ksIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjNfSVNPLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB8IEhJRF9RVUlSS19BUFBMRV9JU09fS0VZQk9BUkR9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0pJUywgSElEX1FVSVJLX0FQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19JR05PUkVfTU9VU0UgfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9BTlNJLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0lTTywgSElEX1FVSVJLX0FQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19JR05PUkVfTU9VU0UgfCBISURfUVVJUktfQVBQTEVfSVNPX0tFWUJPQVJEfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMsIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9BTlNJLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9JU08sIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfQVBQTEVfSVNPX0tFWUJPQVJEIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9KSVMsIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9IRl9BTlNJLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0lTTywgSElEX1FVSVJLX0FQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19JR05PUkVfTU9VU0UgfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9IRl9KSVMsIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19BTlNJLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19JU08sIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfQVBQTEVfSVNPX0tFWUJPQVJEIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19KSVMsIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklOR19BTlNJLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0lTTywgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19BUFBMRV9JU09fS0VZQk9BUkQgfCBISURfUVVJUktfSUdOT1JFX01PVVNFfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklOR19KSVMsIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzJfQU5TSSwgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19JR05PUkVfTU9VU0V9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9JU08sIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfQVBQTEVfSVNPX0tFWUJPQVJEIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9KSVMsIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9UUF9PTkxZLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIxX1RQX09OTFksIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCi0KLQl7IFVTQl9WRU5ET1JfSURfREVMTCwgVVNCX0RFVklDRV9JRF9ERUxMX1c3NjU4LCBISURfUVVJUktfUkVTRVRfTEVEUyB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9LQkQsIEhJRF9RVUlSS19SRVNFVF9MRURTIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTlksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzcsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV84LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfOSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzEwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMTEsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8xMiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzEzLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMTQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8xNSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzE2LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMTcsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8xOCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzE5LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjAsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzIyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yNCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzI1LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjYsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yNywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzI4LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzMxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMzIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzM0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMzUsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zNiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzM3LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMzgsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zOSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNDEsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV80MiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQzLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNDQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV80NSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQ2LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNDcsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV80OCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQ5LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTAsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81MSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzUyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81NCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzU1LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTYsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81NywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzU4LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV82MCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzYxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNjIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV82MywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzY0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX05BVElPTkFMX1NFTUlDT05EVUNUT1IsIFVTQl9ERVZJQ0VfSURfTl9TX0hBUk1PTlksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfS1lFLCBVU0JfREVWSUNFX0lEX0tZRV9HUEVOXzU2MCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCi0JeyAwLCAwIH0KLX07Ci0KLS8qIFF1aXJrcyBmb3IgZGV2aWNlcyB3aGljaCByZXF1aXJlIHJlcG9ydCBkZXNjcmlwdG9yIGZpeHVwIGdvIGhlcmUgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX3JkZXNjX2JsYWNrbGlzdCB7Ci0JX191MTYgaWRWZW5kb3I7Ci0JX191MTYgaWRQcm9kdWN0OwotCV9fdTMyIHF1aXJrczsKLX0gaGlkX3JkZXNjX2JsYWNrbGlzdFtdID0gewotCi0JeyBVU0JfVkVORE9SX0lEX0NIRVJSWSwgVVNCX0RFVklDRV9JRF9DSEVSUllfQ1lNT1RJT04sIEhJRF9RVUlSS19SREVTQ19DWU1PVElPTiB9LAotCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX01YMzAwMF9SRUNFSVZFUiwgSElEX1FVSVJLX1JERVNDX0xPR0lURUNIIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX1M1MTBfUkVDRUlWRVIsIEhJRF9RVUlSS19SREVTQ19MT0dJVEVDSCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSXzIsIEhJRF9RVUlSS19SREVTQ19MT0dJVEVDSCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfREVTS1RPUF9SRUNWXzEwMjgsIEhJRF9RVUlSS19SREVTQ19NSUNST1NPRlRfUkVDVl8xMDI4IH0sCi0KLQl7IFVTQl9WRU5ET1JfSURfTU9OVEVSRVksIFVTQl9ERVZJQ0VfSURfR0VOSVVTX0tCMjlFLCBISURfUVVJUktfUkRFU0NfQlVUVE9OX0NPTlNVTUVSIH0sCi0KLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMsIEhJRF9RVUlSS19SREVTQ19NQUNCT09LX0pJUyB9LAotCi0JeyBVU0JfVkVORE9SX0lEX1BFVEFMWU5YLCBVU0JfREVWSUNFX0lEX1BFVEFMWU5YX01BWFRFUl9SRU1PVEUsIEhJRF9RVUlSS19SREVTQ19QRVRBTFlOWCB9LAotCi0JeyBVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUsIEhJRF9RVUlSS19SREVTQ19TQU1TVU5HX1JFTU9URSB9LAotCi0JeyBVU0JfVkVORE9SX0lEX1NVTlBMVVMsIFVTQl9ERVZJQ0VfSURfU1VOUExVU19XREVTS1RPUCwgSElEX1FVSVJLX1JERVNDX1NVTlBMVVNfV0RFU0tUT1AgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8xLCBISURfUVVJUktfUkRFU0NfU1dBUFBFRF9NSU5fTUFYIH0sCi0JeyBVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzIsIEhJRF9RVUlSS19SREVTQ19TV0FQUEVEX01JTl9NQVggfSwKKwl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQX0xURDIsIFVTQl9ERVZJQ0VfSURfU01BUlRKT1lfRFVBTF9QTFVTLCBISURfUVVJUktfTk9HRVQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAogCXsgMCwgMCB9CiB9OwpAQCAtOTc0LDE2ICsyNzIsNiBAQAogCXUzMiBxdWlya3MgPSAwOwogCWNvbnN0IHN0cnVjdCBoaWRfYmxhY2tsaXN0ICpibF9lbnRyeSA9IE5VTEw7CiAKLQkvKiBJZ25vcmUgYWxsIFdhY29tIGRldmljZXMgKi8KLQlpZiAoaWRWZW5kb3IgPT0gVVNCX1ZFTkRPUl9JRF9XQUNPTSkKLQkJcmV0dXJuIEhJRF9RVUlSS19JR05PUkU7Ci0KLQkvKiBpZ25vcmUgYWxsIENvZGUgTWVyY2VuYXJpZXMgSU9XYXJyaW9yIGRldmljZXMgKi8KLQlpZiAoaWRWZW5kb3IgPT0gVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MpCi0JCWlmIChpZFByb2R1Y3QgPj0gVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XX0ZJUlNUICYmCi0JCQkJaWRQcm9kdWN0IDw9IFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPV19MQVNUKQotCQkJcmV0dXJuIEhJRF9RVUlSS19JR05PUkU7Ci0KIAkvKiBOQ1IgZGV2aWNlcyBtdXN0IG5vdCBiZSBxdWVyaWVkIGZvciByZXBvcnRzICovCiAJaWYgKGlkVmVuZG9yID09IFVTQl9WRU5ET1JfSURfTkNSICYmCiAJCQlpZFByb2R1Y3QgPj0gVVNCX0RFVklDRV9JRF9OQ1JfRklSU1QgJiYKQEAgLTEwMDIsMjIxICsyOTAsMyBAQAogfQogCiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JoaWRfbG9va3VwX3F1aXJrKTsKLQotLyoKLSAqIENoZXJyeSBDeW1vdGlvbiBrZXlib2FyZCBoYXZlIGFuIGludmFsaWQgSElEIHJlcG9ydCBkZXNjcmlwdG9yLAotICogdGhhdCBuZWVkcyBmaXhpbmcgYmVmb3JlIHdlIGNhbiBwYXJzZSBpdC4KLSAqLwotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX2N5bW90aW9uX2Rlc2NyaXB0b3IoY2hhciAqcmRlc2MsIGludCByc2l6ZSkKLXsKLQlpZiAocnNpemUgPj0gMTcgJiYgcmRlc2NbMTFdID09IDB4M2MgJiYgcmRlc2NbMTJdID09IDB4MDIpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRml4aW5nIHVwIENoZXJyeSBDeW1vdGlvbiByZXBvcnQgZGVzY3JpcHRvclxuIik7Ci0JCXJkZXNjWzExXSA9IHJkZXNjWzE2XSA9IDB4ZmY7Ci0JCXJkZXNjWzEyXSA9IHJkZXNjWzE3XSA9IDB4MDM7Ci0JfQotfQotCi0KLS8qCi0gKiBDZXJ0YWluIExvZ2l0ZWNoIGtleWJvYXJkcyBzZW5kIGluIHJlcG9ydCAjMyBrZXlzIHdoaWNoIGFyZSBmYXIKLSAqIGFib3ZlIHRoZSBsb2dpY2FsIG1heGltdW0gZGVzY3JpYmVkIGluIGRlc2NyaXB0b3IuIFRoaXMgZXh0ZW5kcwotICogdGhlIG9yaWdpbmFsIHZhbHVlIG9mIDB4MjhjIG9mIGxvZ2ljYWwgbWF4aW11bSB0byAweDEwNGQKLSAqLwotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX2xvZ2l0ZWNoX2Rlc2NyaXB0b3IodW5zaWduZWQgY2hhciAqcmRlc2MsIGludCByc2l6ZSkKLXsKLQlpZiAocnNpemUgPj0gOTAgJiYgcmRlc2NbODNdID09IDB4MjYKLQkJCSYmIHJkZXNjWzg0XSA9PSAweDhjCi0JCQkmJiByZGVzY1s4NV0gPT0gMHgwMikgewotCQlwcmludGsoS0VSTl9JTkZPICJGaXhpbmcgdXAgTG9naXRlY2gga2V5Ym9hcmQgcmVwb3J0IGRlc2NyaXB0b3JcbiIpOwotCQlyZGVzY1s4NF0gPSByZGVzY1s4OV0gPSAweDRkOwotCQlyZGVzY1s4NV0gPSByZGVzY1s5MF0gPSAweDEwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX3N1bnBsdXNfd2Rlc2t0b3AodW5zaWduZWQgY2hhciAqcmRlc2MsIGludCByc2l6ZSkKLXsKLQlpZiAocnNpemUgPj0gMTA3ICYmIHJkZXNjWzEwNF0gPT0gMHgyNgotCQkJICYmIHJkZXNjWzEwNV0gPT0gMHg4MAotCQkJICYmIHJkZXNjWzEwNl0gPT0gMHgwMykgewotCQlwcmludGsoS0VSTl9JTkZPICJGaXhpbmcgdXAgU3VucGx1cyBXaXJlbGVzcyBEZXNrdG9wIHJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKLQkJcmRlc2NbMTA1XSA9IHJkZXNjWzExMF0gPSAweDAzOwotCQlyZGVzY1sxMDZdID0gcmRlc2NbMTExXSA9IDB4MjE7Ci0JfQotfQotCi0vKgotICogU2Ftc3VuZyBJckRBIHJlbW90ZSBjb250cm9sbGVyIChyZXBvcnRzIGFzIEN5cHJlc3MgVVNCIE1vdXNlKS4KLSAqCi0gKiBWZW5kb3Igc3BlY2lmaWMgcmVwb3J0ICM0IGhhcyBhIHNpemUgb2YgNDggYml0LAotICogYW5kIHRoZXJlZm9yZSBpcyBub3QgYWNjZXB0ZWQgd2hlbiBpbnNwZWN0aW5nIHRoZSBkZXNjcmlwdG9ycy4KLSAqIEFzIGEgd29ya2Fyb3VuZCB3ZSByZWludGVycHJldCB0aGUgcmVwb3J0IGFzOgotICogICBWYXJpYWJsZSB0eXBlLCBjb3VudCA2LCBzaXplIDggYml0LCBsb2cuIG1heGltdW0gMjU1Ci0gKiBUaGUgYnVyZGVuIHRvIHJlY29uc3RydWN0IHRoZSBkYXRhIGlzIG1vdmVkIGludG8gdXNlciBzcGFjZS4KLSAqLwotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX3NhbXN1bmdfaXJkYV9kZXNjcmlwdG9yKHVuc2lnbmVkIGNoYXIgKnJkZXNjLAotCQkJCQkJICBpbnQgcnNpemUpCi17Ci0JaWYgKHJzaXplID49IDE4MiAmJiByZGVzY1sxNzVdID09IDB4MjUKLQkJCSAmJiByZGVzY1sxNzZdID09IDB4NDAKLQkJCSAmJiByZGVzY1sxNzddID09IDB4NzUKLQkJCSAmJiByZGVzY1sxNzhdID09IDB4MzAKLQkJCSAmJiByZGVzY1sxNzldID09IDB4OTUKLQkJCSAmJiByZGVzY1sxODBdID09IDB4MDEKLQkJCSAmJiByZGVzY1sxODJdID09IDB4NDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRml4aW5nIHVwIFNhbXN1bmcgSXJEQSByZXBvcnQgZGVzY3JpcHRvclxuIik7Ci0JCXJkZXNjWzE3Nl0gPSAweGZmOwotCQlyZGVzY1sxNzhdID0gMHgwODsKLQkJcmRlc2NbMTgwXSA9IDB4MDY7Ci0JCXJkZXNjWzE4Ml0gPSAweDQyOwotCX0KLX0KLQotLyogUGV0YWx5bnggTWF4dGVyIFJlbW90ZSBoYXMgbWF4aW11bSBmb3IgY29uc3VtZXIgcGFnZSBzZXQgdG9vIGxvdyAqLwotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX3BldGFseW54X2Rlc2NyaXB0b3IodW5zaWduZWQgY2hhciAqcmRlc2MsIGludCByc2l6ZSkKLXsKLQlpZiAocnNpemUgPj0gNjAgJiYgcmRlc2NbMzldID09IDB4MmEKLQkJCSYmIHJkZXNjWzQwXSA9PSAweGY1Ci0JCQkmJiByZGVzY1s0MV0gPT0gMHgwMAotCQkJJiYgcmRlc2NbNTldID09IDB4MjYKLQkJCSYmIHJkZXNjWzYwXSA9PSAweGY5Ci0JCQkmJiByZGVzY1s2MV0gPT0gMHgwMCkgewotCQlwcmludGsoS0VSTl9JTkZPICJGaXhpbmcgdXAgUGV0YWx5bnggTWF4dGVyIFJlbW90ZSByZXBvcnQgZGVzY3JpcHRvclxuIik7Ci0JCXJkZXNjWzYwXSA9IDB4ZmE7Ci0JCXJkZXNjWzQwXSA9IDB4ZmE7Ci0JfQotfQotCi0vKgotICogU29tZSBVU0IgYmFyY29kZSByZWFkZXJzIGZyb20gY3lwcmVzcyBoYXZlIHVzYWdlIG1pbiBhbmQgdXNhZ2UgbWF4IGluCi0gKiB0aGUgd3Jvbmcgb3JkZXIKLSAqLwotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX2N5cHJlc3NfZGVzY3JpcHRvcih1bnNpZ25lZCBjaGFyICpyZGVzYywgaW50IHJzaXplKQotewotCXNob3J0IGZpeGVkID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCByc2l6ZSAtIDQ7IGkrKykgewotCQlpZiAocmRlc2NbaV0gPT0gMHgyOSAmJiByZGVzYyBbaSsyXSA9PSAweDE5KSB7Ci0JCQl1bnNpZ25lZCBjaGFyIHRtcDsKLQotCQkJcmRlc2NbaV0gPSAweDE5OyByZGVzY1tpKzJdID0gMHgyOTsKLQkJCXRtcCA9IHJkZXNjW2krM107Ci0JCQlyZGVzY1tpKzNdID0gcmRlc2NbaSsxXTsKLQkJCXJkZXNjW2krMV0gPSB0bXA7Ci0JCX0KLQl9Ci0KLQlpZiAoZml4ZWQpCi0JCXByaW50ayhLRVJOX0lORk8gIkZpeGluZyB1cCBDeXByZXNzIHJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKLX0KLQotLyoKLSAqIE1hY0Jvb2sgSklTIGtleWJvYXJkIGhhcyB3cm9uZyBsb2dpY2FsIG1heGltdW0KLSAqLwotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX21hY2Jvb2tfZGVzY3JpcHRvcih1bnNpZ25lZCBjaGFyICpyZGVzYywgaW50IHJzaXplKQotewotCWlmIChyc2l6ZSA+PSA2MCAmJiByZGVzY1s1M10gPT0gMHg2NQotCQkJJiYgcmRlc2NbNTldID09IDB4NjUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRml4aW5nIHVwIE1hY0Jvb2sgSklTIGtleWJvYXJkIHJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKLQkJcmRlc2NbNTNdID0gcmRlc2NbNTldID0gMHhlNzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHVzYmhpZF9maXh1cF9idXR0b25fY29uc3VtZXJfZGVzY3JpcHRvcih1bnNpZ25lZCBjaGFyICpyZGVzYywgaW50IHJzaXplKQotewotCWlmIChyc2l6ZSA+PSAzMCAmJiByZGVzY1syOV0gPT0gMHgwNQotCQkJJiYgcmRlc2NbMzBdID09IDB4MDkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRml4aW5nIHVwIGJ1dHRvbi9jb25zdW1lciBpbiBISUQgcmVwb3J0IGRlc2NyaXB0b3JcbiIpOwotCQlyZGVzY1szMF0gPSAweDBjOwotCX0KLX0KLQotLyoKLSAqIE1pY3Jvc29mdCBXaXJlbGVzcyBEZXNrdG9wIFJlY2VpdmVyIChNb2RlbCAxMDI4KSBoYXMgc2V2ZXJhbAotICogJ1VzYWdlIE1pbi9NYXgnIHdoZXJlIGl0IG91Z2h0IHRvIGhhdmUgJ1BoeXNpY2FsIE1pbi9NYXgnCi0gKi8KLXN0YXRpYyB2b2lkIHVzYmhpZF9maXh1cF9taWNyb3NvZnRfZGVzY3JpcHRvcih1bnNpZ25lZCBjaGFyICpyZGVzYywgaW50IHJzaXplKQotewotCWlmIChyc2l6ZSA9PSA1NzEgJiYgcmRlc2NbMjg0XSA9PSAweDE5Ci0JICAgICAgICAgICAgICAgICAmJiByZGVzY1syODZdID09IDB4MmEKLQkgICAgICAgICAgICAgICAgICYmIHJkZXNjWzMwNF0gPT0gMHgxOQotCSAgICAgICAgICAgICAgICAgJiYgcmRlc2NbMzA2XSA9PSAweDI5Ci0JICAgICAgICAgICAgICAgICAmJiByZGVzY1szNTJdID09IDB4MWEKLQkgICAgICAgICAgICAgICAgICYmIHJkZXNjWzM1NV0gPT0gMHgyYQotCQkJICYmIHJkZXNjWzU1N10gPT0gMHgxOQotCQkJICYmIHJkZXNjWzU1OV0gPT0gMHgyOSkgewotCQlwcmludGsoS0VSTl9JTkZPICJGaXhpbmcgdXAgTWljcm9zb2Z0IFdpcmVsZXNzIFJlY2VpdmVyIE1vZGVsIDEwMjggcmVwb3J0IGRlc2NyaXB0b3JcbiIpOwotCQlyZGVzY1syODRdID0gcmRlc2NbMzA0XSA9IHJkZXNjWzU1N10gPSAweDM1OwotCQlyZGVzY1szNTJdID0gMHgzNjsKLQkJcmRlc2NbMjg2XSA9IHJkZXNjWzM1NV0gPSAweDQ2OwotCQlyZGVzY1szMDZdID0gcmRlc2NbNTU5XSA9IDB4NDU7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX3VzYmhpZF9maXh1cF9yZXBvcnRfZGVzY3JpcHRvcihfX3UzMiBxdWlya3MsIGNoYXIgKnJkZXNjLCB1bnNpZ25lZCByc2l6ZSkKLXsKLQlpZiAoKHF1aXJrcyAmIEhJRF9RVUlSS19SREVTQ19DWU1PVElPTikpCi0JCXVzYmhpZF9maXh1cF9jeW1vdGlvbl9kZXNjcmlwdG9yKHJkZXNjLCByc2l6ZSk7Ci0KLQlpZiAocXVpcmtzICYgSElEX1FVSVJLX1JERVNDX0xPR0lURUNIKQotCQl1c2JoaWRfZml4dXBfbG9naXRlY2hfZGVzY3JpcHRvcihyZGVzYywgcnNpemUpOwotCi0JaWYgKHF1aXJrcyAmIEhJRF9RVUlSS19SREVTQ19TV0FQUEVEX01JTl9NQVgpCi0JCXVzYmhpZF9maXh1cF9jeXByZXNzX2Rlc2NyaXB0b3IocmRlc2MsIHJzaXplKTsKLQotCWlmIChxdWlya3MgJiBISURfUVVJUktfUkRFU0NfUEVUQUxZTlgpCi0JCXVzYmhpZF9maXh1cF9wZXRhbHlueF9kZXNjcmlwdG9yKHJkZXNjLCByc2l6ZSk7Ci0KLQlpZiAocXVpcmtzICYgSElEX1FVSVJLX1JERVNDX01BQ0JPT0tfSklTKQotCQl1c2JoaWRfZml4dXBfbWFjYm9va19kZXNjcmlwdG9yKHJkZXNjLCByc2l6ZSk7Ci0KLQlpZiAocXVpcmtzICYgSElEX1FVSVJLX1JERVNDX0JVVFRPTl9DT05TVU1FUikKLQkJdXNiaGlkX2ZpeHVwX2J1dHRvbl9jb25zdW1lcl9kZXNjcmlwdG9yKHJkZXNjLCByc2l6ZSk7Ci0KLQlpZiAocXVpcmtzICYgSElEX1FVSVJLX1JERVNDX1NBTVNVTkdfUkVNT1RFKQotCQl1c2JoaWRfZml4dXBfc2Ftc3VuZ19pcmRhX2Rlc2NyaXB0b3IocmRlc2MsIHJzaXplKTsKLQotCWlmIChxdWlya3MgJiBISURfUVVJUktfUkRFU0NfTUlDUk9TT0ZUX1JFQ1ZfMTAyOCkKLQkJdXNiaGlkX2ZpeHVwX21pY3Jvc29mdF9kZXNjcmlwdG9yKHJkZXNjLCByc2l6ZSk7Ci0KLQlpZiAocXVpcmtzICYgSElEX1FVSVJLX1JERVNDX1NVTlBMVVNfV0RFU0tUT1ApCi0JCXVzYmhpZF9maXh1cF9zdW5wbHVzX3dkZXNrdG9wKHJkZXNjLCByc2l6ZSk7Ci19Ci0KLS8qKgotICogdXNiaGlkX2ZpeHVwX3JlcG9ydF9kZXNjcmlwdG9yOiBjaGVjayBpZiByZXBvcnQgZGVzY3JpcHRvciBuZWVkcyBmaXh1cAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJV2Fsa3MgdGhlIGhpZF9yZGVzY19ibGFja2xpc3RbXSBhcnJheSBhbmQgY2hlY2tzIHdoZXRoZXIgdGhlIGRldmljZQotICoJaXMga25vd24gdG8gaGF2ZSBicm9rZW4gcmVwb3J0IGRlc2NyaXB0b3IgdGhhdCBuZWVkcyB0byBiZSBmaXhlZCB1cAotICoJcHJpb3IgdG8gZW50ZXJpbmcgdGhlIEhJRCBwYXJzZXIKLSAqCi0gKiBSZXR1cm5zOiBub3RoaW5nCi0gKi8KLXZvaWQgdXNiaGlkX2ZpeHVwX3JlcG9ydF9kZXNjcmlwdG9yKGNvbnN0IHUxNiBpZFZlbmRvciwgY29uc3QgdTE2IGlkUHJvZHVjdCwKLQkJCQkgICAgY2hhciAqcmRlc2MsIHVuc2lnbmVkIHJzaXplLCBjaGFyICoqcXVpcmtzX3BhcmFtKQotewotCWludCBuLCBtOwotCXUxNiBwYXJhbVZlbmRvciwgcGFyYW1Qcm9kdWN0OwotCXUzMiBxdWlya3M7Ci0KLQkvKiBzdGF0aWMgcmRlc2MgcXVpcmsgZW50cmllcyAqLwotCWZvciAobiA9IDA7IGhpZF9yZGVzY19ibGFja2xpc3Rbbl0uaWRWZW5kb3I7IG4rKykKLQkJaWYgKGhpZF9yZGVzY19ibGFja2xpc3Rbbl0uaWRWZW5kb3IgPT0gaWRWZW5kb3IgJiYKLQkJCQloaWRfcmRlc2NfYmxhY2tsaXN0W25dLmlkUHJvZHVjdCA9PSBpZFByb2R1Y3QpCi0JCQlfX3VzYmhpZF9maXh1cF9yZXBvcnRfZGVzY3JpcHRvcihoaWRfcmRlc2NfYmxhY2tsaXN0W25dLnF1aXJrcywKLQkJCQkJcmRlc2MsIHJzaXplKTsKLQotCS8qIHJ1bnRpbWUgcmRlc2MgcXVpcmsgZW50cmllcyBoYW5kbGluZyAqLwotCWZvciAobiA9IDA7IHF1aXJrc19wYXJhbVtuXSAmJiBuIDwgTUFYX1VTQkhJRF9CT09UX1FVSVJLUzsgbisrKSB7Ci0JCW0gPSBzc2NhbmYocXVpcmtzX3BhcmFtW25dLCAiMHglaHg6MHglaHg6MHgleCIsCi0JCQkJJnBhcmFtVmVuZG9yLCAmcGFyYW1Qcm9kdWN0LCAmcXVpcmtzKTsKLQotCQlpZiAobSAhPSAzKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJDb3VsZCBub3QgcGFyc2UgSElEIHF1aXJrIG1vZHVsZSBwYXJhbSAlc1xuIiwKLQkJCQlxdWlya3NfcGFyYW1bbl0pOwotCQllbHNlIGlmIChwYXJhbVZlbmRvciA9PSBpZFZlbmRvciAmJiBwYXJhbVByb2R1Y3QgPT0gaWRQcm9kdWN0KQotCQkJX191c2JoaWRfZml4dXBfcmVwb3J0X2Rlc2NyaXB0b3IocXVpcmtzLCByZGVzYywgcnNpemUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtdG1mZi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC10bWZmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NDU3OGIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC10bWZmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoKLSAqIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIHZhcmlvdXMgSElEIGNvbXBsaWFudCBkZXZpY2VzIGJ5IFRocnVzdE1hc3RlcjoKLSAqICAgIFRocnVzdE1hc3RlciBGaXJlU3Rvcm0gRHVhbCBQb3dlciAyCi0gKiBhbmQgcG9zc2libHkgb3RoZXJzIHdob3NlIGRldmljZSBpZHMgaGF2ZW4ndCBiZWVuIGFkZGVkLgotICoKLSAqICBNb2RpZmllZCB0byBzdXBwb3J0IFRocnVzdE1hc3RlciBkZXZpY2VzIGJ5IFppbnggVmVyaXR1c2UKLSAqICBvbiAyMDAzLTAxLTI1IGZyb20gdGhlIExvZ2l0ZWNoIGZvcmNlIGZlZWRiYWNrIGRyaXZlciwKLSAqICB3aGljaCBpcyBieSBKb2hhbm4gRGVuZXV4LgotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDMgWmlueCBWZXJpdHVzZSA8emlueEBlcGljc29sLm9yZz4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMDIgSm9oYW5uIERlbmV1eAotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotCi0jdW5kZWYgREVCVUcKLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgotI2luY2x1ZGUgInVzYmhpZC5oIgotCi0vKiBVc2FnZXMgZm9yIHRocnVzdG1hc3RlciBkZXZpY2VzIEkga25vdyBhYm91dCAqLwotI2RlZmluZSBUSFJVU1RNQVNURVJfVVNBR0VfRkYJKEhJRF9VUF9HRU5ERVNLIHwgMHhiYikKLQotc3RydWN0IGRldl90eXBlIHsKLQl1MTYgaWRWZW5kb3I7Ci0JdTE2IGlkUHJvZHVjdDsKLQljb25zdCBzaWduZWQgc2hvcnQgKmZmOwotfTsKLQotc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCBmZl9ydW1ibGVbXSA9IHsKLQlGRl9SVU1CTEUsCi0JLTEKLX07Ci0KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgZmZfam95c3RpY2tbXSA9IHsKLQlGRl9DT05TVEFOVCwKLQktMQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfdHlwZSBkZXZpY2VzW10gPSB7Ci0JeyAweDQ0ZiwgMHhiMzAwLCBmZl9ydW1ibGUgfSwKLQl7IDB4NDRmLCAweGIzMDQsIGZmX3J1bWJsZSB9LAotCXsgMHg0NGYsIDB4YjY1MSwgZmZfcnVtYmxlIH0sCS8qIEZHVCBSdW1ibGUgRm9yY2UgV2hlZWwgKi8KLQl7IDB4NDRmLCAweGI2NTQsIGZmX2pveXN0aWNrIH0sCS8qIEZHVCBGb3JjZSBGZWVkYmFjayBXaGVlbCAqLwotfTsKLQotc3RydWN0IHRtZmZfZGV2aWNlIHsKLQlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwotCXN0cnVjdCBoaWRfZmllbGQgKmZmX2ZpZWxkOwotfTsKLQotLyogQ2hhbmdlcyB2YWx1ZXMgZnJvbSAwIHRvIDB4ZmZmZiBpbnRvIHZhbHVlcyBmcm9tIG1pbmltdW0gdG8gbWF4aW11bSAqLwotc3RhdGljIGlubGluZSBpbnQgaGlkX3RtZmZfc2NhbGVfdTE2KHVuc2lnbmVkIGludCBpbiwKLQkJCQlpbnQgbWluaW11bSwgaW50IG1heGltdW0pCi17Ci0JaW50IHJldDsKLQotCXJldCA9IChpbiAqIChtYXhpbXVtIC0gbWluaW11bSkgLyAweGZmZmYpICsgbWluaW11bTsKLQlpZiAocmV0IDwgbWluaW11bSkKLQkJcmV0dXJuIG1pbmltdW07Ci0JaWYgKHJldCA+IG1heGltdW0pCi0JCXJldHVybiBtYXhpbXVtOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIENoYW5nZXMgdmFsdWVzIGZyb20gLTB4ODAgdG8gMHg3ZiBpbnRvIHZhbHVlcyBmcm9tIG1pbmltdW0gdG8gbWF4aW11bSAqLwotc3RhdGljIGlubGluZSBpbnQgaGlkX3RtZmZfc2NhbGVfczgoaW50IGluLAotCQkJCSAgICBpbnQgbWluaW11bSwgaW50IG1heGltdW0pCi17Ci0JaW50IHJldDsKLQotCXJldCA9ICgoKGluICsgMHg4MCkgKiAobWF4aW11bSAtIG1pbmltdW0pKSAvIDB4ZmYpICsgbWluaW11bTsKLQlpZiAocmV0IDwgbWluaW11bSkKLQkJcmV0dXJuIG1pbmltdW07Ci0JaWYgKHJldCA+IG1heGltdW0pCi0JCXJldHVybiBtYXhpbXVtOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaGlkX3RtZmZfcGxheShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKLXsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgdG1mZl9kZXZpY2UgKnRtZmYgPSBkYXRhOwotCXN0cnVjdCBoaWRfZmllbGQgKmZmX2ZpZWxkID0gdG1mZi0+ZmZfZmllbGQ7Ci0JaW50IHgsIHk7Ci0JaW50IGxlZnQsIHJpZ2h0OwkvKiBSdW1ibGluZyAqLwotCi0Jc3dpdGNoIChlZmZlY3QtPnR5cGUpIHsKLQljYXNlIEZGX0NPTlNUQU5UOgotCQl4ID0gaGlkX3RtZmZfc2NhbGVfczgoZWZmZWN0LT51LnJhbXAuc3RhcnRfbGV2ZWwsCi0JCQkJCWZmX2ZpZWxkLT5sb2dpY2FsX21pbmltdW0sCi0JCQkJCWZmX2ZpZWxkLT5sb2dpY2FsX21heGltdW0pOwotCQl5ID0gaGlkX3RtZmZfc2NhbGVfczgoZWZmZWN0LT51LnJhbXAuZW5kX2xldmVsLAotCQkJCQlmZl9maWVsZC0+bG9naWNhbF9taW5pbXVtLAotCQkJCQlmZl9maWVsZC0+bG9naWNhbF9tYXhpbXVtKTsKLQotCQlkYmdfaGlkKCIoeCwgeSk9KCUwNHgsICUwNHgpXG4iLCB4LCB5KTsKLQkJZmZfZmllbGQtPnZhbHVlWzBdID0geDsKLQkJZmZfZmllbGQtPnZhbHVlWzFdID0geTsKLQkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCB0bWZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZGX1JVTUJMRToKLQkJbGVmdCA9IGhpZF90bWZmX3NjYWxlX3UxNihlZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlLAotCQkJCQlmZl9maWVsZC0+bG9naWNhbF9taW5pbXVtLAotCQkJCQlmZl9maWVsZC0+bG9naWNhbF9tYXhpbXVtKTsKLQkJcmlnaHQgPSBoaWRfdG1mZl9zY2FsZV91MTYoZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlLAotCQkJCQlmZl9maWVsZC0+bG9naWNhbF9taW5pbXVtLAotCQkJCQlmZl9maWVsZC0+bG9naWNhbF9tYXhpbXVtKTsKLQotCQlkYmdfaGlkKCIobGVmdCxyaWdodCk9KCUwOHgsICUwOHgpXG4iLCBsZWZ0LCByaWdodCk7Ci0JCWZmX2ZpZWxkLT52YWx1ZVswXSA9IGxlZnQ7Ci0JCWZmX2ZpZWxkLT52YWx1ZVsxXSA9IHJpZ2h0OwotCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHRtZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBoaWRfdG1mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCi17Ci0Jc3RydWN0IHRtZmZfZGV2aWNlICp0bWZmOwotCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3Q7Ci0Jc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhpZC0+aW5wdXRzLm5leHQsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOwotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IGhpZGlucHV0LT5pbnB1dDsKLQljb25zdCBzaWduZWQgc2hvcnQgKmZmX2JpdHMgPSBmZl9qb3lzdGljazsKLQlpbnQgZXJyb3I7Ci0JaW50IGk7Ci0KLQl0bWZmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRtZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0bWZmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIEZpbmQgdGhlIHJlcG9ydCB0byB1c2UgKi8KLQlyZXBvcnRfbGlzdCA9ICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgcmVwb3J0X2xpc3QsIGxpc3QpIHsKLQkJaW50IGZpZWxkbnVtOwotCi0JCWZvciAoZmllbGRudW0gPSAwOyBmaWVsZG51bSA8IHJlcG9ydC0+bWF4ZmllbGQ7ICsrZmllbGRudW0pIHsKLQkJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkID0gcmVwb3J0LT5maWVsZFtmaWVsZG51bV07Ci0KLQkJCWlmIChmaWVsZC0+bWF4dXNhZ2UgPD0gMCkKLQkJCQljb250aW51ZTsKLQotCQkJc3dpdGNoIChmaWVsZC0+dXNhZ2VbMF0uaGlkKSB7Ci0JCQljYXNlIFRIUlVTVE1BU1RFUl9VU0FHRV9GRjoKLQkJCQlpZiAoZmllbGQtPnJlcG9ydF9jb3VudCA8IDIpIHsKLQkJCQkJd2FybigiaWdub3JpbmcgRkYgZmllbGQgd2l0aCByZXBvcnRfY291bnQgPCAyIik7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCWlmIChmaWVsZC0+bG9naWNhbF9tYXhpbXVtID09IGZpZWxkLT5sb2dpY2FsX21pbmltdW0pIHsKLQkJCQkJd2FybigiaWdub3JpbmcgRkYgZmllbGQgd2l0aCBsb2dpY2FsX21heGltdW0gPT0gbG9naWNhbF9taW5pbXVtIik7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCWlmICh0bWZmLT5yZXBvcnQgJiYgdG1mZi0+cmVwb3J0ICE9IHJlcG9ydCkgewotCQkJCQl3YXJuKCJpZ25vcmluZyBGRiBmaWVsZCBpbiBvdGhlciByZXBvcnQiKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCi0JCQkJaWYgKHRtZmYtPmZmX2ZpZWxkICYmIHRtZmYtPmZmX2ZpZWxkICE9IGZpZWxkKSB7Ci0JCQkJCXdhcm4oImlnbm9yaW5nIGR1cGxpY2F0ZSBGRiBmaWVsZCIpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0KLQkJCQl0bWZmLT5yZXBvcnQgPSByZXBvcnQ7Ci0JCQkJdG1mZi0+ZmZfZmllbGQgPSBmaWVsZDsKLQotCQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldmljZXMpOyBpKyspIHsKLQkJCQkJaWYgKGlucHV0X2Rldi0+aWQudmVuZG9yID09IGRldmljZXNbaV0uaWRWZW5kb3IgJiYKLQkJCQkJICAgIGlucHV0X2Rldi0+aWQucHJvZHVjdCA9PSBkZXZpY2VzW2ldLmlkUHJvZHVjdCkgewotCQkJCQkJZmZfYml0cyA9IGRldmljZXNbaV0uZmY7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQotCQkJCWZvciAoaSA9IDA7IGZmX2JpdHNbaV0gPj0gMDsgaSsrKQotCQkJCQlzZXRfYml0KGZmX2JpdHNbaV0sIGlucHV0X2Rldi0+ZmZiaXQpOwotCi0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJd2FybigiaWdub3JpbmcgdW5rbm93biBvdXRwdXQgdXNhZ2UgJTA4eCIsIGZpZWxkLT51c2FnZVswXS5oaWQpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKCF0bWZmLT5yZXBvcnQpIHsKLQkJZXJyKCJjYW50IGZpbmQgRkYgZmllbGQgaW4gb3V0cHV0IHJlcG9ydHNcbiIpOwotCQllcnJvciA9IC1FTk9ERVY7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGlucHV0X2RldiwgdG1mZiwgaGlkX3RtZmZfcGxheSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGZhaWw7Ci0KLQlpbmZvKCJGb3JjZSBmZWVkYmFjayBmb3IgVGhydXN0TWFzdGVyIGRldmljZXMgYnkgWmlueCBWZXJpdHVzZSA8emlueEBlcGljc29sLm9yZz4iKTsKLQlyZXR1cm4gMDsKLQotIGZhaWw6Ci0Ja2ZyZWUodG1mZik7Ci0JcmV0dXJuIGVycm9yOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXpwZmYuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtenBmZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTY4ODI3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtenBmZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiAgRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgWmVyb3BsdXMgYmFzZWQgZGV2aWNlcwotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+Ci0gKi8KLQotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWQuaD4KLSNpbmNsdWRlICJ1c2JoaWQuaCIKLQotc3RydWN0IHpwZmZfZGV2aWNlIHsKLQlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwotfTsKLQotc3RhdGljIGludCBoaWRfenBmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKLQkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCi17Ci0Jc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IHpwZmZfZGV2aWNlICp6cGZmID0gZGF0YTsKLQlpbnQgbGVmdCwgcmlnaHQ7Ci0KLQkvKgotCSAqIFRoZSBmb2xsb3dpbmcgaXMgc3BlY2lmaWVkIHRoZSBvdGhlciB3YXkgYXJvdW5kIGluIHRoZSBaZXJvcGx1cwotCSAqIGRhdGFzaGVldCBidXQgdGhlIG9yZGVyIGJlbG93IGlzIGNvcnJlY3QgZm9yIHRoZSBYRlggRXhlY3V0aW9uZXI7Ci0JICogaG93ZXZlciBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBYRlggRXhlY3V0aW9uZXIgaXMgYW4gZXhjZXB0aW9uCi0JICovCi0KLQlsZWZ0ID0gZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOwotCXJpZ2h0ID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKLQlkYmdfaGlkKCJjYWxsZWQgd2l0aCAweCUwNHggMHglMDR4XG4iLCBsZWZ0LCByaWdodCk7Ci0KLQlsZWZ0ID0gbGVmdCAqIDB4N2YgLyAweGZmZmY7Ci0JcmlnaHQgPSByaWdodCAqIDB4N2YgLyAweGZmZmY7Ci0KLQl6cGZmLT5yZXBvcnQtPmZpZWxkWzJdLT52YWx1ZVswXSA9IGxlZnQ7Ci0JenBmZi0+cmVwb3J0LT5maWVsZFszXS0+dmFsdWVbMF0gPSByaWdodDsKLQlkYmdfaGlkKCJydW5uaW5nIHdpdGggMHglMDJ4IDB4JTAyeFxuIiwgbGVmdCwgcmlnaHQpOwotCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgenBmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGhpZF96cGZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKLXsKLQlzdHJ1Y3QgenBmZl9kZXZpY2UgKnpwZmY7Ci0Jc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKLQlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGlkLT5pbnB1dHMubmV4dCwKLQkJCQkJCXN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOwotCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0KLQkJCSZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBoaWRpbnB1dC0+aW5wdXQ7Ci0JaW50IGVycm9yOwotCi0JaWYgKGxpc3RfZW1wdHkocmVwb3J0X2xpc3QpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaGlkLXpwZmY6IG5vIG91dHB1dCByZXBvcnQgZm91bmRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7Ci0KLQlpZiAocmVwb3J0LT5tYXhmaWVsZCA8IDQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJoaWQtenBmZjogbm90IGVub3VnaCBmaWVsZHMgaW4gcmVwb3J0XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JenBmZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6cGZmX2RldmljZSksIEdGUF9LRVJORUwpOwotCWlmICghenBmZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7Ci0KLQllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGRldiwgenBmZiwgaGlkX3pwZmZfcGxheSk7Ci0JaWYgKGVycm9yKSB7Ci0JCWtmcmVlKHpwZmYpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JenBmZi0+cmVwb3J0ID0gcmVwb3J0OwotCXpwZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMDsKLQl6cGZmLT5yZXBvcnQtPmZpZWxkWzFdLT52YWx1ZVswXSA9IDB4MDI7Ci0JenBmZi0+cmVwb3J0LT5maWVsZFsyXS0+dmFsdWVbMF0gPSAweDAwOwotCXpwZmYtPnJlcG9ydC0+ZmllbGRbM10tPnZhbHVlWzBdID0gMHgwMDsKLQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHpwZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRm9yY2UgZmVlZGJhY2sgZm9yIFplcm9wbHVzIGJhc2VkIGRldmljZXMgYnkgIgotCSAgICAgICAiQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+XG4iKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCmluZGV4IDg0MmU5ZWQuLmJhYmQ2NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKQEAgLTc5MCwyMSArNzkwLDIzIEBACiAvKgogICogVGhpcyBpcyB3aGVyZSBoaWQuYyBjYWxscyB1cyB0byBjb25uZWN0IGEgaGlkIGRldmljZSB0byB0aGUgaGlkZGV2IGRyaXZlcgogICovCi1pbnQgaGlkZGV2X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK2ludCBoaWRkZXZfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgZm9yY2UpCiB7CiAJc3RydWN0IGhpZGRldiAqaGlkZGV2OwogCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwotCWludCBpOwogCWludCByZXR2YWw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaGlkLT5tYXhjb2xsZWN0aW9uOyBpKyspCi0JCWlmIChoaWQtPmNvbGxlY3Rpb25baV0udHlwZSA9PQotCQkgICAgSElEX0NPTExFQ1RJT05fQVBQTElDQVRJT04gJiYKLQkJICAgICFJU19JTlBVVF9BUFBMSUNBVElPTihoaWQtPmNvbGxlY3Rpb25baV0udXNhZ2UpKQotCQkJYnJlYWs7CisJaWYgKCFmb3JjZSkgeworCQl1bnNpZ25lZCBpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGhpZC0+bWF4Y29sbGVjdGlvbjsgaSsrKQorCQkJaWYgKGhpZC0+Y29sbGVjdGlvbltpXS50eXBlID09CisJCQkgICAgSElEX0NPTExFQ1RJT05fQVBQTElDQVRJT04gJiYKKwkJCSAgICAhSVNfSU5QVVRfQVBQTElDQVRJT04oaGlkLT5jb2xsZWN0aW9uW2ldLnVzYWdlKSkKKwkJCQlicmVhazsKIAotCWlmIChpID09IGhpZC0+bWF4Y29sbGVjdGlvbiAmJiAoaGlkLT5xdWlya3MgJiBISURfUVVJUktfSElEREVWKSA9PSAwKQotCQlyZXR1cm4gLTE7CisJCWlmIChpID09IGhpZC0+bWF4Y29sbGVjdGlvbikKKwkJCXJldHVybiAtMTsKKwl9CiAKIAlpZiAoIShoaWRkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkZGV2KSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmggYi9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmgKaW5kZXggNjJkMmQ3Yy4uYWJlZGIxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmhpZC5oCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaApAQCAtNjcsNyArNjcsNyBAQAogCXNwaW5sb2NrX3QgY3RybGxvY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGZpZm8gc3BpbmxvY2sgKi8KIAogCXN0cnVjdCB1cmIgKnVyYm91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgVVJCICovCi0Jc3RydWN0IGhpZF9yZXBvcnQgKm91dFtISURfQ09OVFJPTF9GSUZPX1NJWkVdOyAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBwaXBlIGZpZm8gKi8KKwlzdHJ1Y3QgaGlkX291dHB1dF9maWZvIG91dFtISURfQ09OVFJPTF9GSUZPX1NJWkVdOyAgICAgICAgICAgICAgLyogT3V0cHV0IHBpcGUgZmlmbyAqLwogCXVuc2lnbmVkIGNoYXIgb3V0aGVhZCwgb3V0dGFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgcGlwZSBmaWZvIGhlYWQgJiB0YWlsICovCiAJY2hhciAqb3V0YnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXIgKi8KIAlkbWFfYWRkcl90IG91dGJ1Zl9kbWE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGJ1ZmZlciBkbWEgKi8KQEAgLTgyLDcgKzgyLDcgQEAKIH07CiAKICNkZWZpbmUJaGlkX3RvX3VzYl9kZXYoaGlkX2RldikgXAotCWNvbnRhaW5lcl9vZihoaWRfZGV2LT5kZXYtPnBhcmVudCwgc3RydWN0IHVzYl9kZXZpY2UsIGRldikKKwljb250YWluZXJfb2YoaGlkX2Rldi0+ZGV2LnBhcmVudC0+cGFyZW50LCBzdHJ1Y3QgdXNiX2RldmljZSwgZGV2KQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmtiZC5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmtiZC5jCmluZGV4IDBjYWFhZmUuLmIzNDI5MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JrYmQuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvdXNia2JkLmMKQEAgLTEwNSwxNCArMTA1LDE2IEBACiAJCQlpZiAodXNiX2tiZF9rZXljb2RlW2tiZC0+b2xkW2ldXSkKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGtiZC0+ZGV2LCB1c2Jfa2JkX2tleWNvZGVba2JkLT5vbGRbaV1dLCAwKTsKIAkJCWVsc2UKLQkJCQlpbmZvKCJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC4iLCBrYmQtPm9sZFtpXSk7CisJCQkJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsCisJCQkJCQkiVW5rbm93biBrZXkgKHNjYW5jb2RlICUjeCkgcmVsZWFzZWQuXG4iLCBrYmQtPm9sZFtpXSk7CiAJCX0KIAogCQlpZiAoa2JkLT5uZXdbaV0gPiAzICYmIG1lbXNjYW4oa2JkLT5vbGQgKyAyLCBrYmQtPm5ld1tpXSwgNikgPT0ga2JkLT5vbGQgKyA4KSB7CiAJCQlpZiAodXNiX2tiZF9rZXljb2RlW2tiZC0+bmV3W2ldXSkKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGtiZC0+ZGV2LCB1c2Jfa2JkX2tleWNvZGVba2JkLT5uZXdbaV1dLCAxKTsKIAkJCWVsc2UKLQkJCQlpbmZvKCJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSBwcmVzc2VkLiIsIGtiZC0+bmV3W2ldKTsKKwkJCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwKKwkJCQkJCSJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC5cbiIsIGtiZC0+bmV3W2ldKTsKIAkJfQogCX0KIApAQCAtMTU5LDcgKzE2MSw4IEBACiAJc3RydWN0IHVzYl9rYmQgKmtiZCA9IHVyYi0+Y29udGV4dDsKIAogCWlmICh1cmItPnN0YXR1cykKLQkJd2FybigibGVkIHVyYiBzdGF0dXMgJWQgcmVjZWl2ZWQiLCB1cmItPnN0YXR1cyk7CisJCWRldl93YXJuKCZ1cmItPmRldi0+ZGV2LCAibGVkIHVyYiBzdGF0dXMgJWQgcmVjZWl2ZWRcbiIsCisJCQkgdXJiLT5zdGF0dXMpOwogCiAJaWYgKCooa2JkLT5sZWRzKSA9PSBrYmQtPm5ld2xlZHMpCiAJCXJldHVybjsKQEAgLTM1Miw3ICszNTUsOCBAQAogewogCWludCByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnVzYl9rYmRfZHJpdmVyKTsKIAlpZiAocmVzdWx0ID09IDApCi0JCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCQkJCURSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2Jtb3VzZS5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKaW5kZXggMzU2ODllZi4uNzJhYjRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKQEAgLTMxLDYgKzMxLDExIEBACiAjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlkLmg+CiAKKy8qIGZvciBhcHBsZSBJRHMgKi8KKyNpZmRlZiBDT05GSUdfVVNCX0hJRF9NT0RVTEUKKyNpbmNsdWRlICIuLi9oaWQtaWRzLmgiCisjZW5kaWYKKwogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwpAQCAtMjQwLDcgKzI0NSw4IEBACiB7CiAJaW50IHJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX21vdXNlX2RyaXZlcik7CiAJaWYgKHJldHZhbCA9PSAwKQotCQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJCQlEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggZWJhY2MwYS4uNmRlMWUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNTEwLDExICs1MTAsOSBAQAogCWRlcGVuZHMgb24gSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05MCwKLQkgIExNODYsIExNODkgYW5kIExNOTksIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIgYW5kIE1heGltIE1BWDY2NTcsCi0JICBNQVg2NjU4LCBNQVg2NjU5LCBNQVg2NjgwIGFuZCBNQVg2NjgxIHNlbnNvciBjaGlwcy4KLQotCSAgVGhlIEFuYWxvZyBEZXZpY2VzIEFEVDc0NjEgc2Vuc29yIGNoaXAgaXMgYWxzbyBzdXBwb3J0ZWQsIGJ1dCBvbmx5Ci0JICBpZiBmb3VuZCBpbiBBRE0xMDMyIGNvbXBhdGliaWxpdHkgbW9kZS4KKwkgIExNODYsIExNODkgYW5kIExNOTksIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIgYW5kIEFEVDc0NjEsIGFuZCBNYXhpbQorCSAgTUFYNjY0NiwgTUFYNjY0NywgTUFYNjY0OSwgTUFYNjY1NywgTUFYNjY1OCwgTUFYNjY1OSwgTUFYNjY4MCBhbmQKKwkgIE1BWDY2ODEgc2Vuc29yIGNoaXBzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTkwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDI2LmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYwppbmRleCA3ZmUyNDQxLi5mZjdkZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYwpAQCAtMjc5LDcgKzI3OSw2IEBACiAJdTggZmFuX21pbls4XTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTggZmFuX2Rpdls4XTsJCS8qIERlY29kZWQgdmFsdWUgKi8KIAlzdHJ1Y3QgcHdtX2RhdGEgcHdtMTsJLyogUHdtIGNvbnRyb2wgdmFsdWVzICovCi0JaW50IHZpZDsJCS8qIERlY29kZWQgdmFsdWUgKi8KIAl1OCB2cm07CQkJLyogVlJNIHZlcnNpb24gKi8KIAl1OCBhbmFsb2dfb3V0OwkJLyogUmVnaXN0ZXIgdmFsdWUgKERBQykgKi8KIAlsb25nIGFsYXJtczsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nLCBjb21iaW5lZCAqLwpAQCAtNDU1LDcgKzQ1NCw3IEBACiAJc3RydWN0IGFkbTEwMjZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCi0JZGV2X2RiZygmY2xpZW50LT5kZXYsICJHUElPIGNvbmZpZyBpczoiKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkdQSU8gY29uZmlnIGlzOlxuIik7CiAJZm9yIChpID0gMDtpIDw9IDc7KytpKSB7CiAJCWlmIChkYXRhLT5jb25maWcyICYgKDEgPDwgaSkpIHsKIAkJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXHQlc0dQJXMlZFxuIiwKQEAgLTY5Nyw4ICs2OTYsNiBAQAogCQlkYXRhLT5sYXN0X2NvbmZpZyA9IGppZmZpZXM7CiAJfTsgLyogbGFzdF9jb25maWcgKi8KIAotCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU2V0dGluZyBWSUQgZnJvbSBHUElPMTEtMTUuXG4iKTsKLQlkYXRhLT52aWQgPSAoZGF0YS0+Z3BpbyA+PiAxMSkgJiAweDFmOwogCWRhdGEtPnZhbGlkID0gMTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gZGF0YTsKQEAgLTEyMTUsNyArMTIxMiwxMCBAQAogc3RhdGljIHNzaXplX3Qgc2hvd192aWRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgYWRtMTAyNl9kYXRhICpkYXRhID0gYWRtMTAyNl91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZpZF9mcm9tX3JlZyhkYXRhLT52aWQgJiAweDNmLCBkYXRhLT52cm0pKTsKKwlpbnQgdmlkID0gKGRhdGEtPmdwaW8gPj4gMTEpICYgMHgxZjsKKworCWRldl9kYmcoZGV2LCAiU2V0dGluZyBWSUQgZnJvbSBHUElPMTEtMTUuXG4iKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmlkX2Zyb21fcmVnKHZpZCwgZGF0YS0+dnJtKSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoY3B1MF92aWQsIFNfSVJVR08sIHNob3dfdmlkX3JlZywgTlVMTCk7CiAKQEAgLTE2ODEsMTcgKzE2ODEsMTYgQEAKIAkJCWtpbmQgPSBhZG0xMDI2OwogCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gQURNMTAyNl9DT01QQU5ZX0FOQUxPR19ERVYKIAkJCSYmICh2ZXJzdGVwICYgMHhmMCkgPT0gQURNMTAyNl9WRVJTVEVQX0dFTkVSSUMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIjogVW5yZWNvZ25pemVkIHN0ZXBwaW5nICIKKwkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIlVucmVjb2duaXplZCBzdGVwcGluZyAiCiAJCQkJIjB4JTAyeC4gRGVmYXVsdGluZyB0byBBRE0xMDI2LlxuIiwgdmVyc3RlcCk7CiAJCQlraW5kID0gYWRtMTAyNjsKIAkJfSBlbHNlIGlmICgodmVyc3RlcCAmIDB4ZjApID09IEFETTEwMjZfVkVSU1RFUF9HRU5FUklDKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICI6IEZvdW5kIHZlcnNpb24vc3RlcHBpbmcgIgorCQkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAiRm91bmQgdmVyc2lvbi9zdGVwcGluZyAiCiAJCQkJIjB4JTAyeC4gQXNzdW1pbmcgZ2VuZXJpYyBBRE0xMDI2LlxuIiwKIAkJCQl2ZXJzdGVwKTsKIAkJCWtpbmQgPSBhbnlfY2hpcDsKIAkJfSBlbHNlIHsKLQkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIjogQXV0b2RldGVjdGlvbiAiCi0JCQkJImZhaWxlZFxuIik7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJBdXRvZGV0ZWN0aW9uIGZhaWxlZFxuIik7CiAJCQkvKiBOb3QgYW4gQURNMTAyNiAuLi4gKi8KIAkJCWlmIChraW5kID09IDApIHsgLyogVXNlciB1c2VkIGZvcmNlPXgseSAqLwogCQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIkdlbmVyaWMgQURNMTAyNiBub3QgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDI5LmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYwppbmRleCBiYTg0Y2E1Li4zNjcxODE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYwpAQCAtMTc5LDcgKzE3OSw4IEBACiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBhZG0xMDI5X2RhdGEgKmRhdGEgPSBhZG0xMDI5X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAl1MTYgdmFsOwotCWlmIChkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDAgfHwgZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0gPT0gMAorCWlmIChkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDAKKwkgICAgfHwgKGRhdGEtPmZhbl9kaXZbYXR0ci0+aW5kZXhdICYgMHhDMCkgPT0gMAogCSAgICB8fCBkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDI1NSkgewogCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKIAl9CkBAIC0xOTQsNyArMTk1LDcgQEAKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGFkbTEwMjlfZGF0YSAqZGF0YSA9IGFkbTEwMjlfdXBkYXRlX2RldmljZShkZXYpOwotCWlmIChkYXRhLT5mYW5fZGl2W2F0dHItPmluZGV4XSA9PSAwKQorCWlmICgoZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0gJiAweEMwKSA9PSAwKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbYXR0ci0+aW5kZXhdKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWNvcmUuYwppbmRleCBmYmVmYTgyLi42YzlhY2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMKQEAgLTk5LDQwICs5OSwzMiBAQAogICovCiBzdGF0aWMgdm9pZCBhbXNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGlycXNfdG9fY2xlYXI7CisKIAltdXRleF9sb2NrKCZhbXNfaW5mby5sb2NrKTsKIAotCWlmIChhbXNfaW5mby5oYXNfZGV2aWNlKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7CisJaXJxc190b19jbGVhciA9IGFtc19pbmZvLndvcmtlcl9pcnFzOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOworCWlmIChhbXNfaW5mby53b3JrZXJfaXJxcyAmIEFNU19JUlFfRlJFRUZBTEwpIHsKKwkJaWYgKHZlcmJvc2UpCisJCQlwcmludGsoS0VSTl9JTkZPICJhbXM6IGZyZWVmYWxsIGRldGVjdGVkIVxuIik7CiAKLQkJaWYgKGFtc19pbmZvLndvcmtlcl9pcnFzICYgQU1TX0lSUV9GUkVFRkFMTCkgewotCQkJaWYgKHZlcmJvc2UpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBmcmVlZmFsbCBkZXRlY3RlZCFcbiIpOwotCi0JCQlhbXNfaW5mby53b3JrZXJfaXJxcyAmPSB+QU1TX0lSUV9GUkVFRkFMTDsKLQotCQkJLyogd2UgbXVzdCBjYWxsIHRoaXMgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0JCQlhbXNfaW5mby5jbGVhcl9pcnEoQU1TX0lSUV9GUkVFRkFMTCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1zX2luZm8uaXJxX2xvY2ssIGZsYWdzKTsKLQkJfQotCi0JCWlmIChhbXNfaW5mby53b3JrZXJfaXJxcyAmIEFNU19JUlFfU0hPQ0spIHsKLQkJCWlmICh2ZXJib3NlKQotCQkJCXByaW50ayhLRVJOX0lORk8gImFtczogc2hvY2sgZGV0ZWN0ZWQhXG4iKTsKLQotCQkJYW1zX2luZm8ud29ya2VyX2lycXMgJj0gfkFNU19JUlFfU0hPQ0s7Ci0KLQkJCS8qIHdlIG11c3QgY2FsbCB0aGlzIHdpdGggaW50ZXJydXB0cyBlbmFibGVkICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOwotCQkJYW1zX2luZm8uY2xlYXJfaXJxKEFNU19JUlFfU0hPQ0spOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOworCQlhbXNfaW5mby53b3JrZXJfaXJxcyAmPSB+QU1TX0lSUV9GUkVFRkFMTDsKIAl9CiAKKwlpZiAoYW1zX2luZm8ud29ya2VyX2lycXMgJiBBTVNfSVJRX1NIT0NLKSB7CisJCWlmICh2ZXJib3NlKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBzaG9jayBkZXRlY3RlZCFcbiIpOworCisJCWFtc19pbmZvLndvcmtlcl9pcnFzICY9IH5BTVNfSVJRX1NIT0NLOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7CisKKwlhbXNfaW5mby5jbGVhcl9pcnEoaXJxc190b19jbGVhcik7CisKIAltdXRleF91bmxvY2soJmFtc19pbmZvLmxvY2spOwogfQogCkBAIC0yMjMsMzQgKzIxNSwyOCBAQAogCiB2b2lkIGFtc19leGl0KHZvaWQpCiB7Ci0JbXV0ZXhfbG9jaygmYW1zX2luZm8ubG9jayk7CisJLyogUmVtb3ZlIGlucHV0IGRldmljZSAqLworCWFtc19pbnB1dF9leGl0KCk7CiAKLQlpZiAoYW1zX2luZm8uaGFzX2RldmljZSkgewotCQkvKiBSZW1vdmUgaW5wdXQgZGV2aWNlICovCi0JCWFtc19pbnB1dF9leGl0KCk7CisJLyogUmVtb3ZlIGF0dHJpYnV0ZXMgKi8KKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfY3VycmVudCk7CiAKLQkJLyogU2h1dCBkb3duIGltcGxlbWVudGF0aW9uICovCi0JCWFtc19pbmZvLmV4aXQoKTsKKwkvKiBTaHV0IGRvd24gaW1wbGVtZW50YXRpb24gKi8KKwlhbXNfaW5mby5leGl0KCk7CiAKLQkJLyogRmx1c2ggaW50ZXJydXB0IHdvcmtlcgotCQkgKgotCQkgKiBXZSBkbyB0aGlzIGFmdGVyIGFtc19pbmZvLmV4aXQoKSwgYmVjYXVzZSBhbiBpbnRlcnJ1cHQgbWlnaHQKLQkJICogaGF2ZSBhcnJpdmVkIGJlZm9yZSBkaXNhYmxpbmcgdGhlbS4KLQkJICovCi0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJLyogRmx1c2ggaW50ZXJydXB0IHdvcmtlcgorCSAqCisJICogV2UgZG8gdGhpcyBhZnRlciBhbXNfaW5mby5leGl0KCksIGJlY2F1c2UgYW4gaW50ZXJydXB0IG1pZ2h0CisJICogaGF2ZSBhcnJpdmVkIGJlZm9yZSBkaXNhYmxpbmcgdGhlbS4KKwkgKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCi0JCS8qIFJlbW92ZSBhdHRyaWJ1dGVzICovCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmYW1zX2luZm8ub2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9jdXJyZW50KTsKKwkvKiBSZW1vdmUgZGV2aWNlICovCisJb2ZfZGV2aWNlX3VucmVnaXN0ZXIoYW1zX2luZm8ub2ZfZGV2KTsKIAotCQkvKiBSZW1vdmUgZGV2aWNlICovCi0JCW9mX2RldmljZV91bnJlZ2lzdGVyKGFtc19pbmZvLm9mX2Rldik7Ci0KLQkJLyogUmVtb3ZlIGhhbmRsZXIgKi8KLQkJcG1mX3VucmVnaXN0ZXJfaXJxX2NsaWVudCgmYW1zX3Nob2NrX2NsaWVudCk7Ci0JCXBtZl91bnJlZ2lzdGVyX2lycV9jbGllbnQoJmFtc19mcmVlZmFsbF9jbGllbnQpOwotCX0KLQotCW11dGV4X3VubG9jaygmYW1zX2luZm8ubG9jayk7CisJLyogUmVtb3ZlIGhhbmRsZXIgKi8KKwlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfc2hvY2tfY2xpZW50KTsKKwlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfZnJlZWZhbGxfY2xpZW50KTsKIH0KIAogTU9EVUxFX0FVVEhPUigiU3RlbGlhbiBQb3AsIE1pY2hhZWwgSGFuc2VsbWFubiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCmluZGV4IDk1Nzc2MDUzLi4yY2JmOGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaTJjLmMKKysrIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCkBAIC02MCwyNiArNjAsMzQgQEAKIAlBTVNfQ01EX1NUQVJULAogfTsKIAotc3RhdGljIGludCBhbXNfaTJjX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBhbXNfaTJjX2RldGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBhbXNfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyBpbnQgYW1zX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhbXNfaWRbXSA9IHsKKwl7ICJhbXMiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFtc19pZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhbXNfaTJjX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSAgID0gImFtcyIsCiAJCS5vd25lciAgPSBUSElTX01PRFVMRSwKIAl9LAotCS5hdHRhY2hfYWRhcHRlciA9IGFtc19pMmNfYXR0YWNoLAotCS5kZXRhY2hfYWRhcHRlciA9IGFtc19pMmNfZGV0YWNoLAorCS5wcm9iZSAgICAgICAgICA9IGFtc19pMmNfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gYW1zX2kyY19yZW1vdmUsCisJLmlkX3RhYmxlICAgICAgID0gYW1zX2lkLAogfTsKIAogc3RhdGljIHMzMiBhbXNfaTJjX3JlYWQodTggcmVnKQogewotCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoJmFtc19pbmZvLmkyY19jbGllbnQsIHJlZyk7CisJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShhbXNfaW5mby5pMmNfY2xpZW50LCByZWcpOwogfQogCiBzdGF0aWMgaW50IGFtc19pMmNfd3JpdGUodTggcmVnLCB1OCB2YWx1ZSkKIHsKLQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YSgmYW1zX2luZm8uaTJjX2NsaWVudCwgcmVnLCB2YWx1ZSk7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoYW1zX2luZm8uaTJjX2NsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgYW1zX2kyY19jbWQoZW51bSBhbXNfaTJjX2NtZCBjbWQpCkBAIC0xNTIsOSArMTYwLDkgQEAKIAkqeiA9IGFtc19pMmNfcmVhZChBTVNfREFUQVopOwogfQogCi1zdGF0aWMgaW50IGFtc19pMmNfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYW1zX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQl1bnNpZ25lZCBsb25nIGJ1czsKIAlpbnQgdm1haiwgdm1pbjsKIAlpbnQgcmVzdWx0OwogCkBAIC0xNjIsMTcgKzE3MCw3IEBACiAJaWYgKHVubGlrZWx5KGFtc19pbmZvLmhhc19kZXZpY2UpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChzdHJuY21wKGFkYXB0ZXItPm5hbWUsICJ1bmktbiIsIDUpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWJ1cyA9IHNpbXBsZV9zdHJ0b3VsKGFkYXB0ZXItPm5hbWUgKyA2LCBOVUxMLCAxMCk7Ci0JaWYgKGJ1cyAhPSBhbXNfaW5mby5pMmNfYnVzKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWFtc19pbmZvLmkyY19jbGllbnQuYWRkciA9IGFtc19pbmZvLmkyY19hZGRyZXNzOwotCWFtc19pbmZvLmkyY19jbGllbnQuYWRhcHRlciA9IGFkYXB0ZXI7Ci0JYW1zX2luZm8uaTJjX2NsaWVudC5kcml2ZXIgPSAmYW1zX2kyY19kcml2ZXI7Ci0Jc3RyY3B5KGFtc19pbmZvLmkyY19jbGllbnQubmFtZSwgIkFwcGxlIE1vdGlvbiBTZW5zb3IiKTsKKwlhbXNfaW5mby5pMmNfY2xpZW50ID0gY2xpZW50OwogCiAJaWYgKGFtc19pMmNfY21kKEFNU19DTURfUkVTRVQpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImFtczogRmFpbGVkIHRvIHJlc2V0IHRoZSBkZXZpY2VcbiIpOwpAQCAtMjM3LDcgKzIzNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYW1zX2kyY19kZXRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBhbXNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCWlmIChhbXNfaW5mby5oYXNfZGV2aWNlKSB7CiAJCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwpAQCAtMjYxLDExICsyNTksNyBAQAogCiBpbnQgX19pbml0IGFtc19pMmNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewotCWNoYXIgKnRtcF9idXM7CiAJaW50IHJlc3VsdDsKLQljb25zdCB1MzIgKnByb3A7Ci0KLQltdXRleF9sb2NrKCZhbXNfaW5mby5sb2NrKTsKIAogCS8qIFNldCBpbXBsZW1lbnRhdGlvbiBzdHVmZiAqLwogCWFtc19pbmZvLm9mX25vZGUgPSBucDsKQEAgLTI3NSwyNSArMjY5LDcgQEAKIAlhbXNfaW5mby5jbGVhcl9pcnEgPSBhbXNfaTJjX2NsZWFyX2lycTsKIAlhbXNfaW5mby5idXN0eXBlID0gQlVTX0kyQzsKIAotCS8qIGxvb2sgZm9yIGJ1cyBlaXRoZXIgdXNpbmcgInJlZyIgb3IgYnkgcGF0aCAqLwotCXByb3AgPSBvZl9nZXRfcHJvcGVydHkoYW1zX2luZm8ub2Zfbm9kZSwgInJlZyIsIE5VTEwpOwotCWlmICghcHJvcCkgewotCQlyZXN1bHQgPSAtRU5PREVWOwotCi0JCWdvdG8gZXhpdDsKLQl9Ci0KLQl0bXBfYnVzID0gc3Ryc3RyKGFtc19pbmZvLm9mX25vZGUtPmZ1bGxfbmFtZSwgIi9pMmMtYnVzQCIpOwotCWlmICh0bXBfYnVzKQotCQlhbXNfaW5mby5pMmNfYnVzID0gKih0bXBfYnVzICsgOSkgLSAnMCc7Ci0JZWxzZQotCQlhbXNfaW5mby5pMmNfYnVzID0gKCgqcHJvcCkgPj4gOCkgJiAweDBmOwotCWFtc19pbmZvLmkyY19hZGRyZXNzID0gKCgqcHJvcCkgJiAweGZmKSA+PiAxOwotCiAJcmVzdWx0ID0gaTJjX2FkZF9kcml2ZXIoJmFtc19pMmNfZHJpdmVyKTsKIAotZXhpdDoKLQltdXRleF91bmxvY2soJmFtc19pbmZvLmxvY2spOwotCiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pbnB1dC5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWlucHV0LmMKaW5kZXggN2I4MWUwYzIuLjhhNzEyMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pbnB1dC5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pbnB1dC5jCkBAIC0yMCwxMyArMjAsMTUgQEAKICNpbmNsdWRlICJhbXMuaCIKIAogc3RhdGljIHVuc2lnbmVkIGludCBqb3lzdGljazsKLW1vZHVsZV9wYXJhbShqb3lzdGljaywgYm9vbCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oam95c3RpY2ssIGJvb2wsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhqb3lzdGljaywgIkVuYWJsZSB0aGUgaW5wdXQgY2xhc3MgZGV2aWNlIG9uIG1vZHVsZSBsb2FkIik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW52ZXJ0OwotbW9kdWxlX3BhcmFtKGludmVydCwgYm9vbCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oaW52ZXJ0LCBib29sLCBTX0lXVVNSIHwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGludmVydCwgIkludmVydCBpbnB1dCBkYXRhIG9uIFggYW5kIFkgYXhpcyIpOwogCitzdGF0aWMgREVGSU5FX01VVEVYKGFtc19pbnB1dF9tdXRleCk7CisKIHN0YXRpYyB2b2lkIGFtc19pZGV2X3BvbGwoc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2ID0gZGV2LT5pbnB1dDsKQEAgLTUwLDEzICs1MiwxMSBAQAogfQogCiAvKiBDYWxsIHdpdGggYW1zX2luZm8ubG9jayBoZWxkISAqLwotc3RhdGljIHZvaWQgYW1zX2lucHV0X2VuYWJsZSh2b2lkKQorc3RhdGljIGludCBhbXNfaW5wdXRfZW5hYmxlKHZvaWQpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJczggeCwgeSwgejsKLQotCWlmIChhbXNfaW5mby5pZGV2KQotCQlyZXR1cm47CisJaW50IGVycm9yOwogCiAJYW1zX3NlbnNvcnMoJngsICZ5LCAmeik7CiAJYW1zX2luZm8ueGNhbGliID0geDsKQEAgLTY1LDcgKzY1LDcgQEAKIAogCWFtc19pbmZvLmlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9wb2xsZWRfZGV2aWNlKCk7CiAJaWYgKCFhbXNfaW5mby5pZGV2KQotCQlyZXR1cm47CisJCXJldHVybiAtRU5PTUVNOwogCiAJYW1zX2luZm8uaWRldi0+cG9sbCA9IGFtc19pZGV2X3BvbGw7CiAJYW1zX2luZm8uaWRldi0+cG9sbF9pbnRlcnZhbCA9IDI1OwpAQCAtODQsMTQgKzg0LDE4IEBACiAJc2V0X2JpdChFVl9LRVksIGlucHV0LT5ldmJpdCk7CiAJc2V0X2JpdChCVE5fVE9VQ0gsIGlucHV0LT5rZXliaXQpOwogCi0JaWYgKGlucHV0X3JlZ2lzdGVyX3BvbGxlZF9kZXZpY2UoYW1zX2luZm8uaWRldikpIHsKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX3BvbGxlZF9kZXZpY2UoYW1zX2luZm8uaWRldik7CisJaWYgKGVycm9yKSB7CiAJCWlucHV0X2ZyZWVfcG9sbGVkX2RldmljZShhbXNfaW5mby5pZGV2KTsKIAkJYW1zX2luZm8uaWRldiA9IE5VTEw7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGVycm9yOwogCX0KKworCWpveXN0aWNrID0gMTsKKworCXJldHVybiAwOwogfQogCi0vKiBDYWxsIHdpdGggYW1zX2luZm8ubG9jayBoZWxkISAqLwogc3RhdGljIHZvaWQgYW1zX2lucHV0X2Rpc2FibGUodm9pZCkKIHsKIAlpZiAoYW1zX2luZm8uaWRldikgewpAQCAtOTksNiArMTAzLDggQEAKIAkJaW5wdXRfZnJlZV9wb2xsZWRfZGV2aWNlKGFtc19pbmZvLmlkZXYpOwogCQlhbXNfaW5mby5pZGV2ID0gTlVMTDsKIAl9CisKKwlqb3lzdGljayA9IDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGFtc19pbnB1dF9zaG93X2pveXN0aWNrKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTExMCwzOSArMTE2LDQyIEBACiBzdGF0aWMgc3NpemVfdCBhbXNfaW5wdXRfc3RvcmVfam95c3RpY2soc3RydWN0IGRldmljZSAqZGV2LAogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlpZiAoc3NjYW5mKGJ1ZiwgIiVkXG4iLCAmam95c3RpY2spICE9IDEpCisJdW5zaWduZWQgbG9uZyBlbmFibGU7CisJaW50IGVycm9yID0gMDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZlbmFibGUpIHx8IGVuYWJsZSA+IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmYW1zX2luZm8ubG9jayk7CisJbXV0ZXhfbG9jaygmYW1zX2lucHV0X211dGV4KTsKIAotCWlmIChqb3lzdGljaykKLQkJYW1zX2lucHV0X2VuYWJsZSgpOwotCWVsc2UKLQkJYW1zX2lucHV0X2Rpc2FibGUoKTsKKwlpZiAoZW5hYmxlICE9IGpveXN0aWNrKSB7CisJCWlmIChlbmFibGUpCisJCQllcnJvciA9IGFtc19pbnB1dF9lbmFibGUoKTsKKwkJZWxzZQorCQkJYW1zX2lucHV0X2Rpc2FibGUoKTsKKwl9CiAKLQltdXRleF91bmxvY2soJmFtc19pbmZvLmxvY2spOworCW11dGV4X3VubG9jaygmYW1zX2lucHV0X211dGV4KTsKIAotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gZXJyb3IgPyBlcnJvciA6IGNvdW50OwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIoam95c3RpY2ssIFNfSVJVR08gfCBTX0lXVVNSLAogCWFtc19pbnB1dF9zaG93X2pveXN0aWNrLCBhbXNfaW5wdXRfc3RvcmVfam95c3RpY2spOwogCi0vKiBDYWxsIHdpdGggYW1zX2luZm8ubG9jayBoZWxkISAqLwogaW50IGFtc19pbnB1dF9pbml0KHZvaWQpCiB7Ci0JaW50IHJlc3VsdDsKLQotCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZSgmYW1zX2luZm8ub2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9qb3lzdGljayk7Ci0KLQlpZiAoIXJlc3VsdCAmJiBqb3lzdGljaykKKwlpZiAoam95c3RpY2spCiAJCWFtc19pbnB1dF9lbmFibGUoKTsKLQlyZXR1cm4gcmVzdWx0OworCisJcmV0dXJuIGRldmljZV9jcmVhdGVfZmlsZSgmYW1zX2luZm8ub2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9qb3lzdGljayk7CiB9CiAKLS8qIENhbGwgd2l0aCBhbXNfaW5mby5sb2NrIGhlbGQhICovCiB2b2lkIGFtc19pbnB1dF9leGl0KHZvaWQpCiB7Ci0JYW1zX2lucHV0X2Rpc2FibGUoKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfam95c3RpY2spOworCisJbXV0ZXhfbG9jaygmYW1zX2lucHV0X211dGV4KTsKKwlhbXNfaW5wdXRfZGlzYWJsZSgpOworCW11dGV4X3VubG9jaygmYW1zX2lucHV0X211dGV4KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYwppbmRleCA5NDYzZTk3Li5mYjE4YjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMKKysrIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLXBtdS5jCkBAIC0xNDksOCArMTQ5LDYgQEAKIAljb25zdCB1MzIgKnByb3A7CiAJaW50IHJlc3VsdDsKIAotCW11dGV4X2xvY2soJmFtc19pbmZvLmxvY2spOwotCiAJLyogU2V0IGltcGxlbWVudGF0aW9uIHN0dWZmICovCiAJYW1zX2luZm8ub2Zfbm9kZSA9IG5wOwogCWFtc19pbmZvLmV4aXQgPSBhbXNfcG11X2V4aXQ7CkBAIC0xNjEsMTAgKzE1OSw5IEBACiAKIAkvKiBHZXQgUE1VIGNvbW1hbmQsIHNob3VsZCBiZSAweDRlLCBidXQgd2UgY2FuIG5ldmVyIGtub3cgKi8KIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGFtc19pbmZvLm9mX25vZGUsICJyZWciLCBOVUxMKTsKLQlpZiAoIXByb3ApIHsKLQkJcmVzdWx0ID0gLUVOT0RFVjsKLQkJZ290byBleGl0OwotCX0KKwlpZiAoIXByb3ApCisJCXJldHVybiAtRU5PREVWOworCiAJYW1zX3BtdV9jbWQgPSAoKCpwcm9wKSA+PiA4KSAmIDB4ZmY7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KQEAgLTE3NSw3ICsxNzIsNyBAQAogCiAJcmVzdWx0ID0gYW1zX3NlbnNvcl9hdHRhY2goKTsKIAlpZiAocmVzdWx0IDwgMCkKLQkJZ290byBleGl0OworCQlyZXR1cm4gcmVzdWx0OwogCiAJLyogU2V0IGRlZmF1bHQgdmFsdWVzICovCiAJYW1zX3BtdV9zZXRfcmVnaXN0ZXIoQU1TX0ZGX0xPV19MSU1JVCwgMHgxNSk7CkBAIC0xOTgsMTAgKzE5NSw1IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJhbXM6IEZvdW5kIFBNVSBiYXNlZCBtb3Rpb24gc2Vuc29yXG4iKTsKIAotCXJlc3VsdCA9IDA7Ci0KLWV4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhbXNfaW5mby5sb2NrKTsKLQotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaCBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy5oCmluZGV4IGE2MjIxZTUuLjVlZDM4N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy5oCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy5oCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KIAogZW51bSBhbXNfaXJxIHsKIAlBTVNfSVJRX0ZSRUVGQUxMID0gMHgwMSwKQEAgLTQ2LDkgKzQ2LDcgQEAKIAogI2lmZGVmIENPTkZJR19TRU5TT1JTX0FNU19JMkMKIAkvKiBJMkMgcHJvcGVydGllcyAqLwotCWludCBpMmNfYnVzOwotCWludCBpMmNfYWRkcmVzczsKLQlzdHJ1Y3QgaTJjX2NsaWVudCBpMmNfY2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50OwogI2VuZGlmCiAKIAkvKiBKb3lzdGljayBlbXVsYXRpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYyBiL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYwppbmRleCBiMDZiOGUwLi5iYzAxMWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKKysrIGIvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCkBAIC00OSw2ICs0OSw5IEBACiAKICNkZWZpbmUgQVBQTEVTTUNfTUFYX0RBVEFfTEVOR1RIIDMyCiAKKyNkZWZpbmUgQVBQTEVTTUNfTUlOX1dBSVQJMHgwMDQwCisjZGVmaW5lIEFQUExFU01DX01BWF9XQUlUCTB4ODAwMAorCiAjZGVmaW5lIEFQUExFU01DX1NUQVRVU19NQVNLCTB4MGYKICNkZWZpbmUgQVBQTEVTTUNfUkVBRF9DTUQJMHgxMAogI2RlZmluZSBBUFBMRVNNQ19XUklURV9DTUQJMHgxMQpAQCAtNTcsOCArNjAsOCBAQAogCiAjZGVmaW5lIEtFWV9DT1VOVF9LRVkJCSIjS0VZIiAvKiByLW8gdWkzMiAqLwogCi0jZGVmaW5lIExJR0hUX1NFTlNPUl9MRUZUX0tFWQkiQUxWMCIgLyogci1vIHthbHYgKDYgYnl0ZXMpICovCi0jZGVmaW5lIExJR0hUX1NFTlNPUl9SSUdIVF9LRVkJIkFMVjEiIC8qIHItbyB7YWx2ICg2IGJ5dGVzKSAqLworI2RlZmluZSBMSUdIVF9TRU5TT1JfTEVGVF9LRVkJIkFMVjAiIC8qIHItbyB7YWx2ICg2LTEwIGJ5dGVzKSAqLworI2RlZmluZSBMSUdIVF9TRU5TT1JfUklHSFRfS0VZCSJBTFYxIiAvKiByLW8ge2FsdiAoNi0xMCBieXRlcykgKi8KICNkZWZpbmUgQkFDS0xJR0hUX0tFWQkJIkxLU0IiIC8qIHctbyB7bGtiICgyIGJ5dGVzKSAqLwogCiAjZGVmaW5lIENMQU1TSEVMTF9LRVkJCSJNU0xEIiAvKiByLW8gdWk4ICh1bnVzZWQpICovCkBAIC0xMDQsNiArMTA3LDE1IEBACiAvKiBTZXQgNjogTWFjYm9vazMgc2V0ICovCiAJeyAiVEIwVCIsICJUQzBEIiwgIlRDMFAiLCAiVE0wUCIsICJUTjBQIiwgIlRURjAiLCAiVFcwUCIsICJUaDBIIiwKIAkgICJUaDBTIiwgIlRoMUgiLCBOVUxMIH0sCisvKiBTZXQgNzogTWFjYm9vayBBaXIgKi8KKwl7ICJUQjBUIiwgIlRCMVMiLCAiVEIxVCIsICJUQjJTIiwgIlRCMlQiLCAiVEMwRCIsICJUQzBQIiwgIlRDRlAiLAorCSAgIlRURjAiLCAiVFcwUCIsICJUaDBIIiwgIlRwMFAiLCAiVHBGUCIsICJUczBQIiwgIlRzMFMiLCBOVUxMIH0sCisvKiBTZXQgODogTWFjYm9vayBQcm8gNCwxIChQZW5yeW4pICovCisJeyAiVEIwVCIsICJUQzBEIiwgIlRDMFAiLCAiVEcwRCIsICJURzBIIiwgIlRURjAiLCAiVFcwUCIsICJUaDBIIiwKKwkgICJUaDFIIiwgIlRoMkgiLCAiVG0wUCIsICJUczBQIiwgTlVMTCB9LAorLyogU2V0IDk6IE1hY2Jvb2sgUHJvIDMsMSAoU2FudGEgUm9zYSkgKi8KKwl7ICJUQUxQIiwgIlRCMFQiLCAiVEMwRCIsICJUQzBQIiwgIlRHMEQiLCAiVEcwSCIsICJUVEYwIiwgIlRXMFAiLAorCSAgIlRoMEgiLCAiVGgxSCIsICJUaDJIIiwgIlRtMFAiLCAiVHMwUCIsIE5VTEwgfSwKIH07CiAKIC8qIExpc3Qgb2Yga2V5cyB1c2VkIHRvIHJlYWQvd3JpdGUgZmFuIHNwZWVkcyAqLwpAQCAtMTYzLDI1ICsxNzUsMjUgQEAKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYXBwbGVzbWNfbGVkX3dxOwogCiAvKgotICogX193YWl0X3N0YXR1cyAtIFdhaXQgdXAgdG8gMm1zIGZvciB0aGUgc3RhdHVzIHBvcnQgdG8gZ2V0IGEgY2VydGFpbiB2YWx1ZQorICogX193YWl0X3N0YXR1cyAtIFdhaXQgdXAgdG8gMzJtcyBmb3IgdGhlIHN0YXR1cyBwb3J0IHRvIGdldCBhIGNlcnRhaW4gdmFsdWUKICAqIChtYXNrZWQgd2l0aCAweDBmKSwgcmV0dXJuaW5nIHplcm8gaWYgdGhlIHZhbHVlIGlzIG9idGFpbmVkLiAgQ2FsbGVycyBtdXN0CiAgKiBob2xkIGFwcGxlc21jX2xvY2suCiAgKi8KIHN0YXRpYyBpbnQgX193YWl0X3N0YXR1cyh1OCB2YWwpCiB7Ci0JdW5zaWduZWQgaW50IGk7CisJaW50IHVzOwogCiAJdmFsID0gdmFsICYgQVBQTEVTTUNfU1RBVFVTX01BU0s7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMjAwOyBpKyspIHsKKwlmb3IgKHVzID0gQVBQTEVTTUNfTUlOX1dBSVQ7IHVzIDwgQVBQTEVTTUNfTUFYX1dBSVQ7IHVzIDw8PSAxKSB7CisJCXVkZWxheSh1cyk7CiAJCWlmICgoaW5iKEFQUExFU01DX0NNRF9QT1JUKSAmIEFQUExFU01DX1NUQVRVU19NQVNLKSA9PSB2YWwpIHsKIAkJCWlmIChkZWJ1ZykKIAkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCQkJIldhaXRlZCAlZCB1cyBmb3Igc3RhdHVzICV4XG4iLAotCQkJCQkJaSoxMCwgdmFsKTsKKwkJCQkJIldhaXRlZCAlZCB1cyBmb3Igc3RhdHVzICV4XG4iLAorCQkJCQkyICogdXMgLSBBUFBMRVNNQ19NSU5fV0FJVCwgdmFsKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCXVkZWxheSgxMCk7CiAJfQogCiAJcHJpbnRrKEtFUk5fV0FSTklORyAiYXBwbGVzbWM6IHdhaXQgc3RhdHVzIGZhaWxlZDogJXggIT0gJXhcbiIsCkBAIC0xOTEsNiArMjAzLDI1IEBACiB9CiAKIC8qCisgKiBzcGVjaWFsIHRyZWF0bWVudCBvZiBjb21tYW5kIHBvcnQgLSBvbiBuZXdlciBtYWNib29rcywgaXQgc2VlbXMgbmVjZXNzYXJ5CisgKiB0byByZXNlbmQgdGhlIGNvbW1hbmQgYnl0ZSBiZWZvcmUgcG9sbGluZyB0aGUgc3RhdHVzIGFnYWluLiBDYWxsZXJzIG11c3QKKyAqIGhvbGQgYXBwbGVzbWNfbG9jay4KKyAqLworc3RhdGljIGludCBzZW5kX2NvbW1hbmQodTggY21kKQoreworCWludCB1czsKKwlmb3IgKHVzID0gQVBQTEVTTUNfTUlOX1dBSVQ7IHVzIDwgQVBQTEVTTUNfTUFYX1dBSVQ7IHVzIDw8PSAxKSB7CisJCW91dGIoY21kLCBBUFBMRVNNQ19DTURfUE9SVCk7CisJCXVkZWxheSh1cyk7CisJCWlmICgoaW5iKEFQUExFU01DX0NNRF9QT1JUKSAmIEFQUExFU01DX1NUQVRVU19NQVNLKSA9PSAweDBjKQorCQkJcmV0dXJuIDA7CisJfQorCXByaW50ayhLRVJOX1dBUk5JTkcgImFwcGxlc21jOiBjb21tYW5kIGZhaWxlZDogJXggLT4gJXhcbiIsCisJCWNtZCwgaW5iKEFQUExFU01DX0NNRF9QT1JUKSk7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCiAgKiBhcHBsZXNtY19yZWFkX2tleSAtIHJlYWRzIGxlbiBieXRlcyBmcm9tIGEgZ2l2ZW4ga2V5LCBhbmQgcHV0IHRoZW0gaW4gYnVmZmVyLgogICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBvbiBmYWlsdXJlLiBDYWxsZXJzIG11c3QKICAqIGhvbGQgYXBwbGVzbWNfbG9jay4KQEAgLTIwNSw4ICsyMzYsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlvdXRiKEFQUExFU01DX1JFQURfQ01ELCBBUFBMRVNNQ19DTURfUE9SVCk7Ci0JaWYgKF9fd2FpdF9zdGF0dXMoMHgwYykpCisJaWYgKHNlbmRfY29tbWFuZChBUFBMRVNNQ19SRUFEX0NNRCkpCiAJCXJldHVybiAtRUlPOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewpAQCAtMjQ5LDggKzI3OSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW91dGIoQVBQTEVTTUNfV1JJVEVfQ01ELCBBUFBMRVNNQ19DTURfUE9SVCk7Ci0JaWYgKF9fd2FpdF9zdGF0dXMoMHgwYykpCisJaWYgKHNlbmRfY29tbWFuZChBUFBMRVNNQ19XUklURV9DTUQpKQogCQlyZXR1cm4gLUVJTzsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKQEAgLTI4NCw4ICszMTMsNyBAQAogCXJlYWRrZXlbMl0gPSBpbmRleCA+PiA4OwogCXJlYWRrZXlbM10gPSBpbmRleDsKIAotCW91dGIoQVBQTEVTTUNfR0VUX0tFWV9CWV9JTkRFWF9DTUQsIEFQUExFU01DX0NNRF9QT1JUKTsKLQlpZiAoX193YWl0X3N0YXR1cygweDBjKSkKKwlpZiAoc2VuZF9jb21tYW5kKEFQUExFU01DX0dFVF9LRVlfQllfSU5ERVhfQ01EKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CkBAIC0zMTUsOCArMzQzLDcgQEAKIHsKIAlpbnQgaTsKIAotCW91dGIoQVBQTEVTTUNfR0VUX0tFWV9UWVBFX0NNRCwgQVBQTEVTTUNfQ01EX1BPUlQpOwotCWlmIChfX3dhaXRfc3RhdHVzKDB4MGMpKQorCWlmIChzZW5kX2NvbW1hbmQoQVBQTEVTTUNfR0VUX0tFWV9UWVBFX0NNRCkpCiAJCXJldHVybiAtRUlPOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewpAQCAtMzI1LDcgKzM1Miw3IEBACiAJCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlvdXRiKDUsIEFQUExFU01DX0RBVEFfUE9SVCk7CisJb3V0Yig2LCBBUFBMRVNNQ19EQVRBX1BPUlQpOwogCiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewogCQlpZiAoX193YWl0X3N0YXR1cygweDA1KSkKQEAgLTUyNywxNyArNTU0LDI3IEBACiBzdGF0aWMgc3NpemVfdCBhcHBsZXNtY19saWdodF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqc3lzZnNidWYpCiB7CisJc3RhdGljIGludCBkYXRhX2xlbmd0aDsKIAlpbnQgcmV0OwogCXU4IGxlZnQgPSAwLCByaWdodCA9IDA7Ci0JdTggYnVmZmVyWzZdOworCXU4IGJ1ZmZlclsxMF0sIHF1ZXJ5WzZdOwogCiAJbXV0ZXhfbG9jaygmYXBwbGVzbWNfbG9jayk7CiAKLQlyZXQgPSBhcHBsZXNtY19yZWFkX2tleShMSUdIVF9TRU5TT1JfTEVGVF9LRVksIGJ1ZmZlciwgNik7CisJaWYgKCFkYXRhX2xlbmd0aCkgeworCQlyZXQgPSBhcHBsZXNtY19nZXRfa2V5X3R5cGUoTElHSFRfU0VOU09SX0xFRlRfS0VZLCBxdWVyeSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwkJZGF0YV9sZW5ndGggPSBjbGFtcF92YWwocXVlcnlbMF0sIDAsIDEwKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYXBwbGVzbWM6IGxpZ2h0IHNlbnNvciBkYXRhIGxlbmd0aCBzZXQgdG8gIgorCQkJIiVkXG4iLCBkYXRhX2xlbmd0aCk7CisJfQorCisJcmV0ID0gYXBwbGVzbWNfcmVhZF9rZXkoTElHSFRfU0VOU09SX0xFRlRfS0VZLCBidWZmZXIsIGRhdGFfbGVuZ3RoKTsKIAlsZWZ0ID0gYnVmZmVyWzJdOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwotCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KExJR0hUX1NFTlNPUl9SSUdIVF9LRVksIGJ1ZmZlciwgNik7CisJcmV0ID0gYXBwbGVzbWNfcmVhZF9rZXkoTElHSFRfU0VOU09SX1JJR0hUX0tFWSwgYnVmZmVyLCBkYXRhX2xlbmd0aCk7CiAJcmlnaHQgPSBidWZmZXJbMl07CiAKIG91dDoKQEAgLTEyMzMsMzkgKzEyNzAsNTcgQEAKIAl7IC5hY2NlbGVyb21ldGVyID0gMCwgLmxpZ2h0ID0gMCwgLnRlbXBlcmF0dXJlX3NldCA9IDUgfSwKIC8qIE1hY0Jvb2szOiBhY2NlbGVyb21ldGVyIGFuZCB0ZW1wZXJhdHVyZSBzZXQgNiAqLwogCXsgLmFjY2VsZXJvbWV0ZXIgPSAxLCAubGlnaHQgPSAwLCAudGVtcGVyYXR1cmVfc2V0ID0gNiB9LAorLyogTWFjQm9vayBBaXI6IGFjY2VsZXJvbWV0ZXIsIGJhY2tsaWdodCBhbmQgdGVtcGVyYXR1cmUgc2V0IDcgKi8KKwl7IC5hY2NlbGVyb21ldGVyID0gMSwgLmxpZ2h0ID0gMSwgLnRlbXBlcmF0dXJlX3NldCA9IDcgfSwKKy8qIE1hY0Jvb2sgUHJvIDQ6IGFjY2VsZXJvbWV0ZXIsIGJhY2tsaWdodCBhbmQgdGVtcGVyYXR1cmUgc2V0IDggKi8KKwl7IC5hY2NlbGVyb21ldGVyID0gMSwgLmxpZ2h0ID0gMSwgLnRlbXBlcmF0dXJlX3NldCA9IDggfSwKKy8qIE1hY0Jvb2sgUHJvIDM6IGFjY2VsZXJvbWV0ZXIsIGJhY2tsaWdodCBhbmQgdGVtcGVyYXR1cmUgc2V0IDkgKi8KKwl7IC5hY2NlbGVyb21ldGVyID0gMSwgLmxpZ2h0ID0gMSwgLnRlbXBlcmF0dXJlX3NldCA9IDkgfSwKIH07CiAKIC8qIE5vdGUgdGhhdCBETUlfTUFUQ0goLi4uLCJNYWNCb29rIikgd2lsbCBtYXRjaCAiTWFjQm9va1BybzEsMSIuCiAgKiBTbyB3ZSBuZWVkIHRvIHB1dCAiQXBwbGUgTWFjQm9vayBQcm8iIGJlZm9yZSAiQXBwbGUgTWFjQm9vayIuICovCiBzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBhcHBsZXNtY193aGl0ZWxpc3RbXSA9IHsKKwl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIE1hY0Jvb2sgQWlyIiwgeworCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJBcHBsZSIpLAorCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rQWlyIikgfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzddfSwKKwl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIE1hY0Jvb2sgUHJvIDQiLCB7CisJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIkFwcGxlIiksCisJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tQcm80IikgfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzhdfSwKKwl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIE1hY0Jvb2sgUHJvIDMiLCB7CisJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIkFwcGxlIiksCisJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tQcm8zIikgfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzldfSwKIAl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIE1hY0Jvb2sgUHJvIiwgewogCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIkFwcGxlIiksCiAJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjQm9va1BybyIpIH0sCi0JCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbMF19LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbMF19LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayAodjIpIiwgewogCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIkFwcGxlIiksCiAJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjQm9vazIiKSB9LAotCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzFdfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzFdfSwKIAl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIE1hY0Jvb2sgKHYzKSIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAogCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY0Jvb2szIikgfSwKLQkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVs2XX0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVs2XX0sCiAJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rIiwgewogCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIkFwcGxlIiksCiAJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjQm9vayIpIH0sCi0JCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbMl19LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbMl19LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjbWluaSIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAogCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY21pbmkiKSB9LAotCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzNdfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzNdfSwKIAl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIE1hY1BybzIiLCB7CiAJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKIAkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNQcm8yIikgfSwKLQkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVs0XX0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVs0XX0sCiAJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBpTWFjIiwgewogCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIkFwcGxlIiksCiAJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiaU1hYyIpIH0sCi0JCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbNV19LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbNV19LAogCXsgLmlkZW50ID0gTlVMTCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYyBiL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCmluZGV4IGNkYjgzMTEuLjI3YTVkMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCisrKyBiL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCkBAIC0xNzUsMTEgKzE3NSwxMSBAQAogICogRGF0YSBzdHJ1Y3R1cmVzIGFuZCBtYW5pcHVsYXRpb24gdGhlcmVvZgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qIEZvciBJU0EgY2hpcHMsIHdlIGFidXNlIHRoZSBpMmNfY2xpZW50IGFkZHIgYW5kIG5hbWUgZmllbGRzLiBXZSBhbHNvIHVzZQotICAgdGhlIGRyaXZlciBmaWVsZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gSTJDIGFuZCBJU0EgY2hpcHMuICovCiBzdHJ1Y3QgZG1lMTczN19kYXRhIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsJLyogZm9yIEkyQyBkZXZpY2VzIG9ubHkgKi8KIAlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgYWRkcjsJCS8qIGZvciBJU0EgZGV2aWNlcyBvbmx5ICovCiAKIAlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJaW50IHZhbGlkOwkJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwpAQCAtNTEyLDExICs1MTIsMTIgQEAKICAqIGJlZm9yZSBjYWxsaW5nIGRtZTE3MzdfcmVhZCBvciBkbWUxNzM3X3dyaXRlLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB1OCBkbWUxNzM3X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorc3RhdGljIHU4IGRtZTE3MzdfcmVhZChjb25zdCBzdHJ1Y3QgZG1lMTczN19kYXRhICpkYXRhLCB1OCByZWcpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKIAlzMzIgdmFsOwogCi0JaWYgKGNsaWVudC0+ZHJpdmVyKSB7IC8qIEkyQyBkZXZpY2UgKi8KKwlpZiAoY2xpZW50KSB7IC8qIEkyQyBkZXZpY2UgKi8KIAkJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIAogCQlpZiAodmFsIDwgMCkgewpAQCAtNTI1LDE4ICs1MjYsMTkgQEAKIAkJCQkgIm1haW50YWluZXIuXG4iLCByZWcpOwogCQl9CiAJfSBlbHNlIHsgLyogSVNBIGRldmljZSAqLwotCQlvdXRiKHJlZywgY2xpZW50LT5hZGRyKTsKLQkJdmFsID0gaW5iKGNsaWVudC0+YWRkciArIDEpOworCQlvdXRiKHJlZywgZGF0YS0+YWRkcik7CisJCXZhbCA9IGluYihkYXRhLT5hZGRyICsgMSk7CiAJfQogCiAJcmV0dXJuIHZhbDsKIH0KIAotc3RhdGljIHMzMiBkbWUxNzM3X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsKQorc3RhdGljIHMzMiBkbWUxNzM3X3dyaXRlKGNvbnN0IHN0cnVjdCBkbWUxNzM3X2RhdGEgKmRhdGEsIHU4IHJlZywgdTggdmFsKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CiAJczMyIHJlcyA9IDA7CiAKLQlpZiAoY2xpZW50LT5kcml2ZXIpIHsgLyogSTJDIGRldmljZSAqLworCWlmIChjbGllbnQpIHsgLyogSTJDIGRldmljZSAqLwogCQlyZXMgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpOwogCiAJCWlmIChyZXMgPCAwKSB7CkBAIC01NDUsOCArNTQ3LDggQEAKIAkJCQkgIm1haW50YWluZXIuXG4iLCByZWcpOwogCQl9CiAJfSBlbHNlIHsgLyogSVNBIGRldmljZSAqLwotCQlvdXRiKHJlZywgY2xpZW50LT5hZGRyKTsKLQkJb3V0Yih2YWwsIGNsaWVudC0+YWRkciArIDEpOworCQlvdXRiKHJlZywgZGF0YS0+YWRkcik7CisJCW91dGIodmFsLCBkYXRhLT5hZGRyICsgMSk7CiAJfQogCiAJcmV0dXJuIHJlczsKQEAgLTU1NSw3ICs1NTcsNiBAQAogc3RhdGljIHN0cnVjdCBkbWUxNzM3X2RhdGEgKmRtZTE3MzdfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRtZTE3MzdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OwogCWludCBpeDsKIAl1OCBsc2JbNV07CiAKQEAgLTU2Myw3ICs1NjQsNyBAQAogCiAJLyogRW5hYmxlIGEgVmJhdCBtb25pdG9yaW5nIGN5Y2xlIGV2ZXJ5IDEwIG1pbnMgKi8KIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3ZiYXQgKyA2MDAgKiBIWikgfHwgIWRhdGEtPnZhbGlkKSB7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19DT05GSUcsIGRtZTE3MzdfcmVhZChjbGllbnQsCisJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfQ09ORklHLCBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCURNRTE3MzdfUkVHX0NPTkZJRykgfCAweDEwKTsKIAkJZGF0YS0+bGFzdF92YmF0ID0gamlmZmllczsKIAl9CkBAIC01NzEsNyArNTcyLDcgQEAKIAkvKiBTYW1wbGUgcmVnaXN0ZXIgY29udGVudHMgZXZlcnkgMSBzZWMgKi8KIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZSArIEhaKSB8fCAhZGF0YS0+dmFsaWQpIHsKIAkJaWYgKGRhdGEtPnR5cGUgIT0gc2NoNTAyNykgewotCQkJZGF0YS0+dmlkID0gZG1lMTczN19yZWFkKGNsaWVudCwgRE1FMTczN19SRUdfVklEKSAmCisJCQlkYXRhLT52aWQgPSBkbWUxNzM3X3JlYWQoZGF0YSwgRE1FMTczN19SRUdfVklEKSAmCiAJCQkJMHgzZjsKIAkJfQogCkBAIC01ODAsMTEgKzU4MSwxMSBAQAogCQkJLyogVm9sdGFnZSBpbnB1dHMgYXJlIHN0b3JlZCBhcyAxNiBiaXQgdmFsdWVzIGV2ZW4KIAkJCSAqIHRob3VnaCB0aGV5IGhhdmUgb25seSAxMiBiaXRzIHJlc29sdXRpb24uIFRoaXMgaXMKIAkJCSAqIHRvIG1ha2UgaXQgY29uc2lzdGVudCB3aXRoIHRoZSB0ZW1wIGlucHV0cy4gKi8KLQkJCWRhdGEtPmluW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5pbltpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfSU4oaXgpKSA8PCA4OwotCQkJZGF0YS0+aW5fbWluW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5pbl9taW5baXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX0lOX01JTihpeCkpOwotCQkJZGF0YS0+aW5fbWF4W2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5pbl9tYXhbaXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX0lOX01BWChpeCkpOwogCQl9CiAKQEAgLTU5NSwxNCArNTk2LDE0IEBACiAJCQkgKiB0byB0YWtlIGFkdmFudGFnZSBvZiBpbXBsaWNpdCBjb252ZXJzaW9ucyBiZXR3ZWVuCiAJCQkgKiByZWdpc3RlciB2YWx1ZXMgKDIncyBjb21wbGVtZW50KSBhbmQgdGVtcCB2YWx1ZXMKIAkJCSAqIChzaWduZWQgZGVjaW1hbCkuICovCi0JCQlkYXRhLT50ZW1wW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT50ZW1wW2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQlETUUxNzM3X1JFR19URU1QKGl4KSkgPDwgODsKLQkJCWRhdGEtPnRlbXBfbWluW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT50ZW1wX21pbltpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfVEVNUF9NSU4oaXgpKTsKLQkJCWRhdGEtPnRlbXBfbWF4W2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT50ZW1wX21heFtpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfVEVNUF9NQVgoaXgpKTsKIAkJCWlmIChkYXRhLT50eXBlICE9IHNjaDUwMjcpIHsKLQkJCQlkYXRhLT50ZW1wX29mZnNldFtpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJCWRhdGEtPnRlbXBfb2Zmc2V0W2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfVEVNUF9PRkZTRVQoaXgpKTsKIAkJCX0KIAkJfQpAQCAtNjEyLDcgKzYxMyw3IEBACiAJCSAqIHdoaWNoIHRoZSByZWdpc3RlcnMgYXJlIHJlYWQgKE1TQiBmaXJzdCwgdGhlbiBMU0IpIGlzCiAJCSAqIGltcG9ydGFudCEgKi8KIAkJZm9yIChpeCA9IDA7IGl4IDwgQVJSQVlfU0laRShsc2IpOyBpeCsrKSB7Ci0JCQlsc2JbaXhdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCWxzYltpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfSU5fVEVNUF9MU0IoaXgpKTsKIAkJfQogCQlmb3IgKGl4ID0gMDsgaXggPCBBUlJBWV9TSVpFKGRhdGEtPmluKTsgaXgrKykgewpAQCAtNjMxLDE5ICs2MzIsMTkgQEAKIAkJCWlmICghKGRhdGEtPmhhc19mYW4gJiAoMSA8PCBpeCkpKSB7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlkYXRhLT5mYW5baXhdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCWRhdGEtPmZhbltpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfRkFOKGl4KSk7Ci0JCQlkYXRhLT5mYW5baXhdIHw9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5mYW5baXhdIHw9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQlETUUxNzM3X1JFR19GQU4oaXgpICsgMSkgPDwgODsKLQkJCWRhdGEtPmZhbl9taW5baXhdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCWRhdGEtPmZhbl9taW5baXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX0ZBTl9NSU4oaXgpKTsKLQkJCWRhdGEtPmZhbl9taW5baXhdIHw9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5mYW5fbWluW2l4XSB8PSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfRkFOX01JTihpeCkgKyAxKSA8PCA4OwotCQkJZGF0YS0+ZmFuX29wdFtpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+ZmFuX29wdFtpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfRkFOX09QVChpeCkpOwogCQkJLyogZmFuX21heCBleGlzdHMgb25seSBmb3IgZmFuWzUtNl0gKi8KIAkJCWlmIChpeCA+IDMpIHsKLQkJCQlkYXRhLT5mYW5fbWF4W2l4IC0gNF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJCWRhdGEtPmZhbl9tYXhbaXggLSA0XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQlETUUxNzM3X1JFR19GQU5fTUFYKGl4KSk7CiAJCQl9CiAJCX0KQEAgLTY1NSw2MyArNjU2LDYzIEBACiAJCQlpZiAoIShkYXRhLT5oYXNfcHdtICYgKDEgPDwgaXgpKSkgewogCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJZGF0YS0+cHdtW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5wd21baXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX1BXTShpeCkpOwotCQkJZGF0YS0+cHdtX2ZyZXFbaXhdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCWRhdGEtPnB3bV9mcmVxW2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQlETUUxNzM3X1JFR19QV01fRlJFUShpeCkpOwogCQkJLyogcHdtX2NvbmZpZyBhbmQgcHdtX21pbiBleGlzdCBvbmx5IGZvciBwd21bMS0zXSAqLwogCQkJaWYgKGl4IDwgMykgewotCQkJCWRhdGEtPnB3bV9jb25maWdbaXhdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCQlkYXRhLT5wd21fY29uZmlnW2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfUFdNX0NPTkZJRyhpeCkpOwotCQkJCWRhdGEtPnB3bV9taW5baXhdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCQlkYXRhLT5wd21fbWluW2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfUFdNX01JTihpeCkpOwogCQkJfQogCQl9CiAJCWZvciAoaXggPSAwOyBpeCA8IEFSUkFZX1NJWkUoZGF0YS0+cHdtX3JyKTsgaXgrKykgewotCQkJZGF0YS0+cHdtX3JyW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5wd21fcnJbaXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQlETUUxNzM3X1JFR19QV01fUlIoaXgpKTsKIAkJfQogCiAJCS8qIFRoZXJtYWwgem9uZSByZWdpc3RlcnMgKi8KIAkJZm9yIChpeCA9IDA7IGl4IDwgQVJSQVlfU0laRShkYXRhLT56b25lX2xvdyk7IGl4KyspIHsKLQkJCWRhdGEtPnpvbmVfbG93W2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT56b25lX2xvd1tpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfWk9ORV9MT1coaXgpKTsKLQkJCWRhdGEtPnpvbmVfYWJzW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT56b25lX2Fic1tpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfWk9ORV9BQlMoaXgpKTsKIAkJfQogCQlpZiAoZGF0YS0+dHlwZSAhPSBzY2g1MDI3KSB7CiAJCQlmb3IgKGl4ID0gMDsgaXggPCBBUlJBWV9TSVpFKGRhdGEtPnpvbmVfaHlzdCk7IGl4KyspIHsKLQkJCQlkYXRhLT56b25lX2h5c3RbaXhdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCQlkYXRhLT56b25lX2h5c3RbaXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQlETUUxNzM3X1JFR19aT05FX0hZU1QoaXgpKTsKIAkJCX0KIAkJfQogCiAJCS8qIEFsYXJtIHJlZ2lzdGVycyAqLwotCQlkYXRhLT5hbGFybXMgPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQlkYXRhLT5hbGFybXMgPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCURNRTE3MzdfUkVHX0FMQVJNMSk7CiAJCS8qIEJpdCA3IHRlbGxzIHVzIGlmIHRoZSBvdGhlciBhbGFybSByZWdpc3RlcnMgYXJlIG5vbi16ZXJvIGFuZAogCQkgKiB0aGVyZWZvcmUgYWxzbyBuZWVkIHRvIGJlIHJlYWQgKi8KIAkJaWYgKGRhdGEtPmFsYXJtcyAmIDB4ODApIHsKLQkJCWRhdGEtPmFsYXJtcyB8PSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+YWxhcm1zIHw9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfQUxBUk0yKSA8PCA4OwotCQkJZGF0YS0+YWxhcm1zIHw9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5hbGFybXMgfD0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQlETUUxNzM3X1JFR19BTEFSTTMpIDw8IDE2OwogCQl9CiAKIAkJLyogVGhlIElTQSBjaGlwcyByZXF1aXJlIGV4cGxpY2l0IGNsZWFyaW5nIG9mIGFsYXJtIGJpdHMuCiAJCSAqIERvbid0IHdvcnJ5LCBhbiBhbGFybSB3aWxsIGNvbWUgYmFjayBpZiB0aGUgY29uZGl0aW9uCiAJCSAqIHRoYXQgY2F1c2VzIGl0IHN0aWxsIGV4aXN0cyAqLwotCQlpZiAoIWNsaWVudC0+ZHJpdmVyKSB7CisJCWlmICghZGF0YS0+Y2xpZW50KSB7CiAJCQlpZiAoZGF0YS0+YWxhcm1zICYgMHhmZjAwMDApIHsKLQkJCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwgRE1FMTczN19SRUdfQUxBUk0zLAorCQkJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfQUxBUk0zLAogCQkJCQkgICAgICAweGZmKTsKIAkJCX0KIAkJCWlmIChkYXRhLT5hbGFybXMgJiAweGZmMDApIHsKLQkJCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwgRE1FMTczN19SRUdfQUxBUk0yLAorCQkJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfQUxBUk0yLAogCQkJCQkgICAgICAweGZmKTsKIAkJCX0KIAkJCWlmIChkYXRhLT5hbGFybXMgJiAweGZmKSB7Ci0JCQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX0FMQVJNMSwKKwkJCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX0FMQVJNMSwKIAkJCQkJICAgICAgMHhmZik7CiAJCQl9CiAJCX0KQEAgLTc3MCw3ICs3NzEsNiBAQAogCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZG1lMTczN19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIKIAkJKnNlbnNvcl9hdHRyXzIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKIAlpbnQgaXggPSBzZW5zb3JfYXR0cl8yLT5pbmRleDsKQEAgLTc4MSwxMiArNzgxLDEyIEBACiAJc3dpdGNoIChmbikgewogCWNhc2UgU1lTX0lOX01JTjoKIAkJZGF0YS0+aW5fbWluW2l4XSA9IElOX1RPX1JFRyh2YWwsIGRhdGEtPmluX25vbWluYWxbaXhdKTsKLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX0lOX01JTihpeCksCisJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfSU5fTUlOKGl4KSwKIAkJCSAgICAgIGRhdGEtPmluX21pbltpeF0pOwogCQlicmVhazsKIAljYXNlIFNZU19JTl9NQVg6CiAJCWRhdGEtPmluX21heFtpeF0gPSBJTl9UT19SRUcodmFsLCBkYXRhLT5pbl9ub21pbmFsW2l4XSk7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19JTl9NQVgoaXgpLAorCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX0lOX01BWChpeCksCiAJCQkgICAgICBkYXRhLT5pbl9tYXhbaXhdKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTg1MCw3ICs4NTAsNiBAQAogCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGRtZTE3MzdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yCiAJCSpzZW5zb3JfYXR0cl8yID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CiAJaW50IGl4ID0gc2Vuc29yX2F0dHJfMi0+aW5kZXg7CkBAIC04NjEsMTcgKzg2MCwxNyBAQAogCXN3aXRjaCAoZm4pIHsKIAljYXNlIFNZU19URU1QX01JTjoKIAkJZGF0YS0+dGVtcF9taW5baXhdID0gVEVNUF9UT19SRUcodmFsKTsKLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX1RFTVBfTUlOKGl4KSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19URU1QX01JTihpeCksCiAJCQkgICAgICBkYXRhLT50ZW1wX21pbltpeF0pOwogCQlicmVhazsKIAljYXNlIFNZU19URU1QX01BWDoKIAkJZGF0YS0+dGVtcF9tYXhbaXhdID0gVEVNUF9UT19SRUcodmFsKTsKLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX1RFTVBfTUFYKGl4KSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19URU1QX01BWChpeCksCiAJCQkgICAgICBkYXRhLT50ZW1wX21heFtpeF0pOwogCQlicmVhazsKIAljYXNlIFNZU19URU1QX09GRlNFVDoKIAkJZGF0YS0+dGVtcF9vZmZzZXRbaXhdID0gVEVNUF9UT19SRUcodmFsKTsKLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX1RFTVBfT0ZGU0VUKGl4KSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19URU1QX09GRlNFVChpeCksCiAJCQkgICAgICBkYXRhLT50ZW1wX29mZnNldFtpeF0pOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtOTM5LDcgKzkzOCw2IEBACiAJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZG1lMTczN19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIKIAkJKnNlbnNvcl9hdHRyXzIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKIAlpbnQgaXggPSBzZW5zb3JfYXR0cl8yLT5pbmRleDsKQEAgLTk1MCwzNyArOTQ4LDM3IEBACiAJc3dpdGNoIChmbikgewogCWNhc2UgU1lTX1pPTkVfQVVUT19QT0lOVDFfVEVNUF9IWVNUOgogCQkvKiBSZWZyZXNoIHRoZSBjYWNoZSAqLwotCQlkYXRhLT56b25lX2xvd1tpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQlkYXRhLT56b25lX2xvd1tpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCSAgRE1FMTczN19SRUdfWk9ORV9MT1coaXgpKTsKIAkJLyogTW9kaWZ5IHRoZSB0ZW1wIGh5c3QgdmFsdWUgKi8KIAkJZGF0YS0+em9uZV9oeXN0W2l4ID09IDJdID0gVEVNUF9IWVNUX1RPX1JFRygKIAkJCQkJVEVNUF9GUk9NX1JFRyhkYXRhLT56b25lX2xvd1tpeF0sIDgpIC0KLQkJCQkJdmFsLCBpeCwgZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCQkJdmFsLCBpeCwgZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX1pPTkVfSFlTVChpeCA9PSAyKSkpOwotCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwgRE1FMTczN19SRUdfWk9ORV9IWVNUKGl4ID09IDIpLAorCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX1pPTkVfSFlTVChpeCA9PSAyKSwKIAkJCSAgICAgIGRhdGEtPnpvbmVfaHlzdFtpeCA9PSAyXSk7CiAJCWJyZWFrOwogCWNhc2UgU1lTX1pPTkVfQVVUT19QT0lOVDFfVEVNUDoKIAkJZGF0YS0+em9uZV9sb3dbaXhdID0gVEVNUF9UT19SRUcodmFsKTsKLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX1pPTkVfTE9XKGl4KSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19aT05FX0xPVyhpeCksCiAJCQkgICAgICBkYXRhLT56b25lX2xvd1tpeF0pOwogCQlicmVhazsKIAljYXNlIFNZU19aT05FX0FVVE9fUE9JTlQyX1RFTVA6CiAJCS8qIFJlZnJlc2ggdGhlIGNhY2hlICovCi0JCWRhdGEtPnpvbmVfbG93W2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCWRhdGEtPnpvbmVfbG93W2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJICBETUUxNzM3X1JFR19aT05FX0xPVyhpeCkpOwogCQkvKiBNb2RpZnkgdGhlIHRlbXAgcmFuZ2UgdmFsdWUgKHdoaWNoIGlzIHN0b3JlZCBpbiB0aGUgdXBwZXIKIAkJICogbmliYmxlIG9mIHRoZSBwd21fZnJlcSByZWdpc3RlcikgKi8KIAkJZGF0YS0+cHdtX2ZyZXFbaXhdID0gVEVNUF9SQU5HRV9UT19SRUcodmFsIC0KIAkJCQkJVEVNUF9GUk9NX1JFRyhkYXRhLT56b25lX2xvd1tpeF0sIDgpLAotCQkJCQlkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJCQlkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfUFdNX0ZSRVEoaXgpKSk7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19QV01fRlJFUShpeCksCisJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfUFdNX0ZSRVEoaXgpLAogCQkJICAgICAgZGF0YS0+cHdtX2ZyZXFbaXhdKTsKIAkJYnJlYWs7CiAJY2FzZSBTWVNfWk9ORV9BVVRPX1BPSU5UM19URU1QOgogCQlkYXRhLT56b25lX2Fic1tpeF0gPSBURU1QX1RPX1JFRyh2YWwpOwotCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwgRE1FMTczN19SRUdfWk9ORV9BQlMoaXgpLAorCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX1pPTkVfQUJTKGl4KSwKIAkJCSAgICAgIGRhdGEtPnpvbmVfYWJzW2l4XSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMDQ2LDcgKzEwNDQsNiBAQAogCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGRtZTE3MzdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yCiAJCSpzZW5zb3JfYXR0cl8yID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CiAJaW50IGl4ID0gc2Vuc29yX2F0dHJfMi0+aW5kZXg7CkBAIC0xMDYwLDIxICsxMDU3LDIxIEBACiAJCQlkYXRhLT5mYW5fbWluW2l4XSA9IEZBTl9UT19SRUcodmFsLCAwKTsKIAkJfSBlbHNlIHsKIAkJCS8qIFJlZnJlc2ggdGhlIGNhY2hlICovCi0JCQlkYXRhLT5mYW5fb3B0W2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5mYW5fb3B0W2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfRkFOX09QVChpeCkpOwogCQkJLyogTW9kaWZ5IHRoZSBmYW4gbWluIHZhbHVlICovCiAJCQlkYXRhLT5mYW5fbWluW2l4XSA9IEZBTl9UT19SRUcodmFsLAogCQkJCQlGQU5fVFBDX0ZST01fUkVHKGRhdGEtPmZhbl9vcHRbaXhdKSk7CiAJCX0KLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX0ZBTl9NSU4oaXgpLAorCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX0ZBTl9NSU4oaXgpLAogCQkJICAgICAgZGF0YS0+ZmFuX21pbltpeF0gJiAweGZmKTsKLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX0ZBTl9NSU4oaXgpICsgMSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19GQU5fTUlOKGl4KSArIDEsCiAJCQkgICAgICBkYXRhLT5mYW5fbWluW2l4XSA+PiA4KTsKIAkJYnJlYWs7CiAJY2FzZSBTWVNfRkFOX01BWDoKIAkJLyogT25seSB2YWxpZCBmb3IgZmFuWzUtNl0gKi8KIAkJZGF0YS0+ZmFuX21heFtpeCAtIDRdID0gRkFOX01BWF9UT19SRUcodmFsKTsKLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX0ZBTl9NQVgoaXgpLAorCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX0ZBTl9NQVgoaXgpLAogCQkJICAgICAgZGF0YS0+ZmFuX21heFtpeCAtIDRdKTsKIAkJYnJlYWs7CiAJY2FzZSBTWVNfRkFOX1RZUEU6CkBAIC0xMDg2LDkgKzEwODMsOSBAQAogCQkJCSB2YWwpOwogCQkJZ290byBleGl0OwogCQl9Ci0JCWRhdGEtPmZhbl9vcHRbaXhdID0gRkFOX1RZUEVfVE9fUkVHKHZhbCwgZG1lMTczN19yZWFkKGNsaWVudCwKKwkJZGF0YS0+ZmFuX29wdFtpeF0gPSBGQU5fVFlQRV9UT19SRUcodmFsLCBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfRkFOX09QVChpeCkpKTsKLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX0ZBTl9PUFQoaXgpLAorCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX0ZBTl9PUFQoaXgpLAogCQkJICAgICAgZGF0YS0+ZmFuX29wdFtpeF0pOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTE4NSw3ICsxMTgyLDYgQEAKIAkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBkbWUxNzM3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMgogCQkqc2Vuc29yX2F0dHJfMiA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOwogCWludCBpeCA9IHNlbnNvcl9hdHRyXzItPmluZGV4OwpAQCAtMTE5NiwxMiArMTE5MiwxMiBAQAogCXN3aXRjaCAoZm4pIHsKIAljYXNlIFNZU19QV006CiAJCWRhdGEtPnB3bVtpeF0gPSBTRU5TT1JTX0xJTUlUKHZhbCwgMCwgMjU1KTsKLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX1BXTShpeCksIGRhdGEtPnB3bVtpeF0pOworCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX1BXTShpeCksIGRhdGEtPnB3bVtpeF0pOwogCQlicmVhazsKIAljYXNlIFNZU19QV01fRlJFUToKLQkJZGF0YS0+cHdtX2ZyZXFbaXhdID0gUFdNX0ZSRVFfVE9fUkVHKHZhbCwgZG1lMTczN19yZWFkKGNsaWVudCwKKwkJZGF0YS0+cHdtX2ZyZXFbaXhdID0gUFdNX0ZSRVFfVE9fUkVHKHZhbCwgZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQlETUUxNzM3X1JFR19QV01fRlJFUShpeCkpKTsKLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX1BXTV9GUkVRKGl4KSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19QV01fRlJFUShpeCksCiAJCQkgICAgICBkYXRhLT5wd21fZnJlcVtpeF0pOwogCQlicmVhazsKIAljYXNlIFNZU19QV01fRU5BQkxFOgpAQCAtMTIxNCw3ICsxMjEwLDcgQEAKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQkvKiBSZWZyZXNoIHRoZSBjYWNoZSAqLwotCQlkYXRhLT5wd21fY29uZmlnW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCWRhdGEtPnB3bV9jb25maWdbaXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQlETUUxNzM3X1JFR19QV01fQ09ORklHKGl4KSk7CiAJCWlmICh2YWwgPT0gUFdNX0VOX0ZST01fUkVHKGRhdGEtPnB3bV9jb25maWdbaXhdKSkgewogCQkJLyogQmFpbCBvdXQgaWYgbm8gY2hhbmdlICovCkBAIC0xMjI2LDE0ICsxMjIyLDE0IEBACiAJCQlkYXRhLT5wd21fYWN6W2l4XSA9IFBXTV9BQ1pfRlJPTV9SRUcoCiAJCQkJCQkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0pOwogCQkJLyogU2F2ZSB0aGUgY3VycmVudCByYW1wIHJhdGUgc3RhdGUgYW5kIGRpc2FibGUgaXQgKi8KLQkJCWRhdGEtPnB3bV9ycltpeCA+IDBdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCWRhdGEtPnB3bV9ycltpeCA+IDBdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQlETUUxNzM3X1JFR19QV01fUlIoaXggPiAwKSk7CiAJCQlkYXRhLT5wd21fcnJfZW4gJj0gfigxIDw8IGl4KTsKIAkJCWlmIChQV01fUlJfRU5fRlJPTV9SRUcoZGF0YS0+cHdtX3JyW2l4ID4gMF0sIGl4KSkgewogCQkJCWRhdGEtPnB3bV9ycl9lbiB8PSAoMSA8PCBpeCk7CiAJCQkJZGF0YS0+cHdtX3JyW2l4ID4gMF0gPSBQV01fUlJfRU5fVE9fUkVHKDAsIGl4LAogCQkJCQkJCWRhdGEtPnB3bV9ycltpeCA+IDBdKTsKLQkJCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwKKwkJCQlkbWUxNzM3X3dyaXRlKGRhdGEsCiAJCQkJCSAgICAgIERNRTE3MzdfUkVHX1BXTV9SUihpeCA+IDApLAogCQkJCQkgICAgICBkYXRhLT5wd21fcnJbaXggPiAwXSk7CiAJCQl9CkBAIC0xMjQ3LDE0ICsxMjQzLDE0IEBACiAJCQkvKiBUdXJuIGZhbiBmdWxseSBvbiAqLwogCQkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0gPSBQV01fRU5fVE9fUkVHKDAsCiAJCQkJCQkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0pOwotCQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX1BXTV9DT05GSUcoaXgpLAorCQkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19QV01fQ09ORklHKGl4KSwKIAkJCQkgICAgICBkYXRhLT5wd21fY29uZmlnW2l4XSk7CiAJCQlicmVhazsKIAkJY2FzZSAxOgogCQkJLyogVHVybiBvbiBtYW51YWwgbW9kZSAqLwogCQkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0gPSBQV01fRU5fVE9fUkVHKDEsCiAJCQkJCQkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0pOwotCQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX1BXTV9DT05GSUcoaXgpLAorCQkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19QV01fQ09ORklHKGl4KSwKIAkJCQkgICAgICBkYXRhLT5wd21fY29uZmlnW2l4XSk7CiAJCQkvKiBDaGFuZ2UgcGVybWlzc2lvbnMgb2YgcHdtW2l4XSB0byByZWFkLXdyaXRlYWJsZSAqLwogCQkJZG1lMTczN19jaG1vZF9maWxlKGRldiwgZG1lMTczN19wd21fY2htb2RfYXR0cltpeF0sCkBAIC0xMjY5LDE0ICsxMjY1LDE0IEBACiAJCQlkYXRhLT5wd21fY29uZmlnW2l4XSA9IFBXTV9BQ1pfVE9fUkVHKAogCQkJCQkJCWRhdGEtPnB3bV9hY3pbaXhdLAogCQkJCQkJCWRhdGEtPnB3bV9jb25maWdbaXhdKTsKLQkJCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19QV01fQ09ORklHKGl4KSwKKwkJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfUFdNX0NPTkZJRyhpeCksCiAJCQkJICAgICAgZGF0YS0+cHdtX2NvbmZpZ1tpeF0pOwogCQkJLyogRW5hYmxlIFBXTSByYW1wIHJhdGUgaWYgcHJldmlvdXNseSBlbmFibGVkICovCiAJCQlpZiAoZGF0YS0+cHdtX3JyX2VuICYgKDEgPDwgaXgpKSB7CiAJCQkJZGF0YS0+cHdtX3JyW2l4ID4gMF0gPSBQV01fUlJfRU5fVE9fUkVHKDEsIGl4LAotCQkJCQkJZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCQkJCWRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfUFdNX1JSKGl4ID4gMCkpKTsKLQkJCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwKKwkJCQlkbWUxNzM3X3dyaXRlKGRhdGEsCiAJCQkJCSAgICAgIERNRTE3MzdfUkVHX1BXTV9SUihpeCA+IDApLAogCQkJCQkgICAgICBkYXRhLT5wd21fcnJbaXggPiAwXSk7CiAJCQl9CkBAIC0xMjg2LDkgKzEyODIsOSBAQAogCWNhc2UgU1lTX1BXTV9SQU1QX1JBVEU6CiAJCS8qIE9ubHkgdmFsaWQgZm9yIHB3bVsxLTNdICovCiAJCS8qIFJlZnJlc2ggdGhlIGNhY2hlICovCi0JCWRhdGEtPnB3bV9jb25maWdbaXhdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCURNRTE3MzdfUkVHX1BXTV9DT05GSUcoaXgpKTsKLQkJZGF0YS0+cHdtX3JyW2l4ID4gMF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQlkYXRhLT5wd21fcnJbaXggPiAwXSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfUFdNX1JSKGl4ID4gMCkpOwogCQkvKiBTZXQgdGhlIHJhbXAgcmF0ZSB2YWx1ZSAqLwogCQlpZiAodmFsID4gMCkgewpAQCAtMTMwMSw3ICsxMjk3LDcgQEAKIAkJCWRhdGEtPnB3bV9ycltpeCA+IDBdID0gUFdNX1JSX0VOX1RPX1JFRyh2YWwgPiAwLCBpeCwKIAkJCQkJCQlkYXRhLT5wd21fcnJbaXggPiAwXSk7CiAJCX0KLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX1BXTV9SUihpeCA+IDApLAorCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX1BXTV9SUihpeCA+IDApLAogCQkJICAgICAgZGF0YS0+cHdtX3JyW2l4ID4gMF0pOwogCQlicmVhazsKIAljYXNlIFNZU19QV01fQVVUT19DSEFOTkVMU19aT05FOgpAQCAtMTMxNSwxNCArMTMxMSwxNCBAQAogCQkJZ290byBleGl0OwogCQl9CiAJCS8qIFJlZnJlc2ggdGhlIGNhY2hlICovCi0JCWRhdGEtPnB3bV9jb25maWdbaXhdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCURNRTE3MzdfUkVHX1BXTV9DT05GSUcoaXgpKTsKIAkJaWYgKFBXTV9FTl9GUk9NX1JFRyhkYXRhLT5wd21fY29uZmlnW2l4XSkgPT0gMikgewogCQkJLyogUFdNIGlzIGFscmVhZHkgaW4gYXV0byBtb2RlIHNvIHVwZGF0ZSB0aGUgdGVtcAogCQkJICogY2hhbm5lbCBhc3NpZ25tZW50ICovCiAJCQlkYXRhLT5wd21fY29uZmlnW2l4XSA9IFBXTV9BQ1pfVE9fUkVHKHZhbCwKIAkJCQkJCWRhdGEtPnB3bV9jb25maWdbaXhdKTsKLQkJCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19QV01fQ09ORklHKGl4KSwKKwkJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfUFdNX0NPTkZJRyhpeCksCiAJCQkJICAgICAgZGF0YS0+cHdtX2NvbmZpZ1tpeF0pOwogCQl9IGVsc2UgewogCQkJLyogUFdNIGlzIG5vdCBpbiBhdXRvIG1vZGUgc28gd2Ugc2F2ZSB0aGUgdGVtcApAQCAtMTMzMyw3ICsxMzI5LDcgQEAKIAljYXNlIFNZU19QV01fQVVUT19QV01fTUlOOgogCQkvKiBPbmx5IHZhbGlkIGZvciBwd21bMS0zXSAqLwogCQkvKiBSZWZyZXNoIHRoZSBjYWNoZSAqLwotCQlkYXRhLT5wd21fbWluW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCWRhdGEtPnB3bV9taW5baXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQlETUUxNzM3X1JFR19QV01fTUlOKGl4KSk7CiAJCS8qIFRoZXJlIGFyZSBvbmx5IDIgdmFsdWVzIHN1cHBvcnRlZCBmb3IgdGhlIGF1dG9fcHdtX21pbgogCQkgKiB2YWx1ZTogMCBvciBhdXRvX3BvaW50MV9wd20uIFNvIGlmIHRoZSB0ZW1wZXJhdHVyZSBkcm9wcwpAQCAtMTM0MSwyMCArMTMzNywyMCBAQAogCQkgKiBvZmYgb3IgcnVucyBhdCBhdXRvX3BvaW50MV9wd20gZHV0eS1jeWNsZS4gKi8KIAkJaWYgKHZhbCA+ICgoZGF0YS0+cHdtX21pbltpeF0gKyAxKSAvIDIpKSB7CiAJCQlkYXRhLT5wd21fcnJbMF0gPSBQV01fT0ZGX1RPX1JFRygxLCBpeCwKLQkJCQkJCWRtZTE3MzdfcmVhZChjbGllbnQsCisJCQkJCQlkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCURNRTE3MzdfUkVHX1BXTV9SUigwKSkpOwogCQl9IGVsc2UgewogCQkJZGF0YS0+cHdtX3JyWzBdID0gUFdNX09GRl9UT19SRUcoMCwgaXgsCi0JCQkJCQlkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJCQkJZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQlETUUxNzM3X1JFR19QV01fUlIoMCkpKTsKIAkJfQotCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwgRE1FMTczN19SRUdfUFdNX1JSKDApLAorCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX1BXTV9SUigwKSwKIAkJCSAgICAgIGRhdGEtPnB3bV9yclswXSk7CiAJCWJyZWFrOwogCWNhc2UgU1lTX1BXTV9BVVRPX1BPSU5UMV9QV006CiAJCS8qIE9ubHkgdmFsaWQgZm9yIHB3bVsxLTNdICovCiAJCWRhdGEtPnB3bV9taW5baXhdID0gU0VOU09SU19MSU1JVCh2YWwsIDAsIDI1NSk7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19QV01fTUlOKGl4KSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19QV01fTUlOKGl4KSwKIAkJCSAgICAgIGRhdGEtPnB3bV9taW5baXhdKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE0MDIsNyArMTM5OCw3IEBACiB7CiAJc3RydWN0IGRtZTE3MzdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPmNsaWVudC5uYW1lKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+bmFtZSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTkwOCw3ICsxOTA0LDcgQEAKIAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZG1lMTczN19ncm91cCk7CiAKLQlpZiAoIWRhdGEtPmNsaWVudC5kcml2ZXIpIHsKKwlpZiAoIWRhdGEtPmNsaWVudCkgewogCQlzeXNmc19yZW1vdmVfZmlsZSgmZGV2LT5rb2JqLCAmZGV2X2F0dHJfbmFtZS5hdHRyKTsKIAl9CiB9CkBAIC0xOTE5LDcgKzE5MTUsNyBAQAogCWludCBlcnIsIGl4OwogCiAJLyogQ3JlYXRlIGEgbmFtZSBhdHRyaWJ1dGUgZm9yIElTQSBkZXZpY2VzICovCi0JaWYgKCFkYXRhLT5jbGllbnQuZHJpdmVyICYmCisJaWYgKCFkYXRhLT5jbGllbnQgJiYKIAkgICAgKGVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZkZXYtPmtvYmosICZkZXZfYXR0cl9uYW1lLmF0dHIpKSkgewogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMjAxMywxNCArMjAwOSwxNCBAQAogc3RhdGljIGludCBkbWUxNzM3X2luaXRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZG1lMTczN19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKIAlpbnQgaXg7CiAJdTggcmVnOwogCiAJLyogUG9pbnQgdG8gdGhlIHJpZ2h0IG5vbWluYWwgdm9sdGFnZXMgYXJyYXkgKi8KIAlkYXRhLT5pbl9ub21pbmFsID0gSU5fTk9NSU5BTChkYXRhLT50eXBlKTsKIAotCWRhdGEtPmNvbmZpZyA9IGRtZTE3MzdfcmVhZChjbGllbnQsIERNRTE3MzdfUkVHX0NPTkZJRyk7CisJZGF0YS0+Y29uZmlnID0gZG1lMTczN19yZWFkKGRhdGEsIERNRTE3MzdfUkVHX0NPTkZJRyk7CiAJLyogSW5mb3JtIGlmIHBhcnQgaXMgbm90IG1vbml0b3Jpbmcvc3RhcnRlZCAqLwogCWlmICghKGRhdGEtPmNvbmZpZyAmIDB4MDEpKSB7CiAJCWlmICghZm9yY2Vfc3RhcnQpIHsKQEAgLTIwMzIsNyArMjAyOCw3IEBACiAKIAkJLyogRm9yY2UgbW9uaXRvcmluZyAqLwogCQlkYXRhLT5jb25maWcgfD0gMHgwMTsKLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX0NPTkZJRywgZGF0YS0+Y29uZmlnKTsKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19DT05GSUcsIGRhdGEtPmNvbmZpZyk7CiAJfQogCS8qIEluZm9ybSBpZiBwYXJ0IGlzIG5vdCByZWFkeSAqLwogCWlmICghKGRhdGEtPmNvbmZpZyAmIDB4MDQpKSB7CkBAIC0yMDQxLDggKzIwMzcsOCBAQAogCX0KIAogCS8qIERldGVybWluZSB3aGljaCBvcHRpb25hbCBmYW4gYW5kIHB3bSBmZWF0dXJlcyBhcmUgZW5hYmxlZC9wcmVzZW50ICovCi0JaWYgKGNsaWVudC0+ZHJpdmVyKSB7ICAgLyogSTJDIGNoaXAgKi8KLQkJZGF0YS0+Y29uZmlnMiA9IGRtZTE3MzdfcmVhZChjbGllbnQsIERNRTE3MzdfUkVHX0NPTkZJRzIpOworCWlmIChjbGllbnQpIHsgICAvKiBJMkMgY2hpcCAqLworCQlkYXRhLT5jb25maWcyID0gZG1lMTczN19yZWFkKGRhdGEsIERNRTE3MzdfUkVHX0NPTkZJRzIpOwogCQkvKiBDaGVjayBpZiBvcHRpb25hbCBmYW4zIGlucHV0IGlzIGVuYWJsZWQgKi8KIAkJaWYgKGRhdGEtPmNvbmZpZzIgJiAweDA0KSB7CiAJCQlkYXRhLT5oYXNfZmFuIHw9ICgxIDw8IDIpOwpAQCAtMjA1MSw3ICsyMDQ3LDcgQEAKIAkJLyogRmFuNCBhbmQgcHdtMyBhcmUgb25seSBhdmFpbGFibGUgaWYgdGhlIGNsaWVudCdzIEkyQyBhZGRyZXNzCiAJCSAqIGlzIHRoZSBkZWZhdWx0IDB4MmUuIE90aGVyd2lzZSB0aGUgSS9PcyBhc3NvY2lhdGVkIHdpdGgKIAkJICogdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGZvciBhZGRyIGVuYWJsZS9zZWxlY3QuICovCi0JCWlmIChkYXRhLT5jbGllbnQuYWRkciA9PSAweDJlKSB7CisJCWlmIChjbGllbnQtPmFkZHIgPT0gMHgyZSkgewogCQkJZGF0YS0+aGFzX2ZhbiB8PSAoMSA8PCAzKTsKIAkJCWRhdGEtPmhhc19wd20gfD0gKDEgPDwgMik7CiAJCX0KQEAgLTIwODYsMTYgKzIwODIsMTYgQEAKIAkJIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgNCkpID8gInllcyIgOiAibm8iLAogCQkgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCA1KSkgPyAieWVzIiA6ICJubyIpOwogCi0JcmVnID0gZG1lMTczN19yZWFkKGNsaWVudCwgRE1FMTczN19SRUdfVEFDSF9QV00pOworCXJlZyA9IGRtZTE3MzdfcmVhZChkYXRhLCBETUUxNzM3X1JFR19UQUNIX1BXTSk7CiAJLyogSW5mb3JtIGlmIGZhbi10by1wd20gbWFwcGluZyBkaWZmZXJzIGZyb20gdGhlIGRlZmF1bHQgKi8KLQlpZiAoY2xpZW50LT5kcml2ZXIgJiYgcmVnICE9IDB4YTQpIHsgICAvKiBJMkMgY2hpcCAqLworCWlmIChjbGllbnQgJiYgcmVnICE9IDB4YTQpIHsgICAvKiBJMkMgY2hpcCAqLwogCQlkZXZfd2FybihkZXYsICJOb24tc3RhbmRhcmQgZmFuIHRvIHB3bSBtYXBwaW5nOiAiCiAJCQkgImZhbjEtPnB3bSVkLCBmYW4yLT5wd20lZCwgZmFuMy0+cHdtJWQsICIKIAkJCSAiZmFuNC0+cHdtJWQuIFBsZWFzZSByZXBvcnQgdG8gdGhlIGRyaXZlciAiCiAJCQkgIm1haW50YWluZXIuXG4iLAogCQkJIChyZWcgJiAweDAzKSArIDEsICgocmVnID4+IDIpICYgMHgwMykgKyAxLAogCQkJICgocmVnID4+IDQpICYgMHgwMykgKyAxLCAoKHJlZyA+PiA2KSAmIDB4MDMpICsgMSk7Ci0JfSBlbHNlIGlmICghY2xpZW50LT5kcml2ZXIgJiYgcmVnICE9IDB4MjQpIHsgICAvKiBJU0EgY2hpcCAqLworCX0gZWxzZSBpZiAoIWNsaWVudCAmJiByZWcgIT0gMHgyNCkgeyAgIC8qIElTQSBjaGlwICovCiAJCWRldl93YXJuKGRldiwgIk5vbi1zdGFuZGFyZCBmYW4gdG8gcHdtIG1hcHBpbmc6ICIKIAkJCSAiZmFuMS0+cHdtJWQsIGZhbjItPnB3bSVkLCBmYW4zLT5wd20lZC4gIgogCQkJICJQbGVhc2UgcmVwb3J0IHRvIHRoZSBkcml2ZXIgbWFpbnRhaW5lci5cbiIsCkBAIC0yMTA4LDcgKzIxMDQsNyBAQAogCSAqIGRpc2FibGVkKS4gKi8KIAlpZiAoIShkYXRhLT5jb25maWcgJiAweDAyKSkgewogCQlmb3IgKGl4ID0gMDsgaXggPCAzOyBpeCsrKSB7Ci0JCQlkYXRhLT5wd21fY29uZmlnW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5wd21fY29uZmlnW2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfUFdNX0NPTkZJRyhpeCkpOwogCQkJaWYgKChkYXRhLT5oYXNfcHdtICYgKDEgPDwgaXgpKSAmJgogCQkJICAgIChQV01fRU5fRlJPTV9SRUcoZGF0YS0+cHdtX2NvbmZpZ1tpeF0pID09IC0xKSkgewpAQCAtMjExNiw4ICsyMTEyLDggQEAKIAkJCQkJICJtYW51YWwgbW9kZS5cbiIsIGl4ICsgMSk7CiAJCQkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0gPSBQV01fRU5fVE9fUkVHKDEsCiAJCQkJCQkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0pOwotCQkJCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19QV00oaXgpLCAwKTsKLQkJCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwKKwkJCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX1BXTShpeCksIDApOworCQkJCWRtZTE3Mzdfd3JpdGUoZGF0YSwKIAkJCQkJICAgICAgRE1FMTczN19SRUdfUFdNX0NPTkZJRyhpeCksCiAJCQkJCSAgICAgIGRhdGEtPnB3bV9jb25maWdbaXhdKTsKIAkJCX0KQEAgLTIxOTEsMzcgKzIxODcsMjQgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGRtZTE3MzdfaTJjX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLAotCQkJICAgICAgaW50IGtpbmQpCisvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KK3N0YXRpYyBpbnQgZG1lMTczN19pMmNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorCQkJICAgICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogeworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYWRhcHRlci0+ZGV2OwogCXU4IGNvbXBhbnksIHZlcnN0ZXAgPSAwOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IGRtZTE3MzdfZGF0YSAqZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0JaW50IGVyciA9IDA7CiAJY29uc3QgY2hhciAqbmFtZTsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgewotCQlnb3RvIGV4aXQ7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1lMTczN19kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQljbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZkbWUxNzM3X2kyY19kcml2ZXI7Ci0JZGV2ID0gJmNsaWVudC0+ZGV2OwotCiAJLyogQSBuZWdhdGl2ZSBraW5kIG1lYW5zIHRoYXQgdGhlIGRyaXZlciB3YXMgbG9hZGVkIHdpdGggbm8gZm9yY2UKIAkgKiBwYXJhbWV0ZXIgKGRlZmF1bHQpLCBzbyB3ZSBtdXN0IGlkZW50aWZ5IHRoZSBjaGlwLiAqLwogCWlmIChraW5kIDwgMCkgewotCQljb21wYW55ID0gZG1lMTczN19yZWFkKGNsaWVudCwgRE1FMTczN19SRUdfQ09NUEFOWSk7Ci0JCXZlcnN0ZXAgPSBkbWUxNzM3X3JlYWQoY2xpZW50LCBETUUxNzM3X1JFR19WRVJTVEVQKTsKKwkJY29tcGFueSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERNRTE3MzdfUkVHX0NPTVBBTlkpOworCQl2ZXJzdGVwID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRE1FMTczN19SRUdfVkVSU1RFUCk7CiAKIAkJaWYgKGNvbXBhbnkgPT0gRE1FMTczN19DT01QQU5ZX1NNU0MgJiYKIAkJICAgICh2ZXJzdGVwICYgRE1FMTczN19WRVJTVEVQX01BU0spID09IERNRTE3MzdfVkVSU1RFUCkgewpAQCAtMjIzMCw4ICsyMjEzLDcgQEAKIAkJCSAgIHZlcnN0ZXAgPT0gU0NINTAyN19WRVJTVEVQKSB7CiAJCQlraW5kID0gc2NoNTAyNzsKIAkJfSBlbHNlIHsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIGV4aXRfa2ZyZWU7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KIApAQCAtMjI0MSwzMiArMjIyMyw0NCBAQAogCQlraW5kID0gZG1lMTczNzsKIAkJbmFtZSA9ICJkbWUxNzM3IjsKIAl9Ci0JZGF0YS0+dHlwZSA9IGtpbmQ7Ci0KLQkvKiBGaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyBhbmQgcHV0IGl0IGludG8gdGhlIGdsb2JhbAotCSAqIGxpc3QgKi8KLQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7Ci0JbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwotCi0JLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwotCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkpIHsKLQkJZ290byBleGl0X2tmcmVlOwotCX0KIAogCWRldl9pbmZvKGRldiwgIkZvdW5kIGEgJXMgY2hpcCBhdCAweCUwMnggKHJldiAweCUwMngpLlxuIiwKIAkJIGtpbmQgPT0gc2NoNTAyNyA/ICJTQ0g1MDI3IiA6ICJETUUxNzM3IiwgY2xpZW50LT5hZGRyLAogCQkgdmVyc3RlcCk7CisJc3RybGNweShpbmZvLT50eXBlLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRtZTE3MzdfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZG1lMTczN19kYXRhICpkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKKwlpbnQgZXJyOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWUxNzM3X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCWRhdGEtPnR5cGUgPSBpZC0+ZHJpdmVyX2RhdGE7CisJZGF0YS0+Y2xpZW50ID0gY2xpZW50OworCWRhdGEtPm5hbWUgPSBjbGllbnQtPm5hbWU7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgRE1FMTczNyBjaGlwICovCiAJaWYgKChlcnIgPSBkbWUxNzM3X2luaXRfZGV2aWNlKGRldikpKSB7CiAJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlLlxuIik7Ci0JCWdvdG8gZXhpdF9kZXRhY2g7CisJCWdvdG8gZXhpdF9rZnJlZTsKIAl9CiAKIAkvKiBDcmVhdGUgc3lzZnMgZmlsZXMgKi8KIAlpZiAoKGVyciA9IGRtZTE3MzdfY3JlYXRlX2ZpbGVzKGRldikpKSB7CiAJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBmaWxlcy5cbiIpOwotCQlnb3RvIGV4aXRfZGV0YWNoOworCQlnb3RvIGV4aXRfa2ZyZWU7CiAJfQogCiAJLyogUmVnaXN0ZXIgZGV2aWNlICovCkBAIC0yMjgxLDQ1ICsyMjc1LDQwIEBACiAKIGV4aXRfcmVtb3ZlOgogCWRtZTE3MzdfcmVtb3ZlX2ZpbGVzKGRldik7Ci1leGl0X2RldGFjaDoKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwogZXhpdF9rZnJlZToKIAlrZnJlZShkYXRhKTsKIGV4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBkbWUxNzM3X2kyY19hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaWYgKCEoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfSFdNT04pKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgZG1lMTczN19pMmNfZGV0ZWN0KTsKLX0KLQotc3RhdGljIGludCBkbWUxNzM3X2kyY19kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGRtZTE3MzdfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBkbWUxNzM3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwogCiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKIAlkbWUxNzM3X3JlbW92ZV9maWxlcygmY2xpZW50LT5kZXYpOwogCi0JaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkgewotCQlyZXR1cm4gZXJyOwotCX0KLQogCWtmcmVlKGRhdGEpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgZG1lMTczN19pZFtdID0geworCXsgImRtZTE3MzciLCBkbWUxNzM3IH0sCisJeyAic2NoNTAyNyIsIHNjaDUwMjcgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgZG1lMTczN19pZCk7CisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkbWUxNzM3X2kyY19kcml2ZXIgPSB7CisJLmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gImRtZTE3MzciLAogCX0sCi0JLmF0dGFjaF9hZGFwdGVyCT0gZG1lMTczN19pMmNfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSBkbWUxNzM3X2kyY19kZXRhY2hfY2xpZW50LAorCS5wcm9iZSA9IGRtZTE3MzdfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSBkbWUxNzM3X2kyY19yZW1vdmUsCisJLmlkX3RhYmxlID0gZG1lMTczN19pZCwKKwkuZGV0ZWN0ID0gZG1lMTczN19pMmNfZGV0ZWN0LAorCS5hZGRyZXNzX2RhdGEgPSAmYWRkcl9kYXRhLAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNDAzLDcgKzIzOTIsNiBAQAogewogCXU4IGNvbXBhbnksIGRldmljZTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBkbWUxNzM3X2RhdGEgKmRhdGE7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlpbnQgZXJyOwpAQCAtMjQyMiwxNSArMjQxMCwxMyBAQAogCQlnb3RvIGV4aXRfcmVsZWFzZV9yZWdpb247CiAJfQogCi0JY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKLQljbGllbnQtPmFkZHIgPSByZXMtPnN0YXJ0OworCWRhdGEtPmFkZHIgPSByZXMtPnN0YXJ0OwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOwogCiAJLyogU2tpcCBjaGlwIGRldGVjdGlvbiBpZiBtb2R1bGUgaXMgbG9hZGVkIHdpdGggZm9yY2VfaWQgcGFyYW1ldGVyICovCiAJaWYgKCFmb3JjZV9pZCkgewotCQljb21wYW55ID0gZG1lMTczN19yZWFkKGNsaWVudCwgRE1FMTczN19SRUdfQ09NUEFOWSk7Ci0JCWRldmljZSA9IGRtZTE3MzdfcmVhZChjbGllbnQsIERNRTE3MzdfUkVHX0RFVklDRSk7CisJCWNvbXBhbnkgPSBkbWUxNzM3X3JlYWQoZGF0YSwgRE1FMTczN19SRUdfQ09NUEFOWSk7CisJCWRldmljZSA9IGRtZTE3MzdfcmVhZChkYXRhLCBETUUxNzM3X1JFR19ERVZJQ0UpOwogCiAJCWlmICghKChjb21wYW55ID09IERNRTE3MzdfQ09NUEFOWV9TTVNDKSAmJgogCQkgICAgICAoZGV2aWNlID09IFNDSDMxMVhfREVWSUNFKSkpIHsKQEAgLTI0NDEsMTAgKzI0MjcsMTAgQEAKIAlkYXRhLT50eXBlID0gc2NoMzExeDsKIAogCS8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzIGFuZCBpbml0aWFsaXplIHRoZSBtdXRleCAqLwotCXN0cmxjcHkoY2xpZW50LT5uYW1lLCAic2NoMzExeCIsIEkyQ19OQU1FX1NJWkUpOworCWRhdGEtPm5hbWUgPSAic2NoMzExeCI7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCi0JZGV2X2luZm8oZGV2LCAiRm91bmQgYSBTQ0gzMTF4IGNoaXAgYXQgMHglMDR4XG4iLCBjbGllbnQtPmFkZHIpOworCWRldl9pbmZvKGRldiwgIkZvdW5kIGEgU0NIMzExeCBjaGlwIGF0IDB4JTA0eFxuIiwgZGF0YS0+YWRkcik7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBjaGlwICovCiAJaWYgKChlcnIgPSBkbWUxNzM3X2luaXRfZGV2aWNlKGRldikpKSB7CkBAIC0yNDg1LDcgKzI0NzEsNyBAQAogCiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKIAlkbWUxNzM3X3JlbW92ZV9maWxlcygmcGRldi0+ZGV2KTsKLQlyZWxlYXNlX3JlZ2lvbihkYXRhLT5jbGllbnQuYWRkciwgRE1FMTczN19FWFRFTlQpOworCXJlbGVhc2VfcmVnaW9uKGRhdGEtPmFkZHIsIERNRTE3MzdfRVhURU5UKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShkYXRhKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9od21vbi5jIGIvZHJpdmVycy9od21vbi9od21vbi5jCmluZGV4IDczMjFhODguLjA3NmE1OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaHdtb24uYworKysgYi9kcml2ZXJzL2h3bW9uL2h3bW9uLmMKQEAgLTU1LDggKzU1LDggQEAKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAogCWlkID0gaWQgJiBNQVhfSURfTUFTSzsKLQlod2RldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShod21vbl9jbGFzcywgZGV2LCBNS0RFVigwLCAwKSwgTlVMTCwKLQkJCQkgICAgICBIV01PTl9JRF9GT1JNQVQsIGlkKTsKKwlod2RldiA9IGRldmljZV9jcmVhdGUoaHdtb25fY2xhc3MsIGRldiwgTUtERVYoMCwgMCksIE5VTEwsCisJCQkgICAgICBIV01PTl9JRF9GT1JNQVQsIGlkKTsKIAogCWlmIChJU19FUlIoaHdkZXYpKSB7CiAJCXNwaW5fbG9jaygmaWRyX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pYm1hZW0uYyBiL2RyaXZlcnMvaHdtb24vaWJtYWVtLmMKaW5kZXggMGY3MGRjMi4uN2IwZWQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pYm1hZW0uYworKysgYi9kcml2ZXJzL2h3bW9uL2libWFlbS5jCkBAIC0xMTE4LDMgKzExMTgsMTAgQEAKIAogbW9kdWxlX2luaXQoYWVtX2luaXQpOwogbW9kdWxlX2V4aXQoYWVtX2V4aXQpOworCitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzMzUwLSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM1NTAtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14MzY1MC0qIik7CitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzNjU1LSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM3NTUtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk0zODUwTTIveDM5NTBNMi0qIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2libXBleC5jIGIvZHJpdmVycy9od21vbi9pYm1wZXguYwppbmRleCA0ZTliMTljLi41MzdkOWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2libXBleC5jCisrKyBiL2RyaXZlcnMvaHdtb24vaWJtcGV4LmMKQEAgLTYwOCwzICs2MDgsOSBAQAogCiBtb2R1bGVfaW5pdChpYm1wZXhfaW5pdCk7CiBtb2R1bGVfZXhpdChpYm1wZXhfZXhpdCk7CisKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDMzNTAtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14MzU1MC0qIik7CitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzNjUwLSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM2NTUtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14Mzc1NS0qIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2l0ODcuYyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCmluZGV4IGQ3OTNjYzAuLmI3NGM5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCisrKyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCkBAIC00NzcsNyArNDc3LDcgQEAKIAlpZiAocmVnICYgKDEgPDwgbnIpKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICIzXG4iKTsgIC8qIHRoZXJtYWwgZGlvZGUgKi8KIAlpZiAocmVnICYgKDggPDwgbnIpKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIyXG4iKTsgIC8qIHRoZXJtaXN0b3IgKi8KKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiNFxuIik7ICAvKiB0aGVybWlzdG9yICovCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7ICAgICAgLyogZGlzYWJsZWQgKi8KIH0KIHN0YXRpYyBzc2l6ZV90IHNldF9zZW5zb3Ioc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTQ5MywxMCArNDkzLDE1IEBACiAKIAlkYXRhLT5zZW5zb3IgJj0gfigxIDw8IG5yKTsKIAlkYXRhLT5zZW5zb3IgJj0gfig4IDw8IG5yKTsKLQkvKiAzID0gdGhlcm1hbCBkaW9kZTsgMiA9IHRoZXJtaXN0b3I7IDAgPSBkaXNhYmxlZCAqLworCWlmICh2YWwgPT0gMikgewkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworCQlkZXZfd2FybihkZXYsICJTZW5zb3IgdHlwZSAyIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgNCAiCisJCQkgImluc3RlYWRcbiIpOworCQl2YWwgPSA0OworCX0KKwkvKiAzID0gdGhlcm1hbCBkaW9kZTsgNCA9IHRoZXJtaXN0b3I7IDAgPSBkaXNhYmxlZCAqLwogCWlmICh2YWwgPT0gMykKIAkgICAgZGF0YS0+c2Vuc29yIHw9IDEgPDwgbnI7Ci0JZWxzZSBpZiAodmFsID09IDIpCisJZWxzZSBpZiAodmFsID09IDQpCiAJICAgIGRhdGEtPnNlbnNvciB8PSA4IDw8IG5yOwogCWVsc2UgaWYgKHZhbCAhPSAwKSB7CiAJCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc4LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzguYwppbmRleCBlZDc4NTlmLi5iNWUzYjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzguYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzguYwpAQCAtMTE0LDI1ICsxMTQsMTYgQEAKIAogI2RlZmluZSBESVZfRlJPTV9SRUcodmFsKSAoMSA8PCAodmFsKSkKIAotLyogVGhlcmUgYXJlIHNvbWUgY29tcGxpY2F0aW9ucyBpbiBhIG1vZHVsZSBsaWtlIHRoaXMuIEZpcnN0IG9mZiwgTE03OCBjaGlwcwotICAgbWF5IGJlIGJvdGggcHJlc2VudCBvbiB0aGUgU01CdXMgYW5kIHRoZSBJU0EgYnVzLCBhbmQgd2UgaGF2ZSB0byBoYW5kbGUKLSAgIHRob3NlIGNhc2VzIHNlcGFyYXRlbHkgYXQgc29tZSBwbGFjZXMuIFNlY29uZCwgdGhlcmUgbWlnaHQgYmUgc2V2ZXJhbAotICAgTE03OCBjaGlwcyBhdmFpbGFibGUgKHdlbGwsIGFjdHVhbGx5LCB0aGF0IGlzIHByb2JhYmx5IG5ldmVyIGRvbmU7IGJ1dAotICAgaXQgaXMgYSBjbGVhbiBpbGx1c3RyYXRpb24gb2YgaG93IHRvIGhhbmRsZSBhIGNhc2UgbGlrZSB0aGF0KS4gRmluYWxseSwKLSAgIGEgc3BlY2lmaWMgY2hpcCBtYXkgYmUgYXR0YWNoZWQgdG8gKmJvdGgqIElTQSBhbmQgU01CdXMsIGFuZCB3ZSB3b3VsZAotICAgbm90IGxpa2UgdG8gZGV0ZWN0IGl0IGRvdWJsZS4gRm9ydHVuYXRlbHksIGluIHRoZSBjYXNlIG9mIHRoZSBMTTc4IGF0Ci0gICBsZWFzdCwgYSByZWdpc3RlciB0ZWxscyB1cyB3aGF0IFNNQnVzIGFkZHJlc3Mgd2UgYXJlIG9uLCBzbyB0aGF0IGhlbHBzCi0gICBhIGJpdCAtIGV4Y2VwdCBpZiB0aGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lIFNNQnVzLiBHcm9hbi4gTm8gc29sdXRpb24KLSAgIGZvciB0aGlzIHlldC4gKi8KLQotLyogRm9yIElTQSBjaGlwcywgd2UgYWJ1c2UgdGhlIGkyY19jbGllbnQgYWRkciBhbmQgbmFtZSBmaWVsZHMuIFdlIGFsc28gdXNlCi0gICB0aGUgZHJpdmVyIGZpZWxkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBJMkMgYW5kIElTQSBjaGlwcy4gKi8KIHN0cnVjdCBsbTc4X2RhdGEgewotCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIAllbnVtIGNoaXBzIHR5cGU7CiAKKwkvKiBGb3IgSVNBIGRldmljZSBvbmx5ICovCisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgaXNhX2FkZHI7CisKIAlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCkBAIC0xNTEsOSArMTQyLDExIEBACiB9OwogCiAKLXN0YXRpYyBpbnQgbG03OF9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBsbTc4X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCk7Ci1zdGF0aWMgaW50IGxtNzhfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyBpbnQgbG03OF9pMmNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorCQkJICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKK3N0YXRpYyBpbnQgbG03OF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyBpbnQgbG03OF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBsbTc4X2lzYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIHN0YXRpYyBpbnQgX19kZXZleGl0IGxtNzhfaXNhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKQEAgLTE2NCwxMiArMTU3LDIzIEBACiBzdGF0aWMgdm9pZCBsbTc4X2luaXRfZGV2aWNlKHN0cnVjdCBsbTc4X2RhdGEgKmRhdGEpOwogCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsbTc4X2kyY19pZFtdID0geworCXsgImxtNzgiLCBsbTc4IH0sCisJeyAibG03OSIsIGxtNzkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbG03OF9pMmNfaWQpOworCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbG03OF9kcml2ZXIgPSB7CisJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJsbTc4IiwKIAl9LAotCS5hdHRhY2hfYWRhcHRlcgk9IGxtNzhfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQJPSBsbTc4X2RldGFjaF9jbGllbnQsCisJLnByb2JlCQk9IGxtNzhfaTJjX3Byb2JlLAorCS5yZW1vdmUJCT0gbG03OF9pMmNfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGxtNzhfaTJjX2lkLAorCS5kZXRlY3QJCT0gbG03OF9pMmNfZGV0ZWN0LAorCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbG03OF9pc2FfZHJpdmVyID0gewpAQCAtNDU0LDE3ICs0NTgsNiBAQAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4zX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxMSk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCA0KTsKIAotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbjoKLSAgICAgKiBsbTc4X2RyaXZlciBpcyBpbnNlcnRlZCAod2hlbiB0aGlzIG1vZHVsZSBpcyBsb2FkZWQpLCBmb3IgZWFjaAotICAgICAgIGF2YWlsYWJsZSBhZGFwdGVyCi0gICAgICogd2hlbiBhIG5ldyBhZGFwdGVyIGlzIGluc2VydGVkIChhbmQgbG03OF9kcml2ZXIgaXMgc3RpbGwgcHJlc2VudCkgKi8KLXN0YXRpYyBpbnQgbG03OF9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaWYgKCEoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfSFdNT04pKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGxtNzhfZGV0ZWN0KTsKLX0KLQogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtNzhfYXR0cmlidXRlc1tdID0gewogCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWluLmRldl9hdHRyLmF0dHIsCkBAIC01MjcsNTQgKzUyMCw3NyBAQAogewogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkYXRhLT5jbGllbnQubmFtZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOwogfQogc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCk7CiAKLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGkyY19wcm9iZSAqLwotc3RhdGljIGludCBsbTc4X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKKy8qIFJldHVybnMgMSBpZiB0aGUgSTJDIGNoaXAgYXBwZWFycyB0byBiZSBhbiBhbGlhcyBvZiB0aGUgSVNBIGNoaXAgKi8KK3N0YXRpYyBpbnQgbG03OF9hbGlhc19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY2hpcGlkKQogewotCWludCBpLCBlcnI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQ7Ci0Jc3RydWN0IGxtNzhfZGF0YSAqZGF0YTsKLQljb25zdCBjaGFyICpjbGllbnRfbmFtZSA9ICIiOworCXN0cnVjdCBsbTc4X2RhdGEgKmlzYTsKKwlpbnQgaTsKIAotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIEVSUk9SMTsKKwlpZiAoIXBkZXYpCS8qIE5vIElTQSBjaGlwICovCisJCXJldHVybiAwOworCWlzYSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGxtNzhfcmVhZF92YWx1ZShpc2EsIExNNzhfUkVHX0kyQ19BRERSKSAhPSBjbGllbnQtPmFkZHIpCisJCXJldHVybiAwOwkvKiBBZGRyZXNzIGRvZXNuJ3QgbWF0Y2ggKi8KKwlpZiAoKGxtNzhfcmVhZF92YWx1ZShpc2EsIExNNzhfUkVHX0NISVBJRCkgJiAweGZlKSAhPSAoY2hpcGlkICYgMHhmZSkpCisJCXJldHVybiAwOwkvKiBDaGlwIHR5cGUgZG9lc24ndCBtYXRjaCAqLworCisJLyogV2UgY29tcGFyZSBhbGwgdGhlIGxpbWl0IHJlZ2lzdGVycywgdGhlIGNvbmZpZyByZWdpc3RlciBhbmQgdGhlCisJICogaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMHgyYjsgaSA8PSAweDNkOyBpKyspIHsKKwkJaWYgKGxtNzhfcmVhZF92YWx1ZShpc2EsIGkpICE9CisJCSAgICBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBpKSkKKwkJCXJldHVybiAwOworCX0KKwlpZiAobG03OF9yZWFkX3ZhbHVlKGlzYSwgTE03OF9SRUdfQ09ORklHKSAhPQorCSAgICBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMTTc4X1JFR19DT05GSUcpKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAweDQzOyBpIDw9IDB4NDY7IGkrKykgeworCQlpZiAobG03OF9yZWFkX3ZhbHVlKGlzYSwgaSkgIT0KKwkJICAgIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGkpKQorCQkJcmV0dXJuIDA7CiAJfQogCi0JLyogT0suIEZvciBub3csIHdlIHByZXN1bWUgd2UgaGF2ZSBhIHZhbGlkIGNsaWVudC4gV2Ugbm93IGNyZWF0ZSB0aGUKLQkgICBjbGllbnQgc3RydWN0dXJlLCBldmVuIHRob3VnaCB3ZSBjYW5ub3QgZmlsbCBpdCBjb21wbGV0ZWx5IHlldC4KLQkgICBCdXQgaXQgYWxsb3dzIHVzIHRvIGFjY2VzcyBsbTc4X3tyZWFkLHdyaXRlfV92YWx1ZS4gKi8KKwlyZXR1cm4gMTsKK30KIAotCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG03OF9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gRVJST1IxOwotCX0KK3N0YXRpYyBpbnQgbG03OF9pMmNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorCQkJICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQoreworCWludCBpOworCXN0cnVjdCBsbTc4X2RhdGEgKmlzYSA9IHBkZXYgPyBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSA6IE5VTEw7CisJY29uc3QgY2hhciAqY2xpZW50X25hbWU7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOworCWludCBhZGRyZXNzID0gY2xpZW50LT5hZGRyOwogCi0JbmV3X2NsaWVudCA9ICZkYXRhLT5jbGllbnQ7Ci0JaTJjX3NldF9jbGllbnRkYXRhKG5ld19jbGllbnQsIGRhdGEpOwotCW5ld19jbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCW5ld19jbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCW5ld19jbGllbnQtPmRyaXZlciA9ICZsbTc4X2RyaXZlcjsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCi0JLyogTm93LCB3ZSBkbyB0aGUgcmVtYWluaW5nIGRldGVjdGlvbi4gKi8KKwkvKiBXZSBibG9jayB1cGRhdGVzIG9mIHRoZSBJU0EgZGV2aWNlIHRvIG1pbmltaXplIHRoZSByaXNrIG9mCisJICAgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIHNhbWUgTE03OCBjaGlwIHRocm91Z2ggZGlmZmVyZW50CisJICAgaW50ZXJmYWNlcy4gKi8KKwlpZiAoaXNhKQorCQltdXRleF9sb2NrKCZpc2EtPnVwZGF0ZV9sb2NrKTsKKwogCWlmIChraW5kIDwgMCkgewotCQlpZiAobG03OF9yZWFkX3ZhbHVlKGRhdGEsIExNNzhfUkVHX0NPTkZJRykgJiAweDgwKSB7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBFUlJPUjI7Ci0JCX0KLQkJaWYgKGxtNzhfcmVhZF92YWx1ZShkYXRhLCBMTTc4X1JFR19JMkNfQUREUikgIT0KLQkJICAgIGFkZHJlc3MpIHsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIEVSUk9SMjsKLQkJfQorCQlpZiAoKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExNNzhfUkVHX0NPTkZJRykgJiAweDgwKQorCQkgfHwgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTE03OF9SRUdfSTJDX0FERFIpCisJCSAgICAhPSBhZGRyZXNzKQorCQkJZ290byBlcnJfbm9kZXY7CisKKwkJLyogRXhwbGljaXRseSBwcmV2ZW50IHRoZSBtaXNkZXRlY3Rpb24gb2YgV2luYm9uZCBjaGlwcyAqLworCQlpID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHg0Zik7CisJCWlmIChpID09IDB4YTMgfHwgaSA9PSAweDVjKQorCQkJZ290byBlcnJfbm9kZXY7CiAJfQogCiAJLyogRGV0ZXJtaW5lIHRoZSBjaGlwIHR5cGUuICovCiAJaWYgKGtpbmQgPD0gMCkgewotCQlpID0gbG03OF9yZWFkX3ZhbHVlKGRhdGEsIExNNzhfUkVHX0NISVBJRCk7CisJCWkgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMTTc4X1JFR19DSElQSUQpOwogCQlpZiAoaSA9PSAweDAwIHx8IGkgPT0gMHgyMAkvKiBMTTc4ICovCiAJCSB8fCBpID09IDB4NDApCQkJLyogTE03OC1KICovCiAJCQlraW5kID0gbG03ODsKQEAgLTU4NiwzMyArNjAyLDU5IEBACiAJCQkJCSJwYXJhbWV0ZXIgZm9yIHVua25vd24gY2hpcCBhdCAiCiAJCQkJCSJhZGFwdGVyICVkLCBhZGRyZXNzIDB4JTAyeFxuIiwKIAkJCQkJaTJjX2FkYXB0ZXJfaWQoYWRhcHRlciksIGFkZHJlc3MpOwotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gRVJST1IyOworCQkJZ290byBlcnJfbm9kZXY7CisJCX0KKworCQlpZiAobG03OF9hbGlhc19kZXRlY3QoY2xpZW50LCBpKSkgeworCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRGV2aWNlIGF0IDB4JTAyeCBhcHBlYXJzIHRvICIKKwkJCQkiYmUgdGhlIHNhbWUgYXMgSVNBIGRldmljZVxuIiwgYWRkcmVzcyk7CisJCQlnb3RvIGVycl9ub2RldjsKIAkJfQogCX0KIAotCWlmIChraW5kID09IGxtNzgpIHsKLQkJY2xpZW50X25hbWUgPSAibG03OCI7Ci0JfSBlbHNlIGlmIChraW5kID09IGxtNzkpIHsKKwlpZiAoaXNhKQorCQltdXRleF91bmxvY2soJmlzYS0+dXBkYXRlX2xvY2spOworCisJc3dpdGNoIChraW5kKSB7CisJY2FzZSBsbTc5OgogCQljbGllbnRfbmFtZSA9ICJsbTc5IjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2xpZW50X25hbWUgPSAibG03OCI7CiAJfQorCXN0cmxjcHkoaW5mby0+dHlwZSwgY2xpZW50X25hbWUsIEkyQ19OQU1FX1NJWkUpOwogCi0JLyogRmlsbCBpbiB0aGUgcmVtYWluaW5nIGNsaWVudCBmaWVsZHMgYW5kIHB1dCBpbnRvIHRoZSBnbG9iYWwgbGlzdCAqLwotCXN0cmxjcHkobmV3X2NsaWVudC0+bmFtZSwgY2xpZW50X25hbWUsIEkyQ19OQU1FX1NJWkUpOwotCWRhdGEtPnR5cGUgPSBraW5kOworCXJldHVybiAwOwogCi0JLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwotCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQotCQlnb3RvIEVSUk9SMjsKKyBlcnJfbm9kZXY6CisJaWYgKGlzYSkKKwkJbXV0ZXhfdW5sb2NrKCZpc2EtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBsbTc4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGxtNzhfZGF0YSAqZGF0YTsKKwlpbnQgZXJyOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsbTc4X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CisJZGF0YS0+Y2xpZW50ID0gY2xpZW50OworCWRhdGEtPnR5cGUgPSBpZC0+ZHJpdmVyX2RhdGE7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBMTTc4IGNoaXAgKi8KIAlsbTc4X2luaXRfZGV2aWNlKGRhdGEpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTc4X2dyb3VwKSkpCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG03OF9ncm91cCk7CisJaWYgKGVycikKIAkJZ290byBFUlJPUjM7CiAKLQlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CisJZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKIAkJZ290byBFUlJPUjQ7CkBAIC02MjEsMjYgKzY2MywxOCBAQAogCXJldHVybiAwOwogCiBFUlJPUjQ6Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtNzhfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtNzhfZ3JvdXApOwogRVJST1IzOgotCWkyY19kZXRhY2hfY2xpZW50KG5ld19jbGllbnQpOwotRVJST1IyOgogCWtmcmVlKGRhdGEpOwotRVJST1IxOgogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbG03OF9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGxtNzhfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwogCiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTc4X2dyb3VwKTsKLQotCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCi0JCXJldHVybiBlcnI7Ci0KIAlrZnJlZShkYXRhKTsKIAogCXJldHVybiAwOwpAQCAtNjUxLDExICs2ODUsMTAgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JY29uc3QgY2hhciAqbmFtZTsKIAogCS8qIFJlc2VydmUgdGhlIElTQSByZWdpb24gKi8KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihyZXMtPnN0YXJ0LCBMTTc4X0VYVEVOVCwgImxtNzgiKSkgeworCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCArIExNNzhfQUREUl9SRUdfT0ZGU0VULCAyLCAibG03OCIpKSB7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBleGl0OwogCX0KQEAgLTY2NSwxOCArNjk4LDE2IEBACiAJCWdvdG8gZXhpdF9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7Ci0JZGF0YS0+Y2xpZW50LmFkZHIgPSByZXMtPnN0YXJ0OwotCWkyY19zZXRfY2xpZW50ZGF0YSgmZGF0YS0+Y2xpZW50LCBkYXRhKTsKKwlkYXRhLT5pc2FfYWRkciA9IHJlcy0+c3RhcnQ7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CiAKIAlpZiAobG03OF9yZWFkX3ZhbHVlKGRhdGEsIExNNzhfUkVHX0NISVBJRCkgJiAweDgwKSB7CiAJCWRhdGEtPnR5cGUgPSBsbTc5OwotCQluYW1lID0gImxtNzkiOworCQlkYXRhLT5uYW1lID0gImxtNzkiOwogCX0gZWxzZSB7CiAJCWRhdGEtPnR5cGUgPSBsbTc4OwotCQluYW1lID0gImxtNzgiOworCQlkYXRhLT5uYW1lID0gImxtNzgiOwogCX0KLQlzdHJsY3B5KGRhdGEtPmNsaWVudC5uYW1lLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIExNNzggY2hpcCAqLwogCWxtNzhfaW5pdF9kZXZpY2UoZGF0YSk7CkBAIC02OTksNyArNzMwLDcgQEAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOwogCWtmcmVlKGRhdGEpOwogIGV4aXRfcmVsZWFzZV9yZWdpb246Ci0JcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCwgTE03OF9FWFRFTlQpOworCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQgKyBMTTc4X0FERFJfUkVHX09GRlNFVCwgMik7CiAgZXhpdDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzA3LDEzICs3MzgsMTYgQEAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGxtNzhfaXNhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmxtNzhfZ3JvdXApOwogCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7Ci0JcmVsZWFzZV9yZWdpb24oZGF0YS0+Y2xpZW50LmFkZHIsIExNNzhfRVhURU5UKTsKIAlrZnJlZShkYXRhKTsKIAorCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0ICsgTE03OF9BRERSX1JFR19PRkZTRVQsIDIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcyNCwxMyArNzU4LDEzIEBACiAgICB3b3VsZCBzbG93IGRvd24gdGhlIExNNzggYWNjZXNzIGFuZCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4gICovCiBzdGF0aWMgaW50IGxtNzhfcmVhZF92YWx1ZShzdHJ1Y3QgbG03OF9kYXRhICpkYXRhLCB1OCByZWcpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKIAotCWlmICghY2xpZW50LT5kcml2ZXIpIHsgLyogSVNBIGRldmljZSAqLworCWlmICghY2xpZW50KSB7IC8qIElTQSBkZXZpY2UgKi8KIAkJaW50IHJlczsKIAkJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JCW91dGJfcChyZWcsIGNsaWVudC0+YWRkciArIExNNzhfQUREUl9SRUdfT0ZGU0VUKTsKLQkJcmVzID0gaW5iX3AoY2xpZW50LT5hZGRyICsgTE03OF9EQVRBX1JFR19PRkZTRVQpOworCQlvdXRiX3AocmVnLCBkYXRhLT5pc2FfYWRkciArIExNNzhfQUREUl9SRUdfT0ZGU0VUKTsKKwkJcmVzID0gaW5iX3AoZGF0YS0+aXNhX2FkZHIgKyBMTTc4X0RBVEFfUkVHX09GRlNFVCk7CiAJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJCXJldHVybiByZXM7CiAJfSBlbHNlCkBAIC03NDYsMTIgKzc4MCwxMiBAQAogICAgbm93aGVyZSBlbHNlIGJlIG5lY2Vzc2FyeSEgKi8KIHN0YXRpYyBpbnQgbG03OF93cml0ZV92YWx1ZShzdHJ1Y3QgbG03OF9kYXRhICpkYXRhLCB1OCByZWcsIHU4IHZhbHVlKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CiAKLQlpZiAoIWNsaWVudC0+ZHJpdmVyKSB7IC8qIElTQSBkZXZpY2UgKi8KKwlpZiAoIWNsaWVudCkgeyAvKiBJU0EgZGV2aWNlICovCiAJCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwotCQlvdXRiX3AocmVnLCBjbGllbnQtPmFkZHIgKyBMTTc4X0FERFJfUkVHX09GRlNFVCk7Ci0JCW91dGJfcCh2YWx1ZSwgY2xpZW50LT5hZGRyICsgTE03OF9EQVRBX1JFR19PRkZTRVQpOworCQlvdXRiX3AocmVnLCBkYXRhLT5pc2FfYWRkciArIExNNzhfQUREUl9SRUdfT0ZGU0VUKTsKKwkJb3V0Yl9wKHZhbHVlLCBkYXRhLT5pc2FfYWRkciArIExNNzhfREFUQV9SRUdfT0ZGU0VUKTsKIAkJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlCkBAIC04MzcsOCArODcxLDE3IEBACiB7CiAJaW50IHZhbCwgc2F2ZSwgZm91bmQgPSAwOwogCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihhZGRyZXNzLCBMTTc4X0VYVEVOVCwgImxtNzgiKSkKKwkvKiBXZSBoYXZlIHRvIHJlcXVlc3QgdGhlIHJlZ2lvbiBpbiB0d28gcGFydHMgYmVjYXVzZSBzb21lCisJICAgYm9hcmRzIGRlY2xhcmUgYmFzZSs0IHRvIGJhc2UrNyBhcyBhIFBOUCBkZXZpY2UgKi8KKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGFkZHJlc3MsIDQsICJsbTc4IikpIHsKKwkJcHJfZGVidWcoImxtNzg6IEZhaWxlZCB0byByZXF1ZXN0IGxvdyBwYXJ0IG9mIHJlZ2lvblxuIik7CiAJCXJldHVybiAwOworCX0KKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGFkZHJlc3MgKyA0LCA0LCAibG03OCIpKSB7CisJCXByX2RlYnVnKCJsbTc4OiBGYWlsZWQgdG8gcmVxdWVzdCBoaWdoIHBhcnQgb2YgcmVnaW9uXG4iKTsKKwkJcmVsZWFzZV9yZWdpb24oYWRkcmVzcywgNCk7CisJCXJldHVybiAwOworCX0KIAogI2RlZmluZSBSRUFMTFlfU0xPV19JTwogCS8qIFdlIG5lZWQgdGhlIHRpbWVvdXRzIGZvciBhdCBsZWFzdCBzb21lIExNNzgtbGlrZQpAQCAtOTAxLDcgKzk0NCw4IEBACiAJCQl2YWwgJiAweDgwID8gIkxNNzkiIDogIkxNNzgiLCAoaW50KWFkZHJlc3MpOwogCiAgcmVsZWFzZToKLQlyZWxlYXNlX3JlZ2lvbihhZGRyZXNzLCBMTTc4X0VYVEVOVCk7CisJcmVsZWFzZV9yZWdpb24oYWRkcmVzcyArIDQsIDQpOworCXJlbGVhc2VfcmVnaW9uKGFkZHJlc3MsIDQpOwogCXJldHVybiBmb3VuZDsKIH0KIApAQCAtOTQ5LDE0ICs5OTMsMTIgQEAKIHsKIAlpbnQgcmVzOwogCi0JcmVzID0gaTJjX2FkZF9kcml2ZXIoJmxtNzhfZHJpdmVyKTsKLQlpZiAocmVzKQotCQlnb3RvIGV4aXQ7Ci0KKwkvKiBXZSByZWdpc3RlciB0aGUgSVNBIGRldmljZSBmaXJzdCwgc28gdGhhdCB3ZSBjYW4gc2tpcCB0aGUKKwkgKiByZWdpc3RyYXRpb24gb2YgYW4gSTJDIGludGVyZmFjZSB0byB0aGUgc2FtZSBkZXZpY2UuICovCiAJaWYgKGxtNzhfaXNhX2ZvdW5kKGlzYV9hZGRyZXNzKSkgewogCQlyZXMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmxtNzhfaXNhX2RyaXZlcik7CiAJCWlmIChyZXMpCi0JCQlnb3RvIGV4aXRfdW5yZWdfaTJjX2RyaXZlcjsKKwkJCWdvdG8gZXhpdDsKIAogCQkvKiBTZXRzIGdsb2JhbCBwZGV2IGFzIGEgc2lkZSBlZmZlY3QgKi8KIAkJcmVzID0gbG03OF9pc2FfZGV2aWNlX2FkZChpc2FfYWRkcmVzcyk7CkBAIC05NjQsMTIgKzEwMDYsMTYgQEAKIAkJCWdvdG8gZXhpdF91bnJlZ19pc2FfZHJpdmVyOwogCX0KIAorCXJlcyA9IGkyY19hZGRfZHJpdmVyKCZsbTc4X2RyaXZlcik7CisJaWYgKHJlcykKKwkJZ290byBleGl0X3VucmVnX2lzYV9kZXZpY2U7CisKIAlyZXR1cm4gMDsKIAorIGV4aXRfdW5yZWdfaXNhX2RldmljZToKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKICBleGl0X3VucmVnX2lzYV9kcml2ZXI6CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmxtNzhfaXNhX2RyaXZlcik7Ci0gZXhpdF91bnJlZ19pMmNfZHJpdmVyOgotCWkyY19kZWxfZHJpdmVyKCZsbTc4X2RyaXZlcik7CiAgZXhpdDoKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTg1LmMgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwppbmRleCAxMmQ0NDZmLi4zZmYwMjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwpAQCAtNSw2ICs1LDcgQEAKICAgICBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgIFBoaWxpcCBQb2tvcm55IDxwcG9rb3JueUBwZW5ndWluY29tcHV0aW5nLmNvbT4KICAgICBDb3B5cmlnaHQgKGMpIDIwMDMgICAgICAgIE1hcmdpdCBTY2h1YmVydC1XaGlsZSA8bWFyZ2l0c3dAdC1vbmxpbmUuZGU+CiAgICAgQ29weXJpZ2h0IChjKSAyMDA0ICAgICAgICBKdXN0aW4gVGhpZXNzZW4gPGp0aGllc3NlbkBwZW5ndWluY29tcHV0aW5nLmNvbT4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCiAgICAgQ2hpcCBkZXRhaWxzIGF0CSAgICAgIDxodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9kcy9MTS9MTTg1LnBkZj4KIApAQCAtMTczLDQwICsxNzQsMzkgQEAKIHsKIAlpbnQgaTsKIAotCWlmIChyYW5nZSA+PSBsbTg1X3JhbmdlX21hcFsxNV0pCi0JCXJldHVybiAxNTsKLQogCS8qIEZpbmQgdGhlIGNsb3Nlc3QgbWF0Y2ggKi8KLQlmb3IgKGkgPSAxNDsgaSA+PSAwOyAtLWkpIHsKLQkJaWYgKHJhbmdlID49IGxtODVfcmFuZ2VfbWFwW2ldKSB7Ci0JCQlpZiAoKGxtODVfcmFuZ2VfbWFwW2kgKyAxXSAtIHJhbmdlKSA8Ci0JCQkJCShyYW5nZSAtIGxtODVfcmFuZ2VfbWFwW2ldKSkKLQkJCQlyZXR1cm4gaSArIDE7Ci0JCQlyZXR1cm4gaTsKLQkJfQorCWZvciAoaSA9IDA7IGkgPCAxNTsgKytpKSB7CisJCWlmIChyYW5nZSA8PSAobG04NV9yYW5nZV9tYXBbaV0gKyBsbTg1X3JhbmdlX21hcFtpICsgMV0pIC8gMikKKwkJCWJyZWFrOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBpOwogfQogI2RlZmluZSBSQU5HRV9GUk9NX1JFRyh2YWwpCWxtODVfcmFuZ2VfbWFwWyh2YWwpICYgMHgwZl0KIAogLyogVGhlc2UgYXJlIHRoZSBQV00gZnJlcXVlbmN5IGVuY29kaW5ncyAqLwotc3RhdGljIGNvbnN0IGludCBsbTg1X2ZyZXFfbWFwW10gPSB7IC8qIC4xIEh6ICovCi0JMTAwLCAxNTAsIDIzMCwgMzAwLCAzODAsIDQ3MCwgNjIwLCA5NDAKK3N0YXRpYyBjb25zdCBpbnQgbG04NV9mcmVxX21hcFs4XSA9IHsgLyogMSBIeiAqLworCTEwLCAxNSwgMjMsIDMwLCAzOCwgNDcsIDYxLCA5NAorfTsKK3N0YXRpYyBjb25zdCBpbnQgYWRtMTAyN19mcmVxX21hcFs4XSA9IHsgLyogMSBIeiAqLworCTExLCAxNSwgMjIsIDI5LCAzNSwgNDQsIDU5LCA4OAogfTsKIAotc3RhdGljIGludCBGUkVRX1RPX1JFRyhpbnQgZnJlcSkKK3N0YXRpYyBpbnQgRlJFUV9UT19SRUcoY29uc3QgaW50ICptYXAsIGludCBmcmVxKQogewogCWludCBpOwogCi0JaWYgKGZyZXEgPj0gbG04NV9mcmVxX21hcFs3XSkKLQkJcmV0dXJuIDc7CisJLyogRmluZCB0aGUgY2xvc2VzdCBtYXRjaCAqLwogCWZvciAoaSA9IDA7IGkgPCA3OyArK2kpCi0JCWlmIChmcmVxIDw9IGxtODVfZnJlcV9tYXBbaV0pCisJCWlmIChmcmVxIDw9IChtYXBbaV0gKyBtYXBbaSArIDFdKSAvIDIpCiAJCQlicmVhazsKIAlyZXR1cm4gaTsKIH0KLSNkZWZpbmUgRlJFUV9GUk9NX1JFRyh2YWwpCWxtODVfZnJlcV9tYXBbKHZhbCkgJiAweDA3XQorCitzdGF0aWMgaW50IEZSRVFfRlJPTV9SRUcoY29uc3QgaW50ICptYXAsIHU4IHJlZykKK3sKKwlyZXR1cm4gbWFwW3JlZyAmIDB4MDddOworfQogCiAvKiBTaW5jZSB3ZSBjYW4ndCB1c2Ugc3RyaW5ncywgSSdtIGFidXNpbmcgdGhlc2UgbnVtYmVycwogICogICB0byBzdGFuZCBpbiBmb3IgdGhlIGZvbGxvd2luZyBtZWFuaW5nczoKQEAgLTI3NSw3ICsyNzUsNiBAQAogCiBzdHJ1Y3QgbG04NV9hdXRvZmFuIHsKIAl1OCBjb25maWc7CS8qIFJlZ2lzdGVyIHZhbHVlICovCi0JdTggZnJlcTsJLyogUFdNIGZyZXF1ZW5jeSwgZW5jb2RlZCAqLwogCXU4IG1pbl9wd207CS8qIE1pbmltdW0gUFdNIHZhbHVlLCBlbmNvZGVkICovCiAJdTggbWluX29mZjsJLyogTWluIFBXTSBvciBPRkYgYmVsb3cgImxpbWl0IiwgZmxhZyAqLwogfTsKQEAgLTI4Myw4ICsyODIsOCBAQAogLyogRm9yIGVhY2ggcmVnaXN0ZXJlZCBjaGlwLCB3ZSBuZWVkIHRvIGtlZXAgc29tZSBkYXRhIGluIG1lbW9yeS4KICAgIFRoZSBzdHJ1Y3R1cmUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAqLwogc3RydWN0IGxtODVfZGF0YSB7Ci0Jc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwljb25zdCBpbnQgKmZyZXFfbWFwOwogCWVudW0gY2hpcHMgdHlwZTsKIAogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKQEAgLTMwMSw2ICszMDAsNyBAQAogCXUxNiBmYW5bNF07CQkvKiBSZWdpc3RlciB2YWx1ZSAqLwogCXUxNiBmYW5fbWluWzRdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KIAl1OCBwd21bM107CQkvKiBSZWdpc3RlciB2YWx1ZSAqLworCXU4IHB3bV9mcmVxWzNdOwkJLyogUmVnaXN0ZXIgZW5jb2RpbmcgKi8KIAl1OCB0ZW1wX2V4dFszXTsJCS8qIERlY29kZWQgdmFsdWVzICovCiAJdTggaW5fZXh0WzhdOwkJLyogRGVjb2RlZCB2YWx1ZXMgKi8KIAl1OCB2aWQ7CQkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KQEAgLTMxMCwyMiArMzEwLDQwIEBACiAJc3RydWN0IGxtODVfem9uZSB6b25lWzNdOwogfTsKIAotc3RhdGljIGludCBsbTg1X2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50IGxtODVfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsCi0JCQlpbnQga2luZCk7Ci1zdGF0aWMgaW50IGxtODVfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyBpbnQgbG04NV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCisJCSAgICAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOworc3RhdGljIGludCBsbTg1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IGxtODVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCiBzdGF0aWMgaW50IGxtODVfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpOwogc3RhdGljIHZvaWQgbG04NV93cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIGludCB2YWx1ZSk7CiBzdGF0aWMgc3RydWN0IGxtODVfZGF0YSAqbG04NV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtODVfaWRbXSA9IHsKKwl7ICJhZG0xMDI3IiwgYWRtMTAyNyB9LAorCXsgImFkdDc0NjMiLCBhZHQ3NDYzIH0sCisJeyAibG04NSIsIGFueV9jaGlwIH0sCisJeyAibG04NWIiLCBsbTg1YiB9LAorCXsgImxtODVjIiwgbG04NWMgfSwKKwl7ICJlbWM2ZDEwMCIsIGVtYzZkMTAwIH0sCisJeyAiZW1jNmQxMDEiLCBlbWM2ZDEwMCB9LAorCXsgImVtYzZkMTAyIiwgZW1jNmQxMDIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbG04NV9pZCk7CisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsbTg1X2RyaXZlciA9IHsKKwkuY2xhc3MJCT0gSTJDX0NMQVNTX0hXTU9OLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lICAgPSAibG04NSIsCiAJfSwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBsbTg1X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ICA9IGxtODVfZGV0YWNoX2NsaWVudCwKKwkucHJvYmUJCT0gbG04NV9wcm9iZSwKKwkucmVtb3ZlCQk9IGxtODVfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGxtODVfaWQsCisJLmRldGVjdAkJPSBsbTg1X2RldGVjdCwKKwkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKIH07CiAKIApAQCAtNTI4LDExICs1NDYsMzkgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtX2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKS0+aW5kZXg7CisJc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGxtODVfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBGUkVRX0ZST01fUkVHKGRhdGEtPmZyZXFfbWFwLAorCQkJCQkJICBkYXRhLT5wd21fZnJlcVtucl0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X3B3bV9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKS0+aW5kZXg7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbG04NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnB3bV9mcmVxW25yXSA9IEZSRVFfVE9fUkVHKGRhdGEtPmZyZXFfbWFwLCB2YWwpOworCWxtODVfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX1JBTkdFKG5yKSwKKwkJKGRhdGEtPnpvbmVbbnJdLnJhbmdlIDw8IDQpCisJCXwgZGF0YS0+cHdtX2ZyZXFbbnJdKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKICNkZWZpbmUgc2hvd19wd21fcmVnKG9mZnNldCkJCQkJCQlcCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0LCBTX0lSVUdPIHwgU19JV1VTUiwJCVwKIAkJc2hvd19wd20sIHNldF9wd20sIG9mZnNldCAtIDEpOwkJCQlcCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwJXAotCQlzaG93X3B3bV9lbmFibGUsIHNldF9wd21fZW5hYmxlLCBvZmZzZXQgLSAxKQorCQlzaG93X3B3bV9lbmFibGUsIHNldF9wd21fZW5hYmxlLCBvZmZzZXQgLSAxKTsJCVwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtIyNvZmZzZXQjI19mcmVxLCBTX0lSVUdPIHwgU19JV1VTUiwJXAorCQlzaG93X3B3bV9mcmVxLCBzZXRfcHdtX2ZyZXEsIG9mZnNldCAtIDEpCiAKIHNob3dfcHdtX3JlZygxKTsKIHNob3dfcHdtX3JlZygyKTsKQEAgLTc2MSwzMSArODA3LDYgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfcHdtX2F1dG9fcHdtX2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKS0+aW5kZXg7Ci0Jc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGxtODVfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBGUkVRX0ZST01fUkVHKGRhdGEtPmF1dG9mYW5bbnJdLmZyZXEpKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2V0X3B3bV9hdXRvX3B3bV9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKS0+aW5kZXg7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgbG04NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCWRhdGEtPmF1dG9mYW5bbnJdLmZyZXEgPSBGUkVRX1RPX1JFRyh2YWwpOwotCWxtODVfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX1JBTkdFKG5yKSwKLQkJKGRhdGEtPnpvbmVbbnJdLnJhbmdlIDw8IDQpCi0JCXwgZGF0YS0+YXV0b2Zhbltucl0uZnJlcSk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JcmV0dXJuIGNvdW50OwotfQotCiAjZGVmaW5lIHB3bV9hdXRvKG9mZnNldCkJCQkJCQlcCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfYXV0b19jaGFubmVscywJCQlcCiAJCVNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bV9hdXRvX2NoYW5uZWxzLAkJXApAQCAtNzk1LDEwICs4MTYsNyBAQAogCQlzZXRfcHdtX2F1dG9fcHdtX21pbiwgb2Zmc2V0IC0gMSk7CQkJXAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20jI29mZnNldCMjX2F1dG9fcHdtX21pbmN0bCwJCVwKIAkJU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtX2F1dG9fcHdtX21pbmN0bCwJCVwKLQkJc2V0X3B3bV9hdXRvX3B3bV9taW5jdGwsIG9mZnNldCAtIDEpOwkJCVwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtIyNvZmZzZXQjI19hdXRvX3B3bV9mcmVxLAkJCVwKLQkJU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtX2F1dG9fcHdtX2ZyZXEsCQlcCi0JCXNldF9wd21fYXV0b19wd21fZnJlcSwgb2Zmc2V0IC0gMSk7CisJCXNldF9wd21fYXV0b19wd21fbWluY3RsLCBvZmZzZXQgLSAxKQogCiBwd21fYXV0bygxKTsKIHB3bV9hdXRvKDIpOwpAQCAtODY3LDcgKzg4NSw3IEBACiAJCVRFTVBfRlJPTV9SRUcoZGF0YS0+em9uZVtucl0ubGltaXQpKTsKIAlsbTg1X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQUZBTl9SQU5HRShuciksCiAJCSgoZGF0YS0+em9uZVtucl0ucmFuZ2UgJiAweDBmKSA8PCA0KQotCQl8IChkYXRhLT5hdXRvZmFuW25yXS5mcmVxICYgMHgwNykpOworCQl8IChkYXRhLT5wd21fZnJlcVtucl0gJiAweDA3KSk7CiAKIC8qIFVwZGF0ZSB0ZW1wX2F1dG9faHlzdCBhbmQgdGVtcF9hdXRvX29mZiAqLwogCWRhdGEtPnpvbmVbbnJdLmh5c3QgPSBIWVNUX1RPX1JFRyhURU1QX0ZST01fUkVHKApAQCAtOTEwLDcgKzkyOCw3IEBACiAJCXZhbCAtIG1pbik7CiAJbG04NV93cml0ZV92YWx1ZShjbGllbnQsIExNODVfUkVHX0FGQU5fUkFOR0UobnIpLAogCQkoKGRhdGEtPnpvbmVbbnJdLnJhbmdlICYgMHgwZikgPDwgNCkKLQkJfCAoZGF0YS0+YXV0b2Zhbltucl0uZnJlcSAmIDB4MDcpKTsKKwkJfCAoZGF0YS0+cHdtX2ZyZXFbbnJdICYgMHgwNykpOwogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTk1NywxMyArOTc1LDYgQEAKIHRlbXBfYXV0bygyKTsKIHRlbXBfYXV0bygzKTsKIAotc3RhdGljIGludCBsbTg1X2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAoIShhZGFwdGVyLT5jbGFzcyAmIEkyQ19DTEFTU19IV01PTikpCi0JCXJldHVybiAwOwotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgbG04NV9kZXRlY3QpOwotfQotCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG04NV9hdHRyaWJ1dGVzW10gPSB7CiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCkBAIC05ODQsNiArOTk1LDkgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfZW5hYmxlLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19lbmFibGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfZnJlcS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9mcmVxLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2ZyZXEuZGV2X2F0dHIuYXR0ciwKIAogCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKQEAgLTEwMjYsOSArMTA0MCw2IEBACiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcHdtX21pbmN0bC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3B3bV9taW5jdGwuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wd21fbWluY3RsLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcHdtX2ZyZXEuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wd21fZnJlcS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3B3bV9mcmVxLmRldl9hdHRyLmF0dHIsCiAKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2F1dG9fdGVtcF9vZmYuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2F1dG9fdGVtcF9vZmYuZGV2X2F0dHIuYXR0ciwKQEAgLTExMDMsMTA5ICsxMTE0LDc0IEBACiAJCWRldl93YXJuKCZjbGllbnQtPmRldiwgIkRldmljZSBpcyBub3QgcmVhZHlcbiIpOwogfQogCi1zdGF0aWMgaW50IGxtODVfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsCi0JCWludCBraW5kKQorLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IGxtODVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAorCQkgICAgICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewotCWludCBjb21wYW55LCB2ZXJzdGVwOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IGxtODVfZGF0YSAqZGF0YTsKLQlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CisJaW50IGFkZHJlc3MgPSBjbGllbnQtPmFkZHI7CiAJY29uc3QgY2hhciAqdHlwZV9uYW1lOwogCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7CiAJCS8qIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBkbyBieXRlIEkvTyAqLwotCQlnb3RvIEVSUk9SMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLyogT0suIEZvciBub3csIHdlIHByZXN1bWUgd2UgaGF2ZSBhIHZhbGlkIGNsaWVudC4gV2Ugbm93IGNyZWF0ZSB0aGUKLQkgICBjbGllbnQgc3RydWN0dXJlLCBldmVuIHRob3VnaCB3ZSBjYW5ub3QgZmlsbCBpdCBjb21wbGV0ZWx5IHlldC4KLQkgICBCdXQgaXQgYWxsb3dzIHVzIHRvIGFjY2VzcyBsbTg1X3tyZWFkLHdyaXRlfV92YWx1ZS4gKi8KKwkvKiBJZiBhdXRvLWRldGVjdGluZywgZGV0ZXJtaW5lIHRoZSBjaGlwIHR5cGUgKi8KKwlpZiAoa2luZCA8IDApIHsKKwkJaW50IGNvbXBhbnkgPSBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19DT01QQU5ZKTsKKwkJaW50IHZlcnN0ZXAgPSBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19WRVJTVEVQKTsKIAotCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG04NV9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gRVJST1IwOwotCX0KKwkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRGV0ZWN0aW5nIGRldmljZSBhdCAweCUwMnggd2l0aCAiCisJCQkiQ09NUEFOWTogMHglMDJ4IGFuZCBWRVJTVEVQOiAweCUwMnhcbiIsCisJCQlhZGRyZXNzLCBjb21wYW55LCB2ZXJzdGVwKTsKIAotCWNsaWVudCA9ICZkYXRhLT5jbGllbnQ7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJmxtODVfZHJpdmVyOworCQkvKiBBbGwgc3VwcG9ydGVkIGNoaXBzIGhhdmUgdGhlIHZlcnNpb24gaW4gY29tbW9uICovCisJCWlmICgodmVyc3RlcCAmIExNODVfVkVSU1RFUF9WTUFTSykgIT0gTE04NV9WRVJTVEVQX0dFTkVSSUMpIHsKKwkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkF1dG9kZXRlY3Rpb24gZmFpbGVkOiAiCisJCQkJInVuc3VwcG9ydGVkIHZlcnNpb25cbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJa2luZCA9IGFueV9jaGlwOwogCi0JLyogTm93LCB3ZSBkbyB0aGUgcmVtYWluaW5nIGRldGVjdGlvbi4gKi8KLQotCWNvbXBhbnkgPSBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19DT01QQU5ZKTsKLQl2ZXJzdGVwID0gbG04NV9yZWFkX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfVkVSU1RFUCk7Ci0KLQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJEZXRlY3RpbmcgZGV2aWNlIGF0ICVkLDB4JTAyeCB3aXRoIgotCQkiIENPTVBBTlk6IDB4JTAyeCBhbmQgVkVSU1RFUDogMHglMDJ4XG4iLAotCQlpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIsCi0JCWNvbXBhbnksIHZlcnN0ZXApOwotCi0JLyogSWYgYXV0by1kZXRlY3RpbmcsIERldGVybWluZSB0aGUgY2hpcCB0eXBlLiAqLwotCWlmIChraW5kIDw9IDApIHsKLQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiQXV0b2RldGVjdGluZyBkZXZpY2UgYXQgJWQsMHglMDJ4IC4uLlxuIiwKLQkJCWkyY19hZGFwdGVyX2lkKGFkYXB0ZXIpLCBhZGRyZXNzKTsKLQkJaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX05BVElPTkFMCi0JCSAgICAmJiB2ZXJzdGVwID09IExNODVfVkVSU1RFUF9MTTg1QykgewotCQkJa2luZCA9IGxtODVjOwotCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX05BVElPTkFMCi0JCSAgICAmJiB2ZXJzdGVwID09IExNODVfVkVSU1RFUF9MTTg1QikgewotCQkJa2luZCA9IGxtODViOwotCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX05BVElPTkFMCi0JCSAgICAmJiAodmVyc3RlcCAmIExNODVfVkVSU1RFUF9WTUFTSykgPT0gTE04NV9WRVJTVEVQX0dFTkVSSUMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIlVucmVjb2duaXplZCB2ZXJzaW9uL3N0ZXBwaW5nIDB4JTAyeCIKLQkJCQkiIERlZmF1bHRpbmcgdG8gTE04NS5cbiIsIHZlcnN0ZXApOwotCQkJa2luZCA9IGFueV9jaGlwOwotCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX0FOQUxPR19ERVYKLQkJICAgICYmIHZlcnN0ZXAgPT0gTE04NV9WRVJTVEVQX0FETTEwMjcpIHsKLQkJCWtpbmQgPSBhZG0xMDI3OwotCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX0FOQUxPR19ERVYKLQkJICAgICYmICh2ZXJzdGVwID09IExNODVfVkVSU1RFUF9BRFQ3NDYzCi0JCQkgfHwgdmVyc3RlcCA9PSBMTTg1X1ZFUlNURVBfQURUNzQ2M0MpKSB7Ci0JCQlraW5kID0gYWR0NzQ2MzsKLQkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9BTkFMT0dfREVWCi0JCSAgICAmJiAodmVyc3RlcCAmIExNODVfVkVSU1RFUF9WTUFTSykgPT0gTE04NV9WRVJTVEVQX0dFTkVSSUMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIlVucmVjb2duaXplZCB2ZXJzaW9uL3N0ZXBwaW5nIDB4JTAyeCIKLQkJCQkiIERlZmF1bHRpbmcgdG8gR2VuZXJpYyBMTTg1LlxuIiwgdmVyc3RlcCk7Ci0JCQlraW5kID0gYW55X2NoaXA7Ci0JCX0gZWxzZSBpZiAoY29tcGFueSA9PSBMTTg1X0NPTVBBTllfU01TQwotCQkgICAgJiYgKHZlcnN0ZXAgPT0gTE04NV9WRVJTVEVQX0VNQzZEMTAwX0EwCi0JCQkgfHwgdmVyc3RlcCA9PSBMTTg1X1ZFUlNURVBfRU1DNkQxMDBfQTEpKSB7Ci0JCQkvKiBVbmZvcnR1bmF0ZWx5LCB3ZSBjYW4ndCB0ZWxsIGEgJzEwMCBmcm9tIGEgJzEwMQotCQkJICogZnJvbSB0aGUgcmVnaXN0ZXJzLiAgU2luY2UgYSAnMTAxIGlzIGEgJzEwMAotCQkJICogaW4gYSBwYWNrYWdlIHdpdGggZmV3ZXIgcGlucyBhbmQgdGhlcmVmb3JlIG5vCi0JCQkgKiAzLjNWLCAxLjVWIG9yIDEuOFYgaW5wdXRzLCBwZXJoYXBzIGlmIHRob3NlCi0JCQkgKiBpbnB1dHMgcmVhZCAwLCB0aGVuIGl0J3MgYSAnMTAxLgotCQkJICovCi0JCQlraW5kID0gZW1jNmQxMDA7Ci0JCX0gZWxzZSBpZiAoY29tcGFueSA9PSBMTTg1X0NPTVBBTllfU01TQwotCQkgICAgJiYgdmVyc3RlcCA9PSBMTTg1X1ZFUlNURVBfRU1DNkQxMDIpIHsKLQkJCWtpbmQgPSBlbWM2ZDEwMjsKLQkJfSBlbHNlIGlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9TTVNDCi0JCSAgICAmJiAodmVyc3RlcCAmIExNODVfVkVSU1RFUF9WTUFTSykgPT0gTE04NV9WRVJTVEVQX0dFTkVSSUMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgImxtODU6IERldGVjdGVkIFNNU0MgY2hpcFxuIik7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICJsbTg1OiBVbnJlY29nbml6ZWQgdmVyc2lvbi9zdGVwcGluZyAweCUwMngiCi0JCQkgICAgIiBEZWZhdWx0aW5nIHRvIEdlbmVyaWMgTE04NS5cbiIsIHZlcnN0ZXApOwotCQkJa2luZCA9IGFueV9jaGlwOwotCQl9IGVsc2UgaWYgKGtpbmQgPT0gYW55X2NoaXAKLQkJICAgICYmICh2ZXJzdGVwICYgTE04NV9WRVJTVEVQX1ZNQVNLKSA9PSBMTTg1X1ZFUlNURVBfR0VORVJJQykgewotCQkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAiR2VuZXJpYyBMTTg1IFZlcnNpb24gNiBkZXRlY3RlZFxuIik7Ci0JCQkvKiBMZWF2ZSBraW5kIGFzICJhbnlfY2hpcCIgKi8KLQkJfSBlbHNlIHsKLQkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkF1dG9kZXRlY3Rpb24gZmFpbGVkXG4iKTsKLQkJCS8qIE5vdCBhbiBMTTg1Li4uICovCi0JCQlpZiAoa2luZCA9PSBhbnlfY2hpcCkgeyAgLyogVXNlciB1c2VkIGZvcmNlPXgseSAqLwotCQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIkdlbmVyaWMgTE04NSBWZXJzaW9uIDYgbm90IgotCQkJCQkiIGZvdW5kIGF0ICVkLDB4JTAyeC4gVHJ5IGZvcmNlX2xtODVjLlxuIiwKLQkJCQkJaTJjX2FkYXB0ZXJfaWQoYWRhcHRlciksIGFkZHJlc3MpOworCQkvKiBOb3csIHJlZmluZSB0aGUgZGV0ZWN0aW9uICovCisJCWlmIChjb21wYW55ID09IExNODVfQ09NUEFOWV9OQVRJT05BTCkgeworCQkJc3dpdGNoICh2ZXJzdGVwKSB7CisJCQljYXNlIExNODVfVkVSU1RFUF9MTTg1QzoKKwkJCQlraW5kID0gbG04NWM7CisJCQkJYnJlYWs7CisJCQljYXNlIExNODVfVkVSU1RFUF9MTTg1QjoKKwkJCQlraW5kID0gbG04NWI7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQllcnIgPSAwOwotCQkJZ290byBFUlJPUjE7CisJCX0gZWxzZSBpZiAoY29tcGFueSA9PSBMTTg1X0NPTVBBTllfQU5BTE9HX0RFVikgeworCQkJc3dpdGNoICh2ZXJzdGVwKSB7CisJCQljYXNlIExNODVfVkVSU1RFUF9BRE0xMDI3OgorCQkJCWtpbmQgPSBhZG0xMDI3OworCQkJCWJyZWFrOworCQkJY2FzZSBMTTg1X1ZFUlNURVBfQURUNzQ2MzoKKwkJCWNhc2UgTE04NV9WRVJTVEVQX0FEVDc0NjNDOgorCQkJCWtpbmQgPSBhZHQ3NDYzOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gTE04NV9DT01QQU5ZX1NNU0MpIHsKKwkJCXN3aXRjaCAodmVyc3RlcCkgeworCQkJY2FzZSBMTTg1X1ZFUlNURVBfRU1DNkQxMDBfQTA6CisJCQljYXNlIExNODVfVkVSU1RFUF9FTUM2RDEwMF9BMToKKwkJCQkvKiBOb3RlOiB3ZSBjYW4ndCB0ZWxsIGEgJzEwMCBmcm9tIGEgJzEwMSAqLworCQkJCWtpbmQgPSBlbWM2ZDEwMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgTE04NV9WRVJTVEVQX0VNQzZEMTAyOgorCQkJCWtpbmQgPSBlbWM2ZDEwMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkF1dG9kZXRlY3Rpb24gZmFpbGVkOiAiCisJCQkJInVua25vd24gdmVuZG9yXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQogCi0JLyogRmlsbCBpbiB0aGUgY2hpcCBzcGVjaWZpYyBkcml2ZXIgdmFsdWVzICovCiAJc3dpdGNoIChraW5kKSB7CiAJY2FzZSBsbTg1YjoKIAkJdHlwZV9uYW1lID0gImxtODViIjsKQEAgLTEyMjgsMTYgKzEyMDQsMzYgQEAKIAlkZWZhdWx0OgogCQl0eXBlX25hbWUgPSAibG04NSI7CiAJfQotCXN0cmxjcHkoY2xpZW50LT5uYW1lLCB0eXBlX25hbWUsIEkyQ19OQU1FX1NJWkUpOworCXN0cmxjcHkoaW5mby0+dHlwZSwgdHlwZV9uYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAotCS8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzICovCi0JZGF0YS0+dHlwZSA9IGtpbmQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG04NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGxtODVfZGF0YSAqZGF0YTsKKwlpbnQgZXJyOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsbTg1X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CisJZGF0YS0+dHlwZSA9IGlkLT5kcml2ZXJfZGF0YTsKIAltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKLQkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCi0JZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKQotCQlnb3RvIEVSUk9SMTsKKwkvKiBGaWxsIGluIHRoZSBjaGlwIHNwZWNpZmljIGRyaXZlciB2YWx1ZXMgKi8KKwlzd2l0Y2ggKGRhdGEtPnR5cGUpIHsKKwljYXNlIGFkbTEwMjc6CisJY2FzZSBhZHQ3NDYzOgorCWNhc2UgZW1jNmQxMDA6CisJY2FzZSBlbWM2ZDEwMjoKKwkJZGF0YS0+ZnJlcV9tYXAgPSBhZG0xMDI3X2ZyZXFfbWFwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYXRhLT5mcmVxX21hcCA9IGxtODVfZnJlcV9tYXA7CisJfQogCiAJLyogU2V0IHRoZSBWUk0gdmVyc2lvbiAqLwogCWRhdGEtPnZybSA9IHZpZF93aGljaF92cm0oKTsKQEAgLTEyNDgsNDUgKzEyNDQsNDIgQEAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXApOwogCWlmIChlcnIpCi0JCWdvdG8gRVJST1IyOworCQlnb3RvIGVycl9rZnJlZTsKIAogCS8qIFRoZSBBRFQ3NDYzIGhhcyBhbiBvcHRpb25hbCBWUk0gMTAgbW9kZSB3aGVyZSBwaW4gMjEgaXMgdXNlZAogCSAgIGFzIGEgc2l4dGggZGlnaXRhbCBWSUQgaW5wdXQgcmF0aGVyIHRoYW4gYW4gYW5hbG9nIGlucHV0LiAqLwogCWRhdGEtPnZpZCA9IGxtODVfcmVhZF92YWx1ZShjbGllbnQsIExNODVfUkVHX1ZJRCk7Ci0JaWYgKCEoa2luZCA9PSBhZHQ3NDYzICYmIChkYXRhLT52aWQgJiAweDgwKSkpCisJaWYgKCEoZGF0YS0+dHlwZSA9PSBhZHQ3NDYzICYmIChkYXRhLT52aWQgJiAweDgwKSkpCiAJCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLAogCQkJCQkmbG04NV9ncm91cF9pbjQpKSkKLQkJCWdvdG8gRVJST1IzOworCQkJZ290byBlcnJfcmVtb3ZlX2ZpbGVzOwogCiAJLyogVGhlIEVNQzZEMTAwIGhhcyAzIGFkZGl0aW9uYWwgdm9sdGFnZSBpbnB1dHMgKi8KLQlpZiAoa2luZCA9PSBlbWM2ZDEwMCkKKwlpZiAoZGF0YS0+dHlwZSA9PSBlbWM2ZDEwMCkKIAkJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosCiAJCQkJCSZsbTg1X2dyb3VwX2luNTY3KSkpCi0JCQlnb3RvIEVSUk9SMzsKKwkJCWdvdG8gZXJyX3JlbW92ZV9maWxlczsKIAogCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOwogCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7Ci0JCWdvdG8gRVJST1IzOworCQlnb3RvIGVycl9yZW1vdmVfZmlsZXM7CiAJfQogCiAJcmV0dXJuIDA7CiAKIAkvKiBFcnJvciBvdXQgYW5kIGNsZWFudXAgY29kZSAqLwotIEVSUk9SMzoKKyBlcnJfcmVtb3ZlX2ZpbGVzOgogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXApOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXBfaW40KTsKLQlpZiAoa2luZCA9PSBlbWM2ZDEwMCkKKwlpZiAoZGF0YS0+dHlwZSA9PSBlbWM2ZDEwMCkKIAkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG04NV9ncm91cF9pbjU2Nyk7Ci0gRVJST1IyOgotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0gRVJST1IxOgorIGVycl9rZnJlZToKIAlrZnJlZShkYXRhKTsKLSBFUlJPUjA6CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBsbTg1X2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgbG04NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgbG04NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKQEAgLTEyOTQsNyArMTI4Nyw2IEBACiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG04NV9ncm91cF9pbjQpOwogCWlmIChkYXRhLT50eXBlID09IGVtYzZkMTAwKQogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg1X2dyb3VwX2luNTY3KTsKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwogCWtmcmVlKGRhdGEpOwogCXJldHVybiAwOwogfQpAQCAtMTQ4MSw3ICsxNDczLDcgQEAKIAkJCWRhdGEtPmF1dG9mYW5baV0uY29uZmlnID0KIAkJCSAgICBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX0NPTkZJRyhpKSk7CiAJCQl2YWwgPSBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX1JBTkdFKGkpKTsKLQkJCWRhdGEtPmF1dG9mYW5baV0uZnJlcSA9IHZhbCAmIDB4MDc7CisJCQlkYXRhLT5wd21fZnJlcVtpXSA9IHZhbCAmIDB4MDc7CiAJCQlkYXRhLT56b25lW2ldLnJhbmdlID0gdmFsID4+IDQ7CiAJCQlkYXRhLT5hdXRvZmFuW2ldLm1pbl9wd20gPQogCQkJICAgIGxtODVfcmVhZF92YWx1ZShjbGllbnQsIExNODVfUkVHX0FGQU5fTUlOUFdNKGkpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04Ny5jIGIvZHJpdmVycy9od21vbi9sbTg3LmMKaW5kZXggMjE5NzBmMC4uMmU0YTNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg3LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg3LmMKQEAgLTIxLDExICsyMSwxMCBAQAogICogICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTg3Lmh0bWwKICAqCiAgKiBTb21lIGZ1bmN0aW9ucyBzaGFyZSBwaW5zLCBzbyBub3QgYWxsIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGF0IHRoZSBzYW1lCi0gKiB0aW1lLiBXaGljaCBhcmUgZGVwZW5kcyBvbiB0aGUgaGFyZHdhcmUgc2V0dXAuIFRoaXMgZHJpdmVyIGFzc3VtZXMgdGhhdAotICogdGhlIEJJT1MgY29uZmlndXJlZCB0aGUgY2hpcCBjb3JyZWN0bHkuIEluIHRoYXQgcmVzcGVjdCwgaXQgIGRpZmZlcnMgZnJvbQotICogdGhlIG9yaWdpbmFsIGRyaXZlciAoZnJvbSBsbV9zZW5zb3JzIGZvciBMaW51eCAyLjQpLCB3aGljaCB3b3VsZCBmb3JjZSB0aGUKLSAqIExNODcgdG8gYW4gYXJiaXRyYXJ5LCBjb21waWxlLXRpbWUgY2hvc2VuIG1vZGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdHVhbAotICogY2hpcHNldCB3aXJpbmcuCisgKiB0aW1lLiBXaGljaCBhcmUgZGVwZW5kcyBvbiB0aGUgaGFyZHdhcmUgc2V0dXAuIFRoaXMgZHJpdmVyIG5vcm1hbGx5CisgKiBhc3N1bWVzIHRoYXQgZmlybXdhcmUgY29uZmlndXJlZCB0aGUgY2hpcCBjb3JyZWN0bHkuIFdoZXJlIHRoaXMgaXMgbm90CisgKiB0aGUgY2FzZSwgcGxhdGZvcm0gY29kZSBtdXN0IHNldCB0aGUgSTJDIGNsaWVudCdzIHBsYXRmb3JtX2RhdGEgdG8gcG9pbnQKKyAqIHRvIGEgdTggdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgY2hhbm5lbCByZWdpc3Rlci4KICAqIEZvciByZWZlcmVuY2UsIGhlcmUgaXMgdGhlIGxpc3Qgb2YgZXhjbHVzaXZlIGZ1bmN0aW9uczoKICAqICAtIGluMCtpbjUgKGRlZmF1bHQpIG9yIHRlbXAzCiAgKiAgLSBmYW4xIChkZWZhdWx0KSBvciBpbjYKQEAgLTE5OSw2ICsxOTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOyAvKiBJbiBqaWZmaWVzICovCiAKIAl1OCBjaGFubmVsOwkJLyogcmVnaXN0ZXIgdmFsdWUgKi8KKwl1OCBjb25maWc7CQkvKiBvcmlnaW5hbCByZWdpc3RlciB2YWx1ZSAqLwogCiAJdTggaW5bOF07CQkvKiByZWdpc3RlciB2YWx1ZSAqLwogCXU4IGluX21heFs4XTsJCS8qIHJlZ2lzdGVyIHZhbHVlICovCkBAIC04MzIsNiArODMyLDcgQEAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG04N19ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtODdfZ3JvdXBfb3B0KTsKIGV4aXRfZnJlZToKKwlsbTg3X3dyaXRlX3ZhbHVlKG5ld19jbGllbnQsIExNODdfUkVHX0NPTkZJRywgZGF0YS0+Y29uZmlnKTsKIAlrZnJlZShkYXRhKTsKIGV4aXQ6CiAJcmV0dXJuIGVycjsKQEAgLTg0MCwxMiArODQxLDE3IEBACiBzdGF0aWMgdm9pZCBsbTg3X2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGxtODdfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXU4IGNvbmZpZzsKIAotCWRhdGEtPmNoYW5uZWwgPSBsbTg3X3JlYWRfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19DSEFOTkVMX01PREUpOworCWlmIChjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCWRhdGEtPmNoYW5uZWwgPSAqKHU4ICopY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwkJbG04N193cml0ZV92YWx1ZShjbGllbnQsCisJCQkJIExNODdfUkVHX0NIQU5ORUxfTU9ERSwgZGF0YS0+Y2hhbm5lbCk7CisJfSBlbHNlIHsKKwkJZGF0YS0+Y2hhbm5lbCA9IGxtODdfcmVhZF92YWx1ZShjbGllbnQsIExNODdfUkVHX0NIQU5ORUxfTU9ERSk7CisJfQorCWRhdGEtPmNvbmZpZyA9IGxtODdfcmVhZF92YWx1ZShjbGllbnQsIExNODdfUkVHX0NPTkZJRykgJiAweDZGOwogCi0JY29uZmlnID0gbG04N19yZWFkX3ZhbHVlKGNsaWVudCwgTE04N19SRUdfQ09ORklHKTsKLQlpZiAoIShjb25maWcgJiAweDAxKSkgeworCWlmICghKGRhdGEtPmNvbmZpZyAmIDB4MDEpKSB7CiAJCWludCBpOwogCiAJCS8qIExpbWl0cyBhcmUgbGVmdCB1bmluaXRpYWxpemVkIGFmdGVyIHBvd2VyLXVwICovCkBAIC04NjcsMTEgKzg3MywxMSBAQAogCQkJbG04N193cml0ZV92YWx1ZShjbGllbnQsIExNODdfUkVHX0lOX01BWCgwKSwgMHhGRik7CiAJCX0KIAl9Ci0JaWYgKChjb25maWcgJiAweDgxKSAhPSAweDAxKSB7Ci0JCS8qIFN0YXJ0IG1vbml0b3JpbmcgKi8KKworCS8qIE1ha2Ugc3VyZSBTdGFydCBpcyBzZXQgYW5kIElOVCNfQ2xlYXIgaXMgY2xlYXIgKi8KKwlpZiAoKGRhdGEtPmNvbmZpZyAmIDB4MDkpICE9IDB4MDEpCiAJCWxtODdfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19DT05GSUcsCi0JCQkJIChjb25maWcgJiAweEY3KSB8IDB4MDEpOwotCX0KKwkJCQkgKGRhdGEtPmNvbmZpZyAmIDB4NzcpIHwgMHgwMSk7CiB9CiAKIHN0YXRpYyBpbnQgbG04N19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKQEAgLTg4Miw2ICs4ODgsNyBAQAogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODdfZ3JvdXApOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODdfZ3JvdXBfb3B0KTsKIAorCWxtODdfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19DT05GSUcsIGRhdGEtPmNvbmZpZyk7CiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTAuYyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCmluZGV4IGMyNGZlMzYuLjNlZGVlYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCkBAIC0xLDE0ICsxLDEyIEBACiAvKgogICogbG05MC5jIC0gUGFydCBvZiBsbV9zZW5zb3JzLCBMaW51eCBrZXJuZWwgbW9kdWxlcyBmb3IgaGFyZHdhcmUKICAqICAgICAgICAgIG1vbml0b3JpbmcKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA2ICBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4ICBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KICAqCiAgKiBCYXNlZCBvbiB0aGUgbG04MyBkcml2ZXIuIFRoZSBMTTkwIGlzIGEgc2Vuc29yIGNoaXAgbWFkZSBieSBOYXRpb25hbAogICogU2VtaWNvbmR1Y3Rvci4gSXQgcmVwb3J0cyB1cCB0byB0d28gdGVtcGVyYXR1cmVzIChpdHMgb3duIHBsdXMgdXAgdG8KICAqIG9uZSBleHRlcm5hbCBvbmUpIHdpdGggYSAwLjEyNSBkZWcgcmVzb2x1dGlvbiAoMSBkZWcgZm9yIGxvY2FsCi0gKiB0ZW1wZXJhdHVyZSkgYW5kIGEgMy00IGRlZyBhY2N1cmFjeS4gQ29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZQotICogb2J0YWluZWQgZnJvbSBOYXRpb25hbCdzIHdlYnNpdGUgYXQ6Ci0gKiAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL0xNL0xNOTAuaHRtbAorICogdGVtcGVyYXR1cmUpIGFuZCBhIDMtNCBkZWcgYWNjdXJhY3kuCiAgKgogICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgTE04OSBhbmQgTE05OSwgdHdvIG90aGVyIHNlbnNvciBjaGlwcwogICogbWFkZSBieSBOYXRpb25hbCBTZW1pY29uZHVjdG9yLiBCb3RoIGhhdmUgYW4gaW5jcmVhc2VkIHJlbW90ZQpAQCAtMTYsNDggKzE0LDM4IEBACiAgKiBhZGRpdGlvbmFsbHkgc2hpZnRzIHJlbW90ZSB0ZW1wZXJhdHVyZXMgKG1lYXN1cmVkIGFuZCBsaW1pdHMpIGJ5IDE2CiAgKiBkZWdyZWVzLCB3aGljaCBhbGxvd3MgZm9yIGhpZ2hlciB0ZW1wZXJhdHVyZXMgbWVhc3VyZW1lbnQuIFRoZQogICogZHJpdmVyIGRvZXNuJ3QgaGFuZGxlIGl0IHNpbmNlIGl0IGNhbiBiZSBkb25lIGVhc2lseSBpbiB1c2VyLXNwYWNlLgotICogQ29tcGxldGUgZGF0YXNoZWV0cyBjYW4gYmUgb2J0YWluZWQgZnJvbSBOYXRpb25hbCdzIHdlYnNpdGUgYXQ6Ci0gKiAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL0xNL0xNODkuaHRtbAotICogICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTk5Lmh0bWwKICAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGJvdGggY2hpcHMuCiAgKgogICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgTE04NiwgYW5vdGhlciBzZW5zb3IgY2hpcCBtYWRlIGJ5CiAgKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yLiBJdCBpcyBleGFjdGx5IHNpbWlsYXIgdG8gdGhlIExNOTAgZXhjZXB0IGl0CiAgKiBoYXMgYSBoaWdoZXIgYWNjdXJhY3kuCi0gKiBDb21wbGV0ZSBkYXRhc2hlZXQgY2FuIGJlIG9idGFpbmVkIGZyb20gTmF0aW9uYWwncyB3ZWJzaXRlIGF0OgotICogICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTg2Lmh0bWwKICAqCiAgKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBBRE0xMDMyLCBhIHNlbnNvciBjaGlwIG1hZGUgYnkgQW5hbG9nCiAgKiBEZXZpY2VzLiBUaGF0IGNoaXAgaXMgc2ltaWxhciB0byB0aGUgTE05MCwgd2l0aCBhIGZldyBkaWZmZXJlbmNlcwotICogdGhhdCBhcmUgbm90IGhhbmRsZWQgYnkgdGhpcyBkcml2ZXIuIENvbXBsZXRlIGRhdGFzaGVldCBjYW4gYmUKLSAqIG9idGFpbmVkIGZyb20gQW5hbG9nJ3Mgd2Vic2l0ZSBhdDoKLSAqICAgaHR0cDovL3d3dy5hbmFsb2cuY29tL2VuL3Byb2QvMCwyODc3LEFETTEwMzIsMDAuaHRtbAotICogQW1vbmcgb3RoZXJzLCBpdCBoYXMgYSBoaWdoZXIgYWNjdXJhY3kgdGhhbiB0aGUgTE05MCwgbXVjaCBsaWtlIHRoZQotICogTE04NiBkb2VzLgorICogdGhhdCBhcmUgbm90IGhhbmRsZWQgYnkgdGhpcyBkcml2ZXIuIEFtb25nIG90aGVycywgaXQgaGFzIGEgaGlnaGVyCisgKiBhY2N1cmFjeSB0aGFuIHRoZSBMTTkwLCBtdWNoIGxpa2UgdGhlIExNODYgZG9lcy4KICAqCiAgKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBNQVg2NjU3LCBNQVg2NjU4IGFuZCBNQVg2NjU5IHNlbnNvcgotICogY2hpcHMgbWFkZSBieSBNYXhpbS4gVGhlc2UgY2hpcHMgYXJlIHNpbWlsYXIgdG8gdGhlIExNODYuIENvbXBsZXRlCi0gKiBkYXRhc2hlZXQgY2FuIGJlIG9idGFpbmVkIGF0IE1heGltJ3Mgd2Vic2l0ZSBhdDoKLSAqICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzI1NzgKKyAqIGNoaXBzIG1hZGUgYnkgTWF4aW0uIFRoZXNlIGNoaXBzIGFyZSBzaW1pbGFyIHRvIHRoZSBMTTg2LgogICogTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgdGhyZWUKICAqIHZhcmlhbnRzLiBUaGUgZXh0cmEgYWRkcmVzcyBhbmQgZmVhdHVyZXMgb2YgdGhlIE1BWDY2NTkgYXJlIG5vdAogICogc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLiBUaGVzZSBjaGlwcyBsYWNrIHRoZSByZW1vdGUgdGVtcGVyYXR1cmUKICAqIG9mZnNldCBmZWF0dXJlLgogICoKKyAqIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIE1BWDY2NDYsIE1BWDY2NDcgYW5kIE1BWDY2NDkgY2hpcHMKKyAqIG1hZGUgYnkgTWF4aW0uICBUaGVzZSBhcmUgYWdhaW4gc2ltaWxhciB0byB0aGUgTE04NiwgYnV0IHRoZXkgdXNlCisgKiB1bnNpZ25lZCB0ZW1wZXJhdHVyZSB2YWx1ZXMgYW5kIGNhbiByZXBvcnQgdGVtcGVyYXR1cmVzIGZyb20gMCB0bworICogMTQ1IGRlZ3JlZXMuCisgKgogICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgTUFYNjY4MCBhbmQgTUFYNjY4MSwgdHdvIG90aGVyIHNlbnNvcgogICogY2hpcHMgbWFkZSBieSBNYXhpbS4gVGhlc2UgYXJlIHF1aXRlIHNpbWlsYXIgdG8gdGhlIG90aGVyIE1heGltCi0gKiBjaGlwcy4gQ29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZSBvYnRhaW5lZCBhdDoKLSAqICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzMzNzAKLSAqIFRoZSBNQVg2NjgwIGFuZCBNQVg2NjgxIG9ubHkgZGlmZmVyIGluIHRoZSBwaW5vdXQgc28gdGhleSBjYW4gYmUKLSAqIHRyZWF0ZWQgaWRlbnRpY2FsbHkuCisgKiBjaGlwcy4gVGhlIE1BWDY2ODAgYW5kIE1BWDY2ODEgb25seSBkaWZmZXIgaW4gdGhlIHBpbm91dCBzbyB0aGV5IGNhbgorICogYmUgdHJlYXRlZCBpZGVudGljYWxseS4KICAqCi0gKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBBRFQ3NDYxIGNoaXAgZnJvbSBBbmFsb2cgRGV2aWNlcyBidXQKLSAqIG9ubHkgaW4gaXRzICJjb21wYXRhYmlsaXR5IG1vZGUiLiBJZiBhbiBBRFQ3NDYxIGNoaXAgaXMgZm91bmQgYnV0Ci0gKiBpcyBjb25maWd1cmVkIGluIG5vbi1jb21wYXRpYmxlIG1vZGUgKHdoZXJlIGl0cyB0ZW1wZXJhdHVyZQotICogcmVnaXN0ZXIgdmFsdWVzIGFyZSBkZWNvZGVkIGRpZmZlcmVudGx5KSBpdCBpcyBpZ25vcmVkIGJ5IHRoaXMKLSAqIGRyaXZlci4gQ29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZSBvYnRhaW5lZCBmcm9tIEFuYWxvZydzIHdlYnNpdGUKLSAqIGF0OgotICogICBodHRwOi8vd3d3LmFuYWxvZy5jb20vZW4vcHJvZC8wLDI4NzcsQURUNzQ2MSwwMC5odG1sCisgKiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBBRFQ3NDYxIGNoaXAgZnJvbSBBbmFsb2cgRGV2aWNlcy4KKyAqIEl0J3Mgc3VwcG9ydGVkIGluIGJvdGggY29tcGF0aWJpbGl0eSBhbmQgZXh0ZW5kZWQgbW9kZS4gSXQgaXMgbW9zdGx5CisgKiBjb21wYXRpYmxlIHdpdGggTE05MCBleGNlcHQgZm9yIGEgZGF0YSBmb3JtYXQgZGlmZmVyZW5jZSBmb3IgdGhlCisgKiB0ZW1wZXJhdHVyZSB2YWx1ZSByZWdpc3RlcnMuCiAgKgogICogU2luY2UgdGhlIExNOTAgd2FzIHRoZSBmaXJzdCBjaGlwc2V0IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciwgbW9zdAogICogY29tbWVudHMgd2lsbCByZWZlciB0byB0aGlzIGNoaXBzZXQsIGJ1dCBhcmUgYWN0dWFsbHkgZ2VuZXJhbCBhbmQKQEAgLTkzLDkgKzgxLDEwIEBACiAgKiBBZGRyZXNzZXMgdG8gc2NhbgogICogQWRkcmVzcyBpcyBmdWxseSBkZWZpbmVkIGludGVybmFsbHkgYW5kIGNhbm5vdCBiZSBjaGFuZ2VkIGV4Y2VwdCBmb3IKICAqIE1BWDY2NTksIE1BWDY2ODAgYW5kIE1BWDY2ODEuCi0gKiBMTTg2LCBMTTg5LCBMTTkwLCBMTTk5LCBBRE0xMDMyLCBBRE0xMDMyLTEsIEFEVDc0NjEsIE1BWDY2NTcgYW5kIE1BWDY2NTgKLSAqIGhhdmUgYWRkcmVzcyAweDRjLgotICogQURNMTAzMi0yLCBBRFQ3NDYxLTIsIExNODktMSwgYW5kIExNOTktMSBoYXZlIGFkZHJlc3MgMHg0ZC4KKyAqIExNODYsIExNODksIExNOTAsIExNOTksIEFETTEwMzIsIEFETTEwMzItMSwgQURUNzQ2MSwgTUFYNjY0OSwgTUFYNjY1NworICogYW5kIE1BWDY2NTggaGF2ZSBhZGRyZXNzIDB4NGMuCisgKiBBRE0xMDMyLTIsIEFEVDc0NjEtMiwgTE04OS0xLCBMTTk5LTEgYW5kIE1BWDY2NDYgaGF2ZSBhZGRyZXNzIDB4NGQuCisgKiBNQVg2NjQ3IGhhcyBhZGRyZXNzIDB4NGUuCiAgKiBNQVg2NjU5IGNhbiBoYXZlIGFkZHJlc3MgMHg0YywgMHg0ZCBvciAweDRlICh1bnN1cHBvcnRlZCkuCiAgKiBNQVg2NjgwIGFuZCBNQVg2NjgxIGNhbiBoYXZlIGFkZHJlc3MgMHgxOCwgMHgxOSwgMHgxYSwgMHgyOSwgMHgyYSwgMHgyYiwKICAqIDB4NGMsIDB4NGQgb3IgMHg0ZS4KQEAgLTEwOCw3ICs5Nyw4IEBACiAgKiBJbnNtb2QgcGFyYW1ldGVycwogICovCiAKLUkyQ19DTElFTlRfSU5TTU9EXzcobG05MCwgYWRtMTAzMiwgbG05OSwgbG04NiwgbWF4NjY1NywgYWR0NzQ2MSwgbWF4NjY4MCk7CitJMkNfQ0xJRU5UX0lOU01PRF84KGxtOTAsIGFkbTEwMzIsIGxtOTksIGxtODYsIG1heDY2NTcsIGFkdDc0NjEsIG1heDY2ODAsCisJCSAgICBtYXg2NjQ2KTsKIAogLyoKICAqIFRoZSBMTTkwIHJlZ2lzdGVycwpAQCAtMTQ5LDM5ICsxMzksMTQgQEAKICNkZWZpbmUgTE05MF9SRUdfUl9UQ1JJVF9IWVNUCQkweDIxCiAjZGVmaW5lIExNOTBfUkVHX1dfVENSSVRfSFlTVAkJMHgyMQogCisvKiBNQVg2NjQ2LzY2NDcvNjY0OS82NjU3LzY2NTgvNjY1OSByZWdpc3RlcnMgKi8KKworI2RlZmluZSBNQVg2NjU3X1JFR19SX0xPQ0FMX1RFTVBMCTB4MTEKKwogLyoKLSAqIENvbnZlcnNpb25zIGFuZCB2YXJpb3VzIG1hY3JvcwotICogRm9yIGxvY2FsIHRlbXBlcmF0dXJlcyBhbmQgbGltaXRzLCBjcml0aWNhbCBsaW1pdHMgYW5kIHRoZSBoeXN0ZXJlc2lzCi0gKiB2YWx1ZSwgdGhlIExNOTAgdXNlcyBzaWduZWQgOC1iaXQgdmFsdWVzIHdpdGggTFNCID0gMSBkZWdyZWUgQ2Vsc2l1cy4KLSAqIEZvciByZW1vdGUgdGVtcGVyYXR1cmVzIGFuZCBsaW1pdHMsIGl0IHVzZXMgc2lnbmVkIDExLWJpdCB2YWx1ZXMgd2l0aAotICogTFNCID0gMC4xMjUgZGVncmVlIENlbHNpdXMsIGxlZnQtanVzdGlmaWVkIGluIDE2LWJpdCByZWdpc3RlcnMuCisgKiBEZXZpY2UgZmxhZ3MKICAqLwotCi0jZGVmaW5lIFRFTVAxX0ZST01fUkVHKHZhbCkJKCh2YWwpICogMTAwMCkKLSNkZWZpbmUgVEVNUDFfVE9fUkVHKHZhbCkJKCh2YWwpIDw9IC0xMjgwMDAgPyAtMTI4IDogXAotCQkJCSAodmFsKSA+PSAxMjcwMDAgPyAxMjcgOiBcCi0JCQkJICh2YWwpIDwgMCA/ICgodmFsKSAtIDUwMCkgLyAxMDAwIDogXAotCQkJCSAoKHZhbCkgKyA1MDApIC8gMTAwMCkKLSNkZWZpbmUgVEVNUDJfRlJPTV9SRUcodmFsKQkoKHZhbCkgLyAzMiAqIDEyNSkKLSNkZWZpbmUgVEVNUDJfVE9fUkVHKHZhbCkJKCh2YWwpIDw9IC0xMjgwMDAgPyAweDgwMDAgOiBcCi0JCQkJICh2YWwpID49IDEyNzg3NSA/IDB4N0ZFMCA6IFwKLQkJCQkgKHZhbCkgPCAwID8gKCh2YWwpIC0gNjIpIC8gMTI1ICogMzIgOiBcCi0JCQkJICgodmFsKSArIDYyKSAvIDEyNSAqIDMyKQotI2RlZmluZSBIWVNUX1RPX1JFRyh2YWwpCSgodmFsKSA8PSAwID8gMCA6ICh2YWwpID49IDMwNTAwID8gMzEgOiBcCi0JCQkJICgodmFsKSArIDUwMCkgLyAxMDAwKQotCi0vKiAKLSAqIEFEVDc0NjEgaXMgYWxtb3N0IGlkZW50aWNhbCB0byBMTTkwIGV4Y2VwdCB0aGF0IGF0dGVtcHRzIHRvIHdyaXRlCi0gKiB2YWx1ZXMgdGhhdCBhcmUgb3V0c2lkZSB0aGUgcmFuZ2UgMCA8IHRlbXAgPCAxMjcgYXJlIHRyZWF0ZWQgYXMKLSAqIHRoZSBib3VuZGFyeSB2YWx1ZS4gCi0gKi8KLQotI2RlZmluZSBURU1QMV9UT19SRUdfQURUNzQ2MSh2YWwpICgodmFsKSA8PSAwID8gMCA6IFwKLQkJCQkgKHZhbCkgPj0gMTI3MDAwID8gMTI3IDogXAotCQkJCSAoKHZhbCkgKyA1MDApIC8gMTAwMCkKLSNkZWZpbmUgVEVNUDJfVE9fUkVHX0FEVDc0NjEodmFsKSAoKHZhbCkgPD0gMCA/IDAgOiBcCi0JCQkJICh2YWwpID49IDEyNzc1MCA/IDB4N0ZDMCA6IFwKLQkJCQkgKCh2YWwpICsgMTI1KSAvIDI1MCAqIDY0KQorI2RlZmluZSBMTTkwX0ZMQUdfQURUNzQ2MV9FWFQJCTB4MDEJLyogQURUNzQ2MSBleHRlbmRlZCBtb2RlICovCiAKIC8qCiAgKiBGdW5jdGlvbnMgZGVjbGFyYXRpb24KQEAgLTIwNiw2ICsxNzEsOSBAQAogCXsgImxtODYiLCBsbTg2IH0sCiAJeyAibG04OSIsIGxtOTkgfSwKIAl7ICJsbTk5IiwgbG05OSB9LAkvKiBNaXNzaW5nIHRlbXBlcmF0dXJlIG9mZnNldCAqLworCXsgIm1heDY2NDYiLCBtYXg2NjQ2IH0sCisJeyAibWF4NjY0NyIsIG1heDY2NDYgfSwKKwl7ICJtYXg2NjQ5IiwgbWF4NjY0NiB9LAogCXsgIm1heDY2NTciLCBtYXg2NjU3IH0sCiAJeyAibWF4NjY1OCIsIG1heDY2NTcgfSwKIAl7ICJtYXg2NjU5IiwgbWF4NjY1NyB9LApAQCAtMjM3LDIyICsyMDUsMTUwIEBACiAJY2hhciB2YWxpZDsgLyogemVybyB1bnRpbCBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOyAvKiBpbiBqaWZmaWVzICovCiAJaW50IGtpbmQ7CisJaW50IGZsYWdzOwogCiAJLyogcmVnaXN0ZXJzIHZhbHVlcyAqLwotCXM4IHRlbXA4WzVdOwkvKiAwOiBsb2NhbCBpbnB1dAotCQkJICAgMTogbG9jYWwgbG93IGxpbWl0Ci0JCQkgICAyOiBsb2NhbCBoaWdoIGxpbWl0Ci0JCQkgICAzOiBsb2NhbCBjcml0aWNhbCBsaW1pdAotCQkJICAgNDogcmVtb3RlIGNyaXRpY2FsIGxpbWl0ICovCi0JczE2IHRlbXAxMVs0XTsJLyogMDogcmVtb3RlIGlucHV0CisJczggdGVtcDhbNF07CS8qIDA6IGxvY2FsIGxvdyBsaW1pdAorCQkJICAgMTogbG9jYWwgaGlnaCBsaW1pdAorCQkJICAgMjogbG9jYWwgY3JpdGljYWwgbGltaXQKKwkJCSAgIDM6IHJlbW90ZSBjcml0aWNhbCBsaW1pdCAqLworCXMxNiB0ZW1wMTFbNV07CS8qIDA6IHJlbW90ZSBpbnB1dAogCQkJICAgMTogcmVtb3RlIGxvdyBsaW1pdAogCQkJICAgMjogcmVtb3RlIGhpZ2ggbGltaXQKLQkJCSAgIDM6IHJlbW90ZSBvZmZzZXQgKGV4Y2VwdCBtYXg2NjU3KSAqLworCQkJICAgMzogcmVtb3RlIG9mZnNldCAoZXhjZXB0IG1heDY2NDYgYW5kIG1heDY2NTcpCisJCQkgICA0OiBsb2NhbCBpbnB1dCAqLwogCXU4IHRlbXBfaHlzdDsKIAl1OCBhbGFybXM7IC8qIGJpdHZlY3RvciAqLwogfTsKIAogLyoKKyAqIENvbnZlcnNpb25zCisgKiBGb3IgbG9jYWwgdGVtcGVyYXR1cmVzIGFuZCBsaW1pdHMsIGNyaXRpY2FsIGxpbWl0cyBhbmQgdGhlIGh5c3RlcmVzaXMKKyAqIHZhbHVlLCB0aGUgTE05MCB1c2VzIHNpZ25lZCA4LWJpdCB2YWx1ZXMgd2l0aCBMU0IgPSAxIGRlZ3JlZSBDZWxzaXVzLgorICogRm9yIHJlbW90ZSB0ZW1wZXJhdHVyZXMgYW5kIGxpbWl0cywgaXQgdXNlcyBzaWduZWQgMTEtYml0IHZhbHVlcyB3aXRoCisgKiBMU0IgPSAwLjEyNSBkZWdyZWUgQ2Vsc2l1cywgbGVmdC1qdXN0aWZpZWQgaW4gMTYtYml0IHJlZ2lzdGVycy4gIFNvbWUKKyAqIE1heGltIGNoaXBzIHVzZSB1bnNpZ25lZCB2YWx1ZXMuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgdGVtcF9mcm9tX3M4KHM4IHZhbCkKK3sKKwlyZXR1cm4gdmFsICogMTAwMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVtcF9mcm9tX3U4KHU4IHZhbCkKK3sKKwlyZXR1cm4gdmFsICogMTAwMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVtcF9mcm9tX3MxNihzMTYgdmFsKQoreworCXJldHVybiB2YWwgLyAzMiAqIDEyNTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVtcF9mcm9tX3UxNih1MTYgdmFsKQoreworCXJldHVybiB2YWwgLyAzMiAqIDEyNTsKK30KKworc3RhdGljIHM4IHRlbXBfdG9fczgobG9uZyB2YWwpCit7CisJaWYgKHZhbCA8PSAtMTI4MDAwKQorCQlyZXR1cm4gLTEyODsKKwlpZiAodmFsID49IDEyNzAwMCkKKwkJcmV0dXJuIDEyNzsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuICh2YWwgLSA1MDApIC8gMTAwMDsKKwlyZXR1cm4gKHZhbCArIDUwMCkgLyAxMDAwOworfQorCitzdGF0aWMgdTggdGVtcF90b191OChsb25nIHZhbCkKK3sKKwlpZiAodmFsIDw9IDApCisJCXJldHVybiAwOworCWlmICh2YWwgPj0gMjU1MDAwKQorCQlyZXR1cm4gMjU1OworCXJldHVybiAodmFsICsgNTAwKSAvIDEwMDA7Cit9CisKK3N0YXRpYyBzMTYgdGVtcF90b19zMTYobG9uZyB2YWwpCit7CisJaWYgKHZhbCA8PSAtMTI4MDAwKQorCQlyZXR1cm4gMHg4MDAwOworCWlmICh2YWwgPj0gMTI3ODc1KQorCQlyZXR1cm4gMHg3RkUwOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gKHZhbCAtIDYyKSAvIDEyNSAqIDMyOworCXJldHVybiAodmFsICsgNjIpIC8gMTI1ICogMzI7Cit9CisKK3N0YXRpYyB1OCBoeXN0X3RvX3JlZyhsb25nIHZhbCkKK3sKKwlpZiAodmFsIDw9IDApCisJCXJldHVybiAwOworCWlmICh2YWwgPj0gMzA1MDApCisJCXJldHVybiAzMTsKKwlyZXR1cm4gKHZhbCArIDUwMCkgLyAxMDAwOworfQorCisvKgorICogQURUNzQ2MSBpbiBjb21wYXRpYmlsaXR5IG1vZGUgaXMgYWxtb3N0IGlkZW50aWNhbCB0byBMTTkwIGV4Y2VwdCB0aGF0CisgKiBhdHRlbXB0cyB0byB3cml0ZSB2YWx1ZXMgdGhhdCBhcmUgb3V0c2lkZSB0aGUgcmFuZ2UgMCA8IHRlbXAgPCAxMjcgYXJlCisgKiB0cmVhdGVkIGFzIHRoZSBib3VuZGFyeSB2YWx1ZS4KKyAqCisgKiBBRFQ3NDYxIGluICJleHRlbmRlZCBtb2RlIiBvcGVyYXRpb24gdXNlcyB1bnNpZ25lZCBpbnRlZ2VycyBvZmZzZXQgYnkKKyAqIDY0IChlLmcuLCAwIC0+IC02NCBkZWdDKS4gIFRoZSByYW5nZSBpcyByZXN0cmljdGVkIHRvIC02NC4uMTkxIGRlZ0MuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRlbXBfZnJvbV91OF9hZHQ3NDYxKHN0cnVjdCBsbTkwX2RhdGEgKmRhdGEsIHU4IHZhbCkKK3sKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBMTTkwX0ZMQUdfQURUNzQ2MV9FWFQpCisJCXJldHVybiAodmFsIC0gNjQpICogMTAwMDsKKwllbHNlCisJCXJldHVybiB0ZW1wX2Zyb21fczgodmFsKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVtcF9mcm9tX3UxNl9hZHQ3NDYxKHN0cnVjdCBsbTkwX2RhdGEgKmRhdGEsIHUxNiB2YWwpCit7CisJaWYgKGRhdGEtPmZsYWdzICYgTE05MF9GTEFHX0FEVDc0NjFfRVhUKQorCQlyZXR1cm4gKHZhbCAtIDB4NDAwMCkgLyA2NCAqIDI1MDsKKwllbHNlCisJCXJldHVybiB0ZW1wX2Zyb21fczE2KHZhbCk7Cit9CisKK3N0YXRpYyB1OCB0ZW1wX3RvX3U4X2FkdDc0NjEoc3RydWN0IGxtOTBfZGF0YSAqZGF0YSwgbG9uZyB2YWwpCit7CisJaWYgKGRhdGEtPmZsYWdzICYgTE05MF9GTEFHX0FEVDc0NjFfRVhUKSB7CisJCWlmICh2YWwgPD0gLTY0MDAwKQorCQkJcmV0dXJuIDA7CisJCWlmICh2YWwgPj0gMTkxMDAwKQorCQkJcmV0dXJuIDB4RkY7CisJCXJldHVybiAodmFsICsgNTAwICsgNjQwMDApIC8gMTAwMDsKKwl9IGVsc2UgeworCQlpZiAodmFsIDw9IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKHZhbCA+PSAxMjcwMDApCisJCQlyZXR1cm4gMTI3OworCQlyZXR1cm4gKHZhbCArIDUwMCkgLyAxMDAwOworCX0KK30KKworc3RhdGljIHUxNiB0ZW1wX3RvX3UxNl9hZHQ3NDYxKHN0cnVjdCBsbTkwX2RhdGEgKmRhdGEsIGxvbmcgdmFsKQoreworCWlmIChkYXRhLT5mbGFncyAmIExNOTBfRkxBR19BRFQ3NDYxX0VYVCkgeworCQlpZiAodmFsIDw9IC02NDAwMCkKKwkJCXJldHVybiAwOworCQlpZiAodmFsID49IDE5MTc1MCkKKwkJCXJldHVybiAweEZGQzA7CisJCXJldHVybiAodmFsICsgNjQwMDAgKyAxMjUpIC8gMjUwICogNjQ7CisJfSBlbHNlIHsKKwkJaWYgKHZhbCA8PSAwKQorCQkJcmV0dXJuIDA7CisJCWlmICh2YWwgPj0gMTI3NzUwKQorCQkJcmV0dXJuIDB4N0ZDMDsKKwkJcmV0dXJuICh2YWwgKyAxMjUpIC8gMjUwICogNjQ7CisJfQorfQorCisvKgogICogU3lzZnMgc3R1ZmYKICAqLwogCkBAIC0yNjEsNyArMzU3LDE2IEBACiB7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBsbTkwX2RhdGEgKmRhdGEgPSBsbTkwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDFfRlJPTV9SRUcoZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKSk7CisJaW50IHRlbXA7CisKKwlpZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxKQorCQl0ZW1wID0gdGVtcF9mcm9tX3U4X2FkdDc0NjEoZGF0YSwgZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKTsKKwllbHNlIGlmIChkYXRhLT5raW5kID09IG1heDY2NDYpCisJCXRlbXAgPSB0ZW1wX2Zyb21fdTgoZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKTsKKwllbHNlCisJCXRlbXAgPSB0ZW1wX2Zyb21fczgoZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2V0X3RlbXA4KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCkBAIC0yODIsMTAgKzM4NywxMiBAQAogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWlmIChkYXRhLT5raW5kID09IGFkdDc0NjEpCi0JCWRhdGEtPnRlbXA4W25yXSA9IFRFTVAxX1RPX1JFR19BRFQ3NDYxKHZhbCk7CisJCWRhdGEtPnRlbXA4W25yXSA9IHRlbXBfdG9fdThfYWR0NzQ2MShkYXRhLCB2YWwpOworCWVsc2UgaWYgKGRhdGEtPmtpbmQgPT0gbWF4NjY0NikKKwkJZGF0YS0+dGVtcDhbbnJdID0gdGVtcF90b191OCh2YWwpOwogCWVsc2UKLQkJZGF0YS0+dGVtcDhbbnJdID0gVEVNUDFfVE9fUkVHKHZhbCk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ1tuciAtIDFdLCBkYXRhLT50ZW1wOFtucl0pOworCQlkYXRhLT50ZW1wOFtucl0gPSB0ZW1wX3RvX3M4KHZhbCk7CisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ1tucl0sIGRhdGEtPnRlbXA4W25yXSk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMjk1LDcgKzQwMiwxNiBAQAogewogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3QgbG05MF9kYXRhICpkYXRhID0gbG05MF91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVAyX0ZST01fUkVHKGRhdGEtPnRlbXAxMVthdHRyLT5pbmRleF0pKTsKKwlpbnQgdGVtcDsKKworCWlmIChkYXRhLT5raW5kID09IGFkdDc0NjEpCisJCXRlbXAgPSB0ZW1wX2Zyb21fdTE2X2FkdDc0NjEoZGF0YSwgZGF0YS0+dGVtcDExW2F0dHItPmluZGV4XSk7CisJZWxzZSBpZiAoZGF0YS0+a2luZCA9PSBtYXg2NjQ2KQorCQl0ZW1wID0gdGVtcF9mcm9tX3UxNihkYXRhLT50ZW1wMTFbYXR0ci0+aW5kZXhdKTsKKwllbHNlCisJCXRlbXAgPSB0ZW1wX2Zyb21fczE2KGRhdGEtPnRlbXAxMVthdHRyLT5pbmRleF0pOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXApOwogfQogCiBzdGF0aWMgc3NpemVfdCBzZXRfdGVtcDExKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCkBAIC0zMTgsMTMgKzQzNCwyMCBAQAogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWlmIChkYXRhLT5raW5kID09IGFkdDc0NjEpCi0JCWRhdGEtPnRlbXAxMVtucl0gPSBURU1QMl9UT19SRUdfQURUNzQ2MSh2YWwpOworCQlkYXRhLT50ZW1wMTFbbnJdID0gdGVtcF90b191MTZfYWR0NzQ2MShkYXRhLCB2YWwpOworCWVsc2UgaWYgKGRhdGEtPmtpbmQgPT0gbWF4NjY1NyB8fCBkYXRhLT5raW5kID09IG1heDY2ODApCisJCWRhdGEtPnRlbXAxMVtucl0gPSB0ZW1wX3RvX3M4KHZhbCkgPDwgODsKKwllbHNlIGlmIChkYXRhLT5raW5kID09IG1heDY2NDYpCisJCWRhdGEtPnRlbXAxMVtucl0gPSB0ZW1wX3RvX3U4KHZhbCkgPDwgODsKIAllbHNlCi0JCWRhdGEtPnRlbXAxMVtucl0gPSBURU1QMl9UT19SRUcodmFsKTsKKwkJZGF0YS0+dGVtcDExW25yXSA9IHRlbXBfdG9fczE2KHZhbCk7CisKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnWyhuciAtIDEpICogMl0sCiAJCQkJICBkYXRhLT50ZW1wMTFbbnJdID4+IDgpOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdbKG5yIC0gMSkgKiAyICsgMV0sCi0JCQkJICBkYXRhLT50ZW1wMTFbbnJdICYgMHhmZik7CisJaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NyAmJiBkYXRhLT5raW5kICE9IG1heDY2ODAKKwkgICAgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjQ2KQorCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnWyhuciAtIDEpICogMiArIDFdLAorCQkJCQkgIGRhdGEtPnRlbXAxMVtucl0gJiAweGZmKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0zMzQsOCArNDU3LDE0IEBACiB7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBsbTkwX2RhdGEgKmRhdGEgPSBsbTkwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDFfRlJPTV9SRUcoZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKQotCQkgICAgICAgLSBURU1QMV9GUk9NX1JFRyhkYXRhLT50ZW1wX2h5c3QpKTsKKwlpbnQgdGVtcDsKKworCWlmIChkYXRhLT5raW5kID09IGFkdDc0NjEpCisJCXRlbXAgPSB0ZW1wX2Zyb21fdThfYWR0NzQ2MShkYXRhLCBkYXRhLT50ZW1wOFthdHRyLT5pbmRleF0pOworCWVsc2UKKwkJdGVtcCA9IHRlbXBfZnJvbV9zOChkYXRhLT50ZW1wOFthdHRyLT5pbmRleF0pOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXAgLSB0ZW1wX2Zyb21fczgoZGF0YS0+dGVtcF9oeXN0KSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNldF90ZW1waHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkdW1teSwKQEAgLTM0Nyw5ICs0NzYsOSBAQAogCWxvbmcgaHlzdDsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQloeXN0ID0gVEVNUDFfRlJPTV9SRUcoZGF0YS0+dGVtcDhbM10pIC0gdmFsOworCWh5c3QgPSB0ZW1wX2Zyb21fczgoZGF0YS0+dGVtcDhbMl0pIC0gdmFsOwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTkwX1JFR19XX1RDUklUX0hZU1QsCi0JCQkJICBIWVNUX1RPX1JFRyhoeXN0KSk7CisJCQkJICBoeXN0X3RvX3JlZyhoeXN0KSk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMzcxLDIzICs1MDAsMjMgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKGRhdGEtPmFsYXJtcyA+PiBiaXRucikgJiAxKTsKIH0KIAotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wOCwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAxMSwgTlVMTCwgNCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAxMSwgTlVMTCwgMCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDgsCi0Jc2V0X3RlbXA4LCAxKTsKKwlzZXRfdGVtcDgsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAxMSwKIAlzZXRfdGVtcDExLCAxKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wOCwKLQlzZXRfdGVtcDgsIDIpOworCXNldF90ZW1wOCwgMSk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDExLAogCXNldF90ZW1wMTEsIDIpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wOCwKLQlzZXRfdGVtcDgsIDMpOworCXNldF90ZW1wOCwgMik7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXA4LAotCXNldF90ZW1wOCwgNCk7CisJc2V0X3RlbXA4LCAzKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdF9oeXN0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1waHlzdCwKLQlzZXRfdGVtcGh5c3QsIDMpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0X2h5c3QsIFNfSVJVR08sIHNob3dfdGVtcGh5c3QsIE5VTEwsIDQpOworCXNldF90ZW1waHlzdCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXRfaHlzdCwgU19JUlVHTywgc2hvd190ZW1waHlzdCwgTlVMTCwgMyk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX29mZnNldCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDExLAogCXNldF90ZW1wMTEsIDMpOwogCkBAIC01NjgsNyArNjk3LDcgQEAKIAkJCQlraW5kID0gYWRtMTAzMjsKIAkJCX0gZWxzZQogCQkJaWYgKGNoaXBfaWQgPT0gMHg1MSAvKiBBRFQ3NDYxICovCi0JCQkgJiYgKHJlZ19jb25maWcxICYgMHgxRikgPT0gMHgwMCAvKiBjaGVjayBjb21wYXQgbW9kZSAqLworCQkJICYmIChyZWdfY29uZmlnMSAmIDB4MUIpID09IDB4MDAKIAkJCSAmJiByZWdfY29udnJhdGUgPD0gMHgwQSkgewogCQkJCWtpbmQgPSBhZHQ3NDYxOwogCQkJfQpAQCAtNTk5LDEzICs3MjgsMjMgQEAKIAkJCSAmJiAocmVnX2NvbmZpZzEgJiAweDAzKSA9PSAweDAwCiAJCQkgJiYgcmVnX2NvbnZyYXRlIDw9IDB4MDcpIHsKIAkJCSAJa2luZCA9IG1heDY2ODA7CisJCQl9IGVsc2UKKwkJCS8qIFRoZSBjaGlwX2lkIHJlZ2lzdGVyIG9mIHRoZSBNQVg2NjQ2LzY2NDcvNjY0OQorCQkJICogaG9sZHMgdGhlIHJldmlzaW9uIG9mIHRoZSBjaGlwLgorCQkJICogVGhlIGxvd2VzdCA2IGJpdHMgb2YgdGhlIGNvbmZpZzEgcmVnaXN0ZXIgYXJlCisJCQkgKiB1bnVzZWQgYW5kIHNob3VsZCByZXR1cm4gemVybyB3aGVuIHJlYWQuCisJCQkgKi8KKwkJCWlmIChjaGlwX2lkID09IDB4NTkKKwkJCSAmJiAocmVnX2NvbmZpZzEgJiAweDNmKSA9PSAweDAwCisJCQkgJiYgcmVnX2NvbnZyYXRlIDw9IDB4MDcpIHsKKwkJCQlraW5kID0gbWF4NjY0NjsKIAkJCX0KIAkJfQogCiAJCWlmIChraW5kIDw9IDApIHsgLyogaWRlbnRpZmljYXRpb24gZmFpbGVkICovCi0JCQlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LAotCQkJICAgICJVbnN1cHBvcnRlZCBjaGlwIChtYW5faWQ9MHglMDJYLCAiCi0JCQkgICAgImNoaXBfaWQ9MHglMDJYKS5cbiIsIG1hbl9pZCwgY2hpcF9pZCk7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsCisJCQkJIlVuc3VwcG9ydGVkIGNoaXAgYXQgMHglMDJ4IChtYW5faWQ9MHglMDJYLCAiCisJCQkJImNoaXBfaWQ9MHglMDJYKVxuIiwgYWRkcmVzcywgbWFuX2lkLCBjaGlwX2lkKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQpAQCAtNjI5LDYgKzc2OCw4IEBACiAJCW5hbWUgPSAibWF4NjY4MCI7CiAJfSBlbHNlIGlmIChraW5kID09IGFkdDc0NjEpIHsKIAkJbmFtZSA9ICJhZHQ3NDYxIjsKKwl9IGVsc2UgaWYgKGtpbmQgPT0gbWF4NjY0NikgeworCQluYW1lID0gIm1heDY2NDYiOwogCX0KIAlzdHJsY3B5KGluZm8tPnR5cGUsIG5hbWUsIEkyQ19OQU1FX1NJWkUpOwogCkBAIC02NjgsNyArODA5LDcgQEAKIAkJCQkJICAgICAgJmRldl9hdHRyX3BlYykpKQogCQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKIAl9Ci0JaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NykgeworCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcgJiYgZGF0YS0+a2luZCAhPSBtYXg2NjQ2KSB7CiAJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCiAJCQkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9vZmZzZXQuZGV2X2F0dHIpKSkKIAkJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CkBAIC03MDcsNiArODQ4LDEyIEBACiAJfQogCWNvbmZpZ19vcmlnID0gY29uZmlnOwogCisJLyogQ2hlY2sgVGVtcGVyYXR1cmUgUmFuZ2UgU2VsZWN0ICovCisJaWYgKGRhdGEtPmtpbmQgPT0gYWR0NzQ2MSkgeworCQlpZiAoY29uZmlnICYgMHgwNCkKKwkJCWRhdGEtPmZsYWdzIHw9IExNOTBfRkxBR19BRFQ3NDYxX0VYVDsKKwl9CisKIAkvKgogCSAqIFB1dCBNQVg2NjgwL01BWDg4ODEgaW50byBleHRlbmRlZCByZXNvbHV0aW9uIChiaXQgMHgxMCwKIAkgKiAwLjEyNSBkZWdyZWUgcmVzb2x1dGlvbikgYW5kIHJhbmdlICgweDA4LCBleHRlbmQgcmFuZ2UKQEAgLTcyOCw3ICs4NzUsNyBAQAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG05MF9ncm91cCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3BlYyk7Ci0JaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NykKKwlpZiAoZGF0YS0+a2luZCAhPSBtYXg2NjU3ICYmIGRhdGEtPmtpbmQgIT0gbWF4NjY0NikKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwKIAkJCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX29mZnNldC5kZXZfYXR0cik7CiAKQEAgLTczNiw2ICs4ODMsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBsbTkwX3JlYWQxNihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWdoLCB1OCByZWdsLCB1MTYgKnZhbHVlKQoreworCWludCBlcnI7CisJdTggb2xkaCwgbmV3aCwgbDsKKworCS8qCisJICogVGhlcmUgaXMgYSB0cmljayBoZXJlLiBXZSBoYXZlIHRvIHJlYWQgdHdvIHJlZ2lzdGVycyB0byBoYXZlIHRoZQorCSAqIHNlbnNvciB0ZW1wZXJhdHVyZSwgYnV0IHdlIGhhdmUgdG8gYmV3YXJlIGEgY29udmVyc2lvbiBjb3VsZCBvY2N1cgorCSAqIGluYmV0d2VlbiB0aGUgcmVhZGluZ3MuIFRoZSBkYXRhc2hlZXQgc2F5cyB3ZSBzaG91bGQgZWl0aGVyIHVzZQorCSAqIHRoZSBvbmUtc2hvdCBjb252ZXJzaW9uIHJlZ2lzdGVyLCB3aGljaCB3ZSBkb24ndCB3YW50IHRvIGRvCisJICogKGRpc2FibGVzIGhhcmR3YXJlIG1vbml0b3JpbmcpIG9yIG1vbml0b3IgdGhlIGJ1c3kgYml0LCB3aGljaCBpcworCSAqIGltcG9zc2libGUgKHdlIGNhbid0IHJlYWQgdGhlIHZhbHVlcyBhbmQgbW9uaXRvciB0aGF0IGJpdCBhdCB0aGUKKwkgKiBleGFjdCBzYW1lIHRpbWUpLiBTbyB0aGUgc29sdXRpb24gdXNlZCBoZXJlIGlzIHRvIHJlYWQgdGhlIGhpZ2gKKwkgKiBieXRlIG9uY2UsIHRoZW4gdGhlIGxvdyBieXRlLCB0aGVuIHRoZSBoaWdoIGJ5dGUgYWdhaW4uIElmIHRoZSBuZXcKKwkgKiBoaWdoIGJ5dGUgbWF0Y2hlcyB0aGUgb2xkIG9uZSwgdGhlbiB3ZSBoYXZlIGEgdmFsaWQgcmVhZGluZy4gRWxzZQorCSAqIHdlIGhhdmUgdG8gcmVhZCB0aGUgbG93IGJ5dGUgYWdhaW4sIGFuZCBub3cgd2UgYmVsaWV2ZSB3ZSBoYXZlIGEKKwkgKiBjb3JyZWN0IHJlYWRpbmcuCisJICovCisJaWYgKChlcnIgPSBsbTkwX3JlYWRfcmVnKGNsaWVudCwgcmVnaCwgJm9sZGgpKQorCSB8fCAoZXJyID0gbG05MF9yZWFkX3JlZyhjbGllbnQsIHJlZ2wsICZsKSkKKwkgfHwgKGVyciA9IGxtOTBfcmVhZF9yZWcoY2xpZW50LCByZWdoLCAmbmV3aCkpKQorCQlyZXR1cm4gZXJyOworCWlmIChvbGRoICE9IG5ld2gpIHsKKwkJZXJyID0gbG05MF9yZWFkX3JlZyhjbGllbnQsIHJlZ2wsICZsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCSp2YWx1ZSA9IChuZXdoIDw8IDgpIHwgbDsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGxtOTBfZGF0YSAqbG05MF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwpAQCAtNzQ0LDQ5ICs5MjMsNTAgQEAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiAqIDIpIHx8ICFkYXRhLT52YWxpZCkgewotCQl1OCBvbGRoLCBuZXdoLCBsOworCQl1OCBoLCBsOwogCiAJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiVXBkYXRpbmcgbG05MCBkYXRhLlxuIik7Ci0JCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX1RFTVAsICZkYXRhLT50ZW1wOFswXSk7Ci0JCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX0xPVywgJmRhdGEtPnRlbXA4WzFdKTsKLQkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfTE9DQUxfSElHSCwgJmRhdGEtPnRlbXA4WzJdKTsKLQkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfTE9DQUxfQ1JJVCwgJmRhdGEtPnRlbXA4WzNdKTsKLQkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX0NSSVQsICZkYXRhLT50ZW1wOFs0XSk7CisJCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX0xPVywgJmRhdGEtPnRlbXA4WzBdKTsKKwkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfTE9DQUxfSElHSCwgJmRhdGEtPnRlbXA4WzFdKTsKKwkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfTE9DQUxfQ1JJVCwgJmRhdGEtPnRlbXA4WzJdKTsKKwkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX0NSSVQsICZkYXRhLT50ZW1wOFszXSk7CiAJCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1RDUklUX0hZU1QsICZkYXRhLT50ZW1wX2h5c3QpOwogCi0JCS8qCi0JCSAqIFRoZXJlIGlzIGEgdHJpY2sgaGVyZS4gV2UgaGF2ZSB0byByZWFkIHR3byByZWdpc3RlcnMgdG8KLQkJICogaGF2ZSB0aGUgcmVtb3RlIHNlbnNvciB0ZW1wZXJhdHVyZSwgYnV0IHdlIGhhdmUgdG8gYmV3YXJlCi0JCSAqIGEgY29udmVyc2lvbiBjb3VsZCBvY2N1ciBpbmJldHdlZW4gdGhlIHJlYWRpbmdzLiBUaGUKLQkJICogZGF0YXNoZWV0IHNheXMgd2Ugc2hvdWxkIGVpdGhlciB1c2UgdGhlIG9uZS1zaG90Ci0JCSAqIGNvbnZlcnNpb24gcmVnaXN0ZXIsIHdoaWNoIHdlIGRvbid0IHdhbnQgdG8gZG8gKGRpc2FibGVzCi0JCSAqIGhhcmR3YXJlIG1vbml0b3JpbmcpIG9yIG1vbml0b3IgdGhlIGJ1c3kgYml0LCB3aGljaCBpcwotCQkgKiBpbXBvc3NpYmxlICh3ZSBjYW4ndCByZWFkIHRoZSB2YWx1ZXMgYW5kIG1vbml0b3IgdGhhdCBiaXQKLQkJICogYXQgdGhlIGV4YWN0IHNhbWUgdGltZSkuIFNvIHRoZSBzb2x1dGlvbiB1c2VkIGhlcmUgaXMgdG8KLQkJICogcmVhZCB0aGUgaGlnaCBieXRlIG9uY2UsIHRoZW4gdGhlIGxvdyBieXRlLCB0aGVuIHRoZSBoaWdoCi0JCSAqIGJ5dGUgYWdhaW4uIElmIHRoZSBuZXcgaGlnaCBieXRlIG1hdGNoZXMgdGhlIG9sZCBvbmUsCi0JCSAqIHRoZW4gd2UgaGF2ZSBhIHZhbGlkIHJlYWRpbmcuIEVsc2Ugd2UgaGF2ZSB0byByZWFkIHRoZSBsb3cKLQkJICogYnl0ZSBhZ2FpbiwgYW5kIG5vdyB3ZSBiZWxpZXZlIHdlIGhhdmUgYSBjb3JyZWN0IHJlYWRpbmcuCi0JCSAqLwotCQlpZiAobG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX1RFTVBILCAmb2xkaCkgPT0gMAotCQkgJiYgbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX1RFTVBMLCAmbCkgPT0gMAotCQkgJiYgbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX1RFTVBILCAmbmV3aCkgPT0gMAotCQkgJiYgKG5ld2ggPT0gb2xkaAotCQkgIHx8IGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9URU1QTCwgJmwpID09IDApKQotCQkJZGF0YS0+dGVtcDExWzBdID0gKG5ld2ggPDwgOCkgfCBsOworCQlpZiAoZGF0YS0+a2luZCA9PSBtYXg2NjU3IHx8IGRhdGEtPmtpbmQgPT0gbWF4NjY0NikgeworCQkJbG05MF9yZWFkMTYoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX1RFTVAsCisJCQkJICAgIE1BWDY2NTdfUkVHX1JfTE9DQUxfVEVNUEwsCisJCQkJICAgICZkYXRhLT50ZW1wMTFbNF0pOworCQl9IGVsc2UgeworCQkJaWYgKGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX0xPQ0FMX1RFTVAsCisJCQkJCSAgJmgpID09IDApCisJCQkJZGF0YS0+dGVtcDExWzRdID0gaCA8PCA4OworCQl9CisJCWxtOTBfcmVhZDE2KGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfVEVNUEgsCisJCQkgICAgTE05MF9SRUdfUl9SRU1PVEVfVEVNUEwsICZkYXRhLT50ZW1wMTFbMF0pOwogCi0JCWlmIChsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfTE9XSCwgJm5ld2gpID09IDAKLQkJICYmIGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9MT1dMLCAmbCkgPT0gMCkKLQkJCWRhdGEtPnRlbXAxMVsxXSA9IChuZXdoIDw8IDgpIHwgbDsKLQkJaWYgKGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9ISUdISCwgJm5ld2gpID09IDAKLQkJICYmIGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9ISUdITCwgJmwpID09IDApCi0JCQlkYXRhLT50ZW1wMTFbMl0gPSAobmV3aCA8PCA4KSB8IGw7Ci0JCWlmIChkYXRhLT5raW5kICE9IG1heDY2NTcpIHsKKwkJaWYgKGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9MT1dILCAmaCkgPT0gMCkgeworCQkJZGF0YS0+dGVtcDExWzFdID0gaCA8PCA4OworCQkJaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NyAmJiBkYXRhLT5raW5kICE9IG1heDY2ODAKKwkJCSAmJiBkYXRhLT5raW5kICE9IG1heDY2NDYKKwkJCSAmJiBsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfTE9XTCwKKwkJCQkJICAmbCkgPT0gMCkKKwkJCQlkYXRhLT50ZW1wMTFbMV0gfD0gbDsKKwkJfQorCQlpZiAobG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX0hJR0hILCAmaCkgPT0gMCkgeworCQkJZGF0YS0+dGVtcDExWzJdID0gaCA8PCA4OworCQkJaWYgKGRhdGEtPmtpbmQgIT0gbWF4NjY1NyAmJiBkYXRhLT5raW5kICE9IG1heDY2ODAKKwkJCSAmJiBkYXRhLT5raW5kICE9IG1heDY2NDYKKwkJCSAmJiBsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9SRU1PVEVfSElHSEwsCisJCQkJCSAgJmwpID09IDApCisJCQkJZGF0YS0+dGVtcDExWzJdIHw9IGw7CisJCX0KKworCQlpZiAoZGF0YS0+a2luZCAhPSBtYXg2NjU3ICYmIGRhdGEtPmtpbmQgIT0gbWF4NjY0NikgewogCQkJaWYgKGxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1JFTU9URV9PRkZTSCwKLQkJCQkJICAmbmV3aCkgPT0gMAorCQkJCQkgICZoKSA9PSAwCiAJCQkgJiYgbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfUkVNT1RFX09GRlNMLAogCQkJCQkgICZsKSA9PSAwKQotCQkJCWRhdGEtPnRlbXAxMVszXSA9IChuZXdoIDw8IDgpIHwgbDsKKwkJCQlkYXRhLT50ZW1wMTFbM10gPSAoaCA8PCA4KSB8IGw7CiAJCX0KIAkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfU1RBVFVTLCAmZGF0YS0+YWxhcm1zKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9tYXgxNjE5LmMgYi9kcml2ZXJzL2h3bW9uL21heDE2MTkuYwppbmRleCAxYWIxY2FjLi43ODk3NzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL21heDE2MTkuYworKysgYi9kcml2ZXJzL2h3bW9uL21heDE2MTkuYwpAQCAtNjksMTEgKzY5LDE4IEBACiAjZGVmaW5lIE1BWDE2MTlfUkVHX1dfVENSSVRfSFlTVAkweDEzCiAKIC8qCi0gKiBDb252ZXJzaW9ucyBhbmQgdmFyaW91cyBtYWNyb3MKKyAqIENvbnZlcnNpb25zCiAgKi8KIAotI2RlZmluZSBURU1QX0ZST01fUkVHKHZhbCkJKCh2YWwgJiAweDgwID8gdmFsLTB4MTAwIDogdmFsKSAqIDEwMDApCi0jZGVmaW5lIFRFTVBfVE9fUkVHKHZhbCkJKCh2YWwgPCAwID8gdmFsKzB4MTAwKjEwMDAgOiB2YWwpIC8gMTAwMCkKK3N0YXRpYyBpbnQgdGVtcF9mcm9tX3JlZyhpbnQgdmFsKQoreworCXJldHVybiAodmFsICYgMHg4MCA/IHZhbC0weDEwMCA6IHZhbCkgKiAxMDAwOworfQorCitzdGF0aWMgaW50IHRlbXBfdG9fcmVnKGludCB2YWwpCit7CisJcmV0dXJuICh2YWwgPCAwID8gdmFsKzB4MTAwKjEwMDAgOiB2YWwpIC8gMTAwMDsKK30KIAogLyoKICAqIEZ1bmN0aW9ucyBkZWNsYXJhdGlvbgpAQCAtMTM1LDcgKzE0Miw3IEBACiBzdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSBcCiB7IFwKIAlzdHJ1Y3QgbWF4MTYxOV9kYXRhICpkYXRhID0gbWF4MTYxOV91cGRhdGVfZGV2aWNlKGRldik7IFwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUF9GUk9NX1JFRyhkYXRhLT52YWx1ZSkpOyBcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXBfZnJvbV9yZWcoZGF0YS0+dmFsdWUpKTsgXAogfQogc2hvd190ZW1wKHRlbXBfaW5wdXQxKTsKIHNob3dfdGVtcCh0ZW1wX2lucHV0Mik7CkBAIC0xNTMsNyArMTYwLDcgQEAKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7IFwKICBcCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCi0JZGF0YS0+dmFsdWUgPSBURU1QX1RPX1JFRyh2YWwpOyBcCisJZGF0YS0+dmFsdWUgPSB0ZW1wX3RvX3JlZyh2YWwpOyBcCiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgZGF0YS0+dmFsdWUpOyBcCiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKIAlyZXR1cm4gY291bnQ7IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vcGM4NzM2MC5jIGIvZHJpdmVycy9od21vbi9wYzg3MzYwLmMKaW5kZXggOWI0NjJiYi4uNWZiZmEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9wYzg3MzYwLmMKKysrIGIvZHJpdmVycy9od21vbi9wYzg3MzYwLmMKQEAgLTc1LDcgKzc1LDggQEAKICNkZWZpbmUgRlNDTQkweDA5CS8qIExvZ2ljYWwgZGV2aWNlOiBmYW5zICovCiAjZGVmaW5lIFZMTQkweDBkCS8qIExvZ2ljYWwgZGV2aWNlOiB2b2x0YWdlcyAqLwogI2RlZmluZSBUTVMJMHgwZQkvKiBMb2dpY2FsIGRldmljZTogdGVtcGVyYXR1cmVzICovCi1zdGF0aWMgY29uc3QgdTggbG9nZGV2WzNdID0geyBGU0NNLCBWTE0sIFRNUyB9OworI2RlZmluZSBMRE5JX01BWCAzCitzdGF0aWMgY29uc3QgdTggbG9nZGV2W0xETklfTUFYXSA9IHsgRlNDTSwgVkxNLCBUTVMgfTsKIAogI2RlZmluZSBMRF9GQU4JCTAKICNkZWZpbmUgTERfSU4JCTEKQEAgLTQ4OSwxMSArNDkwLDY2IEBACiAJU0VOU09SX0FUVFIoaW4xMF9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21heCwgc2V0X2luX21heCwgMTApLAogfTsKIAorLyogKHRlbXAgJiB2aW4pIGNoYW5uZWwgc3RhdHVzIHJlZ2lzdGVyIGFsYXJtIGJpdHMgKHBkZiBzZWMuMTEuNS4xMikgKi8KKyNkZWZpbmUgQ0hBTl9BTE1fTUlOCTB4MDIJLyogbWluIGxpbWl0IGNyb3NzZWQgKi8KKyNkZWZpbmUgQ0hBTl9BTE1fTUFYCTB4MDQJLyogbWF4IGxpbWl0IGV4Y2VlZGVkICovCisjZGVmaW5lIFRFTVBfQUxNX0NSSVQJMHgwOAkvKiB0ZW1wIGNyaXQgZXhjZWVkZWQgKHRlbXAgb25seSkgKi8KKworLyogc2hvd19pbl9taW4vbWF4X2FsYXJtKCkgcmVhZHMgZGF0YSBmcm9tIHRoZSBwZXItY2hhbm5lbCBzdGF0dXMKKyAgIHJlZ2lzdGVyIChzZWMgMTEuNS4xMiksIG5vdCB0aGUgdmluIGV2ZW50IHN0YXR1cyByZWdpc3RlcnMgKHNlYworICAgMTEuNS4yKSB0aGF0IChsZWdhY3kpIHNob3dfaW5fYWxhcm0oKSByZXNkcyAodmlhIGRhdGEtPmluX2FsYXJtcykgKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd19pbl9taW5fYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICEhKGRhdGEtPmluX3N0YXR1c1tucl0gJiBDSEFOX0FMTV9NSU4pKTsKK30KK3N0YXRpYyBzc2l6ZV90IHNob3dfaW5fbWF4X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YSA9IHBjODczNjBfdXBkYXRlX2RldmljZShkZXYpOworCXVuc2lnbmVkIG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShkYXRhLT5pbl9zdGF0dXNbbnJdICYgQ0hBTl9BTE1fTUFYKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgaW5fbWluX2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFIoaW4wX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKGluMV9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCAxKSwKKwlTRU5TT1JfQVRUUihpbjJfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgMiksCisJU0VOU09SX0FUVFIoaW4zX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDMpLAorCVNFTlNPUl9BVFRSKGluNF9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCA0KSwKKwlTRU5TT1JfQVRUUihpbjVfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgNSksCisJU0VOU09SX0FUVFIoaW42X21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDYpLAorCVNFTlNPUl9BVFRSKGluN19taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWluX2FsYXJtLCBOVUxMLCA3KSwKKwlTRU5TT1JfQVRUUihpbjhfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgOCksCisJU0VOU09SX0FUVFIoaW45X21pbl9hbGFybSwgU19JUlVHTywgc2hvd19pbl9taW5fYWxhcm0sIE5VTEwsIDkpLAorCVNFTlNPUl9BVFRSKGluMTBfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21pbl9hbGFybSwgTlVMTCwgMTApLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgaW5fbWF4X2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFIoaW4wX21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKGluMV9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCAxKSwKKwlTRU5TT1JfQVRUUihpbjJfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgMiksCisJU0VOU09SX0FUVFIoaW4zX21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDMpLAorCVNFTlNPUl9BVFRSKGluNF9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCA0KSwKKwlTRU5TT1JfQVRUUihpbjVfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgNSksCisJU0VOU09SX0FUVFIoaW42X21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDYpLAorCVNFTlNPUl9BVFRSKGluN19tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfaW5fbWF4X2FsYXJtLCBOVUxMLCA3KSwKKwlTRU5TT1JfQVRUUihpbjhfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgOCksCisJU0VOU09SX0FUVFIoaW45X21heF9hbGFybSwgU19JUlVHTywgc2hvd19pbl9tYXhfYWxhcm0sIE5VTEwsIDkpLAorCVNFTlNPUl9BVFRSKGluMTBfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2luX21heF9hbGFybSwgTlVMTCwgMTApLAorfTsKKwogI2RlZmluZSBWSU5fVU5JVF9BVFRSUyhYKSBcCiAJJmluX2lucHV0W1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmaW5fc3RhdHVzW1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmaW5fbWluW1hdLmRldl9hdHRyLmF0dHIsCVwKLQkmaW5fbWF4W1hdLmRldl9hdHRyLmF0dHIKKwkmaW5fbWF4W1hdLmRldl9hdHRyLmF0dHIsCVwKKwkmaW5fbWluX2FsYXJtW1hdLmRldl9hdHRyLmF0dHIsCVwKKwkmaW5fbWF4X2FsYXJtW1hdLmRldl9hdHRyLmF0dHIKIAogc3RhdGljIHNzaXplX3Qgc2hvd192aWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNjU4LDEyICs3MTQsNjggQEAKIAkJICAgIHNob3dfdGhlcm1fY3JpdCwgc2V0X3RoZXJtX2NyaXQsIDIrMTEpLAogfTsKIAorLyogc2hvd190aGVybV9taW4vbWF4X2FsYXJtKCkgcmVhZHMgZGF0YSBmcm9tIHRoZSBwZXItY2hhbm5lbCB2b2x0YWdlCisgICBzdGF0dXMgcmVnaXN0ZXIgKHNlYyAxMS41LjEyKSAqLworCitzdGF0aWMgc3NpemVfdCBzaG93X3RoZXJtX21pbl9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsICEhKGRhdGEtPmluX3N0YXR1c1tucl0gJiBDSEFOX0FMTV9NSU4pKTsKK30KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGhlcm1fbWF4X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+aW5fc3RhdHVzW25yXSAmIENIQU5fQUxNX01BWCkpOworfQorc3RhdGljIHNzaXplX3Qgc2hvd190aGVybV9jcml0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+aW5fc3RhdHVzW25yXSAmIFRFTVBfQUxNX0NSSVQpKTsKK30KKworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0aGVybV9taW5fYWxhcm1bXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wNF9taW5fYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX21pbl9hbGFybSwgTlVMTCwgMCsxMSksCisJU0VOU09SX0FUVFIodGVtcDVfbWluX2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9taW5fYWxhcm0sIE5VTEwsIDErMTEpLAorCVNFTlNPUl9BVFRSKHRlbXA2X21pbl9hbGFybSwgU19JUlVHTywKKwkJICAgIHNob3dfdGhlcm1fbWluX2FsYXJtLCBOVUxMLCAyKzExKSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHRoZXJtX21heF9hbGFybVtdID0geworCVNFTlNPUl9BVFRSKHRlbXA0X21heF9hbGFybSwgU19JUlVHTywKKwkJICAgIHNob3dfdGhlcm1fbWF4X2FsYXJtLCBOVUxMLCAwKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNV9tYXhfYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX21heF9hbGFybSwgTlVMTCwgMSsxMSksCisJU0VOU09SX0FUVFIodGVtcDZfbWF4X2FsYXJtLCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybV9tYXhfYWxhcm0sIE5VTEwsIDIrMTEpLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgdGhlcm1fY3JpdF9hbGFybVtdID0geworCVNFTlNPUl9BVFRSKHRlbXA0X2NyaXRfYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX2NyaXRfYWxhcm0sIE5VTEwsIDArMTEpLAorCVNFTlNPUl9BVFRSKHRlbXA1X2NyaXRfYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX2NyaXRfYWxhcm0sIE5VTEwsIDErMTEpLAorCVNFTlNPUl9BVFRSKHRlbXA2X2NyaXRfYWxhcm0sIFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtX2NyaXRfYWxhcm0sIE5VTEwsIDIrMTEpLAorfTsKKwogI2RlZmluZSBUSEVSTV9VTklUX0FUVFJTKFgpIFwKIAkmdGhlcm1faW5wdXRbWF0uZGV2X2F0dHIuYXR0ciwJXAogCSZ0aGVybV9zdGF0dXNbWF0uZGV2X2F0dHIuYXR0ciwJXAogCSZ0aGVybV9taW5bWF0uZGV2X2F0dHIuYXR0ciwJXAogCSZ0aGVybV9tYXhbWF0uZGV2X2F0dHIuYXR0ciwJXAotCSZ0aGVybV9jcml0W1hdLmRldl9hdHRyLmF0dHIKKwkmdGhlcm1fY3JpdFtYXS5kZXZfYXR0ci5hdHRyLAlcCisJJnRoZXJtX21pbl9hbGFybVtYXS5kZXZfYXR0ci5hdHRyLCBcCisJJnRoZXJtX21heF9hbGFybVtYXS5kZXZfYXR0ci5hdHRyLCBcCisJJnRoZXJtX2NyaXRfYWxhcm1bWF0uZGV2X2F0dHIuYXR0cgogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIHBjODczNnhfdGhlcm1fYXR0cl9hcnJheVtdID0gewogCVRIRVJNX1VOSVRfQVRUUlMoMCksCkBAIC03OTAsMTIgKzkwMiw3NiBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKGFsYXJtc190ZW1wLCBTX0lSVUdPLCBzaG93X3RlbXBfYWxhcm1zLCBOVUxMKTsKIAorLyogc2hvd190ZW1wX21pbi9tYXhfYWxhcm0oKSByZWFkcyBkYXRhIGZyb20gdGhlIHBlci1jaGFubmVsIHN0YXR1cworICAgcmVnaXN0ZXIgKHNlYyAxMi4zLjcpLCBub3QgdGhlIHRlbXAgZXZlbnQgc3RhdHVzIHJlZ2lzdGVycyAoc2VjCisgICAxMi4zLjIpIHRoYXQgc2hvd190ZW1wX2FsYXJtKCkgcmVhZHMgKHZpYSBkYXRhLT50ZW1wX2FsYXJtcykgKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21pbl9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+dGVtcF9zdGF0dXNbbnJdICYgQ0hBTl9BTE1fTUlOKSk7Cit9CitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfbWF4X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YSA9IHBjODczNjBfdXBkYXRlX2RldmljZShkZXYpOworCXVuc2lnbmVkIG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShkYXRhLT50ZW1wX3N0YXR1c1tucl0gJiBDSEFOX0FMTV9NQVgpKTsKK30KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9jcml0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YSA9IHBjODczNjBfdXBkYXRlX2RldmljZShkZXYpOworCXVuc2lnbmVkIG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShkYXRhLT50ZW1wX3N0YXR1c1tucl0gJiBURU1QX0FMTV9DUklUKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgdGVtcF9taW5fYWxhcm1bXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wMV9taW5fYWxhcm0sIFNfSVJVR08sIHNob3dfdGVtcF9taW5fYWxhcm0sIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKHRlbXAyX21pbl9hbGFybSwgU19JUlVHTywgc2hvd190ZW1wX21pbl9hbGFybSwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIodGVtcDNfbWluX2FsYXJtLCBTX0lSVUdPLCBzaG93X3RlbXBfbWluX2FsYXJtLCBOVUxMLCAyKSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHRlbXBfbWF4X2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X3RlbXBfbWF4X2FsYXJtLCBOVUxMLCAwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMl9tYXhfYWxhcm0sIFNfSVJVR08sIHNob3dfdGVtcF9tYXhfYWxhcm0sIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAzX21heF9hbGFybSwgU19JUlVHTywgc2hvd190ZW1wX21heF9hbGFybSwgTlVMTCwgMiksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0ZW1wX2NyaXRfYWxhcm1bXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wMV9jcml0X2FsYXJtLCBTX0lSVUdPLCBzaG93X3RlbXBfY3JpdF9hbGFybSwgTlVMTCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd190ZW1wX2NyaXRfYWxhcm0sIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAzX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfdGVtcF9jcml0X2FsYXJtLCBOVUxMLCAyKSwKK307CisKKyNkZWZpbmUgVEVNUF9GQVVMVAkweDQwCS8qIG9wZW4gZGlvZGUgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9mYXVsdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgISEoZGF0YS0+dGVtcF9zdGF0dXNbbnJdICYgVEVNUF9GQVVMVCkpOworfQorc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0ZW1wX2ZhdWx0W10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfZmF1bHQsIFNfSVJVR08sIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfZmF1bHQsIFNfSVJVR08sIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIodGVtcDNfZmF1bHQsIFNfSVJVR08sIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgMiksCit9OworCiAjZGVmaW5lIFRFTVBfVU5JVF9BVFRSUyhYKSBcCiAJJnRlbXBfaW5wdXRbWF0uZGV2X2F0dHIuYXR0ciwJXAogCSZ0ZW1wX3N0YXR1c1tYXS5kZXZfYXR0ci5hdHRyLAlcCiAJJnRlbXBfbWluW1hdLmRldl9hdHRyLmF0dHIsCVwKIAkmdGVtcF9tYXhbWF0uZGV2X2F0dHIuYXR0ciwJXAotCSZ0ZW1wX2NyaXRbWF0uZGV2X2F0dHIuYXR0cgorCSZ0ZW1wX2NyaXRbWF0uZGV2X2F0dHIuYXR0ciwJXAorCSZ0ZW1wX21pbl9hbGFybVtYXS5kZXZfYXR0ci5hdHRyLCBcCisJJnRlbXBfbWF4X2FsYXJtW1hdLmRldl9hdHRyLmF0dHIsIFwKKwkmdGVtcF9jcml0X2FsYXJtW1hdLmRldl9hdHRyLmF0dHIsIFwKKwkmdGVtcF9mYXVsdFtYXS5kZXZfYXR0ci5hdHRyCiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogcGM4NzM2eF90ZW1wX2F0dHJfYXJyYXlbXSA9IHsKIAlURU1QX1VOSVRfQVRUUlMoMCksCkBAIC04MDksOCArOTg1LDggQEAKIAkuYXR0cnMgPSBwYzg3MzZ4X3RlbXBfYXR0cl9hcnJheSwKIH07CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCi0JCQkgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+bmFtZSk7CkBAIC05NTUsNyArMTEzMSw3IEBACiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOwogCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBMRE5JX01BWDsgaSsrKSB7CiAJCWlmICgoKGRhdGEtPmFkZHJlc3NbaV0gPSBleHRyYV9pc2FbaV0pKQogCQkgJiYgIXJlcXVlc3RfcmVnaW9uKGV4dHJhX2lzYVtpXSwgUEM4NzM2MF9FWFRFTlQsCiAJCSAJCSAgICBwYzg3MzYwX2RyaXZlci5kcml2ZXIubmFtZSkpIHsKQEAgLTEwMzEsNyArMTIwNywxNSBAQAogCQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAogCQkJCQkmdGVtcF9jcml0W2ldLmRldl9hdHRyKSkKIAkJCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCQkJJnRlbXBfc3RhdHVzW2ldLmRldl9hdHRyKSkpCisJCQkJCSZ0ZW1wX3N0YXR1c1tpXS5kZXZfYXR0cikpCisJCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCSZ0ZW1wX21pbl9hbGFybVtpXS5kZXZfYXR0cikpCisJCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCSZ0ZW1wX21heF9hbGFybVtpXS5kZXZfYXR0cikpCisJCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCSZ0ZW1wX2NyaXRfYWxhcm1baV0uZGV2X2F0dHIpKQorCQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmdGVtcF9mYXVsdFtpXS5kZXZfYXR0cikpKQogCQkJCWdvdG8gRVJST1IzOwogCQl9CiAJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2FsYXJtc190ZW1wKSkpCkBAIC0xMTMxLDYgKzEzMTUsMTYgQEAKIAltdXRleF91bmxvY2soJihkYXRhLT5sb2NrKSk7CiB9CiAKKy8qICh0ZW1wICYgdmluKSBjaGFubmVsIGNvbnZlcnNpb24gc3RhdHVzIHJlZ2lzdGVyIGZsYWdzIChwZGYgc2VjLjExLjUuMTIpICovCisjZGVmaW5lIENIQU5fQ05WUlRECTB4ODAJLyogbmV3IGRhdGEgcmVhZHkgKi8KKyNkZWZpbmUgQ0hBTl9FTkEJMHgwMQkvKiBlbmFibGVkIGNoYW5uZWwgKHRlbXAgb3IgdmluKSAqLworI2RlZmluZSBDSEFOX0FMTV9FTkEJMHgxMAkvKiBwcm9wYWdhdGUgdG8gYWxhcm1zLXJlZyA/PyAoY2hrIHZhbCEpICovCisjZGVmaW5lIENIQU5fUkVBRFkJKENIQU5fRU5BfENIQU5fQ05WUlREKSAvKiBzYW1wbGUgcmVhZHkgbWFzayAqLworCisjZGVmaW5lIFRFTVBfT1RTX09FCTB4MjAJLyogT1RTIE91dHB1dCBFbmFibGUgKi8KKyNkZWZpbmUgVklOX1JXMUNfTUFTSwkoQ0hBTl9SRUFEWXxDSEFOX0FMTV9NQVh8Q0hBTl9BTE1fTUlOKSAgIC8qIDB4ODcgKi8KKyNkZWZpbmUgVEVNUF9SVzFDX01BU0sJKFZJTl9SVzFDX01BU0t8VEVNUF9BTE1fQ1JJVHxURU1QX0ZBVUxUKSAvKiAweENGICovCisKIHN0YXRpYyB2b2lkIHBjODczNjBfaW5pdF9kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCQlpbnQgdXNlX3RoZXJtaXN0b3JzKQogewpAQCAtMTE1MiwxMSArMTM0NiwxMiBAQAogCiAJbnIgPSBkYXRhLT5pbm5yIDwgMTEgPyBkYXRhLT5pbm5yIDogMTE7CiAJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJcmVnID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX0lOLCBpLAorCQkJCQkgUEM4NzM2NV9SRUdfSU5fU1RBVFVTKTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiYmlvcyBpbiVkIHN0YXR1czoweCUwMnhcbiIsIGksIHJlZyk7CiAJCWlmIChpbml0ID49IGluaXRfaW5baV0pIHsKIAkJCS8qIEZvcmNpYmx5IGVuYWJsZSB2b2x0YWdlIGNoYW5uZWwgKi8KLQkJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9JTiwgaSwKLQkJCQkJCSBQQzg3MzY1X1JFR19JTl9TVEFUVVMpOwotCQkJaWYgKCEocmVnICYgMHgwMSkpIHsKKwkJCWlmICghKHJlZyAmIENIQU5fRU5BKSkgewogCQkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkZvcmNpYmx5ICIKIAkJCQkJImVuYWJsaW5nIGluJWRcbiIsIGkpOwogCQkJCXBjODczNjBfd3JpdGVfdmFsdWUoZGF0YSwgTERfSU4sIGksCkBAIC0xMTY4LDE5ICsxMzYzLDI0IEBACiAKIAkvKiBXZSBjYW4ndCBibGluZGx5IHRydXN0IHRoZSBTdXBlci1JL08gc3BhY2UgY29uZmlndXJhdGlvbiBiaXQsCiAJICAgbW9zdCBCSU9TIHdvbid0IHNldCBpdCBwcm9wZXJseSAqLworCWRldl9kYmcoJnBkZXYtPmRldiwgImJpb3MgdGhlcm1pc3RvcnM6JWRcbiIsIHVzZV90aGVybWlzdG9ycyk7CiAJZm9yIChpID0gMTE7IGkgPCBkYXRhLT5pbm5yOyBpKyspIHsKIAkJcmVnID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX0lOLCBpLAogCQkJCQkgUEM4NzM2NV9SRUdfVEVNUF9TVEFUVVMpOwotCQl1c2VfdGhlcm1pc3RvcnMgPSB1c2VfdGhlcm1pc3RvcnMgfHwgKHJlZyAmIDB4MDEpOworCQl1c2VfdGhlcm1pc3RvcnMgPSB1c2VfdGhlcm1pc3RvcnMgfHwgKHJlZyAmIENIQU5fRU5BKTsKKwkJLyogdGhlcm1pc3RvcnMgYXJlIHRlbXBbNC02XSwgbWVhc3VyZWQgb24gdmluWzExLTE0XSAqLworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJiaW9zIHRlbXAlZF9zdGF0dXM6MHglMDJ4XG4iLCBpLTcsIHJlZyk7CiAJfQorCWRldl9kYmcoJnBkZXYtPmRldiwgInVzaW5nIHRoZXJtaXN0b3JzOiVkXG4iLCB1c2VfdGhlcm1pc3RvcnMpOwogCiAJaSA9IHVzZV90aGVybWlzdG9ycyA/IDIgOiAwOwogCWZvciAoOyBpIDwgZGF0YS0+dGVtcG5yOyBpKyspIHsKKwkJcmVnID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX1RFTVAsIGksCisJCQkJCSBQQzg3MzY1X1JFR19URU1QX1NUQVRVUyk7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImJpb3MgdGVtcCVkX3N0YXR1czoweCUwMnhcbiIsIGkrMSwgcmVnKTsKIAkJaWYgKGluaXQgPj0gaW5pdF90ZW1wW2ldKSB7CiAJCQkvKiBGb3JjaWJseSBlbmFibGUgdGVtcGVyYXR1cmUgY2hhbm5lbCAqLwotCQkJcmVnID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX1RFTVAsIGksCi0JCQkJCQkgUEM4NzM2NV9SRUdfVEVNUF9TVEFUVVMpOwotCQkJaWYgKCEocmVnICYgMHgwMSkpIHsKKwkJCWlmICghKHJlZyAmIENIQU5fRU5BKSkgewogCQkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkZvcmNpYmx5ICIKIAkJCQkJImVuYWJsaW5nIHRlbXAlZFxuIiwgaSsxKTsKIAkJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX1RFTVAsIGksCkBAIC0xMTk3LDcgKzEzOTcsNyBAQAogCQkJCSAgIGRpb2RlcyAqLwogCQkJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9URU1QLAogCQkJCSAgICAgIChpLTExKS8yLCBQQzg3MzY1X1JFR19URU1QX1NUQVRVUyk7Ci0JCQkJaWYgKHJlZyAmIDB4MDEpIHsKKwkJCQlpZiAocmVnICYgQ0hBTl9FTkEpIHsKIAkJCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiU2tpcHBpbmcgIgogCQkJCQkJInRlbXAlZCwgcGluIGFscmVhZHkgaW4gdXNlICIKIAkJCQkJCSJieSB0ZW1wJWRcbiIsIGktNywgKGktMTEpLzIpOwpAQCAtMTIwNyw3ICsxNDA3LDcgQEAKIAkJCQkvKiBGb3JjaWJseSBlbmFibGUgdGhlcm1pc3RvciBjaGFubmVsICovCiAJCQkJcmVnID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX0lOLCBpLAogCQkJCQkJCSBQQzg3MzY1X1JFR19JTl9TVEFUVVMpOwotCQkJCWlmICghKHJlZyAmIDB4MDEpKSB7CisJCQkJaWYgKCEocmVnICYgQ0hBTl9FTkEpKSB7CiAJCQkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkZvcmNpYmx5ICIKIAkJCQkJCSJlbmFibGluZyB0ZW1wJWRcbiIsIGktNyk7CiAJCQkJCXBjODczNjBfd3JpdGVfdmFsdWUoZGF0YSwgTERfSU4sIGksCkBAIC0xMjIxLDcgKzE0MjEsOCBAQAogCWlmIChkYXRhLT5pbm5yKSB7CiAJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9JTiwgTk9fQkFOSywKIAkJCQkJIFBDODczNjVfUkVHX0lOX0NPTkZJRyk7Ci0JCWlmIChyZWcgJiAweDAxKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImJpb3MgdmluLWNmZzoweCUwMnhcbiIsIHJlZyk7CisJCWlmIChyZWcgJiBDSEFOX0VOQSkgewogCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiRm9yY2libHkgIgogCQkJCSJlbmFibGluZyBtb25pdG9yaW5nIChWTE0pXG4iKTsKIAkJCXBjODczNjBfd3JpdGVfdmFsdWUoZGF0YSwgTERfSU4sIE5PX0JBTkssCkBAIC0xMjMzLDcgKzE0MzQsOCBAQAogCWlmIChkYXRhLT50ZW1wbnIpIHsKIAkJcmVnID0gcGM4NzM2MF9yZWFkX3ZhbHVlKGRhdGEsIExEX1RFTVAsIE5PX0JBTkssCiAJCQkJCSBQQzg3MzY1X1JFR19URU1QX0NPTkZJRyk7Ci0JCWlmIChyZWcgJiAweDAxKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImJpb3MgdGVtcC1jZmc6MHglMDJ4XG4iLCByZWcpOworCQlpZiAocmVnICYgQ0hBTl9FTkEpIHsKIAkJCWRldl9kYmcoJnBkZXYtPmRldiwgIkZvcmNpYmx5IGVuYWJsaW5nICIKIAkJCQkibW9uaXRvcmluZyAoVE1TKVxuIik7CiAJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX1RFTVAsIE5PX0JBTkssCkBAIC0xMzM2LDExICsxNTM4LDExIEBACiAJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX0lOLCBpLAogCQkJCQkgICAgUEM4NzM2NV9SRUdfSU5fU1RBVFVTLAogCQkJCQkgICAgZGF0YS0+aW5fc3RhdHVzW2ldKTsKLQkJCWlmICgoZGF0YS0+aW5fc3RhdHVzW2ldICYgMHg4MSkgPT0gMHg4MSkgeworCQkJaWYgKChkYXRhLT5pbl9zdGF0dXNbaV0gJiBDSEFOX1JFQURZKSA9PSBDSEFOX1JFQURZKSB7CiAJCQkJZGF0YS0+aW5baV0gPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwgTERfSU4sCiAJCQkJCSAgICAgIGksIFBDODczNjVfUkVHX0lOKTsKIAkJCX0KLQkJCWlmIChkYXRhLT5pbl9zdGF0dXNbaV0gJiAweDAxKSB7CisJCQlpZiAoZGF0YS0+aW5fc3RhdHVzW2ldICYgQ0hBTl9FTkEpIHsKIAkJCQlkYXRhLT5pbl9taW5baV0gPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJCSAgTERfSU4sIGksCiAJCQkJCQkgIFBDODczNjVfUkVHX0lOX01JTik7CkBAIC0xMzczLDEyICsxNTc1LDEyIEBACiAJCQlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX1RFTVAsIGksCiAJCQkJCSAgICBQQzg3MzY1X1JFR19URU1QX1NUQVRVUywKIAkJCQkJICAgIGRhdGEtPnRlbXBfc3RhdHVzW2ldKTsKLQkJCWlmICgoZGF0YS0+dGVtcF9zdGF0dXNbaV0gJiAweDgxKSA9PSAweDgxKSB7CisJCQlpZiAoKGRhdGEtPnRlbXBfc3RhdHVzW2ldICYgQ0hBTl9SRUFEWSkgPT0gQ0hBTl9SRUFEWSkgewogCQkJCWRhdGEtPnRlbXBbaV0gPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJCUxEX1RFTVAsIGksCiAJCQkJCQlQQzg3MzY1X1JFR19URU1QKTsKIAkJCX0KLQkJCWlmIChkYXRhLT50ZW1wX3N0YXR1c1tpXSAmIDB4MDEpIHsKKwkJCWlmIChkYXRhLT50ZW1wX3N0YXR1c1tpXSAmIENIQU5fRU5BKSB7CiAJCQkJZGF0YS0+dGVtcF9taW5baV0gPSBwYzg3MzYwX3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkJCSAgICBMRF9URU1QLCBpLAogCQkJCQkJICAgIFBDODczNjVfUkVHX1RFTVBfTUlOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jIGIvZHJpdmVycy9od21vbi93ODM3ODFkLmMKaW5kZXggZjk0MmVjZC4uZDRkMWI4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3ODFkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3ODFkLmMKQEAgLTQsNyArNCw3IEBACiAgICAgQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwMSAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQG5ldHJvZWRnZS5jb20+LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBNYXJrIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+Ci0gICAgQ29weXJpZ2h0IChjKSAyMDA3ICAgICAgICAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgICAgQ29weXJpZ2h0IChjKSAyMDA3IC0gMjAwOCAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zOCwyNSArMzgsMjQgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tdmlkLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSAibG03NS5oIgogCi0vKiBJU0EgZGV2aWNlLCBpZiBmb3VuZCAqLwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisjaWZkZWYgQ09ORklHX0lTQQorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJsbTc1LmgiCiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLAogCQkJCQkJMHgyZSwgMHgyZiwgSTJDX0NMSUVOVF9FTkQgfTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpc2FfYWRkcmVzcyA9IDB4MjkwOwotCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogSTJDX0NMSUVOVF9JTlNNT0RfNCh3ODM3ODFkLCB3ODM3ODJkLCB3ODM3ODNzLCBhczk5MTI3Zik7CiBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNKGZvcmNlX3N1YmNsaWVudHMsICJMaXN0IG9mIHN1YmNsaWVudCBhZGRyZXNzZXM6ICIKQEAgLTE3OCw5ICsxNzcsOSBAQAogI2RlZmluZSBURU1QX0ZST01fUkVHKHZhbCkJCSgodmFsKSAqIDEwMDApCiAKICNkZWZpbmUgQkVFUF9NQVNLX0ZST01fUkVHKHZhbCx0eXBlKQkoKHR5cGUpID09IGFzOTkxMjdmID8gXAotCQkJCQkgKHZhbCkgXiAweDdmZmYgOiAodmFsKSkKKwkJCQkJICh+KHZhbCkpICYgMHg3ZmZmIDogKHZhbCkgJiAweGZmN2ZmZikKICNkZWZpbmUgQkVFUF9NQVNLX1RPX1JFRyh2YWwsdHlwZSkJKCh0eXBlKSA9PSBhczk5MTI3ZiA/IFwKLQkJCQkJICh+KHZhbCkpICYgMHg3ZmZmIDogKHZhbCkgJiAweGZmZmZmZikKKwkJCQkJICh+KHZhbCkpICYgMHg3ZmZmIDogKHZhbCkgJiAweGZmN2ZmZikKIAogI2RlZmluZSBESVZfRlJPTV9SRUcodmFsKQkJKDEgPDwgKHZhbCkpCiAKQEAgLTE5OSwyNSArMTk4LDE2IEBACiAJcmV0dXJuIGk7CiB9CiAKLS8qIFRoZXJlIGFyZSBzb21lIGNvbXBsaWNhdGlvbnMgaW4gYSBtb2R1bGUgbGlrZSB0aGlzLiBGaXJzdCBvZmYsIFc4Mzc4MUQgY2hpcHMKLSAgIG1heSBiZSBib3RoIHByZXNlbnQgb24gdGhlIFNNQnVzIGFuZCB0aGUgSVNBIGJ1cywgYW5kIHdlIGhhdmUgdG8gaGFuZGxlCi0gICB0aG9zZSBjYXNlcyBzZXBhcmF0ZWx5IGF0IHNvbWUgcGxhY2VzLiBTZWNvbmQsIHRoZXJlIG1pZ2h0IGJlIHNldmVyYWwKLSAgIFc4Mzc4MUQgY2hpcHMgYXZhaWxhYmxlICh3ZWxsLCBhY3R1YWxseSwgdGhhdCBpcyBwcm9iYWJseSBuZXZlciBkb25lOyBidXQKLSAgIGl0IGlzIGEgY2xlYW4gaWxsdXN0cmF0aW9uIG9mIGhvdyB0byBoYW5kbGUgYSBjYXNlIGxpa2UgdGhhdCkuIEZpbmFsbHksCi0gICBhIHNwZWNpZmljIGNoaXAgbWF5IGJlIGF0dGFjaGVkIHRvICpib3RoKiBJU0EgYW5kIFNNQnVzLCBhbmQgd2Ugd291bGQKLSAgIG5vdCBsaWtlIHRvIGRldGVjdCBpdCBkb3VibGUuIEZvcnR1bmF0ZWx5LCBpbiB0aGUgY2FzZSBvZiB0aGUgVzgzNzgxRCBhdAotICAgbGVhc3QsIGEgcmVnaXN0ZXIgdGVsbHMgdXMgd2hhdCBTTUJ1cyBhZGRyZXNzIHdlIGFyZSBvbiwgc28gdGhhdCBoZWxwcwotICAgYSBiaXQgLSBleGNlcHQgaWYgdGhlcmUgY291bGQgYmUgbW9yZSB0aGFuIG9uZSBTTUJ1cy4gR3JvYW4uIE5vIHNvbHV0aW9uCi0gICBmb3IgdGhpcyB5ZXQuICovCi0KLS8qIEZvciBJU0EgY2hpcHMsIHdlIGFidXNlIHRoZSBpMmNfY2xpZW50IGFkZHIgYW5kIG5hbWUgZmllbGRzLiBXZSBhbHNvIHVzZQotICAgdGhlIGRyaXZlciBmaWVsZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gSTJDIGFuZCBJU0EgY2hpcHMuICovCiBzdHJ1Y3QgdzgzNzgxZF9kYXRhIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CiAJc3RydWN0IG11dGV4IGxvY2s7CiAJZW51bSBjaGlwcyB0eXBlOwogCisJLyogRm9yIElTQSBkZXZpY2Ugb25seSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGlzYV9hZGRyOworCiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7CQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwpAQCAtMjQwLDcgKzIzMCw2IEBACiAJdTggdmlkOwkJCS8qIFJlZ2lzdGVyIGVuY29kaW5nLCBjb21iaW5lZCAqLwogCXUzMiBhbGFybXM7CQkvKiBSZWdpc3RlciBlbmNvZGluZywgY29tYmluZWQgKi8KIAl1MzIgYmVlcF9tYXNrOwkJLyogUmVnaXN0ZXIgZW5jb2RpbmcsIGNvbWJpbmVkICovCi0JdTggYmVlcF9lbmFibGU7CQkvKiBCb29sZWFuICovCiAJdTggcHdtWzRdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KIAl1OCBwd20yX2VuYWJsZTsJCS8qIEJvb2xlYW4gKi8KIAl1MTYgc2Vuc1szXTsJCS8qIDc4MkQvNzgzUyBvbmx5LgpAQCAtMjQ5LDM2ICsyMzgsMTQgQEAKIAl1OCB2cm07CiB9OwogCi1zdGF0aWMgaW50IHc4Mzc4MWRfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgdzgzNzgxZF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpOwotc3RhdGljIGludCB3ODM3ODFkX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHc4Mzc4MWRfaXNhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotc3RhdGljIGludCBfX2RldmV4aXQgdzgzNzgxZF9pc2FfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworc3RhdGljIHN0cnVjdCB3ODM3ODFkX2RhdGEgKnc4Mzc4MWRfZGF0YV9pZl9pc2Eodm9pZCk7CitzdGF0aWMgaW50IHc4Mzc4MWRfYWxpYXNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNoaXBpZCk7CiAKIHN0YXRpYyBpbnQgdzgzNzgxZF9yZWFkX3ZhbHVlKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcpOwogc3RhdGljIGludCB3ODM3ODFkX3dyaXRlX3ZhbHVlKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcsIHUxNiB2YWx1ZSk7CiBzdGF0aWMgc3RydWN0IHc4Mzc4MWRfZGF0YSAqdzgzNzgxZF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB3ODM3ODFkX2luaXRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3ODM3ODFkX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJ3ODM3ODFkIiwKLQl9LAotCS5hdHRhY2hfYWRhcHRlciA9IHc4Mzc4MWRfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSB3ODM3ODFkX2RldGFjaF9jbGllbnQsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3ODM3ODFkX2lzYV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5uYW1lID0gInc4Mzc4MWQiLAotCX0sCi0JLnByb2JlID0gdzgzNzgxZF9pc2FfcHJvYmUsCi0JLnJlbW92ZSA9IHc4Mzc4MWRfaXNhX3JlbW92ZSwKLX07Ci0KLQogLyogZm9sbG93aW5nIGFyZSB0aGUgc3lzZnMgY2FsbGJhY2sgZnVuY3Rpb25zICovCiAjZGVmaW5lIHNob3dfaW5fcmVnKHJlZykgXAogc3RhdGljIHNzaXplX3Qgc2hvd18jI3JlZyAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsIFwKQEAgLTUxMywxMSArNDgwLDYgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsCiAJCSAgICAgICAobG9uZylCRUVQX01BU0tfRlJPTV9SRUcoZGF0YS0+YmVlcF9tYXNrLCBkYXRhLT50eXBlKSk7CiB9Ci1zdGF0aWMgc3NpemVfdCBzaG93X2JlZXBfZW5hYmxlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IHc4Mzc4MWRfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgKGxvbmcpZGF0YS0+YmVlcF9lbmFibGUpOwotfQogCiBzdGF0aWMgc3NpemVfdAogc3RvcmVfYmVlcF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC01MjksMTIgKzQ5MSwxMiBAQAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCWRhdGEtPmJlZXBfbWFzayA9IEJFRVBfTUFTS19UT19SRUcodmFsLCBkYXRhLT50eXBlKTsKKwlkYXRhLT5iZWVwX21hc2sgJj0gMHg4MDAwOyAvKiBwcmVzZXJ2ZSBiZWVwIGVuYWJsZSAqLworCWRhdGEtPmJlZXBfbWFzayB8PSBCRUVQX01BU0tfVE9fUkVHKHZhbCwgZGF0YS0+dHlwZSk7CiAJdzgzNzgxZF93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CRUVQX0lOVFMxLAogCQkJICAgIGRhdGEtPmJlZXBfbWFzayAmIDB4ZmYpOwogCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMiwKLQkJCSAgICAoKGRhdGEtPmJlZXBfbWFzayA+PiA4KSAmIDB4N2YpCi0JCQkgICAgfCBkYXRhLT5iZWVwX2VuYWJsZSA8PCA3KTsKKwkJCSAgICAoZGF0YS0+YmVlcF9tYXNrID4+IDgpICYgMHhmZik7CiAJaWYgKGRhdGEtPnR5cGUgIT0gdzgzNzgxZCAmJiBkYXRhLT50eXBlICE9IGFzOTkxMjdmKSB7CiAJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMywKIAkJCQkgICAgKChkYXRhLT5iZWVwX21hc2spID4+IDE2KSAmIDB4ZmYpOwpAQCAtNTQ0LDMxICs1MDYsOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QKLXN0b3JlX2JlZXBfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQl1MzIgdmFsOwotCi0JdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7Ci0JaWYgKHZhbCAhPSAwICYmIHZhbCAhPSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT5iZWVwX2VuYWJsZSA9IHZhbDsKLQl2YWwgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMikgJiAweDdmOwotCXZhbCB8PSBkYXRhLT5iZWVwX2VuYWJsZSA8PCA3OwotCXc4Mzc4MWRfd3JpdGVfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMiwgdmFsKTsKLQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQogc3RhdGljIERFVklDRV9BVFRSKGJlZXBfbWFzaywgU19JUlVHTyB8IFNfSVdVU1IsCiAJCXNob3dfYmVlcF9tYXNrLCBzdG9yZV9iZWVwX21hc2spOwotc3RhdGljIERFVklDRV9BVFRSKGJlZXBfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJc2hvd19iZWVwX2VuYWJsZSwgc3RvcmVfYmVlcF9lbmFibGUpOwogCiBzdGF0aWMgc3NpemVfdCBzaG93X2JlZXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY2hhciAqYnVmKQpAQCAtNjYzLDYgKzYwMiw4IEBACiAJCQlzaG93X2JlZXAsIHN0b3JlX2JlZXAsIDUpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19iZWVwLCBTX0lSVUdPLAogCQkJc2hvd190ZW1wM19iZWVwLCBzdG9yZV9iZWVwLCAxMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGJlZXBfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXNob3dfYmVlcCwgc3RvcmVfYmVlcCwgMTUpOwogCiBzdGF0aWMgc3NpemVfdAogc2hvd19mYW5fZGl2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLCBjaGFyICpidWYpCkBAIC04NjYsNDUgKzgwNywxOSBAQAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM190eXBlLCBTX0lSVUdPIHwgU19JV1VTUiwKIAlzaG93X3NlbnNvciwgc3RvcmVfc2Vuc29yLCAyKTsKIAotLyogSTJDIGRldmljZXMgZ2V0IHRoaXMgbmFtZSBhdHRyaWJ1dGUgYXV0b21hdGljYWxseSwgYnV0IGZvciBJU0EgZGV2aWNlcwotICAgd2UgbXVzdCBjcmVhdGUgaXQgYnkgb3Vyc2VsdmVzLiAqLwotc3RhdGljIHNzaXplX3QKLXNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkYXRhLT5jbGllbnQubmFtZSk7Ci19Ci1zdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMKTsKLQotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbjoKLSAgICAgKiB3ODM3ODFkX2RyaXZlciBpcyBpbnNlcnRlZCAod2hlbiB0aGlzIG1vZHVsZSBpcyBsb2FkZWQpLCBmb3IgZWFjaAotICAgICAgIGF2YWlsYWJsZSBhZGFwdGVyCi0gICAgICogd2hlbiBhIG5ldyBhZGFwdGVyIGlzIGluc2VydGVkIChhbmQgdzgzNzgxZF9kcml2ZXIgaXMgc3RpbGwgcHJlc2VudCkgKi8KLXN0YXRpYyBpbnQKLXc4Mzc4MWRfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCWlmICghKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX0hXTU9OKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCB3ODM3ODFkX2RldGVjdCk7Ci19Ci0KIC8qIEFzc3VtZXMgdGhhdCBhZGFwdGVyIGlzIG9mIEkyQywgbm90IElTQSB2YXJpZXR5LgogICogT1RIRVJXSVNFIERPTidUIENBTEwgVEhJUwogICovCiBzdGF0aWMgaW50Ci13ODM3ODFkX2RldGVjdF9zdWJjbGllbnRzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kLAotCQlzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudCkKK3c4Mzc4MWRfZGV0ZWN0X3N1YmNsaWVudHMoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQpCiB7CiAJaW50IGksIHZhbDEgPSAwLCBpZDsKIAlpbnQgZXJyOwotCWNvbnN0IGNoYXIgKmNsaWVudF9uYW1lID0gIiI7CisJaW50IGFkZHJlc3MgPSBuZXdfY2xpZW50LT5hZGRyOworCXVuc2lnbmVkIHNob3J0IHNjX2FkZHJbMl07CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gbmV3X2NsaWVudC0+YWRhcHRlcjsKIAlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKG5ld19jbGllbnQpOwotCi0JZGF0YS0+bG03NVswXSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEoZGF0YS0+bG03NVswXSkpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBFUlJPUl9TQ18wOwotCX0KKwllbnVtIGNoaXBzIGtpbmQgPSBkYXRhLT50eXBlOwogCiAJaWQgPSBpMmNfYWRhcHRlcl9pZChhZGFwdGVyKTsKIApAQCAtOTIyLDU1ICs4MzcsMzUgQEAKIAkJdzgzNzgxZF93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19JMkNfU1VCQUREUiwKIAkJCQkoZm9yY2Vfc3ViY2xpZW50c1syXSAmIDB4MDcpIHwKIAkJCQkoKGZvcmNlX3N1YmNsaWVudHNbM10gJiAweDA3KSA8PCA0KSk7Ci0JCWRhdGEtPmxtNzVbMF0tPmFkZHIgPSBmb3JjZV9zdWJjbGllbnRzWzJdOworCQlzY19hZGRyWzBdID0gZm9yY2Vfc3ViY2xpZW50c1syXTsKIAl9IGVsc2UgewogCQl2YWwxID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0kyQ19TVUJBRERSKTsKLQkJZGF0YS0+bG03NVswXS0+YWRkciA9IDB4NDggKyAodmFsMSAmIDB4MDcpOworCQlzY19hZGRyWzBdID0gMHg0OCArICh2YWwxICYgMHgwNyk7CiAJfQogCiAJaWYgKGtpbmQgIT0gdzgzNzgzcykgewotCQlkYXRhLT5sbTc1WzFdID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCEoZGF0YS0+bG03NVsxXSkpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIEVSUk9SX1NDXzE7Ci0JCX0KLQogCQlpZiAoZm9yY2Vfc3ViY2xpZW50c1swXSA9PSBpZCAmJgogCQkgICAgZm9yY2Vfc3ViY2xpZW50c1sxXSA9PSBhZGRyZXNzKSB7Ci0JCQlkYXRhLT5sbTc1WzFdLT5hZGRyID0gZm9yY2Vfc3ViY2xpZW50c1szXTsKKwkJCXNjX2FkZHJbMV0gPSBmb3JjZV9zdWJjbGllbnRzWzNdOwogCQl9IGVsc2UgewotCQkJZGF0YS0+bG03NVsxXS0+YWRkciA9IDB4NDggKyAoKHZhbDEgPj4gNCkgJiAweDA3KTsKKwkJCXNjX2FkZHJbMV0gPSAweDQ4ICsgKCh2YWwxID4+IDQpICYgMHgwNyk7CiAJCX0KLQkJaWYgKGRhdGEtPmxtNzVbMF0tPmFkZHIgPT0gZGF0YS0+bG03NVsxXS0+YWRkcikgeworCQlpZiAoc2NfYWRkclswXSA9PSBzY19hZGRyWzFdKSB7CiAJCQlkZXZfZXJyKCZuZXdfY2xpZW50LT5kZXYsCiAJCQkgICAgICAgIkR1cGxpY2F0ZSBhZGRyZXNzZXMgMHgleCBmb3Igc3ViY2xpZW50cy5cbiIsCi0JCQkgICAgICAgZGF0YS0+bG03NVswXS0+YWRkcik7CisJCQkgICAgICAgc2NfYWRkclswXSk7CiAJCQllcnIgPSAtRUJVU1k7CiAJCQlnb3RvIEVSUk9SX1NDXzI7CiAJCX0KIAl9CiAKLQlpZiAoa2luZCA9PSB3ODM3ODFkKQotCQljbGllbnRfbmFtZSA9ICJ3ODM3ODFkIHN1YmNsaWVudCI7Ci0JZWxzZSBpZiAoa2luZCA9PSB3ODM3ODJkKQotCQljbGllbnRfbmFtZSA9ICJ3ODM3ODJkIHN1YmNsaWVudCI7Ci0JZWxzZSBpZiAoa2luZCA9PSB3ODM3ODNzKQotCQljbGllbnRfbmFtZSA9ICJ3ODM3ODNzIHN1YmNsaWVudCI7Ci0JZWxzZSBpZiAoa2luZCA9PSBhczk5MTI3ZikKLQkJY2xpZW50X25hbWUgPSAiYXM5OTEyN2Ygc3ViY2xpZW50IjsKLQogCWZvciAoaSA9IDA7IGkgPD0gMTsgaSsrKSB7Ci0JCS8qIHN0b3JlIGFsbCBkYXRhIGluIHc4Mzc4MWQgKi8KLQkJaTJjX3NldF9jbGllbnRkYXRhKGRhdGEtPmxtNzVbaV0sIE5VTEwpOwotCQlkYXRhLT5sbTc1W2ldLT5hZGFwdGVyID0gYWRhcHRlcjsKLQkJZGF0YS0+bG03NVtpXS0+ZHJpdmVyID0gJnc4Mzc4MWRfZHJpdmVyOwotCQlkYXRhLT5sbTc1W2ldLT5mbGFncyA9IDA7Ci0JCXN0cmxjcHkoZGF0YS0+bG03NVtpXS0+bmFtZSwgY2xpZW50X25hbWUsCi0JCQlJMkNfTkFNRV9TSVpFKTsKLQkJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChkYXRhLT5sbTc1W2ldKSkpIHsKKwkJZGF0YS0+bG03NVtpXSA9IGkyY19uZXdfZHVtbXkoYWRhcHRlciwgc2NfYWRkcltpXSk7CisJCWlmICghZGF0YS0+bG03NVtpXSkgewogCQkJZGV2X2VycigmbmV3X2NsaWVudC0+ZGV2LCAiU3ViY2xpZW50ICVkICIKIAkJCQkicmVnaXN0cmF0aW9uIGF0IGFkZHJlc3MgMHgleCAiCi0JCQkJImZhaWxlZC5cbiIsIGksIGRhdGEtPmxtNzVbaV0tPmFkZHIpOworCQkJCSJmYWlsZWQuXG4iLCBpLCBzY19hZGRyW2ldKTsKKwkJCWVyciA9IC1FTk9NRU07CiAJCQlpZiAoaSA9PSAxKQogCQkJCWdvdG8gRVJST1JfU0NfMzsKIAkJCWdvdG8gRVJST1JfU0NfMjsKQEAgLTk4MywxMiArODc4LDkgQEAKIAogLyogVW5kbyBpbml0cyBpbiBjYXNlIG9mIGVycm9ycyAqLwogRVJST1JfU0NfMzoKLQlpMmNfZGV0YWNoX2NsaWVudChkYXRhLT5sbTc1WzBdKTsKKwlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoZGF0YS0+bG03NVswXSk7CiBFUlJPUl9TQ18yOgotCWtmcmVlKGRhdGEtPmxtNzVbMV0pOwogRVJST1JfU0NfMToKLQlrZnJlZShkYXRhLT5sbTc1WzBdKTsKLUVSUk9SX1NDXzA6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTAyOSw3ICs5MjEsNyBAQAogCSZkZXZfYXR0cl92cm0uYXR0ciwKIAkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCiAJJmRldl9hdHRyX2JlZXBfbWFzay5hdHRyLAotCSZkZXZfYXR0cl9iZWVwX2VuYWJsZS5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfYmVlcF9lbmFibGUuZGV2X2F0dHIuYXR0ciwKIAlOVUxMCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdzgzNzgxZF9ncm91cCA9IHsKQEAgLTExNTEsOTYgKzEwNDMsNzQgQEAKIAkJfQogCX0KIAotCWlmIChpc19pc2EpIHsKLQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKKy8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwogc3RhdGljIGludAotdzgzNzgxZF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCit3ODM3ODFkX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKKwkgICAgICAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQogewogCWludCB2YWwxID0gMCwgdmFsMjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhOwotCWludCBlcnI7CisJc3RydWN0IHc4Mzc4MWRfZGF0YSAqaXNhID0gdzgzNzgxZF9kYXRhX2lmX2lzYSgpOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlpbnQgYWRkcmVzcyA9IGNsaWVudC0+YWRkcjsKIAljb25zdCBjaGFyICpjbGllbnRfbmFtZSA9ICIiOwogCWVudW0gdmVuZG9yIHsgd2luYm9uZCwgYXN1cyB9IHZlbmRpZDsKIAotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIEVSUk9SMTsKLQl9CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIE9LLiBGb3Igbm93LCB3ZSBwcmVzdW1lIHdlIGhhdmUgYSB2YWxpZCBjbGllbnQuIFdlIG5vdyBjcmVhdGUgdGhlCi0JICAgY2xpZW50IHN0cnVjdHVyZSwgZXZlbiB0aG91Z2ggd2UgY2Fubm90IGZpbGwgaXQgY29tcGxldGVseSB5ZXQuCi0JICAgQnV0IGl0IGFsbG93cyB1cyB0byBhY2Nlc3MgdzgzNzgxZF97cmVhZCx3cml0ZX1fdmFsdWUuICovCi0KLQlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHc4Mzc4MWRfZGF0YSksIEdGUF9LRVJORUwpKSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIEVSUk9SMTsKLQl9Ci0KLQljbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZ3ODM3ODFkX2RyaXZlcjsKLQlkZXYgPSAmY2xpZW50LT5kZXY7Ci0KLQkvKiBOb3csIHdlIGRvIHRoZSByZW1haW5pbmcgZGV0ZWN0aW9uLiAqLworCS8qIFdlIGJsb2NrIHVwZGF0ZXMgb2YgdGhlIElTQSBkZXZpY2UgdG8gbWluaW1pemUgdGhlIHJpc2sgb2YKKwkgICBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgc2FtZSBXODM3ODFEIGNoaXAgdGhyb3VnaCBkaWZmZXJlbnQKKwkgICBpbnRlcmZhY2VzLiAqLworCWlmIChpc2EpCisJCW11dGV4X2xvY2soJmlzYS0+dXBkYXRlX2xvY2spOwogCiAJLyogVGhlIHc4Mzc4P2QgbWF5IGJlIHN0dWNrIGluIHNvbWUgb3RoZXIgYmFuayB0aGFuIGJhbmsgMC4gVGhpcyBtYXkKIAkgICBtYWtlIHJlYWRpbmcgb3RoZXIgaW5mb3JtYXRpb24gaW1wb3NzaWJsZS4gU3BlY2lmeSBhIGZvcmNlPS4uLiBvcgogCSAgIGZvcmNlXyo9Li4uIHBhcmFtZXRlciwgYW5kIHRoZSBXaW5ib25kIHdpbGwgYmUgcmVzZXQgdG8gdGhlIHJpZ2h0CiAJICAgYmFuay4gKi8KIAlpZiAoa2luZCA8IDApIHsKLQkJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19DT05GSUcpICYgMHg4MCkgeworCQlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhCisJCSAgICAoY2xpZW50LCBXODM3ODFEX1JFR19DT05GSUcpICYgMHg4MCkgewogCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRGV0ZWN0aW9uIG9mIHc4Mzc4MWQgY2hpcCAiCiAJCQkJImZhaWxlZCBhdCBzdGVwIDNcbiIpOwotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gRVJST1IyOworCQkJZ290byBlcnJfbm9kZXY7CiAJCX0KLQkJdmFsMSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CQU5LKTsKLQkJdmFsMiA9IHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19DSElQTUFOKTsKKwkJdmFsMSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkspOworCQl2YWwyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQ0hJUE1BTik7CiAJCS8qIENoZWNrIGZvciBXaW5ib25kIG9yIEFzdXMgSUQgaWYgaW4gYmFuayAwICovCiAJCWlmICgoISh2YWwxICYgMHgwNykpICYmCiAJCSAgICAoKCghKHZhbDEgJiAweDgwKSkgJiYgKHZhbDIgIT0gMHhhMykgJiYgKHZhbDIgIT0gMHhjMykpCiAJCSAgICAgfHwgKCh2YWwxICYgMHg4MCkgJiYgKHZhbDIgIT0gMHg1YykgJiYgKHZhbDIgIT0gMHgxMikpKSkgewogCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRGV0ZWN0aW9uIG9mIHc4Mzc4MWQgY2hpcCAiCiAJCQkJImZhaWxlZCBhdCBzdGVwIDRcbiIpOwotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gRVJST1IyOworCQkJZ290byBlcnJfbm9kZXY7CiAJCX0KIAkJLyogSWYgV2luYm9uZCBTTUJ1cywgY2hlY2sgYWRkcmVzcyBhdCAweDQ4LgogCQkgICBBc3VzIGRvZXNuJ3Qgc3VwcG9ydCwgZXhjZXB0IGZvciBhczk5MTI3ZiByZXYuMiAqLwogCQlpZiAoKCEodmFsMSAmIDB4ODApICYmICh2YWwyID09IDB4YTMpKSB8fAogCQkgICAgKCh2YWwxICYgMHg4MCkgJiYgKHZhbDIgPT0gMHg1YykpKSB7Ci0JCQlpZiAodzgzNzgxZF9yZWFkX3ZhbHVlCi0JCQkgICAgKGRhdGEsIFc4Mzc4MURfUkVHX0kyQ19BRERSKSAhPSBhZGRyZXNzKSB7CisJCQlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhCisJCQkgICAgKGNsaWVudCwgVzgzNzgxRF9SRUdfSTJDX0FERFIpICE9IGFkZHJlc3MpIHsKIAkJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJEZXRlY3Rpb24gb2YgdzgzNzgxZCAiCiAJCQkJCSJjaGlwIGZhaWxlZCBhdCBzdGVwIDVcbiIpOwotCQkJCWVyciA9IC1FTk9ERVY7Ci0JCQkJZ290byBFUlJPUjI7CisJCQkJZ290byBlcnJfbm9kZXY7CiAJCQl9CiAJCX0KIAl9CiAKIAkvKiBXZSBoYXZlIGVpdGhlciBoYWQgYSBmb3JjZSBwYXJhbWV0ZXIsIG9yIHdlIGhhdmUgYWxyZWFkeSBkZXRlY3RlZCB0aGUKIAkgICBXaW5ib25kLiBQdXQgaXQgbm93IGludG8gYmFuayAwIGFuZCBWZW5kb3IgSUQgSGlnaCBCeXRlICovCi0JdzgzNzgxZF93cml0ZV92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CQU5LLAotCQkJICAgICh3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkFOSykKLQkJCSAgICAgJiAweDc4KSB8IDB4ODApOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LLAorCQkoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQkFOSykKKwkJICYgMHg3OCkgfCAweDgwKTsKIAogCS8qIERldGVybWluZSB0aGUgY2hpcCB0eXBlLiAqLwogCWlmIChraW5kIDw9IDApIHsKIAkJLyogZ2V0IHZlbmRvciBJRCAqLwotCQl2YWwyID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX0NISVBNQU4pOworCQl2YWwyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQ0hJUE1BTik7CiAJCWlmICh2YWwyID09IDB4NWMpCiAJCQl2ZW5kaWQgPSB3aW5ib25kOwogCQllbHNlIGlmICh2YWwyID09IDB4MTIpCkBAIC0xMjQ4LDExICsxMTE4LDEwIEBACiAJCWVsc2UgewogCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAidzgzNzgxZCBjaGlwIHZlbmRvciBpcyAiCiAJCQkJIm5laXRoZXIgV2luYm9uZCBub3IgQXN1c1xuIik7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBFUlJPUjI7CisJCQlnb3RvIGVycl9ub2RldjsKIAkJfQogCi0JCXZhbDEgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfV0NISVBJRCk7CisJCXZhbDEgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19XQ0hJUElEKTsKIAkJaWYgKCh2YWwxID09IDB4MTAgfHwgdmFsMSA9PSAweDExKSAmJiB2ZW5kaWQgPT0gd2luYm9uZCkKIAkJCWtpbmQgPSB3ODM3ODFkOwogCQllbHNlIGlmICh2YWwxID09IDB4MzAgJiYgdmVuZGlkID09IHdpbmJvbmQpCkBAIC0xMjY2LDExICsxMTM1LDIwIEBACiAJCQkJZGV2X3dhcm4oJmFkYXB0ZXItPmRldiwgIklnbm9yaW5nICdmb3JjZScgIgogCQkJCQkgInBhcmFtZXRlciBmb3IgdW5rbm93biBjaGlwIGF0ICIKIAkJCQkJICJhZGRyZXNzIDB4JTAyeFxuIiwgYWRkcmVzcyk7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBFUlJPUjI7CisJCQlnb3RvIGVycl9ub2RldjsKKwkJfQorCisJCWlmICgoa2luZCA9PSB3ODM3ODFkIHx8IGtpbmQgPT0gdzgzNzgyZCkKKwkJICYmIHc4Mzc4MWRfYWxpYXNfZGV0ZWN0KGNsaWVudCwgdmFsMSkpIHsKKwkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIkRldmljZSBhdCAweCUwMnggYXBwZWFycyB0byAiCisJCQkJImJlIHRoZSBzYW1lIGFzIElTQSBkZXZpY2VcbiIsIGFkZHJlc3MpOworCQkJZ290byBlcnJfbm9kZXY7CiAJCX0KIAl9CiAKKwlpZiAoaXNhKQorCQltdXRleF91bmxvY2soJmlzYS0+dXBkYXRlX2xvY2spOworCiAJaWYgKGtpbmQgPT0gdzgzNzgxZCkgewogCQljbGllbnRfbmFtZSA9ICJ3ODM3ODFkIjsKIAl9IGVsc2UgaWYgKGtpbmQgPT0gdzgzNzgyZCkgewpAQCAtMTI4MSwyNCArMTE1OSw0NiBAQAogCQljbGllbnRfbmFtZSA9ICJhczk5MTI3ZiI7CiAJfQogCi0JLyogRmlsbCBpbiB0aGUgcmVtYWluaW5nIGNsaWVudCBmaWVsZHMgYW5kIHB1dCBpbnRvIHRoZSBnbG9iYWwgbGlzdCAqLwotCXN0cmxjcHkoY2xpZW50LT5uYW1lLCBjbGllbnRfbmFtZSwgSTJDX05BTUVfU0laRSk7Ci0JZGF0YS0+dHlwZSA9IGtpbmQ7CisJc3RybGNweShpbmZvLT50eXBlLCBjbGllbnRfbmFtZSwgSTJDX05BTUVfU0laRSk7CiAKLQkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCi0JaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpKSkKLQkJZ290byBFUlJPUjI7CisJcmV0dXJuIDA7CisKKyBlcnJfbm9kZXY6CisJaWYgKGlzYSkKKwkJbXV0ZXhfdW5sb2NrKCZpc2EtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludAordzgzNzgxZF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGE7CisJaW50IGVycjsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdzgzNzgxZF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gRVJST1IxOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWRhdGEtPnR5cGUgPSBpZC0+ZHJpdmVyX2RhdGE7CisJZGF0YS0+Y2xpZW50ID0gY2xpZW50OwogCiAJLyogYXR0YWNoIHNlY29uZGFyeSBpMmMgbG03NS1saWtlIGNsaWVudHMgKi8KLQlpZiAoKGVyciA9IHc4Mzc4MWRfZGV0ZWN0X3N1YmNsaWVudHMoYWRhcHRlciwgYWRkcmVzcywKLQkJCWtpbmQsIGNsaWVudCkpKQorCWVyciA9IHc4Mzc4MWRfZGV0ZWN0X3N1YmNsaWVudHMoY2xpZW50KTsKKwlpZiAoZXJyKQogCQlnb3RvIEVSUk9SMzsKIAogCS8qIEluaXRpYWxpemUgdGhlIGNoaXAgKi8KIAl3ODM3ODFkX2luaXRfZGV2aWNlKGRldik7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWVyciA9IHc4Mzc4MWRfY3JlYXRlX2ZpbGVzKGRldiwga2luZCwgMCk7CisJZXJyID0gdzgzNzgxZF9jcmVhdGVfZmlsZXMoZGV2LCBkYXRhLT50eXBlLCAwKTsKIAlpZiAoZXJyKQogCQlnb3RvIEVSUk9SNDsKIApAQCAtMTMxNCwyNjQgKzEyMTQsMTEzIEBACiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZ3ODM3ODFkX2dyb3VwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnc4Mzc4MWRfZ3JvdXBfb3B0KTsKIAotCWlmIChkYXRhLT5sbTc1WzFdKSB7Ci0JCWkyY19kZXRhY2hfY2xpZW50KGRhdGEtPmxtNzVbMV0pOwotCQlrZnJlZShkYXRhLT5sbTc1WzFdKTsKLQl9Ci0JaWYgKGRhdGEtPmxtNzVbMF0pIHsKLQkJaTJjX2RldGFjaF9jbGllbnQoZGF0YS0+bG03NVswXSk7Ci0JCWtmcmVlKGRhdGEtPmxtNzVbMF0pOwotCX0KKwlpZiAoZGF0YS0+bG03NVswXSkKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmxtNzVbMF0pOworCWlmIChkYXRhLT5sbTc1WzFdKQorCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoZGF0YS0+bG03NVsxXSk7CiBFUlJPUjM6Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLUVSUk9SMjoKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKIAlrZnJlZShkYXRhKTsKIEVSUk9SMToKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50Ci13ODM3ODFkX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3c4Mzc4MWRfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7Ci0KLQkvKiBtYWluIGNsaWVudCAqLwotCWlmIChkYXRhKSB7Ci0JCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXApOwotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7Ci0JfQotCi0JaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKLQkJcmV0dXJuIGVycjsKLQotCS8qIG1haW4gY2xpZW50ICovCi0JaWYgKGRhdGEpCi0JCWtmcmVlKGRhdGEpOwotCi0JLyogc3ViY2xpZW50ICovCi0JZWxzZQotCQlrZnJlZShjbGllbnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci13ODM3ODFkX2lzYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCWludCBlcnIsIHJlZzsKLQlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQkvKiBSZXNlcnZlIHRoZSBJU0EgcmVnaW9uICovCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwotCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VULCAyLAotCQkJICAgICJ3ODM3ODFkIikpIHsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3ODM3ODFkX2RhdGEpLCBHRlBfS0VSTkVMKSkpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBleGl0X3JlbGVhc2VfcmVnaW9uOwotCX0KLQltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKLQlkYXRhLT5jbGllbnQuYWRkciA9IHJlcy0+c3RhcnQ7Ci0JaTJjX3NldF9jbGllbnRkYXRhKCZkYXRhLT5jbGllbnQsIGRhdGEpOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOwotCi0JcmVnID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGRhdGEsIFc4Mzc4MURfUkVHX1dDSElQSUQpOwotCXN3aXRjaCAocmVnKSB7Ci0JY2FzZSAweDMwOgotCQlkYXRhLT50eXBlID0gdzgzNzgyZDsKLQkJbmFtZSA9ICJ3ODM3ODJkIjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGF0YS0+dHlwZSA9IHc4Mzc4MWQ7Ci0JCW5hbWUgPSAidzgzNzgxZCI7Ci0JfQotCXN0cmxjcHkoZGF0YS0+Y2xpZW50Lm5hbWUsIG5hbWUsIEkyQ19OQU1FX1NJWkUpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgVzgzNzgxRCBjaGlwICovCi0JdzgzNzgxZF9pbml0X2RldmljZSgmcGRldi0+ZGV2KTsKLQotCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JZXJyID0gdzgzNzgxZF9jcmVhdGVfZmlsZXMoJnBkZXYtPmRldiwgZGF0YS0+dHlwZSwgMSk7Ci0JaWYgKGVycikKLQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKLQotCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKLQlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKLQkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOwotCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOwotCX0KLQotCXJldHVybiAwOwotCi0gZXhpdF9yZW1vdmVfZmlsZXM6Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXApOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKLQlrZnJlZShkYXRhKTsKLSBleGl0X3JlbGVhc2VfcmVnaW9uOgotCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCwgMik7Ci0gZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdAotdzgzNzgxZF9pc2FfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXApOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKLQlyZWxlYXNlX3JlZ2lvbihkYXRhLT5jbGllbnQuYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VULCAyKTsKKworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmdzgzNzgxZF9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7CisKKwlpZiAoZGF0YS0+bG03NVswXSkKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmxtNzVbMF0pOworCWlmIChkYXRhLT5sbTc1WzFdKQorCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoZGF0YS0+bG03NVsxXSk7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKIAlrZnJlZShkYXRhKTsKIAogCXJldHVybiAwOwogfQogCi0vKiBUaGUgU01CdXMgbG9ja3MgaXRzZWxmLCB1c3VhbGx5LCBidXQgbm90aGluZyBtYXkgYWNjZXNzIHRoZSBXaW5ib25kIGJldHdlZW4KLSAgIGJhbmsgc3dpdGNoZXMuIElTQSBhY2Nlc3MgbXVzdCBhbHdheXMgYmUgbG9ja2VkIGV4cGxpY2l0bHkhCi0gICBXZSBpZ25vcmUgdGhlIFc4Mzc4MUQgQlVTWSBmbGFnIGF0IHRoaXMgbW9tZW50IC0gaXQgY291bGQgbGVhZCB0byBkZWFkbG9ja3MsCi0gICB3b3VsZCBzbG93IGRvd24gdGhlIFc4Mzc4MUQgYWNjZXNzIGFuZCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4KLSAgIFRoZXJlIGFyZSBzb21lIHVnbHkgdHlwZWNhc3RzIGhlcmUsIGJ1dCB0aGUgZ29vZCBuZXdzIGlzIC0gdGhleSBzaG91bGQKLSAgIG5vd2hlcmUgZWxzZSBiZSBuZWNlc3NhcnkhICovCiBzdGF0aWMgaW50Ci13ODM3ODFkX3JlYWRfdmFsdWUoc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSwgdTE2IHJlZykKK3c4Mzc4MWRfcmVhZF92YWx1ZV9pMmMoc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YSwgdTE2IHJlZykKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKLQlpbnQgcmVzLCB3b3JkX3NpemVkLCBiYW5rOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJaW50IHJlcywgYmFuazsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2w7CiAKLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlpZiAoIWNsaWVudC0+ZHJpdmVyKSB7IC8qIElTQSBkZXZpY2UgKi8KLQkJd29yZF9zaXplZCA9ICgoKHJlZyAmIDB4ZmYwMCkgPT0gMHgxMDApCi0JCQkgICAgICB8fCAoKHJlZyAmIDB4ZmYwMCkgPT0gMHgyMDApKQotCQkgICAgJiYgKCgocmVnICYgMHgwMGZmKSA9PSAweDUwKQotCQkJfHwgKChyZWcgJiAweDAwZmYpID09IDB4NTMpCi0JCQl8fCAoKHJlZyAmIDB4MDBmZikgPT0gMHg1NSkpOwotCQlpZiAocmVnICYgMHhmZjAwKSB7Ci0JCQlvdXRiX3AoVzgzNzgxRF9SRUdfQkFOSywKLQkJCSAgICAgICBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7Ci0JCQlvdXRiX3AocmVnID4+IDgsCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOwotCQl9Ci0JCW91dGJfcChyZWcgJiAweGZmLCBjbGllbnQtPmFkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7Ci0JCXJlcyA9IGluYl9wKGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJaWYgKHdvcmRfc2l6ZWQpIHsKLQkJCW91dGJfcCgocmVnICYgMHhmZikgKyAxLAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKLQkJCXJlcyA9Ci0JCQkgICAgKHJlcyA8PCA4KSArIGluYl9wKGNsaWVudC0+YWRkciArCi0JCQkJCSAgICAgICBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7Ci0JCX0KLQkJaWYgKHJlZyAmIDB4ZmYwMCkgewotCQkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQkJb3V0Yl9wKDAsIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJfQorCWJhbmsgPSAocmVnID4+IDgpICYgMHgwZjsKKwlpZiAoYmFuayA+IDIpCisJCS8qIHN3aXRjaCBiYW5rcyAqLworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQkFOSywKKwkJCQkJICBiYW5rKTsKKwlpZiAoYmFuayA9PSAwIHx8IGJhbmsgPiAyKSB7CisJCXJlcyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyAmIDB4ZmYpOwogCX0gZWxzZSB7Ci0JCWJhbmsgPSAocmVnID4+IDgpICYgMHgwZjsKLQkJaWYgKGJhbmsgPiAyKQotCQkJLyogc3dpdGNoIGJhbmtzICovCi0JCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQkFOSywKLQkJCQkJCSAgYmFuayk7Ci0JCWlmIChiYW5rID09IDAgfHwgYmFuayA+IDIpIHsKLQkJCXJlcyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyAmIDB4ZmYpOwotCQl9IGVsc2UgewotCQkJLyogc3dpdGNoIHRvIHN1YmNsaWVudCAqLwotCQkJY2wgPSBkYXRhLT5sbTc1W2JhbmsgLSAxXTsKLQkJCS8qIGNvbnZlcnQgZnJvbSBJU0EgdG8gTE03NSBJMkMgYWRkcmVzc2VzICovCi0JCQlzd2l0Y2ggKHJlZyAmIDB4ZmYpIHsKLQkJCWNhc2UgMHg1MDoJLyogVEVNUCAqLwotCQkJCXJlcyA9IHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2wsIDApKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHg1MjoJLyogQ09ORklHICovCi0JCQkJcmVzID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsLCAxKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHg1MzoJLyogSFlTVCAqLwotCQkJCXJlcyA9IHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2wsIDIpKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHg1NToJLyogT1ZFUiAqLwotCQkJZGVmYXVsdDoKLQkJCQlyZXMgPSBzd2FiMTYoaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsLCAzKSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCS8qIHN3aXRjaCB0byBzdWJjbGllbnQgKi8KKwkJY2wgPSBkYXRhLT5sbTc1W2JhbmsgLSAxXTsKKwkJLyogY29udmVydCBmcm9tIElTQSB0byBMTTc1IEkyQyBhZGRyZXNzZXMgKi8KKwkJc3dpdGNoIChyZWcgJiAweGZmKSB7CisJCWNhc2UgMHg1MDoJLyogVEVNUCAqLworCQkJcmVzID0gc3dhYjE2KGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbCwgMCkpOworCQkJYnJlYWs7CisJCWNhc2UgMHg1MjoJLyogQ09ORklHICovCisJCQlyZXMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2wsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgMHg1MzoJLyogSFlTVCAqLworCQkJcmVzID0gc3dhYjE2KGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbCwgMikpOworCQkJYnJlYWs7CisJCWNhc2UgMHg1NToJLyogT1ZFUiAqLworCQlkZWZhdWx0OgorCQkJcmVzID0gc3dhYjE2KGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbCwgMykpOworCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGJhbmsgPiAyKQotCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssIDApOwogCX0KLQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCWlmIChiYW5rID4gMikKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssIDApOworCiAJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIGludAotdzgzNzgxZF93cml0ZV92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpCit3ODM3ODFkX3dyaXRlX3ZhbHVlX2kyYyhzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7Ci0JaW50IHdvcmRfc2l6ZWQsIGJhbms7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwlpbnQgYmFuazsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2w7CiAKLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlpZiAoIWNsaWVudC0+ZHJpdmVyKSB7IC8qIElTQSBkZXZpY2UgKi8KLQkJd29yZF9zaXplZCA9ICgoKHJlZyAmIDB4ZmYwMCkgPT0gMHgxMDApCi0JCQkgICAgICB8fCAoKHJlZyAmIDB4ZmYwMCkgPT0gMHgyMDApKQotCQkgICAgJiYgKCgocmVnICYgMHgwMGZmKSA9PSAweDUzKQotCQkJfHwgKChyZWcgJiAweDAwZmYpID09IDB4NTUpKTsKLQkJaWYgKHJlZyAmIDB4ZmYwMCkgewotCQkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQkJb3V0Yl9wKHJlZyA+PiA4LAotCQkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJfQotCQlvdXRiX3AocmVnICYgMHhmZiwgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQlpZiAod29yZF9zaXplZCkgewotCQkJb3V0Yl9wKHZhbHVlID4+IDgsCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOwotCQkJb3V0Yl9wKChyZWcgJiAweGZmKSArIDEsCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQl9Ci0JCW91dGJfcCh2YWx1ZSAmIDB4ZmYsIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJaWYgKHJlZyAmIDB4ZmYwMCkgewotCQkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCi0JCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwotCQkJb3V0Yl9wKDAsIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKLQkJfQorCWJhbmsgPSAocmVnID4+IDgpICYgMHgwZjsKKwlpZiAoYmFuayA+IDIpCisJCS8qIHN3aXRjaCBiYW5rcyAqLworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQkFOSywKKwkJCQkJICBiYW5rKTsKKwlpZiAoYmFuayA9PSAwIHx8IGJhbmsgPiAyKSB7CisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcgJiAweGZmLAorCQkJCQkgIHZhbHVlICYgMHhmZik7CiAJfSBlbHNlIHsKLQkJYmFuayA9IChyZWcgPj4gOCkgJiAweDBmOwotCQlpZiAoYmFuayA+IDIpCi0JCQkvKiBzd2l0Y2ggYmFua3MgKi8KLQkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LLAotCQkJCQkJICBiYW5rKTsKLQkJaWYgKGJhbmsgPT0gMCB8fCBiYW5rID4gMikgewotCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZyAmIDB4ZmYsCi0JCQkJCQkgIHZhbHVlICYgMHhmZik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBzd2l0Y2ggdG8gc3ViY2xpZW50ICovCi0JCQljbCA9IGRhdGEtPmxtNzVbYmFuayAtIDFdOwotCQkJLyogY29udmVydCBmcm9tIElTQSB0byBMTTc1IEkyQyBhZGRyZXNzZXMgKi8KLQkJCXN3aXRjaCAocmVnICYgMHhmZikgewotCQkJY2FzZSAweDUyOgkvKiBDT05GSUcgKi8KLQkJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsLCAxLCB2YWx1ZSAmIDB4ZmYpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAweDUzOgkvKiBIWVNUICovCi0JCQkJaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbCwgMiwgc3dhYjE2KHZhbHVlKSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NTU6CS8qIE9WRVIgKi8KLQkJCQlpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsLCAzLCBzd2FiMTYodmFsdWUpKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJLyogc3dpdGNoIHRvIHN1YmNsaWVudCAqLworCQljbCA9IGRhdGEtPmxtNzVbYmFuayAtIDFdOworCQkvKiBjb252ZXJ0IGZyb20gSVNBIHRvIExNNzUgSTJDIGFkZHJlc3NlcyAqLworCQlzd2l0Y2ggKHJlZyAmIDB4ZmYpIHsKKwkJY2FzZSAweDUyOgkvKiBDT05GSUcgKi8KKwkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2wsIDEsIHZhbHVlICYgMHhmZik7CisJCQlicmVhazsKKwkJY2FzZSAweDUzOgkvKiBIWVNUICovCisJCQlpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsLCAyLCBzd2FiMTYodmFsdWUpKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NTU6CS8qIE9WRVIgKi8KKwkJCWkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2wsIDMsIHN3YWIxNih2YWx1ZSkpOworCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGJhbmsgPiAyKQotCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssIDApOwogCX0KLQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCWlmIChiYW5rID4gMikKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssIDApOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NzgsNyArMTQyNyw3IEBACiBzdGF0aWMgc3RydWN0IHc4Mzc4MWRfZGF0YSAqdzgzNzgxZF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKIAlpbnQgaTsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKQEAgLTE3NzUsOCArMTUyNCw3IEBACiAJCQkJCQlXODM3ODFEX1JFR19BTEFSTTIpIDw8IDgpOwogCQl9CiAJCWkgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfQkVFUF9JTlRTMik7Ci0JCWRhdGEtPmJlZXBfZW5hYmxlID0gaSA+PiA3OwotCQlkYXRhLT5iZWVwX21hc2sgPSAoKGkgJiAweDdmKSA8PCA4KSArCisJCWRhdGEtPmJlZXBfbWFzayA9IChpIDw8IDgpICsKIAkJICAgIHc4Mzc4MWRfcmVhZF92YWx1ZShkYXRhLCBXODM3ODFEX1JFR19CRUVQX0lOVFMxKTsKIAkJaWYgKChkYXRhLT50eXBlICE9IHc4Mzc4MWQpICYmIChkYXRhLT50eXBlICE9IGFzOTkxMjdmKSkgewogCQkJZGF0YS0+YmVlcF9tYXNrIHw9CkBAIC0xNzkyLDYgKzE1NDAsMjc1IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3ODM3ODFkX2lkc1tdID0geworCXsgInc4Mzc4MWQiLCB3ODM3ODFkLCB9LAorCXsgInc4Mzc4MmQiLCB3ODM3ODJkLCB9LAorCXsgInc4Mzc4M3MiLCB3ODM3ODNzLCB9LAorCXsgImFzOTkxMjdmIiwgYXM5OTEyN2YgfSwKKwl7IC8qIExJU1QgRU5EICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdzgzNzgxZF9pZHMpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdzgzNzgxZF9kcml2ZXIgPSB7CisJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ3ODM3ODFkIiwKKwl9LAorCS5wcm9iZQkJPSB3ODM3ODFkX3Byb2JlLAorCS5yZW1vdmUJCT0gdzgzNzgxZF9yZW1vdmUsCisJLmlkX3RhYmxlCT0gdzgzNzgxZF9pZHMsCisJLmRldGVjdAkJPSB3ODM3ODFkX2RldGVjdCwKKwkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKK307CisKKy8qCisgKiBJU0EgcmVsYXRlZCBjb2RlCisgKi8KKyNpZmRlZiBDT05GSUdfSVNBCisKKy8qIElTQSBkZXZpY2UsIGlmIGZvdW5kICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGlzYV9hZGRyZXNzID0gMHgyOTA7CisKKy8qIEkyQyBkZXZpY2VzIGdldCB0aGlzIG5hbWUgYXR0cmlidXRlIGF1dG9tYXRpY2FsbHksIGJ1dCBmb3IgSVNBIGRldmljZXMKKyAgIHdlIG11c3QgY3JlYXRlIGl0IGJ5IG91cnNlbHZlcy4gKi8KK3N0YXRpYyBzc2l6ZV90CitzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+bmFtZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCB3ODM3ODFkX2RhdGEgKnc4Mzc4MWRfZGF0YV9pZl9pc2Eodm9pZCkKK3sKKwlyZXR1cm4gcGRldiA/IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpIDogTlVMTDsKK30KKworLyogUmV0dXJucyAxIGlmIHRoZSBJMkMgY2hpcCBhcHBlYXJzIHRvIGJlIGFuIGFsaWFzIG9mIHRoZSBJU0EgY2hpcCAqLworc3RhdGljIGludCB3ODM3ODFkX2FsaWFzX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjaGlwaWQpCit7CisJc3RydWN0IHc4Mzc4MWRfZGF0YSAqaXNhOworCWludCBpOworCisJaWYgKCFwZGV2KQkvKiBObyBJU0EgY2hpcCAqLworCQlyZXR1cm4gMDsKKworCWlzYSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZShpc2EsIFc4Mzc4MURfUkVHX0kyQ19BRERSKSAhPSBjbGllbnQtPmFkZHIpCisJCXJldHVybiAwOwkvKiBBZGRyZXNzIGRvZXNuJ3QgbWF0Y2ggKi8KKwlpZiAodzgzNzgxZF9yZWFkX3ZhbHVlKGlzYSwgVzgzNzgxRF9SRUdfV0NISVBJRCkgIT0gY2hpcGlkKQorCQlyZXR1cm4gMDsJLyogQ2hpcCB0eXBlIGRvZXNuJ3QgbWF0Y2ggKi8KKworCS8qIFdlIGNvbXBhcmUgYWxsIHRoZSBsaW1pdCByZWdpc3RlcnMsIHRoZSBjb25maWcgcmVnaXN0ZXIgYW5kIHRoZQorCSAqIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyAqLworCWZvciAoaSA9IDB4MmI7IGkgPD0gMHgzZDsgaSsrKSB7CisJCWlmICh3ODM3ODFkX3JlYWRfdmFsdWUoaXNhLCBpKSAhPQorCQkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgaSkpCisJCQlyZXR1cm4gMDsKKwl9CisJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZShpc2EsIFc4Mzc4MURfUkVHX0NPTkZJRykgIT0KKwkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzgxRF9SRUdfQ09ORklHKSkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMHg0MzsgaSA8PSAweDQ2OyBpKyspIHsKKwkJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZShpc2EsIGkpICE9CisJCSAgICBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBpKSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3ODM3ODFkX3JlYWRfdmFsdWVfaXNhKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcpCit7CisJaW50IHdvcmRfc2l6ZWQsIHJlczsKKworCXdvcmRfc2l6ZWQgPSAoKChyZWcgJiAweGZmMDApID09IDB4MTAwKQorCQkgICAgICB8fCAoKHJlZyAmIDB4ZmYwMCkgPT0gMHgyMDApKQorCSAgICAmJiAoKChyZWcgJiAweDAwZmYpID09IDB4NTApCisJCXx8ICgocmVnICYgMHgwMGZmKSA9PSAweDUzKQorCQl8fCAoKHJlZyAmIDB4MDBmZikgPT0gMHg1NSkpOworCWlmIChyZWcgJiAweGZmMDApIHsKKwkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCisJCSAgICAgICBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwkJb3V0Yl9wKHJlZyA+PiA4LAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJfQorCW91dGJfcChyZWcgJiAweGZmLCBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwlyZXMgPSBpbmJfcChkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwlpZiAod29yZF9zaXplZCkgeworCQlvdXRiX3AoKHJlZyAmIDB4ZmYpICsgMSwKKwkJICAgICAgIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCQlyZXMgPQorCQkgICAgKHJlcyA8PCA4KSArIGluYl9wKGRhdGEtPmlzYV9hZGRyICsKKwkJCQkgICAgICAgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCX0KKwlpZiAocmVnICYgMHhmZjAwKSB7CisJCW91dGJfcChXODM3ODFEX1JFR19CQU5LLAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJCW91dGJfcCgwLCBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwl9CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK3c4Mzc4MWRfd3JpdGVfdmFsdWVfaXNhKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcsIHUxNiB2YWx1ZSkKK3sKKwlpbnQgd29yZF9zaXplZDsKKworCXdvcmRfc2l6ZWQgPSAoKChyZWcgJiAweGZmMDApID09IDB4MTAwKQorCQkgICAgICB8fCAoKHJlZyAmIDB4ZmYwMCkgPT0gMHgyMDApKQorCSAgICAmJiAoKChyZWcgJiAweDAwZmYpID09IDB4NTMpCisJCXx8ICgocmVnICYgMHgwMGZmKSA9PSAweDU1KSk7CisJaWYgKHJlZyAmIDB4ZmYwMCkgeworCQlvdXRiX3AoVzgzNzgxRF9SRUdfQkFOSywKKwkJICAgICAgIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCQlvdXRiX3AocmVnID4+IDgsCisJCSAgICAgICBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKKwl9CisJb3V0Yl9wKHJlZyAmIDB4ZmYsIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOworCWlmICh3b3JkX3NpemVkKSB7CisJCW91dGJfcCh2YWx1ZSA+PiA4LAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0RBVEFfUkVHX09GRlNFVCk7CisJCW91dGJfcCgocmVnICYgMHhmZikgKyAxLAorCQkgICAgICAgZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCk7CisJfQorCW91dGJfcCh2YWx1ZSAmIDB4ZmYsIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCWlmIChyZWcgJiAweGZmMDApIHsKKwkJb3V0Yl9wKFc4Mzc4MURfUkVHX0JBTkssCisJCSAgICAgICBkYXRhLT5pc2FfYWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKKwkJb3V0Yl9wKDAsIGRhdGEtPmlzYV9hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOworCX0KK30KKworLyogVGhlIFNNQnVzIGxvY2tzIGl0c2VsZiwgdXN1YWxseSwgYnV0IG5vdGhpbmcgbWF5IGFjY2VzcyB0aGUgV2luYm9uZCBiZXR3ZWVuCisgICBiYW5rIHN3aXRjaGVzLiBJU0EgYWNjZXNzIG11c3QgYWx3YXlzIGJlIGxvY2tlZCBleHBsaWNpdGx5IQorICAgV2UgaWdub3JlIHRoZSBXODM3ODFEIEJVU1kgZmxhZyBhdCB0aGlzIG1vbWVudCAtIGl0IGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzLAorICAgd291bGQgc2xvdyBkb3duIHRoZSBXODM3ODFEIGFjY2VzcyBhbmQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuCisgICBUaGVyZSBhcmUgc29tZSB1Z2x5IHR5cGVjYXN0cyBoZXJlLCBidXQgdGhlIGdvb2QgbmV3cyBpcyAtIHRoZXkgc2hvdWxkCisgICBub3doZXJlIGVsc2UgYmUgbmVjZXNzYXJ5ISAqLworc3RhdGljIGludAordzgzNzgxZF9yZWFkX3ZhbHVlKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwlpbnQgcmVzOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJaWYgKGNsaWVudCkKKwkJcmVzID0gdzgzNzgxZF9yZWFkX3ZhbHVlX2kyYyhkYXRhLCByZWcpOworCWVsc2UKKwkJcmVzID0gdzgzNzgxZF9yZWFkX3ZhbHVlX2lzYShkYXRhLCByZWcpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludAordzgzNzgxZF93cml0ZV92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWlmIChjbGllbnQpCisJCXc4Mzc4MWRfd3JpdGVfdmFsdWVfaTJjKGRhdGEsIHJlZywgdmFsdWUpOworCWVsc2UKKwkJdzgzNzgxZF93cml0ZV92YWx1ZV9pc2EoZGF0YSwgcmVnLCB2YWx1ZSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK3c4Mzc4MWRfaXNhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGVyciwgcmVnOworCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGE7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwkvKiBSZXNlcnZlIHRoZSBJU0EgcmVnaW9uICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VULCAyLAorCQkJICAgICJ3ODM3ODFkIikpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3ODM3ODFkX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0X3JlbGVhc2VfcmVnaW9uOworCX0KKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKKwlkYXRhLT5pc2FfYWRkciA9IHJlcy0+c3RhcnQ7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CisKKwlyZWcgPSB3ODM3ODFkX3JlYWRfdmFsdWUoZGF0YSwgVzgzNzgxRF9SRUdfV0NISVBJRCk7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIDB4MzA6CisJCWRhdGEtPnR5cGUgPSB3ODM3ODJkOworCQlkYXRhLT5uYW1lID0gInc4Mzc4MmQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYXRhLT50eXBlID0gdzgzNzgxZDsKKwkJZGF0YS0+bmFtZSA9ICJ3ODM3ODFkIjsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBXODM3ODFEIGNoaXAgKi8KKwl3ODM3ODFkX2luaXRfZGV2aWNlKCZwZGV2LT5kZXYpOworCisJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwllcnIgPSB3ODM3ODFkX2NyZWF0ZV9maWxlcygmcGRldi0+ZGV2LCBkYXRhLT50eXBlLCAxKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOworCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOworCisJZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYpOworCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7CisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CisJfQorCisJcmV0dXJuIDA7CisKKyBleGl0X3JlbW92ZV9maWxlczoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXBfb3B0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOworCWtmcmVlKGRhdGEpOworIGV4aXRfcmVsZWFzZV9yZWdpb246CisJcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VULCAyKTsKKyBleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0Cit3ODM3ODFkX2lzYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ3ODM3ODFkX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cF9vcHQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7CisJcmVsZWFzZV9yZWdpb24oZGF0YS0+aXNhX2FkZHIgKyBXODM3ODFEX0FERFJfUkVHX09GRlNFVCwgMik7CisJa2ZyZWUoZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdzgzNzgxZF9pc2FfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9ICJ3ODM3ODFkIiwKKwl9LAorCS5wcm9iZSA9IHc4Mzc4MWRfaXNhX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3ODM3ODFkX2lzYV9yZW1vdmUpLAorfTsKKwogLyogcmV0dXJuIDEgaWYgYSBzdXBwb3J0ZWQgY2hpcCBpcyBmb3VuZCwgMCBvdGhlcndpc2UgKi8KIHN0YXRpYyBpbnQgX19pbml0CiB3ODM3ODFkX2lzYV9mb3VuZCh1bnNpZ25lZCBzaG9ydCBhZGRyZXNzKQpAQCAtMTkyOCwxOCArMTk0NSwxNCBAQAogfQogCiBzdGF0aWMgaW50IF9faW5pdAotc2Vuc29yc193ODM3ODFkX2luaXQodm9pZCkKK3c4Mzc4MWRfaXNhX3JlZ2lzdGVyKHZvaWQpCiB7CiAJaW50IHJlczsKIAotCXJlcyA9IGkyY19hZGRfZHJpdmVyKCZ3ODM3ODFkX2RyaXZlcik7Ci0JaWYgKHJlcykKLQkJZ290byBleGl0OwotCiAJaWYgKHc4Mzc4MWRfaXNhX2ZvdW5kKGlzYV9hZGRyZXNzKSkgewogCQlyZXMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnc4Mzc4MWRfaXNhX2RyaXZlcik7CiAJCWlmIChyZXMpCi0JCQlnb3RvIGV4aXRfdW5yZWdfaTJjX2RyaXZlcjsKKwkJCWdvdG8gZXhpdDsKIAogCQkvKiBTZXRzIGdsb2JhbCBwZGV2IGFzIGEgc2lkZSBlZmZlY3QgKi8KIAkJcmVzID0gdzgzNzgxZF9pc2FfZGV2aWNlX2FkZChpc2FfYWRkcmVzcyk7CkBAIC0xOTQ5LDEwICsxOTYyLDg2IEBACiAKIAlyZXR1cm4gMDsKIAotIGV4aXRfdW5yZWdfaXNhX2RyaXZlcjoKK2V4aXRfdW5yZWdfaXNhX2RyaXZlcjoKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdzgzNzgxZF9pc2FfZHJpdmVyKTsKLSBleGl0X3VucmVnX2kyY19kcml2ZXI6Ci0JaTJjX2RlbF9kcml2ZXIoJnc4Mzc4MWRfZHJpdmVyKTsKK2V4aXQ6CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cit3ODM3ODFkX2lzYV91bnJlZ2lzdGVyKHZvaWQpCit7CisJaWYgKHBkZXYpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3ODM3ODFkX2lzYV9kcml2ZXIpOworCX0KK30KKyNlbHNlIC8qICFDT05GSUdfSVNBICovCisKK3N0YXRpYyBzdHJ1Y3QgdzgzNzgxZF9kYXRhICp3ODM3ODFkX2RhdGFfaWZfaXNhKHZvaWQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3c4Mzc4MWRfYWxpYXNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNoaXBpZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordzgzNzgxZF9yZWFkX3ZhbHVlKHN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEsIHUxNiByZWcpCit7CisJaW50IHJlczsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCXJlcyA9IHc4Mzc4MWRfcmVhZF92YWx1ZV9pMmMoZGF0YSwgcmVnKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludAordzgzNzgxZF93cml0ZV92YWx1ZShzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhLCB1MTYgcmVnLCB1MTYgdmFsdWUpCit7CisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJdzgzNzgxZF93cml0ZV92YWx1ZV9pMmMoZGF0YSwgcmVnLCB2YWx1ZSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdAordzgzNzgxZF9pc2FfcmVnaXN0ZXIodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cit3ODM3ODFkX2lzYV91bnJlZ2lzdGVyKHZvaWQpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0lTQSAqLworCitzdGF0aWMgaW50IF9faW5pdAorc2Vuc29yc193ODM3ODFkX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzOworCisJLyogV2UgcmVnaXN0ZXIgdGhlIElTQSBkZXZpY2UgZmlyc3QsIHNvIHRoYXQgd2UgY2FuIHNraXAgdGhlCisJICogcmVnaXN0cmF0aW9uIG9mIGFuIEkyQyBpbnRlcmZhY2UgdG8gdGhlIHNhbWUgZGV2aWNlLiAqLworCXJlcyA9IHc4Mzc4MWRfaXNhX3JlZ2lzdGVyKCk7CisJaWYgKHJlcykKKwkJZ290byBleGl0OworCisJcmVzID0gaTJjX2FkZF9kcml2ZXIoJnc4Mzc4MWRfZHJpdmVyKTsKKwlpZiAocmVzKQorCQlnb3RvIGV4aXRfdW5yZWdfaXNhOworCisJcmV0dXJuIDA7CisKKyBleGl0X3VucmVnX2lzYToKKwl3ODM3ODFkX2lzYV91bnJlZ2lzdGVyKCk7CiAgZXhpdDoKIAlyZXR1cm4gcmVzOwogfQpAQCAtMTk2MCwxMCArMjA0OSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQKIHNlbnNvcnNfdzgzNzgxZF9leGl0KHZvaWQpCiB7Ci0JaWYgKHBkZXYpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7Ci0JCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3ODM3ODFkX2lzYV9kcml2ZXIpOwotCX0KKwl3ODM3ODFkX2lzYV91bnJlZ2lzdGVyKCk7CiAJaTJjX2RlbF9kcml2ZXIoJnc4Mzc4MWRfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3OTFkLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYwppbmRleCBkZTIxMTQyLi41NzY4ZGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYwpAQCAtMjMsNyArMjMsNyBAQAogICAgIFN1cHBvcnRzIGZvbGxvd2luZyBjaGlwczoKIAogICAgIENoaXAJI3ZpbgkjZmFuaW4JI3B3bQkjdGVtcAl3Y2hpcGlkCXZlbmRpZAlpMmMJSVNBCi0gICAgdzgzNzkxZAkxMAk1CTMJMwkweDcxCTB4NWNhMwl5ZXMJbm8KKyAgICB3ODM3OTFkCTEwCTUJNQkzCTB4NzEJMHg1Y2EzCXllcwlubwogCiAgICAgVGhlIHc4Mzc5MWQgY2hpcCBhcHBlYXJzIHRvIGJlIHBhcnQgd2F5IGJldHdlZW4gdGhlIDgzNzgxZCBhbmQgdGhlCiAgICAgODM3OTJkLiBUaHVzLCB0aGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIGJvdGggdGhlIHc4Mzc5MmQuYyBhbmQKQEAgLTQ1LDYgKzQ1LDcgQEAKICNkZWZpbmUgTlVNQkVSX09GX1ZJTgkJMTAKICNkZWZpbmUgTlVNQkVSX09GX0ZBTklOCQk1CiAjZGVmaW5lIE5VTUJFUl9PRl9URU1QSU4JMworI2RlZmluZSBOVU1CRVJfT0ZfUFdNCQk1CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCAweDJlLCAweDJmLApAQCAtMTE2LDYgKzExNywyNSBAQAogCTB4QkQsCQkJLyogRkFOIDUgQ291bnQgTG93IExpbWl0IGluIERhdGFTaGVldCAqLwogfTsKIAorc3RhdGljIGNvbnN0IHU4IFc4Mzc5MURfUkVHX1BXTVtOVU1CRVJfT0ZfUFdNXSA9IHsKKwkweDgxLAkJCS8qIFBXTSAxIGR1dHkgY3ljbGUgcmVnaXN0ZXIgaW4gRGF0YVNoZWV0ICovCisJMHg4MywJCQkvKiBQV00gMiBkdXR5IGN5Y2xlIHJlZ2lzdGVyIGluIERhdGFTaGVldCAqLworCTB4OTQsCQkJLyogUFdNIDMgZHV0eSBjeWNsZSByZWdpc3RlciBpbiBEYXRhU2hlZXQgKi8KKwkweEEwLAkJCS8qIFBXTSA0IGR1dHkgY3ljbGUgcmVnaXN0ZXIgaW4gRGF0YVNoZWV0ICovCisJMHhBMSwJCQkvKiBQV00gNSBkdXR5IGN5Y2xlIHJlZ2lzdGVyIGluIERhdGFTaGVldCAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IFc4Mzc5MURfUkVHX1RFTVBfVEFSR0VUWzNdID0geworCTB4ODUsCQkJLyogUFdNIDEgdGFyZ2V0IHRlbXBlcmF0dXJlIGZvciB0ZW1wIDEgKi8KKwkweDg2LAkJCS8qIFBXTSAyIHRhcmdldCB0ZW1wZXJhdHVyZSBmb3IgdGVtcCAyICovCisJMHg5NiwJCQkvKiBQV00gMyB0YXJnZXQgdGVtcGVyYXR1cmUgZm9yIHRlbXAgMyAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IFc4Mzc5MURfUkVHX1RFTVBfVE9MWzJdID0geworCTB4ODcsCQkJLyogUFdNIDEvMiB0ZW1wZXJhdHVyZSB0b2xlcmFuY2UgKi8KKwkweDk3LAkJCS8qIFBXTSAzIHRlbXBlcmF0dXJlIHRvbGVyYW5jZSAqLworfTsKKwogc3RhdGljIGNvbnN0IHU4IFc4Mzc5MURfUkVHX0ZBTl9DRkdbMl0gPSB7CiAJMHg4NCwJCQkvKiBGQU4gMS8yIGNvbmZpZ3VyYXRpb24gKi8KIAkweDk1LAkJCS8qIEZBTiAzIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTE2MCw2ICsxODAsNyBAQAogCTB4QTMsCQkJLyogQkVFUCBDb250cm9sIFJlZ2lzdGVyIDMgKi8KIH07CiAKKyNkZWZpbmUgVzgzNzkxRF9SRUdfR1BJTwkJMHgxNQogI2RlZmluZSBXODM3OTFEX1JFR19DT05GSUcJCTB4NDAKICNkZWZpbmUgVzgzNzkxRF9SRUdfVklEX0ZBTkRJVgkJMHg0NwogI2RlZmluZSBXODM3OTFEX1JFR19ESURfVklENAkJMHg0OQpAQCAtMjI0LDYgKzI0NSwxNSBAQAogCQkJCSAodmFsKSA8IDAgPyAoKHZhbCkgLSAyNTApIC8gNTAwICogMTI4IDogXAogCQkJCSAoKHZhbCkgKyAyNTApIC8gNTAwICogMTI4KQogCisvKiBmb3IgdGhlcm1hbCBjcnVpc2UgdGFyZ2V0IHRlbXAsIDctYml0cywgTFNCID0gMSBkZWdyZWUgQ2Vsc2l1cyAqLworI2RlZmluZSBUQVJHRVRfVEVNUF9UT19SRUcodmFsKQkJKCh2YWwpIDwgMCA/IDAgOiBcCisJCQkJCSh2YWwpID49IDEyNzAwMCA/IDEyNyA6IFwKKwkJCQkJKCh2YWwpICsgNTAwKSAvIDEwMDApCisKKy8qIGZvciB0aGVybWFsIGNydWlzZSB0ZW1wIHRvbGVyYW5jZSwgNC1iaXRzLCBMU0IgPSAxIGRlZ3JlZSBDZWxzaXVzICovCisjZGVmaW5lIFRPTF9URU1QX1RPX1JFRyh2YWwpCQkoKHZhbCkgPCAwID8gMCA6IFwKKwkJCQkJKHZhbCkgPj0gMTUwMDAgPyAxNSA6IFwKKwkJCQkJKCh2YWwpICsgNTAwKSAvIDEwMDApCiAKICNkZWZpbmUgQkVFUF9NQVNLX1RPX1JFRyh2YWwpCQkoKHZhbCkgJiAweGZmZmZmZikKICNkZWZpbmUgQkVFUF9NQVNLX0ZST01fUkVHKHZhbCkJCSgodmFsKSAmIDB4ZmZmZmZmKQpAQCAtMjc1LDYgKzMwNSwxNCBAQAogCQkJCSAgIHR3byBzZW5zb3JzIHdpdGggdGhyZWUgdmFsdWVzCiAJCQkJICAgKGN1ciwgb3ZlciwgaHlzdCkgICovCiAKKwkvKiBQV01zICovCisJdTggcHdtWzVdOwkJLyogcHdtIGR1dHkgY3ljbGUgKi8KKwl1OCBwd21fZW5hYmxlWzNdOwkvKiBwd20gZW5hYmxlIHN0YXR1cyBmb3IgZmFuIDEtMworCQkJCQkoZmFuIDQtNSBvbmx5IHN1cHBvcnQgbWFudWFsIG1vZGUpICovCisKKwl1OCB0ZW1wX3RhcmdldFszXTsJLyogcHdtIDEtMyB0YXJnZXQgdGVtcGVyYXR1cmUgKi8KKwl1OCB0ZW1wX3RvbGVyYW5jZVszXTsJLyogcHdtIDEtMyB0ZW1wZXJhdHVyZSB0b2xlcmFuY2UgKi8KKwogCS8qIE1pc2MgKi8KIAl1MzIgYWxhcm1zOwkJLyogcmVhbHRpbWUgc3RhdHVzIHJlZ2lzdGVyIGVuY29kaW5nLGNvbWJpbmVkICovCiAJdTggYmVlcF9lbmFibGU7CQkvKiBHbG9iYWwgYmVlcCBlbmFibGUgKi8KQEAgLTY1Miw2ICs2OTAsMjE3IEBACiAJU0VOU09SX0FUVFIoZmFuNV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMjIpLAogfTsKIAorLyogcmVhZC93cml0ZSBQV01zICovCitzdGF0aWMgc3NpemVfdCBzaG93X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gdzgzNzkxZF91cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGRhdGEtPnB3bVtucl0pOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9wd20oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnB3bVtucl0gPSBTRU5TT1JTX0xJTUlUKHZhbCwgMCwgMjU1KTsKKwl3ODM3OTFkX3dyaXRlKGNsaWVudCwgVzgzNzkxRF9SRUdfUFdNW25yXSwgZGF0YS0+cHdtW25yXSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV9wd21bXSA9IHsKKwlTRU5TT1JfQVRUUihwd20xLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfcHdtLCBzdG9yZV9wd20sIDApLAorCVNFTlNPUl9BVFRSKHB3bTIsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19wd20sIHN0b3JlX3B3bSwgMSksCisJU0VOU09SX0FUVFIocHdtMywgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bSwgc3RvcmVfcHdtLCAyKSwKKwlTRU5TT1JfQVRUUihwd200LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfcHdtLCBzdG9yZV9wd20sIDMpLAorCVNFTlNPUl9BVFRSKHB3bTUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19wd20sIHN0b3JlX3B3bSwgNCksCit9OworCitzdGF0aWMgc3NpemVfdCBzaG93X3B3bWVuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gdzgzNzkxZF91cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGRhdGEtPnB3bV9lbmFibGVbbnJdICsgMSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3B3bWVuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHc4Mzc5MWRfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwl1OCByZWdfY2ZnX3RtcDsKKwl1OCByZWdfaWR4ID0gMDsKKwl1OCB2YWxfc2hpZnQgPSAwOworCXU4IGtlZXBfbWFzayA9IDA7CisKKwlpbnQgcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisKKwlpZiAocmV0IHx8IHZhbCA8IDEgfHwgdmFsID4gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+cHdtX2VuYWJsZVtucl0gPSB2YWwgLSAxOworCXN3aXRjaCAobnIpIHsKKwljYXNlIDA6CisJCXJlZ19pZHggPSAwOworCQl2YWxfc2hpZnQgPSAyOworCQlrZWVwX21hc2sgPSAweGYzOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlZ19pZHggPSAwOworCQl2YWxfc2hpZnQgPSA0OworCQlrZWVwX21hc2sgPSAweGNmOworCQlicmVhazsKKwljYXNlIDI6CisJCXJlZ19pZHggPSAxOworCQl2YWxfc2hpZnQgPSAyOworCQlrZWVwX21hc2sgPSAweGYzOworCQlicmVhazsKKwl9CisKKwlyZWdfY2ZnX3RtcCA9IHc4Mzc5MWRfcmVhZChjbGllbnQsIFc4Mzc5MURfUkVHX0ZBTl9DRkdbcmVnX2lkeF0pOworCXJlZ19jZmdfdG1wID0gKHJlZ19jZmdfdG1wICYga2VlcF9tYXNrKSB8CisJCQkJCWRhdGEtPnB3bV9lbmFibGVbbnJdIDw8IHZhbF9zaGlmdDsKKworCXc4Mzc5MWRfd3JpdGUoY2xpZW50LCBXODM3OTFEX1JFR19GQU5fQ0ZHW3JlZ19pZHhdLCByZWdfY2ZnX3RtcCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV9wd21lbmFibGVbXSA9IHsKKwlTRU5TT1JfQVRUUihwd20xX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bWVuYWJsZSwgc3RvcmVfcHdtZW5hYmxlLCAwKSwKKwlTRU5TT1JfQVRUUihwd20yX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bWVuYWJsZSwgc3RvcmVfcHdtZW5hYmxlLCAxKSwKKwlTRU5TT1JfQVRUUihwd20zX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bWVuYWJsZSwgc3RvcmVfcHdtZW5hYmxlLCAyKSwKK307CisKKy8qIEZvciBTbWFydCBGYW4gSSAvIFRoZXJtYWwgQ3J1aXNlICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfdGFyZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gdzgzNzkxZF91cGRhdGVfZGV2aWNlKGRldik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QMV9GUk9NX1JFRyhkYXRhLT50ZW1wX3RhcmdldFtucl0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfdGVtcF90YXJnZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdTggdGFyZ2V0X21hc2s7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnRlbXBfdGFyZ2V0W25yXSA9IFRBUkdFVF9URU1QX1RPX1JFRyh2YWwpOworCXRhcmdldF9tYXNrID0gdzgzNzkxZF9yZWFkKGNsaWVudCwKKwkJCQlXODM3OTFEX1JFR19URU1QX1RBUkdFVFtucl0pICYgMHg4MDsKKwl3ODM3OTFkX3dyaXRlKGNsaWVudCwgVzgzNzkxRF9SRUdfVEVNUF9UQVJHRVRbbnJdLAorCQkJCWRhdGEtPnRlbXBfdGFyZ2V0W25yXSB8IHRhcmdldF9tYXNrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBfdGFyZ2V0W10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfdGFyZ2V0LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfdGVtcF90YXJnZXQsIHN0b3JlX3RlbXBfdGFyZ2V0LCAwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMl90YXJnZXQsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd190ZW1wX3RhcmdldCwgc3RvcmVfdGVtcF90YXJnZXQsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAzX3RhcmdldCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3RlbXBfdGFyZ2V0LCBzdG9yZV90ZW1wX3RhcmdldCwgMiksCit9OworCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfdG9sZXJhbmNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhID0gdzgzNzkxZF91cGRhdGVfZGV2aWNlKGRldik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QMV9GUk9NX1JFRyhkYXRhLT50ZW1wX3RvbGVyYW5jZVtucl0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfdGVtcF90b2xlcmFuY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM3OTFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdTggdGFyZ2V0X21hc2s7CisJdTggcmVnX2lkeCA9IDA7CisJdTggdmFsX3NoaWZ0ID0gMDsKKwl1OCBrZWVwX21hc2sgPSAwOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAobnIpIHsKKwljYXNlIDA6CisJCXJlZ19pZHggPSAwOworCQl2YWxfc2hpZnQgPSAwOworCQlrZWVwX21hc2sgPSAweGYwOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlZ19pZHggPSAwOworCQl2YWxfc2hpZnQgPSA0OworCQlrZWVwX21hc2sgPSAweDBmOworCQlicmVhazsKKwljYXNlIDI6CisJCXJlZ19pZHggPSAxOworCQl2YWxfc2hpZnQgPSAwOworCQlrZWVwX21hc2sgPSAweGYwOworCQlicmVhazsKKwl9CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+dGVtcF90b2xlcmFuY2VbbnJdID0gVE9MX1RFTVBfVE9fUkVHKHZhbCk7CisJdGFyZ2V0X21hc2sgPSB3ODM3OTFkX3JlYWQoY2xpZW50LAorCQkJVzgzNzkxRF9SRUdfVEVNUF9UT0xbcmVnX2lkeF0pICYga2VlcF9tYXNrOworCXc4Mzc5MWRfd3JpdGUoY2xpZW50LCBXODM3OTFEX1JFR19URU1QX1RPTFtyZWdfaWR4XSwKKwkJCShkYXRhLT50ZW1wX3RvbGVyYW5jZVtucl0gPDwgdmFsX3NoaWZ0KSB8IHRhcmdldF9tYXNrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBfdG9sZXJhbmNlW10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfdG9sZXJhbmNlLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfdGVtcF90b2xlcmFuY2UsIHN0b3JlX3RlbXBfdG9sZXJhbmNlLCAwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMl90b2xlcmFuY2UsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd190ZW1wX3RvbGVyYW5jZSwgc3RvcmVfdGVtcF90b2xlcmFuY2UsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAzX3RvbGVyYW5jZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3RlbXBfdG9sZXJhbmNlLCBzdG9yZV90ZW1wX3RvbGVyYW5jZSwgMiksCit9OworCiAvKiByZWFkL3dyaXRlIHRoZSB0ZW1wZXJhdHVyZTEsIGluY2x1ZGVzIG1lYXN1cmVkIHZhbHVlIGFuZCBsaW1pdHMgKi8KIHN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcDEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKIAkJCQljaGFyICpidWYpCkBAIC05MDgsOCArMTE1Nyw2IEBACiAJRkFOX1VOSVRfQVRUUlMoMCksCiAJRkFOX1VOSVRfQVRUUlMoMSksCiAJRkFOX1VOSVRfQVRUUlMoMiksCi0JRkFOX1VOSVRfQVRUUlMoMyksCi0JRkFOX1VOSVRfQVRUUlMoNCksCiAJVEVNUF9VTklUX0FUVFJTKDApLAogCVRFTVBfVU5JVF9BVFRSUygxKSwKIAlURU1QX1VOSVRfQVRUUlMoMiksCkBAIC05MTgsNiArMTE2NSwxOCBAQAogCSZzZGFfYmVlcF9jdHJsWzFdLmRldl9hdHRyLmF0dHIsCiAJJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCiAJJmRldl9hdHRyX3ZybS5hdHRyLAorCSZzZGFfcHdtWzBdLmRldl9hdHRyLmF0dHIsCisJJnNkYV9wd21bMV0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3B3bVsyXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfcHdtZW5hYmxlWzBdLmRldl9hdHRyLmF0dHIsCisJJnNkYV9wd21lbmFibGVbMV0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3B3bWVuYWJsZVsyXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfdGVtcF90YXJnZXRbMF0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3RlbXBfdGFyZ2V0WzFdLmRldl9hdHRyLmF0dHIsCisJJnNkYV90ZW1wX3RhcmdldFsyXS5kZXZfYXR0ci5hdHRyLAorCSZzZGFfdGVtcF90b2xlcmFuY2VbMF0uZGV2X2F0dHIuYXR0ciwKKwkmc2RhX3RlbXBfdG9sZXJhbmNlWzFdLmRldl9hdHRyLmF0dHIsCisJJnNkYV90ZW1wX3RvbGVyYW5jZVsyXS5kZXZfYXR0ci5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTkyNSw2ICsxMTg0LDIwIEBACiAJLmF0dHJzID0gdzgzNzkxZF9hdHRyaWJ1dGVzLAogfTsKIAorLyogU2VwYXJhdGUgZ3JvdXAgb2YgYXR0cmlidXRlcyBmb3IgZmFuL3B3bSA0LTUuIFRoZWlyIHBpbnMgY2FuIGFsc28gYmUKKyAgIGluIHVzZSBmb3IgR1BJTyBpbiB3aGljaCBjYXNlIHRoZWlyIHN5c2ZzLWludGVyZmFjZSBzaG91bGQgbm90IGJlIG1hZGUKKyAgIGF2YWlsYWJsZSAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnc4Mzc5MWRfYXR0cmlidXRlc19mYW5wd200NVtdID0geworCUZBTl9VTklUX0FUVFJTKDMpLAorCUZBTl9VTklUX0FUVFJTKDQpLAorCSZzZGFfcHdtWzNdLmRldl9hdHRyLmF0dHIsCisJJnNkYV9wd21bNF0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB3ODM3OTFkX2dyb3VwX2ZhbnB3bTQ1ID0geworCS5hdHRycyA9IHc4Mzc5MWRfYXR0cmlidXRlc19mYW5wd200NSwKK307CiAKIHN0YXRpYyBpbnQgdzgzNzkxZF9kZXRlY3Rfc3ViY2xpZW50cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewpAQCAtMTA1Niw2ICsxMzI5LDcgQEAKIAlzdHJ1Y3QgdzgzNzkxZF9kYXRhICpkYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKIAlpbnQgaSwgZXJyOworCXU4IGhhc19mYW5wd200NTsKIAogI2lmZGVmIERFQlVHCiAJaW50IHZhbDE7CkBAIC0xMDkwLDE1ICsxMzY0LDI3IEBACiAJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ3ODM3OTFkX2dyb3VwKSkpCiAJCWdvdG8gZXJyb3IzOwogCisJLyogQ2hlY2sgaWYgcGlucyBvZiBmYW4vcHdtIDQtNSBhcmUgaW4gdXNlIGFzIEdQSU8gKi8KKwloYXNfZmFucHdtNDUgPSB3ODM3OTFkX3JlYWQoY2xpZW50LCBXODM3OTFEX1JFR19HUElPKSAmIDB4MTA7CisJaWYgKGhhc19mYW5wd200NSkgeworCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosCisJCQkJCSAmdzgzNzkxZF9ncm91cF9mYW5wd200NSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm9yNDsKKwl9CisKIAkvKiBFdmVyeXRoaW5nIGlzIHJlYWR5LCBub3cgcmVnaXN0ZXIgdGhlIHdvcmtpbmcgZGV2aWNlICovCiAJZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKGRldik7CiAJaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKLQkJZ290byBlcnJvcjQ7CisJCWdvdG8gZXJyb3I1OwogCX0KIAogCXJldHVybiAwOwogCitlcnJvcjU6CisJaWYgKGhhc19mYW5wd200NSkKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmdzgzNzkxZF9ncm91cF9mYW5wd200NSk7CiBlcnJvcjQ6CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmdzgzNzkxZF9ncm91cCk7CiBlcnJvcjM6CkBAIC0xMjM2LDYgKzE1MjIsMzYgQEAKIAkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKIAkJCWRhdGEtPmZhbl9kaXZbaV0gfD0gKHZiYXRfcmVnID4+ICgzICsgaSkpICYgMHgwNDsKIAorCQkvKiBVcGRhdGUgUFdNIGR1dHkgY3ljbGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IE5VTUJFUl9PRl9QV007IGkrKykgeworCQkJZGF0YS0+cHdtW2ldID0gIHc4Mzc5MWRfcmVhZChjbGllbnQsCisJCQkJCQlXODM3OTFEX1JFR19QV01baV0pOworCQl9CisKKwkJLyogVXBkYXRlIFBXTSBlbmFibGUgc3RhdHVzICovCisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXJlZ19hcnJheV90bXBbaV0gPSB3ODM3OTFkX3JlYWQoY2xpZW50LAorCQkJCQkJVzgzNzkxRF9SRUdfRkFOX0NGR1tpXSk7CisJCX0KKwkJZGF0YS0+cHdtX2VuYWJsZVswXSA9IChyZWdfYXJyYXlfdG1wWzBdID4+IDIpICYgMHgwMzsKKwkJZGF0YS0+cHdtX2VuYWJsZVsxXSA9IChyZWdfYXJyYXlfdG1wWzBdID4+IDQpICYgMHgwMzsKKwkJZGF0YS0+cHdtX2VuYWJsZVsyXSA9IChyZWdfYXJyYXlfdG1wWzFdID4+IDIpICYgMHgwMzsKKworCQkvKiBVcGRhdGUgUFdNIHRhcmdldCB0ZW1wZXJhdHVyZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlkYXRhLT50ZW1wX3RhcmdldFtpXSA9IHc4Mzc5MWRfcmVhZChjbGllbnQsCisJCQkJVzgzNzkxRF9SRUdfVEVNUF9UQVJHRVRbaV0pICYgMHg3ZjsKKwkJfQorCisJCS8qIFVwZGF0ZSBQV00gdGVtcGVyYXR1cmUgdG9sZXJhbmNlICovCisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXJlZ19hcnJheV90bXBbaV0gPSB3ODM3OTFkX3JlYWQoY2xpZW50LAorCQkJCQlXODM3OTFEX1JFR19URU1QX1RPTFtpXSk7CisJCX0KKwkJZGF0YS0+dGVtcF90b2xlcmFuY2VbMF0gPSByZWdfYXJyYXlfdG1wWzBdICYgMHgwZjsKKwkJZGF0YS0+dGVtcF90b2xlcmFuY2VbMV0gPSAocmVnX2FycmF5X3RtcFswXSA+PiA0KSAmIDB4MGY7CisJCWRhdGEtPnRlbXBfdG9sZXJhbmNlWzJdID0gcmVnX2FycmF5X3RtcFsxXSAmIDB4MGY7CisKIAkJLyogVXBkYXRlIHRoZSBmaXJzdCB0ZW1wZXJhdHVyZSBzZW5zb3IgKi8KIAkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewogCQkJZGF0YS0+dGVtcDFbaV0gPSB3ODM3OTFkX3JlYWQoY2xpZW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwppbmRleCA2ZWU5OTdiLi5hY2FkYmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwpAQCAtNTUsNyArNTUsNyBAQAogCiBjb25maWcgSTJDX0FNRDc1Nl9TNDg4MgogCXRyaXN0YXRlICJTTUJ1cyBtdWx0aXBsZXhpbmcgb24gdGhlIFR5YW4gUzQ4ODIiCi0JZGVwZW5kcyBvbiBJMkNfQU1ENzU2ICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSTJDX0FNRDc1NiAmJiBYODYgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBhZGQgc3BlY2lmaWMgU01CdXMgc3VwcG9ydCBmb3IgdGhlIFR5YW4KIAkgIFM0ODgyIG1vdGhlcmJvYXJkLiAgT24gdGhpcyA0LUNQVSBib2FyZCwgdGhlIFNNQnVzIGlzIG11bHRpcGxleGVkCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogY29uZmlnIEkyQ19ORk9SQ0UyX1M0OTg1CiAJdHJpc3RhdGUgIlNNQnVzIG11bHRpcGxleGluZyBvbiB0aGUgVHlhbiBTNDk4NSIKLQlkZXBlbmRzIG9uIEkyQ19ORk9SQ0UyICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSTJDX05GT1JDRTIgJiYgWDg2ICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgYWRkIHNwZWNpZmljIFNNQnVzIHN1cHBvcnQgZm9yIHRoZSBUeWFuCiAJICBTNDk4NSBtb3RoZXJib2FyZC4gIE9uIHRoaXMgNC1DUFUgYm9hcmQsIHRoZSBTTUJ1cyBpcyBtdWx0aXBsZXhlZApAQCAtMjA5LDcgKzIwOSw3IEBACiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtdmlhLgogCiBjb25maWcgSTJDX1ZJQVBSTwotCXRyaXN0YXRlICJWSUEgVlQ4MkM1OTYvODJDNjg2LzgyeHggYW5kIENYNzAwIgorCXRyaXN0YXRlICJWSUEgVlQ4MkM1OTYvODJDNjg2LzgyeHggYW5kIENYNzAwL1ZYODAwL1ZYODIwIgogCWRlcGVuZHMgb24gUENJCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgdGhlIFZJQQpAQCAtMjIzLDYgKzIyMyw4IEBACiAJICAgIFZUODIzN1IvQS9TCiAJICAgIFZUODI1MQogCSAgICBDWDcwMAorCSAgICBWWDgwMAorCSAgICBWWDgyMAogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtdmlhcHJvLgpAQCAtMzMwLDYgKzMzMiwxOCBAQAogCSAgVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGJpdGJhbmdpbmcgSTJDIGRyaXZlciB1dGlsaXppbmcgdGhlCiAJICBhcmNoLW5ldXRyYWwgR1BJTyBBUEkgdG8gY29udHJvbCB0aGUgU0NMIGFuZCBTREEgbGluZXMuCiAKK2NvbmZpZyBJMkNfSElHSExBTkRFUgorCXRyaXN0YXRlICJIaWdobGFuZGVyIEZQR0EgU01CdXMgaW50ZXJmYWNlIgorCWRlcGVuZHMgb24gU0hfSElHSExBTkRFUgorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgZm9yCisJICB0aGUgU01CdXMgaW50ZXJmYWNlIGxvY2F0ZWQgaW4gdGhlIEZQR0Egb24gdmFyaW91cyBIaWdobGFuZGVyCisJICBib2FyZHMsIHBhcnRpY3VsYXJseSB0aGUgUjBQNzc4MExDMDAxMVJMIGFuZCBSMFA3Nzg1TEMwMDExUkwKKwkgIEZQR0FzLiBUaGlzIGlzIHdob2xseSB1bnJlbGF0ZWQgdG8gdGhlIFNvQyBJMkMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGkyYy1oaWdobGFuZGVyLgorCiBjb25maWcgSTJDX0lCTV9JSUMKIAl0cmlzdGF0ZSAiSUJNIFBQQyA0eHggb24tY2hpcCBJMkMgaW50ZXJmYWNlIgogCWRlcGVuZHMgb24gNHh4CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKaW5kZXggOTdkYmZhMi4uMGMyYzRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQpAQCAtMzEsNiArMzEsNyBAQAogb2JqLSQoQ09ORklHX0kyQ19DUE0pCQkrPSBpMmMtY3BtLm8KIG9iai0kKENPTkZJR19JMkNfREFWSU5DSSkJKz0gaTJjLWRhdmluY2kubwogb2JqLSQoQ09ORklHX0kyQ19HUElPKQkJKz0gaTJjLWdwaW8ubworb2JqLSQoQ09ORklHX0kyQ19ISUdITEFOREVSKQkrPSBpMmMtaGlnaGxhbmRlci5vCiBvYmotJChDT05GSUdfSTJDX0lCTV9JSUMpCSs9IGkyYy1pYm1faWljLm8KIG9iai0kKENPTkZJR19JMkNfSU9QM1hYKQkrPSBpMmMtaW9wM3h4Lm8KIG9iai0kKENPTkZJR19JMkNfSVhQMjAwMCkJKz0gaTJjLWl4cDIwMDAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oaWdobGFuZGVyLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWhpZ2hsYW5kZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGQyMmFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oaWdobGFuZGVyLmMKQEAgLTAsMCArMSw0OTggQEAKKy8qCisgKiBSZW5lc2FzIFNvbHV0aW9ucyBIaWdobGFuZGVyIEZQR0EgSTJDL1NNQnVzIHN1cHBvcnQuCisgKgorICogU3VwcG9ydGVkIGRldmljZXM6IFIwUDc3ODBMQzAwMTFSTCwgUjBQNzc4NUxDMDAxMVJMCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4ICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggIEF0b20gQ3JlYXRlIEVuZ2luZWVyaW5nIENvLiwgTHRkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3RvcnkKKyAqIG9mIHRoaXMgYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNkZWZpbmUgU01DUgkJMHgwMAorI2RlZmluZSBTTUNSX1NUQVJUCSgxIDw8IDApCisjZGVmaW5lIFNNQ1JfSVJJQwkoMSA8PCAxKQorI2RlZmluZSBTTUNSX0JCU1kJKDEgPDwgMikKKyNkZWZpbmUgU01DUl9BQ0tFCSgxIDw8IDMpCisjZGVmaW5lIFNNQ1JfUlNUCSgxIDw8IDQpCisjZGVmaW5lIFNNQ1JfSUVJQwkoMSA8PCA2KQorCisjZGVmaW5lIFNNU01BRFIJCTB4MDIKKworI2RlZmluZSBTTU1SCQkweDA0CisjZGVmaW5lIFNNTVJfTU9ERTAJKDEgPDwgMCkKKyNkZWZpbmUgU01NUl9NT0RFMQkoMSA8PCAxKQorI2RlZmluZSBTTU1SX0NBUAkoMSA8PCAzKQorI2RlZmluZSBTTU1SX1RNTUQJKDEgPDwgNCkKKyNkZWZpbmUgU01NUl9TUAkJKDEgPDwgNykKKworI2RlZmluZSBTTVNBRFIJCTB4MDYKKyNkZWZpbmUgU01UUkRSCQkweDQ2CisKK3N0cnVjdCBoaWdobGFuZGVyX2kyY19kZXYgeworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisJdm9pZCBfX2lvbWVtCQkqYmFzZTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJYWRhcHRlcjsKKwlzdHJ1Y3QgY29tcGxldGlvbgljbWRfY29tcGxldGU7CisJdW5zaWduZWQgbG9uZwkJbGFzdF9yZWFkX3RpbWU7CisJaW50CQkJaXJxOworCXU4CQkJKmJ1ZjsKKwlzaXplX3QJCQlidWZfbGVuOworfTsKKworc3RhdGljIGludCBpaWNfZm9yY2VfcG9sbCwgaWljX2ZvcmNlX25vcm1hbDsKK3N0YXRpYyBpbnQgaWljX3RpbWVvdXQgPSAxMDAwLCBpaWNfcmVhZF9kZWxheTsKKworc3RhdGljIGlubGluZSB2b2lkIGhpZ2hsYW5kZXJfaTJjX2lycV9lbmFibGUoc3RydWN0IGhpZ2hsYW5kZXJfaTJjX2RldiAqZGV2KQoreworCWlvd3JpdGUxNihpb3JlYWQxNihkZXYtPmJhc2UgKyBTTUNSKSB8IFNNQ1JfSUVJQywgZGV2LT5iYXNlICsgU01DUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWdobGFuZGVyX2kyY19pcnFfZGlzYWJsZShzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYpCit7CisJaW93cml0ZTE2KGlvcmVhZDE2KGRldi0+YmFzZSArIFNNQ1IpICYgflNNQ1JfSUVJQywgZGV2LT5iYXNlICsgU01DUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWdobGFuZGVyX2kyY19zdGFydChzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYpCit7CisJaW93cml0ZTE2KGlvcmVhZDE2KGRldi0+YmFzZSArIFNNQ1IpIHwgU01DUl9TVEFSVCwgZGV2LT5iYXNlICsgU01DUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWdobGFuZGVyX2kyY19kb25lKHN0cnVjdCBoaWdobGFuZGVyX2kyY19kZXYgKmRldikKK3sKKwlpb3dyaXRlMTYoaW9yZWFkMTYoZGV2LT5iYXNlICsgU01DUikgfCBTTUNSX0lSSUMsIGRldi0+YmFzZSArIFNNQ1IpOworfQorCitzdGF0aWMgdm9pZCBoaWdobGFuZGVyX2kyY19zZXR1cChzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYpCit7CisJdTE2IHNtbXI7CisKKwlzbW1yID0gaW9yZWFkMTYoZGV2LT5iYXNlICsgU01NUik7CisJc21tciB8PSBTTU1SX1RNTUQ7CisKKwlpZiAoaWljX2ZvcmNlX25vcm1hbCkKKwkJc21tciAmPSB+U01NUl9TUDsKKwllbHNlCisJCXNtbXIgfD0gU01NUl9TUDsKKworCWlvd3JpdGUxNihzbW1yLCBkZXYtPmJhc2UgKyBTTU1SKTsKK30KKworc3RhdGljIHZvaWQgc21idXNfd3JpdGVfZGF0YSh1OCAqc3JjLCB1MTYgKmRzdCwgaW50IGxlbikKK3sKKwlmb3IgKDsgbGVuID4gMTsgbGVuIC09IDIpIHsKKwkJKmRzdCsrID0gYmUxNl90b19jcHVwKCh1MTYgKilzcmMpOworCQlzcmMgKz0gMjsKKwl9CisKKwlpZiAobGVuKQorCQkqZHN0ID0gKnNyYyA8PCA4OworfQorCitzdGF0aWMgdm9pZCBzbWJ1c19yZWFkX2RhdGEodTE2ICpzcmMsIHU4ICpkc3QsIGludCBsZW4pCit7CisJZm9yICg7IGxlbiA+IDE7IGxlbiAtPSAyKSB7CisJCSoodTE2ICopZHN0ID0gY3B1X3RvX2JlMTZwKHNyYysrKTsKKwkJZHN0ICs9IDI7CisJfQorCisJaWYgKGxlbikKKwkJKmRzdCA9ICpzcmMgPj4gODsKK30KKworc3RhdGljIHZvaWQgaGlnaGxhbmRlcl9pMmNfY29tbWFuZChzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYsCisJCQkJICAgdTggY29tbWFuZCwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MTYgY21kID0gKGNvbW1hbmQgPDwgOCkgfCBjb21tYW5kOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7CisJCWlmIChsZW4gLSBpID09IDEpCisJCQljbWQgPSBjb21tYW5kIDw8IDg7CisJCWlvd3JpdGUxNihjbWQsIGRldi0+YmFzZSArIFNNU0FEUiArIGkpOworCQlkZXZfZGJnKGRldi0+ZGV2LCAiY29tbWFuZCBkYXRhWyV4XSAweCUwNHhcbiIsIGkvMiwgY21kKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaGlnaGxhbmRlcl9pMmNfd2FpdF9mb3JfYmJzeShzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGlpY190aW1lb3V0KTsKKwl3aGlsZSAoaW9yZWFkMTYoZGV2LT5iYXNlICsgU01DUikgJiBTTUNSX0JCU1kpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCWRldl93YXJuKGRldi0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBidXMgcmVhZHlcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKworCQltc2xlZXAoMSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlnaGxhbmRlcl9pMmNfcmVzZXQoc3RydWN0IGhpZ2hsYW5kZXJfaTJjX2RldiAqZGV2KQoreworCWlvd3JpdGUxNihpb3JlYWQxNihkZXYtPmJhc2UgKyBTTUNSKSB8IFNNQ1JfUlNULCBkZXYtPmJhc2UgKyBTTUNSKTsKKwlyZXR1cm4gaGlnaGxhbmRlcl9pMmNfd2FpdF9mb3JfYmJzeShkZXYpOworfQorCitzdGF0aWMgaW50IGhpZ2hsYW5kZXJfaTJjX3dhaXRfZm9yX2FjayhzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYpCit7CisJdTE2IHRtcCA9IGlvcmVhZDE2KGRldi0+YmFzZSArIFNNQ1IpOworCisJaWYgKCh0bXAgJiAoU01DUl9JUklDIHwgU01DUl9BQ0tFKSkgPT0gU01DUl9BQ0tFKSB7CisJCWRldl93YXJuKGRldi0+ZGV2LCAiYWNrIGFibm9ybWFsaXR5XG4iKTsKKwkJcmV0dXJuIGhpZ2hsYW5kZXJfaTJjX3Jlc2V0KGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBoaWdobGFuZGVyX2kyY19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBoaWdobGFuZGVyX2kyY19kZXYgKmRldiA9IGRldl9pZDsKKworCWhpZ2hsYW5kZXJfaTJjX2RvbmUoZGV2KTsKKwljb21wbGV0ZSgmZGV2LT5jbWRfY29tcGxldGUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBoaWdobGFuZGVyX2kyY19wb2xsKHN0cnVjdCBoaWdobGFuZGVyX2kyY19kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTE2IHNtY3I7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaWljX3RpbWVvdXQpOworCWZvciAoOzspIHsKKwkJc21jciA9IGlvcmVhZDE2KGRldi0+YmFzZSArIFNNQ1IpOworCisJCS8qCisJCSAqIERvbid0IGJvdGhlciBjaGVja2luZyBBQ0tFIGhlcmUsIHRoaXMgYW5kIHRoZSByZXNldAorCQkgKiBhcmUgaGFuZGxlZCBpbiBoaWdobGFuZGVyX2kyY193YWl0X3hmZXJfZG9uZSgpIHdoZW4KKwkJICogd2FpdGluZyBmb3IgdGhlIEFDSy4KKwkJICovCisKKwkJaWYgKHNtY3IgJiBTTUNSX0lSSUMpCisJCQlyZXR1cm47CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJYnJlYWs7CisKKwkJY3B1X3JlbGF4KCk7CisJCWNvbmRfcmVzY2hlZCgpOworCX0KKworCWRldl9lcnIoZGV2LT5kZXYsICJwb2xsaW5nIHRpbWVkIG91dFxuIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGhpZ2hsYW5kZXJfaTJjX3dhaXRfeGZlcl9kb25lKHN0cnVjdCBoaWdobGFuZGVyX2kyY19kZXYgKmRldikKK3sKKwlpZiAoZGV2LT5pcnEpCisJCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZGV2LT5jbWRfY29tcGxldGUsCisJCQkJCSAgbXNlY3NfdG9famlmZmllcyhpaWNfdGltZW91dCkpOworCWVsc2UKKwkJLyogYnVzeSBsb29waW5nLCB0aGUgSVJRIG9mIGNoYW1waW9ucyAqLworCQloaWdobGFuZGVyX2kyY19wb2xsKGRldik7CisKKwlyZXR1cm4gaGlnaGxhbmRlcl9pMmNfd2FpdF9mb3JfYWNrKGRldik7Cit9CisKK3N0YXRpYyBpbnQgaGlnaGxhbmRlcl9pMmNfcmVhZChzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYpCit7CisJaW50IGksIGNudDsKKwl1MTYgZGF0YVsxNl07CisKKwlpZiAoaGlnaGxhbmRlcl9pMmNfd2FpdF9mb3JfYmJzeShkZXYpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWhpZ2hsYW5kZXJfaTJjX3N0YXJ0KGRldik7CisKKwlpZiAoaGlnaGxhbmRlcl9pMmNfd2FpdF94ZmVyX2RvbmUoZGV2KSkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiQXJiaXRyYXRpb24gbG9zc1xuIik7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCS8qCisJICogVGhlIFIwUDc3ODBMQzAwMTFSTCBGUEdBIG5lZWRzIGEgc2lnbmlmaWNhbnQgZGVsYXkgYmV0d2VlbgorCSAqIGRhdGEgcmVhZCBjeWNsZXMsIG90aGVyd2lzZSB0aGUgdHJhbnNjaWV2ZXIgZ2V0cyBjb25mdXNlZCBhbmQKKwkgKiBnYXJiYWdlIGlzIHJldHVybmVkIHdoZW4gdGhlIHJlYWQgaXMgc3Vic2VxdWVudGx5IGFib3J0ZWQuCisJICoKKwkgKiBJdCBpcyBub3Qgc3VmZmljaWVudCB0byB3YWl0IGZvciBCQlNZLgorCSAqCisJICogV2hpbGUgdGhpcyBnZW5lcmFsbHkgb25seSBhcHBsaWVzIHRvIHRoZSBvbGRlciBTSDc3ODAtYmFzZWQKKwkgKiBIaWdobGFuZGVycywgdGhlIHNhbWUgaXNzdWUgY2FuIGJlIG9ic2VydmVkIG9uIFNINzc4NSBvbmVzLAorCSAqIGFsYmVpdCBsZXNzIGZyZXF1ZW50bHkuIFNINzc4MC1iYXNlZCBIaWdobGFuZGVycyBtYXkgbmVlZAorCSAqIHRoaXMgdG8gYmUgYXMgaGlnaCBhcyAxMDAwIG1zLgorCSAqLworCWlmIChpaWNfcmVhZF9kZWxheSAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCBkZXYtPmxhc3RfcmVhZF90aW1lICsKKwkJCQkgbXNlY3NfdG9famlmZmllcyhpaWNfcmVhZF9kZWxheSkpKQorCQltc2xlZXAoamlmZmllc190b19tc2VjcygoZGV2LT5sYXN0X3JlYWRfdGltZSArCisJCQkJbXNlY3NfdG9famlmZmllcyhpaWNfcmVhZF9kZWxheSkpIC0gamlmZmllcykpOworCisJY250ID0gKGRldi0+YnVmX2xlbiArIDEpID4+IDE7CisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCWRhdGFbaV0gPSBpb3JlYWQxNihkZXYtPmJhc2UgKyBTTVRSRFIgKyAoaSAqIHNpemVvZih1MTYpKSk7CisJCWRldl9kYmcoZGV2LT5kZXYsICJyZWFkIGRhdGFbJXhdIDB4JTA0eFxuIiwgaSwgZGF0YVtpXSk7CisJfQorCisJc21idXNfcmVhZF9kYXRhKGRhdGEsIGRldi0+YnVmLCBkZXYtPmJ1Zl9sZW4pOworCisJZGV2LT5sYXN0X3JlYWRfdGltZSA9IGppZmZpZXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWdobGFuZGVyX2kyY193cml0ZShzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYpCit7CisJaW50IGksIGNudDsKKwl1MTYgZGF0YVsxNl07CisKKwlzbWJ1c193cml0ZV9kYXRhKGRldi0+YnVmLCBkYXRhLCBkZXYtPmJ1Zl9sZW4pOworCisJY250ID0gKGRldi0+YnVmX2xlbiArIDEpID4+IDE7CisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCWlvd3JpdGUxNihkYXRhW2ldLCBkZXYtPmJhc2UgKyBTTVRSRFIgKyAoaSAqIHNpemVvZih1MTYpKSk7CisJCWRldl9kYmcoZGV2LT5kZXYsICJ3cml0ZSBkYXRhWyV4XSAweCUwNHhcbiIsIGksIGRhdGFbaV0pOworCX0KKworCWlmIChoaWdobGFuZGVyX2kyY193YWl0X2Zvcl9iYnN5KGRldikpCisJCXJldHVybiAtRUFHQUlOOworCisJaGlnaGxhbmRlcl9pMmNfc3RhcnQoZGV2KTsKKworCXJldHVybiBoaWdobGFuZGVyX2kyY193YWl0X3hmZXJfZG9uZShkZXYpOworfQorCitzdGF0aWMgaW50IGhpZ2hsYW5kZXJfaTJjX3NtYnVzX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCB1MTYgYWRkciwKKwkJCQkgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsCisJCQkJICB1OCBjb21tYW5kLCBpbnQgc2l6ZSwKKwkJCQkgIHVuaW9uIGkyY19zbWJ1c19kYXRhICpkYXRhKQoreworCXN0cnVjdCBoaWdobGFuZGVyX2kyY19kZXYgKmRldiA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJaW50IHJlYWQgPSByZWFkX3dyaXRlICYgSTJDX1NNQlVTX1JFQUQ7CisJdTE2IHRtcDsKKworCWluaXRfY29tcGxldGlvbigmZGV2LT5jbWRfY29tcGxldGUpOworCisJZGV2X2RiZyhkZXYtPmRldiwgImFkZHIgJTA0eCwgY29tbWFuZCAlMDJ4LCByZWFkX3dyaXRlICVkLCBzaXplICVkXG4iLAorCQlhZGRyLCBjb21tYW5kLCByZWFkX3dyaXRlLCBzaXplKTsKKworCS8qCisJICogU2V0IHVwIHRoZSBidWZmZXIgYW5kIHRyYW5zZmVyIHNpemUKKwkgKi8KKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIEkyQ19TTUJVU19CWVRFX0RBVEE6CisJCWRldi0+YnVmID0gJmRhdGEtPmJ5dGU7CisJCWRldi0+YnVmX2xlbiA9IDE7CisJCWJyZWFrOworCWNhc2UgSTJDX1NNQlVTX0kyQ19CTE9DS19EQVRBOgorCQlkZXYtPmJ1ZiA9ICZkYXRhLT5ibG9ja1sxXTsKKwkJZGV2LT5idWZfbGVuID0gZGF0YS0+YmxvY2tbMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBjb21tYW5kICVkXG4iLCBzaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBFbmNvZGUgdGhlIG1vZGUgc2V0dGluZworCSAqLworCXRtcCA9IGlvcmVhZDE2KGRldi0+YmFzZSArIFNNTVIpOworCXRtcCAmPSB+KFNNTVJfTU9ERTAgfCBTTU1SX01PREUxKTsKKworCXN3aXRjaCAoZGV2LT5idWZfbGVuKSB7CisJY2FzZSAxOgorCQkvKiBkZWZhdWx0ICovCisJCWJyZWFrOworCWNhc2UgODoKKwkJdG1wIHw9IFNNTVJfTU9ERTA7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXRtcCB8PSBTTU1SX01PREUxOworCQlicmVhazsKKwljYXNlIDMyOgorCQl0bXAgfD0gKFNNTVJfTU9ERTAgfCBTTU1SX01PREUxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYtPmRldiwgInVuc3VwcG9ydGVkIHhmZXIgc2l6ZSAlZFxuIiwgZGV2LT5idWZfbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW93cml0ZTE2KHRtcCwgZGV2LT5iYXNlICsgU01NUik7CisKKwkvKiBFbnN1cmUgd2UncmUgaW4gYSBzYW5lIHN0YXRlICovCisJaGlnaGxhbmRlcl9pMmNfZG9uZShkZXYpOworCisJLyogU2V0IHNsYXZlIGFkZHJlc3MgKi8KKwlpb3dyaXRlMTYoKGFkZHIgPDwgMSkgfCByZWFkLCBkZXYtPmJhc2UgKyBTTVNNQURSKTsKKworCWhpZ2hsYW5kZXJfaTJjX2NvbW1hbmQoZGV2LCBjb21tYW5kLCBkZXYtPmJ1Zl9sZW4pOworCisJaWYgKHJlYWQpCisJCXJldHVybiBoaWdobGFuZGVyX2kyY19yZWFkKGRldik7CisJZWxzZQorCQlyZXR1cm4gaGlnaGxhbmRlcl9pMmNfd3JpdGUoZGV2KTsKK30KKworc3RhdGljIHUzMiBoaWdobGFuZGVyX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gaGlnaGxhbmRlcl9pMmNfYWxnbyA9IHsKKwkuc21idXNfeGZlcgk9IGhpZ2hsYW5kZXJfaTJjX3NtYnVzX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJPSBoaWdobGFuZGVyX2kyY19mdW5jLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgaGlnaGxhbmRlcl9pMmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXY7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICh1bmxpa2VseSghcmVzKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW0gcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFkZXYpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+YmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAodW5saWtlbHkoIWRldi0+YmFzZSkpIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycjsKKwl9CisKKwlkZXYtPmRldiA9ICZwZGV2LT5kZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKworCWRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaWljX2ZvcmNlX3BvbGwpCisJCWRldi0+aXJxID0gMDsKKworCWlmIChkZXYtPmlycSkgeworCQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgaGlnaGxhbmRlcl9pMmNfaXJxLCBJUlFGX0RJU0FCTEVELAorCQkJCSAgcGRldi0+bmFtZSwgZGV2KTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlnb3RvIGVycl91bm1hcDsKKworCQloaWdobGFuZGVyX2kyY19pcnFfZW5hYmxlKGRldik7CisJfSBlbHNlIHsKKwkJZGV2X25vdGljZSgmcGRldi0+ZGV2LCAibm8gSVJRLCB1c2luZyBwb2xsaW5nIG1vZGVcbiIpOworCQloaWdobGFuZGVyX2kyY19pcnFfZGlzYWJsZShkZXYpOworCX0KKworCWRldi0+bGFzdF9yZWFkX3RpbWUgPSBqaWZmaWVzOwkvKiBpbml0aWFsIHJlYWQgamlmZmllcyAqLworCisJaGlnaGxhbmRlcl9pMmNfc2V0dXAoZGV2KTsKKworCWFkYXAgPSAmZGV2LT5hZGFwdGVyOworCWkyY19zZXRfYWRhcGRhdGEoYWRhcCwgZGV2KTsKKwlhZGFwLT5vd25lciA9IFRISVNfTU9EVUxFOworCWFkYXAtPmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OOworCXN0cmxjcHkoYWRhcC0+bmFtZSwgIkhMIEZQR0EgSTJDIGFkYXB0ZXIiLCBzaXplb2YoYWRhcC0+bmFtZSkpOworCWFkYXAtPmFsZ28gPSAmaGlnaGxhbmRlcl9pMmNfYWxnbzsKKwlhZGFwLT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwlhZGFwLT5uciA9IHBkZXYtPmlkOworCisJLyoKKwkgKiBSZXNldCB0aGUgYWRhcHRlcgorCSAqLworCXJldCA9IGhpZ2hsYW5kZXJfaTJjX3Jlc2V0KGRldik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY29udHJvbGxlciBkaWRuJ3QgY29tZSB1cFxuIik7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCX0KKworCXJldCA9IGkyY19hZGRfbnVtYmVyZWRfYWRhcHRlcihhZGFwKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsdXJlIGFkZGluZyBhZGFwdGVyXG4iKTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2lycToKKwlpZiAoZGV2LT5pcnEpCisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworZXJyX3VubWFwOgorCWlvdW5tYXAoZGV2LT5iYXNlKTsKK2VycjoKKwlrZnJlZShkZXYpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBoaWdobGFuZGVyX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWkyY19kZWxfYWRhcHRlcigmZGV2LT5hZGFwdGVyKTsKKworCWlmIChkZXYtPmlycSkKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlpb3VubWFwKGRldi0+YmFzZSk7CisJa2ZyZWUoZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhpZ2hsYW5kZXJfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiaTJjLWhpZ2hsYW5kZXIiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCisJLnByb2JlCQk9IGhpZ2hsYW5kZXJfaTJjX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoaGlnaGxhbmRlcl9pMmNfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGhpZ2hsYW5kZXJfaTJjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZoaWdobGFuZGVyX2kyY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaGlnaGxhbmRlcl9pMmNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZoaWdobGFuZGVyX2kyY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChoaWdobGFuZGVyX2kyY19pbml0KTsKK21vZHVsZV9leGl0KGhpZ2hsYW5kZXJfaTJjX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJQYXVsIE11bmR0Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJlbmVzYXMgSGlnaGxhbmRlciBGUEdBIEkyQy9TTUJ1cyBhZGFwdGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKK21vZHVsZV9wYXJhbShpaWNfZm9yY2VfcG9sbCwgYm9vbCwgMCk7Cittb2R1bGVfcGFyYW0oaWljX2ZvcmNlX25vcm1hbCwgYm9vbCwgMCk7Cittb2R1bGVfcGFyYW0oaWljX3RpbWVvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0oaWljX3JlYWRfZGVsYXksIGludCwgMCk7CisKK01PRFVMRV9QQVJNX0RFU0MoaWljX2ZvcmNlX3BvbGwsICJGb3JjZSBwb2xsaW5nIG1vZGUiKTsKK01PRFVMRV9QQVJNX0RFU0MoaWljX2ZvcmNlX25vcm1hbCwKKwkJICJGb3JjZSBub3JtYWwgbW9kZSAoMTAwIGtIeiksIGRlZmF1bHQgaXMgZmFzdCBtb2RlICg0MDAga0h6KSIpOworTU9EVUxFX1BBUk1fREVTQyhpaWNfdGltZW91dCwgIlNldCB0aW1lb3V0IHZhbHVlIGluIG1zZWNzIChkZWZhdWx0IDEwMDAgbXMpIik7CitNT0RVTEVfUEFSTV9ERVNDKGlpY19yZWFkX2RlbGF5LAorCQkgIkRlbGF5IGJldHdlZW4gZGF0YSByZWFkIGN5Y2xlcyAoZGVmYXVsdCAwIG1zKSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggMjc0NDNmMC4uYTlhNDVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC0zMTIsNyArMzEyLDYgQEAKIAkubmFtZSA9ICJNUEMgYWRhcHRlciIsCiAJLmlkID0gSTJDX0hXX01QQzEwNywKIAkuYWxnbyA9ICZtcGNfYWxnbywKLQkuY2xhc3MgPSBJMkNfQ0xBU1NfSFdNT04gfCBJMkNfQ0xBU1NfU1BELAogCS50aW1lb3V0ID0gMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKaW5kZXggZTdlYjdiZi4uNjA4MDM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKQEAgLTU4OSwxMSArNTg5LDE2IEBACiAKIAlkZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAJZGV2LT5pcnEgPSBpcnEtPnN0YXJ0OwotCWRldi0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKikgSU9fQUREUkVTUyhtZW0tPnN0YXJ0KTsKKwlkZXYtPmJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIG1lbS0+ZW5kIC0gbWVtLT5zdGFydCArIDEpOworCWlmICghZGV2LT5iYXNlKSB7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCiAJaWYgKChyID0gb21hcF9pMmNfZ2V0X2Nsb2NrcyhkZXYpKSAhPSAwKQotCQlnb3RvIGVycl9mcmVlX21lbTsKKwkJZ290byBlcnJfaW91bm1hcDsKIAogCW9tYXBfaTJjX3VuaWRsZShkZXYpOwogCkBAIC02NDAsNiArNjQ1LDggQEAKIAlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLCAwKTsKIAlvbWFwX2kyY19pZGxlKGRldik7CiAJb21hcF9pMmNfcHV0X2Nsb2NrcyhkZXYpOworZXJyX2lvdW5tYXA6CisJaW91bm1hcChkZXYtPmJhc2UpOwogZXJyX2ZyZWVfbWVtOgogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGRldik7CkBAIC02NjEsNiArNjY4LDcgQEAKIAlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+YWRhcHRlcik7CiAJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRywgMCk7CiAJb21hcF9pMmNfcHV0X2Nsb2NrcyhkZXYpOworCWlvdW5tYXAoZGV2LT5iYXNlKTsKIAlrZnJlZShkZXYpOwogCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCmluZGV4IGM2ZmFmOWIuLmIyYjgzODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCkBAIC0xMjMsMTEgKzEyMyw2IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpMmNfcGFycG9ydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCBlcnI7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLCBEUlZOQU1FKSkKLQkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIFJlc2V0IGhhcmR3YXJlIHRvIGEgc2FuZSBzdGF0ZSAoU0NMIGFuZCBTREEgaGlnaCkgKi8KIAlwYXJwb3J0X3NldHNkYShOVUxMLCAxKTsKQEAgLTEzOCwyOSArMTMzLDE5IEBACiAKIAlwYXJwb3J0X2FkYXB0ZXIuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAJZXJyID0gaTJjX2JpdF9hZGRfYnVzKCZwYXJwb3J0X2FkYXB0ZXIpOwotCWlmIChlcnIpIHsKKwlpZiAoZXJyKQogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCBJMkNcbiIpOwotCQlnb3RvIGV4aXRfcmVnaW9uOwotCX0KLQlyZXR1cm4gMDsKLQotZXhpdF9yZWdpb246Ci0JcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgaTJjX3BhcnBvcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0KIAlpMmNfZGVsX2FkYXB0ZXIoJnBhcnBvcnRfYWRhcHRlcik7CiAKIAkvKiBVbi1pbml0IGlmIG5lZWRlZCAocG93ZXIgb2ZmLi4uKSAqLwogCWlmIChhZGFwdGVyX3Bhcm1bdHlwZV0uaW5pdC52YWwpCiAJCWxpbmVfc2V0KDAsICZhZGFwdGVyX3Bhcm1bdHlwZV0uaW5pdCk7CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7Ci0JcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3NSwxMiArMTYwLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgaTJjX3BhcnBvcnRfZGV2aWNlX2FkZCh1MTYgYWRkcmVzcykKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzID0gewotCQkuc3RhcnQJPSBhZGRyZXNzLAotCQkuZW5kCT0gYWRkcmVzcyArIDIsCi0JCS5uYW1lCT0gRFJWTkFNRSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKLQl9OwogCWludCBlcnI7CiAKIAlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVk5BTUUsIC0xKTsKQEAgLTE5MCwxMyArMTY5LDYgQEAKIAkJZ290byBleGl0OwogCX0KIAotCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyZXMsIDEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVk5BTUUgIjogRGV2aWNlIHJlc291cmNlIGFkZGl0aW9uIGZhaWxlZCAiCi0JCSAgICAgICAiKCVkKVxuIiwgZXJyKTsKLQkJZ290byBleGl0X2RldmljZV9wdXQ7Ci0JfQotCiAJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSBhZGRpdGlvbiBmYWlsZWQgKCVkKVxuIiwKQEAgLTIzMSwxMyArMjAzLDE2IEBACiAJCWJhc2UgPSBERUZBVUxUX0JBU0U7CiAJfQogCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihiYXNlLCAzLCBEUlZOQU1FKSkKKwkJcmV0dXJuIC1FQlVTWTsKKwogICAgICAgICBpZiAoIWFkYXB0ZXJfcGFybVt0eXBlXS5nZXRzY2wudmFsKQogCQlwYXJwb3J0X2FsZ29fZGF0YS5nZXRzY2wgPSBOVUxMOwogCiAJLyogU2V0cyBnbG9iYWwgcGRldiBhcyBhIHNpZGUgZWZmZWN0ICovCiAJZXJyID0gaTJjX3BhcnBvcnRfZGV2aWNlX2FkZChiYXNlKTsKIAlpZiAoZXJyKQotCQlnb3RvIGV4aXQ7CisJCWdvdG8gZXhpdF9yZWxlYXNlOwogCiAJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpMmNfcGFycG9ydF9kcml2ZXIpOwogCWlmIChlcnIpCkBAIC0yNDcsNyArMjIyLDggQEAKIAogZXhpdF9kZXZpY2U6CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7Ci1leGl0OgorZXhpdF9yZWxlYXNlOgorCXJlbGVhc2VfcmVnaW9uKGJhc2UsIDMpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI1NSw2ICsyMzEsNyBAQAogewogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpMmNfcGFycG9ydF9kcml2ZXIpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCXJlbGVhc2VfcmVnaW9uKGJhc2UsIDMpOwogfQogCiBNT0RVTEVfQVVUSE9SKCJKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wY2EtaXNhLmMKaW5kZXggYTExOTc4NC4uOWViNzYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wY2EtaXNhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wY2EtaXNhLmMKQEAgLTM2LDggKzM2LDggQEAKICNkZWZpbmUgRFJJVkVSICJpMmMtcGNhLWlzYSIKICNkZWZpbmUgSU9fU0laRSA0CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJhc2UgICA9IDB4MzMwOwotc3RhdGljIGludCBpcnEgCSAgPSAxMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJhc2U7CitzdGF0aWMgaW50IGlycSA9IC0xOwogCiAvKiBEYXRhIHNoZWV0IHJlY29tbWVuZHMgNTlrSHogZm9yIDEwMGtIeiBvcGVyYXRpb24gZHVlIHRvIHZhcmlhdGlvbgogICogaW4gdGhlIGFjdHVhbCBjbG9jayByYXRlICovCkBAIC0xMDcsMTMgKzEwNywyNiBAQAogCS50aW1lb3V0CT0gMTAwLAogfTsKIAorc3RhdGljIGludCBfX2RldmluaXQgcGNhX2lzYV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCkKK3sKKwlpbnQgbWF0Y2ggPSBiYXNlICE9IDA7CisKKwlpZiAobWF0Y2gpIHsKKwkJaWYgKGlycSA8PSAtMSkKKwkJCWRldl93YXJuKGRldiwgIlVzaW5nIHBvbGxpbmcgbW9kZSAoc3BlY2lmeSBpcnEpXG4iKTsKKwl9IGVsc2UKKwkJZGV2X2VycihkZXYsICJQbGVhc2Ugc3BlY2lmeSBJL08gYmFzZVxuIik7CisKKwlyZXR1cm4gbWF0Y2g7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHBjYV9pc2FfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpCiB7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcGNhX3dhaXQpOwogCiAJZGV2X2luZm8oZGV2LCAiaS9vIGJhc2UgJSMwOGx4LiBpcnEgJWRcbiIsIGJhc2UsIGlycSk7CiAKLSNpZmRlZiBDT05GSUdfUFBDX01FUkdFCisjaWZkZWYgQ09ORklHX1BQQwogCWlmIChjaGVja19sZWdhY3lfaW9wb3J0KGJhc2UpKSB7CiAJCWRldl9lcnIoZGV2LCAiSS9PIGFkZHJlc3MgJSMwOGx4IGlzIG5vdCBhdmFpbGFibGVcbiIsIGJhc2UpOwogCQlnb3RvIG91dDsKQEAgLTE1Myw3ICsxNjYsNyBAQAogewogCWkyY19kZWxfYWRhcHRlcigmcGNhX2lzYV9vcHMpOwogCi0JaWYgKGlycSA+IDApIHsKKwlpZiAoaXJxID4gLTEpIHsKIAkJZGlzYWJsZV9pcnEoaXJxKTsKIAkJZnJlZV9pcnEoaXJxLCAmcGNhX2lzYV9vcHMpOwogCX0KQEAgLTE2Myw2ICsxNzYsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlzYV9kcml2ZXIgcGNhX2lzYV9kcml2ZXIgPSB7CisJLm1hdGNoCQk9IHBjYV9pc2FfbWF0Y2gsCiAJLnByb2JlCQk9IHBjYV9pc2FfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChwY2FfaXNhX3JlbW92ZSksCiAJLmRyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYwppbmRleCAwZTdiMWM2Li42MGNhOTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jCkBAIC0yNTksNiArMjU5LDM1IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUG93ZXJNYWMgaTJjIGJ1cyAlcyByZWdpc3RlcmVkXG4iLCBuYW1lKTsKKworCWlmICghc3RybmNtcChiYXNlbmFtZSwgInVuaS1uIiwgNSkpIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwkJY29uc3QgdTMyICpwcm9wOworCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKKworCQkvKiBJbnN0YW50aWF0ZSBJMkMgbW90aW9uIHNlbnNvciBpZiBwcmVzZW50ICovCisJCW5wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImFjY2VsZXJvbWV0ZXIiKTsKKwkJaWYgKG5wICYmIG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiQUFQTCxhY2NlbGVyb21ldGVyXzEiKSAmJgorCQkgICAgKHByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKSkpIHsKKwkJCWludCBpMmNfYnVzOworCQkJY29uc3QgY2hhciAqdG1wX2J1czsKKworCQkJLyogbG9vayBmb3IgYnVzIGVpdGhlciB1c2luZyAicmVnIiBvciBieSBwYXRoICovCisJCQl0bXBfYnVzID0gc3Ryc3RyKG5wLT5mdWxsX25hbWUsICIvaTJjLWJ1c0AiKTsKKwkJCWlmICh0bXBfYnVzKQorCQkJCWkyY19idXMgPSAqKHRtcF9idXMgKyA5KSAtICcwJzsKKwkJCWVsc2UKKwkJCQlpMmNfYnVzID0gKCgqcHJvcCkgPj4gOCkgJiAweDBmOworCisJCQlpZiAocG1hY19pMmNfZ2V0X2NoYW5uZWwoYnVzKSA9PSBpMmNfYnVzKSB7CisJCQkJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CisJCQkJaW5mby5hZGRyID0gKCgqcHJvcCkgJiAweGZmKSA+PiAxOworCQkJCXN0cmxjcHkoaW5mby50eXBlLCAiYW1zIiwgSTJDX05BTUVfU0laRSk7CisJCQkJaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOworCQkJfQorCQl9CisJfQorCiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYwppbmRleCA4NjJlYjM1Li43M2RjNTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKQEAgLTM2LDYgKzM2LDcgQEAKICAgIFZUODIzN1MgICAgICAgICAgICAweDMzNzIgICAgICAgICAgICAgeWVzCiAgICBWVDgyNTEgICAgICAgICAgICAgMHgzMjg3ICAgICAgICAgICAgIHllcwogICAgQ1g3MDAgICAgICAgICAgICAgIDB4ODMyNCAgICAgICAgICAgICB5ZXMKKyAgIFZYODAwL1ZYODIwICAgICAgICAweDgzNTMgICAgICAgICAgICAgeWVzCiAKICAgIE5vdGU6IHdlIGFzc3VtZSB0aGVyZSBjYW4gb25seSBiZSBvbmUgZGV2aWNlLCB3aXRoIG9uZSBTTUJ1cyBpbnRlcmZhY2UuCiAqLwpAQCAtODIsNiArODMsNyBAQAogI2RlZmluZSBWVDU5Nl9CWVRFCQkweDA0CiAjZGVmaW5lIFZUNTk2X0JZVEVfREFUQQkJMHgwOAogI2RlZmluZSBWVDU5Nl9XT1JEX0RBVEEJCTB4MEMKKyNkZWZpbmUgVlQ1OTZfUFJPQ19DQUxMCQkweDEwCiAjZGVmaW5lIFZUNTk2X0JMT0NLX0RBVEEJMHgxNAogI2RlZmluZSBWVDU5Nl9JMkNfQkxPQ0tfREFUQQkweDM0CiAKQEAgLTIzMiw2ICsyMzQsMTIgQEAKIAkJfQogCQlzaXplID0gVlQ1OTZfV09SRF9EQVRBOwogCQlicmVhazsKKwljYXNlIEkyQ19TTUJVU19QUk9DX0NBTEw6CisJCW91dGJfcChjb21tYW5kLCBTTUJIU1RDTUQpOworCQlvdXRiX3AoZGF0YS0+d29yZCAmIDB4ZmYsIFNNQkhTVERBVDApOworCQlvdXRiX3AoKGRhdGEtPndvcmQgJiAweGZmMDApID4+IDgsIFNNQkhTVERBVDEpOworCQlzaXplID0gVlQ1OTZfUFJPQ19DQUxMOworCQlicmVhazsKIAljYXNlIEkyQ19TTUJVU19JMkNfQkxPQ0tfREFUQToKIAkJaWYgKCEodnQ1OTZfZmVhdHVyZXMgJiBGRUFUVVJFX0kyQ0JMT0NLKSkKIAkJCWdvdG8gZXhpdF91bnN1cHBvcnRlZDsKQEAgLTI2Miw2ICsyNzAsOSBAQAogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKKwlpZiAoc2l6ZSA9PSBWVDU5Nl9QUk9DX0NBTEwpCisJCXJlYWRfd3JpdGUgPSBJMkNfU01CVVNfUkVBRDsKKwogCWlmICgocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfV1JJVEUpIHx8IChzaXplID09IFZUNTk2X1FVSUNLKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTI3MSw2ICsyODIsNyBAQAogCQlkYXRhLT5ieXRlID0gaW5iX3AoU01CSFNUREFUMCk7CiAJCWJyZWFrOwogCWNhc2UgVlQ1OTZfV09SRF9EQVRBOgorCWNhc2UgVlQ1OTZfUFJPQ19DQUxMOgogCQlkYXRhLT53b3JkID0gaW5iX3AoU01CSFNUREFUMCkgKyAoaW5iX3AoU01CSFNUREFUMSkgPDwgOCk7CiAJCWJyZWFrOwogCWNhc2UgVlQ1OTZfSTJDX0JMT0NLX0RBVEE6CkBAIC0yOTUsNyArMzA3LDcgQEAKIHsKIAl1MzIgZnVuYyA9IEkyQ19GVU5DX1NNQlVTX1FVSUNLIHwgSTJDX0ZVTkNfU01CVVNfQllURSB8CiAJICAgIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8IEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSB8Ci0JICAgIEkyQ19GVU5DX1NNQlVTX0JMT0NLX0RBVEE7CisJICAgIEkyQ19TTUJVU19QUk9DX0NBTEwgfCBJMkNfRlVOQ19TTUJVU19CTE9DS19EQVRBOwogCiAJaWYgKHZ0NTk2X2ZlYXR1cmVzICYgRkVBVFVSRV9JMkNCTE9DSykKIAkJZnVuYyB8PSBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0s7CkBAIC0zOTYsNiArNDA4LDcgQEAKIAogCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMDoKKwljYXNlIFBDSV9ERVZJQ0VfSURfVklBX1ZYODAwOgogCWNhc2UgUENJX0RFVklDRV9JRF9WSUFfODI1MToKIAljYXNlIFBDSV9ERVZJQ0VfSURfVklBXzgyMzc6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjM3QToKQEAgLTQ1OSw2ICs0NzIsOCBAQAogCSAgLmRyaXZlcl9kYXRhID0gU01CQkEzIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMCksCiAJICAuZHJpdmVyX2RhdGEgPSBTTUJCQTMgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBX1ZYODAwKSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNNQkJBMyB9LAogCXsgMCwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcKaW5kZXggYTk1Y2I5NC4uMTczNTY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9LY29uZmlnCkBAIC0xNzIsNCArMTcyLDE1IEBACiAJICBhbmQgb3RoZXIgZmVhdHVyZXMgdGhhdCBhcmUgb2Z0ZW4gdXNlZCBpbiBwb3J0YWJsZSBkZXZpY2VzIGxpa2UKIAkgIGNlbGwgcGhvbmVzIGFuZCBQREFzLgogCitjb25maWcgTUNVX01QQzgzNDlFTUlUWAorCXRyaXN0YXRlICJNUEM4MzQ5RS1tSVRYIE1DVSBkcml2ZXIiCisJZGVwZW5kcyBvbiBJMkMgJiYgUFBDXzgzeHgKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc29mdCBwb3dlci1vZmYgZnVuY3Rpb25hbGl0eSBvbiB0aGUgRnJlZXNjYWxlCisJICBib2FyZHMgd2l0aCB0aGUgTVBDODM0OUUtbUlUWC1jb21wYXRpYmxlIE1DVSBjaGlwcy4gVGhpcyBkcml2ZXIgd2lsbAorCSAgYWxzbyByZWdpc3RlciBNQ1UgR1BJT3Mgd2l0aCB0aGUgZ2VuZXJpYyBHUElPIEFQSSwgc28geW91J2xsIGFibGUKKwkgIHRvIHVzZSBNQ1UgcGlucyBhcyBHUElPcy4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvTWFrZWZpbGUgYi9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZQppbmRleCAzOWUzZTY5Li5jYTUyMGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZQpAQCAtMjEsNiArMjEsNyBAQAogb2JqLSQoQ09ORklHX1RQUzY1MDEwKQkJKz0gdHBzNjUwMTAubwogb2JqLSQoQ09ORklHX01FTkVMQVVTKQkJKz0gbWVuZWxhdXMubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfVFNMMjU1MCkJKz0gdHNsMjU1MC5vCitvYmotJChDT05GSUdfTUNVX01QQzgzNDlFTUlUWCkJKz0gbWN1X21wYzgzNDllbWl0eC5vCiAKIGlmZXEgKCQoQ09ORklHX0kyQ19ERUJVR19DSElQKSx5KQogRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL2F0MjQuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL2F0MjQuYwppbmRleCAyYTRhY2IyLi5kNDc3NTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9hdDI0LmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvYXQyNC5jCkBAIC00NjAsNyArNDYwLDYgQEAKIAkgKi8KIAlhdDI0LT5iaW4uYXR0ci5uYW1lID0gImVlcHJvbSI7CiAJYXQyNC0+YmluLmF0dHIubW9kZSA9IGNoaXAuZmxhZ3MgJiBBVDI0X0ZMQUdfSVJVR08gPyBTX0lSVUdPIDogU19JUlVTUjsKLQlhdDI0LT5iaW4uYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCWF0MjQtPmJpbi5yZWFkID0gYXQyNF9iaW5fcmVhZDsKIAlhdDI0LT5iaW4uc2l6ZSA9IGNoaXAuYnl0ZV9sZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTY4Mi5jIGIvZHJpdmVycy9pMmMvY2hpcHMvZHMxNjgyLmMKaW5kZXggMjNiZTRkNC4uZjNlZTRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvZHMxNjgyLmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvZHMxNjgyLmMKQEAgLTE5MCw3ICsxOTAsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJlZXByb20iLAogCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gRFMxNjgyX0VFUFJPTV9TSVpFLAogCS5yZWFkID0gZHMxNjgyX2VlcHJvbV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvaXNwMTMwMV9vbWFwLmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9pc3AxMzAxX29tYXAuYwppbmRleCA0NjU1Yjc5Li4yODkwMmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9pc3AxMzAxX29tYXAuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9pc3AxMzAxX29tYXAuYwpAQCAtNDksMTAgKzQ5LDkgQEAKIAogc3RydWN0IGlzcDEzMDEgewogCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIJb3RnOwotCXN0cnVjdCBpMmNfY2xpZW50CWNsaWVudDsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50OwogCXZvaWQJCQkoKmkyY19yZWxlYXNlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCi0JaW50CQkJaXJxOwogCWludAkJCWlycV90eXBlOwogCiAJdTMyCQkJbGFzdF9vdGdfY3RybDsKQEAgLTEzOCwxNCArMTM3LDYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyogb25seSB0d28gYWRkcmVzc2VzIHBvc3NpYmxlICovCi0jZGVmaW5lCUlTUF9CQVNFCQkweDJjCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCUlTUF9CQVNFLCBJU1BfQkFTRSArIDEsCi0JSTJDX0NMSUVOVF9FTkQgfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7Ci0KIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpc3AxMzAxX2RyaXZlcjsKIAogLyogc21idXMgYXBpcyBhcmUgdXNlZCBmb3IgcG9ydGFiaWxpdHkgKi8KQEAgLTE1MywyNSArMTQ0LDI1IEBACiBzdGF0aWMgaW5saW5lIHU4CiBpc3AxMzAxX2dldF91OChzdHJ1Y3QgaXNwMTMwMSAqaXNwLCB1OCByZWcpCiB7Ci0JcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSgmaXNwLT5jbGllbnQsIHJlZyArIDApOworCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoaXNwLT5jbGllbnQsIHJlZyArIDApOwogfQogCiBzdGF0aWMgaW5saW5lIGludAogaXNwMTMwMV9nZXRfdTE2KHN0cnVjdCBpc3AxMzAxICppc3AsIHU4IHJlZykKIHsKLQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKCZpc3AtPmNsaWVudCwgcmVnKTsKKwlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGlzcC0+Y2xpZW50LCByZWcpOwogfQogCiBzdGF0aWMgaW5saW5lIGludAogaXNwMTMwMV9zZXRfYml0cyhzdHJ1Y3QgaXNwMTMwMSAqaXNwLCB1OCByZWcsIHU4IGJpdHMpCiB7Ci0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoJmlzcC0+Y2xpZW50LCByZWcgKyAwLCBiaXRzKTsKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShpc3AtPmNsaWVudCwgcmVnICsgMCwgYml0cyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBpc3AxMzAxX2NsZWFyX2JpdHMoc3RydWN0IGlzcDEzMDEgKmlzcCwgdTggcmVnLCB1OCBiaXRzKQogewotCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKCZpc3AtPmNsaWVudCwgcmVnICsgMSwgYml0cyk7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoaXNwLT5jbGllbnQsIHJlZyArIDEsIGJpdHMpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzQ5LDEwICszNDAsMTAgQEAKIAlpbnQgc3RhdHVzOwogCiAJaWYgKGlzcCAmJiAhdGVzdF9hbmRfc2V0X2JpdCh3b3JrLCAmaXNwLT50b2RvKSkgewotCQkodm9pZCkgZ2V0X2RldmljZSgmaXNwLT5jbGllbnQuZGV2KTsKKwkJKHZvaWQpIGdldF9kZXZpY2UoJmlzcC0+Y2xpZW50LT5kZXYpOwogCQlzdGF0dXMgPSBzY2hlZHVsZV93b3JrKCZpc3AtPndvcmspOwogCQlpZiAoIXN0YXR1cyAmJiAhaXNwLT53b3JraW5nKQotCQkJZGV2X3ZkYmcoJmlzcC0+Y2xpZW50LmRldiwKKwkJCWRldl92ZGJnKCZpc3AtPmNsaWVudC0+ZGV2LAogCQkJCSJ3b3JrIGl0ZW0gJWQgbWF5IGJlIGxvc3RcbiIsIHdvcmspOwogCX0KIH0KQEAgLTExMzUsNyArMTEyNiw3IEBACiAJCS8qIHRyYW5zZmVyIHN0YXRlIGZyb20gb3RnIGVuZ2luZSB0byBpc3AxMzAxICovCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV09SS19VUERBVEVfSVNQLCAmaXNwLT50b2RvKSkgewogCQkJb3RnX3VwZGF0ZV9pc3AoaXNwKTsKLQkJCXB1dF9kZXZpY2UoJmlzcC0+Y2xpZW50LmRldik7CisJCQlwdXRfZGV2aWNlKCZpc3AtPmNsaWVudC0+ZGV2KTsKIAkJfQogI2VuZGlmCiAJCS8qIHRyYW5zZmVyIHN0YXRlIGZyb20gaXNwMTMwMSB0byBvdGcgZW5naW5lICovCkBAIC0xMTQzLDcgKzExMzQsNyBAQAogCQkJdTgJCXN0YXQgPSBpc3AxMzAxX2NsZWFyX2xhdGNoKGlzcCk7CiAKIAkJCWlzcF91cGRhdGVfb3RnKGlzcCwgc3RhdCk7Ci0JCQlwdXRfZGV2aWNlKCZpc3AtPmNsaWVudC5kZXYpOworCQkJcHV0X2RldmljZSgmaXNwLT5jbGllbnQtPmRldik7CiAJCX0KIAogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdPUktfSE9TVF9SRVNVTUUsICZpc3AtPnRvZG8pKSB7CkBAIC0xMTc4LDcgKzExNjksNyBAQAogCQkJfQogCQkJaG9zdF9yZXN1bWUoaXNwKTsKIAkJCS8vIG1kZWxheSgxMCk7Ci0JCQlwdXRfZGV2aWNlKCZpc3AtPmNsaWVudC5kZXYpOworCQkJcHV0X2RldmljZSgmaXNwLT5jbGllbnQtPmRldik7CiAJCX0KIAogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdPUktfVElNRVIsICZpc3AtPnRvZG8pKSB7CkBAIC0xMTg3LDE1ICsxMTc4LDE1IEBACiAJCQlpZiAoIXN0b3ApCiAJCQkJbW9kX3RpbWVyKCZpc3AtPnRpbWVyLCBqaWZmaWVzICsgVElNRVJfSklGRklFUyk7CiAjZW5kaWYKLQkJCXB1dF9kZXZpY2UoJmlzcC0+Y2xpZW50LmRldik7CisJCQlwdXRfZGV2aWNlKCZpc3AtPmNsaWVudC0+ZGV2KTsKIAkJfQogCiAJCWlmIChpc3AtPnRvZG8pCi0JCQlkZXZfdmRiZygmaXNwLT5jbGllbnQuZGV2LAorCQkJZGV2X3ZkYmcoJmlzcC0+Y2xpZW50LT5kZXYsCiAJCQkJIndvcmsgZG9uZSwgdG9kbyA9IDB4JWx4XG4iLAogCQkJCWlzcC0+dG9kbyk7CiAJCWlmIChzdG9wKSB7Ci0JCQlkZXZfZGJnKCZpc3AtPmNsaWVudC5kZXYsICJzdG9wXG4iKTsKKwkJCWRldl9kYmcoJmlzcC0+Y2xpZW50LT5kZXYsICJzdG9wXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJfSB3aGlsZSAoaXNwLT50b2RvKTsKQEAgLTEyMTksNyArMTIxMCw3IEBACiB7CiAJc3RydWN0IGlzcDEzMDEJKmlzcDsKIAotCWlzcCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBpc3AxMzAxLCBjbGllbnQuZGV2KTsKKwlpc3AgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCS8qIHVnbHkgLS0gaTJjIGhpamFja3Mgb3VyIG1lbW9yeSBob29rIHRvIHdhaXRfZm9yX2NvbXBsZXRpb24oKSAqLwogCWlmIChpc3AtPmkyY19yZWxlYXNlKQpAQCAtMTIyOSwxNSArMTIyMCwxNSBAQAogCiBzdGF0aWMgc3RydWN0IGlzcDEzMDEgKnRoZV90cmFuc2NlaXZlcjsKIAotc3RhdGljIGludCBpc3AxMzAxX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3N0YXRpYyBpbnQgX19leGl0IGlzcDEzMDFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCiB7CiAJc3RydWN0IGlzcDEzMDEJKmlzcDsKIAotCWlzcCA9IGNvbnRhaW5lcl9vZihpMmMsIHN0cnVjdCBpc3AxMzAxLCBjbGllbnQpOworCWlzcCA9IGkyY19nZXRfY2xpZW50ZGF0YShpMmMpOwogCiAJaXNwMTMwMV9jbGVhcl9iaXRzKGlzcCwgSVNQMTMwMV9JTlRFUlJVUFRfRkFMTElORywgfjApOwogCWlzcDEzMDFfY2xlYXJfYml0cyhpc3AsIElTUDEzMDFfSU5URVJSVVBUX1JJU0lORywgfjApOwotCWZyZWVfaXJxKGlzcC0+aXJxLCBpc3ApOworCWZyZWVfaXJxKGkyYy0+aXJxLCBpc3ApOwogI2lmZGVmCUNPTkZJR19VU0JfT1RHCiAJb3RnX3VuYmluZChpc3ApOwogI2VuZGlmCkBAIC0xMjUyLDcgKzEyNDMsNyBAQAogCXB1dF9kZXZpY2UoJmkyYy0+ZGV2KTsKIAl0aGVfdHJhbnNjZWl2ZXIgPSAwOwogCi0JcmV0dXJuIGkyY19kZXRhY2hfY2xpZW50KGkyYyk7CisJcmV0dXJuIDA7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMjg1LDcgKzEyNzYsNyBAQAogCWlzcDEzMDFfc2V0X2JpdHMoaXNwLCBJU1AxMzAxX0lOVEVSUlVQVF9GQUxMSU5HLAogCQlJTlRSX1ZCVVNfVkxEIHwgSU5UUl9TRVNTX1ZMRCB8IElOVFJfSURfR05EKTsKIAotCWRldl9pbmZvKCZpc3AtPmNsaWVudC5kZXYsICJyZWFkeSBmb3IgZHVhbC1yb2xlIFVTQiAuLi5cbiIpOworCWRldl9pbmZvKCZpc3AtPmNsaWVudC0+ZGV2LCAicmVhZHkgZm9yIGR1YWwtcm9sZSBVU0IgLi4uXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTMxMCw3ICsxMzAxLDcgQEAKIAogI2lmZGVmCUNPTkZJR19VU0JfT1RHCiAJaXNwLT5vdGcuaG9zdCA9IGhvc3Q7Ci0JZGV2X2RiZygmaXNwLT5jbGllbnQuZGV2LCAicmVnaXN0ZXJlZCBob3N0XG4iKTsKKwlkZXZfZGJnKCZpc3AtPmNsaWVudC0+ZGV2LCAicmVnaXN0ZXJlZCBob3N0XG4iKTsKIAlob3N0X3N1c3BlbmQoaXNwKTsKIAlpZiAoaXNwLT5vdGcuZ2FkZ2V0KQogCQlyZXR1cm4gaXNwMTMwMV9vdGdfZW5hYmxlKGlzcCk7CkBAIC0xMzI1LDcgKzEzMTYsNyBAQAogCWlmIChtYWNoaW5lX2lzX29tYXBfaDIoKSkKIAkJaXNwMTMwMV9zZXRfYml0cyhpc3AsIElTUDEzMDFfTU9ERV9DT05UUk9MXzEsIE1DMV9EQVRfU0UwKTsKIAotCWRldl9pbmZvKCZpc3AtPmNsaWVudC5kZXYsICJBLUhvc3Qgc2Vzc2lvbnMgb2tcbiIpOworCWRldl9pbmZvKCZpc3AtPmNsaWVudC0+ZGV2LCAiQS1Ib3N0IHNlc3Npb25zIG9rXG4iKTsKIAlpc3AxMzAxX3NldF9iaXRzKGlzcCwgSVNQMTMwMV9JTlRFUlJVUFRfUklTSU5HLAogCQlJTlRSX0lEX0dORCk7CiAJaXNwMTMwMV9zZXRfYml0cyhpc3AsIElTUDEzMDFfSU5URVJSVVBUX0ZBTExJTkcsCkBAIC0xMzQzLDcgKzEzMzQsNyBAQAogCXJldHVybiAwOwogCiAjZWxzZQotCWRldl9kYmcoJmlzcC0+Y2xpZW50LmRldiwgImhvc3Qgc2Vzc2lvbnMgbm90IGFsbG93ZWRcbiIpOworCWRldl9kYmcoJmlzcC0+Y2xpZW50LT5kZXYsICJob3N0IHNlc3Npb25zIG5vdCBhbGxvd2VkXG4iKTsKIAlyZXR1cm4gLUVJTlZBTDsKICNlbmRpZgogCkBAIC0xMzcwLDcgKzEzNjEsNyBAQAogCiAjaWZkZWYJQ09ORklHX1VTQl9PVEcKIAlpc3AtPm90Zy5nYWRnZXQgPSBnYWRnZXQ7Ci0JZGV2X2RiZygmaXNwLT5jbGllbnQuZGV2LCAicmVnaXN0ZXJlZCBnYWRnZXRcbiIpOworCWRldl9kYmcoJmlzcC0+Y2xpZW50LT5kZXYsICJyZWdpc3RlcmVkIGdhZGdldFxuIik7CiAJLyogZ2FkZ2V0IGRyaXZlciBtYXkgYmUgc3VzcGVuZGVkIHVudGlsIHZidXNfY29ubmVjdCAoKSAqLwogCWlmIChpc3AtPm90Zy5ob3N0KQogCQlyZXR1cm4gaXNwMTMwMV9vdGdfZW5hYmxlKGlzcCk7CkBAIC0xMzk1LDcgKzEzODYsNyBAQAogCQlJTlRSX1NFU1NfVkxEKTsKIAlpc3AxMzAxX3NldF9iaXRzKGlzcCwgSVNQMTMwMV9JTlRFUlJVUFRfRkFMTElORywKIAkJSU5UUl9WQlVTX1ZMRCk7Ci0JZGV2X2luZm8oJmlzcC0+Y2xpZW50LmRldiwgIkItUGVyaXBoZXJhbCBzZXNzaW9ucyBva1xuIik7CisJZGV2X2luZm8oJmlzcC0+Y2xpZW50LT5kZXYsICJCLVBlcmlwaGVyYWwgc2Vzc2lvbnMgb2tcbiIpOwogCWR1bXBfcmVncyhpc3AsIF9fZnVuY19fKTsKIAogCS8qIElmIHRoaXMgaGFzIGEgTWluaS1BQiBjb25uZWN0b3IsIHRoaXMgbW9kZSBpcyBoaWdobHkKQEAgLTE0MDgsNyArMTM5OSw3IEBACiAJcmV0dXJuIDA7CiAKICNlbHNlCi0JZGV2X2RiZygmaXNwLT5jbGllbnQuZGV2LCAicGVyaXBoZXJhbCBzZXNzaW9ucyBub3QgYWxsb3dlZFxuIik7CisJZGV2X2RiZygmaXNwLT5jbGllbnQtPmRldiwgInBlcmlwaGVyYWwgc2Vzc2lvbnMgbm90IGFsbG93ZWRcbiIpOwogCXJldHVybiAtRUlOVkFMOwogI2VuZGlmCiB9CkBAIC0xNTA4LDEyICsxNDk5LDEwIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIG5vIGVycm9yIHJldHVybnMsIHRoZXknZCBqdXN0IG1ha2UgYnVzIHNjYW5uaW5nIHN0b3AgKi8KLXN0YXRpYyBpbnQgaXNwMTMwMV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmJ1cywgaW50IGFkZHJlc3MsIGludCBraW5kKQorc3RhdGljIGludCBfX2luaXQgaXNwMTMwMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQogewogCWludAkJCXN0YXR1czsKIAlzdHJ1Y3QgaXNwMTMwMQkJKmlzcDsKLQlzdHJ1Y3QgaTJjX2NsaWVudAkqaTJjOwogCiAJaWYgKHRoZV90cmFuc2NlaXZlcikKIAkJcmV0dXJuIDA7CkBAIC0xNTI3LDM3ICsxNTE2LDE5IEBACiAJaXNwLT50aW1lci5mdW5jdGlvbiA9IGlzcDEzMDFfdGltZXI7CiAJaXNwLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGlzcDsKIAotCWlzcC0+aXJxID0gLTE7Ci0JaXNwLT5jbGllbnQuYWRkciA9IGFkZHJlc3M7Ci0JaTJjX3NldF9jbGllbnRkYXRhKCZpc3AtPmNsaWVudCwgaXNwKTsKLQlpc3AtPmNsaWVudC5hZGFwdGVyID0gYnVzOwotCWlzcC0+Y2xpZW50LmRyaXZlciA9ICZpc3AxMzAxX2RyaXZlcjsKLQlzdHJsY3B5KGlzcC0+Y2xpZW50Lm5hbWUsIERSSVZFUl9OQU1FLCBJMkNfTkFNRV9TSVpFKTsKLQlpMmMgPSAmaXNwLT5jbGllbnQ7CisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgaXNwKTsKKwlpc3AtPmNsaWVudCA9IGkyYzsKIAotCS8qIGlmIHRoaXMgaXMgYSB0cnVlIHByb2JlLCB2ZXJpZnkgdGhlIGNoaXAgLi4uICovCi0JaWYgKGtpbmQgPCAwKSB7Ci0JCXN0YXR1cyA9IGlzcDEzMDFfZ2V0X3UxNihpc3AsIElTUDEzMDFfVkVORE9SX0lEKTsKLQkJaWYgKHN0YXR1cyAhPSBJMkNfVkVORE9SX0lEX1BISUxJUFMpIHsKLQkJCWRldl9kYmcoJmJ1cy0+ZGV2LCAiYWRkciAlZCBub3QgcGhpbGlwcyBpZDogJWRcbiIsCi0JCQkJYWRkcmVzcywgc3RhdHVzKTsKLQkJCWdvdG8gZmFpbDE7Ci0JCX0KLQkJc3RhdHVzID0gaXNwMTMwMV9nZXRfdTE2KGlzcCwgSVNQMTMwMV9QUk9EVUNUX0lEKTsKLQkJaWYgKHN0YXR1cyAhPSBJMkNfUFJPRFVDVF9JRF9QSElMSVBTXzEzMDEpIHsKLQkJCWRldl9kYmcoJmJ1cy0+ZGV2LCAiJWQgbm90IGlzcDEzMDEsICVkXG4iLAotCQkJCWFkZHJlc3MsIHN0YXR1cyk7Ci0JCQlnb3RvIGZhaWwxOwotCQl9CisJLyogdmVyaWZ5IHRoZSBjaGlwIChzaG91bGRuJ3QgYmUgbmVjZXNhcnkpICovCisJc3RhdHVzID0gaXNwMTMwMV9nZXRfdTE2KGlzcCwgSVNQMTMwMV9WRU5ET1JfSUQpOworCWlmIChzdGF0dXMgIT0gSTJDX1ZFTkRPUl9JRF9QSElMSVBTKSB7CisJCWRldl9kYmcoJmkyYy0+ZGV2LCAibm90IHBoaWxpcHMgaWQ6ICVkXG4iLCBzdGF0dXMpOworCQlnb3RvIGZhaWw7CiAJfQotCi0Jc3RhdHVzID0gaTJjX2F0dGFjaF9jbGllbnQoaTJjKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlkZXZfZGJnKCZidXMtPmRldiwgImNhbid0IGF0dGFjaCAlcyB0byBkZXZpY2UgJWQsIGVyciAlZFxuIiwKLQkJCQlEUklWRVJfTkFNRSwgYWRkcmVzcywgc3RhdHVzKTsKLWZhaWwxOgotCQlrZnJlZShpc3ApOwotCQlyZXR1cm4gMDsKKwlzdGF0dXMgPSBpc3AxMzAxX2dldF91MTYoaXNwLCBJU1AxMzAxX1BST0RVQ1RfSUQpOworCWlmIChzdGF0dXMgIT0gSTJDX1BST0RVQ1RfSURfUEhJTElQU18xMzAxKSB7CisJCWRldl9kYmcoJmkyYy0+ZGV2LCAibm90IGlzcDEzMDEsICVkXG4iLCBzdGF0dXMpOworCQlnb3RvIGZhaWw7CiAJfQogCWlzcC0+aTJjX3JlbGVhc2UgPSBpMmMtPmRldi5yZWxlYXNlOwogCWkyYy0+ZGV2LnJlbGVhc2UgPSBpc3AxMzAxX3JlbGVhc2U7CkBAIC0xNTg2LDcgKzE1NTcsNyBAQAogCXN0YXR1cyA9IG90Z19iaW5kKGlzcCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJZGV2X2RiZygmaTJjLT5kZXYsICJjYW4ndCBiaW5kIE9UR1xuIik7Ci0JCWdvdG8gZmFpbDI7CisJCWdvdG8gZmFpbDsKIAl9CiAjZW5kaWYKIApAQCAtMTU5OSwyNiArMTU3MCwyMSBAQAogCiAJCS8qIElSUSB3aXJlZCBhdCBNMTQgKi8KIAkJb21hcF9jZmdfcmVnKE0xNF8xNTEwX0dQSU8yKTsKLQkJaXNwLT5pcnEgPSBPTUFQX0dQSU9fSVJRKDIpOwogCQlpZiAoZ3Bpb19yZXF1ZXN0KDIsICJpc3AxMzAxIikgPT0gMCkKIAkJCWdwaW9fZGlyZWN0aW9uX2lucHV0KDIpOwogCQlpc3AtPmlycV90eXBlID0gSVJRRl9UUklHR0VSX0ZBTExJTkc7CiAJfQogCiAJaXNwLT5pcnFfdHlwZSB8PSBJUlFGX1NBTVBMRV9SQU5ET007Ci0Jc3RhdHVzID0gcmVxdWVzdF9pcnEoaXNwLT5pcnEsIGlzcDEzMDFfaXJxLAorCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGkyYy0+aXJxLCBpc3AxMzAxX2lycSwKIAkJCWlzcC0+aXJxX3R5cGUsIERSSVZFUl9OQU1FLCBpc3ApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWRldl9kYmcoJmkyYy0+ZGV2LCAiY2FuJ3QgZ2V0IElSUSAlZCwgZXJyICVkXG4iLAotCQkJCWlzcC0+aXJxLCBzdGF0dXMpOwotI2lmZGVmCUNPTkZJR19VU0JfT1RHCi1mYWlsMjoKLSNlbmRpZgotCQlpMmNfZGV0YWNoX2NsaWVudChpMmMpOwotCQlnb3RvIGZhaWwxOworCQkJCWkyYy0+aXJxLCBzdGF0dXMpOworCQlnb3RvIGZhaWw7CiAJfQogCi0JaXNwLT5vdGcuZGV2ID0gJmlzcC0+Y2xpZW50LmRldjsKKwlpc3AtPm90Zy5kZXYgPSAmaTJjLT5kZXY7CiAJaXNwLT5vdGcubGFiZWwgPSBEUklWRVJfTkFNRTsKIAogCWlzcC0+b3RnLnNldF9ob3N0ID0gaXNwMTMwMV9zZXRfaG9zdCwKQEAgLTE2NDksMjIgKzE2MTUsMjUgQEAKIAkJCXN0YXR1cyk7CiAKIAlyZXR1cm4gMDsKKworZmFpbDoKKwlrZnJlZShpc3ApOworCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgaW50IGlzcDEzMDFfc2Nhbl9idXMoc3RydWN0IGkyY19hZGFwdGVyICpidXMpCi17Ci0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShidXMsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQQotCQkJfCBJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQSkpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBpMmNfcHJvYmUoYnVzLCAmYWRkcl9kYXRhLCBpc3AxMzAxX3Byb2JlKTsKLX0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBpc3AxMzAxX2lkW10gPSB7CisJeyAiaXNwMTMwMV9vbWFwIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBpc3AxMzAxX2lkKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGlzcDEzMDFfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImlzcDEzMDFfb21hcCIsCiAJfSwKLQkuYXR0YWNoX2FkYXB0ZXIJPSBpc3AxMzAxX3NjYW5fYnVzLAotCS5kZXRhY2hfY2xpZW50CT0gaXNwMTMwMV9kZXRhY2hfY2xpZW50LAorCS5wcm9iZQkJPSBpc3AxMzAxX3Byb2JlLAorCS5yZW1vdmUJCT0gX19leGl0X3AoaXNwMTMwMV9yZW1vdmUpLAorCS5pZF90YWJsZQk9IGlzcDEzMDFfaWQsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvbWN1X21wYzgzNDllbWl0eC5jIGIvZHJpdmVycy9pMmMvY2hpcHMvbWN1X21wYzgzNDllbWl0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYTliY2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9tY3VfbXBjODM0OWVtaXR4LmMKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBQb3dlciBNYW5hZ2VtZW50IGFuZCBHUElPIGV4cGFuZGVyIGRyaXZlciBmb3IgTVBDODM0OUUtbUlUWC1jb21wYXRpYmxlIE1DVQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCAgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEF1dGhvcjogQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKworLyoKKyAqIEkgZG9uJ3QgaGF2ZSBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIE1DVSBmaXJtd2FyZSwgSSBmb3VuZCB0aGlzIHJlZ2lzdGVyCisgKiBhbmQgYml0cyBwb3NpdGlvbnMgYnkgdGhlIHRyaWFsJmVycm9yIG1ldGhvZC4KKyAqLworI2RlZmluZSBNQ1VfUkVHX0NUUkwJMHgyMAorI2RlZmluZSBNQ1VfQ1RSTF9QT0ZGCTB4NDAKKworI2RlZmluZSBNQ1VfTlVNX0dQSU8JMgorCitzdHJ1Y3QgbWN1IHsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IG9mX2dwaW9fY2hpcCBvZl9nYzsKKwl1OCByZWdfY3RybDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWN1ICpnbG9iX21jdTsKKworc3RhdGljIHZvaWQgbWN1X3Bvd2VyX29mZih2b2lkKQoreworCXN0cnVjdCBtY3UgKm1jdSA9IGdsb2JfbWN1OworCisJcHJfaW5mbygiU2VuZGluZyBwb3dlci1vZmYgcmVxdWVzdCB0byB0aGUgTUNVLi4uXG4iKTsKKwltdXRleF9sb2NrKCZtY3UtPmxvY2spOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZ2xvYl9tY3UtPmNsaWVudCwgTUNVX1JFR19DVFJMLAorCQkJCSAgbWN1LT5yZWdfY3RybCB8IE1DVV9DVFJMX1BPRkYpOworCW11dGV4X3VubG9jaygmbWN1LT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbWN1X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYyA9IHRvX29mX2dwaW9fY2hpcChnYyk7CisJc3RydWN0IG1jdSAqbWN1ID0gY29udGFpbmVyX29mKG9mX2djLCBzdHJ1Y3QgbWN1LCBvZl9nYyk7CisJdTggYml0ID0gMSA8PCAoNCArIGdwaW8pOworCisJbXV0ZXhfbG9jaygmbWN1LT5sb2NrKTsKKwlpZiAodmFsKQorCQltY3UtPnJlZ19jdHJsICY9IH5iaXQ7CisJZWxzZQorCQltY3UtPnJlZ19jdHJsIHw9IGJpdDsKKworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEobWN1LT5jbGllbnQsIE1DVV9SRUdfQ1RSTCwgbWN1LT5yZWdfY3RybCk7CisJbXV0ZXhfdW5sb2NrKCZtY3UtPmxvY2spOworfQorCitzdGF0aWMgaW50IG1jdV9ncGlvX2Rpcl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQoreworCW1jdV9ncGlvX3NldChnYywgZ3BpbywgdmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtY3VfZ3Bpb2NoaXBfYWRkKHN0cnVjdCBtY3UgKm1jdSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBvZl9ncGlvX2NoaXAgKm9mX2djID0gJm1jdS0+b2ZfZ2M7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSAmb2ZfZ2MtPmdjOworCWludCByZXQ7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsbWN1LW1wYzgzNDllbWl0eCIpOworCWlmICghbnApCisJCXJldHVybiAtRU5PREVWOworCisJZ2MtPm93bmVyID0gVEhJU19NT0RVTEU7CisJZ2MtPmxhYmVsID0gbnAtPmZ1bGxfbmFtZTsKKwlnYy0+Y2FuX3NsZWVwID0gMTsKKwlnYy0+bmdwaW8gPSBNQ1VfTlVNX0dQSU87CisJZ2MtPmJhc2UgPSAtMTsKKwlnYy0+c2V0ID0gbWN1X2dwaW9fc2V0OworCWdjLT5kaXJlY3Rpb25fb3V0cHV0ID0gbWN1X2dwaW9fZGlyX291dDsKKwlvZl9nYy0+Z3Bpb19jZWxscyA9IDI7CisJb2ZfZ2MtPnhsYXRlID0gb2ZfZ3Bpb19zaW1wbGVfeGxhdGU7CisKKwlucC0+ZGF0YSA9IG9mX2djOworCW1jdS0+bnAgPSBucDsKKworCS8qCisJICogV2UgZG9uJ3Qgd2FudCB0byBsb3NlIHRoZSBub2RlLCBpdHMgLT5kYXRhIGFuZCAtPmZ1bGxfbmFtZS4uLgorCSAqIFNvLCBpZiBzdWNjZWVkZWQsIHdlIGRvbid0IHB1dCB0aGUgbm9kZSBoZXJlLgorCSAqLworCXJldCA9IGdwaW9jaGlwX2FkZChnYyk7CisJaWYgKHJldCkKKwkJb2Zfbm9kZV9wdXQobnApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWN1X2dwaW9jaGlwX3JlbW92ZShzdHJ1Y3QgbWN1ICptY3UpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmbWN1LT5vZl9nYy5nYyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlvZl9ub2RlX3B1dChtY3UtPm5wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtY3VfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IG1jdSAqbWN1OworCWludCByZXQ7CisKKwltY3UgPSBremFsbG9jKHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtY3UpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmbWN1LT5sb2NrKTsKKwltY3UtPmNsaWVudCA9IGNsaWVudDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBtY3UpOworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG1jdS0+Y2xpZW50LCBNQ1VfUkVHX0NUUkwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKwltY3UtPnJlZ19jdHJsID0gcmV0OworCisJcmV0ID0gbWN1X2dwaW9jaGlwX2FkZChtY3UpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJLyogWFhYOiB0aGlzIGlzIHBvdGVudGlhbGx5IHJhY3ksIGJ1dCB0aGVyZSBpcyBubyBsb2NrIGZvciBwcGNfbWQgKi8KKwlpZiAoIXBwY19tZC5wb3dlcl9vZmYpIHsKKwkJZ2xvYl9tY3UgPSBtY3U7CisJCXBwY19tZC5wb3dlcl9vZmYgPSBtY3VfcG93ZXJfb2ZmOworCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJ3aWxsIHByb3ZpZGUgcG93ZXItb2ZmIHNlcnZpY2VcbiIpOworCX0KKworCXJldHVybiAwOworZXJyOgorCWtmcmVlKG1jdSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbWN1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtY3UgKm1jdSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCByZXQ7CisKKwlpZiAoZ2xvYl9tY3UgPT0gbWN1KSB7CisJCXBwY19tZC5wb3dlcl9vZmYgPSBOVUxMOworCQlnbG9iX21jdSA9IE5VTEw7CisJfQorCisJcmV0ID0gbWN1X2dwaW9jaGlwX3JlbW92ZShtY3UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJa2ZyZWUobWN1KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG1jdV9pZHNbXSA9IHsKKwl7ICJtY3UtbXBjODM0OWVtaXR4IiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWN1X2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtY3VfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1jdS1tcGM4MzQ5ZW1pdHgiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IG1jdV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AobWN1X3JlbW92ZSksCisJLmlkX3RhYmxlID0gbWN1X2lkcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1jdV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZtY3VfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KG1jdV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1jdV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJm1jdV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobWN1X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlBvd2VyIE1hbmFnZW1lbnQgYW5kIEdQSU8gZXhwYW5kZXIgZHJpdmVyIGZvciAiCisJCSAgICJNUEM4MzQ5RS1tSVRYLWNvbXBhdGlibGUgTUNVIik7CitNT0RVTEVfQVVUSE9SKCJBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL21lbmVsYXVzLmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9tZW5lbGF1cy5jCmluZGV4IDE3NjEyNmQuLjRiMzY0YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL21lbmVsYXVzLmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvbWVuZWxhdXMuYwpAQCAtODMyLDUyICs4MzIsNTIgQEAKIAogc3RhdGljIHZvaWQgbWVuZWxhdXNfdG9fdGltZShjaGFyICpyZWdzLCBzdHJ1Y3QgcnRjX3RpbWUgKnQpCiB7Ci0JdC0+dG1fc2VjID0gQkNEMkJJTihyZWdzWzBdKTsKLQl0LT50bV9taW4gPSBCQ0QyQklOKHJlZ3NbMV0pOworCXQtPnRtX3NlYyA9IGJjZDJiaW4ocmVnc1swXSk7CisJdC0+dG1fbWluID0gYmNkMmJpbihyZWdzWzFdKTsKIAlpZiAodGhlX21lbmVsYXVzLT5ydGNfY29udHJvbCAmIFJUQ19DVFJMX01PREUxMikgewotCQl0LT50bV9ob3VyID0gQkNEMkJJTihyZWdzWzJdICYgMHgxZikgLSAxOworCQl0LT50bV9ob3VyID0gYmNkMmJpbihyZWdzWzJdICYgMHgxZikgLSAxOwogCQlpZiAocmVnc1syXSAmIFJUQ19IUl9QTSkKIAkJCXQtPnRtX2hvdXIgKz0gMTI7CiAJfSBlbHNlCi0JCXQtPnRtX2hvdXIgPSBCQ0QyQklOKHJlZ3NbMl0gJiAweDNmKTsKLQl0LT50bV9tZGF5ID0gQkNEMkJJTihyZWdzWzNdKTsKLQl0LT50bV9tb24gPSBCQ0QyQklOKHJlZ3NbNF0pIC0gMTsKLQl0LT50bV95ZWFyID0gQkNEMkJJTihyZWdzWzVdKSArIDEwMDsKKwkJdC0+dG1faG91ciA9IGJjZDJiaW4ocmVnc1syXSAmIDB4M2YpOworCXQtPnRtX21kYXkgPSBiY2QyYmluKHJlZ3NbM10pOworCXQtPnRtX21vbiA9IGJjZDJiaW4ocmVnc1s0XSkgLSAxOworCXQtPnRtX3llYXIgPSBiY2QyYmluKHJlZ3NbNV0pICsgMTAwOwogfQogCiBzdGF0aWMgaW50IHRpbWVfdG9fbWVuZWxhdXMoc3RydWN0IHJ0Y190aW1lICp0LCBpbnQgcmVnbnVtKQogewogCWludAlob3VyLCBzdGF0dXM7CiAKLQlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIEJJTjJCQ0QodC0+dG1fc2VjKSk7CisJc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBiaW4yYmNkKHQtPnRtX3NlYykpOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKLQlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIEJJTjJCQ0QodC0+dG1fbWluKSk7CisJc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBiaW4yYmNkKHQtPnRtX21pbikpOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKIAlpZiAodGhlX21lbmVsYXVzLT5ydGNfY29udHJvbCAmIFJUQ19DVFJMX01PREUxMikgewogCQlob3VyID0gdC0+dG1faG91ciArIDE7CiAJCWlmIChob3VyID4gMTIpCi0JCQlob3VyID0gUlRDX0hSX1BNIHwgQklOMkJDRChob3VyIC0gMTIpOworCQkJaG91ciA9IFJUQ19IUl9QTSB8IGJpbjJiY2QoaG91ciAtIDEyKTsKIAkJZWxzZQotCQkJaG91ciA9IEJJTjJCQ0QoaG91cik7CisJCQlob3VyID0gYmluMmJjZChob3VyKTsKIAl9IGVsc2UKLQkJaG91ciA9IEJJTjJCQ0QodC0+dG1faG91cik7CisJCWhvdXIgPSBiaW4yYmNkKHQtPnRtX2hvdXIpOwogCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgaG91cik7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZmFpbDsKIAotCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgQklOMkJDRCh0LT50bV9tZGF5KSk7CisJc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBiaW4yYmNkKHQtPnRtX21kYXkpKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwogCi0Jc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBCSU4yQkNEKHQtPnRtX21vbiArIDEpKTsKKwlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIGJpbjJiY2QodC0+dG1fbW9uICsgMSkpOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKLQlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIEJJTjJCQ0QodC0+dG1feWVhciAtIDEwMCkpOworCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgYmluMmJjZCh0LT50bV95ZWFyIC0gMTAwKSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZmFpbDsKIApAQCAtOTE0LDcgKzkxNCw3IEBACiAJfQogCiAJbWVuZWxhdXNfdG9fdGltZShyZWdzLCB0KTsKLQl0LT50bV93ZGF5ID0gQkNEMkJJTihyZWdzWzZdKTsKKwl0LT50bV93ZGF5ID0gYmNkMmJpbihyZWdzWzZdKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTI3LDcgKzkyNyw3IEBACiAJc3RhdHVzID0gdGltZV90b19tZW5lbGF1cyh0LCBNRU5FTEFVU19SVENfU0VDKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuIHN0YXR1czsKLQlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcoTUVORUxBVVNfUlRDX1dLREFZLCBCSU4yQkNEKHQtPnRtX3dkYXkpKTsKKwlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcoTUVORUxBVVNfUlRDX1dLREFZLCBiaW4yYmNkKHQtPnRtX3dkYXkpKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlkZXZfZXJyKCZ0aGVfbWVuZWxhdXMtPmNsaWVudC0+ZGV2LCAicnRjIHdyaXRlIHJlZyAlMDJ4ICIKIAkJCQkiZXJyICVkXG4iLCBNRU5FTEFVU19SVENfV0tEQVksIHN0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy90cHM2NTAxMC5jIGIvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYwppbmRleCBjZjAyZThmLi5hY2Y4YjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy90cHM2NTAxMC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL3RwczY1MDEwLmMKQEAgLTQ1NiwxNCArNDU2LDE3IEBACiAKIC8qIG9mZnNldHMgMC4uMyA9PSBHUElPMS4uR1BJTzQKICAqIG9mZnNldHMgNC4uNSA9PSBMRUQxL25QRywgTEVEMiAod2Ugc2V0IG9uZSBvZiB0aGUgbm9uLUJMSU5LIG1vZGVzKQorICogb2Zmc2V0IDYgPT0gdmlicmF0b3IgbW90b3IgZHJpdmVyCiAgKi8KIHN0YXRpYyB2b2lkCiB0cHM2NTAxMF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKIAlpZiAob2Zmc2V0IDwgNCkKIAkJdHBzNjUwMTBfc2V0X2dwaW9fb3V0X3ZhbHVlKG9mZnNldCArIDEsIHZhbHVlKTsKLQllbHNlCisJZWxzZSBpZiAob2Zmc2V0IDwgNikKIAkJdHBzNjUwMTBfc2V0X2xlZChvZmZzZXQgLSAzLCB2YWx1ZSA/IE9OIDogT0ZGKTsKKwllbHNlCisJCXRwczY1MDEwX3NldF92aWIodmFsdWUpOwogfQogCiBzdGF0aWMgaW50CkBAIC00NzcsOCArNDgwLDEwIEBACiAJCWlmICghKHRwcy0+b3V0bWFzayAmICgxIDw8IG9mZnNldCkpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXRwczY1MDEwX3NldF9ncGlvX291dF92YWx1ZShvZmZzZXQgKyAxLCB2YWx1ZSk7Ci0JfSBlbHNlCisJfSBlbHNlIGlmIChvZmZzZXQgPCA2KQogCQl0cHM2NTAxMF9zZXRfbGVkKG9mZnNldCAtIDMsIHZhbHVlID8gT04gOiBPRkYpOworCWVsc2UKKwkJdHBzNjUwMTBfc2V0X3ZpYih2YWx1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY0Niw3ICs2NTEsNyBAQAogCQl0cHMtPmNoaXAuZ2V0ID0gdHBzNjUwMTBfZ3Bpb19nZXQ7CiAKIAkJdHBzLT5jaGlwLmJhc2UgPSBib2FyZC0+YmFzZTsKLQkJdHBzLT5jaGlwLm5ncGlvID0gNjsKKwkJdHBzLT5jaGlwLm5ncGlvID0gNzsKIAkJdHBzLT5jaGlwLmNhbl9zbGVlcCA9IDE7CiAKIAkJc3RhdHVzID0gZ3Bpb2NoaXBfYWRkKCZ0cHMtPmNoaXApOwpAQCAtNjc1LDYgKzY4MCw3IEBACiAJeyAidHBzNjUwMTEiLCBUUFM2NTAxMSB9LAogCXsgInRwczY1MDEyIiwgVFBTNjUwMTIgfSwKIAl7ICJ0cHM2NTAxMyIsIFRQUzY1MDEzIH0sCisJeyAidHBzNjUwMTQiLCBUUFM2NTAxMSB9LAkvKiB0cHM2NTAxMSBjaGFyZ2luZyBhdCA2LjVWIG1heCAqLwogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0cHM2NTAxMF9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwppbmRleCBiMzQ2YTY4Li40MmU4NTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKQEAgLTQzNyw2ICs0MzcsMTAgQEAKIHsKIAlpbnQgcmVzID0gMCwgZHVtbXk7CiAKKwkvKiBDYW4ndCByZWdpc3RlciB1bnRpbCBhZnRlciBkcml2ZXIgbW9kZWwgaW5pdCAqLworCWlmICh1bmxpa2VseShXQVJOX09OKCFpMmNfYnVzX3R5cGUucCkpKQorCQlyZXR1cm4gLUVBR0FJTjsKKwogCW11dGV4X2luaXQoJmFkYXAtPmJ1c19sb2NrKTsKIAltdXRleF9pbml0KCZhZGFwLT5jbGlzdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYWRhcC0+Y2xpZW50cyk7CkBAIC02OTYsNiArNzAwLDEwIEBACiB7CiAJaW50IHJlczsKIAorCS8qIENhbid0IHJlZ2lzdGVyIHVudGlsIGFmdGVyIGRyaXZlciBtb2RlbCBpbml0ICovCisJaWYgKHVubGlrZWx5KFdBUk5fT04oIWkyY19idXNfdHlwZS5wKSkpCisJCXJldHVybiAtRUFHQUlOOworCiAJLyogbmV3IHN0eWxlIGRyaXZlciBtZXRob2RzIGNhbid0IG1peCB3aXRoIGxlZ2FjeSBvbmVzICovCiAJaWYgKGlzX25ld3N0eWxlX2RyaXZlcihkcml2ZXIpKSB7CiAJCWlmIChkcml2ZXItPmF0dGFjaF9hZGFwdGVyIHx8IGRyaXZlci0+ZGV0YWNoX2FkYXB0ZXIKQEAgLTk3OCw3ICs5ODYsMTAgQEAKIAlidXNfdW5yZWdpc3RlcigmaTJjX2J1c190eXBlKTsKIH0KIAotc3Vic3lzX2luaXRjYWxsKGkyY19pbml0KTsKKy8qIFdlIG11c3QgaW5pdGlhbGl6ZSBlYXJseSwgYmVjYXVzZSBzb21lIHN1YnN5c3RlbXMgcmVnaXN0ZXIgaTJjIGRyaXZlcnMKKyAqIGluIHN1YnN5c19pbml0Y2FsbCgpIGNvZGUsIGJ1dCBhcmUgbGlua2VkIChhbmQgaW5pdGlhbGl6ZWQpIGJlZm9yZSBpMmMuCisgKi8KK3Bvc3Rjb3JlX2luaXRjYWxsKGkyY19pbml0KTsKIG1vZHVsZV9leGl0KGkyY19leGl0KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTY3Nyw2ICsxNjg4LDI4IEBACiBFWFBPUlRfU1lNQk9MKGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEpOwogCiAvKioKKyAqIGkyY19zbWJ1c19wcm9jZXNzX2NhbGwgLSBTTUJ1cyAicHJvY2VzcyBjYWxsIiBwcm90b2NvbAorICogQGNsaWVudDogSGFuZGxlIHRvIHNsYXZlIGRldmljZQorICogQGNvbW1hbmQ6IEJ5dGUgaW50ZXJwcmV0ZWQgYnkgc2xhdmUKKyAqIEB2YWx1ZTogMTYtYml0ICJ3b3JkIiBiZWluZyB3cml0dGVuCisgKgorICogVGhpcyBleGVjdXRlcyB0aGUgU01CdXMgInByb2Nlc3MgY2FsbCIgcHJvdG9jb2wsIHJldHVybmluZyBuZWdhdGl2ZSBlcnJubworICogZWxzZSBhIDE2LWJpdCB1bnNpZ25lZCAid29yZCIgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLgorICovCitzMzIgaTJjX3NtYnVzX3Byb2Nlc3NfY2FsbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLCB1MTYgdmFsdWUpCit7CisJdW5pb24gaTJjX3NtYnVzX2RhdGEgZGF0YTsKKwlpbnQgc3RhdHVzOworCWRhdGEud29yZCA9IHZhbHVlOworCisJc3RhdHVzID0gaTJjX3NtYnVzX3hmZXIoY2xpZW50LT5hZGFwdGVyLCBjbGllbnQtPmFkZHIsIGNsaWVudC0+ZmxhZ3MsCisJCQkJSTJDX1NNQlVTX1dSSVRFLCBjb21tYW5kLAorCQkJCUkyQ19TTUJVU19QUk9DX0NBTEwsICZkYXRhKTsKKwlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogZGF0YS53b3JkOworfQorRVhQT1JUX1NZTUJPTChpMmNfc21idXNfcHJvY2Vzc19jYWxsKTsKKworLyoqCiAgKiBpMmNfc21idXNfcmVhZF9ibG9ja19kYXRhIC0gU01CdXMgImJsb2NrIHJlYWQiIHByb3RvY29sCiAgKiBAY2xpZW50OiBIYW5kbGUgdG8gc2xhdmUgZGV2aWNlCiAgKiBAY29tbWFuZDogQnl0ZSBpbnRlcnByZXRlZCBieSBzbGF2ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWRldi5jIGIvZHJpdmVycy9pMmMvaTJjLWRldi5jCmluZGV4IDMwN2Q5NzYuLmMxNzE5ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2kyYy1kZXYuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtZGV2LmMKQEAgLTUyMSw5ICs1MjEsOSBAQAogCQlyZXR1cm4gUFRSX0VSUihpMmNfZGV2KTsKIAogCS8qIHJlZ2lzdGVyIHRoaXMgaTJjIGRldmljZSB3aXRoIHRoZSBkcml2ZXIgY29yZSAqLwotCWkyY19kZXYtPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShpMmNfZGV2X2NsYXNzLCAmYWRhcC0+ZGV2LAotCQkJCQkgICAgIE1LREVWKEkyQ19NQUpPUiwgYWRhcC0+bnIpLAotCQkJCQkgICAgIE5VTEwsICJpMmMtJWQiLCBhZGFwLT5ucik7CisJaTJjX2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShpMmNfZGV2X2NsYXNzLCAmYWRhcC0+ZGV2LAorCQkJCSAgICAgTUtERVYoSTJDX01BSk9SLCBhZGFwLT5uciksIE5VTEwsCisJCQkJICAgICAiaTJjLSVkIiwgYWRhcC0+bnIpOwogCWlmIChJU19FUlIoaTJjX2Rldi0+ZGV2KSkgewogCQlyZXMgPSBQVFJfRVJSKGkyY19kZXYtPmRldik7CiAJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9LY29uZmlnIGIvZHJpdmVycy9pZGUvS2NvbmZpZwppbmRleCBiNTBiNWRhLi5hODIwY2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWRlL0tjb25maWcKQEAgLTQsNyArNCw3IEBACiAKICMgU2VsZWN0IEhBVkVfSURFIGlmIElERSBpcyBzdXBwb3J0ZWQKIGNvbmZpZyBIQVZFX0lERQotCWRlZl9ib29sIG4KKwlib29sCiAKIG1lbnVjb25maWcgSURFCiAJdHJpc3RhdGUgIkFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQiCkBAIC01NCwzOCArNTQsNiBAQAogCiBpZiBJREUKIAotY29uZmlnIEJMS19ERVZfSURFCi0JdHJpc3RhdGUgIkVuaGFuY2VkIElERS9NRk0vUkxMIGRpc2svY2Ryb20vdGFwZS9mbG9wcHkgc3VwcG9ydCIKLQktLS1oZWxwLS0tCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgdXNlIHRoZSBmdWxsLWZlYXR1cmVkIElERSBkcml2ZXIgdG8KLQkgIGNvbnRyb2wgdXAgdG8gdGVuIEFUQS9JREUgaW50ZXJmYWNlcywgZWFjaCBiZWluZyBhYmxlIHRvIHNlcnZlIGEKLQkgICJtYXN0ZXIiIGFuZCBhICJzbGF2ZSIgZGV2aWNlLCBmb3IgYSB0b3RhbCBvZiB1cCB0byB0d2VudHkgQVRBL0lERQotCSAgZGlzay9jZHJvbS90YXBlL2Zsb3BweSBkcml2ZXMuCi0KLQkgIFVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCBsYXJnZSAoPjU0MCBNQikgSURFIGRpc2tzLCBtdWx0aXBsZQotCSAgaW50ZXJmYWNlcywgd2hhdCB0byBkbyBpZiBBVEEvSURFIGRldmljZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5Ci0JICBkZXRlY3RlZCwgc291bmQgY2FyZCBBVEEvSURFIHBvcnRzLCBtb2R1bGUgc3VwcG9ydCwgYW5kIG90aGVyCi0JICB0b3BpY3MsIGlzIGNvbnRhaW5lZCBpbiA8ZmlsZTpEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0Pi4gRm9yIGRldGFpbGVkCi0JICBpbmZvcm1hdGlvbiBhYm91dCBoYXJkIGRyaXZlcywgY29uc3VsdCB0aGUgRGlzay1IT1dUTyBhbmQgdGhlCi0JICBNdWx0aS1EaXNrLUhPV1RPLCBhdmFpbGFibGUgZnJvbQotCSAgPGh0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvPi4KLQotCSAgVG8gZmluZS10dW5lIEFUQS9JREUgZHJpdmUvaW50ZXJmYWNlIHBhcmFtZXRlcnMgZm9yIGltcHJvdmVkCi0JICBwZXJmb3JtYW5jZSwgbG9vayBmb3IgdGhlIGhkcGFybSBwYWNrYWdlIGF0Ci0JICA8ZnRwOi8vaWJpYmxpby5vcmcvcHViL0xpbnV4L3N5c3RlbS9oYXJkd2FyZS8+LgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlIGFuZCByZWFkCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0Pi4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpZGUtbW9kLgotCSAgRG8gbm90IGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUgaWYgeW91ciByb290IGZpbGUgc3lzdGVtICh0aGUKLQkgIG9uZSBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkgLykgaXMgbG9jYXRlZCBvbiBhbiBJREUgZGV2aWNlLgotCi0JICBJZiB5b3UgaGF2ZSBvbmUgb3IgbW9yZSBJREUgZHJpdmVzLCBzYXkgWSBvciBNIGhlcmUuIElmIHlvdXIgc3lzdGVtCi0JICBoYXMgbm8gSURFIGRyaXZlcywgb3IgaWYgbWVtb3J5IHJlcXVpcmVtZW50cyBhcmUgcmVhbGx5IHRpZ2h0LCB5b3UKLQkgIGNvdWxkIHNheSBOIGhlcmUsIGFuZCBzZWxlY3QgdGhlICJPbGQgaGFyZCBkaXNrIGRyaXZlciIgYmVsb3cKLQkgIGluc3RlYWQgdG8gc2F2ZSBhYm91dCAxMyBLQiBvZiBtZW1vcnkgaW4gdGhlIGtlcm5lbC4KLQotaWYgQkxLX0RFVl9JREUKLQogY29tbWVudCAiUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcyIKIAogY29uZmlnIElERV9USU1JTkdTCkBAIC0xMTYsMjEgKzg0LDQwIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBCTEtfREVWX0lERURJU0sKLQl0cmlzdGF0ZSAiSW5jbHVkZSBJREUvQVRBLTIgRElTSyBzdXBwb3J0IgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgd2lsbCBpbmNsdWRlIGVuaGFuY2VkIHN1cHBvcnQgZm9yIE1GTS9STEwvSURFIGhhcmQgZGlza3MuICBJZgotCSAgeW91IGhhdmUgYSBNRk0vUkxML0lERSBkaXNrLCBhbmQgdGhlcmUgaXMgbm8gc3BlY2lhbCByZWFzb24gdG8gdXNlCi0JICB0aGUgb2xkIGhhcmQgZGlzayBkcml2ZXIgaW5zdGVhZCwgc2F5IFkuICBJZiB5b3UgaGF2ZSBhbiBTQ1NJLW9ubHkKLQkgIHN5c3RlbSwgeW91IGNhbiBzYXkgTiBoZXJlLgorY29uZmlnIElERV9HRAorCXRyaXN0YXRlICJnZW5lcmljIEFUQS9BVEFQSSBkaXNrIHN1cHBvcnQiCisJZGVmYXVsdCB5CisJaGVscAorCSAgU3VwcG9ydCBmb3IgQVRBL0FUQVBJIGRpc2tzIChpbmNsdWRpbmcgQVRBUEkgZmxvcHB5IGRyaXZlcykuCiAKLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlkZS1kaXNrLgotCSAgRG8gbm90IGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUgaWYgeW91ciByb290IGZpbGUgc3lzdGVtCi0JICAodGhlIG9uZSBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkgLykgaXMgbG9jYXRlZCBvbiB0aGUgSURFIGRpc2suCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLgorCSAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpZGUtZ2RfbW9kLgogCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCitjb25maWcgSURFX0dEX0FUQQorCWJvb2wgIkFUQSBkaXNrIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJREVfR0QKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIHdpbGwgaW5jbHVkZSBzdXBwb3J0IGZvciBBVEEgaGFyZCBkaXNrcy4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIElERV9HRF9BVEFQSQorCWJvb2wgIkFUQVBJIGZsb3BweSBzdXBwb3J0IgorCWRlcGVuZHMgb24gSURFX0dECisJc2VsZWN0IElERV9BVEFQSQorCWhlbHAKKwkgIFRoaXMgd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIEFUQVBJIGZsb3BweSBkcml2ZXMKKwkgIChpLmUuIElvbWVnYSBaSVAgb3IgTUtFIExTLTEyMCkuCisKKwkgIEZvciBpbmZvcm1hdGlvbiBhYm91dCBqdW1wZXIgc2V0dGluZ3MgYW5kIHRoZSBxdWVzdGlvbgorCSAgb2Ygd2hlbiBhIFpJUCBkcml2ZSB1c2VzIGEgcGFydGl0aW9uIHRhYmxlLCBzZWUKKwkgIDxodHRwOi8vd3d3Lndpbi50dWUubmwvfmFlYi9saW51eC96aXAvemlwLTEuaHRtbD4uCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBCTEtfREVWX0lERUNTCiAJdHJpc3RhdGUgIlBDTUNJQSBJREUgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDTUNJQQpAQCAtMTk1LDI5ICsxODIsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaWRlLXRhcGUuCiAKLWNvbmZpZyBCTEtfREVWX0lERUZMT1BQWQotCXRyaXN0YXRlICJJbmNsdWRlIElERS9BVEFQSSBGTE9QUFkgc3VwcG9ydCIKLQlzZWxlY3QgSURFX0FUQVBJCi0JLS0taGVscC0tLQotCSAgSWYgeW91IGhhdmUgYW4gSURFIGZsb3BweSBkcml2ZSB3aGljaCB1c2VzIHRoZSBBVEFQSSBwcm90b2NvbCwKLQkgIGFuc3dlciBZLiAgQVRBUEkgaXMgYSBuZXdlciBwcm90b2NvbCB1c2VkIGJ5IElERSBDRC1ST00vdGFwZS9mbG9wcHkKLQkgIGRyaXZlcywgc2ltaWxhciB0byB0aGUgU0NTSSBwcm90b2NvbC4KLQotCSAgVGhlIExTLTEyMCBhbmQgdGhlIElERS9BVEFQSSBJb21lZ2EgWklQIGRyaXZlIGFyZSBhbHNvIHN1cHBvcnRlZCBieQotCSAgdGhpcyBkcml2ZXIuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBqdW1wZXIgc2V0dGluZ3MgYW5kIHRoZSBxdWVzdGlvbgotCSAgb2Ygd2hlbiBhIFpJUCBkcml2ZSB1c2VzIGEgcGFydGl0aW9uIHRhYmxlLCBzZWUKLQkgIDxodHRwOi8vd3d3Lndpbi50dWUubmwvfmFlYi9saW51eC96aXAvemlwLTEuaHRtbD4uCi0JICAoQVRBUEkgUEQtQ0QvQ0RSIGRyaXZlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcjsgc3VwcG9ydAotCSAgZm9yIFBELUNEL0NEUiBkcml2ZXMgaXMgYXZhaWxhYmxlIGlmIHlvdSBhbnN3ZXIgWSB0bwotCSAgIlNDU0kgZW11bGF0aW9uIHN1cHBvcnQiLCBiZWxvdykuCi0KLQkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgRkxPUFBZIGRyaXZlIHdpbGwgYmUgaWRlbnRpZmllZCBhbG9uZyB3aXRoCi0JICBvdGhlciBJREUgZGV2aWNlcywgYXMgImhkYiIgb3IgImhkYyIsIG9yIHNvbWV0aGluZyBzaW1pbGFyIChjaGVjawotCSAgdGhlIGJvb3QgbWVzc2FnZXMgd2l0aCBkbWVzZykuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlkZS1mbG9wcHkuCi0KIGNvbmZpZyBCTEtfREVWX0lERVNDU0kKIAl0cmlzdGF0ZSAiU0NTSSBlbXVsYXRpb24gc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBTQ1NJCkBAIC0zNDgsNyArMzEyLDcgQEAKIAogY29uZmlnIElERVBDSV9QQ0lCVVNfT1JERVIKIAlib29sICJQcm9iZSBJREUgUENJIGRldmljZXMgaW4gdGhlIFBDSSBidXMgb3JkZXIgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gQkxLX0RFVl9JREU9eSAmJiBCTEtfREVWX0lERVBDSQorCWRlcGVuZHMgb24gSURFPXkgJiYgQkxLX0RFVl9JREVQQ0kKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBQcm9iZSBJREUgUENJIGRldmljZXMgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyIG9uIHRoZQpAQCAtMzY0LDcgKzMyOCw3IEBACiAjIFRPRE86IHNwbGl0IGl0IG9uIHBlciBob3N0IGRyaXZlciBjb25maWcgb3B0aW9ucyAob3IgbW9kdWxlIHBhcmFtZXRlcnMpCiBjb25maWcgQkxLX0RFVl9PRkZCT0FSRAogCWJvb2wgIkJvb3Qgb2ZmLWJvYXJkIGNoaXBzZXRzIGZpcnN0IHN1cHBvcnQgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gQkxLX0RFVl9JREVQQ0kgJiYgKEJMS19ERVZfQUVDNjJYWCB8fCBCTEtfREVWX0dFTkVSSUMgfHwgQkxLX0RFVl9IUFQzNFggfHwgQkxLX0RFVl9IUFQzNjYgfHwgQkxLX0RFVl9QREMyMDJYWF9ORVcgfHwgQkxLX0RFVl9QREMyMDJYWF9PTEQgfHwgQkxLX0RFVl9UQzg2QzAwMSkKKwlkZXBlbmRzIG9uIEJMS19ERVZfSURFUENJICYmIChCTEtfREVWX0FFQzYyWFggfHwgQkxLX0RFVl9HRU5FUklDIHx8IEJMS19ERVZfSFBUMzY2IHx8IEJMS19ERVZfUERDMjAyWFhfTkVXIHx8IEJMS19ERVZfUERDMjAyWFhfT0xEIHx8IEJMS19ERVZfVEM4NkMwMDEpCiAJaGVscAogCSAgTm9ybWFsbHksIElERSBjb250cm9sbGVycyBidWlsdCBpbnRvIHRoZSBtb3RoZXJib2FyZCAob24tYm9hcmQKIAkgIGNvbnRyb2xsZXJzKSBhcmUgYXNzaWduZWQgdG8gaWRlMCBhbmQgaWRlMSB3aGlsZSB0aG9zZSBvbiBhZGQtaW4gUENJCkBAIC01MTQsMjggKzQ3OCw2IEBACiAKIAkgIEl0IGlzIHNhZmUgdG8gc2F5IFkgdG8gdGhpcyBxdWVzdGlvbi4KIAotY29uZmlnIEJMS19ERVZfSFBUMzRYCi0JdHJpc3RhdGUgIkhQVDM0WCBjaGlwc2V0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBCUk9LRU4KLQlzZWxlY3QgQkxLX0RFVl9JREVETUFfUENJCi0JaGVscAotCSAgVGhpcyBkcml2ZXIgYWRkcyB1cCB0byA0IG1vcmUgRUlERSBkZXZpY2VzIHNoYXJpbmcgYSBzaW5nbGUKLQkgIGludGVycnVwdC4gVGhlIEhQVDM0MyBjaGlwc2V0IGluIGl0cyBjdXJyZW50IGZvcm0gaXMgYSBub24tYm9vdGFibGUKLQkgIGNvbnRyb2xsZXI7IHRoZSBIUFQzNDUvSFBUMzYzIGNoaXBzZXQgaXMgYSBib290YWJsZSAobmVlZHMgQklPUyBGSVgpCi0JICBQQ0kgVURNQSBjb250cm9sbGVycy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgZHluYW1pYyB0dW5pbmcgb2YgdGhlCi0JICBjaGlwc2V0IGR1cmluZyB0aGUgaWRlLXByb2JlIGF0IGJvb3QgdGltZS4gSXQgaXMgcmVwb3J0ZWQgdG8gc3VwcG9ydAotCSAgRFZEIElJIGRyaXZlcywgYnkgdGhlIG1hbnVmYWN0dXJlci4KLQotY29uZmlnIEhQVDM0WF9BVVRPRE1BCi0JYm9vbCAiSFBUMzRYIEFVVE9ETUEgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEJMS19ERVZfSFBUMzRYICYmIEVYUEVSSU1FTlRBTAotCWhlbHAKLQkgIFRoaXMgaXMgYSBkYW5nZXJvdXMgdGhpbmcgdG8gYXR0ZW1wdCBjdXJyZW50bHkhIFBsZWFzZSByZWFkIHRoZQotCSAgY29tbWVudHMgYXQgdGhlIHRvcCBvZiA8ZmlsZTpkcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmM+LiAgSWYgeW91IHNheSBZCi0JICBoZXJlLCB0aGVuIHNheSBZIHRvICJVc2UgRE1BIGJ5IGRlZmF1bHQgd2hlbiBhdmFpbGFibGUiIGFzIHdlbGwuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBCTEtfREVWX0hQVDM2NgogCXRyaXN0YXRlICJIUFQzNlgvMzdYIGNoaXBzZXQgc3VwcG9ydCIKIAlzZWxlY3QgQkxLX0RFVl9JREVETUFfUENJCkBAIC03MjksNyArNjcxLDcgQEAKIAogY29uZmlnIEJMS19ERVZfSURFX1BNQUMKIAl0cmlzdGF0ZSAiUG93ZXJNYWMgb24tYm9hcmQgSURFIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQUENfUE1BQyAmJiBJREU9eSAmJiBCTEtfREVWX0lERT15CisJZGVwZW5kcyBvbiBQUENfUE1BQyAmJiBJREU9eQogCXNlbGVjdCBJREVfVElNSU5HUwogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBvbi1ib2FyZCBJREUgY29udHJvbGxlciBvbgpAQCAtOTYzLDYgKzkwNSw0IEBACiAJZGVmX2Jvb2wgQkxLX0RFVl9JREVETUFfU0ZGIHx8IEJMS19ERVZfSURFRE1BX1BNQUMgfHwgXAogCQkgQkxLX0RFVl9JREVETUFfSUNTIHx8IEJMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQQogCi1lbmRpZgotCiBlbmRpZiAjIElERQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvTWFrZWZpbGUgYi9kcml2ZXJzL2lkZS9NYWtlZmlsZQppbmRleCAzMDhiOGExLi4wOTNkMzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lkZS9NYWtlZmlsZQpAQCAtNSwyNCArNSwyNSBAQAogRVhUUkFfQ0ZMQUdTCQkJCSs9IC1JZHJpdmVycy9pZGUKIAogaWRlLWNvcmUteSArPSBpZGUubyBpZGUtaW9jdGxzLm8gaWRlLWlvLm8gaWRlLWlvcHMubyBpZGUtbGliLm8gaWRlLXByb2JlLm8gXAotCSAgICAgIGlkZS10YXNrZmlsZS5vIGlkZS1waW8tYmxhY2tsaXN0Lm8KKwkgICAgICBpZGUtdGFza2ZpbGUubyBpZGUtcGFyay5vIGlkZS1waW8tYmxhY2tsaXN0Lm8KIAogIyBjb3JlIElERSBjb2RlCiBpZGUtY29yZS0kKENPTkZJR19JREVfVElNSU5HUykJCSs9IGlkZS10aW1pbmdzLm8KIGlkZS1jb3JlLSQoQ09ORklHX0lERV9BVEFQSSkJCSs9IGlkZS1hdGFwaS5vCiBpZGUtY29yZS0kKENPTkZJR19CTEtfREVWX0lERVBDSSkJKz0gc2V0dXAtcGNpLm8KIGlkZS1jb3JlLSQoQ09ORklHX0JMS19ERVZfSURFRE1BKQkrPSBpZGUtZG1hLm8KK2lkZS1jb3JlLSQoQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRikJKz0gaWRlLWRtYS1zZmYubwogaWRlLWNvcmUtJChDT05GSUdfSURFX1BST0NfRlMpCQkrPSBpZGUtcHJvYy5vCiBpZGUtY29yZS0kKENPTkZJR19CTEtfREVWX0lERUFDUEkpCSs9IGlkZS1hY3BpLm8KIAotb2JqLSQoQ09ORklHX0JMS19ERVZfSURFKQkJKz0gaWRlLWNvcmUubworb2JqLSQoQ09ORklHX0lERSkJCQkrPSBpZGUtY29yZS5vCiAKIGlmZXEgKCQoQ09ORklHX0lERV9BUk0pLCB5KQogCWlkZS1hcm0tY29yZS15ICs9IGFybS9pZGVfYXJtLm8KIAlvYmoteSArPSBpZGUtYXJtLWNvcmUubwogZW5kaWYKIAotb2JqLSQoQ09ORklHX0JMS19ERVZfSURFKQkJKz0gbGVnYWN5LyBwY2kvCitvYmotJChDT05GSUdfSURFKQkJCSs9IGxlZ2FjeS8gcGNpLwogCiBvYmotJChDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUikJKz0gaWRlLXNjYW4tcGNpLm8KIApAQCAtMzEsMTcgKzMyLDMwIEBACiAJb2JqLXkgKz0gY21kNjQwLWNvcmUubwogZW5kaWYKIAotb2JqLSQoQ09ORklHX0JMS19ERVZfSURFKQkJKz0gcHBjLworb2JqLSQoQ09ORklHX0lERSkJCQkrPSBwcGMvCiBvYmotJChDT05GSUdfSURFX0g4MzAwKQkJCSs9IGg4MzAwLwogb2JqLSQoQ09ORklHX0lERV9HRU5FUklDKQkJKz0gaWRlLWdlbmVyaWMubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSURFUE5QKQkJKz0gaWRlLXBucC5vCiAKK2lkZS1nZF9tb2QteSArPSBpZGUtZ2QubwogaWRlLWNkX21vZC15ICs9IGlkZS1jZC5vIGlkZS1jZF9pb2N0bC5vIGlkZS1jZF92ZXJib3NlLm8KLWlkZS1mbG9wcHlfbW9kLXkgKz0gaWRlLWZsb3BweS5vIGlkZS1mbG9wcHlfaW9jdGwubwogCi1vYmotJChDT05GSUdfQkxLX0RFVl9JREVESVNLKQkJKz0gaWRlLWRpc2subworaWZlcSAoJChDT05GSUdfSURFX0dEX0FUQSksIHkpCisJaWRlLWdkX21vZC15ICs9IGlkZS1kaXNrLm8gaWRlLWRpc2tfaW9jdGwubworaWZlcSAoJChDT05GSUdfSURFX1BST0NfRlMpLCB5KQorCWlkZS1nZF9tb2QteSArPSBpZGUtZGlza19wcm9jLm8KK2VuZGlmCitlbmRpZgorCitpZmVxICgkKENPTkZJR19JREVfR0RfQVRBUEkpLCB5KQorCWlkZS1nZF9tb2QteSArPSBpZGUtZmxvcHB5Lm8gaWRlLWZsb3BweV9pb2N0bC5vCitpZmVxICgkKENPTkZJR19JREVfUFJPQ19GUyksIHkpCisJaWRlLWdkX21vZC15ICs9IGlkZS1mbG9wcHlfcHJvYy5vCitlbmRpZgorZW5kaWYKKworb2JqLSQoQ09ORklHX0lERV9HRCkJCQkrPSBpZGUtZ2RfbW9kLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0lERUNEKQkJKz0gaWRlLWNkX21vZC5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkpCQkrPSBpZGUtZmxvcHB5X21vZC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9JREVUQVBFKQkJKz0gaWRlLXRhcGUubwogCiBpZmVxICgkKENPTkZJR19CTEtfREVWX0lERUNTKSwgeSkKQEAgLTU0LDQgKzY4LDQgQEAKIAlvYmoteSArPSBpZGUtcGxhdGZvcm0tY29yZS5vCiBlbmRpZgogCi1vYmotJChDT05GSUdfQkxLX0RFVl9JREUpCQkrPSBhcm0vIG1pcHMvCitvYmotJChDT05GSUdfSURFKQkJCSs9IGFybS8gbWlwcy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FybS9pY3NpZGUuYyBiL2RyaXZlcnMvaWRlL2FybS9pY3NpZGUuYwppbmRleCA3MGY1YjE2Li43NmJkYzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hcm0vaWNzaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXJtL2ljc2lkZS5jCkBAIC0zNzIsMjUgKzM3Miw2IEBACiAJCQlJQ1NfQVJDSU5fVjZfSU5UUlNUQVRfMSkpICYgMTsKIH0KIAotc3RhdGljIHZvaWQgaWNzaWRlX2RtYV90aW1lb3V0KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0KLQlwcmludGsoS0VSTl9FUlIgIiVzOiBETUEgdGltZW91dCBvY2N1cnJlZDogIiwgZHJpdmUtPm5hbWUpOwotCi0JaWYgKGljc2lkZV9kbWFfdGVzdF9pcnEoZHJpdmUpKQotCQlyZXR1cm47Ci0KLQlpZGVfZHVtcF9zdGF0dXMoZHJpdmUsICJETUEgdGltZW91dCIsIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikpOwotCi0JaWNzaWRlX2RtYV9lbmQoZHJpdmUpOwotfQotCi1zdGF0aWMgdm9pZCBpY3NpZGVfZG1hX2xvc3RfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBJUlEgbG9zdFxuIiwgZHJpdmUtPm5hbWUpOwotfQotCiBzdGF0aWMgaW50IGljc2lkZV9kbWFfaW5pdChpZGVfaHdpZl90ICpod2lmLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKIHsKIAlod2lmLT5kbWF0YWJsZV9jcHUJPSBOVUxMOwpAQCAtNDA2LDggKzM4Nyw4IEBACiAJLmRtYV9zdGFydAkJPSBpY3NpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGljc2lkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWNzaWRlX2RtYV90ZXN0X2lycSwKLQkuZG1hX3RpbWVvdXQJCT0gaWNzaWRlX2RtYV90aW1lb3V0LAotCS5kbWFfbG9zdF9pcnEJCT0gaWNzaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAorCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKIH07CiAjZWxzZQogI2RlZmluZSBpY3NpZGVfdjZfZG1hX29wcyBOVUxMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYyBiL2RyaXZlcnMvaWRlL2g4MzAwL2lkZS1oODMwMC5jCmluZGV4IGJkZTdhNTguLmUyY2RkMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2g4MzAwL2lkZS1oODMwMC5jCisrKyBiL2RyaXZlcnMvaWRlL2g4MzAwL2lkZS1oODMwMC5jCkBAIC04MCw3ICs4MCw3IEBACiAJCW91dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCiAJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCi0JCW91dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QuYWxsLAorCQlvdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAogCQkgICAgIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMgYi9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCmluZGV4IDI0MjdjMzguLjI0NGE4YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJREVCUFJJTlQoIkVOVEVSOiAlcyBhdCAlcywgcG9ydCM6ICVkLCBoYXJkX3BvcnQjOiAlZFxuIiwKIAkJIGh3aWYtPm5hbWUsIGRldi0+YnVzX2lkLCBwb3J0LCBod2lmLT5jaGFubmVsKTsKIAotCWlmICghZHJpdmUtPnByZXNlbnQpIHsKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkgewogCQlERUJQUklOVCgiJXMgZHJpdmUgJWQ6JWQgbm90IHByZXNlbnRcbiIsCiAJCQkgaHdpZi0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgcG9ydCk7CiAJCWdvdG8gb3V0OwpAQCAtNDIwLDggKzQyMCw5IEBACiAKIAlERUJQUklOVCgiRU5URVI6ICVzLCBoYXJkX3BvcnQjOiAlZFxuIiwgZHJpdmUtPm5hbWUsIGRyaXZlLT5kbik7CiAKLQlpZiAoIWRyaXZlLT5wcmVzZW50KQorCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQlnb3RvIG91dDsKKwogCWlmICghZ3RmX2NvdW50KQkJLyogc2hvdWxkbid0IGJlIGhlcmUgKi8KIAkJZ290byBvdXQ7CiAKQEAgLTY2MCw3ICs2NjEsOCBAQAogCQlpZiAoIWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSkKIAkJCWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSA9IGlkZV9hY3BpX2RyaXZlX2dldF9oYW5kbGUoZHJpdmUpOwogCi0JCWlmIChkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUgJiYgZHJpdmUtPnByZXNlbnQpIHsKKwkJaWYgKGRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSAmJgorCQkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkpIHsKIAkJCWFjcGlfYnVzX3NldF9wb3dlcihkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUsCiAJCQkJb24/IEFDUElfU1RBVEVfRDA6IEFDUElfU1RBVEVfRDMpOwogCQl9CkBAIC03MjAsNyArNzIyLDcgQEAKIAogCQltZW1zZXQoZHJpdmUtPmFjcGlkYXRhLCAwLCBzaXplb2YoKmRyaXZlLT5hY3BpZGF0YSkpOwogCi0JCWlmICghZHJpdmUtPnByZXNlbnQpCisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQkJY29udGludWU7CiAKIAkJZXJyID0gdGFza2ZpbGVfbGliX2dldF9pZGVudGlmeShkcml2ZSwgZHJpdmUtPmFjcGlkYXRhLT5pZGJ1ZmYpOwpAQCAtNzQ1LDcgKzc0Nyw3IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWF9EUklWRVM7IGkrKykgewogCQlkcml2ZSA9ICZod2lmLT5kcml2ZXNbaV07CiAKLQkJaWYgKGRyaXZlLT5wcmVzZW50KQorCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKQogCQkJLyogRXhlY3V0ZSBBQ1BJIHN0YXJ0dXAgY29kZSAqLwogCQkJaWRlX2FjcGlfZXhlY190ZnMoZHJpdmUpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKaW5kZXggNjA4YzViYS4uNGU1OGI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKQEAgLTEyNCw4ICsxMjQsOCBAQAogICogdGhlIGN1cnJlbnQgcmVxdWVzdCwgc28gdGhhdCBpdCB3aWxsIGJlIHByb2Nlc3NlZCBpbW1lZGlhdGVseSwgb24gdGhlIG5leHQKICAqIHBhc3MgdGhyb3VnaCB0aGUgZHJpdmVyLgogICovCi12b2lkIGlkZV9xdWV1ZV9wY19oZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCi0JCSAgICAgICBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywgc3RydWN0IHJlcXVlc3QgKnJxKQorc3RhdGljIHZvaWQgaWRlX3F1ZXVlX3BjX2hlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKKwkJCSAgICAgIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJYmxrX3JxX2luaXQoTlVMTCwgcnEpOwogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7CkBAIC0xMzcsNyArMTM3LDYgQEAKIAkJcnEtPmNtZFsxM10gPSBSRVFfSURFVEFQRV9QQzE7CiAJaWRlX2RvX2RyaXZlX2NtZChkcml2ZSwgcnEpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3F1ZXVlX3BjX2hlYWQpOwogCiAvKgogICogQWRkIGEgc3BlY2lhbCBwYWNrZXQgY29tbWFuZCByZXF1ZXN0IHRvIHRoZSB0YWlsIG9mIHRoZSByZXF1ZXN0IHF1ZXVlLApAQCAtMTkyLDcgKzE5MSw3IEBACiB7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAotCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfTk9fRE9PUkxPQ0spCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RPT1JMT0NLSU5HKSA9PSAwKQogCQlyZXR1cm4gMDsKIAogCWlkZV9pbml0X3BjKCZwYyk7CkBAIC0yMDMsMjUgKzIwMiw4MCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9tZWRpYV9sb2NrKTsKIAotLyogVE9ETzogdW5pZnkgdGhlIGNvZGUgdGh1cyBtYWtpbmcgc29tZSBhcmd1bWVudHMgZ28gYXdheSAqLwotaWRlX3N0YXJ0c3RvcF90IGlkZV9wY19pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsCi0JaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5LAotCXZvaWQgKCp1cGRhdGVfYnVmZmVycykoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9hdGFwaV9wYyAqKSwKLQl2b2lkICgqcmV0cnlfcGMpKGlkZV9kcml2ZV90ICopLCB2b2lkICgqZHNjX2hhbmRsZSkoaWRlX2RyaXZlX3QgKiksCi0JaW50ICgqaW9fYnVmZmVycykoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9hdGFwaV9wYyAqLCB1bnNpZ25lZCwgaW50KSkKK3ZvaWQgaWRlX2NyZWF0ZV9yZXF1ZXN0X3NlbnNlX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogeworCWlkZV9pbml0X3BjKHBjKTsKKwlwYy0+Y1swXSA9IFJFUVVFU1RfU0VOU0U7CisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZmxvcHB5KSB7CisJCXBjLT5jWzRdID0gMjU1OworCQlwYy0+cmVxX3hmZXIgPSAxODsKKwl9IGVsc2UgeworCQlwYy0+Y1s0XSA9IDIwOworCQlwYy0+cmVxX3hmZXIgPSAyMDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfY3JlYXRlX3JlcXVlc3Rfc2Vuc2VfY21kKTsKKworLyoKKyAqIENhbGxlZCB3aGVuIGFuIGVycm9yIHdhcyBkZXRlY3RlZCBkdXJpbmcgdGhlIGxhc3QgcGFja2V0IGNvbW1hbmQuCisgKiBXZSBxdWV1ZSBhIHJlcXVlc3Qgc2Vuc2UgcGFja2V0IGNvbW1hbmQgaW4gdGhlIGhlYWQgb2YgdGhlIHJlcXVlc3QgbGlzdC4KKyAqLwordm9pZCBpZGVfcmV0cnlfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSAmZHJpdmUtPnJlcXVlc3Rfc2Vuc2VfcnE7CisJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSAmZHJpdmUtPnJlcXVlc3Rfc2Vuc2VfcGM7CisKKwkodm9pZClpZGVfcmVhZF9lcnJvcihkcml2ZSk7CisJaWRlX2NyZWF0ZV9yZXF1ZXN0X3NlbnNlX2NtZChkcml2ZSwgcGMpOworCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX3RhcGUpCisJCXNldF9iaXQoSURFX0FGTEFHX0lHTk9SRV9EU0MsICZkcml2ZS0+YXRhcGlfZmxhZ3MpOworCWlkZV9xdWV1ZV9wY19oZWFkKGRyaXZlLCBkaXNrLCBwYywgcnEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JldHJ5X3BjKTsKKworaW50IGlkZV9zY3NpX2V4cGlyeShpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBkcml2ZS0+cGM7CisKKwlkZWJ1Z19sb2coIiVzIGNhbGxlZCBmb3IgJWx1IGF0ICVsdVxuIiwgX19mdW5jX18sCisJCSAgcGMtPnNjc2lfY21kLT5zZXJpYWxfbnVtYmVyLCBqaWZmaWVzKTsKKworCXBjLT5mbGFncyB8PSBQQ19GTEFHX1RJTUVET1VUOworCisJcmV0dXJuIDA7IC8qIHdlIGRvIG5vdCB3YW50IHRoZSBJREUgc3Vic3lzdGVtIHRvIHJldHJ5ICovCit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfc2NzaV9leHBpcnkpOworCisvKgorICogVGhpcyBpcyB0aGUgdXN1YWwgaW50ZXJydXB0IGhhbmRsZXIgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZHVyaW5nIGEgcGFja2V0CisgKiBjb21tYW5kLiAgV2Ugd2lsbCB0cmFuc2ZlciBzb21lIG9mIHRoZSBkYXRhIChhcyByZXF1ZXN0ZWQgYnkgdGhlIGRyaXZlKQorICogYW5kIHdpbGwgcmUtcG9pbnQgaW50ZXJydXB0IGhhbmRsZXIgdG8gdXMuCisgKi8KK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX3BjX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gZHJpdmUtPnBjOwogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5od2dyb3VwLT5ycTsKIAljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwogCXhmZXJfZnVuY190ICp4ZmVyZnVuYzsKLQl1bnNpZ25lZCBpbnQgdGVtcDsKKwlpZGVfZXhwaXJ5X3QgKmV4cGlyeTsKKwl1bnNpZ25lZCBpbnQgdGltZW91dCwgdGVtcDsKIAl1MTYgYmNvdW50OwotCXU4IHN0YXQsIGlyZWFzb24sIHNjc2kgPSBkcml2ZS0+c2NzaTsKKwl1OCBzdGF0LCBpcmVhc29uLCBzY3NpID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19TQ1NJKSwgZHNjID0gMDsKIAogCWRlYnVnX2xvZygiRW50ZXIgJXMgLSBpbnRlcnJ1cHQgaGFuZGxlclxuIiwgX19mdW5jX18pOwogCisJaWYgKHNjc2kpIHsKKwkJdGltZW91dCA9IGlkZV9zY3NpX2dldF90aW1lb3V0KHBjKTsKKwkJZXhwaXJ5ID0gaWRlX3Njc2lfZXhwaXJ5OworCX0gZWxzZSB7CisJCXRpbWVvdXQgPSAoZHJpdmUtPm1lZGlhID09IGlkZV9mbG9wcHkpID8gV0FJVF9GTE9QUFlfQ01ECisJCQkJCQkgICAgICAgOiBXQUlUX1RBUEVfQ01EOworCQlleHBpcnkgPSBOVUxMOworCX0KKwogCWlmIChwYy0+ZmxhZ3MgJiBQQ19GTEFHX1RJTUVET1VUKSB7Ci0JCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSk7CisJCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSwgMCk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKQEAgLTIzOCw4ICsyOTIsOCBAQAogCQkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfRE1BX0VSUk9SOwogCQl9IGVsc2UgewogCQkJcGMtPnhmZXJyZWQgPSBwYy0+cmVxX3hmZXI7Ci0JCQlpZiAodXBkYXRlX2J1ZmZlcnMpCi0JCQkJdXBkYXRlX2J1ZmZlcnMoZHJpdmUsIHBjKTsKKwkJCWlmIChkcml2ZS0+cGNfdXBkYXRlX2J1ZmZlcnMpCisJCQkJZHJpdmUtPnBjX3VwZGF0ZV9idWZmZXJzKGRyaXZlLCBwYyk7CiAJCX0KIAkJZGVidWdfbG9nKCIlczogRE1BIGZpbmlzaGVkXG4iLCBkcml2ZS0+bmFtZSk7CiAJfQpAQCAtMjc2LDIxICszMzAsMTkgQEAKIAkJCWRlYnVnX2xvZygiW2NtZCAleF06IGNoZWNrIGNvbmRpdGlvblxuIiwgcnEtPmNtZFswXSk7CiAKIAkJCS8qIFJldHJ5IG9wZXJhdGlvbiAqLwotCQkJcmV0cnlfcGMoZHJpdmUpOworCQkJaWRlX3JldHJ5X3BjKGRyaXZlLCBycS0+cnFfZGlzayk7CiAKIAkJCS8qIHF1ZXVlZCwgYnV0IG5vdCBzdGFydGVkICovCiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KIGNtZF9maW5pc2hlZDoKIAkJcGMtPmVycm9yID0gMDsKLQkJaWYgKChwYy0+ZmxhZ3MgJiBQQ19GTEFHX1dBSVRfRk9SX0RTQykgJiYKLQkJICAgIChzdGF0ICYgQVRBX0RTQykgPT0gMCkgewotCQkJZHNjX2hhbmRsZShkcml2ZSk7Ci0JCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JCX0KKworCQlpZiAoKHBjLT5mbGFncyAmIFBDX0ZMQUdfV0FJVF9GT1JfRFNDKSAmJiAoc3RhdCAmIEFUQV9EU0MpID09IDApCisJCQlkc2MgPSAxOwogCiAJCS8qIENvbW1hbmQgZmluaXNoZWQgLSBDYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiAqLwotCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUpOworCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIGRzYyk7CiAKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KQEAgLTMzNiw3ICszODgsOCBAQAogCQkJCQl0ZW1wID0gMDsKIAkJCQlpZiAodGVtcCkgewogCQkJCQlpZiAocGMtPnNnKQotCQkJCQkJaW9fYnVmZmVycyhkcml2ZSwgcGMsIHRlbXAsIDApOworCQkJCQkJZHJpdmUtPnBjX2lvX2J1ZmZlcnMoZHJpdmUsIHBjLAorCQkJCQkJCQkgICAgIHRlbXAsIDApOwogCQkJCQllbHNlCiAJCQkJCQl0cF9vcHMtPmlucHV0X2RhdGEoZHJpdmUsIE5VTEwsCiAJCQkJCQkJcGMtPmN1cl9wb3MsIHRlbXApOwpAQCAtMzQ4LDkgKzQwMSw3IEBACiAJCQkJcGMtPnhmZXJyZWQgKz0gdGVtcDsKIAkJCQlwYy0+Y3VyX3BvcyArPSB0ZW1wOwogCQkJCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIDAsIGJjb3VudCAtIHRlbXApOwotCQkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwgdGltZW91dCwKLQkJCQkJCWV4cGlyeSk7Ci0JCQkJcmV0dXJuIGlkZV9zdGFydGVkOworCQkJCWdvdG8gbmV4dF9pcnE7CiAJCQl9CiAJCQlkZWJ1Z19sb2coIlRoZSBkZXZpY2Ugd2FudHMgdG8gc2VuZCB1cyBtb3JlIGRhdGEgdGhhbiAiCiAJCQkJICAiZXhwZWN0ZWQgLSBhbGxvd2luZyB0cmFuc2ZlclxuIik7CkBAIC0zNjIsNyArNDEzLDcgQEAKIAlpZiAoKGRyaXZlLT5tZWRpYSA9PSBpZGVfZmxvcHB5ICYmICFzY3NpICYmICFwYy0+YnVmKSB8fAogCSAgICAoZHJpdmUtPm1lZGlhID09IGlkZV90YXBlICYmICFzY3NpICYmIHBjLT5iaCkgfHwKIAkgICAgKHNjc2kgJiYgcGMtPnNnKSkgewotCQlpbnQgZG9uZSA9IGlvX2J1ZmZlcnMoZHJpdmUsIHBjLCBiY291bnQsCisJCWludCBkb25lID0gZHJpdmUtPnBjX2lvX2J1ZmZlcnMoZHJpdmUsIHBjLCBiY291bnQsCiAJCQkJICAhIShwYy0+ZmxhZ3MgJiBQQ19GTEFHX1dSSVRJTkcpKTsKIAogCQkvKiBGSVhNRTogZG9uJ3QgZG8gcGFydGlhbCBjb21wbGV0aW9ucyAqLwpAQCAtMzc3LDEyICs0MjgsMTEgQEAKIAogCWRlYnVnX2xvZygiW2NtZCAleF0gdHJhbnNmZXJyZWQgJWQgYnl0ZXMgb24gdGhhdCBpbnRyLlxuIiwKIAkJICBycS0+Y21kWzBdLCBiY291bnQpOwotCituZXh0X2lycToKIAkvKiBBbmQgc2V0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhZ2FpbiAqLwotCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwgdGltZW91dCwgZXhwaXJ5KTsKKwlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGlkZV9wY19pbnRyLCB0aW1lb3V0LCBleHBpcnkpOwogCXJldHVybiBpZGVfc3RhcnRlZDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9wY19pbnRyKTsKIAogc3RhdGljIHU4IGlkZV9yZWFkX2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlKQogewpAQCAtNDE4LDEyICs0NjgsMjIgQEAKIAlyZXR1cm4gaXJlYXNvbjsKIH0KIAotaWRlX3N0YXJ0c3RvcF90IGlkZV90cmFuc2Zlcl9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLAotCQkJCWlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsIHVuc2lnbmVkIGludCB0aW1lb3V0LAotCQkJCWlkZV9leHBpcnlfdCAqZXhwaXJ5KQorc3RhdGljIGludCBpZGVfZGVsYXllZF90cmFuc2Zlcl9wYyhpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CisJLyogU2VuZCB0aGUgYWN0dWFsIHBhY2tldCAqLworCWRyaXZlLT5od2lmLT50cF9vcHMtPm91dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCBkcml2ZS0+cGMtPmMsIDEyKTsKKworCS8qIFRpbWVvdXQgZm9yIHRoZSBwYWNrZXQgY29tbWFuZCAqLworCXJldHVybiBXQUlUX0ZMT1BQWV9DTUQ7Cit9CisKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX3RyYW5zZmVyX3BjKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGRyaXZlLT5wYzsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+aHdncm91cC0+cnE7CisJaWRlX2V4cGlyeV90ICpleHBpcnk7CisJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiAJaWRlX3N0YXJ0c3RvcF90IHN0YXJ0c3RvcDsKIAl1OCBpcmVhc29uOwogCkBAIC00MzQsNyArNDk0LDggQEAKIAl9CiAKIAlpcmVhc29uID0gaWRlX3JlYWRfaXJlYXNvbihkcml2ZSk7Ci0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSAmJiAhZHJpdmUtPnNjc2kpCisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSAmJgorCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19TQ1NJKSA9PSAwKQogCQlpcmVhc29uID0gaWRlX3dhaXRfaXJlYXNvbihkcml2ZSwgaXJlYXNvbik7CiAKIAlpZiAoKGlyZWFzb24gJiBBVEFQSV9DT0QpID09IDAgfHwgKGlyZWFzb24gJiBBVEFQSV9JTykpIHsKQEAgLTQ0Myw4ICs1MDQsMjcgQEAKIAkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7CiAJfQogCisJLyoKKwkgKiBJZiBuZWNlc3Nhcnkgc2NoZWR1bGUgdGhlIHBhY2tldCB0cmFuc2ZlciB0byBvY2N1ciAndGltZW91dCcKKwkgKiBtaWxpc2Vjb25kcyBsYXRlciBpbiBpZGVfZGVsYXllZF90cmFuc2Zlcl9wYygpIGFmdGVyIHRoZSBkZXZpY2UKKwkgKiBzYXlzIGl0J3MgcmVhZHkgZm9yIGEgcGFja2V0LgorCSAqLworCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfWklQX0RSSVZFKSB7CisJCXRpbWVvdXQgPSBkcml2ZS0+cGNfZGVsYXk7CisJCWV4cGlyeSA9ICZpZGVfZGVsYXllZF90cmFuc2Zlcl9wYzsKKwl9IGVsc2UgeworCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19TQ1NJKSB7CisJCQl0aW1lb3V0ID0gaWRlX3Njc2lfZ2V0X3RpbWVvdXQocGMpOworCQkJZXhwaXJ5ID0gaWRlX3Njc2lfZXhwaXJ5OworCQl9IGVsc2UgeworCQkJdGltZW91dCA9IChkcml2ZS0+bWVkaWEgPT0gaWRlX2Zsb3BweSkgPyBXQUlUX0ZMT1BQWV9DTUQKKwkJCQkJCQkgICAgICAgOiBXQUlUX1RBUEVfQ01EOworCQkJZXhwaXJ5ID0gTlVMTDsKKwkJfQorCX0KKwogCS8qIFNldCB0aGUgaW50ZXJydXB0IHJvdXRpbmUgKi8KLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGhhbmRsZXIsIHRpbWVvdXQsIGV4cGlyeSk7CisJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCBpZGVfcGNfaW50ciwgdGltZW91dCwgZXhwaXJ5KTsKIAogCS8qIEJlZ2luIERNQSwgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKHBjLT5mbGFncyAmIFBDX0ZMQUdfRE1BX09LKSB7CkBAIC00NTgsMjIgKzUzOCwyMiBAQAogCiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3RyYW5zZmVyX3BjKTsKIAotaWRlX3N0YXJ0c3RvcF90IGlkZV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLAotCQkJICAgICBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLCB1bnNpZ25lZCBpbnQgdGltZW91dCwKK2lkZV9zdGFydHN0b3BfdCBpZGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLCB1bnNpZ25lZCBpbnQgdGltZW91dCwKIAkJCSAgICAgaWRlX2V4cGlyeV90ICpleHBpcnkpCiB7CisJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBkcml2ZS0+cGM7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXUzMiB0Zl9mbGFnczsKIAl1MTYgYmNvdW50OwotCXU4IGRtYSA9IDA7CisJdTggc2NzaSA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfU0NTSSk7CiAKIAkvKiBXZSBoYXZlbid0IHRyYW5zZmVycmVkIGFueSBkYXRhIHlldCAqLwogCXBjLT54ZmVycmVkID0gMDsKIAlwYy0+Y3VyX3BvcyA9IHBjLT5idWY7CiAKIAkvKiBSZXF1ZXN0IHRvIHRyYW5zZmVyIHRoZSBlbnRpcmUgYnVmZmVyIGF0IG9uY2UgKi8KLQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV90YXBlICYmICFkcml2ZS0+c2NzaSkKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV90YXBlICYmIHNjc2kgPT0gMCkKIAkJYmNvdW50ID0gcGMtPnJlcV94ZmVyOwogCWVsc2UKIAkJYmNvdW50ID0gbWluKHBjLT5yZXFfeGZlciwgNjMgKiAxMDI0KTsKQEAgLTQ4MywyOCArNTYzLDM1IEBACiAJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKIAl9CiAKLQlpZiAoKHBjLT5mbGFncyAmIFBDX0ZMQUdfRE1BX09LKSAmJiBkcml2ZS0+dXNpbmdfZG1hKSB7Ci0JCWlmIChkcml2ZS0+c2NzaSkKKwlpZiAoKHBjLT5mbGFncyAmIFBDX0ZMQUdfRE1BX09LKSAmJgorCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpKSB7CisJCWlmIChzY3NpKQogCQkJaHdpZi0+c2dfbWFwcGVkID0gMTsKLQkJZG1hID0gIWh3aWYtPmRtYV9vcHMtPmRtYV9zZXR1cChkcml2ZSk7Ci0JCWlmIChkcml2ZS0+c2NzaSkKKwkJZHJpdmUtPmRtYSA9ICFod2lmLT5kbWFfb3BzLT5kbWFfc2V0dXAoZHJpdmUpOworCQlpZiAoc2NzaSkKIAkJCWh3aWYtPnNnX21hcHBlZCA9IDA7CiAJfQogCi0JaWYgKCFkbWEpCisJaWYgKCFkcml2ZS0+ZG1hKQogCQlwYy0+ZmxhZ3MgJj0gflBDX0ZMQUdfRE1BX09LOwogCi0JaWRlX3BrdGNtZF90Zl9sb2FkKGRyaXZlLCBkcml2ZS0+c2NzaSA/IDAgOiBJREVfVEZMQUdfT1VUX0RFVklDRSwKLQkJCSAgIGJjb3VudCwgZG1hKTsKKwlpZiAoc2NzaSkKKwkJdGZfZmxhZ3MgPSAwOworCWVsc2UgaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfY2Ryb20gfHwgZHJpdmUtPm1lZGlhID09IGlkZV9vcHRpY2FsKQorCQl0Zl9mbGFncyA9IElERV9URkxBR19PVVRfTlNFQ1QgfCBJREVfVEZMQUdfT1VUX0xCQUw7CisJZWxzZQorCQl0Zl9mbGFncyA9IElERV9URkxBR19PVVRfREVWSUNFOworCisJaWRlX3BrdGNtZF90Zl9sb2FkKGRyaXZlLCB0Zl9mbGFncywgYmNvdW50LCBkcml2ZS0+ZG1hKTsKIAogCS8qIElzc3VlIHRoZSBwYWNrZXQgY29tbWFuZCAqLwogCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfRFJRX0lOVEVSUlVQVCkgewotCQlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBBVEFfQ01EX1BBQ0tFVCwgaGFuZGxlciwKKwkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgQVRBX0NNRF9QQUNLRVQsIGlkZV90cmFuc2Zlcl9wYywKIAkJCQkgICAgdGltZW91dCwgTlVMTCk7CiAJCXJldHVybiBpZGVfc3RhcnRlZDsKIAl9IGVsc2UgewogCQlpZGVfZXhlY3V0ZV9wa3RfY21kKGRyaXZlKTsKLQkJcmV0dXJuICgqaGFuZGxlcikoZHJpdmUpOworCQlyZXR1cm4gaWRlX3RyYW5zZmVyX3BjKGRyaXZlKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfaXNzdWVfcGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwppbmRleCA0NjVhOTJjLi4xMzI2NWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwpAQCAtMjMsNiArMjMsOSBAQAogICoJRG9jdW1lbnRhdGlvbi9pZGUvQ2hhbmdlTG9nLmlkZS1jZC4xOTk0LTIwMDQKICAqLwogCisjZGVmaW5lIERSVl9OQU1FICJpZGUtY2QiCisjZGVmaW5lIFBGWCBEUlZfTkFNRSAiOiAiCisKICNkZWZpbmUgSURFQ0RfVkVSU0lPTiAiNS4wMCIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNTAsMTMgKzUzLDE2IEBACiAKICNpbmNsdWRlICJpZGUtY2QuaCIKIAorI2RlZmluZSBJREVDRF9ERUJVR19MT0cJCTEKKworI2lmIElERUNEX0RFQlVHX0xPRworI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBfX2lkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MpCisjZWxzZQorI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCiBzdGF0aWMgREVGSU5FX01VVEVYKGlkZWNkX3JlZl9tdXRleCk7CiAKLSNkZWZpbmUgdG9faWRlX2NkKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGNkcm9tX2luZm8sIGtyZWYpCi0KLSNkZWZpbmUgaWRlX2NkX2coZGlzaykgXAotCWNvbnRhaW5lcl9vZigoZGlzayktPnByaXZhdGVfZGF0YSwgc3RydWN0IGNkcm9tX2luZm8sIGRyaXZlcikKLQogc3RhdGljIHZvaWQgaWRlX2NkX3JlbGVhc2Uoc3RydWN0IGtyZWYgKik7CiAKIHN0YXRpYyBzdHJ1Y3QgY2Ryb21faW5mbyAqaWRlX2NkX2dldChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKQEAgLTY0LDcgKzcwLDcgQEAKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqY2QgPSBOVUxMOwogCiAJbXV0ZXhfbG9jaygmaWRlY2RfcmVmX211dGV4KTsKLQljZCA9IGlkZV9jZF9nKGRpc2spOworCWNkID0gaWRlX2Rydl9nKGRpc2ssIGNkcm9tX2luZm8pOwogCWlmIChjZCkgewogCQlpZiAoaWRlX2RldmljZV9nZXQoY2QtPmRyaXZlKSkKIAkJCWNkID0gTlVMTDsKQEAgLTkzLDcgKzk5LDcgQEAKIC8qIE1hcmsgdGhhdCB3ZSd2ZSBzZWVuIGEgbWVkaWEgY2hhbmdlIGFuZCBpbnZhbGlkYXRlIG91ciBpbnRlcm5hbCBidWZmZXJzLiAqLwogc3RhdGljIHZvaWQgY2Ryb21fc2F3X21lZGlhX2NoYW5nZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19NRURJQV9DSEFOR0VEOworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX01FRElBX0NIQU5HRUQ7CiAJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfVE9DX1ZBTElEOwogfQogCkBAIC0xMDIsNiArMTA4LDkgQEAKIHsKIAlpbnQgbG9nID0gMDsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgIkNhbGwgJXMsIHNlbnNlX2tleTogMHgleFxuIiwgX19mdW5jX18sCisJCSAgICAgIHNlbnNlLT5zZW5zZV9rZXkpOworCiAJaWYgKCFzZW5zZSB8fCAhcnEgfHwgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUVVJRVQpKQogCQlyZXR1cm4gMDsKIApAQCAtMTUwLDYgKzE1OSwxNCBAQAogCXVuc2lnbmVkIGxvbmcgYmlvX3NlY3RvcnM7CiAJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJDYWxsICVzLCBlcnJvcl9jb2RlOiAweCV4LCAiCisJCQkic2Vuc2Vfa2V5OiAweCV4XG4iLCBfX2Z1bmNfXywgc2Vuc2UtPmVycm9yX2NvZGUsCisJCQlzZW5zZS0+c2Vuc2Vfa2V5KTsKKworCWlmIChmYWlsZWRfY29tbWFuZCkKKwkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiJXM6IGZhaWxlZCBjbWQ6IDB4JXhcbiIsCisJCQkJX19mdW5jX18sIGZhaWxlZF9jb21tYW5kLT5jbWRbMF0pOworCiAJaWYgKCFjZHJvbV9sb2dfc2Vuc2UoZHJpdmUsIGZhaWxlZF9jb21tYW5kLCBzZW5zZSkpCiAJCXJldHVybjsKIApAQCAtMjAwLDYgKzIxNyw4IEBACiAJc3RydWN0IGNkcm9tX2luZm8gKmluZm8JCT0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCByZXF1ZXN0ICpycQkJPSAmaW5mby0+cmVxdWVzdF9zZW5zZV9yZXF1ZXN0OwogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCiAJaWYgKHNlbnNlID09IE5VTEwpCiAJCXNlbnNlID0gJmluZm8tPnNlbnNlX2RhdGE7CiAKQEAgLTIxOSw2ICsyMzgsMTAgQEAKIAkvKiBOT1RFISBTYXZlIHRoZSBmYWlsZWQgY29tbWFuZCBpbiAicnEtPmJ1ZmZlciIgKi8KIAlycS0+YnVmZmVyID0gKHZvaWQgKikgZmFpbGVkX2NvbW1hbmQ7CiAKKwlpZiAoZmFpbGVkX2NvbW1hbmQpCisJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgImZhaWxlZF9jbWQ6IDB4JXhcbiIsCisJCQkgICAgICBmYWlsZWRfY29tbWFuZC0+Y21kWzBdKTsKKwogCWlkZV9kb19kcml2ZV9jbWQoZHJpdmUsIHJxKTsKIH0KIApAQCAtMjI3LDYgKzI1MCwxMCBAQAogCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKIAlpbnQgbnNlY3RvcnMgPSBycS0+aGFyZF9jdXJfc2VjdG9yczsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlcywgY21kOiAweCV4LCB1cHRvZGF0ZTogMHgleCwgIgorCQkgICAgICAibnNlY3RvcnM6ICVkXG4iLCBfX2Z1bmNfXywgcnEtPmNtZFswXSwgdXB0b2RhdGUsCisJCSAgICAgIG5zZWN0b3JzKTsKKwogCWlmIChibGtfc2Vuc2VfcmVxdWVzdChycSkgJiYgdXB0b2RhdGUpIHsKIAkJLyoKIAkJICogRm9yIFJFUV9UWVBFX1NFTlNFLCAicnEtPmJ1ZmZlciIgcG9pbnRzIHRvIHRoZSBvcmlnaW5hbApAQCAtMjY5LDYgKzI5Niw5IEBACiAJaWYgKCFuc2VjdG9ycykKIAkJbnNlY3RvcnMgPSAxOwogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJFeGl0ICVzLCB1cHRvZGF0ZTogMHgleCwgbnNlY3RvcnM6ICVkXG4iLAorCQkgICAgICBfX2Z1bmNfXywgdXB0b2RhdGUsIG5zZWN0b3JzKTsKKwogCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIG5zZWN0b3JzKTsKIH0KIApAQCAtMzA0LDExICszMzQsMTUgQEAKIAlzZW5zZV9rZXkgPSBlcnIgPj4gNDsKIAogCWlmIChycSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG1pc3NpbmcgcnEgaW4gJXNcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBtaXNzaW5nIHJxIGluICVzXG4iLAogCQkJCWRyaXZlLT5uYW1lLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAxOwogCX0KIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgIiVzOiBzdGF0OiAweCV4LCBnb29kX3N0YXQ6IDB4JXgsICIKKwkJICAgICAgInJxLT5jbWRbMF06IDB4JXgsIHJxLT5jbWRfdHlwZTogMHgleCwgZXJyOiAweCV4XG4iLAorCQkgICAgICBfX2Z1bmNfXywgc3RhdCwgZ29vZF9zdGF0LCBycS0+Y21kWzBdLCBycS0+Y21kX3R5cGUsIGVycik7CisKIAlpZiAoYmxrX3NlbnNlX3JlcXVlc3QocnEpKSB7CiAJCS8qCiAJCSAqIFdlIGdvdCBhbiBlcnJvciB0cnlpbmcgdG8gZ2V0IHNlbnNlIGluZm8gZnJvbSB0aGUgZHJpdmUKQEAgLTM3NCw3ICs0MDgsOCBAQAogCQkJCWNkcm9tX3Nhd19tZWRpYV9jaGFuZ2UoZHJpdmUpOwogCiAJCQkJLyogZmFpbCB0aGUgcmVxdWVzdCAqLwotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRyYXkgb3BlblxuIiwgZHJpdmUtPm5hbWUpOworCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB0cmF5IG9wZW5cbiIsCisJCQkJCQlkcml2ZS0+bmFtZSk7CiAJCQkJZG9fZW5kX3JlcXVlc3QgPSAxOwogCQkJfSBlbHNlIHsKIAkJCQlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKQEAgLTQ2MCw3ICs0OTUsNyBAQAogCQlpZiAoc3RhdCAmIEFUQV9FUlIpCiAJCQljZHJvbV9xdWV1ZV9yZXF1ZXN0X3NlbnNlKGRyaXZlLCBOVUxMLCBOVUxMKTsKIAl9IGVsc2UgewotCQlibGtfZHVtcF9ycV9mbGFncyhycSwgImlkZS1jZDogYmFkIHJxIik7CisJCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCBQRlggImJhZCBycSIpOwogCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgMCk7CiAJfQogCkBAIC00ODgsNiArNTIzLDkgQEAKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7CiAJdW5zaWduZWQgbG9uZyB3YWl0ID0gMDsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgIkNhbGwgJXM6IHJxLT5jbWRbMF06IDB4JXhcbiIsIF9fZnVuY19fLAorCQkgICAgICBycS0+Y21kWzBdKTsKKwogCS8qCiAJICogU29tZSBjb21tYW5kcyBhcmUgKnNsb3cqIGFuZCBub3JtYWxseSB0YWtlIGEgbG9uZyB0aW1lIHRvIGNvbXBsZXRlLgogCSAqIFVzdWFsbHkgd2UgY2FuIHVzZSB0aGUgQVRBUEkgImRpc2Nvbm5lY3QiIHRvIGJ5cGFzcyB0aGlzLCBidXQgbm90IGFsbApAQCAtNTA0LDcgKzU0Miw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICghKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUVVJRVQpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiaWRlLWNkOiBjbWQgMHgleCB0aW1lZCBvdXRcbiIsCisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiY21kIDB4JXggdGltZWQgb3V0XG4iLAogCQkJCQkgcnEtPmNtZFswXSk7CiAJCXdhaXQgPSAwOwogCQlicmVhazsKQEAgLTUyNCwyMCArNTYyLDIxIEBACiAJCQkJCQkgIGludCB4ZmVybGVuLAogCQkJCQkJICBpZGVfaGFuZGxlcl90ICpoYW5kbGVyKQogewotCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIkNhbGwgJXMsIHhmZXJsZW46ICVkXG4iLCBfX2Z1bmNfXywgeGZlcmxlbik7CisKIAkvKiBGSVhNRTogZm9yIFZpcnR1YWwgRE1BIHdlIG11c3QgY2hlY2sgaGFyZGVyICovCi0JaWYgKGluZm8tPmRtYSkKLQkJaW5mby0+ZG1hID0gIWh3aWYtPmRtYV9vcHMtPmRtYV9zZXR1cChkcml2ZSk7CisJaWYgKGRyaXZlLT5kbWEpCisJCWRyaXZlLT5kbWEgPSAhaHdpZi0+ZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlKTsKIAogCS8qIHNldCB1cCB0aGUgY29udHJvbGxlciByZWdpc3RlcnMgKi8KIAlpZGVfcGt0Y21kX3RmX2xvYWQoZHJpdmUsIElERV9URkxBR19PVVRfTlNFQ1QgfCBJREVfVEZMQUdfT1VUX0xCQUwsCi0JCQkgICB4ZmVybGVuLCBpbmZvLT5kbWEpOworCQkJICAgeGZlcmxlbiwgZHJpdmUtPmRtYSk7CiAKIAlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQpIHsKIAkJLyogd2FpdGluZyBmb3IgQ0RCIGludGVycnVwdCwgbm90IERNQSB5ZXQuICovCi0JCWlmIChpbmZvLT5kbWEpCisJCWlmIChkcml2ZS0+ZG1hKQogCQkJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7CiAKIAkJLyogcGFja2V0IGNvbW1hbmQgKi8KQEAgLTU2NCw5ICs2MDMsMTAgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJaW50IGNtZF9sZW47Ci0Jc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJaWRlX3N0YXJ0c3RvcF90IHN0YXJ0c3RvcDsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwogCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfRFJRX0lOVEVSUlVQVCkgewogCQkvKgogCQkgKiBIZXJlIHdlIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGFmdGVyIHJlY2VpdmluZyBhbiBpbnRlcnJ1cHQKQEAgLTU3OCw3ICs2MTgsNyBAQAogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCiAJCS8qIG9rLCBuZXh0IGludGVycnVwdCB3aWxsIGJlIERNQSBpbnRlcnJ1cHQgKi8KLQkJaWYgKGluZm8tPmRtYSkKKwkJaWYgKGRyaXZlLT5kbWEpCiAJCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKIAl9IGVsc2UgewogCQkvKiBvdGhlcndpc2UsIHdlIG11c3Qgd2FpdCBmb3IgRFJRIHRvIGdldCBzZXQgKi8KQEAgLTU5OSw3ICs2MzksNyBAQAogCWh3aWYtPnRwX29wcy0+b3V0cHV0X2RhdGEoZHJpdmUsIE5VTEwsIHJxLT5jbWQsIGNtZF9sZW4pOwogCiAJLyogc3RhcnQgdGhlIERNQSBpZiBuZWVkIGJlICovCi0JaWYgKGluZm8tPmRtYSkKKwlpZiAoZHJpdmUtPmRtYSkKIAkJaHdpZi0+ZG1hX29wcy0+ZG1hX3N0YXJ0KGRyaXZlKTsKIAogCXJldHVybiBpZGVfc3RhcnRlZDsKQEAgLTYxNSw2ICs2NTUsOSBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlcywgaXJlYXNvbjogMHgleCwgcnc6IDB4JXhcbiIsCisJCSAgICAgIF9fZnVuY19fLCBpcmVhc29uLCBydyk7CisKIAkvKgogCSAqIGlyZWFzb24gPT0gMDogdGhlIGRyaXZlIHdhbnRzIHRvIHJlY2VpdmUgZGF0YSBmcm9tIHVzCiAJICogaXJlYXNvbiA9PSAyOiB0aGUgZHJpdmUgaXMgZXhwZWN0aW5nIHRvIHRyYW5zZmVyIGRhdGEgdG8gdXMKQEAgLTYyNCw3ICs2NjcsNyBAQAogCWVsc2UgaWYgKGlyZWFzb24gPT0gKHJ3IDw8IDEpKSB7CiAKIAkJLyogd2hvb3BzLi4uICovCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiB3cm9uZyB0cmFuc2ZlciBkaXJlY3Rpb24hXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogJXM6IHdyb25nIHRyYW5zZmVyIGRpcmVjdGlvbiFcbiIsCiAJCQkJZHJpdmUtPm5hbWUsIF9fZnVuY19fKTsKIAogCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCBydywgbGVuKTsKQEAgLTYzNyw3ICs2ODAsNyBAQAogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewogCQkvKiBkcml2ZSB3YW50cyBhIGNvbW1hbmQgcGFja2V0LCBvciBpbnZhbGlkIGlyZWFzb24uLi4gKi8KLQkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IGJhZCBpbnRlcnJ1cHQgcmVhc29uIDB4JTAyeFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6ICVzOiBiYWQgaW50ZXJydXB0IHJlYXNvbiAweCUwMnhcbiIsCiAJCQkJZHJpdmUtPm5hbWUsIF9fZnVuY19fLCBpcmVhc29uKTsKIAl9CiAKQEAgLTY1NCwxNyArNjk3LDE5IEBACiAgKi8KIHN0YXRpYyBpbnQgaWRlX2NkX2NoZWNrX3RyYW5zZmVyX3NpemUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgbGVuKQogeworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlcywgbGVuOiAlZFxuIiwgX19mdW5jX18sIGxlbik7CisKIAlpZiAoKGxlbiAlIFNFQ1RPUl9TSVpFKSA9PSAwKQogCQlyZXR1cm4gMDsKIAotCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBCYWQgdHJhbnNmZXIgc2l6ZSAlZFxuIiwKLQkJCWRyaXZlLT5uYW1lLCBfX2Z1bmNfXywgbGVuKTsKKwlwcmludGsoS0VSTl9FUlIgUEZYICIlczogJXM6IEJhZCB0cmFuc2ZlciBzaXplICVkXG4iLCBkcml2ZS0+bmFtZSwKKwkJCV9fZnVuY19fLCBsZW4pOwogCiAJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19MSU1JVF9ORlJBTUVTKQotCQlwcmludGsoS0VSTl9FUlIgIiAgVGhpcyBkcml2ZSBpcyBub3Qgc3VwcG9ydGVkIGJ5ICIKLQkJCQkidGhpcyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXJcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJUaGlzIGRyaXZlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyAiCisJCQkJInZlcnNpb24gb2YgdGhlIGRyaXZlclxuIik7CiAJZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiICBUcnlpbmcgdG8gbGltaXQgdHJhbnNmZXIgc2l6ZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJUcnlpbmcgdG8gbGltaXQgdHJhbnNmZXIgc2l6ZXNcbiIpOwogCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0xJTUlUX05GUkFNRVM7CiAJfQogCkBAIC02NzYsNiArNzIxLDkgQEAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2NkX3ByZXBhcmVfcndfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCQkJCQkgc3RydWN0IHJlcXVlc3QgKnJxKQogeworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgIkNhbGwgJXM6IHJxLT5jbWRfZmxhZ3M6IDB4JXhcbiIsIF9fZnVuY19fLAorCQkgICAgICBycS0+Y21kX2ZsYWdzKTsKKwogCWlmIChycV9kYXRhX2RpcihycSkgPT0gUkVBRCkgewogCQl1bnNpZ25lZCBzaG9ydCBzZWN0b3JzX3Blcl9mcmFtZSA9CiAJCQlxdWV1ZV9oYXJkc2VjdF9zaXplKGRyaXZlLT5xdWV1ZSkgPj4gU0VDVE9SX0JJVFM7CkBAIC02OTUsNyArNzQzLDcgQEAKIAkJCS8qIHNhbml0eSBjaGVjay4uLiAqLwogCQkJaWYgKHJxLT5jdXJyZW50X25yX3NlY3RvcnMgIT0KIAkJCSAgICBiaW9fY3VyX3NlY3RvcnMocnEtPmJpbykpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogYnVmZmVyIGJvdGNoICgldSlcbiIsCisJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6ICVzOiBidWZmZXIgYm90Y2ggKCV1KVxuIiwKIAkJCQkJCWRyaXZlLT5uYW1lLCBfX2Z1bmNfXywKIAkJCQkJCXJxLT5jdXJyZW50X25yX3NlY3RvcnMpOwogCQkJCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCAwKTsKQEAgLTcwNCwxMSArNzUyLDcgQEAKIAkJCXJxLT5jdXJyZW50X25yX3NlY3RvcnMgKz0gbnNraXA7CiAJCX0KIAl9Ci0jaWYgMAotCWVsc2UKLQkJLyogdGhlIGltbWVkaWF0ZSBiaXQgKi8KLQkJcnEtPmNtZFsxXSA9IDEgPDwgMzsKLSNlbmRpZgorCiAJLyogc2V0IHVwIHRoZSBjb21tYW5kICovCiAJcnEtPnRpbWVvdXQgPSBBVEFQSV9XQUlUX1BDOwogCkBAIC03MzksNiArNzgzLDggQEAKIAlpbnQgc3RhdDsKIAlzdGF0aWMgaW50IHJldHJ5ID0gMTA7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwogCWlmIChjZHJvbV9kZWNvZGVfc3RhdHVzKGRyaXZlLCAwLCAmc3RhdCkpCiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIApAQCAtNzQ2LDcgKzc5Miw3IEBACiAKIAlpZiAocmV0cnkgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBpbmZvLT5zdGFydF9zZWVrICsgSURFQ0RfU0VFS19USU1FUikpIHsKIAkJaWYgKC0tcmV0cnkgPT0gMCkKLQkJCWRyaXZlLT5kc2Nfb3ZlcmxhcCA9IDA7CisJCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRFNDX09WRVJMQVA7CiAJfQogCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KQEAgLTc1NSw2ICs4MDEsOCBAQAogewogCXNlY3Rvcl90IGZyYW1lID0gcnEtPnNlY3RvcjsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCiAJc2VjdG9yX2RpdihmcmFtZSwgcXVldWVfaGFyZHNlY3Rfc2l6ZShkcml2ZS0+cXVldWUpID4+IFNFQ1RPUl9CSVRTKTsKIAogCW1lbXNldChycS0+Y21kLCAwLCBCTEtfTUFYX0NEQik7CkBAIC03NzUsOCArODIzLDExIEBACiAgKiBGaXggdXAgYSBwb3NzaWJseSBwYXJ0aWFsbHktcHJvY2Vzc2VkIHJlcXVlc3Qgc28gdGhhdCB3ZSBjYW4gc3RhcnQgaXQgb3ZlcgogICogZW50aXJlbHksIG9yIGV2ZW4gcHV0IGl0IGJhY2sgb24gdGhlIHJlcXVlc3QgcXVldWUuCiAgKi8KLXN0YXRpYyB2b2lkIHJlc3RvcmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCitzdGF0aWMgdm9pZCBpZGVfY2RfcmVzdG9yZV9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogeworCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisKIAlpZiAocnEtPmJ1ZmZlciAhPSBiaW9fZGF0YShycS0+YmlvKSkgewogCQlzZWN0b3JfdCBuID0KIAkJCShycS0+YnVmZmVyIC0gKGNoYXIgKiliaW9fZGF0YShycS0+YmlvKSkgLyBTRUNUT1JfU0laRTsKQEAgLTc5MiwxMSArODQzLDExIEBACiAJcnEtPnEtPnByZXBfcnFfZm4ocnEtPnEsIHJxKTsKIH0KIAotLyoKLSAqIEFsbCBvdGhlciBwYWNrZXQgY29tbWFuZHMuCi0gKi8KLXN0YXRpYyB2b2lkIGlkZV9jZF9yZXF1ZXN0X3NlbnNlX2ZpeHVwKHN0cnVjdCByZXF1ZXN0ICpycSkKK3N0YXRpYyB2b2lkIGlkZV9jZF9yZXF1ZXN0X3NlbnNlX2ZpeHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogeworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleFxuIiwKKwkJICAgICAgX19mdW5jX18sIHJxLT5jbWRbMF0pOworCiAJLyoKIAkgKiBTb21lIG9mIHRoZSB0cmFpbGluZyByZXF1ZXN0IHNlbnNlIGZpZWxkcyBhcmUgb3B0aW9uYWwsCiAJICogYW5kIHNvbWUgZHJpdmVzIGRvbid0IHNlbmQgdGhlbS4gIFNpZ2guCkBAIC04MjIsNiArODczLDEwIEBACiAJaWYgKCFzZW5zZSkKIAkJc2Vuc2UgPSAmbG9jYWxfc2Vuc2U7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJDYWxsICVzLCBjbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCAiCisJCSAgICAgICJ0aW1lb3V0OiAlZCwgY21kX2ZsYWdzOiAweCV4XG4iLCBfX2Z1bmNfXywgY21kWzBdLCB3cml0ZSwKKwkJICAgICAgdGltZW91dCwgY21kX2ZsYWdzKTsKKwogCS8qIHN0YXJ0IG9mIHJldHJ5IGxvb3AgKi8KIAlkbyB7CiAJCXN0cnVjdCByZXF1ZXN0ICpycTsKQEAgLTg5NSw3ICs5NTAsNiBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBjZHJvbV9uZXdwY19pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOwogCXhmZXJfZnVuY190ICp4ZmVyZnVuYzsKIAlpZGVfZXhwaXJ5X3QgKmV4cGlyeSA9IE5VTEw7CkBAIC05MDUsMTMgKzk1OSwxNiBAQAogCXUxNiBsZW47CiAJdTggaXJlYXNvbjsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4XG4iLAorCQkgICAgICBfX2Z1bmNfXywgcnEtPmNtZFswXSwgd3JpdGUpOworCiAJLyogY2hlY2sgZm9yIGVycm9ycyAqLwotCWRtYSA9IGluZm8tPmRtYTsKKwlkbWEgPSBkcml2ZS0+ZG1hOwogCWlmIChkbWEpIHsKLQkJaW5mby0+ZG1hID0gMDsKKwkJZHJpdmUtPmRtYSA9IDA7CiAJCWRtYV9lcnJvciA9IGh3aWYtPmRtYV9vcHMtPmRtYV9lbmQoZHJpdmUpOwogCQlpZiAoZG1hX2Vycm9yKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBETUEgJXMgZXJyb3JcbiIsIGRyaXZlLT5uYW1lLAorCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IERNQSAlcyBlcnJvclxuIiwgZHJpdmUtPm5hbWUsCiAJCQkJCXdyaXRlID8gIndyaXRlIiA6ICJyZWFkIik7CiAJCQlpZGVfZG1hX29mZihkcml2ZSk7CiAJCX0KQEAgLTkzNyw2ICs5OTQsOSBAQAogCWlmICh0aGlzbGVuID4gbGVuKQogCQl0aGlzbGVuID0gbGVuOwogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiJXM6IERSUTogc3RhdDogMHgleCwgdGhpc2xlbjogJWRcbiIsCisJCSAgICAgIF9fZnVuY19fLCBzdGF0LCB0aGlzbGVuKTsKKwogCS8qIElmIERSUSBpcyBjbGVhciwgdGhlIGNvbW1hbmQgaGFzIGNvbXBsZXRlZC4gKi8KIAlpZiAoKHN0YXQgJiBBVEFfRFJRKSA9PSAwKSB7CiAJCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKQEAgLTk0Niw3ICsxMDA2LDcgQEAKIAkJCSAqLwogCQkJdXB0b2RhdGUgPSAxOwogCQkJaWYgKHJxLT5jdXJyZW50X25yX3NlY3RvcnMgPiAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IGRhdGEgdW5kZXJydW4gIgorCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiAlczogZGF0YSB1bmRlcnJ1biAiCiAJCQkJCQkiKCVkIGJsb2NrcylcbiIsCiAJCQkJCQlkcml2ZS0+bmFtZSwgX19mdW5jX18sCiAJCQkJCQlycS0+Y3VycmVudF9ucl9zZWN0b3JzKTsKQEAgLTk1Nyw3ICsxMDE3LDcgQEAKIAkJCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSk7CiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0gZWxzZSBpZiAoIWJsa19wY19yZXF1ZXN0KHJxKSkgewotCQkJaWRlX2NkX3JlcXVlc3Rfc2Vuc2VfZml4dXAocnEpOworCQkJaWRlX2NkX3JlcXVlc3Rfc2Vuc2VfZml4dXAoZHJpdmUsIHJxKTsKIAkJCS8qIGNvbXBsYWluIGlmIHdlIHN0aWxsIGhhdmUgZGF0YSBsZWZ0IHRvIHRyYW5zZmVyICovCiAJCQl1cHRvZGF0ZSA9IHJxLT5kYXRhX2xlbiA/IDAgOiAxOwogCQl9CkBAIC0xMDAwLDYgKzEwNjAsOSBAQAogCQl4ZmVyZnVuYyA9IGh3aWYtPnRwX29wcy0+aW5wdXRfZGF0YTsKIAl9CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICIlczogZGF0YSB0cmFuc2ZlciwgcnEtPmNtZF90eXBlOiAweCV4LCAiCisJCSAgICAgICJpcmVhc29uOiAweCV4XG4iLCBfX2Z1bmNfXywgcnEtPmNtZF90eXBlLCBpcmVhc29uKTsKKwogCS8qIHRyYW5zZmVyIGRhdGEgKi8KIAl3aGlsZSAodGhpc2xlbiA+IDApIHsKIAkJdTggKnB0ciA9IGJsa19mc19yZXF1ZXN0KHJxKSA/IE5VTEwgOiBycS0+ZGF0YTsKQEAgLTEwMjQsNyArMTA4Nyw3IEBACiAJCQkJICovCiAJCQkJaWRlX3BhZF90cmFuc2Zlcihkcml2ZSwgMCwgdGhpc2xlbik7CiAJCQllbHNlIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb25mdXNlZCwgbWlzc2luZyBkYXRhXG4iLAorCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjb25mdXNlZCwgbWlzc2luZyBkYXRhXG4iLAogCQkJCQkJZHJpdmUtPm5hbWUpOwogCQkJCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCBycV9kYXRhX2RpcihycSkKIAkJCQkJCSAgPyAiY2Ryb21fbmV3cGNfaW50ciwgd3JpdGUiCkBAIC0xMTExLDYgKzExNzQsMTAgQEAKIAl1bnNpZ25lZCBzaG9ydCBzZWN0b3JzX3Blcl9mcmFtZSA9CiAJCXF1ZXVlX2hhcmRzZWN0X3NpemUoZHJpdmUtPnF1ZXVlKSA+PiBTRUNUT1JfQklUUzsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCAiCisJCSAgICAgICJzZWNzX3Blcl9mcmFtZTogJXVcbiIsCisJCSAgICAgIF9fZnVuY19fLCBycS0+Y21kWzBdLCB3cml0ZSwgc2VjdG9yc19wZXJfZnJhbWUpOworCiAJaWYgKHdyaXRlKSB7CiAJCS8qIGRpc2sgaGFzIGJlY29tZSB3cml0ZSBwcm90ZWN0ZWQgKi8KIAkJaWYgKGdldF9kaXNrX3JvKGNkLT5kaXNrKSkgewpAQCAtMTEyMiw3ICsxMTg5LDcgQEAKIAkJICogV2UgbWF5IGJlIHJldHJ5aW5nIHRoaXMgcmVxdWVzdCBhZnRlciBhbiBlcnJvci4gIEZpeCB1cCBhbnkKIAkJICogd2VpcmRuZXNzIHdoaWNoIG1pZ2h0IGJlIHByZXNlbnQgaW4gdGhlIHJlcXVlc3QgcGFja2V0LgogCQkgKi8KLQkJcmVzdG9yZV9yZXF1ZXN0KHJxKTsKKwkJaWRlX2NkX3Jlc3RvcmVfcmVxdWVzdChkcml2ZSwgcnEpOwogCX0KIAogCS8qIHVzZSBETUEsIGlmIHBvc3NpYmxlIC8gd3JpdGVzICptdXN0KiBiZSBoYXJkd2FyZSBmcmFtZSBhbGlnbmVkICovCkBAIC0xMTMyLDkgKzExOTksOSBAQAogCQkJY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDApOwogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9Ci0JCWNkLT5kbWEgPSAwOworCQlkcml2ZS0+ZG1hID0gMDsKIAl9IGVsc2UKLQkJY2QtPmRtYSA9IGRyaXZlLT51c2luZ19kbWE7CisJCWRyaXZlLT5kbWEgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSk7CiAKIAlpZiAod3JpdGUpCiAJCWNkLT5kZXZpbmZvLm1lZGlhX3dyaXR0ZW4gPSAxOwpAQCAtMTE1MSwxNCArMTIxOCwxNyBAQAogCiBzdGF0aWMgdm9pZCBjZHJvbV9kb19ibG9ja19wYyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXgsICIKKwkJICAgICAgInJxLT5jbWRfdHlwZTogMHgleFxuIiwgX19mdW5jX18sIHJxLT5jbWRbMF0sCisJCSAgICAgIHJxLT5jbWRfdHlwZSk7CiAKIAlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKQogCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9RVUlFVDsKIAllbHNlCiAJCXJxLT5jbWRfZmxhZ3MgJj0gflJFUV9GQUlMRUQ7CiAKLQlpbmZvLT5kbWEgPSAwOworCWRyaXZlLT5kbWEgPSAwOwogCiAJLyogc2cgcmVxdWVzdCAqLwogCWlmIChycS0+YmlvIHx8ICgocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9QQykgJiYgcnEtPmRhdGFfbGVuKSkgewpAQCAtMTE3MSw3ICsxMjQxLDcgQEAKIAkJZWxzZQogCQkJYnVmID0gcnEtPmRhdGE7CiAKLQkJaW5mby0+ZG1hID0gZHJpdmUtPnVzaW5nX2RtYTsKKwkJZHJpdmUtPmRtYSA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKTsKIAogCQkvKgogCQkgKiBjaGVjayBpZiBkbWEgaXMgc2FmZQpAQCAtMTE4MiwxMyArMTI1MiwxMCBAQAogCQlhbGlnbm1lbnQgPSBxdWV1ZV9kbWFfYWxpZ25tZW50KHEpIHwgcS0+ZG1hX3BhZF9tYXNrOwogCQlpZiAoKHVuc2lnbmVkIGxvbmcpYnVmICYgYWxpZ25tZW50IHx8IHJxLT5kYXRhX2xlbiAmIGFsaWdubWVudAogCQkgICAgfHwgb2JqZWN0X2lzX29uX3N0YWNrKGJ1ZikpCi0JCQlpbmZvLT5kbWEgPSAwOworCQkJZHJpdmUtPmRtYSA9IDA7CiAJfQogfQogCi0vKgotICogY2Ryb20gZHJpdmVyIHJlcXVlc3Qgcm91dGluZS4KLSAqLwogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfY2RfZG9fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJCQkJc2VjdG9yX3QgYmxvY2spCiB7CkBAIC0xMTk2LDYgKzEyNjMsMTEgQEAKIAlpZGVfaGFuZGxlcl90ICpmbjsKIAlpbnQgeGZlcmxlbjsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXgsICIKKwkJICAgICAgInJxLT5jbWRfdHlwZTogMHgleCwgYmxvY2s6ICVsbHVcbiIsCisJCSAgICAgIF9fZnVuY19fLCBycS0+Y21kWzBdLCBycS0+Y21kX3R5cGUsCisJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2spOworCiAJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgewogCQlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1NFRUtJTkcpIHsKIAkJCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKQEAgLTEyMDgsNyArMTI4MCw3IEBACiAJCQkJCQkJSURFQ0RfU0VFS19USU1FUik7CiAJCQkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAkJCQl9Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRFNDIHRpbWVvdXRcbiIsCisJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IERTQyB0aW1lb3V0XG4iLAogCQkJCQkJZHJpdmUtPm5hbWUpOwogCQkJfQogCQkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfU0VFS0lORzsKQEAgLTEyMTYsMTEgKzEyODgsMTEgQEAKIAkJaWYgKHJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEICYmCiAJCSAgICBJREVfTEFSR0VfU0VFSyhpbmZvLT5sYXN0X2Jsb2NrLCBibG9jaywKIAkJCSAgICBJREVDRF9TRUVLX1RIUkVTSE9MRCkgJiYKLQkJICAgIGRyaXZlLT5kc2Nfb3ZlcmxhcCkgeworCQkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfRFNDX09WRVJMQVApKSB7CiAJCQl4ZmVybGVuID0gMDsKIAkJCWZuID0gY2Ryb21fc3RhcnRfc2Vla19jb250aW51YXRpb247CiAKLQkJCWluZm8tPmRtYSA9IDA7CisJCQlkcml2ZS0+ZG1hID0gMDsKIAkJCWluZm8tPnN0YXJ0X3NlZWsgPSBqaWZmaWVzOwogCiAJCQlpZGVfY2RfcHJlcGFyZV9zZWVrX3JlcXVlc3QoZHJpdmUsIHJxKTsKQEAgLTEyNDksNyArMTMyMSw3IEBACiAJCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCAxKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0gZWxzZSB7Ci0JCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCAiaWRlLWNkIGJhZCBmbGFncyIpOworCQlibGtfZHVtcF9ycV9mbGFncyhycSwgRFJWX05BTUUgIiBiYWQgZmxhZ3MiKTsKIAkJY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQpAQCAtMTI3OSw2ICsxMzUxLDggQEAKIAlzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSA9ICZpbmZvLT5kZXZpbmZvOwogCXVuc2lnbmVkIGNoYXIgY21kW0JMS19NQVhfQ0RCXTsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCiAJbWVtc2V0KGNtZCwgMCwgQkxLX01BWF9DREIpOwogCWNtZFswXSA9IEdQQ01EX1RFU1RfVU5JVF9SRUFEWTsKIApAQCAtMTMwNSw2ICsxMzc5LDggQEAKIAl1bnNpZ25lZCBsZW4gPSBzaXplb2YoY2FwYnVmKTsKIAl1MzIgYmxvY2tsZW47CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwogCW1lbXNldChjbWQsIDAsIEJMS19NQVhfQ0RCKTsKIAljbWRbMF0gPSBHUENNRF9SRUFEX0NEVkRfQ0FQQUNJVFk7CiAKQEAgLTEzMjQsMTYgKzE0MDAsMjAgQEAKIAljYXNlIDQwOTY6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHdlaXJkIGJsb2NrIHNpemUgJXVcbiIsCi0JCQlkcml2ZS0+bmFtZSwgYmxvY2tsZW4pOwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkZWZhdWx0IHRvIDJrYiBibG9jayBzaXplXG4iLAotCQkJZHJpdmUtPm5hbWUpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogd2VpcmQgYmxvY2sgc2l6ZSAldVxuIiwKKwkJCQlkcml2ZS0+bmFtZSwgYmxvY2tsZW4pOworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogZGVmYXVsdCB0byAya2IgYmxvY2sgc2l6ZVxuIiwKKwkJCQlkcml2ZS0+bmFtZSk7CiAJCWJsb2NrbGVuID0gMjA0ODsKIAkJYnJlYWs7CiAJfQogCiAJKmNhcGFjaXR5ID0gMSArIGJlMzJfdG9fY3B1KGNhcGJ1Zi5sYmEpOwogCSpzZWN0b3JzX3Blcl9mcmFtZSA9IGJsb2NrbGVuID4+IFNFQ1RPUl9CSVRTOworCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiJXM6IGNhcDogJWx1LCBzZWN0b3JzX3Blcl9mcmFtZTogJWx1XG4iLAorCQkgICAgICBfX2Z1bmNfXywgKmNhcGFjaXR5LCAqc2VjdG9yc19wZXJfZnJhbWUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNDMsNiArMTQyMyw4IEBACiB7CiAJdW5zaWduZWQgY2hhciBjbWRbQkxLX01BWF9DREJdOwogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisKIAltZW1zZXQoY21kLCAwLCBCTEtfTUFYX0NEQik7CiAKIAljbWRbMF0gPSBHUENNRF9SRUFEX1RPQ19QTUFfQVRJUDsKQEAgLTEzNzEsMTEgKzE0NTMsMTMgQEAKIAlsb25nIGxhc3Rfd3JpdHRlbjsKIAl1bnNpZ25lZCBsb25nIHNlY3RvcnNfcGVyX2ZyYW1lID0gU0VDVE9SU19QRVJfRlJBTUU7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwogCWlmICh0b2MgPT0gTlVMTCkgewogCQkvKiB0cnkgdG8gYWxsb2NhdGUgc3BhY2UgKi8KIAkJdG9jID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF0YXBpX3RvYyksIEdGUF9LRVJORUwpOwogCQlpZiAodG9jID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIGNkcm9tIFRPQyBidWZmZXIhXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IE5vIGNkcm9tIFRPQyBidWZmZXIhXG4iLAogCQkJCQlkcml2ZS0+bmFtZSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtMTUzMSw2ICsxNjE1LDggQEAKIAlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgY2djOwogCWludCBzdGF0LCBhdHRlbXB0cyA9IDMsIHNpemUgPSBBVEFQSV9DQVBBQklMSVRJRVNfUEFHRV9TSVpFOwogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisKIAlpZiAoKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19GVUxMX0NBUFNfUEFHRSkgPT0gMCkKIAkJc2l6ZSAtPSBBVEFQSV9DQVBBQklMSVRJRVNfUEFHRV9QQURfU0laRTsKIApAQCAtMTU0OSw2ICsxNjM1LDggQEAKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqY2QgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJdTE2IGN1cnNwZWVkLCBtYXhzcGVlZDsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCiAJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19MRV9TUEVFRF9GSUVMRFMpIHsKIAkJY3Vyc3BlZWQgPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKSZidWZbOCArIDE0XSk7CiAJCW1heHNwZWVkID0gbGUxNl90b19jcHVwKChfX2xlMTYgKikmYnVmWzggKyA4XSk7CkBAIC0xNTU3LDYgKzE2NDUsOSBAQAogCQltYXhzcGVlZCA9IGJlMTZfdG9fY3B1cCgoX19iZTE2ICopJmJ1Zls4ICsgOF0pOwogCX0KIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIiVzOiBjdXJzcGVlZDogJXUsIG1heHNwZWVkOiAldVxuIiwKKwkJICAgICAgX19mdW5jX18sIGN1cnNwZWVkLCBtYXhzcGVlZCk7CisKIAljZC0+Y3VycmVudF9zcGVlZCA9IChjdXJzcGVlZCArICgxNzYvMikpIC8gMTc2OwogCWNkLT5tYXhfc3BlZWQgPSAobWF4c3BlZWQgKyAoMTc2LzIpKSAvIDE3NjsKIH0KQEAgLTE1ODksNiArMTY4MCw4IEBACiAJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpkZXZpbmZvID0gJmluZm8tPmRldmluZm87CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJDYWxsICVzLCBuc2xvdHM6ICVkXG4iLCBfX2Z1bmNfXywgbnNsb3RzKTsKKwogCWRldmluZm8tPm9wcyA9ICZpZGVfY2Ryb21fZG9wczsKIAlkZXZpbmZvLT5zcGVlZCA9IGluZm8tPmN1cnJlbnRfc3BlZWQ7CiAJZGV2aW5mby0+Y2FwYWNpdHkgPSBuc2xvdHM7CkBAIC0xNjEwLDEzICsxNzAzLDE3IEBACiAJbWVjaHR5cGVfdCBtZWNodHlwZTsKIAlpbnQgbnNsb3RzID0gMTsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIkNhbGwgJXMsIGRyaXZlLT5tZWRpYTogMHgleCwgIgorCQkgICAgICAiZHJpdmUtPmF0YXBpX2ZsYWdzOiAweCVseFxuIiwgX19mdW5jX18sIGRyaXZlLT5tZWRpYSwKKwkJICAgICAgZHJpdmUtPmF0YXBpX2ZsYWdzKTsKKwogCWNkaS0+bWFzayA9IChDRENfQ0RfUiB8IENEQ19DRF9SVyB8IENEQ19EVkQgfCBDRENfRFZEX1IgfAogCQkgICAgIENEQ19EVkRfUkFNIHwgQ0RDX1NFTEVDVF9ESVNDIHwgQ0RDX1BMQVlfQVVESU8gfAogCQkgICAgIENEQ19NT19EUklWRSB8IENEQ19SQU0pOwogCiAJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfb3B0aWNhbCkgewogCQljZGktPm1hc2sgJj0gfihDRENfTU9fRFJJVkUgfCBDRENfUkFNKTsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQVRBUEkgbWFnbmV0by1vcHRpY2FsIGRyaXZlXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQVRBUEkgbWFnbmV0by1vcHRpY2FsIGRyaXZlXG4iLAogCQkJCWRyaXZlLT5uYW1lKTsKIAkJcmV0dXJuIG5zbG90czsKIAl9CkBAIC0xNjQwLDcgKzE3MzcsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmICgoYnVmWzggKyA2XSAmIDB4MDEpID09IDApCi0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTk9fRE9PUkxPQ0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKIAlpZiAoYnVmWzggKyA2XSAmIDB4MDgpCiAJCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX05PX0VKRUNUOwogCWlmIChidWZbOCArIDNdICYgMHgwMSkKQEAgLTE2NzQsNyArMTc3MSw3IEBACiAKIAlpZGVfY2Ryb21fdXBkYXRlX3NwZWVkKGRyaXZlLCBidWYpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFUQVBJIiwgZHJpdmUtPm5hbWUpOworCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogQVRBUEkiLCBkcml2ZS0+bmFtZSk7CiAKIAkvKiBkb24ndCBwcmludCBzcGVlZCBpZiB0aGUgZHJpdmUgcmVwb3J0ZWQgMCAqLwogCWlmIChjZC0+bWF4X3NwZWVkKQpAQCAtMTY4NSw3ICsxNzgyLDcgQEAKIAlpZiAoKGNkaS0+bWFzayAmIENEQ19EVkRfUikgPT0gMCB8fCAoY2RpLT5tYXNrICYgQ0RDX0RWRF9SQU0pID09IDApCiAJCXByaW50ayhLRVJOX0NPTlQgIiBEVkQlcyVzIiwKIAkJCQkgKGNkaS0+bWFzayAmIENEQ19EVkRfUikgPyAiIiA6ICItUiIsCi0JCQkJIChjZGktPm1hc2sgJiBDRENfRFZEX1JBTSkgPyAiIiA6ICItUkFNIik7CisJCQkJIChjZGktPm1hc2sgJiBDRENfRFZEX1JBTSkgPyAiIiA6ICIvUkFNIik7CiAKIAlpZiAoKGNkaS0+bWFzayAmIENEQ19DRF9SKSA9PSAwIHx8IChjZGktPm1hc2sgJiBDRENfQ0RfUlcpID09IDApCiAJCXByaW50ayhLRVJOX0NPTlQgIiBDRCVzJXMiLApAQCAtMTY5Nyw3ICsxNzk0LDggQEAKIAllbHNlCiAJCXByaW50ayhLRVJOX0NPTlQgIiBkcml2ZSIpOwogCi0JcHJpbnRrKEtFUk5fQ09OVCAiLCAlZGtCIENhY2hlXG4iLCBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSZidWZbOCArIDEyXSkpOworCXByaW50ayhLRVJOX0NPTlQgIiwgJWRrQiBDYWNoZVxuIiwKKwkJCSBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSZidWZbOCArIDEyXSkpOwogCiAJcmV0dXJuIG5zbG90czsKIH0KQEAgLTE4MDksMTIgKzE5MDcsMjIgQEAKIAl7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfQogfTsKIAotaWRlX2RldnNldF9yd19maWVsZChkc2Nfb3ZlcmxhcCwgZHNjX292ZXJsYXApOworaWRlX2RldnNldF9yd19mbGFnKGRzY19vdmVybGFwLCBJREVfREZMQUdfRFNDX09WRVJMQVApOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCBpZGVjZF9zZXR0aW5nc1tdID0gewogCUlERV9QUk9DX0RFVlNFVChkc2Nfb3ZlcmxhcCwgMCwgMSksCiAJeyAwIH0sCiB9OworCitzdGF0aWMgaWRlX3Byb2NfZW50cnlfdCAqaWRlX2NkX3Byb2NfZW50cmllcyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIGlkZWNkX3Byb2M7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0ICppZGVfY2RfcHJvY19kZXZzZXRzKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gaWRlY2Rfc2V0dGluZ3M7Cit9CiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjZF9saXN0X2VudHJ5IGlkZV9jZF9xdWlya3NfbGlzdFtdID0gewpAQCAtMTg4NCw2ICsxOTkyLDggQEAKIAljaGFyICpmd19yZXYgPSAoY2hhciAqKSZpZFtBVEFfSURfRldfUkVWXTsKIAlpbnQgbnNsb3RzOwogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCiAJYmxrX3F1ZXVlX3ByZXBfcnEoZHJpdmUtPnF1ZXVlLCBpZGVfY2Ryb21fcHJlcF9mbik7CiAJYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQoZHJpdmUtPnF1ZXVlLCAzMSk7CiAJYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfcGFkKGRyaXZlLT5xdWV1ZSwgMTUpOwpAQCAtMTg5MSwxMyArMjAwMSw4IEBACiAJaWYgKCFkcml2ZS0+cXVldWUtPnVucGx1Z19kZWxheSkKIAkJZHJpdmUtPnF1ZXVlLT51bnBsdWdfZGVsYXkgPSAxOwogCi0JZHJpdmUtPnNwZWNpYWwuYWxsCT0gMDsKLQotCWRyaXZlLT5hdGFwaV9mbGFncyA9IElERV9BRkxBR19NRURJQV9DSEFOR0VEIHwgSURFX0FGTEFHX05PX0VKRUNUIHwKLQkJICAgICAgIGlkZV9jZF9mbGFncyhpZCk7Ci0KLQlpZiAoKGlkW0FUQV9JRF9DT05GSUddICYgMHgwMDYwKSA9PSAweDIwKQotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQ7CisJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTUVESUFfQ0hBTkdFRDsKKwlkcml2ZS0+YXRhcGlfZmxhZ3MgPSBJREVfQUZMQUdfTk9fRUpFQ1QgfCBpZGVfY2RfZmxhZ3MoaWQpOwogCiAJaWYgKChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfVkVSVE9TXzMwMF9TU0QpICYmCiAJICAgIGZ3X3Jldls0XSA9PSAnMScgJiYgZndfcmV2WzZdIDw9ICcyJykKQEAgLTE5MTUsMTAgKzIwMjAsMTMgQEAKIAkvKiBzZXQgY29ycmVjdCBibG9jayBzaXplICovCiAJYmxrX3F1ZXVlX2hhcmRzZWN0X3NpemUoZHJpdmUtPnF1ZXVlLCBDRF9GUkFNRVNJWkUpOwogCi0JZHJpdmUtPmRzY19vdmVybGFwID0gKGRyaXZlLT5uZXh0ICE9IGRyaXZlKTsKKwlpZiAoZHJpdmUtPm5leHQgIT0gZHJpdmUpCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0RTQ19PVkVSTEFQOworCWVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RTQ19PVkVSTEFQOwogCiAJaWYgKGlkZV9jZHJvbV9yZWdpc3Rlcihkcml2ZSwgbnNsb3RzKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcyBmYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlIHdpdGggdGhlIgorCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogJXMgZmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZSB3aXRoIHRoZSIKIAkJCQkiIGNkcm9tIGRyaXZlci5cbiIsIGRyaXZlLT5uYW1lLCBfX2Z1bmNfXyk7CiAJCWNkLT5kZXZpbmZvLmhhbmRsZSA9IE5VTEw7CiAJCXJldHVybiAxOwpAQCAtMTkzMiw2ICsyMDQwLDggQEAKIHsKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCiAJaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGluZm8tPmRyaXZlcik7CiAKIAlkZWxfZ2VuZGlzayhpbmZvLT5kaXNrKTsKQEAgLTE5NDEsMTUgKzIwNTEsMTcgQEAKIAogc3RhdGljIHZvaWQgaWRlX2NkX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCiB7Ci0Jc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSB0b19pZGVfY2Qoa3JlZik7CisJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSB0b19pZGVfZHJ2KGtyZWYsIGNkcm9tX2luZm8pOwogCXN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqZGV2aW5mbyA9ICZpbmZvLT5kZXZpbmZvOwogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGluZm8tPmRyaXZlOwogCXN0cnVjdCBnZW5kaXNrICpnID0gaW5mby0+ZGlzazsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCiAJa2ZyZWUoaW5mby0+dG9jKTsKIAlpZiAoZGV2aW5mby0+aGFuZGxlID09IGRyaXZlKQogCQl1bnJlZ2lzdGVyX2Nkcm9tKGRldmluZm8pOwotCWRyaXZlLT5kc2Nfb3ZlcmxhcCA9IDA7CisJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RTQ19PVkVSTEFQOwogCWRyaXZlLT5kcml2ZXJfZGF0YSA9IE5VTEw7CiAJYmxrX3F1ZXVlX3ByZXBfcnEoZHJpdmUtPnF1ZXVlLCBOVUxMKTsKIAlnLT5wcml2YXRlX2RhdGEgPSBOVUxMOwpAQCAtMTk2OCwxMyArMjA4MCwxMiBAQAogCS5wcm9iZQkJCT0gaWRlX2NkX3Byb2JlLAogCS5yZW1vdmUJCQk9IGlkZV9jZF9yZW1vdmUsCiAJLnZlcnNpb24JCT0gSURFQ0RfVkVSU0lPTiwKLQkubWVkaWEJCQk9IGlkZV9jZHJvbSwKIAkuZG9fcmVxdWVzdAkJPSBpZGVfY2RfZG9fcmVxdWVzdCwKIAkuZW5kX3JlcXVlc3QJCT0gaWRlX2VuZF9yZXF1ZXN0LAogCS5lcnJvcgkJCT0gX19pZGVfZXJyb3IsCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi0JLnByb2MJCQk9IGlkZWNkX3Byb2MsCi0JLnNldHRpbmdzCQk9IGlkZWNkX3NldHRpbmdzLAorCS5wcm9jX2VudHJpZXMJCT0gaWRlX2NkX3Byb2NfZW50cmllcywKKwkucHJvY19kZXZzZXRzCQk9IGlkZV9jZF9wcm9jX2RldnNldHMsCiAjZW5kaWYKIH07CiAKQEAgLTE5OTksNyArMjExMCw3IEBACiBzdGF0aWMgaW50IGlkZWNkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gaWRlX2NkX2coZGlzayk7CisJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBpZGVfZHJ2X2coZGlzaywgY2Ryb21faW5mbyk7CiAKIAljZHJvbV9yZWxlYXNlKCZpbmZvLT5kZXZpbmZvLCBmaWxlKTsKIApAQCAtMjA1MSw3ICsyMTYyLDcgQEAKIAkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBpbm9kZS0+aV9iZGV2OwotCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gaWRlX2NkX2coYmRldi0+YmRfZGlzayk7CisJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBpZGVfZHJ2X2coYmRldi0+YmRfZGlzaywgY2Ryb21faW5mbyk7CiAJaW50IGVycjsKIAogCXN3aXRjaCAoY21kKSB7CkBAIC0yMDcyLDEzICsyMTgzLDEzIEBACiAKIHN0YXRpYyBpbnQgaWRlY2RfbWVkaWFfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIHsKLQlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGlkZV9jZF9nKGRpc2spOworCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gaWRlX2Rydl9nKGRpc2ssIGNkcm9tX2luZm8pOwogCXJldHVybiBjZHJvbV9tZWRpYV9jaGFuZ2VkKCZpbmZvLT5kZXZpbmZvKTsKIH0KIAogc3RhdGljIGludCBpZGVjZF9yZXZhbGlkYXRlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7Ci0Jc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBpZGVfY2RfZyhkaXNrKTsKKwlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGlkZV9kcnZfZyhkaXNrLCBjZHJvbV9pbmZvKTsKIAlzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBzZW5zZTsKIAogCWlkZV9jZF9yZWFkX3RvYyhpbmZvLT5kcml2ZSwgJnNlbnNlKTsKQEAgLTIwOTcsOCArMjIwOCwxMSBAQAogCiAvKiBtb2R1bGUgb3B0aW9ucyAqLwogc3RhdGljIGNoYXIgKmlnbm9yZTsKLQogbW9kdWxlX3BhcmFtKGlnbm9yZSwgY2hhcnAsIDA0MDApOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWJ1Z19tYXNrOworbW9kdWxlX3BhcmFtKGRlYnVnX21hc2ssIHVsb25nLCAwNjQ0KTsKKwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBVEFQSSBDRC1ST00gRHJpdmVyIik7CiAKIHN0YXRpYyBpbnQgaWRlX2NkX3Byb2JlKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTIxMDcsNiArMjIyMSwxMCBAQAogCXN0cnVjdCBnZW5kaXNrICpnOwogCXN0cnVjdCByZXF1ZXN0X3NlbnNlIHNlbnNlOwogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiQ2FsbCAlcywgZHJpdmUtPmRyaXZlcl9yZXE6ICVzLCAiCisJCSAgICAgICJkcml2ZS0+bWVkaWE6IDB4JXhcbiIsIF9fZnVuY19fLCBkcml2ZS0+ZHJpdmVyX3JlcSwKKwkJICAgICAgZHJpdmUtPm1lZGlhKTsKKwogCWlmICghc3Ryc3RyKCJpZGUtY2Ryb20iLCBkcml2ZS0+ZHJpdmVyX3JlcSkpCiAJCWdvdG8gZmFpbGVkOwogCkBAIC0yMTE2LDE0ICsyMjM0LDE3IEBACiAJLyogc2tpcCBkcml2ZXMgdGhhdCB3ZSB3ZXJlIHRvbGQgdG8gaWdub3JlICovCiAJaWYgKGlnbm9yZSAhPSBOVUxMKSB7CiAJCWlmIChzdHJzdHIoaWdub3JlLCBkcml2ZS0+bmFtZSkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImlkZS1jZDogaWdub3JpbmcgZHJpdmUgJXNcbiIsCisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaWdub3JpbmcgZHJpdmUgJXNcbiIsCiAJCQkJCSBkcml2ZS0+bmFtZSk7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQogCX0KKworCWRyaXZlLT5kZWJ1Z19tYXNrID0gZGVidWdfbWFzazsKKwogCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2Ryb21faW5mbyksIEdGUF9LRVJORUwpOwogCWlmIChpbmZvID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FuJ3QgYWxsb2NhdGUgYSBjZHJvbSBzdHJ1Y3R1cmVcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBDYW4ndCBhbGxvY2F0ZSBhIGNkcm9tIHN0cnVjdHVyZVxuIiwKIAkJCQlkcml2ZS0+bmFtZSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KQEAgLTIxNzEsNiArMjI5Miw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGlkZV9jZHJvbV9pbml0KHZvaWQpCiB7CisJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiIGRyaXZlciAiIElERUNEX1ZFUlNJT04gIlxuIik7CiAJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmaWRlX2Nkcm9tX2RyaXZlci5nZW5fZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmggYi9kcml2ZXJzL2lkZS9pZGUtY2QuaAppbmRleCA2MWE0NTk5Li41ODgyYjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuaAorKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuaApAQCAtODgsNyArODgsNiBAQAogCXN0cnVjdCByZXF1ZXN0X3NlbnNlIHNlbnNlX2RhdGE7CiAKIAlzdHJ1Y3QgcmVxdWVzdCByZXF1ZXN0X3NlbnNlX3JlcXVlc3Q7Ci0JaW50IGRtYTsKIAl1bnNpZ25lZCBsb25nIGxhc3RfYmxvY2s7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9zZWVrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCmluZGV4IDc0MjMxYjQuLmRmM2RmMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jCkBAIC04Niw4ICs4Niw4IEBACiAKIAlpZiAoc2xvdF9uciA9PSBDRFNMX0NVUlJFTlQpIHsKIAkJKHZvaWQpIGNkcm9tX2NoZWNrX3N0YXR1cyhkcml2ZSwgTlVMTCk7Ci0JCXJldHZhbCA9IChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfTUVESUFfQ0hBTkdFRCkgPyAxIDogMDsKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfTUVESUFfQ0hBTkdFRDsKKwkJcmV0dmFsID0gKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTUVESUFfQ0hBTkdFRCkgPyAxIDogMDsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX01FRElBX0NIQU5HRUQ7CiAJCXJldHVybiByZXR2YWw7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzYsNyArMTM2LDcgQEAKIAkJc2Vuc2UgPSAmbXlfc2Vuc2U7CiAKIAkvKiBJZiB0aGUgZHJpdmUgY2Fubm90IGxvY2sgdGhlIGRvb3IsIGp1c3QgcHJldGVuZC4gKi8KLQlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX05PX0RPT1JMT0NLKSB7CisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RPT1JMT0NLSU5HKSA9PSAwKSB7CiAJCXN0YXQgPSAwOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGNoYXIgY21kW0JMS19NQVhfQ0RCXTsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCSAgICAoc2Vuc2UtPmFzYyA9PSAweDI0IHx8IHNlbnNlLT5hc2MgPT0gMHgyMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZG9vciBsb2NraW5nIG5vdCBzdXBwb3J0ZWRcbiIsCiAJCQlkcml2ZS0+bmFtZSk7Ci0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTk9fRE9PUkxPQ0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKIAkJc3RhdCA9IDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwppbmRleCAwMTg0NmYyLi4yMjM3NTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKQEAgLTE0LDkgKzE0LDYgQEAKICAqIFRoaXMgaXMgdGhlIElERS9BVEEgZGlzayBkcml2ZXIsIGFzIGV2b2x2ZWQgZnJvbSBoZC5jIGFuZCBpZGUuYy4KICAqLwogCi0jZGVmaW5lIElERURJU0tfVkVSU0lPTgkiMS4xOCIKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zOSw1NCArMzYsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCi0jaWYgIWRlZmluZWQoQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUKQotI2RlZmluZSBJREVfRElTS19NSU5PUlMJCSgxIDw8IFBBUlROX0JJVFMpCi0jZWxzZQotI2RlZmluZSBJREVfRElTS19NSU5PUlMJCTAKLSNlbmRpZgotCi1zdHJ1Y3QgaWRlX2Rpc2tfb2JqIHsKLQlpZGVfZHJpdmVfdAkqZHJpdmU7Ci0JaWRlX2RyaXZlcl90CSpkcml2ZXI7Ci0Jc3RydWN0IGdlbmRpc2sJKmRpc2s7Ci0Jc3RydWN0IGtyZWYJa3JlZjsKLQl1bnNpZ25lZCBpbnQJb3BlbmVyczsJLyogcHJvdGVjdGVkIGJ5IEJLTCBmb3Igbm93ICovCi19OwotCi1zdGF0aWMgREVGSU5FX01VVEVYKGlkZWRpc2tfcmVmX211dGV4KTsKLQotI2RlZmluZSB0b19pZGVfZGlzayhvYmopIGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBpZGVfZGlza19vYmosIGtyZWYpCi0KLSNkZWZpbmUgaWRlX2Rpc2tfZyhkaXNrKSBcCi0JY29udGFpbmVyX29mKChkaXNrKS0+cHJpdmF0ZV9kYXRhLCBzdHJ1Y3QgaWRlX2Rpc2tfb2JqLCBkcml2ZXIpCi0KLXN0YXRpYyB2b2lkIGlkZV9kaXNrX3JlbGVhc2Uoc3RydWN0IGtyZWYgKik7Ci0KLXN0YXRpYyBzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGVfZGlza19nZXQoc3RydWN0IGdlbmRpc2sgKmRpc2spCi17Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IE5VTEw7Ci0KLQltdXRleF9sb2NrKCZpZGVkaXNrX3JlZl9tdXRleCk7Ci0JaWRrcCA9IGlkZV9kaXNrX2coZGlzayk7Ci0JaWYgKGlka3ApIHsKLQkJaWYgKGlkZV9kZXZpY2VfZ2V0KGlka3AtPmRyaXZlKSkKLQkJCWlka3AgPSBOVUxMOwotCQllbHNlCi0JCQlrcmVmX2dldCgmaWRrcC0+a3JlZik7Ci0JfQotCW11dGV4X3VubG9jaygmaWRlZGlza19yZWZfbXV0ZXgpOwotCXJldHVybiBpZGtwOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfZGlza19wdXQoc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCkKLXsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKLQotCW11dGV4X2xvY2soJmlkZWRpc2tfcmVmX211dGV4KTsKLQlrcmVmX3B1dCgmaWRrcC0+a3JlZiwgaWRlX2Rpc2tfcmVsZWFzZSk7Ci0JaWRlX2RldmljZV9wdXQoZHJpdmUpOwotCW11dGV4X3VubG9jaygmaWRlZGlza19yZWZfbXV0ZXgpOwotfQorI2luY2x1ZGUgImlkZS1kaXNrLmgiCiAKIHN0YXRpYyBjb25zdCB1OCBpZGVfcndfY21kc1tdID0gewogCUFUQV9DTURfUkVBRF9NVUxUSSwKQEAgLTE0MCw5ICs5MCw5IEBACiAJCQkJCXNlY3Rvcl90IGJsb2NrKQogewogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQl1bnNpZ25lZCBpbnQgZG1hCT0gZHJpdmUtPnVzaW5nX2RtYTsKIAl1MTYgbnNlY3RvcnMJCT0gKHUxNilycS0+bnJfc2VjdG9yczsKLQl1OCBsYmE0OAkJPSAoZHJpdmUtPmFkZHJlc3NpbmcgPT0gMSkgPyAxIDogMDsKKwl1OCBsYmE0OAkJPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KTsKKwl1OCBkbWEJCQk9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKTsKIAlpZGVfdGFza190CQl0YXNrOwogCXN0cnVjdCBpZGVfdGFza2ZpbGUJKnRmID0gJnRhc2sudGY7CiAJaWRlX3N0YXJ0c3RvcF90CQlyYzsKQEAgLTE2Miw3ICsxMTIsNyBAQAogCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKIAl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKIAotCWlmIChkcml2ZS0+c2VsZWN0LmIubGJhKSB7CisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBKSB7CiAJCWlmIChsYmE0OCkgewogCQkJcHJfZGVidWcoIiVzOiBMQkE9MHglMDEybGx4XG4iLCBkcml2ZS0+bmFtZSwKIAkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jayk7CkBAIC0xODcsNiArMTM3LDggQEAKIAkJCXRmLT5sYmFoICAgPSBibG9jayA+Pj0gODsKIAkJCXRmLT5kZXZpY2UgPSAoYmxvY2sgPj4gOCkgJiAweGY7CiAJCX0KKworCQl0Zi0+ZGV2aWNlIHw9IEFUQV9MQkE7CiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgaW50IHNlY3QsIGhlYWQsIGN5bCwgdHJhY2s7CiAKQEAgLTIzNyw3ICsxODksNyBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKIAotCUJVR19PTihkcml2ZS0+YmxvY2tlZCk7CisJQlVHX09OKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfQkxPQ0tFRCk7CiAKIAlpZiAoIWJsa19mc19yZXF1ZXN0KHJxKSkgewogCQlibGtfZHVtcF9ycV9mbGFncyhycSwgImlkZV9kb19yd19kaXNrIC0gYmFkIGNvbW1hbmQiKTsKQEAgLTM4MSwxNDIgKzMzMyw1OSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaW5pdF9pZGVkaXNrX2NhcGFjaXR5KGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgaWRlX2Rpc2tfZ2V0X2NhcGFjaXR5KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAl1MTYgKmlkID0gZHJpdmUtPmlkOwotCS8qCi0JICogSWYgdGhpcyBkcml2ZSBzdXBwb3J0cyB0aGUgSG9zdCBQcm90ZWN0ZWQgQXJlYSBmZWF0dXJlIHNldCwKLQkgKiB0aGVuIHdlIG1heSBuZWVkIHRvIGNoYW5nZSBvdXIgb3BpbmlvbiBhYm91dCB0aGUgZHJpdmUncyBjYXBhY2l0eS4KLQkgKi8KLQlpbnQgaHBhID0gYXRhX2lkX2hwYV9lbmFibGVkKGlkKTsKKwlpbnQgbGJhOwogCiAJaWYgKGF0YV9pZF9sYmE0OF9lbmFibGVkKGlkKSkgewogCQkvKiBkcml2ZSBzcGVha3MgNDgtYml0IExCQSAqLwotCQlkcml2ZS0+c2VsZWN0LmIubGJhID0gMTsKKwkJbGJhID0gMTsKIAkJZHJpdmUtPmNhcGFjaXR5NjQgPSBhdGFfaWRfdTY0KGlkLCBBVEFfSURfTEJBX0NBUEFDSVRZXzIpOwotCQlpZiAoaHBhKQotCQkJaWRlZGlza19jaGVja19ocGEoZHJpdmUpOwogCX0gZWxzZSBpZiAoYXRhX2lkX2hhc19sYmEoaWQpICYmIGF0YV9pZF9pc19sYmFfY2FwYWNpdHlfb2soaWQpKSB7CiAJCS8qIGRyaXZlIHNwZWFrcyAyOC1iaXQgTEJBICovCi0JCWRyaXZlLT5zZWxlY3QuYi5sYmEgPSAxOworCQlsYmEgPSAxOwogCQlkcml2ZS0+Y2FwYWNpdHk2NCA9IGF0YV9pZF91MzIoaWQsIEFUQV9JRF9MQkFfQ0FQQUNJVFkpOwotCQlpZiAoaHBhKQotCQkJaWRlZGlza19jaGVja19ocGEoZHJpdmUpOwogCX0gZWxzZSB7CiAJCS8qIGRyaXZlIHNwZWFrcyBib3Jpbmcgb2xkIDI4LWJpdCBDSFMgKi8KKwkJbGJhID0gMDsKIAkJZHJpdmUtPmNhcGFjaXR5NjQgPSBkcml2ZS0+Y3lsICogZHJpdmUtPmhlYWQgKiBkcml2ZS0+c2VjdDsKIAl9Ci19CiAKLXN0YXRpYyBzZWN0b3JfdCBpZGVkaXNrX2NhcGFjaXR5KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlyZXR1cm4gZHJpdmUtPmNhcGFjaXR5NjQ7Ci19CisJaWYgKGxiYSkgeworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19MQkE7CiAKLSNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLXN0YXRpYyBpbnQgc21hcnRfZW5hYmxlKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfdGFza190IGFyZ3M7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmYXJncy50ZjsKLQotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKLQl0Zi0+ZmVhdHVyZSA9IEFUQV9TTUFSVF9FTkFCTEU7Ci0JdGYtPmxiYW0gICAgPSBBVEFfU01BUlRfTEJBTV9QQVNTOwotCXRmLT5sYmFoICAgID0gQVRBX1NNQVJUX0xCQUhfUEFTUzsKLQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfU01BUlQ7Ci0JYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X3NtYXJ0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCAqYnVmLCB1OCBzdWJfY21kKQotewotCWlkZV90YXNrX3QgYXJnczsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZhcmdzLnRmOwotCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwotCXRmLT5mZWF0dXJlID0gc3ViX2NtZDsKLQl0Zi0+bnNlY3QgICA9IDB4MDE7Ci0JdGYtPmxiYW0gICAgPSBBVEFfU01BUlRfTEJBTV9QQVNTOwotCXRmLT5sYmFoICAgID0gQVRBX1NNQVJUX0xCQUhfUEFTUzsKLQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfU01BUlQ7Ci0JYXJncy50Zl9mbGFncwk9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JYXJncy5kYXRhX3BoYXNlCT0gVEFTS0ZJTEVfSU47Ci0JKHZvaWQpIHNtYXJ0X2VuYWJsZShkcml2ZSk7Ci0JcmV0dXJuIGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsICZhcmdzLCBidWYsIDEpOwotfQotCi1zdGF0aWMgaW50IHByb2NfaWRlZGlza19yZWFkX2NhY2hlCi0JKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCWlkZV9kcml2ZV90CSpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKSBkYXRhOwotCWNoYXIJCSpvdXQgPSBwYWdlOwotCWludAkJbGVuOwotCi0JaWYgKGRyaXZlLT5pZF9yZWFkKQotCQlsZW4gPSBzcHJpbnRmKG91dCwgIiVpXG4iLCBkcml2ZS0+aWRbQVRBX0lEX0JVRl9TSVpFXSAvIDIpOwotCWVsc2UKLQkJbGVuID0gc3ByaW50ZihvdXQsICIobm9uZSlcbiIpOwotCi0JUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKLX0KLQotc3RhdGljIGludCBwcm9jX2lkZWRpc2tfcmVhZF9jYXBhY2l0eQotCShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlpZGVfZHJpdmVfdCpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKWRhdGE7Ci0JaW50IGxlbjsKLQotCWxlbiA9IHNwcmludGYocGFnZSwgIiVsbHVcbiIsIChsb25nIGxvbmcpaWRlZGlza19jYXBhY2l0eShkcml2ZSkpOwotCi0JUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKLX0KLQotc3RhdGljIGludCBwcm9jX2lkZWRpc2tfcmVhZF9zbWFydChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCQkgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhLCB1OCBzdWJfY21kKQotewotCWlkZV9kcml2ZV90CSpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKWRhdGE7Ci0JaW50CQlsZW4gPSAwLCBpID0gMDsKLQotCWlmIChnZXRfc21hcnRfZGF0YShkcml2ZSwgcGFnZSwgc3ViX2NtZCkgPT0gMCkgewotCQl1bnNpZ25lZCBzaG9ydCAqdmFsID0gKHVuc2lnbmVkIHNob3J0ICopIHBhZ2U7Ci0JCWNoYXIgKm91dCA9IChjaGFyICopdmFsICsgU0VDVE9SX1NJWkU7Ci0KLQkJcGFnZSA9IG91dDsKLQkJZG8gewotCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJTA0eCVjIiwgbGUxNl90b19jcHUoKnZhbCksCi0JCQkJICAgICAgICgrK2kgJiA3KSA/ICcgJyA6ICdcbicpOwotCQkJdmFsICs9IDE7Ci0JCX0gd2hpbGUgKGkgPCBTRUNUT1JfU0laRSAvIDIpOwotCQlsZW4gPSBvdXQgLSBwYWdlOworCQkvKgorCQkqIElmIHRoaXMgZGV2aWNlIHN1cHBvcnRzIHRoZSBIb3N0IFByb3RlY3RlZCBBcmVhIGZlYXR1cmUgc2V0LAorCQkqIHRoZW4gd2UgbWF5IG5lZWQgdG8gY2hhbmdlIG91ciBvcGluaW9uIGFib3V0IGl0cyBjYXBhY2l0eS4KKwkJKi8KKwkJaWYgKGF0YV9pZF9ocGFfZW5hYmxlZChpZCkpCisJCQlpZGVkaXNrX2NoZWNrX2hwYShkcml2ZSk7CiAJfQogCi0JUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKLX0KKwkvKiBsaW1pdCBkcml2ZSBjYXBhY2l0eSB0byAxMzdHQiBpZiBMQkE0OCBjYW5ub3QgYmUgdXNlZCAqLworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkgPT0gMCAmJgorCSAgICBkcml2ZS0+Y2FwYWNpdHk2NCA+IDFVTEwgPDwgMjgpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbm5vdCB1c2UgTEJBNDggLSBmdWxsIGNhcGFjaXR5ICIKKwkJICAgICAgICIlbGx1IHNlY3RvcnMgKCVsbHUgTUIpXG4iLAorCQkgICAgICAgZHJpdmUtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpZHJpdmUtPmNhcGFjaXR5NjQsCisJCSAgICAgICBzZWN0b3JzX3RvX01CKGRyaXZlLT5jYXBhY2l0eTY0KSk7CisJCWRyaXZlLT5jYXBhY2l0eTY0ID0gMVVMTCA8PCAyODsKKwl9CiAKLXN0YXRpYyBpbnQgcHJvY19pZGVkaXNrX3JlYWRfc3YKLQkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIHByb2NfaWRlZGlza19yZWFkX3NtYXJ0KHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGRhdGEsCi0JCQkJICAgICAgIEFUQV9TTUFSVF9SRUFEX1ZBTFVFUyk7Ci19CisJaWYgKChkcml2ZS0+aHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OF9ETUEpICYmCisJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KSkgeworCQlpZiAoZHJpdmUtPmNhcGFjaXR5NjQgPiAxVUxMIDw8IDI4KSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogY2Fubm90IHVzZSBMQkE0OCBETUEgLSBQSU8gbW9kZSIKKwkJCQkJICIgd2lsbCBiZSB1c2VkIGZvciBhY2Nlc3Npbmcgc2VjdG9ycyAiCisJCQkJCSAiPiAldVxuIiwgZHJpdmUtPm5hbWUsIDEgPDwgMjgpOworCQl9IGVsc2UKKwkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19MQkE0ODsKKwl9CiAKLXN0YXRpYyBpbnQgcHJvY19pZGVkaXNrX3JlYWRfc3QKLQkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIHByb2NfaWRlZGlza19yZWFkX3NtYXJ0KHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGRhdGEsCi0JCQkJICAgICAgIEFUQV9TTUFSVF9SRUFEX1RIUkVTSE9MRFMpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaWRlX3Byb2NfZW50cnlfdCBpZGVkaXNrX3Byb2NbXSA9IHsKLQl7ICJjYWNoZSIsCSAgU19JRlJFR3xTX0lSVUdPLCBwcm9jX2lkZWRpc2tfcmVhZF9jYWNoZSwgICAgTlVMTCB9LAotCXsgImNhcGFjaXR5IiwJICBTX0lGUkVHfFNfSVJVR08sIHByb2NfaWRlZGlza19yZWFkX2NhcGFjaXR5LCBOVUxMIH0sCi0JeyAiZ2VvbWV0cnkiLAkgIFNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVfcmVhZF9nZW9tZXRyeSwgICAgIE5VTEwgfSwKLQl7ICJzbWFydF92YWx1ZXMiLCBTX0lGUkVHfFNfSVJVU1IsIHByb2NfaWRlZGlza19yZWFkX3N2LCAgICAgICBOVUxMIH0sCi0JeyAic21hcnRfdGhyZXNob2xkcyIsIFNfSUZSRUd8U19JUlVTUiwgcHJvY19pZGVkaXNrX3JlYWRfc3QsICAgTlVMTCB9LAotCXsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9Ci19OwotI2VuZGlmCS8qIENPTkZJR19JREVfUFJPQ19GUyAqLwotCiBzdGF0aWMgdm9pZCBpZGVkaXNrX3ByZXBhcmVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSBxLT5xdWV1ZWRhdGE7CkBAIC01NjgsMjUgKzQzNyw0MyBAQAogCXJldHVybiAoZHJpdmUtPm11bHRfY291bnQgPT0gYXJnKSA/IDAgOiAtRUlPOwogfQogCi1pZGVfZGV2c2V0X2dldChub3dlcnIsIG5vd2Vycik7CitpZGVfZGV2c2V0X2dldF9mbGFnKG5vd2VyciwgSURFX0RGTEFHX05PV0VSUik7CiAKIHN0YXRpYyBpbnQgc2V0X25vd2VycihpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCiB7CiAJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkcml2ZS0+bm93ZXJyID0gYXJnOworCWlmIChhcmcpCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PV0VSUjsKKwllbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19OT1dFUlI7CisKIAlkcml2ZS0+YmFkX3dzdGF0ID0gYXJnID8gQkFEX1JfU1RBVCA6IEJBRF9XX1NUQVQ7CisKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpZGVfZG9fc2V0ZmVhdHVyZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGZlYXR1cmUsIHU4IG5zZWN0KQoreworCWlkZV90YXNrX3QgdGFzazsKKworCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwl0YXNrLnRmLmZlYXR1cmUgPSBmZWF0dXJlOworCXRhc2sudGYubnNlY3QgICA9IG5zZWN0OworCXRhc2sudGYuY29tbWFuZCA9IEFUQV9DTURfU0VUX0ZFQVRVUkVTOworCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCisJcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7Cit9CisKIHN0YXRpYyB2b2lkIHVwZGF0ZV9vcmRlcmVkKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAl1MTYgKmlkID0gZHJpdmUtPmlkOwogCXVuc2lnbmVkIG9yZGVyZWQgPSBRVUVVRV9PUkRFUkVEX05PTkU7CiAJcHJlcGFyZV9mbHVzaF9mbiAqcHJlcF9mbiA9IE5VTEw7CiAKLQlpZiAoZHJpdmUtPndjYWNoZSkgeworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1dDQUNIRSkgewogCQl1bnNpZ25lZCBsb25nIGxvbmcgY2FwYWNpdHk7CiAJCWludCBiYXJyaWVyOwogCQkvKgpAQCAtNTk3LDkgKzQ4NCwxMSBAQAogCQkgKiB0aW1lIHdlIGhhdmUgdHJpbW1lZCB0aGUgZHJpdmUgY2FwYWNpdHkgaWYgTEJBNDggaXMKIAkJICogbm90IGF2YWlsYWJsZSBzbyB3ZSBkb24ndCBuZWVkIHRvIHJlY2hlY2sgdGhhdC4KIAkJICovCi0JCWNhcGFjaXR5ID0gaWRlZGlza19jYXBhY2l0eShkcml2ZSk7Ci0JCWJhcnJpZXIgPSBhdGFfaWRfZmx1c2hfZW5hYmxlZChpZCkgJiYgIWRyaXZlLT5ub2ZsdXNoICYmCi0JCQkoZHJpdmUtPmFkZHJlc3NpbmcgPT0gMCB8fCBjYXBhY2l0eSA8PSAoMVVMTCA8PCAyOCkgfHwKKwkJY2FwYWNpdHkgPSBpZGVfZ2RfY2FwYWNpdHkoZHJpdmUpOworCQliYXJyaWVyID0gYXRhX2lkX2ZsdXNoX2VuYWJsZWQoaWQpICYmCisJCQkoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT0ZMVVNIKSA9PSAwICYmCisJCQkoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpID09IDAgfHwKKwkJCSBjYXBhY2l0eSA8PSAoMVVMTCA8PCAyOCkgfHwKIAkJCSBhdGFfaWRfZmx1c2hfZXh0X2VuYWJsZWQoaWQpKTsKIAogCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FjaGUgZmx1c2hlcyAlc3N1cHBvcnRlZFxuIiwKQEAgLTYxNSwyNSArNTA0LDI0IEBACiAJYmxrX3F1ZXVlX29yZGVyZWQoZHJpdmUtPnF1ZXVlLCBvcmRlcmVkLCBwcmVwX2ZuKTsKIH0KIAotaWRlX2RldnNldF9nZXQod2NhY2hlLCB3Y2FjaGUpOworaWRlX2RldnNldF9nZXRfZmxhZyh3Y2FjaGUsIElERV9ERkxBR19XQ0FDSEUpOwogCiBzdGF0aWMgaW50IHNldF93Y2FjaGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQogewotCWlkZV90YXNrX3QgYXJnczsKIAlpbnQgZXJyID0gMTsKIAogCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGF0YV9pZF9mbHVzaF9lbmFibGVkKGRyaXZlLT5pZCkpIHsKLQkJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwotCQlhcmdzLnRmLmZlYXR1cmUgPSBhcmcgPwotCQkJU0VURkVBVFVSRVNfV0NfT04gOiBTRVRGRUFUVVJFU19XQ19PRkY7Ci0JCWFyZ3MudGYuY29tbWFuZCA9IEFUQV9DTURfU0VUX0ZFQVRVUkVTOwotCQlhcmdzLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQkJZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZhcmdzKTsKLQkJaWYgKGVyciA9PSAwKQotCQkJZHJpdmUtPndjYWNoZSA9IGFyZzsKKwkJZXJyID0gaWRlX2RvX3NldGZlYXR1cmUoZHJpdmUsCisJCQlhcmcgPyBTRVRGRUFUVVJFU19XQ19PTiA6IFNFVEZFQVRVUkVTX1dDX09GRiwgMCk7CisJCWlmIChlcnIgPT0gMCkgeworCQkJaWYgKGFyZykKKwkJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19XQ0FDSEU7CisJCQllbHNlCisJCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1dDQUNIRTsKKwkJfQogCX0KIAogCXVwZGF0ZV9vcmRlcmVkKGRyaXZlKTsKQEAgLTY1OCwyMiArNTQ2LDE4IEBACiAKIHN0YXRpYyBpbnQgc2V0X2Fjb3VzdGljKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKIHsKLQlpZGVfdGFza190IGFyZ3M7Ci0KIAlpZiAoYXJnIDwgMCB8fCBhcmcgPiAyNTQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwotCWFyZ3MudGYuZmVhdHVyZSA9IGFyZyA/IFNFVEZFQVRVUkVTX0FBTV9PTiA6IFNFVEZFQVRVUkVTX0FBTV9PRkY7Ci0JYXJncy50Zi5uc2VjdCAgID0gYXJnOwotCWFyZ3MudGYuY29tbWFuZCA9IEFUQV9DTURfU0VUX0ZFQVRVUkVTOwotCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCWlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7CisJaWRlX2RvX3NldGZlYXR1cmUoZHJpdmUsCisJCWFyZyA/IFNFVEZFQVRVUkVTX0FBTV9PTiA6IFNFVEZFQVRVUkVTX0FBTV9PRkYsIGFyZyk7CisKIAlkcml2ZS0+YWNvdXN0aWMgPSBhcmc7CisKIAlyZXR1cm4gMDsKIH0KIAotaWRlX2RldnNldF9nZXQoYWRkcmVzc2luZywgYWRkcmVzc2luZyk7CitpZGVfZGV2c2V0X2dldF9mbGFnKGFkZHJlc3NpbmcsIElERV9ERkxBR19MQkE0OCk7CiAKIC8qCiAgKiBkcml2ZS0+YWRkcmVzc2luZzoKQEAgLTY4Niw1MSArNTcwLDM0IEBACiAJaWYgKGFyZyA8IDAgfHwgYXJnID4gMikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkcml2ZS0+YWRkcmVzc2luZyA9ICAwOwotCi0JaWYgKGRyaXZlLT5od2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4KQotCQlyZXR1cm4gMDsKLQotCWlmIChhdGFfaWRfbGJhNDhfZW5hYmxlZChkcml2ZS0+aWQpID09IDApCisJaWYgKGFyZyAmJiAoKGRyaXZlLT5od2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4KSB8fAorCSAgICBhdGFfaWRfbGJhNDhfZW5hYmxlZChkcml2ZS0+aWQpID09IDApKQogCQlyZXR1cm4gLUVJTzsKIAotCWRyaXZlLT5hZGRyZXNzaW5nID0gYXJnOworCWlmIChhcmcgPT0gMikKKwkJYXJnID0gMDsKKworCWlmIChhcmcpCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0xCQTQ4OworCWVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0xCQTQ4OwogCiAJcmV0dXJuIDA7CiB9CiAKLWlkZV9kZXZzZXRfcncoYWNvdXN0aWMsIGFjb3VzdGljKTsKLWlkZV9kZXZzZXRfcncoYWRkcmVzcywgYWRkcmVzc2luZyk7Ci1pZGVfZGV2c2V0X3J3KG11bHRjb3VudCwgbXVsdGNvdW50KTsKLWlkZV9kZXZzZXRfcncod2NhY2hlLCB3Y2FjaGUpOworaWRlX2V4dF9kZXZzZXRfcncoYWNvdXN0aWMsIGFjb3VzdGljKTsKK2lkZV9leHRfZGV2c2V0X3J3KGFkZHJlc3MsIGFkZHJlc3NpbmcpOworaWRlX2V4dF9kZXZzZXRfcncobXVsdGNvdW50LCBtdWx0Y291bnQpOworaWRlX2V4dF9kZXZzZXRfcncod2NhY2hlLCB3Y2FjaGUpOwogCi1pZGVfZGV2c2V0X3J3X3N5bmMobm93ZXJyLCBub3dlcnIpOworaWRlX2V4dF9kZXZzZXRfcndfc3luYyhub3dlcnIsIG5vd2Vycik7CiAKLSNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLWlkZV9kZXZzZXRfcndfZmllbGQoYmlvc19jeWwsIGJpb3NfY3lsKTsKLWlkZV9kZXZzZXRfcndfZmllbGQoYmlvc19oZWFkLCBiaW9zX2hlYWQpOwotaWRlX2RldnNldF9yd19maWVsZChiaW9zX3NlY3QsIGJpb3Nfc2VjdCk7Ci1pZGVfZGV2c2V0X3J3X2ZpZWxkKGZhaWx1cmVzLCBmYWlsdXJlcyk7Ci1pZGVfZGV2c2V0X3J3X2ZpZWxkKGx1biwgbHVuKTsKLWlkZV9kZXZzZXRfcndfZmllbGQobWF4X2ZhaWx1cmVzLCBtYXhfZmFpbHVyZXMpOworc3RhdGljIGludCBpZGVfZGlza19jaGVjayhpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IGNoYXIgKnMpCit7CisJcmV0dXJuIDE7Cit9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0IGlkZWRpc2tfc2V0dGluZ3NbXSA9IHsKLQlJREVfUFJPQ19ERVZTRVQoYWNvdXN0aWMsCTAsICAgMjU0KSwKLQlJREVfUFJPQ19ERVZTRVQoYWRkcmVzcywJMCwgICAgIDIpLAotCUlERV9QUk9DX0RFVlNFVChiaW9zX2N5bCwJMCwgNjU1MzUpLAotCUlERV9QUk9DX0RFVlNFVChiaW9zX2hlYWQsCTAsICAgMjU1KSwKLQlJREVfUFJPQ19ERVZTRVQoYmlvc19zZWN0LAkwLCAgICA2MyksCi0JSURFX1BST0NfREVWU0VUKGZhaWx1cmVzLAkwLCA2NTUzNSksCi0JSURFX1BST0NfREVWU0VUKGx1biwJCTAsICAgICA3KSwKLQlJREVfUFJPQ19ERVZTRVQobWF4X2ZhaWx1cmVzLAkwLCA2NTUzNSksCi0JSURFX1BST0NfREVWU0VUKG11bHRjb3VudCwJMCwgICAgMTYpLAotCUlERV9QUk9DX0RFVlNFVChub3dlcnIsCQkwLCAgICAgMSksCi0JSURFX1BST0NfREVWU0VUKHdjYWNoZSwJCTAsICAgICAxKSwKLQl7IDAgfSwKLX07Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgaWRlZGlza19zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBpZGVfZGlza19zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CkBAIC03NDAsMjAgKzYwNywyMCBAQAogCiAJaWRlX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCBpZGtwLT5kcml2ZXIpOwogCi0JaWYgKGRyaXZlLT5pZF9yZWFkID09IDApCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0lEX1JFQUQpID09IDApCiAJCXJldHVybjsKIAotCWlmIChkcml2ZS0+cmVtb3ZhYmxlKSB7CisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKSB7CiAJCS8qCiAJCSAqIFJlbW92YWJsZSBkaXNrcyAoZWcuIFNZUVVFU1QpOyBpZ25vcmUgJ1dEJyBkcml2ZXMKIAkJICovCiAJCWlmIChtWzBdICE9ICdXJyB8fCBtWzFdICE9ICdEJykKLQkJCWRyaXZlLT5kb29ybG9ja2luZyA9IDE7CisJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19ET09STE9DS0lORzsKIAl9CiAKIAkodm9pZClzZXRfYWRkcmVzc2luZyhkcml2ZSwgMSk7CiAKLQlpZiAoZHJpdmUtPmFkZHJlc3NpbmcgPT0gMSkgeworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KSB7CiAJCWludCBtYXhfcyA9IDIwNDg7CiAKIAkJaWYgKG1heF9zID4gaHdpZi0+cnFzaXplKQpAQCAtNzY2LDMzICs2MzMsMTUgQEAKIAkJCSBkcml2ZS0+cXVldWUtPm1heF9zZWN0b3JzIC8gMik7CiAKIAkvKiBjYWxjdWxhdGUgZHJpdmUgY2FwYWNpdHksIGFuZCBzZWxlY3QgTEJBIGlmIHBvc3NpYmxlICovCi0JaW5pdF9pZGVkaXNrX2NhcGFjaXR5KGRyaXZlKTsKLQotCS8qIGxpbWl0IGRyaXZlIGNhcGFjaXR5IHRvIDEzN0dCIGlmIExCQTQ4IGNhbm5vdCBiZSB1c2VkICovCi0JaWYgKGRyaXZlLT5hZGRyZXNzaW5nID09IDAgJiYgZHJpdmUtPmNhcGFjaXR5NjQgPiAxVUxMIDw8IDI4KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW5ub3QgdXNlIExCQTQ4IC0gZnVsbCBjYXBhY2l0eSAiCi0JCSAgICAgICAiJWxsdSBzZWN0b3JzICglbGx1IE1CKVxuIiwKLQkJICAgICAgIGRyaXZlLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKWRyaXZlLT5jYXBhY2l0eTY0LAotCQkgICAgICAgc2VjdG9yc190b19NQihkcml2ZS0+Y2FwYWNpdHk2NCkpOwotCQlkcml2ZS0+Y2FwYWNpdHk2NCA9IDFVTEwgPDwgMjg7Ci0JfQotCi0JaWYgKChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4X0RNQSkgJiYgZHJpdmUtPmFkZHJlc3NpbmcpIHsKLQkJaWYgKGRyaXZlLT5jYXBhY2l0eTY0ID4gMVVMTCA8PCAyOCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbm5vdCB1c2UgTEJBNDggRE1BIC0gUElPIG1vZGUiCi0JCQkJCSAiIHdpbGwgYmUgdXNlZCBmb3IgYWNjZXNzaW5nIHNlY3RvcnMgIgotCQkJCQkgIj4gJXVcbiIsIGRyaXZlLT5uYW1lLCAxIDw8IDI4KTsKLQkJfSBlbHNlCi0JCQlkcml2ZS0+YWRkcmVzc2luZyA9IDA7Ci0JfQorCWlkZV9kaXNrX2dldF9jYXBhY2l0eShkcml2ZSk7CiAKIAkvKgogCSAqIGlmIHBvc3NpYmxlLCBnaXZlIGZkaXNrIGFjY2VzcyB0byBtb3JlIG9mIHRoZSBkcml2ZSwKIAkgKiBieSBjb3JyZWN0aW5nIGJpb3NfY3lsczoKIAkgKi8KLQljYXBhY2l0eSA9IGlkZWRpc2tfY2FwYWNpdHkoZHJpdmUpOworCWNhcGFjaXR5ID0gaWRlX2dkX2NhcGFjaXR5KGRyaXZlKTsKIAotCWlmICghZHJpdmUtPmZvcmNlZF9nZW9tKSB7CisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0ZPUkNFRF9HRU9NKSA9PSAwKSB7CiAJCWlmIChhdGFfaWRfbGJhNDhfZW5hYmxlZChkcml2ZS0+aWQpKSB7CiAJCQkvKiBjb21wYXRpYmlsaXR5ICovCiAJCQlkcml2ZS0+Ymlvc19zZWN0ID0gNjM7CkBAIC04MjcsMzAxICs2NzYsNjMgQEAKIAogCS8qIHdyaXRlIGNhY2hlIGVuYWJsZWQ/ICovCiAJaWYgKChpZFtBVEFfSURfQ1NGT10gJiAxKSB8fCBhdGFfaWRfd2NhY2hlX2VuYWJsZWQoaWQpKQotCQlkcml2ZS0+d2NhY2hlID0gMTsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfV0NBQ0hFOwogCiAJc2V0X3djYWNoZShkcml2ZSwgMSk7CisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBKSA9PSAwICYmCisJICAgIChkcml2ZS0+aGVhZCA9PSAwIHx8IGRyaXZlLT5oZWFkID4gMTYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgZ2VvbWV0cnk6ICVkIHBoeXNpY2FsIGhlYWRzP1xuIiwKKwkJCWRyaXZlLT5uYW1lLCBkcml2ZS0+aGVhZCk7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19BVFRBQ0g7CisJfSBlbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0FUVEFDSDsKIH0KIAotc3RhdGljIHZvaWQgaWRlX2NhY2hlZmx1c2hfcChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBpZGVfZGlza19mbHVzaChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWYgKCFkcml2ZS0+d2NhY2hlIHx8IGF0YV9pZF9mbHVzaF9lbmFibGVkKGRyaXZlLT5pZCkgPT0gMCkKKwlpZiAoYXRhX2lkX2ZsdXNoX2VuYWJsZWQoZHJpdmUtPmlkKSA9PSAwIHx8CisJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1dDQUNIRSkgPT0gMCkKIAkJcmV0dXJuOwogCiAJaWYgKGRvX2lkZWRpc2tfZmx1c2hjYWNoZShkcml2ZSkpCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiB3Y2FjaGUgZmx1c2ggZmFpbGVkIVxuIiwgZHJpdmUtPm5hbWUpOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfZGlza19yZW1vdmUoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBpZGVfZGlza19pbml0X21lZGlhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgZ2VuZGlzayAqZyA9IGlka3AtPmRpc2s7Ci0KLQlpZGVfcHJvY191bnJlZ2lzdGVyX2RyaXZlcihkcml2ZSwgaWRrcC0+ZHJpdmVyKTsKLQotCWRlbF9nZW5kaXNrKGcpOwotCi0JaWRlX2NhY2hlZmx1c2hfcChkcml2ZSk7Ci0KLQlpZGVfZGlza19wdXQoaWRrcCk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9kaXNrX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IHRvX2lkZV9kaXNrKGtyZWYpOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwotCXN0cnVjdCBnZW5kaXNrICpnID0gaWRrcC0+ZGlzazsKLQotCWRyaXZlLT5kcml2ZXJfZGF0YSA9IE5VTEw7Ci0JZy0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQlwdXRfZGlzayhnKTsKLQlrZnJlZShpZGtwKTsKLX0KLQotc3RhdGljIGludCBpZGVfZGlza19wcm9iZShpZGVfZHJpdmVfdCAqZHJpdmUpOwotCi0vKgotICogT24gSFBBIGRyaXZlcyB0aGUgY2FwYWNpdHkgbmVlZHMgdG8gYmUKLSAqIHJlaW5pdGlsaXplZCBvbiByZXN1bWUgb3RoZXJ3aXNlIHRoZSBkaXNrCi0gKiBjYW4gbm90IGJlIHVzZWQgYW5kIGEgaGFyZCByZXNldCBpcyByZXF1aXJlZAotICovCi1zdGF0aWMgdm9pZCBpZGVfZGlza19yZXN1bWUoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlmIChhdGFfaWRfaHBhX2VuYWJsZWQoZHJpdmUtPmlkKSkKLQkJaW5pdF9pZGVkaXNrX2NhcGFjaXR5KGRyaXZlKTsKLX0KLQotc3RhdGljIHZvaWQgaWRlX2RldmljZV9zaHV0ZG93bihpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0jaWZkZWYJQ09ORklHX0FMUEhBCi0JLyogT24gQWxwaGEsIGhhbHQoOCkgZG9lc24ndCBhY3R1YWxseSB0dXJuIHRoZSBtYWNoaW5lIG9mZiwKLQkgICBpdCBwdXRzIHlvdSBpbnRvIHRoZSBzb3J0IG9mIGZpcm13YXJlIG1vbml0b3IuIFR5cGljYWxseSwKLQkgICBpdCdzIHVzZWQgdG8gYm9vdCBhbm90aGVyIGtlcm5lbCBpbWFnZSwgc28gaXQncyBub3QgbXVjaAotCSAgIGRpZmZlcmVudCBmcm9tIHJlYm9vdCg4KS4gVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIHRvCi0JICAgc3BpbiBkb3duIHRoZSBkaXNrIGluIHRoaXMgY2FzZSwgZXNwZWNpYWxseSBzaW5jZSBBbHBoYQotCSAgIGZpcm13YXJlIGRvZXNuJ3QgaGFuZGxlIGRpc2tzIGluIHN0YW5kYnkgbW9kZSBwcm9wZXJseS4KLQkgICBPbiB0aGUgb3RoZXIgaGFuZCwgaXQncyByZWFzb25hYmx5IHNhZmUgdG8gdHVybiB0aGUgcG93ZXIKLQkgICBvZmYgd2hlbiB0aGUgc2h1dGRvd24gcHJvY2VzcyByZWFjaGVzIHRoZSBmaXJtd2FyZSBwcm9tcHQsCi0JICAgYXMgdGhlIGZpcm13YXJlIGluaXRpYWxpemF0aW9uIHRha2VzIHJhdGhlciBsb25nIHRpbWUgLQotCSAgIGF0IGxlYXN0IDEwIHNlY29uZHMsIHdoaWNoIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvcgotCSAgIHRoZSBkaXNrIHRvIGV4cGlyZSBpdHMgd3JpdGUgY2FjaGUuICovCi0JaWYgKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUE9XRVJfT0ZGKSB7Ci0jZWxzZQotCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JFU1RBUlQpIHsKLSNlbmRpZgotCQlpZGVfY2FjaGVmbHVzaF9wKGRyaXZlKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gIlNodXRkb3duOiAlc1xuIiwgZHJpdmUtPm5hbWUpOwotCi0JZHJpdmUtPmdlbmRldi5idXMtPnN1c3BlbmQoJmRyaXZlLT5nZW5kZXYsIFBNU0dfU1VTUEVORCk7Ci19Ci0KLXN0YXRpYyBpZGVfZHJpdmVyX3QgaWRlZGlza19kcml2ZXIgPSB7Ci0JLmdlbl9kcml2ZXIgPSB7Ci0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLm5hbWUJCT0gImlkZS1kaXNrIiwKLQkJLmJ1cwkJPSAmaWRlX2J1c190eXBlLAotCX0sCi0JLnByb2JlCQkJPSBpZGVfZGlza19wcm9iZSwKLQkucmVtb3ZlCQkJPSBpZGVfZGlza19yZW1vdmUsCi0JLnJlc3VtZQkJCT0gaWRlX2Rpc2tfcmVzdW1lLAotCS5zaHV0ZG93bgkJPSBpZGVfZGV2aWNlX3NodXRkb3duLAotCS52ZXJzaW9uCQk9IElERURJU0tfVkVSU0lPTiwKLQkubWVkaWEJCQk9IGlkZV9kaXNrLAotCS5kb19yZXF1ZXN0CQk9IGlkZV9kb19yd19kaXNrLAotCS5lbmRfcmVxdWVzdAkJPSBpZGVfZW5kX3JlcXVlc3QsCi0JLmVycm9yCQkJPSBfX2lkZV9lcnJvciwKLSNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLQkucHJvYwkJCT0gaWRlZGlza19wcm9jLAotCS5zZXR0aW5ncwkJPSBpZGVkaXNrX3NldHRpbmdzLAotI2VuZGlmCi19OwotCi1zdGF0aWMgaW50IGlkZWRpc2tfc2V0X2Rvb3Jsb2NrKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKQorc3RhdGljIGludCBpZGVfZGlza19zZXRfZG9vcmxvY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKKwkJCQkgaW50IG9uKQogewogCWlkZV90YXNrX3QgdGFzazsKKwlpbnQgcmV0OworCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RPT1JMT0NLSU5HKSA9PSAwKQorCQlyZXR1cm4gMDsKIAogCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKIAl0YXNrLnRmLmNvbW1hbmQgPSBvbiA/IEFUQV9DTURfTUVESUFfTE9DSyA6IEFUQV9DTURfTUVESUFfVU5MT0NLOwogCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCi0JcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJcmV0ID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKworCWlmIChyZXQpCisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKKworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaWRlZGlza19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwOwotCWlkZV9kcml2ZV90ICpkcml2ZTsKLQotCWlka3AgPSBpZGVfZGlza19nZXQoZGlzayk7Ci0JaWYgKGlka3AgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCWRyaXZlID0gaWRrcC0+ZHJpdmU7Ci0KLQlpZGtwLT5vcGVuZXJzKys7Ci0KLQlpZiAoZHJpdmUtPnJlbW92YWJsZSAmJiBpZGtwLT5vcGVuZXJzID09IDEpIHsKLQkJY2hlY2tfZGlza19jaGFuZ2UoaW5vZGUtPmlfYmRldik7Ci0JCS8qCi0JCSAqIElnbm9yZSB0aGUgcmV0dXJuIGNvZGUgZnJvbSBkb29yX2xvY2ssCi0JCSAqIHNpbmNlIHRoZSBvcGVuKCkgaGFzIGFscmVhZHkgc3VjY2VlZGVkLAotCQkgKiBhbmQgdGhlIGRvb3JfbG9jayBpcyBpcnJlbGV2YW50IGF0IHRoaXMgcG9pbnQuCi0JCSAqLwotCQlpZiAoZHJpdmUtPmRvb3Jsb2NraW5nICYmIGlkZWRpc2tfc2V0X2Rvb3Jsb2NrKGRyaXZlLCAxKSkKLQkJCWRyaXZlLT5kb29ybG9ja2luZyA9IDA7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkZWRpc2tfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kaXNrX2coZGlzayk7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7Ci0KLQlpZiAoaWRrcC0+b3BlbmVycyA9PSAxKQotCQlpZGVfY2FjaGVmbHVzaF9wKGRyaXZlKTsKLQotCWlmIChkcml2ZS0+cmVtb3ZhYmxlICYmIGlka3AtPm9wZW5lcnMgPT0gMSkgewotCQlpZiAoZHJpdmUtPmRvb3Jsb2NraW5nICYmIGlkZWRpc2tfc2V0X2Rvb3Jsb2NrKGRyaXZlLCAwKSkKLQkJCWRyaXZlLT5kb29ybG9ja2luZyA9IDA7Ci0JfQotCi0JaWRrcC0+b3BlbmVycy0tOwotCi0JaWRlX2Rpc2tfcHV0KGlka3ApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZGlza19nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCi17Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kaXNrX2coYmRldi0+YmRfZGlzayk7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7Ci0KLQlnZW8tPmhlYWRzID0gZHJpdmUtPmJpb3NfaGVhZDsKLQlnZW8tPnNlY3RvcnMgPSBkcml2ZS0+Ymlvc19zZWN0OwotCWdlby0+Y3lsaW5kZXJzID0gKHUxNilkcml2ZS0+Ymlvc19jeWw7IC8qIHRydW5jYXRlICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2lvY3RsX2RldnNldCBpZGVfZGlza19pb2N0bF9zZXR0aW5nc1tdID0gewoteyBIRElPX0dFVF9BRERSRVNTLAlIRElPX1NFVF9BRERSRVNTLCAgICZpZGVfZGV2c2V0X2FkZHJlc3MgICB9LAoteyBIRElPX0dFVF9NVUxUQ09VTlQsCUhESU9fU0VUX01VTFRDT1VOVCwgJmlkZV9kZXZzZXRfbXVsdGNvdW50IH0sCi17IEhESU9fR0VUX05PV0VSUiwJSERJT19TRVRfTk9XRVJSLCAgICAmaWRlX2RldnNldF9ub3dlcnIJICB9LAoteyBIRElPX0dFVF9XQ0FDSEUsCUhESU9fU0VUX1dDQUNIRSwgICAgJmlkZV9kZXZzZXRfd2NhY2hlCSAgfSwKLXsgSERJT19HRVRfQUNPVVNUSUMsCUhESU9fU0VUX0FDT1VTVElDLCAgJmlkZV9kZXZzZXRfYWNvdXN0aWMgIH0sCi17IDAgfQorY29uc3Qgc3RydWN0IGlkZV9kaXNrX29wcyBpZGVfYXRhX2Rpc2tfb3BzID0geworCS5jaGVjawkJPSBpZGVfZGlza19jaGVjaywKKwkuZ2V0X2NhcGFjaXR5CT0gaWRlX2Rpc2tfZ2V0X2NhcGFjaXR5LAorCS5zZXR1cAkJPSBpZGVfZGlza19zZXR1cCwKKwkuZmx1c2gJCT0gaWRlX2Rpc2tfZmx1c2gsCisJLmluaXRfbWVkaWEJPSBpZGVfZGlza19pbml0X21lZGlhLAorCS5zZXRfZG9vcmxvY2sJPSBpZGVfZGlza19zZXRfZG9vcmxvY2ssCisJLmRvX3JlcXVlc3QJPSBpZGVfZG9fcndfZGlzaywKKwkuZW5kX3JlcXVlc3QJPSBpZGVfZW5kX3JlcXVlc3QsCisJLmlvY3RsCQk9IGlkZV9kaXNrX2lvY3RsLAogfTsKLQotc3RhdGljIGludCBpZGVkaXNrX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGlub2RlLT5pX2JkZXY7Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kaXNrX2coYmRldi0+YmRfZGlzayk7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7Ci0JaW50IGVycjsKLQotCWVyciA9IGlkZV9zZXR0aW5nX2lvY3RsKGRyaXZlLCBiZGV2LCBjbWQsIGFyZywgaWRlX2Rpc2tfaW9jdGxfc2V0dGluZ3MpOwotCWlmIChlcnIgIT0gLUVPUE5PVFNVUFApCi0JCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gZ2VuZXJpY19pZGVfaW9jdGwoZHJpdmUsIGZpbGUsIGJkZXYsIGNtZCwgYXJnKTsKLX0KLQotc3RhdGljIGludCBpZGVkaXNrX21lZGlhX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2spCi17Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kaXNrX2coZGlzayk7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7Ci0KLQkvKiBkbyBub3Qgc2NhbiBwYXJ0aXRpb25zIHR3aWNlIGlmIHRoaXMgaXMgYSByZW1vdmFibGUgZGV2aWNlICovCi0JaWYgKGRyaXZlLT5hdHRhY2gpIHsKLQkJZHJpdmUtPmF0dGFjaCA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQkvKiBpZiByZW1vdmFibGUsIGFsd2F5cyBhc3N1bWUgaXQgd2FzIGNoYW5nZWQgKi8KLQlyZXR1cm4gZHJpdmUtPnJlbW92YWJsZTsKLX0KLQotc3RhdGljIGludCBpZGVkaXNrX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKLXsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rpc2tfZyhkaXNrKTsKLQlzZXRfY2FwYWNpdHkoZGlzaywgaWRlZGlza19jYXBhY2l0eShpZGtwLT5kcml2ZSkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGlkZWRpc2tfb3BzID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCQk9IGlkZWRpc2tfb3BlbiwKLQkucmVsZWFzZQkJPSBpZGVkaXNrX3JlbGVhc2UsCi0JLmlvY3RsCQkJPSBpZGVkaXNrX2lvY3RsLAotCS5nZXRnZW8JCQk9IGlkZWRpc2tfZ2V0Z2VvLAotCS5tZWRpYV9jaGFuZ2VkCQk9IGlkZWRpc2tfbWVkaWFfY2hhbmdlZCwKLQkucmV2YWxpZGF0ZV9kaXNrCT0gaWRlZGlza19yZXZhbGlkYXRlX2Rpc2sKLX07Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiQVRBIERJU0sgRHJpdmVyIik7Ci0KLXN0YXRpYyBpbnQgaWRlX2Rpc2tfcHJvYmUoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3A7Ci0Jc3RydWN0IGdlbmRpc2sgKmc7Ci0KLQkvKiBzdHJzdHIoImZvbyIsICIiKSBpcyBub24tTlVMTCAqLwotCWlmICghc3Ryc3RyKCJpZGUtZGlzayIsIGRyaXZlLT5kcml2ZXJfcmVxKSkKLQkJZ290byBmYWlsZWQ7Ci0KLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKQotCQlnb3RvIGZhaWxlZDsKLQotCWlka3AgPSBremFsbG9jKHNpemVvZigqaWRrcCksIEdGUF9LRVJORUwpOwotCWlmICghaWRrcCkKLQkJZ290byBmYWlsZWQ7Ci0KLQlnID0gYWxsb2NfZGlza19ub2RlKElERV9ESVNLX01JTk9SUywgaHdpZl90b19ub2RlKGRyaXZlLT5od2lmKSk7Ci0JaWYgKCFnKQotCQlnb3RvIG91dF9mcmVlX2lka3A7Ci0KLQlpZGVfaW5pdF9kaXNrKGcsIGRyaXZlKTsKLQotCWtyZWZfaW5pdCgmaWRrcC0+a3JlZik7Ci0KLQlpZGtwLT5kcml2ZSA9IGRyaXZlOwotCWlka3AtPmRyaXZlciA9ICZpZGVkaXNrX2RyaXZlcjsKLQlpZGtwLT5kaXNrID0gZzsKLQotCWctPnByaXZhdGVfZGF0YSA9ICZpZGtwLT5kcml2ZXI7Ci0KLQlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBpZGtwOwotCi0JaWRlZGlza19zZXR1cChkcml2ZSk7Ci0JaWYgKCghZHJpdmUtPmhlYWQgfHwgZHJpdmUtPmhlYWQgPiAxNikgJiYgIWRyaXZlLT5zZWxlY3QuYi5sYmEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSU5WQUxJRCBHRU9NRVRSWTogJWQgUEhZU0lDQUwgSEVBRFM/XG4iLAotCQkJZHJpdmUtPm5hbWUsIGRyaXZlLT5oZWFkKTsKLQkJZHJpdmUtPmF0dGFjaCA9IDA7Ci0JfSBlbHNlCi0JCWRyaXZlLT5hdHRhY2ggPSAxOwotCi0JZy0+bWlub3JzID0gSURFX0RJU0tfTUlOT1JTOwotCWctPmRyaXZlcmZzX2RldiA9ICZkcml2ZS0+Z2VuZGV2OwotCWctPmZsYWdzIHw9IEdFTkhEX0ZMX0VYVF9ERVZUOwotCWlmIChkcml2ZS0+cmVtb3ZhYmxlKQotCQlnLT5mbGFncyB8PSBHRU5IRF9GTF9SRU1PVkFCTEU7Ci0Jc2V0X2NhcGFjaXR5KGcsIGlkZWRpc2tfY2FwYWNpdHkoZHJpdmUpKTsKLQlnLT5mb3BzID0gJmlkZWRpc2tfb3BzOwotCWFkZF9kaXNrKGcpOwotCXJldHVybiAwOwotCi1vdXRfZnJlZV9pZGtwOgotCWtmcmVlKGlka3ApOwotZmFpbGVkOgotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaWRlZGlza19leGl0KHZvaWQpCi17Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmlkZWRpc2tfZHJpdmVyLmdlbl9kcml2ZXIpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpZGVkaXNrX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpZGVkaXNrX2RyaXZlci5nZW5fZHJpdmVyKTsKLX0KLQotTU9EVUxFX0FMSUFTKCJpZGU6Km0tZGlzayoiKTsKLW1vZHVsZV9pbml0KGlkZWRpc2tfaW5pdCk7Ci1tb2R1bGVfZXhpdChpZGVkaXNrX2V4aXQpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2suaCBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzNGIwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfX0lERV9ESVNLX0gKKyNkZWZpbmUgX19JREVfRElTS19ICisKKyNpbmNsdWRlICJpZGUtZ2QuaCIKKworI2lmZGVmIENPTkZJR19JREVfR0RfQVRBCisvKiBpZGUtZGlzay5jICovCitleHRlcm4gY29uc3Qgc3RydWN0IGlkZV9kaXNrX29wcyBpZGVfYXRhX2Rpc2tfb3BzOworaWRlX2RlY2xfZGV2c2V0KGFkZHJlc3MpOworaWRlX2RlY2xfZGV2c2V0KG11bHRjb3VudCk7CitpZGVfZGVjbF9kZXZzZXQobm93ZXJyKTsKK2lkZV9kZWNsX2RldnNldCh3Y2FjaGUpOworaWRlX2RlY2xfZGV2c2V0KGFjb3VzdGljKTsKKworLyogaWRlLWRpc2tfaW9jdGwuYyAqLworaW50IGlkZV9kaXNrX2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCSAgIHVuc2lnbmVkIGxvbmcpOworCisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCisvKiBpZGUtZGlza19wcm9jLmMgKi8KK2V4dGVybiBpZGVfcHJvY19lbnRyeV90IGlkZV9kaXNrX3Byb2NbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0IGlkZV9kaXNrX3NldHRpbmdzW107CisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIGlkZV9kaXNrX3Byb2MJCU5VTEwKKyNkZWZpbmUgaWRlX2Rpc2tfc2V0dGluZ3MJTlVMTAorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0lERV9ESVNLX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrX2lvY3RsLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19pb2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OTY5OGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19pb2N0bC5jCkBAIC0wLDAgKzEsMjcgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorCisjaW5jbHVkZSAiaWRlLWRpc2suaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfaW9jdGxfZGV2c2V0IGlkZV9kaXNrX2lvY3RsX3NldHRpbmdzW10gPSB7Cit7IEhESU9fR0VUX0FERFJFU1MsCUhESU9fU0VUX0FERFJFU1MsICAgJmlkZV9kZXZzZXRfYWRkcmVzcyAgIH0sCit7IEhESU9fR0VUX01VTFRDT1VOVCwJSERJT19TRVRfTVVMVENPVU5ULCAmaWRlX2RldnNldF9tdWx0Y291bnQgfSwKK3sgSERJT19HRVRfTk9XRVJSLAlIRElPX1NFVF9OT1dFUlIsICAgICZpZGVfZGV2c2V0X25vd2VycgkgIH0sCit7IEhESU9fR0VUX1dDQUNIRSwJSERJT19TRVRfV0NBQ0hFLCAgICAmaWRlX2RldnNldF93Y2FjaGUJICB9LAoreyBIRElPX0dFVF9BQ09VU1RJQywJSERJT19TRVRfQUNPVVNUSUMsICAmaWRlX2RldnNldF9hY291c3RpYyAgfSwKK3sgMCB9Cit9OworCitpbnQgaWRlX2Rpc2tfaW9jdGwoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGlub2RlLT5pX2JkZXY7CisJaW50IGVycjsKKworCWVyciA9IGlkZV9zZXR0aW5nX2lvY3RsKGRyaXZlLCBiZGV2LCBjbWQsIGFyZywgaWRlX2Rpc2tfaW9jdGxfc2V0dGluZ3MpOworCWlmIChlcnIgIT0gLUVPUE5PVFNVUFApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gZ2VuZXJpY19pZGVfaW9jdGwoZHJpdmUsIGZpbGUsIGJkZXYsIGNtZCwgYXJnKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTQ2ZjQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jCkBAIC0wLDAgKzEsMTI5IEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKworI2luY2x1ZGUgImlkZS1kaXNrLmgiCisKK3N0YXRpYyBpbnQgc21hcnRfZW5hYmxlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfdGFza190IGFyZ3M7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmYXJncy50ZjsKKworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKKwl0Zi0+ZmVhdHVyZSA9IEFUQV9TTUFSVF9FTkFCTEU7CisJdGYtPmxiYW0gICAgPSBBVEFfU01BUlRfTEJBTV9QQVNTOworCXRmLT5sYmFoICAgID0gQVRBX1NNQVJUX0xCQUhfUEFTUzsKKwl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfU01BUlQ7CisJYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3NtYXJ0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCAqYnVmLCB1OCBzdWJfY21kKQoreworCWlkZV90YXNrX3QgYXJnczsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZhcmdzLnRmOworCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOworCXRmLT5mZWF0dXJlID0gc3ViX2NtZDsKKwl0Zi0+bnNlY3QgICA9IDB4MDE7CisJdGYtPmxiYW0gICAgPSBBVEFfU01BUlRfTEJBTV9QQVNTOworCXRmLT5sYmFoICAgID0gQVRBX1NNQVJUX0xCQUhfUEFTUzsKKwl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfU01BUlQ7CisJYXJncy50Zl9mbGFncwk9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJYXJncy5kYXRhX3BoYXNlCT0gVEFTS0ZJTEVfSU47CisJKHZvaWQpIHNtYXJ0X2VuYWJsZShkcml2ZSk7CisJcmV0dXJuIGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsICZhcmdzLCBidWYsIDEpOworfQorCitzdGF0aWMgaW50IHByb2NfaWRlZGlza19yZWFkX2NhY2hlCisJKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWlkZV9kcml2ZV90CSpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKSBkYXRhOworCWNoYXIJCSpvdXQgPSBwYWdlOworCWludAkJbGVuOworCisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfSURfUkVBRCkKKwkJbGVuID0gc3ByaW50ZihvdXQsICIlaVxuIiwgZHJpdmUtPmlkW0FUQV9JRF9CVUZfU0laRV0gLyAyKTsKKwllbHNlCisJCWxlbiA9IHNwcmludGYob3V0LCAiKG5vbmUpXG4iKTsKKworCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19pZGVkaXNrX3JlYWRfY2FwYWNpdHkKKwkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaWRlX2RyaXZlX3QqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKilkYXRhOworCWludCBsZW47CisKKwlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLCAobG9uZyBsb25nKWlkZV9nZF9jYXBhY2l0eShkcml2ZSkpOworCisJUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKK30KKworc3RhdGljIGludCBwcm9jX2lkZWRpc2tfcmVhZF9zbWFydChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKKwkJCQkgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhLCB1OCBzdWJfY21kKQoreworCWlkZV9kcml2ZV90CSpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKWRhdGE7CisJaW50CQlsZW4gPSAwLCBpID0gMDsKKworCWlmIChnZXRfc21hcnRfZGF0YShkcml2ZSwgcGFnZSwgc3ViX2NtZCkgPT0gMCkgeworCQl1bnNpZ25lZCBzaG9ydCAqdmFsID0gKHVuc2lnbmVkIHNob3J0ICopIHBhZ2U7CisJCWNoYXIgKm91dCA9IChjaGFyICopdmFsICsgU0VDVE9SX1NJWkU7CisKKwkJcGFnZSA9IG91dDsKKwkJZG8geworCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJTA0eCVjIiwgbGUxNl90b19jcHUoKnZhbCksCisJCQkJICAgICAgICgrK2kgJiA3KSA/ICcgJyA6ICdcbicpOworCQkJdmFsICs9IDE7CisJCX0gd2hpbGUgKGkgPCBTRUNUT1JfU0laRSAvIDIpOworCQlsZW4gPSBvdXQgLSBwYWdlOworCX0KKworCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19pZGVkaXNrX3JlYWRfc3YKKwkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHByb2NfaWRlZGlza19yZWFkX3NtYXJ0KHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGRhdGEsCisJCQkJICAgICAgIEFUQV9TTUFSVF9SRUFEX1ZBTFVFUyk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19pZGVkaXNrX3JlYWRfc3QKKwkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHByb2NfaWRlZGlza19yZWFkX3NtYXJ0KHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGRhdGEsCisJCQkJICAgICAgIEFUQV9TTUFSVF9SRUFEX1RIUkVTSE9MRFMpOworfQorCitpZGVfcHJvY19lbnRyeV90IGlkZV9kaXNrX3Byb2NbXSA9IHsKKwl7ICJjYWNoZSIsCSAgU19JRlJFR3xTX0lSVUdPLCBwcm9jX2lkZWRpc2tfcmVhZF9jYWNoZSwgICAgTlVMTCB9LAorCXsgImNhcGFjaXR5IiwJICBTX0lGUkVHfFNfSVJVR08sIHByb2NfaWRlZGlza19yZWFkX2NhcGFjaXR5LCBOVUxMIH0sCisJeyAiZ2VvbWV0cnkiLAkgIFNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVfcmVhZF9nZW9tZXRyeSwgICAgIE5VTEwgfSwKKwl7ICJzbWFydF92YWx1ZXMiLCBTX0lGUkVHfFNfSVJVU1IsIHByb2NfaWRlZGlza19yZWFkX3N2LCAgICAgICBOVUxMIH0sCisJeyAic21hcnRfdGhyZXNob2xkcyIsIFNfSUZSRUd8U19JUlVTUiwgcHJvY19pZGVkaXNrX3JlYWRfc3QsICAgTlVMTCB9LAorCXsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9Cit9OworCitpZGVfZGV2c2V0X3J3X2ZpZWxkKGJpb3NfY3lsLCBiaW9zX2N5bCk7CitpZGVfZGV2c2V0X3J3X2ZpZWxkKGJpb3NfaGVhZCwgYmlvc19oZWFkKTsKK2lkZV9kZXZzZXRfcndfZmllbGQoYmlvc19zZWN0LCBiaW9zX3NlY3QpOworaWRlX2RldnNldF9yd19maWVsZChmYWlsdXJlcywgZmFpbHVyZXMpOworaWRlX2RldnNldF9yd19maWVsZChsdW4sIGx1bik7CitpZGVfZGV2c2V0X3J3X2ZpZWxkKG1heF9mYWlsdXJlcywgbWF4X2ZhaWx1cmVzKTsKKworY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCBpZGVfZGlza19zZXR0aW5nc1tdID0geworCUlERV9QUk9DX0RFVlNFVChhY291c3RpYywJMCwgICAyNTQpLAorCUlERV9QUk9DX0RFVlNFVChhZGRyZXNzLAkwLCAgICAgMiksCisJSURFX1BST0NfREVWU0VUKGJpb3NfY3lsLAkwLCA2NTUzNSksCisJSURFX1BST0NfREVWU0VUKGJpb3NfaGVhZCwJMCwgICAyNTUpLAorCUlERV9QUk9DX0RFVlNFVChiaW9zX3NlY3QsCTAsICAgIDYzKSwKKwlJREVfUFJPQ19ERVZTRVQoZmFpbHVyZXMsCTAsIDY1NTM1KSwKKwlJREVfUFJPQ19ERVZTRVQobHVuLAkJMCwgICAgIDcpLAorCUlERV9QUk9DX0RFVlNFVChtYXhfZmFpbHVyZXMsCTAsIDY1NTM1KSwKKwlJREVfUFJPQ19ERVZTRVQobXVsdGNvdW50LAkwLCAgICAxNiksCisJSURFX1BST0NfREVWU0VUKG5vd2VyciwJCTAsICAgICAxKSwKKwlJREVfUFJPQ19ERVZTRVQod2NhY2hlLAkJMCwgICAgIDEpLAorCXsgMCB9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kbWEtc2ZmLmMgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYzQzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jCkBAIC0wLDAgKzEsMzU2IEBACisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworLyoqCisgKgljb25maWdfZHJpdmVfZm9yX2RtYQktCWF0dGVtcHQgdG8gYWN0aXZhdGUgSURFIERNQQorICoJQGRyaXZlOiB0aGUgZHJpdmUgdG8gcGxhY2UgaW4gRE1BIG1vZGUKKyAqCisgKglJZiB0aGUgZHJpdmUgc3VwcG9ydHMgYXQgbGVhc3QgbW9kZSAyIERNQSBvciBVRE1BIG9mIGFueSBraW5kCisgKgl0aGVuIGF0dGVtcHQgdG8gcGxhY2UgaXQgaW50byBETUEgbW9kZS4gRHJpdmVzIHRoYXQgYXJlIGtub3duIHRvCisgKglzdXBwb3J0IERNQSBidXQgcHJlZGF0ZSB0aGUgRE1BIHByb3BlcnRpZXMgb3IgdGhhdCBhcmUga25vd24KKyAqCXRvIGhhdmUgRE1BIGhhbmRsaW5nIGJ1Z3MgYXJlIGFsc28gc2V0IHVwIGFwcHJvcHJpYXRlbHkgYmFzZWQKKyAqCW9uIHRoZSBnb29kL2JhZCBkcml2ZSBsaXN0cy4KKyAqLworCitpbnQgY29uZmlnX2RyaXZlX2Zvcl9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1MTYgKmlkID0gZHJpdmUtPmlkOworCisJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzaykgeworCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19BVEFQSV9ETUEpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIEVuYWJsZSBETUEgb24gYW55IGRyaXZlIHRoYXQgaGFzCisJICogVWx0cmFETUEgKG1vZGUgMC8xLzIvMy80LzUvNikgZW5hYmxlZAorCSAqLworCWlmICgoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDQpICYmCisJICAgICgoaWRbQVRBX0lEX1VETUFfTU9ERVNdID4+IDgpICYgMHg3ZikpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBFbmFibGUgRE1BIG9uIGFueSBkcml2ZSB0aGF0IGhhcyBtb2RlMiBETUEKKwkgKiAobXVsdGkgb3Igc2luZ2xlKSBlbmFibGVkCisJICovCisJaWYgKGlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiAyKQkvKiByZWd1bGFyIERNQSAqLworCQlpZiAoKGlkW0FUQV9JRF9NV0RNQV9NT0RFU10gJiAweDQwNCkgPT0gMHg0MDQgfHwKKwkJICAgIChpZFtBVEFfSURfU1dETUFfTU9ERVNdICYgMHg0MDQpID09IDB4NDA0KQorCQkJcmV0dXJuIDE7CisKKwkvKiBDb25zdWx0IHRoZSBsaXN0IG9mIGtub3duICJnb29kIiBkcml2ZXMgKi8KKwlpZiAoaWRlX2RtYV9nb29kX2RyaXZlKGRyaXZlKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglpZGVfZG1hX2hvc3Rfc2V0CS0JRW5hYmxlL2Rpc2FibGUgRE1BIG9uIGEgaG9zdAorICoJQGRyaXZlOiBkcml2ZSB0byBjb250cm9sCisgKgorICoJRW5hYmxlL2Rpc2FibGUgRE1BIG9uIGFuIElERSBjb250cm9sbGVyIGZvbGxvd2luZyBnZW5lcmljCisgKglidXMtbWFzdGVyaW5nIElERSBjb250cm9sbGVyIGJlaGF2aW91ci4KKyAqLworCit2b2lkIGlkZV9kbWFfaG9zdF9zZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgb24pCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxOworCXU4IGRtYV9zdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3NmZl9kbWFfc3RhdHVzKGh3aWYpOworCisJaWYgKG9uKQorCQlkbWFfc3RhdCB8PSAoMSA8PCAoNSArIHVuaXQpKTsKKwllbHNlCisJCWRtYV9zdGF0ICY9IH4oMSA8PCAoNSArIHVuaXQpKTsKKworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCisJCXdyaXRlYihkbWFfc3RhdCwKKwkJICAgICAgICh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUykpOworCWVsc2UKKwkJb3V0YihkbWFfc3RhdCwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX2hvc3Rfc2V0KTsKKworLyoqCisgKglpZGVfYnVpbGRfZG1hdGFibGUJLQlidWlsZCBJREUgRE1BIHRhYmxlCisgKgorICoJaWRlX2J1aWxkX2RtYXRhYmxlKCkgcHJlcGFyZXMgYSBkbWEgcmVxdWVzdC4gV2UgbWFwIHRoZSBjb21tYW5kCisgKgl0byBnZXQgdGhlIHBjaSBidXMgYWRkcmVzc2VzIG9mIHRoZSBidWZmZXJzIGFuZCB0aGVuIGJ1aWxkIHVwCisgKgl0aGUgUFJEIHRhYmxlIHRoYXQgdGhlIElERSBsYXllciB3YW50cyB0byBiZSBmZWQuCisgKgorICoJTW9zdCBjaGlwc2V0cyBjb3JyZWN0bHkgaW50ZXJwcmV0IGEgbGVuZ3RoIG9mIDB4MDAwMCBhcyA2NEtCLAorICoJYnV0IGF0IGxlYXN0IG9uZSAoZS5nLiBDUzU1MzApIG1pc2ludGVycHJldHMgaXQgYXMgemVybyAoISkuCisgKglTbyB3ZSBicmVhayB0aGUgNjRLQiBlbnRyeSBpbnRvIHR3byAzMktCIGVudHJpZXMgaW5zdGVhZC4KKyAqCisgKglSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnVpbHQgUFJEIGVudHJpZXMgaWYgYWxsIHdlbnQgb2theSwKKyAqCXJldHVybnMgMCBvdGhlcndpc2UuCisgKgorICoJTWF5IGFsc28gYmUgaW52b2tlZCBmcm9tIHRybTI5MC5jCisgKi8KKworaW50IGlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJX19sZTMyICp0YWJsZSA9IChfX2xlMzIgKilod2lmLT5kbWF0YWJsZV9jcHU7CisJdW5zaWduZWQgaW50IGlzX3RybTI5MAk9IChod2lmLT5jaGlwc2V0ID09IGlkZV90cm0yOTApID8gMSA6IDA7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCisJaHdpZi0+c2dfbmVudHMgPSBpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBycSk7CisJaWYgKGh3aWYtPnNnX25lbnRzID09IDApCisJCXJldHVybiAwOworCisJZm9yX2VhY2hfc2coaHdpZi0+c2dfdGFibGUsIHNnLCBod2lmLT5zZ19uZW50cywgaSkgeworCQl1MzIgY3VyX2FkZHIsIGN1cl9sZW4sIHhjb3VudCwgYmNvdW50OworCisJCWN1cl9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOworCQljdXJfbGVuID0gc2dfZG1hX2xlbihzZyk7CisKKwkJLyoKKwkJICogRmlsbCBpbiB0aGUgZG1hIHRhYmxlLCB3aXRob3V0IGNyb3NzaW5nIGFueSA2NGtCIGJvdW5kYXJpZXMuCisJCSAqIE1vc3QgaGFyZHdhcmUgcmVxdWlyZXMgMTYtYml0IGFsaWdubWVudCBvZiBhbGwgYmxvY2tzLAorCQkgKiBidXQgdGhlIHRybTI5MCByZXF1aXJlcyAzMi1iaXQgYWxpZ25tZW50LgorCQkgKi8KKworCQl3aGlsZSAoY3VyX2xlbikgeworCQkJaWYgKGNvdW50KysgPj0gUFJEX0VOVFJJRVMpCisJCQkJZ290byB1c2VfcGlvX2luc3RlYWQ7CisKKwkJCWJjb3VudCA9IDB4MTAwMDAgLSAoY3VyX2FkZHIgJiAweGZmZmYpOworCQkJaWYgKGJjb3VudCA+IGN1cl9sZW4pCisJCQkJYmNvdW50ID0gY3VyX2xlbjsKKwkJCSp0YWJsZSsrID0gY3B1X3RvX2xlMzIoY3VyX2FkZHIpOworCQkJeGNvdW50ID0gYmNvdW50ICYgMHhmZmZmOworCQkJaWYgKGlzX3RybTI5MCkKKwkJCQl4Y291bnQgPSAoKHhjb3VudCA+PiAyKSAtIDEpIDw8IDE2OworCQkJZWxzZSBpZiAoeGNvdW50ID09IDB4MDAwMCkgeworCQkJCWlmIChjb3VudCsrID49IFBSRF9FTlRSSUVTKQorCQkJCQlnb3RvIHVzZV9waW9faW5zdGVhZDsKKwkJCQkqdGFibGUrKyA9IGNwdV90b19sZTMyKDB4ODAwMCk7CisJCQkJKnRhYmxlKysgPSBjcHVfdG9fbGUzMihjdXJfYWRkciArIDB4ODAwMCk7CisJCQkJeGNvdW50ID0gMHg4MDAwOworCQkJfQorCQkJKnRhYmxlKysgPSBjcHVfdG9fbGUzMih4Y291bnQpOworCQkJY3VyX2FkZHIgKz0gYmNvdW50OworCQkJY3VyX2xlbiAtPSBiY291bnQ7CisJCX0KKwl9CisKKwlpZiAoY291bnQpIHsKKwkJaWYgKCFpc190cm0yOTApCisJCQkqLS10YWJsZSB8PSBjcHVfdG9fbGUzMigweDgwMDAwMDAwKTsKKwkJcmV0dXJuIGNvdW50OworCX0KKwordXNlX3Bpb19pbnN0ZWFkOgorCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzXG4iLCBkcml2ZS0+bmFtZSwKKwkJY291bnQgPyAiRE1BIHRhYmxlIHRvbyBzbWFsbCIgOiAiZW1wdHkgRE1BIHRhYmxlPyIpOworCisJaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOworCisJcmV0dXJuIDA7IC8qIHJldmVydCB0byBQSU8gZm9yIHRoaXMgcmVxdWVzdCAqLworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2J1aWxkX2RtYXRhYmxlKTsKKworLyoqCisgKglpZGVfZG1hX3NldHVwCS0JYmVnaW4gYSBETUEgcGhhc2UKKyAqCUBkcml2ZTogdGFyZ2V0IGRldmljZQorICoKKyAqCUJ1aWxkIGFuIElERSBETUEgUFJEIChJREUgc3BlYWsgZm9yIHNjYXR0ZXIgZ2F0aGVyIHRhYmxlKQorICoJYW5kIHRoZW4gc2V0IHVwIHRoZSBETUEgdHJhbnNmZXIgcmVnaXN0ZXJzIGZvciBhIGRldmljZQorICoJdGhhdCBmb2xsb3dzIGdlbmVyaWMgSURFIFBDSSBETUEgYmVoYXZpb3VyLiBDb250cm9sbGVycyBjYW4KKyAqCW92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaWYgdGhleSBuZWVkIHRvCisgKgorICoJUmV0dXJucyAwIG9uIHN1Y2Nlc3MuIElmIGEgUElPIGZhbGxiYWNrIGlzIHJlcXVpcmVkIHRoZW4gMQorICoJaXMgcmV0dXJuZWQuCisgKi8KKworaW50IGlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5od2dyb3VwLT5ycTsKKwl1bnNpZ25lZCBpbnQgcmVhZGluZzsKKwl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKKwl1OCBkbWFfc3RhdDsKKworCWlmIChycV9kYXRhX2RpcihycSkpCisJCXJlYWRpbmcgPSAwOworCWVsc2UKKwkJcmVhZGluZyA9IDEgPDwgMzsKKworCS8qIGZhbGwgYmFjayB0byBwaW8hICovCisJaWYgKCFpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIHJxKSkgeworCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJCXJldHVybiAxOworCX0KKworCS8qIFBSRCB0YWJsZSAqLworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCisJCXdyaXRlbChod2lmLT5kbWF0YWJsZV9kbWEsCisJCSAgICAgICAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9UQUJMRV9PRlMpKTsKKwllbHNlCisJCW91dGwoaHdpZi0+ZG1hdGFibGVfZG1hLCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfVEFCTEVfT0ZTKTsKKworCS8qIHNwZWNpZnkgci93ICovCisJaWYgKG1taW8pCisJCXdyaXRlYihyZWFkaW5nLCAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKKwllbHNlCisJCW91dGIocmVhZGluZywgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CisKKwkvKiByZWFkIERNQSBzdGF0dXMgZm9yIElOVFIgJiBFUlJPUiBmbGFncyAqLworCWRtYV9zdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3NmZl9kbWFfc3RhdHVzKGh3aWYpOworCisJLyogY2xlYXIgSU5UUiAmIEVSUk9SIGZsYWdzICovCisJaWYgKG1taW8pCisJCXdyaXRlYihkbWFfc3RhdCB8IDYsCisJCSAgICAgICAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpKTsKKwllbHNlCisJCW91dGIoZG1hX3N0YXQgfCA2LCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKKworCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAxOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9zZXR1cCk7CisKKy8qKgorICoJZG1hX3RpbWVyX2V4cGlyeQktCWhhbmRsZSBhIERNQSB0aW1lb3V0CisgKglAZHJpdmU6IERyaXZlIHRoYXQgdGltZWQgb3V0CisgKgorICoJQW4gSURFIERNQSB0cmFuc2ZlciB0aW1lZCBvdXQuIEluIHRoZSBldmVudCBvZiBhbiBlcnJvciB3ZSBhc2sKKyAqCXRoZSBkcml2ZXIgdG8gcmVzb2x2ZSB0aGUgcHJvYmxlbSwgaWYgYSBETUEgdHJhbnNmZXIgaXMgc3RpbGwKKyAqCWluIHByb2dyZXNzIHdlIGNvbnRpbnVlIHRvIHdhaXQgKGFyZ3VhYmx5IHdlIG5lZWQgdG8gYWRkIGEKKyAqCXNlY29uZGFyeSAnSSBkb24ndCBjYXJlIHdoYXQgdGhlIGRyaXZlIHRoaW5rcycgdGltZW91dCBoZXJlKQorICoJRmluYWxseSBpZiB3ZSBoYXZlIGFuIGludGVycnVwdCB3ZSBsZXQgaXQgY29tcGxldGUgdGhlIEkvTy4KKyAqCUJ1dCBvbmx5IG9uZSB0aW1lIC0gd2UgY2xlYXIgZXhwaXJ5IGFuZCBpZiBpdCdzIHN0aWxsIG5vdAorICoJY29tcGxldGVkIGFmdGVyIFdBSVRfQ01ELCB3ZSBlcnJvciBhbmQgcmV0cnkgaW4gUElPLgorICoJVGhpcyBjYW4gb2NjdXIgaWYgYW4gaW50ZXJydXB0IGlzIGxvc3Qgb3IgZHVlIHRvIGhhbmcgb3IgYnVncy4KKyAqLworCitzdGF0aWMgaW50IGRtYV90aW1lcl9leHBpcnkoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1OCBkbWFfc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zZmZfZG1hX3N0YXR1cyhod2lmKTsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlczogRE1BIHN0YXR1cyAoMHglMDJ4KVxuIiwKKwkJZHJpdmUtPm5hbWUsIF9fZnVuY19fLCBkbWFfc3RhdCk7CisKKwlpZiAoKGRtYV9zdGF0ICYgMHgxOCkgPT0gMHgxOCkJLyogQlVTWSBTdHVwaWQgRWFybHkgVGltZXIgISEgKi8KKwkJcmV0dXJuIFdBSVRfQ01EOworCisJaHdpZi0+aHdncm91cC0+ZXhwaXJ5ID0gTlVMTDsJLyogb25lIGZyZWUgcmlkZSBmb3Igbm93ICovCisKKwkvKiAxIGRtYWluZywgMiBlcnJvciwgNCBpbnRyICovCisJaWYgKGRtYV9zdGF0ICYgMikJLyogRVJST1IgKi8KKwkJcmV0dXJuIC0xOworCisJaWYgKGRtYV9zdGF0ICYgMSkJLyogRE1BaW5nICovCisJCXJldHVybiBXQUlUX0NNRDsKKworCWlmIChkbWFfc3RhdCAmIDQpCS8qIEdvdCBhbiBJbnRlcnJ1cHQgKi8KKwkJcmV0dXJuIFdBSVRfQ01EOworCisJcmV0dXJuIDA7CS8qIFN0YXR1cyBpcyB1bmtub3duIC0tIHJlc2V0IHRoZSBidXMgKi8KK30KKwordm9pZCBpZGVfZG1hX2V4ZWNfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY29tbWFuZCkKK3sKKwkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8KKwlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBjb21tYW5kLCAmaWRlX2RtYV9pbnRyLCAyICogV0FJVF9DTUQsCisJCQkgICAgZG1hX3RpbWVyX2V4cGlyeSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX2V4ZWNfY21kKTsKKwordm9pZCBpZGVfZG1hX3N0YXJ0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggZG1hX2NtZDsKKworCS8qIE5vdGUgdGhhdCB0aGlzIGlzIGRvbmUgKmFmdGVyKiB0aGUgY21kIGhhcworCSAqIGJlZW4gaXNzdWVkIHRvIHRoZSBkcml2ZSwgYXMgcGVyIHRoZSBCTS1JREUgc3BlYy4KKwkgKiBUaGUgUHJvbWlzZSBVbHRyYTMzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2hlbgorCSAqIHdlIGRvIHRoaXMgcGFydCBiZWZvcmUgaXNzdWluZyB0aGUgZHJpdmUgY21kLgorCSAqLworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pIHsKKwkJZG1hX2NtZCA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCkpOworCQkvKiBzdGFydCBETUEgKi8KKwkJd3JpdGViKGRtYV9jbWQgfCAxLAorCQkgICAgICAgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKSk7CisJfSBlbHNlIHsKKwkJZG1hX2NtZCA9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKKwkJb3V0YihkbWFfY21kIHwgMSwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CisJfQorCisJd21iKCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX3N0YXJ0KTsKKworLyogcmV0dXJucyAxIG9uIGVycm9yLCAwIG90aGVyd2lzZSAqLworaW50IGlkZV9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CisJdTggZG1hX3N0YXQgPSAwLCBkbWFfY21kID0gMDsKKworCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOworCisJaWYgKG1taW8pIHsKKwkJLyogZ2V0IERNQSBjb21tYW5kIG1vZGUgKi8KKwkJZG1hX2NtZCA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCkpOworCQkvKiBzdG9wIERNQSAqLworCQl3cml0ZWIoZG1hX2NtZCAmIH4xLAorCQkgICAgICAgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKSk7CisJfSBlbHNlIHsKKwkJZG1hX2NtZCA9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKKwkJb3V0YihkbWFfY21kICYgfjEsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOworCX0KKworCS8qIGdldCBETUEgc3RhdHVzICovCisJZG1hX3N0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc2ZmX2RtYV9zdGF0dXMoaHdpZik7CisKKwlpZiAobW1pbykKKwkJLyogY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCisJCXdyaXRlYihkbWFfc3RhdCB8IDYsCisJCSAgICAgICAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpKTsKKwllbHNlCisJCW91dGIoZG1hX3N0YXQgfCA2LCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKKworCS8qIHB1cmdlIERNQSBtYXBwaW5ncyAqLworCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKKwkvKiB2ZXJpZnkgZ29vZCBETUEgc3RhdHVzICovCisJd21iKCk7CisJcmV0dXJuIChkbWFfc3RhdCAmIDcpICE9IDQgPyAoMHgxMCB8IGRtYV9zdGF0KSA6IDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX2VuZCk7CisKKy8qIHJldHVybnMgMSBpZiBkbWEgaXJxIGlzc3VlZCwgMCBvdGhlcndpc2UgKi8KK2ludCBpZGVfZG1hX3Rlc3RfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggZG1hX3N0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc2ZmX2RtYV9zdGF0dXMoaHdpZik7CisKKwkvKiByZXR1cm4gMSBpZiBJTlRSIGFzc2VydGVkICovCisJaWYgKChkbWFfc3RhdCAmIDQpID09IDQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX3Rlc3RfaXJxKTsKKworY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNmZl9kbWFfb3BzID0geworCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKKwkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCisJLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAorCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKKwkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKKwkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCisJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKKwkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc2ZmX2RtYV9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCmluZGV4IGVmMmYxNTAuLmZmZmQxMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKQEAgLTI4LDI0ICsyOCwxMyBAQAogICogZm9yIHN1cHBseWluZyBhIFByb21pc2UgVURNQSBib2FyZCAmIFdEIFVETUEgZHJpdmUgZm9yIHRoaXMgd29yayEKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlX2xpc3RfZW50cnkgZHJpdmVfd2hpdGVsaXN0IFtdID0gewotCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlX2xpc3RfZW50cnkgZHJpdmVfd2hpdGVsaXN0W10gPSB7CiAJeyAiTWljcm9wb2xpcyAyMTEyQSIJLCAgICAgICBOVUxMCQl9LAogCXsgIkNPTk5FUiBDVE1BIDQwMDAiCSwgICAgICAgTlVMTAkJfSwKIAl7ICJDT05ORVIgQ1RUODAwMC1BIgksICAgICAgIE5VTEwJCX0sCkBAIC01Myw4ICs0Miw3IEBACiAJeyBOVUxMCQkJLAlOVUxMCQl9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlX2xpc3RfZW50cnkgZHJpdmVfYmxhY2tsaXN0IFtdID0gewotCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlX2xpc3RfZW50cnkgZHJpdmVfYmxhY2tsaXN0W10gPSB7CiAJeyAiV0RDIEFDMTEwMDBIIgksCU5VTEwgCQl9LAogCXsgIldEQyBBQzIyMTAwSCIJLAlOVUxMIAkJfSwKIAl7ICJXREMgQUMzMjUwMEgiCSwJTlVMTCAJCX0sCkBAIC05NCwxMSArODIsMTEgQEAKICAqCWlkZV9kbWFfaW50cgktCUlERSBETUEgaW50ZXJydXB0IGhhbmRsZXIKICAqCUBkcml2ZTogdGhlIGRyaXZlIHRoZSBpbnRlcnJ1cHQgaXMgZm9yCiAgKgotICoJSGFuZGxlIGFuIGludGVycnVwdCBjb21wbGV0aW5nIGEgcmVhZC93cml0ZSBETUEgdHJhbnNmZXIgb24gYW4gCisgKglIYW5kbGUgYW4gaW50ZXJydXB0IGNvbXBsZXRpbmcgYSByZWFkL3dyaXRlIERNQSB0cmFuc2ZlciBvbiBhbgogICoJSURFIGRldmljZQogICovCi0gCi1pZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV9pbnRyIChpZGVfZHJpdmVfdCAqZHJpdmUpCisKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG1hX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1OCBzdGF0ID0gMCwgZG1hX3N0YXQgPSAwOwpAQCAtMTA4LDIwICs5NiwxOSBAQAogCiAJaWYgKE9LX1NUQVQoc3RhdCwgRFJJVkVfUkVBRFksIGRyaXZlLT5iYWRfd3N0YXQgfCBBVEFfRFJRKSkgewogCQlpZiAoIWRtYV9zdGF0KSB7Ci0JCQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7CisJCQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5od2dyb3VwLT5ycTsKIAogCQkJdGFza19lbmRfcmVxdWVzdChkcml2ZSwgcnEsIHN0YXQpOwogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRtYV9pbnRyOiBiYWQgRE1BIHN0YXR1cyAoZG1hX3N0YXQ9JXgpXG4iLCAKLQkJICAgICAgIGRyaXZlLT5uYW1lLCBkbWFfc3RhdCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBiYWQgRE1BIHN0YXR1cyAoMHglMDJ4KVxuIiwKKwkJCWRyaXZlLT5uYW1lLCBfX2Z1bmNfXywgZG1hX3N0YXQpOwogCX0KIAlyZXR1cm4gaWRlX2Vycm9yKGRyaXZlLCAiZG1hX2ludHIiLCBzdGF0KTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9pbnRyKTsKIAotc3RhdGljIGludCBpZGVfZG1hX2dvb2RfZHJpdmUoaWRlX2RyaXZlX3QgKmRyaXZlKQoraW50IGlkZV9kbWFfZ29vZF9kcml2ZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJcmV0dXJuIGlkZV9pbl9kcml2ZV9saXN0KGRyaXZlLT5pZCwgZHJpdmVfd2hpdGVsaXN0KTsKIH0KQEAgLTEzOSw3ICsxMjYsNyBAQAogCiBpbnQgaWRlX2J1aWxkX3NnbGlzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBod2lmLT5zZ190YWJsZTsKIAogCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKQEAgLTE1MiwxMDYgKzEzOSw4IEBACiAJcmV0dXJuIGRtYV9tYXBfc2coaHdpZi0+ZGV2LCBzZywgaHdpZi0+c2dfbmVudHMsCiAJCQkgIGh3aWYtPnNnX2RtYV9kaXJlY3Rpb24pOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfYnVpbGRfc2dsaXN0KTsKIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQV9TRkYKLS8qKgotICoJaWRlX2J1aWxkX2RtYXRhYmxlCS0JYnVpbGQgSURFIERNQSB0YWJsZQotICoKLSAqCWlkZV9idWlsZF9kbWF0YWJsZSgpIHByZXBhcmVzIGEgZG1hIHJlcXVlc3QuIFdlIG1hcCB0aGUgY29tbWFuZAotICoJdG8gZ2V0IHRoZSBwY2kgYnVzIGFkZHJlc3NlcyBvZiB0aGUgYnVmZmVycyBhbmQgdGhlbiBidWlsZCB1cAotICoJdGhlIFBSRCB0YWJsZSB0aGF0IHRoZSBJREUgbGF5ZXIgd2FudHMgdG8gYmUgZmVkLiBUaGUgY29kZQotICoJa25vd3MgYWJvdXQgdGhlIDY0SyB3cmFwIGJ1ZyBpbiB0aGUgQ1M1NTMwLgotICoKLSAqCVJldHVybnMgdGhlIG51bWJlciBvZiBidWlsdCBQUkQgZW50cmllcyBpZiBhbGwgd2VudCBva2F5LAotICoJcmV0dXJucyAwIG90aGVyd2lzZS4KLSAqCi0gKglNYXkgYWxzbyBiZSBpbnZva2VkIGZyb20gdHJtMjkwLmMKLSAqLwotIAotaW50IGlkZV9idWlsZF9kbWF0YWJsZSAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCV9fbGUzMiAqdGFibGUgPSAoX19sZTMyICopaHdpZi0+ZG1hdGFibGVfY3B1OwotCXVuc2lnbmVkIGludCBpc190cm0yOTAJPSAoaHdpZi0+Y2hpcHNldCA9PSBpZGVfdHJtMjkwKSA/IDEgOiAwOwotCXVuc2lnbmVkIGludCBjb3VudCA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQotCWh3aWYtPnNnX25lbnRzID0gaSA9IGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIHJxKTsKLQotCWlmICghaSkKLQkJcmV0dXJuIDA7Ci0KLQlzZyA9IGh3aWYtPnNnX3RhYmxlOwotCXdoaWxlIChpKSB7Ci0JCXUzMiBjdXJfYWRkcjsKLQkJdTMyIGN1cl9sZW47Ci0KLQkJY3VyX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7Ci0JCWN1cl9sZW4gPSBzZ19kbWFfbGVuKHNnKTsKLQotCQkvKgotCQkgKiBGaWxsIGluIHRoZSBkbWEgdGFibGUsIHdpdGhvdXQgY3Jvc3NpbmcgYW55IDY0a0IgYm91bmRhcmllcy4KLQkJICogTW9zdCBoYXJkd2FyZSByZXF1aXJlcyAxNi1iaXQgYWxpZ25tZW50IG9mIGFsbCBibG9ja3MsCi0JCSAqIGJ1dCB0aGUgdHJtMjkwIHJlcXVpcmVzIDMyLWJpdCBhbGlnbm1lbnQuCi0JCSAqLwotCi0JCXdoaWxlIChjdXJfbGVuKSB7Ci0JCQlpZiAoY291bnQrKyA+PSBQUkRfRU5UUklFUykgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IERNQSB0YWJsZSB0b28gc21hbGxcbiIsIGRyaXZlLT5uYW1lKTsKLQkJCQlnb3RvIHVzZV9waW9faW5zdGVhZDsKLQkJCX0gZWxzZSB7Ci0JCQkJdTMyIHhjb3VudCwgYmNvdW50ID0gMHgxMDAwMCAtIChjdXJfYWRkciAmIDB4ZmZmZik7Ci0KLQkJCQlpZiAoYmNvdW50ID4gY3VyX2xlbikKLQkJCQkJYmNvdW50ID0gY3VyX2xlbjsKLQkJCQkqdGFibGUrKyA9IGNwdV90b19sZTMyKGN1cl9hZGRyKTsKLQkJCQl4Y291bnQgPSBiY291bnQgJiAweGZmZmY7Ci0JCQkJaWYgKGlzX3RybTI5MCkKLQkJCQkJeGNvdW50ID0gKCh4Y291bnQgPj4gMikgLSAxKSA8PCAxNjsKLQkJCQllbHNlIGlmICh4Y291bnQgPT0gMHgwMDAwKSB7Ci0JLyogCi0JICogTW9zdCBjaGlwc2V0cyBjb3JyZWN0bHkgaW50ZXJwcmV0IGEgbGVuZ3RoIG9mIDB4MDAwMCBhcyA2NEtCLAotCSAqIGJ1dCBhdCBsZWFzdCBvbmUgKGUuZy4gQ1M1NTMwKSBtaXNpbnRlcnByZXRzIGl0IGFzIHplcm8gKCEpLgotCSAqIFNvIGhlcmUgd2UgYnJlYWsgdGhlIDY0S0IgZW50cnkgaW50byB0d28gMzJLQiBlbnRyaWVzIGluc3RlYWQuCi0JICovCi0JCQkJCWlmIChjb3VudCsrID49IFBSRF9FTlRSSUVTKSB7Ci0JCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBETUEgdGFibGUgdG9vIHNtYWxsXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCQkJCQlnb3RvIHVzZV9waW9faW5zdGVhZDsKLQkJCQkJfQotCQkJCQkqdGFibGUrKyA9IGNwdV90b19sZTMyKDB4ODAwMCk7Ci0JCQkJCSp0YWJsZSsrID0gY3B1X3RvX2xlMzIoY3VyX2FkZHIgKyAweDgwMDApOwotCQkJCQl4Y291bnQgPSAweDgwMDA7Ci0JCQkJfQotCQkJCSp0YWJsZSsrID0gY3B1X3RvX2xlMzIoeGNvdW50KTsKLQkJCQljdXJfYWRkciArPSBiY291bnQ7Ci0JCQkJY3VyX2xlbiAtPSBiY291bnQ7Ci0JCQl9Ci0JCX0KLQotCQlzZyA9IHNnX25leHQoc2cpOwotCQlpLS07Ci0JfQotCi0JaWYgKGNvdW50KSB7Ci0JCWlmICghaXNfdHJtMjkwKQotCQkJKi0tdGFibGUgfD0gY3B1X3RvX2xlMzIoMHg4MDAwMDAwMCk7Ci0JCXJldHVybiBjb3VudDsKLQl9Ci0KLQlwcmludGsoS0VSTl9FUlIgIiVzOiBlbXB0eSBETUEgdGFibGU/XG4iLCBkcml2ZS0+bmFtZSk7Ci0KLXVzZV9waW9faW5zdGVhZDoKLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7Ci0KLQlyZXR1cm4gMDsgLyogcmV2ZXJ0IHRvIFBJTyBmb3IgdGhpcyByZXF1ZXN0ICovCi19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9idWlsZF9kbWF0YWJsZSk7Ci0jZW5kaWYKLQogLyoqCiAgKglpZGVfZGVzdHJveV9kbWF0YWJsZQktCWNsZWFuIHVwIERNQSBtYXBwaW5nCiAgKglAZHJpdmU6IFRoZSBkcml2ZSB0byB1bm1hcApAQCAtMjYyLDE0NyArMTUxLDMwIEBACiAgKglhbiBvb3BzIGFzIG9ubHkgb25lIG1hcHBpbmcgY2FuIGJlIGxpdmUgZm9yIGVhY2ggdGFyZ2V0IGF0IGEgZ2l2ZW4KICAqCXRpbWUuCiAgKi8KLSAKLXZvaWQgaWRlX2Rlc3Ryb3lfZG1hdGFibGUgKGlkZV9kcml2ZV90ICpkcml2ZSkKKwordm9pZCBpZGVfZGVzdHJveV9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCiAJZG1hX3VubWFwX3NnKGh3aWYtPmRldiwgaHdpZi0+c2dfdGFibGUsIGh3aWYtPnNnX25lbnRzLAogCQkgICAgIGh3aWYtPnNnX2RtYV9kaXJlY3Rpb24pOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfZGVzdHJveV9kbWF0YWJsZSk7CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGCi0vKioKLSAqCWNvbmZpZ19kcml2ZV9mb3JfZG1hCS0JYXR0ZW1wdCB0byBhY3RpdmF0ZSBJREUgRE1BCi0gKglAZHJpdmU6IHRoZSBkcml2ZSB0byBwbGFjZSBpbiBETUEgbW9kZQotICoKLSAqCUlmIHRoZSBkcml2ZSBzdXBwb3J0cyBhdCBsZWFzdCBtb2RlIDIgRE1BIG9yIFVETUEgb2YgYW55IGtpbmQKLSAqCXRoZW4gYXR0ZW1wdCB0byBwbGFjZSBpdCBpbnRvIERNQSBtb2RlLiBEcml2ZXMgdGhhdCBhcmUga25vd24gdG8KLSAqCXN1cHBvcnQgRE1BIGJ1dCBwcmVkYXRlIHRoZSBETUEgcHJvcGVydGllcyBvciB0aGF0IGFyZSBrbm93bgotICoJdG8gaGF2ZSBETUEgaGFuZGxpbmcgYnVncyBhcmUgYWxzbyBzZXQgdXAgYXBwcm9wcmlhdGVseSBiYXNlZAotICoJb24gdGhlIGdvb2QvYmFkIGRyaXZlIGxpc3RzLgotICovCi0gCi1zdGF0aWMgaW50IGNvbmZpZ19kcml2ZV9mb3JfZG1hIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXUxNiAqaWQgPSBkcml2ZS0+aWQ7Ci0KLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKSB7Ci0JCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0FUQVBJX0RNQSkKLQkJCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogRW5hYmxlIERNQSBvbiBhbnkgZHJpdmUgdGhhdCBoYXMKLQkgKiBVbHRyYURNQSAobW9kZSAwLzEvMi8zLzQvNS82KSBlbmFibGVkCi0JICovCi0JaWYgKChpZFtBVEFfSURfRklFTERfVkFMSURdICYgNCkgJiYKLQkgICAgKChpZFtBVEFfSURfVURNQV9NT0RFU10gPj4gOCkgJiAweDdmKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKgotCSAqIEVuYWJsZSBETUEgb24gYW55IGRyaXZlIHRoYXQgaGFzIG1vZGUyIERNQQotCSAqIChtdWx0aSBvciBzaW5nbGUpIGVuYWJsZWQKLQkgKi8KLQlpZiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpCS8qIHJlZ3VsYXIgRE1BICovCi0JCWlmICgoaWRbQVRBX0lEX01XRE1BX01PREVTXSAmIDB4NDA0KSA9PSAweDQwNCB8fAotCQkgICAgKGlkW0FUQV9JRF9TV0RNQV9NT0RFU10gJiAweDQwNCkgPT0gMHg0MDQpCi0JCQlyZXR1cm4gMTsKLQotCS8qIENvbnN1bHQgdGhlIGxpc3Qgb2Yga25vd24gImdvb2QiIGRyaXZlcyAqLwotCWlmIChpZGVfZG1hX2dvb2RfZHJpdmUoZHJpdmUpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCWRtYV90aW1lcl9leHBpcnkJLQloYW5kbGUgYSBETUEgdGltZW91dAotICoJQGRyaXZlOiBEcml2ZSB0aGF0IHRpbWVkIG91dAotICoKLSAqCUFuIElERSBETUEgdHJhbnNmZXIgdGltZWQgb3V0LiBJbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3Igd2UgYXNrCi0gKgl0aGUgZHJpdmVyIHRvIHJlc29sdmUgdGhlIHByb2JsZW0sIGlmIGEgRE1BIHRyYW5zZmVyIGlzIHN0aWxsCi0gKglpbiBwcm9ncmVzcyB3ZSBjb250aW51ZSB0byB3YWl0IChhcmd1YWJseSB3ZSBuZWVkIHRvIGFkZCBhIAotICoJc2Vjb25kYXJ5ICdJIGRvbid0IGNhcmUgd2hhdCB0aGUgZHJpdmUgdGhpbmtzJyB0aW1lb3V0IGhlcmUpCi0gKglGaW5hbGx5IGlmIHdlIGhhdmUgYW4gaW50ZXJydXB0IHdlIGxldCBpdCBjb21wbGV0ZSB0aGUgSS9PLgotICoJQnV0IG9ubHkgb25lIHRpbWUgLSB3ZSBjbGVhciBleHBpcnkgYW5kIGlmIGl0J3Mgc3RpbGwgbm90Ci0gKgljb21wbGV0ZWQgYWZ0ZXIgV0FJVF9DTUQsIHdlIGVycm9yIGFuZCByZXRyeSBpbiBQSU8uCi0gKglUaGlzIGNhbiBvY2N1ciBpZiBhbiBpbnRlcnJ1cHQgaXMgbG9zdCBvciBkdWUgdG8gaGFuZyBvciBidWdzLgotICovCi0gCi1zdGF0aWMgaW50IGRtYV90aW1lcl9leHBpcnkgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JdTggZG1hX3N0YXQJCT0gaHdpZi0+dHBfb3BzLT5yZWFkX3NmZl9kbWFfc3RhdHVzKGh3aWYpOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRtYV90aW1lcl9leHBpcnk6IGRtYSBzdGF0dXMgPT0gMHglMDJ4XG4iLAotCQlkcml2ZS0+bmFtZSwgZG1hX3N0YXQpOwotCi0JaWYgKChkbWFfc3RhdCAmIDB4MTgpID09IDB4MTgpCS8qIEJVU1kgU3R1cGlkIEVhcmx5IFRpbWVyICEhICovCi0JCXJldHVybiBXQUlUX0NNRDsKLQotCUhXR1JPVVAoZHJpdmUpLT5leHBpcnkgPSBOVUxMOwkvKiBvbmUgZnJlZSByaWRlIGZvciBub3cgKi8KLQotCS8qIDEgZG1haW5nLCAyIGVycm9yLCA0IGludHIgKi8KLQlpZiAoZG1hX3N0YXQgJiAyKQkvKiBFUlJPUiAqLwotCQlyZXR1cm4gLTE7Ci0KLQlpZiAoZG1hX3N0YXQgJiAxKQkvKiBETUFpbmcgKi8KLQkJcmV0dXJuIFdBSVRfQ01EOwotCi0JaWYgKGRtYV9zdGF0ICYgNCkJLyogR290IGFuIEludGVycnVwdCAqLwotCQlyZXR1cm4gV0FJVF9DTUQ7Ci0KLQlyZXR1cm4gMDsJLyogU3RhdHVzIGlzIHVua25vd24gLS0gcmVzZXQgdGhlIGJ1cyAqLwotfQotCi0vKioKLSAqCWlkZV9kbWFfaG9zdF9zZXQJLQlFbmFibGUvZGlzYWJsZSBETUEgb24gYSBob3N0Ci0gKglAZHJpdmU6IGRyaXZlIHRvIGNvbnRyb2wKLSAqCi0gKglFbmFibGUvZGlzYWJsZSBETUEgb24gYW4gSURFIGNvbnRyb2xsZXIgZm9sbG93aW5nIGdlbmVyaWMKLSAqCWJ1cy1tYXN0ZXJpbmcgSURFIGNvbnRyb2xsZXIgYmVoYXZpb3VyLgotICovCi0KLXZvaWQgaWRlX2RtYV9ob3N0X3NldChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBvbikKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JdTggdW5pdAkJCT0gKGRyaXZlLT5zZWxlY3QuYi51bml0ICYgMHgwMSk7Ci0JdTggZG1hX3N0YXQJCT0gaHdpZi0+dHBfb3BzLT5yZWFkX3NmZl9kbWFfc3RhdHVzKGh3aWYpOwotCi0JaWYgKG9uKQotCQlkbWFfc3RhdCB8PSAoMSA8PCAoNSArIHVuaXQpKTsKLQllbHNlCi0JCWRtYV9zdGF0ICY9IH4oMSA8PCAoNSArIHVuaXQpKTsKLQotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCi0JCXdyaXRlYihkbWFfc3RhdCwKLQkJICAgICAgICh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUykpOwotCWVsc2UKLQkJb3V0YihkbWFfc3RhdCwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfaG9zdF9zZXQpOwotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQV9TRkYgICovCi0KIC8qKgogICoJaWRlX2RtYV9vZmZfcXVpZXRseQktCUdlbmVyaWMgRE1BIGtpbGwKICAqCUBkcml2ZTogZHJpdmUgdG8gY29udHJvbAogICoKLSAqCVR1cm4gb2ZmIHRoZSBjdXJyZW50IERNQSBvbiB0aGlzIElERSBjb250cm9sbGVyLiAKKyAqCVR1cm4gb2ZmIHRoZSBjdXJyZW50IERNQSBvbiB0aGlzIElERSBjb250cm9sbGVyLgogICovCiAKIHZvaWQgaWRlX2RtYV9vZmZfcXVpZXRseShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JZHJpdmUtPnVzaW5nX2RtYSA9IDA7CisJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VTSU5HX0RNQTsKIAlpZGVfdG9nZ2xlX2JvdW5jZShkcml2ZSwgMCk7CiAKIAlkcml2ZS0+aHdpZi0+ZG1hX29wcy0+ZG1hX2hvc3Rfc2V0KGRyaXZlLCAwKTsKIH0KLQogRVhQT1JUX1NZTUJPTChpZGVfZG1hX29mZl9xdWlldGx5KTsKIAogLyoqCkBAIC00MTgsNyArMTkwLDYgQEAKIAlwcmludGsoS0VSTl9JTkZPICIlczogRE1BIGRpc2FibGVkXG4iLCBkcml2ZS0+bmFtZSk7CiAJaWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woaWRlX2RtYV9vZmYpOwogCiAvKioKQEAgLTQzMCwxNjcgKzIwMSwxMyBAQAogCiB2b2lkIGlkZV9kbWFfb24oaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWRyaXZlLT51c2luZ19kbWEgPSAxOworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1VTSU5HX0RNQTsKIAlpZGVfdG9nZ2xlX2JvdW5jZShkcml2ZSwgMSk7CiAKIAlkcml2ZS0+aHdpZi0+ZG1hX29wcy0+ZG1hX2hvc3Rfc2V0KGRyaXZlLCAxKTsKIH0KIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQV9TRkYKLS8qKgotICoJaWRlX2RtYV9zZXR1cAktCWJlZ2luIGEgRE1BIHBoYXNlCi0gKglAZHJpdmU6IHRhcmdldCBkZXZpY2UKLSAqCi0gKglCdWlsZCBhbiBJREUgRE1BIFBSRCAoSURFIHNwZWFrIGZvciBzY2F0dGVyIGdhdGhlciB0YWJsZSkKLSAqCWFuZCB0aGVuIHNldCB1cCB0aGUgRE1BIHRyYW5zZmVyIHJlZ2lzdGVycyBmb3IgYSBkZXZpY2UKLSAqCXRoYXQgZm9sbG93cyBnZW5lcmljIElERSBQQ0kgRE1BIGJlaGF2aW91ci4gQ29udHJvbGxlcnMgY2FuCi0gKglvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGlmIHRoZXkgbmVlZCB0bwotICoKLSAqCVJldHVybnMgMCBvbiBzdWNjZXNzLiBJZiBhIFBJTyBmYWxsYmFjayBpcyByZXF1aXJlZCB0aGVuIDEKLSAqCWlzIHJldHVybmVkLiAKLSAqLwotCi1pbnQgaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKLQl1bnNpZ25lZCBpbnQgcmVhZGluZzsKLQl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQl1OCBkbWFfc3RhdDsKLQotCWlmIChycV9kYXRhX2RpcihycSkpCi0JCXJlYWRpbmcgPSAwOwotCWVsc2UKLQkJcmVhZGluZyA9IDEgPDwgMzsKLQotCS8qIGZhbGwgYmFjayB0byBwaW8hICovCi0JaWYgKCFpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIHJxKSkgewotCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7Ci0JCXJldHVybiAxOwotCX0KLQotCS8qIFBSRCB0YWJsZSAqLwotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCi0JCXdyaXRlbChod2lmLT5kbWF0YWJsZV9kbWEsCi0JCSAgICAgICAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9UQUJMRV9PRlMpKTsKLQllbHNlCi0JCW91dGwoaHdpZi0+ZG1hdGFibGVfZG1hLCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfVEFCTEVfT0ZTKTsKLQotCS8qIHNwZWNpZnkgci93ICovCi0JaWYgKG1taW8pCi0JCXdyaXRlYihyZWFkaW5nLCAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKLQllbHNlCi0JCW91dGIocmVhZGluZywgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7Ci0KLQkvKiByZWFkIERNQSBzdGF0dXMgZm9yIElOVFIgJiBFUlJPUiBmbGFncyAqLwotCWRtYV9zdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3NmZl9kbWFfc3RhdHVzKGh3aWYpOwotCi0JLyogY2xlYXIgSU5UUiAmIEVSUk9SIGZsYWdzICovCi0JaWYgKG1taW8pCi0JCXdyaXRlYihkbWFfc3RhdCB8IDYsCi0JCSAgICAgICAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpKTsKLQllbHNlCi0JCW91dGIoZG1hX3N0YXQgfCA2LCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKLQotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAxOwotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX3NldHVwKTsKLQotdm9pZCBpZGVfZG1hX2V4ZWNfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY29tbWFuZCkKLXsKLQkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8KLQlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBjb21tYW5kLCAmaWRlX2RtYV9pbnRyLCAyKldBSVRfQ01ELCBkbWFfdGltZXJfZXhwaXJ5KTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfZXhlY19jbWQpOwotCi12b2lkIGlkZV9kbWFfc3RhcnQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1OCBkbWFfY21kOwotCi0JLyogTm90ZSB0aGF0IHRoaXMgaXMgZG9uZSAqYWZ0ZXIqIHRoZSBjbWQgaGFzCi0JICogYmVlbiBpc3N1ZWQgdG8gdGhlIGRyaXZlLCBhcyBwZXIgdGhlIEJNLUlERSBzcGVjLgotCSAqIFRoZSBQcm9taXNlIFVsdHJhMzMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aGVuCi0JICogd2UgZG8gdGhpcyBwYXJ0IGJlZm9yZSBpc3N1aW5nIHRoZSBkcml2ZSBjbWQuCi0JICovCi0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgewotCQlkbWFfY21kID0gcmVhZGIoKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKSk7Ci0JCS8qIHN0YXJ0IERNQSAqLwotCQl3cml0ZWIoZG1hX2NtZCB8IDEsCi0JCSAgICAgICAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKLQl9IGVsc2UgewotCQlkbWFfY21kID0gaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOwotCQlvdXRiKGRtYV9jbWQgfCAxLCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKLQl9Ci0KLQlod2lmLT5kbWEgPSAxOwotCXdtYigpOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX3N0YXJ0KTsKLQotLyogcmV0dXJucyAxIG9uIGVycm9yLCAwIG90aGVyd2lzZSAqLwotaW50IF9faWRlX2RtYV9lbmQgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7Ci0JdTggZG1hX3N0YXQgPSAwLCBkbWFfY21kID0gMDsKLQotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwotCi0JaWYgKG1taW8pIHsKLQkJLyogZ2V0IERNQSBjb21tYW5kIG1vZGUgKi8KLQkJZG1hX2NtZCA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCkpOwotCQkvKiBzdG9wIERNQSAqLwotCQl3cml0ZWIoZG1hX2NtZCAmIH4xLAotCQkgICAgICAgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKSk7Ci0JfSBlbHNlIHsKLQkJZG1hX2NtZCA9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKLQkJb3V0YihkbWFfY21kICYgfjEsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOwotCX0KLQotCS8qIGdldCBETUEgc3RhdHVzICovCi0JZG1hX3N0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc2ZmX2RtYV9zdGF0dXMoaHdpZik7Ci0KLQlpZiAobW1pbykKLQkJLyogY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCi0JCXdyaXRlYihkbWFfc3RhdCB8IDYsCi0JCSAgICAgICAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpKTsKLQllbHNlCi0JCW91dGIoZG1hX3N0YXQgfCA2LCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKLQotCS8qIHB1cmdlIERNQSBtYXBwaW5ncyAqLwotCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKLQkvKiB2ZXJpZnkgZ29vZCBETUEgc3RhdHVzICovCi0JaHdpZi0+ZG1hID0gMDsKLQl3bWIoKTsKLQlyZXR1cm4gKGRtYV9zdGF0ICYgNykgIT0gNCA/ICgweDEwIHwgZG1hX3N0YXQpIDogMDsKLX0KLQotRVhQT1JUX1NZTUJPTChfX2lkZV9kbWFfZW5kKTsKLQotLyogcmV0dXJucyAxIGlmIGRtYSBpcnEgaXNzdWVkLCAwIG90aGVyd2lzZSAqLwotaW50IGlkZV9kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQl1OCBkbWFfc3RhdAkJPSBod2lmLT50cF9vcHMtPnJlYWRfc2ZmX2RtYV9zdGF0dXMoaHdpZik7Ci0KLQkvKiByZXR1cm4gMSBpZiBJTlRSIGFzc2VydGVkICovCi0JaWYgKChkbWFfc3RhdCAmIDQpID09IDQpCi0JCXJldHVybiAxOwotCWlmICghZHJpdmUtPndhaXRpbmdfZm9yX2RtYSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICglcykgY2FsbGVkIHdoaWxlIG5vdCB3YWl0aW5nXG4iLAotCQkJZHJpdmUtPm5hbWUsIF9fZnVuY19fKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfdGVzdF9pcnEpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGNvbmZpZ19kcml2ZV9mb3JfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gMDsgfQotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQV9TRkYgKi8KLQotaW50IF9faWRlX2RtYV9iYWRfZHJpdmUgKGlkZV9kcml2ZV90ICpkcml2ZSkKK2ludCBfX2lkZV9kbWFfYmFkX2RyaXZlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAl1MTYgKmlkID0gZHJpdmUtPmlkOwogCkBAIC02MDIsNyArMjE5LDYgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KIEVYUE9SVF9TWU1CT0woX19pZGVfZG1hX2JhZF9kcml2ZSk7CiAKIHN0YXRpYyBjb25zdCB1OCB4ZmVyX21vZGVfYmFzZXNbXSA9IHsKQEAgLTYxOCw3ICsyMzQsNyBAQAogCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwogCi0Jc3dpdGNoKGJhc2UpIHsKKwlzd2l0Y2ggKGJhc2UpIHsKIAljYXNlIFhGRVJfVURNQV8wOgogCQlpZiAoKGlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiA0KSA9PSAwKQogCQkJYnJlYWs7CkBAIC03MTksNyArMzM1LDYgQEAKIAogCXJldHVybiBtb2RlOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfZmluZF9kbWFfbW9kZSk7CiAKIHN0YXRpYyBpbnQgaWRlX3R1bmVfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTcyNyw3ICszNDIsOCBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1OCBzcGVlZDsKIAotCWlmIChkcml2ZS0+bm9kbWEgfHwgYXRhX2lkX2hhc19kbWEoZHJpdmUtPmlkKSA9PSAwKQorCWlmIChhdGFfaWRfaGFzX2RtYShkcml2ZS0+aWQpID09IDAgfHwKKwkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9ETUEpKQogCQlyZXR1cm4gMDsKIAogCS8qIGNvbnN1bHQgdGhlIGxpc3Qgb2Yga25vd24gImJhZCIgZHJpdmVzICovCkBAIC04MjcsNjYgKzQ0Myw1OSBAQAogCQlpZGVfZG1hX29uKGRyaXZlKTsKIH0KIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQV9TRkYKLXZvaWQgaWRlX2RtYV9sb3N0X2lycSAoaWRlX2RyaXZlX3QgKmRyaXZlKQordm9pZCBpZGVfZG1hX2xvc3RfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlwcmludGsoIiVzOiBETUEgaW50ZXJydXB0IHJlY292ZXJ5XG4iLCBkcml2ZS0+bmFtZSk7CisJcHJpbnRrKEtFUk5fRVJSICIlczogRE1BIGludGVycnVwdCByZWNvdmVyeVxuIiwgZHJpdmUtPm5hbWUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9sb3N0X2lycSk7CiAKLUVYUE9SVF9TWU1CT0woaWRlX2RtYV9sb3N0X2lycSk7Ci0KLXZvaWQgaWRlX2RtYV90aW1lb3V0IChpZGVfZHJpdmVfdCAqZHJpdmUpCit2b2lkIGlkZV9kbWFfdGltZW91dChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAogCXByaW50ayhLRVJOX0VSUiAiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgRE1BXG4iLCBkcml2ZS0+bmFtZSk7CiAKIAlpZiAoaHdpZi0+ZG1hX29wcy0+ZG1hX3Rlc3RfaXJxKGRyaXZlKSkKIAkJcmV0dXJuOwogCisJaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCAiRE1BIHRpbWVvdXQiLCBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpKTsKKwogCWh3aWYtPmRtYV9vcHMtPmRtYV9lbmQoZHJpdmUpOwogfQotCi1FWFBPUlRfU1lNQk9MKGlkZV9kbWFfdGltZW91dCk7CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX3RpbWVvdXQpOwogCiB2b2lkIGlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlpZiAoaHdpZi0+ZG1hdGFibGVfY3B1KSB7Ci0JCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOworCQlpbnQgcHJkX3NpemUgPSBod2lmLT5wcmRfbWF4X25lbnRzICogaHdpZi0+cHJkX2VudF9zaXplOwogCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgUFJEX0VOVFJJRVMgKiBQUkRfQllURVMsCi0JCQkJICAgIGh3aWYtPmRtYXRhYmxlX2NwdSwgaHdpZi0+ZG1hdGFibGVfZG1hKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoaHdpZi0+ZGV2LCBwcmRfc2l6ZSwKKwkJCQkgIGh3aWYtPmRtYXRhYmxlX2NwdSwgaHdpZi0+ZG1hdGFibGVfZG1hKTsKIAkJaHdpZi0+ZG1hdGFibGVfY3B1ID0gTlVMTDsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVsZWFzZV9kbWFfZW5naW5lKTsKIAogaW50IGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CisJaW50IHByZF9zaXplOwogCi0JaHdpZi0+ZG1hdGFibGVfY3B1ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwKLQkJCQkJCSAgUFJEX0VOVFJJRVMgKiBQUkRfQllURVMsCi0JCQkJCQkgICZod2lmLT5kbWF0YWJsZV9kbWEpOworCWlmIChod2lmLT5wcmRfbWF4X25lbnRzID09IDApCisJCWh3aWYtPnByZF9tYXhfbmVudHMgPSBQUkRfRU5UUklFUzsKKwlpZiAoaHdpZi0+cHJkX2VudF9zaXplID09IDApCisJCWh3aWYtPnByZF9lbnRfc2l6ZSA9IFBSRF9CWVRFUzsKIAotCWlmIChod2lmLT5kbWF0YWJsZV9jcHUpCi0JCXJldHVybiAwOworCXByZF9zaXplID0gaHdpZi0+cHJkX21heF9uZW50cyAqIGh3aWYtPnByZF9lbnRfc2l6ZTsKIAotCXByaW50ayhLRVJOX0VSUiAiJXM6IC0tIEVycm9yLCB1bmFibGUgdG8gYWxsb2NhdGUgRE1BIHRhYmxlLlxuIiwKKwlod2lmLT5kbWF0YWJsZV9jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQoaHdpZi0+ZGV2LCBwcmRfc2l6ZSwKKwkJCQkJCSZod2lmLT5kbWF0YWJsZV9kbWEsCisJCQkJCQlHRlBfQVRPTUlDKTsKKwlpZiAoaHdpZi0+ZG1hdGFibGVfY3B1ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGFsbG9jYXRlIFBSRCB0YWJsZVxuIiwKIAkJCWh3aWYtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKTsKLQotY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNmZl9kbWFfb3BzID0gewotCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKLQkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAotCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKLQkuZG1hX2VuZAkJPSBfX2lkZV9kbWFfZW5kLAotCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAotCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChzZmZfZG1hX29wcyk7Ci0jZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCmluZGV4IGQzNmYxNTUuLmFlYjFhZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKQEAgLTE1LDExICsxNSw2IEBACiAgKiBEb2N1bWVudGF0aW9uL2lkZS9DaGFuZ2VMb2cuaWRlLWZsb3BweS4xOTk2LTIwMDIKICAqLwogCi0jZGVmaW5lIERSVl9OQU1FICJpZGUtZmxvcHB5IgotCi0jZGVmaW5lIElERUZMT1BQWV9WRVJTSU9OICIxLjAwIgotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTQ4LDE5ICs0Myw2IEBACiAKICNpbmNsdWRlICJpZGUtZmxvcHB5LmgiCiAKLS8qIGRlZmluZSB0byBzZWUgZGVidWcgaW5mbyAqLwotI2RlZmluZSBJREVGTE9QUFlfREVCVUdfTE9HCQkwCi0KLS8qICNkZWZpbmUgSURFRkxPUFBZX0RFQlVHKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fSU5GTyBmbXQsICMjIGFyZ3MpICovCi0jZGVmaW5lIElERUZMT1BQWV9ERUJVRyhmbXQsIGFyZ3MuLi4pCi0KLSNpZiBJREVGTE9QUFlfREVCVUdfTE9HCi0jZGVmaW5lIGRlYnVnX2xvZyhmbXQsIGFyZ3MuLi4pIFwKLQlwcmludGsoS0VSTl9JTkZPICJpZGUtZmxvcHB5OiAiIGZtdCwgIyMgYXJncykKLSNlbHNlCi0jZGVmaW5lIGRlYnVnX2xvZyhmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KIC8qCiAgKiBBZnRlciBlYWNoIGZhaWxlZCBwYWNrZXQgY29tbWFuZCB3ZSBpc3N1ZSBhIHJlcXVlc3Qgc2Vuc2UgY29tbWFuZCBhbmQgcmV0cnkKICAqIHRoZSBwYWNrZXQgY29tbWFuZCBJREVGTE9QUFlfTUFYX1BDX1JFVFJJRVMgdGltZXMuCkBAIC03Myw2MyArNTUsNDAgQEAKICNkZWZpbmUgQ0FQQUNJVFlfQ1VSUkVOVAkweDAyCiAjZGVmaW5lIENBUEFDSVRZX05PX0NBUlRSSURHRQkweDAzCiAKLSNkZWZpbmUgSURFRkxPUFBZX1RJQ0tTX0RFTEFZCUhaLzIwCS8qIGRlZmF1bHQgZGVsYXkgZm9yIFpJUCAxMDAgKDUwbXMpICovCisvKgorICogVGhlIGZvbGxvd2luZyBkZWxheSBzb2x2ZXMgYSBwcm9ibGVtIHdpdGggQVRBUEkgWmlwIDEwMCBkcml2ZSB3aGVyZSBCU1kgYml0CisgKiB3YXMgYXBwYXJlbnRseSBiZWluZyBkZWFzc2VydGVkIGJlZm9yZSB0aGUgdW5pdCB3YXMgcmVhZHkgdG8gcmVjZWl2ZSBkYXRhLgorICovCisjZGVmaW5lIElERUZMT1BQWV9QQ19ERUxBWQkoSFovMjApCS8qIGRlZmF1bHQgZGVsYXkgZm9yIFpJUCAxMDAgKDUwbXMpICovCiAKIC8qIEVycm9yIGNvZGUgcmV0dXJuZWQgaW4gcnEtPmVycm9ycyB0byB0aGUgaGlnaGVyIHBhcnQgb2YgdGhlIGRyaXZlci4gKi8KICNkZWZpbmUJSURFRkxPUFBZX0VSUk9SX0dFTkVSQUwJCTEwMQogCi1zdGF0aWMgREVGSU5FX01VVEVYKGlkZWZsb3BweV9yZWZfbXV0ZXgpOwotCi0jZGVmaW5lIHRvX2lkZV9mbG9wcHkob2JqKSBjb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgaWRlX2Zsb3BweV9vYmosIGtyZWYpCi0KLSNkZWZpbmUgaWRlX2Zsb3BweV9nKGRpc2spIFwKLQljb250YWluZXJfb2YoKGRpc2spLT5wcml2YXRlX2RhdGEsIHN0cnVjdCBpZGVfZmxvcHB5X29iaiwgZHJpdmVyKQotCi1zdGF0aWMgdm9pZCBpZGVmbG9wcHlfY2xlYW51cF9vYmooc3RydWN0IGtyZWYgKik7Ci0KLXN0YXRpYyBzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmlkZV9mbG9wcHlfZ2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrKQotewotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gTlVMTDsKLQotCW11dGV4X2xvY2soJmlkZWZsb3BweV9yZWZfbXV0ZXgpOwotCWZsb3BweSA9IGlkZV9mbG9wcHlfZyhkaXNrKTsKLQlpZiAoZmxvcHB5KSB7Ci0JCWlmIChpZGVfZGV2aWNlX2dldChmbG9wcHktPmRyaXZlKSkKLQkJCWZsb3BweSA9IE5VTEw7Ci0JCWVsc2UKLQkJCWtyZWZfZ2V0KCZmbG9wcHktPmtyZWYpOwotCX0KLQltdXRleF91bmxvY2soJmlkZWZsb3BweV9yZWZfbXV0ZXgpOwotCXJldHVybiBmbG9wcHk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfcHV0KHN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5KQotewotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGZsb3BweS0+ZHJpdmU7Ci0KLQltdXRleF9sb2NrKCZpZGVmbG9wcHlfcmVmX211dGV4KTsKLQlrcmVmX3B1dCgmZmxvcHB5LT5rcmVmLCBpZGVmbG9wcHlfY2xlYW51cF9vYmopOwotCWlkZV9kZXZpY2VfcHV0KGRyaXZlKTsKLQltdXRleF91bmxvY2soJmlkZWZsb3BweV9yZWZfbXV0ZXgpOwotfQotCiAvKgogICogVXNlZCB0byBmaW5pc2ggc2VydmljaW5nIGEgcmVxdWVzdC4gRm9yIHJlYWQvd3JpdGUgcmVxdWVzdHMsIHdlIHdpbGwgY2FsbAogICogaWRlX2VuZF9yZXF1ZXN0IHRvIHBhc3MgdG8gdGhlIG5leHQgYnVmZmVyLgogICovCi1zdGF0aWMgaW50IGlkZWZsb3BweV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5zZWNzKQorc3RhdGljIGludCBpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnNlY3MpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKIAlpbnQgZXJyb3I7CiAKLQlkZWJ1Z19sb2coIlJlYWNoZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKIAogCXN3aXRjaCAodXB0b2RhdGUpIHsKLQljYXNlIDA6IGVycm9yID0gSURFRkxPUFBZX0VSUk9SX0dFTkVSQUw7IGJyZWFrOwotCWNhc2UgMTogZXJyb3IgPSAwOyBicmVhazsKLQlkZWZhdWx0OiBlcnJvciA9IHVwdG9kYXRlOworCWNhc2UgMDoKKwkJZXJyb3IgPSBJREVGTE9QUFlfRVJST1JfR0VORVJBTDsKKwkJYnJlYWs7CisKKwljYXNlIDE6CisJCWVycm9yID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnJvciA9IHVwdG9kYXRlOwogCX0KKwogCWlmIChlcnJvcikKIAkJZmxvcHB5LT5mYWlsZWRfcGMgPSBOVUxMOwogCS8qIFdoeSBkb2VzIHRoaXMgaGFwcGVuPyAqLwpAQCAtMTUzLDE2ICsxMTIsMTYgQEAKIAlzdHJ1Y3QgYmlvICpiaW8gPSBycS0+YmlvOwogCiAJd2hpbGUgKChiaW8gPSBycS0+YmlvKSAhPSBOVUxMKQotCQlpZGVmbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDEsIDApOworCQlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBpZGVfZmxvcHB5X2NhbGxiYWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRzYykKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGZsb3BweS0+cGM7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gZHJpdmUtPnBjOwogCWludCB1cHRvZGF0ZSA9IHBjLT5lcnJvciA/IDAgOiAxOwogCi0JZGVidWdfbG9nKCJSZWFjaGVkICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZmxvcHB5LT5mYWlsZWRfcGMgPT0gcGMpCiAJCWZsb3BweS0+ZmFpbGVkX3BjID0gTlVMTDsKQEAgLTE3MSw3ICsxMzAsNyBAQAogCSAgICAocGMtPnJxICYmIGJsa19wY19yZXF1ZXN0KHBjLT5ycSkpKQogCQl1cHRvZGF0ZSA9IDE7IC8qIEZJWE1FICovCiAJZWxzZSBpZiAocGMtPmNbMF0gPT0gR1BDTURfUkVRVUVTVF9TRU5TRSkgewotCQl1OCAqYnVmID0gZmxvcHB5LT5wYy0+YnVmOworCQl1OCAqYnVmID0gcGMtPmJ1ZjsKIAogCQlpZiAoIXBjLT5lcnJvcikgewogCQkJZmxvcHB5LT5zZW5zZV9rZXkgPSBidWZbMl0gJiAweDBGOwpAQCAtMTgxLDEwMCArMTQwLDIxIEBACiAJCQkJKHUxNilnZXRfdW5hbGlnbmVkKCh1MTYgKikmYnVmWzE2XSkgOiAweDEwMDAwOwogCiAJCQlpZiAoZmxvcHB5LT5mYWlsZWRfcGMpCi0JCQkJZGVidWdfbG9nKCJwYyA9ICV4LCAiLCBmbG9wcHktPmZhaWxlZF9wYy0+Y1swXSk7CisJCQkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAicGMgPSAleCwgIiwKKwkJCQkJICAgICAgZmxvcHB5LT5mYWlsZWRfcGMtPmNbMF0pOwogCi0JCQlkZWJ1Z19sb2coInNlbnNlIGtleSA9ICV4LCBhc2MgPSAleCwgYXNjcSA9ICV4XG4iLAotCQkJCSAgZmxvcHB5LT5zZW5zZV9rZXksIGZsb3BweS0+YXNjLCBmbG9wcHktPmFzY3EpOworCQkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAic2Vuc2Uga2V5ID0gJXgsIGFzYyA9ICV4LCIKKwkJCQkgICAgICAiYXNjcSA9ICV4XG4iLCBmbG9wcHktPnNlbnNlX2tleSwKKwkJCQkgICAgICBmbG9wcHktPmFzYywgZmxvcHB5LT5hc2NxKTsKIAkJfSBlbHNlCi0JCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGluIFJFUVVFU1QgU0VOU0UgaXRzZWxmIC0gIgotCQkJCQkiQWJvcnRpbmcgcmVxdWVzdCFcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRXJyb3IgaW4gUkVRVUVTVCBTRU5TRSBpdHNlbGYgLSAiCisJCQkgICAgICAgIkFib3J0aW5nIHJlcXVlc3QhXG4iKTsKIAl9CiAKLQlpZGVmbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIHVwdG9kYXRlLCAwKTsKKwlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgMCk7CiB9CiAKLXZvaWQgaWRlX2Zsb3BweV9jcmVhdGVfcmVxdWVzdF9zZW5zZV9jbWQoc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCi17Ci0JaWRlX2luaXRfcGMocGMpOwotCXBjLT5jWzBdID0gR1BDTURfUkVRVUVTVF9TRU5TRTsKLQlwYy0+Y1s0XSA9IDI1NTsKLQlwYy0+cmVxX3hmZXIgPSAxODsKLX0KLQotLyoKLSAqIENhbGxlZCB3aGVuIGFuIGVycm9yIHdhcyBkZXRlY3RlZCBkdXJpbmcgdGhlIGxhc3QgcGFja2V0IGNvbW1hbmQuIFdlIHF1ZXVlIGEKLSAqIHJlcXVlc3Qgc2Vuc2UgcGFja2V0IGNvbW1hbmQgaW4gdGhlIGhlYWQgb2YgdGhlIHJlcXVlc3QgbGlzdC4KLSAqLwotc3RhdGljIHZvaWQgaWRlZmxvcHB5X3JldHJ5X3BjKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSAmZmxvcHB5LT5yZXF1ZXN0X3NlbnNlX3JxOwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gJmZsb3BweS0+cmVxdWVzdF9zZW5zZV9wYzsKLQotCSh2b2lkKWlkZV9yZWFkX2Vycm9yKGRyaXZlKTsKLQlpZGVfZmxvcHB5X2NyZWF0ZV9yZXF1ZXN0X3NlbnNlX2NtZChwYyk7Ci0JaWRlX3F1ZXVlX3BjX2hlYWQoZHJpdmUsIGZsb3BweS0+ZGlzaywgcGMsIHJxKTsKLX0KLQotLyogVGhlIHVzdWFsIGludGVycnVwdCBoYW5kbGVyIGNhbGxlZCBkdXJpbmcgYSBwYWNrZXQgY29tbWFuZC4gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlZmxvcHB5X3BjX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCi0JcmV0dXJuIGlkZV9wY19pbnRyKGRyaXZlLCBmbG9wcHktPnBjLCBpZGVmbG9wcHlfcGNfaW50ciwKLQkJCSAgIFdBSVRfRkxPUFBZX0NNRCwgTlVMTCwgaWRlZmxvcHB5X3VwZGF0ZV9idWZmZXJzLAotCQkJICAgaWRlZmxvcHB5X3JldHJ5X3BjLCBOVUxMLCBpZGVfaW9fYnVmZmVycyk7Ci19Ci0KLS8qCi0gKiBXaGF0IHdlIGhhdmUgaGVyZSBpcyBhIGNsYXNzaWMgY2FzZSBvZiBhIHRvcCBoYWxmIC8gYm90dG9tIGhhbGYgaW50ZXJydXB0Ci0gKiBzZXJ2aWNlIHJvdXRpbmUuIEluIGludGVycnVwdCBtb2RlLCB0aGUgZGV2aWNlIHNlbmRzIGFuIGludGVycnVwdCB0byBzaWduYWwKLSAqIHRoYXQgaXQgaXMgcmVhZHkgdG8gcmVjZWl2ZSBhIHBhY2tldC4gSG93ZXZlciwgd2UgbmVlZCB0byBkZWxheSBhYm91dCAyLTMKLSAqIHRpY2tzIGJlZm9yZSBpc3N1aW5nIHRoZSBwYWNrZXQgb3Igd2UgZ2V0cyBpbiB0cm91YmxlLgotICovCi1zdGF0aWMgaW50IGlkZWZsb3BweV90cmFuc2Zlcl9wYyhpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0KLQkvKiBTZW5kIHRoZSBhY3R1YWwgcGFja2V0ICovCi0JZHJpdmUtPmh3aWYtPnRwX29wcy0+b3V0cHV0X2RhdGEoZHJpdmUsIE5VTEwsIGZsb3BweS0+cGMtPmMsIDEyKTsKLQotCS8qIFRpbWVvdXQgZm9yIHRoZSBwYWNrZXQgY29tbWFuZCAqLwotCXJldHVybiBXQUlUX0ZMT1BQWV9DTUQ7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgYXMgYW4gaW50ZXJydXB0IChvciBkaXJlY3RseSkuIFdoZW4gdGhlIGRldmljZSBzYXlzIGl0J3MgcmVhZHkgZm9yIGEKLSAqIHBhY2tldCwgd2Ugc2NoZWR1bGUgdGhlIHBhY2tldCB0cmFuc2ZlciB0byBvY2N1ciBhYm91dCAyLTMgdGlja3MgbGF0ZXIgaW4KLSAqIHRyYW5zZmVyX3BjLgotICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZWZsb3BweV9zdGFydF9wY190cmFuc2ZlcihpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBmbG9wcHktPnBjOwotCWlkZV9leHBpcnlfdCAqZXhwaXJ5OwotCXVuc2lnbmVkIGludCB0aW1lb3V0OwotCi0JLyoKLQkgKiBUaGUgZm9sbG93aW5nIGRlbGF5IHNvbHZlcyBhIHByb2JsZW0gd2l0aCBBVEFQSSBaaXAgMTAwIGRyaXZlcwotCSAqIHdoZXJlIHRoZSBCdXN5IGZsYWcgd2FzIGFwcGFyZW50bHkgYmVpbmcgZGVhc3NlcnRlZCBiZWZvcmUgdGhlCi0JICogdW5pdCB3YXMgcmVhZHkgdG8gcmVjZWl2ZSBkYXRhLiBUaGlzIHdhcyBoYXBwZW5pbmcgb24gYQotCSAqIDEyMDAgTUh6IEF0aGxvbiBzeXN0ZW0uIDEwLzI2LzAxIDI1bXNlYyBpcyB0b28gc2hvcnQsCi0JICogNDAgYW5kIDUwbXNlYyB3b3JrIHdlbGwuIGlkZWZsb3BweV9wY19pbnRyIHdpbGwgbm90IGJlIGFjdHVhbGx5Ci0JICogdXNlZCB1bnRpbCBhZnRlciB0aGUgcGFja2V0IGlzIG1vdmVkIGluIGFib3V0IDUwIG1zZWMuCi0JICovCi0JaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19aSVBfRFJJVkUpIHsKLQkJdGltZW91dCA9IGZsb3BweS0+dGlja3M7Ci0JCWV4cGlyeSA9ICZpZGVmbG9wcHlfdHJhbnNmZXJfcGM7Ci0JfSBlbHNlIHsKLQkJdGltZW91dCA9IFdBSVRfRkxPUFBZX0NNRDsKLQkJZXhwaXJ5ID0gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gaWRlX3RyYW5zZmVyX3BjKGRyaXZlLCBwYywgaWRlZmxvcHB5X3BjX2ludHIsIHRpbWVvdXQsIGV4cGlyeSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfcmVwb3J0X2Vycm9yKGlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5LAorc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9yZXBvcnRfZXJyb3Ioc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5LAogCQkJCSAgICBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAkvKiBzdXByZXNzIGVycm9yIG1lc3NhZ2VzIHJlc3VsdGluZyBmcm9tIE1lZGl1bSBub3QgcHJlc2VudCAqLwpAQCAtMjgzLDcgKzE2Myw3IEBACiAJICAgIGZsb3BweS0+YXNjcSAgICAgID09IDB4MDApCiAJCXJldHVybjsKIAotCXByaW50ayhLRVJOX0VSUiAiaWRlLWZsb3BweTogJXM6IEkvTyBlcnJvciwgcGMgPSAlMngsIGtleSA9ICUyeCwgIgorCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBJL08gZXJyb3IsIHBjID0gJTJ4LCBrZXkgPSAlMngsICIKIAkJCSJhc2MgPSAlMngsIGFzY3EgPSAlMnhcbiIsCiAJCQlmbG9wcHktPmRyaXZlLT5uYW1lLCBwYy0+Y1swXSwgZmxvcHB5LT5zZW5zZV9rZXksCiAJCQlmbG9wcHktPmFzYywgZmxvcHB5LT5hc2NxKTsKQEAgLTI5MywxMyArMTczLDE0IEBACiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZWZsb3BweV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAogCWlmIChmbG9wcHktPmZhaWxlZF9wYyA9PSBOVUxMICYmCiAJICAgIHBjLT5jWzBdICE9IEdQQ01EX1JFUVVFU1RfU0VOU0UpCiAJCWZsb3BweS0+ZmFpbGVkX3BjID0gcGM7CisKIAkvKiBTZXQgdGhlIGN1cnJlbnQgcGFja2V0IGNvbW1hbmQgKi8KLQlmbG9wcHktPnBjID0gcGM7CisJZHJpdmUtPnBjID0gcGM7CiAKIAlpZiAocGMtPnJldHJpZXMgPiBJREVGTE9QUFlfTUFYX1BDX1JFVFJJRVMpIHsKIAkJaWYgKCEocGMtPmZsYWdzICYgUENfRkxBR19TVVBQUkVTU19FUlJPUikpCkBAIC0zMDgsMTYgKzE4OSwxNSBAQAogCQlwYy0+ZXJyb3IgPSBJREVGTE9QUFlfRVJST1JfR0VORVJBTDsKIAogCQlmbG9wcHktPmZhaWxlZF9wYyA9IE5VTEw7Ci0JCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSk7CisJCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSwgMCk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKLQlkZWJ1Z19sb2coIlJldHJ5IG51bWJlciAtICVkXG4iLCBwYy0+cmV0cmllcyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICIlczogUmV0cnkgIyVkXG4iLCBfX2Z1bmNfXywgcGMtPnJldHJpZXMpOwogCiAJcGMtPnJldHJpZXMrKzsKIAotCXJldHVybiBpZGVfaXNzdWVfcGMoZHJpdmUsIHBjLCBpZGVmbG9wcHlfc3RhcnRfcGNfdHJhbnNmZXIsCi0JCQkgICAgV0FJVF9GTE9QUFlfQ01ELCBOVUxMKTsKKwlyZXR1cm4gaWRlX2lzc3VlX3BjKGRyaXZlLCBXQUlUX0ZMT1BQWV9DTUQsIE5VTEwpOwogfQogCiB2b2lkIGlkZV9mbG9wcHlfY3JlYXRlX3JlYWRfY2FwYWNpdHlfY21kKHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQpAQCAtMzQ3LDIzICsyMjcsMjMgQEAKIAkJbGVuZ3RoICs9IDMyOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgImlkZS1mbG9wcHk6IHVuc3VwcG9ydGVkIHBhZ2UgY29kZSAiCi0JCQkJImluIGNyZWF0ZV9tb2RlX3NlbnNlX2NtZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInVuc3VwcG9ydGVkIHBhZ2UgY29kZSBpbiAlc1xuIiwgX19mdW5jX18pOwogCX0KIAlwdXRfdW5hbGlnbmVkKGNwdV90b19iZTE2KGxlbmd0aCksICh1MTYgKikgJnBjLT5jWzddKTsKIAlwYy0+cmVxX3hmZXIgPSBsZW5ndGg7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZWZsb3BweV9jcmVhdGVfcndfY21kKGlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5LAorc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NyZWF0ZV9yd19jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLAogCQkJCSAgICBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywgc3RydWN0IHJlcXVlc3QgKnJxLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIHNlY3RvcikKIHsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJaW50IGJsb2NrID0gc2VjdG9yIC8gZmxvcHB5LT5ic19mYWN0b3I7CiAJaW50IGJsb2NrcyA9IHJxLT5ucl9zZWN0b3JzIC8gZmxvcHB5LT5ic19mYWN0b3I7CiAJaW50IGNtZCA9IHJxX2RhdGFfZGlyKHJxKTsKIAotCWRlYnVnX2xvZygiY3JlYXRlX3J3MTBfY21kOiBibG9jayA9PSAlZCwgYmxvY2tzID09ICVkXG4iLAotCQlibG9jaywgYmxvY2tzKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIiVzOiBibG9jazogJWQsIGJsb2NrczogJWRcbiIsIF9fZnVuY19fLAorCQkgICAgICBibG9jaywgYmxvY2tzKTsKIAogCWlkZV9pbml0X3BjKHBjKTsKIAlwYy0+Y1swXSA9IGNtZCA9PSBSRUFEID8gR1BDTURfUkVBRF8xMCA6IEdQQ01EX1dSSVRFXzEwOwpAQCAtMzgxLDcgKzI2MSw3IEBACiAJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfRE1BX09LOwogfQogCi1zdGF0aWMgdm9pZCBpZGVmbG9wcHlfYmxvY2twY19jbWQoaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHksCitzdGF0aWMgdm9pZCBpZGVmbG9wcHlfYmxvY2twY19jbWQoc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5LAogCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCWlkZV9pbml0X3BjKHBjKTsKQEAgLTQwMCw1MCArMjgwLDUwIEBACiAJcGMtPnJlcV94ZmVyID0gcGMtPmJ1Zl9zaXplID0gcnEtPmRhdGFfbGVuOwogfQogCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZWZsb3BweV9kb19yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwKLQkJc3RydWN0IHJlcXVlc3QgKnJxLCBzZWN0b3JfdCBibG9ja19zKQorc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfZmxvcHB5X2RvX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLAorCQkJCQkgICAgIHN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3QgYmxvY2spCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYzsKLQl1bnNpZ25lZCBsb25nIGJsb2NrID0gKHVuc2lnbmVkIGxvbmcpYmxvY2tfczsKIAotCWRlYnVnX2xvZygiJXM6IGRldjogJXMsIGNtZDogMHgleCwgY21kX3R5cGU6ICV4LCBlcnJvcnM6ICVkXG4iLAotCQkgIF9fZnVuY19fLCBycS0+cnFfZGlzayA/IHJxLT5ycV9kaXNrLT5kaXNrX25hbWUgOiAiPyIsCi0JCSAgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlLCBycS0+ZXJyb3JzKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIiVzOiBkZXY6ICVzLCBjbWQ6IDB4JXgsIGNtZF90eXBlOiAleCwgIgorCQkgICAgICAiZXJyb3JzOiAlZFxuIiwKKwkJICAgICAgX19mdW5jX18sIHJxLT5ycV9kaXNrID8gcnEtPnJxX2Rpc2stPmRpc2tfbmFtZSA6ICI/IiwKKwkJICAgICAgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlLCBycS0+ZXJyb3JzKTsKIAotCWRlYnVnX2xvZygiJXM6IHNlY3RvcjogJWxkLCBucl9zZWN0b3JzOiAlbGQsIGN1cnJlbnRfbnJfc2VjdG9yczogJWRcbiIsCi0JCSAgX19mdW5jX18sIChsb25nKXJxLT5zZWN0b3IsIHJxLT5ucl9zZWN0b3JzLAotCQkgIHJxLT5jdXJyZW50X25yX3NlY3RvcnMpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiJXM6IHNlY3RvcjogJWxkLCBucl9zZWN0b3JzOiAlbGQsICIKKwkJICAgICAgImN1cnJlbnRfbnJfc2VjdG9yczogJWRcbiIsCisJCSAgICAgIF9fZnVuY19fLCAobG9uZylycS0+c2VjdG9yLCBycS0+bnJfc2VjdG9ycywKKwkJICAgICAgcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyk7CiAKIAlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVgpIHsKIAkJaWYgKGZsb3BweS0+ZmFpbGVkX3BjKQogCQkJaWRlX2Zsb3BweV9yZXBvcnRfZXJyb3IoZmxvcHB5LCBmbG9wcHktPmZhaWxlZF9wYyk7CiAJCWVsc2UKLQkJCXByaW50ayhLRVJOX0VSUiAiaWRlLWZsb3BweTogJXM6IEkvTyBlcnJvclxuIiwKLQkJCQlkcml2ZS0+bmFtZSk7Ci0JCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogSS9PIGVycm9yXG4iLCBkcml2ZS0+bmFtZSk7CisKKwkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgewogCQlpZiAoKChsb25nKXJxLT5zZWN0b3IgJSBmbG9wcHktPmJzX2ZhY3RvcikgfHwKIAkJICAgIChycS0+bnJfc2VjdG9ycyAlIGZsb3BweS0+YnNfZmFjdG9yKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5zdXBwb3J0ZWQgci93IHJlcXVlc3Qgc2l6ZVxuIiwKLQkJCQkJZHJpdmUtPm5hbWUpOwotCQkJaWRlZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB1bnN1cHBvcnRlZCByL3cgcnEgc2l6ZVxuIiwKKwkJCQlkcml2ZS0+bmFtZSk7CisJCQlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKIAkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAkJfQogCQlwYyA9ICZmbG9wcHktPnF1ZXVlZF9wYzsKLQkJaWRlZmxvcHB5X2NyZWF0ZV9yd19jbWQoZmxvcHB5LCBwYywgcnEsIGJsb2NrKTsKKwkJaWRlZmxvcHB5X2NyZWF0ZV9yd19jbWQoZHJpdmUsIHBjLCBycSwgKHVuc2lnbmVkIGxvbmcpYmxvY2spOwogCX0gZWxzZSBpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKIAkJcGMgPSAoc3RydWN0IGlkZV9hdGFwaV9wYyAqKSBycS0+YnVmZmVyOwogCX0gZWxzZSBpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7CiAJCXBjID0gJmZsb3BweS0+cXVldWVkX3BjOwogCQlpZGVmbG9wcHlfYmxvY2twY19jbWQoZmxvcHB5LCBwYywgcnEpOwogCX0gZWxzZSB7Ci0JCWJsa19kdW1wX3JxX2ZsYWdzKHJxLAotCQkJImlkZS1mbG9wcHk6IHVuc3VwcG9ydGVkIGNvbW1hbmQgaW4gcXVldWUiKTsKLQkJaWRlZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKKwkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsIFBGWCAidW5zdXBwb3J0ZWQgY29tbWFuZCBpbiBxdWV1ZSIpOworCQlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIApAQCAtNDY0LDcgKzM0NCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9nZXRfZmxleGlibGVfZGlza19wYWdlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBmbG9wcHktPmRpc2s7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAl1OCAqcGFnZTsKQEAgLTQ3NSwxNyArMzU1LDE2IEBACiAJaWRlX2Zsb3BweV9jcmVhdGVfbW9kZV9zZW5zZV9jbWQoJnBjLCBJREVGTE9QUFlfRkxFWElCTEVfRElTS19QQUdFKTsKIAogCWlmIChpZGVfcXVldWVfcGNfdGFpbChkcml2ZSwgZGlzaywgJnBjKSkgewotCQlwcmludGsoS0VSTl9FUlIgImlkZS1mbG9wcHk6IENhbid0IGdldCBmbGV4aWJsZSBkaXNrIHBhZ2UiCi0JCQkJIiBwYXJhbWV0ZXJzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FuJ3QgZ2V0IGZsZXhpYmxlIGRpc2sgcGFnZSBwYXJhbXNcbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAocGMuYnVmWzNdICYgMHg4MCkKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19XUDsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfV1A7CiAJZWxzZQotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19XUDsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1dQOwogCi0Jc2V0X2Rpc2tfcm8oZGlzaywgISEoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1dQKSk7CisJc2V0X2Rpc2tfcm8oZGlzaywgISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19XUCkpOwogCiAJcGFnZSA9ICZwYy5idWZbOF07CiAKQEAgLTQ5OSw3ICszNzgsNyBAQAogCWNhcGFjaXR5ID0gY3lscyAqIGhlYWRzICogc2VjdG9ycyAqIHNlY3Rvcl9zaXplOwogCiAJaWYgKG1lbWNtcChwYWdlLCAmZmxvcHB5LT5mbGV4aWJsZV9kaXNrX3BhZ2UsIDMyKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVka0IsICVkLyVkLyVkIENIUywgJWQga0JwcywgIgorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6ICVka0IsICVkLyVkLyVkIENIUywgJWQga0JwcywgIgogCQkJCSIlZCBzZWN0b3Igc2l6ZSwgJWQgcnBtXG4iLAogCQkJCWRyaXZlLT5uYW1lLCBjYXBhY2l0eSAvIDEwMjQsIGN5bHMsIGhlYWRzLAogCQkJCXNlY3RvcnMsIHRyYW5zZmVyX3JhdGUgLyA4LCBzZWN0b3Jfc2l6ZSwgcnBtKTsKQEAgLTUxMSwxMiArMzkwLDE0IEBACiAJbGJhX2NhcGFjaXR5ID0gZmxvcHB5LT5ibG9ja3MgKiBmbG9wcHktPmJsb2NrX3NpemU7CiAKIAlpZiAoY2FwYWNpdHkgPCBsYmFfY2FwYWNpdHkpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVGhlIGRpc2sgcmVwb3J0cyBhIGNhcGFjaXR5IG9mICVkICIKKwkJcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiJXM6IFRoZSBkaXNrIHJlcG9ydHMgYSBjYXBhY2l0eSBvZiAlZCAiCiAJCQkiYnl0ZXMsIGJ1dCB0aGUgZHJpdmUgb25seSBoYW5kbGVzICVkXG4iLAogCQkJZHJpdmUtPm5hbWUsIGxiYV9jYXBhY2l0eSwgY2FwYWNpdHkpOwogCQlmbG9wcHktPmJsb2NrcyA9IGZsb3BweS0+YmxvY2tfc2l6ZSA/CiAJCQljYXBhY2l0eSAvIGZsb3BweS0+YmxvY2tfc2l6ZSA6IDA7CisJCWRyaXZlLT5jYXBhY2l0eTY0ID0gZmxvcHB5LT5ibG9ja3MgKiBmbG9wcHktPmJzX2ZhY3RvcjsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTI2LDcgKzQwNyw3IEBACiAgKi8KIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9nZXRfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGZsb3BweS0+ZGlzazsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCXU4ICpjYXBfZGVzYzsKQEAgLTUzNywxMSArNDE4LDExIEBACiAJZHJpdmUtPmJpb3NfaGVhZCA9IGRyaXZlLT5iaW9zX3NlY3QgPSAwOwogCWZsb3BweS0+YmxvY2tzID0gMDsKIAlmbG9wcHktPmJzX2ZhY3RvciA9IDE7Ci0Jc2V0X2NhcGFjaXR5KGZsb3BweS0+ZGlzaywgMCk7CisJZHJpdmUtPmNhcGFjaXR5NjQgPSAwOwogCiAJaWRlX2Zsb3BweV9jcmVhdGVfcmVhZF9jYXBhY2l0eV9jbWQoJnBjKTsKIAlpZiAoaWRlX3F1ZXVlX3BjX3RhaWwoZHJpdmUsIGRpc2ssICZwYykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtZmxvcHB5OiBDYW4ndCBnZXQgZmxvcHB5IHBhcmFtZXRlcnNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW4ndCBnZXQgZmxvcHB5IHBhcmFtZXRlcnNcbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAJaGVhZGVyX2xlbiA9IHBjLmJ1ZlszXTsKQEAgLTU1NCw4ICs0MzUsOSBAQAogCQlibG9ja3MgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSZwYy5idWZbZGVzY19zdGFydF0pOwogCQlsZW5ndGggPSBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSZwYy5idWZbZGVzY19zdGFydCArIDZdKTsKIAotCQlkZWJ1Z19sb2coIkRlc2NyaXB0b3IgJWQ6ICVka0IsICVkIGJsb2NrcywgJWQgc2VjdG9yIHNpemVcbiIsCi0JCQkJaSwgYmxvY2tzICogbGVuZ3RoIC8gMTAyNCwgYmxvY2tzLCBsZW5ndGgpOworCQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJEZXNjcmlwdG9yICVkOiAlZGtCLCAlZCBibG9ja3MsICIKKwkJCSAgICAgICIlZCBzZWN0b3Igc2l6ZVxuIiwKKwkJCSAgICAgIGksIGJsb2NrcyAqIGxlbmd0aCAvIDEwMjQsIGJsb2NrcywgbGVuZ3RoKTsKIAogCQlpZiAoaSkKIAkJCWNvbnRpbnVlOwpAQCAtNTc1LDIzICs0NTcsMjYgQEAKIAkJY2FzZSBDQVBBQ0lUWV9DVVJSRU5UOgogCQkJLyogTm9ybWFsIFppcC9MUy0xMjAgZGlza3MgKi8KIAkJCWlmIChtZW1jbXAoY2FwX2Rlc2MsICZmbG9wcHktPmNhcF9kZXNjLCA4KSkKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogJWRrQiwgJWQgYmxvY2tzLCAlZCAiCi0JCQkJCSJzZWN0b3Igc2l6ZVxuIiwgZHJpdmUtPm5hbWUsCi0JCQkJCWJsb2NrcyAqIGxlbmd0aCAvIDEwMjQsIGJsb2NrcywgbGVuZ3RoKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6ICVka0IsICVkIGJsb2NrcywgJWQgIgorCQkJCSAgICAgICAic2VjdG9yIHNpemVcbiIsCisJCQkJICAgICAgIGRyaXZlLT5uYW1lLCBibG9ja3MgKiBsZW5ndGggLyAxMDI0LAorCQkJCSAgICAgICBibG9ja3MsIGxlbmd0aCk7CiAJCQltZW1jcHkoJmZsb3BweS0+Y2FwX2Rlc2MsIGNhcF9kZXNjLCA4KTsKIAogCQkJaWYgKCFsZW5ndGggfHwgbGVuZ3RoICUgNTEyKSB7Ci0JCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogJWQgYnl0ZXMgYmxvY2sgc2l6ZSAiCi0JCQkJCSJub3Qgc3VwcG9ydGVkXG4iLCBkcml2ZS0+bmFtZSwgbGVuZ3RoKTsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UgUEZYICIlczogJWQgYnl0ZXMgYmxvY2sgc2l6ZSIKKwkJCQkgICAgICAgIiBub3Qgc3VwcG9ydGVkXG4iLCBkcml2ZS0+bmFtZSwgbGVuZ3RoKTsKIAkJCX0gZWxzZSB7CiAJCQkJZmxvcHB5LT5ibG9ja3MgPSBibG9ja3M7CiAJCQkJZmxvcHB5LT5ibG9ja19zaXplID0gbGVuZ3RoOwogCQkJCWZsb3BweS0+YnNfZmFjdG9yID0gbGVuZ3RoIC8gNTEyOwogCQkJCWlmIChmbG9wcHktPmJzX2ZhY3RvciAhPSAxKQotCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiB3YXJuaW5nOiBub24gIgotCQkJCQkJIjUxMiBieXRlcyBibG9jayBzaXplIG5vdCAiCi0JCQkJCQkiZnVsbHkgc3VwcG9ydGVkXG4iLAotCQkJCQkJZHJpdmUtPm5hbWUpOworCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgUEZYICIlczogV2FybmluZzogIgorCQkJCQkgICAgICAgIm5vbiA1MTIgYnl0ZXMgYmxvY2sgc2l6ZSBub3QgIgorCQkJCQkgICAgICAgImZ1bGx5IHN1cHBvcnRlZFxuIiwKKwkJCQkJICAgICAgIGRyaXZlLT5uYW1lKTsKKwkJCQlkcml2ZS0+Y2FwYWNpdHk2NCA9CisJCQkJCWZsb3BweS0+YmxvY2tzICogZmxvcHB5LT5ic19mYWN0b3I7CiAJCQkJcmMgPSAwOwogCQkJfQogCQkJYnJlYWs7CkBAIC02MDAsNzQgKzQ4NSwzNCBAQAogCQkJICogVGhpcyBpcyBhIEtFUk5fRVJSIHNvIGl0IGFwcGVhcnMgb24gc2NyZWVuCiAJCQkgKiBmb3IgdGhlIHVzZXIgdG8gc2VlCiAJCQkgKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIGRpc2sgaW4gZHJpdmVcbiIsIGRyaXZlLT5uYW1lKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBObyBkaXNrIGluIGRyaXZlXG4iLAorCQkJICAgICAgIGRyaXZlLT5uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIENBUEFDSVRZX0lOVkFMSUQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGNhcGFjaXR5IGZvciBkaXNrICIKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBJbnZhbGlkIGNhcGFjaXR5IGZvciBkaXNrICIKIAkJCQkiaW4gZHJpdmVcbiIsIGRyaXZlLT5uYW1lKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWRlYnVnX2xvZygiRGVzY3JpcHRvciAwIENvZGU6ICVkXG4iLAotCQkJICBwYy5idWZbZGVzY19zdGFydCArIDRdICYgMHgwMyk7CisJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIkRlc2NyaXB0b3IgMCBDb2RlOiAlZFxuIiwKKwkJCSAgICAgIHBjLmJ1ZltkZXNjX3N0YXJ0ICsgNF0gJiAweDAzKTsKIAl9CiAKIAkvKiBDbGlrISBkaXNrIGRvZXMgbm90IHN1cHBvcnQgZ2V0X2ZsZXhpYmxlX2Rpc2tfcGFnZSAqLwogCWlmICghKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19DTElLX0RSSVZFKSkKIAkJKHZvaWQpIGlkZV9mbG9wcHlfZ2V0X2ZsZXhpYmxlX2Rpc2tfcGFnZShkcml2ZSk7CiAKLQlzZXRfY2FwYWNpdHkoZGlzaywgZmxvcHB5LT5ibG9ja3MgKiBmbG9wcHktPmJzX2ZhY3Rvcik7Ci0KIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzZWN0b3JfdCBpZGVmbG9wcHlfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBjYXBhY2l0eSA9IGZsb3BweS0+YmxvY2tzICogZmxvcHB5LT5ic19mYWN0b3I7Ci0KLQlyZXR1cm4gY2FwYWNpdHk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLWlkZV9kZXZzZXRfcndfZmllbGQoYmlvc19jeWwsIGJpb3NfY3lsKTsKLWlkZV9kZXZzZXRfcndfZmllbGQoYmlvc19oZWFkLCBiaW9zX2hlYWQpOwotaWRlX2RldnNldF9yd19maWVsZChiaW9zX3NlY3QsIGJpb3Nfc2VjdCk7Ci0KLXN0YXRpYyBpbnQgZ2V0X3RpY2tzKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlyZXR1cm4gZmxvcHB5LT50aWNrczsKLX0KLQotc3RhdGljIGludCBzZXRfdGlja3MoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQotewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCWZsb3BweS0+dGlja3MgPSBhcmc7Ci0JcmV0dXJuIDA7Ci19Ci0KLUlERV9ERVZTRVQodGlja3MsIERTX1NZTkMsIGdldF90aWNrcywgc2V0X3RpY2tzKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgaWRlZmxvcHB5X3NldHRpbmdzW10gPSB7Ci0JSURFX1BST0NfREVWU0VUKGJpb3NfY3lsLCAgMCwgMTAyMyksCi0JSURFX1BST0NfREVWU0VUKGJpb3NfaGVhZCwgMCwgIDI1NSksCi0JSURFX1BST0NfREVWU0VUKGJpb3Nfc2VjdCwgMCwgICA2MyksCi0JSURFX1BST0NfREVWU0VUKHRpY2tzLAkgICAwLCAgMjU1KSwKLQl7IDAgfSwKLX07Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgaWRlZmxvcHB5X3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkpCi17CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXUxNiAqaWQgPSBkcml2ZS0+aWQ7Ci0JdTggZ2N3WzJdOwogCi0JKigodTE2ICopJmdjdykgPSBpZFtBVEFfSURfQ09ORklHXTsKKwlkcml2ZS0+cGNfY2FsbGJhY2sJID0gaWRlX2Zsb3BweV9jYWxsYmFjazsKKwlkcml2ZS0+cGNfdXBkYXRlX2J1ZmZlcnMgPSBpZGVmbG9wcHlfdXBkYXRlX2J1ZmZlcnM7CisJZHJpdmUtPnBjX2lvX2J1ZmZlcnMJID0gaWRlX2lvX2J1ZmZlcnM7CiAKLQlkcml2ZS0+cGNfY2FsbGJhY2sgPSBpZGVfZmxvcHB5X2NhbGxiYWNrOwotCi0JaWYgKCgoZ2N3WzBdICYgMHg2MCkgPj4gNSkgPT0gMSkKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19EUlFfSU5URVJSVVBUOwogCS8qCiAJICogV2UgdXNlZCB0byBjaGVjayByZXZpc2lvbnMgaGVyZS4gQXQgdGhpcyBwb2ludCBob3dldmVyIEknbSBnaXZpbmcgdXAuCiAJICogSnVzdCBhc3N1bWUgdGhleSBhcmUgYWxsIGJyb2tlbiwgaXRzIGVhc2llci4KQEAgLTY4MCw3ICs1MjUsNyBAQAogCWlmICghc3RybmNtcCgoY2hhciAqKSZpZFtBVEFfSURfUFJPRF0sICJJT01FR0EgWklQIDEwMCBBVEFQSSIsIDIwKSkgewogCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX1pJUF9EUklWRTsKIAkJLyogVGhpcyB2YWx1ZSB3aWxsIGJlIHZpc2libGUgaW4gdGhlIC9wcm9jL2lkZS9oZHgvc2V0dGluZ3MgKi8KLQkJZmxvcHB5LT50aWNrcyA9IElERUZMT1BQWV9USUNLU19ERUxBWTsKKwkJZHJpdmUtPnBjX2RlbGF5ID0gSURFRkxPUFBZX1BDX0RFTEFZOwogCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoZHJpdmUtPnF1ZXVlLCA2NCk7CiAJfQogCkBAIC02OTIsMzE2ICs1MzcsNDIgQEAKIAkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKGRyaXZlLT5xdWV1ZSwgNjQpOwogCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0NMSUtfRFJJVkU7CiAJCS8qIElPTUVHQSBDbGlrISBkcml2ZXMgZG8gbm90IHN1cHBvcnQgbG9jay91bmxvY2sgY29tbWFuZHMgKi8KLQkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19OT19ET09STE9DSzsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RPT1JMT0NLSU5HOwogCX0KIAogCSh2b2lkKSBpZGVfZmxvcHB5X2dldF9jYXBhY2l0eShkcml2ZSk7CiAKIAlpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGZsb3BweS0+ZHJpdmVyKTsKKworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0FUVEFDSDsKIH0KIAotc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9yZW1vdmUoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9mbHVzaChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGdlbmRpc2sgKmcgPSBmbG9wcHktPmRpc2s7Ci0KLQlpZGVfcHJvY191bnJlZ2lzdGVyX2RyaXZlcihkcml2ZSwgZmxvcHB5LT5kcml2ZXIpOwotCi0JZGVsX2dlbmRpc2soZyk7Ci0KLQlpZGVfZmxvcHB5X3B1dChmbG9wcHkpOwogfQogCi1zdGF0aWMgdm9pZCBpZGVmbG9wcHlfY2xlYW51cF9vYmooc3RydWN0IGtyZWYgKmtyZWYpCitzdGF0aWMgaW50IGlkZV9mbG9wcHlfaW5pdF9tZWRpYShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gdG9faWRlX2Zsb3BweShrcmVmKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBmbG9wcHktPmRyaXZlOwotCXN0cnVjdCBnZW5kaXNrICpnID0gZmxvcHB5LT5kaXNrOwotCi0JZHJpdmUtPmRyaXZlcl9kYXRhID0gTlVMTDsKLQlnLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCXB1dF9kaXNrKGcpOwotCWtmcmVlKGZsb3BweSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLXN0YXRpYyBpbnQgcHJvY19pZGVmbG9wcHlfcmVhZF9jYXBhY2l0eShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlpZGVfZHJpdmVfdCpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKWRhdGE7Ci0JaW50IGxlbjsKLQotCWxlbiA9IHNwcmludGYocGFnZSwgIiVsbHVcbiIsIChsb25nIGxvbmcpaWRlZmxvcHB5X2NhcGFjaXR5KGRyaXZlKSk7Ci0JUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKLX0KLQotc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgaWRlZmxvcHB5X3Byb2NbXSA9IHsKLQl7ICJjYXBhY2l0eSIsCVNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVmbG9wcHlfcmVhZF9jYXBhY2l0eSwJTlVMTCB9LAotCXsgImdlb21ldHJ5IiwJU19JRlJFR3xTX0lSVUdPLCBwcm9jX2lkZV9yZWFkX2dlb21ldHJ5LAlOVUxMIH0sCi0JeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0KLX07Ci0jZW5kaWYJLyogQ09ORklHX0lERV9QUk9DX0ZTICovCi0KLXN0YXRpYyBpbnQgaWRlX2Zsb3BweV9wcm9iZShpZGVfZHJpdmVfdCAqKTsKLQotc3RhdGljIGlkZV9kcml2ZXJfdCBpZGVmbG9wcHlfZHJpdmVyID0gewotCS5nZW5fZHJpdmVyID0gewotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5uYW1lCQk9ICJpZGUtZmxvcHB5IiwKLQkJLmJ1cwkJPSAmaWRlX2J1c190eXBlLAotCX0sCi0JLnByb2JlCQkJPSBpZGVfZmxvcHB5X3Byb2JlLAotCS5yZW1vdmUJCQk9IGlkZV9mbG9wcHlfcmVtb3ZlLAotCS52ZXJzaW9uCQk9IElERUZMT1BQWV9WRVJTSU9OLAotCS5tZWRpYQkJCT0gaWRlX2Zsb3BweSwKLQkuZG9fcmVxdWVzdAkJPSBpZGVmbG9wcHlfZG9fcmVxdWVzdCwKLQkuZW5kX3JlcXVlc3QJCT0gaWRlZmxvcHB5X2VuZF9yZXF1ZXN0LAotCS5lcnJvcgkJCT0gX19pZGVfZXJyb3IsCi0jaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi0JLnByb2MJCQk9IGlkZWZsb3BweV9wcm9jLAotCS5zZXR0aW5ncwkJPSBpZGVmbG9wcHlfc2V0dGluZ3MsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbnQgaWRlZmxvcHB5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5OwotCWlkZV9kcml2ZV90ICpkcml2ZTsKIAlpbnQgcmV0ID0gMDsKIAotCWRlYnVnX2xvZygiUmVhY2hlZCAlc1xuIiwgX19mdW5jX18pOworCWlmIChpZGVfZG9fdGVzdF91bml0X3JlYWR5KGRyaXZlLCBkaXNrKSkKKwkJaWRlX2RvX3N0YXJ0X3N0b3AoZHJpdmUsIGRpc2ssIDEpOwogCi0JZmxvcHB5ID0gaWRlX2Zsb3BweV9nZXQoZGlzayk7Ci0JaWYgKCFmbG9wcHkpCi0JCXJldHVybiAtRU5YSU87CisJcmV0ID0gaWRlX2Zsb3BweV9nZXRfY2FwYWNpdHkoZHJpdmUpOwogCi0JZHJpdmUgPSBmbG9wcHktPmRyaXZlOworCXNldF9jYXBhY2l0eShkaXNrLCBpZGVfZ2RfY2FwYWNpdHkoZHJpdmUpKTsKIAotCWZsb3BweS0+b3BlbmVycysrOwotCi0JaWYgKGZsb3BweS0+b3BlbmVycyA9PSAxKSB7Ci0JCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKLQkJLyogSnVzdCBpbiBjYXNlICovCi0KLQkJaWYgKGlkZV9kb190ZXN0X3VuaXRfcmVhZHkoZHJpdmUsIGRpc2spKQotCQkJaWRlX2RvX3N0YXJ0X3N0b3AoZHJpdmUsIGRpc2ssIDEpOwotCi0JCWlmIChpZGVfZmxvcHB5X2dldF9jYXBhY2l0eShkcml2ZSkKLQkJICAgJiYgKGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkgPT0gMAotCQkgICAgLyoKLQkJICAgICAqIEFsbG93IE9fTkRFTEFZIHRvIG9wZW4gYSBkcml2ZSB3aXRob3V0IGEgZGlzaywgb3Igd2l0aCBhbgotCQkgICAgICogdW5yZWFkYWJsZSBkaXNrLCBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIGZvcm1hdCBjYXBhY2l0eQotCQkgICAgICogb2YgdGhlIGRyaXZlIG9yIGJlZ2luIHRoZSBmb3JtYXQgLSBTYW0KLQkJICAgICAqLwotCQkgICAgKSB7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBvdXRfcHV0X2Zsb3BweTsKLQkJfQotCi0JCWlmICgoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1dQKSAmJiAoZmlscC0+Zl9tb2RlICYgMikpIHsKLQkJCXJldCA9IC1FUk9GUzsKLQkJCWdvdG8gb3V0X3B1dF9mbG9wcHk7Ci0JCX0KLQotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX01FRElBX0NIQU5HRUQ7Ci0JCWlkZV9zZXRfbWVkaWFfbG9jayhkcml2ZSwgZGlzaywgMSk7Ci0JCWNoZWNrX2Rpc2tfY2hhbmdlKGlub2RlLT5pX2JkZXYpOwotCX0gZWxzZSBpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUykgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X3B1dF9mbG9wcHk7Ci0JfQotCXJldHVybiAwOwotCi1vdXRfcHV0X2Zsb3BweToKLQlmbG9wcHktPm9wZW5lcnMtLTsKLQlpZGVfZmxvcHB5X3B1dChmbG9wcHkpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaWRlZmxvcHB5X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gaWRlX2Zsb3BweV9nKGRpc2spOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGZsb3BweS0+ZHJpdmU7Ci0KLQlkZWJ1Z19sb2coIlJlYWNoZWQgJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmIChmbG9wcHktPm9wZW5lcnMgPT0gMSkgewotCQlpZGVfc2V0X21lZGlhX2xvY2soZHJpdmUsIGRpc2ssIDApOwotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7Ci0JfQotCi0JZmxvcHB5LT5vcGVuZXJzLS07Ci0KLQlpZGVfZmxvcHB5X3B1dChmbG9wcHkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZmxvcHB5X2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykKLXsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGlkZV9mbG9wcHlfZyhiZGV2LT5iZF9kaXNrKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBmbG9wcHktPmRyaXZlOwotCi0JZ2VvLT5oZWFkcyA9IGRyaXZlLT5iaW9zX2hlYWQ7Ci0JZ2VvLT5zZWN0b3JzID0gZHJpdmUtPmJpb3Nfc2VjdDsKLQlnZW8tPmN5bGluZGVycyA9ICh1MTYpZHJpdmUtPmJpb3NfY3lsOyAvKiB0cnVuY2F0ZSAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkZV9mbG9wcHlfbG9ja2Rvb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZywgdW5zaWduZWQgaW50IGNtZCkKLXsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGZsb3BweS0+ZGlzazsKLQlpbnQgcHJldmVudCA9IChhcmcgJiYgY21kICE9IENEUk9NRUpFQ1QpID8gMSA6IDA7Ci0KLQlpZiAoZmxvcHB5LT5vcGVuZXJzID4gMSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlkZV9zZXRfbWVkaWFfbG9jayhkcml2ZSwgZGlzaywgcHJldmVudCk7Ci0KLQlpZiAoY21kID09IENEUk9NRUpFQ1QpCi0JCWlkZV9kb19zdGFydF9zdG9wKGRyaXZlLCBkaXNrLCAyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkZWZsb3BweV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBpbm9kZS0+aV9iZGV2OwotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gaWRlX2Zsb3BweV9nKGJkZXYtPmJkX2Rpc2spOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGZsb3BweS0+ZHJpdmU7Ci0Jc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKLQl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQlpbnQgZXJyOwotCi0JaWYgKGNtZCA9PSBDRFJPTUVKRUNUIHx8IGNtZCA9PSBDRFJPTV9MT0NLRE9PUikKLQkJcmV0dXJuIGlkZV9mbG9wcHlfbG9ja2Rvb3IoZHJpdmUsICZwYywgYXJnLCBjbWQpOwotCi0JZXJyID0gaWRlX2Zsb3BweV9mb3JtYXRfaW9jdGwoZHJpdmUsIGZpbGUsIGNtZCwgYXJncCk7Ci0JaWYgKGVyciAhPSAtRU5PVFRZKQotCQlyZXR1cm4gZXJyOwotCi0JLyoKLQkgKiBza2lwIFNDU0lfSU9DVExfU0VORF9DT01NQU5EIChkZXByZWNhdGVkKQotCSAqIGFuZCBDRFJPTV9TRU5EX1BBQ0tFVCAobGVnYWN5KSBpb2N0bHMKLQkgKi8KLQlpZiAoY21kICE9IENEUk9NX1NFTkRfUEFDS0VUICYmIGNtZCAhPSBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORCkKLQkJZXJyID0gc2NzaV9jbWRfaW9jdGwoZmlsZSwgYmRldi0+YmRfZGlzay0+cXVldWUsCi0JCQkJCWJkZXYtPmJkX2Rpc2ssIGNtZCwgYXJncCk7Ci0KLQlpZiAoZXJyID09IC1FTk9UVFkpCi0JCWVyciA9IGdlbmVyaWNfaWRlX2lvY3RsKGRyaXZlLCBmaWxlLCBiZGV2LCBjbWQsIGFyZyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGlkZWZsb3BweV9tZWRpYV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQotewotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gaWRlX2Zsb3BweV9nKGRpc2spOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGZsb3BweS0+ZHJpdmU7Ci0JaW50IHJldDsKLQotCS8qIGRvIG5vdCBzY2FuIHBhcnRpdGlvbnMgdHdpY2UgaWYgdGhpcyBpcyBhIHJlbW92YWJsZSBkZXZpY2UgKi8KLQlpZiAoZHJpdmUtPmF0dGFjaCkgewotCQlkcml2ZS0+YXR0YWNoID0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldCA9ICEhKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19NRURJQV9DSEFOR0VEKTsKLQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19NRURJQV9DSEFOR0VEOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZmxvcHB5X3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKLXsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGlkZV9mbG9wcHlfZyhkaXNrKTsKLQlzZXRfY2FwYWNpdHkoZGlzaywgaWRlZmxvcHB5X2NhcGFjaXR5KGZsb3BweS0+ZHJpdmUpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBpZGVmbG9wcHlfb3BzID0gewotCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCQk9IGlkZWZsb3BweV9vcGVuLAotCS5yZWxlYXNlCQk9IGlkZWZsb3BweV9yZWxlYXNlLAotCS5pb2N0bAkJCT0gaWRlZmxvcHB5X2lvY3RsLAotCS5nZXRnZW8JCQk9IGlkZWZsb3BweV9nZXRnZW8sCi0JLm1lZGlhX2NoYW5nZWQJCT0gaWRlZmxvcHB5X21lZGlhX2NoYW5nZWQsCi0JLnJldmFsaWRhdGVfZGlzawk9IGlkZWZsb3BweV9yZXZhbGlkYXRlX2Rpc2sKK2NvbnN0IHN0cnVjdCBpZGVfZGlza19vcHMgaWRlX2F0YXBpX2Rpc2tfb3BzID0geworCS5jaGVjawkJPSBpZGVfY2hlY2tfYXRhcGlfZGV2aWNlLAorCS5nZXRfY2FwYWNpdHkJPSBpZGVfZmxvcHB5X2dldF9jYXBhY2l0eSwKKwkuc2V0dXAJCT0gaWRlX2Zsb3BweV9zZXR1cCwKKwkuZmx1c2gJCT0gaWRlX2Zsb3BweV9mbHVzaCwKKwkuaW5pdF9tZWRpYQk9IGlkZV9mbG9wcHlfaW5pdF9tZWRpYSwKKwkuc2V0X2Rvb3Jsb2NrCT0gaWRlX3NldF9tZWRpYV9sb2NrLAorCS5kb19yZXF1ZXN0CT0gaWRlX2Zsb3BweV9kb19yZXF1ZXN0LAorCS5lbmRfcmVxdWVzdAk9IGlkZV9mbG9wcHlfZW5kX3JlcXVlc3QsCisJLmlvY3RsCQk9IGlkZV9mbG9wcHlfaW9jdGwsCiB9OwotCi1zdGF0aWMgaW50IGlkZV9mbG9wcHlfcHJvYmUoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5OwotCXN0cnVjdCBnZW5kaXNrICpnOwotCi0JaWYgKCFzdHJzdHIoImlkZS1mbG9wcHkiLCBkcml2ZS0+ZHJpdmVyX3JlcSkpCi0JCWdvdG8gZmFpbGVkOwotCi0JaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZmxvcHB5KQotCQlnb3RvIGZhaWxlZDsKLQotCWlmICghaWRlX2NoZWNrX2F0YXBpX2RldmljZShkcml2ZSwgRFJWX05BTUUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaWRlLWZsb3BweTogJXM6IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIgotCQkJCSIgb2YgaWRlLWZsb3BweVxuIiwgZHJpdmUtPm5hbWUpOwotCQlnb3RvIGZhaWxlZDsKLQl9Ci0JZmxvcHB5ID0ga3phbGxvYyhzaXplb2YoaWRlZmxvcHB5X2Zsb3BweV90KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmbG9wcHkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtZmxvcHB5OiAlczogQ2FuJ3QgYWxsb2NhdGUgYSBmbG9wcHkiCi0JCQkJIiBzdHJ1Y3R1cmVcbiIsIGRyaXZlLT5uYW1lKTsKLQkJZ290byBmYWlsZWQ7Ci0JfQotCi0JZyA9IGFsbG9jX2Rpc2soMSA8PCBQQVJUTl9CSVRTKTsKLQlpZiAoIWcpCi0JCWdvdG8gb3V0X2ZyZWVfZmxvcHB5OwotCi0JaWRlX2luaXRfZGlzayhnLCBkcml2ZSk7Ci0KLQlrcmVmX2luaXQoJmZsb3BweS0+a3JlZik7Ci0KLQlmbG9wcHktPmRyaXZlID0gZHJpdmU7Ci0JZmxvcHB5LT5kcml2ZXIgPSAmaWRlZmxvcHB5X2RyaXZlcjsKLQlmbG9wcHktPmRpc2sgPSBnOwotCi0JZy0+cHJpdmF0ZV9kYXRhID0gJmZsb3BweS0+ZHJpdmVyOwotCi0JZHJpdmUtPmRyaXZlcl9kYXRhID0gZmxvcHB5OwotCi0JaWRlZmxvcHB5X3NldHVwKGRyaXZlLCBmbG9wcHkpOwotCi0JZy0+bWlub3JzID0gMSA8PCBQQVJUTl9CSVRTOwotCWctPmRyaXZlcmZzX2RldiA9ICZkcml2ZS0+Z2VuZGV2OwotCWctPmZsYWdzID0gZHJpdmUtPnJlbW92YWJsZSA/IEdFTkhEX0ZMX1JFTU9WQUJMRSA6IDA7Ci0JZy0+Zm9wcyA9ICZpZGVmbG9wcHlfb3BzOwotCWRyaXZlLT5hdHRhY2ggPSAxOwotCWFkZF9kaXNrKGcpOwotCXJldHVybiAwOwotCi1vdXRfZnJlZV9mbG9wcHk6Ci0Ja2ZyZWUoZmxvcHB5KTsKLWZhaWxlZDoKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlkZWZsb3BweV9leGl0KHZvaWQpCi17Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmlkZWZsb3BweV9kcml2ZXIuZ2VuX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlkZWZsb3BweV9pbml0KHZvaWQpCi17Ci0JcHJpbnRrKCJpZGUtZmxvcHB5IGRyaXZlciAiIElERUZMT1BQWV9WRVJTSU9OICJcbiIpOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlkZWZsb3BweV9kcml2ZXIuZ2VuX2RyaXZlcik7Ci19Ci0KLU1PRFVMRV9BTElBUygiaWRlOiptLWZsb3BweSoiKTsKLU1PRFVMRV9BTElBUygiaWRlLWZsb3BweSIpOwotbW9kdWxlX2luaXQoaWRlZmxvcHB5X2luaXQpOwotbW9kdWxlX2V4aXQoaWRlZmxvcHB5X2V4aXQpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBVEFQSSBGTE9QUFkgRHJpdmVyIik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuaCBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuaAppbmRleCBlY2FkYzJiLi5jMTcxMjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmgKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5oCkBAIC0xLDQzICsxLDkgQEAKICNpZm5kZWYgX19JREVfRkxPUFBZX0gKICNkZWZpbmUgX19JREVfRkxPUFBZX0gKIAotLyoKLSAqIE1vc3Qgb2Ygb3VyIGdsb2JhbCBkYXRhIHdoaWNoIHdlIG5lZWQgdG8gc2F2ZSBldmVuIGFzIHdlIGxlYXZlIHRoZSBkcml2ZXIKLSAqIGR1ZSB0byBhbiBpbnRlcnJ1cHQgb3IgYSB0aW1lciBldmVudCBpcyBzdG9yZWQgaW4gYSB2YXJpYWJsZSBvZiB0eXBlCi0gKiBpZGVmbG9wcHlfZmxvcHB5X3QsIGRlZmluZWQgYmVsb3cuCi0gKi8KLXR5cGVkZWYgc3RydWN0IGlkZV9mbG9wcHlfb2JqIHsKLQlpZGVfZHJpdmVfdAkqZHJpdmU7Ci0JaWRlX2RyaXZlcl90CSpkcml2ZXI7Ci0Jc3RydWN0IGdlbmRpc2sJKmRpc2s7Ci0Jc3RydWN0IGtyZWYJa3JlZjsKLQl1bnNpZ25lZCBpbnQJb3BlbmVyczsJLyogcHJvdGVjdGVkIGJ5IEJLTCBmb3Igbm93ICovCisjaW5jbHVkZSAiaWRlLWdkLmgiCiAKLQkvKiBDdXJyZW50IHBhY2tldCBjb21tYW5kICovCi0Jc3RydWN0IGlkZV9hdGFwaV9wYyAqcGM7Ci0JLyogTGFzdCBmYWlsZWQgcGFja2V0IGNvbW1hbmQgKi8KLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpmYWlsZWRfcGM7Ci0JLyogdXNlZCBmb3IgYmxrX3tmcyxwY31fcmVxdWVzdCgpIHJlcXVlc3RzICovCi0Jc3RydWN0IGlkZV9hdGFwaV9wYyBxdWV1ZWRfcGM7Ci0KLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHJlcXVlc3Rfc2Vuc2VfcGM7Ci0Jc3RydWN0IHJlcXVlc3QgcmVxdWVzdF9zZW5zZV9ycTsKLQotCS8qIExhc3QgZXJyb3IgaW5mb3JtYXRpb24gKi8KLQl1OCBzZW5zZV9rZXksIGFzYywgYXNjcTsKLQkvKiBkZWxheSB0aGlzIGxvbmcgYmVmb3JlIHNlbmRpbmcgcGFja2V0IGNvbW1hbmQgKi8KLQl1OCB0aWNrczsKLQlpbnQgcHJvZ3Jlc3NfaW5kaWNhdGlvbjsKLQotCS8qIERldmljZSBpbmZvcm1hdGlvbiAqLwotCS8qIEN1cnJlbnQgZm9ybWF0ICovCi0JaW50IGJsb2NrcywgYmxvY2tfc2l6ZSwgYnNfZmFjdG9yOwotCS8qIExhc3QgZm9ybWF0IGNhcGFjaXR5IGRlc2NyaXB0b3IgKi8KLQl1OCBjYXBfZGVzY1s4XTsKLQkvKiBDb3B5IG9mIHRoZSBmbGV4aWJsZSBkaXNrIHBhZ2UgKi8KLQl1OCBmbGV4aWJsZV9kaXNrX3BhZ2VbMzJdOwotfSBpZGVmbG9wcHlfZmxvcHB5X3Q7Ci0KKyNpZmRlZiBDT05GSUdfSURFX0dEX0FUQVBJCiAvKgogICogUGFnZXMgb2YgdGhlIFNFTEVDVCBTRU5TRSAvIE1PREUgU0VOU0UgcGFja2V0IGNvbW1hbmRzLgogICogU2VlIFNGRi04MDcwaSBzcGVjLgpAQCAtNTIsMTIgKzE4LDIyIEBACiAjZGVmaW5lIElERUZMT1BQWV9JT0NUTF9GT1JNQVRfR0VUX1BST0dSRVNTCTB4NDYwMwogCiAvKiBpZGUtZmxvcHB5LmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWRlX2Rpc2tfb3BzIGlkZV9hdGFwaV9kaXNrX29wczsKIHZvaWQgaWRlX2Zsb3BweV9jcmVhdGVfbW9kZV9zZW5zZV9jbWQoc3RydWN0IGlkZV9hdGFwaV9wYyAqLCB1OCk7CiB2b2lkIGlkZV9mbG9wcHlfY3JlYXRlX3JlYWRfY2FwYWNpdHlfY21kKHN0cnVjdCBpZGVfYXRhcGlfcGMgKik7Ci12b2lkIGlkZV9mbG9wcHlfY3JlYXRlX3JlcXVlc3Rfc2Vuc2VfY21kKHN0cnVjdCBpZGVfYXRhcGlfcGMgKik7CiAKIC8qIGlkZS1mbG9wcHlfaW9jdGwuYyAqLwotaW50IGlkZV9mbG9wcHlfZm9ybWF0X2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKLQkJCSAgICB2b2lkIF9fdXNlciAqKTsKK2ludCBpZGVfZmxvcHB5X2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCSAgICAgdW5zaWduZWQgbG9uZyk7CisKKyNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKKy8qIGlkZS1mbG9wcHlfcHJvYy5jICovCitleHRlcm4gaWRlX3Byb2NfZW50cnlfdCBpZGVfZmxvcHB5X3Byb2NbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0IGlkZV9mbG9wcHlfc2V0dGluZ3NbXTsKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgaWRlX2Zsb3BweV9wcm9jCQlOVUxMCisjZGVmaW5lIGlkZV9mbG9wcHlfc2V0dGluZ3MJTlVMTAorI2VuZGlmCiAKICNlbmRpZiAvKl9fSURFX0ZMT1BQWV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X2lvY3RsLmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X2lvY3RsLmMKaW5kZXggNWZmYzQ1MS4uNDA5ZTRjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfaW9jdGwuYwpAQCAtMzMsNyArMzMsNyBAQAogCiBzdGF0aWMgaW50IGlkZV9mbG9wcHlfZ2V0X2Zvcm1hdF9jYXBhY2l0aWVzKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IF9fdXNlciAqYXJnKQogewotCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCXU4IGhlYWRlcl9sZW4sIGRlc2NfY250OwogCWludCBpLCBibG9ja3MsIGxlbmd0aCwgdV9hcnJheV9zaXplLCB1X2luZGV4OwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9nZXRfc2ZycF9iaXQoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHBjOwogCiAJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfU1JGUDsKQEAgLTEzMiwxNyArMTMyLDE3IEBACiAKIHN0YXRpYyBpbnQgaWRlX2Zsb3BweV9mb3JtYXRfdW5pdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBfX3VzZXIgKmFyZykKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAlpbnQgYmxvY2tzLCBsZW5ndGgsIGZsYWdzLCBlcnIgPSAwOwogCiAJaWYgKGZsb3BweS0+b3BlbmVycyA+IDEpIHsKIAkJLyogRG9uJ3QgZm9ybWF0IGlmIHNvbWVvbmUgaXMgdXNpbmcgdGhlIGRpc2sgKi8KLQkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfRk9STUFUX0lOX1BST0dSRVNTOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRk9STUFUX0lOX1BST0dSRVNTOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfRk9STUFUX0lOX1BST0dSRVNTOworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKIAogCS8qCiAJICogU2VuZCBBVEFQSV9GT1JNQVRfVU5JVCB0byB0aGUgZHJpdmUuCkBAIC0xNzQsNyArMTc0LDcgQEAKIAogb3V0OgogCWlmIChlcnIpCi0JCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xOTAsMTIgKzE5MCwxMiBAQAogCiBzdGF0aWMgaW50IGlkZV9mbG9wcHlfZ2V0X2Zvcm1hdF9wcm9ncmVzcyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBfX3VzZXIgKmFyZykKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAlpbnQgcHJvZ3Jlc3NfaW5kaWNhdGlvbiA9IDB4MTAwMDA7CiAKIAlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1NSRlApIHsKLQkJaWRlX2Zsb3BweV9jcmVhdGVfcmVxdWVzdF9zZW5zZV9jbWQoJnBjKTsKKwkJaWRlX2NyZWF0ZV9yZXF1ZXN0X3NlbnNlX2NtZChkcml2ZSwgJnBjKTsKIAkJaWYgKGlkZV9xdWV1ZV9wY190YWlsKGRyaXZlLCBmbG9wcHktPmRpc2ssICZwYykpCiAJCQlyZXR1cm4gLUVJTzsKIApAQCAtMjIzLDggKzIyMywyNiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaWRlX2Zsb3BweV9mb3JtYXRfaW9jdGwoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKK3N0YXRpYyBpbnQgaWRlX2Zsb3BweV9sb2NrZG9vcihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnLCB1bnNpZ25lZCBpbnQgY21kKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGZsb3BweS0+ZGlzazsKKwlpbnQgcHJldmVudCA9IChhcmcgJiYgY21kICE9IENEUk9NRUpFQ1QpID8gMSA6IDA7CisKKwlpZiAoZmxvcHB5LT5vcGVuZXJzID4gMSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlkZV9zZXRfbWVkaWFfbG9jayhkcml2ZSwgZGlzaywgcHJldmVudCk7CisKKwlpZiAoY21kID09IENEUk9NRUpFQ1QpCisJCWlkZV9kb19zdGFydF9zdG9wKGRyaXZlLCBkaXNrLCAyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkZV9mbG9wcHlfZm9ybWF0X2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZ3ApCiB7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIElERUZMT1BQWV9JT0NUTF9GT1JNQVRfU1VQUE9SVEVEOgpAQCAtMjQxLDMgKzI1OSwzMiBAQAogCQlyZXR1cm4gLUVOT1RUWTsKIAl9CiB9CisKK2ludCBpZGVfZmxvcHB5X2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGlub2RlLT5pX2JkZXY7CisJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlpbnQgZXJyOworCisJaWYgKGNtZCA9PSBDRFJPTUVKRUNUIHx8IGNtZCA9PSBDRFJPTV9MT0NLRE9PUikKKwkJcmV0dXJuIGlkZV9mbG9wcHlfbG9ja2Rvb3IoZHJpdmUsICZwYywgYXJnLCBjbWQpOworCisJZXJyID0gaWRlX2Zsb3BweV9mb3JtYXRfaW9jdGwoZHJpdmUsIGZpbGUsIGNtZCwgYXJncCk7CisJaWYgKGVyciAhPSAtRU5PVFRZKQorCQlyZXR1cm4gZXJyOworCisJLyoKKwkgKiBza2lwIFNDU0lfSU9DVExfU0VORF9DT01NQU5EIChkZXByZWNhdGVkKQorCSAqIGFuZCBDRFJPTV9TRU5EX1BBQ0tFVCAobGVnYWN5KSBpb2N0bHMKKwkgKi8KKwlpZiAoY21kICE9IENEUk9NX1NFTkRfUEFDS0VUICYmIGNtZCAhPSBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORCkKKwkJZXJyID0gc2NzaV9jbWRfaW9jdGwoZmlsZSwgYmRldi0+YmRfZGlzay0+cXVldWUsCisJCQkJCWJkZXYtPmJkX2Rpc2ssIGNtZCwgYXJncCk7CisKKwlpZiAoZXJyID09IC1FTk9UVFkpCisJCWVyciA9IGdlbmVyaWNfaWRlX2lvY3RsKGRyaXZlLCBmaWxlLCBiZGV2LCBjbWQsIGFyZyk7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWM3NjJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9wcm9jLmMKQEAgLTAsMCArMSwzMyBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorCisjaW5jbHVkZSAiaWRlLWZsb3BweS5oIgorCitzdGF0aWMgaW50IHByb2NfaWRlZmxvcHB5X3JlYWRfY2FwYWNpdHkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaWRlX2RyaXZlX3QqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKilkYXRhOworCWludCBsZW47CisKKwlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLCAobG9uZyBsb25nKWlkZV9nZF9jYXBhY2l0eShkcml2ZSkpOworCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7Cit9CisKK2lkZV9wcm9jX2VudHJ5X3QgaWRlX2Zsb3BweV9wcm9jW10gPSB7CisJeyAiY2FwYWNpdHkiLAlTX0lGUkVHfFNfSVJVR08sIHByb2NfaWRlZmxvcHB5X3JlYWRfY2FwYWNpdHksCU5VTEwgfSwKKwl7ICJnZW9tZXRyeSIsCVNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVfcmVhZF9nZW9tZXRyeSwJTlVMTCB9LAorCXsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9Cit9OworCitpZGVfZGV2c2V0X3J3X2ZpZWxkKGJpb3NfY3lsLCBiaW9zX2N5bCk7CitpZGVfZGV2c2V0X3J3X2ZpZWxkKGJpb3NfaGVhZCwgYmlvc19oZWFkKTsKK2lkZV9kZXZzZXRfcndfZmllbGQoYmlvc19zZWN0LCBiaW9zX3NlY3QpOworaWRlX2RldnNldF9yd19maWVsZCh0aWNrcywgcGNfZGVsYXkpOworCitjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0IGlkZV9mbG9wcHlfc2V0dGluZ3NbXSA9IHsKKwlJREVfUFJPQ19ERVZTRVQoYmlvc19jeWwsICAwLCAxMDIzKSwKKwlJREVfUFJPQ19ERVZTRVQoYmlvc19oZWFkLCAwLCAgMjU1KSwKKwlJREVfUFJPQ19ERVZTRVQoYmlvc19zZWN0LCAwLCAgIDYzKSwKKwlJREVfUFJPQ19ERVZTRVQodGlja3MsCSAgIDAsICAyNTUpLAorCXsgMCB9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZC5jIGIvZHJpdmVycy9pZGUvaWRlLWdkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0ODk4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCkBAIC0wLDAgKzEsMzk4IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorCisjaWYgIWRlZmluZWQoQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUKQorI2RlZmluZSBJREVfRElTS19NSU5PUlMJCSgxIDw8IFBBUlROX0JJVFMpCisjZWxzZQorI2RlZmluZSBJREVfRElTS19NSU5PUlMJCTAKKyNlbmRpZgorCisjaW5jbHVkZSAiaWRlLWRpc2suaCIKKyNpbmNsdWRlICJpZGUtZmxvcHB5LmgiCisKKyNkZWZpbmUgSURFX0dEX1ZFUlNJT04JIjEuMTgiCisKKy8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWJ1Z19tYXNrOworbW9kdWxlX3BhcmFtKGRlYnVnX21hc2ssIHVsb25nLCAwNjQ0KTsKKworc3RhdGljIERFRklORV9NVVRFWChpZGVfZGlza19yZWZfbXV0ZXgpOworCitzdGF0aWMgdm9pZCBpZGVfZGlza19yZWxlYXNlKHN0cnVjdCBrcmVmICopOworCitzdGF0aWMgc3RydWN0IGlkZV9kaXNrX29iaiAqaWRlX2Rpc2tfZ2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBOVUxMOworCisJbXV0ZXhfbG9jaygmaWRlX2Rpc2tfcmVmX211dGV4KTsKKwlpZGtwID0gaWRlX2Rydl9nKGRpc2ssIGlkZV9kaXNrX29iaik7CisJaWYgKGlka3ApIHsKKwkJaWYgKGlkZV9kZXZpY2VfZ2V0KGlka3AtPmRyaXZlKSkKKwkJCWlka3AgPSBOVUxMOworCQllbHNlCisJCQlrcmVmX2dldCgmaWRrcC0+a3JlZik7CisJfQorCW11dGV4X3VubG9jaygmaWRlX2Rpc2tfcmVmX211dGV4KTsKKwlyZXR1cm4gaWRrcDsKK30KKworc3RhdGljIHZvaWQgaWRlX2Rpc2tfcHV0KHN0cnVjdCBpZGVfZGlza19vYmogKmlka3ApCit7CisJaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7CisKKwltdXRleF9sb2NrKCZpZGVfZGlza19yZWZfbXV0ZXgpOworCWtyZWZfcHV0KCZpZGtwLT5rcmVmLCBpZGVfZGlza19yZWxlYXNlKTsKKwlpZGVfZGV2aWNlX3B1dChkcml2ZSk7CisJbXV0ZXhfdW5sb2NrKCZpZGVfZGlza19yZWZfbXV0ZXgpOworfQorCitzZWN0b3JfdCBpZGVfZ2RfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBkcml2ZS0+Y2FwYWNpdHk2NDsKK30KKworc3RhdGljIGludCBpZGVfZ2RfcHJvYmUoaWRlX2RyaXZlX3QgKik7CisKK3N0YXRpYyB2b2lkIGlkZV9nZF9yZW1vdmUoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGdlbmRpc2sgKmcgPSBpZGtwLT5kaXNrOworCisJaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGlka3AtPmRyaXZlcik7CisKKwlkZWxfZ2VuZGlzayhnKTsKKworCWRyaXZlLT5kaXNrX29wcy0+Zmx1c2goZHJpdmUpOworCisJaWRlX2Rpc2tfcHV0KGlka3ApOworfQorCitzdGF0aWMgdm9pZCBpZGVfZGlza19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSB0b19pZGVfZHJ2KGtyZWYsIGlkZV9kaXNrX29iaik7CisJaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7CisJc3RydWN0IGdlbmRpc2sgKmcgPSBpZGtwLT5kaXNrOworCisJZHJpdmUtPmRpc2tfb3BzID0gTlVMTDsKKwlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCWctPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcHV0X2Rpc2soZyk7CisJa2ZyZWUoaWRrcCk7Cit9CisKKy8qCisgKiBPbiBIUEEgZHJpdmVzIHRoZSBjYXBhY2l0eSBuZWVkcyB0byBiZQorICogcmVpbml0aWxpemVkIG9uIHJlc3VtZSBvdGhlcndpc2UgdGhlIGRpc2sKKyAqIGNhbiBub3QgYmUgdXNlZCBhbmQgYSBoYXJkIHJlc2V0IGlzIHJlcXVpcmVkCisgKi8KK3N0YXRpYyB2b2lkIGlkZV9nZF9yZXN1bWUoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlmIChhdGFfaWRfaHBhX2VuYWJsZWQoZHJpdmUtPmlkKSkKKwkJKHZvaWQpZHJpdmUtPmRpc2tfb3BzLT5nZXRfY2FwYWNpdHkoZHJpdmUpOworfQorCitzdGF0aWMgdm9pZCBpZGVfZ2Rfc2h1dGRvd24oaWRlX2RyaXZlX3QgKmRyaXZlKQoreworI2lmZGVmCUNPTkZJR19BTFBIQQorCS8qIE9uIEFscGhhLCBoYWx0KDgpIGRvZXNuJ3QgYWN0dWFsbHkgdHVybiB0aGUgbWFjaGluZSBvZmYsCisJICAgaXQgcHV0cyB5b3UgaW50byB0aGUgc29ydCBvZiBmaXJtd2FyZSBtb25pdG9yLiBUeXBpY2FsbHksCisJICAgaXQncyB1c2VkIHRvIGJvb3QgYW5vdGhlciBrZXJuZWwgaW1hZ2UsIHNvIGl0J3Mgbm90IG11Y2gKKwkgICBkaWZmZXJlbnQgZnJvbSByZWJvb3QoOCkuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgbmVlZCB0bworCSAgIHNwaW4gZG93biB0aGUgZGlzayBpbiB0aGlzIGNhc2UsIGVzcGVjaWFsbHkgc2luY2UgQWxwaGEKKwkgICBmaXJtd2FyZSBkb2Vzbid0IGhhbmRsZSBkaXNrcyBpbiBzdGFuZGJ5IG1vZGUgcHJvcGVybHkuCisJICAgT24gdGhlIG90aGVyIGhhbmQsIGl0J3MgcmVhc29uYWJseSBzYWZlIHRvIHR1cm4gdGhlIHBvd2VyCisJICAgb2ZmIHdoZW4gdGhlIHNodXRkb3duIHByb2Nlc3MgcmVhY2hlcyB0aGUgZmlybXdhcmUgcHJvbXB0LAorCSAgIGFzIHRoZSBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiB0YWtlcyByYXRoZXIgbG9uZyB0aW1lIC0KKwkgICBhdCBsZWFzdCAxMCBzZWNvbmRzLCB3aGljaCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IKKwkgICB0aGUgZGlzayB0byBleHBpcmUgaXRzIHdyaXRlIGNhY2hlLiAqLworCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1BPV0VSX09GRikgeworI2Vsc2UKKwlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SRVNUQVJUKSB7CisjZW5kaWYKKwkJZHJpdmUtPmRpc2tfb3BzLT5mbHVzaChkcml2ZSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJTaHV0ZG93bjogJXNcbiIsIGRyaXZlLT5uYW1lKTsKKworCWRyaXZlLT5nZW5kZXYuYnVzLT5zdXNwZW5kKCZkcml2ZS0+Z2VuZGV2LCBQTVNHX1NVU1BFTkQpOworfQorCisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCitzdGF0aWMgaWRlX3Byb2NfZW50cnlfdCAqaWRlX2Rpc2tfcHJvY19lbnRyaWVzKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykgPyBpZGVfZGlza19wcm9jIDogaWRlX2Zsb3BweV9wcm9jOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCAqaWRlX2Rpc2tfcHJvY19kZXZzZXRzKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykgPyBpZGVfZGlza19zZXR0aW5ncworCQkJCQkgIDogaWRlX2Zsb3BweV9zZXR0aW5nczsKK30KKyNlbmRpZgorCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9nZF9kb19yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJCQkJIHN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3Qgc2VjdG9yKQoreworCXJldHVybiBkcml2ZS0+ZGlza19vcHMtPmRvX3JlcXVlc3QoZHJpdmUsIHJxLCBzZWN0b3IpOworfQorCitzdGF0aWMgaW50IGlkZV9nZF9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5yc2VjcykKK3sKKwlyZXR1cm4gZHJpdmUtPmRpc2tfb3BzLT5lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIG5yc2Vjcyk7Cit9CisKK3N0YXRpYyBpZGVfZHJpdmVyX3QgaWRlX2dkX2RyaXZlciA9IHsKKwkuZ2VuX2RyaXZlciA9IHsKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkubmFtZQkJPSAiaWRlLWdkIiwKKwkJLmJ1cwkJPSAmaWRlX2J1c190eXBlLAorCX0sCisJLnByb2JlCQkJPSBpZGVfZ2RfcHJvYmUsCisJLnJlbW92ZQkJCT0gaWRlX2dkX3JlbW92ZSwKKwkucmVzdW1lCQkJPSBpZGVfZ2RfcmVzdW1lLAorCS5zaHV0ZG93bgkJPSBpZGVfZ2Rfc2h1dGRvd24sCisJLnZlcnNpb24JCT0gSURFX0dEX1ZFUlNJT04sCisJLmRvX3JlcXVlc3QJCT0gaWRlX2dkX2RvX3JlcXVlc3QsCisJLmVuZF9yZXF1ZXN0CQk9IGlkZV9nZF9lbmRfcmVxdWVzdCwKKwkuZXJyb3IJCQk9IF9faWRlX2Vycm9yLAorI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUworCS5wcm9jX2VudHJpZXMJCT0gaWRlX2Rpc2tfcHJvY19lbnRyaWVzLAorCS5wcm9jX2RldnNldHMJCT0gaWRlX2Rpc2tfcHJvY19kZXZzZXRzLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IGlkZV9nZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwOworCWlkZV9kcml2ZV90ICpkcml2ZTsKKwlpbnQgcmV0ID0gMDsKKworCWlka3AgPSBpZGVfZGlza19nZXQoZGlzayk7CisJaWYgKGlka3AgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTlhJTzsKKworCWRyaXZlID0gaWRrcC0+ZHJpdmU7CisKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKworCWlka3AtPm9wZW5lcnMrKzsKKworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19SRU1PVkFCTEUpICYmIGlka3AtPm9wZW5lcnMgPT0gMSkgeworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRk9STUFUX0lOX1BST0dSRVNTOworCQkvKiBKdXN0IGluIGNhc2UgKi8KKworCQlyZXQgPSBkcml2ZS0+ZGlza19vcHMtPmluaXRfbWVkaWEoZHJpdmUsIGRpc2spOworCisJCS8qCisJCSAqIEFsbG93IE9fTkRFTEFZIHRvIG9wZW4gYSBkcml2ZSB3aXRob3V0IGEgZGlzaywgb3Igd2l0aCBhbgorCQkgKiB1bnJlYWRhYmxlIGRpc2ssIHNvIHRoYXQgd2UgY2FuIGdldCB0aGUgZm9ybWF0IGNhcGFjaXR5CisJCSAqIG9mIHRoZSBkcml2ZSBvciBiZWdpbiB0aGUgZm9ybWF0IC0gU2FtCisJCSAqLworCQlpZiAocmV0ICYmIChmaWxwLT5mX2ZsYWdzICYgT19OREVMQVkpID09IDApIHsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIG91dF9wdXRfaWRrcDsKKwkJfQorCisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19XUCkgJiYgKGZpbHAtPmZfbW9kZSAmIDIpKSB7CisJCQlyZXQgPSAtRVJPRlM7CisJCQlnb3RvIG91dF9wdXRfaWRrcDsKKwkJfQorCisJCS8qCisJCSAqIElnbm9yZSB0aGUgcmV0dXJuIGNvZGUgZnJvbSBkb29yX2xvY2ssCisJCSAqIHNpbmNlIHRoZSBvcGVuKCkgaGFzIGFscmVhZHkgc3VjY2VlZGVkLAorCQkgKiBhbmQgdGhlIGRvb3JfbG9jayBpcyBpcnJlbGV2YW50IGF0IHRoaXMgcG9pbnQuCisJCSAqLworCQlkcml2ZS0+ZGlza19vcHMtPnNldF9kb29ybG9jayhkcml2ZSwgZGlzaywgMSk7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX01FRElBX0NIQU5HRUQ7CisJCWNoZWNrX2Rpc2tfY2hhbmdlKGlub2RlLT5pX2JkZXYpOworCX0gZWxzZSBpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19GT1JNQVRfSU5fUFJPR1JFU1MpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dF9wdXRfaWRrcDsKKwl9CisJcmV0dXJuIDA7CisKK291dF9wdXRfaWRrcDoKKwlpZGtwLT5vcGVuZXJzLS07CisJaWRlX2Rpc2tfcHV0KGlka3ApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaWRlX2dkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZHJ2X2coZGlzaywgaWRlX2Rpc2tfb2JqKTsKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKKworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGlka3AtPm9wZW5lcnMgPT0gMSkKKwkJZHJpdmUtPmRpc2tfb3BzLT5mbHVzaChkcml2ZSk7CisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKSAmJiBpZGtwLT5vcGVuZXJzID09IDEpIHsKKwkJZHJpdmUtPmRpc2tfb3BzLT5zZXRfZG9vcmxvY2soZHJpdmUsIGRpc2ssIDApOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRk9STUFUX0lOX1BST0dSRVNTOworCX0KKworCWlka3AtPm9wZW5lcnMtLTsKKworCWlkZV9kaXNrX3B1dChpZGtwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkZV9nZF9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCit7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kcnZfZyhiZGV2LT5iZF9kaXNrLCBpZGVfZGlza19vYmopOworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOworCisJZ2VvLT5oZWFkcyA9IGRyaXZlLT5iaW9zX2hlYWQ7CisJZ2VvLT5zZWN0b3JzID0gZHJpdmUtPmJpb3Nfc2VjdDsKKwlnZW8tPmN5bGluZGVycyA9ICh1MTYpZHJpdmUtPmJpb3NfY3lsOyAvKiB0cnVuY2F0ZSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkZV9nZF9tZWRpYV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZHJ2X2coZGlzaywgaWRlX2Rpc2tfb2JqKTsKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKKwlpbnQgcmV0OworCisJLyogZG8gbm90IHNjYW4gcGFydGl0aW9ucyB0d2ljZSBpZiB0aGlzIGlzIGEgcmVtb3ZhYmxlIGRldmljZSAqLworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0FUVEFDSCkgeworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfQVRUQUNIOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX01FRElBX0NIQU5HRUQpOworCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19NRURJQV9DSEFOR0VEOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpZGVfZ2RfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZHJ2X2coZGlzaywgaWRlX2Rpc2tfb2JqKTsKKwlzZXRfY2FwYWNpdHkoZGlzaywgaWRlX2dkX2NhcGFjaXR5KGlka3AtPmRyaXZlKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWRlX2dkX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rydl9nKGJkZXYtPmJkX2Rpc2ssIGlkZV9kaXNrX29iaik7CisJaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7CisKKwlyZXR1cm4gZHJpdmUtPmRpc2tfb3BzLT5pb2N0bChkcml2ZSwgaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKK30KKworc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBpZGVfZ2Rfb3BzID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCQk9IGlkZV9nZF9vcGVuLAorCS5yZWxlYXNlCQk9IGlkZV9nZF9yZWxlYXNlLAorCS5pb2N0bAkJCT0gaWRlX2dkX2lvY3RsLAorCS5nZXRnZW8JCQk9IGlkZV9nZF9nZXRnZW8sCisJLm1lZGlhX2NoYW5nZWQJCT0gaWRlX2dkX21lZGlhX2NoYW5nZWQsCisJLnJldmFsaWRhdGVfZGlzawk9IGlkZV9nZF9yZXZhbGlkYXRlX2Rpc2sKK307CisKK3N0YXRpYyBpbnQgaWRlX2dkX3Byb2JlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwljb25zdCBzdHJ1Y3QgaWRlX2Rpc2tfb3BzICpkaXNrX29wcyA9IE5VTEw7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcDsKKwlzdHJ1Y3QgZ2VuZGlzayAqZzsKKworCS8qIHN0cnN0cigiZm9vIiwgIiIpIGlzIG5vbi1OVUxMICovCisJaWYgKCFzdHJzdHIoImlkZS1nZCIsIGRyaXZlLT5kcml2ZXJfcmVxKSkKKwkJZ290byBmYWlsZWQ7CisKKyNpZmRlZiBDT05GSUdfSURFX0dEX0FUQQorCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCisJCWRpc2tfb3BzID0gJmlkZV9hdGFfZGlza19vcHM7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSURFX0dEX0FUQVBJCisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZmxvcHB5KQorCQlkaXNrX29wcyA9ICZpZGVfYXRhcGlfZGlza19vcHM7CisjZW5kaWYKKwlpZiAoZGlza19vcHMgPT0gTlVMTCkKKwkJZ290byBmYWlsZWQ7CisKKwlpZiAoZGlza19vcHMtPmNoZWNrKGRyaXZlLCBEUlZfTkFNRSkgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlclxuIiwKKwkJCWRyaXZlLT5uYW1lKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJaWRrcCA9IGt6YWxsb2Moc2l6ZW9mKCppZGtwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZGtwKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW4ndCBhbGxvY2F0ZSBhIGRpc2sgc3RydWN0dXJlXG4iLAorCQkJZHJpdmUtPm5hbWUpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlnID0gYWxsb2NfZGlza19ub2RlKElERV9ESVNLX01JTk9SUywgaHdpZl90b19ub2RlKGRyaXZlLT5od2lmKSk7CisJaWYgKCFnKQorCQlnb3RvIG91dF9mcmVlX2lka3A7CisKKwlpZGVfaW5pdF9kaXNrKGcsIGRyaXZlKTsKKworCWtyZWZfaW5pdCgmaWRrcC0+a3JlZik7CisKKwlpZGtwLT5kcml2ZSA9IGRyaXZlOworCWlka3AtPmRyaXZlciA9ICZpZGVfZ2RfZHJpdmVyOworCWlka3AtPmRpc2sgPSBnOworCisJZy0+cHJpdmF0ZV9kYXRhID0gJmlka3AtPmRyaXZlcjsKKworCWRyaXZlLT5kcml2ZXJfZGF0YSA9IGlka3A7CisJZHJpdmUtPmRlYnVnX21hc2sgPSBkZWJ1Z19tYXNrOworCWRyaXZlLT5kaXNrX29wcyA9IGRpc2tfb3BzOworCisJZGlza19vcHMtPnNldHVwKGRyaXZlKTsKKworCXNldF9jYXBhY2l0eShnLCBpZGVfZ2RfY2FwYWNpdHkoZHJpdmUpKTsKKworCWctPm1pbm9ycyA9IElERV9ESVNLX01JTk9SUzsKKwlnLT5kcml2ZXJmc19kZXYgPSAmZHJpdmUtPmdlbmRldjsKKwlnLT5mbGFncyB8PSBHRU5IRF9GTF9FWFRfREVWVDsKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19SRU1PVkFCTEUpCisJCWctPmZsYWdzID0gR0VOSERfRkxfUkVNT1ZBQkxFOworCWctPmZvcHMgPSAmaWRlX2dkX29wczsKKwlhZGRfZGlzayhnKTsKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfaWRrcDoKKwlrZnJlZShpZGtwKTsKK2ZhaWxlZDoKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBfX2luaXQgaWRlX2dkX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICIgZHJpdmVyICIgSURFX0dEX1ZFUlNJT04gIlxuIik7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmaWRlX2dkX2RyaXZlci5nZW5fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlkZV9nZF9leGl0KHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJmlkZV9nZF9kcml2ZXIuZ2VuX2RyaXZlcik7Cit9CisKK01PRFVMRV9BTElBUygiaWRlOiptLWRpc2sqIik7CitNT0RVTEVfQUxJQVMoImlkZS1kaXNrIik7CitNT0RVTEVfQUxJQVMoImlkZToqbS1mbG9wcHkqIik7CitNT0RVTEVfQUxJQVMoImlkZS1mbG9wcHkiKTsKK21vZHVsZV9pbml0KGlkZV9nZF9pbml0KTsKK21vZHVsZV9leGl0KGlkZV9nZF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiZ2VuZXJpYyBBVEEvQVRBUEkgZGlzayBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZC5oIGIvZHJpdmVycy9pZGUvaWRlLWdkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QzZDEwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgX19JREVfR0RfSAorI2RlZmluZSBfX0lERV9HRF9ICisKKyNkZWZpbmUgRFJWX05BTUUgImlkZS1nZCIKKyNkZWZpbmUgUEZYIERSVl9OQU1FICI6ICIKKworLyogZGVmaW5lIHRvIHNlZSBkZWJ1ZyBpbmZvICovCisjZGVmaW5lIElERV9HRF9ERUJVR19MT0cJMAorCisjaWYgSURFX0dEX0RFQlVHX0xPRworI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBfX2lkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MpCisjZWxzZQorI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdHJ1Y3QgaWRlX2Rpc2tfb2JqIHsKKwlpZGVfZHJpdmVfdAkqZHJpdmU7CisJaWRlX2RyaXZlcl90CSpkcml2ZXI7CisJc3RydWN0IGdlbmRpc2sJKmRpc2s7CisJc3RydWN0IGtyZWYJa3JlZjsKKwl1bnNpZ25lZCBpbnQJb3BlbmVyczsJLyogcHJvdGVjdGVkIGJ5IEJLTCBmb3Igbm93ICovCisKKwkvKiBMYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKmZhaWxlZF9wYzsKKwkvKiB1c2VkIGZvciBibGtfe2ZzLHBjfV9yZXF1ZXN0KCkgcmVxdWVzdHMgKi8KKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHF1ZXVlZF9wYzsKKworCS8qIExhc3QgZXJyb3IgaW5mb3JtYXRpb24gKi8KKwl1OCBzZW5zZV9rZXksIGFzYywgYXNjcTsKKworCWludCBwcm9ncmVzc19pbmRpY2F0aW9uOworCisJLyogRGV2aWNlIGluZm9ybWF0aW9uICovCisJLyogQ3VycmVudCBmb3JtYXQgKi8KKwlpbnQgYmxvY2tzLCBibG9ja19zaXplLCBic19mYWN0b3I7CisJLyogTGFzdCBmb3JtYXQgY2FwYWNpdHkgZGVzY3JpcHRvciAqLworCXU4IGNhcF9kZXNjWzhdOworCS8qIENvcHkgb2YgdGhlIGZsZXhpYmxlIGRpc2sgcGFnZSAqLworCXU4IGZsZXhpYmxlX2Rpc2tfcGFnZVszMl07Cit9OworCitzZWN0b3JfdCBpZGVfZ2RfY2FwYWNpdHkoaWRlX2RyaXZlX3QgKik7CisKKyNlbmRpZiAvKiBfX0lERV9HRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2VuZXJpYy5jIGIvZHJpdmVycy9pZGUvaWRlLWdlbmVyaWMuYwppbmRleCAwYTNjYjBjLi44MWE1MjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMKQEAgLTEzNywxNSArMTM3LDEwIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGlkZV9nZW5lcmljX2luaXQodm9pZCkKIHsKLQlod19yZWdzX3QgaHdbTUFYX0hXSUZTXSwgKmh3c1tNQVhfSFdJRlNdOwotCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKKwlod19yZWdzX3QgaHcsICpod3NbXSA9IHsgJmh3LCBOVUxMLCBOVUxMLCBOVUxMIH07CiAJdW5zaWduZWQgbG9uZyBpb19hZGRyOwotCWludCBpLCByYywgcHJpbWFyeSA9IDAsIHNlY29uZGFyeSA9IDA7CisJaW50IGksIHJjID0gMCwgcHJpbWFyeSA9IDAsIHNlY29uZGFyeSA9IDA7CiAKLSNpZmRlZiBDT05GSUdfTUlQUwotCWlmICghaWRlX3Byb2JlX2xlZ2FjeSgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLSNlbmRpZgogCWlkZV9nZW5lcmljX2NoZWNrX3BjaV9sZWdhY3lfaW9iYXNlcygmcHJpbWFyeSwgJnNlY29uZGFyeSk7CiAKIAlpZiAoIXByb2JlX21hc2spIHsKQEAgLTE2MSwxMyArMTU2LDkgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBlbmZvcmNpbmcgcHJvYmluZyBvZiBJL08gcG9ydHMgIgogCQkJInVwb24gdXNlciByZXF1ZXN0XG4iKTsKIAotCW1lbXNldChod3MsIDAsIHNpemVvZihod19yZWdzX3QgKikgKiBNQVhfSFdJRlMpOwotCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGVnYWN5X2Jhc2VzKTsgaSsrKSB7CiAJCWlvX2FkZHIgPSBsZWdhY3lfYmFzZXNbaV07CiAKLQkJaHdzW2ldID0gTlVMTDsKLQogCQlpZiAoKHByb2JlX21hc2sgJiAoMSA8PCBpKSkgJiYgaW9fYWRkcikgewogCQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb19hZGRyLCA4LCBEUlZfTkFNRSkpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJL08gcmVzb3VyY2UgMHglbFgtMHglbFggIgpAQCAtMTg0LDQ1ICsxNzUsMjcgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAotCQkJbWVtc2V0KCZod1tpXSwgMCwgc2l6ZW9mKGh3W2ldKSk7Ci0JCQlpZGVfc3RkX2luaXRfcG9ydHMoJmh3W2ldLCBpb19hZGRyLCBpb19hZGRyICsgMHgyMDYpOworCQkJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CisJCQlpZGVfc3RkX2luaXRfcG9ydHMoJmh3LCBpb19hZGRyLCBpb19hZGRyICsgMHgyMDYpOwogI2lmZGVmIENPTkZJR19JQTY0Ci0JCQlod1tpXS5pcnEgPSBpc2FfaXJxX3RvX3ZlY3RvcihsZWdhY3lfaXJxc1tpXSk7CisJCQlody5pcnEgPSBpc2FfaXJxX3RvX3ZlY3RvcihsZWdhY3lfaXJxc1tpXSk7CiAjZWxzZQotCQkJaHdbaV0uaXJxID0gbGVnYWN5X2lycXNbaV07CisJCQlody5pcnEgPSBsZWdhY3lfaXJxc1tpXTsKICNlbmRpZgotCQkJaHdbaV0uY2hpcHNldCA9IGlkZV9nZW5lcmljOworCQkJaHcuY2hpcHNldCA9IGlkZV9nZW5lcmljOwogCi0JCQlod3NbaV0gPSAmaHdbaV07CisJCQlyYyA9IGlkZV9ob3N0X2FkZChOVUxMLCBod3MsIE5VTEwpOworCQkJaWYgKHJjKSB7CisJCQkJcmVsZWFzZV9yZWdpb24oaW9fYWRkciArIDB4MjA2LCAxKTsKKwkJCQlyZWxlYXNlX3JlZ2lvbihpb19hZGRyLCA4KTsKKwkJCX0KIAkJfQogCX0KIAotCWhvc3QgPSBpZGVfaG9zdF9hbGxvY19hbGwoTlVMTCwgaHdzKTsKLQlpZiAoaG9zdCA9PSBOVUxMKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnI7Ci0JfQotCi0JcmMgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCBOVUxMLCBod3MpOwotCWlmIChyYykKLQkJZ290byBlcnJfZnJlZTsKLQogCWlmIChpZGVfZ2VuZXJpY19zeXNmc19pbml0KCkpCiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gY3JlYXRlIGlkZV9nZW5lcmljICIKIAkJCQkJICJjbGFzc1xuIik7CiAKLQlyZXR1cm4gMDsKLWVycl9mcmVlOgotCWlkZV9ob3N0X2ZyZWUoaG9zdCk7Ci1lcnI6Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7Ci0JCWlmIChod3NbaV0gPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCi0JCWlvX2FkZHIgPSBod3NbaV0tPmlvX3BvcnRzLmRhdGFfYWRkcjsKLQkJcmVsZWFzZV9yZWdpb24oaW9fYWRkciArIDB4MjA2LCAxKTsKLQkJcmVsZWFzZV9yZWdpb24oaW9fYWRkciwgOCk7Ci0JfQogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwppbmRleCAxYzUxOTQ5Li43MTYyZDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW8uYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwpAQCAtNzgsOCArNzgsOSBAQAogCSAqIGRlY2lkZSB3aGV0aGVyIHRvIHJlZW5hYmxlIERNQSAtLSAzIGlzIGEgcmFuZG9tIG1hZ2ljIGZvciBub3csCiAJICogaWYgd2UgRE1BIHRpbWVvdXQgbW9yZSB0aGFuIDMgdGltZXMsIGp1c3Qgc3RheSBpbiBQSU8KIAkgKi8KLQlpZiAoZHJpdmUtPnN0YXRlID09IERNQV9QSU9fUkVUUlkgJiYgZHJpdmUtPnJldHJ5X3BpbyA8PSAzKSB7Ci0JCWRyaXZlLT5zdGF0ZSA9IDA7CisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RNQV9QSU9fUkVUUlkpICYmCisJICAgIGRyaXZlLT5yZXRyeV9waW8gPD0gMykgeworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRE1BX1BJT19SRVRSWTsKIAkJaWRlX2RtYV9vbihkcml2ZSk7CiAJfQogCkBAIC0xMzEsMjEgKzEzMiw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlkZV9lbmRfcmVxdWVzdCk7CiAKLS8qCi0gKiBQb3dlciBNYW5hZ2VtZW50IHN0YXRlIG1hY2hpbmUuIFRoaXMgb25lIGlzIHJhdGhlciB0cml2aWFsIGZvciBub3csCi0gKiB3ZSBzaG91bGQgcHJvYmFibHkgYWRkIG1vcmUsIGxpa2Ugc3dpdGNoaW5nIGJhY2sgdG8gUElPIG9uIHN1c3BlbmQKLSAqIHRvIGhlbHAgc29tZSBCSU9TZXMsIHJlLWRvIHRoZSBkb29yIGxvY2tpbmcgb24gcmVzdW1lLCBldGMuLi4KLSAqLwotCi1lbnVtIHsKLQlpZGVfcG1fZmx1c2hfY2FjaGUJPSBpZGVfcG1fc3RhdGVfc3RhcnRfc3VzcGVuZCwKLQlpZGVkaXNrX3BtX3N0YW5kYnksCi0KLQlpZGVkaXNrX3BtX3Jlc3RvcmVfcGlvCT0gaWRlX3BtX3N0YXRlX3N0YXJ0X3Jlc3VtZSwKLQlpZGVkaXNrX3BtX2lkbGUsCi0JaWRlX3BtX3Jlc3RvcmVfZG1hLAotfTsKLQogc3RhdGljIHZvaWQgaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4IHN0YXQsIHU4IGVycm9yKQogewogCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlICpwbSA9IHJxLT5kYXRhOwpAQCAtMTU0LDIwICsxNDAsMjAgQEAKIAkJcmV0dXJuOwogCiAJc3dpdGNoIChwbS0+cG1fc3RlcCkgewotCWNhc2UgaWRlX3BtX2ZsdXNoX2NhY2hlOgkvKiBTdXNwZW5kIHN0ZXAgMSAoZmx1c2ggY2FjaGUpIGNvbXBsZXRlICovCisJY2FzZSBJREVfUE1fRkxVU0hfQ0FDSEU6CS8qIFN1c3BlbmQgc3RlcCAxIChmbHVzaCBjYWNoZSkgKi8KIAkJaWYgKHBtLT5wbV9zdGF0ZSA9PSBQTV9FVkVOVF9GUkVFWkUpCi0JCQlwbS0+cG1fc3RlcCA9IGlkZV9wbV9zdGF0ZV9jb21wbGV0ZWQ7CisJCQlwbS0+cG1fc3RlcCA9IElERV9QTV9DT01QTEVURUQ7CiAJCWVsc2UKLQkJCXBtLT5wbV9zdGVwID0gaWRlZGlza19wbV9zdGFuZGJ5OworCQkJcG0tPnBtX3N0ZXAgPSBJREVfUE1fU1RBTkRCWTsKIAkJYnJlYWs7Ci0JY2FzZSBpZGVkaXNrX3BtX3N0YW5kYnk6CS8qIFN1c3BlbmQgc3RlcCAyIChzdGFuZGJ5KSBjb21wbGV0ZSAqLwotCQlwbS0+cG1fc3RlcCA9IGlkZV9wbV9zdGF0ZV9jb21wbGV0ZWQ7CisJY2FzZSBJREVfUE1fU1RBTkRCWToJCS8qIFN1c3BlbmQgc3RlcCAyIChzdGFuZGJ5KSAqLworCQlwbS0+cG1fc3RlcCA9IElERV9QTV9DT01QTEVURUQ7CiAJCWJyZWFrOwotCWNhc2UgaWRlZGlza19wbV9yZXN0b3JlX3BpbzoJLyogUmVzdW1lIHN0ZXAgMSBjb21wbGV0ZSAqLwotCQlwbS0+cG1fc3RlcCA9IGlkZWRpc2tfcG1faWRsZTsKKwljYXNlIElERV9QTV9SRVNUT1JFX1BJTzoJLyogUmVzdW1lIHN0ZXAgMSAocmVzdG9yZSBQSU8pICovCisJCXBtLT5wbV9zdGVwID0gSURFX1BNX0lETEU7CiAJCWJyZWFrOwotCWNhc2UgaWRlZGlza19wbV9pZGxlOgkJLyogUmVzdW1lIHN0ZXAgMiAoaWRsZSkgY29tcGxldGUgKi8KLQkJcG0tPnBtX3N0ZXAgPSBpZGVfcG1fcmVzdG9yZV9kbWE7CisJY2FzZSBJREVfUE1fSURMRToJCS8qIFJlc3VtZSBzdGVwIDIgKGlkbGUpKi8KKwkJcG0tPnBtX3N0ZXAgPSBJREVfUE1fUkVTVE9SRV9ETUE7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTE4MCwxMSArMTY2LDEyIEBACiAJbWVtc2V0KGFyZ3MsIDAsIHNpemVvZigqYXJncykpOwogCiAJc3dpdGNoIChwbS0+cG1fc3RlcCkgewotCWNhc2UgaWRlX3BtX2ZsdXNoX2NhY2hlOgkvKiBTdXNwZW5kIHN0ZXAgMSAoZmx1c2ggY2FjaGUpICovCisJY2FzZSBJREVfUE1fRkxVU0hfQ0FDSEU6CS8qIFN1c3BlbmQgc3RlcCAxIChmbHVzaCBjYWNoZSkgKi8KIAkJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzaykKIAkJCWJyZWFrOwogCQkvKiBOb3Qgc3VwcG9ydGVkPyBTd2l0Y2ggdG8gbmV4dCBzdGVwIG5vdy4gKi8KLQkJaWYgKCFkcml2ZS0+d2NhY2hlIHx8IGF0YV9pZF9mbHVzaF9lbmFibGVkKGRyaXZlLT5pZCkgPT0gMCkgeworCQlpZiAoYXRhX2lkX2ZsdXNoX2VuYWJsZWQoZHJpdmUtPmlkKSA9PSAwIHx8CisJCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19XQ0FDSEUpID09IDApIHsKIAkJCWlkZV9jb21wbGV0ZV9wb3dlcl9zdGVwKGRyaXZlLCBycSwgMCwgMCk7CiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KQEAgLTE5MywyNyArMTgwLDIzIEBACiAJCWVsc2UKIAkJCWFyZ3MtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIOwogCQlnb3RvIG91dF9kb190ZjsKLQotCWNhc2UgaWRlZGlza19wbV9zdGFuZGJ5OgkvKiBTdXNwZW5kIHN0ZXAgMiAoc3RhbmRieSkgKi8KKwljYXNlIElERV9QTV9TVEFOREJZOgkJLyogU3VzcGVuZCBzdGVwIDIgKHN0YW5kYnkpICovCiAJCWFyZ3MtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX1NUQU5EQllOT1cxOwogCQlnb3RvIG91dF9kb190ZjsKLQotCWNhc2UgaWRlZGlza19wbV9yZXN0b3JlX3BpbzoJLyogUmVzdW1lIHN0ZXAgMSAocmVzdG9yZSBQSU8pICovCisJY2FzZSBJREVfUE1fUkVTVE9SRV9QSU86CS8qIFJlc3VtZSBzdGVwIDEgKHJlc3RvcmUgUElPKSAqLwogCQlpZGVfc2V0X21heF9waW8oZHJpdmUpOwogCQkvKgotCQkgKiBza2lwIGlkZWRpc2tfcG1faWRsZSBmb3IgQVRBUEkgZGV2aWNlcworCQkgKiBza2lwIElERV9QTV9JRExFIGZvciBBVEFQSSBkZXZpY2VzCiAJCSAqLwogCQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKQotCQkJcG0tPnBtX3N0ZXAgPSBpZGVfcG1fcmVzdG9yZV9kbWE7CisJCQlwbS0+cG1fc3RlcCA9IElERV9QTV9SRVNUT1JFX0RNQTsKIAkJZWxzZQogCQkJaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoZHJpdmUsIHJxLCAwLCAwKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCi0JY2FzZSBpZGVkaXNrX3BtX2lkbGU6CQkvKiBSZXN1bWUgc3RlcCAyIChpZGxlKSAqLworCWNhc2UgSURFX1BNX0lETEU6CQkvKiBSZXN1bWUgc3RlcCAyIChpZGxlKSAqLwogCQlhcmdzLT50Zi5jb21tYW5kID0gQVRBX0NNRF9JRExFSU1NRURJQVRFOwogCQlnb3RvIG91dF9kb190ZjsKLQotCWNhc2UgaWRlX3BtX3Jlc3RvcmVfZG1hOgkvKiBSZXN1bWUgc3RlcCAzIChyZXN0b3JlIERNQSkgKi8KKwljYXNlIElERV9QTV9SRVNUT1JFX0RNQToJLyogUmVzdW1lIHN0ZXAgMyAocmVzdG9yZSBETUEpICovCiAJCS8qCiAJCSAqIFJpZ2h0IG5vdywgYWxsIHdlIGRvIGlzIGNhbGwgaWRlX3NldF9kbWEoZHJpdmUpLAogCQkgKiB3ZSBjb3VsZCBiZSBzbWFydGVyIGFuZCBjaGVjayBmb3IgY3VycmVudCB4ZmVyX3NwZWVkCkBAIC0yMjIsMTIgKzIwNSwxMyBAQAogCQlpZiAoZHJpdmUtPmh3aWYtPmRtYV9vcHMgPT0gTlVMTCkKIAkJCWJyZWFrOwogCQkvKgotCQkgKiBUT0RPOiByZXNwZWN0IC0+dXNpbmdfZG1hIHNldHRpbmcKKwkJICogVE9ETzogcmVzcGVjdCBJREVfREZMQUdfVVNJTkdfRE1BCiAJCSAqLwogCQlpZGVfc2V0X2RtYShkcml2ZSk7CiAJCWJyZWFrOwogCX0KLQlwbS0+cG1fc3RlcCA9IGlkZV9wbV9zdGF0ZV9jb21wbGV0ZWQ7CisKKwlwbS0+cG1fc3RlcCA9IElERV9QTV9DT01QTEVURUQ7CiAJcmV0dXJuIGlkZV9zdG9wcGVkOwogCiBvdXRfZG9fdGY6CkBAIC0yODcsNyArMjcxLDcgQEAKIAlpZiAoYmxrX3BtX3N1c3BlbmRfcmVxdWVzdChycSkpIHsKIAkJYmxrX3N0b3BfcXVldWUoZHJpdmUtPnF1ZXVlKTsKIAl9IGVsc2UgewotCQlkcml2ZS0+YmxvY2tlZCA9IDA7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19CTE9DS0VEOwogCQlibGtfc3RhcnRfcXVldWUoZHJpdmUtPnF1ZXVlKTsKIAl9CiAJSFdHUk9VUChkcml2ZSktPnJxID0gTlVMTDsKQEAgLTM0Myw3ICszMjcsNyBAQAogCQkJZHJpdmUtPm5hbWUsIHJxLT5wbS0+cG1fc3RlcCwgc3RhdCwgZXJyKTsKICNlbmRpZgogCQlpZGVfY29tcGxldGVfcG93ZXJfc3RlcChkcml2ZSwgcnEsIHN0YXQsIGVycik7Ci0JCWlmIChwbS0+cG1fc3RlcCA9PSBpZGVfcG1fc3RhdGVfY29tcGxldGVkKQorCQlpZiAocG0tPnBtX3N0ZXAgPT0gSURFX1BNX0NPTVBMRVRFRCkKIAkJCWlkZV9jb21wbGV0ZV9wbV9yZXF1ZXN0KGRyaXZlLCBycSk7CiAJCXJldHVybjsKIAl9CkBAIC0zNzQsMTMgKzM1OCwxNCBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAotCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fCAoKHN0YXQgJiBBVEFfREYpICYmICFkcml2ZS0+bm93ZXJyKSkgeworCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fAorCSAgICAoKHN0YXQgJiBBVEFfREYpICYmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PV0VSUikgPT0gMCkpIHsKIAkJLyogb3RoZXIgYml0cyBhcmUgdXNlbGVzcyB3aGVuIEJVU1kgKi8KIAkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKIAl9IGVsc2UgaWYgKHN0YXQgJiBBVEFfRVJSKSB7CiAJCS8qIGVyciBoYXMgZGlmZmVyZW50IG1lYW5pbmcgb24gY2Ryb20gYW5kIHRhcGUgKi8KIAkJaWYgKGVyciA9PSBBVEFfQUJPUlRFRCkgewotCQkJaWYgKGRyaXZlLT5zZWxlY3QuYi5sYmEgJiYKKwkJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkEpICYmCiAJCQkgICAgLyogc29tZSBuZXdlciBkcml2ZXMgZG9uJ3Qgc3VwcG9ydCBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUyAqLwogCQkJICAgIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpCiAJCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwpAQCAtNDI4LDcgKzQxMyw4IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCi0JaWYgKChzdGF0ICYgQVRBX0JVU1kpIHx8ICgoc3RhdCAmIEFUQV9ERikgJiYgIWRyaXZlLT5ub3dlcnIpKSB7CisJaWYgKChzdGF0ICYgQVRBX0JVU1kpIHx8CisJICAgICgoc3RhdCAmIEFUQV9ERikgJiYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9XRVJSKSA9PSAwKSkgewogCQkvKiBvdGhlciBiaXRzIGFyZSB1c2VsZXNzIHdoZW4gQlVTWSAqLwogCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFU0VUOwogCX0gZWxzZSB7CkBAIC01MDksNyArNDk1LDcgQEAKIAl0Zi0+bGJhbCAgICA9IGRyaXZlLT5zZWN0OwogCXRmLT5sYmFtICAgID0gZHJpdmUtPmN5bDsKIAl0Zi0+bGJhaCAgICA9IGRyaXZlLT5jeWwgPj4gODsKLQl0Zi0+ZGV2aWNlICA9ICgoZHJpdmUtPmhlYWQgLSAxKSB8IGRyaXZlLT5zZWxlY3QuYWxsKSAmIH5BVEFfTEJBOworCXRmLT5kZXZpY2UgID0gKGRyaXZlLT5oZWFkIC0gMSkgfCBkcml2ZS0+c2VsZWN0OwogCXRmLT5jb21tYW5kID0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVM7CiB9CiAKQEAgLTU1NywzMCArNTQzLDYgQEAKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiB9CiAKLS8qCi0gKiBoYW5kbGUgSERJT19TRVRfUElPX01PREUgaW9jdGwgYWJ1c2VycyBoZXJlLCBldmVudHVhbGx5IGl0IHdpbGwgZ28gYXdheQotICovCi1zdGF0aWMgaW50IHNldF9waW9fbW9kZV9hYnVzZShpZGVfaHdpZl90ICpod2lmLCB1OCByZXFfcGlvKQotewotCXN3aXRjaCAocmVxX3BpbykgewotCWNhc2UgMjAyOgotCWNhc2UgMjAxOgotCWNhc2UgMjAwOgotCWNhc2UgMTAyOgotCWNhc2UgMTAxOgotCWNhc2UgMTAwOgotCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRE1BX01PREVTKSA/IDEgOiAwOwotCWNhc2UgOToKLQljYXNlIDg6Ci0JCXJldHVybiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCkgPyAxIDogMDsKLQljYXNlIDc6Ci0JY2FzZSA2OgotCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRkFTVF9ERVZTRUwpID8gMSA6IDA7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCiAvKioKICAqCWRvX3NwZWNpYWwJCS0JaXNzdWUgc29tZSBzcGVjaWFsIGNvbW1hbmRzCiAgKglAZHJpdmU6IGRyaXZlIHRoZSBjb21tYW5kIGlzIGZvcgpAQCAtNTk4LDQ1ICs1NjAsMTIgQEAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6IGRvX3NwZWNpYWw6IDB4JTAyeFxuIiwgZHJpdmUtPm5hbWUsIHMtPmFsbCk7CiAjZW5kaWYKLQlpZiAocy0+Yi5zZXRfdHVuZSkgewotCQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7Ci0JCXU4IHJlcV9waW8gPSBkcml2ZS0+dHVuZV9yZXE7CisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKKwkJcmV0dXJuIGlkZV9kaXNrX3NwZWNpYWwoZHJpdmUpOwogCi0JCXMtPmIuc2V0X3R1bmUgPSAwOwotCi0JCWlmIChzZXRfcGlvX21vZGVfYWJ1c2UoZHJpdmUtPmh3aWYsIHJlcV9waW8pKSB7Ci0JCQkvKgotCQkJICogdGFrZSBpZGVfbG9jayBmb3IgZHJpdmUtPltub19ddW5tYXNrL1tub19daW9fMzJiaXQKLQkJCSAqLwotCQkJaWYgKHJlcV9waW8gPT0gOCB8fCByZXFfcGlvID09IDkpIHsKLQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JCQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgcmVxX3Bpbyk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKLQkJCX0gZWxzZQotCQkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIHJlcV9waW8pOwotCQl9IGVsc2UgewotCQkJaW50IGtlZXBfZG1hID0gZHJpdmUtPnVzaW5nX2RtYTsKLQotCQkJaWRlX3NldF9waW8oZHJpdmUsIHJlcV9waW8pOwotCi0JCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19TRVRfUElPX01PREVfS0VFUF9ETUEpIHsKLQkJCQlpZiAoa2VlcF9kbWEpCi0JCQkJCWlkZV9kbWFfb24oZHJpdmUpOwotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0gZWxzZSB7Ci0JCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCi0JCQlyZXR1cm4gaWRlX2Rpc2tfc3BlY2lhbChkcml2ZSk7Ci0KLQkJcy0+YWxsID0gMDsKLQkJZHJpdmUtPm11bHRfcmVxID0gMDsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0KKwlzLT5hbGwgPSAwOworCWRyaXZlLT5tdWx0X3JlcSA9IDA7CisJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQogCiB2b2lkIGlkZV9tYXBfc2coaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCkBAIC03MjYsMTAgKzY1NSw3IEBACiAJaWYgKCEoc2V0dGluZy0+ZmxhZ3MgJiBEU19TWU5DKSkKIAkJcmV0dXJuIHNldHRpbmctPnNldChkcml2ZSwgYXJnKTsKIAotCXJxID0gYmxrX2dldF9yZXF1ZXN0KHEsIFJFQUQsIEdGUF9LRVJORUwpOwotCWlmICghcnEpCi0JCXJldHVybiAtRU5PTUVNOwotCisJcnEgPSBibGtfZ2V0X3JlcXVlc3QocSwgUkVBRCwgX19HRlBfV0FJVCk7CiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfU1BFQ0lBTDsKIAlycS0+Y21kX2xlbiA9IDU7CiAJcnEtPmNtZFswXSA9IFJFUV9ERVZTRVRfRVhFQzsKQEAgLTc0Niw3ICs2NzIsMzIgQEAKIAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfc3BlY2lhbF9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlzd2l0Y2ggKHJxLT5jbWRbMF0pIHsKKwl1OCBjbWQgPSBycS0+Y21kWzBdOworCisJaWYgKGNtZCA9PSBSRVFfUEFSS19IRUFEUyB8fCBjbWQgPT0gUkVRX1VOUEFSS19IRUFEUykgeworCQlpZGVfdGFza190IHRhc2s7CisJCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2sudGY7CisKKwkJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCQlpZiAoY21kID09IFJFUV9QQVJLX0hFQURTKSB7CisJCQlkcml2ZS0+c2xlZXAgPSAqKHVuc2lnbmVkIGxvbmcgKilycS0+c3BlY2lhbDsKKwkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1NMRUVQSU5HOworCQkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX0lETEVJTU1FRElBVEU7CisJCQl0Zi0+ZmVhdHVyZSA9IDB4NDQ7CisJCQl0Zi0+bGJhbCA9IDB4NGM7CisJCQl0Zi0+bGJhbSA9IDB4NGU7CisJCQl0Zi0+bGJhaCA9IDB4NTU7CisJCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19DVVNUT01fSEFORExFUjsKKwkJfSBlbHNlCQkvKiBjbWQgPT0gUkVRX1VOUEFSS19IRUFEUyAqLworCQkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX0NIS19QT1dFUjsKKworCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJCXRhc2sucnEgPSBycTsKKwkJZHJpdmUtPmh3aWYtPmRhdGFfcGhhc2UgPSB0YXNrLmRhdGFfcGhhc2UgPSBUQVNLRklMRV9OT19EQVRBOworCQlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUkVRX0RFVlNFVF9FWEVDOgogCXsKIAkJaW50IGVyciwgKCpzZXRmdW5jKShpZGVfZHJpdmVfdCAqLCBpbnQpID0gcnEtPnNwZWNpYWw7CkBAIC03NzMsMTEgKzcyNCwxMSBAQAogCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlICpwbSA9IHJxLT5kYXRhOwogCiAJaWYgKGJsa19wbV9zdXNwZW5kX3JlcXVlc3QocnEpICYmCi0JICAgIHBtLT5wbV9zdGVwID09IGlkZV9wbV9zdGF0ZV9zdGFydF9zdXNwZW5kKQorCSAgICBwbS0+cG1fc3RlcCA9PSBJREVfUE1fU1RBUlRfU1VTUEVORCkKIAkJLyogTWFyayBkcml2ZSBibG9ja2VkIHdoZW4gc3RhcnRpbmcgdGhlIHN1c3BlbmQgc2VxdWVuY2UuICovCi0JCWRyaXZlLT5ibG9ja2VkID0gMTsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfQkxPQ0tFRDsKIAllbHNlIGlmIChibGtfcG1fcmVzdW1lX3JlcXVlc3QocnEpICYmCi0JCSBwbS0+cG1fc3RlcCA9PSBpZGVfcG1fc3RhdGVfc3RhcnRfcmVzdW1lKSB7CisJCSBwbS0+cG1fc3RlcCA9PSBJREVfUE1fU1RBUlRfUkVTVU1FKSB7CiAJCS8qIAogCQkgKiBUaGUgZmlyc3QgdGhpbmcgd2UgZG8gb24gd2FrZXVwIGlzIHRvIHdhaXQgZm9yIEJTWSBiaXQgdG8KIAkJICogZ28gYXdheSAod2l0aCBhIGxvb29uZyB0aW1lb3V0KSBhcyBhIGRyaXZlIG9uIHRoaXMgaHdpZiBtYXkKQEAgLTg1Nyw3ICs4MDgsNyBAQAogI2VuZGlmCiAJCQlzdGFydHN0b3AgPSBpZGVfc3RhcnRfcG93ZXJfc3RlcChkcml2ZSwgcnEpOwogCQkJaWYgKHN0YXJ0c3RvcCA9PSBpZGVfc3RvcHBlZCAmJgotCQkJICAgIHBtLT5wbV9zdGVwID09IGlkZV9wbV9zdGF0ZV9jb21wbGV0ZWQpCisJCQkgICAgcG0tPnBtX3N0ZXAgPT0gSURFX1BNX0NPTVBMRVRFRCkKIAkJCQlpZGVfY29tcGxldGVfcG1fcmVxdWVzdChkcml2ZSwgcnEpOwogCQkJcmV0dXJuIHN0YXJ0c3RvcDsKIAkJfSBlbHNlIGlmICghcnEtPnJxX2Rpc2sgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpCkBAIC04OTUsNyArODQ2LDcgQEAKIAlpZiAodGltZW91dCA+IFdBSVRfV09SU1RDQVNFKQogCQl0aW1lb3V0ID0gV0FJVF9XT1JTVENBU0U7CiAJZHJpdmUtPnNsZWVwID0gdGltZW91dCArIGppZmZpZXM7Ci0JZHJpdmUtPnNsZWVwaW5nID0gMTsKKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19TTEVFUElORzsKIH0KIAogRVhQT1JUX1NZTUJPTChpZGVfc3RhbGxfcXVldWUpOwpAQCAtOTM1LDE4ICs4ODYsMjMgQEAKIAl9CiAKIAlkbyB7Ci0JCWlmICgoIWRyaXZlLT5zbGVlcGluZyB8fCB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGRyaXZlLT5zbGVlcCkpCi0JCSAgICAmJiAhZWx2X3F1ZXVlX2VtcHR5KGRyaXZlLT5xdWV1ZSkpIHsKLQkJCWlmICghYmVzdAotCQkJIHx8IChkcml2ZS0+c2xlZXBpbmcgJiYgKCFiZXN0LT5zbGVlcGluZyB8fCB0aW1lX2JlZm9yZShkcml2ZS0+c2xlZXAsIGJlc3QtPnNsZWVwKSkpCi0JCQkgfHwgKCFiZXN0LT5zbGVlcGluZyAmJiB0aW1lX2JlZm9yZShXQUtFVVAoZHJpdmUpLCBXQUtFVVAoYmVzdCkpKSkKLQkJCXsKKwkJdTggZGV2X3MgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1NMRUVQSU5HKTsKKwkJdTggYmVzdF9zID0gKGJlc3QgJiYgISEoYmVzdC0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1NMRUVQSU5HKSk7CisKKwkJaWYgKChkZXZfcyA9PSAwIHx8IHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZHJpdmUtPnNsZWVwKSkgJiYKKwkJICAgICFlbHZfcXVldWVfZW1wdHkoZHJpdmUtPnF1ZXVlKSkgeworCQkJaWYgKGJlc3QgPT0gTlVMTCB8fAorCQkJICAgIChkZXZfcyAmJiAoYmVzdF9zID09IDAgfHwgdGltZV9iZWZvcmUoZHJpdmUtPnNsZWVwLCBiZXN0LT5zbGVlcCkpKSB8fAorCQkJICAgIChiZXN0X3MgPT0gMCAmJiB0aW1lX2JlZm9yZShXQUtFVVAoZHJpdmUpLCBXQUtFVVAoYmVzdCkpKSkgewogCQkJCWlmICghYmxrX3F1ZXVlX3BsdWdnZWQoZHJpdmUtPnF1ZXVlKSkKIAkJCQkJYmVzdCA9IGRyaXZlOwogCQkJfQogCQl9CiAJfSB3aGlsZSAoKGRyaXZlID0gZHJpdmUtPm5leHQpICE9IGh3Z3JvdXAtPmRyaXZlKTsKLQlpZiAoYmVzdCAmJiBiZXN0LT5uaWNlMSAmJiAhYmVzdC0+c2xlZXBpbmcgJiYgYmVzdCAhPSBod2dyb3VwLT5kcml2ZSAmJiBiZXN0LT5zZXJ2aWNlX3RpbWUgPiBXQUlUX01JTl9TTEVFUCkgeworCisJaWYgKGJlc3QgJiYgKGJlc3QtPmRldl9mbGFncyAmIElERV9ERkxBR19OSUNFMSkgJiYKKwkgICAgKGJlc3QtPmRldl9mbGFncyAmIElERV9ERkxBR19TTEVFUElORykgPT0gMCAmJgorCSAgICBiZXN0ICE9IGh3Z3JvdXAtPmRyaXZlICYmIGJlc3QtPnNlcnZpY2VfdGltZSA+IFdBSVRfTUlOX1NMRUVQKSB7CiAJCWxvbmcgdCA9IChzaWduZWQgbG9uZykoV0FLRVVQKGJlc3QpIC0gamlmZmllcyk7CiAJCWlmICh0ID49IFdBSVRfTUlOX1NMRUVQKSB7CiAJCS8qCkBAIC05NTUsNyArOTExLDcgQEAKIAkJICovCiAJCQlkcml2ZSA9IGJlc3QtPm5leHQ7CiAJCQlkbyB7Ci0JCQkJaWYgKCFkcml2ZS0+c2xlZXBpbmcKKwkJCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfU0xFRVBJTkcpID09IDAKIAkJCQkgJiYgdGltZV9iZWZvcmUoamlmZmllcyAtIGJlc3QtPnNlcnZpY2VfdGltZSwgV0FLRVVQKGRyaXZlKSkKIAkJCQkgJiYgdGltZV9iZWZvcmUoV0FLRVVQKGRyaXZlKSwgamlmZmllcyArIHQpKQogCQkJCXsKQEAgLTEwMjYsNyArOTgyLDkgQEAKIAkJCWh3Z3JvdXAtPnJxID0gTlVMTDsKIAkJCWRyaXZlID0gaHdncm91cC0+ZHJpdmU7CiAJCQlkbyB7Ci0JCQkJaWYgKGRyaXZlLT5zbGVlcGluZyAmJiAoIXNsZWVwaW5nIHx8IHRpbWVfYmVmb3JlKGRyaXZlLT5zbGVlcCwgc2xlZXApKSkgeworCQkJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19TTEVFUElORykgJiYKKwkJCQkgICAgKHNsZWVwaW5nID09IDAgfHwKKwkJCQkgICAgIHRpbWVfYmVmb3JlKGRyaXZlLT5zbGVlcCwgc2xlZXApKSkgewogCQkJCQlzbGVlcGluZyA9IDE7CiAJCQkJCXNsZWVwID0gZHJpdmUtPnNsZWVwOwogCQkJCX0KQEAgLTEwNzUsNyArMTAzMyw3IEBACiAJCX0KIAkJaHdncm91cC0+aHdpZiA9IGh3aWY7CiAJCWh3Z3JvdXAtPmRyaXZlID0gZHJpdmU7Ci0JCWRyaXZlLT5zbGVlcGluZyA9IDA7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfihJREVfREZMQUdfU0xFRVBJTkcgfCBJREVfREZMQUdfUEFSS0VEKTsKIAkJZHJpdmUtPnNlcnZpY2Vfc3RhcnQgPSBqaWZmaWVzOwogCiAJCWlmIChibGtfcXVldWVfcGx1Z2dlZChkcml2ZS0+cXVldWUpKSB7CkBAIC0xMTA5LDcgKzEwNjcsOSBAQAogCQkgKiBXZSBjb3VudCBob3cgbWFueSB0aW1lcyB3ZSBsb29wIGhlcmUgdG8gbWFrZSBzdXJlIHdlIHNlcnZpY2UKIAkJICogYWxsIGRyaXZlcyBpbiB0aGUgaHdncm91cCB3aXRob3V0IGxvb3BpbmcgZm9yIGV2ZXIKIAkJICovCi0JCWlmIChkcml2ZS0+YmxvY2tlZCAmJiAhYmxrX3BtX3JlcXVlc3QocnEpICYmICEocnEtPmNtZF9mbGFncyAmIFJFUV9QUkVFTVBUKSkgeworCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfQkxPQ0tFRCkgJiYKKwkJICAgIGJsa19wbV9yZXF1ZXN0KHJxKSA9PSAwICYmCisJCSAgICAocnEtPmNtZF9mbGFncyAmIFJFUV9QUkVFTVBUKSA9PSAwKSB7CiAJCQlkcml2ZSA9IGRyaXZlLT5uZXh0ID8gZHJpdmUtPm5leHQgOiBod2dyb3VwLT5kcml2ZTsKIAkJCWlmIChsb29wcysrIDwgNCAmJiAhYmxrX3F1ZXVlX3BsdWdnZWQoZHJpdmUtPnF1ZXVlKSkKIAkJCQlnb3RvIGFnYWluOwpAQCAtMTE4Miw4ICsxMTQyLDggQEAKIAkgKiBhIHRpbWVvdXQgLS0gd2UnbGwgcmVlbmFibGUgYWZ0ZXIgd2UgZmluaXNoIHRoaXMgbmV4dCByZXF1ZXN0CiAJICogKG9yIHJhdGhlciB0aGUgZmlyc3QgY2h1bmsgb2YgaXQpIGluIHBpby4KIAkgKi8KKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19ETUFfUElPX1JFVFJZOwogCWRyaXZlLT5yZXRyeV9waW8rKzsKLQlkcml2ZS0+c3RhdGUgPSBETUFfUElPX1JFVFJZOwogCWlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwogCiAJLyoKQEAgLTE0ODAsMjMgKzE0NDAsMTYgQEAKIAlkZWxfdGltZXIoJmh3Z3JvdXAtPnRpbWVyKTsKIAlzcGluX3VubG9jaygmaWRlX2xvY2spOwogCi0JLyogU29tZSBjb250cm9sbGVycyBtaWdodCBzZXQgRE1BIElOVFIgbm8gbWF0dGVyIERNQSBvciBQSU87Ci0JICogYm1kbWEgc3RhdHVzIG1pZ2h0IG5lZWQgdG8gYmUgY2xlYXJlZCBldmVuIGZvcgotCSAqIFBJTyBpbnRlcnJ1cHRzIHRvIHByZXZlbnQgc3B1cmlvdXMvbG9zdCBpcnEuCi0JICovCi0JaWYgKGh3aWYtPmlkZV9kbWFfY2xlYXJfaXJxICYmICEoZHJpdmUtPndhaXRpbmdfZm9yX2RtYSkpCi0JCS8qIGlkZV9kbWFfZW5kKCkgbmVlZHMgYm1kbWEgc3RhdHVzIGZvciBlcnJvciBjaGVja2luZy4KLQkJICogU28sIHNraXAgY2xlYXJpbmcgYm1kbWEgc3RhdHVzIGhlcmUgYW5kIGxlYXZlIGl0Ci0JCSAqIHRvIGlkZV9kbWFfZW5kKCkgaWYgdGhpcyBpcyBkbWEgaW50ZXJydXB0LgotCQkgKi8KLQkJaHdpZi0+aWRlX2RtYV9jbGVhcl9pcnEoZHJpdmUpOworCWlmIChod2lmLT5wb3J0X29wcyAmJiBod2lmLT5wb3J0X29wcy0+Y2xlYXJfaXJxKQorCQlod2lmLT5wb3J0X29wcy0+Y2xlYXJfaXJxKGRyaXZlKTsKIAotCWlmIChkcml2ZS0+dW5tYXNrKQorCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VOTUFTSykKIAkJbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7CisKIAkvKiBzZXJ2aWNlIHRoaXMgaW50ZXJydXB0LCBtYXkgc2V0IGhhbmRsZXIgZm9yIG5leHQgaW50ZXJydXB0ICovCiAJc3RhcnRzdG9wID0gaGFuZGxlcihkcml2ZSk7Ci0Jc3Bpbl9sb2NrX2lycSgmaWRlX2xvY2spOwogCisJc3Bpbl9sb2NrX2lycSgmaWRlX2xvY2spOwogCS8qCiAJICogTm90ZSB0aGF0IGhhbmRsZXIoKSBtYXkgaGF2ZSBzZXQgdGhpbmdzIHVwIGZvciBhbm90aGVyCiAJICogaW50ZXJydXB0IHRvIG9jY3VyIHNvb24sIGJ1dCBpdCBjYW5ub3QgaGFwcGVuIHVudGlsCkBAIC0xNTQwLDggKzE0OTMsOCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CiAJaHdncm91cC0+cnEgPSBOVUxMOwotCV9fZWx2X2FkZF9yZXF1ZXN0KGRyaXZlLT5xdWV1ZSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCwgMSk7Ci0JX19nZW5lcmljX3VucGx1Z19kZXZpY2UoZHJpdmUtPnF1ZXVlKTsKKwlfX2Vsdl9hZGRfcmVxdWVzdChkcml2ZS0+cXVldWUsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQsIDApOworCWJsa19zdGFydF9xdWV1ZWluZyhkcml2ZS0+cXVldWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pb2N0bHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1pb2N0bHMuYwppbmRleCBjZjAxNTY0Li5hOTA5NDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvY3Rscy5jCkBAIC02Miw3ICs2Miw3IEBACiAJaW50IHNpemUgPSAoY21kID09IEhESU9fR0VUX0lERU5USVRZKSA/IChBVEFfSURfV09SRFMgKiAyKSA6IDE0MjsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKGRyaXZlLT5pZF9yZWFkID09IDApIHsKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfSURfUkVBRCkgPT0gMCkgewogCQlyYyA9IC1FTk9NU0c7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTg2LDggKzg2LDEwIEBACiAKIHN0YXRpYyBpbnQgaWRlX2dldF9uaWNlX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JcmV0dXJuIHB1dF91c2VyKChkcml2ZS0+ZHNjX292ZXJsYXAgPDwgSURFX05JQ0VfRFNDX09WRVJMQVApIHwKLQkJCShkcml2ZS0+bmljZTEgPDwgSURFX05JQ0VfMSksIChsb25nIF9fdXNlciAqKWFyZyk7CisJcmV0dXJuIHB1dF91c2VyKCghIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RTQ19PVkVSTEFQKQorCQkJIDw8IElERV9OSUNFX0RTQ19PVkVSTEFQKSB8CisJCQkoISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OSUNFMSkKKwkJCSA8PCBJREVfTklDRV8xKSwgKGxvbmcgX191c2VyICopYXJnKTsKIH0KIAogc3RhdGljIGludCBpZGVfc2V0X25pY2VfaW9jdGwoaWRlX2RyaXZlX3QgKmRyaXZlLCB1bnNpZ25lZCBsb25nIGFyZykKQEAgLTk3LDExICs5OSwxOCBAQAogCiAJaWYgKCgoYXJnID4+IElERV9OSUNFX0RTQ19PVkVSTEFQKSAmIDEpICYmCiAJICAgIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgfHwgZHJpdmUtPm1lZGlhID09IGlkZV9mbG9wcHkgfHwKLQkgICAgIGRyaXZlLT5zY3NpKSkKKwkgICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1NDU0kpKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWRyaXZlLT5kc2Nfb3ZlcmxhcCA9IChhcmcgPj4gSURFX05JQ0VfRFNDX09WRVJMQVApICYgMTsKLQlkcml2ZS0+bmljZTEgPSAoYXJnID4+IElERV9OSUNFXzEpICYgMTsKKwlpZiAoKGFyZyA+PiBJREVfTklDRV9EU0NfT1ZFUkxBUCkgJiAxKQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19EU0NfT1ZFUkxBUDsKKwllbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19EU0NfT1ZFUkxBUDsKKworCWlmICgoYXJnID4+IElERV9OSUNFXzEpICYgMSkKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTklDRTE7CisJZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTklDRTE7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCmluZGV4IDBhMmZkM2IuLmJiN2ExZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJCXRmX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCiAJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCi0JCXRmX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QuYWxsLAorCQl0Zl9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAogCQkJIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfbG9hZCk7CkBAIC02NDcsNyArNjQ3LDcgQEAKIAkJcmV0dXJuIDE7CiAKIG5vXzgwdzoKLQlpZiAoZHJpdmUtPnVkbWEzM193YXJuZWQgPT0gMSkKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VRE1BMzNfV0FSTkVEKQogCQlyZXR1cm4gMDsKIAogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcyBzaWRlIDgwLXdpcmUgY2FibGUgZGV0ZWN0aW9uIGZhaWxlZCwgIgpAQCAtNjU1LDcgKzY1NSw3IEBACiAJCQkgICAgZHJpdmUtPm5hbWUsCiAJCQkgICAgaHdpZi0+Y2JsID09IEFUQV9DQkxfUEFUQTgwID8gImRyaXZlIiA6ICJob3N0Iik7CiAKLQlkcml2ZS0+dWRtYTMzX3dhcm5lZCA9IDE7CisJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfVURNQTMzX1dBUk5FRDsKIAogCXJldHVybiAwOwogfQpAQCAtNzExLDcgKzcxMSw3IEBACiAKIAlrZnJlZShpZCk7CiAKLQlpZiAoZHJpdmUtPnVzaW5nX2RtYSAmJiBpZGVfaWRfZG1hX2J1Zyhkcml2ZSkpCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgJiYgaWRlX2lkX2RtYV9idWcoZHJpdmUpKQogCQlpZGVfZG1hX29mZihkcml2ZSk7CiAKIAlyZXR1cm4gMTsKQEAgLTc1NSw3ICs3NTUsNyBAQAogCSAKIAl1ZGVsYXkoMSk7CiAJU0VMRUNUX0RSSVZFKGRyaXZlKTsKLQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7CisJU0VMRUNUX01BU0soZHJpdmUsIDEpOwogCXVkZWxheSgxKTsKIAl0cF9vcHMtPnNldF9pcnEoaHdpZiwgMCk7CiAKQEAgLTc5MCw3ICs3OTAsNyBAQAogCiAgc2tpcDoKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUEKLQlpZiAoc3BlZWQgPj0gWEZFUl9TV19ETUFfMCAmJiBkcml2ZS0+dXNpbmdfZG1hKQorCWlmIChzcGVlZCA+PSBYRkVSX1NXX0RNQV8wICYmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkpCiAJCWh3aWYtPmRtYV9vcHMtPmRtYV9ob3N0X3NldChkcml2ZSwgMSk7CiAJZWxzZSBpZiAoaHdpZi0+ZG1hX29wcykJLyogY2hlY2sgaWYgaG9zdCBzdXBwb3J0cyBETUEgKi8KIAkJaWRlX2RtYV9vZmZfcXVpZXRseShkcml2ZSk7CkBAIC05NDAsNiArOTQwLDI1IEBACiAJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQogCitzdGF0aWMgdm9pZCBpZGVfcmVzZXRfcmVwb3J0X2Vycm9yKGlkZV9od2lmX3QgKmh3aWYsIHU4IGVycikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqZXJyX21hc3Rlcl92YWxzW10gPQorCQl7IE5VTEwsICJwYXNzZWQiLCAiZm9ybWF0dGVyIGRldmljZSBlcnJvciIsCisJCSAgInNlY3RvciBidWZmZXIgZXJyb3IiLCAiRUNDIGNpcmN1aXRyeSBlcnJvciIsCisJCSAgImNvbnRyb2xsaW5nIE1QVSBlcnJvciIgfTsKKworCXU4IGVycl9tYXN0ZXIgPSBlcnIgJiAweDdmOworCisJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzZXQ6IG1hc3RlcjogIiwgaHdpZi0+bmFtZSk7CisJaWYgKGVycl9tYXN0ZXIgJiYgZXJyX21hc3RlciA8IDYpCisJCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgZXJyX21hc3Rlcl92YWxzW2Vycl9tYXN0ZXJdKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0NPTlQgImVycm9yICgweCUwMng/KSIsIGVycik7CisJaWYgKGVyciAmIDB4ODApCisJCXByaW50ayhLRVJOX0NPTlQgIjsgc2xhdmU6IGZhaWxlZCIpOworCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Cit9CisKIC8qCiAgKiByZXNldF9wb2xsZnVuYygpIGdldHMgaW52b2tlZCB0byBwb2xsIHRoZSBpbnRlcmZhY2UgZm9yIGNvbXBsZXRpb24gZXZlcnkgNTBtcwogICogZHVyaW5nIGFuIGlkZSByZXNldCBvcGVyYXRpb24uIElmIHRoZSBkcml2ZXMgaGF2ZSBub3QgeWV0IHJlc3BvbmRlZCwKQEAgLTk3NSwzMSArOTk0LDE0IEBACiAJCWRyaXZlLT5mYWlsdXJlcysrOwogCQllcnIgPSAtRUlPOwogCX0gZWxzZSAgewotCQlwcmludGsoIiVzOiByZXNldDogIiwgaHdpZi0+bmFtZSk7CiAJCXRtcCA9IGlkZV9yZWFkX2Vycm9yKGRyaXZlKTsKIAogCQlpZiAodG1wID09IDEpIHsKLQkJCXByaW50aygic3VjY2Vzc1xuIik7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVzZXQ6IHN1Y2Nlc3NcbiIsIGh3aWYtPm5hbWUpOwogCQkJZHJpdmUtPmZhaWx1cmVzID0gMDsKIAkJfSBlbHNlIHsKKwkJCWlkZV9yZXNldF9yZXBvcnRfZXJyb3IoaHdpZiwgdG1wKTsKIAkJCWRyaXZlLT5mYWlsdXJlcysrOwotCQkJcHJpbnRrKCJtYXN0ZXI6ICIpOwotCQkJc3dpdGNoICh0bXAgJiAweDdmKSB7Ci0JCQkJY2FzZSAxOiBwcmludGsoInBhc3NlZCIpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDI6IHByaW50aygiZm9ybWF0dGVyIGRldmljZSBlcnJvciIpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDM6IHByaW50aygic2VjdG9yIGJ1ZmZlciBlcnJvciIpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDQ6IHByaW50aygiRUNDIGNpcmN1aXRyeSBlcnJvciIpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDU6IHByaW50aygiY29udHJvbGxpbmcgTVBVIGVycm9yIik7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6cHJpbnRrKCJlcnJvciAoMHglMDJ4PykiLCB0bXApOwotCQkJfQotCQkJaWYgKHRtcCAmIDB4ODApCi0JCQkJcHJpbnRrKCI7IHNsYXZlOiBmYWlsZWQiKTsKLQkJCXByaW50aygiXG4iKTsKIAkJCWVyciA9IC1FSU87CiAJCX0KIAl9CkBAIC0xMDE2LDkgKzEwMTgsMTQgQEAKIAlkcml2ZS0+c3BlY2lhbC5hbGwgPSAwOwogCWRyaXZlLT5zcGVjaWFsLmIuc2V0X2dlb21ldHJ5ID0gbGVnYWN5OwogCWRyaXZlLT5zcGVjaWFsLmIucmVjYWxpYnJhdGUgID0gbGVnYWN5OworCiAJZHJpdmUtPm11bHRfY291bnQgPSAwOwotCWlmICghZHJpdmUtPmtlZXBfc2V0dGluZ3MgJiYgIWRyaXZlLT51c2luZ19kbWEpCisJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BBUktFRDsKKworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKSA9PSAwICYmCisJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCkKIAkJZHJpdmUtPm11bHRfcmVxID0gMDsKKwogCWlmIChkcml2ZS0+bXVsdF9yZXEgIT0gZHJpdmUtPm11bHRfY291bnQpCiAJCWRyaXZlLT5zcGVjaWFsLmIuc2V0X211bHRtb2RlID0gMTsKIH0KQEAgLTEwMzAsMTggKzEwMzcsMTggQEAKIAlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQogCQlpZGVfZGlza19wcmVfcmVzZXQoZHJpdmUpOwogCWVsc2UKLQkJZHJpdmUtPnBvc3RfcmVzZXQgPSAxOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QT1NUX1JFU0VUOwogCi0JaWYgKGRyaXZlLT51c2luZ19kbWEpIHsKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpIHsKIAkJaWYgKGRyaXZlLT5jcmNfY291bnQpCiAJCQlpZGVfY2hlY2tfZG1hX2NyYyhkcml2ZSk7CiAJCWVsc2UKIAkJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKIAl9CiAKLQlpZiAoIWRyaXZlLT5rZWVwX3NldHRpbmdzKSB7Ci0JCWlmICghZHJpdmUtPnVzaW5nX2RtYSkgewotCQkJZHJpdmUtPnVubWFzayA9IDA7CisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0tFRVBfU0VUVElOR1MpID09IDApIHsKKwkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCkgeworCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VOTUFTSzsKIAkJCWRyaXZlLT5pb18zMmJpdCA9IDA7CiAJCX0KIAkJcmV0dXJuOwpAQCAtMTA3MywxMiArMTA4MCwxMyBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBkb19yZXNldDEgKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRvX25vdF90cnlfYXRhcGkpCiB7CiAJdW5zaWduZWQgaW50IHVuaXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB0aW1lb3V0OwogCWlkZV9od2lmX3QgKmh3aWY7CiAJaWRlX2h3Z3JvdXBfdCAqaHdncm91cDsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0czsKIAljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzOwogCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzOworCURFRklORV9XQUlUKHdhaXQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CiAJaHdpZiA9IEhXSUYoZHJpdmUpOwpAQCAtMTEwNSw2ICsxMTEzLDMxIEBACiAJCXJldHVybiBpZGVfc3RhcnRlZDsKIAl9CiAKKwkvKiBXZSBtdXN0IG5vdCBkaXN0dXJiIGRldmljZXMgaW4gdGhlIElERV9ERkxBR19QQVJLRUQgc3RhdGUuICovCisJZG8geworCQl1bnNpZ25lZCBsb25nIG5vdzsKKworCQlwcmVwYXJlX3RvX3dhaXQoJmlkZV9wYXJrX3dxLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQl0aW1lb3V0ID0gamlmZmllczsKKwkJZm9yICh1bml0ID0gMDsgdW5pdCA8IE1BWF9EUklWRVM7IHVuaXQrKykgeworCQkJaWRlX2RyaXZlX3QgKnRkcml2ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF07CisKKwkJCWlmICh0ZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UICYmCisJCQkgICAgdGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUEFSS0VEICYmCisJCQkgICAgdGltZV9hZnRlcih0ZHJpdmUtPnNsZWVwLCB0aW1lb3V0KSkKKwkJCQl0aW1lb3V0ID0gdGRyaXZlLT5zbGVlcDsKKwkJfQorCisJCW5vdyA9IGppZmZpZXM7CisJCWlmICh0aW1lX2JlZm9yZV9lcSh0aW1lb3V0LCBub3cpKQorCQkJYnJlYWs7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHRpbWVvdXQgLSBub3cpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwl9IHdoaWxlICh0aW1lb3V0KTsKKwlmaW5pc2hfd2FpdCgmaWRlX3Bhcmtfd3EsICZ3YWl0KTsKKwogCS8qCiAJICogRmlyc3QsIHJlc2V0IGFueSBkZXZpY2Ugc3RhdGUgZGF0YSB3ZSB3ZXJlIG1haW50YWluaW5nCiAJICogZm9yIGFueSBvZiB0aGUgZHJpdmVzIG9uIHRoaXMgaW50ZXJmYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWxpYi5jIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCmluZGV4IGVkNDI2ZGQuLjlmYzRjZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtbGliLmMKQEAgLTMxNyw3ICszMTcsNyBAQAogewogCWlkZV90YXNrX3QgdGFzazsKIAlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLnRmOwotCWludCBsYmE0OCA9IChkcml2ZS0+YWRkcmVzc2luZyA9PSAxKSA/IDEgOiAwOworCXU4IGxiYTQ4ID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCk7CiAKIAltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CiAJaWYgKGxiYTQ4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXBhcmsuYyBiL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiMDBlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKQEAgLTAsMCArMSwxMjEgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisKK0RFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGlkZV9wYXJrX3dxKTsKKworc3RhdGljIHZvaWQgaXNzdWVfcGFya19jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7CisJc3RydWN0IHJlcXVlc3QgKnJxOworCWludCByYzsKKworCXRpbWVvdXQgKz0gamlmZmllczsKKwlzcGluX2xvY2tfaXJxKCZpZGVfbG9jayk7CisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUEFSS0VEKSB7CisJCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXAgPSBkcml2ZS0+aHdpZi0+aHdncm91cDsKKwkJaW50IHJlc2V0X3RpbWVyOworCisJCXJlc2V0X3RpbWVyID0gdGltZV9iZWZvcmUodGltZW91dCwgZHJpdmUtPnNsZWVwKTsKKwkJZHJpdmUtPnNsZWVwID0gdGltZW91dDsKKwkJd2FrZV91cF9hbGwoJmlkZV9wYXJrX3dxKTsKKwkJaWYgKHJlc2V0X3RpbWVyICYmIGh3Z3JvdXAtPnNsZWVwaW5nICYmCisJCSAgICBkZWxfdGltZXIoJmh3Z3JvdXAtPnRpbWVyKSkgeworCQkJaHdncm91cC0+c2xlZXBpbmcgPSAwOworCQkJaHdncm91cC0+YnVzeSA9IDA7CisJCQlibGtfc3RhcnRfcXVldWVpbmcocSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CisKKwlycSA9IGJsa19nZXRfcmVxdWVzdChxLCBSRUFELCBfX0dGUF9XQUlUKTsKKwlycS0+Y21kWzBdID0gUkVRX1BBUktfSEVBRFM7CisJcnEtPmNtZF9sZW4gPSAxOworCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7CisJcnEtPnNwZWNpYWwgPSAmdGltZW91dDsKKwlyYyA9IGJsa19leGVjdXRlX3JxKHEsIE5VTEwsIHJxLCAxKTsKKwlibGtfcHV0X3JlcXVlc3QocnEpOworCWlmIChyYykKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0ICpzb21lKiBjb21tYW5kIGlzIHNlbnQgdG8gdGhlIGRyaXZlIGFmdGVyIHRoZQorCSAqIHRpbWVvdXQgaGFzIGV4cGlyZWQsIHNvIHBvd2VyIG1hbmFnZW1lbnQgd2lsbCBiZSByZWVuYWJsZWQuCisJICovCisJcnEgPSBibGtfZ2V0X3JlcXVlc3QocSwgUkVBRCwgR0ZQX05PV0FJVCk7CisJaWYgKHVubGlrZWx5KCFycSkpCisJCWdvdG8gb3V0OworCisJcnEtPmNtZFswXSA9IFJFUV9VTlBBUktfSEVBRFM7CisJcnEtPmNtZF9sZW4gPSAxOworCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7CisJZWx2X2FkZF9yZXF1ZXN0KHEsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQsIDEpOworCitvdXQ6CisJcmV0dXJuOworfQorCitzc2l6ZV90IGlkZV9wYXJrX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICAgY2hhciAqYnVmKQoreworCWlkZV9kcml2ZV90ICpkcml2ZSA9IHRvX2lkZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBsb25nIG5vdzsKKwl1bnNpZ25lZCBpbnQgbXNlY3M7CisKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19VTkxPQUQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKKwlub3cgPSBqaWZmaWVzOworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BBUktFRCAmJgorCSAgICB0aW1lX2FmdGVyKGRyaXZlLT5zbGVlcCwgbm93KSkKKwkJbXNlY3MgPSBqaWZmaWVzX3RvX21zZWNzKGRyaXZlLT5zbGVlcCAtIG5vdyk7CisJZWxzZQorCQltc2VjcyA9IDA7CisJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiV1XG4iLCBtc2Vjcyk7Cit9CisKK3NzaXplX3QgaWRlX3Bhcmtfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKyNkZWZpbmUgTUFYX1BBUktfVElNRU9VVCAzMDAwMAorCWlkZV9kcml2ZV90ICpkcml2ZSA9IHRvX2lkZV9kZXZpY2UoZGV2KTsKKwlsb25nIGludCBpbnB1dDsKKwlpbnQgcmM7CisKKwlyYyA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJmlucHV0KTsKKwlpZiAocmMgfHwgaW5wdXQgPCAtMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGlucHV0ID4gTUFYX1BBUktfVElNRU9VVCkgeworCQlpbnB1dCA9IE1BWF9QQVJLX1RJTUVPVVQ7CisJCXJjID0gLUVPVkVSRkxPVzsKKwl9CisKKwltdXRleF9sb2NrKCZpZGVfc2V0dGluZ19tdHgpOworCWlmIChpbnB1dCA+PSAwKSB7CisJCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PX1VOTE9BRCkKKwkJCXJjID0gLUVPUE5PVFNVUFA7CisJCWVsc2UgaWYgKGlucHV0IHx8IGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUEFSS0VEKQorCQkJaXNzdWVfcGFya19jbWQoZHJpdmUsIG1zZWNzX3RvX2ppZmZpZXMoaW5wdXQpKTsKKwl9IGVsc2UgeworCQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQorCQkJc3dpdGNoIChpbnB1dCkgeworCQkJY2FzZSAtMToKKwkJCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTk9fVU5MT0FEOworCQkJCWJyZWFrOworCQkJY2FzZSAtMjoKKwkJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT19VTkxPQUQ7CisJCQkJYnJlYWs7CisJCQl9CisJCWVsc2UKKwkJCXJjID0gLUVPUE5PVFNVUFA7CisJfQorCW11dGV4X3VubG9jaygmaWRlX3NldHRpbmdfbXR4KTsKKworCXJldHVybiByYyA/IHJjIDogbGVuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCAwNjU3NWExLi4xNjQ5ZWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtMTIxLDcgKzEyMSw4IEBACiAJLyogcmVhZCA1MTIgYnl0ZXMgb2YgaWQgaW5mbyAqLwogCWh3aWYtPnRwX29wcy0+aW5wdXRfZGF0YShkcml2ZSwgTlVMTCwgaWQsIFNFQ1RPUl9TSVpFKTsKIAotCWRyaXZlLT5pZF9yZWFkID0gMTsKKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19JRF9SRUFEOworCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogI2lmZGVmIERFQlVHCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGR1bXBpbmcgaWRlbnRpZnkgZGF0YVxuIiwgZHJpdmUtPm5hbWUpOwpAQCAtMTUzLDggKzE1NCw4IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogJXMsICIsIGRyaXZlLT5uYW1lLCBtKTsKIAotCWRyaXZlLT5wcmVzZW50ID0gMTsKLQlkcml2ZS0+ZGVhZCA9IDA7CisJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUFJFU0VOVDsKKwlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfREVBRDsKIAogCS8qCiAJICogQ2hlY2sgZm9yIGFuIEFUQVBJIGRldmljZQpAQCAtMTcyLDE0ICsxNzMsMTQgQEAKIAkJCQkJCXByaW50ayhLRVJOX0NPTlQgImNkcm9tIG9yIGZsb3BweT8sIGFzc3VtaW5nICIpOwogCQkJCQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9jZHJvbSkgewogCQkJCQkJcHJpbnRrKEtFUk5fQ09OVCAiRkxPUFBZIik7Ci0JCQkJCQlkcml2ZS0+cmVtb3ZhYmxlID0gMTsKKwkJCQkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1JFTU9WQUJMRTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJfQogCQkJCS8qIEVhcmx5IGNkcm9tIG1vZGVscyB1c2VkIHplcm8gKi8KIAkJCQl0eXBlID0gaWRlX2Nkcm9tOwogCQkJY2FzZSBpZGVfY2Ryb206Ci0JCQkJZHJpdmUtPnJlbW92YWJsZSA9IDE7CisJCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUkVNT1ZBQkxFOwogI2lmZGVmIENPTkZJR19QUEMKIAkJCQkvKiBrbHVkZ2UgZm9yIEFwcGxlIFBvd2VyQm9vayBpbnRlcm5hbCB6aXAgKi8KIAkJCQlpZiAoIXN0cnN0cihtLCAiQ0QtUk9NIikgJiYgc3Ryc3RyKG0sICJaSVAiKSkgewpAQCAtMTk1LDcgKzE5Niw3IEBACiAJCQkJYnJlYWs7CiAJCQljYXNlIGlkZV9vcHRpY2FsOgogCQkJCXByaW50ayhLRVJOX0NPTlQgIk9QVElDQUwiKTsKLQkJCQlkcml2ZS0+cmVtb3ZhYmxlID0gMTsKKwkJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19SRU1PVkFCTEU7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXByaW50ayhLRVJOX0NPTlQgIlVOS05PV04gKHR5cGUgJWQpIiwgdHlwZSk7CkBAIC0yMDUsNiArMjA2LDExIEBACiAJCWRyaXZlLT5tZWRpYSA9IHR5cGU7CiAJCS8qIGFuIEFUQVBJIGRldmljZSBpZ25vcmVzIERSRFkgKi8KIAkJZHJpdmUtPnJlYWR5X3N0YXQgPSAwOworCQlpZiAoYXRhX2lkX2NkYl9pbnRyKGlkKSkKKwkJCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfRFJRX0lOVEVSUlVQVDsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfRE9PUkxPQ0tJTkc7CisJCS8qIHdlIGRvbid0IGRvIGhlYWQgdW5sb2FkaW5nIG9uIEFUQVBJIGRldmljZXMgKi8KKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTk9fVU5MT0FEOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMTYsMTcgKzIyMiwyMCBAQAogCiAJLyogQ0YgZGV2aWNlcyBhcmUgKm5vdCogcmVtb3ZhYmxlIGluIExpbnV4IGRlZmluaXRpb24gb2YgdGhlIHRlcm0gKi8KIAlpZiAoaXNfY2ZhID09IDAgJiYgKGlkW0FUQV9JRF9DT05GSUddICYgKDEgPDwgNykpKQotCQlkcml2ZS0+cmVtb3ZhYmxlID0gMTsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUkVNT1ZBQkxFOwogCiAJZHJpdmUtPm1lZGlhID0gaWRlX2Rpc2s7CiAKKwlpZiAoIWF0YV9pZF9oYXNfdW5sb2FkKGRyaXZlLT5pZCkpCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PX1VOTE9BRDsKKwogCXByaW50ayhLRVJOX0NPTlQgIiVzIERJU0sgZHJpdmVcbiIsIGlzX2NmYSA/ICJDRkEiIDogIkFUQSIpOwogCiAJcmV0dXJuOwogCiBlcnJfbWlzYzoKIAlrZnJlZShpZCk7Ci0JZHJpdmUtPnByZXNlbnQgPSAwOworCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QUkVTRU5UOwogCXJldHVybjsKIH0KIApAQCAtNDI2LDE2ICs0MzUsMTUgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CiAJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKIAlpbnQgcmM7Ci0JdTggc3RhdDsKKwl1OCBwcmVzZW50ID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSwgc3RhdDsKIAotCWlmIChkcml2ZS0+cHJlc2VudCkgewotCQkvKiBhdm9pZCB3YWl0aW5nIGZvciBpbmFwcHJvcHJpYXRlIHByb2JlcyAqLwotCQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrICYmIGNtZCA9PSBBVEFfQ01EX0lEX0FUQSkKLQkJCXJldHVybiA0OwotCX0KKwkvKiBhdm9pZCB3YWl0aW5nIGZvciBpbmFwcHJvcHJpYXRlIHByb2JlcyAqLworCWlmIChwcmVzZW50ICYmIGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayAmJiBjbWQgPT0gQVRBX0NNRF9JRF9BVEEpCisJCXJldHVybiA0OworCiAjaWZkZWYgREVCVUcKIAlwcmludGsoS0VSTl9JTkZPICJwcm9iaW5nIGZvciAlczogcHJlc2VudD0lZCwgbWVkaWE9JWQsIHByb2JldHlwZT0lc1xuIiwKLQkJZHJpdmUtPm5hbWUsIGRyaXZlLT5wcmVzZW50LCBkcml2ZS0+bWVkaWEsCisJCWRyaXZlLT5uYW1lLCBwcmVzZW50LCBkcml2ZS0+bWVkaWEsCiAJCShjbWQgPT0gQVRBX0NNRF9JRF9BVEEpID8gIkFUQSIgOiAiQVRBUEkiKTsKICNlbmRpZgogCkBAIC00NDYsOCArNDU0LDggQEAKIAlTRUxFQ1RfRFJJVkUoZHJpdmUpOwogCW1zbGVlcCg1MCk7CiAKLQlpZiAoaWRlX3JlYWRfZGV2aWNlKGRyaXZlKSAhPSBkcml2ZS0+c2VsZWN0LmFsbCAmJiAhZHJpdmUtPnByZXNlbnQpIHsKLQkJaWYgKGRyaXZlLT5zZWxlY3QuYi51bml0ICE9IDApIHsKKwlpZiAoaWRlX3JlYWRfZGV2aWNlKGRyaXZlKSAhPSBkcml2ZS0+c2VsZWN0ICYmIHByZXNlbnQgPT0gMCkgeworCQlpZiAoZHJpdmUtPmRuICYgMSkgewogCQkJLyogZXhpdCB3aXRoIGRyaXZlMCBzZWxlY3RlZCAqLwogCQkJU0VMRUNUX0RSSVZFKCZod2lmLT5kcml2ZXNbMF0pOwogCQkJLyogYWxsb3cgQVRBX0JVU1kgdG8gYXNzZXJ0ICYgY2xlYXIgKi8KQEAgLTQ2MCw3ICs0NjgsNyBAQAogCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCiAJaWYgKE9LX1NUQVQoc3RhdCwgQVRBX0RSRFksIEFUQV9CVVNZKSB8fAotCSAgICBkcml2ZS0+cHJlc2VudCB8fCBjbWQgPT0gQVRBX0NNRF9JRF9BVEFQSSkgeworCSAgICBwcmVzZW50IHx8IGNtZCA9PSBBVEFfQ01EX0lEX0FUQVBJKSB7CiAJCS8qIHNlbmQgY21kIGFuZCB3YWl0ICovCiAJCWlmICgocmMgPSB0cnlfdG9faWRlbnRpZnkoZHJpdmUsIGNtZCkpKSB7CiAJCQkvKiBmYWlsZWQ6IHRyeSBhZ2FpbiAqLwpAQCAtNDkzLDcgKzUwMSw3IEBACiAJCS8qIG5vdCBwcmVzZW50IG9yIG1heWJlIEFUQVBJICovCiAJCXJjID0gMzsKIAl9Ci0JaWYgKGRyaXZlLT5zZWxlY3QuYi51bml0ICE9IDApIHsKKwlpZiAoZHJpdmUtPmRuICYgMSkgewogCQkvKiBleGl0IHdpdGggZHJpdmUwIHNlbGVjdGVkICovCiAJCVNFTEVDVF9EUklWRSgmaHdpZi0+ZHJpdmVzWzBdKTsKIAkJbXNsZWVwKDUwKTsKQEAgLTU0Miw4ICs1NTAsOCBAQAogICoJYW5kIHByZXNlbnRzIHRoaW5ncyB0byB0aGUgdXNlciBhcyBuZWVkZWQuCiAgKgogICoJUmV0dXJuczoJMCAgbm8gZGV2aWNlIHdhcyBmb3VuZAotICoJCQkxICBkZXZpY2Ugd2FzIGZvdW5kIChub3RlOiBkcml2ZS0+cHJlc2VudCBtaWdodAotICoJCQkgICBzdGlsbCBiZSAwKQorICoJCQkxICBkZXZpY2Ugd2FzIGZvdW5kCisgKgkJCSAgIChub3RlOiBJREVfREZMQUdfUFJFU0VOVCBtaWdodCBzdGlsbCBiZSBub3Qgc2V0KQogICovCiAgCiBzdGF0aWMgaW5saW5lIHU4IHByb2JlX2Zvcl9kcml2ZSAoaWRlX2RyaXZlX3QgKmRyaXZlKQpAQCAtNTU5LDEwICs1NjcsMTAgQEAKIAkgKglBbHNvIG5vdGUgdGhhdCAwIGV2ZXJ5d2hlcmUgbWVhbnMgImNhbid0IGRvIFgiCiAJICovCiAgCisJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0lEX1JFQUQ7CisKIAlkcml2ZS0+aWQgPSBremFsbG9jKFNFQ1RPUl9TSVpFLCBHRlBfS0VSTkVMKTsKLQlkcml2ZS0+aWRfcmVhZCA9IDA7Ci0JaWYoZHJpdmUtPmlkID09IE5VTEwpCi0JeworCWlmIChkcml2ZS0+aWQgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImlkZTogb3V0IG9mIG1lbW9yeSBmb3IgaWQgZGF0YS5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC01NzEsMTQgKzU3OSwxNCBAQAogCXN0cmNweShtLCAiVU5LTk9XTiIpOwogCiAJLyogc2tpcCBwcm9iaW5nPyAqLwotCWlmICghZHJpdmUtPm5vcHJvYmUpIHsKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9QUk9CRSkgPT0gMCkgewogcmV0cnk6CiAJCS8qIGlmICEoc3VjY2Vzc3x8dGltZWQtb3V0KSAqLwogCQlpZiAoZG9fcHJvYmUoZHJpdmUsIEFUQV9DTURfSURfQVRBKSA+PSAyKQogCQkJLyogbG9vayBmb3IgQVRBUEkgZGV2aWNlICovCiAJCQkodm9pZClkb19wcm9iZShkcml2ZSwgQVRBX0NNRF9JRF9BVEFQSSk7CiAKLQkJaWYgKCFkcml2ZS0+cHJlc2VudCkKKwkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCiAJCQkvKiBkcml2ZSBub3QgZm91bmQgKi8KIAkJCXJldHVybiAwOwogCkBAIC01ODgsNyArNTk2LDcgQEAKIAkJfQogCiAJCS8qIGlkZW50aWZpY2F0aW9uIGZhaWxlZD8gKi8KLQkJaWYgKCFkcml2ZS0+aWRfcmVhZCkgeworCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfSURfUkVBRCkgPT0gMCkgewogCQkJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykgewogCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBub24tSURFIGRyaXZlLCBDSFM9JWQvJWQvJWRcbiIsCiAJCQkJCWRyaXZlLT5uYW1lLCBkcml2ZS0+Y3lsLApAQCAtNTk4LDE1ICs2MDYsMTcgQEAKIAkJCX0gZWxzZSB7CiAJCQkJLyogbnVrZSBpdCAqLwogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmtub3duIGRldmljZSBvbiBidXMgcmVmdXNlZCBpZGVudGlmaWNhdGlvbi4gSWdub3JpbmcuXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCQkJZHJpdmUtPnByZXNlbnQgPSAwOworCQkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QUkVTRU5UOwogCQkJfQogCQl9CiAJCS8qIGRyaXZlIHdhcyBmb3VuZCAqLwogCX0KLQlpZighZHJpdmUtPnByZXNlbnQpCisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKIAkJcmV0dXJuIDA7CisKIAkvKiBUaGUgZHJpdmUgd2Fzbid0IGJlaW5nIGhlbHBmdWwuIEFkZCBnZW5lcmljIGluZm8gb25seSAqLwotCWlmIChkcml2ZS0+aWRfcmVhZCA9PSAwKSB7CisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0lEX1JFQUQpID09IDApIHsKIAkJZ2VuZXJpY19pZChkcml2ZSk7CiAJCXJldHVybiAxOwogCX0KQEAgLTYxNiw3ICs2MjYsNyBAQAogCQlpZGVfZGlza19pbml0X211bHRfY291bnQoZHJpdmUpOwogCX0KIAotCXJldHVybiBkcml2ZS0+cHJlc2VudDsKKwlyZXR1cm4gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKTsKIH0KIAogc3RhdGljIHZvaWQgaHdpZl9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC02NDgsOCArNjU4LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaHdpZi0+cG9ydGRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShpZGVfcG9ydF9jbGFzcywgJmh3aWYtPmdlbmRldiwKLQkJCQkJICAgICAgTUtERVYoMCwgMCksIGh3aWYsIGh3aWYtPm5hbWUpOworCWh3aWYtPnBvcnRkZXYgPSBkZXZpY2VfY3JlYXRlKGlkZV9wb3J0X2NsYXNzLCAmaHdpZi0+Z2VuZGV2LAorCQkJCSAgICAgIE1LREVWKDAsIDApLCBod2lmLCBod2lmLT5uYW1lKTsKIAlpZiAoSVNfRVJSKGh3aWYtPnBvcnRkZXYpKSB7CiAJCXJldCA9IFBUUl9FUlIoaHdpZi0+cG9ydGRldik7CiAJCWRldmljZV91bnJlZ2lzdGVyKCZod2lmLT5nZW5kZXYpOwpAQCAtNzA3LDcgKzcxNyw4IEBACiAJCWlkZV9kcml2ZV90ICpkcml2ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF07CiAKIAkJLyogSWdub3JlIGRpc2tzIHRoYXQgd2Ugd2lsbCBub3QgcHJvYmUgZm9yIGxhdGVyLiAqLwotCQlpZiAoIWRyaXZlLT5ub3Byb2JlIHx8IGRyaXZlLT5wcmVzZW50KSB7CisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1BST0JFKSA9PSAwIHx8CisJCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSkgewogCQkJU0VMRUNUX0RSSVZFKGRyaXZlKTsKIAkJCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKIAkJCW1kZWxheSgyKTsKQEAgLTczOSw3ICs3NTAsNyBAQAogewogCWlkZV9kcml2ZV90ICpkZXYwID0gJmRldjEtPmh3aWYtPmRyaXZlc1swXTsKIAotCWlmICgoZGV2MS0+ZG4gJiAxKSA9PSAwIHx8IGRldjAtPnByZXNlbnQgPT0gMCkKKwlpZiAoKGRldjEtPmRuICYgMSkgPT0gMCB8fCAoZGV2MC0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCiAJCXJldHVybjsKIAogCS8qIElmIHRoZSBtb2RlbHMgZG9uJ3QgbWF0Y2ggdGhleSBhcmUgbm90IHRoZSBzYW1lIHByb2R1Y3QgKi8KQEAgLTc1OSw3ICs3NzAsNyBAQAogCS8qIEFwcGVhcnMgdG8gYmUgYW4gSURFIGZsYXNoIGFkYXB0ZXIgd2l0aCBkZWNvZGUgYnVncyAqLwogCXByaW50ayhLRVJOX1dBUk5JTkcgImlkZS1wcm9iZTogaWdub3JpbmcgdW5kZWNvZGVkIHNsYXZlXG4iKTsKIAotCWRldjEtPnByZXNlbnQgPSAwOworCWRldjEtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BSRVNFTlQ7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV91bmRlY29kZWRfc2xhdmUpOwpAQCAtNzcyLDcgKzc4Myw4IEBACiAKIAlCVUdfT04oaHdpZi0+cHJlc2VudCk7CiAKLQlpZiAoaHdpZi0+ZHJpdmVzWzBdLm5vcHJvYmUgJiYgaHdpZi0+ZHJpdmVzWzFdLm5vcHJvYmUpCisJaWYgKChod2lmLT5kcml2ZXNbMF0uZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PUFJPQkUpICYmCisJICAgIChod2lmLT5kcml2ZXNbMV0uZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PUFJPQkUpKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAogCS8qCkBAIC03OTQsOSArODA2LDkgQEAKIAkgKi8KIAlmb3IgKHVuaXQgPSAwOyB1bml0IDwgTUFYX0RSSVZFUzsgKyt1bml0KSB7CiAJCWlkZV9kcml2ZV90ICpkcml2ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF07Ci0JCWRyaXZlLT5kbiA9IChod2lmLT5jaGFubmVsID8gMiA6IDApICsgdW5pdDsKKwogCQkodm9pZCkgcHJvYmVfZm9yX2RyaXZlKGRyaXZlKTsKLQkJaWYgKGRyaXZlLT5wcmVzZW50KQorCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKQogCQkJcmMgPSAwOwogCX0KIApAQCAtODIwLDE3ICs4MzIsMTkgQEAKIAlmb3IgKHVuaXQgPSAwOyB1bml0IDwgTUFYX0RSSVZFUzsgdW5pdCsrKSB7CiAJCWlkZV9kcml2ZV90ICpkcml2ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF07CiAKLQkJaWYgKGRyaXZlLT5wcmVzZW50ICYmIHBvcnRfb3BzICYmIHBvcnRfb3BzLT5xdWlya3Byb2MpCi0JCQlwb3J0X29wcy0+cXVpcmtwcm9jKGRyaXZlKTsKKwkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgeworCQkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5xdWlya3Byb2MpCisJCQkJcG9ydF9vcHMtPnF1aXJrcHJvYyhkcml2ZSk7CisJCX0KIAl9CiAKIAlmb3IgKHVuaXQgPSAwOyB1bml0IDwgTUFYX0RSSVZFUzsgKyt1bml0KSB7CiAJCWlkZV9kcml2ZV90ICpkcml2ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF07CiAKLQkJaWYgKGRyaXZlLT5wcmVzZW50KSB7CisJCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpIHsKIAkJCWlkZV9zZXRfbWF4X3Bpbyhkcml2ZSk7CiAKLQkJCWRyaXZlLT5uaWNlMSA9IDE7CisJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OSUNFMTsKIAogCQkJaWYgKGh3aWYtPmRtYV9vcHMpCiAJCQkJaWRlX3NldF9kbWEoZHJpdmUpOwpAQCAtODQwLDE0ICs4NTQsMTQgQEAKIAlmb3IgKHVuaXQgPSAwOyB1bml0IDwgTUFYX0RSSVZFUzsgKyt1bml0KSB7CiAJCWlkZV9kcml2ZV90ICpkcml2ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF07CiAKLQkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fSU9fMzJCSVQpCi0JCQlkcml2ZS0+bm9faW9fMzJiaXQgPSAxOworCQlpZiAoKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fSU9fMzJCSVQpIHx8CisJCSAgICBkcml2ZS0+aWRbQVRBX0lEX0RXT1JEX0lPXSkKKwkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PX0lPXzMyQklUOwogCQllbHNlCi0JCQlkcml2ZS0+bm9faW9fMzJiaXQgPSBkcml2ZS0+aWRbQVRBX0lEX0RXT1JEX0lPXSA/IDEgOiAwOworCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX05PX0lPXzMyQklUOwogCX0KIH0KIAotI2lmIE1BWF9IV0lGUyA+IDEKIC8qCiAgKiBzYXZlX21hdGNoKCkgaXMgdXNlZCB0byBzaW1wbGlmeSBsb2dpYyBpbiBpbml0X2lycSgpIGJlbG93LgogICoKQEAgLTg3Miw3ICs4ODYsNiBAQAogCWlmICghbSB8fCBtLT5pcnEgIT0gaHdpZi0+aXJxKSAvKiBkb24ndCB1bmRvIGEgcHJpb3IgcGVyZmVjdCBtYXRjaCAqLwogCQkqbWF0Y2ggPSBuZXc7CiB9Ci0jZW5kaWYgLyogTUFYX0hXSUZTID4gMSAqLwogCiAvKgogICogaW5pdCByZXF1ZXN0IHF1ZXVlCkBAIC05NTEsMjYgKzk2NCwzMyBAQAogICogLSBhbGxvY2F0ZSB0aGUgYmxvY2sgZGV2aWNlIHF1ZXVlCiAgKiAtIGxpbmsgZHJpdmUgaW50byB0aGUgaHdncm91cAogICovCi1zdGF0aWMgdm9pZCBpZGVfcG9ydF9zZXR1cF9kZXZpY2VzKGlkZV9od2lmX3QgKmh3aWYpCitzdGF0aWMgaW50IGlkZV9wb3J0X3NldHVwX2RldmljZXMoaWRlX2h3aWZfdCAqaHdpZikKIHsKLQlpbnQgaTsKKwlpbnQgaSwgaiA9IDA7CiAKIAltdXRleF9sb2NrKCZpZGVfY2ZnX210eCk7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9EUklWRVM7IGkrKykgewogCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW2ldOwogCi0JCWlmICghZHJpdmUtPnByZXNlbnQpCisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQkJY29udGludWU7CiAKIAkJaWYgKGlkZV9pbml0X3F1ZXVlKGRyaXZlKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJpZGU6IGZhaWxlZCB0byBpbml0ICVzXG4iLAogCQkJCQlkcml2ZS0+bmFtZSk7CisJCQlrZnJlZShkcml2ZS0+aWQpOworCQkJZHJpdmUtPmlkID0gTlVMTDsKKwkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QUkVTRU5UOwogCQkJY29udGludWU7CiAJCX0KIAorCQlqKys7CisKIAkJaWRlX2FkZF9kcml2ZV90b19od2dyb3VwKGRyaXZlKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZpZGVfY2ZnX210eCk7CisKKwlyZXR1cm4gajsKIH0KIAogc3RhdGljIGlkZV9od2lmX3QgKmlkZV9wb3J0c1tNQVhfSFdJRlNdOwpAQCAtMTAyOSw3ICsxMDQ5LDcgQEAKIAogCW11dGV4X2xvY2soJmlkZV9jZmdfbXR4KTsKIAlod2lmLT5od2dyb3VwID0gTlVMTDsKLSNpZiBNQVhfSFdJRlMgPiAxCisKIAkvKgogCSAqIEdyb3VwIHVwIHdpdGggYW55IG90aGVyIGh3aWZzIHRoYXQgc2hhcmUgb3VyIGlycShzKS4KIAkgKi8KQEAgLTEwNTQsNyArMTA3NCw3IEBACiAJCQl9CiAJCX0KIAl9Ci0jZW5kaWYgLyogTUFYX0hXSUZTID4gMSAqLworCiAJLyoKIAkgKiBJZiB3ZSBhcmUgc3RpbGwgd2l0aG91dCBhIGh3Z3JvdXAsIHRoZW4gZm9ybSBhIG5ldyBvbmUKIAkgKi8KQEAgLTExNTMsMTIgKzExNzMsMTMgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZGF0YTsKIAlpbnQgdW5pdCA9ICpwYXJ0ID4+IFBBUlROX0JJVFM7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gJmh3aWYtPmRyaXZlc1t1bml0XTsKLQlpZiAoIWRyaXZlLT5wcmVzZW50KQorCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKIAkJcmVxdWVzdF9tb2R1bGUoImlkZS1kaXNrIik7Ci0JaWYgKGRyaXZlLT5zY3NpKQorCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1NDU0kpCiAJCXJlcXVlc3RfbW9kdWxlKCJpZGUtc2NzaSIpOwogCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Nkcm9tIHx8IGRyaXZlLT5tZWRpYSA9PSBpZGVfb3B0aWNhbCkKIAkJcmVxdWVzdF9tb2R1bGUoImlkZS1jZCIpOwpAQCAtMTIwNSw3ICsxMjI2LDcgQEAKIHZvaWQgaWRlX2luaXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1bnNpZ25lZCBpbnQgdW5pdCA9IChkcml2ZS0+c2VsZWN0LmFsbCA+PiA0KSAmIDE7CisJdW5zaWduZWQgaW50IHVuaXQgPSBkcml2ZS0+ZG4gJiAxOwogCiAJZGlzay0+bWFqb3IgPSBod2lmLT5tYWpvcjsKIAlkaXNrLT5maXJzdF9taW5vciA9IHVuaXQgPDwgUEFSVE5fQklUUzsKQEAgLTEyNDgsNyArMTI2OSw3IEBACiAJaWRlX3JlbW92ZV9kcml2ZV9mcm9tX2h3Z3JvdXAoZHJpdmUpOwogCWtmcmVlKGRyaXZlLT5pZCk7CiAJZHJpdmUtPmlkID0gTlVMTDsKLQlkcml2ZS0+cHJlc2VudCA9IDA7CisJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BSRVNFTlQ7CiAJLyogTWVzc2VkIHVwIGxvY2tpbmcgLi4uICovCiAJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CiAJYmxrX2NsZWFudXBfcXVldWUoZHJpdmUtPnF1ZXVlKTsKQEAgLTEzMjcsNyArMTM0OCw3IEBACiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkcml2ZS0+Z2VuZGV2OwogCQlpbnQgcmV0OwogCi0JCWlmICghZHJpdmUtPnByZXNlbnQpCisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQkJY29udGludWU7CiAKIAkJc25wcmludGYoZGV2LT5idXNfaWQsIEJVU19JRF9TSVpFLCAiJXUuJXUiLCBod2lmLT5pbmRleCwgaSk7CkBAIC0xMzUxLDEyICsxMzcyLDE0IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWF9EUklWRVM7IGkrKykgewogCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW2ldOwogCisJCWRyaXZlLT5kbiA9IGkgKyBod2lmLT5jaGFubmVsICogMjsKKwogCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19JT18zMkJJVCkKIAkJCWRyaXZlLT5pb18zMmJpdCA9IDE7CiAJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1VOTUFTS19JUlFTKQotCQkJZHJpdmUtPnVubWFzayA9IDE7CisJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19VTk1BU0s7CiAJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1VOTUFTS19JUlFTKQotCQkJZHJpdmUtPm5vX3VubWFzayA9IDE7CisJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT19VTk1BU0s7CiAKIAkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5pbml0X2RldikKIAkJCXBvcnRfb3BzLT5pbml0X2Rldihkcml2ZSk7CkBAIC0xNTEzLDE5ICsxNTM2LDE0IEBACiAJICogcG9ydHMgMHgxZjAvMHgxNzAgKHRoZSBpZGUwL2lkZTEgZGVmYXVsdHMpLgogCSAqLwogCW11dGV4X2xvY2soJmlkZV9jZmdfbXR4KTsKLQlpZiAoTUFYX0hXSUZTID09IDEpIHsKLQkJaWYgKGlkZV9pbmRleGVzID09IDAgJiYgaSA9PSAwKQotCQkJaWR4ID0gMTsKKwlpZiAoYm9vdGFibGUpIHsKKwkJaWYgKChpZGVfaW5kZXhlcyB8IGkpICE9ICgxIDw8IE1BWF9IV0lGUykgLSAxKQorCQkJaWR4ID0gZmZ6KGlkZV9pbmRleGVzIHwgaSk7CiAJfSBlbHNlIHsKLQkJaWYgKGJvb3RhYmxlKSB7Ci0JCQlpZiAoKGlkZV9pbmRleGVzIHwgaSkgIT0gKDEgPDwgTUFYX0hXSUZTKSAtIDEpCi0JCQkJaWR4ID0gZmZ6KGlkZV9pbmRleGVzIHwgaSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlkZV9pbmRleGVzIHwgMykgIT0gKDEgPDwgTUFYX0hXSUZTKSAtIDEpCi0JCQkJaWR4ID0gZmZ6KGlkZV9pbmRleGVzIHwgMyk7Ci0JCQllbHNlIGlmICgoaWRlX2luZGV4ZXMgJiAzKSAhPSAzKQotCQkJCWlkeCA9IGZmeihpZGVfaW5kZXhlcyk7Ci0JCX0KKwkJaWYgKChpZGVfaW5kZXhlcyB8IDMpICE9ICgxIDw8IE1BWF9IV0lGUykgLSAxKQorCQkJaWR4ID0gZmZ6KGlkZV9pbmRleGVzIHwgMyk7CisJCWVsc2UgaWYgKChpZGVfaW5kZXhlcyAmIDMpICE9IDMpCisJCQlpZHggPSBmZnooaWRlX2luZGV4ZXMpOwogCX0KIAlpZiAoaWR4ID49IDApCiAJCWlkZV9pbmRleGVzIHw9ICgxIDw8IGlkeCk7CkBAIC0xNTQxLDggKzE1NTksNyBAQAogCW11dGV4X3VubG9jaygmaWRlX2NmZ19tdHgpOwogfQogCi1zdHJ1Y3QgaWRlX2hvc3QgKmlkZV9ob3N0X2FsbG9jX2FsbChjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKLQkJCQkgICAgaHdfcmVnc190ICoqaHdzKQorc3RydWN0IGlkZV9ob3N0ICppZGVfaG9zdF9hbGxvYyhjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwgaHdfcmVnc190ICoqaHdzKQogewogCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKIAlpbnQgaTsKQEAgLTE1NTEsNyArMTU2OCw3IEBACiAJaWYgKGhvc3QgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXSUZTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hPU1RfUE9SVFM7IGkrKykgewogCQlpZGVfaHdpZl90ICpod2lmOwogCQlpbnQgaWR4OwogCkBAIC0xNTkzLDE4ICsxNjEwLDYgQEAKIAogCXJldHVybiBob3N0OwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2hvc3RfYWxsb2NfYWxsKTsKLQotc3RydWN0IGlkZV9ob3N0ICppZGVfaG9zdF9hbGxvYyhjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwgaHdfcmVnc190ICoqaHdzKQotewotCWh3X3JlZ3NfdCAqaHdzX2FsbFtNQVhfSFdJRlNdOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKQotCQlod3NfYWxsW2ldID0gKGkgPCA0KSA/IGh3c1tpXSA6IE5VTEw7Ci0KLQlyZXR1cm4gaWRlX2hvc3RfYWxsb2NfYWxsKGQsIGh3c19hbGwpOwotfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2hvc3RfYWxsb2MpOwogCiBpbnQgaWRlX2hvc3RfcmVnaXN0ZXIoc3RydWN0IGlkZV9ob3N0ICpob3N0LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKQEAgLTE2MTMsNyArMTYxOCw3IEBACiAJaWRlX2h3aWZfdCAqaHdpZiwgKm1hdGUgPSBOVUxMOwogCWludCBpLCBqID0gMDsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfSE9TVF9QT1JUUzsgaSsrKSB7CiAJCWh3aWYgPSBob3N0LT5wb3J0c1tpXTsKIAogCQlpZiAoaHdpZiA9PSBOVUxMKSB7CkBAIC0xNjI2LDIyICsxNjMxLDIyIEBACiAKIAkJaWYgKGQgPT0gTlVMTCkgewogCQkJbWF0ZSA9IE5VTEw7Ci0JCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaSAmIDEpICYmIG1hdGUpIHsKKwkJCQlod2lmLT5tYXRlID0gbWF0ZTsKKwkJCQltYXRlLT5tYXRlID0gaHdpZjsKKwkJCX0KKworCQkJbWF0ZSA9IChpICYgMSkgPyBOVUxMIDogaHdpZjsKKworCQkJaWRlX2luaXRfcG9ydChod2lmLCBpICYgMSwgZCk7CisJCQlpZGVfcG9ydF9jYWJsZV9kZXRlY3QoaHdpZik7CiAJCX0KIAotCQlpZiAoKGkgJiAxKSAmJiBtYXRlKSB7Ci0JCQlod2lmLT5tYXRlID0gbWF0ZTsKLQkJCW1hdGUtPm1hdGUgPSBod2lmOwotCQl9Ci0KLQkJbWF0ZSA9IChpICYgMSkgPyBOVUxMIDogaHdpZjsKLQotCQlpZGVfaW5pdF9wb3J0KGh3aWYsIGkgJiAxLCBkKTsKLQkJaWRlX3BvcnRfY2FibGVfZGV0ZWN0KGh3aWYpOwogCQlpZGVfcG9ydF9pbml0X2RldmljZXMoaHdpZik7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWF9IT1NUX1BPUlRTOyBpKyspIHsKIAkJaHdpZiA9IGhvc3QtPnBvcnRzW2ldOwogCiAJCWlmIChod2lmID09IE5VTEwpCkBAIC0xNjU4LDcgKzE2NjMsNyBAQAogCQkJaWRlX3BvcnRfdHVuZV9kZXZpY2VzKGh3aWYpOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfSE9TVF9QT1JUUzsgaSsrKSB7CiAJCWh3aWYgPSBob3N0LT5wb3J0c1tpXTsKIAogCQlpZiAoaHdpZiA9PSBOVUxMKQpAQCAtMTY3MSwxMCArMTY3NiwxMyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlqKys7Ci0KIAkJaWYgKGh3aWYtPnByZXNlbnQpCi0JCQlpZGVfcG9ydF9zZXR1cF9kZXZpY2VzKGh3aWYpOworCQkJaWYgKGlkZV9wb3J0X3NldHVwX2RldmljZXMoaHdpZikgPT0gMCkgeworCQkJCWh3aWYtPnByZXNlbnQgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCWorKzsKIAogCQlpZGVfYWNwaV9pbml0KGh3aWYpOwogCkBAIC0xNjgyLDcgKzE2OTAsNyBAQAogCQkJaWRlX2FjcGlfcG9ydF9pbml0X2RldmljZXMoaHdpZik7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWF9IT1NUX1BPUlRTOyBpKyspIHsKIAkJaHdpZiA9IGhvc3QtPnBvcnRzW2ldOwogCiAJCWlmIChod2lmID09IE5VTEwpCkBAIC0xNjk1LDcgKzE3MDMsNyBAQAogCQkJaHdpZl9yZWdpc3Rlcl9kZXZpY2VzKGh3aWYpOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfSE9TVF9QT1JUUzsgaSsrKSB7CiAJCWh3aWYgPSBob3N0LT5wb3J0c1tpXTsKIAogCQlpZiAoaHdpZiA9PSBOVUxMKQpAQCAtMTc0MCw3ICsxNzQ4LDcgQEAKIAlpZGVfaHdpZl90ICpod2lmOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWF9IT1NUX1BPUlRTOyBpKyspIHsKIAkJaHdpZiA9IGhvc3QtPnBvcnRzW2ldOwogCiAJCWlmIChod2lmID09IE5VTEwpCkBAIC0xNzU4LDcgKzE3NjYsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWF9IT1NUX1BPUlRTOyBpKyspIHsKIAkJaWYgKGhvc3QtPnBvcnRzW2ldKQogCQkJaWRlX3VucmVnaXN0ZXIoaG9zdC0+cG9ydHNbaV0pOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCmluZGV4IGU3MDMwYTQuLmMzMWQwZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiAKIGlkZV9kZXZzZXRfcncoY3VycmVudF9zcGVlZCwgeGZlcl9yYXRlKTsKIGlkZV9kZXZzZXRfcndfZmllbGQoaW5pdF9zcGVlZCwgaW5pdF9zcGVlZCk7Ci1pZGVfZGV2c2V0X3J3X2ZpZWxkKG5pY2UxLCBuaWNlMSk7CitpZGVfZGV2c2V0X3J3X2ZsYWcobmljZTEsIElERV9ERkxBR19OSUNFMSk7CiBpZGVfZGV2c2V0X3J3X2ZpZWxkKG51bWJlciwgZG4pOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCBpZGVfZ2VuZXJpY19zZXR0aW5nc1tdID0gewpAQCAtNTY3LDEwICs1NjcsMTAgQEAKIHZvaWQgaWRlX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2RyaXZlcl90ICpkcml2ZXIpCiB7CiAJbXV0ZXhfbG9jaygmaWRlX3NldHRpbmdfbXR4KTsKLQlkcml2ZS0+c2V0dGluZ3MgPSBkcml2ZXItPnNldHRpbmdzOworCWRyaXZlLT5zZXR0aW5ncyA9IGRyaXZlci0+cHJvY19kZXZzZXRzKGRyaXZlKTsKIAltdXRleF91bmxvY2soJmlkZV9zZXR0aW5nX210eCk7CiAKLQlpZGVfYWRkX3Byb2NfZW50cmllcyhkcml2ZS0+cHJvYywgZHJpdmVyLT5wcm9jLCBkcml2ZSk7CisJaWRlX2FkZF9wcm9jX2VudHJpZXMoZHJpdmUtPnByb2MsIGRyaXZlci0+cHJvY19lbnRyaWVzKGRyaXZlKSwgZHJpdmUpOwogfQogCiBFWFBPUlRfU1lNQk9MKGlkZV9wcm9jX3JlZ2lzdGVyX2RyaXZlcik7CkBAIC01OTEsNyArNTkxLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWRlX3JlbW92ZV9wcm9jX2VudHJpZXMoZHJpdmUtPnByb2MsIGRyaXZlci0+cHJvYyk7CisJaWRlX3JlbW92ZV9wcm9jX2VudHJpZXMoZHJpdmUtPnByb2MsIGRyaXZlci0+cHJvY19lbnRyaWVzKGRyaXZlKSk7CiAKIAltdXRleF9sb2NrKCZpZGVfc2V0dGluZ19tdHgpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwpAQCAtNjIyLDkgKzYyMiw3IEBACiAJZm9yIChkID0gMDsgZCA8IE1BWF9EUklWRVM7IGQrKykgewogCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW2RdOwogCi0JCWlmICghZHJpdmUtPnByZXNlbnQpCi0JCQljb250aW51ZTsKLQkJaWYgKGRyaXZlLT5wcm9jKQorCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCB8fCBkcml2ZS0+cHJvYykKIAkJCWNvbnRpbnVlOwogCiAJCWRyaXZlLT5wcm9jID0gcHJvY19ta2Rpcihkcml2ZS0+bmFtZSwgcGFyZW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCmluZGV4IGY4Yzg0ZGYuLmIyYjJlNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwpAQCAtMTcyLDIzICsxNzIsMTYgQEAKIAlzdHJ1Y3Qga3JlZglrcmVmOwogCiAJLyoKLQkgKglwYyBwb2ludHMgdG8gdGhlIGN1cnJlbnQgcHJvY2Vzc2VkIHBhY2tldCBjb21tYW5kLgotCSAqCiAJICoJZmFpbGVkX3BjIHBvaW50cyB0byB0aGUgbGFzdCBmYWlsZWQgcGFja2V0IGNvbW1hbmQsIG9yIGNvbnRhaW5zCiAJICoJTlVMTCBpZiB3ZSBkbyBub3QgbmVlZCB0byByZXRyeSBhbnkgcGFja2V0IGNvbW1hbmQuIFRoaXMgaXMKIAkgKglyZXF1aXJlZCBzaW5jZSBhbiBhZGRpdGlvbmFsIHBhY2tldCBjb21tYW5kIGlzIG5lZWRlZCBiZWZvcmUgdGhlCiAJICoJcmV0cnksIHRvIGdldCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB3aGF0IHdlbnQgd3JvbmcuCiAJICovCi0JLyogQ3VycmVudCBwYWNrZXQgY29tbWFuZCAqLwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOwogCS8qIExhc3QgZmFpbGVkIHBhY2tldCBjb21tYW5kICovCiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqZmFpbGVkX3BjOwogCS8qIHVzZWQgYnkgUkVRX0lERVRBUEVfe1JFQUQsV1JJVEV9IHJlcXVlc3RzICovCiAJc3RydWN0IGlkZV9hdGFwaV9wYyBxdWV1ZWRfcGM7CiAKLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjIHJlcXVlc3Rfc2Vuc2VfcGM7Ci0Jc3RydWN0IHJlcXVlc3QgcmVxdWVzdF9zZW5zZV9ycTsKLQogCS8qCiAJICogRFNDIHBvbGxpbmcgdmFyaWFibGVzLgogCSAqCkBAIC0yNzQsMTEgKzI2Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmlkZXRhcGVfc3lzZnNfY2xhc3M7CiAKLSNkZWZpbmUgdG9faWRlX3RhcGUob2JqKSBjb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgaWRlX3RhcGVfb2JqLCBrcmVmKQotCi0jZGVmaW5lIGlkZV90YXBlX2coZGlzaykgXAotCWNvbnRhaW5lcl9vZigoZGlzayktPnByaXZhdGVfZGF0YSwgc3RydWN0IGlkZV90YXBlX29iaiwgZHJpdmVyKQotCiBzdGF0aWMgdm9pZCBpZGVfdGFwZV9yZWxlYXNlKHN0cnVjdCBrcmVmICopOwogCiBzdGF0aWMgc3RydWN0IGlkZV90YXBlX29iaiAqaWRlX3RhcGVfZ2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrKQpAQCAtMjg2LDcgKzI3NCw3IEBACiAJc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IE5VTEw7CiAKIAltdXRleF9sb2NrKCZpZGV0YXBlX3JlZl9tdXRleCk7Ci0JdGFwZSA9IGlkZV90YXBlX2coZGlzayk7CisJdGFwZSA9IGlkZV9kcnZfZyhkaXNrLCBpZGVfdGFwZV9vYmopOwogCWlmICh0YXBlKSB7CiAJCWlmIChpZGVfZGV2aWNlX2dldCh0YXBlLT5kcml2ZSkpCiAJCQl0YXBlID0gTlVMTDsKQEAgLTMxMyw4ICszMDEsNiBAQAogICovCiBzdGF0aWMgc3RydWN0IGlkZV90YXBlX29iaiAqaWRldGFwZV9kZXZzW01BWF9IV0lGUyAqIE1BWF9EUklWRVNdOwogCi0jZGVmaW5lIGlkZV90YXBlX2YoZmlsZSkgKChmaWxlKS0+cHJpdmF0ZV9kYXRhKQotCiBzdGF0aWMgc3RydWN0IGlkZV90YXBlX29iaiAqaWRlX3RhcGVfY2hyZGV2X2dldCh1bnNpZ25lZCBpbnQgaSkKIHsKIAlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlID0gTlVMTDsKQEAgLTUyMiwxNCArNTA4LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV90YXBlX2NhbGxiYWNrKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGlkZV90YXBlX2hhbmRsZV9kc2MoaWRlX2RyaXZlX3QgKik7CisKK3N0YXRpYyB2b2lkIGlkZV90YXBlX2NhbGxiYWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRzYykKIHsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IHRhcGUtPnBjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gZHJpdmUtPnBjOwogCWludCB1cHRvZGF0ZSA9IHBjLT5lcnJvciA/IDAgOiAxOwogCiAJZGVidWdfbG9nKERCR19QUk9DUywgIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7CiAKKwlpZiAoZHNjKQorCQlpZGVfdGFwZV9oYW5kbGVfZHNjKGRyaXZlKTsKKwogCWlmICh0YXBlLT5mYWlsZWRfcGMgPT0gcGMpCiAJCXRhcGUtPmZhaWxlZF9wYyA9IE5VTEw7CiAKQEAgLTU1OCw3ICs1NDksNyBAQAogCQlpZiAocGMtPmVycm9yKQogCQkJdXB0b2RhdGUgPSBwYy0+ZXJyb3I7CiAJfSBlbHNlIGlmIChwYy0+Y1swXSA9PSBSRUFEX1BPU0lUSU9OICYmIHVwdG9kYXRlKSB7Ci0JCXU4ICpyZWFkcG9zID0gdGFwZS0+cGMtPmJ1ZjsKKwkJdTggKnJlYWRwb3MgPSBwYy0+YnVmOwogCiAJCWRlYnVnX2xvZyhEQkdfU0VOU0UsICJCT1AgLSAlc1xuIiwKIAkJCQkocmVhZHBvc1swXSAmIDB4ODApID8gIlllcyIgOiAiTm8iKTsKQEAgLTU4MywzMSArNTc0LDYgQEAKIAlpZGV0YXBlX2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZXRhcGVfY3JlYXRlX3JlcXVlc3Rfc2Vuc2VfY21kKHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQotewotCWlkZV9pbml0X3BjKHBjKTsKLQlwYy0+Y1swXSA9IFJFUVVFU1RfU0VOU0U7Ci0JcGMtPmNbNF0gPSAyMDsKLQlwYy0+cmVxX3hmZXIgPSAyMDsKLX0KLQotLyoKLSAqCWlkZXRhcGVfcmV0cnlfcGMgaXMgY2FsbGVkIHdoZW4gYW4gZXJyb3Igd2FzIGRldGVjdGVkIGR1cmluZyB0aGUKLSAqCWxhc3QgcGFja2V0IGNvbW1hbmQuIFdlIHF1ZXVlIGEgcmVxdWVzdCBzZW5zZSBwYWNrZXQgY29tbWFuZCBpbgotICoJdGhlIGhlYWQgb2YgdGhlIHJlcXVlc3QgbGlzdC4KLSAqLwotc3RhdGljIHZvaWQgaWRldGFwZV9yZXRyeV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0Jc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSAmdGFwZS0+cmVxdWVzdF9zZW5zZV9ycTsKLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9ICZ0YXBlLT5yZXF1ZXN0X3NlbnNlX3BjOwotCi0JKHZvaWQpaWRlX3JlYWRfZXJyb3IoZHJpdmUpOwotCWlkZXRhcGVfY3JlYXRlX3JlcXVlc3Rfc2Vuc2VfY21kKHBjKTsKLQlzZXRfYml0KElERV9BRkxBR19JR05PUkVfRFNDLCAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKLQlpZGVfcXVldWVfcGNfaGVhZChkcml2ZSwgdGFwZS0+ZGlzaywgcGMsIHJxKTsKLX0KLQogLyoKICAqIFBvc3Rwb25lIHRoZSBjdXJyZW50IHJlcXVlc3Qgc28gdGhhdCBpZGUuYyB3aWxsIGJlIGFibGUgdG8gc2VydmljZSByZXF1ZXN0cwogICogZnJvbSBhbm90aGVyIGRldmljZSBvbiB0aGUgc2FtZSBod2dyb3VwIHdoaWxlIHdlIGFyZSBwb2xsaW5nIGZvciBEU0MuCkBAIC02NDYsMzQgKzYxMiwxOCBAQAogfQogCiAvKgotICogVGhpcyBpcyB0aGUgdXN1YWwgaW50ZXJydXB0IGhhbmRsZXIgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZHVyaW5nIGEgcGFja2V0Ci0gKiBjb21tYW5kLiBXZSB3aWxsIHRyYW5zZmVyIHNvbWUgb2YgdGhlIGRhdGEgKGFzIHJlcXVlc3RlZCBieSB0aGUgZHJpdmUpIGFuZAotICogd2lsbCByZS1wb2ludCBpbnRlcnJ1cHQgaGFuZGxlciB0byB1cy4gV2hlbiBkYXRhIHRyYW5zZmVyIGlzIGZpbmlzaGVkLCB3ZQotICogd2lsbCBhY3QgYWNjb3JkaW5nIHRvIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGJlZm9yZQotICogaWRldGFwZV9pc3N1ZV9wYy4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGV0YXBlX3BjX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCi0JcmV0dXJuIGlkZV9wY19pbnRyKGRyaXZlLCB0YXBlLT5wYywgaWRldGFwZV9wY19pbnRyLCBXQUlUX1RBUEVfQ01ELAotCQkJICAgTlVMTCwgaWRldGFwZV91cGRhdGVfYnVmZmVycywgaWRldGFwZV9yZXRyeV9wYywKLQkJCSAgIGlkZV90YXBlX2hhbmRsZV9kc2MsIGlkZV90YXBlX2lvX2J1ZmZlcnMpOwotfQotCi0vKgogICogUGFja2V0IENvbW1hbmQgSW50ZXJmYWNlCiAgKgotICogVGhlIGN1cnJlbnQgUGFja2V0IENvbW1hbmQgaXMgYXZhaWxhYmxlIGluIHRhcGUtPnBjLCBhbmQgd2lsbCBub3QgY2hhbmdlCisgKiBUaGUgY3VycmVudCBQYWNrZXQgQ29tbWFuZCBpcyBhdmFpbGFibGUgaW4gZHJpdmUtPnBjLCBhbmQgd2lsbCBub3QgY2hhbmdlCiAgKiB1bnRpbCB3ZSBmaW5pc2ggaGFuZGxpbmcgaXQuIEVhY2ggcGFja2V0IGNvbW1hbmQgaXMgYXNzb2NpYXRlZCB3aXRoIGEKICAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgY29tbWFuZCBpcyBmaW5pc2hlZC4KICAqCiAgKiBUaGUgaGFuZGxpbmcgd2lsbCBiZSBkb25lIGluIHRocmVlIHN0YWdlczoKICAqCiAgKiAxLiBpZGV0YXBlX2lzc3VlX3BjIHdpbGwgc2VuZCB0aGUgcGFja2V0IGNvbW1hbmQgdG8gdGhlIGRyaXZlLCBhbmQgd2lsbCBzZXQKLSAqIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBpZGV0YXBlX3BjX2ludHIuCisgKiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8gaWRlX3BjX2ludHIuCiAgKgotICogMi4gT24gZWFjaCBpbnRlcnJ1cHQsIGlkZXRhcGVfcGNfaW50ciB3aWxsIGJlIGNhbGxlZC4gVGhpcyBzdGVwIHdpbGwgYmUKKyAqIDIuIE9uIGVhY2ggaW50ZXJydXB0LCBpZGVfcGNfaW50ciB3aWxsIGJlIGNhbGxlZC4gVGhpcyBzdGVwIHdpbGwgYmUKICAqIHJlcGVhdGVkIHVudGlsIHRoZSBkZXZpY2Ugc2lnbmFscyB1cyB0aGF0IG5vIG1vcmUgaW50ZXJydXB0cyB3aWxsIGJlIGlzc3VlZC4KICAqCiAgKiAzLiBBVEFQSSBUYXBlIG1lZGlhIGFjY2VzcyBjb21tYW5kcyBoYXZlIGltbWVkaWF0ZSBzdGF0dXMgd2l0aCBhIGRlbGF5ZWQKQEAgLTY5NywyMCArNjQ3LDEzIEBACiAgKiBhZ2FpbiwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFuZCB0aGVuIHdlIHdpbGwgaGFuZGxlIHRoZSBuZXh0CiAgKiByZXF1ZXN0LgogICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZXRhcGVfdHJhbnNmZXJfcGMoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCi0JcmV0dXJuIGlkZV90cmFuc2Zlcl9wYyhkcml2ZSwgdGFwZS0+cGMsIGlkZXRhcGVfcGNfaW50ciwKLQkJCSAgICAgICBXQUlUX1RBUEVfQ01ELCBOVUxMKTsKLX0KIAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGV0YXBlX2lzc3VlX3BjKGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAKLQlpZiAodGFwZS0+cGMtPmNbMF0gPT0gUkVRVUVTVF9TRU5TRSAmJgorCWlmIChkcml2ZS0+cGMtPmNbMF0gPT0gUkVRVUVTVF9TRU5TRSAmJgogCSAgICBwYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaWRlLXRhcGU6IHBvc3NpYmxlIGlkZS10YXBlLmMgYnVnIC0gIgogCQkJIlR3byByZXF1ZXN0IHNlbnNlIGluIHNlcmlhbCB3ZXJlIGlzc3VlZFxuIik7CkBAIC03MTgsOCArNjYxLDkgQEAKIAogCWlmICh0YXBlLT5mYWlsZWRfcGMgPT0gTlVMTCAmJiBwYy0+Y1swXSAhPSBSRVFVRVNUX1NFTlNFKQogCQl0YXBlLT5mYWlsZWRfcGMgPSBwYzsKKwogCS8qIFNldCB0aGUgY3VycmVudCBwYWNrZXQgY29tbWFuZCAqLwotCXRhcGUtPnBjID0gcGM7CisJZHJpdmUtPnBjID0gcGM7CiAKIAlpZiAocGMtPnJldHJpZXMgPiBJREVUQVBFX01BWF9QQ19SRVRSSUVTIHx8CiAJCShwYy0+ZmxhZ3MgJiBQQ19GTEFHX0FCT1JUKSkgewpAQCAtNzQzLDE1ICs2ODcsMTQgQEAKIAkJCXBjLT5lcnJvciA9IElERVRBUEVfRVJST1JfR0VORVJBTDsKIAkJfQogCQl0YXBlLT5mYWlsZWRfcGMgPSBOVUxMOwotCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUpOworCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCWRlYnVnX2xvZyhEQkdfU0VOU0UsICJSZXRyeSAjJWQsIGNtZCA9ICUwMlhcbiIsIHBjLT5yZXRyaWVzLCBwYy0+Y1swXSk7CiAKIAlwYy0+cmV0cmllcysrOwogCi0JcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSwgcGMsIGlkZXRhcGVfdHJhbnNmZXJfcGMsCi0JCQkgICAgV0FJVF9UQVBFX0NNRCwgTlVMTCk7CisJcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSwgV0FJVF9UQVBFX0NNRCwgTlVMTCk7CiB9CiAKIC8qIEEgbW9kZSBzZW5zZSBjb21tYW5kIGlzIHVzZWQgdG8gInNlbnNlIiB0YXBlIHBhcmFtZXRlcnMuICovCkBAIC03ODUsNyArNzI4LDcgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSB0YXBlLT5wYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGRyaXZlLT5wYzsKIAl1OCBzdGF0OwogCiAJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CkBAIC03OTcsNyArNzQwLDcgQEAKIAkJCQlwcmludGsoS0VSTl9FUlIgImlkZS10YXBlOiAlczogSS9PIGVycm9yLCAiLAogCQkJCQkJdGFwZS0+bmFtZSk7CiAJCQkvKiBSZXRyeSBvcGVyYXRpb24gKi8KLQkJCWlkZXRhcGVfcmV0cnlfcGMoZHJpdmUpOworCQkJaWRlX3JldHJ5X3BjKGRyaXZlLCB0YXBlLT5kaXNrKTsKIAkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAkJfQogCQlwYy0+ZXJyb3IgPSAwOwpAQCAtODA1LDcgKzc0OCw3IEBACiAJCXBjLT5lcnJvciA9IElERVRBUEVfRVJST1JfR0VORVJBTDsKIAkJdGFwZS0+ZmFpbGVkX3BjID0gTlVMTDsKIAl9Ci0JZHJpdmUtPnBjX2NhbGxiYWNrKGRyaXZlKTsKKwlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwogCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KIApAQCAtODYyLDcgKzgwNSw3IEBACiAJfQogCiAJLyogUmV0cnkgYSBmYWlsZWQgcGFja2V0IGNvbW1hbmQgKi8KLQlpZiAodGFwZS0+ZmFpbGVkX3BjICYmIHRhcGUtPnBjLT5jWzBdID09IFJFUVVFU1RfU0VOU0UpIHsKKwlpZiAodGFwZS0+ZmFpbGVkX3BjICYmIGRyaXZlLT5wYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKSB7CiAJCXBjID0gdGFwZS0+ZmFpbGVkX3BjOwogCQlnb3RvIG91dDsKIAl9CkBAIC04ODMsMTIgKzgyNiwxMyBAQAogCSAqLwogCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCi0JaWYgKCFkcml2ZS0+ZHNjX292ZXJsYXAgJiYgIShycS0+Y21kWzEzXSAmIFJFUV9JREVUQVBFX1BDMikpCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RTQ19PVkVSTEFQKSA9PSAwICYmCisJICAgIChycS0+Y21kWzEzXSAmIFJFUV9JREVUQVBFX1BDMikgPT0gMCkKIAkJc2V0X2JpdChJREVfQUZMQUdfSUdOT1JFX0RTQywgJmRyaXZlLT5hdGFwaV9mbGFncyk7CiAKLQlpZiAoZHJpdmUtPnBvc3RfcmVzZXQgPT0gMSkgeworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BPU1RfUkVTRVQpIHsKIAkJc2V0X2JpdChJREVfQUZMQUdfSUdOT1JFX0RTQywgJmRyaXZlLT5hdGFwaV9mbGFncyk7Ci0JCWRyaXZlLT5wb3N0X3Jlc2V0ID0gMDsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BPU1RfUkVTRVQ7CiAJfQogCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSURFX0FGTEFHX0lHTk9SRV9EU0MsICZkcml2ZS0+YXRhcGlfZmxhZ3MpICYmCkBAIC0xNDExLDcgKzEzNTUsNyBAQAogCQkgKiBObyBwb2ludCBpbiBpc3N1aW5nIHRoaXMgaWYgRFNDIG92ZXJsYXAgaXNuJ3Qgc3VwcG9ydGVkLCBzb21lCiAJCSAqIGRyaXZlcyAoU2VhZ2F0ZSBTVFQzNDAxQSkgd2lsbCByZXR1cm4gYW4gZXJyb3IuCiAJCSAqLwotCQlpZiAoZHJpdmUtPmRzY19vdmVybGFwKSB7CisJCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RTQ19PVkVSTEFQKSB7CiAJCQlieXRlc19yZWFkID0gaWRldGFwZV9xdWV1ZV9yd190YWlsKGRyaXZlLAogCQkJCQkJCVJFUV9JREVUQVBFX1JFQUQsIDAsCiAJCQkJCQkJdGFwZS0+bWVyZ2VfYmgpOwpAQCAtMTU5Miw3ICsxNTM2LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGlkZXRhcGVfY2hyZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IGlkZV90YXBlX2YoZmlsZSk7CisJc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSB0YXBlLT5kcml2ZTsKIAlzc2l6ZV90IGJ5dGVzX3JlYWQsIHRlbXAsIGFjdHVhbGx5X3JlYWQgPSAwLCByYzsKIAlzc2l6ZV90IHJldCA9IDA7CkBAIC0xNjU0LDcgKzE1OTgsNyBAQAogc3RhdGljIHNzaXplX3QgaWRldGFwZV9jaHJkZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlID0gaWRlX3RhcGVfZihmaWxlKTsKKwlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlkZV9kcml2ZV90ICpkcml2ZSA9IHRhcGUtPmRyaXZlOwogCXNzaXplX3QgYWN0dWFsbHlfd3JpdHRlbiA9IDA7CiAJc3NpemVfdCByZXQgPSAwOwpAQCAtMTY4Nyw3ICsxNjMxLDcgQEAKIAkJICogcG9pbnQgaW4gaXNzdWluZyB0aGlzIGlmIERTQyBvdmVybGFwIGlzbid0IHN1cHBvcnRlZCwgc29tZQogCQkgKiBkcml2ZXMgKFNlYWdhdGUgU1RUMzQwMUEpIHdpbGwgcmV0dXJuIGFuIGVycm9yLgogCQkgKi8KLQkJaWYgKGRyaXZlLT5kc2Nfb3ZlcmxhcCkgeworCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19EU0NfT1ZFUkxBUCkgewogCQkJc3NpemVfdCByZXR2YWwgPSBpZGV0YXBlX3F1ZXVlX3J3X3RhaWwoZHJpdmUsCiAJCQkJCQkJUkVRX0lERVRBUEVfV1JJVEUsIDAsCiAJCQkJCQkJdGFwZS0+bWVyZ2VfYmgpOwpAQCAtMTg4Niw3ICsxODMwLDcgQEAKIHN0YXRpYyBpbnQgaWRldGFwZV9jaHJkZXZfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IGlkZV90YXBlX2YoZmlsZSk7CisJc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSB0YXBlLT5kcml2ZTsKIAlzdHJ1Y3QgbXRvcCBtdG9wOwogCXN0cnVjdCBtdGdldCBtdGdldDsKQEAgLTIwNjMsNyArMjAwNyw3IEBACiAKIHN0YXRpYyBpbnQgaWRldGFwZV9jaHJkZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlID0gaWRlX3RhcGVfZihmaWxwKTsKKwlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWlkZV9kcml2ZV90ICpkcml2ZSA9IHRhcGUtPmRyaXZlOwogCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CiAKQEAgLTIxNjQsNyArMjEwOCw3IEBACiAKIAkvKiBkZXZpY2UgbGFja3MgbG9ja2luZyBzdXBwb3J0IGFjY29yZGluZyB0byBjYXBhYmlsaXRpZXMgcGFnZSAqLwogCWlmICgoY2Fwc1s2XSAmIDEpID09IDApCi0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTk9fRE9PUkxPQ0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKIAogCWlmIChjYXBzWzddICYgMHgwMikKIAkJdGFwZS0+YmxrX3NpemUgPSA1MTI7CkBAIC0yMjAyLDcgKzIxNDYsNyBAQAogc3RhdGljIGludCBkaXZmX2J1ZmZlcihpZGVfZHJpdmVfdCAqZHJpdmUpCXsgcmV0dXJuICAgIDI7IH0KIHN0YXRpYyBpbnQgZGl2Zl9idWZmZXJfc2l6ZShpZGVfZHJpdmVfdCAqZHJpdmUpCXsgcmV0dXJuIDEwMjQ7IH0KIAotaWRlX2RldnNldF9yd19maWVsZChkc2Nfb3ZlcmxhcCwgZHNjX292ZXJsYXApOworaWRlX2RldnNldF9yd19mbGFnKGRzY19vdmVybGFwLCBJREVfREZMQUdfRFNDX09WRVJMQVApOwogCiBpZGVfdGFwZV9kZXZzZXRfcndfZmllbGQoZGVidWdfbWFzaywgZGVidWdfbWFzayk7CiBpZGVfdGFwZV9kZXZzZXRfcndfZmllbGQodGRzYywgYmVzdF9kc2NfcndfZnJlcSk7CkBAIC0yMjQxLDMzICsyMTg1LDMyIEBACiAJdW5zaWduZWQgbG9uZyB0OwogCWludCBzcGVlZDsKIAlpbnQgYnVmZmVyX3NpemU7Ci0JdTggZ2N3WzJdOwogCXUxNiAqY3RsID0gKHUxNiAqKSZ0YXBlLT5jYXBzWzEyXTsKIAotCWRyaXZlLT5wY19jYWxsYmFjayA9IGlkZV90YXBlX2NhbGxiYWNrOworCWRyaXZlLT5wY19jYWxsYmFjawkgPSBpZGVfdGFwZV9jYWxsYmFjazsKKwlkcml2ZS0+cGNfdXBkYXRlX2J1ZmZlcnMgPSBpZGV0YXBlX3VwZGF0ZV9idWZmZXJzOworCWRyaXZlLT5wY19pb19idWZmZXJzCSA9IGlkZV90YXBlX2lvX2J1ZmZlcnM7CiAKIAlzcGluX2xvY2tfaW5pdCgmdGFwZS0+bG9jayk7Ci0JZHJpdmUtPmRzY19vdmVybGFwID0gMTsKKworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0RTQ19PVkVSTEFQOworCiAJaWYgKGRyaXZlLT5od2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0RTQykgewogCQlwcmludGsoS0VSTl9JTkZPICJpZGUtdGFwZTogJXM6IGRpc2FibGluZyBEU0Mgb3ZlcmxhcFxuIiwKIAkJCQkgdGFwZS0+bmFtZSk7Ci0JCWRyaXZlLT5kc2Nfb3ZlcmxhcCA9IDA7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19EU0NfT1ZFUkxBUDsKIAl9CisKIAkvKiBTZWFnYXRlIFRyYXZhbiBkcml2ZXMgZG8gbm90IHN1cHBvcnQgRFNDIG92ZXJsYXAuICovCiAJaWYgKHN0cnN0cigoY2hhciAqKSZkcml2ZS0+aWRbQVRBX0lEX1BST0RdLCAiU2VhZ2F0ZSBTVFQzNDAxIikpCi0JCWRyaXZlLT5kc2Nfb3ZlcmxhcCA9IDA7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19EU0NfT1ZFUkxBUDsKKwogCXRhcGUtPm1pbm9yID0gbWlub3I7CiAJdGFwZS0+bmFtZVswXSA9ICdoJzsKIAl0YXBlLT5uYW1lWzFdID0gJ3QnOwogCXRhcGUtPm5hbWVbMl0gPSAnMCcgKyBtaW5vcjsKIAl0YXBlLT5jaHJkZXZfZGlyID0gSURFVEFQRV9ESVJfTk9ORTsKIAotCSooKHUxNiAqKSZnY3cpID0gZHJpdmUtPmlkW0FUQV9JRF9DT05GSUddOwotCi0JLyogQ29tbWFuZCBwYWNrZXQgRFJRIHR5cGUgKi8KLQlpZiAoKChnY3dbMF0gJiAweDYwKSA+PiA1KSA9PSAxKQotCQlzZXRfYml0KElERV9BRkxBR19EUlFfSU5URVJSVVBULCAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKLQogCWlkZXRhcGVfZ2V0X2lucXVpcnlfcmVzdWx0cyhkcml2ZSk7CiAJaWRldGFwZV9nZXRfbW9kZV9zZW5zZV9yZXN1bHRzKGRyaXZlKTsKIAlpZGVfdGFwZV9nZXRfYnNpemVfZnJvbV9iZGVzYyhkcml2ZSk7CkBAIC0yMzAyLDcgKzIyNDUsNyBAQAogCQkoKih1MTYgKikmdGFwZS0+Y2Fwc1sxNl0gKiA1MTIpIC8gdGFwZS0+YnVmZmVyX3NpemUsCiAJCXRhcGUtPmJ1ZmZlcl9zaXplIC8gMTAyNCwKIAkJdGFwZS0+YmVzdF9kc2NfcndfZnJlcSAqIDEwMDAgLyBIWiwKLQkJZHJpdmUtPnVzaW5nX2RtYSA/ICIsIERNQSI6IiIpOworCQkoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpID8gIiwgRE1BIiA6ICIiKTsKIAogCWlkZV9wcm9jX3JlZ2lzdGVyX2RyaXZlcihkcml2ZSwgdGFwZS0+ZHJpdmVyKTsKIH0KQEAgLTIzMjAsMTMgKzIyNjMsMTMgQEAKIAogc3RhdGljIHZvaWQgaWRlX3RhcGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKLQlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlID0gdG9faWRlX3RhcGUoa3JlZik7CisJc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IHRvX2lkZV9kcnYoa3JlZiwgaWRlX3RhcGVfb2JqKTsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSB0YXBlLT5kcml2ZTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZyA9IHRhcGUtPmRpc2s7CiAKIAlCVUdfT04odGFwZS0+bWVyZ2VfYmhfc2l6ZSk7CiAKLQlkcml2ZS0+ZHNjX292ZXJsYXAgPSAwOworCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19EU0NfT1ZFUkxBUDsKIAlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwogCWRldmljZV9kZXN0cm95KGlkZXRhcGVfc3lzZnNfY2xhc3MsIE1LREVWKElERVRBUEVfTUFKT1IsIHRhcGUtPm1pbm9yKSk7CiAJZGV2aWNlX2Rlc3Ryb3koaWRldGFwZV9zeXNmc19jbGFzcywKQEAgLTIzNTUsNiArMjI5OCwxNiBAQAogCXsgIm5hbWUiLAlTX0lGUkVHfFNfSVJVR08sCXByb2NfaWRldGFwZV9yZWFkX25hbWUsCU5VTEwgfSwKIAl7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfQogfTsKKworc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgKmlkZV90YXBlX3Byb2NfZW50cmllcyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIGlkZXRhcGVfcHJvYzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgKmlkZV90YXBlX3Byb2NfZGV2c2V0cyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIGlkZXRhcGVfc2V0dGluZ3M7Cit9CiAjZW5kaWYKIAogc3RhdGljIGludCBpZGVfdGFwZV9wcm9iZShpZGVfZHJpdmVfdCAqKTsKQEAgLTIzNjgsMTMgKzIzMjEsMTIgQEAKIAkucHJvYmUJCQk9IGlkZV90YXBlX3Byb2JlLAogCS5yZW1vdmUJCQk9IGlkZV90YXBlX3JlbW92ZSwKIAkudmVyc2lvbgkJPSBJREVUQVBFX1ZFUlNJT04sCi0JLm1lZGlhCQkJPSBpZGVfdGFwZSwKIAkuZG9fcmVxdWVzdAkJPSBpZGV0YXBlX2RvX3JlcXVlc3QsCiAJLmVuZF9yZXF1ZXN0CQk9IGlkZXRhcGVfZW5kX3JlcXVlc3QsCiAJLmVycm9yCQkJPSBfX2lkZV9lcnJvciwKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLQkucHJvYwkJCT0gaWRldGFwZV9wcm9jLAotCS5zZXR0aW5ncwkJPSBpZGV0YXBlX3NldHRpbmdzLAorCS5wcm9jX2VudHJpZXMJCT0gaWRlX3RhcGVfcHJvY19lbnRyaWVzLAorCS5wcm9jX2RldnNldHMJCT0gaWRlX3RhcGVfcHJvY19kZXZzZXRzLAogI2VuZGlmCiB9OwogCkBAIC0yNDAzLDcgKzIzNTUsNyBAQAogc3RhdGljIGludCBpZGV0YXBlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBpZGVfdGFwZV9nKGRpc2spOworCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBpZGVfZHJ2X2coZGlzaywgaWRlX3RhcGVfb2JqKTsKIAogCWlkZV90YXBlX3B1dCh0YXBlKTsKIApAQCAtMjQxNCw3ICsyMzY2LDcgQEAKIAkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBpbm9kZS0+aV9iZGV2OwotCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBpZGVfdGFwZV9nKGJkZXYtPmJkX2Rpc2spOworCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBpZGVfZHJ2X2coYmRldi0+YmRfZGlzaywgaWRlX3RhcGVfb2JqKTsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSB0YXBlLT5kcml2ZTsKIAlpbnQgZXJyID0gZ2VuZXJpY19pZGVfaW9jdGwoZHJpdmUsIGZpbGUsIGJkZXYsIGNtZCwgYXJnKTsKIAlpZiAoZXJyID09IC1FSU5WQUwpCkBAIC0yNDQxLDcgKzIzOTMsOCBAQAogCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX3RhcGUpCiAJCWdvdG8gZmFpbGVkOwogCi0JaWYgKGRyaXZlLT5pZF9yZWFkID09IDEgJiYgIWlkZV9jaGVja19hdGFwaV9kZXZpY2UoZHJpdmUsIERSVl9OQU1FKSkgeworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19JRF9SRUFEKSAmJgorCSAgICBpZGVfY2hlY2tfYXRhcGlfZGV2aWNlKGRyaXZlLCBEUlZfTkFNRSkgPT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgImlkZS10YXBlOiAlczogbm90IHN1cHBvcnRlZCBieSB0aGlzIHZlcnNpb24gb2YiCiAJCQkJIiB0aGUgZHJpdmVyXG4iLCBkcml2ZS0+bmFtZSk7CiAJCWdvdG8gZmFpbGVkOwpAQCAtMjQ3NywxMiArMjQzMCwxMSBAQAogCiAJaWRldGFwZV9zZXR1cChkcml2ZSwgdGFwZSwgbWlub3IpOwogCi0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGlkZXRhcGVfc3lzZnNfY2xhc3MsICZkcml2ZS0+Z2VuZGV2LAotCQkJICAgICAgTUtERVYoSURFVEFQRV9NQUpPUiwgbWlub3IpLCBOVUxMLAotCQkJICAgICAgIiVzIiwgdGFwZS0+bmFtZSk7Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGlkZXRhcGVfc3lzZnNfY2xhc3MsICZkcml2ZS0+Z2VuZGV2LAotCQkJICAgICAgTUtERVYoSURFVEFQRV9NQUpPUiwgbWlub3IgKyAxMjgpLCBOVUxMLAotCQkJICAgICAgIm4lcyIsIHRhcGUtPm5hbWUpOworCWRldmljZV9jcmVhdGUoaWRldGFwZV9zeXNmc19jbGFzcywgJmRyaXZlLT5nZW5kZXYsCisJCSAgICAgIE1LREVWKElERVRBUEVfTUFKT1IsIG1pbm9yKSwgTlVMTCwgIiVzIiwgdGFwZS0+bmFtZSk7CisJZGV2aWNlX2NyZWF0ZShpZGV0YXBlX3N5c2ZzX2NsYXNzLCAmZHJpdmUtPmdlbmRldiwKKwkJICAgICAgTUtERVYoSURFVEFQRV9NQUpPUiwgbWlub3IgKyAxMjgpLCBOVUxMLAorCQkgICAgICAibiVzIiwgdGFwZS0+bmFtZSk7CiAKIAlnLT5mb3BzID0gJmlkZXRhcGVfYmxvY2tfb3BzOwogCWlkZV9yZWdpc3Rlcl9yZWdpb24oZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCmluZGV4IDQ4N2IxOGIuLmJmNGZiOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCkBAIC01Myw5ICs1Myw2IEBACiB9CiAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19ub19kYXRhX2ludHIoaWRlX2RyaXZlX3QgKik7Ci1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHNldF9nZW9tZXRyeV9pbnRyKGlkZV9kcml2ZV90ICopOwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCByZWNhbF9pbnRyKGlkZV9kcml2ZV90ICopOwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBzZXRfbXVsdG1vZGVfaW50cihpZGVfZHJpdmVfdCAqKTsKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcHJlX3Rhc2tfb3V0X2ludHIoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfaW5faW50cihpZGVfZHJpdmVfdCAqKTsKIApAQCAtNzksNiArNzYsOCBAQAogCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQogCQl0YXNrLT50Zl9mbGFncyB8PSBJREVfVEZMQUdfRkxBR0dFRF9TRVRfSU5fRkxBR1M7CiAKKwltZW1jcHkoJmh3aWYtPnRhc2ssIHRhc2ssIHNpemVvZigqdGFzaykpOworCiAJaWYgKCh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19ETUFfUElPX0ZBTExCQUNLKSA9PSAwKSB7CiAJCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCB0Zik7CiAJCXRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKQEAgLTk5LDI0ICs5OCwxMiBAQAogCWNhc2UgVEFTS0ZJTEVfTk9fREFUQToKIAkJaWYgKGhhbmRsZXIgPT0gTlVMTCkKIAkJCWhhbmRsZXIgPSB0YXNrX25vX2RhdGFfaW50cjsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSKSB7Ci0JCQlzd2l0Y2ggKHRmLT5jb21tYW5kKSB7Ci0JCQljYXNlIEFUQV9DTURfSU5JVF9ERVZfUEFSQU1TOgotCQkJCWhhbmRsZXIgPSBzZXRfZ2VvbWV0cnlfaW50cjsKLQkJCQlicmVhazsKLQkJCWNhc2UgQVRBX0NNRF9SRVNUT1JFOgotCQkJCWhhbmRsZXIgPSByZWNhbF9pbnRyOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBVEFfQ01EX1NFVF9NVUxUSToKLQkJCQloYW5kbGVyID0gc2V0X211bHRtb2RlX2ludHI7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KIAkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgdGYtPmNvbW1hbmQsIGhhbmRsZXIsCiAJCQkJICAgIFdBSVRfV09SU1RDQVNFLCBOVUxMKTsKIAkJcmV0dXJuIGlkZV9zdGFydGVkOwogCWRlZmF1bHQ6Ci0JCWlmIChkcml2ZS0+dXNpbmdfZG1hID09IDAgfHwgZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlKSkKKwkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCB8fAorCQkgICAgZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlKSkKIAkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAkJZG1hX29wcy0+ZG1hX2V4ZWNfY21kKGRyaXZlLCB0Zi0+Y29tbWFuZCk7CiAJCWRtYV9vcHMtPmRtYV9zdGFydChkcml2ZSk7CkBAIC0xMjYsMzMgKzExMywxNSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZG9fcndfdGFza2ZpbGUpOwogCiAvKgotICogc2V0X211bHRtb2RlX2ludHIoKSBpcyBpbnZva2VkIG9uIGNvbXBsZXRpb24gb2YgYSBBVEFfQ01EX1NFVF9NVUxUSSBjbWQuCisgKiBIYW5kbGVyIGZvciBjb21tYW5kcyB3aXRob3V0IGEgZGF0YSBwaGFzZQogICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHNldF9tdWx0bW9kZV9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19ub19kYXRhX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1OCBzdGF0OwotCi0JbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7Ci0Jc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoT0tfU1RBVChzdGF0LCBBVEFfRFJEWSwgQkFEX1NUQVQpKQotCQlkcml2ZS0+bXVsdF9jb3VudCA9IGRyaXZlLT5tdWx0X3JlcTsKLQllbHNlIHsKLQkJZHJpdmUtPm11bHRfcmVxID0gZHJpdmUtPm11bHRfY291bnQgPSAwOwotCQlkcml2ZS0+c3BlY2lhbC5iLnJlY2FsaWJyYXRlID0gMTsKLQkJKHZvaWQpIGlkZV9kdW1wX3N0YXR1cyhkcml2ZSwgInNldF9tdWx0bW9kZSIsIHN0YXQpOwotCX0KLQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci19Ci0KLS8qCi0gKiBzZXRfZ2VvbWV0cnlfaW50cigpIGlzIGludm9rZWQgb24gY29tcGxldGlvbiBvZiBhIEFUQV9DTURfSU5JVF9ERVZfUEFSQU1TIGNtZC4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBzZXRfZ2VvbWV0cnlfaW50cihpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWludCByZXRyaWVzID0gNTsKKwlpZGVfdGFza190ICp0YXNrID0gJmh3aWYtPnRhc2s7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisJaW50IGN1c3RvbSA9ICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19DVVNUT01fSEFORExFUikgPyAxIDogMDsKKwlpbnQgcmV0cmllcyA9IChjdXN0b20gJiYgdGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpID8gNSA6IDE7CiAJdTggc3RhdDsKIAogCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwpAQCAtMTY0LDUwICsxMzMsMzYgQEAKIAkJdWRlbGF5KDEwKTsKIAl9OwogCi0JaWYgKE9LX1NUQVQoc3RhdCwgQVRBX0RSRFksIEJBRF9TVEFUKSkKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCi0JaWYgKHN0YXQgJiAoQVRBX0VSUiB8IEFUQV9EUlEpKQotCQlyZXR1cm4gaWRlX2Vycm9yKGRyaXZlLCAic2V0X2dlb21ldHJ5X2ludHIiLCBzdGF0KTsKLQotCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnNldF9nZW9tZXRyeV9pbnRyLCBXQUlUX1dPUlNUQ0FTRSwgTlVMTCk7Ci0JcmV0dXJuIGlkZV9zdGFydGVkOwotfQotCi0vKgotICogcmVjYWxfaW50cigpIGlzIGludm9rZWQgb24gY29tcGxldGlvbiBvZiBhIEFUQV9DTURfUkVTVE9SRSAocmVjYWxpYnJhdGUpIGNtZC4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCByZWNhbF9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTggc3RhdDsKLQotCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwotCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKCFPS19TVEFUKHN0YXQsIEFUQV9EUkRZLCBCQURfU1RBVCkpCi0JCXJldHVybiBpZGVfZXJyb3IoZHJpdmUsICJyZWNhbF9pbnRyIiwgc3RhdCk7Ci0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi0vKgotICogSGFuZGxlciBmb3IgY29tbWFuZHMgd2l0aG91dCBhIGRhdGEgcGhhc2UKLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX25vX2RhdGFfaW50cihpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWlkZV90YXNrX3QgKmFyZ3MgPSBod2lmLT5od2dyb3VwLT5ycS0+c3BlY2lhbDsKLQl1OCBzdGF0OwotCi0JbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCk7Ci0Jc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0KLQlpZiAoIU9LX1NUQVQoc3RhdCwgQVRBX0RSRFksIEJBRF9TVEFUKSkKKwlpZiAoIU9LX1NUQVQoc3RhdCwgQVRBX0RSRFksIEJBRF9TVEFUKSkgeworCQlpZiAoY3VzdG9tICYmIHRmLT5jb21tYW5kID09IEFUQV9DTURfU0VUX01VTFRJKSB7CisJCQlkcml2ZS0+bXVsdF9yZXEgPSBkcml2ZS0+bXVsdF9jb3VudCA9IDA7CisJCQlkcml2ZS0+c3BlY2lhbC5iLnJlY2FsaWJyYXRlID0gMTsKKwkJCSh2b2lkKWlkZV9kdW1wX3N0YXR1cyhkcml2ZSwgX19mdW5jX18sIHN0YXQpOworCQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQl9IGVsc2UgaWYgKGN1c3RvbSAmJiB0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUykgeworCQkJaWYgKChzdGF0ICYgKEFUQV9FUlIgfCBBVEFfRFJRKSkgPT0gMCkgeworCQkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnRhc2tfbm9fZGF0YV9pbnRyLAorCQkJCQkJV0FJVF9XT1JTVENBU0UsIE5VTEwpOworCQkJCXJldHVybiBpZGVfc3RhcnRlZDsKKwkJCX0KKwkJfQogCQlyZXR1cm4gaWRlX2Vycm9yKGRyaXZlLCAidGFza19ub19kYXRhX2ludHIiLCBzdGF0KTsKIAkJLyogY2FsbHMgaWRlX2VuZF9kcml2ZV9jbWQgKi8KKwl9CiAKLQlpZiAoYXJncykKKwlpZiAoIWN1c3RvbSkKIAkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGlkZV9yZWFkX2Vycm9yKGRyaXZlKSk7CisJZWxzZSBpZiAodGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9JRExFSU1NRURJQVRFKSB7CisJCWh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgdGFzayk7CisJCWlmICh0Zi0+bGJhbCAhPSAweGM0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBoZWFkIHVubG9hZCBmYWlsZWQhXG4iLAorCQkJICAgICAgIGRyaXZlLT5uYW1lKTsKKwkJCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCB0Zik7CisJCX0gZWxzZQorCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUEFSS0VEOworCQlpZGVfZW5kX2RyaXZlX2NtZChkcml2ZSwgc3RhdCwgaWRlX3JlYWRfZXJyb3IoZHJpdmUpKTsKKwl9IGVsc2UgaWYgKHRmLT5jb21tYW5kID09IEFUQV9DTURfU0VUX01VTFRJKQorCQlkcml2ZS0+bXVsdF9jb3VudCA9IGRyaXZlLT5tdWx0X3JlcTsKIAogCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KQEAgLTQ2OSwxMyArNDI0LDEyIEBACiAJaWYgKGlkZV93YWl0X3N0YXQoJnN0YXJ0c3RvcCwgZHJpdmUsIEFUQV9EUlEsCiAJCQkgIGRyaXZlLT5iYWRfd3N0YXQsIFdBSVRfRFJRKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBEUlEgYWZ0ZXIgaXNzdWluZyAlc1dSSVRFJXNcbiIsCi0JCQkJZHJpdmUtPm5hbWUsCi0JCQkJZHJpdmUtPmh3aWYtPmRhdGFfcGhhc2UgPyAiTVVMVCIgOiAiIiwKLQkJCQlkcml2ZS0+YWRkcmVzc2luZyA/ICJfRVhUIiA6ICIiKTsKKwkJCWRyaXZlLT5uYW1lLCBkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSA/ICJNVUxUIiA6ICIiLAorCQkJKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpID8gIl9FWFQiIDogIiIpOwogCQlyZXR1cm4gc3RhcnRzdG9wOwogCX0KIAotCWlmICghZHJpdmUtPnVubWFzaykKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVU5NQVNLKSA9PSAwKQogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCiAJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmdGFza19vdXRfaW50ciwgV0FJVF9XT1JTVENBU0UsIE5VTEwpOwpAQCAtNTkxLDcgKzU0NSw3IEBACiAKIAlhcmdzLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lPXzE2QklUIHwgSURFX1RGTEFHX0RFVklDRSB8CiAJCQlJREVfVEZMQUdfSU5fVEY7Ci0JaWYgKGRyaXZlLT5hZGRyZXNzaW5nID09IDEpCisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpCiAJCWFyZ3MudGZfZmxhZ3MgfD0gKElERV9URkxBR19MQkE0OCB8IElERV9URkxBR19JTl9IT0IpOwogCiAJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYWxsKSB7CkBAIC02OTQsNyArNjQ4LDcgQEAKIAlpZiAoKGFyZ3MudGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRF9TRVRfSU5fRkxBR1MpICYmCiAJICAgIHJlcV90YXNrLT5pbl9mbGFncy5hbGwgPT0gMCkgewogCQlyZXFfdGFzay0+aW5fZmxhZ3MuYWxsID0gSURFX1RBU0tGSUxFX1NURF9JTl9GTEFHUzsKLQkJaWYgKGRyaXZlLT5hZGRyZXNzaW5nID09IDEpCisJCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KQogCQkJcmVxX3Rhc2stPmluX2ZsYWdzLmFsbCB8PSAoSURFX0hPQl9TVERfSU5fRkxBR1MgPDwgOCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUuYyBiL2RyaXZlcnMvaWRlL2lkZS5jCmluZGV4IDlkY2Y1YWUuLjA0ZjhmMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIAkJbWVtc2V0KGRyaXZlLCAwLCBzaXplb2YoKmRyaXZlKSk7CiAKIAkJZHJpdmUtPm1lZGlhCQkJPSBpZGVfZGlzazsKLQkJZHJpdmUtPnNlbGVjdC5hbGwJCT0gKHVuaXQ8PDQpfDB4YTA7CisJCWRyaXZlLT5zZWxlY3QJCQk9ICh1bml0IDw8IDQpIHwgQVRBX0RFVklDRV9PQlM7CiAJCWRyaXZlLT5od2lmCQkJPSBod2lmOwogCQlkcml2ZS0+cmVhZHlfc3RhdAkJPSBBVEFfRFJEWTsKIAkJZHJpdmUtPmJhZF93c3RhdAkJPSBCQURfV19TVEFUOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWF9EUklWRVM7IGkrKykgewogCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW2ldOwogCi0JCWlmIChkcml2ZS0+cHJlc2VudCkgeworCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSB7CiAJCQlzcGluX3VubG9ja19pcnEoJmlkZV9sb2NrKTsKIAkJCWRldmljZV91bnJlZ2lzdGVyKCZkcml2ZS0+Z2VuZGV2KTsKIAkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRyaXZlLT5nZW5kZXZfcmVsX2NvbXApOwpAQCAtMjI3LDggKzIyNyw3IEBACiAJa2ZyZWUoaHdpZi0+c2dfdGFibGUpOwogCXVucmVnaXN0ZXJfYmxrZGV2KGh3aWYtPm1ham9yLCBod2lmLT5uYW1lKTsKIAotCWlmIChod2lmLT5kbWFfYmFzZSkKLQkJaWRlX3JlbGVhc2VfZG1hX2VuZ2luZShod2lmKTsKKwlpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGh3aWYpOwogCiAJbXV0ZXhfdW5sb2NrKCZpZGVfY2ZnX210eCk7CiB9CkBAIC0yNTQsNyArMjUzLDcgQEAKIAogc3RhdGljIGludCBzZXRfaW9fMzJiaXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQogewotCWlmIChkcml2ZS0+bm9faW9fMzJiaXQpCisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9fSU9fMzJCSVQpCiAJCXJldHVybiAtRVBFUk07CiAKIAlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxICsgKFNVUFBPUlRfVkxCX1NZTkMgPDwgMSkpCkBAIC0yNjUsMTkgKzI2NCwyMiBAQAogCXJldHVybiAwOwogfQogCi1pZGVfZGV2c2V0X2dldChrc2V0dGluZ3MsIGtlZXBfc2V0dGluZ3MpOworaWRlX2RldnNldF9nZXRfZmxhZyhrc2V0dGluZ3MsIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKTsKIAogc3RhdGljIGludCBzZXRfa3NldHRpbmdzKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKIHsKIAlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRyaXZlLT5rZWVwX3NldHRpbmdzID0gYXJnOworCWlmIChhcmcpCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0tFRVBfU0VUVElOR1M7CisJZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfS0VFUF9TRVRUSU5HUzsKIAogCXJldHVybiAwOwogfQogCi1pZGVfZGV2c2V0X2dldCh1c2luZ19kbWEsIHVzaW5nX2RtYSk7CitpZGVfZGV2c2V0X2dldF9mbGFnKHVzaW5nX2RtYSwgSURFX0RGTEFHX1VTSU5HX0RNQSk7CiAKIHN0YXRpYyBpbnQgc2V0X3VzaW5nX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCiB7CkBAIC0zMTEsOSArMzEzLDMyIEBACiAjZW5kaWYKIH0KIAorLyoKKyAqIGhhbmRsZSBIRElPX1NFVF9QSU9fTU9ERSBpb2N0bCBhYnVzZXJzIGhlcmUsIGV2ZW50dWFsbHkgaXQgd2lsbCBnbyBhd2F5CisgKi8KK3N0YXRpYyBpbnQgc2V0X3Bpb19tb2RlX2FidXNlKGlkZV9od2lmX3QgKmh3aWYsIHU4IHJlcV9waW8pCit7CisJc3dpdGNoIChyZXFfcGlvKSB7CisJY2FzZSAyMDI6CisJY2FzZSAyMDE6CisJY2FzZSAyMDA6CisJY2FzZSAxMDI6CisJY2FzZSAxMDE6CisJY2FzZSAxMDA6CisJCXJldHVybiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9ETUFfTU9ERVMpID8gMSA6IDA7CisJY2FzZSA5OgorCWNhc2UgODoKKwkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX1BSRUZFVENIKSA/IDEgOiAwOworCWNhc2UgNzoKKwljYXNlIDY6CisJCXJldHVybiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9GQVNUX0RFVlNFTCkgPyAxIDogMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKIHN0YXRpYyBpbnQgc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKIHsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CiAKQEAgLTMyNCw1NiArMzQ5LDY1IEBACiAJICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKSkKIAkJcmV0dXJuIC1FTk9TWVM7CiAKLQlpZiAoZHJpdmUtPnNwZWNpYWwuYi5zZXRfdHVuZSkKLQkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoc2V0X3Bpb19tb2RlX2FidXNlKGRyaXZlLT5od2lmLCBhcmcpKSB7CisJCWlmIChhcmcgPT0gOCB8fCBhcmcgPT0gOSkgeworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXJxID0gYmxrX2dldF9yZXF1ZXN0KGRyaXZlLT5xdWV1ZSwgUkVBRCwgX19HRlBfV0FJVCk7Ci0JcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFOworCQkJLyogdGFrZSBsb2NrIGZvciBJREVfREZMQUdfW05PX11VTk1BU0svW05PX11JT18zMkJJVCAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CisJCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBhcmcpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwkJfSBlbHNlCisJCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBhcmcpOworCX0gZWxzZSB7CisJCWludCBrZWVwX2RtYSA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKTsKIAotCWRyaXZlLT50dW5lX3JlcSA9ICh1OCkgYXJnOwotCWRyaXZlLT5zcGVjaWFsLmIuc2V0X3R1bmUgPSAxOworCQlpZGVfc2V0X3Bpbyhkcml2ZSwgYXJnKTsKIAotCWJsa19leGVjdXRlX3JxKGRyaXZlLT5xdWV1ZSwgTlVMTCwgcnEsIDApOwotCWJsa19wdXRfcmVxdWVzdChycSk7CisJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NFVF9QSU9fTU9ERV9LRUVQX0RNQSkgeworCQkJaWYgKGtlZXBfZG1hKQorCQkJCWlkZV9kbWFfb24oZHJpdmUpOworCQl9CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKLWlkZV9kZXZzZXRfZ2V0KHVubWFza2lycSwgdW5tYXNrKTsKK2lkZV9kZXZzZXRfZ2V0X2ZsYWcodW5tYXNraXJxLCBJREVfREZMQUdfVU5NQVNLKTsKIAogc3RhdGljIGludCBzZXRfdW5tYXNraXJxKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKIHsKLQlpZiAoZHJpdmUtPm5vX3VubWFzaykKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19VTk1BU0spCiAJCXJldHVybiAtRVBFUk07CiAKIAlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRyaXZlLT51bm1hc2sgPSBhcmc7CisJaWYgKGFyZykKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfVU5NQVNLOworCWVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VOTUFTSzsKIAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIGlkZV9nZW5fZGV2c2V0X3J3KF9uYW1lLCBfZnVuYykgXAotX19JREVfREVWU0VUKF9uYW1lLCBEU19TWU5DLCBnZXRfIyNfZnVuYywgc2V0XyMjX2Z1bmMpCi0KLWlkZV9nZW5fZGV2c2V0X3J3KGlvXzMyYml0LCBpb18zMmJpdCk7Ci1pZGVfZ2VuX2RldnNldF9ydyhrZWVwc2V0dGluZ3MsIGtzZXR0aW5ncyk7Ci1pZGVfZ2VuX2RldnNldF9ydyh1bm1hc2tpcnEsIHVubWFza2lycSk7Ci1pZGVfZ2VuX2RldnNldF9ydyh1c2luZ19kbWEsIHVzaW5nX2RtYSk7Ci1fX0lERV9ERVZTRVQocGlvX21vZGUsIDAsIE5VTEwsIHNldF9waW9fbW9kZSk7CitpZGVfZXh0X2RldnNldF9yd19zeW5jKGlvXzMyYml0LCBpb18zMmJpdCk7CitpZGVfZXh0X2RldnNldF9yd19zeW5jKGtlZXBzZXR0aW5ncywga3NldHRpbmdzKTsKK2lkZV9leHRfZGV2c2V0X3J3X3N5bmModW5tYXNraXJxLCB1bm1hc2tpcnEpOworaWRlX2V4dF9kZXZzZXRfcndfc3luYyh1c2luZ19kbWEsIHVzaW5nX2RtYSk7CitfX0lERV9ERVZTRVQocGlvX21vZGUsIERTX1NZTkMsIE5VTEwsIHNldF9waW9fbW9kZSk7CiAKIHN0YXRpYyBpbnQgZ2VuZXJpY19pZGVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGRldi0+ZHJpdmVyX2RhdGE7CisJaWRlX2RyaXZlX3QgKmRyaXZlID0gZGV2LT5kcml2ZXJfZGF0YSwgKnBhaXIgPSBpZGVfZ2V0X3BhaXJfZGV2KGRyaXZlKTsKIAlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CiAJc3RydWN0IHJlcXVlc3QgKnJxOwogCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlIHJxcG07CiAJaWRlX3Rhc2tfdCBhcmdzOwogCWludCByZXQ7CiAKLQkvKiBDYWxsIEFDUEkgX0dUTSBvbmx5IG9uY2UgKi8KLQlpZiAoIShkcml2ZS0+ZG4gJSAyKSkKKwkvKiBjYWxsIEFDUEkgX0dUTSBvbmx5IG9uY2UgKi8KKwlpZiAoKGRyaXZlLT5kbiAmIDEpID09IDAgfHwgcGFpciA9PSBOVUxMKQogCQlpZGVfYWNwaV9nZXRfdGltaW5nKGh3aWYpOwogCiAJbWVtc2V0KCZycXBtLCAwLCBzaXplb2YocnFwbSkpOwpAQCAtMzgyLDMzICs0MTYsMzIgQEAKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9QTV9TVVNQRU5EOwogCXJxLT5zcGVjaWFsID0gJmFyZ3M7CiAJcnEtPmRhdGEgPSAmcnFwbTsKLQlycXBtLnBtX3N0ZXAgPSBpZGVfcG1fc3RhdGVfc3RhcnRfc3VzcGVuZDsKKwlycXBtLnBtX3N0ZXAgPSBJREVfUE1fU1RBUlRfU1VTUEVORDsKIAlpZiAobWVzZy5ldmVudCA9PSBQTV9FVkVOVF9QUkVUSEFXKQogCQltZXNnLmV2ZW50ID0gUE1fRVZFTlRfRlJFRVpFOwogCXJxcG0ucG1fc3RhdGUgPSBtZXNnLmV2ZW50OwogCiAJcmV0ID0gYmxrX2V4ZWN1dGVfcnEoZHJpdmUtPnF1ZXVlLCBOVUxMLCBycSwgMCk7CiAJYmxrX3B1dF9yZXF1ZXN0KHJxKTsKLQkvKiBvbmx5IGNhbGwgQUNQSSBfUFMzIGFmdGVyIGJvdGggZHJpdmVycyBhcmUgc3VzcGVuZGVkICovCi0JaWYgKCFyZXQgJiYgKCgoZHJpdmUtPmRuICUgMikgJiYgaHdpZi0+ZHJpdmVzWzBdLnByZXNlbnQKLQkJICYmIGh3aWYtPmRyaXZlc1sxXS5wcmVzZW50KQotCQkgfHwgIWh3aWYtPmRyaXZlc1swXS5wcmVzZW50Ci0JCSB8fCAhaHdpZi0+ZHJpdmVzWzFdLnByZXNlbnQpKQorCisJLyogY2FsbCBBQ1BJIF9QUzMgb25seSBhZnRlciBib3RoIGRldmljZXMgYXJlIHN1c3BlbmRlZCAqLworCWlmIChyZXQgPT0gMCAmJiAoKGRyaXZlLT5kbiAmIDEpIHx8IHBhaXIgPT0gTlVMTCkpCiAJCWlkZV9hY3BpX3NldF9zdGF0ZShod2lmLCAwKTsKKwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZ2VuZXJpY19pZGVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBkZXYtPmRyaXZlcl9kYXRhOworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGRldi0+ZHJpdmVyX2RhdGEsICpwYWlyID0gaWRlX2dldF9wYWlyX2Rldihkcml2ZSk7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwogCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSBycXBtOwogCWlkZV90YXNrX3QgYXJnczsKIAlpbnQgZXJyOwogCi0JLyogQ2FsbCBBQ1BJIF9TVE0gb25seSBvbmNlICovCi0JaWYgKCEoZHJpdmUtPmRuICUgMikpIHsKKwkvKiBjYWxsIEFDUEkgX1BTMCAvIF9TVE0gb25seSBvbmNlICovCisJaWYgKChkcml2ZS0+ZG4gJiAxKSA9PSAwIHx8IHBhaXIgPT0gTlVMTCkgewogCQlpZGVfYWNwaV9zZXRfc3RhdGUoaHdpZiwgMSk7CiAJCWlkZV9hY3BpX3B1c2hfdGltaW5nKGh3aWYpOwogCX0KQEAgLTQyMiw3ICs0NTUsNyBAQAogCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX1BSRUVNUFQ7CiAJcnEtPnNwZWNpYWwgPSAmYXJnczsKIAlycS0+ZGF0YSA9ICZycXBtOwotCXJxcG0ucG1fc3RlcCA9IGlkZV9wbV9zdGF0ZV9zdGFydF9yZXN1bWU7CisJcnFwbS5wbV9zdGVwID0gSURFX1BNX1NUQVJUX1JFU1VNRTsKIAlycXBtLnBtX3N0YXRlID0gUE1fRVZFTlRfT047CiAKIAllcnIgPSBibGtfZXhlY3V0ZV9ycShkcml2ZS0+cXVldWUsIE5VTEwsIHJxLCAxKTsKQEAgLTU1NCw2ICs1ODcsNyBAQAogCV9fQVRUUl9STyhtb2RlbCksCiAJX19BVFRSX1JPKGZpcm13YXJlKSwKIAlfX0FUVFIoc2VyaWFsLCAwNDAwLCBzZXJpYWxfc2hvdywgTlVMTCksCisJX19BVFRSKHVubG9hZF9oZWFkcywgMDY0NCwgaWRlX3Bhcmtfc2hvdywgaWRlX3Bhcmtfc3RvcmUpLAogCV9fQVRUUl9OVUxMCiB9OwogCkBAIC03MDgsMjIgKzc0MiwyMiBAQAogbW9kdWxlX3BhcmFtX2NhbGwoY2hzLCBpZGVfc2V0X2Rpc2tfY2hzLCBOVUxMLCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoY2hzLCAiZm9yY2UgZGV2aWNlIGFzIGEgZGlzayAodXNpbmcgQ0hTKSIpOwogCi1zdGF0aWMgdm9pZCBpZGVfZGV2X2FwcGx5X3BhcmFtcyhpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBpZGVfZGV2X2FwcGx5X3BhcmFtcyhpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHVuaXQpCiB7Ci0JaW50IGkgPSBkcml2ZS0+aHdpZi0+aW5kZXggKiBNQVhfRFJJVkVTICsgZHJpdmUtPnNlbGVjdC5iLnVuaXQ7CisJaW50IGkgPSBkcml2ZS0+aHdpZi0+aW5kZXggKiBNQVhfRFJJVkVTICsgdW5pdDsKIAogCWlmIChpZGVfbm9kbWEgJiAoMSA8PCBpKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJpZGU6IGRpc2FsbG93aW5nIERNQSBmb3IgJXNcbiIsIGRyaXZlLT5uYW1lKTsKLQkJZHJpdmUtPm5vZG1hID0gMTsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTk9ETUE7CiAJfQogCWlmIChpZGVfbm9mbHVzaCAmICgxIDw8IGkpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImlkZTogZGlzYWJsaW5nIGZsdXNoIHJlcXVlc3RzIGZvciAlc1xuIiwKIAkJCQkgZHJpdmUtPm5hbWUpOwotCQlkcml2ZS0+bm9mbHVzaCA9IDE7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PRkxVU0g7CiAJfQogCWlmIChpZGVfbm9wcm9iZSAmICgxIDw8IGkpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImlkZTogc2tpcHBpbmcgcHJvYmUgZm9yICVzXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCWRyaXZlLT5ub3Byb2JlID0gMTsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTk9QUk9CRTsKIAl9CiAJaWYgKGlkZV9ub3dlcnIgJiAoMSA8PCBpKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJpZGU6IGlnbm9yaW5nIHRoZSBBVEFfREYgYml0IGZvciAlc1xuIiwKQEAgLTczMiw3ICs3NjYsNyBAQAogCX0KIAlpZiAoaWRlX2Nkcm9tcyAmICgxIDw8IGkpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImlkZTogZm9yY2luZyAlcyBhcyBhIENELVJPTVxuIiwgZHJpdmUtPm5hbWUpOwotCQlkcml2ZS0+cHJlc2VudCA9IDE7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BSRVNFTlQ7CiAJCWRyaXZlLT5tZWRpYSA9IGlkZV9jZHJvbTsKIAkJLyogYW4gQVRBUEkgZGV2aWNlIGlnbm9yZXMgRFJEWSAqLwogCQlkcml2ZS0+cmVhZHlfc3RhdCA9IDA7CkBAIC03NDEsMTEgKzc3NSwxMiBAQAogCQlkcml2ZS0+Y3lsICA9IGRyaXZlLT5iaW9zX2N5bCAgPSBpZGVfZGlza3NfY2hzW2ldLmN5bDsKIAkJZHJpdmUtPmhlYWQgPSBkcml2ZS0+Ymlvc19oZWFkID0gaWRlX2Rpc2tzX2Noc1tpXS5oZWFkOwogCQlkcml2ZS0+c2VjdCA9IGRyaXZlLT5iaW9zX3NlY3QgPSBpZGVfZGlza3NfY2hzW2ldLnNlY3Q7Ci0JCWRyaXZlLT5mb3JjZWRfZ2VvbSA9IDE7CisKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaWRlOiBmb3JjaW5nICVzIGFzIGEgZGlzayAoJWQvJWQvJWQpXG4iLAogCQkJCSBkcml2ZS0+bmFtZSwKIAkJCQkgZHJpdmUtPmN5bCwgZHJpdmUtPmhlYWQsIGRyaXZlLT5zZWN0KTsKLQkJZHJpdmUtPnByZXNlbnQgPSAxOworCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0ZPUkNFRF9HRU9NIHwgSURFX0RGTEFHX1BSRVNFTlQ7CiAJCWRyaXZlLT5tZWRpYSA9IGlkZV9kaXNrOwogCQlkcml2ZS0+cmVhZHlfc3RhdCA9IEFUQV9EUkRZOwogCX0KQEAgLTc4NSw3ICs4MjAsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRFJJVkVTOyBpKyspCi0JCWlkZV9kZXZfYXBwbHlfcGFyYW1zKCZod2lmLT5kcml2ZXNbaV0pOworCQlpZGVfZGV2X2FwcGx5X3BhcmFtcygmaHdpZi0+ZHJpdmVzW2ldLCBpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9hbGkxNHh4LmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvYWxpMTR4eC5jCmluZGV4IDcyNzZjOTYuLjkwZGExZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9hbGkxNHh4LmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2FsaTE0eHguYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJCWRyaXZlLT5uYW1lLCBwaW8sIHRpbWUxLCB0aW1lMiwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00KTsKIAogCS8qIHN0dWZmIHRpbWluZyBwYXJhbWV0ZXJzIGludG8gY29udHJvbGxlciByZWdpc3RlcnMgKi8KLQlkcml2ZU51bSA9IChIV0lGKGRyaXZlKS0+aW5kZXggPDwgMSkgKyBkcml2ZS0+c2VsZWN0LmIudW5pdDsKKwlkcml2ZU51bSA9IChkcml2ZS0+aHdpZi0+aW5kZXggPDwgMSkgKyAoZHJpdmUtPmRuICYgMSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFsaTE0eHhfbG9jaywgZmxhZ3MpOwogCW91dGJfcChyZWdPbiwgYmFzZVBvcnQpOwogCW91dFJlZyhwYXJhbTEsIHJlZ1RhYltkcml2ZU51bV0ucmVnMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvaHQ2NTYwYi5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2h0NjU2MGIuYwppbmRleCA1MTIzZWEyLi5jN2U1YzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvaHQ2NTYwYi5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9odDY1NjBiLmMKQEAgLTEyMCw3ICsxMjAsOCBAQAogCSAqIE5lZWQgdG8gZW5mb3JjZSBwcmVmZXRjaCBzb21ldGltZXMgYmVjYXVzZSBvdGhlcndpc2UKIAkgKiBpdCdsbCBoYW5nIChoYXJkKS4KIAkgKi8KLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrIHx8ICFkcml2ZS0+cHJlc2VudCkKKwlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrIHx8CisJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCiAJCXNlbGVjdCB8PSBIVF9QUkVGRVRDSF9NT0RFOwogCiAJaWYgKHNlbGVjdCAhPSBjdXJyZW50X3NlbGVjdCB8fCB0aW1pbmcgIT0gY3VycmVudF90aW1pbmcpIHsKQEAgLTI0OSwxMSArMjUwLDExIEBACiAJICovCiAJaWYgKHN0YXRlKSB7CiAJCWRyaXZlLT5kcml2ZV9kYXRhIHw9IHQ7ICAgLyogZW5hYmxlIHByZWZldGNoIG1vZGUgKi8KLQkJZHJpdmUtPm5vX3VubWFzayA9IDE7Ci0JCWRyaXZlLT51bm1hc2sgPSAwOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT19VTk1BU0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7CiAJfSBlbHNlIHsKIAkJZHJpdmUtPmRyaXZlX2RhdGEgJj0gfnQ7ICAvKiBkaXNhYmxlIHByZWZldGNoIG1vZGUgKi8KLQkJZHJpdmUtPm5vX3VubWFzayA9IDA7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19OT19VTk1BU0s7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHQ2NTYwYl9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLTRkcml2ZXMuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtNGRyaXZlcy5jCmluZGV4IGM3NmQ1NWQuLjllODViMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtNGRyaXZlcy5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtNGRyaXZlcy5jCkBAIC0xNCw3ICsxNCw3IEBACiBzdGF0aWMgdm9pZCBpZGVfNGRyaXZlc19pbml0X2RldihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWYgKGRyaXZlLT5od2lmLT5jaGFubmVsKQotCQlkcml2ZS0+c2VsZWN0LmFsbCBePSAweDIwOworCQlkcml2ZS0+c2VsZWN0IF49IDB4MjA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIGlkZV80ZHJpdmVzX3BvcnRfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCmluZGV4IGVlNmZjMzAuLmNiMTk5YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMKQEAgLTIxOSwxMDMgKzIxOSw5MSBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCitzdHJ1Y3QgcGNtY2lhX2NvbmZpZ19jaGVjayB7CisJdW5zaWduZWQgbG9uZyBjdGxfYmFzZTsKKwlpbnQgc2tpcF92Y2M7CisJaW50IGlzX2ttZTsKK307CisKK3N0YXRpYyBpbnQgcGNtY2lhX2NoZWNrX29uZV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBkZXYsCisJCQkJICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJCSAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJICAgdW5zaWduZWQgaW50IHZjYywKKwkJCQkgICB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHBjbWNpYV9jb25maWdfY2hlY2sgKnN0ayA9IHByaXZfZGF0YTsKKworCS8qIENoZWNrIGZvciBtYXRjaGluZyBWY2MsIHVubGVzcyB3ZSdyZSBkZXNwZXJhdGUgKi8KKwlpZiAoIXN0ay0+c2tpcF92Y2MpIHsKKwkJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJCWlmICh2Y2MgIT0gY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDApCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0gZWxzZSBpZiAoZGZsdC0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJCWlmICh2Y2MgIT0gZGZsdC0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKQorCQkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCisJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwZGV2LT5jb25mLlZwcCA9IGNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKKwllbHNlIGlmIChkZmx0LT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBkZXYtPmNvbmYuVnBwID0gZGZsdC0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKKworCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgeworCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOworCQlwZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKKwkJcGRldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJcGRldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJaWYgKGlvLT5ud2luID09IDIpIHsKKwkJCXBkZXYtPmlvLk51bVBvcnRzMSA9IDg7CisJCQlwZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwZGV2LT5pby5OdW1Qb3J0czIgPSAoc3RrLT5pc19rbWUpID8gMiA6IDE7CisJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocGRldiwgJnBkZXYtPmlvKSAhPSAwKQorCQkJCXJldHVybiAtRU5PREVWOworCQkJc3RrLT5jdGxfYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MjsKKwkJfSBlbHNlIGlmICgoaW8tPm53aW4gPT0gMSkgJiYgKGlvLT53aW5bMF0ubGVuID49IDE2KSkgeworCQkJcGRldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCQlwZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBkZXYsICZwZGV2LT5pbykgIT0gMCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCXN0ay0+Y3RsX2Jhc2UgPSBwZGV2LT5pby5CYXNlUG9ydDEgKyAweDBlOworCQl9IGVsc2UKKwkJCXJldHVybiAtRU5PREVWOworCQkvKiBJZiB3ZSd2ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGRvbmUgKi8KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOworfQorCiBzdGF0aWMgaW50IGlkZV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgaWRlX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7Ci0gICAgdHVwbGVfdCB0dXBsZTsKLSAgICBzdHJ1Y3QgewotCXVfc2hvcnQJCWJ1ZlsxMjhdOwotCWNpc3BhcnNlX3QJcGFyc2U7Ci0JY29uZmlnX2luZm9fdAljb25mOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdDsKLSAgICB9ICpzdGsgPSBOVUxMOwotICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZzsKLSAgICBpbnQgcGFzcywgbGFzdF9yZXQgPSAwLCBsYXN0X2ZuID0gMCwgaXNfa21lID0gMDsKKyAgICBzdHJ1Y3QgcGNtY2lhX2NvbmZpZ19jaGVjayAqc3RrID0gTlVMTDsKKyAgICBpbnQgbGFzdF9yZXQgPSAwLCBsYXN0X2ZuID0gMCwgaXNfa21lID0gMDsKICAgICB1bnNpZ25lZCBsb25nIGlvX2Jhc2UsIGN0bF9iYXNlOwogICAgIHN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKIAogICAgIERFQlVHKDAsICJpZGVfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIHN0ayA9IGt6YWxsb2Moc2l6ZW9mKCpzdGspLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIXN0aykgZ290byBlcnJfbWVtOwotICAgIGNmZyA9ICZzdGstPnBhcnNlLmNmdGFibGVfZW50cnk7Ci0KLSAgICB0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopJnN0ay0+YnVmOwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgICB0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7Ci0gICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0KICAgICBpc19rbWUgPSAoKGxpbmstPm1hbmZfaWQgPT0gTUFORklEX0tNRSkgJiYKIAkgICAgICAoKGxpbmstPmNhcmRfaWQgPT0gUFJPRElEX0tNRV9LWExDMDA1X0EpIHx8CiAJICAgICAgIChsaW5rLT5jYXJkX2lkID09IFBST0RJRF9LTUVfS1hMQzAwNV9CKSkpOwogCi0gICAgLyogTm90IHN1cmUgaWYgdGhpcyBpcyByaWdodC4uLiBsb29rIHVwIHRoZSBjdXJyZW50IFZjYyAqLwotICAgIENTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmc3RrLT5jb25mKSk7CisgICAgc3RrID0ga3phbGxvYyhzaXplb2YoKnN0ayksIEdGUF9LRVJORUwpOworICAgIGlmICghc3RrKQorCSAgICBnb3RvIGVycl9tZW07CisgICAgc3RrLT5pc19rbWUgPSBpc19rbWU7CisgICAgc3RrLT5za2lwX3ZjYyA9IGlvX2Jhc2UgPSBjdGxfYmFzZSA9IDA7CiAKLSAgICBwYXNzID0gaW9fYmFzZSA9IGN0bF9iYXNlID0gMDsKLSAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLSAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotICAgIHdoaWxlICgxKSB7Ci0gICAgCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwKSBnb3RvIG5leHRfZW50cnk7Ci0JaWYgKHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZzdGstPnBhcnNlKSAhPSAwKSBnb3RvIG5leHRfZW50cnk7Ci0KLQkvKiBDaGVjayBmb3IgbWF0Y2hpbmcgVmNjLCB1bmxlc3Mgd2UncmUgZGVzcGVyYXRlICovCi0JaWYgKCFwYXNzKSB7Ci0JICAgIGlmIChjZmctPnZjYy5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JCWlmIChzdGstPmNvbmYuVmNjICE9IGNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKQotCQkgICAgZ290byBuZXh0X2VudHJ5OwotCSAgICB9IGVsc2UgaWYgKHN0ay0+ZGZsdC52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgewotCQlpZiAoc3RrLT5jb25mLlZjYyAhPSBzdGstPmRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKQotCQkgICAgZ290byBuZXh0X2VudHJ5OwotCSAgICB9Ci0JfQotCi0JaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQotCSAgICBsaW5rLT5jb25mLlZwcCA9Ci0JCWNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKLQllbHNlIGlmIChzdGstPmRmbHQudnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQotCSAgICBsaW5rLT5jb25mLlZwcCA9Ci0JCXN0ay0+ZGZsdC52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwotCi0JaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoc3RrLT5kZmx0LmlvLm53aW4gPiAwKSkgewotCSAgICBjaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJnN0ay0+ZGZsdC5pbzsKLQkgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0JICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkgICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkgICAgaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkgICAgaWYgKGlvLT5ud2luID09IDIpIHsKLQkJbGluay0+aW8uTnVtUG9ydHMxID0gODsKLQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQlsaW5rLT5pby5OdW1Qb3J0czIgPSAoaXNfa21lKSA/IDIgOiAxOwotCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCQlpb19iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxOwotCQljdGxfYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MjsKLQkgICAgfSBlbHNlIGlmICgoaW8tPm53aW4gPT0gMSkgJiYgKGlvLT53aW5bMF0ubGVuID49IDE2KSkgewotCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKLQkJbGluay0+aW8uTnVtUG9ydHMyID0gMDsKLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJaW9fYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKLQkJY3RsX2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDEgKyAweDBlOwotCSAgICB9IGVsc2UgZ290byBuZXh0X2VudHJ5OwotCSAgICAvKiBJZiB3ZSd2ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGRvbmUgKi8KLQkgICAgYnJlYWs7Ci0JfQotCi0gICAgbmV4dF9lbnRyeToKLQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCi0JICAgIG1lbWNweSgmc3RrLT5kZmx0LCBjZmcsIHNpemVvZihzdGstPmRmbHQpKTsKLQlpZiAocGFzcykgewotCSAgICBDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLQl9IGVsc2UgaWYgKHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpICE9IDApIHsKLQkgICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLQkgICAgbWVtc2V0KCZzdGstPmRmbHQsIDAsIHNpemVvZihzdGstPmRmbHQpKTsKLQkgICAgcGFzcysrOwotCX0KKyAgICBpZiAocGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHBjbWNpYV9jaGVja19vbmVfY29uZmlnLCBzdGspKSB7CisJICAgIHN0ay0+c2tpcF92Y2MgPSAxOworCSAgICBpZiAocGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHBjbWNpYV9jaGVja19vbmVfY29uZmlnLCBzdGspKQorCQkgICAgZ290byBmYWlsZWQ7IC8qIE5vIHN1aXRhYmxlIGNvbmZpZyBmb3VuZCAqLwogICAgIH0KKyAgICBpb19iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxOworICAgIGN0bF9iYXNlID0gc3RrLT5jdGxfYmFzZTsKIAogICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAgICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKQEAgLTQwMyw4ICszOTEsMTAgQEAKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwMGEsIDB4MDAwMCksCS8qIEktTyBEYXRhIENGQSAqLwogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDAxYywgMHgwMDAxKSwJLyogTWl0c3ViaXNoaSBDRkEgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwMzIsIDB4MDcwNCksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDMyLCAweDI5MDQpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDA0NSwgMHgwNDAxKSwJLyogU2FuRGlzayBDRkEgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwNGYsIDB4MDAwMCksCS8qIEtpbmdzdG9uICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDk3LCAweDE2MjApLCAJLyogVEkgZW11bGF0ZWQgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwOTgsIDB4MDAwMCksCS8qIFRvc2hpYmEgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwYTQsIDB4MDAyZCksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMGNlLCAweDAwMDApLAkvKiBTYW1zdW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvcWQ2NXh4LmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvcWQ2NXh4LmMKaW5kZXggZWM0MDhiMy4uYmMyN2M3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L3FkNjV4eC5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9xZDY1eHguYwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJfSBlbHNlCiAJCXQyID0gdDEgPSBod2lmLT5jaGFubmVsID8gUUQ2NTgwX0RFRl9EQVRBMiA6IFFENjU4MF9ERUZfREFUQTsKIAotCWRyaXZlLT5kcml2ZV9kYXRhID0gZHJpdmUtPnNlbGVjdC5iLnVuaXQgPyB0MiA6IHQxOworCWRyaXZlLT5kcml2ZV9kYXRhID0gKGRyaXZlLT5kbiAmIDEpID8gdDIgOiB0MTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgcWQ2NTAwX3BvcnRfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbWlwcy9hdTF4eHgtaWRlLmMgYi9kcml2ZXJzL2lkZS9taXBzL2F1MXh4eC1pZGUuYwppbmRleCAxMWI3ZjYxLi4wZWM4ZmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9taXBzL2F1MXh4eC1pZGUuYworKysgYi9kcml2ZXJzL2lkZS9taXBzL2F1MXh4eC1pZGUuYwpAQCAtMzIyLDExICszMjIsNyBAQAogfQogCiBzdGF0aWMgaW50IGF1aWRlX2RtYV90ZXN0X2lycShpZGVfZHJpdmVfdCAqZHJpdmUpCi17CQotCWlmIChkcml2ZS0+d2FpdGluZ19mb3JfZG1hID09IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpZGVfZG1hX3Rlc3RfaXJxIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQgd2hpbGUgbm90IHdhaXRpbmdcbiIsIGRyaXZlLT5uYW1lKTsKLQorewogCS8qIElmIGRiZG1hIGRpZG4ndCBleGVjdXRlIHRoZSBTVE9QIGNvbW1hbmQgeWV0LCB0aGUKIAkgKiBhY3RpdmUgYml0IGlzIHN0aWxsIHNldAogCSAqLwpAQCAtMzQ0LDExICszNDAsNiBAQAogewogfQogCi1zdGF0aWMgdm9pZCBhdWlkZV9kbWFfbG9zdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXByaW50ayhLRVJOX0VSUiAiJXM6IElSUSBsb3N0XG4iLCBkcml2ZS0+bmFtZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGF1aWRlX2RkbWFfdHhfY2FsbGJhY2soaW50IGlycSwgdm9pZCAqcGFyYW0pCiB7CiAJX2F1aWRlX2h3aWYgKmFod2lmID0gKF9hdWlkZV9od2lmKilwYXJhbTsKQEAgLTM3NSwxOCArMzY2LDYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfTURNQTJfREJETUEKLXN0YXRpYyB2b2lkIGF1aWRlX2RtYV90aW1lb3V0KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7Ci0KLQlwcmludGsoS0VSTl9FUlIgIiVzOiBETUEgdGltZW91dCBvY2N1cnJlZDogIiwgZHJpdmUtPm5hbWUpOwotCi0JaWYgKGF1aWRlX2RtYV90ZXN0X2lycShkcml2ZSkpCi0JCXJldHVybjsKLQotCWF1aWRlX2RtYV9lbmQoZHJpdmUpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGF1MXh4eF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gYXVpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gYXVpZGVfZG1hX3NldHVwLApAQCAtMzk0LDggKzM3Myw4IEBACiAJLmRtYV9zdGFydAkJPSBhdWlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gYXVpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGF1aWRlX2RtYV90ZXN0X2lycSwKLQkuZG1hX2xvc3RfaXJxCQk9IGF1aWRlX2RtYV9sb3N0X2lycSwKLQkuZG1hX3RpbWVvdXQJCT0gYXVpZGVfZG1hX3RpbWVvdXQsCisJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiB9OwogCiBzdGF0aWMgaW50IGF1aWRlX2RkbWFfaW5pdChpZGVfaHdpZl90ICpod2lmLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKQEAgLTQ0OCwxMCArNDI3LDkgQEAKIAkJCQkJCQkgICAgIE5VTV9ERVNDUklQVE9SUyk7CiAJYXVpZGUtPnJ4X2Rlc2NfaGVhZCA9ICh2b2lkKilhdTF4eHhfZGJkbWFfcmluZ19hbGxvYyhhdWlkZS0+cnhfY2hhbiwKIAkJCQkJCQkgICAgIE5VTV9ERVNDUklQVE9SUyk7Ci0gCi0JaHdpZi0+ZG1hdGFibGVfY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KGh3aWYtPmRldiwKLQkJCQkJCVBSRF9FTlRSSUVTICogUFJEX0JZVEVTLCAgICAgICAgLyogMSBQYWdlICovCi0JCQkJCQkmaHdpZi0+ZG1hdGFibGVfZG1hLCBHRlBfS0VSTkVMKTsKKworCS8qIEZJWE1FOiBjaGVjayByZXR1cm4gdmFsdWUgKi8KKwkodm9pZClpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZShod2lmKTsKIAkKIAlhdTF4eHhfZGJkbWFfc3RhcnQoIGF1aWRlLT50eF9jaGFuICk7CiAJYXUxeHh4X2RiZG1hX3N0YXJ0KCBhdWlkZS0+cnhfY2hhbiApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvcGNpL01ha2VmaWxlCmluZGV4IDAyZTZlZTcuLmFiNDRhMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lkZS9wY2kvTWFrZWZpbGUKQEAgLTExLDcgKzExLDYgQEAKIG9iai0kKENPTkZJR19CTEtfREVWX1NDMTIwMCkJCSs9IHNjMTIwMC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9DWTgyQzY5MykJCSs9IGN5ODJjNjkzLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0RFTEtJTikJCSs9IGRlbGtpbl9jYi5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9IUFQzNFgpCQkrPSBocHQzNHgubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSFBUMzY2KQkJKz0gaHB0MzY2Lm8KIG9iai0kKENPTkZJR19CTEtfREVWX0lUODIxMykJCSs9IGl0ODIxMy5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9JVDgyMVgpCQkrPSBpdDgyMXgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2FlYzYyeHguYyBiL2RyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMKaW5kZXggZTc0NzViYS4uNDE0MmM2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2FlYzYyeHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYWVjNjJ4eC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCXN0cnVjdCBpZGVfaG9zdCAqaG9zdAk9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBjaGlwc2V0X2J1c19jbG9ja19saXN0X2VudHJ5ICpidXNfY2xvY2sgPSBob3N0LT5ob3N0X3ByaXY7Ci0JdTggdW5pdAkJPSAoZHJpdmUtPnNlbGVjdC5iLnVuaXQgJiAweDAxKTsKKwl1OCB1bml0CQkJPSBkcml2ZS0+ZG4gJiAxOwogCXU4IHRtcDEgPSAwLCB0bXAyID0gMDsKIAl1OCB1bHRyYSA9IDAsIGRyaXZlX2NvbmYgPSAwLCB1bHRyYV9jb25mID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzAyLDcgKzMwMiw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFlYzYyeHhfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWVjNjJ4eF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJBRUM2Mnh4X0lERSIsCiAJLmlkX3RhYmxlCT0gYWVjNjJ4eF9wY2lfdGJsLAogCS5wcm9iZQkJPSBhZWM2Mnh4X2luaXRfb25lLApAQCAtMzEzLDEyICszMTMsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWVjNjJ4eF9pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmFlYzYyeHhfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhZWM2Mnh4X2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYWVjNjJ4eF9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYWVjNjJ4eF9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYyBiL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCmluZGV4IDA1M2M3NTIuLmRhZjlkY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCkBAIC03Nyw4ICs3Nyw3IEBACiAJaW50IGJ1c19zcGVlZCA9IGlkZV9wY2lfY2xrID8gaWRlX3BjaV9jbGsgOiAzMzsKIAlpbnQgcG9ydCA9IGh3aWYtPmNoYW5uZWwgPyAweDVjIDogMHg1ODsKIAlpbnQgcG9ydEZJRk8gPSBod2lmLT5jaGFubmVsID8gMHg1NSA6IDB4NTQ7Ci0JdTggY2RfZG1hX2ZpZm8gPSAwOwotCWludCB1bml0ID0gZHJpdmUtPnNlbGVjdC5iLnVuaXQgJiAxOworCXU4IGNkX2RtYV9maWZvID0gMCwgdW5pdCA9IGRyaXZlLT5kbiAmIDE7CiAKIAlpZiAoKHNfY2xjID0gKHNfdGltZSAqIGJ1c19zcGVlZCArIDk5OSkgLyAxMDAwKSA+PSA4KQogCQlzX2NsYyA9IDA7CkBAIC0xMTIsNyArMTExLDcgQEAKIAl9CiAJCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgcG9ydCwgc19jbGMpOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHBvcnQrZHJpdmUtPnNlbGVjdC5iLnVuaXQrMiwgKGFfY2xjIDw8IDQpIHwgcl9jbGMpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHBvcnQgKyB1bml0ICsgMiwgKGFfY2xjIDw8IDQpIHwgcl9jbGMpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMTU0LDcgKzE1Myw3IEBACiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJdTggc3BlZWQxCQk9IHNwZWVkOwotCXU4IHVuaXQJCQk9IChkcml2ZS0+c2VsZWN0LmIudW5pdCAmIDB4MDEpOworCXU4IHVuaXQJCQk9IGRyaXZlLT5kbiAmIDE7CiAJdTggdG1wYnl0ZQkJPSAweDAwOwogCWludCBtNTIyOV91ZG1hCQk9IChod2lmLT5jaGFubmVsKSA/IDB4NTcgOiAweDU2OwogCkBAIC01MDgsNyArNTA3LDcgQEAKIAkuZG1hX3NldHVwCQk9IGFsaTE1eDNfZG1hX3NldHVwLAogCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCi0JLmRtYV9lbmQJCT0gX19pZGVfZG1hX2VuZCwKKwkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCkBAIC01NzYsNyArNTc1LDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWxpbTE1eDNfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWxpbTE1eDNfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiQUxJMTV4M19JREUiLAogCS5pZF90YWJsZQk9IGFsaW0xNXgzX3BjaV90YmwsCiAJLnByb2JlCQk9IGFsaW0xNXgzX2luaXRfb25lLApAQCAtNTg3LDEyICs1ODYsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWxpMTV4M19pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmFsaW0xNXgzX3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxpMTV4M19pZGVfZXhpdCh2b2lkKQogewotCXJldHVybiBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIHBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYWxpbTE1eDNfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGFsaTE1eDNfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2FtZDc0eHguYyBiL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMKaW5kZXggODI0NDcxZi4uODFlYzczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2FtZDc0eHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jCkBAIC05Miw3ICs5Miw3IEBACiAKIAlpZGVfdGltaW5nX2NvbXB1dGUoZHJpdmUsIHNwZWVkLCAmdCwgVCwgVVQpOwogCi0JaWYgKHBlZXItPnByZXNlbnQpIHsKKwlpZiAocGVlci0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpIHsKIAkJaWRlX3RpbWluZ19jb21wdXRlKHBlZXIsIHBlZXItPmN1cnJlbnRfc3BlZWQsICZwLCBULCBVVCk7CiAJCWlkZV90aW1pbmdfbWVyZ2UoJnAsICZ0LCAmdCwgSURFX1RJTUlOR184QklUKTsKIAl9CkBAIC0zMTksNyArMzE5LDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYW1kNzR4eF9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbWQ3NHh4X3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIkFNRF9JREUiLAogCS5pZF90YWJsZQk9IGFtZDc0eHhfcGNpX3RibCwKIAkucHJvYmUJCT0gYW1kNzR4eF9wcm9iZSwKQEAgLTMzMCwxMiArMzMwLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFtZDc0eHhfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbWQ3NHh4X3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYW1kNzR4eF9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFtZDc0eHhfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGFtZDc0eHhfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jIGIvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jCmluZGV4IGU0NDM3MDMuLmIyNzM1ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhdGlpeHBfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYXRpaXhwX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIkFUSUlYUF9JREUiLAogCS5pZF90YWJsZQk9IGF0aWl4cF9wY2lfdGJsLAogCS5wcm9iZQkJPSBhdGlpeHBfaW5pdF9vbmUsCkBAIC0xOTMsMTIgKzE5MywxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhdGlpeHBfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZhdGlpeHBfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhdGlpeHBfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhdGlpeHBfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGF0aWl4cF9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY21kNjQwLmMgYi9kcml2ZXJzL2lkZS9wY2kvY21kNjQwLmMKaW5kZXggN2YzOWNkYi4uZTQzMDY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0MC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NDAuYwpAQCAtMzc4LDEzICszNzgsMTMgQEAKIHsKIAlpZiAobW9kZSkgewkvKiB3YW50IHByZWZldGNoIG9uPyAqLwogI2lmIENNRDY0MF9QUkVGRVRDSF9NQVNLUwotCQlkcml2ZS0+bm9fdW5tYXNrID0gMTsKLQkJZHJpdmUtPnVubWFzayA9IDA7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PX1VOTUFTSzsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VOTUFTSzsKICNlbmRpZgotCQlkcml2ZS0+bm9faW9fMzJiaXQgPSAwOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTk9fSU9fMzJCSVQ7CiAJfSBlbHNlIHsKLQkJZHJpdmUtPm5vX3VubWFzayA9IDA7Ci0JCWRyaXZlLT5ub19pb18zMmJpdCA9IDE7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19OT19VTk1BU0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PX0lPXzMyQklUOwogCQlkcml2ZS0+aW9fMzJiaXQgPSAwOwogCX0KIH0KQEAgLTQ2OCwxMCArNDY4LDEwIEBACiAJICovCiAJaWYgKGluZGV4ID4gMSkgewogCQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JCWlkZV9kcml2ZV90ICpwZWVyID0gJmh3aWYtPmRyaXZlc1shZHJpdmUtPnNlbGVjdC5iLnVuaXRdOworCQlpZGVfZHJpdmVfdCAqcGVlciA9ICZod2lmLT5kcml2ZXNbIShkcml2ZS0+ZG4gJiAxKV07CiAJCXVuc2lnbmVkIGludCBtYXRlID0gaW5kZXggXiAxOwogCi0JCWlmIChwZWVyLT5wcmVzZW50KSB7CisJCWlmIChwZWVyLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgewogCQkJaWYgKHNldHVwX2NvdW50IDwgc2V0dXBfY291bnRzW21hdGVdKQogCQkJCXNldHVwX2NvdW50ID0gc2V0dXBfY291bnRzW21hdGVdOwogCQkJaWYgKGFjdGl2ZV9jb3VudCA8IGFjdGl2ZV9jb3VudHNbbWF0ZV0pCkBAIC02MDcsNyArNjA3LDcgQEAKIAogc3RhdGljIHZvaWQgY21kNjQwX2luaXRfZGV2KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQl1bnNpZ25lZCBpbnQgaSA9IGRyaXZlLT5od2lmLT5jaGFubmVsICogMiArIGRyaXZlLT5zZWxlY3QuYi51bml0OworCXVuc2lnbmVkIGludCBpID0gZHJpdmUtPmh3aWYtPmNoYW5uZWwgKiAyICsgKGRyaXZlLT5kbiAmIDEpOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfQ01ENjQwX0VOSEFOQ0VECiAJLyoKQEAgLTYyNiw3ICs2MjYsNyBAQAogCSAqLwogCWNoZWNrX3ByZWZldGNoKGRyaXZlLCBpKTsKIAlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6IGRyaXZlJWQgdGltaW5ncy9wcmVmZXRjaCglcykgcHJlc2VydmVkXG4iLAotCQkJCSAgaSwgZHJpdmUtPm5vX2lvXzMyYml0ID8gIm9mZiIgOiAib24iKTsKKwkJaSwgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9fSU9fMzJCSVQpID8gIm9mZiIgOiAib24iKTsKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9DTUQ2NDBfRU5IQU5DRUQgKi8KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jIGIvZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jCmluZGV4IDQ1NmRlZTEuLjkzNTM4NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogewogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAl1bnNpZ25lZCBsb25nIGJhc2UJPSBod2lmLT5kbWFfYmFzZSAtIChod2lmLT5jaGFubmVsICogOCk7Ci0JaW50IGVycgkJCT0gX19pZGVfZG1hX2VuZChkcml2ZSk7CisJaW50IGVycgkJCT0gaWRlX2RtYV9lbmQoZHJpdmUpOwogCXU4ICBpcnFfbWFzawkJPSBod2lmLT5jaGFubmVsID8gTVJETU9ERV9JTlRSX0NIMSA6CiAJCQkJCQkgIE1SRE1PREVfSU5UUl9DSDA7CiAJdTggIG1yZG1vZGUJCT0gaW5iKGJhc2UgKyAxKTsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCXU4ICBpcnFfbWFzawkJPSBod2lmLT5jaGFubmVsID8gQVJUVElNMjNfSU5UUl9DSDEgOgogCQkJCQkJICBDRlJfSU5UUl9DSDA7CiAJdTggIGlycV9zdGF0CQk9IDA7Ci0JaW50IGVycgkJCT0gX19pZGVfZG1hX2VuZChkcml2ZSk7CisJaW50IGVycgkJCT0gaWRlX2RtYV9lbmQoZHJpdmUpOwogCiAJKHZvaWQpIHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgaXJxX3JlZywgJmlycV9zdGF0KTsKIAkvKiBjbGVhciB0aGUgaW50ZXJydXB0IGJpdCAqLwpAQCAtNTA1LDcgKzUwNSw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNtZDY0eF9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjbWQ2NHhfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiQ01ENjR4X0lERSIsCiAJLmlkX3RhYmxlCT0gY21kNjR4X3BjaV90YmwsCiAJLnByb2JlCQk9IGNtZDY0eF9pbml0X29uZSwKQEAgLTUxNiwxMiArNTE2LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNtZDY0eF9pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmNtZDY0eF9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNtZDY0eF9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmNtZDY0eF9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY21kNjR4X2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9jczU1MjAuYyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MjAuYwppbmRleCBkNjM0MWY3Li41ZWZiNDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTIwLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2NzNTUyMC5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY3M1NTIwX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGNzNTUyMF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJDeXJpeF9JREUiLAogCS5pZF90YWJsZQk9IGNzNTUyMF9wY2lfdGJsLAogCS5wcm9iZQkJPSBjczU1MjBfaW5pdF9vbmUsCkBAIC0xNTUsNyArMTU1LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgY3M1NTIwX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmY3M1NTIwX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjczU1MjBfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jIGIvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jCmluZGV4IGRhNDJmYTcuLjUzZjA3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jczU1MzAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTMwLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjczU1MzBfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY3M1NTMwX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIkNTNTUzMCBJREUiLAogCS5pZF90YWJsZQk9IGNzNTUzMF9wY2lfdGJsLAogCS5wcm9iZQkJPSBjczU1MzBfaW5pdF9vbmUsCkBAIC0yNzgsMTIgKzI3OCwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjczU1MzBfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZjczU1MzBfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjczU1MzBfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjczU1MzBfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGNzNTUzMF9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTM1LmMgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTM1LmMKaW5kZXggMWU1YmM1OS4uOTgzZDk1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NzNTUzNS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MzUuYwpAQCAtNzYsNyArNzYsNyBAQAogc3RhdGljIHZvaWQgY3M1NTM1X3NldF9zcGVlZChpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHNwZWVkKQogewogCXUzMiByZWcgPSAwLCBkdW1teTsKLQlpbnQgdW5pdCA9IGRyaXZlLT5zZWxlY3QuYi51bml0OworCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxOwogCiAJLyogU2V0IHRoZSBQSU8gdGltaW5ncyAqLwogCWlmIChzcGVlZCA8IFhGRVJfU1dfRE1BXzApIHsKQEAgLTE5Miw3ICsxOTIsNyBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY3M1NTM1X3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGNzNTUzNV9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJDUzU1MzVfSURFIiwKIAkuaWRfdGFibGUJPSBjczU1MzVfcGNpX3RibCwKIAkucHJvYmUJCT0gY3M1NTM1X2luaXRfb25lLApAQCAtMjAzLDEyICsyMDMsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgY3M1NTM1X2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmY3M1NTM1X3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3M1NTM1X2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmY3M1NTM1X3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjczU1MzVfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMgYi9kcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYwppbmRleCA2OTgyMGU5Li41Mjk3ZjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYwpAQCAtNTAsMTggKzUwLDExIEBACiAKICNkZWZpbmUgRFJWX05BTUUgImN5ODJjNjkzIgogCi0vKiB0aGUgY3VycmVudCB2ZXJzaW9uICovCi0jZGVmaW5lIENZODJfVkVSU0lPTgkiQ1k4MkM2OTNVIGRyaXZlciB2MC4zNCA5OS0xMy0xMiBBbmRyZWFzIFMuIEtyZWJzIChha3JlYnNAYWx0YXZpc3RhLm5ldCkiCi0KIC8qCiAgKglUaGUgZm9sbG93aW5nIGFyZSB1c2VkIHRvIGRlYnVnIHRoZSBkcml2ZXIuCiAgKi8KLSNkZWZpbmUgQ1k4MkM2OTNfREVCVUdfTE9HUwkwCiAjZGVmaW5lIENZODJDNjkzX0RFQlVHX0lORk8JMAogCi0vKiBkZWZpbmUgQ1k4MkM2OTNfU0VURE1BX0NMT0NLIHRvIHNldCBETUEgQ29udHJvbGxlciBDbG9jayBTcGVlZCB0byBBVENMSyAqLwotI3VuZGVmIENZODJDNjkzX1NFVERNQV9DTE9DSwotCiAvKgogICoJTk9URTogdGhlIHZhbHVlIGZvciBidXNtYXN0ZXIgdGltZW91dCBpcyB0cmlja3kgYW5kIEkgZ290IGl0IGJ5CiAgKgl0cmlhbCBhbmQgZXJyb3IhICBCeSB1c2luZyBhIHRvIGxvdyB2YWx1ZSB3aWxsIGNhdXNlIERNQSB0aW1lb3V0cwpAQCAtODksNyArODIsNiBAQAogI2RlZmluZSBDWTgyX0lOREVYX1BPUlQJCTB4MjIKICNkZWZpbmUgQ1k4Ml9EQVRBX1BPUlQJCTB4MjMKIAotI2RlZmluZSBDWTgyX0lOREVYX0NUUkxSRUcxCTB4MDEKICNkZWZpbmUgQ1k4Ml9JTkRFWF9DSEFOTkVMMAkweDMwCiAjZGVmaW5lIENZODJfSU5ERVhfQ0hBTk5FTDEJMHgzMQogI2RlZmluZSBDWTgyX0lOREVYX1RJTUVPVVQJMHgzMgpAQCAtMTc5LDE3ICsxNzEsNiBAQAogCiAJaW5kZXggPSBod2lmLT5jaGFubmVsID8gQ1k4Ml9JTkRFWF9DSEFOTkVMMSA6IENZODJfSU5ERVhfQ0hBTk5FTDA7CiAKLSNpZiBDWTgyQzY5M19ERUJVR19MT0dTCi0JLyogZm9yIGRlYnVnIGxldCdzIHNob3cgdGhlIHByZXZpb3VzIHZhbHVlcyAqLwotCi0Jb3V0YihpbmRleCwgQ1k4Ml9JTkRFWF9QT1JUKTsKLQlkYXRhID0gaW5iKENZODJfREFUQV9QT1JUKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzIChjaD0lZCwgZGV2PSVkKTogRE1BIG1vZGUgaXMgJWQgKHNpbmdsZT0lZClcbiIsCi0JCWRyaXZlLT5uYW1lLCBIV0lGKGRyaXZlKS0+Y2hhbm5lbCwgZHJpdmUtPnNlbGVjdC5iLnVuaXQsCi0JCShkYXRhJjB4MyksICgoZGF0YT4+MikmMSkpOwotI2VuZGlmIC8qIENZODJDNjkzX0RFQlVHX0xPR1MgKi8KLQogCWRhdGEgPSAobW9kZSAmIDMpIHwgKHNpbmdsZSA8PCAyKTsKIAogCW91dGIoaW5kZXgsIENZODJfSU5ERVhfUE9SVCk7CkBAIC0xOTcsOCArMTc4LDcgQEAKIAogI2lmIENZODJDNjkzX0RFQlVHX0lORk8KIAlwcmludGsoS0VSTl9JTkZPICIlcyAoY2g9JWQsIGRldj0lZCk6IHNldCBETUEgbW9kZSB0byAlZCAoc2luZ2xlPSVkKVxuIiwKLQkJZHJpdmUtPm5hbWUsIEhXSUYoZHJpdmUpLT5jaGFubmVsLCBkcml2ZS0+c2VsZWN0LmIudW5pdCwKLQkJbW9kZSAmIDMsIHNpbmdsZSk7CisJCWRyaXZlLT5uYW1lLCBod2lmLT5jaGFubmVsLCBkcml2ZS0+ZG4gJiAxLCBtb2RlICYgMywgc2luZ2xlKTsKICNlbmRpZiAvKiBDWTgyQzY5M19ERUJVR19JTkZPICovCiAKIAkvKgpAQCAtMjM5LDUwICsyMTksMTEgQEAKIAkJfQogCX0KIAotI2lmIENZODJDNjkzX0RFQlVHX0xPR1MKLQkvKiBmb3IgZGVidWcgbGV0J3Mgc2hvdyB0aGUgcmVnaXN0ZXIgdmFsdWVzICovCi0KLQlpZiAoZHJpdmUtPnNlbGVjdC5iLnVuaXQgPT0gMCkgewotCQkvKgotCQkgKiBnZXQgbWFzdGVyIGRyaXZlIHJlZ2lzdGVycwotCQkgKiBhZGRyZXNzIHNldHVwIGNvbnRyb2wgcmVnaXN0ZXIKLQkJICogaXMgMzIgYml0ICEhIQotCQkgKi8KLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgQ1k4Ml9JREVfQUREUlNFVFVQLCAmYWRkckN0cmwpOwotCQlhZGRyQ3RybCAmPSAweDBGOwotCi0JCS8qIG5vdyBsZXQncyBnZXQgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMgKi8KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBDWTgyX0lERV9NQVNURVJfSU9SLCAmcGNsay50aW1lXzE2cik7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgQ1k4Ml9JREVfTUFTVEVSX0lPVywgJnBjbGsudGltZV8xNncpOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIENZODJfSURFX01BU1RFUl84QklULCAmcGNsay50aW1lXzgpOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIHNldCBzbGF2ZSBkcml2ZSByZWdpc3RlcnMKLQkJICogYWRkcmVzcyBzZXR1cCBjb250cm9sIHJlZ2lzdGVyCi0JCSAqIGlzIDMyIGJpdCAhISEKLQkJICovCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIENZODJfSURFX0FERFJTRVRVUCwgJmFkZHJDdHJsKTsKLQotCQlhZGRyQ3RybCAmPSAweEYwOwotCQlhZGRyQ3RybCA+Pj0gNDsKLQotCQkvKiBub3cgbGV0J3MgZ2V0IHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzICovCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgQ1k4Ml9JREVfU0xBVkVfSU9SLCAmcGNsay50aW1lXzE2cik7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgQ1k4Ml9JREVfU0xBVkVfSU9XLCAmcGNsay50aW1lXzE2dyk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgQ1k4Ml9JREVfU0xBVkVfOEJJVCwgJnBjbGsudGltZV84KTsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlcyAoY2g9JWQsIGRldj0lZCk6IFBJTyB0aW1pbmcgaXMgIgotCQkiKGFkZHI9MHglWCwgaW9yPTB4JVgsIGlvdz0weCVYLCA4Yml0PTB4JVgpXG4iLAotCQlkcml2ZS0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgZHJpdmUtPnNlbGVjdC5iLnVuaXQsCi0JCWFkZHJDdHJsLCBwY2xrLnRpbWVfMTZyLCBwY2xrLnRpbWVfMTZ3LCBwY2xrLnRpbWVfOCk7Ci0jZW5kaWYgLyogQ1k4MkM2OTNfREVCVUdfTE9HUyAqLwotCiAJLyogbGV0J3MgY2FsYyB0aGUgdmFsdWVzIGZvciB0aGlzIFBJTyBtb2RlICovCiAJY29tcHV0ZV9jbG9ja3MocGlvLCAmcGNsayk7CiAKIAkvKiBub3cgbGV0J3Mgd3JpdGUgIHRoZSBjbG9ja3MgcmVnaXN0ZXJzICovCi0JaWYgKGRyaXZlLT5zZWxlY3QuYi51bml0ID09IDApIHsKKwlpZiAoKGRyaXZlLT5kbiAmIDEpID09IDApIHsKIAkJLyoKIAkJICogc2V0IG1hc3RlciBkcml2ZQogCQkgKiBhZGRyZXNzIHNldHVwIGNvbnRyb2wgcmVnaXN0ZXIKQEAgLTMyNCw2MyArMjY1LDExIEBACiAjaWYgQ1k4MkM2OTNfREVCVUdfSU5GTwogCXByaW50ayhLRVJOX0lORk8gIiVzIChjaD0lZCwgZGV2PSVkKTogc2V0IFBJTyB0aW1pbmcgdG8gIgogCQkiKGFkZHI9MHglWCwgaW9yPTB4JVgsIGlvdz0weCVYLCA4Yml0PTB4JVgpXG4iLAotCQlkcml2ZS0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgZHJpdmUtPnNlbGVjdC5iLnVuaXQsCisJCWRyaXZlLT5uYW1lLCBod2lmLT5jaGFubmVsLCBkcml2ZS0+ZG4gJiAxLAogCQlhZGRyQ3RybCwgcGNsay50aW1lXzE2ciwgcGNsay50aW1lXzE2dywgcGNsay50aW1lXzgpOwogI2VuZGlmIC8qIENZODJDNjkzX0RFQlVHX0lORk8gKi8KIH0KIAotLyoKLSAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBpbml0IGFuZCBpcyB1c2VkIHRvIHNldHVwIHRoZSBjeTgyYzY5MyBjaGlwCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X2N5ODJjNjkzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JaWYgKFBDSV9GVU5DKGRldi0+ZGV2Zm4pICE9IDEpCi0JCXJldHVybiAwOwotCi0jaWZkZWYgQ1k4MkM2OTNfU0VURE1BX0NMT0NLCi0JdTggZGF0YSA9IDA7Ci0jZW5kaWYgLyogQ1k4MkM2OTNfU0VURE1BX0NMT0NLICovCi0KLQkvKiB3cml0ZSBpbmZvIGFib3V0IHRoaXMgdmVyaW9uIG9mIHRoZSBkcml2ZXIgKi8KLQlwcmludGsoS0VSTl9JTkZPIENZODJfVkVSU0lPTiAiXG4iKTsKLQotI2lmZGVmIENZODJDNjkzX1NFVERNQV9DTE9DSwotICAgICAgIC8qIG9rYXkgbGV0J3Mgc2V0IHRoZSBETUEgY2xvY2sgc3BlZWQgKi8KLQotCW91dGIoQ1k4Ml9JTkRFWF9DVFJMUkVHMSwgQ1k4Ml9JTkRFWF9QT1JUKTsKLQlkYXRhID0gaW5iKENZODJfREFUQV9QT1JUKTsKLQotI2lmIENZODJDNjkzX0RFQlVHX0lORk8KLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6IFBlcmlwaGVyYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlcjogMHglWFxuIiwKLQkJZGF0YSk7Ci0jZW5kaWYgLyogQ1k4MkM2OTNfREVCVUdfSU5GTyAqLwotCi0JLyoKLQkgKiBmb3Igc29tZSByZWFzb24gc29tZXRpbWVzIHRoZSBETUEgY29udHJvbGxlcgotCSAqIHNwZWVkIGlzIHNldCB0byBBVENMSy8yID8/Pz8gLSB3ZSBmaXggdGhpcyBoZXJlCi0JICoKLQkgKiBub3RlOiBpIGRvbid0IGtub3cgd2hhdCBjYXVzZXMgdGhpcyBzdHJhbmdlIGJlaGF2aW91ciwKLQkgKiAgICAgICBidXQgZXZlbiBjaGFuZ2luZyB0aGUgZG1hIHNwZWVkIGRvZXNuJ3Qgc29sdmUgaXQgOi0oCi0JICogICAgICAgdGhlIGlkZSBwZXJmb3JtYW5jZSBpcyBzdGlsbCBvbmx5IGhhbGYgdGhlIG5vcm1hbCBzcGVlZAotCSAqCi0JICogICAgICAgaWYgYW55Ym9keSBrbm93cyB3aGF0IGdvZXMgd3Jvbmcgd2l0aCBteSBtYWNoaW5lLCBwbGVhc2UKLQkgKiAgICAgICBsZXQgbWUga25vdyAtIEFTSwotCSAqLwotCi0JZGF0YSB8PSAweDAzOwotCi0Jb3V0YihDWTgyX0lOREVYX0NUUkxSRUcxLCBDWTgyX0lOREVYX1BPUlQpOwotCW91dGIoZGF0YSwgQ1k4Ml9EQVRBX1BPUlQpOwotCi0jaWYgQ1k4MkM2OTNfREVCVUdfSU5GTwotCXByaW50ayhLRVJOX0lORk8gIjogTmV3IFBlcmlwaGVyYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlcjogMHglWFxuIiwKLQkJZGF0YSk7Ci0jZW5kaWYgLyogQ1k4MkM2OTNfREVCVUdfSU5GTyAqLwotCi0jZW5kaWYgLyogQ1k4MkM2OTNfU0VURE1BX0NMT0NLICovCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2lvcHNfY3k4MmM2OTMoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlzdGF0aWMgaWRlX2h3aWZfdCAqcHJpbWFyeTsKQEAgLTQwMSw3ICsyOTAsNiBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gY3k4MmM2OTNfY2hpcHNldCBfX2RldmluaXRkYXRhID0gewogCS5uYW1lCQk9IERSVl9OQU1FLAotCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfY3k4MmM2OTMsCiAJLmluaXRfaW9wcwk9IGluaXRfaW9wc19jeTgyYzY5MywKIAkucG9ydF9vcHMJPSAmY3k4MmM2OTNfcG9ydF9vcHMsCiAJLmNoaXBzZXQJPSBpZGVfY3k4MmM2OTMsCkBAIC00NDMsNyArMzMxLDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY3k4MmM2OTNfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY3k4MmM2OTNfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiQ3lwcmVzc19JREUiLAogCS5pZF90YWJsZQk9IGN5ODJjNjkzX3BjaV90YmwsCiAJLnByb2JlCQk9IGN5ODJjNjkzX2luaXRfb25lLApAQCAtNDU0LDEyICszNDIsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgY3k4MmM2OTNfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZjeTgyYzY5M19wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGN5ODJjNjkzX2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmY3k4MmM2OTNfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGN5ODJjNjkzX2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYyBiL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYwppbmRleCA4M2I2M2IzLi44ZjFiMmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvZGVsa2luX2NiLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2RlbGtpbl9jYi5jCkBAIC00NiwxMCArNDYsMjcgQEAKIAkucXVpcmtwcm9jCQk9IGlkZV91bmRlY29kZWRfc2xhdmUsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGtpbl9jYl9pbml0X2NoaXBzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKKwlpbnQgaTsKKworCW91dGIoMHgwMiwgYmFzZSArIDB4MWUpOwkvKiBzZXQgbklFTiB0byBibG9jayBpbnRlcnJ1cHRzICovCisJaW5iKGJhc2UgKyAweDE3KTsJCS8qIHJlYWQgc3RhdHVzIHRvIGNsZWFyIGludGVycnVwdHMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2V0dXApOyArK2kpIHsKKwkJaWYgKHNldHVwW2ldKQorCQkJb3V0YihzZXR1cFtpXSwgYmFzZSArIGkpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gZGVsa2luX2NiX3BvcnRfaW5mbyA9IHsKIAkucG9ydF9vcHMJCT0gJmRlbGtpbl9jYl9wb3J0X29wcywKIAkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfSU9fMzJCSVQgfCBJREVfSEZMQUdfVU5NQVNLX0lSUVMgfAogCQkJCSAgSURFX0hGTEFHX05PX0RNQSwKKwkuaW5pdF9jaGlwc2V0CQk9IGRlbGtpbl9jYl9pbml0X2NoaXBzZXQsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtNTcsNyArNzQsNyBAQAogewogCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKIAl1bnNpZ25lZCBsb25nIGJhc2U7Ci0JaW50IGksIHJjOworCWludCByYzsKIAlod19yZWdzX3QgaHcsICpod3NbXSA9IHsgJmh3LCBOVUxMLCBOVUxMLCBOVUxMIH07CiAKIAlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CkBAIC03MiwxMiArODksOCBAQAogCQlyZXR1cm4gcmM7CiAJfQogCWJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKLQlvdXRiKDB4MDIsIGJhc2UgKyAweDFlKTsJLyogc2V0IG5JRU4gdG8gYmxvY2sgaW50ZXJydXB0cyAqLwotCWluYihiYXNlICsgMHgxNyk7CQkvKiByZWFkIHN0YXR1cyB0byBjbGVhciBpbnRlcnJ1cHRzICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihzZXR1cCk7ICsraSkgewotCQlpZiAoc2V0dXBbaV0pCi0JCQlvdXRiKHNldHVwW2ldLCBiYXNlICsgaSk7Ci0JfQorCisJZGVsa2luX2NiX2luaXRfY2hpcHNldChkZXYpOwogCiAJbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7CiAJaWRlX3N0ZF9pbml0X3BvcnRzKCZodywgYmFzZSArIDB4MTAsIGJhc2UgKyAweDFlKTsKQEAgLTExMCw2ICsxMjMsNDAgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBkZWxraW5fY2Jfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcGNpX3NhdmVfc3RhdGUoZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIHN0YXRlKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWxraW5fY2JfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJaW50IHJjOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIFBDSV9EMCk7CisKKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOworCXBjaV9zZXRfbWFzdGVyKGRldik7CisKKwlpZiAoaG9zdC0+aW5pdF9jaGlwc2V0KQorCQlob3N0LT5pbml0X2NoaXBzZXQoZGV2KTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgZGVsa2luX2NiX3N1c3BlbmQgTlVMTAorI2RlZmluZSBkZWxraW5fY2JfcmVzdW1lIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGVsa2luX2NiX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewogCXsgMHgxMTQ1LCAweGYwMjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXsgMHgxMTQ1LCAweGYwMjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LApAQCAtMTE3LDIxICsxNjQsMjMgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGVsa2luX2NiX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRlbGtpbl9jYl9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJEZWxraW4tQVNLQS1Xb3JrYml0IENhcmRidXMgSURFIiwKIAkuaWRfdGFibGUJPSBkZWxraW5fY2JfcGNpX3RibCwKIAkucHJvYmUJCT0gZGVsa2luX2NiX3Byb2JlLAogCS5yZW1vdmUJCT0gZGVsa2luX2NiX3JlbW92ZSwKKwkuc3VzcGVuZAk9IGRlbGtpbl9jYl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gZGVsa2luX2NiX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGRlbGtpbl9jYl9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRlbGtpbl9jYl9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGRlbGtpbl9jYl9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZGVsa2luX2NiX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChkZWxraW5fY2JfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvZ2VuZXJpYy5jIGIvZHJpdmVycy9pZGUvcGNpL2dlbmVyaWMuYwppbmRleCAwOTJiMjM4Li40NzRmOTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9nZW5lcmljLmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBnZW5lcmljX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGdlbmVyaWNfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiUENJX0lERSIsCiAJLmlkX3RhYmxlCT0gZ2VuZXJpY19wY2lfdGJsLAogCS5wcm9iZQkJPSBnZW5lcmljX2luaXRfb25lLApAQCAtMTc3LDEyICsxNzcsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgZ2VuZXJpY19pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmdlbmVyaWNfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBnZW5lcmljX2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZ2VuZXJpY19wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZ2VuZXJpY19pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NGRlMjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMAlBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICoKLSAqCi0gKiAwMDoxMi4wIFVua25vd24gbWFzcyBzdG9yYWdlIGNvbnRyb2xsZXI6Ci0gKiBUcmlvbmVzIFRlY2hub2xvZ2llcywgSW5jLgotICogVW5rbm93biBkZXZpY2UgMDAwMyAocmV2IDAxKQotICoKLSAqIGhkZTogVURNQSAyICgweDAwMDAgMHgwMDAyKSAoMHgwMDAwIDB4MDAxMCkKLSAqIGhkZjogVURNQSAyICgweDAwMDIgMHgwMDEyKSAoMHgwMDEwIDB4MDAzMCkKLSAqIGhkZTogRE1BIDIgICgweDAwMDAgMHgwMDAyKSAoMHgwMDAwIDB4MDAxMCkKLSAqIGhkZjogRE1BIDIgICgweDAwMDIgMHgwMDEyKSAoMHgwMDEwIDB4MDAzMCkKLSAqIGhkZzogRE1BIDEgICgweDAwMTIgMHgwMDUyKSAoMHgwMDMwIDB4MDA3MCkKLSAqIGhkaDogRE1BIDEgICgweDAwNTIgMHgwMjUyKSAoMHgwMDcwIDB4MDBmMCkKLSAqCi0gKiBpZGUtcGNpLmMgcmVmZXJlbmNlCi0gKgotICogU2luY2UgdGhlcmUgYXJlIHR3byBjYXJkcyB0aGF0IHJlcG9ydCBhbG1vc3QgaWRlbnRpY2FsbHksCi0gKiB0aGUgb25seSBkaXNjZXJuYWJsZSBkaWZmZXJlbmNlIGlzIHRoZSB2YWx1ZXMgcmVwb3J0ZWQgaW4gcGNpY21kLgotICogQm9vdGluZy1CSU9TIGNhcmQgb3IgSFBUMzYzIDo6IHBjaWNtZCA9PSAweDA3Ci0gKiBOb24tYm9vdGFibGUgY2FyZCBvciBIUFQzNDMgOjogcGNpY21kID09IDB4MDUKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0KLSNkZWZpbmUgRFJWX05BTUUgImhwdDM0eCIKLQotI2RlZmluZSBIUFQzNDNfREVCVUdfRFJJVkVfSU5GTwkJMAotCi1zdGF0aWMgdm9pZCBocHQzNHhfc2V0X21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihkcml2ZS0+aHdpZi0+ZGV2KTsKLQl1MzIgcmVnMT0gMCwgdG1wMSA9IDAsIHJlZzIgPSAwLCB0bXAyID0gMDsKLQl1OAkJCWhpX3NwZWVkLCBsb19zcGVlZDsKLQotCWhpX3NwZWVkID0gc3BlZWQgPj4gNDsKLQlsb19zcGVlZCA9IHNwZWVkICYgMHgwZjsKLQotCWlmIChoaV9zcGVlZCAmIDcpIHsKLQkJaGlfc3BlZWQgPSAoaGlfc3BlZWQgJiA0KSA/IDB4MDEgOiAweDEwOwotCX0gZWxzZSB7Ci0JCWxvX3NwZWVkIDw8PSA1OwotCQlsb19zcGVlZCA+Pj0gNTsKLQl9Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQ0LCAmcmVnMSk7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0OCwgJnJlZzIpOwotCXRtcDEgPSAoKGxvX3NwZWVkIDw8ICgzKmRyaXZlLT5kbikpIHwgKHJlZzEgJiB+KDcgPDwgKDMqZHJpdmUtPmRuKSkpKTsKLQl0bXAyID0gKChoaV9zcGVlZCA8PCBkcml2ZS0+ZG4pIHwgKHJlZzIgJiB+KDB4MTEgPDwgZHJpdmUtPmRuKSkpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQ0LCB0bXAxKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0OCwgdG1wMik7Ci0KLSNpZiBIUFQzNDNfREVCVUdfRFJJVkVfSU5GTwotCXByaW50aygiJXM6ICVzIGRyaXZlJWQgKDB4JTA0eCAweCUwNHgpICgweCUwNHggMHglMDR4KSIgXAotCQkiICgweCUwMnggMHglMDJ4KVxuIiwKLQkJZHJpdmUtPm5hbWUsIGlkZV94ZmVyX3ZlcmJvc2Uoc3BlZWQpLAotCQlkcml2ZS0+ZG4sIHJlZzEsIHRtcDEsIHJlZzIsIHRtcDIsCi0JCWhpX3NwZWVkLCBsb19zcGVlZCk7Ci0jZW5kaWYgLyogSFBUMzQzX0RFQlVHX0RSSVZFX0lORk8gKi8KLX0KLQotc3RhdGljIHZvaWQgaHB0MzR4X3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKLXsKLQlocHQzNHhfc2V0X21vZGUoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOwotfQotCi0vKgotICogSWYgdGhlIEJJT1MgZG9lcyBub3Qgc2V0IHRoZSBJTyBiYXNlIGFkZGFyZXNzIHRvIFhYMDAsIDM0MyB3aWxsIGZhaWwuCi0gKi8KLSNkZWZpbmUJSFBUMzRYX1BDSV9JTklUX1JFRwkJMHg4MAotCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9ocHQzNHgoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlpbnQgaSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBocHQzNHhJb0Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKLQl1bnNpZ25lZCBsb25nIGhwdF9hZGRyWzRdID0geyAweDIwLCAweDM0LCAweDI4LCAweDNjIH07Ci0JdW5zaWduZWQgbG9uZyBocHRfYWRkcl9sZW5bNF0gPSB7IDcsIDMsIDcsIDMgfTsKLQl1MTYgY21kOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBIUFQzNFhfUENJX0lOSVRfUkVHLCAweDAwKTsKLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLQotCWlmIChjbWQgJiBQQ0lfQ09NTUFORF9NRU1PUlkpCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweEYwKTsKLQllbHNlCi0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweDIwKTsKLQotCS8qCi0JICogU2luY2UgMjAtMjMgY2FuIGJlIGFzc2lnbmVkIGFuZCBhcmUgUi9XLCB3ZSBjb3JyZWN0IHRoZW0uCi0JICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsIGNtZCAmIH5QQ0lfQ09NTUFORF9JTyk7Ci0JZm9yKGk9MDsgaTw0OyBpKyspIHsKLQkJZGV2LT5yZXNvdXJjZVtpXS5zdGFydCA9IChocHQzNHhJb0Jhc2UgKyBocHRfYWRkcltpXSk7Ci0JCWRldi0+cmVzb3VyY2VbaV0uZW5kID0gZGV2LT5yZXNvdXJjZVtpXS5zdGFydCArIGhwdF9hZGRyX2xlbltpXTsKLQkJZGV2LT5yZXNvdXJjZVtpXS5mbGFncyA9IElPUkVTT1VSQ0VfSU87Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LAotCQkJCShQQ0lfQkFTRV9BRERSRVNTXzAgKyAoaSAqIDQpKSwKLQkJCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0KTsKLQl9Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsIGNtZCk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gZGV2LT5pcnE7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIGhwdDM0eF9wb3J0X29wcyA9IHsKLQkuc2V0X3Bpb19tb2RlCQk9IGhwdDM0eF9zZXRfcGlvX21vZGUsCi0JLnNldF9kbWFfbW9kZQkJPSBocHQzNHhfc2V0X21vZGUsCi19OwotCi0jZGVmaW5lIElERV9IRkxBR1NfSFBUMzRYIFwKLQkoSURFX0hGTEFHX05PX0FUQVBJX0RNQSB8IFwKLQkgSURFX0hGTEFHX05PX0RTQyB8IFwKLQkgSURFX0hGTEFHX05PX0FVVE9ETUEpCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBocHQzNHhfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewotCXsgLyogMDogSFBUMzQzICovCi0JCS5uYW1lCQk9IERSVl9OQU1FLAotCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2hwdDM0eCwKLQkJLnBvcnRfb3BzCT0gJmhwdDM0eF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX0hQVDM0WCB8IElERV9IRkxBR19OT05fQk9PVEFCTEUsCi0JCS5waW9fbWFzawk9IEFUQV9QSU81LAotCX0sCi0JeyAvKiAxOiBIUFQzNDUgKi8KLQkJLm5hbWUJCT0gRFJWX05BTUUsCi0JCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfaHB0MzR4LAotCQkucG9ydF9vcHMJPSAmaHB0MzR4X3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfSFBUMzRYIHwgSURFX0hGTEFHX09GRl9CT0FSRCwKLQkJLnBpb19tYXNrCT0gQVRBX1BJTzUsCi0jaWZkZWYgQ09ORklHX0hQVDM0WF9BVVRPRE1BCi0JCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMiwKLQkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAotCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAotI2VuZGlmCi0JfQotfTsKLQotc3RhdGljIGludCBfX2RldmluaXQgaHB0MzR4X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZDsKLQl1MTYgcGNpY21kID0gMDsKLQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZwY2ljbWQpOwotCi0JZCA9ICZocHQzNHhfY2hpcHNldHNbKHBjaWNtZCAmIFBDSV9DT01NQU5EX01FTU9SWSkgPyAxIDogMF07Ci0KLQlyZXR1cm4gaWRlX3BjaV9pbml0X29uZShkZXYsIGQsIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaHB0MzR4X3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WREVWSUNFKFRUSSwgUENJX0RFVklDRV9JRF9UVElfSFBUMzQzKSwgMCB9LAotCXsgMCwgfSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaHB0MzR4X3BjaV90YmwpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewotCS5uYW1lCQk9ICJIUFQzNHhfSURFIiwKLQkuaWRfdGFibGUJPSBocHQzNHhfcGNpX3RibCwKLQkucHJvYmUJCT0gaHB0MzR4X2luaXRfb25lLAotCS5yZW1vdmUJCT0gaWRlX3BjaV9yZW1vdmUsCi0JLnN1c3BlbmQJPSBpZGVfcGNpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBpZGVfcGNpX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGhwdDM0eF9pZGVfaW5pdCh2b2lkKQotewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGhwdDM0eF9pZGVfZXhpdCh2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoaHB0MzR4X2lkZV9pbml0KTsKLW1vZHVsZV9leGl0KGhwdDM0eF9pZGVfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkFuZHJlIEhlZHJpY2siKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUENJIGRyaXZlciBtb2R1bGUgZm9yIEhpZ2hwb2ludCAzNHggSURFIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMKaW5kZXggYTE5NDAyMi4uYTc5MDllOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9ocHQzNjYuYwpAQCAtMyw3ICszLDcgQEAKICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMQkgICAgICAgIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMwkJUmVkIEhhdCBJbmMKICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNwkJQmFydGxvbWllaiBab2xuaWVya2lld2ljegotICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDgJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKICAqIFRoYW5rcyB0byBIaWdoUG9pbnQgVGVjaG5vbG9naWVzIGZvciB0aGVpciBhc3Npc3RhbmNlLCBhbmQgaGFyZHdhcmUuCiAgKiBTcGVjaWFsIFRoYW5rcyB0byBKb24gQnVyY2htb3JlIGluIFNhbkRpZWdvIGZvciB0aGUgZGVlcCBwb2NrZXRzLCBoaXMKQEAgLTc0OCwyNiArNzQ4LDI0IEBACiAJc3RydWN0IHBjaV9kZXYJKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oaHdpZi0+ZGV2KTsKIAotCWlmIChkcml2ZS0+cXVpcmtfbGlzdCkgewotCQlpZiAoaW5mby0+Y2hpcF90eXBlID49IEhQVDM3MCkgewotCQkJdTggc2NyMSA9IDA7CisJaWYgKGRyaXZlLT5xdWlya19saXN0ID09IDApCisJCXJldHVybjsKIAotCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDVhLCAmc2NyMSk7Ci0JCQlpZiAoKChzY3IxICYgMHgxMCkgPj4gNCkgIT0gbWFzaykgewotCQkJCWlmIChtYXNrKQotCQkJCQlzY3IxIHw9ICAweDEwOwotCQkJCWVsc2UKLQkJCQkJc2NyMSAmPSB+MHgxMDsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDVhLCBzY3IxKTsKLQkJCX0KLQkJfSBlbHNlIHsKKwlpZiAoaW5mby0+Y2hpcF90eXBlID49IEhQVDM3MCkgeworCQl1OCBzY3IxID0gMDsKKworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NWEsICZzY3IxKTsKKwkJaWYgKCgoc2NyMSAmIDB4MTApID4+IDQpICE9IG1hc2spIHsKIAkJCWlmIChtYXNrKQotCQkJCWRpc2FibGVfaXJxKGh3aWYtPmlycSk7CisJCQkJc2NyMSB8PSAgMHgxMDsKIAkJCWVsc2UKLQkJCQllbmFibGVfaXJxIChod2lmLT5pcnEpOworCQkJCXNjcjEgJj0gfjB4MTA7CisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDVhLCBzY3IxKTsKIAkJfQotCX0gZWxzZQotCQlvdXRiKEFUQV9ERVZDVExfT0JTIHwgKG1hc2sgPyAyIDogMCksIGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKKwl9IGVsc2UgaWYgKG1hc2spCisJCWRpc2FibGVfaXJxKGh3aWYtPmlycSk7CisJZWxzZQorCQllbmFibGVfaXJxKGh3aWYtPmlycSk7CiB9CiAKIC8qCkBAIC04MzUsNyArODMzLDcgQEAKIAkJaWYgKGRtYV9zdGF0ICYgMHgwMSkKIAkJCWhwdDM3MF9pcnFfdGltZW91dChkcml2ZSk7CiAJfQotCXJldHVybiBfX2lkZV9kbWFfZW5kKGRyaXZlKTsKKwlyZXR1cm4gaWRlX2RtYV9lbmQoZHJpdmUpOwogfQogCiBzdGF0aWMgdm9pZCBocHQzNzBfZG1hX3RpbWVvdXQoaWRlX2RyaXZlX3QgKmRyaXZlKQpAQCAtODYzLDkgKzg2MSw2IEBACiAJaWYgKGRtYV9zdGF0ICYgNCkKIAkJcmV0dXJuIDE7CiAKLQlpZiAoIWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAoJXMpIGNhbGxlZCB3aGlsZSBub3Qgd2FpdGluZ1xuIiwKLQkJCQlkcml2ZS0+bmFtZSwgX19mdW5jX18pOwogCXJldHVybiAwOwogfQogCkBAIC04ODAsNyArODc1LDcgQEAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIG1jcl9hZGRyLCAmbWNyKTsKIAlpZiAoYndzciAmIG1hc2spCiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIG1jcl9hZGRyLCBtY3IgfCAweDMwKTsKLQlyZXR1cm4gX19pZGVfZG1hX2VuZChkcml2ZSk7CisJcmV0dXJuIGlkZV9kbWFfZW5kKGRyaXZlKTsKIH0KIAogLyoqCkBAIC0xMjkyLDcgKzEyODcsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX2hwdDM2NihpZGVfaHdpZl90ICpod2lmKQogewotCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJc3RydWN0IGhwdF9pbmZvICppbmZvCT0gaHB0M3h4X2dldF9pbmZvKGh3aWYtPmRldik7CiAJaW50IHNlcmlhbGl6ZQkJPSBIUFRfU0VSSUFMSVpFX0lPOwogCXU4ICBjaGlwX3R5cGUJCT0gaW5mby0+Y2hpcF90eXBlOwpAQCAtMTQ1Niw3ICsxNDUwLDcgQEAKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCiAJLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKLQkuZG1hX2VuZAkJPSBfX2lkZV9kbWFfZW5kLAorCS5kbWFfZW5kCQk9IGlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGhwdDM2Nl9kbWFfbG9zdF9pcnEsCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKQEAgLTE2MjIsNyArMTYxNiw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhwdDM2Nl9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBocHQzNjZfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiSFBUMzY2X0lERSIsCiAJLmlkX3RhYmxlCT0gaHB0MzY2X3BjaV90YmwsCiAJLnByb2JlCQk9IGhwdDM2Nl9pbml0X29uZSwKQEAgLTE2MzMsMTIgKzE2MjcsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgaHB0MzY2X2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmaHB0MzY2X3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaHB0MzY2X2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaHB0MzY2X3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChocHQzNjZfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2l0ODIxMy5jIGIvZHJpdmVycy9pZGUvcGNpL2l0ODIxMy5jCmluZGV4IDA5NTRjY2QuLjdjMmZlZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9pdDgyMTMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvaXQ4MjEzLmMKQEAgLTE4OSw3ICsxODksNyBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaXQ4MjEzX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGl0ODIxM19wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJJVEU4MjEzX0lERSIsCiAJLmlkX3RhYmxlCT0gaXQ4MjEzX3BjaV90YmwsCiAJLnByb2JlCQk9IGl0ODIxM19pbml0X29uZSwKQEAgLTIwMCwxMiArMjAwLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGl0ODIxM19pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJml0ODIxM19wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGl0ODIxM19pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJml0ODIxM19wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaXQ4MjEzX2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9pdDgyMXguYyBiL2RyaXZlcnMvaWRlL3BjaS9pdDgyMXguYwppbmRleCA0NmVkZDA4Li45OTVlMThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvaXQ4MjF4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2l0ODIxeC5jCkBAIC0xMzgsOCArMTM4LDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCXN0cnVjdCBpdDgyMXhfZGV2ICppdGRldiA9IGlkZV9nZXRfaHdpZmRhdGEoaHdpZik7CiAJaW50IGNoYW5uZWwgPSBod2lmLT5jaGFubmVsOwotCWludCB1bml0ID0gZHJpdmUtPnNlbGVjdC5iLnVuaXQ7Ci0JdTggY29uZjsKKwl1OCB1bml0ID0gZHJpdmUtPmRuICYgMSwgY29uZjsKIAogCS8qIFByb2dyYW0gVURNQSB0aW1pbmcgYml0cyAqLwogCWlmKGl0ZGV2LT5jbG9ja19tb2RlID09IEFUQV82NikKQEAgLTE2OCwxMyArMTY3LDExIEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJc3RydWN0IGl0ODIxeF9kZXYgKml0ZGV2ID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKKwlpZGVfZHJpdmVfdCAqcGFpcjsKKwlpbnQgY2xvY2ssIGFsdGNsb2NrLCBzZWwgPSAwOworCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxLCB2OwogCi0JdTggdW5pdCA9IGRyaXZlLT5zZWxlY3QuYi51bml0OwotCWlkZV9kcml2ZV90ICpwYWlyID0gJmh3aWYtPmRyaXZlc1sxLXVuaXRdOwotCi0JaW50IGNsb2NrLCBhbHRjbG9jazsKLQl1OCB2OwotCWludCBzZWwgPSAwOworCXBhaXIgPSAmaHdpZi0+ZHJpdmVzWzEgLSB1bml0XTsKIAogCWlmKGl0ZGV2LT53YW50WzBdWzBdID4gaXRkZXYtPndhbnRbMV1bMF0pIHsKIAkJY2xvY2sgPSBpdGRldi0+d2FudFswXVsxXTsKQEAgLTI0MCwxNiArMjM3LDE3IEBACiAKIHN0YXRpYyB2b2lkIGl0ODIxeF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaXQ4MjF4X2RldiAqaXRkZXYgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOwotCWludCB1bml0ID0gZHJpdmUtPnNlbGVjdC5iLnVuaXQ7Ci0JaWRlX2RyaXZlX3QgKnBhaXIgPSAmaHdpZi0+ZHJpdmVzWzEgLSB1bml0XTsKLQl1OCBzZXRfcGlvID0gcGlvOworCWlkZV9kcml2ZV90ICpwYWlyOworCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxLCBzZXRfcGlvID0gcGlvOwogCiAJLyogU3BlYyBzYXlzIDg5IHJlZiBkcml2ZXIgdXNlcyA4OCAqLwogCXN0YXRpYyB1MTYgcGlvX3RpbWluZ3NbXT0geyAweEFBODgsIDB4QTM4MiwgMHhBMTgxLCAweDMzMzIsIDB4MzEyMSB9OwogCXN0YXRpYyB1OCBwaW9fd2FudFtdICAgID0geyBBVEFfNjYsIEFUQV82NiwgQVRBXzY2LCBBVEFfNjYsIEFUQV9BTlkgfTsKIAorCXBhaXIgPSAmaHdpZi0+ZHJpdmVzWzEgLSB1bml0XTsKKwogCS8qCiAJICogQ29tcHV0ZSB0aGUgYmVzdCBQSU8gbW9kZSB3ZSBjYW4gZm9yIGEgZ2l2ZW4gZGV2aWNlLiBXZSBtdXN0CiAJICogcGljayBhIHNwZWVkIHRoYXQgZG9lcyBub3QgY2F1c2UgcHJvYmxlbXMgd2l0aCB0aGUgb3RoZXIgZGV2aWNlCkBAIC0yODYsOSArMjg0LDcgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAlzdHJ1Y3QgaXQ4MjF4X2RldiAqaXRkZXYgPSAodm9pZCAqKWlkZV9nZXRfaHdpZmRhdGEoaHdpZik7Ci0JaW50IHVuaXQgPSBkcml2ZS0+c2VsZWN0LmIudW5pdDsKLQlpbnQgY2hhbm5lbCA9IGh3aWYtPmNoYW5uZWw7Ci0JdTggY29uZjsKKwl1OCB1bml0ID0gZHJpdmUtPmRuICYgMSwgY2hhbm5lbCA9IGh3aWYtPmNoYW5uZWwsIGNvbmY7CiAKIAlzdGF0aWMgdTE2IGRtYVtdCT0geyAweDg4NjYsIDB4MzIyMiwgMHgzMTIxIH07CiAJc3RhdGljIHU4IG13ZG1hX3dhbnRbXQk9IHsgQVRBX0FOWSwgQVRBXzY2LCBBVEFfQU5ZIH07CkBAIC0zMjUsOSArMzIxLDcgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAlzdHJ1Y3QgaXQ4MjF4X2RldiAqaXRkZXYgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOwotCWludCB1bml0ID0gZHJpdmUtPnNlbGVjdC5iLnVuaXQ7Ci0JaW50IGNoYW5uZWwgPSBod2lmLT5jaGFubmVsOwotCXU4IGNvbmY7CisJdTggdW5pdCA9IGRyaXZlLT5kbiAmIDEsIGNoYW5uZWwgPSBod2lmLT5jaGFubmVsLCBjb25mOwogCiAJc3RhdGljIHUxNiB1ZG1hW10JPSB7IDB4NDQzMywgMHg0MjMxLCAweDMxMjEsIDB4MjEyMSwgMHgxMTExLCAweDIyMTEsIDB4MTExMSB9OwogCXN0YXRpYyB1OCB1ZG1hX3dhbnRbXQk9IHsgQVRBX0FOWSwgQVRBXzUwLCBBVEFfQU5ZLCBBVEFfNjYsIEFUQV82NiwgQVRBXzUwLCBBVEFfNjYgfTsKQEAgLTM2OSw3ICszNjMsOCBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaXQ4MjF4X2RldiAqaXRkZXYgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOwotCWludCB1bml0ID0gZHJpdmUtPnNlbGVjdC5iLnVuaXQ7CisJdTggdW5pdCA9IGRyaXZlLT5kbiAmIDE7CisKIAlpZihpdGRldi0+bXdkbWFbdW5pdF0gIT0gTVdETUFfT0ZGKQogCQlpdDgyMXhfcHJvZ3JhbShkcml2ZSwgaXRkZXYtPm13ZG1hW3VuaXRdKTsKIAllbHNlIGlmKGl0ZGV2LT51ZG1hW3VuaXRdICE9IFVETUFfT0ZGICYmIGl0ZGV2LT50aW1pbmcxMCkKQEAgLTM4OSw5ICszODQsMTAgQEAKIHN0YXRpYyBpbnQgaXQ4MjF4X2RtYV9lbmQoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlpbnQgdW5pdCA9IGRyaXZlLT5zZWxlY3QuYi51bml0OwogCXN0cnVjdCBpdDgyMXhfZGV2ICppdGRldiA9IGlkZV9nZXRfaHdpZmRhdGEoaHdpZik7Ci0JaW50IHJldCA9IF9faWRlX2RtYV9lbmQoZHJpdmUpOworCWludCByZXQgPSBpZGVfZG1hX2VuZChkcml2ZSk7CisJdTggdW5pdCA9IGRyaXZlLT5kbiAmIDE7CisKIAlpZihpdGRldi0+bXdkbWFbdW5pdF0gIT0gTVdETUFfT0ZGKQogCQlpdDgyMXhfcHJvZ3JhbShkcml2ZSwgaXRkZXYtPnBpb1t1bml0XSk7CiAJcmV0dXJuIHJldDsKQEAgLTQ1NCw3ICs0NTAsNyBAQAogCQkgKglJUlEgbWFzayBhcyB3ZSBtYXkgd2VsbCBiZSBpbiBQSU8gKGVnIHJldiAweDEwKQogCQkgKglmb3Igbm93IGFuZCB3ZSBrbm93IHVubWFza2luZyBpcyBzYWZlIG9uIHRoaXMgY2hpcHNldC4KIAkJICovCi0JCWRyaXZlLT51bm1hc2sgPSAxOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19VTk1BU0s7CiAJfSBlbHNlIHsKIAkvKgogCSAqCVBlcmZvcm0gZml4dXBzIG9uIHNtYXJ0IG1vZGUuIFdlIG5lZWQgdG8gImxvc2UiIHNvbWUKQEAgLTY4MCw3ICs2NzYsNyBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaXQ4MjF4X3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGl0ODIxeF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJJVEU4MjF4IElERSIsCiAJLmlkX3RhYmxlCT0gaXQ4MjF4X3BjaV90YmwsCiAJLnByb2JlCQk9IGl0ODIxeF9pbml0X29uZSwKQEAgLTY5MSwxMiArNjg3LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGl0ODIxeF9pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJml0ODIxeF9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGl0ODIxeF9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJml0ODIxeF9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaXQ4MjF4X2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9qbWljcm9uLmMgYi9kcml2ZXJzL2lkZS9wY2kvam1pY3Jvbi5jCmluZGV4IGFjZDY0NzEuLjlhNjg0MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9qbWljcm9uLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2ptaWNyb24uYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBqbWljcm9uX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGptaWNyb25fcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiSk1pY3JvbiBJREUiLAogCS5pZF90YWJsZQk9IGptaWNyb25fcGNpX3RibCwKIAkucHJvYmUJCT0gam1pY3Jvbl9pbml0X29uZSwKQEAgLTE2MCwxMiArMTYwLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGptaWNyb25faWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZqbWljcm9uX3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgam1pY3Jvbl9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmptaWNyb25fcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGptaWNyb25faWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL25zODc0MTUuYyBiL2RyaXZlcnMvaWRlL3BjaS9uczg3NDE1LmMKaW5kZXggNTNiZDY0NS4uMTM3ODkwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL25zODc0MTUuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvbnM4NzQxNS5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnM4NzQxNV9jb3VudCA9IDAsIG5zODc0MTVfY29udHJvbFtNQVhfSFdJRlNdID0geyAwIH07CiAKIC8qCi0gKiBUaGlzIHJvdXRpbmUgZWl0aGVyIGVuYWJsZXMvZGlzYWJsZXMgKGFjY29yZGluZyB0byBkcml2ZS0+cHJlc2VudCkKKyAqIFRoaXMgcm91dGluZSBlaXRoZXIgZW5hYmxlcy9kaXNhYmxlcyAoYWNjb3JkaW5nIHRvIElERV9ERkxBR19QUkVTRU5UKQogICogdGhlIElSUSBhc3NvY2lhdGVkIHdpdGggdGhlIHBvcnQgKEhXSUYoZHJpdmUpKSwKICAqIGFuZCBzZWxlY3RzIGVpdGhlciBQSU8gb3IgRE1BIGhhbmRzaGFraW5nIGZvciB0aGUgbmV4dCBJL08gb3BlcmF0aW9uLgogICovCkBAIC0xNTMsMTEgKzE1MywxNSBAQAogCiAJLyogQWRqdXN0IElSUSBlbmFibGUgYml0ICovCiAJYml0ID0gMSA8PCAoOCArIGh3aWYtPmNoYW5uZWwpOwotCW5ldyA9IGRyaXZlLT5wcmVzZW50ID8gKG5ldyAmIH5iaXQpIDogKG5ldyB8IGJpdCk7CisKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKQorCQluZXcgJj0gfmJpdDsKKwllbHNlCisJCW5ldyB8PSBiaXQ7CiAKIAkvKiBTZWxlY3QgUElPIG9yIERNQSwgRE1BIG1heSBvbmx5IGJlIHNlbGVjdGVkIGZvciBvbmUgZHJpdmUvY2hhbm5lbC4gKi8KLQliaXQgICA9IDEgPDwgKDIwICsgZHJpdmUtPnNlbGVjdC5iLnVuaXQgICAgICAgKyAoaHdpZi0+Y2hhbm5lbCA8PCAxKSk7Ci0Jb3RoZXIgPSAxIDw8ICgyMCArICgxIC0gZHJpdmUtPnNlbGVjdC5iLnVuaXQpICsgKGh3aWYtPmNoYW5uZWwgPDwgMSkpOworCWJpdCAgID0gMSA8PCAoMjAgKyAoZHJpdmUtPmRuICYgMSkgKyAoaHdpZi0+Y2hhbm5lbCA8PCAxKSk7CisJb3RoZXIgPSAxIDw8ICgyMCArICgxIC0gKGRyaXZlLT5kbiAmIDEpKSArIChod2lmLT5jaGFubmVsIDw8IDEpKTsKIAluZXcgPSB1c2VfZG1hID8gKChuZXcgJiB+b3RoZXIpIHwgYml0KSA6IChuZXcgJiB+Yml0KTsKIAogCWlmIChuZXcgIT0gKm9sZCkgewpAQCAtMTg3LDcgKzE5MSw4IEBACiAKIHN0YXRpYyB2b2lkIG5zODc0MTVfc2VsZWN0cHJvYyAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCW5zODc0MTVfcHJlcGFyZV9kcml2ZSAoZHJpdmUsIGRyaXZlLT51c2luZ19kbWEpOworCW5zODc0MTVfcHJlcGFyZV9kcml2ZShkcml2ZSwKKwkJCSAgICAgICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSk7CiB9CiAKIHN0YXRpYyBpbnQgbnM4NzQxNV9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTMzNCw3ICszMzksNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuczg3NDE1X3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5zODc0MTVfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiTlM4NzQxNV9JREUiLAogCS5pZF90YWJsZQk9IG5zODc0MTVfcGNpX3RibCwKIAkucHJvYmUJCT0gbnM4NzQxNV9pbml0X29uZSwKQEAgLTM0NSwxMiArMzUwLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG5zODc0MTVfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZuczg3NDE1X3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbnM4NzQxNV9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm5zODc0MTVfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG5zODc0MTVfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL29wdGk2MjEuYyBiL2RyaXZlcnMvaWRlL3BjaS9vcHRpNjIxLmMKaW5kZXggM2RlMTFkZC4uNjA0OGVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL29wdGk2MjEuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvb3B0aTYyMS5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAltaXNjID0gYWRkcl90aW1pbmdzW2Nsa11bYWRkcl9waW9dOwogCiAJLyogc2VsZWN0IEluZGV4LTAvMSBmb3IgUmVnaXN0ZXItQS9CICovCi0Jd3JpdGVfcmVnKGRyaXZlLT5zZWxlY3QuYi51bml0LCBNSVNDX1JFRyk7CisJd3JpdGVfcmVnKGRyaXZlLT5kbiAmIDEsIE1JU0NfUkVHKTsKIAkvKiBzZXQgcmVhZCBjeWNsZSB0aW1pbmdzICovCiAJd3JpdGVfcmVnKHRpbSwgUkVBRF9SRUcpOwogCS8qIHNldCB3cml0ZSBjeWNsZSB0aW1pbmdzICovCkBAIC0yMjAsNyArMjIwLDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgb3B0aTYyMV9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBvcHRpNjIxX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIk9wdGk2MjFfSURFIiwKIAkuaWRfdGFibGUJPSBvcHRpNjIxX3BjaV90YmwsCiAJLnByb2JlCQk9IG9wdGk2MjFfaW5pdF9vbmUsCkBAIC0yMzEsMTIgKzIzMSwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBvcHRpNjIxX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmb3B0aTYyMV9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9wdGk2MjFfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZvcHRpNjIxX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChvcHRpNjIxX2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9uZXcuYyBiL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9uZXcuYwppbmRleCA5ZmM1OTk2Li4yMTFhZTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfbmV3LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X25ldy5jCkBAIC01NjEsNyArNTYxLDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGRjMjAybmV3X3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBkYzIwMm5ld19wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJQcm9taXNlX0lERSIsCiAJLmlkX3RhYmxlCT0gcGRjMjAybmV3X3BjaV90YmwsCiAJLnByb2JlCQk9IHBkYzIwMm5ld19pbml0X29uZSwKQEAgLTU3MiwxMiArNTcyLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBkYzIwMm5ld19pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJnBkYzIwMm5ld19wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHBkYzIwMm5ld19pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnBkYzIwMm5ld19wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocGRjMjAybmV3X2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYyBiL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYwppbmRleCBjYjZkMmEwLi43OTk1NTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIHsKIAlpZiAoZHJpdmUtPmN1cnJlbnRfc3BlZWQgPiBYRkVSX1VETUFfMikKIAkJcGRjX29sZF9lbmFibGVfNjZNSHpfY2xvY2soZHJpdmUtPmh3aWYpOwotCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2sgfHwgZHJpdmUtPmFkZHJlc3NpbmcgPT0gMSkgeworCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2sgfHwgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpKSB7CiAJCXN0cnVjdCByZXF1ZXN0ICpycQk9IEhXR1JPVVAoZHJpdmUpLT5ycTsKIAkJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwogCQl1bnNpZ25lZCBsb25nIGhpZ2hfMTYJPSBod2lmLT5leHRyYV9iYXNlIC0gMTY7CkBAIC0xODgsNyArMTg4LDcgQEAKIAogc3RhdGljIGludCBwZGMyMDJ4eF9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrIHx8IGRyaXZlLT5hZGRyZXNzaW5nID09IDEpIHsKKwlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrIHx8IChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KSkgewogCQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CiAJCXVuc2lnbmVkIGxvbmcgaGlnaF8xNgk9IGh3aWYtPmV4dHJhX2Jhc2UgLSAxNjsKIAkJdW5zaWduZWQgbG9uZyBhdGFwaV9yZWcJPSBoaWdoXzE2ICsgKGh3aWYtPmNoYW5uZWwgPyAweDI0IDogMHgyMCk7CkBAIC0yMDAsNyArMjAwLDcgQEAKIAl9CiAJaWYgKGRyaXZlLT5jdXJyZW50X3NwZWVkID4gWEZFUl9VRE1BXzIpCiAJCXBkY19vbGRfZGlzYWJsZV82Nk1Iel9jbG9jayhkcml2ZS0+aHdpZik7Ci0JcmV0dXJuIF9faWRlX2RtYV9lbmQoZHJpdmUpOworCXJldHVybiBpZGVfZG1hX2VuZChkcml2ZSk7CiB9CiAKIHN0YXRpYyBpbnQgcGRjMjAyeHhfZG1hX3Rlc3RfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTMzMyw3ICszMzMsNyBAQAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKIAkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAotCS5kbWFfZW5kCQk9IF9faWRlX2RtYV9lbmQsCisJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBwZGMyMDJ4eF9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBwZGMyMDJ4eF9kbWFfbG9zdF9pcnEsCiAJLmRtYV90aW1lb3V0CQk9IHBkYzIwMnh4X2RtYV90aW1lb3V0LApAQCAtNDI2LDcgKzQyNiw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBkYzIwMnh4X3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBkYzIwMnh4X3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIlByb21pc2VfT2xkX0lERSIsCiAJLmlkX3RhYmxlCT0gcGRjMjAyeHhfcGNpX3RibCwKIAkucHJvYmUJCT0gcGRjMjAyeHhfaW5pdF9vbmUsCkBAIC00MzcsMTIgKzQzNywxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwZGMyMDJ4eF9pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJnBkYzIwMnh4X3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcGRjMjAyeHhfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwZGMyMDJ4eF9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocGRjMjAyeHhfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BpaXguYyBiL2RyaXZlcnMvaWRlL3BjaS9waWl4LmMKaW5kZXggYTA2YzAzZi4uZDYzZjlmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3BpaXguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcGlpeC5jCkBAIC0yMTUsMTcgKzIxNSwyNiBAQAogfQogCiAvKioKLSAqCXBpaXhfZG1hX2NsZWFyX2lycQktCWNsZWFyIEJNRE1BIHN0YXR1cwotICoJQGRyaXZlOiBJREUgZHJpdmUgdG8gY2xlYXIKKyAqCWljaF9jbGVhcl9pcnEJLQljbGVhciBCTURNQSBzdGF0dXMKKyAqCUBkcml2ZTogSURFIGRyaXZlCiAgKgotICoJQ2FsbGVkIGZyb20gaWRlX2ludHIoKSBmb3IgUElPIGludGVycnVwdHMKLSAqCXRvIGNsZWFyIEJNRE1BIHN0YXR1cyBhcyBuZWVkZWQgYnkgSUNIeAorICoJSUNIeCBjb250b2xsZXJzIHNldCBETUEgSU5UUiBubyBtYXR0ZXIgRE1BIG9yIFBJTy4KKyAqCUJNRE1BIHN0YXR1cyBtaWdodCBuZWVkIHRvIGJlIGNsZWFyZWQgZXZlbiBmb3IKKyAqCVBJTyBpbnRlcnJ1cHRzIHRvIHByZXZlbnQgc3B1cmlvdXMvbG9zdCBJUlEuCiAgKi8KLXN0YXRpYyB2b2lkIHBpaXhfZG1hX2NsZWFyX2lycShpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBpY2hfY2xlYXJfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CiAJdTggZG1hX3N0YXQ7CiAKKwkvKgorCSAqIGlkZV9kbWFfZW5kKCkgbmVlZHMgQk1ETUEgc3RhdHVzIGZvciBlcnJvciBjaGVja2luZy4KKwkgKiBTbywgc2tpcCBjbGVhcmluZyBCTURNQSBzdGF0dXMgaGVyZSBhbmQgbGVhdmUgaXQKKwkgKiB0byBpZGVfZG1hX2VuZCgpIGlmIHRoaXMgaXMgRE1BIGludGVycnVwdC4KKwkgKi8KKwlpZiAoZHJpdmUtPndhaXRpbmdfZm9yX2RtYSB8fCBod2lmLT5kbWFfYmFzZSA9PSAwKQorCQlyZXR1cm47CisKIAkvKiBjbGVhciB0aGUgSU5UUiAmIEVSUk9SIGJpdHMgKi8KIAlkbWFfc3RhdCA9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKIAkvKiBTaG91bGQgd2UgZm9yY2UgdGhlIGJpdCBhcyB3ZWxsID8gKi8KQEAgLTI0OSw2ICsyNTgsNyBAQAogCXsgMHgyN0RGLCAweDEwMjUsIDB4MDExMCB9LAkvKiBJQ0g3IG9uIEFjZXIgMzY4MldMTWkgKi8KIAl7IDB4MjdERiwgMHgxMDQzLCAweDEyNjcgfSwJLyogSUNINyBvbiBBc3VzIFc1RiAqLwogCXsgMHgyN0RGLCAweDEwM0MsIDB4MzBBMSB9LAkvKiBJQ0g3IG9uIEhQIENvbXBhcSBuYzI0MDAgKi8KKwl7IDB4MjdERiwgMHgxMDcxLCAweEQyMjEgfSwJLyogSUNINyBvbiBIZXJjdWxlcyBFQy05MDAgKi8KIAl7IDB4MjRDQSwgMHgxMDI1LCAweDAwNjEgfSwJLyogSUNINCBvbiBBY2VyIEFzcGlyZSAyMDIzV0xNaSAqLwogCXsgMHgyNjUzLCAweDEwNDMsIDB4ODJEOCB9LAkvKiBJQ0g2TSBvbiBBc3VzIEVlZSA3MDEgKi8KIAkvKiBlbmQgbWFya2VyICovCkBAIC0yOTMsMjEgKzMwMywxOSBAQAogCQlod2lmLT51bHRyYV9tYXNrID0gaHdpZi0+bXdkbWFfbWFzayA9IGh3aWYtPnN3ZG1hX21hc2sgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX2ljaChpZGVfaHdpZl90ICpod2lmKQotewotCWluaXRfaHdpZl9waWl4KGh3aWYpOwotCi0JLyogSUNIeCBuZWVkIHRvIGNsZWFyIHRoZSBCTURNQSBzdGF0dXMgZm9yIGFsbCBpbnRlcnJ1cHRzICovCi0JaWYgKGh3aWYtPmRtYV9iYXNlKQotCQlod2lmLT5pZGVfZG1hX2NsZWFyX2lycSA9ICZwaWl4X2RtYV9jbGVhcl9pcnE7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHBpaXhfcG9ydF9vcHMgPSB7CiAJLnNldF9waW9fbW9kZQkJPSBwaWl4X3NldF9waW9fbW9kZSwKIAkuc2V0X2RtYV9tb2RlCQk9IHBpaXhfc2V0X2RtYV9tb2RlLAogCS5jYWJsZV9kZXRlY3QJCT0gcGlpeF9jYWJsZV9kZXRlY3QsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBpY2hfcG9ydF9vcHMgPSB7CisJLnNldF9waW9fbW9kZQkJPSBwaWl4X3NldF9waW9fbW9kZSwKKwkuc2V0X2RtYV9tb2RlCQk9IHBpaXhfc2V0X2RtYV9tb2RlLAorCS5jbGVhcl9pcnEJCT0gaWNoX2NsZWFyX2lycSwKKwkuY2FibGVfZGV0ZWN0CQk9IHBpaXhfY2FibGVfZGV0ZWN0LAorfTsKKwogI2lmbmRlZiBDT05GSUdfSUE2NAogICNkZWZpbmUgSURFX0hGTEFHU19QSUlYIElERV9IRkxBR19MRUdBQ1lfSVJRUwogI2Vsc2UKQEAgLTMzMSw5ICszMzksOSBAQAogCXsgXAogCQkubmFtZQkJPSBEUlZfTkFNRSwgXAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2ljaCwgXAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2ljaCwgXAorCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3BpaXgsIFwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDEsMHg4MCwweDgwfSwgezB4NDMsMHg4MCwweDgwfX0sIFwKLQkJLnBvcnRfb3BzCT0gJnBpaXhfcG9ydF9vcHMsIFwKKwkJLnBvcnRfb3BzCT0gJmljaF9wb3J0X29wcywgXAogCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfUElJWCwgXAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwgXAogCQkuc3dkbWFfbWFzawk9IEFUQV9TV0RNQTJfT05MWSwgXApAQCAtNDQ0LDcgKzQ1Miw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBpaXhfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcGlpeF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJQSUlYX0lERSIsCiAJLmlkX3RhYmxlCT0gcGlpeF9wY2lfdGJsLAogCS5wcm9iZQkJPSBwaWl4X2luaXRfb25lLApAQCAtNDU2LDEyICs0NjQsMTIgQEAKIHN0YXRpYyBpbnQgX19pbml0IHBpaXhfaWRlX2luaXQodm9pZCkKIHsKIAlwaWl4X2NoZWNrXzQ1MG54KCk7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGlpeF9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHBpaXhfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwaWl4X3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChwaWl4X2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9yejEwMDAuYyBiL2RyaXZlcnMvaWRlL3BjaS9yejEwMDAuYwppbmRleCBjMTE3YTA2Li43ZGFmMDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvcnoxMDAwLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3J6MTAwMC5jCkBAIC01OSw3ICs1OSw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJ6MTAwMF9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciByejEwMDBfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiUloxMDAwX0lERSIsCiAJLmlkX3RhYmxlCT0gcnoxMDAwX3BjaV90YmwsCiAJLnByb2JlCQk9IHJ6MTAwMF9pbml0X29uZSwKQEAgLTY4LDEyICs2OCwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCByejEwMDBfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZyejEwMDBfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCByejEwMDBfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZyejEwMDBfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHJ6MTAwMF9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2MxMjAwLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2MxMjAwLmMKaW5kZXggYmRjMWZlZC4uZjFhODc1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NjMTIwMC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zYzEyMDAuYwpAQCAtMTI2LDcgKzEyNiw2IEBACiB7CiAJaWRlX2h3aWZfdAkJKmh3aWYgPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3QgcGNpX2RldgkJKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQlpbnQJCQl1bml0ID0gZHJpdmUtPnNlbGVjdC5iLnVuaXQ7CiAJdW5zaWduZWQgaW50CQlyZWcsIHRpbWluZ3M7CiAJdW5zaWduZWQgc2hvcnQJCXBjaV9jbG9jazsKIAl1bnNpZ25lZCBpbnQJCWJhc2VyZWcgPSBod2lmLT5jaGFubmVsID8gMHg1MCA6IDB4NDA7CkBAIC0xNTUsNyArMTU0LDcgQEAKIAllbHNlCiAJCXRpbWluZ3MgPSBtd2RtYV90aW1pbmdbcGNpX2Nsb2NrXVttb2RlIC0gWEZFUl9NV19ETUFfMF07CiAKLQlpZiAodW5pdCA9PSAwKSB7CQkJLyogYXJlIHdlIGNvbmZpZ3VyaW5nIGRyaXZlMD8gKi8KKwlpZiAoKGRyaXZlLT5kbiAmIDEpID09IDApIHsKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgYmFzZXJlZyArIDQsICZyZWcpOwogCQl0aW1pbmdzIHw9IHJlZyAmIDB4ODAwMDAwMDA7CS8qIHByZXNlcnZlIFBJTyBmb3JtYXQgYml0ICovCiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBiYXNlcmVnICsgNCwgdGltaW5ncyk7CkBAIC0yMTYsNyArMjE1LDggQEAKIAlpZiAobW9kZSAhPSAtMSkgewogCQlwcmludGsoIlNDMTIwMDogJXM6IGNoYW5naW5nIChVKURNQSBtb2RlXG4iLCBkcml2ZS0+bmFtZSk7CiAJCWlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwotCQlpZiAoaWRlX3NldF9kbWFfbW9kZShkcml2ZSwgbW9kZSkgPT0gMCAmJiBkcml2ZS0+dXNpbmdfZG1hKQorCQlpZiAoaWRlX3NldF9kbWFfbW9kZShkcml2ZSwgbW9kZSkgPT0gMCAmJgorCQkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSkKIAkJCWh3aWYtPmRtYV9vcHMtPmRtYV9ob3N0X3NldChkcml2ZSwgMSk7CiAJCXJldHVybjsKIAl9CkBAIC0zMjgsNyArMzI4LDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2MxMjAwX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNjMTIwMF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJTQzEyMDBfSURFIiwKIAkuaWRfdGFibGUJPSBzYzEyMDBfcGNpX3RibCwKIAkucHJvYmUJCT0gc2MxMjAwX2luaXRfb25lLApAQCAtMzQxLDEyICszNDEsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2MxMjAwX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2MxMjAwX3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2MxMjAwX2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2MxMjAwX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzYzEyMDBfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NjY19wYXRhLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYwppbmRleCBlOTJhODc0Li40OWYxNjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYwpAQCAtMjkxLDcgKzI5MSw3IEBACiBzdGF0aWMgdm9pZCBzY2NfZG1hX2hvc3Rfc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1OCB1bml0ID0gKGRyaXZlLT5zZWxlY3QuYi51bml0ICYgMHgwMSk7CisJdTggdW5pdCA9IGRyaXZlLT5kbiAmIDE7CiAJdTggZG1hX3N0YXQgPSBzY2NfaWRlX2luYihod2lmLT5kbWFfYmFzZSArIDQpOwogCiAJaWYgKG9uKQpAQCAtMzUzLDcgKzM1Myw2IEBACiAKIAkvKiBzdGFydCBETUEgKi8KIAlzY2NfaWRlX291dGIoZG1hX2NtZCB8IDEsIGh3aWYtPmRtYV9iYXNlKTsKLQlod2lmLT5kbWEgPSAxOwogCXdtYigpOwogfQogCkBAIC0zNzQsNyArMzczLDYgQEAKIAkvKiBwdXJnZSBETUEgbWFwcGluZ3MgKi8KIAlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CiAJLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLwotCWh3aWYtPmRtYSA9IDA7CiAJd21iKCk7CiAJcmV0dXJuIChkbWFfc3RhdCAmIDcpICE9IDQgPyAoMHgxMCB8IGRtYV9zdGF0KSA6IDA7CiB9CkBAIC01MTEsOSArNTA5LDYgQEAKIAlpZiAoaW50X3N0YXQgJiBJTlRTVFNfSU9JUlFTKQogCQlyZXR1cm4gMTsKIAotCWlmICghZHJpdmUtPndhaXRpbmdfZm9yX2RtYSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICglcykgY2FsbGVkIHdoaWxlIG5vdCB3YWl0aW5nXG4iLAotCQkJZHJpdmUtPm5hbWUsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjIyLDcgKzYxNyw2IEBACiAJdW5zaWduZWQgbG9uZyBpbnRtYXNrX3BvcnQ7CiAJdW5zaWduZWQgbG9uZyBtb2RlX3BvcnQ7CiAJdW5zaWduZWQgbG9uZyBlY21vZGVfcG9ydDsKLQl1bnNpZ25lZCBsb25nIGRtYV9zdGF0dXNfcG9ydDsKIAl1MzIgcmVnID0gMDsKIAlzdHJ1Y3Qgc2NjX3BvcnRzICpwb3J0czsKIAlpbnQgcmM7CkBAIC02NDIsNyArNjM2LDYgQEAKIAlpbnRtYXNrX3BvcnQgPSBkbWFfYmFzZSArIDB4MDEwOwogCW1vZGVfcG9ydCA9IGN0bF9iYXNlICsgMHgwMjQ7CiAJZWNtb2RlX3BvcnQgPSBjdGxfYmFzZSArIDB4ZjAwOwotCWRtYV9zdGF0dXNfcG9ydCA9IGRtYV9iYXNlICsgMHgwMDQ7CiAKIAkvKiBjb250cm9sbGVyIGluaXRpYWxpemF0aW9uICovCiAJcmVnID0gMDsKQEAgLTcxMCw3ICs3MDMsNyBAQAogCQlzY2NfaWRlX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCiAJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCi0JCXNjY19pZGVfb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdC5hbGwsCisJCXNjY19pZGVfb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKIAkJCSAgICAgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIH0KIApAQCAtODI2LDYgKzgxOSwxMiBAQAogCWluaXRfbW1pb19pb3BzX3NjYyhod2lmKTsKIH0KIAorc3RhdGljIGludCBfX2RldmluaXQgc2NjX2luaXRfZG1hKGlkZV9od2lmX3QgKmh3aWYsCisJCQkJICBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKK3sKKwlyZXR1cm4gaWRlX2FsbG9jYXRlX2RtYV9lbmdpbmUoaHdpZik7Cit9CisKIHN0YXRpYyB1OCBzY2NfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJcmV0dXJuIEFUQV9DQkxfUEFUQTgwOwpAQCAtODQyLDggKzg0MSw2IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfc2NjKGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0Jc3RydWN0IHNjY19wb3J0cyAqcG9ydHMgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOwotCiAJLyogUFRFUkFERCAqLwogCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyAweDAxOCksIGh3aWYtPmRtYXRhYmxlX2RtYSk7CiAKQEAgLTg5MCw2ICs4ODcsNyBAQAogICB7CQkJCQkJCVwKICAgICAgIC5uYW1lCQk9IG5hbWVfc3RyLAkJCVwKICAgICAgIC5pbml0X2lvcHMJPSBpbml0X2lvcHNfc2NjLAkJXAorICAgICAgLmluaXRfZG1hCQk9IHNjY19pbml0X2RtYSwJCQlcCiAgICAgICAuaW5pdF9od2lmCT0gaW5pdF9od2lmX3NjYywJCVwKICAgICAgIC50cF9vcHMJCT0gJnNjY190cF9vcHMsCQlcCiAgICAgICAucG9ydF9vcHMJCT0gJnNjY19wb3J0X29wcywJCVwKQEAgLTkyNywxMyArOTI1LDYgQEAKIHsKIAlzdHJ1Y3Qgc2NjX3BvcnRzICpwb3J0cyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBvcnRzLT5ob3N0OwotCWlkZV9od2lmX3QgKmh3aWYgPSBob3N0LT5wb3J0c1swXTsKLQotCWlmIChod2lmLT5kbWF0YWJsZV9jcHUpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIFBSRF9FTlRSSUVTICogUFJEX0JZVEVTLAotCQkJCSAgICBod2lmLT5kbWF0YWJsZV9jcHUsIGh3aWYtPmRtYXRhYmxlX2RtYSk7Ci0JCWh3aWYtPmRtYXRhYmxlX2NwdSA9IE5VTEw7Ci0JfQogCiAJaWRlX2hvc3RfcmVtb3ZlKGhvc3QpOwogCkBAIC05NDksNyArOTQwLDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2NjX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNjY19wY2lfZHJpdmVyID0gewogCS5uYW1lID0gIlNDQyBJREUiLAogCS5pZF90YWJsZSA9IHNjY19wY2lfdGJsLAogCS5wcm9iZSA9IHNjY19pbml0X29uZSwKQEAgLTk1OCwxNCArOTQ5LDE0IEBACiAKIHN0YXRpYyBpbnQgc2NjX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2NjX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzY2NfaWRlX2luaXQpOwogLyogLS0gTm8gZXhpdCBjb2RlPwogc3RhdGljIHZvaWQgc2NjX2lkZV9leGl0KHZvaWQpCiB7Ci0JaWRlX3BjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlpZGVfcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzY2NfcGNpX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdChzY2NfaWRlX2V4aXQpOwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYyBiL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IDNkZmYyYWUuLjQzN2JjOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCXU4IHVuaXQJCQk9IChkcml2ZS0+c2VsZWN0LmIudW5pdCAmIDB4MDEpOworCXU4IHVuaXQJCQk9IGRyaXZlLT5kbiAmIDE7CiAKIAl1OCB1bHRyYV9lbmFibGUJID0gMCwgdWx0cmFfdGltaW5nID0gMCwgZG1hX3RpbWluZyA9IDA7CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdndrc19wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzdndrc19wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJTZXJ2ZXJ3b3Jrc19JREUiLAogCS5pZF90YWJsZQk9IHN2d2tzX3BjaV90YmwsCiAJLnByb2JlCQk9IHN2d2tzX2luaXRfb25lLApAQCAtNDU0LDEyICs0NTQsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgc3Z3a3NfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZzdndrc19wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHN2d2tzX2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc3Z3a3NfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHN2d2tzX2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMgYi9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCmluZGV4IDEwMTdmYjQuLjhhZjliMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYwpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTEwMCwxOCArMTAxLDggQEAKIAlmb3IgKGkgPSAwOyBpIDw9IDc7IGkrKykKIAkJaHctPmlvX3BvcnRzX2FycmF5W2ldID0gcmVnICsgaSAqIDQ7CiAKLQlpZiAoY3RybF9wb3J0KQotCQlody0+aW9fcG9ydHMuY3RsX2FkZHIgPSBjdHJsX3BvcnQ7Ci0KLQlpZiAoaXJxX3BvcnQpCi0JCWh3LT5pb19wb3J0cy5pcnFfYWRkciA9IGlycV9wb3J0OwotfQotCi1zdGF0aWMgdm9pZAotc2dpaW9jNF9tYXNrcHJvYyhpZGVfZHJpdmVfdCAqIGRyaXZlLCBpbnQgbWFzaykKLXsKLQl3cml0ZWIoQVRBX0RFVkNUTF9PQlMgfCAobWFzayA/IDIgOiAwKSwKLQkgICAgICAgKHZvaWQgX19pb21lbSAqKWRyaXZlLT5od2lmLT5pb19wb3J0cy5jdGxfYWRkcik7CisJaHctPmlvX3BvcnRzLmN0bF9hZGRyID0gY3RybF9wb3J0OworCWh3LT5pb19wb3J0cy5pcnFfYWRkciA9IGlycV9wb3J0OwogfQogCiBzdGF0aWMgaW50CkBAIC0xNTAsNyArMTQxLDcgQEAKIAkJaW50IGNvdW50ID0gMDsKIAogCQlzdGF0ID0gc2dpaW9jNF9yZWFkX3N0YXR1cyhod2lmKTsKLQkJd2hpbGUgKChzdGF0ICYgMHg4MCkgJiYgKGNvdW50KysgPCAxMDApKSB7CisJCXdoaWxlICgoc3RhdCAmIEFUQV9CVVNZKSAmJiAoY291bnQrKyA8IDEwMCkpIHsKIAkJCXVkZWxheSgxKTsKIAkJCXN0YXQgPSBzZ2lpb2M0X3JlYWRfc3RhdHVzKGh3aWYpOwogCQl9CkBAIC0zMDksMTYgKzMwMCwxNCBAQAogCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyOwogCXU4IHJlZyA9ICh1OCkgcmVhZGIoKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKIAotCWlmICgocG9ydCAmIDB4RkZGKSA9PSAweDExQykgewkvKiBTdGF0dXMgcmVnaXN0ZXIgb2YgSU9DNCAqLwotCQlpZiAocmVnICYgMHg1MSkgewkvKiBOb3QgYnVzeS4uLmNoZWNrIGZvciBpbnRlcnJ1cHQgKi8KLQkJCXVuc2lnbmVkIGxvbmcgb3RoZXJfaXIgPSBwb3J0IC0gMHgxMTA7Ci0JCQl1bnNpZ25lZCBpbnQgaW50cl9yZWcgPSAodTMyKSByZWFkbCgodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKKwlpZiAoIShyZWcgJiBBVEFfQlVTWSkpIHsJLyogTm90IGJ1c3kuLi4gY2hlY2sgZm9yIGludGVycnVwdCAqLworCQl1bnNpZ25lZCBsb25nIG90aGVyX2lyID0gcG9ydCAtIDB4MTEwOworCQl1bnNpZ25lZCBpbnQgaW50cl9yZWcgPSAodTMyKSByZWFkbCgodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKIAotCQkJLyogQ2xlYXIgdGhlIEludGVycnVwdCwgRXJyb3IgYml0cyBvbiB0aGUgSU9DNCAqLwotCQkJaWYgKGludHJfcmVnICYgMHgwMykgewotCQkJCXdyaXRlbCgweDAzLCAodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKLQkJCQlpbnRyX3JlZyA9ICh1MzIpIHJlYWRsKCh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOwotCQkJfQorCQkvKiBDbGVhciB0aGUgSW50ZXJydXB0LCBFcnJvciBiaXRzIG9uIHRoZSBJT0M0ICovCisJCWlmIChpbnRyX3JlZyAmIDB4MDMpIHsKKwkJCXdyaXRlbCgweDAzLCAodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKKwkJCWludHJfcmVnID0gKHUzMikgcmVhZGwoKHZvaWQgX19pb21lbSAqKSBvdGhlcl9pcik7CiAJCX0KIAl9CiAKQEAgLTMzMSw0MyArMzIwLDI5IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCkgKyBJT0M0X0RNQV9PRkZTRVQ7Ci0Jdm9pZCBfX2lvbWVtICp2aXJ0X2RtYV9iYXNlOwogCWludCBudW1fcG9ydHMgPSBzaXplb2YgKGlvYzRfZG1hX3JlZ3NfdCk7CiAJdm9pZCAqcGFkOwogCi0JaWYgKGRtYV9iYXNlID09IDApCi0JCXJldHVybiAtMTsKKwlwcmludGsoS0VSTl9JTkZPICIgICAgJXM6IE1NSU8tRE1BXG4iLCBod2lmLT5uYW1lKTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBCTS1ETUEgYXQgMHglMDRseC0weCUwNGx4XG4iLCBod2lmLT5uYW1lLAotCSAgICAgICBkbWFfYmFzZSwgZG1hX2Jhc2UgKyBudW1fcG9ydHMgLSAxKTsKLQotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGRtYV9iYXNlLCBudW1fcG9ydHMsIGh3aWYtPm5hbWUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiVzKCVzKSAtLSBFUlJPUiwgQWRkcmVzc2VzIDB4JXAgdG8gMHglcCAiCi0JCSAgICAgICAiQUxSRUFEWSBpbiB1c2VcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgaHdpZi0+bmFtZSwgKHZvaWQgKikgZG1hX2Jhc2UsCi0JCSAgICAgICAodm9pZCAqKSBkbWFfYmFzZSArIG51bV9wb3J0cyAtIDEpOworCWlmIChyZXF1ZXN0X21lbV9yZWdpb24oZG1hX2Jhc2UsIG51bV9wb3J0cywgaHdpZi0+bmFtZSkgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCVzKSAtLSBFUlJPUjogYWRkcmVzc2VzIDB4JTA4bHggdG8gMHglMDhseCAiCisJCSAgICAgICAiYWxyZWFkeSBpbiB1c2VcbiIsIF9fZnVuY19fLCBod2lmLT5uYW1lLAorCQkgICAgICAgZG1hX2Jhc2UsIGRtYV9iYXNlICsgbnVtX3BvcnRzIC0gMSk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQl2aXJ0X2RtYV9iYXNlID0gaW9yZW1hcChkbWFfYmFzZSwgbnVtX3BvcnRzKTsKLQlpZiAodmlydF9kbWFfYmFzZSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiVzKCVzKSAtLSBFUlJPUiwgVW5hYmxlIHRvIG1hcCBhZGRyZXNzZXMgMHglbHggdG8gMHglbHhcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgaHdpZi0+bmFtZSwgZG1hX2Jhc2UsIGRtYV9iYXNlICsgbnVtX3BvcnRzIC0gMSk7Ci0JCWdvdG8gZG1hX3JlbWFwX2ZhaWx1cmU7Ci0JfQotCWh3aWYtPmRtYV9iYXNlID0gKHVuc2lnbmVkIGxvbmcpIHZpcnRfZG1hX2Jhc2U7Ci0KLQlod2lmLT5kbWF0YWJsZV9jcHUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsCi0JCQkJCSAgSU9DNF9QUkRfRU5UUklFUyAqIElPQzRfUFJEX0JZVEVTLAotCQkJCQkgICZod2lmLT5kbWF0YWJsZV9kbWEpOwotCi0JaWYgKCFod2lmLT5kbWF0YWJsZV9jcHUpCi0JCWdvdG8gZG1hX3BjaV9hbGxvY19mYWlsdXJlOworCWh3aWYtPmRtYV9iYXNlID0gKHVuc2lnbmVkIGxvbmcpaHdpZi0+aW9fcG9ydHMuaXJxX2FkZHIgKworCQkJIElPQzRfRE1BX09GRlNFVDsKIAogCWh3aWYtPnNnX21heF9uZW50cyA9IElPQzRfUFJEX0VOVFJJRVM7CiAKKwlod2lmLT5wcmRfbWF4X25lbnRzID0gSU9DNF9QUkRfRU5UUklFUzsKKwlod2lmLT5wcmRfZW50X3NpemUgPSBJT0M0X1BSRF9CWVRFUzsKKworCWlmIChpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZShod2lmKSkKKwkJZ290byBkbWFfcGNpX2FsbG9jX2ZhaWx1cmU7CisKIAlwYWQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsIElPQzRfSURFX0NBQ0hFTElORV9TSVpFLAogCQkJCSAgIChkbWFfYWRkcl90ICopJmh3aWYtPmV4dHJhX2Jhc2UpOwogCWlmIChwYWQpIHsKQEAgLTM3NSwxOCArMzUwLDEzIEBACiAJCXJldHVybiAwOwogCX0KIAotCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBJT0M0X1BSRF9FTlRSSUVTICogSU9DNF9QUkRfQllURVMsCi0JCQkgICAgaHdpZi0+ZG1hdGFibGVfY3B1LCBod2lmLT5kbWF0YWJsZV9kbWEpOwotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIiVzKCkgLS0gRXJyb3IhIFVuYWJsZSB0byBhbGxvY2F0ZSBETUEgTWFwcyBmb3IgZHJpdmUgJXNcbiIsCisJaWRlX3JlbGVhc2VfZG1hX2VuZ2luZShod2lmKTsKKworCXByaW50ayhLRVJOX0VSUiAiJXMoJXMpIC0tIEVSUk9SOiBVbmFibGUgdG8gYWxsb2NhdGUgRE1BIG1hcHNcbiIsCiAJICAgICAgIF9fZnVuY19fLCBod2lmLT5uYW1lKTsKLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJDaGFuZ2luZyBmcm9tIERNQSB0byBQSU8gbW9kZSBmb3IgRHJpdmUgJXNcbiIsIGh3aWYtPm5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBjaGFuZ2luZyBmcm9tIERNQSB0byBQSU8gbW9kZSIsIGh3aWYtPm5hbWUpOwogCiBkbWFfcGNpX2FsbG9jX2ZhaWx1cmU6Ci0JaW91bm1hcCh2aXJ0X2RtYV9iYXNlKTsKLQotZG1hX3JlbWFwX2ZhaWx1cmU6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGRtYV9iYXNlLCBudW1fcG9ydHMpOwogCiAJcmV0dXJuIC0xOwpAQCAtNTY4LDggKzUzOCw2IEBACiAJLnNldF9kbWFfbW9kZQkJPSBzZ2lpb2M0X3NldF9kbWFfbW9kZSwKIAkvKiByZXNldCBETUEgZW5naW5lLCBjbGVhciBJUlFzICovCiAJLnJlc2V0cHJvYwkJPSBzZ2lpb2M0X3Jlc2V0cHJvYywKLQkvKiBtYXNrIG9uL29mZiBOSUVOIHJlZ2lzdGVyICovCi0JLm1hc2twcm9jCQk9IHNnaWlvYzRfbWFza3Byb2MsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNnaWlvYzRfZG1hX29wcyA9IHsKQEAgLTYxNywxNCArNTg1LDEyIEBACiAJaXJxcG9ydCA9ICh1bnNpZ25lZCBsb25nKSB2aXJ0X2Jhc2UgKyBJT0M0X0lOVFJfT0ZGU0VUOwogCiAJY21kX3BoeXNfYmFzZSA9IGJhcjAgKyBJT0M0X0NNRF9PRkZTRVQ7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oY21kX3BoeXNfYmFzZSwgSU9DNF9DTURfQ1RMX0JMS19TSVpFLAotCSAgICBEUlZfTkFNRSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiJXMgJXM6IC0tIEVSUk9SLCBBZGRyZXNzZXMgIgotCQkJIjB4JXAgdG8gMHglcCBBTFJFQURZIGluIHVzZVxuIiwKLQkJICAgICAgIERSVl9OQU1FLCBwY2lfbmFtZShkZXYpLCAodm9pZCAqKWNtZF9waHlzX2Jhc2UsCi0JCSAgICAgICAodm9pZCAqKSBjbWRfcGh5c19iYXNlICsgSU9DNF9DTURfQ1RMX0JMS19TSVpFKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihjbWRfcGh5c19iYXNlLCBJT0M0X0NNRF9DVExfQkxLX1NJWkUsCisJCQkgICAgICAgRFJWX05BTUUpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyAlcyAtLSBFUlJPUjogYWRkcmVzc2VzIDB4JTA4bHggdG8gMHglMDhseCAiCisJCSAgICAgICAiYWxyZWFkeSBpbiB1c2VcbiIsIERSVl9OQU1FLCBwY2lfbmFtZShkZXYpLAorCQkgICAgICAgY21kX3BoeXNfYmFzZSwgY21kX3BoeXNfYmFzZSArIElPQzRfQ01EX0NUTF9CTEtfU0laRSk7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgSU8gcmVnaXN0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jIGIvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYwppbmRleCAxNzRhODczLi5lYjRmYWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMKQEAgLTExNiwxMyArMTE2LDE0IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwogCXVuc2lnbmVkIGxvbmcgYmFzZQk9ICh1bnNpZ25lZCBsb25nKWh3aWYtPmh3aWZfZGF0YTsKKwl1OCB1bml0CQkJPSBkcml2ZS0+ZG4gJiAxOwogCiAJYmFzZSArPSAweEEwICsgcjsKIAlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQogCQliYXNlICs9IGh3aWYtPmNoYW5uZWwgPDwgNjsKIAllbHNlCiAJCWJhc2UgKz0gaHdpZi0+Y2hhbm5lbCA8PCA0OwotCWJhc2UgfD0gZHJpdmUtPnNlbGVjdC5iLnVuaXQgPDwgZHJpdmUtPnNlbGVjdC5iLnVuaXQ7CisJYmFzZSB8PSB1bml0IDw8IHVuaXQ7CiAJcmV0dXJuIGJhc2U7CiB9CiAKQEAgLTI1NSw3ICsyNTYsNyBAQAogCXU4IGFkZHJfbWFzawkJPSBod2lmLT5jaGFubmVsID8gKG1taW8gPyAweEY0IDogMHg4NCkKIAkJCQkJCTogKG1taW8gPyAweEI0IDogMHg4MCk7CiAJdTggbW9kZQkJCT0gMDsKLQl1OCB1bml0CQkJPSBkcml2ZS0+c2VsZWN0LmIudW5pdDsKKwl1OCB1bml0CQkJPSBkcml2ZS0+ZG4gJiAxOwogCiAJLyogdHJpbSAqdGFza2ZpbGUqIFBJTyB0byB0aGUgc2xvd2VzdCBvZiB0aGUgbWFzdGVyL3NsYXZlICovCiAJaWYgKHBhaXIpIHsKQEAgLTMwMSw5ICszMDIsOSBAQAogCiAJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0JdTE2IHVsdHJhID0gMCwgbXVsdGkJPSAwOwotCXU4IG1vZGUgPSAwLCB1bml0CT0gZHJpdmUtPnNlbGVjdC5iLnVuaXQ7CiAJdW5zaWduZWQgbG9uZyBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpaHdpZi0+aHdpZl9kYXRhOworCXUxNiB1bHRyYSA9IDAsIG11bHRpCT0gMDsKKwl1OCBtb2RlID0gMCwgdW5pdAk9IGRyaXZlLT5kbiAmIDE7CiAJdTggbW1pbwkJCT0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKIAl1OCBzY3NjID0gMCwgYWRkcl9tYXNrCT0gaHdpZi0+Y2hhbm5lbCA/IChtbWlvID8gMHhGNCA6IDB4ODQpCiAJCQkJCQk6IChtbWlvID8gMHhCNCA6IDB4ODApOwpAQCAtNzEyLDcgKzcxMyw3IEBACiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAogCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCi0JLmRtYV9lbmQJCT0gX19pZGVfZG1hX2VuZCwKKwkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IHNpaW1hZ2VfZG1hX3Rlc3RfaXJxLAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLApAQCAtODI5LDcgKzgzMCw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNpaW1hZ2VfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2lpbWFnZV9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJTaUlfSURFIiwKIAkuaWRfdGFibGUJPSBzaWltYWdlX3BjaV90YmwsCiAJLnByb2JlCQk9IHNpaW1hZ2VfaW5pdF9vbmUsCkBAIC04NDAsMTIgKzg0MSwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzaWltYWdlX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2lpbWFnZV9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNpaW1hZ2VfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzaWltYWdlX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzaWltYWdlX2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jCmluZGV4IDczNGRkNDEuLmFkMzJlMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYwpAQCAtNjA1LDcgKzYwNSw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNpczU1MTNfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2lzNTUxM19wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJTSVNfSURFIiwKIAkuaWRfdGFibGUJPSBzaXM1NTEzX3BjaV90YmwsCiAJLnByb2JlCQk9IHNpczU1MTNfaW5pdF9vbmUsCkBAIC02MTYsMTIgKzYxNiwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzaXM1NTEzX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2lzNTUxM19wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNpczU1MTNfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzaXM1NTEzX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzaXM1NTEzX2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zbDgyYzEwNS5jIGIvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMKaW5kZXggMzdhNmI3Yi4uODRkYzMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogCiAJREJHKCgiJXMoZHJpdmU6JXMpXG4iLCBfX2Z1bmNfXywgZHJpdmUtPm5hbWUpKTsKIAotCXJldCA9IF9faWRlX2RtYV9lbmQoZHJpdmUpOworCXJldCA9IGlkZV9kbWFfZW5kKGRyaXZlKTsKIAogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHJlZywgZHJpdmUtPmRyaXZlX2RhdGEpOwogCkBAIC0zNDUsNyArMzQ1LDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2w4MmMxMDVfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2w4MmMxMDVfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiVzgyQzEwNV9JREUiLAogCS5pZF90YWJsZQk9IHNsODJjMTA1X3BjaV90YmwsCiAJLnByb2JlCQk9IHNsODJjMTA1X2luaXRfb25lLApAQCAtMzU2LDEyICszNTYsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2w4MmMxMDVfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZzbDgyYzEwNV9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNsODJjMTA1X2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2w4MmMxMDVfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHNsODJjMTA1X2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zbGM5MGU2Ni5jIGIvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMKaW5kZXggYTk1NTFhMS4uMGY3NTllNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzbGM5MGU2Nl9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzbGM5MGU2Nl9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJTTEM5MGU2Nl9JREUiLAogCS5pZF90YWJsZQk9IHNsYzkwZTY2X3BjaV90YmwsCiAJLnByb2JlCQk9IHNsYzkwZTY2X2luaXRfb25lLApAQCAtMTY1LDEyICsxNjUsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2xjOTBlNjZfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZzbGM5MGU2Nl9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNsYzkwZTY2X2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2xjOTBlNjZfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHNsYzkwZTY2X2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jIGIvZHJpdmVycy9pZGUvcGNpL3RjODZjMDAxLmMKaW5kZXggOTI3Mjc3Yy4uOTNlMmNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3RjODZjMDAxLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3RjODZjMDAxLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKIAkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSB0Yzg2YzAwMV9kbWFfc3RhcnQsCi0JLmRtYV9lbmQJCT0gX19pZGVfZG1hX2VuZCwKKwkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCkBAIC0yNDUsNyArMjQ1LDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdGM4NmMwMDFfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdGM4NmMwMDFfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiVEM4NkMwMDEiLAogCS5pZF90YWJsZQk9IHRjODZjMDAxX3BjaV90YmwsCiAJLnByb2JlCQk9IHRjODZjMDAxX2luaXRfb25lLApAQCAtMjU0LDEyICsyNTQsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgdGM4NmMwMDFfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZ0Yzg2YzAwMV9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHRjODZjMDAxX2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdGM4NmMwMDFfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHRjODZjMDAxX2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS90cmlmbGV4LmMgYi9kcml2ZXJzL2lkZS9wY2kvdHJpZmxleC5jCmluZGV4IGJlODcxNWQuLmI2ZmY0MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS90cmlmbGV4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3RyaWZsZXguYwpAQCAtMzgsMTMgKzM4LDEyIEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0JdTggY2hhbm5lbF9vZmZzZXQgPSBod2lmLT5jaGFubmVsID8gMHg3NCA6IDB4NzA7Ci0JdTE2IHRpbWluZyA9IDA7CiAJdTMyIHRyaWZsZXhfdGltaW5ncyA9IDA7Ci0JdTggdW5pdCA9IChkcml2ZS0+c2VsZWN0LmIudW5pdCAmIDB4MDEpOwotCQorCXUxNiB0aW1pbmcgPSAwOworCXU4IGNoYW5uZWxfb2Zmc2V0ID0gaHdpZi0+Y2hhbm5lbCA/IDB4NzQgOiAweDcwLCB1bml0ID0gZHJpdmUtPmRuICYgMTsKKwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIGNoYW5uZWxfb2Zmc2V0LCAmdHJpZmxleF90aW1pbmdzKTsKLQkKKwogCXN3aXRjaChzcGVlZCkgewogCQljYXNlIFhGRVJfTVdfRE1BXzI6CiAJCQl0aW1pbmcgPSAweDAxMDM7IApAQCAtMTE0LDcgKzExMyw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHRyaWZsZXhfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHJpZmxleF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJUUklGTEVYX0lERSIsCiAJLmlkX3RhYmxlCT0gdHJpZmxleF9wY2lfdGJsLAogCS5wcm9iZQkJPSB0cmlmbGV4X2luaXRfb25lLApAQCAtMTI1LDEyICsxMjQsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgdHJpZmxleF9pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJnRyaWZsZXhfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB0cmlmbGV4X2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdHJpZmxleF9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQodHJpZmxleF9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdHJtMjkwLmMgYi9kcml2ZXJzL2lkZS9wY2kvdHJtMjkwLmMKaW5kZXggNGRmYmM2YS4uNzVlYTYxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3RybTI5MC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS90cm0yOTAuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJfQogCiAJLyogZW5hYmxlIElSUSBpZiBub3QgcHJvYmluZyAqLwotCWlmIChkcml2ZS0+cHJlc2VudCkgeworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpIHsKIAkJcmVnID0gaW53KGh3aWYtPmNvbmZpZ19kYXRhICsgMyk7CiAJCXJlZyAmPSAweDEzOwogCQlyZWcgJj0gfigxIDw8IGh3aWYtPmNoYW5uZWwpOwpAQCAtMTczLDcgKzE3Myw3IEBACiAKIHN0YXRpYyB2b2lkIHRybTI5MF9zZWxlY3Rwcm9jIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JdHJtMjkwX3ByZXBhcmVfZHJpdmUoZHJpdmUsIGRyaXZlLT51c2luZ19kbWEpOworCXRybTI5MF9wcmVwYXJlX2RyaXZlKGRyaXZlLCAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkpOwogfQogCiBzdGF0aWMgdm9pZCB0cm0yOTBfZG1hX2V4ZWNfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY29tbWFuZCkKQEAgLTM1MCw3ICszNTAsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0cm0yOTBfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHJtMjkwX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIlRSTTI5MF9JREUiLAogCS5pZF90YWJsZQk9IHRybTI5MF9wY2lfdGJsLAogCS5wcm9iZQkJPSB0cm0yOTBfaW5pdF9vbmUsCkBAIC0zNTksMTIgKzM1OSwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB0cm0yOTBfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZ0cm0yOTBfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB0cm0yOTBfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ0cm0yOTBfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHRybTI5MF9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMKaW5kZXggYWNhY2RhYS4uMmE4MTJkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS92aWE4MmN4eHguYwpAQCAtNDg3LDcgKzQ4Nyw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHZpYV9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB2aWFfcGNpX2RyaXZlciA9IHsKIAkubmFtZSAJCT0gIlZJQV9JREUiLAogCS5pZF90YWJsZSAJPSB2aWFfcGNpX3RibCwKIAkucHJvYmUgCQk9IHZpYV9pbml0X29uZSwKQEAgLTQ5OCwxMiArNDk4LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHZpYV9pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJnZpYV9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHZpYV9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnZpYV9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQodmlhX2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMgYi9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCmluZGV4IGMzNDMyZGEuLjJlMTlkNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKKysrIGIvZHJpdmVycy9pZGUvcHBjL3BtYWMuYwpAQCAtNDMwLDEwICs0MzAsNyBAQAogCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CiAJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoaHdpZi0+Z2VuZGV2LnBhcmVudCk7CiAKLQlpZiAocG1pZiA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoZHJpdmUtPnNlbGVjdC5iLnVuaXQgJiAweDAxKQorCWlmIChkcml2ZS0+ZG4gJiAxKQogCQl3cml0ZWwocG1pZi0+dGltaW5nc1sxXSwgUE1BQ19JREVfUkVHKElERV9USU1JTkdfQ09ORklHKSk7CiAJZWxzZQogCQl3cml0ZWwocG1pZi0+dGltaW5nc1swXSwgUE1BQ19JREVfUkVHKElERV9USU1JTkdfQ09ORklHKSk7CkBAIC00NTIsMTAgKzQ0OSw3IEBACiAJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KIAkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKIAotCWlmIChwbWlmID09IE5VTEwpCi0JCXJldHVybjsKLQotCWlmIChkcml2ZS0+c2VsZWN0LmIudW5pdCAmIDB4MDEpIHsKKwlpZiAoZHJpdmUtPmRuICYgMSkgewogCQl3cml0ZWwocG1pZi0+dGltaW5nc1sxXSwgUE1BQ19JREVfUkVHKElERV9LQVVBSV9QSU9fQ09ORklHKSk7CiAJCXdyaXRlbChwbWlmLT50aW1pbmdzWzNdLCBQTUFDX0lERV9SRUcoSURFX0tBVUFJX1VMVFJBX0NPTkZJRykpOwogCX0gZWxzZSB7CkBAIC00NzUsOSArNDY5LDYgQEAKIAlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQogCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOwogCi0JaWYgKHBtaWYgPT0gTlVMTCkKLQkJcmV0dXJuOwotCiAJaWYgKHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl9zaF9hdGE2IHx8CiAJICAgIHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl91bl9hdGE2IHx8CiAJICAgIHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl9rMl9hdGE2KQpAQCAtNTI0LDExICs1MTUsOCBAQAogCXVuc2lnbmVkIGFjY2Vzc1RpbWUsIHJlY1RpbWU7CiAJdW5zaWduZWQgaW50IGN5Y2xlX3RpbWU7CiAKLQlpZiAocG1pZiA9PSBOVUxMKQotCQlyZXR1cm47Ci0JCQogCS8qIHdoaWNoIGRyaXZlIGlzIGl0ID8gKi8KLQl0aW1pbmdzID0gJnBtaWYtPnRpbWluZ3NbZHJpdmUtPnNlbGVjdC5iLnVuaXQgJiAweDAxXTsKKwl0aW1pbmdzID0gJnBtaWYtPnRpbWluZ3NbZHJpdmUtPmRuICYgMV07CiAJdCA9ICp0aW1pbmdzOwogCiAJY3ljbGVfdGltZSA9IGlkZV9waW9fY3ljbGVfdGltZShkcml2ZSwgcGlvKTsKQEAgLTgwNSw5ICs3OTMsOSBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQogCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOwotCWludCB1bml0ID0gKGRyaXZlLT5zZWxlY3QuYi51bml0ICYgMHgwMSk7CiAJaW50IHJldCA9IDA7CiAJdTMyICp0aW1pbmdzLCAqdGltaW5nczIsIHRsWzJdOworCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxOwogCiAJdGltaW5ncyA9ICZwbWlmLT50aW1pbmdzW3VuaXRdOwogCXRpbWluZ3MyID0gJnBtaWYtPnRpbWluZ3NbdW5pdCsyXTsKQEAgLTk2NiwxMSArOTU0LDExIEBACiAJaWYgKHBtaWYtPm1lZGlhYmF5KSB7CiAjaWZkZWYgQ09ORklHX1BNQUNfTUVESUFCQVkKIAkJaWYgKGNoZWNrX21lZGlhX2JheV9ieV9iYXNlKHBtaWYtPnJlZ2Jhc2UsIE1CX0NEKSA9PSAwKSB7Ci0JCQlkcml2ZS0+bm9wcm9iZSA9IDA7CisJCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTk9QUk9CRTsKIAkJCXJldHVybjsKIAkJfQogI2VuZGlmCi0JCWRyaXZlLT5ub3Byb2JlID0gMTsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTk9QUk9CRTsKIAl9CiB9CiAKQEAgLTE1MzUsMTggKzE1MjMsNiBAQAogCXJldHVybiAwOyAvKiByZXZlcnQgdG8gUElPIGZvciB0aGlzIHJlcXVlc3QgKi8KIH0KIAotLyogVGVhcmRvd24gbWFwcGluZ3MgYWZ0ZXIgRE1BIGhhcyBjb21wbGV0ZWQuICAqLwotc3RhdGljIHZvaWQKLXBtYWNfaWRlX2Rlc3Ryb3lfZG1hdGFibGUgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0KLQlpZiAoaHdpZi0+c2dfbmVudHMpIHsKLQkJaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwotCQlod2lmLT5zZ19uZW50cyA9IDA7Ci0JfQotfQotCiAvKgogICogUHJlcGFyZSBhIERNQSB0cmFuc2Zlci4gV2UgYnVpbGQgdGhlIERNQSB0YWJsZSwgYWRqdXN0IHRoZSB0aW1pbmdzIGZvcgogICogYSByZWFkIG9uIEtleUxhcmdvIEFUQS82NiBhbmQgbWFyayB1cyBhcyB3YWl0aW5nIGZvciBETUEgY29tcGxldGlvbgpAQCAtMTU1OCwxMiArMTUzNCw3IEBACiAJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KIAkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7Ci0JdTggdW5pdCA9IChkcml2ZS0+c2VsZWN0LmIudW5pdCAmIDB4MDEpOwotCXU4IGF0YTQ7Ci0KLQlpZiAocG1pZiA9PSBOVUxMKQotCQlyZXR1cm4gMTsKLQlhdGE0ID0gKHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl9rbF9hdGE0KTsJCisJdTggdW5pdCA9IGRyaXZlLT5kbiAmIDEsIGF0YTQgPSAocG1pZi0+a2luZCA9PSBjb250cm9sbGVyX2tsX2F0YTQpOwogCiAJaWYgKCFwbWFjX2lkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgcnEpKSB7CiAJCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKQEAgLTE2MTcsMTcgKzE1ODgsMTUgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KIAkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKLQl2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfcmVncyBfX2lvbWVtICpkbWE7CisJdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MgX19pb21lbSAqZG1hID0gcG1pZi0+ZG1hX3JlZ3M7CiAJdTMyIGRzdGF0OwotCQotCWlmIChwbWlmID09IE5VTEwpCi0JCXJldHVybiAwOwotCWRtYSA9IHBtaWYtPmRtYV9yZWdzOwogCiAJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7CiAJZHN0YXQgPSByZWFkbCgmZG1hLT5zdGF0dXMpOwogCXdyaXRlbCgoKFJVTnxXQUtFfERFQUQpIDw8IDE2KSwgJmRtYS0+Y29udHJvbCk7Ci0JcG1hY19pZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CisKKwlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CisKIAkvKiB2ZXJpZnkgZ29vZCBkbWEgc3RhdHVzLiB3ZSBkb24ndCBjaGVjayBmb3IgQUNUSVZFIGJlZWluZyAwLiBXZSBzaG91bGQuLi4KIAkgKiBpbiB0aGVvcnksIGJ1dCB3aXRoIEFUQVBJIGRlY2ljZXMgZG9pbmcgYnVmZmVyIHVuZGVycnVucywgdGhhdCB3b3VsZAogCSAqIGNhdXNlIHVzIHRvIGRpc2FibGUgRE1BLCB3aGljaCBpc24ndCB3aGF0IHdlIHdhbnQKQEAgLTE2NDcsMTMgKzE2MTYsOSBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQogCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOwotCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKmRtYTsKKwl2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfcmVncyBfX2lvbWVtICpkbWEgPSBwbWlmLT5kbWFfcmVnczsKIAl1bnNpZ25lZCBsb25nIHN0YXR1cywgdGltZW91dDsKIAotCWlmIChwbWlmID09IE5VTEwpCi0JCXJldHVybiAwOwotCWRtYSA9IHBtaWYtPmRtYV9yZWdzOwotCiAJLyogV2UgaGF2ZSB0byB0aGluZ3MgdG8gZGVhbCB3aXRoIGhlcmU6CiAJICogCiAJICogLSBUaGUgZGJkbWEgd29uJ3Qgc3RvcCBpZiB0aGUgY29tbWFuZCB3YXMgc3RhcnRlZApAQCAtMTY3Miw5ICsxNjM3LDYgQEAKIAlzdGF0dXMgPSByZWFkbCgmZG1hLT5zdGF0dXMpOwogCWlmICghKHN0YXR1cyAmIEFDVElWRSkpCiAJCXJldHVybiAxOwotCWlmICghZHJpdmUtPndhaXRpbmdfZm9yX2RtYSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWRlJWQsIGlkZV9kbWFfdGVzdF9pcnEgXAotCQkJY2FsbGVkIHdoaWxlIG5vdCB3YWl0aW5nXG4iLCBIV0lGKGRyaXZlKS0+aW5kZXgpOwogCiAJLyogSWYgZGJkbWEgZGlkbid0IGV4ZWN1dGUgdGhlIFNUT1AgY29tbWFuZCB5ZXQsIHRoZQogCSAqIGFjdGl2ZSBiaXQgaXMgc3RpbGwgc2V0LiBXZSBjb25zaWRlciB0aGF0IHdlIGFyZW4ndApAQCAtMTcwOSwxNCArMTY3MSw5IEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CiAJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoaHdpZi0+Z2VuZGV2LnBhcmVudCk7Ci0Jdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MgX19pb21lbSAqZG1hOwotCXVuc2lnbmVkIGxvbmcgc3RhdHVzOworCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKmRtYSA9IHBtaWYtPmRtYV9yZWdzOworCXVuc2lnbmVkIGxvbmcgc3RhdHVzID0gcmVhZGwoJmRtYS0+c3RhdHVzKTsKIAotCWlmIChwbWlmID09IE5VTEwpCi0JCXJldHVybjsKLQlkbWEgPSBwbWlmLT5kbWFfcmVnczsKLQotCXN0YXR1cyA9IHJlYWRsKCZkbWEtPnN0YXR1cyk7CiAJcHJpbnRrKEtFUk5fRVJSICJpZGUtcG1hYyBsb3N0IGludGVycnVwdCwgZG1hIHN0YXR1czogJWx4XG4iLCBzdGF0dXMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2NzcjEyMTIuYyBiL2RyaXZlcnMvaWVlZTEzOTQvY3NyMTIxMi5jCmluZGV4IDlmOTUzMzcuLjVlMzhhNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvY3NyMTIxMi5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvY3NyMTIxMi5jCkBAIC04NCw3ICs4NCw3IEBACiAKIAogI2RlZmluZSBxdWFkc190b19ieXRlcyhfcSkgKChfcSkgKiBzaXplb2YodTMyKSkKLSNkZWZpbmUgYnl0ZXNfdG9fcXVhZHMoX2IpICgoKF9iKSArIHNpemVvZih1MzIpIC0gMSkgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgYnl0ZXNfdG9fcXVhZHMoX2IpIERJVl9ST1VORF9VUChfYiwgc2l6ZW9mKHUzMikpCiAKIHN0YXRpYyB2b2lkIGZyZWVfa2V5dmFsKHN0cnVjdCBjc3IxMjEyX2tleXZhbCAqa3YpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYwppbmRleCBiNmViMmNmLi4yZjgzNTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKQEAgLTkxOCw3ICs5MTgsNyBAQAogCQkvKiBkZWZhdWx0IFNZVCBvZmZzZXQgaXMgMyBjeWNsZXMgKi8KIAkJaW5pdC0+c3l0X29mZnNldCA9IDM7CiAKLQlpZiAoIChpbml0LT5jaGFubmVsID4gNjMpIHx8IChpbml0LT5jaGFubmVsIDwgMCkgKQorCWlmIChpbml0LT5jaGFubmVsID4gNjMpCiAJCWluaXQtPmNoYW5uZWwgPSA2MzsKIAogCWNoYW5fbWFzayA9ICh1NjQpMSA8PCBpbml0LT5jaGFubmVsOwpAQCAtMjI5NiwxMCArMjI5NiwxMCBAQAogCiAJb2hjaSA9IChzdHJ1Y3QgdGlfb2hjaSAqKWhvc3QtPmhvc3RkYXRhOwogCi0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGhwc2JfcHJvdG9jb2xfY2xhc3MsIE5VTEwsCi0JCQkgICAgICBNS0RFVihJRUVFMTM5NF9NQUpPUiwKLQkJCQkgICAgSUVFRTEzOTRfTUlOT1JfQkxPQ0tfRFYxMzk0ICogMTYgKyAoaWQ8PDIpKSwgTlVMTCwKLQkJCSAgICAgICJkdjEzOTQtJWQiLCBpZCk7CisJZGV2aWNlX2NyZWF0ZShocHNiX3Byb3RvY29sX2NsYXNzLCBOVUxMLAorCQkgICAgICBNS0RFVihJRUVFMTM5NF9NQUpPUiwKKwkJCSAgICBJRUVFMTM5NF9NSU5PUl9CTE9DS19EVjEzOTQgKiAxNiArIChpZDw8MikpLAorCQkgICAgICBOVUxMLCAiZHYxMzk0LSVkIiwgaWQpOwogCiAJZHYxMzk0X2luaXQob2hjaSwgRFYxMzk0X05UU0MsIE1PREVfUkVDRUlWRSk7CiAJZHYxMzk0X2luaXQob2hjaSwgRFYxMzk0X05UU0MsIE1PREVfVFJBTlNNSVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwppbmRleCBiMTY2YjM1Li4yMDEyODY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwpAQCAtMTM2MSw3ICsxMzYxLDcgQEAKIAkJaGRyLT5mZi5kZ2wgPSBkZ2w7CiAJCWFkal9tYXhfcGF5bG9hZCA9IG1heF9wYXlsb2FkIC0gaGRyX3R5cGVfbGVuW0VUSDEzOTRfSERSX0xGX0ZGXTsKIAl9Ci0JcmV0dXJuIChkZ19zaXplICsgYWRqX21heF9wYXlsb2FkIC0gMSkgLyBhZGpfbWF4X3BheWxvYWQ7CisJcmV0dXJuIERJVl9ST1VORF9VUChkZ19zaXplLCBhZGpfbWF4X3BheWxvYWQpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGV0aGVyMTM5NF9lbmNhcHN1bGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYwppbmRleCAxNjI0MGE3Li4yMzc2YjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYwpAQCAtMTU0LDkgKzE1NCw2IEBACiAKIHN0YXRpYyBpbnQgbm9kZW1ncl9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKiBkcnYpOwogc3RhdGljIGludCBub2RlbWdyX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudik7Ci1zdGF0aWMgdm9pZCBub2RlbWdyX3Jlc3VtZV9uZShzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUpOwotc3RhdGljIHZvaWQgbm9kZW1ncl9yZW1vdmVfbmUoc3RydWN0IG5vZGVfZW50cnkgKm5lKTsKLXN0YXRpYyBzdHJ1Y3Qgbm9kZV9lbnRyeSAqZmluZF9lbnRyeV9ieV9ndWlkKHU2NCBndWlkKTsKIAogc3RydWN0IGJ1c190eXBlIGllZWUxMzk0X2J1c190eXBlID0gewogCS5uYW1lCQk9ICJpZWVlMTM5NCIsCkBAIC0zODUsMjcgKzM4Miw2IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoaWdub3JlX2RyaXZlciwgU19JV1VTUiB8IFNfSVJVR08sIGZ3X2dldF9pZ25vcmVfZHJpdmVyLCBmd19zZXRfaWdub3JlX2RyaXZlcik7CiAKIAotc3RhdGljIHNzaXplX3QgZndfc2V0X2Rlc3Ryb3lfbm9kZShzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IG5vZGVfZW50cnkgKm5lOwotCXU2NCBndWlkID0gKHU2NClzaW1wbGVfc3RydG91bGwoYnVmLCBOVUxMLCAxNik7Ci0KLQluZSA9IGZpbmRfZW50cnlfYnlfZ3VpZChndWlkKTsKLQotCWlmIChuZSA9PSBOVUxMIHx8ICFuZS0+aW5fbGltYm8pCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jbm9kZW1ncl9yZW1vdmVfbmUobmUpOwotCi0JcmV0dXJuIGNvdW50OwotfQotc3RhdGljIHNzaXplX3QgZndfZ2V0X2Rlc3Ryb3lfbm9kZShzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIllvdSBjYW4gZGVzdHJveSBpbl9saW1ibyBub2RlcyBieSB3cml0aW5nIHRoZWlyIEdVSUQgdG8gdGhpcyBmaWxlXG4iKTsKLX0KLXN0YXRpYyBCVVNfQVRUUihkZXN0cm95X25vZGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBmd19nZXRfZGVzdHJveV9ub2RlLCBmd19zZXRfZGVzdHJveV9ub2RlKTsKLQotCiBzdGF0aWMgc3NpemVfdCBmd19zZXRfcmVzY2FuKHN0cnVjdCBidXNfdHlwZSAqYnVzLCBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgIHNpemVfdCBjb3VudCkKIHsKQEAgLTQ0Miw3ICs0MTgsNiBAQAogCiAKIHN0cnVjdCBidXNfYXR0cmlidXRlICpjb25zdCBmd19idXNfYXR0cnNbXSA9IHsKLQkmYnVzX2F0dHJfZGVzdHJveV9ub2RlLAogCSZidXNfYXR0cl9yZXNjYW4sCiAJJmJ1c19hdHRyX2lnbm9yZV9kcml2ZXJzLAogCU5VTEwKQEAgLTczNCwxMCArNzA5LDEwIEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgobm9kZW1ncl9zZXJpYWxpemVfcmVtb3ZlX3Vkcyk7CiAKLXN0YXRpYyBpbnQgX19tYXRjaF9uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IG1hdGNoX25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdW5pdF9kaXJlY3RvcnkgKnVkOwotCXN0cnVjdCBub2RlX2VudHJ5ICpuZSA9IChzdHJ1Y3Qgbm9kZV9lbnRyeSAqKWRhdGE7CisJc3RydWN0IG5vZGVfZW50cnkgKm5lID0gZGF0YTsKIAogCXVkID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHVuaXRfZGlyZWN0b3J5LCB1bml0X2Rldik7CiAJcmV0dXJuIHVkLT5uZSA9PSBuZTsKQEAgLTc1NCw4ICs3MjksNyBAQAogCSAqLwogCW11dGV4X2xvY2soJm5vZGVtZ3Jfc2VyaWFsaXplX3JlbW92ZV91ZHMpOwogCWZvciAoOzspIHsKLQkJZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJm5vZGVtZ3JfdWRfY2xhc3MsIE5VTEwsIG5lLAotCQkJCQlfX21hdGNoX25lKTsKKwkJZGV2ID0gY2xhc3NfZmluZF9kZXZpY2UoJm5vZGVtZ3JfdWRfY2xhc3MsIE5VTEwsIG5lLCBtYXRjaF9uZSk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7CiAJCXVkID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHVuaXRfZGlyZWN0b3J5LCB1bml0X2Rldik7CkBAIC03ODUsNyArNzU5LDcgQEAKIAlwdXRfZGV2aWNlKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgX19ub2RlbWdyX3JlbW92ZV9ob3N0X2RldihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHJlbW92ZV9ob3N0X2RldihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJaWYgKGRldi0+YnVzID09ICZpZWVlMTM5NF9idXNfdHlwZSkKIAkJbm9kZW1ncl9yZW1vdmVfbmUoY29udGFpbmVyX29mKGRldiwgc3RydWN0IG5vZGVfZW50cnksCkBAIC03OTUsNyArNzY5LDcgQEAKIAogc3RhdGljIHZvaWQgbm9kZW1ncl9yZW1vdmVfaG9zdF9kZXYoc3RydWN0IGRldmljZSAqZGV2KQogewotCVdBUk5fT04oZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGRldiwgTlVMTCwgX19ub2RlbWdyX3JlbW92ZV9ob3N0X2RldikpOworCWRldmljZV9mb3JfZWFjaF9jaGlsZChkZXYsIE5VTEwsIHJlbW92ZV9ob3N0X2Rldik7CiAJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldi0+a29iaiwgImlybV9pZCIpOwogCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmtvYmosICJidXNtZ3JfaWQiKTsKIAlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5rb2JqLCAiaG9zdF9pZCIpOwpAQCAtODMwLDExICs4MDQsMTAgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IG5vZGVfZW50cnkgKm5vZGVtZ3JfY3JlYXRlX25vZGUob2N0bGV0X3QgZ3VpZCwgc3RydWN0IGNzcjEyMTJfY3NyICpjc3IsCi0JCQkJCSAgICAgIHN0cnVjdCBob3N0X2luZm8gKmhpLCBub2RlaWRfdCBub2RlaWQsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGludCBnZW5lcmF0aW9uKQorc3RhdGljIHN0cnVjdCBub2RlX2VudHJ5ICpub2RlbWdyX2NyZWF0ZV9ub2RlKG9jdGxldF90IGd1aWQsCisJCQkJc3RydWN0IGNzcjEyMTJfY3NyICpjc3IsIHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsCisJCQkJbm9kZWlkX3Qgbm9kZWlkLCB1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbikKIHsKLQlzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0ID0gaGktPmhvc3Q7CiAJc3RydWN0IG5vZGVfZW50cnkgKm5lOwogCiAJbmUgPSBremFsbG9jKHNpemVvZigqbmUpLCBHRlBfS0VSTkVMKTsKQEAgLTg4OCwxMCArODYxLDEwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgX19tYXRjaF9uZV9ndWlkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWF0Y2hfbmVfZ3VpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5vZGVfZW50cnkgKm5lOwotCXU2NCAqZ3VpZCA9ICh1NjQgKilkYXRhOworCXU2NCAqZ3VpZCA9IGRhdGE7CiAKIAluZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBub2RlX2VudHJ5LCBub2RlX2Rldik7CiAJcmV0dXJuIG5lLT5ndWlkID09ICpndWlkOwpAQCAtOTAyLDggKzg3NSw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBub2RlX2VudHJ5ICpuZTsKIAotCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZub2RlbWdyX25lX2NsYXNzLCBOVUxMLCAmZ3VpZCwKLQkJCQlfX21hdGNoX25lX2d1aWQpOworCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZub2RlbWdyX25lX2NsYXNzLCBOVUxMLCAmZ3VpZCwgbWF0Y2hfbmVfZ3VpZCk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOwogCW5lID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG5vZGVfZW50cnksIG5vZGVfZGV2KTsKQEAgLTkxMiwyMSArODg0LDIxIEBACiAJcmV0dXJuIG5lOwogfQogCi1zdHJ1Y3QgbWF0Y2hfbm9kZWlkX3BhcmFtIHsKK3N0cnVjdCBtYXRjaF9ub2RlaWRfcGFyYW1ldGVyIHsKIAlzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0OwogCW5vZGVpZF90IG5vZGVpZDsKIH07CiAKLXN0YXRpYyBpbnQgX19tYXRjaF9uZV9ub2RlaWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtYXRjaF9uZV9ub2RlaWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCWludCBmb3VuZCA9IDA7CiAJc3RydWN0IG5vZGVfZW50cnkgKm5lOwotCXN0cnVjdCBtYXRjaF9ub2RlaWRfcGFyYW0gKnBhcmFtID0gKHN0cnVjdCBtYXRjaF9ub2RlaWRfcGFyYW0gKilkYXRhOworCXN0cnVjdCBtYXRjaF9ub2RlaWRfcGFyYW1ldGVyICpwID0gZGF0YTsKIAogCWlmICghZGV2KQogCQlnb3RvIHJldDsKIAluZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBub2RlX2VudHJ5LCBub2RlX2Rldik7Ci0JaWYgKG5lLT5ob3N0ID09IHBhcmFtLT5ob3N0ICYmIG5lLT5ub2RlaWQgPT0gcGFyYW0tPm5vZGVpZCkKKwlpZiAobmUtPmhvc3QgPT0gcC0+aG9zdCAmJiBuZS0+bm9kZWlkID09IHAtPm5vZGVpZCkKIAkJZm91bmQgPSAxOwogcmV0OgogCXJldHVybiBmb3VuZDsKQEAgLTkzNywxMyArOTA5LDEyIEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBub2RlX2VudHJ5ICpuZTsKLQlzdHJ1Y3QgbWF0Y2hfbm9kZWlkX3BhcmFtIHBhcmFtOworCXN0cnVjdCBtYXRjaF9ub2RlaWRfcGFyYW1ldGVyIHA7CiAKLQlwYXJhbS5ob3N0ID0gaG9zdDsKLQlwYXJhbS5ub2RlaWQgPSBub2RlaWQ7CisJcC5ob3N0ID0gaG9zdDsKKwlwLm5vZGVpZCA9IG5vZGVpZDsKIAotCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZub2RlbWdyX25lX2NsYXNzLCBOVUxMLCAmcGFyYW0sCi0JCQkJX19tYXRjaF9uZV9ub2RlaWQpOworCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZub2RlbWdyX25lX2NsYXNzLCBOVUxMLCAmcCwgbWF0Y2hfbmVfbm9kZWlkKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7CiAJbmUgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgbm9kZV9lbnRyeSwgbm9kZV9kZXYpOwpAQCAtOTkwLDcgKzk2MSw3IEBACiAgKiBpbW1lZGlhdGUgdW5pdCBkaXJlY3RvcmllcyBsb29raW5nIGZvciBzb2Z0d2FyZV9pZCBhbmQKICAqIHNvZnR3YXJlX3ZlcnNpb24gZW50cmllcywgaW4gb3JkZXIgdG8gZ2V0IGRyaXZlciBhdXRvbG9hZGluZyB3b3JraW5nLiAqLwogc3RhdGljIHN0cnVjdCB1bml0X2RpcmVjdG9yeSAqbm9kZW1ncl9wcm9jZXNzX3VuaXRfZGlyZWN0b3J5Ci0JKHN0cnVjdCBob3N0X2luZm8gKmhpLCBzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUsIHN0cnVjdCBjc3IxMjEyX2tleXZhbCAqdWRfa3YsCisJKHN0cnVjdCBub2RlX2VudHJ5ICpuZSwgc3RydWN0IGNzcjEyMTJfa2V5dmFsICp1ZF9rdiwKIAkgdW5zaWduZWQgaW50ICppZCwgc3RydWN0IHVuaXRfZGlyZWN0b3J5ICpwYXJlbnQpCiB7CiAJc3RydWN0IHVuaXRfZGlyZWN0b3J5ICp1ZDsKQEAgLTEwODMsNyArMTA1NCw3IEBACiAJCQkJCW5vZGVtZ3JfcmVnaXN0ZXJfZGV2aWNlKG5lLCB1ZCwgJm5lLT5kZXZpY2UpOwogCQkJCQogCQkJCS8qIHByb2Nlc3MgdGhlIGNoaWxkIHVuaXQgKi8KLQkJCQl1ZF9jaGlsZCA9IG5vZGVtZ3JfcHJvY2Vzc191bml0X2RpcmVjdG9yeShoaSwgbmUsIGt2LCBpZCwgdWQpOworCQkJCXVkX2NoaWxkID0gbm9kZW1ncl9wcm9jZXNzX3VuaXRfZGlyZWN0b3J5KG5lLCBrdiwgaWQsIHVkKTsKIAogCQkJCWlmICh1ZF9jaGlsZCA9PSBOVUxMKQogCQkJCQlicmVhazsKQEAgLTExMzcsNyArMTEwOCw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgbm9kZW1ncl9wcm9jZXNzX3Jvb3RfZGlyZWN0b3J5KHN0cnVjdCBob3N0X2luZm8gKmhpLCBzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUpCitzdGF0aWMgdm9pZCBub2RlbWdyX3Byb2Nlc3Nfcm9vdF9kaXJlY3Rvcnkoc3RydWN0IG5vZGVfZW50cnkgKm5lKQogewogCXVuc2lnbmVkIGludCB1ZF9pZCA9IDA7CiAJc3RydWN0IGNzcjEyMTJfZGVudHJ5ICpkZW50cnk7CkBAIC0xMTU3LDcgKzExMjgsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBDU1IxMjEyX0tWX0lEX1VOSVQ6Ci0JCQlub2RlbWdyX3Byb2Nlc3NfdW5pdF9kaXJlY3RvcnkoaGksIG5lLCBrdiwgJnVkX2lkLCBOVUxMKTsKKwkJCW5vZGVtZ3JfcHJvY2Vzc191bml0X2RpcmVjdG9yeShuZSwga3YsICZ1ZF9pZCwgTlVMTCk7CiAJCQlicmVhazsKIAogCQljYXNlIENTUjEyMTJfS1ZfSURfREVTQ1JJUFRPUjoKQEAgLTEyNzMsOCArMTI0NCw3IEBACiAgKiB0aGUgdG8gdGFrZSB3aGF0ZXZlciBhY3Rpb25zIHJlcXVpcmVkLgogICovCiBzdGF0aWMgdm9pZCBub2RlbWdyX3VwZGF0ZV9ub2RlKHN0cnVjdCBub2RlX2VudHJ5ICpuZSwgc3RydWN0IGNzcjEyMTJfY3NyICpjc3IsCi0JCQkJc3RydWN0IGhvc3RfaW5mbyAqaGksIG5vZGVpZF90IG5vZGVpZCwKLQkJCQl1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbikKKwkJCQlub2RlaWRfdCBub2RlaWQsIHVuc2lnbmVkIGludCBnZW5lcmF0aW9uKQogewogCWlmIChuZS0+bm9kZWlkICE9IG5vZGVpZCkgewogCQlIUFNCX0RFQlVHKCJOb2RlIGNoYW5nZWQ6ICIgTk9ERV9CVVNfRk1UICIgLT4gIiBOT0RFX0JVU19GTVQsCkBAIC0xMzA1LDE5ICsxMjc1LDIzIEBACiAJCWNzcjEyMTJfZGVzdHJveV9jc3IoY3NyKTsKIAl9CiAKLQlpZiAobmUtPmluX2xpbWJvKQotCQlub2RlbWdyX3Jlc3VtZV9uZShuZSk7Ci0KIAkvKiBNYXJrIHRoZSBub2RlIGN1cnJlbnQgKi8KIAluZS0+Z2VuZXJhdGlvbiA9IGdlbmVyYXRpb247CisKKwlpZiAobmUtPmluX2xpbWJvKSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmbmUtPmRldmljZSwgJmRldl9hdHRyX25lX2luX2xpbWJvKTsKKwkJbmUtPmluX2xpbWJvID0gZmFsc2U7CisKKwkJSFBTQl9ERUJVRygiTm9kZSByZWFjdGl2YXRlZDogIgorCQkJICAgIklEOkJVU1siIE5PREVfQlVTX0ZNVCAiXSAgR1VJRFslMDE2THhdIiwKKwkJCSAgIE5PREVfQlVTX0FSR1MobmUtPmhvc3QsIG5lLT5ub2RlaWQpLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluZS0+Z3VpZCk7CisJfQogfQogCi0KLQotc3RhdGljIHZvaWQgbm9kZW1ncl9ub2RlX3NjYW5fb25lKHN0cnVjdCBob3N0X2luZm8gKmhpLAorc3RhdGljIHZvaWQgbm9kZW1ncl9ub2RlX3NjYW5fb25lKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsCiAJCQkJICBub2RlaWRfdCBub2RlaWQsIGludCBnZW5lcmF0aW9uKQogewotCXN0cnVjdCBocHNiX2hvc3QgKmhvc3QgPSBoaS0+aG9zdDsKIAlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmU7CiAJb2N0bGV0X3QgZ3VpZDsKIAlzdHJ1Y3QgY3NyMTIxMl9jc3IgKmNzcjsKQEAgLTEzNzMsMTYgKzEzNDcsMTUgQEAKIAl9CiAKIAlpZiAoIW5lKQotCQlub2RlbWdyX2NyZWF0ZV9ub2RlKGd1aWQsIGNzciwgaGksIG5vZGVpZCwgZ2VuZXJhdGlvbik7CisJCW5vZGVtZ3JfY3JlYXRlX25vZGUoZ3VpZCwgY3NyLCBob3N0LCBub2RlaWQsIGdlbmVyYXRpb24pOwogCWVsc2UKLQkJbm9kZW1ncl91cGRhdGVfbm9kZShuZSwgY3NyLCBoaSwgbm9kZWlkLCBnZW5lcmF0aW9uKTsKKwkJbm9kZW1ncl91cGRhdGVfbm9kZShuZSwgY3NyLCBub2RlaWQsIGdlbmVyYXRpb24pOwogfQogCiAKLXN0YXRpYyB2b2lkIG5vZGVtZ3Jfbm9kZV9zY2FuKHN0cnVjdCBob3N0X2luZm8gKmhpLCBpbnQgZ2VuZXJhdGlvbikKK3N0YXRpYyB2b2lkIG5vZGVtZ3Jfbm9kZV9zY2FuKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBnZW5lcmF0aW9uKQogewogCWludCBjb3VudDsKLQlzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0ID0gaGktPmhvc3Q7CiAJc3RydWN0IHNlbGZpZCAqc2lkID0gKHN0cnVjdCBzZWxmaWQgKilob3N0LT50b3BvbG9neV9tYXA7CiAJbm9kZWlkX3Qgbm9kZWlkID0gTE9DQUxfQlVTOwogCkBAIC0xMzk1LDg5ICsxMzY4LDI2IEBACiAJCQlub2RlaWQrKzsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCW5vZGVtZ3Jfbm9kZV9zY2FuX29uZShoaSwgbm9kZWlkKyssIGdlbmVyYXRpb24pOworCQlub2RlbWdyX25vZGVfc2Nhbl9vbmUoaG9zdCwgbm9kZWlkKyssIGdlbmVyYXRpb24pOwogCX0KIH0KIAotc3RhdGljIGludCBfX25vZGVtZ3JfZHJpdmVyX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgbm9kZW1ncl9wYXVzZV9uZShzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUpCiB7Ci0Jc3RydWN0IHVuaXRfZGlyZWN0b3J5ICp1ZDsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OwotCXN0cnVjdCBub2RlX2VudHJ5ICpuZSA9IChzdHJ1Y3Qgbm9kZV9lbnRyeSAqKWRhdGE7Ci0JaW50IGVycm9yOwotCi0JdWQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgdW5pdF9kaXJlY3RvcnksIHVuaXRfZGV2KTsKLQlpZiAodWQtPm5lID09IG5lKSB7Ci0JCWRydiA9IGdldF9kcml2ZXIodWQtPmRldmljZS5kcml2ZXIpOwotCQlpZiAoZHJ2KSB7Ci0JCQllcnJvciA9IDE7IC8qIHJlbGVhc2UgaWYgc3VzcGVuZCBpcyBub3QgaW1wbGVtZW50ZWQgKi8KLQkJCWlmIChkcnYtPnN1c3BlbmQpIHsKLQkJCQlkb3duKCZ1ZC0+ZGV2aWNlLnNlbSk7Ci0JCQkJZXJyb3IgPSBkcnYtPnN1c3BlbmQoJnVkLT5kZXZpY2UsIFBNU0dfU1VTUEVORCk7Ci0JCQkJdXAoJnVkLT5kZXZpY2Uuc2VtKTsKLQkJCX0KLQkJCWlmIChlcnJvcikKLQkJCQlkZXZpY2VfcmVsZWFzZV9kcml2ZXIoJnVkLT5kZXZpY2UpOwotCQkJcHV0X2RyaXZlcihkcnYpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19ub2RlbWdyX2RyaXZlcl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCXN0cnVjdCB1bml0X2RpcmVjdG9yeSAqdWQ7Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIgKmRydjsKLQlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUgPSAoc3RydWN0IG5vZGVfZW50cnkgKilkYXRhOwotCi0JdWQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgdW5pdF9kaXJlY3RvcnksIHVuaXRfZGV2KTsKLQlpZiAodWQtPm5lID09IG5lKSB7Ci0JCWRydiA9IGdldF9kcml2ZXIodWQtPmRldmljZS5kcml2ZXIpOwotCQlpZiAoZHJ2KSB7Ci0JCQlpZiAoZHJ2LT5yZXN1bWUpIHsKLQkJCQlkb3duKCZ1ZC0+ZGV2aWNlLnNlbSk7Ci0JCQkJZHJ2LT5yZXN1bWUoJnVkLT5kZXZpY2UpOwotCQkJCXVwKCZ1ZC0+ZGV2aWNlLnNlbSk7Ci0JCQl9Ci0JCQlwdXRfZHJpdmVyKGRydik7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbm9kZW1ncl9zdXNwZW5kX25lKHN0cnVjdCBub2RlX2VudHJ5ICpuZSkKLXsKLQlIUFNCX0RFQlVHKCJOb2RlIHN1c3BlbmRlZDogSUQ6QlVTWyIgTk9ERV9CVVNfRk1UICJdICBHVUlEWyUwMTZMeF0iLAorCUhQU0JfREVCVUcoIk5vZGUgcGF1c2VkOiBJRDpCVVNbIiBOT0RFX0JVU19GTVQgIl0gIEdVSURbJTAxNkx4XSIsCiAJCSAgIE5PREVfQlVTX0FSR1MobmUtPmhvc3QsIG5lLT5ub2RlaWQpLAogCQkgICAodW5zaWduZWQgbG9uZyBsb25nKW5lLT5ndWlkKTsKIAotCW5lLT5pbl9saW1ibyA9IDE7CisJbmUtPmluX2xpbWJvID0gdHJ1ZTsKIAlXQVJOX09OKGRldmljZV9jcmVhdGVfZmlsZSgmbmUtPmRldmljZSwgJmRldl9hdHRyX25lX2luX2xpbWJvKSk7Ci0KLQljbGFzc19mb3JfZWFjaF9kZXZpY2UoJm5vZGVtZ3JfdWRfY2xhc3MsIE5VTEwsIG5lLAotCQkJICAgICAgX19ub2RlbWdyX2RyaXZlcl9zdXNwZW5kKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBub2RlbWdyX3Jlc3VtZV9uZShzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUpCi17Ci0JbmUtPmluX2xpbWJvID0gMDsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm5lLT5kZXZpY2UsICZkZXZfYXR0cl9uZV9pbl9saW1ibyk7Ci0KLQljbGFzc19mb3JfZWFjaF9kZXZpY2UoJm5vZGVtZ3JfdWRfY2xhc3MsIE5VTEwsIG5lLAotCQkJICAgICAgX19ub2RlbWdyX2RyaXZlcl9yZXN1bWUpOwotCUhQU0JfREVCVUcoIk5vZGUgcmVzdW1lZDogSUQ6QlVTWyIgTk9ERV9CVVNfRk1UICJdICBHVUlEWyUwMTZMeF0iLAotCQkgICBOT0RFX0JVU19BUkdTKG5lLT5ob3N0LCBuZS0+bm9kZWlkKSwgKHVuc2lnbmVkIGxvbmcgbG9uZyluZS0+Z3VpZCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19ub2RlbWdyX3VwZGF0ZV9wZHJ2KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgdXBkYXRlX3BkcnYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCB1bml0X2RpcmVjdG9yeSAqdWQ7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydjsKIAlzdHJ1Y3QgaHBzYl9wcm90b2NvbF9kcml2ZXIgKnBkcnY7Ci0Jc3RydWN0IG5vZGVfZW50cnkgKm5lID0gKHN0cnVjdCBub2RlX2VudHJ5ICopZGF0YTsKKwlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUgPSBkYXRhOwogCWludCBlcnJvcjsKIAogCXVkID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHVuaXRfZGlyZWN0b3J5LCB1bml0X2Rldik7CkBAIC0xNTAzLDExICsxNDEzLDkgQEAKIAogc3RhdGljIHZvaWQgbm9kZW1ncl91cGRhdGVfcGRydihzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUpCiB7Ci0JY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZub2RlbWdyX3VkX2NsYXNzLCBOVUxMLCBuZSwKLQkJCSAgICAgIF9fbm9kZW1ncl91cGRhdGVfcGRydik7CisJY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZub2RlbWdyX3VkX2NsYXNzLCBOVUxMLCBuZSwgdXBkYXRlX3BkcnYpOwogfQogCi0KIC8qIFdyaXRlIHRoZSBCUk9BRENBU1RfQ0hBTk5FTCBhcyBwZXIgSUVFRTEzOTRhIDguMy4yLjMuMTEgYW5kIDguNC4yLjMuICBUaGlzCiAgKiBzZWVtcyBsaWtlIGFuIG9wdGlvbmFsIHNlcnZpY2UgYnV0IGluIHRoZSBlbmQgaXQgaXMgcHJhY3RpY2FsbHkgbWFuZGF0b3J5CiAgKiBhcyBhIGNvbnNlcXVlbmNlIG9mIHRoZXNlIGNsYXVzZXMuCkBAIC0xNTM1LDExICsxNDQzLDEyIEBACiB9CiAKIAotc3RhdGljIHZvaWQgbm9kZW1ncl9wcm9iZV9uZShzdHJ1Y3QgaG9zdF9pbmZvICpoaSwgc3RydWN0IG5vZGVfZW50cnkgKm5lLCBpbnQgZ2VuZXJhdGlvbikKK3N0YXRpYyB2b2lkIG5vZGVtZ3JfcHJvYmVfbmUoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgc3RydWN0IG5vZGVfZW50cnkgKm5lLAorCQkJICAgICBpbnQgZ2VuZXJhdGlvbikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQlpZiAobmUtPmhvc3QgIT0gaGktPmhvc3QgfHwgbmUtPmluX2xpbWJvKQorCWlmIChuZS0+aG9zdCAhPSBob3N0IHx8IG5lLT5pbl9saW1ibykKIAkJcmV0dXJuOwogCiAJZGV2ID0gZ2V0X2RldmljZSgmbmUtPmRldmljZSk7CkBAIC0xNTU0LDQwICsxNDYzLDQwIEBACiAJICogZG93biB0byB0aGUgZHJpdmVycy4gT3RoZXJ3aXNlLCB0aGlzIGlzIGEgZGVhZCBub2RlIGFuZCB3ZQogCSAqIHN1c3BlbmQgaXQuICovCiAJaWYgKG5lLT5uZWVkc19wcm9iZSkKLQkJbm9kZW1ncl9wcm9jZXNzX3Jvb3RfZGlyZWN0b3J5KGhpLCBuZSk7CisJCW5vZGVtZ3JfcHJvY2Vzc19yb290X2RpcmVjdG9yeShuZSk7CiAJZWxzZSBpZiAobmUtPmdlbmVyYXRpb24gPT0gZ2VuZXJhdGlvbikKIAkJbm9kZW1ncl91cGRhdGVfcGRydihuZSk7CiAJZWxzZQotCQlub2RlbWdyX3N1c3BlbmRfbmUobmUpOworCQlub2RlbWdyX3BhdXNlX25lKG5lKTsKIAogCXB1dF9kZXZpY2UoZGV2KTsKIH0KIAotc3RydWN0IHByb2JlX3BhcmFtIHsKLQlzdHJ1Y3QgaG9zdF9pbmZvICpoaTsKK3N0cnVjdCBub2RlX3Byb2JlX3BhcmFtZXRlciB7CisJc3RydWN0IGhwc2JfaG9zdCAqaG9zdDsKIAlpbnQgZ2VuZXJhdGlvbjsKIAlib29sIHByb2JlX25vdzsKIH07CiAKIHN0YXRpYyBpbnQgbm9kZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IHByb2JlX3BhcmFtICpwID0gZGF0YTsKKwlzdHJ1Y3Qgbm9kZV9wcm9iZV9wYXJhbWV0ZXIgKnAgPSBkYXRhOwogCXN0cnVjdCBub2RlX2VudHJ5ICpuZTsKIAotCWlmIChwLT5nZW5lcmF0aW9uICE9IGdldF9ocHNiX2dlbmVyYXRpb24ocC0+aGktPmhvc3QpKQorCWlmIChwLT5nZW5lcmF0aW9uICE9IGdldF9ocHNiX2dlbmVyYXRpb24ocC0+aG9zdCkpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJbmUgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgbm9kZV9lbnRyeSwgbm9kZV9kZXYpOwogCWlmIChuZS0+bmVlZHNfcHJvYmUgPT0gcC0+cHJvYmVfbm93KQotCQlub2RlbWdyX3Byb2JlX25lKHAtPmhpLCBuZSwgcC0+Z2VuZXJhdGlvbik7CisJCW5vZGVtZ3JfcHJvYmVfbmUocC0+aG9zdCwgbmUsIHAtPmdlbmVyYXRpb24pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBub2RlbWdyX25vZGVfcHJvYmUoc3RydWN0IGhvc3RfaW5mbyAqaGksIGludCBnZW5lcmF0aW9uKQorc3RhdGljIGludCBub2RlbWdyX25vZGVfcHJvYmUoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgaW50IGdlbmVyYXRpb24pCiB7Ci0Jc3RydWN0IHByb2JlX3BhcmFtIHA7CisJc3RydWN0IG5vZGVfcHJvYmVfcGFyYW1ldGVyIHA7CiAKLQlwLmhpID0gaGk7CisJcC5ob3N0ID0gaG9zdDsKIAlwLmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOwogCS8qCiAJICogRG8gc29tZSBwcm9jZXNzaW5nIG9mIHRoZSBub2RlcyB3ZSd2ZSBwcm9iZWQuIFRoaXMgcHVsbHMgdGhlbQpAQCAtMTYwNCwxMSArMTUxMywxMSBAQAogCSAqLwogCXAucHJvYmVfbm93ID0gZmFsc2U7CiAJaWYgKGNsYXNzX2Zvcl9lYWNoX2RldmljZSgmbm9kZW1ncl9uZV9jbGFzcywgTlVMTCwgJnAsIG5vZGVfcHJvYmUpICE9IDApCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlwLnByb2JlX25vdyA9IHRydWU7CiAJaWYgKGNsYXNzX2Zvcl9lYWNoX2RldmljZSgmbm9kZW1ncl9uZV9jbGFzcywgTlVMTCwgJnAsIG5vZGVfcHJvYmUpICE9IDApCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJLyoKIAkgKiBOb3cgbGV0J3MgdGVsbCB0aGUgYnVzIHRvIHJlc2NhbiBvdXIgZGV2aWNlcy4gVGhpcyBtYXkgc2VlbQogCSAqIGxpa2Ugb3ZlcmhlYWQsIGJ1dCB0aGUgZHJpdmVyLW1vZGVsIGNvcmUgd2lsbCBvbmx5IHNjYW4gYQpAQCAtMTYyMCw2ICsxNTI5LDI3IEBACiAJICovCiAJaWYgKGJ1c19yZXNjYW5fZGV2aWNlcygmaWVlZTEzOTRfYnVzX3R5cGUpICE9IDApCiAJCUhQU0JfREVCVUcoImJ1c19yZXNjYW5fZGV2aWNlcyBoYWQgYW4gZXJyb3IiKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9ub2Rlc19pbl9saW1ibyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5vZGVfZW50cnkgKm5lOworCisJaWYgKGRldi0+YnVzICE9ICZpZWVlMTM5NF9idXNfdHlwZSkKKwkJcmV0dXJuIDA7CisKKwluZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBub2RlX2VudHJ5LCBkZXZpY2UpOworCWlmIChuZS0+aW5fbGltYm8pCisJCW5vZGVtZ3JfcmVtb3ZlX25lKG5lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBub2RlbWdyX3JlbW92ZV9ub2Rlc19pbl9saW1ibyhzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0KQoreworCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmaG9zdC0+ZGV2aWNlLCBOVUxMLCByZW1vdmVfbm9kZXNfaW5fbGltYm8pOwogfQogCiBzdGF0aWMgaW50IG5vZGVtZ3Jfc2VuZF9yZXN1bWVfcGFja2V0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpCkBAIC0xNzMwLDEwICsxNjYwLDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBub2RlbWdyX2hvc3RfdGhyZWFkKHZvaWQgKl9faGkpCitzdGF0aWMgaW50IG5vZGVtZ3JfaG9zdF90aHJlYWQodm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaG9zdF9pbmZvICpoaSA9IChzdHJ1Y3QgaG9zdF9pbmZvICopX19oaTsKLQlzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0ID0gaGktPmhvc3Q7CisJc3RydWN0IGhwc2JfaG9zdCAqaG9zdCA9IGRhdGE7CiAJdW5zaWduZWQgaW50IGcsIGdlbmVyYXRpb24gPSAwOwogCWludCBpLCByZXNldF9jeWNsZXMgPSAwOwogCkBAIC0xNzg3LDM2ICsxNzE2LDQ4IEBACiAJCSAqIGVudHJpZXMuIFRoaXMgZG9lcyBub3QgZG8gdGhlIHN5c2ZzIHN0dWZmLCBzaW5jZSB0aGF0CiAJCSAqIHdvdWxkIHRyaWdnZXIgdWV2ZW50cyBhbmQgc3VjaCwgd2hpY2ggaXMgYSBiYWQgaWRlYSBhdAogCQkgKiB0aGlzIHBvaW50LiAqLwotCQlub2RlbWdyX25vZGVfc2NhbihoaSwgZ2VuZXJhdGlvbik7CisJCW5vZGVtZ3Jfbm9kZV9zY2FuKGhvc3QsIGdlbmVyYXRpb24pOwogCiAJCS8qIFRoaXMgYWN0dWFsbHkgZG9lcyB0aGUgZnVsbCBwcm9iZSwgd2l0aCBzeXNmcwogCQkgKiByZWdpc3RyYXRpb24uICovCi0JCW5vZGVtZ3Jfbm9kZV9wcm9iZShoaSwgZ2VuZXJhdGlvbik7CisJCWlmICghbm9kZW1ncl9ub2RlX3Byb2JlKGhvc3QsIGdlbmVyYXRpb24pKQorCQkJY29udGludWU7CiAKIAkJLyogVXBkYXRlIHNvbWUgb2Ygb3VyIHN5c2ZzIHN5bWxpbmtzICovCiAJCW5vZGVtZ3JfdXBkYXRlX2hvc3RfZGV2X2xpbmtzKGhvc3QpOworCisJCS8qIFNsZWVwIDMgc2Vjb25kcyAqLworCQlmb3IgKGkgPSAzMDAwLzIwMDsgaTsgaS0tKSB7CisJCQltc2xlZXBfaW50ZXJydXB0aWJsZSgyMDApOworCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCQlnb3RvIGV4aXQ7CisKKwkJCWlmIChnZW5lcmF0aW9uICE9IGdldF9ocHNiX2dlbmVyYXRpb24oaG9zdCkpCisJCQkJYnJlYWs7CisJCX0KKwkJLyogUmVtb3ZlIG5vZGVzIHdoaWNoIGFyZSBnb25lLCB1bmxlc3MgYSBidXMgcmVzZXQgaGFwcGVuZWQgKi8KKwkJaWYgKCFpKQorCQkJbm9kZW1ncl9yZW1vdmVfbm9kZXNfaW5fbGltYm8oaG9zdCk7CiAJfQogZXhpdDoKIAlIUFNCX1ZFUkJPU0UoIk5vZGVNZ3I6IEV4aXRpbmcgdGhyZWFkIik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBob3N0X2l0ZXJfcGFyYW0geworc3RydWN0IHBlcl9ob3N0X3BhcmFtZXRlciB7CiAJdm9pZCAqZGF0YTsKIAlpbnQgKCpjYikoc3RydWN0IGhwc2JfaG9zdCAqLCB2b2lkICopOwogfTsKIAotc3RhdGljIGludCBfX25vZGVtZ3JfZm9yX2VhY2hfaG9zdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHBlcl9ob3N0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0OwotCXN0cnVjdCBob3N0X2l0ZXJfcGFyYW0gKmhpcCA9IChzdHJ1Y3QgaG9zdF9pdGVyX3BhcmFtICopZGF0YTsKLQlpbnQgZXJyb3IgPSAwOworCXN0cnVjdCBwZXJfaG9zdF9wYXJhbWV0ZXIgKnAgPSBkYXRhOwogCiAJaG9zdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBocHNiX2hvc3QsIGhvc3RfZGV2KTsKLQllcnJvciA9IGhpcC0+Y2IoaG9zdCwgaGlwLT5kYXRhKTsKLQotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gcC0+Y2IoaG9zdCwgcC0+ZGF0YSk7CiB9CisKIC8qKgogICogbm9kZW1ncl9mb3JfZWFjaF9ob3N0IC0gY2FsbCBhIGZ1bmN0aW9uIGZvciBlYWNoIElFRUUgMTM5NCBob3N0CiAgKiBAZGF0YTogYW4gYWRkcmVzcyB0byBzdXBwbHkgdG8gdGhlIGNhbGxiYWNrCkBAIC0xODMxLDE1ICsxNzcyLDExIEBACiAgKi8KIGludCBub2RlbWdyX2Zvcl9lYWNoX2hvc3Qodm9pZCAqZGF0YSwgaW50ICgqY2IpKHN0cnVjdCBocHNiX2hvc3QgKiwgdm9pZCAqKSkKIHsKLQlzdHJ1Y3QgaG9zdF9pdGVyX3BhcmFtIGhpcDsKLQlpbnQgZXJyb3I7CisJc3RydWN0IHBlcl9ob3N0X3BhcmFtZXRlciBwOwogCi0JaGlwLmNiID0gY2I7Ci0JaGlwLmRhdGEgPSBkYXRhOwotCWVycm9yID0gY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZocHNiX2hvc3RfY2xhc3MsIE5VTEwsICZoaXAsCi0JCQkJICAgICAgX19ub2RlbWdyX2Zvcl9lYWNoX2hvc3QpOwotCi0JcmV0dXJuIGVycm9yOworCXAuY2IgPSBjYjsKKwlwLmRhdGEgPSBkYXRhOworCXJldHVybiBjbGFzc19mb3JfZWFjaF9kZXZpY2UoJmhwc2JfaG9zdF9jbGFzcywgTlVMTCwgJnAsIHBlcl9ob3N0KTsKIH0KIAogLyogVGhlIGZvbGxvd2luZyB0d28gY29udmVuaWVuY2UgZnVuY3Rpb25zIHVzZSBhIHN0cnVjdCBub2RlX2VudHJ5CkBAIC0xODkzLDcgKzE4MzAsNyBAQAogCQlyZXR1cm47CiAJfQogCWhpLT5ob3N0ID0gaG9zdDsKLQloaS0+dGhyZWFkID0ga3RocmVhZF9ydW4obm9kZW1ncl9ob3N0X3RocmVhZCwgaGksICJrbm9kZW1ncmRfJWQiLAorCWhpLT50aHJlYWQgPSBrdGhyZWFkX3J1bihub2RlbWdyX2hvc3RfdGhyZWFkLCBob3N0LCAia25vZGVtZ3JkXyVkIiwKIAkJCQkgaG9zdC0+aWQpOwogCWlmIChJU19FUlIoaGktPnRocmVhZCkpIHsKIAkJSFBTQl9FUlIoIk5vZGVNZ3I6IGNhbm5vdCBzdGFydCB0aHJlYWQgZm9yIGhvc3QgJWQiLCBob3N0LT5pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaCBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5oCmluZGV4IDZlYjI2NDYuLjRmMjg3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5oCkBAIC0xMTAsNyArMTEwLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlIG5vZGVfZGV2OwogCiAJLyogTWVhbnMgdGhpcyBub2RlIGlzIG5vdCBhdHRhY2hlZCBhbnltb3JlICovCi0JaW50IGluX2xpbWJvOworCWJvb2wgaW5fbGltYm87CiAKIAlzdHJ1Y3QgY3NyMTIxMl9jc3IgKmNzcjsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQtcHJpdmF0ZS5oIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LXByaXZhdGUuaAppbmRleCBhMDZhYWFkLi43YTIyNWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQtcHJpdmF0ZS5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC1wcml2YXRlLmgKQEAgLTIyLDYgKzIyLDcgQEAKIHN0cnVjdCBmaWxlX2luZm8gewogICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKKwlzdHJ1Y3QgbXV0ZXggc3RhdGVfbXV0ZXg7CiAgICAgICAgIGVudW0geyBvcGVuZWQsIGluaXRpYWxpemVkLCBjb25uZWN0ZWQgfSBzdGF0ZTsKICAgICAgICAgdW5zaWduZWQgaW50IHByb3RvY29sX3ZlcnNpb247CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKaW5kZXggNmZhOWU0YS4uOWYxOWFjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CkBAIC0yMjY3LDYgKzIyNjgsOCBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKKwltdXRleF9sb2NrKCZmaS0+c3RhdGVfbXV0ZXgpOworCiAJc3dpdGNoIChmaS0+c3RhdGUpIHsKIAljYXNlIG9wZW5lZDoKIAkJcmV0dmFsID0gc3RhdGVfb3BlbmVkKGZpLCByZXEpOwpAQCAtMjI4MSw2ICsyMjg0LDggQEAKIAkJYnJlYWs7CiAJfQogCisJbXV0ZXhfdW5sb2NrKCZmaS0+c3RhdGVfbXV0ZXgpOworCiAJaWYgKHJldHZhbCA8IDApIHsKIAkJZnJlZV9wZW5kaW5nX3JlcXVlc3QocmVxKTsKIAl9IGVsc2UgewpAQCAtMjU0MSwxMDkgKzI1NDYsMTIwIEBACiBzdGF0aWMgaW50IHJhdzEzOTRfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGZpbGVfaW5mbyAqZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmZpLT5zdGF0ZV9tdXRleCk7CiAKIAlpZiAoZmktPmlzb19zdGF0ZSA9PSBSQVcxMzk0X0lTT19JTkFDVElWRSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJZWxzZQorCQlyZXQgPSBkbWFfcmVnaW9uX21tYXAoJmZpLT5pc29faGFuZGxlLT5kYXRhX2J1ZiwgZmlsZSwgdm1hKTsKIAotCXJldHVybiBkbWFfcmVnaW9uX21tYXAoJmZpLT5pc29faGFuZGxlLT5kYXRhX2J1ZiwgZmlsZSwgdm1hKTsKKwltdXRleF91bmxvY2soJmZpLT5zdGF0ZV9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgbG9uZyByYXcxMzk0X2lvY3RsX2luYWN0aXZlKHN0cnVjdCBmaWxlX2luZm8gKmZpLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgIHZvaWQgX191c2VyICphcmdwKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9JTklUOgorCQlyZXR1cm4gcmF3MTM5NF9pc29feG1pdF9pbml0KGZpLCBhcmdwKTsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX0lOSVQ6CisJCXJldHVybiByYXcxMzk0X2lzb19yZWN2X2luaXQoZmksIGFyZ3ApOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGxvbmcgcmF3MTM5NF9pb2N0bF9yZWN2KHN0cnVjdCBmaWxlX2luZm8gKmZpLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX1NUQVJUOnsKKwkJCWludCBhcmdzWzNdOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3NbMF0sIGFyZ3AsIHNpemVvZihhcmdzKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9zdGFydChmaS0+aXNvX2hhbmRsZSwKKwkJCQkJCSAgIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pOworCQl9CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9SRUNWX1NUT1A6CisJCWhwc2JfaXNvX3N0b3AoZmktPmlzb19oYW5kbGUpOworCQlyZXR1cm4gMDsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX0xJU1RFTl9DSEFOTkVMOgorCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9saXN0ZW5fY2hhbm5lbChmaS0+aXNvX2hhbmRsZSwgYXJnKTsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX1VOTElTVEVOX0NIQU5ORUw6CisJCXJldHVybiBocHNiX2lzb19yZWN2X3VubGlzdGVuX2NoYW5uZWwoZmktPmlzb19oYW5kbGUsIGFyZyk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9TRVRfQ0hBTk5FTF9NQVNLOnsKKwkJCXU2NCBtYXNrOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoJm1hc2ssIGFyZ3AsIHNpemVvZihtYXNrKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9zZXRfY2hhbm5lbF9tYXNrKGZpLT5pc29faGFuZGxlLAorCQkJCQkJCSAgICAgIG1hc2spOworCQl9CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fR0VUX1NUQVRVUzoKKwkJcmV0dXJuIHJhdzEzOTRfaXNvX2dldF9zdGF0dXMoZmksIGFyZ3ApOworCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfUEFDS0VUUzoKKwkJcmV0dXJuIHJhdzEzOTRfaXNvX3JlY3ZfcGFja2V0cyhmaSwgYXJncCk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9SRUxFQVNFX1BBQ0tFVFM6CisJCXJldHVybiBocHNiX2lzb19yZWN2X3JlbGVhc2VfcGFja2V0cyhmaS0+aXNvX2hhbmRsZSwgYXJnKTsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX0ZMVVNIOgorCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9mbHVzaChmaS0+aXNvX2hhbmRsZSk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fU0hVVERPV046CisJCXJhdzEzOTRfaXNvX3NodXRkb3duKGZpKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fUVVFVUVfQUNUSVZJVFk6CisJCXF1ZXVlX3Jhd2lzb19ldmVudChmaSk7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGxvbmcgcmF3MTM5NF9pb2N0bF94bWl0KHN0cnVjdCBmaWxlX2luZm8gKmZpLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgICAgIHZvaWQgX191c2VyICphcmdwKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9TVEFSVDp7CisJCQlpbnQgYXJnc1syXTsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzWzBdLCBhcmdwLCBzaXplb2YoYXJncykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIGhwc2JfaXNvX3htaXRfc3RhcnQoZmktPmlzb19oYW5kbGUsCisJCQkJCQkgICBhcmdzWzBdLCBhcmdzWzFdKTsKKwkJfQorCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1hNSVRfU1lOQzoKKwkJcmV0dXJuIGhwc2JfaXNvX3htaXRfc3luYyhmaS0+aXNvX2hhbmRsZSk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9SRUNWX1NUT1A6CisJCWhwc2JfaXNvX3N0b3AoZmktPmlzb19oYW5kbGUpOworCQlyZXR1cm4gMDsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19HRVRfU1RBVFVTOgorCQlyZXR1cm4gcmF3MTM5NF9pc29fZ2V0X3N0YXR1cyhmaSwgYXJncCk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9QQUNLRVRTOgorCQlyZXR1cm4gcmF3MTM5NF9pc29fc2VuZF9wYWNrZXRzKGZpLCBhcmdwKTsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19TSFVURE9XTjoKKwkJcmF3MTM5NF9pc29fc2h1dGRvd24oZmkpOworCQlyZXR1cm4gMDsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19RVUVVRV9BQ1RJVklUWToKKwkJcXVldWVfcmF3aXNvX2V2ZW50KGZpKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogfQogCiAvKiBpb2N0bCBpcyBvbmx5IHVzZWQgZm9yIHJhd2lzbyBvcGVyYXRpb25zICovCi1zdGF0aWMgbG9uZyBkb19yYXcxMzk0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgcmF3MTM5NF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGZpbGVfaW5mbyAqZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Ci0KLQlzd2l0Y2ggKGZpLT5pc29fc3RhdGUpIHsKLQljYXNlIFJBVzEzOTRfSVNPX0lOQUNUSVZFOgotCQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19YTUlUX0lOSVQ6Ci0JCQlyZXR1cm4gcmF3MTM5NF9pc29feG1pdF9pbml0KGZpLCBhcmdwKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9JTklUOgotCQkJcmV0dXJuIHJhdzEzOTRfaXNvX3JlY3ZfaW5pdChmaSwgYXJncCk7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIFJBVzEzOTRfSVNPX1JFQ1Y6Ci0JCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfU1RBUlQ6ewotCQkJCS8qIGNvcHkgYXJncyBmcm9tIHVzZXItc3BhY2UgKi8KLQkJCQlpbnQgYXJnc1szXTsKLQkJCQlpZiAoY29weV9mcm9tX3VzZXIKLQkJCQkgICAgKCZhcmdzWzBdLCBhcmdwLCBzaXplb2YoYXJncykpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9zdGFydChmaS0+aXNvX2hhbmRsZSwKLQkJCQkJCQkgICBhcmdzWzBdLCBhcmdzWzFdLAotCQkJCQkJCSAgIGFyZ3NbMl0pOwotCQkJfQotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19YTUlUX1JFQ1ZfU1RPUDoKLQkJCWhwc2JfaXNvX3N0b3AoZmktPmlzb19oYW5kbGUpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfTElTVEVOX0NIQU5ORUw6Ci0JCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9saXN0ZW5fY2hhbm5lbChmaS0+aXNvX2hhbmRsZSwKLQkJCQkJCQkgICAgYXJnKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9VTkxJU1RFTl9DSEFOTkVMOgotCQkJcmV0dXJuIGhwc2JfaXNvX3JlY3ZfdW5saXN0ZW5fY2hhbm5lbChmaS0+aXNvX2hhbmRsZSwKLQkJCQkJCQkgICAgICBhcmcpOwotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX1NFVF9DSEFOTkVMX01BU0s6ewotCQkJCS8qIGNvcHkgdGhlIHU2NCBmcm9tIHVzZXItc3BhY2UgKi8KLQkJCQl1NjQgbWFzazsKLQkJCQlpZiAoY29weV9mcm9tX3VzZXIoJm1hc2ssIGFyZ3AsIHNpemVvZihtYXNrKSkpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCXJldHVybiBocHNiX2lzb19yZWN2X3NldF9jaGFubmVsX21hc2soZmktPgotCQkJCQkJCQkgICAgICBpc29faGFuZGxlLAotCQkJCQkJCQkgICAgICBtYXNrKTsKLQkJCX0KLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fR0VUX1NUQVRVUzoKLQkJCXJldHVybiByYXcxMzk0X2lzb19nZXRfc3RhdHVzKGZpLCBhcmdwKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9QQUNLRVRTOgotCQkJcmV0dXJuIHJhdzEzOTRfaXNvX3JlY3ZfcGFja2V0cyhmaSwgYXJncCk7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfUkVMRUFTRV9QQUNLRVRTOgotCQkJcmV0dXJuIGhwc2JfaXNvX3JlY3ZfcmVsZWFzZV9wYWNrZXRzKGZpLT5pc29faGFuZGxlLAotCQkJCQkJCSAgICAgYXJnKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9GTFVTSDoKLQkJCXJldHVybiBocHNiX2lzb19yZWN2X2ZsdXNoKGZpLT5pc29faGFuZGxlKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fU0hVVERPV046Ci0JCQlyYXcxMzk0X2lzb19zaHV0ZG93bihmaSk7Ci0JCQlyZXR1cm4gMDsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fUVVFVUVfQUNUSVZJVFk6Ci0JCQlxdWV1ZV9yYXdpc29fZXZlbnQoZmkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBSQVcxMzk0X0lTT19YTUlUOgotCQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19YTUlUX1NUQVJUOnsKLQkJCQkvKiBjb3B5IHR3byBpbnRzIGZyb20gdXNlci1zcGFjZSAqLwotCQkJCWludCBhcmdzWzJdOwotCQkJCWlmIChjb3B5X2Zyb21fdXNlcgotCQkJCSAgICAoJmFyZ3NbMF0sIGFyZ3AsIHNpemVvZihhcmdzKSkpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCXJldHVybiBocHNiX2lzb194bWl0X3N0YXJ0KGZpLT5pc29faGFuZGxlLAotCQkJCQkJCSAgIGFyZ3NbMF0sIGFyZ3NbMV0pOwotCQkJfQotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19YTUlUX1NZTkM6Ci0JCQlyZXR1cm4gaHBzYl9pc29feG1pdF9zeW5jKGZpLT5pc29faGFuZGxlKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9SRUNWX1NUT1A6Ci0JCQlocHNiX2lzb19zdG9wKGZpLT5pc29faGFuZGxlKTsKLQkJCXJldHVybiAwOwotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19HRVRfU1RBVFVTOgotCQkJcmV0dXJuIHJhdzEzOTRfaXNvX2dldF9zdGF0dXMoZmksIGFyZ3ApOwotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19YTUlUX1BBQ0tFVFM6Ci0JCQlyZXR1cm4gcmF3MTM5NF9pc29fc2VuZF9wYWNrZXRzKGZpLCBhcmdwKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fU0hVVERPV046Ci0JCQlyYXcxMzk0X2lzb19zaHV0ZG93bihmaSk7Ci0JCQlyZXR1cm4gMDsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fUVVFVUVfQUNUSVZJVFk6Ci0JCQlxdWV1ZV9yYXdpc29fZXZlbnQoZmkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQorCWxvbmcgcmV0OwogCiAJLyogc3RhdGUtaW5kZXBlbmRlbnQgY29tbWFuZHMgKi8KIAlzd2l0Y2goY21kKSB7CkBAIC0yNjUzLDE2ICsyNjY5LDI1IEBACiAJCWJyZWFrOwogCX0KIAotCXJldHVybiAtRUlOVkFMOwotfQorCW11dGV4X2xvY2soJmZpLT5zdGF0ZV9tdXRleCk7CiAKLXN0YXRpYyBsb25nIHJhdzEzOTRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkJCQkJdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JbG9uZyByZXQ7Ci0JbG9ja19rZXJuZWwoKTsKLQlyZXQgPSBkb19yYXcxMzk0X2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJc3dpdGNoIChmaS0+aXNvX3N0YXRlKSB7CisJY2FzZSBSQVcxMzk0X0lTT19JTkFDVElWRToKKwkJcmV0ID0gcmF3MTM5NF9pb2N0bF9pbmFjdGl2ZShmaSwgY21kLCBhcmdwKTsKKwkJYnJlYWs7CisJY2FzZSBSQVcxMzk0X0lTT19SRUNWOgorCQlyZXQgPSByYXcxMzk0X2lvY3RsX3JlY3YoZmksIGNtZCwgYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBSQVcxMzk0X0lTT19YTUlUOgorCQlyZXQgPSByYXcxMzk0X2lvY3RsX3htaXQoZmksIGNtZCwgYXJncCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmZmktPnN0YXRlX211dGV4KTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI3MDAsNyArMjcyNSw3IEBACiAJICAgICFjb3B5X2Zyb21fdXNlcigmaW5mb3MzMiwgJmFyZy0+aW5mb3MsIHNpemVvZiBpbmZvczMyKSkgewogCQlpbmZvcyA9IGNvbXBhdF9wdHIoaW5mb3MzMik7CiAJCWlmICghY29weV90b191c2VyKCZkc3QtPmluZm9zLCAmaW5mb3MsIHNpemVvZiBpbmZvcykpCi0JCQllcnIgPSBkb19yYXcxMzk0X2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpZHN0KTsKKwkJCWVyciA9IHJhdzEzOTRfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZylkc3QpOwogCX0KIAlyZXR1cm4gZXJyOwogfQpAQCAtMjcyNCw3ICsyNzQ5LDYgQEAKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlsb25nIGVycjsKIAotCWxvY2tfa2VybmVsKCk7CiAJc3dpdGNoIChjbWQpIHsKIAkvKiBUaGVzZSByZXF1ZXN0cyBoYXZlIHNhbWUgZm9ybWF0IGFzIGxvbmcgYXMgJ2ludCcgaGFzIHNhbWUgc2l6ZS4gKi8KIAljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX0lOSVQ6CkBAIC0yNzQxLDcgKzI3NjUsNyBAQAogCWNhc2UgUkFXMTM5NF9JT0NfSVNPX0dFVF9TVEFUVVM6CiAJY2FzZSBSQVcxMzk0X0lPQ19JU09fU0hVVERPV046CiAJY2FzZSBSQVcxMzk0X0lPQ19JU09fUVVFVUVfQUNUSVZJVFk6Ci0JCWVyciA9IGRvX3JhdzEzOTRfaW9jdGwoZmlsZSwgY21kLCBhcmcpOworCQllcnIgPSByYXcxMzk0X2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKIAkJYnJlYWs7CiAJLyogVGhlc2UgcmVxdWVzdCBoYXZlIGRpZmZlcmVudCBmb3JtYXQuICovCiAJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9QQUNLRVRTMzI6CkBAIC0yNzU3LDcgKzI3ODEsNiBAQAogCQllcnIgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTI3OTEsNiArMjgxNCw3IEBACiAJZmktPm5vdGlmaWNhdGlvbiA9ICh1OCkgUkFXMTM5NF9OT1RJRllfT047CS8qIGJ1c3Jlc2V0IG5vdGlmaWNhdGlvbiAqLwogCiAJSU5JVF9MSVNUX0hFQUQoJmZpLT5saXN0KTsKKwltdXRleF9pbml0KCZmaS0+c3RhdGVfbXV0ZXgpOwogCWZpLT5zdGF0ZSA9IG9wZW5lZDsKIAlJTklUX0xJU1RfSEVBRCgmZmktPnJlcV9wZW5kaW5nKTsKIAlJTklUX0xJU1RfSEVBRCgmZmktPnJlcV9jb21wbGV0ZSk7CkBAIC0zMDEwLDEwICszMDM0LDEwIEBACiAJaHBzYl9yZWdpc3Rlcl9oaWdobGV2ZWwoJnJhdzEzOTRfaGlnaGxldmVsKTsKIAogCWlmIChJU19FUlIKLQkgICAgKGRldmljZV9jcmVhdGVfZHJ2ZGF0YSgKLQkgICAgICBocHNiX3Byb3RvY29sX2NsYXNzLCBOVUxMLAotCSAgICAgIE1LREVWKElFRUUxMzk0X01BSk9SLCBJRUVFMTM5NF9NSU5PUl9CTE9DS19SQVcxMzk0ICogMTYpLAotCSAgICAgIE5VTEwsIFJBVzEzOTRfREVWSUNFX05BTUUpKSkgeworCSAgICAoZGV2aWNlX2NyZWF0ZShocHNiX3Byb3RvY29sX2NsYXNzLCBOVUxMLAorCQkJICAgTUtERVYoSUVFRTEzOTRfTUFKT1IsCisJCQkJIElFRUUxMzk0X01JTk9SX0JMT0NLX1JBVzEzOTQgKiAxNiksCisJCQkgICBOVUxMLCBSQVcxMzk0X0RFVklDRV9OQU1FKSkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBvdXRfdW5yZWc7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwppbmRleCAxZDZhZDM0Li5jNTJmNmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwpAQCAtNTI2LDI2ICs1MjYsNDEgQEAKIAogc3RhdGljIGludCBzYnAydXRpbF9jcmVhdGVfY29tbWFuZF9vcmJfcG9vbChzdHJ1Y3Qgc2JwMl9sdSAqbHUpCiB7Ci0Jc3RydWN0IHNicDJfZndob3N0X2luZm8gKmhpID0gbHUtPmhpOwogCXN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbyAqY21kOworCXN0cnVjdCBkZXZpY2UgKmRtYWRldiA9IGx1LT5oaS0+aG9zdC0+ZGV2aWNlLnBhcmVudDsKIAlpbnQgaSwgb3JicyA9IHNicDJfc2VyaWFsaXplX2lvID8gMiA6IFNCUDJfTUFYX0NNRFM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgb3JiczsgaSsrKSB7CiAJCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFjbWQpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJY21kLT5jb21tYW5kX29yYl9kbWEgPSBkbWFfbWFwX3NpbmdsZShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKLQkJCQkJCSZjbWQtPmNvbW1hbmRfb3JiLAotCQkJCQkJc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKLQkJCQkJCURNQV9UT19ERVZJQ0UpOwotCQljbWQtPnNnZV9kbWEgPSBkbWFfbWFwX3NpbmdsZShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKLQkJCQkJJmNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCwKLQkJCQkJc2l6ZW9mKGNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCksCi0JCQkJCURNQV9UT19ERVZJQ0UpOworCQkJZ290byBmYWlsZWRfYWxsb2M7CisKKwkJY21kLT5jb21tYW5kX29yYl9kbWEgPQorCQkgICAgZG1hX21hcF9zaW5nbGUoZG1hZGV2LCAmY21kLT5jb21tYW5kX29yYiwKKwkJCQkgICBzaXplb2Yoc3RydWN0IHNicDJfY29tbWFuZF9vcmIpLAorCQkJCSAgIERNQV9UT19ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZG1hZGV2LCBjbWQtPmNvbW1hbmRfb3JiX2RtYSkpCisJCQlnb3RvIGZhaWxlZF9vcmI7CisKKwkJY21kLT5zZ2VfZG1hID0KKwkJICAgIGRtYV9tYXBfc2luZ2xlKGRtYWRldiwgJmNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCwKKwkJCQkgICBzaXplb2YoY21kLT5zY2F0dGVyX2dhdGhlcl9lbGVtZW50KSwKKwkJCQkgICBETUFfVE9fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRtYWRldiwgY21kLT5zZ2VfZG1hKSkKKwkJCWdvdG8gZmFpbGVkX3NnZTsKKwogCQlJTklUX0xJU1RfSEVBRCgmY21kLT5saXN0KTsKIAkJbGlzdF9hZGRfdGFpbCgmY21kLT5saXN0LCAmbHUtPmNtZF9vcmJfY29tcGxldGVkKTsKIAl9CiAJcmV0dXJuIDA7CisKK2ZhaWxlZF9zZ2U6CisJZG1hX3VubWFwX3NpbmdsZShkbWFkZXYsIGNtZC0+Y29tbWFuZF9vcmJfZG1hLAorCQkJIHNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksIERNQV9UT19ERVZJQ0UpOworZmFpbGVkX29yYjoKKwlrZnJlZShjbWQpOworZmFpbGVkX2FsbG9jOgorCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgdm9pZCBzYnAydXRpbF9yZW1vdmVfY29tbWFuZF9vcmJfcG9vbChzdHJ1Y3Qgc2JwMl9sdSAqbHUsCkBAIC02NDEsMjQgKzY1NiwxMSBAQAogc3RhdGljIHZvaWQgc2JwMnV0aWxfbWFya19jb21tYW5kX2NvbXBsZXRlZChzdHJ1Y3Qgc2JwMl9sdSAqbHUsCiAJCQkJCSAgICBzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKmNtZCkKIHsKLQlzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0ID0gbHUtPnVkLT5uZS0+aG9zdDsKLQotCWlmIChjbWQtPmNtZF9kbWEpIHsKLQkJaWYgKGNtZC0+ZG1hX3R5cGUgPT0gQ01EX0RNQV9TSU5HTEUpCi0JCQlkbWFfdW5tYXBfc2luZ2xlKGhvc3QtPmRldmljZS5wYXJlbnQsIGNtZC0+Y21kX2RtYSwKLQkJCQkJIGNtZC0+ZG1hX3NpemUsIGNtZC0+ZG1hX2Rpcik7Ci0JCWVsc2UgaWYgKGNtZC0+ZG1hX3R5cGUgPT0gQ01EX0RNQV9QQUdFKQotCQkJZG1hX3VubWFwX3BhZ2UoaG9zdC0+ZGV2aWNlLnBhcmVudCwgY21kLT5jbWRfZG1hLAotCQkJCSAgICAgICBjbWQtPmRtYV9zaXplLCBjbWQtPmRtYV9kaXIpOwotCQkvKiBYWFg6IENoZWNrIGZvciBDTURfRE1BX05PTkUgYnVnICovCi0JCWNtZC0+ZG1hX3R5cGUgPSBDTURfRE1BX05PTkU7Ci0JCWNtZC0+Y21kX2RtYSA9IDA7Ci0JfQotCWlmIChjbWQtPnNnZV9idWZmZXIpIHsKLQkJZG1hX3VubWFwX3NnKGhvc3QtPmRldmljZS5wYXJlbnQsIGNtZC0+c2dlX2J1ZmZlciwKLQkJCSAgICAgY21kLT5kbWFfc2l6ZSwgY21kLT5kbWFfZGlyKTsKLQkJY21kLT5zZ2VfYnVmZmVyID0gTlVMTDsKLQl9CisJaWYgKHNjc2lfc2dfY291bnQoY21kLT5DdXJyZW50X1NDcG50KSkKKwkJZG1hX3VubWFwX3NnKGx1LT51ZC0+bmUtPmhvc3QtPmRldmljZS5wYXJlbnQsCisJCQkgICAgIHNjc2lfc2dsaXN0KGNtZC0+Q3VycmVudF9TQ3BudCksCisJCQkgICAgIHNjc2lfc2dfY291bnQoY21kLT5DdXJyZW50X1NDcG50KSwKKwkJCSAgICAgY21kLT5DdXJyZW50X1NDcG50LT5zY19kYXRhX2RpcmVjdGlvbik7CiAJbGlzdF9tb3ZlX3RhaWwoJmNtZC0+bGlzdCwgJmx1LT5jbWRfb3JiX2NvbXBsZXRlZCk7CiB9CiAKQEAgLTgyMyw2ICs4MjUsMTAgQEAKICNlbmRpZgogCX0KIAorCWlmIChkbWFfZ2V0X21heF9zZWdfc2l6ZShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCkgPiBTQlAyX01BWF9TRUdfU0laRSkKKwkJQlVHX09OKGRtYV9zZXRfbWF4X3NlZ19zaXplKGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAorCQkJCQkgICAgU0JQMl9NQVhfU0VHX1NJWkUpKTsKKwogCS8qIFByZXZlbnQgdW5sb2FkaW5nIG9mIHRoZSAxMzk0IGhvc3QgKi8KIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGhpLT5ob3N0LT5kcml2ZXItPm93bmVyKSkgewogCQlTQlAyX0VSUigiZmFpbGVkIHRvIGdldCBhIHJlZmVyZW5jZSBvbiAxMzk0IGhvc3QgZHJpdmVyIik7CkBAIC0xNDk0LDg0ICsxNTAwLDY1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNicDJfcHJlcF9jb21tYW5kX29yYl9zZyhzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiAqb3JiLAotCQkJCSAgICAgc3RydWN0IHNicDJfZndob3N0X2luZm8gKmhpLAotCQkJCSAgICAgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjbWQsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgc2NzaV91c2Vfc2csCi0JCQkJICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCSAgICAgdTMyIG9yYl9kaXJlY3Rpb24sCi0JCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyKQorc3RhdGljIGludCBzYnAyX3ByZXBfY29tbWFuZF9vcmJfc2coc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKm9yYiwKKwkJCQkgICAgc3RydWN0IHNicDJfZndob3N0X2luZm8gKmhpLAorCQkJCSAgICBzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKmNtZCwKKwkJCQkgICAgdW5zaWduZWQgaW50IHNnX2NvdW50LAorCQkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCSAgICB1MzIgb3JiX2RpcmVjdGlvbiwKKwkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpcikKIHsKLQljbWQtPmRtYV9kaXIgPSBkbWFfZGlyOworCXN0cnVjdCBkZXZpY2UgKmRtYWRldiA9IGhpLT5ob3N0LT5kZXZpY2UucGFyZW50OworCXN0cnVjdCBzYnAyX3VucmVzdHJpY3RlZF9wYWdlX3RhYmxlICpwdDsKKwlpbnQgaSwgbjsKKworCW4gPSBkbWFfbWFwX3NnKGRtYWRldiwgc2csIHNnX2NvdW50LCBkbWFfZGlyKTsKKwlpZiAobiA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCW9yYi0+ZGF0YV9kZXNjcmlwdG9yX2hpID0gT1JCX1NFVF9OT0RFX0lEKGhpLT5ob3N0LT5ub2RlX2lkKTsKIAlvcmItPm1pc2MgfD0gT1JCX1NFVF9ESVJFQ1RJT04ob3JiX2RpcmVjdGlvbik7CiAKIAkvKiBzcGVjaWFsIGNhc2UgaWYgb25seSBvbmUgZWxlbWVudCAoYW5kIGxlc3MgdGhhbiA2NEtCIGluIHNpemUpICovCi0JaWYgKHNjc2lfdXNlX3NnID09IDEgJiYgc2ctPmxlbmd0aCA8PSBTQlAyX01BWF9TR19FTEVNRU5UX0xFTkdUSCkgewotCi0JCWNtZC0+ZG1hX3NpemUgPSBzZy0+bGVuZ3RoOwotCQljbWQtPmRtYV90eXBlID0gQ01EX0RNQV9QQUdFOwotCQljbWQtPmNtZF9kbWEgPSBkbWFfbWFwX3BhZ2UoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCi0JCQkJCSAgICBzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCwKLQkJCQkJICAgIGNtZC0+ZG1hX3NpemUsIGNtZC0+ZG1hX2Rpcik7Ci0KLQkJb3JiLT5kYXRhX2Rlc2NyaXB0b3JfbG8gPSBjbWQtPmNtZF9kbWE7Ci0JCW9yYi0+bWlzYyB8PSBPUkJfU0VUX0RBVEFfU0laRShjbWQtPmRtYV9zaXplKTsKLQorCWlmIChuID09IDEpIHsKKwkJb3JiLT5taXNjIHw9IE9SQl9TRVRfREFUQV9TSVpFKHNnX2RtYV9sZW4oc2cpKTsKKwkJb3JiLT5kYXRhX2Rlc2NyaXB0b3JfbG8gPSBzZ19kbWFfYWRkcmVzcyhzZyk7CiAJfSBlbHNlIHsKLQkJc3RydWN0IHNicDJfdW5yZXN0cmljdGVkX3BhZ2VfdGFibGUgKnNnX2VsZW1lbnQgPQotCQkJCQkJJmNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudFswXTsKLQkJdTMyIHNnX2NvdW50LCBzZ19sZW47Ci0JCWRtYV9hZGRyX3Qgc2dfYWRkcjsKLQkJaW50IGksIGNvdW50ID0gZG1hX21hcF9zZyhoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwgc2csCi0JCQkJCSAgc2NzaV91c2Vfc2csIGRtYV9kaXIpOworCQlwdCA9ICZjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnRbMF07CiAKLQkJY21kLT5kbWFfc2l6ZSA9IHNjc2lfdXNlX3NnOwotCQljbWQtPnNnZV9idWZmZXIgPSBzZzsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZG1hZGV2LCBjbWQtPnNnZV9kbWEsCisJCQkJCXNpemVvZihjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLAorCQkJCQlETUFfVE9fREVWSUNFKTsKIAotCQkvKiB1c2UgcGFnZSB0YWJsZXMgKHMvZykgKi8KLQkJb3JiLT5taXNjIHw9IE9SQl9TRVRfUEFHRV9UQUJMRV9QUkVTRU5UKDB4MSk7Ci0JCW9yYi0+ZGF0YV9kZXNjcmlwdG9yX2xvID0gY21kLT5zZ2VfZG1hOwotCi0JCS8qIGxvb3AgdGhyb3VnaCBhbmQgZmlsbCBvdXQgb3VyIFNCUC0yIHBhZ2UgdGFibGVzCi0JCSAqIChhbmQgc3BsaXQgdXAgYW55dGhpbmcgdG9vIGxhcmdlKSAqLwotCQlmb3IgKGkgPSAwLCBzZ19jb3VudCA9IDA7IGkgPCBjb3VudDsgaSsrLCBzZyA9IHNnX25leHQoc2cpKSB7Ci0JCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKLQkJCXNnX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7Ci0JCQl3aGlsZSAoc2dfbGVuKSB7Ci0JCQkJc2dfZWxlbWVudFtzZ19jb3VudF0uc2VnbWVudF9iYXNlX2xvID0gc2dfYWRkcjsKLQkJCQlpZiAoc2dfbGVuID4gU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEgpIHsKLQkJCQkJc2dfZWxlbWVudFtzZ19jb3VudF0ubGVuZ3RoX3NlZ21lbnRfYmFzZV9oaSA9Ci0JCQkJCQlQQUdFX1RBQkxFX1NFVF9TRUdNRU5UX0xFTkdUSChTQlAyX01BWF9TR19FTEVNRU5UX0xFTkdUSCk7Ci0JCQkJCXNnX2FkZHIgKz0gU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEg7Ci0JCQkJCXNnX2xlbiAtPSBTQlAyX01BWF9TR19FTEVNRU5UX0xFTkdUSDsKLQkJCQl9IGVsc2UgewotCQkJCQlzZ19lbGVtZW50W3NnX2NvdW50XS5sZW5ndGhfc2VnbWVudF9iYXNlX2hpID0KLQkJCQkJCVBBR0VfVEFCTEVfU0VUX1NFR01FTlRfTEVOR1RIKHNnX2xlbik7Ci0JCQkJCXNnX2xlbiA9IDA7Ci0JCQkJfQotCQkJCXNnX2NvdW50Kys7Ci0JCQl9CisJCWZvcl9lYWNoX3NnKHNnLCBzZywgbiwgaSkgeworCQkJcHRbaV0uaGlnaCA9IGNwdV90b19iZTMyKHNnX2RtYV9sZW4oc2cpIDw8IDE2KTsKKwkJCXB0W2ldLmxvdyA9IGNwdV90b19iZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CiAJCX0KIAotCQlvcmItPm1pc2MgfD0gT1JCX1NFVF9EQVRBX1NJWkUoc2dfY291bnQpOworCQlvcmItPm1pc2MgfD0gT1JCX1NFVF9QQUdFX1RBQkxFX1BSRVNFTlQoMHgxKSB8CisJCQkgICAgIE9SQl9TRVRfREFUQV9TSVpFKG4pOworCQlvcmItPmRhdGFfZGVzY3JpcHRvcl9sbyA9IGNtZC0+c2dlX2RtYTsKIAotCQlzYnAydXRpbF9jcHVfdG9fYmUzMl9idWZmZXIoc2dfZWxlbWVudCwKLQkJCQkoc2l6ZW9mKHN0cnVjdCBzYnAyX3VucmVzdHJpY3RlZF9wYWdlX3RhYmxlKSkgKgotCQkJCXNnX2NvdW50KTsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZG1hZGV2LCBjbWQtPnNnZV9kbWEsCisJCQkJCSAgIHNpemVvZihjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLAorCQkJCQkgICBETUFfVE9fREVWSUNFKTsKIAl9CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNicDJfY3JlYXRlX2NvbW1hbmRfb3JiKHN0cnVjdCBzYnAyX2x1ICpsdSwKLQkJCQkgICAgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjbWQsCi0JCQkJICAgIHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQorc3RhdGljIGludCBzYnAyX2NyZWF0ZV9jb21tYW5kX29yYihzdHJ1Y3Qgc2JwMl9sdSAqbHUsCisJCQkJICAgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjbWQsCisJCQkJICAgc3RydWN0IHNjc2lfY21uZCAqU0NwbnQpCiB7Ci0Jc3RydWN0IHNicDJfZndob3N0X2luZm8gKmhpID0gbHUtPmhpOworCXN0cnVjdCBkZXZpY2UgKmRtYWRldiA9IGx1LT5oaS0+aG9zdC0+ZGV2aWNlLnBhcmVudDsKIAlzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiAqb3JiID0gJmNtZC0+Y29tbWFuZF9vcmI7Ci0JdTMyIG9yYl9kaXJlY3Rpb247CiAJdW5zaWduZWQgaW50IHNjc2lfcmVxdWVzdF9idWZmbGVuID0gc2NzaV9idWZmbGVuKFNDcG50KTsKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyID0gU0NwbnQtPnNjX2RhdGFfZGlyZWN0aW9uOworCXUzMiBvcmJfZGlyZWN0aW9uOworCWludCByZXQ7CiAKKwlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkbWFkZXYsIGNtZC0+Y29tbWFuZF9vcmJfZG1hLAorCQkJCXNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksIERNQV9UT19ERVZJQ0UpOwogCS8qCiAJICogU2V0LXVwIG91ciBjb21tYW5kIE9SQi4KIAkgKgpAQCAtMTYwMiwxNSArMTU4OSwyMSBAQAogCQlvcmItPmRhdGFfZGVzY3JpcHRvcl9oaSA9IDB4MDsKIAkJb3JiLT5kYXRhX2Rlc2NyaXB0b3JfbG8gPSAweDA7CiAJCW9yYi0+bWlzYyB8PSBPUkJfU0VUX0RJUkVDVElPTigxKTsKLQl9IGVsc2UKLQkJc2JwMl9wcmVwX2NvbW1hbmRfb3JiX3NnKG9yYiwgaGksIGNtZCwgc2NzaV9zZ19jb3VudChTQ3BudCksCi0JCQkJCSBzY3NpX3NnbGlzdChTQ3BudCksCi0JCQkJCSBvcmJfZGlyZWN0aW9uLCBkbWFfZGlyKTsKLQorCQlyZXQgPSAwOworCX0gZWxzZSB7CisJCXJldCA9IHNicDJfcHJlcF9jb21tYW5kX29yYl9zZyhvcmIsIGx1LT5oaSwgY21kLAorCQkJCQkgICAgICAgc2NzaV9zZ19jb3VudChTQ3BudCksCisJCQkJCSAgICAgICBzY3NpX3NnbGlzdChTQ3BudCksCisJCQkJCSAgICAgICBvcmJfZGlyZWN0aW9uLCBkbWFfZGlyKTsKKwl9CiAJc2JwMnV0aWxfY3B1X3RvX2JlMzJfYnVmZmVyKG9yYiwgc2l6ZW9mKCpvcmIpKTsKIAogCW1lbXNldChvcmItPmNkYiwgMCwgc2l6ZW9mKG9yYi0+Y2RiKSk7CiAJbWVtY3B5KG9yYi0+Y2RiLCBTQ3BudC0+Y21uZCwgU0NwbnQtPmNtZF9sZW4pOworCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZG1hZGV2LCBjbWQtPmNvbW1hbmRfb3JiX2RtYSwKKwkJCXNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksIERNQV9UT19ERVZJQ0UpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNicDJfbGlua19vcmJfY29tbWFuZChzdHJ1Y3Qgc2JwMl9sdSAqbHUsCkBAIC0xNjI0LDE0ICsxNjE3LDYgQEAKIAlzaXplX3QgbGVuZ3RoOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKLQkJCQkgICBjbWQtPmNvbW1hbmRfb3JiX2RtYSwKLQkJCQkgICBzaXplb2Yoc3RydWN0IHNicDJfY29tbWFuZF9vcmIpLAotCQkJCSAgIERNQV9UT19ERVZJQ0UpOwotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LCBjbWQtPnNnZV9kbWEsCi0JCQkJICAgc2l6ZW9mKGNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCksCi0JCQkJICAgRE1BX1RPX0RFVklDRSk7Ci0KIAkvKiBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBwcmV2aW91cyBvcmJzIHRvIHVzZSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZsdS0+Y21kX29yYl9sb2NrLCBmbGFncyk7CiAJbGFzdF9vcmIgPSBsdS0+bGFzdF9vcmI7CkBAIC0xNjk5LDkgKzE2ODQsMTAgQEAKIAlpZiAoIWNtZCkKIAkJcmV0dXJuIC1FSU87CiAKLQlzYnAyX2NyZWF0ZV9jb21tYW5kX29yYihsdSwgY21kLCBTQ3BudCk7Ci0Jc2JwMl9saW5rX29yYl9jb21tYW5kKGx1LCBjbWQpOworCWlmIChzYnAyX2NyZWF0ZV9jb21tYW5kX29yYihsdSwgY21kLCBTQ3BudCkpCisJCXJldHVybiAtRU5PTUVNOwogCisJc2JwMl9saW5rX29yYl9jb21tYW5kKGx1LCBjbWQpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzg5LDEzICsxNzc1LDYgQEAKIAllbHNlCiAJCWNtZCA9IHNicDJ1dGlsX2ZpbmRfY29tbWFuZF9mb3Jfb3JiKGx1LCBzYi0+T1JCX29mZnNldF9sbyk7CiAJaWYgKGNtZCkgewotCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKLQkJCQkJY21kLT5jb21tYW5kX29yYl9kbWEsCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksCi0JCQkJCURNQV9UT19ERVZJQ0UpOwotCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwgY21kLT5zZ2VfZG1hLAotCQkJCQlzaXplb2YoY21kLT5zY2F0dGVyX2dhdGhlcl9lbGVtZW50KSwKLQkJCQkJRE1BX1RPX0RFVklDRSk7CiAJCS8qIEdyYWIgU0NTSSBjb21tYW5kIHBvaW50ZXJzIGFuZCBjaGVjayBzdGF0dXMuICovCiAJCS8qCiAJCSAqIEZJWE1FOiBJZiB0aGUgc3JjIGZpZWxkIGluIHRoZSBzdGF0dXMgaXMgMSwgdGhlIE9SQiBETUEgbXVzdApAQCAtMTkxMiw3ICsxODkxLDYgQEAKIAogc3RhdGljIHZvaWQgc2JwMnNjc2lfY29tcGxldGVfYWxsX2NvbW1hbmRzKHN0cnVjdCBzYnAyX2x1ICpsdSwgdTMyIHN0YXR1cykKIHsKLQlzdHJ1Y3Qgc2JwMl9md2hvc3RfaW5mbyAqaGkgPSBsdS0+aGk7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGg7CiAJc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjbWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE5MjEsMTMgKzE4OTksNiBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmbHUtPmNtZF9vcmJfaW51c2UpKSB7CiAJCWxoID0gbHUtPmNtZF9vcmJfaW51c2UubmV4dDsKIAkJY21kID0gbGlzdF9lbnRyeShsaCwgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvLCBsaXN0KTsKLQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCi0JCQkJICAgICAgICBjbWQtPmNvbW1hbmRfb3JiX2RtYSwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKLQkJCQkJRE1BX1RPX0RFVklDRSk7Ci0JCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LCBjbWQtPnNnZV9kbWEsCi0JCQkJCXNpemVvZihjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLAotCQkJCQlETUFfVE9fREVWSUNFKTsKIAkJc2JwMnV0aWxfbWFya19jb21tYW5kX2NvbXBsZXRlZChsdSwgY21kKTsKIAkJaWYgKGNtZC0+Q3VycmVudF9TQ3BudCkgewogCQkJY21kLT5DdXJyZW50X1NDcG50LT5yZXN1bHQgPSBzdGF0dXMgPDwgMTY7CkBAIC0yMDMzLDYgKzIwMDQsOCBAQAogCQlzZGV2LT5zdGFydF9zdG9wX3B3cl9jb25kID0gMTsKIAlpZiAobHUtPndvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EXzEyOEtfTUFYX1RSQU5TKQogCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMTI4ICogMTAyNCAvIDUxMik7CisKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBTQlAyX01BWF9TRUdfU0laRSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNDksNyArMjAyMiw2IEBACiBzdGF0aWMgaW50IHNicDJzY3NpX2Fib3J0KHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQogewogCXN0cnVjdCBzYnAyX2x1ICpsdSA9IChzdHJ1Y3Qgc2JwMl9sdSAqKVNDcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwotCXN0cnVjdCBzYnAyX2Z3aG9zdF9pbmZvICpoaSA9IGx1LT5oaTsKIAlzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKmNtZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yMDYzLDE0ICsyMDM1LDYgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmx1LT5jbWRfb3JiX2xvY2ssIGZsYWdzKTsKIAkJY21kID0gc2JwMnV0aWxfZmluZF9jb21tYW5kX2Zvcl9TQ3BudChsdSwgU0NwbnQpOwogCQlpZiAoY21kKSB7Ci0JCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKLQkJCQkJY21kLT5jb21tYW5kX29yYl9kbWEsCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksCi0JCQkJCURNQV9UT19ERVZJQ0UpOwotCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCi0JCQkJCWNtZC0+c2dlX2RtYSwKLQkJCQkJc2l6ZW9mKGNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCksCi0JCQkJCURNQV9UT19ERVZJQ0UpOwogCQkJc2JwMnV0aWxfbWFya19jb21tYW5kX2NvbXBsZXRlZChsdSwgY21kKTsKIAkJCWlmIChjbWQtPkN1cnJlbnRfU0NwbnQpIHsKIAkJCQljbWQtPkN1cnJlbnRfU0NwbnQtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5oIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmgKaW5kZXggODc1NDI4Yi4uYzUwMzZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmgKQEAgLTEzOSwxMyArMTM5LDEwIEBACiAJdTMyIHN0YXR1c19maWZvX2xvOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotI2RlZmluZSBQQUdFX1RBQkxFX1NFVF9TRUdNRU5UX0JBU0VfSEkodikJKCh2KSAmIDB4ZmZmZikKLSNkZWZpbmUgUEFHRV9UQUJMRV9TRVRfU0VHTUVOVF9MRU5HVEgodikJKCgodikgJiAweGZmZmYpIDw8IDE2KQotCiBzdHJ1Y3Qgc2JwMl91bnJlc3RyaWN0ZWRfcGFnZV90YWJsZSB7Ci0JdTMyIGxlbmd0aF9zZWdtZW50X2Jhc2VfaGk7Ci0JdTMyIHNlZ21lbnRfYmFzZV9sbzsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJX19iZTMyIGhpZ2g7CisJX19iZTMyIGxvdzsKK307CiAKICNkZWZpbmUgUkVTUF9TVEFUVVNfUkVRVUVTVF9DT01QTEVURQkJMHgwCiAjZGVmaW5lIFJFU1BfU1RBVFVTX1RSQU5TUE9SVF9GQUlMVVJFCQkweDEKQEAgLTIxNiwxNSArMjEzLDE4IEBACiAjZGVmaW5lIFNCUDJfVU5JVF9TUEVDX0lEX0VOVFJZCQkJMHgwMDAwNjA5ZQogI2RlZmluZSBTQlAyX1NXX1ZFUlNJT05fRU5UUlkJCQkweDAwMDEwNDgzCiAKKy8qCisgKiBUaGUgZGVmYXVsdCBtYXhpbXVtIHMvZyBzZWdtZW50IHNpemUgb2YgYSBGaXJlV2lyZSBjb250cm9sbGVyIGlzCisgKiB1c3VhbGx5IDB4MTAwMDAsIGJ1dCBTQlAtMiBvbmx5IGFsbG93cyAweGZmZmYuIFNpbmNlIGJ1ZmZlcnMgaGF2ZSB0bworICogYmUgcXVhZGxldC1hbGlnbmVkLCB3ZSBzZXQgdGhlIGxlbmd0aCBsaW1pdCB0byAweGZmZmYgJiB+My4KKyAqLworI2RlZmluZSBTQlAyX01BWF9TRUdfU0laRQkJCTB4ZmZmYwogCiAvKgotICogU0NTSSBzcGVjaWZpYyBkZWZpbml0aW9ucwotICovCi0KLSNkZWZpbmUgU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEgJCTB4ZjAwMAotLyogVGhlcmUgaXMgbm8gcmVhbCBsaW1pdGF0aW9uIG9mIHRoZSBxdWV1ZSBkZXB0aCAoaS5lLiBsZW5ndGggb2YgdGhlIGxpbmtlZAorICogVGhlcmUgaXMgbm8gcmVhbCBsaW1pdGF0aW9uIG9mIHRoZSBxdWV1ZSBkZXB0aCAoaS5lLiBsZW5ndGggb2YgdGhlIGxpbmtlZAogICogbGlzdCBvZiBjb21tYW5kIE9SQnMpIGF0IHRoZSB0YXJnZXQuIFRoZSBjaG9zZW4gZGVwdGggaXMgbWVyZWx5IGFuCi0gKiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIHNicDIgZHJpdmVyLiAqLworICogaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIHRoZSBzYnAyIGRyaXZlci4KKyAqLwogI2RlZmluZSBTQlAyX01BWF9DTURTCQkJCTgKIAogI2RlZmluZSBTQlAyX1NDU0lfU1RBVFVTX0dPT0QJCQkweDAKQEAgLTI0MCwxMiArMjQwLDYgQEAKICAqIFJlcHJlc2VudGF0aW9ucyBvZiBjb21tYW5kcyBhbmQgZGV2aWNlcwogICovCiAKLWVudW0gc2JwMl9kbWFfdHlwZXMgewotCUNNRF9ETUFfTk9ORSwKLQlDTURfRE1BX1BBR0UsCi0JQ01EX0RNQV9TSU5HTEUKLX07Ci0KIC8qIFBlciBTQ1NJIGNvbW1hbmQgKi8KIHN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbyB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtMjU4LDExICsyNTIsNiBAQAogCXN0cnVjdCBzYnAyX3VucmVzdHJpY3RlZF9wYWdlX3RhYmxlCiAJCXNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnRbU0dfQUxMXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CiAJZG1hX2FkZHJfdCBzZ2VfZG1hOwotCXZvaWQgKnNnZV9idWZmZXI7Ci0JZG1hX2FkZHJfdCBjbWRfZG1hOwotCWVudW0gc2JwMl9kbWFfdHlwZXMgZG1hX3R5cGU7Ci0JdW5zaWduZWQgbG9uZyBkbWFfc2l6ZTsKLQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyOwogfTsKIAogLyogUGVyIEZpcmVXaXJlIGhvc3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCmluZGV4IDI1ZGI2ZTYuLjY3OWE5MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwpAQCAtODkzLDcgKzg5Myw3IEBACiAJCWlmICh1bmxpa2VseShkID09IE5VTEwpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJaWYgKHVubGlrZWx5KCh2LmJ1ZmZlcjwwKSB8fCAodi5idWZmZXI+PWQtPm51bV9kZXNjIC0gMSkpKSB7CisJCWlmICh1bmxpa2VseSh2LmJ1ZmZlciA+PSBkLT5udW1fZGVzYyAtIDEpKSB7CiAJCQlQUklOVChLRVJOX0VSUiwgb2hjaS0+aG9zdC0+aWQsCiAJCQkgICAgICAiQnVmZmVyICVkIG91dCBvZiByYW5nZSIsdi5idWZmZXIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC05NTksNyArOTU5LDcgQEAKIAkJaWYgKHVubGlrZWx5KGQgPT0gTlVMTCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlpZiAodW5saWtlbHkoKHYuYnVmZmVyPDApIHx8ICh2LmJ1ZmZlcj5kLT5udW1fZGVzYyAtIDEpKSkgeworCQlpZiAodW5saWtlbHkodi5idWZmZXIgPiBkLT5udW1fZGVzYyAtIDEpKSB7CiAJCQlQUklOVChLRVJOX0VSUiwgb2hjaS0+aG9zdC0+aWQsCiAJCQkgICAgICAiQnVmZmVyICVkIG91dCBvZiByYW5nZSIsdi5idWZmZXIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDMwLDcgKzEwMzAsNyBAQAogCQlkID0gZmluZF9jdHgoJmN0eC0+Y29udGV4dF9saXN0LCBPSENJX0lTT19UUkFOU01JVCwgdi5jaGFubmVsKTsKIAkJaWYgKGQgPT0gTlVMTCkgcmV0dXJuIC1FRkFVTFQ7CiAKLQkJaWYgKCh2LmJ1ZmZlcjwwKSB8fCAodi5idWZmZXI+PWQtPm51bV9kZXNjIC0gMSkpIHsKKwkJaWYgKHYuYnVmZmVyID49IGQtPm51bV9kZXNjIC0gMSkgewogCQkJUFJJTlQoS0VSTl9FUlIsIG9oY2ktPmhvc3QtPmlkLAogCQkJICAgICAgIkJ1ZmZlciAlZCBvdXQgb2YgcmFuZ2UiLHYuYnVmZmVyKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTEzNyw3ICsxMTM3LDcgQEAKIAkJZCA9IGZpbmRfY3R4KCZjdHgtPmNvbnRleHRfbGlzdCwgT0hDSV9JU09fVFJBTlNNSVQsIHYuY2hhbm5lbCk7CiAJCWlmIChkID09IE5VTEwpIHJldHVybiAtRUZBVUxUOwogCi0JCWlmICgodi5idWZmZXI8MCkgfHwgKHYuYnVmZmVyPj1kLT5udW1fZGVzYy0xKSkgeworCQlpZiAodi5idWZmZXIgPj0gZC0+bnVtX2Rlc2MgLSAxKSB7CiAJCQlQUklOVChLRVJOX0VSUiwgb2hjaS0+aG9zdC0+aWQsCiAJCQkgICAgICAiQnVmZmVyICVkIG91dCBvZiByYW5nZSIsdi5idWZmZXIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzQxLDkgKzEzNDEsOCBAQAogCWhwc2Jfc2V0X2hvc3RpbmZvX2tleSgmdmlkZW8xMzk0X2hpZ2hsZXZlbCwgaG9zdCwgb2hjaS0+aG9zdC0+aWQpOwogCiAJbWlub3IgPSBJRUVFMTM5NF9NSU5PUl9CTE9DS19WSURFTzEzOTQgKiAxNiArIG9oY2ktPmhvc3QtPmlkOwotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShocHNiX3Byb3RvY29sX2NsYXNzLCBOVUxMLAotCQkJICAgICAgTUtERVYoSUVFRTEzOTRfTUFKT1IsIG1pbm9yKSwgTlVMTCwKLQkJCSAgICAgICIlcy0lZCIsIFZJREVPMTM5NF9EUklWRVJfTkFNRSwgb2hjaS0+aG9zdC0+aWQpOworCWRldmljZV9jcmVhdGUoaHBzYl9wcm90b2NvbF9jbGFzcywgTlVMTCwgTUtERVYoSUVFRTEzOTRfTUFKT1IsIG1pbm9yKSwKKwkJICAgICAgTlVMTCwgIiVzLSVkIiwgVklERU8xMzk0X0RSSVZFUl9OQU1FLCBvaGNpLT5ob3N0LT5pZCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKaW5kZXggM2NhYjBjZS4uZjFlODJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAogI2RlZmluZSBDTV9DT1VOVEVSX0FUVFIoX25hbWUsIF9pbmRleCkgXAogc3RydWN0IGNtX2NvdW50ZXJfYXR0cmlidXRlIGNtXyMjX25hbWUjI19jb3VudGVyX2F0dHIgPSB7IFwKLQkuYXR0ciA9IHsgLm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gMDQ0NCwgLm93bmVyID0gVEhJU19NT0RVTEUgfSwgXAorCS5hdHRyID0geyAubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSAwNDQ0IH0sIFwKIAkuaW5kZXggPSBfaW5kZXggXAogfQogCkBAIC0zNjkxLDkgKzM2OTEsOSBAQAogCWNtX2Rldi0+aWJfZGV2aWNlID0gaWJfZGV2aWNlOwogCWNtX2dldF9hY2tfZGVsYXkoY21fZGV2KTsKIAotCWNtX2Rldi0+ZGV2aWNlID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKCZjbV9jbGFzcywgJmliX2RldmljZS0+ZGV2LAotCQkJCQkgICAgICAgTUtERVYoMCwgMCksIE5VTEwsCi0JCQkJCSAgICAgICAiJXMiLCBpYl9kZXZpY2UtPm5hbWUpOworCWNtX2Rldi0+ZGV2aWNlID0gZGV2aWNlX2NyZWF0ZSgmY21fY2xhc3MsICZpYl9kZXZpY2UtPmRldiwKKwkJCQkgICAgICAgTUtERVYoMCwgMCksIE5VTEwsCisJCQkJICAgICAgICIlcyIsIGliX2RldmljZS0+bmFtZSk7CiAJaWYgKCFjbV9kZXYtPmRldmljZSkgewogCQlrZnJlZShjbV9kZXYpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYwppbmRleCAyNjhhMmQyLi44YzQ2ZjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKQEAgLTEwMTYsOSArMTAxNiw5IEBACiAJaWYgKGNkZXZfYWRkKHBvcnQtPmNkZXYsIGJhc2VfZGV2ICsgcG9ydC0+ZGV2X251bSwgMSkpCiAJCWdvdG8gZXJyX2NkZXY7CiAKLQlwb3J0LT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodW1hZF9jbGFzcywgZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCQkgIHBvcnQtPmNkZXYtPmRldiwgcG9ydCwKLQkJCQkJICAidW1hZCVkIiwgcG9ydC0+ZGV2X251bSk7CisJcG9ydC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZSh1bWFkX2NsYXNzLCBkZXZpY2UtPmRtYV9kZXZpY2UsCisJCQkJICBwb3J0LT5jZGV2LT5kZXYsIHBvcnQsCisJCQkJICAidW1hZCVkIiwgcG9ydC0+ZGV2X251bSk7CiAJaWYgKElTX0VSUihwb3J0LT5kZXYpKQogCQlnb3RvIGVycl9jZGV2OwogCkBAIC0xMDM2LDkgKzEwMzYsOSBAQAogCWlmIChjZGV2X2FkZChwb3J0LT5zbV9jZGV2LCBiYXNlX2RldiArIHBvcnQtPmRldl9udW0gKyBJQl9VTUFEX01BWF9QT1JUUywgMSkpCiAJCWdvdG8gZXJyX3NtX2NkZXY7CiAKLQlwb3J0LT5zbV9kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodW1hZF9jbGFzcywgZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCQkgICAgIHBvcnQtPnNtX2NkZXYtPmRldiwgcG9ydCwKLQkJCQkJICAgICAiaXNzbSVkIiwgcG9ydC0+ZGV2X251bSk7CisJcG9ydC0+c21fZGV2ID0gZGV2aWNlX2NyZWF0ZSh1bWFkX2NsYXNzLCBkZXZpY2UtPmRtYV9kZXZpY2UsCisJCQkJICAgICBwb3J0LT5zbV9jZGV2LT5kZXYsIHBvcnQsCisJCQkJICAgICAiaXNzbSVkIiwgcG9ydC0+ZGV2X251bSk7CiAJaWYgKElTX0VSUihwb3J0LT5zbV9kZXYpKQogCQlnb3RvIGVycl9zbV9jZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwppbmRleCBhZWVlODU2Li5kODVhZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKQEAgLTc2NCwxMiArNzY0LDkgQEAKIAlpZiAoY2Rldl9hZGQodXZlcmJzX2Rldi0+Y2RldiwgSUJfVVZFUkJTX0JBU0VfREVWICsgdXZlcmJzX2Rldi0+ZGV2bnVtLCAxKSkKIAkJZ290byBlcnJfY2RldjsKIAotCXV2ZXJic19kZXYtPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh1dmVyYnNfY2xhc3MsCi0JCQkJCQlkZXZpY2UtPmRtYV9kZXZpY2UsCi0JCQkJCQl1dmVyYnNfZGV2LT5jZGV2LT5kZXYsCi0JCQkJCQl1dmVyYnNfZGV2LAotCQkJCQkJInV2ZXJicyVkIiwKLQkJCQkJCXV2ZXJic19kZXYtPmRldm51bSk7CisJdXZlcmJzX2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZSh1dmVyYnNfY2xhc3MsIGRldmljZS0+ZG1hX2RldmljZSwKKwkJCQkJdXZlcmJzX2Rldi0+Y2Rldi0+ZGV2LCB1dmVyYnNfZGV2LAorCQkJCQkidXZlcmJzJWQiLCB1dmVyYnNfZGV2LT5kZXZudW0pOwogCWlmIChJU19FUlIodXZlcmJzX2Rldi0+ZGV2KSkKIAkJZ290byBlcnJfY2RldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwppbmRleCA1NmMwZWRhLi4xYWYxZjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwpAQCAtMjQ1NSw3ICsyNDU1LDcgQEAKIAkJZ290byBlcnJfY2RldjsKIAl9CiAKLQlkZXZpY2UgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoaXBhdGhfY2xhc3MsIE5VTEwsIGRldiwgTlVMTCwgbmFtZSk7CisJZGV2aWNlID0gZGV2aWNlX2NyZWF0ZShpcGF0aF9jbGFzcywgTlVMTCwgZGV2LCBOVUxMLCBuYW1lKTsKIAogCWlmIChJU19FUlIoZGV2aWNlKSkgewogCQlyZXQgPSBQVFJfRVJSKGRldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYwppbmRleCA1YTFjZjI1Li4xZTViNjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKQEAgLTM3OCw2ICszNzgsNyBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChjbHNfc2Vzc2lvbik7CiAKKwlpc2NzaV9zZXNzaW9uX3RlYXJkb3duKGNsc19zZXNzaW9uKTsKIAlpc2NzaV9ob3N0X3JlbW92ZShzaG9zdCk7CiAJaXNjc2lfaG9zdF9mcmVlKHNob3N0KTsKIH0KQEAgLTU5Nyw3ICs1OTgsNyBAQAogCS5jbWRfcGVyX2x1biAgICAgICAgICAgID0gSVNDU0lfTUFYX0NNRF9QRVJfTFVOLAogCS5laF9hYm9ydF9oYW5kbGVyICAgICAgID0gaXNjc2lfZWhfYWJvcnQsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyPSBpc2NzaV9laF9kZXZpY2VfcmVzZXQsCi0JLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IGlzY3NpX2VoX2hvc3RfcmVzZXQsCisJLmVoX3RhcmdldF9yZXNldF9oYW5kbGVyPSBpc2NzaV9laF90YXJnZXRfcmVzZXQsCiAJLnVzZV9jbHVzdGVyaW5nICAgICAgICAgPSBESVNBQkxFX0NMVVNURVJJTkcsCiAJLnByb2NfbmFtZSAgICAgICAgICAgICAgPSAiaXNjc2lfaXNlciIsCiAJLnRoaXNfaWQgICAgICAgICAgICAgICAgPSAtMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKaW5kZXggZWQ3YzVmNy4uNWI4YjUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKQEAgLTE2ODMsNyArMTY4Myw3IEBACiAJCQkJICAgU1JQX09QVF9TRVJWSUNFX0lEKSwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHNycF9vcHRfdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3Qgc3JwX29wdF90b2tlbnMgPSB7CiAJeyBTUlBfT1BUX0lEX0VYVCwJCSJpZF9leHQ9JXMiIAkJfSwKIAl7IFNSUF9PUFRfSU9DX0dVSUQsCQkiaW9jX2d1aWQ9JXMiIAkJfSwKIAl7IFNSUF9PUFRfREdJRCwJCQkiZGdpZD0lcyIgCQl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCmluZGV4IDA3OGU0ZWUuLjI4ODBlYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYworKysgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKQEAgLTIzMSw2ICsyMzEsNyBAQAogZW51bSBnYW1lcG9ydF9ldmVudF90eXBlIHsKIAlHQU1FUE9SVF9SRUdJU1RFUl9QT1JULAogCUdBTUVQT1JUX1JFR0lTVEVSX0RSSVZFUiwKKwlHQU1FUE9SVF9BVFRBQ0hfRFJJVkVSLAogfTsKIAogc3RydWN0IGdhbWVwb3J0X2V2ZW50IHsKQEAgLTI0NSwxMSArMjQ2LDEyIEBACiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoZ2FtZXBvcnRfd2FpdCk7CiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpnYW1lcG9ydF90YXNrOwogCi1zdGF0aWMgdm9pZCBnYW1lcG9ydF9xdWV1ZV9ldmVudCh2b2lkICpvYmplY3QsIHN0cnVjdCBtb2R1bGUgKm93bmVyLAotCQkJICAgICAgZW51bSBnYW1lcG9ydF9ldmVudF90eXBlIGV2ZW50X3R5cGUpCitzdGF0aWMgaW50IGdhbWVwb3J0X3F1ZXVlX2V2ZW50KHZvaWQgKm9iamVjdCwgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCQkJZW51bSBnYW1lcG9ydF9ldmVudF90eXBlIGV2ZW50X3R5cGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmV2ZW50OworCWludCByZXR2YWwgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdhbWVwb3J0X2V2ZW50X2xvY2ssIGZsYWdzKTsKIApAQCAtMjY4LDI0ICsyNzAsMzQgQEAKIAkJfQogCX0KIAotCWlmICgoZXZlbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQpLCBHRlBfQVRPTUlDKSkpIHsKLQkJaWYgKCF0cnlfbW9kdWxlX2dldChvd25lcikpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImdhbWVwb3J0OiBDYW4ndCBnZXQgbW9kdWxlIHJlZmVyZW5jZSwgZHJvcHBpbmcgZXZlbnQgJWRcbiIsIGV2ZW50X3R5cGUpOwotCQkJa2ZyZWUoZXZlbnQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlldmVudC0+dHlwZSA9IGV2ZW50X3R5cGU7Ci0JCWV2ZW50LT5vYmplY3QgPSBvYmplY3Q7Ci0JCWV2ZW50LT5vd25lciA9IG93bmVyOwotCi0JCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5ub2RlLCAmZ2FtZXBvcnRfZXZlbnRfbGlzdCk7Ci0JCXdha2VfdXAoJmdhbWVwb3J0X3dhaXQpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ2FtZXBvcnQ6IE5vdCBlbm91Z2ggbWVtb3J5IHRvIHF1ZXVlIGV2ZW50ICVkXG4iLCBldmVudF90eXBlKTsKKwlldmVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnYW1lcG9ydF9ldmVudCksIEdGUF9BVE9NSUMpOworCWlmICghZXZlbnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ2FtZXBvcnQ6IE5vdCBlbm91Z2ggbWVtb3J5IHRvIHF1ZXVlIGV2ZW50ICVkXG4iLAorCQkJZXZlbnRfdHlwZSk7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OwogCX0KKworCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJnYW1lcG9ydDogQ2FuJ3QgZ2V0IG1vZHVsZSByZWZlcmVuY2UsIGRyb3BwaW5nIGV2ZW50ICVkXG4iLAorCQkJZXZlbnRfdHlwZSk7CisJCWtmcmVlKGV2ZW50KTsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJZXZlbnQtPnR5cGUgPSBldmVudF90eXBlOworCWV2ZW50LT5vYmplY3QgPSBvYmplY3Q7CisJZXZlbnQtPm93bmVyID0gb3duZXI7CisKKwlsaXN0X2FkZF90YWlsKCZldmVudC0+bm9kZSwgJmdhbWVwb3J0X2V2ZW50X2xpc3QpOworCXdha2VfdXAoJmdhbWVwb3J0X3dhaXQpOworCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FtZXBvcnRfZXZlbnRfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIGdhbWVwb3J0X2ZyZWVfZXZlbnQoc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpldmVudCkKQEAgLTM3OCw5ICszOTAsMTAgQEAKIH0KIAogLyoKLSAqIFJlbW92ZSBhbGwgZXZlbnRzIHRoYXQgaGF2ZSBiZWVuIHN1Ym1pdHRlZCBmb3IgYSBnaXZlbiBnYW1lcG9ydCBwb3J0LgorICogUmVtb3ZlIGFsbCBldmVudHMgdGhhdCBoYXZlIGJlZW4gc3VibWl0dGVkIGZvciBhIGdpdmVuIG9iamVjdCwKKyAqIGJlIGl0IGEgZ2FtZXBvcnQgcG9ydCBvciBhIGRyaXZlci4KICAqLwotc3RhdGljIHZvaWQgZ2FtZXBvcnRfcmVtb3ZlX3BlbmRpbmdfZXZlbnRzKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpCitzdGF0aWMgdm9pZCBnYW1lcG9ydF9yZW1vdmVfcGVuZGluZ19ldmVudHModm9pZCAqb2JqZWN0KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUsICpuZXh0OwogCXN0cnVjdCBnYW1lcG9ydF9ldmVudCAqZXZlbnQ7CkBAIC0zOTAsNyArNDAzLDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmZ2FtZXBvcnRfZXZlbnRfbGlzdCkgewogCQlldmVudCA9IGxpc3RfZW50cnkobm9kZSwgc3RydWN0IGdhbWVwb3J0X2V2ZW50LCBub2RlKTsKLQkJaWYgKGV2ZW50LT5vYmplY3QgPT0gZ2FtZXBvcnQpIHsKKwkJaWYgKGV2ZW50LT5vYmplY3QgPT0gb2JqZWN0KSB7CiAJCQlsaXN0X2RlbF9pbml0KG5vZGUpOwogCQkJZ2FtZXBvcnRfZnJlZV9ldmVudChldmVudCk7CiAJCX0KQEAgLTcwNSwxMCArNzE4LDQwIEBACiAJCQlkcnYtPmRyaXZlci5uYW1lLCBlcnJvcik7CiB9CiAKLXZvaWQgX19nYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKK2ludCBfX2dhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkJCWNvbnN0IGNoYXIgKm1vZF9uYW1lKQogeworCWludCBlcnJvcjsKKwogCWRydi0+ZHJpdmVyLmJ1cyA9ICZnYW1lcG9ydF9idXM7Ci0JZ2FtZXBvcnRfcXVldWVfZXZlbnQoZHJ2LCBvd25lciwgR0FNRVBPUlRfUkVHSVNURVJfRFJJVkVSKTsKKwlkcnYtPmRyaXZlci5vd25lciA9IG93bmVyOworCWRydi0+ZHJpdmVyLm1vZF9uYW1lID0gbW9kX25hbWU7CisKKwkvKgorCSAqIFRlbXBvcmFyaWx5IGRpc2FibGUgYXV0b21hdGljIGJpbmRpbmcgYmVjYXVzZSBwcm9iaW5nCisJICogdGFrZXMgbG9uZyB0aW1lIGFuZCB3ZSBhcmUgYmV0dGVyIG9mZiBkb2luZyBpdCBpbiBrZ2FtZXBvcnRkCisJICovCisJZHJ2LT5pZ25vcmUgPSAxOworCisJZXJyb3IgPSBkcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKKwlpZiAoZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ2FtZXBvcnQ6IGRyaXZlcl9yZWdpc3RlcigpIGZhaWxlZCBmb3IgJXMsIGVycm9yOiAlZFxuIiwKKwkJCWRydi0+ZHJpdmVyLm5hbWUsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCS8qCisJICogUmVzZXQgaWdub3JlIGZsYWcgYW5kIGxldCBrZ2FtZXBvcnRkIGJpbmQgdGhlIGRyaXZlciB0byBmcmVlIHBvcnRzCisJICovCisJZHJ2LT5pZ25vcmUgPSAwOworCWVycm9yID0gZ2FtZXBvcnRfcXVldWVfZXZlbnQoZHJ2LCBOVUxMLCBHQU1FUE9SVF9BVFRBQ0hfRFJJVkVSKTsKKwlpZiAoZXJyb3IpIHsKKwkJZHJpdmVyX3VucmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCXJldHVybiAwOwogfQogCiB2b2lkIGdhbWVwb3J0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydikKQEAgLTcxNiw3ICs3NTksOSBAQAogCXN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQ7CiAKIAltdXRleF9sb2NrKCZnYW1lcG9ydF9tdXRleCk7CisKIAlkcnYtPmlnbm9yZSA9IDE7CS8qIHNvIGdhbWVwb3J0X2ZpbmRfZHJpdmVyIGlnbm9yZXMgaXQgKi8KKwlnYW1lcG9ydF9yZW1vdmVfcGVuZGluZ19ldmVudHMoZHJ2KTsKIAogc3RhcnRfb3ZlcjoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdhbWVwb3J0LCAmZ2FtZXBvcnRfbGlzdCwgbm9kZSkgewpAQCAtNzI5LDYgKzc3NCw3IEBACiAJfQogCiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKKwogCW11dGV4X3VubG9jaygmZ2FtZXBvcnRfbXV0ZXgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2EzZC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hM2QuYwppbmRleCA5MjQ5OGQ0Li42NDg5ZjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2EzZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYTNkLmMKQEAgLTQxNCw4ICs0MTQsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhM2RfaW5pdCh2b2lkKQogewotCWdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmYTNkX2Rydik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmYTNkX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhM2RfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hZGkuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYWRpLmMKaW5kZXggZDFjYThhMS4uODljNGMwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hZGkuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FkaS5jCkBAIC01NzIsOCArNTcyLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWRpX2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmFkaV9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmFkaV9kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWRpX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW5hbG9nLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FuYWxvZy5jCmluZGV4IDcwOGM1YWUuLjM1NmIzYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW5hbG9nLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbmFsb2cuYwpAQCAtNzYxLDkgKzc2MSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBhbmFsb2dfaW5pdCh2b2lkKQogewogCWFuYWxvZ19wYXJzZV9vcHRpb25zKCk7Ci0JZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZhbmFsb2dfZHJ2KTsKLQotCXJldHVybiAwOworCXJldHVybiBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmFuYWxvZ19kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYW5hbG9nX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svY29icmEuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svY29icmEuYwppbmRleCA2MzliOTc1Li4zNDk3Yjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2NvYnJhLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9jb2JyYS5jCkBAIC0yNjMsOCArMjYzLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgY29icmFfaW5pdCh2b2lkKQogewotCWdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmY29icmFfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZjb2JyYV9kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY29icmFfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nZjJrLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dmMmsuYwppbmRleCBjYjZlZWYxLi42N2MyMDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dmMmsuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dmMmsuYwpAQCAtMzc1LDggKzM3NSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGdmMmtfaW5pdCh2b2lkKQogewotCWdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmZ2Yya19kcnYpOwotCXJldHVybiAwOworCXJldHVybiBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmdmMmtfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGdmMmtfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXAuYwppbmRleCA2ODRlMDdjLi5mYzU1ODk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXAuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXAuYwpAQCAtNDI2LDggKzQyNiw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGdyaXBfaW5pdCh2b2lkKQogewotCWdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmZ3JpcF9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmdyaXBfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGdyaXBfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwX21wLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXBfbXAuYwppbmRleCA4Mjc5NDgxLi4yZDQ3YmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXBfbXAuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXBfbXAuYwpAQCAtNjg5LDggKzY4OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGdyaXBfaW5pdCh2b2lkKQogewotCWdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmZ3JpcF9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmdyaXBfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGdyaXBfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ndWlsbGVtb3QuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3VpbGxlbW90LmMKaW5kZXggMjVlYzNmYS4uNDA1OGQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ndWlsbGVtb3QuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2d1aWxsZW1vdC5jCkBAIC0yODMsOCArMjgzLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgZ3VpbGxlbW90X2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmd1aWxsZW1vdF9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmd1aWxsZW1vdF9kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZ3VpbGxlbW90X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLWZmLmMKaW5kZXggNzgzOWI3Yi4uMGRlOWEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLWZmLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLWZmLmMKQEAgLTE5NywxMyArMTk3LDE2IEBACiAgKiBBbmFseXNlIHRoZSBjaGFuZ2VzIGluIGFuIGVmZmVjdCwgYW5kIHRlbGwgaWYgd2UgbmVlZCB0byBzZW5kIGFuIGNvbmRpdGlvbgogICogcGFyYW1ldGVyIHBhY2tldAogICovCi1zdGF0aWMgaW50IG5lZWRfY29uZGl0aW9uX21vZGlmaWVyKHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwgc3RydWN0IGZmX2VmZmVjdCAqbmV3KQorc3RhdGljIGludCBuZWVkX2NvbmRpdGlvbl9tb2RpZmllcihzdHJ1Y3QgaWZvcmNlICppZm9yY2UsCisJCQkJICAgc3RydWN0IGZmX2VmZmVjdCAqb2xkLAorCQkJCSAgIHN0cnVjdCBmZl9lZmZlY3QgKm5ldykKIHsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgaTsKIAogCWlmIChuZXctPnR5cGUgIT0gRkZfU1BSSU5HICYmIG5ldy0+dHlwZSAhPSBGRl9GUklDVElPTikgewotCQl3YXJuKCJiYWQgZWZmZWN0IHR5cGUgaW4gbmVlZF9jb25kaXRpb25fbW9kaWZpZXIiKTsKKwkJZGV2X3dhcm4oJmlmb3JjZS0+ZGV2LT5kZXYsICJiYWQgZWZmZWN0IHR5cGUgaW4gJXNcbiIsCisJCQkgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTIyMiwxMCArMjI1LDEzIEBACiAgKiBBbmFseXNlIHRoZSBjaGFuZ2VzIGluIGFuIGVmZmVjdCwgYW5kIHRlbGwgaWYgd2UgbmVlZCB0byBzZW5kIGEgbWFnbml0dWRlCiAgKiBwYXJhbWV0ZXIgcGFja2V0CiAgKi8KLXN0YXRpYyBpbnQgbmVlZF9tYWduaXR1ZGVfbW9kaWZpZXIoc3RydWN0IGZmX2VmZmVjdCAqb2xkLCBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCitzdGF0aWMgaW50IG5lZWRfbWFnbml0dWRlX21vZGlmaWVyKHN0cnVjdCBpZm9yY2UgKmlmb3JjZSwKKwkJCQkgICBzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsCisJCQkJICAgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQogewogCWlmIChlZmZlY3QtPnR5cGUgIT0gRkZfQ09OU1RBTlQpIHsKLQkJd2FybigiYmFkIGVmZmVjdCB0eXBlIGluIG5lZWRfZW52ZWxvcGVfbW9kaWZpZXIiKTsKKwkJZGV2X3dhcm4oJmlmb3JjZS0+ZGV2LT5kZXYsICJiYWQgZWZmZWN0IHR5cGUgaW4gJXNcbiIsCisJCQkgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTIzNiw3ICsyNDIsOCBAQAogICogQW5hbHlzZSB0aGUgY2hhbmdlcyBpbiBhbiBlZmZlY3QsIGFuZCB0ZWxsIGlmIHdlIG5lZWQgdG8gc2VuZCBhbiBlbnZlbG9wZQogICogcGFyYW1ldGVyIHBhY2tldAogICovCi1zdGF0aWMgaW50IG5lZWRfZW52ZWxvcGVfbW9kaWZpZXIoc3RydWN0IGZmX2VmZmVjdCAqb2xkLCBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCitzdGF0aWMgaW50IG5lZWRfZW52ZWxvcGVfbW9kaWZpZXIoc3RydWN0IGlmb3JjZSAqaWZvcmNlLCBzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsCisJCQkJICBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCiB7CiAJc3dpdGNoIChlZmZlY3QtPnR5cGUpIHsKIAljYXNlIEZGX0NPTlNUQU5UOgpAQCAtMjU2LDcgKzI2Myw4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJd2FybigiYmFkIGVmZmVjdCB0eXBlIGluIG5lZWRfZW52ZWxvcGVfbW9kaWZpZXIiKTsKKwkJZGV2X3dhcm4oJmlmb3JjZS0+ZGV2LT5kZXYsICJiYWQgZWZmZWN0IHR5cGUgaW4gJXNcbiIsCisJCQkgX19mdW5jX18pOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjY2LDEwICsyNzQsMTIgQEAKICAqIEFuYWx5c2UgdGhlIGNoYW5nZXMgaW4gYW4gZWZmZWN0LCBhbmQgdGVsbCBpZiB3ZSBuZWVkIHRvIHNlbmQgYSBwZXJpb2RpYwogICogcGFyYW1ldGVyIGVmZmVjdAogICovCi1zdGF0aWMgaW50IG5lZWRfcGVyaW9kX21vZGlmaWVyKHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwgc3RydWN0IGZmX2VmZmVjdCAqbmV3KQorc3RhdGljIGludCBuZWVkX3BlcmlvZF9tb2RpZmllcihzdHJ1Y3QgaWZvcmNlICppZm9yY2UsIHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwKKwkJCQlzdHJ1Y3QgZmZfZWZmZWN0ICpuZXcpCiB7CiAJaWYgKG5ldy0+dHlwZSAhPSBGRl9QRVJJT0RJQykgewotCQl3YXJuKCJiYWQgZWZmZWN0IHR5cGUgaW4gbmVlZF9wZXJpb2RfbW9kaWZpZXIiKTsKKwkJZGV2X3dhcm4oJmlmb3JjZS0+ZGV2LT5kZXYsICJiYWQgZWZmZWN0IHR5cGUgaW4gJXNcbiIsCisJCQkgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIChvbGQtPnUucGVyaW9kaWMucGVyaW9kICE9IG5ldy0+dS5wZXJpb2RpYy5wZXJpb2QKQEAgLTM1NSw3ICszNjUsNyBAQAogCWludCBwYXJhbTJfZXJyID0gMTsKIAlpbnQgY29yZV9lcnIgPSAwOwogCi0JaWYgKCFvbGQgfHwgbmVlZF9wZXJpb2RfbW9kaWZpZXIob2xkLCBlZmZlY3QpKSB7CisJaWYgKCFvbGQgfHwgbmVlZF9wZXJpb2RfbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW0xX2VyciA9IG1ha2VfcGVyaW9kX21vZGlmaWVyKGlmb3JjZSwgbW9kMV9jaHVuaywKIAkJCW9sZCAhPSBOVUxMLAogCQkJZWZmZWN0LT51LnBlcmlvZGljLm1hZ25pdHVkZSwgZWZmZWN0LT51LnBlcmlvZGljLm9mZnNldCwKQEAgLTM2NSw3ICszNzUsNyBAQAogCQlzZXRfYml0KEZGX01PRDFfSVNfVVNFRCwgY29yZV9lZmZlY3QtPmZsYWdzKTsKIAl9CiAKLQlpZiAoIW9sZCB8fCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKG9sZCwgZWZmZWN0KSkgeworCWlmICghb2xkIHx8IG5lZWRfZW52ZWxvcGVfbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW0yX2VyciA9IG1ha2VfZW52ZWxvcGVfbW9kaWZpZXIoaWZvcmNlLCBtb2QyX2NodW5rLAogCQkJb2xkICE9TlVMTCwKIAkJCWVmZmVjdC0+dS5wZXJpb2RpYy5lbnZlbG9wZS5hdHRhY2tfbGVuZ3RoLApAQCAtNDI1LDcgKzQzNSw3IEBACiAJaW50IHBhcmFtMl9lcnIgPSAxOwogCWludCBjb3JlX2VyciA9IDA7CiAKLQlpZiAoIW9sZCB8fCBuZWVkX21hZ25pdHVkZV9tb2RpZmllcihvbGQsIGVmZmVjdCkpIHsKKwlpZiAoIW9sZCB8fCBuZWVkX21hZ25pdHVkZV9tb2RpZmllcihpZm9yY2UsIG9sZCwgZWZmZWN0KSkgewogCQlwYXJhbTFfZXJyID0gbWFrZV9tYWduaXR1ZGVfbW9kaWZpZXIoaWZvcmNlLCBtb2QxX2NodW5rLAogCQkJb2xkICE9IE5VTEwsCiAJCQllZmZlY3QtPnUuY29uc3RhbnQubGV2ZWwpOwpAQCAtNDM0LDcgKzQ0NCw3IEBACiAJCXNldF9iaXQoRkZfTU9EMV9JU19VU0VELCBjb3JlX2VmZmVjdC0+ZmxhZ3MpOwogCX0KIAotCWlmICghb2xkIHx8IG5lZWRfZW52ZWxvcGVfbW9kaWZpZXIob2xkLCBlZmZlY3QpKSB7CisJaWYgKCFvbGQgfHwgbmVlZF9lbnZlbG9wZV9tb2RpZmllcihpZm9yY2UsIG9sZCwgZWZmZWN0KSkgewogCQlwYXJhbTJfZXJyID0gbWFrZV9lbnZlbG9wZV9tb2RpZmllcihpZm9yY2UsIG1vZDJfY2h1bmssCiAJCQlvbGQgIT0gTlVMTCwKIAkJCWVmZmVjdC0+dS5jb25zdGFudC5lbnZlbG9wZS5hdHRhY2tfbGVuZ3RoLApAQCAtNDg3LDcgKzQ5Nyw3IEBACiAJCWRlZmF1bHQ6IHJldHVybiAtMTsKIAl9CiAKLQlpZiAoIW9sZCB8fCBuZWVkX2NvbmRpdGlvbl9tb2RpZmllcihvbGQsIGVmZmVjdCkpIHsKKwlpZiAoIW9sZCB8fCBuZWVkX2NvbmRpdGlvbl9tb2RpZmllcihpZm9yY2UsIG9sZCwgZWZmZWN0KSkgewogCQlwYXJhbV9lcnIgPSBtYWtlX2NvbmRpdGlvbl9tb2RpZmllcihpZm9yY2UsIG1vZDFfY2h1bmssCiAJCQlvbGQgIT0gTlVMTCwKIAkJCWVmZmVjdC0+dS5jb25kaXRpb25bMF0ucmlnaHRfc2F0dXJhdGlvbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCmluZGV4IDYxZWU2ZTMuLmJhYWJmODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYwpAQCAtMjE4LDcgKzIxOCw5IEBACiAJCS8qIENoZWNrOiBubyBlZmZlY3RzIHNob3VsZCBiZSBwcmVzZW50IGluIG1lbW9yeSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5mZi0+bWF4X2VmZmVjdHM7IGkrKykgewogCQkJaWYgKHRlc3RfYml0KEZGX0NPUkVfSVNfVVNFRCwgaWZvcmNlLT5jb3JlX2VmZmVjdHNbaV0uZmxhZ3MpKSB7Ci0JCQkJd2FybigiaWZvcmNlX3JlbGVhc2U6IERldmljZSBzdGlsbCBvd25zIGVmZmVjdHMiKTsKKwkJCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkJCSIlczogRGV2aWNlIHN0aWxsIG93bnMgZWZmZWN0c1xuIiwKKwkJCQkJX19mdW5jX18pOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0zMzUsMjYgKzMzNywyNiBAQAogCWlmICghaWZvcmNlX2dldF9pZF9wYWNrZXQoaWZvcmNlLCAiTSIpKQogCQlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IChpZm9yY2UtPmVkYXRhWzJdIDw8IDgpIHwgaWZvcmNlLT5lZGF0YVsxXTsKIAllbHNlCi0JCXdhcm4oIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBNIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiRGV2aWNlIGRvZXMgbm90IHJlc3BvbmQgdG8gaWQgcGFja2V0IE1cbiIpOwogCiAJaWYgKCFpZm9yY2VfZ2V0X2lkX3BhY2tldChpZm9yY2UsICJQIikpCiAJCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IChpZm9yY2UtPmVkYXRhWzJdIDw8IDgpIHwgaWZvcmNlLT5lZGF0YVsxXTsKIAllbHNlCi0JCXdhcm4oIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBQIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiRGV2aWNlIGRvZXMgbm90IHJlc3BvbmQgdG8gaWQgcGFja2V0IFBcbiIpOwogCiAJaWYgKCFpZm9yY2VfZ2V0X2lkX3BhY2tldChpZm9yY2UsICJCIikpCiAJCWlmb3JjZS0+ZGV2aWNlX21lbW9yeS5lbmQgPSAoaWZvcmNlLT5lZGF0YVsyXSA8PCA4KSB8IGlmb3JjZS0+ZWRhdGFbMV07CiAJZWxzZQotCQl3YXJuKCJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgQiIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBCXG4iKTsKIAogCWlmICghaWZvcmNlX2dldF9pZF9wYWNrZXQoaWZvcmNlLCAiTiIpKQogCQlmZl9lZmZlY3RzID0gaWZvcmNlLT5lZGF0YVsxXTsKIAllbHNlCi0JCXdhcm4oIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBOIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiRGV2aWNlIGRvZXMgbm90IHJlc3BvbmQgdG8gaWQgcGFja2V0IE5cbiIpOwogCiAJLyogQ2hlY2sgaWYgdGhlIGRldmljZSBjYW4gc3RvcmUgbW9yZSBlZmZlY3RzIHRoYW4gdGhlIGRyaXZlciBjYW4gcmVhbGx5IGhhbmRsZSAqLwogCWlmIChmZl9lZmZlY3RzID4gSUZPUkNFX0VGRkVDVFNfTUFYKSB7Ci0JCXdhcm4oIkxpbWl0aW5nIG51bWJlciBvZiBlZmZlY3RzIHRvICVkIChkZXZpY2UgcmVwb3J0cyAlZCkiLAorCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkxpbWl0aW5nIG51bWJlciBvZiBlZmZlY3RzIHRvICVkIChkZXZpY2UgcmVwb3J0cyAlZClcbiIsCiAJCSAgICAgICBJRk9SQ0VfRUZGRUNUU19NQVgsIGZmX2VmZmVjdHMpOwogCQlmZl9lZmZlY3RzID0gSUZPUkNFX0VGRkVDVFNfTUFYOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1wYWNrZXRzLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtcGFja2V0cy5jCmluZGV4IDAxNWI1MGFhLi5hMTdiNTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtcGFja2V0cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1wYWNrZXRzLmMKQEAgLTY1LDcgKzY1LDggQEAKIAogCiAJaWYgKENJUkNfU1BBQ0UoaGVhZCwgdGFpbCwgWE1JVF9TSVpFKSA8IG4rMikgewotCQl3YXJuKCJub3QgZW5vdWdoIHNwYWNlIGluIHhtaXQgYnVmZmVyIHRvIHNlbmQgbmV3IHBhY2tldCIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwKKwkJCSAibm90IGVub3VnaCBzcGFjZSBpbiB4bWl0IGJ1ZmZlciB0byBzZW5kIG5ldyBwYWNrZXRcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZm9yY2UtPnhtaXRfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTQ4LDcgKzE0OSw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQl3YXJuKCJ1bnVzZWQgZWZmZWN0ICUwNHggdXBkYXRlZCAhISEiLCBhZGRyKTsKKwlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgInVudXNlZCBlZmZlY3QgJTA0eCB1cGRhdGVkICEhIVxuIiwgYWRkcik7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0xNTksNyArMTYwLDggQEAKIAlzdGF0aWMgaW50IGJlaW5nX3VzZWQgPSAwOwogCiAJaWYgKGJlaW5nX3VzZWQpCi0JCXdhcm4oInJlLWVudHJhbnQgY2FsbCB0byBpZm9yY2VfcHJvY2VzcyAlZCIsIGJlaW5nX3VzZWQpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwKKwkJCSAicmUtZW50cmFudCBjYWxsIHRvIGlmb3JjZV9wcm9jZXNzICVkXG4iLCBiZWluZ191c2VkKTsKIAliZWluZ191c2VkKys7CiAKICNpZmRlZiBDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFXzIzMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jCmluZGV4IDg1MWNjNDAuLmY4MzE4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS11c2IuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtdXNiLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAogCWlmICggKG49dXNiX3N1Ym1pdF91cmIoaWZvcmNlLT5vdXQsIEdGUF9BVE9NSUMpKSApIHsKIAkJY2xlYXJfYml0KElGT1JDRV9YTUlUX1JVTk5JTkcsIGlmb3JjZS0+eG1pdF9mbGFncyk7Ci0JCXdhcm4oInVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZFxuIiwgbik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAidXNiX3N1Ym1pdF91cmIgZmFpbGVkICVkXG4iLCBuKTsKIAl9CiAKIAkvKiBUaGUgSUZPUkNFX1hNSVRfUlVOTklORyBiaXQgaXMgbm90IGNsZWFyZWQgaGVyZS4gVGhhdCdzIGludGVuZGVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pbnRlcmFjdC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pbnRlcmFjdC5jCmluZGV4IDhjMzI5MGIuLjI0NzgyODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaW50ZXJhY3QuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2ludGVyYWN0LmMKQEAgLTMxNyw4ICszMTcsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbnRlcmFjdF9pbml0KHZvaWQpCiB7Ci0JZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZpbnRlcmFjdF9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmludGVyYWN0X2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpbnRlcmFjdF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2pveWR1bXAuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svam95ZHVtcC5jCmluZGV4IDJhMWI4MmMuLmNkODk0YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svam95ZHVtcC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svam95ZHVtcC5jCkBAIC0xNjEsOCArMTYxLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgam95ZHVtcF9pbml0KHZvaWQpCiB7Ci0JZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZqb3lkdW1wX2Rydik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmam95ZHVtcF9kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgam95ZHVtcF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc2lkZXdpbmRlci5jCmluZGV4IDdiNDg2NWYuLmNhMTNhNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc2lkZXdpbmRlci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc2lkZXdpbmRlci5jCkBAIC04MTgsOCArODE4LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc3dfaW5pdCh2b2lkKQogewotCWdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmc3dfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZzd19kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc3dfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay90bWRjLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3RtZGMuYwppbmRleCA2MGMzN2JjLi5kNmM2MDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3RtZGMuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3RtZGMuYwpAQCAtNDM4LDggKzQzOCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHRtZGNfaW5pdCh2b2lkKQogewotCWdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmdG1kY19kcnYpOwotCXJldHVybiAwOworCXJldHVybiBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJnRtZGNfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHRtZGNfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYwppbmRleCA2NzkxYmU4Li5iODY4YjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYwpAQCAtNDU1LDEwICs0NTUsMTAgQEAKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRVNIVVRET1dOOgogCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwotCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJfQogfQogCkBAIC05MTEsNyArOTExLDcgQEAKIHsKIAlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ4cGFkX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA9PSAwKQotCQlpbmZvKERSSVZFUl9ERVNDKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwppbmRleCBiMWNlMTBmLi4yMjAxNmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCkBAIC04MzQsMTAgKzgzNCwxMCBAQAogfQogCiAvKgotICogTW9zdCBzcGVjaWFsIGtleXMgKEZuK0Y/KSBvbiBEZWxsIExhdGl0dWRlcyBkbyBub3QgZ2VuZXJhdGUgcmVsZWFzZQorICogTW9zdCBzcGVjaWFsIGtleXMgKEZuK0Y/KSBvbiBEZWxsIGxhcHRvcHMgZG8gbm90IGdlbmVyYXRlIHJlbGVhc2UKICAqIGV2ZW50cyBzbyB3ZSBoYXZlIHRvIGRvIGl0IG91cnNlbHZlcy4KICAqLwotc3RhdGljIHZvaWQgYXRrYmRfbGF0aXR1ZGVfa2V5bWFwX2ZpeHVwKHN0cnVjdCBhdGtiZCAqYXRrYmQpCitzdGF0aWMgdm9pZCBhdGtiZF9kZWxsX2xhcHRvcF9rZXltYXBfZml4dXAoc3RydWN0IGF0a2JkICphdGtiZCkKIHsKIAljb25zdCB1bnNpZ25lZCBpbnQgZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0gewogCQkweDg1LCAweDg2LCAweDg3LCAweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhmLCAweDkzLApAQCAtMTIwNywxNSArMTIwNywxMyBAQAogewogCXN0cnVjdCBpbnB1dF9kZXYgKm9sZF9kZXYsICpuZXdfZGV2OwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0JY2hhciAqcmVzdDsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGNoYXIgb2xkX2V4dHJhLCBvbGRfc2V0OwogCiAJaWYgKCFhdGtiZC0+d3JpdGUpCiAJCXJldHVybiAtRUlPOwogCi0JdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZyZXN0LCAxMCk7Ci0JaWYgKCpyZXN0IHx8IHZhbHVlID4gMSkKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKSB8fCB2YWx1ZSA+IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGF0a2JkLT5leHRyYSAhPSB2YWx1ZSkgewpAQCAtMTI2NCwxMiArMTI2MiwxMCBAQAogewogCXN0cnVjdCBpbnB1dF9kZXYgKm9sZF9kZXYsICpuZXdfZGV2OwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0JY2hhciAqcmVzdDsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGNoYXIgb2xkX3Njcm9sbDsKIAotCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmcmVzdCwgMTApOwotCWlmICgqcmVzdCB8fCB2YWx1ZSA+IDEpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkgfHwgdmFsdWUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdGtiZC0+c2Nyb2xsICE9IHZhbHVlKSB7CkBAIC0xMzEwLDE1ICsxMzA2LDEzIEBACiB7CiAJc3RydWN0IGlucHV0X2RldiAqb2xkX2RldiwgKm5ld19kZXY7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQljaGFyICpyZXN0OwogCWludCBlcnI7CiAJdW5zaWduZWQgY2hhciBvbGRfc2V0LCBvbGRfZXh0cmE7CiAKIAlpZiAoIWF0a2JkLT53cml0ZSkKIAkJcmV0dXJuIC1FSU87CiAKLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDEwKTsKLQlpZiAoKnJlc3QgfHwgKHZhbHVlICE9IDIgJiYgdmFsdWUgIT0gMykpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkgfHwgKHZhbHVlICE9IDIgJiYgdmFsdWUgIT0gMykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGF0a2JkLT5zZXQgIT0gdmFsdWUpIHsKQEAgLTEzNjEsMTUgKzEzNTUsMTMgQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpvbGRfZGV2LCAqbmV3X2RldjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWNoYXIgKnJlc3Q7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBjaGFyIG9sZF9zb2Z0cmVwZWF0LCBvbGRfc29mdHJhdzsKIAogCWlmICghYXRrYmQtPndyaXRlKQogCQlyZXR1cm4gLUVJTzsKIAotCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmcmVzdCwgMTApOwotCWlmICgqcmVzdCB8fCB2YWx1ZSA+IDEpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkgfHwgdmFsdWUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdGtiZC0+c29mdHJlcGVhdCAhPSB2YWx1ZSkgewpAQCAtMTQxMywxMiArMTQwNSwxMCBAQAogewogCXN0cnVjdCBpbnB1dF9kZXYgKm9sZF9kZXYsICpuZXdfZGV2OwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0JY2hhciAqcmVzdDsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGNoYXIgb2xkX3NvZnRyYXc7CiAKLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDEwKTsKLQlpZiAoKnJlc3QgfHwgdmFsdWUgPiAxKQorCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpIHx8IHZhbHVlID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYXRrYmQtPnNvZnRyYXcgIT0gdmFsdWUpIHsKQEAgLTE0NjEsMTMgKzE0NTEsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGF0a2JkX2RtaV9xdWlya190YWJsZVtdIF9faW5pdGRhdGEgPSB7CiAJewotCQkuaWRlbnQgPSAiRGVsbCBMYXRpdHVkZSBzZXJpZXMiLAorCQkuaWRlbnQgPSAiRGVsbCBMYXB0b3AiLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAotCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJMYXRpdHVkZSIpLAorCQkJRE1JX01BVENIKERNSV9DSEFTU0lTX1RZUEUsICI4IiksIC8qIFBvcnRhYmxlICovCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZpeHVwLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9sYXRpdHVkZV9rZXltYXBfZml4dXAsCisJCS5kcml2ZXJfZGF0YSA9IGF0a2JkX2RlbGxfbGFwdG9wX2tleW1hcF9maXh1cCwKIAl9LAogCXsKIAkJLmlkZW50ID0gIkhQIDIxMzMiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9iZjU0eC1rZXlzLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2JmNTR4LWtleXMuYwppbmRleCBlMzQ4Y2ZjLi4xOTI4NDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2JmNTR4LWtleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2JmNTR4LWtleXMuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKgogICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KICAqCkBAIC04MSw2ICs4MSw5IEBACiAJdW5zaWduZWQgc2hvcnQgKmtleWNvZGU7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJdW5zaWduZWQgaW50IGtleXVwX3Rlc3RfamlmZmllczsKKwl1bnNpZ25lZCBzaG9ydCBrcGFkX21zZWw7CisJdW5zaWduZWQgc2hvcnQga3BhZF9wcmVzY2FsZTsKKwl1bnNpZ25lZCBzaG9ydCBrcGFkX2N0bDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGJmaW5fa3BhZF9maW5kX2tleShzdHJ1Y3QgYmY1NHhfa3BhZCAqYmY1NHhfa3BhZCwKQEAgLTM2MCw2ICszNjMsMTAgQEAKIHsKIAlzdHJ1Y3QgYmY1NHhfa3BhZCAqYmY1NHhfa3BhZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCisJYmY1NHhfa3BhZC0+a3BhZF9tc2VsID0gYmZpbl9yZWFkX0tQQURfTVNFTCgpOworCWJmNTR4X2twYWQtPmtwYWRfcHJlc2NhbGUgPSBiZmluX3JlYWRfS1BBRF9QUkVTQ0FMRSgpOworCWJmNTR4X2twYWQtPmtwYWRfY3RsID0gYmZpbl9yZWFkX0tQQURfQ1RMKCk7CisKIAlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCiAJCWVuYWJsZV9pcnFfd2FrZShiZjU0eF9rcGFkLT5pcnEpOwogCkBAIC0zNzAsNiArMzc3LDEwIEBACiB7CiAJc3RydWN0IGJmNTR4X2twYWQgKmJmNTR4X2twYWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAorCWJmaW5fd3JpdGVfS1BBRF9NU0VMKGJmNTR4X2twYWQtPmtwYWRfbXNlbCk7CisJYmZpbl93cml0ZV9LUEFEX1BSRVNDQUxFKGJmNTR4X2twYWQtPmtwYWRfcHJlc2NhbGUpOworCWJmaW5fd3JpdGVfS1BBRF9DVEwoYmY1NHhfa3BhZC0+a3BhZF9jdGwpOworCiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQogCQlkaXNhYmxlX2lycV93YWtlKGJmNTR4X2twYWQtPmlycSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCmluZGV4IGVjOTZiMzYuLjA1ZjNmNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYwpAQCAtMzYsOSArMzYsMTAgQEAKIAlzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSBkYXRhWzBdOwogfTsKIAotc3RhdGljIHZvaWQgZ3Bpb19rZXlzX3JlcG9ydF9ldmVudChzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiAqYnV0dG9uLAotCQkJCSAgIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQorc3RhdGljIHZvaWQgZ3Bpb19rZXlzX3JlcG9ydF9ldmVudChzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSAqYmRhdGEpCiB7CisJc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbiA9IGJkYXRhLT5idXR0b247CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBiZGF0YS0+aW5wdXQ7CiAJdW5zaWduZWQgaW50IHR5cGUgPSBidXR0b24tPnR5cGUgPzogRVZfS0VZOwogCWludCBzdGF0ZSA9IChncGlvX2dldF92YWx1ZShidXR0b24tPmdwaW8pID8gMSA6IDApIF4gYnV0dG9uLT5hY3RpdmVfbG93OwogCkBAIC01MCwzNCArNTEsMjMgQEAKIHsKIAlzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSAqZGF0YSA9IChzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSAqKV9kYXRhOwogCi0JZ3Bpb19rZXlzX3JlcG9ydF9ldmVudChkYXRhLT5idXR0b24sIGRhdGEtPmlucHV0KTsKKwlncGlvX2tleXNfcmVwb3J0X2V2ZW50KGRhdGEpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZ3Bpb19rZXlzX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldl9pZDsKLQlzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IGdwaW9fa2V5c19kcnZkYXRhICpkZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBpOworCXN0cnVjdCBncGlvX2J1dHRvbl9kYXRhICpiZGF0YSA9IGRldl9pZDsKKwlzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiAqYnV0dG9uID0gYmRhdGEtPmJ1dHRvbjsKIAotCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bmJ1dHRvbnM7IGkrKykgewotCQlzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiAqYnV0dG9uID0gJnBkYXRhLT5idXR0b25zW2ldOworCUJVR19PTihpcnEgIT0gZ3Bpb190b19pcnEoYnV0dG9uLT5ncGlvKSk7CiAKLQkJaWYgKGlycSA9PSBncGlvX3RvX2lycShidXR0b24tPmdwaW8pKSB7Ci0JCQlzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSAqYmRhdGEgPSAmZGRhdGEtPmRhdGFbaV07CisJaWYgKGJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwpCisJCW1vZF90aW1lcigmYmRhdGEtPnRpbWVyLAorCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoYnV0dG9uLT5kZWJvdW5jZV9pbnRlcnZhbCkpOworCWVsc2UKKwkJZ3Bpb19rZXlzX3JlcG9ydF9ldmVudChiZGF0YSk7CiAKLQkJCWlmIChidXR0b24tPmRlYm91bmNlX2ludGVydmFsKQotCQkJCW1vZF90aW1lcigmYmRhdGEtPnRpbWVyLAotCQkJCQkgIGppZmZpZXMgKwotCQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoYnV0dG9uLT5kZWJvdW5jZV9pbnRlcnZhbCkpOwotCQkJZWxzZQotCQkJCWdwaW9fa2V5c19yZXBvcnRfZXZlbnQoYnV0dG9uLCBiZGF0YS0+aW5wdXQpOwotCi0JCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gSVJRX05PTkU7CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBncGlvX2tleXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTE1MSw3ICsxNDEsNyBAQAogCQkJCSAgICBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwKIAkJCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQkJICAgIGJ1dHRvbi0+ZGVzYyA/IGJ1dHRvbi0+ZGVzYyA6ICJncGlvX2tleXMiLAotCQkJCSAgICBwZGV2KTsKKwkJCQkgICAgYmRhdGEpOwogCQlpZiAoZXJyb3IpIHsKIAkJCXByX2VycigiZ3Bpby1rZXlzOiBVbmFibGUgdG8gY2xhaW0gaXJxICVkOyBlcnJvciAlZFxuIiwKIAkJCQlpcnEsIGVycm9yKTsKQEAgLTE3OCw3ICsxNjgsNyBAQAogCiAgZmFpbDI6CiAJd2hpbGUgKC0taSA+PSAwKSB7Ci0JCWZyZWVfaXJxKGdwaW9fdG9faXJxKHBkYXRhLT5idXR0b25zW2ldLmdwaW8pLCBwZGV2KTsKKwkJZnJlZV9pcnEoZ3Bpb190b19pcnEocGRhdGEtPmJ1dHRvbnNbaV0uZ3BpbyksICZkZGF0YS0+ZGF0YVtpXSk7CiAJCWlmIChwZGF0YS0+YnV0dG9uc1tpXS5kZWJvdW5jZV9pbnRlcnZhbCkKIAkJCWRlbF90aW1lcl9zeW5jKCZkZGF0YS0+ZGF0YVtpXS50aW1lcik7CiAJCWdwaW9fZnJlZShwZGF0YS0+YnV0dG9uc1tpXS5ncGlvKTsKQEAgLTIwMyw3ICsxOTMsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5uYnV0dG9uczsgaSsrKSB7CiAJCWludCBpcnEgPSBncGlvX3RvX2lycShwZGF0YS0+YnV0dG9uc1tpXS5ncGlvKTsKLQkJZnJlZV9pcnEoaXJxLCBwZGV2KTsKKwkJZnJlZV9pcnEoaXJxLCAmZGRhdGEtPmRhdGFbaV0pOwogCQlpZiAocGRhdGEtPmJ1dHRvbnNbaV0uZGVib3VuY2VfaW50ZXJ2YWwpCiAJCQlkZWxfdGltZXJfc3luYygmZGRhdGEtPmRhdGFbaV0udGltZXIpOwogCQlncGlvX2ZyZWUocGRhdGEtPmJ1dHRvbnNbaV0uZ3Bpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXAta2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXAta2V5cGFkLmMKaW5kZXggZGNlYTg3YS4uNjllNjc0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9vbWFwLWtleXBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcC1rZXlwYWQuYwpAQCAtNjIsNyArNjIsNyBAQAogCXVuc2lnbmVkIGludCBkZWJvdW5jZTsKIH07CiAKLURFQ0xBUkVfVEFTS0xFVF9ESVNBQkxFRChrcF90YXNrbGV0LCBvbWFwX2twX3Rhc2tsZXQsIDApOworc3RhdGljIERFQ0xBUkVfVEFTS0xFVF9ESVNBQkxFRChrcF90YXNrbGV0LCBvbWFwX2twX3Rhc2tsZXQsIDApOwogCiBzdGF0aWMgaW50ICprZXltYXA7CiBzdGF0aWMgdW5zaWduZWQgaW50ICpyb3dfZ3Bpb3M7CkBAIC03MiwxMiArNzIsOSBAQAogc3RhdGljIHZvaWQgc2V0X2NvbF9ncGlvX3ZhbChzdHJ1Y3Qgb21hcF9rcCAqb21hcF9rcCwgdTggdmFsdWUpCiB7CiAJaW50IGNvbDsKLQlmb3IgKGNvbCA9IDA7IGNvbCA8IG9tYXBfa3AtPmNvbHM7IGNvbCsrKSB7Ci0JCWlmICh2YWx1ZSAmICgxIDw8IGNvbCkpCi0JCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoY29sX2dwaW9zW2NvbF0sIDEpOwotCQllbHNlCi0JCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoY29sX2dwaW9zW2NvbF0sIDApOwotCX0KKworCWZvciAoY29sID0gMDsgY29sIDwgb21hcF9rcC0+Y29sczsgY29sKyspCisJCWdwaW9fc2V0X3ZhbHVlKGNvbF9ncGlvc1tjb2xdLCB2YWx1ZSAmICgxIDw8IGNvbCkpOwogfQogCiBzdGF0aWMgdTggZ2V0X3Jvd19ncGlvX3ZhbChzdHJ1Y3Qgb21hcF9rcCAqb21hcF9rcCkKQEAgLTg2LDcgKzgzLDcgQEAKIAl1OCB2YWx1ZSA9IDA7CiAKIAlmb3IgKHJvdyA9IDA7IHJvdyA8IG9tYXBfa3AtPnJvd3M7IHJvdysrKSB7Ci0JCWlmIChvbWFwX2dldF9ncGlvX2RhdGFpbihyb3dfZ3Bpb3Nbcm93XSkpCisJCWlmIChncGlvX2dldF92YWx1ZShyb3dfZ3Bpb3Nbcm93XSkpCiAJCQl2YWx1ZSB8PSAoMSA8PCByb3cpOwogCX0KIAlyZXR1cm4gdmFsdWU7CkBAIC0zMzMsMjMgKzMzMCwyMyBAQAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCQkvKiBDb2xzOiBvdXRwdXRzICovCiAJCWZvciAoY29sX2lkeCA9IDA7IGNvbF9pZHggPCBvbWFwX2twLT5jb2xzOyBjb2xfaWR4KyspIHsKLQkJCWlmIChvbWFwX3JlcXVlc3RfZ3Bpbyhjb2xfZ3Bpb3NbY29sX2lkeF0pIDwgMCkgeworCQkJaWYgKGdwaW9fcmVxdWVzdChjb2xfZ3Bpb3NbY29sX2lkeF0sICJvbWFwX2twX2NvbCIpIDwgMCkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QiCiAJCQkJICAgICAgICJHUElPJWQgZm9yIGtleXBhZFxuIiwKIAkJCQkgICAgICAgY29sX2dwaW9zW2NvbF9pZHhdKTsKIAkJCQlnb3RvIGVycjE7CiAJCQl9Ci0JCQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihjb2xfZ3Bpb3NbY29sX2lkeF0sIDApOworCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGNvbF9ncGlvc1tjb2xfaWR4XSwgMCk7CiAJCX0KIAkJLyogUm93czogaW5wdXRzICovCiAJCWZvciAocm93X2lkeCA9IDA7IHJvd19pZHggPCBvbWFwX2twLT5yb3dzOyByb3dfaWR4KyspIHsKLQkJCWlmIChvbWFwX3JlcXVlc3RfZ3Bpbyhyb3dfZ3Bpb3Nbcm93X2lkeF0pIDwgMCkgeworCQkJaWYgKGdwaW9fcmVxdWVzdChyb3dfZ3Bpb3Nbcm93X2lkeF0sICJvbWFwX2twX3JvdyIpIDwgMCkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QiCiAJCQkJICAgICAgICJHUElPJWQgZm9yIGtleXBhZFxuIiwKIAkJCQkgICAgICAgcm93X2dwaW9zW3Jvd19pZHhdKTsKIAkJCQlnb3RvIGVycjI7CiAJCQl9Ci0JCQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihyb3dfZ3Bpb3Nbcm93X2lkeF0sIDEpOworCQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQocm93X2dwaW9zW3Jvd19pZHhdKTsKIAkJfQogCX0gZWxzZSB7CiAJCWNvbF9pZHggPSAwOwpAQCAtNDE4LDEwICs0MTUsMTAgQEAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2VuYWJsZSk7CiBlcnIyOgogCWZvciAoaSA9IHJvd19pZHggLSAxOyBpID49MDsgaS0tKQotCQlvbWFwX2ZyZWVfZ3Bpbyhyb3dfZ3Bpb3NbaV0pOworCQlncGlvX2ZyZWUocm93X2dwaW9zW2ldKTsKIGVycjE6CiAJZm9yIChpID0gY29sX2lkeCAtIDE7IGkgPj0wOyBpLS0pCi0JCW9tYXBfZnJlZV9ncGlvKGNvbF9ncGlvc1tpXSk7CisJCWdwaW9fZnJlZShjb2xfZ3Bpb3NbaV0pOwogCiAJa2ZyZWUob21hcF9rcCk7CiAJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKQEAgLTQzOCw5ICs0MzUsOSBAQAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCQlpbnQgaTsKIAkJZm9yIChpID0gMDsgaSA8IG9tYXBfa3AtPmNvbHM7IGkrKykKLQkJCW9tYXBfZnJlZV9ncGlvKGNvbF9ncGlvc1tpXSk7CisJCQlncGlvX2ZyZWUoY29sX2dwaW9zW2ldKTsKIAkJZm9yIChpID0gMDsgaSA8IG9tYXBfa3AtPnJvd3M7IGkrKykgewotCQkJb21hcF9mcmVlX2dwaW8ocm93X2dwaW9zW2ldKTsKKwkJCWdwaW9fZnJlZShyb3dfZ3Bpb3NbaV0pOwogCQkJZnJlZV9pcnEoT01BUF9HUElPX0lSUShyb3dfZ3Bpb3NbaV0pLCAwKTsKIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCmluZGV4IGU5OWI3ODguLjE5OTA1NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnCkBAIC0xODAsNiArMTgwLDE5IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKIAkgIGNhbGxlZCB5ZWFsaW5rLgogCitjb25maWcgSU5QVVRfQ00xMDkKKwl0cmlzdGF0ZSAiQy1NZWRpYSBDTTEwOSBVU0IgSS9PIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFVTQl9BUkNIX0hBU19IQ0QKKwlzZWxlY3QgVVNCCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUga2V5Ym9hcmQgYW5kIGJ1enplciBmdW5jdGlvbnMgb2YgdGhlCisJICBDLU1lZGlhIENNMTA5IHVzYiBwaG9uZXMuIFRoZSBhdWRpbyBwYXJ0IGlzIGVuYWJsZWQgYnkgdGhlIGdlbmVyaWMKKwkgIHVzYiBzb3VuZCBkcml2ZXIsIHNvIHlvdSBtaWdodCB3YW50IHRvIGVuYWJsZSB0aGF0IGFzIHdlbGwuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIGNtMTA5LgorCiBjb25maWcgSU5QVVRfVUlOUFVUCiAJdHJpc3RhdGUgIlVzZXIgbGV2ZWwgZHJpdmVyIHN1cHBvcnQiCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCmluZGV4IGY0ODAwOWIuLmQ3ZGIyYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAKIG9iai0kKENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSkJKz0ga2V5c3Bhbl9yZW1vdGUubwogb2JqLSQoQ09ORklHX0lOUFVUX1BPV0VSTUFURSkJCSs9IHBvd2VybWF0ZS5vCiBvYmotJChDT05GSUdfSU5QVVRfWUVBTElOSykJCSs9IHllYWxpbmsubworb2JqLSQoQ09ORklHX0lOUFVUX0NNMTA5KQkJKz0gY20xMDkubwogb2JqLSQoQ09ORklHX0hQX1NEQ19SVEMpCQkrPSBocF9zZGNfcnRjLm8KIG9iai0kKENPTkZJR19JTlBVVF9VSU5QVVQpCQkrPSB1aW5wdXQubwogb2JqLSQoQ09ORklHX0lOUFVUX0FQQU5FTCkJCSs9IGFwYW5lbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZS5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUuYwppbmRleCBkZWJmYzFhLi5lMjkwZmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGlfcmVtb3RlLmMKQEAgLTI4NSw3ICsyODUsNiBAQAogfTsKIAogLyogTG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9kdW1wCQkodW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGFjdHVhbF9sZW5ndGgpOwogc3RhdGljIGludCBhdGlfcmVtb3RlX29wZW4JCShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldik7CiBzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2Nsb3NlCQkoc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpOwogc3RhdGljIGludCBhdGlfcmVtb3RlX3NlbmRwYWNrZXQJKHN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlLCB1MTYgY21kLCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKQEAgLTMwNywxNSArMzA2LDE2IEBACiAvKgogICoJYXRpX3JlbW90ZV9kdW1wX2lucHV0CiAgKi8KLXN0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZHVtcCh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9kdW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgbGVuKQogewogCWlmICgobGVuID09IDEpICYmIChkYXRhWzBdICE9ICh1bnNpZ25lZCBjaGFyKTB4ZmYpICYmIChkYXRhWzBdICE9IDB4MDApKQotCQl3YXJuKCJXZWlyZCBieXRlIDB4JTAyeCIsIGRhdGFbMF0pOworCQlkZXZfd2FybihkZXYsICJXZWlyZCBieXRlIDB4JTAyeFxuIiwgZGF0YVswXSk7CiAJZWxzZSBpZiAobGVuID09IDQpCi0JCXdhcm4oIldlaXJkIGtleSAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKKwkJZGV2X3dhcm4oZGV2LCAiV2VpcmQga2V5ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCiAJCSAgICAgZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSk7CiAJZWxzZQotCQl3YXJuKCJXZWlyZCBkYXRhLCBsZW49JWQgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggLi4uIiwKKwkJZGV2X3dhcm4oZGV2LCAiV2VpcmQgZGF0YSwgbGVuPSVkICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IC4uLlxuIiwKIAkJICAgICBsZW4sIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10sIGRhdGFbNF0sIGRhdGFbNV0pOwogfQogCkBAIC00NzAsNyArNDcwLDcgQEAKIAkvKiBEZWFsIHdpdGggc3RyYW5nZSBsb29raW5nIGlucHV0cyAqLwogCWlmICggKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSA0KSB8fCAoZGF0YVswXSAhPSAweDE0KSB8fAogCQkoKGRhdGFbM10gJiAweDBmKSAhPSAweDAwKSApIHsKLQkJYXRpX3JlbW90ZV9kdW1wKGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWF0aV9yZW1vdGVfZHVtcCgmdXJiLT5kZXYtPmRldiwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtODE0LDcgKzgxNCw3IEBACiAJYXRpX3JlbW90ZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAJaWYgKCFhdGlfcmVtb3RlKSB7Ci0JCXdhcm4oIiVzIC0gbnVsbCBkZXZpY2U/XG4iLCBfX2Z1bmNfXyk7CisJCWRldl93YXJuKCZpbnRlcmZhY2UtPmRldiwgIiVzIC0gbnVsbCBkZXZpY2U/XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTgzNCw5ICs4MzQsMTEgQEAKIAogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmYXRpX3JlbW90ZV9kcml2ZXIpOwogCWlmIChyZXN1bHQpCi0JCWVycigidXNiX3JlZ2lzdGVyIGVycm9yICMlZFxuIiwgcmVzdWx0KTsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiB1c2JfcmVnaXN0ZXIgZXJyb3IgIyVkXG4iLCByZXN1bHQpOwogCWVsc2UKLQkJaW5mbygiUmVnaXN0ZXJlZCBVU0IgZHJpdmVyICIgRFJJVkVSX0RFU0MgIiB2LiAiIERSSVZFUl9WRVJTSU9OKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCQkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUyLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZTIuYwppbmRleCBhN2ZhYmFmLi4zYzk5ODhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZTIuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZTIuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBhdGlfcmVtb3RlMiAtIEFUSS9QaGlsaXBzIFVTQiBSRiByZW1vdGUgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1IFZpbGxlIFN5cmphbGEgPHN5cmphbGFAc2NpLmZpPgotICogQ29weXJpZ2h0IChDKSAyMDA3IFBldGVyIFN0b2tlcyA8bGludXhAZGFkZW9zLmZyZWVzZXJ2ZS5jby51az4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFZpbGxlIFN5cmphbGEgPHN5cmphbGFAc2NpLmZpPgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggUGV0ZXIgU3Rva2VzIDxsaW51eEBkYWRlb3MuY28udWs+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CiAKICNkZWZpbmUgRFJJVkVSX0RFU0MgICAgIkFUSS9QaGlsaXBzIFVTQiBSRiByZW1vdGUgZHJpdmVyIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4yIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4zIgogCiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwpAQCAtMjcsNyArMjcsNyBAQAogICogQSByZW1vdGUncyAiY2hhbm5lbCIgbWF5IGJlIGFsdGVyZWQgYnkgcHJlc3NpbmcgYW5kIGhvbGRpbmcgdGhlICJQQyIgYnV0dG9uIGZvcgogICogYXBwcm94aW1hdGVseSAzIHNlY29uZHMsIGFmdGVyIHdoaWNoIHRoZSBidXR0b24gd2lsbCBzbG93bHkgZmxhc2ggdGhlIGNvdW50IG9mIHRoZQogICogY3VycmVudGx5IGNvbmZpZ3VyZWQgImNoYW5uZWwiLCB1c2luZyB0aGUgbnVtZXJpYyBrZXlwYWQgZW50ZXIgYSBudW1iZXIgYmV0d2VlbiAxIGFuZAotICogMTYgYW5kIHRoZW4gdGhlICJQQyIgYnV0dG9uIGFnYWluLCB0aGUgYnV0dG9uIHdpbGwgc2xvd2x5IGZsYXNoIHRoZSBjb3VudCBvZiB0aGUKKyAqIDE2IGFuZCB0aGVuIHByZXNzIHRoZSAiUEMiIGJ1dHRvbiBhZ2FpbiwgdGhlIGJ1dHRvbiB3aWxsIHNsb3dseSBmbGFzaCB0aGUgY291bnQgb2YgdGhlCiAgKiBuZXdseSBjb25maWd1cmVkICJjaGFubmVsIi4KICAqLwogCkBAIC00NSw5ICs0NSwyNSBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhdGlfcmVtb3RlMl9pZF90YWJsZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgewotCWludCBod19jb2RlOwotCWludCBrZXlfY29kZTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYXRpX3JlbW90ZTJfbXV0ZXgpOworCitlbnVtIHsKKwlBVElfUkVNT1RFMl9PUEVORUQgPSAweDEsCisJQVRJX1JFTU9URTJfU1VTUEVOREVEID0gMHgyLAorfTsKKworZW51bSB7CisJQVRJX1JFTU9URTJfQVVYMSwKKwlBVElfUkVNT1RFMl9BVVgyLAorCUFUSV9SRU1PVEUyX0FVWDMsCisJQVRJX1JFTU9URTJfQVVYNCwKKwlBVElfUkVNT1RFMl9QQywKKwlBVElfUkVNT1RFMl9NT0RFUywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXU4ICBod19jb2RlOworCXUxNiBrZXljb2RlOwogfSBhdGlfcmVtb3RlMl9rZXlfdGFibGVbXSA9IHsKIAl7IDB4MDAsIEtFWV8wIH0sCiAJeyAweDAxLCBLRVlfMSB9LApAQCAtNzMsNiArODksNyBAQAogCXsgMHgzNywgS0VZX1JFQ09SRCB9LAogCXsgMHgzOCwgS0VZX0RWRCB9LAogCXsgMHgzOSwgS0VZX1RWIH0sCisJeyAweDNmLCBLRVlfUFJPRzEgfSwgLyogQVVYMS1BVVg0IGFuZCBQQyAqLwogCXsgMHg1NCwgS0VZX01FTlUgfSwKIAl7IDB4NTgsIEtFWV9VUCB9LAogCXsgMHg1OSwgS0VZX0RPV04gfSwKQEAgLTkxLDE1ICsxMDgsOSBAQAogCXsgMHhhOSwgQlROX0xFRlQgfSwKIAl7IDB4YWEsIEJUTl9SSUdIVCB9LAogCXsgMHhiZSwgS0VZX1FVRVNUSU9OIH0sCi0JeyAweGQ1LCBLRVlfRlJPTlQgfSwKIAl7IDB4ZDAsIEtFWV9FRElUIH0sCisJeyAweGQ1LCBLRVlfRlJPTlQgfSwKIAl7IDB4ZjksIEtFWV9JTkZPIH0sCi0JeyAoMHgwMCA8PCA4KSB8IDB4M2YsIEtFWV9QUk9HMSB9LAotCXsgKDB4MDEgPDwgOCkgfCAweDNmLCBLRVlfUFJPRzIgfSwKLQl7ICgweDAyIDw8IDgpIHwgMHgzZiwgS0VZX1BST0czIH0sCi0JeyAoMHgwMyA8PCA4KSB8IDB4M2YsIEtFWV9QUk9HNCB9LAotCXsgKDB4MDQgPDwgOCkgfCAweDNmLCBLRVlfUEMgfSwKLQl7IDAsIEtFWV9SRVNFUlZFRCB9CiB9OwogCiBzdHJ1Y3QgYXRpX3JlbW90ZTIgewpAQCAtMTE3LDQ2ICsxMjgsMTA2IEBACiAKIAljaGFyIG5hbWVbNjRdOwogCWNoYXIgcGh5c1s2NF07CisKKwkvKiBFYWNoIG1vZGUgKEFVWDEtQVVYNCBhbmQgUEMpIGNhbiBoYXZlIGFuIGluZGVwZW5kZW50IGtleW1hcC4gKi8KKwl1MTYga2V5Y29kZVtBVElfUkVNT1RFMl9NT0RFU11bQVJSQVlfU0laRShhdGlfcmVtb3RlMl9rZXlfdGFibGUpXTsKKworCXVuc2lnbmVkIGludCBmbGFnczsKIH07CiAKIHN0YXRpYyBpbnQgYXRpX3JlbW90ZTJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKIHN0YXRpYyB2b2lkIGF0aV9yZW1vdGUyX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitzdGF0aWMgaW50IGF0aV9yZW1vdGUyX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpOworc3RhdGljIGludCBhdGlfcmVtb3RlMl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhdGlfcmVtb3RlMl9kcml2ZXIgPSB7CiAJLm5hbWUgICAgICAgPSAiYXRpX3JlbW90ZTIiLAogCS5wcm9iZSAgICAgID0gYXRpX3JlbW90ZTJfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBhdGlfcmVtb3RlMl9kaXNjb25uZWN0LAogCS5pZF90YWJsZSAgID0gYXRpX3JlbW90ZTJfaWRfdGFibGUsCisJLnN1c3BlbmQgICAgPSBhdGlfcmVtb3RlMl9zdXNwZW5kLAorCS5yZXN1bWUgICAgID0gYXRpX3JlbW90ZTJfcmVzdW1lLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDEsCiB9OwogCi1zdGF0aWMgaW50IGF0aV9yZW1vdGUyX29wZW4oc3RydWN0IGlucHV0X2RldiAqaWRldikKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZTJfc3VibWl0X3VyYnMoc3RydWN0IGF0aV9yZW1vdGUyICphcjIpCiB7Ci0Jc3RydWN0IGF0aV9yZW1vdGUyICphcjIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpZGV2KTsKIAlpbnQgcjsKIAogCXIgPSB1c2Jfc3VibWl0X3VyYihhcjItPnVyYlswXSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHIpIHsKIAkJZGV2X2VycigmYXIyLT5pbnRmWzBdLT5kZXYsCi0JCQkiJXM6IHVzYl9zdWJtaXRfdXJiKCkgPSAlZFxuIiwgX19mdW5jX18sIHIpOworCQkJIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgPSAlZFxuIiwgX19mdW5jX18sIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAJciA9IHVzYl9zdWJtaXRfdXJiKGFyMi0+dXJiWzFdLCBHRlBfS0VSTkVMKTsKIAlpZiAocikgewogCQl1c2Jfa2lsbF91cmIoYXIyLT51cmJbMF0pOwogCQlkZXZfZXJyKCZhcjItPmludGZbMV0tPmRldiwKLQkJCSIlczogdXNiX3N1Ym1pdF91cmIoKSA9ICVkXG4iLCBfX2Z1bmNfXywgcik7CisJCQkiJXMoKTogdXNiX3N1Ym1pdF91cmIoKSA9ICVkXG4iLCBfX2Z1bmNfXywgcik7CiAJCXJldHVybiByOwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlMl9raWxsX3VyYnMoc3RydWN0IGF0aV9yZW1vdGUyICphcjIpCit7CisJdXNiX2tpbGxfdXJiKGFyMi0+dXJiWzFdKTsKKwl1c2Jfa2lsbF91cmIoYXIyLT51cmJbMF0pOworfQorCitzdGF0aWMgaW50IGF0aV9yZW1vdGUyX29wZW4oc3RydWN0IGlucHV0X2RldiAqaWRldikKK3sKKwlzdHJ1Y3QgYXRpX3JlbW90ZTIgKmFyMiA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOworCWludCByOworCisJZGV2X2RiZygmYXIyLT5pbnRmWzBdLT5kZXYsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGFyMi0+aW50ZlswXSk7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmYXIyLT5pbnRmWzBdLT5kZXYsCisJCQkiJXMoKTogdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKCkgPSAlZFxuIiwgX19mdW5jX18sIHIpOworCQlnb3RvIGZhaWwxOworCX0KKworCW11dGV4X2xvY2soJmF0aV9yZW1vdGUyX211dGV4KTsKKworCWlmICghKGFyMi0+ZmxhZ3MgJiBBVElfUkVNT1RFMl9TVVNQRU5ERUQpKSB7CisJCXIgPSBhdGlfcmVtb3RlMl9zdWJtaXRfdXJicyhhcjIpOworCQlpZiAocikKKwkJCWdvdG8gZmFpbDI7CisJfQorCisJYXIyLT5mbGFncyB8PSBBVElfUkVNT1RFMl9PUEVORUQ7CisKKwltdXRleF91bmxvY2soJmF0aV9yZW1vdGUyX211dGV4KTsKKworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShhcjItPmludGZbMF0pOworCisJcmV0dXJuIDA7CisKKyBmYWlsMjoKKwltdXRleF91bmxvY2soJmF0aV9yZW1vdGUyX211dGV4KTsKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoYXIyLT5pbnRmWzBdKTsKKyBmYWlsMToKKwlyZXR1cm4gcjsKK30KKwogc3RhdGljIHZvaWQgYXRpX3JlbW90ZTJfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaWRldikKIHsKIAlzdHJ1Y3QgYXRpX3JlbW90ZTIgKmFyMiA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOwogCi0JdXNiX2tpbGxfdXJiKGFyMi0+dXJiWzBdKTsKLQl1c2Jfa2lsbF91cmIoYXIyLT51cmJbMV0pOworCWRldl9kYmcoJmFyMi0+aW50ZlswXS0+ZGV2LCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmYXRpX3JlbW90ZTJfbXV0ZXgpOworCisJaWYgKCEoYXIyLT5mbGFncyAmIEFUSV9SRU1PVEUyX1NVU1BFTkRFRCkpCisJCWF0aV9yZW1vdGUyX2tpbGxfdXJicyhhcjIpOworCisJYXIyLT5mbGFncyAmPSB+QVRJX1JFTU9URTJfT1BFTkVEOworCisJbXV0ZXhfdW5sb2NrKCZhdGlfcmVtb3RlMl9tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aV9yZW1vdGUyX2lucHV0X21vdXNlKHN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyKQpAQCAtMTcyLDcgKzI0Myw3IEBACiAKIAltb2RlID0gZGF0YVswXSAmIDB4MEY7CiAKLQlpZiAobW9kZSA+IDQpIHsKKwlpZiAobW9kZSA+IEFUSV9SRU1PVEUyX1BDKSB7CiAJCWRldl9lcnIoJmFyMi0+aW50ZlswXS0+ZGV2LAogCQkJIlVua25vd24gbW9kZSBieXRlICglMDJ4ICUwMnggJTAyeCAlMDJ4KVxuIiwKIAkJCWRhdGFbM10sIGRhdGFbMl0sIGRhdGFbMV0sIGRhdGFbMF0pOwpAQCAtMTkxLDcgKzI2Miw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBhdGlfcmVtb3RlMl9rZXlfdGFibGVbaV0ua2V5X2NvZGUgIT0gS0VZX1JFU0VSVkVEOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXRpX3JlbW90ZTJfa2V5X3RhYmxlKTsgaSsrKQogCQlpZiAoYXRpX3JlbW90ZTJfa2V5X3RhYmxlW2ldLmh3X2NvZGUgPT0gaHdfY29kZSkKIAkJCXJldHVybiBpOwogCkBAIC0yMTEsNyArMjgyLDcgQEAKIAogCW1vZGUgPSBkYXRhWzBdICYgMHgwRjsKIAotCWlmIChtb2RlID4gNCkgeworCWlmIChtb2RlID4gQVRJX1JFTU9URTJfUEMpIHsKIAkJZGV2X2VycigmYXIyLT5pbnRmWzFdLT5kZXYsCiAJCQkiVW5rbm93biBtb2RlIGJ5dGUgKCUwMnggJTAyeCAlMDJ4ICUwMngpXG4iLAogCQkJZGF0YVszXSwgZGF0YVsyXSwgZGF0YVsxXSwgZGF0YVswXSk7CkBAIC0yMTksMTAgKzI5MCw2IEBACiAJfQogCiAJaHdfY29kZSA9IGRhdGFbMl07Ci0JLyoKLQkgKiBNb2RlIGtleXMgKEFVWDEtQVVYNCwgUEMpIGFsbCBnZW5lcmF0ZSB0aGUgc2FtZSBjb2RlIGJ5dGUuCi0JICogVXNlIHRoZSBtb2RlIGJ5dGUgdG8gZmlndXJlIG91dCB3aGljaCBvbmUgd2FzIHByZXNzZWQuCi0JICovCiAJaWYgKGh3X2NvZGUgPT0gMHgzZikgewogCQkvKgogCQkgKiBGb3Igc29tZSBpbmNvbXByZWhlbnNpYmxlIHJlYXNvbiB0aGUgbW91c2UgcGFkIGdlbmVyYXRlcwpAQCAtMjM2LDggKzMwMyw2IEBACiAKIAkJaWYgKGRhdGFbMV0gPT0gMCkKIAkJCWFyMi0+bW9kZSA9IG1vZGU7Ci0KLQkJaHdfY29kZSB8PSBtb2RlIDw8IDg7CiAJfQogCiAJaWYgKCEoKDEgPDwgbW9kZSkgJiBtb2RlX21hc2spKQpAQCAtMjYwLDggKzMyNSw4IEBACiAJY2FzZSAyOgkvKiByZXBlYXQgKi8KIAogCQkvKiBObyByZXBlYXQgZm9yIG1vdXNlIGJ1dHRvbnMuICovCi0JCWlmIChhdGlfcmVtb3RlMl9rZXlfdGFibGVbaW5kZXhdLmtleV9jb2RlID09IEJUTl9MRUZUIHx8Ci0JCSAgICBhdGlfcmVtb3RlMl9rZXlfdGFibGVbaW5kZXhdLmtleV9jb2RlID09IEJUTl9SSUdIVCkKKwkJaWYgKGFyMi0+a2V5Y29kZVttb2RlXVtpbmRleF0gPT0gQlROX0xFRlQgfHwKKwkJICAgIGFyMi0+a2V5Y29kZVttb2RlXVtpbmRleF0gPT0gQlROX1JJR0hUKQogCQkJcmV0dXJuOwogCiAJCWlmICghdGltZV9hZnRlcl9lcShqaWZmaWVzLCBhcjItPmppZmZpZXMpKQpAQCAtMjc2LDcgKzM0MSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpbnB1dF9ldmVudChpZGV2LCBFVl9LRVksIGF0aV9yZW1vdGUyX2tleV90YWJsZVtpbmRleF0ua2V5X2NvZGUsIGRhdGFbMV0pOworCWlucHV0X2V2ZW50KGlkZXYsIEVWX0tFWSwgYXIyLT5rZXljb2RlW21vZGVdW2luZGV4XSwgZGF0YVsxXSk7CiAJaW5wdXRfc3luYyhpZGV2KTsKIH0KIApAQCAtMjg3LDYgKzM1Miw3IEBACiAKIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOgorCQl1c2JfbWFya19sYXN0X2J1c3koYXIyLT51ZGV2KTsKIAkJYXRpX3JlbW90ZTJfaW5wdXRfbW91c2UoYXIyKTsKIAkJYnJlYWs7CiAJY2FzZSAtRU5PRU5UOgpAQCAtMjk3LDYgKzM2Myw3IEBACiAJCQkiJXMoKTogdXJiIHN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoKKwkJdXNiX21hcmtfbGFzdF9idXN5KGFyMi0+dWRldik7CiAJCWRldl9lcnIoJmFyMi0+aW50ZlswXS0+ZGV2LAogCQkJIiVzKCk6IHVyYiBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAl9CkBAIC0zMTQsNiArMzgxLDcgQEAKIAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAljYXNlIDA6CisJCXVzYl9tYXJrX2xhc3RfYnVzeShhcjItPnVkZXYpOwogCQlhdGlfcmVtb3RlMl9pbnB1dF9rZXkoYXIyKTsKIAkJYnJlYWs7CiAJY2FzZSAtRU5PRU5UOgpAQCAtMzI0LDYgKzM5Miw3IEBACiAJCQkiJXMoKTogdXJiIHN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoKKwkJdXNiX21hcmtfbGFzdF9idXN5KGFyMi0+dWRldik7CiAJCWRldl9lcnIoJmFyMi0+aW50ZlsxXS0+ZGV2LAogCQkJIiVzKCk6IHVyYiBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAl9CkBAIC0zMzQsMTAgKzQwMyw2MCBAQAogCQkJIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgPSAlZFxuIiwgX19mdW5jX18sIHIpOwogfQogCitzdGF0aWMgaW50IGF0aV9yZW1vdGUyX2dldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqaWRldiwKKwkJCQkgIGludCBzY2FuY29kZSwgaW50ICprZXljb2RlKQoreworCXN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyID0gaW5wdXRfZ2V0X2RydmRhdGEoaWRldik7CisJaW50IGluZGV4LCBtb2RlOworCisJbW9kZSA9IHNjYW5jb2RlID4+IDg7CisJaWYgKG1vZGUgPiBBVElfUkVNT1RFMl9QQyB8fCAhKCgxIDw8IG1vZGUpICYgbW9kZV9tYXNrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbmRleCA9IGF0aV9yZW1vdGUyX2xvb2t1cChzY2FuY29kZSAmIDB4RkYpOworCWlmIChpbmRleCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJKmtleWNvZGUgPSBhcjItPmtleWNvZGVbbW9kZV1baW5kZXhdOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0aV9yZW1vdGUyX3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqaWRldiwgaW50IHNjYW5jb2RlLCBpbnQga2V5Y29kZSkKK3sKKwlzdHJ1Y3QgYXRpX3JlbW90ZTIgKmFyMiA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOworCWludCBpbmRleCwgbW9kZSwgb2xkX2tleWNvZGU7CisKKwltb2RlID0gc2NhbmNvZGUgPj4gODsKKwlpZiAobW9kZSA+IEFUSV9SRU1PVEUyX1BDIHx8ICEoKDEgPDwgbW9kZSkgJiBtb2RlX21hc2spKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWluZGV4ID0gYXRpX3JlbW90ZTJfbG9va3VwKHNjYW5jb2RlICYgMHhGRik7CisJaWYgKGluZGV4IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoa2V5Y29kZSA8IEtFWV9SRVNFUlZFRCB8fCBrZXljb2RlID4gS0VZX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvbGRfa2V5Y29kZSA9IGFyMi0+a2V5Y29kZVttb2RlXVtpbmRleF07CisJYXIyLT5rZXljb2RlW21vZGVdW2luZGV4XSA9IGtleWNvZGU7CisJc2V0X2JpdChrZXljb2RlLCBpZGV2LT5rZXliaXQpOworCisJZm9yIChtb2RlID0gMDsgbW9kZSA8IEFUSV9SRU1PVEUyX01PREVTOyBtb2RlKyspIHsKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQVJSQVlfU0laRShhdGlfcmVtb3RlMl9rZXlfdGFibGUpOyBpbmRleCsrKSB7CisJCQlpZiAoYXIyLT5rZXljb2RlW21vZGVdW2luZGV4XSA9PSBvbGRfa2V5Y29kZSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWNsZWFyX2JpdChvbGRfa2V5Y29kZSwgaWRldi0+a2V5Yml0KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGF0aV9yZW1vdGUyX2lucHV0X2luaXQoc3RydWN0IGF0aV9yZW1vdGUyICphcjIpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaWRldjsKLQlpbnQgaSwgcmV0dmFsOworCWludCBpbmRleCwgbW9kZSwgcmV0dmFsOwogCiAJaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghaWRldikKQEAgLTM1MCw4ICs0NjksMjYgQEAKIAlpZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX01PVVNFKV0gPSBCSVRfTUFTSyhCVE5fTEVGVCkgfAogCQlCSVRfTUFTSyhCVE5fUklHSFQpOwogCWlkZXYtPnJlbGJpdFswXSA9IEJJVF9NQVNLKFJFTF9YKSB8IEJJVF9NQVNLKFJFTF9ZKTsKLQlmb3IgKGkgPSAwOyBhdGlfcmVtb3RlMl9rZXlfdGFibGVbaV0ua2V5X2NvZGUgIT0gS0VZX1JFU0VSVkVEOyBpKyspCi0JCXNldF9iaXQoYXRpX3JlbW90ZTJfa2V5X3RhYmxlW2ldLmtleV9jb2RlLCBpZGV2LT5rZXliaXQpOworCisJZm9yIChtb2RlID0gMDsgbW9kZSA8IEFUSV9SRU1PVEUyX01PREVTOyBtb2RlKyspIHsKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQVJSQVlfU0laRShhdGlfcmVtb3RlMl9rZXlfdGFibGUpOyBpbmRleCsrKSB7CisJCQlhcjItPmtleWNvZGVbbW9kZV1baW5kZXhdID0gYXRpX3JlbW90ZTJfa2V5X3RhYmxlW2luZGV4XS5rZXljb2RlOworCQkJc2V0X2JpdChhcjItPmtleWNvZGVbbW9kZV1baW5kZXhdLCBpZGV2LT5rZXliaXQpOworCQl9CisJfQorCisJLyogQVVYMS1BVVg0IGFuZCBQQyBnZW5lcmF0ZSB0aGUgc2FtZSBzY2FuY29kZS4gKi8KKwlpbmRleCA9IGF0aV9yZW1vdGUyX2xvb2t1cCgweDNmKTsKKwlhcjItPmtleWNvZGVbQVRJX1JFTU9URTJfQVVYMV1baW5kZXhdID0gS0VZX1BST0cxOworCWFyMi0+a2V5Y29kZVtBVElfUkVNT1RFMl9BVVgyXVtpbmRleF0gPSBLRVlfUFJPRzI7CisJYXIyLT5rZXljb2RlW0FUSV9SRU1PVEUyX0FVWDNdW2luZGV4XSA9IEtFWV9QUk9HMzsKKwlhcjItPmtleWNvZGVbQVRJX1JFTU9URTJfQVVYNF1baW5kZXhdID0gS0VZX1BST0c0OworCWFyMi0+a2V5Y29kZVtBVElfUkVNT1RFMl9QQ11baW5kZXhdID0gS0VZX1BDOworCXNldF9iaXQoS0VZX1BST0cxLCBpZGV2LT5rZXliaXQpOworCXNldF9iaXQoS0VZX1BST0cyLCBpZGV2LT5rZXliaXQpOworCXNldF9iaXQoS0VZX1BST0czLCBpZGV2LT5rZXliaXQpOworCXNldF9iaXQoS0VZX1BST0c0LCBpZGV2LT5rZXliaXQpOworCXNldF9iaXQoS0VZX1BDLCBpZGV2LT5rZXliaXQpOwogCiAJaWRldi0+cmVwW1JFUF9ERUxBWV0gID0gMjUwOwogCWlkZXYtPnJlcFtSRVBfUEVSSU9EXSA9IDMzOwpAQCAtMzU5LDYgKzQ5Niw5IEBACiAJaWRldi0+b3BlbiA9IGF0aV9yZW1vdGUyX29wZW47CiAJaWRldi0+Y2xvc2UgPSBhdGlfcmVtb3RlMl9jbG9zZTsKIAorCWlkZXYtPmdldGtleWNvZGUgPSBhdGlfcmVtb3RlMl9nZXRrZXljb2RlOworCWlkZXYtPnNldGtleWNvZGUgPSBhdGlfcmVtb3RlMl9zZXRrZXljb2RlOworCiAJaWRldi0+bmFtZSA9IGFyMi0+bmFtZTsKIAlpZGV2LT5waHlzID0gYXIyLT5waHlzOwogCkBAIC00OTAsNiArNjMwLDggQEAKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBhcjIpOwogCisJaW50ZXJmYWNlLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMTsKKwogCXJldHVybiAwOwogCiAgZmFpbDI6CkBAIC01MjIsNiArNjY0LDU3IEBACiAJa2ZyZWUoYXIyKTsKIH0KIAorc3RhdGljIGludCBhdGlfcmVtb3RlMl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkgICAgICAgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IGF0aV9yZW1vdGUyICphcjI7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0ID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKworCWlmIChhbHQtPmRlc2MuYkludGVyZmFjZU51bWJlcikKKwkJcmV0dXJuIDA7CisKKwlhcjIgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlkZXZfZGJnKCZhcjItPmludGZbMF0tPmRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJmF0aV9yZW1vdGUyX211dGV4KTsKKworCWlmIChhcjItPmZsYWdzICYgQVRJX1JFTU9URTJfT1BFTkVEKQorCQlhdGlfcmVtb3RlMl9raWxsX3VyYnMoYXIyKTsKKworCWFyMi0+ZmxhZ3MgfD0gQVRJX1JFTU9URTJfU1VTUEVOREVEOworCisJbXV0ZXhfdW5sb2NrKCZhdGlfcmVtb3RlMl9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGlfcmVtb3RlMl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgYXRpX3JlbW90ZTIgKmFyMjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWludCByID0gMDsKKworCWlmIChhbHQtPmRlc2MuYkludGVyZmFjZU51bWJlcikKKwkJcmV0dXJuIDA7CisKKwlhcjIgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlkZXZfZGJnKCZhcjItPmludGZbMF0tPmRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJmF0aV9yZW1vdGUyX211dGV4KTsKKworCWlmIChhcjItPmZsYWdzICYgQVRJX1JFTU9URTJfT1BFTkVEKQorCQlyID0gYXRpX3JlbW90ZTJfc3VibWl0X3VyYnMoYXIyKTsKKworCWlmICghcikKKwkJYXIyLT5mbGFncyAmPSB+QVRJX1JFTU9URTJfU1VTUEVOREVEOworCisJbXV0ZXhfdW5sb2NrKCZhdGlfcmVtb3RlMl9tdXRleCk7CisKKwlyZXR1cm4gcjsKK30KKwogc3RhdGljIGludCBfX2luaXQgYXRpX3JlbW90ZTJfaW5pdCh2b2lkKQogewogCWludCByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2NtMTA5LmMgYi9kcml2ZXJzL2lucHV0L21pc2MvY20xMDkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2UxNjBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2NtMTA5LmMKQEAgLTAsMCArMSw4ODIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBWb0lQIFVTQiBwaG9uZXMgd2l0aCBDTTEwOSBjaGlwc2V0cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDA4IEFsZnJlZCBFLiBIZWdnZXN0YWQgPGFlaEBkYi5vcmc+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKi8KKworLyoKKyAqICAgVGVzdGVkIGRldmljZXM6CisgKgktIEtvbXVuaWthdGUgS0lQMTAwMAorICoJLSBHZW5pdXMgRy10YWxrCisgKgktIEFsbGllZC1UZWxlc2lzIENvcmVnYSBVU0JQSDAxCisgKgktIC4uLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSB5ZWFsaW5rLmMgZHJpdmVyCisgKgorICogVGhhbmtzIHRvOgorICogICAtIEF1dGhvcnMgb2YgeWVhbGluay5jCisgKiAgIC0gVGhvbWFzIFJlaXRtYXlyCisgKiAgIC0gT2xpdmVyIE5ldWt1bSBmb3IgZ29vZCByZXZpZXcgY29tbWVudHMgYW5kIGNvZGUKKyAqICAgLSBTaGF1biBKYWNrbWFuIDxzamFja21hbkBnbWFpbC5jb20+IGZvciBHZW5pdXMgRy10YWxrIGtleW1hcAorICogICAtIERtaXRyeSBUb3Jva2hvdiBmb3IgdmFsdWFibGUgaW5wdXQgYW5kIHJldmlldworICoKKyAqIFRvZG86CisgKiAgIC0gUmVhZC93cml0ZSBFRVBST00KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjIwMDgwODA1IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICAiQWxmcmVkIEUuIEhlZ2dlc3RhZCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAgIkNNMTA5IHBob25lIGRyaXZlciIKKworc3RhdGljIGNoYXIgKnBob25lID0gImtpcDEwMDAiOworbW9kdWxlX3BhcmFtKHBob25lLCBjaGFycCwgU19JUlVTUik7CitNT0RVTEVfUEFSTV9ERVNDKHBob25lLCAiUGhvbmUgbmFtZSB7a2lwMTAwMCwgZ3RhbGssIHVzYnBoMDF9Iik7CisKK2VudW0geworCS8qIEhJRCBSZWdpc3RlcnMgKi8KKwlISURfSVIwID0gMHgwMCwgLyogUmVjb3JkL1BsYXliYWNrLW11dGUgYnV0dG9uLCBWb2x1bWUgdXAvZG93biAgKi8KKwlISURfSVIxID0gMHgwMSwgLyogR1BJLCBnZW5lcmljIHJlZ2lzdGVycyBvciBFRVBST01fREFUQTAgICAgICAgKi8KKwlISURfSVIyID0gMHgwMiwgLyogR2VuZXJpYyByZWdpc3RlcnMgb3IgRUVQUk9NX0RBVEExICAgICAgICAgICAgKi8KKwlISURfSVIzID0gMHgwMywgLyogR2VuZXJpYyByZWdpc3RlcnMgb3IgRUVQUk9NX0NUUkwgICAgICAgICAgICAgKi8KKwlISURfT1IwID0gMHgwMCwgLyogTWFwcGluZyBjb250cm9sLCBidXp6ZXIsIFNQRElGIChvZmZzZXQgMHgwNCkgKi8KKwlISURfT1IxID0gMHgwMSwgLyogR1BPIC0gR2VuZXJhbCBQdXJwb3NlIE91dHB1dCAgICAgICAgICAgICAgICAgKi8KKwlISURfT1IyID0gMHgwMiwgLyogU2V0IEdQSU8gdG8gaW5wdXQvb3V0cHV0IG1vZGUgICAgICAgICAgICAgICAgKi8KKwlISURfT1IzID0gMHgwMywgLyogU1BESUYgc3RhdHVzIGNoYW5uZWwgb3IgRUVQUk9NX0NUUkwgICAgICAgICAgKi8KKworCS8qIEhJRF9JUjAgKi8KKwlSRUNPUkRfTVVURSAgID0gMSA8PCAzLAorCVBMQVlCQUNLX01VVEUgPSAxIDw8IDIsCisJVk9MVU1FX0RPV04gICA9IDEgPDwgMSwKKwlWT0xVTUVfVVAgICAgID0gMSA8PCAwLAorCisJLyogSElEX09SMCAqLworCS8qIGJpdHMgNy02CisJICAgMDogSElEX09SMS0yIGFyZSB1c2VkIGZvciBHUE87IEhJRF9PUjAsIDMgYXJlIHVzZWQgZm9yIGJ1enplcgorCSAgICAgIGFuZCBTUERJRgorCSAgIDE6IEhJRF9PUjAtMyBhcmUgdXNlZCBhcyBnZW5lcmljIEhJRCByZWdpc3RlcnMKKwkgICAyOiBWYWx1ZXMgd3JpdHRlbiB0byBISURfT1IwLTMgYXJlIGFsc28gbWFwcGVkIHRvIE1DVV9DVFJMLAorCSAgICAgIEVFUFJPTV9EQVRBMC0xLCBFRVBST01fQ1RSTCAoc2VlIE5vdGUpCisJICAgMzogUmVzZXJ2ZWQKKwkgKi8KKwlISURfT1JfR1BPX0JVWl9TUERJRiAgID0gMCA8PCA2LAorCUhJRF9PUl9HRU5FUklDX0hJRF9SRUcgPSAxIDw8IDYsCisJSElEX09SX01BUF9NQ1VfRUVQUk9NICA9IDIgPDwgNiwKKworCUJVWlpFUl9PTiA9IDEgPDwgNSwKKworCS8qIHVwIHRvIDI1NiBub3JtYWwga2V5cywgdXAgdG8gMTYgc3BlY2lhbCBrZXlzICovCisJS0VZTUFQX1NJWkUgPSAyNTYgKyAxNiwKK307CisKKy8qIENNMTA5IHByb3RvY29sIHBhY2tldCAqLworc3RydWN0IGNtMTA5X2N0bF9wYWNrZXQgeworCXU4IGJ5dGVbNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSB7IFVTQl9QS1RfTEVOID0gc2l6ZW9mKHN0cnVjdCBjbTEwOV9jdGxfcGFja2V0KSB9OworCisvKiBDTTEwOSBkZXZpY2Ugc3RydWN0dXJlICovCitzdHJ1Y3QgY20xMDlfZGV2IHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwkgLyogaW5wdXQgZGV2aWNlICovCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7IC8qIHVzYiBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKworCS8qIGlycSBpbnB1dCBjaGFubmVsICovCisJc3RydWN0IGNtMTA5X2N0bF9wYWNrZXQgKmlycV9kYXRhOworCWRtYV9hZGRyX3QgaXJxX2RtYTsKKwlzdHJ1Y3QgdXJiICp1cmJfaXJxOworCisJLyogY29udHJvbCBvdXRwdXQgY2hhbm5lbCAqLworCXN0cnVjdCBjbTEwOV9jdGxfcGFja2V0ICpjdGxfZGF0YTsKKwlkbWFfYWRkcl90IGN0bF9kbWE7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RsX3JlcTsKKwlkbWFfYWRkcl90IGN0bF9yZXFfZG1hOworCXN0cnVjdCB1cmIgKnVyYl9jdGw7CisJLyoKKwkgKiBUaGUgMyBiaXRmaWVsZHMgYmVsb3cgYXJlIHByb3RlY3RlZCBieSBjdGxfc3VibWl0X2xvY2suCisJICogVGhleSBoYXZlIHRvIGJlIHNlcGFyYXRlIHNpbmNlIHRoZXkgYXJlIGFjY2Vzc2VkIGZyb20gSVJRCisJICogY29udGV4dC4KKwkgKi8KKwl1bnNpZ25lZCBpcnFfdXJiX3BlbmRpbmc6MTsJLyogaXJxX3VyYiBpcyBpbiBmbGlnaHQgKi8KKwl1bnNpZ25lZCBjdGxfdXJiX3BlbmRpbmc6MTsJLyogY3RsX3VyYiBpcyBpbiBmbGlnaHQgKi8KKwl1bnNpZ25lZCBidXp6ZXJfcGVuZGluZzoxOwkvKiBuZWVkIHRvIGlzc3VlIGJ1enogY29tbWFuZCAqLworCXNwaW5sb2NrX3QgY3RsX3N1Ym1pdF9sb2NrOworCisJdW5zaWduZWQgY2hhciBidXp6ZXJfc3RhdGU7CS8qIG9uL29mZiAqLworCisJLyogZmxhZ3MgKi8KKwl1bnNpZ25lZCBvcGVuOjE7CisJdW5zaWduZWQgcmVzZXR0aW5nOjE7CisJdW5zaWduZWQgc2h1dGRvd246MTsKKworCS8qIFRoaXMgbXV0ZXggcHJvdGVjdHMgd3JpdGVzIHRvIHRoZSBhYm92ZSBmbGFncyAqLworCXN0cnVjdCBtdXRleCBwbV9tdXRleDsKKworCXVuc2lnbmVkIHNob3J0IGtleW1hcFtLRVlNQVBfU0laRV07CisKKwljaGFyIHBoeXNbNjRdOwkJLyogcGh5c2ljYWwgZGV2aWNlIHBhdGggKi8KKwlpbnQga2V5X2NvZGU7CQkvKiBsYXN0IHJlcG9ydGVkIGtleSAqLworCWludCBrZXliaXQ7CQkvKiAwPW5ldyBzY2FuICAxLDIsNCw4PXNjYW4gY29sdW1ucyAgKi8KKwl1OCBncGk7CQkJLyogQ2FjaGVkIHZhbHVlIG9mIEdQSSAoaGlnaCBuaWJibGUpICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDTTEwOSBrZXkgaW50ZXJmYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBzcGVjaWFsX2tleW1hcChpbnQgY29kZSkKK3sKKwlpZiAoY29kZSA+IDB4ZmYpIHsKKwkJc3dpdGNoIChjb2RlIC0gMHhmZikgeworCQljYXNlIFJFQ09SRF9NVVRFOglyZXR1cm4gS0VZX01VVEU7CisJCWNhc2UgUExBWUJBQ0tfTVVURToJcmV0dXJuIEtFWV9NVVRFOworCQljYXNlIFZPTFVNRV9ET1dOOglyZXR1cm4gS0VZX1ZPTFVNRURPV047CisJCWNhc2UgVk9MVU1FX1VQOgkJcmV0dXJuIEtFWV9WT0xVTUVVUDsKKwkJfQorCX0KKwlyZXR1cm4gS0VZX1JFU0VSVkVEOworfQorCisvKiBNYXAgZGV2aWNlIGJ1dHRvbnMgdG8gaW50ZXJuYWwga2V5IGV2ZW50cy4KKyAqCisgKiBUaGUgInVwIiBhbmQgImRvd24iIGtleXMsIGFyZSBzeW1ib2xpc2VkIGJ5IGFycm93cyBvbiB0aGUgYnV0dG9uLgorICogVGhlICJwaWNrdXAiIGFuZCAiaGFuZ3VwIiBrZXlzIGFyZSBzeW1ib2xpc2VkIGJ5IGEgZ3JlZW4gYW5kIHJlZCBwaG9uZQorICogb24gdGhlIGJ1dHRvbi4KKworIEtvbXVuaWthdGUgS0lQMTAwMCBLZXlib2FyZCBNYXRyaXgKKworICAgICAtPiAtLSAxIC0tIDIgLS0gMyAgLS0+IEdQSSBwaW4gNCAoMHgxMCkKKyAgICAgIHwgICAgfCAgICB8ICAgIHwKKyAgICAgPC0gLS0gNCAtLSA1IC0tIDYgIC0tPiBHUEkgcGluIDUgKDB4MjApCisgICAgICB8ICAgIHwgICAgfCAgICB8CisgICAgIEVORCAtIDcgLS0gOCAtLSA5ICAtLT4gR1BJIHBpbiA2ICgweDQwKQorICAgICAgfCAgICB8ICAgIHwgICAgfAorICAgICBPSyAtLSAqIC0tIDAgLS0gIyAgLS0+IEdQSSBwaW4gNyAoMHg4MCkKKyAgICAgIHwgICAgfCAgICB8ICAgIHwKKworICAgICAvfFwgIC98XCAgL3xcICAvfFwKKyAgICAgIHwgICAgfCAgICB8ICAgIHwKK0dQTworcGluOiAgMyAgICAyICAgIDEgICAgMAorICAgICAweDggIDB4NCAgMHgyICAweDEKKworICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQga2V5bWFwX2tpcDEwMDAoaW50IHNjYW5jb2RlKQoreworCXN3aXRjaCAoc2NhbmNvZGUpIHsJCQkJLyogcGhvbmUga2V5OiAgICovCisJY2FzZSAweDgyOiByZXR1cm4gS0VZX05VTUVSSUNfMDsJCS8qICAgMCAgICAgICAgICAqLworCWNhc2UgMHgxNDogcmV0dXJuIEtFWV9OVU1FUklDXzE7CQkvKiAgIDEgICAgICAgICAgKi8KKwljYXNlIDB4MTI6IHJldHVybiBLRVlfTlVNRVJJQ18yOwkJLyogICAyICAgICAgICAgICovCisJY2FzZSAweDExOiByZXR1cm4gS0VZX05VTUVSSUNfMzsJCS8qICAgMyAgICAgICAgICAqLworCWNhc2UgMHgyNDogcmV0dXJuIEtFWV9OVU1FUklDXzQ7CQkvKiAgIDQgICAgICAgICAgKi8KKwljYXNlIDB4MjI6IHJldHVybiBLRVlfTlVNRVJJQ181OwkJLyogICA1ICAgICAgICAgICovCisJY2FzZSAweDIxOiByZXR1cm4gS0VZX05VTUVSSUNfNjsJCS8qICAgNiAgICAgICAgICAqLworCWNhc2UgMHg0NDogcmV0dXJuIEtFWV9OVU1FUklDXzc7CQkvKiAgIDcgICAgICAgICAgKi8KKwljYXNlIDB4NDI6IHJldHVybiBLRVlfTlVNRVJJQ184OwkJLyogICA4ICAgICAgICAgICovCisJY2FzZSAweDQxOiByZXR1cm4gS0VZX05VTUVSSUNfOTsJCS8qICAgOSAgICAgICAgICAqLworCWNhc2UgMHg4MTogcmV0dXJuIEtFWV9OVU1FUklDX1BPVU5EOwkJLyogICAjICAgICAgICAgICovCisJY2FzZSAweDg0OiByZXR1cm4gS0VZX05VTUVSSUNfU1RBUjsJCS8qICAgKiAgICAgICAgICAqLworCWNhc2UgMHg4ODogcmV0dXJuIEtFWV9FTlRFUjsJCQkvKiAgIHBpY2t1cCAgICAgKi8KKwljYXNlIDB4NDg6IHJldHVybiBLRVlfRVNDOwkJCS8qICAgaGFuZ3VwICAgICAqLworCWNhc2UgMHgyODogcmV0dXJuIEtFWV9MRUZUOwkJCS8qICAgSU4gICAgICAgICAqLworCWNhc2UgMHgxODogcmV0dXJuIEtFWV9SSUdIVDsJCQkvKiAgIE9VVCAgICAgICAgKi8KKwlkZWZhdWx0OiAgIHJldHVybiBzcGVjaWFsX2tleW1hcChzY2FuY29kZSk7CisJfQorfQorCisvKgorICBDb250cmlidXRlZCBieSBTaGF1biBKYWNrbWFuIDxzamFja21hbkBnbWFpbC5jb20+CisKKyAgR2VuaXVzIEctVGFsayBrZXlib2FyZCBtYXRyaXgKKyAgICAgMCAxIDIgMworICA0OiAwIDQgOCBUYWxrCisgIDU6IDEgNSA5IEVuZAorICA2OiAyIDYgIyBVcAorICA3OiAzIDcgKiBEb3duCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IGtleW1hcF9ndGFsayhpbnQgc2NhbmNvZGUpCit7CisJc3dpdGNoIChzY2FuY29kZSkgeworCWNhc2UgMHgxMTogcmV0dXJuIEtFWV9OVU1FUklDXzA7CisJY2FzZSAweDIxOiByZXR1cm4gS0VZX05VTUVSSUNfMTsKKwljYXNlIDB4NDE6IHJldHVybiBLRVlfTlVNRVJJQ18yOworCWNhc2UgMHg4MTogcmV0dXJuIEtFWV9OVU1FUklDXzM7CisJY2FzZSAweDEyOiByZXR1cm4gS0VZX05VTUVSSUNfNDsKKwljYXNlIDB4MjI6IHJldHVybiBLRVlfTlVNRVJJQ181OworCWNhc2UgMHg0MjogcmV0dXJuIEtFWV9OVU1FUklDXzY7CisJY2FzZSAweDgyOiByZXR1cm4gS0VZX05VTUVSSUNfNzsKKwljYXNlIDB4MTQ6IHJldHVybiBLRVlfTlVNRVJJQ184OworCWNhc2UgMHgyNDogcmV0dXJuIEtFWV9OVU1FUklDXzk7CisJY2FzZSAweDQ0OiByZXR1cm4gS0VZX05VTUVSSUNfUE9VTkQ7CS8qICMgKi8KKwljYXNlIDB4ODQ6IHJldHVybiBLRVlfTlVNRVJJQ19TVEFSOwkvKiAqICovCisJY2FzZSAweDE4OiByZXR1cm4gS0VZX0VOVEVSOwkJLyogVGFsayAoZ3JlZW4gaGFuZHNldCkgKi8KKwljYXNlIDB4Mjg6IHJldHVybiBLRVlfRVNDOwkJLyogRW5kIChyZWQgaGFuZHNldCkgKi8KKwljYXNlIDB4NDg6IHJldHVybiBLRVlfVVA7CQkvKiBNZW51IHVwIChyb2NrZXIgc3dpdGNoKSAqLworCWNhc2UgMHg4ODogcmV0dXJuIEtFWV9ET1dOOwkJLyogTWVudSBkb3duIChyb2NrZXIgc3dpdGNoKSAqLworCWRlZmF1bHQ6ICAgcmV0dXJuIHNwZWNpYWxfa2V5bWFwKHNjYW5jb2RlKTsKKwl9Cit9CisKKy8qCisgKiBLZXltYXAgZm9yIEFsbGllZC1UZWxlc2lzIENvcmVnYSBVU0JQSDAxCisgKiBodHRwOi8vd3d3LmFsbGllZHRlbGVzaXMtY29yZWdhLmNvbS8yLzEzNDQvMTQzNy8xMzYwL2NocHJkLmh0bWwKKyAqCisgKiBDb250cmlidXRlZCBieSBqdWx5QG5hdC5iZworICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQga2V5bWFwX3VzYnBoMDEoaW50IHNjYW5jb2RlKQoreworCXN3aXRjaCAoc2NhbmNvZGUpIHsKKwljYXNlIDB4MTE6IHJldHVybiBLRVlfTlVNRVJJQ18wOwkJLyogICAwICAgICAgICAgICovCisJY2FzZSAweDIxOiByZXR1cm4gS0VZX05VTUVSSUNfMTsJCS8qICAgMSAgICAgICAgICAqLworCWNhc2UgMHg0MTogcmV0dXJuIEtFWV9OVU1FUklDXzI7CQkvKiAgIDIgICAgICAgICAgKi8KKwljYXNlIDB4ODE6IHJldHVybiBLRVlfTlVNRVJJQ18zOwkJLyogICAzICAgICAgICAgICovCisJY2FzZSAweDEyOiByZXR1cm4gS0VZX05VTUVSSUNfNDsJCS8qICAgNCAgICAgICAgICAqLworCWNhc2UgMHgyMjogcmV0dXJuIEtFWV9OVU1FUklDXzU7CQkvKiAgIDUgICAgICAgICAgKi8KKwljYXNlIDB4NDI6IHJldHVybiBLRVlfTlVNRVJJQ182OwkJLyogICA2ICAgICAgICAgICovCisJY2FzZSAweDgyOiByZXR1cm4gS0VZX05VTUVSSUNfNzsJCS8qICAgNyAgICAgICAgICAqLworCWNhc2UgMHgxNDogcmV0dXJuIEtFWV9OVU1FUklDXzg7CQkvKiAgIDggICAgICAgICAgKi8KKwljYXNlIDB4MjQ6IHJldHVybiBLRVlfTlVNRVJJQ185OwkJLyogICA5ICAgICAgICAgICovCisJY2FzZSAweDQ0OiByZXR1cm4gS0VZX05VTUVSSUNfUE9VTkQ7CQkvKiAgICMgICAgICAgICAgKi8KKwljYXNlIDB4ODQ6IHJldHVybiBLRVlfTlVNRVJJQ19TVEFSOwkJLyogICAqICAgICAgICAgICovCisJY2FzZSAweDE4OiByZXR1cm4gS0VZX0VOVEVSOwkJCS8qICAgcGlja3VwICAgICAqLworCWNhc2UgMHgyODogcmV0dXJuIEtFWV9FU0M7CQkJLyogICBoYW5ndXAgICAgICovCisJY2FzZSAweDQ4OiByZXR1cm4gS0VZX0xFRlQ7CQkJLyogICBJTiAgICAgICAgICovCisJY2FzZSAweDg4OiByZXR1cm4gS0VZX1JJR0hUOwkJCS8qICAgT1VUICAgICAgICAqLworCWRlZmF1bHQ6ICAgcmV0dXJuIHNwZWNpYWxfa2V5bWFwKHNjYW5jb2RlKTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCAoKmtleW1hcCkoaW50KSA9IGtleW1hcF9raXAxMDAwOworCisvKgorICogQ29tcGxldGVzIGEgcmVxdWVzdCBieSBjb252ZXJ0aW5nIHRoZSBkYXRhIGludG8gZXZlbnRzIGZvciB0aGUKKyAqIGlucHV0IHN1YnN5c3RlbS4KKyAqLworc3RhdGljIHZvaWQgcmVwb3J0X2tleShzdHJ1Y3QgY20xMDlfZGV2ICpkZXYsIGludCBrZXkpCit7CisJc3RydWN0IGlucHV0X2RldiAqaWRldiA9IGRldi0+aWRldjsKKworCWlmIChkZXYtPmtleV9jb2RlID49IDApIHsKKwkJLyogb2xkIGtleSB1cCAqLworCQlpbnB1dF9yZXBvcnRfa2V5KGlkZXYsIGRldi0+a2V5X2NvZGUsIDApOworCX0KKworCWRldi0+a2V5X2NvZGUgPSBrZXk7CisJaWYgKGtleSA+PSAwKSB7CisJCS8qIG5ldyB2YWxpZCBrZXkgKi8KKwkJaW5wdXRfcmVwb3J0X2tleShpZGV2LCBrZXksIDEpOworCX0KKworCWlucHV0X3N5bmMoaWRldik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENNMTA5IHVzYiBjb21tdW5pY2F0aW9uIGludGVyZmFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBjbTEwOV9zdWJtaXRfYnV6el90b2dnbGUoc3RydWN0IGNtMTA5X2RldiAqZGV2KQoreworCWludCBlcnJvcjsKKworCWlmIChkZXYtPmJ1enplcl9zdGF0ZSkKKwkJZGV2LT5jdGxfZGF0YS0+Ynl0ZVtISURfT1IwXSB8PSBCVVpaRVJfT047CisJZWxzZQorCQlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjBdICY9IH5CVVpaRVJfT047CisKKwllcnJvciA9IHVzYl9zdWJtaXRfdXJiKGRldi0+dXJiX2N0bCwgR0ZQX0FUT01JQyk7CisJaWYgKGVycm9yKQorCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiAodXJiX2N0bCkgZmFpbGVkICVkIiwgX19mdW5jX18sIGVycm9yKTsKK30KKworLyoKKyAqIElSUSBoYW5kbGVyCisgKi8KK3N0YXRpYyB2b2lkIGNtMTA5X3VyYl9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBjbTEwOV9kZXYgKmRldiA9IHVyYi0+Y29udGV4dDsKKwljb25zdCBpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJaW50IGVycm9yOworCisJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIiMjIyBVUkIgSVJROiBbMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4XSBrZXliaXQ9MHglMDJ4XG4iLAorCSAgICAgZGV2LT5pcnFfZGF0YS0+Ynl0ZVswXSwKKwkgICAgIGRldi0+aXJxX2RhdGEtPmJ5dGVbMV0sCisJICAgICBkZXYtPmlycV9kYXRhLT5ieXRlWzJdLAorCSAgICAgZGV2LT5pcnFfZGF0YS0+Ynl0ZVszXSwKKwkgICAgIGRldi0+a2V5Yml0KTsKKworCWlmIChzdGF0dXMpIHsKKwkJaWYgKHN0YXR1cyA9PSAtRVNIVVRET1dOKQorCQkJcmV0dXJuOworCQllcnIoIiVzOiB1cmIgc3RhdHVzICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CisJfQorCisJLyogU3BlY2lhbCBrZXlzICovCisJaWYgKGRldi0+aXJxX2RhdGEtPmJ5dGVbSElEX0lSMF0gJiAweDBmKSB7CisJCWNvbnN0IGludCBjb2RlID0gKGRldi0+aXJxX2RhdGEtPmJ5dGVbSElEX0lSMF0gJiAweDBmKTsKKwkJcmVwb3J0X2tleShkZXYsIGRldi0+a2V5bWFwWzB4ZmYgKyBjb2RlXSk7CisJfQorCisJLyogU2NhbiBrZXkgY29sdW1uICovCisJaWYgKGRldi0+a2V5Yml0ID09IDB4ZikgeworCisJCS8qIEFueSBjaGFuZ2VzID8gKi8KKwkJaWYgKChkZXYtPmdwaSAmIDB4ZjApID09IChkZXYtPmlycV9kYXRhLT5ieXRlW0hJRF9JUjFdICYgMHhmMCkpCisJCQlnb3RvIG91dDsKKworCQlkZXYtPmdwaSA9IGRldi0+aXJxX2RhdGEtPmJ5dGVbSElEX0lSMV0gJiAweGYwOworCQlkZXYtPmtleWJpdCA9IDB4MTsKKwl9IGVsc2UgeworCQlyZXBvcnRfa2V5KGRldiwgZGV2LT5rZXltYXBbZGV2LT5pcnFfZGF0YS0+Ynl0ZVtISURfSVIxXV0pOworCisJCWRldi0+a2V5Yml0IDw8PSAxOworCQlpZiAoZGV2LT5rZXliaXQgPiAweDgpCisJCQlkZXYtPmtleWJpdCA9IDB4ZjsKKwl9CisKKyBvdXQ6CisKKwlzcGluX2xvY2soJmRldi0+Y3RsX3N1Ym1pdF9sb2NrKTsKKworCWRldi0+aXJxX3VyYl9wZW5kaW5nID0gMDsKKworCWlmIChsaWtlbHkoIWRldi0+c2h1dGRvd24pKSB7CisKKwkJaWYgKGRldi0+YnV6emVyX3N0YXRlKQorCQkJZGV2LT5jdGxfZGF0YS0+Ynl0ZVtISURfT1IwXSB8PSBCVVpaRVJfT047CisJCWVsc2UKKwkJCWRldi0+Y3RsX2RhdGEtPmJ5dGVbSElEX09SMF0gJj0gfkJVWlpFUl9PTjsKKworCQlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjFdID0gZGV2LT5rZXliaXQ7CisJCWRldi0+Y3RsX2RhdGEtPmJ5dGVbSElEX09SMl0gPSBkZXYtPmtleWJpdDsKKworCQlkZXYtPmJ1enplcl9wZW5kaW5nID0gMDsKKwkJZGV2LT5jdGxfdXJiX3BlbmRpbmcgPSAxOworCisJCWVycm9yID0gdXNiX3N1Ym1pdF91cmIoZGV2LT51cmJfY3RsLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGVycm9yKQorCQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgKHVyYl9jdGwpIGZhaWxlZCAlZCIsCisJCQkJX19mdW5jX18sIGVycm9yKTsKKwl9CisKKwlzcGluX3VubG9jaygmZGV2LT5jdGxfc3VibWl0X2xvY2spOworfQorCitzdGF0aWMgdm9pZCBjbTEwOV91cmJfY3RsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgY20xMDlfZGV2ICpkZXYgPSB1cmItPmNvbnRleHQ7CisJY29uc3QgaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCWludCBlcnJvcjsKKworCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICIjIyMgVVJCIENUTDogWzB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeF1cbiIsCisJICAgICBkZXYtPmN0bF9kYXRhLT5ieXRlWzBdLAorCSAgICAgZGV2LT5jdGxfZGF0YS0+Ynl0ZVsxXSwKKwkgICAgIGRldi0+Y3RsX2RhdGEtPmJ5dGVbMl0sCisJICAgICBkZXYtPmN0bF9kYXRhLT5ieXRlWzNdKTsKKworCWlmIChzdGF0dXMpCisJCWVycigiJXM6IHVyYiBzdGF0dXMgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKKworCXNwaW5fbG9jaygmZGV2LT5jdGxfc3VibWl0X2xvY2spOworCisJZGV2LT5jdGxfdXJiX3BlbmRpbmcgPSAwOworCisJaWYgKGxpa2VseSghZGV2LT5zaHV0ZG93bikpIHsKKworCQlpZiAoZGV2LT5idXp6ZXJfcGVuZGluZykgeworCQkJZGV2LT5idXp6ZXJfcGVuZGluZyA9IDA7CisJCQlkZXYtPmN0bF91cmJfcGVuZGluZyA9IDE7CisJCQljbTEwOV9zdWJtaXRfYnV6el90b2dnbGUoZGV2KTsKKwkJfSBlbHNlIGlmIChsaWtlbHkoIWRldi0+aXJxX3VyYl9wZW5kaW5nKSkgeworCQkJLyogYXNrIGZvciBrZXkgZGF0YSAqLworCQkJZGV2LT5pcnFfdXJiX3BlbmRpbmcgPSAxOworCQkJZXJyb3IgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYl9pcnEsIEdGUF9BVE9NSUMpOworCQkJaWYgKGVycm9yKQorCQkJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiICh1cmJfaXJxKSBmYWlsZWQgJWQiLAorCQkJCQlfX2Z1bmNfXywgZXJyb3IpOworCQl9CisJfQorCisJc3Bpbl91bmxvY2soJmRldi0+Y3RsX3N1Ym1pdF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgY20xMDlfdG9nZ2xlX2J1enplcl9hc3luYyhzdHJ1Y3QgY20xMDlfZGV2ICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmN0bF9zdWJtaXRfbG9jaywgZmxhZ3MpOworCisJaWYgKGRldi0+Y3RsX3VyYl9wZW5kaW5nKSB7CisJCS8qIFVSQiBjb21wbGV0aW9uIHdpbGwgcmVzdWJtaXQgKi8KKwkJZGV2LT5idXp6ZXJfcGVuZGluZyA9IDE7CisJfSBlbHNlIHsKKwkJZGV2LT5jdGxfdXJiX3BlbmRpbmcgPSAxOworCQljbTEwOV9zdWJtaXRfYnV6el90b2dnbGUoZGV2KTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmN0bF9zdWJtaXRfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBjbTEwOV90b2dnbGVfYnV6emVyX3N5bmMoc3RydWN0IGNtMTA5X2RldiAqZGV2LCBpbnQgb24pCit7CisJaW50IGVycm9yOworCisJaWYgKG9uKQorCQlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjBdIHw9IEJVWlpFUl9PTjsKKwllbHNlCisJCWRldi0+Y3RsX2RhdGEtPmJ5dGVbSElEX09SMF0gJj0gfkJVWlpFUl9PTjsKKworCWVycm9yID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCQl1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCQlkZXYtPmN0bF9yZXEtPmJSZXF1ZXN0LAorCQkJCWRldi0+Y3RsX3JlcS0+YlJlcXVlc3RUeXBlLAorCQkJCWxlMTZfdG9fY3B1KGRldi0+Y3RsX3JlcS0+d1ZhbHVlKSwKKwkJCQlsZTE2X3RvX2NwdShkZXYtPmN0bF9yZXEtPndJbmRleCksCisJCQkJZGV2LT5jdGxfZGF0YSwKKwkJCQlVU0JfUEtUX0xFTiwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCWlmIChlcnJvciAmJiBlcnJvciAhPSBFSU5UUikKKwkJZXJyKCIlczogdXNiX2NvbnRyb2xfbXNnKCkgZmFpbGVkICVkIiwgX19mdW5jX18sIGVycm9yKTsKK30KKworc3RhdGljIHZvaWQgY20xMDlfc3RvcF90cmFmZmljKHN0cnVjdCBjbTEwOV9kZXYgKmRldikKK3sKKwlkZXYtPnNodXRkb3duID0gMTsKKwkvKgorCSAqIE1ha2Ugc3VyZSBvdGhlciBDUFVzIHNlZSB0aGlzCisJICovCisJc21wX3dtYigpOworCisJdXNiX2tpbGxfdXJiKGRldi0+dXJiX2N0bCk7CisJdXNiX2tpbGxfdXJiKGRldi0+dXJiX2lycSk7CisKKwljbTEwOV90b2dnbGVfYnV6emVyX3N5bmMoZGV2LCAwKTsKKworCWRldi0+c2h1dGRvd24gPSAwOworCXNtcF93bWIoKTsKK30KKworc3RhdGljIHZvaWQgY20xMDlfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgY20xMDlfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+b3BlbikgeworCQkvKgorCQkgKiBSZXN0b3JlIGJ1enplciBzdGF0ZS4KKwkJICogVGhpcyB3aWxsIGFsc28ga2ljayByZWd1bGFyIFVSQiBzdWJtaXNzaW9uCisJCSAqLworCQljbTEwOV90b2dnbGVfYnV6emVyX2FzeW5jKGRldik7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpbnB1dCBldmVudCBpbnRlcmZhY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBjbTEwOV9pbnB1dF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCit7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaWRldik7CisJaW50IGVycm9yOworCisJZXJyb3IgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGV2LT5pbnRmKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWVycigiJXMgLSBjYW5ub3QgYXV0b3Jlc3VtZSwgcmVzdWx0ICVkIiwKKwkJICAgIF9fZnVuY19fLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPnBtX211dGV4KTsKKworCWRldi0+YnV6emVyX3N0YXRlID0gMDsKKwlkZXYtPmtleV9jb2RlID0gLTE7CS8qIG5vIGtleXMgcHJlc3NlZCAqLworCWRldi0+a2V5Yml0ID0gMHhmOworCisJLyogaXNzdWUgSU5JVCAqLworCWRldi0+Y3RsX2RhdGEtPmJ5dGVbSElEX09SMF0gPSBISURfT1JfR1BPX0JVWl9TUERJRjsKKwlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjFdID0gZGV2LT5rZXliaXQ7CisJZGV2LT5jdGxfZGF0YS0+Ynl0ZVtISURfT1IyXSA9IGRldi0+a2V5Yml0OworCWRldi0+Y3RsX2RhdGEtPmJ5dGVbSElEX09SM10gPSAweDAwOworCisJZXJyb3IgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYl9jdGwsIEdGUF9LRVJORUwpOworCWlmIChlcnJvcikKKwkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgKHVyYl9jdGwpIGZhaWxlZCAlZCIsIF9fZnVuY19fLCBlcnJvcik7CisJZWxzZQorCQlkZXYtPm9wZW4gPSAxOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnBtX211dGV4KTsKKworCWlmIChlcnJvcikKKwkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50Zik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGNtMTA5X2lucHV0X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCit7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaWRldik7CisKKwltdXRleF9sb2NrKCZkZXYtPnBtX211dGV4KTsKKworCS8qCisJICogT25jZSB3ZSBhcmUgaGVyZSBldmVudCBkZWxpdmVyeSBpcyBzdG9wcGVkIHNvIHdlCisJICogZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBzb21lb25lIHN0YXJ0aW5nIGJ1enplcgorCSAqIGFnYWluCisJICovCisJY20xMDlfc3RvcF90cmFmZmljKGRldik7CisJZGV2LT5vcGVuID0gMDsKKworCW11dGV4X3VubG9jaygmZGV2LT5wbV9tdXRleCk7CisKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGV2LT5pbnRmKTsKK30KKworc3RhdGljIGludCBjbTEwOV9pbnB1dF9ldihzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwKKwkJCSAgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgY20xMDlfZGV2ICpkZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpZGV2KTsKKworCWRldl9kYmcoJmRldi0+dWRldi0+ZGV2LAorCQkiaW5wdXRfZXY6IHR5cGU9JXUgY29kZT0ldSB2YWx1ZT0lZFxuIiwgdHlwZSwgY29kZSwgdmFsdWUpOworCisJaWYgKHR5cGUgIT0gRVZfU05EKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY29kZSkgeworCWNhc2UgU05EX1RPTkU6CisJY2FzZSBTTkRfQkVMTDoKKwkJZGV2LT5idXp6ZXJfc3RhdGUgPSAhIXZhbHVlOworCQlpZiAoIWRldi0+cmVzZXR0aW5nKQorCQkJY20xMDlfdG9nZ2xlX2J1enplcl9hc3luYyhkZXYpOworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMaW51eCBpbnRlcmZhY2UgYW5kIHVzYiBpbml0aWFsaXNhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgZHJpdmVyX2luZm8geworCWNoYXIgKm5hbWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGluZm9fY20xMDkgPSB7CisJLm5hbWUgPSAiQ00xMDkgVVNCIGRyaXZlciIsCit9OworCitlbnVtIHsKKwlWRU5ET1JfSUQgICAgICAgID0gMHgwZDhjLCAvKiBDLU1lZGlhIEVsZWN0cm9uaWNzICovCisJUFJPRFVDVF9JRF9DTTEwOSA9IDB4MDAwZSwgLyogQ00xMDkgZGVmaW5lcyByYW5nZSAweDAwMDggLSAweDAwMGYgKi8KK307CisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjbTEwOV91c2JfdGFibGVbXSA9IHsKKwl7CisJCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJCQlVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAorCQkuaWRWZW5kb3IgPSBWRU5ET1JfSUQsCisJCS5pZFByb2R1Y3QgPSBQUk9EVUNUX0lEX0NNMTA5LAorCQkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0hJRCwKKwkJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IDAsCisJCS5iSW50ZXJmYWNlUHJvdG9jb2wgPSAwLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpICZpbmZvX2NtMTA5CisJfSwKKwkvKiB5b3UgY2FuIGFkZCBtb3JlIGRldmljZXMgaGVyZSB3aXRoIHByb2R1Y3QgSUQgMHgwMDA4IC0gMHgwMDBmICovCisJeyB9Cit9OworCitzdGF0aWMgdm9pZCBjbTEwOV91c2JfY2xlYW51cChzdHJ1Y3QgY20xMDlfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+Y3RsX3JlcSkKKwkJdXNiX2J1ZmZlcl9mcmVlKGRldi0+dWRldiwgc2l6ZW9mKCooZGV2LT5jdGxfcmVxKSksCisJCQkJZGV2LT5jdGxfcmVxLCBkZXYtPmN0bF9yZXFfZG1hKTsKKwlpZiAoZGV2LT5jdGxfZGF0YSkKKwkJdXNiX2J1ZmZlcl9mcmVlKGRldi0+dWRldiwgVVNCX1BLVF9MRU4sCisJCQkJZGV2LT5jdGxfZGF0YSwgZGV2LT5jdGxfZG1hKTsKKwlpZiAoZGV2LT5pcnFfZGF0YSkKKwkJdXNiX2J1ZmZlcl9mcmVlKGRldi0+dWRldiwgVVNCX1BLVF9MRU4sCisJCQkJZGV2LT5pcnFfZGF0YSwgZGV2LT5pcnFfZG1hKTsKKworCXVzYl9mcmVlX3VyYihkZXYtPnVyYl9pcnEpOwkvKiBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBpbiBjb3JlL3VyYiAqLworCXVzYl9mcmVlX3VyYihkZXYtPnVyYl9jdGwpOwkvKiBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBpbiBjb3JlL3VyYiAqLworCWtmcmVlKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGNtMTA5X3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+aWRldik7CisJY20xMDlfdXNiX2NsZWFudXAoZGV2KTsKK30KKworc3RhdGljIGludCBjbTEwOV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBkcml2ZXJfaW5mbyAqbmZvID0gKHN0cnVjdCBkcml2ZXJfaW5mbyAqKWlkLT5kcml2ZXJfaW5mbzsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgY20xMDlfZGV2ICpkZXY7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gTlVMTDsKKwlpbnQgcmV0LCBwaXBlLCBpOworCWludCBlcnJvciA9IC1FTk9NRU07CisKKwlpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisKKwlpZiAoIXVzYl9lbmRwb2ludF9pc19pbnRfaW4oZW5kcG9pbnQpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5jdGxfc3VibWl0X2xvY2spOworCW11dGV4X2luaXQoJmRldi0+cG1fbXV0ZXgpOworCisJZGV2LT51ZGV2ID0gdWRldjsKKwlkZXYtPmludGYgPSBpbnRmOworCisJZGV2LT5pZGV2ID0gaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpbnB1dF9kZXYpCisJCWdvdG8gZXJyX291dDsKKworCS8qIGFsbG9jYXRlIHVzYiBidWZmZXJzICovCisJZGV2LT5pcnFfZGF0YSA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwgVVNCX1BLVF9MRU4sCisJCQkJCSBHRlBfS0VSTkVMLCAmZGV2LT5pcnFfZG1hKTsKKwlpZiAoIWRldi0+aXJxX2RhdGEpCisJCWdvdG8gZXJyX291dDsKKworCWRldi0+Y3RsX2RhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIFVTQl9QS1RfTEVOLAorCQkJCQkgR0ZQX0tFUk5FTCwgJmRldi0+Y3RsX2RtYSk7CisJaWYgKCFkZXYtPmN0bF9kYXRhKQorCQlnb3RvIGVycl9vdXQ7CisKKwlkZXYtPmN0bF9yZXEgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIHNpemVvZigqKGRldi0+Y3RsX3JlcSkpLAorCQkJCQlHRlBfS0VSTkVMLCAmZGV2LT5jdGxfcmVxX2RtYSk7CisJaWYgKCFkZXYtPmN0bF9yZXEpCisJCWdvdG8gZXJyX291dDsKKworCS8qIGFsbG9jYXRlIHVyYiBzdHJ1Y3R1cmVzICovCisJZGV2LT51cmJfaXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+dXJiX2lycSkKKwkJZ290byBlcnJfb3V0OworCisJZGV2LT51cmJfY3RsID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+dXJiX2N0bCkKKwkJZ290byBlcnJfb3V0OworCisJLyogZ2V0IGEgaGFuZGxlIHRvIHRoZSBpbnRlcnJ1cHQgZGF0YSBwaXBlICovCisJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKHVkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKKwlyZXQgPSB1c2JfbWF4cGFja2V0KHVkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKKwlpZiAocmV0ICE9IFVTQl9QS1RfTEVOKQorCQllcnIoImludmFsaWQgcGF5bG9hZCBzaXplICVkLCBleHBlY3RlZCAlZCIsIHJldCwgVVNCX1BLVF9MRU4pOworCisJLyogaW5pdGlhbGlzZSBpcnEgdXJiICovCisJdXNiX2ZpbGxfaW50X3VyYihkZXYtPnVyYl9pcnEsIHVkZXYsIHBpcGUsIGRldi0+aXJxX2RhdGEsCisJCQkgVVNCX1BLVF9MRU4sCisJCQkgY20xMDlfdXJiX2lycV9jYWxsYmFjaywgZGV2LCBlbmRwb2ludC0+YkludGVydmFsKTsKKwlkZXYtPnVyYl9pcnEtPnRyYW5zZmVyX2RtYSA9IGRldi0+aXJxX2RtYTsKKwlkZXYtPnVyYl9pcnEtPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCWRldi0+dXJiX2lycS0+ZGV2ID0gdWRldjsKKworCS8qIGluaXRpYWxpc2UgY3RsIHVyYiAqLworCWRldi0+Y3RsX3JlcS0+YlJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwKKwkJCQkJVVNCX0RJUl9PVVQ7CisJZGV2LT5jdGxfcmVxLT5iUmVxdWVzdCA9IFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT047CisJZGV2LT5jdGxfcmVxLT53VmFsdWUgPSBjcHVfdG9fbGUxNigweDIwMCk7CisJZGV2LT5jdGxfcmVxLT53SW5kZXggPSBjcHVfdG9fbGUxNihpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisJZGV2LT5jdGxfcmVxLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoVVNCX1BLVF9MRU4pOworCisJdXNiX2ZpbGxfY29udHJvbF91cmIoZGV2LT51cmJfY3RsLCB1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICh2b2lkICopZGV2LT5jdGxfcmVxLCBkZXYtPmN0bF9kYXRhLCBVU0JfUEtUX0xFTiwKKwkJCSAgICAgY20xMDlfdXJiX2N0bF9jYWxsYmFjaywgZGV2KTsKKwlkZXYtPnVyYl9jdGwtPnNldHVwX2RtYSA9IGRldi0+Y3RsX3JlcV9kbWE7CisJZGV2LT51cmJfY3RsLT50cmFuc2Zlcl9kbWEgPSBkZXYtPmN0bF9kbWE7CisJZGV2LT51cmJfY3RsLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fU0VUVVBfRE1BX01BUCB8CisJCQkJCVVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCWRldi0+dXJiX2N0bC0+ZGV2ID0gdWRldjsKKworCS8qIGZpbmQgb3V0IHRoZSBwaHlzaWNhbCBidXMgbG9jYXRpb24gKi8KKwl1c2JfbWFrZV9wYXRoKHVkZXYsIGRldi0+cGh5cywgc2l6ZW9mKGRldi0+cGh5cykpOworCXN0cmxjYXQoZGV2LT5waHlzLCAiL2lucHV0MCIsIHNpemVvZihkZXYtPnBoeXMpKTsKKworCS8qIHJlZ2lzdGVyIHNldHRpbmdzIGZvciB0aGUgaW5wdXQgZGV2aWNlICovCisJaW5wdXRfZGV2LT5uYW1lID0gbmZvLT5uYW1lOworCWlucHV0X2Rldi0+cGh5cyA9IGRldi0+cGh5czsKKwl1c2JfdG9faW5wdXRfaWQodWRldiwgJmlucHV0X2Rldi0+aWQpOworCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZpbnRmLT5kZXY7CisKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGRldik7CisJaW5wdXRfZGV2LT5vcGVuID0gY20xMDlfaW5wdXRfb3BlbjsKKwlpbnB1dF9kZXYtPmNsb3NlID0gY20xMDlfaW5wdXRfY2xvc2U7CisJaW5wdXRfZGV2LT5ldmVudCA9IGNtMTA5X2lucHV0X2V2OworCisJaW5wdXRfZGV2LT5rZXljb2RlID0gZGV2LT5rZXltYXA7CisJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBjaGFyKTsKKwlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKGRldi0+a2V5bWFwKTsKKworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfU05EKTsKKwlpbnB1dF9kZXYtPnNuZGJpdFswXSA9IEJJVF9NQVNLKFNORF9CRUxMKSB8IEJJVF9NQVNLKFNORF9UT05FKTsKKworCS8qIHJlZ2lzdGVyIGF2YWlsYWJsZSBrZXkgZXZlbnRzICovCisJZm9yIChpID0gMDsgaSA8IEtFWU1BUF9TSVpFOyBpKyspIHsKKwkJdW5zaWduZWQgc2hvcnQgayA9IGtleW1hcChpKTsKKwkJZGV2LT5rZXltYXBbaV0gPSBrOworCQlfX3NldF9iaXQoaywgaW5wdXRfZGV2LT5rZXliaXQpOworCX0KKwlfX2NsZWFyX2JpdChLRVlfUkVTRVJWRUQsIGlucHV0X2Rldi0+a2V5Yml0KTsKKworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGRldi0+aWRldik7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9vdXQ7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRldik7CisKKwlyZXR1cm4gMDsKKworIGVycl9vdXQ6CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwljbTEwOV91c2JfY2xlYW51cChkZXYpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBjbTEwOV91c2Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJjbTEwOTogdXNiX3N1c3BlbmQgKGV2ZW50PSVkKVxuIiwgbWVzc2FnZS5ldmVudCk7CisKKwltdXRleF9sb2NrKCZkZXYtPnBtX211dGV4KTsKKwljbTEwOV9zdG9wX3RyYWZmaWMoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+cG1fbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY20xMDlfdXNiX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgY20xMDlfZGV2ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJZGV2X2luZm8oJmludGYtPmRldiwgImNtMTA5OiB1c2JfcmVzdW1lXG4iKTsKKworCW11dGV4X2xvY2soJmRldi0+cG1fbXV0ZXgpOworCWNtMTA5X3Jlc3RvcmVfc3RhdGUoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+cG1fbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY20xMDlfdXNiX3ByZV9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgY20xMDlfZGV2ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJbXV0ZXhfbG9jaygmZGV2LT5wbV9tdXRleCk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBpbnB1dCBldmVudHMgZG9uJ3QgdHJ5IHRvIHRvZ2dsZSBidXp6ZXIKKwkgKiB3aGlsZSB3ZSBhcmUgcmVzZXR0aW5nCisJICovCisJZGV2LT5yZXNldHRpbmcgPSAxOworCXNtcF93bWIoKTsKKworCWNtMTA5X3N0b3BfdHJhZmZpYyhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY20xMDlfdXNiX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRldi0+cmVzZXR0aW5nID0gMDsKKwlzbXBfd21iKCk7CisKKwljbTEwOV9yZXN0b3JlX3N0YXRlKGRldik7CisKKwltdXRleF91bmxvY2soJmRldi0+cG1fbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjbTEwOV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImNtMTA5IiwKKwkucHJvYmUJCT0gY20xMDlfdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gY20xMDlfdXNiX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQJPSBjbTEwOV91c2Jfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGNtMTA5X3VzYl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZQk9IGNtMTA5X3VzYl9yZXN1bWUsCisJLnByZV9yZXNldAk9IGNtMTA5X3VzYl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQJPSBjbTEwOV91c2JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUJPSBjbTEwOV91c2JfdGFibGUsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNtMTA5X3NlbGVjdF9rZXltYXAodm9pZCkKK3sKKwkvKiBMb2FkIHRoZSBwaG9uZSBrZXltYXAgKi8KKwlpZiAoIXN0cmNhc2VjbXAocGhvbmUsICJraXAxMDAwIikpIHsKKwkJa2V5bWFwID0ga2V5bWFwX2tpcDEwMDA7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIgorCQkJIktleW1hcCBmb3IgS29tdW5pa2F0ZSBLSVAxMDAwIHBob25lIGxvYWRlZFxuIik7CisJfSBlbHNlIGlmICghc3RyY2FzZWNtcChwaG9uZSwgImd0YWxrIikpIHsKKwkJa2V5bWFwID0ga2V5bWFwX2d0YWxrOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIKKwkJCSJLZXltYXAgZm9yIEdlbml1cyBHLXRhbGsgcGhvbmUgbG9hZGVkXG4iKTsKKwl9IGVsc2UgaWYgKCFzdHJjYXNlY21wKHBob25lLCAidXNicGgwMSIpKSB7CisJCWtleW1hcCA9IGtleW1hcF91c2JwaDAxOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIKKwkJCSJLZXltYXAgZm9yIEFsbGllZC1UZWxlc2lzIENvcmVnYSBVU0JQSDAxIHBob25lIGxvYWRlZFxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6ICIKKwkJCSJVbnN1cHBvcnRlZCBwaG9uZTogJXNcbiIsIHBob25lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNtMTA5X2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gY20xMDlfc2VsZWN0X2tleW1hcCgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSB1c2JfcmVnaXN0ZXIoJmNtMTA5X2RyaXZlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIgorCQlEUklWRVJfREVTQyAiOiAiIERSSVZFUl9WRVJTSU9OICIgKEMpICIgRFJJVkVSX0FVVEhPUiAiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY20xMDlfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZjbTEwOV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjbTEwOV9pbml0KTsKK21vZHVsZV9leGl0KGNtMTA5X2V4aXQpOworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY20xMDlfdXNiX3RhYmxlKTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2hwX3NkY19ydGMuYwppbmRleCBkYWE5ZDQyLi44MmVjNmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9ocF9zZGNfcnRjLmMKQEAgLTQ1OCwzNSArNDU4LDM1IEBACiAJCXAgKz0gc3ByaW50ZihwLCAiaTgwNDIgcnRjXHQ6IFJFQUQgRkFJTEVEIVxuIik7CiAJfSBlbHNlIHsKIAkJcCArPSBzcHJpbnRmKHAsICJpODA0MiBydGNcdDogJWxkLiUwMmQgc2Vjb25kc1xuIiwgCi0JCQkgICAgIHR2LnR2X3NlYywgdHYudHZfdXNlYy8xMDAwKTsKKwkJCSAgICAgdHYudHZfc2VjLCAoaW50KXR2LnR2X3VzZWMvMTAwMCk7CiAJfQogCiAJaWYgKGhwX3NkY19ydGNfcmVhZF9maHMoJnR2KSkgewogCQlwICs9IHNwcmludGYocCwgImhhbmRzaGFrZVx0OiBSRUFEIEZBSUxFRCFcbiIpOwogCX0gZWxzZSB7CiAgICAgICAgIAlwICs9IHNwcmludGYocCwgImhhbmRzaGFrZVx0OiAlbGQuJTAyZCBzZWNvbmRzXG4iLCAKLQkJCSAgICAgdHYudHZfc2VjLCB0di50dl91c2VjLzEwMDApOworCQkJICAgICB0di50dl9zZWMsIChpbnQpdHYudHZfdXNlYy8xMDAwKTsKIAl9CiAKIAlpZiAoaHBfc2RjX3J0Y19yZWFkX210KCZ0dikpIHsKIAkJcCArPSBzcHJpbnRmKHAsICJhbGFybVx0XHQ6IFJFQUQgRkFJTEVEIVxuIik7CiAJfSBlbHNlIHsKIAkJcCArPSBzcHJpbnRmKHAsICJhbGFybVx0XHQ6ICVsZC4lMDJkIHNlY29uZHNcbiIsIAotCQkJICAgICB0di50dl9zZWMsIHR2LnR2X3VzZWMvMTAwMCk7CisJCQkgICAgIHR2LnR2X3NlYywgKGludCl0di50dl91c2VjLzEwMDApOwogCX0KIAogCWlmIChocF9zZGNfcnRjX3JlYWRfZHQoJnR2KSkgewogCQlwICs9IHNwcmludGYocCwgImRlbGF5XHRcdDogUkVBRCBGQUlMRUQhXG4iKTsKIAl9IGVsc2UgewogCQlwICs9IHNwcmludGYocCwgImRlbGF5XHRcdDogJWxkLiUwMmQgc2Vjb25kc1xuIiwgCi0JCQkgICAgIHR2LnR2X3NlYywgdHYudHZfdXNlYy8xMDAwKTsKKwkJCSAgICAgdHYudHZfc2VjLCAoaW50KXR2LnR2X3VzZWMvMTAwMCk7CiAJfQogCiAJaWYgKGhwX3NkY19ydGNfcmVhZF9jdCgmdHYpKSB7CiAJCXAgKz0gc3ByaW50ZihwLCAicGVyaW9kaWNcdDogUkVBRCBGQUlMRUQhXG4iKTsKIAl9IGVsc2UgewogCQlwICs9IHNwcmludGYocCwgInBlcmlvZGljXHQ6ICVsZC4lMDJkIHNlY29uZHNcbiIsIAotCQkJICAgICB0di50dl9zZWMsIHR2LnR2X3VzZWMvMTAwMCk7CisJCQkgICAgIHR2LnR2X3NlYywgKGludCl0di50dl91c2VjLzEwMDApOwogCX0KIAogICAgICAgICBwICs9IHNwcmludGYocCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9tYXBfdG9fN3NlZ21lbnQuaCBiL2RyaXZlcnMvaW5wdXQvbWlzYy9tYXBfdG9fN3NlZ21lbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQyNDA5NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvbWFwX3RvXzdzZWdtZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvdXNiL2lucHV0L21hcF90b183c2VnbWVudC5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA1IEhlbmsgVmVyZ29uZXQgPEhlbmsuVmVyZ29uZXRAZ21haWwuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2lmbmRlZiBNQVBfVE9fN1NFR01FTlRfSAotI2RlZmluZSBNQVBfVE9fN1NFR01FTlRfSAotCi0vKiBUaGlzIGZpbGUgcHJvdmlkZXMgdHJhbnNsYXRpb24gcHJpbWl0aXZlcyBhbmQgdGFibGVzIGZvciB0aGUgY29udmVyc2lvbgotICogb2YgKEFTQ0lJKSBjaGFyYWN0ZXJzIHRvIGEgNy1zZWdtZW50cyBub3RhdGlvbi4KLSAqCi0gKiBUaGUgNyBzZWdtZW50J3Mgd2lraXBlZGlhIG5vdGF0aW9uIGJlbG93IGlzIHVzZWQgYXMgc3RhbmRhcmQuCi0gKiBTZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2V2ZW5fc2VnbWVudF9kaXNwbGF5Ci0gKgotICogTm90YXRpb246CSstYS0rCi0gKgkJZiAgIGIKLSAqCQkrLWctKwotICoJCWUgICBjCi0gKgkJKy1kLSsKLSAqCi0gKiBVc2FnZToKLSAqCi0gKiAgIFJlZ2lzdGVyIGEgbWFwIHZhcmlhYmxlLCBhbmQgZmlsbCBpdCB3aXRoIGEgY2hhcmFjdGVyIHNldDoKLSAqIAlzdGF0aWMgU0VHN19ERUZBVUxUX01BUChtYXBfc2VnNyk7Ci0gKgotICoKLSAqICAgVGhlbiB1c2UgZm9yIGNvbnZlcnNpb246Ci0gKglzZWc3ID0gbWFwX3RvX3NlZzcoJm1hcF9zZWc3LCBzb21lX2NoYXIpOwotICoJLi4uCi0gKgotICogSW4gZGV2aWNlIGRyaXZlcnMgaXQgaXMgcmVjb21tZW5kZWQsIGlmIHJlcXVpcmVkLCB0byBtYWtlIHRoZSBjaGFyIG1hcAotICogYWNjZXNzaWJsZSB2aWEgdGhlIHN5c2ZzIGludGVyZmFjZSB1c2luZyB0aGUgZm9sbG93aW5nIHNjaGVtZToKLSAqCi0gKiBzdGF0aWMgc3NpemVfdCBzaG93X21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikgewotICoJbWVtY3B5KGJ1ZiwgJm1hcF9zZWc3LCBzaXplb2YobWFwX3NlZzcpKTsKLSAqCXJldHVybiBzaXplb2YobWFwX3NlZzcpOwotICogfQotICogc3RhdGljIHNzaXplX3Qgc3RvcmVfbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY250KSB7Ci0gKglpZihjbnQgIT0gc2l6ZW9mKG1hcF9zZWc3KSkKLSAqCQlyZXR1cm4gLUVJTlZBTDsKLSAqCW1lbWNweSgmbWFwX3NlZzcsIGJ1ZiwgY250KTsKLSAqCXJldHVybiBjbnQ7Ci0gKiB9Ci0gKiBzdGF0aWMgREVWSUNFX0FUVFIobWFwX3NlZzcsIFBFUk1TX1JXLCBzaG93X21hcCwgc3RvcmVfbWFwKTsKLSAqCi0gKiBIaXN0b3J5OgotICogMjAwNS0wNS0zMQlSRkMgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwotICovCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLQotCi0jZGVmaW5lIEJJVF9TRUc3X0EJCTAKLSNkZWZpbmUgQklUX1NFRzdfQgkJMQotI2RlZmluZSBCSVRfU0VHN19DCQkyCi0jZGVmaW5lIEJJVF9TRUc3X0QJCTMKLSNkZWZpbmUgQklUX1NFRzdfRQkJNAotI2RlZmluZSBCSVRfU0VHN19GCQk1Ci0jZGVmaW5lIEJJVF9TRUc3X0cJCTYKLSNkZWZpbmUgQklUX1NFRzdfUkVTRVJWRUQJNwotCi1zdHJ1Y3Qgc2VnN19jb252ZXJzaW9uX21hcCB7Ci0JdW5zaWduZWQgY2hhcgl0YWJsZVsxMjhdOwotfTsKLQotc3RhdGljIGlubGluZSBpbnQgbWFwX3RvX3NlZzcoc3RydWN0IHNlZzdfY29udmVyc2lvbl9tYXAgKm1hcCwgaW50IGMpCi17Ci0JcmV0dXJuIGMgPj0gMCAmJiBjIDwgc2l6ZW9mKG1hcC0+dGFibGUpID8gbWFwLT50YWJsZVtjXSA6IC1FSU5WQUw7Ci19Ci0KLSNkZWZpbmUgU0VHN19DT05WRVJTSU9OX01BUChfbmFtZSwgX21hcCkJXAotCXN0cnVjdCBzZWc3X2NvbnZlcnNpb25fbWFwIF9uYW1lID0geyAudGFibGUgPSB7IF9tYXAgfSB9Ci0KLS8qCi0gKiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYSBmYWNpbGl0eSB0aGF0IGFsbG93cyB1c2VyIHNwYWNlIHRvIHJlZGVmaW5lCi0gKiBjdXN0b20gY2hhcmFjdGVyIHNldHMgZm9yIExDRCBkZXZpY2VzLiBQbGVhc2UgdXNlIGEgc3lzZnMgaW50ZXJmYWNlCi0gKiBhcyBkZXNjcmliZWQgYWJvdmUuCi0gKi8KLSNkZWZpbmUgTUFQX1RPX1NFRzdfU1lTRlNfRklMRQkibWFwX3NlZzciCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBBU0NJSSBjb252ZXJzaW9uIHRhYmxlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIF9TRUc3KGwsYSxiLGMsZCxlLGYsZykJXAotICAgICAgKAlhPDxCSVRfU0VHN19BIHwJYjw8QklUX1NFRzdfQiB8CWM8PEJJVF9TRUc3X0MgfAlkPDxCSVRfU0VHN19EIHwJXAotCWU8PEJJVF9TRUc3X0UgfAlmPDxCSVRfU0VHN19GIHwJZzw8QklUX1NFRzdfRyApCi0KLSNkZWZpbmUgX01BUF8wXzMyX0FTQ0lJX1NFRzdfTk9OX1BSSU5UQUJMRQlcCi0JMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCi0KLSNkZWZpbmUgX01BUF8zM180N19BU0NJSV9TRUc3X1NZTUJPTAkJXAotIF9TRUc3KCchJywwLDAsMCwwLDEsMSwwKSwgX1NFRzcoJyInLDAsMSwwLDAsMCwxLDApLCBfU0VHNygnIycsMCwxLDEsMCwxLDEsMCksXAotIF9TRUc3KCckJywxLDAsMSwxLDAsMSwxKSwgX1NFRzcoJyUnLDAsMCwxLDAsMCwxLDApLCBfU0VHNygnJicsMSwwLDEsMSwxLDEsMSksXAotIF9TRUc3KCdcJycsMCwwLDAsMCwwLDEsMCksX1NFRzcoJygnLDEsMCwwLDEsMSwxLDApLCBfU0VHNygnKScsMSwxLDEsMSwwLDAsMCksXAotIF9TRUc3KCcqJywwLDEsMSwwLDEsMSwxKSwgX1NFRzcoJysnLDAsMSwxLDAsMCwwLDEpLCBfU0VHNygnLCcsMCwwLDAsMCwxLDAsMCksXAotIF9TRUc3KCctJywwLDAsMCwwLDAsMCwxKSwgX1NFRzcoJy4nLDAsMCwwLDAsMSwwLDApLCBfU0VHNygnLycsMCwxLDAsMCwxLDAsMSksCi0KLSNkZWZpbmUgX01BUF80OF81N19BU0NJSV9TRUc3X05VTUVSSUMJCVwKLSBfU0VHNygnMCcsMSwxLDEsMSwxLDEsMCksIF9TRUc3KCcxJywwLDEsMSwwLDAsMCwwKSwgX1NFRzcoJzInLDEsMSwwLDEsMSwwLDEpLFwKLSBfU0VHNygnMycsMSwxLDEsMSwwLDAsMSksIF9TRUc3KCc0JywwLDEsMSwwLDAsMSwxKSwgX1NFRzcoJzUnLDEsMCwxLDEsMCwxLDEpLFwKLSBfU0VHNygnNicsMSwwLDEsMSwxLDEsMSksIF9TRUc3KCc3JywxLDEsMSwwLDAsMCwwKSwgX1NFRzcoJzgnLDEsMSwxLDEsMSwxLDEpLFwKLSBfU0VHNygnOScsMSwxLDEsMSwwLDEsMSksCi0KLSNkZWZpbmUgX01BUF81OF82NF9BU0NJSV9TRUc3X1NZTUJPTAkJXAotIF9TRUc3KCc6JywwLDAsMCwxLDAsMCwxKSwgX1NFRzcoJzsnLDAsMCwwLDEsMCwwLDEpLCBfU0VHNygnPCcsMSwwLDAsMCwwLDEsMSksXAotIF9TRUc3KCc9JywwLDAsMCwxLDAsMCwxKSwgX1NFRzcoJz4nLDEsMSwwLDAsMCwwLDEpLCBfU0VHNygnPycsMSwxLDEsMCwwLDEsMCksXAotIF9TRUc3KCdAJywxLDEsMCwxLDEsMSwxKSwKLQotI2RlZmluZSBfTUFQXzY1XzkwX0FTQ0lJX1NFRzdfQUxQSEFfVVBQUglcCi0gX1NFRzcoJ0EnLDEsMSwxLDAsMSwxLDEpLCBfU0VHNygnQicsMSwxLDEsMSwxLDEsMSksIF9TRUc3KCdDJywxLDAsMCwxLDEsMSwwKSxcCi0gX1NFRzcoJ0QnLDEsMSwxLDEsMSwxLDApLCBfU0VHNygnRScsMSwwLDAsMSwxLDEsMSksIF9TRUc3KCdGJywxLDAsMCwwLDEsMSwxKSxcCi0gX1NFRzcoJ0cnLDEsMSwxLDEsMCwxLDEpLCBfU0VHNygnSCcsMCwxLDEsMCwxLDEsMSksIF9TRUc3KCdJJywwLDEsMSwwLDAsMCwwKSxcCi0gX1NFRzcoJ0onLDAsMSwxLDEsMCwwLDApLCBfU0VHNygnSycsMCwxLDEsMCwxLDEsMSksIF9TRUc3KCdMJywwLDAsMCwxLDEsMSwwKSxcCi0gX1NFRzcoJ00nLDEsMSwxLDAsMSwxLDApLCBfU0VHNygnTicsMSwxLDEsMCwxLDEsMCksIF9TRUc3KCdPJywxLDEsMSwxLDEsMSwwKSxcCi0gX1NFRzcoJ1AnLDEsMSwwLDAsMSwxLDEpLCBfU0VHNygnUScsMSwxLDEsMSwxLDEsMCksIF9TRUc3KCdSJywxLDEsMSwwLDEsMSwxKSxcCi0gX1NFRzcoJ1MnLDEsMCwxLDEsMCwxLDEpLCBfU0VHNygnVCcsMCwwLDAsMSwxLDEsMSksIF9TRUc3KCdVJywwLDEsMSwxLDEsMSwwKSxcCi0gX1NFRzcoJ1YnLDAsMSwxLDEsMSwxLDApLCBfU0VHNygnVycsMCwxLDEsMSwxLDEsMSksIF9TRUc3KCdYJywwLDEsMSwwLDEsMSwxKSxcCi0gX1NFRzcoJ1knLDAsMSwxLDAsMCwxLDEpLCBfU0VHNygnWicsMSwxLDAsMSwxLDAsMSksCi0KLSNkZWZpbmUgX01BUF85MV85Nl9BU0NJSV9TRUc3X1NZTUJPTAkJXAotIF9TRUc3KCdbJywxLDAsMCwxLDEsMSwwKSwgX1NFRzcoJ1xcJywwLDAsMSwwLDAsMSwxKSxfU0VHNygnXScsMSwxLDEsMSwwLDAsMCksXAotIF9TRUc3KCdeJywxLDEsMCwwLDAsMSwwKSwgX1NFRzcoJ18nLDAsMCwwLDEsMCwwLDApLCBfU0VHNygnYCcsMCwxLDAsMCwwLDAsMCksCi0KLSNkZWZpbmUgX01BUF85N18xMjJfQVNDSUlfU0VHN19BTFBIQV9MT1dFUglcCi0gX1NFRzcoJ0EnLDEsMSwxLDAsMSwxLDEpLCBfU0VHNygnYicsMCwwLDEsMSwxLDEsMSksIF9TRUc3KCdjJywwLDAsMCwxLDEsMCwxKSxcCi0gX1NFRzcoJ2QnLDAsMSwxLDEsMSwwLDEpLCBfU0VHNygnRScsMSwwLDAsMSwxLDEsMSksIF9TRUc3KCdGJywxLDAsMCwwLDEsMSwxKSxcCi0gX1NFRzcoJ0cnLDEsMSwxLDEsMCwxLDEpLCBfU0VHNygnaCcsMCwwLDEsMCwxLDEsMSksIF9TRUc3KCdpJywwLDAsMSwwLDAsMCwwKSxcCi0gX1NFRzcoJ2onLDAsMCwxLDEsMCwwLDApLCBfU0VHNygnaycsMCwwLDEsMCwxLDEsMSksIF9TRUc3KCdMJywwLDAsMCwxLDEsMSwwKSxcCi0gX1NFRzcoJ00nLDEsMSwxLDAsMSwxLDApLCBfU0VHNygnbicsMCwwLDEsMCwxLDAsMSksIF9TRUc3KCdvJywwLDAsMSwxLDEsMCwxKSxcCi0gX1NFRzcoJ1AnLDEsMSwwLDAsMSwxLDEpLCBfU0VHNygncScsMSwxLDEsMCwwLDEsMSksIF9TRUc3KCdyJywwLDAsMCwwLDEsMCwxKSxcCi0gX1NFRzcoJ1MnLDEsMCwxLDEsMCwxLDEpLCBfU0VHNygnVCcsMCwwLDAsMSwxLDEsMSksIF9TRUc3KCd1JywwLDAsMSwxLDEsMCwwKSxcCi0gX1NFRzcoJ3YnLDAsMCwxLDEsMSwwLDApLCBfU0VHNygnVycsMCwxLDEsMSwxLDEsMSksIF9TRUc3KCdYJywwLDEsMSwwLDEsMSwxKSxcCi0gX1NFRzcoJ3knLDAsMSwxLDEsMCwxLDEpLCBfU0VHNygnWicsMSwxLDAsMSwxLDAsMSksCi0KLSNkZWZpbmUgX01BUF8xMjNfMTI2X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCi0gX1NFRzcoJ3snLDEsMCwwLDEsMSwxLDApLCBfU0VHNygnfCcsMCwwLDAsMCwxLDEsMCksIF9TRUc3KCd9JywxLDEsMSwxLDAsMCwwKSxcCi0gX1NFRzcoJ34nLDEsMCwwLDAsMCwwLDApLAotCi0vKiBNYXBzICovCi0KLS8qIFRoaXMgc2V0IHRyaWVzIHRvIG1hcCBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGUgdmlzaWJsZSBjaGFyYWN0ZXJpc3RpY3MKLSAqIG9mIHRoZSBBU0NJSSBzeW1ib2wsIGxvd2VyY2FzZSBhbmQgdXBwZXJjYXNlIGxldHRlcnMgbWF5IGRpZmZlciBpbgotICogcHJlc2VudGF0aW9uIG9uIHRoZSBkaXNwbGF5LgotICovCi0jZGVmaW5lIE1BUF9BU0NJSTdTRUdfQUxQSEFOVU0JCQlcCi0JX01BUF8wXzMyX0FTQ0lJX1NFRzdfTk9OX1BSSU5UQUJMRQlcCi0JX01BUF8zM180N19BU0NJSV9TRUc3X1NZTUJPTAkJXAotCV9NQVBfNDhfNTdfQVNDSUlfU0VHN19OVU1FUklDCQlcCi0JX01BUF81OF82NF9BU0NJSV9TRUc3X1NZTUJPTAkJXAotCV9NQVBfNjVfOTBfQVNDSUlfU0VHN19BTFBIQV9VUFBSCVwKLQlfTUFQXzkxXzk2X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCi0JX01BUF85N18xMjJfQVNDSUlfU0VHN19BTFBIQV9MT1dFUglcCi0JX01BUF8xMjNfMTI2X0FTQ0lJX1NFRzdfU1lNQk9MCi0KLS8qIFRoaXMgc2V0IHRyaWVzIHRvIG1hcCBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGUgc3ltYm9saWMgY2hhcmFjdGVyaXN0aWNzCi0gKiBvZiB0aGUgQVNDSUkgY2hhcmFjdGVyIGZvciBtYXhpbXVtIGRpc2NyaW1pbmF0aW9uLgotICogRm9yIG5vdyB0aGlzIG1lYW5zIGFsbCBhbHBoYSBjaGFycyBhcmUgaW4gbG93ZXIgY2FzZSByZXByZXNlbnRhdGlvbnMuCi0gKiAoVGhpcyBmb3IgZXhhbXBsZSBmYWNpbGl0YXRlcyB0aGUgdXNlIG9mIGhleCBudW1iZXJzIHdpdGggdXBwZXJjYXNlIGlucHV0LikKLSAqLwotI2RlZmluZSBNQVBfQVNDSUk3U0VHX0FMUEhBTlVNX0xDCQkJXAotCV9NQVBfMF8zMl9BU0NJSV9TRUc3X05PTl9QUklOVEFCTEUJXAotCV9NQVBfMzNfNDdfQVNDSUlfU0VHN19TWU1CT0wJCVwKLQlfTUFQXzQ4XzU3X0FTQ0lJX1NFRzdfTlVNRVJJQwkJXAotCV9NQVBfNThfNjRfQVNDSUlfU0VHN19TWU1CT0wJCVwKLQlfTUFQXzk3XzEyMl9BU0NJSV9TRUc3X0FMUEhBX0xPV0VSCVwKLQlfTUFQXzkxXzk2X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCi0JX01BUF85N18xMjJfQVNDSUlfU0VHN19BTFBIQV9MT1dFUglcCi0JX01BUF8xMjNfMTI2X0FTQ0lJX1NFRzdfU1lNQk9MCi0KLSNkZWZpbmUgU0VHN19ERUZBVUxUX01BUChfbmFtZSkJCVwKLQlTRUc3X0NPTlZFUlNJT05fTUFQKF9uYW1lLE1BUF9BU0NJSTdTRUdfQUxQSEFOVU0pCi0KLSNlbmRpZgkvKiBNQVBfVE9fN1NFR01FTlRfSCAqLwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKaW5kZXggZmUyNjhiZS4uN2M4OTU3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwpAQCAtMjc3LDYgKzI3NywxNiBAQAogCXsgS0VfRU5ELCAgMCB9CiB9OwogCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSBrZXltYXBfZnNfYW1pbG9fcHJvX3YzNTA1W10gX19pbml0ZGF0YSA9IHsKKwl7IEtFX0tFWSwgICAgICAgMHgwMSwge0tFWV9IRUxQfSB9LCAgICAgICAgICAvKiBGbitGMSAqLworCXsgS0VfS0VZLCAgICAgICAweDA2LCB7S0VZX0RJU1BMQVlUT0dHTEV9IH0sIC8qIEZuK0Y0ICovCisJeyBLRV9CTFVFVE9PVEgsIDB4MzAgfSwgICAgICAgICAgICAgICAgICAgICAgLyogRm4rRjEwICovCisJeyBLRV9LRVksICAgICAgIDB4MzEsIHtLRVlfTUFJTH0gfSwgICAgICAgICAgLyogbWFpbCBidXR0b24gKi8KKwl7IEtFX0tFWSwgICAgICAgMHgzNiwge0tFWV9XV1d9IH0sICAgICAgICAgICAvKiB3d3cgYnV0dG9uICovCisJeyBLRV9XSUZJLCAgICAgIDB4NzggfSwgICAgICAgICAgICAgICAgICAgICAgLyogc2F0ZWxpdGUgZGlzaCBidXR0b24gKi8KKwl7IEtFX0VORCwgICAgICAgMCB9Cit9OworCiBzdGF0aWMgc3RydWN0IGtleV9lbnRyeSBrZXltYXBfZnVqaXRzdV9uMzUxMFtdIF9faW5pdGRhdGEgPSB7CiAJeyBLRV9LRVksIDB4MTEsIHtLRVlfUFJPRzF9IH0sCiAJeyBLRV9LRVksIDB4MTIsIHtLRVlfUFJPRzJ9IH0sCkBAIC02MTgsNiArNjI4LDE1IEBACiAJfSwKIAl7CiAJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAorCQkuaWRlbnQgPSAiRnVqaXRzdS1TaWVtZW5zIEFtaWxvIFBybyBFZGl0aW9uIFYzNTA1IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gUHJvIEVkaXRpb24gVjM1MDUiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhID0ga2V5bWFwX2ZzX2FtaWxvX3Byb192MzUwNQorCX0sCisJeworCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKIAkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBNNzQwMCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSBTSUVNRU5TIiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYwppbmRleCBmYWNlZmQzLi45M2EyMmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMKQEAgLTUyLDggKzUyLDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21hcF90b183c2VnbWVudC5oPgogCi0jaW5jbHVkZSAibWFwX3RvXzdzZWdtZW50LmgiCiAjaW5jbHVkZSAieWVhbGluay5oIgogCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ5bGQtMjAwNTEyMzAiCkBAIC05OTksNyArOTk5LDggQEAKIHsKIAlpbnQgcmV0ID0gdXNiX3JlZ2lzdGVyKCZ5ZWFsaW5rX2RyaXZlcik7CiAJaWYgKHJldCA9PSAwKQotCQlpbmZvKERSSVZFUl9ERVNDICI6IiBEUklWRVJfVkVSU0lPTik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwppbmRleCBmOTk2NTQ2Li5mNDg4YjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCkBAIC05Niw2ICs5NiwxNiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTU9VU0VfUFMyX09MUEMKKwlib29sICJPTFBDIFBTLzIgbW91c2UgcHJvdG9jb2wgZXh0ZW5zaW9uIgorCWRlcGVuZHMgb24gTU9VU0VfUFMyICYmIE9MUEMKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIE9MUEMgWE8tMSBsYXB0b3AgKHdpdGggYnVpbHQtaW4KKwkgIFBTLzIgdG91Y2hwYWQvdGFibGV0IGRldmljZSkuICBUaGUgbWFudWZhY3R1cmVyIGNhbGxzIHRoZQorCSAgdG91Y2hwYWQgYW4gSEdQSy4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIE1PVVNFX1NFUklBTAogCXRyaXN0YXRlICJTZXJpYWwgbW91c2UiCiAJc2VsZWN0IFNFUklPCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9NYWtlZmlsZQppbmRleCBkNGQyMDI1Li44ZTZlNjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvTWFrZWZpbGUKQEAgLTIxLDYgKzIxLDcgQEAKIHBzbW91c2Utb2JqcyA6PSBwc21vdXNlLWJhc2UubyBzeW5hcHRpY3MubwogCiBwc21vdXNlLSQoQ09ORklHX01PVVNFX1BTMl9BTFBTKQkrPSBhbHBzLm8KK3BzbW91c2UtJChDT05GSUdfTU9VU0VfUFMyX09MUEMpCSs9IGhncGsubwogcHNtb3VzZS0kKENPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQKQkrPSBsb2dpcHMycHAubwogcHNtb3VzZS0kKENPTkZJR19NT1VTRV9QUzJfTElGRUJPT0spCSs9IGxpZmVib29rLm8KIHBzbW91c2UtJChDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQpCSs9IHRyYWNrcG9pbnQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYwppbmRleCAzODVlMzJiLi5jYmVkZjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYwpAQCAtNTQsNiArNTQsNyBAQAogCXsgeyAweDIwLCAweDAyLCAweDBlIH0sCTB4ZjgsIDB4ZjgsIEFMUFNfUEFTUyB8IEFMUFNfRFVBTFBPSU5UIH0sIC8qIFhYWCAqLwogCXsgeyAweDIyLCAweDAyLCAweDBhIH0sCTB4ZjgsIDB4ZjgsIEFMUFNfUEFTUyB8IEFMUFNfRFVBTFBPSU5UIH0sCiAJeyB7IDB4MjIsIDB4MDIsIDB4MTQgfSwgMHhmZiwgMHhmZiwgQUxQU19QQVNTIHwgQUxQU19EVUFMUE9JTlQgfSwgLyogRGVsbCBMYXRpdHVkZSBENjAwICovCisJeyB7IDB4NjIsIDB4MDIsIDB4MTQgfSwgMHhjZiwgMHhjZiwgQUxQU19QQVNTIHwgQUxQU19EVUFMUE9JTlQgfSwgLyogRGVsbCBMYXRpdHVkZSBFNjUwMCAqLwogCXsgeyAweDczLCAweDAyLCAweDUwIH0sIDB4Y2YsIDB4Y2YsIEFMUFNfRldfQktfMSB9IC8qIERlbGwgVm9zdHJvIDE0MDAgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYXBwbGV0b3VjaC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hcHBsZXRvdWNoLmMKaW5kZXggMWY0MWFlOS4uMDc5ODE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hcHBsZXRvdWNoLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hcHBsZXRvdWNoLmMKQEAgLTEzNiwxMiArMTM2LDI4IEBACiAjZGVmaW5lIEFUUF9HRVlTRVJfTU9ERV9SRVFVRVNUX0lOREVYCQkwCiAjZGVmaW5lIEFUUF9HRVlTRVJfTU9ERV9WRU5ET1JfVkFMVUUJCTB4MDQKIAorLyoqCisgKiBlbnVtIGF0cF9zdGF0dXNfYml0cyAtIHN0YXR1cyBiaXQgbWVhbmluZ3MKKyAqCisgKiBUaGVzZSBjb25zdGFudHMgcmVwcmVzZW50IHRoZSBtZWFuaW5nIG9mIHRoZSBzdGF0dXMgYml0cy4KKyAqIChvbmx5IEdleXNlciAzLzQpCisgKgorICogQEFUUF9TVEFUVVNfQlVUVE9OOiBUaGUgYnV0dG9uIHdhcyBwcmVzc2VkCisgKiBAQVRQX1NUQVRVU19CQVNFX1VQREFURTogVXBkYXRlIG9mIHRoZSBiYXNlIHZhbHVlcyAodW50b3VjaGVkIHBhZCkKKyAqIEBBVFBfU1RBVFVTX0ZST01fUkVTRVQ6IFJlc2V0IHByZXZpb3VzbHkgcGVyZm9ybWVkCisgKi8KK2VudW0gYXRwX3N0YXR1c19iaXRzIHsKKwlBVFBfU1RBVFVTX0JVVFRPTgk9IEJJVCgwKSwKKwlBVFBfU1RBVFVTX0JBU0VfVVBEQVRFCT0gQklUKDIpLAorCUFUUF9TVEFUVVNfRlJPTV9SRVNFVAk9IEJJVCg0KSwKK307CisKIC8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCiBzdHJ1Y3QgYXRwIHsKIAljaGFyCQkJcGh5c1s2NF07CiAJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CQkvKiB1c2IgZGV2aWNlICovCiAJc3RydWN0IHVyYgkJKnVyYjsJCS8qIHVzYiByZXF1ZXN0IGJsb2NrICovCi0Jc2lnbmVkIGNoYXIJCSpkYXRhOwkJLyogdHJhbnNmZXJyZWQgZGF0YSAqLworCXU4CQkJKmRhdGE7CQkvKiB0cmFuc2ZlcnJlZCBkYXRhICovCiAJc3RydWN0IGlucHV0X2RldgkqaW5wdXQ7CQkvKiBpbnB1dCBkZXYgKi8KIAllbnVtIGF0cF90b3VjaHBhZF90eXBlCXR5cGU7CQkvKiB0eXBlIG9mIHRvdWNocGFkICovCiAJYm9vbAkJCW9wZW47CkBAIC0yNTEsOCArMjY3LDYgQEAKIAlpbnQgcmV0dmFsOwogCiAJZHByaW50aygiYXBwbGV0b3VjaDogcHV0dGluZyBhcHBsZXRvdWNoIHRvIHNsZWVwIChyZWluaXQpXG4iKTsKLQlkZXYtPmlkbGVjb3VudCA9IDA7Ci0KIAlhdHBfZ2V5c2VyX2luaXQodWRldik7CiAKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYiwgR0ZQX0FUT01JQyk7CkBAIC0zMjcsMTEgKzM0MSwxNCBAQAogCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX1RSSVBMRVRBUCwgZmluZ2VycyA+IDIpOwogfQogCi1zdGF0aWMgdm9pZCBhdHBfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQorLyogQ2hlY2sgVVJCIHN0YXR1cyBhbmQgZm9yIGNvcnJlY3QgbGVuZ3RoIG9mIGRhdGEgcGFja2FnZSAqLworCisjZGVmaW5lIEFUUF9VUkJfU1RBVFVTX1NVQ0NFU1MJCTAKKyNkZWZpbmUgQVRQX1VSQl9TVEFUVVNfRVJST1IJCTEKKyNkZWZpbmUgQVRQX1VSQl9TVEFUVVNfRVJST1JfRkFUQUwJMgorCitzdGF0aWMgaW50IGF0cF9zdGF0dXNfY2hlY2soc3RydWN0IHVyYiAqdXJiKQogewotCWludCB4LCB5LCB4X3osIHlfeiwgeF9mLCB5X2Y7Ci0JaW50IHJldHZhbCwgaSwgajsKLQlpbnQga2V5OwogCXN0cnVjdCBhdHAgKmRldiA9IHVyYi0+Y29udGV4dDsKIAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKQEAgLTM1MSwxMSArMzY4LDEyIEBACiAJCS8qIFRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCiAJCWRiZygiYXRwX2NvbXBsZXRlOiB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAogCQkgICAgdXJiLT5zdGF0dXMpOwotCQlyZXR1cm47CisJCXJldHVybiBBVFBfVVJCX1NUQVRVU19FUlJPUl9GQVRBTDsKKwogCWRlZmF1bHQ6CiAJCWRiZygiYXRwX2NvbXBsZXRlOiBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKIAkJICAgIHVyYi0+c3RhdHVzKTsKLQkJZ290byBleGl0OworCQlyZXR1cm4gQVRQX1VSQl9TVEFUVVNfRVJST1I7CiAJfQogCiAJLyogZHJvcCBpbmNvbXBsZXRlIGRhdGFzZXRzICovCkBAIC0zNjMsMzAgKzM4MSwzMyBAQAogCQlkcHJpbnRrKCJhcHBsZXRvdWNoOiBpbmNvbXBsZXRlIGRhdGEgcGFja2FnZSIKIAkJCSIgKGZpcnN0IGJ5dGU6ICVkLCBsZW5ndGg6ICVkKS5cbiIsCiAJCQlkZXYtPmRhdGFbMF0sIGRldi0+dXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJZ290byBleGl0OworCQlyZXR1cm4gQVRQX1VSQl9TVEFUVVNfRVJST1I7CiAJfQogCisJcmV0dXJuIEFUUF9VUkJfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBVU0IgaW50ZXJydXB0IGNhbGxiYWNrIGZ1bmN0aW9ucworICovCisKKy8qIEludGVycnVwdCBmdW5jdGlvbiBmb3Igb2xkZXIgdG91Y2hwYWRzOiBGT1VOVEFJTi9HRVlTRVIxL0dFWVNFUjIgKi8KKworc3RhdGljIHZvaWQgYXRwX2NvbXBsZXRlX2dleXNlcl8xXzIoc3RydWN0IHVyYiAqdXJiKQoreworCWludCB4LCB5LCB4X3osIHlfeiwgeF9mLCB5X2Y7CisJaW50IHJldHZhbCwgaSwgajsKKwlpbnQga2V5OworCXN0cnVjdCBhdHAgKmRldiA9IHVyYi0+Y29udGV4dDsKKwlpbnQgc3RhdHVzID0gYXRwX3N0YXR1c19jaGVjayh1cmIpOworCisJaWYgKHN0YXR1cyA9PSBBVFBfVVJCX1NUQVRVU19FUlJPUl9GQVRBTCkKKwkJcmV0dXJuOworCWVsc2UgaWYgKHN0YXR1cyA9PSBBVFBfVVJCX1NUQVRVU19FUlJPUikKKwkJZ290byBleGl0OworCiAJLyogcmVvcmRlciB0aGUgc2Vuc29ycyB2YWx1ZXMgKi8KLQlpZiAoZGV2LT50eXBlID09IEFUUF9HRVlTRVIzIHx8IGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSNCkgewotCQltZW1zZXQoZGV2LT54eV9jdXIsIDAsIHNpemVvZihkZXYtPnh5X2N1cikpOwotCi0JCS8qCi0JCSAqIFRoZSB2YWx1ZXMgYXJlIGxhaWQgb3V0IGxpa2UgdGhpczoKLQkJICogLSwgWTEsIFkyLCAtLCBZMywgWTQsIC0sIC4uLiwgLSwgWDEsIFgyLCAtLCBYMywgWDQsIC4uLgotCQkgKiAnLScgaXMgYW4gdW51c2VkIHZhbHVlLgotCQkgKi8KLQotCQkvKiByZWFkIFggdmFsdWVzICovCi0JCWZvciAoaSA9IDAsIGogPSAxOTsgaSA8IDIwOyBpICs9IDIsIGogKz0gMykgewotCQkJZGV2LT54eV9jdXJbaV0gPSBkZXYtPmRhdGFbaiArIDFdOwotCQkJZGV2LT54eV9jdXJbaSArIDFdID0gZGV2LT5kYXRhW2ogKyAyXTsKLQkJfQotCQkvKiByZWFkIFkgdmFsdWVzICovCi0JCWZvciAoaSA9IDAsIGogPSAxOyBpIDwgOTsgaSArPSAyLCBqICs9IDMpIHsKLQkJCWRldi0+eHlfY3VyW0FUUF9YU0VOU09SUyArIGldID0gZGV2LT5kYXRhW2ogKyAxXTsKLQkJCWRldi0+eHlfY3VyW0FUUF9YU0VOU09SUyArIGkgKyAxXSA9IGRldi0+ZGF0YVtqICsgMl07Ci0JCX0KLQl9IGVsc2UgaWYgKGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMikgeworCWlmIChkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjIpIHsKIAkJbWVtc2V0KGRldi0+eHlfY3VyLCAwLCBzaXplb2YoZGV2LT54eV9jdXIpKTsKIAogCQkvKgpAQCAtNDI3LDM0ICs0NDgsNDAgQEAKIAkJLyogZmlyc3Qgc2FtcGxlICovCiAJCWRldi0+dmFsaWQgPSB0cnVlOwogCQlkZXYtPnhfb2xkID0gZGV2LT55X29sZCA9IC0xOworCisJCS8qIFN0b3JlIGZpcnN0IHNhbXBsZSAqLwogCQltZW1jcHkoZGV2LT54eV9vbGQsIGRldi0+eHlfY3VyLCBzaXplb2YoZGV2LT54eV9vbGQpKTsKIAotCQlpZiAoZGV2LT5zaXplX2RldGVjdF9kb25lIHx8Ci0JCSAgICBkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjMpIC8qIE5vIDE3IiBNYWNib29rcyAoeWV0KSAqLworCQkvKiBQZXJmb3JtIHNpemUgZGV0ZWN0aW9uLCBpZiBub3QgZG9uZSBhbHJlYWR5ICovCisJCWlmICghZGV2LT5zaXplX2RldGVjdF9kb25lKSB7CisKKwkJCS8qIDE3IiBQb3dlcmJvb2tzIGhhdmUgZXh0cmEgWCBzZW5zb3JzICovCisJCQlmb3IgKGkgPSAoZGV2LT50eXBlID09IEFUUF9HRVlTRVIyID8gMTUgOiAxNik7CisJCQkgICAgIGkgPCBBVFBfWFNFTlNPUlM7IGkrKykgeworCQkJCWlmICghZGV2LT54eV9jdXJbaV0pCisJCQkJCWNvbnRpbnVlOworCisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCQkiYXBwbGV0b3VjaDogMTdcIiBtb2RlbCBkZXRlY3RlZC5cbiIpOworCisJCQkJaWYgKGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMikKKwkJCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LT5pbnB1dCwgQUJTX1gsCisJCQkJCQkJICAgICAwLAorCQkJCQkJCSAgICAgKDIwIC0gMSkgKgorCQkJCQkJCSAgICAgQVRQX1hGQUNUIC0gMSwKKwkJCQkJCQkgICAgIEFUUF9GVVpaLCAwKTsKKwkJCQllbHNlCisJCQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldi0+aW5wdXQsIEFCU19YLAorCQkJCQkJCSAgICAgMCwKKwkJCQkJCQkgICAgICgyNiAtIDEpICoKKwkJCQkJCQkgICAgIEFUUF9YRkFDVCAtIDEsCisJCQkJCQkJICAgICBBVFBfRlVaWiwgMCk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWRldi0+c2l6ZV9kZXRlY3RfZG9uZSA9IDE7CiAJCQlnb3RvIGV4aXQ7Ci0KLQkJLyogMTciIFBvd2VyYm9va3MgaGF2ZSBleHRyYSBYIHNlbnNvcnMgKi8KLQkJZm9yIChpID0gKGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMiA/IDE1IDogMTYpOwotCQkgICAgIGkgPCBBVFBfWFNFTlNPUlM7IGkrKykgewotCQkJaWYgKCFkZXYtPnh5X2N1cltpXSkKLQkJCQljb250aW51ZTsKLQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiYXBwbGV0b3VjaDogMTdcIiBtb2RlbCBkZXRlY3RlZC5cbiIpOwotCQkJaWYgKGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMikKLQkJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYtPmlucHV0LCBBQlNfWCwgMCwKLQkJCQkJCSAgICAgKDIwIC0gMSkgKgotCQkJCQkJICAgICBBVFBfWEZBQ1QgLSAxLAotCQkJCQkJICAgICBBVFBfRlVaWiwgMCk7Ci0JCQllbHNlCi0JCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LT5pbnB1dCwgQUJTX1gsIDAsCi0JCQkJCQkgICAgIChBVFBfWFNFTlNPUlMgLSAxKSAqCi0JCQkJCQkgICAgIEFUUF9YRkFDVCAtIDEsCi0JCQkJCQkgICAgIEFUUF9GVVpaLCAwKTsKLQkJCWJyZWFrOwogCQl9Ci0KLQkJZGV2LT5zaXplX2RldGVjdF9kb25lID0gMTsKLQkJZ290byBleGl0OwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBBVFBfWFNFTlNPUlMgKyBBVFBfWVNFTlNPUlM7IGkrKykgewpAQCAtNDc1LDcgKzUwMiwxMTggQEAKIAkJCSAgICAgIEFUUF9YRkFDVCwgJnhfeiwgJnhfZik7CiAJeSA9IGF0cF9jYWxjdWxhdGVfYWJzKGRldi0+eHlfYWNjICsgQVRQX1hTRU5TT1JTLCBBVFBfWVNFTlNPUlMsCiAJCQkgICAgICBBVFBfWUZBQ1QsICZ5X3osICZ5X2YpOwotCWtleSA9IGRldi0+ZGF0YVtkZXYtPmRhdGFsZW4gLSAxXSAmIDE7CisJa2V5ID0gZGV2LT5kYXRhW2Rldi0+ZGF0YWxlbiAtIDFdICYgQVRQX1NUQVRVU19CVVRUT047CisKKwlpZiAoeCAmJiB5KSB7CisJCWlmIChkZXYtPnhfb2xkICE9IC0xKSB7CisJCQl4ID0gKGRldi0+eF9vbGQgKiAzICsgeCkgPj4gMjsKKwkJCXkgPSAoZGV2LT55X29sZCAqIDMgKyB5KSA+PiAyOworCQkJZGV2LT54X29sZCA9IHg7CisJCQlkZXYtPnlfb2xkID0geTsKKworCQkJaWYgKGRlYnVnID4gMSkKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiYXBwbGV0b3VjaDogIgorCQkJCQkiWDogJTNkIFk6ICUzZCBYejogJTNkIFl6OiAlM2RcbiIsCisJCQkJCXgsIHksIHhfeiwgeV96KTsKKworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYtPmlucHV0LCBCVE5fVE9VQ0gsIDEpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYtPmlucHV0LCBBQlNfWCwgeCk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldi0+aW5wdXQsIEFCU19ZLCB5KTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LT5pbnB1dCwgQUJTX1BSRVNTVVJFLAorCQkJCQkgbWluKEFUUF9QUkVTU1VSRSwgeF96ICsgeV96KSk7CisJCQlhdHBfcmVwb3J0X2ZpbmdlcnMoZGV2LT5pbnB1dCwgbWF4KHhfZiwgeV9mKSk7CisJCX0KKwkJZGV2LT54X29sZCA9IHg7CisJCWRldi0+eV9vbGQgPSB5OworCisJfSBlbHNlIGlmICgheCAmJiAheSkgeworCisJCWRldi0+eF9vbGQgPSBkZXYtPnlfb2xkID0gLTE7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LT5pbnB1dCwgQlROX1RPVUNILCAwKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYtPmlucHV0LCBBQlNfUFJFU1NVUkUsIDApOworCQlhdHBfcmVwb3J0X2ZpbmdlcnMoZGV2LT5pbnB1dCwgMCk7CisKKwkJLyogcmVzZXQgdGhlIGFjY3VtdWxhdG9yIG9uIHJlbGVhc2UgKi8KKwkJbWVtc2V0KGRldi0+eHlfYWNjLCAwLCBzaXplb2YoZGV2LT54eV9hY2MpKTsKKwl9CisKKwlpbnB1dF9yZXBvcnRfa2V5KGRldi0+aW5wdXQsIEJUTl9MRUZULCBrZXkpOworCWlucHV0X3N5bmMoZGV2LT5pbnB1dCk7CisKKyBleGl0OgorCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+dXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIoImF0cF9jb21wbGV0ZTogdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgIHJldHZhbCk7Cit9CisKKy8qIEludGVycnVwdCBmdW5jdGlvbiBmb3Igb2xkZXIgdG91Y2hwYWRzOiBHRVlTRVIzL0dFWVNFUjQgKi8KKworc3RhdGljIHZvaWQgYXRwX2NvbXBsZXRlX2dleXNlcl8zXzQoc3RydWN0IHVyYiAqdXJiKQoreworCWludCB4LCB5LCB4X3osIHlfeiwgeF9mLCB5X2Y7CisJaW50IHJldHZhbCwgaSwgajsKKwlpbnQga2V5OworCXN0cnVjdCBhdHAgKmRldiA9IHVyYi0+Y29udGV4dDsKKwlpbnQgc3RhdHVzID0gYXRwX3N0YXR1c19jaGVjayh1cmIpOworCisJaWYgKHN0YXR1cyA9PSBBVFBfVVJCX1NUQVRVU19FUlJPUl9GQVRBTCkKKwkJcmV0dXJuOworCWVsc2UgaWYgKHN0YXR1cyA9PSBBVFBfVVJCX1NUQVRVU19FUlJPUikKKwkJZ290byBleGl0OworCisJLyogUmVvcmRlciB0aGUgc2Vuc29ycyB2YWx1ZXM6CisJICoKKwkgKiBUaGUgdmFsdWVzIGFyZSBsYWlkIG91dCBsaWtlIHRoaXM6CisJICogLSwgWTEsIFkyLCAtLCBZMywgWTQsIC0sIC4uLiwgLSwgWDEsIFgyLCAtLCBYMywgWDQsIC4uLgorCSAqICctJyBpcyBhbiB1bnVzZWQgdmFsdWUuCisJICovCisKKwkvKiByZWFkIFggdmFsdWVzICovCisJZm9yIChpID0gMCwgaiA9IDE5OyBpIDwgMjA7IGkgKz0gMiwgaiArPSAzKSB7CisJCWRldi0+eHlfY3VyW2ldID0gZGV2LT5kYXRhW2ogKyAxXTsKKwkJZGV2LT54eV9jdXJbaSArIDFdID0gZGV2LT5kYXRhW2ogKyAyXTsKKwl9CisJLyogcmVhZCBZIHZhbHVlcyAqLworCWZvciAoaSA9IDAsIGogPSAxOyBpIDwgOTsgaSArPSAyLCBqICs9IDMpIHsKKwkJZGV2LT54eV9jdXJbQVRQX1hTRU5TT1JTICsgaV0gPSBkZXYtPmRhdGFbaiArIDFdOworCQlkZXYtPnh5X2N1cltBVFBfWFNFTlNPUlMgKyBpICsgMV0gPSBkZXYtPmRhdGFbaiArIDJdOworCX0KKworCWRiZ19kdW1wKCJzYW1wbGUiLCBkZXYtPnh5X2N1cik7CisKKwkvKiBKdXN0IHVwZGF0ZSB0aGUgYmFzZSB2YWx1ZXMgKGkuZS4gdG91Y2hwYWQgaW4gdW50b3VjaGVkIHN0YXRlKSAqLworCWlmIChkZXYtPmRhdGFbZGV2LT5kYXRhbGVuIC0gMV0gJiBBVFBfU1RBVFVTX0JBU0VfVVBEQVRFKSB7CisKKwkJZHByaW50ayhLRVJOX0RFQlVHICJhcHBsZXRvdWNoOiB1cGRhdGVkIGJhc2UgdmFsdWVzXG4iKTsKKworCQltZW1jcHkoZGV2LT54eV9vbGQsIGRldi0+eHlfY3VyLCBzaXplb2YoZGV2LT54eV9vbGQpKTsKKwkJZ290byBleGl0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBVFBfWFNFTlNPUlMgKyBBVFBfWVNFTlNPUlM7IGkrKykgeworCQkvKiBjYWxjdWxhdGUgdGhlIGNoYW5nZSAqLworCQlkZXYtPnh5X2FjY1tpXSA9IGRldi0+eHlfY3VyW2ldIC0gZGV2LT54eV9vbGRbaV07CisKKwkJLyogdGhpcyBpcyBhIHJvdW5kLXJvYmluIHZhbHVlLCBzbyBjb3VwbGUgd2l0aCB0aGF0ICovCisJCWlmIChkZXYtPnh5X2FjY1tpXSA+IDEyNykKKwkJCWRldi0+eHlfYWNjW2ldIC09IDI1NjsKKworCQlpZiAoZGV2LT54eV9hY2NbaV0gPCAtMTI3KQorCQkJZGV2LT54eV9hY2NbaV0gKz0gMjU2OworCisJCS8qIHByZXZlbnQgZG93biBkcmlmdGluZyAqLworCQlpZiAoZGV2LT54eV9hY2NbaV0gPCAwKQorCQkJZGV2LT54eV9hY2NbaV0gPSAwOworCX0KKworCWRiZ19kdW1wKCJhY2N1bXVsYXRvciIsIGRldi0+eHlfYWNjKTsKKworCXggPSBhdHBfY2FsY3VsYXRlX2FicyhkZXYtPnh5X2FjYywgQVRQX1hTRU5TT1JTLAorCQkJICAgICAgQVRQX1hGQUNULCAmeF96LCAmeF9mKTsKKwl5ID0gYXRwX2NhbGN1bGF0ZV9hYnMoZGV2LT54eV9hY2MgKyBBVFBfWFNFTlNPUlMsIEFUUF9ZU0VOU09SUywKKwkJCSAgICAgIEFUUF9ZRkFDVCwgJnlfeiwgJnlfZik7CisJa2V5ID0gZGV2LT5kYXRhW2Rldi0+ZGF0YWxlbiAtIDFdICYgQVRQX1NUQVRVU19CVVRUT047CiAKIAlpZiAoeCAmJiB5KSB7CiAJCWlmIChkZXYtPnhfb2xkICE9IC0xKSB7CkBAIC01MTQsMjggKzY1MiwyNyBAQAogCWlucHV0X3N5bmMoZGV2LT5pbnB1dCk7CiAKIAkvKgotCSAqIE1hbnkgR2V5c2VycyB3aWxsIGNvbnRpbnVlIHRvIHNlbmQgcGFja2V0cyBjb250aW51YWxseSBhZnRlcgorCSAqIEdleXNlcnMgMy80IHdpbGwgY29udGludWUgdG8gc2VuZCBwYWNrZXRzIGNvbnRpbnVhbGx5IGFmdGVyCiAJICogdGhlIGZpcnN0IHRvdWNoIHVubGVzcyByZWluaXRpYWxpc2VkLiBEbyBzbyBpZiBpdCdzIGJlZW4KIAkgKiBpZGxlIGZvciBhIHdoaWxlIGluIG9yZGVyIHRvIGF2b2lkIHdha2luZyB0aGUga2VybmVsIHVwCi0JICogc2V2ZXJhbCBodW5kcmVkIHRpbWVzIGEgc2Vjb25kLiBSZS1pbml0aWFsaXphdGlvbiBkb2VzIG5vdAotCSAqIHdvcmsgb24gRm91bnRhaW4gdG91Y2hwYWRzLgorCSAqIHNldmVyYWwgaHVuZHJlZCB0aW1lcyBhIHNlY29uZC4KIAkgKi8KLQlpZiAoZGV2LT50eXBlICE9IEFUUF9GT1VOVEFJTikgewotCQkvKgotCQkgKiBCdXR0b24gbXVzdCBub3QgYmUgcHJlc3NlZCB3aGVuIGVudGVyaW5nIHN1c3BlbmQsCi0JCSAqIG90aGVyd2lzZSB3ZSB3aWxsIG5ldmVyIHJlbGVhc2UgdGhlIGJ1dHRvbi4KLQkJICovCi0JCWlmICgheCAmJiAheSAmJiAha2V5KSB7Ci0JCQlkZXYtPmlkbGVjb3VudCsrOwotCQkJaWYgKGRldi0+aWRsZWNvdW50ID09IDEwKSB7Ci0JCQkJZGV2LT52YWxpZCA9IGZhbHNlOwotCQkJCXNjaGVkdWxlX3dvcmsoJmRldi0+d29yayk7Ci0JCQkJLyogRG9uJ3QgcmVzdWJtaXQgdXJiIGhlcmUsIHdhaXQgZm9yIHJlaW5pdCAqLwotCQkJCXJldHVybjsKLQkJCX0KLQkJfSBlbHNlCisKKwkvKgorCSAqIEJ1dHRvbiBtdXN0IG5vdCBiZSBwcmVzc2VkIHdoZW4gZW50ZXJpbmcgc3VzcGVuZCwKKwkgKiBvdGhlcndpc2Ugd2Ugd2lsbCBuZXZlciByZWxlYXNlIHRoZSBidXR0b24uCisJICovCisJaWYgKCF4ICYmICF5ICYmICFrZXkpIHsKKwkJZGV2LT5pZGxlY291bnQrKzsKKwkJaWYgKGRldi0+aWRsZWNvdW50ID09IDEwKSB7CisJCQlkZXYtPnhfb2xkID0gZGV2LT55X29sZCA9IC0xOwogCQkJZGV2LT5pZGxlY291bnQgPSAwOwotCX0KKwkJCXNjaGVkdWxlX3dvcmsoJmRldi0+d29yayk7CisJCQkvKiBEb24ndCByZXN1Ym1pdCB1cmIgaGVyZSwgd2FpdCBmb3IgcmVpbml0ICovCisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UKKwkJZGV2LT5pZGxlY291bnQgPSAwOwogCiAgZXhpdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYiwgR0ZQX0FUT01JQyk7CkBAIC02MzIsOSArNzY5LDE5IEBACiAJaWYgKCFkZXYtPmRhdGEpCiAJCWdvdG8gZXJyX2ZyZWVfdXJiOwogCi0JdXNiX2ZpbGxfaW50X3VyYihkZXYtPnVyYiwgdWRldiwKLQkJCSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBpbnRfaW5fZW5kcG9pbnRBZGRyKSwKLQkJCSBkZXYtPmRhdGEsIGRldi0+ZGF0YWxlbiwgYXRwX2NvbXBsZXRlLCBkZXYsIDEpOworCS8qIFNlbGVjdCB0aGUgVVNCIGNvbXBsZXRlIChjYWxsYmFjaykgZnVuY3Rpb24gKi8KKwlpZiAoZGV2LT50eXBlID09IEFUUF9GT1VOVEFJTiB8fAorCSAgICBkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjEgfHwKKwkgICAgZGV2LT50eXBlID09IEFUUF9HRVlTRVIyKQorCQl1c2JfZmlsbF9pbnRfdXJiKGRldi0+dXJiLCB1ZGV2LAorCQkJCSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBpbnRfaW5fZW5kcG9pbnRBZGRyKSwKKwkJCQkgZGV2LT5kYXRhLCBkZXYtPmRhdGFsZW4sCisJCQkJIGF0cF9jb21wbGV0ZV9nZXlzZXJfMV8yLCBkZXYsIDEpOworCWVsc2UKKwkJdXNiX2ZpbGxfaW50X3VyYihkZXYtPnVyYiwgdWRldiwKKwkJCQkgdXNiX3JjdmludHBpcGUodWRldiwgaW50X2luX2VuZHBvaW50QWRkciksCisJCQkJIGRldi0+ZGF0YSwgZGV2LT5kYXRhbGVuLAorCQkJCSBhdHBfY29tcGxldGVfZ2V5c2VyXzNfNCwgZGV2LCAxKTsKIAogCWVycm9yID0gYXRwX2hhbmRsZV9nZXlzZXIoZGV2KTsKIAlpZiAoZXJyb3IpCkBAIC03NTEsOCArODk4LDYgQEAKIAlzdHJ1Y3QgYXRwICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKIAogCXVzYl9raWxsX3VyYihkZXYtPnVyYik7Ci0JZGV2LT52YWxpZCA9IGZhbHNlOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyZDM0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jCkBAIC0wLDAgKzEsNDc3IEBACisvKgorICogT0xQQyBIR1BLIChYTy0xKSB0b3VjaHBhZCBQUy8yIG1vdXNlIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IE9uZSBMYXB0b3AgUGVyIENoaWxkCisgKiBBdXRob3JzOgorICogICBaZXBoYW5pYWggRS4gSHVsbAorICogICBBbmRyZXMgU2Fsb21vbiA8ZGlsaW5nZXJAZGViaWFuLm9yZz4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBwYXJ0bHkgYmFzZWQgb24gdGhlIEFMUFMgZHJpdmVyLCB3aGljaCBpczoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgTmVpbCBCcm93biA8bmVpbGJAY3NlLnVuc3cuZWR1LmF1PgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUgUGV0ZXIgT3N0ZXJsdW5kIDxwZXRlcm8yQHRlbGlhLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBEbWl0cnkgVG9yb2tob3YgPGR0b3JAbWFpbC5ydT4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyoKKyAqIFRoZSBzcGVjIGZyb20gQUxQUyBpcyBhdmFpbGFibGUgZnJvbQorICogPGh0dHA6Ly93aWtpLmxhcHRvcC5vcmcvZ28vVG91Y2hfUGFkL1RhYmxldD4uICBJdCByZWZlcnMgdG8gdGhpcworICogZGV2aWNlIGFzIEhHUEsgKEh5YnJpZCBHUywgUFQsIGFuZCBLZXltYXRyaXgpLgorICoKKyAqIFRoZSBlYXJsaWVzdCB2ZXJzaW9ucyBvZiB0aGUgZGV2aWNlIGhhZCBzaW11bHRhbmVvdXMgcmVwb3J0aW5nOyB0aGF0CisgKiB3YXMgcmVtb3ZlZC4gIEFmdGVyIHRoYXQsIHRoZSBkZXZpY2UgdXNlZCB0aGUgQWR2YW5jZWQgTW9kZSBHUy9QVCBzdHJlYW1pbmcKKyAqIHN0dWZmLiAgVGhhdCB0dXJuZWQgb3V0IHRvIGJlIHRvbyBidWdneSB0byBzdXBwb3J0LCBzbyB3ZSd2ZSBmaW5hbGx5CisgKiBzd2l0Y2hlZCB0byBNb3VzZSBNb2RlICh3aGljaCB1dGlsaXplcyBvbmx5IHRoZSBjZW50ZXIgMS8zIG9mIHRoZSB0b3VjaHBhZCkuCisgKi8KKworI2RlZmluZSBERUJVRworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9saWJwczIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9vbHBjLmg+CisKKyNpbmNsdWRlICJwc21vdXNlLmgiCisjaW5jbHVkZSAiaGdway5oIgorCitzdGF0aWMgaW50IHRwZGVidWc7Cittb2R1bGVfcGFyYW0odHBkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModHBkZWJ1ZywgImVuYWJsZSBkZWJ1Z2dpbmcsIGR1bXBpbmcgcGFja2V0cyB0byBLRVJOX0RFQlVHLiIpOworCitzdGF0aWMgaW50IHJlY2FsaWJfZGVsdGEgPSAxMDA7Cittb2R1bGVfcGFyYW0ocmVjYWxpYl9kZWx0YSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVjYWxpYl9kZWx0YSwKKwkicGFja2V0cyBjb250YWluaW5nIGEgZGVsdGEgdGhpcyBsYXJnZSB3aWxsIGNhdXNlIGEgcmVjYWxpYnJhdGlvbi4iKTsKKworLyoKKyAqIFdoZW4gdGhlIHRvdWNocGFkIGdldHMgdWx0cmEtc2Vuc2l0aXZlLCBvbmUgY2FuIGtlZXAgdGhlaXIgZmluZ2VyIDEvMiIKKyAqIGFib3ZlIHRoZSBwYWQgYW5kIHN0aWxsIGhhdmUgaXQgc2VuZCBwYWNrZXRzLiAgVGhpcyBjYXVzZXMgYSBqdW1wIGN1cnNvcgorICogd2hlbiBvbmUgcGxhY2VzIHRoZWlyIGZpbmdlciBvbiB0aGUgcGFkLiAgV2UgY2FuIHByb2JhYmx5IGRldGVjdCB0aGUKKyAqIGp1bXAgYXMgd2Ugc2VlIGEgbGFyZ2UgZGVsdGFzICg+PSAxMDBweCkuICBJbiBtb3VzZSBtb2RlLCBJJ3ZlIGJlZW4KKyAqIHVuYWJsZSB0byBldmVuIGNvbWUgY2xvc2UgdG8gMTAwcHggZGVsdGFzIGR1cmluZyBub3JtYWwgdXNhZ2UsIHNvIEkgdGhpbmsKKyAqIHRoaXMgdGhyZXNob2xkIGlzIHNhZmUuICBJZiBhIGxhcmdlIGRlbHRhIG9jY3VycywgdHJpZ2dlciBhIHJlY2FsaWJyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGhncGtfanVtcHlfaGFjayhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHgsIGludCB5KQoreworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCisJaWYgKGFicyh4KSA+IHJlY2FsaWJfZGVsdGEgfHwgYWJzKHkpID4gcmVjYWxpYl9kZWx0YSkgeworCQloZ3BrX2Vycihwc21vdXNlLCAiPiVkcHgganVtcCBkZXRlY3RlZCAoJWQsJWQpXG4iLAorCQkJCXJlY2FsaWJfZGVsdGEsIHgsIHkpOworCQkvKiBNeSBjYXIgZ2V0cyBmb3J0eSByb2RzIHRvIHRoZSBob2dzaGVhZCBhbmQgdGhhdCdzIHRoZQorCQkgKiB3YXkgSSBsaWtlcyBpdCEgKi8KKwkJcHNtb3VzZV9xdWV1ZV93b3JrKHBzbW91c2UsICZwcml2LT5yZWNhbGliX3dxLAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOworCX0KK30KKworLyoKKyAqIFdlIGhhdmUgbm8gaWRlYSB3aHkgdGhpcyBwYXJ0aWN1bGFyIGhhcmR3YXJlIGJ1ZyBvY2N1cnMuICBUaGUgdG91Y2hwYWQKKyAqIHdpbGwgcmFuZG9tbHkgc3RhcnQgc3Bld2luZyBwYWNrZXRzIHdpdGhvdXQgYW55dGhpbmcgdG91Y2hpbmcgdGhlCisgKiBwYWQuICBUaGlzIHdvdWxkbid0IG5lY2Vzc2FyaWx5IGJlIGJhZCwgYnV0IGl0J3MgaW5kaWNhdGl2ZSBvZiBhCisgKiBzZXZlcmVseSBtaXNjYWxpYnJhdGVkIHBhZDsgYXR0ZW1wdGluZyB0byB1c2UgdGhlIHRvdWNocGFkIHdoaWxlIGl0J3MKKyAqIHNwZXdpbmcgbWVhbnMgdGhlIGN1cnNvciB3aWxsIGp1bXAgYWxsIG92ZXIgdGhlIHBsYWNlLCBhbmQgYWN0ICJkcnVuayIuCisgKgorICogVGhlIHBhY2tldHMgdGhhdCBhcmUgc3Bld2VkIHRlbmQgdG8gYWxsIGhhdmUgZGVsdGFzIGJldHdlZW4gLTIgYW5kIDIsIGFuZAorICogdGhlIGN1cnNvciB3aWxsIG1vdmUgYXJvdW5kIHdpdGhvdXQgcmVhbGx5IGdvaW5nIHZlcnkgZmFyLiAgSXQgd2lsbAorICogdGVuZCB0byBlbmQgdXAgaW4gdGhlIHNhbWUgbG9jYXRpb247IGlmIHdlIHRhbGx5IHVwIHRoZSBjaGFuZ2VzIG92ZXIKKyAqIDEwMCBwYWNrZXRzLCB3ZSBlbmQgdXAgdy8gYSBmaW5hbCBkZWx0YSBvZiBjbG9zZSB0byAwLiAgVGhpcyBoYXBwZW5zCisgKiBwcmV0dHkgcmVndWxhcmx5IHdoZW4gdGhlIHRvdWNocGFkIGlzIHNwZXdpbmcsIGFuZCBpcyBwcmV0dHkgaGFyZCB0bworICogbWFudWFsbHkgdHJpZ2dlciAoYXQgbGVhc3QgZm9yICpteSogZmluZ2VycykuICBTbywgaXQgbWFrZXMgYSBwZXJmZWN0CisgKiBzY2hlbWUgZm9yIGRldGVjdGluZyBzcGV3cy4KKyAqLworc3RhdGljIHZvaWQgaGdwa19zcGV3aW5nX2hhY2soc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCisJCQkgICAgICBpbnQgbCwgaW50IHIsIGludCB4LCBpbnQgeSkKK3sKKwlzdHJ1Y3QgaGdwa19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKKworCS8qIGlnbm9yZSBidXR0b24gcHJlc3MgcGFja2V0czsgbWFueSBpbiBhIHJvdyBjb3VsZCB0cmlnZ2VyCisJICogYSBmYWxzZS1wb3NpdGl2ZSEgKi8KKwlpZiAobCB8fCByKQorCQlyZXR1cm47CisKKwlwcml2LT54X3RhbGx5ICs9IHg7CisJcHJpdi0+eV90YWxseSArPSB5OworCisJaWYgKCsrcHJpdi0+Y291bnQgPiAxMDApIHsKKwkJaWYgKGFicyhwcml2LT54X3RhbGx5KSA8IDMgJiYgYWJzKHByaXYtPnlfdGFsbHkpIDwgMykgeworCQkJaGdwa19kYmcocHNtb3VzZSwgInBhY2tldCBzcGV3IGRldGVjdGVkICglZCwlZClcbiIsCisJCQkJIHByaXYtPnhfdGFsbHksIHByaXYtPnlfdGFsbHkpOworCQkJcHNtb3VzZV9xdWV1ZV93b3JrKHBzbW91c2UsICZwcml2LT5yZWNhbGliX3dxLAorCQkJCQkgICBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKKwkJfQorCQkvKiByZXNldCBldmVyeSAxMDAgcGFja2V0cyAqLworCQlwcml2LT5jb3VudCA9IDA7CisJCXByaXYtPnhfdGFsbHkgPSAwOworCQlwcml2LT55X3RhbGx5ID0gMDsKKwl9Cit9CisKKy8qCisgKiBIR1BLIE1vdXNlIE1vZGUgZm9ybWF0IChzdGFuZGFyZCBtb3VzZSBmb3JtYXQsIHNhbnMgbWlkZGxlIGJ1dHRvbikKKyAqCisgKiBieXRlIDA6CXktb3Zlcgl4LW92ZXIJeS1uZWcJeC1uZWcJMQkwCXN3cglzd2wKKyAqIGJ5dGUgMToJeDcJeDYJeDUJeDQJeDMJeDIJeDEJeDAKKyAqIGJ5dGUgMjoJeTcJeTYJeTUJeTQJeTMJeTIJeTEJeTAKKyAqCisgKiBzd3Ivc3dsIGFyZSB0aGUgbGVmdC9yaWdodCBidXR0b25zLgorICogeC1uZWcveS1uZWcgYXJlIHRoZSB4IGFuZCB5IGRlbHRhIG5lZ2F0aXZlIGJpdHMKKyAqIHgtb3Zlci95LW92ZXIgYXJlIHRoZSB4IGFuZCB5IG92ZXJmbG93IGJpdHMKKyAqLworc3RhdGljIGludCBoZ3BrX3ZhbGlkYXRlX2J5dGUodW5zaWduZWQgY2hhciAqcGFja2V0KQoreworCXJldHVybiAocGFja2V0WzBdICYgMHgwQykgPT0gMHgwODsKK30KKworc3RhdGljIHZvaWQgaGdwa19wcm9jZXNzX3BhY2tldChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBwc21vdXNlLT5kZXY7CisJdW5zaWduZWQgY2hhciAqcGFja2V0ID0gcHNtb3VzZS0+cGFja2V0OworCWludCB4LCB5LCBsZWZ0LCByaWdodDsKKworCWxlZnQgPSBwYWNrZXRbMF0gJiAxOworCXJpZ2h0ID0gKHBhY2tldFswXSA+PiAxKSAmIDE7CisKKwl4ID0gcGFja2V0WzFdIC0gKChwYWNrZXRbMF0gPDwgNCkgJiAweDEwMCk7CisJeSA9ICgocGFja2V0WzBdIDw8IDMpICYgMHgxMDApIC0gcGFja2V0WzJdOworCisJaGdwa19qdW1weV9oYWNrKHBzbW91c2UsIHgsIHkpOworCWhncGtfc3Bld2luZ19oYWNrKHBzbW91c2UsIGxlZnQsIHJpZ2h0LCB4LCB5KTsKKworCWlmICh0cGRlYnVnKQorCQloZ3BrX2RiZyhwc21vdXNlLCAibD0lZCByPSVkIHg9JWQgeT0lZFxuIiwgbGVmdCwgcmlnaHQsIHgsIHkpOworCisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCBsZWZ0KTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCByaWdodCk7CisKKwlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1gsIHgpOworCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgeSk7CisKKwlpbnB1dF9zeW5jKGRldik7Cit9CisKK3N0YXRpYyBwc21vdXNlX3JldF90IGhncGtfcHJvY2Vzc19ieXRlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCisJaWYgKGhncGtfdmFsaWRhdGVfYnl0ZShwc21vdXNlLT5wYWNrZXQpKSB7CisJCWhncGtfZGJnKHBzbW91c2UsICIlczogKCVkKSAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJCQlfX2Z1bmNfXywgcHNtb3VzZS0+cGt0Y250LCBwc21vdXNlLT5wYWNrZXRbMF0sCisJCQkJcHNtb3VzZS0+cGFja2V0WzFdLCBwc21vdXNlLT5wYWNrZXRbMl0pOworCQlyZXR1cm4gUFNNT1VTRV9CQURfREFUQTsKKwl9CisKKwlpZiAocHNtb3VzZS0+cGt0Y250ID49IHBzbW91c2UtPnBrdHNpemUpIHsKKwkJaGdwa19wcm9jZXNzX3BhY2tldChwc21vdXNlKTsKKwkJcmV0dXJuIFBTTU9VU0VfRlVMTF9QQUNLRVQ7CisJfQorCisJaWYgKHByaXYtPnJlY2FsaWJfd2luZG93KSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBwcml2LT5yZWNhbGliX3dpbmRvdykpIHsKKwkJCS8qCisJCQkgKiB1Z2gsIGdvdCBhIHBhY2tldCBpbnNpZGUgb3VyIHJlY2FsaWJyYXRpb24KKwkJCSAqIHdpbmRvdywgc2NoZWR1bGUgYW5vdGhlciByZWNhbGlicmF0aW9uLgorCQkJICovCisJCQloZ3BrX2RiZyhwc21vdXNlLAorCQkJCSAicGFja2V0IGluc2lkZSBjYWxpYnJhdGlvbiB3aW5kb3csICIKKwkJCQkgInF1ZXVlaW5nIGFub3RoZXIgcmVjYWxpYnJhdGlvblxuIik7CisJCQlwc21vdXNlX3F1ZXVlX3dvcmsocHNtb3VzZSwgJnByaXYtPnJlY2FsaWJfd3EsCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOworCQl9CisJCXByaXYtPnJlY2FsaWJfd2luZG93ID0gMDsKKwl9CisKKwlyZXR1cm4gUFNNT1VTRV9HT09EX0RBVEE7Cit9CisKK3N0YXRpYyBpbnQgaGdwa19mb3JjZV9yZWNhbGlicmF0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCisJLyogQy1zZXJpZXMgdG91Y2hwYWRzIGFkZGVkIHRoZSByZWNhbGlicmF0ZSBjb21tYW5kICovCisJaWYgKHBzbW91c2UtPm1vZGVsIDwgSEdQS19NT0RFTF9DKQorCQlyZXR1cm4gMDsKKworCS8qIHdlIGRvbid0IHdhbnQgdG8gcmFjZSB3aXRoIHRoZSBpcnEgaGFuZGxlciwgbm9yIHdpdGggcmVzeW5jcyAqLworCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfSU5JVElBTElaSU5HKTsKKworCS8qIHN0YXJ0IGJ5IHJlc2V0dGluZyB0aGUgZGV2aWNlICovCisJcHNtb3VzZV9yZXNldChwc21vdXNlKTsKKworCS8qIHNlbmQgdGhlIHJlY2FsaWJyYXRlIHJlcXVlc3QgKi8KKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCAweGY1KSB8fAorCSAgICBwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIDB4ZjUpIHx8CisJICAgIHBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgMHhlNikgfHwKKwkgICAgcHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCAweGY1KSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJLyogYWNjb3JkaW5nIHRvIEFMUFMsIDE1MG1TIGlzIHJlcXVpcmVkIGZvciByZWNhbGlicmF0aW9uICovCisJbXNsZWVwKDE1MCk7CisKKwkvKiBYWFg6IElmIGEgZmluZ2VyIGlzIGRvd24gZHVyaW5nIHRoaXMgZGVsYXksIHJlY2FsaWJyYXRpb24gd2lsbAorCSAqIGRldGVjdCBjYXBhY2l0YW5jZSBpbmNvcnJlY3RseS4gIFRoaXMgaXMgYSBoYXJkd2FyZSBidWcsIGFuZAorCSAqIHdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBkZWFsIHdpdGggaXQuICBUaGUgMnMgd2luZG93IHN0dWZmCisJICogKGJlbG93KSBpcyBvdXIgYmVzdCBvcHRpb24gZm9yIG5vdy4KKwkgKi8KKworCWlmIChwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIFBTTU9VU0VfQ01EX0VOQUJMRSkpCisJCXJldHVybiAtMTsKKworCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfQUNUSVZBVEVEKTsKKworCS8qIEFmdGVyIHdlIHJlY2FsaWJyYXRlLCB3ZSBzaG91bGRuJ3QgZ2V0IGFueSBwYWNrZXRzIGZvciAycy4gIElmCisJICogd2UgZG8sIGl0J3MgbGlrZWx5IHRoYXQgc29tZW9uZSdzIGZpbmdlciB3YXMgb24gdGhlIHRvdWNocGFkLgorCSAqIElmIHNvbWVvbmUncyBmaW5nZXIgKndhcyogb24gdGhlIHRvdWNocGFkLCBpdCdzIHByb2JhYmx5CisJICogbWlzY2FsaWJyYXRlZC4gIFNvLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW5vdGhlciByZWNhbGlicmF0aW9uCisJICovCisJcHJpdi0+cmVjYWxpYl93aW5kb3cgPSBqaWZmaWVzICsgIG1zZWNzX3RvX2ppZmZpZXMoMjAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMga2lsbHMgcG93ZXIgdG8gdGhlIHRvdWNocGFkOyBhY2NvcmRpbmcgdG8gQUxQUywgY3VycmVudCBjb25zdW1wdGlvbgorICogZ29lcyBkb3duIHRvIDUwdUEgYWZ0ZXIgcnVubmluZyB0aGlzLiAgVG8gdHVybiBwb3dlciBiYWNrIG9uLCB3ZSBkcml2ZQorICogTVMtREFUIGxvdy4KKyAqLworc3RhdGljIGludCBoZ3BrX3RvZ2dsZV9wb3dlcihzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OworCWludCB0aW1lbzsKKworCS8qIEFkZGVkIG9uIEQtc2VyaWVzIHRvdWNocGFkcyAqLworCWlmIChwc21vdXNlLT5tb2RlbCA8IEhHUEtfTU9ERUxfRCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZW5hYmxlKSB7CisJCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfSU5JVElBTElaSU5HKTsKKworCQkvKgorCQkgKiBTZW5kaW5nIGEgYnl0ZSB3aWxsIGRyaXZlIE1TLURBVCBsb3c7IHRoaXMgd2lsbCB3YWtlIHVwCisJCSAqIHRoZSBjb250cm9sbGVyLiAgT25jZSB3ZSBnZXQgYW4gQUNLIGJhY2sgZnJvbSBpdCwgaXQKKwkJICogbWVhbnMgd2UgY2FuIGNvbnRpbnVlIHdpdGggdGhlIHRvdWNocGFkIHJlLWluaXQuICBBTFBTCisJCSAqIHRlbGxzIHVzIHRoYXQgMXMgc2hvdWxkIGJlIGxvbmcgZW5vdWdoLCBzbyBzZXQgdGhhdCBhcworCQkgKiB0aGUgdXBwZXIgYm91bmQuCisJCSAqLworCQlmb3IgKHRpbWVvID0gMjA7IHRpbWVvID4gMDsgdGltZW8tLSkgeworCQkJaWYgKCFwczJfc2VuZGJ5dGUoJnBzbW91c2UtPnBzMmRldiwKKwkJCQkJUFNNT1VTRV9DTURfRElTQUJMRSwgMjApKQorCQkJCWJyZWFrOworCQkJbXNsZWVwKDUwKTsKKwkJfQorCisJCXBzbW91c2VfcmVzZXQocHNtb3VzZSk7CisKKwkJLyogc2hvdWxkIGJlIGFsbCBzZXQsIGVuYWJsZSB0aGUgdG91Y2hwYWQgKi8KKwkJcHMyX2NvbW1hbmQoJnBzbW91c2UtPnBzMmRldiwgTlVMTCwgUFNNT1VTRV9DTURfRU5BQkxFKTsKKwkJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9BQ1RJVkFURUQpOworCisJfSBlbHNlIHsKKwkJaGdwa19kYmcocHNtb3VzZSwgIlBvd2VyaW5nIG9mZiB0b3VjaHBhZC5cbiIpOworCQlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0lHTk9SRSk7CisKKwkJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgMHhlYykgfHwKKwkJICAgIHBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgMHhlYykgfHwKKwkJICAgIHBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgMHhlYSkpIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCS8qIHByb2JhYmx5IHdvbid0IHNlZSBhbiBBQ0ssIHRoZSB0b3VjaHBhZCB3aWxsIGJlIG9mZiAqLworCQlwczJfc2VuZGJ5dGUoJnBzbW91c2UtPnBzMmRldiwgMHhlYywgMjApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhncGtfcG9sbChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwkvKiBXZSBjYW4ndCBwb2xsLCBzbyBhbHdheXMgcmV0dXJuIGZhaWx1cmUuICovCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGhncGtfcmVjb25uZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCS8qIER1cmluZyBzdXNwZW5kL3Jlc3VtZSB0aGUgcHMyIHJhaWxzIHJlbWFpbiBwb3dlcmVkLiAgV2UgZG9uJ3Qgd2FudAorCSAqIHRvIGRvIGEgcmVzZXQgYmVjYXVzZSBpdCdzIGZsdXNoIGRhdGEgb3V0IG9mIGJ1ZmZlcnM7IGhvd2V2ZXIsCisJICogZWFybGllciBwcm90b3R5cGVzIChCMSkgaGFkIHNvbWUgYnJva2VubmVzcyB0aGF0IHJlcXVpcmVkIGEgcmVzZXQuICovCisJaWYgKG9scGNfYm9hcmRfYXRfbGVhc3Qob2xwY19ib2FyZCgweGIyKSkpCisJCWlmIChwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCAhPQorCQkJCVBNX0VWRU5UX09OKQorCQkJcmV0dXJuIDA7CisKKwlwc21vdXNlX3Jlc2V0KHBzbW91c2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhncGtfc2hvd19wb3dlcmVkKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLCBjaGFyICpidWYpCit7CisJc3RydWN0IGhncGtfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+cG93ZXJlZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhncGtfc2V0X3Bvd2VyZWQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGhncGtfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpbnQgZXJyOworCisJZXJyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKTsKKwlpZiAoZXJyIHx8IHZhbHVlID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmFsdWUgIT0gcHJpdi0+cG93ZXJlZCkgeworCQkvKgorCQkgKiBoZ3BrX3RvZ2dsZV9wb3dlciB3aWxsIGRlYWwgdy8gc3RhdGUgc28KKwkJICogd2UncmUgbm90IHJhY2luZyB3LyBpcnEKKwkJICovCisJCWVyciA9IGhncGtfdG9nZ2xlX3Bvd2VyKHBzbW91c2UsIHZhbHVlKTsKKwkJaWYgKCFlcnIpCisJCQlwcml2LT5wb3dlcmVkID0gdmFsdWU7CisJfQorCisJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OworfQorCitfX1BTTU9VU0VfREVGSU5FX0FUVFIocG93ZXJlZCwgU19JV1VTUiB8IFNfSVJVR08sIE5VTEwsCisJCSAgICAgIGhncGtfc2hvd19wb3dlcmVkLCBoZ3BrX3NldF9wb3dlcmVkLCAwKTsKKworc3RhdGljIHZvaWQgaGdwa19kaXNjb25uZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKKwkJCSAgICZwc21vdXNlX2F0dHJfcG93ZXJlZC5kYXR0cik7CisJcHNtb3VzZV9yZXNldChwc21vdXNlKTsKKwlrZnJlZShwcml2KTsKK30KKworc3RhdGljIHZvaWQgaGdwa19yZWNhbGliX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsgKncgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGhncGtfZGF0YSAqcHJpdiA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgaGdwa19kYXRhLCByZWNhbGliX3dxKTsKKwlzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSA9IHByaXYtPnBzbW91c2U7CisKKwloZ3BrX2RiZyhwc21vdXNlLCAicmVjYWxpYnJhdGluZyB0b3VjaHBhZC4uXG4iKTsKKworCWlmIChoZ3BrX2ZvcmNlX3JlY2FsaWJyYXRlKHBzbW91c2UpKQorCQloZ3BrX2Vycihwc21vdXNlLCAicmVjYWxpYnJhdGlvbiBmYWlsZWQhXG4iKTsKK30KKworc3RhdGljIGludCBoZ3BrX3JlZ2lzdGVyKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHBzbW91c2UtPmRldjsKKwlpbnQgZXJyOworCisJLyogdW5zZXQgdGhlIHRoaW5ncyB0aGF0IHBzbW91c2UtYmFzZSBzZXRzIHdoaWNoIHdlIGRvbid0IGhhdmUgKi8KKwlfX2NsZWFyX2JpdChCVE5fTUlERExFLCBkZXYtPmtleWJpdCk7CisKKwkvKiBzZXQgdGhlIHRoaW5ncyB3ZSBkbyBoYXZlICovCisJX19zZXRfYml0KEVWX0tFWSwgZGV2LT5ldmJpdCk7CisJX19zZXRfYml0KEVWX1JFTCwgZGV2LT5ldmJpdCk7CisKKwlfX3NldF9iaXQoUkVMX1gsIGRldi0+cmVsYml0KTsKKwlfX3NldF9iaXQoUkVMX1ksIGRldi0+cmVsYml0KTsKKworCV9fc2V0X2JpdChCVE5fTEVGVCwgZGV2LT5rZXliaXQpOworCV9fc2V0X2JpdChCVE5fUklHSFQsIGRldi0+a2V5Yml0KTsKKworCS8qIHJlZ2lzdGVyIGhhbmRsZXJzICovCisJcHNtb3VzZS0+cHJvdG9jb2xfaGFuZGxlciA9IGhncGtfcHJvY2Vzc19ieXRlOworCXBzbW91c2UtPnBvbGwgPSBoZ3BrX3BvbGw7CisJcHNtb3VzZS0+ZGlzY29ubmVjdCA9IGhncGtfZGlzY29ubmVjdDsKKwlwc21vdXNlLT5yZWNvbm5lY3QgPSBoZ3BrX3JlY29ubmVjdDsKKwlwc21vdXNlLT5wa3RzaXplID0gMzsKKworCS8qIERpc2FibGUgdGhlIGlkbGUgcmVzeW5jLiAqLworCXBzbW91c2UtPnJlc3luY190aW1lID0gMDsKKwkvKiBSZXNldCBhZnRlciBhIGxvdCBvZiBiYWQgYnl0ZXMuICovCisJcHNtb3VzZS0+cmVzZXRhZnRlciA9IDEwMjQ7CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAorCQkJCSAmcHNtb3VzZV9hdHRyX3Bvd2VyZWQuZGF0dHIpOworCWlmIChlcnIpCisJCWhncGtfZXJyKHBzbW91c2UsICJGYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGF0dHJpYnV0ZVxuIik7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgaGdwa19pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXY7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhncGtfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJZ290byBhbGxvY19mYWlsOworCisJcHNtb3VzZS0+cHJpdmF0ZSA9IHByaXY7CisJcHJpdi0+cHNtb3VzZSA9IHBzbW91c2U7CisJcHJpdi0+cG93ZXJlZCA9IDE7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnJlY2FsaWJfd3EsIGhncGtfcmVjYWxpYl93b3JrKTsKKworCWVyciA9IHBzbW91c2VfcmVzZXQocHNtb3VzZSk7CisJaWYgKGVycikKKwkJZ290byBpbml0X2ZhaWw7CisKKwllcnIgPSBoZ3BrX3JlZ2lzdGVyKHBzbW91c2UpOworCWlmIChlcnIpCisJCWdvdG8gaW5pdF9mYWlsOworCisJcmV0dXJuIDA7CisKK2luaXRfZmFpbDoKKwlrZnJlZShwcml2KTsKK2FsbG9jX2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGVudW0gaGdwa19tb2RlbF90IGhncGtfZ2V0X21vZGVsKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CisJdW5zaWduZWQgY2hhciBwYXJhbVszXTsKKworCS8qIEU3LCBFNywgRTcsIEU5IGdldHMgdXMgYSAzIGJ5dGUgaWRlbnRpZmllciAqLworCWlmIChwczJfY29tbWFuZChwczJkZXYsICBOVUxMLCBQU01PVVNFX0NNRF9TRVRTQ0FMRTIxKSB8fAorCSAgICBwczJfY29tbWFuZChwczJkZXYsICBOVUxMLCBQU01PVVNFX0NNRF9TRVRTQ0FMRTIxKSB8fAorCSAgICBwczJfY29tbWFuZChwczJkZXYsICBOVUxMLCBQU01PVVNFX0NNRF9TRVRTQ0FMRTIxKSB8fAorCSAgICBwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9HRVRJTkZPKSkgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwloZ3BrX2RiZyhwc21vdXNlLCAiSUQ6ICUwMnggJTAyeCAlMDJ4IiwgcGFyYW1bMF0sIHBhcmFtWzFdLCBwYXJhbVsyXSk7CisKKwkvKiBIR1BLIHNpZ25hdHVyZTogMHg2NywgMHgwMCwgMHg8bW9kZWw+ICovCisJaWYgKHBhcmFtWzBdICE9IDB4NjcgfHwgcGFyYW1bMV0gIT0gMHgwMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwloZ3BrX2luZm8ocHNtb3VzZSwgIk9MUEMgdG91Y2hwYWQgcmV2aXNpb24gMHgleFxuIiwgcGFyYW1bMl0pOworCisJcmV0dXJuIHBhcmFtWzJdOworfQorCitpbnQgaGdwa19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK3sKKwlpbnQgdmVyc2lvbjsKKworCXZlcnNpb24gPSBoZ3BrX2dldF9tb2RlbChwc21vdXNlKTsKKwlpZiAodmVyc2lvbiA8IDApCisJCXJldHVybiB2ZXJzaW9uOworCisJaWYgKHNldF9wcm9wZXJ0aWVzKSB7CisJCXBzbW91c2UtPnZlbmRvciA9ICJBTFBTIjsKKwkJcHNtb3VzZS0+bmFtZSA9ICJIR1BLIjsKKwkJcHNtb3VzZS0+bW9kZWwgPSB2ZXJzaW9uOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGIyYTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIE9MUEMgSEdQSyAoWE8tMSkgdG91Y2hwYWQgUFMvMiBtb3VzZSBkcml2ZXIKKyAqLworCisjaWZuZGVmIF9IR1BLX0gKKyNkZWZpbmUgX0hHUEtfSAorCitlbnVtIGhncGtfbW9kZWxfdCB7CisJSEdQS19NT0RFTF9QUkVBID0gMHgwYSwJLyogcHJlLUIxcyAqLworCUhHUEtfTU9ERUxfQSA9IDB4MTQsCS8qIGZvdW5kIG9uIEIxcywgUFQgZGlzYWJsZWQgaW4gaGFyZHdhcmUgKi8KKwlIR1BLX01PREVMX0IgPSAweDI4LAkvKiBCMnMsIGhhcyBjYXBhY2l0YW5jZSBpc3N1ZXMgKi8KKwlIR1BLX01PREVMX0MgPSAweDNjLAorCUhHUEtfTU9ERUxfRCA9IDB4NTAsCS8qIEMxLCBtYXNzIHByb2R1Y3Rpb24gKi8KK307CisKK3N0cnVjdCBoZ3BrX2RhdGEgeworCXN0cnVjdCBwc21vdXNlICpwc21vdXNlOworCWludCBwb3dlcmVkOworCWludCBjb3VudCwgeF90YWxseSwgeV90YWxseTsJLyogaGFyZHdhcmUgd29ya2Fyb3VuZCBzdHVmZiAqLworCXVuc2lnbmVkIGxvbmcgcmVjYWxpYl93aW5kb3c7CisJc3RydWN0IGRlbGF5ZWRfd29yayByZWNhbGliX3dxOworfTsKKworI2RlZmluZSBoZ3BrX2RiZyhwc21vdXNlLCBmb3JtYXQsIGFyZy4uLikJCVwKKwlkZXZfZGJnKCYocHNtb3VzZSktPnBzMmRldi5zZXJpby0+ZGV2LCBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgaGdwa19lcnIocHNtb3VzZSwgZm9ybWF0LCBhcmcuLi4pCQlcCisJZGV2X2VycigmKHBzbW91c2UpLT5wczJkZXYuc2VyaW8tPmRldiwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGhncGtfaW5mbyhwc21vdXNlLCBmb3JtYXQsIGFyZy4uLikJCVwKKwlkZXZfaW5mbygmKHBzbW91c2UpLT5wczJkZXYuc2VyaW8tPmRldiwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGhncGtfd2Fybihwc21vdXNlLCBmb3JtYXQsIGFyZy4uLikJCVwKKwlkZXZfd2FybigmKHBzbW91c2UpLT5wczJkZXYuc2VyaW8tPmRldiwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGhncGtfbm90aWNlKHBzbW91c2UsIGZvcm1hdCwgYXJnLi4uKQkJXAorCWRldl9ub3RpY2UoJihwc21vdXNlKS0+cHMyZGV2LnNlcmlvLT5kZXYsIGZvcm1hdCwgIyMgYXJnKQorCisjaWZkZWYgQ09ORklHX01PVVNFX1BTMl9PTFBDCitpbnQgaGdwa19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcyk7CitpbnQgaGdwa19pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBoZ3BrX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKQoreworCXJldHVybiAtRU5PREVWOworfQorc3RhdGljIGlubGluZSBpbnQgaGdwa19pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXJldHVybiAtRU5PREVWOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKaW5kZXggMGM1NjYwZC4uMzkwZjFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCkBAIC0xNTcsMTAgKzE1Nyw4IEBACiBzdGF0aWMgc3NpemVfdCBwczJwcF9hdHRyX3NldF9zbWFydHNjcm9sbChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQljaGFyICpyZXN0OwogCi0JdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZyZXN0LCAxMCk7Ci0JaWYgKCpyZXN0IHx8IHZhbHVlID4gMSkKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKSB8fCB2YWx1ZSA+IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcHMycHBfc2V0X3NtYXJ0c2Nyb2xsKHBzbW91c2UsIHZhbHVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCmluZGV4IGY1YTZiZTEuLjEyNmU5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgInN5bmFwdGljcy5oIgogI2luY2x1ZGUgImxvZ2lwczJwcC5oIgogI2luY2x1ZGUgImFscHMuaCIKKyNpbmNsdWRlICJoZ3BrLmgiCiAjaW5jbHVkZSAibGlmZWJvb2suaCIKICNpbmNsdWRlICJ0cmFja3BvaW50LmgiCiAjaW5jbHVkZSAidG91Y2hraXRfcHMyLmgiCkBAIC0yMDEsNiArMjAyLDEyIEBACiAJcmV0dXJuIFBTTU9VU0VfRlVMTF9QQUNLRVQ7CiB9CiAKK3ZvaWQgcHNtb3VzZV9xdWV1ZV93b3JrKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrLAorCQl1bnNpZ25lZCBsb25nIGRlbGF5KQoreworCXF1ZXVlX2RlbGF5ZWRfd29yayhrcHNtb3VzZWRfd3EsIHdvcmssIGRlbGF5KTsKK30KKwogLyoKICAqIF9fcHNtb3VzZV9zZXRfc3RhdGUoKSBzZXRzIG5ldyBwc21vdXNlIHN0YXRlIGFuZCByZXNldHMgYWxsIGZsYWdzLgogICovCkBAIC0yMjAsNyArMjI3LDcgQEAKICAqIGlzIG5vdCBhIGNvbmNlcm4uCiAgKi8KIAotc3RhdGljIHZvaWQgcHNtb3VzZV9zZXRfc3RhdGUoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGVudW0gcHNtb3VzZV9zdGF0ZSBuZXdfc3RhdGUpCit2b2lkIHBzbW91c2Vfc2V0X3N0YXRlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBlbnVtIHBzbW91c2Vfc3RhdGUgbmV3X3N0YXRlKQogewogCXNlcmlvX3BhdXNlX3J4KHBzbW91c2UtPnBzMmRldi5zZXJpbyk7CiAJX19wc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBuZXdfc3RhdGUpOwpAQCAtMzA1LDcgKzMxMiw3IEBACiAJCSAgICAgICBwc21vdXNlLT5uYW1lLCBwc21vdXNlLT5waHlzLCBwc21vdXNlLT5wa3RjbnQpOwogCQlwc21vdXNlLT5iYWRieXRlID0gcHNtb3VzZS0+cGFja2V0WzBdOwogCQlfX3BzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfUkVTWU5DSU5HKTsKLQkJcXVldWVfd29yayhrcHNtb3VzZWRfd3EsICZwc21vdXNlLT5yZXN5bmNfd29yayk7CisJCXBzbW91c2VfcXVldWVfd29yayhwc21vdXNlLCAmcHNtb3VzZS0+cmVzeW5jX3dvcmssIDApOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTM0Miw3ICszNDksNyBAQAogCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHBzbW91c2UtPmxhc3QgKyBwc21vdXNlLT5yZXN5bmNfdGltZSAqIEhaKSkgewogCQlwc21vdXNlLT5iYWRieXRlID0gcHNtb3VzZS0+cGFja2V0WzBdOwogCQlfX3BzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfUkVTWU5DSU5HKTsKLQkJcXVldWVfd29yayhrcHNtb3VzZWRfd3EsICZwc21vdXNlLT5yZXN5bmNfd29yayk7CisJCXBzbW91c2VfcXVldWVfd29yayhwc21vdXNlLCAmcHNtb3VzZS0+cmVzeW5jX3dvcmssIDApOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTYzMCw4ICs2MzcsMjAgQEAKIAkJfQogCX0KIAotCWlmIChtYXhfcHJvdG8gPiBQU01PVVNFX0lNRVgpIHsKKy8qCisgKiBUcnkgT0xQQyBIR1BLIHRvdWNocGFkLgorICovCisJaWYgKG1heF9wcm90byA+IFBTTU9VU0VfSU1FWCAmJgorCQkJaGdwa19kZXRlY3QocHNtb3VzZSwgc2V0X3Byb3BlcnRpZXMpID09IDApIHsKKwkJaWYgKCFzZXRfcHJvcGVydGllcyB8fCBoZ3BrX2luaXQocHNtb3VzZSkgPT0gMCkKKwkJCXJldHVybiBQU01PVVNFX0hHUEs7CisvKgorICogSW5pdCBmYWlsZWQsIHRyeSBiYXNpYyByZWxhdGl2ZSBwcm90b2NvbHMKKyAqLworCQltYXhfcHJvdG8gPSBQU01PVVNFX0lNRVg7CisJfQogCisJaWYgKG1heF9wcm90byA+IFBTTU9VU0VfSU1FWCkgewogCQlpZiAoZ2VuaXVzX2RldGVjdChwc21vdXNlLCBzZXRfcHJvcGVydGllcykgPT0gMCkKIAkJCXJldHVybiBQU01PVVNFX0dFTlBTOwogCkBAIC03NjIsNiArNzgxLDE0IEBACiAJCS5kZXRlY3QJCT0gdG91Y2hraXRfcHMyX2RldGVjdCwKIAl9LAogI2VuZGlmCisjaWZkZWYgQ09ORklHX01PVVNFX1BTMl9PTFBDCisJeworCQkudHlwZQkJPSBQU01PVVNFX0hHUEssCisJCS5uYW1lCQk9ICJPTFBDIEhHUEsiLAorCQkuYWxpYXMJCT0gImhncGsiLAorCQkuZGV0ZWN0CQk9IGhncGtfZGV0ZWN0LAorCX0sCisjZW5kaWYKIAl7CiAJCS50eXBlCQk9IFBTTU9VU0VfQ09SVFJPTiwKIAkJLm5hbWUJCT0gIkNvcnRyb25QUy8yIiwKQEAgLTkzNSw3ICs5NjIsNyBAQAogc3RhdGljIHZvaWQgcHNtb3VzZV9yZXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBwc21vdXNlICpwYXJlbnQgPSBOVUxMLCAqcHNtb3VzZSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcHNtb3VzZSwgcmVzeW5jX3dvcmspOworCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBzbW91c2UsIHJlc3luY193b3JrLndvcmspOwogCXN0cnVjdCBzZXJpbyAqc2VyaW8gPSBwc21vdXNlLT5wczJkZXYuc2VyaW87CiAJcHNtb3VzZV9yZXRfdCByYyA9IFBTTU9VU0VfR09PRF9EQVRBOwogCWludCBmYWlsZWQgPSAwLCBlbmFibGVkID0gMDsKQEAgLTExOTQsNyArMTIyMSw3IEBACiAJCWdvdG8gZXJyX2ZyZWU7CiAKIAlwczJfaW5pdCgmcHNtb3VzZS0+cHMyZGV2LCBzZXJpbyk7Ci0JSU5JVF9XT1JLKCZwc21vdXNlLT5yZXN5bmNfd29yaywgcHNtb3VzZV9yZXN5bmMpOworCUlOSVRfREVMQVlFRF9XT1JLKCZwc21vdXNlLT5yZXN5bmNfd29yaywgcHNtb3VzZV9yZXN5bmMpOwogCXBzbW91c2UtPmRldiA9IGlucHV0X2RldjsKIAlzbnByaW50Zihwc21vdXNlLT5waHlzLCBzaXplb2YocHNtb3VzZS0+cGh5cyksICIlcy9pbnB1dDAiLCBzZXJpby0+cGh5cyk7CiAKQEAgLTEzOTUsMjUgKzE0MjIsMjkgQEAKIAogCXBzbW91c2UgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7CiAKLQlpZiAocHNtb3VzZS0+c3RhdGUgPT0gUFNNT1VTRV9JR05PUkUpIHsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KKwlpZiAoYXR0ci0+cHJvdGVjdCkgeworCQlpZiAocHNtb3VzZS0+c3RhdGUgPT0gUFNNT1VTRV9JR05PUkUpIHsKKwkJCXJldHZhbCA9IC1FTk9ERVY7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KIAotCWlmIChzZXJpby0+cGFyZW50ICYmIHNlcmlvLT5pZC50eXBlID09IFNFUklPX1BTX1BTVEhSVSkgewotCQlwYXJlbnQgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpby0+cGFyZW50KTsKLQkJcHNtb3VzZV9kZWFjdGl2YXRlKHBhcmVudCk7Ci0JfQorCQlpZiAoc2VyaW8tPnBhcmVudCAmJiBzZXJpby0+aWQudHlwZSA9PSBTRVJJT19QU19QU1RIUlUpIHsKKwkJCXBhcmVudCA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvLT5wYXJlbnQpOworCQkJcHNtb3VzZV9kZWFjdGl2YXRlKHBhcmVudCk7CisJCX0KIAotCXBzbW91c2VfZGVhY3RpdmF0ZShwc21vdXNlKTsKKwkJcHNtb3VzZV9kZWFjdGl2YXRlKHBzbW91c2UpOworCX0KIAogCXJldHZhbCA9IGF0dHItPnNldChwc21vdXNlLCBhdHRyLT5kYXRhLCBidWYsIGNvdW50KTsKIAotCWlmIChyZXR2YWwgIT0gLUVOT0RFVikKLQkJcHNtb3VzZV9hY3RpdmF0ZShwc21vdXNlKTsKKwlpZiAoYXR0ci0+cHJvdGVjdCkgeworCQlpZiAocmV0dmFsICE9IC1FTk9ERVYpCisJCQlwc21vdXNlX2FjdGl2YXRlKHBzbW91c2UpOwogCi0JaWYgKHBhcmVudCkKLQkJcHNtb3VzZV9hY3RpdmF0ZShwYXJlbnQpOworCQlpZiAocGFyZW50KQorCQkJcHNtb3VzZV9hY3RpdmF0ZShwYXJlbnQpOworCX0KIAogIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZwc21vdXNlX211dGV4KTsKQEAgLTE0MzMsMTAgKzE0NjQsOCBAQAogewogCXVuc2lnbmVkIGludCAqZmllbGQgPSAodW5zaWduZWQgaW50ICopKChjaGFyICopcHNtb3VzZSArIChzaXplX3Qpb2Zmc2V0KTsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWNoYXIgKnJlc3Q7CiAKLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDEwKTsKLQlpZiAoKnJlc3QpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCh1bnNpZ25lZCBpbnQpdmFsdWUgIT0gdmFsdWUpCkBAIC0xNTQ5LDEwICsxNTc4LDggQEAKIHN0YXRpYyBzc2l6ZV90IHBzbW91c2VfYXR0cl9zZXRfcmF0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQljaGFyICpyZXN0OwogCi0JdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZyZXN0LCAxMCk7Ci0JaWYgKCpyZXN0KQorCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBzbW91c2UtPnNldF9yYXRlKHBzbW91c2UsIHZhbHVlKTsKQEAgLTE1NjIsMTAgKzE1ODksOCBAQAogc3RhdGljIHNzaXplX3QgcHNtb3VzZV9hdHRyX3NldF9yZXNvbHV0aW9uKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWNoYXIgKnJlc3Q7CiAKLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDEwKTsKLQlpZiAoKnJlc3QpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcHNtb3VzZS0+c2V0X3Jlc29sdXRpb24ocHNtb3VzZSwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UuaAppbmRleCAxMzE3YmRkLi44YjYwOGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UuaAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UuaApAQCAtMzksNyArMzksNyBAQAogCXZvaWQgKnByaXZhdGU7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2OwogCXN0cnVjdCBwczJkZXYgcHMyZGV2OwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZXN5bmNfd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHJlc3luY193b3JrOwogCWNoYXIgKnZlbmRvcjsKIAljaGFyICpuYW1lOwogCXVuc2lnbmVkIGNoYXIgcGFja2V0WzhdOwpAQCAtODksMjAgKzg5LDI0IEBACiAJUFNNT1VTRV9UUkFDS1BPSU5ULAogCVBTTU9VU0VfVE9VQ0hLSVRfUFMyLAogCVBTTU9VU0VfQ09SVFJPTiwKKwlQU01PVVNFX0hHUEssCiAJUFNNT1VTRV9BVVRPCQkvKiBUaGlzIG9uZSBzaG91bGQgYWx3YXlzIGJlIGxhc3QgKi8KIH07CiAKK3ZvaWQgcHNtb3VzZV9xdWV1ZV93b3JrKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrLAorCQl1bnNpZ25lZCBsb25nIGRlbGF5KTsKIGludCBwc21vdXNlX3NsaWNlZF9jb21tYW5kKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB1bnNpZ25lZCBjaGFyIGNvbW1hbmQpOwogaW50IHBzbW91c2VfcmVzZXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpOwordm9pZCBwc21vdXNlX3NldF9zdGF0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgZW51bSBwc21vdXNlX3N0YXRlIG5ld19zdGF0ZSk7CiB2b2lkIHBzbW91c2Vfc2V0X3Jlc29sdXRpb24oc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHVuc2lnbmVkIGludCByZXNvbHV0aW9uKTsKIAotCiBzdHJ1Y3QgcHNtb3VzZV9hdHRyaWJ1dGUgewogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRhdHRyOwogCXZvaWQgKmRhdGE7CiAJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLCBjaGFyICpidWYpOwogCXNzaXplX3QgKCpzZXQpKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLAogCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOworCWludCBwcm90ZWN0OwogfTsKICNkZWZpbmUgdG9fcHNtb3VzZV9hdHRyKGEpCWNvbnRhaW5lcl9vZigoYSksIHN0cnVjdCBwc21vdXNlX2F0dHJpYnV0ZSwgZGF0dHIpCiAKQEAgLTExMSw3ICsxMTUsNyBAQAogc3NpemVfdCBwc21vdXNlX2F0dHJfc2V0X2hlbHBlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKIAotI2RlZmluZSBQU01PVVNFX0RFRklORV9BVFRSKF9uYW1lLCBfbW9kZSwgX2RhdGEsIF9zaG93LCBfc2V0KQkJCVwKKyNkZWZpbmUgX19QU01PVVNFX0RFRklORV9BVFRSKF9uYW1lLCBfbW9kZSwgX2RhdGEsIF9zaG93LCBfc2V0LCBfcHJvdGVjdCkJXAogc3RhdGljIHNzaXplX3QgX3Nob3coc3RydWN0IHBzbW91c2UgKiwgdm9pZCAqZGF0YSwgY2hhciAqKTsJCQlcCiBzdGF0aWMgc3NpemVfdCBfc2V0KHN0cnVjdCBwc21vdXNlICosIHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsJXAogc3RhdGljIHN0cnVjdCBwc21vdXNlX2F0dHJpYnV0ZSBwc21vdXNlX2F0dHJfIyNfbmFtZSA9IHsJCQlcCkBAIC0xMjYsNiArMTMwLDEwIEBACiAJLmRhdGEJPSBfZGF0YSwJCQkJCQkJXAogCS5zaG93CT0gX3Nob3csCQkJCQkJCVwKIAkuc2V0CT0gX3NldCwJCQkJCQkJCVwKKwkucHJvdGVjdCA9IF9wcm90ZWN0LAkJCQkJCQlcCiB9CiAKKyNkZWZpbmUgUFNNT1VTRV9ERUZJTkVfQVRUUihfbmFtZSwgX21vZGUsIF9kYXRhLCBfc2hvdywgX3NldCkJXAorCQlfX1BTTU9VU0VfREVGSU5FX0FUVFIoX25hbWUsIF9tb2RlLCBfZGF0YSwgX3Nob3csIF9zZXQsIDEpCisKICNlbmRpZiAvKiBfUFNNT1VTRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCmluZGV4IDI2Yjg0NWYuLmU2OGM4MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jCkBAIC04OSwxMCArODksOCBAQAogCXN0cnVjdCB0cmFja3BvaW50X2F0dHJfZGF0YSAqYXR0ciA9IGRhdGE7CiAJdW5zaWduZWQgY2hhciAqZmllbGQgPSAodW5zaWduZWQgY2hhciAqKSgoY2hhciAqKXRwICsgYXR0ci0+ZmllbGRfb2Zmc2V0KTsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWNoYXIgKnJlc3Q7CiAKLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDEwKTsKLQlpZiAoKnJlc3QgfHwgdmFsdWUgPiAyNTUpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkgfHwgdmFsdWUgPiAyNTUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJKmZpZWxkID0gdmFsdWU7CkBAIC0xMTcsMTAgKzExNSw4IEBACiAJc3RydWN0IHRyYWNrcG9pbnRfYXR0cl9kYXRhICphdHRyID0gZGF0YTsKIAl1bnNpZ25lZCBjaGFyICpmaWVsZCA9ICh1bnNpZ25lZCBjaGFyICopKChjaGFyICopdHAgKyBhdHRyLT5maWVsZF9vZmZzZXQpOwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0JY2hhciAqcmVzdDsKIAotCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmcmVzdCwgMTApOwotCWlmICgqcmVzdCB8fCB2YWx1ZSA+IDEpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkgfHwgdmFsdWUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdHRyLT5pbnZlcnRlZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaHBfc2RjLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2hwX3NkYy5jCmluZGV4IDBkMzk1OTcuLmJmZTQ5MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaHBfc2RjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9ocF9zZGMuYwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJCQkgKiBpdCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbi4gYW5kIGJlIGxlc3MgdmVyYm9zZS4KIAkJCSAqLwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggInJlYWQgdGltZW91dCAoJWl1cykhXG4iLAotCQkJICAgICAgIHR2LnR2X3VzZWMgLSBocF9zZGMucnR2LnR2X3VzZWMpOworCQkJICAgICAgIChpbnQpKHR2LnR2X3VzZWMgLSBocF9zZGMucnR2LnR2X3VzZWMpKTsKIAkJCWN1cnItPmlkeCArPSBocF9zZGMucnF0eTsKIAkJCWhwX3NkYy5ycXR5ID0gMDsKIAkJCXRtcCA9IGN1cnItPnNlcVtjdXJyLT5hY3RpZHhdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1pby5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1pby5oCmluZGV4IGY0NTFjNzMuLjg0N2Y0YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItaW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLWlvLmgKQEAgLTY3LDcgKzY3LDcgQEAKICAqIE9uIHNvbWUgcGxhdGZvcm1zIHRvdWNoaW5nIHRoZSBpODA0MiBkYXRhIHJlZ2lzdGVyIHJlZ2lvbiBjYW4gZG8gcmVhbGx5CiAgKiBiYWQgdGhpbmdzLiBCZWNhdXNlIG9mIHRoaXMgdGhlIHJlZ2lvbiBpcyBhbHdheXMgcmVzZXJ2ZWQgb24gc3VjaCBib3hlcy4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKKyNpZiBkZWZpbmVkKENPTkZJR19QUEMpCiAJaWYgKGNoZWNrX2xlZ2FjeV9pb3BvcnQoSTgwNDJfREFUQV9SRUcpKQogCQlyZXR1cm4gLUVOT0RFVjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKaW5kZXggNWFhZmUyNC4uYTMyMWFlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCkBAIC0zMjIsNiArMzIyLDEzIEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk4zNEFTNiIpLAogCQl9LAogCX0sCisJeworCQkuaWRlbnQgPSAiSUJNIDI2NTYiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIklCTSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICIyNjU2IiksCisJCX0sCisJfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCmluZGV4IGM5Mzk3YzguLjQ3MDc3MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYwpAQCAtMzczLDYgKzM3MywxMiBAQAogCQkuaWQJPSBTRVJJT19BTlksCiAJCS5leHRyYQk9IFNFUklPX0FOWSwKIAl9LAorCXsKKwkJLnR5cGUJPSBTRVJJT184MDQyX1hMLAorCQkucHJvdG8JPSBTRVJJT19BTlksCisJCS5pZAk9IFNFUklPX0FOWSwKKwkJLmV4dHJhCT0gU0VSSU9fQU5ZLAorCX0sCiAJeyAwIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FjZWNhZC5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWNlY2FkLmMKaW5kZXggNTcwZTBlOC4uNjcwYzYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvYWNlY2FkLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWNlY2FkLmMKQEAgLTI4MCw3ICsyODAsOCBAQAogewogCWludCByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnVzYl9hY2VjYWRfZHJpdmVyKTsKIAlpZiAocmVzdWx0ID09IDApCi0JCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCQkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9haXB0ZWsuYwppbmRleCA4ZjAzN2ExLi43ZDAwNWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC9haXB0ZWsuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9haXB0ZWsuYwpAQCAtMTIwMiwxNiArMTIwMiwyMiBAQAogc3RvcmVfdGFibGV0WHRpbHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IHg7CisJbG9uZyB4OwogCi0JaWYgKHN0cmNtcChidWYsICJkaXNhYmxlIikgPT0gMCkgeworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ4KSkgeworCQlzaXplX3QgbGVuID0gYnVmW2NvdW50IC0gMV0gPT0gJ1xuJyA/IGNvdW50IC0gMSA6IGNvdW50OworCisJCWlmIChzdHJuY21wKGJ1ZiwgImRpc2FibGUiLCBsZW4pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKIAkJYWlwdGVrLT5uZXdTZXR0aW5nLnhUaWx0ID0gQUlQVEVLX1RJTFRfRElTQUJMRTsKIAl9IGVsc2UgewotCQl4ID0gKGludClzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwotCQlpZiAoeCA+PSBBSVBURUtfVElMVF9NSU4gJiYgeCA8PSBBSVBURUtfVElMVF9NQVgpIHsKLQkJCWFpcHRlay0+bmV3U2V0dGluZy54VGlsdCA9IHg7Ci0JCX0KKwkJaWYgKHggPCBBSVBURUtfVElMVF9NSU4gfHwgeCA+IEFJUFRFS19USUxUX01BWCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWFpcHRlay0+bmV3U2V0dGluZy54VGlsdCA9IHg7CiAJfQorCiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xMjM4LDE2ICsxMjQ0LDIyIEBACiBzdG9yZV90YWJsZXRZdGlsdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgeTsKKwlsb25nIHk7CiAKLQlpZiAoc3RyY21wKGJ1ZiwgImRpc2FibGUiKSA9PSAwKSB7CisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnkpKSB7CisJCXNpemVfdCBsZW4gPSBidWZbY291bnQgLSAxXSA9PSAnXG4nID8gY291bnQgLSAxIDogY291bnQ7CisKKwkJaWYgKHN0cm5jbXAoYnVmLCAiZGlzYWJsZSIsIGxlbikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwogCQlhaXB0ZWstPm5ld1NldHRpbmcueVRpbHQgPSBBSVBURUtfVElMVF9ESVNBQkxFOwogCX0gZWxzZSB7Ci0JCXkgPSAoaW50KXNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7Ci0JCWlmICh5ID49IEFJUFRFS19USUxUX01JTiAmJiB5IDw9IEFJUFRFS19USUxUX01BWCkgewotCQkJYWlwdGVrLT5uZXdTZXR0aW5nLnlUaWx0ID0geTsKLQkJfQorCQlpZiAoeSA8IEFJUFRFS19USUxUX01JTiB8fCB5ID4gQUlQVEVLX1RJTFRfTUFYKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnlUaWx0ID0geTsKIAl9CisKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTEyNjksOCArMTI4MSwxMiBAQAogc3RvcmVfdGFibGV0Sml0dGVyRGVsYXkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJbG9uZyBqOwogCi0JYWlwdGVrLT5uZXdTZXR0aW5nLmppdHRlckRlbGF5ID0gKGludClzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZqKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhaXB0ZWstPm5ld1NldHRpbmcuaml0dGVyRGVsYXkgPSAoaW50KWo7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xMjk0LDggKzEzMTAsMTIgQEAKIHN0b3JlX3RhYmxldFByb2dyYW1tYWJsZURlbGF5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWxvbmcgZDsKIAotCWFpcHRlay0+bmV3U2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSA9IChpbnQpc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJYWlwdGVrLT5uZXdTZXR0aW5nLnByb2dyYW1tYWJsZURlbGF5ID0gKGludClkOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTU0MSw4ICsxNTYxLDExIEBACiBzdG9yZV90YWJsZXRXaGVlbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlsb25nIHc7CiAKLQlhaXB0ZWstPm5ld1NldHRpbmcud2hlZWwgPSAoaW50KXNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJncpKSByZXR1cm4gLUVJTlZBTDsKKworCWFpcHRlay0+bmV3U2V0dGluZy53aGVlbCA9IChpbnQpdzsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTE2ODMsMjAgKzE3MDYsMjEgQEAKIAlhaXB0ZWsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWlwdGVrKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWFpcHRlayB8fCAhaW5wdXRkZXYpIHsKLQkJd2FybigiYWlwdGVrOiBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IG9yIGlucHV0IGRldmljZSIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LAorCQkJICJjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IG9yIGlucHV0IGRldmljZVxuIik7CiAJCWdvdG8gZmFpbDE7CiAgICAgICAgIH0KIAogCWFpcHRlay0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2ModXNiZGV2LCBBSVBURUtfUEFDS0VUX0xFTkdUSCwKIAkJCQkJR0ZQX0FUT01JQywgJmFpcHRlay0+ZGF0YV9kbWEpOwogICAgICAgICBpZiAoIWFpcHRlay0+ZGF0YSkgewotCQl3YXJuKCJhaXB0ZWs6IGNhbm5vdCBhbGxvY2F0ZSB1c2IgYnVmZmVyIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgdXNiIGJ1ZmZlclxuIik7CiAJCWdvdG8gZmFpbDE7CiAJfQogCiAJYWlwdGVrLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWlmICghYWlwdGVrLT51cmIpIHsKLQkgICAgICAgIHdhcm4oImFpcHRlazogY2Fubm90IGFsbG9jYXRlIHVyYiIpOworCSAgICAgICAgZGV2X3dhcm4oJmludGYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSB1cmJcbiIpOwogCQlnb3RvIGZhaWwyOwogCX0KIApAQCAtMTgyMCw4ICsxODQ0LDkgQEAKIAkJYWlwdGVrLT5jdXJTZXR0aW5nLnByb2dyYW1tYWJsZURlbGF5ID0gc3BlZWRzW2ldOwogCQkodm9pZClhaXB0ZWtfcHJvZ3JhbV90YWJsZXQoYWlwdGVrKTsKIAkJaWYgKGFpcHRlay0+aW5wdXRkZXYtPmFic21heFtBQlNfWF0gPiAwKSB7Ci0JCQlpbmZvKCJpbnB1dDogQWlwdGVrIHVzaW5nICVkIG1zIHByb2dyYW1taW5nIHNwZWVkXG4iLAotCQkJICAgICBhaXB0ZWstPmN1clNldHRpbmcucHJvZ3JhbW1hYmxlRGVsYXkpOworCQkJZGV2X2luZm8oJmludGYtPmRldiwKKwkJCQkgIkFpcHRlayB1c2luZyAlZCBtcyBwcm9ncmFtbWluZyBzcGVlZFxuIiwKKwkJCQkgYWlwdGVrLT5jdXJTZXR0aW5nLnByb2dyYW1tYWJsZURlbGF5KTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTgyOSw3ICsxODU0LDggQEAKIAkvKiBNdXJwaHkgc2F5cyB0aGF0IHNvbWUgZGF5IHNvbWVvbmUgd2lsbCBoYXZlIGEgdGFibGV0IHRoYXQgZmFpbHMgdGhlCiAJICAgYWJvdmUgdGVzdC4gVGhhdCdzIHlvdSwgRnJlZGVyaWMgUm9kcmlnbyAqLwogCWlmIChpID09IEFSUkFZX1NJWkUoc3BlZWRzKSkgewotCQlpbmZvKCJpbnB1dDogQWlwdGVrIHRyaWVkIGFsbCBzcGVlZHMsIG5vIHNhbmUgcmVzcG9uc2UiKTsKKwkJZGV2X2luZm8oJmludGYtPmRldiwKKwkJCSAiQWlwdGVrIHRyaWVkIGFsbCBzcGVlZHMsIG5vIHNhbmUgcmVzcG9uc2VcbiIpOwogCQlnb3RvIGZhaWwyOwogCX0KIApAQCAtMTg0MSw3ICsxODY3LDggQEAKIAkgKi8KIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmYWlwdGVrX2F0dHJpYnV0ZV9ncm91cCk7CiAJaWYgKGVycikgewotCQl3YXJuKCJhaXB0ZWs6IGNhbm5vdCBjcmVhdGUgc3lzZnMgZ3JvdXAgZXJyOiAlZCIsIGVycik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJjYW5ub3QgY3JlYXRlIHN5c2ZzIGdyb3VwIGVycjogJWRcbiIsCisJCQkgZXJyKTsKIAkJZ290byBmYWlsMzsKICAgICAgICAgfQogCkBAIC0xODQ5LDcgKzE4NzYsOCBAQAogCSAqLwogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShhaXB0ZWstPmlucHV0ZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXdhcm4oImFpcHRlazogaW5wdXRfcmVnaXN0ZXJfZGV2aWNlIHJldHVybmVkIGVycjogJWQiLCBlcnIpOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LAorCQkJICJpbnB1dF9yZWdpc3Rlcl9kZXZpY2UgcmV0dXJuZWQgZXJyOiAlZFxuIiwgZXJyKTsKIAkJZ290byBmYWlsNDsKICAgICAgICAgfQogCXJldHVybiAwOwpAQCAtMTg5OSw4ICsxOTI3LDkgQEAKIHsKIAlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZhaXB0ZWtfZHJpdmVyKTsKIAlpZiAocmVzdWx0ID09IDApIHsKLQkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiAiIERSSVZFUl9BVVRIT1IpOwotCQlpbmZvKERSSVZFUl9ERVNDKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCQkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfQVVUSE9SICJcbiIpOwogCX0KIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jCmluZGV4IDdkZjAyMjguLjU1MjRlMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2d0Y28uYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9ndGNvLmMKQEAgLTIsNyArMiw3IEBACiAKIEdUQ08gZGlnaXRpemVyIFVTQiBkcml2ZXIKIAotVXNlIHRoZSBlcnIoKSwgZGJnKCkgYW5kIGluZm8oKSBtYWNyb3MgZnJvbSB1c2IuaCBmb3Igc3lzdGVtIGxvZ2dpbmcKK1VzZSB0aGUgZXJyKCkgYW5kIGRiZygpIG1hY3JvcyBmcm9tIHVzYi5oIGZvciBzeXN0ZW0gbG9nZ2luZwogCiBUTyBDSEVDSzogIElzIHByZXNzdXJlIGRvbmUgcmlnaHQgb24gcmVwb3J0IDU/CiAKQEAgLTEwMTAsNyArMTAxMCw3IEBACiAJCWtmcmVlKGd0Y28pOwogCX0KIAotCWluZm8oImd0Y28gZHJpdmVyIGRpc2Nvbm5lY3RlZCIpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgImd0Y28gZHJpdmVyIGRpc2Nvbm5lY3RlZFxuIik7CiB9CiAKIC8qICAgU1RBTkRBUkQgTU9EVUxFIExPQUQgUk9VVElORVMgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC9rYnRhYi5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQva2J0YWIuYwppbmRleCBkODkxMTJmLi42NjgyYjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC9rYnRhYi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2tidGFiLmMKQEAgLTIxNSw3ICsyMTUsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigma2J0YWJfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dDsKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYwppbmRleCA1ZmJjNDYzLi4wOWUyMjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYwpAQCAtMzg1LDcgKzM4NSw4IEBACiAJd2Fjb21fZHJpdmVyLmlkX3RhYmxlID0gZ2V0X2RldmljZV90YWJsZSgpOwogCXJlc3VsdCA9IHVzYl9yZWdpc3Rlcigmd2Fjb21fZHJpdmVyKTsKIAlpZiAocmVzdWx0ID09IDApCi0JCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCQkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCmluZGV4IDZlMWU4YzYuLjgzMTdmZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKQEAgLTIxOSw3ICsyMTksNyBAQAogCiBjb25maWcgVE9VQ0hTQ1JFRU5fVUNCMTQwMAogCXRyaXN0YXRlICJQaGlsaXBzIFVDQjE0MDAgdG91Y2hzY3JlZW4iCi0Jc2VsZWN0IEFDOTdfQlVTCisJZGVwZW5kcyBvbiBBQzk3X0JVUwogCWRlcGVuZHMgb24gVUNCMTQwMF9DT1JFCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFVDQjE0MDAgdG91Y2hzY3JlZW4gaW50ZXJmYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwppbmRleCA4NTgzYzc2Li5iOWI3ZmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwpAQCAtNjksNiArNjksMTcgQEAKIAlpbnQJaWdub3JlOwogfTsKIAorLyoKKyAqIFdlIGFsbG9jYXRlIHRoaXMgc2VwYXJhdGVseSB0byBhdm9pZCBjYWNoZSBsaW5lIHNoYXJpbmcgaXNzdWVzIHdoZW4KKyAqIGRyaXZlciBpcyB1c2VkIHdpdGggRE1BLWJhc2VkIFNQSSBjb250cm9sbGVycyAobGlrZSBhdG1lbF9zcGkpIG9uCisgKiBzeXN0ZW1zIHdoZXJlIG1haW4gbWVtb3J5IGlzIG5vdCBETUEtY29oZXJlbnQgKG1vc3Qgbm9uLXg4NiBib2FyZHMpLgorICovCitzdHJ1Y3QgYWRzNzg0Nl9wYWNrZXQgeworCXU4CQkJcmVhZF94LCByZWFkX3ksIHJlYWRfejEsIHJlYWRfejIsIHB3cmRvd247CisJdTE2CQkJZHVtbXk7CQkvKiBmb3IgdGhlIHB3cmRvd24gcmVhZCAqLworCXN0cnVjdCB0c19ldmVudAkJdGM7Cit9OworCiBzdHJ1Y3QgYWRzNzg0NiB7CiAJc3RydWN0IGlucHV0X2RldgkqaW5wdXQ7CiAJY2hhcgkJCXBoeXNbMzJdOwpAQCAtODYsOSArOTcsNyBAQAogCXUxNgkJCXhfcGxhdGVfb2htczsKIAl1MTYJCQlwcmVzc3VyZV9tYXg7CiAKLQl1OAkJCXJlYWRfeCwgcmVhZF95LCByZWFkX3oxLCByZWFkX3oyLCBwd3Jkb3duOwotCXUxNgkJCWR1bW15OwkJLyogZm9yIHRoZSBwd3Jkb3duIHJlYWQgKi8KLQlzdHJ1Y3QgdHNfZXZlbnQJCXRjOworCXN0cnVjdCBhZHM3ODQ2X3BhY2tldAkqcGFja2V0OwogCiAJc3RydWN0IHNwaV90cmFuc2Zlcgl4ZmVyWzE4XTsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbXNnWzVdOwpAQCAtNDYzLDEwICs0NzIsMTEgQEAKIAkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBhZHM3ODQ2ICp0cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWNoYXIgKmVuZHA7Ci0JaW50IGk7CisJbG9uZyBpOwogCi0JaSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDEwKTsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJmkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXNwaW5fbG9ja19pcnEoJnRzLT5sb2NrKTsKIAogCWlmIChpKQpAQCAtNTEyLDE2ICs1MjIsMTcgQEAKIHN0YXRpYyB2b2lkIGFkczc4NDZfcngodm9pZCAqYWRzKQogewogCXN0cnVjdCBhZHM3ODQ2CQkqdHMgPSBhZHM7CisJc3RydWN0IGFkczc4NDZfcGFja2V0CSpwYWNrZXQgPSB0cy0+cGFja2V0OwogCXVuc2lnbmVkCQlSdDsKIAl1MTYJCQl4LCB5LCB6MSwgejI7CiAKIAkvKiBhZHM3ODQ2X3J4X3ZhbCgpIGRpZCBpbi1wbGFjZSBjb252ZXJzaW9uIChpbmNsdWRpbmcgYnl0ZXN3YXApIGZyb20KIAkgKiBvbi10aGUtd2lyZSBmb3JtYXQgYXMgcGFydCBvZiBkZWJvdW5jaW5nIHRvIGdldCBzdGFibGUgcmVhZGluZ3MuCiAJICovCi0JeCA9IHRzLT50Yy54OwotCXkgPSB0cy0+dGMueTsKLQl6MSA9IHRzLT50Yy56MTsKLQl6MiA9IHRzLT50Yy56MjsKKwl4ID0gcGFja2V0LT50Yy54OworCXkgPSBwYWNrZXQtPnRjLnk7CisJejEgPSBwYWNrZXQtPnRjLnoxOworCXoyID0gcGFja2V0LT50Yy56MjsKIAogCS8qIHJhbmdlIGZpbHRlcmluZyAqLwogCWlmICh4ID09IE1BWF8xMkJJVCkKQEAgLTU0NSwxMCArNTU2LDEwIEBACiAJICogdGhlIG1heGltdW0uIERvbid0IHJlcG9ydCBpdCB0byB1c2VyIHNwYWNlLCByZXBlYXQgYXQgbGVhc3QKIAkgKiBvbmNlIG1vcmUgdGhlIG1lYXN1cmVtZW50CiAJICovCi0JaWYgKHRzLT50Yy5pZ25vcmUgfHwgUnQgPiB0cy0+cHJlc3N1cmVfbWF4KSB7CisJaWYgKHBhY2tldC0+dGMuaWdub3JlIHx8IFJ0ID4gdHMtPnByZXNzdXJlX21heCkgewogI2lmZGVmIFZFUkJPU0UKIAkJcHJfZGVidWcoIiVzOiBpZ25vcmVkICVkIHByZXNzdXJlICVkXG4iLAotCQkJdHMtPnNwaS0+ZGV2LmJ1c19pZCwgdHMtPnRjLmlnbm9yZSwgUnQpOworCQkJdHMtPnNwaS0+ZGV2LmJ1c19pZCwgcGFja2V0LT50Yy5pZ25vcmUsIFJ0KTsKICNlbmRpZgogCQlocnRpbWVyX3N0YXJ0KCZ0cy0+dGltZXIsIGt0aW1lX3NldCgwLCBUU19QT0xMX1BFUklPRCksCiAJCQkgICAgICBIUlRJTUVSX01PREVfUkVMKTsKQEAgLTY0MSw2ICs2NTIsNyBAQAogc3RhdGljIHZvaWQgYWRzNzg0Nl9yeF92YWwodm9pZCAqYWRzKQogewogCXN0cnVjdCBhZHM3ODQ2ICp0cyA9IGFkczsKKwlzdHJ1Y3QgYWRzNzg0Nl9wYWNrZXQgKnBhY2tldCA9IHRzLT5wYWNrZXQ7CiAJc3RydWN0IHNwaV9tZXNzYWdlICptOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQ7CiAJaW50IHZhbDsKQEAgLTY2MCw3ICs2NzIsNyBAQAogCWNhc2UgQURTNzg0Nl9GSUxURVJfUkVQRUFUOgogCQlicmVhazsKIAljYXNlIEFEUzc4NDZfRklMVEVSX0lHTk9SRToKLQkJdHMtPnRjLmlnbm9yZSA9IDE7CisJCXBhY2tldC0+dGMuaWdub3JlID0gMTsKIAkJLyogTGFzdCBtZXNzYWdlIHdpbGwgY29udGFpbiBhZHM3ODQ2X3J4KCkgYXMgdGhlCiAJCSAqIGNvbXBsZXRpb24gZnVuY3Rpb24uCiAJCSAqLwpAQCAtNjY4LDcgKzY4MCw3IEBACiAJCWJyZWFrOwogCWNhc2UgQURTNzg0Nl9GSUxURVJfT0s6CiAJCSoodTE2ICopdC0+cnhfYnVmID0gdmFsOwotCQl0cy0+dGMuaWdub3JlID0gMDsKKwkJcGFja2V0LT50Yy5pZ25vcmUgPSAwOwogCQltID0gJnRzLT5tc2dbKyt0cy0+bXNnX2lkeF07CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC03NzMsNyArNzg1LDYgQEAKIAkvKiB3ZSBrbm93IHRoZSBjaGlwJ3MgaW4gbG93cG93ZXIgbW9kZSBzaW5jZSB3ZSBhbHdheXMKIAkgKiBsZWF2ZSBpdCB0aGF0IHdheSBhZnRlciBldmVyeSByZXF1ZXN0CiAJICovCi0KIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0cy0+bG9jayBoZWxkICovCkBAIC04NDksNiArODYwLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFkczc4NDZfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgYWRzNzg0NgkJCSp0czsKKwlzdHJ1Y3QgYWRzNzg0Nl9wYWNrZXQJCSpwYWNrZXQ7CiAJc3RydWN0IGlucHV0X2RldgkJKmlucHV0X2RldjsKIAlzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhCSpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHNwaV9tZXNzYWdlCQkqbTsKQEAgLTg4NCwxNCArODk2LDE2IEBACiAJCXJldHVybiBlcnI7CiAKIAl0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHM3ODQ2KSwgR0ZQX0tFUk5FTCk7CisJcGFja2V0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkczc4NDZfcGFja2V0KSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCF0cyB8fCAhaW5wdXRfZGV2KSB7CisJaWYgKCF0cyB8fCAhcGFja2V0IHx8ICFpbnB1dF9kZXYpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZV9tZW07CiAJfQogCiAJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgdHMpOwogCisJdHMtPnBhY2tldCA9IHBhY2tldDsKIAl0cy0+c3BpID0gc3BpOwogCXRzLT5pbnB1dCA9IGlucHV0X2RldjsKIAl0cy0+dnJlZl9tdiA9IHBkYXRhLT52cmVmX212OwpAQCAtOTYzLDEzICs5NzcsMTMgQEAKIAlzcGlfbWVzc2FnZV9pbml0KG0pOwogCiAJLyogeS0gc3RpbGwgb247IHR1cm4gb24gb25seSB5KyAoYW5kIEFEQykgKi8KLQl0cy0+cmVhZF95ID0gUkVBRF9ZKHZyZWYpOwotCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF95OworCXBhY2tldC0+cmVhZF95ID0gUkVBRF9ZKHZyZWYpOworCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnJlYWRfeTsKIAl4LT5sZW4gPSAxOwogCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJeCsrOwotCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMueTsKKwl4LT5yeF9idWYgPSAmcGFja2V0LT50Yy55OwogCXgtPmxlbiA9IDI7CiAJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKQEAgLTk4MSwxMiArOTk1LDEyIEBACiAJCXgtPmRlbGF5X3VzZWNzID0gcGRhdGEtPnNldHRsZV9kZWxheV91c2VjczsKIAogCQl4Kys7Ci0JCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF95OworCQl4LT50eF9idWYgPSAmcGFja2V0LT5yZWFkX3k7CiAJCXgtPmxlbiA9IDE7CiAJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJCXgrKzsKLQkJeC0+cnhfYnVmID0gJnRzLT50Yy55OworCQl4LT5yeF9idWYgPSAmcGFja2V0LT50Yy55OwogCQl4LT5sZW4gPSAyOwogCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIAl9CkBAIC05OTksMTMgKzEwMTMsMTMgQEAKIAogCS8qIHR1cm4geS0gb2ZmLCB4KyBvbiwgdGhlbiBsZWF2ZSBpbiBsb3dwb3dlciAqLwogCXgrKzsKLQl0cy0+cmVhZF94ID0gUkVBRF9YKHZyZWYpOwotCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF94OworCXBhY2tldC0+cmVhZF94ID0gUkVBRF9YKHZyZWYpOworCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnJlYWRfeDsKIAl4LT5sZW4gPSAxOwogCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJeCsrOwotCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMueDsKKwl4LT5yeF9idWYgPSAmcGFja2V0LT50Yy54OwogCXgtPmxlbiA9IDI7CiAJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKQEAgLTEwMTQsMTIgKzEwMjgsMTIgQEAKIAkJeC0+ZGVsYXlfdXNlY3MgPSBwZGF0YS0+c2V0dGxlX2RlbGF5X3VzZWNzOwogCiAJCXgrKzsKLQkJeC0+dHhfYnVmID0gJnRzLT5yZWFkX3g7CisJCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnJlYWRfeDsKIAkJeC0+bGVuID0gMTsKIAkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKIAkJeCsrOwotCQl4LT5yeF9idWYgPSAmdHMtPnRjLng7CisJCXgtPnJ4X2J1ZiA9ICZwYWNrZXQtPnRjLng7CiAJCXgtPmxlbiA9IDI7CiAJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCX0KQEAgLTEwMzMsMTMgKzEwNDcsMTMgQEAKIAkJc3BpX21lc3NhZ2VfaW5pdChtKTsKIAogCQl4Kys7Ci0JCXRzLT5yZWFkX3oxID0gUkVBRF9aMSh2cmVmKTsKLQkJeC0+dHhfYnVmID0gJnRzLT5yZWFkX3oxOworCQlwYWNrZXQtPnJlYWRfejEgPSBSRUFEX1oxKHZyZWYpOworCQl4LT50eF9idWYgPSAmcGFja2V0LT5yZWFkX3oxOwogCQl4LT5sZW4gPSAxOwogCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIAogCQl4Kys7Ci0JCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMuejE7CisJCXgtPnJ4X2J1ZiA9ICZwYWNrZXQtPnRjLnoxOwogCQl4LT5sZW4gPSAyOwogCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIApAQCAtMTA0OCwxMiArMTA2MiwxMiBAQAogCQkJeC0+ZGVsYXlfdXNlY3MgPSBwZGF0YS0+c2V0dGxlX2RlbGF5X3VzZWNzOwogCiAJCQl4Kys7Ci0JCQl4LT50eF9idWYgPSAmdHMtPnJlYWRfejE7CisJCQl4LT50eF9idWYgPSAmcGFja2V0LT5yZWFkX3oxOwogCQkJeC0+bGVuID0gMTsKIAkJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJCQl4Kys7Ci0JCQl4LT5yeF9idWYgPSAmdHMtPnRjLnoxOworCQkJeC0+cnhfYnVmID0gJnBhY2tldC0+dGMuejE7CiAJCQl4LT5sZW4gPSAyOwogCQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAJCX0KQEAgLTEwNjUsMTMgKzEwNzksMTMgQEAKIAkJc3BpX21lc3NhZ2VfaW5pdChtKTsKIAogCQl4Kys7Ci0JCXRzLT5yZWFkX3oyID0gUkVBRF9aMih2cmVmKTsKLQkJeC0+dHhfYnVmID0gJnRzLT5yZWFkX3oyOworCQlwYWNrZXQtPnJlYWRfejIgPSBSRUFEX1oyKHZyZWYpOworCQl4LT50eF9idWYgPSAmcGFja2V0LT5yZWFkX3oyOwogCQl4LT5sZW4gPSAxOwogCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIAogCQl4Kys7Ci0JCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMuejI7CisJCXgtPnJ4X2J1ZiA9ICZwYWNrZXQtPnRjLnoyOwogCQl4LT5sZW4gPSAyOwogCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIApAQCAtMTA4MCwxMiArMTA5NCwxMiBAQAogCQkJeC0+ZGVsYXlfdXNlY3MgPSBwZGF0YS0+c2V0dGxlX2RlbGF5X3VzZWNzOwogCiAJCQl4Kys7Ci0JCQl4LT50eF9idWYgPSAmdHMtPnJlYWRfejI7CisJCQl4LT50eF9idWYgPSAmcGFja2V0LT5yZWFkX3oyOwogCQkJeC0+bGVuID0gMTsKIAkJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJCQl4Kys7Ci0JCQl4LT5yeF9idWYgPSAmdHMtPnRjLnoyOworCQkJeC0+cnhfYnVmID0gJnBhY2tldC0+dGMuejI7CiAJCQl4LT5sZW4gPSAyOwogCQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAJCX0KQEAgLTEwOTksMTMgKzExMTMsMTMgQEAKIAlzcGlfbWVzc2FnZV9pbml0KG0pOwogCiAJeCsrOwotCXRzLT5wd3Jkb3duID0gUFdSRE9XTjsKLQl4LT50eF9idWYgPSAmdHMtPnB3cmRvd247CisJcGFja2V0LT5wd3Jkb3duID0gUFdSRE9XTjsKKwl4LT50eF9idWYgPSAmcGFja2V0LT5wd3Jkb3duOwogCXgtPmxlbiA9IDE7CiAJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKIAl4Kys7Ci0JeC0+cnhfYnVmID0gJnRzLT5kdW1teTsKKwl4LT5yeF9idWYgPSAmcGFja2V0LT5kdW1teTsKIAl4LT5sZW4gPSAyOwogCUNTX0NIQU5HRSgqeCk7CiAJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CkBAIC0xMTU4LDYgKzExNzIsNyBAQAogCQl0cy0+ZmlsdGVyX2NsZWFudXAodHMtPmZpbHRlcl9kYXRhKTsKICBlcnJfZnJlZV9tZW06CiAJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwlrZnJlZShwYWNrZXQpOwogCWtmcmVlKHRzKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTE4Myw2ICsxMTk4LDcgQEAKIAlpZiAodHMtPmZpbHRlcl9jbGVhbnVwKQogCQl0cy0+ZmlsdGVyX2NsZWFudXAodHMtPmZpbHRlcl9kYXRhKTsKIAorCWtmcmVlKHRzLT5wYWNrZXQpOwogCWtmcmVlKHRzKTsKIAogCWRldl9kYmcoJnNwaS0+ZGV2LCAidW5yZWdpc3RlcmVkIHRvdWNoc2NyZWVuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfdHNhZGNjLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX3RzYWRjYy5jCmluZGV4IGVlZTEyNmIuLmE4OWE2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfdHNhZGNjLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF90c2FkY2MuYwpAQCAtOTEsNiArOTEsOSBAQAogCWNoYXIJCQlwaHlzWzMyXTsKIAlzdHJ1Y3QgY2xrCQkqY2xrOwogCWludAkJCWlycTsKKwl1bnNpZ25lZCBpbnQJCXByZXZfYWJzeDsKKwl1bnNpZ25lZCBpbnQJCXByZXZfYWJzeTsKKwl1bnNpZ25lZCBjaGFyCQlidWZmZXJlZG1lYXN1cmU7CiB9OwogCiBzdGF0aWMgdm9pZCBfX2lvbWVtCQkqdHNjX2Jhc2U7CkBAIC0xMDAsMTAgKzEwMyw5IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBhdG1lbF90c2FkY2NfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldikKIHsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSAoKHN0cnVjdCBhdG1lbF90c2FkY2MgKilkZXYpLT5pbnB1dDsKKwlzdHJ1Y3QgYXRtZWxfdHNhZGNjCSp0c19kZXYgPSAoc3RydWN0IGF0bWVsX3RzYWRjYyAqKWRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2CSppbnB1dF9kZXYgPSB0c19kZXYtPmlucHV0OwogCi0JdW5zaWduZWQgaW50IGFic3g7Ci0JdW5zaWduZWQgaW50IGFic3k7CiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCkBAIC0xMjEsNiArMTIzLDcgQEAKIAkJYXRtZWxfdHNhZGNjX3dyaXRlKEFUTUVMX1RTQURDQ19JRVIsIEFUTUVMX1RTQURDQ19QRU5DTlQpOwogCiAJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfZGV2LCBCVE5fVE9VQ0gsIDApOworCQl0c19kZXYtPmJ1ZmZlcmVkbWVhc3VyZSA9IDA7CiAJCWlucHV0X3N5bmMoaW5wdXRfZGV2KTsKIAogCX0gZWxzZSBpZiAoc3RhdHVzICYgQVRNRUxfVFNBRENDX1BFTkNOVCkgewpAQCAtMTM4LDE2ICsxNDEsMjMgQEAKIAl9IGVsc2UgaWYgKHN0YXR1cyAmIEFUTUVMX1RTQURDQ19FT0MoMykpIHsKIAkJLyogQ29udmVyc2lvbiBmaW5pc2hlZCAqLwogCi0JCWFic3ggPSBhdG1lbF90c2FkY2NfcmVhZChBVE1FTF9UU0FEQ0NfQ0RSMykgPDwgMTA7Ci0JCWFic3ggLz0gYXRtZWxfdHNhZGNjX3JlYWQoQVRNRUxfVFNBRENDX0NEUjIpOworCQlpZiAodHNfZGV2LT5idWZmZXJlZG1lYXN1cmUpIHsKKwkJCS8qIExhc3QgbWVhc3VyZW1lbnQgaXMgYWx3YXlzIGRpc2NhcmRlZCwgc2luY2UgaXQgY2FuCisJCQkgKiBiZSBlcnJvbmVvdXMuCisJCQkgKiBBbHdheXMgcmVwb3J0IHByZXZpb3VzIG1lYXN1cmVtZW50ICovCisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1gsIHRzX2Rldi0+cHJldl9hYnN4KTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfWSwgdHNfZGV2LT5wcmV2X2Fic3kpOworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dF9kZXYsIEJUTl9UT1VDSCwgMSk7CisJCQlpbnB1dF9zeW5jKGlucHV0X2Rldik7CisJCX0gZWxzZQorCQkJdHNfZGV2LT5idWZmZXJlZG1lYXN1cmUgPSAxOwogCi0JCWFic3kgPSBhdG1lbF90c2FkY2NfcmVhZChBVE1FTF9UU0FEQ0NfQ0RSMSkgPDwgMTA7Ci0JCWFic3kgLz0gYXRtZWxfdHNhZGNjX3JlYWQoQVRNRUxfVFNBRENDX0NEUjApOworCQkvKiBOb3cgbWFrZSBuZXcgbWVhc3VyZW1lbnQgKi8KKwkJdHNfZGV2LT5wcmV2X2Fic3ggPSBhdG1lbF90c2FkY2NfcmVhZChBVE1FTF9UU0FEQ0NfQ0RSMykgPDwgMTA7CisJCXRzX2Rldi0+cHJldl9hYnN4IC89IGF0bWVsX3RzYWRjY19yZWFkKEFUTUVMX1RTQURDQ19DRFIyKTsKIAotCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1gsIGFic3gpOwotCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1ksIGFic3kpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2RldiwgQlROX1RPVUNILCAxKTsKLQkJaW5wdXRfc3luYyhpbnB1dF9kZXYpOworCQl0c19kZXYtPnByZXZfYWJzeSA9IGF0bWVsX3RzYWRjY19yZWFkKEFUTUVMX1RTQURDQ19DRFIxKSA8PCAxMDsKKwkJdHNfZGV2LT5wcmV2X2Fic3kgLz0gYXRtZWxfdHNhZGNjX3JlYWQoQVRNRUxfVFNBRENDX0NEUjApOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTIyMyw2ICsyMzMsNyBAQAogCX0KIAogCXRzX2Rldi0+aW5wdXQgPSBpbnB1dF9kZXY7CisJdHNfZGV2LT5idWZmZXJlZG1lYXN1cmUgPSAwOwogCiAJc25wcmludGYodHNfZGV2LT5waHlzLCBzaXplb2YodHNfZGV2LT5waHlzKSwKIAkJICIlcy9pbnB1dDAiLCBwZGV2LT5kZXYuYnVzX2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYwppbmRleCBjMzhkNGUwLi5hODk3MDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2hwNjgwX3RzX2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jCkBAIC01LDcgKzUsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9hZGMuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAKICNkZWZpbmUgTU9ETkFNRSAiaHA2ODBfdHNfaW5wdXQiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWFpbnN0b25lLXdtOTd4eC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMKaW5kZXggMzdhNTU1Zi4uYmE2NDg3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMKQEAgLTMsOCArMyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBXb2xmc29uIFdNOTd4eCBBQzk3IENvZGVjcy4KICAqCiAgKiBDb3B5cmlnaHQgMjAwNCwgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCi0gKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKiBQYXJ0cyBDb3B5cmlnaHQgOiBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgogICogICAgICAgICAgICAgICAgICAgQW5kcmV3IFphYm9sb3RueSA8emFwQGhvbWVsaW5rLnJ1PgogICoKQEAgLTI5Niw2ICsyOTUsNiBAQAogbW9kdWxlX2V4aXQobWFpbnN0b25lX3dtOTd4eF9leGl0KTsKIAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJ3bTk3eHggY29udGludW91cyB0b3VjaCBkcml2ZXIgZm9yIG1haW5zdG9uZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MDUuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzA1LmMKaW5kZXggMzcyZWZiYy4uNmI1YmU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MDUuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcwNS5jCkBAIC0yLDggKzIsNyBAQAogICogd205NzA1LmMgIC0tICBDb2RlYyBkcml2ZXIgZm9yIFdvbGZzb24gV005NzA1IEFDOTcgQ29kZWMuCiAgKgogICogQ29weXJpZ2h0IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAotICogICAgICAgICBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICogUGFydHMgQ29weXJpZ2h0IDogSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KICAqICAgICAgICAgICAgICAgICAgIEFuZHJldyBaYWJvbG90bnkgPHphcEBob21lbGluay5ydT4KICAqICAgICAgICAgICAgICAgICAgIFJ1c3NlbGwgS2luZyA8cm1rQGFybS5saW51eC5vcmcudWs+CkBAIC0zNDcsNiArMzQ2LDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHdtOTcwNV9jb2RlYyk7CiAKIC8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLwotTU9EVUxFX0FVVEhPUigiTGlhbSBHaXJkd29vZCA8bGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0FVVEhPUigiTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiV005NzA1IFRvdWNoIFNjcmVlbiBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEyLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcxMi5jCmluZGV4IGM4YmIxZTcuLjc0OTBiMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEyLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTIuYwpAQCAtMiw4ICsyLDcgQEAKICAqIHdtOTcxMi5jICAtLSAgQ29kZWMgZHJpdmVyIGZvciBXb2xmc29uIFdNOTcxMiBBQzk3IENvZGVjcy4KICAqCiAgKiBDb3B5cmlnaHQgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCi0gKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKiBQYXJ0cyBDb3B5cmlnaHQgOiBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgogICogICAgICAgICAgICAgICAgICAgQW5kcmV3IFphYm9sb3RueSA8emFwQGhvbWVsaW5rLnJ1PgogICogICAgICAgICAgICAgICAgICAgUnVzc2VsbCBLaW5nIDxybWtAYXJtLmxpbnV4Lm9yZy51az4KQEAgLTQ2Miw2ICs0NjEsNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwod205NzEyX2NvZGVjKTsKIAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJXTTk3MTIgVG91Y2ggU2NyZWVuIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEzLmMKaW5kZXggNzgxZWU4My4uMjM4YjUxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcxMy5jCkBAIC0yLDggKzIsNyBAQAogICogd205NzEzLmMgIC0tICBDb2RlYyB0b3VjaCBkcml2ZXIgZm9yIFdvbGZzb24gV005NzEzIEFDOTcgQ29kZWMuCiAgKgogICogQ29weXJpZ2h0IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAotICogICAgICAgICBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICogUGFydHMgQ29weXJpZ2h0IDogSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KICAqICAgICAgICAgICAgICAgICAgIEFuZHJldyBaYWJvbG90bnkgPHphcEBob21lbGluay5ydT4KICAqICAgICAgICAgICAgICAgICAgIFJ1c3NlbGwgS2luZyA8cm1rQGFybS5saW51eC5vcmcudWs+CkBAIC00NzYsNiArNDc1LDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHdtOTcxM19jb2RlYyk7CiAKIC8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLwotTU9EVUxFX0FVVEhPUigiTGlhbSBHaXJkd29vZCA8bGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0FVVEhPUigiTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiV005NzEzIFRvdWNoIFNjcmVlbiBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205N3h4LWNvcmUuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205N3h4LWNvcmUuYwppbmRleCBkNTg5YWIwLi5kMTVhYTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTd4eC1jb3JlLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3eHgtY29yZS5jCkBAIC0zLDggKzMsNyBAQAogICogICAgICAgICAgICAgICAgICAgIGFuZCBXTTk3MTMgQUM5NyBDb2RlY3MuCiAgKgogICogQ29weXJpZ2h0IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAotICogICAgICAgICBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICogUGFydHMgQ29weXJpZ2h0IDogSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KICAqICAgICAgICAgICAgICAgICAgIEFuZHJldyBaYWJvbG90bnkgPHphcEBob21lbGluay5ydT4KICAqICAgICAgICAgICAgICAgICAgIFJ1c3NlbGwgS2luZyA8cm1rQGFybS5saW51eC5vcmcudWs+CkBAIC04MjQsNiArODIzLDYgQEAKIG1vZHVsZV9leGl0KHdtOTd4eF9leGl0KTsKIAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJXTTk3eHggQ29yZSAtIFRvdWNoIFNjcmVlbiAvIEFVWCBBREMgLyBHUElPIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCmluZGV4IDc5OGQ3ZjMuLjFiNWJmODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKQEAgLTE1NTMsOCArMTU1Myw3IEBACiAJCXJldHVybiBQVFJfRVJSKGNhcGlfY2xhc3MpOwogCX0KIAotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShjYXBpX2NsYXNzLCBOVUxMLCBNS0RFVihjYXBpX21ham9yLCAwKSwgTlVMTCwKLQkJCSAgICAgICJjYXBpIik7CisJZGV2aWNlX2NyZWF0ZShjYXBpX2NsYXNzLCBOVUxMLCBNS0RFVihjYXBpX21ham9yLCAwKSwgTlVMTCwgImNhcGkiKTsKIAogI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQogCWlmIChjYXBpbmNfdHR5X2luaXQoKSA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bV9jcy5jCmluZGV4IGE1Yjk0MWMuLmM3MjU2NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1fY3MuYwpAQCAtMTU0LDgzICsxNTQsNTAgQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLQkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKK3N0YXRpYyBpbnQgYXZtY3NfY29uZmlnY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiwKKwkJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgICAgdm9pZCAqcHJpdl9kYXRhKQogewotICAgIGludCBpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHJldHVybiBpOwotICAgIHJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwotfQorCWlmIChjZi0+aW8ubndpbiA8PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotc3RhdGljIGludCBmaXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLQkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLSAgICBpbnQgaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgcmV0dXJuIGk7Ci0gICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7Ci19Ci0KLXN0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLQkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLSAgICBpbnQgaSA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKTsKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSByZXR1cm4gaTsKLSAgICByZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBjZi0+aW8ud2luWzBdLmxlbjsKKwlwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlwcmludGsoS0VSTl9JTkZPICJhdm1fY3M6IHRlc3RpbmcgaS9vICUjeC0lI3hcbiIsCisJICAgICAgIHBfZGV2LT5pby5CYXNlUG9ydDEsCisJICAgICAgIHBfZGV2LT5pby5CYXNlUG9ydDErcF9kZXYtPmlvLk51bVBvcnRzMS0xKTsKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOwogfQogCiBzdGF0aWMgaW50IGF2bWNzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIGNpc3BhcnNlX3QgcGFyc2U7Ci0gICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YgPSAmcGFyc2UuY2Z0YWJsZV9lbnRyeTsKICAgICBsb2NhbF9pbmZvX3QgKmRldjsKICAgICBpbnQgaTsKLSAgICB1X2NoYXIgYnVmWzY0XTsKICAgICBjaGFyIGRldm5hbWVbMTI4XTsKICAgICBpbnQgY2FyZHR5cGU7CiAgICAgaW50ICgqYWRkY2FyZCkodW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGlycSk7CiAKICAgICBkZXYgPSBsaW5rLT5wcml2OwogCisgICAgZGV2bmFtZVswXSA9IDA7CisgICAgaWYgKGxpbmstPnByb2RfaWRbMV0pCisJICAgIHN0cmxjcHkoZGV2bmFtZSwgbGluay0+cHJvZF9pZFsxXSwgc2l6ZW9mKGRldm5hbWUpKTsKKworICAgIC8qCisgICAgICogZmluZCBJTyBwb3J0CisgICAgICovCisgICAgaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBhdm1jc19jb25maWdjaGVjaywgTlVMTCkpCisJICAgIHJldHVybiAtRU5PREVWOworCiAgICAgZG8gewotCWRldm5hbWVbMF0gPSAwOwotCWlmIChsaW5rLT5wcm9kX2lkWzFdKQotCQlzdHJsY3B5KGRldm5hbWUsIGxpbmstPnByb2RfaWRbMV0sIHNpemVvZihkZXZuYW1lKSk7Ci0KLQkvKgotICAgICAgICAgKiBmaW5kIElPIHBvcnQKLSAgICAgICAgICovCi0JdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7IHR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlpID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwotCXdoaWxlIChpID09IENTX1NVQ0NFU1MpIHsKLQkgICAgaWYgKGNmLT5pby5ud2luID4gMCkgewotCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwotCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCWxpbmstPmlvLk51bVBvcnRzMSA9IGNmLT5pby53aW5bMF0ubGVuOwotCQlsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gImF2bV9jczogdGVzdGluZyBpL28gJSN4LSUjeFxuIiwKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSwKLQkJICAgICAgICBsaW5rLT5pby5CYXNlUG9ydDErbGluay0+aW8uTnVtUG9ydHMxLTEpOwotCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykgZ290byBmb3VuZF9wb3J0OwotCSAgICB9Ci0JICAgIGkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLQl9Ci0KLWZvdW5kX3BvcnQ6Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwotCSAgICBicmVhazsKLQl9Ci0KIAkvKgogCSAqIGFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lCiAJICovCiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgewogCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkgICAgLyogdW5kbyAqLwogCSAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CkBAIC0yNDEsNyArMjA4LDcgQEAKICAgICAgICAgICogY29uZmlndXJlIHRoZSBQQ01DSUEgc29ja2V0CiAJICAqLwogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgewogCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAkgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtYTFfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jCmluZGV4IGZjNmNjMmMuLjIzNTYwYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jCkBAIC0xNzQsMzggKzE3NCwyOSBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgZ2V0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAotCQkgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQorc3RhdGljIGludCBhdm1hMWNzX2NvbmZpZ2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiwKKwkJCSAgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhKQogewotICAgIGludCBpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHJldHVybiBpOwotICAgIHJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWlmIChjZi0+aW8ubndpbiA8PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmLT5pby53aW5bMF0ubGVuOworCXBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCXByaW50ayhLRVJOX0lORk8gImF2bWExX2NzOiB0ZXN0aW5nIGkvbyAlI3gtJSN4XG4iLAorCSAgICAgICBwX2Rldi0+aW8uQmFzZVBvcnQxLAorCSAgICAgICBwX2Rldi0+aW8uQmFzZVBvcnQxK3BfZGV2LT5pby5OdW1Qb3J0czEtMSk7CisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKIH0KIAotc3RhdGljIGludCBmaXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLQkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLSAgICBpbnQgaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgcmV0dXJuIGk7Ci0gICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7Ci19Ci0KLXN0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLQkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLSAgICBpbnQgaSA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKTsKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSByZXR1cm4gaTsKLSAgICByZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKLX0KIAogc3RhdGljIGludCBhdm1hMWNzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIGNpc3BhcnNlX3QgcGFyc2U7Ci0gICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YgPSAmcGFyc2UuY2Z0YWJsZV9lbnRyeTsKICAgICBsb2NhbF9pbmZvX3QgKmRldjsKICAgICBpbnQgaTsKLSAgICB1X2NoYXIgYnVmWzY0XTsKICAgICBjaGFyIGRldm5hbWVbMTI4XTsKICAgICBJc2RuQ2FyZF90CWljYXJkOwogICAgIGludCBidXN5ID0gMDsKQEAgLTIxNCw0NSArMjA1LDE5IEBACiAKICAgICBERUJVRygwLCAiYXZtYTFjc19jb25maWcoMHglcClcbiIsIGxpbmspOwogCisgICAgZGV2bmFtZVswXSA9IDA7CisgICAgaWYgKGxpbmstPnByb2RfaWRbMV0pCisJICAgIHN0cmxjcHkoZGV2bmFtZSwgbGluay0+cHJvZF9pZFsxXSwgc2l6ZW9mKGRldm5hbWUpKTsKKworICAgIGlmIChwY21jaWFfbG9vcF9jb25maWcobGluaywgYXZtYTFjc19jb25maWdjaGVjaywgTlVMTCkpCisJICAgIHJldHVybiAtRU5PREVWOworCiAgICAgZG8gewotCWRldm5hbWVbMF0gPSAwOwotCWlmIChsaW5rLT5wcm9kX2lkWzFdKQotCQlzdHJsY3B5KGRldm5hbWUsIGxpbmstPnByb2RfaWRbMV0sIHNpemVvZihkZXZuYW1lKSk7Ci0KLQkvKgotICAgICAgICAgKiBmaW5kIElPIHBvcnQKLSAgICAgICAgICovCi0JdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7IHR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlpID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwotCXdoaWxlIChpID09IENTX1NVQ0NFU1MpIHsKLQkgICAgaWYgKGNmLT5pby5ud2luID4gMCkgewotCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwotCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCWxpbmstPmlvLk51bVBvcnRzMSA9IGNmLT5pby53aW5bMF0ubGVuOwotCQlsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCQlwcmludGsoS0VSTl9JTkZPICJhdm1hMV9jczogdGVzdGluZyBpL28gJSN4LSUjeFxuIiwKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSwKLQkJCWxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKLQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCWlmIChpID09IENTX1NVQ0NFU1MpIGdvdG8gZm91bmRfcG9ydDsKLQkgICAgfQotCSAgICBpID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0JfQotCi1mb3VuZF9wb3J0OgotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkgICAgY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKLQkgICAgYnJlYWs7Ci0JfQotCQogCS8qCiAJICogYWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUKIAkgKi8KIAlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJICAgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCSAgICAvKiB1bmRvICovCiAJICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKQEAgLTI2Myw3ICsyMjgsNyBAQAogCSAqIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldAogCSAqLwogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgewogCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAkgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYwppbmRleCBkYjdlNjQ0Li5mNGQwZmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMKQEAgLTIwMyw4MiArMjAzLDU1IEBACiAgICAgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyBpbnQgZ2V0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAotICAgICAgICAgICAgICAgICAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCi17Ci0gICAgaW50IGkgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCB0dXBsZSk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgcmV0dXJuIGk7Ci0gICAgcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7Ci19CiAKLXN0YXRpYyBpbnQgZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCi0gICAgICAgICAgICAgICAgICAgICBjaXNwYXJzZV90ICpwYXJzZSkKK3N0YXRpYyBpbnQgZWxzYV9jc19jb25maWdjaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJICAgICAgIHZvaWQgKnByaXZfZGF0YSkKIHsKLSAgICBpbnQgaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgcmV0dXJuIGk7Ci0gICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7Ci19CisJaW50IGo7CiAKLXN0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLSAgICAgICAgICAgICAgICAgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQotewotICAgIGludCBpID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOwotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHJldHVybiBpOwotICAgIHJldHVybiBnZXRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiBjZi0+aW8ud2luWzBdLmJhc2UpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiKGVsc2FfY3M6IGxvb2tzIGxpa2UgdGhlIDk2IG1vZGVsKVxuIik7CisJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiKGVsc2FfY3M6IGxvb2tzIGxpa2UgdGhlIDk3IG1vZGVsKVxuIik7CisJCWZvciAoaiA9IDB4MmYwOyBqID4gMHgxMDA7IGogLT0gMHgxMCkgeworCQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGo7CisJCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIGludCBlbHNhX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIGNpc3BhcnNlX3QgcGFyc2U7CiAgICAgbG9jYWxfaW5mb190ICpkZXY7Ci0gICAgaW50IGksIGosIGxhc3RfZm47Ci0gICAgdV9zaG9ydCBidWZbMTI4XTsKLSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiA9ICZwYXJzZS5jZnRhYmxlX2VudHJ5OworICAgIGludCBpLCBsYXN0X2ZuOwogICAgIElzZG5DYXJkX3QgaWNhcmQ7CiAKICAgICBERUJVRygwLCAiZWxzYV9jb25maWcoMHglcClcbiIsIGxpbmspOwogICAgIGRldiA9IGxpbmstPnByaXY7CiAKLSAgICB0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotICAgIGkgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0gICAgd2hpbGUgKGkgPT0gQ1NfU1VDQ0VTUykgewotICAgICAgICBpZiAoIChjZi0+aW8ubndpbiA+IDApICYmIGNmLT5pby53aW5bMF0uYmFzZSkgewotICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiKGVsc2FfY3M6IGxvb2tzIGxpa2UgdGhlIDk2IG1vZGVsKVxuIik7Ci0gICAgICAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwotICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotICAgICAgICAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0gICAgICAgICAgICBpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIoZWxzYV9jczogbG9va3MgbGlrZSB0aGUgOTcgbW9kZWwpXG4iKTsKLSAgICAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwotICAgICAgICAgIGZvciAoaSA9IDAsIGogPSAweDJmMDsgaiA+IDB4MTAwOyBqIC09IDB4MTApIHsKLSAgICAgICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IGo7Ci0gICAgICAgICAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLSAgICAgICAgICAgIGlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0gICAgfQotCi0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGkgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgZWxzYV9jc19jb25maWdjaGVjaywgTlVMTCk7CisgICAgaWYgKGkgIT0gMCkgewogCWxhc3RfZm4gPSBSZXF1ZXN0SU87CiAJZ290byBjc19mYWlsZWQ7CiAgICAgfQogCiAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisgICAgaWYgKGkgIT0gMCkgewogICAgICAgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCWxhc3RfZm4gPSBSZXF1ZXN0SVJROwogICAgICAgICBnb3RvIGNzX2ZhaWxlZDsKICAgICB9CiAKICAgICBpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGlmIChpICE9IDApIHsKICAgICAgIGxhc3RfZm4gPSBSZXF1ZXN0Q29uZmlndXJhdGlvbjsKICAgICAgIGdvdG8gY3NfZmFpbGVkOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYwppbmRleCA0MzljYjUzLi45YTNjOWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jCkBAIC0yMTcsMTAxICsyMTcsNjEgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIGludCBzZWRsYmF1ZXJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQorc3RhdGljIGludCBzZWRsYmF1ZXJfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQkgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCQkgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJCSAgdm9pZCAqcHJpdl9kYXRhKQogewotICAgIGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIGNpc3BhcnNlX3QgcGFyc2U7Ci0gICAgaW50IGxhc3RfZm4sIGxhc3RfcmV0OwotICAgIHU4IGJ1Zls2NF07Ci0gICAgY29uZmlnX2luZm9fdCBjb25mOwotICAgIHdpbl9yZXFfdCByZXE7Ci0gICAgbWVtcmVxX3QgbWFwOwotICAgIElzZG5DYXJkX3QgIGljYXJkOworCXdpbl9yZXFfdCAqcmVxID0gcHJpdl9kYXRhOwogCi0gICAgREVCVUcoMCwgInNlZGxiYXVlcl9jb25maWcoMHglcClcbiIsIGxpbmspOworCWlmIChjZmctPmluZGV4ID09IDApCisJCXJldHVybiAtRU5PREVWOwogCi0gICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQotICAgIENTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmY29uZikpOwotCi0gICAgLyoKLSAgICAgIEluIHRoaXMgbG9vcCwgd2Ugc2NhbiB0aGUgQ0lTIGZvciBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJpZXMsCi0gICAgICBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nCi0gICAgICB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csIGFuZCBpbnRlcnJ1cHQgc2V0dGluZ3MuCi0KLSAgICAgIFdlIG1ha2Ugbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNhcmQgdG8gYmUgY29uZmlndXJlZDogd2UgdXNlCi0gICAgICBqdXN0IHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gdGhlIENJUy4gIEluIGFuIGlkZWFsIHdvcmxkLAotICAgICAgdGhpcyB3b3VsZCB3b3JrIGZvciBhbnkgUENNQ0lBIGNhcmQsIGJ1dCBpdCByZXF1aXJlcyBhIGNvbXBsZXRlCi0gICAgICBhbmQgYWNjdXJhdGUgQ0lTLiAgSW4gcHJhY3RpY2UsIGEgZHJpdmVyIHVzdWFsbHkgImtub3dzIiBtb3N0IG9mCi0gICAgICB0aGVzZSB0aGluZ3Mgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBDSVMsIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzCi0gICAgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCi0gICAgKi8KLSAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotICAgIHdoaWxlICgxKSB7Ci0JY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07Ci0JY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKLQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAotCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDApCi0JICAgIGdvdG8gbmV4dF9lbnRyeTsKLQotCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgZGZsdCA9ICpjZmc7Ci0JaWYgKGNmZy0+aW5kZXggPT0gMCkgZ290byBuZXh0X2VudHJ5OwotCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwotCQogCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLwogCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKLQkgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7Ci0JICAgIGxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CisJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKKwkJcF9kZXYtPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CiAJfQotCQorCiAJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCiAJLyogIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCiAJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JICAgIGlmIChjb25mLlZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDApCi0JCWdvdG8gbmV4dF9lbnRyeTsKLQl9IGVsc2UgaWYgKGRmbHQudmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JICAgIGlmIChjb25mLlZjYyAhPSBkZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDApCi0JCWdvdG8gbmV4dF9lbnRyeTsKKwkJaWYgKHZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UgaWYgKGRmbHQtPnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQlpZiAodmNjICE9IGRmbHQtPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDApCisJCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JICAgIAorCiAJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkgICAgbGluay0+Y29uZi5WcHAgPQotCQljZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwotCWVsc2UgaWYgKGRmbHQudnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkgICAgbGluay0+Y29uZi5WcHAgPQotCQlkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwotCQorCQlwX2Rldi0+Y29uZi5WcHAgPSBjZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOworCWVsc2UgaWYgKGRmbHQtPnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBfZGV2LT5jb25mLlZwcCA9IGRmbHQtPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOworCiAJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCi0JaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQotCSAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwotCQorCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LT5pcnEuSVJRSW5mbzEpCisJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCiAJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKLQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgewotCSAgICBjaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87Ci0JICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JICAgIGlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JICAgIGlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0vKiBuZXcgaW4gZHVtbXkuY3MgMjAwMS8wMS8yOCBNTiAKLSAgICAgICAgICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0qLwotCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCSAgICBpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gbGluay0+aW8uQXR0cmlidXRlczE7Ci0JCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47Ci0JICAgIH0KLQkgICAgLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkgICAgaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKLQkJZ290byBuZXh0X2VudHJ5OworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCX0KKwkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyoKQEAgLTMyNSwzMCArMjg1LDU0IEBACiAJICBuZWVkcyB0byBiZSBtYXBwZWQgdG8gdmlydHVhbCBzcGFjZSB3aXRoIGlvcmVtYXAoKSBiZWZvcmUgaXQKIAkgIGlzIHVzZWQuCiAJKi8KLQlpZiAoKGNmZy0+bWVtLm53aW4gPiAwKSB8fCAoZGZsdC5tZW0ubndpbiA+IDApKSB7Ci0JICAgIGNpc3RwbF9tZW1fdCAqbWVtID0KLQkJKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQubWVtOwotCSAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzE2fFdJTl9NRU1PUllfVFlQRV9DTTsKLQkgICAgcmVxLkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKLQkgICAgcmVxLkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7Ci0JICAgIHJlcS5TaXplID0gbWVtLT53aW5bMF0ubGVuOwotLyogbmV3IGluIGR1bW15LmNzIDIwMDEvMDEvMjggTU4gCi0gICAgICAgICAgICBpZiAocmVxLlNpemUgPCAweDEwMDApCi0gICAgICAgICAgICAgICAgcmVxLlNpemUgPSAweDEwMDA7Ci0qLwotCSAgICByZXEuQWNjZXNzU3BlZWQgPSAwOwotCSAgICBpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSAhPSAwKQotCQlnb3RvIG5leHRfZW50cnk7Ci0JICAgIG1hcC5QYWdlID0gMDsgbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7Ci0JICAgIGlmIChwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1hcCkgIT0gMCkKLQkJZ290byBuZXh0X2VudHJ5OworCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0LT5tZW0ubndpbiA+IDApKSB7CisJCWNpc3RwbF9tZW1fdCAqbWVtID0gKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQtPm1lbTsKKwkJbWVtcmVxX3QgbWFwOworCQlyZXEtPkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF8xNnxXSU5fTUVNT1JZX1RZUEVfQ007CisJCXJlcS0+QXR0cmlidXRlcyB8PSBXSU5fRU5BQkxFOworCQlyZXEtPkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7CisJCXJlcS0+U2l6ZSA9IG1lbS0+d2luWzBdLmxlbjsKKwkJcmVxLT5BY2Nlc3NTcGVlZCA9IDA7CisJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJnBfZGV2LCByZXEsICZwX2Rldi0+d2luKSAhPSAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCW1hcC5QYWdlID0gMDsKKwkJbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7CisJCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKHBfZGV2LT53aW4sICZtYXApICE9IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwotCWJyZWFrOworCXJldHVybiAwOworfQogCi0gICAgbmV4dF9lbnRyeToKLQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLSAgICB9CisKKworc3RhdGljIGludCBzZWRsYmF1ZXJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworICAgIGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKKyAgICB3aW5fcmVxX3QgKnJlcTsKKyAgICBpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CisgICAgSXNkbkNhcmRfdCAgaWNhcmQ7CisKKyAgICBERUJVRygwLCAic2VkbGJhdWVyX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisKKyAgICByZXEgPSBremFsbG9jKHNpemVvZih3aW5fcmVxX3QpLCBHRlBfS0VSTkVMKTsKKyAgICBpZiAoIXJlcSkKKwkgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICAvKgorICAgICAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKKyAgICAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKKyAgICAgIHZvbHRhZ2UsIElPIHdpbmRvdywgbWVtb3J5IHdpbmRvdywgYW5kIGludGVycnVwdCBzZXR0aW5ncy4KKworICAgICAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY2FyZCB0byBiZSBjb25maWd1cmVkOiB3ZSB1c2UKKyAgICAgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCisgICAgICB0aGlzIHdvdWxkIHdvcmsgZm9yIGFueSBQQ01DSUEgY2FyZCwgYnV0IGl0IHJlcXVpcmVzIGEgY29tcGxldGUKKyAgICAgIGFuZCBhY2N1cmF0ZSBDSVMuICBJbiBwcmFjdGljZSwgYSBkcml2ZXIgdXN1YWxseSAia25vd3MiIG1vc3Qgb2YKKyAgICAgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKKyAgICAgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KKyAgICAqLworICAgIGxhc3RfcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHNlZGxiYXVlcl9jb25maWdfY2hlY2ssIHJlcSk7CisgICAgaWYgKGxhc3RfcmV0KQorCSAgICBnb3RvIGZhaWxlZDsKIAogICAgIC8qCiAgICAgICAgQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQpAQCAtMzg3LDggKzM3MSw4IEBACiAJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAogCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIrbGluay0+aW8uTnVtUG9ydHMyLTEpOwogICAgIGlmIChsaW5rLT53aW4pCi0JcHJpbnRrKCIsIG1lbSAweCUwNmx4LTB4JTA2bHgiLCByZXEuQmFzZSwKLQkgICAgICAgcmVxLkJhc2UrcmVxLlNpemUtMSk7CisJcHJpbnRrKCIsIG1lbSAweCUwNmx4LTB4JTA2bHgiLCByZXEtPkJhc2UsCisJICAgICAgIHJlcS0+QmFzZStyZXEtPlNpemUtMSk7CiAgICAgcHJpbnRrKCJcbiIpOwogCiAgICAgaWNhcmQucGFyYVswXSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKQEAgLTQwOSw2ICszOTMsNyBAQAogCiBjc19mYWlsZWQ6CiAgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOworZmFpbGVkOgogICAgIHNlZGxiYXVlcl9yZWxlYXNlKGxpbmspOwogICAgIHJldHVybiAtRU5PREVWOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCmluZGV4IGFiNGJkNDUuLjYyM2QxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCkBAIC0xOTMsODIgKzE5Myw1NSBAQAogICAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLSAgICAgICAgICAgICAgICAgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQotewotICAgIGludCBpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHJldHVybiBpOwotICAgIHJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwotfQogCi1zdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAotICAgICAgICAgICAgICAgICAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IHRlbGVzX2NzX2NvbmZpZ2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiwKKwkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJCXVuc2lnbmVkIGludCB2Y2MsCisJCQkJdm9pZCAqcHJpdl9kYXRhKQogewotICAgIGludCBpID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKTsKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSByZXR1cm4gaTsKLSAgICByZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKLX0KKwlpbnQgajsKIAotc3RhdGljIGludCBuZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAotICAgICAgICAgICAgICAgICAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCi17Ci0gICAgaW50IGkgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgcmV0dXJuIGk7Ci0gICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJaWYgKChjZi0+aW8ubndpbiA+IDApICYmIGNmLT5pby53aW5bMF0uYmFzZSkgeworCQlwcmludGsoS0VSTl9JTkZPICIodGVsZXNfY3M6IGxvb2tzIGxpa2UgdGhlIDk2IG1vZGVsKVxuIik7CisJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiKHRlbGVzX2NzOiBsb29rcyBsaWtlIHRoZSA5NyBtb2RlbClcbiIpOworCQlmb3IgKGogPSAweDJmMDsgaiA+IDB4MTAwOyBqIC09IDB4MTApIHsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBqOworCQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyBpbnQgdGVsZXNfY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIHR1cGxlX3QgdHVwbGU7Ci0gICAgY2lzcGFyc2VfdCBwYXJzZTsKICAgICBsb2NhbF9pbmZvX3QgKmRldjsKLSAgICBpbnQgaSwgaiwgbGFzdF9mbjsKLSAgICB1X3Nob3J0IGJ1ZlsxMjhdOwotICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmID0gJnBhcnNlLmNmdGFibGVfZW50cnk7CisgICAgaW50IGksIGxhc3RfZm47CiAgICAgSXNkbkNhcmRfdCBpY2FyZDsKIAogICAgIERFQlVHKDAsICJ0ZWxlc19jb25maWcoMHglcClcbiIsIGxpbmspOwogICAgIGRldiA9IGxpbmstPnByaXY7CiAKLSAgICB0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotICAgIGkgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0gICAgd2hpbGUgKGkgPT0gQ1NfU1VDQ0VTUykgewotICAgICAgICBpZiAoIChjZi0+aW8ubndpbiA+IDApICYmIGNmLT5pby53aW5bMF0uYmFzZSkgewotICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiKHRlbGVzX2NzOiBsb29rcyBsaWtlIHRoZSA5NiBtb2RlbClcbiIpOwotICAgICAgICAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKLSAgICAgICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLSAgICAgICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotICAgICAgICAgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiKHRlbGVzX2NzOiBsb29rcyBsaWtlIHRoZSA5NyBtb2RlbClcbiIpOwotICAgICAgICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7Ci0gICAgICAgICAgZm9yIChpID0gMCwgaiA9IDB4MmYwOyBqID4gMHgxMDA7IGogLT0gMHgxMCkgewotICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQxID0gajsKLSAgICAgICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotICAgICAgICAgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLSAgICB9Ci0KLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisgICAgaSA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCB0ZWxlc19jc19jb25maWdjaGVjaywgTlVMTCk7CisgICAgaWYgKGkgIT0gMCkgewogCWxhc3RfZm4gPSBSZXF1ZXN0SU87CiAJZ290byBjc19mYWlsZWQ7CiAgICAgfQogCiAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisgICAgaWYgKGkgIT0gMCkgewogICAgICAgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCWxhc3RfZm4gPSBSZXF1ZXN0SVJROwogICAgICAgICBnb3RvIGNzX2ZhaWxlZDsKICAgICB9CiAKICAgICBpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGlmIChpICE9IDApIHsKICAgICAgIGxhc3RfZm4gPSBSZXF1ZXN0Q29uZmlndXJhdGlvbjsKICAgICAgIGdvdG8gY3NfZmFpbGVkOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfY214LmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2NteC5jCmluZGV4IGU5MmIxYmEuLmMyZjUxY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfY214LmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL2RzcF9jbXguYwpAQCAtNDUyLDEwICs0NTIsMTAgQEAKIAkJCWlmIChmaW5kZHNwLT5mZWF0dXJlcy5wY21faWQgPT0gZHNwLT5mZWF0dXJlcy5wY21faWQpIHsKIAkJCQlpZiAoZmluZGRzcC0+cGNtX3Nsb3RfcnggPj0gMCAmJgogCQkJCSAgICBmaW5kZHNwLT5wY21fc2xvdF9yeCA8IHNpemVvZihmcmVlc2xvdHMpKQotCQkJCQlmcmVlc2xvdHNbZmluZGRzcC0+cGNtX3Nsb3RfdHhdID0gMDsKKwkJCQkJZnJlZXNsb3RzW2ZpbmRkc3AtPnBjbV9zbG90X3J4XSA9IDA7CiAJCQkJaWYgKGZpbmRkc3AtPnBjbV9zbG90X3R4ID49IDAgJiYKIAkJCQkgICAgZmluZGRzcC0+cGNtX3Nsb3RfdHggPCBzaXplb2YoZnJlZXNsb3RzKSkKLQkJCQkJZnJlZXNsb3RzW2ZpbmRkc3AtPnBjbV9zbG90X3J4XSA9IDA7CisJCQkJCWZyZWVzbG90c1tmaW5kZHNwLT5wY21fc2xvdF90eF0gPSAwOwogCQkJfQogCQl9CiAJCWkgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYwppbmRleCBlNzQ2MjkyLi44NzVmYWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYwpAQCAtNjEsNyArNjEsNyBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d2FpdCk7CiAJZmlsZXAtPnByaXZhdGVfZGF0YSA9IGRldjsKIAlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwotCXJldHVybiAwOworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlubywgZmlsZXApOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCmluZGV4IGUzZTQwNDIuLmM3ZmYxZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCkBAIC0xNzksNyArMTc5LDcgQEAKIAogY29uZmlnIExFRFNfVFJJR0dFUl9JREVfRElTSwogCWJvb2wgIkxFRCBJREUgRGlzayBUcmlnZ2VyIgotCWRlcGVuZHMgb24gTEVEU19UUklHR0VSUyAmJiBCTEtfREVWX0lERURJU0sKKwlkZXBlbmRzIG9uIExFRFNfVFJJR0dFUlMgJiYgSURFX0dEX0FUQQogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIExFRHMgdG8gYmUgY29udHJvbGxlZCBieSBJREUgZGlzayBhY3Rpdml0eS4KIAkgIElmIHVuc3VyZSwgc2F5IFkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKaW5kZXggNTU5YTQwOC4uZWU3NGVlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYwpAQCAtMTAzLDggKzEwMyw4IEBACiB7CiAJaW50IHJjOwogCi0JbGVkX2NkZXYtPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShsZWRzX2NsYXNzLCBwYXJlbnQsIDAsIGxlZF9jZGV2LAotCQkJCQkgICAgICAiJXMiLCBsZWRfY2Rldi0+bmFtZSk7CisJbGVkX2NkZXYtPmRldiA9IGRldmljZV9jcmVhdGUobGVkc19jbGFzcywgcGFyZW50LCAwLCBsZWRfY2RldiwKKwkJCQkgICAgICAiJXMiLCBsZWRfY2Rldi0+bmFtZSk7CiAJaWYgKElTX0VSUihsZWRfY2Rldi0+ZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIobGVkX2NkZXYtPmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWhwNnh4LmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1ocDZ4eC5jCmluZGV4IDg0NGQ1OTcuLmU4ZmIxYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWhwNnh4LmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtaHA2eHguYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KIAogc3RhdGljIHZvaWQgaHA2eHhsZWRfZ3JlZW5fc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogCQkJICAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9hZGIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jCmluZGV4IGNhZTUyNDguLjIzNzQxY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jCkBAIC04NjIsOCArODYyLDcgQEAKIAlhZGJfZGV2X2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAiYWRiIik7CiAJaWYgKElTX0VSUihhZGJfZGV2X2NsYXNzKSkKIAkJcmV0dXJuOwotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShhZGJfZGV2X2NsYXNzLCBOVUxMLCBNS0RFVihBREJfTUFKT1IsIDApLCBOVUxMLAotCQkJICAgICAgImFkYiIpOworCWRldmljZV9jcmVhdGUoYWRiX2Rldl9jbGFzcywgTlVMTCwgTUtERVYoQURCX01BSk9SLCAwKSwgTlVMTCwgImFkYiIpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhZGJfcGZkZXYpOwogCXBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmYWRiX3BmZHJ2LCBhZGJfZHVtbXlfcHJvYmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9LY29uZmlnIGIvZHJpdmVycy9tZC9LY29uZmlnCmluZGV4IDA3ZDkyYzEuLjIyODFiNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvS2NvbmZpZworKysgYi9kcml2ZXJzL21kL0tjb25maWcKQEAgLTMwLDYgKzMwLDIwIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBNRF9BVVRPREVURUNUCisJYm9vbCAiQXV0b2RldGVjdCBSQUlEIGFycmF5cyBkdXJpbmcga2VybmVsIGJvb3QiCisJZGVwZW5kcyBvbiBCTEtfREVWX01EPXkKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUga2VybmVsIHdpbGwgdHJ5IHRvIGF1dG9kZXRlY3QgcmFpZAorCSAgYXJyYXlzIGFzIHBhcnQgb2YgaXRzIGJvb3QgcHJvY2Vzcy4gCisKKwkgIElmIHlvdSBkb24ndCB1c2UgcmFpZCBhbmQgc2F5IFksIHRoaXMgYXV0b2RldGVjdGlvbiBjYW4gY2F1c2UgCisJICBhIHNldmVyYWwtc2Vjb25kIGRlbGF5IGluIHRoZSBib290IHRpbWUgZHVlIHRvIHZhcmlvdXMKKwkgIHN5bmNocm9uaXNhdGlvbiBzdGVwcyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgc3RlcC4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIE1EX0xJTkVBUgogCXRyaXN0YXRlICJMaW5lYXIgKGFwcGVuZCkgbW9kZSIKIAlkZXBlbmRzIG9uIEJMS19ERVZfTUQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tbXBhdGguYyBiL2RyaXZlcnMvbWQvZG0tbXBhdGguYwppbmRleCAxMDMzMDRjLi45YmYzNDYwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbXBhdGguYwpAQCAtODQ5LDcgKzg0OSw3IEBACiAJZG1fYmlvX3JlY29yZCgmbXBpby0+ZGV0YWlscywgYmlvKTsKIAogCW1hcF9jb250ZXh0LT5wdHIgPSBtcGlvOwotCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXX0ZBSUxGQVNUKTsKKwliaW8tPmJpX3J3IHw9ICgxIDw8IEJJT19SV19GQUlMRkFTVF9UUkFOU1BPUlQpOwogCXIgPSBtYXBfaW8obSwgYmlvLCBtcGlvLCAwKTsKIAlpZiAociA8IDAgfHwgciA9PSBETV9NQVBJT19SRVFVRVVFKQogCQltZW1wb29sX2ZyZWUobXBpbywgbS0+bXBpb19wb29sKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZmF1bHR5LmMgYi9kcml2ZXJzL21kL2ZhdWx0eS5jCmluZGV4IDI2ODU0N2QuLmYyNmMxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZmF1bHR5LmMKKysrIGIvZHJpdmVycy9tZC9mYXVsdHkuYwpAQCAtMjg3LDYgKzI4Nyw4IEBACiAJaW50IGk7CiAKIAljb25mX3QgKmNvbmYgPSBrbWFsbG9jKHNpemVvZigqY29uZiksIEdGUF9LRVJORUwpOworCWlmICghY29uZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlmb3IgKGk9MDsgaTxNb2RlczsgaSsrKSB7CiAJCWF0b21pY19zZXQoJmNvbmYtPmNvdW50ZXJzW2ldLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbGluZWFyLmMgYi9kcml2ZXJzL21kL2xpbmVhci5jCmluZGV4IGI5Y2JlZTY4Li4xOTAxNDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2xpbmVhci5jCisrKyBiL2RyaXZlcnMvbWQvbGluZWFyLmMKQEAgLTE2LDE2ICsxNiw4IEBACiAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gIAogKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL2xpbmVhci5oPgogCi0jZGVmaW5lIE1BSk9SX05SIE1EX01BSk9SCi0jZGVmaW5lIE1EX0RSSVZFUgotI2RlZmluZSBNRF9QRVJTT05BTElUWQotCiAvKgogICogZmluZCB3aGljaCBkZXZpY2UgaG9sZHMgYSBwYXJ0aWN1bGFyIG9mZnNldCAKICAqLwpAQCAtMzMsMTYgKzI1LDE1IEBACiB7CiAJZGV2X2luZm9fdCAqaGFzaDsKIAlsaW5lYXJfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7Ci0Jc2VjdG9yX3QgYmxvY2sgPSBzZWN0b3IgPj4gMTsKIAogCS8qCiAJICogc2VjdG9yX2RpdihhLGIpIHJldHVybnMgdGhlIHJlbWFpbmVyIGFuZCBzZXRzIGEgdG8gYS9iCiAJICovCi0JYmxvY2sgPj49IGNvbmYtPnByZXNoaWZ0OwotCSh2b2lkKXNlY3Rvcl9kaXYoYmxvY2ssIGNvbmYtPmhhc2hfc3BhY2luZyk7Ci0JaGFzaCA9IGNvbmYtPmhhc2hfdGFibGVbYmxvY2tdOworCXNlY3RvciA+Pj0gY29uZi0+c2VjdG9yX3NoaWZ0OworCSh2b2lkKXNlY3Rvcl9kaXYoc2VjdG9yLCBjb25mLT5zcGFjaW5nKTsKKwloYXNoID0gY29uZi0+aGFzaF90YWJsZVtzZWN0b3JdOwogCi0Jd2hpbGUgKChzZWN0b3I+PjEpID49IChoYXNoLT5zaXplICsgaGFzaC0+b2Zmc2V0KSkKKwl3aGlsZSAoc2VjdG9yID49IGhhc2gtPm51bV9zZWN0b3JzICsgaGFzaC0+c3RhcnRfc2VjdG9yKQogCQloYXNoKys7CiAJcmV0dXJuIGhhc2g7CiB9CkBAIC02NSw3ICs1Niw3IEBACiAJc2VjdG9yX3Qgc2VjdG9yID0gYnZtLT5iaV9zZWN0b3IgKyBnZXRfc3RhcnRfc2VjdChidm0tPmJpX2JkZXYpOwogCiAJZGV2MCA9IHdoaWNoX2RldihtZGRldiwgc2VjdG9yKTsKLQltYXhzZWN0b3JzID0gKGRldjAtPnNpemUgPDwgMSkgLSAoc2VjdG9yIC0gKGRldjAtPm9mZnNldDw8MSkpOworCW1heHNlY3RvcnMgPSBkZXYwLT5udW1fc2VjdG9ycyAtIChzZWN0b3IgLSBkZXYwLT5zdGFydF9zZWN0b3IpOwogCiAJaWYgKG1heHNlY3RvcnMgPCBiaW9fc2VjdG9ycykKIAkJbWF4c2VjdG9ycyA9IDA7CkBAIC0xMTIsOCArMTAzLDggQEAKIAlkZXZfaW5mb190ICoqdGFibGU7CiAJbWRrX3JkZXZfdCAqcmRldjsKIAlpbnQgaSwgbmJfem9uZSwgY250OwotCXNlY3Rvcl90IG1pbl9zcGFjaW5nOwotCXNlY3Rvcl90IGN1cnJfb2Zmc2V0OworCXNlY3Rvcl90IG1pbl9zZWN0b3JzOworCXNlY3Rvcl90IGN1cnJfc2VjdG9yOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAogCWNvbmYgPSBremFsbG9jIChzaXplb2YgKCpjb25mKSArIHJhaWRfZGlza3Mqc2l6ZW9mKGRldl9pbmZvX3QpLApAQCAtMTQ1LDcgKzEzNiw3IEBACiAJCSAgICBtZGRldi0+cXVldWUtPm1heF9zZWN0b3JzID4gKFBBR0VfU0laRT4+OSkpCiAJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOwogCi0JCWRpc2stPnNpemUgPSByZGV2LT5zaXplOworCQlkaXNrLT5udW1fc2VjdG9ycyA9IHJkZXYtPnNpemUgKiAyOwogCQljb25mLT5hcnJheV9zZWN0b3JzICs9IHJkZXYtPnNpemUgKiAyOwogCiAJCWNudCsrOwpAQCAtMTU1LDM0ICsxNDYsMzQgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbWluX3NwYWNpbmcgPSBjb25mLT5hcnJheV9zZWN0b3JzIC8gMjsKLQlzZWN0b3JfZGl2KG1pbl9zcGFjaW5nLCBQQUdFX1NJWkUvc2l6ZW9mKHN0cnVjdCBkZXZfaW5mbyAqKSk7CisJbWluX3NlY3RvcnMgPSBjb25mLT5hcnJheV9zZWN0b3JzOworCXNlY3Rvcl9kaXYobWluX3NlY3RvcnMsIFBBR0VfU0laRS9zaXplb2Yoc3RydWN0IGRldl9pbmZvICopKTsKIAotCS8qIG1pbl9zcGFjaW5nIGlzIHRoZSBtaW5pbXVtIHNwYWNpbmcgdGhhdCB3aWxsIGZpdCB0aGUgaGFzaAorCS8qIG1pbl9zZWN0b3JzIGlzIHRoZSBtaW5pbXVtIHNwYWNpbmcgdGhhdCB3aWxsIGZpdCB0aGUgaGFzaAogCSAqIHRhYmxlIGluIG9uZSBQQUdFLiAgVGhpcyBtYXkgYmUgbXVjaCBzbWFsbGVyIHRoYW4gbmVlZGVkLgogCSAqIFdlIGZpbmQgdGhlIHNtYWxsZXN0IG5vbi10ZXJtaW5hbCBzZXQgb2YgY29uc2VjdXRpdmUgZGV2aWNlcwotCSAqIHRoYXQgaXMgbGFyZ2VyIHRoYW4gbWluX3NwYWNpbmcgYXMgdXNlIHRoZSBzaXplIG9mIHRoYXQgYXMKKwkgKiB0aGF0IGlzIGxhcmdlciB0aGFuIG1pbl9zZWN0b3JzIGFuZCB1c2UgdGhlIHNpemUgb2YgdGhhdCBhcwogCSAqIHRoZSBhY3R1YWwgc3BhY2luZwogCSAqLwotCWNvbmYtPmhhc2hfc3BhY2luZyA9IGNvbmYtPmFycmF5X3NlY3RvcnMgLyAyOworCWNvbmYtPnNwYWNpbmcgPSBjb25mLT5hcnJheV9zZWN0b3JzOwogCWZvciAoaT0wOyBpIDwgY250LTEgOyBpKyspIHsKLQkJc2VjdG9yX3Qgc3ogPSAwOworCQlzZWN0b3JfdCB0bXAgPSAwOwogCQlpbnQgajsKLQkJZm9yIChqID0gaTsgaiA8IGNudCAtIDEgJiYgc3ogPCBtaW5fc3BhY2luZzsgaisrKQotCQkJc3ogKz0gY29uZi0+ZGlza3Nbal0uc2l6ZTsKLQkJaWYgKHN6ID49IG1pbl9zcGFjaW5nICYmIHN6IDwgY29uZi0+aGFzaF9zcGFjaW5nKQotCQkJY29uZi0+aGFzaF9zcGFjaW5nID0gc3o7CisJCWZvciAoaiA9IGk7IGogPCBjbnQgLSAxICYmIHRtcCA8IG1pbl9zZWN0b3JzOyBqKyspCisJCQl0bXAgKz0gY29uZi0+ZGlza3Nbal0ubnVtX3NlY3RvcnM7CisJCWlmICh0bXAgPj0gbWluX3NlY3RvcnMgJiYgdG1wIDwgY29uZi0+c3BhY2luZykKKwkJCWNvbmYtPnNwYWNpbmcgPSB0bXA7CiAJfQogCi0JLyogaGFzaF9zcGFjaW5nIG1heSBiZSB0b28gbGFyZ2UgZm9yIHNlY3Rvcl9kaXYgdG8gd29yayB3aXRoLAorCS8qIHNwYWNpbmcgbWF5IGJlIHRvbyBsYXJnZSBmb3Igc2VjdG9yX2RpdiB0byB3b3JrIHdpdGgsCiAJICogc28gd2UgbWlnaHQgbmVlZCB0byBwcmUtc2hpZnQKIAkgKi8KLQljb25mLT5wcmVzaGlmdCA9IDA7CisJY29uZi0+c2VjdG9yX3NoaWZ0ID0gMDsKIAlpZiAoc2l6ZW9mKHNlY3Rvcl90KSA+IHNpemVvZih1MzIpKSB7Ci0JCXNlY3Rvcl90IHNwYWNlID0gY29uZi0+aGFzaF9zcGFjaW5nOworCQlzZWN0b3JfdCBzcGFjZSA9IGNvbmYtPnNwYWNpbmc7CiAJCXdoaWxlIChzcGFjZSA+IChzZWN0b3JfdCkofih1MzIpMCkpIHsKIAkJCXNwYWNlID4+PSAxOwotCQkJY29uZi0+cHJlc2hpZnQrKzsKKwkJCWNvbmYtPnNlY3Rvcl9zaGlmdCsrOwogCQl9CiAJfQogCS8qCkBAIC0xOTQsOSArMTg1LDkgQEAKIAkJdW5zaWduZWQgcm91bmQ7CiAJCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAotCQlzeiA9IGNvbmYtPmFycmF5X3NlY3RvcnMgPj4gKGNvbmYtPnByZXNoaWZ0ICsgMSk7CisJCXN6ID0gY29uZi0+YXJyYXlfc2VjdG9ycyA+PiBjb25mLT5zZWN0b3Jfc2hpZnQ7CiAJCXN6ICs9IDE7IC8qIGZvcmNlIHJvdW5kLXVwICovCi0JCWJhc2UgPSBjb25mLT5oYXNoX3NwYWNpbmcgPj4gY29uZi0+cHJlc2hpZnQ7CisJCWJhc2UgPSBjb25mLT5zcGFjaW5nID4+IGNvbmYtPnNlY3Rvcl9zaGlmdDsKIAkJcm91bmQgPSBzZWN0b3JfZGl2KHN6LCBiYXNlKTsKIAkJbmJfem9uZSA9IHN6ICsgKHJvdW5kID8gMSA6IDApOwogCX0KQEAgLTIxMSwzMiArMjAyLDMxIEBACiAJICogSGVyZSB3ZSBnZW5lcmF0ZSB0aGUgbGluZWFyIGhhc2ggdGFibGUKIAkgKiBGaXJzdCBjYWxjdWxhdGUgdGhlIGRldmljZSBvZmZzZXRzLgogCSAqLwotCWNvbmYtPmRpc2tzWzBdLm9mZnNldCA9IDA7CisJY29uZi0+ZGlza3NbMF0uc3RhcnRfc2VjdG9yID0gMDsKIAlmb3IgKGkgPSAxOyBpIDwgcmFpZF9kaXNrczsgaSsrKQotCQljb25mLT5kaXNrc1tpXS5vZmZzZXQgPQotCQkJY29uZi0+ZGlza3NbaS0xXS5vZmZzZXQgKwotCQkJY29uZi0+ZGlza3NbaS0xXS5zaXplOworCQljb25mLT5kaXNrc1tpXS5zdGFydF9zZWN0b3IgPQorCQkJY29uZi0+ZGlza3NbaS0xXS5zdGFydF9zZWN0b3IgKworCQkJY29uZi0+ZGlza3NbaS0xXS5udW1fc2VjdG9yczsKIAogCXRhYmxlID0gY29uZi0+aGFzaF90YWJsZTsKLQljdXJyX29mZnNldCA9IDA7CiAJaSA9IDA7Ci0JZm9yIChjdXJyX29mZnNldCA9IDA7Ci0JICAgICBjdXJyX29mZnNldCA8IGNvbmYtPmFycmF5X3NlY3RvcnMgLyAyOwotCSAgICAgY3Vycl9vZmZzZXQgKz0gY29uZi0+aGFzaF9zcGFjaW5nKSB7CisJZm9yIChjdXJyX3NlY3RvciA9IDA7CisJICAgICBjdXJyX3NlY3RvciA8IGNvbmYtPmFycmF5X3NlY3RvcnM7CisJICAgICBjdXJyX3NlY3RvciArPSBjb25mLT5zcGFjaW5nKSB7CiAKIAkJd2hpbGUgKGkgPCByYWlkX2Rpc2tzLTEgJiYKLQkJICAgICAgIGN1cnJfb2Zmc2V0ID49IGNvbmYtPmRpc2tzW2krMV0ub2Zmc2V0KQorCQkgICAgICAgY3Vycl9zZWN0b3IgPj0gY29uZi0+ZGlza3NbaSsxXS5zdGFydF9zZWN0b3IpCiAJCQlpKys7CiAKIAkJKnRhYmxlICsrID0gY29uZi0+ZGlza3MgKyBpOwogCX0KIAotCWlmIChjb25mLT5wcmVzaGlmdCkgewotCQljb25mLT5oYXNoX3NwYWNpbmcgPj49IGNvbmYtPnByZXNoaWZ0OwotCQkvKiByb3VuZCBoYXNoX3NwYWNpbmcgdXAgc28gdGhhdCB3aGVuIHdlIGRpdmlkZSBieSBpdCwKKwlpZiAoY29uZi0+c2VjdG9yX3NoaWZ0KSB7CisJCWNvbmYtPnNwYWNpbmcgPj49IGNvbmYtPnNlY3Rvcl9zaGlmdDsKKwkJLyogcm91bmQgc3BhY2luZyB1cCBzbyB0aGF0IHdoZW4gd2UgZGl2aWRlIGJ5IGl0LAogCQkgKiB3ZSBlcnIgb24gdGhlIHNpZGUgb2YgInRvby1sb3ciLCB3aGljaCBpcyBzYWZlc3QuCiAJCSAqLwotCQljb25mLT5oYXNoX3NwYWNpbmcrKzsKKwkJY29uZi0+c3BhY2luZysrOwogCX0KIAogCUJVR19PTih0YWJsZSAtIGNvbmYtPmhhc2hfdGFibGUgPiBuYl96b25lKTsKQEAgLTMxNyw3ICszMDcsNiBAQAogCWNvbnN0IGludCBydyA9IGJpb19kYXRhX2RpcihiaW8pOwogCW1kZGV2X3QgKm1kZGV2ID0gcS0+cXVldWVkYXRhOwogCWRldl9pbmZvX3QgKnRtcF9kZXY7Ci0Jc2VjdG9yX3QgYmxvY2s7CiAJaW50IGNwdTsKIAogCWlmICh1bmxpa2VseShiaW9fYmFycmllcihiaW8pKSkgewpAQCAtMzMyLDI5ICszMjEsMzMgQEAKIAlwYXJ0X3N0YXRfdW5sb2NrKCk7CiAKIAl0bXBfZGV2ID0gd2hpY2hfZGV2KG1kZGV2LCBiaW8tPmJpX3NlY3Rvcik7Ci0JYmxvY2sgPSBiaW8tPmJpX3NlY3RvciA+PiAxOwogICAgIAotCWlmICh1bmxpa2VseShibG9jayA+PSAodG1wX2Rldi0+c2l6ZSArIHRtcF9kZXYtPm9mZnNldCkKLQkJICAgICB8fCBibG9jayA8IHRtcF9kZXYtPm9mZnNldCkpIHsKKwlpZiAodW5saWtlbHkoYmlvLT5iaV9zZWN0b3IgPj0gKHRtcF9kZXYtPm51bV9zZWN0b3JzICsKKwkJCQkJdG1wX2Rldi0+c3RhcnRfc2VjdG9yKQorCQkgICAgIHx8IChiaW8tPmJpX3NlY3RvciA8CisJCQkgdG1wX2Rldi0+c3RhcnRfc2VjdG9yKSkpIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCi0JCXByaW50aygibGluZWFyX21ha2VfcmVxdWVzdDogQmxvY2sgJWxsdSBvdXQgb2YgYm91bmRzIG9uICIKLQkJCSJkZXYgJXMgc2l6ZSAlbGx1IG9mZnNldCAlbGx1XG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jaywKKwkJcHJpbnRrKCJsaW5lYXJfbWFrZV9yZXF1ZXN0OiBTZWN0b3IgJWxsdSBvdXQgb2YgYm91bmRzIG9uICIKKwkJCSJkZXYgJXM6ICVsbHUgc2VjdG9ycywgb2Zmc2V0ICVsbHVcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWJpby0+Ymlfc2VjdG9yLAogCQkJYmRldm5hbWUodG1wX2Rldi0+cmRldi0+YmRldiwgYiksCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXRtcF9kZXYtPnNpemUsCi0JCSAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl0bXBfZGV2LT5vZmZzZXQpOworCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0bXBfZGV2LT5udW1fc2VjdG9ycywKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdG1wX2Rldi0+c3RhcnRfc2VjdG9yKTsKIAkJYmlvX2lvX2Vycm9yKGJpbyk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAodW5saWtlbHkoYmlvLT5iaV9zZWN0b3IgKyAoYmlvLT5iaV9zaXplID4+IDkpID4KLQkJICAgICAodG1wX2Rldi0+b2Zmc2V0ICsgdG1wX2Rldi0+c2l6ZSk8PDEpKSB7CisJCSAgICAgdG1wX2Rldi0+c3RhcnRfc2VjdG9yICsgdG1wX2Rldi0+bnVtX3NlY3RvcnMpKSB7CiAJCS8qIFRoaXMgYmlvIGNyb3NzZXMgYSBkZXZpY2UgYm91bmRhcnksIHNvIHdlIGhhdmUgdG8KIAkJICogc3BsaXQgaXQuCiAJCSAqLwogCQlzdHJ1Y3QgYmlvX3BhaXIgKmJwOworCiAJCWJwID0gYmlvX3NwbGl0KGJpbywKLQkJCSAgICAgICAoKHRtcF9kZXYtPm9mZnNldCArIHRtcF9kZXYtPnNpemUpPDwxKSAtIGJpby0+Ymlfc2VjdG9yKTsKKwkJCSAgICAgICB0bXBfZGV2LT5zdGFydF9zZWN0b3IgKyB0bXBfZGV2LT5udW1fc2VjdG9ycworCQkJICAgICAgIC0gYmlvLT5iaV9zZWN0b3IpOworCiAJCWlmIChsaW5lYXJfbWFrZV9yZXF1ZXN0KHEsICZicC0+YmlvMSkpCiAJCQlnZW5lcmljX21ha2VfcmVxdWVzdCgmYnAtPmJpbzEpOwogCQlpZiAobGluZWFyX21ha2VfcmVxdWVzdChxLCAmYnAtPmJpbzIpKQpAQCAtMzY0LDcgKzM1Nyw4IEBACiAJfQogCQkgICAgCiAJYmlvLT5iaV9iZGV2ID0gdG1wX2Rldi0+cmRldi0+YmRldjsKLQliaW8tPmJpX3NlY3RvciA9IGJpby0+Ymlfc2VjdG9yIC0gKHRtcF9kZXYtPm9mZnNldCA8PCAxKSArIHRtcF9kZXYtPnJkZXYtPmRhdGFfb2Zmc2V0OworCWJpby0+Ymlfc2VjdG9yID0gYmlvLT5iaV9zZWN0b3IgLSB0bXBfZGV2LT5zdGFydF9zZWN0b3IKKwkJKyB0bXBfZGV2LT5yZGV2LT5kYXRhX29mZnNldDsKIAogCXJldHVybiAxOwogfQpAQCAtMzcyLDI5ICszNjYsNiBAQAogc3RhdGljIHZvaWQgbGluZWFyX3N0YXR1cyAoc3RydWN0IHNlcV9maWxlICpzZXEsIG1kZGV2X3QgKm1kZGV2KQogewogCi0jdW5kZWYgTURfREVCVUcKLSNpZmRlZiBNRF9ERUJVRwotCWludCBqOwotCWxpbmVhcl9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKLQlzZWN0b3JfdCBzID0gMDsKLSAgCi0Jc2VxX3ByaW50ZihzZXEsICIgICAgICAiKTsKLQlmb3IgKGogPSAwOyBqIDwgbWRkZXYtPnJhaWRfZGlza3M7IGorKykKLQl7Ci0JCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKLQkJcyArPSBjb25mLT5zbWFsbGVzdF9zaXplOwotCQlzZXFfcHJpbnRmKHNlcSwgIlslcyIsCi0JCQkgICBiZGV2bmFtZShjb25mLT5oYXNoX3RhYmxlW2pdWzBdLnJkZXYtPmJkZXYsYikpOwotCi0JCXdoaWxlIChzID4gY29uZi0+aGFzaF90YWJsZVtqXVswXS5vZmZzZXQgKwotCQkgICAgICAgICAgIGNvbmYtPmhhc2hfdGFibGVbal1bMF0uc2l6ZSkKLQkJCXNlcV9wcmludGYoc2VxLCAiLyVzXSAiLAotCQkJCSAgIGJkZXZuYW1lKGNvbmYtPmhhc2hfdGFibGVbal1bMV0ucmRldi0+YmRldixiKSk7Ci0JCWVsc2UKLQkJCXNlcV9wcmludGYoc2VxLCAiXSAiKTsKLQl9Ci0Jc2VxX3ByaW50ZihzZXEsICJcbiIpOwotI2VuZGlmCiAJc2VxX3ByaW50ZihzZXEsICIgJWRrIHJvdW5kaW5nIiwgbWRkZXYtPmNodW5rX3NpemUvMTAyNCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCAwYTNhNGJkLi5hYWEzZDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0zMiwzMSArMzIsMjEgQEAKICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4gLyogZm9yIGludmFsaWRhdGVfYmRldiAqLwogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotCi0jaWZkZWYgQ09ORklHX0tNT0QKLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjZGVmaW5lIE1BSk9SX05SIE1EX01BSk9SCi0jZGVmaW5lIE1EX0RSSVZFUgogCiAvKiA2MyBwYXJ0aXRpb25zIHdpdGggdGhlIGFsdGVybmF0ZSBtYWpvciBudW1iZXIgKG1kcCkgKi8KICNkZWZpbmUgTWRwTWlub3JTaGlmdCA2CkBAIC02Niw3ICs1Niw3IEBACiAKIAogI2lmbmRlZiBNT0RVTEUKLXN0YXRpYyB2b2lkIGF1dG9zdGFydF9hcnJheXMgKGludCBwYXJ0KTsKK3N0YXRpYyB2b2lkIGF1dG9zdGFydF9hcnJheXMoaW50IHBhcnQpOwogI2VuZGlmCiAKIHN0YXRpYyBMSVNUX0hFQUQocGVyc19saXN0KTsKQEAgLTIxMiw3ICsyMDIsNyBAQAogCQkpCiAKIAotc3RhdGljIGludCBtZF9mYWlsX3JlcXVlc3QgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgaW50IG1kX2ZhaWxfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQogewogCWJpb19pb19lcnJvcihiaW8pOwogCXJldHVybiAwOwpAQCAtMjEwNiw4ICsyMDk2LDYgQEAKIAogCWlmIChzdHJpY3Rfc3RydG91bGwoYnVmLCAxMCwgJnNpemUpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHNpemUgPCBteV9tZGRldi0+c2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKG15X21kZGV2LT5wZXJzICYmIHJkZXYtPnJhaWRfZGlzayA+PSAwKSB7CiAJCWlmIChteV9tZGRldi0+cGVyc2lzdGVudCkgewogCQkJc2l6ZSA9IHN1cGVyX3R5cGVzW215X21kZGV2LT5tYWpvcl92ZXJzaW9uXS4KQEAgLTIxMTgsOSArMjEwNiw5IEBACiAJCQlzaXplID0gKHJkZXYtPmJkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gMTApOwogCQkJc2l6ZSAtPSByZGV2LT5kYXRhX29mZnNldC8yOwogCQl9Ci0JCWlmIChzaXplIDwgbXlfbWRkZXYtPnNpemUpCi0JCQlyZXR1cm4gLUVJTlZBTDsgLyogY29tcG9uZW50IG11c3QgZml0IGRldmljZSAqLwogCX0KKwlpZiAoc2l6ZSA8IG15X21kZGV2LT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogY29tcG9uZW50IG11c3QgZml0IGRldmljZSAqLwogCiAJcmRldi0+c2l6ZSA9IHNpemU7CiAJaWYgKHNpemUgPiBvbGRzaXplICYmIG15X21kZGV2LT5leHRlcm5hbCkgewpAQCAtMjQwNiwxMiArMjM5NCwxMSBAQAogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgbXNlYzsKIAljaGFyIGJ1ZlszMF07Ci0JY2hhciAqZTsKKwogCS8qIHJlbW92ZSBhIHBlcmlvZCwgYW5kIGNvdW50IGRpZ2l0cyBhZnRlciBpdCAqLwogCWlmIChsZW4gPj0gc2l6ZW9mKGJ1ZikpCiAJCXJldHVybiAtRUlOVkFMOwotCXN0cmxjcHkoYnVmLCBjYnVmLCBsZW4pOwotCWJ1ZltsZW5dID0gMDsKKwlzdHJsY3B5KGJ1ZiwgY2J1Ziwgc2l6ZW9mKGJ1ZikpOwogCWZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CiAJCWlmIChkb3QpIHsKIAkJCWlmIChpc2RpZ2l0KGJ1ZltpXSkpIHsKQEAgLTI0MjQsOCArMjQxMSw3IEBACiAJCQlidWZbaV0gPSAwOwogCQl9CiAJfQotCW1zZWMgPSBzaW1wbGVfc3RydG91bChidWYsICZlLCAxMCk7Ci0JaWYgKGUgPT0gYnVmIHx8ICgqZSAmJiAqZSAhPSAnXG4nKSkKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJm1zZWMpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJbXNlYyA9IChtc2VjICogMTAwMCkgLyBzY2FsZTsKIAlpZiAobXNlYyA9PSAwKQpAQCAtMjcyNyw5ICsyNzEzLDkgQEAKIAkJYnJlYWs7CiAJY2FzZSByZWFkX2F1dG86CiAJCWlmIChtZGRldi0+cGVycykgewotCQkJaWYgKG1kZGV2LT5ybyAhPSAxKQorCQkJaWYgKG1kZGV2LT5ybyA9PSAwKQogCQkJCWVyciA9IGRvX21kX3N0b3AobWRkZXYsIDEsIDApOwotCQkJZWxzZQorCQkJZWxzZSBpZiAobWRkZXYtPnJvID09IDEpCiAJCQkJZXJyID0gcmVzdGFydF9hcnJheShtZGRldik7CiAJCQlpZiAoZXJyID09IDApIHsKIAkJCQltZGRldi0+cm8gPSAyOwpAQCAtMjk0NSw3ICsyOTMxLDEzIEBACiB7CiAJaW50IG1ham9yLCBtaW5vcjsKIAljaGFyICplOwotCWlmICghbGlzdF9lbXB0eSgmbWRkZXYtPmRpc2tzKSkKKwkvKiBDaGFuZ2luZyB0aGUgZGV0YWlscyBvZiAnZXh0ZXJuYWwnIG1ldGFkYXRhIGlzCisJICogYWx3YXlzIHBlcm1pdHRlZC4gIE90aGVyd2lzZSB0aGVyZSBtdXN0IGJlCisJICogbm8gZGV2aWNlcyBhdHRhY2hlZCB0byB0aGUgYXJyYXkuCisJICovCisJaWYgKG1kZGV2LT5leHRlcm5hbCAmJiBzdHJuY21wKGJ1ZiwgImV4dGVybmFsOiIsIDkpID09IDApCisJCTsKKwllbHNlIGlmICghbGlzdF9lbXB0eSgmbWRkZXYtPmRpc2tzKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChjbWRfbWF0Y2goYnVmLCAibm9uZSIpKSB7CkBAIC0zNTI3LDE3ICszNTE5LDEyIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkvKgotCQkgKiBjaHVuay1zaXplIGhhcyB0byBiZSBhIHBvd2VyIG9mIDIgYW5kIG11bHRpcGxlcyBvZiBQQUdFX1NJWkUKKwkJICogY2h1bmstc2l6ZSBoYXMgdG8gYmUgYSBwb3dlciBvZiAyCiAJCSAqLwogCQlpZiAoICgxIDw8IGZmeih+Y2h1bmtfc2l6ZSkpICE9IGNodW5rX3NpemUpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiY2h1bmtfc2l6ZSBvZiAlZCBub3QgdmFsaWRcbiIsIGNodW5rX3NpemUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKGNodW5rX3NpemUgPCBQQUdFX1NJWkUpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidG9vIHNtYWxsIGNodW5rX3NpemU6ICVkIDwgJWxkXG4iLAotCQkJCWNodW5rX3NpemUsIFBBR0VfU0laRSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCiAJCS8qIGRldmljZXMgbXVzdCBoYXZlIG1pbmltdW0gc2l6ZSBvZiBvbmUgY2h1bmsgKi8KIAkJcmRldl9mb3JfZWFjaChyZGV2LCB0bXAsIG1kZGV2KSB7CkBAIC0zNTU1LDEyICszNTQyLDEwIEBACiAJCX0KIAl9CiAKLSNpZmRlZiBDT05GSUdfS01PRAogCWlmIChtZGRldi0+bGV2ZWwgIT0gTEVWRUxfTk9ORSkKIAkJcmVxdWVzdF9tb2R1bGUoIm1kLWxldmVsLSVkIiwgbWRkZXYtPmxldmVsKTsKIAllbHNlIGlmIChtZGRldi0+Y2xldmVsWzBdKQogCQlyZXF1ZXN0X21vZHVsZSgibWQtJXMiLCBtZGRldi0+Y2xldmVsKTsKLSNlbmRpZgogCiAJLyoKIAkgKiBEcm9wIGFsbCBjb250YWluZXIgZGV2aWNlIGJ1ZmZlcnMsIGZyb20gbm93IG9uCkBAIC0zOTcxLDEwICszOTU2LDEwIEBACiAJfQogCXByaW50aygiXG4iKTsKIAotCWVyciA9IGRvX21kX3J1biAobWRkZXYpOworCWVyciA9IGRvX21kX3J1bihtZGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZDogZG9fbWRfcnVuKCkgcmV0dXJuZWQgJWRcbiIsIGVycik7Ci0JCWRvX21kX3N0b3AgKG1kZGV2LCAwLCAwKTsKKwkJZG9fbWRfc3RvcChtZGRldiwgMCwgMCk7CiAJfQogfQogCkBAIC00MzMzLDcgKzQzMTgsNyBAQAogCiAJaWYgKCEoaW5mby0+c3RhdGUgJiAoMTw8TURfRElTS19GQVVMVFkpKSkgewogCQlpbnQgZXJyOwotCQlyZGV2ID0gbWRfaW1wb3J0X2RldmljZSAoZGV2LCAtMSwgMCk7CisJCXJkZXYgPSBtZF9pbXBvcnRfZGV2aWNlKGRldiwgLTEsIDApOwogCQlpZiAoSVNfRVJSKHJkZXYpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIAogCQkJCSJtZDogZXJyb3IsIG1kX2ltcG9ydF9kZXZpY2UoKSByZXR1cm5lZCAlbGRcbiIsCkBAIC00NDE1LDcgKzQ0MDAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZGV2ID0gbWRfaW1wb3J0X2RldmljZSAoZGV2LCAtMSwgMCk7CisJcmRldiA9IG1kX2ltcG9ydF9kZXZpY2UoZGV2LCAtMSwgMCk7CiAJaWYgKElTX0VSUihyZGV2KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIAogCQkJIm1kOiBlcnJvciwgbWRfaW1wb3J0X2RldmljZSgpIHJldHVybmVkICVsZFxuIiwKQEAgLTQ5MzQsMTEgKzQ5MTksMTEgQEAKIAkJCWdvdG8gZG9uZV91bmxvY2s7CiAKIAkJY2FzZSBTVE9QX0FSUkFZOgotCQkJZXJyID0gZG9fbWRfc3RvcCAobWRkZXYsIDAsIDEpOworCQkJZXJyID0gZG9fbWRfc3RvcChtZGRldiwgMCwgMSk7CiAJCQlnb3RvIGRvbmVfdW5sb2NrOwogCiAJCWNhc2UgU1RPUF9BUlJBWV9STzoKLQkJCWVyciA9IGRvX21kX3N0b3AgKG1kZGV2LCAxLCAxKTsKKwkJCWVyciA9IGRvX21kX3N0b3AobWRkZXYsIDEsIDEpOwogCQkJZ290byBkb25lX3VubG9jazsKIAogCX0KQEAgLTQ5ODcsNyArNDk3Miw3IEBACiAJCQlnb3RvIGRvbmVfdW5sb2NrOwogCiAJCWNhc2UgUlVOX0FSUkFZOgotCQkJZXJyID0gZG9fbWRfcnVuIChtZGRldik7CisJCQllcnIgPSBkb19tZF9ydW4obWRkZXYpOwogCQkJZ290byBkb25lX3VubG9jazsKIAogCQljYXNlIFNFVF9CSVRNQVBfRklMRToKQEAgLTU0MjUsMTEgKzU0MTAsMTEgQEAKIAkJCXNlcV9wcmludGYoc2VxLCAiIHN1cGVyIG5vbi1wZXJzaXN0ZW50Iik7CiAKIAkJaWYgKG1kZGV2LT5wZXJzKSB7Ci0JCQltZGRldi0+cGVycy0+c3RhdHVzIChzZXEsIG1kZGV2KTsKKwkJCW1kZGV2LT5wZXJzLT5zdGF0dXMoc2VxLCBtZGRldik7CiAJIAkJc2VxX3ByaW50ZihzZXEsICJcbiAgICAgICIpOwogCQkJaWYgKG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QpIHsKIAkJCQlpZiAobWRkZXYtPmN1cnJfcmVzeW5jID4gMikgewotCQkJCQlzdGF0dXNfcmVzeW5jIChzZXEsIG1kZGV2KTsKKwkJCQkJc3RhdHVzX3Jlc3luYyhzZXEsIG1kZGV2KTsKIAkJCQkJc2VxX3ByaW50ZihzZXEsICJcbiAgICAgICIpOwogCQkJCX0gZWxzZSBpZiAobWRkZXYtPmN1cnJfcmVzeW5jID09IDEgfHwgbWRkZXYtPmN1cnJfcmVzeW5jID09IDIpCiAJCQkJCXNlcV9wcmludGYoc2VxLCAiXHRyZXN5bmM9REVMQVlFRFxuICAgICAgIik7CkBAIC02MjYwLDcgKzYyNDUsNyBAQAogCQkJCSAqIGFwcGVhcnMgdG8gc3RpbGwgYmUgaW4gdXNlLiAgSGVuY2UKIAkJCQkgKiB0aGUgJzEwMCcuCiAJCQkJICovCi0JCQkJZG9fbWRfc3RvcCAobWRkZXYsIDEsIDEwMCk7CisJCQkJZG9fbWRfc3RvcChtZGRldiwgMSwgMTAwKTsKIAkJCQltZGRldl91bmxvY2sobWRkZXYpOwogCQkJfQogCQkvKgpAQCAtNjMwNCw3ICs2Mjg5LDcgQEAKIAlyYWlkX3RhYmxlX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShyYWlkX3Jvb3RfdGFibGUpOwogCiAJbWRfZ2VuaW5pdCgpOwotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKaW5kZXggOGJiODc5NC4uZDRhYzQ3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYworKysgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCkBAIC0xOSwxNiArMTksNyBAQAogICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvbXVsdGlwYXRoLmg+Ci0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KLSNkZWZpbmUgTUFKT1JfTlIgTURfTUFKT1IKLSNkZWZpbmUgTURfRFJJVkVSCi0jZGVmaW5lIE1EX1BFUlNPTkFMSVRZCiAKICNkZWZpbmUgTUFYX1dPUktfUEVSX0RJU0sgMTI4CiAKQEAgLTE3Niw3ICsxNjcsNyBAQAogCW1wX2JoLT5iaW8gPSAqYmlvOwogCW1wX2JoLT5iaW8uYmlfc2VjdG9yICs9IG11bHRpcGF0aC0+cmRldi0+ZGF0YV9vZmZzZXQ7CiAJbXBfYmgtPmJpby5iaV9iZGV2ID0gbXVsdGlwYXRoLT5yZGV2LT5iZGV2OwotCW1wX2JoLT5iaW8uYmlfcncgfD0gKDEgPDwgQklPX1JXX0ZBSUxGQVNUKTsKKwltcF9iaC0+YmlvLmJpX3J3IHw9ICgxIDw8IEJJT19SV19GQUlMRkFTVF9UUkFOU1BPUlQpOwogCW1wX2JoLT5iaW8uYmlfZW5kX2lvID0gbXVsdGlwYXRoX2VuZF9yZXF1ZXN0OwogCW1wX2JoLT5iaW8uYmlfcHJpdmF0ZSA9IG1wX2JoOwogCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KCZtcF9iaC0+YmlvKTsKQEAgLTQwMiw3ICszOTMsNyBAQAogCQkJKmJpbyA9ICoobXBfYmgtPm1hc3Rlcl9iaW8pOwogCQkJYmlvLT5iaV9zZWN0b3IgKz0gY29uZi0+bXVsdGlwYXRoc1ttcF9iaC0+cGF0aF0ucmRldi0+ZGF0YV9vZmZzZXQ7CiAJCQliaW8tPmJpX2JkZXYgPSBjb25mLT5tdWx0aXBhdGhzW21wX2JoLT5wYXRoXS5yZGV2LT5iZGV2OwotCQkJYmlvLT5iaV9ydyB8PSAoMSA8PCBCSU9fUldfRkFJTEZBU1QpOworCQkJYmlvLT5iaV9ydyB8PSAoMSA8PCBCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JUKTsKIAkJCWJpby0+YmlfZW5kX2lvID0gbXVsdGlwYXRoX2VuZF9yZXF1ZXN0OwogCQkJYmlvLT5iaV9wcml2YXRlID0gbXBfYmg7CiAJCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMC5jIGIvZHJpdmVycy9tZC9yYWlkMC5jCmluZGV4IDUzNTA4YTguLjhhYzY0ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDAuYworKysgYi9kcml2ZXJzL21kL3JhaWQwLmMKQEAgLTE4LDEzICsxOCw4IEBACiAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gIAogKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvcmFpZDAuaD4KIAotI2RlZmluZSBNQUpPUl9OUiBNRF9NQUpPUgotI2RlZmluZSBNRF9EUklWRVIKLSNkZWZpbmUgTURfUEVSU09OQUxJVFkKLQogc3RhdGljIHZvaWQgcmFpZDBfdW5wbHVnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCW1kZGV2X3QgKm1kZGV2ID0gcS0+cXVldWVkYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IGI5NzY0NDIuLjljNzg4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTMyLDYgKzMyLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiZG0tYmlvLWxpc3QuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvcmFpZDEuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL2JpdG1hcC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCA4YmRjOWJmLi5kYTUxMjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTE5LDYgKzE5LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiZG0tYmlvLWxpc3QuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvcmFpZDEwLmg+CiAjaW5jbHVkZSA8bGludXgvcmFpZC9iaXRtYXAuaD4KIApAQCAtMjAyOCw4ICsyMDI5LDkgQEAKIAlpbnQgbmMsIGZjLCBmbzsKIAlzZWN0b3JfdCBzdHJpZGUsIHNpemU7CiAKLQlpZiAobWRkZXYtPmNodW5rX3NpemUgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIm1kL3JhaWQxMDogbm9uLXplcm8gY2h1bmsgc2l6ZSByZXF1aXJlZC5cbiIpOworCWlmIChtZGRldi0+Y2h1bmtfc2l6ZSA8IFBBR0VfU0laRSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1kL3JhaWQxMDogY2h1bmsgc2l6ZSBtdXN0IGJlICIKKwkJICAgICAgICJhdCBsZWFzdCBQQUdFX1NJWkUoJWxkKS5cbiIsIFBBR0VfU0laRSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IGFlMTY3OTQuLmEzNmE3NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTQzLDEyICs0Myw3IEBACiAgKiBtaXNzIGFueSBiaXRzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSAicmFpZDYuaCIKIAogI2luY2x1ZGUgPGxpbnV4L3JhaWQvYml0bWFwLmg+CkBAIC0yNzUsNyArMjcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcmFpZDVfYnVpbGRfYmxvY2sgKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIGludCBpKTsKK3N0YXRpYyB2b2lkIHJhaWQ1X2J1aWxkX2Jsb2NrKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIGludCBpKTsKIAogc3RhdGljIHZvaWQgaW5pdF9zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgcGRfaWR4LCBpbnQgZGlza3MpCiB7CkBAIC0xMTUxLDcgKzExNDYsNyBAQAogCXJlbGVhc2Vfc3RyaXBlKHNoKTsKIH0KIAotc3RhdGljIHZvaWQgcmFpZDVfZW5kX3dyaXRlX3JlcXVlc3QgKHN0cnVjdCBiaW8gKmJpLCBpbnQgZXJyb3IpCitzdGF0aWMgdm9pZCByYWlkNV9lbmRfd3JpdGVfcmVxdWVzdChzdHJ1Y3QgYmlvICpiaSwgaW50IGVycm9yKQogewogIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoID0gYmktPmJpX3ByaXZhdGU7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKQEAgLTExODMsNyArMTE3OCw3IEBACiAKIHN0YXRpYyBzZWN0b3JfdCBjb21wdXRlX2Jsb2NrbnIoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGkpOwogCQotc3RhdGljIHZvaWQgcmFpZDVfYnVpbGRfYmxvY2sgKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIGludCBpKQorc3RhdGljIHZvaWQgcmFpZDVfYnVpbGRfYmxvY2soc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGkpCiB7CiAJc3RydWN0IHI1ZGV2ICpkZXYgPSAmc2gtPmRldltpXTsKIApAQCAtMTIyMSwxMCArMTIxNiwxMCBAQAogCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KTsKIAkJfQogCQlzZXRfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsKLQkJcHJpbnRrIChLRVJOX0FMRVJUCi0JCQkicmFpZDU6IERpc2sgZmFpbHVyZSBvbiAlcywgZGlzYWJsaW5nIGRldmljZS5cbiIKLQkJCSJyYWlkNTogT3BlcmF0aW9uIGNvbnRpbnVpbmcgb24gJWQgZGV2aWNlcy5cbiIsCi0JCQliZGV2bmFtZShyZGV2LT5iZGV2LGIpLCBjb25mLT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlZ3JhZGVkKTsKKwkJcHJpbnRrKEtFUk5fQUxFUlQKKwkJICAgICAgICJyYWlkNTogRGlzayBmYWlsdXJlIG9uICVzLCBkaXNhYmxpbmcgZGV2aWNlLlxuIgorCQkgICAgICAgInJhaWQ1OiBPcGVyYXRpb24gY29udGludWluZyBvbiAlZCBkZXZpY2VzLlxuIiwKKwkJICAgICAgIGJkZXZuYW1lKHJkZXYtPmJkZXYsYiksIGNvbmYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVncmFkZWQpOwogCX0KIH0KIApAQCAtMTMyMCw4ICsxMzE1LDggQEAKIAkJCSpkZF9pZHggPSAoKnBkX2lkeCArIDIgKyAqZGRfaWR4KSAlIHJhaWRfZGlza3M7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayAoS0VSTl9DUklUICJyYWlkNjogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtICVkXG4iLAotCQkJCWNvbmYtPmFsZ29yaXRobSk7CisJCQlwcmludGsoS0VSTl9DUklUICJyYWlkNjogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtICVkXG4iLAorCQkJICAgICAgIGNvbmYtPmFsZ29yaXRobSk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTM5Niw4ICsxMzkxLDggQEAKIAkJCX0KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrIChLRVJOX0NSSVQgInJhaWQ2OiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gJWRcbiIsCi0JCQkJY29uZi0+YWxnb3JpdGhtKTsKKwkJCXByaW50ayhLRVJOX0NSSVQgInJhaWQ2OiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gJWRcbiIsCisJCQkgICAgICAgY29uZi0+YWxnb3JpdGhtKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xNDA1LDcgKzE0MDAsNyBAQAogCWNodW5rX251bWJlciA9IHN0cmlwZSAqIGRhdGFfZGlza3MgKyBpOwogCXJfc2VjdG9yID0gKHNlY3Rvcl90KWNodW5rX251bWJlciAqIHNlY3RvcnNfcGVyX2NodW5rICsgY2h1bmtfb2Zmc2V0OwogCi0JY2hlY2sgPSByYWlkNV9jb21wdXRlX3NlY3RvciAocl9zZWN0b3IsIHJhaWRfZGlza3MsIGRhdGFfZGlza3MsICZkdW1teTEsICZkdW1teTIsIGNvbmYpOworCWNoZWNrID0gcmFpZDVfY29tcHV0ZV9zZWN0b3Iocl9zZWN0b3IsIHJhaWRfZGlza3MsIGRhdGFfZGlza3MsICZkdW1teTEsICZkdW1teTIsIGNvbmYpOwogCWlmIChjaGVjayAhPSBzaC0+c2VjdG9yIHx8IGR1bW15MSAhPSBkZF9pZHggfHwgZHVtbXkyICE9IHNoLT5wZF9pZHgpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjb21wdXRlX2Jsb2NrbnI6IG1hcCBub3QgY29ycmVjdFxuIik7CiAJCXJldHVybiAwOwpAQCAtNDAxMiw2ICs0MDA3LDEzIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAorCWlmIChtZGRldi0+Y2h1bmtfc2l6ZSA8IFBBR0VfU0laRSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1kL3JhaWQ1OiBjaHVua19zaXplIG11c3QgYmUgYXQgbGVhc3QgIgorCQkgICAgICAgIlBBR0VfU0laRSBidXQgJWQgPCAlbGRcbiIsCisJCSAgICAgICBtZGRldi0+Y2h1bmtfc2l6ZSwgUEFHRV9TSVpFKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3RvcikgewogCQkvKiBDaGVjayB0aGF0IHdlIGNhbiBjb250aW51ZSB0aGUgcmVzaGFwZS4KIAkJICogQ3VycmVudGx5IG9ubHkgZGlza3MgY2FuIGNoYW5nZSwgaXQgbXVzdApAQCAtNDI4OSw3ICs0MjkxLDcgQEAKIH0KIAogI2lmZGVmIERFQlVHCi1zdGF0aWMgdm9pZCBwcmludF9zaCAoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCitzdGF0aWMgdm9pZCBwcmludF9zaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKIHsKIAlpbnQgaTsKIApAQCAtNDMwNSw3ICs0MzA3LDcgQEAKIAlzZXFfcHJpbnRmKHNlcSwgIlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50YWxsIChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgcmFpZDVfY29uZl90ICpjb25mKQorc3RhdGljIHZvaWQgcHJpbnRhbGwoc3RydWN0IHNlcV9maWxlICpzZXEsIHJhaWQ1X2NvbmZfdCAqY29uZikKIHsKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoOwogCXN0cnVjdCBobGlzdF9ub2RlICpobjsKQEAgLTQzMjMsNyArNDMyNSw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgc3RhdHVzIChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbWRkZXZfdCAqbWRkZXYpCitzdGF0aWMgdm9pZCBzdGF0dXMoc3RydWN0IHNlcV9maWxlICpzZXEsIG1kZGV2X3QgKm1kZGV2KQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IChyYWlkNV9jb25mX3QgKikgbWRkZXYtPnByaXZhdGU7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2LmggYi9kcml2ZXJzL21kL3JhaWQ2LmgKaW5kZXggMzFjYmVlNy4uOThkY2RlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNi5oCisrKyBiL2RyaXZlcnMvbWQvcmFpZDYuaApAQCAtMTgsMTUgKzE4LDYgQEAKIC8qIFNldCB0byAxIHRvIHVzZSBrZXJuZWwtd2lkZSBlbXB0eV96ZXJvX3BhZ2UgKi8KICNkZWZpbmUgUkFJRDZfVVNFX0VNUFRZX1pFUk9fUEFHRSAwCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CiAjaW5jbHVkZSA8bGludXgvcmFpZC9yYWlkNS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMKaW5kZXggOGZhOTFmOC4uNDk1MmFlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYwpAQCAtMTAzLDYgKzEwMyw1NiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfZHZidCk7CiAKKy8qIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPiAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbMHgwMF0gPSBLRVlfUE9XRVIyLAorCVsweDJlXSA9IEtFWV9ET1QsCQkvKiAnLicgKi8KKwlbMHgwMV0gPSBLRVlfTU9ERSwJCS8qIFRWL0ZNICovCisKKwlbMHgwNV0gPSBLRVlfMSwKKwlbMHgwNl0gPSBLRVlfMiwKKwlbMHgwN10gPSBLRVlfMywKKwlbMHgwOV0gPSBLRVlfNCwKKwlbMHgwYV0gPSBLRVlfNSwKKwlbMHgwYl0gPSBLRVlfNiwKKwlbMHgwZF0gPSBLRVlfNywKKwlbMHgwZV0gPSBLRVlfOCwKKwlbMHgwZl0gPSBLRVlfOSwKKwlbMHgxMV0gPSBLRVlfMCwKKworCVsweDEzXSA9IEtFWV9SSUdIVCwJCS8qIC0+ICovCisJWzB4MTJdID0gS0VZX0xFRlQsCQkvKiA8LSAqLworCisJWzB4MTddID0gS0VZX1NMRUVQLAkJLyogQ2FwdHVyYXIgSW1hZ2VtICovCisJWzB4MTBdID0gS0VZX1NIVUZGTEUsCQkvKiBBbW9zdHJhICovCisKKwkvKiBGSVhNRTogVGhlIGtleXMgYmVsbG93IGFyZW4ndCBvayAqLworCisJWzB4NDNdID0gS0VZX0NIQU5ORUxVUCwKKwlbMHg0Ml0gPSBLRVlfQ0hBTk5FTERPV04sCisJWzB4MWZdID0gS0VZX1ZPTFVNRVVQLAorCVsweDFlXSA9IEtFWV9WT0xVTUVET1dOLAorCVsweDBjXSA9IEtFWV9FTlRFUiwKKworCVsweDE0XSA9IEtFWV9NVVRFLAorCVsweDA4XSA9IEtFWV9BVURJTywKKworCVsweDAzXSA9IEtFWV9URVhULAorCVsweDA0XSA9IEtFWV9FUEcsCisJWzB4MmJdID0gS0VZX1RWMiwJCS8qIFRWMiAqLworCisJWzB4MWRdID0gS0VZX1JFRCwKKwlbMHgxY10gPSBLRVlfWUVMTE9XLAorCVsweDQxXSA9IEtFWV9HUkVFTiwKKwlbMHg0MF0gPSBLRVlfQkxVRSwKKworCVsweDFhXSA9IEtFWV9QTEFZUEFVU0UsCisJWzB4MTldID0gS0VZX1JFQ09SRCwKKwlbMHgxOF0gPSBLRVlfUExBWSwKKwlbMHgxYl0gPSBLRVlfU1RPUCwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfbTEzNWEpOworCiAvKiBBdHRpbGEgS29uZG9yb3MgPGF0dGlsYS5rb25kb3Jvc0BjaGVsbG8uaHU+ICovCiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hcGFjX3ZpZXdjb21wW0lSX0tFWVRBQl9TSVpFXSA9IHsKIApAQCAtNDY3LDcgKzUxNyw4IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyogTVNJIFRWQG55d2hlcmUgcmVtb3RlICovCisvKiBNU0kgVFZAbnl3aGVyZSBNQVNURVIgcmVtb3RlICovCisKIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX21zaV90dmFueXdoZXJlW0lSX0tFWVRBQl9TSVpFXSA9IHsKIAkvKiBLZXlzIDAgdG8gOSAqLwogCVsgMHgwMCBdID0gS0VZXzAsCkBAIC01MDEsNiArNTUyLDk1IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorLyoKKyAgS2V5Y29kZXMgZm9yIHJlbW90ZSBvbiB0aGUgTVNJIFRWQG55d2hlcmUgUGx1cy4gVGhlIGNvbnRyb2xsZXIgSUMgb24gdGhlIGNhcmQKKyAgaXMgbWFya2VkICJLUzAwMyIuIFRoZSBjb250cm9sbGVyIGlzIEkyQyBhdCBhZGRyZXNzIDB4MzAsIGJ1dCBkb2VzIG5vdCBzZWVtCisgIHRvIHJlc3BvbmQgdG8gcHJvYmVzIHVudGlsIGEgcmVhZCBpcyBwZXJmb3JtZWQgZnJvbSBhIHZhbGlkIGRldmljZS4KKyAgSSBkb24ndCBrbm93IHdoeS4uLgorCisgIE5vdGU6IFRoaXMgcmVtb3RlIG1heSBiZSBvZiBzaW1pbGFyIG9yIGlkZW50aWNhbCBkZXNpZ24gdG8gdGhlCisgIFBpeGVsdmlldyByZW1vdGUgKD8pLiAgVGhlIHJhdyBjb2RlcyBhbmQgZHVwbGljYXRlIGJ1dHRvbiBjb2RlcworICBhcHBlYXIgdG8gYmUgdGhlIHNhbWUuCisKKyAgSGVucnkgV29uZyA8aGVucnlAc3R1ZmZlZGNvdy5uZXQ+CisgIFNvbWUgY2hhbmdlcyB0byBmb3JtYXR0aW5nIGFuZCBrZXljb2RlcyBieSBNYXJrIFNjaHVsdHogPG45eG1qQHlhaG9vLmNvbT4KKworKi8KKworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfcGx1c1tJUl9LRVlUQUJfU0laRV0gPSB7CisKKy8qICAtLS0tIFJlbW90ZSBCdXR0b24gTGF5b3V0IC0tLS0KKworICAgIFBPV0VSICAgU09VUkNFICBTQ0FOICAgIE1VVEUKKyAgICBUVi9GTSAgIDEgICAgICAgMiAgICAgICAzCisgICAgfD4gICAgICA0ICAgICAgIDUgICAgICAgNgorICAgIDx8ICAgICAgNyAgICAgICA4ICAgICAgIDkKKyAgICBeXlVQICAgIDAgICAgICAgKyAgICAgICBSRUNBTEwKKyAgICB2dkROICAgIFJFQ09SRCAgU1RPUCAgICBQTEFZCisKKwlNSU5JTUlaRSAgICAgICAgICBaT09NCisKKwkJICBDSCsKKyAgICAgIFZPTC0gICAgICAgICAgICAgICAgICAgVk9MKworCQkgIENILQorCisJU05BUFNIT1QgICAgICAgICAgIE1UUworCisgICAgIDw8ICAgICAgRlVOQyAgICA+PiAgICAgUkVTRVQKKyovCisKKwlbMHgwMV0gPSBLRVlfS1AxLCAgICAgICAgICAgICAvKiAxICovCisJWzB4MGJdID0gS0VZX0tQMiwgICAgICAgICAgICAgLyogMiAqLworCVsweDFiXSA9IEtFWV9LUDMsICAgICAgICAgICAgIC8qIDMgKi8KKwlbMHgwNV0gPSBLRVlfS1A0LCAgICAgICAgICAgICAvKiA0ICovCisJWzB4MDldID0gS0VZX0tQNSwgICAgICAgICAgICAgLyogNSAqLworCVsweDE1XSA9IEtFWV9LUDYsICAgICAgICAgICAgIC8qIDYgKi8KKwlbMHgwNl0gPSBLRVlfS1A3LCAgICAgICAgICAgICAvKiA3ICovCisJWzB4MGFdID0gS0VZX0tQOCwgICAgICAgICAgICAgLyogOCAqLworCVsweDEyXSA9IEtFWV9LUDksICAgICAgICAgICAgIC8qIDkgKi8KKwlbMHgwMl0gPSBLRVlfS1AwLCAgICAgICAgICAgICAvKiAwICovCisJWzB4MTBdID0gS0VZX0tQUExVUywgICAgICAgICAgLyogKyAqLworCVsweDEzXSA9IEtFWV9BR0FJTiwgICAgICAgICAgIC8qIFJlY2FsbCAqLworCisJWzB4MWVdID0gS0VZX1BPV0VSLCAgICAgICAgICAgLyogUG93ZXIgKi8KKwlbMHgwN10gPSBLRVlfVFVORVIsICAgICAgICAgICAvKiBTb3VyY2UgKi8KKwlbMHgxY10gPSBLRVlfU0VBUkNILCAgICAgICAgICAvKiBTY2FuICovCisJWzB4MThdID0gS0VZX01VVEUsICAgICAgICAgICAgLyogTXV0ZSAqLworCisJWzB4MDNdID0gS0VZX1JBRElPLCAgICAgICAgICAgLyogVFYvRk0gKi8KKwkvKiBUaGUgbmV4dCBmb3VyIGtleXMgYXJlIGR1cGxpY2F0ZXMgdGhhdCBhcHBlYXIgdG8gc2VuZCB0aGUKKwkgICBzYW1lIElSIGNvZGUgYXMgQ2grLCBDaC0sID4+LCBhbmQgPDwgLiAgVGhlIHJhdyBjb2RlIGFzc2lnbmVkCisJICAgdG8gdGhlbSBpcyB0aGUgYWN0dWFsIGNvZGUgKyAweDIwIC0gdGhleSB3aWxsIG5ldmVyIGJlCisJICAgZGV0ZWN0ZWQgYXMgc3VjaCB1bmxlc3Mgc29tZSB3YXkgaXMgZGlzY292ZXJlZCB0byBkaXN0aW5ndWlzaAorCSAgIHRoZXNlIGJ1dHRvbnMgZnJvbSB0aG9zZSB0aGF0IGhhdmUgdGhlIHNhbWUgY29kZS4gKi8KKwlbMHgzZl0gPSBLRVlfUklHSFQsICAgICAgICAgICAvKiB8PiBhbmQgQ2grICovCisJWzB4MzddID0gS0VZX0xFRlQsICAgICAgICAgICAgLyogPHwgYW5kIENoLSAqLworCVsweDJjXSA9IEtFWV9VUCwgICAgICAgICAgICAgIC8qIF5eVXAgYW5kID4+ICovCisJWzB4MjRdID0gS0VZX0RPV04sICAgICAgICAgICAgLyogdnZEbiBhbmQgPDwgKi8KKworCVsweDAwXSA9IEtFWV9SRUNPUkQsICAgICAgICAgIC8qIFJlY29yZCAqLworCVsweDA4XSA9IEtFWV9TVE9QLCAgICAgICAgICAgIC8qIFN0b3AgKi8KKwlbMHgxMV0gPSBLRVlfUExBWSwgICAgICAgICAgICAvKiBQbGF5ICovCisKKwlbMHgwZl0gPSBLRVlfQ0xPU0UsICAgICAgICAgICAvKiBNaW5pbWl6ZSAqLworCVsweDE5XSA9IEtFWV9aT09NLCAgICAgICAgICAgIC8qIFpvb20gKi8KKwlbMHgxYV0gPSBLRVlfU0hVRkZMRSwgICAgICAgICAvKiBTbmFwc2hvdCAqLworCVsweDBkXSA9IEtFWV9MQU5HVUFHRSwgICAgICAgIC8qIE1UUyAqLworCisJWzB4MTRdID0gS0VZX1ZPTFVNRURPV04sICAgICAgLyogVm9sLSAqLworCVsweDE2XSA9IEtFWV9WT0xVTUVVUCwgICAgICAgIC8qIFZvbCsgKi8KKwlbMHgxN10gPSBLRVlfQ0hBTk5FTERPV04sICAgICAvKiBDaC0gKi8KKwlbMHgxZl0gPSBLRVlfQ0hBTk5FTFVQLCAgICAgICAvKiBDaCsgKi8KKworCVsweDA0XSA9IEtFWV9SRVdJTkQsICAgICAgICAgIC8qIDw8ICovCisJWzB4MGVdID0gS0VZX01FTlUsICAgICAgICAgICAgLyogRnVuY3Rpb24gKi8KKwlbMHgwY10gPSBLRVlfRkFTVEZPUldBUkQsICAgICAvKiA+PiAqLworCVsweDFkXSA9IEtFWV9SRVNUQVJULCAgICAgICAgIC8qIFJlc2V0ICovCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfcGx1cyk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwogLyogQ2luZXJneSAxNDAwIERWQi1UICovCiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19jaW5lcmd5XzE0MDBbSVJfS0VZVEFCX1NJWkVdID0gewogCVsgMHgwMSBdID0gS0VZX1BPV0VSLApAQCAtMTc5MiwxMiArMTkzMiw2MSBAQAogCVsgMHg0MSBdID0gS0VZX0dSRUVOLAkJLyogQVAyICovCiAJWyAweDQ3IF0gPSBLRVlfWUVMTE9XLAkJLyogQVAzICovCiAJWyAweDU3IF0gPSBLRVlfQkxVRSwJCS8qIEFQNCAqLwotCi0KIH07Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2VuY29yZV9lbmx0dik7CiAKKy8qIEVuY29yZSBFTkxUVjItRk0gIC0gc2lsdmVyIHBsYXN0aWMgLSAiV2FuZCBNZWRpYSIgd3JpdHRlbiBhdCB0aGUgYm90dG9uCisgICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+ICovCitJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbmNvcmVfZW5sdHYyW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbMHg0Y10gPSBLRVlfUE9XRVIyLAorCVsweDRhXSA9IEtFWV9UVU5FUiwKKwlbMHg0MF0gPSBLRVlfMSwKKwlbMHg2MF0gPSBLRVlfMiwKKwlbMHg1MF0gPSBLRVlfMywKKwlbMHg3MF0gPSBLRVlfNCwKKwlbMHg0OF0gPSBLRVlfNSwKKwlbMHg2OF0gPSBLRVlfNiwKKwlbMHg1OF0gPSBLRVlfNywKKwlbMHg3OF0gPSBLRVlfOCwKKwlbMHg0NF0gPSBLRVlfOSwKKwlbMHg1NF0gPSBLRVlfMCwKKworCVsweDY0XSA9IEtFWV9MQVNULAkJLyogKzEwMCAqLworCVsweDRlXSA9IEtFWV9BR0FJTiwJCS8qIFJlY2FsbCAqLworCisJWzB4NmNdID0gS0VZX1NXSVRDSFZJREVPTU9ERSwJLyogVmlkZW8gU291cmNlICovCisJWzB4NWVdID0gS0VZX01FTlUsCisJWzB4NTZdID0gS0VZX1NDUkVFTiwKKwlbMHg3YV0gPSBLRVlfU0VUVVAsCisKKwlbMHg0Nl0gPSBLRVlfTVVURSwKKwlbMHg1Y10gPSBLRVlfTU9ERSwJCS8qIFN0ZXJlbyAqLworCVsweDc0XSA9IEtFWV9JTkZPLAorCVsweDdjXSA9IEtFWV9DTEVBUiwKKworCVsweDU1XSA9IEtFWV9VUCwKKwlbMHg0OV0gPSBLRVlfRE9XTiwKKwlbMHg3ZV0gPSBLRVlfTEVGVCwKKwlbMHg1OV0gPSBLRVlfUklHSFQsCisJWzB4NmFdID0gS0VZX0VOVEVSLAorCisJWzB4NDJdID0gS0VZX1ZPTFVNRVVQLAorCVsweDYyXSA9IEtFWV9WT0xVTUVET1dOLAorCVsweDUyXSA9IEtFWV9DSEFOTkVMVVAsCisJWzB4NzJdID0gS0VZX0NIQU5ORUxET1dOLAorCisJWzB4NDFdID0gS0VZX1JFQ09SRCwKKwlbMHg1MV0gPSBLRVlfU0hVRkZMRSwJLyogU25hcHNob3QgKi8KKwlbMHg3NV0gPSBLRVlfVElNRSwJLyogVGltZXNoaWZ0ICovCisJWzB4NzFdID0gS0VZX1RWMiwJLyogUElQICovCisKKwlbMHg0NV0gPSBLRVlfUkVXSU5ELAorCVsweDZmXSA9IEtFWV9QQVVTRSwKKwlbMHg3ZF0gPSBLRVlfRk9SV0FSRCwKKwlbMHg3OV0gPSBLRVlfU1RPUCwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbmNvcmVfZW5sdHYyKTsKKwogLyogZm9yIHRoZSBUZWNobm90cmVuZCAxNTAwIGJ1bmRsZWQgcmVtb3RlcyAoZ3JleSBhbmQgYmxhY2spOiAqLwogSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfdHRfMTUwMFtJUl9LRVlUQUJfU0laRV0gPSB7CiAJWyAweDAxIF0gPSBLRVlfUE9XRVIsCkBAIC0yMjM5LDMgKzI0MjgsODYgQEAKIAlbMHgyYV0gPSBLRVlfTUVOVSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfYTE2ZCk7CisKKy8qIEVuY29yZSBFTkxUVi1GTSB2NS4zCisgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKyAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW5jb3JlX2VubHR2X2ZtNTNbSVJfS0VZVEFCX1NJWkVdID0geworCVsweDEwXSA9IEtFWV9QT1dFUjIsCisJWzB4MDZdID0gS0VZX01VVEUsCisKKwlbMHgwOV0gPSBLRVlfMSwKKwlbMHgxZF0gPSBLRVlfMiwKKwlbMHgxZl0gPSBLRVlfMywKKwlbMHgxOV0gPSBLRVlfNCwKKwlbMHgxYl0gPSBLRVlfNSwKKwlbMHgxMV0gPSBLRVlfNiwKKwlbMHgxN10gPSBLRVlfNywKKwlbMHgxMl0gPSBLRVlfOCwKKwlbMHgxNl0gPSBLRVlfOSwKKwlbMHg0OF0gPSBLRVlfMCwKKworCVsweDA0XSA9IEtFWV9MSVNULAkJLyogLS8tLSAqLworCVsweDQwXSA9IEtFWV9MQVNULAkJLyogcmVjYWxsICovCisKKwlbMHgwMl0gPSBLRVlfTU9ERSwJCS8qIFRWL0FWICovCisJWzB4MDVdID0gS0VZX1NIVUZGTEUsCQkvKiBTTkFQU0hPVCAqLworCisJWzB4NGNdID0gS0VZX0NIQU5ORUxVUCwJCS8qIFVQICovCisJWzB4MDBdID0gS0VZX0NIQU5ORUxET1dOLAkvKiBET1dOICovCisJWzB4MGRdID0gS0VZX1ZPTFVNRVVQLAkJLyogUklHSFQgKi8KKwlbMHgxNV0gPSBLRVlfVk9MVU1FRE9XTiwJLyogTEVGVCAqLworCVsweDQ5XSA9IEtFWV9FTlRFUiwJCS8qIE9LICovCisKKwlbMHg1NF0gPSBLRVlfUkVDT1JELAorCVsweDRkXSA9IEtFWV9QTEFZLAkJLyogcGF1c2UgKi8KKworCVsweDFlXSA9IEtFWV9VUCwJCS8qIHZpZGVvIHNldHRpbmcgKi8KKwlbMHgwZV0gPSBLRVlfUklHSFQsCQkvKiA8LSAqLworCVsweDFhXSA9IEtFWV9MRUZULAkJLyogLT4gKi8KKworCVsweDBhXSA9IEtFWV9ET1dOLAkJLyogdmlkZW8gZGVmYXVsdCAqLworCVsweDBjXSA9IEtFWV9aT09NLAkJLyogaGlkZSBwYW5uZWwgKi8KKwlbMHg0N10gPSBLRVlfU0xFRVAsCQkvKiBzaHV0ZG93biAqLworfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2VuY29yZV9lbmx0dl9mbTUzKTsKKworLyogWm9naXMgUmVhbCBBdWRpbyAyMjAgLSAzMiBrZXlzIElSICovCitJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19yZWFsX2F1ZGlvXzIyMF8zMl9rZXlzW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbMHgxY10gPSBLRVlfUkFESU8sCisJWzB4MTJdID0gS0VZX1BPV0VSMiwKKworCVsweDAxXSA9IEtFWV8xLAorCVsweDAyXSA9IEtFWV8yLAorCVsweDAzXSA9IEtFWV8zLAorCVsweDA0XSA9IEtFWV80LAorCVsweDA1XSA9IEtFWV81LAorCVsweDA2XSA9IEtFWV82LAorCVsweDA3XSA9IEtFWV83LAorCVsweDA4XSA9IEtFWV84LAorCVsweDA5XSA9IEtFWV85LAorCVsweDAwXSA9IEtFWV8wLAorCisJWzB4MGNdID0gS0VZX1ZPTFVNRVVQLAorCVsweDE4XSA9IEtFWV9WT0xVTUVET1dOLAorCVsweDBiXSA9IEtFWV9DSEFOTkVMVVAsCisJWzB4MTVdID0gS0VZX0NIQU5ORUxET1dOLAorCVsweDE2XSA9IEtFWV9FTlRFUiwKKworCVsweDExXSA9IEtFWV9MSVNULAkJLyogU291cmNlICovCisJWzB4MGRdID0gS0VZX0FVRElPLAkJLyogc3RlcmVvICovCisKKwlbMHgwZl0gPSBLRVlfUFJFVklPVVMsCQkvKiBQcmV2ICovCisJWzB4MWJdID0gS0VZX1BBVVNFLAkJLyogVGltZXNoaWZ0ICovCisJWzB4MWFdID0gS0VZX05FWFQsCQkvKiBOZXh0ICovCisKKwlbMHgwZV0gPSBLRVlfU1RPUCwKKwlbMHgxZl0gPSBLRVlfUExBWSwKKwlbMHgxZV0gPSBLRVlfUExBWVBBVVNFLAkJLyogUGF1c2UgKi8KKworCVsweDFkXSA9IEtFWV9SRUNPUkQsCisJWzB4MTNdID0gS0VZX01VVEUsCisJWzB4MTldID0gS0VZX1NIVUZGTEUsCQkvKiBTbmFwc2hvdCAqLworCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcmVhbF9hdWRpb18yMjBfMzJfa2V5cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jCmluZGV4IGQwMTk2NWUuLmQ1OTlkMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIGludCBzYWE3MTQ2X3BndGFibGVfYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IHNhYTcxNDZfcGd0YWJsZSAqcHQpCiB7CiAJX19sZTMyICAgICAgICpjcHU7Ci0JZG1hX2FkZHJfdCAgIGRtYV9hZGRyOworCWRtYV9hZGRyX3QgICBkbWFfYWRkciA9IDA7CiAKIAljcHUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwY2ksIFBBR0VfU0laRSwgJmRtYV9hZGRyKTsKIAlpZiAoTlVMTCA9PSBjcHUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKaW5kZXggY2Y2YTgxNy4uNWIzNGMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKQEAgLTUzMyw3ICs1MzMsNyBAQAogCW1lbWNweSh2ZmQsICZkZXZpY2VfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSk7CiAJc3RybGNweSh2ZmQtPm5hbWUsIG5hbWUsIHNpemVvZih2ZmQtPm5hbWUpKTsKIAl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKLQl2ZmQtPnByaXYgPSBkZXY7CisJdmlkZW9fc2V0X2RydmRhdGEodmZkLCBkZXYpOwogCiAJLy8gZml4bWU6IC0xIHNob3VsZCBiZSBhbiBpbnNtb2QgcGFyYW1ldGVyICpmb3IgdGhlIGV4dGVuc2lvbiogKGxpa2UgInZpZGVvX25yIik7CiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZmQsIHR5cGUsIC0xKSA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tdDIwNjAuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tdDIwNjAuYwppbmRleCAxMzA1YjBlLi4xMjIwNmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMDYwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL210MjA2MC5jCkBAIC0xNzAsNiArMTcwLDkgQEAKIAliWzBdID0gUkVHX0xPMUIxOwogCWJbMV0gPSAweEZGOwogCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsgLyogb3BlbiBpMmNfZ2F0ZSAqLworCiAJbXQyMDYwX3dyaXRlcmVncyhwcml2LGIsMik7CiAKIAlmcmVxID0gcGFyYW1zLT5mcmVxdWVuY3kgLyAxMDAwOyAvLyBIeiAtPiBrSHoKQEAgLTIzMyw2ICsyMzYsOSBAQAogCQlpKys7CiAJfSB3aGlsZSAoaTwxMCk7CiAKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOyAvKiBjbG9zZSBpMmNfZ2F0ZSAqLworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjk2LDEzICszMDIsMzUgQEAKIHN0YXRpYyBpbnQgbXQyMDYwX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IG10MjA2MF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7Ci0JcmV0dXJuIG10MjA2MF93cml0ZXJlZyhwcml2LCBSRUdfVkdBRywgKHByaXYtPmNmZy0+Y2xvY2tfb3V0IDw8IDYpIHwgMHgzMyk7CisJaW50IHJldDsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7IC8qIG9wZW4gaTJjX2dhdGUgKi8KKworCXJldCA9IG10MjA2MF93cml0ZXJlZyhwcml2LCBSRUdfVkdBRywKKwkJCSAgICAgIChwcml2LT5jZmctPmNsb2NrX291dCA8PCA2KSB8IDB4MzMpOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsgLyogY2xvc2UgaTJjX2dhdGUgKi8KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbXQyMDYwX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCBtdDIwNjBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OwotCXJldHVybiBtdDIwNjBfd3JpdGVyZWcocHJpdiwgUkVHX1ZHQUcsIChwcml2LT5jZmctPmNsb2NrX291dCA8PCA2KSB8IDB4MzApOworCWludCByZXQ7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOyAvKiBvcGVuIGkyY19nYXRlICovCisKKwlyZXQgPSBtdDIwNjBfd3JpdGVyZWcocHJpdiwgUkVHX1ZHQUcsCisJCQkgICAgICAocHJpdi0+Y2ZnLT5jbG9ja19vdXQgPDwgNikgfCAweDMwKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7IC8qIGNsb3NlIGkyY19nYXRlICovCisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG10MjA2MF9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQpAQCAtMzQ0LDYgKzM3Miw5IEBACiAJcHJpdi0+aTJjICAgICAgPSBpMmM7CiAJcHJpdi0+aWYxX2ZyZXEgPSBpZjE7CiAKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOyAvKiBvcGVuIGkyY19nYXRlICovCisKIAlpZiAobXQyMDYwX3JlYWRyZWcocHJpdixSRUdfUEFSVF9SRVYsJmlkKSAhPSAwKSB7CiAJCWtmcmVlKHByaXYpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTM2MCw2ICszOTEsOSBAQAogCiAJbXQyMDYwX2NhbGlicmF0ZShwcml2KTsKIAorCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7IC8qIGNsb3NlIGkyY19nYXRlICovCisKIAlyZXR1cm4gZmU7CiB9CiBFWFBPUlRfU1lNQk9MKG10MjA2MF9hdHRhY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYwppbmRleCAyMjc2NDJiLi5hODg3ODI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYwpAQCAtMzQ4MSw3ICszNDgxLDkgQEAKIAkJCQkJfQogCQkJCQljdHJsVmFsID0gMDsKIAkJCQkJZm9yIChrID0gMDsgayA8IHN0YXRlLT5NWExfQ3RybFtpXS5zaXplOyBrKyspCi0JCQkJCQljdHJsVmFsICs9IHN0YXRlLT5NWExfQ3RybFtpXS52YWxba10gKiAoMSA8PCBrKTsKKwkJCQkJCWN0cmxWYWwgKz0gc3RhdGUtPgorCQkJCQkJCU1YTF9DdHJsW2ldLnZhbFtrXSAqCisJCQkJCQkJKDEgPDwgayk7CiAJCQkJfSBlbHNlCiAJCQkJCXJldHVybiAtMTsKIAkJCX0KQEAgLTM1ODEsNyArMzU4Myw3IEBACiAKIHN0YXRpYyB1MzIgTVhMX0NlaWxpbmcodTMyIHZhbHVlLCB1MzIgcmVzb2x1dGlvbikKIHsKLQlyZXR1cm4gKHZhbHVlL3Jlc29sdXRpb24gKyAodmFsdWUgJSByZXNvbHV0aW9uID4gMCA/IDEgOiAwKSk7CisJcmV0dXJuIHZhbHVlIC8gcmVzb2x1dGlvbiArICh2YWx1ZSAlIHJlc29sdXRpb24gPiAwID8gMSA6IDApOwogfQogCiAvKiBSZXRyaWV2ZSB0aGUgSW5pdGlhbHphdGlvbiBSZWdpc3RlcnMgKi8KQEAgLTM5MTAsNyArMzkxMiwxMCBAQAogCiBzdGF0aWMgaW50IG14bDUwMDVzX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CisJc3RydWN0IG14bDUwMDVzX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCiAJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOworCXN0YXRlLT5jdXJyZW50X21vZGUgPSBNWExfUUFNOwogCXJldHVybiBteGw1MDA1c19yZWNvbmZpZ3VyZShmZSwgTVhMX1FBTSwgTVhMNTAwNVNfQkFORFdJRFRIXzZNSFopOwogfQogCkBAIC00MDkyLDcgKzQwOTcsNiBAQAogCXN0YXRlLT5mcm9udGVuZCA9IGZlOwogCXN0YXRlLT5jb25maWcgPSBjb25maWc7CiAJc3RhdGUtPmkyYyA9IGkyYzsKLQlzdGF0ZS0+Y3VycmVudF9tb2RlID0gTVhMX1FBTTsKIAogCXByaW50ayhLRVJOX0lORk8gIk1YTDUwMDVTOiBBdHRhY2hlZCBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKIAkJY29uZmlnLT5pMmNfYWRkcmVzcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwN3QuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA3dC5jCmluZGV4IGNiMjVlNDMuLjY0Mzc5ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA3dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA3dC5jCkBAIC05NzksNyArOTc5LDYgQEAKIAlzd2l0Y2ggKGluc3RhbmNlKSB7CiAJY2FzZSAwOgogCQlnb3RvIGZhaWw7Ci0JCWJyZWFrOwogCWNhc2UgMToKIAkJLyogbmV3IHR1bmVyIGluc3RhbmNlICovCiAJCXN0YXRlLT5jb25maWcgPSBjZmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCmluZGV4IDkzMDYzYzYuLjFiNDhiNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCkBAIC0xMTU1LDcgKzExNTUsNiBAQAogCXN3aXRjaCAoaW5zdGFuY2UpIHsKIAljYXNlIDA6CiAJCWdvdG8gZmFpbDsKLQkJYnJlYWs7CiAJY2FzZSAxOgogCQkvKiBuZXcgdHVuZXIgaW5zdGFuY2UgKi8KIAkJcHJpdi0+Z2F0ZSA9IChjZmcpID8gY2ZnLT5nYXRlIDogVERBMTgyNzFfR0FURV9BVVRPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyN3guYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4Mjd4LmMKaW5kZXggODU1NWQ5Yy4uNGE3NGY2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyN3guYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI3eC5jCkBAIC00NDcsMTcgKzQ0NywxOSBAQAogCQkJZWxzZQogCQkJCWFyZyA9IDA7CiAJCX0KLQkJaWYgKHByaXYtPmNmZy0+dHVuZXJfY2FsbGJhY2spCi0JCQlwcml2LT5jZmctPnR1bmVyX2NhbGxiYWNrKHByaXYtPmkyY19hZGFwLT5hbGdvX2RhdGEsCi0JCQkJCQkJCWdwX2Z1bmMsIGFyZyk7CisJCWlmIChmZS0+Y2FsbGJhY2spCisJCQlmZS0+Y2FsbGJhY2socHJpdi0+aTJjX2FkYXAtPmFsZ29fZGF0YSwKKwkJCQkgICAgIERWQl9GUk9OVEVORF9DT01QT05FTlRfVFVORVIsCisJCQkJICAgICBncF9mdW5jLCBhcmcpOwogCQlidWZbMV0gPSBoaWdoID8gMCA6IDE7CiAJCWlmIChwcml2LT5jZmctPmNvbmZpZyA9PSAyKQogCQkJYnVmWzFdID0gaGlnaCA/IDEgOiAwOwogCQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOwogCQlicmVhazsKIAljYXNlIDM6IC8qIHN3aXRjaCB3aXRoIEdQSU8gb2Ygc2FhNzEzeCAqLwotCQlpZiAocHJpdi0+Y2ZnLT50dW5lcl9jYWxsYmFjaykKLQkJCXByaXYtPmNmZy0+dHVuZXJfY2FsbGJhY2socHJpdi0+aTJjX2FkYXAtPmFsZ29fZGF0YSwgMCwgaGlnaCk7CisJCWlmIChmZS0+Y2FsbGJhY2spCisJCQlmZS0+Y2FsbGJhY2socHJpdi0+aTJjX2FkYXAtPmFsZ29fZGF0YSwKKwkJCQkgICAgIERWQl9GUk9OVEVORF9DT01QT05FTlRfVFVORVIsIDAsIGhpZ2gpOwogCQlicmVhazsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI3eC5oIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyN3guaAppbmRleCA3ODUwYTlhLi43ZDcyY2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI3eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4Mjd4LmgKQEAgLTM2LDcgKzM2LDYgQEAKIAkvKiBpbnRlcmZhY2UgdG8gdGRhODI5eCBkcml2ZXIgKi8KIAl1bnNpZ25lZCBpbnQgY29uZmlnOwogCWludCAJICAgICBzd2l0Y2hfYWRkcjsKLQlpbnQgKCp0dW5lcl9jYWxsYmFjaykgKHZvaWQgKmRldiwgaW50IGNvbW1hbmQsIGludCBhcmcpOwogCiAJdm9pZCAoKmFnY2YpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyOTAuYwppbmRleCA5MTIwNGQzLi5jMTEyYmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmMKQEAgLTY3MiwxMCArNjcyLDggQEAKIAlwcml2LT5pMmNfcHJvcHMuYWRkciAgICAgPSBpMmNfYWRkcjsKIAlwcml2LT5pMmNfcHJvcHMuYWRhcCAgICAgPSBpMmNfYWRhcDsKIAlwcml2LT5pMmNfcHJvcHMubmFtZSAgICAgPSAidGRhODI5eCI7Ci0JaWYgKGNmZykgeworCWlmIChjZmcpCiAJCXByaXYtPmNmZy5jb25maWcgICAgICAgICA9IGNmZy0+bG5hX2NmZzsKLQkJcHJpdi0+Y2ZnLnR1bmVyX2NhbGxiYWNrID0gY2ZnLT50dW5lcl9jYWxsYmFjazsKLQl9CiAKIAlpZiAodGRhODI5MF9wcm9iZSgmcHJpdi0+aTJjX3Byb3BzKSA9PSAwKSB7CiAJCXByaXYtPnZlciA9IFREQTgyOTA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5oIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyOTAuaAppbmRleCBhYTA3NGYzLi43ZTI4OGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmgKQEAgLTIyLDcgKzIyLDYgQEAKIAogc3RydWN0IHRkYTgyOXhfY29uZmlnIHsKIAl1bnNpZ25lZCBpbnQgbG5hX2NmZzsKLQlpbnQgKCp0dW5lcl9jYWxsYmFjaykgKHZvaWQgKmRldiwgaW50IGNvbW1hbmQsIGludCBhcmcpOwogCiAJdW5zaWduZWQgaW50IHByb2JlX3R1bmVyOjE7CiAjZGVmaW5lIFREQTgyOVhfUFJPQkVfVFVORVIgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTk4ODcuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE5ODg3LmMKaW5kZXggNzJhYmYwYi4uZmYxNzg4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTk4ODcuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhOTg4Ny5jCkBAIC02ODYsNyArNjg2LDYgQEAKIAljYXNlIDA6CiAJCW11dGV4X3VubG9jaygmdGRhOTg4N19saXN0X211dGV4KTsKIAkJcmV0dXJuIE5VTEw7Ci0JCWJyZWFrOwogCWNhc2UgMToKIAkJZmUtPmFuYWxvZ19kZW1vZF9wcml2ID0gcHJpdjsKIAkJcHJpdi0+bW9kZSA9IFRfU1RBTkRCWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci1zaW1wbGUuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci1zaW1wbGUuYwppbmRleCBhYTc3M2E2Li5mYjNmM2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItc2ltcGxlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXNpbXBsZS5jCkBAIC0xNDIsNiArMTQyLDcgQEAKIAljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMzoKIAljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjU2X0lIMzoKIAljYXNlIFRVTkVSX0xHX05UU0NfVEFQRToKKwljYXNlIFRVTkVSX1RDTF9NRjAyR0lQXzVOOgogCQlyZXR1cm4gKChzdGF0dXMgJiBUVU5FUl9TSUdOQUwpID09IFRVTkVSX1NURVJFT19NSzMpOwogCWRlZmF1bHQ6CiAJCXJldHVybiBzdGF0dXMgJiBUVU5FUl9TVEVSRU87CkBAIC00OTIsOCArNDkzLDEwIEBACiAJY2FzZSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMzoKIAljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMzoKIAljYXNlIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMzoKKwljYXNlIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FWF9NSzM6CiAJY2FzZSBUVU5FUl9MR19OVFNDX1RBUEU6CiAJY2FzZSBUVU5FUl9QSElMSVBTX0ZNMTI1Nl9JSDM6CisJY2FzZSBUVU5FUl9UQ0xfTUYwMkdJUF81TjoKIAkJYnVmZmVyWzNdID0gMHgxOTsKIAkJYnJlYWs7CiAJY2FzZSBUVU5FUl9UTkZfNTMzNU1GOgpAQCAtNzY1LDYgKzc2OCw3IEBACiAKIAlzd2l0Y2ggKHByaXYtPnR5cGUpIHsKIAljYXNlIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMzoKKwljYXNlIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FWF9NSzM6CiAJCWlmIChwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGggPT0gQkFORFdJRFRIXzhfTUhaICYmCiAJCSAgICBwYXJhbXMtPmZyZXF1ZW5jeSA+PSAxNTg4NzAwMDApCiAJCQlidWZbM10gfD0gMHgwODsKQEAgLTEwMzgsNyArMTA0Miw2IEBACiAJY2FzZSAwOgogCQltdXRleF91bmxvY2soJnR1bmVyX3NpbXBsZV9saXN0X211dGV4KTsKIAkJcmV0dXJuIE5VTEw7Ci0JCWJyZWFrOwogCWNhc2UgMToKIAkJZmUtPnR1bmVyX3ByaXYgPSBwcml2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCmluZGV4IDEwZGRkY2EuLjdjMGJjMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jCkBAIC05NDYsNyArOTQ2LDcgQEAKIAl9LAogfTsKIAotLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMyAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLworLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FKFgpX01LMyAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19wYWxfcmFuZ2VzW10gPSB7CiAJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDg2LCAweDUxLCB9LApAQCAtOTg0LDYgKzk4NCwyNyBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZXhfbWszX3BhcmFtc1tdID0geworCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAorCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19mbWQxMjE2bWVfbWszX3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19wYWxfcmFuZ2VzKSwKKwkJLmhhc190ZGE5ODg3ID0gMSwKKwkJLnBvcnQxX2FjdGl2ZSA9IDEsCisJCS5wb3J0Ml9hY3RpdmUgPSAxLAorCQkucG9ydDJfZm1faGlnaF9zZW5zaXRpdml0eSA9IDEsCisJCS5wb3J0Ml9pbnZlcnRfZm9yX3NlY2FtX2xjID0gMSwKKwkJLnBvcnQxX3NldF9mb3JfZm1fbW9ubyA9IDEsCisJCS5yYWRpb19pZiA9IDEsCisJCS5mbV9nYWluX25vcm1hbCA9IDEsCisJfSwKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX0RJR0lUQUwsCisJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZV9tazNfZHZiX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mbWQxMjE2bWVfbWszX2R2Yl9yYW5nZXMpLAorCQkuaWZmcmVxID0gMTYgKiAzNi4xMjUsIC8qTUh6Ki8KKwl9LAorfTsKIAogLyogLS0tLS0tIFRVTkVSX0xHX1REVlNfSDA2WEYgLSBMRyBJTk5PVEVLIC8gSU5GSU5FT04gQVRTQyAtLS0tLSAqLwogCkBAIC0xMjE2LDYgKzEyMzcsMjMgQEAKIAl9LAogfTsKIAorLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RDTF9NRjAyR0lQLTVOLUUgLSBUQ0wgTUYwMkdJUC01TiAtLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90Y2xfbWYwMmdpcF81bl9udHNjX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNzIuMDAgLypNSHoqLywgMHg4ZSwgMHgwMSwgfSwKKwl7IDE2ICogNDQ4LjAwIC8qTUh6Ki8sIDB4OGUsIDB4MDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDA0LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGNsX21mMDJnaXBfNW5fcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAorCQkucmFuZ2VzID0gdHVuZXJfdGNsX21mMDJnaXBfNW5fbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RjbF9tZjAyZ2lwXzVuX250c2NfcmFuZ2VzKSwKKwkJLmNiX2ZpcnN0X2lmX2xvd2VyX2ZyZXEgPSAxLAorCX0sCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHR1bmVydHlwZSB0dW5lcnNbXSA9IHsKQEAgLTE2NDEsNiArMTY3OSwyMSBAQAogCQkubmFtZSAgID0gIlhjZWl2ZSA1MDAwIHR1bmVyIiwKIAkJLyogc2VlIHhjNTAwMC5jIGZvciBkZXRhaWxzICovCiAJfSwKKwlbVFVORVJfVENMX01GMDJHSVBfNU5dID0geyAvKiBUQ0wgdHVuZXIgTUYwMkdJUC01Ti1FICovCisJCS5uYW1lICAgPSAiVENMIHR1bmVyIE1GMDJHSVAtNU4tRSIsCisJCS5wYXJhbXMgPSB0dW5lcl90Y2xfbWYwMmdpcF81bl9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RjbF9tZjAyZ2lwXzVuX3BhcmFtcyksCisJfSwKKwlbVFVORVJfUEhJTElQU19GTUQxMjE2TUVYX01LM10gPSB7IC8qIFBoaWxpcHMgUEFMICovCisJCS5uYW1lICAgPSAiUGhpbGlwcyBGTUQxMjE2TUVYIE1LMyBIeWJyaWQgVHVuZXIiLAorCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc19mbWQxMjE2bWV4X21rM19wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1leF9tazNfcGFyYW1zKSwKKwkJLm1pbiA9IDE2ICogIDUwLjg3LAorCQkubWF4ID0gMTYgKiA4NTguMDAsCisJCS5zdGVwc2l6ZSA9IDE2NjY2NywKKwkJLmluaXRkYXRhID0gdHVhNjAzeF9hZ2MxMTIsCisJCS5zbGVlcGRhdGEgPSAodThbXSl7IDQsIDB4OWMsIDB4NjAsIDB4ODUsIDB4NTQgfSwKKwl9LAogfTsKIEVYUE9SVF9TWU1CT0wodHVuZXJzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5jCmluZGV4IDRkZDFkMjQuLmI2NWU2ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci14YzIwMjguYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmMKQEAgLTcxLDkgKzcxLDYgQEAKIHN0cnVjdCB4YzIwMjhfZGF0YSB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgaHlicmlkX3R1bmVyX2luc3RhbmNlX2xpc3Q7CiAJc3RydWN0IHR1bmVyX2kyY19wcm9wcyAgaTJjX3Byb3BzOwotCWludCAgICAgICAgICAgICAgICAgICAgICgqdHVuZXJfY2FsbGJhY2spICh2b2lkICpkZXYsCi0JCQkJCQkgICBpbnQgY29tbWFuZCwgaW50IGFyZyk7Ci0Jdm9pZAkJCSp2aWRlb19kZXY7CiAJX191MzIJCQlmcmVxdWVuY3k7CiAKIAlzdHJ1Y3QgZmlybXdhcmVfZGVzY3JpcHRpb24gKmZpcm07CkBAIC00OTIsNiArNDg5LDIzIEBACiAJcmV0dXJuIGk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGRvX3R1bmVyX2NhbGxiYWNrKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgY21kLCBpbnQgYXJnKQoreworCXN0cnVjdCB4YzIwMjhfZGF0YSAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCisJLyogYW5hbG9nIHNpZGUgKHR1bmVyLWNvcmUpIHVzZXMgaTJjX2FkYXAtPmFsZ29fZGF0YS4KKwkgKiBkaWdpdGFsIHNpZGUgaXMgbm90IGd1YXJhbnRlZWQgdG8gaGF2ZSBhbGdvX2RhdGEgZGVmaW5lZC4KKwkgKgorCSAqIGRpZ2l0YWwgc2lkZSB3aWxsIGFsd2F5cyBoYXZlIGZlLT5kdmIgZGVmaW5lZC4KKwkgKiBhbmFsb2cgc2lkZSAodHVuZXItY29yZSkgZG9lc24ndCAoeWV0KSBkZWZpbmUgZmUtPmR2Yi4KKwkgKi8KKworCXJldHVybiAoIWZlLT5jYWxsYmFjaykgPyAtRUlOVkFMIDoKKwkJZmUtPmNhbGxiYWNrKCgoZmUtPmR2YikgJiYgKGZlLT5kdmItPnByaXYpKSA/CisJCQkJZmUtPmR2Yi0+cHJpdiA6IHByaXYtPmkyY19wcm9wcy5hZGFwLT5hbGdvX2RhdGEsCisJCQkgICAgIERWQl9GUk9OVEVORF9DT01QT05FTlRfVFVORVIsIGNtZCwgYXJnKTsKK30KKwogc3RhdGljIGludCBsb2FkX2Zpcm13YXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1bnNpZ25lZCBpbnQgdHlwZSwKIAkJCSB2NGwyX3N0ZF9pZCAqaWQpCiB7CkBAIC01MzAsOCArNTQ0LDcgQEAKIAogCQlpZiAoIXNpemUpIHsKIAkJCS8qIFNwZWNpYWwgY2FsbGJhY2sgY29tbWFuZCByZWNlaXZlZCAqLwotCQkJcmMgPSBwcml2LT50dW5lcl9jYWxsYmFjayhwcml2LT52aWRlb19kZXYsCi0JCQkJCQkgIFhDMjAyOF9UVU5FUl9SRVNFVCwgMCk7CisJCQlyYyA9IGRvX3R1bmVyX2NhbGxiYWNrKGZlLCBYQzIwMjhfVFVORVJfUkVTRVQsIDApOwogCQkJaWYgKHJjIDwgMCkgewogCQkJCXR1bmVyX2VycigiRXJyb3IgYXQgUkVTRVQgY29kZSAlZFxuIiwKIAkJCQkJICAgKCpwKSAmIDB4N2YpOwpAQCAtNTQyLDggKzU1NSw3IEBACiAJCWlmIChzaXplID49IDB4ZmYwMCkgewogCQkJc3dpdGNoIChzaXplKSB7CiAJCQljYXNlIDB4ZmYwMDoKLQkJCQlyYyA9IHByaXYtPnR1bmVyX2NhbGxiYWNrKHByaXYtPnZpZGVvX2RldiwKLQkJCQkJCQlYQzIwMjhfUkVTRVRfQ0xLLCAwKTsKKwkJCQlyYyA9IGRvX3R1bmVyX2NhbGxiYWNrKGZlLCBYQzIwMjhfUkVTRVRfQ0xLLCAwKTsKIAkJCQlpZiAocmMgPCAwKSB7CiAJCQkJCXR1bmVyX2VycigiRXJyb3IgYXQgUkVTRVQgY29kZSAlZFxuIiwKIAkJCQkJCSAgKCpwKSAmIDB4N2YpOwpAQCAtNzE1LDggKzcyNyw3IEBACiAJbWVtc2V0KCZwcml2LT5jdXJfZncsIDAsIHNpemVvZihwcml2LT5jdXJfZncpKTsKIAogCS8qIFJlc2V0IGlzIG5lZWRlZCBiZWZvcmUgbG9hZGluZyBmaXJtd2FyZSAqLwotCXJjID0gcHJpdi0+dHVuZXJfY2FsbGJhY2socHJpdi0+dmlkZW9fZGV2LAotCQkJCSAgWEMyMDI4X1RVTkVSX1JFU0VULCAwKTsKKwlyYyA9IGRvX3R1bmVyX2NhbGxiYWNrKGZlLCBYQzIwMjhfVFVORVJfUkVTRVQsIDApOwogCWlmIChyYyA8IDApCiAJCWdvdG8gZmFpbDsKIApAQCAtOTMzLDcgKzk0NCw3IEBACiAJICAgVGhlIHJlc2V0IENMSyBpcyBuZWVkZWQgb25seSB3aXRoIHRtNjAwMC4KIAkgICBEcml2ZXIgc2hvdWxkIHdvcmsgZmluZSBldmVuIGlmIHRoaXMgZmFpbHMuCiAJICovCi0JcHJpdi0+dHVuZXJfY2FsbGJhY2socHJpdi0+dmlkZW9fZGV2LCBYQzIwMjhfUkVTRVRfQ0xLLCAxKTsKKwlkb190dW5lcl9jYWxsYmFjayhmZSwgWEMyMDI4X1JFU0VUX0NMSywgMSk7CiAKIAltc2xlZXAoMTApOwogCkBAIC0xMDAyLDExICsxMDEzLDYgQEAKIAogCXR1bmVyX2RiZygiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAocHJpdi0+Y3RybC5kMjYzMykKLQkJdHlwZSB8PSBEMjYzMzsKLQllbHNlCi0JCXR5cGUgfD0gRDI2MjA7Ci0KIAlzd2l0Y2goZmUtPm9wcy5pbmZvLnR5cGUpIHsKIAljYXNlIEZFX09GRE06CiAJCWJ3ID0gcC0+dS5vZmRtLmJhbmR3aWR0aDsKQEAgLTEwMjEsMTAgKzEwMjcsOCBAQAogCQlicmVhazsKIAljYXNlIEZFX0FUU0M6CiAJCWJ3ID0gQkFORFdJRFRIXzZfTUhaOwotCQkvKiBUaGUgb25seSBBVFNDIGZpcm13YXJlIChhdCBsZWFzdCBvbiB2Mi43KSBpcyBEMjYzMywKLQkJICAgc28gb3ZlcnJpZGVzIGN0cmwtPmQyNjMzICovCi0JCXR5cGUgfD0gQVRTQ3wgRDI2MzM7Ci0JCXR5cGUgJj0gfkQyNjIwOworCQkvKiBUaGUgb25seSBBVFNDIGZpcm13YXJlIChhdCBsZWFzdCBvbiB2Mi43KSBpcyBEMjYzMyAqLworCQl0eXBlIHw9IEFUU0MgfCBEMjYzMzsKIAkJYnJlYWs7CiAJLyogRFZCLVMgaXMgbm90IHN1cHBvcnRlZCAqLwogCWRlZmF1bHQ6CkBAIC0xMDU3LDYgKzEwNjEsMjggQEAKIAkJdHVuZXJfZXJyKCJlcnJvcjogYmFuZHdpZHRoIG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAl9OwogCisJLyoKKwkgIFNlbGVjdHMgYmV0d2VlbiBEMjYzMyBvciBEMjYyMCBmaXJtd2FyZS4KKwkgIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgQVRTQywgc2luY2UgaXQgc2hvdWxkIGJlIEQyNjMzIG9uIGFsbCBjYXNlcworCSAqLworCWlmIChmZS0+b3BzLmluZm8udHlwZSAhPSBGRV9BVFNDKSB7CisJCXN3aXRjaCAocHJpdi0+Y3RybC50eXBlKSB7CisJCWNhc2UgWEMyMDI4X0QyNjMzOgorCQkJdHlwZSB8PSBEMjYzMzsKKwkJCWJyZWFrOworCQljYXNlIFhDMjAyOF9EMjYyMDoKKwkJCXR5cGUgfD0gRDI2MjA7CisJCQlicmVhazsKKwkJY2FzZSBYQzIwMjhfQVVUTzoKKwkJZGVmYXVsdDoKKwkJCS8qIFphcmxpbmsgc2VlbXMgdG8gbmVlZCBEMjYzMyAqLworCQkJaWYgKHByaXYtPmN0cmwuZGVtb2QgPT0gWEMzMDI4X0ZFX1pBUkxJTks0NTYpCisJCQkJdHlwZSB8PSBEMjYzMzsKKwkJCWVsc2UKKwkJCQl0eXBlIHw9IEQyNjIwOworCQl9CisJfQorCiAJLyogQWxsIFMtY29kZSB0YWJsZXMgbmVlZCBhIDIwMGtIeiBzaGlmdCAqLwogCWlmIChwcml2LT5jdHJsLmRlbW9kKQogCQlkZW1vZCA9IHByaXYtPmN0cmwuZGVtb2QgKyAyMDA7CkBAIC0xMTc3LDIwICsxMjAzLDEwIEBACiAJCWJyZWFrOwogCWNhc2UgMToKIAkJLyogbmV3IHR1bmVyIGluc3RhbmNlICovCi0JCXByaXYtPnR1bmVyX2NhbGxiYWNrID0gY2ZnLT5jYWxsYmFjazsKIAkJcHJpdi0+Y3RybC5tYXhfbGVuID0gMTM7CiAKIAkJbXV0ZXhfaW5pdCgmcHJpdi0+bG9jayk7CiAKLQkJLyogYW5hbG9nIHNpZGUgKHR1bmVyLWNvcmUpIHVzZXMgaTJjX2FkYXAtPmFsZ29fZGF0YS4KLQkJICogZGlnaXRhbCBzaWRlIGlzIG5vdCBndWFyYW50ZWVkIHRvIGhhdmUgYWxnb19kYXRhIGRlZmluZWQuCi0JCSAqCi0JCSAqIGRpZ2l0YWwgc2lkZSB3aWxsIGFsd2F5cyBoYXZlIGZlLT5kdmIgZGVmaW5lZC4KLQkJICogYW5hbG9nIHNpZGUgKHR1bmVyLWNvcmUpIGRvZXNuJ3QgKHlldCkgZGVmaW5lIGZlLT5kdmIuCi0JCSAqLwotCQlwcml2LT52aWRlb19kZXYgPSAoKGZlLT5kdmIpICYmIChmZS0+ZHZiLT5wcml2KSkgPwotCQkJCSAgIGZlLT5kdmItPnByaXYgOiBjZmctPmkyY19hZGFwLT5hbGdvX2RhdGE7Ci0KIAkJZmUtPnR1bmVyX3ByaXYgPSBwcml2OwogCQlicmVhazsKIAljYXNlIDI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmgKaW5kZXggMmM1YjYyOC4uMTlkZTc5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci14YzIwMjguaApAQCAtMjQsMjQgKzI0LDI4IEBACiAjZGVmaW5lCVhDMzAyOF9GRV9aQVJMSU5LNDU2CTQ1NjAKICNkZWZpbmUJWEMzMDI4X0ZFX0NISU5BCQk1MjAwCiAKK2VudW0gZmlybXdhcmVfdHlwZSB7CisJWEMyMDI4X0FVVE8gPSAwLCAgICAgICAgLyogQnkgZGVmYXVsdCwgYXV0by1kZXRlY3RzICovCisJWEMyMDI4X0QyNjMzLAorCVhDMjAyOF9EMjYyMCwKK307CisKIHN0cnVjdCB4YzIwMjhfY3RybCB7CiAJY2hhcgkJCSpmbmFtZTsKIAlpbnQJCQltYXhfbGVuOwogCXVuc2lnbmVkIGludAkJc2NvZGVfdGFibGU7CiAJdW5zaWduZWQgaW50CQltdHMgICA6MTsKLQl1bnNpZ25lZCBpbnQJCWQyNjMzIDoxOwogCXVuc2lnbmVkIGludAkJaW5wdXQxOjE7CiAJdW5zaWduZWQgaW50CQl2aGZidzc6MTsKIAl1bnNpZ25lZCBpbnQJCXVoZmJ3ODoxOwogCXVuc2lnbmVkIGludAkJZGVtb2Q7CisJZW51bSBmaXJtd2FyZV90eXBlCXR5cGU6MjsKIH07CiAKIHN0cnVjdCB4YzIwMjhfY29uZmlnIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOwogCXU4IAkJICAgaTJjX2FkZHI7Ci0Jdm9pZCAgICAgICAgICAgICAgICp2aWRlb19kZXY7CiAJc3RydWN0IHhjMjAyOF9jdHJsICpjdHJsOwotCWludCAgICAgICAgICAgICAgICAoKmNhbGxiYWNrKSAodm9pZCAqZGV2LCBpbnQgY29tbWFuZCwgaW50IGFyZyk7CiB9OwogCiAvKiB4YzIwMjggY29tbWFuZHMgZm9yIGNhbGxiYWNrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMKaW5kZXggZGNkZGZhOC4uZTEyZDEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYwpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogCiAjaW5jbHVkZSAieGM1MDAwLmgiCi0jaW5jbHVkZSAieGM1MDAwX3ByaXYuaCIKKyNpbmNsdWRlICJ0dW5lci1pMmMuaCIKIAogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKQEAgLTQwLDEyICs0MCwyNiBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGluaXRfZncsIHhjNTAwMF9sb2FkX2Z3X29uX2F0dGFjaCwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaW5pdF9mdywgIkxvYWQgZmlybXdhcmUgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbi4iKTsKIAotI2RlZmluZSBkcHJpbnRrKGxldmVsLGZtdCwgYXJnLi4uKSBpZiAoZGVidWcgPj0gbGV2ZWwpIFwKK3N0YXRpYyBERUZJTkVfTVVURVgoeGM1MDAwX2xpc3RfbXV0ZXgpOworc3RhdGljIExJU1RfSEVBRChoeWJyaWRfdHVuZXJfaW5zdGFuY2VfbGlzdCk7CisKKyNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pIGlmIChkZWJ1ZyA+PSBsZXZlbCkgXAogCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZtdCwgInhjNTAwMCIsICMjIGFyZykKIAogI2RlZmluZSBYQzUwMDBfREVGQVVMVF9GSVJNV0FSRSAiZHZiLWZlLXhjNTAwMC0xLjEuZnciCiAjZGVmaW5lIFhDNTAwMF9ERUZBVUxUX0ZJUk1XQVJFX1NJWkUgMTIzMzIKIAorc3RydWN0IHhjNTAwMF9wcml2IHsKKwlzdHJ1Y3QgdHVuZXJfaTJjX3Byb3BzIGkyY19wcm9wczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGh5YnJpZF90dW5lcl9pbnN0YW5jZV9saXN0OworCisJdTMyIGlmX2toejsKKwl1MzIgZnJlcV9oejsKKwl1MzIgYmFuZHdpZHRoOworCXU4ICB2aWRlb19zdGFuZGFyZDsKKwl1OCAgcmZfbW9kZTsKK307CisKIC8qIE1pc2MgRGVmaW5lcyAqLwogI2RlZmluZSBNQVhfVFZfU1RBTkRBUkQJCQkyMwogI2RlZmluZSBYQ19NQVhfSTJDX1dSSVRFX0xFTkdUSAkJNjQKQEAgLTEyNCwxMSArMTM4LDExIEBACiAgICBpbW1lZGlhdGVseSB0aGUgbGVuZ3RoIG9mIHRoZSBmb2xsb3dpbmcgdHJhbnNhY3Rpb24uCiAKICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgWENfVFZfU1RBTkRBUkQgewogCWNoYXIgKk5hbWU7CiAJdTE2IEF1ZGlvTW9kZTsKIAl1MTYgVmlkZW9Nb2RlOwotfSBYQ19UVl9TVEFOREFSRDsKK307CiAKIC8qIFR1bmVyIHN0YW5kYXJkcyAqLwogI2RlZmluZSBNTl9OVFNDX1BBTF9CVFNDCTAKQEAgLTE1NSw3ICsxNjksNyBAQAogI2RlZmluZSBGTV9SYWRpb19JTlBVVDIgCTIxCiAjZGVmaW5lIEZNX1JhZGlvX0lOUFVUMSAJMjIKIAotc3RhdGljIFhDX1RWX1NUQU5EQVJEIFhDNTAwMF9TdGFuZGFyZFtNQVhfVFZfU1RBTkRBUkRdID0geworc3RhdGljIHN0cnVjdCBYQ19UVl9TVEFOREFSRCBYQzUwMDBfU3RhbmRhcmRbTUFYX1RWX1NUQU5EQVJEXSA9IHsKIAl7Ik0vTi1OVFNDL1BBTC1CVFNDIiwgMHgwNDAwLCAweDgwMjB9LAogCXsiTS9OLU5UU0MvUEFMLUEyIiwgICAweDA2MDAsIDB4ODAyMH0sCiAJeyJNL04tTlRTQy9QQUwtRUlBSiIsIDB4MDQ0MCwgMHg4MDIwfSwKQEAgLTE2OSw3ICsxODMsNyBAQAogCXsiRC9LLVBBTC1OSUNBTSIsICAgICAweDBFODAsIDB4ODAwOX0sCiAJeyJEL0stUEFMLU1PTk8iLCAgICAgIDB4MTQ3OCwgMHg4MDA5fSwKIAl7IkQvSy1TRUNBTS1BMiBESzEiLCAgMHgxMjAwLCAweDgwMDl9LAotCXsiRC9LLVNFQ0FNLUEyIEwvREszIiwweDBFMDAsIDB4ODAwOX0sCisJeyJEL0stU0VDQU0tQTIgTC9ESzMiLCAweDBFMDAsIDB4ODAwOX0sCiAJeyJEL0stU0VDQU0tQTIgTU9OTyIsIDB4MTQ3OCwgMHg4MDA5fSwKIAl7IkwtU0VDQU0tTklDQU0iLCAgICAgMHg4RTgyLCAweDAwMDl9LAogCXsiTCctU0VDQU0tTklDQU0iLCAgICAweDhFODIsIDB4NDAwOX0sCkBAIC0yMTYsOSArMjMwLDEyIEBACiAKIAlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAocHJpdi0+Y2ZnLT50dW5lcl9jYWxsYmFjaykgewotCQlyZXQgPSBwcml2LT5jZmctPnR1bmVyX2NhbGxiYWNrKHByaXYtPmRldnB0ciwKLQkJCQkJCVhDNTAwMF9UVU5FUl9SRVNFVCwgMCk7CisJaWYgKGZlLT5jYWxsYmFjaykgeworCQlyZXQgPSBmZS0+Y2FsbGJhY2soKChmZS0+ZHZiKSAmJiAoZmUtPmR2Yi0+cHJpdikpID8KKwkJCQkJICAgZmUtPmR2Yi0+cHJpdiA6CisJCQkJCSAgIHByaXYtPmkyY19wcm9wcy5hZGFwLT5hbGdvX2RhdGEsCisJCQkJCSAgIERWQl9GUk9OVEVORF9DT01QT05FTlRfVFVORVIsCisJCQkJCSAgIFhDNTAwMF9UVU5FUl9SRVNFVCwgMCk7CiAJCWlmIChyZXQpCiAJCQlwcmludGsoS0VSTl9FUlIgInhjNTAwMDogcmVzZXQgZmFpbGVkXG4iKTsKIAl9IGVsc2UKQEAgLTI5MCw5ICszMDcsMTAgQEAKIAl1bnNpZ25lZCBpbnQgbGVuLCBwb3MsIGluZGV4OwogCXU4IGJ1ZltYQ19NQVhfSTJDX1dSSVRFX0xFTkdUSF07CiAKLQlpbmRleD0wOwotCXdoaWxlICgoaTJjX3NlcXVlbmNlW2luZGV4XSE9MHhGRikgfHwgKGkyY19zZXF1ZW5jZVtpbmRleCsxXSE9MHhGRikpIHsKLQkJbGVuID0gaTJjX3NlcXVlbmNlW2luZGV4XSogMjU2ICsgaTJjX3NlcXVlbmNlW2luZGV4KzFdOworCWluZGV4ID0gMDsKKwl3aGlsZSAoKGkyY19zZXF1ZW5jZVtpbmRleF0gIT0gMHhGRikgfHwKKwkJKGkyY19zZXF1ZW5jZVtpbmRleCArIDFdICE9IDB4RkYpKSB7CisJCWxlbiA9IGkyY19zZXF1ZW5jZVtpbmRleF0gKiAyNTYgKyBpMmNfc2VxdWVuY2VbaW5kZXgrMV07CiAJCWlmIChsZW4gPT0gMHgwMDAwKSB7CiAJCQkvKiBSRVNFVCBjb21tYW5kICovCiAJCQlyZXN1bHQgPSB4Y19yZXNldChmZSk7CkBAIC0zMTIsMTUgKzMzMCwxNyBAQAogCQkJYnVmWzFdID0gaTJjX3NlcXVlbmNlW2luZGV4ICsgMV07CiAJCQlwb3MgPSAyOwogCQkJd2hpbGUgKHBvcyA8IGxlbikgewotCQkJCWlmICgobGVuIC0gcG9zKSA+IFhDX01BWF9JMkNfV1JJVEVfTEVOR1RIIC0gMikgewotCQkJCQluYnl0ZXNfdG9fc2VuZCA9IFhDX01BWF9JMkNfV1JJVEVfTEVOR1RIOwotCQkJCX0gZWxzZSB7CisJCQkJaWYgKChsZW4gLSBwb3MpID4gWENfTUFYX0kyQ19XUklURV9MRU5HVEggLSAyKQorCQkJCQluYnl0ZXNfdG9fc2VuZCA9CisJCQkJCQlYQ19NQVhfSTJDX1dSSVRFX0xFTkdUSDsKKwkJCQllbHNlCiAJCQkJCW5ieXRlc190b19zZW5kID0gKGxlbiAtIHBvcyArIDIpOworCQkJCWZvciAoaSA9IDI7IGkgPCBuYnl0ZXNfdG9fc2VuZDsgaSsrKSB7CisJCQkJCWJ1ZltpXSA9IGkyY19zZXF1ZW5jZVtpbmRleCArIHBvcyArCisJCQkJCQlpIC0gMl07CiAJCQkJfQotCQkJCWZvciAoaT0yOyBpPG5ieXRlc190b19zZW5kOyBpKyspIHsKLQkJCQkJYnVmW2ldID0gaTJjX3NlcXVlbmNlW2luZGV4ICsgcG9zICsgaSAtIDJdOwotCQkJCX0KLQkJCQlyZXN1bHQgPSB4Y19zZW5kX2kyY19kYXRhKHByaXYsIGJ1ZiwgbmJ5dGVzX3RvX3NlbmQpOworCQkJCXJlc3VsdCA9IHhjX3NlbmRfaTJjX2RhdGEocHJpdiwgYnVmLAorCQkJCQluYnl0ZXNfdG9fc2VuZCk7CiAKIAkJCQlpZiAocmVzdWx0ICE9IFhDX1JFU1VMVF9TVUNDRVNTKQogCQkJCQlyZXR1cm4gcmVzdWx0OwpAQCAtMzY5LDggKzM4OSw3IEBACiAJZHByaW50aygxLCAiJXMoJWQpIFNvdXJjZSA9ICVzXG4iLCBfX2Z1bmNfXywgcmZfbW9kZSwKIAkJcmZfbW9kZSA9PSBYQ19SRl9NT0RFX0FJUiA/ICJBTlRFTk5BIiA6ICJDQUJMRSIpOwogCi0JaWYgKChyZl9tb2RlICE9IFhDX1JGX01PREVfQUlSKSAmJiAocmZfbW9kZSAhPSBYQ19SRl9NT0RFX0NBQkxFKSkKLQl7CisJaWYgKChyZl9tb2RlICE9IFhDX1JGX01PREVfQUlSKSAmJiAocmZfbW9kZSAhPSBYQ19SRl9NT0RFX0NBQkxFKSkgewogCQlyZl9tb2RlID0gWENfUkZfTU9ERV9DQUJMRTsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiJXMoKSwgSW52YWxpZCBtb2RlLCBkZWZhdWx0aW5nIHRvIENBQkxFIiwKQEAgLTUwOSwxMyArNTI4LDEzIEBACiAJdTggYnVmWzJdID0geyByZWcgPj4gOCwgcmVnICYgMHhmZiB9OwogCXU4IGJ2YWxbMl0gPSB7IDAsIDAgfTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2dbMl0gPSB7Ci0JCXsgLmFkZHIgPSBwcml2LT5jZmctPmkyY19hZGRyZXNzLAorCQl7IC5hZGRyID0gcHJpdi0+aTJjX3Byb3BzLmFkZHIsCiAJCQkuZmxhZ3MgPSAwLCAuYnVmID0gJmJ1ZlswXSwgLmxlbiA9IDIgfSwKLQkJeyAuYWRkciA9IHByaXYtPmNmZy0+aTJjX2FkZHJlc3MsCisJCXsgLmFkZHIgPSBwcml2LT5pMmNfcHJvcHMuYWRkciwKIAkJCS5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gJmJ2YWxbMF0sIC5sZW4gPSAyIH0sCiAJfTsKIAotCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCBtc2csIDIpICE9IDIpIHsKKwlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyY19wcm9wcy5hZGFwLCBtc2csIDIpICE9IDIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAieGM1MDAwOiBJMkMgcmVhZCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVSRU1PVEVJTzsKIAl9CkBAIC01MjYsMTAgKzU0NSwxMCBAQAogCiBzdGF0aWMgaW50IHhjNTAwMF93cml0ZXJlZ3Moc3RydWN0IHhjNTAwMF9wcml2ICpwcml2LCB1OCAqYnVmLCB1OCBsZW4pCiB7Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHByaXYtPmNmZy0+aTJjX2FkZHJlc3MsCisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHByaXYtPmkyY19wcm9wcy5hZGRyLAogCQkuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gbGVuIH07CiAKLQlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZywgMSkgIT0gMSkgeworCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjX3Byb3BzLmFkYXAsICZtc2csIDEpICE9IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ4YzUwMDA6IEkyQyB3cml0ZSBmYWlsZWQgKGxlbj0laSlcbiIsCiAJCQkoaW50KWxlbik7CiAJCXJldHVybiAtRVJFTU9URUlPOwpAQCAtNTM5LDE3ICs1NTgsMTcgQEAKIAogc3RhdGljIGludCB4YzUwMDBfcmVhZHJlZ3Moc3RydWN0IHhjNTAwMF9wcml2ICpwcml2LCB1OCAqYnVmLCB1OCBsZW4pCiB7Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHByaXYtPmNmZy0+aTJjX2FkZHJlc3MsCisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHByaXYtPmkyY19wcm9wcy5hZGRyLAogCQkuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IGxlbiB9OwogCi0JaWYgKGkyY190cmFuc2Zlcihwcml2LT5pMmMsICZtc2csIDEpICE9IDEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4YzUwMDAgSTJDIHJlYWQgZmFpbGVkIChsZW49JWkpXG4iLChpbnQpbGVuKTsKKwlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyY19wcm9wcy5hZGFwLCAmbXNnLCAxKSAhPSAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAieGM1MDAwIEkyQyByZWFkIGZhaWxlZCAobGVuPSVpKVxuIiwgKGludClsZW4pOwogCQlyZXR1cm4gLUVSRU1PVEVJTzsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgeGM1MDAwX2Z3dXBsb2FkKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCB4YzUwMDBfZnd1cGxvYWQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IHhjNTAwMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKQEAgLTU1OSw3ICs1NzgsOCBAQAogCXByaW50ayhLRVJOX0lORk8gInhjNTAwMDogd2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkICglcykuLi5cbiIsCiAJCVhDNTAwMF9ERUZBVUxUX0ZJUk1XQVJFKTsKIAotCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBYQzUwMDBfREVGQVVMVF9GSVJNV0FSRSwgJnByaXYtPmkyYy0+ZGV2KTsKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgWEM1MDAwX0RFRkFVTFRfRklSTVdBUkUsCisJCSZwcml2LT5pMmNfcHJvcHMuYWRhcC0+ZGV2KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAieGM1MDAwOiBVcGxvYWQgZmFpbGVkLiAoZmlsZSBub3QgZm91bmQ/KVxuIik7CiAJCXJldCA9IFhDX1JFU1VMVF9SRVNFVF9GQUlMVVJFOwpAQCAtNTc1LDcgKzU5NSw3IEBACiAJCXJldCA9IFhDX1JFU1VMVF9SRVNFVF9GQUlMVVJFOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0lORk8gInhjNTAwMDogZmlybXdhcmUgdXBsb2FkXG4iKTsKLQkJcmV0ID0geGNfbG9hZF9pMmNfc2VxdWVuY2UoZmUsICBmdy0+ZGF0YSApOworCQlyZXQgPSB4Y19sb2FkX2kyY19zZXF1ZW5jZShmZSwgIGZ3LT5kYXRhKTsKIAl9CiAKIG91dDoKQEAgLTYzNCw3ICs2NTQsNyBAQAogCiAJZHByaW50aygxLCAiJXMoKSBmcmVxdWVuY3k9JWQgKEh6KVxuIiwgX19mdW5jX18sIHBhcmFtcy0+ZnJlcXVlbmN5KTsKIAotCXN3aXRjaChwYXJhbXMtPnUudnNiLm1vZHVsYXRpb24pIHsKKwlzd2l0Y2ggKHBhcmFtcy0+dS52c2IubW9kdWxhdGlvbikgewogCWNhc2UgVlNCXzg6CiAJY2FzZSBWU0JfMTY6CiAJCWRwcmludGsoMSwgIiVzKCkgVlNCIG1vZHVsYXRpb25cbiIsIF9fZnVuY19fKTsKQEAgLTY3NSwxMCArNjk1LDEwIEBACiAJCXJldHVybiAtRVJFTU9URUlPOwogCX0KIAotCXJldCA9IHhjX3NldF9JRl9mcmVxdWVuY3kocHJpdiwgcHJpdi0+Y2ZnLT5pZl9raHopOworCXJldCA9IHhjX3NldF9JRl9mcmVxdWVuY3kocHJpdiwgcHJpdi0+aWZfa2h6KTsKIAlpZiAocmV0ICE9IFhDX1JFU1VMVF9TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0VSUiAieGM1MDAwOiB4Y19TZXRfSUZfZnJlcXVlbmN5KCVkKSBmYWlsZWRcbiIsCi0JCQlwcml2LT5jZmctPmlmX2toeik7CisJCSAgICAgICBwcml2LT5pZl9raHopOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTczMSw0MiArNzUxLDQyIEBACiAJLyogRklYIE1FOiBTb21lIHZpZGVvIHN0YW5kYXJkcyBtYXkgaGF2ZSBzZXZlcmFsIHBvc3NpYmxlIGF1ZGlvCiAJCSAgIHN0YW5kYXJkcy4gV2Ugc2ltcGx5IGRlZmF1bHQgdG8gb25lIG9mIHRoZW0gaGVyZS4KIAkgKi8KLQlpZihwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX01OKSB7CisJaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfTU4pIHsKIAkJLyogZGVmYXVsdCB0byBCVFNDIGF1ZGlvIHN0YW5kYXJkICovCiAJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gTU5fTlRTQ19QQUxfQlRTQzsKIAkJZ290byB0dW5lX2NoYW5uZWw7CiAJfQogCi0JaWYocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9QQUxfQkcpIHsKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9QQUxfQkcpIHsKIAkJLyogZGVmYXVsdCB0byBOSUNBTSBhdWRpbyBzdGFuZGFyZCAqLwogCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IEJHX1BBTF9OSUNBTTsKIAkJZ290byB0dW5lX2NoYW5uZWw7CiAJfQogCi0JaWYocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9QQUxfSSkgeworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9JKSB7CiAJCS8qIGRlZmF1bHQgdG8gTklDQU0gYXVkaW8gc3RhbmRhcmQgKi8KIAkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBJX1BBTF9OSUNBTTsKIAkJZ290byB0dW5lX2NoYW5uZWw7CiAJfQogCi0JaWYocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9QQUxfREspIHsKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9QQUxfREspIHsKIAkJLyogZGVmYXVsdCB0byBOSUNBTSBhdWRpbyBzdGFuZGFyZCAqLwogCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IERLX1BBTF9OSUNBTTsKIAkJZ290byB0dW5lX2NoYW5uZWw7CiAJfQogCi0JaWYocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9ESykgeworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0RLKSB7CiAJCS8qIGRlZmF1bHQgdG8gQTIgREsxIGF1ZGlvIHN0YW5kYXJkICovCiAJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gREtfU0VDQU1fQTJESzE7CiAJCWdvdG8gdHVuZV9jaGFubmVsOwogCX0KIAotCWlmKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfU0VDQU1fTCkgeworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0wpIHsKIAkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBMX1NFQ0FNX05JQ0FNOwogCQlnb3RvIHR1bmVfY2hhbm5lbDsKIAl9CiAKLQlpZihwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0xDKSB7CisJaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfU0VDQU1fTEMpIHsKIAkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBMQ19TRUNBTV9OSUNBTTsKIAkJZ290byB0dW5lX2NoYW5uZWw7CiAJfQpAQCAtNzc0LDcgKzc5NCw3IEBACiB0dW5lX2NoYW5uZWw6CiAJcmV0ID0geGNfU2V0U2lnbmFsU291cmNlKHByaXYsIHByaXYtPnJmX21vZGUpOwogCWlmIChyZXQgIT0gWENfUkVTVUxUX1NVQ0NFU1MpIHsKLQlwcmludGsoS0VSTl9FUlIKKwkJcHJpbnRrKEtFUk5fRVJSCiAJCQkieGM1MDAwOiB4Y19TZXRTaWduYWxTb3VyY2UoJWQpIGZhaWxlZFxuIiwKIAkJCXByaXYtPnJmX21vZGUpOwogCQlyZXR1cm4gLUVSRU1PVEVJTzsKQEAgLTg0Niw3ICs4NjYsNyBAQAogCSAqIEkyQyB0cmFuc2FjdGlvbnMgdW50aWwgY2FsaWJyYXRpb24gaXMgY29tcGxldGUuICBUaGlzIHdheSB3ZQogCSAqIGRvbid0IGhhdmUgdG8gcmVseSBvbiBjbG9jayBzdHJldGNoaW5nIHdvcmtpbmcuCiAJICovCi0JeGNfd2FpdCggMTAwICk7CisJeGNfd2FpdCgxMDApOwogCiAJLyogRGVmYXVsdCB0byAiQ0FCTEUiIG1vZGUgKi8KIAlyZXQgfD0geGNfd3JpdGVfcmVnKHByaXYsIFhSRUdfU0lHTkFMU09VUkNFLCBYQ19SRl9NT0RFX0NBQkxFKTsKQEAgLTg2OCwxNSArODg4LDEzIEBACiAJICovCiAKIAlyZXQgPSB4Y19zaHV0ZG93bihwcml2KTsKLQlpZihyZXQgIT0gWENfUkVTVUxUX1NVQ0NFU1MpIHsKKwlpZiAocmV0ICE9IFhDX1JFU1VMVF9TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJInhjNTAwMDogJXMoKSB1bmFibGUgdG8gc2h1dGRvd24gdHVuZXJcbiIsCiAJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRVJFTU9URUlPOwotCX0KLQllbHNlIHsKKwl9IGVsc2UKIAkJcmV0dXJuIFhDX1JFU1VMVF9TVUNDRVNTOwotCX0KIH0KIAogc3RhdGljIGludCB4YzUwMDBfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKQEAgLTg5Nyw5ICs5MTUsMTkgQEAKIAogc3RhdGljIGludCB4YzUwMDBfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKKwlzdHJ1Y3QgeGM1MDAwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwogCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKLQlrZnJlZShmZS0+dHVuZXJfcHJpdik7CisKKwltdXRleF9sb2NrKCZ4YzUwMDBfbGlzdF9tdXRleCk7CisKKwlpZiAocHJpdikKKwkJaHlicmlkX3R1bmVyX3JlbGVhc2Vfc3RhdGUocHJpdik7CisKKwltdXRleF91bmxvY2soJnhjNTAwMF9saXN0X211dGV4KTsKKwogCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKKwogCXJldHVybiAwOwogfQogCkBAIC05MjQsMzEgKzk1Miw0NSBAQAogCiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICp4YzUwMDBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAotCQkJCSAgIHN0cnVjdCB4YzUwMDBfY29uZmlnICpjZmcsIHZvaWQgKmRldnB0cikKKwkJCQkgICBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyAqY2ZnKQogewogCXN0cnVjdCB4YzUwMDBfcHJpdiAqcHJpdiA9IE5VTEw7CisJaW50IGluc3RhbmNlOwogCXUxNiBpZCA9IDA7CiAKLQlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisJZHByaW50aygxLCAiJXMoJWQtJTA0eClcbiIsIF9fZnVuY19fLAorCQlpMmMgPyBpMmNfYWRhcHRlcl9pZChpMmMpIDogLTEsCisJCWNmZyA/IGNmZy0+aTJjX2FkZHJlc3MgOiAtMSk7CiAKLQlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHhjNTAwMF9wcml2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHByaXYgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJbXV0ZXhfbG9jaygmeGM1MDAwX2xpc3RfbXV0ZXgpOwogCi0JcHJpdi0+Y2ZnID0gY2ZnOwotCXByaXYtPmJhbmR3aWR0aCA9IEJBTkRXSURUSF82X01IWjsKLQlwcml2LT5pMmMgPSBpMmM7Ci0JcHJpdi0+ZGV2cHRyID0gZGV2cHRyOworCWluc3RhbmNlID0gaHlicmlkX3R1bmVyX3JlcXVlc3Rfc3RhdGUoc3RydWN0IHhjNTAwMF9wcml2LCBwcml2LAorCQkJCQkgICAgICBoeWJyaWRfdHVuZXJfaW5zdGFuY2VfbGlzdCwKKwkJCQkJICAgICAgaTJjLCBjZmctPmkyY19hZGRyZXNzLCAieGM1MDAwIik7CisJc3dpdGNoIChpbnN0YW5jZSkgeworCWNhc2UgMDoKKwkJZ290byBmYWlsOworCQlicmVhazsKKwljYXNlIDE6CisJCS8qIG5ldyB0dW5lciBpbnN0YW5jZSAqLworCQlwcml2LT5iYW5kd2lkdGggPSBCQU5EV0lEVEhfNl9NSFo7CisJCXByaXYtPmlmX2toeiA9IGNmZy0+aWZfa2h6OworCisJCWZlLT50dW5lcl9wcml2ID0gcHJpdjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogZXhpc3RpbmcgdHVuZXIgaW5zdGFuY2UgKi8KKwkJZmUtPnR1bmVyX3ByaXYgPSBwcml2OworCQlicmVhazsKKwl9CiAKIAkvKiBDaGVjayBpZiBmaXJtd2FyZSBoYXMgYmVlbiBsb2FkZWQuIEl0IGlzIHBvc3NpYmxlIHRoYXQgYW5vdGhlcgogCSAgIGluc3RhbmNlIG9mIHRoZSBkcml2ZXIgaGFzIGxvYWRlZCB0aGUgZmlybXdhcmUuCiAJICovCi0JaWYgKHhjNTAwMF9yZWFkcmVnKHByaXYsIFhSRUdfUFJPRFVDVF9JRCwgJmlkKSAhPSAwKSB7Ci0JCWtmcmVlKHByaXYpOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJaWYgKHhjNTAwMF9yZWFkcmVnKHByaXYsIFhSRUdfUFJPRFVDVF9JRCwgJmlkKSAhPSAwKQorCQlnb3RvIGZhaWw7CiAKLQlzd2l0Y2goaWQpIHsKKwlzd2l0Y2ggKGlkKSB7CiAJY2FzZSBYQ19QUk9EVUNUX0lEX0ZXX0xPQURFRDoKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkJInhjNTAwMDogU3VjY2Vzc2Z1bGx5IGlkZW50aWZpZWQgYXQgYWRkcmVzcyAweCUwMnhcbiIsCkBAIC05NjcsMTkgKzEwMDksMjMgQEAKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkieGM1MDAwOiBEZXZpY2Ugbm90IGZvdW5kIGF0IGFkZHIgMHglMDJ4ICgweCV4KVxuIiwKIAkJCWNmZy0+aTJjX2FkZHJlc3MsIGlkKTsKLQkJa2ZyZWUocHJpdik7Ci0JCXJldHVybiBOVUxMOworCQlnb3RvIGZhaWw7CiAJfQogCisJbXV0ZXhfdW5sb2NrKCZ4YzUwMDBfbGlzdF9tdXRleCk7CisKIAltZW1jcHkoJmZlLT5vcHMudHVuZXJfb3BzLCAmeGM1MDAwX3R1bmVyX29wcywKIAkJc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CiAKLQlmZS0+dHVuZXJfcHJpdiA9IHByaXY7Ci0KIAlpZiAoeGM1MDAwX2xvYWRfZndfb25fYXR0YWNoKQogCQl4YzUwMDBfaW5pdChmZSk7CiAKIAlyZXR1cm4gZmU7CitmYWlsOgorCW11dGV4X3VubG9jaygmeGM1MDAwX2xpc3RfbXV0ZXgpOworCisJeGM1MDAwX3JlbGVhc2UoZmUpOworCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTCh4YzUwMDBfYXR0YWNoKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5oIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5oCmluZGV4IDUzODlmNzQuLmY0YzE0NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuaAorKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmgKQEAgLTMwLDggKzMwLDYgQEAKIHN0cnVjdCB4YzUwMDBfY29uZmlnIHsKIAl1OCAgIGkyY19hZGRyZXNzOwogCXUzMiAgaWZfa2h6OwotCi0JaW50ICAoKnR1bmVyX2NhbGxiYWNrKSAodm9pZCAqcHJpdiwgaW50IGNvbW1hbmQsIGludCBhcmcpOwogfTsKIAogLyogeGM1MDAwIGNhbGxiYWNrIGNvbW1hbmQgKi8KQEAgLTQ3LDE5ICs0NSwxNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwKSB8fCBcCiAgICAgKGRlZmluZWQoQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKLWV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiB4YzUwMDBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnhjNTAwMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJCSAgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCi0JCQkJCSAgc3RydWN0IHhjNTAwMF9jb25maWcgKmNmZywKLQkJCQkJICB2b2lkICpkZXZwdHIpOworCQkJCQkgIHN0cnVjdCB4YzUwMDBfY29uZmlnICpjZmcpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogeGM1MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqeGM1MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkJCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKLQkJCQkJCSBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyAqY2ZnLAotCQkJCQkJIHZvaWQgKmRldnB0cikKKwkJCQkJCSBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyAqY2ZnKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQotI2VuZGlmIC8vIENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDAKKyNlbmRpZgogCi0jZW5kaWYgLy8gX19YQzUwMDBfSF9fCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDBfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMF9wcml2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYTAwNzQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMF9wcml2LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogIERyaXZlciBmb3IgWGNlaXZlIFhDNTAwMCAiUUFNLzhWU0Igc2luZ2xlIGNoaXAgdHVuZXIiCi0gKgotICogIENvcHlyaWdodCAoYykgMjAwNyBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICoKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBYQzUwMDBfUFJJVl9ICi0jZGVmaW5lIFhDNTAwMF9QUklWX0gKLQotc3RydWN0IHhjNTAwMF9wcml2IHsKLQlzdHJ1Y3QgeGM1MDAwX2NvbmZpZyAqY2ZnOwotCXN0cnVjdCBpMmNfYWRhcHRlciAgICppMmM7Ci0KLQl1MzIgZnJlcV9oejsKLQl1MzIgYmFuZHdpZHRoOwotCXU4ICB2aWRlb19zdGFuZGFyZDsKLQl1OCAgcmZfbW9kZTsKLQotCXZvaWQgKmRldnB0cjsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKaW5kZXggOGJjMTQ0NS4uMGJjZDg1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCkBAIC0yMCw3ICsyMCw2IEBACiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy9LY29uZmlnIgotc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vS2NvbmZpZyIKIAogY29tbWVudCAiU3VwcG9ydGVkIEZsZXhDb3BJSSAoQjJDMikgQWRhcHRlcnMiCkBAIC0zNSw2ICszNCwxMCBAQAogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQwogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvS2NvbmZpZyIKIAorY29tbWVudCAiU3VwcG9ydGVkIFNETUMgRE0xMTA1IEFkYXB0ZXJzIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQworc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZyIKKwogY29tbWVudCAiU3VwcG9ydGVkIERWQiBGcm9udGVuZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKaW5kZXggZDZiYTRkMS4uZjkxZTllYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUKQEAgLTIsNCArMiw0IEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIG11bHRpbWVkaWEgZGV2aWNlIGRyaXZlcnMuCiAjCiAKLW9iai15ICAgICAgICA6PSBkdmItY29yZS8gZnJvbnRlbmRzLyB0dHBjaS8gdHR1c2ItZGVjLyB0dHVzYi1idWRnZXQvIGIyYzIvIGJ0OHh4LyBjaW5lcmd5VDIvIGR2Yi11c2IvIHBsdXRvMi8gc2lhbm8vCitvYmoteSAgICAgICAgOj0gZHZiLWNvcmUvIGZyb250ZW5kcy8gdHRwY2kvIHR0dXNiLWRlYy8gdHR1c2ItYnVkZ2V0LyBiMmMyLyBidDh4eC8gZHZiLXVzYi8gcGx1dG8yLyBzaWFuby8gZG0xMTA1LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWRtYS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWRtYS5jCmluZGV4IGE5MWVkMjguLjI2ZjAwMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1kbWEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZG1hLmMKQEAgLTEwLDcgKzEwLDcgQEAKIGludCBmbGV4Y29wX2RtYV9hbGxvY2F0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGZsZXhjb3BfZG1hICpkbWEsIHUzMiBzaXplKQogewogCXU4ICp0Y3B1OwotCWRtYV9hZGRyX3QgdGRtYTsKKwlkbWFfYWRkcl90IHRkbWEgPSAwOwogCiAJaWYgKHNpemUgJSAyKSB7CiAJCWVycigiZG1hIGJ1ZmZlcnNpemUgaGFzIHRvIGJlIGV2ZW4uIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jCmluZGV4IDZhZmJmYmIuLjQ4NzYyYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jCkBAIC03MDIsNyArNzAyLDcgQEAKIAl9CiAKIAlpZiAoY2FyZC0+ZmUgPT0gTlVMTCkKLQkJcHJpbnRrKCJkdmItYnQ4eHg6IEEgZnJvbnRlbmQgZHJpdmVyIHdhcyBub3QgZm91bmQgZm9yIGRldmljZSAlMDR4LyUwNHggc3Vic3lzdGVtICUwNHgvJTA0eFxuIiwKKwkJcHJpbnRrKCJkdmItYnQ4eHg6IEEgZnJvbnRlbmQgZHJpdmVyIHdhcyBub3QgZm91bmQgZm9yIGRldmljZSBbJTA0eDolMDR4XSBzdWJzeXN0ZW0gWyUwNHg6JTA0eF1cbiIsCiAJCSAgICAgICBjYXJkLT5idC0+ZGV2LT52ZW5kb3IsCiAJCSAgICAgICBjYXJkLT5idC0+ZGV2LT5kZXZpY2UsCiAJCSAgICAgICBjYXJkLT5idC0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAzNTEzYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLWNvbmZpZyBEVkJfQ0lORVJHWVQyCi0JdHJpc3RhdGUgIlRlcnJhdGVjIENpbmVyZ3lUMi9xYW51IFVTQjIgRFZCLVQgcmVjZWl2ZXIiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBVU0IgJiYgSU5QVVQKLQloZWxwCi0JICBTdXBwb3J0IGZvciAiVGVycmFUZWMgQ2luZXJneVQyIiBVU0IyLjAgSGlnaHNwZWVkIERWQiBSZWNlaXZlcnMKLQotCSAgU2F5IFkgaWYgeW91IG93biBzdWNoIGEgZGV2aWNlIGFuZCB3YW50IHRvIHVzZSBpdC4KLQotCi1jb25maWcgRFZCX0NJTkVSR1lUMl9UVU5JTkcKLQlib29sICJzb3BoaXN0aWNhdGVkIGZpbmUtdHVuaW5nIGZvciBDaW5lcmd5VDIgY2FyZHMiCi0JZGVwZW5kcyBvbiBEVkJfQ0lORVJHWVQyCi0JaGVscAotCSAgSGVyZSB5b3UgY2FuIGZpbmUtdHVuZSBzb21lIHBhcmFtZXRlcnMgb2YgdGhlIENpbmVyZ3lUMiBkcml2ZXIuCi0KLQkgIE5vcm1hbGx5IHlvdSBkb24ndCBuZWVkIHRvIHRvdWNoIHRoaXMsIGJ1dCBpbiBleG90aWMgc2V0dXBzIHlvdQotCSAgbWF5IGZpbmUtdHVuZSB5b3VyIHNldHVwIGFuZCBhZGp1c3QgZS5nLiBETUEgYnVmZmVyIHNpemVzIGZvcgotCSAgYSBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uLgotCi0KLWNvbmZpZyBEVkJfQ0lORVJHWVQyX1NUUkVBTV9VUkJfQ09VTlQKLQlpbnQgIk51bWJlciBvZiBxdWV1ZWQgVVNCIFJlcXVlc3QgQmxvY2tzIGZvciBIaWdoc3BlZWQgU3RyZWFtIFRyYW5zZmVycyIKLQlkZXBlbmRzIG9uIERWQl9DSU5FUkdZVDJfVFVOSU5HCi0JZGVmYXVsdCAiMzIiCi0JaGVscAotCSAgVVNCIFJlcXVlc3QgQmxvY2tzIGZvciBIaWdoc3BlZWQgU3RyZWFtIHRyYW5zZmVycyBhcmUgc2NoZWR1bGVkIGluCi0JICBhIHF1ZXVlIGZvciB0aGUgSG9zdCBDb250cm9sbGVyLgotCi0JICBVc3VhbGx5IHRoZSBkZWZhdWx0IHZhbHVlIGlzIGEgc2FmZSBjaG9pY2UuCi0KLQkgIFlvdSBtYXkgaW5jcmVhc2UgdGhpcyBudW1iZXIgaWYgeW91IGFyZSB1c2luZyB0aGlzIGRldmljZSBpbiBhCi0JICBTZXJ2ZXIgRW52aXJvbm1lbnQgd2l0aCBtYW55IGhpZ2gtdHJhZmZpYyBVU0IgSGlnaHNwZWVkIGRldmljZXMKLQkgIHNoYXJpbmcgdGhlIHNhbWUgVVNCIGJ1cy4KLQotCi1jb25maWcgRFZCX0NJTkVSR1lUMl9TVFJFQU1fQlVGX1NJWkUKLQlpbnQgIlNpemUgb2YgVVJCIFN0cmVhbSBCdWZmZXJzIGZvciBIaWdoc3BlZWQgVHJhbnNmZXJzIgotCWRlcGVuZHMgb24gRFZCX0NJTkVSR1lUMl9UVU5JTkcKLQlkZWZhdWx0ICI1MTIiCi0JaGVscAotCSAgU2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgbmF0aXZlIGJ1ZmZlciBzaXplIG9mIDUxMiBieXRlcy4KLQkgIERlZmF1bHQgdmFsdWUgaXMgYSBzYWZlIGNob2ljZS4KLQotCSAgWW91IG1heSBpbmNyZWFzZSB0aGlzIG51bWJlciBpZiB5b3UgYXJlIHVzaW5nIHRoaXMgZGV2aWNlIGluIGEKLQkgIFNlcnZlciBFbnZpcm9ubWVudCB3aXRoIG1hbnkgaGlnaC10cmFmZmljIFVTQiBIaWdoc3BlZWQgZGV2aWNlcwotCSAgc2hhcmluZyB0aGUgc2FtZSBVU0IgYnVzLgotCi0KLWNvbmZpZyBEVkJfQ0lORVJHWVQyX1FVRVJZX0lOVEVSVkFMCi0JaW50ICJTdGF0dXMgdXBkYXRlIGludGVydmFsIFttaWxsaXNlY29uZHNdIgotCWRlcGVuZHMgb24gRFZCX0NJTkVSR1lUMl9UVU5JTkcKLQlkZWZhdWx0ICIyNTAiCi0JaGVscAotCSAgVGhpcyBpcyB0aGUgaW50ZXJ2YWwgZm9yIHN0YXR1cyByZWFkb3V0cyBmcm9tIHRoZSBkZW1vZHVsYXRvci4KLQkgIFlvdSBtYXkgdHJ5IGxvd2VyIHZhbHVlcyBpZiB5b3UgbmVlZCBtb3JlIHJlc3BvbnNpdmUgc2lnbmFsIHF1YWxpdHkKLQkgIG1lYXN1cmVtZW50cy4KLQotCSAgUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZXNlIHVwZGF0ZXMgY2F1c2UgdHJhZmZpYyBvbiB0aGUgdHVuZXIKLQkgIGNvbnRyb2wgYnVzIGFuZCB0aHVzIG1heSBvciBtYXkgbm90IGFmZmVjdCByZWNlcHRpb24gc2Vuc2l0aXZpdHkuCi0KLQkgIFRoZSBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSBhIHNhZmUgY2hvaWNlIGZvciBjb21tb24gYXBwbGljYXRpb25zLgotCi0KLWNvbmZpZyBEVkJfQ0lORVJHWVQyX0VOQUJMRV9SQ19JTlBVVF9ERVZJQ0UKLQlib29sICJSZWdpc3RlciB0aGUgb25ib2FyZCBJUiBSZW1vdGUgQ29udHJvbCBSZWNlaXZlciBhcyBJbnB1dCBEZXZpY2UiCi0JZGVwZW5kcyBvbiBEVkJfQ0lORVJHWVQyX1RVTklORwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIG9uYm9hcmQgSW5mcmFyZWQgUmVtb3RlCi0JICBDb250cm9sIFJlY2VpdmVyIGFzIExpbnV4LUlucHV0IGRldmljZS4KLQotCSAgUmlnaHQgbm93IG9ubHkgdGhlIGtleWNvZGUgdGFibGUgZm9yIHRoZSBkZWZhdWx0IFJlbW90ZSBDb250cm9sCi0JICBkZWxpdmVyZWQgd2l0aCB0aGUgZGV2aWNlIGlzIHN1cHBvcnRlZCwgcGxlYXNlIHNlZSB0aGUgZHJpdmVyCi0JICBzb3VyY2UgY29kZSB0byBmaW5kIG91dCBob3cgdG8gYWRkIHN1cHBvcnQgZm9yIG90aGVyIGNvbnRyb2xzLgotCi0KLWNvbmZpZyBEVkJfQ0lORVJHWVQyX1JDX1FVRVJZX0lOVEVSVkFMCi0JaW50ICJJbmZyYXJlZCBSZW1vdGUgQ29udHJvbGxlciB1cGRhdGUgaW50ZXJ2YWwgW21pbGxpc2Vjb25kc10iCi0JZGVwZW5kcyBvbiBEVkJfQ0lORVJHWVQyX1RVTklORyAmJiBEVkJfQ0lORVJHWVQyX0VOQUJMRV9SQ19JTlBVVF9ERVZJQ0UKLQlkZWZhdWx0ICI1MCIKLQloZWxwCi0JICBJZiB5b3UgaGF2ZSBhIHZlcnkgZmFzdC1yZXBlYXRpbmcgcmVtb3RlIGNvbnRyb2wgeW91IGNhbiB0cnkgbG93ZXIKLQkgIHZhbHVlcywgZm9yIG5vcm1hbCBjb25zdW1lciByZWNlaXZlcnMgdGhlIGRlZmF1bHQgdmFsdWUgc2hvdWxkIGJlCi0JICBhIHNhZmUgY2hvaWNlLgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NjJkOGMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1vYmotJChDT05GSUdfRFZCX0NJTkVSR1lUMikgKz0gY2luZXJneVQyLm8KLQotRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MjRmMzcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEwNSArMCwwIEBACi0vKgotICogVGVycmFUZWMgQ2luZXJneSBUwrIvcWFudSBVU0IyIERWQi1UIGFkYXB0ZXIuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IERhbmllbCBNYWNrIDxkYW5pZWxAcWFudS5kZT4gYW5kCi0gKgkJICAgIEhvbGdlciBXYWVjaHRsZXIgPGhvbGdlckBxYW51LmRlPgotICoKLSAqICBQcm90b2NvbCBTcGVjIHB1Ymxpc2hlZCBvbiBodHRwOi8vcWFudS5kZS9zcGVjcy90ZXJyYXRlY19jaW5lcmd5VDIucGRmCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSAiZG14ZGV2LmgiCi0jaW5jbHVkZSAiZHZiX2RlbXV4LmgiCi0jaW5jbHVkZSAiZHZiX25ldC5oIgotCi0jaWZkZWYgQ09ORklHX0RWQl9DSU5FUkdZVDJfVFVOSU5HCi0JI2RlZmluZSBTVFJFQU1fVVJCX0NPVU5UIChDT05GSUdfRFZCX0NJTkVSR1lUMl9TVFJFQU1fVVJCX0NPVU5UKQotCSNkZWZpbmUgU1RSRUFNX0JVRl9TSVpFIChDT05GSUdfRFZCX0NJTkVSR1lUMl9TVFJFQU1fQlVGX1NJWkUpCi0JI2RlZmluZSBRVUVSWV9JTlRFUlZBTCAoQ09ORklHX0RWQl9DSU5FUkdZVDJfUVVFUllfSU5URVJWQUwpCi0JI2lmZGVmIENPTkZJR19EVkJfQ0lORVJHWVQyX0VOQUJMRV9SQ19JTlBVVF9ERVZJQ0UKLQkJI2RlZmluZSBSQ19RVUVSWV9JTlRFUlZBTCAoQ09ORklHX0RWQl9DSU5FUkdZVDJfUkNfUVVFUllfSU5URVJWQUwpCi0JCSNkZWZpbmUgRU5BQkxFX1JDICgxKQotCSNlbmRpZgotI2Vsc2UKLQkjZGVmaW5lIFNUUkVBTV9VUkJfQ09VTlQgKDMyKQotCSNkZWZpbmUgU1RSRUFNX0JVRl9TSVpFICg1MTIpCS8qIGJ5dGVzICovCi0JI2RlZmluZSBFTkFCTEVfUkMgKDEpCi0JI2RlZmluZSBSQ19RVUVSWV9JTlRFUlZBTCAoNTApCS8qIG1pbGxpc2Vjb25kcyAqLwotCSNkZWZpbmUgUVVFUllfSU5URVJWQUwgKDMzMykJLyogbWlsbGlzZWNvbmRzICovCi0jZW5kaWYKLQotI2RlZmluZSBEUklWRVJfTkFNRSAiVGVycmFUZWMvcWFudSBVU0IyLjAgSGlnaHNwZWVkIERWQi1UIFJlY2VpdmVyIgotCi1zdGF0aWMgaW50IGRlYnVnOwotbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKLQotRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7Ci0KLSNkZWZpbmUgZHByaW50ayhsZXZlbCwgYXJncy4uLikJCQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCWlmICgoZGVidWcgJiBsZXZlbCkpIHsJCQkJCQlcCi0JCXByaW50aygiJXM6ICVzKCk6ICIsIEtCVUlMRF9NT0ROQU1FLAkJCVwKLQkJICAgICAgIF9fZnVuY19fKTsJCQkJCVwKLQkJcHJpbnRrKGFyZ3MpOyB9CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotZW51bSBjaW5lcmd5dDJfZXAxX2NtZCB7Ci0JQ0lORVJHWVQyX0VQMV9QSURfVEFCTEVfUkVTRVQJCT0gMHgwMSwKLQlDSU5FUkdZVDJfRVAxX1BJRF9TRVRVUAkJCT0gMHgwMiwKLQlDSU5FUkdZVDJfRVAxX0NPTlRST0xfU1RSRUFNX1RSQU5TRkVSCT0gMHgwMywKLQlDSU5FUkdZVDJfRVAxX1NFVF9UVU5FUl9QQVJBTUVURVJTCT0gMHgwNCwKLQlDSU5FUkdZVDJfRVAxX0dFVF9UVU5FUl9TVEFUVVMJCT0gMHgwNSwKLQlDSU5FUkdZVDJfRVAxX1NUQVJUX1NDQU4JCT0gMHgwNiwKLQlDSU5FUkdZVDJfRVAxX0NPTlRJTlVFX1NDQU4JCT0gMHgwNywKLQlDSU5FUkdZVDJfRVAxX0dFVF9SQ19FVkVOVFMJCT0gMHgwOCwKLQlDSU5FUkdZVDJfRVAxX1NMRUVQX01PREUJCT0gMHgwOQotfTsKLQotc3RydWN0IGR2YnRfc2V0X3BhcmFtZXRlcnNfbXNnIHsKLQl1aW50OF90IGNtZDsKLQlfX2xlMzIgZnJlcTsKLQl1aW50OF90IGJhbmR3aWR0aDsKLQlfX2xlMTYgdHBzOwotCXVpbnQ4X3QgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3QgZHZidF9nZXRfc3RhdHVzX21zZyB7Ci0JX19sZTMyIGZyZXE7Ci0JdWludDhfdCBiYW5kd2lkdGg7Ci0JX19sZTE2IHRwczsKLQl1aW50OF90IGZsYWdzOwotCV9fbGUxNiBnYWluOwotCXVpbnQ4X3Qgc25yOwotCV9fbGUzMiB2aXRlcmJpX2Vycm9yX3JhdGU7Ci0JX19sZTMyIHJzX2Vycm9yX3JhdGU7Ci0JX19sZTMyIHVuY29ycmVjdGVkX2Jsb2NrX2NvdW50OwotCXVpbnQ4X3QgbG9ja19iaXRzOwotCXVpbnQ4X3QgcHJldl9sb2NrX2JpdHM7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9pbmZvIGNpbmVyZ3l0Ml9mZV9pbmZvID0gewotCS5uYW1lID0gRFJJVkVSX05BTUUsCi0JLnR5cGUgPSBGRV9PRkRNLAotCS5mcmVxdWVuY3lfbWluID0gMTc0MDAwMDAwLAotCS5mcmVxdWVuY3lfbWF4ID0gODYyMDAwMDAwLAotCS5mcmVxdWVuY3lfc3RlcHNpemUgPSAxNjY2NjcsCi0JLmNhcHMgPSBGRV9DQU5fSU5WRVJTSU9OX0FVVE8gfCBGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwKLQkJRkVfQ0FOX0ZFQ18zXzQgfCBGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfN184IHwKLQkJRkVfQ0FOX0ZFQ19BVVRPIHwKLQkJRkVfQ0FOX1FQU0sgfCBGRV9DQU5fUUFNXzE2IHwgRkVfQ0FOX1FBTV82NCB8IEZFX0NBTl9RQU1fQVVUTyB8Ci0JCUZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPIHwgRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfAotCQlGRV9DQU5fSElFUkFSQ0hZX0FVVE8gfCBGRV9DQU5fUkVDT1ZFUiB8IEZFX0NBTl9NVVRFX1RTCi19OwotCi1zdHJ1Y3QgY2luZXJneXQyIHsKLQlzdHJ1Y3QgZHZiX2RlbXV4IGRlbXV4OwotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXN0cnVjdCBtdXRleCBzZW07Ci0Jc3RydWN0IG11dGV4IHdxX3NlbTsKLQlzdHJ1Y3QgZHZiX2FkYXB0ZXIgYWRhcHRlcjsKLQlzdHJ1Y3QgZHZiX2RldmljZSAqZmVkZXY7Ci0Jc3RydWN0IGRteGRldiBkbXhkZXY7Ci0Jc3RydWN0IGR2Yl9uZXQgZHZibmV0OwotCi0JaW50IHN0cmVhbWluZzsKLQlpbnQgc2xlZXBpbmc7Ci0KLQlzdHJ1Y3QgZHZidF9zZXRfcGFyYW1ldGVyc19tc2cgcGFyYW07Ci0Jc3RydWN0IGR2YnRfZ2V0X3N0YXR1c19tc2cgc3RhdHVzOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgcXVlcnlfd29yazsKLQotCXdhaXRfcXVldWVfaGVhZF90IHBvbGxfd3E7Ci0JaW50IHBlbmRpbmdfZmVfZXZlbnRzOwotCWludCBkaXNjb25uZWN0X3BlbmRpbmc7Ci0JdW5zaWduZWQgaW50IHVuY29ycmVjdGVkX2Jsb2NrX2NvdW50OwotCWF0b21pY190IGludXNlOwotCi0Jdm9pZCAqc3RyZWFtYnVmOwotCWRtYV9hZGRyX3Qgc3RyZWFtYnVmX2RtYWhhbmRsZTsKLQlzdHJ1Y3QgdXJiICpzdHJlYW1fdXJiIFtTVFJFQU1fVVJCX0NPVU5UXTsKLQotI2lmZGVmIEVOQUJMRV9SQwotCXN0cnVjdCBpbnB1dF9kZXYgKnJjX2lucHV0X2RldjsKLQljaGFyIHBoeXNbNjRdOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgcmNfcXVlcnlfd29yazsKLQlpbnQgcmNfaW5wdXRfZXZlbnQ7Ci0JX19sZTMyIHJjX2xhc3RfY29kZTsKLQl1bnNpZ25lZCBsb25nIGxhc3RfZXZlbnRfamlmZmllczsKLSNlbmRpZgotfTsKLQotZW51bSB7Ci0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTk9ORSA9IDB4MDAsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDICA9IDB4MDEsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfUkM1ICA9IDB4MDIKLX07Ci0KLXN0cnVjdCBjaW5lcmd5dDJfcmNfZXZlbnQgewotCWNoYXIgdHlwZTsKLQlfX2xlMzIgdmFsdWU7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdGF0aWMgY29uc3QgdWludDMyX3QgcmNfa2V5c1tdID0gewotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhmZTAxZWIwNCwJS0VZX1BPV0VSLAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhmZDAyZWIwNCwJS0VZXzEsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGZjMDNlYjA0LAlLRVlfMiwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZmIwNGViMDQsCUtFWV8zLAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhmYTA1ZWIwNCwJS0VZXzQsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGY5MDZlYjA0LAlLRVlfNSwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZjgwN2ViMDQsCUtFWV82LAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhmNzA4ZWIwNCwJS0VZXzcsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGY2MDllYjA0LAlLRVlfOCwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZjUwYWViMDQsCUtFWV85LAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhmMzBjZWIwNCwJS0VZXzAsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGY0MGJlYjA0LAlLRVlfVklERU8sCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGYyMGRlYjA0LAlLRVlfUkVGUkVTSCwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZjEwZWViMDQsCUtFWV9TRUxFQ1QsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGYwMGZlYjA0LAlLRVlfRVBHLAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhlZjEwZWIwNCwJS0VZX1VQLAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhlYjE0ZWIwNCwJS0VZX0RPV04sCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGVlMTFlYjA0LAlLRVlfTEVGVCwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZWMxM2ViMDQsCUtFWV9SSUdIVCwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZWQxMmViMDQsCUtFWV9PSywKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZWExNWViMDQsCUtFWV9URVhULAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhlOTE2ZWIwNCwJS0VZX0lORk8sCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGU4MTdlYjA0LAlLRVlfUkVELAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhlNzE4ZWIwNCwJS0VZX0dSRUVOLAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhlNjE5ZWIwNCwJS0VZX1lFTExPVywKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZTUxYWViMDQsCUtFWV9CTFVFLAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhlMzFjZWIwNCwJS0VZX1ZPTFVNRVVQLAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhlMTFlZWIwNCwJS0VZX1ZPTFVNRURPV04sCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGUyMWRlYjA0LAlLRVlfTVVURSwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZTQxYmViMDQsCUtFWV9DSEFOTkVMVVAsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGUwMWZlYjA0LAlLRVlfQ0hBTk5FTERPV04sCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGJmNDBlYjA0LAlLRVlfUEFVU0UsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGIzNGNlYjA0LAlLRVlfUExBWSwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4YTc1OGViMDQsCUtFWV9SRUNPUkQsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGFiNTRlYjA0LAlLRVlfUFJFVklPVVMsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGI3NDhlYjA0LAlLRVlfU1RPUCwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4YTM1Y2ViMDQsCUtFWV9ORVhUCi19OwotCi1zdGF0aWMgaW50IGNpbmVyZ3l0Ml9jb21tYW5kIChzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIsCi0JCQkgICAgICBjaGFyICpzZW5kX2J1ZiwgaW50IHNlbmRfYnVmX2xlbiwKLQkJCSAgICAgIGNoYXIgKnJlY3ZfYnVmLCBpbnQgcmVjdl9idWZfbGVuKQotewotCWludCBhY3R1YWxfbGVuOwotCWNoYXIgZHVtbXk7Ci0JaW50IHJldDsKLQotCXJldCA9IHVzYl9idWxrX21zZyhjaW5lcmd5dDItPnVkZXYsIHVzYl9zbmRidWxrcGlwZShjaW5lcmd5dDItPnVkZXYsIDEpLAotCQkJICAgc2VuZF9idWYsIHNlbmRfYnVmX2xlbiwgJmFjdHVhbF9sZW4sIDEwMDApOwotCi0JaWYgKHJldCkKLQkJZHByaW50aygxLCAidXNiX2J1bGtfbXNnIChzZW5kKSBmYWlsZWQsIGVyciAlaVxuIiwgcmV0KTsKLQotCWlmICghcmVjdl9idWYpCi0JCXJlY3ZfYnVmID0gJmR1bW15OwotCi0JcmV0ID0gdXNiX2J1bGtfbXNnKGNpbmVyZ3l0Mi0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGNpbmVyZ3l0Mi0+dWRldiwgMSksCi0JCQkgICByZWN2X2J1ZiwgcmVjdl9idWZfbGVuLCAmYWN0dWFsX2xlbiwgMTAwMCk7Ci0KLQlpZiAocmV0KQotCQlkcHJpbnRrKDEsICJ1c2JfYnVsa19tc2cgKHJlYWQpIGZhaWxlZCwgZXJyICVpXG4iLCByZXQpOwotCi0JcmV0dXJuIHJldCA/IHJldCA6IGFjdHVhbF9sZW47Ci19Ci0KLXN0YXRpYyB2b2lkIGNpbmVyZ3l0Ml9jb250cm9sX3N0cmVhbV90cmFuc2ZlciAoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyLCBpbnQgZW5hYmxlKQotewotCWNoYXIgYnVmIFtdID0geyBDSU5FUkdZVDJfRVAxX0NPTlRST0xfU1RSRUFNX1RSQU5TRkVSLCBlbmFibGUgPyAxIDogMCB9OwotCWNpbmVyZ3l0Ml9jb21tYW5kKGNpbmVyZ3l0MiwgYnVmLCBzaXplb2YoYnVmKSwgTlVMTCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNpbmVyZ3l0Ml9zbGVlcCAoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyLCBpbnQgc2xlZXApCi17Ci0JY2hhciBidWYgW10gPSB7IENJTkVSR1lUMl9FUDFfU0xFRVBfTU9ERSwgc2xlZXAgPyAxIDogMCB9OwotCWNpbmVyZ3l0Ml9jb21tYW5kKGNpbmVyZ3l0MiwgYnVmLCBzaXplb2YoYnVmKSwgTlVMTCwgMCk7Ci0JY2luZXJneXQyLT5zbGVlcGluZyA9IHNsZWVwOwotfQotCi1zdGF0aWMgdm9pZCBjaW5lcmd5dDJfc3RyZWFtX2lycSAoc3RydWN0IHVyYiAqdXJiKTsKLQotc3RhdGljIGludCBjaW5lcmd5dDJfc3VibWl0X3N0cmVhbV91cmIgKHN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0Miwgc3RydWN0IHVyYiAqdXJiKQotewotCWludCBlcnI7Ci0KLQl1c2JfZmlsbF9idWxrX3VyYih1cmIsCi0JCQkgIGNpbmVyZ3l0Mi0+dWRldiwKLQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGNpbmVyZ3l0Mi0+dWRldiwgMHgyKSwKLQkJCSAgdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQkgIFNUUkVBTV9CVUZfU0laRSwKLQkJCSAgY2luZXJneXQyX3N0cmVhbV9pcnEsCi0JCQkgIGNpbmVyZ3l0Mik7Ci0KLQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpKQotCQlkcHJpbnRrKDEsICJ1cmIgc3VibWlzc2lvbiBmYWlsZWQgKGVyciA9ICVpKSFcbiIsIGVycik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBjaW5lcmd5dDJfc3RyZWFtX2lycSAoc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MiA9IHVyYi0+Y29udGV4dDsKLQotCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKQotCQlkdmJfZG14X3N3ZmlsdGVyKCZjaW5lcmd5dDItPmRlbXV4LAotCQkJCSB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQotCWlmIChjaW5lcmd5dDItPnN0cmVhbWluZykKLQkJY2luZXJneXQyX3N1Ym1pdF9zdHJlYW1fdXJiKGNpbmVyZ3l0MiwgdXJiKTsKLX0KLQotc3RhdGljIHZvaWQgY2luZXJneXQyX2ZyZWVfc3RyZWFtX3VyYnMgKHN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MikKLXsKLQlpbnQgaTsKLQotCWZvciAoaT0wOyBpPFNUUkVBTV9VUkJfQ09VTlQ7IGkrKykKLQkJdXNiX2ZyZWVfdXJiKGNpbmVyZ3l0Mi0+c3RyZWFtX3VyYltpXSk7Ci0KLQl1c2JfYnVmZmVyX2ZyZWUoY2luZXJneXQyLT51ZGV2LCBTVFJFQU1fVVJCX0NPVU5UKlNUUkVBTV9CVUZfU0laRSwKLQkJCSAgICBjaW5lcmd5dDItPnN0cmVhbWJ1ZiwgY2luZXJneXQyLT5zdHJlYW1idWZfZG1haGFuZGxlKTsKLX0KLQotc3RhdGljIGludCBjaW5lcmd5dDJfYWxsb2Nfc3RyZWFtX3VyYnMgKHN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MikKLXsKLQlpbnQgaTsKLQotCWNpbmVyZ3l0Mi0+c3RyZWFtYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhjaW5lcmd5dDItPnVkZXYsIFNUUkVBTV9VUkJfQ09VTlQqU1RSRUFNX0JVRl9TSVpFLAotCQkJCQkgICAgICBHRlBfS0VSTkVMLCAmY2luZXJneXQyLT5zdHJlYW1idWZfZG1haGFuZGxlKTsKLQlpZiAoIWNpbmVyZ3l0Mi0+c3RyZWFtYnVmKSB7Ci0JCWRwcmludGsoMSwgImZhaWxlZCB0byBhbGxvYyBjb25zaXN0ZW50IHN0cmVhbSBtZW1vcnkgYXJlYSwgYmFpbGluZyBvdXQhXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbWVtc2V0KGNpbmVyZ3l0Mi0+c3RyZWFtYnVmLCAwLCBTVFJFQU1fVVJCX0NPVU5UKlNUUkVBTV9CVUZfU0laRSk7Ci0KLQlmb3IgKGk9MDsgaTxTVFJFQU1fVVJCX0NPVU5UOyBpKyspIHsKLQkJc3RydWN0IHVyYiAqdXJiOwotCi0JCWlmICghKHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQykpKSB7Ci0JCQlkcHJpbnRrKDEsICJmYWlsZWQgdG8gYWxsb2MgY29uc2lzdGVudCBzdHJlYW0gdXJicywgYmFpbGluZyBvdXQhXG4iKTsKLQkJCWNpbmVyZ3l0Ml9mcmVlX3N0cmVhbV91cmJzKGNpbmVyZ3l0Mik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gY2luZXJneXQyLT5zdHJlYW1idWYgKyBpICogU1RSRUFNX0JVRl9TSVpFOwotCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBTVFJFQU1fQlVGX1NJWkU7Ci0KLQkJY2luZXJneXQyLT5zdHJlYW1fdXJiW2ldID0gdXJiOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjaW5lcmd5dDJfc3RvcF9zdHJlYW1feGZlciAoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyKQotewotCWludCBpOwotCi0JY2luZXJneXQyX2NvbnRyb2xfc3RyZWFtX3RyYW5zZmVyKGNpbmVyZ3l0MiwgMCk7Ci0KLQlmb3IgKGk9MDsgaTxTVFJFQU1fVVJCX0NPVU5UOyBpKyspCi0JCXVzYl9raWxsX3VyYihjaW5lcmd5dDItPnN0cmVhbV91cmJbaV0pOwotfQotCi1zdGF0aWMgaW50IGNpbmVyZ3l0Ml9zdGFydF9zdHJlYW1feGZlciAoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyKQotewotCWludCBpLCBlcnI7Ci0KLQlmb3IgKGk9MDsgaTxTVFJFQU1fVVJCX0NPVU5UOyBpKyspIHsKLQkJaWYgKChlcnIgPSBjaW5lcmd5dDJfc3VibWl0X3N0cmVhbV91cmIoY2luZXJneXQyLCBjaW5lcmd5dDItPnN0cmVhbV91cmJbaV0pKSkgewotCQkJY2luZXJneXQyX3N0b3Bfc3RyZWFtX3hmZXIoY2luZXJneXQyKTsKLQkJCWRwcmludGsoMSwgImZhaWxlZCB1cmIgc3VibWlzc2lvbiAoJWk6IGVyciA9ICVpKSFcbiIsIGksIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JY2luZXJneXQyX2NvbnRyb2xfc3RyZWFtX3RyYW5zZmVyKGNpbmVyZ3l0MiwgMSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2luZXJneXQyX3N0YXJ0X2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQotewotCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gZHZiZG14ZmVlZC0+ZGVtdXg7Ci0Jc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyID0gZGVtdXgtPnByaXY7Ci0KLQlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcpCi0JCXJldHVybiAtRUFHQUlOOwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQotCWlmIChjaW5lcmd5dDItPnN0cmVhbWluZyA9PSAwKQotCQljaW5lcmd5dDJfc3RhcnRfc3RyZWFtX3hmZXIoY2luZXJneXQyKTsKLQotCWNpbmVyZ3l0Mi0+c3RyZWFtaW5nKys7Ci0JbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPnNlbSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2luZXJneXQyX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCi17Ci0Jc3RydWN0IGR2Yl9kZW11eCAqZGVtdXggPSBkdmJkbXhmZWVkLT5kZW11eDsKLQlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPSBkZW11eC0+cHJpdjsKLQotCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZykKLQkJcmV0dXJuIC1FQUdBSU47Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCi0JaWYgKC0tY2luZXJneXQyLT5zdHJlYW1pbmcgPT0gMCkKLQkJY2luZXJneXQyX3N0b3Bfc3RyZWFtX3hmZXIoY2luZXJneXQyKTsKLQotCW11dGV4X3VubG9jaygmY2luZXJneXQyLT5zZW0pOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqICBjb252ZXJ0IGxpbnV4LWR2YiBmcm9udGVuZCBwYXJhbWV0ZXIgc2V0IGludG8gVFBTLgotICogIFNlZSBFVFNJIEVUUy0zMDA3NDQsIHNlY3Rpb24gNC42LjIsIHRhYmxlIDkgZm9yIGRldGFpbHMuCi0gKgotICogIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgcmV1c2FibGUgYW5kIG1heSBiZXR0ZXIgZ2V0IHBsYWNlZCBpbiBhIHN1cHBvcnQKLSAqICBsaWJyYXJ5LgotICoKLSAqICBXZSByZXBsYWNlIGVycm9ybm91cyBmaWVsZHMgYnkgZGVmYXVsdCBUUFMgZmllbGRzICh0aGUgb25lcyB3aXRoIHZhbHVlIDApLgotICovCi1zdGF0aWMgdWludDE2X3QgY29tcHV0ZV90cHMgKHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKLXsKLQlzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyAqb3AgPSAmcC0+dS5vZmRtOwotCXVpbnQxNl90IHRwcyA9IDA7Ci0KLQlzd2l0Y2ggKG9wLT5jb2RlX3JhdGVfSFApIHsKLQkJY2FzZSBGRUNfMl8zOgotCQkJdHBzIHw9ICgxIDw8IDcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRkVDXzNfNDoKLQkJCXRwcyB8PSAoMiA8PCA3KTsKLQkJCWJyZWFrOwotCQljYXNlIEZFQ181XzY6Ci0JCQl0cHMgfD0gKDMgPDwgNyk7Ci0JCQlicmVhazsKLQkJY2FzZSBGRUNfN184OgotCQkJdHBzIHw9ICg0IDw8IDcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRkVDXzFfMjoKLQkJY2FzZSBGRUNfQVVUTzoKLQkJZGVmYXVsdDoKLQkJCS8qIHRwcyB8PSAoMCA8PCA3KSAqLzsKLQl9Ci0KLQlzd2l0Y2ggKG9wLT5jb2RlX3JhdGVfTFApIHsKLQkJY2FzZSBGRUNfMl8zOgotCQkJdHBzIHw9ICgxIDw8IDQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRkVDXzNfNDoKLQkJCXRwcyB8PSAoMiA8PCA0KTsKLQkJCWJyZWFrOwotCQljYXNlIEZFQ181XzY6Ci0JCQl0cHMgfD0gKDMgPDwgNCk7Ci0JCQlicmVhazsKLQkJY2FzZSBGRUNfN184OgotCQkJdHBzIHw9ICg0IDw8IDQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRkVDXzFfMjoKLQkJY2FzZSBGRUNfQVVUTzoKLQkJZGVmYXVsdDoKLQkJCS8qIHRwcyB8PSAoMCA8PCA0KSAqLzsKLQl9Ci0KLQlzd2l0Y2ggKG9wLT5jb25zdGVsbGF0aW9uKSB7Ci0JCWNhc2UgUUFNXzE2OgotCQkJdHBzIHw9ICgxIDw8IDEzKTsKLQkJCWJyZWFrOwotCQljYXNlIFFBTV82NDoKLQkJCXRwcyB8PSAoMiA8PCAxMyk7Ci0JCQlicmVhazsKLQkJY2FzZSBRUFNLOgotCQlkZWZhdWx0OgotCQkJLyogdHBzIHw9ICgwIDw8IDEzKSAqLzsKLQl9Ci0KLQlzd2l0Y2ggKG9wLT50cmFuc21pc3Npb25fbW9kZSkgewotCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOgotCQkJdHBzIHw9ICgxIDw8IDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6Ci0JCWRlZmF1bHQ6Ci0JCQkvKiB0cHMgfD0gKDAgPDwgMCkgKi87Ci0JfQotCi0Jc3dpdGNoIChvcC0+Z3VhcmRfaW50ZXJ2YWwpIHsKLQkJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzE2OgotCQkJdHBzIHw9ICgxIDw8IDIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgR1VBUkRfSU5URVJWQUxfMV84OgotCQkJdHBzIHw9ICgyIDw8IDIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgR1VBUkRfSU5URVJWQUxfMV80OgotCQkJdHBzIHw9ICgzIDw8IDIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8zMjoKLQkJZGVmYXVsdDoKLQkJCS8qIHRwcyB8PSAoMCA8PCAyKSAqLzsKLQl9Ci0KLQlzd2l0Y2ggKG9wLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24pIHsKLQkJY2FzZSBISUVSQVJDSFlfMToKLQkJCXRwcyB8PSAoMSA8PCAxMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBISUVSQVJDSFlfMjoKLQkJCXRwcyB8PSAoMiA8PCAxMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBISUVSQVJDSFlfNDoKLQkJCXRwcyB8PSAoMyA8PCAxMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBISUVSQVJDSFlfTk9ORToKLQkJZGVmYXVsdDoKLQkJCS8qIHRwcyB8PSAoMCA8PCAxMCkgKi87Ci0JfQotCi0JcmV0dXJuIHRwczsKLX0KLQotc3RhdGljIGludCBjaW5lcmd5dDJfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPSBkdmJkZXYtPnByaXY7Ci0JaW50IGVyciA9IC1FQUdBSU47Ci0KLQlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcpCi0JCWdvdG8gb3V0OwotCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT53cV9zZW0pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfdW5sb2NrMTsKLQotCWlmICgoZXJyID0gZHZiX2dlbmVyaWNfb3Blbihpbm9kZSwgZmlsZSkpKQotCQlnb3RvIG91dF91bmxvY2syOwotCi0JaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSAhPSBPX1JET05MWSkgewotCQljaW5lcmd5dDJfc2xlZXAoY2luZXJneXQyLCAwKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaW5lcmd5dDItPnF1ZXJ5X3dvcmssIEhaLzIpOwotCX0KLQotCWF0b21pY19pbmMoJmNpbmVyZ3l0Mi0+aW51c2UpOwotCi1vdXRfdW5sb2NrMjoKLQltdXRleF91bmxvY2soJmNpbmVyZ3l0Mi0+c2VtKTsKLW91dF91bmxvY2sxOgotCW11dGV4X3VubG9jaygmY2luZXJneXQyLT53cV9zZW0pOwotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGNpbmVyZ3l0Ml91bnJlZ2lzdGVyKHN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MikKLXsKLQlkdmJfbmV0X3JlbGVhc2UoJmNpbmVyZ3l0Mi0+ZHZibmV0KTsKLQlkdmJfZG14ZGV2X3JlbGVhc2UoJmNpbmVyZ3l0Mi0+ZG14ZGV2KTsKLQlkdmJfZG14X3JlbGVhc2UoJmNpbmVyZ3l0Mi0+ZGVtdXgpOwotCWR2Yl91bnJlZ2lzdGVyX2RldmljZShjaW5lcmd5dDItPmZlZGV2KTsKLQlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZjaW5lcmd5dDItPmFkYXB0ZXIpOwotCi0JY2luZXJneXQyX2ZyZWVfc3RyZWFtX3VyYnMoY2luZXJneXQyKTsKLQlrZnJlZShjaW5lcmd5dDIpOwotfQotCi1zdGF0aWMgaW50IGNpbmVyZ3l0Ml9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MiA9IGR2YmRldi0+cHJpdjsKLQotCW11dGV4X2xvY2soJmNpbmVyZ3l0Mi0+d3Ffc2VtKTsKLQotCWlmICghY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcgJiYgKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpICE9IE9fUkRPTkxZKSB7Ci0JCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJmNpbmVyZ3l0Mi0+cXVlcnlfd29yayk7Ci0KLQkJbXV0ZXhfbG9jaygmY2luZXJneXQyLT5zZW0pOwotCQljaW5lcmd5dDJfc2xlZXAoY2luZXJneXQyLCAxKTsKLQkJbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPnNlbSk7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPndxX3NlbSk7Ci0KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2luZXJneXQyLT5pbnVzZSkgJiYgY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcpIHsKLQkJd2FybigiZGVsYXllZCB1bnJlZ2lzdGVyIGluIHJlbGVhc2UiKTsKLQkJY2luZXJneXQyX3VucmVnaXN0ZXIoY2luZXJneXQyKTsKLQl9Ci0KLQlyZXR1cm4gZHZiX2dlbmVyaWNfcmVsZWFzZShpbm9kZSwgZmlsZSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgY2luZXJneXQyX3BvbGwgKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPSBkdmJkZXYtPnByaXY7Ci0JdW5zaWduZWQgaW50IG1hc2sgPSAwOwotCi0JaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nKQotCQlyZXR1cm4gLUVBR0FJTjsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlwb2xsX3dhaXQoZmlsZSwgJmNpbmVyZ3l0Mi0+cG9sbF93cSwgd2FpdCk7Ci0KLQlpZiAoY2luZXJneXQyLT5wZW5kaW5nX2ZlX2V2ZW50cyAhPSAwKQotCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTFBSSSk7Ci0KLQltdXRleF91bmxvY2soJmNpbmVyZ3l0Mi0+c2VtKTsKLQotCXJldHVybiBtYXNrOwotfQotCi0KLXN0YXRpYyBpbnQgY2luZXJneXQyX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyID0gZHZiZGV2LT5wcml2OwotCXN0cnVjdCBkdmJ0X2dldF9zdGF0dXNfbXNnICpzdGF0ID0gJmNpbmVyZ3l0Mi0+c3RhdHVzOwotCWZlX3N0YXR1c190IHN0YXR1cyA9IDA7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgRkVfR0VUX0lORk86Ci0JCXJldHVybiBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyKikgYXJnLCAmY2luZXJneXQyX2ZlX2luZm8sCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX2luZm8pKTsKLQotCWNhc2UgRkVfUkVBRF9TVEFUVVM6Ci0JCWlmICgweGZmZmYgLSBsZTE2X3RvX2NwdShzdGF0LT5nYWluKSA+IDMwKQotCQkJc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7Ci0JCWlmIChzdGF0LT5sb2NrX2JpdHMgJiAoMSA8PCA2KSkKLQkJCXN0YXR1cyB8PSBGRV9IQVNfTE9DSzsKLQkJaWYgKHN0YXQtPmxvY2tfYml0cyAmICgxIDw8IDUpKQotCQkJc3RhdHVzIHw9IEZFX0hBU19TWU5DOwotCQlpZiAoc3RhdC0+bG9ja19iaXRzICYgKDEgPDwgNCkpCi0JCQlzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7Ci0JCWlmIChzdGF0LT5sb2NrX2JpdHMgJiAoMSA8PCAxKSkKLQkJCXN0YXR1cyB8PSBGRV9IQVNfVklURVJCSTsKLQotCQlyZXR1cm4gY29weV90b191c2VyKCh2b2lkICBfX3VzZXIqKSBhcmcsICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKLQotCWNhc2UgRkVfUkVBRF9CRVI6Ci0JCXJldHVybiBwdXRfdXNlcihsZTMyX3RvX2NwdShzdGF0LT52aXRlcmJpX2Vycm9yX3JhdGUpLAotCQkJCShfX3UzMiBfX3VzZXIgKikgYXJnKTsKLQotCWNhc2UgRkVfUkVBRF9TSUdOQUxfU1RSRU5HVEg6Ci0JCXJldHVybiBwdXRfdXNlcigweGZmZmYgLSBsZTE2X3RvX2NwdShzdGF0LT5nYWluKSwKLQkJCQkoX191MTYgX191c2VyICopIGFyZyk7Ci0KLQljYXNlIEZFX1JFQURfU05SOgotCQlyZXR1cm4gcHV0X3VzZXIoKHN0YXQtPnNuciA8PCA4KSB8IHN0YXQtPnNuciwKLQkJCQkoX191MTYgX191c2VyICopIGFyZyk7Ci0KLQljYXNlIEZFX1JFQURfVU5DT1JSRUNURURfQkxPQ0tTOgotCXsKLQkJdWludDMyX3QgdW5jX2NvdW50OwotCi0JCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKLQkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCXVuY19jb3VudCA9IGNpbmVyZ3l0Mi0+dW5jb3JyZWN0ZWRfYmxvY2tfY291bnQ7Ci0JCWNpbmVyZ3l0Mi0+dW5jb3JyZWN0ZWRfYmxvY2tfY291bnQgPSAwOwotCQltdXRleF91bmxvY2soJmNpbmVyZ3l0Mi0+c2VtKTsKLQotCQkvKiBVTkMgYXJlIGFscmVhZHkgY29udmVydGVkIHRvIGhvc3QgYnl0ZSBvcmRlci4uLiAqLwotCQlyZXR1cm4gcHV0X3VzZXIodW5jX2NvdW50LChfX3UzMiBfX3VzZXIgKikgYXJnKTsKLQl9Ci0JY2FzZSBGRV9TRVRfRlJPTlRFTkQ6Ci0JewotCQlzdHJ1Y3QgZHZidF9zZXRfcGFyYW1ldGVyc19tc2cgKnBhcmFtID0gJmNpbmVyZ3l0Mi0+cGFyYW07Ci0JCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyBwOwotCQlpbnQgZXJyOwotCi0JCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRE9OTFkpCi0JCQlyZXR1cm4gLUVQRVJNOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcigmcCwgKHZvaWQgIF9fdXNlciopIGFyZywgc2l6ZW9mKHApKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZykKLQkJCXJldHVybiAtRUFHQUlOOwotCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCi0JCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCi0JCXBhcmFtLT5jbWQgPSBDSU5FUkdZVDJfRVAxX1NFVF9UVU5FUl9QQVJBTUVURVJTOwotCQlwYXJhbS0+dHBzID0gY3B1X3RvX2xlMTYoY29tcHV0ZV90cHMoJnApKTsKLQkJcGFyYW0tPmZyZXEgPSBjcHVfdG9fbGUzMihwLmZyZXF1ZW5jeSAvIDEwMDApOwotCQlwYXJhbS0+YmFuZHdpZHRoID0gOCAtIHAudS5vZmRtLmJhbmR3aWR0aCAtIEJBTkRXSURUSF84X01IWjsKLQotCQlzdGF0LT5sb2NrX2JpdHMgPSAwOwotCQljaW5lcmd5dDItPnBlbmRpbmdfZmVfZXZlbnRzKys7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5wb2xsX3dxKTsKLQotCQllcnIgPSBjaW5lcmd5dDJfY29tbWFuZChjaW5lcmd5dDIsCi0JCQkJCShjaGFyICopIHBhcmFtLCBzaXplb2YoKnBhcmFtKSwKLQkJCQkJTlVMTCwgMCk7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPnNlbSk7Ci0KLQkJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Ci0JfQotCi0JY2FzZSBGRV9HRVRfRlJPTlRFTkQ6Ci0JCS8qKgotCQkgKiAgdHJpdmlhbCB0byBpbXBsZW1lbnQgKHNlZSBzdHJ1Y3QgZHZidF9nZXRfc3RhdHVzX21zZykuCi0JCSAqICBlcXVpdmFsZW50IHRvIEZFX1JFQUQgaW9jdGxzLCBidXQgbmVlZHMKLQkJICogIFRQUyAtPiBsaW51eC1kdmIgcGFyYW1ldGVyIHNldCBjb252ZXJzaW9uLiBGZWVsIGZyZWUKLQkJICogIHRvIGltcGxlbWVudCB0aGlzIGFuZCBzZW5kIHVzIGEgcGF0Y2ggaWYgeW91IG5lZWQgdGhpcwotCQkgKiAgZnVuY3Rpb25hbGl0eS4KLQkJICovCi0JCWJyZWFrOwotCi0JY2FzZSBGRV9HRVRfRVZFTlQ6Ci0JewotCQkvKioKLQkJICogIGZvciBub3cgd2Ugb25seSBmaWxsIHRoZSBzdGF0dXMgZmllbGQuIHRoZSBwYXJhbWV0ZXJzCi0JCSAqICBhcmUgdHJpdmlhbCB0byBmaWxsIGFzIHNvb24gRkVfR0VUX0ZST05URU5EIGlzIGRvbmUuCi0JCSAqLwotCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX2V2ZW50IF9fdXNlciAqZSA9ICh2b2lkIF9fdXNlciAqKSBhcmc7Ci0JCWlmIChjaW5lcmd5dDItPnBlbmRpbmdfZmVfZXZlbnRzID09IDApIHsKLQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKLQkJCQlyZXR1cm4gLUVXT1VMREJMT0NLOwotCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNpbmVyZ3l0Mi0+cG9sbF93cSwKLQkJCQkJCSBjaW5lcmd5dDItPnBlbmRpbmdfZmVfZXZlbnRzID4gMCk7Ci0JCX0KLQkJY2luZXJneXQyLT5wZW5kaW5nX2ZlX2V2ZW50cyA9IDA7Ci0JCXJldHVybiBjaW5lcmd5dDJfaW9jdGwoaW5vZGUsIGZpbGUsIEZFX1JFQURfU1RBVFVTLAotCQkJCQkodW5zaWduZWQgbG9uZykgJmUtPnN0YXR1cyk7Ci0JfQotCi0JZGVmYXVsdDoKLQkJOwotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGNpbmVyZ3l0Ml9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MiA9IGR2YmRldi0+cHJpdjsKLQlpbnQgcmV0ID0gMDsKLQotCWxvY2tfa2VybmVsKCk7Ci0KLQlpZiAodm1hLT52bV9mbGFncyAmIChWTV9XUklURSB8IFZNX0VYRUMpKSB7Ci0JCXJldCA9IC1FUEVSTTsKLQkJZ290byBiYWlsb3V0OwotCX0KLQotCWlmICh2bWEtPnZtX2VuZCA+IHZtYS0+dm1fc3RhcnQgKyBTVFJFQU1fVVJCX0NPVU5UICogU1RSRUFNX0JVRl9TSVpFKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFpbG91dDsKLQl9Ci0KLQl2bWEtPnZtX2ZsYWdzIHw9IChWTV9JTyB8IFZNX0RPTlRDT1BZKTsKLQl2bWEtPnZtX2ZpbGUgPSBmaWxlOwotCi0JcmV0ID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwKLQkJCSAgICAgIHZpcnRfdG9fcGh5cyhjaW5lcmd5dDItPnN0cmVhbWJ1ZikgPj4gUEFHRV9TSElGVCwKLQkJCSAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKLQkJCSAgICAgIHZtYS0+dm1fcGFnZV9wcm90KSA/IC1FQUdBSU4gOiAwOwotYmFpbG91dDoKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2luZXJneXQyX2ZvcHMgPSB7Ci0JLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JLmlvY3RsCQk9IGNpbmVyZ3l0Ml9pb2N0bCwKLQkucG9sbCAgICAgICAgICAgPSBjaW5lcmd5dDJfcG9sbCwKLQkub3BlbiAgICAgICAgICAgPSBjaW5lcmd5dDJfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBjaW5lcmd5dDJfcmVsZWFzZSwKLQkubW1hcAkJPSBjaW5lcmd5dDJfbW1hcAotfTsKLQotc3RhdGljIHN0cnVjdCBkdmJfZGV2aWNlIGNpbmVyZ3l0Ml9mZV90ZW1wbGF0ZSA9IHsKLQkudXNlcnMgPSB+MCwKLQkud3JpdGVycyA9IDEsCi0JLnJlYWRlcnMgPSAofjApLTEsCi0JLmZvcHMgPSAmY2luZXJneXQyX2ZvcHMKLX07Ci0KLSNpZmRlZiBFTkFCTEVfUkMKLQotc3RhdGljIHZvaWQgY2luZXJneXQyX3F1ZXJ5X3JjIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjaW5lcmd5dDIsIHJjX3F1ZXJ5X3dvcmsud29yayk7Ci0JY2hhciBidWZbMV0gPSB7IENJTkVSR1lUMl9FUDFfR0VUX1JDX0VWRU5UUyB9OwotCXN0cnVjdCBjaW5lcmd5dDJfcmNfZXZlbnQgcmNfZXZlbnRzWzEyXTsKLQlpbnQgbiwgbGVuLCBpOwotCi0JaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nIHx8IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQotCQlyZXR1cm47Ci0KLQlsZW4gPSBjaW5lcmd5dDJfY29tbWFuZChjaW5lcmd5dDIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0JCQkJKGNoYXIgKikgcmNfZXZlbnRzLCBzaXplb2YocmNfZXZlbnRzKSk7Ci0JaWYgKGxlbiA8IDApCi0JCWdvdG8gb3V0OwotCWlmIChsZW4gPT0gMCkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBjaW5lcmd5dDItPmxhc3RfZXZlbnRfamlmZmllcyArCi0JCQkgICAgICAgbXNlY3NfdG9famlmZmllcygxNTApKSkgewotCQkJLyogc3RvcCBrZXkgcmVwZWF0ICovCi0JCQlpZiAoY2luZXJneXQyLT5yY19pbnB1dF9ldmVudCAhPSBLRVlfTUFYKSB7Ci0JCQkJZHByaW50aygxLCAicmNfaW5wdXRfZXZlbnQ9JWQgVXBcbiIsIGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZXZlbnQpOwotCQkJCWlucHV0X3JlcG9ydF9rZXkoY2luZXJneXQyLT5yY19pbnB1dF9kZXYsCi0JCQkJCQkgY2luZXJneXQyLT5yY19pbnB1dF9ldmVudCwgMCk7Ci0JCQkJaW5wdXRfc3luYyhjaW5lcmd5dDItPnJjX2lucHV0X2Rldik7Ci0JCQkJY2luZXJneXQyLT5yY19pbnB1dF9ldmVudCA9IEtFWV9NQVg7Ci0JCQl9Ci0JCQljaW5lcmd5dDItPnJjX2xhc3RfY29kZSA9IGNwdV90b19sZTMyKH4wKTsKLQkJfQotCQlnb3RvIG91dDsKLQl9Ci0JY2luZXJneXQyLT5sYXN0X2V2ZW50X2ppZmZpZXMgPSBqaWZmaWVzOwotCi0JZm9yIChuID0gMDsgbiA8IChsZW4gLyBzaXplb2YocmNfZXZlbnRzWzBdKSk7IG4rKykgewotCQlkcHJpbnRrKDEsICJyY19ldmVudHNbJWRdLnZhbHVlID0gJXgsIHR5cGU9JXhcbiIsCi0JCQluLCBsZTMyX3RvX2NwdShyY19ldmVudHNbbl0udmFsdWUpLCByY19ldmVudHNbbl0udHlwZSk7Ci0KLQkJaWYgKHJjX2V2ZW50c1tuXS50eXBlID09IENJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQyAmJgotCQkgICAgcmNfZXZlbnRzW25dLnZhbHVlID09IGNwdV90b19sZTMyKH4wKSkgewotCQkJLyoga2V5cmVwZWF0IGJpdCAtPiBqdXN0IHJlcGVhdCBsYXN0IHJjX2lucHV0X2V2ZW50ICovCi0JCX0gZWxzZSB7Ci0JCQljaW5lcmd5dDItPnJjX2lucHV0X2V2ZW50ID0gS0VZX01BWDsKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJjX2tleXMpOyBpICs9IDMpIHsKLQkJCQlpZiAocmNfa2V5c1tpICsgMF0gPT0gcmNfZXZlbnRzW25dLnR5cGUgJiYKLQkJCQkgICAgcmNfa2V5c1tpICsgMV0gPT0gbGUzMl90b19jcHUocmNfZXZlbnRzW25dLnZhbHVlKSkgewotCQkJCQljaW5lcmd5dDItPnJjX2lucHV0X2V2ZW50ID0gcmNfa2V5c1tpICsgMl07Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChjaW5lcmd5dDItPnJjX2lucHV0X2V2ZW50ICE9IEtFWV9NQVgpIHsKLQkJCWlmIChyY19ldmVudHNbbl0udmFsdWUgPT0gY2luZXJneXQyLT5yY19sYXN0X2NvZGUgJiYKLQkJCSAgICBjaW5lcmd5dDItPnJjX2xhc3RfY29kZSAhPSBjcHVfdG9fbGUzMih+MCkpIHsKLQkJCQkvKiBlbWl0IGEga2V5LXVwIHNvIHRoZSBkb3VibGUgZXZlbnQgaXMgcmVjb2duaXplZCAqLwotCQkJCWRwcmludGsoMSwgInJjX2lucHV0X2V2ZW50PSVkIFVQXG4iLCBjaW5lcmd5dDItPnJjX2lucHV0X2V2ZW50KTsKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZGV2LAotCQkJCQkJIGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZXZlbnQsIDApOwotCQkJfQotCQkJZHByaW50aygxLCAicmNfaW5wdXRfZXZlbnQ9JWRcbiIsIGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZXZlbnQpOwotCQkJaW5wdXRfcmVwb3J0X2tleShjaW5lcmd5dDItPnJjX2lucHV0X2RldiwKLQkJCQkJIGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZXZlbnQsIDEpOwotCQkJaW5wdXRfc3luYyhjaW5lcmd5dDItPnJjX2lucHV0X2Rldik7Ci0JCQljaW5lcmd5dDItPnJjX2xhc3RfY29kZSA9IHJjX2V2ZW50c1tuXS52YWx1ZTsKLQkJfQotCX0KLQotb3V0OgotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2luZXJneXQyLT5yY19xdWVyeV93b3JrLAotCQkJICAgICAgbXNlY3NfdG9famlmZmllcyhSQ19RVUVSWV9JTlRFUlZBTCkpOwotCi0JbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPnNlbSk7Ci19Ci0KLXN0YXRpYyBpbnQgY2luZXJneXQyX3JlZ2lzdGVyX3JjKHN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MikKLXsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JaW50IGk7Ci0JaW50IGVycjsKLQotCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghaW5wdXRfZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXVzYl9tYWtlX3BhdGgoY2luZXJneXQyLT51ZGV2LCBjaW5lcmd5dDItPnBoeXMsIHNpemVvZihjaW5lcmd5dDItPnBoeXMpKTsKLQlzdHJsY2F0KGNpbmVyZ3l0Mi0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2YoY2luZXJneXQyLT5waHlzKSk7Ci0JY2luZXJneXQyLT5yY19pbnB1dF9ldmVudCA9IEtFWV9NQVg7Ci0JY2luZXJneXQyLT5yY19sYXN0X2NvZGUgPSBjcHVfdG9fbGUzMih+MCk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmNpbmVyZ3l0Mi0+cmNfcXVlcnlfd29yaywgY2luZXJneXQyX3F1ZXJ5X3JjKTsKLQotCWlucHV0X2Rldi0+bmFtZSA9IERSSVZFUl9OQU1FICIgcmVtb3RlIGNvbnRyb2wiOwotCWlucHV0X2Rldi0+cGh5cyA9IGNpbmVyZ3l0Mi0+cGh5czsKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmNfa2V5cyk7IGkgKz0gMykKLQkJc2V0X2JpdChyY19rZXlzW2kgKyAyXSwgaW5wdXRfZGV2LT5rZXliaXQpOwotCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSAwOwotCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IDA7Ci0JaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX1VTQjsKLQlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IGxlMTZfdG9fY3B1KGNpbmVyZ3l0Mi0+dWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7Ci0JaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUoY2luZXJneXQyLT51ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7Ci0JaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMTsKLQlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmY2luZXJneXQyLT51ZGV2LT5kZXY7Ci0KLQllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JY2luZXJneXQyLT5yY19pbnB1dF9kZXYgPSBpbnB1dF9kZXY7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaW5lcmd5dDItPnJjX3F1ZXJ5X3dvcmssIEhaLzIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNpbmVyZ3l0Ml91bnJlZ2lzdGVyX3JjKHN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MikKLXsKLQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZjaW5lcmd5dDItPnJjX3F1ZXJ5X3dvcmspOwotCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZGV2KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNpbmVyZ3l0Ml9zdXNwZW5kX3JjKHN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MikKLXsKLQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZjaW5lcmd5dDItPnJjX3F1ZXJ5X3dvcmspOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2luZXJneXQyX3Jlc3VtZV9yYyhzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIpCi17Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaW5lcmd5dDItPnJjX3F1ZXJ5X3dvcmssIEhaLzIpOwotfQotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIGludCBjaW5lcmd5dDJfcmVnaXN0ZXJfcmMoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgY2luZXJneXQyX3VucmVnaXN0ZXJfcmMoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaW5lcmd5dDJfc3VzcGVuZF9yYyhzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGNpbmVyZ3l0Ml9yZXN1bWVfcmMoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyKSB7IH0KLQotI2VuZGlmIC8qIEVOQUJMRV9SQyAqLwotCi1zdGF0aWMgdm9pZCBjaW5lcmd5dDJfcXVlcnkgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNpbmVyZ3l0MiwgcXVlcnlfd29yay53b3JrKTsKLQljaGFyIGNtZCBbXSA9IHsgQ0lORVJHWVQyX0VQMV9HRVRfVFVORVJfU1RBVFVTIH07Ci0Jc3RydWN0IGR2YnRfZ2V0X3N0YXR1c19tc2cgKnMgPSAmY2luZXJneXQyLT5zdGF0dXM7Ci0JdWludDhfdCBsb2NrX2JpdHM7Ci0KLQlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcgfHwgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCi0JCXJldHVybjsKLQotCWxvY2tfYml0cyA9IHMtPmxvY2tfYml0czsKLQotCWNpbmVyZ3l0Ml9jb21tYW5kKGNpbmVyZ3l0MiwgY21kLCBzaXplb2YoY21kKSwgKGNoYXIgKikgcywgc2l6ZW9mKCpzKSk7Ci0KLQljaW5lcmd5dDItPnVuY29ycmVjdGVkX2Jsb2NrX2NvdW50ICs9Ci0JCWxlMzJfdG9fY3B1KHMtPnVuY29ycmVjdGVkX2Jsb2NrX2NvdW50KTsKLQotCWlmIChsb2NrX2JpdHMgIT0gcy0+bG9ja19iaXRzKSB7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5wb2xsX3dxKTsKLQkJY2luZXJneXQyLT5wZW5kaW5nX2ZlX2V2ZW50cysrOwotCX0KLQotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2luZXJneXQyLT5xdWVyeV93b3JrLAotCQkJICAgICAgbXNlY3NfdG9famlmZmllcyhRVUVSWV9JTlRFUlZBTCkpOwotCi0JbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPnNlbSk7Ci19Ci0KLXN0YXRpYyBpbnQgY2luZXJneXQyX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyOwotCWludCBlcnI7Ci0KLQlpZiAoIShjaW5lcmd5dDIgPSBremFsbG9jIChzaXplb2Yoc3RydWN0IGNpbmVyZ3l0MiksIEdGUF9LRVJORUwpKSkgewotCQlkcHJpbnRrKDEsICJvdXQgb2YgbWVtb3J5PyE/XG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgKHZvaWQgKikgY2luZXJneXQyKTsKLQotCW11dGV4X2luaXQoJmNpbmVyZ3l0Mi0+c2VtKTsKLQltdXRleF9pbml0KCZjaW5lcmd5dDItPndxX3NlbSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCAoJmNpbmVyZ3l0Mi0+cG9sbF93cSk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmNpbmVyZ3l0Mi0+cXVlcnlfd29yaywgY2luZXJneXQyX3F1ZXJ5KTsKLQotCWNpbmVyZ3l0Mi0+dWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0JY2luZXJneXQyLT5wYXJhbS5jbWQgPSBDSU5FUkdZVDJfRVAxX1NFVF9UVU5FUl9QQVJBTUVURVJTOwotCi0JaWYgKGNpbmVyZ3l0Ml9hbGxvY19zdHJlYW1fdXJicyAoY2luZXJneXQyKSA8IDApIHsKLQkJZHByaW50aygxLCAidW5hYmxlIHRvIGFsbG9jYXRlIHN0cmVhbSB1cmJzXG4iKTsKLQkJa2ZyZWUoY2luZXJneXQyKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZXJyID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmNpbmVyZ3l0Mi0+YWRhcHRlciwgRFJJVkVSX05BTUUsCi0JCQkJICAgVEhJU19NT0RVTEUsICZjaW5lcmd5dDItPnVkZXYtPmRldiwKLQkJCQkgICBhZGFwdGVyX25yKTsKLQlpZiAoZXJyIDwgMCkgewotCQlrZnJlZShjaW5lcmd5dDIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWNpbmVyZ3l0Mi0+ZGVtdXgucHJpdiA9IGNpbmVyZ3l0MjsKLQljaW5lcmd5dDItPmRlbXV4LmZpbHRlcm51bSA9IDI1NjsKLQljaW5lcmd5dDItPmRlbXV4LmZlZWRudW0gPSAyNTY7Ci0JY2luZXJneXQyLT5kZW11eC5zdGFydF9mZWVkID0gY2luZXJneXQyX3N0YXJ0X2ZlZWQ7Ci0JY2luZXJneXQyLT5kZW11eC5zdG9wX2ZlZWQgPSBjaW5lcmd5dDJfc3RvcF9mZWVkOwotCWNpbmVyZ3l0Mi0+ZGVtdXguZG14LmNhcGFiaWxpdGllcyA9IERNWF9UU19GSUxURVJJTkcgfAotCQkJCQkgICAgRE1YX1NFQ1RJT05fRklMVEVSSU5HIHwKLQkJCQkJICAgIERNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HOwotCi0JaWYgKChlcnIgPSBkdmJfZG14X2luaXQoJmNpbmVyZ3l0Mi0+ZGVtdXgpKSA8IDApIHsKLQkJZHByaW50aygxLCAiZHZiX2RteF9pbml0KCkgZmFpbGVkIChlcnIgPSAlZClcbiIsIGVycik7Ci0JCWdvdG8gYmFpbG91dDsKLQl9Ci0KLQljaW5lcmd5dDItPmRteGRldi5maWx0ZXJudW0gPSBjaW5lcmd5dDItPmRlbXV4LmZpbHRlcm51bTsKLQljaW5lcmd5dDItPmRteGRldi5kZW11eCA9ICZjaW5lcmd5dDItPmRlbXV4LmRteDsKLQljaW5lcmd5dDItPmRteGRldi5jYXBhYmlsaXRpZXMgPSAwOwotCi0JaWYgKChlcnIgPSBkdmJfZG14ZGV2X2luaXQoJmNpbmVyZ3l0Mi0+ZG14ZGV2LCAmY2luZXJneXQyLT5hZGFwdGVyKSkgPCAwKSB7Ci0JCWRwcmludGsoMSwgImR2Yl9kbXhkZXZfaW5pdCgpIGZhaWxlZCAoZXJyID0gJWQpXG4iLCBlcnIpOwotCQlnb3RvIGJhaWxvdXQ7Ci0JfQotCi0JaWYgKGR2Yl9uZXRfaW5pdCgmY2luZXJneXQyLT5hZGFwdGVyLCAmY2luZXJneXQyLT5kdmJuZXQsICZjaW5lcmd5dDItPmRlbXV4LmRteCkpCi0JCWRwcmludGsoMSwgImR2Yl9uZXRfaW5pdCgpIGZhaWxlZCFcbiIpOwotCi0JZHZiX3JlZ2lzdGVyX2RldmljZSgmY2luZXJneXQyLT5hZGFwdGVyLCAmY2luZXJneXQyLT5mZWRldiwKLQkJCSAgICAmY2luZXJneXQyX2ZlX3RlbXBsYXRlLCBjaW5lcmd5dDIsCi0JCQkgICAgRFZCX0RFVklDRV9GUk9OVEVORCk7Ci0KLQllcnIgPSBjaW5lcmd5dDJfcmVnaXN0ZXJfcmMoY2luZXJneXQyKTsKLQlpZiAoZXJyKQotCQlnb3RvIGJhaWxvdXQ7Ci0KLQlyZXR1cm4gMDsKLQotYmFpbG91dDoKLQlkdmJfbmV0X3JlbGVhc2UoJmNpbmVyZ3l0Mi0+ZHZibmV0KTsKLQlkdmJfZG14ZGV2X3JlbGVhc2UoJmNpbmVyZ3l0Mi0+ZG14ZGV2KTsKLQlkdmJfZG14X3JlbGVhc2UoJmNpbmVyZ3l0Mi0+ZGVtdXgpOwotCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmNpbmVyZ3l0Mi0+YWRhcHRlcik7Ci0JY2luZXJneXQyX2ZyZWVfc3RyZWFtX3VyYnMoY2luZXJneXQyKTsKLQlrZnJlZShjaW5lcmd5dDIpOwotCXJldHVybiAtRU5PTUVNOwotfQotCi1zdGF0aWMgdm9pZCBjaW5lcmd5dDJfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0Jc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7Ci0KLQljaW5lcmd5dDJfdW5yZWdpc3Rlcl9yYyhjaW5lcmd5dDIpOwotCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJmNpbmVyZ3l0Mi0+cXVlcnlfd29yayk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnBvbGxfd3EpOwotCi0JY2luZXJneXQyLT5kZW11eC5kbXguY2xvc2UoJmNpbmVyZ3l0Mi0+ZGVtdXguZG14KTsKLQljaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyA9IDE7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZjaW5lcmd5dDItPmludXNlKSkKLQkJY2luZXJneXQyX3VucmVnaXN0ZXIoY2luZXJneXQyKTsKLX0KLQotc3RhdGljIGludCBjaW5lcmd5dDJfc3VzcGVuZCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKLQotCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZykKLQkJcmV0dXJuIC1FQUdBSU47Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT53cV9zZW0pKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCi0JY2luZXJneXQyX3N1c3BlbmRfcmMoY2luZXJneXQyKTsKLQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKCZjaW5lcmd5dDItPnF1ZXJ5X3dvcmspOwotCi0JbXV0ZXhfbG9jaygmY2luZXJneXQyLT5zZW0pOwotCWlmIChjaW5lcmd5dDItPnN0cmVhbWluZykKLQkJY2luZXJneXQyX3N0b3Bfc3RyZWFtX3hmZXIoY2luZXJneXQyKTsKLQljaW5lcmd5dDJfc2xlZXAoY2luZXJneXQyLCAxKTsKLQltdXRleF91bmxvY2soJmNpbmVyZ3l0Mi0+c2VtKTsKLQotCW11dGV4X3VubG9jaygmY2luZXJneXQyLT53cV9zZW0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2luZXJneXQyX3Jlc3VtZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0Jc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7Ci0Jc3RydWN0IGR2YnRfc2V0X3BhcmFtZXRlcnNfbXNnICpwYXJhbSA9ICZjaW5lcmd5dDItPnBhcmFtOwotCWludCBlcnIgPSAtRUFHQUlOOwotCi0JaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nKQotCQlnb3RvIG91dDsKLQllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+d3Ffc2VtKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X3VubG9jazE7Ci0KLQlpZiAoIWNpbmVyZ3l0Mi0+c2xlZXBpbmcpIHsKLQkJY2luZXJneXQyX3NsZWVwKGNpbmVyZ3l0MiwgMCk7Ci0JCWNpbmVyZ3l0Ml9jb21tYW5kKGNpbmVyZ3l0MiwgKGNoYXIgKikgcGFyYW0sIHNpemVvZigqcGFyYW0pLCBOVUxMLCAwKTsKLQkJaWYgKGNpbmVyZ3l0Mi0+c3RyZWFtaW5nKQotCQkJY2luZXJneXQyX3N0YXJ0X3N0cmVhbV94ZmVyKGNpbmVyZ3l0Mik7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2luZXJneXQyLT5xdWVyeV93b3JrLCBIWi8yKTsKLQl9Ci0KLQljaW5lcmd5dDJfcmVzdW1lX3JjKGNpbmVyZ3l0Mik7Ci0KLQltdXRleF91bmxvY2soJmNpbmVyZ3l0Mi0+c2VtKTsKLW91dF91bmxvY2sxOgotCW11dGV4X3VubG9jaygmY2luZXJneXQyLT53cV9zZW0pOwotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjaW5lcmd5dDJfdGFibGUgW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7IFVTQl9ERVZJQ0UoMHgwY2NkLCAweDAwMzgpIH0sCi0JeyAwIH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBjaW5lcmd5dDJfdGFibGUpOwotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY2luZXJneXQyX2RyaXZlciA9IHsKLQkubmFtZQk9ICJjaW5lcmd5VDIiLAotCS5wcm9iZQk9IGNpbmVyZ3l0Ml9wcm9iZSwKLQkuZGlzY29ubmVjdAk9IGNpbmVyZ3l0Ml9kaXNjb25uZWN0LAotCS5zdXNwZW5kCT0gY2luZXJneXQyX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBjaW5lcmd5dDJfcmVzdW1lLAotCS5pZF90YWJsZQk9IGNpbmVyZ3l0Ml90YWJsZQotfTsKLQotc3RhdGljIGludCBfX2luaXQgY2luZXJneXQyX2luaXQgKHZvaWQpCi17Ci0JaW50IGVycjsKLQotCWlmICgoZXJyID0gdXNiX3JlZ2lzdGVyKCZjaW5lcmd5dDJfZHJpdmVyKSkgPCAwKQotCQlkcHJpbnRrKDEsICJ1c2JfcmVnaXN0ZXIoKSBmYWlsZWQhIChlcnIgJWkpXG4iLCBlcnIpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNpbmVyZ3l0Ml9leGl0ICh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZjaW5lcmd5dDJfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQgKGNpbmVyZ3l0Ml9pbml0KTsKLW1vZHVsZV9leGl0IChjaW5lcmd5dDJfZXhpdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkhvbGdlciBXYWVjaHRsZXIsIERhbmllbCBNYWNrIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMzIzMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZwpAQCAtMCwwICsxLDE4IEBACitjb25maWcgRFZCX0RNMTEwNQorCXRyaXN0YXRlICJTRE1DIERNMTEwNSBiYXNlZCBQQ0kgY2FyZHMiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCisJc2VsZWN0IERWQl9QTEwgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjAyOTkgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjAyODggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUQjYwMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0NYMjQxMTYgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NJMjFYWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZSBTRE1DIERNMTEwNSBQQ0kgY2hpcCBsaWtlCisJICBEdmJXb3JsZCAyMDAyCisKKwkgIFNpbmNlIHRoZXNlIGNhcmRzIGhhdmUgbm8gTVBFRyBkZWNvZGVyIG9uYm9hcmQsIHRoZXkgdHJhbnNtaXQKKwkgIG9ubHkgY29tcHJlc3NlZCBNUEVHIGRhdGEgb3ZlciB0aGUgUENJIGJ1cywgc28geW91IG5lZWQKKwkgIGFuIGV4dGVybmFsIHNvZnR3YXJlIGRlY29kZXIgdG8gd2F0Y2ggVFYgb24geW91ciBjb21wdXRlci4KKworCSAgU2F5IFkgb3IgTSBpZiB5b3Ugb3duIHN1Y2ggYSBkZXZpY2UgYW5kIHdhbnQgdG8gdXNlIGl0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYzI4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitvYmotJChDT05GSUdfRFZCX0RNMTEwNSkgKz0gZG0xMTA1Lm8KKworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvIC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRlNjI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYwpAQCAtMCwwICsxLDkyMyBAQAorLyoKKyAqIGRtMTEwNS5jIC0gZHJpdmVyIGZvciBEVkIgY2FyZHMgYmFzZWQgb24gU0RNQyBETTExMDUgUENJIGNoaXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBtZS5ieT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KKworI2luY2x1ZGUgImRlbXV4LmgiCisjaW5jbHVkZSAiZG14ZGV2LmgiCisjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiZHZiX25ldC5oIgorI2luY2x1ZGUgImR2YmRldi5oIgorI2luY2x1ZGUgImR2Yi1wbGwuaCIKKworI2luY2x1ZGUgInN0djAyOTkuaCIKKyNpbmNsdWRlICJzdHYwMjg4LmgiCisjaW5jbHVkZSAic3RiNjAwMC5oIgorI2luY2x1ZGUgInNpMjF4eC5oIgorI2luY2x1ZGUgImN4MjQxMTYuaCIKKyNpbmNsdWRlICJ6MDE5NGEuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBQQ0kgSUQncworICovCisjaWZuZGVmIFBDSV9WRU5ET1JfSURfVFJJR0VNCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFJJR0VNCTB4MTA5ZgorI2VuZGlmCisjaWZuZGVmIFBDSV9ERVZJQ0VfSURfRE0xMTA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRE0xMTA1CTB4MDM2ZgorI2VuZGlmCisjaWZuZGVmIFBDSV9ERVZJQ0VfSURfRFcyMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRFcyMDAyCTB4MjAwMgorI2VuZGlmCisjaWZuZGVmIFBDSV9ERVZJQ0VfSURfRFcyMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRFcyMDA0CTB4MjAwNAorI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogc2RtYyBkbTExMDUgcmVnaXN0ZXJzICovCisKKy8qIFRTIENvbnRyb2wgKi8KKyNkZWZpbmUgRE0xMTA1X1RTQ1RSCQkJCTB4MDAKKyNkZWZpbmUgRE0xMTA1X0RUQUxFTlRICQkJCTB4MDQKKworLyogR1BJTyBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgRE0xMTA1X0dQSU9WQUwJCQkJMHgwOAorI2RlZmluZSBETTExMDVfR1BJT0NUUgkJCQkweDBjCisKKy8qIFBJRCBzZXJpYWwgbnVtYmVyICovCisjZGVmaW5lIERNMTEwNV9QSUROCQkJCTB4MTAKKworLyogT2RkLWV2ZW4gc2VjcmV0IGtleSBzZWxlY3QgKi8KKyNkZWZpbmUgRE0xMTA1X0NXU0VMCQkJCTB4MTQKKworLyogSG9zdCBDb21tYW5kIEludGVyZmFjZSAqLworI2RlZmluZSBETTExMDVfSE9TVF9DVFIJCQkJMHgxOAorI2RlZmluZSBETTExMDVfSE9TVF9BRAkJCQkweDFjCisKKy8qIFBDSSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgRE0xMTA1X0NSCQkJCTB4MzAKKyNkZWZpbmUgRE0xMTA1X1JTVAkJCQkweDM0CisjZGVmaW5lIERNMTEwNV9TVEFEUgkJCQkweDM4CisjZGVmaW5lIERNMTEwNV9STEVOCQkJCTB4M2MKKyNkZWZpbmUgRE0xMTA1X1dSUAkJCQkweDQwCisjZGVmaW5lIERNMTEwNV9JTlRDTlQJCQkJMHg0NAorI2RlZmluZSBETTExMDVfSU5UTUFLCQkJCTB4NDgKKyNkZWZpbmUgRE0xMTA1X0lOVFNUUwkJCQkweDRjCisKKy8qIENXIFZhbHVlICovCisjZGVmaW5lIERNMTEwNV9PREQJCQkJMHg1MAorI2RlZmluZSBETTExMDVfRVZFTgkJCQkweDU4CisKKy8qIFBJRCBWYWx1ZSAqLworI2RlZmluZSBETTExMDVfUElECQkJCTB4NjAKKworLyogSVIgQ29udHJvbCAqLworI2RlZmluZSBETTExMDVfSVJDVFIJCQkJMHg2NAorI2RlZmluZSBETTExMDVfSVJNT0RFCQkJCTB4NjgKKyNkZWZpbmUgRE0xMTA1X1NZU1RFTUNPREUJCQkweDZjCisjZGVmaW5lIERNMTEwNV9JUkNPREUJCQkJMHg3MAorCisvKiBVbmtub3duIFZhbHVlcyAqLworI2RlZmluZSBETTExMDVfRU5DUllQVAkJCQkweDc0CisjZGVmaW5lIERNMTEwNV9WRVIJCQkJMHg3YworCisvKiBJMkMgSW50ZXJmYWNlICovCisjZGVmaW5lIERNMTEwNV9JMkNDVFIJCQkJMHg4MAorI2RlZmluZSBETTExMDVfSTJDU1RTCQkJCTB4ODEKKyNkZWZpbmUgRE0xMTA1X0kyQ0RBVAkJCQkweDgyCisjZGVmaW5lIERNMTEwNV9JMkNfUkEJCQkJMHg4MworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIEludGVycnVwdCBNYXNrIEJpdHMgKi8KKworI2RlZmluZSBJTlRNQUtfVFNJUlFNCQkJCTB4MDEKKyNkZWZpbmUgSU5UTUFLX0hJUlFNCQkJCTB4MDQKKyNkZWZpbmUgSU5UTUFLX0lSTQkJCQkweDA4CisjZGVmaW5lIElOVE1BS19BTExNQVNLCQkJCShJTlRNQUtfVFNJUlFNIHwgXAorCQkJCQkJSU5UTUFLX0hJUlFNIHwgXAorCQkJCQkJSU5UTUFLX0lSTSkKKyNkZWZpbmUgSU5UTUFLX05PTkVNQVNLCQkJCTB4MDAKKworLyogSW50ZXJydXB0IFN0YXR1cyBCaXRzICovCisjZGVmaW5lIElOVFNUU19UU0lSUQkJCQkweDAxCisjZGVmaW5lIElOVFNUU19ISVJRCQkJCTB4MDQKKyNkZWZpbmUgSU5UU1RTX0lSCQkJCTB4MDgKKworLyogSVIgQ29udHJvbCBCaXRzICovCisjZGVmaW5lIERNMTEwNV9JUl9FTgkJCQkweDAxCisjZGVmaW5lIERNMTEwNV9TWVNfQ0hLCQkJCTB4MDIKKyNkZWZpbmUgRE0xMTA1X1JFUF9GTEcJCQkJMHgwOAorCisvKiBFRVBST00gYWRkciAqLworI2RlZmluZSBJSUNfMjRDMDFfYWRkcgkJCQkweGEwCisvKiBNYXggYm9hcmQgY291bnQgKi8KKyNkZWZpbmUgRE0xMTA1X01BWAkJCQkweDA0CisKKyNkZWZpbmUgRFJJVkVSX05BTUUJCQkJImRtMTEwNSIKKworI2RlZmluZSBETTExMDVfRE1BX1BBQ0tFVFMJCQk0NworI2RlZmluZSBETTExMDVfRE1BX1BBQ0tFVF9MRU5HVEgJCSgxMjgqNCkKKyNkZWZpbmUgRE0xMTA1X0RNQV9CWVRFUwkJCSgxMjggKiA0ICogRE0xMTA1X0RNQV9QQUNLRVRTKQorCisvKiBHUElPJ3MgZm9yIExOQiBwb3dlciBjb250cm9sICovCisjZGVmaW5lIERNMTEwNV9MTkJfTUFTSwkJCQkweDAwMDAwMDAwCisjZGVmaW5lIERNMTEwNV9MTkJfMTNWCQkJCTB4MDAwMTAxMDAKKyNkZWZpbmUgRE0xMTA1X0xOQl8xOFYJCQkJMHgwMDAwMDEwMAorCitzdGF0aWMgaW50IGlyX2RlYnVnOworbW9kdWxlX3BhcmFtKGlyX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpcl9kZWJ1ZywgImVuYWJsZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIElSIGRlY29kaW5nIik7CisKK0RWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworCitzdGF0aWMgdTE2IGlyX2NvZGVzX2RtMTEwNV9uZWNbMTI4XSA9IHsKKwlbMHgwYV0gPSBLRVlfUSwJCS8qcG93ZXIqLworCVsweDBjXSA9IEtFWV9NLAkJLyptdXRlKi8KKwlbMHgxMV0gPSBLRVlfMSwKKwlbMHgxMl0gPSBLRVlfMiwKKwlbMHgxM10gPSBLRVlfMywKKwlbMHgxNF0gPSBLRVlfNCwKKwlbMHgxNV0gPSBLRVlfNSwKKwlbMHgxNl0gPSBLRVlfNiwKKwlbMHgxN10gPSBLRVlfNywKKwlbMHgxOF0gPSBLRVlfOCwKKwlbMHgxOV0gPSBLRVlfOSwKKwlbMHgxMF0gPSBLRVlfMCwKKwlbMHgxY10gPSBLRVlfUEFHRVVQLAkvKmNoKyovCisJWzB4MGZdID0gS0VZX1BBR0VET1dOLAkvKmNoLSovCisJWzB4MWFdID0gS0VZX08sCQkvKnZvbCsqLworCVsweDBlXSA9IEtFWV9aLAkJLyp2b2wtKi8KKwlbMHgwNF0gPSBLRVlfUiwJCS8qcmVjKi8KKwlbMHgwOV0gPSBLRVlfRCwJCS8qZmF2Ki8KKwlbMHgwOF0gPSBLRVlfQkFDS1NQQUNFLAkvKnJld2luZCovCisJWzB4MDddID0gS0VZX0EsCQkvKmZhc3QqLworCVsweDBiXSA9IEtFWV9QLAkJLypwYXVzZSovCisJWzB4MDJdID0gS0VZX0VTQywJLypjYW5jZWwqLworCVsweDAzXSA9IEtFWV9HLAkJLyp0YWIqLworCVsweDAwXSA9IEtFWV9VUCwJLyp1cCovCisJWzB4MWZdID0gS0VZX0VOVEVSLAkvKm9rKi8KKwlbMHgwMV0gPSBLRVlfRE9XTiwJLypkb3duKi8KKwlbMHgwNV0gPSBLRVlfQywJCS8qY2FwKi8KKwlbMHgwNl0gPSBLRVlfUywJCS8qc3RvcCovCisJWzB4NDBdID0gS0VZX0YsCQkvKmZ1bGwqLworCVsweDFlXSA9IEtFWV9XLAkJLyp0dm1vZGUqLworCVsweDFiXSA9IEtFWV9CLAkJLypyZWNhbGwqLworfTsKKworLyogaW5mcmFyZWQgcmVtb3RlIGNvbnRyb2wgKi8KK3N0cnVjdCBpbmZyYXJlZCB7CisJdTE2CWtleV9tYXBbMTI4XTsKKwlzdHJ1Y3QgaW5wdXRfZGV2CSppbnB1dF9kZXY7CisJY2hhcgkJCWlucHV0X3BoeXNbMzJdOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlpcl90YXNrbGV0OworCXUzMgkJCWlyX2NvbW1hbmQ7Cit9OworCitzdHJ1Y3QgZG0xMTA1ZHZiIHsKKwkvKiBwY2kgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl1OCBfX2lvbWVtICppb19tZW07CisKKwkvKiBpciAqLworCXN0cnVjdCBpbmZyYXJlZCBpcjsKKworCS8qIGR2YiAqLworCXN0cnVjdCBkbXhfZnJvbnRlbmQgaHdfZnJvbnRlbmQ7CisJc3RydWN0IGRteF9mcm9udGVuZCBtZW1fZnJvbnRlbmQ7CisJc3RydWN0IGRteGRldiBkbXhkZXY7CisJc3RydWN0IGR2Yl9hZGFwdGVyIGR2Yl9hZGFwdGVyOworCXN0cnVjdCBkdmJfZGVtdXggZGVtdXg7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CisJc3RydWN0IGR2Yl9uZXQgZHZibmV0OworCXVuc2lnbmVkIGludCBmdWxsX3RzX3VzZXJzOworCisJLyogaTJjICovCisJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwOworCisJLyogZG1hICovCisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwl1bnNpZ25lZCBjaGFyICp0c19idWY7CisJdTMyIHdycDsKKwl1MzIgYnVmZmVyX3NpemU7CisJdW5zaWduZWQgaW50CVBhY2tldEVycm9yQ291bnQ7CisJdW5zaWduZWQgaW50IGRtYXJzdDsKKwlzcGlubG9ja190IGxvY2s7CisKK307CisKKyNkZWZpbmUgZG1faW9fbWVtKHJlZykJKCh1bnNpZ25lZCBsb25nKSgmZG0xMTA1ZHZiLT5pb19tZW1bcmVnXSkpCisKK3N0YXRpYyBzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmJfbG9jYWw7CisKK3N0YXRpYyBpbnQgZG0xMTA1X2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkgICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCit7CisJc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiIDsKKworCWludCBhZGRyLCByYywgaSwgaiwgaywgbGVuLCBieXRlLCBkYXRhOworCXU4IHN0YXR1czsKKworCWRtMTEwNWR2YiA9IGkyY19hZGFwLT5hbGdvX2RhdGE7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCW91dGIoMHgwMCwgZG1faW9fbWVtKERNMTEwNV9JMkNDVFIpKTsKKwkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJLyogcmVhZCBieXRlcyAqLworCQkJYWRkciAgPSBtc2dzW2ldLmFkZHIgPDwgMTsKKwkJCWFkZHIgfD0gMTsKKwkJCW91dGIoYWRkciwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQpKTsKKwkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKQorCQkJCW91dGIoMCwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMSkpOworCisJCQlvdXRiKDB4ODEgKyBtc2dzW2ldLmxlbiwgZG1faW9fbWVtKERNMTEwNV9JMkNDVFIpKTsKKwkJCWZvciAoaiA9IDA7IGogPCA1NTsgaisrKSB7CisJCQkJbWRlbGF5KDEwKTsKKwkJCQlzdGF0dXMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JMkNTVFMpKTsKKwkJCQlpZiAoKHN0YXR1cyAmIDB4YzApID09IDB4NDApCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGogPj0gNTUpCisJCQkJcmV0dXJuIC0xOworCisJCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgbXNnc1tpXS5sZW47IGJ5dGUrKykgeworCQkJCXJjID0gaW5iKGRtX2lvX21lbShETTExMDVfSTJDREFUICsgYnl0ZSArIDEpKTsKKwkJCQlpZiAocmMgPCAwKQorCQkJCQlnb3RvIGVycjsKKwkJCQltc2dzW2ldLmJ1ZltieXRlXSA9IHJjOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKChtc2dzW2ldLmJ1ZlswXSA9PSAweGY3KSAmJiAobXNnc1tpXS5hZGRyID09IDB4NTUpKSB7CisJCQkJLyogcHJlcGFpcmVkIGZvciBjeDI0MTE2IGZpcm13YXJlICovCisJCQkJLyogV3JpdGUgaW4gc21hbGwgYmxvY2tzICovCisJCQkJbGVuID0gbXNnc1tpXS5sZW4gLSAxOworCQkJCWsgPSAxOworCQkJCWRvIHsKKwkJCQkJb3V0Yihtc2dzW2ldLmFkZHIgPDwgMSwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQpKTsKKwkJCQkJb3V0YigweGY3LCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIDEpKTsKKwkJCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IChsZW4gPiA0OCA/IDQ4IDogbGVuKTsgYnl0ZSsrKSB7CisJCQkJCQlkYXRhID0gbXNnc1tpXS5idWZbaytieXRlXTsKKwkJCQkJCW91dGIoZGF0YSwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMikpOworCQkJCQl9CisJCQkJCW91dGIoMHg4MiArIChsZW4gPiA0OCA/IDQ4IDogbGVuKSwgZG1faW9fbWVtKERNMTEwNV9JMkNDVFIpKTsKKwkJCQkJZm9yIChqID0gMDsgaiA8IDI1OyBqKyspIHsKKwkJCQkJCW1kZWxheSgxMCk7CisJCQkJCQlzdGF0dXMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JMkNTVFMpKTsKKwkJCQkJCWlmICgoc3RhdHVzICYgMHhjMCkgPT0gMHg0MCkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCWlmIChqID49IDI1KQorCQkJCQkJcmV0dXJuIC0xOworCisJCQkJCWsgKz0gNDg7CisJCQkJCWxlbiAtPSA0ODsKKwkJCQl9IHdoaWxlIChsZW4gPiAwKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogd3JpdGUgYnl0ZXMgKi8KKwkJCQlvdXRiKG1zZ3NbaV0uYWRkcjw8MSwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQpKTsKKwkJCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgbXNnc1tpXS5sZW47IGJ5dGUrKykgeworCQkJCQlkYXRhID0gbXNnc1tpXS5idWZbYnl0ZV07CisJCQkJCW91dGIoZGF0YSwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMSkpOworCQkJCX0KKwkJCQlvdXRiKDB4ODEgKyBtc2dzW2ldLmxlbiwgZG1faW9fbWVtKERNMTEwNV9JMkNDVFIpKTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgMjU7IGorKykgeworCQkJCQltZGVsYXkoMTApOworCQkJCQlzdGF0dXMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JMkNTVFMpKTsKKwkJCQkJaWYgKChzdGF0dXMgJiAweGMwKSA9PSAweDQwKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYgKGogPj0gMjUpCisJCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gbnVtOworIGVycjoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB1MzIgZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQzsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGRtMTEwNV9hbGdvID0geworCS5tYXN0ZXJfeGZlciAgID0gZG0xMTA1X2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtMTEwNWR2YiAqZmVlZF90b19kbTExMDVkdmIoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQoreworCXJldHVybiBjb250YWluZXJfb2YoZmVlZC0+ZGVtdXgsIHN0cnVjdCBkbTExMDVkdmIsIGRlbXV4KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZG0xMTA1ZHZiICpmcm9udGVuZF90b19kbTExMDVkdmIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmZS0+ZHZiLCBzdHJ1Y3QgZG0xMTA1ZHZiLCBkdmJfYWRhcHRlcik7Cit9CisKK3N0YXRpYyBpbnQgZG0xMTA1ZHZiX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCit7CisJc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0gZnJvbnRlbmRfdG9fZG0xMTA1ZHZiKGZlKTsKKworCQlpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xOCkgeworCQkJb3V0bChETTExMDVfTE5CX01BU0ssIGRtX2lvX21lbShETTExMDVfR1BJT0NUUikpOworCQkJb3V0bChETTExMDVfTE5CXzE4ViwgZG1faW9fbWVtKERNMTEwNV9HUElPVkFMKSk7CisJCX0gZWxzZQl7CisJCS8qTE5CIE9OLTEzViBieSBkZWZhdWx0ISovCisJCQlvdXRsKERNMTEwNV9MTkJfTUFTSywgZG1faW9fbWVtKERNMTEwNV9HUElPQ1RSKSk7CisJCQlvdXRsKERNMTEwNV9MTkJfMTNWLCBkbV9pb19tZW0oRE0xMTA1X0dQSU9WQUwpKTsKKwkJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRtMTEwNWR2Yl9zZXRfZG1hX2FkZHIoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQoreworCW91dGwoY3B1X3RvX2xlMzIoZG0xMTA1ZHZiLT5kbWFfYWRkciksIGRtX2lvX21lbShETTExMDVfU1RBRFIpKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1ZHZiX2RtYV9tYXAoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQoreworCWRtMTEwNWR2Yi0+dHNfYnVmID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZG0xMTA1ZHZiLT5wZGV2LCA2KkRNMTEwNV9ETUFfQllURVMsICZkbTExMDVkdmItPmRtYV9hZGRyKTsKKworCXJldHVybiBwY2lfZG1hX21hcHBpbmdfZXJyb3IoZG0xMTA1ZHZiLT5wZGV2LCBkbTExMDVkdmItPmRtYV9hZGRyKTsKK30KKworc3RhdGljIHZvaWQgZG0xMTA1ZHZiX2RtYV91bm1hcChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCit7CisJcGNpX2ZyZWVfY29uc2lzdGVudChkbTExMDVkdmItPnBkZXYsIDYqRE0xMTA1X0RNQV9CWVRFUywgZG0xMTA1ZHZiLT50c19idWYsIGRtMTEwNWR2Yi0+ZG1hX2FkZHIpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZG0xMTA1ZHZiX2VuYWJsZV9pcnFzKHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3sKKwlvdXRiKElOVE1BS19BTExNQVNLLCBkbV9pb19tZW0oRE0xMTA1X0lOVE1BSykpOworCW91dGIoMSwgZG1faW9fbWVtKERNMTEwNV9DUikpOworfQorCitzdGF0aWMgdm9pZCBkbTExMDVkdmJfZGlzYWJsZV9pcnFzKHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3sKKwlvdXRiKElOVE1BS19JUk0sIGRtX2lvX21lbShETTExMDVfSU5UTUFLKSk7CisJb3V0YigwLCBkbV9pb19tZW0oRE0xMTA1X0NSKSk7Cit9CisKK3N0YXRpYyBpbnQgZG0xMTA1ZHZiX3N0YXJ0X2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmKQoreworCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IGZlZWRfdG9fZG0xMTA1ZHZiKGYpOworCisJaWYgKGRtMTEwNWR2Yi0+ZnVsbF90c191c2VycysrID09IDApCisJCWRtMTEwNWR2Yl9lbmFibGVfaXJxcyhkbTExMDVkdmIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG0xMTA1ZHZiX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmYpCit7CisJc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0gZmVlZF90b19kbTExMDVkdmIoZik7CisKKwlpZiAoLS1kbTExMDVkdmItPmZ1bGxfdHNfdXNlcnMgPT0gMCkKKwkJZG0xMTA1ZHZiX2Rpc2FibGVfaXJxcyhkbTExMDVkdmIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGlyIHRhc2tsZXQgKi8KK3N0YXRpYyB2b2lkIGRtMTEwNV9lbWl0X2tleSh1bnNpZ25lZCBsb25nIHBhcm0pCit7CisJc3RydWN0IGluZnJhcmVkICppciA9IChzdHJ1Y3QgaW5mcmFyZWQgKikgcGFybTsKKwl1MzIgaXJjb20gPSBpci0+aXJfY29tbWFuZDsKKwl1OCBkYXRhOworCXUxNiBrZXljb2RlOworCisJZGF0YSA9IChpcmNvbSA+PiA4KSAmIDB4N2Y7CisKKwlpbnB1dF9ldmVudChpci0+aW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19SQVcsICgweDAwMDBmOCA8PCAxNikgfCBkYXRhKTsKKwlpbnB1dF9ldmVudChpci0+aW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBkYXRhKTsKKwlrZXljb2RlID0gaXItPmtleV9tYXBbZGF0YV07CisKKwlpZiAoIWtleWNvZGUpCisJCXJldHVybjsKKworCWlucHV0X2V2ZW50KGlyLT5pbnB1dF9kZXYsIEVWX0tFWSwga2V5Y29kZSwgMSk7CisJaW5wdXRfc3luYyhpci0+aW5wdXRfZGV2KTsKKwlpbnB1dF9ldmVudChpci0+aW5wdXRfZGV2LCBFVl9LRVksIGtleWNvZGUsIDApOworCWlucHV0X3N5bmMoaXItPmlucHV0X2Rldik7CisKK30KKworc3RhdGljIGlycXJldHVybl90IGRtMTEwNWR2Yl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IGRldl9pZDsKKwl1bnNpZ25lZCBpbnQgcGllY2U7CisJdW5zaWduZWQgaW50IG5icGFja2V0czsKKwl1MzIgY29tbWFuZDsKKwl1MzIgbmV4dHdycDsKKwl1MzIgb2xkd3JwOworCisJLyogUmVhZC1Xcml0ZSBJTlNUUyBBY2sncyBJbnRlcnJ1cHQgZm9yIERNMTEwNSBjaGlwIDE2LjAzLjIwMDggKi8KKwl1bnNpZ25lZCBpbnQgaW50c3RzID0gaW5iKGRtX2lvX21lbShETTExMDVfSU5UU1RTKSk7CisJb3V0YihpbnRzdHMsIGRtX2lvX21lbShETTExMDVfSU5UU1RTKSk7CisKKwlzd2l0Y2ggKGludHN0cykgeworCWNhc2UgSU5UU1RTX1RTSVJROgorCWNhc2UgKElOVFNUU19UU0lSUSB8IElOVFNUU19JUik6CisJCW5leHR3cnAgPSBpbmwoZG1faW9fbWVtKERNMTEwNV9XUlApKSAtCisJCQlpbmwoZG1faW9fbWVtKERNMTEwNV9TVEFEUikpIDsKKwkJb2xkd3JwID0gZG0xMTA1ZHZiLT53cnA7CisJCXNwaW5fbG9jaygmZG0xMTA1ZHZiLT5sb2NrKTsKKwkJaWYgKCEoKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycF0gPT0gMHg0NykgJiYKKwkJCQkoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwICsgMTg4XSA9PSAweDQ3KSAmJgorCQkJCShkbTExMDVkdmItPnRzX2J1ZltvbGR3cnAgKyAxODggKiAyXSA9PSAweDQ3KSkpIHsKKwkJCWRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCsrOworCQkJLyogYmFkIHBhY2tldCBmb3VuZCAqLworCQkJaWYgKChkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQgPj0gMikgJiYKKwkJCQkJKGRtMTEwNWR2Yi0+ZG1hcnN0ID09IDApKSB7CisJCQkJb3V0YigxLCBkbV9pb19tZW0oRE0xMTA1X1JTVCkpOworCQkJCWRtMTEwNWR2Yi0+d3JwID0gMDsKKwkJCQlkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQgPSAwOworCQkJCWRtMTEwNWR2Yi0+ZG1hcnN0ID0gMDsKKwkJCQlzcGluX3VubG9jaygmZG0xMTA1ZHZiLT5sb2NrKTsKKwkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQl9CisJCX0KKwkJaWYgKG5leHR3cnAgPCBvbGR3cnApIHsKKwkJCXBpZWNlID0gZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSAtIG9sZHdycDsKKwkJCW1lbWNweShkbTExMDVkdmItPnRzX2J1ZiArIGRtMTEwNWR2Yi0+YnVmZmVyX3NpemUsIGRtMTEwNWR2Yi0+dHNfYnVmLCBuZXh0d3JwKTsKKwkJCW5icGFja2V0cyA9IChwaWVjZSArIG5leHR3cnApLzE4ODsKKwkJfSBlbHNlCXsKKwkJCW5icGFja2V0cyA9IChuZXh0d3JwIC0gb2xkd3JwKS8xODg7CisJCX0KKwkJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZkbTExMDVkdmItPmRlbXV4LCAmZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwXSwgbmJwYWNrZXRzKTsKKwkJZG0xMTA1ZHZiLT53cnAgPSBuZXh0d3JwOworCQlzcGluX3VubG9jaygmZG0xMTA1ZHZiLT5sb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBJTlRTVFNfSVI6CisJCWNvbW1hbmQgPSBpbmwoZG1faW9fbWVtKERNMTEwNV9JUkNPREUpKTsKKwkJaWYgKGlyX2RlYnVnKQorCQkJcHJpbnRrKCJkbTExMDU6IHJlY2VpdmVkIGJ5dGUgMHglMDR4XG4iLCBjb21tYW5kKTsKKworCQlkbTExMDVkdmItPmlyLmlyX2NvbW1hbmQgPSBjb21tYW5kOworCQl0YXNrbGV0X3NjaGVkdWxlKCZkbTExMDVkdmItPmlyLmlyX3Rhc2tsZXQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworCisKK30KKworLyogcmVnaXN0ZXIgd2l0aCBpbnB1dCBsYXllciAqLworc3RhdGljIHZvaWQgaW5wdXRfcmVnaXN0ZXJfa2V5cyhzdHJ1Y3QgaW5mcmFyZWQgKmlyKQoreworCWludCBpOworCisJbWVtc2V0KGlyLT5pbnB1dF9kZXYtPmtleWJpdCwgMCwgc2l6ZW9mKGlyLT5pbnB1dF9kZXYtPmtleWJpdCkpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXItPmtleV9tYXApOyBpKyspCisJCQlzZXRfYml0KGlyLT5rZXlfbWFwW2ldLCBpci0+aW5wdXRfZGV2LT5rZXliaXQpOworCisJaXItPmlucHV0X2Rldi0+a2V5Y29kZSA9IGlyLT5rZXlfbWFwOworCWlyLT5pbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKGlyLT5rZXlfbWFwWzBdKTsKKwlpci0+aW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShpci0+a2V5X21hcCk7Cit9CisKK2ludCBfX2RldmluaXQgZG0xMTA1X2lyX2luaXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1KQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlpbnQgZXJyOworCisJZG0xMTA1ZHZiX2xvY2FsID0gZG0xMTA1OworCisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpbnB1dF9kZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZG0xMTA1LT5pci5pbnB1dF9kZXYgPSBpbnB1dF9kZXY7CisJc25wcmludGYoZG0xMTA1LT5pci5pbnB1dF9waHlzLCBzaXplb2YoZG0xMTA1LT5pci5pbnB1dF9waHlzKSwKKwkJInBjaS0lcy9pcjAiLCBwY2lfbmFtZShkbTExMDUtPnBkZXYpKTsKKworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKTsKKwlpbnB1dF9kZXYtPm5hbWUgPSAiRFZCIG9uLWNhcmQgSVIgcmVjZWl2ZXIiOworCisJaW5wdXRfZGV2LT5waHlzID0gZG0xMTA1LT5pci5pbnB1dF9waHlzOworCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19QQ0k7CisJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMjsKKwlpZiAoZG0xMTA1LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yKSB7CisJCWlucHV0X2Rldi0+aWQudmVuZG9yID0gZG0xMTA1LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOworCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBkbTExMDUtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisJfSBlbHNlIHsKKwkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBkbTExMDUtPnBkZXYtPnZlbmRvcjsKKwkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gZG0xMTA1LT5wZGV2LT5kZXZpY2U7CisJfQorCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZkbTExMDUtPnBkZXYtPmRldjsKKwkvKiBpbml0aWFsIGtleW1hcCAqLworCW1lbWNweShkbTExMDUtPmlyLmtleV9tYXAsIGlyX2NvZGVzX2RtMTEwNV9uZWMsIHNpemVvZiBkbTExMDUtPmlyLmtleV9tYXApOworCWlucHV0X3JlZ2lzdGVyX2tleXMoJmRtMTEwNS0+aXIpOworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCWlmIChlcnIpIHsKKwkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl0YXNrbGV0X2luaXQoJmRtMTEwNS0+aXIuaXJfdGFza2xldCwgZG0xMTA1X2VtaXRfa2V5LCAodW5zaWduZWQgbG9uZykgJmRtMTEwNS0+aXIpOworCisJcmV0dXJuIDA7Cit9CisKKwordm9pZCBfX2RldmV4aXQgZG0xMTA1X2lyX2V4aXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1KQoreworCXRhc2tsZXRfa2lsbCgmZG0xMTA1LT5pci5pcl90YXNrbGV0KTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkbTExMDUtPmlyLmlucHV0X2Rldik7CisKK30KKworc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1ZHZiX2h3X2luaXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQoreworCWRtMTEwNWR2Yl9kaXNhYmxlX2lycXMoZG0xMTA1ZHZiKTsKKworCW91dGIoMCwgZG1faW9fbWVtKERNMTEwNV9IT1NUX0NUUikpOworCisJLypEQVRBTEVOIDE4OCwqLworCW91dGIoMTg4LCBkbV9pb19tZW0oRE0xMTA1X0RUQUxFTlRIKSk7CisJLypUU19TVFJUIFRTX1ZBTFAgTVNCRklSU1QgVFNfTU9ERSBBTFBBUyBUU1BFUyovCisJb3V0dygweGMxMGEsIGRtX2lvX21lbShETTExMDVfVFNDVFIpKTsKKworCS8qIG1hcCBETUEgYW5kIHNldCBhZGRyZXNzICovCisJZG0xMTA1ZHZiX2RtYV9tYXAoZG0xMTA1ZHZiKTsKKwlkbTExMDVkdmJfc2V0X2RtYV9hZGRyKGRtMTEwNWR2Yik7CisJLyogYmlnIGJ1ZmZlciAqLworCW91dGwoNSpETTExMDVfRE1BX0JZVEVTLCBkbV9pb19tZW0oRE0xMTA1X1JMRU4pKTsKKwlvdXRiKDQ3LCBkbV9pb19tZW0oRE0xMTA1X0lOVENOVCkpOworCisJLyogSVIgTkVDIG1vZGUgZW5hYmxlICovCisJb3V0YigoRE0xMTA1X0lSX0VOIHwgRE0xMTA1X1NZU19DSEspLCBkbV9pb19tZW0oRE0xMTA1X0lSQ1RSKSk7CisJb3V0YigwLCBkbV9pb19tZW0oRE0xMTA1X0lSTU9ERSkpOworCW91dHcoMCwgZG1faW9fbWVtKERNMTEwNV9TWVNURU1DT0RFKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZG0xMTA1ZHZiX2h3X2V4aXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQoreworCWRtMTEwNWR2Yl9kaXNhYmxlX2lycXMoZG0xMTA1ZHZiKTsKKworCS8qIElSIGRpc2FibGUgKi8KKwlvdXRiKDAsIGRtX2lvX21lbShETTExMDVfSVJDVFIpKTsKKwlvdXRiKElOVE1BS19OT05FTUFTSywgZG1faW9fbWVtKERNMTEwNV9JTlRNQUspKTsKKworCWRtMTEwNWR2Yl9kbWFfdW5tYXAoZG0xMTA1ZHZiKTsKK30KKworc3RhdGljIHN0cnVjdCBzdHYwMjk5X2NvbmZpZyBzaGFycF96MDE5NGFfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKKwkuaW5pdHRhYiA9IHNoYXJwX3owMTk0YV9pbml0dGFiLAorCS5tY2xrID0gODgwMDAwMDBVTCwKKwkuaW52ZXJ0ID0gMSwKKwkuc2tpcF9yZWluaXQgPSAwLAorCS5sb2NrX291dHB1dCA9IFNUVjAyOTlfTE9DS09VVFBVVF8xLAorCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKKwkubWluX2RlbGF5X21zID0gMTAwLAorCS5zZXRfc3ltYm9sX3JhdGUgPSBzaGFycF96MDE5NGFfc2V0X3N5bWJvbF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHYwMjg4X2NvbmZpZyBlYXJkYV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5taW5fZGVsYXlfbXMgPSAxMDAsCit9OworCitzdGF0aWMgc3RydWN0IHNpMjF4eF9jb25maWcgc2VyaXRfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKKwkubWluX2RlbGF5X21zID0gMTAwLAorCit9OworCitzdGF0aWMgc3RydWN0IGN4MjQxMTZfY29uZmlnIHNlcml0X3NwMjYzM19jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDU1LAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgZnJvbnRlbmRfaW5pdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAoZG0xMTA1ZHZiLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0RXMjAwMjoKKwkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCisJCQlzdHYwMjk5X2F0dGFjaCwgJnNoYXJwX3owMTk0YV9jb25maWcsCisJCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7CisKKwkJaWYgKGRtMTEwNWR2Yi0+ZmUpIHsKKwkJCWRtMTEwNWR2Yi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9CisJCQkJCQkJZG0xMTA1ZHZiX3NldF92b2x0YWdlOworCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZG0xMTA1ZHZiLT5mZSwgMHg2MCwKKwkJCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXAsIERWQl9QTExfT1BFUkExKTsKKwkJfQorCisJCWlmICghZG0xMTA1ZHZiLT5mZSkgeworCQkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCisJCQkJc3R2MDI4OF9hdHRhY2gsICZlYXJkYV9jb25maWcsCisJCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOworCQkJaWYgKGRtMTEwNWR2Yi0+ZmUpIHsKKwkJCQlkbTExMDVkdmItPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPQorCQkJCQkJCWRtMTEwNWR2Yl9zZXRfdm9sdGFnZTsKKwkJCQlkdmJfYXR0YWNoKHN0YjYwMDBfYXR0YWNoLCBkbTExMDVkdmItPmZlLCAweDYxLAorCQkJCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOworCQkJfQorCQl9CisKKwkJaWYgKCFkbTExMDVkdmItPmZlKSB7CisJCQlkbTExMDVkdmItPmZlID0gZHZiX2F0dGFjaCgKKwkJCQlzaTIxeHhfYXR0YWNoLCAmc2VyaXRfY29uZmlnLAorCQkJCSZkbTExMDVkdmItPmkyY19hZGFwKTsKKwkJCWlmIChkbTExMDVkdmItPmZlKQorCQkJCWRtMTEwNWR2Yi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9CisJCQkJCQkJZG0xMTA1ZHZiX3NldF92b2x0YWdlOworCQl9CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9EVzIwMDQ6CisJCWRtMTEwNWR2Yi0+ZmUgPSBkdmJfYXR0YWNoKAorCQkJY3gyNDExNl9hdHRhY2gsICZzZXJpdF9zcDI2MzNfY29uZmlnLAorCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOworCQlpZiAoZG0xMTA1ZHZiLT5mZSkKKwkJCWRtMTEwNWR2Yi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNWR2Yl9zZXRfdm9sdGFnZTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFkbTExMDVkdmItPmZlKSB7CisJCWRldl9lcnIoJmRtMTEwNWR2Yi0+cGRldi0+ZGV2LCAiY291bGQgbm90IGF0dGFjaCBmcm9udGVuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmZG0xMTA1ZHZiLT5kdmJfYWRhcHRlciwgZG0xMTA1ZHZiLT5mZSk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKGRtMTEwNWR2Yi0+ZmUtPm9wcy5yZWxlYXNlKQorCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnJlbGVhc2UoZG0xMTA1ZHZiLT5mZSk7CisJCWRtMTEwNWR2Yi0+ZmUgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZG0xMTA1ZHZiX3JlYWRfbWFjKHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiwgdTggKm1hYykKK3sKKwlzdGF0aWMgdTggY29tbWFuZFsxXSA9IHsgMHgyOCB9OworCisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsgLmFkZHIgPSBJSUNfMjRDMDFfYWRkciA+PiAxLCAuZmxhZ3MgPSAwLAorCQkJCS5idWYgPSBjb21tYW5kLCAubGVuID0gMSB9LAorCQl7IC5hZGRyID0gSUlDXzI0QzAxX2FkZHIgPj4gMSwgLmZsYWdzID0gSTJDX01fUkQsCisJCQkJLmJ1ZiA9IG1hYywgLmxlbiA9IDYgfSwKKwl9OworCisJZG0xMTA1X2kyY194ZmVyKCZkbTExMDVkdmItPmkyY19hZGFwLCBtc2cgLCAyKTsKKwlkZXZfaW5mbygmZG0xMTA1ZHZiLT5wZGV2LT5kZXYsICJNQUMgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQltYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmI7CisJc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlcjsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eDsKKwlzdHJ1Y3QgZG14X2RlbXV4ICpkbXg7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlkbTExMDVkdmIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG0xMTA1ZHZiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbTExMDVkdmIpCisJCWdvdG8gb3V0OworCisJZG0xMTA1ZHZiLT5wZGV2ID0gcGRldjsKKwlkbTExMDVkdmItPmJ1ZmZlcl9zaXplID0gNSAqIERNMTEwNV9ETUFfQllURVM7CisJZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID0gMDsKKwlkbTExMDVkdmItPmRtYXJzdCA9IDA7CisKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfa2ZyZWU7CisKKwlyZXQgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSSVZFUl9OQU1FKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOworCisJZG0xMTA1ZHZiLT5pb19tZW0gPSBwY2lfaW9tYXAocGRldiwgMCwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CisJaWYgKCFkbTExMDVkdmItPmlvX21lbSkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zOworCX0KKworCXNwaW5fbG9ja19pbml0KCZkbTExMDVkdmItPmxvY2spOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkbTExMDVkdmIpOworCisJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBkbTExMDVkdmJfaXJxLCBJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUsIGRtMTEwNWR2Yik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX3BjaV9pb3VubWFwOworCisJcmV0ID0gZG0xMTA1ZHZiX2h3X2luaXQoZG0xMTA1ZHZiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKKwkvKiBpMmMgKi8KKwlpMmNfc2V0X2FkYXBkYXRhKCZkbTExMDVkdmItPmkyY19hZGFwLCBkbTExMDVkdmIpOworCXN0cmNweShkbTExMDVkdmItPmkyY19hZGFwLm5hbWUsIERSSVZFUl9OQU1FKTsKKwlkbTExMDVkdmItPmkyY19hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7CisJZG0xMTA1ZHZiLT5pMmNfYWRhcC5jbGFzcyA9IEkyQ19DTEFTU19UVl9ESUdJVEFMOworCWRtMTEwNWR2Yi0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJZG0xMTA1ZHZiLT5pMmNfYWRhcC5hbGdvID0gJmRtMTEwNV9hbGdvOworCWRtMTEwNWR2Yi0+aTJjX2FkYXAuYWxnb19kYXRhID0gZG0xMTA1ZHZiOworCXJldCA9IGkyY19hZGRfYWRhcHRlcigmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7CisKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZG0xMTA1ZHZiX2h3X2V4aXQ7CisKKwkvKiBkdmIgKi8KKwlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZG0xMTA1ZHZiLT5kdmJfYWRhcHRlciwgRFJJVkVSX05BTUUsCisJCQkJCVRISVNfTU9EVUxFLCAmcGRldi0+ZGV2LCBhZGFwdGVyX25yKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfaTJjX2RlbF9hZGFwdGVyOworCisJZHZiX2FkYXB0ZXIgPSAmZG0xMTA1ZHZiLT5kdmJfYWRhcHRlcjsKKworCWRtMTEwNWR2Yl9yZWFkX21hYyhkbTExMDVkdmIsIGR2Yl9hZGFwdGVyLT5wcm9wb3NlZF9tYWMpOworCisJZHZiZGVtdXggPSAmZG0xMTA1ZHZiLT5kZW11eDsKKwlkdmJkZW11eC0+ZmlsdGVybnVtID0gMjU2OworCWR2YmRlbXV4LT5mZWVkbnVtID0gMjU2OworCWR2YmRlbXV4LT5zdGFydF9mZWVkID0gZG0xMTA1ZHZiX3N0YXJ0X2ZlZWQ7CisJZHZiZGVtdXgtPnN0b3BfZmVlZCA9IGRtMTEwNWR2Yl9zdG9wX2ZlZWQ7CisJZHZiZGVtdXgtPmRteC5jYXBhYmlsaXRpZXMgPSAoRE1YX1RTX0ZJTFRFUklORyB8CisJCQlETVhfU0VDVElPTl9GSUxURVJJTkcgfCBETVhfTUVNT1JZX0JBU0VEX0ZJTFRFUklORyk7CisJcmV0ID0gZHZiX2RteF9pbml0KGR2YmRlbXV4KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZHZiX3VucmVnaXN0ZXJfYWRhcHRlcjsKKworCWRteCA9ICZkdmJkZW11eC0+ZG14OworCWRtMTEwNWR2Yi0+ZG14ZGV2LmZpbHRlcm51bSA9IDI1NjsKKwlkbTExMDVkdmItPmRteGRldi5kZW11eCA9IGRteDsKKwlkbTExMDVkdmItPmRteGRldi5jYXBhYmlsaXRpZXMgPSAwOworCisJcmV0ID0gZHZiX2RteGRldl9pbml0KCZkbTExMDVkdmItPmRteGRldiwgZHZiX2FkYXB0ZXIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9kdmJfZG14X3JlbGVhc2U7CisKKwlkbTExMDVkdmItPmh3X2Zyb250ZW5kLnNvdXJjZSA9IERNWF9GUk9OVEVORF8wOworCisJcmV0ID0gZG14LT5hZGRfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5od19mcm9udGVuZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2R2Yl9kbXhkZXZfcmVsZWFzZTsKKworCWRtMTEwNWR2Yi0+bWVtX2Zyb250ZW5kLnNvdXJjZSA9IERNWF9NRU1PUllfRkU7CisKKwlyZXQgPSBkbXgtPmFkZF9mcm9udGVuZChkbXgsICZkbTExMDVkdmItPm1lbV9mcm9udGVuZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX3JlbW92ZV9od19mcm9udGVuZDsKKworCXJldCA9IGRteC0+Y29ubmVjdF9mcm9udGVuZChkbXgsICZkbTExMDVkdmItPmh3X2Zyb250ZW5kKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfcmVtb3ZlX21lbV9mcm9udGVuZDsKKworCXJldCA9IGZyb250ZW5kX2luaXQoZG0xMTA1ZHZiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZGlzY29ubmVjdF9mcm9udGVuZDsKKworCWR2Yl9uZXRfaW5pdChkdmJfYWRhcHRlciwgJmRtMTEwNWR2Yi0+ZHZibmV0LCBkbXgpOworCWRtMTEwNV9pcl9pbml0KGRtMTEwNWR2Yik7CitvdXQ6CisJcmV0dXJuIHJldDsKKworZXJyX2Rpc2Nvbm5lY3RfZnJvbnRlbmQ6CisJZG14LT5kaXNjb25uZWN0X2Zyb250ZW5kKGRteCk7CitlcnJfcmVtb3ZlX21lbV9mcm9udGVuZDoKKwlkbXgtPnJlbW92ZV9mcm9udGVuZChkbXgsICZkbTExMDVkdmItPm1lbV9mcm9udGVuZCk7CitlcnJfcmVtb3ZlX2h3X2Zyb250ZW5kOgorCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQpOworZXJyX2R2Yl9kbXhkZXZfcmVsZWFzZToKKwlkdmJfZG14ZGV2X3JlbGVhc2UoJmRtMTEwNWR2Yi0+ZG14ZGV2KTsKK2Vycl9kdmJfZG14X3JlbGVhc2U6CisJZHZiX2RteF9yZWxlYXNlKGR2YmRlbXV4KTsKK2Vycl9kdmJfdW5yZWdpc3Rlcl9hZGFwdGVyOgorCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoZHZiX2FkYXB0ZXIpOworZXJyX2kyY19kZWxfYWRhcHRlcjoKKwlpMmNfZGVsX2FkYXB0ZXIoJmRtMTEwNWR2Yi0+aTJjX2FkYXApOworZXJyX2RtMTEwNWR2Yl9od19leGl0OgorCWRtMTEwNWR2Yl9od19leGl0KGRtMTEwNWR2Yik7CitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEocGRldi0+aXJxLCBkbTExMDVkdmIpOworZXJyX3BjaV9pb3VubWFwOgorCXBjaV9pb3VubWFwKHBkZXYsIGRtMTEwNWR2Yi0+aW9fbWVtKTsKK2Vycl9wY2lfcmVsZWFzZV9yZWdpb25zOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK2Vycl9rZnJlZToKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUoZG0xMTA1ZHZiKTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRtMTEwNV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXIgPSAmZG0xMTA1ZHZiLT5kdmJfYWRhcHRlcjsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCA9ICZkbTExMDVkdmItPmRlbXV4OworCXN0cnVjdCBkbXhfZGVtdXggKmRteCA9ICZkdmJkZW11eC0+ZG14OworCisJZG0xMTA1X2lyX2V4aXQoZG0xMTA1ZHZiKTsKKwlkbXgtPmNsb3NlKGRteCk7CisJZHZiX25ldF9yZWxlYXNlKCZkbTExMDVkdmItPmR2Ym5ldCk7CisJaWYgKGRtMTEwNWR2Yi0+ZmUpCisJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGRtMTEwNWR2Yi0+ZmUpOworCisJZG14LT5kaXNjb25uZWN0X2Zyb250ZW5kKGRteCk7CisJZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5tZW1fZnJvbnRlbmQpOworCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQpOworCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZG0xMTA1ZHZiLT5kbXhkZXYpOworCWR2Yl9kbXhfcmVsZWFzZShkdmJkZW11eCk7CisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcihkdmJfYWRhcHRlcik7CisJaWYgKCZkbTExMDVkdmItPmkyY19hZGFwKQorCQlpMmNfZGVsX2FkYXB0ZXIoJmRtMTEwNWR2Yi0+aTJjX2FkYXApOworCisJZG0xMTA1ZHZiX2h3X2V4aXQoZG0xMTA1ZHZiKTsKKwlzeW5jaHJvbml6ZV9pcnEocGRldi0+aXJxKTsKKwlmcmVlX2lycShwZGV2LT5pcnEsIGRtMTEwNWR2Yik7CisJcGNpX2lvdW5tYXAocGRldiwgZG0xMTA1ZHZiLT5pb19tZW0pOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShkbTExMDVkdmIpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZG0xMTA1X2lkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7CisJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1RSSUdFTSwKKwkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfRE0xMTA1LAorCQkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZSA9IFBDSV9ERVZJQ0VfSURfRFcyMDAyLAorCX0sIHsKKwkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfVFJJR0VNLAorCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9ETTExMDUsCisJCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlID0gUENJX0RFVklDRV9JRF9EVzIwMDQsCisJfSwgeworCQkvKiBlbXB0eSAqLworCX0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZG0xMTA1X2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRtMTEwNV9kcml2ZXIgPSB7CisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkuaWRfdGFibGUgPSBkbTExMDVfaWRfdGFibGUsCisJLnByb2JlID0gZG0xMTA1X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChkbTExMDVfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRtMTEwNV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRtMTEwNV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZG0xMTA1X2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRtMTEwNV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChkbTExMDVfaW5pdCk7Cittb2R1bGVfZXhpdChkbTExMDVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIklnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbWUuYnk+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNETUMgRE0xMTA1IERWQiBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKaW5kZXggMzUyNmUzZS4uNTY4OWQxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKQEAgLTQwLDEyICs0MCwxNCBAQAogCiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAjaW5jbHVkZSAiZHZiZGV2LmgiCisjaW5jbHVkZSA8bGludXgvZHZiL3ZlcnNpb24uaD4KIAogc3RhdGljIGludCBkdmJfZnJvbnRlbmRfZGVidWc7CiBzdGF0aWMgaW50IGR2Yl9zaHV0ZG93bl90aW1lb3V0Owogc3RhdGljIGludCBkdmJfZm9yY2VfYXV0b19pbnZlcnNpb247CiBzdGF0aWMgaW50IGR2Yl9vdmVycmlkZV90dW5lX2RlbGF5Owogc3RhdGljIGludCBkdmJfcG93ZXJkb3duX29uX3NsZWVwID0gMTsKK3N0YXRpYyBpbnQgZHZiX21mZV93YWl0X3RpbWUgPSA1OwogCiBtb2R1bGVfcGFyYW1fbmFtZWQoZnJvbnRlbmRfZGVidWcsIGR2Yl9mcm9udGVuZF9kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZnJvbnRlbmRfZGVidWcsICJUdXJuIG9uL29mZiBmcm9udGVuZCBjb3JlIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOwpAQCAtNTcsNiArNTksOCBAQAogTU9EVUxFX1BBUk1fREVTQyhkdmJfb3ZlcnJpZGVfdHVuZV9kZWxheSwgIjA6IG5vcm1hbCAoZGVmYXVsdCksID4wID0+IGRlbGF5IGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciBsb2NrIGFmdGVyIGEgdHVuZSBhdHRlbXB0Iik7CiBtb2R1bGVfcGFyYW0oZHZiX3Bvd2VyZG93bl9vbl9zbGVlcCwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZHZiX3Bvd2VyZG93bl9vbl9zbGVlcCwgIjA6IGRvIG5vdCBwb3dlciBkb3duLCAxOiB0dXJuIExOQiB2b2x0YWdlIG9mZiBvbiBzbGVlcCAoZGVmYXVsdCkiKTsKK21vZHVsZV9wYXJhbShkdmJfbWZlX3dhaXRfdGltZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZHZiX21mZV93YWl0X3RpbWUsICJXYWl0IHVwIHRvIDxtZmVfd2FpdF90aW1lPiBzZWNvbmRzIG9uIG9wZW4oKSBmb3IgbXVsdGktZnJvbnRlbmQgdG8gYmVjb21lIGF2YWlsYWJsZSAoZGVmYXVsdDo1IHNlY29uZHMpIik7CiAKICNkZWZpbmUgZHByaW50ayBpZiAoZHZiX2Zyb250ZW5kX2RlYnVnKSBwcmludGsKIApAQCAtMjExLDggKzIxNSw5IEBACiAKIHN0YXRpYyB2b2lkIGR2Yl9mcm9udGVuZF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCWRwcmludGsgKCJEVkI6IGluaXRpYWxpc2luZyBmcm9udGVuZCAlaSAoJXMpLi4uXG4iLAorCWRwcmludGsgKCJEVkI6IGluaXRpYWxpc2luZyBhZGFwdGVyICVpIGZyb250ZW5kICVpICglcykuLi5cbiIsCiAJCSBmZS0+ZHZiLT5udW0sCisJCSBmZS0+aWQsCiAJCSBmZS0+b3BzLmluZm8ubmFtZSk7CiAKIAlpZiAoZmUtPm9wcy5pbml0KQpAQCAtNjg1LDcgKzY5MCw3IEBACiAJbWIoKTsKIAogCWZlX3RocmVhZCA9IGt0aHJlYWRfcnVuKGR2Yl9mcm9udGVuZF90aHJlYWQsIGZlLAotCQkia2R2Yi1mZS0laSIsIGZlLT5kdmItPm51bSk7CisJCSJrZHZiLWFkLSVpLWZlLSVpIiwgZmUtPmR2Yi0+bnVtLGZlLT5pZCk7CiAJaWYgKElTX0VSUihmZV90aHJlYWQpKSB7CiAJCXJldCA9IFBUUl9FUlIoZmVfdGhyZWFkKTsKIAkJcHJpbnRrKCJkdmJfZnJvbnRlbmRfc3RhcnQ6IGZhaWxlZCB0byBzdGFydCBrdGhyZWFkICglZClcbiIsIHJldCk7CkBAIC03MDksOCArNzE0LDggQEAKIAkJKmZyZXFfbWF4ID0gbWluKGZlLT5vcHMuaW5mby5mcmVxdWVuY3lfbWF4LCBmZS0+b3BzLnR1bmVyX29wcy5pbmZvLmZyZXF1ZW5jeV9tYXgpOwogCiAJaWYgKCpmcmVxX21pbiA9PSAwIHx8ICpmcmVxX21heCA9PSAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJEVkI6IGZyb250ZW5kICV1IGZyZXF1ZW5jeSBsaW1pdHMgdW5kZWZpbmVkIC0gZml4IHRoZSBkcml2ZXJcbiIsCi0JCSAgICAgICBmZS0+ZHZiLT5udW0pOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJEVkI6IGFkYXB0ZXIgJWkgZnJvbnRlbmQgJXUgZnJlcXVlbmN5IGxpbWl0cyB1bmRlZmluZWQgLSBmaXggdGhlIGRyaXZlclxuIiwKKwkJICAgICAgIGZlLT5kdmItPm51bSxmZS0+aWQpOwogfQogCiBzdGF0aWMgaW50IGR2Yl9mcm9udGVuZF9jaGVja19wYXJhbWV0ZXJzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLApAQCAtNzIzLDggKzcyOCw4IEBACiAJZHZiX2Zyb250ZW5kX2dldF9mcmVxdWVueV9saW1pdHMoZmUsICZmcmVxX21pbiwgJmZyZXFfbWF4KTsKIAlpZiAoKGZyZXFfbWluICYmIHBhcm1zLT5mcmVxdWVuY3kgPCBmcmVxX21pbikgfHwKIAkgICAgKGZyZXFfbWF4ICYmIHBhcm1zLT5mcmVxdWVuY3kgPiBmcmVxX21heCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBmcm9udGVuZCAldSBmcmVxdWVuY3kgJXUgb3V0IG9mIHJhbmdlICgldS4uJXUpXG4iLAotCQkgICAgICAgZmUtPmR2Yi0+bnVtLCBwYXJtcy0+ZnJlcXVlbmN5LCBmcmVxX21pbiwgZnJlcV9tYXgpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJEVkI6IGFkYXB0ZXIgJWkgZnJvbnRlbmQgJWkgZnJlcXVlbmN5ICV1IG91dCBvZiByYW5nZSAoJXUuLiV1KVxuIiwKKwkJICAgICAgIGZlLT5kdmItPm51bSwgZmUtPmlkLCBwYXJtcy0+ZnJlcXVlbmN5LCBmcmVxX21pbiwgZnJlcV9tYXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTczNCw4ICs3MzksOCBAQAogCQkgICAgIHBhcm1zLT51LnFwc2suc3ltYm9sX3JhdGUgPCBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWluKSB8fAogCQkgICAgKGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9tYXggJiYKIAkJICAgICBwYXJtcy0+dS5xcHNrLnN5bWJvbF9yYXRlID4gZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21heCkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRWQjogZnJvbnRlbmQgJXUgc3ltYm9sIHJhdGUgJXUgb3V0IG9mIHJhbmdlICgldS4uJXUpXG4iLAotCQkJICAgICAgIGZlLT5kdmItPm51bSwgcGFybXMtPnUucXBzay5zeW1ib2xfcmF0ZSwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRWQjogYWRhcHRlciAlaSBmcm9udGVuZCAlaSBzeW1ib2wgcmF0ZSAldSBvdXQgb2YgcmFuZ2UgKCV1Li4ldSlcbiIsCisJCQkgICAgICAgZmUtPmR2Yi0+bnVtLCBmZS0+aWQsIHBhcm1zLT51LnFwc2suc3ltYm9sX3JhdGUsCiAJCQkgICAgICAgZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21pbiwgZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21heCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtNzQ1LDggKzc1MCw4IEBACiAJCSAgICAgcGFybXMtPnUucWFtLnN5bWJvbF9yYXRlIDwgZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21pbikgfHwKIAkJICAgIChmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4ICYmCiAJCSAgICAgcGFybXMtPnUucWFtLnN5bWJvbF9yYXRlID4gZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21heCkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRWQjogZnJvbnRlbmQgJXUgc3ltYm9sIHJhdGUgJXUgb3V0IG9mIHJhbmdlICgldS4uJXUpXG4iLAotCQkJICAgICAgIGZlLT5kdmItPm51bSwgcGFybXMtPnUucWFtLnN5bWJvbF9yYXRlLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBhZGFwdGVyICVpIGZyb250ZW5kICVpIHN5bWJvbCByYXRlICV1IG91dCBvZiByYW5nZSAoJXUuLiV1KVxuIiwKKwkJCSAgICAgICBmZS0+ZHZiLT5udW0sIGZlLT5pZCwgcGFybXMtPnUucWFtLnN5bWJvbF9yYXRlLAogCQkJICAgICAgIGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9taW4sIGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9tYXgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTc1NSw2ICs3NjAsNTI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0cnVjdCBkdHZfY21kc19oIGR0dl9jbWRzW10gPSB7CisJW0RUVl9UVU5FXSA9IHsKKwkJLm5hbWUJPSAiRFRWX1RVTkUiLAorCQkuY21kCT0gRFRWX1RVTkUsCisJCS5zZXQJPSAxLAorCX0sCisJW0RUVl9DTEVBUl0gPSB7CisJCS5uYW1lCT0gIkRUVl9DTEVBUiIsCisJCS5jbWQJPSBEVFZfQ0xFQVIsCisJCS5zZXQJPSAxLAorCX0sCisKKwkvKiBTZXQgKi8KKwlbRFRWX0ZSRVFVRU5DWV0gPSB7CisJCS5uYW1lCT0gIkRUVl9GUkVRVUVOQ1kiLAorCQkuY21kCT0gRFRWX0ZSRVFVRU5DWSwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX0JBTkRXSURUSF9IWl0gPSB7CisJCS5uYW1lCT0gIkRUVl9CQU5EV0lEVEhfSFoiLAorCQkuY21kCT0gRFRWX0JBTkRXSURUSF9IWiwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX01PRFVMQVRJT05dID0geworCQkubmFtZQk9ICJEVFZfTU9EVUxBVElPTiIsCisJCS5jbWQJPSBEVFZfTU9EVUxBVElPTiwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX0lOVkVSU0lPTl0gPSB7CisJCS5uYW1lCT0gIkRUVl9JTlZFUlNJT04iLAorCQkuY21kCT0gRFRWX0lOVkVSU0lPTiwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX0RJU0VRQ19NQVNURVJdID0geworCQkubmFtZQk9ICJEVFZfRElTRVFDX01BU1RFUiIsCisJCS5jbWQJPSBEVFZfRElTRVFDX01BU1RFUiwKKwkJLnNldAk9IDEsCisJCS5idWZmZXIJPSAxLAorCX0sCisJW0RUVl9TWU1CT0xfUkFURV0gPSB7CisJCS5uYW1lCT0gIkRUVl9TWU1CT0xfUkFURSIsCisJCS5jbWQJPSBEVFZfU1lNQk9MX1JBVEUsCisJCS5zZXQJPSAxLAorCX0sCisJW0RUVl9JTk5FUl9GRUNdID0geworCQkubmFtZQk9ICJEVFZfSU5ORVJfRkVDIiwKKwkJLmNtZAk9IERUVl9JTk5FUl9GRUMsCisJCS5zZXQJPSAxLAorCX0sCisJW0RUVl9WT0xUQUdFXSA9IHsKKwkJLm5hbWUJPSAiRFRWX1ZPTFRBR0UiLAorCQkuY21kCT0gRFRWX1ZPTFRBR0UsCisJCS5zZXQJPSAxLAorCX0sCisJW0RUVl9UT05FXSA9IHsKKwkJLm5hbWUJPSAiRFRWX1RPTkUiLAorCQkuY21kCT0gRFRWX1RPTkUsCisJCS5zZXQJPSAxLAorCX0sCisJW0RUVl9QSUxPVF0gPSB7CisJCS5uYW1lCT0gIkRUVl9QSUxPVCIsCisJCS5jbWQJPSBEVFZfUElMT1QsCisJCS5zZXQJPSAxLAorCX0sCisJW0RUVl9ST0xMT0ZGXSA9IHsKKwkJLm5hbWUJPSAiRFRWX1JPTExPRkYiLAorCQkuY21kCT0gRFRWX1JPTExPRkYsCisJCS5zZXQJPSAxLAorCX0sCisJW0RUVl9ERUxJVkVSWV9TWVNURU1dID0geworCQkubmFtZQk9ICJEVFZfREVMSVZFUllfU1lTVEVNIiwKKwkJLmNtZAk9IERUVl9ERUxJVkVSWV9TWVNURU0sCisJCS5zZXQJPSAxLAorCX0sCisJW0RUVl9ISUVSQVJDSFldID0geworCQkubmFtZQk9ICJEVFZfSElFUkFSQ0hZIiwKKwkJLmNtZAk9IERUVl9ISUVSQVJDSFksCisJCS5zZXQJPSAxLAorCX0sCisJW0RUVl9DT0RFX1JBVEVfSFBdID0geworCQkubmFtZQk9ICJEVFZfQ09ERV9SQVRFX0hQIiwKKwkJLmNtZAk9IERUVl9DT0RFX1JBVEVfSFAsCisJCS5zZXQJPSAxLAorCX0sCisJW0RUVl9DT0RFX1JBVEVfTFBdID0geworCQkubmFtZQk9ICJEVFZfQ09ERV9SQVRFX0xQIiwKKwkJLmNtZAk9IERUVl9DT0RFX1JBVEVfTFAsCisJCS5zZXQJPSAxLAorCX0sCisJW0RUVl9HVUFSRF9JTlRFUlZBTF0gPSB7CisJCS5uYW1lCT0gIkRUVl9HVUFSRF9JTlRFUlZBTCIsCisJCS5jbWQJPSBEVFZfR1VBUkRfSU5URVJWQUwsCisJCS5zZXQJPSAxLAorCX0sCisJW0RUVl9UUkFOU01JU1NJT05fTU9ERV0gPSB7CisJCS5uYW1lCT0gIkRUVl9UUkFOU01JU1NJT05fTU9ERSIsCisJCS5jbWQJPSBEVFZfVFJBTlNNSVNTSU9OX01PREUsCisJCS5zZXQJPSAxLAorCX0sCisJLyogR2V0ICovCisJW0RUVl9ESVNFUUNfU0xBVkVfUkVQTFldID0geworCQkubmFtZQk9ICJEVFZfRElTRVFDX1NMQVZFX1JFUExZIiwKKwkJLmNtZAk9IERUVl9ESVNFUUNfU0xBVkVfUkVQTFksCisJCS5zZXQJPSAwLAorCQkuYnVmZmVyCT0gMSwKKwl9LAorCVtEVFZfQVBJX1ZFUlNJT05dID0geworCQkubmFtZQk9ICJEVFZfQVBJX1ZFUlNJT04iLAorCQkuY21kCT0gRFRWX0FQSV9WRVJTSU9OLAorCQkuc2V0CT0gMCwKKwl9LAorCVtEVFZfQ09ERV9SQVRFX0hQXSA9IHsKKwkJLm5hbWUJPSAiRFRWX0NPREVfUkFURV9IUCIsCisJCS5jbWQJPSBEVFZfQ09ERV9SQVRFX0hQLAorCQkuc2V0CT0gMCwKKwl9LAorCVtEVFZfQ09ERV9SQVRFX0xQXSA9IHsKKwkJLm5hbWUJPSAiRFRWX0NPREVfUkFURV9MUCIsCisJCS5jbWQJPSBEVFZfQ09ERV9SQVRFX0xQLAorCQkuc2V0CT0gMCwKKwl9LAorCVtEVFZfR1VBUkRfSU5URVJWQUxdID0geworCQkubmFtZQk9ICJEVFZfR1VBUkRfSU5URVJWQUwiLAorCQkuY21kCT0gRFRWX0dVQVJEX0lOVEVSVkFMLAorCQkuc2V0CT0gMCwKKwl9LAorCVtEVFZfVFJBTlNNSVNTSU9OX01PREVdID0geworCQkubmFtZQk9ICJEVFZfVFJBTlNNSVNTSU9OX01PREUiLAorCQkuY21kCT0gRFRWX1RSQU5TTUlTU0lPTl9NT0RFLAorCQkuc2V0CT0gMCwKKwl9LAorCVtEVFZfSElFUkFSQ0hZXSA9IHsKKwkJLm5hbWUJPSAiRFRWX0hJRVJBUkNIWSIsCisJCS5jbWQJPSBEVFZfSElFUkFSQ0hZLAorCQkuc2V0CT0gMCwKKwl9LAorfTsKKwordm9pZCBkdHZfcHJvcGVydHlfZHVtcChzdHJ1Y3QgZHR2X3Byb3BlcnR5ICp0dnApCit7CisJaW50IGk7CisKKwlpZiAodHZwLT5jbWQgPD0gMCB8fCB0dnAtPmNtZCA+IERUVl9NQVhfQ09NTUFORCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdHZwLmNtZCA9IDB4JTA4eCB1bmRlZmluZWRcbiIsCisJCQlfX2Z1bmNfXywgdHZwLT5jbWQpOworCQlyZXR1cm47CisJfQorCisJZHByaW50aygiJXMoKSB0dnAuY21kICAgID0gMHglMDh4ICglcylcbiIKKwkJLF9fZnVuY19fCisJCSx0dnAtPmNtZAorCQksZHR2X2NtZHNbIHR2cC0+Y21kIF0ubmFtZSk7CisKKwlpZihkdHZfY21kc1sgdHZwLT5jbWQgXS5idWZmZXIpIHsKKworCQlkcHJpbnRrKCIlcygpIHR2cC51LmJ1ZmZlci5sZW4gPSAweCUwMnhcbiIKKwkJCSxfX2Z1bmNfXworCQkJLHR2cC0+dS5idWZmZXIubGVuKTsKKworCQlmb3IoaSA9IDA7IGkgPCB0dnAtPnUuYnVmZmVyLmxlbjsgaSsrKQorCQkJZHByaW50aygiJXMoKSB0dnAudS5idWZmZXIuZGF0YVsweCUwMnhdID0gMHglMDJ4XG4iCisJCQkJLF9fZnVuY19fCisJCQkJLGkKKwkJCQksdHZwLT51LmJ1ZmZlci5kYXRhW2ldKTsKKworCX0gZWxzZQorCQlkcHJpbnRrKCIlcygpIHR2cC51LmRhdGEgPSAweCUwOHhcbiIsIF9fZnVuY19fLCB0dnAtPnUuZGF0YSk7Cit9CisKK2ludCBpc19sZWdhY3lfZGVsaXZlcnlfc3lzdGVtKGZlX2RlbGl2ZXJ5X3N5c3RlbV90IHMpCit7CisJaWYoKHMgPT0gU1lTX1VOREVGSU5FRCkgfHwgKHMgPT0gU1lTX0RWQkNfQU5ORVhfQUMpIHx8CisJCShzID09IFNZU19EVkJDX0FOTkVYX0IpIHx8IChzID09IFNZU19EVkJUKSB8fCAocyA9PSBTWVNfRFZCUykpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFN5bmNocm9uaXNlIHRoZSBsZWdhY3kgdHVuaW5nIHBhcmFtZXRlcnMgaW50byB0aGUgY2FjaGUsIHNvIHRoYXQgZGVtb2R1bGF0b3IKKyAqIGRyaXZlcnMgY2FuIHVzZSBhIHNpbmdsZSBzZXRfZnJvbnRlbmQgdHVuaW5nIGZ1bmN0aW9uLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKKyAqIGl0J3MgYmVpbmcgdXNlZCBmb3IgdGhlIGxlZ2FjeSBvciBuZXcgQVBJLCByZWR1Y2luZyBjb2RlIGFuZCBjb21wbGV4aXR5LgorICovCit2b2lkIGR0dl9wcm9wZXJ0eV9jYWNoZV9zeW5jKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CisKKwljLT5mcmVxdWVuY3kgPSBwLT5mcmVxdWVuY3k7CisJYy0+aW52ZXJzaW9uID0gcC0+aW52ZXJzaW9uOworCisJc3dpdGNoIChmZS0+b3BzLmluZm8udHlwZSkgeworCWNhc2UgRkVfUVBTSzoKKwkJYy0+bW9kdWxhdGlvbiA9IFFQU0s7ICAgLyogaW1wbGllZCBmb3IgRFZCLVMgaW4gbGVnYWN5IEFQSSAqLworCQljLT5yb2xsb2ZmID0gUk9MTE9GRl8zNTsvKiBpbXBsaWVkIGZvciBEVkItUyAqLworCQljLT5zeW1ib2xfcmF0ZSA9IHAtPnUucXBzay5zeW1ib2xfcmF0ZTsKKwkJYy0+ZmVjX2lubmVyID0gcC0+dS5xcHNrLmZlY19pbm5lcjsKKwkJYy0+ZGVsaXZlcnlfc3lzdGVtID0gU1lTX0RWQlM7CisJCWJyZWFrOworCWNhc2UgRkVfUUFNOgorCQljLT5zeW1ib2xfcmF0ZSA9IHAtPnUucWFtLnN5bWJvbF9yYXRlOworCQljLT5mZWNfaW5uZXIgPSBwLT51LnFhbS5mZWNfaW5uZXI7CisJCWMtPm1vZHVsYXRpb24gPSBwLT51LnFhbS5tb2R1bGF0aW9uOworCQljLT5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfRFZCQ19BTk5FWF9BQzsKKwkJYnJlYWs7CisJY2FzZSBGRV9PRkRNOgorCQlpZiAocC0+dS5vZmRtLmJhbmR3aWR0aCA9PSBCQU5EV0lEVEhfNl9NSFopCisJCQljLT5iYW5kd2lkdGhfaHogPSA2MDAwMDAwOworCQllbHNlIGlmIChwLT51Lm9mZG0uYmFuZHdpZHRoID09IEJBTkRXSURUSF83X01IWikKKwkJCWMtPmJhbmR3aWR0aF9oeiA9IDcwMDAwMDA7CisJCWVsc2UgaWYgKHAtPnUub2ZkbS5iYW5kd2lkdGggPT0gQkFORFdJRFRIXzhfTUhaKQorCQkJYy0+YmFuZHdpZHRoX2h6ID0gODAwMDAwMDsKKwkJZWxzZQorCQkJLyogSW5jbHVkaW5nIEJBTkRXSURUSF9BVVRPICovCisJCQljLT5iYW5kd2lkdGhfaHogPSAwOworCQljLT5jb2RlX3JhdGVfSFAgPSBwLT51Lm9mZG0uY29kZV9yYXRlX0hQOworCQljLT5jb2RlX3JhdGVfTFAgPSBwLT51Lm9mZG0uY29kZV9yYXRlX0xQOworCQljLT5tb2R1bGF0aW9uID0gcC0+dS5vZmRtLmNvbnN0ZWxsYXRpb247CisJCWMtPnRyYW5zbWlzc2lvbl9tb2RlID0gcC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlOworCQljLT5ndWFyZF9pbnRlcnZhbCA9IHAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbDsKKwkJYy0+aGllcmFyY2h5ID0gcC0+dS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbjsKKwkJYy0+ZGVsaXZlcnlfc3lzdGVtID0gU1lTX0RWQlQ7CisJCWJyZWFrOworCWNhc2UgRkVfQVRTQzoKKwkJYy0+bW9kdWxhdGlvbiA9IHAtPnUudnNiLm1vZHVsYXRpb247CisJCWlmICgoYy0+bW9kdWxhdGlvbiA9PSBWU0JfOCkgfHwgKGMtPm1vZHVsYXRpb24gPT0gVlNCXzE2KSkKKwkJCWMtPmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19BVFNDOworCQllbHNlCisJCQljLT5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfRFZCQ19BTk5FWF9COworCQlicmVhazsKKwl9Cit9CisKKy8qIEVuc3VyZSB0aGUgY2FjaGVkIHZhbHVlcyBhcmUgc2V0IGNvcnJlY3RseSBpbiB0aGUgZnJvbnRlbmQKKyAqIGxlZ2FjeSB0dW5pbmcgc3RydWN0dXJlcywgZm9yIHRoZSBhZHZhbmNlZCB0dW5pbmcgQVBJLgorICovCit2b2lkIGR0dl9wcm9wZXJ0eV9sZWdhY3lfcGFyYW1zX3N5bmMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnAgPSAmZmVwcml2LT5wYXJhbWV0ZXJzOworCisJcC0+ZnJlcXVlbmN5ID0gYy0+ZnJlcXVlbmN5OworCXAtPmludmVyc2lvbiA9IGMtPmludmVyc2lvbjsKKworCXN3aXRjaCAoZmUtPm9wcy5pbmZvLnR5cGUpIHsKKwljYXNlIEZFX1FQU0s6CisJCWRwcmludGsoIiVzKCkgUHJlcGFyaW5nIFFQU0sgcmVxXG4iLCBfX2Z1bmNfXyk7CisJCXAtPnUucXBzay5zeW1ib2xfcmF0ZSA9IGMtPnN5bWJvbF9yYXRlOworCQlwLT51LnFwc2suZmVjX2lubmVyID0gYy0+ZmVjX2lubmVyOworCQljLT5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfRFZCUzsKKwkJYnJlYWs7CisJY2FzZSBGRV9RQU06CisJCWRwcmludGsoIiVzKCkgUHJlcGFyaW5nIFFBTSByZXFcbiIsIF9fZnVuY19fKTsKKwkJcC0+dS5xYW0uc3ltYm9sX3JhdGUgPSBjLT5zeW1ib2xfcmF0ZTsKKwkJcC0+dS5xYW0uZmVjX2lubmVyID0gYy0+ZmVjX2lubmVyOworCQlwLT51LnFhbS5tb2R1bGF0aW9uID0gYy0+bW9kdWxhdGlvbjsKKwkJYy0+ZGVsaXZlcnlfc3lzdGVtID0gU1lTX0RWQkNfQU5ORVhfQUM7CisJCWJyZWFrOworCWNhc2UgRkVfT0ZETToKKwkJZHByaW50aygiJXMoKSBQcmVwYXJpbmcgT0ZETSByZXFcbiIsIF9fZnVuY19fKTsKKwkJaWYgKGMtPmJhbmR3aWR0aF9oeiA9PSA2MDAwMDAwKQorCQkJcC0+dS5vZmRtLmJhbmR3aWR0aCA9IEJBTkRXSURUSF82X01IWjsKKwkJZWxzZSBpZiAoYy0+YmFuZHdpZHRoX2h6ID09IDcwMDAwMDApCisJCQlwLT51Lm9mZG0uYmFuZHdpZHRoID0gQkFORFdJRFRIXzdfTUhaOworCQllbHNlIGlmIChjLT5iYW5kd2lkdGhfaHogPT0gODAwMDAwMCkKKwkJCXAtPnUub2ZkbS5iYW5kd2lkdGggPSBCQU5EV0lEVEhfOF9NSFo7CisJCWVsc2UKKwkJCXAtPnUub2ZkbS5iYW5kd2lkdGggPSBCQU5EV0lEVEhfQVVUTzsKKwkJcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9IGMtPmNvZGVfcmF0ZV9IUDsKKwkJcC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9IGMtPmNvZGVfcmF0ZV9MUDsKKwkJcC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24gPSBjLT5tb2R1bGF0aW9uOworCQlwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUgPSBjLT50cmFuc21pc3Npb25fbW9kZTsKKwkJcC0+dS5vZmRtLmd1YXJkX2ludGVydmFsID0gYy0+Z3VhcmRfaW50ZXJ2YWw7CisJCXAtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBjLT5oaWVyYXJjaHk7CisJCWMtPmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19EVkJUOworCQlicmVhazsKKwljYXNlIEZFX0FUU0M6CisJCWRwcmludGsoIiVzKCkgUHJlcGFyaW5nIFZTQiByZXFcbiIsIF9fZnVuY19fKTsKKwkJcC0+dS52c2IubW9kdWxhdGlvbiA9IGMtPm1vZHVsYXRpb247CisJCWlmICgoYy0+bW9kdWxhdGlvbiA9PSBWU0JfOCkgfHwgKGMtPm1vZHVsYXRpb24gPT0gVlNCXzE2KSkKKwkJCWMtPmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19BVFNDOworCQllbHNlCisJCQljLT5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfRFZCQ19BTk5FWF9COworCQlicmVhazsKKwl9Cit9CisKKy8qIEVuc3VyZSB0aGUgY2FjaGVkIHZhbHVlcyBhcmUgc2V0IGNvcnJlY3RseSBpbiB0aGUgZnJvbnRlbmQKKyAqIGxlZ2FjeSB0dW5pbmcgc3RydWN0dXJlcywgZm9yIHRoZSBsZWdhY3kgdHVuaW5nIEFQSS4KKyAqLwordm9pZCBkdHZfcHJvcGVydHlfYWR2X3BhcmFtc19zeW5jKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOworCXN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZSAqZmVwcml2ID0gZmUtPmZyb250ZW5kX3ByaXY7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwID0gJmZlcHJpdi0+cGFyYW1ldGVyczsKKworCXAtPmZyZXF1ZW5jeSA9IGMtPmZyZXF1ZW5jeTsKKwlwLT5pbnZlcnNpb24gPSBjLT5pbnZlcnNpb247CisKKwlzd2l0Y2goYy0+bW9kdWxhdGlvbikgeworCWNhc2UgUFNLXzg6CisJY2FzZSBBUFNLXzE2OgorCWNhc2UgQVBTS18zMjoKKwljYXNlIFFQU0s6CisJCXAtPnUucXBzay5zeW1ib2xfcmF0ZSA9IGMtPnN5bWJvbF9yYXRlOworCQlwLT51LnFwc2suZmVjX2lubmVyID0gYy0+ZmVjX2lubmVyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZihjLT5kZWxpdmVyeV9zeXN0ZW0gPT0gU1lTX0lTREJUKSB7CisJCS8qIEZha2Ugb3V0IGEgZ2VuZXJpYyBEVkItVCByZXF1ZXN0IHNvIHdlIHBhc3MgdmFsaWRhdGlvbiBpbiB0aGUgaW9jdGwgKi8KKwkJcC0+ZnJlcXVlbmN5ID0gYy0+ZnJlcXVlbmN5OworCQlwLT5pbnZlcnNpb24gPSBJTlZFUlNJT05fQVVUTzsKKwkJcC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24gPSBRQU1fQVVUTzsKKwkJcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9IEZFQ19BVVRPOworCQlwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDX0FVVE87CisJCXAtPnUub2ZkbS5iYW5kd2lkdGggPSBCQU5EV0lEVEhfQVVUTzsKKwkJcC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfQVVUTzsKKwkJcC0+dS5vZmRtLmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfQVVUTzsKKwkJcC0+dS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9BVVRPOworCX0KK30KKwordm9pZCBkdHZfcHJvcGVydHlfY2FjaGVfc3VibWl0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOworCisJLyogRm9yIGxlZ2FjeSBkZWxpdmVyeSBzeXN0ZW1zIHdlIGRvbid0IG5lZWQgdGhlIGRlbGl2ZXJ5X3N5c3RlbSB0bworCSAqIGJlIHNwZWNpZmllZCwgYnV0IHdlIHBvcHVsYXRlIHRoZSBvbGRlciBzdHJ1Y3R1cmVzIGZyb20gdGhlIGNhY2hlCisJICogc28gd2UgY2FuIGNhbGwgc2V0X2Zyb250ZW5kIG9uIG9sZGVyIGRyaXZlcnMuCisJICovCisJaWYoaXNfbGVnYWN5X2RlbGl2ZXJ5X3N5c3RlbShjLT5kZWxpdmVyeV9zeXN0ZW0pKSB7CisKKwkJZHByaW50aygiJXMoKSBsZWdhY3ksIG1vZHVsYXRpb24gPSAlZFxuIiwgX19mdW5jX18sIGMtPm1vZHVsYXRpb24pOworCQlkdHZfcHJvcGVydHlfbGVnYWN5X3BhcmFtc19zeW5jKGZlKTsKKworCX0gZWxzZSB7CisJCWRwcmludGsoIiVzKCkgYWR2LCBtb2R1bGF0aW9uID0gJWRcbiIsIF9fZnVuY19fLCBjLT5tb2R1bGF0aW9uKTsKKworCQkvKiBGb3IgYWR2YW5jZWQgZGVsaXZlcnkgc3lzdGVtcyAvIG1vZHVsYXRpb24gdHlwZXMgLi4uCisJCSAqIHdlIHNlZWQgdGhlIGxlY2FjeSBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyBzdHJ1Y3R1cmUKKwkJICogc28gdGhhdCB0aGUgc2FuaXR5IGNoZWNraW5nIGNvZGUgbGF0ZXIgaW4gdGhlIElPQ1RMIHByb2Nlc3NpbmcKKwkJICogY2FuIHZhbGlkYXRlIG91ciBiYXNpYyBmcmVxdWVuY3kgcmFuZ2VzLCBzeW1ib2xyYXRlcywgbW9kdWxhdGlvbgorCQkgKiBldGMuCisJCSAqLworCQlkdHZfcHJvcGVydHlfYWR2X3BhcmFtc19zeW5jKGZlKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZHZiX2Zyb250ZW5kX2lvY3RsX2xlZ2FjeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnBhcmcpOworc3RhdGljIGludCBkdmJfZnJvbnRlbmRfaW9jdGxfcHJvcGVydGllcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnBhcmcpOworCitpbnQgZHR2X3Byb3BlcnR5X3Byb2Nlc3NfZ2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHR2X3Byb3BlcnR5ICp0dnAsCisJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHIgPSAwOworCisJZHR2X3Byb3BlcnR5X2R1bXAodHZwKTsKKworCS8qIEFsbG93IHRoZSBmcm9udGVuZCB0byB2YWxpZGF0ZSBpbmNvbWluZyBwcm9wZXJ0aWVzICovCisJaWYgKGZlLT5vcHMuZ2V0X3Byb3BlcnR5KQorCQlyID0gZmUtPm9wcy5nZXRfcHJvcGVydHkoZmUsIHR2cCk7CisKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJc3dpdGNoKHR2cC0+Y21kKSB7CisJY2FzZSBEVFZfRlJFUVVFTkNZOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZnJlcXVlbmN5OworCQlicmVhazsKKwljYXNlIERUVl9NT0RVTEFUSU9OOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUubW9kdWxhdGlvbjsKKwkJYnJlYWs7CisJY2FzZSBEVFZfQkFORFdJRFRIX0haOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuYmFuZHdpZHRoX2h6OworCQlicmVhazsKKwljYXNlIERUVl9JTlZFUlNJT046CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pbnZlcnNpb247CisJCWJyZWFrOworCWNhc2UgRFRWX1NZTUJPTF9SQVRFOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuc3ltYm9sX3JhdGU7CisJCWJyZWFrOworCWNhc2UgRFRWX0lOTkVSX0ZFQzoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmZlY19pbm5lcjsKKwkJYnJlYWs7CisJY2FzZSBEVFZfUElMT1Q6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5waWxvdDsKKwkJYnJlYWs7CisJY2FzZSBEVFZfUk9MTE9GRjoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnJvbGxvZmY7CisJCWJyZWFrOworCWNhc2UgRFRWX0RFTElWRVJZX1NZU1RFTToKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmRlbGl2ZXJ5X3N5c3RlbTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfVk9MVEFHRToKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnZvbHRhZ2U7CisJCWJyZWFrOworCWNhc2UgRFRWX1RPTkU6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zZWN0b25lOworCQlicmVhazsKKwljYXNlIERUVl9BUElfVkVSU0lPTjoKKwkJdHZwLT51LmRhdGEgPSAoRFZCX0FQSV9WRVJTSU9OIDw8IDgpIHwgRFZCX0FQSV9WRVJTSU9OX01JTk9SOworCQlicmVhazsKKwljYXNlIERUVl9DT0RFX1JBVEVfSFA6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5jb2RlX3JhdGVfSFA7CisJCWJyZWFrOworCWNhc2UgRFRWX0NPREVfUkFURV9MUDoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmNvZGVfcmF0ZV9MUDsKKwkJYnJlYWs7CisJY2FzZSBEVFZfR1VBUkRfSU5URVJWQUw6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5ndWFyZF9pbnRlcnZhbDsKKwkJYnJlYWs7CisJY2FzZSBEVFZfVFJBTlNNSVNTSU9OX01PREU6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS50cmFuc21pc3Npb25fbW9kZTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSElFUkFSQ0hZOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaGllcmFyY2h5OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyID0gLTE7CisJfQorCisJcmV0dXJuIHI7Cit9CisKK2ludCBkdHZfcHJvcGVydHlfcHJvY2Vzc19zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdHZfcHJvcGVydHkgKnR2cCwKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgciA9IDA7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKKwlkdHZfcHJvcGVydHlfZHVtcCh0dnApOworCisJLyogQWxsb3cgdGhlIGZyb250ZW5kIHRvIHZhbGlkYXRlIGluY29taW5nIHByb3BlcnRpZXMgKi8KKwlpZiAoZmUtPm9wcy5zZXRfcHJvcGVydHkpCisJCXIgPSBmZS0+b3BzLnNldF9wcm9wZXJ0eShmZSwgdHZwKTsKKworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlzd2l0Y2godHZwLT5jbWQpIHsKKwljYXNlIERUVl9DTEVBUjoKKwkJLyogUmVzZXQgYSBjYWNoZSBvZiBkYXRhIHNwZWNpZmljIHRvIHRoZSBmcm9udGVuZCBoZXJlLiBUaGlzIGRvZXMKKwkJICogbm90IGVmZmVjdCBoYXJkd2FyZS4KKwkJICovCisJCWRwcmludGsoIiVzKCkgRmx1c2hpbmcgcHJvcGVydHkgY2FjaGVcbiIsIF9fZnVuY19fKTsKKwkJbWVtc2V0KCZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLCAwLCBzaXplb2Yoc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzKSk7CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuc3RhdGUgPSB0dnAtPmNtZDsKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfVU5ERUZJTkVEOworCQlicmVhazsKKwljYXNlIERUVl9UVU5FOgorCQkvKiBpbnRlcnByZXQgdGhlIGNhY2hlIG9mIGRhdGEsIGJ1aWxkIGVpdGhlciBhIHRyYWRpdGlvbmFsIGZyb250ZW5kCisJCSAqIHR1bmVyZXF1ZXN0IHNvIHdlIGNhbiBwYXNzIHZhbGlkYXRpb24gaW4gdGhlIEZFX1NFVF9GUk9OVEVORAorCQkgKiBpb2N0bC4KKwkJICovCisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuc3RhdGUgPSB0dnAtPmNtZDsKKwkJZHByaW50aygiJXMoKSBGaW5hbGlzZWQgcHJvcGVydHkgY2FjaGVcbiIsIF9fZnVuY19fKTsKKwkJZHR2X3Byb3BlcnR5X2NhY2hlX3N1Ym1pdChmZSk7CisKKwkJciB8PSBkdmJfZnJvbnRlbmRfaW9jdGxfbGVnYWN5KGlub2RlLCBmaWxlLCBGRV9TRVRfRlJPTlRFTkQsCisJCQkmZmVwcml2LT5wYXJhbWV0ZXJzKTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfRlJFUVVFTkNZOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmZyZXF1ZW5jeSA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9NT0RVTEFUSU9OOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLm1vZHVsYXRpb24gPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfQkFORFdJRFRIX0haOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmJhbmR3aWR0aF9oeiA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9JTlZFUlNJT046CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuaW52ZXJzaW9uID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX1NZTUJPTF9SQVRFOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnN5bWJvbF9yYXRlID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lOTkVSX0ZFQzoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5mZWNfaW5uZXIgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfUElMT1Q6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUucGlsb3QgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfUk9MTE9GRjoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5yb2xsb2ZmID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0RFTElWRVJZX1NZU1RFTToKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfVk9MVEFHRToKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS52b2x0YWdlID0gdHZwLT51LmRhdGE7CisJCXIgPSBkdmJfZnJvbnRlbmRfaW9jdGxfbGVnYWN5KGlub2RlLCBmaWxlLCBGRV9TRVRfVk9MVEFHRSwKKwkJCSh2b2lkICopZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS52b2x0YWdlKTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfVE9ORToKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zZWN0b25lID0gdHZwLT51LmRhdGE7CisJCXIgPSBkdmJfZnJvbnRlbmRfaW9jdGxfbGVnYWN5KGlub2RlLCBmaWxlLCBGRV9TRVRfVE9ORSwKKwkJCSh2b2lkICopZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zZWN0b25lKTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfQ09ERV9SQVRFX0hQOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmNvZGVfcmF0ZV9IUCA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9DT0RFX1JBVEVfTFA6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuY29kZV9yYXRlX0xQID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0dVQVJEX0lOVEVSVkFMOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmd1YXJkX2ludGVydmFsID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX1RSQU5TTUlTU0lPTl9NT0RFOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnRyYW5zbWlzc2lvbl9tb2RlID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0hJRVJBUkNIWToKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5oaWVyYXJjaHkgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJciA9IC0xOworCX0KKworCXJldHVybiByOworfQorCiBzdGF0aWMgaW50IGR2Yl9mcm9udGVuZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnBhcmcpCiB7CkBAIC03NzYsNiArMTMwNCwxMTIgQEAKIAlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmZmVwcml2LT5zZW0pKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCisJaWYgKChjbWQgPT0gRkVfU0VUX1BST1BFUlRZKSB8fCAoY21kID09IEZFX0dFVF9QUk9QRVJUWSkpCisJCWVyciA9IGR2Yl9mcm9udGVuZF9pb2N0bF9wcm9wZXJ0aWVzKGlub2RlLCBmaWxlLCBjbWQsIHBhcmcpOworCWVsc2UgeworCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnN0YXRlID0gRFRWX1VOREVGSU5FRDsKKwkJZXJyID0gZHZiX2Zyb250ZW5kX2lvY3RsX2xlZ2FjeShpbm9kZSwgZmlsZSwgY21kLCBwYXJnKTsKKwl9CisKKwl1cCgmZmVwcml2LT5zZW0pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZHZiX2Zyb250ZW5kX2lvY3RsX3Byb3BlcnRpZXMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICpwYXJnKQoreworCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBkdmJkZXYtPnByaXY7CisJaW50IGVyciA9IDA7CisKKwlzdHJ1Y3QgZHR2X3Byb3BlcnRpZXMgKnR2cHMgPSBOVUxMOworCXN0cnVjdCBkdHZfcHJvcGVydHkgKnR2cCA9IE5VTEw7CisJaW50IGk7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJaWYoY21kID09IEZFX1NFVF9QUk9QRVJUWSkgeworCQl0dnBzID0gKHN0cnVjdCBkdHZfcHJvcGVydGllcyBfX3VzZXIgKilwYXJnOworCisJCWRwcmludGsoIiVzKCkgcHJvcGVydGllcy5udW0gPSAlZFxuIiwgX19mdW5jX18sIHR2cHMtPm51bSk7CisJCWRwcmludGsoIiVzKCkgcHJvcGVydGllcy5wcm9wcyA9ICVwXG4iLCBfX2Z1bmNfXywgdHZwcy0+cHJvcHMpOworCisJCS8qIFB1dCBhbiBhcmJpdHJhcnkgbGltaXQgb24gdGhlIG51bWJlciBvZiBtZXNzYWdlcyB0aGF0IGNhbgorCQkgKiBiZSBzZW50IGF0IG9uY2UgKi8KKwkJaWYgKCh0dnBzLT5udW0gPT0gMCkgfHwgKHR2cHMtPm51bSA+IERUVl9JT0NUTF9NQVhfTVNHUykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl0dnAgPSAoc3RydWN0IGR0dl9wcm9wZXJ0eSAqKSBrbWFsbG9jKHR2cHMtPm51bSAqCisJCQlzaXplb2Yoc3RydWN0IGR0dl9wcm9wZXJ0eSksIEdGUF9LRVJORUwpOworCQlpZiAoIXR2cCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKHR2cCwgdHZwcy0+cHJvcHMsIHR2cHMtPm51bSAqIHNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCB0dnBzLT5udW07IGkrKykgeworCQkJKHR2cCArIGkpLT5yZXN1bHQgPSBkdHZfcHJvcGVydHlfcHJvY2Vzc19zZXQoZmUsIHR2cCArIGksIGlub2RlLCBmaWxlKTsKKwkJCWVyciB8PSAodHZwICsgaSktPnJlc3VsdDsKKwkJfQorCisJCWlmKGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuc3RhdGUgPT0gRFRWX1RVTkUpCisJCQlkcHJpbnRrKCIlcygpIFByb3BlcnR5IGNhY2hlIGlzIGZ1bGwsIHR1bmluZ1xuIiwgX19mdW5jX18pOworCisJfSBlbHNlCisJaWYoY21kID09IEZFX0dFVF9QUk9QRVJUWSkgeworCisJCXR2cHMgPSAoc3RydWN0IGR0dl9wcm9wZXJ0aWVzIF9fdXNlciAqKXBhcmc7CisKKwkJZHByaW50aygiJXMoKSBwcm9wZXJ0aWVzLm51bSA9ICVkXG4iLCBfX2Z1bmNfXywgdHZwcy0+bnVtKTsKKwkJZHByaW50aygiJXMoKSBwcm9wZXJ0aWVzLnByb3BzID0gJXBcbiIsIF9fZnVuY19fLCB0dnBzLT5wcm9wcyk7CisKKwkJLyogUHV0IGFuIGFyYml0cmFyeSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHRoYXQgY2FuCisJCSAqIGJlIHNlbnQgYXQgb25jZSAqLworCQlpZiAoKHR2cHMtPm51bSA9PSAwKSB8fCAodHZwcy0+bnVtID4gRFRWX0lPQ1RMX01BWF9NU0dTKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXR2cCA9IChzdHJ1Y3QgZHR2X3Byb3BlcnR5ICopIGttYWxsb2ModHZwcy0+bnVtICoKKwkJCXNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdHZwKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoY29weV9mcm9tX3VzZXIodHZwLCB0dnBzLT5wcm9wcywgdHZwcy0+bnVtICogc2l6ZW9mKHN0cnVjdCBkdHZfcHJvcGVydHkpKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHR2cHMtPm51bTsgaSsrKSB7CisJCQkodHZwICsgaSktPnJlc3VsdCA9IGR0dl9wcm9wZXJ0eV9wcm9jZXNzX2dldChmZSwgdHZwICsgaSwgaW5vZGUsIGZpbGUpOworCQkJZXJyIHw9ICh0dnAgKyBpKS0+cmVzdWx0OworCQl9CisKKwkJaWYgKGNvcHlfdG9fdXNlcih0dnBzLT5wcm9wcywgdHZwLCB0dnBzLT5udW0gKiBzaXplb2Yoc3RydWN0IGR0dl9wcm9wZXJ0eSkpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKworCX0gZWxzZQorCQllcnIgPSAtRU9QTk9UU1VQUDsKKworb3V0OgorCWtmcmVlKHR2cCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkdmJfZnJvbnRlbmRfaW9jdGxfbGVnYWN5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqcGFyZykKK3sKKwlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlID0gZHZiZGV2LT5wcml2OworCXN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZSAqZmVwcml2ID0gZmUtPmZyb250ZW5kX3ByaXY7CisJaW50IGVyciA9IC1FT1BOT1RTVVBQOworCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEZFX0dFVF9JTkZPOiB7CiAJCXN0cnVjdCBkdmJfZnJvbnRlbmRfaW5mbyogaW5mbyA9IHBhcmc7CkBAIC05NDIsMTMgKzE1NzYsMjEgQEAKIAljYXNlIEZFX1NFVF9GUk9OVEVORDogewogCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MgZmV0dW5lc2V0dGluZ3M7CiAKLQkJaWYgKGR2Yl9mcm9udGVuZF9jaGVja19wYXJhbWV0ZXJzKGZlLCBwYXJnKSA8IDApIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQorCQlpZihmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnN0YXRlID09IERUVl9UVU5FKSB7CisJCQlpZiAoZHZiX2Zyb250ZW5kX2NoZWNrX3BhcmFtZXRlcnMoZmUsICZmZXByaXYtPnBhcmFtZXRlcnMpIDwgMCkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoZHZiX2Zyb250ZW5kX2NoZWNrX3BhcmFtZXRlcnMoZmUsIHBhcmcpIDwgMCkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CiAKLQkJbWVtY3B5ICgmZmVwcml2LT5wYXJhbWV0ZXJzLCBwYXJnLAotCQkJc2l6ZW9mIChzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMpKTsKKwkJCW1lbWNweSAoJmZlcHJpdi0+cGFyYW1ldGVycywgcGFyZywKKwkJCQlzaXplb2YgKHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycykpOworCQkJZHR2X3Byb3BlcnR5X2NhY2hlX3N5bmMoZmUsICZmZXByaXYtPnBhcmFtZXRlcnMpOworCQl9CiAKIAkJbWVtc2V0KCZmZXR1bmVzZXR0aW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncykpOwogCQltZW1jcHkoJmZldHVuZXNldHRpbmdzLnBhcmFtZXRlcnMsIHBhcmcsCkBAIC0xMDI3LDEwICsxNjY5LDEwIEBACiAJCWJyZWFrOwogCX07CiAKLQl1cCAoJmZlcHJpdi0+c2VtKTsKIAlyZXR1cm4gZXJyOwogfQogCisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZHZiX2Zyb250ZW5kX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKIHsKIAlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwpAQCAtMTA1MiwxMyArMTY5NCw1MyBAQAogCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBkdmJkZXYtPnByaXY7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmZS0+ZHZiOwogCWludCByZXQ7CiAKIAlkcHJpbnRrICgiJXNcbiIsIF9fZnVuY19fKTsKIAorCWlmIChhZGFwdGVyLT5tZmVfc2hhcmVkKSB7CisJCW11dGV4X2xvY2sgKCZhZGFwdGVyLT5tZmVfbG9jayk7CisKKwkJaWYgKGFkYXB0ZXItPm1mZV9kdmJkZXYgPT0gTlVMTCkKKwkJCWFkYXB0ZXItPm1mZV9kdmJkZXYgPSBkdmJkZXY7CisKKwkJZWxzZSBpZiAoYWRhcHRlci0+bWZlX2R2YmRldiAhPSBkdmJkZXYpIHsKKwkJCXN0cnVjdCBkdmJfZGV2aWNlCisJCQkJKm1mZWRldiA9IGFkYXB0ZXItPm1mZV9kdmJkZXY7CisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kCisJCQkJKm1mZSA9IG1mZWRldi0+cHJpdjsKKwkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZQorCQkJCSptZmVwcml2ID0gbWZlLT5mcm9udGVuZF9wcml2OworCQkJaW50IG1mZXJldHJ5ID0gKGR2Yl9tZmVfd2FpdF90aW1lIDw8IDEpOworCisJCQltdXRleF91bmxvY2sgKCZhZGFwdGVyLT5tZmVfbG9jayk7CisJCQl3aGlsZSAobWZlcmV0cnktLSAmJiAobWZlZGV2LT51c2VycyAhPSAtMSB8fAorCQkJCQltZmVwcml2LT50aHJlYWQgIT0gTlVMTCkpIHsKKwkJCQlpZihtc2xlZXBfaW50ZXJydXB0aWJsZSg1MDApKSB7CisJCQkJCWlmKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCQl9CisJCQl9CisKKwkJCW11dGV4X2xvY2sgKCZhZGFwdGVyLT5tZmVfbG9jayk7CisJCQlpZihhZGFwdGVyLT5tZmVfZHZiZGV2ICE9IGR2YmRldikgeworCQkJCW1mZWRldiA9IGFkYXB0ZXItPm1mZV9kdmJkZXY7CisJCQkJbWZlID0gbWZlZGV2LT5wcml2OworCQkJCW1mZXByaXYgPSBtZmUtPmZyb250ZW5kX3ByaXY7CisJCQkJaWYgKG1mZWRldi0+dXNlcnMgIT0gLTEgfHwKKwkJCQkJCW1mZXByaXYtPnRocmVhZCAhPSBOVUxMKSB7CisJCQkJCW11dGV4X3VubG9jayAoJmFkYXB0ZXItPm1mZV9sb2NrKTsKKwkJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCQl9CisJCQkJYWRhcHRlci0+bWZlX2R2YmRldiA9IGR2YmRldjsKKwkJCX0KKwkJfQorCX0KKwogCWlmIChkdmJkZXYtPnVzZXJzID09IC0xICYmIGZlLT5vcHMudHNfYnVzX2N0cmwpIHsKIAkJaWYgKChyZXQgPSBmZS0+b3BzLnRzX2J1c19jdHJsKGZlLCAxKSkgPCAwKQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gZXJyMDsKIAl9CiAKIAlpZiAoKHJldCA9IGR2Yl9nZW5lcmljX29wZW4gKGlub2RlLCBmaWxlKSkgPCAwKQpAQCAtMTA3OCw2ICsxNzYwLDggQEAKIAkJZmVwcml2LT5ldmVudHMuZXZlbnRyID0gZmVwcml2LT5ldmVudHMuZXZlbnR3ID0gMDsKIAl9CiAKKwlpZiAoYWRhcHRlci0+bWZlX3NoYXJlZCkKKwkJbXV0ZXhfdW5sb2NrICgmYWRhcHRlci0+bWZlX2xvY2spOwogCXJldHVybiByZXQ7CiAKIGVycjI6CkBAIC0xMDg1LDYgKzE3NjksOSBAQAogZXJyMToKIAlpZiAoZHZiZGV2LT51c2VycyA9PSAtMSAmJiBmZS0+b3BzLnRzX2J1c19jdHJsKQogCQlmZS0+b3BzLnRzX2J1c19jdHJsKGZlLCAwKTsKK2VycjA6CisJaWYgKGFkYXB0ZXItPm1mZV9zaGFyZWQpCisJCW11dGV4X3VubG9jayAoJmFkYXB0ZXItPm1mZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTU0LDggKzE4NDEsOSBAQAogCWZlLT5kdmIgPSBkdmI7CiAJZmVwcml2LT5pbnZlcnNpb24gPSBJTlZFUlNJT05fT0ZGOwogCi0JcHJpbnRrICgiRFZCOiByZWdpc3RlcmluZyBmcm9udGVuZCAlaSAoJXMpLi4uXG4iLAorCXByaW50ayAoIkRWQjogcmVnaXN0ZXJpbmcgYWRhcHRlciAlaSBmcm9udGVuZCAlaSAoJXMpLi4uXG4iLAogCQlmZS0+ZHZiLT5udW0sCisJCWZlLT5pZCwKIAkJZmUtPm9wcy5pbmZvLm5hbWUpOwogCiAJZHZiX3JlZ2lzdGVyX2RldmljZSAoZmUtPmR2YiwgJmZlcHJpdi0+ZHZiZGV2LCAmZHZiZGV2X3RlbXBsYXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaAppbmRleCBhYTQxMzNmLi5kYjRhNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaApAQCAtMTY5LDYgKzE2OSw5IEBACiAKIAlzdHJ1Y3QgZHZiX3R1bmVyX29wcyB0dW5lcl9vcHM7CiAJc3RydWN0IGFuYWxvZ19kZW1vZF9vcHMgYW5hbG9nX29wczsKKworCWludCAoKnNldF9wcm9wZXJ0eSkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdHZfcHJvcGVydHkqIHR2cCk7CisJaW50ICgqZ2V0X3Byb3BlcnR5KShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR0dl9wcm9wZXJ0eSogdHZwKTsKIH07CiAKICNkZWZpbmUgTUFYX0VWRU5UIDgKQEAgLTE4Miw2ICsxODUsMzIgQEAKIAlzdHJ1Y3QgbXV0ZXgJCSAgbXR4OwogfTsKIAorc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzIHsKKworCS8qIENhY2hlIFN0YXRlICovCisJdTMyCQkJc3RhdGU7CisKKwl1MzIJCQlmcmVxdWVuY3k7CisJZmVfbW9kdWxhdGlvbl90CQltb2R1bGF0aW9uOworCisJZmVfc2VjX3ZvbHRhZ2VfdAl2b2x0YWdlOworCWZlX3NlY190b25lX21vZGVfdAlzZWN0b25lOworCWZlX3NwZWN0cmFsX2ludmVyc2lvbl90CWludmVyc2lvbjsKKwlmZV9jb2RlX3JhdGVfdAkJZmVjX2lubmVyOworCWZlX3RyYW5zbWl0X21vZGVfdAl0cmFuc21pc3Npb25fbW9kZTsKKwl1MzIJCQliYW5kd2lkdGhfaHo7CS8qIDAgPSBBVVRPICovCisJZmVfZ3VhcmRfaW50ZXJ2YWxfdAlndWFyZF9pbnRlcnZhbDsKKwlmZV9oaWVyYXJjaHlfdAkJaGllcmFyY2h5OworCXUzMgkJCXN5bWJvbF9yYXRlOworCWZlX2NvZGVfcmF0ZV90CQljb2RlX3JhdGVfSFA7CisJZmVfY29kZV9yYXRlX3QJCWNvZGVfcmF0ZV9MUDsKKworCWZlX3BpbG90X3QJCXBpbG90OworCWZlX3JvbGxvZmZfdAkJcm9sbG9mZjsKKworCWZlX2RlbGl2ZXJ5X3N5c3RlbV90CWRlbGl2ZXJ5X3N5c3RlbTsKK307CisKIHN0cnVjdCBkdmJfZnJvbnRlbmQgewogCXN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIG9wczsKIAlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2YjsKQEAgLTE5MCw2ICsyMTksMTAgQEAKIAl2b2lkICpmcm9udGVuZF9wcml2OwogCXZvaWQgKnNlY19wcml2OwogCXZvaWQgKmFuYWxvZ19kZW1vZF9wcml2OworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyBkdHZfcHJvcGVydHlfY2FjaGU7CisjZGVmaW5lIERWQl9GUk9OVEVORF9DT01QT05FTlRfVFVORVIgMAorCWludCAoKmNhbGxiYWNrKSh2b2lkICphZGFwdGVyX3ByaXYsIGludCBjb21wb25lbnQsIGludCBjbWQsIGludCBhcmcpOworCWludCBpZDsKIH07CiAKIGV4dGVybiBpbnQgZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKHN0cnVjdCBkdmJfYWRhcHRlciAqZHZiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwppbmRleCBlNzEzMjc3Li5hMTEzNzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAKIAltdXRleF91bmxvY2soJmR2YmRldl9yZWdpc3Rlcl9sb2NrKTsKIAotCWNsc2RldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShkdmJfY2xhc3MsIGFkYXAtPmRldmljZSwKKwljbHNkZXYgPSBkZXZpY2VfY3JlYXRlKGR2Yl9jbGFzcywgYWRhcC0+ZGV2aWNlLAogCQkJICAgICAgIE1LREVWKERWQl9NQUpPUiwgbnVtczJtaW5vcihhZGFwLT5udW0sIHR5cGUsIGlkKSksCiAJCQkgICAgICAgTlVMTCwgImR2YiVkLiVzJWQiLCBhZGFwLT5udW0sIGRuYW1lc1t0eXBlXSwgaWQpOwogCWlmIChJU19FUlIoY2xzZGV2KSkgewpAQCAtMzI2LDYgKzMyNiw5IEBACiAJYWRhcC0+bmFtZSA9IG5hbWU7CiAJYWRhcC0+bW9kdWxlID0gbW9kdWxlOwogCWFkYXAtPmRldmljZSA9IGRldmljZTsKKwlhZGFwLT5tZmVfc2hhcmVkID0gMDsKKwlhZGFwLT5tZmVfZHZiZGV2ID0gTlVMTDsKKwltdXRleF9pbml0ICgmYWRhcC0+bWZlX2xvY2spOwogCiAJbGlzdF9hZGRfdGFpbCAoJmFkYXAtPmxpc3RfaGVhZCwgJmR2Yl9hZGFwdGVyX2xpc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCmluZGV4IDg5ZDEyZGMuLjU3NGUzMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCkBAIC02Miw2ICs2MiwxMCBAQAogCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKIAogCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKKworCWludCBtZmVfc2hhcmVkOwkJCS8qIGluZGljYXRlcyBtdXR1YWxseSBleGNsdXNpdmUgZnJvbnRlbmRzICovCisJc3RydWN0IGR2Yl9kZXZpY2UgKm1mZV9kdmJkZXY7CS8qIGZyb250ZW5kIGRldmljZSBpbiB1c2UgKi8KKwlzdHJ1Y3QgbXV0ZXggbWZlX2xvY2s7CQkvKiBhY2Nlc3MgbG9jayBmb3IgdGhyZWFkIGNyZWF0aW9uICovCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwppbmRleCBlODQxNTJiLi4zYzEzYmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCkBAIC03Miw5ICs3MiwxMSBAQAogCXNlbGVjdCBEVkJfRElCNzAwMFAKIAlzZWxlY3QgRFZCX0RJQjcwMDBNCiAJc2VsZWN0IERWQl9ESUIzMDAwTUMKKwlzZWxlY3QgRFZCX1M1SDE0MTEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX01UMjI2NiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfWEM1MDAwIGlmICFEVkJfRkVfQ1VTVE9NSVpFCiAJc2VsZWN0IERWQl9UVU5FUl9ESUIwMDcwCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVVNCMi4wLzEuMSBEVkIgcmVjZWl2ZXJzIGJhc2VkIG9uIHRoZSBEaUIwNzAwIFVTQiBicmlkZ2UuIFRoZQpAQCAtMTA4LDYgKzExMCw4IEBACiAJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0RJQjcwMDBQIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UVU5FUl9ESUIwMDcwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBDb25leGFudCBVU0IyLjAgaHlicmlkIHJlZmVyZW5jZSBkZXNpZ24uCiAJICBDdXJyZW50bHksIG9ubHkgRFZCIGFuZCBBVFNDIG1vZGVzIGFyZSBzdXBwb3J0ZWQsIGFuYWxvZyBtb2RlCkBAIC0yNDUsMTIgKzI0OSwyNSBAQAogCSAgQWZhdGVjaCBBRjkwMDUgYmFzZWQgcmVjZWl2ZXIuCiAKIGNvbmZpZyBEVkJfVVNCX0RXMjEwMgotCXRyaXN0YXRlICJEdmJXb3JsZCAyMTAyIERWQi1TIFVTQjIuMCByZWNlaXZlciIKKwl0cmlzdGF0ZSAiRHZiV29ybGQgRFZCLVMvUzIgVVNCMi4wIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCi0Jc2VsZWN0IERWQl9TVFYwMjk5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9QTEwgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjAyOTkgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjAyODggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUQjYwMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0NYMjQxMTYgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NJMjFYWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKLQkgICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIER2YldvcmxkIDIxMDIgRFZCLVMgVVNCMi4wIHJlY2VpdmVyLgorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBEdmJXb3JsZCBEVkItUy9TMiBVU0IyLjAgcmVjZWl2ZXJzCisJICBhbmQgdGhlIFRlVmlpIFM2NTAuCisKK2NvbmZpZyAJRFZCX1VTQl9DSU5FUkdZX1QyCisJdHJpc3RhdGUgIlRlcnJhdGVjIENpbmVyZ3lUMi9xYW51IFVTQiAyLjAgRFZCLVQgcmVjZWl2ZXIiCisJZGVwZW5kcyBvbiBEVkJfVVNCCisJaGVscAorCSAgU3VwcG9ydCBmb3IgIlRlcnJhVGVjIENpbmVyZ3lUMiIgVVNCMi4wIEhpZ2hzcGVlZCBEVkIgUmVjZWl2ZXJzCisKKwkgIFNheSBZIGlmIHlvdSBvd24gc3VjaCBhIGRldmljZSBhbmQgd2FudCB0byB1c2UgaXQuCiAKIGNvbmZpZyBEVkJfVVNCX0FOWVNFRQogCXRyaXN0YXRlICJBbnlzZWUgRFZCLVQvQyBVU0IyLjAgc3VwcG9ydCIKQEAgLTI2MiwzICsyNzksMjIgQEAKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFueXNlZSBFMzAsIEFueXNlZSBFMzAgUGx1cyBvcgogCSAgQW55c2VlIEUzMCBDIFBsdXMgRFZCIFVTQjIuMCByZWNlaXZlci4KKworY29uZmlnIERWQl9VU0JfRFRWNTEwMAorCXRyaXN0YXRlICJBTUUgRFRWLTUxMDAgVVNCMi4wIERWQi1UIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBEVkJfVVNCCisJc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQU1FIERUVi01MTAwIFVTQjIuMCBEVkItVCByZWNlaXZlci4KKworY29uZmlnIERWQl9VU0JfQUY5MDE1CisJdHJpc3RhdGUgIkFmYXRlY2ggQUY5MDE1IERWQi1UIFVTQjIuMCBzdXBwb3J0IgorCWRlcGVuZHMgb24gRFZCX1VTQiAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgRFZCX0FGOTAxMworCXNlbGVjdCBEVkJfUExMICAgICAgICAgICAgICBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgICBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgICBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREExODI3MSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA1UyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQWZhdGVjaCBBRjkwMTUgYmFzZWQgRFZCLVQgVVNCMi4wIHJlY2VpdmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQppbmRleCBlMjA2ZjFlLi4zMTIyYjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKQEAgLTY3LDYgKzY3LDE2IEBACiBkdmItdXNiLWR3MjEwMi1vYmpzID0gZHcyMTAyLm8KIG9iai0kKENPTkZJR19EVkJfVVNCX0RXMjEwMikgKz0gZHZiLXVzYi1kdzIxMDIubwogCitkdmItdXNiLWR0djUxMDAtb2JqcyA9IGR0djUxMDAubworb2JqLSQoQ09ORklHX0RWQl9VU0JfRFRWNTEwMCkgKz0gZHZiLXVzYi1kdHY1MTAwLm8KKworZHZiLXVzYi1hZjkwMTUtb2JqcyA9IGFmOTAxNS5vCitvYmotJChDT05GSUdfRFZCX1VTQl9BRjkwMTUpICs9IGR2Yi11c2ItYWY5MDE1Lm8KKworZHZiLXVzYi1jaW5lcmd5VDItb2JqcyA9IGNpbmVyZ3lUMi1jb3JlLm8gY2luZXJneVQyLWZlLm8KK29iai0kKENPTkZJR19EVkJfVVNCX0NJTkVSR1lfVDIpICs9IGR2Yi11c2ItY2luZXJneVQyLm8KKworCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvCiAjIGR1ZSB0byB0dW5lci14YzMwMjgKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUtcmVtb3RlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1yZW1vdGUuYwppbmRleCBmZjAwYzBlLi43YzU5NmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1yZW1vdGUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1yZW1vdGUuYwpAQCAtMjUsNyArMjUsNyBAQAogICovCiAjaW5jbHVkZSAiYWY5MDA1LmgiCiAvKiBkZWJ1ZyAqLwotaW50IGR2Yl91c2JfYWY5MDA1X3JlbW90ZV9kZWJ1ZzsKK3N0YXRpYyBpbnQgZHZiX3VzYl9hZjkwMDVfcmVtb3RlX2RlYnVnOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkdmJfdXNiX2FmOTAwNV9yZW1vdGVfZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLAogCQkgImVuYWJsZSAoMSkgb3IgZGlzYWJsZSAoMCkgZGVidWcgbWVzc2FnZXMuIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUtc2NyaXB0LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1zY3JpcHQuaAppbmRleCA2ZWVhYWU1Li40ZDY5MDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1zY3JpcHQuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1zY3JpcHQuaApAQCAtMTQsNyArMTQsNyBAQAogCXU4IHZhbDsKIH0gUmVnRGVzYzsKIAotUmVnRGVzYyBzY3JpcHRbXSA9IHsKK3N0YXRpYyBSZWdEZXNjIHNjcmlwdFtdID0gewogCXsweGExODAsIDB4MCwgMHg4LCAweGF9LAogCXsweGExODEsIDB4MCwgMHg4LCAweGQ3fSwKIAl7MHhhMTgyLCAweDAsIDB4OCwgMHhhM30sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUuYwppbmRleCBjZmU3MWZlLi5jYTVhMGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LmMKQEAgLTM1LDE3ICszNSwxNyBAQAogTU9EVUxFX1BBUk1fREVTQyhsZWQsICJlbmFibGUgbGVkIChkZWZhdWx0OiAxKS4iKTsKIAogLyogZWVwcm9tIGR1bXAgKi8KLWludCBkdmJfdXNiX2FmOTAwNV9kdW1wX2VlcHJvbSA9IDA7CitzdGF0aWMgaW50IGR2Yl91c2JfYWY5MDA1X2R1bXBfZWVwcm9tOwogbW9kdWxlX3BhcmFtX25hbWVkKGR1bXBfZWVwcm9tLCBkdmJfdXNiX2FmOTAwNV9kdW1wX2VlcHJvbSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZHVtcF9lZXByb20sICJkdW1wIGNvbnRlbnRzIG9mIHRoZSBlZXByb20uIik7CiAKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCiAvKiByZW1vdGUgY29udHJvbCBkZWNvZGVyICovCi1pbnQgKCpyY19kZWNvZGUpIChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiBkLCB1OCAqIGRhdGEsIGludCBsZW4sIHUzMiAqIGV2ZW50LAotCQkgIGludCAqc3RhdGUpOwotdm9pZCAqcmNfa2V5czsKLWludCAqcmNfa2V5c19zaXplOworc3RhdGljIGludCAoKnJjX2RlY29kZSkgKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggKmRhdGEsIGludCBsZW4sCisJCXUzMiAqZXZlbnQsIGludCAqc3RhdGUpOworc3RhdGljIHZvaWQgKnJjX2tleXM7CitzdGF0aWMgaW50ICpyY19rZXlzX3NpemU7CiAKIHU4IHJlZ21hc2tbOF0gPSB7IDB4MDEsIDB4MDMsIDB4MDcsIDB4MGYsIDB4MWYsIDB4M2YsIDB4N2YsIDB4ZmYgfTsKIApAQCAtNTQsOCArNTQsOCBAQAogCWludCBsZWRfc3RhdGU7CiB9OwogCi1pbnQgYWY5MDA1X3VzYl9nZW5lcmljX3J3KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggKiB3YnVmLCB1MTYgd2xlbiwKLQkJCSAgdTggKiByYnVmLCB1MTYgcmxlbiwgaW50IGRlbGF5X21zKQorc3RhdGljIGludCBhZjkwMDVfdXNiX2dlbmVyaWNfcncoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCAqd2J1ZiwgdTE2IHdsZW4sCisJCQkgIHU4ICpyYnVmLCB1MTYgcmxlbiwgaW50IGRlbGF5X21zKQogewogCWludCBhY3RsZW4sIHJldCA9IC1FTk9NRU07CiAKQEAgLTk4LDEyICs5OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGFmOTAwNV91c2JfZ2VuZXJpY193cml0ZShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4ICogYnVmLCB1MTYgbGVuKQotewotCXJldHVybiBhZjkwMDVfdXNiX2dlbmVyaWNfcncoZCwgYnVmLCBsZW4sIE5VTEwsIDAsIDApOwotfQotCi1pbnQgYWY5MDA1X2dlbmVyaWNfcmVhZF93cml0ZShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUxNiByZWcsCitzdGF0aWMgaW50IGFmOTAwNV9nZW5lcmljX3JlYWRfd3JpdGUoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MTYgcmVnLAogCQkJICAgICAgaW50IHJlYWR3cml0ZSwgaW50IHR5cGUsIHU4ICogdmFsdWVzLCBpbnQgbGVuKQogewogCXN0cnVjdCBhZjkwMDVfZGV2aWNlX3N0YXRlICpzdCA9IGQtPnByaXY7CkBAIC03NjUsNyArNzYwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGFmOTAwNV9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3N0YXRpYyBpbnQgYWY5MDA1X2Rvd25sb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQogewogCWludCBpLCBwYWNrZXRzLCByZXQsIGFjdF9sZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMDgyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCkBAIC0wLDAgKzEsMTQ3NCBAQAorLyoKKyAqIERWQiBVU0IgTGludXggZHJpdmVyIGZvciBBZmF0ZWNoIEFGOTAxNSBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKgorICogVGhhbmtzIHRvIEFmYXRlY2ggd2hvIGtpbmRseSBwcm92aWRlZCBpbmZvcm1hdGlvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImFmOTAxNS5oIgorI2luY2x1ZGUgImFmOTAxMy5oIgorI2luY2x1ZGUgIm10MjA2MC5oIgorI2luY2x1ZGUgInF0MTAxMC5oIgorI2luY2x1ZGUgInRkYTE4MjcxLmgiCisjaW5jbHVkZSAibXhsNTAwNXMuaCIKKyNpZiAwCisjaW5jbHVkZSAibWM0NHM4MHguaCIKKyNlbmRpZgorCitpbnQgZHZiX3VzYl9hZjkwMTVfZGVidWc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGR2Yl91c2JfYWY5MDE1X2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwiIERWQl9VU0JfREVCVUdfU1RBVFVTKTsKK2ludCBkdmJfdXNiX2FmOTAxNV9yZW1vdGU7Cittb2R1bGVfcGFyYW1fbmFtZWQocmVtb3RlLCBkdmJfdXNiX2FmOTAxNV9yZW1vdGUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlbW90ZSwgInNlbGVjdCByZW1vdGUiKTsKK2ludCBkdmJfdXNiX2FmOTAxNV9kdWFsX21vZGU7Cittb2R1bGVfcGFyYW1fbmFtZWQoZHVhbF9tb2RlLCBkdmJfdXNiX2FmOTAxNV9kdWFsX21vZGUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGR1YWxfbW9kZSwgImVuYWJsZSBkdWFsIG1vZGUiKTsKK0RWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworCitzdGF0aWMgREVGSU5FX01VVEVYKGFmOTAxNV91c2JfbXV0ZXgpOworCitzdGF0aWMgc3RydWN0IGFmOTAxNV9jb25maWcgYWY5MDE1X2NvbmZpZzsKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBhZjkwMTVfcHJvcGVydGllc1syXTsKK2ludCBhZjkwMTVfcHJvcGVydGllc19jb3VudCA9IEFSUkFZX1NJWkUoYWY5MDE1X3Byb3BlcnRpZXMpOworCitzdGF0aWMgc3RydWN0IGFmOTAxM19jb25maWcgYWY5MDE1X2FmOTAxM19jb25maWdbXSA9IHsKKwl7CisJCS5kZW1vZF9hZGRyZXNzID0gQUY5MDE1X0kyQ19ERU1PRCwKKwkJLm91dHB1dF9tb2RlID0gQUY5MDEzX09VVFBVVF9NT0RFX1VTQiwKKwkJLmFwaV92ZXJzaW9uID0geyAwLCAxLCA5LCAwIH0sCisJCS5ncGlvWzBdID0gQUY5MDEzX0dQSU9fSEksCisJCS5ncGlvWzNdID0gQUY5MDEzX0dQSU9fVFVORVJfT04sCisKKwl9LCB7CisJCS5vdXRwdXRfbW9kZSA9IEFGOTAxM19PVVRQVVRfTU9ERV9TRVJJQUwsCisJCS5hcGlfdmVyc2lvbiA9IHsgMCwgMSwgOSwgMCB9LAorCQkuZ3Bpb1swXSA9IEFGOTAxM19HUElPX1RVTkVSX09OLAorCQkuZ3Bpb1sxXSA9IEFGOTAxM19HUElPX0xPLAorCX0KK307CisKK3N0YXRpYyBpbnQgYWY5MDE1X3J3X3VkZXYoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCByZXFfdCAqcmVxKQoreworCWludCBhY3RfbGVuLCByZXQ7CisJdTggYnVmWzY0XTsKKwl1OCB3cml0ZSA9IDE7CisJdTggbXNnX2xlbiA9IDg7CisJc3RhdGljIHU4IHNlcTsgLyogcGFja2V0IHNlcXVlbmNlIG51bWJlciAqLworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWY5MDE1X3VzYl9tdXRleCkgPCAwKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWJ1ZlswXSA9IHJlcS0+Y21kOworCWJ1ZlsxXSA9IHNlcSsrOworCWJ1ZlsyXSA9IHJlcS0+aTJjX2FkZHI7CisJYnVmWzNdID0gcmVxLT5hZGRyID4+IDg7CisJYnVmWzRdID0gcmVxLT5hZGRyICYgMHhmZjsKKwlidWZbNV0gPSByZXEtPm1ib3g7CisJYnVmWzZdID0gcmVxLT5hZGRyX2xlbjsKKwlidWZbN10gPSByZXEtPmRhdGFfbGVuOworCisJc3dpdGNoIChyZXEtPmNtZCkgeworCWNhc2UgR0VUX0NPTkZJRzoKKwljYXNlIEJPT1Q6CisJY2FzZSBSRUFEX01FTU9SWToKKwljYXNlIFJFQ09OTkVDVF9VU0I6CisJY2FzZSBHRVRfSVJfQ09ERToKKwkJd3JpdGUgPSAwOworCQlicmVhazsKKwljYXNlIFJFQURfSTJDOgorCQl3cml0ZSA9IDA7CisJCWJ1ZlsyXSB8PSAweDAxOyAvKiBzZXQgSTJDIGRpcmVjdGlvbiAqLworCWNhc2UgV1JJVEVfSTJDOgorCQlidWZbMF0gPSBSRUFEX1dSSVRFX0kyQzsKKwkJYnJlYWs7CisJY2FzZSBXUklURV9NRU1PUlk6CisJCWlmICgoKHJlcS0+YWRkciAmIDB4ZmYwMCkgPT0gMHhmZjAwKSB8fAorCQkgICAgKChyZXEtPmFkZHIgJiAweGFlMDApID09IDB4YWUwMCkpCisJCQlidWZbMF0gPSBXUklURV9WSVJUVUFMX01FTU9SWTsKKwljYXNlIFdSSVRFX1ZJUlRVQUxfTUVNT1JZOgorCWNhc2UgQ09QWV9GSVJNV0FSRToKKwljYXNlIERPV05MT0FEX0ZJUk1XQVJFOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoInVua25vd24gY29tbWFuZDolZCIsIHJlcS0+Y21kKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZXJyb3JfdW5sb2NrOworCX0KKworCS8qIHdyaXRlIHJlcXVlc3RlZCAqLworCWlmICh3cml0ZSkgeworCQltZW1jcHkoJmJ1Zls4XSwgcmVxLT5kYXRhLCByZXEtPmRhdGFfbGVuKTsKKwkJbXNnX2xlbiArPSByZXEtPmRhdGFfbGVuOworCX0KKwlkZWJfeGZlcigiPj4+ICIpOworCWRlYnVnX2R1bXAoYnVmLCBtc2dfbGVuLCBkZWJfeGZlcik7CisKKwkvKiBzZW5kIHJlcSAqLworCXJldCA9IHVzYl9idWxrX21zZyh1ZGV2LCB1c2Jfc25kYnVsa3BpcGUodWRldiwgMHgwMiksIGJ1ZiwgbXNnX2xlbiwKKwkmYWN0X2xlbiwgQUY5MDE1X1VTQl9USU1FT1VUKTsKKwlpZiAocmV0KQorCQllcnIoImJ1bGsgbWVzc2FnZSBmYWlsZWQ6JWQgKCVkLyVkKSIsIHJldCwgbXNnX2xlbiwgYWN0X2xlbik7CisJZWxzZQorCQlpZiAoYWN0X2xlbiAhPSBtc2dfbGVuKQorCQkJcmV0ID0gLTE7IC8qIGFsbCBkYXRhIGlzIG5vdCBzZW5kICovCisJaWYgKHJldCkKKwkJZ290byBlcnJvcl91bmxvY2s7CisKKwkvKiBubyBhY2sgZm9yIHRob3NlIHBhY2tldHMgKi8KKwlpZiAocmVxLT5jbWQgPT0gRE9XTkxPQURfRklSTVdBUkUgfHwgcmVxLT5jbWQgPT0gUkVDT05ORUNUX1VTQikKKwkJZ290byBleGl0X3VubG9jazsKKworCS8qIHJlY2VpdmUgYWNrIGFuZCBkYXRhIGlmIHJlYWQgcmVxICovCisJbXNnX2xlbiA9IDEgKyAxICsgcmVxLT5kYXRhX2xlbjsgIC8qIHNlcSArIHN0YXR1cyArIGRhdGEgbGVuICovCisJcmV0ID0gdXNiX2J1bGtfbXNnKHVkZXYsIHVzYl9yY3ZidWxrcGlwZSh1ZGV2LCAweDgxKSwgYnVmLCBtc2dfbGVuLAorCQkJICAgJmFjdF9sZW4sIEFGOTAxNV9VU0JfVElNRU9VVCk7CisJaWYgKHJldCkgeworCQllcnIoInJlY3YgYnVsayBtZXNzYWdlIGZhaWxlZDolZCIsIHJldCk7CisJCXJldCA9IC0xOworCQlnb3RvIGVycm9yX3VubG9jazsKKwl9CisKKwlkZWJfeGZlcigiPDw8ICIpOworCWRlYnVnX2R1bXAoYnVmLCBhY3RfbGVuLCBkZWJfeGZlcik7CisKKwkvKiByZW1vdGUgY29udHJvbGxlciBxdWVyeSBzdGF0dXMgaXMgMSBpZiByZW1vdGUgY29kZSBpcyBub3QgcmVjZWl2ZWQgKi8KKwlpZiAocmVxLT5jbWQgPT0gR0VUX0lSX0NPREUgJiYgYnVmWzFdID09IDEpIHsKKwkJYnVmWzFdID0gMDsgLyogY2xlYXIgY29tbWFuZCAiZXJyb3IiIHN0YXR1cyAqLworCQltZW1zZXQoJmJ1ZlsyXSwgMCwgcmVxLT5kYXRhX2xlbik7CisJCWJ1ZlszXSA9IDE7IC8qIG5vIHJlbW90ZSBjb2RlIHJlY2VpdmVkIG1hcmsgKi8KKwl9CisKKwkvKiBjaGVjayBzdGF0dXMgKi8KKwlpZiAoYnVmWzFdKSB7CisJCWVycigiY29tbWFuZCBmYWlsZWQ6JWQiLCBidWZbMV0pOworCQlyZXQgPSAtMTsKKwkJZ290byBlcnJvcl91bmxvY2s7CisJfQorCisJLyogcmVhZCByZXF1ZXN0LCBjb3B5IHJldHVybmVkIGRhdGEgdG8gcmV0dXJuIGJ1ZiAqLworCWlmICghd3JpdGUpCisJCW1lbWNweShyZXEtPmRhdGEsICZidWZbMl0sIHJlcS0+ZGF0YV9sZW4pOworCitlcnJvcl91bmxvY2s6CitleGl0X3VubG9jazoKKwltdXRleF91bmxvY2soJmFmOTAxNV91c2JfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTVfY3RybF9tc2coc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBzdHJ1Y3QgcmVxX3QgKnJlcSkKK3sKKwlyZXR1cm4gYWY5MDE1X3J3X3VkZXYoZC0+dWRldiwgcmVxKTsKK30KKworc3RhdGljIGludCBhZjkwMTVfd3JpdGVfcmVncyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUxNiBhZGRyLCB1OCAqdmFsLAorCXU4IGxlbikKK3sKKwlzdHJ1Y3QgcmVxX3QgcmVxID0ge1dSSVRFX01FTU9SWSwgQUY5MDE1X0kyQ19ERU1PRCwgYWRkciwgMCwgMCwgbGVuLAorCQl2YWx9OworCXJldHVybiBhZjkwMTVfY3RybF9tc2coZCwgJnJlcSk7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDE1X3dyaXRlX3JlZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUxNiBhZGRyLCB1OCB2YWwpCit7CisJcmV0dXJuIGFmOTAxNV93cml0ZV9yZWdzKGQsIGFkZHIsICZ2YWwsIDEpOworfQorCitzdGF0aWMgaW50IGFmOTAxNV9yZWFkX3JlZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUxNiBhZGRyLCB1OCAqdmFsKQoreworCXN0cnVjdCByZXFfdCByZXEgPSB7UkVBRF9NRU1PUlksIEFGOTAxNV9JMkNfREVNT0QsIGFkZHIsIDAsIDAsIDEsIHZhbH07CisJcmV0dXJuIGFmOTAxNV9jdHJsX21zZyhkLCAmcmVxKTsKK30KKworc3RhdGljIGludCBhZjkwMTVfd3JpdGVfcmVnX2kyYyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IGFkZHIsIHUxNiByZWcsCisJdTggdmFsKQoreworCXN0cnVjdCByZXFfdCByZXEgPSB7V1JJVEVfSTJDLCBhZGRyLCByZWcsIDEsIDEsIDEsICZ2YWx9OworCisJaWYgKGFkZHIgPT0gYWY5MDE1X2FmOTAxM19jb25maWdbMF0uZGVtb2RfYWRkcmVzcyB8fAorCSAgICBhZGRyID09IGFmOTAxNV9hZjkwMTNfY29uZmlnWzFdLmRlbW9kX2FkZHJlc3MpCisJCXJlcS5hZGRyX2xlbiA9IDM7CisKKwlyZXR1cm4gYWY5MDE1X2N0cmxfbXNnKGQsICZyZXEpOworfQorCitzdGF0aWMgaW50IGFmOTAxNV9yZWFkX3JlZ19pMmMoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCBhZGRyLCB1MTYgcmVnLAorCXU4ICp2YWwpCit7CisJc3RydWN0IHJlcV90IHJlcSA9IHtSRUFEX0kyQywgYWRkciwgcmVnLCAwLCAxLCAxLCB2YWx9OworCisJaWYgKGFkZHIgPT0gYWY5MDE1X2FmOTAxM19jb25maWdbMF0uZGVtb2RfYWRkcmVzcyB8fAorCSAgICBhZGRyID09IGFmOTAxNV9hZjkwMTNfY29uZmlnWzFdLmRlbW9kX2FkZHJlc3MpCisJCXJlcS5hZGRyX2xlbiA9IDM7CisKKwlyZXR1cm4gYWY5MDE1X2N0cmxfbXNnKGQsICZyZXEpOworfQorCitzdGF0aWMgaW50IGFmOTAxNV9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLAorCWludCBudW0pCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlpbnQgcmV0ID0gMCwgaSA9IDA7CisJdTE2IGFkZHI7CisJdTggbWJveCwgYWRkcl9sZW47CisJc3RydWN0IHJlcV90IHJlcTsKKworLyogVE9ETzogaW1wbGVtZW50IGJ1cyBsb2NrCisKK1RoZSBidXMgbG9jayBpcyBuZWVkZWQgYmVjYXVzZSB0aGVyZSBpcyB0d28gdHVuZXJzIGJvdGggdXNpbmcgc2FtZSBJMkMtYWRkcmVzcy4KK0R1ZSB0byB0aGF0IHRoZSBvbmx5IHdheSB0byBzZWxlY3QgY29ycmVjdCB0dW5lciBpcyB1c2UgZGVtb2R1bGF0b3IgSTJDLWdhdGUuCisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorLiBBRjkwMTUgaW5jbHVkZXMgaW50ZWdyYXRlZCBBRjkwMTMgZGVtb2R1bGF0b3IuCisuIF9fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX18gIC4gICAgICAgICAgICAgICAgX19fX19fX19fX19fCisufCAgICAgdUMgICAgIHwgICAgICAgICAgICAgICAgIHwgICBkZW1vZCAgICB8IC4gICAgICAgICAgICAgICB8ICAgIHR1bmVyICAgfAorLnwtLS0tLS0tLS0tLS18ICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tfCAuICAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLXwKKy58ICAgQUY5MDE1ICAgfCAgICAgICAgICAgICAgICAgfCAgQUY5MDEzLzUgIHwgLiAgICAgICAgICAgICAgIHwgICBNWEw1MDAzICB8CisufCAgICAgICAgICAgIHwtLSstLS0tSTJDLS0tLS0tLXwtLS0tLS8gLS0tLS18LS4tLS0tLUkyQy0tLS0tLS18ICAgICAgICAgICAgfAorLnwgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICB8IGFkZHIgMHgzOCAgfCAuICAgICAgICAgICAgICAgfCAgYWRkciAweGM2IHwKKy58X19fX19fX19fX19ffCAgfCAgICAgICAgICAgICAgfF9fX19fX19fX19fX3wgLiAgICAgICAgICAgICAgIHxfX19fX19fX19fX198CisuLi4uLi4uLi4uLi4uLi4uLnwuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKwkJIHwgICAgICAgICAgICAgICBfX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fCisJCSB8ICAgICAgICAgICAgICB8ICAgZGVtb2QgICAgfCAgICAgICAgICAgICAgICAgfCAgICB0dW5lciAgIHwKKwkJIHwgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS18ICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tfAorCQkgfCAgICAgICAgICAgICAgfCAgIEFGOTAxMyAgIHwgICAgICAgICAgICAgICAgIHwgICBNWEw1MDAzICB8CisJCSArLS0tLUkyQy0tLS0tLS18LS0tLS0vIC0tLS0tfC0tLS0tLS1JMkMtLS0tLS0tfCAgICAgICAgICAgIHwKKwkJCQl8IGFkZHIgMHgzYSAgfCAgICAgICAgICAgICAgICAgfCAgYWRkciAweGM2IHwKKwkJCQl8X19fX19fX19fX19ffCAgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX3wKKyovCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCisJCXJldHVybiAtRUFHQUlOOworCisJd2hpbGUgKGkgPCBudW0pIHsKKwkJaWYgKG1zZ1tpXS5hZGRyID09IGFmOTAxNV9hZjkwMTNfY29uZmlnWzBdLmRlbW9kX2FkZHJlc3MgfHwKKwkJICAgIG1zZ1tpXS5hZGRyID09IGFmOTAxNV9hZjkwMTNfY29uZmlnWzFdLmRlbW9kX2FkZHJlc3MpIHsKKwkJCWFkZHIgPSBtc2dbaV0uYnVmWzBdIDw8IDg7CisJCQlhZGRyICs9IG1zZ1tpXS5idWZbMV07CisJCQltYm94ID0gbXNnW2ldLmJ1ZlsyXTsKKwkJCWFkZHJfbGVuID0gMzsKKwkJfSBlbHNlIHsKKwkJCWFkZHIgPSBtc2dbaV0uYnVmWzBdOworCQkJYWRkcl9sZW4gPSAxOworCQkJbWJveCA9IDA7CisJCX0KKworCQlpZiAobnVtID4gaSArIDEgJiYgKG1zZ1tpKzFdLmZsYWdzICYgSTJDX01fUkQpKSB7CisJCQlpZiAobXNnW2ldLmFkZHIgPT0KKwkJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1swXS5kZW1vZF9hZGRyZXNzKQorCQkJCXJlcS5jbWQgPSBSRUFEX01FTU9SWTsKKwkJCWVsc2UKKwkJCQlyZXEuY21kID0gUkVBRF9JMkM7CisJCQlyZXEuaTJjX2FkZHIgPSBtc2dbaV0uYWRkcjsKKwkJCXJlcS5hZGRyID0gYWRkcjsKKwkJCXJlcS5tYm94ID0gbWJveDsKKwkJCXJlcS5hZGRyX2xlbiA9IGFkZHJfbGVuOworCQkJcmVxLmRhdGFfbGVuID0gbXNnW2krMV0ubGVuOworCQkJcmVxLmRhdGEgPSAmbXNnW2krMV0uYnVmWzBdOworCQkJcmV0ID0gYWY5MDE1X2N0cmxfbXNnKGQsICZyZXEpOworCQkJaSArPSAyOworCQl9IGVsc2UgeworCQkJaWYgKG1zZ1tpXS5hZGRyID09CisJCQkJYWY5MDE1X2FmOTAxM19jb25maWdbMF0uZGVtb2RfYWRkcmVzcykKKwkJCQlyZXEuY21kID0gV1JJVEVfTUVNT1JZOworCQkJZWxzZQorCQkJCXJlcS5jbWQgPSBXUklURV9JMkM7CisJCQlyZXEuaTJjX2FkZHIgPSBtc2dbaV0uYWRkcjsKKwkJCXJlcS5hZGRyID0gYWRkcjsKKwkJCXJlcS5tYm94ID0gbWJveDsKKwkJCXJlcS5hZGRyX2xlbiA9IGFkZHJfbGVuOworCQkJcmVxLmRhdGFfbGVuID0gbXNnW2ldLmxlbi1hZGRyX2xlbjsKKwkJCXJlcS5kYXRhID0gJm1zZ1tpXS5idWZbYWRkcl9sZW5dOworCQkJcmV0ID0gYWY5MDE1X2N0cmxfbXNnKGQsICZyZXEpOworCQkJaSArPSAxOworCQl9CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCisJfQorCXJldCA9IGk7CisKK2Vycm9yOgorCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgYWY5MDE1X2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gYWY5MDE1X2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciA9IGFmOTAxNV9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGFmOTAxNV9pMmNfZnVuYywKK307CisKK3N0YXRpYyBpbnQgYWY5MDE1X2RvX3JlZ19iaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MTYgYWRkciwgdTggYml0LCB1OCBvcCkKK3sKKwlpbnQgcmV0OworCXU4IHZhbCwgbWFzayA9IDB4MDE7CisKKwlyZXQgPSBhZjkwMTVfcmVhZF9yZWcoZCwgYWRkciwgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1hc2sgPDw9IGJpdDsKKwlpZiAob3ApIHsKKwkJLyogc2V0IGJpdCAqLworCQl2YWwgfD0gbWFzazsKKwl9IGVsc2UgeworCQkvKiBjbGVhciBiaXQgKi8KKwkJbWFzayBePSAweGZmOworCQl2YWwgJj0gbWFzazsKKwl9CisKKwlyZXR1cm4gYWY5MDE1X3dyaXRlX3JlZyhkLCBhZGRyLCB2YWwpOworfQorCitzdGF0aWMgaW50IGFmOTAxNV9zZXRfcmVnX2JpdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUxNiBhZGRyLCB1OCBiaXQpCit7CisJcmV0dXJuIGFmOTAxNV9kb19yZWdfYml0KGQsIGFkZHIsIGJpdCwgMSk7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDE1X2NsZWFyX3JlZ19iaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MTYgYWRkciwgdTggYml0KQoreworCXJldHVybiBhZjkwMTVfZG9fcmVnX2JpdChkLCBhZGRyLCBiaXQsIDApOworfQorCitzdGF0aWMgaW50IGFmOTAxNV9pbml0X2VuZHBvaW50KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlpbnQgcmV0OworCXUxNiBmcmFtZV9zaXplOworCXU4ICBwYWNrZXRfc2l6ZTsKKwlkZWJfaW5mbygiJXM6IFVTQiBzcGVlZDolZFxuIiwgX19mdW5jX18sIGQtPnVkZXYtPnNwZWVkKTsKKworI2RlZmluZSBUU19QQUNLRVRfU0laRSAgICAgICAgICAgIDE4OAorCisjZGVmaW5lIFRTX1VTQjIwX1BBQ0tFVF9DT1VOVCAgICAgMzQ4CisjZGVmaW5lIFRTX1VTQjIwX0ZSQU1FX1NJWkUgICAgICAgKFRTX1BBQ0tFVF9TSVpFKlRTX1VTQjIwX1BBQ0tFVF9DT1VOVCkKKworI2RlZmluZSBUU19VU0IxMV9QQUNLRVRfQ09VTlQgICAgICAyMQorI2RlZmluZSBUU19VU0IxMV9GUkFNRV9TSVpFICAgICAgIChUU19QQUNLRVRfU0laRSpUU19VU0IxMV9QQUNLRVRfQ09VTlQpCisKKyNkZWZpbmUgVFNfVVNCMjBfTUFYX1BBQ0tFVF9TSVpFICA1MTIKKyNkZWZpbmUgVFNfVVNCMTFfTUFYX1BBQ0tFVF9TSVpFICAgNjQKKworCWlmIChkLT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkgeworCQlmcmFtZV9zaXplID0gVFNfVVNCMTFfRlJBTUVfU0laRS80OworCQlwYWNrZXRfc2l6ZSA9IFRTX1VTQjExX01BWF9QQUNLRVRfU0laRS80OworCX0gZWxzZSB7CisJCWZyYW1lX3NpemUgPSBUU19VU0IyMF9GUkFNRV9TSVpFLzQ7CisJCXBhY2tldF9zaXplID0gVFNfVVNCMjBfTUFYX1BBQ0tFVF9TSVpFLzQ7CisJfQorCisJcmV0ID0gYWY5MDE1X3NldF9yZWdfYml0KGQsIDB4ZDUwNywgMik7IC8qIGFzc2VydCBFUDQgcmVzZXQgKi8KKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXJldCA9IGFmOTAxNV9zZXRfcmVnX2JpdChkLCAweGQ1MGIsIDEpOyAvKiBhc3NlcnQgRVA1IHJlc2V0ICovCisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlyZXQgPSBhZjkwMTVfY2xlYXJfcmVnX2JpdChkLCAweGRkMTEsIDUpOyAvKiBkaXNhYmxlIEVQNCAqLworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJcmV0ID0gYWY5MDE1X2NsZWFyX3JlZ19iaXQoZCwgMHhkZDExLCA2KTsgLyogZGlzYWJsZSBFUDUgKi8KKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXJldCA9IGFmOTAxNV9zZXRfcmVnX2JpdChkLCAweGRkMTEsIDUpOyAvKiBlbmFibGUgRVA0ICovCisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlpZiAoYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUpIHsKKwkJcmV0ID0gYWY5MDE1X3NldF9yZWdfYml0KGQsIDB4ZGQxMSwgNik7IC8qIGVuYWJsZSBFUDUgKi8KKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCXJldCA9IGFmOTAxNV9jbGVhcl9yZWdfYml0KGQsIDB4ZGQxMywgNSk7IC8qIGRpc2FibGUgRVA0IE5BSyAqLworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJaWYgKGFmOTAxNV9jb25maWcuZHVhbF9tb2RlKSB7CisJCXJldCA9IGFmOTAxNV9jbGVhcl9yZWdfYml0KGQsIDB4ZGQxMywgNik7IC8qIGRpc2FibGUgRVA1IE5BSyAqLworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisJLyogRVA0IHhmZXIgbGVuZ3RoICovCisJcmV0ID0gYWY5MDE1X3dyaXRlX3JlZyhkLCAweGRkODgsIGZyYW1lX3NpemUgJiAweGZmKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXJldCA9IGFmOTAxNV93cml0ZV9yZWcoZCwgMHhkZDg5LCBmcmFtZV9zaXplID4+IDgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJLyogRVA1IHhmZXIgbGVuZ3RoICovCisJcmV0ID0gYWY5MDE1X3dyaXRlX3JlZyhkLCAweGRkOGEsIGZyYW1lX3NpemUgJiAweGZmKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXJldCA9IGFmOTAxNV93cml0ZV9yZWcoZCwgMHhkZDhiLCBmcmFtZV9zaXplID4+IDgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJcmV0ID0gYWY5MDE1X3dyaXRlX3JlZyhkLCAweGRkMGMsIHBhY2tldF9zaXplKTsgLyogRVA0IHBhY2tldCBzaXplICovCisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlyZXQgPSBhZjkwMTVfd3JpdGVfcmVnKGQsIDB4ZGQwZCwgcGFja2V0X3NpemUpOyAvKiBFUDUgcGFja2V0IHNpemUgKi8KKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXJldCA9IGFmOTAxNV9jbGVhcl9yZWdfYml0KGQsIDB4ZDUwNywgMik7IC8qIG5lZ2F0ZSBFUDQgcmVzZXQgKi8KKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCWlmIChhZjkwMTVfY29uZmlnLmR1YWxfbW9kZSkgeworCQlyZXQgPSBhZjkwMTVfY2xlYXJfcmVnX2JpdChkLCAweGQ1MGIsIDEpOyAvKiBuZWdhdGUgRVA1IHJlc2V0ICovCisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCX0KKworCS8qIGVuYWJsZSAvIGRpc2FibGUgbXAyaWYyICovCisJaWYgKGFmOTAxNV9jb25maWcuZHVhbF9tb2RlKQorCQlyZXQgPSBhZjkwMTVfc2V0X3JlZ19iaXQoZCwgMHhkNTBiLCAwKTsKKwllbHNlCisJCXJldCA9IGFmOTAxNV9jbGVhcl9yZWdfYml0KGQsIDB4ZDUwYiwgMCk7CitlcnJvcjoKKwlpZiAocmV0KQorCQllcnIoImVuZHBvaW50IGluaXQgZmFpbGVkOiVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxNV9jb3B5X2Zpcm13YXJlKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlpbnQgcmV0OworCXU4IGZ3X3BhcmFtc1s0XTsKKwl1OCB2YWwsIGk7CisJc3RydWN0IHJlcV90IHJlcSA9IHtDT1BZX0ZJUk1XQVJFLCAwLCAweDUxMDAsIDAsIDAsIHNpemVvZihmd19wYXJhbXMpLAorCQlmd19wYXJhbXMgfTsKKwlkZWJfaW5mbygiJXM6XG4iLCBfX2Z1bmNfXyk7CisKKwlmd19wYXJhbXNbMF0gPSBhZjkwMTVfY29uZmlnLmZpcm13YXJlX3NpemUgPj4gODsKKwlmd19wYXJhbXNbMV0gPSBhZjkwMTVfY29uZmlnLmZpcm13YXJlX3NpemUgJiAweGZmOworCWZ3X3BhcmFtc1syXSA9IGFmOTAxNV9jb25maWcuZmlybXdhcmVfY2hlY2tzdW0gPj4gODsKKwlmd19wYXJhbXNbM10gPSBhZjkwMTVfY29uZmlnLmZpcm13YXJlX2NoZWNrc3VtICYgMHhmZjsKKworCS8qIHdhaXQgMm5kIGRlbW9kdWxhdG9yIHJlYWR5ICovCisJbXNsZWVwKDEwMCk7CisKKwlyZXQgPSBhZjkwMTVfcmVhZF9yZWdfaTJjKGQsIDB4M2EsIDB4OThiZSwgJnZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwllbHNlCisJCWRlYl9pbmZvKCIlczogZmlybXdhcmUgc3RhdHVzOiUwMnhcbiIsIF9fZnVuY19fLCB2YWwpOworCisJaWYgKHZhbCA9PSAweDBjKSAvKiBmdyBpcyBydW5uaW5nLCBubyBuZWVkIGZvciBkb3dubG9hZCAqLworCQlnb3RvIGV4aXQ7CisKKwkvKiBzZXQgSTJDIG1hc3RlciBjbG9jayB0byBmYXN0ICh0byBzcGVlZCB1cCBmaXJtd2FyZSBjb3B5KSAqLworCXJldCA9IGFmOTAxNV93cml0ZV9yZWcoZCwgMHhkNDE2LCAweDA0KTsgLyogMHgwNCAqIDQwMG5zICovCisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCW1zbGVlcCg1MCk7CisKKwkvKiBjb3B5IGZpcm13YXJlICovCisJcmV0ID0gYWY5MDE1X2N0cmxfbXNnKGQsICZyZXEpOworCWlmIChyZXQpCisJCWVycigiZmlybXdhcmUgY29weSBjbWQgZmFpbGVkOiVkIiwgcmV0KTsKKwlkZWJfaW5mbygiJXM6IGZpcm13YXJlIGNvcHkgZG9uZVxuIiwgX19mdW5jX18pOworCisJLyogc2V0IEkyQyBtYXN0ZXIgY2xvY2sgYmFjayB0byBub3JtYWwgKi8KKwlyZXQgPSBhZjkwMTVfd3JpdGVfcmVnKGQsIDB4ZDQxNiwgMHgxNCk7IC8qIDB4MTQgKiA0MDBucyAqLworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiByZXF1ZXN0IGJvb3QgZmlybXdhcmUgKi8KKwlyZXQgPSBhZjkwMTVfd3JpdGVfcmVnX2kyYyhkLCBhZjkwMTVfYWY5MDEzX2NvbmZpZ1sxXS5kZW1vZF9hZGRyZXNzLAorCQkweGUyMDUsIDEpOworCWRlYl9pbmZvKCIlczogZmlybXdhcmUgYm9vdCBjbWQgc3RhdHVzOiVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKKwkJbXNsZWVwKDEwMCk7CisKKwkJLyogY2hlY2sgZmlybXdhcmUgc3RhdHVzICovCisJCXJldCA9IGFmOTAxNV9yZWFkX3JlZ19pMmMoZCwKKwkJCWFmOTAxNV9hZjkwMTNfY29uZmlnWzFdLmRlbW9kX2FkZHJlc3MsIDB4OThiZSwgJnZhbCk7CisJCWRlYl9pbmZvKCIlczogZmlybXdhcmUgc3RhdHVzIGNtZCBzdGF0dXM6JWQgZncgc3RhdHVzOiUwMnhcbiIsCisJCQlfX2Z1bmNfXywgcmV0LCB2YWwpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKworCQlpZiAodmFsID09IDB4MGMgfHwgdmFsID09IDB4MDQpIC8qIHN1Y2Nlc3Mgb3IgZmFpbCAqLworCQkJYnJlYWs7CisJfQorCisJaWYgKHZhbCA9PSAweDA0KSB7CisJCWVycigiZmlybXdhcmUgZGlkIG5vdCBydW4iKTsKKwkJcmV0ID0gLTE7CisJfSBlbHNlIGlmICh2YWwgIT0gMHgwYykgeworCQllcnIoImZpcm13YXJlIGJvb3QgdGltZW91dCIpOworCQlyZXQgPSAtMTsKKwl9CisKK2Vycm9yOgorZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCisvKiBkdW1wIGVlcHJvbSAqLworc3RhdGljIGludCBhZjkwMTVfZWVwcm9tX2R1bXAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoreworCWNoYXIgYnVmWzUyXSwgYnVmMls0XTsKKwl1OCByZWcsIHZhbDsKKworCWZvciAocmVnID0gMDsgOyByZWcrKykgeworCQlpZiAocmVnICUgMTYgPT0gMCkgeworCQkJaWYgKHJlZykKKwkJCQlkZWJfaW5mbygiJXNcbiIsIGJ1Zik7CisJCQlzcHJpbnRmKGJ1ZiwgIiUwMng6ICIsIHJlZyk7CisJCX0KKwkJaWYgKGFmOTAxNV9yZWFkX3JlZ19pMmMoZCwgQUY5MDE1X0kyQ19FRVBST00sIHJlZywgJnZhbCkgPT0gMCkKKwkJCXNwcmludGYoYnVmMiwgIiUwMnggIiwgdmFsKTsKKwkJZWxzZQorCQkJc3RyY3B5KGJ1ZjIsICItLSAiKTsKKwkJc3RyY2F0KGJ1ZiwgYnVmMik7CisJCWlmIChyZWcgPT0gMHhmZikKKwkJCWJyZWFrOworCX0KKwlkZWJfaW5mbygiJXNcbiIsIGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhZjkwMTVfZG93bmxvYWRfaXJfdGFibGUoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoreworCWludCBpLCBwYWNrZXRzID0gMCwgcmV0OworCXUxNiBhZGRyID0gMHg5YTU2OyAvKiBpci10YWJsZSBzdGFydCBhZGRyZXNzICovCisJc3RydWN0IHJlcV90IHJlcSA9IHtXUklURV9NRU1PUlksIDAsIDAsIDAsIDAsIDEsIE5VTEx9OworCXU4ICpkYXRhID0gTlVMTDsKKwlkZWJfaW5mbygiJXM6XG4iLCBfX2Z1bmNfXyk7CisKKwlkYXRhID0gYWY5MDE1X2NvbmZpZy5pcl90YWJsZTsKKwlwYWNrZXRzID0gYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplOworCisJLyogbm8gcmVtb3RlICovCisJaWYgKCFwYWNrZXRzKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBsb2FkIHJlbW90ZSBpci10YWJsZSAqLworCWZvciAoaSA9IDA7IGkgPCBwYWNrZXRzOyBpKyspIHsKKwkJcmVxLmFkZHIgPSBhZGRyICsgaTsKKwkJcmVxLmRhdGEgPSAmZGF0YVtpXTsKKwkJcmV0ID0gYWY5MDE1X2N0cmxfbXNnKGQsICZyZXEpOworCQlpZiAocmV0KSB7CisJCQllcnIoImlyLXRhYmxlIGRvd25sb2FkIGZhaWxlZCBhdCBwYWNrZXQgJWQgd2l0aCAiIFwKKwkJCQkiY29kZSAlZCIsIGksIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCitleGl0OgorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFmOTAxNV9pbml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlpbnQgcmV0OworCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKKworCXJldCA9IGFmOTAxNV9pbml0X2VuZHBvaW50KGQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlyZXQgPSBhZjkwMTVfZG93bmxvYWRfaXJfdGFibGUoZCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTVfcGlkX2ZpbHRlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBvbm9mZikKK3sKKwlpbnQgcmV0OworCWRlYl9pbmZvKCIlczogb25vZmY6JWRcbiIsIF9fZnVuY19fLCBvbm9mZik7CisKKwlpZiAob25vZmYpCisJCXJldCA9IGFmOTAxNV9zZXRfcmVnX2JpdChhZGFwLT5kZXYsIDB4ZDUwMywgMCk7CisJZWxzZQorCQlyZXQgPSBhZjkwMTVfY2xlYXJfcmVnX2JpdChhZGFwLT5kZXYsIDB4ZDUwMywgMCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxNV9waWRfZmlsdGVyKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBpbmRleCwgdTE2IHBpZCwKKwlpbnQgb25vZmYpCit7CisJaW50IHJldDsKKwl1OCBpZHg7CisKKwlkZWJfaW5mbygiJXM6IHNldCBwaWQgZmlsdGVyLCBpbmRleCAlZCwgcGlkICV4LCBvbm9mZiAlZFxuIiwKKwkJX19mdW5jX18sIGluZGV4LCBwaWQsIG9ub2ZmKTsKKworCXJldCA9IGFmOTAxNV93cml0ZV9yZWcoYWRhcC0+ZGV2LCAweGQ1MDUsIChwaWQgJiAweGZmKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IGFmOTAxNV93cml0ZV9yZWcoYWRhcC0+ZGV2LCAweGQ1MDYsIChwaWQgPj4gOCkpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlpZHggPSAoKGluZGV4ICYgMHgxZikgfCAoMSA8PCA1KSk7CisJcmV0ID0gYWY5MDE1X3dyaXRlX3JlZyhhZGFwLT5kZXYsIDB4ZDUwNCwgaWR4KTsKKworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTVfZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlpbnQgaSwgbGVuLCBwYWNrZXRzLCByZW1haW5kZXIsIHJldDsKKwlzdHJ1Y3QgcmVxX3QgcmVxID0ge0RPV05MT0FEX0ZJUk1XQVJFLCAwLCAwLCAwLCAwLCAwLCBOVUxMfTsKKwl1MTYgYWRkciA9IDB4NTEwMDsgLyogZmlybXdhcmUgc3RhcnQgYWRkcmVzcyAqLworCXUxNiBjaGVja3N1bSA9IDA7CisKKwlkZWJfaW5mbygiJXM6XG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBjYWxjIGNoZWNrc3VtICovCisJZm9yIChpID0gMDsgaSA8IGZ3LT5zaXplOyBpKyspCisJCWNoZWNrc3VtICs9IGZ3LT5kYXRhW2ldOworCisJYWY5MDE1X2NvbmZpZy5maXJtd2FyZV9zaXplID0gZnctPnNpemU7CisJYWY5MDE1X2NvbmZpZy5maXJtd2FyZV9jaGVja3N1bSA9IGNoZWNrc3VtOworCisJI2RlZmluZSBGV19QQUNLRVRfTUFYX0RBVEEgIDU1CisKKwlwYWNrZXRzID0gZnctPnNpemUgLyBGV19QQUNLRVRfTUFYX0RBVEE7CisJcmVtYWluZGVyID0gZnctPnNpemUgJSBGV19QQUNLRVRfTUFYX0RBVEE7CisJbGVuID0gRldfUEFDS0VUX01BWF9EQVRBOworCWZvciAoaSA9IDA7IGkgPD0gcGFja2V0czsgaSsrKSB7CisJCWlmIChpID09IHBhY2tldHMpICAvKiBzZXQgc2l6ZSBvZiB0aGUgbGFzdCBwYWNrZXQgKi8KKwkJCWxlbiA9IHJlbWFpbmRlcjsKKworCQlyZXEuZGF0YV9sZW4gPSBsZW47CisJCXJlcS5kYXRhID0gKHU4ICopKGZ3LT5kYXRhICsgaSAqIEZXX1BBQ0tFVF9NQVhfREFUQSk7CisJCXJlcS5hZGRyID0gYWRkcjsKKwkJYWRkciArPSBGV19QQUNLRVRfTUFYX0RBVEE7CisKKwkJcmV0ID0gYWY5MDE1X3J3X3VkZXYodWRldiwgJnJlcSk7CisJCWlmIChyZXQpIHsKKwkJCWVycigiZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkIGF0IHBhY2tldCAlZCB3aXRoICIgXAorCQkJCSJjb2RlICVkIiwgaSwgcmV0KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwkvKiBmaXJtd2FyZSBsb2FkZWQsIHJlcXVlc3QgYm9vdCAqLworCXJlcS5jbWQgPSBCT09UOworCXJldCA9IGFmOTAxNV9yd191ZGV2KHVkZXYsICZyZXEpOworCWlmIChyZXQpIHsKKwkJZXJyKCJmaXJtd2FyZSBib290IGZhaWxlZDolZCIsIHJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogZmlybXdhcmUgaXMgcnVubmluZywgcmVjb25uZWN0IGRldmljZSBpbiB0aGUgdXNiIGJ1cyAqLworCXJlcS5jbWQgPSBSRUNPTk5FQ1RfVVNCOworCXJldCA9IGFmOTAxNV9yd191ZGV2KHVkZXYsICZyZXEpOworCWlmIChyZXQpCisJCWVycigicmVjb25uZWN0IGZhaWxlZDogJWQiLCByZXQpOworCitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxNV9yZWFkX2NvbmZpZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgcmV0OworCXU4IHZhbCwgaSwgb2Zmc2V0ID0gMDsKKwlzdHJ1Y3QgcmVxX3QgcmVxID0ge1JFQURfSTJDLCBBRjkwMTVfSTJDX0VFUFJPTSwgMCwgMCwgMSwgMSwgJnZhbH07CisJY2hhciBtYW51ZmFjdHVyZXJbMTBdOworCisJLyogSVIgcmVtb3RlIGNvbnRyb2xsZXIgKi8KKwlyZXEuYWRkciA9IEFGOTAxNV9FRVBST01fSVJfTU9ERTsKKwlyZXQgPSBhZjkwMTVfcndfdWRldih1ZGV2LCAmcmVxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCWRlYl9pbmZvKCIlczogSVIgbW9kZTolZFxuIiwgX19mdW5jX18sIHZhbCk7CisJZm9yIChpID0gMDsgaSA8IGFmOTAxNV9wcm9wZXJ0aWVzX2NvdW50OyBpKyspIHsKKwkJaWYgKHZhbCA9PSBBRjkwMTVfSVJfTU9ERV9ESVNBQkxFRCB8fCB2YWwgPT0gMHgwNCkgeworCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9IE5VTEw7CisJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgID0gMDsKKwkJfSBlbHNlIGlmIChkdmJfdXNiX2FmOTAxNV9yZW1vdGUpIHsKKwkJCS8qIGxvYWQgcmVtb3RlIGRlZmluZWQgYXMgbW9kdWxlIHBhcmFtICovCisJCQlzd2l0Y2ggKGR2Yl91c2JfYWY5MDE1X3JlbW90ZSkgeworCQkJY2FzZSBBRjkwMTVfUkVNT1RFX0FfTElOS19EVFVfTToKKwkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KKwkJCQkgIGFmOTAxNV9yY19rZXlzX2FfbGluazsKKwkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQorCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19hX2xpbmspOworCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPSBhZjkwMTVfaXJfdGFibGVfYV9saW5rOworCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hX2xpbmspOworCQkJCWJyZWFrOworCQkJY2FzZSBBRjkwMTVfUkVNT1RFX01TSV9ESUdJVk9YX01JTklfSUlfVjM6CisJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9CisJCQkJICBhZjkwMTVfcmNfa2V5c19tc2k7CisJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KKwkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXNpKTsKKwkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0gYWY5MDE1X2lyX3RhYmxlX21zaTsKKwkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQorCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXNpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQUY5MDE1X1JFTU9URV9NWUdJQ1RWX1U3MTg6CisJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9CisJCQkJICBhZjkwMTVfcmNfa2V5c19teWdpY3R2OworCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX215Z2ljdHYpOworCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQorCQkJCSAgYWY5MDE1X2lyX3RhYmxlX215Z2ljdHY7CisJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KKwkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX215Z2ljdHYpOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJc3dpdGNoICh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSB7CisJCQljYXNlIFVTQl9WSURfTEVBRFRFSzoKKwkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KKwkJCQkgIGFmOTAxNV9yY19rZXlzX2xlYWR0ZWs7CisJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KKwkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbGVhZHRlayk7CisJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9CisJCQkJICBhZjkwMTVfaXJfdGFibGVfbGVhZHRlazsKKwkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQorCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbGVhZHRlayk7CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9WSURfVklTSU9OUExVUzoKKwkJCQlpZiAodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0KKwkJCQlVU0JfUElEX0FaVVJFV0FWRV9BRF9UVTcwMCkgeworCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KKwkJCQkJICBhZjkwMTVfcmNfa2V5c190d2luaGFuOworCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQorCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfdHdpbmhhbik7CisJCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQorCQkJCQkgIGFmOTAxNV9pcl90YWJsZV90d2luaGFuOworCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQorCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX3R3aW5oYW4pOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX1ZJRF9LV09STERfMjoKKwkJCQkvKiBUT0RPOiB1c2UgY29ycmVjdCByYyBrZXlzICovCisJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9CisJCQkJICBhZjkwMTVfcmNfa2V5c190d2luaGFuOworCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX3R3aW5oYW4pOworCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPSBhZjkwMTVfaXJfdGFibGVfa3dvcmxkOworCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9rd29ybGQpOworCQkJCWJyZWFrOworCQkJLyogQ2hlY2sgVVNCIG1hbnVmYWN0dXJlciBhbmQgcHJvZHVjdCBzdHJpbmdzIGFuZCB0cnkKKwkJCSAgIHRvIGRldGVybWluZSBjb3JyZWN0IHJlbW90ZSBpbiBjYXNlIG9mIGNoaXAgdmVuZG9yCisJCQkgICByZWZlcmVuY2UgSURzIGFyZSB1c2VkLiAqLworCQkJY2FzZSBVU0JfVklEX0FGQVRFQ0g6CisJCQkJbWVtc2V0KG1hbnVmYWN0dXJlciwgMCwgc2l6ZW9mKG1hbnVmYWN0dXJlcikpOworCQkJCXVzYl9zdHJpbmcodWRldiwgdWRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLAorCQkJCQltYW51ZmFjdHVyZXIsIHNpemVvZihtYW51ZmFjdHVyZXIpKTsKKwkJCQlpZiAoIXN0cmNtcCgiR2VuaWF0ZWNoIiwgbWFudWZhY3R1cmVyKSkgeworCQkJCQkvKiBpTWFudWZhY3R1cmVyIDEgR2VuaWF0ZWNoCisJCQkJCSAgIGlQcm9kdWN0ICAgICAgMiBBRjkwMTUgKi8KKwkJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9CisJCQkJCSAgYWY5MDE1X3JjX2tleXNfbXlnaWN0djsKKwkJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KKwkJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX215Z2ljdHYpOworCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KKwkJCQkJICBhZjkwMTVfaXJfdGFibGVfbXlnaWN0djsKKwkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KKwkJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9teWdpY3R2KTsKKwkJCQl9IGVsc2UgaWYgKCFzdHJjbXAoIk1TSSIsIG1hbnVmYWN0dXJlcikpIHsKKwkJCQkJLyogaU1hbnVmYWN0dXJlciAxIE1TSQorCQkJCQkgICBpUHJvZHVjdCAgICAgIDIgTVNJIEstVk9YICovCisJCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQorCQkJCQkgIGFmOTAxNV9yY19rZXlzX21zaTsKKwkJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KKwkJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX21zaSk7CisJCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQorCQkJCQkgIGFmOTAxNV9pcl90YWJsZV9tc2k7CisJCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9CisJCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXNpKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBUUyBtb2RlIC0gb25lIG9yIHR3byByZWNlaXZlcnMgKi8KKwlyZXEuYWRkciA9IEFGOTAxNV9FRVBST01fVFNfTU9ERTsKKwlyZXQgPSBhZjkwMTVfcndfdWRldih1ZGV2LCAmcmVxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCWFmOTAxNV9jb25maWcuZHVhbF9tb2RlID0gdmFsOworCWRlYl9pbmZvKCIlczogVFMgbW9kZTolZFxuIiwgX19mdW5jX18sIGFmOTAxNV9jb25maWcuZHVhbF9tb2RlKTsKKwkvKiBkaXNhYmxlIGR1YWwgbW9kZSBieSBkZWZhdWx0IGJlY2F1c2UgaXQgaXMgYnVnZ3kgKi8KKwlpZiAoIWR2Yl91c2JfYWY5MDE1X2R1YWxfbW9kZSkKKwkJYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUgPSAwOworCisJLyogc2V0IGJ1ZmZlciBzaXplIGFjY29yZGluZyB0byBVU0IgcG9ydCBzcGVlZCAqLworCWZvciAoaSA9IDA7IGkgPCBhZjkwMTVfcHJvcGVydGllc19jb3VudDsgaSsrKSB7CisJCS8qIFVTQjEuMSBzZXQgc21hbGxlciBidWZmZXJzaXplIGFuZCBkaXNhYmxlIDJuZCBhZGFwdGVyICovCisJCWlmICh1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkgeworCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0uYWRhcHRlci0+c3RyZWFtLnUuYnVsay5idWZmZXJzaXplID0KKwkJCQlUU19VU0IxMV9NQVhfUEFDS0VUX1NJWkU7CisJCQkvKiBkaXNhYmxlIDJuZCBhZGFwdGVyIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQorCQkJICAgUElELWZpbHRlcnMgKi8KKwkJCWFmOTAxNV9jb25maWcuZHVhbF9tb2RlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLmFkYXB0ZXItPnN0cmVhbS51LmJ1bGsuYnVmZmVyc2l6ZSA9CisJCQkJVFNfVVNCMjBfTUFYX1BBQ0tFVF9TSVpFOworCQl9CisJfQorCisJaWYgKGFmOTAxNV9jb25maWcuZHVhbF9tb2RlKSB7CisJCS8qIHJlYWQgMm5kIGRlbW9kdWxhdG9yIEkyQyBhZGRyZXNzICovCisJCXJlcS5hZGRyID0gQUY5MDE1X0VFUFJPTV9ERU1PRDJfSTJDOworCQlyZXQgPSBhZjkwMTVfcndfdWRldih1ZGV2LCAmcmVxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCWFmOTAxNV9hZjkwMTNfY29uZmlnWzFdLmRlbW9kX2FkZHJlc3MgPSB2YWw7CisKKwkJLyogZW5hYmxlIDJuZCBhZGFwdGVyICovCisJCWZvciAoaSA9IDA7IGkgPCBhZjkwMTVfcHJvcGVydGllc19jb3VudDsgaSsrKQorCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ubnVtX2FkYXB0ZXJzID0gMjsKKworCX0gZWxzZSB7CisJCSAvKiBkaXNhYmxlIDJuZCBhZGFwdGVyICovCisJCWZvciAoaSA9IDA7IGkgPCBhZjkwMTVfcHJvcGVydGllc19jb3VudDsgaSsrKQorCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ubnVtX2FkYXB0ZXJzID0gMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYWY5MDE1X3Byb3BlcnRpZXNbMF0ubnVtX2FkYXB0ZXJzOyBpKyspIHsKKwkJaWYgKGkgPT0gMSkKKwkJCW9mZnNldCA9IEFGOTAxNV9FRVBST01fT0ZGU0VUOworCQkvKiB4dGFsICovCisJCXJlcS5hZGRyID0gQUY5MDE1X0VFUFJPTV9YVEFMX1RZUEUxICsgb2Zmc2V0OworCQlyZXQgPSBhZjkwMTVfcndfdWRldih1ZGV2LCAmcmVxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2UgMDoKKwkJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLmFkY19jbG9jayA9IDI4ODAwOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLmFkY19jbG9jayA9IDIwNDgwOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLmFkY19jbG9jayA9IDI4MDAwOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLmFkY19jbG9jayA9IDI1MDAwOworCQkJYnJlYWs7CisJCX07CisJCWRlYl9pbmZvKCIlczogWyVkXSB4dGFsOiVkIHNldCBhZGNfY2xvY2s6JWRcbiIsIF9fZnVuY19fLCBpLAorCQkJdmFsLCBhZjkwMTVfYWY5MDEzX2NvbmZpZ1tpXS5hZGNfY2xvY2spOworCisJCS8qIHR1bmVyIElGICovCisJCXJlcS5hZGRyID0gQUY5MDE1X0VFUFJPTV9JRjFIICsgb2Zmc2V0OworCQlyZXQgPSBhZjkwMTVfcndfdWRldih1ZGV2LCAmcmVxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLnR1bmVyX2lmID0gdmFsIDw8IDg7CisJCXJlcS5hZGRyID0gQUY5MDE1X0VFUFJPTV9JRjFMICsgb2Zmc2V0OworCQlyZXQgPSBhZjkwMTVfcndfdWRldih1ZGV2LCAmcmVxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLnR1bmVyX2lmICs9IHZhbDsKKwkJZGViX2luZm8oIiVzOiBbJWRdIElGMTolZFxuIiwgX19mdW5jX18sIGksCisJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1swXS50dW5lcl9pZik7CisKKwkJLyogTVQyMDYwIElGMSAqLworCQlyZXEuYWRkciA9IEFGOTAxNV9FRVBST01fTVQyMDYwX0lGMUggICsgb2Zmc2V0OworCQlyZXQgPSBhZjkwMTVfcndfdWRldih1ZGV2LCAmcmVxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCWFmOTAxNV9jb25maWcubXQyMDYwX2lmMVtpXSA9IHZhbCA8PCA4OworCQlyZXEuYWRkciA9IEFGOTAxNV9FRVBST01fTVQyMDYwX0lGMUwgKyBvZmZzZXQ7CisJCXJldCA9IGFmOTAxNV9yd191ZGV2KHVkZXYsICZyZXEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJYWY5MDE1X2NvbmZpZy5tdDIwNjBfaWYxW2ldICs9IHZhbDsKKwkJZGViX2luZm8oIiVzOiBbJWRdIE1UMjA2MCBJRjE6JWRcbiIsIF9fZnVuY19fLCBpLAorCQkJYWY5MDE1X2NvbmZpZy5tdDIwNjBfaWYxW2ldKTsKKworCQkvKiB0dW5lciAqLworCQlyZXEuYWRkciA9ICBBRjkwMTVfRUVQUk9NX1RVTkVSX0lEMSArIG9mZnNldDsKKwkJcmV0ID0gYWY5MDE1X3J3X3VkZXYodWRldiwgJnJlcSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCQlzd2l0Y2ggKHZhbCkgeworCQljYXNlIEFGOTAxM19UVU5FUl9FTlY3N0gxMUQ1OgorCQljYXNlIEFGOTAxM19UVU5FUl9NVDIwNjA6CisJCWNhc2UgQUY5MDEzX1RVTkVSX01DNDRTODAzOgorCQljYXNlIEFGOTAxM19UVU5FUl9RVDEwMTA6CisJCWNhc2UgQUY5MDEzX1RVTkVSX1VOS05PV046CisJCWNhc2UgQUY5MDEzX1RVTkVSX01UMjA2MF8yOgorCQljYXNlIEFGOTAxM19UVU5FUl9UREExODI3MToKKwkJY2FzZSBBRjkwMTNfVFVORVJfUVQxMDEwQToKKwkJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLnJmX3NwZWNfaW52ID0gMTsKKwkJCWJyZWFrOworCQljYXNlIEFGOTAxM19UVU5FUl9NWEw1MDAzRDoKKwkJY2FzZSBBRjkwMTNfVFVORVJfTVhMNTAwNUQ6CisJCWNhc2UgQUY5MDEzX1RVTkVSX01YTDUwMDVSOgorCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0ucmZfc3BlY19pbnYgPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl3YXJuKCJ0dW5lciBpZDolZCBub3Qgc3VwcG9ydGVkLCBwbGVhc2UgcmVwb3J0ISIsIHZhbCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfTsKKworCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1tpXS50dW5lciA9IHZhbDsKKwkJZGViX2luZm8oIiVzOiBbJWRdIHR1bmVyIGlkOiVkXG4iLCBfX2Z1bmNfXywgaSwgdmFsKTsKKwl9CisKK2Vycm9yOgorCWlmIChyZXQpCisJCWVycigiZWVwcm9tIHJlYWQgZmFpbGVkOiVkIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDE1X2lkZW50aWZ5X3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCSBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyAqcHJvcHMsCisJCQkJIHN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiAqKmRlc2MsCisJCQkJIGludCAqY29sZCkKK3sKKwlpbnQgcmV0OworCXU4IHJlcGx5OworCXN0cnVjdCByZXFfdCByZXEgPSB7R0VUX0NPTkZJRywgMCwgMCwgMCwgMCwgMSwgJnJlcGx5fTsKKworCXJldCA9IGFmOTAxNV9yd191ZGV2KHVkZXYsICZyZXEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkZWJfaW5mbygiJXM6IHJlcGx5OiUwMnhcbiIsIF9fZnVuY19fLCByZXBseSk7CisJaWYgKHJlcGx5ID09IDB4MDIpCisJCSpjb2xkID0gMDsKKwllbHNlCisJCSpjb2xkID0gMTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDE1X3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKK3sKKwl1OCBidWZbOF07CisJc3RydWN0IHJlcV90IHJlcSA9IHtHRVRfSVJfQ09ERSwgMCwgMCwgMCwgMCwgc2l6ZW9mKGJ1ZiksIGJ1Zn07CisJc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOworCWludCBpLCByZXQ7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisKKwlyZXQgPSBhZjkwMTVfY3RybF9tc2coZCwgJnJlcSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCSpldmVudCA9IDA7CisJKnN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOworCisJZm9yIChpID0gMDsgaSA8IGQtPnByb3BzLnJjX2tleV9tYXBfc2l6ZTsgaSsrKSB7CisJCWlmICghYnVmWzFdICYmIGtleW1hcFtpXS5jdXN0b20gPT0gYnVmWzBdICYmCisJCSAgICBrZXltYXBbaV0uZGF0YSA9PSBidWZbMl0pIHsKKwkJCSpldmVudCA9IGtleW1hcFtpXS5ldmVudDsKKwkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghYnVmWzFdKQorCQlkZWJfcmMoIiVzOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCQlfX2Z1bmNfXywgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLCBidWZbNF0sCisJCQlidWZbNV0sIGJ1Zls2XSwgYnVmWzddKTsKKworCXJldHVybiAwOworfQorCisvKiBpbml0IDJuZCBJMkMgYWRhcHRlciAqLworaW50IGFmOTAxNV9pMmNfaW5pdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYWY5MDE1X3N0YXRlICpzdGF0ZSA9IGQtPnByaXY7CisJZGViX2luZm8oIiVzOlxuIiwgX19mdW5jX18pOworCisJc3RybmNweShzdGF0ZS0+aTJjX2FkYXAubmFtZSwgZC0+ZGVzYy0+bmFtZSwKKwkJc2l6ZW9mKHN0YXRlLT5pMmNfYWRhcC5uYW1lKSk7CisjaWZkZWYgSTJDX0FEQVBfQ0xBU1NfVFZfRElHSVRBTAorCXN0YXRlLT5pMmNfYWRhcC5jbGFzcyA9IEkyQ19BREFQX0NMQVNTX1RWX0RJR0lUQUwsCisjZWxzZQorCXN0YXRlLT5pMmNfYWRhcC5jbGFzcyA9IEkyQ19DTEFTU19UVl9ESUdJVEFMLAorI2VuZGlmCisJc3RhdGUtPmkyY19hZGFwLmFsZ28gICAgICA9IGQtPnByb3BzLmkyY19hbGdvOworCXN0YXRlLT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBOVUxMOworCXN0YXRlLT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJmQtPnVkZXYtPmRldjsKKworCWkyY19zZXRfYWRhcGRhdGEoJnN0YXRlLT5pMmNfYWRhcCwgZCk7CisKKwlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoJnN0YXRlLT5pMmNfYWRhcCk7CisJaWYgKHJldCA8IDApCisJCWVycigiY291bGQgbm90IGFkZCBpMmMgYWRhcHRlciIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTVfYWY5MDEzX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWludCByZXQ7CisJc3RydWN0IGFmOTAxNV9zdGF0ZSAqc3RhdGUgPSBhZGFwLT5kZXYtPnByaXY7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcDsKKworCWlmIChhZGFwLT5pZCA9PSAwKSB7CisJCS8qIHNlbGVjdCBJMkMgYWRhcHRlciAqLworCQlpMmNfYWRhcCA9ICZhZGFwLT5kZXYtPmkyY19hZGFwOworCisJCWRlYl9pbmZvKCIlczogaW5pdCBJMkNcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gYWY5MDE1X2kyY19pbml0KGFkYXAtPmRldik7CisKKwkJLyogZHVtcCBlZXByb20gKGRlYnVnKSAqLworCQlyZXQgPSBhZjkwMTVfZWVwcm9tX2R1bXAoYWRhcC0+ZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfSBlbHNlIHsKKwkJLyogc2VsZWN0IEkyQyBhZGFwdGVyICovCisJCWkyY19hZGFwID0gJnN0YXRlLT5pMmNfYWRhcDsKKworCQkvKiBjb3B5IGZpcm13YXJlIHRvIDJuZCBkZW1vZHVsYXRvciAqLworCQlpZiAoYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUpIHsKKwkJCXJldCA9IGFmOTAxNV9jb3B5X2Zpcm13YXJlKGFkYXAtPmRldik7CisJCQlpZiAocmV0KSB7CisJCQkJZXJyKCJmaXJtd2FyZSBjb3B5IHRvIDJuZCBmcm9udGVuZCAiIFwKKwkJCQkJImZhaWxlZCwgd2lsbCBkaXNhYmxlIGl0Iik7CisJCQkJYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUgPSAwOworCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCQl9IGVsc2UgeworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisKKwkvKiBhdHRhY2ggZGVtb2R1bGF0b3IgKi8KKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goYWY5MDEzX2F0dGFjaCwgJmFmOTAxNV9hZjkwMTNfY29uZmlnW2FkYXAtPmlkXSwKKwkJaTJjX2FkYXApOworCisJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAtRU5PREVWIDogMDsKK30KKworc3RhdGljIHN0cnVjdCBtdDIwNjBfY29uZmlnIGFmOTAxNV9tdDIwNjBfY29uZmlnID0geworCS5pMmNfYWRkcmVzcyA9IDB4YzAsCisJLmNsb2NrX291dCA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHF0MTAxMF9jb25maWcgYWY5MDE1X3F0MTAxMF9jb25maWcgPSB7CisJLmkyY19hZGRyZXNzID0gMHhjNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfY29uZmlnIGFmOTAxNV90ZGExODI3MV9jb25maWcgPSB7CisJLmdhdGUgPSBUREExODI3MV9HQVRFX0RJR0lUQUwsCisJLnNtYWxsX2kyYyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IG14bDUwMDVzX2NvbmZpZyBhZjkwMTVfbXhsNTAwM19jb25maWcgPSB7CisJLmkyY19hZGRyZXNzICAgICA9IDB4YzYsCisJLmlmX2ZyZXEgICAgICAgICA9IElGX0ZSRVFfNDU3MDAwMEhaLAorCS54dGFsX2ZyZXEgICAgICAgPSBDUllTVEFMX0ZSRVFfMTYwMDAwMDBIWiwKKwkuYWdjX21vZGUgICAgICAgID0gTVhMX1NJTkdMRV9BR0MsCisJLnRyYWNraW5nX2ZpbHRlciA9IE1YTF9URl9ERUZBVUxULAorCS5yc3NpX2VuYWJsZSAgICAgPSBNWExfUlNTSV9FTkFCTEUsCisJLmNhcF9zZWxlY3QgICAgICA9IE1YTF9DQVBfU0VMX0VOQUJMRSwKKwkuZGl2X291dCAgICAgICAgID0gTVhMX0RJVl9PVVRfNCwKKwkuY2xvY2tfb3V0ICAgICAgID0gTVhMX0NMT0NLX09VVF9ESVNBQkxFLAorCS5vdXRwdXRfbG9hZCAgICAgPSBNWEw1MDA1U19JRl9PVVRQVVRfTE9BRF8yMDBfT0hNLAorCS50b3AJCSA9IE1YTDUwMDVTX1RPUF8yNVAyLAorCS5tb2RfbW9kZSAgICAgICAgPSBNWExfRElHSVRBTF9NT0RFLAorCS5pZl9tb2RlICAgICAgICAgPSBNWExfWkVST19JRiwKKwkuQWdjTWFzdGVyQnl0ZSAgID0gMHgwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXhsNTAwNXNfY29uZmlnIGFmOTAxNV9teGw1MDA1X2NvbmZpZyA9IHsKKwkuaTJjX2FkZHJlc3MgICAgID0gMHhjNiwKKwkuaWZfZnJlcSAgICAgICAgID0gSUZfRlJFUV80NTcwMDAwSFosCisJLnh0YWxfZnJlcSAgICAgICA9IENSWVNUQUxfRlJFUV8xNjAwMDAwMEhaLAorCS5hZ2NfbW9kZSAgICAgICAgPSBNWExfU0lOR0xFX0FHQywKKwkudHJhY2tpbmdfZmlsdGVyID0gTVhMX1RGX09GRiwKKwkucnNzaV9lbmFibGUgICAgID0gTVhMX1JTU0lfRU5BQkxFLAorCS5jYXBfc2VsZWN0ICAgICAgPSBNWExfQ0FQX1NFTF9FTkFCTEUsCisJLmRpdl9vdXQgICAgICAgICA9IE1YTF9ESVZfT1VUXzQsCisJLmNsb2NrX291dCAgICAgICA9IE1YTF9DTE9DS19PVVRfRElTQUJMRSwKKwkub3V0cHV0X2xvYWQgICAgID0gTVhMNTAwNVNfSUZfT1VUUFVUX0xPQURfMjAwX09ITSwKKwkudG9wCQkgPSBNWEw1MDA1U19UT1BfMjVQMiwKKwkubW9kX21vZGUgICAgICAgID0gTVhMX0RJR0lUQUxfTU9ERSwKKwkuaWZfbW9kZSAgICAgICAgID0gTVhMX1pFUk9fSUYsCisJLkFnY01hc3RlckJ5dGUgICA9IDB4MDAsCit9OworCitzdGF0aWMgaW50IGFmOTAxNV90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlzdHJ1Y3QgYWY5MDE1X3N0YXRlICpzdGF0ZSA9IGFkYXAtPmRldi0+cHJpdjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCWludCByZXQ7CisJZGViX2luZm8oIiVzOiBcbiIsIF9fZnVuY19fKTsKKworCS8qIHNlbGVjdCBJMkMgYWRhcHRlciAqLworCWlmIChhZGFwLT5pZCA9PSAwKQorCQlpMmNfYWRhcCA9ICZhZGFwLT5kZXYtPmkyY19hZGFwOworCWVsc2UKKwkJaTJjX2FkYXAgPSAmc3RhdGUtPmkyY19hZGFwOworCisJc3dpdGNoIChhZjkwMTVfYWY5MDEzX2NvbmZpZ1thZGFwLT5pZF0udHVuZXIpIHsKKwljYXNlIEFGOTAxM19UVU5FUl9NVDIwNjA6CisJY2FzZSBBRjkwMTNfVFVORVJfTVQyMDYwXzI6CisJCXJldCA9IGR2Yl9hdHRhY2gobXQyMDYwX2F0dGFjaCwgYWRhcC0+ZmUsIGkyY19hZGFwLAorCQkJJmFmOTAxNV9tdDIwNjBfY29uZmlnLAorCQkJYWY5MDE1X2NvbmZpZy5tdDIwNjBfaWYxW2FkYXAtPmlkXSkKKwkJCT09IE5VTEwgPyAtRU5PREVWIDogMDsKKwkJYnJlYWs7CisJY2FzZSBBRjkwMTNfVFVORVJfUVQxMDEwOgorCWNhc2UgQUY5MDEzX1RVTkVSX1FUMTAxMEE6CisJCXJldCA9IGR2Yl9hdHRhY2gocXQxMDEwX2F0dGFjaCwgYWRhcC0+ZmUsIGkyY19hZGFwLAorCQkJJmFmOTAxNV9xdDEwMTBfY29uZmlnKSA9PSBOVUxMID8gLUVOT0RFViA6IDA7CisJCWJyZWFrOworCWNhc2UgQUY5MDEzX1RVTkVSX1REQTE4MjcxOgorCQlyZXQgPSBkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgYWRhcC0+ZmUsIDB4YzAsIGkyY19hZGFwLAorCQkJJmFmOTAxNV90ZGExODI3MV9jb25maWcpID09IE5VTEwgPyAtRU5PREVWIDogMDsKKwkJYnJlYWs7CisJY2FzZSBBRjkwMTNfVFVORVJfTVhMNTAwM0Q6CisJCXJldCA9IGR2Yl9hdHRhY2gobXhsNTAwNXNfYXR0YWNoLCBhZGFwLT5mZSwgaTJjX2FkYXAsCisJCQkmYWY5MDE1X214bDUwMDNfY29uZmlnKSA9PSBOVUxMID8gLUVOT0RFViA6IDA7CisJCWJyZWFrOworCWNhc2UgQUY5MDEzX1RVTkVSX01YTDUwMDVEOgorCWNhc2UgQUY5MDEzX1RVTkVSX01YTDUwMDVSOgorCQlyZXQgPSBkdmJfYXR0YWNoKG14bDUwMDVzX2F0dGFjaCwgYWRhcC0+ZmUsIGkyY19hZGFwLAorCQkJJmFmOTAxNV9teGw1MDA1X2NvbmZpZykgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworCQlicmVhazsKKwljYXNlIEFGOTAxM19UVU5FUl9FTlY3N0gxMUQ1OgorCQlyZXQgPSBkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBhZGFwLT5mZSwgMHhjMCwgaTJjX2FkYXAsCisJCQlEVkJfUExMX1REQTY2NVgpID09IE5VTEwgPyAtRU5PREVWIDogMDsKKwkJYnJlYWs7CisJY2FzZSBBRjkwMTNfVFVORVJfTUM0NFM4MDM6CisjaWYgMAorCQlyZXQgPSBkdmJfYXR0YWNoKG1jNDRzODB4X2F0dGFjaCwgYWRhcC0+ZmUsIGkyY19hZGFwKQorCQkJPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworI2Vsc2UKKwkJcmV0ID0gLUVOT0RFVjsKKwkJaW5mbygiRnJlZXNjYWxlIE1DNDRTODAzIHR1bmVyIGZvdW5kIGJ1dCBubyBkcml2ZXIgZm9yIHRoYXQiIFwKKwkJCSJ0dW5lci4gTG9vayBhdCB0aGUgTGludXh0di5vcmcgZm9yIHR1bmVyIGRyaXZlciIgXAorCQkJInN0YXR1cy4iKTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIEFGOTAxM19UVU5FUl9VTktOT1dOOgorCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9ERVY7CisJCWVycigiVW5rbm93biB0dW5lciBpZDolZCIsCisJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1thZGFwLT5pZF0udHVuZXIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYWY5MDE1X3VzYl90YWJsZVtdID0geworLyogIDAgKi97VVNCX0RFVklDRShVU0JfVklEX0FGQVRFQ0gsICAgVVNCX1BJRF9BRkFURUNIX0FGOTAxNV85MDE1KX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9BRkFURUNILCAgIFVTQl9QSURfQUZBVEVDSF9BRjkwMTVfOTAxNil9LAorCXtVU0JfREVWSUNFKFVTQl9WSURfTEVBRFRFSywgICBVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9HT0xEKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9QSU5OQUNMRSwgIFVTQl9QSURfUElOTkFDTEVfUENUVjcxRSl9LAorCXtVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsICBVU0JfUElEX0tXT1JMRF8zOTlVKX0sCisvKiAgNSAqL3tVU0JfREVWSUNFKFVTQl9WSURfVklTSU9OUExVUywKKwkJVVNCX1BJRF9USU5ZVFdJTil9LAorCXtVU0JfREVWSUNFKFVTQl9WSURfVklTSU9OUExVUywKKwkJVVNCX1BJRF9BWlVSRVdBVkVfQURfVFU3MDApfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLCAgVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX1RfVVNCX1hFX1JFVjIpfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAgVVNCX1BJRF9LV09STERfUEMxNjBfMlQpfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX0FWRVJNRURJQSwgVVNCX1BJRF9BVkVSTUVESUFfVk9MQVJfWCl9LAorLyogMTAgKi97VVNCX0RFVklDRShVU0JfVklEX1hURU5TSU9OUywgVVNCX1BJRF9YVEVOU0lPTlNfWERfMzgwKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9NU0lfMiwgICAgIFVTQl9QSURfTVNJX0RJR0lWT1hfRFVPKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9BVkVSTUVESUEsIFVTQl9QSURfQVZFUk1FRElBX1ZPTEFSX1hfMil9LAorCXtVU0JfREVWSUNFKFVTQl9WSURfVEVMRVNUQVIsICBVU0JfUElEX1RFTEVTVEFSX1NUQVJTVElDS18yKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9BVkVSTUVESUEsIFVTQl9QSURfQVZFUk1FRElBX0EzMDkpfSwKKy8qIDE1ICove1VTQl9ERVZJQ0UoVVNCX1ZJRF9NU0lfMiwgICAgIFVTQl9QSURfTVNJX0RJR0lfVk9YX01JTklfSUlJKX0sCisJezB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhZjkwMTVfdXNiX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGFmOTAxNV9wcm9wZXJ0aWVzW10gPSB7CisJeworCQkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCisKKwkJLnVzYl9jdHJsID0gREVWSUNFX1NQRUNJRklDLAorCQkuZG93bmxvYWRfZmlybXdhcmUgPSBhZjkwMTVfZG93bmxvYWRfZmlybXdhcmUsCisJCS5maXJtd2FyZSA9ICJkdmItdXNiLWFmOTAxNS5mdyIsCisKKwkJLnNpemVfb2ZfcHJpdiA9IHNpemVvZihzdHJ1Y3QgYWY5MDE1X3N0YXRlKSwgXAorCisJCS5udW1fYWRhcHRlcnMgPSAyLAorCQkuYWRhcHRlciA9IHsKKwkJCXsKKwkJCQkuY2FwcyA9IERWQl9VU0JfQURBUF9IQVNfUElEX0ZJTFRFUiB8CisJCQkJRFZCX1VTQl9BREFQX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYsCisKKwkJCQkucGlkX2ZpbHRlcl9jb3VudCA9IDMyLAorCQkJCS5waWRfZmlsdGVyICAgICAgID0gYWY5MDE1X3BpZF9maWx0ZXIsCisJCQkJLnBpZF9maWx0ZXJfY3RybCAgPSBhZjkwMTVfcGlkX2ZpbHRlcl9jdHJsLAorCisJCQkJLmZyb250ZW5kX2F0dGFjaCA9CisJCQkJCWFmOTAxNV9hZjkwMTNfZnJvbnRlbmRfYXR0YWNoLAorCQkJCS50dW5lcl9hdHRhY2ggICAgPSBhZjkwMTVfdHVuZXJfYXR0YWNoLAorCQkJCS5zdHJlYW0gPSB7CisJCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJCS5jb3VudCA9IDYsCisJCQkJCS5lbmRwb2ludCA9IDB4ODQsCisJCQkJfSwKKwkJCX0sCisJCQl7CisJCQkJLmZyb250ZW5kX2F0dGFjaCA9CisJCQkJCWFmOTAxNV9hZjkwMTNfZnJvbnRlbmRfYXR0YWNoLAorCQkJCS50dW5lcl9hdHRhY2ggICAgPSBhZjkwMTVfdHVuZXJfYXR0YWNoLAorCQkJCS5zdHJlYW0gPSB7CisJCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJCS5jb3VudCA9IDYsCisJCQkJCS5lbmRwb2ludCA9IDB4ODUsCisJCQkJfSwKKwkJCX0KKwkJfSwKKworCQkuaWRlbnRpZnlfc3RhdGUgPSBhZjkwMTVfaWRlbnRpZnlfc3RhdGUsCisKKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBhZjkwMTVfcmNfcXVlcnksCisJCS5yY19pbnRlcnZhbCAgICAgID0gMTUwLAorCisJCS5pMmNfYWxnbyA9ICZhZjkwMTVfaTJjX2FsZ28sCisKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSA5LAorCQkuZGV2aWNlcyA9IHsKKwkJCXsKKwkJCQkubmFtZSA9ICJBZmF0ZWNoIEFGOTAxNSBEVkItVCBVU0IyLjAgc3RpY2siLAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVswXSwKKwkJCQkJICAgICAmYWY5MDE1X3VzYl90YWJsZVsxXSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJMZWFkdGVrIFdpbkZhc3QgRFRWIERvbmdsZSBHb2xkIiwKKwkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbMl0sIE5VTEx9LAorCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUgPSAiUGlubmFjbGUgUENUViA3MWUiLAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVszXSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJLV29ybGQgUGx1c1RWIER1YWwgRFZCLVQgU3RpY2sgIiBcCisJCQkJCSIoRFZCLVQgMzk5VSkiLAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVs0XSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJEaWdpdGFsTm93IFRpbnlUd2luIERWQi1UIFJlY2VpdmVyIiwKKwkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbNV0sIE5VTEx9LAorCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUgPSAiVHdpbkhhbiBBenVyZVdhdmUgQUQtVFU3MDAoNzA0SikiLAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVs2XSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJUZXJyYVRlYyBDaW5lcmd5IFQgVVNCIFhFIiwKKwkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbN10sIE5VTEx9LAorCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUgPSAiS1dvcmxkIFBsdXNUViBEdWFsIERWQi1UIFBDSSAiIFwKKwkJCQkJIihEVkItVCBQQzE2MC0yVCkiLAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVs4XSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJBVmVyTWVkaWEgQVZlclRWIERWQi1UIFZvbGFyIFgiLAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVs5XSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJfQorCX0sIHsKKwkJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCisJCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKKwkJLmRvd25sb2FkX2Zpcm13YXJlID0gYWY5MDE1X2Rvd25sb2FkX2Zpcm13YXJlLAorCQkuZmlybXdhcmUgPSAiZHZiLXVzYi1hZjkwMTUuZnciLAorCisJCS5zaXplX29mX3ByaXYgPSBzaXplb2Yoc3RydWN0IGFmOTAxNV9zdGF0ZSksIFwKKworCQkubnVtX2FkYXB0ZXJzID0gMiwKKwkJLmFkYXB0ZXIgPSB7CisJCQl7CisJCQkJLmNhcHMgPSBEVkJfVVNCX0FEQVBfSEFTX1BJRF9GSUxURVIgfAorCQkJCURWQl9VU0JfQURBUF9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGLAorCisJCQkJLnBpZF9maWx0ZXJfY291bnQgPSAzMiwKKwkJCQkucGlkX2ZpbHRlciAgICAgICA9IGFmOTAxNV9waWRfZmlsdGVyLAorCQkJCS5waWRfZmlsdGVyX2N0cmwgID0gYWY5MDE1X3BpZF9maWx0ZXJfY3RybCwKKworCQkJCS5mcm9udGVuZF9hdHRhY2ggPQorCQkJCQlhZjkwMTVfYWY5MDEzX2Zyb250ZW5kX2F0dGFjaCwKKwkJCQkudHVuZXJfYXR0YWNoICAgID0gYWY5MDE1X3R1bmVyX2F0dGFjaCwKKwkJCQkuc3RyZWFtID0geworCQkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkJCQkuY291bnQgPSA2LAorCQkJCQkuZW5kcG9pbnQgPSAweDg0LAorCQkJCX0sCisJCQl9LAorCQkJeworCQkJCS5mcm9udGVuZF9hdHRhY2ggPQorCQkJCQlhZjkwMTVfYWY5MDEzX2Zyb250ZW5kX2F0dGFjaCwKKwkJCQkudHVuZXJfYXR0YWNoICAgID0gYWY5MDE1X3R1bmVyX2F0dGFjaCwKKwkJCQkuc3RyZWFtID0geworCQkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkJCQkuY291bnQgPSA2LAorCQkJCQkuZW5kcG9pbnQgPSAweDg1LAorCQkJCX0sCisJCQl9CisJCX0sCisKKwkJLmlkZW50aWZ5X3N0YXRlID0gYWY5MDE1X2lkZW50aWZ5X3N0YXRlLAorCisJCS5yY19xdWVyeSAgICAgICAgID0gYWY5MDE1X3JjX3F1ZXJ5LAorCQkucmNfaW50ZXJ2YWwgICAgICA9IDE1MCwKKworCQkuaTJjX2FsZ28gPSAmYWY5MDE1X2kyY19hbGdvLAorCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gNiwKKwkJLmRldmljZXMgPSB7CisJCQl7CisJCQkJLm5hbWUgPSAiWHRlbnNpb25zIFhELTM4MCIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzEwXSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJNU0kgRElHSVZPWCBEdW8iLAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVsxMV0sIE5VTEx9LAorCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKKwkJCX0sCisJCQl7CisJCQkJLm5hbWUgPSAiRnVqaXRzdS1TaWVtZW5zIFNsaW0gTW9iaWxlIFVTQiBEVkItVCIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzEyXSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJUZWxlc3RhciBTdGFyc3RpY2sgMiIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzEzXSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJBVmVyTWVkaWEgQTMwOSIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzE0XSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJNU0kgRGlnaSBWT1ggbWluaSBJSUkiLAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVsxNV0sIE5VTEx9LAorCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKKwkJCX0sCisJCX0KKwl9Cit9OworCitzdGF0aWMgaW50IGFmOTAxNV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IE5VTEw7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXU4IGk7CisKKwlkZWJfaW5mbygiJXM6IGludGVyZmFjZTolZFxuIiwgX19mdW5jX18sCisJCWludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCisJLyogaW50ZXJmYWNlIDAgaXMgdXNlZCBieSBEVkItVCByZWNlaXZlciBhbmQKKwkgICBpbnRlcmZhY2UgMSBpcyBmb3IgcmVtb3RlIGNvbnRyb2xsZXIgKEhJRCkgKi8KKwlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciA9PSAwKSB7CisJCXJldCA9IGFmOTAxNV9yZWFkX2NvbmZpZyh1ZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJZm9yIChpID0gMDsgaSA8IGFmOTAxNV9wcm9wZXJ0aWVzX2NvdW50OyBpKyspIHsKKwkJCXJldCA9IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmFmOTAxNV9wcm9wZXJ0aWVzW2ldLAorCQkJCVRISVNfTU9EVUxFLCAmZCwgYWRhcHRlcl9ucik7CisJCQlpZiAoIXJldCkKKwkJCQlicmVhazsKKwkJCWlmIChyZXQgIT0gLUVOT0RFVikKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWlmIChkKQorCQkJcmV0ID0gYWY5MDE1X2luaXQoZCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBhZjkwMTVfaTJjX2V4aXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoreworCXN0cnVjdCBhZjkwMTVfc3RhdGUgKnN0YXRlID0gZC0+cHJpdjsKKwlkZWJfaW5mbygiJXM6IFxuIiwgX19mdW5jX18pOworCisJLyogcmVtb3ZlIDJuZCBJMkMgYWRhcHRlciAqLworCWlmIChkLT5zdGF0ZSAmIERWQl9VU0JfU1RBVEVfSTJDKQorCQlpMmNfZGVsX2FkYXB0ZXIoJnN0YXRlLT5pMmNfYWRhcCk7Cit9CisKK3N0YXRpYyB2b2lkIGFmOTAxNV91c2JfZGV2aWNlX2V4aXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlkZWJfaW5mbygiJXM6IFxuIiwgX19mdW5jX18pOworCisJLyogcmVtb3ZlIDJuZCBJMkMgYWRhcHRlciAqLworCWlmIChkICE9IE5VTEwgJiYgZC0+ZGVzYyAhPSBOVUxMKQorCQlhZjkwMTVfaTJjX2V4aXQoZCk7CisKKwlkdmJfdXNiX2RldmljZV9leGl0KGludGYpOworfQorCisvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWY5MDE1X3VzYl9kcml2ZXIgPSB7CisJLm5hbWUgPSAiZHZiX3VzYl9hZjkwMTUiLAorCS5wcm9iZSA9IGFmOTAxNV91c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBhZjkwMTVfdXNiX2RldmljZV9leGl0LAorCS5pZF90YWJsZSA9IGFmOTAxNV91c2JfdGFibGUsCit9OworCisvKiBtb2R1bGUgc3R1ZmYgKi8KK3N0YXRpYyBpbnQgX19pbml0IGFmOTAxNV91c2JfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3RlcigmYWY5MDE1X3VzYl9kcml2ZXIpOworCWlmIChyZXQpCisJCWVycigibW9kdWxlIGluaXQgZmFpbGVkOiVkIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZjkwMTVfdXNiX21vZHVsZV9leGl0KHZvaWQpCit7CisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciBmcm9tIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIoJmFmOTAxNV91c2JfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWY5MDE1X3VzYl9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChhZjkwMTVfdXNiX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQWZhdGVjaCBBRjkwMTUgRFZCLVQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MmU4YTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCkBAIC0wLDAgKzEsNTI0IEBACisvKgorICogRFZCIFVTQiBMaW51eCBkcml2ZXIgZm9yIEFmYXRlY2ggQUY5MDE1IERWQi1UIFVTQjIuMCByZWNlaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KKyAqCisgKiBUaGFua3MgdG8gQWZhdGVjaCB3aG8ga2luZGx5IHByb3ZpZGVkIGluZm9ybWF0aW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9EVkJfVVNCX0FGOTAxNV9IXworI2RlZmluZSBfRFZCX1VTQl9BRjkwMTVfSF8KKworI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImFmOTAxNSIKKyNpbmNsdWRlICJkdmItdXNiLmgiCisKK2V4dGVybiBpbnQgZHZiX3VzYl9hZjkwMTVfZGVidWc7CisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9hZjkwMTVfZGVidWcsIDB4MDEsIGFyZ3MpCisjZGVmaW5lIGRlYl9yYyhhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9hZjkwMTVfZGVidWcsIDB4MDIsIGFyZ3MpCisjZGVmaW5lIGRlYl94ZmVyKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9hZjkwMTVfZGVidWcsIDB4MDQsIGFyZ3MpCisjZGVmaW5lIGRlYl9yZWcoYXJncy4uLikgIGRwcmludGsoZHZiX3VzYl9hZjkwMTVfZGVidWcsIDB4MDgsIGFyZ3MpCisjZGVmaW5lIGRlYl9pMmMoYXJncy4uLikgIGRwcmludGsoZHZiX3VzYl9hZjkwMTVfZGVidWcsIDB4MTAsIGFyZ3MpCisjZGVmaW5lIGRlYl9mdyhhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9hZjkwMTVfZGVidWcsIDB4MjAsIGFyZ3MpCisKKyNkZWZpbmUgQUY5MDE1X0kyQ19FRVBST00gIDB4YTAKKyNkZWZpbmUgQUY5MDE1X0kyQ19ERU1PRCAgIDB4MzgKKyNkZWZpbmUgQUY5MDE1X1VTQl9USU1FT1VUIDIwMDAKKworLyogRUVQUk9NIGxvY2F0aW9ucyAqLworI2RlZmluZSBBRjkwMTVfRUVQUk9NX0lSX01PREUgICAgICAgIDB4MTgKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9JUl9SRU1PVEVfVFlQRSAweDM0CisjZGVmaW5lIEFGOTAxNV9FRVBST01fVFNfTU9ERSAgICAgICAgMHgzMQorI2RlZmluZSBBRjkwMTVfRUVQUk9NX0RFTU9EMl9JMkMgICAgIDB4MzIKKworI2RlZmluZSBBRjkwMTVfRUVQUk9NX1NBV19CVzEgICAgICAgIDB4MzUKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9YVEFMX1RZUEUxICAgICAweDM2CisjZGVmaW5lIEFGOTAxNV9FRVBST01fU1BFQ19JTlYxICAgICAgMHgzNworI2RlZmluZSBBRjkwMTVfRUVQUk9NX0lGMUwgICAgICAgICAgIDB4MzgKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9JRjFIICAgICAgICAgICAweDM5CisjZGVmaW5lIEFGOTAxNV9FRVBST01fTVQyMDYwX0lGMUwgICAgMHgzYQorI2RlZmluZSBBRjkwMTVfRUVQUk9NX01UMjA2MF9JRjFIICAgIDB4M2IKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9UVU5FUl9JRDEgICAgICAweDNjCisKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9TQVdfQlcyICAgICAgICAweDQ1CisjZGVmaW5lIEFGOTAxNV9FRVBST01fWFRBTF9UWVBFMiAgICAgMHg0NgorI2RlZmluZSBBRjkwMTVfRUVQUk9NX1NQRUNfSU5WMiAgICAgIDB4NDcKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9JRjJMICAgICAgICAgICAweDQ4CisjZGVmaW5lIEFGOTAxNV9FRVBST01fSUYySCAgICAgICAgICAgMHg0OQorI2RlZmluZSBBRjkwMTVfRUVQUk9NX01UMjA2MF9JRjJMICAgIDB4NGEKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9NVDIwNjBfSUYySCAgICAweDRiCisjZGVmaW5lIEFGOTAxNV9FRVBST01fVFVORVJfSUQyICAgICAgMHg0YworCisjZGVmaW5lIEFGOTAxNV9FRVBST01fT0ZGU0VUIChBRjkwMTVfRUVQUk9NX1NBV19CVzIgLSBBRjkwMTVfRUVQUk9NX1NBV19CVzEpCisKKyNkZWZpbmUgQUY5MDE1X0dQSU9fT04gKDEgPDwgMCkKKyNkZWZpbmUgQUY5MDE1X0dQSU9fRU4gKDEgPDwgMSkKKyNkZWZpbmUgQUY5MDE1X0dQSU9fTyAgKDEgPDwgMikKKyNkZWZpbmUgQUY5MDE1X0dQSU9fSSAgKDEgPDwgMykKKworI2RlZmluZSBBRjkwMTVfR1BJT19UVU5FUl9PTiAgKEFGOTAxNV9HUElPX09OfEFGOTAxNV9HUElPX0VOKQorI2RlZmluZSBBRjkwMTVfR1BJT19UVU5FUl9PRkYgKEFGOTAxNV9HUElPX09OfEFGOTAxNV9HUElPX0VOfEFGOTAxNV9HUElPX08pCisKK3N0cnVjdCByZXFfdCB7CisJdTggIGNtZDsgICAgICAgLyogWzBdICovCisJLyogIHNlcSAqLyAgICAgLyogWzFdICovCisJdTggIGkyY19hZGRyOyAgLyogWzJdICovCisJdTE2IGFkZHI7ICAgICAgLyogWzN8NF0gKi8KKwl1OCAgbWJveDsgICAgICAvKiBbNV0gKi8KKwl1OCAgYWRkcl9sZW47ICAvKiBbNl0gKi8KKwl1OCAgZGF0YV9sZW47ICAvKiBbN10gKi8KKwl1OCAgKmRhdGE7Cit9OworCitlbnVtIGFmOTAxNV9jbWQgeworCUdFVF9DT05GSUcgICAgICAgICAgID0gMHgxMCwKKwlET1dOTE9BRF9GSVJNV0FSRSAgICA9IDB4MTEsCisJQk9PVCAgICAgICAgICAgICAgICAgPSAweDEzLAorCVJFQURfTUVNT1JZICAgICAgICAgID0gMHgyMCwKKwlXUklURV9NRU1PUlkgICAgICAgICA9IDB4MjEsCisJUkVBRF9XUklURV9JMkMgICAgICAgPSAweDIyLAorCUNPUFlfRklSTVdBUkUgICAgICAgID0gMHgyMywKKwlSRUNPTk5FQ1RfVVNCICAgICAgICA9IDB4NWEsCisJV1JJVEVfVklSVFVBTF9NRU1PUlkgPSAweDI2LAorCUdFVF9JUl9DT0RFICAgICAgICAgID0gMHgyNywKKwlSRUFEX0kyQywKKwlXUklURV9JMkMsCit9OworCitlbnVtIGFmOTAxNV9pcl9tb2RlIHsKKwlBRjkwMTVfSVJfTU9ERV9ESVNBQkxFRCA9IDAsCisJQUY5MDE1X0lSX01PREVfSElELAorCUFGOTAxNV9JUl9NT0RFX1JMQywKKwlBRjkwMTVfSVJfTU9ERV9SQzYsCit9OworCitzdHJ1Y3QgYWY5MDE1X3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7IC8qIEkyQyBhZGFwdGVyIGZvciAybmQgRkUgKi8KK307CisKK3N0cnVjdCBhZjkwMTVfY29uZmlnIHsKKwl1OCAgZHVhbF9tb2RlOjE7CisJdTE2IG10MjA2MF9pZjFbMl07CisJdTE2IGZpcm13YXJlX3NpemU7CisJdTE2IGZpcm13YXJlX2NoZWNrc3VtOworCXU4ICAqaXJfdGFibGU7CisJdTE2IGlyX3RhYmxlX3NpemU7Cit9OworCitlbnVtIGFmOTAxNV9yZW1vdGUgeworCUFGOTAxNV9SRU1PVEVfTk9ORSAgICAgICAgICAgICAgICAgICAgPSAwLAorCUFGOTAxNV9SRU1PVEVfQV9MSU5LX0RUVV9NLAorCUFGOTAxNV9SRU1PVEVfTVNJX0RJR0lWT1hfTUlOSV9JSV9WMywKKwlBRjkwMTVfUkVNT1RFX01ZR0lDVFZfVTcxOCwKK307CisKKy8qIExlYWR0ZWsgV2luRmFzdCBEVFYgRG9uZ2xlIEdvbGQgKi8KK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgYWY5MDE1X3JjX2tleXNfbGVhZHRla1tdID0geworCXsgMHgwMCwgMHgxZSwgS0VZXzEgfSwKKwl7IDB4MDAsIDB4MWYsIEtFWV8yIH0sCisJeyAweDAwLCAweDIwLCBLRVlfMyB9LAorCXsgMHgwMCwgMHgyMSwgS0VZXzQgfSwKKwl7IDB4MDAsIDB4MjIsIEtFWV81IH0sCisJeyAweDAwLCAweDIzLCBLRVlfNiB9LAorCXsgMHgwMCwgMHgyNCwgS0VZXzcgfSwKKwl7IDB4MDAsIDB4MjUsIEtFWV84IH0sCisJeyAweDAwLCAweDI2LCBLRVlfOSB9LAorCXsgMHgwMCwgMHgyNywgS0VZXzAgfSwKKwl7IDB4MDAsIDB4MjgsIEtFWV9FTlRFUiB9LAorCXsgMHgwMCwgMHg0ZiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDAwLCAweDUwLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMCwgMHg1MSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDAwLCAweDUyLCBLRVlfQ0hBTk5FTFVQIH0sCit9OworCitzdGF0aWMgdTggYWY5MDE1X2lyX3RhYmxlX2xlYWR0ZWtbXSA9IHsKKwkweDAzLCAweGZjLCAweDAwLCAweGZmLCAweDFhLCAweDAxLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NTYsIDB4YTksIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg0YiwgMHhiNCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDRjLCAweGIzLCAweGIyLCAweDA0LCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NGQsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg0ZSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDFmLCAweGUwLCAweDNkLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NDAsIDB4YmYsIDB4MTMsIDB4MDEsIDB4MDAsCisJMHgwMywgMHhmYywgMHgxNCwgMHhlYiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDQ5LCAweGI2LCAweDA1LCAweDAxLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NTAsIDB4YWYsIDB4MjksIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHgwYywgMHhmMywgMHg1MiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDAzLCAweGZjLCAweDA5LCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MDgsIDB4ZjcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHgxMywgMHhlYywgMHgyOCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDA0LCAweGZiLCAweDRmLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NGYsIDB4YjAsIDB4MGYsIDB4MDEsIDB4MDAsCisJMHgwMywgMHhmYywgMHgxMCwgMHhlZiwgMHg1MSwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDUxLCAweGFlLCAweDNmLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NDIsIDB4YmQsIDB4MTMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg0MywgMHhiYywgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDQ0LCAweGJiLCAweDExLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NTIsIDB4YWQsIDB4MTksIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg1NCwgMHhhYiwgMHgwNSwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDQ2LCAweGI5LCAweDI5LCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NTUsIDB4YWEsIDB4MmIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg1MywgMHhhYywgMHg0MSwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDA1LCAweGZhLCAweDFlLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MDYsIDB4ZjksIDB4MWYsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHgwNywgMHhmOCwgMHgyMCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDFlLCAweGUxLCAweDE5LCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MDksIDB4ZjYsIDB4MjEsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHgwYSwgMHhmNSwgMHgyMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDBiLCAweGY0LCAweDIzLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MWIsIDB4ZTQsIDB4MTYsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHgwZCwgMHhmMiwgMHgyNCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDBlLCAweGYxLCAweDI1LCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MGYsIDB4ZjAsIDB4MjYsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHgxNiwgMHhlOSwgMHgyOCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDQxLCAweGJlLCAweDM3LCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MTIsIDB4ZWQsIDB4MjcsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHgxMSwgMHhlZSwgMHgyYSwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDQ4LCAweGI3LCAweDJjLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NGEsIDB4YjUsIDB4M2MsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg0NywgMHhiOCwgMHgxNSwgMHgwMSwgMHgwMCwKKwkweDAzLCAweGZjLCAweDQ1LCAweGJhLCAweDBiLCAweDAxLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NWUsIDB4YTEsIDB4NDMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg1YSwgMHhhNSwgMHg0MiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDViLCAweGE0LCAweDRiLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NWYsIDB4YTAsIDB4NGUsIDB4MDAsIDB4MDAsCit9OworCisvKiBUd2luSGFuIEF6dXJlV2F2ZSBBRC1UVTcwMCg3MDRKKSAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBhZjkwMTVfcmNfa2V5c190d2luaGFuW10gPSB7CisJeyAweDA1LCAweDNmLCBLRVlfUE9XRVIgfSwKKwl7IDB4MDAsIDB4MTksIEtFWV9GQVZPUklURVMgfSwgICAgLyogRmF2b3JpdGUgTGlzdCAqLworCXsgMHgwMCwgMHgwNCwgS0VZX1RFWFQgfSwgICAgICAgICAvKiBUZWxldGV4dCAqLworCXsgMHgwMCwgMHgwZSwgS0VZX1BPV0VSIH0sCisJeyAweDAwLCAweDBlLCBLRVlfSU5GTyB9LCAgICAgICAgIC8qIFByZXZpZXcgKi8KKwl7IDB4MDAsIDB4MDgsIEtFWV9FUEcgfSwgICAgICAgICAgLyogSW5mby9FUEcgKi8KKwl7IDB4MDAsIDB4MGYsIEtFWV9MSVNUIH0sICAgICAgICAgLyogUmVjb3JkIExpc3QgKi8KKwl7IDB4MDAsIDB4MWUsIEtFWV8xIH0sCisJeyAweDAwLCAweDFmLCBLRVlfMiB9LAorCXsgMHgwMCwgMHgyMCwgS0VZXzMgfSwKKwl7IDB4MDAsIDB4MjEsIEtFWV80IH0sCisJeyAweDAwLCAweDIyLCBLRVlfNSB9LAorCXsgMHgwMCwgMHgyMywgS0VZXzYgfSwKKwl7IDB4MDAsIDB4MjQsIEtFWV83IH0sCisJeyAweDAwLCAweDI1LCBLRVlfOCB9LAorCXsgMHgwMCwgMHgyNiwgS0VZXzkgfSwKKwl7IDB4MDAsIDB4MjcsIEtFWV8wIH0sCisJeyAweDAwLCAweDI5LCBLRVlfQ0FOQ0VMIH0sICAgICAgIC8qIENhbmNlbCAqLworCXsgMHgwMCwgMHg0YywgS0VZX0NMRUFSIH0sICAgICAgICAvKiBDbGVhciAqLworCXsgMHgwMCwgMHgyYSwgS0VZX0JBQ0sgfSwgICAgICAgICAvKiBCYWNrICovCisJeyAweDAwLCAweDJiLCBLRVlfVEFCIH0sICAgICAgICAgIC8qIFRhYiAqLworCXsgMHgwMCwgMHg1MiwgS0VZX1VQIH0sICAgICAgICAgICAvKiB1cCBhcnJvdyAqLworCXsgMHgwMCwgMHg1MSwgS0VZX0RPV04gfSwgICAgICAgICAvKiBkb3duIGFycm93ICovCisJeyAweDAwLCAweDRmLCBLRVlfUklHSFQgfSwgICAgICAgIC8qIHJpZ2h0IGFycm93ICovCisJeyAweDAwLCAweDUwLCBLRVlfTEVGVCB9LCAgICAgICAgIC8qIGxlZnQgYXJyb3cgKi8KKwl7IDB4MDAsIDB4MjgsIEtFWV9FTlRFUiB9LCAgICAgICAgLyogRW50ZXIgLyBvayAqLworCXsgMHgwMiwgMHg1MiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDAyLCAweDUxLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMCwgMHg0ZSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDAwLCAweDRiLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAwLCAweDRhLCBLRVlfUkVDT1JEIH0sCisJeyAweDAxLCAweDExLCBLRVlfUExBWSB9LAorCXsgMHgwMCwgMHgxNywgS0VZX1BBVVNFIH0sCisJeyAweDAwLCAweDBjLCBLRVlfUkVXSU5EIH0sICAgICAgIC8qIEZSIDw8ICovCisJeyAweDAwLCAweDExLCBLRVlfRkFTVEZPUldBUkQgfSwgIC8qIEZGID4+ICovCisJeyAweDAxLCAweDE1LCBLRVlfUFJFVklPVVMgfSwgICAgIC8qIFJlcGxheSAqLworCXsgMHgwMSwgMHgwZSwgS0VZX05FWFQgfSwgICAgICAgICAvKiBTa2lwICovCisJeyAweDAwLCAweDEzLCBLRVlfQ0FNRVJBIH0sICAgICAgIC8qIENhcHR1cmUgKi8KKwl7IDB4MDEsIDB4MGYsIEtFWV9MQU5HVUFHRSB9LCAgICAgLyogU0FQICovCisJeyAweDAxLCAweDEzLCBLRVlfVFYyIH0sICAgICAgICAgIC8qIFBJUCAqLworCXsgMHgwMCwgMHgxZCwgS0VZX1pPT00gfSwgICAgICAgICAvKiBGdWxsIFNjcmVlbiAqLworCXsgMHgwMSwgMHgxNywgS0VZX1NVQlRJVExFIH0sICAgICAvKiBTdWJ0aXRsZSAvIENDICovCisJeyAweDAwLCAweDEwLCBLRVlfTVVURSB9LAorCXsgMHgwMSwgMHgxOSwgS0VZX0FVRElPIH0sICAgICAgICAvKiBML1IgKi8gLyogVE9ETyBiZXR0ZXIgZXZlbnQgKi8KKwl7IDB4MDEsIDB4MTYsIEtFWV9TTEVFUCB9LCAgICAgICAgLyogSGliZXJuYXRlICovCisJeyAweDAxLCAweDE2LCBLRVlfU1dJVENIVklERU9NT0RFIH0sCisJCQkJCSAgLyogQS9WICovIC8qIFRPRE8gZG9lcyBub3Qgd29yayAqLworCXsgMHgwMCwgMHgwNiwgS0VZX0FHQUlOIH0sICAgICAgICAvKiBSZWNhbGwgKi8KKwl7IDB4MDEsIDB4MTYsIEtFWV9LUFBMVVMgfSwgICAgICAgLyogWm9vbSsgKi8gLyogVE9ETyBkb2VzIG5vdCB3b3JrICovCisJeyAweDAxLCAweDE2LCBLRVlfS1BNSU5VUyB9LCAgICAgIC8qIFpvb20tICovIC8qIFRPRE8gZG9lcyBub3Qgd29yayAqLworCXsgMHgwMiwgMHgxNSwgS0VZX1JFRCB9LAorCXsgMHgwMiwgMHgwYSwgS0VZX0dSRUVOIH0sCisJeyAweDAyLCAweDFjLCBLRVlfWUVMTE9XIH0sCisJeyAweDAyLCAweDA1LCBLRVlfQkxVRSB9LAorfTsKKworc3RhdGljIHU4IGFmOTAxNV9pcl90YWJsZV90d2luaGFuW10gPSB7CisJMHgwMCwgMHhmZiwgMHgxNiwgMHhlOSwgMHgzZiwgMHgwNSwgMHgwMCwKKwkweDAwLCAweGZmLCAweDA3LCAweGY4LCAweDE2LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MTQsIDB4ZWIsIDB4MTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxYSwgMHhlNSwgMHg0ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDRjLCAweGIzLCAweDE3LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MTIsIDB4ZWQsIDB4MTEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg0MCwgMHhiZiwgMHgwYywgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDExLCAweGVlLCAweDRhLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4NTQsIDB4YWIsIDB4MTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg0MSwgMHhiZSwgMHgxNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGZmLCAweDQyLCAweGJkLCAweDBlLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4NDMsIDB4YmMsIDB4MTcsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg1MCwgMHhhZiwgMHgwZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGZmLCAweDRkLCAweGIyLCAweDFkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4NDcsIDB4YjgsIDB4MTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwNSwgMHhmYSwgMHg0YiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDAyLCAweGZkLCAweDRlLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MGUsIDB4ZjEsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxZSwgMHhlMSwgMHg1MiwgMHgwMiwgMHgwMCwKKwkweDAwLCAweGZmLCAweDBhLCAweGY1LCAweDUxLCAweDAyLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MTAsIDB4ZWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg0OSwgMHhiNiwgMHgxOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGZmLCAweDE1LCAweGVhLCAweDI3LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MDMsIDB4ZmMsIDB4MWUsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwMSwgMHhmZSwgMHgxZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDA2LCAweGY5LCAweDIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MDksIDB4ZjYsIDB4MjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxZCwgMHhlMiwgMHgyMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDFmLCAweGUwLCAweDIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MGQsIDB4ZjIsIDB4MjQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxOSwgMHhlNiwgMHgyNSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDFiLCAweGU0LCAweDI2LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MmIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg0YSwgMHhiNSwgMHg0YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDRiLCAweGI0LCAweDUyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4NTEsIDB4YWUsIDB4NTEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg1MiwgMHhhZCwgMHg0ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDRlLCAweGIxLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MGMsIDB4ZjMsIDB4MjksIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg0ZiwgMHhiMCwgMHgyOCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDEzLCAweGVjLCAweDJhLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MTcsIDB4ZTgsIDB4MTksIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwNCwgMHhmYiwgMHgwZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDQ4LCAweGI3LCAweDBlLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MGYsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxYywgMHhlMywgMHgwOCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDE4LCAweGU3LCAweDE1LCAweDAyLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4NTMsIDB4YWMsIDB4MGEsIDB4MDIsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg1ZSwgMHhhMSwgMHgxYywgMHgwMiwgMHgwMCwKKwkweDAwLCAweGZmLCAweDVmLCAweGEwLCAweDA1LCAweDAyLCAweDAwLAorfTsKKworLyogQS1MaW5rIERUVShtKSAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBhZjkwMTVfcmNfa2V5c19hX2xpbmtbXSA9IHsKKwl7IDB4MDAsIDB4MWUsIEtFWV8xIH0sCisJeyAweDAwLCAweDFmLCBLRVlfMiB9LAorCXsgMHgwMCwgMHgyMCwgS0VZXzMgfSwKKwl7IDB4MDAsIDB4MjEsIEtFWV80IH0sCisJeyAweDAwLCAweDIyLCBLRVlfNSB9LAorCXsgMHgwMCwgMHgyMywgS0VZXzYgfSwKKwl7IDB4MDAsIDB4MjQsIEtFWV83IH0sCisJeyAweDAwLCAweDI1LCBLRVlfOCB9LAorCXsgMHgwMCwgMHgyNiwgS0VZXzkgfSwKKwl7IDB4MDAsIDB4MjcsIEtFWV8wIH0sCisJeyAweDAwLCAweDJlLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAwLCAweDJkLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDQsIDB4MjgsIEtFWV9aT09NIH0sCisJeyAweDAwLCAweDQxLCBLRVlfTVVURSB9LAorCXsgMHgwMCwgMHg0MiwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDAsIDB4NDMsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwMCwgMHg0NCwgS0VZX0dPVE8gfSwgICAgICAgICAvKiBqdW1wICovCisJeyAweDA1LCAweDQ1LCBLRVlfUE9XRVIgfSwKK307CisKK3N0YXRpYyB1OCBhZjkwMTVfaXJfdGFibGVfYV9saW5rW10gPSB7CisJMHgwOCwgMHhmNywgMHgxMiwgMHhlZCwgMHg0NSwgMHgwNSwgMHgwMCwgLyogcG93ZXIgKi8KKwkweDA4LCAweGY3LCAweDFhLCAweGU1LCAweDQxLCAweDAwLCAweDAwLCAvKiBtdXRlICovCisJMHgwOCwgMHhmNywgMHgwMSwgMHhmZSwgMHgxZSwgMHgwMCwgMHgwMCwgLyogMSAqLworCTB4MDgsIDB4ZjcsIDB4MWMsIDB4ZTMsIDB4MjEsIDB4MDAsIDB4MDAsIC8qIDQgKi8KKwkweDA4LCAweGY3LCAweDAzLCAweGZjLCAweDI0LCAweDAwLCAweDAwLCAvKiA3ICovCisJMHgwOCwgMHhmNywgMHgwNSwgMHhmYSwgMHgyOCwgMHgwNCwgMHgwMCwgLyogem9vbSAqLworCTB4MDgsIDB4ZjcsIDB4MDAsIDB4ZmYsIDB4NDMsIDB4MDAsIDB4MDAsIC8qIHZvbHVtZSB1cCAqLworCTB4MDgsIDB4ZjcsIDB4MTYsIDB4ZTksIDB4NDIsIDB4MDAsIDB4MDAsIC8qIHZvbHVtZSBkb3duICovCisJMHgwOCwgMHhmNywgMHgwZiwgMHhmMCwgMHgxZiwgMHgwMCwgMHgwMCwgLyogMiAqLworCTB4MDgsIDB4ZjcsIDB4MGQsIDB4ZjIsIDB4MjIsIDB4MDAsIDB4MDAsIC8qIDUgKi8KKwkweDA4LCAweGY3LCAweDFiLCAweGU0LCAweDI1LCAweDAwLCAweDAwLCAvKiA4ICovCisJMHgwOCwgMHhmNywgMHgwNiwgMHhmOSwgMHgyNywgMHgwMCwgMHgwMCwgLyogMCAqLworCTB4MDgsIDB4ZjcsIDB4MTQsIDB4ZWIsIDB4MmUsIDB4MDAsIDB4MDAsIC8qIGNoYW5uZWwgdXAgKi8KKwkweDA4LCAweGY3LCAweDFkLCAweGUyLCAweDJkLCAweDAwLCAweDAwLCAvKiBjaGFubmVsIGRvd24gKi8KKwkweDA4LCAweGY3LCAweDAyLCAweGZkLCAweDIwLCAweDAwLCAweDAwLCAvKiAzICovCisJMHgwOCwgMHhmNywgMHgxOCwgMHhlNywgMHgyMywgMHgwMCwgMHgwMCwgLyogNiAqLworCTB4MDgsIDB4ZjcsIDB4MDQsIDB4ZmIsIDB4MjYsIDB4MDAsIDB4MDAsIC8qIDkgKi8KKwkweDA4LCAweGY3LCAweDA3LCAweGY4LCAweDQ0LCAweDAwLCAweDAwLCAvKiBqdW1wICovCit9OworCisvKiBNU0kgRElHSVZPWCBtaW5pIElJIFYzLjAgKi8KK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgYWY5MDE1X3JjX2tleXNfbXNpW10gPSB7CisJeyAweDAwLCAweDFlLCBLRVlfMSB9LAorCXsgMHgwMCwgMHgxZiwgS0VZXzIgfSwKKwl7IDB4MDAsIDB4MjAsIEtFWV8zIH0sCisJeyAweDAwLCAweDIxLCBLRVlfNCB9LAorCXsgMHgwMCwgMHgyMiwgS0VZXzUgfSwKKwl7IDB4MDAsIDB4MjMsIEtFWV82IH0sCisJeyAweDAwLCAweDI0LCBLRVlfNyB9LAorCXsgMHgwMCwgMHgyNSwgS0VZXzggfSwKKwl7IDB4MDAsIDB4MjYsIEtFWV85IH0sCisJeyAweDAwLCAweDI3LCBLRVlfMCB9LAorCXsgMHgwMywgMHgwZiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwMywgMHgwZSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDAwLCAweDQyLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMCwgMHg0MywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDA1LCAweDQ1LCBLRVlfUE9XRVIgfSwKKwl7IDB4MDAsIDB4NTIsIEtFWV9VUCB9LCAgICAgICAgICAgLyogdXAgKi8KKwl7IDB4MDAsIDB4NTEsIEtFWV9ET1dOIH0sICAgICAgICAgLyogZG93biAqLworCXsgMHgwMCwgMHgyOCwgS0VZX0VOVEVSIH0sCit9OworCitzdGF0aWMgdTggYWY5MDE1X2lyX3RhYmxlX21zaVtdID0geworCTB4MDMsIDB4ZmMsIDB4MTcsIDB4ZTgsIDB4NDUsIDB4MDUsIDB4MDAsIC8qIHBvd2VyICovCisJMHgwMywgMHhmYywgMHgwZCwgMHhmMiwgMHg1MSwgMHgwMCwgMHgwMCwgLyogZG93biAqLworCTB4MDMsIDB4ZmMsIDB4MDMsIDB4ZmMsIDB4NTIsIDB4MDAsIDB4MDAsIC8qIHVwICovCisJMHgwMywgMHhmYywgMHgxYSwgMHhlNSwgMHgxZSwgMHgwMCwgMHgwMCwgLyogMSAqLworCTB4MDMsIDB4ZmMsIDB4MDIsIDB4ZmQsIDB4MWYsIDB4MDAsIDB4MDAsIC8qIDIgKi8KKwkweDAzLCAweGZjLCAweDA0LCAweGZiLCAweDIwLCAweDAwLCAweDAwLCAvKiAzICovCisJMHgwMywgMHhmYywgMHgxYywgMHhlMywgMHgyMSwgMHgwMCwgMHgwMCwgLyogNCAqLworCTB4MDMsIDB4ZmMsIDB4MDgsIDB4ZjcsIDB4MjIsIDB4MDAsIDB4MDAsIC8qIDUgKi8KKwkweDAzLCAweGZjLCAweDFkLCAweGUyLCAweDIzLCAweDAwLCAweDAwLCAvKiA2ICovCisJMHgwMywgMHhmYywgMHgxMSwgMHhlZSwgMHgyNCwgMHgwMCwgMHgwMCwgLyogNyAqLworCTB4MDMsIDB4ZmMsIDB4MGIsIDB4ZjQsIDB4MjUsIDB4MDAsIDB4MDAsIC8qIDggKi8KKwkweDAzLCAweGZjLCAweDEwLCAweGVmLCAweDI2LCAweDAwLCAweDAwLCAvKiA5ICovCisJMHgwMywgMHhmYywgMHgwOSwgMHhmNiwgMHgyNywgMHgwMCwgMHgwMCwgLyogMCAqLworCTB4MDMsIDB4ZmMsIDB4MTQsIDB4ZWIsIDB4NDMsIDB4MDAsIDB4MDAsIC8qIHZvbHVtZSB1cCAqLworCTB4MDMsIDB4ZmMsIDB4MWYsIDB4ZTAsIDB4NDIsIDB4MDAsIDB4MDAsIC8qIHZvbHVtZSBkb3duICovCisJMHgwMywgMHhmYywgMHgxNSwgMHhlYSwgMHgwZiwgMHgwMywgMHgwMCwgLyogY2hhbm5lbCB1cCAqLworCTB4MDMsIDB4ZmMsIDB4MDUsIDB4ZmEsIDB4MGUsIDB4MDMsIDB4MDAsIC8qIGNoYW5uZWwgZG93biAqLworCTB4MDMsIDB4ZmMsIDB4MTYsIDB4ZTksIDB4MjgsIDB4MDAsIDB4MDAsIC8qIGVudGVyICovCit9OworCisvKiBNWUdJQ1RWIFU3MTggKi8KK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgYWY5MDE1X3JjX2tleXNfbXlnaWN0dltdID0geworCXsgMHgwMCwgMHgzZCwgS0VZX1NXSVRDSFZJREVPTU9ERSB9LAorCQkJCQkgIC8qIFRWIC8gQVYgKi8KKwl7IDB4MDUsIDB4NDUsIEtFWV9QT1dFUiB9LAorCXsgMHgwMCwgMHgxZSwgS0VZXzEgfSwKKwl7IDB4MDAsIDB4MWYsIEtFWV8yIH0sCisJeyAweDAwLCAweDIwLCBLRVlfMyB9LAorCXsgMHgwMCwgMHgyMSwgS0VZXzQgfSwKKwl7IDB4MDAsIDB4MjIsIEtFWV81IH0sCisJeyAweDAwLCAweDIzLCBLRVlfNiB9LAorCXsgMHgwMCwgMHgyNCwgS0VZXzcgfSwKKwl7IDB4MDAsIDB4MjUsIEtFWV84IH0sCisJeyAweDAwLCAweDI2LCBLRVlfOSB9LAorCXsgMHgwMCwgMHgyNywgS0VZXzAgfSwKKwl7IDB4MDAsIDB4NDEsIEtFWV9NVVRFIH0sCisJeyAweDAwLCAweDJhLCBLRVlfRVNDIH0sICAgICAgICAgIC8qIEVzYyAqLworCXsgMHgwMCwgMHgyZSwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwMCwgMHgyZCwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDAwLCAweDQyLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMCwgMHg0MywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDAwLCAweDUyLCBLRVlfVVAgfSwgICAgICAgICAgIC8qIHVwIGFycm93ICovCisJeyAweDAwLCAweDUxLCBLRVlfRE9XTiB9LCAgICAgICAgIC8qIGRvd24gYXJyb3cgKi8KKwl7IDB4MDAsIDB4NGYsIEtFWV9SSUdIVCB9LCAgICAgICAgLyogcmlnaHQgYXJyb3cgKi8KKwl7IDB4MDAsIDB4NTAsIEtFWV9MRUZUIH0sICAgICAgICAgLyogbGVmdCBhcnJvdyAqLworCXsgMHgwMCwgMHgyOCwgS0VZX0VOVEVSIH0sICAgICAgICAvKiBvayAqLworCXsgMHgwMSwgMHgxNSwgS0VZX1JFQ09SRCB9LAorCXsgMHgwMywgMHgxMywgS0VZX1BMQVkgfSwKKwl7IDB4MDEsIDB4MTMsIEtFWV9QQVVTRSB9LAorCXsgMHgwMSwgMHgxNiwgS0VZX1NUT1AgfSwKKwl7IDB4MDMsIDB4MDcsIEtFWV9SRVdJTkQgfSwgICAgICAgLyogRlIgPDwgKi8KKwl7IDB4MDMsIDB4MDksIEtFWV9GQVNURk9SV0FSRCB9LCAgLyogRkYgPj4gKi8KKwl7IDB4MDAsIDB4M2IsIEtFWV9USU1FIH0sICAgICAgICAgLyogVGltZVNoaWZ0ICovCisJeyAweDAwLCAweDNlLCBLRVlfQ0FNRVJBIH0sICAgICAgIC8qIFNuYXBzaG90ICovCisJeyAweDAzLCAweDE2LCBLRVlfQ1lDTEVXSU5ET1dTIH0sIC8qIHllbGxvdywgbWluIC8gbWF4ICovCisJeyAweDAwLCAweDAwLCBLRVlfWk9PTSB9LCAgICAgICAgIC8qICdzZWxlY3QnICg/KSAqLworCXsgMHgwMywgMHgxNiwgS0VZX1NIVUZGTEUgfSwgICAgICAvKiBTaHVmZmxlICovCisJeyAweDAzLCAweDQ1LCBLRVlfUE9XRVIgfSwKK307CisKK3N0YXRpYyB1OCBhZjkwMTVfaXJfdGFibGVfbXlnaWN0dltdID0geworCTB4MDIsIDB4YmQsIDB4MGMsIDB4ZjMsIDB4M2QsIDB4MDAsIDB4MDAsIC8qIFRWIC8gQVYgKi8KKwkweDAyLCAweGJkLCAweDE0LCAweGViLCAweDQ1LCAweDA1LCAweDAwLCAvKiBwb3dlciAqLworCTB4MDIsIDB4YmQsIDB4MDAsIDB4ZmYsIDB4MWUsIDB4MDAsIDB4MDAsIC8qIDEgKi8KKwkweDAyLCAweGJkLCAweDAxLCAweGZlLCAweDFmLCAweDAwLCAweDAwLCAvKiAyICovCisJMHgwMiwgMHhiZCwgMHgwMiwgMHhmZCwgMHgyMCwgMHgwMCwgMHgwMCwgLyogMyAqLworCTB4MDIsIDB4YmQsIDB4MDMsIDB4ZmMsIDB4MjEsIDB4MDAsIDB4MDAsIC8qIDQgKi8KKwkweDAyLCAweGJkLCAweDA0LCAweGZiLCAweDIyLCAweDAwLCAweDAwLCAvKiA1ICovCisJMHgwMiwgMHhiZCwgMHgwNSwgMHhmYSwgMHgyMywgMHgwMCwgMHgwMCwgLyogNiAqLworCTB4MDIsIDB4YmQsIDB4MDYsIDB4ZjksIDB4MjQsIDB4MDAsIDB4MDAsIC8qIDcgKi8KKwkweDAyLCAweGJkLCAweDA3LCAweGY4LCAweDI1LCAweDAwLCAweDAwLCAvKiA4ICovCisJMHgwMiwgMHhiZCwgMHgwOCwgMHhmNywgMHgyNiwgMHgwMCwgMHgwMCwgLyogOSAqLworCTB4MDIsIDB4YmQsIDB4MDksIDB4ZjYsIDB4MjcsIDB4MDAsIDB4MDAsIC8qIDAgKi8KKwkweDAyLCAweGJkLCAweDBhLCAweGY1LCAweDQxLCAweDAwLCAweDAwLCAvKiBtdXRlICovCisJMHgwMiwgMHhiZCwgMHgxYywgMHhlMywgMHgyYSwgMHgwMCwgMHgwMCwgLyogZXNjICovCisJMHgwMiwgMHhiZCwgMHgxZiwgMHhlMCwgMHg0MywgMHgwMCwgMHgwMCwgLyogdm9sdW1lIHVwICovCisJMHgwMiwgMHhiZCwgMHgxMiwgMHhlZCwgMHg1MiwgMHgwMCwgMHgwMCwgLyogdXAgYXJyb3cgKi8KKwkweDAyLCAweGJkLCAweDExLCAweGVlLCAweDUwLCAweDAwLCAweDAwLCAvKiBsZWZ0IGFycm93ICovCisJMHgwMiwgMHhiZCwgMHgxNSwgMHhlYSwgMHgyOCwgMHgwMCwgMHgwMCwgLyogb2sgKi8KKwkweDAyLCAweGJkLCAweDEwLCAweGVmLCAweDRmLCAweDAwLCAweDAwLCAvKiByaWdodCBhcnJvdyAqLworCTB4MDIsIDB4YmQsIDB4MTMsIDB4ZWMsIDB4NTEsIDB4MDAsIDB4MDAsIC8qIGRvd24gYXJyb3cgKi8KKwkweDAyLCAweGJkLCAweDBlLCAweGYxLCAweDQyLCAweDAwLCAweDAwLCAvKiB2b2x1bWUgZG93biAqLworCTB4MDIsIDB4YmQsIDB4MTksIDB4ZTYsIDB4MTUsIDB4MDEsIDB4MDAsIC8qIHJlY29yZCAqLworCTB4MDIsIDB4YmQsIDB4MWUsIDB4ZTEsIDB4MTMsIDB4MDMsIDB4MDAsIC8qIHBsYXkgKi8KKwkweDAyLCAweGJkLCAweDE2LCAweGU5LCAweDE2LCAweDAxLCAweDAwLCAvKiBzdG9wICovCisJMHgwMiwgMHhiZCwgMHgwYiwgMHhmNCwgMHgyOCwgMHgwNCwgMHgwMCwgLyogeWVsbG93LCBtaW4gLyBtYXggKi8KKwkweDAyLCAweGJkLCAweDBmLCAweGYwLCAweDNiLCAweDAwLCAweDAwLCAvKiB0aW1lIHNoaWZ0ICovCisJMHgwMiwgMHhiZCwgMHgxOCwgMHhlNywgMHgyZSwgMHgwMCwgMHgwMCwgLyogY2hhbm5lbCB1cCAqLworCTB4MDIsIDB4YmQsIDB4MWEsIDB4ZTUsIDB4MmQsIDB4MDAsIDB4MDAsIC8qIGNoYW5uZWwgZG93biAqLworCTB4MDIsIDB4YmQsIDB4MTcsIDB4ZTgsIDB4M2UsIDB4MDAsIDB4MDAsIC8qIHNuYXBzaG90ICovCisJMHgwMiwgMHhiZCwgMHg0MCwgMHhiZiwgMHgxMywgMHgwMSwgMHgwMCwgLyogcGF1c2UgKi8KKwkweDAyLCAweGJkLCAweDQxLCAweGJlLCAweDA5LCAweDAzLCAweDAwLCAvKiBGRiA+PiAqLworCTB4MDIsIDB4YmQsIDB4NDIsIDB4YmQsIDB4MDcsIDB4MDMsIDB4MDAsIC8qIEZSIDw8ICovCisJMHgwMiwgMHhiZCwgMHg0MywgMHhiYywgMHgwMCwgMHgwMCwgMHgwMCwgLyogJ3NlbGVjdCcgKD8pICovCisJMHgwMiwgMHhiZCwgMHg0NCwgMHhiYiwgMHgxNiwgMHgwMywgMHgwMCwgLyogc2h1ZmZsZSAqLworCTB4MDIsIDB4YmQsIDB4NDUsIDB4YmEsIDB4NDUsIDB4MDMsIDB4MDAsIC8qIHBvd2VyICovCit9OworCisvKiBLV29ybGQgUGx1c1RWIER1YWwgRFZCLVQgU3RpY2sgKERWQi1UIDM5OVUpICovCitzdGF0aWMgdTggYWY5MDE1X2lyX3RhYmxlX2t3b3JsZFtdID0geworCTB4ODYsIDB4NmIsIDB4MGMsIDB4ZjMsIDB4MmUsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgxNiwgMHhlOSwgMHgyZCwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDFkLCAweGUyLCAweDM3LCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MDAsIDB4ZmYsIDB4MWUsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgwMSwgMHhmZSwgMHgxZiwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDAyLCAweGZkLCAweDIwLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MDMsIDB4ZmMsIDB4MjEsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgwNCwgMHhmYiwgMHgyMiwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDA1LCAweGZhLCAweDIzLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MDYsIDB4ZjksIDB4MjQsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgwNywgMHhmOCwgMHgyNSwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDA4LCAweGY3LCAweDI2LCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MDksIDB4ZjYsIDB4NGQsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgwYSwgMHhmNSwgMHg0ZSwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDE0LCAweGViLCAweDRmLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MWUsIDB4ZTEsIDB4NTAsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgxNywgMHhlOCwgMHg1MiwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDFmLCAweGUwLCAweDUxLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MGUsIDB4ZjEsIDB4MGIsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgyMCwgMHhkZiwgMHgwYywgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDQyLCAweGJkLCAweDBkLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MGIsIDB4ZjQsIDB4MGUsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHg0MywgMHhiYywgMHgwZiwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDEwLCAweGVmLCAweDEwLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MjEsIDB4ZGUsIDB4MTEsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgxMywgMHhlYywgMHgxMiwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDExLCAweGVlLCAweDEzLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MTIsIDB4ZWQsIDB4MTQsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgxOSwgMHhlNiwgMHgxNSwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDFhLCAweGU1LCAweDE2LCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MWIsIDB4ZTQsIDB4MTcsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHg0YiwgMHhiNCwgMHgxOCwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDQwLCAweGJmLCAweDE5LCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4NDQsIDB4YmIsIDB4MWEsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHg0MSwgMHhiZSwgMHgxYiwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDIyLCAweGRkLCAweDFjLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MTUsIDB4ZWEsIDB4MWQsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgwZiwgMHhmMCwgMHgzZiwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDFjLCAweGUzLCAweDQwLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4NGEsIDB4YjUsIDB4NDEsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHg0OCwgMHhiNywgMHg0MiwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDQ5LCAweGI2LCAweDQzLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MTgsIDB4ZTcsIDB4NDQsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgyMywgMHhkYywgMHg0NSwgMHgwNywgMHgwMCwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKaW5kZXggMmY0MDhkMi4uYzc4NjM1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCkBAIC00MSw2ICs0MSw5IEBACiBzdGF0aWMgaW50IGR2Yl91c2JfYW55c2VlX2RlYnVnOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkdmJfdXNiX2FueXNlZV9kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CitpbnQgZHZiX3VzYl9hbnlzZWVfZGVsc3lzOworbW9kdWxlX3BhcmFtX25hbWVkKGRlbHN5cywgZHZiX3VzYl9hbnlzZWVfZGVsc3lzLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWxzeXMsICJzZWxlY3QgZGVsaXZlcnkgbW9kZSAoMD1EVkItQywgMT1EVkItVCkiKTsKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCiBzdGF0aWMgc3RydWN0IG11dGV4IGFueXNlZV91c2JfbXV0ZXg7CkBAIC0xNzgsMTQgKzE4MSwxNCBAQAogCQkJaW5jID0gMTsKIAkJfQogCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKKwkJCWJyZWFrOwogCiAJCWkgKz0gaW5jOwogCX0KIAogCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKIAotCXJldHVybiBpOworCXJldHVybiByZXQgPyByZXQgOiBpOwogfQogCiBzdGF0aWMgdTMyIGFueXNlZV9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0yNzIsOSArMjc1LDExIEBACiAJICAgICAgbW9kZWwgICAgICBkZW1vZCAgICAgaHcgIGZpcm13YXJlCiAJICAgMS4gRTMwICAgICAgICBNVDM1MiAgICAgMDIgIDAuMi4xCiAJICAgMi4gRTMwICAgICAgICBaTDEwMzUzICAgMDIgIDAuMi4xCi0JICAgMy4gRTMwIFBsdXMgICBaTDEwMzUzICAgMDYgIDAuMS4wCi0JICAgNC4gRTMwQyBQbHVzICBUREExMDAyMyAgMGEgIDAuMS4wICAgIHJldiAwLjIKLQkgICA0LiBFMzBDIFBsdXMgIFREQTEwMDIzICAwZiAgMC4xLjIgICAgcmV2IDAuNAorCSAgIDMuIEUzMCBDb21ibyAgWkwxMDM1MyAgIDBmICAwLjEuMiAgICBEVkItVC9DIGNvbWJvCisJICAgNC4gRTMwIFBsdXMgICBaTDEwMzUzICAgMDYgIDAuMS4wCisJICAgNS4gRTMwQyBQbHVzICBUREExMDAyMyAgMGEgIDAuMS4wICAgIHJldiAwLjIKKwkgICAgICBFMzBDIFBsdXMgIFREQTEwMDIzICAwZiAgMC4xLjIgICAgcmV2IDAuNAorCSAgICAgIEUzMCBDb21ibyAgVERBMTAwMjMgIDBmICAwLjEuMiAgICBEVkItVC9DIGNvbWJvCiAJKi8KIAogCS8qIFphcmxpbmsgTVQzNTIgRFZCLVQgZGVtb2QgaW5zaWRlIG9mIFNhbXN1bmcgRE5PUzQwNFpIMTAyQSBOSU0gKi8KQEAgLTI5Myw2ICsyOTgsMjEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJLyogZm9yIEUzMCBDb21ibyBQbHVzIERWQi1UIGRlbW9kdWxhdG9yICovCisJaWYgKGR2Yl91c2JfYW55c2VlX2RlbHN5cykgeworCQlyZXQgPSBhbnlzZWVfd3JpdGVfcmVnKGFkYXAtPmRldiwgMHhiMCwgMHgwMSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qIFphcmxpbmsgWkwxMDM1MyBEVkItVCBkZW1vZCAqLworCQlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsICZhbnlzZWVfemwxMDM1M19jb25maWcsCisJCQkJICAgICAgJmFkYXAtPmRldi0+aTJjX2FkYXApOworCQlpZiAoYWRhcC0+ZmUgIT0gTlVMTCkgeworCQkJc3RhdGUtPnR1bmVyID0gRFZCX1BMTF9TQU1TVU5HX0RUT1M0MDNJSDEwMkE7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwogCS8qIGNvbm5lY3QgZGVtb2Qgb24gSU8gcG9ydCBEIGZvciBUREExMDAyMyAmIFpMMTAzNTMgKi8KIAlyZXQgPSBhbnlzZWVfd3JpdGVfcmVnKGFkYXAtPmRldiwgMHhiMCwgMHgyNSk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWM5Zjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jaW5lcmd5VDItY29yZS5jCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICogVGVycmFUZWMgQ2luZXJneSBUMi9xYW51IFVTQjIgRFZCLVQgYWRhcHRlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVG9taSBPcmF2YSAodG9taW1vQG5jaXJjbGUubnVsbG5ldC5maSkKKyAqCisgKiBCYXNlZCBvbiB0aGUgZHZiLXVzYi1mcmFtZXdvcmsgY29kZSBhbmQgdGhlCisgKiBvcmlnaW5hbCBUZXJyYXRlYyBDaW5lcmd5IFQyIGRyaXZlciBieToKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgRGFuaWVsIE1hY2sgPGRhbmllbEBxYW51LmRlPiBhbmQKKyAqCQkgICAgSG9sZ2VyIFdhZWNodGxlciA8aG9sZ2VyQHFhbnUuZGU+CisgKgorICogIFByb3RvY29sIFNwZWMgcHVibGlzaGVkIG9uIGh0dHA6Ly9xYW51LmRlL3NwZWNzL3RlcnJhdGVjX2NpbmVyZ3lUMi5wZGYKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNpbmVyZ3lUMi5oIgorCisKKy8qIGRlYnVnICovCitpbnQgZHZiX3VzYl9jaW5lcmd5dDJfZGVidWc7CitpbnQgZGlzYWJsZV9yZW1vdGU7CisKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHZiX3VzYl9jaW5lcmd5dDJfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvLCB4ZmVyPTIsIHJjPTQgIgorCQkiKG9yLWFibGUpKS4iKTsKKworRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CisKK3N0cnVjdCBjaW5lcmd5dDJfc3RhdGUgeworCXU4IHJjX2NvdW50ZXI7Cit9OworCisvKiBXZSBhcmUgbWlzc2luZyBhIHJlbGVhc2UgaG9vayB3aXRoIHVzYl9kZXZpY2UgZGF0YSAqLworc3RydWN0IGR2Yl91c2JfZGV2aWNlICpjaW5lcmd5dDJfdXNiX2RldmljZTsKKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGNpbmVyZ3l0Ml9wcm9wZXJ0aWVzOworCitzdGF0aWMgaW50IGNpbmVyZ3l0Ml9zdHJlYW1pbmdfY3RybChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgZW5hYmxlKQoreworCWNoYXIgYnVmW10gPSB7IENJTkVSR1lUMl9FUDFfQ09OVFJPTF9TVFJFQU1fVFJBTlNGRVIsIGVuYWJsZSA/IDEgOiAwIH07CisJY2hhciByZXN1bHRbNjRdOworCXJldHVybiBkdmJfdXNiX2dlbmVyaWNfcncoYWRhcC0+ZGV2LCBidWYsIHNpemVvZihidWYpLCByZXN1bHQsCisJCQkJc2l6ZW9mKHJlc3VsdCksIDApOworfQorCitzdGF0aWMgaW50IGNpbmVyZ3l0Ml9wb3dlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IGVuYWJsZSkKK3sKKwljaGFyIGJ1ZltdID0geyBDSU5FUkdZVDJfRVAxX1NMRUVQX01PREUsIGVuYWJsZSA/IDAgOiAxIH07CisJY2hhciBzdGF0ZVszXTsKKwlyZXR1cm4gZHZiX3VzYl9nZW5lcmljX3J3KGQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0YXRlLCBzaXplb2Yoc3RhdGUpLCAwKTsKK30KKworc3RhdGljIGludCBjaW5lcmd5dDJfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJY2hhciBxdWVyeVtdID0geyBDSU5FUkdZVDJfRVAxX0dFVF9GSVJNV0FSRV9WRVJTSU9OIH07CisJY2hhciBzdGF0ZVszXTsKKwlpbnQgcmV0OworCisJYWRhcC0+ZmUgPSBjaW5lcmd5dDJfZmVfYXR0YWNoKGFkYXAtPmRldik7CisKKwlyZXQgPSBkdmJfdXNiX2dlbmVyaWNfcncoYWRhcC0+ZGV2LCBxdWVyeSwgc2l6ZW9mKHF1ZXJ5KSwgc3RhdGUsCisJCQkJc2l6ZW9mKHN0YXRlKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGViX3JjKCJjaW5lcmd5dDJfcG93ZXJfY3RybCgpIEZhaWxlZCB0byByZXRyaWV2ZSBzbGVlcCAiCisJCQkic3RhdGUgaW5mb1xuIik7CisJfQorCisJLyogQ29weSB0aGlzIHBvaW50ZXIgYXMgd2UgYXJlIGdvbm5hIG5lZWQgaXQgaW4gdGhlIHJlbGVhc2UgcGhhc2UgKi8KKwljaW5lcmd5dDJfdXNiX2RldmljZSA9IGFkYXAtPmRldjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGNpbmVyZ3l0Ml9yY19rZXlzW10gPSB7CisJeyAweDA0LAkweDAxLAlLRVlfUE9XRVIgfSwKKwl7IDB4MDQsCTB4MDIsCUtFWV8xIH0sCisJeyAweDA0LAkweDAzLAlLRVlfMiB9LAorCXsgMHgwNCwJMHgwNCwJS0VZXzMgfSwKKwl7IDB4MDQsCTB4MDUsCUtFWV80IH0sCisJeyAweDA0LAkweDA2LAlLRVlfNSB9LAorCXsgMHgwNCwJMHgwNywJS0VZXzYgfSwKKwl7IDB4MDQsCTB4MDgsCUtFWV83IH0sCisJeyAweDA0LAkweDA5LAlLRVlfOCB9LAorCXsgMHgwNCwJMHgwYSwJS0VZXzkgfSwKKwl7IDB4MDQsCTB4MGMsCUtFWV8wIH0sCisJeyAweDA0LAkweDBiLAlLRVlfVklERU8gfSwKKwl7IDB4MDQsCTB4MGQsCUtFWV9SRUZSRVNIIH0sCisJeyAweDA0LAkweDBlLAlLRVlfU0VMRUNUIH0sCisJeyAweDA0LAkweDBmLAlLRVlfRVBHIH0sCisJeyAweDA0LAkweDEwLAlLRVlfVVAgfSwKKwl7IDB4MDQsCTB4MTQsCUtFWV9ET1dOIH0sCisJeyAweDA0LAkweDExLAlLRVlfTEVGVCB9LAorCXsgMHgwNCwJMHgxMywJS0VZX1JJR0hUIH0sCisJeyAweDA0LAkweDEyLAlLRVlfT0sgfSwKKwl7IDB4MDQsCTB4MTUsCUtFWV9URVhUIH0sCisJeyAweDA0LAkweDE2LAlLRVlfSU5GTyB9LAorCXsgMHgwNCwJMHgxNywJS0VZX1JFRCB9LAorCXsgMHgwNCwJMHgxOCwJS0VZX0dSRUVOIH0sCisJeyAweDA0LAkweDE5LAlLRVlfWUVMTE9XIH0sCisJeyAweDA0LAkweDFhLAlLRVlfQkxVRSB9LAorCXsgMHgwNCwJMHgxYywJS0VZX1ZPTFVNRVVQIH0sCisJeyAweDA0LAkweDFlLAlLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwNCwJMHgxZCwJS0VZX01VVEUgfSwKKwl7IDB4MDQsCTB4MWIsCUtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDQsCTB4MWYsCUtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwNCwJMHg0MCwJS0VZX1BBVVNFIH0sCisJeyAweDA0LAkweDRjLAlLRVlfUExBWSB9LAorCXsgMHgwNCwJMHg1OCwJS0VZX1JFQ09SRCB9LAorCXsgMHgwNCwJMHg1NCwJS0VZX1BSRVZJT1VTIH0sCisJeyAweDA0LAkweDQ4LAlLRVlfU1RPUCB9LAorCXsgMHgwNCwJMHg1YywJS0VZX05FWFQgfQorfTsKKworLyogTnVtYmVyIG9mIGtleXByZXNzZXMgdG8gaWdub3JlIGJlZm9yZSBkZXRlY3QgcmVwZWF0aW5nICovCisjZGVmaW5lIFJDX1JFUEVBVF9ERUxBWSAzCisKK3N0YXRpYyBpbnQgcmVwZWF0YWJsZV9rZXlzW10gPSB7CisJS0VZX1VQLAorCUtFWV9ET1dOLAorCUtFWV9MRUZULAorCUtFWV9SSUdIVCwKKwlLRVlfVk9MVU1FVVAsCisJS0VZX1ZPTFVNRURPV04sCisJS0VZX0NIQU5ORUxVUCwKKwlLRVlfQ0hBTk5FTERPV04KK307CisKK3N0YXRpYyBpbnQgY2luZXJneXQyX3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgY2luZXJneXQyX3N0YXRlICpzdCA9IGQtPnByaXY7CisJdTgga2V5WzVdID0gezAsIDAsIDAsIDAsIDB9LCBjbWQgPSBDSU5FUkdZVDJfRVAxX0dFVF9SQ19FVkVOVFM7CisJaW50IGk7CisKKwkqc3RhdGUgPSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ7CisKKwlkdmJfdXNiX2dlbmVyaWNfcncoZCwgJmNtZCwgMSwga2V5LCBzaXplb2Yoa2V5KSwgMCk7CisJaWYgKGtleVs0XSA9PSAweGZmKSB7CisJCS8qIGtleSByZXBlYXQgKi8KKwkJc3QtPnJjX2NvdW50ZXIrKzsKKwkJaWYgKHN0LT5yY19jb3VudGVyID4gUkNfUkVQRUFUX0RFTEFZKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZXBlYXRhYmxlX2tleXMpOyBpKyspIHsKKwkJCQlpZiAoZC0+bGFzdF9ldmVudCA9PSByZXBlYXRhYmxlX2tleXNbaV0pIHsKKwkJCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9SRVBFQVQ7CisJCQkJCSpldmVudCA9IGQtPmxhc3RfZXZlbnQ7CisJCQkJCWRlYl9yYygicmVwZWF0IGtleSwgZXZlbnQgJXhcbiIsCisJCQkJCQkgICAqZXZlbnQpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQl9CisJCQlkZWJfcmMoInJlcGVhdGVkIGtleSAobm9uIHJlcGVhdGFibGUpXG4iKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBoYWNrIHRvIHBhc3MgY2hlY2tzdW0gb24gdGhlIGN1c3RvbSBmaWVsZCAqLworCWtleVsyXSA9IH5rZXlbMV07CisJZHZiX3VzYl9uZWNfcmNfa2V5X3RvX2V2ZW50KGQsIGtleSwgZXZlbnQsIHN0YXRlKTsKKwlpZiAoa2V5WzBdICE9IDApIHsKKwkJaWYgKCpldmVudCAhPSBkLT5sYXN0X2V2ZW50KQorCQkJc3QtPnJjX2NvdW50ZXIgPSAwOworCisJCWRlYl9yYygia2V5OiAleCAleCAleCAleCAleFxuIiwKKwkJICAgICAgIGtleVswXSwga2V5WzFdLCBrZXlbMl0sIGtleVszXSwga2V5WzRdKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2luZXJneXQyX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmNpbmVyZ3l0Ml9wcm9wZXJ0aWVzLAorCQkJCQlUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucik7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNpbmVyZ3l0Ml91c2JfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9URVJSQVRFQywgMHgwMDM4KSB9LAorCXsgMCB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2luZXJneXQyX3VzYl90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjaW5lcmd5dDJfcHJvcGVydGllcyA9IHsKKwkuc2l6ZV9vZl9wcml2ID0gc2l6ZW9mKHN0cnVjdCBjaW5lcmd5dDJfc3RhdGUpLAorCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0geworCQl7CisJCQkuc3RyZWFtaW5nX2N0cmwgICA9IGNpbmVyZ3l0Ml9zdHJlYW1pbmdfY3RybCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gY2luZXJneXQyX2Zyb250ZW5kX2F0dGFjaCwKKworCQkJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkJCS5jb3VudCA9IDUsCisJCQkJLmVuZHBvaW50ID0gMHgwMiwKKwkJCQkudSA9IHsKKwkJCQkJLmJ1bGsgPSB7CisJCQkJCQkuYnVmZmVyc2l6ZSA9IDUxMiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCisJCX0KKwl9LAorCisJLnBvd2VyX2N0cmwgICAgICAgPSBjaW5lcmd5dDJfcG93ZXJfY3RybCwKKworCS5yY19pbnRlcnZhbCAgICAgID0gNTAsCisJLnJjX2tleV9tYXAgICAgICAgPSBjaW5lcmd5dDJfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoY2luZXJneXQyX3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgID0gY2luZXJneXQyX3JjX3F1ZXJ5LAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMSwKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeyAubmFtZSA9ICJUZXJyYVRlYy9xYW51IFVTQjIuMCBIaWdoc3BlZWQgRFZCLVQgUmVjZWl2ZXIiLAorCQkgIC5jb2xkX2lkcyA9IHtOVUxMfSwKKwkJICAud2FybV9pZHMgPSB7ICZjaW5lcmd5dDJfdXNiX3RhYmxlWzBdLCBOVUxMIH0sCisJCX0sCisJCXsgTlVMTCB9LAorCX0KK307CisKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNpbmVyZ3l0Ml9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImNpbmVyZ3lUMiIsCisJLnByb2JlCQk9IGNpbmVyZ3l0Ml91c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSBkdmJfdXNiX2RldmljZV9leGl0LAorCS5pZF90YWJsZQk9IGNpbmVyZ3l0Ml91c2JfdGFibGUKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNpbmVyZ3l0Ml91c2JfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSB1c2JfcmVnaXN0ZXIoJmNpbmVyZ3l0Ml9kcml2ZXIpOworCWlmIChlcnIpIHsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIoKSBmYWlsZWQhIChlcnIgJWkpXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNpbmVyZ3l0Ml91c2JfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZjaW5lcmd5dDJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY2luZXJneXQyX3VzYl9pbml0KTsKK21vZHVsZV9leGl0KGNpbmVyZ3l0Ml91c2JfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVGVycmF0ZWMgQ2luZXJneSBUMiBEVkItVCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlRvbWkgT3JhdmEiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NpbmVyZ3lUMi1mZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OWYyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NpbmVyZ3lUMi1mZS5jCkBAIC0wLDAgKzEsMzUxIEBACisvKgorICogVGVycmFUZWMgQ2luZXJneSBUMi9xYW51IFVTQjIgRFZCLVQgYWRhcHRlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVG9taSBPcmF2YSAodG9taW1vQG5jaXJjbGUubnVsbG5ldC5maSkKKyAqCisgKiBCYXNlZCBvbiB0aGUgZHZiLXVzYi1mcmFtZXdvcmsgY29kZSBhbmQgdGhlCisgKiBvcmlnaW5hbCBUZXJyYXRlYyBDaW5lcmd5IFQyIGRyaXZlciBieToKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgRGFuaWVsIE1hY2sgPGRhbmllbEBxYW51LmRlPiBhbmQKKyAqICAgICAgICAgICAgICAgICAgSG9sZ2VyIFdhZWNodGxlciA8aG9sZ2VyQHFhbnUuZGU+CisgKgorICogIFByb3RvY29sIFNwZWMgcHVibGlzaGVkIG9uIGh0dHA6Ly9xYW51LmRlL3NwZWNzL3RlcnJhdGVjX2NpbmVyZ3lUMi5wZGYKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNpbmVyZ3lUMi5oIgorCisKKy8qKgorICogIGNvbnZlcnQgbGludXgtZHZiIGZyb250ZW5kIHBhcmFtZXRlciBzZXQgaW50byBUUFMuCisgKiAgU2VlIEVUU0kgRVRTLTMwMDc0NCwgc2VjdGlvbiA0LjYuMiwgdGFibGUgOSBmb3IgZGV0YWlscy4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSByZXVzYWJsZSBhbmQgbWF5IGJldHRlciBnZXQgcGxhY2VkIGluIGEgc3VwcG9ydAorICogIGxpYnJhcnkuCisgKgorICogIFdlIHJlcGxhY2UgZXJyb3Jub3VzIGZpZWxkcyBieSBkZWZhdWx0IFRQUyBmaWVsZHMgKHRoZSBvbmVzIHdpdGggdmFsdWUgMCkuCisgKi8KKworc3RhdGljIHVpbnQxNl90IGNvbXB1dGVfdHBzKHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyAqb3AgPSAmcC0+dS5vZmRtOworCXVpbnQxNl90IHRwcyA9IDA7CisKKwlzd2l0Y2ggKG9wLT5jb2RlX3JhdGVfSFApIHsKKwljYXNlIEZFQ18yXzM6CisJCXRwcyB8PSAoMSA8PCA3KTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfM180OgorCQl0cHMgfD0gKDIgPDwgNyk7CisJCWJyZWFrOworCWNhc2UgRkVDXzVfNjoKKwkJdHBzIHw9ICgzIDw8IDcpOworCQlicmVhazsKKwljYXNlIEZFQ183Xzg6CisJCXRwcyB8PSAoNCA8PCA3KTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfMV8yOgorCWNhc2UgRkVDX0FVVE86CisJZGVmYXVsdDoKKwkJLyogdHBzIHw9ICgwIDw8IDcpICovOworCX0KKworCXN3aXRjaCAob3AtPmNvZGVfcmF0ZV9MUCkgeworCWNhc2UgRkVDXzJfMzoKKwkJdHBzIHw9ICgxIDw8IDQpOworCQlicmVhazsKKwljYXNlIEZFQ18zXzQ6CisJCXRwcyB8PSAoMiA8PCA0KTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfNV82OgorCQl0cHMgfD0gKDMgPDwgNCk7CisJCWJyZWFrOworCWNhc2UgRkVDXzdfODoKKwkJdHBzIHw9ICg0IDw8IDQpOworCQlicmVhazsKKwljYXNlIEZFQ18xXzI6CisJY2FzZSBGRUNfQVVUTzoKKwlkZWZhdWx0OgorCQkvKiB0cHMgfD0gKDAgPDwgNCkgKi87CisJfQorCisJc3dpdGNoIChvcC0+Y29uc3RlbGxhdGlvbikgeworCWNhc2UgUUFNXzE2OgorCQl0cHMgfD0gKDEgPDwgMTMpOworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwkJdHBzIHw9ICgyIDw8IDEzKTsKKwkJYnJlYWs7CisJY2FzZSBRUFNLOgorCWRlZmF1bHQ6CisJCS8qIHRwcyB8PSAoMCA8PCAxMykgKi87CisJfQorCisJc3dpdGNoIChvcC0+dHJhbnNtaXNzaW9uX21vZGUpIHsKKwljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOgorCQl0cHMgfD0gKDEgPDwgMCk7CisJCWJyZWFrOworCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6CisJZGVmYXVsdDoKKwkJLyogdHBzIHw9ICgwIDw8IDApICovOworCX0KKworCXN3aXRjaCAob3AtPmd1YXJkX2ludGVydmFsKSB7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzE2OgorCQl0cHMgfD0gKDEgPDwgMik7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV84OgorCQl0cHMgfD0gKDIgPDwgMik7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV80OgorCQl0cHMgfD0gKDMgPDwgMik7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8zMjoKKwlkZWZhdWx0OgorCQkvKiB0cHMgfD0gKDAgPDwgMikgKi87CisJfQorCisJc3dpdGNoIChvcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uKSB7CisJY2FzZSBISUVSQVJDSFlfMToKKwkJdHBzIHw9ICgxIDw8IDEwKTsKKwkJYnJlYWs7CisJY2FzZSBISUVSQVJDSFlfMjoKKwkJdHBzIHw9ICgyIDw8IDEwKTsKKwkJYnJlYWs7CisJY2FzZSBISUVSQVJDSFlfNDoKKwkJdHBzIHw9ICgzIDw8IDEwKTsKKwkJYnJlYWs7CisJY2FzZSBISUVSQVJDSFlfTk9ORToKKwlkZWZhdWx0OgorCQkvKiB0cHMgfD0gKDAgPDwgMTApICovOworCX0KKworCXJldHVybiB0cHM7Cit9CisKK3N0cnVjdCBjaW5lcmd5dDJfZmVfc3RhdGUgeworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZmU7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkOworfTsKKworc3RhdGljIGludCBjaW5lcmd5dDJfZmVfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCWZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IGNpbmVyZ3l0Ml9mZV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgZHZidF9nZXRfc3RhdHVzX21zZyByZXN1bHQ7CisJdTggY21kW10gPSB7IENJTkVSR1lUMl9FUDFfR0VUX1RVTkVSX1NUQVRVUyB9OworCWludCByZXQ7CisKKwlyZXQgPSBkdmJfdXNiX2dlbmVyaWNfcncoc3RhdGUtPmQsIGNtZCwgc2l6ZW9mKGNtZCksICh1OCAqKSZyZXN1bHQsCisJCQlzaXplb2YocmVzdWx0KSwgMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkqc3RhdHVzID0gMDsKKworCWlmICgweGZmZmYgLSBsZTE2X3RvX2NwdShyZXN1bHQuZ2FpbikgPiAzMCkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU0lHTkFMOworCWlmIChyZXN1bHQubG9ja19iaXRzICYgKDEgPDwgNikpCisJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7CisJaWYgKHJlc3VsdC5sb2NrX2JpdHMgJiAoMSA8PCA1KSkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU1lOQzsKKwlpZiAocmVzdWx0LmxvY2tfYml0cyAmICgxIDw8IDQpKQorCQkqc3RhdHVzIHw9IEZFX0hBU19DQVJSSUVSOworCWlmIChyZXN1bHQubG9ja19iaXRzICYgKDEgPDwgMSkpCisJCSpzdGF0dXMgfD0gRkVfSEFTX1ZJVEVSQkk7CisKKwlpZiAoKCpzdGF0dXMgJiAoRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfVklURVJCSSB8IEZFX0hBU19TWU5DKSkgIT0KKwkJCShGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19WSVRFUkJJIHwgRkVfSEFTX1NZTkMpKQorCQkqc3RhdHVzICY9IH5GRV9IQVNfTE9DSzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNpbmVyZ3l0Ml9mZV9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCit7CisJc3RydWN0IGNpbmVyZ3l0Ml9mZV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgZHZidF9nZXRfc3RhdHVzX21zZyBzdGF0dXM7CisJY2hhciBjbWRbXSA9IHsgQ0lORVJHWVQyX0VQMV9HRVRfVFVORVJfU1RBVFVTIH07CisJaW50IHJldDsKKworCXJldCA9IGR2Yl91c2JfZ2VuZXJpY19ydyhzdGF0ZS0+ZCwgY21kLCBzaXplb2YoY21kKSwgKGNoYXIgKikmc3RhdHVzLAorCQkJCXNpemVvZihzdGF0dXMpLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCSpiZXIgPSBsZTMyX3RvX2NwdShzdGF0dXMudml0ZXJiaV9lcnJvcl9yYXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaW5lcmd5dDJfZmVfcmVhZF91bmNfYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVuYykKK3sKKwlzdHJ1Y3QgY2luZXJneXQyX2ZlX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBkdmJ0X2dldF9zdGF0dXNfbXNnIHN0YXR1czsKKwl1OCBjbWRbXSA9IHsgQ0lORVJHWVQyX0VQMV9HRVRfVFVORVJfU1RBVFVTIH07CisJaW50IHJldDsKKworCXJldCA9IGR2Yl91c2JfZ2VuZXJpY19ydyhzdGF0ZS0+ZCwgY21kLCBzaXplb2YoY21kKSwgKHU4ICopJnN0YXR1cywKKwkJCQlzaXplb2Yoc3RhdHVzKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJjaW5lcmd5dDJfZmVfcmVhZF91bmNfYmxvY2tzKCkgRmFpbGVkISAoRXJyb3I9JWQpXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJKnVuYyA9IGxlMzJfdG9fY3B1KHN0YXR1cy51bmNvcnJlY3RlZF9ibG9ja19jb3VudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2luZXJneXQyX2ZlX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkJdTE2ICpzdHJlbmd0aCkKK3sKKwlzdHJ1Y3QgY2luZXJneXQyX2ZlX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBkdmJ0X2dldF9zdGF0dXNfbXNnIHN0YXR1czsKKwljaGFyIGNtZFtdID0geyBDSU5FUkdZVDJfRVAxX0dFVF9UVU5FUl9TVEFUVVMgfTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHZiX3VzYl9nZW5lcmljX3J3KHN0YXRlLT5kLCBjbWQsIHNpemVvZihjbWQpLCAoY2hhciAqKSZzdGF0dXMsCisJCQkJc2l6ZW9mKHN0YXR1cyksIDApOworCWlmIChyZXQgPCAwKSB7CisJCWVycigiY2luZXJneXQyX2ZlX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKCkgRmFpbGVkISIKKwkJCSIgKEVycm9yPSVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJKnN0cmVuZ3RoID0gKDB4ZmZmZiAtIGxlMTZfdG9fY3B1KHN0YXR1cy5nYWluKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2luZXJneXQyX2ZlX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKK3sKKwlzdHJ1Y3QgY2luZXJneXQyX2ZlX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBkdmJ0X2dldF9zdGF0dXNfbXNnIHN0YXR1czsKKwljaGFyIGNtZFtdID0geyBDSU5FUkdZVDJfRVAxX0dFVF9UVU5FUl9TVEFUVVMgfTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHZiX3VzYl9nZW5lcmljX3J3KHN0YXRlLT5kLCBjbWQsIHNpemVvZihjbWQpLCAoY2hhciAqKSZzdGF0dXMsCisJCQkJc2l6ZW9mKHN0YXR1cyksIDApOworCWlmIChyZXQgPCAwKSB7CisJCWVycigiY2luZXJneXQyX2ZlX3JlYWRfc25yKCkgRmFpbGVkISAoRXJyb3I9JWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwkqc25yID0gKHN0YXR1cy5zbnIgPDwgOCkgfCBzdGF0dXMuc25yOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNpbmVyZ3l0Ml9mZV9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNpbmVyZ3l0Ml9mZV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlkZWJfaW5mbygiY2luZXJneXQyX2ZlX3NsZWVwKCkgQ2FsbGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaW5lcmd5dDJfZmVfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICp0dW5lKQoreworCXR1bmUtPm1pbl9kZWxheV9tcyA9IDgwMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaW5lcmd5dDJfZmVfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCit7CisJc3RydWN0IGNpbmVyZ3l0Ml9mZV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgZHZidF9zZXRfcGFyYW1ldGVyc19tc2cgcGFyYW07CisJY2hhciByZXN1bHRbMl07CisJaW50IGVycjsKKworCXBhcmFtLmNtZCA9IENJTkVSR1lUMl9FUDFfU0VUX1RVTkVSX1BBUkFNRVRFUlM7CisJcGFyYW0udHBzID0gY3B1X3RvX2xlMTYoY29tcHV0ZV90cHMoZmVwKSk7CisJcGFyYW0uZnJlcSA9IGNwdV90b19sZTMyKGZlcC0+ZnJlcXVlbmN5IC8gMTAwMCk7CisJcGFyYW0uYmFuZHdpZHRoID0gOCAtIGZlcC0+dS5vZmRtLmJhbmR3aWR0aCAtIEJBTkRXSURUSF84X01IWjsKKworCWVyciA9IGR2Yl91c2JfZ2VuZXJpY19ydyhzdGF0ZS0+ZCwKKwkJCShjaGFyICopJnBhcmFtLCBzaXplb2YocGFyYW0pLAorCQkJcmVzdWx0LCBzaXplb2YocmVzdWx0KSwgMCk7CisJaWYgKGVyciA8IDApCisJCWVycigiY2luZXJneXQyX2ZlX3NldF9mcm9udGVuZCgpIEZhaWxlZCEgZXJyPSVkXG4iLCBlcnIpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK3N0YXRpYyBpbnQgY2luZXJneXQyX2ZlX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjaW5lcmd5dDJfZmVfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgY2luZXJneXQyX2ZlX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWlmIChzdGF0ZSAhPSBOVUxMKQorCQlrZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBjaW5lcmd5dDJfZmVfb3BzOworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjaW5lcmd5dDJfZmVfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlzdHJ1Y3QgY2luZXJneXQyX2ZlX3N0YXRlICpzID0ga3phbGxvYyhzaXplb2YoCisJCQkJCXN0cnVjdCBjaW5lcmd5dDJfZmVfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAocyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXMtPmQgPSBkOworCW1lbWNweSgmcy0+ZmUub3BzLCAmY2luZXJneXQyX2ZlX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJcy0+ZmUuZGVtb2R1bGF0b3JfcHJpdiA9IHM7CisJcmV0dXJuICZzLT5mZTsKK30KKworCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgY2luZXJneXQyX2ZlX29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUJCQk9IERSSVZFUl9OQU1FLAorCQkudHlwZQkJCT0gRkVfT0ZETSwKKwkJLmZyZXF1ZW5jeV9taW4JCT0gMTc0MDAwMDAwLAorCQkuZnJlcXVlbmN5X21heAkJPSA4NjIwMDAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUJPSAxNjY2NjcsCisJCS5jYXBzID0gRkVfQ0FOX0lOVkVSU0lPTl9BVVRPIHwgRkVfQ0FOX0ZFQ18xXzIKKwkJCXwgRkVfQ0FOX0ZFQ18yXzMgfCBGRV9DQU5fRkVDXzNfNAorCQkJfCBGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfN184CisJCQl8IEZFX0NBTl9GRUNfQVVUTyB8IEZFX0NBTl9RUFNLCisJCQl8IEZFX0NBTl9RQU1fMTYgfCBGRV9DQU5fUUFNXzY0CisJCQl8IEZFX0NBTl9RQU1fQVVUTworCQkJfCBGRV9DQU5fVFJBTlNNSVNTSU9OX01PREVfQVVUTworCQkJfCBGRV9DQU5fR1VBUkRfSU5URVJWQUxfQVVUTworCQkJfCBGRV9DQU5fSElFUkFSQ0hZX0FVVE8KKwkJCXwgRkVfQ0FOX1JFQ09WRVIKKwkJCXwgRkVfQ0FOX01VVEVfVFMKKwl9LAorCisJLnJlbGVhc2UJCT0gY2luZXJneXQyX2ZlX3JlbGVhc2UsCisKKwkuaW5pdAkJCT0gY2luZXJneXQyX2ZlX2luaXQsCisJLnNsZWVwCQkJPSBjaW5lcmd5dDJfZmVfc2xlZXAsCisKKwkuc2V0X2Zyb250ZW5kCQk9IGNpbmVyZ3l0Ml9mZV9zZXRfZnJvbnRlbmQsCisJLmdldF9mcm9udGVuZAkJPSBjaW5lcmd5dDJfZmVfZ2V0X2Zyb250ZW5kLAorCS5nZXRfdHVuZV9zZXR0aW5ncwk9IGNpbmVyZ3l0Ml9mZV9nZXRfdHVuZV9zZXR0aW5ncywKKworCS5yZWFkX3N0YXR1cwkJPSBjaW5lcmd5dDJfZmVfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyCQk9IGNpbmVyZ3l0Ml9mZV9yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGgJPSBjaW5lcmd5dDJfZmVfcmVhZF9zaWduYWxfc3RyZW5ndGgsCisJLnJlYWRfc25yCQk9IGNpbmVyZ3l0Ml9mZV9yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2NrcwkJPSBjaW5lcmd5dDJfZmVfcmVhZF91bmNfYmxvY2tzLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NpbmVyZ3lUMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZDc5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NpbmVyZ3lUMi5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBUZXJyYVRlYyBDaW5lcmd5IFQyL3FhbnUgVVNCMiBEVkItVCBhZGFwdGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUb21pIE9yYXZhICh0b21pbW9AbmNpcmNsZS5udWxsbmV0LmZpKQorICoKKyAqIEJhc2VkIG9uIHRoZSBkdmItdXNiLWZyYW1ld29yayBjb2RlIGFuZCB0aGUKKyAqIG9yaWdpbmFsIFRlcnJhdGVjIENpbmVyZ3kgVDIgZHJpdmVyIGJ5OgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBEYW5pZWwgTWFjayA8ZGFuaWVsQHFhbnUuZGU+IGFuZAorICogICAgICAgICAgICAgICAgICBIb2xnZXIgV2FlY2h0bGVyIDxob2xnZXJAcWFudS5kZT4KKyAqCisgKiAgUHJvdG9jb2wgU3BlYyBwdWJsaXNoZWQgb24gaHR0cDovL3FhbnUuZGUvc3BlY3MvdGVycmF0ZWNfY2luZXJneVQyLnBkZgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsICB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgIEluYy4sICA2NzUgTWFzcyBBdmUsICBDYW1icmlkZ2UsICBNQSAwMjEzOSwgIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfRFZCX1VTQl9DSU5FUkdZVDJfSF8KKyNkZWZpbmUgX0RWQl9VU0JfQ0lORVJHWVQyX0hfCisKKyNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KKworI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImNpbmVyZ3lUMiIKKyNpbmNsdWRlICJkdmItdXNiLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgIlRlcnJhVGVjL3FhbnUgVVNCMi4wIEhpZ2hzcGVlZCBEVkItVCBSZWNlaXZlciIKKworZXh0ZXJuIGludCBkdmJfdXNiX2NpbmVyZ3l0Ml9kZWJ1ZzsKKworI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSAgZHByaW50ayhkdmJfdXNiX2NpbmVyZ3l0Ml9kZWJ1ZywgIDB4MDAxLCBhcmdzKQorI2RlZmluZSBkZWJfeGZlcihhcmdzLi4uKSAgZHByaW50ayhkdmJfdXNiX2NpbmVyZ3l0Ml9kZWJ1ZywgIDB4MDAyLCBhcmdzKQorI2RlZmluZSBkZWJfcGxsKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2NpbmVyZ3l0Ml9kZWJ1ZywgIDB4MDA0LCBhcmdzKQorI2RlZmluZSBkZWJfdHMoYXJncy4uLikgICAgZHByaW50ayhkdmJfdXNiX2NpbmVyZ3l0Ml9kZWJ1ZywgIDB4MDA4LCBhcmdzKQorI2RlZmluZSBkZWJfZXJyKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2NpbmVyZ3l0Ml9kZWJ1ZywgIDB4MDEwLCBhcmdzKQorI2RlZmluZSBkZWJfcmMoYXJncy4uLikgICAgZHByaW50ayhkdmJfdXNiX2NpbmVyZ3l0Ml9kZWJ1ZywgIDB4MDIwLCBhcmdzKQorI2RlZmluZSBkZWJfZncoYXJncy4uLikgICAgZHByaW50ayhkdmJfdXNiX2NpbmVyZ3l0Ml9kZWJ1ZywgIDB4MDQwLCBhcmdzKQorI2RlZmluZSBkZWJfbWVtKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2NpbmVyZ3l0Ml9kZWJ1ZywgIDB4MDgwLCBhcmdzKQorI2RlZmluZSBkZWJfdXhmZXIoYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2NpbmVyZ3l0Ml9kZWJ1ZywgIDB4MTAwLCBhcmdzKQorCisKKworZW51bSBjaW5lcmd5dDJfZXAxX2NtZCB7CisJQ0lORVJHWVQyX0VQMV9QSURfVEFCTEVfUkVTRVQJCT0gMHgwMSwKKwlDSU5FUkdZVDJfRVAxX1BJRF9TRVRVUAkJCT0gMHgwMiwKKwlDSU5FUkdZVDJfRVAxX0NPTlRST0xfU1RSRUFNX1RSQU5TRkVSCT0gMHgwMywKKwlDSU5FUkdZVDJfRVAxX1NFVF9UVU5FUl9QQVJBTUVURVJTCT0gMHgwNCwKKwlDSU5FUkdZVDJfRVAxX0dFVF9UVU5FUl9TVEFUVVMJCT0gMHgwNSwKKwlDSU5FUkdZVDJfRVAxX1NUQVJUX1NDQU4JCT0gMHgwNiwKKwlDSU5FUkdZVDJfRVAxX0NPTlRJTlVFX1NDQU4JCT0gMHgwNywKKwlDSU5FUkdZVDJfRVAxX0dFVF9SQ19FVkVOVFMJCT0gMHgwOCwKKwlDSU5FUkdZVDJfRVAxX1NMRUVQX01PREUJCT0gMHgwOSwKKwlDSU5FUkdZVDJfRVAxX0dFVF9GSVJNV0FSRV9WRVJTSU9OCT0gMHgwQQorfTsKKworCitzdHJ1Y3QgZHZidF9nZXRfc3RhdHVzX21zZyB7CisJdWludDMyX3QgZnJlcTsKKwl1aW50OF90IGJhbmR3aWR0aDsKKwl1aW50MTZfdCB0cHM7CisJdWludDhfdCBmbGFnczsKKwl1aW50MTZfdCBnYWluOworCXVpbnQ4X3Qgc25yOworCXVpbnQzMl90IHZpdGVyYmlfZXJyb3JfcmF0ZTsKKwl1aW50MzJfdCByc19lcnJvcl9yYXRlOworCXVpbnQzMl90IHVuY29ycmVjdGVkX2Jsb2NrX2NvdW50OworCXVpbnQ4X3QgbG9ja19iaXRzOworCXVpbnQ4X3QgcHJldl9sb2NrX2JpdHM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKK3N0cnVjdCBkdmJ0X3NldF9wYXJhbWV0ZXJzX21zZyB7CisJdWludDhfdCBjbWQ7CisJdWludDMyX3QgZnJlcTsKKwl1aW50OF90IGJhbmR3aWR0aDsKKwl1aW50MTZfdCB0cHM7CisJdWludDhfdCBmbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmNpbmVyZ3l0Ml9mZV9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKTsKKworI2VuZGlmIC8qIF9EVkJfVVNCX0NJTkVSR1lUMl9IXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKaW5kZXggNTYzNDAwMi4uNDA2ZDdmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwpAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgogI2luY2x1ZGUgInR1bmVyLXNpbXBsZS5oIgogI2luY2x1ZGUgIm14bDUwMDVzLmgiCisjaW5jbHVkZSAiZGliNzAwMHAuaCIKKyNpbmNsdWRlICJkaWIwMDcwLmgiCisjaW5jbHVkZSAibGdzOGdsNS5oIgogCiAvKiBkZWJ1ZyAqLwogc3RhdGljIGludCBkdmJfdXNiX2N4dXNiX2RlYnVnOwpAQCAtMTA5LDYgKzExMiwyNSBAQAogCWN4dXNiX2JsdWViaXJkX2dwaW9fcncoZCwgMHg0MCwgb25vZmYgPyAwIDogMHg0MCk7CiB9CiAKK3N0YXRpYyBpbnQgY3h1c2JfZDY4MF9kbWJfZ3Bpb190dW5lcihzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsCisJCXU4IGFkZHIsIGludCBvbm9mZikKK3sKKwl1OCAgb1syXSA9IHthZGRyLCBvbm9mZn07CisJdTggIGk7CisJaW50IHJjOworCisJcmMgPSBjeHVzYl9jdHJsX21zZyhkLCBDTURfR1BJT19XUklURSwgbywgMiwgJmksIDEpOworCisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCWlmIChpID09IDB4MDEpCisJCXJldHVybiAwOworCWVsc2UgeworCQlkZWJfaW5mbygiZ3Bpb193cml0ZSBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorfQorCiAvKiBJMkMgKi8KIHN0YXRpYyBpbnQgY3h1c2JfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dbXSwKIAkJCSAgaW50IG51bSkKQEAgLTI2Miw2ICsyODQsMjAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgY3h1c2JfZDY4MF9kbWJfcG93ZXJfY3RybChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGludCBvbm9mZikKK3sKKwlpbnQgcmV0OworCXU4ICBiOworCXJldCA9IGN4dXNiX3Bvd2VyX2N0cmwoZCwgb25vZmYpOworCWlmICghb25vZmYpCisJCXJldHVybiByZXQ7CisKKwltc2xlZXAoMTI4KTsKKwljeHVzYl9jdHJsX21zZyhkLCBDTURfRElHSVRBTCwgTlVMTCwgMCwgJmIsIDEpOworCW1zbGVlcCgxMDApOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgY3h1c2Jfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQogewogCXU4IGJ1ZlsyXSA9IHsgMHgwMywgMHgwMCB9OwpAQCAtMjgzLDYgKzMxOSw2NyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBjeHVzYl9kNjgwX2RtYl9kcmFpbl9tZXNzYWdlKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlpbnQgICAgICAgZXAgPSBkLT5wcm9wcy5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludDsKKwljb25zdCBpbnQgdGltZW91dCA9IDEwMDsKKwljb25zdCBpbnQganVua19sZW4gPSAzMjsKKwl1OCAgICAgICAgKmp1bms7CisJaW50ICAgICAgIHJkX2NvdW50OworCisJLyogRGlzY2FyZCByZW1haW5pbmcgZGF0YSBpbiB2aWRlbyBwaXBlICovCisJanVuayA9IGttYWxsb2MoanVua19sZW4sIEdGUF9LRVJORUwpOworCWlmICghanVuaykKKwkJcmV0dXJuOworCXdoaWxlICgxKSB7CisJCWlmICh1c2JfYnVsa19tc2coZC0+dWRldiwKKwkJCXVzYl9yY3ZidWxrcGlwZShkLT51ZGV2LCBlcCksCisJCQlqdW5rLCBqdW5rX2xlbiwgJnJkX2NvdW50LCB0aW1lb3V0KSA8IDApCisJCQlicmVhazsKKwkJaWYgKCFyZF9jb3VudCkKKwkJCWJyZWFrOworCX0KKwlrZnJlZShqdW5rKTsKK30KKworc3RhdGljIHZvaWQgY3h1c2JfZDY4MF9kbWJfZHJhaW5fdmlkZW8oc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoreworCXN0cnVjdCB1c2JfZGF0YV9zdHJlYW1fcHJvcGVydGllcyAqcCA9ICZkLT5wcm9wcy5hZGFwdGVyWzBdLnN0cmVhbTsKKwljb25zdCBpbnQgdGltZW91dCA9IDEwMDsKKwljb25zdCBpbnQganVua19sZW4gPSBwLT51LmJ1bGsuYnVmZmVyc2l6ZTsKKwl1OCAgICAgICAgKmp1bms7CisJaW50ICAgICAgIHJkX2NvdW50OworCisJLyogRGlzY2FyZCByZW1haW5pbmcgZGF0YSBpbiB2aWRlbyBwaXBlICovCisJanVuayA9IGttYWxsb2MoanVua19sZW4sIEdGUF9LRVJORUwpOworCWlmICghanVuaykKKwkJcmV0dXJuOworCXdoaWxlICgxKSB7CisJCWlmICh1c2JfYnVsa19tc2coZC0+dWRldiwKKwkJCXVzYl9yY3ZidWxrcGlwZShkLT51ZGV2LCBwLT5lbmRwb2ludCksCisJCQlqdW5rLCBqdW5rX2xlbiwgJnJkX2NvdW50LCB0aW1lb3V0KSA8IDApCisJCQlicmVhazsKKwkJaWYgKCFyZF9jb3VudCkKKwkJCWJyZWFrOworCX0KKwlrZnJlZShqdW5rKTsKK30KKworc3RhdGljIGludCBjeHVzYl9kNjgwX2RtYl9zdHJlYW1pbmdfY3RybCgKKwkJc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQoreworCWlmIChvbm9mZikgeworCQl1OCBidWZbMl0gPSB7IDB4MDMsIDB4MDAgfTsKKwkJY3h1c2JfZDY4MF9kbWJfZHJhaW5fdmlkZW8oYWRhcC0+ZGV2KTsKKwkJcmV0dXJuIGN4dXNiX2N0cmxfbXNnKGFkYXAtPmRldiwgQ01EX1NUUkVBTUlOR19PTiwKKwkJCWJ1Ziwgc2l6ZW9mKGJ1ZiksIE5VTEwsIDApOworCX0gZWxzZSB7CisJCWludCByZXQgPSBjeHVzYl9jdHJsX21zZyhhZGFwLT5kZXYsCisJCQlDTURfU1RSRUFNSU5HX09GRiwgTlVMTCwgMCwgTlVMTCwgMCk7CisJCXJldHVybiByZXQ7CisJfQorfQorCiBzdGF0aWMgaW50IGN4dXNiX3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleW1hcCA9IGQtPnByb3BzLnJjX2tleV9tYXA7CkBAIC0zMzUsNiArNDMyLDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY3h1c2JfZDY4MF9kbWJfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LAorCQlpbnQgKnN0YXRlKQoreworCXN0cnVjdCBkdmJfdXNiX3JjX2tleSAqa2V5bWFwID0gZC0+cHJvcHMucmNfa2V5X21hcDsKKwl1OCBpcmNvZGVbMl07CisJaW50IGk7CisKKwkqZXZlbnQgPSAwOworCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKKworCWlmIChjeHVzYl9jdHJsX21zZyhkLCAweDEwLCBOVUxMLCAwLCBpcmNvZGUsIDIpIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKKwkJaWYgKGtleW1hcFtpXS5jdXN0b20gPT0gaXJjb2RlWzBdICYmCisJCSAgICBrZXltYXBbaV0uZGF0YSA9PSBpcmNvZGVbMV0pIHsKKwkJCSpldmVudCA9IGtleW1hcFtpXS5ldmVudDsKKwkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBkdmljb19tY2VfcmNfa2V5c1tdID0gewogCXsgMHhmZSwgMHgwMiwgS0VZX1RWIH0sCiAJeyAweGZlLCAweDBlLCBLRVlfTVAzIH0sCkBAIC00MjIsNiArNTQ1LDQ0IEBACiAJeyAweGZjLCAweDAwLCBLRVlfVU5LTk9XTiB9LCAgICAvKiBIRCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBkNjgwX2RtYl9yY19rZXlzW10gPSB7CisJeyAweDAwLCAweDM4LCBLRVlfVU5LTk9XTiB9LAkvKiBUVi9BViAqLworCXsgMHgwOCwgMHgwYywgS0VZX1pPT00gfSwKKwl7IDB4MDgsIDB4MDAsIEtFWV8wIH0sCisJeyAweDAwLCAweDAxLCBLRVlfMSB9LAorCXsgMHgwOCwgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MDAsIDB4MDMsIEtFWV8zIH0sCisJeyAweDA4LCAweDA0LCBLRVlfNCB9LAorCXsgMHgwMCwgMHgwNSwgS0VZXzUgfSwKKwl7IDB4MDgsIDB4MDYsIEtFWV82IH0sCisJeyAweDAwLCAweDA3LCBLRVlfNyB9LAorCXsgMHgwOCwgMHgwOCwgS0VZXzggfSwKKwl7IDB4MDAsIDB4MDksIEtFWV85IH0sCisJeyAweDAwLCAweDBhLCBLRVlfTVVURSB9LAorCXsgMHgwOCwgMHgyOSwgS0VZX0JBQ0sgfSwKKwl7IDB4MDAsIDB4MTIsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDgsIDB4MTMsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwMCwgMHgyYiwgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDA4LCAweDJjLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMCwgMHgyMCwgS0VZX1VQIH0sCisJeyAweDA4LCAweDIxLCBLRVlfRE9XTiB9LAorCXsgMHgwMCwgMHgxMSwgS0VZX0xFRlQgfSwKKwl7IDB4MDgsIDB4MTAsIEtFWV9SSUdIVCB9LAorCXsgMHgwMCwgMHgwZCwgS0VZX09LIH0sCisJeyAweDA4LCAweDFmLCBLRVlfUkVDT1JEIH0sCisJeyAweDAwLCAweDE3LCBLRVlfUExBWVBBVVNFIH0sCisJeyAweDA4LCAweDE2LCBLRVlfUExBWVBBVVNFIH0sCisJeyAweDAwLCAweDBiLCBLRVlfU1RPUCB9LAorCXsgMHgwOCwgMHgyNywgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDAwLCAweDI2LCBLRVlfUkVXSU5EIH0sCisJeyAweDA4LCAweDFlLCBLRVlfVU5LTk9XTiB9LCAgICAvKiBUaW1lIFNoaWZ0ICovCisJeyAweDAwLCAweDBlLCBLRVlfVU5LTk9XTiB9LCAgICAvKiBTbmFwc2hvdCAqLworCXsgMHgwOCwgMHgyZCwgS0VZX1VOS05PV04gfSwgICAgLyogTW91c2UgQ3Vyc29yICovCisJeyAweDAwLCAweDBmLCBLRVlfVU5LTk9XTiB9LCAgICAvKiBNaW5pbWl6ZS9NYXhpbWl6ZSAqLworCXsgMHgwOCwgMHgxNCwgS0VZX1VOS05PV04gfSwgICAgLyogU2h1ZmZsZSAqLworCXsgMHgwMCwgMHgyNSwgS0VZX1BPV0VSIH0sCit9OworCiBzdGF0aWMgaW50IGN4dXNiX2RlZTE2MDFfZGVtb2RfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKIHsKIAlzdGF0aWMgdTggY2xvY2tfY29uZmlnIFtdICA9IHsgQ0xPQ0tfQ1RMLCAgMHgzOCwgMHgyOCB9OwpAQCAtNTI3LDYgKzY4OCwyNCBAQAogCS5BZ2NNYXN0ZXJCeXRlICAgPSAweDAwLAogfTsKIAorLyogRklYTUU6IG5lZWRzIHR3ZWFraW5nICovCitzdGF0aWMgc3RydWN0IG14bDUwMDVzX2NvbmZpZyBkNjgwX2RtYl90dW5lciA9IHsKKwkuaTJjX2FkZHJlc3MgICAgID0gMHg2MywKKwkuaWZfZnJlcSAgICAgICAgID0gMzYxMjUwMDBVTCwKKwkueHRhbF9mcmVxICAgICAgID0gQ1JZU1RBTF9GUkVRXzE2MDAwMDAwSFosCisJLmFnY19tb2RlICAgICAgICA9IE1YTF9TSU5HTEVfQUdDLAorCS50cmFja2luZ19maWx0ZXIgPSBNWExfVEZfQywKKwkucnNzaV9lbmFibGUgICAgID0gTVhMX1JTU0lfRU5BQkxFLAorCS5jYXBfc2VsZWN0ICAgICAgPSBNWExfQ0FQX1NFTF9FTkFCTEUsCisJLmRpdl9vdXQgICAgICAgICA9IE1YTF9ESVZfT1VUXzQsCisJLmNsb2NrX291dCAgICAgICA9IE1YTF9DTE9DS19PVVRfRElTQUJMRSwKKwkub3V0cHV0X2xvYWQgICAgID0gTVhMNTAwNVNfSUZfT1VUUFVUX0xPQURfMjAwX09ITSwKKwkudG9wCQkgPSBNWEw1MDA1U19UT1BfMjVQMiwKKwkubW9kX21vZGUgICAgICAgID0gTVhMX0RJR0lUQUxfTU9ERSwKKwkuaWZfbW9kZSAgICAgICAgID0gTVhMX1pFUk9fSUYsCisJLkFnY01hc3RlckJ5dGUgICA9IDB4MDAsCit9OworCiAvKiBDYWxsYmFja3MgZm9yIERWQiBVU0IgKi8KIHN0YXRpYyBpbnQgY3h1c2JfZm1kMTIxNm1lX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewpAQCAtNTYzLDcgKzc0Miw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHZpY29fYmx1ZWJpcmRfeGMyMDI4X2NhbGxiYWNrKHZvaWQgKnB0ciwgaW50IGNvbW1hbmQsIGludCBhcmcpCitzdGF0aWMgaW50IGR2aWNvX2JsdWViaXJkX3hjMjAyOF9jYWxsYmFjayh2b2lkICpwdHIsIGludCBjb21wb25lbnQsCisJCQkJCSAgaW50IGNvbW1hbmQsIGludCBhcmcpCiB7CiAJc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCA9IHB0cjsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBhZGFwLT5kZXY7CkBAIC01OTEsMTQgKzc3MSwxNiBAQAogCXN0cnVjdCB4YzIwMjhfY29uZmlnCSAgY2ZnID0gewogCQkuaTJjX2FkYXAgID0gJmFkYXAtPmRldi0+aTJjX2FkYXAsCiAJCS5pMmNfYWRkciAgPSAweDYxLAotCQkuY2FsbGJhY2sgID0gZHZpY29fYmx1ZWJpcmRfeGMyMDI4X2NhbGxiYWNrLAogCX07CiAJc3RhdGljIHN0cnVjdCB4YzIwMjhfY3RybCBjdGwgPSB7Ci0JCS5mbmFtZSAgICAgICA9ICJ4YzMwMjgtdjI3LmZ3IiwKKwkJLmZuYW1lICAgICAgID0gWEMyMDI4X0RFRkFVTFRfRklSTVdBUkUsCiAJCS5tYXhfbGVuICAgICA9IDY0LAogCQkuZGVtb2QgICAgICAgPSBYQzMwMjhfRkVfWkFSTElOSzQ1NiwKIAl9OwogCisJLyogRklYTUU6IGdlbmVyYWxpemUgJiBtb3ZlIHRvIGNvbW1vbiBhcmVhICovCisJYWRhcC0+ZmUtPmNhbGxiYWNrID0gZHZpY29fYmx1ZWJpcmRfeGMyMDI4X2NhbGxiYWNrOworCiAJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsIGFkYXAtPmZlLCAmY2ZnKTsKIAlpZiAoZmUgPT0gTlVMTCB8fCBmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwpAQCAtNjE1LDYgKzc5NywxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGN4dXNiX2Q2ODBfZG1iX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOworCWZlID0gZHZiX2F0dGFjaChteGw1MDA1c19hdHRhY2gsIGFkYXAtPmZlLAorCQkJJmFkYXAtPmRldi0+aTJjX2FkYXAsICZkNjgwX2RtYl90dW5lcik7CisJcmV0dXJuIChmZSA9PSBOVUxMKSA/IC1FSU8gOiAwOworfQorCiBzdGF0aWMgaW50IGN4dXNiX2N4MjI3MDJfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7CiAJdTggYjsKQEAgLTcyNiw2ICs5MTYsMTU5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnIGRpYjcwNzBfYWdjX2NvbmZpZyA9IHsKKwkuYmFuZF9jYXBzID0gQkFORF9VSEYgfCBCQU5EX1ZIRiB8IEJBTkRfTEJBTkQgfCBCQU5EX1NCQU5ELAorCisJLyoKKwkgKiBQX2FnY191c2Vfc2RfbW9kMT0wLCBQX2FnY191c2Vfc2RfbW9kMj0wLCBQX2FnY19mcmVxX3B3bV9kaXY9NSwKKwkgKiBQX2FnY19pbnZfcHdtMT0wLCBQX2FnY19pbnZfcHdtMj0wLCBQX2FnY19pbmhfZGNfcnZfZXN0PTAsCisJICogUF9hZ2NfdGltZV9lc3Q9MywgUF9hZ2NfZnJlZXplPTAsIFBfYWdjX25iX2VzdD01LCBQX2FnY193cml0ZT0wCisJICovCisJLnNldHVwID0gKDAgPDwgMTUpIHwgKDAgPDwgMTQpIHwgKDUgPDwgMTEpIHwgKDAgPDwgMTApIHwgKDAgPDwgOSkgfAorCQkgKDAgPDwgOCkgfCAoMyA8PCA1KSB8ICgwIDw8IDQpIHwgKDUgPDwgMSkgfCAoMCA8PCAwKSwKKwkuaW52X2dhaW4gPSA2MDAsCisJLnRpbWVfc3RhYmlsaXogPSAxMCwKKwkuYWxwaGFfbGV2ZWwgPSAwLAorCS50aGxvY2sgPSAxMTgsCisJLndiZF9pbnYgPSAwLAorCS53YmRfcmVmID0gMzUzMCwKKwkud2JkX3NlbCA9IDEsCisJLndiZF9hbHBoYSA9IDUsCisJLmFnYzFfbWF4ID0gNjU1MzUsCisJLmFnYzFfbWluID0gMCwKKwkuYWdjMl9tYXggPSA2NTUzNSwKKwkuYWdjMl9taW4gPSAwLAorCS5hZ2MxX3B0MSA9IDAsCisJLmFnYzFfcHQyID0gNDAsCisJLmFnYzFfcHQzID0gMTgzLAorCS5hZ2MxX3Nsb3BlMSA9IDIwNiwKKwkuYWdjMV9zbG9wZTIgPSAyNTUsCisJLmFnYzJfcHQxID0gNzIsCisJLmFnYzJfcHQyID0gMTUyLAorCS5hZ2MyX3Nsb3BlMSA9IDg4LAorCS5hZ2MyX3Nsb3BlMiA9IDkwLAorCS5hbHBoYV9tYW50ID0gMTcsCisJLmFscGhhX2V4cCA9IDI3LAorCS5iZXRhX21hbnQgPSAyMywKKwkuYmV0YV9leHAgPSA1MSwKKwkucGVyZm9ybV9hZ2Nfc29mdHNwbGl0ID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGlieDAwMF9iYW5kd2lkdGhfY29uZmlnIGRpYjcwNzBfYndfY29uZmlnXzEyX21oeiA9IHsKKwkuaW50ZXJuYWwgPSA2MDAwMCwKKwkuc2FtcGxpbmcgPSAxNTAwMCwKKwkucGxsX3ByZWRpdiA9IDEsCisJLnBsbF9yYXRpbyA9IDIwLAorCS5wbGxfcmFuZ2UgPSAzLAorCS5wbGxfcmVzZXQgPSAxLAorCS5wbGxfYnlwYXNzID0gMCwKKwkuZW5hYmxlX3JlZmRpdiA9IDAsCisJLmJ5cGNsa19kaXYgPSAwLAorCS5JT19DTEtfZW5fY29yZSA9IDEsCisJLkFEQ2xrU3JjID0gMSwKKwkubW9kdWxvID0gMiwKKwkvKiByZWZzZWwsIHNlbCwgZnJlcV8xNWsgKi8KKwkuc2FkX2NmZyA9ICgzIDw8IDE0KSB8ICgxIDw8IDEyKSB8ICg1MjQgPDwgMCksCisJLmlmcmVxID0gKDAgPDwgMjUpIHwgMCwKKwkudGltZiA9IDIwNDUyMjI1LAorCS54dGFsX2h6ID0gMTIwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyBjeHVzYl9kdWFsZGlnNF9yZXYyX2NvbmZpZyA9IHsKKwkub3V0cHV0X21vZGUgPSBPVVRNT0RFX01QRUcyX1BBUl9HQVRFRF9DTEssCisJLm91dHB1dF9tcGVnMl9pbl8xODhfYnl0ZXMgPSAxLAorCisJLmFnY19jb25maWdfY291bnQgPSAxLAorCS5hZ2MgPSAmZGliNzA3MF9hZ2NfY29uZmlnLAorCS5idyAgPSAmZGliNzA3MF9id19jb25maWdfMTJfbWh6LAorCS50dW5lcl9pc19iYXNlYmFuZCA9IDEsCisJLnNwdXJfcHJvdGVjdCA9IDEsCisKKwkuZ3Bpb19kaXIgPSAweGZjZWYsCisJLmdwaW9fdmFsID0gMHgwMTEwLAorCisJLmdwaW9fcHdtX3BvcyA9IERJQjcwMDBQX0dQSU9fREVGQVVMVF9QV01fUE9TLAorCisJLmhvc3RidXNfZGl2ZXJzaXR5ID0gMSwKK307CisKK3N0YXRpYyBpbnQgY3h1c2JfZHVhbGRpZzRfcmV2Ml9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlpZiAodXNiX3NldF9pbnRlcmZhY2UoYWRhcC0+ZGV2LT51ZGV2LCAwLCAxKSA8IDApCisJCWVycigic2V0IGludGVyZmFjZSBmYWlsZWQiKTsKKworCWN4dXNiX2N0cmxfbXNnKGFkYXAtPmRldiwgQ01EX0RJR0lUQUwsIE5VTEwsIDAsIE5VTEwsIDApOworCisJY3h1c2JfYmx1ZWJpcmRfZ3Bpb19wdWxzZShhZGFwLT5kZXYsIDB4MDIsIDEpOworCisJZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAxLCAxOCwKKwkJCQkgJmN4dXNiX2R1YWxkaWc0X3JldjJfY29uZmlnKTsKKworCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI3MDAwcF9hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDgwLAorCQkJICAgICAgJmN4dXNiX2R1YWxkaWc0X3JldjJfY29uZmlnKTsKKwlpZiAoYWRhcC0+ZmUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWI3MDcwX3R1bmVyX3Jlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgb25vZmYpCit7CisJcmV0dXJuIGRpYjcwMDBwX3NldF9ncGlvKGZlLCA4LCAwLCAhb25vZmYpOworfQorCitzdGF0aWMgaW50IGRpYjcwNzBfdHVuZXJfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBvbm9mZikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyBkaWI3MDcwcF9kaWIwMDcwX2NvbmZpZyA9IHsKKwkuaTJjX2FkZHJlc3MgPSBERUZBVUxUX0RJQjAwNzBfSTJDX0FERFJFU1MsCisJLnJlc2V0ID0gZGliNzA3MF90dW5lcl9yZXNldCwKKwkuc2xlZXAgPSBkaWI3MDcwX3R1bmVyX3NsZWVwLAorCS5jbG9ja19raHogPSAxMjAwMCwKK307CisKK3N0cnVjdCBkaWIwNzAwX2FkYXB0ZXJfc3RhdGUgeworCWludCAoKnNldF9wYXJhbV9zYXZlKSAoc3RydWN0IGR2Yl9mcm9udGVuZCAqLAorCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqKTsKK307CisKK3N0YXRpYyBpbnQgZGliNzA3MF9zZXRfcGFyYW1fb3ZlcnJpZGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCit7CisJc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCA9IGZlLT5kdmItPnByaXY7CisJc3RydWN0IGRpYjA3MDBfYWRhcHRlcl9zdGF0ZSAqc3RhdGUgPSBhZGFwLT5wcml2OworCisJdTE2IG9mZnNldDsKKwl1OCBiYW5kID0gQkFORF9PRl9GUkVRVUVOQ1koZmVwLT5mcmVxdWVuY3kvMTAwMCk7CisJc3dpdGNoIChiYW5kKSB7CisJY2FzZSBCQU5EX1ZIRjogb2Zmc2V0ID0gOTUwOyBicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgQkFORF9VSEY6IG9mZnNldCA9IDU1MDsgYnJlYWs7CisJfQorCisJZGliNzAwMHBfc2V0X3diZF9yZWYoZmUsIG9mZnNldCArIGRpYjAwNzBfd2JkX29mZnNldChmZSkpOworCisJcmV0dXJuIHN0YXRlLT5zZXRfcGFyYW1fc2F2ZShmZSwgZmVwKTsKK30KKworc3RhdGljIGludCBjeHVzYl9kdWFsZGlnNF9yZXYyX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBkaWIwNzAwX2FkYXB0ZXJfc3RhdGUgKnN0ID0gYWRhcC0+cHJpdjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKnR1bl9pMmMgPQorCQlkaWI3MDAwcF9nZXRfaTJjX21hc3RlcihhZGFwLT5mZSwKKwkJCQkJRElCWDAwMF9JMkNfSU5URVJGQUNFX1RVTkVSLCAxKTsKKworCWlmIChkdmJfYXR0YWNoKGRpYjAwNzBfYXR0YWNoLCBhZGFwLT5mZSwgdHVuX2kyYywKKwkgICAgJmRpYjcwNzBwX2RpYjAwNzBfY29uZmlnKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN0LT5zZXRfcGFyYW1fc2F2ZSA9IGFkYXAtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXM7CisJYWRhcC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGRpYjcwNzBfc2V0X3BhcmFtX292ZXJyaWRlOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGN4dXNiX25hbm8yX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewogCWlmICh1c2Jfc2V0X2ludGVyZmFjZShhZGFwLT5kZXYtPnVkZXYsIDAsIDEpIDwgMCkKQEAgLTc1MSw2ICsxMDk0LDU0IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbGdzOGdsNV9jb25maWcgbGdzOGdsNV9jZmcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDE5LAorfTsKKworc3RhdGljIGludCBjeHVzYl9kNjgwX2RtYl9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBhZGFwLT5kZXY7CisJaW50IG47CisKKwkvKiBTZWxlY3QgcmVxdWlyZWQgVVNCIGNvbmZpZ3VyYXRpb24gKi8KKwlpZiAodXNiX3NldF9pbnRlcmZhY2UoZC0+dWRldiwgMCwgMCkgPCAwKQorCQllcnIoInNldCBpbnRlcmZhY2UgZmFpbGVkIik7CisKKwkvKiBVbmJsb2NrIGFsbCBVU0IgcGlwZXMgKi8KKwl1c2JfY2xlYXJfaGFsdChkLT51ZGV2LAorCQl1c2Jfc25kYnVsa3BpcGUoZC0+dWRldiwgZC0+cHJvcHMuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQpKTsKKwl1c2JfY2xlYXJfaGFsdChkLT51ZGV2LAorCQl1c2JfcmN2YnVsa3BpcGUoZC0+dWRldiwgZC0+cHJvcHMuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQpKTsKKwl1c2JfY2xlYXJfaGFsdChkLT51ZGV2LAorCQl1c2JfcmN2YnVsa3BpcGUoZC0+dWRldiwgZC0+cHJvcHMuYWRhcHRlclswXS5zdHJlYW0uZW5kcG9pbnQpKTsKKworCS8qIERyYWluIFVTQiBwaXBlcyB0byBhdm9pZCBoYW5nIGFmdGVyIHJlYm9vdCAqLworCWZvciAobiA9IDA7ICBuIDwgNTsgIG4rKykgeworCQljeHVzYl9kNjgwX2RtYl9kcmFpbl9tZXNzYWdlKGQpOworCQljeHVzYl9kNjgwX2RtYl9kcmFpbl92aWRlbyhkKTsKKwkJbXNsZWVwKDIwMCk7CisJfQorCisJLyogUmVzZXQgdGhlIHR1bmVyICovCisJaWYgKGN4dXNiX2Q2ODBfZG1iX2dwaW9fdHVuZXIoZCwgMHgwNywgMCkgPCAwKSB7CisJCWVycigiY2xlYXIgdHVuZXIgZ3BpbyBmYWlsZWQiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCW1zbGVlcCgxMDApOworCWlmIChjeHVzYl9kNjgwX2RtYl9ncGlvX3R1bmVyKGQsIDB4MDcsIDEpIDwgMCkgeworCQllcnIoInNldCB0dW5lciBncGlvIGZhaWxlZCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJbXNsZWVwKDEwMCk7CisKKwkvKiBBdHRhY2ggZnJvbnRlbmQgKi8KKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2gobGdzOGdsNV9hdHRhY2gsICZsZ3M4Z2w1X2NmZywgJmQtPmkyY19hZGFwKTsKKwlpZiAoYWRhcC0+ZmUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIERWaUNPIGhhcyBzaGlwcGVkIHR3byBkZXZpY2VzIHdpdGggdGhlIHNhbWUgVVNCIElELCBidXQgb25seSBvbmUgb2YgdGhlbQogICogbmVlZHMgYSBmaXJtd2FyZSBkb3dubG9hZC4gIENoZWNrIHRoZSBkZXZpY2UgY2xhc3MgZGV0YWlscyB0byBzZWUgaWYgdGhleQpAQCAtODI2LDkgKzEyMTcsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjeHVzYl9ibHVlYmlyZF9sZ3oyMDFfcHJvcGVydGllczsKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjeHVzYl9ibHVlYmlyZF9kdHQ3NTc5X3Byb3BlcnRpZXM7CiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY3h1c2JfYmx1ZWJpcmRfZHVhbGRpZzRfcHJvcGVydGllczsKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjeHVzYl9ibHVlYmlyZF9kdWFsZGlnNF9yZXYyX3Byb3BlcnRpZXM7CiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY3h1c2JfYmx1ZWJpcmRfbmFubzJfcHJvcGVydGllczsKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjeHVzYl9ibHVlYmlyZF9uYW5vMl9uZWVkc2Zpcm13YXJlX3Byb3BlcnRpZXM7CiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY3h1c2JfYXZlcl9hODY4cl9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX2Q2ODBfZG1iX3Byb3BlcnRpZXM7CiAKIHN0YXRpYyBpbnQgY3h1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC04NTIsNiArMTI0NSwxMSBAQAogCQkJCSAgICAgVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpIHx8CiAJICAgIDAgPT0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmY3h1c2JfYXZlcl9hODY4cl9wcm9wZXJ0aWVzLAogCQkJCSAgICAgVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpIHx8CisJICAgIDAgPT0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLAorCQkJCSAgICAgJmN4dXNiX2JsdWViaXJkX2R1YWxkaWc0X3JldjJfcHJvcGVydGllcywKKwkJCQkgICAgIFRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAorCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmN4dXNiX2Q2ODBfZG1iX3Byb3BlcnRpZXMsCisJCQkJICAgICBUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikgfHwKIAkgICAgMCkKIAkJcmV0dXJuIDA7CiAKQEAgLTg3Niw2ICsxMjc0LDggQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVkJfVF9OQU5PXzIpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFZCX1RfTkFOT18yX05GV19XQVJNKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX0FWRVJNRURJQSwgVVNCX1BJRF9BVkVSTUVESUFfVk9MQVJfQTg2OFIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfRFZJQ08sIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFVBTF80X1JFVl8yKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX0NPTkVYQU5ULCBVU0JfUElEX0NPTkVYQU5UX0Q2ODBfRE1CKSB9LAogCXt9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgY3h1c2JfdGFibGUpOwpAQCAtMTMyMSw2ICsxNzIxLDEwNCBAQAogCX0KIH07CiAKK3N0YXRpYworc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY3h1c2JfYmx1ZWJpcmRfZHVhbGRpZzRfcmV2Ml9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKworCS51c2JfY3RybCAgICAgICAgID0gQ1lQUkVTU19GWDIsCisKKwkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgY3h1c2Jfc3RhdGUpLAorCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKKwkJCS5zdHJlYW1pbmdfY3RybCAgPSBjeHVzYl9zdHJlYW1pbmdfY3RybCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggPSBjeHVzYl9kdWFsZGlnNF9yZXYyX2Zyb250ZW5kX2F0dGFjaCwKKwkJCS50dW5lcl9hdHRhY2ggICAgPSBjeHVzYl9kdWFsZGlnNF9yZXYyX3R1bmVyX2F0dGFjaCwKKwkJCS5zaXplX29mX3ByaXYgICAgPSBzaXplb2Yoc3RydWN0IGRpYjA3MDBfYWRhcHRlcl9zdGF0ZSksCisJCQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJLmNvdW50ID0gNywKKwkJCQkuZW5kcG9pbnQgPSAweDAyLAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCisJCX0sCisJfSwKKworCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfYmx1ZWJpcmRfcG93ZXJfY3RybCwKKworCS5pMmNfYWxnbyAgICAgICAgID0gJmN4dXNiX2kyY19hbGdvLAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKKworCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAorCS5yY19rZXlfbWFwICAgICAgID0gZHZpY29fbWNlX3JjX2tleXMsCisJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGR2aWNvX21jZV9yY19rZXlzKSwKKwkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX3JjX3F1ZXJ5LAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7ICAgIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgRHVhbCBEaWdpdGFsIDQgKHJldiAyKSIsCisJCQl7IE5VTEwgfSwKKwkJCXsgJmN4dXNiX3RhYmxlWzE3XSwgTlVMTCB9LAorCQl9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjeHVzYl9kNjgwX2RtYl9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKworCS51c2JfY3RybCAgICAgICAgID0gQ1lQUkVTU19GWDIsCisKKwkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgY3h1c2Jfc3RhdGUpLAorCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKKwkJCS5zdHJlYW1pbmdfY3RybCAgID0gY3h1c2JfZDY4MF9kbWJfc3RyZWFtaW5nX2N0cmwsCisJCQkuZnJvbnRlbmRfYXR0YWNoICA9IGN4dXNiX2Q2ODBfZG1iX2Zyb250ZW5kX2F0dGFjaCwKKwkJCS50dW5lcl9hdHRhY2ggICAgID0gY3h1c2JfZDY4MF9kbWJfdHVuZXJfYXR0YWNoLAorCisJCQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJLmNvdW50ID0gNSwKKwkJCQkuZW5kcG9pbnQgPSAweDAyLAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gODE5MiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCisJCX0sCisJfSwKKworCS5wb3dlcl9jdHJsICAgICAgID0gY3h1c2JfZDY4MF9kbWJfcG93ZXJfY3RybCwKKworCS5pMmNfYWxnbyAgICAgICAgID0gJmN4dXNiX2kyY19hbGdvLAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHgwMSwKKworCS5yY19pbnRlcnZhbCAgICAgID0gMTAwLAorCS5yY19rZXlfbWFwICAgICAgID0gZDY4MF9kbWJfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoZDY4MF9kbWJfcmNfa2V5cyksCisJLnJjX3F1ZXJ5ICAgICAgICAgPSBjeHVzYl9kNjgwX2RtYl9yY19xdWVyeSwKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeworCQkJIkNvbmV4YW50IERNQi1USCBTdGljayIsCisJCQl7IE5VTEwgfSwKKwkJCXsgJmN4dXNiX3RhYmxlWzE4XSwgTlVMTCB9LAorCQl9LAorCX0KK307CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjeHVzYl9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImR2Yl91c2JfY3h1c2IiLAogCS5wcm9iZQkJPSBjeHVzYl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKaW5kZXggNjZkNGRjNi4uNzM5MTkzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmgKQEAgLTMxLDYgKzMxLDggQEAKIAkvLyAyIEJ5dGU6IE1QRUcyIG1vZGU6ICA0TVNCKDEgPSBNYXN0ZXIgTW9kZSwgMCA9IFNsYXZlIE1vZGUpIDRMU0IoQ2hhbm5lbCAxID0gYml0MCwgQ2hhbm5lbCAyID0gYml0MSkKIAkvLyAyIEJ5dGU6IEFuYWxvZyBtb2RlOiA0TVNCKDAgPSA2MjUgbGluZXMsIDEgPSA1MjUgbGluZXMpICAgIDRMU0IoICAgICAiICAgICAgICAgICAgICAgICIgICAgICAgICAgICkKICNkZWZpbmUgUkVRVUVTVF9TRVRfUkMgICAgICAgMHgxMQorI2RlZmluZSBSRVFVRVNUX05FV19JMkNfUkVBRCAweDEyCisjZGVmaW5lIFJFUVVFU1RfTkVXX0kyQ19XUklURSAweDEzCiAjZGVmaW5lIFJFUVVFU1RfR0VUX1ZFUlNJT04gIDB4MTUKIAogc3RydWN0IGRpYjA3MDBfc3RhdGUgewpAQCAtMzksNiArNDEsOCBAQAogCXU4IHJjX3RvZ2dsZTsKIAl1OCByY19jb3VudGVyOwogCXU4IGlzX2RpYjcwMDBwYzsKKwl1OCBmd191c2VfbmV3X2kyY19hcGk7CisJdTggZGlzYWJsZV9zdHJlYW1pbmdfbWFzdGVyX21vZGU7CiB9OwogCiBleHRlcm4gaW50IGRpYjA3MDBfc2V0X2dwaW8oc3RydWN0IGR2Yl91c2JfZGV2aWNlICosIGVudW0gZGliMDd4MF9ncGlvcyBncGlvLCB1OCBncGlvX2RpciwgdTggZ3Bpb192YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKaW5kZXggNTk1YTA0Ni4uZGQ1M2NlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCkBAIC04Miw5ICs4Miw5OCBAQAogfQogCiAvKgotICogSTJDIG1hc3RlciB4ZmVyIGZ1bmN0aW9uCisgKiBJMkMgbWFzdGVyIHhmZXIgZnVuY3Rpb24gKHN1cHBvcnRlZCBpbiAxLjIwIGZpcm13YXJlKQogICovCi1zdGF0aWMgaW50IGRpYjA3MDBfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLHN0cnVjdCBpMmNfbXNnICptc2csaW50IG51bSkKK3N0YXRpYyBpbnQgZGliMDcwMF9pMmNfeGZlcl9uZXcoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNnLAorCQkJCWludCBudW0pCit7CisJLyogVGhlIG5ldyBpMmMgZmlybXdhcmUgbWVzc2FnZXMgYXJlIG1vcmUgcmVsaWFibGUgYW5kIGluIHBhcnRpY3VsYXIKKwkgICBwcm9wZXJseSBzdXBwb3J0IGkyYyByZWFkIGNhbGxzIG5vdCBwcmVjZWRlZCBieSBhIHdyaXRlICovCisKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCXVpbnQ4X3QgYnVzX21vZGUgPSAxOyAgLyogMD1lZXByb20gYnVzLCAxPWZyb250ZW5kIGJ1cyAqLworCXVpbnQ4X3QgZ2VuX21vZGUgPSAwOyAvKiAwPW1hc3RlciBpMmMsIDE9Z3BpbyBpMmMgKi8KKwl1aW50OF90IGVuX3N0YXJ0ID0gMDsKKwl1aW50OF90IGVuX3N0b3AgPSAwOworCXVpbnQ4X3QgYnVmWzI1NV07IC8qIFRCVjogbWFsbG9jID8gKi8KKwlpbnQgcmVzdWx0LCBpOworCisJLyogRW5zdXJlIG5vYm9keSBlbHNlIGhpdHMgdGhlIGkyYyBidXMgd2hpbGUgd2UncmUgc2VuZGluZyBvdXIKKwkgICBzZXF1ZW5jZSBvZiBtZXNzYWdlcywgKHN1Y2ggYXMgdGhlIHJlbW90ZSBjb250cm9sIHRocmVhZCkgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfbXV0ZXgpIDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJaWYgKGkgPT0gMCkgeworCQkJLyogRmlyc3QgbWVzc2FnZSBpbiB0aGUgdHJhbnNhY3Rpb24gKi8KKwkJCWVuX3N0YXJ0ID0gMTsKKwkJfSBlbHNlIGlmICghKG1zZ1tpXS5mbGFncyAmIEkyQ19NX05PU1RBUlQpKSB7CisJCQkvKiBEZXZpY2Ugc3VwcG9ydHMgcmVwZWF0ZWQtc3RhcnQgKi8KKwkJCWVuX3N0YXJ0ID0gMTsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vdCB0aGUgZmlyc3QgcGFja2V0IGFuZCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0CisJCQkgICByZXBlYXRlZCBzdGFydCAqLworCQkJZW5fc3RhcnQgPSAwOworCQl9CisJCWlmIChpID09IChudW0gLSAxKSkgeworCQkJLyogTGFzdCBtZXNzYWdlIGluIHRoZSB0cmFuc2FjdGlvbiAqLworCQkJZW5fc3RvcCA9IDE7CisJCX0KKworCQlpZiAobXNnW2ldLmZsYWdzICYgSTJDX01fUkQpIHsKKwkJCS8qIFJlYWQgcmVxdWVzdCAqLworCQkJdTE2IGluZGV4LCB2YWx1ZTsKKwkJCXVpbnQ4X3QgaTJjX2Rlc3Q7CisKKwkJCWkyY19kZXN0ID0gKG1zZ1tpXS5hZGRyIDw8IDEpOworCQkJdmFsdWUgPSAoKGVuX3N0YXJ0IDw8IDcpIHwgKGVuX3N0b3AgPDwgNikgfAorCQkJCSAobXNnW2ldLmxlbiAmIDB4M0YpKSA8PCA4IHwgaTJjX2Rlc3Q7CisJCQkvKiBJMkMgY3RybCArIEZFIGJ1czsgKi8KKwkJCWluZGV4ID0gKChnZW5fbW9kZTw8NikmMHhDMCkgfCAoKGJ1c19tb2RlPDw0KSYweDMwKTsKKworCQkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGQtPnVkZXYsCisJCQkJCQkgdXNiX3JjdmN0cmxwaXBlKGQtPnVkZXYsIDApLAorCQkJCQkJIFJFUVVFU1RfTkVXX0kyQ19SRUFELAorCQkJCQkJIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4sCisJCQkJCQkgdmFsdWUsIGluZGV4LCBtc2dbaV0uYnVmLAorCQkJCQkJIG1zZ1tpXS5sZW4sCisJCQkJCQkgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCQkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCQllcnIoImkyYyByZWFkIGVycm9yIChzdGF0dXMgPSAlZClcbiIsIHJlc3VsdCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBXcml0ZSByZXF1ZXN0ICovCisJCQlidWZbMF0gPSBSRVFVRVNUX05FV19JMkNfV1JJVEU7CisJCQlidWZbMV0gPSAobXNnW2ldLmFkZHIgPDwgMSk7CisJCQlidWZbMl0gPSAoZW5fc3RhcnQgPDwgNykgfCAoZW5fc3RvcCA8PCA2KSB8CisJCQkJKG1zZ1tpXS5sZW4gJiAweDNGKTsKKwkJCS8qIEkyQyBjdHJsICsgRkUgYnVzOyAqLworCQkJYnVmWzNdID0gKChnZW5fbW9kZTw8NikmMHhDMCkgfCAoKGJ1c19tb2RlPDw0KSYweDMwKTsKKwkJCS8qIFRoZSBBY3R1YWwgaTJjIHBheWxvYWQgKi8KKwkJCW1lbWNweSgmYnVmWzRdLCBtc2dbaV0uYnVmLCBtc2dbaV0ubGVuKTsKKworCQkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGQtPnVkZXYsCisJCQkJCQkgdXNiX3NuZGN0cmxwaXBlKGQtPnVkZXYsIDApLAorCQkJCQkJIFJFUVVFU1RfTkVXX0kyQ19XUklURSwKKwkJCQkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCwKKwkJCQkJCSAwLCAwLCBidWYsIG1zZ1tpXS5sZW4gKyA0LAorCQkJCQkJIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwkJCWlmIChyZXN1bHQgPCAwKSB7CisJCQkJZXJyKCJpMmMgd3JpdGUgZXJyb3IgKHN0YXR1cyA9ICVkKVxuIiwgcmVzdWx0KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJmQtPmkyY19tdXRleCk7CisJcmV0dXJuIGk7Cit9CisKKy8qCisgKiBJMkMgbWFzdGVyIHhmZXIgZnVuY3Rpb24gKHByZS0xLjIwIGZpcm13YXJlKQorICovCitzdGF0aWMgaW50IGRpYjA3MDBfaTJjX3hmZXJfbGVnYWN5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwKKwkJCQkgICBzdHJ1Y3QgaTJjX21zZyAqbXNnLCBpbnQgbnVtKQogewogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CiAJaW50IGksbGVuOwpAQCAtMTI0LDYgKzIxMywyMSBAQAogCXJldHVybiBpOwogfQogCitzdGF0aWMgaW50IGRpYjA3MDBfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNnLAorCQkJICAgIGludCBudW0pCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBkLT5wcml2OworCisJaWYgKHN0LT5md191c2VfbmV3X2kyY19hcGkgPT0gMSkgeworCQkvKiBVc2VyIHJ1bm5pbmcgYXQgbGVhc3QgZncgMS4yMCAqLworCQlyZXR1cm4gZGliMDcwMF9pMmNfeGZlcl9uZXcoYWRhcCwgbXNnLCBudW0pOworCX0gZWxzZSB7CisJCS8qIFVzZSBsZWdhY3kgY2FsbHMgKi8KKwkJcmV0dXJuIGRpYjA3MDBfaTJjX3hmZXJfbGVnYWN5KGFkYXAsIG1zZywgbnVtKTsKKwl9Cit9CisKIHN0YXRpYyB1MzIgZGliMDcwMF9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJcmV0dXJuIEkyQ19GVU5DX0kyQzsKQEAgLTI0Niw3ICszNTAsMTIgQEAKIAogCWJbMF0gPSBSRVFVRVNUX0VOQUJMRV9WSURFTzsKIAliWzFdID0gKG9ub2ZmIDw8IDQpIHwgMHgwMDsgLyogdGhpcyBiaXQgZ2l2ZXMgYSBraW5kIG9mIGNvbW1hbmQsIHJhdGhlciB0aGFuIGVuYWJsaW5nIHNvbWV0aGluZyBvciBub3QgKi8KLQliWzJdID0gKDB4MDEgPDwgNCk7IC8qIE1hc3RlciBtb2RlICovCisKKwlpZiAoc3QtPmRpc2FibGVfc3RyZWFtaW5nX21hc3Rlcl9tb2RlID09IDEpCisJCWJbMl0gPSAweDAwOworCWVsc2UKKwkJYlsyXSA9ICgweDAxIDw8IDQpOyAvKiBNYXN0ZXIgbW9kZSAqLworCiAJYlszXSA9IDB4MDA7CiAKIAlkZWJfaW5mbygibW9kaWZ5aW5nICglZCkgc3RyZWFtaW5nIHN0YXRlIGZvciAlZFxuIiwgb25vZmYsIGFkYXAtPmlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCmluZGV4IDZjMGU1YzUuLjBjZmNjYzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlICJtdDIwNjAuaCIKICNpbmNsdWRlICJtdDIyNjYuaCIKICNpbmNsdWRlICJ0dW5lci14YzIwMjguaCIKKyNpbmNsdWRlICJ4YzUwMDAuaCIKKyNpbmNsdWRlICJzNWgxNDExLmgiCiAjaW5jbHVkZSAiZGliMDA3MC5oIgogCiBzdGF0aWMgaW50IGZvcmNlX2xuYV9hY3RpdmF0aW9uOwpAQCAtMzY2LDcgKzM2OCw4IEBACiAJLmdwaW9fcHdtX3BvcyA9IERJQjcwMDBQX0dQSU9fREVGQVVMVF9QV01fUE9TLAogfTsKIAotc3RhdGljIGludCBzdGs3NzAwcGhfeGMzMDI4X2NhbGxiYWNrKHZvaWQgKnB0ciwgaW50IGNvbW1hbmQsIGludCBhcmcpCitzdGF0aWMgaW50IHN0azc3MDBwaF94YzMwMjhfY2FsbGJhY2sodm9pZCAqcHRyLCBpbnQgY29tcG9uZW50LAorCQkJCSAgICAgaW50IGNvbW1hbmQsIGludCBhcmcpCiB7CiAJc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCA9IHB0cjsKIApAQCAtMzk0LDcgKzM5Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgeGMyMDI4X2NvbmZpZyBzdGs3NzAwcGhfeGMzMDI4X2NvbmZpZyA9IHsKIAkuaTJjX2FkZHIgPSAweDYxLAotCS5jYWxsYmFjayA9IHN0azc3MDBwaF94YzMwMjhfY2FsbGJhY2ssCiAJLmN0cmwgPSAmc3RrNzcwMHBoX3hjMzAyOF9jdHJsLAogfTsKIApAQCAtNDM1LDcgKzQzNyw5IEBACiAJCURJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUiwgMSk7CiAKIAlzdGs3NzAwcGhfeGMzMDI4X2NvbmZpZy5pMmNfYWRhcCA9IHR1bl9pMmM7Ci0Jc3RrNzcwMHBoX3hjMzAyOF9jb25maWcudmlkZW9fZGV2ID0gYWRhcDsKKworCS8qIEZJWE1FOiBnZW5lcmFsaXplICYgbW92ZSB0byBjb21tb24gYXJlYSAqLworCWFkYXAtPmZlLT5jYWxsYmFjayA9IHN0azc3MDBwaF94YzMwMjhfY2FsbGJhY2s7CiAKIAlyZXR1cm4gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBhZGFwLT5mZSwgJnN0azc3MDBwaF94YzMwMjhfY29uZmlnKQogCQk9PSBOVUxMID8gLUVOT0RFViA6IDA7CkBAIC02NzcsNiArNjgxLDQzIEBACiAJeyAweDAxLCAweDdkLCBLRVlfVk9MVU1FRE9XTiB9LAogCXsgMHgwMiwgMHg0MiwgS0VZX0NIQU5ORUxVUCB9LAogCXsgMHgwMCwgMHg3ZCwgS0VZX0NIQU5ORUxET1dOIH0sCisKKwkvKiBLZXkgY29kZXMgZm9yIE5vdmEtVEQgImNyZWRpdCBjYXJkIiByZW1vdGUgY29udHJvbC4gKi8KKwl7IDB4MWQsIDB4MDAsIEtFWV8wIH0sCisJeyAweDFkLCAweDAxLCBLRVlfMSB9LAorCXsgMHgxZCwgMHgwMiwgS0VZXzIgfSwKKwl7IDB4MWQsIDB4MDMsIEtFWV8zIH0sCisJeyAweDFkLCAweDA0LCBLRVlfNCB9LAorCXsgMHgxZCwgMHgwNSwgS0VZXzUgfSwKKwl7IDB4MWQsIDB4MDYsIEtFWV82IH0sCisJeyAweDFkLCAweDA3LCBLRVlfNyB9LAorCXsgMHgxZCwgMHgwOCwgS0VZXzggfSwKKwl7IDB4MWQsIDB4MDksIEtFWV85IH0sCisJeyAweDFkLCAweDBhLCBLRVlfVEVYVCB9LAorCXsgMHgxZCwgMHgwZCwgS0VZX01FTlUgfSwKKwl7IDB4MWQsIDB4MGYsIEtFWV9NVVRFIH0sCisJeyAweDFkLCAweDEwLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MWQsIDB4MTEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDFkLCAweDEyLCBLRVlfQ0hBTk5FTCB9LAorCXsgMHgxZCwgMHgxNCwgS0VZX1VQIH0sCisJeyAweDFkLCAweDE1LCBLRVlfRE9XTiB9LAorCXsgMHgxZCwgMHgxNiwgS0VZX0xFRlQgfSwKKwl7IDB4MWQsIDB4MTcsIEtFWV9SSUdIVCB9LAorCXsgMHgxZCwgMHgxYywgS0VZX1RWIH0sCisJeyAweDFkLCAweDFlLCBLRVlfTkVYVCB9LAorCXsgMHgxZCwgMHgxZiwgS0VZX0JBQ0sgfSwKKwl7IDB4MWQsIDB4MjAsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MWQsIDB4MjEsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxZCwgMHgyNCwgS0VZX0xBU1QgfSwKKwl7IDB4MWQsIDB4MjUsIEtFWV9PSyB9LAorCXsgMHgxZCwgMHgzMCwgS0VZX1BBVVNFIH0sCisJeyAweDFkLCAweDMyLCBLRVlfUkVXSU5EIH0sCisJeyAweDFkLCAweDM0LCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4MWQsIDB4MzUsIEtFWV9QTEFZIH0sCisJeyAweDFkLCAweDM2LCBLRVlfU1RPUCB9LAorCXsgMHgxZCwgMHgzNywgS0VZX1JFQ09SRCB9LAorCXsgMHgxZCwgMHgzYiwgS0VZX0dPVE8gfSwKKwl7IDB4MWQsIDB4M2QsIEtFWV9QT1dFUiB9LAogfTsKIAogLyogU1RLNzcwMFA6IEhhdXBwYXVnZSBOb3ZhLVQgU3RpY2ssIEFWZXJNZWRpYSBWb2xhciAqLwpAQCAtMTA3OCw2ICsxMTE5LDk3IEBACiAJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAtRU5PREVWIDogMDsKIH0KIAorLyogUzVIMTQxMSAqLworc3RhdGljIHN0cnVjdCBzNWgxNDExX2NvbmZpZyBwaW5uYWNsZV84MDFlX2NvbmZpZyA9IHsKKwkub3V0cHV0X21vZGUgICA9IFM1SDE0MTFfUEFSQUxMRUxfT1VUUFVULAorCS5ncGlvICAgICAgICAgID0gUzVIMTQxMV9HUElPX09GRiwKKwkubXBlZ190aW1pbmcgICA9IFM1SDE0MTFfTVBFR1RJTUlOR19OT05DT05USU5PVVNfTk9OSU5WRVJUSU5HX0NMT0NLLAorCS5xYW1faWYgICAgICAgID0gUzVIMTQxMV9JRl80NDAwMCwKKwkudnNiX2lmICAgICAgICA9IFM1SDE0MTFfSUZfNDQwMDAsCisJLmludmVyc2lvbiAgICAgPSBTNUgxNDExX0lOVkVSU0lPTl9PRkYsCisJLnN0YXR1c19tb2RlICAgPSBTNUgxNDExX0RFTU9ETE9DS0lORworfTsKKworLyogUGlubmFjbGUgUENUViBIRCBQcm8gODAxZSBHUElPcyBtYXA6CisgICBHUElPMCAgLSBjdXJyZW50bHkgdW5rbm93bgorICAgR1BJTzEgIC0geGM1MDAwIHR1bmVyIHJlc2V0CisgICBHUElPMiAgLSBDWDI1ODQzIHNsZWVwCisgICBHUElPMyAgLSBjdXJyZW50bHkgdW5rbm93bgorICAgR1BJTzQgIC0gY3VycmVudGx5IHVua25vd24KKyAgIEdQSU82ICAtIGN1cnJlbnRseSB1bmtub3duCisgICBHUElPNyAgLSBjdXJyZW50bHkgdW5rbm93bgorICAgR1BJTzkgIC0gY3VycmVudGx5IHVua25vd24KKyAgIEdQSU8xMCAtIENYMjU4NDMgcmVzZXQKKyAqLworc3RhdGljIGludCBzNWgxNDExX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGFkYXAtPmRldi0+cHJpdjsKKworCS8qIE1ha2UgdXNlIG9mIHRoZSBuZXcgaTJjIGZ1bmN0aW9ucyBmcm9tIEZXIDEuMjAgKi8KKwlzdC0+ZndfdXNlX25ld19pMmNfYXBpID0gMTsKKworCS8qIFRoZSBzNWgxNDExIHJlcXVpcmVzIHRoZSBkaWIwNzAwIHRvIG5vdCBiZSBpbiBtYXN0ZXIgbW9kZSAqLworCXN0LT5kaXNhYmxlX3N0cmVhbWluZ19tYXN0ZXJfbW9kZSA9IDE7CisKKwkvKiBBbGwgbXNsZWVwIHZhbHVlcyB0YWtlbiBmcm9tIFdpbmRvd3MgVVNCIHRyYWNlICovCisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8wLCBHUElPX09VVCwgMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8zLCBHUElPX09VVCwgMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU82LCBHUElPX09VVCwgMSk7CisJbXNsZWVwKDQwMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDApOworCW1zbGVlcCg2MCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDEpOworCW1zbGVlcCgzMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8wLCBHUElPX09VVCwgMSk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU85LCBHUElPX09VVCwgMSk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU80LCBHUElPX09VVCwgMSk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU83LCBHUElPX09VVCwgMSk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8yLCBHUElPX09VVCwgMCk7CisJbXNsZWVwKDMwKTsKKworCS8qIFB1dCB0aGUgQ1gyNTg0MyB0byBzbGVlcCBmb3Igbm93IHNpbmNlIHdlJ3JlIGluIGRpZ2l0YWwgbW9kZSAqLworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMiwgR1BJT19PVVQsIDEpOworCisJLyogR1BJT3MgYXJlIGluaXRpYWxpemVkLCBkbyB0aGUgYXR0YWNoICovCisJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKHM1aDE0MTFfYXR0YWNoLCAmcGlubmFjbGVfODAxZV9jb25maWcsCisJCQkgICAgICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCk7CisJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAtRU5PREVWIDogMDsKK30KKworc3RhdGljIGludCBkaWIwNzAwX3hjNTAwMF90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tcG9uZW50LAorCQkJCQkgaW50IGNvbW1hbmQsIGludCBhcmcpCit7CisJc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCA9IHByaXY7CisKKwlpZiAoY29tbWFuZCA9PSBYQzUwMDBfVFVORVJfUkVTRVQpIHsKKwkJLyogUmVzZXQgdGhlIHR1bmVyICovCisJCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMSwgR1BJT19PVVQsIDApOworCQltc2xlZXAoMzMwKTsgLyogZnJvbSBXaW5kb3dzIFVTQiB0cmFjZSAqLworCQlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEsIEdQSU9fT1VULCAxKTsKKwkJbXNsZWVwKDMzMCk7IC8qIGZyb20gV2luZG93cyBVU0IgdHJhY2UgKi8KKwl9IGVsc2UgeworCQllcnIoInhjNTAwMDogdW5rbm93biB0dW5lciBjYWxsYmFjayBjb21tYW5kOiAlZFxuIiwgY29tbWFuZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHhjNTAwMF9jb25maWcgczVoMTQxMV94YzUwMDBfdHVuZXJjb25maWcgPSB7CisJLmkyY19hZGRyZXNzICAgICAgPSAweDY0LAorCS5pZl9raHogICAgICAgICAgID0gNTM4MCwKK307CisKK3N0YXRpYyBpbnQgeGM1MDAwX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCS8qIEZJWE1FOiBnZW5lcmFsaXplICYgbW92ZSB0byBjb21tb24gYXJlYSAqLworCWFkYXAtPmZlLT5jYWxsYmFjayA9IGRpYjA3MDBfeGM1MDAwX3R1bmVyX2NhbGxiYWNrOworCisJcmV0dXJuIGR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgYWRhcC0+ZmUsICZhZGFwLT5kZXYtPmkyY19hZGFwLAorCQkJICAmczVoMTQxMV94YzUwMDBfdHVuZXJjb25maWcpCisJCT09IE5VTEwgPyAtRU5PREVWIDogMDsKK30KKwogLyogRFZCLVVTQiBhbmQgVVNCIHN0dWZmIGZvbGxvd3MgKi8KIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRpYjA3MDBfdXNiX2lkX3RhYmxlW10gPSB7CiAvKiAwICovCXsgVVNCX0RFVklDRShVU0JfVklEX0RJQkNPTSwgICAgVVNCX1BJRF9ESUJDT01fU1RLNzcwMFApIH0sCkBAIC0xMTE5LDYgKzEyNTEsMTEgQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9MRUFEVEVLLCAgIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX1NUSzc3MDBQXzIpIH0sCiAvKiAzNSAqL3sgVVNCX0RFVklDRShVU0JfVklEX0hBVVBQQVVHRSwgVVNCX1BJRF9IQVVQUEFVR0VfTk9WQV9URF9TVElDS181MjAwOSkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9IQVVQUEFVR0UsIFVTQl9QSURfSEFVUFBBVUdFX05PVkFfVF81MDBfMykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9HSUdBQllURSwgIFVTQl9QSURfR0lHQUJZVEVfVTgwMDApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfWVVBTiwgICAgICBVU0JfUElEX1lVQU5fU1RLNzcwMFBIKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX0FTVVMsCVVTQl9QSURfQVNVU19VMzAwMEgpIH0sCisvKiA0MCAqL3sgVVNCX0RFVklDRShVU0JfVklEX1BJTk5BQ0xFLCAgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWODAxRSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9QSU5OQUNMRSwgIFVTQl9QSURfUElOTkFDTEVfUENUVjgwMUVfU0UpIH0sCiAJeyAwIH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRpYjA3MDBfdXNiX2lkX3RhYmxlKTsKQEAgLTExMjYsNyArMTI2Myw3IEBACiAjZGVmaW5lIERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUyBcCiAJLmNhcHMgICAgICAgICAgICAgID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwgXAogCS51c2JfY3RybCAgICAgICAgICA9IERFVklDRV9TUEVDSUZJQywgXAotCS5maXJtd2FyZSAgICAgICAgICA9ICJkdmItdXNiLWRpYjA3MDAtMS4xMC5mdyIsIFwKKwkuZmlybXdhcmUgICAgICAgICAgPSAiZHZiLXVzYi1kaWIwNzAwLTEuMjAuZnciLCBcCiAJLmRvd25sb2FkX2Zpcm13YXJlID0gZGliMDcwMF9kb3dubG9hZF9maXJtd2FyZSwgXAogCS5ub19yZWNvbm5lY3QgICAgICA9IDEsIFwKIAkuc2l6ZV9vZl9wcml2ICAgICAgPSBzaXplb2Yoc3RydWN0IGRpYjA3MDBfc3RhdGUpLCBcCkBAIC0xMjkzLDcgKzE0MzAsMTIgQEAKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszMV0sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0KLQkJfQorCQl9LAorCisJCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKKwkJLnJjX2tleV9tYXAgICAgICAgPSBkaWIwNzAwX3JjX2tleXMsCisJCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShkaWIwNzAwX3JjX2tleXMpLAorCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnkKIAl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKIAogCQkubnVtX2FkYXB0ZXJzID0gMSwKQEAgLTE0MDgsNyArMTU1MCw3IEBACiAJCQl9LAogCQl9LAogCi0JCS5udW1fZGV2aWNlX2Rlc2NzID0gMywKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSA1LAogCQkuZGV2aWNlcyA9IHsKIAkJCXsgICAiVGVycmF0ZWMgQ2luZXJneSBIVCBVU0IgWEUiLAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzI3XSwgTlVMTCB9LApAQCAtMTQyMiw2ICsxNTY0LDQ3IEBACiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzJdLCBOVUxMIH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAorCQkJeyAgICJHaWdhYnl0ZSBVODAwMC1SSCIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzddLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQkJeyAgICJZVUFOIEhpZ2gtVGVjaCBTVEs3NzAwUEgiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzM4XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJCXsgICAiQXN1cyBNeSBDaW5lbWEtVTMwMDBIeWJyaWQiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzM5XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJfSwKKwkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkucmNfa2V5X21hcCAgICAgICA9IGRpYjA3MDBfcmNfa2V5cywKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGRpYjA3MDBfcmNfa2V5cyksCisJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQorCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAorCQkubnVtX2FkYXB0ZXJzID0gMSwKKwkJLmFkYXB0ZXIgPSB7CisJCQl7CisJCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBzNWgxNDExX2Zyb250ZW5kX2F0dGFjaCwKKwkJCQkudHVuZXJfYXR0YWNoICAgICA9IHhjNTAwMF90dW5lcl9hdHRhY2gsCisKKwkJCQlESUIwNzAwX0RFRkFVTFRfU1RSRUFNSU5HX0NPTkZJRygweDAyKSwKKworCQkJCS5zaXplX29mX3ByaXYgPSBzaXplb2Yoc3RydWN0CisJCQkJCQlkaWIwNzAwX2FkYXB0ZXJfc3RhdGUpLAorCQkJfSwKKwkJfSwKKworCQkubnVtX2RldmljZV9kZXNjcyA9IDIsCisJCS5kZXZpY2VzID0geworCQkJeyAgICJQaW5uYWNsZSBQQ1RWIEhEIFBybyBVU0IgU3RpY2siLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQwXSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJCXsgICAiUGlubmFjbGUgUENUViBIRCBVU0IgU3RpY2siLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQxXSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKIAkJfSwKIAkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAogCQkucmNfa2V5X21hcCAgICAgICA9IGRpYjA3MDBfcmNfa2V5cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR2NTEwMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHY1MTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc4Y2U5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR2NTEwMC5jCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogRFZCIFVTQiBMaW51eCBkcml2ZXIgZm9yIEFNRSBEVFYtNTEwMCBVU0IyLjAgRFZCLVQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggIEFudG9pbmUgSmFjcXVldCA8cm95YWxlQHplcmV6by5jb20+CisgKiBodHRwOi8vcm95YWxlLnplcmV6by5jb20vZHR2NTEwMC8KKyAqCisgKiBJbnNwaXJlZCBieSBnbDg2MS5jIGFuZCBhdTY2MTAuYyBkcml2ZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlICJkdHY1MTAwLmgiCisjaW5jbHVkZSAiemwxMDM1My5oIgorI2luY2x1ZGUgInF0MTAxMC5oIgorCisvKiBkZWJ1ZyAqLworc3RhdGljIGludCBkdmJfdXNiX2R0djUxMDBfZGVidWc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGR2Yl91c2JfZHR2NTEwMF9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKworc3RhdGljIGludCBkdHY1MTAwX2kyY19tc2coc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCBhZGRyLAorCQkJICAgdTggKndidWYsIHUxNiB3bGVuLCB1OCAqcmJ1ZiwgdTE2IHJsZW4pCit7CisJdTggcmVxdWVzdDsKKwl1OCB0eXBlOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisKKwlzd2l0Y2ggKHdsZW4pIHsKKwljYXNlIDE6CisJCS8qIHdyaXRlIHsgcmVnIH0sIHJlYWQgeyB2YWx1ZSB9ICovCisJCXJlcXVlc3QgPSAoYWRkciA9PSBEVFY1MTAwX0RFTU9EX0FERFIgPyBEVFY1MTAwX0RFTU9EX1JFQUQgOgorCQkJCQkJCURUVjUxMDBfVFVORVJfUkVBRCk7CisJCXR5cGUgPSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOOworCQl2YWx1ZSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJLyogd3JpdGUgeyByZWcsIHZhbHVlIH0gKi8KKwkJcmVxdWVzdCA9IChhZGRyID09IERUVjUxMDBfREVNT0RfQUREUiA/IERUVjUxMDBfREVNT0RfV1JJVEUgOgorCQkJCQkJCURUVjUxMDBfVFVORVJfV1JJVEUpOworCQl0eXBlID0gVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQ7CisJCXZhbHVlID0gd2J1ZlsxXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd2Fybigid2xlbiA9ICV4LCBhYm9ydGluZy4iLCB3bGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWluZGV4ID0gKGFkZHIgPDwgOCkgKyB3YnVmWzBdOworCisJbXNsZWVwKDEpOyAvKiBhdm9pZCBJMkMgZXJyb3JzICovCisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhkLT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUoZC0+dWRldiwgMCksIHJlcXVlc3QsCisJCQkgICAgICAgdHlwZSwgdmFsdWUsIGluZGV4LCByYnVmLCBybGVuLAorCQkJICAgICAgIERUVjUxMDBfVVNCX1RJTUVPVVQpOworfQorCisvKiBJMkMgKi8KK3N0YXRpYyBpbnQgZHR2NTEwMF9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLAorCQkJICAgIGludCBudW0pCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlpbnQgaTsKKworCWlmIChudW0gPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQkvKiB3cml0ZS9yZWFkIHJlcXVlc3QgKi8KKwkJaWYgKGkrMSA8IG51bSAmJiAobXNnW2krMV0uZmxhZ3MgJiBJMkNfTV9SRCkpIHsKKwkJCWlmIChkdHY1MTAwX2kyY19tc2coZCwgbXNnW2ldLmFkZHIsIG1zZ1tpXS5idWYsCisJCQkJCSAgICBtc2dbaV0ubGVuLCBtc2dbaSsxXS5idWYsCisJCQkJCSAgICBtc2dbaSsxXS5sZW4pIDwgMCkKKwkJCQlicmVhazsKKwkJCWkrKzsKKwkJfSBlbHNlIGlmIChkdHY1MTAwX2kyY19tc2coZCwgbXNnW2ldLmFkZHIsIG1zZ1tpXS5idWYsCisJCQkJCSAgIG1zZ1tpXS5sZW4sIE5VTEwsIDApIDwgMCkKKwkJCQlicmVhazsKKwl9CisKKwltdXRleF91bmxvY2soJmQtPmkyY19tdXRleCk7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB1MzIgZHR2NTEwMF9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQzsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGR0djUxMDBfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBkdHY1MTAwX2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gZHR2NTEwMF9pMmNfZnVuYywKK307CisKKy8qIENhbGxiYWNrcyBmb3IgRFZCIFVTQiAqLworc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBkdHY1MTAwX3psMTAzNTNfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gRFRWNTEwMF9ERU1PRF9BRERSLAorCS5ub190dW5lciA9IDEsCisJLnBhcmFsbGVsX3RzID0gMSwKK307CisKK3N0YXRpYyBpbnQgZHR2NTEwMF9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsICZkdHY1MTAwX3psMTAzNTNfY29uZmlnLAorCQkJICAgICAgJmFkYXAtPmRldi0+aTJjX2FkYXApOworCWlmIChhZGFwLT5mZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTzsKKworCS8qIGRpc2FibGUgaTJjIGdhdGUsIG9yIGl0IHdvbid0IHdvcmsuLi4gaXMgdGhpcyBzYWZlPyAqLworCWFkYXAtPmZlLT5vcHMuaTJjX2dhdGVfY3RybCA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBxdDEwMTBfY29uZmlnIGR0djUxMDBfcXQxMDEwX2NvbmZpZyA9IHsKKwkuaTJjX2FkZHJlc3MgPSBEVFY1MTAwX1RVTkVSX0FERFIKK307CisKK3N0YXRpYyBpbnQgZHR2NTEwMF90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gZHZiX2F0dGFjaChxdDEwMTBfYXR0YWNoLAorCQkJICBhZGFwLT5mZSwgJmFkYXAtPmRldi0+aTJjX2FkYXAsCisJCQkgICZkdHY1MTAwX3F0MTAxMF9jb25maWcpID09IE5VTEwgPyAtRU5PREVWIDogMDsKK30KKworLyogRFZCIFVTQiBEcml2ZXIgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBkdHY1MTAwX3Byb3BlcnRpZXM7CisKK3N0YXRpYyBpbnQgZHR2NTEwMF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IGksIHJldDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisKKwkvKiBpbml0aWFsaXplIG5vbiBxdDEwMTAvemwxMDM1MyBwYXJ0PyAqLworCWZvciAoaSA9IDA7IGR0djUxMDBfaW5pdFtpXS5yZXF1ZXN0OyBpKyspIHsKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQkgICAgICBkdHY1MTAwX2luaXRbaV0ucmVxdWVzdCwKKwkJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCwKKwkJCQkgICAgICBkdHY1MTAwX2luaXRbaV0udmFsdWUsCisJCQkJICAgICAgZHR2NTEwMF9pbml0W2ldLmluZGV4LCBOVUxMLCAwLAorCQkJCSAgICAgIERUVjUxMDBfVVNCX1RJTUVPVVQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZkdHY1MTAwX3Byb3BlcnRpZXMsCisJCQkJICBUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZHR2NTEwMF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRSgweDA2YmUsIDB4YTIzMikgfSwKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGR0djUxMDBfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZHR2NTEwMF9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKwkudXNiX2N0cmwgPSBERVZJQ0VfU1BFQ0lGSUMsCisKKwkuc2l6ZV9vZl9wcml2ID0gMCwKKworCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0ge3sKKwkJLmZyb250ZW5kX2F0dGFjaCA9IGR0djUxMDBfZnJvbnRlbmRfYXR0YWNoLAorCQkudHVuZXJfYXR0YWNoICAgID0gZHR2NTEwMF90dW5lcl9hdHRhY2gsCisKKwkJLnN0cmVhbSA9IHsKKwkJCS50eXBlID0gVVNCX0JVTEssCisJCQkuY291bnQgPSA4LAorCQkJLmVuZHBvaW50ID0gMHg4MiwKKwkJCS51ID0geworCQkJCS5idWxrID0geworCQkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCisJCQkJfQorCQkJfQorCQl9LAorCX0gfSwKKworCS5pMmNfYWxnbyA9ICZkdHY1MTAwX2kyY19hbGdvLAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7CisJCQkubmFtZSA9ICJBTUUgRFRWLTUxMDAgVVNCMi4wIERWQi1UIiwKKwkJCS5jb2xkX2lkcyA9IHsgTlVMTCB9LAorCQkJLndhcm1faWRzID0geyAmZHR2NTEwMF90YWJsZVswXSwgTlVMTCB9LAorCQl9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBkdHY1MTAwX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiZHZiX3VzYl9kdHY1MTAwIiwKKwkucHJvYmUJCT0gZHR2NTEwMF9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCisJLmlkX3RhYmxlCT0gZHR2NTEwMF90YWJsZSwKK307CisKKy8qIG1vZHVsZSBzdHVmZiAqLworc3RhdGljIGludCBfX2luaXQgZHR2NTEwMF9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJmR0djUxMDBfZHJpdmVyKTsKKwlpZiAocmV0KQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHR2NTEwMF9tb2R1bGVfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgZnJvbSB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZkdHY1MTAwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGR0djUxMDBfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoZHR2NTEwMF9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHY1MTAwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0djUxMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2U5NmUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHY1MTAwLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIERWQiBVU0IgTGludXggZHJpdmVyIGZvciBBTUUgRFRWLTUxMDAgVVNCMi4wIERWQi1UCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4ICBBbnRvaW5lIEphY3F1ZXQgPHJveWFsZUB6ZXJlem8uY29tPgorICogaHR0cDovL3JveWFsZS56ZXJlem8uY29tL2R0djUxMDAvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX0RWQl9VU0JfRFRWNTEwMF9IXworI2RlZmluZSBfRFZCX1VTQl9EVFY1MTAwX0hfCisKKyNkZWZpbmUgRFZCX1VTQl9MT0dfUFJFRklYICJkdHY1MTAwIgorI2luY2x1ZGUgImR2Yi11c2IuaCIKKworI2RlZmluZSBEVFY1MTAwX1VTQl9USU1FT1VUIDUwMAorCisjZGVmaW5lIERUVjUxMDBfREVNT0RfQUREUgkweDAwCisjZGVmaW5lIERUVjUxMDBfREVNT0RfV1JJVEUJMHhjMAorI2RlZmluZSBEVFY1MTAwX0RFTU9EX1JFQUQJMHhjMQorCisjZGVmaW5lIERUVjUxMDBfVFVORVJfQUREUgkweGM0CisjZGVmaW5lIERUVjUxMDBfVFVORVJfV1JJVEUJMHhjNworI2RlZmluZSBEVFY1MTAwX1RVTkVSX1JFQUQJMHhjOAorCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkFudG9pbmUgSmFjcXVldCwgaHR0cDovL3JveWFsZS56ZXJlem8uY29tLyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkFNRSBEVFYtNTEwMCBVU0IyLjAgRFZCLVQiCisKK3N0YXRpYyBzdHJ1Y3QgeworCXU4IHJlcXVlc3Q7CisJdTggdmFsdWU7CisJdTE2IGluZGV4OworfSBkdHY1MTAwX2luaXRbXSA9IHsKKwl7IDB4MDAwMDAwYzUsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEgfSwKKwl7IDB4MDAwMDAwYzUsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSwKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAppbmRleCAwM2RmYjlmLi43MzgwYjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIFVTQl9WSURfQVZFUk1FRElBCQkJMHgwN2NhCiAjZGVmaW5lIFVTQl9WSURfQ09NUFJPCQkJCTB4MTg1YgogI2RlZmluZSBVU0JfVklEX0NPTVBST19VTksJCQkweDE0NWYKKyNkZWZpbmUgVVNCX1ZJRF9DT05FWEFOVAkJCTB4MDU3MgogI2RlZmluZSBVU0JfVklEX0NZUFJFU1MJCQkJMHgwNGI0CiAjZGVmaW5lIFVTQl9WSURfRElCQ09NCQkJCTB4MTBiOAogI2RlZmluZSBVU0JfVklEX0RQT1NICQkJCTB4MTQ5OApAQCAtMzMsMTYgKzM0LDE5IEBACiAjZGVmaW5lIFVTQl9WSURfSEFVUFBBVUdFCQkJMHgyMDQwCiAjZGVmaW5lIFVTQl9WSURfSFlQRVJfUEFMVEVLCQkJMHgxMDI1CiAjZGVmaW5lIFVTQl9WSURfS1dPUkxECQkJCTB4ZWIyYQorI2RlZmluZSBVU0JfVklEX0tXT1JMRF8yCQkJMHgxYjgwCiAjZGVmaW5lIFVTQl9WSURfS1lFCQkJCTB4MDQ1OAogI2RlZmluZSBVU0JfVklEX0xFQURURUsJCQkJMHgwNDEzCiAjZGVmaW5lIFVTQl9WSURfTElURU9OCQkJCTB4MDRjYQogI2RlZmluZSBVU0JfVklEX01FRElPTgkJCQkweDE2NjAKICNkZWZpbmUgVVNCX1ZJRF9NSUdMSUEJCQkJMHgxOGYzCiAjZGVmaW5lIFVTQl9WSURfTVNJCQkJCTB4MGRiMAorI2RlZmluZSBVU0JfVklEX01TSV8yCQkJCTB4MTQ2MgogI2RlZmluZSBVU0JfVklEX09QRVJBMQkJCQkweDY5NWMKICNkZWZpbmUgVVNCX1ZJRF9QSU5OQUNMRQkJCTB4MjMwNAogI2RlZmluZSBVU0JfVklEX1RFQ0hOT1RSRU5ECQkJMHgwYjQ4CiAjZGVmaW5lIFVTQl9WSURfVEVSUkFURUMJCQkweDBjY2QKKyNkZWZpbmUgVVNCX1ZJRF9URUxFU1RBUgkJCTB4MTBiOQogI2RlZmluZSBVU0JfVklEX1ZJU0lPTlBMVVMJCQkweDEzZDMKICNkZWZpbmUgVVNCX1ZJRF9UV0lOSEFOCQkJCTB4MTgyMgogI2RlZmluZSBVU0JfVklEX1VMVElNQV9FTEVDVFJPTklDCQkweDA1ZDgKQEAgLTUwLDE1ICs1NCwxOCBAQAogI2RlZmluZSBVU0JfVklEX1dJREVWSUVXCQkJMHgxNGFhCiAjZGVmaW5lIFVTQl9WSURfR0lHQUJZVEUJCQkweDEwNDQKICNkZWZpbmUgVVNCX1ZJRF9ZVUFOCQkJCTB4MTE2NAotCisjZGVmaW5lIFVTQl9WSURfWFRFTlNJT05TCQkJMHgxYWU3CiAKIC8qIFByb2R1Y3QgSURzICovCiAjZGVmaW5lIFVTQl9QSURfQURTVEVDSF9VU0IyX0NPTEQJCQkweGEzMzMKICNkZWZpbmUgVVNCX1BJRF9BRFNURUNIX1VTQjJfV0FSTQkJCTB4YTMzNAogI2RlZmluZSBVU0JfUElEX0FGQVRFQ0hfQUY5MDA1CQkJCTB4OTAyMAorI2RlZmluZSBVU0JfUElEX0FGQVRFQ0hfQUY5MDE1XzkwMTUJCQkweDkwMTUKKyNkZWZpbmUgVVNCX1BJRF9BRkFURUNIX0FGOTAxNV85MDE2CQkJMHg5MDE2CiAjZGVmaW5lIFVTQl9WSURfQUxJTktfRFRVCQkJCTB4ZjE3MAogI2RlZmluZSBVU0JfUElEX0FOU09OSUNfRFZCVF9VU0IJCQkweDYwMDAKICNkZWZpbmUgVVNCX1BJRF9BTllTRUUJCQkJCTB4ODYxZgorI2RlZmluZSBVU0JfUElEX0FaVVJFV0FWRV9BRF9UVTcwMAkJCTB4MzIzNwogI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9EVkJUX1VTQl9DT0xECQkJMHgwMDAxCiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0RWQlRfVVNCX1dBUk0JCQkweDAwMDIKICNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfRFZCVF9VU0IyX0NPTEQJCTB4YTgwMApAQCAtNjksNiArNzYsNyBAQAogI2RlZmluZSBVU0JfUElEX0NPTVBST19EVkJVMjAwMF9VTktfV0FSTQkJMHgwMTBkCiAjZGVmaW5lIFVTQl9QSURfQ09NUFJPX1ZJREVPTUFURV9VNTAwCQkJMHgxZTc4CiAjZGVmaW5lIFVTQl9QSURfQ09NUFJPX1ZJREVPTUFURV9VNTAwX1BDCQkweDFlODAKKyNkZWZpbmUgVVNCX1BJRF9DT05FWEFOVF9ENjgwX0RNQgkJCTB4ODZkNgogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9IT09LX0RFRkFVTFQJCQkweDAwNjQKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fSE9PS19ERUZBVUxUX1JFRU5VTQkJMHgwMDY1CiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX01PRDMwMDBfQ09MRAkJCTB4MGJiOApAQCAtODcsOSArOTUsMTIgQEAKICNkZWZpbmUgVVNCX1BJRF9VTklXSUxMX1NUSzc3MDBQCQkJMHg2MDAzCiAjZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0JfQ09MRAkJCTB4MGZhMAogI2RlZmluZSBVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCX1dBUk0JCQkweDBmYTEKKyNkZWZpbmUgVVNCX1BJRF9LV09STERfMzk5VQkJCQkweGUzOTkKKyNkZWZpbmUgVVNCX1BJRF9LV09STERfUEMxNjBfMlQJCQkJMHhjMTYwCiAjZGVmaW5lIFVTQl9QSURfS1dPUkxEX1ZTVFJFQU1fQ09MRAkJCTB4MTdkZQogI2RlZmluZSBVU0JfUElEX0tXT1JMRF9WU1RSRUFNX1dBUk0JCQkweDE3ZGYKICNkZWZpbmUgVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX1RfVVNCX1hFCQkweDAwNTUKKyNkZWZpbmUgVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX1RfVVNCX1hFX1JFVjIJCTB4MDA2OQogI2RlZmluZSBVU0JfUElEX1RXSU5IQU5fVlA3MDQxX0NPTEQJCQkweDMyMDEKICNkZWZpbmUgVVNCX1BJRF9UV0lOSEFOX1ZQNzA0MV9XQVJNCQkJMHgzMjAyCiAjZGVmaW5lIFVTQl9QSURfVFdJTkhBTl9WUDcwMjBfQ09MRAkJCTB4MzIwMwpAQCAtOTgsNiArMTA5LDcgQEAKICNkZWZpbmUgVVNCX1BJRF9UV0lOSEFOX1ZQNzA0NV9XQVJNCQkJMHgzMjA2CiAjZGVmaW5lIFVTQl9QSURfVFdJTkhBTl9WUDcwMjFfQ09MRAkJCTB4MzIwNwogI2RlZmluZSBVU0JfUElEX1RXSU5IQU5fVlA3MDIxX1dBUk0JCQkweDMyMDgKKyNkZWZpbmUgVVNCX1BJRF9USU5ZVFdJTgkJCQkweDMyMjYKICNkZWZpbmUgVVNCX1BJRF9ETlRWX1RJTllVU0IyX0NPTEQJCQkweDMyMjMKICNkZWZpbmUgVVNCX1BJRF9ETlRWX1RJTllVU0IyX1dBUk0JCQkweDMyMjQKICNkZWZpbmUgVVNCX1BJRF9VTFRJTUFfVFZCT1hfQ09MRAkJCTB4ODEwNQpAQCAtMTQ0LDYgKzE1Niw5IEBACiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0hZQlJJRF9VTFRSQV9VU0JfTTAzOVIJMHgwMDM5CiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0hZQlJJRF9VTFRSQV9VU0JfTTAzOVJfQVRTQwkweDEwMzkKICNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfSFlCUklEX1VMVFJBX1VTQl9NMDM5Ul9EVkJUCTB4MjAzOQorI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9WT0xBUl9YCQkJMHhhODE1CisjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX1ZPTEFSX1hfMgkJCTB4ODE1MAorI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9BMzA5CQkJCTB4YTMwOQogI2RlZmluZSBVU0JfUElEX1RFQ0hOT1RSRU5EX0NPTk5FQ1RfUzI0MDAgICAgICAgICAgICAgICAweDMwMDYKICNkZWZpbmUgVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX0RUX1hTX0RJVkVSU0lUWQkweDAwNWEKICNkZWZpbmUgVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX0hUX1VTQl9YRQkJMHgwMDU4CkBAIC0xNTMsOCArMTY4LDExIEBACiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjIwMDBFCQkJMHgwMjJjCiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVl9EVkJfVF9GTEFTSAkJMHgwMjI4CiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVl9EVUFMX0RJVkVSU0lUWV9EVkJfVAkweDAyMjkKKyNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWNzFFCQkJMHgwMjJiCiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjcyRQkJCTB4MDIzNgogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY3M0UJCQkweDAyMzcKKyNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWODAxRQkJCTB4MDIzYQorI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY4MDFFX1NFCQkJMHgwMjNiCiAjZGVmaW5lIFVTQl9QSURfUENUVl8yMDBFCQkJCTB4MDIwZQogI2RlZmluZSBVU0JfUElEX1BDVFZfNDAwRQkJCQkweDAyMGYKICNkZWZpbmUgVVNCX1BJRF9QQ1RWXzQ1MEUJCQkJMHgwMjIyCkBAIC0xNzEsNiArMTg5LDcgQEAKICNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVUFMXzJfQ09MRAkJMHhkYjU4CiAjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFVBTF8yX1dBUk0JCTB4ZGI1OQogI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0RVQUxfNAkJCTB4ZGI3OAorI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0RVQUxfNF9SRVZfMgkJMHhkYjk4CiAjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFZCX1RfTkFOT18yCQkweGRiNzAKICNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVkJfVF9OQU5PXzJfTkZXX1dBUk0JMHhkYjcxCiAjZGVmaW5lIFVTQl9QSURfRElHSVRBTE5PV19CTFVFQklSRF9EVUFMXzFfQ09MRAkJMHhkYjU0CkBAIC0xOTAsNiArMjA5LDcgQEAKICNkZWZpbmUgVVNCX1BJRF9XSU5GQVNUX0RUVl9ET05HTEVfV0FSTQkJCTB4NjAyNgogI2RlZmluZSBVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9TVEs3NzAwUAkJMHg2ZjAwCiAjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX1NUSzc3MDBQXzIJCTB4NmYwMQorI2RlZmluZSBVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9HT0xECQkJMHg2MDI5CiAjZGVmaW5lIFVTQl9QSURfR0VOUElYXzhQU0tfUkVWXzFfQ09MRAkJCTB4MDIwMAogI2RlZmluZSBVU0JfUElEX0dFTlBJWF84UFNLX1JFVl8xX1dBUk0JCQkweDAyMDEKICNkZWZpbmUgVVNCX1BJRF9HRU5QSVhfOFBTS19SRVZfMgkJCTB4MDIwMgpAQCAtMTk3LDE0ICsyMTcsMjEgQEAKICNkZWZpbmUgVVNCX1BJRF9HRU5QSVhfU0tZV0FMS0VSX0NXM0sJCQkweDAyMDQKICNkZWZpbmUgVVNCX1BJRF9TSUdNQVRFS19EVkJfMTEwCQkJMHg2NjEwCiAjZGVmaW5lIFVTQl9QSURfTVNJX0RJR0lfVk9YX01JTklfSUkJCQkweDE1MTMKKyNkZWZpbmUgVVNCX1BJRF9NU0lfRElHSVZPWF9EVU8JCQkJMHg4ODAxCiAjZGVmaW5lIFVTQl9QSURfT1BFUkExX0NPTEQJCQkJMHgyODMwCiAjZGVmaW5lIFVTQl9QSURfT1BFUkExX1dBUk0JCQkJMHgzODI5CiAjZGVmaW5lIFVTQl9QSURfTElGRVZJRVdfVFZfV0FMS0VSX1RXSU5fQ09MRAkJMHgwNTE0CiAjZGVmaW5lIFVTQl9QSURfTElGRVZJRVdfVFZfV0FMS0VSX1RXSU5fV0FSTQkJMHgwNTEzCiAjZGVmaW5lIFVTQl9QSURfR0lHQUJZVEVfVTcwMDAJCQkJMHg3MDAxCisjZGVmaW5lIFVTQl9QSURfR0lHQUJZVEVfVTgwMDAJCQkJMHg3MDAyCiAjZGVmaW5lIFVTQl9QSURfQVNVU19VMzAwMAkJCQkweDE3MWYKKyNkZWZpbmUgVVNCX1BJRF9BU1VTX1UzMDAwSAkJCQkweDE3MzYKICNkZWZpbmUgVVNCX1BJRF9BU1VTX1UzMTAwCQkJCTB4MTczZgogI2RlZmluZSBVU0JfUElEX1lVQU5fRUMzNzJTCQkJCTB4MWVkYworI2RlZmluZSBVU0JfUElEX1lVQU5fU1RLNzcwMFBICQkJCTB4MWYwOAogI2RlZmluZSBVU0JfUElEX0RXMjEwMgkJCQkJMHgyMTAyCisjZGVmaW5lIFVTQl9QSURfWFRFTlNJT05TX1hEXzM4MAkJCTB4MDM4MQorI2RlZmluZSBVU0JfUElEX1RFTEVTVEFSX1NUQVJTVElDS18yCQkJMHg4MDAwCisjZGVmaW5lIFVTQl9QSURfTVNJX0RJR0lfVk9YX01JTklfSUlJICAgICAgICAgICAgICAgICAgIDB4ODgwNwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCmluZGV4IGE0ZDg5OGIuLjYyODZmYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYwpAQCAtMSw0ICsxLDUgQEAKLS8qIERWQiBVU0IgZnJhbWV3b3JrIGNvbXBsaWFudCBMaW51eCBkcml2ZXIgZm9yIHRoZSBEVkJXb3JsZCBEVkItUyAyMTAyIENhcmQKKy8qIERWQiBVU0IgZnJhbWV3b3JrIGNvbXBsaWFudCBMaW51eCBkcml2ZXIgZm9yIHRoZQorKglEVkJXb3JsZCBEVkItUyAyMTAxLCAyMTAyLCBEVkItUzIgMjEwNCBDYXJkCiAqCiAqIENvcHlyaWdodCAoQykgMjAwOCBJZ29yIE0uIExpcGxpYW5pbiAobGlwbGlhbmluQG1lLmJ5KQogKgpAQCAtMTAsNjIgKzExLDc0IEBACiAqLwogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlICJkdzIxMDIuaCIKKyNpbmNsdWRlICJzaTIxeHguaCIKICNpbmNsdWRlICJzdHYwMjk5LmgiCiAjaW5jbHVkZSAiejAxOTRhLmgiCisjaW5jbHVkZSAic3R2MDI4OC5oIgorI2luY2x1ZGUgInN0YjYwMDAuaCIKKyNpbmNsdWRlICJlZHMxNTQ3LmgiCisjaW5jbHVkZSAiY3gyNDExNi5oIgogCiAjaWZuZGVmIFVTQl9QSURfRFcyMTAyCiAjZGVmaW5lIFVTQl9QSURfRFcyMTAyIDB4MjEwMgogI2VuZGlmCiAKLSNkZWZpbmUgRFcyMTAyX1JFQURfTVNHIDAKLSNkZWZpbmUgRFcyMTAyX1dSSVRFX01TRyAxCisjaWZuZGVmIFVTQl9QSURfRFcyMTA0CisjZGVmaW5lIFVTQl9QSURfRFcyMTA0IDB4MjEwNAorI2VuZGlmCisKKyNkZWZpbmUgRFcyMTBYX1JFQURfTVNHIDAKKyNkZWZpbmUgRFcyMTBYX1dSSVRFX01TRyAxCiAKICNkZWZpbmUgUkVHXzFGX1NZTUJPTFJBVEVfQllURTAgMHgxZgogI2RlZmluZSBSRUdfMjBfU1lNQk9MUkFURV9CWVRFMSAweDIwCiAjZGVmaW5lIFJFR18yMV9TWU1CT0xSQVRFX0JZVEUyIDB4MjEKLQorLyogb24gbXkgb3duKi8KICNkZWZpbmUgRFcyMTAyX1ZPTFRBR0VfQ1RSTCAoMHgxODAwKQogI2RlZmluZSBEVzIxMDJfUkNfUVVFUlkgKDB4MWEwMCkKIAotc3RydWN0IGR3MjEwMl9zdGF0ZSB7CitzdHJ1Y3QgZHcyMTB4X3N0YXRlIHsKIAl1MzIgbGFzdF9rZXlfcHJlc3NlZDsKIH07Ci1zdHJ1Y3QgZHcyMTAyX3JjX2tleXMgeworc3RydWN0IGR3MjEweF9yY19rZXlzIHsKIAl1MzIga2V5Y29kZTsKIAl1MzIgZXZlbnQ7CiB9OwogCisvKiBkZWJ1ZyAqLworc3RhdGljIGludCBkdmJfdXNiX2R3MjEwMl9kZWJ1ZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHZiX3VzYl9kdzIxMDJfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvIDI9eGZlciAob3ItYWJsZSkpLiIgRFZCX1VTQl9ERUJVR19TVEFUVVMpOworCiBEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKIAotc3RhdGljIGludCBkdzIxMDJfb3Bfcncoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLAotCQl1OCAqZGF0YSwgdTE2IGxlbiwgaW50IGZsYWdzKQorc3RhdGljIGludCBkdzIxMHhfb3Bfcncoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdTggcmVxdWVzdCwgdTE2IHZhbHVlLAorCQkJdTE2IGluZGV4LCB1OCAqIGRhdGEsIHUxNiBsZW4sIGludCBmbGFncykKIHsKIAlpbnQgcmV0OwogCXU4IHU4YnVmW2xlbl07CiAKLQl1bnNpZ25lZCBpbnQgcGlwZSA9IChmbGFncyA9PSBEVzIxMDJfUkVBRF9NU0cpID8KLQkJdXNiX3JjdmN0cmxwaXBlKGRldiwgMCkgOiB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKTsKLQl1OCByZXF1ZXN0X3R5cGUgPSAoZmxhZ3MgPT0gRFcyMTAyX1JFQURfTVNHKSA/IFVTQl9ESVJfSU4gOiBVU0JfRElSX09VVDsKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IChmbGFncyA9PSBEVzIxMFhfUkVBRF9NU0cpID8KKwkJCQl1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSA6IHVzYl9zbmRjdHJscGlwZShkZXYsIDApOworCXU4IHJlcXVlc3RfdHlwZSA9IChmbGFncyA9PSBEVzIxMFhfUkVBRF9NU0cpID8gVVNCX0RJUl9JTiA6IFVTQl9ESVJfT1VUOwogCi0JaWYgKGZsYWdzID09IERXMjEwMl9XUklURV9NU0cpCisJaWYgKGZsYWdzID09IERXMjEwWF9XUklURV9NU0cpCiAJCW1lbWNweSh1OGJ1ZiwgZGF0YSwgbGVuKTsKLQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCBwaXBlLCByZXF1ZXN0LAotCQlyZXF1ZXN0X3R5cGUgfCBVU0JfVFlQRV9WRU5ET1IsIHZhbHVlLCAwICwgdThidWYsIGxlbiwgMjAwMCk7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgcGlwZSwgcmVxdWVzdCwgcmVxdWVzdF90eXBlIHwgVVNCX1RZUEVfVkVORE9SLAorCQkJCXZhbHVlLCBpbmRleCAsIHU4YnVmLCBsZW4sIDIwMDApOwogCi0JaWYgKGZsYWdzID09IERXMjEwMl9SRUFEX01TRykKKwlpZiAoZmxhZ3MgPT0gRFcyMTBYX1JFQURfTVNHKQogCQltZW1jcHkoZGF0YSwgdThidWYsIGxlbik7CiAJcmV0dXJuIHJldDsKIH0KIAogLyogSTJDICovCi0KIHN0YXRpYyBpbnQgZHcyMTAyX2kyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLAogCQlpbnQgbnVtKQogewogc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKIAlpbnQgaSA9IDAsIHJldCA9IDA7CiAJdTggYnVmNltdID0gezB4MmMsIDB4MDUsIDB4YzAsIDAsIDAsIDAsIDB9OwotCXU4IHJlcXVlc3Q7CiAJdTE2IHZhbHVlOwogCiAJaWYgKCFkKQpAQCAtNzYsMTQgKzg5LDEyIEBACiAJc3dpdGNoIChudW0pIHsKIAljYXNlIDI6CiAJCS8qIHJlYWQgc3R2MDI5OSByZWdpc3RlciAqLwotCQlyZXF1ZXN0ID0gMHhiNTsKIAkJdmFsdWUgPSBtc2dbMF0uYnVmWzBdOy8qIHJlZ2lzdGVyICovCiAJCWZvciAoaSA9IDA7IGkgPCBtc2dbMV0ubGVuOyBpKyspIHsKIAkJCXZhbHVlID0gdmFsdWUgKyBpOwotCQkJcmV0ID0gZHcyMTAyX29wX3J3KGQtPnVkZXYsIDB4YjUsCi0JCQkJdmFsdWUsIGJ1ZjYsIDIsIERXMjEwMl9SRUFEX01TRyk7CisJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhiNSwgdmFsdWUsIDAsCisJCQkJCWJ1ZjYsIDIsIERXMjEwWF9SRUFEX01TRyk7CiAJCQltc2dbMV0uYnVmW2ldID0gYnVmNlswXTsKLQogCQl9CiAJCWJyZWFrOwogCWNhc2UgMToKQEAgLTkzLDggKzEwNCw4IEBACiAJCQlidWY2WzBdID0gMHgyYTsKIAkJCWJ1ZjZbMV0gPSBtc2dbMF0uYnVmWzBdOwogCQkJYnVmNlsyXSA9IG1zZ1swXS5idWZbMV07Ci0JCQlyZXQgPSBkdzIxMDJfb3BfcncoZC0+dWRldiwgMHhiMiwKLQkJCQkwLCBidWY2LCAzLCBEVzIxMDJfV1JJVEVfTVNHKTsKKwkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGIyLCAwLCAwLAorCQkJCQlidWY2LCAzLCBEVzIxMFhfV1JJVEVfTVNHKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4NjA6CiAJCQlpZiAobXNnWzBdLmZsYWdzID09IDApIHsKQEAgLTEwNiwyNiArMTE3LDI2IEBACiAJCQkJYnVmNls0XSA9IG1zZ1swXS5idWZbMV07CiAJCQkJYnVmNls1XSA9IG1zZ1swXS5idWZbMl07CiAJCQkJYnVmNls2XSA9IG1zZ1swXS5idWZbM107Ci0JCQkJcmV0ID0gZHcyMTAyX29wX3J3KGQtPnVkZXYsIDB4YjIsCi0JCQkJMCwgYnVmNiwgNywgRFcyMTAyX1dSSVRFX01TRyk7CisJCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YjIsIDAsIDAsCisJCQkJCQlidWY2LCA3LCBEVzIxMFhfV1JJVEVfTVNHKTsKIAkJCX0gZWxzZSB7Ci0JCQkvKiB3cml0ZSB0byB0dW5lciBwbGwgKi8KLQkJCQlyZXQgPSBkdzIxMDJfb3BfcncoZC0+dWRldiwgMHhiNSwKLQkJCQkwLCBidWY2LCAxLCBEVzIxMDJfUkVBRF9NU0cpOworCQkJLyogcmVhZCBmcm9tIHR1bmVyICovCisJCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YjUsIDAsIDAsCisJCQkJCQlidWY2LCAxLCBEVzIxMFhfUkVBRF9NU0cpOwogCQkJCW1zZ1swXS5idWZbMF0gPSBidWY2WzBdOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgKERXMjEwMl9SQ19RVUVSWSk6Ci0JCQlyZXQgID0gZHcyMTAyX29wX3J3KGQtPnVkZXYsIDB4YjgsCi0JCQkJMCwgYnVmNiwgMiwgRFcyMTAyX1JFQURfTVNHKTsKKwkJCXJldCAgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhiOCwgMCwgMCwKKwkJCQkJYnVmNiwgMiwgRFcyMTBYX1JFQURfTVNHKTsKIAkJCW1zZ1swXS5idWZbMF0gPSBidWY2WzBdOwogCQkJbXNnWzBdLmJ1ZlsxXSA9IGJ1ZjZbMV07CiAJCQlicmVhazsKIAkJY2FzZSAoRFcyMTAyX1ZPTFRBR0VfQ1RSTCk6CiAJCQlidWY2WzBdID0gMHgzMDsKIAkJCWJ1ZjZbMV0gPSBtc2dbMF0uYnVmWzBdOwotCQkJcmV0ID0gZHcyMTAyX29wX3J3KGQtPnVkZXYsIDB4YjIsCi0JCQkJMCwgYnVmNiwgMiwgRFcyMTAyX1dSSVRFX01TRyk7CisJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhiMiwgMCwgMCwKKwkJCQkJYnVmNiwgMiwgRFcyMTBYX1dSSVRFX01TRyk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMzYsMTcgKzE0NywyNjUgQEAKIAlyZXR1cm4gbnVtOwogfQogCi1zdGF0aWMgdTMyIGR3MjEwMl9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGR3MjEwMl9zZXJpdF9pMmNfdHJhbnNmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAorCQkJCQkJc3RydWN0IGkyY19tc2cgbXNnW10sIGludCBudW0pCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlpbnQgcmV0ID0gMDsKKwl1OCBidWY2W10gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMH07CisKKwlpZiAoIWQpCisJCXJldHVybiAtRU5PREVWOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXN3aXRjaCAobnVtKSB7CisJY2FzZSAyOgorCQkvKiByZWFkIHNpMjEwOSByZWdpc3RlciBieSBudW1iZXIgKi8KKwkJYnVmNlswXSA9IDB4ZDA7CisJCWJ1ZjZbMV0gPSBtc2dbMF0ubGVuOworCQlidWY2WzJdID0gbXNnWzBdLmJ1ZlswXTsKKwkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YzIsIDAsIDAsCisJCQkJYnVmNiwgbXNnWzBdLmxlbiArIDIsIERXMjEwWF9XUklURV9NU0cpOworCQkvKiByZWFkIHNpMjEwOSByZWdpc3RlciAqLworCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhjMywgMHhkMCwgMCwKKwkJCQlidWY2LCBtc2dbMV0ubGVuICsgMiwgRFcyMTBYX1JFQURfTVNHKTsKKwkJbWVtY3B5KG1zZ1sxXS5idWYsIGJ1ZjYgKyAyLCBtc2dbMV0ubGVuKTsKKworCQlicmVhazsKKwljYXNlIDE6CisJCXN3aXRjaCAobXNnWzBdLmFkZHIpIHsKKwkJY2FzZSAweDY4OgorCQkJLyogd3JpdGUgdG8gc2kyMTA5IHJlZ2lzdGVyICovCisJCQlidWY2WzBdID0gMHhkMDsKKwkJCWJ1ZjZbMV0gPSBtc2dbMF0ubGVuOworCQkJbWVtY3B5KGJ1ZjYgKyAyLCBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuKTsKKwkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGMyLCAwLCAwLCBidWY2LAorCQkJCQltc2dbMF0ubGVuICsgMiwgRFcyMTBYX1dSSVRFX01TRyk7CisJCQlicmVhazsKKwkJY2FzZShEVzIxMDJfUkNfUVVFUlkpOgorCQkJcmV0ICA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGI4LCAwLCAwLAorCQkJCQlidWY2LCAyLCBEVzIxMFhfUkVBRF9NU0cpOworCQkJbXNnWzBdLmJ1ZlswXSA9IGJ1ZjZbMF07CisJCQltc2dbMF0uYnVmWzFdID0gYnVmNlsxXTsKKwkJCWJyZWFrOworCQljYXNlKERXMjEwMl9WT0xUQUdFX0NUUkwpOgorCQkJYnVmNlswXSA9IDB4MzA7CisJCQlidWY2WzFdID0gbXNnWzBdLmJ1ZlswXTsKKwkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGIyLCAwLCAwLAorCQkJCQlidWY2LCAyLCBEVzIxMFhfV1JJVEVfTVNHKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKKwlyZXR1cm4gbnVtOworfQorc3RhdGljIGludCBkdzIxMDJfZWFyZGFfaTJjX3RyYW5zZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgbXNnW10sIGludCBudW0pCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCisJCXJldHVybiAtRUFHQUlOOworCisJc3dpdGNoIChudW0pIHsKKwljYXNlIDI6IHsKKwkJLyogcmVhZCAqLworCQkvKiBmaXJzdCB3cml0ZSBmaXJzdCByZWdpc3RlciBudW1iZXIgKi8KKwkJdTggaWJ1ZiBbbXNnWzFdLmxlbiArIDJdLCBvYnVmWzNdOworCQlvYnVmWzBdID0gMHhkMDsKKwkJb2J1ZlsxXSA9IG1zZ1swXS5sZW47CisJCW9idWZbMl0gPSBtc2dbMF0uYnVmWzBdOworCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhjMiwgMCwgMCwKKwkJCQlvYnVmLCBtc2dbMF0ubGVuICsgMiwgRFcyMTBYX1dSSVRFX01TRyk7CisJCS8qIHNlY29uZCByZWFkIHJlZ2lzdGVycyAqLworCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhjMywgMHhkMSAsIDAsCisJCQkJaWJ1ZiwgbXNnWzFdLmxlbiArIDIsIERXMjEwWF9SRUFEX01TRyk7CisJCW1lbWNweShtc2dbMV0uYnVmLCBpYnVmICsgMiwgbXNnWzFdLmxlbik7CisKKwkJYnJlYWs7CisJfQorCWNhc2UgMToKKwkJc3dpdGNoIChtc2dbMF0uYWRkcikgeworCQljYXNlIDB4Njg6IHsKKwkJCS8qIHdyaXRlIHRvIHJlZ2lzdGVyICovCisJCQl1OCBvYnVmW21zZ1swXS5sZW4gKyAyXTsKKwkJCW9idWZbMF0gPSAweGQwOworCQkJb2J1ZlsxXSA9IG1zZ1swXS5sZW47CisJCQltZW1jcHkob2J1ZiArIDIsIG1zZ1swXS5idWYsIG1zZ1swXS5sZW4pOworCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YzIsIDAsIDAsCisJCQkJCW9idWYsIG1zZ1swXS5sZW4gKyAyLCBEVzIxMFhfV1JJVEVfTVNHKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgMHg2MTogeworCQkJLyogd3JpdGUgdG8gdHVuZXIgKi8KKwkJCXU4IG9idWZbbXNnWzBdLmxlbiArIDJdOworCQkJb2J1ZlswXSA9IDB4YzI7CisJCQlvYnVmWzFdID0gbXNnWzBdLmxlbjsKKwkJCW1lbWNweShvYnVmICsgMiwgbXNnWzBdLmJ1ZiwgbXNnWzBdLmxlbik7CisJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhjMiwgMCwgMCwKKwkJCQkJb2J1ZiwgbXNnWzBdLmxlbiArIDIsIERXMjEwWF9XUklURV9NU0cpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZShEVzIxMDJfUkNfUVVFUlkpOiB7CisJCQl1OCBpYnVmWzJdOworCQkJcmV0ICA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGI4LCAwLCAwLAorCQkJCQlpYnVmLCAyLCBEVzIxMFhfUkVBRF9NU0cpOworCQkJbWVtY3B5KG1zZ1swXS5idWYsIGlidWYgLCAyKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UoRFcyMTAyX1ZPTFRBR0VfQ1RSTCk6IHsKKwkJCXU4IG9idWZbMl07CisJCQlvYnVmWzBdID0gMHgzMDsKKwkJCW9idWZbMV0gPSBtc2dbMF0uYnVmWzBdOworCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YjIsIDAsIDAsCisJCQkJCW9idWYsIDIsIERXMjEwWF9XUklURV9NU0cpOworCQkJYnJlYWs7CisJCX0KKwkJfQorCisJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKKwlyZXR1cm4gbnVtOworfQorCitzdGF0aWMgaW50IGR3MjEwNF9pMmNfdHJhbnNmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dbXSwgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCWludCByZXQgPSAwOworCWludCBsZW4sIGk7CisKKwlpZiAoIWQpCisJCXJldHVybiAtRU5PREVWOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXN3aXRjaCAobnVtKSB7CisJY2FzZSAyOiB7CisJCS8qIHJlYWQgKi8KKwkJLyogZmlyc3Qgd3JpdGUgZmlyc3QgcmVnaXN0ZXIgbnVtYmVyICovCisJCXU4IGlidWYgW21zZ1sxXS5sZW4gKyAyXSwgb2J1ZlszXTsKKwkJb2J1ZlswXSA9IDB4YWE7CisJCW9idWZbMV0gPSBtc2dbMF0ubGVuOworCQlvYnVmWzJdID0gbXNnWzBdLmJ1ZlswXTsKKwkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YzIsIDAsIDAsCisJCQkJb2J1ZiwgbXNnWzBdLmxlbiArIDIsIERXMjEwWF9XUklURV9NU0cpOworCQkvKiBzZWNvbmQgcmVhZCByZWdpc3RlcnMgKi8KKwkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YzMsIDB4YWIgLCAwLAorCQkJCWlidWYsIG1zZ1sxXS5sZW4gKyAyLCBEVzIxMFhfUkVBRF9NU0cpOworCQltZW1jcHkobXNnWzFdLmJ1ZiwgaWJ1ZiArIDIsIG1zZ1sxXS5sZW4pOworCisJCWJyZWFrOworCX0KKwljYXNlIDE6CisJCXN3aXRjaCAobXNnWzBdLmFkZHIpIHsKKwkJY2FzZSAweDU1OiB7CisJCQlpZiAobXNnWzBdLmJ1ZlswXSA9PSAweGY3KSB7CisJCQkJLyogZmlybXdhcmUgKi8KKwkJCQkvKiBXcml0ZSBpbiBzbWFsbCBibG9ja3MgKi8KKwkJCQl1OCBvYnVmWzE5XTsKKwkJCQlvYnVmWzBdID0gMHhhYTsKKwkJCQlvYnVmWzFdID0gMHgxMTsKKwkJCQlvYnVmWzJdID0gMHhmNzsKKwkJCQlsZW4gPSBtc2dbMF0ubGVuIC0gMTsKKwkJCQlpID0gMTsKKwkJCQlkbyB7CisJCQkJCW1lbWNweShvYnVmICsgMywgbXNnWzBdLmJ1ZiArIGksIChsZW4gPiAxNiA/IDE2IDogbGVuKSk7CisJCQkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGMyLCAwLCAwLAorCQkJCQkJb2J1ZiwgKGxlbiA+IDE2ID8gMTYgOiBsZW4pICsgMywgRFcyMTBYX1dSSVRFX01TRyk7CisJCQkJCWkgKz0gMTY7CisJCQkJCWxlbiAtPSAxNjsKKwkJCQl9IHdoaWxlIChsZW4gPiAwKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogd3JpdGUgdG8gcmVnaXN0ZXIgKi8KKwkJCQl1OCBvYnVmW21zZ1swXS5sZW4gKyAyXTsKKwkJCQlvYnVmWzBdID0gMHhhYTsKKwkJCQlvYnVmWzFdID0gbXNnWzBdLmxlbjsKKwkJCQltZW1jcHkob2J1ZiArIDIsIG1zZ1swXS5idWYsIG1zZ1swXS5sZW4pOworCQkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGMyLCAwLCAwLAorCQkJCQkJb2J1ZiwgbXNnWzBdLmxlbiArIDIsIERXMjEwWF9XUklURV9NU0cpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJY2FzZShEVzIxMDJfUkNfUVVFUlkpOiB7CisJCQl1OCBpYnVmWzJdOworCQkJcmV0ICA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGI4LCAwLCAwLAorCQkJCQlpYnVmLCAyLCBEVzIxMFhfUkVBRF9NU0cpOworCQkJbWVtY3B5KG1zZ1swXS5idWYsIGlidWYgLCAyKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UoRFcyMTAyX1ZPTFRBR0VfQ1RSTCk6IHsKKwkJCXU4IG9idWZbMl07CisJCQlvYnVmWzBdID0gMHgzMDsKKwkJCW9idWZbMV0gPSBtc2dbMF0uYnVmWzBdOworCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YjIsIDAsIDAsCisJCQkJCW9idWYsIDIsIERXMjEwWF9XUklURV9NU0cpOworCQkJYnJlYWs7CisJCX0KKwkJfQorCisJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKKwlyZXR1cm4gbnVtOworfQorCitzdGF0aWMgdTMyIGR3MjEweF9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJcmV0dXJuIEkyQ19GVU5DX0kyQzsKIH0KIAogc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGR3MjEwMl9pMmNfYWxnbyA9IHsKIAkubWFzdGVyX3hmZXIgPSBkdzIxMDJfaTJjX3RyYW5zZmVyLAotCS5mdW5jdGlvbmFsaXR5ID0gZHcyMTAyX2kyY19mdW5jLAorCS5mdW5jdGlvbmFsaXR5ID0gZHcyMTB4X2kyY19mdW5jLAogfTsKIAotc3RhdGljIGludCBkdzIxMDJfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBkdzIxMDJfc2VyaXRfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyID0gZHcyMTAyX3Nlcml0X2kyY190cmFuc2ZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGR3MjEweF9pMmNfZnVuYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBkdzIxMDJfZWFyZGFfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyID0gZHcyMTAyX2VhcmRhX2kyY190cmFuc2ZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGR3MjEweF9pMmNfZnVuYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBkdzIxMDRfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyID0gZHcyMTA0X2kyY190cmFuc2ZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGR3MjEweF9pMmNfZnVuYywKK307CisKK3N0YXRpYyBpbnQgZHcyMTB4X3JlYWRfbWFjX2FkZHJlc3Moc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCBtYWNbNl0pCit7CisJaW50IGk7CisJdTggaWJ1ZltdID0gezAsIDB9OworCXU4IGVlcHJvbVsyNTZdLCBlZXByb21saW5lWzE2XTsKKworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlpZiAoZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YjYsIDB4YTAgLCBpLCBpYnVmLCAyLCBEVzIxMFhfUkVBRF9NU0cpIDwgMCkgeworCQkJZXJyKCJyZWFkIGVlcHJvbSBmYWlsZWQuIik7CisJCQlyZXR1cm4gLTE7CisJCX0gZWxzZSB7CisJCQllZXByb21saW5lW2klMTZdID0gaWJ1ZlswXTsKKwkJCWVlcHJvbVtpXSA9IGlidWZbMF07CisJCX0KKwkJaWYgKChpICUgMTYpID09IDE1KSB7CisJCQlkZWJfeGZlcigiJTAyeDogIiwgaSAtIDE1KTsKKwkJCWRlYnVnX2R1bXAoZWVwcm9tbGluZSwgMTYsIGRlYl94ZmVyKTsKKwkJfQorCX0KKwltZW1jcHkobWFjLCBlZXByb20gKyA4LCA2KTsKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgZHcyMTB4X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7CiAJc3RhdGljIHU4IGNvbW1hbmRfMTN2WzFdID0gezB4MDB9OwogCXN0YXRpYyB1OCBjb21tYW5kXzE4dlsxXSA9IHsweDAxfTsKQEAgLTE2MywxNCArNDIyLDc0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgc2hhcnBfejAxOTRhX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCisJLmluaXR0YWIgPSBzaGFycF96MDE5NGFfaW5pdHRhYiwKKwkubWNsayA9IDg4MDAwMDAwVUwsCisJLmludmVydCA9IDEsCisJLnNraXBfcmVpbml0ID0gMCwKKwkubG9ja19vdXRwdXQgPSBTVFYwMjk5X0xPQ0tPVVRQVVRfMSwKKwkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCisJLm1pbl9kZWxheV9tcyA9IDEwMCwKKwkuc2V0X3N5bWJvbF9yYXRlID0gc2hhcnBfejAxOTRhX3NldF9zeW1ib2xfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3gyNDExNl9jb25maWcgZHcyMTA0X2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NTUsCisJLm1wZ19jbGtfcG9zX3BvbCA9IDB4MDEsCit9OworCitzdGF0aWMgc3RydWN0IHNpMjF4eF9jb25maWcgc2VyaXRfc3AxNTExbGhiX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCisJLm1pbl9kZWxheV9tcyA9IDEwMCwKKworfTsKKworc3RhdGljIGludCBkdzIxMDRfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmQpCit7CisJaWYgKChkLT5mZSA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsICZkdzIxMDRfY29uZmlnLAorCQkJJmQtPmRldi0+aTJjX2FkYXApKSAhPSBOVUxMKSB7CisJCWQtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkdzIxMHhfc2V0X3ZvbHRhZ2U7CisJCWluZm8oIkF0dGFjaGVkIGN4MjQxMTYhXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZHcyMTAyX3Byb3BlcnRpZXM7CisKIHN0YXRpYyBpbnQgZHcyMTAyX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICpkKQogewotCWQtPmZlID0gZHZiX2F0dGFjaChzdHYwMjk5X2F0dGFjaCwgJnNoYXJwX3owMTk0YV9jb25maWcsCi0JCSZkLT5kZXYtPmkyY19hZGFwKTsKLQlpZiAoZC0+ZmUgIT0gTlVMTCkgewotCQlkLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZHcyMTAyX3NldF92b2x0YWdlOwotCQlpbmZvKCJBdHRhY2hlZCBzdHYwMjk5IVxuIik7Ci0JCXJldHVybiAwOworCWlmIChkdzIxMDJfcHJvcGVydGllcy5pMmNfYWxnbyA9PSAmZHcyMTAyX3Nlcml0X2kyY19hbGdvKSB7CisJCS8qZHcyMTAyX3Byb3BlcnRpZXMuYWRhcHRlci0+dHVuZXJfYXR0YWNoID0gTlVMTDsqLworCQlkLT5mZSA9IGR2Yl9hdHRhY2goc2kyMXh4X2F0dGFjaCwgJnNlcml0X3NwMTUxMWxoYl9jb25maWcsCisJCQkJCSZkLT5kZXYtPmkyY19hZGFwKTsKKwkJaWYgKGQtPmZlICE9IE5VTEwpIHsKKwkJCWQtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkdzIxMHhfc2V0X3ZvbHRhZ2U7CisJCQlpbmZvKCJBdHRhY2hlZCBzaTIxeHghXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCWlmIChkdzIxMDJfcHJvcGVydGllcy5pMmNfYWxnbyA9PSAmZHcyMTAyX2VhcmRhX2kyY19hbGdvKSB7CisJCS8qZHcyMTAyX3Byb3BlcnRpZXMuYWRhcHRlci0+dHVuZXJfYXR0YWNoID0gZHcyMTAyX3R1bmVyX2F0dGFjaDsqLworCQlkLT5mZSA9IGR2Yl9hdHRhY2goc3R2MDI4OF9hdHRhY2gsICZlYXJkYV9jb25maWcsCisJCQkJCSZkLT5kZXYtPmkyY19hZGFwKTsKKwkJaWYgKGQtPmZlICE9IE5VTEwpIHsKKwkJCWQtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkdzIxMHhfc2V0X3ZvbHRhZ2U7CisJCQlpbmZvKCJBdHRhY2hlZCBzdHYwMjg4IVxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWlmIChkdzIxMDJfcHJvcGVydGllcy5pMmNfYWxnbyA9PSAmZHcyMTAyX2kyY19hbGdvKSB7CisJCS8qZHcyMTAyX3Byb3BlcnRpZXMuYWRhcHRlci0+dHVuZXJfYXR0YWNoID0gZHcyMTAyX3R1bmVyX2F0dGFjaDsqLworCQlkLT5mZSA9IGR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsICZzaGFycF96MDE5NGFfY29uZmlnLAorCQkJCQkmZC0+ZGV2LT5pMmNfYWRhcCk7CisJCWlmIChkLT5mZSAhPSBOVUxMKSB7CisJCQlkLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZHcyMTB4X3NldF92b2x0YWdlOworCQkJaW5mbygiQXR0YWNoZWQgc3R2MDI5OSFcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAJcmV0dXJuIC1FSU87CiB9CkBAIC0xODIsNyArNTAxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgZHcyMTAyX3JjX2tleXNbXSA9IHsKK3N0YXRpYyBpbnQgZHcyMTAyX2VhcmRhX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWR2Yl9hdHRhY2goc3RiNjAwMF9hdHRhY2gsIGFkYXAtPmZlLCAweDYxLAorCQkmYWRhcC0+ZGV2LT5pMmNfYWRhcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBkdzIxMHhfcmNfa2V5c1tdID0gewogCXsgMHhmOCwJMHgwYSwgS0VZX1EgfSwJCS8qcG93ZXIqLwogCXsgMHhmOCwJMHgwYywgS0VZX00gfSwJCS8qbXV0ZSovCiAJeyAweGY4LAkweDExLCBLRVlfMSB9LApAQCAtMjIxLDcgKzU0OCw3IEBACiAKIHN0YXRpYyBpbnQgZHcyMTAyX3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgZHcyMTAyX3N0YXRlICpzdCA9IGQtPnByaXY7CisJc3RydWN0IGR3MjEweF9zdGF0ZSAqc3QgPSBkLT5wcml2OwogCXU4IGtleVsyXTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKIAkJey5hZGRyID0gRFcyMTAyX1JDX1FVRVJZLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGtleSwKQEAgLTIzMSwxMiArNTU4LDEyIEBACiAKIAkqc3RhdGUgPSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ7CiAJaWYgKGR3MjEwMl9pMmNfdHJhbnNmZXIoJmQtPmkyY19hZGFwLCBtc2csIDEpID09IDEpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHcyMTAyX3JjX2tleXMpOyBpKyspIHsKLQkJCWlmIChkdzIxMDJfcmNfa2V5c1tpXS5kYXRhID09IG1zZ1swXS5idWZbMF0pIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHcyMTB4X3JjX2tleXMpOyBpKyspIHsKKwkJCWlmIChkdzIxMHhfcmNfa2V5c1tpXS5kYXRhID09IG1zZ1swXS5idWZbMF0pIHsKIAkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7Ci0JCQkJKmV2ZW50ID0gZHcyMTAyX3JjX2tleXNbaV0uZXZlbnQ7CisJCQkJKmV2ZW50ID0gZHcyMTB4X3JjX2tleXNbaV0uZXZlbnQ7CiAJCQkJc3QtPmxhc3Rfa2V5X3ByZXNzZWQgPQotCQkJCQlkdzIxMDJfcmNfa2V5c1tpXS5ldmVudDsKKwkJCQkJZHcyMTB4X3JjX2tleXNbaV0uZXZlbnQ7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCXN0LT5sYXN0X2tleV9wcmVzc2VkID0gMDsKQEAgLTI0OSw2ICs1NzYsOCBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGR3MjEwMl90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKFVTQl9WSURfQ1lQUkVTUywgVVNCX1BJRF9EVzIxMDIpfSwKIAl7VVNCX0RFVklDRShVU0JfVklEX0NZUFJFU1MsIDB4MjEwMSl9LAorCXtVU0JfREVWSUNFKFVTQl9WSURfQ1lQUkVTUywgMHgyMTA0KX0sCisJe1VTQl9ERVZJQ0UoMHg5MDIyLCAweGQ2NTApfSwKIAl7IH0KIH07CiAKQEAgLTI2MCw3ICs1ODksNyBAQAogCXU4ICpiLCAqcDsKIAlpbnQgcmV0ID0gMCwgaTsKIAl1OCByZXNldDsKLQl1OCByZXNldDE2IFtdID0gezAsIDAsIDAsIDAsIDAsIDAsIDB9OworCXU4IHJlc2V0MTZbXSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwfTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gImR2Yi11c2ItZHcyMTAxLmZ3IjsKIAlzd2l0Y2ggKGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpIHsKQEAgLTI3MywyNSArNjAyLDIzIEBACiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCWJyZWFrOwotCWNhc2UgVVNCX1BJRF9EVzIxMDI6CisJZGVmYXVsdDoKIAkJZncgPSBmcm13cjsKIAkJYnJlYWs7CiAJfQotCWluZm8oInN0YXJ0IGRvd25sb2FkaW5nIERXMjEwMiBmaXJtd2FyZSIpOworCWluZm8oInN0YXJ0IGRvd25sb2FkaW5nIERXMjEwWCBmaXJtd2FyZSIpOwogCXAgPSBrbWFsbG9jKGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKIAlyZXNldCA9IDE7CiAJLypzdG9wIHRoZSBDUFUqLwotCWR3MjEwMl9vcF9ydyhkZXYsIDB4YTAsIDB4N2Y5MiwgJnJlc2V0LCAxLCBEVzIxMDJfV1JJVEVfTVNHKTsKLQlkdzIxMDJfb3BfcncoZGV2LCAweGEwLCAweGU2MDAsICZyZXNldCwgMSwgRFcyMTAyX1dSSVRFX01TRyk7CisJZHcyMTB4X29wX3J3KGRldiwgMHhhMCwgMHg3ZjkyLCAwLCAmcmVzZXQsIDEsIERXMjEwWF9XUklURV9NU0cpOworCWR3MjEweF9vcF9ydyhkZXYsIDB4YTAsIDB4ZTYwMCwgMCwgJnJlc2V0LCAxLCBEVzIxMFhfV1JJVEVfTVNHKTsKIAogCWlmIChwICE9IE5VTEwpIHsKIAkJbWVtY3B5KHAsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CiAJCWZvciAoaSA9IDA7IGkgPCBmdy0+c2l6ZTsgaSArPSAweDQwKSB7CiAJCQliID0gKHU4ICopIHAgKyBpOwotCQkJaWYgKGR3MjEwMl9vcF9ydwotCQkJCShkZXYsIDB4YTAsIGksIGIgLCAweDQwLAotCQkJCQlEVzIxMDJfV1JJVEVfTVNHKSAhPSAweDQwCi0JCQkJKSB7CisJCQlpZiAoZHcyMTB4X29wX3J3KGRldiwgMHhhMCwgaSwgMCwgYiAsIDB4NDAsCisJCQkJCURXMjEwWF9XUklURV9NU0cpICE9IDB4NDApIHsKIAkJCQllcnIoImVycm9yIHdoaWxlIHRyYW5zZmVycmluZyBmaXJtd2FyZSIpOwogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQkJYnJlYWs7CkBAIC0yOTksNDMgKzYyNiw2NiBAQAogCQl9CiAJCS8qIHJlc3RhcnQgdGhlIENQVSAqLwogCQlyZXNldCA9IDA7Ci0JCWlmIChyZXQgfHwgZHcyMTAyX29wX3J3Ci0JCQkoZGV2LCAweGEwLCAweDdmOTIsICZyZXNldCwgMSwKLQkJCURXMjEwMl9XUklURV9NU0cpICE9IDEpIHsKKwkJaWYgKHJldCB8fCBkdzIxMHhfb3BfcncoZGV2LCAweGEwLCAweDdmOTIsIDAsICZyZXNldCwgMSwKKwkJCQkJRFcyMTBYX1dSSVRFX01TRykgIT0gMSkgewogCQkJZXJyKCJjb3VsZCBub3QgcmVzdGFydCB0aGUgVVNCIGNvbnRyb2xsZXIgQ1BVLiIpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJfQotCQlpZiAocmV0IHx8IGR3MjEwMl9vcF9ydwotCQkJKGRldiwgMHhhMCwgMHhlNjAwLCAmcmVzZXQsIDEsCi0JCQlEVzIxMDJfV1JJVEVfTVNHKSAhPSAxKSB7CisJCWlmIChyZXQgfHwgZHcyMTB4X29wX3J3KGRldiwgMHhhMCwgMHhlNjAwLCAwLCAmcmVzZXQsIDEsCisJCQkJCURXMjEwWF9XUklURV9NU0cpICE9IDEpIHsKIAkJCWVycigiY291bGQgbm90IHJlc3RhcnQgdGhlIFVTQiBjb250cm9sbGVyIENQVS4iKTsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCX0KIAkJLyogaW5pdCByZWdpc3RlcnMgKi8KIAkJc3dpdGNoIChkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSB7Ci0JCWNhc2UgVVNCX1BJRF9EVzIxMDI6Ci0JCQlkdzIxMDJfb3BfcncKLQkJCQkoZGV2LCAweGJmLCAweDAwNDAsICZyZXNldCwgMCwKLQkJCQlEVzIxMDJfV1JJVEVfTVNHKTsKLQkJCWR3MjEwMl9vcF9ydwotCQkJCShkZXYsIDB4YjksIDB4MDAwMCwgJnJlc2V0MTZbMF0sIDIsCi0JCQkJRFcyMTAyX1JFQURfTVNHKTsKKwkJY2FzZSBVU0JfUElEX0RXMjEwNDoKKwkJY2FzZSAweGQ2NTA6CisJCQlyZXNldCA9IDE7CisJCQlkdzIxMHhfb3BfcncoZGV2LCAweGM0LCAweDAwMDAsIDAsICZyZXNldCwgMSwKKwkJCQkJRFcyMTBYX1dSSVRFX01TRyk7CisJCQlyZXNldCA9IDA7CisJCQlkdzIxMHhfb3BfcncoZGV2LCAweGJmLCAweDAwNDAsIDAsICZyZXNldCwgMCwKKwkJCQkJRFcyMTBYX1dSSVRFX01TRyk7CiAJCQlicmVhazsKKwkJY2FzZSBVU0JfUElEX0RXMjEwMjoKKwkJCWR3MjEweF9vcF9ydyhkZXYsIDB4YmYsIDB4MDA0MCwgMCwgJnJlc2V0LCAwLAorCQkJCQlEVzIxMFhfV1JJVEVfTVNHKTsKKwkJCWR3MjEweF9vcF9ydyhkZXYsIDB4YjksIDB4MDAwMCwgMCwgJnJlc2V0MTZbMF0sIDIsCisJCQkJCURXMjEwWF9SRUFEX01TRyk7CisJCQkvKiBjaGVjayBTVFYwMjk5IGZyb250ZW5kICAqLworCQkJZHcyMTB4X29wX3J3KGRldiwgMHhiNSwgMCwgMCwgJnJlc2V0MTZbMF0sIDIsCisJCQkJCURXMjEwWF9SRUFEX01TRyk7CisJCQlpZiAocmVzZXQxNlswXSA9PSAweGExKSB7CisJCQkJZHcyMTAyX3Byb3BlcnRpZXMuaTJjX2FsZ28gPSAmZHcyMTAyX2kyY19hbGdvOworCQkJCWR3MjEwMl9wcm9wZXJ0aWVzLmFkYXB0ZXItPnR1bmVyX2F0dGFjaCA9ICZkdzIxMDJfdHVuZXJfYXR0YWNoOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQkvKiBjaGVjayBTVFYwMjg4IGZyb250ZW5kICAqLworCQkJCXJlc2V0MTZbMF0gPSAweGQwOworCQkJCXJlc2V0MTZbMV0gPSAxOworCQkJCXJlc2V0MTZbMl0gPSAwOworCQkJCWR3MjEweF9vcF9ydyhkZXYsIDB4YzIsIDAsIDAsICZyZXNldDE2WzBdLCAzLAorCQkJCQkJRFcyMTBYX1dSSVRFX01TRyk7CisJCQkJZHcyMTB4X29wX3J3KGRldiwgMHhjMywgMHhkMSwgMCwgJnJlc2V0MTZbMF0sIDMsCisJCQkJCQlEVzIxMFhfUkVBRF9NU0cpOworCQkJCWlmIChyZXNldDE2WzJdID09IDB4MTEpIHsKKwkJCQkJZHcyMTAyX3Byb3BlcnRpZXMuaTJjX2FsZ28gPSAmZHcyMTAyX2VhcmRhX2kyY19hbGdvOworCQkJCQlkdzIxMDJfcHJvcGVydGllcy5hZGFwdGVyLT50dW5lcl9hdHRhY2ggPSAmZHcyMTAyX2VhcmRhX3R1bmVyX2F0dGFjaDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQogCQljYXNlIDB4MjEwMToKLQkJCWR3MjEwMl9vcF9ydwotCQkJCShkZXYsIDB4YmMsIDB4MDAzMCwgJnJlc2V0MTZbMF0sIDIsCi0JCQkJRFcyMTAyX1JFQURfTVNHKTsKLQkJCWR3MjEwMl9vcF9ydwotCQkJCShkZXYsIDB4YmEsIDB4MDAwMCwgJnJlc2V0MTZbMF0sIDcsCi0JCQkJRFcyMTAyX1JFQURfTVNHKTsKLQkJCWR3MjEwMl9vcF9ydwotCQkJCShkZXYsIDB4YmEsIDB4MDAwMCwgJnJlc2V0MTZbMF0sIDcsCi0JCQkJRFcyMTAyX1JFQURfTVNHKTsKLQkJCWR3MjEwMl9vcF9ydwotCQkJCShkZXYsIDB4YjksIDB4MDAwMCwgJnJlc2V0MTZbMF0sIDIsCi0JCQkJRFcyMTAyX1JFQURfTVNHKTsKKwkJCWR3MjEweF9vcF9ydyhkZXYsIDB4YmMsIDB4MDAzMCwgMCwgJnJlc2V0MTZbMF0sIDIsCisJCQkJCURXMjEwWF9SRUFEX01TRyk7CisJCQlkdzIxMHhfb3BfcncoZGV2LCAweGJhLCAweDAwMDAsIDAsICZyZXNldDE2WzBdLCA3LAorCQkJCQlEVzIxMFhfUkVBRF9NU0cpOworCQkJZHcyMTB4X29wX3J3KGRldiwgMHhiYSwgMHgwMDAwLCAwLCAmcmVzZXQxNlswXSwgNywKKwkJCQkJRFcyMTBYX1JFQURfTVNHKTsKKwkJCWR3MjEweF9vcF9ydyhkZXYsIDB4YjksIDB4MDAwMCwgMCwgJnJlc2V0MTZbMF0sIDIsCisJCQkJCURXMjEwWF9SRUFEX01TRyk7CiAJCQlicmVhazsKIAkJfQorCQltc2xlZXAoMTAwKTsKIAkJa2ZyZWUocCk7CiAJfQogCXJldHVybiByZXQ7CkBAIC0zNDUsMTIgKzY5NSwxMiBAQAogCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKIAkudXNiX2N0cmwgPSBERVZJQ0VfU1BFQ0lGSUMsCiAJLmZpcm13YXJlID0gImR2Yi11c2ItZHcyMTAyLmZ3IiwKLQkuc2l6ZV9vZl9wcml2ID0gc2l6ZW9mKHN0cnVjdCBkdzIxMDJfc3RhdGUpLAorCS5zaXplX29mX3ByaXYgPSBzaXplb2Yoc3RydWN0IGR3MjEweF9zdGF0ZSksCiAJLm5vX3JlY29ubmVjdCA9IDEsCiAKLQkuaTJjX2FsZ28gPSAmZHcyMTAyX2kyY19hbGdvLAotCS5yY19rZXlfbWFwID0gZHcyMTAyX3JjX2tleXMsCi0JLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoZHcyMTAyX3JjX2tleXMpLAorCS5pMmNfYWxnbyA9ICZkdzIxMDJfc2VyaXRfaTJjX2FsZ28sCisJLnJjX2tleV9tYXAgPSBkdzIxMHhfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShkdzIxMHhfcmNfa2V5cyksCiAJLnJjX2ludGVydmFsID0gMTUwLAogCS5yY19xdWVyeSA9IGR3MjEwMl9yY19xdWVyeSwKIApAQCAtMzU4LDExICs3MDgsMTIgQEAKIAkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCiAJLm51bV9hZGFwdGVycyA9IDEsCiAJLmRvd25sb2FkX2Zpcm13YXJlID0gZHcyMTAyX2xvYWRfZmlybXdhcmUsCi0JLmFkYXB0ZXIgPSB7CisJLnJlYWRfbWFjX2FkZHJlc3MgPSBkdzIxMHhfcmVhZF9tYWNfYWRkcmVzcywKKwkJLmFkYXB0ZXIgPSB7CiAJCXsKIAkJCS5mcm9udGVuZF9hdHRhY2ggPSBkdzIxMDJfZnJvbnRlbmRfYXR0YWNoLAogCQkJLnN0cmVhbWluZ19jdHJsID0gTlVMTCwKLQkJCS50dW5lcl9hdHRhY2ggPSBkdzIxMDJfdHVuZXJfYXR0YWNoLAorCQkJLnR1bmVyX2F0dGFjaCA9IE5VTEwsCiAJCQkuc3RyZWFtID0gewogCQkJCS50eXBlID0gVVNCX0JVTEssCiAJCQkJLmNvdW50ID0gOCwKQEAgLTM4OCwxMSArNzM5LDY0IEBACiAJfQogfTsKIAorc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGR3MjEwNF9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKwkudXNiX2N0cmwgPSBERVZJQ0VfU1BFQ0lGSUMsCisJLmZpcm13YXJlID0gImR2Yi11c2ItZHcyMTA0LmZ3IiwKKwkuc2l6ZV9vZl9wcml2ID0gc2l6ZW9mKHN0cnVjdCBkdzIxMHhfc3RhdGUpLAorCS5ub19yZWNvbm5lY3QgPSAxLAorCisJLmkyY19hbGdvID0gJmR3MjEwNF9pMmNfYWxnbywKKwkucmNfa2V5X21hcCA9IGR3MjEweF9yY19rZXlzLAorCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGR3MjEweF9yY19rZXlzKSwKKwkucmNfaW50ZXJ2YWwgPSAxNTAsCisJLnJjX3F1ZXJ5ID0gZHcyMTAyX3JjX3F1ZXJ5LAorCisJLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50ID0gMHg4MSwKKwkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmRvd25sb2FkX2Zpcm13YXJlID0gZHcyMTAyX2xvYWRfZmlybXdhcmUsCisJLnJlYWRfbWFjX2FkZHJlc3MgPSBkdzIxMHhfcmVhZF9tYWNfYWRkcmVzcywKKwkuYWRhcHRlciA9IHsKKwkJeworCQkJLmZyb250ZW5kX2F0dGFjaCA9IGR3MjEwNF9mcm9udGVuZF9hdHRhY2gsCisJCQkuc3RyZWFtaW5nX2N0cmwgPSBOVUxMLAorCQkJLyoudHVuZXJfYXR0YWNoID0gZHcyMTA0X3R1bmVyX2F0dGFjaCwqLworCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkJCS5jb3VudCA9IDgsCisJCQkJLmVuZHBvaW50ID0gMHg4MiwKKwkJCQkudSA9IHsKKwkJCQkJLmJ1bGsgPSB7CisJCQkJCQkuYnVmZmVyc2l6ZSA9IDQwOTYsCisJCQkJCX0KKwkJCQl9CisJCQl9LAorCQl9CisJfSwKKwkubnVtX2RldmljZV9kZXNjcyA9IDIsCisJLmRldmljZXMgPSB7CisJCXsgIkRWQldvcmxkIERXMjEwNCBVU0IyLjAiLAorCQkJeyZkdzIxMDJfdGFibGVbMl0sIE5VTEx9LAorCQkJe05VTEx9LAorCQl9LAorCQl7ICJUZVZpaSBTNjUwIFVTQjIuMCIsCisJCQl7JmR3MjEwMl90YWJsZVszXSwgTlVMTH0sCisJCQl7TlVMTH0sCisJCX0sCisJfQorfTsKKwogc3RhdGljIGludCBkdzIxMDJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlyZXR1cm4gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmZHcyMTAyX3Byb3BlcnRpZXMsCi0JCVRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKTsKKwlpZiAoMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZkdzIxMDJfcHJvcGVydGllcywKKwkJCVRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAorCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmR3MjEwNF9wcm9wZXJ0aWVzLAorCQkJVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpKSB7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGR3MjEwMl9kcml2ZXIgPSB7CkBAIC00MjAsNiArODI0LDYgQEAKIG1vZHVsZV9leGl0KGR3MjEwMl9tb2R1bGVfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIklnb3IgTS4gTGlwbGlhbmluIChjKSBsaXBsaWFuaW5AbWUuYnkiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBEVkJXb3JsZCBEVkItUyAyMTAxIDIxMDIgVVNCMi4wIGRldmljZSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIERWQldvcmxkIERWQi1TIDIxMDEsIDIxMDIsIERWQi1TMiAyMTA0IFVTQjIuMCBkZXZpY2UiKTsKIE1PRFVMRV9WRVJTSU9OKCIwLjEiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5oCmluZGV4IDdhMzEwZjkuLmUzMzcwNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuaApAQCAtNCw2ICs0LDUgQEAKICNkZWZpbmUgRFZCX1VTQl9MT0dfUFJFRklYICJkdzIxMDIiCiAjaW5jbHVkZSAiZHZiLXVzYi5oIgogCi1leHRlcm4gaW50IGR2Yl91c2JfZHcyMTAyX2RlYnVnOwogI2RlZmluZSBkZWJfeGZlcihhcmdzLi4uKSBkcHJpbnRrKGR2Yl91c2JfZHcyMTAyX2RlYnVnLCAweDAyLCBhcmdzKQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IDdkYmI0YTIuLjk2YjkzZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC00Myw2ICs0MywyMCBAQAogCWhlbHAKIAkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorY29uZmlnIERWQl9TVFYwMjg4CisJdHJpc3RhdGUgIlNUIFNUVjAyODggYmFzZWQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKworY29uZmlnIERWQl9TVEI2MDAwCisJdHJpc3RhdGUgIlNUIFNUQjYwMDAgc2lsaWNvbiB0dW5lciIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJICBoZWxwCisJICBBIERWQi1TIHNpbGljb24gdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyB0dW5lci4KKwogY29uZmlnIERWQl9TVFYwMjk5CiAJdHJpc3RhdGUgIlNUIFNUVjAyOTkgYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKQEAgLTkyLDYgKzEwNiwyMCBAQAogCWhlbHAKIAkgIEEgRFZCLVMgUExMIGNoaXAuCiAKK2NvbmZpZyBEVkJfQ1gyNDExNgorCXRyaXN0YXRlICJDb25leGFudCBDWDI0MTE2IGJhc2VkIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBBIERWQi1TL1MyIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisKK2NvbmZpZyBEVkJfU0kyMVhYCisJdHJpc3RhdGUgIlNpbGljb24gTGFicyBTSTIxWFggYmFzZWQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKwogY29tbWVudCAiRFZCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCkBAIC0zODUsNCArNDEzLDIzIEBACiAJaGVscAogCSAgQW4gU0VDIGNvbnRyb2wgY2hpcC4KIAorY29uZmlnIERWQl9MR1M4R0w1CisJdHJpc3RhdGUgIlNpbGljb24gTGVnZW5kIExHUy04R0w1IGRlbW9kdWxhdG9yIChPRkRNKSIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQSBETUItVEggdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKworY29tbWVudCAiVG9vbHMgdG8gZGV2ZWxvcCBuZXcgZnJvbnRlbmRzIgorCitjb25maWcgRFZCX0RVTU1ZX0ZFCisJdHJpc3RhdGUgIkR1bW15IGZyb250ZW5kIGRyaXZlciIKKwlkZWZhdWx0IG4KKworY29uZmlnIERWQl9BRjkwMTMKKwl0cmlzdGF0ZSAiQWZhdGVjaCBBRjkwMTMgZGVtb2R1bGF0b3IiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCmluZGV4IDAyOGRhNTUuLmFiYTc5ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKQEAgLTQ4LDMgKzQ4LDEwIEBACiBvYmotJChDT05GSUdfRFZCX0FVODUyMikgKz0gYXU4NTIyLm8KIG9iai0kKENPTkZJR19EVkJfVERBMTAwNDgpICs9IHRkYTEwMDQ4Lm8KIG9iai0kKENPTkZJR19EVkJfUzVIMTQxMSkgKz0gczVoMTQxMS5vCitvYmotJChDT05GSUdfRFZCX0xHUzhHTDUpICs9IGxnczhnbDUubworb2JqLSQoQ09ORklHX0RWQl9EVU1NWV9GRSkgKz0gZHZiX2R1bW15X2ZlLm8KK29iai0kKENPTkZJR19EVkJfQUY5MDEzKSArPSBhZjkwMTMubworb2JqLSQoQ09ORklHX0RWQl9DWDI0MTE2KSArPSBjeDI0MTE2Lm8KK29iai0kKENPTkZJR19EVkJfU0kyMVhYKSArPSBzaTIxeHgubworb2JqLSQoQ09ORklHX0RWQl9TVFYwMjg4KSArPSBzdHYwMjg4Lm8KK29iai0kKENPTkZJR19EVkJfU1RCNjAwMCkgKz0gc3RiNjAwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFjMTA2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuYwpAQCAtMCwwICsxLDE2ODUgQEAKKy8qCisgKiBEVkIgVVNCIExpbnV4IGRyaXZlciBmb3IgQWZhdGVjaCBBRjkwMTUgRFZCLVQgVVNCMi4wIHJlY2VpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgorICoKKyAqIFRoYW5rcyB0byBBZmF0ZWNoIHdobyBraW5kbHkgcHJvdmlkZWQgaW5mb3JtYXRpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiYWY5MDEzX3ByaXYuaCIKKyNpbmNsdWRlICJhZjkwMTMuaCIKKworaW50IGFmOTAxM19kZWJ1ZzsKKworc3RydWN0IGFmOTAxM19zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKKworCXN0cnVjdCBhZjkwMTNfY29uZmlnIGNvbmZpZzsKKworCXUxNiBzaWduYWxfc3RyZW5ndGg7CisJdTMyIGJlcjsKKwl1MzIgdWNibG9ja3M7CisJdTE2IHNucjsKKwl1MzIgZnJlcXVlbmN5OworCXVuc2lnbmVkIGxvbmcgbmV4dF9zdGF0aXN0aWNzX2NoZWNrOworfTsKKworc3RhdGljIHU4IHJlZ21hc2tbOF0gPSB7IDB4MDEsIDB4MDMsIDB4MDcsIDB4MGYsIDB4MWYsIDB4M2YsIDB4N2YsIDB4ZmYgfTsKKworc3RhdGljIGludCBhZjkwMTNfd3JpdGVfcmVncyhzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSwgdTggbWJveCwgdTE2IHJlZywKKwl1OCAqdmFsLCB1OCBsZW4pCit7CisJdTggYnVmWzMrbGVuXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gc3RhdGUtPmNvbmZpZy5kZW1vZF9hZGRyZXNzLAorCQkuZmxhZ3MgPSAwLAorCQkubGVuID0gc2l6ZW9mKGJ1ZiksCisJCS5idWYgPSBidWYgfTsKKworCWJ1ZlswXSA9IHJlZyA+PiA4OworCWJ1ZlsxXSA9IHJlZyAmIDB4ZmY7CisJYnVmWzJdID0gbWJveDsKKwltZW1jcHkoJmJ1ZlszXSwgdmFsLCBsZW4pOworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSAhPSAxKSB7CisJCXdhcm4oIkkyQyB3cml0ZSBmYWlsZWQgcmVnOiUwNHggbGVuOiVkIiwgcmVnLCBsZW4pOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3dyaXRlX29mZG1fcmVncyhzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTggKnZhbCwKKwl1OCBsZW4pCit7CisJdTggbWJveCA9ICgxIDw8IDApfCgxIDw8IDEpfCgobGVuIC0gMSkgPDwgMil8KDAgPDwgNil8KDAgPDwgNyk7CisJcmV0dXJuIGFmOTAxM193cml0ZV9yZWdzKHN0YXRlLCBtYm94LCByZWcsIHZhbCwgbGVuKTsKK30KKworc3RhdGljIGludCBhZjkwMTNfd3JpdGVfb2ZzbV9yZWdzKHN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlLCB1MTYgcmVnLCB1OCAqdmFsLAorCXU4IGxlbikKK3sKKwl1OCBtYm94ID0gKDEgPDwgMCl8KDEgPDwgMSl8KChsZW4gLSAxKSA8PCAyKXwoMSA8PCA2KXwoMSA8PCA3KTsKKwlyZXR1cm4gYWY5MDEzX3dyaXRlX3JlZ3Moc3RhdGUsIG1ib3gsIHJlZywgdmFsLCBsZW4pOworfQorCisvKiB3cml0ZSBzaW5nbGUgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbnQgYWY5MDEzX3dyaXRlX3JlZyhzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTggdmFsKQoreworCXJldHVybiBhZjkwMTNfd3JpdGVfb2ZkbV9yZWdzKHN0YXRlLCByZWcsICZ2YWwsIDEpOworfQorCisvKiByZWFkIHNpbmdsZSByZWdpc3RlciAqLworc3RhdGljIGludCBhZjkwMTNfcmVhZF9yZWcoc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUsIHUxNiByZWcsIHU4ICp2YWwpCit7CisJdTggb2J1ZlszXSA9IHsgcmVnID4+IDgsIHJlZyAmIDB4ZmYsIDAgfTsKKwl1OCBpYnVmWzFdOworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKKwkJeworCQkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLmRlbW9kX2FkZHJlc3MsCisJCQkuZmxhZ3MgPSAwLAorCQkJLmxlbiA9IHNpemVvZihvYnVmKSwKKwkJCS5idWYgPSBvYnVmCisJCX0sIHsKKwkJCS5hZGRyID0gc3RhdGUtPmNvbmZpZy5kZW1vZF9hZGRyZXNzLAorCQkJLmZsYWdzID0gSTJDX01fUkQsCisJCQkubGVuID0gc2l6ZW9mKGlidWYpLAorCQkJLmJ1ZiA9IGlidWYKKwkJfQorCX07CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMikgIT0gMikgeworCQl3YXJuKCJJMkMgcmVhZCBmYWlsZWQgcmVnOiUwNHgiLCByZWcpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJKnZhbCA9IGlidWZbMF07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlLCB1MTYgcmVnLCB1OCBwb3MsCisJdTggbGVuLCB1OCB2YWwpCit7CisJaW50IHJldDsKKwl1OCB0bXAsIG1hc2s7CisKKwlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIHJlZywgJnRtcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1hc2sgPSByZWdtYXNrW2xlbiAtIDFdIDw8IHBvczsKKwl0bXAgPSAodG1wICYgfm1hc2spIHwgKCh2YWwgPDwgcG9zKSAmIG1hc2spOworCisJcmV0dXJuIGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIHJlZywgdG1wKTsKK30KKworc3RhdGljIGludCBhZjkwMTNfcmVhZF9yZWdfYml0cyhzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTggcG9zLAorCXU4IGxlbiwgdTggKnZhbCkKK3sKKwlpbnQgcmV0OworCXU4IHRtcDsKKworCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgcmVnLCAmdG1wKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCSp2YWwgPSAodG1wID4+IHBvcykgJiByZWdtYXNrW2xlbiAtIDFdOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFmOTAxM19zZXRfZ3BpbyhzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSwgdTggZ3BpbywgdTggZ3Bpb3ZhbCkKK3sKKwlpbnQgcmV0OworCXU4IHBvczsKKwl1MTYgYWRkcjsKKwlkZWJfaW5mbygiJXM6IGdwaW86JWQgZ3Bpb3ZhbDolMDJ4XG4iLCBfX2Z1bmNfXywgZ3BpbywgZ3Bpb3ZhbCk7CisKKy8qIEdQSU8wICYgR1BJTzEgMHhkNzM1CisgICBHUElPMiAmIEdQSU8zIDB4ZDczNiAqLworCisJc3dpdGNoIChncGlvKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJYWRkciA9IDB4ZDczNTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCWNhc2UgMzoKKwkJYWRkciA9IDB4ZDczNjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIoImludmFsaWQgZ3BpbzolZFxuIiwgZ3Bpbyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfTsKKworCXN3aXRjaCAoZ3BpbykgeworCWNhc2UgMDoKKwljYXNlIDI6CisJCXBvcyA9IDA7CisJCWJyZWFrOworCWNhc2UgMToKKwljYXNlIDM6CisJZGVmYXVsdDoKKwkJcG9zID0gNDsKKwkJYnJlYWs7CisJfTsKKworCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgYWRkciwgcG9zLCA0LCBncGlvdmFsKTsKKworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiBhZjkxM19kaXYodTMyIGEsIHUzMiBiLCB1MzIgeCkKK3sKKwl1MzIgciA9IDAsIGMgPSAwLCBpOworCWRlYl9pbmZvKCIlczogYTolZCBiOiVkIHg6JWRcbiIsIF9fZnVuY19fLCBhLCBiLCB4KTsKKworCWlmIChhID4gYikgeworCQljID0gYSAvIGI7CisJCWEgPSBhIC0gYyAqIGI7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHg7IGkrKykgeworCQlpZiAoYSA+PSBiKSB7CisJCQlyICs9IDE7CisJCQlhIC09IGI7CisJCX0KKwkJYSA8PD0gMTsKKwkJciA8PD0gMTsKKwl9CisJciA9IChjIDw8ICh1MzIpeCkgKyByOworCisJZGViX2luZm8oIiVzOiBhOiVkIGI6JWQgeDolZCByOiVkIHI6JXhcbiIsIF9fZnVuY19fLCBhLCBiLCB4LCByLCByKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBhZjkwMTNfc2V0X2NvZWZmKHN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlLCBmZV9iYW5kd2lkdGhfdCBidykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1OCBpID0gMDsKKwl1OCBidWZbMjRdOworCXUzMiBuc19jb2VmZjFfMjA0OG51OworCXUzMiBuc19jb2VmZjFfODE5MW51OworCXUzMiBuc19jb2VmZjFfODE5Mm51OworCXUzMiBuc19jb2VmZjFfODE5M251OworCXUzMiBuc19jb2VmZjJfMms7CisJdTMyIG5zX2NvZWZmMl84azsKKworCWRlYl9pbmZvKCIlczogYWRjX2Nsb2NrOiVkIGJ3OiVkXG4iLCBfX2Z1bmNfXywKKwkJc3RhdGUtPmNvbmZpZy5hZGNfY2xvY2ssIGJ3KTsKKworCXN3aXRjaCAoc3RhdGUtPmNvbmZpZy5hZGNfY2xvY2spIHsKKwljYXNlIDI4ODAwOiAvKiAyOC44MDAgTUh6ICovCisJCXN3aXRjaCAoYncpIHsKKwkJY2FzZSBCQU5EV0lEVEhfNl9NSFo6CisJCQluc19jb2VmZjFfMjA0OG51ID0gMHgwMWU3OWU3YTsKKwkJCW5zX2NvZWZmMV84MTkxbnUgPSAweDAwNzllYjZlOworCQkJbnNfY29lZmYxXzgxOTJudSA9IDB4MDA3OWU3OWU7CisJCQluc19jb2VmZjFfODE5M251ID0gMHgwMDc5ZTNjZjsKKwkJCW5zX2NvZWZmMl8yayAgICAgPSAweDAwZjNjZjNkOworCQkJbnNfY29lZmYyXzhrICAgICA9IDB4MDAzY2YzY2Y7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EV0lEVEhfN19NSFo6CisJCQluc19jb2VmZjFfMjA0OG51ID0gMHgwMjM4ZTM4ZTsKKwkJCW5zX2NvZWZmMV84MTkxbnUgPSAweDAwOGUzZDU1OworCQkJbnNfY29lZmYxXzgxOTJudSA9IDB4MDA4ZTM4ZTQ7CisJCQluc19jb2VmZjFfODE5M251ID0gMHgwMDhlMzQ3MjsKKwkJCW5zX2NvZWZmMl8yayAgICAgPSAweDAxMWM3MWM3OworCQkJbnNfY29lZmYyXzhrICAgICA9IDB4MDA0NzFjNzI7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EV0lEVEhfOF9NSFo6CisJCQluc19jb2VmZjFfMjA0OG51ID0gMHgwMjhhMjhhMzsKKwkJCW5zX2NvZWZmMV84MTkxbnUgPSAweDAwYTI4ZjNkOworCQkJbnNfY29lZmYxXzgxOTJudSA9IDB4MDBhMjhhMjk7CisJCQluc19jb2VmZjFfODE5M251ID0gMHgwMGEyODUxNDsKKwkJCW5zX2NvZWZmMl8yayAgICAgPSAweDAxNDUxNDUxOworCQkJbnNfY29lZmYyXzhrICAgICA9IDB4MDA1MTQ1MTQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAyMDQ4MDogLyogMjAuNDgwIE1IeiAqLworCQlzd2l0Y2ggKGJ3KSB7CisJCWNhc2UgQkFORFdJRFRIXzZfTUhaOgorCQkJbnNfY29lZmYxXzIwNDhudSA9IDB4MDJhZGI2ZGM7CisJCQluc19jb2VmZjFfODE5MW51ID0gMHgwMGFiNzMxMzsKKwkJCW5zX2NvZWZmMV84MTkybnUgPSAweDAwYWI2ZGI3OworCQkJbnNfY29lZmYxXzgxOTNudSA9IDB4MDBhYjY4NWM7CisJCQluc19jb2VmZjJfMmsgICAgID0gMHgwMTU2ZGI2ZTsKKwkJCW5zX2NvZWZmMl84ayAgICAgPSAweDAwNTViNmRjOworCQkJYnJlYWs7CisJCWNhc2UgQkFORFdJRFRIXzdfTUhaOgorCQkJbnNfY29lZmYxXzIwNDhudSA9IDB4MDMyMDAwMDE7CisJCQluc19jb2VmZjFfODE5MW51ID0gMHgwMGM4MDY0MDsKKwkJCW5zX2NvZWZmMV84MTkybnUgPSAweDAwYzgwMDAwOworCQkJbnNfY29lZmYxXzgxOTNudSA9IDB4MDBjN2Y5YzA7CisJCQluc19jb2VmZjJfMmsgICAgID0gMHgwMTkwMDAwMDsKKwkJCW5zX2NvZWZmMl84ayAgICAgPSAweDAwNjQwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgQkFORFdJRFRIXzhfTUhaOgorCQkJbnNfY29lZmYxXzIwNDhudSA9IDB4MDM5MjQ5MjY7CisJCQluc19jb2VmZjFfODE5MW51ID0gMHgwMGU0OTk2ZTsKKwkJCW5zX2NvZWZmMV84MTkybnUgPSAweDAwZTQ5MjQ5OworCQkJbnNfY29lZmYxXzgxOTNudSA9IDB4MDBlNDhiMjU7CisJCQluc19jb2VmZjJfMmsgICAgID0gMHgwMWM5MjQ5MzsKKwkJCW5zX2NvZWZmMl84ayAgICAgPSAweDAwNzI0OTI1OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgMjgwMDA6IC8qIDI4LjAwMCBNSHogKi8KKwkJc3dpdGNoIChidykgeworCQljYXNlIEJBTkRXSURUSF82X01IWjoKKwkJCW5zX2NvZWZmMV8yMDQ4bnUgPSAweDAxZjU4ZDEwOworCQkJbnNfY29lZmYxXzgxOTFudSA9IDB4MDA3ZDY3MmY7CisJCQluc19jb2VmZjFfODE5Mm51ID0gMHgwMDdkNjM0NDsKKwkJCW5zX2NvZWZmMV84MTkzbnUgPSAweDAwN2Q1ZjU5OworCQkJbnNfY29lZmYyXzJrICAgICA9IDB4MDBmYWM2ODg7CisJCQluc19jb2VmZjJfOGsgICAgID0gMHgwMDNlYjFhMjsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRXSURUSF83X01IWjoKKwkJCW5zX2NvZWZmMV8yMDQ4bnUgPSAweDAyNDkyNDkyOworCQkJbnNfY29lZmYxXzgxOTFudSA9IDB4MDA5MjRkYjc7CisJCQluc19jb2VmZjFfODE5Mm51ID0gMHgwMDkyNDkyNTsKKwkJCW5zX2NvZWZmMV84MTkzbnUgPSAweDAwOTI0NDkyOworCQkJbnNfY29lZmYyXzJrICAgICA9IDB4MDEyNDkyNDk7CisJCQluc19jb2VmZjJfOGsgICAgID0gMHgwMDQ5MjQ5MjsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRXSURUSF84X01IWjoKKwkJCW5zX2NvZWZmMV8yMDQ4bnUgPSAweDAyOWNiYzE1OworCQkJbnNfY29lZmYxXzgxOTFudSA9IDB4MDBhNzM0M2Y7CisJCQluc19jb2VmZjFfODE5Mm51ID0gMHgwMGE3MmYwNTsKKwkJCW5zX2NvZWZmMV84MTkzbnUgPSAweDAwYTcyOWNjOworCQkJbnNfY29lZmYyXzJrICAgICA9IDB4MDE0ZTVlMGE7CisJCQluc19jb2VmZjJfOGsgICAgID0gMHgwMDUzOTc4MzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIDI1MDAwOiAvKiAyNS4wMDAgTUh6ICovCisJCXN3aXRjaCAoYncpIHsKKwkJY2FzZSBCQU5EV0lEVEhfNl9NSFo6CisJCQluc19jb2VmZjFfMjA0OG51ID0gMHgwMjMxYmNiNTsKKwkJCW5zX2NvZWZmMV84MTkxbnUgPSAweDAwOGM3MzkxOworCQkJbnNfY29lZmYxXzgxOTJudSA9IDB4MDA4YzZmMmQ7CisJCQluc19jb2VmZjFfODE5M251ID0gMHgwMDhjNmFjYTsKKwkJCW5zX2NvZWZmMl8yayAgICAgPSAweDAxMThkZTViOworCQkJbnNfY29lZmYyXzhrICAgICA9IDB4MDA0NjM3OTc7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EV0lEVEhfN19NSFo6CisJCQluc19jb2VmZjFfMjA0OG51ID0gMHgwMjhmNWMyOTsKKwkJCW5zX2NvZWZmMV84MTkxbnUgPSAweDAwYTNkYzI5OworCQkJbnNfY29lZmYxXzgxOTJudSA9IDB4MDBhM2Q3MGE7CisJCQluc19jb2VmZjFfODE5M251ID0gMHgwMGEzZDFlYzsKKwkJCW5zX2NvZWZmMl8yayAgICAgPSAweDAxNDdhZTE0OworCQkJbnNfY29lZmYyXzhrICAgICA9IDB4MDA1MWViODU7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EV0lEVEhfOF9NSFo6CisJCQluc19jb2VmZjFfMjA0OG51ID0gMHgwMmVjZmI5ZDsKKwkJCW5zX2NvZWZmMV84MTkxbnUgPSAweDAwYmI0NGMxOworCQkJbnNfY29lZmYxXzgxOTJudSA9IDB4MDBiYjNlZTc7CisJCQluc19jb2VmZjFfODE5M251ID0gMHgwMGJiMzkwZDsKKwkJCW5zX2NvZWZmMl8yayAgICAgPSAweDAxNzY3ZGNlOworCQkJbnNfY29lZmYyXzhrICAgICA9IDB4MDA1ZDlmNzQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJpbnZhbGlkIHh0YWwiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZXQpIHsKKwkJZXJyKCJpbnZhbGlkIGJhbmR3aWR0aCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMV8yMDQ4bnUgJiAweDAzMDAwMDAwKSA+PiAyNCk7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYxXzIwNDhudSAmIDB4MDBmZjAwMDApID4+IDE2KTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjFfMjA0OG51ICYgMHgwMDAwZmYwMCkgPj4gOCk7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYxXzIwNDhudSAmIDB4MDAwMDAwZmYpKTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjJfMmsgICAgICYgMHgwMWMwMDAwMCkgPj4gMjIpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMl8yayAgICAgJiAweDAwM2ZjMDAwKSA+PiAxNCk7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYyXzJrICAgICAmIDB4MDAwMDNmYzApID4+IDYpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMl8yayAgICAgJiAweDAwMDAwMDNmKSk7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYxXzgxOTFudSAmIDB4MDMwMDAwMDApID4+IDI0KTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjFfODE5MW51ICYgMHgwMGZmYzAwMCkgPj4gMTYpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMV84MTkxbnUgJiAweDAwMDBmZjAwKSA+PiA4KTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjFfODE5MW51ICYgMHgwMDAwMDBmZikpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMV84MTkybnUgJiAweDAzMDAwMDAwKSA+PiAyNCk7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYxXzgxOTJudSAmIDB4MDBmZmMwMDApID4+IDE2KTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjFfODE5Mm51ICYgMHgwMDAwZmYwMCkgPj4gOCk7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYxXzgxOTJudSAmIDB4MDAwMDAwZmYpKTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjFfODE5M251ICYgMHgwMzAwMDAwMCkgPj4gMjQpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMV84MTkzbnUgJiAweDAwZmZjMDAwKSA+PiAxNik7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYxXzgxOTNudSAmIDB4MDAwMGZmMDApID4+IDgpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMV84MTkzbnUgJiAweDAwMDAwMGZmKSk7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYyXzhrICAgICAmIDB4MDFjMDAwMDApID4+IDIyKTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjJfOGsgICAgICYgMHgwMDNmYzAwMCkgPj4gMTQpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMl84ayAgICAgJiAweDAwMDAzZmMwKSA+PiA2KTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjJfOGsgICAgICYgMHgwMDAwMDAzZikpOworCisJZGViX2luZm8oIiVzOiBjb2VmZjoiLCBfX2Z1bmNfXyk7CisJZGVidWdfZHVtcChidWYsIHNpemVvZihidWYpLCBkZWJfaW5mbyk7CisKKwkvKiBwcm9ncmFtICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihidWYpOyBpKyspIHsKKwkJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZyhzdGF0ZSwgMHhhZTAwICsgaSwgYnVmW2ldKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3NldF9hZGNfY3RybChzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgcmV0OworCXU4IGJ1ZlszXSwgdG1wLCBpOworCXUzMiBhZGNfY3c7CisKKwlkZWJfaW5mbygiJXM6IGFkY19jbG9jazolZFxuIiwgX19mdW5jX18sIHN0YXRlLT5jb25maWcuYWRjX2Nsb2NrKTsKKworCS8qIGFkYyBmcmVxdWVuY3kgdHlwZSAqLworCXN3aXRjaCAoc3RhdGUtPmNvbmZpZy5hZGNfY2xvY2spIHsKKwljYXNlIDI4ODAwOiAvKiAyOC44MDAgTUh6ICovCisJCXRtcCA9IDA7CisJCWJyZWFrOworCWNhc2UgMjA0ODA6IC8qIDIwLjQ4MCBNSHogKi8KKwkJdG1wID0gMTsKKwkJYnJlYWs7CisJY2FzZSAyODAwMDogLyogMjguMDAwIE1IeiAqLworCQl0bXAgPSAyOworCQlicmVhazsKKwljYXNlIDI1MDAwOiAvKiAyNS4wMDAgTUh6ICovCisJCXRtcCA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigiaW52YWxpZCB4dGFsIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWFkY19jdyA9IGFmOTEzX2RpdihzdGF0ZS0+Y29uZmlnLmFkY19jbG9jayoxMDAwLCAxMDAwMDAwdWwsIDE5dWwpOworCisJYnVmWzBdID0gKHU4KSAoKGFkY19jdyAmIDB4MDAwMDAwZmYpKTsKKwlidWZbMV0gPSAodTgpICgoYWRjX2N3ICYgMHgwMDAwZmYwMCkgPj4gOCk7CisJYnVmWzJdID0gKHU4KSAoKGFkY19jdyAmIDB4MDBmZjAwMDApID4+IDE2KTsKKworCWRlYl9pbmZvKCIlczogYWRjX2N3OiIsIF9fZnVuY19fKTsKKwlkZWJ1Z19kdW1wKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGRlYl9pbmZvKTsKKworCS8qIHByb2dyYW0gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1Zik7IGkrKykgeworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnKHN0YXRlLCAweGQxODAgKyBpLCBidWZbaV0pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweDliZDIsIDAsIDQsIHRtcCk7CitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxM19zZXRfZnJlcV9jdHJsKHN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlLCBmZV9iYW5kd2lkdGhfdCBidykKK3sKKwlpbnQgcmV0OworCXUxNiBhZGRyOworCXU4IGJ1ZlszXSwgaSwgajsKKwl1MzIgYWRjX2ZyZXEsIGZyZXFfY3c7CisJczggYmZzX3NwZWNfaW52OworCWludCBpZl9zYW1wbGVfZnJlcTsKKworCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsKKwkJaWYgKGogPT0gMCkgeworCQkJYWRkciA9IDB4ZDE0MDsgLyogZmN3IG5vcm1hbCAqLworCQkJYmZzX3NwZWNfaW52ID0gc3RhdGUtPmNvbmZpZy5yZl9zcGVjX2ludiA/IC0xIDogMTsKKwkJfSBlbHNlIGlmIChqID09IDEpIHsKKwkJCWFkZHIgPSAweDliZTc7IC8qIGZjdyBkdW1teSByYW0gKi8KKwkJCWJmc19zcGVjX2ludiA9IHN0YXRlLT5jb25maWcucmZfc3BlY19pbnYgPyAtMSA6IDE7CisJCX0gZWxzZSB7CisJCQlhZGRyID0gMHg5YmVhOyAvKiBmY3cgaW52ZXJ0ZWQgKi8KKwkJCWJmc19zcGVjX2ludiA9IHN0YXRlLT5jb25maWcucmZfc3BlY19pbnYgPyAxIDogLTE7CisJCX0KKworCQlhZGNfZnJlcSAgICAgICA9IHN0YXRlLT5jb25maWcuYWRjX2Nsb2NrICogMTAwMDsKKwkJaWZfc2FtcGxlX2ZyZXEgPSBzdGF0ZS0+Y29uZmlnLnR1bmVyX2lmICogMTAwMDsKKworCQkvKiBUREExODI3MSB1c2VzIGRpZmZlcmVudCBzYW1wbGluZyBmcmVxIGZvciBldmVyeSBidyAqLworCQlpZiAoc3RhdGUtPmNvbmZpZy50dW5lciA9PSBBRjkwMTNfVFVORVJfVERBMTgyNzEpIHsKKwkJCXN3aXRjaCAoYncpIHsKKwkJCWNhc2UgQkFORFdJRFRIXzZfTUhaOgorCQkJCWlmX3NhbXBsZV9mcmVxID0gMzMwMDAwMDsgLyogMy4zIE1IeiAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCQU5EV0lEVEhfN19NSFo6CisJCQkJaWZfc2FtcGxlX2ZyZXEgPSAzODAwMDAwOyAvKiAzLjggTUh6ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJBTkRXSURUSF84X01IWjoKKwkJCWRlZmF1bHQ6CisJCQkJaWZfc2FtcGxlX2ZyZXEgPSA0MzAwMDAwOyAvKiA0LjMgTUh6ICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQl3aGlsZSAoaWZfc2FtcGxlX2ZyZXEgPiAoYWRjX2ZyZXEgLyAyKSkKKwkJCWlmX3NhbXBsZV9mcmVxID0gaWZfc2FtcGxlX2ZyZXEgLSBhZGNfZnJlcTsKKworCQlpZiAoaWZfc2FtcGxlX2ZyZXEgPj0gMCkKKwkJCWJmc19zcGVjX2ludiA9IGJmc19zcGVjX2ludiAqICgtMSk7CisJCWVsc2UKKwkJCWlmX3NhbXBsZV9mcmVxID0gaWZfc2FtcGxlX2ZyZXEgKiAoLTEpOworCisJCWZyZXFfY3cgPSBhZjkxM19kaXYoaWZfc2FtcGxlX2ZyZXEsIGFkY19mcmVxLCAyM3VsKTsKKworCQlpZiAoYmZzX3NwZWNfaW52ID09IC0xKQorCQkJZnJlcV9jdyA9IDB4MDA4MDAwMDAgLSBmcmVxX2N3OworCisJCWJ1ZlswXSA9ICh1OCkgKChmcmVxX2N3ICYgMHgwMDAwMDBmZikpOworCQlidWZbMV0gPSAodTgpICgoZnJlcV9jdyAmIDB4MDAwMGZmMDApID4+IDgpOworCQlidWZbMl0gPSAodTgpICgoZnJlcV9jdyAmIDB4MDA3ZjAwMDApID4+IDE2KTsKKworCisJCWRlYl9pbmZvKCIlczogZnJlcV9jdzoiLCBfX2Z1bmNfXyk7CisJCWRlYnVnX2R1bXAoYnVmLCBzaXplb2YoYnVmKSwgZGViX2luZm8pOworCisJCS8qIHByb2dyYW0gKi8KKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihidWYpOyBpKyspIHsKKwkJCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIGFkZHIrKywgYnVmW2ldKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnJvcjsKKwkJfQorCX0KK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3NldF9vZmRtX3BhcmFtcyhzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSwKKwlzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyAqcGFyYW1zLCB1OCAqYXV0b19tb2RlKQoreworCWludCByZXQ7CisJdTggaSwgYnVmWzNdID0gezAsIDAsIDB9OworCSphdXRvX21vZGUgPSAwOyAvKiBzZXQgaWYgcGFyYW1ldGVycyBhcmUgcmVxdWVzdGVkIHRvIGF1dG8gc2V0ICovCisKKwlzd2l0Y2ggKHBhcmFtcy0+dHJhbnNtaXNzaW9uX21vZGUpIHsKKwljYXNlIFRSQU5TTUlTU0lPTl9NT0RFX0FVVE86CisJCSphdXRvX21vZGUgPSAxOworCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6CisJCWJyZWFrOworCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6CisJCWJ1ZlswXSB8PSAoMSA8PCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChwYXJhbXMtPmd1YXJkX2ludGVydmFsKSB7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF9BVVRPOgorCQkqYXV0b19tb2RlID0gMTsKKwljYXNlIEdVQVJEX0lOVEVSVkFMXzFfMzI6CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8xNjoKKwkJYnVmWzBdIHw9ICgxIDw8IDIpOworCQlicmVhazsKKwljYXNlIEdVQVJEX0lOVEVSVkFMXzFfODoKKwkJYnVmWzBdIHw9ICgyIDw8IDIpOworCQlicmVhazsKKwljYXNlIEdVQVJEX0lOVEVSVkFMXzFfNDoKKwkJYnVmWzBdIHw9ICgzIDw8IDIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHBhcmFtcy0+aGllcmFyY2h5X2luZm9ybWF0aW9uKSB7CisJY2FzZSBISUVSQVJDSFlfQVVUTzoKKwkJKmF1dG9fbW9kZSA9IDE7CisJY2FzZSBISUVSQVJDSFlfTk9ORToKKwkJYnJlYWs7CisJY2FzZSBISUVSQVJDSFlfMToKKwkJYnVmWzBdIHw9ICgxIDw8IDQpOworCQlicmVhazsKKwljYXNlIEhJRVJBUkNIWV8yOgorCQlidWZbMF0gfD0gKDIgPDwgNCk7CisJCWJyZWFrOworCWNhc2UgSElFUkFSQ0hZXzQ6CisJCWJ1ZlswXSB8PSAoMyA8PCA0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfTsKKworCXN3aXRjaCAocGFyYW1zLT5jb25zdGVsbGF0aW9uKSB7CisJY2FzZSBRQU1fQVVUTzoKKwkJKmF1dG9fbW9kZSA9IDE7CisJY2FzZSBRUFNLOgorCQlicmVhazsKKwljYXNlIFFBTV8xNjoKKwkJYnVmWzFdIHw9ICgxIDw8IDYpOworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwkJYnVmWzFdIHw9ICgyIDw8IDYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBVc2UgSFAuIEhvdyBhbmQgd2hpY2ggY2FzZSB3ZSBjYW4gc3dpdGNoIHRvIExQPyAqLworCWJ1ZlsxXSB8PSAoMSA8PCA0KTsKKworCXN3aXRjaCAocGFyYW1zLT5jb2RlX3JhdGVfSFApIHsKKwljYXNlIEZFQ19BVVRPOgorCQkqYXV0b19tb2RlID0gMTsKKwljYXNlIEZFQ18xXzI6CisJCWJyZWFrOworCWNhc2UgRkVDXzJfMzoKKwkJYnVmWzJdIHw9ICgxIDw8IDApOworCQlicmVhazsKKwljYXNlIEZFQ18zXzQ6CisJCWJ1ZlsyXSB8PSAoMiA8PCAwKTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfNV82OgorCQlidWZbMl0gfD0gKDMgPDwgMCk7CisJCWJyZWFrOworCWNhc2UgRkVDXzdfODoKKwkJYnVmWzJdIHw9ICg0IDw8IDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHBhcmFtcy0+Y29kZV9yYXRlX0xQKSB7CisJY2FzZSBGRUNfQVVUTzoKKwkvKiBpZiBISUVSQVJDSFlfTk9ORSBhbmQgRkVDX05PTkUgdGhlbiBMUCBGRUMgaXMgc2V0IHRvIEZFQ19BVVRPCisJICAgYnkgZHZiX2Zyb250ZW5kLmMgZm9yIGNvbXBhdGliaWxpdHkgKi8KKwkJaWYgKHBhcmFtcy0+aGllcmFyY2h5X2luZm9ybWF0aW9uICE9IEhJRVJBUkNIWV9OT05FKQorCQkJKmF1dG9fbW9kZSA9IDE7CisJY2FzZSBGRUNfMV8yOgorCQlicmVhazsKKwljYXNlIEZFQ18yXzM6CisJCWJ1ZlsyXSB8PSAoMSA8PCAzKTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfM180OgorCQlidWZbMl0gfD0gKDIgPDwgMyk7CisJCWJyZWFrOworCWNhc2UgRkVDXzVfNjoKKwkJYnVmWzJdIHw9ICgzIDw8IDMpOworCQlicmVhazsKKwljYXNlIEZFQ183Xzg6CisJCWJ1ZlsyXSB8PSAoNCA8PCAzKTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfTk9ORToKKwkJaWYgKHBhcmFtcy0+aGllcmFyY2h5X2luZm9ybWF0aW9uID09IEhJRVJBUkNIWV9BVVRPKQorCQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChwYXJhbXMtPmJhbmR3aWR0aCkgeworCWNhc2UgQkFORFdJRFRIXzZfTUhaOgorCQlicmVhazsKKwljYXNlIEJBTkRXSURUSF83X01IWjoKKwkJYnVmWzFdIHw9ICgxIDw8IDIpOworCQlicmVhazsKKwljYXNlIEJBTkRXSURUSF84X01IWjoKKwkJYnVmWzFdIHw9ICgyIDw8IDIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBwcm9ncmFtICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihidWYpOyBpKyspIHsKKwkJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZyhzdGF0ZSwgMHhkM2MwICsgaSwgYnVmW2ldKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3Jlc2V0KHN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlLCB1OCBzbGVlcCkKK3sKKwlpbnQgcmV0OworCXU4IHRtcCwgaTsKKwlkZWJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIGVuYWJsZSBPRkRNIHJlc2V0ICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQ0MTcsIDQsIDEsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBzdGFydCByZXNldCBtZWNoYW5pc20gKi8KKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnKHN0YXRlLCAweGFlZmYsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiByZXNldCBpcyBkb25lIHdoZW4gYml0IDEgaXMgc2V0ICovCisJZm9yIChpID0gMDsgaSA8IDE1MDsgaSsrKSB7CisJCXJldCA9IGFmOTAxM19yZWFkX3JlZ19iaXRzKHN0YXRlLCAweGQ0MTcsIDEsIDEsICZ0bXApOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJaWYgKHRtcCkKKwkJCWJyZWFrOyAvKiByZXNldCBkb25lICovCisJCW1zbGVlcCgxMCk7CisJfQorCWlmICghdG1wKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCS8qIGRvbid0IGNsZWFyIHJlc2V0IHdoZW4gZ29pbmcgdG8gc2xlZXAgKi8KKwlpZiAoIXNsZWVwKSB7CisJCS8qIGNsZWFyIE9GRE0gcmVzZXQgKi8KKwkJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQ0MTcsIDEsIDEsIDApOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKworCQkvKiBkaXNhYmxlIE9GRE0gcmVzZXQgKi8KKwkJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQ0MTcsIDQsIDEsIDApOworCX0KK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3Bvd2VyX2N0cmwoc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUsIHU4IG9ub2ZmKQoreworCWludCByZXQ7CisJZGViX2luZm8oIiVzOiBvbm9mZjolZFxuIiwgX19mdW5jX18sIG9ub2ZmKTsKKworCWlmIChvbm9mZikgeworCQkvKiBwb3dlciBvbiAqLworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDczYSwgMywgMSwgMCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDQxNywgMSwgMSwgMCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDQxNywgNCwgMSwgMCk7CisJfSBlbHNlIHsKKwkJLyogcG93ZXIgb2ZmICovCisJCXJldCA9IGFmOTAxM19yZXNldChzdGF0ZSwgMSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDczYSwgMywgMSwgMSk7CisJfQorZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfbG9ja19sZWQoc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUsIHU4IG9ub2ZmKQoreworCWRlYl9pbmZvKCIlczogb25vZmY6JWRcbiIsIF9fZnVuY19fLCBvbm9mZik7CisKKwlyZXR1cm4gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQ3MzAsIDAsIDEsIG9ub2ZmKTsKK30KKworc3RhdGljIGludCBhZjkwMTNfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKwl1OCBhdXRvX21vZGU7IC8qIGF1dG8gc2V0IFRQUyAqLworCisJZGViX2luZm8oIiVzOiBmcmVxOiVkIGJ3OiVkXG4iLCBfX2Z1bmNfXywgcGFyYW1zLT5mcmVxdWVuY3ksCisJCXBhcmFtcy0+dS5vZmRtLmJhbmR3aWR0aCk7CisKKwlzdGF0ZS0+ZnJlcXVlbmN5ID0gcGFyYW1zLT5mcmVxdWVuY3k7CisKKwkvKiBwcm9ncmFtIENGT0UgY29lZmZpY2llbnRzICovCisJcmV0ID0gYWY5MDEzX3NldF9jb2VmZihzdGF0ZSwgcGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJLyogcHJvZ3JhbSBmcmVxdWVuY3kgY29udHJvbCAqLworCXJldCA9IGFmOTAxM19zZXRfZnJlcV9jdHJsKHN0YXRlLCBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBjbGVhciBUUFMgbG9jayBmbGFnIChpbnZlcnRlZCBmbGFnKSAqLworCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkMzMwLCAzLCAxLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJLyogY2xlYXIgTVBFRzIgbG9jayBmbGFnICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQ1MDcsIDYsIDEsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBlbXB0eSBjaGFubmVsIGZ1bmN0aW9uICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweDliZmUsIDAsIDEsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBlbXB0eSBEVkItVCBjaGFubmVsIGZ1bmN0aW9uICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweDliYzIsIDAsIDEsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBwcm9ncmFtIHR1bmVyICovCisJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpCisJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIHBhcmFtcyk7CisKKwkvKiBwcm9ncmFtIFRQUyBhbmQgYmFuZHdpZHRoLCBjaGVjayBpZiBhdXRvIG1vZGUgbmVlZGVkICovCisJcmV0ID0gYWY5MDEzX3NldF9vZmRtX3BhcmFtcyhzdGF0ZSwgJnBhcmFtcy0+dS5vZmRtLCAmYXV0b19tb2RlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJaWYgKGF1dG9fbW9kZSkgeworCQkvKiBjbGVhciBlYXN5IG1vZGUgZmxhZyAqLworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnKHN0YXRlLCAweGFlZmQsIDApOworCQlkZWJfaW5mbygiJXM6IGF1dG8gVFBTXG4iLCBfX2Z1bmNfXyk7CisJfSBlbHNlIHsKKwkJLyogc2V0IGVhc3kgbW9kZSBmbGFnICovCisJCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIDB4YWVmZCwgMSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnKHN0YXRlLCAweGFlZmUsIDApOworCQlkZWJfaW5mbygiJXM6IG1hbnVhbCBUUFNcbiIsIF9fZnVuY19fKTsKKwl9CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIGV2ZXJ5dGhpbmcgaXMgc2V0LCBsZXRzIHRyeSB0byByZWNlaXZlIGNoYW5uZWwgLSBPRlNNIEdPISAqLworCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIDB4ZmZmZiwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByZXQ7CisJdTggaSwgYnVmWzNdOworCWRlYl9pbmZvKCIlc1xuIiwgX19mdW5jX18pOworCisJLyogcmVhZCBUUFMgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIDB4ZDNjMCArIGksICZidWZbaV0pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlzd2l0Y2ggKChidWZbMV0gPj4gNikgJiAzKSB7CisJY2FzZSAwOgorCQlwLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IFFQU0s7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24gPSBRQU1fMTY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24gPSBRQU1fNjQ7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoKGJ1ZlswXSA+PiAwKSAmIDMpIHsKKwljYXNlIDA6CisJCXAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzJLOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzhLOworCX0KKworCXN3aXRjaCAoKGJ1ZlswXSA+PiAyKSAmIDMpIHsKKwljYXNlIDA6CisJCXAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+dS5vZmRtLmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8xNjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzg7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+dS5vZmRtLmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV80OworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKChidWZbMF0gPj4gNCkgJiA3KSB7CisJY2FzZSAwOgorCQlwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZX05PTkU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+dS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8xOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfMjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZXzQ7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoKGJ1ZlsyXSA+PiAwKSAmIDcpIHsKKwljYXNlIDA6CisJCXAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPSBGRUNfMV8yOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPSBGRUNfMl8zOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPSBGRUNfM180OworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPSBGRUNfNV82OworCQlicmVhazsKKwljYXNlIDQ6CisJCXAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPSBGRUNfN184OworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKChidWZbMl0gPj4gMykgJiA3KSB7CisJY2FzZSAwOgorCQlwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDXzFfMjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDXzJfMzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDXzNfNDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDXzVfNjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDXzdfODsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoICgoYnVmWzFdID4+IDIpICYgMykgeworCWNhc2UgMDoKKwkJcC0+dS5vZmRtLmJhbmR3aWR0aCA9IEJBTkRXSURUSF82X01IWjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT51Lm9mZG0uYmFuZHdpZHRoID0gQkFORFdJRFRIXzdfTUhaOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPnUub2ZkbS5iYW5kd2lkdGggPSBCQU5EV0lEVEhfOF9NSFo7CisJCWJyZWFrOworCX0KKworCXAtPmludmVyc2lvbiA9IElOVkVSU0lPTl9BVVRPOworCXAtPmZyZXF1ZW5jeSA9IHN0YXRlLT5mcmVxdWVuY3k7CisKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3VwZGF0ZV9iZXJfdW5jKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKwl1OCBidWZbM10sIGk7CisJdTMyIGVycm9yX2JpdF9jb3VudCA9IDA7CisJdTMyIHRvdGFsX2JpdF9jb3VudCA9IDA7CisJdTMyIGFib3J0X3BhY2tldF9jb3VudCA9IDA7CisKKwlzdGF0ZS0+YmVyID0gMDsKKworCS8qIGNoZWNrIGlmIGVycm9yIGJpdCBjb3VudCBpcyByZWFkeSAqLworCXJldCA9IGFmOTAxM19yZWFkX3JlZ19iaXRzKHN0YXRlLCAweGQzOTEsIDQsIDEsICZidWZbMF0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJaWYgKCFidWZbMF0pCisJCWdvdG8gZXhpdDsKKworCS8qIGdldCBSU0QgcGFja2V0IGFib3J0IGNvdW50ICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIDB4ZDM4YSArIGksICZidWZbaV0pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisJYWJvcnRfcGFja2V0X2NvdW50ID0gKGJ1ZlsxXSA8PCA4KSArIGJ1ZlswXTsKKworCS8qIGdldCBlcnJvciBiaXQgY291bnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgMHhkMzg3ICsgaSwgJmJ1ZltpXSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCX0KKwllcnJvcl9iaXRfY291bnQgPSAoYnVmWzJdIDw8IDE2KSArIChidWZbMV0gPDwgOCkgKyBidWZbMF07CisJZXJyb3JfYml0X2NvdW50ID0gZXJyb3JfYml0X2NvdW50IC0gYWJvcnRfcGFja2V0X2NvdW50ICogOCAqIDg7CisKKwkvKiBnZXQgdXNlZCBSU0QgY291bnRpbmcgcGVyaW9kICgxMDAwMCBSU0QgcGFja2V0cyB1c2VkKSAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJcmV0ID0gYWY5MDEzX3JlYWRfcmVnKHN0YXRlLCAweGQzODUgKyBpLCAmYnVmW2ldKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCXRvdGFsX2JpdF9jb3VudCA9IChidWZbMV0gPDwgOCkgKyBidWZbMF07CisJdG90YWxfYml0X2NvdW50ID0gdG90YWxfYml0X2NvdW50IC0gYWJvcnRfcGFja2V0X2NvdW50OworCXRvdGFsX2JpdF9jb3VudCA9IHRvdGFsX2JpdF9jb3VudCAqIDIwNCAqIDg7CisKKwlpZiAodG90YWxfYml0X2NvdW50KQorCQlzdGF0ZS0+YmVyID0gZXJyb3JfYml0X2NvdW50ICogMTAwMDAwMDAwMCAvIHRvdGFsX2JpdF9jb3VudDsKKworCXN0YXRlLT51Y2Jsb2NrcyArPSBhYm9ydF9wYWNrZXRfY291bnQ7CisKKwlkZWJfaW5mbygiJXM6IGVyciBiaXRzOiVkIHRvdGFsIGJpdHM6JWQgYWJvcnQgY291bnQ6JWRcbiIsIF9fZnVuY19fLAorCQllcnJvcl9iaXRfY291bnQsIHRvdGFsX2JpdF9jb3VudCwgYWJvcnRfcGFja2V0X2NvdW50KTsKKworCS8qIHNldCBCRVIgY291bnRpbmcgcmFuZ2UgKi8KKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnKHN0YXRlLCAweGQzODUsIDEwMDAwICYgMHhmZik7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnKHN0YXRlLCAweGQzODYsIDEwMDAwID4+IDgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJLyogcmVzZXQgYW5kIHN0YXJ0IEJFUiBjb3VudGVyICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQzOTEsIDQsIDEsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKK2V4aXQ6CitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxM191cGRhdGVfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKwl1OCBidWZbM10sIGksIGxlbjsKKwl1MzIgcXVhbnQgPSAwOworCXN0cnVjdCBzbnJfdGFibGUgKnNucl90YWJsZTsKKworCS8qIGNoZWNrIGlmIHF1YW50aXplciByZWFkeSAoZm9yIHNucikgKi8KKwlyZXQgPSBhZjkwMTNfcmVhZF9yZWdfYml0cyhzdGF0ZSwgMHhkMmUxLCAzLCAxLCAmYnVmWzBdKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCWlmIChidWZbMF0pIHsKKwkJLyogcXVhbnRpemVyIHJlYWR5IC0gcmVhZCBpdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIDB4ZDJlMyArIGksICZidWZbaV0pOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycm9yOworCQl9CisJCXF1YW50ID0gKGJ1ZlsyXSA8PCAxNikgKyAoYnVmWzFdIDw8IDgpICsgYnVmWzBdOworCisJCS8qIHJlYWQgY3VycmVudCBjb25zdGVsbGF0aW9uICovCisJCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgMHhkM2MxLCAmYnVmWzBdKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJc3dpdGNoICgoYnVmWzBdID4+IDYpICYgMykgeworCQljYXNlIDA6CisJCQlsZW4gPSBBUlJBWV9TSVpFKHFwc2tfc25yX3RhYmxlKTsKKwkJCXNucl90YWJsZSA9IHFwc2tfc25yX3RhYmxlOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWxlbiA9IEFSUkFZX1NJWkUocWFtMTZfc25yX3RhYmxlKTsKKwkJCXNucl90YWJsZSA9IHFhbTE2X3Nucl90YWJsZTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlsZW4gPSBBUlJBWV9TSVpFKHFhbTY0X3Nucl90YWJsZSk7CisJCQlzbnJfdGFibGUgPSBxYW02NF9zbnJfdGFibGU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWxlbiA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChsZW4pIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQkJCWlmIChxdWFudCA8IHNucl90YWJsZVtpXS52YWwpIHsKKwkJCQkJc3RhdGUtPnNuciA9IHNucl90YWJsZVtpXS5zbnIgKiAxMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogc2V0IHF1YW50aXplciBzdXBlciBmcmFtZSBjb3VudCAqLworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnKHN0YXRlLCAweGQyZTIsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKworCQkvKiBjaGVjayBxdWFudGl6ZXIgYXZhaWxhYmlsaXR5ICovCisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQltc2xlZXAoMTApOworCQkJcmV0ID0gYWY5MDEzX3JlYWRfcmVnX2JpdHMoc3RhdGUsIDB4ZDJlNiwgMCwgMSwKKwkJCQkmYnVmWzBdKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnJvcjsKKwkJCWlmICghYnVmWzBdKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyogcmVzZXQgcXVhbnRpemVyICovCisJCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkMmUxLCAzLCAxLCAxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxM191cGRhdGVfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKwl1OCB0bXAwOworCXU4IHJmX2dhaW4sIHJmXzUwLCByZl84MCwgaWZfZ2FpbiwgaWZfNTAsIGlmXzgwOworCWludCBzaWduYWxfc3RyZW5ndGg7CisKKwlkZWJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKKworCXN0YXRlLT5zaWduYWxfc3RyZW5ndGggPSAwOworCisJcmV0ID0gYWY5MDEzX3JlYWRfcmVnX2JpdHMoc3RhdGUsIDB4OWJlZSwgMCwgMSwgJnRtcDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJaWYgKHRtcDApIHsKKwkJcmV0ID0gYWY5MDEzX3JlYWRfcmVnKHN0YXRlLCAweDliYmQsICZyZl81MCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIDB4OWJkMCwgJnJmXzgwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgMHg5YmUyLCAmaWZfNTApOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJcmV0ID0gYWY5MDEzX3JlYWRfcmVnKHN0YXRlLCAweDliZTQsICZpZl84MCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIDB4ZDA3YywgJnJmX2dhaW4pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJcmV0ID0gYWY5MDEzX3JlYWRfcmVnKHN0YXRlLCAweGQwN2QsICZpZl9nYWluKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCXNpZ25hbF9zdHJlbmd0aCA9ICgweGZmZmYgLyAoOSAqIChyZl81MCArIGlmXzUwKSAtIFwKKwkJCTExICogKHJmXzgwICsgaWZfODApKSkgKiAoMTAgKiAocmZfZ2FpbiArIGlmX2dhaW4pIC0gXAorCQkJMTEgKiAocmZfODAgKyBpZl84MCkpOworCQlpZiAoc2lnbmFsX3N0cmVuZ3RoIDwgMCkKKwkJCXNpZ25hbF9zdHJlbmd0aCA9IDA7CisJCWVsc2UgaWYgKHNpZ25hbF9zdHJlbmd0aCA+IDB4ZmZmZikKKwkJCXNpZ25hbF9zdHJlbmd0aCA9IDB4ZmZmZjsKKworCQlzdGF0ZS0+c2lnbmFsX3N0cmVuZ3RoID0gc2lnbmFsX3N0cmVuZ3RoOworCX0KKworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfdXBkYXRlX3N0YXRpc3RpY3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN0YXRlLT5uZXh0X3N0YXRpc3RpY3NfY2hlY2spKQorCQlyZXR1cm4gMDsKKworCS8qIHNldCBtaW5pbXVtIHN0YXRpc3RpYyB1cGRhdGUgaW50ZXJ2YWwgKi8KKwlzdGF0ZS0+bmV4dF9zdGF0aXN0aWNzX2NoZWNrID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTIwMCk7CisKKwlyZXQgPSBhZjkwMTNfdXBkYXRlX3NpZ25hbF9zdHJlbmd0aChmZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlyZXQgPSBhZjkwMTNfdXBkYXRlX3NucihmZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlyZXQgPSBhZjkwMTNfdXBkYXRlX2Jlcl91bmMoZmUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqZmVzZXR0aW5ncykKK3sKKwlmZXNldHRpbmdzLT5taW5fZGVsYXlfbXMgPSA4MDA7CisJZmVzZXR0aW5ncy0+c3RlcF9zaXplID0gMDsKKwlmZXNldHRpbmdzLT5tYXhfZHJpZnQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQoreworCXN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldCA9IDA7CisJdTggdG1wOworCSpzdGF0dXMgPSAwOworCisJLyogVFBTIGxvY2sgKi8KKwlyZXQgPSBhZjkwMTNfcmVhZF9yZWdfYml0cyhzdGF0ZSwgMHhkMzMwLCAzLCAxLCAmdG1wKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCWlmICh0bXApCisJCSpzdGF0dXMgfD0gRkVfSEFTX1ZJVEVSQkkgfCBGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19TSUdOQUw7CisKKwkvKiBNUEVHMiBsb2NrICovCisJcmV0ID0gYWY5MDEzX3JlYWRfcmVnX2JpdHMoc3RhdGUsIDB4ZDUwNywgNiwgMSwgJnRtcCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlpZiAodG1wKQorCQkqc3RhdHVzIHw9IEZFX0hBU19TWU5DIHwgRkVfSEFTX0xPQ0s7CisKKwlpZiAoISpzdGF0dXMgJiBGRV9IQVNfU0lHTkFMKSB7CisJCS8qIEFHQyBsb2NrICovCisJCXJldCA9IGFmOTAxM19yZWFkX3JlZ19iaXRzKHN0YXRlLCAweGQxYTAsIDYsIDEsICZ0bXApOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJaWYgKHRtcCkKKwkJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKwl9CisKKwlpZiAoISpzdGF0dXMgJiBGRV9IQVNfQ0FSUklFUikgeworCQkvKiBDRk8gbG9jayAqLworCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWdfYml0cyhzdGF0ZSwgMHhkMzMzLCA3LCAxLCAmdG1wKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCWlmICh0bXApCisJCQkqc3RhdHVzIHw9IEZFX0hBU19DQVJSSUVSOworCX0KKworCWlmICghKnN0YXR1cyAmIEZFX0hBU19DQVJSSUVSKSB7CisJCS8qIFNGT0UgbG9jayAqLworCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWdfYml0cyhzdGF0ZSwgMHhkMzM0LCA2LCAxLCAmdG1wKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCWlmICh0bXApCisJCQkqc3RhdHVzIHw9IEZFX0hBU19DQVJSSUVSOworCX0KKworCXJldCA9IGFmOTAxM191cGRhdGVfc3RhdGlzdGljcyhmZSk7CisKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBhZjkwMTNfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQoreworCXN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKwlyZXQgPSBhZjkwMTNfdXBkYXRlX3N0YXRpc3RpY3MoZmUpOworCSpiZXIgPSBzdGF0ZS0+YmVyOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQoreworCXN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKwlyZXQgPSBhZjkwMTNfdXBkYXRlX3N0YXRpc3RpY3MoZmUpOworCSpzdHJlbmd0aCA9IHN0YXRlLT5zaWduYWxfc3RyZW5ndGg7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKwlyZXQgPSBhZjkwMTNfdXBkYXRlX3N0YXRpc3RpY3MoZmUpOworCSpzbnIgPSBzdGF0ZS0+c25yOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdWNibG9ja3MpCit7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCXJldCA9IGFmOTAxM191cGRhdGVfc3RhdGlzdGljcyhmZSk7CisJKnVjYmxvY2tzID0gc3RhdGUtPnVjYmxvY2tzOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKwlkZWJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKKworCXJldCA9IGFmOTAxM19sb2NrX2xlZChzdGF0ZSwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IGFmOTAxM19wb3dlcl9jdHJsKHN0YXRlLCAwKTsKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0LCBpLCBsZW47CisJdTggdG1wMCwgdG1wMTsKKwlzdHJ1Y3QgcmVnZGVzYyAqaW5pdDsKKwlkZWJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIHJlc2V0IE9GRE0gKi8KKwlyZXQgPSBhZjkwMTNfcmVzZXQoc3RhdGUsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBwb3dlciBvbiAqLworCXJldCA9IGFmOTAxM19wb3dlcl9jdHJsKHN0YXRlLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJLyogZW5hYmxlIEFEQyAqLworCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIDB4ZDczYSwgMHhhNCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIHdyaXRlIEFQSSB2ZXJzaW9uIHRvIGZpcm13YXJlICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0ZS0+Y29uZmlnLmFwaV92ZXJzaW9uKTsgaSsrKSB7CisJCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIDB4OWJmMiArIGksCisJCQlzdGF0ZS0+Y29uZmlnLmFwaV92ZXJzaW9uW2ldKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJLyogcHJvZ3JhbSBBREMgY29udHJvbCAqLworCXJldCA9IGFmOTAxM19zZXRfYWRjX2N0cmwoc3RhdGUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBzZXQgSTJDIG1hc3RlciBjbG9jayAqLworCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIDB4ZDQxNiwgMHgxNCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIHNldCAxNiBlbWJ4ICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQ3MDAsIDEsIDEsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBzZXQgbm8gdHJpZ2dlciAqLworCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkNzAwLCAyLCAxLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJLyogc2V0IHJlYWQtdXBkYXRlIGJpdCBmb3IgY29uc3RlbGxhdGlvbiAqLworCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkMzcxLCAxLCAxLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJLyogZW5hYmxlIEZFQyBtb25pdG9yICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQzOTIsIDEsIDEsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBsb2FkIE9GU00gc2V0dGluZ3MgKi8KKwlkZWJfaW5mbygiJXM6IGxvYWQgb2ZzbSBzZXR0aW5nc1xuIiwgX19mdW5jX18pOworCWxlbiA9IEFSUkFZX1NJWkUob2ZzbV9pbml0KTsKKwlpbml0ID0gb2ZzbV9pbml0OworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIGluaXRbaV0uYWRkciwgaW5pdFtpXS5wb3MsCisJCQlpbml0W2ldLmxlbiwgaW5pdFtpXS52YWwpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBsb2FkIHR1bmVyIHNwZWNpZmljIHNldHRpbmdzICovCisJZGViX2luZm8oIiVzOiBsb2FkIHR1bmVyIHNwZWNpZmljIHNldHRpbmdzXG4iLCBfX2Z1bmNfXyk7CisJc3dpdGNoIChzdGF0ZS0+Y29uZmlnLnR1bmVyKSB7CisJY2FzZSBBRjkwMTNfVFVORVJfTVhMNTAwM0Q6CisJCWxlbiA9IEFSUkFZX1NJWkUodHVuZXJfaW5pdF9teGw1MDAzZCk7CisJCWluaXQgPSB0dW5lcl9pbml0X214bDUwMDNkOworCQlicmVhazsKKwljYXNlIEFGOTAxM19UVU5FUl9NWEw1MDA1RDoKKwljYXNlIEFGOTAxM19UVU5FUl9NWEw1MDA1UjoKKwkJbGVuID0gQVJSQVlfU0laRSh0dW5lcl9pbml0X214bDUwMDUpOworCQlpbml0ID0gdHVuZXJfaW5pdF9teGw1MDA1OworCQlicmVhazsKKwljYXNlIEFGOTAxM19UVU5FUl9FTlY3N0gxMUQ1OgorCQlsZW4gPSBBUlJBWV9TSVpFKHR1bmVyX2luaXRfZW52NzdoMTFkNSk7CisJCWluaXQgPSB0dW5lcl9pbml0X2Vudjc3aDExZDU7CisJCWJyZWFrOworCWNhc2UgQUY5MDEzX1RVTkVSX01UMjA2MDoKKwkJbGVuID0gQVJSQVlfU0laRSh0dW5lcl9pbml0X210MjA2MCk7CisJCWluaXQgPSB0dW5lcl9pbml0X210MjA2MDsKKwkJYnJlYWs7CisJY2FzZSBBRjkwMTNfVFVORVJfTUM0NFM4MDM6CisJCWxlbiA9IEFSUkFZX1NJWkUodHVuZXJfaW5pdF9tYzQ0czgwMyk7CisJCWluaXQgPSB0dW5lcl9pbml0X21jNDRzODAzOworCQlicmVhazsKKwljYXNlIEFGOTAxM19UVU5FUl9RVDEwMTA6CisJY2FzZSBBRjkwMTNfVFVORVJfUVQxMDEwQToKKwkJbGVuID0gQVJSQVlfU0laRSh0dW5lcl9pbml0X3F0MTAxMCk7CisJCWluaXQgPSB0dW5lcl9pbml0X3F0MTAxMDsKKwkJYnJlYWs7CisJY2FzZSBBRjkwMTNfVFVORVJfTVQyMDYwXzI6CisJCWxlbiA9IEFSUkFZX1NJWkUodHVuZXJfaW5pdF9tdDIwNjBfMik7CisJCWluaXQgPSB0dW5lcl9pbml0X210MjA2MF8yOworCQlicmVhazsKKwljYXNlIEFGOTAxM19UVU5FUl9UREExODI3MToKKwkJbGVuID0gQVJSQVlfU0laRSh0dW5lcl9pbml0X3RkYTE4MjcxKTsKKwkJaW5pdCA9IHR1bmVyX2luaXRfdGRhMTgyNzE7CisJCWJyZWFrOworCWNhc2UgQUY5MDEzX1RVTkVSX1VOS05PV046CisJZGVmYXVsdDoKKwkJbGVuID0gQVJSQVlfU0laRSh0dW5lcl9pbml0X3Vua25vd24pOworCQlpbml0ID0gdHVuZXJfaW5pdF91bmtub3duOworCQlicmVhazsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCBpbml0W2ldLmFkZHIsIGluaXRbaV0ucG9zLAorCQkJaW5pdFtpXS5sZW4sIGluaXRbaV0udmFsKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJLyogc2V0IFRTIG1vZGUgKi8KKwlkZWJfaW5mbygiJXM6IHNldHRpbmcgdHMgbW9kZVxuIiwgX19mdW5jX18pOworCXRtcDAgPSAwOyAvKiBwYXJhbGxlbCBtb2RlICovCisJdG1wMSA9IDA7IC8qIHNlcmlhbCBtb2RlICovCisJc3dpdGNoIChzdGF0ZS0+Y29uZmlnLm91dHB1dF9tb2RlKSB7CisJY2FzZSBBRjkwMTNfT1VUUFVUX01PREVfUEFSQUxMRUw6CisJCXRtcDAgPSAxOworCQlicmVhazsKKwljYXNlIEFGOTAxM19PVVRQVVRfTU9ERV9TRVJJQUw6CisJCXRtcDEgPSAxOworCQlicmVhazsKKwljYXNlIEFGOTAxM19PVVRQVVRfTU9ERV9VU0I6CisJCS8qIHVzYiBtb2RlIGZvciBBRjkwMTUgKi8KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQ1MDAsIDEsIDEsIHRtcDApOyAvKiBwYXJhbGxlbCAqLworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQ1MDAsIDIsIDEsIHRtcDEpOyAvKiBzZXJpYWwgKi8KKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJLyogZW5hYmxlIGxvY2sgbGVkICovCisJcmV0ID0gYWY5MDEzX2xvY2tfbGVkKHN0YXRlLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgYWY5MDEzX29wczsKKworc3RhdGljIGludCBhZjkwMTNfZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUpCit7CisJaW50IGksIGxlbiwgcGFja2V0cywgcmVtYWluZGVyLCByZXQ7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwl1MTYgYWRkciA9IDB4NTEwMDsgLyogZmlybXdhcmUgc3RhcnQgYWRkcmVzcyAqLworCXUxNiBjaGVja3N1bSA9IDA7CisJdTggdmFsOworCXU4IGZ3X3BhcmFtc1s0XTsKKwl1OCAqZGF0YTsKKwl1OCAqZndfZmlsZSA9IEFGOTAxM19ERUZBVUxUX0ZJUk1XQVJFOworCisJbXNsZWVwKDEwMCk7CisJLyogY2hlY2sgd2hldGhlciBmaXJtd2FyZSBpcyBhbHJlYWR5IHJ1bm5pbmcgKi8KKwlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIDB4OThiZSwgJnZhbCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwllbHNlCisJCWRlYl9pbmZvKCIlczogZmlybXdhcmUgc3RhdHVzOiUwMnhcbiIsIF9fZnVuY19fLCB2YWwpOworCisJaWYgKHZhbCA9PSAweDBjKSAvKiBmdyBpcyBydW5uaW5nLCBubyBuZWVkIGZvciBkb3dubG9hZCAqLworCQlnb3RvIGV4aXQ7CisKKwlpbmZvKCJmb3VuZCBhICclcycgaW4gY29sZCBzdGF0ZSwgd2lsbCB0cnkgdG8gbG9hZCBhIGZpcm13YXJlIiwKKwkJYWY5MDEzX29wcy5pbmZvLm5hbWUpOworCisJLyogcmVxdWVzdCB0aGUgZmlybXdhcmUsIHRoaXMgd2lsbCBibG9jayBhbmQgdGltZW91dCAqLworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19maWxlLCAgJnN0YXRlLT5pMmMtPmRldik7CisJaWYgKHJldCkgeworCQllcnIoImRpZCBub3QgZmluZCB0aGUgZmlybXdhcmUgZmlsZS4gKCVzKSAiCisJCQkiUGxlYXNlIHNlZSBsaW51eC9Eb2N1bWVudGF0aW9uL2R2Yi8gZm9yIG1vcmUgZGV0YWlscyIgXAorCQkJIiBvbiBmaXJtd2FyZS1wcm9ibGVtcy4gKCVkKSIsCisJCQlmd19maWxlLCByZXQpOworCQlnb3RvIGVycm9yOworCX0KKworCWluZm8oImRvd25sb2FkaW5nIGZpcm13YXJlIGZyb20gZmlsZSAnJXMnIiwgZndfZmlsZSk7CisKKwkvKiBjYWxjIGNoZWNrc3VtICovCisJZm9yIChpID0gMDsgaSA8IGZ3LT5zaXplOyBpKyspCisJCWNoZWNrc3VtICs9IGZ3LT5kYXRhW2ldOworCisJZndfcGFyYW1zWzBdID0gY2hlY2tzdW0gPj4gODsKKwlmd19wYXJhbXNbMV0gPSBjaGVja3N1bSAmIDB4ZmY7CisJZndfcGFyYW1zWzJdID0gZnctPnNpemUgPj4gODsKKwlmd19wYXJhbXNbM10gPSBmdy0+c2l6ZSAmIDB4ZmY7CisKKwkvKiB3cml0ZSBmdyBjaGVja3N1bSAmIHNpemUgKi8KKwlyZXQgPSBhZjkwMTNfd3JpdGVfb2ZzbV9yZWdzKHN0YXRlLCAweDUwZmMsCisJCWZ3X3BhcmFtcywgc2l6ZW9mKGZ3X3BhcmFtcykpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfcmVsZWFzZTsKKworCSNkZWZpbmUgRldfUEFDS0VUX01BWF9EQVRBICAxNgorCisJcGFja2V0cyA9IGZ3LT5zaXplIC8gRldfUEFDS0VUX01BWF9EQVRBOworCXJlbWFpbmRlciA9IGZ3LT5zaXplICUgRldfUEFDS0VUX01BWF9EQVRBOworCWxlbiA9IEZXX1BBQ0tFVF9NQVhfREFUQTsKKwlmb3IgKGkgPSAwOyBpIDw9IHBhY2tldHM7IGkrKykgeworCQlpZiAoaSA9PSBwYWNrZXRzKSAgLyogc2V0IHNpemUgb2YgdGhlIGxhc3QgcGFja2V0ICovCisJCQlsZW4gPSByZW1haW5kZXI7CisKKwkJZGF0YSA9ICh1OCAqKShmdy0+ZGF0YSArIGkgKiBGV19QQUNLRVRfTUFYX0RBVEEpOworCQlyZXQgPSBhZjkwMTNfd3JpdGVfb2ZzbV9yZWdzKHN0YXRlLCBhZGRyLCBkYXRhLCBsZW4pOworCQlhZGRyICs9IEZXX1BBQ0tFVF9NQVhfREFUQTsKKworCQlpZiAocmV0KSB7CisJCQllcnIoImZpcm13YXJlIGRvd25sb2FkIGZhaWxlZCBhdCAlZCB3aXRoICVkIiwgaSwgcmV0KTsKKwkJCWdvdG8gZXJyb3JfcmVsZWFzZTsKKwkJfQorCX0KKworCS8qIHJlcXVlc3QgYm9vdCBmaXJtd2FyZSAqLworCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIDB4ZTIwNSwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9yZWxlYXNlOworCisJZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKKwkJbXNsZWVwKDEwMCk7CisKKwkJLyogY2hlY2sgZmlybXdhcmUgc3RhdHVzICovCisJCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgMHg5OGJlLCAmdmFsKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3JfcmVsZWFzZTsKKworCQlkZWJfaW5mbygiJXM6IGZpcm13YXJlIHN0YXR1czolMDJ4XG4iLCBfX2Z1bmNfXywgdmFsKTsKKworCQlpZiAodmFsID09IDB4MGMgfHwgdmFsID09IDB4MDQpIC8qIHN1Y2Nlc3Mgb3IgZmFpbCAqLworCQkJYnJlYWs7CisJfQorCisJaWYgKHZhbCA9PSAweDA0KSB7CisJCWVycigiZmlybXdhcmUgZGlkIG5vdCBydW4iKTsKKwkJcmV0ID0gLTE7CisJfSBlbHNlIGlmICh2YWwgIT0gMHgwYykgeworCQllcnIoImZpcm13YXJlIGJvb3QgdGltZW91dCIpOworCQlyZXQgPSAtMTsKKwl9CisKK2Vycm9yX3JlbGVhc2U6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CitlcnJvcjoKK2V4aXQ6CisJaWYgKCFyZXQpCisJCWluZm8oImZvdW5kIGEgJyVzJyBpbiB3YXJtIHN0YXRlLiIsIGFmOTAxM19vcHMuaW5mby5uYW1lKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxM19pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQoreworCWludCByZXQ7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlkZWJfaW5mbygiJXM6IGVuYWJsZTolZFxuIiwgX19mdW5jX18sIGVuYWJsZSk7CisKKwlpZiAoc3RhdGUtPmNvbmZpZy5vdXRwdXRfbW9kZSA9PSBBRjkwMTNfT1VUUFVUX01PREVfVVNCKQorCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDQxNywgMywgMSwgZW5hYmxlKTsKKwllbHNlCisJCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkNjA3LCAyLCAxLCBlbmFibGUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYWY5MDEzX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlrZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBhZjkwMTNfb3BzOworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICphZjkwMTNfYXR0YWNoKGNvbnN0IHN0cnVjdCBhZjkwMTNfY29uZmlnICpjb25maWcsCisJc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSA9IE5VTEw7CisJdTggYnVmWzNdLCBpOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZjkwMTNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKworCS8qIHNldHVwIHRoZSBzdGF0ZSAqLworCXN0YXRlLT5pMmMgPSBpMmM7CisJbWVtY3B5KCZzdGF0ZS0+Y29uZmlnLCBjb25maWcsIHNpemVvZihzdHJ1Y3QgYWY5MDEzX2NvbmZpZykpOworCisJLyogY2hpcCB2ZXJzaW9uICovCisJcmV0ID0gYWY5MDEzX3JlYWRfcmVnX2JpdHMoc3RhdGUsIDB4ZDczMywgNCwgNCwgJmJ1ZlsyXSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIFJPTSB2ZXJzaW9uICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIDB4MTE2YiArIGksICZidWZbaV0pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisJZGViX2luZm8oIiVzOiBjaGlwIHZlcnNpb246JWQgUk9NIHZlcnNpb246JWQuJWRcbiIsIF9fZnVuY19fLAorCQlidWZbMl0sIGJ1ZlswXSwgYnVmWzFdKTsKKworCS8qIGRvd25sb2FkIGZpcm13YXJlICovCisJaWYgKHN0YXRlLT5jb25maWcub3V0cHV0X21vZGUgIT0gQUY5MDEzX09VVFBVVF9NT0RFX1VTQikgeworCQlyZXQgPSBhZjkwMTNfZG93bmxvYWRfZmlybXdhcmUoc3RhdGUpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBmaXJtd2FyZSB2ZXJzaW9uICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIDB4NTEwMyArIGksICZidWZbaV0pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisJaW5mbygiZmlybXdhcmUgdmVyc2lvbjolZC4lZC4lZCIsIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0pOworCisJLyogc2V0dGluZ3MgZm9yIG1wMmlmICovCisJaWYgKHN0YXRlLT5jb25maWcub3V0cHV0X21vZGUgPT0gQUY5MDEzX09VVFBVVF9NT0RFX1VTQikgeworCQkvKiBBRjkwMTUgc3BsaXQgUFNCIHRvIDEuNWsgKyAwLjVrICovCisJCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkNTBiLCAyLCAxLCAxKTsKKwl9IGVsc2UgeworCQkvKiBBRjkwMTMgY2hhbmdlIHRoZSBvdXRwdXQgYml0IHRvIGRhdGE3ICovCisJCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkNTAwLCAzLCAxLCAxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCS8qIEFGOTAxMyBzZXQgbXBlZyB0byBmdWxsIHNwZWVkICovCisJCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkNTAyLCA0LCAxLCAxKTsKKwl9CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDUyMCwgNCwgMSwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIHNldCBHUElPcyAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RhdGUtPmNvbmZpZy5ncGlvKTsgaSsrKSB7CisJCXJldCA9IGFmOTAxM19zZXRfZ3BpbyhzdGF0ZSwgaSwgc3RhdGUtPmNvbmZpZy5ncGlvW2ldKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJLyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmFmOTAxM19vcHMsCisJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisKKwlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKK2Vycm9yOgorCWtmcmVlKHN0YXRlKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woYWY5MDEzX2F0dGFjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBhZjkwMTNfb3BzID0geworCS5pbmZvID0geworCQkubmFtZSA9ICJBZmF0ZWNoIEFGOTAxMyBEVkItVCIsCisJCS50eXBlID0gRkVfT0ZETSwKKwkJLmZyZXF1ZW5jeV9taW4gPSAxNzQwMDAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ID0gODYyMDAwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXBzaXplID0gMjUwMDAwLAorCQkuZnJlcXVlbmN5X3RvbGVyYW5jZSA9IDAsCisJCS5jYXBzID0KKwkJCUZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfCBGRV9DQU5fRkVDXzNfNCB8CisJCQlGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX0ZFQ19BVVRPIHwKKwkJCUZFX0NBTl9RUFNLIHwgRkVfQ0FOX1FBTV8xNiB8CisJCQlGRV9DQU5fUUFNXzY0IHwgRkVfQ0FOX1FBTV9BVVRPIHwKKwkJCUZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPIHwKKwkJCUZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPIHwKKwkJCUZFX0NBTl9ISUVSQVJDSFlfQVVUTyB8CisJCQlGRV9DQU5fUkVDT1ZFUiB8CisJCQlGRV9DQU5fTVVURV9UUworCX0sCisKKwkucmVsZWFzZSA9IGFmOTAxM19yZWxlYXNlLAorCS5pbml0ID0gYWY5MDEzX2luaXQsCisJLnNsZWVwID0gYWY5MDEzX3NsZWVwLAorCS5pMmNfZ2F0ZV9jdHJsID0gYWY5MDEzX2kyY19nYXRlX2N0cmwsCisKKwkuc2V0X2Zyb250ZW5kID0gYWY5MDEzX3NldF9mcm9udGVuZCwKKwkuZ2V0X2Zyb250ZW5kID0gYWY5MDEzX2dldF9mcm9udGVuZCwKKworCS5nZXRfdHVuZV9zZXR0aW5ncyA9IGFmOTAxM19nZXRfdHVuZV9zZXR0aW5ncywKKworCS5yZWFkX3N0YXR1cyA9IGFmOTAxM19yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIgPSBhZjkwMTNfcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gYWY5MDEzX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3NuciA9IGFmOTAxM19yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2NrcyA9IGFmOTAxM19yZWFkX3VjYmxvY2tzLAorfTsKKworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBhZjkwMTNfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CisKK01PRFVMRV9BVVRIT1IoIkFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBZmF0ZWNoIEFGOTAxMyBEVkItVCBkZW1vZHVsYXRvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGI5MGM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogRFZCIFVTQiBMaW51eCBkcml2ZXIgZm9yIEFmYXRlY2ggQUY5MDE1IERWQi1UIFVTQjIuMCByZWNlaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KKyAqCisgKiBUaGFua3MgdG8gQWZhdGVjaCB3aG8ga2luZGx5IHByb3ZpZGVkIGluZm9ybWF0aW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9BRjkwMTNfSF8KKyNkZWZpbmUgX0FGOTAxM19IXworCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisKK2VudW0gYWY5MDEzX3RzX21vZGUgeworCUFGOTAxM19PVVRQVVRfTU9ERV9QQVJBTExFTCwKKwlBRjkwMTNfT1VUUFVUX01PREVfU0VSSUFMLAorCUFGOTAxM19PVVRQVVRfTU9ERV9VU0IsIC8qIG9ubHkgZm9yIEFGOTAxNSAqLworfTsKKworZW51bSBhZjkwMTNfdHVuZXIgeworCUFGOTAxM19UVU5FUl9NWEw1MDAzRCAgID0gICAzLCAvKiBNYXhMaW5lYXIgKi8KKwlBRjkwMTNfVFVORVJfTVhMNTAwNUQgICA9ICAxMywgLyogTWF4TGluZWFyICovCisJQUY5MDEzX1RVTkVSX01YTDUwMDVSICAgPSAgMzAsIC8qIE1heExpbmVhciAqLworCUFGOTAxM19UVU5FUl9FTlY3N0gxMUQ1ID0gMTI5LCAvKiBQYW5hc29uaWMgKi8KKwlBRjkwMTNfVFVORVJfTVQyMDYwICAgICA9IDEzMCwgLyogTWljcm90dW5lICovCisJQUY5MDEzX1RVTkVSX01DNDRTODAzICAgPSAxMzMsIC8qIEZyZWVzY2FsZSAqLworCUFGOTAxM19UVU5FUl9RVDEwMTAgICAgID0gMTM0LCAvKiBRdWFudGVrICovCisJQUY5MDEzX1RVTkVSX1VOS05PV04gICAgPSAxNDAsIC8qIGZvciBjYW4gdHVuZXJzID8gKi8KKwlBRjkwMTNfVFVORVJfTVQyMDYwXzIgICA9IDE0NywgLyogTWljcm90dW5lICovCisJQUY5MDEzX1RVTkVSX1REQTE4MjcxICAgPSAxNTYsIC8qIE5YUCAqLworCUFGOTAxM19UVU5FUl9RVDEwMTBBICAgID0gMTYyLCAvKiBRdWFudGVrICovCit9OworCisvKiBBRjkwMTMvNSBHUElPcyAobW9zdGx5IGd1ZXNzZWQpCisgICBkZW1vZCMxLWdwaW8jMCAtIHNldCBkZW1vZCMyIGkyYy1hZGRyIGZvciBkdWFsIGRldmljZXMKKyAgIGRlbW9kIzEtZ3BpbyMxIC0geHRhbCBzZXR0aW5nICg/KQorICAgZGVtb2QjMS1ncGlvIzMgLSB0dW5lciMxCisgICBkZW1vZCMyLWdwaW8jMCAtIHR1bmVyIzIKKyAgIGRlbW9kIzItZ3BpbyMxIC0geHRhbCBzZXR0aW5nICg/KQorKi8KKyNkZWZpbmUgQUY5MDEzX0dQSU9fT04gKDEgPDwgMCkKKyNkZWZpbmUgQUY5MDEzX0dQSU9fRU4gKDEgPDwgMSkKKyNkZWZpbmUgQUY5MDEzX0dQSU9fTyAgKDEgPDwgMikKKyNkZWZpbmUgQUY5MDEzX0dQSU9fSSAgKDEgPDwgMykKKworI2RlZmluZSBBRjkwMTNfR1BJT19MTyAoQUY5MDEzX0dQSU9fT058QUY5MDEzX0dQSU9fRU4pCisjZGVmaW5lIEFGOTAxM19HUElPX0hJIChBRjkwMTNfR1BJT19PTnxBRjkwMTNfR1BJT19FTnxBRjkwMTNfR1BJT19PKQorCisjZGVmaW5lIEFGOTAxM19HUElPX1RVTkVSX09OICAoQUY5MDEzX0dQSU9fT058QUY5MDEzX0dQSU9fRU4pCisjZGVmaW5lIEFGOTAxM19HUElPX1RVTkVSX09GRiAoQUY5MDEzX0dQSU9fT058QUY5MDEzX0dQSU9fRU58QUY5MDEzX0dQSU9fTykKKworc3RydWN0IGFmOTAxM19jb25maWcgeworCS8qIGRlbW9kdWxhdG9yJ3MgSTJDIGFkZHJlc3MgKi8KKwl1OCBkZW1vZF9hZGRyZXNzOworCisJLyogZnJlcXVlbmNpZXMgaW4ga0h6ICovCisJdTMyIGFkY19jbG9jazsKKworCS8qIHR1bmVyIElEICovCisJdTggdHVuZXI7CisKKwkvKiB0dW5lciBJRiAqLworCXUxNiB0dW5lcl9pZjsKKworCS8qIFRTIGRhdGEgb3V0cHV0IG1vZGUgKi8KKwl1OCBvdXRwdXRfbW9kZToyOworCisJLyogUkYgc3BlY3RydW0gaW52ZXJzaW9uICovCisJdTggcmZfc3BlY19pbnY6MTsKKworCS8qIEFQSSB2ZXJzaW9uICovCisJdTggYXBpX3ZlcnNpb25bNF07CisKKwkvKiBHUElPcyAqLworCXU4IGdwaW9bNF07Cit9OworCisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfQUY5MDEzKSB8fCBcCisJKGRlZmluZWQoQ09ORklHX0RWQl9BRjkwMTNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqYWY5MDEzX2F0dGFjaChjb25zdCBzdHJ1Y3QgYWY5MDEzX2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmFmOTAxM19hdHRhY2goCitjb25zdCBzdHJ1Y3QgYWY5MDEzX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfRFZCX0FGOTAxMyAqLworCisjZW5kaWYgLyogX0FGOTAxM19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxM19wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjNlMjUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxM19wcml2LmgKQEAgLTAsMCArMSw4NjkgQEAKKy8qCisgKiBEVkIgVVNCIExpbnV4IGRyaXZlciBmb3IgQWZhdGVjaCBBRjkwMTUgRFZCLVQgVVNCMi4wIHJlY2VpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgorICoKKyAqIFRoYW5rcyB0byBBZmF0ZWNoIHdobyBraW5kbHkgcHJvdmlkZWQgaW5mb3JtYXRpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0FGOTAxM19QUklWXworI2RlZmluZSBfQUY5MDEzX1BSSVZfCisKKyNkZWZpbmUgTE9HX1BSRUZJWCAiYWY5MDEzIgorZXh0ZXJuIGludCBhZjkwMTNfZGVidWc7CisKKyNkZWZpbmUgZHByaW50ayh2YXIsIGxldmVsLCBhcmdzLi4uKSBcCisJICAgIGRvIHsgaWYgKCh2YXIgJiBsZXZlbCkpIHByaW50ayhhcmdzKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBkZWJ1Z19kdW1wKGIsIGwsIGZ1bmMpIHtcCisJaW50IGxvb3BfOyBcCisJZm9yIChsb29wXyA9IDA7IGxvb3BfIDwgbDsgbG9vcF8rKykgXAorCQlmdW5jKCIlMDJ4ICIsIGJbbG9vcF9dKTsgXAorCWZ1bmMoIlxuIik7XAorfQorCisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoYWY5MDEzX2RlYnVnLCAweDAxLCBhcmdzKQorCisjdW5kZWYgZXJyCisjZGVmaW5lIGVycihmLCBhcmcuLi4pICBwcmludGsoS0VSTl9FUlIgICAgIExPR19QUkVGSVgiOiAiIGYgIlxuIiAsICMjIGFyZykKKyN1bmRlZiBpbmZvCisjZGVmaW5lIGluZm8oZiwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPICAgIExPR19QUkVGSVgiOiAiIGYgIlxuIiAsICMjIGFyZykKKyN1bmRlZiB3YXJuCisjZGVmaW5lIHdhcm4oZiwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIExPR19QUkVGSVgiOiAiIGYgIlxuIiAsICMjIGFyZykKKworI2RlZmluZSBBRjkwMTNfREVGQVVMVF9GSVJNV0FSRSAgICAgImR2Yi1mZS1hZjkwMTMuZnciCisKK3N0cnVjdCByZWdkZXNjIHsKKwl1MTYgYWRkcjsKKwl1OCAgcG9zOjQ7CisJdTggIGxlbjo0OworCXU4ICB2YWw7Cit9OworCitzdHJ1Y3Qgc25yX3RhYmxlIHsKKwl1MzIgdmFsOworCXU4IHNucjsKK307CisKKy8qIFFQU0sgU05SIGxvb2t1cCB0YWJsZSAqLworc3RhdGljIHN0cnVjdCBzbnJfdGFibGUgcXBza19zbnJfdGFibGVbXSA9IHsKKwl7IDB4MGI0NzcxLCAgMCB9LAorCXsgMHgwYzFhZWQsICAxIH0sCisJeyAweDBkMGQyNywgIDIgfSwKKwl7IDB4MGU0ZDE5LCAgMyB9LAorCXsgMHgwZTVkYTgsICA0IH0sCisJeyAweDEwNzA5NywgIDUgfSwKKwl7IDB4MTE2OTc1LCAgNiB9LAorCXsgMHgxMjUyZDksICA3IH0sCisJeyAweDEzMWZhNCwgIDggfSwKKwl7IDB4MTNkNWUxLCAgOSB9LAorCXsgMHgxNDhlNTMsIDEwIH0sCisJeyAweDE1MzU4YiwgMTEgfSwKKwl7IDB4MTVkZDI5LCAxMiB9LAorCXsgMHgxNjgxMTIsIDEzIH0sCisJeyAweDE3MGI2MSwgMTQgfSwKKwl7IDB4ZmZmZmZmLCAxNSB9LAorfTsKKworLyogUUFNMTYgU05SIGxvb2t1cCB0YWJsZSAqLworc3RhdGljIHN0cnVjdCBzbnJfdGFibGUgcWFtMTZfc25yX3RhYmxlW10gPSB7CisJeyAweDA1ZWI2MiwgIDUgfSwKKwl7IDB4MDVmZWNmLCAgNiB9LAorCXsgMHgwNjBiODAsICA3IH0sCisJeyAweDA2MjUwMSwgIDggfSwKKwl7IDB4MDY0ODY1LCAgOSB9LAorCXsgMHgwNjk2MDQsIDEwIH0sCisJeyAweDA2ZjM1NiwgMTEgfSwKKwl7IDB4MDc3MDZhLCAxMiB9LAorCXsgMHgwODA0ZDMsIDEzIH0sCisJeyAweDA4OWQxYSwgMTQgfSwKKwl7IDB4MDkzZTNkLCAxNSB9LAorCXsgMHgwOWUzNWQsIDE2IH0sCisJeyAweDBhN2MzYywgMTcgfSwKKwl7IDB4MGFmYWY4LCAxOCB9LAorCXsgMHgwYjcxOWQsIDE5IH0sCisJeyAweGZmZmZmZiwgMjAgfSwKK307CisKKy8qIFFBTTY0IFNOUiBsb29rdXAgdGFibGUgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25yX3RhYmxlIHFhbTY0X3Nucl90YWJsZVtdID0geworCXsgMHgwMzEwOWIsIDEyIH0sCisJeyAweDAzMTBkNCwgMTMgfSwKKwl7IDB4MDMxOTIwLCAxNCB9LAorCXsgMHgwMzIyZDAsIDE1IH0sCisJeyAweDAzMzlmYywgMTYgfSwKKwl7IDB4MDM2NGExLCAxNyB9LAorCXsgMHgwMzhiY2MsIDE4IH0sCisJeyAweDAzYzdkMywgMTkgfSwKKwl7IDB4MDQwOGNjLCAyMCB9LAorCXsgMHgwNDNiZWQsIDIxIH0sCisJeyAweDA0ODA2MSwgMjIgfSwKKwl7IDB4MDRiZTk1LCAyMyB9LAorCXsgMHgwNGZhN2QsIDI0IH0sCisJeyAweDA1MjQwNSwgMjUgfSwKKwl7IDB4MDU1NzBkLCAyNiB9LAorCXsgMHhmZmZmZmYsIDI3IH0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ2Rlc2Mgb2ZzbV9pbml0W10gPSB7CisJeyAweGQ3M2EsIDAsIDgsIDB4YTEgfSwKKwl7IDB4ZDczYiwgMCwgOCwgMHgxZiB9LAorCXsgMHhkNzNjLCA0LCA0LCAweDBhIH0sCisJeyAweGQ3MzIsIDMsIDEsIDB4MDAgfSwKKwl7IDB4ZDczMSwgNCwgMiwgMHgwMyB9LAorCXsgMHhkNzNkLCA3LCAxLCAweDAxIH0sCisJeyAweGQ3NDAsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDc0MCwgMSwgMSwgMHgwMCB9LAorCXsgMHhkNzQwLCAyLCAxLCAweDAwIH0sCisJeyAweGQ3NDAsIDMsIDEsIDB4MDEgfSwKKwl7IDB4ZDNjMSwgNCwgMSwgMHgwMSB9LAorCXsgMHhkM2EyLCAwLCA4LCAweDAwIH0sCisJeyAweGQzYTMsIDAsIDgsIDB4MDQgfSwKKwl7IDB4ZDMwNSwgMCwgOCwgMHgzMiB9LAorCXsgMHhkMzA2LCAwLCA4LCAweDEwIH0sCisJeyAweGQzMDQsIDAsIDgsIDB4MDQgfSwKKwl7IDB4OTExMiwgMCwgMSwgMHgwMSB9LAorCXsgMHg5MTFkLCAwLCAxLCAweDAxIH0sCisJeyAweDkxMWEsIDAsIDEsIDB4MDEgfSwKKwl7IDB4OTExYiwgMCwgMSwgMHgwMSB9LAorCXsgMHg5YmNlLCAwLCA0LCAweDAyIH0sCisJeyAweDkxMTYsIDAsIDEsIDB4MDEgfSwKKwl7IDB4OWJkMSwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMmUwLCAwLCA4LCAweGQwIH0sCisJeyAweGQyZTksIDAsIDQsIDB4MGQgfSwKKwl7IDB4ZDM4YywgMCwgOCwgMHhmYyB9LAorCXsgMHhkMzhkLCAwLCA4LCAweDAwIH0sCisJeyAweGQzOGUsIDAsIDgsIDB4N2UgfSwKKwl7IDB4ZDM4ZiwgMCwgOCwgMHgwMCB9LAorCXsgMHhkMzkwLCAwLCA4LCAweDJmIH0sCisJeyAweGQxNDUsIDQsIDEsIDB4MDEgfSwKKwl7IDB4ZDFhOSwgNCwgMSwgMHgwMSB9LAorCXsgMHhkMTU4LCA1LCAzLCAweDAxIH0sCisJeyAweGQxNTksIDAsIDYsIDB4MDYgfSwKKwl7IDB4ZDE2NywgMCwgOCwgMHgwMCB9LAorCXsgMHhkMTY4LCAwLCA0LCAweDA3IH0sCisJeyAweGQxYzMsIDUsIDMsIDB4MDAgfSwKKwl7IDB4ZDFjNCwgMCwgNiwgMHgwMCB9LAorCXsgMHhkMWM1LCAwLCA3LCAweDEwIH0sCisJeyAweGQxYzYsIDAsIDMsIDB4MDIgfSwKKwl7IDB4ZDA4MCwgMiwgNSwgMHgwMyB9LAorCXsgMHhkMDgxLCA0LCA0LCAweDA5IH0sCisJeyAweGQwOTgsIDQsIDQsIDB4MGYgfSwKKwl7IDB4ZDA5OCwgMCwgNCwgMHgwMyB9LAorCXsgMHhkYmMwLCAzLCAxLCAweDAxIH0sCisJeyAweGRiYzAsIDQsIDEsIDB4MDEgfSwKKwl7IDB4ZGJjNywgMCwgOCwgMHgwOCB9LAorCXsgMHhkYmM4LCA0LCA0LCAweDAwIH0sCisJeyAweGRiYzksIDAsIDUsIDB4MDEgfSwKKwl7IDB4ZDI4MCwgMCwgOCwgMHhlMCB9LAorCXsgMHhkMjgxLCAwLCA4LCAweGZmIH0sCisJeyAweGQyODIsIDAsIDgsIDB4ZmYgfSwKKwl7IDB4ZDI4MywgMCwgOCwgMHhjMyB9LAorCXsgMHhkMjg0LCAwLCA4LCAweGZmIH0sCisJeyAweGQyODUsIDAsIDQsIDB4MDEgfSwKKwl7IDB4ZDBmMCwgMCwgNywgMHgxYSB9LAorCXsgMHhkMGYxLCA0LCAxLCAweDAxIH0sCisJeyAweGQwZjIsIDAsIDgsIDB4MGMgfSwKKwl7IDB4ZDEwMywgMCwgNCwgMHgwOCB9LAorCXsgMHhkMGY4LCAwLCA3LCAweDIwIH0sCisJeyAweGQxMTEsIDUsIDEsIDB4MDAgfSwKKwl7IDB4ZDExMSwgNiwgMSwgMHgwMCB9LAorCXsgMHg5MTBiLCAwLCA4LCAweDBhIH0sCisJeyAweDkxMTUsIDAsIDgsIDB4MDIgfSwKKwl7IDB4OTEwYywgMCwgOCwgMHgwMiB9LAorCXsgMHg5MTBkLCAwLCA4LCAweDA4IH0sCisJeyAweDkxMGUsIDAsIDgsIDB4MGEgfSwKKwl7IDB4OWJmNiwgMCwgOCwgMHgwNiB9LAorCXsgMHg5YmY4LCAwLCA4LCAweDAyIH0sCisJeyAweDliZjcsIDAsIDgsIDB4MDUgfSwKKwl7IDB4OWJmOSwgMCwgOCwgMHgwZiB9LAorCXsgMHg5YmZjLCAwLCA4LCAweDEzIH0sCisJeyAweDliZDMsIDAsIDgsIDB4ZmYgfSwKKwl7IDB4OWJiZSwgMCwgMSwgMHgwMSB9LAorCXsgMHg5YmNjLCAwLCAxLCAweDAxIH0sCit9OworCisvKiBQYW5hc29uaWMgRU5WNzdIMTFENSB0dW5lciBpbml0CisgICBBRjkwMTNfVFVORVJfRU5WNzdIMTFENSA9IDEyOSAqLworc3RhdGljIHN0cnVjdCByZWdkZXNjIHR1bmVyX2luaXRfZW52NzdoMTFkNVtdID0geworCXsgMHg5YmQ1LCAwLCA4LCAweDAxIH0sCisJeyAweDliZDYsIDAsIDgsIDB4MDMgfSwKKwl7IDB4OWJiZSwgMCwgOCwgMHgwMSB9LAorCXsgMHhkMWEwLCAxLCAxLCAweDAxIH0sCisJeyAweGQwMDAsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMSwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCAxLCAxLCAweDAxIH0sCisJeyAweGQwMDEsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMSwgNSwgMSwgMHgwMCB9LAorCXsgMHhkMDAyLCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDMsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwNCwgMCwgNSwgMHgxOSB9LAorCXsgMHhkMDA1LCAwLCA1LCAweDFhIH0sCisJeyAweGQwMGUsIDAsIDUsIDB4MTAgfSwKKwl7IDB4ZDAwZiwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDBmLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTAsIDAsIDMsIDB4MDQgfSwKKwl7IDB4ZDAxMCwgMywgMywgMHgwNSB9LAorCXsgMHhkMDE2LCA0LCA0LCAweDAzIH0sCisJeyAweGQwMWYsIDAsIDYsIDB4MGEgfSwKKwl7IDB4ZDAyMCwgMCwgNiwgMHgwYSB9LAorCXsgMHg5YmRhLCAwLCA4LCAweDAwIH0sCisJeyAweDliZTMsIDAsIDgsIDB4MDAgfSwKKwl7IDB4ZDAxNSwgMCwgOCwgMHg1MCB9LAorCXsgMHhkMDE2LCAwLCAxLCAweDAwIH0sCisJeyAweGQwNDQsIDAsIDgsIDB4NDYgfSwKKwl7IDB4ZDA0NSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDA4LCAwLCA4LCAweGRmIH0sCisJeyAweGQwMDksIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDAwNiwgMCwgOCwgMHg0NCB9LAorCXsgMHhkMDA3LCAwLCAyLCAweDAxIH0sCisJeyAweGQwMGMsIDAsIDgsIDB4ZWIgfSwKKwl7IDB4ZDAwZCwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDBhLCAwLCA4LCAweGY0IH0sCisJeyAweGQwMGIsIDAsIDIsIDB4MDEgfSwKKwl7IDB4OWJiYSwgMCwgOCwgMHhmOSB9LAorCXsgMHg5YmMzLCAwLCA4LCAweGRmIH0sCisJeyAweDliYzQsIDAsIDgsIDB4MDIgfSwKKwl7IDB4OWJjNSwgMCwgOCwgMHhlYiB9LAorCXsgMHg5YmM2LCAwLCA4LCAweDAyIH0sCisJeyAweDliYzksIDAsIDgsIDB4NTIgfSwKKwl7IDB4ZDAxMSwgMCwgOCwgMHgzYyB9LAorCXsgMHhkMDEyLCAwLCAyLCAweDAxIH0sCisJeyAweGQwMTMsIDAsIDgsIDB4ZjcgfSwKKwl7IDB4ZDAxNCwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDQwLCAwLCA4LCAweDBiIH0sCisJeyAweGQwNDEsIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDA0MiwgMCwgOCwgMHg0ZCB9LAorCXsgMHhkMDQzLCAwLCAyLCAweDAwIH0sCisJeyAweGQwNDUsIDEsIDEsIDB4MDAgfSwKKwl7IDB4OWJjZiwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDQ1LCAyLCAxLCAweDAxIH0sCisJeyAweGQwNGYsIDAsIDgsIDB4OWEgfSwKKwl7IDB4ZDA1MCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDUxLCAwLCA4LCAweDVhIH0sCisJeyAweGQwNTIsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MywgMCwgOCwgMHg1MCB9LAorCXsgMHhkMDU0LCAwLCA4LCAweDQ2IH0sCisJeyAweDliZDcsIDAsIDgsIDB4MGEgfSwKKwl7IDB4OWJkOCwgMCwgOCwgMHgxNCB9LAorCXsgMHg5YmQ5LCAwLCA4LCAweDA4IH0sCit9OworCisvKiBNaWNyb3R1bmUgTVQyMDYwIHR1bmVyIGluaXQKKyAgIEFGOTAxM19UVU5FUl9NVDIwNjAgICAgID0gMTMwICovCitzdGF0aWMgc3RydWN0IHJlZ2Rlc2MgdHVuZXJfaW5pdF9tdDIwNjBbXSA9IHsKKwl7IDB4OWJkNSwgMCwgOCwgMHgwMSB9LAorCXsgMHg5YmQ2LCAwLCA4LCAweDA3IH0sCisJeyAweGQxYTAsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDAwLCAxLCAxLCAweDAwIH0sCisJeyAweGQwMDEsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCA1LCAxLCAweDAwIH0sCisJeyAweGQwMDIsIDAsIDUsIDB4MTkgfSwKKwl7IDB4ZDAwMywgMCwgNSwgMHgxYSB9LAorCXsgMHhkMDA0LCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDUsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwZSwgMCwgNSwgMHgxMCB9LAorCXsgMHhkMDBmLCAwLCAzLCAweDA0IH0sCisJeyAweGQwMGYsIDMsIDMsIDB4MDUgfSwKKwl7IDB4ZDAxMCwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDEwLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTYsIDQsIDQsIDB4MDMgfSwKKwl7IDB4ZDAxZiwgMCwgNiwgMHgwYSB9LAorCXsgMHhkMDIwLCAwLCA2LCAweDBhIH0sCisJeyAweDliZGEsIDAsIDgsIDB4MDAgfSwKKwl7IDB4OWJlMywgMCwgOCwgMHgwMCB9LAorCXsgMHg5YmJlLCAwLCAxLCAweDAwIH0sCisJeyAweDliY2MsIDAsIDEsIDB4MDAgfSwKKwl7IDB4OWJiOSwgMCwgOCwgMHg3NSB9LAorCXsgMHg5YmNkLCAwLCA4LCAweDI0IH0sCisJeyAweDliZmYsIDAsIDgsIDB4MzAgfSwKKwl7IDB4ZDAxNSwgMCwgOCwgMHg0NiB9LAorCXsgMHhkMDE2LCAwLCAxLCAweDAwIH0sCisJeyAweGQwNDQsIDAsIDgsIDB4NDYgfSwKKwl7IDB4ZDA0NSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDA4LCAwLCA4LCAweDBmIH0sCisJeyAweGQwMDksIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDAwNiwgMCwgOCwgMHgzMiB9LAorCXsgMHhkMDA3LCAwLCAyLCAweDAxIH0sCisJeyAweGQwMGMsIDAsIDgsIDB4MzYgfSwKKwl7IDB4ZDAwZCwgMCwgMiwgMHgwMyB9LAorCXsgMHhkMDBhLCAwLCA4LCAweDM1IH0sCisJeyAweGQwMGIsIDAsIDIsIDB4MDEgfSwKKwl7IDB4OWJjNywgMCwgOCwgMHgwNyB9LAorCXsgMHg5YmM4LCAwLCA4LCAweDkwIH0sCisJeyAweDliYzMsIDAsIDgsIDB4MGYgfSwKKwl7IDB4OWJjNCwgMCwgOCwgMHgwMiB9LAorCXsgMHg5YmM1LCAwLCA4LCAweDM2IH0sCisJeyAweDliYzYsIDAsIDgsIDB4MDMgfSwKKwl7IDB4OWJiYSwgMCwgOCwgMHhjOSB9LAorCXsgMHg5YmM5LCAwLCA4LCAweDc5IH0sCisJeyAweGQwMTEsIDAsIDgsIDB4MTAgfSwKKwl7IDB4ZDAxMiwgMCwgMiwgMHgwMSB9LAorCXsgMHhkMDEzLCAwLCA4LCAweDQ1IH0sCisJeyAweGQwMTQsIDAsIDIsIDB4MDMgfSwKKwl7IDB4ZDA0MCwgMCwgOCwgMHg5OCB9LAorCXsgMHhkMDQxLCAwLCAyLCAweDAwIH0sCisJeyAweGQwNDIsIDAsIDgsIDB4Y2YgfSwKKwl7IDB4ZDA0MywgMCwgMiwgMHgwMyB9LAorCXsgMHhkMDQ1LCAxLCAxLCAweDAwIH0sCisJeyAweDliY2YsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA0NSwgMiwgMSwgMHgwMSB9LAorCXsgMHhkMDRmLCAwLCA4LCAweDlhIH0sCisJeyAweGQwNTAsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MSwgMCwgOCwgMHg1YSB9LAorCXsgMHhkMDUyLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNTMsIDAsIDgsIDB4NTAgfSwKKwl7IDB4ZDA1NCwgMCwgOCwgMHg0NiB9LAorCXsgMHg5YmQ3LCAwLCA4LCAweDBhIH0sCisJeyAweDliZDgsIDAsIDgsIDB4MTQgfSwKKwl7IDB4OWJkOSwgMCwgOCwgMHgwOCB9LAorCXsgMHg5YmQwLCAwLCA4LCAweGNjIH0sCisJeyAweDliZTQsIDAsIDgsIDB4YTAgfSwKKwl7IDB4OWJiZCwgMCwgOCwgMHg4ZSB9LAorCXsgMHg5YmUyLCAwLCA4LCAweDRkIH0sCisJeyAweDliZWUsIDAsIDEsIDB4MDEgfSwKK307CisKKy8qIE1pY3JvdHVuZSBNVDIwNjAgdHVuZXIgaW5pdAorICAgQUY5MDEzX1RVTkVSX01UMjA2MF8yICAgPSAxNDcgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVnZGVzYyB0dW5lcl9pbml0X210MjA2MF8yW10gPSB7CisJeyAweDliZDUsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJkNiwgMCwgOCwgMHgwNiB9LAorCXsgMHg5YmJlLCAwLCA4LCAweDAxIH0sCisJeyAweGQxYTAsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDAwLCAxLCAxLCAweDAwIH0sCisJeyAweGQwMDEsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCA1LCAxLCAweDAwIH0sCisJeyAweGQwMDIsIDAsIDUsIDB4MTkgfSwKKwl7IDB4ZDAwMywgMCwgNSwgMHgxYSB9LAorCXsgMHhkMDA0LCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDUsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwZSwgMCwgNSwgMHgxMCB9LAorCXsgMHhkMDBmLCAwLCAzLCAweDA0IH0sCisJeyAweGQwMGYsIDMsIDMsIDB4MDUgfSwKKwl7IDB4ZDAxMCwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDEwLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTYsIDQsIDQsIDB4MDMgfSwKKwl7IDB4ZDAxZiwgMCwgNiwgMHgwYSB9LAorCXsgMHhkMDIwLCAwLCA2LCAweDBhIH0sCisJeyAweGQwMTUsIDAsIDgsIDB4NDYgfSwKKwl7IDB4ZDAxNiwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDQ0LCAwLCA4LCAweDQ2IH0sCisJeyAweGQwNDUsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwOCwgMCwgOCwgMHgwZiB9LAorCXsgMHhkMDA5LCAwLCAyLCAweDAyIH0sCisJeyAweGQwMDYsIDAsIDgsIDB4MzIgfSwKKwl7IDB4ZDAwNywgMCwgMiwgMHgwMSB9LAorCXsgMHhkMDBjLCAwLCA4LCAweDM2IH0sCisJeyAweGQwMGQsIDAsIDIsIDB4MDMgfSwKKwl7IDB4ZDAwYSwgMCwgOCwgMHgzNSB9LAorCXsgMHhkMDBiLCAwLCAyLCAweDAxIH0sCisJeyAweDliYzcsIDAsIDgsIDB4MDcgfSwKKwl7IDB4OWJjOCwgMCwgOCwgMHg5MCB9LAorCXsgMHg5YmMzLCAwLCA4LCAweDBmIH0sCisJeyAweDliYzQsIDAsIDgsIDB4MDIgfSwKKwl7IDB4OWJjNSwgMCwgOCwgMHgzNiB9LAorCXsgMHg5YmM2LCAwLCA4LCAweDAzIH0sCisJeyAweDliYmEsIDAsIDgsIDB4YzkgfSwKKwl7IDB4OWJjOSwgMCwgOCwgMHg3OSB9LAorCXsgMHhkMDExLCAwLCA4LCAweDEwIH0sCisJeyAweGQwMTIsIDAsIDIsIDB4MDEgfSwKKwl7IDB4ZDAxMywgMCwgOCwgMHg0NSB9LAorCXsgMHhkMDE0LCAwLCAyLCAweDAzIH0sCisJeyAweGQwNDAsIDAsIDgsIDB4OTggfSwKKwl7IDB4ZDA0MSwgMCwgMiwgMHgwMCB9LAorCXsgMHhkMDQyLCAwLCA4LCAweGNmIH0sCisJeyAweGQwNDMsIDAsIDIsIDB4MDMgfSwKKwl7IDB4ZDA0NSwgMSwgMSwgMHgwMCB9LAorCXsgMHg5YmNmLCAwLCA4LCAweDAxIH0sCisJeyAweGQwNDUsIDIsIDEsIDB4MDEgfSwKKwl7IDB4ZDA0ZiwgMCwgOCwgMHg5YSB9LAorCXsgMHhkMDUwLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNTEsIDAsIDgsIDB4NWEgfSwKKwl7IDB4ZDA1MiwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDUzLCAwLCA4LCAweDk2IH0sCisJeyAweGQwNTQsIDAsIDgsIDB4NDYgfSwKKwl7IDB4ZDA0NSwgNywgMSwgMHgwMCB9LAorCXsgMHg5YmQ3LCAwLCA4LCAweDBhIH0sCisJeyAweDliZDgsIDAsIDgsIDB4MTQgfSwKKwl7IDB4OWJkOSwgMCwgOCwgMHgwOCB9LAorfTsKKworLyogTWF4TGluZWFyIE1YTDUwMDMgdHVuZXIgaW5pdAorICAgQUY5MDEzX1RVTkVSX01YTDUwMDNEICAgPSAgIDMgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVnZGVzYyB0dW5lcl9pbml0X214bDUwMDNkW10gPSB7CisJeyAweDliZDUsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJkNiwgMCwgOCwgMHgwOSB9LAorCXsgMHhkMWEwLCAxLCAxLCAweDAxIH0sCisJeyAweGQwMDAsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMSwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCAxLCAxLCAweDAxIH0sCisJeyAweGQwMDEsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMSwgNSwgMSwgMHgwMCB9LAorCXsgMHhkMDAyLCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDMsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwNCwgMCwgNSwgMHgxOSB9LAorCXsgMHhkMDA1LCAwLCA1LCAweDFhIH0sCisJeyAweGQwMGUsIDAsIDUsIDB4MTAgfSwKKwl7IDB4ZDAwZiwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDBmLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTAsIDAsIDMsIDB4MDQgfSwKKwl7IDB4ZDAxMCwgMywgMywgMHgwNSB9LAorCXsgMHhkMDE2LCA0LCA0LCAweDAzIH0sCisJeyAweGQwMWYsIDAsIDYsIDB4MGEgfSwKKwl7IDB4ZDAyMCwgMCwgNiwgMHgwYSB9LAorCXsgMHg5YmRhLCAwLCA4LCAweDAwIH0sCisJeyAweDliZTMsIDAsIDgsIDB4MDAgfSwKKwl7IDB4OWJmYywgMCwgOCwgMHgwZiB9LAorCXsgMHg5YmY2LCAwLCA4LCAweDAxIH0sCisJeyAweDliYmUsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDAxNSwgMCwgOCwgMHgzMyB9LAorCXsgMHhkMDE2LCAwLCAxLCAweDAwIH0sCisJeyAweGQwNDQsIDAsIDgsIDB4NDAgfSwKKwl7IDB4ZDA0NSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDA4LCAwLCA4LCAweDBmIH0sCisJeyAweGQwMDksIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDAwNiwgMCwgOCwgMHg2YyB9LAorCXsgMHhkMDA3LCAwLCAyLCAweDAwIH0sCisJeyAweGQwMGMsIDAsIDgsIDB4M2QgfSwKKwl7IDB4ZDAwZCwgMCwgMiwgMHgwMCB9LAorCXsgMHhkMDBhLCAwLCA4LCAweDQ1IH0sCisJeyAweGQwMGIsIDAsIDIsIDB4MDEgfSwKKwl7IDB4OWJjNywgMCwgOCwgMHgwNyB9LAorCXsgMHg5YmM4LCAwLCA4LCAweDUyIH0sCisJeyAweDliYzMsIDAsIDgsIDB4MGYgfSwKKwl7IDB4OWJjNCwgMCwgOCwgMHgwMiB9LAorCXsgMHg5YmM1LCAwLCA4LCAweDNkIH0sCisJeyAweDliYzYsIDAsIDgsIDB4MDAgfSwKKwl7IDB4OWJiYSwgMCwgOCwgMHhhMiB9LAorCXsgMHg5YmM5LCAwLCA4LCAweGEwIH0sCisJeyAweGQwMTEsIDAsIDgsIDB4NTYgfSwKKwl7IDB4ZDAxMiwgMCwgMiwgMHgwMCB9LAorCXsgMHhkMDEzLCAwLCA4LCAweDUwIH0sCisJeyAweGQwMTQsIDAsIDIsIDB4MDAgfSwKKwl7IDB4ZDA0MCwgMCwgOCwgMHg1NiB9LAorCXsgMHhkMDQxLCAwLCAyLCAweDAwIH0sCisJeyAweGQwNDIsIDAsIDgsIDB4NTAgfSwKKwl7IDB4ZDA0MywgMCwgMiwgMHgwMCB9LAorCXsgMHhkMDQ1LCAxLCAxLCAweDAwIH0sCisJeyAweDliY2YsIDAsIDgsIDB4MDEgfSwKKwl7IDB4ZDA0NSwgMiwgMSwgMHgwMSB9LAorCXsgMHhkMDRmLCAwLCA4LCAweDlhIH0sCisJeyAweGQwNTAsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MSwgMCwgOCwgMHg1YSB9LAorCXsgMHhkMDUyLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNTMsIDAsIDgsIDB4NTAgfSwKKwl7IDB4ZDA1NCwgMCwgOCwgMHg0NiB9LAorCXsgMHg5YmQ3LCAwLCA4LCAweDBhIH0sCisJeyAweDliZDgsIDAsIDgsIDB4MTQgfSwKKwl7IDB4OWJkOSwgMCwgOCwgMHgwOCB9LAorfTsKKworLyogTWF4TGluZWFyIE1YTDUwMDUgdHVuZXIgaW5pdAorICAgQUY5MDEzX1RVTkVSX01YTDUwMDVEICAgPSAgMTMKKyAgIEFGOTAxM19UVU5FUl9NWEw1MDA1UiAgID0gIDMwICovCitzdGF0aWMgc3RydWN0IHJlZ2Rlc2MgdHVuZXJfaW5pdF9teGw1MDA1W10gPSB7CisJeyAweDliZDUsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJkNiwgMCwgOCwgMHgwNyB9LAorCXsgMHhkMWEwLCAxLCAxLCAweDAxIH0sCisJeyAweGQwMDAsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMSwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCAxLCAxLCAweDAxIH0sCisJeyAweGQwMDEsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMSwgNSwgMSwgMHgwMCB9LAorCXsgMHhkMDAyLCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDMsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwNCwgMCwgNSwgMHgxOSB9LAorCXsgMHhkMDA1LCAwLCA1LCAweDFhIH0sCisJeyAweGQwMGUsIDAsIDUsIDB4MTAgfSwKKwl7IDB4ZDAwZiwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDBmLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTAsIDAsIDMsIDB4MDQgfSwKKwl7IDB4ZDAxMCwgMywgMywgMHgwNSB9LAorCXsgMHhkMDE2LCA0LCA0LCAweDAzIH0sCisJeyAweGQwMWYsIDAsIDYsIDB4MGEgfSwKKwl7IDB4ZDAyMCwgMCwgNiwgMHgwYSB9LAorCXsgMHg5YmRhLCAwLCA4LCAweDAxIH0sCisJeyAweDliZTMsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJiZSwgMCwgMSwgMHgwMSB9LAorCXsgMHg5YmNjLCAwLCAxLCAweDAxIH0sCisJeyAweDliYjksIDAsIDgsIDB4MDAgfSwKKwl7IDB4OWJjZCwgMCwgOCwgMHgyOCB9LAorCXsgMHg5YmZmLCAwLCA4LCAweDI0IH0sCisJeyAweGQwMTUsIDAsIDgsIDB4NDAgfSwKKwl7IDB4ZDAxNiwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDQ0LCAwLCA4LCAweDQwIH0sCisJeyAweGQwNDUsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwOCwgMCwgOCwgMHgwZiB9LAorCXsgMHhkMDA5LCAwLCAyLCAweDAyIH0sCisJeyAweGQwMDYsIDAsIDgsIDB4NzMgfSwKKwl7IDB4ZDAwNywgMCwgMiwgMHgwMSB9LAorCXsgMHhkMDBjLCAwLCA4LCAweGZhIH0sCisJeyAweGQwMGQsIDAsIDIsIDB4MDEgfSwKKwl7IDB4ZDAwYSwgMCwgOCwgMHhmZiB9LAorCXsgMHhkMDBiLCAwLCAyLCAweDAxIH0sCisJeyAweDliYzcsIDAsIDgsIDB4MjMgfSwKKwl7IDB4OWJjOCwgMCwgOCwgMHg1NSB9LAorCXsgMHg5YmMzLCAwLCA4LCAweDAxIH0sCisJeyAweDliYzQsIDAsIDgsIDB4MDIgfSwKKwl7IDB4OWJjNSwgMCwgOCwgMHhmYSB9LAorCXsgMHg5YmM2LCAwLCA4LCAweDAxIH0sCisJeyAweDliYmEsIDAsIDgsIDB4ZmYgfSwKKwl7IDB4OWJjOSwgMCwgOCwgMHhmZiB9LAorCXsgMHg5YmQzLCAwLCA4LCAweDk1IH0sCisJeyAweGQwMTEsIDAsIDgsIDB4NzAgfSwKKwl7IDB4ZDAxMiwgMCwgMiwgMHgwMSB9LAorCXsgMHhkMDEzLCAwLCA4LCAweGZiIH0sCisJeyAweGQwMTQsIDAsIDIsIDB4MDEgfSwKKwl7IDB4ZDA0MCwgMCwgOCwgMHg3MCB9LAorCXsgMHhkMDQxLCAwLCAyLCAweDAxIH0sCisJeyAweGQwNDIsIDAsIDgsIDB4ZmIgfSwKKwl7IDB4ZDA0MywgMCwgMiwgMHgwMSB9LAorCXsgMHhkMDQ1LCAxLCAxLCAweDAwIH0sCisJeyAweDliY2YsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA0NSwgMiwgMSwgMHgwMSB9LAorCXsgMHhkMDRmLCAwLCA4LCAweDlhIH0sCisJeyAweGQwNTAsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MSwgMCwgOCwgMHg1YSB9LAorCXsgMHhkMDUyLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNTMsIDAsIDgsIDB4NTAgfSwKKwl7IDB4ZDA1NCwgMCwgOCwgMHg0NiB9LAorCXsgMHg5YmQ3LCAwLCA4LCAweDBhIH0sCisJeyAweDliZDgsIDAsIDgsIDB4MTQgfSwKKwl7IDB4OWJkOSwgMCwgOCwgMHgwOCB9LAorCXsgMHg5YmQwLCAwLCA4LCAweDkzIH0sCisJeyAweDliZTQsIDAsIDgsIDB4ZmUgfSwKKwl7IDB4OWJiZCwgMCwgOCwgMHg2MyB9LAorCXsgMHg5YmUyLCAwLCA4LCAweGZlIH0sCisJeyAweDliZWUsIDAsIDEsIDB4MDEgfSwKK307CisKKy8qIFF1YW50ZWsgUVQxMDEwIHR1bmVyIGluaXQKKyAgIEFGOTAxM19UVU5FUl9RVDEwMTAgICAgID0gMTM0CisgICBBRjkwMTNfVFVORVJfUVQxMDEwQSAgICA9IDE2MiAqLworc3RhdGljIHN0cnVjdCByZWdkZXNjIHR1bmVyX2luaXRfcXQxMDEwW10gPSB7CisJeyAweDliZDUsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJkNiwgMCwgOCwgMHgwOSB9LAorCXsgMHhkMWEwLCAxLCAxLCAweDAxIH0sCisJeyAweGQwMDAsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMSwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCAxLCAxLCAweDAxIH0sCisJeyAweGQwMDEsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMSwgNSwgMSwgMHgwMCB9LAorCXsgMHhkMDAyLCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDMsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwNCwgMCwgNSwgMHgxOSB9LAorCXsgMHhkMDA1LCAwLCA1LCAweDFhIH0sCisJeyAweGQwMGUsIDAsIDUsIDB4MTAgfSwKKwl7IDB4ZDAwZiwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDBmLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTAsIDAsIDMsIDB4MDQgfSwKKwl7IDB4ZDAxMCwgMywgMywgMHgwNSB9LAorCXsgMHhkMDE2LCA0LCA0LCAweDAzIH0sCisJeyAweGQwMWYsIDAsIDYsIDB4MGEgfSwKKwl7IDB4ZDAyMCwgMCwgNiwgMHgwYSB9LAorCXsgMHg5YmRhLCAwLCA4LCAweDAxIH0sCisJeyAweDliZTMsIDAsIDgsIDB4MDEgfSwKKwl7IDB4ZDAxNSwgMCwgOCwgMHg0NiB9LAorCXsgMHhkMDE2LCAwLCAxLCAweDAwIH0sCisJeyAweGQwNDQsIDAsIDgsIDB4NDYgfSwKKwl7IDB4ZDA0NSwgMCwgMSwgMHgwMCB9LAorCXsgMHg5YmJlLCAwLCAxLCAweDAxIH0sCisJeyAweDliY2MsIDAsIDEsIDB4MDEgfSwKKwl7IDB4OWJiOSwgMCwgOCwgMHgwMCB9LAorCXsgMHg5YmNkLCAwLCA4LCAweDI4IH0sCisJeyAweDliZmYsIDAsIDgsIDB4MjAgfSwKKwl7IDB4ZDAwOCwgMCwgOCwgMHgwZiB9LAorCXsgMHhkMDA5LCAwLCAyLCAweDAyIH0sCisJeyAweGQwMDYsIDAsIDgsIDB4OTkgfSwKKwl7IDB4ZDAwNywgMCwgMiwgMHgwMSB9LAorCXsgMHhkMDBjLCAwLCA4LCAweDBmIH0sCisJeyAweGQwMGQsIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDAwYSwgMCwgOCwgMHg1MCB9LAorCXsgMHhkMDBiLCAwLCAyLCAweDAxIH0sCisJeyAweDliYzcsIDAsIDgsIDB4MDAgfSwKKwl7IDB4OWJjOCwgMCwgOCwgMHgwMCB9LAorCXsgMHg5YmMzLCAwLCA4LCAweDBmIH0sCisJeyAweDliYzQsIDAsIDgsIDB4MDIgfSwKKwl7IDB4OWJjNSwgMCwgOCwgMHgwZiB9LAorCXsgMHg5YmM2LCAwLCA4LCAweDAyIH0sCisJeyAweDliYmEsIDAsIDgsIDB4YzUgfSwKKwl7IDB4OWJjOSwgMCwgOCwgMHhmZiB9LAorCXsgMHhkMDExLCAwLCA4LCAweDU4IH0sCisJeyAweGQwMTIsIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDAxMywgMCwgOCwgMHg4OSB9LAorCXsgMHhkMDE0LCAwLCAyLCAweDAxIH0sCisJeyAweGQwNDAsIDAsIDgsIDB4NTggfSwKKwl7IDB4ZDA0MSwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDQyLCAwLCA4LCAweDg5IH0sCisJeyAweGQwNDMsIDAsIDIsIDB4MDEgfSwKKwl7IDB4ZDA0NSwgMSwgMSwgMHgwMCB9LAorCXsgMHg5YmNmLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNDUsIDIsIDEsIDB4MDEgfSwKKwl7IDB4ZDA0ZiwgMCwgOCwgMHg5YSB9LAorCXsgMHhkMDUwLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNTEsIDAsIDgsIDB4NWEgfSwKKwl7IDB4ZDA1MiwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDUzLCAwLCA4LCAweDUwIH0sCisJeyAweGQwNTQsIDAsIDgsIDB4NDYgfSwKKwl7IDB4OWJkNywgMCwgOCwgMHgwYSB9LAorCXsgMHg5YmQ4LCAwLCA4LCAweDE0IH0sCisJeyAweDliZDksIDAsIDgsIDB4MDggfSwKKwl7IDB4OWJkMCwgMCwgOCwgMHhjZCB9LAorCXsgMHg5YmU0LCAwLCA4LCAweGJiIH0sCisJeyAweDliYmQsIDAsIDgsIDB4OTMgfSwKKwl7IDB4OWJlMiwgMCwgOCwgMHg4MCB9LAorCXsgMHg5YmVlLCAwLCAxLCAweDAxIH0sCit9OworCisvKiBGcmVlc2NhbGUgTUM0NFM4MDMgdHVuZXIgaW5pdAorICAgQUY5MDEzX1RVTkVSX01DNDRTODAzICAgPSAxMzMgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVnZGVzYyB0dW5lcl9pbml0X21jNDRzODAzW10gPSB7CisJeyAweDliZDUsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJkNiwgMCwgOCwgMHgwNiB9LAorCXsgMHhkMWEwLCAxLCAxLCAweDAxIH0sCisJeyAweGQwMDAsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMSwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCAxLCAxLCAweDAxIH0sCisJeyAweGQwMDEsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMSwgNSwgMSwgMHgwMCB9LAorCXsgMHhkMDAyLCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDMsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwNCwgMCwgNSwgMHgxOSB9LAorCXsgMHhkMDA1LCAwLCA1LCAweDFhIH0sCisJeyAweGQwMGUsIDAsIDUsIDB4MTAgfSwKKwl7IDB4ZDAwZiwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDBmLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTAsIDAsIDMsIDB4MDQgfSwKKwl7IDB4ZDAxMCwgMywgMywgMHgwNSB9LAorCXsgMHhkMDE2LCA0LCA0LCAweDAzIH0sCisJeyAweGQwMWYsIDAsIDYsIDB4MGEgfSwKKwl7IDB4ZDAyMCwgMCwgNiwgMHgwYSB9LAorCXsgMHg5YmRhLCAwLCA4LCAweDAwIH0sCisJeyAweDliZTMsIDAsIDgsIDB4MDAgfSwKKwl7IDB4OWJmNiwgMCwgOCwgMHgwMSB9LAorCXsgMHg5YmY4LCAwLCA4LCAweDAyIH0sCisJeyAweDliZjksIDAsIDgsIDB4MDIgfSwKKwl7IDB4OWJmYywgMCwgOCwgMHgxZiB9LAorCXsgMHg5YmJlLCAwLCAxLCAweDAxIH0sCisJeyAweDliY2MsIDAsIDEsIDB4MDEgfSwKKwl7IDB4OWJiOSwgMCwgOCwgMHgwMCB9LAorCXsgMHg5YmNkLCAwLCA4LCAweDI0IH0sCisJeyAweDliZmYsIDAsIDgsIDB4MjQgfSwKKwl7IDB4ZDAxNSwgMCwgOCwgMHg0NiB9LAorCXsgMHhkMDE2LCAwLCAxLCAweDAwIH0sCisJeyAweGQwNDQsIDAsIDgsIDB4NDYgfSwKKwl7IDB4ZDA0NSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDA4LCAwLCA4LCAweDAxIH0sCisJeyAweGQwMDksIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDAwNiwgMCwgOCwgMHg3YiB9LAorCXsgMHhkMDA3LCAwLCAyLCAweDAwIH0sCisJeyAweGQwMGMsIDAsIDgsIDB4N2MgfSwKKwl7IDB4ZDAwZCwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDBhLCAwLCA4LCAweGZlIH0sCisJeyAweGQwMGIsIDAsIDIsIDB4MDEgfSwKKwl7IDB4OWJjNywgMCwgOCwgMHgwOCB9LAorCXsgMHg5YmM4LCAwLCA4LCAweDlhIH0sCisJeyAweDliYzMsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJjNCwgMCwgOCwgMHgwMiB9LAorCXsgMHg5YmM1LCAwLCA4LCAweDdjIH0sCisJeyAweDliYzYsIDAsIDgsIDB4MDIgfSwKKwl7IDB4OWJiYSwgMCwgOCwgMHhmYyB9LAorCXsgMHg5YmM5LCAwLCA4LCAweGFhIH0sCisJeyAweGQwMTEsIDAsIDgsIDB4NmIgfSwKKwl7IDB4ZDAxMiwgMCwgMiwgMHgwMCB9LAorCXsgMHhkMDEzLCAwLCA4LCAweDg4IH0sCisJeyAweGQwMTQsIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDA0MCwgMCwgOCwgMHg2YiB9LAorCXsgMHhkMDQxLCAwLCAyLCAweDAwIH0sCisJeyAweGQwNDIsIDAsIDgsIDB4N2MgfSwKKwl7IDB4ZDA0MywgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDQ1LCAxLCAxLCAweDAwIH0sCisJeyAweDliY2YsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA0NSwgMiwgMSwgMHgwMSB9LAorCXsgMHhkMDRmLCAwLCA4LCAweDlhIH0sCisJeyAweGQwNTAsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MSwgMCwgOCwgMHg1YSB9LAorCXsgMHhkMDUyLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNTMsIDAsIDgsIDB4NTAgfSwKKwl7IDB4ZDA1NCwgMCwgOCwgMHg0NiB9LAorCXsgMHg5YmQ3LCAwLCA4LCAweDBhIH0sCisJeyAweDliZDgsIDAsIDgsIDB4MTQgfSwKKwl7IDB4OWJkOSwgMCwgOCwgMHgwOCB9LAorCXsgMHg5YmQwLCAwLCA4LCAweDllIH0sCisJeyAweDliZTQsIDAsIDgsIDB4ZmYgfSwKKwl7IDB4OWJiZCwgMCwgOCwgMHg5ZSB9LAorCXsgMHg5YmUyLCAwLCA4LCAweDI1IH0sCisJeyAweDliZWUsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDczYiwgMywgMSwgMHgwMCB9LAorfTsKKworLyogdW5rbm93biwgcHJvYmFibHkgZm9yIHRpbiBjYW4gdHVuZXIsIHR1bmVyIGluaXQKKyAgIEFGOTAxM19UVU5FUl9VTktOT1dOICAgPSAxNDAgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVnZGVzYyB0dW5lcl9pbml0X3Vua25vd25bXSA9IHsKKwl7IDB4OWJkNSwgMCwgOCwgMHgwMSB9LAorCXsgMHg5YmQ2LCAwLCA4LCAweDAyIH0sCisJeyAweGQxYTAsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDAwLCAxLCAxLCAweDAwIH0sCisJeyAweGQwMDEsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCA1LCAxLCAweDAwIH0sCisJeyAweGQwMDIsIDAsIDUsIDB4MTkgfSwKKwl7IDB4ZDAwMywgMCwgNSwgMHgxYSB9LAorCXsgMHhkMDA0LCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDUsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwZSwgMCwgNSwgMHgxMCB9LAorCXsgMHhkMDBmLCAwLCAzLCAweDA0IH0sCisJeyAweGQwMGYsIDMsIDMsIDB4MDUgfSwKKwl7IDB4ZDAxMCwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDEwLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTYsIDQsIDQsIDB4MDMgfSwKKwl7IDB4ZDAxZiwgMCwgNiwgMHgwYSB9LAorCXsgMHhkMDIwLCAwLCA2LCAweDBhIH0sCisJeyAweDliZGEsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJlMywgMCwgOCwgMHgwMSB9LAorCXsgMHhkMWEwLCAxLCAxLCAweDAwIH0sCisJeyAweDliYmUsIDAsIDEsIDB4MDEgfSwKKwl7IDB4OWJjYywgMCwgMSwgMHgwMSB9LAorCXsgMHg5YmI5LCAwLCA4LCAweDAwIH0sCisJeyAweDliY2QsIDAsIDgsIDB4MTggfSwKKwl7IDB4OWJmZiwgMCwgOCwgMHgyYyB9LAorCXsgMHhkMDE1LCAwLCA4LCAweDQ2IH0sCisJeyAweGQwMTYsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDA0NCwgMCwgOCwgMHg0NiB9LAorCXsgMHhkMDQ1LCAwLCAxLCAweDAwIH0sCisJeyAweGQwMDgsIDAsIDgsIDB4ZGYgfSwKKwl7IDB4ZDAwOSwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDA2LCAwLCA4LCAweDQ0IH0sCisJeyAweGQwMDcsIDAsIDIsIDB4MDEgfSwKKwl7IDB4ZDAwYywgMCwgOCwgMHgwMCB9LAorCXsgMHhkMDBkLCAwLCAyLCAweDAyIH0sCisJeyAweGQwMGEsIDAsIDgsIDB4ZjYgfSwKKwl7IDB4ZDAwYiwgMCwgMiwgMHgwMSB9LAorCXsgMHg5YmJhLCAwLCA4LCAweGY5IH0sCisJeyAweDliYzgsIDAsIDgsIDB4YWEgfSwKKwl7IDB4OWJjMywgMCwgOCwgMHhkZiB9LAorCXsgMHg5YmM0LCAwLCA4LCAweDAyIH0sCisJeyAweDliYzUsIDAsIDgsIDB4MDAgfSwKKwl7IDB4OWJjNiwgMCwgOCwgMHgwMiB9LAorCXsgMHg5YmM5LCAwLCA4LCAweGYwIH0sCisJeyAweGQwMTEsIDAsIDgsIDB4M2MgfSwKKwl7IDB4ZDAxMiwgMCwgMiwgMHgwMSB9LAorCXsgMHhkMDEzLCAwLCA4LCAweGY3IH0sCisJeyAweGQwMTQsIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDA0MCwgMCwgOCwgMHgwYiB9LAorCXsgMHhkMDQxLCAwLCAyLCAweDAyIH0sCisJeyAweGQwNDIsIDAsIDgsIDB4NGQgfSwKKwl7IDB4ZDA0MywgMCwgMiwgMHgwMCB9LAorCXsgMHhkMDQ1LCAxLCAxLCAweDAwIH0sCisJeyAweDliY2YsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA0NSwgMiwgMSwgMHgwMSB9LAorCXsgMHhkMDRmLCAwLCA4LCAweDlhIH0sCisJeyAweGQwNTAsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MSwgMCwgOCwgMHg1YSB9LAorCXsgMHhkMDUyLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNTMsIDAsIDgsIDB4NTAgfSwKKwl7IDB4ZDA1NCwgMCwgOCwgMHg0NiB9LAorCXsgMHg5YmQ3LCAwLCA4LCAweDBhIH0sCisJeyAweDliZDgsIDAsIDgsIDB4MTQgfSwKKwl7IDB4OWJkOSwgMCwgOCwgMHgwOCB9LAorfTsKKworLyogTlhQIFREQTE4MjcxIHR1bmVyIGluaXQKKyAgIEFGOTAxM19UVU5FUl9UREExODI3MSAgID0gMTU2ICovCitzdGF0aWMgc3RydWN0IHJlZ2Rlc2MgdHVuZXJfaW5pdF90ZGExODI3MVtdID0geworCXsgMHg5YmQ1LCAwLCA4LCAweDAxIH0sCisJeyAweDliZDYsIDAsIDgsIDB4MDQgfSwKKwl7IDB4ZDFhMCwgMSwgMSwgMHgwMSB9LAorCXsgMHhkMDAwLCAwLCAxLCAweDAxIH0sCisJeyAweGQwMDAsIDEsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMSwgMSwgMSwgMHgwMSB9LAorCXsgMHhkMDAxLCAwLCAxLCAweDAwIH0sCisJeyAweGQwMDEsIDUsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMiwgMCwgNSwgMHgxOSB9LAorCXsgMHhkMDAzLCAwLCA1LCAweDFhIH0sCisJeyAweGQwMDQsIDAsIDUsIDB4MTkgfSwKKwl7IDB4ZDAwNSwgMCwgNSwgMHgxYSB9LAorCXsgMHhkMDBlLCAwLCA1LCAweDEwIH0sCisJeyAweGQwMGYsIDAsIDMsIDB4MDQgfSwKKwl7IDB4ZDAwZiwgMywgMywgMHgwNSB9LAorCXsgMHhkMDEwLCAwLCAzLCAweDA0IH0sCisJeyAweGQwMTAsIDMsIDMsIDB4MDUgfSwKKwl7IDB4ZDAxNiwgNCwgNCwgMHgwMyB9LAorCXsgMHhkMDFmLCAwLCA2LCAweDBhIH0sCisJeyAweGQwMjAsIDAsIDYsIDB4MGEgfSwKKwl7IDB4OWJkYSwgMCwgOCwgMHgwMSB9LAorCXsgMHg5YmUzLCAwLCA4LCAweDAxIH0sCisJeyAweGQxYTAsIDEsIDEsIDB4MDAgfSwKKwl7IDB4OWJiZSwgMCwgMSwgMHgwMSB9LAorCXsgMHg5YmNjLCAwLCAxLCAweDAxIH0sCisJeyAweDliYjksIDAsIDgsIDB4MDAgfSwKKwl7IDB4OWJjZCwgMCwgOCwgMHgxOCB9LAorCXsgMHg5YmZmLCAwLCA4LCAweDJjIH0sCisJeyAweGQwMTUsIDAsIDgsIDB4NDYgfSwKKwl7IDB4ZDAxNiwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDQ0LCAwLCA4LCAweDQ2IH0sCisJeyAweGQwNDUsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwOCwgMCwgOCwgMHhkZiB9LAorCXsgMHhkMDA5LCAwLCAyLCAweDAyIH0sCisJeyAweGQwMDYsIDAsIDgsIDB4NDQgfSwKKwl7IDB4ZDAwNywgMCwgMiwgMHgwMSB9LAorCXsgMHhkMDBjLCAwLCA4LCAweDAwIH0sCisJeyAweGQwMGQsIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDAwYSwgMCwgOCwgMHhmNiB9LAorCXsgMHhkMDBiLCAwLCAyLCAweDAxIH0sCisJeyAweDliYmEsIDAsIDgsIDB4ZjkgfSwKKwl7IDB4OWJjOCwgMCwgOCwgMHhhYSB9LAorCXsgMHg5YmMzLCAwLCA4LCAweGRmIH0sCisJeyAweDliYzQsIDAsIDgsIDB4MDIgfSwKKwl7IDB4OWJjNSwgMCwgOCwgMHgwMCB9LAorCXsgMHg5YmM2LCAwLCA4LCAweDAyIH0sCisJeyAweDliYzksIDAsIDgsIDB4ZjAgfSwKKwl7IDB4ZDAxMSwgMCwgOCwgMHgzYyB9LAorCXsgMHhkMDEyLCAwLCAyLCAweDAxIH0sCisJeyAweGQwMTMsIDAsIDgsIDB4ZjcgfSwKKwl7IDB4ZDAxNCwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDQwLCAwLCA4LCAweDBiIH0sCisJeyAweGQwNDEsIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDA0MiwgMCwgOCwgMHg0ZCB9LAorCXsgMHhkMDQzLCAwLCAyLCAweDAwIH0sCisJeyAweGQwNDUsIDEsIDEsIDB4MDAgfSwKKwl7IDB4OWJjZiwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDQ1LCAyLCAxLCAweDAxIH0sCisJeyAweGQwNGYsIDAsIDgsIDB4OWEgfSwKKwl7IDB4ZDA1MCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDUxLCAwLCA4LCAweDVhIH0sCisJeyAweGQwNTIsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MywgMCwgOCwgMHg1MCB9LAorCXsgMHhkMDU0LCAwLCA4LCAweDQ2IH0sCisJeyAweDliZDcsIDAsIDgsIDB4MGEgfSwKKwl7IDB4OWJkOCwgMCwgOCwgMHgxNCB9LAorCXsgMHg5YmQ5LCAwLCA4LCAweDA4IH0sCisJeyAweDliZDAsIDAsIDgsIDB4YTggfSwKKwl7IDB4OWJlNCwgMCwgOCwgMHg3ZiB9LAorCXsgMHg5YmJkLCAwLCA4LCAweGE4IH0sCisJeyAweDliZTIsIDAsIDgsIDB4MjAgfSwKKwl7IDB4OWJlZSwgMCwgMSwgMHgwMSB9LAorfTsKKworI2VuZGlmIC8qIF9BRjkwMTNfUFJJVl8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuYwppbmRleCAwYjgyY2MyLi5lYWJmOWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5jCkBAIC00MCw2ICs0MCw4IEBACiAJdTMyIGN1cnJlbnRfZnJlcXVlbmN5OwogCWZlX21vZHVsYXRpb25fdCBjdXJyZW50X21vZHVsYXRpb247CiAKKwl1MzIgZmVfc3RhdHVzOworCXVuc2lnbmVkIGludCBsZWRfc3RhdGU7CiB9OwogCiBzdGF0aWMgaW50IGRlYnVnOwpAQCAtNTM4LDExICs1NDAsOTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhdTg1MjJfbGVkX2dwaW9fZW5hYmxlKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlLCBpbnQgb25vZmYpCit7CisJc3RydWN0IGF1ODUyMl9sZWRfY29uZmlnICpsZWRfY29uZmlnID0gc3RhdGUtPmNvbmZpZy0+bGVkX2NmZzsKKwl1OCB2YWw7CisKKwkvKiBiYWlsIG91dCBpZiB3ZSBjYW50IGNvbnRyb2wgYW4gTEVEICovCisJaWYgKCFsZWRfY29uZmlnIHx8ICFsZWRfY29uZmlnLT5ncGlvX291dHB1dCB8fAorCSAgICAhbGVkX2NvbmZpZy0+Z3Bpb19vdXRwdXRfZW5hYmxlIHx8ICFsZWRfY29uZmlnLT5ncGlvX291dHB1dF9kaXNhYmxlKQorCQlyZXR1cm4gMDsKKworCXZhbCA9IGF1ODUyMl9yZWFkcmVnKHN0YXRlLCAweDQwMDAgfAorCQkJICAgICAobGVkX2NvbmZpZy0+Z3Bpb19vdXRwdXQgJiB+MHhjMDAwKSk7CisJaWYgKG9ub2ZmKSB7CisJCS8qIGVuYWJsZSBHUElPIG91dHB1dCAqLworCQl2YWwgJj0gfigobGVkX2NvbmZpZy0+Z3Bpb19vdXRwdXRfZW5hYmxlID4+IDgpICYgMHhmZik7CisJCXZhbCB8PSAgKGxlZF9jb25maWctPmdwaW9fb3V0cHV0X2VuYWJsZSAmIDB4ZmYpOworCX0gZWxzZSB7CisJCS8qIGRpc2FibGUgR1BJTyBvdXRwdXQgKi8KKwkJdmFsICY9IH4oKGxlZF9jb25maWctPmdwaW9fb3V0cHV0X2Rpc2FibGUgPj4gOCkgJiAweGZmKTsKKwkJdmFsIHw9ICAobGVkX2NvbmZpZy0+Z3Bpb19vdXRwdXRfZGlzYWJsZSAmIDB4ZmYpOworCX0KKwlyZXR1cm4gYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCAweDgwMDAgfAorCQkJICAgICAgIChsZWRfY29uZmlnLT5ncGlvX291dHB1dCAmIH4weGMwMDApLCB2YWwpOworfQorCisvKiBsZWQgPSAwIHwgb2ZmCisgKiBsZWQgPSAxIHwgc2lnbmFsIG9rCisgKiBsZWQgPSAyIHwgc2lnbmFsIHN0cm9uZworICogbGVkIDwgMCB8IG9ubHkgbGlnaHQgbGVkIGlmIGxlZHMgYXJlIGN1cnJlbnRseSBvZmYKKyAqLworc3RhdGljIGludCBhdTg1MjJfbGVkX2N0cmwoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIGludCBsZWQpCit7CisJc3RydWN0IGF1ODUyMl9sZWRfY29uZmlnICpsZWRfY29uZmlnID0gc3RhdGUtPmNvbmZpZy0+bGVkX2NmZzsKKwlpbnQgaSwgcmV0ID0gMDsKKworCS8qIGJhaWwgb3V0IGlmIHdlIGNhbnQgY29udHJvbCBhbiBMRUQgKi8KKwlpZiAoIWxlZF9jb25maWcgfHwgIWxlZF9jb25maWctPmdwaW9fbGVkcyB8fAorCSAgICAhbGVkX2NvbmZpZy0+bnVtX2xlZF9zdGF0ZXMgfHwgIWxlZF9jb25maWctPmxlZF9zdGF0ZXMpCisJCXJldHVybiAwOworCisJaWYgKGxlZCA8IDApIHsKKwkJLyogaWYgTEVEIGlzIGFscmVhZHkgbGl0LCB0aGVuIGxlYXZlIGl0IGFzLWlzICovCisJCWlmIChzdGF0ZS0+bGVkX3N0YXRlKQorCQkJcmV0dXJuIDA7CisJCWVsc2UKKwkJCWxlZCAqPSAtMTsKKwl9CisKKwkvKiB0b2dnbGUgTEVEIGlmIGNoYW5naW5nIHN0YXRlICovCisJaWYgKHN0YXRlLT5sZWRfc3RhdGUgIT0gbGVkKSB7CisJCXU4IHZhbDsKKworCQlkcHJpbnRrKCIlczogJWRcbiIsIF9fZnVuY19fLCBsZWQpOworCisJCWF1ODUyMl9sZWRfZ3Bpb19lbmFibGUoc3RhdGUsIDEpOworCisJCXZhbCA9IGF1ODUyMl9yZWFkcmVnKHN0YXRlLCAweDQwMDAgfAorCQkJCSAgICAgKGxlZF9jb25maWctPmdwaW9fbGVkcyAmIH4weGMwMDApKTsKKworCQkvKiBzdGFydCB3aXRoIGFsbCBsZWRzIG9mZiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGVkX2NvbmZpZy0+bnVtX2xlZF9zdGF0ZXM7IGkrKykKKwkJCXZhbCAmPSB+bGVkX2NvbmZpZy0+bGVkX3N0YXRlc1tpXTsKKworCQkvKiBzZXQgc2VsZWN0ZWQgTEVEIHN0YXRlICovCisJCWlmIChsZWQgPCBsZWRfY29uZmlnLT5udW1fbGVkX3N0YXRlcykKKwkJCXZhbCB8PSBsZWRfY29uZmlnLT5sZWRfc3RhdGVzW2xlZF07CisJCWVsc2UgaWYgKGxlZF9jb25maWctPm51bV9sZWRfc3RhdGVzKQorCQkJdmFsIHw9CisJCQlsZWRfY29uZmlnLT5sZWRfc3RhdGVzW2xlZF9jb25maWctPm51bV9sZWRfc3RhdGVzIC0gMV07CisKKwkJcmV0ID0gYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCAweDgwMDAgfAorCQkJCSAgICAgIChsZWRfY29uZmlnLT5ncGlvX2xlZHMgJiB+MHhjMDAwKSwgdmFsKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXN0YXRlLT5sZWRfc3RhdGUgPSBsZWQ7CisKKwkJaWYgKGxlZCA9PSAwKQorCQkJYXU4NTIyX2xlZF9ncGlvX2VuYWJsZShzdGF0ZSwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYXU4NTIyX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCisJLyogdHVybiBvZmYgbGVkICovCisJYXU4NTIyX2xlZF9jdHJsKHN0YXRlLCAwKTsKKwogCXN0YXRlLT5jdXJyZW50X2ZyZXF1ZW5jeSA9IDA7CiAKIAlyZXR1cm4gMDsKQEAgLTU5MiwxMiArNjgxLDUzIEBACiAJCQkqc3RhdHVzIHw9IEZFX0hBU19DQVJSSUVSIHwgRkVfSEFTX1NJR05BTDsKIAkJYnJlYWs7CiAJfQorCXN0YXRlLT5mZV9zdGF0dXMgPSAqc3RhdHVzOworCisJaWYgKCpzdGF0dXMgJiBGRV9IQVNfTE9DSykKKwkJLyogdHVybiBvbiBMRUQsIGlmIGl0IGlzbid0IG9uIGFscmVhZHkgKi8KKwkJYXU4NTIyX2xlZF9jdHJsKHN0YXRlLCAtMSk7CisJZWxzZQorCQkvKiB0dXJuIG9mZiBMRUQgKi8KKwkJYXU4NTIyX2xlZF9jdHJsKHN0YXRlLCAwKTsKIAogCWRwcmludGsoIiVzKCkgc3RhdHVzIDB4JTA4eFxuIiwgX19mdW5jX18sICpzdGF0dXMpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYXU4NTIyX2xlZF9zdGF0dXMoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIGNvbnN0IHUxNiAqc25yKQoreworCXN0cnVjdCBhdTg1MjJfbGVkX2NvbmZpZyAqbGVkX2NvbmZpZyA9IHN0YXRlLT5jb25maWctPmxlZF9jZmc7CisJaW50IGxlZDsKKwl1MTYgc3Ryb25nOworCisJLyogYmFpbCBvdXQgaWYgd2UgY2FudCBjb250cm9sIGFuIExFRCAqLworCWlmICghbGVkX2NvbmZpZykKKwkJcmV0dXJuIDA7CisKKwlpZiAoMCA9PSAoc3RhdGUtPmZlX3N0YXR1cyAmIEZFX0hBU19MT0NLKSkKKwkJcmV0dXJuIGF1ODUyMl9sZWRfY3RybChzdGF0ZSwgMCk7CisJZWxzZSBpZiAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9PSBRQU1fMjU2KQorCQlzdHJvbmcgPSBsZWRfY29uZmlnLT5xYW0yNTZfc3Ryb25nOworCWVsc2UgaWYgKHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24gPT0gUUFNXzY0KQorCQlzdHJvbmcgPSBsZWRfY29uZmlnLT5xYW02NF9zdHJvbmc7CisJZWxzZSAvKiAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9PSBWU0JfOCkgKi8KKwkJc3Ryb25nID0gbGVkX2NvbmZpZy0+dnNiOF9zdHJvbmc7CisKKwlpZiAoKnNuciA+PSBzdHJvbmcpCisJCWxlZCA9IDI7CisJZWxzZQorCQlsZWQgPSAxOworCisJaWYgKChzdGF0ZS0+bGVkX3N0YXRlKSAmJgorCSAgICAoKChzdHJvbmcgPCAqc25yKSA/ICgqc25yIC0gc3Ryb25nKSA6IChzdHJvbmcgLSAqc25yKSkgPD0gMTApKQorCQkvKiBzbnIgZGlkbid0IGNoYW5nZSBlbm91Z2ggdG8gYm90aGVyCisJCSAqIGNoYW5naW5nIHRoZSBjb2xvciBvZiB0aGUgbGVkICovCisJCXJldHVybiAwOworCisJcmV0dXJuIGF1ODUyMl9sZWRfY3RybChzdGF0ZSwgbGVkKTsKK30KKwogc3RhdGljIGludCBhdTg1MjJfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQogewogCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CkBAIC02MjEsNiArNzUxLDkgQEAKIAkJCQkJICAgIGF1ODUyMl9yZWFkcmVnKHN0YXRlLCAweDQzMTEpLAogCQkJCQkgICAgc25yKTsKIAorCWlmIChzdGF0ZS0+Y29uZmlnLT5sZWRfY2ZnKQorCQlhdTg1MjJfbGVkX3N0YXR1cyhzdGF0ZSwgc25yKTsKKwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuaAppbmRleCA1OTU5MTVhLi43Yjk0ZjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5oCkBAIC0zMCw2ICszMCwyMSBAQAogCUFVODUyMl9JRl8zXzI1TUhaLAogfTsKIAorc3RydWN0IGF1ODUyMl9sZWRfY29uZmlnIHsKKwl1MTYgdnNiOF9zdHJvbmc7CisJdTE2IHFhbTY0X3N0cm9uZzsKKwl1MTYgcWFtMjU2X3N0cm9uZzsKKworCXUxNiBncGlvX291dHB1dDsKKwkvKiB1bnNldCBoaSBiaXRzLCBzZXQgbG93IGJpdHMgKi8KKwl1MTYgZ3Bpb19vdXRwdXRfZW5hYmxlOworCXUxNiBncGlvX291dHB1dF9kaXNhYmxlOworCisJdTE2IGdwaW9fbGVkczsKKwl1OCAqbGVkX3N0YXRlczsKKwl1bnNpZ25lZCBpbnQgbnVtX2xlZF9zdGF0ZXM7Cit9OworCiBzdHJ1Y3QgYXU4NTIyX2NvbmZpZyB7CiAJLyogdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KIAl1OCBkZW1vZF9hZGRyZXNzOwpAQCAtMzksNiArNTQsOCBAQAogI2RlZmluZSBBVTg1MjJfREVNT0RMT0NLSU5HIDEKIAl1OCBzdGF0dXNfbW9kZTsKIAorCXN0cnVjdCBhdTg1MjJfbGVkX2NvbmZpZyAqbGVkX2NmZzsKKwogCWVudW0gYXU4NTIyX2lmX2ZyZXEgdnNiX2lmOwogCWVudW0gYXU4NTIyX2lmX2ZyZXEgcWFtX2lmOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jCmluZGV4IDk0MzBlMDMuLjVkMWFiZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYwpAQCAtMzQsMTMgKzM0LDEyIEBACiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAjaW5jbHVkZSAiY3gyMjcwMi5oIgogCi0KIHN0cnVjdCBjeDIyNzAyX3N0YXRlIHsKIAotCXN0cnVjdCBpMmNfYWRhcHRlciogaTJjOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOwogCiAJLyogY29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLwotCWNvbnN0IHN0cnVjdCBjeDIyNzAyX2NvbmZpZyogY29uZmlnOworCWNvbnN0IHN0cnVjdCBjeDIyNzAyX2NvbmZpZyAqY29uZmlnOwogCiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKIApAQCAtNDksMTAgKzQ4LDEzIEBACiB9OwogCiBzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSB2ZXJib3NlIGRlYnVnIG1lc3NhZ2VzIik7CisKICNkZWZpbmUgZHByaW50awlpZiAoZGVidWcpIHByaW50awogCiAvKiBSZWdpc3RlciB2YWx1ZXMgdG8gaW5pdGlhbGlzZSB0aGUgZGVtb2QgKi8KLXN0YXRpYyB1OCBpbml0X3RhYiBbXSA9IHsKK3N0YXRpYyB1OCBpbml0X3RhYltdID0gewogCTB4MDAsIDB4MDAsIC8qIFN0b3AgYXF1aXNpdGlvbiAqLwogCTB4MEIsIDB4MDYsCiAJMHgwOSwgMHgwMSwKQEAgLTgwLDY1ICs4Miw2NyBAQAogCTB4ZmQsIDB4MDAsCiB9OwogCi1zdGF0aWMgaW50IGN4MjI3MDJfd3JpdGVyZWcgKHN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSwgdTggcmVnLCB1OCBkYXRhKQorc3RhdGljIGludCBjeDIyNzAyX3dyaXRlcmVnKHN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSwgdTggcmVnLCB1OCBkYXRhKQogewogCWludCByZXQ7Ci0JdTggYnVmIFtdID0geyByZWcsIGRhdGEgfTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDIgfTsKKwl1OCBidWZbXSA9IHsgcmVnLCBkYXRhIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsCisJCQkuYnVmID0gYnVmLCAubGVuID0gMiB9OwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOwogCiAJaWYgKHJldCAhPSAxKQotCQlwcmludGsoIiVzOiB3cml0ZXJlZyBlcnJvciAocmVnID09IDB4JTAyeCwgdmFsID09IDB4JTAyeCwgcmV0ID09ICVpKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiJXM6IGVycm9yIChyZWcgPT0gMHglMDJ4LCB2YWwgPT0gMHglMDJ4LCByZXQgPT0gJWkpXG4iLAogCQkJX19mdW5jX18sIHJlZywgZGF0YSwgcmV0KTsKIAogCXJldHVybiAocmV0ICE9IDEpID8gLTEgOiAwOwogfQogCi1zdGF0aWMgdTggY3gyMjcwMl9yZWFkcmVnIChzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUsIHU4IHJlZykKK3N0YXRpYyB1OCBjeDIyNzAyX3JlYWRyZWcoc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlLCB1OCByZWcpCiB7CiAJaW50IHJldDsKLQl1OCBiMCBbXSA9IHsgcmVnIH07Ci0JdTggYjEgW10gPSB7IDAgfTsKKwl1OCBiMFtdID0geyByZWcgfTsKKwl1OCBiMVtdID0geyAwIH07CiAKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgW10gPSB7Ci0JCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLCAuYnVmID0gYjAsIC5sZW4gPSAxIH0sCi0JCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGIxLCAubGVuID0gMSB9IH07CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLAorCQkJLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAorCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsCisJCQkuYnVmID0gYjEsIC5sZW4gPSAxIH0gfTsKIAogCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDIpOwogCiAJaWYgKHJldCAhPSAyKQotCQlwcmludGsoIiVzOiByZWFkcmVnIGVycm9yIChyZXQgPT0gJWkpXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVhZHJlZyBlcnJvciAocmV0ID09ICVpKVxuIiwKKwkJCV9fZnVuY19fLCByZXQpOwogCiAJcmV0dXJuIGIxWzBdOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfc2V0X2ludmVyc2lvbiAoc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlLCBpbnQgaW52ZXJzaW9uKQorc3RhdGljIGludCBjeDIyNzAyX3NldF9pbnZlcnNpb24oc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlLCBpbnQgaW52ZXJzaW9uKQogewogCXU4IHZhbDsKIAogCXN3aXRjaCAoaW52ZXJzaW9uKSB7Ci0KLQkJY2FzZSBJTlZFUlNJT05fQVVUTzoKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCQljYXNlIElOVkVSU0lPTl9PTjoKLQkJCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MEMpOwotCQkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDBDLCB2YWwgfCAweDAxKTsKLQotCQljYXNlIElOVkVSU0lPTl9PRkY6Ci0JCQl2YWwgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDBDKTsKLQkJCXJldHVybiBjeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwQywgdmFsICYgMHhmZSk7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCisJY2FzZSBJTlZFUlNJT05fQVVUTzoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWNhc2UgSU5WRVJTSU9OX09OOgorCQl2YWwgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpOworCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywgdmFsIHwgMHgwMSk7CisJY2FzZSBJTlZFUlNJT05fT0ZGOgorCQl2YWwgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpOworCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywgdmFsICYgMHhmZSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiB9CiAKIC8qIFJldHJpZXZlIHRoZSBkZW1vZCBzZXR0aW5ncyAqLwotc3RhdGljIGludCBjeDIyNzAyX2dldF90cHMgKHN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSwgc3RydWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgKnApCitzdGF0aWMgaW50IGN4MjI3MDJfZ2V0X3RwcyhzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUsCisJc3RydWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgKnApCiB7CiAJdTggdmFsOwogCkBAIC0xNDYsMTgwICsxNTAsMjgxIEBACiAJaWYgKCEoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBBKSAmIDB4MjApKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MDEpOwotCXN3aXRjaCggKHZhbCYweDE4KT4+MykgewotCQljYXNlIDA6IHAtPmNvbnN0ZWxsYXRpb24gPSAgIFFQU0s7IGJyZWFrOwotCQljYXNlIDE6IHAtPmNvbnN0ZWxsYXRpb24gPSBRQU1fMTY7IGJyZWFrOwotCQljYXNlIDI6IHAtPmNvbnN0ZWxsYXRpb24gPSBRQU1fNjQ7IGJyZWFrOworCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwMSk7CisJc3dpdGNoICgodmFsICYgMHgxOCkgPj4gMykgeworCWNhc2UgMDoKKwkJcC0+Y29uc3RlbGxhdGlvbiA9IFFQU0s7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV8xNjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5jb25zdGVsbGF0aW9uID0gUUFNXzY0OworCQlicmVhazsKIAl9Ci0Jc3dpdGNoKCB2YWwmMHgwNyApIHsKLQkJY2FzZSAwOiBwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfTk9ORTsgYnJlYWs7Ci0JCWNhc2UgMTogcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gICAgSElFUkFSQ0hZXzE7IGJyZWFrOwotCQljYXNlIDI6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV8yOyBicmVhazsKLQkJY2FzZSAzOiBwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSAgICBISUVSQVJDSFlfNDsgYnJlYWs7CisJc3dpdGNoICh2YWwgJiAweDA3KSB7CisJY2FzZSAwOgorCQlwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfTk9ORTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfMjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfNDsKKwkJYnJlYWs7CiAJfQogCiAKLQl2YWwgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDAyKTsKLQlzd2l0Y2goICh2YWwmMHgzOCk+PjMgKSB7Ci0JCWNhc2UgMDogcC0+Y29kZV9yYXRlX0hQID0gRkVDXzFfMjsgYnJlYWs7Ci0JCWNhc2UgMTogcC0+Y29kZV9yYXRlX0hQID0gRkVDXzJfMzsgYnJlYWs7Ci0JCWNhc2UgMjogcC0+Y29kZV9yYXRlX0hQID0gRkVDXzNfNDsgYnJlYWs7Ci0JCWNhc2UgMzogcC0+Y29kZV9yYXRlX0hQID0gRkVDXzVfNjsgYnJlYWs7Ci0JCWNhc2UgNDogcC0+Y29kZV9yYXRlX0hQID0gRkVDXzdfODsgYnJlYWs7CisJdmFsID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDAyKTsKKwlzd2l0Y2ggKCh2YWwgJiAweDM4KSA+PiAzKSB7CisJY2FzZSAwOgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMV8yOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18yXzM7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzNfNDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfNV82OworCQlicmVhazsKKwljYXNlIDQ6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ183Xzg7CisJCWJyZWFrOwogCX0KLQlzd2l0Y2goIHZhbCYweDA3ICkgewotCQljYXNlIDA6IHAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18xXzI7IGJyZWFrOwotCQljYXNlIDE6IHAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18yXzM7IGJyZWFrOwotCQljYXNlIDI6IHAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18zXzQ7IGJyZWFrOwotCQljYXNlIDM6IHAtPmNvZGVfcmF0ZV9MUCA9IEZFQ181XzY7IGJyZWFrOwotCQljYXNlIDQ6IHAtPmNvZGVfcmF0ZV9MUCA9IEZFQ183Xzg7IGJyZWFrOworCXN3aXRjaCAodmFsICYgMHgwNykgeworCWNhc2UgMDoKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzFfMjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfMl8zOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18zXzQ7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzVfNjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfN184OworCQlicmVhazsKIAl9CiAKLQotCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MDMpOwotCXN3aXRjaCggKHZhbCYweDBjKT4+MiApIHsKLQkJY2FzZSAwOiBwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMzI7IGJyZWFrOwotCQljYXNlIDE6IHAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8xNjsgYnJlYWs7Ci0JCWNhc2UgMjogcC0+Z3VhcmRfaW50ZXJ2YWwgPSAgR1VBUkRfSU5URVJWQUxfMV84OyBicmVhazsKLQkJY2FzZSAzOiBwLT5ndWFyZF9pbnRlcnZhbCA9ICBHVUFSRF9JTlRFUlZBTF8xXzQ7IGJyZWFrOworCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwMyk7CisJc3dpdGNoICgodmFsICYgMHgwYykgPj4gMikgeworCWNhc2UgMDoKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzMyOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8xNjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfODsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfNDsKKwkJYnJlYWs7CiAJfQotCXN3aXRjaCggdmFsJjB4MDMgKSB7Ci0JCWNhc2UgMDogcC0+dHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV8ySzsgYnJlYWs7Ci0JCWNhc2UgMTogcC0+dHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV84SzsgYnJlYWs7CisJc3dpdGNoICh2YWwgJiAweDAzKSB7CisJY2FzZSAwOgorCQlwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzJLOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfOEs7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQgY3gyMjcwMl9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCWRwcmludGsgKCIlcyglZClcbiIsIF9fZnVuY19fLCBlbmFibGUpOworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIGVuYWJsZSk7CiAJaWYgKGVuYWJsZSkKLQkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDBELCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEQpICYgMHhmZSk7CisJCXJldHVybiBjeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBELAorCQkJY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBEKSAmIDB4ZmUpOwogCWVsc2UKLQkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDBELCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEQpIHwgMSk7CisJCXJldHVybiBjeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBELAorCQkJY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBEKSB8IDEpOwogfQogCiAvKiBUYWxrIHRvIHRoZSBkZW1vZCwgc2V0IHRoZSBGRUMsIEdVQVJELCBRQU0gc2V0dGluZ3MgZXRjICovCi1zdGF0aWMgaW50IGN4MjI3MDJfc2V0X3RwcyAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3N0YXRpYyBpbnQgY3gyMjcwMl9zZXRfdHBzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKIAl1OCB2YWw7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlpZiAoZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcykgewogCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKGZlLCBwKTsKLQkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkgZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CiAJfQogCiAJLyogc2V0IGludmVyc2lvbiAqLwotCWN4MjI3MDJfc2V0X2ludmVyc2lvbiAoc3RhdGUsIHAtPmludmVyc2lvbik7CisJY3gyMjcwMl9zZXRfaW52ZXJzaW9uKHN0YXRlLCBwLT5pbnZlcnNpb24pOwogCiAJLyogc2V0IGJhbmR3aWR0aCAqLwotCXN3aXRjaChwLT51Lm9mZG0uYmFuZHdpZHRoKSB7CisJc3dpdGNoIChwLT51Lm9mZG0uYmFuZHdpZHRoKSB7CiAJY2FzZSBCQU5EV0lEVEhfNl9NSFo6Ci0JCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsIChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhjZikgfCAweDIwICk7CisJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsCisJCQkoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4Y2YpIHwgMHgyMCk7CiAJCWJyZWFrOwogCWNhc2UgQkFORFdJRFRIXzdfTUhaOgotCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLCAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4Y2YpIHwgMHgxMCApOworCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLAorCQkJKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweGNmKSB8IDB4MTApOwogCQlicmVhazsKIAljYXNlIEJBTkRXSURUSF84X01IWjoKLQkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmMHhjZiApOworCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLAorCQkJY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4Y2YpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkcHJpbnRrICgiJXM6IGludmFsaWQgYmFuZHdpZHRoXG4iLF9fZnVuY19fKTsKKwkJZHByaW50aygiJXM6IGludmFsaWQgYmFuZHdpZHRoXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCi0JcC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9IEZFQ19BVVRPOyAvL3RlbXAgaGFjayBhcyBtYW51YWwgbm90IHdvcmtpbmcKKwlwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDX0FVVE87IC8qIHRlbXAgaGFjayBhcyBtYW51YWwgbm90IHdvcmtpbmcgKi8KIAogCS8qIHVzZSBhdXRvIGNvbmZpZ3VyYXRpb24/ICovCi0JaWYoKHAtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb249PUhJRVJBUkNIWV9BVVRPKSB8fAotCSAgIChwLT51Lm9mZG0uY29uc3RlbGxhdGlvbj09UUFNX0FVVE8pIHx8Ci0JICAgKHAtPnUub2ZkbS5jb2RlX3JhdGVfSFA9PUZFQ19BVVRPKSB8fAotCSAgIChwLT51Lm9mZG0uY29kZV9yYXRlX0xQPT1GRUNfQVVUTykgfHwKLQkgICAocC0+dS5vZmRtLmd1YXJkX2ludGVydmFsPT1HVUFSRF9JTlRFUlZBTF9BVVRPKSB8fAotCSAgIChwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGU9PVRSQU5TTUlTU0lPTl9NT0RFX0FVVE8pICkgeworCWlmICgocC0+dS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9PSBISUVSQVJDSFlfQVVUTykgfHwKKwkgICAocC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24gPT0gUUFNX0FVVE8pIHx8CisJICAgKHAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPT0gRkVDX0FVVE8pIHx8CisJICAgKHAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPT0gRkVDX0FVVE8pIHx8CisJICAgKHAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCA9PSBHVUFSRF9JTlRFUlZBTF9BVVRPKSB8fAorCSAgIChwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUgPT0gVFJBTlNNSVNTSU9OX01PREVfQVVUTykpIHsKIAogCQkvKiBUUFMgU291cmNlIC0gdXNlIGhhcmR3YXJlIGRyaXZlbiB2YWx1ZXMgKi8KIAkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwNiwgMHgxMCk7CiAJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDcsIDB4OSk7CiAJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDgsIDB4QzEpOwotCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBCLCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEIpICYgMHhmYyApOwotCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLCAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4QkYpIHwgMHg0MCApOworCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBCLCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEIpCisJCQkmIDB4ZmMpOworCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLAorCQkJKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweEJGKSB8IDB4NDApOwogCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDAwLCAweDAxKTsgLyogQmVnaW4gYXF1aXNpdGlvbiAqLwotCQlkcHJpbnRrKCIlczogQXV0b2RldGVjdGluZ1xuIixfX2Z1bmNfXyk7CisJCWRwcmludGsoIiVzOiBBdXRvZGV0ZWN0aW5nXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAogCS8qIG1hbnVhbGx5IHByb2dyYW1tZWQgdmFsdWVzICovCi0JdmFsPTA7Ci0Jc3dpdGNoKHAtPnUub2ZkbS5jb25zdGVsbGF0aW9uKSB7Ci0JCWNhc2UgICBRUFNLOiB2YWwgPSAodmFsJjB4ZTcpOyBicmVhazsKLQkJY2FzZSBRQU1fMTY6IHZhbCA9ICh2YWwmMHhlNyl8MHgwODsgYnJlYWs7Ci0JCWNhc2UgUUFNXzY0OiB2YWwgPSAodmFsJjB4ZTcpfDB4MTA7IGJyZWFrOwotCQlkZWZhdWx0OgotCQkJZHByaW50ayAoIiVzOiBpbnZhbGlkIGNvbnN0ZWxsYXRpb25cbiIsX19mdW5jX18pOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJdmFsID0gMDsKKwlzd2l0Y2ggKHAtPnUub2ZkbS5jb25zdGVsbGF0aW9uKSB7CisJY2FzZSBRUFNLOgorCQl2YWwgPSAodmFsICYgMHhlNyk7CisJCWJyZWFrOworCWNhc2UgUUFNXzE2OgorCQl2YWwgPSAodmFsICYgMHhlNykgfCAweDA4OworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwkJdmFsID0gKHZhbCAmIDB4ZTcpIHwgMHgxMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygiJXM6IGludmFsaWQgY29uc3RlbGxhdGlvblxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0Jc3dpdGNoKHAtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24pIHsKLQkJY2FzZSBISUVSQVJDSFlfTk9ORTogdmFsID0gKHZhbCYweGY4KTsgYnJlYWs7Ci0JCWNhc2UgICAgSElFUkFSQ0hZXzE6IHZhbCA9ICh2YWwmMHhmOCl8MTsgYnJlYWs7Ci0JCWNhc2UgICAgSElFUkFSQ0hZXzI6IHZhbCA9ICh2YWwmMHhmOCl8MjsgYnJlYWs7Ci0JCWNhc2UgICAgSElFUkFSQ0hZXzQ6IHZhbCA9ICh2YWwmMHhmOCl8MzsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrICgiJXM6IGludmFsaWQgaGllcmFyY2h5XG4iLF9fZnVuY19fKTsKLQkJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAocC0+dS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbikgeworCWNhc2UgSElFUkFSQ0hZX05PTkU6CisJCXZhbCA9ICh2YWwgJiAweGY4KTsKKwkJYnJlYWs7CisJY2FzZSBISUVSQVJDSFlfMToKKwkJdmFsID0gKHZhbCAmIDB4ZjgpIHwgMTsKKwkJYnJlYWs7CisJY2FzZSBISUVSQVJDSFlfMjoKKwkJdmFsID0gKHZhbCAmIDB4ZjgpIHwgMjsKKwkJYnJlYWs7CisJY2FzZSBISUVSQVJDSFlfNDoKKwkJdmFsID0gKHZhbCAmIDB4ZjgpIHwgMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygiJXM6IGludmFsaWQgaGllcmFyY2h5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQljeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwNiwgdmFsKTsKKwljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDA2LCB2YWwpOwogCi0JdmFsPTA7Ci0Jc3dpdGNoKHAtPnUub2ZkbS5jb2RlX3JhdGVfSFApIHsKLQkJY2FzZSBGRUNfTk9ORToKLQkJY2FzZSBGRUNfMV8yOiB2YWwgPSAodmFsJjB4YzcpOyBicmVhazsKLQkJY2FzZSBGRUNfMl8zOiB2YWwgPSAodmFsJjB4YzcpfDB4MDg7IGJyZWFrOwotCQljYXNlIEZFQ18zXzQ6IHZhbCA9ICh2YWwmMHhjNyl8MHgxMDsgYnJlYWs7Ci0JCWNhc2UgRkVDXzVfNjogdmFsID0gKHZhbCYweGM3KXwweDE4OyBicmVhazsKLQkJY2FzZSBGRUNfN184OiB2YWwgPSAodmFsJjB4YzcpfDB4MjA7IGJyZWFrOwotCQlkZWZhdWx0OgotCQkJZHByaW50ayAoIiVzOiBpbnZhbGlkIGNvZGVfcmF0ZV9IUFxuIixfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwl2YWwgPSAwOworCXN3aXRjaCAocC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCkgeworCWNhc2UgRkVDX05PTkU6CisJY2FzZSBGRUNfMV8yOgorCQl2YWwgPSAodmFsICYgMHhjNyk7CisJCWJyZWFrOworCWNhc2UgRkVDXzJfMzoKKwkJdmFsID0gKHZhbCAmIDB4YzcpIHwgMHgwODsKKwkJYnJlYWs7CisJY2FzZSBGRUNfM180OgorCQl2YWwgPSAodmFsICYgMHhjNykgfCAweDEwOworCQlicmVhazsKKwljYXNlIEZFQ181XzY6CisJCXZhbCA9ICh2YWwgJiAweGM3KSB8IDB4MTg7CisJCWJyZWFrOworCWNhc2UgRkVDXzdfODoKKwkJdmFsID0gKHZhbCAmIDB4YzcpIHwgMHgyMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygiJXM6IGludmFsaWQgY29kZV9yYXRlX0hQXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlzd2l0Y2gocC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCkgewotCQljYXNlIEZFQ19OT05FOgotCQljYXNlIEZFQ18xXzI6IHZhbCA9ICh2YWwmMHhmOCk7IGJyZWFrOwotCQljYXNlIEZFQ18yXzM6IHZhbCA9ICh2YWwmMHhmOCl8MTsgYnJlYWs7Ci0JCWNhc2UgRkVDXzNfNDogdmFsID0gKHZhbCYweGY4KXwyOyBicmVhazsKLQkJY2FzZSBGRUNfNV82OiB2YWwgPSAodmFsJjB4ZjgpfDM7IGJyZWFrOwotCQljYXNlIEZFQ183Xzg6IHZhbCA9ICh2YWwmMHhmOCl8NDsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrICgiJXM6IGludmFsaWQgY29kZV9yYXRlX0xQXG4iLF9fZnVuY19fKTsKLQkJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAocC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCkgeworCWNhc2UgRkVDX05PTkU6CisJY2FzZSBGRUNfMV8yOgorCQl2YWwgPSAodmFsICYgMHhmOCk7CisJCWJyZWFrOworCWNhc2UgRkVDXzJfMzoKKwkJdmFsID0gKHZhbCAmIDB4ZjgpIHwgMTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfM180OgorCQl2YWwgPSAodmFsICYgMHhmOCkgfCAyOworCQlicmVhazsKKwljYXNlIEZFQ181XzY6CisJCXZhbCA9ICh2YWwgJiAweGY4KSB8IDM7CisJCWJyZWFrOworCWNhc2UgRkVDXzdfODoKKwkJdmFsID0gKHZhbCAmIDB4ZjgpIHwgNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygiJXM6IGludmFsaWQgY29kZV9yYXRlX0xQXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQljeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwNywgdmFsKTsKKwljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDA3LCB2YWwpOwogCi0JdmFsPTA7Ci0Jc3dpdGNoKHAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCkgewotCQljYXNlIEdVQVJEX0lOVEVSVkFMXzFfMzI6IHZhbCA9ICh2YWwmMHhmMyk7IGJyZWFrOwotCQljYXNlIEdVQVJEX0lOVEVSVkFMXzFfMTY6IHZhbCA9ICh2YWwmMHhmMyl8MHgwNDsgYnJlYWs7Ci0JCWNhc2UgIEdVQVJEX0lOVEVSVkFMXzFfODogdmFsID0gKHZhbCYweGYzKXwweDA4OyBicmVhazsKLQkJY2FzZSAgR1VBUkRfSU5URVJWQUxfMV80OiB2YWwgPSAodmFsJjB4ZjMpfDB4MGM7IGJyZWFrOwotCQlkZWZhdWx0OgotCQkJZHByaW50ayAoIiVzOiBpbnZhbGlkIGd1YXJkX2ludGVydmFsXG4iLF9fZnVuY19fKTsKLQkJCXJldHVybiAtRUlOVkFMOworCXZhbCA9IDA7CisJc3dpdGNoIChwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwpIHsKKwljYXNlIEdVQVJEX0lOVEVSVkFMXzFfMzI6CisJCXZhbCA9ICh2YWwgJiAweGYzKTsKKwkJYnJlYWs7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzE2OgorCQl2YWwgPSAodmFsICYgMHhmMykgfCAweDA0OworCQlicmVhazsKKwljYXNlIEdVQVJEX0lOVEVSVkFMXzFfODoKKwkJdmFsID0gKHZhbCAmIDB4ZjMpIHwgMHgwODsKKwkJYnJlYWs7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzQ6CisJCXZhbCA9ICh2YWwgJiAweGYzKSB8IDB4MGM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiBpbnZhbGlkIGd1YXJkX2ludGVydmFsXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlzd2l0Y2gocC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlKSB7Ci0JCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6IHZhbCA9ICh2YWwmMHhmYyk7IGJyZWFrOwotCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOiB2YWwgPSAodmFsJjB4ZmMpfDE7IGJyZWFrOwotCQlkZWZhdWx0OgotCQkJZHByaW50ayAoIiVzOiBpbnZhbGlkIHRyYW5zbWlzc2lvbl9tb2RlXG4iLF9fZnVuY19fKTsKLQkJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAocC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlKSB7CisJY2FzZSBUUkFOU01JU1NJT05fTU9ERV8ySzoKKwkJdmFsID0gKHZhbCAmIDB4ZmMpOworCQlicmVhazsKKwljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOgorCQl2YWwgPSAodmFsICYgMHhmYykgfCAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogaW52YWxpZCB0cmFuc21pc3Npb25fbW9kZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwOCwgdmFsKTsKLQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBCLCAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBCKSAmIDB4ZmMpIHwgMHgwMiApOwotCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsIChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhCRikgfCAweDQwICk7CisJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQiwKKwkJKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQikgJiAweGZjKSB8IDB4MDIpOworCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsCisJCShjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhCRikgfCAweDQwKTsKIAogCS8qIEJlZ2luIGNoYW5uZWwgYXF1aXNpdGlvbiAqLwogCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDAsIDB4MDEpOwpAQCAtMzI5LDEwOSArNDM0LDExMSBAQAogCiAvKiBSZXNldCB0aGUgZGVtb2QgaGFyZHdhcmUgYW5kIHJlc2V0IGFsbCBvZiB0aGUgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKICAgIHRvIGEgZGVmYXVsdCBzdGF0ZS4gKi8KLXN0YXRpYyBpbnQgY3gyMjcwMl9pbml0IChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgY3gyMjcwMl9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCWludCBpOwotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0JY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MDAsIDB4MDIpOworCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDAsIDB4MDIpOwogCiAJbXNsZWVwKDEwKTsKIAotCWZvciAoaT0wOyBpPHNpemVvZihpbml0X3RhYik7IGkrPTIpCi0JCWN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCBpbml0X3RhYltpXSwgaW5pdF90YWJbaSsxXSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdF90YWIpOyBpICs9IDIpCisJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIGluaXRfdGFiW2ldLCBpbml0X3RhYltpICsgMV0pOwogCi0JY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4ZjgsIChzdGF0ZS0+Y29uZmlnLT5vdXRwdXRfbW9kZSA8PCAxKSAmIDB4MDIpOworCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4ZjgsIChzdGF0ZS0+Y29uZmlnLT5vdXRwdXRfbW9kZSA8PCAxKQorCQkmIDB4MDIpOwogCiAJY3gyMjcwMl9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3N0YXR1c190KiBzdGF0dXMpCitzdGF0aWMgaW50IGN4MjI3MDJfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTggcmVnMEE7CiAJdTggcmVnMjM7CiAKIAkqc3RhdHVzID0gMDsKIAotCXJlZzBBID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgwQSk7Ci0JcmVnMjMgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDIzKTsKKwlyZWcwQSA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQSk7CisJcmVnMjMgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MjMpOwogCi0JZHByaW50ayAoIiVzOiBzdGF0dXMgZGVtb2Q9MHglMDJ4IGFnYz0weCUwMnhcbiIKLQkJLF9fZnVuY19fLHJlZzBBLHJlZzIzKTsKKwlkcHJpbnRrKCIlczogc3RhdHVzIGRlbW9kPTB4JTAyeCBhZ2M9MHglMDJ4XG4iCisJCSwgX19mdW5jX18sIHJlZzBBLCByZWcyMyk7CiAKLQlpZihyZWcwQSAmIDB4MTApIHsKKwlpZiAocmVnMEEgJiAweDEwKSB7CiAJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7CiAJCSpzdGF0dXMgfD0gRkVfSEFTX1ZJVEVSQkk7CiAJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkM7CiAJfQogCi0JaWYocmVnMEEgJiAweDIwKQorCWlmIChyZWcwQSAmIDB4MjApCiAJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CiAKLQlpZihyZWcyMyA8IDB4ZjApCisJaWYgKHJlZzIzIDwgMHhmMCkKIAkJKnN0YXR1cyB8PSBGRV9IQVNfU0lHTkFMOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyKiBiZXIpCitzdGF0aWMgaW50IGN4MjI3MDJfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQogewotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0JaWYoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhFNCkgJiAweDAyKSB7CisJaWYgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhFNCkgJiAweDAyKSB7CiAJCS8qIFJlYWx0aW1lIHN0YXRpc3RpY3MgKi8KLQkJKmJlciA9IChjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDcKLQkJCXwgKGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4REYpJjB4N0YpOworCQkqYmVyID0gKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhERSkgJiAweDdGKSA8PCA3CisJCQl8IChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REYpICYgMHg3Rik7CiAJfSBlbHNlIHsKIAkJLyogQXZlcmFndGluZSBzdGF0aXN0aWNzICovCi0JCSpiZXIgPSAoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERSkgJiAweDdGKSA8PCA3Ci0JCQl8IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4REYpOworCQkqYmVyID0gKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhERSkgJiAweDdGKSA8PCA3CisJCQl8IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhERik7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzaWduYWxfc3RyZW5ndGgpCitzdGF0aWMgaW50IGN4MjI3MDJfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJdTE2ICpzaWduYWxfc3RyZW5ndGgpCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAl1MTYgcnNfYmVyID0gMDsKLQlyc19iZXIgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDIzKTsKKwlyc19iZXIgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MjMpOwogCSpzaWduYWxfc3RyZW5ndGggPSAocnNfYmVyIDw8IDgpIHwgcnNfYmVyOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIpCitzdGF0aWMgaW50IGN4MjI3MDJfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQogewotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0JdTE2IHJzX2Jlcj0wOwotCWlmKGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4RTQpICYgMHgwMikgeworCXUxNiByc19iZXIgPSAwOworCWlmIChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4RTQpICYgMHgwMikgewogCQkvKiBSZWFsdGltZSBzdGF0aXN0aWNzICovCi0JCXJzX2JlciA9IChjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDcKLQkJCXwgKGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4REYpJiAweDdGKTsKKwkJcnNfYmVyID0gKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhERSkgJiAweDdGKSA8PCA3CisJCQl8IChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4REYpICYgMHg3Rik7CiAJfSBlbHNlIHsKIAkJLyogQXZlcmFnaW5lIHN0YXRpc3RpY3MgKi8KLQkJcnNfYmVyID0gKGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgOAotCQkJfCBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweERGKTsKKwkJcnNfYmVyID0gKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhERSkgJiAweDdGKSA8PCA4CisJCQl8IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhERik7CiAJfQogCSpzbnIgPSB+cnNfYmVyOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIHVjYmxvY2tzKQorc3RhdGljIGludCBjeDIyNzAyX3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdWNibG9ja3MpCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAl1OCBfdWNibG9ja3M7CiAKIAkvKiBSUyBVbmNvcnJlY3RhYmxlIFBhY2tldCBDb3VudCB0aGVuIHJlc2V0ICovCi0JX3VjYmxvY2tzID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhFMyk7CisJX3VjYmxvY2tzID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweEUzKTsKIAlpZiAoc3RhdGUtPnByZXZVQ0Jsb2NrcyA8IF91Y2Jsb2NrcykKIAkJKnVjYmxvY2tzID0gKF91Y2Jsb2NrcyAtIHN0YXRlLT5wcmV2VUNCbG9ja3MpOwogCWVsc2UKQEAgLTQ0MSwzNCArNTQ4LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3N0YXRpYyBpbnQgY3gyMjcwMl9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0JdTggcmVnMEMgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDBDKTsKKwl1OCByZWcwQyA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQyk7CiAKIAlwLT5pbnZlcnNpb24gPSByZWcwQyAmIDB4MSA/IElOVkVSU0lPTl9PTiA6IElOVkVSU0lPTl9PRkY7Ci0JcmV0dXJuIGN4MjI3MDJfZ2V0X3RwcyAoc3RhdGUsICZwLT51Lm9mZG0pOworCXJldHVybiBjeDIyNzAyX2dldF90cHMoc3RhdGUsICZwLT51Lm9mZG0pOwogfQogCi1zdGF0aWMgaW50IGN4MjI3MDJfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqdHVuZSkKK3N0YXRpYyBpbnQgY3gyMjcwMl9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MgKnR1bmUpCiB7CiAJdHVuZS0+bWluX2RlbGF5X21zID0gMTAwMDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY3gyMjcwMl9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIHZvaWQgY3gyMjcwMl9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWtmcmVlKHN0YXRlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGN4MjI3MDJfb3BzOwogCi1zdHJ1Y3QgZHZiX2Zyb250ZW5kKiBjeDIyNzAyX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcqIGNvbmZpZywKLQkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDIyNzAyX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBOVUxMOworCXN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSA9IE5VTEw7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwogCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGN4MjI3MDJfc3RhdGUpLCBHRlBfS0VSTkVMKTsKQEAgLTQ4NSw3ICs1OTQsOCBAQAogCQlnb3RvIGVycm9yOwogCiAJLyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLwotCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmN4MjI3MDJfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZjeDIyNzAyX29wcywKKwkJc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CiAJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKIAlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKIApAQCAtNDkzLDYgKzYwMyw3IEBACiAJa2ZyZWUoc3RhdGUpOwogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChjeDIyNzAyX2F0dGFjaCk7CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBjeDIyNzAyX29wcyA9IHsKIApAQCAtNTI1LDExICs2MzYsNiBAQAogCS5yZWFkX3VjYmxvY2tzID0gY3gyMjcwMl9yZWFkX3VjYmxvY2tzLAogfTsKIAotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSB2ZXJib3NlIGRlYnVnIG1lc3NhZ2VzIik7Ci0KIE1PRFVMRV9ERVNDUklQVElPTigiQ29uZXhhbnQgQ1gyMjcwMiBEVkItVCBEZW1vZHVsYXRvciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUVYUE9SVF9TWU1CT0woY3gyMjcwMl9hdHRhY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmgKaW5kZXggYjFlNDY1Yy4uZjE1NGUxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5oCkBAIC0zMCw4ICszMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KIAotc3RydWN0IGN4MjI3MDJfY29uZmlnCi17CitzdHJ1Y3QgY3gyMjcwMl9jb25maWcgewogCS8qIHRoZSBkZW1vZHVsYXRvcidzIGkyYyBhZGRyZXNzICovCiAJdTggZGVtb2RfYWRkcmVzczsKIApAQCAtNDEsMTYgKzQwLDE5IEBACiAJdTggb3V0cHV0X21vZGU7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX0NYMjI3MDIpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfQ1gyMjcwMl9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKLWV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBjeDIyNzAyX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcqIGNvbmZpZywKLQkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9DWDIyNzAyKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0NYMjI3MDJfTU9EVUxFKSBcCisJJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjI3MDJfYXR0YWNoKAorCWNvbnN0IHN0cnVjdCBjeDIyNzAyX2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjI3MDJfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDIyNzAyX2NvbmZpZyogY29uZmlnLAotCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyMjcwMl9hdHRhY2goCisJY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnICpjb25maWcsCisJc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CiB9Ci0jZW5kaWYgLy8gQ09ORklHX0RWQl9DWDIyNzAyCisjZW5kaWYKIAotI2VuZGlmIC8vIENYMjI3MDJfSAorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTAuaAppbmRleCAxNzkyYWRiLi5mZGNjZWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmgKQEAgLTMzLDEyICszMywxNyBAQAogCXU4IGRlbW9kX2FkZHJlc3M7CiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBjeDI0MTEwX3BsbF93cml0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIHZhbCkgewotCWludCByID0gMDsKLQl1OCBidWZbXSA9IHsodTgpICh2YWw+PjI0KSwgKHU4KSAodmFsPj4xNiksICh1OCkgKHZhbD4+OCl9Oworc3RhdGljIGlubGluZSBpbnQgY3gyNDExMF9wbGxfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiB2YWwpCit7CisJdTggYnVmW10gPSB7CisJCSh1OCkoKHZhbCA+PiAyNCkgJiAweGZmKSwKKwkJKHU4KSgodmFsID4+IDE2KSAmIDB4ZmYpLAorCQkodTgpKCh2YWwgPj4gOCkgJiAweGZmKQorCX07CisKIAlpZiAoZmUtPm9wcy53cml0ZSkKLQkJciA9IGZlLT5vcHMud3JpdGUoZmUsIGJ1ZiwgMyk7Ci0JcmV0dXJuIHI7CisJCXJldHVybiBmZS0+b3BzLndyaXRlKGZlLCBidWYsIDMpOworCXJldHVybiAwOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMTApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDExMF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDRiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5jCkBAIC0wLDAgKzEsMTQ3MCBAQAorLyoKKyAgICBDb25leGFudCBjeDI0MTE2L2N4MjQxMTggLSBEVkJTL1MyIFNhdGVsbGl0ZSBkZW1vZC90dW5lciBkcml2ZXIKKworICAgIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IFN0ZXZlbiBUb3RoIDxzdG90aEBoYXVwcGF1Z2UuY29tPgorICAgIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IEdlb3JnIEFjaGVyCisgICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggRGFycm9uIEJyb2FkCisJTWFyY2ggMjAwNworCSAgICBGaXhlZCBzb21lIGJ1Z3MuCisJICAgIEFkZGVkIGRpc2VxYyBzdXBwb3J0LgorCSAgICBBZGRlZCBjb3JyZWN0ZWQgc2lnbmFsIHN0cmVuZ3RoIHN1cHBvcnQuCisJQXVndXN0IDIwMDcKKwkgICAgU3luYyB3aXRoIGxlZ2FjeSB2ZXJzaW9uLgorCSAgICBTb21lIGNsZWFuIHVwcy4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggSWdvciBMaXBsaWFuaW4KKwlTZXB0ZW1iZXIsIDl0aCAyMDA4CisJICAgIEZpeGVkIGxvY2tpbmcgb24gaGlnaCBzeW1ib2wgcmF0ZXMgKD4zMDAwMCkuCisJICAgIEltcGxlbWVudCBNUEVHIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlci4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiY3gyNDExNi5oIgorCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkFjdGl2YXRlcyBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6MCkiKTsKKworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnKSBcCisJCQlwcmludGsoS0VSTl9JTkZPICJjeDI0MTE2OiAiIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBDWDI0MTE2X0RFRkFVTFRfRklSTVdBUkUgImR2Yi1mZS1jeDI0MTE2LmZ3IgorI2RlZmluZSBDWDI0MTE2X1NFQVJDSF9SQU5HRV9LSFogNTAwMAorCisvKiBrbm93biByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ1gyNDExNl9SRUdfQ09NTUFORCAoMHgwMCkgICAgICAvKiBjb21tYW5kIGFyZ3MgMHgwMC4uMHgxZSAqLworI2RlZmluZSBDWDI0MTE2X1JFR19FWEVDVVRFICgweDFmKSAgICAgIC8qIGV4ZWN1dGUgY29tbWFuZCAqLworI2RlZmluZSBDWDI0MTE2X1JFR19NQUlMQk9YICgweDk2KSAgICAgIC8qIEZXIG9yIG11bHRpcHVycG9zZSBtYWlsYm94PyAqLworI2RlZmluZSBDWDI0MTE2X1JFR19SRVNFVCAgICgweDIwKSAgICAgIC8qIHJlc2V0IHN0YXR1cyA+IDAgICAgICovCisjZGVmaW5lIENYMjQxMTZfUkVHX1NJR05BTCAgKDB4OWUpICAgICAgLyogc2lnbmFsIGxvdyAgICAgICAgICAgKi8KKyNkZWZpbmUgQ1gyNDExNl9SRUdfU1NUQVRVUyAoMHg5ZCkgICAgICAvKiBzaWduYWwgaGlnaCAvIHN0YXR1cyAqLworI2RlZmluZSBDWDI0MTE2X1JFR19RVUFMSVRZOCAoMHhhMykKKyNkZWZpbmUgQ1gyNDExNl9SRUdfUVNUQVRVUyAoMHhiYykKKyNkZWZpbmUgQ1gyNDExNl9SRUdfUVVBTElUWTAgKDB4ZDUpCisjZGVmaW5lIENYMjQxMTZfUkVHX0JFUjAgICAgKDB4YzkpCisjZGVmaW5lIENYMjQxMTZfUkVHX0JFUjggICAgKDB4YzgpCisjZGVmaW5lIENYMjQxMTZfUkVHX0JFUjE2ICAgKDB4YzcpCisjZGVmaW5lIENYMjQxMTZfUkVHX0JFUjI0ICAgKDB4YzYpCisjZGVmaW5lIENYMjQxMTZfUkVHX1VDQjAgICAgKDB4Y2IpCisjZGVmaW5lIENYMjQxMTZfUkVHX1VDQjggICAgKDB4Y2EpCisjZGVmaW5lIENYMjQxMTZfUkVHX0NMS0RJViAgKDB4ZjMpCisjZGVmaW5lIENYMjQxMTZfUkVHX1JBVEVESVYgKDB4ZjkpCisKKy8qIGNvbmZpZ3VyZWQgZmVjIChub3QgdHVuZWQpIG9yIGFjdHVhbCBGRUMgKHR1bmVkKSAxPTEvMiAyPTIvMyBldGMgKi8KKyNkZWZpbmUgQ1gyNDExNl9SRUdfRkVDU1RBVFVTICgweDljKQorCisvKiBGRUNTVEFUVVMgYml0cyAqLworLyogbWFzayB0byBkZXRlcm1pbmUgY29uZmlndXJlZCBmZWMgKG5vdCB0dW5lZCkgb3IgYWN0dWFsIGZlYyAodHVuZWQpICovCisjZGVmaW5lIENYMjQxMTZfRkVDX0ZFQ01BU0sgICAoMHgxZikKKworLyogU2VsZWN0IERWQi1TIGRlbW9kdWxhdG9yLCBlbHNlIERWQi1TMiAqLworI2RlZmluZSBDWDI0MTE2X0ZFQ19EVkJTICAgICAgKDB4MjApCisjZGVmaW5lIENYMjQxMTZfRkVDX1VOS05PV04gICAoMHg0MCkgICAgLyogVW5rbm93bi91bnVzZWQgKi8KKworLyogUGlsb3QgbW9kZSByZXF1ZXN0ZWQgd2hlbiB0dW5pbmcgZWxzZSBhbHdheXMgcmVzZXQgd2hlbiB0dW5lZCAqLworI2RlZmluZSBDWDI0MTE2X0ZFQ19QSUxPVCAgICAgKDB4ODApCisKKy8qIGFyZyBidWZmZXIgc2l6ZSAqLworI2RlZmluZSBDWDI0MTE2X0FSR0xFTiAoMHgxZSkKKworLyogcm9sbG9mZiAqLworI2RlZmluZSBDWDI0MTE2X1JPTExPRkZfMDIwICgweDAwKQorI2RlZmluZSBDWDI0MTE2X1JPTExPRkZfMDI1ICgweDAxKQorI2RlZmluZSBDWDI0MTE2X1JPTExPRkZfMDM1ICgweDAyKQorCisvKiBwaWxvdCBiaXQgKi8KKyNkZWZpbmUgQ1gyNDExNl9QSUxPVF9PRkYgKDB4MDApCisjZGVmaW5lIENYMjQxMTZfUElMT1RfT04gKDB4NDApCisKKy8qIHNpZ25hbCBzdGF0dXMgKi8KKyNkZWZpbmUgQ1gyNDExNl9IQVNfU0lHTkFMICAgKDB4MDEpCisjZGVmaW5lIENYMjQxMTZfSEFTX0NBUlJJRVIgICgweDAyKQorI2RlZmluZSBDWDI0MTE2X0hBU19WSVRFUkJJICAoMHgwNCkKKyNkZWZpbmUgQ1gyNDExNl9IQVNfU1lOQ0xPQ0sgKDB4MDgpCisjZGVmaW5lIENYMjQxMTZfSEFTX1VOS05PV04xICgweDEwKQorI2RlZmluZSBDWDI0MTE2X0hBU19VTktOT1dOMiAoMHgyMCkKKyNkZWZpbmUgQ1gyNDExNl9TVEFUVVNfTUFTSyAgKDB4M2YpCisjZGVmaW5lIENYMjQxMTZfU0lHTkFMX01BU0sgICgweGMwKQorCisjZGVmaW5lIENYMjQxMTZfRElTRVFDX1RPTkVPRkYgICAoMCkgICAgLyogdG9uZWJ1cnN0IG5ldmVyIHNlbnQgKi8KKyNkZWZpbmUgQ1gyNDExNl9ESVNFUUNfVE9ORUNBQ0hFICgxKSAgICAvKiB0b25lYnVyc3QgY2FjaGVkICAgICAqLworI2RlZmluZSBDWDI0MTE2X0RJU0VRQ19NRVNHQ0FDSEUgKDIpICAgIC8qIG1lc3NhZ2UgY2FjaGVkICAgICAgICovCisKKy8qIGFyZyBvZmZzZXQgZm9yIERpU0VxQyAqLworI2RlZmluZSBDWDI0MTE2X0RJU0VRQ19CVVJTVCAgKDEpCisjZGVmaW5lIENYMjQxMTZfRElTRVFDX0FSRzJfMiAoMikgICAvKiB1bmtub3duIHZhbHVlPTIgKi8KKyNkZWZpbmUgQ1gyNDExNl9ESVNFUUNfQVJHM18wICgzKSAgIC8qIHVua25vd24gdmFsdWU9MCAqLworI2RlZmluZSBDWDI0MTE2X0RJU0VRQ19BUkc0XzAgKDQpICAgLyogdW5rbm93biB2YWx1ZT0wICovCisjZGVmaW5lIENYMjQxMTZfRElTRVFDX01TR0xFTiAoNSkKKyNkZWZpbmUgQ1gyNDExNl9ESVNFUUNfTVNHT0ZTICg2KQorCisvKiBEaVNFcUMgYnVyc3QgKi8KKyNkZWZpbmUgQ1gyNDExNl9ESVNFUUNfTUlOSV9BICgwKQorI2RlZmluZSBDWDI0MTE2X0RJU0VRQ19NSU5JX0IgKDEpCisKKy8qIERpU0VxQyB0b25lIGJ1cnN0ICovCitzdGF0aWMgaW50IHRvbmVidXJzdCA9IDE7Cittb2R1bGVfcGFyYW0odG9uZWJ1cnN0LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh0b25lYnVyc3QsICJEaVNFcUMgdG9uZWJ1cnN0IDA9T0ZGLCAxPVRPTkUgQ0FDSEUsICJcCisJIjI9TUVTU0FHRSBDQUNIRSAoZGVmYXVsdDoxKSIpOworCisvKiBTTlIgbWVhc3VyZW1lbnRzICovCitzdGF0aWMgaW50IGVzbm9fc25yOworbW9kdWxlX3BhcmFtKGVzbm9fc25yLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlNOUiByZXR1cm4gdW5pdHMsIDA9UEVSQ0VOVEFHRSAwLTEwMCwgIlwKKwkiMT1FU05PKGRiICogMTApIChkZWZhdWx0OjApIik7CisKK2VudW0gY21kcyB7CisJQ01EX1NFVF9WQ08gICAgID0gMHgxMCwKKwlDTURfVFVORVJFUVVFU1QgPSAweDExLAorCUNNRF9NUEVHQ09ORklHICA9IDB4MTMsCisJQ01EX1RVTkVSSU5JVCAgID0gMHgxNCwKKwlDTURfQkFORFdJRFRIICAgPSAweDE1LAorCUNNRF9HRVRBR0MgICAgICA9IDB4MTksCisJQ01EX0xOQkNPTkZJRyAgID0gMHgyMCwKKwlDTURfTE5CU0VORCAgICAgPSAweDIxLCAvKiBGb3JtZXJseSBDTURfU0VORF9ESVNFUUMgKi8KKwlDTURfU0VUX1RPTkVQUkUgPSAweDIyLAorCUNNRF9TRVRfVE9ORSAgICA9IDB4MjMsCisJQ01EX1VQREZXVkVSUyAgID0gMHgzNSwKKwlDTURfVFVORVJTTEVFUCAgPSAweDM2LAorCUNNRF9BR0NDT05UUk9MICA9IDB4M2IsIC8qIFVua25vd24gKi8KK307CisKKy8qIFRoZSBEZW1vZC9UdW5lciBjYW4ndCBlYXNpbHkgcHJvdmlkZSB0aGVzZSwgd2UgY2FjaGUgdGhlbSAqLworc3RydWN0IGN4MjQxMTZfdHVuaW5nIHsKKwl1MzIgZnJlcXVlbmN5OworCXUzMiBzeW1ib2xfcmF0ZTsKKwlmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCBpbnZlcnNpb247CisJZmVfY29kZV9yYXRlX3QgZmVjOworCisJZmVfbW9kdWxhdGlvbl90IG1vZHVsYXRpb247CisJZmVfcGlsb3RfdCBwaWxvdDsKKwlmZV9yb2xsb2ZmX3Qgcm9sbG9mZjsKKworCS8qIERlbW9kIHZhbHVlcyAqLworCXU4IGZlY192YWw7CisJdTggZmVjX21hc2s7CisJdTggaW52ZXJzaW9uX3ZhbDsKKwl1OCBwaWxvdF92YWw7CisJdTggcm9sbG9mZl92YWw7Cit9OworCisvKiBCYXNpYyBjb21tYW5kcyB0aGF0IGFyZSBzZW50IHRvIHRoZSBmaXJtd2FyZSAqLworc3RydWN0IGN4MjQxMTZfY21kIHsKKwl1OCBsZW47CisJdTggYXJnc1tDWDI0MTE2X0FSR0xFTl07Cit9OworCitzdHJ1Y3QgY3gyNDExNl9zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJY29uc3Qgc3RydWN0IGN4MjQxMTZfY29uZmlnICpjb25maWc7CisKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOworCisJc3RydWN0IGN4MjQxMTZfdHVuaW5nIGRjdXI7CisJc3RydWN0IGN4MjQxMTZfdHVuaW5nIGRueHQ7CisKKwl1OCBza2lwX2Z3X2xvYWQ7CisJdTggYnVyc3Q7CisJc3RydWN0IGN4MjQxMTZfY21kIGRzZWNfY21kOworfTsKKworc3RhdGljIGludCBjeDI0MTE2X3dyaXRlcmVnKHN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSwgaW50IHJlZywgaW50IGRhdGEpCit7CisJdTggYnVmW10gPSB7IHJlZywgZGF0YSB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMiB9OworCWludCBlcnI7CisKKwlpZiAoZGVidWcgPiAxKQorCQlwcmludGsoImN4MjQxMTY6ICVzOiB3cml0ZSByZWcgMHglMDJ4LCB2YWx1ZSAweCUwMnhcbiIsCisJCQlfX2Z1bmNfXywgcmVnLCBkYXRhKTsKKworCWVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwlpZiAoZXJyICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogd3JpdGVyZWcgZXJyb3IoZXJyID09ICVpLCByZWcgPT0gMHglMDJ4LCIKKwkJCSAiIHZhbHVlID09IDB4JTAyeClcbiIsIF9fZnVuY19fLCBlcnIsIHJlZywgZGF0YSk7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKworCXJldHVybiAwOworfQorCisvKiBCdWxrIGJ5dGUgd3JpdGVzIHRvIGEgc2luZ2xlIEkyQyBhZGRyZXNzLCBmb3IgMzJrIGZpcm13YXJlIGxvYWQgKi8KK3N0YXRpYyBpbnQgY3gyNDExNl93cml0ZXJlZ04oc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLCBpbnQgcmVnLAorCQkJICAgICBjb25zdCB1OCAqZGF0YSwgdTE2IGxlbikKK3sKKwlpbnQgcmV0ID0gLUVSRU1PVEVJTzsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisJdTggKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCXByaW50aygiVW5hYmxlIHRvIGttYWxsb2NcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCSooYnVmKSA9IHJlZzsKKwltZW1jcHkoYnVmICsgMSwgZGF0YSwgbGVuKTsKKworCW1zZy5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5idWYgPSBidWY7CisJbXNnLmxlbiA9IGxlbiArIDE7CisKKwlpZiAoZGVidWcgPiAxKQorCQlwcmludGsoS0VSTl9JTkZPICJjeDI0MTE2OiAlczogIHdyaXRlIHJlZ04gMHglMDJ4LCBsZW4gPSAlZFxuIiwKKwkJCV9fZnVuY19fLCByZWcsIGxlbik7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSk7CisJaWYgKHJldCAhPSAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHdyaXRlcmVnIGVycm9yKGVyciA9PSAlaSwgcmVnID09IDB4JTAyeFxuIiwKKwkJCSBfX2Z1bmNfXywgcmV0LCByZWcpOworCQlyZXQgPSAtRVJFTU9URUlPOworCX0KKworZXJyb3I6CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDExNl9yZWFkcmVnKHN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSwgdTggcmVnKQoreworCWludCByZXQ7CisJdTggYjBbXSA9IHsgcmVnIH07CisJdTggYjFbXSA9IHsgMCB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geworCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwKKwkJCS5idWYgPSBiMCwgLmxlbiA9IDEgfSwKKwkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9IGIxLCAubGVuID0gMSB9CisJfTsKKworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDIpOworCisJaWYgKHJldCAhPSAyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlZz0weCV4IChlcnJvcj0lZClcbiIsCisJCQlfX2Z1bmNfXywgcmVnLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChkZWJ1ZyA+IDEpCisJCXByaW50ayhLRVJOX0lORk8gImN4MjQxMTY6IHJlYWQgcmVnIDB4JTAyeCwgdmFsdWUgMHglMDJ4XG4iLAorCQkJcmVnLCBiMVswXSk7CisKKwlyZXR1cm4gYjFbMF07Cit9CisKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSwKKwlmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCBpbnZlcnNpb24pCit7CisJZHByaW50aygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgaW52ZXJzaW9uKTsKKworCXN3aXRjaCAoaW52ZXJzaW9uKSB7CisJY2FzZSBJTlZFUlNJT05fT0ZGOgorCQlzdGF0ZS0+ZG54dC5pbnZlcnNpb25fdmFsID0gMHgwMDsKKwkJYnJlYWs7CisJY2FzZSBJTlZFUlNJT05fT046CisJCXN0YXRlLT5kbnh0LmludmVyc2lvbl92YWwgPSAweDA0OworCQlicmVhazsKKwljYXNlIElOVkVSU0lPTl9BVVRPOgorCQlzdGF0ZS0+ZG54dC5pbnZlcnNpb25fdmFsID0gMHgwQzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3RhdGUtPmRueHQuaW52ZXJzaW9uID0gaW52ZXJzaW9uOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBtb2RmZWMgKG1vZHVsYXRpb24gYW5kIEZFQykKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIE1PRCAgICAgICAgICBGRUMgICAgICAgICAgICAgbWFzay92YWwgICAgc3RhbmRhcmQKKyAqIC0tLS0gICAgICAgICAtLS0tLS0tLSAgICAgICAgLS0tLS0tLS0tLS0gLS0tLS0tLS0KKyAqIFFQU0sgICAgICAgICBGRUNfMV8yICAgICAgICAgMHgwMiAweDAyK1ggRFZCLVMKKyAqIFFQU0sgICAgICAgICBGRUNfMl8zICAgICAgICAgMHgwNCAweDAyK1ggRFZCLVMKKyAqIFFQU0sgICAgICAgICBGRUNfM180ICAgICAgICAgMHgwOCAweDAyK1ggRFZCLVMKKyAqIFFQU0sgICAgICAgICBGRUNfNF81ICAgICAgICAgMHgxMCAweDAyK1ggRFZCLVMgKD8pCisgKiBRUFNLICAgICAgICAgRkVDXzVfNiAgICAgICAgIDB4MjAgMHgwMitYIERWQi1TCisgKiBRUFNLICAgICAgICAgRkVDXzZfNyAgICAgICAgIDB4NDAgMHgwMitYIERWQi1TCisgKiBRUFNLICAgICAgICAgRkVDXzdfOCAgICAgICAgIDB4ODAgMHgwMitYIERWQi1TCisgKiBRUFNLICAgICAgICAgRkVDXzhfOSAgICAgICAgIDB4MDEgMHgwMitYIERWQi1TICg/KSAoTk9UIFNVUFBPUlRFRD8pCisgKiBRUFNLICAgICAgICAgQVVUTyAgICAgICAgICAgIDB4ZmYgMHgwMitYIERWQi1TCisgKgorICogRm9yIERWQi1TIGhpZ2ggYnl0ZSBwcm9iYWJseSByZXByZXNlbnRzIEZFQworICogYW5kIGxvdyBieXRlIHNlbGVjdHMgdGhlIG1vZHVsYXRvci4gVGhlIGhpZ2gKKyAqIGJ5dGUgaXMgc2VhcmNoIHJhbmdlIG1hc2suIEJpdCA1IG1heSB0dXJuCisgKiBvbiBEVkItUyBhbmQgcmVtYWluaW5nIGJpdHMgcmVwcmVzZW50IHNvbWUKKyAqIGtpbmQgb2YgY2FsaWJyYXRpb24gKGhvdy93aGF0IGkgZG8gbm90IGtub3cpLgorICoKKyAqIEVnLigyLzMpIHN6YXAgIlpvbmUgSG9ycm9yIgorICoKKyAqIG1hc2svdmFsID0gMHgwNCwgMHgyMAorICogc3RhdHVzIDFmIHwgc2lnbmFsIGMzYzAgfCBzbnIgYTMzMyB8IGJlciAwMDAwMDA5OCB8IHVuYyAwIHwgRkVfSEFTX0xPQ0sKKyAqCisgKiBtYXNrL3ZhbCA9IDB4MDQsIDB4MzAKKyAqIHN0YXR1cyAxZiB8IHNpZ25hbCBjM2MwIHwgc25yIGEzMzMgfCBiZXIgMDAwMDAwMDAgfCB1bmMgMCB8IEZFX0hBU19MT0NLCisgKgorICogQWZ0ZXIgdHVuaW5nIEZFQ1NUQVRVUyBjb250YWlucyBhY3R1YWwgRkVDCisgKiBpbiB1c2UgbnVtYmVyZWQgMSB0aHJvdWdoIHRvIDggZm9yIDEvMiAuLiAyLzMgZXRjCisgKgorICogTkJDPU5PVC9OT04gQkFDS1dBUkQgQ09NUEFUSUJMRSBXSVRIIERWQi1TIChEVkItUzIgb25seSkKKyAqCisgKiBOQkMtUVBTSyAgICAgRkVDXzFfMiAgICAgICAgIDB4MDAsIDB4MDQgICAgICBEVkItUzIKKyAqIE5CQy1RUFNLICAgICBGRUNfM181ICAgICAgICAgMHgwMCwgMHgwNSAgICAgIERWQi1TMgorICogTkJDLVFQU0sgICAgIEZFQ18yXzMgICAgICAgICAweDAwLCAweDA2ICAgICAgRFZCLVMyCisgKiBOQkMtUVBTSyAgICAgRkVDXzNfNCAgICAgICAgIDB4MDAsIDB4MDcgICAgICBEVkItUzIKKyAqIE5CQy1RUFNLICAgICBGRUNfNF81ICAgICAgICAgMHgwMCwgMHgwOCAgICAgIERWQi1TMgorICogTkJDLVFQU0sgICAgIEZFQ181XzYgICAgICAgICAweDAwLCAweDA5ICAgICAgRFZCLVMyCisgKiBOQkMtUVBTSyAgICAgRkVDXzhfOSAgICAgICAgIDB4MDAsIDB4MGEgICAgICBEVkItUzIKKyAqIE5CQy1RUFNLICAgICBGRUNfOV8xMCAgICAgICAgMHgwMCwgMHgwYiAgICAgIERWQi1TMgorICoKKyAqIE5CQy04UFNLICAgICBGRUNfM181ICAgICAgICAgMHgwMCwgMHgwYyAgICAgIERWQi1TMgorICogTkJDLThQU0sgICAgIEZFQ18yXzMgICAgICAgICAweDAwLCAweDBkICAgICAgRFZCLVMyCisgKiBOQkMtOFBTSyAgICAgRkVDXzNfNCAgICAgICAgIDB4MDAsIDB4MGUgICAgICBEVkItUzIKKyAqIE5CQy04UFNLICAgICBGRUNfNV82ICAgICAgICAgMHgwMCwgMHgwZiAgICAgIERWQi1TMgorICogTkJDLThQU0sgICAgIEZFQ184XzkgICAgICAgICAweDAwLCAweDEwICAgICAgRFZCLVMyCisgKiBOQkMtOFBTSyAgICAgRkVDXzlfMTAgICAgICAgIDB4MDAsIDB4MTEgICAgICBEVkItUzIKKyAqCisgKiBGb3IgRFZCLVMyIGxvdyBieXRlcyBzZWxlY3RzIGJvdGggbW9kdWxhdG9yCisgKiBhbmQgRkVDLiBIaWdoIGJ5dGUgaXMgbWVhbmluZ2xlc3MgaGVyZS4gVG8KKyAqIHNldCBwaWxvdCwgYml0IDYgKDB4NDApIGlzIHNldC4gV2hlbiBpbnNwZWN0aW5nCisgKiBGRUNTVEFUVVMgYml0IDcgKDB4ODApIHJlcHJlc2VudHMgdGhlIHBpbG90CisgKiBzZWxlY3Rpb24gd2hpbHN0IG5vdCB0dW5lZC4gV2hlbiB0dW5lZCwgYWN0dWFsIEZFQworICogaW4gdXNlIGlzIGZvdW5kIGluIEZFQ1NUQVRVUyBhcyBwZXIgYWJvdmUuIFBpbG90CisgKiB2YWx1ZSBpcyByZXNldC4KKyAqLworCisvKiBBIHRhYmxlIG9mIG1vZHVsYXRpb24sIGZlYyBhbmQgY29uZmlndXJhdGlvbiBieXRlcyBmb3IgdGhlIGRlbW9kLgorICogTm90IGFsbCBTMiBtbW9kdWxhdGlvbiBzY2hlbWVzIGFyZSBzdXBwb3J0IGFuZCBub3QgYWxsIHJhdGVzIHdpdGgKKyAqIGEgc2NoZW1lIGFyZSBzdXBwb3J0LiBFc3BlY2lhbGx5LCBubyBhdXRvIGRldGVjdCB3aGVuIGluIFMyIG1vZGUuCisgKi8KK3N0cnVjdCBjeDI0MTE2X21vZGZlYyB7CisJZmVfZGVsaXZlcnlfc3lzdGVtX3QgZGVsaXZlcnlfc3lzdGVtOworCWZlX21vZHVsYXRpb25fdCBtb2R1bGF0aW9uOworCWZlX2NvZGVfcmF0ZV90IGZlYzsKKwl1OCBtYXNrOwkvKiBJbiBEVkJTIG1vZGUgdGhpcyBpcyB1c2VkIHRvIGF1dG9kZXRlY3QgKi8KKwl1OCB2YWw7CQkvKiBQYXNzZWQgdG8gdGhlIGZpcm13YXJlIHRvIGluZGljYXRlIG1vZGUgc2VsZWN0aW9uICovCit9IENYMjQxMTZfTU9ERkVDX01PREVTW10gPSB7CisgLyogUVBTSy4gRm9yIHVua25vd24gcmF0ZXMgd2Ugc2V0IGhhcmR3YXJlIHRvIGF1dG8gZGV0ZWN0IDB4ZmUgMHgzMCAqLworCisgLyptb2QgICBmZWMgICAgICAgbWFzayAgdmFsICovCisgeyBTWVNfRFZCUywgUVBTSywgRkVDX05PTkUsIDB4ZmUsIDB4MzAgfSwKKyB7IFNZU19EVkJTLCBRUFNLLCBGRUNfMV8yLCAgMHgwMiwgMHgyZSB9LCAvKiAwMDAwMDAxMCAwMDEwMTExMCAqLworIHsgU1lTX0RWQlMsIFFQU0ssIEZFQ18yXzMsICAweDA0LCAweDJmIH0sIC8qIDAwMDAwMTAwIDAwMTAxMTExICovCisgeyBTWVNfRFZCUywgUVBTSywgRkVDXzNfNCwgIDB4MDgsIDB4MzAgfSwgLyogMDAwMDEwMDAgMDAxMTAwMDAgKi8KKyB7IFNZU19EVkJTLCBRUFNLLCBGRUNfNF81LCAgMHhmZSwgMHgzMCB9LCAvKiAwMDA/MDAwMCA/ICAgICAgICAqLworIHsgU1lTX0RWQlMsIFFQU0ssIEZFQ181XzYsICAweDIwLCAweDMxIH0sIC8qIDAwMTAwMDAwIDAwMTEwMDAxICovCisgeyBTWVNfRFZCUywgUVBTSywgRkVDXzZfNywgIDB4ZmUsIDB4MzAgfSwgLyogMD8wMDAwMDAgPyAgICAgICAgKi8KKyB7IFNZU19EVkJTLCBRUFNLLCBGRUNfN184LCAgMHg4MCwgMHgzMiB9LCAvKiAxMDAwMDAwMCAwMDExMDAxMCAqLworIHsgU1lTX0RWQlMsIFFQU0ssIEZFQ184XzksICAweGZlLCAweDMwIH0sIC8qIDAwMDAwMDA/ID8gICAgICAgICovCisgeyBTWVNfRFZCUywgUVBTSywgRkVDX0FVVE8sIDB4ZmUsIDB4MzAgfSwKKyAvKiBOQkMtUVBTSyAqLworIHsgU1lTX0RWQlMyLCBRUFNLLCBGRUNfMV8yLCAgMHgwMCwgMHgwNCB9LAorIHsgU1lTX0RWQlMyLCBRUFNLLCBGRUNfM181LCAgMHgwMCwgMHgwNSB9LAorIHsgU1lTX0RWQlMyLCBRUFNLLCBGRUNfMl8zLCAgMHgwMCwgMHgwNiB9LAorIHsgU1lTX0RWQlMyLCBRUFNLLCBGRUNfM180LCAgMHgwMCwgMHgwNyB9LAorIHsgU1lTX0RWQlMyLCBRUFNLLCBGRUNfNF81LCAgMHgwMCwgMHgwOCB9LAorIHsgU1lTX0RWQlMyLCBRUFNLLCBGRUNfNV82LCAgMHgwMCwgMHgwOSB9LAorIHsgU1lTX0RWQlMyLCBRUFNLLCBGRUNfOF85LCAgMHgwMCwgMHgwYSB9LAorIHsgU1lTX0RWQlMyLCBRUFNLLCBGRUNfOV8xMCwgMHgwMCwgMHgwYiB9LAorIC8qIDhQU0sgKi8KKyB7IFNZU19EVkJTMiwgUFNLXzgsIEZFQ18zXzUsICAweDAwLCAweDBjIH0sCisgeyBTWVNfRFZCUzIsIFBTS184LCBGRUNfMl8zLCAgMHgwMCwgMHgwZCB9LAorIHsgU1lTX0RWQlMyLCBQU0tfOCwgRkVDXzNfNCwgIDB4MDAsIDB4MGUgfSwKKyB7IFNZU19EVkJTMiwgUFNLXzgsIEZFQ181XzYsICAweDAwLCAweDBmIH0sCisgeyBTWVNfRFZCUzIsIFBTS184LCBGRUNfOF85LCAgMHgwMCwgMHgxMCB9LAorIHsgU1lTX0RWQlMyLCBQU0tfOCwgRkVDXzlfMTAsIDB4MDAsIDB4MTEgfSwKKyAvKgorICAqIGB2YWwnIGNhbiBiZSBmb3VuZCBpbiB0aGUgRkVDU1RBVFVTIHJlZ2lzdGVyIHdoZW4gdHVuaW5nLgorICAqIEZFQ1NUQVRVUyB3aWxsIGdpdmUgdGhlIGFjdHVhbCBGRUMgaW4gdXNlIGlmIHR1bmluZyB3YXMgc3VjY2Vzc2Z1bC4KKyAgKi8KK307CisKK3N0YXRpYyBpbnQgY3gyNDExNl9sb29rdXBfZmVjbW9kKHN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSwKKwlmZV9tb2R1bGF0aW9uX3QgbSwgZmVfY29kZV9yYXRlX3QgZikKK3sKKwlpbnQgaSwgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwlkcHJpbnRrKCIlcygweCUwMngsMHglMDJ4KVxuIiwgX19mdW5jX18sIG0sIGYpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoQ1gyNDExNl9NT0RGRUNfTU9ERVMpOyBpKyspIHsKKwkJaWYgKChtID09IENYMjQxMTZfTU9ERkVDX01PREVTW2ldLm1vZHVsYXRpb24pICYmCisJCQkoZiA9PSBDWDI0MTE2X01PREZFQ19NT0RFU1tpXS5mZWMpKSB7CisJCQkJcmV0ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X2ZlYyhzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUsCisJZmVfbW9kdWxhdGlvbl90IG1vZCwgZmVfY29kZV9yYXRlX3QgZmVjKQoreworCWludCByZXQgPSAwOworCisJZHByaW50aygiJXMoMHglMDJ4LDB4JTAyeClcbiIsIF9fZnVuY19fLCBtb2QsIGZlYyk7CisKKwlyZXQgPSBjeDI0MTE2X2xvb2t1cF9mZWNtb2Qoc3RhdGUsIG1vZCwgZmVjKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc3RhdGUtPmRueHQuZmVjID0gZmVjOworCXN0YXRlLT5kbnh0LmZlY192YWwgPSBDWDI0MTE2X01PREZFQ19NT0RFU1tyZXRdLnZhbDsKKwlzdGF0ZS0+ZG54dC5mZWNfbWFzayA9IENYMjQxMTZfTU9ERkVDX01PREVTW3JldF0ubWFzazsKKwlkcHJpbnRrKCIlcygpIG1hc2svdmFsID0gMHglMDJ4LzB4JTAyeFxuIiwgX19mdW5jX18sCisJCXN0YXRlLT5kbnh0LmZlY19tYXNrLCBzdGF0ZS0+ZG54dC5mZWNfdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X3N5bWJvbHJhdGUoc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLCB1MzIgcmF0ZSkKK3sKKwlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCByYXRlKTsKKworCS8qICBjaGVjayBpZiBzeW1ib2wgcmF0ZSBpcyB3aXRoaW4gbGltaXRzICovCisJaWYgKChyYXRlID4gc3RhdGUtPmZyb250ZW5kLm9wcy5pbmZvLnN5bWJvbF9yYXRlX21heCkgfHwKKwkgICAgKHJhdGUgPCBzdGF0ZS0+ZnJvbnRlbmQub3BzLmluZm8uc3ltYm9sX3JhdGVfbWluKSkgeworCQlkcHJpbnRrKCIlcygpIHVuc3VwcG9ydGVkIHN5bWJvbF9yYXRlID0gJWRcbiIsIF9fZnVuY19fLCByYXRlKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXN0YXRlLT5kbnh0LnN5bWJvbF9yYXRlID0gcmF0ZTsKKwlkcHJpbnRrKCIlcygpIHN5bWJvbF9yYXRlID0gJWRcbiIsIF9fZnVuY19fLCByYXRlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMTZfbG9hZF9maXJtd2FyZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KTsKKworc3RhdGljIGludCBjeDI0MTE2X2Zpcm13YXJlX29uZGVtYW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IHJldCA9IDA7CisKKwlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCAweDIwKSA+IDApIHsKKworCQlpZiAoc3RhdGUtPnNraXBfZndfbG9hZCkKKwkJCXJldHVybiAwOworCisJCS8qIExvYWQgZmlybXdhcmUgKi8KKwkJLyogcmVxdWVzdCB0aGUgZmlybXdhcmUsIHRoaXMgd2lsbCBibG9jayB1bnRpbCBsb2FkZWQgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdhaXRpbmcgZm9yIGZpcm13YXJlIHVwbG9hZCAoJXMpLi4uXG4iLAorCQkJX19mdW5jX18sIENYMjQxMTZfREVGQVVMVF9GSVJNV0FSRSk7CisJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBDWDI0MTE2X0RFRkFVTFRfRklSTVdBUkUsCisJCQkmc3RhdGUtPmkyYy0+ZGV2KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdhaXRpbmcgZm9yIGZpcm13YXJlIHVwbG9hZCgyKS4uLlxuIiwKKwkJCV9fZnVuY19fKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogTm8gZmlybXdhcmUgdXBsb2FkZWQgIgorCQkJCSIodGltZW91dCBvciBmaWxlIG5vdCBmb3VuZD8pXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJLyogTWFrZSBzdXJlIHdlIGRvbid0IHJlY3Vyc2UgYmFjayB0aHJvdWdoIGhlcmUKKwkJICogZHVyaW5nIGxvYWRpbmcgKi8KKwkJc3RhdGUtPnNraXBfZndfbG9hZCA9IDE7CisKKwkJcmV0ID0gY3gyNDExNl9sb2FkX2Zpcm13YXJlKGZlLCBmdyk7CisJCWlmIChyZXQpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXcml0aW5nIGZpcm13YXJlIHRvIGRldmljZSBmYWlsZWRcbiIsCisJCQkJX19mdW5jX18pOworCisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGaXJtd2FyZSB1cGxvYWQgJXNcbiIsIF9fZnVuY19fLAorCQkJcmV0ID09IDAgPyAiY29tcGxldGUiIDogImZhaWxlZCIpOworCisJCS8qIEVuc3VyZSBmaXJtd2FyZSBpcyBhbHdheXMgbG9hZGVkIGlmIHJlcXVpcmVkICovCisJCXN0YXRlLT5za2lwX2Z3X2xvYWQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIFRha2UgYSBiYXNpYyBmaXJtd2FyZSBjb21tYW5kIHN0cnVjdHVyZSwgZm9ybWF0IGl0CisgKiBhbmQgZm9yd2FyZCBpdCBmb3IgcHJvY2Vzc2luZworICovCitzdGF0aWMgaW50IGN4MjQxMTZfY21kX2V4ZWN1dGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBjeDI0MTE2X2NtZCAqY21kKQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCBpLCByZXQ7CisKKwlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBMb2FkIHRoZSBmaXJtd2FyZSBpZiByZXF1aXJlZCAqLworCXJldCA9IGN4MjQxMTZfZmlybXdhcmVfb25kZW1hbmQoZmUpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IFVuYWJsZSBpbml0aWFsaXNlIHRoZSBmaXJtd2FyZVxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBXcml0ZSB0aGUgY29tbWFuZCAqLworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmxlbiA7IGkrKykgeworCQlkcHJpbnRrKCIlczogMHglMDJ4ID09IDB4JTAyeFxuIiwgX19mdW5jX18sIGksIGNtZC0+YXJnc1tpXSk7CisJCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIGksIGNtZC0+YXJnc1tpXSk7CisJfQorCisJLyogU3RhcnQgZXhlY3V0aW9uIGFuZCB3YWl0IGZvciBjbWQgdG8gdGVybWluYXRlICovCisJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfRVhFQ1VURSwgMHgwMSk7CisJd2hpbGUgKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfRVhFQ1VURSkpIHsKKwkJbXNsZWVwKDEwKTsKKwkJaWYgKGkrKyA+IDY0KSB7CisJCQkvKiBBdm9pZCBsb29waW5nIGZvcmV2ZXIgaWYgdGhlIGZpcm13YXJlIGRvZXMKKwkJCQlub3QgcmVzcG9uZCAqLworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMoKSBGaXJtd2FyZSBub3QgcmVzcG9uZGluZ1xuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI0MTE2X2xvYWRfZmlybXdhcmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOworCWludCBpLCByZXQ7CisJdW5zaWduZWQgY2hhciB2ZXJzWzRdOworCisJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKwlkcHJpbnRrKCJGaXJtd2FyZSBpcyAlenUgYnl0ZXMgKCUwMnggJTAyeCAuLiAlMDJ4ICUwMngpXG4iLAorCQkJZnctPnNpemUsCisJCQlmdy0+ZGF0YVswXSwKKwkJCWZ3LT5kYXRhWzFdLAorCQkJZnctPmRhdGFbZnctPnNpemUtMl0sCisJCQlmdy0+ZGF0YVtmdy0+c2l6ZS0xXSk7CisKKwkvKiBUb2dnbGUgODh4IFNSU1QgcGluIHRvIHJlc2V0IGRlbW9kICovCisJaWYgKHN0YXRlLT5jb25maWctPnJlc2V0X2RldmljZSkKKwkJc3RhdGUtPmNvbmZpZy0+cmVzZXRfZGV2aWNlKGZlKTsKKworCS8qIEJlZ2luIHRoZSBmaXJtd2FyZSBsb2FkIHByb2Nlc3MgKi8KKwkvKiBQcmVwYXJlIHRoZSBkZW1vZCwgbG9hZCB0aGUgZmlybXdhcmUsIGNsZWFudXAgYWZ0ZXIgbG9hZCAqLworCisJLyogSW5pdCBQTEwgKi8KKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweEU1LCAweDAwKTsKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweEYxLCAweDA4KTsKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweEYyLCAweDEzKTsKKworCS8qIFN0YXJ0IFBMTCAqLworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIDB4ZTAsIDB4MDMpOworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIDB4ZTAsIDB4MDApOworCisJLyogVW5rbm93biAqLworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0NMS0RJViwgMHg0Nik7CisJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfUkFURURJViwgMHgwMCk7CisKKwkvKiBVbmtub3duICovCisJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgMHhGMCwgMHgwMyk7CisJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgMHhGNCwgMHg4MSk7CisJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgMHhGNSwgMHgwMCk7CisJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgMHhGNiwgMHgwMCk7CisKKwkvKiB3cml0ZSB0aGUgZW50aXJlIGZpcm13YXJlIGFzIG9uZSB0cmFuc2FjdGlvbiAqLworCWN4MjQxMTZfd3JpdGVyZWdOKHN0YXRlLCAweEY3LCBmdy0+ZGF0YSwgZnctPnNpemUpOworCisJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgMHhGNCwgMHgxMCk7CisJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgMHhGMCwgMHgwMCk7CisJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgMHhGOCwgMHgwNik7CisKKwkvKiBGaXJtd2FyZSBDTUQgMTA6IFZDTyBjb25maWcgKi8KKwljbWQuYXJnc1sweDAwXSA9IENNRF9TRVRfVkNPOworCWNtZC5hcmdzWzB4MDFdID0gMHgwNTsKKwljbWQuYXJnc1sweDAyXSA9IDB4ZGM7CisJY21kLmFyZ3NbMHgwM10gPSAweGRhOworCWNtZC5hcmdzWzB4MDRdID0gMHhhZTsKKwljbWQuYXJnc1sweDA1XSA9IDB4YWE7CisJY21kLmFyZ3NbMHgwNl0gPSAweDA0OworCWNtZC5hcmdzWzB4MDddID0gMHg5ZDsKKwljbWQuYXJnc1sweDA4XSA9IDB4ZmM7CisJY21kLmFyZ3NbMHgwOV0gPSAweDA2OworCWNtZC5sZW4gPSAweDBhOworCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1NTVEFUVVMsIDB4MDApOworCisJLyogRmlybXdhcmUgQ01EIDE0OiBUdW5lciBjb25maWcgKi8KKwljbWQuYXJnc1sweDAwXSA9IENNRF9UVU5FUklOSVQ7CisJY21kLmFyZ3NbMHgwMV0gPSAweDAwOworCWNtZC5hcmdzWzB4MDJdID0gMHgwMDsKKwljbWQubGVuID0gMHgwMzsKKwlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweGU1LCAweDAwKTsKKworCS8qIEZpcm13YXJlIENNRCAxMzogTVBFRyBjb25maWcgKi8KKwljbWQuYXJnc1sweDAwXSA9IENNRF9NUEVHQ09ORklHOworCWNtZC5hcmdzWzB4MDFdID0gMHgwMTsKKwljbWQuYXJnc1sweDAyXSA9IDB4NzU7CisJY21kLmFyZ3NbMHgwM10gPSAweDAwOworCWlmIChzdGF0ZS0+Y29uZmlnLT5tcGdfY2xrX3Bvc19wb2wpCisJCWNtZC5hcmdzWzB4MDRdID0gc3RhdGUtPmNvbmZpZy0+bXBnX2Nsa19wb3NfcG9sOworCWVsc2UKKwkJY21kLmFyZ3NbMHgwNF0gPSAweDAyOworCWNtZC5hcmdzWzB4MDVdID0gMHgwMDsKKwljbWQubGVuID0gMHgwNjsKKwlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBGaXJtd2FyZSBDTUQgMzU6IEdldCBmaXJtd2FyZSB2ZXJzaW9uICovCisJY21kLmFyZ3NbMHgwMF0gPSBDTURfVVBERldWRVJTOworCWNtZC5sZW4gPSAweDAyOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJY21kLmFyZ3NbMHgwMV0gPSBpOworCQlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwkJdmVyc1tpXSA9IGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfTUFJTEJPWCk7CisJfQorCXByaW50ayhLRVJOX0lORk8gIiVzOiBGVyB2ZXJzaW9uICVpLiVpLiVpLiVpXG4iLCBfX2Z1bmNfXywKKwkJdmVyc1swXSwgdmVyc1sxXSwgdmVyc1syXSwgdmVyc1szXSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI0MTE2X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3sKKwkvKiBUaGUgaXNsNjQyMSBtb2R1bGUgd2lsbCBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSBmb3BzLiAqLworCWRwcmludGsoIiVzKCkgVGhpcyBzaG91bGQgbmV2ZXIgYXBwZWFyIGlmIHRoZSBpc2w2NDIxIG1vZHVsZSAiCisJCSJpcyBsb2FkZWQgY29ycmVjdGx5XG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDExNl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKK3sKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWludCBsb2NrID0gY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19TU1RBVFVTKTsKKworCWRwcmludGsoIiVzOiBzdGF0dXMgPSAweCUwMnhcbiIsIF9fZnVuY19fLCBsb2NrKTsKKworCSpzdGF0dXMgPSAwOworCisJaWYgKGxvY2sgJiBDWDI0MTE2X0hBU19TSUdOQUwpCisJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKwlpZiAobG9jayAmIENYMjQxMTZfSEFTX0NBUlJJRVIpCisJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CisJaWYgKGxvY2sgJiBDWDI0MTE2X0hBU19WSVRFUkJJKQorCQkqc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJOworCWlmIChsb2NrICYgQ1gyNDExNl9IQVNfU1lOQ0xPQ0spCisJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkMgfCBGRV9IQVNfTE9DSzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOworCisJKmJlciA9ICAoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19CRVIyNCkgPDwgMjQpIHwKKwkJKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfQkVSMTYpIDw8IDE2KSB8CisJCShjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjgpICA8PCA4KSAgfAorCQkgY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19CRVIwKTsKKworCXJldHVybiAwOworfQorCisvKiBUT0RPIERldGVybWluZSBmdW5jdGlvbiBhbmQgc2NhbGUgYXBwcm9wcmlhdGVseSAqLworc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXUxNiAqc2lnbmFsX3N0cmVuZ3RoKQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDI0MTE2X2NtZCBjbWQ7CisJaW50IHJldDsKKwl1MTYgc2lnX3JlYWRpbmc7CisKKwlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBGaXJtd2FyZSBDTUQgMTk6IEdldCBBR0MgKi8KKwljbWQuYXJnc1sweDAwXSA9IENNRF9HRVRBR0M7CisJY21kLmxlbiA9IDB4MDE7CisJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJc2lnX3JlYWRpbmcgPQorCQkoY3gyNDExNl9yZWFkcmVnKHN0YXRlLAorCQkJQ1gyNDExNl9SRUdfU1NUQVRVUykgJiBDWDI0MTE2X1NJR05BTF9NQVNLKSB8CisJCShjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1NJR05BTCkgPDwgNik7CisJKnNpZ25hbF9zdHJlbmd0aCA9IDAgLSBzaWdfcmVhZGluZzsKKworCWRwcmludGsoIiVzOiByYXcgLyBjb29rZWQgPSAweCUwNHggLyAweCUwNHhcbiIsCisJCV9fZnVuY19fLCBzaWdfcmVhZGluZywgKnNpZ25hbF9zdHJlbmd0aCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogU05SICgwLi4xMDApJSA9IChzaWcgJiAweGYwKSAqIDEwICsgKHNpZyAmIDB4MGYpICogMTAgLyAxNiAqLworc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc25yX3BjdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCit7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggc25yX3JlYWRpbmc7CisJc3RhdGljIGNvbnN0IHUzMiBzbnJfdGFiW10gPSB7IC8qIDEwIHggVGFibGUgKHJvdW5kZWQgdXApICovCisJCTB4MDAwMDAsIDB4MDE5OUEsIDB4MDMzMzMsIDB4MDRjY0QsIDB4MDY2NjcsCisJCTB4MDgwMDAsIDB4MDk5OUEsIDB4MGIzMzMsIDB4MGNjY0QsIDB4MGU2NjcsCisJCTB4MTAwMDAsIDB4MTE5OUEsIDB4MTMzMzMsIDB4MTRjY0QsIDB4MTY2NjcsCisJCTB4MTgwMDAgfTsKKworCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKKworCXNucl9yZWFkaW5nID0gY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19RVUFMSVRZMCk7CisKKwlpZiAoc25yX3JlYWRpbmcgPj0gMHhhMCAvKiAxMDAlICovKQorCQkqc25yID0gMHhmZmZmOworCWVsc2UKKwkJKnNuciA9IHNucl90YWJbKHNucl9yZWFkaW5nICYgMHhmMCkgPj4gNF0gKworCQkJKHNucl90YWJbKHNucl9yZWFkaW5nICYgMHgwZildID4+IDQpOworCisJZHByaW50aygiJXM6IHJhdyAvIGNvb2tlZCA9IDB4JTAyeCAvIDB4JTA0eFxuIiwgX19mdW5jX18sCisJCXNucl9yZWFkaW5nLCAqc25yKTsKKworCXJldHVybiAwOworfQorCisvKiBUaGUgcmVlbGJveCBwYXRjaGVzIHNob3cgdGhlIHZhbHVlIGluIHRoZSByZWdpc3RlcnMgcmVwcmVzZW50cworICogRVNOTywgZnJvbSAwLT4zMGRiICh2YWx1ZXMgMC0+MzAwKS4gV2UgcHJvdmlkZSB0aGlzIHZhbHVlIGJ5CisgKiBkZWZhdWx0LgorICovCitzdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zbnJfZXNubyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCit7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwkqc25yID0gY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19RVUFMSVRZOCkgPDwgOCB8CisJCWN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfUVVBTElUWTApOworCisJZHByaW50aygiJXM6IHJhdyAweCUwNHhcbiIsIF9fZnVuY19fLCAqc25yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCWlmIChlc25vX3NuciA9PSAxKQorCQlyZXR1cm4gY3gyNDExNl9yZWFkX3Nucl9lc25vKGZlLCBzbnIpOworCWVsc2UKKwkJcmV0dXJuIGN4MjQxMTZfcmVhZF9zbnJfcGN0KGZlLCBzbnIpOworfQorCitzdGF0aWMgaW50IGN4MjQxMTZfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKK3sKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKKworCSp1Y2Jsb2NrcyA9IChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1VDQjgpIDw8IDgpIHwKKwkJY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19VQ0IwKTsKKworCXJldHVybiAwOworfQorCisvKiBPdmVyd3JpdGUgdGhlIGN1cnJlbnQgdHVuaW5nIHBhcmFtcywgd2UgYXJlIGFib3V0IHRvIHR1bmUgKi8KK3N0YXRpYyB2b2lkIGN4MjQxMTZfY2xvbmVfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCW1lbWNweSgmc3RhdGUtPmRjdXIsICZzdGF0ZS0+ZG54dCwgc2l6ZW9mKHN0YXRlLT5kY3VyKSk7Cit9CisKKy8qIFdhaXQgZm9yIExOQiAqLworc3RhdGljIGludCBjeDI0MTE2X3dhaXRfZm9yX2xuYihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgaTsKKworCWRwcmludGsoIiVzKCkgcXN0YXR1cyA9IDB4JTAyeFxuIiwgX19mdW5jX18sCisJCWN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfUVNUQVRVUykpOworCisJLyogV2FpdCBmb3IgdXAgdG8gMzAwIG1zICovCisJZm9yIChpID0gMDsgaSA8IDMwIDsgaSsrKSB7CisJCWlmIChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1FTVEFUVVMpICYgMHgyMCkKKwkJCXJldHVybiAwOworCQltc2xlZXAoMTApOworCX0KKworCWRwcmludGsoIiVzKCk6IExOQiBub3QgcmVhZHlcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAtRVRJTUVET1VUOyAvKiAtRUJVU1kgPyAqLworfQorCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X3RvbmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCit7CisJc3RydWN0IGN4MjQxMTZfY21kIGNtZDsKKwlpbnQgcmV0OworCisJZHByaW50aygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgdG9uZSk7CisJaWYgKCh0b25lICE9IFNFQ19UT05FX09OKSAmJiAodG9uZSAhPSBTRUNfVE9ORV9PRkYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQsIHRvbmU9JWRcbiIsIF9fZnVuY19fLCB0b25lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogV2FpdCBmb3IgTE5CIHJlYWR5ICovCisJcmV0ID0gY3gyNDExNl93YWl0X2Zvcl9sbmIoZmUpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIE1pbiBkZWxheSB0aW1lIGFmdGVyIERpU0VxQyBzZW5kICovCisJbXNsZWVwKDE1KTsgLyogWFhYIGRldGVybWluZSBpcyBGVyBkb2VzIHRoaXMsIHNlZSBzZW5kX2Rpc2VxYy9idXJzdCAqLworCisJLyogVGhpcyBpcyBhbHdheXMgZG9uZSBiZWZvcmUgdGhlIHRvbmUgaXMgc2V0ICovCisJY21kLmFyZ3NbMHgwMF0gPSBDTURfU0VUX1RPTkVQUkU7CisJY21kLmFyZ3NbMHgwMV0gPSAweDAwOworCWNtZC5sZW4gPSAweDAyOworCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIE5vdyB3ZSBzZXQgdGhlIHRvbmUgKi8KKwljbWQuYXJnc1sweDAwXSA9IENNRF9TRVRfVE9ORTsKKwljbWQuYXJnc1sweDAxXSA9IDB4MDA7CisJY21kLmFyZ3NbMHgwMl0gPSAweDAwOworCisJc3dpdGNoICh0b25lKSB7CisJY2FzZSBTRUNfVE9ORV9PTjoKKwkJZHByaW50aygiJXM6IHNldHRpbmcgdG9uZSBvblxuIiwgX19mdW5jX18pOworCQljbWQuYXJnc1sweDAzXSA9IDB4MDE7CisJCWJyZWFrOworCWNhc2UgU0VDX1RPTkVfT0ZGOgorCQlkcHJpbnRrKCIlczogc2V0dGluZyB0b25lIG9mZlxuIiwgX19mdW5jX18pOworCQljbWQuYXJnc1sweDAzXSA9IDB4MDA7CisJCWJyZWFrOworCX0KKwljbWQubGVuID0gMHgwNDsKKworCS8qIE1pbiBkZWxheSB0aW1lIGJlZm9yZSBEaVNFcUMgc2VuZCAqLworCW1zbGVlcCgxNSk7IC8qIFhYWCBkZXRlcm1pbmUgaXMgRlcgZG9lcyB0aGlzLCBzZWUgc2VuZF9kaXNlcWMvYnVyc3QgKi8KKworCXJldHVybiBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKK30KKworLyogSW5pdGlhbGlzZSBEaVNFcUMgKi8KK3N0YXRpYyBpbnQgY3gyNDExNl9kaXNlcWNfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOworCWludCByZXQ7CisKKwkvKiBGaXJtd2FyZSBDTUQgMjA6IExOQi9EaVNFcUMgY29uZmlnICovCisJY21kLmFyZ3NbMHgwMF0gPSBDTURfTE5CQ09ORklHOworCWNtZC5hcmdzWzB4MDFdID0gMHgwMDsKKwljbWQuYXJnc1sweDAyXSA9IDB4MTA7CisJY21kLmFyZ3NbMHgwM10gPSAweDAwOworCWNtZC5hcmdzWzB4MDRdID0gMHg4ZjsKKwljbWQuYXJnc1sweDA1XSA9IDB4Mjg7CisJY21kLmFyZ3NbMHgwNl0gPSAodG9uZWJ1cnN0ID09IENYMjQxMTZfRElTRVFDX1RPTkVPRkYpID8gMHgwMCA6IDB4MDE7CisJY21kLmFyZ3NbMHgwN10gPSAweDAxOworCWNtZC5sZW4gPSAweDA4OworCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFByZXBhcmUgYSBEaVNFcUMgY29tbWFuZCAqLworCXN0YXRlLT5kc2VjX2NtZC5hcmdzWzB4MDBdID0gQ01EX0xOQlNFTkQ7CisKKwkvKiBEaVNFcUMgYnVyc3QgKi8KKwlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0gID0gQ1gyNDExNl9ESVNFUUNfTUlOSV9BOworCisJLyogVW5rbm93biAqLworCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0FSRzJfMl0gPSAweDAyOworCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0FSRzNfMF0gPSAweDAwOworCS8qIENvbnRpbnVhdGlvbiBmbGFnPyAqLworCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0FSRzRfMF0gPSAweDAwOworCisJLyogRGlTRXFDIG1lc3NhZ2UgbGVuZ3RoICovCisJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfTVNHTEVOXSA9IDB4MDA7CisKKwkvKiBDb21tYW5kIGxlbmd0aCAqLworCXN0YXRlLT5kc2VjX2NtZC5sZW4gPSBDWDI0MTE2X0RJU0VRQ19NU0dPRlM7CisKKwlyZXR1cm4gMDsKK30KKworLyogU2VuZCBEaVNFcUMgbWVzc2FnZSB3aXRoIGRlcml2ZWQgYnVyc3QgKGhhY2spIHx8IHByZXZpb3VzIGJ1cnN0ICovCitzdGF0aWMgaW50IGN4MjQxMTZfc2VuZF9kaXNlcWNfbXNnKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmQpCit7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IGksIHJldDsKKworCS8qIER1bXAgRGlTRXFDIG1lc3NhZ2UgKi8KKwlpZiAoZGVidWcpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY3gyNDExNjogJXMoIiwgX19mdW5jX18pOworCQlmb3IgKGkgPSAwIDsgaSA8IGQtPm1zZ19sZW4gOykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiMHglMDJ4IiwgZC0+bXNnW2ldKTsKKwkJCWlmICgrK2kgPCBkLT5tc2dfbGVuKQorCQkJCXByaW50ayhLRVJOX0lORk8gIiwgIik7CisJCX0KKwkJcHJpbnRrKCIpIHRvbmVidXJzdD0lZFxuIiwgdG9uZWJ1cnN0KTsKKwl9CisKKwkvKiBWYWxpZGF0ZSBsZW5ndGggKi8KKwlpZiAoZC0+bXNnX2xlbiA+IChDWDI0MTE2X0FSR0xFTiAtIENYMjQxMTZfRElTRVFDX01TR09GUykpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogRGlTRXFDIG1lc3NhZ2UgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZC0+bXNnX2xlbjsgaSsrKQorCQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19NU0dPRlMgKyBpXSA9IGQtPm1zZ1tpXTsKKworCS8qIERpU0VxQyBtZXNzYWdlIGxlbmd0aCAqLworCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR0xFTl0gPSBkLT5tc2dfbGVuOworCisJLyogQ29tbWFuZCBsZW5ndGggKi8KKwlzdGF0ZS0+ZHNlY19jbWQubGVuID0gQ1gyNDExNl9ESVNFUUNfTVNHT0ZTICsKKwkJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfTVNHTEVOXTsKKworCS8qIERpU0VxQyB0b25lYnVyc3QgKi8KKwlpZiAodG9uZWJ1cnN0ID09IENYMjQxMTZfRElTRVFDX01FU0dDQUNIRSkKKwkJLyogTWVzc2FnZSBpcyBjYWNoZWQgKi8KKwkJcmV0dXJuIDA7CisKKwllbHNlIGlmICh0b25lYnVyc3QgPT0gQ1gyNDExNl9ESVNFUUNfVE9ORU9GRikKKwkJLyogTWVzc2FnZSBpcyBzZW50IHdpdGhvdXQgYnVyc3QgKi8KKwkJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQlVSU1RdID0gMDsKKworCWVsc2UgaWYgKHRvbmVidXJzdCA9PSBDWDI0MTE2X0RJU0VRQ19UT05FQ0FDSEUpIHsKKwkJLyoKKwkJICogTWVzc2FnZSBpcyBzZW50IHdpdGggZGVyaXZlZCBlbHNlIGNhY2hlZCBidXJzdAorCQkgKgorCQkgKiBXUklURSBQT1JUIEdST1VQIENPTU1BTkQgMzgKKwkJICoKKwkJICogMC9BL0E6IEUwIDEwIDM4IEYwLi5GMworCQkgKiAxL0IvQjogRTAgMTAgMzggRjQuLkY3CisJCSAqIDIvQy9BOiBFMCAxMCAzOCBGOC4uRkIKKwkJICogMy9EL0I6IEUwIDEwIDM4IEZDLi5GRgorCQkgKgorCQkgKiBkYXRhYnl0ZVszXT0gODQyMTo4NDIxCisJCSAqICAgICAgICAgICAgICBBQkNEOldYWVoKKwkJICogICAgICAgICAgICAgIENMUiA6U0VUCisJCSAqCisJCSAqICAgICAgICAgICAgICBXWD0gUE9SVCBTRUxFQ1QgMC4uMyAgICAoWD1UT05FQlVSU1QpCisJCSAqICAgICAgICAgICAgICBZID0gVk9MVEFHRSAgICAgICAgICAgICAoMD0xM1YsIDE9MThWKQorCQkgKiAgICAgICAgICAgICAgWiA9IEJBTkQgICAgICAgICAgICAgICAgKDA9TE9XLCAxPUhJR0goMjJLKSkKKwkJICovCisJCWlmIChkLT5tc2dfbGVuID49IDQgJiYgZC0+bXNnWzJdID09IDB4MzgpCisJCQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0gPQorCQkJCSgoZC0+bXNnWzNdICYgNCkgPj4gMik7CisJCWlmIChkZWJ1ZykKKwkJCWRwcmludGsoIiVzIGJ1cnN0PSVkXG4iLCBfX2Z1bmNfXywKKwkJCQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0pOworCX0KKworCS8qIFdhaXQgZm9yIExOQiByZWFkeSAqLworCXJldCA9IGN4MjQxMTZfd2FpdF9mb3JfbG5iKGZlKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBXYWl0IGZvciB2b2x0YWdlL21pbiByZXBlYXQgZGVsYXkgKi8KKwltc2xlZXAoMTAwKTsKKworCS8qIENvbW1hbmQgKi8KKwlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmc3RhdGUtPmRzZWNfY21kKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisJLyoKKwkgKiBXYWl0IGZvciBzZW5kCisJICoKKwkgKiBFdXRlbHNhdCBzcGVjOgorCSAqID4xNW1zIGRlbGF5ICAgICAgICAgICsgKFhYWCBkZXRlcm1pbmUgaWYgRlcgZG9lcyB0aGlzLCBzZWUgc2V0X3RvbmUpCisJICogIDEzLjVtcyBwZXIgYnl0ZSAgICAgKworCSAqID4xNW1zIGRlbGF5ICAgICAgICAgICsKKwkgKiAgMTIuNW1zIGJ1cnN0ICAgICAgICArCisJICogPjE1bXMgZGVsYXkgICAgICAgICAgICAoWFhYIGRldGVybWluZSBpZiBGVyBkb2VzIHRoaXMsIHNlZSBzZXRfdG9uZSkKKwkgKi8KKwltc2xlZXAoKHN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR0xFTl0gPDwgNCkgKworCQkoKHRvbmVidXJzdCA9PSBDWDI0MTE2X0RJU0VRQ19UT05FT0ZGKSA/IDMwIDogNjApKTsKKworCXJldHVybiAwOworfQorCisvKiBTZW5kIERpU0VxQyBidXJzdCAqLworc3RhdGljIGludCBjeDI0MTE2X2Rpc2VxY19zZW5kX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWZlX3NlY19taW5pX2NtZF90IGJ1cnN0KQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByZXQ7CisKKwlkcHJpbnRrKCIlcyglZCkgdG9uZWJ1cnN0PSVkXG4iLCBfX2Z1bmNfXywgYnVyc3QsIHRvbmVidXJzdCk7CisKKwkvKiBEaVNFcUMgYnVyc3QgKi8KKwlpZiAoYnVyc3QgPT0gU0VDX01JTklfQSkKKwkJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQlVSU1RdID0KKwkJCUNYMjQxMTZfRElTRVFDX01JTklfQTsKKwllbHNlIGlmIChidXJzdCA9PSBTRUNfTUlOSV9CKQorCQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0gPQorCQkJQ1gyNDExNl9ESVNFUUNfTUlOSV9COworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBEaVNFcUMgdG9uZWJ1cnN0ICovCisJaWYgKHRvbmVidXJzdCAhPSBDWDI0MTE2X0RJU0VRQ19NRVNHQ0FDSEUpCisJCS8qIEJ1cnN0IGlzIGNhY2hlZCAqLworCQlyZXR1cm4gMDsKKworCS8qIEJ1cnN0IGlzIHRvIGJlIHNlbnQgd2l0aCBjYWNoZWQgbWVzc2FnZSAqLworCisJLyogV2FpdCBmb3IgTE5CIHJlYWR5ICovCisJcmV0ID0gY3gyNDExNl93YWl0X2Zvcl9sbmIoZmUpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFdhaXQgZm9yIHZvbHRhZ2UvbWluIHJlcGVhdCBkZWxheSAqLworCW1zbGVlcCgxMDApOworCisJLyogQ29tbWFuZCAqLworCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZzdGF0ZS0+ZHNlY19jbWQpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogV2FpdCBmb3Igc2VuZAorCSAqCisJICogRXV0ZWxzYXQgc3BlYzoKKwkgKiA+MTVtcyBkZWxheSAgICAgICAgICArIChYWFggZGV0ZXJtaW5lIGlmIEZXIGRvZXMgdGhpcywgc2VlIHNldF90b25lKQorCSAqICAxMy41bXMgcGVyIGJ5dGUgICAgICsKKwkgKiA+MTVtcyBkZWxheSAgICAgICAgICArCisJICogIDEyLjVtcyBidXJzdCAgICAgICAgKworCSAqID4xNW1zIGRlbGF5ICAgICAgICAgICAgKFhYWCBkZXRlcm1pbmUgaWYgRlcgZG9lcyB0aGlzLCBzZWUgc2V0X3RvbmUpCisJICovCisJbXNsZWVwKChzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19NU0dMRU5dIDw8IDQpICsgNjApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjQxMTZfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCWtmcmVlKHN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGN4MjQxMTZfb3BzOworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDI0MTE2X2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyNDExNl9jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCWludCByZXQ7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KKwlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDI0MTE2X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCWdvdG8gZXJyb3IxOworCisJLyogc2V0dXAgdGhlIHN0YXRlICovCisJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2Yoc3RydWN0IGN4MjQxMTZfc3RhdGUpKTsKKworCXN0YXRlLT5jb25maWcgPSBjb25maWc7CisJc3RhdGUtPmkyYyA9IGkyYzsKKworCS8qIGNoZWNrIGlmIHRoZSBkZW1vZCBpcyBwcmVzZW50ICovCisJcmV0ID0gKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgMHhGRikgPDwgOCkgfAorCQljeDI0MTE2X3JlYWRyZWcoc3RhdGUsIDB4RkUpOworCWlmIChyZXQgIT0gMHgwNTAxKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkludmFsaWQgcHJvYmUsIHByb2JhYmx5IG5vdCBhIENYMjQxMTYgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJvcjI7CisJfQorCisJLyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmN4MjQxMTZfb3BzLAorCQlzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOworCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOworCitlcnJvcjI6IGtmcmVlKHN0YXRlKTsKK2Vycm9yMTogcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKGN4MjQxMTZfYXR0YWNoKTsKKworLyoKKyAqIEluaXRpYWxpc2Ugb3Igd2FrZSB1cCBkZXZpY2UKKyAqCisgKiBQb3dlciBjb25maWcgd2lsbCByZXNldCBhbmQgbG9hZCBpbml0aWFsIGZpcm13YXJlIGlmIHJlcXVpcmVkCisgKi8KK3N0YXRpYyBpbnQgY3gyNDExNl9pbml0ZmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjQxMTZfY21kIGNtZDsKKwlpbnQgcmV0OworCisJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOworCisJLyogUG93ZXIgb24gKi8KKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweGUwLCAwKTsKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweGUxLCAwKTsKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweGVhLCAwKTsKKworCS8qIEZpcm13YXJlIENNRCAzNjogUG93ZXIgY29uZmlnICovCisJY21kLmFyZ3NbMHgwMF0gPSBDTURfVFVORVJTTEVFUDsKKwljbWQuYXJnc1sweDAxXSA9IDA7CisJY21kLmxlbiA9IDB4MDI7CisJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGN4MjQxMTZfZGlzZXFjX2luaXQoZmUpOworfQorCisvKgorICogUHV0IGRldmljZSB0byBzbGVlcAorICovCitzdGF0aWMgaW50IGN4MjQxMTZfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjQxMTZfY21kIGNtZDsKKwlpbnQgcmV0OworCisJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOworCisJLyogRmlybXdhcmUgQ01EIDM2OiBQb3dlciBjb25maWcgKi8KKwljbWQuYXJnc1sweDAwXSA9IENNRF9UVU5FUlNMRUVQOworCWNtZC5hcmdzWzB4MDFdID0gMTsKKwljbWQubGVuID0gMHgwMjsKKwlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBQb3dlciBvZmYgKFNodXRkb3duIGNsb2NrcykgKi8KKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweGVhLCAweGZmKTsKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweGUxLCAxKTsKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweGUwLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdHZfcHJvcGVydHkgKnR2cCkKK3sKKwlkcHJpbnRrKCIlcyguLilcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI0MTE2X2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHR2X3Byb3BlcnR5ICp0dnApCit7CisJZHByaW50aygiJXMoLi4pXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGR2Yi1jb3JlIHRvbGQgdXMgdG8gdHVuZSwgdGhlIHR2IHByb3BlcnR5IGNhY2hlIHdpbGwgYmUgY29tcGxldGUsCisgKiBpdCdzIHNhZmUgZm9yIGlzIHRvIHB1bGwgdmFsdWVzIGFuZCB1c2UgdGhlbSBmb3IgdHVuaW5nIHB1cnBvc2VzLgorICovCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKKwlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOworCWZlX3N0YXR1c190IHR1bmVyc3RhdDsKKwlpbnQgaSwgc3RhdHVzLCByZXQsIHJldHVuZTsKKworCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoYy0+ZGVsaXZlcnlfc3lzdGVtKSB7CisJY2FzZSBTWVNfRFZCUzoKKwkJZHByaW50aygiJXM6IERWQi1TIGRlbGl2ZXJ5IHN5c3RlbSBzZWxlY3RlZFxuIiwgX19mdW5jX18pOworCisJCS8qIE9ubHkgUVBTSyBpcyBzdXBwb3J0ZWQgZm9yIERWQi1TICovCisJCWlmIChjLT5tb2R1bGF0aW9uICE9IFFQU0spIHsKKwkJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCBtb2R1bGF0aW9uIHNlbGVjdGVkICglZClcbiIsCisJCQkJX19mdW5jX18sIGMtPm1vZHVsYXRpb24pOworCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQl9CisKKwkJLyogUGlsb3QgZG9lc24ndCBleGlzdCBpbiBEVkItUywgdHVybiBiaXQgb2ZmICovCisJCXN0YXRlLT5kbnh0LnBpbG90X3ZhbCA9IENYMjQxMTZfUElMT1RfT0ZGOworCQlyZXR1bmUgPSAxOworCisJCS8qIERWQi1TIG9ubHkgc3VwcG9ydHMgMC4zNSAqLworCQlpZiAoYy0+cm9sbG9mZiAhPSBST0xMT0ZGXzM1KSB7CisJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgcm9sbG9mZiBzZWxlY3RlZCAoJWQpXG4iLAorCQkJCV9fZnVuY19fLCBjLT5yb2xsb2ZmKTsKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCQlzdGF0ZS0+ZG54dC5yb2xsb2ZmX3ZhbCA9IENYMjQxMTZfUk9MTE9GRl8wMzU7CisJCWJyZWFrOworCisJY2FzZSBTWVNfRFZCUzI6CisJCWRwcmludGsoIiVzOiBEVkItUzIgZGVsaXZlcnkgc3lzdGVtIHNlbGVjdGVkXG4iLCBfX2Z1bmNfXyk7CisKKwkJLyoKKwkJICogTkJDIDhQU0svUVBTSyB3aXRoIERWQi1TIGlzIHN1cHBvcnRlZCBmb3IgRFZCLVMyLAorCQkgKiBidXQgbm90IGhhcmR3YXJlIGF1dG8gZGV0ZWN0aW9uCisJCSAqLworCQlpZiAoYy0+bW9kdWxhdGlvbiAhPSBQU0tfOCAmJiBjLT5tb2R1bGF0aW9uICE9IFFQU0spIHsKKwkJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCBtb2R1bGF0aW9uIHNlbGVjdGVkICglZClcbiIsCisJCQkJX19mdW5jX18sIGMtPm1vZHVsYXRpb24pOworCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQl9CisKKwkJc3dpdGNoIChjLT5waWxvdCkgeworCQljYXNlIFBJTE9UX0FVVE86CS8qIE5vdCBzdXBwb3J0ZWQgYnV0IGVtdWxhdGVkICovCisJCQlzdGF0ZS0+ZG54dC5waWxvdF92YWwgPSAoYy0+bW9kdWxhdGlvbiA9PSBRUFNLKQorCQkJCT8gQ1gyNDExNl9QSUxPVF9PRkYgOiBDWDI0MTE2X1BJTE9UX09OOworCQkJcmV0dW5lID0gMjsKKwkJCWJyZWFrOworCQljYXNlIFBJTE9UX09GRjoKKwkJCXN0YXRlLT5kbnh0LnBpbG90X3ZhbCA9IENYMjQxMTZfUElMT1RfT0ZGOworCQkJYnJlYWs7CisJCWNhc2UgUElMT1RfT046CisJCQlzdGF0ZS0+ZG54dC5waWxvdF92YWwgPSBDWDI0MTE2X1BJTE9UX09OOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgcGlsb3QgbW9kZSBzZWxlY3RlZCAoJWQpXG4iLAorCQkJCV9fZnVuY19fLCBjLT5waWxvdCk7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KKworCQlzd2l0Y2ggKGMtPnJvbGxvZmYpIHsKKwkJY2FzZSBST0xMT0ZGXzIwOgorCQkJc3RhdGUtPmRueHQucm9sbG9mZl92YWwgPSBDWDI0MTE2X1JPTExPRkZfMDIwOworCQkJYnJlYWs7CisJCWNhc2UgUk9MTE9GRl8yNToKKwkJCXN0YXRlLT5kbnh0LnJvbGxvZmZfdmFsID0gQ1gyNDExNl9ST0xMT0ZGXzAyNTsKKwkJCWJyZWFrOworCQljYXNlIFJPTExPRkZfMzU6CisJCQlzdGF0ZS0+ZG54dC5yb2xsb2ZmX3ZhbCA9IENYMjQxMTZfUk9MTE9GRl8wMzU7CisJCQlicmVhazsKKwkJY2FzZSBST0xMT0ZGX0FVVE86CS8qIFJvbGxvZmYgbXVzdCBiZSBleHBsaWNpdCAqLworCQlkZWZhdWx0OgorCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIHJvbGxvZmYgc2VsZWN0ZWQgKCVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgYy0+cm9sbG9mZik7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgZGVsaXZlcnkgc3lzdGVtIHNlbGVjdGVkICglZClcbiIsCisJCQlfX2Z1bmNfXywgYy0+ZGVsaXZlcnlfc3lzdGVtKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwlzdGF0ZS0+ZG54dC5tb2R1bGF0aW9uID0gYy0+bW9kdWxhdGlvbjsKKwlzdGF0ZS0+ZG54dC5mcmVxdWVuY3kgPSBjLT5mcmVxdWVuY3k7CisJc3RhdGUtPmRueHQucGlsb3QgPSBjLT5waWxvdDsKKwlzdGF0ZS0+ZG54dC5yb2xsb2ZmID0gYy0+cm9sbG9mZjsKKworCXJldCA9IGN4MjQxMTZfc2V0X2ludmVyc2lvbihzdGF0ZSwgYy0+aW52ZXJzaW9uKTsKKwlpZiAocmV0ICE9ICAwKQorCQlyZXR1cm4gcmV0OworCisJLyogRkVDX05PTkUvQVVUTyBmb3IgRFZCLVMyIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGRldGVjdGVkIGhlcmUgKi8KKwlyZXQgPSBjeDI0MTE2X3NldF9mZWMoc3RhdGUsIGMtPm1vZHVsYXRpb24sIGMtPmZlY19pbm5lcik7CisJaWYgKHJldCAhPSAgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGN4MjQxMTZfc2V0X3N5bWJvbHJhdGUoc3RhdGUsIGMtPnN5bWJvbF9yYXRlKTsKKwlpZiAocmV0ICE9ICAwKQorCQlyZXR1cm4gcmV0OworCisJLyogZGlzY2FyZCB0aGUgJ2N1cnJlbnQnIHR1bmluZyBwYXJhbWV0ZXJzIGFuZCBwcmVwYXJlIHRvIHR1bmUgKi8KKwljeDI0MTE2X2Nsb25lX3BhcmFtcyhmZSk7CisKKwlkcHJpbnRrKCIlczogICBtb2R1bGF0aW9uICA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdGUtPmRjdXIubW9kdWxhdGlvbik7CisJZHByaW50aygiJXM6ICAgZnJlcXVlbmN5ICAgPSAlZFxuIiwgX19mdW5jX18sIHN0YXRlLT5kY3VyLmZyZXF1ZW5jeSk7CisJZHByaW50aygiJXM6ICAgcGlsb3QgICAgICAgPSAlZCAodmFsID0gMHglMDJ4KVxuIiwgX19mdW5jX18sCisJCXN0YXRlLT5kY3VyLnBpbG90LCBzdGF0ZS0+ZGN1ci5waWxvdF92YWwpOworCWRwcmludGsoIiVzOiAgIHJldHVuZSAgICAgID0gJWRcbiIsIF9fZnVuY19fLCByZXR1bmUpOworCWRwcmludGsoIiVzOiAgIHJvbGxvZmYgICAgID0gJWQgKHZhbCA9IDB4JTAyeClcbiIsIF9fZnVuY19fLAorCQlzdGF0ZS0+ZGN1ci5yb2xsb2ZmLCBzdGF0ZS0+ZGN1ci5yb2xsb2ZmX3ZhbCk7CisJZHByaW50aygiJXM6ICAgc3ltYm9sX3JhdGUgPSAlZFxuIiwgX19mdW5jX18sIHN0YXRlLT5kY3VyLnN5bWJvbF9yYXRlKTsKKwlkcHJpbnRrKCIlczogICBGRUMgICAgICAgICA9ICVkIChtYXNrL3ZhbCA9IDB4JTAyeC8weCUwMngpXG4iLCBfX2Z1bmNfXywKKwkJc3RhdGUtPmRjdXIuZmVjLCBzdGF0ZS0+ZGN1ci5mZWNfbWFzaywgc3RhdGUtPmRjdXIuZmVjX3ZhbCk7CisJZHByaW50aygiJXM6ICAgSW52ZXJzaW9uICAgPSAlZCAodmFsID0gMHglMDJ4KVxuIiwgX19mdW5jX18sCisJCXN0YXRlLT5kY3VyLmludmVyc2lvbiwgc3RhdGUtPmRjdXIuaW52ZXJzaW9uX3ZhbCk7CisKKwkvKiBUaGlzIGlzIGFsc28gZG9uZSBpbiBhZHZpc2UvYWNxdWlyZSBvbiBIVlI0MDAwIGJ1dCBub3Qgb24gTElURSAqLworCWlmIChzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKQorCQlzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKGZlLCAwKTsKKworCS8qIFNldC9SZXNldCBCL1cgKi8KKwljbWQuYXJnc1sweDAwXSA9IENNRF9CQU5EV0lEVEg7CisJY21kLmFyZ3NbMHgwMV0gPSAweDAxOworCWNtZC5sZW4gPSAweDAyOworCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFByZXBhcmUgYSB0dW5lIHJlcXVlc3QgKi8KKwljbWQuYXJnc1sweDAwXSA9IENNRF9UVU5FUkVRVUVTVDsKKworCS8qIEZyZXF1ZW5jeSAqLworCWNtZC5hcmdzWzB4MDFdID0gKHN0YXRlLT5kY3VyLmZyZXF1ZW5jeSAmIDB4ZmYwMDAwKSA+PiAxNjsKKwljbWQuYXJnc1sweDAyXSA9IChzdGF0ZS0+ZGN1ci5mcmVxdWVuY3kgJiAweDAwZmYwMCkgPj4gODsKKwljbWQuYXJnc1sweDAzXSA9IChzdGF0ZS0+ZGN1ci5mcmVxdWVuY3kgJiAweDAwMDBmZik7CisKKwkvKiBTeW1ib2wgUmF0ZSAqLworCWNtZC5hcmdzWzB4MDRdID0gKChzdGF0ZS0+ZGN1ci5zeW1ib2xfcmF0ZSAvIDEwMDApICYgMHhmZjAwKSA+PiA4OworCWNtZC5hcmdzWzB4MDVdID0gKChzdGF0ZS0+ZGN1ci5zeW1ib2xfcmF0ZSAvIDEwMDApICYgMHgwMGZmKTsKKworCS8qIEF1dG9tYXRpYyBJbnZlcnNpb24gKi8KKwljbWQuYXJnc1sweDA2XSA9IHN0YXRlLT5kY3VyLmludmVyc2lvbl92YWw7CisKKwkvKiBNb2R1bGF0aW9uIC8gRkVDIC8gUGlsb3QgKi8KKwljbWQuYXJnc1sweDA3XSA9IHN0YXRlLT5kY3VyLmZlY192YWwgfCBzdGF0ZS0+ZGN1ci5waWxvdF92YWw7CisKKwljbWQuYXJnc1sweDA4XSA9IENYMjQxMTZfU0VBUkNIX1JBTkdFX0tIWiA+PiA4OworCWNtZC5hcmdzWzB4MDldID0gQ1gyNDExNl9TRUFSQ0hfUkFOR0VfS0haICYgMHhmZjsKKwljbWQuYXJnc1sweDBhXSA9IDB4MDA7CisJY21kLmFyZ3NbMHgwYl0gPSAweDAwOworCWNtZC5hcmdzWzB4MGNdID0gc3RhdGUtPmRjdXIucm9sbG9mZl92YWw7CisJY21kLmFyZ3NbMHgwZF0gPSBzdGF0ZS0+ZGN1ci5mZWNfbWFzazsKKworCWlmIChzdGF0ZS0+ZGN1ci5zeW1ib2xfcmF0ZSA+IDMwMDAwMDAwKSB7CisJCWNtZC5hcmdzWzB4MGVdID0gMHgwNDsKKwkJY21kLmFyZ3NbMHgwZl0gPSAweDAwOworCQljbWQuYXJnc1sweDEwXSA9IDB4MDE7CisJCWNtZC5hcmdzWzB4MTFdID0gMHg3NzsKKwkJY21kLmFyZ3NbMHgxMl0gPSAweDM2OworCQljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19DTEtESVYsIDB4NDQpOworCQljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19SQVRFRElWLCAweDAxKTsKKwl9IGVsc2UgeworCQljbWQuYXJnc1sweDBlXSA9IDB4MDY7CisJCWNtZC5hcmdzWzB4MGZdID0gMHgwMDsKKwkJY21kLmFyZ3NbMHgxMF0gPSAweDAwOworCQljbWQuYXJnc1sweDExXSA9IDB4RkE7CisJCWNtZC5hcmdzWzB4MTJdID0gMHgyNDsKKwkJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfQ0xLRElWLCAweDQ2KTsKKwkJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfUkFURURJViwgMHgwMCk7CisJfQorCisJY21kLmxlbiA9IDB4MTM7CisKKwkvKiBXZSBuZWVkIHRvIHN1cHBvcnQgcGlsb3QgYW5kIG5vbi1waWxvdCB0dW5pbmcgaW4gdGhlCisJICogZHJpdmVyIGF1dG9tYXRpY2FsbHkuIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBiZWNhdXNlCisJICogdGhlIGRlbW9kIGRvZXMgbm90IHN1cHBvcnQgYXV0b2RldGVjdC4KKwkgKi8KKwlkbyB7CisJCS8qIFJlc2V0IHN0YXR1cyByZWdpc3RlciAqLworCQlzdGF0dXMgPSBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1NTVEFUVVMpCisJCQkmIENYMjQxMTZfU0lHTkFMX01BU0s7CisJCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1NTVEFUVVMsIHN0YXR1cyk7CisKKwkJLyogVHVuZSAqLworCQlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogV2FpdCBmb3IgdXAgdG8gNTAwIG1zIGJlZm9yZSByZXRyeWluZworCQkgKgorCQkgKiBJZiB3ZSBhcmUgYWJsZSB0byB0dW5lIHRoZW4gZ2VuZXJhbGx5IGl0IG9jY3VycyB3aXRoaW4gMTAwbXMuCisJCSAqIElmIGl0IHRha2VzIGxvbmdlciwgdHJ5IGEgZGlmZmVyZW50IHRvbmVidXJzdCBzZXR0aW5nLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IDUwIDsgaSsrKSB7CisJCQljeDI0MTE2X3JlYWRfc3RhdHVzKGZlLCAmdHVuZXJzdGF0KTsKKwkJCXN0YXR1cyA9IHR1bmVyc3RhdCAmIChGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX1NZTkMpOworCQkJaWYgKHN0YXR1cyA9PSAoRkVfSEFTX1NJR05BTCB8IEZFX0hBU19TWU5DKSkgeworCQkJCWRwcmludGsoIiVzOiBUdW5lZFxuIiwgX19mdW5jX18pOworCQkJCWdvdG8gdHVuZWQ7CisJCQl9CisJCQltc2xlZXAoMTApOworCQl9CisKKwkJZHByaW50aygiJXM6IE5vdCB0dW5lZFxuIiwgX19mdW5jX18pOworCisJCS8qIFRvZ2dsZSBwaWxvdCBiaXQgd2hlbiBpbiBhdXRvLXBpbG90ICovCisJCWlmIChzdGF0ZS0+ZGN1ci5waWxvdCA9PSBQSUxPVF9BVVRPKQorCQkJY21kLmFyZ3NbMHgwN10gXj0gQ1gyNDExNl9QSUxPVF9PTjsKKwl9IHdoaWxlICgtLXJldHVuZSk7CisKK3R1bmVkOiAgLyogU2V0L1Jlc2V0IEIvVyAqLworCWNtZC5hcmdzWzB4MDBdID0gQ01EX0JBTkRXSURUSDsKKwljbWQuYXJnc1sweDAxXSA9IDB4MDA7CisJY21kLmxlbiA9IDB4MDI7CisJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGN4MjQxMTZfb3BzID0geworCisJLmluZm8gPSB7CisJCS5uYW1lID0gIkNvbmV4YW50IENYMjQxMTYvQ1gyNDExOCIsCisJCS50eXBlID0gRkVfUVBTSywKKwkJLmZyZXF1ZW5jeV9taW4gPSA5NTAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ID0gMjE1MDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZSA9IDEwMTEsIC8qIGtIeiBmb3IgUVBTSyBmcm9udGVuZHMgKi8KKwkJLmZyZXF1ZW5jeV90b2xlcmFuY2UgPSA1MDAwLAorCQkuc3ltYm9sX3JhdGVfbWluID0gMTAwMDAwMCwKKwkJLnN5bWJvbF9yYXRlX21heCA9IDQ1MDAwMDAwLAorCQkuY2FwcyA9IEZFX0NBTl9JTlZFUlNJT05fQVVUTyB8CisJCQlGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAorCQkJRkVfQ0FOX0ZFQ180XzUgfCBGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfNl83IHwKKwkJCUZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX0ZFQ19BVVRPIHwKKwkJCUZFX0NBTl9RUFNLIHwgRkVfQ0FOX1JFQ09WRVIKKwl9LAorCisJLnJlbGVhc2UgPSBjeDI0MTE2X3JlbGVhc2UsCisKKwkuaW5pdCA9IGN4MjQxMTZfaW5pdGZlLAorCS5zbGVlcCA9IGN4MjQxMTZfc2xlZXAsCisJLnJlYWRfc3RhdHVzID0gY3gyNDExNl9yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIgPSBjeDI0MTE2X3JlYWRfYmVyLAorCS5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9IGN4MjQxMTZfcmVhZF9zaWduYWxfc3RyZW5ndGgsCisJLnJlYWRfc25yID0gY3gyNDExNl9yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2NrcyA9IGN4MjQxMTZfcmVhZF91Y2Jsb2NrcywKKwkuc2V0X3RvbmUgPSBjeDI0MTE2X3NldF90b25lLAorCS5zZXRfdm9sdGFnZSA9IGN4MjQxMTZfc2V0X3ZvbHRhZ2UsCisJLmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSBjeDI0MTE2X3NlbmRfZGlzZXFjX21zZywKKwkuZGlzZXFjX3NlbmRfYnVyc3QgPSBjeDI0MTE2X2Rpc2VxY19zZW5kX2J1cnN0LAorCisJLnNldF9wcm9wZXJ0eSA9IGN4MjQxMTZfc2V0X3Byb3BlcnR5LAorCS5nZXRfcHJvcGVydHkgPSBjeDI0MTE2X2dldF9wcm9wZXJ0eSwKKwkuc2V0X2Zyb250ZW5kID0gY3gyNDExNl9zZXRfZnJvbnRlbmQsCit9OworCitNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBGcm9udGVuZCBtb2R1bGUgZm9yIENvbmV4YW50IGN4MjQxMTYvY3gyNDExOCBoYXJkd2FyZSIpOworTU9EVUxFX0FVVEhPUigiU3RldmVuIFRvdGgiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNiM2RkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAgICBDb25leGFudCBjeDI0MTE2L2N4MjQxMTggLSBEVkJTL1MyIFNhdGVsbGl0ZSBkZW1vZC90dW5lciBkcml2ZXIKKworICAgIENvcHlyaWdodCAoQykgMjAwNiBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5jb20+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgQ1gyNDExNl9ICisjZGVmaW5lIENYMjQxMTZfSAorCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisKK3N0cnVjdCBjeDI0MTE2X2NvbmZpZyB7CisJLyogdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KKwl1OCBkZW1vZF9hZGRyZXNzOworCisJLyogTmVlZCB0byBzZXQgZGV2aWNlIHBhcmFtIGZvciBzdGFydF9kbWEgKi8KKwlpbnQgKCpzZXRfdHNfcGFyYW1zKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGlzX3B1bmN0dXJlZCk7CisKKwkvKiBOZWVkIHRvIHJlc2V0IGRldmljZSBkdXJpbmcgZmlybXdhcmUgbG9hZGluZyAqLworCWludCAoKnJlc2V0X2RldmljZSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOworCisJLyogTmVlZCB0byBzZXQgTVBFRyBwYXJhbWV0ZXJzICovCisJdTggbXBnX2Nsa19wb3NfcG9sOjB4MDI7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMTYpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTE2X01PRFVMRSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDI0MTE2X2F0dGFjaCgKKwljb25zdCBzdHJ1Y3QgY3gyNDExNl9jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDI0MTE2X2F0dGFjaCgKKwljb25zdCBzdHJ1Y3QgY3gyNDExNl9jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogQ1gyNDExNl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYwppbmRleCA3MTU2MTU3Li4xYThjMzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKQEAgLTMzLDcgKzMzLDEzIEBACiAjZGVmaW5lIFhUQUwgMTAxMTEwMDAKIAogc3RhdGljIGludCBmb3JjZV9iYW5kOworbW9kdWxlX3BhcmFtKGZvcmNlX2JhbmQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX2JhbmQsICJGb3JjZSBhIHNwZWNpZmljIGJhbmQgc2VsZWN0ICJcCisJIigxLTksIGRlZmF1bHQ6b2ZmKS4iKTsKKwogc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJBY3RpdmF0ZXMgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0OjApIik7CiAKICNkZWZpbmUgaW5mbyhhcmdzLi4uKSBkbyB7IHByaW50ayhLRVJOX0lORk8gIkNYMjQxMjM6ICIgYXJncyk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGVycihhcmdzLi4uKSAgZG8geyBwcmludGsoS0VSTl9FUlIgICJDWDI0MTIzOiAiIGFyZ3MpOyB9IHdoaWxlICgwKQpAQCAtNDYsMTAgKzUyLDkgQEAKIAkJfSBcCiAJfSB3aGlsZSAoMCkKIAotc3RydWN0IGN4MjQxMjNfc3RhdGUKLXsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYzsKLQljb25zdCBzdHJ1Y3QgY3gyNDEyM19jb25maWcqIGNvbmZpZzsKK3N0cnVjdCBjeDI0MTIzX3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKwljb25zdCBzdHJ1Y3QgY3gyNDEyM19jb25maWcgKmNvbmZpZzsKIAogCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CiAKQEAgLTcwLDggKzc1LDcgQEAKIH07CiAKIC8qIFZhcmlvdXMgdHVuZXIgZGVmYXVsdHMgbmVlZCB0byBiZSBlc3RhYmxpc2hlZCBmb3IgYSBnaXZlbiBzeW1ib2wgcmF0ZSBTcHMgKi8KLXN0YXRpYyBzdHJ1Y3QKLXsKK3N0YXRpYyBzdHJ1Y3QgY3gyNDEyM19BR0NfdmFsIHsKIAl1MzIgc3ltYm9scmF0ZV9sb3c7CiAJdTMyIHN5bWJvbHJhdGVfaGlnaDsKIAl1MzIgVkNBcHJvZ2RhdGE7CkBAIC0xMDksOCArMTEzLDcgQEAKICAqIGZpeG1lOiBUaGUgYm91bmRzIG9uIHRoZSBiYW5kcyBkbyBub3QgbWF0Y2ggdGhlIGRvYyBpbiByZWFsIGxpZmUuCiAgKiBmaXhtZTogU29tZSBvZiB0aGVtIGhhdmUgYmVlbiBtb3ZlZCwgb3RoZXIgbWlnaHQgbmVlZCBhZGp1c3RtZW50LgogICovCi1zdGF0aWMgc3RydWN0Ci17CitzdGF0aWMgc3RydWN0IGN4MjQxMjNfYmFuZHNlbGVjdF92YWwgewogCXUzMiBmcmVxX2xvdzsKIAl1MzIgZnJlcV9oaWdoOwogCXUzMiBWQ09kaXZpZGVyOwpAQCAtMjQ5LDcgKzI1Miw4IEBACiAKIAkvKiBwcmludGsoS0VSTl9ERUJVRyAid3IoJTAyeCk6ICUwMnggJTAyeFxuIiwgaTJjX2FkZHIsIHJlZywgZGF0YSk7ICovCiAKLQlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkgeworCWVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwlpZiAoZXJyICE9IDEpIHsKIAkJcHJpbnRrKCIlczogd3JpdGVyZWcgZXJyb3IoZXJyID09ICVpLCByZWcgPT0gMHglMDJ4LCIKIAkJCSAiIGRhdGEgPT0gMHglMDJ4KVxuIiwgX19mdW5jX18sIGVyciwgcmVnLCBkYXRhKTsKIAkJcmV0dXJuIGVycjsKQEAgLTI4NCw3ICsyODgsOCBAQAogI2RlZmluZSBjeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCByZWcsIHZhbCkgXAogCWN4MjQxMjNfaTJjX3dyaXRlcmVnKHN0YXRlLCBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCByZWcsIHZhbCkKIAotc3RhdGljIGludCBjeDI0MTIzX3NldF9pbnZlcnNpb24oc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCBmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCBpbnZlcnNpb24pCitzdGF0aWMgaW50IGN4MjQxMjNfc2V0X2ludmVyc2lvbihzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUsCisJZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgaW52ZXJzaW9uKQogewogCXU4IG5vbV9yZWcgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MGUpOwogCXU4IGF1dG9fcmVnID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDEwKTsKQEAgLTMxMSw3ICszMTYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfZ2V0X2ludmVyc2lvbihzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUsIGZlX3NwZWN0cmFsX2ludmVyc2lvbl90ICppbnZlcnNpb24pCitzdGF0aWMgaW50IGN4MjQxMjNfZ2V0X2ludmVyc2lvbihzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUsCisJZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgKmludmVyc2lvbikKIHsKIAl1OCB2YWw7CiAKQEAgLTMyOCwxOCArMzM0LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19zZXRfZmVjKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfY29kZV9yYXRlX3QgZmVjKQorc3RhdGljIGludCBjeDI0MTIzX3NldF9mZWMoc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlLCBmZV9jb2RlX3JhdGVfdCBmZWMpCiB7CiAJdTggbm9tX3JlZyA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgwZSkgJiB+MHgwNzsKIAotCWlmICggKGZlYyA8IEZFQ19OT05FKSB8fCAoZmVjID4gRkVDX0FVVE8pICkKKwlpZiAoKGZlYyA8IEZFQ19OT05FKSB8fCAoZmVjID4gRkVDX0FVVE8pKQogCQlmZWMgPSBGRUNfQVVUTzsKIAogCS8qIFNldCB0aGUgc29mdCBkZWNpc2lvbiB0aHJlc2hvbGQgKi8KLQlpZihmZWMgPT0gRkVDXzFfMikKLQkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHg0MywgY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDQzKSB8IDB4MDEpOworCWlmIChmZWMgPT0gRkVDXzFfMikKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHg0MywKKwkJCWN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHg0MykgfCAweDAxKTsKIAllbHNlCi0JCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4NDMsIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHg0MykgJiB+MHgwMSk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4NDMsCisJCQljeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4NDMpICYgfjB4MDEpOwogCiAJc3dpdGNoIChmZWMpIHsKIAljYXNlIEZFQ18xXzI6CkBAIC0zODgsMTEgKzM5NiwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfZ2V0X2ZlYyhzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUsIGZlX2NvZGVfcmF0ZV90ICpmZWMpCitzdGF0aWMgaW50IGN4MjQxMjNfZ2V0X2ZlYyhzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUsIGZlX2NvZGVfcmF0ZV90ICpmZWMpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IGN4MjQxMjNfcmVhZHJlZyAoc3RhdGUsIDB4MWIpOworCXJldCA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxYik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJcmV0ID0gcmV0ICYgMHgwNzsKQEAgLTQzMywxNiArNDQxLDE2IEBACiB7CiAJdTMyIGV4cCwgbmVhcmVzdCA9IDA7CiAJdTMyIGRpdiA9IGEgLyBiOwotCWlmKGEgJSBiID49IGIgLyAyKSArK2RpdjsKLQlpZihkaXYgPCAoMSA8PCAzMSkpCi0JewotCQlmb3IoZXhwID0gMTsgZGl2ID4gZXhwOyBuZWFyZXN0KyspCisJaWYgKGEgJSBiID49IGIgLyAyKQorCQkrK2RpdjsKKwlpZiAoZGl2IDwgKDEgPDwgMzEpKSB7CisJCWZvciAoZXhwID0gMTsgZGl2ID4gZXhwOyBuZWFyZXN0KyspCiAJCQlleHAgKz0gZXhwOwogCX0KIAlyZXR1cm4gbmVhcmVzdDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX3NldF9zeW1ib2xyYXRlKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgdTMyIHNyYXRlKQorc3RhdGljIGludCBjeDI0MTIzX3NldF9zeW1ib2xyYXRlKHN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSwgdTMyIHNyYXRlKQogewogCXUzMiB0bXAsIHNhbXBsZV9yYXRlLCByYXRpbywgc2FtcGxlX2dhaW47CiAJdTggcGxsX211bHQ7CkBAIC00OTgsOSArNTA2LDkgQEAKIAogCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MDEsIHBsbF9tdWx0ICogNik7CiAKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDA4LCAocmF0aW8gPj4gMTYpICYgMHgzZiApOwotCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MDksIChyYXRpbyA+PiAgOCkgJiAweGZmICk7Ci0JY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwYSwgKHJhdGlvICAgICAgKSAmIDB4ZmYgKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDA4LCAocmF0aW8gPj4gMTYpICYgMHgzZik7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwOSwgKHJhdGlvID4+IDgpICYgMHhmZik7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwYSwgcmF0aW8gJiAweGZmKTsKIAogCS8qIGFsc28gc2V0IHRoZSBkZW1vZHVsYXRvciBzYW1wbGUgZ2FpbiAqLwogCXNhbXBsZV9nYWluID0gY3gyNDEyM19pbnRfbG9nMihzYW1wbGVfcmF0ZSwgc3JhdGUpOwpAQCAtNTE0LDEwICs1MjIsMTIgQEAKIH0KIAogLyoKLSAqIEJhc2VkIG9uIHRoZSByZXF1aXJlZCBmcmVxdWVuY3kgYW5kIHN5bWJvbHJhdGUsIHRoZSB0dW5lciBBR0MgaGFzIHRvIGJlIGNvbmZpZ3VyZWQKLSAqIGFuZCB0aGUgY29ycmVjdCBiYW5kIHNlbGVjdGVkLiBDYWxjdWxhdGUgdGhvc2UgdmFsdWVzCisgKiBCYXNlZCBvbiB0aGUgcmVxdWlyZWQgZnJlcXVlbmN5IGFuZCBzeW1ib2xyYXRlLCB0aGUgdHVuZXIgQUdDIGhhcworICogdG8gYmUgY29uZmlndXJlZCBhbmQgdGhlIGNvcnJlY3QgYmFuZCBzZWxlY3RlZC4KKyAqIENhbGN1bGF0ZSB0aG9zZSB2YWx1ZXMuCiAgKi8KLXN0YXRpYyBpbnQgY3gyNDEyM19wbGxfY2FsY3VsYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCitzdGF0aWMgaW50IGN4MjQxMjNfcGxsX2NhbGN1bGF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTMyIG5kaXYgPSAwLCBhZGl2ID0gMCwgdmNvX2RpdiA9IDA7CkBAIC01MjUsNiArNTM1LDggQEAKIAlpbnQgcHVtcCA9IDI7CiAJaW50IGJhbmQgPSAwOwogCWludCBudW1fYmFuZHMgPSBBUlJBWV9TSVpFKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzKTsKKwlzdHJ1Y3QgY3gyNDEyM19iYW5kc2VsZWN0X3ZhbCAqYnN2ID0gTlVMTDsKKwlzdHJ1Y3QgY3gyNDEyM19BR0NfdmFsICphZ2N2ID0gTlVMTDsKIAogCS8qIERlZmF1bHRzIGZvciBsb3cgZnJlcSwgbG93IHJhdGUgKi8KIAlzdGF0ZS0+VkNBYXJnID0gY3gyNDEyM19BR0NfdmFsc1swXS5WQ0Fwcm9nZGF0YTsKQEAgLTUzMiw1OCArNTQ0LDY1IEBACiAJc3RhdGUtPmJhbmRzZWxlY3RhcmcgPSBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1swXS5wcm9nZGF0YTsKIAl2Y29fZGl2ID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbMF0uVkNPZGl2aWRlcjsKIAotCS8qIEZvciB0aGUgZ2l2ZW4gc3ltYm9sIHJhdGUsIGRldGVybWluZSB0aGUgVkNBLCBWR0EgYW5kIEZJTFRVTkUgcHJvZ3JhbW1pbmcgYml0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN4MjQxMjNfQUdDX3ZhbHMpOyBpKyspCi0JewotCQlpZiAoKGN4MjQxMjNfQUdDX3ZhbHNbaV0uc3ltYm9scmF0ZV9sb3cgPD0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlKSAmJgotCQkgICAgKGN4MjQxMjNfQUdDX3ZhbHNbaV0uc3ltYm9scmF0ZV9oaWdoID49IHAtPnUucXBzay5zeW1ib2xfcmF0ZSkgKSB7Ci0JCQlzdGF0ZS0+VkNBYXJnID0gY3gyNDEyM19BR0NfdmFsc1tpXS5WQ0Fwcm9nZGF0YTsKLQkJCXN0YXRlLT5WR0FhcmcgPSBjeDI0MTIzX0FHQ192YWxzW2ldLlZHQXByb2dkYXRhOwotCQkJc3RhdGUtPkZJTFR1bmUgPSBjeDI0MTIzX0FHQ192YWxzW2ldLkZJTFR1bmU7CisJLyogRm9yIHRoZSBnaXZlbiBzeW1ib2wgcmF0ZSwgZGV0ZXJtaW5lIHRoZSBWQ0EsIFZHQSBhbmQKKwkgKiBGSUxUVU5FIHByb2dyYW1taW5nIGJpdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjeDI0MTIzX0FHQ192YWxzKTsgaSsrKSB7CisJCWFnY3YgPSAmY3gyNDEyM19BR0NfdmFsc1tpXTsKKwkJaWYgKChhZ2N2LT5zeW1ib2xyYXRlX2xvdyA8PSBwLT51LnFwc2suc3ltYm9sX3JhdGUpICYmCisJCSAgICAoYWdjdi0+c3ltYm9scmF0ZV9oaWdoID49IHAtPnUucXBzay5zeW1ib2xfcmF0ZSkpIHsKKwkJCXN0YXRlLT5WQ0FhcmcgPSBhZ2N2LT5WQ0Fwcm9nZGF0YTsKKwkJCXN0YXRlLT5WR0FhcmcgPSBhZ2N2LT5WR0Fwcm9nZGF0YTsKKwkJCXN0YXRlLT5GSUxUdW5lID0gYWdjdi0+RklMVHVuZTsKIAkJfQogCX0KIAogCS8qIGRldGVybWluZSB0aGUgYmFuZCB0byB1c2UgKi8KLQlpZihmb3JjZV9iYW5kIDwgMSB8fCBmb3JjZV9iYW5kID4gbnVtX2JhbmRzKQotCXsKLQkJZm9yIChpID0gMDsgaSA8IG51bV9iYW5kczsgaSsrKQotCQl7Ci0JCQlpZiAoKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2ldLmZyZXFfbG93IDw9IHAtPmZyZXF1ZW5jeSkgJiYKLQkJCSAgICAoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0uZnJlcV9oaWdoID49IHAtPmZyZXF1ZW5jeSkgKQorCWlmIChmb3JjZV9iYW5kIDwgMSB8fCBmb3JjZV9iYW5kID4gbnVtX2JhbmRzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fYmFuZHM7IGkrKykgeworCQkJYnN2ID0gJmN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2ldOworCQkJaWYgKChic3YtPmZyZXFfbG93IDw9IHAtPmZyZXF1ZW5jeSkgJiYKKwkJCQkoYnN2LT5mcmVxX2hpZ2ggPj0gcC0+ZnJlcXVlbmN5KSkKIAkJCQliYW5kID0gaTsKIAkJfQotCX0KLQllbHNlCisJfSBlbHNlCiAJCWJhbmQgPSBmb3JjZV9iYW5kIC0gMTsKIAogCXN0YXRlLT5iYW5kc2VsZWN0YXJnID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0ucHJvZ2RhdGE7CiAJdmNvX2RpdiA9IGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2JhbmRdLlZDT2RpdmlkZXI7CiAKIAkvKiBkZXRlcm1pbmUgdGhlIGNoYXJnZSBwdW1wIGN1cnJlbnQgKi8KLQlpZiAoIHAtPmZyZXF1ZW5jeSA8IChjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tiYW5kXS5mcmVxX2xvdyArIGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2JhbmRdLmZyZXFfaGlnaCkvMiApCisJaWYgKHAtPmZyZXF1ZW5jeSA8IChjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tiYW5kXS5mcmVxX2xvdyArCisJCWN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2JhbmRdLmZyZXFfaGlnaCkgLyAyKQogCQlwdW1wID0gMHgwMTsKIAllbHNlCiAJCXB1bXAgPSAweDAyOwogCiAJLyogRGV0ZXJtaW5lIHRoZSBOL0EgZGl2aWRlcnMgZm9yIHRoZSByZXF1ZXN0ZWQgbGJhbmQgZnJlcSAoaW4ga0h6KS4gKi8KLQkvKiBOb3RlOiB0aGUgcmVmZXJlbmNlIGRpdmlkZXIgUj0xMCwgZnJlcXVlbmN5IGlzIGluIEtIeiwgWFRBTCBpcyBpbiBIeiAqLwotCW5kaXYgPSAoICgocC0+ZnJlcXVlbmN5ICogdmNvX2RpdiAqIDEwKSAvICgyICogWFRBTCAvIDEwMDApKSAvIDMyKSAmIDB4MWZmOwotCWFkaXYgPSAoICgocC0+ZnJlcXVlbmN5ICogdmNvX2RpdiAqIDEwKSAvICgyICogWFRBTCAvIDEwMDApKSAlIDMyKSAmIDB4MWY7CisJLyogTm90ZTogdGhlIHJlZmVyZW5jZSBkaXZpZGVyIFI9MTAsIGZyZXF1ZW5jeSBpcyBpbiBLSHosCisJICogWFRBTCBpcyBpbiBIeiAqLworCW5kaXYgPSAoKChwLT5mcmVxdWVuY3kgKiB2Y29fZGl2ICogMTApIC8KKwkJKDIgKiBYVEFMIC8gMTAwMCkpIC8gMzIpICYgMHgxZmY7CisJYWRpdiA9ICgoKHAtPmZyZXF1ZW5jeSAqIHZjb19kaXYgKiAxMCkgLworCQkoMiAqIFhUQUwgLyAxMDAwKSkgJSAzMikgJiAweDFmOwogCiAJaWYgKGFkaXYgPT0gMCAmJiBuZGl2ID4gMCkKIAkJbmRpdi0tOwogCi0JLyogY29udHJvbCBiaXRzIDExLCByZWZkaXYgMTEsIGNoYXJnZSBwdW1wIHBvbGFyaXR5IDEsIGNoYXJnZSBwdW1wIGN1cnJlbnQsIG5kaXYsIGFkaXYgKi8KLQlzdGF0ZS0+cGxsYXJnID0gKDMgPDwgMTkpIHwgKDMgPDwgMTcpIHwgKDEgPDwgMTYpIHwgKHB1bXAgPDwgMTQpIHwgKG5kaXYgPDwgNSkgfCBhZGl2OworCS8qIGNvbnRyb2wgYml0cyAxMSwgcmVmZGl2IDExLCBjaGFyZ2UgcHVtcCBwb2xhcml0eSAxLAorCSAqIGNoYXJnZSBwdW1wIGN1cnJlbnQsIG5kaXYsIGFkaXYgKi8KKwlzdGF0ZS0+cGxsYXJnID0gKDMgPDwgMTkpIHwgKDMgPDwgMTcpIHwgKDEgPDwgMTYpIHwKKwkJKHB1bXAgPDwgMTQpIHwgKG5kaXYgPDwgNSkgfCBhZGl2OwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBUdW5lciBkYXRhIGlzIDIxIGJpdHMgbG9uZywgbXVzdCBiZSBsZWZ0LWFsaWduZWQgaW4gZGF0YS4KLSAqIFR1bmVyIGN4MjQxMDkgaXMgd3JpdHRlbiB0aHJvdWdoIGEgZGVkaWNhdGVkIDN3aXJlIGludGVyZmFjZSBvbiB0aGUgZGVtb2QgY2hpcC4KKyAqIFR1bmVyIGN4MjQxMDkgaXMgd3JpdHRlbiB0aHJvdWdoIGEgZGVkaWNhdGVkIDN3aXJlIGludGVyZmFjZQorICogb24gdGhlIGRlbW9kIGNoaXAuCiAgKi8KLXN0YXRpYyBpbnQgY3gyNDEyM19wbGxfd3JpdGVyZWcoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCwgdTMyIGRhdGEpCitzdGF0aWMgaW50IGN4MjQxMjNfcGxsX3dyaXRlcmVnKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCwgdTMyIGRhdGEpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwpAQCAtNjEwLDcgKzYyOSw3IEBACiAKIAkvKiBzZW5kIGFub3RoZXIgOCBieXRlcywgd2FpdCBmb3IgdGhlIHNlbmQgdG8gYmUgY29tcGxldGVkICovCiAJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDQwKTsKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDIyLCAoZGF0YT4+OCkgJiAweGZmICk7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyMiwgKGRhdGEgPj4gOCkgJiAweGZmKTsKIAl3aGlsZSAoKGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgyMCkgJiAweDQwKSA9PSAwKSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCQllcnIoIiVzOiAgZGVtb2R1bGF0b3IgaXMgbm90IHJlc3BvbmRpbmcsICJcCkBAIC02MjAsOSArNjM5LDEwIEBACiAJCW1zbGVlcCgxMCk7CiAJfQogCi0JLyogc2VuZCB0aGUgbG93ZXIgNSBiaXRzIG9mIHRoaXMgYnl0ZSwgcGFkZGVkIHdpdGggMyBMQkIsIHdhaXQgZm9yIHRoZSBzZW5kIHRvIGJlIGNvbXBsZXRlZCAqLworCS8qIHNlbmQgdGhlIGxvd2VyIDUgYml0cyBvZiB0aGlzIGJ5dGUsIHBhZGRlZCB3aXRoIDMgTEJCLAorCSAqIHdhaXQgZm9yIHRoZSBzZW5kIHRvIGJlIGNvbXBsZXRlZCAqLwogCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg0MCk7Ci0JY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyMiwgKGRhdGEpICYgMHhmZiApOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjIsIChkYXRhKSAmIDB4ZmYpOwogCXdoaWxlICgoY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDIwKSAmIDB4ODApKSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCQllcnIoIiVzOiAgZGVtb2R1bGF0b3IgaXMgbm90IHJlc3BvbmRpbmcsIiBcCkBAIC02MzksNyArNjU5LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX3BsbF90dW5lKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCitzdGF0aWMgaW50IGN4MjQxMjNfcGxsX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXU4IHZhbDsKQEAgLTY5MCw3ICs3MTEsNyBAQAogCXJldHVybiBjeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDIzLCByKTsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX2luaXRmZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyBpbnQgY3gyNDEyM19pbml0ZmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IGk7CkBAIC02OTksMTkgKzcyMCwyMiBAQAogCiAJLyogQ29uZmlndXJlIHRoZSBkZW1vZCB0byBhIGdvb2Qgc2V0IG9mIGRlZmF1bHRzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3gyNDEyM19yZWdkYXRhKTsgaSsrKQotCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCBjeDI0MTIzX3JlZ2RhdGFbaV0ucmVnLCBjeDI0MTIzX3JlZ2RhdGFbaV0uZGF0YSk7CisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIGN4MjQxMjNfcmVnZGF0YVtpXS5yZWcsCisJCQljeDI0MTIzX3JlZ2RhdGFbaV0uZGF0YSk7CiAKIAkvKiBTZXQgdGhlIExOQiBwb2xhcml0eSAqLwotCWlmKHN0YXRlLT5jb25maWctPmxuYl9wb2xhcml0eSkKLQkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgzMiwgY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDMyKSB8IDB4MDIpOworCWlmIChzdGF0ZS0+Y29uZmlnLT5sbmJfcG9sYXJpdHkpCisJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MzIsCisJCQljeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MzIpIHwgMHgwMik7CiAKIAlpZiAoc3RhdGUtPmNvbmZpZy0+ZG9udF91c2VfcGxsKQotCWN4MjQxMjNfcmVwZWF0ZXJfbW9kZShzdGF0ZSwgMSwgMCk7CisJCWN4MjQxMjNfcmVwZWF0ZXJfbW9kZShzdGF0ZSwgMSwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCitzdGF0aWMgaW50IGN4MjQxMjNfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXU4IHZhbDsKQEAgLTc0MCw3ICs3NjQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwMCk7CiAJd2hpbGUgKCEoY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDI5KSAmIDB4NDApKSB7Ci0JCWlmKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKIAkJCWVycigiJXM6IGRpc2VxYyBxdWV1ZSBub3QgcmVhZHksICIgXAogCQkJCSJjb21tYW5kIG1heSBiZSBsb3N0LlxuIiwgX19mdW5jX18pOwogCQkJYnJlYWs7CkBAIC03NDksNyArNzczLDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19zZW5kX2Rpc2VxY19tc2coc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmNtZCkKK3N0YXRpYyBpbnQgY3gyNDEyM19zZW5kX2Rpc2VxY19tc2coc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCAqY21kKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWludCBpLCB2YWwsIHRvbmU7CkBAIC03NzEsMjAgKzc5NiwyMSBAQAogCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDJDICsgaSwgY21kLT5tc2dbaV0pOwogCiAJdmFsID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDI5KTsKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDI5LCAoKHZhbCAmIDB4OTApIHwgMHg0MCkgfCAoKGNtZC0+bXNnX2xlbi0zKSAmIDMpKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDI5LCAoKHZhbCAmIDB4OTApIHwgMHg0MCkgfAorCQkoKGNtZC0+bXNnX2xlbi0zKSAmIDMpKTsKIAogCS8qIHdhaXQgZm9yIGRpc2VxYyBtZXNzYWdlIHRvIGZpbmlzaCBzZW5kaW5nICovCiAJY3gyNDEyM193YWl0X2Zvcl9kaXNlcWMoc3RhdGUpOwogCiAJLyogcmVzdGFydCBjb250aW51b3VzIHRvbmUgaWYgZW5hYmxlZCAqLwotCWlmICh0b25lICYgMHgxMCkgeworCWlmICh0b25lICYgMHgxMCkKIAkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyOSwgdG9uZSAmIH4weDQwKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX2Rpc2VxY19zZW5kX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfbWluaV9jbWRfdCBidXJzdCkKK3N0YXRpYyBpbnQgY3gyNDEyM19kaXNlcWNfc2VuZF9idXJzdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfbWluaV9jbWRfdCBidXJzdCkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgdmFsLCB0b25lOwpAQCAtODE0LDEzICs4NDAsMTMgQEAKIAljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDJhLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MmEpICYgMHhmYik7CiAKIAkvKiByZXN0YXJ0IGNvbnRpbnVvdXMgdG9uZSBpZiBlbmFibGVkICovCi0JaWYgKHRvbmUgJiAweDEwKSB7CisJaWYgKHRvbmUgJiAweDEwKQogCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDI5LCB0b25lICYgfjB4NDApOwotCX0KKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3N0YXR1c190KiBzdGF0dXMpCitzdGF0aWMgaW50IGN4MjQxMjNfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IHN5bmMgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MTQpOwpAQCAtODUzLDggKzg3OSw5IEBACiB9CiAKIC8qCi0gKiBDb25maWd1cmVkIHRvIHJldHVybiB0aGUgbWVhc3VyZW1lbnQgb2YgZXJyb3JzIGluIGJsb2NrcywgYmVjYXVzZSBubyBVQ0JMT0NLUyB2YWx1ZQotICogaXMgYXZhaWxhYmxlLCBzbyB0aGlzIHZhbHVlIGRvdWJsZXMgdXAgdG8gc2F0aXNmeSBib3RoIG1lYXN1cmVtZW50cworICogQ29uZmlndXJlZCB0byByZXR1cm4gdGhlIG1lYXN1cmVtZW50IG9mIGVycm9ycyBpbiBibG9ja3MsCisgKiBiZWNhdXNlIG5vIFVDQkxPQ0tTIHZhbHVlIGlzIGF2YWlsYWJsZSwgc28gdGhpcyB2YWx1ZSBkb3VibGVzIHVwCisgKiB0byBzYXRpc2Z5IGJvdGggbWVhc3VyZW1lbnRzLgogICovCiBzdGF0aWMgaW50IGN4MjQxMjNfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQogewpAQCAtODc2LDcgKzkwMyw4IEBACiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKLQkqc2lnbmFsX3N0cmVuZ3RoID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDNiKSA8PCA4OyAvKiBsYXJnZXIgPSBiZXR0ZXIgKi8KKwkvKiBsYXJnZXIgPSBiZXR0ZXIgKi8KKwkqc2lnbmFsX3N0cmVuZ3RoID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDNiKSA8PCA4OwogCiAJZHByaW50aygiU2lnbmFsIHN0cmVuZ3RoID0gJWRcbiIsICpzaWduYWxfc3RyZW5ndGgpOwogCkBAIC05MDcsNyArOTM1LDcgQEAKIAlpZiAoc3RhdGUtPmNvbmZpZy0+c2V0X3RzX3BhcmFtcykKIAkJc3RhdGUtPmNvbmZpZy0+c2V0X3RzX3BhcmFtcyhmZSwgMCk7CiAKLQlzdGF0ZS0+Y3VycmVudGZyZXE9cC0+ZnJlcXVlbmN5OworCXN0YXRlLT5jdXJyZW50ZnJlcSA9IHAtPmZyZXF1ZW5jeTsKIAlzdGF0ZS0+Y3VycmVudHN5bWJvbHJhdGUgPSBwLT51LnFwc2suc3ltYm9sX3JhdGU7CiAKIAljeDI0MTIzX3NldF9pbnZlcnNpb24oc3RhdGUsIHAtPmludmVyc2lvbik7CkBAIC05MzIsNyArOTYwLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQorc3RhdGljIGludCBjeDI0MTIzX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKQEAgLTk1Miw3ICs5ODEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfc2V0X3RvbmUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY190b25lX21vZGVfdCB0b25lKQorc3RhdGljIGludCBjeDI0MTIzX3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1OCB2YWw7CkBAIC05NzcsOCArMTAwNiw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM190dW5lKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAotCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMsCitzdGF0aWMgaW50IGN4MjQxMjNfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zLAogCQkJdW5zaWduZWQgaW50IG1vZGVfZmxhZ3MsCiAJCQl1bnNpZ25lZCBpbnQgKmRlbGF5LAogCQkJZmVfc3RhdHVzX3QgKnN0YXR1cykKQEAgLTk5NywxMiArMTAyNiwxMiBAQAogCiBzdGF0aWMgaW50IGN4MjQxMjNfZ2V0X2FsZ28oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0JcmV0dXJuIDE7IC8vRkVfQUxHT19IVworCXJldHVybiAxOyAvKiBGRV9BTEdPX0hXICovCiB9CiAKLXN0YXRpYyB2b2lkIGN4MjQxMjNfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyB2b2lkIGN4MjQxMjNfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlkcHJpbnRrKCJcbiIpOwogCWkyY19kZWxfYWRhcHRlcigmc3RhdGUtPnR1bmVyX2kyY19hZGFwdGVyKTsKIAlrZnJlZShzdGF0ZSk7CkBAIC0xMDEzLDcgKzEwNDIsNyBAQAogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOwogCS8qIHRoaXMgcmVwZWF0ZXIgY2xvc2VzIGFmdGVyIHRoZSBmaXJzdCBzdG9wICovCi0gICAgY3gyNDEyM19yZXBlYXRlcl9tb2RlKHN0YXRlLCAxLCAxKTsKKwljeDI0MTIzX3JlcGVhdGVyX21vZGUoc3RhdGUsIDEsIDEpOwogCXJldHVybiBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCBudW0pOwogfQogCkBAIC0xMDM3LDggKzEwNjYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgY3gyNDEyM19vcHM7CiAKLXN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjQxMjNfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTIzX2NvbmZpZyogY29uZmlnLAotCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjQxMjNfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTIzX2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPQogCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgY3gyNDEyM19zdGF0ZSksIEdGUF9LRVJORUwpOwpAQCAtMTA1NywyMCArMTA4NiwyNSBAQAogCS8qIGNoZWNrIGlmIHRoZSBkZW1vZCBpcyB0aGVyZSAqLwogCXN0YXRlLT5kZW1vZF9yZXYgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MDApOwogCXN3aXRjaCAoc3RhdGUtPmRlbW9kX3JldikgewotCWNhc2UgMHhlMTogaW5mbygiZGV0ZWN0ZWQgQ1gyNDEyM0NcbiIpOyBicmVhazsKLQljYXNlIDB4ZDE6IGluZm8oImRldGVjdGVkIENYMjQxMjNcbiIpOyBicmVhazsKKwljYXNlIDB4ZTE6CisJCWluZm8oImRldGVjdGVkIENYMjQxMjNDXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAweGQxOgorCQlpbmZvKCJkZXRlY3RlZCBDWDI0MTIzXG4iKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyKCJ3cm9uZyBkZW1vZCByZXZpc2lvbjogJXhcbiIsIHN0YXRlLT5kZW1vZF9yZXYpOwogCQlnb3RvIGVycm9yOwogCX0KIAogCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KLQltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZjeDI0MTIzX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmY3gyNDEyM19vcHMsCisJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOwogCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CiAKLSAgICAvKiBjcmVhdGUgdHVuZXIgaTJjIGFkYXB0ZXIgKi8KLSAgICBpZiAoY29uZmlnLT5kb250X3VzZV9wbGwpCi0JY3gyNDEyM19yZXBlYXRlcl9tb2RlKHN0YXRlLCAxLCAwKTsKKwkvKiBjcmVhdGUgdHVuZXIgaTJjIGFkYXB0ZXIgKi8KKwlpZiAoY29uZmlnLT5kb250X3VzZV9wbGwpCisJCWN4MjQxMjNfcmVwZWF0ZXJfbW9kZShzdGF0ZSwgMSwgMCk7CiAKIAlzdHJsY3B5KHN0YXRlLT50dW5lcl9pMmNfYWRhcHRlci5uYW1lLCAiQ1gyNDEyMyB0dW5lciBJMkMgYnVzIiwKIAkJc2l6ZW9mKHN0YXRlLT50dW5lcl9pMmNfYWRhcHRlci5uYW1lKSk7CkBAIC0xMDc5LDcgKzExMTMsNyBAQAogCXN0YXRlLT50dW5lcl9pMmNfYWRhcHRlci5hbGdvX2RhdGEgPSBOVUxMOwogCWkyY19zZXRfYWRhcGRhdGEoJnN0YXRlLT50dW5lcl9pMmNfYWRhcHRlciwgc3RhdGUpOwogCWlmIChpMmNfYWRkX2FkYXB0ZXIoJnN0YXRlLT50dW5lcl9pMmNfYWRhcHRlcikgPCAwKSB7Ci0JZXJyKCJ0dW5lciBpMmMgYnVzIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZFxuIik7CisJCWVycigidHVuZXIgaTJjIGJ1cyBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMTA5MCw2ICsxMTI0LDcgQEAKIAogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChjeDI0MTIzX2F0dGFjaCk7CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBjeDI0MTIzX29wcyA9IHsKIApAQCAtMTEyNiwxNSArMTE2MSw4IEBACiAJLmdldF9mcm9udGVuZF9hbGdvID0gY3gyNDEyM19nZXRfYWxnbywKIH07CiAKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJBY3RpdmF0ZXMgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0OjApIik7Ci0KLW1vZHVsZV9wYXJhbShmb3JjZV9iYW5kLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9iYW5kLCAiRm9yY2UgYSBzcGVjaWZpYyBiYW5kIHNlbGVjdCAoMS05LCBkZWZhdWx0Om9mZikuIik7Ci0KIE1PRFVMRV9ERVNDUklQVElPTigiRFZCIEZyb250ZW5kIG1vZHVsZSBmb3IgQ29uZXhhbnQgIiBcCiAJIkNYMjQxMjMvQ1gyNDEwOS9DWDI0MTEzIGhhcmR3YXJlIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1FWFBPUlRfU1lNQk9MKGN4MjQxMjNfYXR0YWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5oCmluZGV4IGNjNmI0MTEuLjUxYWU4NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuaApAQCAtMjMsMTMgKzIzLDEyIEBACiAKICNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KIAotc3RydWN0IGN4MjQxMjNfY29uZmlnCi17CitzdHJ1Y3QgY3gyNDEyM19jb25maWcgewogCS8qIHRoZSBkZW1vZHVsYXRvcidzIGkyYyBhZGRyZXNzICovCiAJdTggZGVtb2RfYWRkcmVzczsKIAogCS8qIE5lZWQgdG8gc2V0IGRldmljZSBwYXJhbSBmb3Igc3RhcnRfZG1hICovCi0JaW50ICgqc2V0X3RzX3BhcmFtcykoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBpc19wdW5jdHVyZWQpOworCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKIAogCS8qIDAgPSBMTkIgdm9sdGFnZSBub3JtYWwsIDEgPSBMTkIgdm9sdGFnZSBpbnZlcnRlZCAqLwogCWludCBsbmJfcG9sYXJpdHk7CkBAIC0zOSw3ICszOCw4IEBACiAJdm9pZCAoKmFnY19jYWxsYmFjaykgKHN0cnVjdCBkdmJfZnJvbnRlbmQgKik7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMjMpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDEyM19NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDEyMykgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTIzX01PRFVMRSkgXAorCSYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDI0MTIzX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyNDEyM19jb25maWcgKmNvbmZpZywKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpOwogZXh0ZXJuIHN0cnVjdCBpMmNfYWRhcHRlciAqY3gyNDEyM19nZXRfdHVuZXJfaTJjX2FkYXB0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqKTsKQEAgLTU2LDYgKzU2LDYgQEAKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gTlVMTDsKIH0KLSNlbmRpZiAvLyBDT05GSUdfRFZCX0NYMjQxMjMKKyNlbmRpZgogCiAjZW5kaWYgLyogQ1gyNDEyM19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaAppbmRleCAzZWVkZmRmLi4yMWYyYzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKQEAgLTQxLDYgKzQxLDcgQEAKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWIwMDcwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCiAJCQkJCSAgIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyAqY2ZnKTsKK2V4dGVybiB1MTYgZGliMDA3MF93YmRfb2Zmc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKik7CiAjZWxzZQogc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWIwMDcwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkJCSAgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCkBAIC00OSw5ICs1MCwxNCBAQAogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQorCitzdGF0aWMgaW5saW5lIHUxNiBkaWIwMDcwX3diZF9vZmZzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQgZGliMDA3MF9jdHJsX2FnY19maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1aW50OF90IG9wZW4pOwotZXh0ZXJuIHUxNiBkaWIwMDcwX3diZF9vZmZzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwbS5jCmluZGV4IDVmMTM3NWUuLjAxMDk3MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwbS5jCkBAIC0xMjg0LDcgKzEyODQsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0woZGliNzAwMG1fZ2V0X2kyY19tYXN0ZXIpOwogCi1pbnQgZGliNzAwMG1faTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsIHN0cnVjdCBkaWI3MDAwbV9jb25maWcgY2ZnW10pCisjaWYgMAorLyogdXNlZCB3aXRoIHNvbWUgcHJvdG90eXBlIGJvYXJkcyAqLworaW50IGRpYjcwMDBtX2kyY19lbnVtZXJhdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgaW50IG5vX29mX2RlbW9kcywKKwkJdTggZGVmYXVsdF9hZGRyLCBzdHJ1Y3QgZGliNzAwMG1fY29uZmlnIGNmZ1tdKQogewogCXN0cnVjdCBkaWI3MDAwbV9zdGF0ZSBzdCA9IHsgLmkyY19hZGFwID0gaTJjIH07CiAJaW50IGsgPSAwOwpAQCAtMTMyOSw2ICsxMzMyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZGliNzAwMG1faTJjX2VudW1lcmF0aW9uKTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgZGliNzAwMG1fb3BzOwogc3RydWN0IGR2Yl9mcm9udGVuZCAqIGRpYjcwMDBtX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwgc3RydWN0IGRpYjcwMDBtX2NvbmZpZyAqY2ZnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYwppbmRleCAxYTAxNDJlLi44MjE3ZTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYwpAQCAtMTMzMyw3ICsxMzMzLDggQEAKIAkvKiBFbnN1cmUgdGhlIG91dHB1dCBtb2RlIHJlbWFpbnMgYXQgdGhlIHByZXZpb3VzIGRlZmF1bHQgaWYgaXQncwogCSAqIG5vdCBzcGVjaWZpY2FsbHkgc2V0IGJ5IHRoZSBjYWxsZXIuCiAJICovCi0JaWYgKHN0LT5jZmcub3V0cHV0X21vZGUgIT0gT1VUTU9ERV9NUEVHMl9TRVJJQUwpCisJaWYgKChzdC0+Y2ZnLm91dHB1dF9tb2RlICE9IE9VVE1PREVfTVBFRzJfU0VSSUFMKSAmJgorCSAgICAoc3QtPmNmZy5vdXRwdXRfbW9kZSAhPSBPVVRNT0RFX01QRUcyX1BBUl9HQVRFRF9DTEspKQogCQlzdC0+Y2ZnLm91dHB1dF9tb2RlID0gT1VUTU9ERV9NUEVHMl9GSUZPOwogCiAJZGVtb2QgICAgICAgICAgICAgICAgICAgPSAmc3QtPmRlbW9kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuaAppbmRleCAwN2M0ZDEyLi4zZTgxMjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuaApAQCAtNDEsNiArNDEsMTQgQEAKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWI3MDAwcF9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKIAkJCQkJICAgIHU4IGkyY19hZGRyLAogCQkJCQkgICAgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyAqY2ZnKTsKK2V4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRpYjcwMDBwX2dldF9pMmNfbWFzdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwKKwkJCQkJCSAgIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlLAorCQkJCQkJICAgaW50KTsKK2V4dGVybiBpbnQgZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAorCQkJCSAgICBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsCisJCQkJICAgIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgY2ZnW10pOworZXh0ZXJuIGludCBkaWI3MDAwcF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHU4IG51bSwgdTggZGlyLCB1OCB2YWwpOworZXh0ZXJuIGludCBkaWI3MDAwcF9zZXRfd2JkX3JlZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHUxNiB2YWx1ZSk7CiAjZWxzZQogc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWI3MDAwcF9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKIAkJCQkJCSAgIHU4IGkyY19hZGRyLApAQCAtNDksMTMgKzU3LDM2IEBACiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CiB9CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBpMmNfYWRhcHRlciAqZGliNzAwMHBfZ2V0X2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCSAgICBlbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSBpLCBpbnQgeCkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKworZXh0ZXJuIGludCBkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCQkJICAgIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwKKwkJCQkgICAgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyBjZmdbXSkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworZXh0ZXJuIGludCBkaWI3MDAwcF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggbnVtLCB1OCBkaXIsIHU4IHZhbCkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworZXh0ZXJuIGludCBkaWI3MDAwcF9zZXRfd2JkX3JlZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2IHZhbHVlKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PREVWOworfQogI2VuZGlmCiAKLWV4dGVybiBpbnQgZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgY2ZnW10pOwotCi1leHRlcm4gc3RydWN0IGkyY19hZGFwdGVyICogZGliNzAwMHBfZ2V0X2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCBlbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSwgaW50KTsKIGV4dGVybiBpbnQgZGliNzAwMHBjX2RldGVjdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwKTsKLWV4dGVybiBpbnQgZGliNzAwMHBfc2V0X2dwaW8oc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1OCBudW0sIHU4IGRpciwgdTggdmFsKTsKLWV4dGVybiBpbnQgZGliNzAwMHBfc2V0X3diZF9yZWYoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1MTYgdmFsdWUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeDM5N3hELmMKaW5kZXggM2NiZWQ4Ny4uYjljYTVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeDM5N3hELmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeDM5N3hELmMKQEAgLTM4LDM1ICszOCwzMiBAQAogI2RlZmluZSBGX1NFVF8wRDBoCTEKICNkZWZpbmUgRl9TRVRfMEQ0aAkyCiAKLXR5cGVkZWYgZW51bSBmd19peCB7CitlbnVtIGZ3X2l4IHsKICNkZWZpbmUgX0ZXX0VOVFJZKGEsIGIpCQliCiAjaW5jbHVkZSAiZHJ4Mzk3eERfZncuaCIKLX0gZndfaXhfdDsKK307CiAKIC8qIGNoaXAgc3BlY2lmaWNzICovCiBzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgewogCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOwogCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CiAJc3RydWN0IGRyeDM5N3hEX2NvbmZpZyBjb25maWc7Ci0JZndfaXhfdCBjaGlwX3JldjsKKwllbnVtIGZ3X2l4IGNoaXBfcmV2OwogCWludCBmbGFnczsKIAl1MzIgYmFuZHdpZHRoX3Bhcm07CS8qIGludGVybmFsIGJhbmR3aWR0aCBjb252ZXJzaW9ucyAqLwogCXUzMiBmX29zYzsJCS8qIHc5MDogYWN0dWFsIG9zYyBmcmVxdWVuY3kgW0h6XSAqLwogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEZpcm13YXJlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCisvKiBGaXJtd2FyZSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmJsb2JfbmFtZVtdID0gewogI2RlZmluZSBfQkxPQl9FTlRSWShhLCBiKQkJYQogI2luY2x1ZGUgImRyeDM5N3hEX2Z3LmgiCiB9OwogCi10eXBlZGVmIGVudW0gYmxvYl9peCB7CitlbnVtIGJsb2JfaXggewogI2RlZmluZSBfQkxPQl9FTlRSWShhLCBiKQkJYgogI2luY2x1ZGUgImRyeDM5N3hEX2Z3LmgiCi19IGJsb2JfaXhfdDsKK307CiAKIHN0YXRpYyBzdHJ1Y3QgewogCWNvbnN0IGNoYXIgKm5hbWU7CkBAIC04NSw3ICs4Miw3IEBACiB9OwogCiAvKiB1c2Ugb25seSB3aXRoIHdyaXRlciBsb2NrIGFxdWlyZWQgKi8KLXN0YXRpYyB2b2lkIF9kcnhfcmVsZWFzZV9mdyhzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMsIGZ3X2l4X3QgaXgpCitzdGF0aWMgdm9pZCBfZHJ4X3JlbGVhc2VfZncoc3RydWN0IGRyeDM5N3hEX3N0YXRlICpzLCBlbnVtIGZ3X2l4IGl4KQogewogCW1lbXNldCgmZndbaXhdLmRhdGFbMF0sIDAsIHNpemVvZihmd1swXS5kYXRhKSk7CiAJaWYgKGZ3W2l4XS5maWxlKQpAQCAtOTQsOSArOTEsOSBAQAogCiBzdGF0aWMgdm9pZCBkcnhfcmVsZWFzZV9mdyhzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMpCiB7Ci0JZndfaXhfdCBpeCA9IHMtPmNoaXBfcmV2OworCWVudW0gZndfaXggaXggPSBzLT5jaGlwX3JldjsKIAotCXByX2RlYnVnKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKIAogCXdyaXRlX2xvY2soJmZ3W2l4XS5sb2NrKTsKIAlpZiAoZndbaXhdLnJlZmNudCkgewpAQCAtMTA3LDEzICsxMDQsMTMgQEAKIAl3cml0ZV91bmxvY2soJmZ3W2l4XS5sb2NrKTsKIH0KIAotc3RhdGljIGludCBkcnhfbG9hZF9mdyhzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMsIGZ3X2l4X3QgaXgpCitzdGF0aWMgaW50IGRyeF9sb2FkX2Z3KHN0cnVjdCBkcngzOTd4RF9zdGF0ZSAqcywgZW51bSBmd19peCBpeCkKIHsKIAljb25zdCB1OCAqZGF0YTsKIAlzaXplX3Qgc2l6ZSwgbGVuOwogCWludCBpID0gMCwgaiwgcmMgPSAtRUlOVkFMOwogCi0JcHJfZGVidWcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKGl4IDwgMCB8fCBpeCA+PSBBUlJBWV9TSVpFKGZ3KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNzUsMzIgKzE3MiwzNCBAQAogCQkJZ290byBleGl0X2NvcnJ1cHQ7CiAJCX0KIAl9IHdoaWxlIChpIDwgc2l6ZSk7Ci0gICAgICBleGl0X2NvcnJ1cHQ6CisKK2V4aXRfY29ycnVwdDoKIAlwcmludGsoS0VSTl9FUlIgIiVzOiBGaXJtd2FyZSBpcyBjb3JydXB0XG4iLCBtb2RfbmFtZSk7Ci0gICAgICBleGl0X2VycjoKK2V4aXRfZXJyOgogCV9kcnhfcmVsZWFzZV9mdyhzLCBpeCk7CiAJZndbaXhdLnJlZmNudC0tOwotICAgICAgZXhpdF9vazoKK2V4aXRfb2s6CiAJZndbaXhdLnJlZmNudCsrOwogCXdyaXRlX3VubG9jaygmZndbaXhdLmxvY2spOworCiAJcmV0dXJuIHJjOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogaTJjIGJ1cyBJTwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCB3cml0ZV9mdyhzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMsIGJsb2JfaXhfdCBpeCkKKy8qIGkyYyBidXMgSU8gKi8KK3N0YXRpYyBpbnQgd3JpdGVfZncoc3RydWN0IGRyeDM5N3hEX3N0YXRlICpzLCBlbnVtIGJsb2JfaXggaXgpCiB7Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gcy0+Y29uZmlnLmRlbW9kX2FkZHJlc3MsLmZsYWdzID0gMCB9OwogCWNvbnN0IHU4ICpkYXRhOwogCWludCBsZW4sIHJjID0gMCwgaSA9IDA7CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHMtPmNvbmZpZy5kZW1vZF9hZGRyZXNzLAorCQkuZmxhZ3MgPSAwCisJfTsKIAogCWlmIChpeCA8IDAgfHwgaXggPj0gQVJSQVlfU0laRShibG9iX25hbWUpKSB7Ci0JCXByX2RlYnVnKCIlcyBkcnhfZndfaXhfdCBvdXQgb2YgcmFuZ2VcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXByX2RlYnVnKCIlcyBkcnhfZndfaXhfdCBvdXQgb2YgcmFuZ2VcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXByX2RlYnVnKCIlcyAlc1xuIiwgX19GVU5DVElPTl9fLCBibG9iX25hbWVbaXhdKTsKKwlwcl9kZWJ1ZygiJXMgJXNcbiIsIF9fZnVuY19fLCBibG9iX25hbWVbaXhdKTsKIAogCXJlYWRfbG9jaygmZndbcy0+Y2hpcF9yZXZdLmxvY2spOwogCWRhdGEgPSBmd1tzLT5jaGlwX3Jldl0uZGF0YVtpeF07CkBAIC0yMjksMzMgKzIyOCwzMyBAQAogCQkJZ290byBleGl0X3JjOwogCQl9CiAJfQotICAgICAgZXhpdF9yYzoKK2V4aXRfcmM6CiAJcmVhZF91bmxvY2soJmZ3W3MtPmNoaXBfcmV2XS5sb2NrKTsKKwogCXJldHVybiAwOwogfQogCiAvKiBGdW5jdGlvbiBpcyBub3QgZW5kaWFuIHNhZmUsIHVzZSB0aGUgUkQxNiB3cmFwcGVyIGJlbG93ICovCi1zdGF0aWMgaW50IF9yZWFkMTYoc3RydWN0IGRyeDM5N3hEX3N0YXRlICpzLCB1MzIgaTJjX2FkcikKK3N0YXRpYyBpbnQgX3JlYWQxNihzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMsIF9fbGUzMiBpMmNfYWRyKQogewogCWludCByYzsKIAl1OCBhWzRdOwotCXUxNiB2OworCV9fbGUxNiB2OwogCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKIAkJewotCQkgLmFkZHIgPSBzLT5jb25maWcuZGVtb2RfYWRkcmVzcywKLQkJIC5mbGFncyA9IDAsCi0JCSAuYnVmID0gYSwKLQkJIC5sZW4gPSBzaXplb2YoYSkKLQkJIH0KLQkJLCB7Ci0JCSAgIC5hZGRyID0gcy0+Y29uZmlnLmRlbW9kX2FkZHJlc3MsCi0JCSAgIC5mbGFncyA9IEkyQ19NX1JELAotCQkgICAuYnVmID0gKHU4ICopICYgdiwKLQkJICAgLmxlbiA9IHNpemVvZih2KQotCQkgICB9CisJCQkuYWRkciA9IHMtPmNvbmZpZy5kZW1vZF9hZGRyZXNzLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgPSBhLAorCQkJLmxlbiA9IHNpemVvZihhKQorCQl9LCB7CisJCQkuYWRkciA9IHMtPmNvbmZpZy5kZW1vZF9hZGRyZXNzLAorCQkJLmZsYWdzID0gSTJDX01fUkQsCisJCQkuYnVmID0gKHU4ICopJnYsCisJCQkubGVuID0gc2l6ZW9mKHYpCisJCX0KIAl9OwogCi0JKih1MzIgKikgYSA9IGkyY19hZHI7CisJKihfX2xlMzIgKikgYSA9IGkyY19hZHI7CiAKIAlyYyA9IGkyY190cmFuc2ZlcihzLT5pMmMsIG1zZywgMik7CiAJaWYgKHJjICE9IDIpCkBAIC0yNjUsNyArMjY0LDcgQEAKIH0KIAogLyogRnVuY3Rpb24gaXMgbm90IGVuZGlhbiBzYWZlLCB1c2UgdGhlIFdSMTYuLiB3cmFwcGVycyBiZWxvdyAqLwotc3RhdGljIGludCBfd3JpdGUxNihzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMsIHUzMiBpMmNfYWRyLCB1MTYgdmFsKQorc3RhdGljIGludCBfd3JpdGUxNihzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMsIF9fbGUzMiBpMmNfYWRyLCBfX2xlMTYgdmFsKQogewogCXU4IGFbNl07CiAJaW50IHJjOwpAQCAtMjc2LDI4ICsyNzUsMjggQEAKIAkJLmxlbiA9IHNpemVvZihhKQogCX07CiAKLQkqKHUzMiAqKSBhID0gaTJjX2FkcjsKLQkqKHUxNiAqKSAmIGFbNF0gPSB2YWw7CisJKihfX2xlMzIgKilhID0gaTJjX2FkcjsKKwkqKF9fbGUxNiAqKSZhWzRdID0gdmFsOwogCiAJcmMgPSBpMmNfdHJhbnNmZXIocy0+aTJjLCAmbXNnLCAxKTsKIAlpZiAocmMgIT0gMSkKIAkJcmV0dXJuIC1FSU87CisKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBXUjE2KHNzLGFkciwgdmFsKSBcCisjZGVmaW5lIFdSMTYoc3MsIGFkciwgdmFsKSBcCiAJCV93cml0ZTE2KHNzLCBJMkNfQURSX0MwKGFkciksIGNwdV90b19sZTE2KHZhbCkpCi0jZGVmaW5lIFdSMTZfRTAoc3MsYWRyLCB2YWwpIFwKKyNkZWZpbmUgV1IxNl9FMChzcywgYWRyLCB2YWwpIFwKIAkJX3dyaXRlMTYoc3MsIEkyQ19BRFJfRTAoYWRyKSwgY3B1X3RvX2xlMTYodmFsKSkKLSNkZWZpbmUgUkQxNihzcyxhZHIpIFwKKyNkZWZpbmUgUkQxNihzcywgYWRyKSBcCiAJCV9yZWFkMTYoc3MsIEkyQ19BRFJfQzAoYWRyKSkKIAotI2RlZmluZSBFWElUX1JDKCBjbWQgKQlpZiAoIChyYyA9IChjbWQpKSA8IDApIGdvdG8gZXhpdF9yYworI2RlZmluZSBFWElUX1JDKGNtZCkJXAorCWlmICgocmMgPSAoY21kKSkgPCAwKQlcCisJCWdvdG8gZXhpdF9yYwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVHVuZXIgY2FsbGJhY2sKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KKy8qIFR1bmVyIGNhbGxiYWNrICovCiBzdGF0aWMgaW50IFBMTF9TZXQoc3RydWN0IGRyeDM5N3hEX3N0YXRlICpzLAogCQkgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCwgaW50ICpkZl90dW5lcikKIHsKQEAgLTMwNSw3ICszMDQsNyBAQAogCXUzMiBmX3R1bmVyLCBmID0gZmVwLT5mcmVxdWVuY3k7CiAJaW50IHJjOwogCi0JcHJfZGVidWcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKChmID4gcy0+ZnJvbnRlbmQub3BzLnR1bmVyX29wcy5pbmZvLmZyZXF1ZW5jeV9tYXgpIHx8CiAJICAgIChmIDwgcy0+ZnJvbnRlbmQub3BzLnR1bmVyX29wcy5pbmZvLmZyZXF1ZW5jeV9taW4pKQpAQCAtMzI1LDI4ICszMjQsMjYgQEAKIAkJcmV0dXJuIHJjOwogCiAJKmRmX3R1bmVyID0gZl90dW5lciAtIGY7Ci0JcHJfZGVidWcoIiVzIHJlcXVlc3RlZCAlZCBbSHpdIHR1bmVyICVkIFtIel1cbiIsIF9fRlVOQ1RJT05fXywgZiwKKwlwcl9kZWJ1ZygiJXMgcmVxdWVzdGVkICVkIFtIel0gdHVuZXIgJWQgW0h6XVxuIiwgX19mdW5jX18sIGYsCiAJCSBmX3R1bmVyKTsKIAogCXJldHVybiAwOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRGVtb2R1bGF0b3IgaGVscGVyIGZ1bmN0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQorLyogRGVtb2R1bGF0b3IgaGVscGVyIGZ1bmN0aW9ucyAqLwogc3RhdGljIGludCBTQ19XYWl0Rm9yUmVhZHkoc3RydWN0IGRyeDM5N3hEX3N0YXRlICpzKQogewogCWludCBjbnQgPSAxMDAwOwogCWludCByYzsKIAotCXByX2RlYnVnKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKIAogCXdoaWxlIChjbnQtLSkgewogCQlyYyA9IFJEMTYocywgMHg4MjAwNDMpOwogCQlpZiAocmMgPT0gMCkKIAkJCXJldHVybiAwOwogCX0KKwogCXJldHVybiAtMTsKIH0KIApAQCAtMzU0LDEzICszNTEsMTQgQEAKIHsKIAlpbnQgcmM7CiAKLQlwcl9kZWJ1ZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlXUjE2KHMsIDB4ODIwMDQzLCBjbWQpOwogCVNDX1dhaXRGb3JSZWFkeShzKTsKIAlyYyA9IFJEMTYocywgMHg4MjAwNDIpOwogCWlmICgocmMgJiAweGZmZmYpID09IDB4ZmZmZikKIAkJcmV0dXJuIC0xOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2OCw3ICszNjYsNyBAQAogewogCWludCByYywgY250ID0gMTAwMDsKIAotCXByX2RlYnVnKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKIAogCXJjID0gV1IxNihzLCAweDQyMDAzMiwgY21kKTsKIAlpZiAocmMgPCAwKQpAQCAtMzgzLDIyICszODEsMjQgQEAKIAkJaWYgKHJjIDwgMCkKIAkJCXJldHVybiByYzsKIAl9IHdoaWxlICgtLWNudCk7CisKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgSElfQ2ZnQ29tbWFuZChzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMpCiB7CiAKLQlwcl9kZWJ1ZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlXUjE2KHMsIDB4NDIwMDMzLCAweDM5NzMpOwotCVdSMTYocywgMHg0MjAwMzQsIHMtPmNvbmZpZy53NTApOwkvLyBjb2RlIDQsIGxvZyA0Ci0JV1IxNihzLCAweDQyMDAzNSwgcy0+Y29uZmlnLnc1Mik7CS8vIGNvZGUgMTUsICBsb2cgOQorCVdSMTYocywgMHg0MjAwMzQsIHMtPmNvbmZpZy53NTApOwkvKiBjb2RlIDQsIGxvZyA0ICovCisJV1IxNihzLCAweDQyMDAzNSwgcy0+Y29uZmlnLnc1Mik7CS8qIGNvZGUgMTUsICBsb2cgOSAqLwogCVdSMTYocywgMHg0MjAwMzYsIHMtPmNvbmZpZy5kZW1vZF9hZGRyZXNzIDw8IDEpOwotCVdSMTYocywgMHg0MjAwMzcsIHMtPmNvbmZpZy53NTYpOwkvLyBjb2RlIChzZXRfaTJjID8/ICBpbml0WCAxICksIGxvZyAxCi0vLyAgICAgIFdSMTYocywgMHg0MjAwMzMsIDB4Mzk3Myk7CisJV1IxNihzLCAweDQyMDAzNywgcy0+Y29uZmlnLnc1Nik7CS8qIGNvZGUgKHNldF9pMmMgPz8gIGluaXRYIDEgKSwgbG9nIDEgKi8KKwkvKiBXUjE2KHMsIDB4NDIwMDMzLCAweDM5NzMpOyAqLwogCWlmICgocy0+Y29uZmlnLnc1NiAmIDgpID09IDApCiAJCXJldHVybiBISV9Db21tYW5kKHMsIDMpOworCiAJcmV0dXJuIFdSMTYocywgMHg0MjAwMzIsIDB4Myk7CiB9CiAKQEAgLTQxOSw3ICs0MTksNyBAQAogCXUxNiB3MEMgPSBhZ2MtPncwQzsKIAlpbnQgcXVvdCwgcmVtLCBpLCByYyA9IC1FSU5WQUw7CiAKLQlwcl9kZWJ1ZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoYWdjLT53MDQgPiAweDNmZikKIAkJZ290byBleGl0X3JjOwpAQCAtNDY4LDcgKzQ2OCw3IEBACiAJaSA9IHNsb3dJbmNyRGVjTFVUXzE1MjcyW3JlbSAvIDI4XTsKIAlFWElUX1JDKFdSMTYocywgMHgwYzIwMDJiLCBpKSk7CiAJcmMgPSBXUjE2KHMsIDB4MGMyMDAyYywgaSk7Ci0gICAgICBleGl0X3JjOgorZXhpdF9yYzoKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCXUxNiB3MDYgPSBhZ2MtPncwNjsKIAlpbnQgcmMgPSAtMTsKIAotCXByX2RlYnVnKCIlcyAlZCAweCV4IDB4JXhcbiIsIF9fRlVOQ1RJT05fXywgYWdjLT5kMDAsIHcwNCwgdzA2KTsKKwlwcl9kZWJ1ZygiJXMgJWQgMHgleCAweCV4XG4iLCBfX2Z1bmNfXywgYWdjLT5kMDAsIHcwNCwgdzA2KTsKIAogCWlmICh3MDQgPiAweDNmZikKIAkJZ290byBleGl0X3JjOwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAJCXJjICY9IH4yOwogCQlicmVhazsKIAljYXNlIDA6Ci0JCS8vIGxvY184MDAwNjU5CisJCS8qIGxvY184MDAwNjU5ICovCiAJCXMtPmNvbmZpZy53OUMgJj0gfjI7CiAJCUVYSVRfUkMoV1IxNihzLCAweDBjMjAwMTUsIHMtPmNvbmZpZy53OUMpKTsKIAkJRVhJVF9SQyhSRDE2KHMsIDB4MGMyMDAxMCkpOwpAQCAtNTIyLDcgKzUyMiw4IEBACiAJCXJjIHw9IDI7CiAJfQogCXJjID0gV1IxNihzLCAweDBjMjAwMTMsIHJjKTsKLSAgICAgIGV4aXRfcmM6CisKK2V4aXRfcmM6CiAJcmV0dXJuIHJjOwogfQogCkBAIC01NTQsNyArNTU1LDcgQEAKIAlpbnQgbG9ja3N0YXQ7CiAJdTMyIGNsaywgY2xrX2xpbWl0OwogCi0JcHJfZGVidWcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKHMtPmNvbmZpZy5kNUMgPT0gMCkgewogCQlFWElUX1JDKFdSMTYocywgMHgwODIwMGU4LCAweDAxMCkpOwpAQCAtNTk4LDExICs1OTksMTIgQEAKIAogCWlmIChjbGsgLSBzLT5jb25maWcuZl9vc2MgKiAxMDAwICsgY2xrX2xpbWl0IDw9IDIgKiBjbGtfbGltaXQpIHsKIAkJcy0+Zl9vc2MgPSBjbGs7Ci0JCXByX2RlYnVnKCIlczogb3NjICVkICVkIFtIel1cbiIsIF9fRlVOQ1RJT05fXywKKwkJcHJfZGVidWcoIiVzOiBvc2MgJWQgJWQgW0h6XVxuIiwgX19mdW5jX18sCiAJCQkgcy0+Y29uZmlnLmZfb3NjICogMTAwMCwgY2xrIC0gcy0+Y29uZmlnLmZfb3NjICogMTAwMCk7CiAJfQogCXJjID0gV1IxNihzLCAweDA4MjAwZTgsIDApOwotICAgICAgZXhpdF9yYzoKKworZXhpdF9yYzoKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTYxMCw3ICs2MTIsNyBAQAogewogCWludCByYywgc2ksIGJwOwogCi0JcHJfZGVidWcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOwogCiAJc2kgPSBzLT5jb25maWcud0EwOwogCWlmIChzLT5jb25maWcudzk4ID09IDApIHsKQEAgLTYyMCwxNyArNjIyLDE3IEBACiAJCXNpICY9IH4xOwogCQlicCA9IDB4MjAwOwogCX0KLQlpZiAocy0+Y29uZmlnLnc5QSA9PSAwKSB7CisJaWYgKHMtPmNvbmZpZy53OUEgPT0gMCkKIAkJc2kgfD0gMHg4MDsKLQl9IGVsc2UgeworCWVsc2UKIAkJc2kgJj0gfjB4ODA7Ci0JfQogCiAJRVhJVF9SQyhXUjE2KHMsIDB4MjE1MDA0NSwgMCkpOwogCUVYSVRfUkMoV1IxNihzLCAweDIxNTAwMTAsIHNpKSk7CiAJRVhJVF9SQyhXUjE2KHMsIDB4MjE1MDAxMSwgYnApKTsKIAlyYyA9IFdSMTYocywgMHgyMTUwMDEyLCAodHlwZSA9PSAwID8gMHhmZmYgOiAwKSk7Ci0gICAgICBleGl0X3JjOgorCitleGl0X3JjOgogCXJldHVybiByYzsKIH0KIApAQCAtNjQ2LDcgKzY0OCw3IEBACiAKIAlpbnQgcmMsIGRmX3R1bmVyOwogCWludCBhLCBiLCBjLCBkOwotCXByX2RlYnVnKCIlcyAlZFxuIiwgX19GVU5DVElPTl9fLCBzLT5jb25maWcuZDYwKTsKKwlwcl9kZWJ1ZygiJXMgJWRcbiIsIF9fZnVuY19fLCBzLT5jb25maWcuZDYwKTsKIAogCWlmIChzLT5jb25maWcuZDYwICE9IDIpCiAJCWdvdG8gc2V0X3R1bmVyOwpAQCAtNjU4LDcgKzY2MCw3IEBACiAJcmMgPSBDb25maWd1cmVNUEVHT3V0cHV0KHMsIDApOwogCWlmIChyYyA8IDApCiAJCWdvdG8gc2V0X3R1bmVyOwotICAgICAgc2V0X3R1bmVyOgorc2V0X3R1bmVyOgogCiAJcmMgPSBQTExfU2V0KHMsIGZlcCwgJmRmX3R1bmVyKTsKIAlpZiAocmMgPCAwKSB7CkBAIC04MzUsMTYgKzgzNywxNiBAQAogCQlyYyA9IFdSMTYocywgMHgyMDEwMDEyLCAwKTsKIAkJaWYgKHJjIDwgMCkKIAkJCWdvdG8gZXhpdF9yYzsKLQkJLy8gICAgICAgICAgICAgIFFQU0sgICAgUUFNMTYgICBRQU02NAotCQllYnggPSAweDE5ZjsJLy8gICAgICAgICAgICAgICAgIDYyCi0JCWVicCA9IDB4MWZiOwkvLyAgICAgICAgICAgICAgICAgMTUKLQkJdjIwID0gMHgxNmE7CS8vICA2MgotCQl2MUUgPSAweDE5NTsJLy8gICAgICAgICA2MgotCQl2MTYgPSAweDFiYjsJLy8gIDE1Ci0JCXYxNCA9IDB4MWVmOwkvLyAgICAgICAgIDE1Ci0JCXYxMiA9IDU7CS8vICAxNgotCQl2MTAgPSA1OwkvLyAgICAgICAgIDE2Ci0JCXYwRSA9IDU7CS8vICAgICAgICAgICAgICAgICAxNgorCQkJCS8qIFFQU0sgICAgUUFNMTYgIFFBTTY0CSovCisJCWVieCA9IDB4MTlmOwkvKiAgICAgICAgICAgICAgICAgNjIJKi8KKwkJZWJwID0gMHgxZmI7CS8qICAgICAgICAgICAgICAgICAxNQkqLworCQl2MjAgPSAweDE2YTsJLyogIDYyCQkJKi8KKwkJdjFFID0gMHgxOTU7CS8qICAgICAgICAgNjIJCSovCisJCXYxNiA9IDB4MWJiOwkvKiAgMTUJCQkqLworCQl2MTQgPSAweDFlZjsJLyogICAgICAgICAxNQkJKi8KKwkJdjEyID0gNTsJLyogIDE2CQkJKi8KKwkJdjEwID0gNTsJLyogICAgICAgICAxNgkJKi8KKwkJdjBFID0gNTsJLyogICAgICAgICAgICAgICAgIDE2CSovCiAJfQogCiAJc3dpdGNoIChmZXAtPnUub2ZkbS5jb25zdGVsbGF0aW9uKSB7CkBAIC05OTcsMTcgKzk5OSwxNyBAQAogCWNhc2UgQkFORFdJRFRIXzhfTUhaOgkvKiAwICovCiAJY2FzZSBCQU5EV0lEVEhfQVVUTzoKIAkJcmMgPSBXUjE2KHMsIDB4MGMyMDAzZiwgMHgzMik7Ci0JCXMtPmJhbmR3aWR0aF9wYXJtID0gZWJ4ID0gMHg4YjgyNDk7CS8vIDkxNDI4NTcKKwkJcy0+YmFuZHdpZHRoX3Bhcm0gPSBlYnggPSAweDhiODI0OTsKIAkJZWR4ID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBCQU5EV0lEVEhfN19NSFo6CiAJCXJjID0gV1IxNihzLCAweDBjMjAwM2YsIDB4M2IpOwotCQlzLT5iYW5kd2lkdGhfcGFybSA9IGVieCA9IDB4N2ExMjAwOwkvLyA4MDAwMDAwCisJCXMtPmJhbmR3aWR0aF9wYXJtID0gZWJ4ID0gMHg3YTEyMDA7CiAJCWVkeCA9IDB4NDgwNzsKIAkJYnJlYWs7CiAJY2FzZSBCQU5EV0lEVEhfNl9NSFo6CiAJCXJjID0gV1IxNihzLCAweDBjMjAwM2YsIDB4NDcpOwotCQlzLT5iYW5kd2lkdGhfcGFybSA9IGVieCA9IDB4NjhhMWI2OwkvLyA2ODU3MTQyCisJCXMtPmJhbmR3aWR0aF9wYXJtID0gZWJ4ID0gMHg2OGExYjY7CiAJCWVkeCA9IDB4MGYwNzsKIAkJYnJlYWs7CiAJfTsKQEAgLTEwNjAsOCArMTA2Miw2IEBACiAJV1IxNihzLCAweDA4MjAwNDAsIDEpOwogCVNDX1NlbmRDb21tYW5kKHMsIDEpOwogCi0vLyAgICAgIHJjID0gV1IxNihzLCAweDIxNTAwMDAsIDEpOwotLy8gICAgICBpZiAocmMgPCAwKSBnb3RvIGV4aXRfcmM7CiAKIAlyYyA9IFdSMTYocywgMHgyMTUwMDAwLCAyKTsKIAlyYyA9IFdSMTYocywgMHgyMTUwMDE2LCBhKTsKQEAgLTEwNjksNyArMTA2OSw4IEBACiAJcmMgPSBXUjE2KHMsIDB4MjE1MDAzNiwgMCk7CiAJcmMgPSBXUjE2KHMsIDB4MjE1MDAwMCwgMSk7CiAJcy0+Y29uZmlnLmQ2MCA9IDI7Ci0gICAgICBleGl0X3JjOgorCitleGl0X3JjOgogCXJldHVybiByYzsKIH0KIApAQCAtMTA4Miw3ICsxMDgzLDcgQEAKIAlzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgcmM7CiAKLQlwcl9kZWJ1ZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzLT5jb25maWcucmZhZ2MuZDAwID0gMjsJLyogMHg3YyAqLwogCXMtPmNvbmZpZy5yZmFnYy53MDQgPSAwOwpAQCAtMTEwMiwxOCArMTEwMywxOCBAQAogCiAJLyogSElfQ2ZnQ29tbWFuZCAqLwogCXMtPmNvbmZpZy53NTAgPSA0OwotCXMtPmNvbmZpZy53NTIgPSA5OwkvLyAweGY7CisJcy0+Y29uZmlnLnc1MiA9IDk7CiAKLQlzLT5jb25maWcuZl9pZiA9IDQyODAwMDAwOwkvKiBkMTQ6IGludGVybWVkaWF0ZSBmcmVxdWVuY3kgW0h6XSAgICAgKi8KLQlzLT5jb25maWcuZl9vc2MgPSA0ODAwMDsJLyogczY2IDogb3NjaWxsYXRvciBmcmVxdWVuY3kgW2tIel0gICAgICovCi0Jcy0+Y29uZmlnLnc5MiA9IDEyMDAwOwkvLyAyMDAwMDsKKwlzLT5jb25maWcuZl9pZiA9IDQyODAwMDAwOwkvKiBkMTQ6IGludGVybWVkaWF0ZSBmcmVxdWVuY3kgW0h6XSAqLworCXMtPmNvbmZpZy5mX29zYyA9IDQ4MDAwOwkvKiBzNjYgOiBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBba0h6XSAqLworCXMtPmNvbmZpZy53OTIgPSAxMjAwMDsKIAogCXMtPmNvbmZpZy53OUMgPSAweDAwMGU7CiAJcy0+Y29uZmlnLnc5RSA9IDB4MDAwMDsKIAogCS8qIENvbmZpZ3VyZU1QRUdPdXRwdXQgcGFyYW1zICovCiAJcy0+Y29uZmlnLndBMCA9IDQ7Ci0Jcy0+Y29uZmlnLnc5OCA9IDE7CS8vIDA7CisJcy0+Y29uZmlnLnc5OCA9IDE7CiAJcy0+Y29uZmlnLnc5QSA9IDE7CiAKIAkvKiBnZXQgY2hpcCByZXZpc2lvbiAqLwpAQCAtMTI0OCw3ICsxMjQ5LDcgQEAKIAkJcmMgPSBXUjE2KHMsIDB4MGMyMDAxMiwgMSk7CiAJfQogCi0gICAgICB3cml0ZV9EUlhEX0luaXRGRV8xOgord3JpdGVfRFJYRF9Jbml0RkVfMToKIAogCXJjID0gd3JpdGVfZncocywgRFJYRF9Jbml0RkVfMSk7CiAJaWYgKHJjIDwgMCkKQEAgLTEzMTEsNyArMTMxMiw4IEBACiAJcy0+Y29uZmlnLmQ1QyA9IDA7CiAJcy0+Y29uZmlnLmQ2MCA9IDE7CiAJcy0+Y29uZmlnLmQ0OCA9IDE7Ci0gICAgICBlcnJvcjoKKworZXJyb3I6CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMzI2LDcgKzEzMjgsOCBAQAogewogCXN0cnVjdCBkcngzOTd4RF9zdGF0ZSAqcyA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0Jcy0+Y29uZmlnLnMyMGQyNCA9IDE7CS8vIDA7CisJcy0+Y29uZmlnLnMyMGQyNCA9IDE7CisKIAlyZXR1cm4gZHJ4X3R1bmUocywgcGFyYW1zKTsKIH0KIApAQCAtMTMzNywxOCArMTM0MCwxNiBAQAogCWZlX3R1bmVfc2V0dGluZ3MtPm1pbl9kZWxheV9tcyA9IDEwMDAwOwogCWZlX3R1bmVfc2V0dGluZ3MtPnN0ZXBfc2l6ZSA9IDA7CiAJZmVfdHVuZV9zZXR0aW5ncy0+bWF4X2RyaWZ0ID0gMDsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRyeDM5N3hfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICogc3RhdHVzKQorc3RhdGljIGludCBkcngzOTd4X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewogCXN0cnVjdCBkcngzOTd4RF9zdGF0ZSAqcyA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWludCBsb2Nrc3RhdDsKIAogCUdldExvY2tTdGF0dXMocywgJmxvY2tzdGF0KTsKLQkvKiBUT0RPICovCi0vLyAgICAgIGlmIChsb2Nrc3RhdCAmIDEpCi0vLyAgICAgIENvcnJlY3RTeXNDbG9ja0RldmlhdGlvbihzKTsKIAogCSpzdGF0dXMgPSAwOwogCWlmIChsb2Nrc3RhdCAmIDIpIHsKQEAgLTEzNTYsOSArMTM1Nyw4IEBACiAJCUNvbmZpZ3VyZU1QRUdPdXRwdXQocywgMSk7CiAJCSpzdGF0dXMgPSBGRV9IQVNfTE9DSyB8IEZFX0hBU19TWU5DIHwgRkVfSEFTX1ZJVEVSQkk7CiAJfQotCWlmIChsb2Nrc3RhdCAmIDQpIHsKKwlpZiAobG9ja3N0YXQgJiA0KQogCQkqc3RhdHVzIHw9IEZFX0hBU19DQVJSSUVSIHwgRkVfSEFTX1NJR05BTDsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNjYsMTYgKzEzNjYsMTggQEAKIHN0YXRpYyBpbnQgZHJ4Mzk3eF9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdW5zaWduZWQgaW50ICpiZXIpCiB7CiAJKmJlciA9IDA7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkcngzOTd4X3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKiBzbnIpCitzdGF0aWMgaW50IGRyeDM5N3hfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQogewogCSpzbnIgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHJ4Mzk3eF9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICogc3RyZW5ndGgpCitzdGF0aWMgaW50IGRyeDM5N3hfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc3RyZW5ndGgpCiB7CiAJc3RydWN0IGRyeDM5N3hEX3N0YXRlICpzID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IHJjOwpAQCAtMTQwMSw2ICsxNDAzLDcgQEAKIAkgKiBUaGUgZm9sbG93aW5nIGRvZXMgdGhlIHNhbWUgYnV0IHdpdGggbGVzcyByb3VuZGluZyBlcnJvcnM6CiAJICovCiAJKnN0cmVuZ3RoID0gfig3NzIwICsgKHJjICogMzA3NDQgPj4gMTApKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNDA4LDYgKzE0MTEsNyBAQAogCQkJCSB1bnNpZ25lZCBpbnQgKnVjYmxvY2tzKQogewogCSp1Y2Jsb2NrcyA9IDA7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQzNiwyMiArMTQ0MCwyMiBAQAogCQkgLmZyZXF1ZW5jeV9tYXgJCT0gODU1MjUwMDAwLAogCQkgLmZyZXF1ZW5jeV9zdGVwc2l6ZQk9IDE2NjY2NywKIAkJIC5mcmVxdWVuY3lfdG9sZXJhbmNlCT0gMCwKLQkJIC5jYXBzID0JCQkJCS8qIDB4MEMwMUIyRUFFICovCi0JCQkgRkVfQ0FOX0ZFQ18xXzIJCQl8CS8vID0gMHgyLAotCQkJIEZFX0NBTl9GRUNfMl8zCQkJfAkvLyA9IDB4NCwKLQkJCSBGRV9DQU5fRkVDXzNfNAkJCXwJLy8gPSAweDgsCi0JCQkgRkVfQ0FOX0ZFQ181XzYJCQl8CS8vID0gMHgyMCwKLQkJCSBGRV9DQU5fRkVDXzdfOAkJCXwJLy8gPSAweDgwLAotCQkJIEZFX0NBTl9GRUNfQVVUTwkJfAkvLyA9IDB4MjAwLAotCQkJIEZFX0NBTl9RUFNLCQkJfAkvLyA9IDB4NDAwLAotCQkJIEZFX0NBTl9RQU1fMTYJCQl8CS8vID0gMHg4MDAsCi0JCQkgRkVfQ0FOX1FBTV82NAkJCXwJLy8gPSAweDIwMDAsCi0JCQkgRkVfQ0FOX1FBTV9BVVRPCQl8CS8vID0gMHgxMDAwMCwKLQkJCSBGRV9DQU5fVFJBTlNNSVNTSU9OX01PREVfQVVUTwl8CS8vID0gMHgyMDAwMCwKLQkJCSBGRV9DQU5fR1VBUkRfSU5URVJWQUxfQVVUTwl8CS8vID0gMHg4MDAwMCwKLQkJCSBGRV9DQU5fSElFUkFSQ0hZX0FVVE8JCXwJLy8gPSAweDEwMDAwMCwKLQkJCSBGRV9DQU5fUkVDT1ZFUgkJCXwJLy8gPSAweDQwMDAwMDAwLAotCQkJIEZFX0NBTl9NVVRFX1RTCQkJCS8vID0gMHg4MDAwMDAwMAorCQkgLmNhcHMgPQkJCQkgIC8qIDB4MEMwMUIyRUFFICovCisJCQkgRkVfQ0FOX0ZFQ18xXzIJCQl8IC8qID0gMHgyLCAqLworCQkJIEZFX0NBTl9GRUNfMl8zCQkJfCAvKiA9IDB4NCwgKi8KKwkJCSBGRV9DQU5fRkVDXzNfNAkJCXwgLyogPSAweDgsICovCisJCQkgRkVfQ0FOX0ZFQ181XzYJCQl8IC8qID0gMHgyMCwgKi8KKwkJCSBGRV9DQU5fRkVDXzdfOAkJCXwgLyogPSAweDgwLCAqLworCQkJIEZFX0NBTl9GRUNfQVVUTwkJfCAvKiA9IDB4MjAwLCAqLworCQkJIEZFX0NBTl9RUFNLCQkJfCAvKiA9IDB4NDAwLCAqLworCQkJIEZFX0NBTl9RQU1fMTYJCQl8IC8qID0gMHg4MDAsICovCisJCQkgRkVfQ0FOX1FBTV82NAkJCXwgLyogPSAweDIwMDAsICovCisJCQkgRkVfQ0FOX1FBTV9BVVRPCQl8IC8qID0gMHgxMDAwMCwgKi8KKwkJCSBGRV9DQU5fVFJBTlNNSVNTSU9OX01PREVfQVVUTwl8IC8qID0gMHgyMDAwMCwgKi8KKwkJCSBGRV9DQU5fR1VBUkRfSU5URVJWQUxfQVVUTwl8IC8qID0gMHg4MDAwMCwgKi8KKwkJCSBGRV9DQU5fSElFUkFSQ0hZX0FVVE8JCXwgLyogPSAweDEwMDAwMCwgKi8KKwkJCSBGRV9DQU5fUkVDT1ZFUgkJCXwgLyogPSAweDQwMDAwMDAwLCAqLworCQkJIEZFX0NBTl9NVVRFX1RTCQkJICAvKiA9IDB4ODAwMDAwMDAgKi8KIAkgfSwKIAogCS5yZWxlYXNlID0gZHJ4Mzk3eF9yZWxlYXNlLApAQCAtMTQ3MiwzMyArMTQ3NiwzNSBAQAogc3RydWN0IGR2Yl9mcm9udGVuZCAqZHJ4Mzk3eERfYXR0YWNoKGNvbnN0IHN0cnVjdCBkcngzOTd4RF9jb25maWcgKmNvbmZpZywKIAkJCQkgICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewotCXN0cnVjdCBkcngzOTd4RF9zdGF0ZSAqcyA9IE5VTEw7CisJc3RydWN0IGRyeDM5N3hEX3N0YXRlICpzdGF0ZTsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCi0JcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcngzOTd4RF9zdGF0ZSksIEdGUF9LRVJORUwpOwotCWlmIChzID09IE5VTEwpCisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQogCQlnb3RvIGVycm9yOwogCiAJLyogc2V0dXAgdGhlIHN0YXRlICovCi0Jcy0+aTJjID0gaTJjOwotCW1lbWNweSgmcy0+Y29uZmlnLCBjb25maWcsIHNpemVvZihzdHJ1Y3QgZHJ4Mzk3eERfY29uZmlnKSk7CisJc3RhdGUtPmkyYyA9IGkyYzsKKwltZW1jcHkoJnN0YXRlLT5jb25maWcsIGNvbmZpZywgc2l6ZW9mKHN0cnVjdCBkcngzOTd4RF9jb25maWcpKTsKIAogCS8qIGNoZWNrIGlmIHRoZSBkZW1vZCBpcyB0aGVyZSAqLwotCWlmIChSRDE2KHMsIDB4MjQxMDAxOSkgPCAwKQorCWlmIChSRDE2KHN0YXRlLCAweDI0MTAwMTkpIDwgMCkKIAkJZ290byBlcnJvcjsKIAogCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KLQltZW1jcHkoJnMtPmZyb250ZW5kLm9wcywgJmRyeDM5N3hfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKLQlzLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gczsKKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZkcngzOTd4X29wcywKKwkJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CiAKLQlyZXR1cm4gJnMtPmZyb250ZW5kOwotICAgICAgZXJyb3I6Ci0Ja2ZyZWUocyk7CisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CitlcnJvcjoKKwlrZnJlZShzdGF0ZSk7CisKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woZHJ4Mzk3eERfYXR0YWNoKTsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNaWNyb25hcyBEUlgzOTd4RCBEVkItVCBGcm9udGVuZCIpOwogTU9EVUxFX0FVVEhPUigiSGVuayBWZXJnb25ldCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1FWFBPUlRfU1lNQk9MKGRyeDM5N3hEX2F0dGFjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHJ4Mzk3eEQuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5oCmluZGV4IGRkYzdhMDcuLmJhMDVkMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5oCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lIERSWF9GX09GRlNFVAkzNjAwMDAwMAogCiAjZGVmaW5lIEkyQ19BRFJfQzAoeCkgXAotKAkodTMyKWNwdV90b19sZTMyKCBcCisoCWNwdV90b19sZTMyKCBcCiAJCSh1MzIpKCBcCiAJCQkoKCh1MzIpKHgpICYgKHUzMikweDAwMDAwMGZmVUwpICAgICAgKSB8IFwKIAkJCSgoKHUzMikoeCkgJiAodTMyKTB4MDAwMGZmMDBVTCkgPDwgMTYpIHwgXApAQCAtMzgsNyArMzgsNyBAQAogKQogCiAjZGVmaW5lIEkyQ19BRFJfRTAoeCkgXAotKAkodTMyKWNwdV90b19sZTMyKCBcCisoCWNwdV90b19sZTMyKCBcCiAJCSh1MzIpKCBcCiAJCQkoKCh1MzIpKHgpICYgKHUzMikweDAwMDAwMGZmVUwpICAgICAgKSB8IFwKIAkJCSgoKHUzMikoeCkgJiAodTMyKTB4MDAwMGZmMDBVTCkgPDwgMTYpIHwgXApAQCAtMTIyLDcgKzEyMiw3IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGRyeDM5N3hEX2F0dGFjaChjb25zdCBzdHJ1Y3QgZHJ4Mzk3eERfY29uZmlnICpjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19GVU5DVElPTl9fKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gTlVMTDsKIH0KICNlbmRpZiAvKiBDT05GSUdfRFZCX0RSWDM5N1hEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiX2R1bW15X2ZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiX2R1bW15X2ZlLmMKaW5kZXggZmVkMDlkZi4uZGI4YTkzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yl9kdW1teV9mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmJfZHVtbXlfZmUuYwpAQCAtNzUsOSArNzUsMTAgQEAKIAogc3RhdGljIGludCBkdmJfZHVtbXlfZmVfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7Ci0JaWYgKGZlLT5vcHMtPnR1bmVyX29wcy0+c2V0X3BhcmFtcykgewotCQlmZS0+b3BzLT50dW5lcl9vcHMtPnNldF9wYXJhbXMoZmUsIHApOwotCQlpZiAoZmUtPm9wcy0+aTJjX2dhdGVfY3RybCkgZmUtPm9wcy0+aTJjX2dhdGVfY3RybChmZSwgMCk7CisJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpIHsKKwkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyhmZSwgcCk7CisJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTMxLDcgKzEzMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBkdmJfZHVtbXlfZmVfcXBza19vcHM7CiAKLXN0cnVjdCBkdmJfZnJvbnRlbmQqIGR2Yl9kdW1teV9mZV9xcHNrX2F0dGFjaCgpCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkdmJfZHVtbXlfZmVfcXBza19hdHRhY2godm9pZCkKIHsKIAlzdHJ1Y3QgZHZiX2R1bW15X2ZlX3N0YXRlKiBzdGF0ZSA9IE5VTEw7CiAKQEAgLTE1MSw3ICsxNTIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgZHZiX2R1bW15X2ZlX3FhbV9vcHM7CiAKLXN0cnVjdCBkdmJfZnJvbnRlbmQqIGR2Yl9kdW1teV9mZV9xYW1fYXR0YWNoKCkKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmR2Yl9kdW1teV9mZV9xYW1fYXR0YWNoKHZvaWQpCiB7CiAJc3RydWN0IGR2Yl9kdW1teV9mZV9zdGF0ZSogc3RhdGUgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZWRzMTU0Ny5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2VkczE1NDcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTc5YjdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2VkczE1NDcuaApAQCAtMCwwICsxLDEzMyBAQAorLyogZWRzMTU0Ny5oIEVhcmRhIEVEUy0xNTQ3IHR1bmVyIHN1cHBvcnQKKyoKKyogQ29weXJpZ2h0IChDKSAyMDA4IElnb3IgTS4gTGlwbGlhbmluIChsaXBsaWFuaW5AbWUuYnkpCisqCisqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKglGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyoKKyogc2VlIERvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kdmItdXNiIGZvciBtb3JlIGluZm9ybWF0aW9uCisqLworCisjaWZuZGVmIEVEUzE1NDcKKyNkZWZpbmUgRURTMTU0NworCitzdGF0aWMgdTggc3R2MDI4OF9lYXJkYV9pbml0dGFiW10gPSB7CisJMHgwMSwgMHg1NywKKwkweDAyLCAweDIwLAorCTB4MDMsIDB4OGUsCisJMHgwNCwgMHg4ZSwKKwkweDA1LCAweDEyLAorCTB4MDYsIDB4MDAsCisJMHgwNywgMHgwMCwKKwkweDA5LCAweDAwLAorCTB4MGEsIDB4MDQsCisJMHgwYiwgMHgwMCwKKwkweDBjLCAweDAwLAorCTB4MGQsIDB4MDAsCisJMHgwZSwgMHhkNCwKKwkweDBmLCAweDMwLAorCTB4MTEsIDB4NDQsCisJMHgxMiwgMHgwMywKKwkweDEzLCAweDQ4LAorCTB4MTQsIDB4ODQsCisJMHgxNSwgMHg0NSwKKwkweDE2LCAweGI3LAorCTB4MTcsIDB4OWMsCisJMHgxOCwgMHgwMCwKKwkweDE5LCAweGE2LAorCTB4MWEsIDB4ODgsCisJMHgxYiwgMHg4ZiwKKwkweDFjLCAweGYwLAorCTB4MjAsIDB4MGIsCisJMHgyMSwgMHg1NCwKKwkweDIyLCAweDAwLAorCTB4MjMsIDB4MDAsCisJMHgyYiwgMHhmZiwKKwkweDJjLCAweGY3LAorCTB4MzAsIDB4MDAsCisJMHgzMSwgMHgxZSwKKwkweDMyLCAweDE0LAorCTB4MzMsIDB4MGYsCisJMHgzNCwgMHgwOSwKKwkweDM1LCAweDBjLAorCTB4MzYsIDB4MDUsCisJMHgzNywgMHgyZiwKKwkweDM4LCAweDE2LAorCTB4MzksIDB4YmQsCisJMHgzYSwgMHgwMCwKKwkweDNiLCAweDEzLAorCTB4M2MsIDB4MTEsCisJMHgzZCwgMHgzMCwKKwkweDQwLCAweDYzLAorCTB4NDEsIDB4MDQsCisJMHg0MiwgMHg2MCwKKwkweDQzLCAweDAwLAorCTB4NDQsIDB4MDAsCisJMHg0NSwgMHgwMCwKKwkweDQ2LCAweDAwLAorCTB4NDcsIDB4MDAsCisJMHg0YSwgMHgwMCwKKwkweDUwLCAweDEwLAorCTB4NTEsIDB4MzYsCisJMHg1MiwgMHgwOSwKKwkweDUzLCAweDk0LAorCTB4NTQsIDB4NjIsCisJMHg1NSwgMHgyOSwKKwkweDU2LCAweDY0LAorCTB4NTcsIDB4MmIsCisJMHg1OCwgMHg1NCwKKwkweDU5LCAweDg2LAorCTB4NWEsIDB4MDAsCisJMHg1YiwgMHg5YiwKKwkweDVjLCAweDA4LAorCTB4NWQsIDB4N2YsCisJMHg1ZSwgMHgwMCwKKwkweDVmLCAweGZmLAorCTB4NzAsIDB4MDAsCisJMHg3MSwgMHgwMCwKKwkweDcyLCAweDAwLAorCTB4NzQsIDB4MDAsCisJMHg3NSwgMHgwMCwKKwkweDc2LCAweDAwLAorCTB4ODEsIDB4MDAsCisJMHg4MiwgMHgzZiwKKwkweDgzLCAweDNmLAorCTB4ODQsIDB4MDAsCisJMHg4NSwgMHgwMCwKKwkweDg4LCAweDAwLAorCTB4ODksIDB4MDAsCisJMHg4YSwgMHgwMCwKKwkweDhiLCAweDAwLAorCTB4OGMsIDB4MDAsCisJMHg5MCwgMHgwMCwKKwkweDkxLCAweDAwLAorCTB4OTIsIDB4MDAsCisJMHg5MywgMHgwMCwKKwkweDk0LCAweDFjLAorCTB4OTcsIDB4MDAsCisJMHhhMCwgMHg0OCwKKwkweGExLCAweDAwLAorCTB4YjAsIDB4YjgsCisJMHhiMSwgMHgzYSwKKwkweGIyLCAweDEwLAorCTB4YjMsIDB4ODIsCisJMHhiNCwgMHg4MCwKKwkweGI1LCAweDgyLAorCTB4YjYsIDB4ODIsCisJMHhiNywgMHg4MiwKKwkweGI4LCAweDIwLAorCTB4YjksIDB4MDAsCisJMHhmMCwgMHgwMCwKKwkweGYxLCAweDAwLAorCTB4ZjIsIDB4YzAsCisJMHhmZiwweGZmLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHYwMjg4X2NvbmZpZyBlYXJkYV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5taW5fZGVsYXlfbXMgPSAxMDAsCisJLmluaXR0YWIgPSBzdHYwMjg4X2VhcmRhX2luaXR0YWIsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ3M4Z2w1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdzOGdsNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NTg1MmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdzOGdsNS5jCkBAIC0wLDAgKzEsNDU0IEBACisvKgorICAgIExlZ2VuZCBTaWxpY29uIExHUy04R0w1IERNQi1USCBPRkRNIGRlbW9kdWxhdG9yIGRyaXZlcgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFNpcml1cyBJbnRlcm5hdGlvbmFsIChIb25nIEtvbmcpIExpbWl0ZWQKKwlUaW1vdGh5IExlZSA8dGltb3RoeS5sZWVAc2lyaXVzaGsuY29tPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgImxnczhnbDUuaCIKKworCisjZGVmaW5lIFJFR19SRVNFVAkJMHgwMgorI2RlZmluZSBSRUdfUkVTRVRfT0ZGCQkJMHgwMQorI2RlZmluZSBSRUdfMDMJCQkweDAzCisjZGVmaW5lIFJFR18wNAkJCTB4MDQKKyNkZWZpbmUgUkVHXzA3CQkJMHgwNworI2RlZmluZSBSRUdfMDkJCQkweDA5CisjZGVmaW5lIFJFR18wQQkJCTB4MGEKKyNkZWZpbmUgUkVHXzBCCQkJMHgwYgorI2RlZmluZSBSRUdfMEMJCQkweDBjCisjZGVmaW5lIFJFR18zNwkJCTB4MzcKKyNkZWZpbmUgUkVHX1NUUkVOR1RICQkweDRiCisjZGVmaW5lIFJFR19TVFJFTkdUSF9NQVNLCQkweDdmCisjZGVmaW5lIFJFR19TVFJFTkdUSF9DQVJSSUVSCQkweDgwCisjZGVmaW5lIFJFR19JTlZFUlNJT04JCTB4N2MKKyNkZWZpbmUgUkVHX0lOVkVSU0lPTl9PTgkJMHg4MAorI2RlZmluZSBSRUdfN0QJCQkweDdkCisjZGVmaW5lIFJFR183RQkJCTB4N2UKKyNkZWZpbmUgUkVHX0EyCQkJMHhhMgorI2RlZmluZSBSRUdfU1RBVFVTCQkweGE0CisjZGVmaW5lIFJFR19TVEFUVVNfU1lOQwkJMHgwNAorI2RlZmluZSBSRUdfU1RBVFVTX0xPQ0sJCTB4MDEKKworCitzdHJ1Y3QgbGdzOGdsNV9zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJY29uc3Qgc3RydWN0IGxnczhnbDVfY29uZmlnICpjb25maWc7CisJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKK307CisKKworc3RhdGljIGludCBkZWJ1ZzsKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZykgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgImxnczhnbDU6ICIgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisKKy8qIFdyaXRlcyBpbnRvIGRlbW9kJ3MgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbnQKK2xnczhnbDVfd3JpdGVfcmVnKHN0cnVjdCBsZ3M4Z2w1X3N0YXRlICpzdGF0ZSwgdTggcmVnLCB1OCBkYXRhKQoreworCWludCByZXQ7CisJdTggYnVmW10gPSB7cmVnLCBkYXRhfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyICA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCisJCS5mbGFncyA9IDAsCisJCS5idWYgICA9IGJ1ZiwKKwkJLmxlbiAgID0gMgorCX07CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSk7CisJaWYgKHJldCAhPSAxKQorCQlkcHJpbnRrKCIlczogZXJyb3IgKHJlZz0weCUwMngsIHZhbD0weCUwMngsIHJldD0laSlcbiIsCisJCQlfX2Z1bmNfXywgcmVnLCBkYXRhLCByZXQpOworCXJldHVybiAocmV0ICE9IDEpID8gLTEgOiAwOworfQorCisKKy8qIFJlYWRzIGZyb20gZGVtb2QncyByZWdpc3RlciAqLworc3RhdGljIGludAorbGdzOGdsNV9yZWFkX3JlZyhzdHJ1Y3QgbGdzOGdsNV9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKK3sKKwlpbnQgcmV0OworCXU4IGIwW10gPSB7cmVnfTsKKwl1OCBiMVtdID0gezB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKKwkJeworCQkJLmFkZHIgID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCS5mbGFncyA9IDAsCisJCQkuYnVmICAgPSBiMCwKKwkJCS5sZW4gICA9IDEKKwkJfSwKKwkJeworCQkJLmFkZHIgID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiAgID0gYjEsCisJCQkubGVuICAgPSAxCisJCX0KKwl9OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CisJaWYgKHJldCAhPSAyKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiBiMVswXTsKK30KKworCitzdGF0aWMgaW50CitsZ3M4Z2w1X3VwZGF0ZV9yZWcoc3RydWN0IGxnczhnbDVfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHU4IGRhdGEpCit7CisJbGdzOGdsNV9yZWFkX3JlZyhzdGF0ZSwgcmVnKTsKKwlsZ3M4Z2w1X3dyaXRlX3JlZyhzdGF0ZSwgcmVnLCBkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiBXcml0ZXMgaW50byBhbHRlcm5hdGUgZGV2aWNlJ3MgcmVnaXN0ZXIgKi8KKy8qIFRPRE86ICBGaW5kIG91dCB3aGF0IHRoYXQgZGV2aWNlIGlzIGZvciEgKi8KK3N0YXRpYyBpbnQKK2xnczhnbDVfdXBkYXRlX2FsdF9yZWcoc3RydWN0IGxnczhnbDVfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHU4IGRhdGEpCit7CisJaW50IHJldDsKKwl1OCBiMFtdID0ge3JlZ307CisJdTggYjFbXSA9IHswfTsKKwl1OCBiMltdID0ge3JlZywgZGF0YX07CisJc3RydWN0IGkyY19tc2cgbXNnWzNdID0geworCQl7CisJCQkuYWRkciAgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzICsgMiwKKwkJCS5mbGFncyA9IDAsCisJCQkuYnVmICAgPSBiMCwKKwkJCS5sZW4gICA9IDEKKwkJfSwKKwkJeworCQkJLmFkZHIgID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcyArIDIsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5idWYgICA9IGIxLAorCQkJLmxlbiAgID0gMQorCQl9LAorCQl7CisJCQkuYWRkciAgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzICsgMiwKKwkJCS5mbGFncyA9IDAsCisJCQkuYnVmICAgPSBiMiwKKwkJCS5sZW4gICA9IDIKKwkJfSwKKwl9OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMyk7CisJcmV0dXJuIChyZXQgIT0gMykgPyAtMSA6IDA7Cit9CisKKworc3RhdGljIHZvaWQKK2xnczhnbDVfc29mdF9yZXNldChzdHJ1Y3QgbGdzOGdsNV9zdGF0ZSAqc3RhdGUpCit7CisJdTggdmFsOworCisJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKworCXZhbCA9IGxnczhnbDVfcmVhZF9yZWcoc3RhdGUsIFJFR19SRVNFVCk7CisJbGdzOGdsNV93cml0ZV9yZWcoc3RhdGUsIFJFR19SRVNFVCwgdmFsICYgflJFR19SRVNFVF9PRkYpOworCWxnczhnbDVfd3JpdGVfcmVnKHN0YXRlLCBSRUdfUkVTRVQsIHZhbCB8IFJFR19SRVNFVF9PRkYpOworCW1zbGVlcCg1KTsKK30KKworCisvKiBTdGFydHMgZGVtb2R1bGF0aW9uICovCitzdGF0aWMgdm9pZAorbGdzOGdsNV9zdGFydF9kZW1vZChzdHJ1Y3QgbGdzOGdsNV9zdGF0ZSAqc3RhdGUpCit7CisJdTggIHZhbDsKKwlpbnQgbjsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlsZ3M4Z2w1X3VwZGF0ZV9hbHRfcmVnKHN0YXRlLCAweGMyLCAweDI4KTsKKwlsZ3M4Z2w1X3NvZnRfcmVzZXQoc3RhdGUpOworCWxnczhnbDVfdXBkYXRlX3JlZyhzdGF0ZSwgUkVHXzA3LCAweDEwKTsKKwlsZ3M4Z2w1X3VwZGF0ZV9yZWcoc3RhdGUsIFJFR18wNywgMHgxMCk7CisJbGdzOGdsNV93cml0ZV9yZWcoc3RhdGUsIFJFR18wOSwgMHgwZSk7CisJbGdzOGdsNV93cml0ZV9yZWcoc3RhdGUsIFJFR18wQSwgMHhlNSk7CisJbGdzOGdsNV93cml0ZV9yZWcoc3RhdGUsIFJFR18wQiwgMHgzNSk7CisJbGdzOGdsNV93cml0ZV9yZWcoc3RhdGUsIFJFR18wQywgMHgzMCk7CisKKwlsZ3M4Z2w1X3VwZGF0ZV9yZWcoc3RhdGUsIFJFR18wMywgMHgwMCk7CisJbGdzOGdsNV91cGRhdGVfcmVnKHN0YXRlLCBSRUdfN0UsIDB4MDEpOworCWxnczhnbDVfdXBkYXRlX2FsdF9yZWcoc3RhdGUsIDB4YzUsIDB4MDApOworCWxnczhnbDVfdXBkYXRlX3JlZyhzdGF0ZSwgUkVHXzA0LCAweDAyKTsKKwlsZ3M4Z2w1X3VwZGF0ZV9yZWcoc3RhdGUsIFJFR18zNywgMHgwMSk7CisJbGdzOGdsNV9zb2Z0X3Jlc2V0KHN0YXRlKTsKKworCS8qIFdhaXQgZm9yIGNhcnJpZXIgKi8KKwlmb3IgKG4gPSAwOyAgbiA8IDEwOyAgbisrKSB7CisJCXZhbCA9IGxnczhnbDVfcmVhZF9yZWcoc3RhdGUsIFJFR19TVFJFTkdUSCk7CisJCWRwcmludGsoIldhaXQgZm9yIGNhcnJpZXJbJWRdIDB4JTAyWFxuIiwgbiwgdmFsKTsKKwkJaWYgKHZhbCAmIFJFR19TVFJFTkdUSF9DQVJSSUVSKQorCQkJYnJlYWs7CisJCW1zbGVlcCg0KTsKKwl9CisJaWYgKCEodmFsICYgUkVHX1NUUkVOR1RIX0NBUlJJRVIpKQorCQlyZXR1cm47CisKKwkvKiBXYWl0IGZvciBsb2NrICovCisJZm9yIChuID0gMDsgIG4gPCAyMDsgIG4rKykgeworCQl2YWwgPSBsZ3M4Z2w1X3JlYWRfcmVnKHN0YXRlLCBSRUdfU1RBVFVTKTsKKwkJZHByaW50aygiV2FpdCBmb3IgbG9ja1slZF0gMHglMDJYXG4iLCBuLCB2YWwpOworCQlpZiAodmFsICYgUkVHX1NUQVRVU19MT0NLKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxMik7CisJfQorCWlmICghKHZhbCAmIFJFR19TVEFUVVNfTE9DSykpCisJCXJldHVybjsKKworCWxnczhnbDVfd3JpdGVfcmVnKHN0YXRlLCBSRUdfN0QsIGxnczhnbDVfcmVhZF9yZWcoc3RhdGUsIFJFR19BMikpOworCWxnczhnbDVfc29mdF9yZXNldChzdGF0ZSk7Cit9CisKKworc3RhdGljIGludAorbGdzOGdsNV9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBsZ3M4Z2w1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKworCWxnczhnbDVfdXBkYXRlX2FsdF9yZWcoc3RhdGUsIDB4YzIsIDB4MjgpOworCWxnczhnbDVfc29mdF9yZXNldChzdGF0ZSk7CisJbGdzOGdsNV91cGRhdGVfcmVnKHN0YXRlLCBSRUdfMDcsIDB4MTApOworCWxnczhnbDVfdXBkYXRlX3JlZyhzdGF0ZSwgUkVHXzA3LCAweDEwKTsKKwlsZ3M4Z2w1X3dyaXRlX3JlZyhzdGF0ZSwgUkVHXzA5LCAweDBlKTsKKwlsZ3M4Z2w1X3dyaXRlX3JlZyhzdGF0ZSwgUkVHXzBBLCAweGU1KTsKKwlsZ3M4Z2w1X3dyaXRlX3JlZyhzdGF0ZSwgUkVHXzBCLCAweDM1KTsKKwlsZ3M4Z2w1X3dyaXRlX3JlZyhzdGF0ZSwgUkVHXzBDLCAweDMwKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK2xnczhnbDVfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IGxnczhnbDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggbGV2ZWwgPSBsZ3M4Z2w1X3JlYWRfcmVnKHN0YXRlLCBSRUdfU1RSRU5HVEgpOworCXU4IGZsYWdzID0gbGdzOGdsNV9yZWFkX3JlZyhzdGF0ZSwgUkVHX1NUQVRVUyk7CisKKwkqc3RhdHVzID0gMDsKKworCWlmICgobGV2ZWwgJiBSRUdfU1RSRU5HVEhfTUFTSykgPiAwKQorCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CisJaWYgKGxldmVsICYgUkVHX1NUUkVOR1RIX0NBUlJJRVIpCisJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CisJaWYgKGZsYWdzICYgUkVHX1NUQVRVU19TWU5DKQorCQkqc3RhdHVzIHw9IEZFX0hBU19TWU5DOworCWlmIChmbGFncyAmIFJFR19TVEFUVVNfTE9DSykKKwkJKnN0YXR1cyB8PSBGRV9IQVNfTE9DSzsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK2xnczhnbDVfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQoreworCSpiZXIgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAorbGdzOGdsNV9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzaWduYWxfc3RyZW5ndGgpCit7CisJc3RydWN0IGxnczhnbDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggbGV2ZWwgPSBsZ3M4Z2w1X3JlYWRfcmVnKHN0YXRlLCBSRUdfU1RSRU5HVEgpOworCSpzaWduYWxfc3RyZW5ndGggPSAobGV2ZWwgJiBSRUdfU1RSRU5HVEhfTUFTSykgPDwgODsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK2xnczhnbDVfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXN0cnVjdCBsZ3M4Z2w1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGxldmVsID0gbGdzOGdsNV9yZWFkX3JlZyhzdGF0ZSwgUkVHX1NUUkVOR1RIKTsKKwkqc25yID0gKGxldmVsICYgUkVHX1NUUkVOR1RIX01BU0spIDw8IDg7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50CitsZ3M4Z2w1X3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdWNibG9ja3MpCit7CisJKnVjYmxvY2tzID0gMDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK2xnczhnbDVfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IGxnczhnbDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKHAtPnUub2ZkbS5iYW5kd2lkdGggIT0gQkFORFdJRFRIXzhfTUhaKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKSB7CisJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIHApOworCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwl9CisKKwkvKiBsZ3M4Z2w1X3NldF9pbnZlcnNpb24oc3RhdGUsIHAtPmludmVyc2lvbik7ICovCisKKwlsZ3M4Z2w1X3N0YXJ0X2RlbW9kKHN0YXRlKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK2xnczhnbDVfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IGxnczhnbDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggaW52ID0gbGdzOGdsNV9yZWFkX3JlZyhzdGF0ZSwgUkVHX0lOVkVSU0lPTik7CisJc3RydWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgKm8gPSAmcC0+dS5vZmRtOworCisJcC0+aW52ZXJzaW9uID0gKGludiAmIFJFR19JTlZFUlNJT05fT04pID8gSU5WRVJTSU9OX09OIDogSU5WRVJTSU9OX09GRjsKKworCW8tPmNvZGVfcmF0ZV9IUCA9IEZFQ18xXzI7CisJby0+Y29kZV9yYXRlX0xQID0gRkVDXzdfODsKKwlvLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMzI7CisJby0+dHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV8ySzsKKwlvLT5jb25zdGVsbGF0aW9uID0gUUFNXzY0OworCW8tPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9OT05FOworCW8tPmJhbmR3aWR0aCA9IEJBTkRXSURUSF84X01IWjsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK2xnczhnbDVfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCXN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqZmVzZXR0aW5ncykKK3sKKwlmZXNldHRpbmdzLT5taW5fZGVsYXlfbXMgPSAyNDA7CisJZmVzZXR0aW5ncy0+c3RlcF9zaXplICAgID0gMDsKKwlmZXNldHRpbmdzLT5tYXhfZHJpZnQgICAgPSAwOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkCitsZ3M4Z2w1X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGxnczhnbDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJa2ZyZWUoc3RhdGUpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBsZ3M4Z2w1X29wczsKKworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kKgorbGdzOGdsNV9hdHRhY2goY29uc3Qgc3RydWN0IGxnczhnbDVfY29uZmlnICpjb25maWcsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXN0cnVjdCBsZ3M4Z2w1X3N0YXRlICpzdGF0ZSA9IE5VTEw7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KKwlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsZ3M4Z2w1X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBTZXR1cCB0aGUgc3RhdGUgKi8KKwlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOworCXN0YXRlLT5pMmMgICAgPSBpMmM7CisKKwkvKiBDaGVjayBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKi8KKwlpZiAobGdzOGdsNV9yZWFkX3JlZyhzdGF0ZSwgUkVHX1JFU0VUKSA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBDcmVhdGUgZHZiX2Zyb250ZW5kICovCisJbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmbGdzOGdsNV9vcHMsCisJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisKK2Vycm9yOgorCWtmcmVlKHN0YXRlKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0wobGdzOGdsNV9hdHRhY2gpOworCisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBsZ3M4Z2w1X29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUJCQk9ICJMZWdlbmQgU2lsaWNvbiBMR1MtOEdMNSBETUItVEgiLAorCQkudHlwZQkJCT0gRkVfT0ZETSwKKwkJLmZyZXF1ZW5jeV9taW4JCT0gNDc0MDAwMDAwLAorCQkuZnJlcXVlbmN5X21heAkJPSA4NTgwMDAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUJPSAxMDAwMCwKKwkJLmZyZXF1ZW5jeV90b2xlcmFuY2UJPSAwLAorCQkuY2FwcyA9IEZFX0NBTl9GRUNfQVVUTyB8CisJCQlGRV9DQU5fUVBTSyB8IEZFX0NBTl9RQU1fMTYgfCBGRV9DQU5fUUFNXzMyIHwKKwkJCUZFX0NBTl9RQU1fNjQgfCBGRV9DQU5fUUFNX0FVVE8gfAorCQkJRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfAorCQkJRkVfQ0FOX0JBTkRXSURUSF9BVVRPIHwKKwkJCUZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPIHwKKwkJCUZFX0NBTl9ISUVSQVJDSFlfQVVUTyB8CisJCQlGRV9DQU5fUkVDT1ZFUgorCX0sCisKKwkucmVsZWFzZSA9IGxnczhnbDVfcmVsZWFzZSwKKworCS5pbml0ID0gbGdzOGdsNV9pbml0LAorCisJLnNldF9mcm9udGVuZCA9IGxnczhnbDVfc2V0X2Zyb250ZW5kLAorCS5nZXRfZnJvbnRlbmQgPSBsZ3M4Z2w1X2dldF9mcm9udGVuZCwKKwkuZ2V0X3R1bmVfc2V0dGluZ3MgPSBsZ3M4Z2w1X2dldF90dW5lX3NldHRpbmdzLAorCisJLnJlYWRfc3RhdHVzID0gbGdzOGdsNV9yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIgPSBsZ3M4Z2w1X3JlYWRfYmVyLAorCS5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9IGxnczhnbDVfcmVhZF9zaWduYWxfc3RyZW5ndGgsCisJLnJlYWRfc25yID0gbGdzOGdsNV9yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2NrcyA9IGxnczhnbDVfcmVhZF91Y2Jsb2NrcywKK307CisKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkxlZ2VuZCBTaWxpY29uIExHUy04R0w1IERNQi1USCBEZW1vZHVsYXRvciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlRpbW90aHkgTGVlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdzOGdsNS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnczhnbDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTQxNzY3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ3M4Z2w1LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAgICBMZWdlbmQgU2lsaWNvbiBMR1MtOEdMNSBETUItVEggT0ZETSBkZW1vZHVsYXRvciBkcml2ZXIKKworICAgIENvcHlyaWdodCAoQykgMjAwOCBTaXJpdXMgSW50ZXJuYXRpb25hbCAoSG9uZyBLb25nKSBMaW1pdGVkCisJVGltb3RoeSBMZWUgPHRpbW90aHkubGVlQHNpcml1c2hrLmNvbT4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaWZuZGVmIExHUzhHTDVfSAorI2RlZmluZSBMR1M4R0w1X0gKKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorCitzdHJ1Y3QgbGdzOGdsNV9jb25maWcgeworCS8qIHRoZSBkZW1vZHVsYXRvcidzIGkyYyBhZGRyZXNzICovCisJdTggZGVtb2RfYWRkcmVzczsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfTEdTOEdMNSkgfHwgXAorCShkZWZpbmVkKENPTkZJR19EVkJfTEdTOEdMNV9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsZ3M4Z2w1X2F0dGFjaCgKKwljb25zdCBzdHJ1Y3QgbGdzOGdsNV9jb25maWcgKmNvbmZpZywgc3RydWN0IGkyY19hZGFwdGVyICppMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqbGdzOGdsNV9hdHRhY2goCisJY29uc3Qgc3RydWN0IGxnczhnbDVfY29uZmlnICpjb25maWcsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKSB7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX0RWQl9MR1M4R0w1ICovCisKKyNlbmRpZiAvKiBMR1M4R0w1X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQyMDB4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0MjAweC5jCmluZGV4IGFmMjk4MzUuLmE4NDI5ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQyMDB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDIwMHguYwpAQCAtODAsNyArODAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTggaTJjX3JlYWRieXRlcyAoc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlLCB1OCBhZGRyLCB1OCogYnVmLCB1OCBsZW4pCitzdGF0aWMgaW50IGkyY19yZWFkYnl0ZXMoc3RydWN0IG54dDIwMHhfc3RhdGUgKnN0YXRlLCB1OCBhZGRyLCB1OCAqYnVmLCB1OCBsZW4pCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gYWRkciwgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSBidWYsIC5sZW4gPSBsZW4gfTsKQEAgLTExMSw3ICsxMTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTggbnh0MjAweF9yZWFkYnl0ZXMgKHN0cnVjdCBueHQyMDB4X3N0YXRlKiBzdGF0ZSwgdTggcmVnLCB1OCogYnVmLCB1OCBsZW4pCitzdGF0aWMgaW50IG54dDIwMHhfcmVhZGJ5dGVzKHN0cnVjdCBueHQyMDB4X3N0YXRlICpzdGF0ZSwgdTggcmVnLCB1OCAqYnVmLCB1OCBsZW4pCiB7CiAJdTggcmVnMiBbXSA9IHsgcmVnIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMjExLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTIxMS5jCmluZGV4IDZhZmUxMmEuLjE2Y2YyZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMjExLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTEyMTEuYwpAQCAtODgsNyArODgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTggaTJjX3JlYWRieXRlcyAoc3RydWN0IG9yNTEyMTFfc3RhdGUqIHN0YXRlLCB1OCByZWcsIHU4KiBidWYsIGludCBsZW4pCitzdGF0aWMgaW50IGkyY19yZWFkYnl0ZXMoc3RydWN0IG9yNTEyMTFfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHU4ICpidWYsIGludCBsZW4pCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgaTJjX21zZyBtc2c7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuYwppbmRleCA3NTAwYTFjLi5jZjRkODkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmMKQEAgLTMwLDEwICszMCwxMCBAQAogCiBzdHJ1Y3QgczVoMTQwOV9zdGF0ZSB7CiAKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKIAogCS8qIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KLQljb25zdCBzdHJ1Y3QgczVoMTQwOV9jb25maWcqIGNvbmZpZzsKKwljb25zdCBzdHJ1Y3QgczVoMTQwOV9jb25maWcgKmNvbmZpZzsKIAogCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CiAKQEAgLTQ4LDYgKzQ4LDkgQEAKIH07CiAKIHN0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIHZlcmJvc2UgZGVidWcgbWVzc2FnZXMiKTsKKwogI2RlZmluZSBkcHJpbnRrCWlmIChkZWJ1ZykgcHJpbnRrCiAKIC8qIFJlZ2lzdGVyIHZhbHVlcyB0byBpbml0aWFsaXNlIHRoZSBkZW1vZCwgdGhpcyB3aWxsIHNldCBWU0IgYnkgZGVmYXVsdCAqLwpAQCAtMjk5LDEwICszMDIsMTAgQEAKIH07CiAKIC8qIDggYml0IHJlZ2lzdGVycywgMTYgYml0IHZhbHVlcyAqLwotc3RhdGljIGludCBzNWgxNDA5X3dyaXRlcmVnKHN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSwgdTggcmVnLCB1MTYgZGF0YSkKK3N0YXRpYyBpbnQgczVoMTQwOV93cml0ZXJlZyhzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUsIHU4IHJlZywgdTE2IGRhdGEpCiB7CiAJaW50IHJldDsKLQl1OCBidWYgW10gPSB7IHJlZywgZGF0YSA+PiA4LCAgZGF0YSAmIDB4ZmYgfTsKKwl1OCBidWZbXSA9IHsgcmVnLCBkYXRhID4+IDgsICBkYXRhICYgMHhmZiB9OwogCiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCiAJCQkgICAgICAgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDMgfTsKQEAgLTMxMCwxOSArMzEzLDE5IEBACiAJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOwogCiAJaWYgKHJldCAhPSAxKQotCQlwcmludGsoIiVzOiB3cml0ZXJlZyBlcnJvciAocmVnID09IDB4JTAyeCwgdmFsID09IDB4JTA0eCwgIgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAocmVnID09IDB4JTAyeCwgdmFsID09IDB4JTA0eCwgIgogCQkgICAgICAgInJldCA9PSAlaSlcbiIsIF9fZnVuY19fLCByZWcsIGRhdGEsIHJldCk7CiAKIAlyZXR1cm4gKHJldCAhPSAxKSA/IC0xIDogMDsKIH0KIAotc3RhdGljIHUxNiBzNWgxNDA5X3JlYWRyZWcoc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlLCB1OCByZWcpCitzdGF0aWMgdTE2IHM1aDE0MDlfcmVhZHJlZyhzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKIHsKIAlpbnQgcmV0OwotCXU4IGIwIFtdID0geyByZWcgfTsKLQl1OCBiMSBbXSA9IHsgMCwgMCB9OworCXU4IGIwW10gPSB7IHJlZyB9OworCXU4IGIxW10gPSB7IDAsIDAgfTsKIAotCXN0cnVjdCBpMmNfbXNnIG1zZyBbXSA9IHsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKIAkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsCiAJCSAgLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAogCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsCkBAIC0zMzUsOSArMzM4LDkgQEAKIAlyZXR1cm4gKGIxWzBdIDw8IDgpIHwgYjFbMV07CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9zb2Z0cmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IHM1aDE0MDlfc29mdHJlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCkBAIC0zNDksMTEgKzM1MiwxMSBAQAogfQogCiAjZGVmaW5lIFM1SDE0MDlfVlNCX0lGX0ZSRVEgNTM4MAotI2RlZmluZSBTNUgxNDA5X1FBTV9JRl9GUkVRIHN0YXRlLT5jb25maWctPnFhbV9pZgorI2RlZmluZSBTNUgxNDA5X1FBTV9JRl9GUkVRIChzdGF0ZS0+Y29uZmlnLT5xYW1faWYpCiAKLXN0YXRpYyBpbnQgczVoMTQwOV9zZXRfaWZfZnJlcShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IEtIeikKK3N0YXRpYyBpbnQgczVoMTQwOV9zZXRfaWZfZnJlcShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IEtIeikKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKCVkIEtIeilcbiIsIF9fZnVuY19fLCBLSHopOwogCkBAIC0zNzYsMjYgKzM3OSwyNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfc2V0X3NwZWN0cmFsaW52ZXJzaW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgaW52ZXJ0ZWQpCitzdGF0aWMgaW50IHM1aDE0MDlfc2V0X3NwZWN0cmFsaW52ZXJzaW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaW52ZXJ0ZWQpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCBpbnZlcnRlZCk7CiAKLQlpZihpbnZlcnRlZCA9PSAxKQorCWlmIChpbnZlcnRlZCA9PSAxKQogCQlyZXR1cm4gczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHgxYiwgMHgxMTAxKTsgLyogSW52ZXJ0ZWQgKi8KIAllbHNlCiAJCXJldHVybiBzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweDFiLCAweDAxMTApOyAvKiBOb3JtYWwgKi8KIH0KIAotc3RhdGljIGludCBzNWgxNDA5X2VuYWJsZV9tb2R1bGF0aW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorc3RhdGljIGludCBzNWgxNDA5X2VuYWJsZV9tb2R1bGF0aW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCSAgICAgZmVfbW9kdWxhdGlvbl90IG0pCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcygweCUwOHgpXG4iLCBfX2Z1bmNfXywgbSk7CiAKLQlzd2l0Y2gobSkgeworCXN3aXRjaCAobSkgewogCWNhc2UgVlNCXzg6CiAJCWRwcmludGsoIiVzKCkgVlNCXzhcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHN0YXRlLT5pZl9mcmVxICE9IFM1SDE0MDlfVlNCX0lGX0ZSRVEpCkBAIC00MjIsOSArNDI1LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X2kyY19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBlbmFibGUpCitzdGF0aWMgaW50IHM1aDE0MDlfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIGVuYWJsZSk7CiAKQEAgLTQzNCw5ICs0MzcsOSBAQAogCQlyZXR1cm4gczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHhmMywgMCk7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQgczVoMTQwOV9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIGVuYWJsZSk7CiAKQEAgLTQ0OCwxOCArNDUxLDE4IEBACiAJCQlzNWgxNDA5X3JlYWRyZWcoc3RhdGUsIDB4ZTMpICYgMHhmZWZmKTsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBzNWgxNDA5X3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKIAogCXJldHVybiBzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweGYyLCBlbmFibGUpOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfcmVnaXN0ZXJfcmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IHM1aDE0MDlfcmVnaXN0ZXJfcmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTQ4Myw3ICs0ODYsNyBAQAogCQlyZWcgJj0gMHhmZjsKIAogCQlzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweDk2LCAweDAwYyk7Ci0JCWlmICgocmVnIDwgMHgzOCkgfHwgKHJlZyA+IDB4NjgpICkgeworCQlpZiAoKHJlZyA8IDB4MzgpIHx8IChyZWcgPiAweDY4KSkgewogCQkJczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHg5MywgMHgzMzMyKTsKIAkJCXM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4OWUsIDB4MmMzNyk7CiAJCX0gZWxzZSB7CkBAIC01MTQsNyArNTE3LDcgQEAKIAogCQkJczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHg5NiwgMHgyMCk7CiAJCQlzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweGFkLAotCQkJCSggKChyZWcxICYgMHhmMDAwKSA+PiA0KSB8IChyZWcyICYgMHhmMGZmKSkgKTsKKwkJCQkoKChyZWcxICYgMHhmMDAwKSA+PiA0KSB8IChyZWcyICYgMHhmMGZmKSkpOwogCQkJczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHhhYiwKIAkJCQlzNWgxNDA5X3JlYWRyZWcoc3RhdGUsIDB4YWIpICYgMHhlZmZlKTsKIAkJfQpAQCAtNTI5LDEwICs1MzIsMTAgQEAKIH0KIAogLyogVGFsayB0byB0aGUgZGVtb2QsIHNldCB0aGUgRkVDLCBHVUFSRCwgUUFNIHNldHRpbmdzIGV0YyAqLwotc3RhdGljIGludCBzNWgxNDA5X3NldF9mcm9udGVuZCAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCitzdGF0aWMgaW50IHM1aDE0MDlfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcyhmcmVxdWVuY3k9JWQpXG4iLCBfX2Z1bmNfXywgcC0+ZnJlcXVlbmN5KTsKIApAQCAtNTQ2LDkgKzU0OSwxMSBAQAogCW1zbGVlcCgxMDApOwogCiAJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpIHsKLQkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkgZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIHApOwotCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKSBmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIAl9CiAKIAkvKiBPcHRpbWl6ZSB0aGUgZGVtb2QgZm9yIFFBTSAqLwpAQCAtNTkyLDE3ICs1OTcsMTcgQEAKIAogLyogUmVzZXQgdGhlIGRlbW9kIGhhcmR3YXJlIGFuZCByZXNldCBhbGwgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCiAgICB0byBhIGRlZmF1bHQgc3RhdGUuICovCi1zdGF0aWMgaW50IHM1aDE0MDlfaW5pdCAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IHM1aDE0MDlfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlpbnQgaTsKIAotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCXM1aDE0MDlfc2xlZXAoZmUsIDApOwogCXM1aDE0MDlfcmVnaXN0ZXJfcmVzZXQoZmUpOwogCi0JZm9yIChpPTA7IGkgPCBBUlJBWV9TSVpFKGluaXRfdGFiKTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXRfdGFiKTsgaSsrKQogCQlzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCBpbml0X3RhYltpXS5yZWcsIGluaXRfdGFiW2ldLmRhdGEpOwogCiAJLyogVGhlIGRhdGFzaGVldCBzYXlzIHRoYXQgYWZ0ZXIgaW5pdGlhbGlzYXRpb24sIFZTQiBpcyBkZWZhdWx0ICovCkBAIC02MjcsOSArNjMyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQorc3RhdGljIGludCBzNWgxNDA5X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXUxNiByZWc7CiAJdTMyIHR1bmVyX3N0YXR1cyA9IDA7CiAKQEAgLTYzNywxMiArNjQyLDEyIEBACiAKIAkvKiBHZXQgdGhlIGRlbW9kdWxhdG9yIHN0YXR1cyAqLwogCXJlZyA9IHM1aDE0MDlfcmVhZHJlZyhzdGF0ZSwgMHhmMSk7Ci0JaWYocmVnICYgMHgxMDAwKQorCWlmIChyZWcgJiAweDEwMDApCiAJCSpzdGF0dXMgfD0gRkVfSEFTX1ZJVEVSQkk7Ci0JaWYocmVnICYgMHg4MDAwKQorCWlmIChyZWcgJiAweDgwMDApCiAJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0sgfCBGRV9IQVNfU1lOQzsKIAotCXN3aXRjaChzdGF0ZS0+Y29uZmlnLT5zdGF0dXNfbW9kZSkgeworCXN3aXRjaCAoc3RhdGUtPmNvbmZpZy0+c3RhdHVzX21vZGUpIHsKIAljYXNlIFM1SDE0MDlfREVNT0RMT0NLSU5HOgogCQlpZiAoKnN0YXR1cyAmIEZFX0hBU19WSVRFUkJJKQogCQkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19TSUdOQUw7CkBAIC02NjgsMTIgKzY3MywxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfcWFtMjU2X2xvb2t1cF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yLCB1MTYgdikKK3N0YXRpYyBpbnQgczVoMTQwOV9xYW0yNTZfbG9va3VwX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIsIHUxNiB2KQogewogCWludCBpLCByZXQgPSAtRUlOVkFMOwogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRShxYW0yNTZfc25yX3RhYik7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHFhbTI1Nl9zbnJfdGFiKTsgaSsrKSB7CiAJCWlmICh2IDwgcWFtMjU2X3Nucl90YWJbaV0udmFsKSB7CiAJCQkqc25yID0gcWFtMjU2X3Nucl90YWJbaV0uZGF0YTsKIAkJCXJldCA9IDA7CkBAIC02ODMsMTIgKzY4OCwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9xYW02NF9sb29rdXBfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNuciwgdTE2IHYpCitzdGF0aWMgaW50IHM1aDE0MDlfcWFtNjRfbG9va3VwX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIsIHUxNiB2KQogewogCWludCBpLCByZXQgPSAtRUlOVkFMOwogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRShxYW02NF9zbnJfdGFiKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocWFtNjRfc25yX3RhYik7IGkrKykgewogCQlpZiAodiA8IHFhbTY0X3Nucl90YWJbaV0udmFsKSB7CiAJCQkqc25yID0gcWFtNjRfc25yX3RhYltpXS5kYXRhOwogCQkJcmV0ID0gMDsKQEAgLTY5OCwxMiArNzAzLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3ZzYl9sb29rdXBfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNuciwgdTE2IHYpCitzdGF0aWMgaW50IHM1aDE0MDlfdnNiX2xvb2t1cF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yLCB1MTYgdikKIHsKIAlpbnQgaSwgcmV0ID0gLUVJTlZBTDsKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUodnNiX3Nucl90YWIpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2c2Jfc25yX3RhYik7IGkrKykgewogCQlpZiAodiA+IHZzYl9zbnJfdGFiW2ldLnZhbCkgewogCQkJKnNuciA9IHZzYl9zbnJfdGFiW2ldLmRhdGE7CiAJCQlyZXQgPSAwOwpAQCAtNzE0LDEzICs3MTksMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yKQorc3RhdGljIGludCBzNWgxNDA5X3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1MTYgcmVnOwogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCXN3aXRjaChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uKSB7CisJc3dpdGNoIChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uKSB7CiAJY2FzZSBRQU1fNjQ6CiAJCXJlZyA9IHM1aDE0MDlfcmVhZHJlZyhzdGF0ZSwgMHhmMCkgJiAweGZmOwogCQlyZXR1cm4gczVoMTQwOV9xYW02NF9sb29rdXBfc25yKGZlLCBzbnIsIHJlZyk7CkBAIC03MzcsMzAgKzc0MiwzMCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCi0JCQkJCXUxNiogc2lnbmFsX3N0cmVuZ3RoKQorc3RhdGljIGludCBzNWgxNDA5X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQl1MTYgKnNpZ25hbF9zdHJlbmd0aCkKIHsKIAlyZXR1cm4gczVoMTQwOV9yZWFkX3NucihmZSwgc2lnbmFsX3N0cmVuZ3RoKTsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogdWNibG9ja3MpCitzdGF0aWMgaW50IHM1aDE0MDlfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCSp1Y2Jsb2NrcyA9IHM1aDE0MDlfcmVhZHJlZyhzdGF0ZSwgMHhiNSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIGJlcikKK3N0YXRpYyBpbnQgczVoMTQwOV9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCiB7CiAJcmV0dXJuIHM1aDE0MDlfcmVhZF91Y2Jsb2NrcyhmZSwgYmVyKTsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKK3N0YXRpYyBpbnQgczVoMTQwOV9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJcC0+ZnJlcXVlbmN5ID0gc3RhdGUtPmN1cnJlbnRfZnJlcXVlbmN5OwogCXAtPnUudnNiLm1vZHVsYXRpb24gPSBzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uOwpAQCAtNzY4LDI1ICs3NzMsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorc3RhdGljIGludCBzNWgxNDA5X2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCSAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICp0dW5lKQogewogCXR1bmUtPm1pbl9kZWxheV9tcyA9IDEwMDA7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHM1aDE0MDlfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyB2b2lkIHM1aDE0MDlfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlrZnJlZShzdGF0ZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBzNWgxNDA5X29wczsKIAotc3RydWN0IGR2Yl9mcm9udGVuZCogczVoMTQwOV9hdHRhY2goY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnKiBjb25maWcsCi0JCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQorc3RydWN0IGR2Yl9mcm9udGVuZCAqczVoMTQwOV9hdHRhY2goY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnICpjb25maWcsCisJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IE5VTEw7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gTlVMTDsKIAl1MTYgcmVnOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KQEAgLTgyNSw2ICs4MzAsNyBAQAogCWtmcmVlKHN0YXRlKTsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woczVoMTQwOV9hdHRhY2gpOwogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgczVoMTQwOV9vcHMgPSB7CiAKQEAgLTg1MCwxNCArODU2LDEwIEBACiAJLnJlbGVhc2UgICAgICAgICAgICAgID0gczVoMTQwOV9yZWxlYXNlLAogfTsKIAotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSB2ZXJib3NlIGRlYnVnIG1lc3NhZ2VzIik7Ci0KIE1PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBTNUgxNDA5IFFBTS1CL0FUU0MgRGVtb2R1bGF0b3IgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1FWFBPUlRfU1lNQk9MKHM1aDE0MDlfYXR0YWNoKTsKIAogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5oCmluZGV4IGQxYTFkMmUuLjA3MGQ5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuaApAQCAtMjQsOCArMjQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CiAKLXN0cnVjdCBzNWgxNDA5X2NvbmZpZwoteworc3RydWN0IHM1aDE0MDlfY29uZmlnIHsKIAkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLwogCXU4IGRlbW9kX2FkZHJlc3M7CiAKQEAgLTYwLDEyICs1OSwxNCBAQAogCXUxNiBtcGVnX3RpbWluZzsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfUzVIMTQwOSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9TNUgxNDA5X01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHM1aDE0MDlfYXR0YWNoKGNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyogY29uZmlnLAotCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1M1SDE0MDkpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfUzVIMTQwOV9NT0RVTEUpIFwKKwkmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqczVoMTQwOV9hdHRhY2goY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnICpjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHM1aDE0MDlfYXR0YWNoKGNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyogY29uZmlnLAotCQkJCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqczVoMTQwOV9hdHRhY2goCisJY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnICpjb25maWcsCisJc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQxMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MTEuYwppbmRleCAyZGExYTM3Li4yZmViZmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQxMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDExLmMKQEAgLTM0Myw3ICszNDMsNyBAQAogCXU4IGFkZHIsIHU4IHJlZywgdTE2IGRhdGEpCiB7CiAJaW50IHJldDsKLQl1OCBidWYgW10gPSB7IHJlZywgZGF0YSA+PiA4LCAgZGF0YSAmIDB4ZmYgfTsKKwl1OCBidWZbXSA9IHsgcmVnLCBkYXRhID4+IDgsICBkYXRhICYgMHhmZiB9OwogCiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IGFkZHIsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAzIH07CiAKQEAgLTM1OSwxMCArMzU5LDEwIEBACiBzdGF0aWMgdTE2IHM1aDE0MTFfcmVhZHJlZyhzdHJ1Y3QgczVoMTQxMV9zdGF0ZSAqc3RhdGUsIHU4IGFkZHIsIHU4IHJlZykKIHsKIAlpbnQgcmV0OwotCXU4IGIwIFtdID0geyByZWcgfTsKLQl1OCBiMSBbXSA9IHsgMCwgMCB9OworCXU4IGIwW10gPSB7IHJlZyB9OworCXU4IGIxW10gPSB7IDAsIDAgfTsKIAotCXN0cnVjdCBpMmNfbXNnIG1zZyBbXSA9IHsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKIAkJeyAuYWRkciA9IGFkZHIsIC5mbGFncyA9IDAsIC5idWYgPSBiMCwgLmxlbiA9IDEgfSwKIAkJeyAuYWRkciA9IGFkZHIsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYjEsIC5sZW4gPSAyIH0gfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NpMjF4eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NpMjF4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZGJlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc2kyMXh4LmMKQEAgLTAsMCArMSw5NzQgQEAKKy8qIERWQiBjb21wbGlhbnQgTGludXggZHJpdmVyIGZvciB0aGUgRFZCLVMgc2kyMTA5LzIxMTAgZGVtb2R1bGF0b3IKKyoKKyogQ29weXJpZ2h0IChDKSAyMDA4IElnb3IgTS4gTGlwbGlhbmluIChsaXBsaWFuaW5AbWUuYnkpCisqCisqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqCisqLworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgInNpMjF4eC5oIgorCisjZGVmaW5lCVJFVklTSU9OX1JFRwkJCTB4MDAKKyNkZWZpbmUJU1lTVEVNX01PREVfUkVHCQkJMHgwMQorI2RlZmluZQlUU19DVFJMX1JFR18xCQkJMHgwMgorI2RlZmluZQlUU19DVFJMX1JFR18yCQkJMHgwMworI2RlZmluZQlQSU5fQ1RSTF9SRUdfMQkJCTB4MDQKKyNkZWZpbmUJUElOX0NUUkxfUkVHXzIJCQkweDA1CisjZGVmaW5lCUxPQ0tfU1RBVFVTX1JFR18xCQkweDBmCisjZGVmaW5lCUxPQ0tfU1RBVFVTX1JFR18yCQkweDEwCisjZGVmaW5lCUFDUV9TVEFUVVNfUkVHCQkJMHgxMQorI2RlZmluZQlBQ1FfQ1RSTF9SRUdfMQkJCTB4MTMKKyNkZWZpbmUJQUNRX0NUUkxfUkVHXzIJCQkweDE0CisjZGVmaW5lCVBMTF9ESVZJU09SX1JFRwkJCTB4MTUKKyNkZWZpbmUJQ09BUlNFX1RVTkVfUkVHCQkJMHgxNgorI2RlZmluZQlGSU5FX1RVTkVfUkVHX0wJCQkweDE3CisjZGVmaW5lCUZJTkVfVFVORV9SRUdfSAkJCTB4MTgKKworI2RlZmluZQlBTkFMT0dfQUdDX1BPV0VSX0xFVkVMX1JFRwkweDI4CisjZGVmaW5lCUNGT19FU1RJTUFUT1JfQ1RSTF9SRUdfMQkweDI5CisjZGVmaW5lCUNGT19FU1RJTUFUT1JfQ1RSTF9SRUdfMgkweDJhCisjZGVmaW5lCUNGT19FU1RJTUFUT1JfQ1RSTF9SRUdfMwkweDJiCisKKyNkZWZpbmUJU1lNX1JBVEVfRVNUSU1BVEVfUkVHX0wJCTB4MzEKKyNkZWZpbmUJU1lNX1JBVEVfRVNUSU1BVEVfUkVHX00JCTB4MzIKKyNkZWZpbmUJU1lNX1JBVEVfRVNUSU1BVEVfUkVHX0gJCTB4MzMKKworI2RlZmluZQlDRk9fRVNUSU1BVE9SX09GRlNFVF9SRUdfTAkweDM2CisjZGVmaW5lCUNGT19FU1RJTUFUT1JfT0ZGU0VUX1JFR19ICTB4MzcKKyNkZWZpbmUJQ0ZPX0VSUk9SX1JFR19MCQkJMHgzOAorI2RlZmluZQlDRk9fRVJST1JfUkVHX0gJCQkweDM5CisjZGVmaW5lCVNZTV9SQVRFX0VTVElNQVRPUl9DVFJMX1JFRwkweDNhCisKKyNkZWZpbmUJU1lNX1JBVEVfUkVHX0wJCQkweDNmCisjZGVmaW5lCVNZTV9SQVRFX1JFR19NCQkJMHg0MAorI2RlZmluZQlTWU1fUkFURV9SRUdfSAkJCTB4NDEKKyNkZWZpbmUJU1lNX1JBVEVfRVNUSU1BVE9SX01BWElNVU1fUkVHCTB4NDIKKyNkZWZpbmUJU1lNX1JBVEVfRVNUSU1BVE9SX01JTklNVU1fUkVHCTB4NDMKKworI2RlZmluZQlDX05fRVNUSU1BVE9SX0NUUkxfUkVHCQkweDdjCisjZGVmaW5lCUNfTl9FU1RJTUFUT1JfVEhSU0hMRF9SRUcJMHg3ZAorI2RlZmluZQlDX05fRVNUSU1BVE9SX0xFVkVMX1JFR19MCTB4N2UKKyNkZWZpbmUJQ19OX0VTVElNQVRPUl9MRVZFTF9SRUdfSAkweDdmCisKKyNkZWZpbmUJQkxJTkRfU0NBTl9DVFJMX1JFRwkJMHg4MAorCisjZGVmaW5lCUxTQV9DVFJMX1JFR18xCQkJMHg4RAorI2RlZmluZQlTUENUUk1fVElMVF9DT1JSX1RIUlNITERfUkVHCTB4OGYKKyNkZWZpbmUJT05FX0RCX0JORFdEVEhfVEhSU0hMRF9SRUcJMHg5MAorI2RlZmluZQlUV09fREJfQk5EV0RUSF9USFJTSExEX1JFRwkweDkxCisjZGVmaW5lCVRIUkVFX0RCX0JORFdEVEhfVEhSU0hMRF9SRUcJMHg5MgorI2RlZmluZQlJTkJBTkRfUE9XRVJfVEhSU0hMRF9SRUcJMHg5MworI2RlZmluZQlSRUZfTk9JU0VfTFZMX01SR05fVEhSU0hMRF9SRUcJMHg5NAorCisjZGVmaW5lCVZJVF9TUkNIX0NUUkxfUkVHXzEJCTB4YTAKKyNkZWZpbmUJVklUX1NSQ0hfQ1RSTF9SRUdfMgkJMHhhMQorI2RlZmluZQlWSVRfU1JDSF9DVFJMX1JFR18zCQkweGEyCisjZGVmaW5lCVZJVF9TUkNIX1NUQVRVU19SRUcJCTB4YTMKKyNkZWZpbmUJVklURVJCSV9CRVJfQ09VTlRfUkVHX0wJCTB4YWIKKyNkZWZpbmUJUkVFRF9TT0xPTU9OX0NUUkxfUkVHCQkweGIwCisjZGVmaW5lCVJFRURfU09MT01PTl9FUlJPUl9DT1VOVF9SRUdfTAkweGIxCisjZGVmaW5lCVBSQlNfQ1RSTF9SRUcJCQkweGI1CisKKyNkZWZpbmUJTE5CX0NUUkxfUkVHXzEJCQkweGMwCisjZGVmaW5lCUxOQl9DVFJMX1JFR18yCQkJMHhjMQorI2RlZmluZQlMTkJfQ1RSTF9SRUdfMwkJCTB4YzIKKyNkZWZpbmUJTE5CX0NUUkxfUkVHXzQJCQkweGMzCisjZGVmaW5lCUxOQl9DVFJMX1NUQVRVU19SRUcJCTB4YzQKKyNkZWZpbmUJTE5CX0ZJRk9fUkVHU18wCQkJMHhjNQorI2RlZmluZQlMTkJfRklGT19SRUdTXzEJCQkweGM2CisjZGVmaW5lCUxOQl9GSUZPX1JFR1NfMgkJCTB4YzcKKyNkZWZpbmUJTE5CX0ZJRk9fUkVHU18zCQkJMHhjOAorI2RlZmluZQlMTkJfRklGT19SRUdTXzQJCQkweGM5CisjZGVmaW5lCUxOQl9GSUZPX1JFR1NfNQkJCTB4Y2EKKyNkZWZpbmUJTE5CX1NVUFBMWV9DVFJMX1JFR18xCQkweGNiCisjZGVmaW5lCUxOQl9TVVBQTFlfQ1RSTF9SRUdfMgkJMHhjYworI2RlZmluZQlMTkJfU1VQUExZX0NUUkxfUkVHXzMJCTB4Y2QKKyNkZWZpbmUJTE5CX1NVUFBMWV9DVFJMX1JFR180CQkweGNlCisjZGVmaW5lCUxOQl9TVVBQTFlfU1RBVFVTX1JFRwkJMHhjZgorCisjZGVmaW5lIEZBTFNFCTAKKyNkZWZpbmUgVFJVRQkxCisjZGVmaW5lIEZBSUwJLTEKKyNkZWZpbmUgUEFTUwkwCisKKyNkZWZpbmUgQUxMT1dBQkxFX0ZTX0NPVU5UCTEwCisjZGVmaW5lIFNUQVRVU19CRVIJCTAKKyNkZWZpbmUgU1RBVFVTX1VDQkxPQ0tTCQkxCisKK3N0YXRpYyBpbnQgZGVidWc7CisjZGVmaW5lIGRwcmludGsoYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoZGVidWcpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJzaTIxeHg6ICIgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCitlbnVtIHsKKwlBQ1RJVkVfSElHSCwKKwlBQ1RJVkVfTE9XCit9OworZW51bSB7CisJQllURV9XSURFLAorCUJJVF9XSURFCit9OworZW51bSB7CisJQ0xLX0dBUFBFRF9NT0RFLAorCUNMS19DT05USU5VT1VTX01PREUKK307CitlbnVtIHsKKwlSSVNJTkdfRURHRSwKKwlGQUxMSU5HX0VER0UKK307CitlbnVtIHsKKwlNU0JfRklSU1QsCisJTFNCX0ZJUlNUCit9OworZW51bSB7CisJU0VSSUFMLAorCVBBUkFMTEVMCit9OworCitzdHJ1Y3Qgc2kyMXh4X3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKwljb25zdCBzdHJ1Y3Qgc2kyMXh4X2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CisJdTggaW5pdGlhbGlzZWQ6MTsKKwlpbnQgZXJybW9kZTsKKwlpbnQgZnM7CQkJLypTYW1wbGluZyByYXRlIG9mIHRoZSBBREMgaW4gTUh6Ki8KK307CisKKy8qCXJlZ2lzdGVyIGRlZmF1bHQgaW5pdGlhbGl6YXRpb24gKi8KK3N0YXRpYyB1OCBzZXJpdF9zcDE1MTFsaGJfaW5pdHRhYltdID0geworCTB4MDEsIDB4MjgsCS8qIHNldCBpMmNfaW5jX2Rpc2FibGUgKi8KKwkweDIwLCAweDAzLAorCTB4MjcsIDB4MjAsCisJMHhlMCwgMHg0NSwKKwkweGUxLCAweDA4LAorCTB4ZmUsIDB4MDEsCisJMHgwMSwgMHgyOCwKKwkweDg5LCAweDA5LAorCTB4MDQsIDB4ODAsCisJMHgwNSwgMHgwMSwKKwkweDA2LCAweDAwLAorCTB4MjAsIDB4MDMsCisJMHgyNCwgMHg4OCwKKwkweDI5LCAweDA5LAorCTB4MmEsIDB4MGYsCisJMHgyYywgMHgxMCwKKwkweDJkLCAweDE5LAorCTB4MmUsIDB4MDgsCisJMHgyZiwgMHgxMCwKKwkweDMwLCAweDE5LAorCTB4MzQsIDB4MjAsCisJMHgzNSwgMHgwMywKKwkweDQ1LCAweDAyLAorCTB4NDYsIDB4NDUsCisJMHg0NywgMHhkMCwKKwkweDQ4LCAweDAwLAorCTB4NDksIDB4NDAsCisJMHg0YSwgMHgwMywKKwkweDRjLCAweGZkLAorCTB4NGYsIDB4MmUsCisJMHg1MCwgMHgyZSwKKwkweDUxLCAweDEwLAorCTB4NTIsIDB4MTAsCisJMHg1NiwgMHg5MiwKKwkweDU5LCAweDAwLAorCTB4NWEsIDB4MmQsCisJMHg1YiwgMHgzMywKKwkweDVjLCAweDFmLAorCTB4NWYsIDB4NzYsCisJMHg2MiwgMHhjMCwKKwkweDYzLCAweGMwLAorCTB4NjQsIDB4ZjMsCisJMHg2NSwgMHhmMywKKwkweDc5LCAweDQwLAorCTB4NmEsIDB4NDAsCisJMHg2YiwgMHgwYSwKKwkweDZjLCAweDgwLAorCTB4NmQsIDB4MjcsCisJMHg3MSwgMHgwNiwKKwkweDc1LCAweDYwLAorCTB4NzgsIDB4MDAsCisJMHg3OSwgMHhiNSwKKwkweDdjLCAweDA1LAorCTB4N2QsIDB4MWEsCisJMHg4NywgMHg1NSwKKwkweDg4LCAweDcyLAorCTB4OGYsIDB4MDgsCisJMHg5MCwgMHhlMCwKKwkweDk0LCAweDQwLAorCTB4YTAsIDB4M2YsCisJMHhhMSwgMHhjMCwKKwkweGE0LCAweGNjLAorCTB4YTUsIDB4NjYsCisJMHhhNiwgMHg2NiwKKwkweGE3LCAweDdiLAorCTB4YTgsIDB4N2IsCisJMHhhOSwgMHg3YiwKKwkweGFhLCAweDlhLAorCTB4ZWQsIDB4MDQsCisJMHhhZCwgMHgwMCwKKwkweGFlLCAweDAzLAorCTB4Y2MsIDB4YWIsCisJMHgwMSwgMHgwOCwKKwkweGZmLCAweGZmCit9OworCisvKglsb3cgbGV2ZWwgcmVhZC93cml0ZXMgKi8KK3N0YXRpYyBpbnQgc2kyMV93cml0ZXJlZ3Moc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUsIHU4IHJlZzEsCisJCQkJCQkJdTggKmRhdGEsIGludCBsZW4pCit7CisJaW50IHJldDsKKwl1OCBidWZbNjBdOy8qID0geyByZWcxLCBkYXRhIH07Ki8KKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCQkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJCS5mbGFncyA9IDAsCisJCQkJLmJ1ZiA9IGJ1ZiwKKwkJCQkubGVuID0gbGVuICsgMQorCX07CisKKwltc2cuYnVmWzBdID0gIHJlZzE7CisJbWVtY3B5KG1zZy5idWYgKyAxLCBkYXRhLCBsZW4pOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCisJaWYgKHJldCAhPSAxKQorCQlkcHJpbnRrKCIlczogd3JpdGVyZWcgZXJyb3IgKHJlZzEgPT0gMHglMDJ4LCBkYXRhID09IDB4JTAyeCwgIgorCQkJInJldCA9PSAlaSlcbiIsIF9fZnVuY19fLCByZWcxLCBkYXRhWzBdLCByZXQpOworCisJcmV0dXJuIChyZXQgIT0gMSkgPyAtRVJFTU9URUlPIDogMDsKK30KKworc3RhdGljIGludCBzaTIxX3dyaXRlcmVnKHN0cnVjdCBzaTIxeHhfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHU4IGRhdGEpCit7CisJaW50IHJldDsKKwl1OCBidWZbXSA9IHsgcmVnLCBkYXRhIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkJCS5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCQkuZmxhZ3MgPSAwLAorCQkJCS5idWYgPSBidWYsCisJCQkJLmxlbiA9IDIKKwl9OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCisJaWYgKHJldCAhPSAxKQorCQlkcHJpbnRrKCIlczogd3JpdGVyZWcgZXJyb3IgKHJlZyA9PSAweCUwMngsIGRhdGEgPT0gMHglMDJ4LCAiCisJCQkicmV0ID09ICVpKVxuIiwgX19mdW5jX18sIHJlZywgZGF0YSwgcmV0KTsKKworCXJldHVybiAocmV0ICE9IDEpID8gLUVSRU1PVEVJTyA6IDA7Cit9CisKK3N0YXRpYyBpbnQgc2kyMV93cml0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJaWYgKGxlbiAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzaTIxX3dyaXRlcmVnKHN0YXRlLCBidWZbMF0sIGJ1ZlsxXSk7Cit9CisKK3N0YXRpYyB1OCBzaTIxX3JlYWRyZWcoc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKK3sKKwlpbnQgcmV0OworCXU4IGIwW10gPSB7IHJlZyB9OworCXU4IGIxW10gPSB7IDAgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeworCQkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgPSBiMCwKKwkJCS5sZW4gPSAxCisJCX0sIHsKKwkJCS5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9IGIxLAorCQkJLmxlbiA9IDEKKwkJfQorCX07CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAyKTsKKworCWlmIChyZXQgIT0gMikKKwkJZHByaW50aygiJXM6IHJlYWRyZWcgZXJyb3IgKHJlZyA9PSAweCUwMngsIHJldCA9PSAlaSlcbiIsCisJCQlfX2Z1bmNfXywgcmVnLCByZXQpOworCisJcmV0dXJuIGIxWzBdOworfQorCitzdGF0aWMgaW50IHNpMjFfcmVhZHJlZ3Moc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUsIHU4IHJlZzEsIHU4ICpiLCB1OCBsZW4pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeworCQkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgPSAmcmVnMSwKKwkJCS5sZW4gPSAxCisJCX0sIHsKKwkJCS5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9IGIsCisJCQkubGVuID0gbGVuCisJCX0KKwl9OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CisKKwlpZiAocmV0ICE9IDIpCisJCWRwcmludGsoIiVzOiByZWFkcmVnIGVycm9yIChyZXQgPT0gJWkpXG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCXJldHVybiByZXQgPT0gMiA/IDAgOiAtMTsKK30KKworc3RhdGljIGludCBzaTIxeHhfd2FpdF9kaXNlcWNfaWRsZShzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSwgaW50IHRpbWVvdXQpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJd2hpbGUgKChzaTIxX3JlYWRyZWcoc3RhdGUsIExOQl9DVFJMX1JFR18xKSAmIDB4OCkgPT0gOCkgeworCQlpZiAoamlmZmllcyAtIHN0YXJ0ID4gdGltZW91dCkgeworCQkJZHByaW50aygiJXM6IHRpbWVvdXQhIVxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJbXNsZWVwKDEwKTsKKwl9OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2kyMXh4X3NldF9zeW1ib2xyYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgc3JhdGUpCit7CisJc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MzIgc3ltX3JhdGUsIGRhdGFfcmF0ZTsKKwlpbnQgaTsKKwl1OCBzeW1fcmF0ZV9ieXRlc1szXTsKKworCWRwcmludGsoIiVzIDogc3JhdGUgPSAlaVxuIiwgX19mdW5jX18gLCBzcmF0ZSk7CisKKwlpZiAoKHNyYXRlIDwgMTAwMDAwMCkgfHwgKHNyYXRlID4gNDUwMDAwMDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFfcmF0ZSA9IHNyYXRlOworCXN5bV9yYXRlID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJc3ltX3JhdGUgLz0gMTAwOworCQlzeW1fcmF0ZSA9IHN5bV9yYXRlICsgKChkYXRhX3JhdGUgJSAxMDApICogMHg4MDAwMDApIC8KKwkJCQkJCQkJc3RhdGUtPmZzOworCQlkYXRhX3JhdGUgLz0gMTAwOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMzsgKytpKQorCQlzeW1fcmF0ZV9ieXRlc1tpXSA9ICh1OCkoKHN5bV9yYXRlID4+IChpICogOCkpICYgMHhmZik7CisKKwlzaTIxX3dyaXRlcmVncyhzdGF0ZSwgU1lNX1JBVEVfUkVHX0wsIHN5bV9yYXRlX2J5dGVzLCAweDAzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpMjF4eF9zZW5kX2Rpc2VxY19tc2coc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCXN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKm0pCit7CisJc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCBsbmJfc3RhdHVzOworCXU4IExOQl9DVFJMXzE7CisJaW50IHN0YXR1czsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzdGF0dXMgPSBQQVNTOworCUxOQl9DVFJMXzEgPSAwOworCisJc3RhdHVzIHw9IHNpMjFfcmVhZHJlZ3Moc3RhdGUsIExOQl9DVFJMX1NUQVRVU19SRUcsICZsbmJfc3RhdHVzLCAweDAxKTsKKwlzdGF0dXMgfD0gc2kyMV9yZWFkcmVncyhzdGF0ZSwgTE5CX0NUUkxfUkVHXzEsICZsbmJfc3RhdHVzLCAweDAxKTsKKworCS8qZmlsbCB0aGUgRklGTyovCisJc3RhdHVzIHw9IHNpMjFfd3JpdGVyZWdzKHN0YXRlLCBMTkJfRklGT19SRUdTXzAsIG0tPm1zZywgbS0+bXNnX2xlbik7CisKKwlMTkJfQ1RSTF8xID0gKGxuYl9zdGF0dXMgJiAweDcwKTsKKwlMTkJfQ1RSTF8xIHw9IG0tPm1zZ19sZW47CisKKwlMTkJfQ1RSTF8xIHw9IDB4ODA7CS8qIGJlZ2luIExOQiBzaWduYWxpbmcgKi8KKworCXN0YXR1cyB8PSBzaTIxX3dyaXRlcmVncyhzdGF0ZSwgTE5CX0NUUkxfUkVHXzEsICZMTkJfQ1RSTF8xLCAweDAxKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgc2kyMXh4X3NlbmRfZGlzZXFjX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkJZmVfc2VjX21pbmlfY21kX3QgYnVyc3QpCit7CisJc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCB2YWw7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKHNpMjF4eF93YWl0X2Rpc2VxY19pZGxlKHN0YXRlLCAxMDApIDwgMCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwl2YWwgPSAoMHg4MCB8IHNpMjFfcmVhZHJlZyhzdGF0ZSwgMHhjMSkpOworCWlmIChzaTIxX3dyaXRlcmVnKHN0YXRlLCBMTkJfQ1RSTF9SRUdfMSwKKwkJCWJ1cnN0ID09IFNFQ19NSU5JX0EgPyAodmFsICYgfjB4MTApIDogKHZhbCB8IDB4MTApKSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlpZiAoc2kyMXh4X3dhaXRfZGlzZXFjX2lkbGUoc3RhdGUsIDEwMCkgPCAwKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCWlmIChzaTIxX3dyaXRlcmVnKHN0YXRlLCBMTkJfQ1RSTF9SRUdfMSwgdmFsKSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlyZXR1cm4gMDsKK30KKy8qCTMwLjA2LjIwMDggKi8KK3N0YXRpYyBpbnQgc2kyMXh4X3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHZhbDsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisJdmFsID0gKDB4ODAgfCBzaTIxX3JlYWRyZWcoc3RhdGUsIExOQl9DVFJMX1JFR18xKSk7CisKKwlzd2l0Y2ggKHRvbmUpIHsKKwljYXNlIFNFQ19UT05FX09OOgorCQlyZXR1cm4gc2kyMV93cml0ZXJlZyhzdGF0ZSwgTE5CX0NUUkxfUkVHXzEsIHZhbCB8IDB4MjApOworCisJY2FzZSBTRUNfVE9ORV9PRkY6CisJCXJldHVybiBzaTIxX3dyaXRlcmVnKHN0YXRlLCBMTkJfQ1RSTF9SRUdfMSwgKHZhbCAmIH4weDIwKSk7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2kyMXh4X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHQpCit7CisJc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXU4IHZhbDsKKwlkcHJpbnRrKCIlczogJXNcbiIsIF9fZnVuY19fLAorCQl2b2x0ID09IFNFQ19WT0xUQUdFXzEzID8gIlNFQ19WT0xUQUdFXzEzIiA6CisJCXZvbHQgPT0gU0VDX1ZPTFRBR0VfMTggPyAiU0VDX1ZPTFRBR0VfMTgiIDogIj8/Iik7CisKKworCXZhbCA9ICgweDgwIHwgc2kyMV9yZWFkcmVnKHN0YXRlLCBMTkJfQ1RSTF9SRUdfMSkpOworCisJc3dpdGNoICh2b2x0KSB7CisJY2FzZSBTRUNfVk9MVEFHRV8xODoKKwkJcmV0dXJuIHNpMjFfd3JpdGVyZWcoc3RhdGUsIExOQl9DVFJMX1JFR18xLCB2YWwgfCAweDQwKTsKKwkJYnJlYWs7CisJY2FzZSBTRUNfVk9MVEFHRV8xMzoKKwkJcmV0dXJuIHNpMjFfd3JpdGVyZWcoc3RhdGUsIExOQl9DVFJMX1JFR18xLCAodmFsICYgfjB4NDApKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfTsKK30KKworc3RhdGljIGludCBzaTIxeHhfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCBpOworCWludCBzdGF0dXMgPSAwOworCXU4IHJlZzE7CisJdTggdmFsOworCXU4IHJlZzJbMl07CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJZm9yIChpID0gMDsgOyBpICs9IDIpIHsKKwkJcmVnMSA9IHNlcml0X3NwMTUxMWxoYl9pbml0dGFiW2ldOworCQl2YWwgPSBzZXJpdF9zcDE1MTFsaGJfaW5pdHRhYltpKzFdOworCQlpZiAocmVnMSA9PSAweGZmICYmIHZhbCA9PSAweGZmKQorCQkJYnJlYWs7CisJCXNpMjFfd3JpdGVyZWdzKHN0YXRlLCByZWcxLCAmdmFsLCAxKTsKKwl9CisKKwkvKkRWQiBRUFNLIFNZU1RFTSBNT0RFIFJFRyovCisJcmVnMSA9IDB4MDg7CisJc2kyMV93cml0ZXJlZ3Moc3RhdGUsIFNZU1RFTV9NT0RFX1JFRywgJnJlZzEsIDB4MDEpOworCisJLyp0cmFuc3BvcnQgc3RyZWFtIGNvbmZpZyovCisJLyoKKwltb2RlID0gUEFSQUxMRUw7CisJc2RhdGFfZm9ybSA9IExTQl9GSVJTVDsKKwljbGtfZWRnZSA9IEZBTExJTkdfRURHRTsKKwljbGtfbW9kZSA9IENMS19HQVBQRURfTU9ERTsKKwlzdHJ0X2xlbiA9IEJZVEVfV0lERTsKKwlzeW5jX3BvbCA9IEFDVElWRV9ISUdIOworCXZhbF9wb2wgPSBBQ1RJVkVfSElHSDsKKwllcnJfcG9sID0gQUNUSVZFX0hJR0g7CisJc2Nsa19yYXRlID0gMHgwMDsKKwlwYXJpdHkgPSAweDAwIDsKKwlkYXRhX2RlbGF5ID0gMHgwMDsKKwljbGtfZGVsYXkgPSAweDAwOworCXBjbGtfc21vb3RoID0gMHgwMDsKKwkqLworCXJlZzJbMF0gPQorCQlQQVJBTExFTCArIChMU0JfRklSU1QgPDwgMSkKKwkJKyAoRkFMTElOR19FREdFIDw8IDIpICsgKENMS19HQVBQRURfTU9ERSA8PCAzKQorCQkrIChCWVRFX1dJREUgPDwgNCkgKyAoQUNUSVZFX0hJR0ggPDwgNSkKKwkJKyAoQUNUSVZFX0hJR0ggPDwgNikgKyAoQUNUSVZFX0hJR0ggPDwgNyk7CisKKwlyZWcyWzFdID0gMDsKKwkvKglzY2xrX3JhdGUgKyAocGFyaXR5IDw8IDIpCisJCSsgKGRhdGFfZGVsYXkgPDwgMykgKyAoY2xrX2RlbGF5IDw8IDQpCisJCSsgKHBjbGtfc21vb3RoIDw8IDUpOworCSovCisJc3RhdHVzIHw9IHNpMjFfd3JpdGVyZWdzKHN0YXRlLCBUU19DVFJMX1JFR18xLCByZWcyLCAweDAyKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWRwcmludGsoIiAlcyA6IFRTIFNldCBFcnJvclxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCBzaTIxX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQoreworCXN0cnVjdCBzaTIxeHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggcmVnc19yZWFkWzJdOworCXU4IHJlZ19yZWFkOworCXU4IGk7CisJdTggbG9jazsKKwl1OCBzaWduYWwgPSBzaTIxX3JlYWRyZWcoc3RhdGUsIEFOQUxPR19BR0NfUE9XRVJfTEVWRUxfUkVHKTsKKworCXNpMjFfcmVhZHJlZ3Moc3RhdGUsIExPQ0tfU1RBVFVTX1JFR18xLCByZWdzX3JlYWQsIDB4MDIpOworCXJlZ19yZWFkID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCA3OyArK2kpCisJCXJlZ19yZWFkIHw9ICgocmVnc19yZWFkWzBdID4+IGkpICYgMHgwMSkgPDwgKDYgLSBpKTsKKworCWxvY2sgPSAoKHJlZ19yZWFkICYgMHg3ZikgfCAocmVnc19yZWFkWzFdICYgMHg4MCkpOworCisJZHByaW50aygiJXMgOiBGRV9SRUFEX1NUQVRVUyA6IFZTVEFUVVM6IDB4JTAyeFxuIiwgX19mdW5jX18sIGxvY2spOworCSpzdGF0dXMgPSAwOworCisJaWYgKHNpZ25hbCA+IDEwKQorCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CisKKwlpZiAobG9jayAmIDB4MikKKwkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKworCWlmIChsb2NrICYgMHgyMCkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSTsKKworCWlmIChsb2NrICYgMHg0MCkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU1lOQzsKKworCWlmICgobG9jayAmIDB4N2IpID09IDB4N2IpCisJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaTIxX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQoreworCXN0cnVjdCBzaTIxeHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwkvKnN0YXR1cyA9IHNpMjFfcmVhZHJlZyhzdGF0ZSwgQU5BTE9HX0FHQ19QT1dFUl9MRVZFTF9SRUcsCisJCQkJCQkodTgqKWFnY2xldmVsLCAweDAxKTsqLworCisJdTE2IHNpZ25hbCA9ICgzICogc2kyMV9yZWFkcmVnKHN0YXRlLCAweDI3KSAqCisJCQkJCXNpMjFfcmVhZHJlZyhzdGF0ZSwgMHgyOCkpOworCisJZHByaW50aygiJXMgOiBBR0NQV1I6IDB4JTAyeCUwMngsIHNpZ25hbD0weCUwNHhcbiIsIF9fZnVuY19fLAorCQlzaTIxX3JlYWRyZWcoc3RhdGUsIDB4MjcpLAorCQlzaTIxX3JlYWRyZWcoc3RhdGUsIDB4MjgpLCAoaW50KSBzaWduYWwpOworCisJc2lnbmFsICA8PD0gNDsKKwkqc3RyZW5ndGggPSBzaWduYWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaTIxX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwlzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChzdGF0ZS0+ZXJybW9kZSAhPSBTVEFUVVNfQkVSKQorCQlyZXR1cm4gMDsKKworCSpiZXIgPSAoc2kyMV9yZWFkcmVnKHN0YXRlLCAweDFkKSA8PCA4KSB8CisJCQkJc2kyMV9yZWFkcmVnKHN0YXRlLCAweDFlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpMjFfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXN0cnVjdCBzaTIxeHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlzMzIgeHNuciA9IDB4ZmZmZiAtICgoc2kyMV9yZWFkcmVnKHN0YXRlLCAweDI0KSA8PCA4KSB8CisJCQkJCXNpMjFfcmVhZHJlZyhzdGF0ZSwgMHgyNSkpOworCXhzbnIgPSAzICogKHhzbnIgLSAweGExMDApOworCSpzbnIgPSAoeHNuciA+IDB4ZmZmZikgPyAweGZmZmYgOiAoeHNuciA8IDApID8gMCA6IHhzbnI7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2kyMV9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVjYmxvY2tzKQoreworCXN0cnVjdCBzaTIxeHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKHN0YXRlLT5lcnJtb2RlICE9IFNUQVRVU19VQ0JMT0NLUykKKwkJKnVjYmxvY2tzID0gMDsKKwllbHNlCisJCSp1Y2Jsb2NrcyA9IChzaTIxX3JlYWRyZWcoc3RhdGUsIDB4MWQpIDw8IDgpIHwKKwkJCQkJc2kyMV9yZWFkcmVnKHN0YXRlLCAweDFlKTsKKworCXJldHVybiAwOworfQorCisvKglpbml0aWF0ZXMgYSBjaGFubmVsIGFjcXVpc2l0aW9uIHNlcXVlbmNlCisJdXNpbmcgdGhlIHNwZWNpZmllZCBzeW1ib2wgcmF0ZSBhbmQgY29kZSByYXRlICovCitzdGF0aWMgaW50IHNpMjF4eF9zZXRhY3F1aXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgc3ltYnJhdGUsCisJCQkJCQlmZV9jb2RlX3JhdGVfdCBjcmF0ZSkKK3sKKworCXN0cnVjdCBzaTIxeHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggY29kZXJhdGVzW10gPSB7CisJCQkJMHgwLCAweDAxLCAweDAyLCAweDA0LCAweDAwLAorCQkJCTB4OCwgMHgxMCwgMHgyMCwgMHgwMCwgMHgzZgorCX07CisKKwl1OCBjb2RlcmF0ZV9wdHI7CisJaW50IHN0YXR1czsKKwl1OCBzdGFydF9hY3EgPSAweDgwOworCXU4IHJlZywgcmVnc1szXTsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzdGF0dXMgPSBQQVNTOworCWNvZGVyYXRlX3B0ciA9IGNvZGVyYXRlc1tjcmF0ZV07CisKKwlzaTIxeHhfc2V0X3N5bWJvbHJhdGUoZmUsIHN5bWJyYXRlKTsKKworCS8qIHdyaXRlIGNvZGUgcmF0ZXMgdG8gdXNlIGluIHRoZSBWaXRlcmJpIHNlYXJjaCAqLworCXN0YXR1cyB8PSBzaTIxX3dyaXRlcmVncyhzdGF0ZSwKKwkJCQlWSVRfU1JDSF9DVFJMX1JFR18xLAorCQkJCSZjb2RlcmF0ZV9wdHIsIDB4MDEpOworCisJLyogY2xlYXIgYWNxX3N0YXJ0IGJpdCAqLworCXN0YXR1cyB8PSBzaTIxX3JlYWRyZWdzKHN0YXRlLCBBQ1FfQ1RSTF9SRUdfMiwgJnJlZywgMHgwMSk7CisJcmVnICY9IH5zdGFydF9hY3E7CisJc3RhdHVzIHw9IHNpMjFfd3JpdGVyZWdzKHN0YXRlLCBBQ1FfQ1RSTF9SRUdfMiwgJnJlZywgMHgwMSk7CisKKwkvKiB1c2UgbmV3IENhcnJpZXIgRnJlcXVlbmN5IE9mZnNldCBFc3RpbWF0b3IgKFF1aWNrTG9jaykgKi8KKwlyZWdzWzBdID0gMHhDQjsKKwlyZWdzWzFdID0gMHg0MDsKKwlyZWdzWzJdID0gMHhDQjsKKworCXN0YXR1cyB8PSBzaTIxX3dyaXRlcmVncyhzdGF0ZSwKKwkJCQlUV09fREJfQk5EV0RUSF9USFJTSExEX1JFRywKKwkJCQkmcmVnc1swXSwgMHgwMyk7CisJcmVnID0gMHg1NjsKKwlzdGF0dXMgfD0gc2kyMV93cml0ZXJlZ3Moc3RhdGUsCisJCQkJTFNBX0NUUkxfUkVHXzEsICZyZWcsIDEpOworCXJlZyA9IDB4MDU7CisJc3RhdHVzIHw9IHNpMjFfd3JpdGVyZWdzKHN0YXRlLAorCQkJCUJMSU5EX1NDQU5fQ1RSTF9SRUcsICZyZWcsIDEpOworCS8qIHN0YXJ0IGF1dG9tYXRpYyBhY3EgKi8KKwlzdGF0dXMgfD0gc2kyMV93cml0ZXJlZ3Moc3RhdGUsCisJCQkJQUNRX0NUUkxfUkVHXzIsICZzdGFydF9hY3EsIDB4MDEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBzaTIxeHhfc2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHR2X3Byb3BlcnR5ICpwKQoreworCWRwcmludGsoIiVzKC4uKVxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpMjF4eF9nZXRfcHJvcGVydHkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdHZfcHJvcGVydHkgKnApCit7CisJZHByaW50aygiJXMoLi4pXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2kyMXh4X3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpkZnApCit7CisJc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKKworCS8qIGZyZXEJCUNoYW5uZWwgY2FycmllciBmcmVxdWVuY3kgaW4gS0h6IChpLmUuIDE1NTAwMDAgS0h6KQorCSBkYXRhcmF0ZQlDaGFubmVsIHN5bWJvbCByYXRlIGluIFNwcyAoaS5lLiAyMjUwMDAwMCBTcHMpKi8KKworCS8qIGluIE1IeiAqLworCXVuc2lnbmVkIGNoYXIgY29hcnNlX3R1bmVfZnJlcTsKKwlpbnQgZmluZV90dW5lX2ZyZXE7CisJdW5zaWduZWQgY2hhciBzYW1wbGVfcmF0ZSA9IDA7CisJLyogYm9vbGVhbiAqLworCXVuc2lnbmVkIGludCBpbmJhbmRfaW50ZXJmZXJlcl9pbmQ7CisKKwkvKiBJTlRFUk1FRElBVEUgVkFMVUVTICovCisJaW50IGljb2Fyc2VfdHVuZV9mcmVxOyAvKiBNSHogKi8KKwlpbnQgaWZpbmVfdHVuZV9mcmVxOyAvKiBNSHogKi8KKwl1bnNpZ25lZCBpbnQgYmFuZF9oaWdoOworCXVuc2lnbmVkIGludCBiYW5kX2xvdzsKKwl1bnNpZ25lZCBpbnQgeDE7CisJdW5zaWduZWQgaW50IHgyOworCWludCBpOworCXVuc2lnbmVkIGludCBpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW0FMTE9XQUJMRV9GU19DT1VOVF0gPSB7CisJCQlGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCisJCQlGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UKKwl9OworCXVuc2lnbmVkIGludCBpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W0FMTE9XQUJMRV9GU19DT1VOVF0gPSB7CisJCQlGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCisJCQlGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UKKwl9OworCisJaW50IHN0YXR1czsKKworCS8qIGFsbG93YWJsZSBzYW1wbGUgcmF0ZXMgZm9yIEFEQyBpbiBNSHogKi8KKwlpbnQgYWZzW0FMTE9XQUJMRV9GU19DT1VOVF0gPSB7IDIwMCwgMTkyLCAxOTMsIDE5NCwgMTk1LAorCQkJCQkxOTYsIDIwNCwgMjA1LCAyMDYsIDIwNworCX07CisJLyogaW4gTUh6ICovCisJaW50IGlmX2xpbWl0X2hpZ2g7CisJaW50IGlmX2xpbWl0X2xvdzsKKwlpbnQgbG5iX2xvOworCWludCBsbmJfdW5jZXJ0YW5pdHk7CisKKwlpbnQgcmZfZnJlcTsKKwlpbnQgZGF0YV9yYXRlOworCXVuc2lnbmVkIGNoYXIgcmVnc1s0XTsKKworCWRwcmludGsoIiVzIDogRkVfU0VUX0ZST05URU5EXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoYy0+ZGVsaXZlcnlfc3lzdGVtICE9IFNZU19EVkJTKSB7CisJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgZGVsaXZlcnkgc3lzdGVtIHNlbGVjdGVkICglZClcbiIsCisJCQkJX19mdW5jX18sIGMtPmRlbGl2ZXJ5X3N5c3RlbSk7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFMTE9XQUJMRV9GU19DT1VOVDsgKytpKQorCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldID0gaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXSA9IEZBTFNFOworCisJaWZfbGltaXRfaGlnaCA9IC03MDAwMDA7CisJaWZfbGltaXRfbG93ID0gLTEwMDAwMDsKKwkvKiBpbiBNSHogKi8KKwlsbmJfbG8gPSAwOworCWxuYl91bmNlcnRhbml0eSA9IDA7CisKKwlyZl9mcmVxID0gMTAgKiBjLT5mcmVxdWVuY3kgOworCWRhdGFfcmF0ZSA9IGMtPnN5bWJvbF9yYXRlIC8gMTAwOworCisJc3RhdHVzID0gUEFTUzsKKworCWJhbmRfbG93ID0gKHJmX2ZyZXEgLSBsbmJfbG8pIC0gKChsbmJfdW5jZXJ0YW5pdHkgKiAyMDApCisJCQkJCSsgKGRhdGFfcmF0ZSAqIDEzNSkpIC8gMjAwOworCisJYmFuZF9oaWdoID0gKHJmX2ZyZXEgLSBsbmJfbG8pICsgKChsbmJfdW5jZXJ0YW5pdHkgKiAyMDApCisJCQkJCSsgKGRhdGFfcmF0ZSAqIDEzNSkpIC8gMjAwOworCisKKwlpY29hcnNlX3R1bmVfZnJlcSA9IDEwMDAwMCAqCisJCQkJKCgocmZfZnJlcSAtIGxuYl9sbykgLQorCQkJCQkoaWZfbGltaXRfbG93ICsgaWZfbGltaXRfaGlnaCkgLyAyKQorCQkJCQkJCQkvIDEwMDAwMCk7CisKKwlpZmluZV90dW5lX2ZyZXEgPSAocmZfZnJlcSAtIGxuYl9sbykgLSBpY29hcnNlX3R1bmVfZnJlcSA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQUxMT1dBQkxFX0ZTX0NPVU5UOyArK2kpIHsKKwkJeDEgPSAoKHJmX2ZyZXEgLSBsbmJfbG8pIC8gKGFmc1tpXSAqIDI1MDApKSAqCisJCQkJCShhZnNbaV0gKiAyNTAwKSArIGFmc1tpXSAqIDI1MDA7CisKKwkJeDIgPSAoKHJmX2ZyZXEgLSBsbmJfbG8pIC8gKGFmc1tpXSAqIDI1MDApKSAqCisJCQkJCQkJKGFmc1tpXSAqIDI1MDApOworCisJCWlmICgoKGJhbmRfbG93IDwgeDEpICYmICh4MSA8IGJhbmRfaGlnaCkpIHx8CisJCQkJCSgoYmFuZF9sb3cgPCB4MikgJiYgKHgyIDwgYmFuZF9oaWdoKSkpCisJCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV0gPSBUUlVFOworCisJfQorCisJZm9yIChpID0gMDsgaSA8IEFMTE9XQUJMRV9GU19DT1VOVDsgKytpKSB7CisJCXgxID0gKChyZl9mcmVxIC0gbG5iX2xvKSAvIChhZnNbaV0gKiA1MDAwKSkgKgorCQkJCQkoYWZzW2ldICogNTAwMCkgKyBhZnNbaV0gKiA1MDAwOworCisJCXgyID0gKChyZl9mcmVxIC0gbG5iX2xvKSAvIChhZnNbaV0gKiA1MDAwKSkgKgorCQkJCQkoYWZzW2ldICogNTAwMCk7CisKKwkJaWYgKCgoYmFuZF9sb3cgPCB4MSkgJiYgKHgxIDwgYmFuZF9oaWdoKSkgfHwKKwkJCQkJKChiYW5kX2xvdyA8IHgyKSAmJiAoeDIgPCBiYW5kX2hpZ2gpKSkKKwkJCQkJaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSA9IFRSVUU7CisJfQorCisJaW5iYW5kX2ludGVyZmVyZXJfaW5kID0gVFJVRTsKKwlmb3IgKGkgPSAwOyBpIDwgQUxMT1dBQkxFX0ZTX0NPVU5UOyArK2kpCisJCWluYmFuZF9pbnRlcmZlcmVyX2luZCAmPSBpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldIHwKKwkJCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV07CisKKwlpZiAoaW5iYW5kX2ludGVyZmVyZXJfaW5kKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBTExPV0FCTEVfRlNfQ09VTlQ7ICsraSkgeworCQkJaWYgKGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gPT0gRkFMU0UpIHsKKwkJCQlzYW1wbGVfcmF0ZSA9ICh1OCkgYWZzW2ldOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IEFMTE9XQUJMRV9GU19DT1VOVDsgKytpKSB7CisJCQlpZiAoKGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gfAorCQkJCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldKSA9PSBGQUxTRSkgeworCQkJCXNhbXBsZV9yYXRlID0gKHU4KSBhZnNbaV07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCX0KKworCWlmIChzYW1wbGVfcmF0ZSA+IDIwNyB8fCBzYW1wbGVfcmF0ZSA8IDE5MikKKwkJc2FtcGxlX3JhdGUgPSAyMDA7CisKKwlmaW5lX3R1bmVfZnJlcSA9ICgoMHg0MDAwICogKGlmaW5lX3R1bmVfZnJlcSAvIDEwKSkgLworCQkJCQkoKHNhbXBsZV9yYXRlKSAqIDEwMDApKTsKKworCWNvYXJzZV90dW5lX2ZyZXEgPSAodTgpKGljb2Fyc2VfdHVuZV9mcmVxIC8gMTAwMDAwKTsKKworCXJlZ3NbMF0gPSBzYW1wbGVfcmF0ZTsKKwlyZWdzWzFdID0gY29hcnNlX3R1bmVfZnJlcTsKKwlyZWdzWzJdID0gZmluZV90dW5lX2ZyZXEgJiAweEZGOworCXJlZ3NbM10gPSBmaW5lX3R1bmVfZnJlcSA+PiA4ICYgMHhGRjsKKworCXN0YXR1cyB8PSBzaTIxX3dyaXRlcmVncyhzdGF0ZSwgUExMX0RJVklTT1JfUkVHLCAmcmVnc1swXSwgMHgwNCk7CisKKwlzdGF0ZS0+ZnMgPSBzYW1wbGVfcmF0ZTsvKkFEQyBNSHoqLworCXNpMjF4eF9zZXRhY3F1aXJlKGZlLCBjLT5zeW1ib2xfcmF0ZSwgYy0+ZmVjX2lubmVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpMjF4eF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHJlZ2RhdGE7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJc2kyMV9yZWFkcmVncyhzdGF0ZSwgU1lTVEVNX01PREVfUkVHLCAmcmVnZGF0YSwgMHgwMSk7CisJcmVnZGF0YSB8PSAxIDw8IDY7CisJc2kyMV93cml0ZXJlZ3Moc3RhdGUsIFNZU1RFTV9NT0RFX1JFRywgJnJlZ2RhdGEsIDB4MDEpOworCXN0YXRlLT5pbml0aWFsaXNlZCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2kyMXh4X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlrZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBzaTIxeHhfb3BzID0geworCisJLmluZm8gPSB7CisJCS5uYW1lCQkJPSAiU0wgU0kyMVhYIERWQi1TIiwKKwkJLnR5cGUJCQk9IEZFX1FQU0ssCisJCS5mcmVxdWVuY3lfbWluCQk9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXgJCT0gMjE1MDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZQk9IDEyNSwJIC8qIGtIeiBmb3IgUVBTSyBmcm9udGVuZHMgKi8KKwkJLmZyZXF1ZW5jeV90b2xlcmFuY2UJPSAwLAorCQkuc3ltYm9sX3JhdGVfbWluCT0gMTAwMDAwMCwKKwkJLnN5bWJvbF9yYXRlX21heAk9IDQ1MDAwMDAwLAorCQkuc3ltYm9sX3JhdGVfdG9sZXJhbmNlCT0gNTAwLAkvKiBwcG0gKi8KKwkJLmNhcHMgPSBGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAorCQlGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfN184IHwKKwkJRkVfQ0FOX1FQU0sgfAorCQlGRV9DQU5fRkVDX0FVVE8KKwl9LAorCisJLnJlbGVhc2UgPSBzaTIxeHhfcmVsZWFzZSwKKwkuaW5pdCA9IHNpMjF4eF9pbml0LAorCS5zbGVlcCA9IHNpMjF4eF9zbGVlcCwKKwkud3JpdGUgPSBzaTIxX3dyaXRlLAorCS5yZWFkX3N0YXR1cyA9IHNpMjFfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyID0gc2kyMV9yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBzaTIxX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3NuciA9IHNpMjFfcmVhZF9zbnIsCisJLnJlYWRfdWNibG9ja3MgPSBzaTIxX3JlYWRfdWNibG9ja3MsCisJLmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSBzaTIxeHhfc2VuZF9kaXNlcWNfbXNnLAorCS5kaXNlcWNfc2VuZF9idXJzdCA9IHNpMjF4eF9zZW5kX2Rpc2VxY19idXJzdCwKKwkuc2V0X3RvbmUgPSBzaTIxeHhfc2V0X3RvbmUsCisJLnNldF92b2x0YWdlID0gc2kyMXh4X3NldF92b2x0YWdlLAorCisJLnNldF9wcm9wZXJ0eSA9IHNpMjF4eF9zZXRfcHJvcGVydHksCisJLmdldF9wcm9wZXJ0eSA9IHNpMjF4eF9nZXRfcHJvcGVydHksCisJLnNldF9mcm9udGVuZCA9IHNpMjF4eF9zZXRfZnJvbnRlbmQsCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzaTIxeHhfYXR0YWNoKGNvbnN0IHN0cnVjdCBzaTIxeHhfY29uZmlnICpjb25maWcsCisJCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSA9IE5VTEw7CisJaW50IGlkOworCisJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCisJc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2kyMXh4X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBzZXR1cCB0aGUgc3RhdGUgKi8KKwlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOworCXN0YXRlLT5pMmMgPSBpMmM7CisJc3RhdGUtPmluaXRpYWxpc2VkID0gMDsKKwlzdGF0ZS0+ZXJybW9kZSA9IFNUQVRVU19CRVI7CisKKwkvKiBjaGVjayBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKi8KKwlpZCA9IHNpMjFfcmVhZHJlZyhzdGF0ZSwgU1lTVEVNX01PREVfUkVHKTsKKwlzaTIxX3dyaXRlcmVnKHN0YXRlLCBTWVNURU1fTU9ERV9SRUcsIGlkIHwgMHg0MCk7IC8qIHN0YW5kYnkgb2ZmICovCisJbXNsZWVwKDIwMCk7CisJaWQgPSBzaTIxX3JlYWRyZWcoc3RhdGUsIDB4MDApOworCisJLyogcmVnaXN0ZXIgMHgwMCBjb250YWluczoKKwkJMHgzNCBmb3IgU0kyMTA3CisJCTB4MjQgZm9yIFNJMjEwOAorCQkweDE0IGZvciBTSTIxMDkKKwkJMHgwNCBmb3IgU0kyMTEwCisJKi8KKwlpZiAoaWQgIT0gMHgwNCAmJiBpZCAhPSAweDE0KQorCQlnb3RvIGVycm9yOworCisJLyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJnNpMjF4eF9vcHMsCisJCQkJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisKK2Vycm9yOgorCWtmcmVlKHN0YXRlKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woc2kyMXh4X2F0dGFjaCk7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTTCBTSTIxWFggRFZCIERlbW9kdWxhdG9yIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSWdvciBNLiBMaXBsaWFuaW4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zaTIxeHguaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zaTIxeHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDFiNWI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NpMjF4eC5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgU0kyMVhYX0gKKyNkZWZpbmUgU0kyMVhYX0gKKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCitzdHJ1Y3Qgc2kyMXh4X2NvbmZpZyB7CisJLyogdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KKwl1OCBkZW1vZF9hZGRyZXNzOworCisJLyogbWluaW11bSBkZWxheSBiZWZvcmUgcmV0dW5pbmcgKi8KKwlpbnQgbWluX2RlbGF5X21zOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TSTIxWFgpIHx8IFwKKwkJKGRlZmluZWQoQ09ORklHX0RWQl9TSTIxWFhfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqc2kyMXh4X2F0dGFjaChjb25zdCBzdHJ1Y3Qgc2kyMXh4X2NvbmZpZyAqY29uZmlnLAorCQkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqc2kyMXh4X2F0dGFjaCgKKwkJY29uc3Qgc3RydWN0IHNpMjF4eF9jb25maWcgKmNvbmZpZywgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgc2kyMXh4X3dyaXRlcmVnaXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IHJlZywgdTggdmFsKQoreworCWludCByID0gMDsKKwl1OCBidWZbXSA9IHtyZWcsIHZhbH07CisJaWYgKGZlLT5vcHMud3JpdGUpCisJCXIgPSBmZS0+b3BzLndyaXRlKGZlLCBidWYsIDIpOworCXJldHVybiByOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zcDg4N3guYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zcDg4N3guYwppbmRleCA0NTQzNjA5Li41NTk1MDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3A4ODd4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NwODg3eC5jCkBAIC0zMzcsNyArMzM3LDggQEAKIAkJCQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CiAJc3RydWN0IHNwODg3eF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlpbnQgYWN0dWFsX2ZyZXEsIGVycjsKKwl1bnNpZ25lZCBhY3R1YWxfZnJlcTsKKwlpbnQgZXJyOwogCXUxNiB2YWwsIHJlZzB4YzA1OwogCiAJaWYgKHAtPnUub2ZkbS5iYW5kd2lkdGggIT0gQkFORFdJRFRIXzhfTUhaICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjAwMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTJjYjBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYwMDAuYwpAQCAtMCwwICsxLDI1NSBAQAorICAvKgorICAgICBEcml2ZXIgZm9yIFNUIFNUQjYwMDAgRFZCUyBTaWxpY29uIHR1bmVyCisKKyAgICAgQ29weXJpZ2h0IChDKSAyMDA4IElnb3IgTS4gTGlwbGlhbmluIChsaXBsaWFuaW5AbWUuYnkpCisKKyAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCisgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaW5jbHVkZSAic3RiNjAwMC5oIgorCitzdGF0aWMgaW50IGRlYnVnOworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyAic3RiNjAwMDogIiBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisKK3N0cnVjdCBzdGI2MDAwX3ByaXYgeworCS8qIGkyYyBkZXRhaWxzICovCisJaW50IGkyY19hZGRyZXNzOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCXUzMiBmcmVxdWVuY3k7Cit9OworCitzdGF0aWMgaW50IHN0YjYwMDBfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlrZnJlZShmZS0+dHVuZXJfcHJpdik7CisJZmUtPnR1bmVyX3ByaXYgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YjYwMDBfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0YjYwMDBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCWludCByZXQ7CisJdTggYnVmW10gPSB7IDEwLCAwIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHByaXYtPmkyY19hZGRyZXNzLAorCQkuZmxhZ3MgPSAwLAorCQkuYnVmID0gYnVmLAorCQkubGVuID0gMgorCX07CisKKwlkcHJpbnRrKCIlczpcbiIsIF9fZnVuY19fKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAmbXNnLCAxKTsKKwlpZiAocmV0ICE9IDEpCisJCWRwcmludGsoIiVzOiBpMmMgZXJyb3JcbiIsIF9fZnVuY19fKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwlyZXR1cm4gKHJldCA9PSAxKSA/IDAgOiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3RiNjAwMF9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCBzdGI2MDAwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwl1bnNpZ25lZCBpbnQgbiwgbTsKKwlpbnQgcmV0OworCXUzMiBmcmVxX21oejsKKwlpbnQgYmFuZHdpZHRoOworCXU4IGJ1ZlsxMl07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHByaXYtPmkyY19hZGRyZXNzLAorCQkuZmxhZ3MgPSAwLAorCQkuYnVmID0gYnVmLAorCQkubGVuID0gMTIKKwl9OworCisJZHByaW50aygiJXM6XG4iLCBfX2Z1bmNfXyk7CisKKwlmcmVxX21oeiA9IHBhcmFtcy0+ZnJlcXVlbmN5IC8gMTAwMDsKKwliYW5kd2lkdGggPSBwYXJhbXMtPnUucXBzay5zeW1ib2xfcmF0ZSAvIDEwMDAwMDA7CisKKwlpZiAoYmFuZHdpZHRoID4gMzEpCisJCWJhbmR3aWR0aCA9IDMxOworCisJaWYgKChmcmVxX21oeiA+IDk0OSkgJiYgKGZyZXFfbWh6IDwgMjE1MSkpIHsKKwkJYnVmWzBdID0gMHgwMTsKKwkJYnVmWzFdID0gMHhhYzsKKwkJaWYgKGZyZXFfbWh6IDwgMTk1MCkKKwkJCWJ1ZlsxXSA9IDB4YWE7CisJCWlmIChmcmVxX21oeiA8IDE4MDApCisJCQlidWZbMV0gPSAweGE4OworCQlpZiAoZnJlcV9taHogPCAxNjUwKQorCQkJYnVmWzFdID0gMHhhNjsKKwkJaWYgKGZyZXFfbWh6IDwgMTUzMCkKKwkJCWJ1ZlsxXSA9IDB4YTU7CisJCWlmIChmcmVxX21oeiA8IDE0NzApCisJCQlidWZbMV0gPSAweGE0OworCQlpZiAoZnJlcV9taHogPCAxMzcwKQorCQkJYnVmWzFdID0gMHhhMjsKKwkJaWYgKGZyZXFfbWh6IDwgMTMwMCkKKwkJCWJ1ZlsxXSA9IDB4YTE7CisJCWlmIChmcmVxX21oeiA8IDEyMDApCisJCQlidWZbMV0gPSAweGEwOworCQlpZiAoZnJlcV9taHogPCAxMDc1KQorCQkJYnVmWzFdID0gMHhiYzsKKwkJaWYgKGZyZXFfbWh6IDwgMTAwMCkKKwkJCWJ1ZlsxXSA9IDB4YmE7CisJCWlmIChmcmVxX21oeiA8IDEwNzUpIHsKKwkJCW4gPSBmcmVxX21oeiAvIDg7IC8qIHZjbz1sbyo0ICovCisJCQltID0gMjsKKwkJfSBlbHNlIHsKKwkJCW4gPSBmcmVxX21oeiAvIDE2OyAvKiB2Y289bG8qMiAqLworCQkJbSA9IDE7CisJCX0KKwkJYnVmWzJdID0gbiA+PiAxOworCQlidWZbM10gPSAodW5zaWduZWQgY2hhcikoKChuICYgMSkgPDwgNykgfAorCQkJCQkobSAqIGZyZXFfbWh6IC0gbiAqIDE2KSB8IDB4NjApOworCQlidWZbNF0gPSAweDA0OworCQlidWZbNV0gPSAweDBlOworCisJCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKShiYW5kd2lkdGgpOworCisJCWJ1Zls3XSA9IDB4ZDg7CisJCWJ1Zls4XSA9IDB4ZDA7CisJCWJ1Zls5XSA9IDB4NTA7CisJCWJ1ZlsxMF0gPSAweGViOworCQlidWZbMTFdID0gMHg0ZjsKKworCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCQlyZXQgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAmbXNnLCAxKTsKKwkJaWYgKHJldCAhPSAxKQorCQkJZHByaW50aygiJXM6IGkyYyBlcnJvclxuIiwgX19mdW5jX18pOworCisJCXVkZWxheSgxMCk7CisJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJCWJ1ZlswXSA9IDB4MDc7CisJCWJ1ZlsxXSA9IDB4ZGY7CisJCWJ1ZlsyXSA9IDB4ZDA7CisJCWJ1ZlszXSA9IDB4NTA7CisJCWJ1Zls0XSA9IDB4ZmI7CisJCW1zZy5sZW4gPSA1OworCisJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCisJCXJldCA9IGkyY190cmFuc2Zlcihwcml2LT5pMmMsICZtc2csIDEpOworCQlpZiAocmV0ICE9IDEpCisJCQlkcHJpbnRrKCIlczogaTJjIGVycm9yXG4iLCBfX2Z1bmNfXyk7CisKKwkJdWRlbGF5KDEwKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwkJcHJpdi0+ZnJlcXVlbmN5ID0gZnJlcV9taHogKiAxMDAwOworCisJCXJldHVybiAocmV0ID09IDEpID8gMCA6IHJldDsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHN0YjYwMDBfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpmcmVxdWVuY3kpCit7CisJc3RydWN0IHN0YjYwMDBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCSpmcmVxdWVuY3kgPSBwcml2LT5mcmVxdWVuY3k7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3R1bmVyX29wcyBzdGI2MDAwX3R1bmVyX29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiU1QgU1RCNjAwMCIsCisJCS5mcmVxdWVuY3lfbWluID0gOTUwMDAwLAorCQkuZnJlcXVlbmN5X21heCA9IDIxNTAwMDAKKwl9LAorCS5yZWxlYXNlID0gc3RiNjAwMF9yZWxlYXNlLAorCS5zbGVlcCA9IHN0YjYwMDBfc2xlZXAsCisJLnNldF9wYXJhbXMgPSBzdGI2MDAwX3NldF9wYXJhbXMsCisJLmdldF9mcmVxdWVuY3kgPSBzdGI2MDAwX2dldF9mcmVxdWVuY3ksCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdGI2MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGFkZHIsCisJCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3Qgc3RiNjAwMF9wcml2ICpwcml2ID0gTlVMTDsKKwl1OCBiMFtdID0geyAwIH07CisJdTggYjFbXSA9IHsgMCwgMCB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKKwkJeworCQkJLmFkZHIgPSBhZGRyLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgPSBiMCwKKwkJCS5sZW4gPSAwCisJCX0sIHsKKwkJCS5hZGRyID0gYWRkciwKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9IGIxLAorCQkJLmxlbiA9IDIKKwkJfQorCX07CisJaW50IHJldDsKKworCWRwcmludGsoIiVzOlxuIiwgX19mdW5jX18pOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCS8qIGlzIHNvbWUgaTJjIGRldmljZSBoZXJlID8gKi8KKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCBtc2csIDIpOworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwlpZiAocmV0ICE9IDIpCisJCXJldHVybiBOVUxMOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdGI2MDAwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXByaXYtPmkyY19hZGRyZXNzID0gYWRkcjsKKwlwcml2LT5pMmMgPSBpMmM7CisKKwltZW1jcHkoJmZlLT5vcHMudHVuZXJfb3BzLCAmc3RiNjAwMF90dW5lcl9vcHMsCisJCQkJc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CisKKwlmZS0+dHVuZXJfcHJpdiA9IHByaXY7CisKKwlyZXR1cm4gZmU7Cit9CitFWFBPUlRfU1lNQk9MKHN0YjYwMDBfYXR0YWNoKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBTVEI2MDAwIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBtZS5ieT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MDAwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZTQ3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjAwMC5oCkBAIC0wLDAgKzEsNTEgQEAKKyAgLyoKKyAgICAgRHJpdmVyIGZvciBTVCBzdGI2MDAwIERWQlMgU2lsaWNvbiB0dW5lcgorCisgICAgIENvcHlyaWdodCAoQykgMjAwOCBJZ29yIE0uIExpcGxpYW5pbiAobGlwbGlhbmluQG1lLmJ5KQorCisgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKworICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgICovCisKKyNpZm5kZWYgX19EVkJfU1RCNjAwMF9IX18KKyNkZWZpbmUgX19EVkJfU1RCNjAwMF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisvKioKKyAqIEF0dGFjaCBhIHN0YjYwMDAgdHVuZXIgdG8gdGhlIHN1cHBsaWVkIGZyb250ZW5kIHN0cnVjdHVyZS4KKyAqCisgKiBAcGFyYW0gZmUgRnJvbnRlbmQgdG8gYXR0YWNoIHRvLgorICogQHBhcmFtIGFkZHIgaTJjIGFkZHJlc3Mgb2YgdGhlIHR1bmVyLgorICogQHBhcmFtIGkyYyBpMmMgYWRhcHRlciB0byB1c2UuCisgKiBAcmV0dXJuIEZFIHBvaW50ZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1NUQjYwMDApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfU1RCNjAwMF9NT0RVTEUpIFwKKwkJCQkJCQkmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqc3RiNjAwMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBhZGRyLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdGI2MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJCSAgaW50IGFkZHIsCisJCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19EVkJfU1RCNjAwMCAqLworCisjZW5kaWYgLyogX19EVkJfU1RCNjAwMF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjg4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI4OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTE5NGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI4OC5jCkBAIC0wLDAgKzEsNjE4IEBACisvKgorCURyaXZlciBmb3IgU1QgU1RWMDI4OCBkZW1vZHVsYXRvcgorCUNvcHlyaWdodCAoQykgMjAwNiBHZW9yZyBBY2hlciwgQmF5Q29tIEdtYkgsIGFjaGVyIChhdCkgYmF5Y29tIChkb3QpIGRlCisJCWZvciBSZWVsIE11bHRpbWVkaWEKKwlDb3B5cmlnaHQgKEMpIDIwMDggVHVyYm9TaWdodC5jb20sIEJvYiBMaXUgPGJvYkB0dXJib3NpZ2h0LmNvbT4KKwlDb3B5cmlnaHQgKEMpIDIwMDggSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBtZS5ieT4KKwkJUmVtb3ZlZCBzdGI2MDAwIHNwZWNpZmljIHR1bmVyIGNvZGUgYW5kIHJldmlzZWQgc29tZQorCQlwcm9jZWR1cmVzLgorCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgInN0djAyODguaCIKKworc3RydWN0IHN0djAyODhfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCWNvbnN0IHN0cnVjdCBzdHYwMjg4X2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CisKKwl1OCBpbml0aWFsaXNlZDoxOworCXUzMiB0dW5lcl9mcmVxdWVuY3k7CisJdTMyIHN5bWJvbF9yYXRlOworCWZlX2NvZGVfcmF0ZV90IGZlY19pbm5lcjsKKwlpbnQgZXJybW9kZTsKK307CisKKyNkZWZpbmUgU1RBVFVTX0JFUiAwCisjZGVmaW5lIFNUQVRVU19VQ0JMT0NLUyAxCisKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IGRlYnVnX2xlZ2FjeV9kaXNoX3N3aXRjaDsKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZykgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgInN0djAyODg6ICIgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisKK3N0YXRpYyBpbnQgc3R2MDI4OF93cml0ZXJlZ0koc3RydWN0IHN0djAyODhfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHU4IGRhdGEpCit7CisJaW50IHJldDsKKwl1OCBidWZbXSA9IHsgcmVnLCBkYXRhIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCisJCS5mbGFncyA9IDAsCisJCS5idWYgPSBidWYsCisJCS5sZW4gPSAyCisJfTsKKworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkKKwkJZHByaW50aygiJXM6IHdyaXRlcmVnIGVycm9yIChyZWcgPT0gMHglMDJ4LCB2YWwgPT0gMHglMDJ4LCAiCisJCQkicmV0ID09ICVpKVxuIiwgX19mdW5jX18sIHJlZywgZGF0YSwgcmV0KTsKKworCXJldHVybiAocmV0ICE9IDEpID8gLUVSRU1PVEVJTyA6IDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDI4OF93cml0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWlmIChsZW4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3R2MDI4OF93cml0ZXJlZ0koc3RhdGUsIGJ1ZlswXSwgYnVmWzFdKTsKK30KKworc3RhdGljIHU4IHN0djAyODhfcmVhZHJlZyhzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKK3sKKwlpbnQgcmV0OworCXU4IGIwW10gPSB7IHJlZyB9OworCXU4IGIxW10gPSB7IDAgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeworCQkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgPSBiMCwKKwkJCS5sZW4gPSAxCisJCX0sIHsKKwkJCS5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9IGIxLAorCQkJLmxlbiA9IDEKKwkJfQorCX07CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAyKTsKKworCWlmIChyZXQgIT0gMikKKwkJZHByaW50aygiJXM6IHJlYWRyZWcgZXJyb3IgKHJlZyA9PSAweCUwMngsIHJldCA9PSAlaSlcbiIsCisJCQkJX19mdW5jX18sIHJlZywgcmV0KTsKKworCXJldHVybiBiMVswXTsKK30KKworc3RhdGljIGludCBzdHYwMjg4X3NldF9zeW1ib2xyYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgc3JhdGUpCit7CisJc3RydWN0IHN0djAyODhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdW5zaWduZWQgaW50IHRlbXA7CisJdW5zaWduZWQgY2hhciBiWzNdOworCisJaWYgKChzcmF0ZSA8IDEwMDAwMDApIHx8IChzcmF0ZSA+IDQ1MDAwMDAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0ZW1wID0gKHVuc2lnbmVkIGludClzcmF0ZSAvIDEwMDA7CisKKwkJdGVtcCA9IHRlbXAgKiAzMjc2ODsKKwkJdGVtcCA9IHRlbXAgLyAyNTsKKwkJdGVtcCA9IHRlbXAgLyAxMjU7CisJCWJbMF0gPSAodW5zaWduZWQgY2hhcikoKHRlbXAgPj4gMTIpICYgMHhmZik7CisJCWJbMV0gPSAodW5zaWduZWQgY2hhcikoKHRlbXAgPj4gNCkgJiAweGZmKTsKKwkJYlsyXSA9ICh1bnNpZ25lZCBjaGFyKSgodGVtcCA8PCA0KSAmIDB4ZjApOworCQlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgyOCwgMHg4MCk7IC8qIFNGUkggKi8KKwkJc3R2MDI4OF93cml0ZXJlZ0koc3RhdGUsIDB4MjksIDApOyAvKiBTRlJNICovCisJCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDJhLCAwKTsgLyogU0ZSTCAqLworCisJCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDI4LCBiWzBdKTsKKwkJc3R2MDI4OF93cml0ZXJlZ0koc3RhdGUsIDB4MjksIGJbMV0pOworCQlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgyYSwgYlsyXSk7CisJCWRwcmludGsoInN0djAyODg6IHN0djAyODhfc2V0X3N5bWJvbHJhdGVcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDI4OF9zZW5kX2Rpc2VxY19tc2coc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgIHN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKm0pCit7CisJc3RydWN0IHN0djAyODhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlpbnQgaTsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgwOSwgMCk7CisJbXNsZWVwKDMwKTsKKwlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgwNSwgMHgxNik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bXNnX2xlbjsgaSsrKSB7CisJCWlmIChzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgwNiwgbS0+bXNnW2ldKSkKKwkJCXJldHVybiAtRVJFTU9URUlPOworCQltc2xlZXAoMTIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfc2VuZF9kaXNlcWNfYnVyc3Qoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCQlmZV9zZWNfbWluaV9jbWRfdCBidXJzdCkKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoc3R2MDI4OF93cml0ZXJlZ0koc3RhdGUsIDB4MDUsIDB4MTYpKS8qIGJ1cnN0IG1vZGUgKi8KKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlpZiAoc3R2MDI4OF93cml0ZXJlZ0koc3RhdGUsIDB4MDYsIGJ1cnN0ID09IFNFQ19NSU5JX0EgPyAweDAwIDogMHhmZikpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJaWYgKHN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDA2LCAweDEyKSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHYwMjg4X3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXN3aXRjaCAodG9uZSkgeworCWNhc2UgU0VDX1RPTkVfT046CisJCWlmIChzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgwNSwgMHgxMCkpLyogYnVyc3QgbW9kZSAqLworCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJCXJldHVybiBzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgwNiwgMHhmZik7CisKKwljYXNlIFNFQ19UT05FX09GRjoKKwkJaWYgKHN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDA1LCAweDEzKSkvKiBidXJzdCBtb2RlICovCisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwkJcmV0dXJuIHN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDA2LCAweDAwKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIHU4IHN0djAyODhfaW5pdHRhYltdID0geworCTB4MDEsIDB4MTUsCisJMHgwMiwgMHgyMCwKKwkweDA5LCAweDAsCisJMHgwYSwgMHg0LAorCTB4MGIsIDB4MCwKKwkweDBjLCAweDAsCisJMHgwZCwgMHgwLAorCTB4MGUsIDB4ZDQsCisJMHgwZiwgMHgzMCwKKwkweDExLCAweDgwLAorCTB4MTIsIDB4MDMsCisJMHgxMywgMHg0OCwKKwkweDE0LCAweDg0LAorCTB4MTUsIDB4NDUsCisJMHgxNiwgMHhiNywKKwkweDE3LCAweDljLAorCTB4MTgsIDB4MCwKKwkweDE5LCAweGE2LAorCTB4MWEsIDB4ODgsCisJMHgxYiwgMHg4ZiwKKwkweDFjLCAweGYwLAorCTB4MjAsIDB4MGIsCisJMHgyMSwgMHg1NCwKKwkweDIyLCAweDAsCisJMHgyMywgMHgwLAorCTB4MmIsIDB4ZmYsCisJMHgyYywgMHhmNywKKwkweDMwLCAweDAsCisJMHgzMSwgMHgxZSwKKwkweDMyLCAweDE0LAorCTB4MzMsIDB4MGYsCisJMHgzNCwgMHgwOSwKKwkweDM1LCAweDBjLAorCTB4MzYsIDB4MDUsCisJMHgzNywgMHgyZiwKKwkweDM4LCAweDE2LAorCTB4MzksIDB4YmUsCisJMHgzYSwgMHgwLAorCTB4M2IsIDB4MTMsCisJMHgzYywgMHgxMSwKKwkweDNkLCAweDMwLAorCTB4NDAsIDB4NjMsCisJMHg0MSwgMHgwNCwKKwkweDQyLCAweDYwLAorCTB4NDMsIDB4MDAsCisJMHg0NCwgMHgwMCwKKwkweDQ1LCAweDAwLAorCTB4NDYsIDB4MDAsCisJMHg0NywgMHgwMCwKKwkweDRhLCAweDAwLAorCTB4NTAsIDB4MTAsCisJMHg1MSwgMHgzOCwKKwkweDUyLCAweDIxLAorCTB4NTgsIDB4NTQsCisJMHg1OSwgMHg4NiwKKwkweDVhLCAweDAsCisJMHg1YiwgMHg5YiwKKwkweDVjLCAweDA4LAorCTB4NWQsIDB4N2YsCisJMHg1ZSwgMHgwLAorCTB4NWYsIDB4ZmYsCisJMHg3MCwgMHgwLAorCTB4NzEsIDB4MCwKKwkweDcyLCAweDAsCisJMHg3NCwgMHgwLAorCTB4NzUsIDB4MCwKKwkweDc2LCAweDAsCisJMHg4MSwgMHgwLAorCTB4ODIsIDB4M2YsCisJMHg4MywgMHgzZiwKKwkweDg0LCAweDAsCisJMHg4NSwgMHgwLAorCTB4ODgsIDB4MCwKKwkweDg5LCAweDAsCisJMHg4YSwgMHgwLAorCTB4OGIsIDB4MCwKKwkweDhjLCAweDAsCisJMHg5MCwgMHgwLAorCTB4OTEsIDB4MCwKKwkweDkyLCAweDAsCisJMHg5MywgMHgwLAorCTB4OTQsIDB4MWMsCisJMHg5NywgMHgwLAorCTB4YTAsIDB4NDgsCisJMHhhMSwgMHgwLAorCTB4YjAsIDB4YjgsCisJMHhiMSwgMHgzYSwKKwkweGIyLCAweDEwLAorCTB4YjMsIDB4ODIsCisJMHhiNCwgMHg4MCwKKwkweGI1LCAweDgyLAorCTB4YjYsIDB4ODIsCisJMHhiNywgMHg4MiwKKwkweGI4LCAweDIwLAorCTB4YjksIDB4MCwKKwkweGYwLCAweDAsCisJMHhmMSwgMHgwLAorCTB4ZjIsIDB4YzAsCisJMHg1MSwgMHgzNiwKKwkweDUyLCAweDA5LAorCTB4NTMsIDB4OTQsCisJMHg1NCwgMHg2MiwKKwkweDU1LCAweDI5LAorCTB4NTYsIDB4NjQsCisJMHg1NywgMHgyYiwKKwkweGZmLCAweGZmLAorfTsKKworc3RhdGljIGludCBzdHYwMjg4X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHQpCit7CisJZHByaW50aygiJXM6ICVzXG4iLCBfX2Z1bmNfXywKKwkJdm9sdCA9PSBTRUNfVk9MVEFHRV8xMyA/ICJTRUNfVk9MVEFHRV8xMyIgOgorCQl2b2x0ID09IFNFQ19WT0xUQUdFXzE4ID8gIlNFQ19WT0xUQUdFXzE4IiA6ICI/PyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDI4OF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdHYwMjg4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCBpOworCXU4IHJlZzsKKwl1OCB2YWw7CisKKwlkcHJpbnRrKCJzdHYwMjg4OiBpbml0IGNoaXBcbiIpOworCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDQxLCAweDA0KTsKKwltc2xlZXAoNTApOworCisJLyogd2UgaGF2ZSBkZWZhdWx0IGluaXR0YWIgKi8KKwlpZiAoc3RhdGUtPmNvbmZpZy0+aW5pdHRhYiA9PSBOVUxMKSB7CisJCWZvciAoaSA9IDA7ICEoc3R2MDI4OF9pbml0dGFiW2ldID09IDB4ZmYgJiYKKwkJCQlzdHYwMjg4X2luaXR0YWJbaSArIDFdID09IDB4ZmYpOyBpICs9IDIpCisJCQlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgc3R2MDI4OF9pbml0dGFiW2ldLAorCQkJCQlzdHYwMjg4X2luaXR0YWJbaSArIDFdKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyA7IGkgKz0gMikgIHsKKwkJCXJlZyA9IHN0YXRlLT5jb25maWctPmluaXR0YWJbaV07CisJCQl2YWwgPSBzdGF0ZS0+Y29uZmlnLT5pbml0dGFiW2krMV07CisJCQlpZiAocmVnID09IDB4ZmYgJiYgdmFsID09IDB4ZmYpCisJCQkJYnJlYWs7CisJCQlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgcmVnLCB2YWwpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IHN0djAyODhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwl1OCBzeW5jID0gc3R2MDI4OF9yZWFkcmVnKHN0YXRlLCAweDI0KTsKKwlpZiAoc3luYyA9PSAyNTUpCisJCXN5bmMgPSAwOworCisJZHByaW50aygiJXMgOiBGRV9SRUFEX1NUQVRVUyA6IFZTVEFUVVM6IDB4JTAyeFxuIiwgX19mdW5jX18sIHN5bmMpOworCisJKnN0YXR1cyA9IDA7CisKKwlpZiAoKHN5bmMgJiAweDA4KSA9PSAweDA4KSB7CisJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7CisJCWRwcmludGsoInN0djAyODggaGFzIGxvY2tlZFxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDI4OF9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCit7CisJc3RydWN0IHN0djAyODhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlpZiAoc3RhdGUtPmVycm1vZGUgIT0gU1RBVFVTX0JFUikKKwkJcmV0dXJuIDA7CisJKmJlciA9IChzdHYwMjg4X3JlYWRyZWcoc3RhdGUsIDB4MjYpIDw8IDgpIHwKKwkJCQkJc3R2MDI4OF9yZWFkcmVnKHN0YXRlLCAweDI3KTsKKwlkcHJpbnRrKCJzdHYwMjg4X3JlYWRfYmVyICVkXG4iLCAqYmVyKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc3R2MDI4OF9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzdHJlbmd0aCkKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXMzMiBzaWduYWwgPSAgMHhmZmZmIC0gKChzdHYwMjg4X3JlYWRyZWcoc3RhdGUsIDB4MTApIDw8IDgpKTsKKworCisJc2lnbmFsID0gc2lnbmFsICogNSAvIDQ7CisJKnN0cmVuZ3RoID0gKHNpZ25hbCA+IDB4ZmZmZikgPyAweGZmZmYgOiAoc2lnbmFsIDwgMCkgPyAwIDogc2lnbmFsOworCWRwcmludGsoInN0djAyODhfcmVhZF9zaWduYWxfc3RyZW5ndGggJWRcbiIsICpzdHJlbmd0aCk7CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgc3R2MDI4OF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDQxLCAweDg0KTsKKwlzdGF0ZS0+aW5pdGlhbGlzZWQgPSAwOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IHN0djAyODhfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXN0cnVjdCBzdHYwMjg4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJczMyIHhzbnIgPSAweGZmZmYgLSAoKHN0djAyODhfcmVhZHJlZyhzdGF0ZSwgMHgyZCkgPDwgOCkKKwkJCSAgIHwgc3R2MDI4OF9yZWFkcmVnKHN0YXRlLCAweDJlKSk7CisJeHNuciA9IDMgKiAoeHNuciAtIDB4YTEwMCk7CisJKnNuciA9ICh4c25yID4gMHhmZmZmKSA/IDB4ZmZmZiA6ICh4c25yIDwgMCkgPyAwIDogeHNucjsKKwlkcHJpbnRrKCJzdHYwMjg4X3JlYWRfc25yICVkXG4iLCAqc25yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWlmIChzdGF0ZS0+ZXJybW9kZSAhPSBTVEFUVVNfQkVSKQorCQlyZXR1cm4gMDsKKwkqdWNibG9ja3MgPSAoc3R2MDI4OF9yZWFkcmVnKHN0YXRlLCAweDI2KSA8PCA4KSB8CisJCQkJCXN0djAyODhfcmVhZHJlZyhzdGF0ZSwgMHgyNyk7CisJZHByaW50aygic3R2MDI4OF9yZWFkX2JlciAlZFxuIiwgKnVjYmxvY2tzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfc2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHR2X3Byb3BlcnR5ICpwKQoreworCWRwcmludGsoIiVzKC4uKVxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHR2X3Byb3BlcnR5ICpwKQoreworCWRwcmludGsoIiVzKC4uKVxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmRmcCkKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKKworCWNoYXIgdG07CisJdW5zaWduZWQgY2hhciB0ZGFbM107CisKKwlkcHJpbnRrKCIlcyA6IEZFX1NFVF9GUk9OVEVORFxuIiwgX19mdW5jX18pOworCisJaWYgKGMtPmRlbGl2ZXJ5X3N5c3RlbSAhPSBTWVNfRFZCUykgeworCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIGRlbGl2ZXJ5ICIKKwkJCQkic3lzdGVtIHNlbGVjdGVkICglZClcbiIsCisJCQkJX19mdW5jX18sIGMtPmRlbGl2ZXJ5X3N5c3RlbSk7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJaWYgKHN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMpCisJCXN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMoZmUsIDApOworCisJLyogb25seSBmcmVxdWVuY3kgJiBzeW1ib2xfcmF0ZSBhcmUgdXNlZCBmb3IgdHVuZXIqLworCWRmcC0+ZnJlcXVlbmN5ID0gYy0+ZnJlcXVlbmN5OworCWRmcC0+dS5xcHNrLnN5bWJvbF9yYXRlID0gYy0+c3ltYm9sX3JhdGU7CisJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpIHsKKwkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyhmZSwgZGZwKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJfQorCisJdWRlbGF5KDEwKTsKKwlzdHYwMjg4X3NldF9zeW1ib2xyYXRlKGZlLCBjLT5zeW1ib2xfcmF0ZSk7CisJLyogQ2FycmllciBsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgxNSwgMHhjNSk7CisKKwl0ZGFbMF0gPSAweDJiOyAvKiBDRlJNICovCisJdGRhWzJdID0gMHgwOyAvKiBDRlJMICovCisJZm9yICh0bSA9IC02OyB0bSA8IDc7KSB7CisJCS8qIFZpdGVyYmkgc3RhdHVzICovCisJCWlmIChzdHYwMjg4X3JlYWRyZWcoc3RhdGUsIDB4MjQpICYgMHg4MCkKKwkJCWJyZWFrOworCisJCXRkYVsyXSArPSA0MDsKKwkJaWYgKHRkYVsyXSA8IDQwKQorCQkJdG0rKzsKKwkJdGRhWzFdID0gKHVuc2lnbmVkIGNoYXIpdG07CisJCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDJiLCB0ZGFbMV0pOworCQlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgyYywgdGRhWzJdKTsKKwkJdWRlbGF5KDMwKTsKKwl9CisKKwlzdGF0ZS0+dHVuZXJfZnJlcXVlbmN5ID0gYy0+ZnJlcXVlbmN5OworCXN0YXRlLT5mZWNfaW5uZXIgPSBGRUNfQVVUTzsKKwlzdGF0ZS0+c3ltYm9sX3JhdGUgPSBjLT5zeW1ib2xfcmF0ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWlmIChlbmFibGUpCisJCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDAxLCAweGI1KTsKKwllbHNlCisJCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDAxLCAweDM1KTsKKworCXVkZWxheSgxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdHYwMjg4X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djAyODhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJa2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgc3R2MDI4OF9vcHMgPSB7CisKKwkuaW5mbyA9IHsKKwkJLm5hbWUJCQk9ICJTVCBTVFYwMjg4IERWQi1TIiwKKwkJLnR5cGUJCQk9IEZFX1FQU0ssCisJCS5mcmVxdWVuY3lfbWluCQk9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXgJCT0gMjE1MDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZQk9IDEwMDAsCSAvKiBrSHogZm9yIFFQU0sgZnJvbnRlbmRzICovCisJCS5mcmVxdWVuY3lfdG9sZXJhbmNlCT0gMCwKKwkJLnN5bWJvbF9yYXRlX21pbgk9IDEwMDAwMDAsCisJCS5zeW1ib2xfcmF0ZV9tYXgJPSA0NTAwMDAwMCwKKwkJLnN5bWJvbF9yYXRlX3RvbGVyYW5jZQk9IDUwMCwJLyogcHBtICovCisJCS5jYXBzID0gRkVfQ0FOX0ZFQ18xXzIgfCBGRV9DQU5fRkVDXzJfMyB8IEZFX0NBTl9GRUNfM180IHwKKwkJICAgICAgRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzdfOCB8CisJCSAgICAgIEZFX0NBTl9RUFNLIHwKKwkJICAgICAgRkVfQ0FOX0ZFQ19BVVRPCisJfSwKKworCS5yZWxlYXNlID0gc3R2MDI4OF9yZWxlYXNlLAorCS5pbml0ID0gc3R2MDI4OF9pbml0LAorCS5zbGVlcCA9IHN0djAyODhfc2xlZXAsCisJLndyaXRlID0gc3R2MDI4OF93cml0ZSwKKwkuaTJjX2dhdGVfY3RybCA9IHN0djAyODhfaTJjX2dhdGVfY3RybCwKKwkucmVhZF9zdGF0dXMgPSBzdHYwMjg4X3JlYWRfc3RhdHVzLAorCS5yZWFkX2JlciA9IHN0djAyODhfcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gc3R2MDI4OF9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKKwkucmVhZF9zbnIgPSBzdHYwMjg4X3JlYWRfc25yLAorCS5yZWFkX3VjYmxvY2tzID0gc3R2MDI4OF9yZWFkX3VjYmxvY2tzLAorCS5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kID0gc3R2MDI4OF9zZW5kX2Rpc2VxY19tc2csCisJLmRpc2VxY19zZW5kX2J1cnN0ID0gc3R2MDI4OF9zZW5kX2Rpc2VxY19idXJzdCwKKwkuc2V0X3RvbmUgPSBzdHYwMjg4X3NldF90b25lLAorCS5zZXRfdm9sdGFnZSA9IHN0djAyODhfc2V0X3ZvbHRhZ2UsCisKKwkuc2V0X3Byb3BlcnR5ID0gc3R2MDI4OF9zZXRfcHJvcGVydHksCisJLmdldF9wcm9wZXJ0eSA9IHN0djAyODhfZ2V0X3Byb3BlcnR5LAorCS5zZXRfZnJvbnRlbmQgPSBzdHYwMjg4X3NldF9mcm9udGVuZCwKK307CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKnN0djAyODhfYXR0YWNoKGNvbnN0IHN0cnVjdCBzdHYwMjg4X2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCWludCBpZDsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCisJc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJLyogc2V0dXAgdGhlIHN0YXRlICovCisJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKKwlzdGF0ZS0+aTJjID0gaTJjOworCXN0YXRlLT5pbml0aWFsaXNlZCA9IDA7CisJc3RhdGUtPnR1bmVyX2ZyZXF1ZW5jeSA9IDA7CisJc3RhdGUtPnN5bWJvbF9yYXRlID0gMDsKKwlzdGF0ZS0+ZmVjX2lubmVyID0gMDsKKwlzdGF0ZS0+ZXJybW9kZSA9IFNUQVRVU19CRVI7CisKKwlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHg0MSwgMHgwNCk7CisJbXNsZWVwKDIwMCk7CisJaWQgPSBzdHYwMjg4X3JlYWRyZWcoc3RhdGUsIDB4MDApOworCWRwcmludGsoInN0djAyODggaWQgJXhcbiIsIGlkKTsKKworCS8qIHJlZ2lzdGVyIDB4MDAgY29udGFpbnMgMHgxMSBmb3IgU1RWMDI4OCAgKi8KKwlpZiAoaWQgIT0gMHgxMSkKKwkJZ290byBlcnJvcjsKKworCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZzdHYwMjg4X29wcywKKwkJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisKK2Vycm9yOgorCWtmcmVlKHN0YXRlKTsKKworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChzdHYwMjg4X2F0dGFjaCk7CisKK21vZHVsZV9wYXJhbShkZWJ1Z19sZWdhY3lfZGlzaF9zd2l0Y2gsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX2xlZ2FjeV9kaXNoX3N3aXRjaCwKKwkJIkVuYWJsZSB0aW1pbmcgYW5hbHlzaXMgZm9yIERpc2ggTmV0d29yayBsZWdhY3kgc3dpdGNoZXMiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNUIFNUVjAyODggRFZCIERlbW9kdWxhdG9yIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiR2VvcmcgQWNoZXIsIEJvYiBMaXUsIElnb3IgbGlwbGlhbmluIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjg4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI4OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjUzZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI4OC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisJRHJpdmVyIGZvciBTVCBTVFYwMjg4IGRlbW9kdWxhdG9yCisKKwlDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmcgQWNoZXIsIEJheUNvbSBHbWJILCBhY2hlciAoYXQpIGJheWNvbSAoZG90KSBkZQorCQlmb3IgUmVlbCBNdWx0aW1lZGlhCisJQ29weXJpZ2h0IChDKSAyMDA4IFR1cmJvU2lnaHQuY29tLCA8Ym9iQHR1cmJvc2lnaHQuY29tPgorCUNvcHlyaWdodCAoQykgMjAwOCBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG1lLmJ5PgorCQlSZW1vdmVkIHN0YjYwMDAgc3BlY2lmaWMgdHVuZXIgY29kZSBhbmQgcmV2aXNlZCBzb21lCisJCXByb2NlZHVyZXMuCisKKwlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKwkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKwlNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKwlGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworI2lmbmRlZiBTVFYwMjg4X0gKKyNkZWZpbmUgU1RWMDI4OF9ICisKKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKworc3RydWN0IHN0djAyODhfY29uZmlnIHsKKwkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLworCXU4IGRlbW9kX2FkZHJlc3M7CisKKwl1OCogaW5pdHRhYjsKKworCS8qIG1pbmltdW0gZGVsYXkgYmVmb3JlIHJldHVuaW5nICovCisJaW50IG1pbl9kZWxheV9tczsKKworCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfU1RWMDI4OCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9TVFYwMjg4X01PRFVMRSkgJiYgXAorCQkJCQkJCWRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHYwMjg4X2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDI4OF9jb25maWcgKmNvbmZpZywKKwkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqc3R2MDI4OF9hdHRhY2goY29uc3Qgc3RydWN0IHN0djAyODhfY29uZmlnICpjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19EVkJfU1RWMDI4OCAqLworCitzdGF0aWMgaW5saW5lIGludCBzdHYwMjg4X3dyaXRlcmVnKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCByZWcsIHU4IHZhbCkKK3sKKwlpbnQgciA9IDA7CisJdTggYnVmW10gPSB7IHJlZywgdmFsIH07CisJaWYgKGZlLT5vcHMud3JpdGUpCisJCXIgPSBmZS0+b3BzLndyaXRlKGZlLCBidWYsIDIpOworCXJldHVybiByOworfQorCisjZW5kaWYgLyogU1RWMDI4OF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuYwppbmRleCAzNTQzNWJlLi42YzFjYjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmMKQEAgLTU1OSw2ICs1NTksOCBAQAogCWludCBpbnZ2YWwgPSAwOwogCiAJZHByaW50ayAoIiVzIDogRkVfU0VUX0ZST05URU5EXG4iLCBfX2Z1bmNfXyk7CisJaWYgKHN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMpCisJCXN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMoZmUsIDApOwogCiAJLy8gc2V0IHRoZSBpbnZlcnNpb24KIAlpZiAocC0+aW52ZXJzaW9uID09IElOVkVSU0lPTl9PRkYpIGludnZhbCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuaAppbmRleCAzMjgyZjQzLi4wZmQ5NmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmgKQEAgLTg5LDE1ICs4OSwxOCBAQAogCWludCBtaW5fZGVsYXlfbXM7CiAKIAkvKiBTZXQgdGhlIHN5bWJvbCByYXRlICovCi0JaW50ICgqc2V0X3N5bWJvbF9yYXRlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyIHNyYXRlLCB1MzIgcmF0aW8pOworCWludCAoKnNldF9zeW1ib2xfcmF0ZSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiBzcmF0ZSwgdTMyIHJhdGlvKTsKKworCS8qIFNldCBkZXZpY2UgcGFyYW0gdG8gc3RhcnQgZG1hICovCisJaW50ICgqc2V0X3RzX3BhcmFtcykoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBpc19wdW5jdHVyZWQpOwogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TVFYwMjk5KSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1NUVjAyOTlfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogc3R2MDI5OV9hdHRhY2goY29uc3Qgc3RydWN0IHN0djAyOTlfY29uZmlnKiBjb25maWcsCi0JCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHYwMjk5X2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgKmNvbmZpZywKKwkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogc3R2MDI5OV9hdHRhY2goY29uc3Qgc3RydWN0IHN0djAyOTlfY29uZmlnKiBjb25maWcsCi0JCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHYwMjk5X2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgKmNvbmZpZywKKwkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNDguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0OC5jCmluZGV4IDA0ZTdmMWMuLjJhOGJiY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0OC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0OC5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIHN0YXRpYyBpbnQgdGRhMTAwNDhfd3JpdGVyZWcoc3RydWN0IHRkYTEwMDQ4X3N0YXRlICpzdGF0ZSwgdTggcmVnLCB1OCBkYXRhKQogewogCWludCByZXQ7Ci0JdTggYnVmIFtdID0geyByZWcsIGRhdGEgfTsKKwl1OCBidWZbXSA9IHsgcmVnLCBkYXRhIH07CiAJc3RydWN0IGkyY19tc2cgbXNnID0gewogCQkuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCiAJCS5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAyIH07CkBAIC0yMTMsOSArMjEzLDkgQEAKIHN0YXRpYyB1OCB0ZGExMDA0OF9yZWFkcmVnKHN0cnVjdCB0ZGExMDA0OF9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKIHsKIAlpbnQgcmV0OwotCXU4IGIwIFtdID0geyByZWcgfTsKLQl1OCBiMSBbXSA9IHsgMCB9OwotCXN0cnVjdCBpMmNfbXNnIG1zZyBbXSA9IHsKKwl1OCBiMFtdID0geyByZWcgfTsKKwl1OCBiMVtdID0geyAwIH07CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CiAJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAogCQkJLmZsYWdzID0gMCwgLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAogCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKQEAgLTM5Myw0MyArMzkzLDg5IEBACiAKIAl2YWwgPSB0ZGExMDA0OF9yZWFkcmVnKHN0YXRlLCBUREExMDA0OF9PVVRfQ09ORjIpOwogCXN3aXRjaCAoKHZhbCAmIDB4NjApID4+IDUpIHsKLQljYXNlIDA6IHAtPmNvbnN0ZWxsYXRpb24gPSAgIFFQU0s7IGJyZWFrOwotCWNhc2UgMTogcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV8xNjsgYnJlYWs7Ci0JY2FzZSAyOiBwLT5jb25zdGVsbGF0aW9uID0gUUFNXzY0OyBicmVhazsKKwljYXNlIDA6CisJCXAtPmNvbnN0ZWxsYXRpb24gPSBRUFNLOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmNvbnN0ZWxsYXRpb24gPSBRQU1fMTY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV82NDsKKwkJYnJlYWs7CiAJfQogCXN3aXRjaCAoKHZhbCAmIDB4MTgpID4+IDMpIHsKLQljYXNlIDA6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9OT05FOyBicmVhazsKLQljYXNlIDE6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV8xOyBicmVhazsKLQljYXNlIDI6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV8yOyBicmVhazsKLQljYXNlIDM6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV80OyBicmVhazsKKwljYXNlIDA6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9OT05FOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8xOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8yOworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV80OworCQlicmVhazsKIAl9CiAJc3dpdGNoICh2YWwgJiAweDA3KSB7Ci0JY2FzZSAwOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMV8yOyBicmVhazsKLQljYXNlIDE6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18yXzM7IGJyZWFrOwotCWNhc2UgMjogcC0+Y29kZV9yYXRlX0hQID0gRkVDXzNfNDsgYnJlYWs7Ci0JY2FzZSAzOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfNV82OyBicmVhazsKLQljYXNlIDQ6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ183Xzg7IGJyZWFrOworCWNhc2UgMDoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzFfMjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMl8zOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18zXzQ7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzVfNjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfN184OworCQlicmVhazsKIAl9CiAKIAl2YWwgPSB0ZGExMDA0OF9yZWFkcmVnKHN0YXRlLCBUREExMDA0OF9PVVRfQ09ORjMpOwogCXN3aXRjaCAodmFsICYgMHgwNykgewotCWNhc2UgMDogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzFfMjsgYnJlYWs7Ci0JY2FzZSAxOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfMl8zOyBicmVhazsKLQljYXNlIDI6IHAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18zXzQ7IGJyZWFrOwotCWNhc2UgMzogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzVfNjsgYnJlYWs7Ci0JY2FzZSA0OiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfN184OyBicmVhazsKKwljYXNlIDA6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18xXzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzJfMzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfM180OworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ181XzY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzdfODsKKwkJYnJlYWs7CiAJfQogCiAJdmFsID0gdGRhMTAwNDhfcmVhZHJlZyhzdGF0ZSwgVERBMTAwNDhfT1VUX0NPTkYxKTsKIAlzd2l0Y2ggKCh2YWwgJiAweDBjKSA+PiAyKSB7Ci0JY2FzZSAwOiBwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMzI7IGJyZWFrOwotCWNhc2UgMTogcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzE2OyBicmVhazsKLQljYXNlIDI6IHAtPmd1YXJkX2ludGVydmFsID0gIEdVQVJEX0lOVEVSVkFMXzFfODsgYnJlYWs7Ci0JY2FzZSAzOiBwLT5ndWFyZF9pbnRlcnZhbCA9ICBHVUFSRF9JTlRFUlZBTF8xXzQ7IGJyZWFrOworCWNhc2UgMDoKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzMyOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8xNjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5ndWFyZF9pbnRlcnZhbCA9ICBHVUFSRF9JTlRFUlZBTF8xXzg7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSAgR1VBUkRfSU5URVJWQUxfMV80OworCQlicmVhazsKIAl9CiAJc3dpdGNoICh2YWwgJiAweDAyKSB7Ci0JY2FzZSAwOiBwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzJLOyBicmVhazsKLQljYXNlIDE6IHAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfOEs7IGJyZWFrOworCWNhc2UgMDoKKwkJcC0+dHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV8ySzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzhLOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGhkMS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkaGQxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmMTcwNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGhkMS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiB0ZGhkMS5oIC0gQUxQUyBUREhEMS0yMDRBIHR1bmVyIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggT2xpdmVyIEVuZHJpc3MgPG8uZW5kcmlzc0BnbXguZGU+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBPciwgcG9pbnQgeW91ciBicm93c2VyIHRvIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICoKKyAqCisgKiBUaGUgcHJvamVjdCdzIHBhZ2UgaXMgYXQgaHR0cDovL3d3dy5saW51eHR2Lm9yZworICovCisKKyNpZm5kZWYgVERIRDFfSAorI2RlZmluZSBUREhEMV9ICisKKyNpbmNsdWRlICJ0ZGExMDA0eC5oIgorCitzdGF0aWMgaW50IGFscHNfdGRoZDFfMjA0X3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3LCBjaGFyICpuYW1lKTsKKworc3RhdGljIHN0cnVjdCB0ZGExMDA0eF9jb25maWcgYWxwc190ZGhkMV8yMDRhX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4OCwKKwkuaW52ZXJ0ID0gMSwKKwkuaW52ZXJ0X29jbGsgPSAwLAorCS54dGFsX2ZyZXEgPSBUREExMDA0Nl9YVEFMXzRNLAorCS5hZ2NfY29uZmlnID0gVERBMTAwNDZfQUdDX0RFRkFVTFQsCisJLmlmX2ZyZXEgPSBUREExMDA0Nl9GUkVRXzM2MTcsCisJLnJlcXVlc3RfZmlybXdhcmUgPSBhbHBzX3RkaGQxXzIwNF9yZXF1ZXN0X2Zpcm13YXJlCit9OworCitzdGF0aWMgaW50IGFscHNfdGRoZDFfMjA0YV90dW5lcl9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyA9IGZlLT50dW5lcl9wcml2OworCXU4IGRhdGFbNF07CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IDB4NjEsIC5mbGFncyA9IDAsIC5idWYgPSBkYXRhLCAubGVuID0gc2l6ZW9mKGRhdGEpIH07CisJdTMyIGRpdjsKKworCWRpdiA9IChwYXJhbXMtPmZyZXF1ZW5jeSArIDM2MTY2NjY2KSAvIDE2NjY2NjsKKworCWRhdGFbMF0gPSAoZGl2ID4+IDgpICYgMHg3ZjsKKwlkYXRhWzFdID0gZGl2ICYgMHhmZjsKKwlkYXRhWzJdID0gMHg4NTsKKworCWlmIChwYXJhbXMtPmZyZXF1ZW5jeSA+PSAxNzQwMDAwMDAgJiYgcGFyYW1zLT5mcmVxdWVuY3kgPD0gMjMwMDAwMDAwKQorCQlkYXRhWzNdID0gMHgwMjsKKwllbHNlIGlmIChwYXJhbXMtPmZyZXF1ZW5jeSA+PSA0NzAwMDAwMDAgJiYgcGFyYW1zLT5mcmVxdWVuY3kgPD0gODIzMDAwMDAwKQorCQlkYXRhWzNdID0gMHgwQzsKKwllbHNlIGlmIChwYXJhbXMtPmZyZXF1ZW5jeSA+IDgyMzAwMDAwMCAmJiBwYXJhbXMtPmZyZXF1ZW5jeSA8PSA4NjIwMDAwMDApCisJCWRhdGFbM10gPSAweDhDOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCWlmIChpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogVERIRDFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3owMTk0YS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3owMTk0YS5oCmluZGV4IGQyODc2ZDIuLjA3ZjNmYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96MDE5NGEuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvejAxOTRhLmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpZm5kZWYgWjAxOTRBCiAjZGVmaW5lIFowMTk0QQogCi1zdGF0aWMgaW50IHNoYXJwX3owMTk0YV9fc2V0X3N5bWJvbF9yYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorc3RhdGljIGludCBzaGFycF96MDE5NGFfc2V0X3N5bWJvbF9yYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCQkgdTMyIHNyYXRlLCB1MzIgcmF0aW8pCiB7CiAJdTggYWNsayA9IDA7CkBAIC00MCw3ICs0MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1OCBzaGFycF96MDE5NGFfX2luaXR0YWJbXSA9IHsKK3N0YXRpYyB1OCBzaGFycF96MDE5NGFfaW5pdHRhYltdID0gewogCTB4MDEsIDB4MTUsCiAJMHgwMiwgMHgwMCwKIAkweDAzLCAweDAwLApAQCAtODIsMTYgKzgyLDQgQEAKIAkweGZmLCAweGZmCiB9OwogCi1zdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHNoYXJwX3owMTk0YV9jb25maWcgPSB7Ci0JLmRlbW9kX2FkZHJlc3MgPSAweDY4LAotCS5pbml0dGFiID0gc2hhcnBfejAxOTRhX19pbml0dGFiLAotCS5tY2xrID0gODgwMDAwMDBVTCwKLQkuaW52ZXJ0ID0gMSwKLQkuc2tpcF9yZWluaXQgPSAwLAotCS5sb2NrX291dHB1dCA9IFNUVjAyOTlfTE9DS09VVFBVVF8xLAotCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKLQkubWluX2RlbGF5X21zID0gMTAwLAotCS5zZXRfc3ltYm9sX3JhdGUgPSBzaGFycF96MDE5NGFfX3NldF9zeW1ib2xfcmF0ZSwKLX07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwppbmRleCA5ZGEyNjBmLi42ZjliNzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwpAQCAtNDIsNiArNDIsMTAgQEAKIAkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUxMCksCiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MjApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTMwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTU4MCksCiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1OTApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKaW5kZXggNDFiNWE5OC4uODY3MDI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCkBAIC04Niw2ICs4Niw3IEBACiAJc2VsZWN0IERWQl9UREExMDA4NiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfVERBODI2WCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTE5CUDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREExMDA0WCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHNpbXBsZSBTQUE3MTQ2IGJhc2VkIERWQiBjYXJkcyAoc28gY2FsbGVkIEJ1ZGdldC0KIAkgIG9yIE5vdmEtUENJIGNhcmRzKSB3aXRob3V0IG9uYm9hcmQgTVBFRzIgZGVjb2RlciwgYW5kIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKaW5kZXggMDc3N2U4Zi4uYWExZmY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTUyLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApAQCAtODgsNiArODgsNyBAQAogc3RhdGljIGludCB3c3NfY2ZnXzRfMyA9IDB4NDAwODsKIHN0YXRpYyBpbnQgd3NzX2NmZ18xNl85ID0gMHgwMDA3Owogc3RhdGljIGludCB0dl9zdGFuZGFyZDsKK3N0YXRpYyBpbnQgZnVsbF90czsKIAogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBhdjcxMTBfZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgbGV2ZWwgKGJpdG1hc2ssIGRlZmF1bHQgMCkiKTsKQEAgLTEwNiw2ICsxMDcsOCBAQAogTU9EVUxFX1BBUk1fREVTQyh2b2x1bWUsICJpbml0aWFsIHZvbHVtZTogZGVmYXVsdCAyNTUgKHJhbmdlIDAtMjU1KSIpOwogbW9kdWxlX3BhcmFtKGJ1ZGdldHBhdGNoLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhidWRnZXRwYXRjaCwgInVzZSBidWRnZXQtcGF0Y2ggaGFyZHdhcmUgbW9kaWZpY2F0aW9uOiBkZWZhdWx0IDAgKDAgbm8sIDEgYXV0b2RldGVjdCwgMiBhbHdheXMpIik7Cittb2R1bGVfcGFyYW0oZnVsbF90cywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZnVsbF90cywgImVuYWJsZSBjb2RlIGZvciBmdWxsLXRzIGhhcmR3YXJlIG1vZGlmaWNhdGlvbjogMCBkaXNhYmxlIChkZWZhdWx0KSwgMSBlbmFibGUiKTsKIG1vZHVsZV9wYXJhbSh3c3NfY2ZnXzRfMywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Mod3NzX2NmZ180XzMsICJXU1MgNDozIC0gZGVmYXVsdCAweDQwMDggLSBiaXQgMTU6IGRpc2FibGUsIDE0OiBidXJzdCBtb2RlLCAxMy4uMDogd3NzIGRhdGEiKTsKIG1vZHVsZV9wYXJhbSh3c3NfY2ZnXzE2XzksIGludCwgMDQ0NCk7CkBAIC0xMTYsNiArMTE5LDggQEAKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCiBzdGF0aWMgdm9pZCByZXN0YXJ0X2ZlZWRzKHN0cnVjdCBhdjcxMTAgKmF2NzExMCk7CitzdGF0aWMgaW50IGJ1ZGdldF9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZCk7CitzdGF0aWMgaW50IGJ1ZGdldF9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKTsKIAogc3RhdGljIGludCBhdjcxMTBfbnVtOwogCkBAIC0zNzYsOSArMzgxLDkgQEAKIAkJaXJkZWJpKGF2NzExMCwgREVCSVNXQUIsIGFkZHIsIDAsIGxlbik7CiB9CiAKLXN0YXRpYyB2b2lkIGRlYmlpcnEodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgZGViaWlycSh1bnNpZ25lZCBsb25nIGNvb2tpZSkKIHsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKSBkYXRhOworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopY29va2llOwogCWludCB0eXBlID0gYXY3MTEwLT5kZWJpdHlwZTsKIAlpbnQgaGFuZGxlID0gKHR5cGUgPj4gOCkgJiAweDFmOwogCXVuc2lnbmVkIGludCB4ZmVyID0gMDsKQEAgLTQ4Nyw5ICs0OTIsOSBAQAogfQogCiAvKiBpcnEgZnJvbSBhdjcxMTAgZmlybXdhcmUgd3JpdGluZyB0aGUgbWFpbGJveCByZWdpc3RlciBpbiB0aGUgRFBSQU0gKi8KLXN0YXRpYyB2b2lkIGdwaW9pcnEodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgZ3Bpb2lycSh1bnNpZ25lZCBsb25nIGNvb2tpZSkKIHsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKSBkYXRhOworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopY29va2llOwogCXUzMiByeGJ1ZiwgdHhidWY7CiAJaW50IGxlbjsKIApAQCAtODA2LDYgKzgxMSw5IEBACiAKIAlkcHJpbnRrKDQsICIlcFxuIiwgYXY3MTEwKTsKIAorCWlmIChhdjcxMTAtPmZ1bGxfdHMpCisJCXJldHVybiAwOworCiAJaWYgKGR2YmRteGZpbHRlci0+dHlwZSA9PSBETVhfVFlQRV9TRUMpIHsKIAkJaWYgKGh3X3NlY3Rpb25zKSB7CiAJCQlidWZbNF0gPSAoZHZiZG14ZmlsdGVyLT5maWx0ZXIuZmlsdGVyX3ZhbHVlWzBdIDw8IDgpIHwKQEAgLTg1NCw2ICs4NjIsOSBAQAogCiAJZHByaW50ayg0LCAiJXBcbiIsIGF2NzExMCk7CiAKKwlpZiAoYXY3MTEwLT5mdWxsX3RzKQorCQlyZXR1cm4gMDsKKwogCWhhbmRsZSA9IGR2YmRteGZpbHRlci0+aHdfaGFuZGxlOwogCWlmIChoYW5kbGUgPj0gMzIpIHsKIAkJcHJpbnRrKCIlcyB0cmllZCB0byBzdG9wIGludmFsaWQgZmlsdGVyICUwNHgsIGZpbHRlciB0eXBlID0gJXhcbiIsCkBAIC05MTMsNyArOTI0LDcgQEAKIAkJCQlyZXR1cm4gcmV0OwogCQl9CiAKLQlpZiAoKGR2YmRteGZlZWQtPnRzX3R5cGUgJiBUU19QQUNLRVQpKSB7CisJaWYgKChkdmJkbXhmZWVkLT50c190eXBlICYgVFNfUEFDS0VUKSAmJiAhYXY3MTEwLT5mdWxsX3RzKSB7CiAJCWlmIChkdmJkbXhmZWVkLT5wZXNfdHlwZSA9PSAwICYmICEoZHZiZG14LT5waWRzWzBdICYgMHg4MDAwKSkKIAkJCXJldCA9IGF2NzExMF9hdl9zdGFydF9yZWNvcmQoYXY3MTEwLCBSUF9BVURJTywgZHZiZG14ZmVlZCk7CiAJCWlmIChkdmJkbXhmZWVkLT5wZXNfdHlwZSA9PSAxICYmICEoZHZiZG14LT5waWRzWzFdICYgMHg4MDAwKSkKQEAgLTk3NCw3ICs5ODUsNyBAQAogCWlmICghZGVtdXgtPmRteC5mcm9udGVuZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZmVlZC0+cGlkID4gMHgxZmZmKQorCWlmICghYXY3MTEwLT5mdWxsX3RzICYmIGZlZWQtPnBpZCA+IDB4MWZmZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZmVlZC0+dHlwZSA9PSBETVhfVFlQRV9UUykgewpAQCAtMTAwMyw3ICsxMDE0LDEyIEBACiAJCX0KIAl9CiAKLQllbHNlIGlmIChmZWVkLT50eXBlID09IERNWF9UWVBFX1NFQykgeworCWlmIChhdjcxMTAtPmZ1bGxfdHMpIHsKKwkJYnVkZ2V0X3N0YXJ0X2ZlZWQoZmVlZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGZlZWQtPnR5cGUgPT0gRE1YX1RZUEVfU0VDKSB7CiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBkZW11eC0+ZmlsdGVybnVtOyBpKyspIHsKQEAgLTEwNTAsNyArMTA2NiwxMiBAQAogCQkJCXJldCA9IFN0b3BIV0ZpbHRlcihmZWVkLT5maWx0ZXIpOwogCX0KIAotCWlmICghcmV0ICYmIGZlZWQtPnR5cGUgPT0gRE1YX1RZUEVfU0VDKSB7CisJaWYgKGF2NzExMC0+ZnVsbF90cykgeworCQlidWRnZXRfc3RvcF9mZWVkKGZlZWQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChmZWVkLT50eXBlID09IERNWF9UWVBFX1NFQykgewogCQlmb3IgKGkgPSAwOyBpPGRlbXV4LT5maWx0ZXJudW07IGkrKykgewogCQkJaWYgKGRlbXV4LT5maWx0ZXJbaV0uc3RhdGUgPT0gRE1YX1NUQVRFX0dPICYmCiAJCQkgICAgZGVtdXgtPmZpbHRlcltpXS5maWx0ZXIucGFyZW50ID09ICZmZWVkLT5mZWVkLnNlYykgewpAQCAtMTA3NCw2ICsxMDk1LDcgQEAKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkbXggPSAmYXY3MTEwLT5kZW11eDsKIAlzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQ7CiAJaW50IG1vZGU7CisJaW50IGZlZWRpbmc7CiAJaW50IGksIGo7CiAKIAlkcHJpbnRrKDQsICIlcFxuIiwgYXY3MTEwKTsKQEAgLTEwODIsNiArMTEwNCw4IEBACiAJYXY3MTEwLT5wbGF5aW5nID0gMDsKIAlhdjcxMTAtPnJlY19tb2RlID0gMDsKIAorCWZlZWRpbmcgPSBhdjcxMTAtPmZlZWRpbmcxOyAvKiBmdWxsX3RzIG1vZCAqLworCiAJZm9yIChpID0gMDsgaSA8IGR2YmRteC0+ZmVlZG51bTsgaSsrKSB7CiAJCWZlZWQgPSAmZHZiZG14LT5mZWVkW2ldOwogCQlpZiAoZmVlZC0+c3RhdGUgPT0gRE1YX1NUQVRFX0dPKSB7CkBAIC0xMDk5LDYgKzExMjMsOCBAQAogCQl9CiAJfQogCisJYXY3MTEwLT5mZWVkaW5nMSA9IGZlZWRpbmc7IC8qIGZ1bGxfdHMgbW9kICovCisKIAlpZiAobW9kZSkKIAkJYXY3MTEwX2F2X3N0YXJ0X3BsYXkoYXY3MTEwLCBtb2RlKTsKIH0KQEAgLTExOTcsOCArMTIyMyw5IEBACiAKIAlpZiAoYnVkZ2V0LT5mZWVkaW5nMSkKIAkJcmV0dXJuICsrYnVkZ2V0LT5mZWVkaW5nMTsKLQltZW1zZXQoYnVkZ2V0LT5ncmFiYmluZywgMHgwMCwgVFNfSEVJR0hUICogVFNfV0lEVEgpOworCW1lbXNldChidWRnZXQtPmdyYWJiaW5nLCAweDAwLCBUU19CVUZMRU4pOwogCWJ1ZGdldC0+dHRicCA9IDA7CisJU0FBNzE0Nl9JU1JfQ0xFQVIoYnVkZ2V0LT5kZXYsIE1BU0tfMTApOyAgLyogVlBFICovCiAJU0FBNzE0Nl9JRVJfRU5BQkxFKGJ1ZGdldC0+ZGV2LCBNQVNLXzEwKTsgLyogVlBFICovCiAJc2FhNzE0Nl93cml0ZShidWRnZXQtPmRldiwgTUMxLCAoTUFTS18wNCB8IE1BU0tfMjApKTsgLyogRE1BMyBvbiAqLwogCXJldHVybiArK2J1ZGdldC0+ZmVlZGluZzE7CkBAIC0xMjMzLDE4ICsxMjYwLDE0IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIHZvaWQgdnBlaXJxKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIHZwZWlycSh1bnNpZ25lZCBsb25nIGNvb2tpZSkKIHsKLQlzdHJ1Y3QgYXY3MTEwICpidWRnZXQgPSAoc3RydWN0IGF2NzExMCAqKSBkYXRhOworCXN0cnVjdCBhdjcxMTAgKmJ1ZGdldCA9IChzdHJ1Y3QgYXY3MTEwICopY29va2llOwogCXU4ICptZW0gPSAodTggKikgKGJ1ZGdldC0+Z3JhYmJpbmcpOwogCXUzMiBvbGRkbWEgPSBidWRnZXQtPnR0YnA7CiAJdTMyIG5ld2RtYSA9IHNhYTcxNDZfcmVhZChidWRnZXQtPmRldiwgUENJX1ZEUDMpOworCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gYnVkZ2V0LT5mdWxsX3RzID8gJmJ1ZGdldC0+ZGVtdXggOiAmYnVkZ2V0LT5kZW11eDE7CiAKLQlpZiAoIWJ1ZGdldHBhdGNoKSB7Ci0JCXByaW50aygiYXY3MTEwLmM6IHZwZWlycSgpIGNhbGxlZCB3aGlsZSBidWRnZXRwYXRjaCBkaXNhYmxlZCEiCi0JCSAgICAgICAiIGNoZWNrIHNhYTcxNDYgSUVSIHJlZ2lzdGVyXG4iKTsKLQkJQlVHKCk7Ci0JfQogCS8qIG5lYXJlc3QgbG93ZXIgcG9zaXRpb24gZGl2aXNpYmxlIGJ5IDE4OCAqLwogCW5ld2RtYSAtPSBuZXdkbWEgJSAxODg7CiAKQEAgLTEyNjgsMTEgKzEyOTEsMTEgQEAKIAogCWlmIChuZXdkbWEgPiBvbGRkbWEpCiAJCS8qIG5vIHdyYXBhcm91bmQsIGR1bXAgb2xkZG1hLi5uZXdkbWEgKi8KLQkJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZidWRnZXQtPmRlbXV4MSwgbWVtICsgb2xkZG1hLCAobmV3ZG1hIC0gb2xkZG1hKSAvIDE4OCk7CisJCWR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cyhkZW11eCwgbWVtICsgb2xkZG1hLCAobmV3ZG1hIC0gb2xkZG1hKSAvIDE4OCk7CiAJZWxzZSB7CiAJCS8qIHdyYXBhcm91bmQsIGR1bXAgb2xkZG1hLi5idWZsZW4gYW5kIDAuLm5ld2RtYSAqLwotCQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmJ1ZGdldC0+ZGVtdXgxLCBtZW0gKyBvbGRkbWEsIChUU19CVUZMRU4gLSBvbGRkbWEpIC8gMTg4KTsKLQkJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZidWRnZXQtPmRlbXV4MSwgbWVtLCBuZXdkbWEgLyAxODgpOworCQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoZGVtdXgsIG1lbSArIG9sZGRtYSwgKFRTX0JVRkxFTiAtIG9sZGRtYSkgLyAxODgpOworCQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoZGVtdXgsIG1lbSwgbmV3ZG1hIC8gMTg4KTsKIAl9CiB9CiAKQEAgLTEyOTQsOCArMTMxNyw4IEBACiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCiAJCWF2NzExMC0+aGFuZGxlMmZpbHRlcltpXSA9IE5VTEw7CiAKLQlkdmJkZW11eC0+ZmlsdGVybnVtID0gMzI7Ci0JZHZiZGVtdXgtPmZlZWRudW0gPSAzMjsKKwlkdmJkZW11eC0+ZmlsdGVybnVtID0gKGF2NzExMC0+ZnVsbF90cykgPyAyNTYgOiAzMjsKKwlkdmJkZW11eC0+ZmVlZG51bSA9IChhdjcxMTAtPmZ1bGxfdHMpID8gMjU2IDogMzI7CiAJZHZiZGVtdXgtPnN0YXJ0X2ZlZWQgPSBhdjcxMTBfc3RhcnRfZmVlZDsKIAlkdmJkZW11eC0+c3RvcF9mZWVkID0gYXY3MTEwX3N0b3BfZmVlZDsKIAlkdmJkZW11eC0+d3JpdGVfdG9fZGVjb2RlciA9IGF2NzExMF93cml0ZV90b19kZWNvZGVyOwpAQCAtMTMwNSw3ICsxMzI4LDcgQEAKIAlkdmJfZG14X2luaXQoJmF2NzExMC0+ZGVtdXgpOwogCWF2NzExMC0+ZGVtdXguZG14LmdldF9zdGMgPSBkdmJfZ2V0X3N0YzsKIAotCWF2NzExMC0+ZG14ZGV2LmZpbHRlcm51bSA9IDMyOworCWF2NzExMC0+ZG14ZGV2LmZpbHRlcm51bSA9IChhdjcxMTAtPmZ1bGxfdHMpID8gMjU2IDogMzI7CiAJYXY3MTEwLT5kbXhkZXYuZGVtdXggPSAmZHZiZGVtdXgtPmRteDsKIAlhdjcxMTAtPmRteGRldi5jYXBhYmlsaXRpZXMgPSAwOwogCkBAIC0xNDIyLDcgKzE0NDUsNiBAQAogCXJldHVybiBpMmNfdHJhbnNmZXIoJmF2NzExMC0+aTJjX2FkYXAsICZtc2dzLCAxKTsKIH0KIAotI2lmIDAKIHU4IGkyY19yZWFkcmVnKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgdTggaWQsIHU4IHJlZykKIHsKIAl1OCBtbTFbXSA9IHsweDAwfTsKQEAgLTE0MzksNyArMTQ2MSw2IEBACiAKIAlyZXR1cm4gbW0yWzBdOwogfQotI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJTklUSUFMSVpBVElPTgpAQCAtMjI1Niw3ICsyMjc3LDcgQEAKIAlpZiAoIWF2NzExMC0+ZmUpIHsKIAkJLyogRklYTUU6IHByb3BhZ2F0ZSB0aGUgZmFpbHVyZSBjb2RlIGZyb20gdGhlIGxvd2VyIGxheWVycyAqLwogCQlyZXQgPSAtRU5PTUVNOwotCQlwcmludGsoImR2Yi10dHBjaTogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCBmb3IgZGV2aWNlICUwNHgvJTA0eCBzdWJzeXN0ZW0gJTA0eC8lMDR4XG4iLAorCQlwcmludGsoImR2Yi10dHBjaTogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCBmb3IgZGV2aWNlIFslMDR4OiUwNHhdIHN1YnN5c3RlbSBbJTA0eDolMDR4XVxuIiwKIAkJICAgICAgIGF2NzExMC0+ZGV2LT5wY2ktPnZlbmRvciwKIAkJICAgICAgIGF2NzExMC0+ZGV2LT5wY2ktPmRldmljZSwKIAkJICAgICAgIGF2NzExMC0+ZGV2LT5wY2ktPnN1YnN5c3RlbV92ZW5kb3IsCkBAIC0yNDg0LDcgKzI1MDUsNDcgQEAKIAkJCSAgICAgICBhdjcxMTAtPmR2Yl9hZGFwdGVyLnByb3Bvc2VkX21hYyk7CiAJcmV0ID0gLUVOT01FTTsKIAotCWlmIChidWRnZXRwYXRjaCkgeworCS8qIGZ1bGwtdHMgbW9kPyAqLworCWlmIChmdWxsX3RzKQorCQlhdjcxMTAtPmZ1bGxfdHMgPSB0cnVlOworCisJLyogY2hlY2sgZm9yIGZ1bGwtdHMgZmxhZyBpbiBlZXByb20gKi8KKwlpZiAoaTJjX3JlYWRyZWcoYXY3MTEwLCAweGFhLCAwKSA9PSAweDRmICYmIGkyY19yZWFkcmVnKGF2NzExMCwgMHhhYSwgMSkgPT0gMHg0NSkgeworCQl1OCBmbGFncyA9IGkyY19yZWFkcmVnKGF2NzExMCwgMHhhYSwgMik7CisJCWlmIChmbGFncyAhPSAweGZmICYmIChmbGFncyAmIDB4MDEpKQorCQkJYXY3MTEwLT5mdWxsX3RzID0gdHJ1ZTsKKwl9CisKKwlpZiAoYXY3MTEwLT5mdWxsX3RzKSB7CisJCXByaW50ayhLRVJOX0lORk8gImR2Yi10dHBjaTogZnVsbC10cyBtb2RlIGVuYWJsZWQgZm9yIHNhYTcxNDYgcG9ydCBCXG4iKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmF2NzExMC0+ZmVlZGxvY2sxKTsKKwkJYXY3MTEwLT5ncmFiYmluZyA9IHNhYTcxNDZfdm1hbGxvY19idWlsZF9wZ3RhYmxlKHBkZXYsIGxlbmd0aCwKKwkJCQkJCQkJICZhdjcxMTAtPnB0KTsKKwkJaWYgKCFhdjcxMTAtPmdyYWJiaW5nKQorCQkJZ290byBlcnJfaTJjX2RlbF8zOworCisJCXNhYTcxNDZfd3JpdGUoZGV2LCBERDFfU1RSRUFNX0IsIDB4MDAwMDAwMDApOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCAoTUFTS18xMCB8IE1BU0tfMjYpKTsKKworCQlzYWE3MTQ2X3dyaXRlKGRldiwgREQxX0lOSVQsIDB4MDAwMDA2MDApOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCAoTUFTS18wOSB8IE1BU0tfMjUgfCBNQVNLXzEwIHwgTUFTS18yNikpOworCisJCXNhYTcxNDZfd3JpdGUoZGV2LCBCUlNfQ1RSTCwgMHg2MDAwMDAwMCk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzIsIE1BU0tfMDggfCBNQVNLXzI0KTsKKworCQkvKiBkbWEzICovCisJCXNhYTcxNDZfd3JpdGUoZGV2LCBQQ0lfQlRfVjEsIDB4MDAxYzAwMDAgfCAoc2FhNzE0Nl9yZWFkKGRldiwgUENJX0JUX1YxKSAmIH4weDAwMWYwMDAwKSk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBCQVNFX09ERDMsIDApOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgQkFTRV9FVkVOMywgMCk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBQUk9UX0FERFIzLCBUU19XSURUSCAqIFRTX0hFSUdIVCk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBQSVRDSDMsIFRTX1dJRFRIKTsKKwkJc2FhNzE0Nl93cml0ZShkZXYsIEJBU0VfUEFHRTMsIGF2NzExMC0+cHQuZG1hIHwgTUUxIHwgMHg5MCk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBOVU1fTElORV9CWVRFMywgKFRTX0hFSUdIVCA8PCAxNikgfCBUU19XSURUSCk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzIsIE1BU0tfMDQgfCBNQVNLXzIwKTsKKworCQl0YXNrbGV0X2luaXQoJmF2NzExMC0+dnBlX3Rhc2tsZXQsIHZwZWlycSwgKHVuc2lnbmVkIGxvbmcpIGF2NzExMCk7CisKKwl9IGVsc2UgaWYgKGJ1ZGdldHBhdGNoKSB7CiAJCXNwaW5fbG9ja19pbml0KCZhdjcxMTAtPmZlZWRsb2NrMSk7CiAJCWF2NzExMC0+Z3JhYmJpbmcgPSBzYWE3MTQ2X3ZtYWxsb2NfYnVpbGRfcGd0YWJsZShwZGV2LCBsZW5ndGgsCiAJCQkJCQkJCSAmYXY3MTEwLT5wdCk7CkBAIC0yNzEwLDExICsyNzcxLDEzIEBACiAjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfRVZERVYpIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX0VWREVWX01PRFVMRSkKIAlhdjcxMTBfaXJfZXhpdChhdjcxMTApOwogI2VuZGlmCi0JaWYgKGJ1ZGdldHBhdGNoKSB7Ci0JCS8qIERpc2FibGUgUlBTMSAqLwotCQlzYWE3MTQ2X3dyaXRlKHNhYSwgTUMxLCBNQVNLXzI5KTsKLQkJLyogVlNZTkMgTE9XIChpbmFjdGl2ZSkgKi8KLQkJc2FhNzE0Nl9zZXRncGlvKHNhYSwgMywgU0FBNzE0Nl9HUElPX09VVExPKTsKKwlpZiAoYnVkZ2V0cGF0Y2ggfHwgYXY3MTEwLT5mdWxsX3RzKSB7CisJCWlmIChidWRnZXRwYXRjaCkgeworCQkJLyogRGlzYWJsZSBSUFMxICovCisJCQlzYWE3MTQ2X3dyaXRlKHNhYSwgTUMxLCBNQVNLXzI5KTsKKwkJCS8qIFZTWU5DIExPVyAoaW5hY3RpdmUpICovCisJCQlzYWE3MTQ2X3NldGdwaW8oc2FhLCAzLCBTQUE3MTQ2X0dQSU9fT1VUTE8pOworCQl9CiAJCXNhYTcxNDZfd3JpdGUoc2FhLCBNQzEsIE1BU0tfMjApOwkvKiBETUEzIG9mZiAqLwogCQlTQUE3MTQ2X0lFUl9ESVNBQkxFKHNhYSwgTUFTS18xMCk7CiAJCVNBQTcxNDZfSVNSX0NMRUFSKHNhYSwgTUFTS18xMCk7CkBAIC0yNzk0LDcgKzI4NTcsNyBAQAogCQl0YXNrbGV0X3NjaGVkdWxlKCZhdjcxMTAtPmdwaW9fdGFza2xldCk7CiAJfQogCi0JaWYgKCgqaXNyICYgTUFTS18xMCkgJiYgYnVkZ2V0cGF0Y2gpCisJaWYgKCppc3IgJiBNQVNLXzEwKQogCQl0YXNrbGV0X3NjaGVkdWxlKCZhdjcxMTAtPnZwZV90YXNrbGV0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuaAppbmRleCA1NWYyM2RkLi5kODViODUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuaApAQCAtMTkyLDYgKzE5Miw3IEBACiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgKmdyYWJiaW5nOwogCXN0cnVjdCBzYWE3MTQ2X3BndGFibGUgIHB0OwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAgIHZwZV90YXNrbGV0OworCWJvb2wJCQlmdWxsX3RzOwogCiAJaW50CQkJZmVfc3luY2VkOwogCXN0cnVjdCBtdXRleAkJcGlkX211dGV4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYwppbmRleCAxODQ2NDdhLi5iZGM2MmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYwpAQCAtNzg4LDYgKzc4OCw5IEBACiAKIAlkcHJpbnRrKDIsICJhdjcxMTA6JXAsIFxuIiwgYXY3MTEwKTsKIAorCWlmIChhdjcxMTAtPmZ1bGxfdHMgJiYgZGVtdXgtPmRteC5mcm9udGVuZC0+c291cmNlICE9IERNWF9NRU1PUllfRkUpCisJCXJldHVybiAwOworCiAJc3dpdGNoIChmZWVkLT5wZXNfdHlwZSkgewogCWNhc2UgMDoKIAkJaWYgKGF2NzExMC0+YXVkaW9zdGF0ZS5zdHJlYW1fc291cmNlID09IEFVRElPX1NPVVJDRV9NRU1PUlkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCmluZGV4IGI3ZDFmMmYuLjEwMzJlYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCkBAIC01Nyw2ICs1Nyw4IEBACiAjZGVmaW5lIFNMT1RTVEFUVVNfUkVBRFkgICAgICAgIDgKICNkZWZpbmUgU0xPVFNUQVRVU19PQ0NVUElFRCAgICAgKFNMT1RTVEFUVVNfUFJFU0VOVHxTTE9UU1RBVFVTX1JFU0VUfFNMT1RTVEFUVVNfUkVBRFkpCiAKK0RWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworCiBzdHJ1Y3QgYnVkZ2V0X2F2IHsKIAlzdHJ1Y3QgYnVkZ2V0IGJ1ZGdldDsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZDsKQEAgLTEwNDksNyArMTA1MSw3IEBACiAKIAlpZiAoZmUgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImJ1ZGdldC1hdjogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCAiCi0JCQkJImZvciBkZXZpY2UgJTA0eC8lMDR4IHN1YnN5c3RlbSAlMDR4LyUwNHhcbiIsCisJCQkJImZvciBkZXZpY2UgWyUwNHg6JTA0eF0gc3Vic3lzdGVtIFslMDR4OiUwNHhdXG4iLAogCQkgICAgICAgc2FhLT5wY2ktPnZlbmRvciwKIAkJICAgICAgIHNhYS0+cGNpLT5kZXZpY2UsCiAJCSAgICAgICBzYWEtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKQEAgLTExMjcsNyArMTEyOSw5IEBACiAKIAlkZXYtPmV4dF9wcml2ID0gYnVkZ2V0X2F2OwogCi0JaWYgKChlcnIgPSB0dHBjaV9idWRnZXRfaW5pdCgmYnVkZ2V0X2F2LT5idWRnZXQsIGRldiwgaW5mbywgVEhJU19NT0RVTEUpKSkgeworCWVyciA9IHR0cGNpX2J1ZGdldF9pbml0KCZidWRnZXRfYXYtPmJ1ZGdldCwgZGV2LCBpbmZvLCBUSElTX01PRFVMRSwKKwkJCQlhZGFwdGVyX25yKTsKKwlpZiAoZXJyKSB7CiAJCWtmcmVlKGJ1ZGdldF9hdik7CiAJCXJldHVybiBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwppbmRleCAwNjBlN2M3Li4wYTVhYWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwpAQCAtOTIsNiArOTIsOCBAQAogbW9kdWxlX3BhcmFtKGlyX2RlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpcl9kZWJ1ZywgImVuYWJsZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIElSIGRlY29kaW5nIik7CiAKK0RWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworCiBzdHJ1Y3QgYnVkZ2V0X2NpX2lyIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IG1zcDQzMF9pcnFfdGFza2xldDsKQEAgLTExNTMsNyArMTE1NSw3IEBACiAJfQogCiAJaWYgKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCA9PSBOVUxMKSB7Ci0JCXByaW50aygiYnVkZ2V0LWNpOiBBIGZyb250ZW5kIGRyaXZlciB3YXMgbm90IGZvdW5kIGZvciBkZXZpY2UgJTA0eC8lMDR4IHN1YnN5c3RlbSAlMDR4LyUwNHhcbiIsCisJCXByaW50aygiYnVkZ2V0LWNpOiBBIGZyb250ZW5kIGRyaXZlciB3YXMgbm90IGZvdW5kIGZvciBkZXZpY2UgWyUwNHg6JTA0eF0gc3Vic3lzdGVtIFslMDR4OiUwNHhdXG4iLAogCQkgICAgICAgYnVkZ2V0X2NpLT5idWRnZXQuZGV2LT5wY2ktPnZlbmRvciwKIAkJICAgICAgIGJ1ZGdldF9jaS0+YnVkZ2V0LmRldi0+cGNpLT5kZXZpY2UsCiAJCSAgICAgICBidWRnZXRfY2ktPmJ1ZGdldC5kZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKQEAgLTExODMsNyArMTE4NSw4IEBACiAKIAlkZXYtPmV4dF9wcml2ID0gYnVkZ2V0X2NpOwogCi0JZXJyID0gdHRwY2lfYnVkZ2V0X2luaXQoJmJ1ZGdldF9jaS0+YnVkZ2V0LCBkZXYsIGluZm8sIFRISVNfTU9EVUxFKTsKKwllcnIgPSB0dHBjaV9idWRnZXRfaW5pdCgmYnVkZ2V0X2NpLT5idWRnZXQsIGRldiwgaW5mbywgVEhJU19NT0RVTEUsCisJCQkJYWRhcHRlcl9ucik7CiAJaWYgKGVycikKIAkJZ290byBvdXQyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNvcmUuYwppbmRleCA2ZjRkZGI2Li5iYTE4ZTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jb3JlLmMKQEAgLTU3LDggKzU3LDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBidWRnZXQgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CiBNT0RVTEVfUEFSTV9ERVNDKGJ1ZnNpemUsICJETUEgYnVmZmVyIHNpemUgaW4gS0IsIGRlZmF1bHQ6IDE4OCwgbWluOiAxODgsIG1heDogMTQxMCAoQWN0aXZ5OiA1NjQpIik7CiAKLURWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVFQgYnVkZ2V0IC8gV2luVFYgTm92YQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MTEsNyArNDA5LDcgQEAKIAogaW50IHR0cGNpX2J1ZGdldF9pbml0KHN0cnVjdCBidWRnZXQgKmJ1ZGdldCwgc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsCiAJCSAgICAgIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSAqaW5mbywKLQkJICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIpCisJCSAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLCBzaG9ydCAqYWRhcHRlcl9udW1zKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBidWRnZXRfaW5mbyAqYmkgPSBpbmZvLT5leHRfcHJpdjsKQEAgLTQ3NCw3ICs0NzIsNyBAQAogCXByaW50aygiJXM6IGRtYSBidWZmZXIgc2l6ZSAldVxuIiwgYnVkZ2V0LT5kZXYtPm5hbWUsIGJ1ZGdldC0+YnVmZmVyX3NpemUpOwogCiAJcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmJ1ZGdldC0+ZHZiX2FkYXB0ZXIsIGJ1ZGdldC0+Y2FyZC0+bmFtZSwKLQkJCQkgICBvd25lciwgJmJ1ZGdldC0+ZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9ucik7CisJCQkJICAgb3duZXIsICZidWRnZXQtPmRldi0+cGNpLT5kZXYsIGFkYXB0ZXJfbnVtcyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMKaW5kZXggYWE1ZWQ0ZS4uNjAxMzY2ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jCkBAIC0zOSw2ICszOSw4IEBACiAKICNpbmNsdWRlICJic3J1Ni5oIgogCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKwogI2RlZmluZSBidWRnZXRfcGF0Y2ggYnVkZ2V0CiAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gYnVkZ2V0X2V4dGVuc2lvbjsKQEAgLTM2MCw3ICszNjIsNyBAQAogCX0KIAogCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZCA9PSBOVUxMKSB7Ci0JCXByaW50aygiZHZiLXR0cGNpOiBBIGZyb250ZW5kIGRyaXZlciB3YXMgbm90IGZvdW5kIGZvciBkZXZpY2UgJTA0eC8lMDR4IHN1YnN5c3RlbSAlMDR4LyUwNHhcbiIsCisJCXByaW50aygiZHZiLXR0cGNpOiBBIGZyb250ZW5kIGRyaXZlciB3YXMgbm90IGZvdW5kIGZvciBkZXZpY2UgWyUwNHg6JTA0eF0gc3Vic3lzdGVtIFslMDR4OiUwNHhdXG4iLAogCQkgICAgICAgYnVkZ2V0LT5kZXYtPnBjaS0+dmVuZG9yLAogCQkgICAgICAgYnVkZ2V0LT5kZXYtPnBjaS0+ZGV2aWNlLAogCQkgICAgICAgYnVkZ2V0LT5kZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKQEAgLTU5Miw4ICs1OTQsOSBAQAogCiAJZHByaW50aygyLCAiYnVkZ2V0OiAlcFxuIiwgYnVkZ2V0KTsKIAotCWlmICgoZXJyID0gdHRwY2lfYnVkZ2V0X2luaXQgKGJ1ZGdldCwgZGV2LCBpbmZvLCBUSElTX01PRFVMRSkpKSB7Ci0JCWtmcmVlIChidWRnZXQpOworCWVyciA9IHR0cGNpX2J1ZGdldF9pbml0KGJ1ZGdldCwgZGV2LCBpbmZvLCBUSElTX01PRFVMRSwgYWRhcHRlcl9ucik7CisJaWYgKGVycikgeworCQlrZnJlZShidWRnZXQpOwogCQlyZXR1cm4gZXJyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYwppbmRleCBmMDA2ODk5Li4xNjM4ZTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYwpAQCAtNDYsMTEgKzQ2LDE0IEBACiAjaW5jbHVkZSAibG5icDIxLmgiCiAjaW5jbHVkZSAiYnNydTYuaCIKICNpbmNsdWRlICJic2JlMS5oIgorI2luY2x1ZGUgInRkaGQxLmgiCiAKIHN0YXRpYyBpbnQgZGlzZXFjX21ldGhvZDsKIG1vZHVsZV9wYXJhbShkaXNlcWNfbWV0aG9kLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkaXNlcWNfbWV0aG9kLCAiU2VsZWN0IERpU0VxQyBtZXRob2QgZm9yIHN1YnN5c3RlbSBpZCAxM2MyOjEwMDMsIDA6IGRlZmF1bHQsIDE6IG1vcmUgcmVsaWFibGUgKGZvciBuZXdlciByZXZpc2lvbnMgb25seSkiKTsKIAorRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CisKIHN0YXRpYyB2b2lkIFNldDIySyAoc3RydWN0IGJ1ZGdldCAqYnVkZ2V0LCBpbnQgc3RhdGUpCiB7CiAJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXY9YnVkZ2V0LT5kZXY7CkBAIC0zOTAsNiArMzkzLDEzIEBACiAJLnNldF9zeW1ib2xfcmF0ZSA9IGFscHNfYnNiZTFfc2V0X3N5bWJvbF9yYXRlLAogfTsKIAorc3RhdGljIGludCBhbHBzX3RkaGQxXzIwNF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdywgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYnVkZ2V0ICpidWRnZXQgPSAoc3RydWN0IGJ1ZGdldCAqKWZlLT5kdmItPnByaXY7CisKKwlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZShmdywgbmFtZSwgJmJ1ZGdldC0+ZGV2LT5wY2ktPmRldik7Cit9CisKIAogc3RhdGljIGludCBpMmNfcmVhZHJlZyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggYWRyLCB1OCByZWcpCiB7CkBAIC01MTEsNiArNTIxLDE0IEBACiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIDB4NWY2MDogLyogRnVqaXRzdSBTaWVtZW5zIEFjdGl2eSBCdWRnZXQtVCBQQ0kgcmV2IEFMICh0ZGExMDA0Ni9BTFBTIFRESEQxLTIwNEEpICovCisJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsICZhbHBzX3RkaGQxXzIwNGFfY29uZmlnLCAmYnVkZ2V0LT5pMmNfYWRhcCk7CisJCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZCkgeworCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGFscHNfdGRoZDFfMjA0YV90dW5lcl9zZXRfcGFyYW1zOworCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPnR1bmVyX3ByaXYgPSAmYnVkZ2V0LT5pMmNfYWRhcDsKKwkJfQorCQlicmVhazsKKwogCWNhc2UgMHg1ZjYxOiAvKiBGdWppdHN1IFNpZW1lbnMgQWN0aXZ5IEJ1ZGdldC1UIFBDSSByZXYgR1IgKEw2NDc4MS9HcnVuZGlnIDI5NTA0LTQwMSh0c2E1MDYwKSkgKi8KIAkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGw2NDc4MV9hdHRhY2gsICZncnVuZGlnXzI5NTA0XzQwMV9jb25maWdfYWN0aXZ5LCAmYnVkZ2V0LT5pMmNfYWRhcCk7CiAJCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZCkgewpAQCAtNTUwLDcgKzU2OCw3IEBACiAJfQogCiAJaWYgKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kID09IE5VTEwpIHsKLQkJcHJpbnRrKCJidWRnZXQ6IEEgZnJvbnRlbmQgZHJpdmVyIHdhcyBub3QgZm91bmQgZm9yIGRldmljZSAlMDR4LyUwNHggc3Vic3lzdGVtICUwNHgvJTA0eFxuIiwKKwkJcHJpbnRrKCJidWRnZXQ6IEEgZnJvbnRlbmQgZHJpdmVyIHdhcyBub3QgZm91bmQgZm9yIGRldmljZSBbJTA0eDolMDR4XSBzdWJzeXN0ZW0gWyUwNHg6JTA0eF1cbiIsCiAJCSAgICAgICBidWRnZXQtPmRldi0+cGNpLT52ZW5kb3IsCiAJCSAgICAgICBidWRnZXQtPmRldi0+cGNpLT5kZXZpY2UsCiAJCSAgICAgICBidWRnZXQtPmRldi0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yLApAQCAtNTgyLDcgKzYwMCw4IEBACiAKIAlkZXYtPmV4dF9wcml2ID0gYnVkZ2V0OwogCi0JaWYgKChlcnIgPSB0dHBjaV9idWRnZXRfaW5pdCAoYnVkZ2V0LCBkZXYsIGluZm8sIFRISVNfTU9EVUxFKSkpIHsKKwllcnIgPSB0dHBjaV9idWRnZXRfaW5pdChidWRnZXQsIGRldiwgaW5mbywgVEhJU19NT0RVTEUsIGFkYXB0ZXJfbnIpOworCWlmIChlcnIpIHsKIAkJcHJpbnRrKCI9PT4gZmFpbGVkXG4iKTsKIAkJa2ZyZWUgKGJ1ZGdldCk7CiAJCXJldHVybiBlcnI7CkBAIC02MjQsNiArNjQzLDcgQEAKIE1BS0VfQlVER0VUX0lORk8oZnNhY3MwLCAiRnVqaXRzdSBTaWVtZW5zIEFjdGl2eSBCdWRnZXQtUyBQQ0kgKHJldiBHUi9ncnVuZGlnIGZyb250ZW5kKSIsIEJVREdFVF9GU19BQ1RJVlkpOwogTUFLRV9CVURHRVRfSU5GTyhmc2FjczEsICJGdWppdHN1IFNpZW1lbnMgQWN0aXZ5IEJ1ZGdldC1TIFBDSSAocmV2IEFML2FscHMgZnJvbnRlbmQpIiwgQlVER0VUX0ZTX0FDVElWWSk7CiBNQUtFX0JVREdFVF9JTkZPKGZzYWN0LAkgIkZ1aml0c3UgU2llbWVucyBBY3RpdnkgQnVkZ2V0LVQgUENJIChyZXYgR1IvR3J1bmRpZyBmcm9udGVuZCkiLCBCVURHRVRfRlNfQUNUSVZZKTsKK01BS0VfQlVER0VUX0lORk8oZnNhY3QxLCAiRnVqaXRzdSBTaWVtZW5zIEFjdGl2eSBCdWRnZXQtVCBQQ0kgKHJldiBBTC9BTFBTIFRESEQxLTIwNEEpIiwgQlVER0VUX0ZTX0FDVElWWSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfdGJsW10gPSB7CiAJTUFLRV9FWFRFTlNJT05fUENJKHR0YnMsICAweDEzYzIsIDB4MTAwMyksCkBAIC02MzQsNiArNjU0LDcgQEAKIAlNQUtFX0VYVEVOU0lPTl9QQ0kodHRiczE0MDEsIDB4MTNjMiwgMHgxMDE4KSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koZnNhY3MxLDB4MTEzMSwgMHg0ZjYwKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koZnNhY3MwLDB4MTEzMSwgMHg0ZjYxKSwKKwlNQUtFX0VYVEVOU0lPTl9QQ0koZnNhY3QxLCAweDExMzEsIDB4NWY2MCksCiAJTUFLRV9FWFRFTlNJT05fUENJKGZzYWN0LCAweDExMzEsIDB4NWY2MSksCiAJewogCQkudmVuZG9yICAgID0gMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmgKaW5kZXggZGQ0NTBiNy4uODY0MzViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmgKQEAgLTEwOSw3ICsxMDksNyBAQAogCiBleHRlcm4gaW50IHR0cGNpX2J1ZGdldF9pbml0KHN0cnVjdCBidWRnZXQgKmJ1ZGdldCwgc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsCiAJCQkgICAgIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSAqaW5mbywKLQkJCSAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIpOworCQkJICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwgc2hvcnQgKmFkYXB0ZXJfbnVtcyk7CiBleHRlcm4gdm9pZCB0dHBjaV9idWRnZXRfaW5pdF9ob29rcyhzdHJ1Y3QgYnVkZ2V0ICpidWRnZXQpOwogZXh0ZXJuIGludCB0dHBjaV9idWRnZXRfZGVpbml0KHN0cnVjdCBidWRnZXQgKmJ1ZGdldCk7CiBleHRlcm4gdm9pZCB0dHBjaV9idWRnZXRfaXJxMTBfaGFuZGxlcihzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgdTMyICogaXNyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jCmluZGV4IGU2YzljZDIuLjY2YWIwYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYwpAQCAtMTYxNCw3ICsxNjE0LDcgQEAKIAl9CiAKIAlpZiAodHR1c2ItPmZlID09IE5VTEwpIHsKLQkJcHJpbnRrKCJkdmItdHR1c2ItYnVkZ2V0OiBBIGZyb250ZW5kIGRyaXZlciB3YXMgbm90IGZvdW5kIGZvciBkZXZpY2UgJTA0eC8lMDR4XG4iLAorCQlwcmludGsoImR2Yi10dHVzYi1idWRnZXQ6IEEgZnJvbnRlbmQgZHJpdmVyIHdhcyBub3QgZm91bmQgZm9yIGRldmljZSBbJTA0eDolMDR4XVxuIiwKIAkJICAgICAgIGxlMTZfdG9fY3B1KHR0dXNiLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAogCQkgICAgICAgbGUxNl90b19jcHUodHR1c2ItPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jCmluZGV4IGRlNTgyOWIuLmFiMzNmZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYl9kZWMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMKQEAgLTE2NjUsNyArMTY2NSw3IEBACiAJfQogCiAJaWYgKGRlYy0+ZmUgPT0gTlVMTCkgewotCQlwcmludGsoImR2Yi10dHVzYi1kZWM6IEEgZnJvbnRlbmQgZHJpdmVyIHdhcyBub3QgZm91bmQgZm9yIGRldmljZSAlMDR4LyUwNHhcbiIsCisJCXByaW50aygiZHZiLXR0dXNiLWRlYzogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCBmb3IgZGV2aWNlIFslMDR4OiUwNHhdXG4iLAogCQkgICAgICAgbGUxNl90b19jcHUoZGVjLT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKIAkJICAgICAgIGxlMTZfdG9fY3B1KGRlYy0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiZGVjZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYmRlY2ZlLmMKaW5kZXggNDQzYWYyNC4uMjEyNjBhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiZGVjZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JkZWNmZS5jCkBAIC0zOCw3ICszOCwxNyBAQAogfTsKIAogCi1zdGF0aWMgaW50IHR0dXNiZGVjZmVfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3N0YXR1c190KiBzdGF0dXMpCitzdGF0aWMgaW50IHR0dXNiZGVjZmVfZHZic19yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zdGF0dXNfdCAqc3RhdHVzKQoreworCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX1ZJVEVSQkkgfAorCQlGRV9IQVNfU1lOQyB8IEZFX0hBU19DQVJSSUVSIHwgRkVfSEFTX0xPQ0s7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB0dHVzYmRlY2ZlX2R2YnRfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc3RhdHVzX3QgKnN0YXR1cykKIHsKIAlzdHJ1Y3QgdHR1c2JkZWNmZV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1OCBiW10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCkBAIC0yNTEsNyArMjYxLDcgQEAKIAogCS5nZXRfdHVuZV9zZXR0aW5ncyA9IHR0dXNiZGVjZmVfZHZidF9nZXRfdHVuZV9zZXR0aW5ncywKIAotCS5yZWFkX3N0YXR1cyA9IHR0dXNiZGVjZmVfcmVhZF9zdGF0dXMsCisJLnJlYWRfc3RhdHVzID0gdHR1c2JkZWNmZV9kdmJ0X3JlYWRfc3RhdHVzLAogfTsKIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHR0dXNiZGVjZmVfZHZic19vcHMgPSB7CkBAIC0yNzMsNyArMjgzLDcgQEAKIAogCS5zZXRfZnJvbnRlbmQgPSB0dHVzYmRlY2ZlX2R2YnNfc2V0X2Zyb250ZW5kLAogCi0JLnJlYWRfc3RhdHVzID0gdHR1c2JkZWNmZV9yZWFkX3N0YXR1cywKKwkucmVhZF9zdGF0dXMgPSB0dHVzYmRlY2ZlX2R2YnNfcmVhZF9zdGF0dXMsCiAKIAkuZGlzZXFjX3NlbmRfbWFzdGVyX2NtZCA9IHR0dXNiZGVjZmVfZHZic19kaXNlcWNfc2VuZF9tYXN0ZXJfY21kLAogCS5zZXRfdm9sdGFnZSA9IHR0dXNiZGVjZmVfZHZic19zZXRfdm9sdGFnZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwppbmRleCAxYjQxYjNmLi4wNGNkN2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCkBAIC0zNTksNiArMzU5LDE4IEBACiAJICBjb21wdXRlcidzIFVTQiBwb3J0LgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByYWRpby1zaWxhYnMuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmFkaW8tc2k0NzB4LgorCitjb25maWcgVVNCX01SODAwCisJdHJpc3RhdGUgIkF2ZXJNZWRpYSBNUiA4MDAgVVNCIEZNIHJhZGlvIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgcmFkaW8gdG8geW91cgorCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gTm90ZSB0aGF0IHRoZSBhdWRpbyBpcyBub3QgZGlnaXRhbCwgYW5kCisJICB5b3UgbXVzdCBjb25uZWN0IHRoZSBsaW5lIG91dCBjb25uZWN0b3IgdG8gYSBzb3VuZCBjYXJkIG9yIGEKKwkgIHNldCBvZiBzcGVha2Vycy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmFkaW8tbXI4MDAuCiAKIGVuZGlmICMgUkFESU9fQURBUFRFUlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlCmluZGV4IDdjYTcxYWIuLjI0MGVjNjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUKQEAgLTE4LDUgKzE4LDYgQEAKIG9iai0kKENPTkZJR19SQURJT19NQUVTVFJPKSArPSByYWRpby1tYWVzdHJvLm8KIG9iai0kKENPTkZJR19VU0JfRFNCUikgKz0gZHNicjEwMC5vCiBvYmotJChDT05GSUdfVVNCX1NJNDcwWCkgKz0gcmFkaW8tc2k0NzB4Lm8KK29iai0kKENPTkZJR19VU0JfTVI4MDApICs9IHJhZGlvLW1yODAwLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1Jc291bmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMKaW5kZXggNzBjNjVhNy4uNzhmNTY5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMwNiwxOCArMzA2LDE4IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJcmFkaW8tPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7CiAJaWYgKGRzYnIxMDBfc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpPT0tMSkKLQkJd2FybigiU2V0IGZyZXF1ZW5jeSBmYWlsZWQiKTsKKwkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwgIlNldCBmcmVxdWVuY3kgZmFpbGVkXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHJhZGlvLT5jdXJmcmVxOwpAQCAtMzQyLDcgKzM0Miw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzU1LDE2ICszNTUsMjIgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChjdHJsLT52YWx1ZSkgewotCQkJaWYgKGRzYnIxMDBfc3RvcChyYWRpbyk9PS0xKQotCQkJCXdhcm4oIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseSIpOworCQkJaWYgKGRzYnIxMDBfc3RvcChyYWRpbykgPT0gLTEpIHsKKwkJCQlkZXZfd2FybigmcmFkaW8tPnVzYmRldi0+ZGV2LAorCQkJCQkgIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseVxuIik7CisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCX0KIAkJfSBlbHNlIHsKLQkJCWlmIChkc2JyMTAwX3N0YXJ0KHJhZGlvKT09LTEpCi0JCQkJd2FybigiUmFkaW8gZGlkIG5vdCByZXNwb25kIHByb3Blcmx5Iik7CisJCQlpZiAoZHNicjEwMF9zdGFydChyYWRpbykgPT0gLTEpIHsKKwkJCQlkZXZfd2FybigmcmFkaW8tPnVzYmRldi0+ZGV2LAorCQkJCQkgIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseVxuIik7CisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCX0KIAkJfQogCQlyZXR1cm4gMDsKIAl9CkBAIC00MDUsMjMgKzQxMSwyNyBAQAogCiBzdGF0aWMgaW50IHVzYl9kc2JyMTAwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbz12aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCWxvY2tfa2VybmVsKCk7CiAJcmFkaW8tPnVzZXJzID0gMTsKIAlyYWRpby0+bXV0ZWQgPSAxOwogCiAJaWYgKGRzYnIxMDBfc3RhcnQocmFkaW8pPDApIHsKLQkJd2FybigiUmFkaW8gZGlkIG5vdCBzdGFydCB1cCBwcm9wZXJseSIpOworCQlkZXZfd2FybigmcmFkaW8tPnVzYmRldi0+ZGV2LAorCQkJICJSYWRpbyBkaWQgbm90IHN0YXJ0IHVwIHByb3Blcmx5XG4iKTsKIAkJcmFkaW8tPnVzZXJzID0gMDsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJZHNicjEwMF9zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSk7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHVzYl9kc2JyMTAwX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW89dmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoIXJhZGlvKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTQ5NCw3ICs1MDQsNyBAQAogCXJhZGlvLT5jdXJmcmVxID0gRlJFUV9NSU4qRlJFUV9NVUw7CiAJdmlkZW9fc2V0X2RydmRhdGEocmFkaW8tPnZpZGVvZGV2LCByYWRpbyk7CiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXdhcm4oIkNvdWxkIG5vdCByZWdpc3RlciB2aWRlbyBkZXZpY2UiKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShyYWRpby0+dmlkZW9kZXYpOwogCQlrZnJlZShyYWRpby0+dHJhbnNmZXJfYnVmZmVyKTsKIAkJa2ZyZWUocmFkaW8pOwpAQCAtNTA3LDcgKzUxNyw4IEBACiBzdGF0aWMgaW50IF9faW5pdCBkc2JyMTAwX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2JfZHNicjEwMF9kcml2ZXIpOwotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKaW5kZXggMWYwNjRmNC4uOTMwNWU5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKQEAgLTUxLDYgKzUxLDcgQEAKIAogc3RydWN0IHJ0X2RldmljZQogeworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCWludCBwb3J0OwogCWludCBjdXJ2b2w7CiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOwpAQCAtMjQ1LDggKzI0Niw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gZGV2LT5wcml2OworCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjczLDggKzI3Myw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSBkZXYtPnByaXY7CisJc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJcnQtPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7CiAJcnRfc2V0ZnJlcShydCwgcnQtPmN1cmZyZXEpOwpAQCAtMjg0LDggKzI4Myw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSBkZXYtPnByaXY7CisJc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gcnQtPmN1cmZyZXE7CkBAIC0zMTAsOCArMzA4LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gZGV2LT5wcml2OworCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zMjcsOCArMzI0LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gZGV2LT5wcml2OworCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zNzgsMTAgKzM3NCwyMSBAQAogCiBzdGF0aWMgc3RydWN0IHJ0X2RldmljZSBydHJhY2tfdW5pdDsKIAorc3RhdGljIGludCBydHJhY2tfZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJnJ0cmFja191bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IHJ0cmFja19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJnJ0cmFja191bml0LmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0cmFja19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBydHJhY2tfZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gcnRyYWNrX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC00MDgsNiArNDE1LDcgQEAKIAkubmFtZQkJPSAiUmFkaW9UcmFjayByYWRpbyIsCiAJLmZvcHMgICAgICAgICAgID0gJnJ0cmFja19mb3BzLAogCS5pb2N0bF9vcHMgCT0gJnJ0cmFja19pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJ0cmFja19pbml0KHZvaWQpCkBAIC00MjQsNyArNDMyLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlydHJhY2tfcmFkaW8ucHJpdj0mcnRyYWNrX3VuaXQ7CisJdmlkZW9fc2V0X2RydmRhdGEoJnJ0cmFja19yYWRpbywgJnJ0cmFja191bml0KTsKIAogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnJ0cmFja19yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKIAkJcmVsZWFzZV9yZWdpb24oaW8sIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKaW5kZXggNjI4YzY4OS4uZDc4NDg5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jCkBAIC03MCw2ICs3MCw3IEBACiAKIHN0cnVjdCBhel9kZXZpY2UKIHsKKwl1bnNpZ25lZCBsb25nIGluX3VzZTsKIAlpbnQgY3Vydm9sOwogCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKIAlpbnQgc3RlcmVvOwpAQCAtMTk1LDggKzE5Niw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gZGV2LT5wcml2OworCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjY0LDggKzI2NCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGF6X2RldmljZSAqYXogPSBkZXYtPnByaXY7CisJc3RydWN0IGF6X2RldmljZSAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJYXotPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7CiAJYXpfc2V0ZnJlcShheiwgYXotPmN1cmZyZXEpOwpAQCAtMjc1LDggKzI3NCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGF6X2RldmljZSAqYXogPSBkZXYtPnByaXY7CisJc3RydWN0IGF6X2RldmljZSAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gYXotPmN1cmZyZXE7CkBAIC0zMDIsOCArMzAwLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gZGV2LT5wcml2OworCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzIyLDggKzMxOSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgYXpfZGV2aWNlICpheiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgYXpfZGV2aWNlICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTM0MiwxMCArMzM4LDIxIEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXpfZGV2aWNlIGF6dGVjaF91bml0OwogCitzdGF0aWMgaW50IGF6dGVjaF9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmYXp0ZWNoX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgYXp0ZWNoX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWNsZWFyX2JpdCgwLCAmYXp0ZWNoX3VuaXQuaW5fdXNlKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXp0ZWNoX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IGF6dGVjaF9leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBhenRlY2hfZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKQEAgLTM2OSw5ICszNzYsMTAgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGF6dGVjaF9yYWRpbyA9IHsKLQkubmFtZQkJICAgID0gIkF6dGVjaCByYWRpbyIsCi0JLmZvcHMgICAgICAgICAgICAgICA9ICZhenRlY2hfZm9wcywKLQkuaW9jdGxfb3BzIAkgICAgPSAmYXp0ZWNoX2lvY3RsX29wcywKKwkubmFtZQkJPSAiQXp0ZWNoIHJhZGlvIiwKKwkuZm9wcyAgICAgICAgICAgPSAmYXp0ZWNoX2ZvcHMsCisJLmlvY3RsX29wcyAJPSAmYXp0ZWNoX2lvY3RsX29wcywKKwkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLGF6dGVjaF9yYWRpby5kZWJ1ZywgaW50LCAwNjQ0KTsKQEAgLTM5Miw3ICs0MDAsNyBAQAogCX0KIAogCW11dGV4X2luaXQoJmxvY2spOwotCWF6dGVjaF9yYWRpby5wcml2PSZhenRlY2hfdW5pdDsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmYXp0ZWNoX3JhZGlvLCAmYXp0ZWNoX3VuaXQpOwogCiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmYXp0ZWNoX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewogCQlyZWxlYXNlX3JlZ2lvbihpbywyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwppbmRleCAwNGMzNjk4Li4wNDkwYTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCkBAIC01ODksNiArNTg5LDcgQEAKIAkubmFtZQkJPSAiQ2FkZXQgcmFkaW8iLAogCS5mb3BzICAgICAgICAgICA9ICZjYWRldF9mb3BzLAogCS5pb2N0bF9vcHMgCT0gJmNhZGV0X2lvY3RsX29wcywKKwkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogI2lmZGVmIENPTkZJR19QTlAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLXBjaS5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMKaW5kZXggNWNkN2YwMy4uZTE1YmVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMKQEAgLTEwMCw5ICsxMDAsOCBAQAogCXU4ICBtdXRlOwogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICIkSWQ6IHJhZGlvLWdlbXRlay1wY2kuYyx2IDEuMSAyMDAxLzA3LzIzIDA4OjA4OjE2IHRlZCBFeHAgdGVkICQiOwotCiBzdGF0aWMgaW50IG5yX3JhZGlvID0gLTE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbl91c2U7CiAKIHN0YXRpYyBpbmxpbmUgdTggZ2VtdGVrX3BjaV9vdXQoIHUxNiB2YWx1ZSwgdTMyIHBvcnQgKQogewpAQCAtMjA1LDggKzIwNCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSBkZXYtPnByaXY7CisJc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIzMyw4ICsyMzEsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSBkZXYtPnByaXY7CisJc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoIChmLT5mcmVxdWVuY3kgPCBHRU1URUtfUENJX1JBTkdFX0xPVykgfHwKIAkJCShmLT5mcmVxdWVuY3kgPiBHRU1URUtfUENJX1JBTkdFX0hJR0gpICkKQEAgLTI0OCw4ICsyNDUsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSBkZXYtPnByaXY7CisJc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBjYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeTsKQEAgLTI3Myw4ICsyNjksNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0yOTMsOCArMjg4LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSBkZXYtPnByaXY7CisJc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzY0LDEwICszNTgsMjEgQEAKIAogc3RhdGljIGludCBteCA9IDE7CiAKK3N0YXRpYyBpbnQgZ2VtdGVrX3BjaV9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmaW5fdXNlKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgZ2VtdGVrX3BjaV9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdlbXRla19wY2lfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gZ2VtdGVrX3BjaV9leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBnZW10ZWtfcGNpX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC0zOTEsOSArMzk2LDEwIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2X3RlbXBsYXRlID0gewotCS5uYW1lICAgICAgICAgID0gIkdlbXRlayBQQ0kgUmFkaW8iLAotCS5mb3BzICAgICAgICAgID0gJmdlbXRla19wY2lfZm9wcywKLQkuaW9jdGxfb3BzICAgICA9ICZnZW10ZWtfcGNpX2lvY3RsX29wcywKKwkubmFtZSAgICAgICAgICAJPSAiR2VtdGVrIFBDSSBSYWRpbyIsCisJLmZvcHMgICAgICAgICAgCT0gJmdlbXRla19wY2lfZm9wcywKKwkuaW9jdGxfb3BzIAk9ICZnZW10ZWtfcGNpX2lvY3RsX29wcywKKwkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgZ2VtdGVrX3BjaV9wcm9iZSggc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQgKQpAQCAtNDMxLDcgKzQzNyw3IEBACiAJfQogCiAJY2FyZC0+dmlkZW9kZXYgPSBkZXZyYWRpbzsKLQlkZXZyYWRpby0+cHJpdiA9IGNhcmQ7CisJdmlkZW9fc2V0X2RydmRhdGEoZGV2cmFkaW8sIGNhcmQpOwogCWdlbXRla19wY2lfbXV0ZSggY2FyZCApOwogCiAJcHJpbnRrKCBLRVJOX0lORk8gIkdlbXRlayBQQ0kgUmFkaW8gKHJldi4gJWQpIGZvdW5kIGF0IDB4JTA0eC0weCUwNHguXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMKaW5kZXggMGEwZjk1Ni4uZDEzMWE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jCkBAIC01Nyw2ICs1Nyw3IEBACiBzdGF0aWMgaW50IGtlZXBtdXRlZAk9IDE7CiBzdGF0aWMgaW50IGluaXRtdXRlCT0gMTsKIHN0YXRpYyBpbnQgcmFkaW9fbnIJPSAtMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGluX3VzZTsKIAogbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpbywgIkZvcmNlIEkvTyBwb3J0IGZvciB0aGUgR2VtVGVrIFJhZGlvIGNhcmQgaWYgYXV0b21hdGljICIKQEAgLTM5MywxMCArMzk0LDIxIEBACiAJfQogfTsKIAorc3RhdGljIGludCBnZW10ZWtfZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmluX3VzZSkgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IGdlbXRla19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdlbXRla19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZQk9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuCQk9IGdlbXRla19leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZQk9IGdlbXRla19leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLApAQCAtNDQ3LDggKzQ1OSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBnZW10ZWtfZGV2aWNlICpydCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZ2VtdGVrX3NldGZyZXEocnQsIGYtPmZyZXF1ZW5jeSk7CiAKQEAgLTQ1OCw4ICs0NjksNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqcnQgPSBkZXYtPnByaXY7CisJc3RydWN0IGdlbXRla19kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHJ0LT5sYXN0ZnJlcTsKQEAgLTQ4Myw4ICs0OTMsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqcnQgPSBkZXYtPnByaXY7CisJc3RydWN0IGdlbXRla19kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC01MDMsOCArNTEyLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGdlbXRla19kZXZpY2UgKnJ0ID0gZGV2LT5wcml2OworCXN0cnVjdCBnZW10ZWtfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtNTY5LDkgKzU3NywxMCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgZ2VtdGVrX3JhZGlvID0gewotCS5uYW1lCQkJPSAiR2VtVGVrIFJhZGlvIGNhcmQiLAotCS5mb3BzCQkJPSAmZ2VtdGVrX2ZvcHMsCi0JLmlvY3RsX29wcyAJCT0gJmdlbXRla19pb2N0bF9vcHMsCisJLm5hbWUJCT0gIkdlbVRlayBSYWRpbyBjYXJkIiwKKwkuZm9wcwkJPSAmZ2VtdGVrX2ZvcHMsCisJLmlvY3RsX29wcyAJPSAmZ2VtdGVrX2lvY3RsX29wcywKKwkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogLyoKQEAgLTYxMCw3ICs2MTksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlnZW10ZWtfcmFkaW8ucHJpdiA9ICZnZW10ZWtfdW5pdDsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZ2VtdGVrX3JhZGlvLCAmZ2VtdGVrX3VuaXQpOwogCiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZ2VtdGVrX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewogCQlyZWxlYXNlX3JlZ2lvbihpbywgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCmluZGV4IDllZjBhNzYuLjRiZjRkMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCkBAIC03NSw3ICs3NSwyMSBAQAogc3RhdGljIGludCByYWRpb19uciA9IC0xOwogbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbl91c2U7CisKIHN0YXRpYyBpbnQgbWFlc3Ryb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CisKK3N0YXRpYyBpbnQgbWFlc3Ryb19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmaW5fdXNlKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbWFlc3Ryb19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIG1hZXN0cm9fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hZXN0cm9fcl9wY2lfdGJsW10gPSB7CkBAIC05OCw4ICsxMTIsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtYWVzdHJvX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IG1hZXN0cm9fZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gbWFlc3Ryb19leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLApAQCAtMTk2LDggKzIxMCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMjksOCArMjQyLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmIChmLT5mcmVxdWVuY3kgPCBGUkVRX0xPIHx8IGYtPmZyZXF1ZW5jeSA+IEZSRVFfSEkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjQxLDggKzI1Myw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBCSVRTMkZSRVEocmFkaW9fYml0c19nZXQoY2FyZCkpOwpAQCAtMjY3LDggKzI3OCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0yODEsOCArMjkxLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXJlZ2lzdGVyIHUxNiBpbyA9IGNhcmQtPmlvOwogCXJlZ2lzdGVyIHUxNiBvbWFzayA9IGludyhpbyArIElPX01BU0spOwogCkBAIC0zNzQsNiArMzgzLDcgQEAKIAkubmFtZSAgICAgICAgICAgPSAiTWFlc3RybyByYWRpbyIsCiAJLmZvcHMgICAgICAgICAgID0gJm1hZXN0cm9fZm9wcywKIAkuaW9jdGxfb3BzIAk9ICZtYWVzdHJvX2lvY3RsX29wcywKKwkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgbWFlc3Ryb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jCmluZGV4IDBjYzZmY2IuLmM3NzdhMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYwpAQCAtODUsNiArODUsNyBAQAogc3RhdGljIGludCByYWRpb19uciA9IC0xOwogbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbl91c2U7CiAKICNkZWZpbmUgRlJFUV9MTwkJIDUwKjE2MDAwCiAjZGVmaW5lIEZSRVFfSEkJCTE1MCoxNjAwMApAQCAtOTksMTAgKzEwMCwyMSBAQAogI2RlZmluZSBCSVRTMkZSRVEoeCkJKCh4KSAqIEZSRVFfU1RFUCAtIEZSRVFfSUYpCiAKIAorc3RhdGljIGludCBtYXhpcmFkaW9fZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmluX3VzZSkgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IG1heGlyYWRpb19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1heGlyYWRpb19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBtYXhpcmFkaW9fZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gbWF4aXJhZGlvX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bCAgICAgICAgICA9IHZpZGVvX2lvY3RsMiwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKQEAgLTIxOSw4ICsyMzEsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lciAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICBzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQ9ZGV2LT5wcml2OworCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yOTAsOCArMzAxLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkPWRldi0+cHJpdjsKKwlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmIChmLT5mcmVxdWVuY3kgPCBGUkVRX0xPIHx8IGYtPmZyZXF1ZW5jeSA+IEZSRVFfSEkpIHsKIAkJZHByaW50aygxLCAicmFkaW8gZnJlcSAoJWQuJTAyZCBNSHopIG91dCBvZiByYW5nZSAoJWQtJWQpXG4iLApAQCAtMzEyLDggKzMyMiw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZD1kZXYtPnByaXY7CisJc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBjYXJkLT5mcmVxOwpAQCAtMzQzLDggKzM1Miw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkPWRldi0+cHJpdjsKKwlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzU4LDggKzM2Niw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZD1kZXYtPnByaXY7CisJc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTM5MCw5ICszOTcsMTAgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIG1heGlyYWRpb19yYWRpbyA9IHsKLQkubmFtZQkJICAgID0gIk1heGkgUmFkaW8gRk0yMDAwIHJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgICAgID0gJm1heGlyYWRpb19mb3BzLAotCS5pb2N0bF9vcHMgCSAgICA9ICZtYXhpcmFkaW9faW9jdGxfb3BzLAorCS5uYW1lCQk9ICJNYXhpIFJhZGlvIEZNMjAwMCByYWRpbyIsCisJLmZvcHMgICAgICAgICAgID0gJm1heGlyYWRpb19mb3BzLAorCS5pb2N0bF9vcHMgCT0gJm1heGlyYWRpb19pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG1heGlyYWRpb19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTQwOCw3ICs0MTYsNyBAQAogCiAJcmFkaW9fdW5pdC5pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKIAltdXRleF9pbml0KCZyYWRpb191bml0LmxvY2spOwotCW1heGlyYWRpb19yYWRpby5wcml2ID0gJnJhZGlvX3VuaXQ7CisJdmlkZW9fc2V0X2RydmRhdGEoJm1heGlyYWRpb19yYWRpbywgJnJhZGlvX3VuaXQpOwogCiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmbWF4aXJhZGlvX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewogCQlwcmludGsoInJhZGlvLW1heGlyYWRpbzogY2FuJ3QgcmVnaXN0ZXIgZGV2aWNlISIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMzcxN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMKQEAgLTAsMCArMSw2MjggQEAKKy8qCisgKiBBIGRyaXZlciBmb3IgdGhlIEF2ZXJNZWRpYSBNUiA4MDAgVVNCIEZNIHJhZGlvLiBUaGlzIGRldmljZSBwbHVncworICogaW50byBib3RoIHRoZSBVU0IgYW5kIGFuIGFuYWxvZyBhdWRpbyBpbnB1dCwgc28gdGhpcyB0aGluZworICogb25seSBkZWFscyB3aXRoIGluaXRpYWxpemF0aW9uIGFuZCBmcmVxdWVuY3kgc2V0dGluZywgdGhlCisgKiBhdWRpbyBkYXRhIGhhcyB0byBiZSBoYW5kbGVkIGJ5IGEgc291bmQgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBbGV4ZXkgS2xpbW92IDxrbGltb3YubGludXhAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIEJpZyB0aGFua3MgdG8gYXV0aG9ycyBvZiBkc2JyMTAwLmMgYW5kIHJhZGlvLXNpNDcweC5jCisgKgorICogV2hlbiB3b3JrIHdhcyBsb29rZWQgcHJldHR5IGdvb2QsIGkgZGlzY292ZXIgdGhpczoKKyAqIGh0dHA6Ly9hdi11c2JyYWRpby5zb3VyY2Vmb3JnZS5uZXQvaW5kZXgucGhwCisgKiBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2F2LXVzYnJhZGlvLworICogTGF0ZXN0IHJlbGVhc2Ugb2YgdGhlaXJzIHByb2plY3Qgd2FzIGluIDIwMDUuCisgKiBQcm9iYWJseSwgdGhpcyBkcml2ZXIgY291bGQgYmUgaW1wcm92ZWQgdHJvdWdoIHVzaW5nIHRoZWlyCisgKiBhY2hpZXZlbWVudHMgKHNwZWNpZmljYXRpb25zIGdpdmVuKS4KKyAqIFNvLCB3ZSBoYXZlIHNtdGggdG8gYmVnaW4gd2l0aC4KKyAqCisgKiBIaXN0b3J5OgorICogVmVyc2lvbiAwLjAxOglGaXJzdCB3b3JraW5nIHZlcnNpb24uCisgKiAJCQlJdCdzIHJlcXVpcmVkIHRvIGJsYWNrbGlzdCBBdmVyTWVkaWEgVVNCIFJhZGlvCisgKiAJCQlpbiB1c2JoaWQvaGlkLXF1aXJrcy5jCisgKgorICogTWFueSB0aGluZ3MgdG8gZG86CisgKiAJLSBDb3JyZWN0IHBvd2VyIG1hbmFnbWVudCBvZiBkZXZpY2UgKHN1c3BlbmQgJiByZXN1bWUpCisgKiAJLSBNYWtlIHg4NiBpbmRlcGVuZGFuY2UgKGxpdHRsZS1lbmRpYW4gYW5kIGJpZy1lbmRpYW4gc3R1ZmYpCisgKiAJLSBBZGQgY29kZSBmb3Igc2Nhbm5pbmcgYW5kIHNtb290aCB0dW5pbmcKKyAqIAktIENoZWNrZWQgYW5kIGFkZCBzdGVyZW8mbW9ubyBzdHVmZgorICogCS0gQWRkIGNvZGUgZm9yIHNlbnNpdGl2aXR5IHZhbHVlCisgKiAJLSBDb3JyZWN0IG1pc3Rha2VzCisgKiAJLSBJbiBKYXBhbiBhbm90aGVyIEZSRVFfTUlOIGFuZCBGUkVRX01BWAorICovCisKKy8qIGtlcm5lbCBpbmNsdWRlcyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CS8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAqLworCisvKiBkcml2ZXIgYW5kIG1vZHVsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBEUklWRVJfQVVUSE9SICJBbGV4ZXkgS2xpbW92IDxrbGltb3YubGludXhAZ21haWwuY29tPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkF2ZXJNZWRpYSBNUiA4MDAgVVNCIEZNIHJhZGlvIGRyaXZlciIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMDEiCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSkKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgVVNCX0FNUkFESU9fVkVORE9SIDB4MDdjYQorI2RlZmluZSBVU0JfQU1SQURJT19QUk9EVUNUIDB4YjgwMAorCisvKiBQcm9iYWJseSBVU0JfVElNRU9VVCBzaG91bGQgYmUgbW9kaWZpZWQgaW4gbW9kdWxlIHBhcmFtZXRlciAqLworI2RlZmluZSBCVUZGRVJfTEVOR1RIIDgKKyNkZWZpbmUgVVNCX1RJTUVPVVQgNTAwCisKKy8qIEZyZXF1ZW5jeSBsaW1pdHMgaW4gTUh6IC0tIHRoZXNlIGFyZSBFdXJvcGVhbiB2YWx1ZXMuICBGb3IgSmFwYW5lc2UKK2RldmljZXMsIHRoYXQgd291bGQgYmUgNzYgYW5kIDkxLiAgKi8KKyNkZWZpbmUgRlJFUV9NSU4gIDg3LjUKKyNkZWZpbmUgRlJFUV9NQVggMTA4LjAKKyNkZWZpbmUgRlJFUV9NVUwgMTYwMDAKKworLyogbW9kdWxlIHBhcmFtZXRlciAqLworc3RhdGljIGludCByYWRpb19uciA9IC0xOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhyYWRpb19uciwgIlJhZGlvIE5yIik7CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAxLAorCQkuc3RlcAkgICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwl9LAorLyogSElOVDogdGhlIGRpc2FibGVkIGNvbnRyb2xzIGFyZSBvbmx5IGhlcmUgdG8gc2F0aWZ5IGtyYWRpbyBhbmQgc3VjaCBhcHBzICovCisJewkuaWQJCT0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAorCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCisJfSwKKwl7CisJCS5pZAkJPSBWNEwyX0NJRF9BVURJT19CQUxBTkNFLAorCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCisJfSwKKwl7CisJCS5pZAkJPSBWNEwyX0NJRF9BVURJT19CQVNTLAorCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCisJfSwKKwl7CisJCS5pZAkJPSBWNEwyX0NJRF9BVURJT19UUkVCTEUsCisJCS5mbGFncwkJPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKKwl9LAorCXsKKwkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX0xPVURORVNTLAorCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCisJfSwKK307CisKK3N0YXRpYyBpbnQgdXNiX2FtcmFkaW9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCB1c2JfYW1yYWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK3N0YXRpYyBpbnQgdXNiX2FtcmFkaW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHVzYl9hbXJhZGlvX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgdXNiX2FtcmFkaW9fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQlwbV9tZXNzYWdlX3QgbWVzc2FnZSk7CitzdGF0aWMgaW50IHVzYl9hbXJhZGlvX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKKy8qIERhdGEgZm9yIG9uZSAocGh5c2ljYWwpIGRldmljZSAqLworc3RydWN0IGFtcmFkaW9fZGV2aWNlIHsKKwkvKiByZWZlcmVuY2UgdG8gVVNCIGFuZCB2aWRlbyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvZGV2OworCisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXN0cnVjdCBtdXRleCBsb2NrOwkvKiBidWZmZXIgbG9ja2luZyAqLworCWludCBjdXJmcmVxOworCWludCBzdGVyZW87CisJaW50IHVzZXJzOworCWludCByZW1vdmVkOworCWludCBtdXRlZDsKK307CisKKy8qIFVTQiBEZXZpY2UgSUQgTGlzdCAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9hbXJhZGlvX2RldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhVU0JfQU1SQURJT19WRU5ET1IsIFVTQl9BTVJBRElPX1BST0RVQ1QsCisJCQkJCQkJVVNCX0NMQVNTX0hJRCwgMCwgMCkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl9hbXJhZGlvX2RldmljZV90YWJsZSk7CisKKy8qIFVTQiBzdWJzeXN0ZW0gaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX2FtcmFkaW9fZHJpdmVyID0geworCS5uYW1lCQkJPSAicmFkaW8tbXI4MDAiLAorCS5wcm9iZQkJCT0gdXNiX2FtcmFkaW9fcHJvYmUsCisJLmRpc2Nvbm5lY3QJCT0gdXNiX2FtcmFkaW9fZGlzY29ubmVjdCwKKwkuc3VzcGVuZAkJPSB1c2JfYW1yYWRpb19zdXNwZW5kLAorCS5yZXN1bWUJCQk9IHVzYl9hbXJhZGlvX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lCQk9IHVzYl9hbXJhZGlvX3Jlc3VtZSwKKwkuaWRfdGFibGUJCT0gdXNiX2FtcmFkaW9fZGV2aWNlX3RhYmxlLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZAk9IDEsCit9OworCisvKiBzd2l0Y2ggb24gcmFkaW8uIFNlbmQgOCBieXRlcyB0byBkZXZpY2UuICovCitzdGF0aWMgaW50IGFtcmFkaW9fc3RhcnQoc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbykKK3sKKwlpbnQgcmV0dmFsOworCWludCBzaXplOworCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOworCisJcmFkaW8tPmJ1ZmZlclswXSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlclsxXSA9IDB4NTU7CisJcmFkaW8tPmJ1ZmZlclsyXSA9IDB4YWE7CisJcmFkaW8tPmJ1ZmZlclszXSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlcls0XSA9IDB4YWI7CisJcmFkaW8tPmJ1ZmZlcls1XSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlcls2XSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlcls3XSA9IDB4MDA7CisKKwlyZXR2YWwgPSB1c2JfYnVsa19tc2cocmFkaW8tPnVzYmRldiwgdXNiX3NuZGludHBpcGUocmFkaW8tPnVzYmRldiwgMiksCisJCSh2b2lkICopIChyYWRpby0+YnVmZmVyKSwgQlVGRkVSX0xFTkdUSCwgJnNpemUsIFVTQl9USU1FT1VUKTsKKworCWlmIChyZXR2YWwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisKKwlyYWRpby0+bXV0ZWQgPSAwOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyogc3dpdGNoIG9mZiByYWRpbyAqLworc3RhdGljIGludCBhbXJhZGlvX3N0b3Aoc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbykKK3sKKwlpbnQgcmV0dmFsOworCWludCBzaXplOworCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOworCisJcmFkaW8tPmJ1ZmZlclswXSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlclsxXSA9IDB4NTU7CisJcmFkaW8tPmJ1ZmZlclsyXSA9IDB4YWE7CisJcmFkaW8tPmJ1ZmZlclszXSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlcls0XSA9IDB4YWI7CisJcmFkaW8tPmJ1ZmZlcls1XSA9IDB4MDE7CisJcmFkaW8tPmJ1ZmZlcls2XSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlcls3XSA9IDB4MDA7CisKKwlyZXR2YWwgPSB1c2JfYnVsa19tc2cocmFkaW8tPnVzYmRldiwgdXNiX3NuZGludHBpcGUocmFkaW8tPnVzYmRldiwgMiksCisJCSh2b2lkICopIChyYWRpby0+YnVmZmVyKSwgQlVGRkVSX0xFTkdUSCwgJnNpemUsIFVTQl9USU1FT1VUKTsKKworCWlmIChyZXR2YWwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisKKwlyYWRpby0+bXV0ZWQgPSAxOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyogc2V0IGEgZnJlcXVlbmN5LCBmcmVxIGlzIGRlZmluZWQgYnkgdjRsJ3MgVFVORVJfTE9XLCBpLmUuIDEvMTZ0aCBrSHogKi8KK3N0YXRpYyBpbnQgYW1yYWRpb19zZXRmcmVxKHN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8sIGludCBmcmVxKQoreworCWludCByZXR2YWw7CisJaW50IHNpemU7CisJdW5zaWduZWQgc2hvcnQgZnJlcV9zZW5kID0gMHgxMyArIChmcmVxID4+IDMpIC8gMjU7CisKKwltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7CisKKwlyYWRpby0+YnVmZmVyWzBdID0gMHgwMDsKKwlyYWRpby0+YnVmZmVyWzFdID0gMHg1NTsKKwlyYWRpby0+YnVmZmVyWzJdID0gMHhhYTsKKwlyYWRpby0+YnVmZmVyWzNdID0gMHgwMzsKKwlyYWRpby0+YnVmZmVyWzRdID0gMHhhNDsKKwlyYWRpby0+YnVmZmVyWzVdID0gMHgwMDsKKwlyYWRpby0+YnVmZmVyWzZdID0gMHgwMDsKKwlyYWRpby0+YnVmZmVyWzddID0gMHgwODsKKworCXJldHZhbCA9IHVzYl9idWxrX21zZyhyYWRpby0+dXNiZGV2LCB1c2Jfc25kaW50cGlwZShyYWRpby0+dXNiZGV2LCAyKSwKKwkJKHZvaWQgKikgKHJhZGlvLT5idWZmZXIpLCBCVUZGRVJfTEVOR1RILCAmc2l6ZSwgVVNCX1RJTUVPVVQpOworCisJaWYgKHJldHZhbCkgeworCQltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBmcmVxdWVuY3kgaXMgY2FsY3VsYXRlZCBmcm9tIGZyZXFfc2VuZCBhbmQgcGxhY2VkIGluIGZpcnN0IDIgYnl0ZXMgKi8KKwlyYWRpby0+YnVmZmVyWzBdID0gKGZyZXFfc2VuZCA+PiA4KSAmIDB4ZmY7CisJcmFkaW8tPmJ1ZmZlclsxXSA9IGZyZXFfc2VuZCAmIDB4ZmY7CisJcmFkaW8tPmJ1ZmZlclsyXSA9IDB4MDE7CisJcmFkaW8tPmJ1ZmZlclszXSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlcls0XSA9IDB4MDA7CisJLyogNSBhbmQgNiBieXRlcyBvZiBidWZmZXIgYWxyZWFkeSA9IDB4MDAgKi8KKwlyYWRpby0+YnVmZmVyWzddID0gMHgwMDsKKworCXJldHZhbCA9IHVzYl9idWxrX21zZyhyYWRpby0+dXNiZGV2LCB1c2Jfc25kaW50cGlwZShyYWRpby0+dXNiZGV2LCAyKSwKKwkJKHZvaWQgKikgKHJhZGlvLT5idWZmZXIpLCBCVUZGRVJfTEVOR1RILCAmc2l6ZSwgVVNCX1RJTUVPVVQpOworCisJaWYgKHJldHZhbCkgeworCQltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKworCXJhZGlvLT5zdGVyZW8gPSAwOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyogVVNCIHN1YnN5c3RlbSBpbnRlcmZhY2UgYmVnaW5zIGhlcmUgKi8KKworLyogaGFuZGxlIHVucGx1Z2dpbmcgb2YgdGhlIGRldmljZSwgcmVsZWFzZSBkYXRhIHN0cnVjdHVyZXMKK2lmIG5vdGhpbmcga2VlcHMgdXMgZnJvbSBkb2luZyBpdC4gIElmIHNvbWV0aGluZyBpcyBzdGlsbAora2VlcGluZyB1cyBidXN5LCB0aGUgcmVsZWFzZSBjYWxsYmFjayBvZiB2NGwgd2lsbCB0YWtlIGNhcmUKK29mIHJlbGVhc2luZyBpdC4gKi8KK3N0YXRpYyB2b2lkIHVzYl9hbXJhZGlvX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCisJaWYgKHJhZGlvKSB7CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2Rldik7CisJCXJhZGlvLT52aWRlb2RldiA9IE5VTEw7CisJCWlmIChyYWRpby0+dXNlcnMpIHsKKwkJCWtmcmVlKHJhZGlvLT5idWZmZXIpOworCQkJa2ZyZWUocmFkaW8pOworCQl9IGVsc2UgeworCQkJcmFkaW8tPnJlbW92ZWQgPSAxOworCQl9CisJfQorfQorCisvKiB2aWRpb2NfcXVlcnljYXAgLSBxdWVyeSBkZXZpY2UgY2FwYWJpbGl0aWVzICovCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKK3sKKwlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLW1yODAwIiwgc2l6ZW9mKHYtPmRyaXZlcikpOworCXN0cmxjcHkodi0+Y2FyZCwgIkF2ZXJNZWRpYSBNUiA4MDAgVVNCIEZNIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKKwlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiVVNCIik7CisJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJcmV0dXJuIDA7Cit9CisKKy8qIHZpZGlvY19nX3R1bmVyIC0gZ2V0IHR1bmVyIGF0dHJpYnV0ZXMgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCit7CisJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJaWYgKHYtPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKy8qIFRPRE86IEFkZCBmdW5jdGlvbiB3aGljaCBsb29rIGlzIHNpZ25hbCBzdGVyZW8gb3Igbm90CisgKiAJYW1yYWRpb19nZXRzdGF0KHJhZGlvKTsKKyAqLworCXJhZGlvLT5zdGVyZW8gPSAtMTsKKwlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJdi0+cmFuZ2Vsb3cgPSBGUkVRX01JTiAqIEZSRVFfTVVMOworCXYtPnJhbmdlaGlnaCA9IEZSRVFfTUFYICogRlJFUV9NVUw7CisJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKKwlpZiAocmFkaW8tPnN0ZXJlbykKKwkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJZWxzZQorCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJdi0+c2lnbmFsID0gMHhmZmZmOyAgICAgLyogQ2FuJ3QgZ2V0IHRoZSBzaWduYWwgc3RyZW5ndGgsIHNhZC4uICovCisJdi0+YWZjID0gMDsgLyogRG9uJ3Qga25vdyB3aGF0IGlzIHRoaXMgKi8KKwlyZXR1cm4gMDsKK30KKworLyogdmlkaW9jX3NfdHVuZXIgLSBzZXQgdHVuZXIgYXR0cmlidXRlcyAqLworc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKK3sKKwlpZiAodi0+aW5kZXggPiAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworLyogdmlkaW9jX3NfZnJlcXVlbmN5IC0gc2V0IHR1bmVyIHJhZGlvIGZyZXF1ZW5jeSAqLworc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKworCXJhZGlvLT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OworCWlmIChhbXJhZGlvX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKSA8IDApCisJCXdhcm4oIlNldCBmcmVxdWVuY3kgZmFpbGVkIik7CisJcmV0dXJuIDA7Cit9CisKKy8qIHZpZGlvY19nX2ZyZXF1ZW5jeSAtIGdldCB0dW5lciByYWRpbyBmcmVxdWVuY3kgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisKKwlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKKwlmLT5mcmVxdWVuY3kgPSByYWRpby0+Y3VyZnJlcTsKKwlyZXR1cm4gMDsKK30KKworLyogdmlkaW9jX3F1ZXJ5Y3RybCAtIGVudW1lcmF0ZSBjb250cm9sIGl0ZW1zICovCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7CisJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7CisJCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAorCQkJCQkJc2l6ZW9mKCpxYykpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIHZpZGlvY19nX2N0cmwgLSBnZXQgdGhlIHZhbHVlIG9mIGEgY29udHJvbCAqLworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJY3RybC0+dmFsdWUgPSByYWRpby0+bXV0ZWQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogdmlkaW9jX3NfY3RybCAtIHNldCB0aGUgdmFsdWUgb2YgYSBjb250cm9sICovCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoY3RybC0+dmFsdWUpIHsKKwkJCWlmIChhbXJhZGlvX3N0b3AocmFkaW8pIDwgMCkgeworCQkJCXdhcm4oImFtcmFkaW9fc3RvcCgpIGZhaWxlZCIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChhbXJhZGlvX3N0YXJ0KHJhZGlvKSA8IDApIHsKKwkJCQl3YXJuKCJhbXJhZGlvX3N0YXJ0KCkgZmFpbGVkIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogdmlkaW9jX2dfYXVkaW8gLSBnZXQgYXVkaW8gYXR0cmlidXRlcyAqLworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlpZiAoYS0+aW5kZXggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXJldHVybiAwOworfQorCisvKiB2aWRpb2Nfc19hdWRpbyAtIHNldCBhdWRpbyBhdHRyaWJ1dGVzICAqLworc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJaWYgKGEtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCisvKiB2aWRpb2NfZ19pbnB1dCAtIGdldCBpbnB1dCAqLworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQoreworCSppID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyogdmlkaW9jX3NfaW5wdXQgLSBzZXQgaW5wdXQgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQoreworCWlmIChpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCisvKiBvcGVuIGRldmljZSAtIGFtcmFkaW9fc3RhcnQoKSBhbmQgYW1yYWRpb19zZXRmcmVxKCkgKi8KK3N0YXRpYyBpbnQgdXNiX2FtcmFkaW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisKKwlyYWRpby0+dXNlcnMgPSAxOworCXJhZGlvLT5tdXRlZCA9IDE7CisKKwlpZiAoYW1yYWRpb19zdGFydChyYWRpbykgPCAwKSB7CisJCXdhcm4oIlJhZGlvIGRpZCBub3Qgc3RhcnQgdXAgcHJvcGVybHkiKTsKKwkJcmFkaW8tPnVzZXJzID0gMDsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChhbXJhZGlvX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKSA8IDApCisJCXdhcm4oIlNldCBmcmVxdWVuY3kgZmFpbGVkIik7CisJcmV0dXJuIDA7Cit9CisKKy8qY2xvc2UgZGV2aWNlIC0gZnJlZSBkcml2ZXIgc3RydWN0dXJlcyAqLworc3RhdGljIGludCB1c2JfYW1yYWRpb19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisKKwlpZiAoIXJhZGlvKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyYWRpby0+dXNlcnMgPSAwOworCWlmIChyYWRpby0+cmVtb3ZlZCkgeworCQlrZnJlZShyYWRpby0+YnVmZmVyKTsKKwkJa2ZyZWUocmFkaW8pOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogU3VzcGVuZCBkZXZpY2UgLSBzdG9wIGRldmljZS4gTmVlZCB0byBiZSBjaGVja2VkIGFuZCBmaXhlZCAqLworc3RhdGljIGludCB1c2JfYW1yYWRpb19zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWlmIChhbXJhZGlvX3N0b3AocmFkaW8pIDwgMCkKKwkJd2FybigiYW1yYWRpb19zdG9wKCkgZmFpbGVkIik7CisKKwlpbmZvKCJyYWRpby1tcjgwMDogR29pbmcgaW50byBzdXNwZW5kLi4iKTsKKworCXJldHVybiAwOworfQorCisvKiBSZXN1bWUgZGV2aWNlIC0gc3RhcnQgZGV2aWNlLiBOZWVkIHRvIGJlIGNoZWNrZWQgYW5kIGZpeGVkICovCitzdGF0aWMgaW50IHVzYl9hbXJhZGlvX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWlmIChhbXJhZGlvX3N0YXJ0KHJhZGlvKSA8IDApCisJCXdhcm4oImFtcmFkaW9fc3RhcnQoKSBmYWlsZWQiKTsKKworCWluZm8oInJhZGlvLW1yODAwOiBDb21pbmcgb3V0IG9mIHN1c3BlbmQuLiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEZpbGUgc3lzdGVtIGludGVyZmFjZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX2FtcmFkaW9fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdXNiX2FtcmFkaW9fb3BlbiwKKwkucmVsZWFzZQk9IHVzYl9hbXJhZGlvX2Nsb3NlLAorCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCisjZW5kaWYKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdXNiX2FtcmFkaW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgICAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19nX3R1bmVyICAgICA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciAgICAgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisJLnZpZGlvY19xdWVyeWN0cmwgICA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwgICAgICA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19nX2F1ZGlvICAgICA9IHZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbyAgICAgPSB2aWRpb2Nfc19hdWRpbywKKwkudmlkaW9jX2dfaW5wdXQgICAgID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAorfTsKKworLyogVjRMMiBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGFtcmFkaW9fdmlkZW9kZXZfdGVtcGxhdGUgPSB7CisJLm5hbWUJCT0gIkF2ZXJNZWRpYSBNUiA4MDAgVVNCIEZNIFJhZGlvIiwKKwkuZm9wcwkJPSAmdXNiX2FtcmFkaW9fZm9wcywKKwkuaW9jdGxfb3BzIAk9ICZ1c2JfYW1yYWRpb19pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKK307CisKKy8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudCBhbmQgcmVnaXN0ZXIgd2l0aCB2NGwgYW5kCit1c2IgaWYgaXQgaXMgKi8KK3N0YXRpYyBpbnQgdXNiX2FtcmFkaW9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW87CisKKwlyYWRpbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbXJhZGlvX2RldmljZSksIEdGUF9LRVJORUwpOworCisJaWYgKCEocmFkaW8pKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJhZGlvLT5idWZmZXIgPSBrbWFsbG9jKEJVRkZFUl9MRU5HVEgsIEdGUF9LRVJORUwpOworCisJaWYgKCEocmFkaW8tPmJ1ZmZlcikpIHsKKwkJa2ZyZWUocmFkaW8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyYWRpby0+dmlkZW9kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKworCWlmICghKHJhZGlvLT52aWRlb2RldikpIHsKKwkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CisJCWtmcmVlKHJhZGlvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5KHJhZGlvLT52aWRlb2RldiwgJmFtcmFkaW9fdmlkZW9kZXZfdGVtcGxhdGUsCisJCXNpemVvZihhbXJhZGlvX3ZpZGVvZGV2X3RlbXBsYXRlKSk7CisKKwlyYWRpby0+cmVtb3ZlZCA9IDA7CisJcmFkaW8tPnVzZXJzID0gMDsKKwlyYWRpby0+dXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlyYWRpby0+Y3VyZnJlcSA9IDk1LjE2ICogRlJFUV9NVUw7CisKKwltdXRleF9pbml0KCZyYWRpby0+bG9jayk7CisKKwl2aWRlb19zZXRfZHJ2ZGF0YShyYWRpby0+dmlkZW9kZXYsIHJhZGlvKTsKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2RldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSkgeworCQl3YXJuKCJDb3VsZCBub3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlIik7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKHJhZGlvLT52aWRlb2Rldik7CisJCWtmcmVlKHJhZGlvLT5idWZmZXIpOworCQlrZnJlZShyYWRpbyk7CisJCXJldHVybiAtRUlPOworCX0KKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgcmFkaW8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhbXJhZGlvX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2JfYW1yYWRpb19kcml2ZXIpOworCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0RFU0MpOworCWlmIChyZXR2YWwpCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYW1yYWRpb19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYl9hbXJhZGlvX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFtcmFkaW9faW5pdCk7Cittb2R1bGVfZXhpdChhbXJhZGlvX2V4aXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCmluZGV4IDZkODIwZTIuLmE2NzA3OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCkBAIC01Miw2ICs1Miw3IEBACiAKIHN0cnVjdCBydF9kZXZpY2UKIHsKKwl1bnNpZ25lZCBsb25nIGluX3VzZTsKIAlpbnQgcG9ydDsKIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7CiAJaW50IG11dGVkOwpAQCAtMTUzLDggKzE1NCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSBkZXYtPnByaXY7CisJc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNzMsOCArMTczLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gZGV2LT5wcml2OworCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXJ0LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwogCXJ0X3NldGZyZXEocnQsIHJ0LT5jdXJmcmVxKTsKQEAgLTE4NCw4ICsxODMsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSBkZXYtPnByaXY7CisJc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gcnQtPmN1cmZyZXE7CkBAIC0yMTAsOCArMjA4LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSBkZXYtPnByaXY7CisJc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTIzMCw4ICsyMjcsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMjg0LDEwICsyODAsMjEgQEAKIAogc3RhdGljIHN0cnVjdCBydF9kZXZpY2UgcnRyYWNrMl91bml0OwogCitzdGF0aWMgaW50IHJ0cmFjazJfZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJnJ0cmFjazJfdW5pdC5pbl91c2UpID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCBydHJhY2syX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWNsZWFyX2JpdCgwLCAmcnRyYWNrMl91bml0LmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0cmFjazJfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gcnRyYWNrMl9leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBydHJhY2syX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC0zMTQsNiArMzIxLDcgQEAKIAkubmFtZQkJPSAiUmFkaW9UcmFjayBJSSByYWRpbyIsCiAJLmZvcHMgICAgICAgICAgID0gJnJ0cmFjazJfZm9wcywKIAkuaW9jdGxfb3BzIAk9ICZydHJhY2syX2lvY3RsX29wcywKKwkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcnRyYWNrMl9pbml0KHZvaWQpCkBAIC0zMjksNyArMzM3LDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlydHJhY2syX3JhZGlvLnByaXY9JnJ0cmFjazJfdW5pdDsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmcnRyYWNrMl9yYWRpbywgJnJ0cmFjazJfdW5pdCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmbG9jayk7CiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmcnRyYWNrMl9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMKaW5kZXggMGQ0NzhmNS4uMzI5YzkwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIAogc3RydWN0IGZtaV9kZXZpY2UKIHsKKwl1bnNpZ25lZCBsb25nIGluX3VzZTsKIAlpbnQgcG9ydDsKIAlpbnQgY3Vydm9sOyAvKiAxIG9yIDAgKi8KIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7IC8qIGZyZXEgaW4ga0h6ICovCkBAIC0xNDYsOCArMTQ3LDcgQEAKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CiAJaW50IG11bHQ7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gZGV2LT5wcml2OworCXN0cnVjdCBmbWlfZGV2aWNlICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNzUsOCArMTc1LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gZGV2LT5wcml2OworCXN0cnVjdCBmbWlfZGV2aWNlICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKCEoZm1pLT5mbGFncyAmIFY0TDJfVFVORVJfQ0FQX0xPVykpCiAJCWYtPmZyZXF1ZW5jeSAqPSAxMDAwOwpAQCAtMTkzLDggKzE5Miw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGZtaV9kZXZpY2UgKmZtaSA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IGZtaS0+Y3VyZnJlcTsKQEAgLTIyMSw4ICsyMTksNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGZtaV9kZXZpY2UgKmZtaSA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0yMzUsOCArMjMyLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBmbWlfZGV2aWNlICpmbWkgPSBkZXYtPnByaXY7CisJc3RydWN0IGZtaV9kZXZpY2UgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMjg0LDEwICsyODAsMjEgQEAKIAogc3RhdGljIHN0cnVjdCBmbWlfZGV2aWNlIGZtaV91bml0OwogCitzdGF0aWMgaW50IGZtaV9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmZm1pX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgZm1pX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWNsZWFyX2JpdCgwLCAmZm1pX3VuaXQuaW5fdXNlKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm1pX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IGZtaV9leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBmbWlfZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKQEAgLTMxNCw2ICszMjEsNyBAQAogCS5uYW1lCQk9ICJTRjE2Rk14IHJhZGlvIiwKIAkuZm9wcyAgICAgICAgICAgPSAmZm1pX2ZvcHMsCiAJLmlvY3RsX29wcyAJPSAmZm1pX2lvY3RsX29wcywKKwkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogLyogbGFkaXM6IHRoaXMgaXMgbXkgY2FyZC4gZG9lcyBhbnkgb3RoZXIgdHlwZXMgZXhpc3Q/ICovCkBAIC0zNzMsNyArMzgxLDcgQEAKIAlmbWlfdW5pdC5jdXJ2b2wgPSAwOwogCWZtaV91bml0LmN1cmZyZXEgPSAwOwogCWZtaV91bml0LmZsYWdzID0gVjRMMl9UVU5FUl9DQVBfTE9XOwotCWZtaV9yYWRpby5wcml2ID0gJmZtaV91bml0OworCXZpZGVvX3NldF9kcnZkYXRhKCZmbWlfcmFkaW8sICZmbWlfdW5pdCk7CiAKIAltdXRleF9pbml0KCZsb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCmluZGV4IDYyOTA1NTMuLmIxZjQ3YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKQEAgLTY0LDYgKzY0LDcgQEAKIC8qIHRoaXMgc2hvdWxkIGJlIHN0YXRpYyB2YXJzIGZvciBtb2R1bGUgc2l6ZSAqLwogc3RydWN0IGZtcjJfZGV2aWNlCiB7CisJdW5zaWduZWQgbG9uZyBpbl91c2U7CiAJaW50IHBvcnQ7CiAJaW50IGN1cnZvbDsgLyogMC0xNSAqLwogCWludCBtdXRlOwpAQCAtMjI5LDggKzIzMCw3IEBACiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewogCWludCBtdWx0OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gZGV2LT5wcml2OworCXN0cnVjdCBmbXIyX2RldmljZSAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI2Miw4ICsyNjIsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBmbXIyX2RldmljZSAqZm1yMiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgZm1yMl9kZXZpY2UgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKCEoZm1yMi0+ZmxhZ3MgJiBWNEwyX1RVTkVSX0NBUF9MT1cpKQogCQlmLT5mcmVxdWVuY3kgKj0gMTAwMDsKQEAgLTI4Niw4ICsyODUsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBmbXIyX2RldmljZSAqZm1yMiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgZm1yMl9kZXZpY2UgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gZm1yMi0+Y3VyZnJlcTsKQEAgLTMxMyw4ICszMTEsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gZGV2LT5wcml2OworCXN0cnVjdCBmbXIyX2RldmljZSAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzMwLDggKzMyNyw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgZm1yMl9kZXZpY2UgKmZtcjIgPSBkZXYtPnByaXY7CisJc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC00MDAsMTAgKzM5NiwyMSBAQAogCiBzdGF0aWMgc3RydWN0IGZtcjJfZGV2aWNlIGZtcjJfdW5pdDsKIAorc3RhdGljIGludCBmbXIyX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZmbXIyX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgZm1yMl9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJmZtcjJfdW5pdC5pbl91c2UpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmbXIyX2ZvcHMgPSB7CiAJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gZm1yMl9leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBmbXIyX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bCAgICAgICAgICA9IHZpZGVvX2lvY3RsMiwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKQEAgLTQzMCw2ICs0MzcsNyBAQAogCS5uYW1lCQk9ICJTRjE2Rk1SMiByYWRpbyIsCiAJLmZvcHMJCT0gJmZtcjJfZm9wcywKIAkuaW9jdGxfb3BzIAk9ICZmbXIyX2lvY3RsX29wcywKKwkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZm1yMl9pbml0KHZvaWQpCkBAIC00NDEsNyArNDQ5LDcgQEAKIAlmbXIyX3VuaXQuc3RlcmVvID0gMTsKIAlmbXIyX3VuaXQuZmxhZ3MgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAJZm1yMl91bml0LmNhcmRfdHlwZSA9IDA7Ci0JZm1yMl9yYWRpby5wcml2ID0gJmZtcjJfdW5pdDsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZm1yMl9yYWRpbywgJmZtcjJfdW5pdCk7CiAKIAltdXRleF9pbml0KCZsb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMKaW5kZXggMTZjN2VmMi4uNTkyMGNkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCkBAIC0xMDQsNiArMTA0LDcgQEAKICAqCQktIGhhcmR3YXJlIGZyZXF1ZW5jeSBzZWVrIHN1cHBvcnQKICAqCQktIGFmYyBpbmRpY2F0aW9uCiAgKgkJLSBtb3JlIHNhZmV0eSBjaGVja3MsIGxldCBzaTQ3MHhfZ2V0X2ZyZXEgcmV0dXJuIGVycm5vCisgKgkJLSB2aWRpb2MgYmVoYXZpb3IgY29ycmVjdGVkIGFjY29yZGluZyB0byB2NGwyIHNwZWMKICAqCiAgKiBUb0RvOgogICogLSBhZGQgZmlybXdhcmUgZG93bmxvYWQvdXBkYXRlIHN1cHBvcnQKQEAgLTE0MSw5ICsxNDIsOSBAQAogLyogVVNCIERldmljZSBJRCBMaXN0ICovCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2k0NzB4X3VzYl9kcml2ZXJfaWRfdGFibGVbXSA9IHsKIAkvKiBTaWxpY29uIExhYnMgVVNCIEZNIFJhZGlvIFJlZmVyZW5jZSBEZXNpZ24gKi8KLQl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MTBjNCwgMHg4MThhLAlVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgxMGM0LCAweDgxOGEsIFVTQl9DTEFTU19ISUQsIDAsIDApIH0sCiAJLyogQURTL1RlY2ggRk0gUmFkaW8gUmVjZWl2ZXIgKGZvcm1lcmx5IEluc3RhbnQgRk0gTXVzaWMpICovCi0JeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDA2ZTEsIDB4YTE1NSwJVVNCX0NMQVNTX0hJRCwgMCwgMCkgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MDZlMSwgMHhhMTU1LCBVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAogCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiAJeyB9CiB9OwpAQCAtMTU3LDcgKzE1OCw3IEBACiAKIC8qIFJhZGlvIE5yICovCiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJhZGlvX25yLCAiUmFkaW8gTnIiKTsKIAogLyogU3BhY2luZyAoa0h6KSAqLwpAQCAtMTY1LDQyICsxNjYsNDIgQEAKIC8qIDE6IDEwMCBrSHogKEV1cm9wZSwgSmFwYW4pICovCiAvKiAyOiAgNTAga0h6ICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc3BhY2UgPSAyOwotbW9kdWxlX3BhcmFtKHNwYWNlLCB1c2hvcnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhyYWRpb19uciwgIlNwYWNpbmc6IDA9MjAwa0h6IDE9MTAwa0h6ICoyPTUwa0h6KiIpOworbW9kdWxlX3BhcmFtKHNwYWNlLCB1c2hvcnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzcGFjZSwgIlNwYWNpbmc6IDA9MjAwa0h6IDE9MTAwa0h6ICoyPTUwa0h6KiIpOwogCiAvKiBCb3R0b20gb2YgQmFuZCAoTUh6KSAqLwogLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlKSovCiAvKiAxOiA3NiAgIC0gMTA4IE1IeiAoSmFwYW4gd2lkZSBiYW5kKSAqLwogLyogMjogNzYgICAtICA5MCBNSHogKEphcGFuKSAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IGJhbmQgPSAxOwotbW9kdWxlX3BhcmFtKGJhbmQsIHVzaG9ydCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJhZGlvX25yLCAiQmFuZDogMD04Ny41Li4xMDhNSHogKjE9NzYuLjEwOE1IeiogMj03Ni4uOTBNSHoiKTsKK21vZHVsZV9wYXJhbShiYW5kLCB1c2hvcnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhiYW5kLCAiQmFuZDogMD04Ny41Li4xMDhNSHogKjE9NzYuLjEwOE1IeiogMj03Ni4uOTBNSHoiKTsKIAogLyogRGUtZW1waGFzaXMgKi8KIC8qIDA6IDc1IHVzIChVU0EpICovCiAvKiAxOiA1MCB1cyAoRXVyb3BlLCBBdXN0cmFsaWEsIEphcGFuKSAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlID0gMTsKLW1vZHVsZV9wYXJhbShkZSwgdXNob3J0LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJEZS1lbXBoYXNpczogMD03NXVzICoxPTUwdXMqIik7Cittb2R1bGVfcGFyYW0oZGUsIHVzaG9ydCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlLCAiRGUtZW1waGFzaXM6IDA9NzV1cyAqMT01MHVzKiIpOwogCiAvKiBVU0IgdGltZW91dCAqLwogc3RhdGljIHVuc2lnbmVkIGludCB1c2JfdGltZW91dCA9IDUwMDsKLW1vZHVsZV9wYXJhbSh1c2JfdGltZW91dCwgdWludCwgMCk7Cittb2R1bGVfcGFyYW0odXNiX3RpbWVvdXQsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh1c2JfdGltZW91dCwgIlVTQiB0aW1lb3V0IChtcyk6ICo1MDAqIik7CiAKIC8qIFR1bmUgdGltZW91dCAqLwogc3RhdGljIHVuc2lnbmVkIGludCB0dW5lX3RpbWVvdXQgPSAzMDAwOwotbW9kdWxlX3BhcmFtKHR1bmVfdGltZW91dCwgdWludCwgMCk7Cittb2R1bGVfcGFyYW0odHVuZV90aW1lb3V0LCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModHVuZV90aW1lb3V0LCAiVHVuZSB0aW1lb3V0OiAqMzAwMCoiKTsKIAogLyogU2VlayB0aW1lb3V0ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHNlZWtfdGltZW91dCA9IDUwMDA7Ci1tb2R1bGVfcGFyYW0oc2Vla190aW1lb3V0LCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbShzZWVrX3RpbWVvdXQsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhzZWVrX3RpbWVvdXQsICJTZWVrIHRpbWVvdXQ6ICo1MDAwKiIpOwogCiAvKiBSRFMgYnVmZmVyIGJsb2NrcyAqLwogc3RhdGljIHVuc2lnbmVkIGludCByZHNfYnVmID0gMTAwOwotbW9kdWxlX3BhcmFtKHJkc19idWYsIHVpbnQsIDApOworbW9kdWxlX3BhcmFtKHJkc19idWYsIHVpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZHNfYnVmLCAiUkRTIGJ1ZmZlciBlbnRyaWVzOiAqMTAwKiIpOwogCiAvKiBSRFMgbWF4aW11bSBibG9jayBlcnJvcnMgKi8KQEAgLTIwOSw3ICsyMTAsNyBAQAogLyogMSBtZWFucyAxLTIgIGVycm9ycyByZXF1aXJpbmcgY29ycmVjdGlvbiAodXNlZCBieSBvcmlnaW5hbCBVU0JSYWRpby5leGUpICovCiAvKiAyIG1lYW5zIDMtNSAgZXJyb3JzIHJlcXVpcmluZyBjb3JyZWN0aW9uICovCiAvKiAzIG1lYW5zICAgNisgZXJyb3JzIG9yIGVycm9ycyBpbiBjaGVja3dvcmQsIGNvcnJlY3Rpb24gbm90IHBvc3NpYmxlICovCi1tb2R1bGVfcGFyYW0obWF4X3Jkc19lcnJvcnMsIHVzaG9ydCwgMCk7Cittb2R1bGVfcGFyYW0obWF4X3Jkc19lcnJvcnMsIHVzaG9ydCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9yZHNfZXJyb3JzLCAiUkRTIG1heGltdW0gYmxvY2sgZXJyb3JzOiAqMSoiKTsKIAogLyogUkRTIHBvbGwgZnJlcXVlbmN5ICovCkBAIC0yMTgsNyArMjE5LDcgQEAKIC8qIDUwIGlzIHVzZWQgYnkgcmFkaW8tY2FkZXQgKi8KIC8qIDc1IHNob3VsZCBiZSBva2F5ICovCiAvKiA4MCBpcyB0aGUgdXN1YWwgUkRTIHJlY2VpdmUgaW50ZXJ2YWwgKi8KLW1vZHVsZV9wYXJhbShyZHNfcG9sbF90aW1lLCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbShyZHNfcG9sbF90aW1lLCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmRzX3BvbGxfdGltZSwgIlJEUyBwb2xsIHRpbWUgKG1zKTogKjQwKiIpOwogCiAKQEAgLTY2NywyMyArNjY4LDI5IEBACiAJaW50IHJldHZhbDsKIAogCS8qIFNwYWNpbmcgKGtIeikgKi8KLQlzd2l0Y2ggKHNwYWNlKSB7CisJc3dpdGNoICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSAmIFNZU0NPTkZJRzJfU1BBQ0UpID4+IDQpIHsKIAkvKiAwOiAyMDAga0h6IChVU0EsIEF1c3RyYWxpYSkgKi8KLQljYXNlIDAgOiBzcGFjaW5nID0gMC4yMDAgKiBGUkVRX01VTDsgYnJlYWs7CisJY2FzZSAwOgorCQlzcGFjaW5nID0gMC4yMDAgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMTogMTAwIGtIeiAoRXVyb3BlLCBKYXBhbikgKi8KLQljYXNlIDEgOiBzcGFjaW5nID0gMC4xMDAgKiBGUkVRX01VTDsgYnJlYWs7CisJY2FzZSAxOgorCQlzcGFjaW5nID0gMC4xMDAgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMjogIDUwIGtIeiAqLwotCWRlZmF1bHQ6IHNwYWNpbmcgPSAwLjA1MCAqIEZSRVFfTVVMOyBicmVhazsKKwlkZWZhdWx0OgorCQlzcGFjaW5nID0gMC4wNTAgKiBGUkVRX01VTDsgYnJlYWs7CiAJfTsKIAogCS8qIEJvdHRvbSBvZiBCYW5kIChNSHopICovCi0Jc3dpdGNoIChiYW5kKSB7CisJc3dpdGNoICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSAmIFNZU0NPTkZJRzJfQkFORCkgPj4gNikgewogCS8qIDA6IDg3LjUgLSAxMDggTUh6IChVU0EsIEV1cm9wZSkgKi8KLQljYXNlIDAgOiBiYW5kX2JvdHRvbSA9IDg3LjUgKiBGUkVRX01VTDsgYnJlYWs7CisJY2FzZSAwOgorCQliYW5kX2JvdHRvbSA9IDg3LjUgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMTogNzYgICAtIDEwOCBNSHogKEphcGFuIHdpZGUgYmFuZCkgKi8KLQlkZWZhdWx0OiBiYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CisJZGVmYXVsdDoKKwkJYmFuZF9ib3R0b20gPSA3NiAgICogRlJFUV9NVUw7IGJyZWFrOwogCS8qIDI6IDc2ICAgLSAgOTAgTUh6IChKYXBhbikgKi8KLQljYXNlIDIgOiBiYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CisJY2FzZSAyOgorCQliYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CiAJfTsKIAogCS8qIHJlYWQgY2hhbm5lbCAqLwpAQCAtNzA2LDIzICs3MTMsMjkgQEAKIAl1bnNpZ25lZCBzaG9ydCBjaGFuOwogCiAJLyogU3BhY2luZyAoa0h6KSAqLwotCXN3aXRjaCAoc3BhY2UpIHsKKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9TUEFDRSkgPj4gNCkgewogCS8qIDA6IDIwMCBrSHogKFVTQSwgQXVzdHJhbGlhKSAqLwotCWNhc2UgMCA6IHNwYWNpbmcgPSAwLjIwMCAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDA6CisJCXNwYWNpbmcgPSAwLjIwMCAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAxOiAxMDAga0h6IChFdXJvcGUsIEphcGFuKSAqLwotCWNhc2UgMSA6IHNwYWNpbmcgPSAwLjEwMCAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDE6CisJCXNwYWNpbmcgPSAwLjEwMCAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAyOiAgNTAga0h6ICovCi0JZGVmYXVsdDogc3BhY2luZyA9IDAuMDUwICogRlJFUV9NVUw7IGJyZWFrOworCWRlZmF1bHQ6CisJCXNwYWNpbmcgPSAwLjA1MCAqIEZSRVFfTVVMOyBicmVhazsKIAl9OwogCiAJLyogQm90dG9tIG9mIEJhbmQgKE1IeikgKi8KLQlzd2l0Y2ggKGJhbmQpIHsKKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9CQU5EKSA+PiA2KSB7CiAJLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlKSAqLwotCWNhc2UgMCA6IGJhbmRfYm90dG9tID0gODcuNSAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDA6CisJCWJhbmRfYm90dG9tID0gODcuNSAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAxOiA3NiAgIC0gMTA4IE1IeiAoSmFwYW4gd2lkZSBiYW5kKSAqLwotCWRlZmF1bHQ6IGJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKKwlkZWZhdWx0OgorCQliYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMjogNzYgICAtICA5MCBNSHogKEphcGFuKSAqLwotCWNhc2UgMiA6IGJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDI6CisJCWJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKIAl9OwogCiAJLyogQ2hhbiA9IFsgRnJlcSAoTWh6KSAtIEJvdHRvbSBvZiBCYW5kIChNSHopIF0gLyBTcGFjaW5nIChrSHopICovCkBAIC05ODYsNyArOTk5LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHNpNDcweF9mb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IHJldHZhbCA9IDA7CiAJdW5zaWduZWQgaW50IGJsb2NrX2NvdW50ID0gMDsKIApAQCAtMTA0Nyw3ICsxMDYwLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2k0NzB4X2ZvcHNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwdHMpCiB7Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0dmFsID0gMDsKIAogCS8qIHN3aXRjaCBvbiByZHMgcmVjZXB0aW9uICovCkBAIC0xMDcxLDkgKzEwODQsMTAgQEAKICAqLwogc3RhdGljIGludCBzaTQ3MHhfZm9wc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IHJldHZhbDsKIAorCWxvY2tfa2VybmVsKCk7CiAJcmFkaW8tPnVzZXJzKys7CiAKIAlyZXR2YWwgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UocmFkaW8tPmludGYpOwpAQCAtMTA5MCw2ICsxMTA0LDcgQEAKIAl9CiAKIGRvbmU6CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTEwOTksNyArMTExNCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc2k0NzB4X2ZvcHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXR2YWwgPSAwOwogCiAJLyogc2FmZXR5IGNoZWNrICovCkBAIC0xMTYyLDcgKzExNzcsNiBAQAogICogc2k0NzB4X3Y0bDJfcXVlcnljdHJsIC0gcXVlcnkgY29udHJvbAogICovCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHNpNDcweF92NGwyX3F1ZXJ5Y3RybFtdID0gewotLyogSElOVDogdGhlIGRpc2FibGVkIGNvbnRyb2xzIGFyZSBvbmx5IGhlcmUgdG8gc2F0aWZ5IGtyYWRpbyBhbmQgc3VjaCBhcHBzICovCiAJewogCQkuaWQJCT0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAogCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApAQCAtMTE3MywxOCArMTE4Nyw2IEBACiAJCS5kZWZhdWx0X3ZhbHVlCT0gMTUsCiAJfSwKIAl7Ci0JCS5pZAkJPSBWNEwyX0NJRF9BVURJT19CQUxBTkNFLAotCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCi0JfSwKLQl7Ci0JCS5pZAkJPSBWNEwyX0NJRF9BVURJT19CQVNTLAotCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCi0JfSwKLQl7Ci0JCS5pZAkJPSBWNEwyX0NJRF9BVURJT19UUkVCTEUsCi0JCS5mbGFncwkJPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKLQl9LAotCXsKIAkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX01VVEUsCiAJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCiAJCS5uYW1lCQk9ICJNdXRlIiwKQEAgLTExOTMsMTAgKzExOTUsNiBAQAogCQkuc3RlcAkJPSAxLAogCQkuZGVmYXVsdF92YWx1ZQk9IDEsCiAJfSwKLQl7Ci0JCS5pZAkJPSBWNEwyX0NJRF9BVURJT19MT1VETkVTUywKLQkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAotCX0sCiB9OwogCiAKQEAgLTEyMTgsNTYgKzEyMTYsMzQgQEAKIAogCiAvKgotICogc2k0NzB4X3ZpZGlvY19nX2lucHV0IC0gZ2V0IGlucHV0Ci0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQl1bnNpZ25lZCBpbnQgKmkpCi17Ci0JKmkgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF92aWRpb2Nfc19pbnB1dCAtIHNldCBpbnB1dAotICovCi1zdGF0aWMgaW50IHNpNDcweF92aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkvKiBzYWZldHkgY2hlY2tzICovCi0JaWYgKGkgIT0gMCkKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQotCWlmIChyZXR2YWwgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCi0JCQkiOiBzZXQgaW5wdXQgZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi0vKgogICogc2k0NzB4X3ZpZGlvY19xdWVyeWN0cmwgLSBlbnVtZXJhdGUgY29udHJvbCBpdGVtcwogICovCiBzdGF0aWMgaW50IHNpNDcweF92aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCXVuc2lnbmVkIGNoYXIgaTsKKwl1bnNpZ25lZCBjaGFyIGkgPSAwOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCi0JLyogc2FmZXR5IGNoZWNrcyAqLwotCWlmICghcWMtPmlkKQorCS8qIGFib3J0IGlmIHFjLT5pZCBpcyBiZWxvdyBWNEwyX0NJRF9CQVNFICovCisJaWYgKHFjLT5pZCA8IFY0TDJfQ0lEX0JBU0UpCiAJCWdvdG8gZG9uZTsKIAorCS8qIHNlYXJjaCB2aWRlbyBjb250cm9sICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2k0NzB4X3Y0bDJfcXVlcnljdHJsKTsgaSsrKSB7CiAJCWlmIChxYy0+aWQgPT0gc2k0NzB4X3Y0bDJfcXVlcnljdHJsW2ldLmlkKSB7CiAJCQltZW1jcHkocWMsICYoc2k0NzB4X3Y0bDJfcXVlcnljdHJsW2ldKSwgc2l6ZW9mKCpxYykpOwotCQkJcmV0dmFsID0gMDsKKwkJCXJldHZhbCA9IDA7IC8qIGZvdW5kICovCiAJCQlicmVhazsKIAkJfQogCX0KIAorCS8qIGRpc2FibGUgdW5zdXBwb3J0ZWQgYmFzZSBjb250cm9scyAqLworCS8qIHRvIHNhdGlzZnkga3JhZGlvIGFuZCBzdWNoIGFwcHMgKi8KKwlpZiAoKHJldHZhbCA9PSAtRUlOVkFMKSAmJiAocWMtPmlkIDwgVjRMMl9DSURfTEFTVFAxKSkgeworCQlxYy0+ZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRDsKKwkJcmV0dmFsID0gMDsKKwl9CisKIGRvbmU6CiAJaWYgKHJldHZhbCA8IDApCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKQEAgLTEyODIsNyArMTI1OCw3IEBACiBzdGF0aWMgaW50IHNpNDcweF92aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IHJldHZhbCA9IDA7CiAKIAkvKiBzYWZldHkgY2hlY2tzICovCkBAIC0xMzE4LDcgKzEyOTQsNyBAQAogc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXR2YWwgPSAwOwogCiAJLyogc2FmZXR5IGNoZWNrcyAqLwpAQCAtMTM1OCw0NCArMTMzNCwxMyBAQAogc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKIHsKLQlpbnQgcmV0dmFsID0gMDsKLQotCS8qIHNhZmV0eSBjaGVja3MgKi8KLQlpZiAoYXVkaW8tPmluZGV4ICE9IDApIHsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJZ290byBkb25lOwotCX0KLQorCS8qIGRyaXZlciBjb25zdGFudHMgKi8KKwlhdWRpby0+aW5kZXggPSAwOwogCXN0cmNweShhdWRpby0+bmFtZSwgIlJhZGlvIik7CiAJYXVkaW8tPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJYXVkaW8tPm1vZGUgPSAwOwogCi1kb25lOgotCWlmIChyZXR2YWwgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCi0JCQkiOiBnZXQgYXVkaW8gZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotCi0vKgotICogc2k0NzB4X3ZpZGlvY19zX2F1ZGlvIC0gc2V0IGF1ZGlvIGF0dHJpYnV0ZXMKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCXN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQotCS8qIHNhZmV0eSBjaGVja3MgKi8KLQlpZiAoYXVkaW8tPmluZGV4ICE9IDApIHsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJZ290byBkb25lOwotCX0KLQotZG9uZToKLQlpZiAocmV0dmFsIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkJIjogc2V0IGF1ZGlvIGZhaWxlZCB3aXRoICVkXG4iLCByZXR2YWwpOwotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTQwNSw3ICsxMzUwLDcgQEAKIHN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl90dW5lciAqdHVuZXIpCiB7Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0dmFsID0gMDsKIAogCS8qIHNhZmV0eSBjaGVja3MgKi8KQEAgLTE0MTMsNyArMTM1OCw3IEBACiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKCh0dW5lci0+aW5kZXggIT0gMCkgJiYgKHR1bmVyLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pKSB7CisJaWYgKHR1bmVyLT5pbmRleCAhPSAwKSB7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xNDIyLDggKzEzNjcsMTMgQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBkb25lOwogCisJLyogZHJpdmVyIGNvbnN0YW50cyAqLwogCXN0cmNweSh0dW5lci0+bmFtZSwgIkZNIik7Ci0Jc3dpdGNoIChiYW5kKSB7CisJdHVuZXItPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCXR1bmVyLT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XIHwgVjRMMl9UVU5FUl9DQVBfU1RFUkVPOworCisJLyogcmFuZ2UgbGltaXRzICovCisJc3dpdGNoICgocmFkaW8tPnJlZ2lzdGVyc1tTWVNDT05GSUcyXSAmIFNZU0NPTkZJRzJfQkFORCkgPj4gNikgewogCS8qIDA6IDg3LjUgLSAxMDggTUh6IChVU0EsIEV1cm9wZSwgZGVmYXVsdCkgKi8KIAlkZWZhdWx0OgogCQl0dW5lci0+cmFuZ2Vsb3cgID0gIDg3LjUgKiBGUkVRX01VTDsKQEAgLTE0NDAsMTQgKzEzOTAsMTggQEAKIAkJdHVuZXItPnJhbmdlaGlnaCA9ICA5MCAgICogRlJFUV9NVUw7CiAJCWJyZWFrOwogCX07Ci0JdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCXR1bmVyLT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwogCi0JLyogU3RlcmVvIGluZGljYXRvciA9PSBTdGVyZW8gKGluc3RlYWQgb2YgTW9ubykgKi8KKwkvKiBzdGVyZW8gaW5kaWNhdG9yID09IHN0ZXJlbyAoaW5zdGVhZCBvZiBtb25vKSAqLwogCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfU1QpID09IDEpCi0JCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwkJdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCWVsc2UKKwkJdHVuZXItPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCisJLyogbW9uby9zdGVyZW8gc2VsZWN0b3IgKi8KKwlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICYgUE9XRVJDRkdfTU9OTykgPT0gMSkKIAkJdHVuZXItPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwllbHNlCisJCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAogCS8qIG1pbiBpcyB3b3JzdCwgbWF4IGlzIGJlc3Q7IHNpZ25hbDowLi4weGZmZmY7IHJzc2k6IDAuLjB4ZmYgKi8KIAl0dW5lci0+c2lnbmFsID0gKHJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSV0gJiBTVEFUVVNSU1NJX1JTU0kpCkBAIC0xNDcxLDI0ICsxNDI1LDI5IEBACiBzdGF0aWMgaW50IHNpNDcweF92aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnR1bmVyKQogewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOwotCWludCByZXR2YWwgPSAwOworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAKIAkvKiBzYWZldHkgY2hlY2tzICovCiAJaWYgKHJhZGlvLT5kaXNjb25uZWN0ZWQpIHsKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoKHR1bmVyLT5pbmRleCAhPSAwKSAmJiAodHVuZXItPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykpIHsKLQkJcmV0dmFsID0gLUVJTlZBTDsKKwlpZiAodHVuZXItPmluZGV4ICE9IDApCisJCWdvdG8gZG9uZTsKKworCS8qIG1vbm8vc3RlcmVvIHNlbGVjdG9yICovCisJc3dpdGNoICh0dW5lci0+YXVkbW9kZSkgeworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CisJCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddIHw9IFBPV0VSQ0ZHX01PTk87ICAvKiBmb3JjZSBtb25vICovCisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJj0gflBPV0VSQ0ZHX01PTk87IC8qIHRyeSBzdGVyZW8gKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJZ290byBkb25lOwogCX0KIAotCWlmICh0dW5lci0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfTU9OTykKLQkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gfD0gUE9XRVJDRkdfTU9OTzsgIC8qIGZvcmNlIG1vbm8gKi8KLQllbHNlCi0JCXJhZGlvLT5yZWdpc3RlcnNbUE9XRVJDRkddICY9IH5QT1dFUkNGR19NT05POyAvKiB0cnkgc3RlcmVvICovCi0KIAlyZXR2YWwgPSBzaTQ3MHhfc2V0X3JlZ2lzdGVyKHJhZGlvLCBQT1dFUkNGRyk7CiAKIGRvbmU6CkBAIC0xNTA1LDcgKzE0NjQsNyBAQAogc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmZyZXEpCiB7Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0dmFsID0gMDsKIAogCS8qIHNhZmV0eSBjaGVja3MgKi8KQEAgLTE1MTMsMTEgKzE0NzIsMTIgQEAKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoKGZyZXEtPnR1bmVyICE9IDApICYmIChmcmVxLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pKSB7CisJaWYgKGZyZXEtPnR1bmVyICE9IDApIHsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KIAorCWZyZXEtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCXJldHZhbCA9IHNpNDcweF9nZXRfZnJlcShyYWRpbywgJmZyZXEtPmZyZXF1ZW5jeSk7CiAKIGRvbmU6CkBAIC0xNTM0LDcgKzE0OTQsNyBAQAogc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmZyZXEpCiB7Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0dmFsID0gMDsKIAogCS8qIHNhZmV0eSBjaGVja3MgKi8KQEAgLTE1NDIsNyArMTUwMiw3IEBACiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKChmcmVxLT50dW5lciAhPSAwKSAmJiAoZnJlcS0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKSkgeworCWlmIChmcmVxLT50dW5lciAhPSAwKSB7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xNTYzLDcgKzE1MjMsNyBAQAogc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX3NfaHdfZnJlcV9zZWVrKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWsgKnNlZWspCiB7Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0dmFsID0gMDsKIAogCS8qIHNhZmV0eSBjaGVja3MgKi8KQEAgLTE1NzEsNyArMTUzMSw3IEBACiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9Ci0JaWYgKChzZWVrLT50dW5lciAhPSAwKSAmJiAoc2Vlay0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKSkgeworCWlmIChzZWVrLT50dW5lciAhPSAwKSB7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xNTg2LDE1ICsxNTQ2LDE2IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorCisvKgorICogc2k0NzB4X2lvY3RsX29wcyAtIHZpZGVvIGRldmljZSBpb2N0bCBvcGVyYXRpb25zCisgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgc2k0NzB4X2lvY3RsX29wcyA9IHsKIAkudmlkaW9jX3F1ZXJ5Y2FwCT0gc2k0NzB4X3ZpZGlvY19xdWVyeWNhcCwKLQkudmlkaW9jX2dfaW5wdXQJCT0gc2k0NzB4X3ZpZGlvY19nX2lucHV0LAotCS52aWRpb2Nfc19pbnB1dAkJPSBzaTQ3MHhfdmlkaW9jX3NfaW5wdXQsCiAJLnZpZGlvY19xdWVyeWN0cmwJPSBzaTQ3MHhfdmlkaW9jX3F1ZXJ5Y3RybCwKIAkudmlkaW9jX2dfY3RybAkJPSBzaTQ3MHhfdmlkaW9jX2dfY3RybCwKIAkudmlkaW9jX3NfY3RybAkJPSBzaTQ3MHhfdmlkaW9jX3NfY3RybCwKIAkudmlkaW9jX2dfYXVkaW8JCT0gc2k0NzB4X3ZpZGlvY19nX2F1ZGlvLAotCS52aWRpb2Nfc19hdWRpbwkJPSBzaTQ3MHhfdmlkaW9jX3NfYXVkaW8sCiAJLnZpZGlvY19nX3R1bmVyCQk9IHNpNDcweF92aWRpb2NfZ190dW5lciwKIAkudmlkaW9jX3NfdHVuZXIJCT0gc2k0NzB4X3ZpZGlvY19zX3R1bmVyLAogCS52aWRpb2NfZ19mcmVxdWVuY3kJPSBzaTQ3MHhfdmlkaW9jX2dfZnJlcXVlbmN5LApAQCAtMTYwMiwxNCArMTU2MywxNSBAQAogCS52aWRpb2Nfc19od19mcmVxX3NlZWsJPSBzaTQ3MHhfdmlkaW9jX3NfaHdfZnJlcV9zZWVrLAogfTsKIAorCiAvKgotICogc2k0NzB4X3ZpZGRldl90YW1wbGVzIC0gdmlkZW8gZGV2aWNlIGludGVyZmFjZQorICogc2k0NzB4X3ZpZGRldl90ZW1wbGF0ZSAtIHZpZGVvIGRldmljZSBpbnRlcmZhY2UKICAqLwogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc2k0NzB4X3ZpZGRldl90ZW1wbGF0ZSA9IHsKIAkuZm9wcwkJCT0gJnNpNDcweF9mb3BzLAotCS5pb2N0bF9vcHMgCQk9ICZzaTQ3MHhfaW9jdGxfb3BzLAogCS5uYW1lCQkJPSBEUklWRVJfTkFNRSwKIAkucmVsZWFzZQkJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKKwkuaW9jdGxfb3BzCQk9ICZzaTQ3MHhfaW9jdGxfb3BzLAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMKaW5kZXggMDg3NmZlYy4uMGFiYjE4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZXJyYXRlYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYwpAQCAtNzksNiArNzksNyBAQAogCiBzdHJ1Y3QgdHRfZGV2aWNlCiB7CisJdW5zaWduZWQgbG9uZyBpbl91c2U7CiAJaW50IHBvcnQ7CiAJaW50IGN1cnZvbDsKIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7CkBAIC0yMjAsOCArMjIxLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHR0X2RldmljZSAqdHQgPSBkZXYtPnByaXY7CisJc3RydWN0IHR0X2RldmljZSAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNDgsOCArMjQ4LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAl0dC0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKIAl0dF9zZXRmcmVxKHR0LCB0dC0+Y3VyZnJlcSk7CkBAIC0yNTksOCArMjU4LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSB0dC0+Y3VyZnJlcTsKQEAgLTI4NSw4ICsyODMsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHR0X2RldmljZSAqdHQgPSBkZXYtPnByaXY7CisJc3RydWN0IHR0X2RldmljZSAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTMwNSw4ICszMDIsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHR0X2RldmljZSAqdHQgPSBkZXYtPnByaXY7CisJc3RydWN0IHR0X2RldmljZSAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTM1NiwxMCArMzUyLDIxIEBACiAKIHN0YXRpYyBzdHJ1Y3QgdHRfZGV2aWNlIHRlcnJhdGVjX3VuaXQ7CiAKK3N0YXRpYyBpbnQgdGVycmF0ZWNfZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJnRlcnJhdGVjX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdGVycmF0ZWNfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJY2xlYXJfYml0KDAsICZ0ZXJyYXRlY191bml0LmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRlcnJhdGVjX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHRlcnJhdGVjX2V4Y2x1c2l2ZV9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHRlcnJhdGVjX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC0zODYsNiArMzkzLDcgQEAKIAkubmFtZQkJPSAiVGVycmFUZWMgQWN0aXZlUmFkaW8iLAogCS5mb3BzICAgICAgICAgICA9ICZ0ZXJyYXRlY19mb3BzLAogCS5pb2N0bF9vcHMgCT0gJnRlcnJhdGVjX2lvY3RsX29wcywKKwkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdGVycmF0ZWNfaW5pdCh2b2lkKQpAQCAtNDAxLDcgKzQwOSw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JdGVycmF0ZWNfcmFkaW8ucHJpdj0mdGVycmF0ZWNfdW5pdDsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmdGVycmF0ZWNfcmFkaW8sICZ0ZXJyYXRlY191bml0KTsKIAogCXNwaW5fbG9ja19pbml0KCZsb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10cnVzdC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10cnVzdC5jCmluZGV4IDE5MzE2MTkuLmU3YjExMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHJ1c3QuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMKQEAgLTc4LDYgKzc4LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGN1cmZyZXE7CiBzdGF0aWMgaW50IGN1cnN0ZXJlbzsKIHN0YXRpYyBpbnQgY3VybXV0ZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGluX3VzZTsKIAogLyogaTJjIGFkZHJlc3NlcyAqLwogI2RlZmluZSBUREE3MzE4X0FERFIgMHg4OApAQCAtMzM2LDEwICszMzcsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0cnVzdF9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmaW5fdXNlKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ1c3RfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJY2xlYXJfYml0KDAsICZpbl91c2UpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cnVzdF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSB0cnVzdF9leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSB0cnVzdF9leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLApAQCAtMzY2LDYgKzM3OCw3IEBACiAJLm5hbWUJCT0gIlRydXN0IEZNIFJhZGlvIiwKIAkuZm9wcyAgICAgICAgICAgPSAmdHJ1c3RfZm9wcywKIAkuaW9jdGxfb3BzIAk9ICZ0cnVzdF9pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHRydXN0X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHlwaG9vbi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMKaW5kZXggZjhkNjJjZi4uOTUyZWMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMKQEAgLTc5LDcgKzc5LDcgQEAKICNlbmRpZgogCiBzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgewotCWludCB1c2VyczsKKwl1bnNpZ25lZCBsb25nIGluX3VzZTsKIAlpbnQgaW9iYXNlOwogCWludCBjdXJ2b2w7CiAJaW50IG11dGVkOwpAQCAtMjIzLDggKzIyMyw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHR5cGhvb25fZGV2aWNlICp0eXBob29uID0gZGV2LT5wcml2OworCXN0cnVjdCB0eXBob29uX2RldmljZSAqdHlwaG9vbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAl0eXBob29uLT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwogCXR5cGhvb25fc2V0ZnJlcSh0eXBob29uLCB0eXBob29uLT5jdXJmcmVxKTsKQEAgLTIzNCw4ICsyMzMsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB0eXBob29uX2RldmljZSAqdHlwaG9vbiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKnR5cGhvb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gdHlwaG9vbi0+Y3VyZnJlcTsKQEAgLTI2MSw4ICsyNTksNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHR5cGhvb25fZGV2aWNlICp0eXBob29uID0gZGV2LT5wcml2OworCXN0cnVjdCB0eXBob29uX2RldmljZSAqdHlwaG9vbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMjc4LDggKzI3NSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHR5cGhvb25fZGV2aWNlICp0eXBob29uID0gZGV2LT5wcml2OworCXN0cnVjdCB0eXBob29uX2RldmljZSAqdHlwaG9vbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzM0LDEwICszMzAsMjEgQEAKIAkubXV0ZWZyZXEJPSBDT05GSUdfUkFESU9fVFlQSE9PTl9NVVRFRlJFUSwKIH07CiAKK3N0YXRpYyBpbnQgdHlwaG9vbl9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmdHlwaG9vbl91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IHR5cGhvb25fZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJY2xlYXJfYml0KDAsICZ0eXBob29uX3VuaXQuaW5fdXNlKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHlwaG9vbl9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSB0eXBob29uX2V4Y2x1c2l2ZV9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHR5cGhvb25fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKQEAgLTM2NCw2ICszNzEsNyBAQAogCS5uYW1lCQk9ICJUeXBob29uIFJhZGlvIiwKIAkuZm9wcyAgICAgICAgICAgPSAmdHlwaG9vbl9mb3BzLAogCS5pb2N0bF9vcHMgCT0gJnR5cGhvb25faW9jdGxfb3BzLAorCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCiB9OwogCiAjaWZkZWYgQ09ORklHX1JBRElPX1RZUEhPT05fUFJPQ19GUwpAQCAtNDQ2LDkgKzQ1NCw4IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JdHlwaG9vbl9yYWRpby5wcml2ID0gJnR5cGhvb25fdW5pdDsKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0eXBob29uX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpID09IC0xKQotCXsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmdHlwaG9vbl9yYWRpbywgJnR5cGhvb25fdW5pdCk7CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdHlwaG9vbl9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKIAkJcmVsZWFzZV9yZWdpb24oaW8sIDgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXpvbHRyaXguYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCmluZGV4IDUxZDU3ZWQuLjE1YjEwYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCkBAIC02OSw2ICs2OSw3IEBACiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CiAKIHN0cnVjdCB6b2xfZGV2aWNlIHsKKwl1bnNpZ25lZCBsb25nIGluX3VzZTsKIAlpbnQgcG9ydDsKIAlpbnQgY3Vydm9sOwogCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKQEAgLTEyMiw4ICsxMjMsMTEgQEAKIAl1bnNpZ25lZCBpbnQgc3RlcmVvID0gZGV2LT5zdGVyZW87CiAJaW50IGk7CiAKLQlpZiAoZnJlcSA9PSAwKQotCQlyZXR1cm4gMTsKKwlpZiAoZnJlcSA9PSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInpvbHRyaXg6IHJlY2VpdmVkIHplcm8gZnJlcS4gRmFpbGVkIHRvIHNldC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAltID0gKGZyZXEgLyAxNjAgLSA4ODAwKSAqIDI7CiAJZiA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIG0gKyAweDRkMWM7CiAKQEAgLTI0NSw4ICsyNDksNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3Qgem9sX2RldmljZSAqem9sID0gZGV2LT5wcml2OworCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNzYsMTkgKzI3OSwyMCBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSBkZXYtPnByaXY7CisJc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAl6b2wtPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0Jem9sX3NldGZyZXEoem9sLCB6b2wtPmN1cmZyZXEpOworCWlmICh6b2xfc2V0ZnJlcSh6b2wsIHpvbC0+Y3VyZnJlcSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ6b2x0cml4OiBTZXQgZnJlcXVlbmN5IGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3Qgem9sX2RldmljZSAqem9sID0gZGV2LT5wcml2OworCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gem9sLT5jdXJmcmVxOwpAQCAtMzEzLDggKzMxNyw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSBkZXYtPnByaXY7CisJc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzMwLDggKzMzMyw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSBkZXYtPnByaXY7CisJc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzQ3LDcgKzM0OSwxMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAJem9sLT5zdGVyZW8gPSAxOwotCXpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKTsKKwlpZiAoem9sX3NldGZyZXEoem9sLCB6b2wtPmN1cmZyZXEpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiem9sdHJpeDogU2V0IGZyZXF1ZW5jeSBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogI2lmIDAKIC8qIEZJWE1FOiBJbXBsZW1lbnQgc3RlcmVvL21vbm8gc3dpdGNoIG9uIFY0TDIgKi8KIAkJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKSB7CkBAIC0zOTYsMTEgKzQwMSwyMiBAQAogCiBzdGF0aWMgc3RydWN0IHpvbF9kZXZpY2Ugem9sdHJpeF91bml0OwogCitzdGF0aWMgaW50IHpvbHRyaXhfZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJnpvbHRyaXhfdW5pdC5pbl91c2UpID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCB6b2x0cml4X2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWNsZWFyX2JpdCgwLCAmem9sdHJpeF91bml0LmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpvbHRyaXhfZm9wcyA9CiB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHpvbHRyaXhfZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gem9sdHJpeF9leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLApAQCAtNDI3LDYgKzQ0Myw3IEBACiAJLm5hbWUJCT0gIlpvbHRyaXggUmFkaW8gUGx1cyIsCiAJLmZvcHMgICAgICAgICAgID0gJnpvbHRyaXhfZm9wcywKIAkuaW9jdGxfb3BzIAk9ICZ6b2x0cml4X2lvY3RsX29wcywKKwkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgem9sdHJpeF9pbml0KHZvaWQpCkBAIC00NDAsNyArNDU3LDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQl6b2x0cml4X3JhZGlvLnByaXYgPSAmem9sdHJpeF91bml0OworCXZpZGVvX3NldF9kcnZkYXRhKCZ6b2x0cml4X3JhZGlvLCAmem9sdHJpeF91bml0KTsKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCAyLCAiem9sdHJpeCIpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiem9sdHJpeDogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggM2U5ZTBkYy4uNDcxMDJjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtMzQsNiArMzQsNyBAQAogCXNlbGVjdCBWSURFT0JVRl9HRU4KIAogY29uZmlnIFZJREVPX0JUQ1gKKwlkZXBlbmRzIG9uIFBDSQogCXRyaXN0YXRlCiAKIGNvbmZpZyBWSURFT19JUgpAQCAtNzEsNiArNzIsMTUgQEAKIAkgIFY0TCBkZXZpY2VzLgogCSAgSW4gZG91YnQsIHNheSBOLgogCitjb25maWcgVklERU9fRklYRURfTUlOT1JfUkFOR0VTCisJYm9vbCAiRW5hYmxlIG9sZC1zdHlsZSBmaXhlZCBtaW5vciByYW5nZXMgZm9yIHZpZGVvIGRldmljZXMiCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIG9sZC1zdHlsZSBmaXhlZC1yYW5nZSBtaW5vciBhc3NpZ25tZW50cy4KKwkgIE9ubHkgdXNlZnVsIGlmIHlvdSByZWx5IG9uIHRoZSBvbGQgYmVoYXZpb3IgYW5kIHVzZSBta25vZCBpbnN0ZWFkIG9mIHVkZXYuCisKKwkgIFdoZW4gaW4gZG91YnQsIHNheSBOLgorCiBjb25maWcgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlib29sICJBdXRvc2VsZWN0IHBlcnRpbmVudCBlbmNvZGVycy9kZWNvZGVycyBhbmQgb3RoZXIgaGVscGVyIGNoaXBzIgogCWRlZmF1bHQgeQpAQCAtNTc4LDEzICs1ODgsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNTI0OS4KIAotY29uZmlnIFRVTkVSXzMwMzYKLQl0cmlzdGF0ZSAiU0FCMzAzNiB0dW5lciIKLQlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19WNEwxCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFBoaWxpcHMgU0FCMzAzNiBjb21wYXRpYmxlIHR1bmVycy4KLQkgIElmIGluIGRvdWJ0LCBzYXkgTi4KLQogY29uZmlnIFZJREVPX1ZJTk8KIAl0cmlzdGF0ZSAiU0dJIFZpbm8gVmlkZW8gRm9yIExpbnV4IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gSTJDICYmIFNHSV9JUDIyICYmIEVYUEVSSU1FTlRBTCAmJiBWSURFT19WNEwyCkBAIC02MDIsNzkgKzYwNSw3IEBACiAJICBkcml2ZXIgZm9yIFBDSS4gIFRoZXJlIGlzIGEgcHJvZHVjdCBwYWdlIGF0CiAJICA8aHR0cDovL3d3dy5zdHJhZGlzLmNvbS8+LgogCi1jb25maWcgVklERU9fWk9SQU4KLQl0cmlzdGF0ZSAiWm9yYW4gWlIzNjA1Ny8zNjA2NyBWaWRlbyBGb3IgTGludXgiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgSTJDX0FMR09CSVQgJiYgVklERU9fVjRMMSAmJiBWSVJUX1RPX0JVUwotCWhlbHAKLQkgIFNheSBZIGZvciBzdXBwb3J0IGZvciBNSlBFRyBjYXB0dXJlIGNhcmRzIGJhc2VkIG9uIHRoZSBab3JhbgotCSAgMzYwNTcvMzYwNjcgUENJIGNvbnRyb2xsZXIgY2hpcHNldC4gVGhpcyBpbmNsdWRlcyB0aGUgSW9tZWdhCi0JICBCdXosIFBpbm5hY2xlIERDMTArIGFuZCB0aGUgTGludXggTWVkaWEgTGFicyBMTUwzMy4gVGhlcmUgaXMKLQkgIGEgZHJpdmVyIGhvbWVwYWdlIGF0IDxodHRwOi8vbWpwZWcuc2YubmV0L2RyaXZlci16b3Jhbi8+LiBGb3IKLQkgIG1vcmUgaW5mb3JtYXRpb24sIGNoZWNrIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4+LgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB6cjM2MDY3LgotCi1jb25maWcgVklERU9fWk9SQU5fREMzMAotCXRyaXN0YXRlICJQaW5uYWNsZS9NaXJvIERDMzAoKykgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFZJREVPX1pPUkFOCi0Jc2VsZWN0IFZJREVPX0FEVjcxNzUgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KLQlzZWxlY3QgVklERU9fVlBYMzIyMCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIHRoZSBQaW5uYWNsZS9NaXJvIERDMzAoKykgTUpQRUcgY2FwdHVyZS9wbGF5YmFjawotCSAgY2FyZC4gVGhpcyBhbHNvIHN1cHBvcnRzIHJlYWxseSBvbGQgREMxMCBjYXJkcyBiYXNlZCBvbiB0aGUKLQkgIHpyMzYwNTAgTUpQRUcgY29kZWMgYW5kIHpyMzYwMTYgVkZFLgotCi1jb25maWcgVklERU9fWk9SQU5fWlIzNjA2MAotCXRyaXN0YXRlICJab3JhbiBaUjM2MDYwIgotCWRlcGVuZHMgb24gVklERU9fWk9SQU4KLQloZWxwCi0JICBTYXkgWSB0byBzdXBwb3J0IFpvcmFuIGJvYXJkcyBiYXNlZCBvbiAzNjA2MCBjaGlwcy4KLQkgIFRoaXMgaW5jbHVkZXMgSW9tZWdhIEJ1eiwgUGlubmFjbGUgREMxMCwgTGludXggbWVkaWEgTGFicyAzMwotCSAgYW5kIDMzIFIxMCBhbmQgQXZlck1lZGlhIDYgYm9hcmRzLgotCi1jb25maWcgVklERU9fWk9SQU5fQlVaCi0JdHJpc3RhdGUgIklvbWVnYSBCdXogc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAKLQlzZWxlY3QgVklERU9fU0FBNzExMSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwotCXNlbGVjdCBWSURFT19TQUE3MTg1IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgdGhlIElvbWVnYSBCdXogTUpQRUcgY2FwdHVyZS9wbGF5YmFjayBjYXJkLgotCi1jb25maWcgVklERU9fWk9SQU5fREMxMAotCXRyaXN0YXRlICJQaW5uYWNsZS9NaXJvIERDMTAoKykgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAKLQlzZWxlY3QgVklERU9fU0FBNzExMCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwotCXNlbGVjdCBWSURFT19BRFY3MTc1IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgdGhlIFBpbm5hY2xlL01pcm8gREMxMCgrKSBNSlBFRyBjYXB0dXJlL3BsYXliYWNrCi0JICBjYXJkLgotCi1jb25maWcgVklERU9fWk9SQU5fTE1MMzMKLQl0cmlzdGF0ZSAiTGludXggTWVkaWEgTGFicyBMTUwzMyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MAotCXNlbGVjdCBWSURFT19CVDgxOSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwotCXNlbGVjdCBWSURFT19CVDg1NiBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIHRoZSBMaW51eCBNZWRpYSBMYWJzIExNTDMzIE1KUEVHIGNhcHR1cmUvcGxheWJhY2sKLQkgIGNhcmQuCi0KLWNvbmZpZyBWSURFT19aT1JBTl9MTUwzM1IxMAotCXRyaXN0YXRlICJMaW51eCBNZWRpYSBMYWJzIExNTDMzUjEwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWSURFT19aT1JBTl9aUjM2MDYwCi0Jc2VsZWN0IFZJREVPX1NBQTcxMTQgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KLQlzZWxlY3QgVklERU9fQURWNzE3MCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwotCWhlbHAKLQkgIHN1cHBvcnQgZm9yIHRoZSBMaW51eCBNZWRpYSBMYWJzIExNTDMzUjEwIE1KUEVHIGNhcHR1cmUvcGxheWJhY2sKLQkgIGNhcmQuCi0KLWNvbmZpZyBWSURFT19aT1JBTl9BVlM2RVlFUwotCXRyaXN0YXRlICJBdmVyTWVkaWEgNiBFeWVzIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBWSURFT19aT1JBTl9aUjM2MDYwICYmIEVYUEVSSU1FTlRBTCAmJiBWSURFT19WNEwxCi0Jc2VsZWN0IFZJREVPX0JUODU2IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCi0Jc2VsZWN0IFZJREVPX0tTMDEyNyBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIHRoZSBBdmVyTWVkaWEgNiBFeWVzIHZpZGVvIHN1cnZlaWxsYW5jZSBjYXJkLgorc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL0tjb25maWciCiAKIGNvbmZpZyBWSURFT19NRVlFCiAJdHJpc3RhdGUgIlNvbnkgVmFpbyBQaWN0dXJlYm9vayBNb3Rpb24gRXllIFZpZGVvIEZvciBMaW51eCIKQEAgLTY5Nyw3ICs2MjgsNyBAQAogCWRlcGVuZHMgb24gUENJICYmIFZJREVPX1Y0TDEgJiYgSTJDCiAJc2VsZWN0IFZJREVPX1NBQTcxNDZfVlYKIAlzZWxlY3QgVklERU9fVFVORVIKLQlzZWxlY3QgVklERU9fU0FBNzExMSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19TQUE3MTE1IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX1REQTk4NDAgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fVEVBNjQxNUMgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fVEVBNjQyMCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwpAQCAtNzA4LDIxICs2MzksNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbXhiLgogCi1jb25maWcgVklERU9fRFBDCi0JdHJpc3RhdGUgIlBoaWxpcHMtU2VtaWNvbmR1Y3RvcnMgJ2RwYzcxNDYgZGVtb25zdHJhdGlvbiBib2FyZCciCi0JZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMSAmJiBJMkMKLQlzZWxlY3QgVklERU9fU0FBNzE0Nl9WVgotCXNlbGVjdCBWSURFT19TQUE3MTExIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCi0JLS0taGVscC0tLQotCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgdGhlICdkcGM3MTQ2IGRlbW9uc3RyYXRpb24KLQkgIGJvYXJkJyBieSBQaGlsaXBzLVNlbWljb25kdWN0b3JzLiBJdCdzIHRoZSByZWZlcmVuY2UgZGVzaWduCi0JICBmb3IgU0FBNzE0NiBiYXNlcyBib2FyZHMsIHNvIGlmIHlvdSBoYXZlIHNvbWUgdW5zdXBwb3J0ZWQKLQkgIHNhYTcxNDYgYmFzZWQsIGFuYWxvZyB2aWRlbyBjYXJkLCBjaGFuY2VzIGFyZSBnb29kIHRoYXQgaXQKLQkgIHdpbGwgd29yayB3aXRoIHRoaXMgc2tlbGV0b24gZHJpdmVyLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkcGM3MTQ2LgotCiBjb25maWcgVklERU9fSEVYSVVNX09SSU9OCiAJdHJpc3RhdGUgIkhleGl1bSBIVi1QQ0k2IGFuZCBPcmlvbiBmcmFtZSBncmFiYmVyIgogCWRlcGVuZHMgb24gUENJICYmIFZJREVPX1Y0TDIgJiYgSTJDCkBAIC03ODQsNiArNzAwLDcwIEBACiAJICBDTU9TIGNhbWVyYSBjb250cm9sbGVyLiAgVGhpcyBpcyB0aGUgY29udHJvbGxlciBmb3VuZCBvbiBmaXJzdC0KIAkgIGdlbmVyYXRpb24gT0xQQyBzeXN0ZW1zLgogCitjb25maWcgU09DX0NBTUVSQQorCXRyaXN0YXRlICJTb0MgY2FtZXJhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEhBU19ETUEKKwlzZWxlY3QgVklERU9CVUZfR0VOCisJaGVscAorCSAgU29DIENhbWVyYSBpcyBhIGNvbW1vbiBBUEkgdG8gc2V2ZXJhbCBjYW1lcmFzLCBub3QgY29ubmVjdGluZworCSAgb3ZlciBhIGJ1cyBsaWtlIFBDSSBvciBVU0IuIEZvciBleGFtcGxlIHNvbWUgaTJjIGNhbWVyYSBjb25uZWN0ZWQKKwkgIGRpcmVjdGx5IHRvIHRoZSBkYXRhIGJ1cyBvZiBhbiBTb0MuCisKK2NvbmZpZyBTT0NfQ0FNRVJBX01UOU0wMDEKKwl0cmlzdGF0ZSAibXQ5bTAwMSBzdXBwb3J0IgorCWRlcGVuZHMgb24gU09DX0NBTUVSQSAmJiBJMkMKKwlzZWxlY3QgR1BJT19QQ0E5NTNYIGlmIE1UOU0wMDFfUENBOTUzNl9TV0lUQ0gKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNVDlNMDAxIGNhbWVyYXMgZnJvbSBNaWNyb24sIG1vbm9jaHJvbWUKKwkgIGFuZCBjb2xvdXIgbW9kZWxzLgorCitjb25maWcgTVQ5TTAwMV9QQ0E5NTM2X1NXSVRDSAorCWJvb2wgInBjYTk1MzYgZGF0YXdpZHRoIHN3aXRjaCBmb3IgbXQ5bTAwMSIKKwlkZXBlbmRzIG9uIFNPQ19DQU1FUkFfTVQ5TTAwMSAmJiBHRU5FUklDX0dQSU8KKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3VyIE1UOU0wMDEgY2FtZXJhIHVzZXMgYSBQQ0E5NTM2IEkyQyBHUElPCisJICBleHRlbmRlciB0byBzd2l0Y2ggYmV0d2VlbiA4IGFuZCAxMCBiaXQgZGF0YXdpZHRoIG1vZGVzCisKK2NvbmZpZyBTT0NfQ0FNRVJBX01UOU0xMTEKKwl0cmlzdGF0ZSAibXQ5bTExMSBzdXBwb3J0IgorCWRlcGVuZHMgb24gU09DX0NBTUVSQSAmJiBJMkMKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNVDlNMTExIGNhbWVyYXMgZnJvbSBNaWNyb24KKworY29uZmlnIFNPQ19DQU1FUkFfTVQ5VjAyMgorCXRyaXN0YXRlICJtdDl2MDIyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTT0NfQ0FNRVJBICYmIEkyQworCXNlbGVjdCBHUElPX1BDQTk1M1ggaWYgTVQ5VjAyMl9QQ0E5NTM2X1NXSVRDSAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1UOVYwMjIgY2FtZXJhcyBmcm9tIE1pY3JvbgorCitjb25maWcgTVQ5VjAyMl9QQ0E5NTM2X1NXSVRDSAorCWJvb2wgInBjYTk1MzYgZGF0YXdpZHRoIHN3aXRjaCBmb3IgbXQ5djAyMiIKKwlkZXBlbmRzIG9uIFNPQ19DQU1FUkFfTVQ5VjAyMiAmJiBHRU5FUklDX0dQSU8KKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3VyIE1UOVYwMjIgY2FtZXJhIHVzZXMgYSBQQ0E5NTM2IEkyQyBHUElPCisJICBleHRlbmRlciB0byBzd2l0Y2ggYmV0d2VlbiA4IGFuZCAxMCBiaXQgZGF0YXdpZHRoIG1vZGVzCisKK2NvbmZpZyBTT0NfQ0FNRVJBX1BMQVRGT1JNCisJdHJpc3RhdGUgInBsYXRmb3JtIGNhbWVyYSBzdXBwb3J0IgorCWRlcGVuZHMgb24gU09DX0NBTUVSQQorCWhlbHAKKwkgIFRoaXMgaXMgYSBnZW5lcmljIFNvQyBjYW1lcmEgcGxhdGZvcm0gZHJpdmVyLCB1c2VmdWwgZm9yIHRlc3RpbmcKKworY29uZmlnIFZJREVPX1BYQTI3eAorCXRyaXN0YXRlICJQWEEyN3ggUXVpY2sgQ2FwdHVyZSBJbnRlcmZhY2UgZHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBYQTI3eCAmJiBTT0NfQ0FNRVJBCisJc2VsZWN0IFZJREVPQlVGX0RNQV9TRworCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2NGwyIGRyaXZlciBmb3IgdGhlIFBYQTI3eCBRdWljayBDYXB0dXJlIEludGVyZmFjZQorCitjb25maWcgVklERU9fU0hfTU9CSUxFX0NFVQorCXRyaXN0YXRlICJTdXBlckggTW9iaWxlIENFVSBJbnRlcmZhY2UgZHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIFNPQ19DQU1FUkEgJiYgSEFTX0RNQQorCXNlbGVjdCBWSURFT0JVRl9ETUFfQ09OVElHCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHY0bDIgZHJpdmVyIGZvciB0aGUgU3VwZXJIIE1vYmlsZSBDRVUgSW50ZXJmYWNlCisKICMKICMgVVNCIE11bHRpbWVkaWEgZGV2aWNlIGNvbmZpZ3VyYXRpb24KICMKQEAgLTgyMiw4ICs4MDIsNyBAQAogCiBjb25maWcgVVNCX1c5OTY4Q0YKIAl0cmlzdGF0ZSAiVVNCIFc5OTZbODddQ0YgSlBFRyBEdWFsIE1vZGUgQ2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQwotCXNlbGVjdCBWSURFT19PVkNBTUNISVAKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDICYmIFZJREVPX09WQ0FNQ0hJUAogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiBPVjY4MSBvcgogCSAgV2luYm9uZCBXOTk2N0NGL1c5OTY4Q0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSBDaGlwcy4KQEAgLTkxNCw2NCArODkzLDQgQEAKIAogZW5kaWYgIyBWNExfVVNCX0RSSVZFUlMKIAotY29uZmlnIFNPQ19DQU1FUkEKLQl0cmlzdGF0ZSAiU29DIGNhbWVyYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBIQVNfRE1BCi0Jc2VsZWN0IFZJREVPQlVGX0dFTgotCWhlbHAKLQkgIFNvQyBDYW1lcmEgaXMgYSBjb21tb24gQVBJIHRvIHNldmVyYWwgY2FtZXJhcywgbm90IGNvbm5lY3RpbmcKLQkgIG92ZXIgYSBidXMgbGlrZSBQQ0kgb3IgVVNCLiBGb3IgZXhhbXBsZSBzb21lIGkyYyBjYW1lcmEgY29ubmVjdGVkCi0JICBkaXJlY3RseSB0byB0aGUgZGF0YSBidXMgb2YgYW4gU29DLgotCi1jb25maWcgU09DX0NBTUVSQV9NVDlNMDAxCi0JdHJpc3RhdGUgIm10OW0wMDEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPQ19DQU1FUkEgJiYgSTJDCi0Jc2VsZWN0IEdQSU9fUENBOTUzWCBpZiBNVDlNMDAxX1BDQTk1MzZfU1dJVENICi0JaGVscAotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTVQ5TTAwMSBjYW1lcmFzIGZyb20gTWljcm9uLCBtb25vY2hyb21lCi0JICBhbmQgY29sb3VyIG1vZGVscy4KLQotY29uZmlnIE1UOU0wMDFfUENBOTUzNl9TV0lUQ0gKLQlib29sICJwY2E5NTM2IGRhdGF3aWR0aCBzd2l0Y2ggZm9yIG10OW0wMDEiCi0JZGVwZW5kcyBvbiBTT0NfQ0FNRVJBX01UOU0wMDEgJiYgR0VORVJJQ19HUElPCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91ciBNVDlNMDAxIGNhbWVyYSB1c2VzIGEgUENBOTUzNiBJMkMgR1BJTwotCSAgZXh0ZW5kZXIgdG8gc3dpdGNoIGJldHdlZW4gOCBhbmQgMTAgYml0IGRhdGF3aWR0aCBtb2RlcwotCi1jb25maWcgU09DX0NBTUVSQV9NVDlWMDIyCi0JdHJpc3RhdGUgIm10OXYwMjIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPQ19DQU1FUkEgJiYgSTJDCi0Jc2VsZWN0IEdQSU9fUENBOTUzWCBpZiBNVDlWMDIyX1BDQTk1MzZfU1dJVENICi0JaGVscAotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTVQ5VjAyMiBjYW1lcmFzIGZyb20gTWljcm9uCi0KLWNvbmZpZyBNVDlWMDIyX1BDQTk1MzZfU1dJVENICi0JYm9vbCAicGNhOTUzNiBkYXRhd2lkdGggc3dpdGNoIGZvciBtdDl2MDIyIgotCWRlcGVuZHMgb24gU09DX0NBTUVSQV9NVDlWMDIyICYmIEdFTkVSSUNfR1BJTwotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdXIgTVQ5VjAyMiBjYW1lcmEgdXNlcyBhIFBDQTk1MzYgSTJDIEdQSU8KLQkgIGV4dGVuZGVyIHRvIHN3aXRjaCBiZXR3ZWVuIDggYW5kIDEwIGJpdCBkYXRhd2lkdGggbW9kZXMKLQotY29uZmlnIFNPQ19DQU1FUkFfUExBVEZPUk0KLQl0cmlzdGF0ZSAicGxhdGZvcm0gY2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTT0NfQ0FNRVJBCi0JaGVscAotCSAgVGhpcyBpcyBhIGdlbmVyaWMgU29DIGNhbWVyYSBwbGF0Zm9ybSBkcml2ZXIsIHVzZWZ1bCBmb3IgdGVzdGluZwotCi1jb25maWcgVklERU9fUFhBMjd4Ci0JdHJpc3RhdGUgIlBYQTI3eCBRdWljayBDYXB0dXJlIEludGVyZmFjZSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUFhBMjd4Ci0Jc2VsZWN0IFNPQ19DQU1FUkEKLQlzZWxlY3QgVklERU9CVUZfRE1BX1NHCi0JLS0taGVscC0tLQotCSAgVGhpcyBpcyBhIHY0bDIgZHJpdmVyIGZvciB0aGUgUFhBMjd4IFF1aWNrIENhcHR1cmUgSW50ZXJmYWNlCi0KLWNvbmZpZyBWSURFT19TSF9NT0JJTEVfQ0VVCi0JdHJpc3RhdGUgIlN1cGVySCBNb2JpbGUgQ0VVIEludGVyZmFjZSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSEFTX0RNQQotCXNlbGVjdCBTT0NfQ0FNRVJBCi0Jc2VsZWN0IFZJREVPQlVGX0RNQV9DT05USUcKLQktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGEgdjRsMiBkcml2ZXIgZm9yIHRoZSBTdXBlckggTW9iaWxlIENFVSBJbnRlcmZhY2UKLQogZW5kaWYgIyBWSURFT19DQVBUVVJFX0RSSVZFUlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCmluZGV4IGVmN2M4ZDMuLjE2OTYyZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQpAQCAtMiw4ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSB2aWRlbyBjYXB0dXJlL3BsYXliYWNrIGRldmljZSBkcml2ZXJzLgogIwogCi16cjM2MDY3LW9ianMJOj0Jem9yYW5fcHJvY2ZzLm8gem9yYW5fZGV2aWNlLm8gXAotCQkJem9yYW5fZHJpdmVyLm8gem9yYW5fY2FyZC5vCiB0dW5lci1vYmpzCTo9CXR1bmVyLWNvcmUubwogCiBtc3AzNDAwLW9ianMJOj0JbXNwMzQwMC1kcml2ZXIubyBtc3AzNDAwLWt0aHJlYWRzLm8KQEAgLTU0LDkgKzUyLDcgQEAKIG9iai0kKENPTkZJR19WSURFT19CVDg2NikgKz0gYnQ4NjYubwogb2JqLSQoQ09ORklHX1ZJREVPX0tTMDEyNykgKz0ga3MwMTI3Lm8KIAotb2JqLSQoQ09ORklHX1ZJREVPX1pPUkFOKSArPSB6cjM2MDY3Lm8gdmlkZW9jb2RlYy5vCi1vYmotJChDT05GSUdfVklERU9fWk9SQU5fREMzMCkgKz0genIzNjA1MC5vIHpyMzYwMTYubwotb2JqLSQoQ09ORklHX1ZJREVPX1pPUkFOX1pSMzYwNjApICs9IHpyMzYwNjAubworb2JqLSQoQ09ORklHX1ZJREVPX1pPUkFOKSArPSB6b3Jhbi8KIAogb2JqLSQoQ09ORklHX1ZJREVPX1BNUykgKz0gcG1zLm8KIG9iai0kKENPTkZJR19WSURFT19WSU5PKSArPSB2aW5vLm8gaW5keWNhbS5vCkBAIC04NCw4ICs4MCw2IEBACiBvYmotJChDT05GSUdfVklERU9fTVhCKSArPSBteGIubwogb2JqLSQoQ09ORklHX1ZJREVPX0hFWElVTV9PUklPTikgKz0gaGV4aXVtX29yaW9uLm8KIG9iai0kKENPTkZJR19WSURFT19IRVhJVU1fR0VNSU5JKSArPSBoZXhpdW1fZ2VtaW5pLm8KLW9iai0kKENPTkZJR19WSURFT19EUEMpICs9IGRwYzcxNDYubwotb2JqLSQoQ09ORklHX1RVTkVSXzMwMzYpICs9IHR1bmVyLTMwMzYubwogCiBvYmotJChDT05GSUdfVklERU9CVUZfR0VOKSArPSB2aWRlb2J1Zi1jb3JlLm8KIG9iai0kKENPTkZJR19WSURFT0JVRl9ETUFfU0cpICs9IHZpZGVvYnVmLWRtYS1zZy5vCkBAIC0xMzcsNiArMTMxLDcgQEAKIG9iai0kKENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVKQkrPSBzaF9tb2JpbGVfY2V1X2NhbWVyYS5vCiBvYmotJChDT05GSUdfU09DX0NBTUVSQSkJKz0gc29jX2NhbWVyYS5vCiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxKQkrPSBtdDltMDAxLm8KK29iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTEpCSs9IG10OW0xMTEubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfTVQ5VjAyMikJKz0gbXQ5djAyMi5vCiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9QTEFURk9STSkJKz0gc29jX2NhbWVyYV9wbGF0Zm9ybS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTcwLmMKaW5kZXggZjc5NGYyZC4uZTBlYjRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTcwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTcwLmMKQEAgLTI5LDQzICsyOSwyNCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2aWNlcyBBRFY3MTcwIHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNYXhpbSBZZXZ0eXVzaGtpbiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0KLSNkZWZpbmUgSTJDX05BTUUoeCkgKHgpLT5uYW1lCi0KLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBhZHY3MTcwIHsKQEAgLTgwLDIxICs2MSwxMiBAQAogCWludCBzYXQ7CiB9OwogCi0jZGVmaW5lICAgSTJDX0FEVjcxNzAgICAgICAgIDB4ZDQKLSNkZWZpbmUgICBJMkNfQURWNzE3MSAgICAgICAgMHg1NAotCi1zdGF0aWMgY2hhciBhZHY3MTcwX25hbWVbXSA9ICJhZHY3MTcwIjsKLXN0YXRpYyBjaGFyIGFkdjcxNzFfbmFtZVtdID0gImFkdjcxNzEiOwotCiBzdGF0aWMgY2hhciAqaW5wdXRzW10gPSB7ICJwYXNzX3Rocm91Z2giLCAicGxheV9iYWNrIiB9Owogc3RhdGljIGNoYXIgKm5vcm1zW10gPSB7ICJQQUwiLCAiTlRTQyIgfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLWFkdjcxNzBfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC0xMDIsMTcgKzc0LDEzIEBACiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWFkdjcxNzBfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnKQorc3RhdGljIGlubGluZSBpbnQgYWR2NzE3MF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIAotc3RhdGljIGludAotYWR2NzE3MF93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCBhZHY3MTcwX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCSAgICAgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKQEAgLTEzMywzMyArMTAxLDI1IEBACiAJCQkJICAgIGVuY29kZXItPnJlZ1tyZWcrK10gPSBkYXRhWzFdOwogCQkJCWxlbiAtPSAyOwogCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmCi0JCQkJIGJsb2NrX2xlbiA8IDMyKTsKLQkJCWlmICgocmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwKLQkJCQkJCSAgIGJsb2NrX2xlbikpIDwgMCkKKwkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKKwkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJaWYgKChyZXQgPSBhZHY3MTcwX3dyaXRlKGNsaWVudCwgcmVnLAotCQkJCQkJICpkYXRhKyspKSA8IDApCisJCQlyZXQgPSBhZHY3MTcwX3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQkJbGVuIC09IDI7CiAJCX0KIAl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLy8gT3V0cHV0IGZpbHRlcjogIFMtVmlkZW8gIENvbXBvc2l0ZQotCi0jZGVmaW5lIE1SMDUwICAgICAgIDB4MTEJLy8weDA5Ci0jZGVmaW5lIE1SMDYwICAgICAgIDB4MTQJLy8weDBjCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNkZWZpbmUgVFIwTU9ERSAgICAgMHg0YwogI2RlZmluZSBUUjBSU1QJICAgIDB4ODAKQEAgLTE2Nyw3ICsxMjcsNiBAQAogI2RlZmluZSBUUjFDQVBUCSAgICAweDAwCiAjZGVmaW5lIFRSMVBMQVkJICAgIDB4MDAKIAotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpbml0X05UU0NbXSA9IHsKIAkweDAwLCAweDEwLAkJLy8gTVIwCiAJMHgwMSwgMHgyMCwJCS8vIE1SMQpAQCAtMjI3LDE1ICsxODYsMTEgQEAKIH07CiAKIAotc3RhdGljIGludAotYWR2NzE3MF9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgdW5zaWduZWQgaW50ICAgICAgIGNtZCwKLQkJIHZvaWQgKiAgICAgICAgICAgICBhcmcpCitzdGF0aWMgaW50IGFkdjcxNzBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJc3dpdGNoIChjbWQpIHsKLQogCWNhc2UgMDoKICNpZiAwCiAJCS8qIFRoaXMgaXMganVzdCBmb3IgdGVzdGluZyEhISAqLwpAQCAtMjU0LDE4ICsyMDksMTYgQEAKIAkJCSAgICAgVklERU9fRU5DT0RFUl9OVFNDOwogCQljYXAtPmlucHV0cyA9IDI7CiAJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX05PUk06CiAJewogCQlpbnQgaWFyZyA9ICooaW50ICopIGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzX2NvbW1hbmQ6IHNldCBub3JtICVkIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgbm9ybSAlZFxuIiwgaWFyZyk7CiAKIAkJc3dpdGNoIChpYXJnKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlhZHY3MTcwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9OVFNDLAogCQkJCQkgICAgc2l6ZW9mKGluaXRfTlRTQykpOwpAQCAtMjg1LDE2ICsyMzgsMTMgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogaWxsZWdhbCBub3JtOiAlZFxuIiwKLQkJCSAgICAgICBJMkNfTkFNRShjbGllbnQpLCBpYXJnKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlsbGVnYWwgbm9ybTogJWRcbiIsIGlhcmcpOwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBzd2l0Y2hlZCB0byAlc1xuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCW5vcm1zW2lhcmddKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gJXNcbiIsIG5vcm1zW2lhcmddKTsKIAkJZW5jb2Rlci0+bm9ybSA9IGlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX0lOUFVUOgogCXsKQEAgLTMwNCwxOSArMjU0LDE3IEBACiAJCSAqaWFyZyA9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MAogCQkgKmlhcmcgPSAyOiBjb2xvciBiYXIgKi8KIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzX2NvbW1hbmQ6IHNldCBpbnB1dCBmcm9tICVzXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IGlucHV0IGZyb20gJXNcbiIsCiAJCQlpYXJnID09IDAgPyAiZGVjb2RlciIgOiAiWlIzNjA2MCIpOwogCiAJCXN3aXRjaCAoaWFyZykgewotCiAJCWNhc2UgMDoKIAkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDAxLCAweDIwKTsKIAkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA4LCBUUjFDQVBUKTsJLyogVFIxICovCiAJCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwMiwgMHgwZSk7CS8vIEVuYWJsZSBnZW5sb2NrCiAJCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CiAJCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQkvL3VkZWxheSgxMCk7CisJCQkvKiB1ZGVsYXkoMTApOyAqLwogCQkJYnJlYWs7CiAKIAkJY2FzZSAxOgpAQCAtMzI1LDIwICsyNzMsMTcgQEAKIAkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDAyLCAweDA4KTsKIAkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKIAkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCS8vdWRlbGF5KDEwKTsKKwkJCS8qIHVkZWxheSgxMCk7ICovCiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IGlsbGVnYWwgaW5wdXQ6ICVkXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIGlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaWxsZWdhbCBpbnB1dDogJWRcbiIsIGlhcmcpOwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBzd2l0Y2hlZCB0byAlc1xuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCWlucHV0c1tpYXJnXSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbaWFyZ10pOwogCQllbmNvZGVyLT5pbnB1dCA9IGlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX09VVFBVVDoKIAl7CkBAIC0zNDgsMTYgKzI5MywxNiBAQAogCQlpZiAoKmlhcmcgIT0gMCkgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCiAJCWVuY29kZXItPmVuYWJsZSA9ICEhKmlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM2OCwxNDkgKzMxMyw2NyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKgotICogR2VuZXJpYyBpMmMgcHJvYmUKLSAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKLSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9Ci0gICAgeyBJMkNfQURWNzE3MCA+PiAxLCAoSTJDX0FEVjcxNzAgPj4gMSkgKyAxLAotCUkyQ19BRFY3MTcxID4+IDEsIChJMkNfQURWNzE3MSA+PiAxKSArIDEsCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geworCTB4ZDQgPj4gMSwgMHhkNiA+PiAxLAkvKiBhZHY3MTcwIElEcyAqLworCTB4NTQgPj4gMSwgMHg1NiA+PiAxLAkvKiBhZHY3MTcxIElEcyAqLwogCUkyQ19DTElFTlRfRU5ECiB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2FkdjcxNzA7Ci0KLXN0YXRpYyBpbnQKLWFkdjcxNzBfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQorc3RhdGljIGludCBhZHY3MTcwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlcjsKLQljaGFyICpkbmFtZTsKLQotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJhZHY3MTcwLmM6IGRldGVjdGluZyBhZHY3MTcwIGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCi0JCWFkZHJlc3MgPDwgMSk7CisJaW50IGk7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9hZHY3MTcwOwotCWlmICgoY2xpZW50LT5hZGRyID09IEkyQ19BRFY3MTcwID4+IDEpIHx8Ci0JICAgIChjbGllbnQtPmFkZHIgPT0gKEkyQ19BRFY3MTcwID4+IDEpICsgMSkpIHsKLQkJZG5hbWUgPSBhZHY3MTcwX25hbWU7Ci0JfSBlbHNlIGlmICgoY2xpZW50LT5hZGRyID09IEkyQ19BRFY3MTcxID4+IDEpIHx8Ci0JCSAgIChjbGllbnQtPmFkZHIgPT0gKEkyQ19BRFY3MTcxID4+IDEpICsgMSkpIHsKLQkJZG5hbWUgPSBhZHY3MTcxX25hbWU7Ci0JfSBlbHNlIHsKLQkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlISEhICovCi0JCWtmcmVlKGNsaWVudCk7Ci0JCXJldHVybiAwOwotCX0KLQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksIGRuYW1lLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWVuY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWR2NzE3MCksIEdGUF9LRVJORUwpOwotCWlmIChlbmNvZGVyID09IE5VTEwpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwlpZiAoZW5jb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJZW5jb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKIAllbmNvZGVyLT5pbnB1dCA9IDA7CiAJZW5jb2Rlci0+ZW5hYmxlID0gMTsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBlbmNvZGVyKTsKIAotCWkgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChpKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGVuY29kZXIpOwotCQlyZXR1cm4gaTsKLQl9Ci0KIAlpID0gYWR2NzE3MF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfTlRTQywgc2l6ZW9mKGluaXRfTlRTQykpOwogCWlmIChpID49IDApIHsKIAkJaSA9IGFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKIAkJaSA9IGFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKIAkJaSA9IGFkdjcxNzBfcmVhZChjbGllbnQsIDB4MTIpOwotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXNfYXR0YWNoOiByZXYuICVkIGF0IDB4JTAyeFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGkgJiAxLCBjbGllbnQtPmFkZHIgPDwgMSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInJldmlzaW9uICVkXG4iLCBpICYgMSk7CiAJfQotCWlmIChpIDwgMCkgewotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlc19hdHRhY2g6IGluaXQgZXJyb3IgMHgleFxuIiwKLQkJICAgICAgIEkyQ19OQU1FKGNsaWVudCksIGkpOwotCX0KLQorCWlmIChpIDwgMCkKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdCBlcnJvciAweCV4XG4iLCBpKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYWR2NzE3MF9hdHRhY2hfYWRhcHRlciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBhZHY3MTcwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJhZHY3MTcwLmM6IHN0YXJ0aW5nIHByb2JlIGZvciBhZGFwdGVyICVzICgweCV4KVxuIiwKLQkJSTJDX05BTUUoYWRhcHRlciksIGFkYXB0ZXItPmlkKTsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZhZHY3MTcwX2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1hZHY3MTcwX2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGFkdjcxNzAgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0Ja2ZyZWUoZW5jb2Rlcik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQorCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfYWR2NzE3MCA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJhZHY3MTcwIiwJLyogbmFtZSAqLwotCX0sCi0KLQkuaWQgPSBJMkNfRFJJVkVSSURfQURWNzE3MCwKLQotCS5hdHRhY2hfYWRhcHRlciA9IGFkdjcxNzBfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSBhZHY3MTcwX2RldGFjaF9jbGllbnQsCi0JLmNvbW1hbmQgPSBhZHY3MTcwX2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWR2NzE3MF9pZFtdID0geworCXsgImFkdjcxNzAiLCAwIH0sCisJeyAiYWR2NzE3MSIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWR2NzE3MF9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1hZHY3MTcwX2luaXQgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX2FkdjcxNzApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWFkdjcxNzBfZXhpdCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9hZHY3MTcwKTsKLX0KLQotbW9kdWxlX2luaXQoYWR2NzE3MF9pbml0KTsKLW1vZHVsZV9leGl0KGFkdjcxNzBfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAiYWR2NzE3MCIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0FEVjcxNzAsCisJLmNvbW1hbmQgPSBhZHY3MTcwX2NvbW1hbmQsCisJLnByb2JlID0gYWR2NzE3MF9wcm9iZSwKKwkucmVtb3ZlID0gYWR2NzE3MF9yZW1vdmUsCisJLmlkX3RhYmxlID0gYWR2NzE3MF9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3NS5jCmluZGV4IDhlZTA3YTYuLjYwMDhlODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3NS5jCkBAIC0yNSw0MyArMjUsMjQgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQW5hbG9nIERldmljZXMgQURWNzE3NSB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiRGF2ZSBQZXJrcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0KLSNkZWZpbmUgSTJDX05BTUUocykgKHMpLT5uYW1lCi0KLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBhZHY3MTc1IHsKQEAgLTc3LDMzICs1OCwyMyBAQAogI2RlZmluZSAgIEkyQ19BRFY3MTc1ICAgICAgICAweGQ0CiAjZGVmaW5lICAgSTJDX0FEVjcxNzYgICAgICAgIDB4NTQKIAotc3RhdGljIGNoYXIgYWR2NzE3NV9uYW1lW10gPSAiYWR2NzE3NSI7Ci1zdGF0aWMgY2hhciBhZHY3MTc2X25hbWVbXSA9ICJhZHY3MTc2IjsKLQogc3RhdGljIGNoYXIgKmlucHV0c1tdID0geyAicGFzc190aHJvdWdoIiwgInBsYXlfYmFjayIsICJjb2xvcl9iYXIiIH07CiBzdGF0aWMgY2hhciAqbm9ybXNbXSA9IHsgIlBBTCIsICJOVFNDIiwgIlNFQ0FNLT5QQUwgKG1heSBub3Qgd29yayEpIiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludAotYWR2NzE3NV93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgYWR2NzE3NV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1hZHY3MTc1X3JlYWQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzVfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQKLWFkdjcxNzVfd3JpdGVfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSAgICAgY29uc3QgdTggICAgICAgICAgKmRhdGEsCi0JCSAgICAgdW5zaWduZWQgaW50ICAgICAgIGxlbikKK3N0YXRpYyBpbnQgYWR2NzE3NV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkgICAgIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CkBAIC0xMjMsMTggKzk0LDE3IEBACiAJCQkJcmVnKys7CiAJCQkJbGVuIC09IDI7CiAJCQkJZGF0YSArPSAyOwotCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYKLQkJCQkgYmxvY2tfbGVuIDwgMzIpOwotCQkJaWYgKChyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLAotCQkJCQkJICAgYmxvY2tfbGVuKSkgPCAwKQorCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYgYmxvY2tfbGVuIDwgMzIpOworCQkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwgYmxvY2tfbGVuKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlpZiAoKHJldCA9IGFkdjcxNzVfd3JpdGUoY2xpZW50LCByZWcsCi0JCQkJCQkgKmRhdGErKykpIDwgMCkKKwkJCXJldCA9IGFkdjcxNzVfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKIAkJfQpAQCAtMTQzLDEzICsxMTMsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZAotc2V0X3N1YmNhcnJpZXJfZnJlcSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBpbnQgICAgICAgICAgICAgICAgcGFzc190aHJvdWdoKQorc3RhdGljIHZvaWQgc2V0X3N1YmNhcnJpZXJfZnJlcShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFzc190aHJvdWdoKQogewogCS8qIGZvciBzb21lIHJlYXNvbiBwYXNzX3Rocm91Z2ggTlRTQyBuZWVkcwogCSAqIGEgZGlmZmVyZW50IHN1Yi1jYXJyaWVyIGZyZXEgdG8gcmVtYWluIHN0YWJsZS4gKi8KLQlpZihwYXNzX3Rocm91Z2gpCisJaWYgKHBhc3NfdGhyb3VnaCkKIAkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDIsIDB4MDApOwogCWVsc2UKIAkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDIsIDB4NTUpOwpAQCAtMTYwLDEyICsxMjgsMTIgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8vIE91dHB1dCBmaWx0ZXI6ICBTLVZpZGVvICBDb21wb3NpdGUKKy8qIE91dHB1dCBmaWx0ZXI6ICBTLVZpZGVvICBDb21wb3NpdGUgKi8KIAotI2RlZmluZSBNUjA1MCAgICAgICAweDExCS8vMHgwOQotI2RlZmluZSBNUjA2MCAgICAgICAweDE0CS8vMHgwYworI2RlZmluZSBNUjA1MCAgICAgICAweDExCS8qIDB4MDkgKi8KKyNkZWZpbmUgTVIwNjAgICAgICAgMHgxNAkvKiAweDBjICovCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjZGVmaW5lIFRSME1PREUgICAgIDB4NDYKICNkZWZpbmUgVFIwUlNUCSAgICAweDgwCkBAIC0yMTYsMTUgKzE4NCwxMSBAQAogCTB4MDYsIDB4MWEsCQkvKiBzdWJjLiBwaGFzZSAqLwogfTsKIAotc3RhdGljIGludAotYWR2NzE3NV9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgdW5zaWduZWQgaW50ICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAgICAgICphcmcpCitzdGF0aWMgaW50IGFkdjcxNzVfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgYWR2NzE3NSAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJc3dpdGNoIChjbWQpIHsKLQogCWNhc2UgMDoKIAkJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCiAJCWFkdjcxNzVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwKQEAgLTI0MiwxNSArMjA2LDE0IEBACiAJCQkgICAgIFZJREVPX0VOQ09ERVJfU0VDQU07IC8qIHdlbGwsIGhhY2t5ICovCiAJCWNhcC0+aW5wdXRzID0gMjsKIAkJY2FwLT5vdXRwdXRzID0gMTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfTk9STToKIAl7CiAJCWludCBpYXJnID0gKihpbnQgKikgYXJnOwogCiAJCXN3aXRjaCAoaWFyZykgewotCiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgogCQkJYWR2NzE3NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfbnRzYywKIAkJCQkJICAgIHNpemVvZihpbml0X250c2MpKTsKQEAgLTI4NCwxNiArMjQ3LDEzIEBACiAJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBpbGxlZ2FsIG5vcm06ICVkXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIGlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaWxsZWdhbCBub3JtOiAlZFxuIiwgaWFyZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3dpdGNoZWQgdG8gJXNcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQlub3Jtc1tpYXJnXSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvICVzXG4iLCBub3Jtc1tpYXJnXSk7CiAJCWVuY29kZXItPm5vcm0gPSBpYXJnOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX1NFVF9JTlBVVDoKIAl7CkBAIC0zMDQsNyArMjY0LDYgQEAKIAkJICppYXJnID0gMjogY29sb3IgYmFyICovCiAKIAkJc3dpdGNoIChpYXJnKSB7Ci0KIAkJY2FzZSAwOgogCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDEsIDB4MDApOwogCkBAIC0zMzEsNyArMjkwLDcgQEAKIAkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBkLCAweDQ5KTsKIAkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKIAkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCS8vdWRlbGF5KDEwKTsKKwkJCS8qIHVkZWxheSgxMCk7ICovCiAJCQlicmVhazsKIAogCQljYXNlIDI6CkBAIC0zNDMsMzkgKzMwMiwzNSBAQAogCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MGQsIDB4NDkpOwogCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwogCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJLy91ZGVsYXkoMTApOworCQkJLyogdWRlbGF5KDEwKTsgKi8KIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogaWxsZWdhbCBpbnB1dDogJWRcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwgaWFyZyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbGxlZ2FsIGlucHV0OiAlZFxuIiwgaWFyZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3dpdGNoZWQgdG8gJXNcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQlpbnB1dHNbaWFyZ10pOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byAlc1xuIiwgaW5wdXRzW2lhcmddKTsKIAkJZW5jb2Rlci0+aW5wdXQgPSBpYXJnOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX1NFVF9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKIAkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApIHsKKwkJaWYgKCppYXJnICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKIAkJZW5jb2Rlci0+ZW5hYmxlID0gISEqaWFyZzsKLQl9CiAJCWJyZWFrOworCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzkwLDE0NSArMzQ1LDY3IEBACiAgKiBHZW5lcmljIGkyYyBwcm9iZQogICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwogICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0KLSAgICB7IEkyQ19BRFY3MTc1ID4+IDEsIChJMkNfQURWNzE3NSA+PiAxKSArIDEsCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geworCUkyQ19BRFY3MTc1ID4+IDEsIChJMkNfQURWNzE3NSA+PiAxKSArIDEsCiAJSTJDX0FEVjcxNzYgPj4gMSwgKEkyQ19BRFY3MTc2ID4+IDEpICsgMSwKIAlJMkNfQ0xJRU5UX0VORAogfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9hZHY3MTc1OwotCi1zdGF0aWMgaW50Ci1hZHY3MTc1X2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKK3N0YXRpYyBpbnQgYWR2NzE3NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IGFkdjcxNzUgKmVuY29kZXI7Ci0JY2hhciAqZG5hbWU7Ci0KLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkiYWR2NzE3NS5jOiBkZXRlY3RpbmcgYWR2NzE3NSBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAotCQlhZGRyZXNzIDw8IDEpOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfYWR2NzE3NTsKLQlpZiAoKGNsaWVudC0+YWRkciA9PSBJMkNfQURWNzE3NSA+PiAxKSB8fAotCSAgICAoY2xpZW50LT5hZGRyID09IChJMkNfQURWNzE3NSA+PiAxKSArIDEpKSB7Ci0JCWRuYW1lID0gYWR2NzE3NV9uYW1lOwotCX0gZWxzZSBpZiAoKGNsaWVudC0+YWRkciA9PSBJMkNfQURWNzE3NiA+PiAxKSB8fAotCQkgICAoY2xpZW50LT5hZGRyID09IChJMkNfQURWNzE3NiA+PiAxKSArIDEpKSB7Ci0JCWRuYW1lID0gYWR2NzE3Nl9uYW1lOwotCX0gZWxzZSB7Ci0JCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSEhISAqLwotCQlrZnJlZShjbGllbnQpOwotCQlyZXR1cm4gMDsKLQl9Ci0Jc3RybGNweShJMkNfTkFNRShjbGllbnQpLCBkbmFtZSwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkdjcxNzUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZW5jb2RlciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKGVuY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWVuY29kZXItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKIAllbmNvZGVyLT5pbnB1dCA9IDA7CiAJZW5jb2Rlci0+ZW5hYmxlID0gMTsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBlbmNvZGVyKTsKIAotCWkgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChpKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGVuY29kZXIpOwotCQlyZXR1cm4gaTsKLQl9Ci0KIAlpID0gYWR2NzE3NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKIAlpZiAoaSA+PSAwKSB7CiAJCWkgPSBhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CiAJCWkgPSBhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7CiAJCWkgPSBhZHY3MTc1X3JlYWQoY2xpZW50LCAweDEyKTsKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzX2F0dGFjaDogcmV2LiAlZCBhdCAweCV4XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSAmIDEsIGNsaWVudC0+YWRkciA8PCAxKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicmV2aXNpb24gJWRcbiIsIGkgJiAxKTsKIAl9Ci0JaWYgKGkgPCAwKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzX2F0dGFjaDogaW5pdCBlcnJvciAweCV4XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSk7Ci0JfQotCisJaWYgKGkgPCAwKQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IGVycm9yIDB4JXhcbiIsIGkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1hZHY3MTc1X2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGFkdjcxNzVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJImFkdjcxNzUuYzogc3RhcnRpbmcgcHJvYmUgZm9yIGFkYXB0ZXIgJXMgKDB4JXgpXG4iLAotCQlJMkNfTkFNRShhZGFwdGVyKSwgYWRhcHRlci0+aWQpOwotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJmFkdjcxNzVfZGV0ZWN0X2NsaWVudCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWFkdjcxNzVfZGV0YWNoX2NsaWVudCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgYWR2NzE3NSAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7Ci0KLQllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlrZnJlZShlbmNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9hZHY3MTc1ID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImFkdjcxNzUiLAkvKiBuYW1lICovCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAotCi0JLmF0dGFjaF9hZGFwdGVyID0gYWR2NzE3NV9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IGFkdjcxNzVfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IGFkdjcxNzVfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZHY3MTc1X2lkW10gPSB7CisJeyAiYWR2NzE3NSIsIDAgfSwKKwl7ICJhZHY3MTc2IiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZHY3MTc1X2lkKTsKIAotc3RhdGljIGludCBfX2luaXQKLWFkdjcxNzVfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfYWR2NzE3NSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotYWR2NzE3NV9leGl0ICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2FkdjcxNzUpOwotfQotCi1tb2R1bGVfaW5pdChhZHY3MTc1X2luaXQpOwotbW9kdWxlX2V4aXQoYWR2NzE3NV9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJhZHY3MTc1IiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQURWNzE3NSwKKwkuY29tbWFuZCA9IGFkdjcxNzVfY29tbWFuZCwKKwkucHJvYmUgPSBhZHY3MTc1X3Byb2JlLAorCS5yZW1vdmUgPSBhZHY3MTc1X3JlbW92ZSwKKwkuaWRfdGFibGUgPSBhZHY3MTc1X2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jCmluZGV4IDllNDM2YWQuLjIxODc1NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYwpAQCAtMTE2LDYgKzExNiw3IEBACiAJaW50IHdpZHRoLCBoZWlnaHQ7CiAJaW50IGZyYW1lX2J5dGVzLCBsaW5lX2J5dGVzOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJdW5zaWduZWQgbG9uZyBpbl91c2U7CiAJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCkBAIC0yNjksNyArMjcwLDcgQEAKIHN0YXRpYyBzc2l6ZV90IGFyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGFyX2RldmljZSAqYXIgPSB2LT5wcml2OworCXN0cnVjdCBhcl9kZXZpY2UgKmFyID0gdmlkZW9fZ2V0X2RydmRhdGEodik7CiAJbG9uZyByZXQgPSBhci0+ZnJhbWVfYnl0ZXM7CQkvKiByZXR1cm4gcmVhZCBieXRlcyAqLwogCXVuc2lnbmVkIGxvbmcgYXJ2Y3IxID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzk5LDcgKzQwMCw3IEBACiAJCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgYXJfZGV2aWNlICphciA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgYXJfZGV2aWNlICphciA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CiAKIAlERUJVRygxLCAiYXJfaW9jdGwoKVxuIik7CiAJc3dpdGNoKGNtZCkgewpAQCAtNjI1LDcgKzYyNiw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYXJfaW5pdGlhbGl6ZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGFyX2RldmljZSAqYXIgPSBkZXYtPnByaXY7CisJc3RydWN0IGFyX2RldmljZSAqYXIgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGxvbmcgY3IgPSAwOwogCWludCBpLGZvdW5kPTA7CiAKQEAgLTczMiw3ICs3MzMsNyBAQAogCiB2b2lkIGFyX3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKQogewotCXN0cnVjdCBhcl9kZXZpY2UgKmFyID0gdmZkLT5wcml2OworCXN0cnVjdCBhcl9kZXZpY2UgKmFyID0gdmlkZW9fZ2V0X2RydmRhdGEodmZkKTsKIAltdXRleF9sb2NrKCZhci0+bG9jayk7CiAJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmZkKTsKIH0KQEAgLTc0MiwxMCArNzQzLDIzIEBACiAgKiBWaWRlbzRMaW51eCBNb2R1bGUgZnVuY3Rpb25zCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGFyX2RldmljZSBhcmRldjsKKworc3RhdGljIGludCBhcl9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmYXJkZXYuaW5fdXNlKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgYXJfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJY2xlYXJfYml0KDAsICZhcmRldi5pbl91c2UpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhcl9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZQk9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuCQk9IGFyX2V4Y2x1c2l2ZV9vcGVuLAorCS5yZWxlYXNlCT0gYXJfZXhjbHVzaXZlX3JlbGVhc2UsCiAJLnJlYWQJCT0gYXJfcmVhZCwKIAkuaW9jdGwJCT0gYXJfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtNzYyLDcgKzc3Niw2IEBACiB9OwogCiAjZGVmaW5lIEFMSUdONCh4KQkoKCgoaW50KSh4KSkgJiAweDMpID09IDApCi1zdGF0aWMgc3RydWN0IGFyX2RldmljZSBhcmRldjsKIAogc3RhdGljIGludCBfX2luaXQgYXJfaW5pdCh2b2lkKQogewpAQCAtODAyLDcgKzgxNSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1jcHkoYXItPnZkZXYsICZhcl90ZW1wbGF0ZSwgc2l6ZW9mKGFyX3RlbXBsYXRlKSk7Ci0JYXItPnZkZXYtPnByaXYgPSBhcjsKKwl2aWRlb19zZXRfZHJ2ZGF0YShhci0+dmRldiwgYXIpOwogCiAJaWYgKHZnYSkgewogCQlhci0+d2lkdGggCT0gQVJfV0lEVEhfVkdBOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYwppbmRleCBlZDQ4OTA4Li5kNjAxMjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYwpAQCAtNDYsNyArNDYsNyBAQAogLyogVHVuZXIgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGF1MDgyOCBib2FyZHMuIEN1cnJlbnRseSBvbmx5IG5lZWRlZAogICogZm9yIEhWUjE1MDBRLCB3aGljaCBoYXMgYW4geGM1MDAwIHR1bmVyLgogICovCi1pbnQgYXUwODI4X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21tYW5kLCBpbnQgYXJnKQoraW50IGF1MDgyOF90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tcG9uZW50LCBpbnQgY29tbWFuZCwgaW50IGFyZykKIHsKIAlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gcHJpdjsKIApAQCAtOTAsNiArOTAsNyBAQAogCWNhc2UgNzIyMjE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KIAljYXNlIDcyMjMxOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIElSLCBBVFNDL1FBTSBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCiAJY2FzZSA3MjI0MTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBObyBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLworCWNhc2UgNzIyNTE6IC8qIFdpblRWLUhWUjk1MHEgKFJldGFpbCwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KIAljYXNlIDcyMzAxOiAvKiBXaW5UVi1IVlI4NTAgKFJldGFpbCwgSVIsIEFUU0MgYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwogCWNhc2UgNzI1MDA6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgTm8gSVIsIEFUU0MvUUFNICovCiAJCWJyZWFrOwpAQCAtMTg1LDcgKzE4Niw3IEBACiB9CiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0cnVjdCB1c2JfZGV2aWNlX2lkIGF1MDgyOF91c2JfaWRfdGFibGUgW10gPSB7CitzdHJ1Y3QgdXNiX2RldmljZV9pZCBhdTA4MjhfdXNiX2lkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg3MjAwKSwKIAkJLmRyaXZlcl9pbmZvID0gQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBRIH0sCiAJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg3MjQwKSwKQEAgLTE5OCw2ICsxOTksOCBAQAogCQkuZHJpdmVyX2luZm8gPSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyMWIpLAogCQkuZHJpdmVyX2luZm8gPSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyMWUpLAorCQkuZHJpdmVyX2luZm8gPSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyMWYpLAogCQkuZHJpdmVyX2luZm8gPSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyODApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jb3JlLmMKaW5kZXggZDg1NmRlOS4uNTc2NWU4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jCkBAIC05MSw3ICs5MSw4IEBACiAJCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVzYmRldiwKIAkJCQl1c2Jfc25kY3RybHBpcGUoZGV2LT51c2JkZXYsIDApLAogCQkJCXJlcXVlc3QsCi0JCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwKKwkJCQkJVVNCX1JFQ0lQX0RFVklDRSwKIAkJCQl2YWx1ZSwgaW5kZXgsCiAJCQkJY3AsIHNpemUsIDEwMDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtZHZiLmMKaW5kZXggYmE5NGJlNy4uYTg4MmNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYwpAQCAtMzYsMTEgKzM2LDM5IEBACiAjZGVmaW5lIF9BVTA4MjhfQlVMS1BJUEUgMHg4MwogI2RlZmluZSBfQlVMS1BJUEVTSVpFIDB4ZTUyMgogCitzdGF0aWMgdTggaGF1cHBhdWdlX2h2cjk1MHFfbGVkX3N0YXRlc1tdID0geworCTB4MDAsIC8qIG9mZiAqLworCTB4MDIsIC8qIHllbGxvdyAqLworCTB4MDQsIC8qIGdyZWVuICovCit9OworCitzdGF0aWMgc3RydWN0IGF1ODUyMl9sZWRfY29uZmlnIGhhdXBwYXVnZV9odnI5NTBxX2xlZF9jZmcgPSB7CisJLmdwaW9fb3V0cHV0ID0gMHgwMGUwLAorCS5ncGlvX291dHB1dF9lbmFibGUgID0gMHg2MDA2LAorCS5ncGlvX291dHB1dF9kaXNhYmxlID0gMHgwNjYwLAorCisJLmdwaW9fbGVkcyA9IDB4MDBlMiwKKwkubGVkX3N0YXRlcyAgPSBoYXVwcGF1Z2VfaHZyOTUwcV9sZWRfc3RhdGVzLAorCS5udW1fbGVkX3N0YXRlcyA9IHNpemVvZihoYXVwcGF1Z2VfaHZyOTUwcV9sZWRfc3RhdGVzKSwKKworCS52c2I4X3N0cm9uZyAgID0gMjAgLyogZEIgKi8gKiAxMCwKKwkucWFtNjRfc3Ryb25nICA9IDI1IC8qIGRCICovICogMTAsCisJLnFhbTI1Nl9zdHJvbmcgPSAzMiAvKiBkQiAqLyAqIDEwLAorfTsKKwogc3RhdGljIHN0cnVjdCBhdTg1MjJfY29uZmlnIGhhdXBwYXVnZV9odnI5NTBxX2NvbmZpZyA9IHsKIAkuZGVtb2RfYWRkcmVzcyA9IDB4OGUgPj4gMSwKIAkuc3RhdHVzX21vZGUgICA9IEFVODUyMl9ERU1PRExPQ0tJTkcsCiAJLnFhbV9pZiAgICAgICAgPSBBVTg1MjJfSUZfNk1IWiwKIAkudnNiX2lmICAgICAgICA9IEFVODUyMl9JRl82TUhaLAorCS5sZWRfY2ZnICAgICAgID0gJmhhdXBwYXVnZV9odnI5NTBxX2xlZF9jZmcsCit9OworCitzdGF0aWMgc3RydWN0IGF1ODUyMl9jb25maWcgZnVzaW9uaGR0djd1c2JfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg4ZSA+PiAxLAorCS5zdGF0dXNfbW9kZSAgID0gQVU4NTIyX0RFTU9ETE9DS0lORywKKwkucWFtX2lmICAgICAgICA9IEFVODUyMl9JRl82TUhaLAorCS52c2JfaWYgICAgICAgID0gQVU4NTIyX0lGXzZNSFosCiB9OwogCiBzdGF0aWMgc3RydWN0IGF1ODUyMl9jb25maWcgaGF1cHBhdWdlX3dvb2RidXJ5X2NvbmZpZyA9IHsKQEAgLTUzLDcgKzgxLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyBoYXVwcGF1Z2VfaHZyOTUwcV90dW5lcmNvbmZpZyA9IHsKIAkuaTJjX2FkZHJlc3MgICAgICA9IDB4NjEsCiAJLmlmX2toeiAgICAgICAgICAgPSA2MDAwLAotCS50dW5lcl9jYWxsYmFjayAgID0gYXUwODI4X3R1bmVyX2NhbGxiYWNrCiB9OwogCiBzdGF0aWMgc3RydWN0IG14bDUwMDd0X2NvbmZpZyBteGw1MDA3dF9odnI5NTBxX2NvbmZpZyA9IHsKQEAgLTE0Niw3ICsxNzMsOCBAQAogCQlwdXJiLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAJCXVzYl9maWxsX2J1bGtfdXJiKHB1cmIsCiAJCQkJICBkZXYtPnVzYmRldiwKLQkJCQkgIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVzYmRldiwgX0FVMDgyOF9CVUxLUElQRSksCisJCQkJICB1c2JfcmN2YnVsa3BpcGUoZGV2LT51c2JkZXYsCisJCQkJCV9BVTA4MjhfQlVMS1BJUEUpLAogCQkJCSAgcHVyYi0+dHJhbnNmZXJfYnVmZmVyLAogCQkJCSAgVVJCX0JVRlNJWkUsCiAJCQkJICB1cmJfY29tcGxldGlvbiwKQEAgLTM1MywxNCArMzgxLDEyIEBACiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjg1MDoKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUToKLQljYXNlIEFVMDgyOF9CT0FSRF9EVklDT19GVVNJT05IRFRWNzoKIAkJZHZiLT5mcm9udGVuZCA9IGR2Yl9hdHRhY2goYXU4NTIyX2F0dGFjaCwKIAkJCQkmaGF1cHBhdWdlX2h2cjk1MHFfY29uZmlnLAogCQkJCSZkZXYtPmkyY19hZGFwKTsKIAkJaWYgKGR2Yi0+ZnJvbnRlbmQgIT0gTlVMTCkKLQkJCWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZHZiLT5mcm9udGVuZCwKLQkJCQkmZGV2LT5pMmNfYWRhcCwKLQkJCQkmaGF1cHBhdWdlX2h2cjk1MHFfdHVuZXJjb25maWcsIGRldik7CisJCQlkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsIGR2Yi0+ZnJvbnRlbmQsICZkZXYtPmkyY19hZGFwLAorCQkJCSAgICZoYXVwcGF1Z2VfaHZyOTUwcV90dW5lcmNvbmZpZyk7CiAJCWJyZWFrOwogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBRX01YTDoKIAkJZHZiLT5mcm9udGVuZCA9IGR2Yl9hdHRhY2goYXU4NTIyX2F0dGFjaCwKQEAgLTM4MCw2ICs0MDYsMTYgQEAKIAkJCQkgICAweDYwLCAmZGV2LT5pMmNfYWRhcCwKIAkJCQkgICAmaGF1cHBhdWdlX3dvb2RidXJ5X3R1bmVyY29uZmlnKTsKIAkJYnJlYWs7CisJY2FzZSBBVTA4MjhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVjc6CisJCWR2Yi0+ZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGF1ODUyMl9hdHRhY2gsCisJCQkJJmZ1c2lvbmhkdHY3dXNiX2NvbmZpZywKKwkJCQkmZGV2LT5pMmNfYWRhcCk7CisJCWlmIChkdmItPmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZHZiLT5mcm9udGVuZCwKKwkJCQkmZGV2LT5pMmNfYWRhcCwKKwkJCQkmaGF1cHBhdWdlX2h2cjk1MHFfdHVuZXJjb25maWcpOworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRoZSBmcm9udGVuZCBvZiB5b3VyIERWQi9BVFNDIGNhcmQgIgogCQkgICAgICAgImlzbid0IHN1cHBvcnRlZCB5ZXRcbiIpOwpAQCAtMzkwLDYgKzQyNiw4IEBACiAJCSAgICAgICBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CisJLyogZGVmaW5lIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayBwb2ludGVyICovCisJZHZiLT5mcm9udGVuZC0+Y2FsbGJhY2sgPSBhdTA4MjhfdHVuZXJfY2FsbGJhY2s7CiAKIAkvKiByZWdpc3RlciBldmVyeXRoaW5nICovCiAJcmV0ID0gZHZiX3JlZ2lzdGVyKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC5oCmluZGV4IDRmMTBmZjMuLjlkNmExMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC5oCkBAIC0xMDMsNyArMTAzLDggQEAKIGV4dGVybiBzdHJ1Y3QgYXUwODI4X2JvYXJkIGF1MDgyOF9ib2FyZHNbXTsKIGV4dGVybiBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhdTA4MjhfdXNiX2lkX3RhYmxlW107CiBleHRlcm4gdm9pZCBhdTA4MjhfZ3Bpb19zZXR1cChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KTsKLWV4dGVybiBpbnQgYXUwODI4X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21tYW5kLCBpbnQgYXJnKTsKK2V4dGVybiBpbnQgYXUwODI4X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21wb25lbnQsCisJCQkJIGludCBjb21tYW5kLCBpbnQgYXJnKTsKIGV4dGVybiB2b2lkIGF1MDgyOF9jYXJkX3NldHVwKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCmluZGV4IGRkZDJhNzkuLmEwN2I3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKQEAgLTI5LDQ0ICsyOSwyNSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkJyb29rdHJlZS04MTkgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1pa2UgQmVybnNvbiAmIERhdmUgUGVya3MiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCi0jZGVmaW5lIEkyQ19OQU1FKHMpIChzKS0+bmFtZQotCi0KIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBkcHJpbnRrKG51bSwgZm9ybWF0LCBhcmdzLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZyA+PSBudW0pIFwKLQkJCXByaW50ayhmb3JtYXQsICMjYXJncyk7IFwKLQl9IHdoaWxlICgwKQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgYnQ4MTkgewpAQCAtOTcsMTQgKzc4LDkgQEAKIAl7ODU4IC0gMjQsIDIwLCA1MjUgLSAyLCAxLCAweDAwZjgsIDB4MDAwMH0sCiB9OwogCi0jZGVmaW5lICAgSTJDX0JUODE5ICAgICAgICAweDhhCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1idDgxOV93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBidDgxOV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC0xMTIsMjQgKzg4LDE1IEBACiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWJ0ODE5X3NldGJpdCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnLAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICBiaXQsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgYnQ4MTlfc2V0Yml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggYml0LCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXJldHVybiBidDgxOV93cml0ZShjbGllbnQsIHJlZywKLQkJCSAgIChkZWNvZGVyLT4KLQkJCSAgICByZWdbcmVnXSAmIH4oMSA8PCBiaXQpKSB8Ci0JCQkgICAgKHZhbHVlID8gKDEgPDwgYml0KSA6IDApKTsKKwkJKGRlY29kZXItPnJlZ1tyZWddICYgfigxIDw8IGJpdCkpIHwgKHZhbHVlID8gKDEgPDwgYml0KSA6IDApKTsKIH0KIAotc3RhdGljIGludAotYnQ4MTlfd3JpdGVfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSAgIGNvbnN0IHU4ICAgICAgICAgICpkYXRhLAotCQkgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCBidDgxOV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnOwpAQCAtMTUwLDEwICsxMTcsOSBAQAogCQkJCSAgICBkZWNvZGVyLT5yZWdbcmVnKytdID0gZGF0YVsxXTsKIAkJCQlsZW4gLT0gMjsKIAkJCQlkYXRhICs9IDI7Ci0JCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJgotCQkJCSBibG9ja19sZW4gPCAzMik7Ci0JCQlpZiAoKHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsCi0JCQkJCQkgICBibG9ja19sZW4pKSA8IDApCisJCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJiBibG9ja19sZW4gPCAzMik7CisJCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLCBibG9ja19sZW4pOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewpAQCAtMTY5LDIwICsxMzUsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludAotYnQ4MTlfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgdTggICAgICAgICAgICAgICAgIHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODE5X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQogewogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQogCi1zdGF0aWMgaW50Ci1idDgxOV9pbml0IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBidDgxOV9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBpbml0W10gPSB7Ci0JCS8vMHgxZiwgMHgwMCwgICAgIC8qIFJlc2V0ICovCisJCS8qMHgxZiwgMHgwMCwqLyAgICAgLyogUmVzZXQgKi8KIAkJMHgwMSwgMHg1OSwJLyogMHgwMSBpbnB1dCBmb3JtYXQgKi8KIAkJMHgwMiwgMHgwMCwJLyogMHgwMiB0ZW1wb3JhbCBkZWNpbWF0aW9uICovCiAJCTB4MDMsIDB4MTIsCS8qIDB4MDMgQ3JvcHBpbmcgbXNiICovCkBAIC0yMTgsMTIgKzE4MSwxMCBAQAogCXN0cnVjdCB0aW1pbmcgKnRpbWluZyA9ICZ0aW1pbmdfZGF0YVtkZWNvZGVyLT5ub3JtXTsKIAogCWluaXRbMHgwMyAqIDIgLSAxXSA9Ci0JICAgICgoKHRpbWluZy0+dmRlbGF5ID4+IDgpICYgMHgwMykgPDwgNikgfCAoKCh0aW1pbmctPgotCQkJCQkJICAgICAgIHZhY3RpdmUgPj4gOCkgJgotCQkJCQkJICAgICAgMHgwMykgPDwgNCkgfAotCSAgICAoKCh0aW1pbmctPmhkZWxheSA+PiA4KSAmIDB4MDMpIDw8IDIpIHwgKCh0aW1pbmctPgotCQkJCQkJICAgICAgaGFjdGl2ZSA+PiA4KSAmCi0JCQkJCQkgICAgIDB4MDMpOworCSAgICAoKCh0aW1pbmctPnZkZWxheSA+PiA4KSAmIDB4MDMpIDw8IDYpIHwKKwkgICAgKCgodGltaW5nLT52YWN0aXZlID4+IDgpICYgMHgwMykgPDwgNCkgfAorCSAgICAoKCh0aW1pbmctPmhkZWxheSA+PiA4KSAmIDB4MDMpIDw8IDIpIHwKKwkgICAgKCh0aW1pbmctPmhhY3RpdmUgPj4gOCkgJiAweDAzKTsKIAlpbml0WzB4MDQgKiAyIC0gMV0gPSB0aW1pbmctPnZkZWxheSAmIDB4ZmY7CiAJaW5pdFsweDA1ICogMiAtIDFdID0gdGltaW5nLT52YWN0aXZlICYgMHhmZjsKIAlpbml0WzB4MDYgKiAyIC0gMV0gPSB0aW1pbmctPmhkZWxheSAmIDB4ZmY7CkBAIC0yMzgsMjcgKzE5OSwyMiBAQAogCiAJLyogaW5pdCAqLwogCXJldHVybiBidDgxOV93cml0ZV9ibG9jayhjbGllbnQsIGluaXQsIHNpemVvZihpbml0KSk7Ci0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludAotYnQ4MTlfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgdW5zaWduZWQgaW50ICAgICAgIGNtZCwKLQkgICAgICAgdm9pZCAgICAgICAgICAgICAgKmFyZykKK3N0YXRpYyBpbnQgYnQ4MTlfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKIHsKIAlpbnQgdGVtcDsKIAogCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JaWYgKCFkZWNvZGVyLT5pbml0aWFsaXplZCkgewkvLyBGaXJzdCBjYWxsIHRvIGJ0ODE5X2luaXQgY291bGQgYmUKLQkJYnQ4MTlfaW5pdChjbGllbnQpOwkvLyB3aXRob3V0ICNGUlNUID0gMAorCWlmICghZGVjb2Rlci0+aW5pdGlhbGl6ZWQpIHsJLyogRmlyc3QgY2FsbCB0byBidDgxOV9pbml0IGNvdWxkIGJlICovCisJCWJ0ODE5X2luaXQoY2xpZW50KTsJLyogd2l0aG91dCAjRlJTVCA9IDAgKi8KIAkJZGVjb2Rlci0+aW5pdGlhbGl6ZWQgPSAxOwogCX0KIAogCXN3aXRjaCAoY21kKSB7Ci0KIAljYXNlIDA6CiAJCS8qIFRoaXMgaXMganVzdCBmb3IgdGVzdGluZyEhISAqLwogCQlidDgxOV9pbml0KGNsaWVudCk7CkBAIC0yNzQsOCArMjMwLDggQEAKIAkJCSAgICAgVklERU9fREVDT0RFUl9DQ0lSOwogCQljYXAtPmlucHV0cyA9IDg7CiAJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKIAl7CkBAIC0yODUsOSArMjQxLDkgQEAKIAogCQlzdGF0dXMgPSBidDgxOV9yZWFkKGNsaWVudCwgMHgwMCk7CiAJCXJlcyA9IDA7Ci0JCWlmICgoc3RhdHVzICYgMHg4MCkpIHsKKwkJaWYgKChzdGF0dXMgJiAweDgwKSkKIAkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwotCQl9CisKIAkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7CiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7CkBAIC0yOTcsMjggKzI1MywyNSBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJaWYgKChzdGF0dXMgJiAweDEwKSkgeworCQkJaWYgKChzdGF0dXMgJiAweDEwKSkKIAkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCX0KIAkJCWJyZWFrOwogCQl9CiAJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKIAkJKmlhcmcgPSByZXM7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBnZXQgc3RhdHVzICV4XG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJKmlhcmcpOwotCX0KKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZ2V0IHN0YXR1cyAleFxuIiwgKmlhcmcpOwogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX05PUk06CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAJCXN0cnVjdCB0aW1pbmcgKnRpbWluZyA9IE5VTEw7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzZXQgbm9ybSAleFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCSppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm0gJXhcbiIsICppYXJnKTsKIAogCQlzd2l0Y2ggKCppYXJnKSB7CiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgpAQCAtMzI3LDcgKzI4MCw3IEBACiAJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCA1LCAwKTsKIAkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgxOCwgMHg2OCk7CiAJCQlidDgxOV93cml0ZShjbGllbnQsIDB4MTksIDB4NWQpOwotCQkJLy9idDgxOV9zZXRiaXQoY2xpZW50LCAweDFhLCAgNSwgMSk7CisJCQkvKiBidDgxOV9zZXRiaXQoY2xpZW50LCAweDFhLCAgNSwgMSk7ICovCiAJCQl0aW1pbmcgPSAmdGltaW5nX2RhdGFbVklERU9fTU9ERV9OVFNDXTsKIAkJCWJyZWFrOwogCQljYXNlIFZJREVPX01PREVfUEFMOgpAQCAtMzM2LDcgKzI4OSw3IEBACiAJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCA1LCAxKTsKIAkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgxOCwgMHg3Zik7CiAJCQlidDgxOV93cml0ZShjbGllbnQsIDB4MTksIDB4NzIpOwotCQkJLy9idDgxOV9zZXRiaXQoY2xpZW50LCAweDFhLCAgNSwgMCk7CisJCQkvKiBidDgxOV9zZXRiaXQoY2xpZW50LCAweDFhLCAgNSwgMCk7ICovCiAJCQl0aW1pbmcgPSAmdGltaW5nX2RhdGFbVklERU9fTU9ERV9QQUxdOwogCQkJYnJlYWs7CiAJCWNhc2UgVklERU9fTU9ERV9BVVRPOgpAQCAtMzQ0LDEwICsyOTcsNyBAQAogCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwMSwgMSwgMCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogdW5zdXBwb3J0ZWQgbm9ybSAlZFxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCAqaWFyZyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ1bnN1cHBvcnRlZCBub3JtICV4XG4iLCAqaWFyZyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0zNjYsMTkgKzMxNiwxNyBAQAogCQl9CiAKIAkJZGVjb2Rlci0+bm9ybSA9ICppYXJnOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHNldCBpbnB1dCAleFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCSppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IGlucHV0ICV4XG4iLCAqaWFyZyk7CiAKLQkJaWYgKCppYXJnIDwgMCB8fCAqaWFyZyA+IDcpIHsKKwkJaWYgKCppYXJnIDwgMCB8fCAqaWFyZyA+IDcpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCiAJCWlmIChkZWNvZGVyLT5pbnB1dCAhPSAqaWFyZykgewogCQkJZGVjb2Rlci0+aW5wdXQgPSAqaWFyZzsKQEAgLTM5MSw1MiArMzM5LDQyIEBACiAJCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgxYSwgMSwgMCk7CiAJCQl9CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc2V0IG91dHB1dCAleFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCSppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG91dHB1dCAleFxuIiwgKmlhcmcpOwogCiAJCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKSB7CisJCWlmICgqaWFyZyAhPSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCQlpbnQgZW5hYmxlID0gKCppYXJnICE9IDApOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogZW5hYmxlIG91dHB1dCAleFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksICppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZW5hYmxlIG91dHB1dCAleFxuIiwgKmlhcmcpOwogCiAJCWlmIChkZWNvZGVyLT5lbmFibGUgIT0gZW5hYmxlKSB7CiAJCQlkZWNvZGVyLT5lbmFibGUgPSBlbmFibGU7Ci0KLQkJCWlmIChkZWNvZGVyLT5lbmFibGUpIHsKLQkJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDE2LCA3LCAwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgxNiwgNywgMSk7Ci0JCQl9CisJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDE2LCA3LCAhZW5hYmxlKTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgogCXsKIAkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnBpYyA9IGFyZzsKIAotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0lORk8KLQkJCSIlczogc2V0IHBpY3R1cmUgYnJpZ2h0bmVzcyAlZCBjb250cmFzdCAlZCBjb2xvdXIgJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBwaWMtPmJyaWdodG5lc3MsIHBpYy0+Y29udHJhc3QsCi0JCQlwaWMtPmNvbG91cik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJzZXQgcGljdHVyZSBicmlnaHRuZXNzICVkIGNvbnRyYXN0ICVkIGNvbG91ciAlZFxuIiwKKwkJCXBpYy0+YnJpZ2h0bmVzcywgcGljLT5jb250cmFzdCwgcGljLT5jb2xvdXIpOwogCiAKIAkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBwaWMtPmJyaWdodG5lc3MpIHsKQEAgLTQ3NCw4ICs0MTIsOCBAQAogCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDBmLAogCQkJCSAgICAxMjggLSAoZGVjb2Rlci0+aHVlID4+IDgpKTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00ODYsNTUgKzQyNCw0NCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKgotICogR2VuZXJpYyBpMmMgcHJvYmUKLSAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKLSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQlJMkNfQlQ4MTkgPj4gMSwKLQlJMkNfQ0xJRU5UX0VORCwKLX07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDhhID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKK0kyQ19DTElFTlRfSU5TTU9EOwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKLQkubm9ybWFsX2kyYwkJPSBub3JtYWxfaTJjLAotCS5wcm9iZQkJCT0gJmlnbm9yZSwKLQkuaWdub3JlCQkJPSAmaWdub3JlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfYnQ4MTk7Ci0KLXN0YXRpYyBpbnQKLWJ0ODE5X2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICBpbnQgICAgICAgICAgICAgICAgIGFkZHJlc3MsCi0JCSAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQorc3RhdGljIGludCBidDgxOV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCWludCBpLCBpZDsKKwlpbnQgaSwgdmVyOwogCXN0cnVjdCBidDgxOSAqZGVjb2RlcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCi0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJImJ0ODE5OiBkZXRlY3RpbmcgYnQ4MTkgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKLQkJYWRkcmVzcyA8PCAxKTsKKwljb25zdCBjaGFyICpuYW1lOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfYnQ4MTk7CisJdmVyID0gYnQ4MTlfcmVhZChjbGllbnQsIDB4MTcpOworCXN3aXRjaCAodmVyICYgMHhmMCkgeworCWNhc2UgMHg3MDoKKwkJbmFtZSA9ICJidDgxOWEiOworCQlicmVhazsKKwljYXNlIDB4NjA6CisJCW5hbWUgPSAiYnQ4MTdhIjsKKwkJYnJlYWs7CisJY2FzZSAweDIwOgorCQluYW1lID0gImJ0ODE1YSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJ1bmtub3duIGNoaXAgdmVyc2lvbiAweCUwMnhcbiIsIHZlcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXY0bF9pbmZvKGNsaWVudCwgIiVzIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBuYW1lLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0ODE5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChkZWNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwogCWRlY29kZXItPmlucHV0ID0gMDsKIAlkZWNvZGVyLT5lbmFibGUgPSAxOwpAQCAtNTQ1LDk3ICs0NzIsMzMgQEAKIAlkZWNvZGVyLT5pbml0aWFsaXplZCA9IDA7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CiAKLQlpZCA9IGJ0ODE5X3JlYWQoY2xpZW50LCAweDE3KTsKLQlzd2l0Y2ggKGlkICYgMHhmMCkgewotCWNhc2UgMHg3MDoKLQkJc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAiYnQ4MTlhIiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKLQkJYnJlYWs7Ci0JY2FzZSAweDYwOgotCQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJidDgxN2EiLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOwotCQlicmVhazsKLQljYXNlIDB4MjA6Ci0JCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgImJ0ODE1YSIsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiYnQ4MTk6IHVua25vd24gY2hpcCB2ZXJzaW9uIDB4JXggKHZlciAweCV4KVxuIiwKLQkJCWlkICYgMHhmMCwgaWQgJiAweDBmKTsKLQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWkgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChpKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGRlY29kZXIpOwotCQlyZXR1cm4gaTsKLQl9Ci0KIAlpID0gYnQ4MTlfaW5pdChjbGllbnQpOwotCWlmIChpIDwgMCkgewotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlc19hdHRhY2g6IGluaXQgc3RhdHVzICVkXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSk7Ci0JfSBlbHNlIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9JTkZPCi0JCQkiJXNfYXR0YWNoOiBjaGlwIHZlcnNpb24gMHgleCBhdCBhZGRyZXNzIDB4JXhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpZCAmIDB4MGYsCi0JCQljbGllbnQtPmFkZHIgPDwgMSk7Ci0JfQotCisJaWYgKGkgPCAwKQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IHN0YXR1cyAlZFxuIiwgaSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWJ0ODE5X2F0dGFjaF9hZGFwdGVyIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGJ0ODE5X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJmJ0ODE5X2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1idDgxOV9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7Ci0KLQllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlrZnJlZShkZWNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9idDgxOSA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJidDgxOSIsCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9CVDgxOSwKLQotCS5hdHRhY2hfYWRhcHRlciA9IGJ0ODE5X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gYnQ4MTlfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IGJ0ODE5X2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYnQ4MTlfaWRbXSA9IHsKKwl7ICJidDgxOWEiLCAwIH0sCisJeyAiYnQ4MTdhIiwgMCB9LAorCXsgImJ0ODE1YSIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYnQ4MTlfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdAotYnQ4MTlfaW5pdF9tb2R1bGUgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX2J0ODE5KTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1idDgxOV9leGl0ICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2J0ODE5KTsKLX0KLQotbW9kdWxlX2luaXQoYnQ4MTlfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoYnQ4MTlfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAiYnQ4MTkiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9CVDgxOSwKKwkuY29tbWFuZCA9IGJ0ODE5X2NvbW1hbmQsCisJLnByb2JlID0gYnQ4MTlfcHJvYmUsCisJLnJlbW92ZSA9IGJ0ODE5X3JlbW92ZSwKKwkuaWRfdGFibGUgPSBidDgxOV9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMKaW5kZXggOThlZTJkOC4uNDIxMzg2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYwpAQCAtMjksNDcgKzI5LDI4IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9va3RyZWUtODU2QSB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWlrZSBCZXJuc29uICYgRGF2ZSBQZXJrcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0KLSNkZWZpbmUgSTJDX05BTUUocykgKHMpLT5uYW1lCi0KLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNkZWZpbmUgUkVHX09GRlNFVAkweERBCi0jZGVmaW5lIEJUODU2X05SX1JFRwk2CisjZGVmaW5lIEJUODU2X1JFR19PRkZTRVQJMHhEQQorI2RlZmluZSBCVDg1Nl9OUl9SRUcJCTYKIAogc3RydWN0IGJ0ODU2IHsKIAl1bnNpZ25lZCBjaGFyIHJlZ1tCVDg1Nl9OUl9SRUddOwpAQCAtNzgsNjEgKzU5LDQ2IEBACiAJaW50IGVuYWJsZTsKIH07CiAKLSNkZWZpbmUgICBJMkNfQlQ4NTYgICAgICAgIDB4ODgKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLWJ0ODU2X3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODU2X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQllbmNvZGVyLT5yZWdbcmVnIC0gUkVHX09GRlNFVF0gPSB2YWx1ZTsKKwllbmNvZGVyLT5yZWdbcmVnIC0gQlQ4NTZfUkVHX09GRlNFVF0gPSB2YWx1ZTsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotYnQ4NTZfc2V0Yml0IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIGJpdCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBidDg1Nl9zZXRiaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCBiaXQsIHU4IHZhbHVlKQogewogCXN0cnVjdCBidDg1NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJcmV0dXJuIGJ0ODU2X3dyaXRlKGNsaWVudCwgcmVnLAotCQkJICAgKGVuY29kZXItPgotCQkJICAgIHJlZ1tyZWcgLSBSRUdfT0ZGU0VUXSAmIH4oMSA8PCBiaXQpKSB8Ci0JCQkgICAgKHZhbHVlID8gKDEgPDwgYml0KSA6IDApKTsKKwkJKGVuY29kZXItPnJlZ1tyZWcgLSBCVDg1Nl9SRUdfT0ZGU0VUXSAmIH4oMSA8PCBiaXQpKSB8CisJCQkJKHZhbHVlID8gKDEgPDwgYml0KSA6IDApKTsKIH0KIAotc3RhdGljIHZvaWQKLWJ0ODU2X2R1bXAgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCBidDg1Nl9kdW1wKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJaW50IGk7CiAJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXIgZHVtcDoiLCBJMkNfTkFNRShjbGllbnQpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJyZWdpc3RlciBkdW1wOlxuIik7CiAJZm9yIChpID0gMDsgaSA8IEJUODU2X05SX1JFRzsgaSArPSAyKQotCQlwcmludGsoIiAlMDJ4IiwgZW5jb2Rlci0+cmVnW2ldKTsKLQlwcmludGsoIlxuIik7CisJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwgZW5jb2Rlci0+cmVnW2ldKTsKKwlwcmludGsoS0VSTl9DT05UICJcbiIpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50Ci1idDg1Nl9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgY21kLAotCSAgICAgICB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCBidDg1Nl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBidDg1NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJc3dpdGNoIChjbWQpIHsKLQogCWNhc2UgMDoKIAkJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICJidDg1NjogaW5pdFxuIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXRcbiIpOwogCQlidDg1Nl93cml0ZShjbGllbnQsIDB4ZGMsIDB4MTgpOwogCQlidDg1Nl93cml0ZShjbGllbnQsIDB4ZGEsIDApOwogCQlidDg1Nl93cml0ZShjbGllbnQsIDB4ZGUsIDApOwpAQCAtMTQyLDcgKzEwOCw2IEBACiAJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDQsIDEpOwogCiAJCXN3aXRjaCAoZW5jb2Rlci0+bm9ybSkgewotCiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgogCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMiwgMCk7CiAJCQlicmVhazsKQEAgLTE2MywyNiArMTI4LDIzIEBACiAJewogCQlzdHJ1Y3QgdmlkZW9fZW5jb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBnZXQgY2FwYWJpbGl0aWVzXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImdldCBjYXBhYmlsaXRpZXNcbiIpOwogCiAJCWNhcC0+ZmxhZ3MgPSBWSURFT19FTkNPREVSX1BBTCB8CiAJCQkgICAgIFZJREVPX0VOQ09ERVJfTlRTQyB8CiAJCQkgICAgIFZJREVPX0VOQ09ERVJfQ0NJUjsKIAkJY2FwLT5pbnB1dHMgPSAyOwogCQljYXAtPm91dHB1dHMgPSAxOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBFTkNPREVSX1NFVF9OT1JNOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc2V0IG5vcm0gJWRcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQkqaWFyZyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBub3JtICVkXG4iLCAqaWFyZyk7CiAKIAkJc3dpdGNoICgqaWFyZykgewotCiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgogCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMiwgMCk7CiAJCQlicmVhazsKQEAgLTE5NSwyNyArMTU3LDIzIEBACiAKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KIAkJZW5jb2Rlci0+bm9ybSA9ICppYXJnOwogCQlpZiAoZGVidWcgIT0gMCkKIAkJCWJ0ODU2X2R1bXAoY2xpZW50KTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzZXQgaW5wdXQgJWRcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCQkqaWFyZyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBpbnB1dCAlZFxuIiwgKmlhcmcpOwogCiAJCS8qIFdlIG9ubHkgaGF2ZSB2aWRlbyBidXMuCiAJCSAqIGlhcmcgPSAwOiBpbnB1dCBpcyBmcm9tIGJ0ODE5CiAJCSAqIGlhcmcgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAgKi8KLQogCQlzd2l0Y2ggKCppYXJnKSB7Ci0KIAkJY2FzZSAwOgogCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgNCwgMCk7CiAJCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCAzLCAxKTsKQEAgLTIzNCwyNyArMTkyLDI0IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KIAogCQlpZiAoZGVidWcgIT0gMCkKIAkJCWJ0ODU2X2R1bXAoY2xpZW50KTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc2V0IG91dHB1dCAlZFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCSppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG91dHB1dCAlZFxuIiwgKmlhcmcpOwogCiAJCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKSB7CisJCWlmICgqaWFyZyAhPSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgRU5DT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKQEAgLTI2MiwxMCArMjE3LDkgQEAKIAogCQllbmNvZGVyLT5lbmFibGUgPSAhISppYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogZW5hYmxlIG91dHB1dCAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGVuY29kZXItPmVuYWJsZSk7Ci0JfQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJlbmFibGUgb3V0cHV0ICVkXG4iLCBlbmNvZGVyLT5lbmFibGUpOwogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI3Niw2NCArMjMwLDI5IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQlQ4NTYgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9idDg1NjsKLQotc3RhdGljIGludAotYnQ4NTZfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICBpbnQgICAgICAgICAgICAgICAgIGtpbmQpCitzdGF0aWMgaW50IGJ0ODU2X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXI7CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkiYnQ4NTYuYzogZGV0ZWN0aW5nIGJ0ODU2IGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCi0JCWFkZHJlc3MgPDwgMSk7Ci0KIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9idDg1NjsKLQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJidDg1NiIsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJZW5jb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBidDg1NiksIEdGUF9LRVJORUwpOwotCWlmIChlbmNvZGVyID09IE5VTEwpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwlpZiAoZW5jb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJZW5jb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKIAllbmNvZGVyLT5lbmFibGUgPSAxOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOwogCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZW5jb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQogCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkYywgMHgxOCk7CiAJYnQ4NTZfd3JpdGUoY2xpZW50LCAweGRhLCAwKTsKIAlidDg1Nl93cml0ZShjbGllbnQsIDB4ZGUsIDApOwpAQCAtMzU5LDY1ICsyNzgsMjYgQEAKIAogCWlmIChkZWJ1ZyAhPSAwKQogCQlidDg1Nl9kdW1wKGNsaWVudCk7Ci0KLQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXNfYXR0YWNoOiBhdCBhZGRyZXNzIDB4JXhcbiIsIEkyQ19OQU1FKGNsaWVudCksCi0JCWNsaWVudC0+YWRkciA8PCAxKTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1idDg1Nl9hdHRhY2hfYWRhcHRlciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBidDg1Nl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkiYnQ4NTYuYzogc3RhcnRpbmcgcHJvYmUgZm9yIGFkYXB0ZXIgJXMgKDB4JXgpXG4iLAotCQlJMkNfTkFNRShhZGFwdGVyKSwgYWRhcHRlci0+aWQpOwotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJmJ0ODU2X2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1idDg1Nl9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBidDg1NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBlcnI7Ci0KLQllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlrZnJlZShlbmNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9idDg1NiA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJidDg1NiIsCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9CVDg1NiwKLQotCS5hdHRhY2hfYWRhcHRlciA9IGJ0ODU2X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gYnQ4NTZfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IGJ0ODU2X2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYnQ4NTZfaWRbXSA9IHsKKwl7ICJidDg1NiIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYnQ4NTZfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdAotYnQ4NTZfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4NTYpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWJ0ODU2X2V4aXQgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4NTYpOwotfQotCi1tb2R1bGVfaW5pdChidDg1Nl9pbml0KTsKLW1vZHVsZV9leGl0KGJ0ODU2X2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gImJ0ODU2IiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQlQ4NTYsCisJLmNvbW1hbmQgPSBidDg1Nl9jb21tYW5kLAorCS5wcm9iZSA9IGJ0ODU2X3Byb2JlLAorCS5yZW1vdmUgPSBidDg1Nl9yZW1vdmUsCisJLmlkX3RhYmxlID0gYnQ4NTZfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDg2Ni5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDg2Ni5jCmluZGV4IDk2YjQxNTUuLjU5NmY5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NjYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMKQEAgLTI5LDQyICsyOSwyOCBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb29rdHJlZS04NjYgdmlkZW8gZW5jb2RlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1pa2UgQmVybnNvbiAmIERhdmUgUGVya3MiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZQlCVDg2Nl9ERVZOQU1FCSJidDg2NiIKLSNkZWZpbmUgSTJDX0JUODY2CTB4ODgKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0jZGVmaW5lIERFQlVHKHgpCQkvKiBEZWJ1ZyBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IGJ0ODY2IHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjOwotCWludCBhZGRyOwotCXVuc2lnbmVkIGNoYXIgcmVnWzI1Nl07CisJdTggcmVnWzI1Nl07CiAKIAlpbnQgbm9ybTsKIAlpbnQgZW5hYmxlOwpAQCAtNzQsMjAgKzYwLDQ1IEBACiAJaW50IHNhdDsKIH07CiAKLXN0YXRpYyBpbnQgYnQ4NjZfd3JpdGUoc3RydWN0IGJ0ODY2ICpkZXYsCi0JCQl1bnNpZ25lZCBjaGFyIHN1YmFkZHIsIHVuc2lnbmVkIGNoYXIgZGF0YSk7Ci0KLXN0YXRpYyBpbnQgYnQ4NjZfZG9fY29tbWFuZChzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIsCi0JCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGJ0ODY2X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHN1YmFkZHIsIHU4IGRhdGEpCiB7CisJc3RydWN0IGJ0ODY2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdTggYnVmZmVyWzJdOworCWludCBlcnI7CisKKwlidWZmZXJbMF0gPSBzdWJhZGRyOworCWJ1ZmZlclsxXSA9IGRhdGE7CisKKwllbmNvZGVyLT5yZWdbc3ViYWRkcl0gPSBkYXRhOworCisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAid3JpdGUgMHglMDJ4ID0gMHglMDJ4XG4iLCBzdWJhZGRyLCBkYXRhKTsKKworCWZvciAoZXJyID0gMDsgZXJyIDwgMzspIHsKKwkJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZmZlciwgMikgPT0gMikKKwkJCWJyZWFrOworCQllcnIrKzsKKwkJdjRsX3dhcm4oY2xpZW50LCAiZXJyb3IgIyVkIHdyaXRpbmcgdG8gMHglMDJ4XG4iLAorCQkJCWVyciwgc3ViYWRkcik7CisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDEwMCkpOworCX0KKwlpZiAoZXJyID09IDMpIHsKKwkJdjRsX3dhcm4oY2xpZW50LCAiZ2l2aW5nIHVwXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ0ODY2X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IGJ0ODY2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRU5DT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgogCXsKIAkJc3RydWN0IHZpZGVvX2VuY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwogCi0JCURFQlVHKHByaW50awotCQkgICAgICAoS0VSTl9JTkZPICIlczogZ2V0IGNhcGFiaWxpdGllc1xuIiwKLQkJICAgICAgIGVuY29kZXItPmkyYy0+bmFtZSkpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJnZXQgY2FwYWJpbGl0aWVzXG4iKTsKIAogCQljYXAtPmZsYWdzCiAJCQk9IFZJREVPX0VOQ09ERVJfUEFMCkBAIC05NSwxOCArMTA2LDE2IEBACiAJCQl8IFZJREVPX0VOQ09ERVJfQ0NJUjsKIAkJY2FwLT5pbnB1dHMgPSAyOwogCQljYXAtPm91dHB1dHMgPSAxOworCQlicmVhazsKIAl9Ci0JYnJlYWs7CiAKIAljYXNlIEVOQ09ERVJfU0VUX05PUk06CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKLQkJREVCVUcocHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNldCBub3JtICVkXG4iLAotCQkJICAgICBlbmNvZGVyLT5pMmMtPm5hbWUsICppYXJnKSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBub3JtICVkXG4iLCAqaWFyZyk7CiAKIAkJc3dpdGNoICgqaWFyZykgewotCiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgogCQkJYnJlYWs7CiAKQEAgLTExNSwxMSArMTI0LDEwIEBACiAKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KIAkJZW5jb2Rlci0+bm9ybSA9ICppYXJnOworCQlicmVhazsKIAl9Ci0JYnJlYWs7CiAKIAljYXNlIEVOQ09ERVJfU0VUX0lOUFVUOgogCXsKQEAgLTE1NSw3ICsxNjMsNyBAQAogCQl1OCB2YWw7CiAKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdCkgLyAyOyBpICs9IDIpCi0JCQlidDg2Nl93cml0ZShlbmNvZGVyLCBpbml0W2ldLCBpbml0W2krMV0pOworCQkJYnQ4NjZfd3JpdGUoY2xpZW50LCBpbml0W2ldLCBpbml0W2krMV0pOwogCiAJCXZhbCA9IGVuY29kZXItPnJlZ1sweGRjXTsKIApAQCAtMTY0LDE3ICsxNzIsMTYgQEAKIAkJZWxzZQogCQkJdmFsICY9IH4weDQwOyAvKiAhQ0JTV0FQICovCiAKLQkJYnQ4NjZfd3JpdGUoZW5jb2RlciwgMHhkYywgdmFsKTsKKwkJYnQ4NjZfd3JpdGUoY2xpZW50LCAweGRjLCB2YWwpOwogCiAJCXZhbCA9IGVuY29kZXItPnJlZ1sweGNjXTsKIAkJaWYgKCppYXJnID09IDIpCiAJCQl2YWwgfD0gMHgwMTsgLyogT1NEQkFSICovCiAJCWVsc2UKIAkJCXZhbCAmPSB+MHgwMTsgLyogIU9TREJBUiAqLwotCQlidDg2Nl93cml0ZShlbmNvZGVyLCAweGNjLCB2YWwpOworCQlidDg2Nl93cml0ZShjbGllbnQsIDB4Y2MsIHZhbCk7CiAKLQkJREVCVUcocHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNldCBpbnB1dCAlZFxuIiwKLQkJCSAgICAgZW5jb2Rlci0+aTJjLT5uYW1lLCAqaWFyZykpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgJWRcbiIsICppYXJnKTsKIAogCQlzd2l0Y2ggKCppYXJnKSB7CiAJCWNhc2UgMDoKQEAgLTE4Myw0OCArMTkwLDQ0IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KKwkJYnJlYWs7CiAJfQotCWJyZWFrOwogCiAJY2FzZSBFTkNPREVSX1NFVF9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKLQkJREVCVUcocHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNldCBvdXRwdXQgJWRcbiIsCi0JCQkgICAgIGVuY29kZXItPmkyYy0+bmFtZSwgKmlhcmcpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG91dHB1dCAlZFxuIiwgKmlhcmcpOwogCiAJCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCiAJCWlmICgqaWFyZyAhPSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOwogCX0KLQlicmVhazsKIAogCWNhc2UgRU5DT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCQllbmNvZGVyLT5lbmFibGUgPSAhISppYXJnOwogCi0JCURFQlVHKHByaW50awotCQkgICAgICAoS0VSTl9JTkZPICIlczogZW5hYmxlIG91dHB1dCAlZFxuIiwKLQkJICAgICAgIGVuY29kZXItPmkyYy0+bmFtZSwgZW5jb2Rlci0+ZW5hYmxlKSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImVuYWJsZSBvdXRwdXQgJWRcbiIsIGVuY29kZXItPmVuYWJsZSk7CisJCWJyZWFrOwogCX0KLQlicmVhazsKIAogCWNhc2UgNDcxMToKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAkJX191OCB2YWw7CiAKLQkJcHJpbnRrKCJidDg2Njogc3F1YXJlID0gJWRcbiIsICppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3F1YXJlICVkXG4iLCAqaWFyZyk7CiAKIAkJdmFsID0gZW5jb2Rlci0+cmVnWzB4ZGNdOwogCQlpZiAoKmlhcmcpCiAJCQl2YWwgfD0gMTsgLyogU1FVQVJFICovCiAJCWVsc2UKIAkJCXZhbCAmPSB+MTsgLyogIVNRVUFSRSAqLwotCQlidDg2Nl93cml0ZShlbmNvZGVyLCAweGRjLCB2YWwpOworCQlidDg2Nl93cml0ZShjbGllbnQsIDB4ZGMsIHZhbCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjM1LDE0MSArMjM4LDQ5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnQ4NjZfd3JpdGUoc3RydWN0IGJ0ODY2ICplbmNvZGVyLAotCQkJdW5zaWduZWQgY2hhciBzdWJhZGRyLCB1bnNpZ25lZCBjaGFyIGRhdGEpCi17Ci0JdW5zaWduZWQgY2hhciBidWZmZXJbMl07Ci0JaW50IGVycjsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotCWJ1ZmZlclswXSA9IHN1YmFkZHI7Ci0JYnVmZmVyWzFdID0gZGF0YTsKK0kyQ19DTElFTlRfSU5TTU9EOwogCi0JZW5jb2Rlci0+cmVnW3N1YmFkZHJdID0gZGF0YTsKLQotCURFQlVHKHByaW50awotCSAgICAgICgiJXM6IHdyaXRlIDB4JTAyWCA9IDB4JTAyWFxuIiwKLQkgICAgICAgZW5jb2Rlci0+aTJjLT5uYW1lLCBzdWJhZGRyLCBkYXRhKSk7Ci0KLQlmb3IgKGVyciA9IDA7IGVyciA8IDM7KSB7Ci0JCWlmIChpMmNfbWFzdGVyX3NlbmQoZW5jb2Rlci0+aTJjLCBidWZmZXIsIDIpID09IDIpCi0JCQlicmVhazsKLQkJZXJyKys7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJL08gZXJyb3IgIyVkICIKLQkJICAgICAgICIod3JpdGUgMHglMDJ4LzB4JTAyeClcbiIsCi0JCSAgICAgICBlbmNvZGVyLT5pMmMtPm5hbWUsIGVyciwgZW5jb2Rlci0+YWRkciwgc3ViYWRkcik7Ci0JCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDEwMCkpOwotCX0KLQlpZiAoZXJyID09IDMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGdpdmluZyB1cFxuIiwKLQkJICAgICAgIGVuY29kZXItPmkyYy0+bmFtZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBidDg2Nl9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgYnQ4NjZfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotc3RhdGljIGludCBidDg2Nl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKLQotCi0vKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXQk9IHtJMkNfQlQ4NjY+PjEsIEkyQ19DTElFTlRfRU5EfTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBwcm9iZVsyXQkJPSB7STJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5EfTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmVbMl0JCT0ge0kyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORH07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCW5vcm1hbF9pMmMsCi0JcHJvYmUsCi0JaWdub3JlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfYnQ4NjYgPSB7Ci0JLmRyaXZlci5uYW1lID0gQlQ4NjZfREVWTkFNRSwKLQkuaWQgPSBJMkNfRFJJVkVSSURfQlQ4NjYsCi0JLmF0dGFjaF9hZGFwdGVyID0gYnQ4NjZfYXR0YWNoLAotCS5kZXRhY2hfY2xpZW50ID0gYnQ4NjZfZGV0YWNoLAotCS5jb21tYW5kID0gYnQ4NjZfY29tbWFuZAotfTsKLQotCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgYnQ4NjZfY2xpZW50X3RtcGwgPQotewotCS5uYW1lID0gIihuaWwpIiwKLQkuYWRkciA9IDAsCi0JLmFkYXB0ZXIgPSBOVUxMLAotCS5kcml2ZXIgPSAmaTJjX2RyaXZlcl9idDg2NiwKLX07Ci0KLXN0YXRpYyBpbnQgYnQ4NjZfZm91bmRfcHJvYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgaW50IGFkZHIsIGludCBraW5kKQorc3RhdGljIGludCBidDg2Nl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBidDg2NiAqZW5jb2RlcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOwotCWlmIChjbGllbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtY3B5KGNsaWVudCwgJmJ0ODY2X2NsaWVudF90bXBsLCBzaXplb2YoKmNsaWVudCkpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWVuY29kZXIgPSBremFsbG9jKHNpemVvZigqZW5jb2RlciksIEdGUF9LRVJORUwpOwotCWlmIChlbmNvZGVyID09IE5VTEwpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwlpZiAoZW5jb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBlbmNvZGVyKTsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+YWRkciA9IGFkZHI7Ci0Jc3ByaW50ZihjbGllbnQtPm5hbWUsICIlcy0lMDJ4IiwgQlQ4NjZfREVWTkFNRSwgYWRhcHRlci0+aWQpOwotCi0JZW5jb2Rlci0+aTJjID0gY2xpZW50OwotCWVuY29kZXItPmFkZHIgPSBhZGRyOwotCS8vZW5jb2Rlci0+ZW5jb2Rlcl90eXBlID0gRU5DT0RFUl9UWVBFX1VOS05PV047Ci0KLQkvKiBpbml0aWFsaXplICovCi0KLQlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnQ4NjZfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYnQ4NjZfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JaWYgKGFkYXB0ZXItPmlkID09IEkyQ19IV19CX1pSMzYwNjcpCi0JCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgYnQ4NjZfZm91bmRfcHJvYyk7CisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJ0ODY2X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBidDg2Nl9sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBidDg2NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShlbmNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGFkYXB0ZXItPmlkID09IEkyQ19IV19CX1pSMzYwNjc7CiB9CiAKLXN0YXRpYyBpbnQgYnQ4NjZfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlyZXR1cm4gYnQ4NjZfZG9fY29tbWFuZChlbmNvZGVyLCBjbWQsIGFyZyk7Ci19CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYnQ4NjZfaWRbXSA9IHsKKwl7ICJidDg2NiIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYnQ4NjZfaWQpOwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBidDg2Nl9pbml0KHZvaWQpCi17Ci0JaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4NjYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgYnQ4NjZfZXhpdCh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2J0ODY2KTsKLX0KLQotbW9kdWxlX2luaXQoYnQ4NjZfaW5pdCk7Ci1tb2R1bGVfZXhpdChidDg2Nl9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJidDg2NiIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0JUODY2LAorCS5jb21tYW5kID0gYnQ4NjZfY29tbWFuZCwKKwkucHJvYmUgPSBidDg2Nl9wcm9iZSwKKwkucmVtb3ZlID0gYnQ4NjZfcmVtb3ZlLAorCS5sZWdhY3lfcHJvYmUgPSBidDg2Nl9sZWdhY3lfcHJvYmUsCisJLmlkX3RhYmxlID0gYnQ4NjZfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwppbmRleCA2MDgxZWRjLi4xMzc0MmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJeyAweDAwMjYxODIyLCBCVFRWX0JPQVJEX1RXSU5IQU5fRFNULAkiRE5UViBMaXZlISBNaW5pICJ9LAogCXsgMHhkMjAwZGJjMCwgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzIsCSJEVmlDTyBGdXNpb25IRFRWIDIiIH0sCiAJeyAweDc2M2MwMDhhLCBCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjYwMCwJIkdlb1Zpc2lvbiBHVi02MDAiIH0sCi0KKwl7IDB4MTgwMTEwMDAsIEJUVFZfQk9BUkRfRU5MVFZfRk1fMiwJIkVuY29yZSBFTkwgVFYtRk0tMiIgfSwKIAl7IDAsIC0xLCBOVUxMIH0KIH07CiAKQEAgLTMwMzcsNiArMzAzNywzMSBAQAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCX0sCisJW0JUVFZfQk9BUkRfRU5MVFZfRk1fMl0gPSB7CisJCS8qIEVuY29yZSBUViBUdW5lciBQcm8gRU5MIFRWLUZNLTIKKwkJICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmcgKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkVuY29yZSBFTkwgVFYtRk0tMiIsCisJCS52aWRlb19pbnB1dHMgICA9IDMsCisJCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS50dW5lciAgICAgICAgICA9IDAsCisJCS5zdmhzICAgICAgICAgICA9IDIsCisJCS8qIGJpdCA2ICAgICAgICAgIC0+IElSIGRpc2FibGVkCisJCSAgIGJpdCAxOC8xNyA9IDAwIC0+IG11dGUKKwkJCSAgICAgICAwMSAtPiBlbmFibGUgZXh0ZXJuYWwgYXVkaW8gaW5wdXQKKwkJCSAgICAgICAxMCAtPiBpbnRlcm5hbCBhdWRpbyBpbnB1dCAobW9ubz8pCisJCQkgICAgICAgMTEgLT4gaW50ZXJuYWwgYXVkaW8gaW5wdXQKKwkJICovCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDYwMDQwLAorCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDMgfSwKKwkJLmdwaW9tdXggICAgICAgID0geyAweDYwMDAwLCAweDYwMDAwLCAweDIwMDAwLCAweDIwMDAwIH0sCisJCS5ncGlvbXV0ZSAJPSAwLAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RDTF9NRjAyR0lQXzVOLAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS5oYXNfcmFkaW8gICAgICA9IDEsCisJCS5oYXNfcmVtb3RlICAgICA9IDEsCisJfQogfTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBidHR2X251bV90dmNhcmRzID0gQVJSQVlfU0laRShidHR2X3R2Y2FyZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCmluZGV4IDkzM2VhZWYuLjU4NThiZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKQEAgLTc2LDkgKzc2LDkgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2J1ZnNpemUgPSAweDIwODAwMDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmVzZXRfY3JvcCA9IDE7CiAKLXN0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKLXN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLXN0YXRpYyBpbnQgdmJpX25yID0gLTE7CitzdGF0aWMgaW50IHZpZGVvX25yW0JUVFZfTUFYXSA9IHsgWzAgLi4uIChCVFRWX01BWC0xKV0gPSAtMSB9Oworc3RhdGljIGludCByYWRpb19ucltCVFRWX01BWF0gPSB7IFswIC4uLiAoQlRUVl9NQVgtMSldID0gLTEgfTsKK3N0YXRpYyBpbnQgdmJpX25yW0JUVFZfTUFYXSA9IHsgWzAgLi4uIChCVFRWX01BWC0xKV0gPSAtMSB9Owogc3RhdGljIGludCBkZWJ1Z19sYXRlbmN5OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGZkc3I7CkBAIC0xMDgsOSArMTA4LDYgQEAKIG1vZHVsZV9wYXJhbShkZWJ1Z19sYXRlbmN5LCAgICAgaW50LCAwNjQ0KTsKIAogbW9kdWxlX3BhcmFtKGZkc3IsICAgICAgICAgICAgICBpbnQsIDA0NDQpOwotbW9kdWxlX3BhcmFtKHZpZGVvX25yLCAgICAgICAgICBpbnQsIDA0NDQpOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCAgICAgICAgICBpbnQsIDA0NDQpOwotbW9kdWxlX3BhcmFtKHZiaV9uciwgICAgICAgICAgICBpbnQsIDA0NDQpOwogbW9kdWxlX3BhcmFtKGdidWZmZXJzLCAgICAgICAgICBpbnQsIDA0NDQpOwogbW9kdWxlX3BhcmFtKGdidWZzaXplLCAgICAgICAgICBpbnQsIDA0NDQpOwogbW9kdWxlX3BhcmFtKHJlc2V0X2Nyb3AsICAgICAgICBpbnQsIDA0NDQpOwpAQCAtMTMwLDcgKzEyNywxMCBAQAogbW9kdWxlX3BhcmFtKGZ1bGxfbHVtYV9yYW5nZSwgICBpbnQsIDA0NDQpOwogbW9kdWxlX3BhcmFtKGNvcmluZywgICAgICAgICAgICBpbnQsIDA0NDQpOwogCi1tb2R1bGVfcGFyYW1fYXJyYXkocmFkaW8sIGludCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkocmFkaW8sICAgICAgIGludCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsICAgIGludCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkocmFkaW9fbnIsICAgIGludCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkodmJpX25yLCAgICAgIGludCwgTlVMTCwgMDQ0NCk7CiAKIE1PRFVMRV9QQVJNX0RFU0MocmFkaW8sIlRoZSBUViBjYXJkIHN1cHBvcnRzIHJhZGlvLCBkZWZhdWx0IGlzIDAgKG5vKSIpOwogTU9EVUxFX1BBUk1fREVTQyhiaWdlbmRpYW4sImJ5dGUgb3JkZXIgb2YgdGhlIGZyYW1lYnVmZmVyLCBkZWZhdWx0IGlzIG5hdGl2ZSBlbmRpYW4iKTsKQEAgLTE1Miw2ICsxNTIsOSBAQAogTU9EVUxFX1BBUk1fREVTQyh1dl9yYXRpbywicmF0aW8gYmV0d2VlbiB1IGFuZCB2IGdhaW5zLCBkZWZhdWx0IGlzIDUwIik7CiBNT0RVTEVfUEFSTV9ERVNDKGZ1bGxfbHVtYV9yYW5nZSwidXNlIHRoZSBmdWxsIGx1bWEgcmFuZ2UsIGRlZmF1bHQgaXMgMCAobm8pIik7CiBNT0RVTEVfUEFSTV9ERVNDKGNvcmluZywic2V0IHRoZSBsdW1hIGNvcmluZyBsZXZlbCwgZGVmYXVsdCBpcyAwIChubykiKTsKK01PRFVMRV9QQVJNX0RFU0ModmlkZW9fbnIsICJ2aWRlbyBkZXZpY2UgbnVtYmVycyIpOworTU9EVUxFX1BBUk1fREVTQyh2YmlfbnIsICJ2YmkgZGV2aWNlIG51bWJlcnMiKTsKK01PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJyYWRpbyBkZXZpY2UgbnVtYmVycyIpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oImJ0dHYgLSB2NGwvdjRsMiBkcml2ZXIgbW9kdWxlIGZvciBidDg0OC84NzggYmFzZWQgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIlJhbHBoIE1ldHpsZXIgJiBNYXJjdXMgTWV0emxlciAmIEdlcmQgS25vcnIiKTsKQEAgLTEzNjcsNyArMTM3MCw3IEBACiAJCQkoYnR2LT5ncGlvaXJxID8gQlQ4NDhfSU5UX0dQSU5UIDogMCkgfAogCQkJQlQ4NDhfSU5UX1NDRVJSIHwKIAkJCShmZHNyID8gQlQ4NDhfSU5UX0ZEU1IgOiAwKSB8Ci0JCQlCVDg0OF9JTlRfUklTQ0l8QlQ4NDhfSU5UX09DRVJSfEJUODQ4X0lOVF9WUFJFU3wKKwkJCUJUODQ4X0lOVF9SSVNDSSB8IEJUODQ4X0lOVF9PQ0VSUiB8CiAJCQlCVDg0OF9JTlRfRk1UQ0hHfEJUODQ4X0lOVF9ITE9DS3wKIAkJCUJUODQ4X0lOVF9JMkNET05FLAogCQkJQlQ4NDhfSU5UX01BU0spOwpAQCAtMjY2MSwxOCArMjY2NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnR0dl9lbnVtX2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKLQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQotewotCWlmICgwICE9IGYtPmluZGV4KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0dSRVk7Ci0Jc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAidmJpIGRhdGEiKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGJ0dHZfZW51bV9mbXRfY2FwX292cihzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQogewogCWludCBpbmRleCA9IC0xLCBpOwpAQCAtMzIyNyw2ICszMjE4LDcgQEAKIAogCWRwcmludGsoS0VSTl9ERUJVRyAiYnR0djogb3BlbiBtaW5vcj0lZFxuIixtaW5vcik7CiAKKwlsb2NrX2tlcm5lbCgpOwogCWZvciAoaSA9IDA7IGkgPCBidHR2X251bTsgaSsrKSB7CiAJCWlmIChidHR2c1tpXS52aWRlb19kZXYgJiYKIAkJICAgIGJ0dHZzW2ldLnZpZGVvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKQEAgLTMyNDEsMTYgKzMyMzMsMjAgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCWlmIChOVUxMID09IGJ0dikKKwlpZiAoTlVMTCA9PSBidHYpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlkcHJpbnRrKEtFUk5fREVCVUcgImJ0dHYlZDogb3BlbiBjYWxsZWQgKHR5cGU9JXMpXG4iLAogCQlidHYtPmMubnIsdjRsMl90eXBlX25hbWVzW3R5cGVdKTsKIAogCS8qIGFsbG9jYXRlIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGttYWxsb2Moc2l6ZW9mKCpmaCksR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJKmZoID0gYnR2LT5pbml0OwogCWZoLT50eXBlID0gdHlwZTsKQEAgLTMyNzAsNiArMzI2Niw3IEBACiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBidHR2X2J1ZmZlciksCiAJCQkgICAgZmgpOwogCXNldF90dm5vcm0oYnR2LGJ0di0+dHZub3JtKTsKKwlzZXRfaW5wdXQoYnR2LCBidHYtPmlucHV0LCBidHYtPnR2bm9ybSk7CiAKIAlidHYtPnVzZXJzKys7CiAKQEAgLTMyOTAsNiArMzI4Nyw3IEBACiAJYnR0dl92YmlfZm10X3Jlc2V0KCZmaC0+dmJpX2ZtdCwgYnR2LT50dm5vcm0pOwogCiAJYnR0dl9maWVsZF9jb3VudChidHYpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzMzMCw2ICszMzI4LDEwIEBACiAKIAlidHYtPnVzZXJzLS07CiAJYnR0dl9maWVsZF9jb3VudChidHYpOworCisJaWYgKCFidHYtPnVzZXJzKQorCQlhdWRpb19tdXRlKGJ0diwgMSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzM2Nyw3ICszMzY5LDYgQEAKIAkudmlkaW9jX2dfZm10X3ZpZF9vdmVybGF5ICAgICAgID0gYnR0dl9nX2ZtdF92aWRfb3ZlcmxheSwKIAkudmlkaW9jX3RyeV9mbXRfdmlkX292ZXJsYXkgICAgID0gYnR0dl90cnlfZm10X3ZpZF9vdmVybGF5LAogCS52aWRpb2Nfc19mbXRfdmlkX292ZXJsYXkgICAgICAgPSBidHR2X3NfZm10X3ZpZF9vdmVybGF5LAotCS52aWRpb2NfZW51bV9mbXRfdmJpX2NhcCAgICAgICAgPSBidHR2X2VudW1fZm10X3ZiaV9jYXAsCiAJLnZpZGlvY19nX2ZtdF92YmlfY2FwICAgICAgICAgICA9IGJ0dHZfZ19mbXRfdmJpX2NhcCwKIAkudmlkaW9jX3RyeV9mbXRfdmJpX2NhcCAgICAgICAgID0gYnR0dl90cnlfZm10X3ZiaV9jYXAsCiAJLnZpZGlvY19zX2ZtdF92YmlfY2FwICAgICAgICAgICA9IGJ0dHZfc19mbXRfdmJpX2NhcCwKQEAgLTM0MzAsMjEgKzM0MzEsMjYgQEAKIAogCWRwcmludGsoImJ0dHY6IG9wZW4gbWlub3I9JWRcbiIsbWlub3IpOwogCisJbG9ja19rZXJuZWwoKTsKIAlmb3IgKGkgPSAwOyBpIDwgYnR0dl9udW07IGkrKykgewogCQlpZiAoYnR0dnNbaV0ucmFkaW9fZGV2ICYmIGJ0dHZzW2ldLnJhZGlvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKIAkJCWJ0diA9ICZidHR2c1tpXTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCWlmIChOVUxMID09IGJ0dikKKwlpZiAoTlVMTCA9PSBidHYpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlkcHJpbnRrKCJidHR2JWQ6IG9wZW4gY2FsbGVkIChyYWRpbylcbiIsYnR2LT5jLm5yKTsKIAogCS8qIGFsbG9jYXRlIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGttYWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGZoKQorCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwogCSpmaCA9IGJ0di0+aW5pdDsKIAl2NGwyX3ByaW9fb3BlbigmYnR2LT5wcmlvLCAmZmgtPnByaW8pOwpAQCAtMzQ1Nyw2ICszNDYzLDcgQEAKIAlhdWRpb19pbnB1dChidHYsVFZBVURJT19JTlBVVF9SQURJTyk7CiAKIAltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCkBAIC00MjM1LDcgKzQyNDIsOCBAQAogCiAJaWYgKE5VTEwgPT0gYnR2LT52aWRlb19kZXYpCiAJCWdvdG8gZXJyOwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoYnR2LT52aWRlb19kZXYsVkZMX1RZUEVfR1JBQkJFUix2aWRlb19ucik8MCkKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGJ0di0+dmlkZW9fZGV2LCBWRkxfVFlQRV9HUkFCQkVSLAorCQkJCSAgdmlkZW9fbnJbYnR2LT5jLm5yXSkgPCAwKQogCQlnb3RvIGVycjsKIAlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IHJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWRcbiIsCiAJICAgICAgIGJ0di0+Yy5ucixidHYtPnZpZGVvX2Rldi0+bWlub3IgJiAweDFmKTsKQEAgLTQyNTEsNyArNDI1OSw4IEBACiAKIAlpZiAoTlVMTCA9PSBidHYtPnZiaV9kZXYpCiAJCWdvdG8gZXJyOwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoYnR2LT52YmlfZGV2LFZGTF9UWVBFX1ZCSSx2YmlfbnIpPDApCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShidHYtPnZiaV9kZXYsIFZGTF9UWVBFX1ZCSSwKKwkJCQkgIHZiaV9ucltidHYtPmMubnJdKSA8IDApCiAJCWdvdG8gZXJyOwogCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogcmVnaXN0ZXJlZCBkZXZpY2UgdmJpJWRcbiIsCiAJICAgICAgIGJ0di0+Yy5ucixidHYtPnZiaV9kZXYtPm1pbm9yICYgMHgxZik7CkBAIC00MjYyLDcgKzQyNzEsOCBAQAogCWJ0di0+cmFkaW9fZGV2ID0gdmRldl9pbml0KGJ0diwgJnJhZGlvX3RlbXBsYXRlLCAicmFkaW8iKTsKIAlpZiAoTlVMTCA9PSBidHYtPnJhZGlvX2RldikKIAkJZ290byBlcnI7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShidHYtPnJhZGlvX2RldiwgVkZMX1RZUEVfUkFESU8scmFkaW9fbnIpPDApCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShidHYtPnJhZGlvX2RldiwgVkZMX1RZUEVfUkFESU8sCisJCQkJICByYWRpb19ucltidHYtPmMubnJdKSA8IDApCiAJCWdvdG8gZXJyOwogCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogcmVnaXN0ZXJlZCBkZXZpY2UgcmFkaW8lZFxuIiwKIAkgICAgICAgYnR2LT5jLm5yLGJ0di0+cmFkaW9fZGV2LT5taW5vciAmIDB4MWYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYwppbmRleCBhMzhhZjk4Li4yZjI4OWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYwpAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgImJ0dHZwLmgiCiAKIAotc3RhdGljIGludCBkZWJ1ZzsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsgICAgLyogZGVidWcgbGV2ZWwgKDAsMSwyKSAqLworc3RhdGljIGludCBpcl9kZWJ1ZzsKK21vZHVsZV9wYXJhbShpcl9kZWJ1ZywgaW50LCAwNjQ0KTsKIHN0YXRpYyBpbnQgcmVwZWF0X2RlbGF5ID0gNTAwOwogbW9kdWxlX3BhcmFtKHJlcGVhdF9kZWxheSwgaW50LCAwNjQ0KTsKIHN0YXRpYyBpbnQgcmVwZWF0X3BlcmlvZCA9IDMzOwpAQCAtNDAsNiArNDAsMTIgQEAKIHN0YXRpYyBpbnQgaXJfcmM1X2tleV90aW1lb3V0ID0gMjAwOwogbW9kdWxlX3BhcmFtKGlyX3JjNV9rZXlfdGltZW91dCwgaW50LCAwNjQ0KTsKIAorI3VuZGVmIGRwcmludGsKKyNkZWZpbmUgZHByaW50ayhhcmcuLi4pIGRvIHsJXAorCWlmIChpcl9kZWJ1ZyA+PSAxKQlcCisJCXByaW50ayhhcmcpOwlcCit9IHdoaWxlICgwKQorCiAjZGVmaW5lIERFVk5BTUUgImJ0dHYtaW5wdXQiCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTc5LDYgKzg1LDQ1IEBACiAKIH0KIAorc3RhdGljIHZvaWQgaXJfZW5sdHZfaGFuZGxlX2tleShzdHJ1Y3QgYnR0diAqYnR2KQoreworCXN0cnVjdCBjYXJkX2lyICppciA9IGJ0di0+cmVtb3RlOworCXUzMiBncGlvLCBkYXRhLCBrZXl1cDsKKworCS8qIHJlYWQgZ3BpbyB2YWx1ZSAqLworCWdwaW8gPSBidHR2X2dwaW9fcmVhZCgmYnR2LT5jKTsKKworCS8qIGV4dHJhY3QgZGF0YSAqLworCWRhdGEgPSBpcl9leHRyYWN0X2JpdHMoZ3BpbywgaXItPm1hc2tfa2V5Y29kZSk7CisKKwkvKiBDaGVjayBpZiBpdCBpcyBrZXl1cCAqLworCWtleXVwID0gKGdwaW8gJiBpci0+bWFza19rZXl1cCkgPyAxIDw8IDMxIDogMDsKKworCWlmICgoaXItPmxhc3RfZ3BpbyAmIDB4N2YpICE9IGRhdGEpIHsKKwkJZHByaW50ayhLRVJOX0lORk8gREVWTkFNRSAiOiBncGlvPTB4JXggY29kZT0lZCB8ICVzXG4iLAorCQkJZ3BpbywgZGF0YSwKKwkJCShncGlvICYgaXItPm1hc2tfa2V5dXApID8gIiB1cCIgOiAidXAvZG93biIpOworCisJCWlyX2lucHV0X2tleWRvd24oaXItPmRldiwgJmlyLT5pciwgZGF0YSwgZGF0YSk7CisJCWlmIChrZXl1cCkKKwkJCWlyX2lucHV0X25va2V5KGlyLT5kZXYsICZpci0+aXIpOworCX0gZWxzZSB7CisJCWlmICgoaXItPmxhc3RfZ3BpbyAmIDEgPDwgMzEpID09IGtleXVwKQorCQkJcmV0dXJuOworCisJCWRwcmludGsoS0VSTl9JTkZPIERFVk5BTUUgIjooY250KSBncGlvPTB4JXggY29kZT0lZCB8ICVzXG4iLAorCQkJZ3BpbywgZGF0YSwKKwkJCShncGlvICYgaXItPm1hc2tfa2V5dXApID8gIiB1cCIgOiAiZG93biIpOworCisJCWlmIChrZXl1cCkKKwkJCWlyX2lucHV0X25va2V5KGlyLT5kZXYsICZpci0+aXIpOworCQllbHNlCisJCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5kZXYsICZpci0+aXIsIGRhdGEsIGRhdGEpOworCX0KKworCWlyLT5sYXN0X2dwaW8gPSBkYXRhIHwga2V5dXA7Cit9CisKIHZvaWQgYnR0dl9pbnB1dF9pcnEoc3RydWN0IGJ0dHYgKmJ0dikKIHsKIAlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBidHYtPnJlbW90ZTsKQEAgLTkyLDcgKzEzNywxMCBAQAogCXN0cnVjdCBidHR2ICpidHYgPSAoc3RydWN0IGJ0dHYqKWRhdGE7CiAJc3RydWN0IGNhcmRfaXIgKmlyID0gYnR2LT5yZW1vdGU7CiAKLQlpcl9oYW5kbGVfa2V5KGJ0dik7CisJaWYgKGJ0di0+Yy50eXBlID09IEJUVFZfQk9BUkRfRU5MVFZfRk1fMikKKwkJaXJfZW5sdHZfaGFuZGxlX2tleShidHYpOworCWVsc2UKKwkJaXJfaGFuZGxlX2tleShidHYpOwogCW1vZF90aW1lcigmaXItPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhpci0+cG9sbGluZykpOwogfQogCkBAIC0yODQsNiArMzMyLDE0IEBACiAJCWlyLT5tYXNrX2tleXVwICAgPSAweDAwNjAwMDsKIAkJaXItPnBvbGxpbmcgICAgICA9IDUwOyAvKiBtcyAqLwogCQlicmVhazsKKwljYXNlIEJUVFZfQk9BUkRfRU5MVFZfRk1fMjoKKwkJaXJfY29kZXMgICAgICAgICA9IGlyX2NvZGVzX2VuY29yZV9lbmx0djI7CisJCWlyLT5tYXNrX2tleWNvZGUgPSAweDAwZmQwMDsKKwkJaXItPm1hc2tfa2V5dXAgICA9IDB4MDAwMDgwOworCQlpci0+cG9sbGluZyAgICAgID0gMTsgLyogbXMgKi8KKwkJaXItPmxhc3RfZ3BpbyAgICA9IGlyX2V4dHJhY3RfYml0cyhidHR2X2dwaW9fcmVhZCgmYnR2LT5jKSwKKwkJCQkJCSAgIGlyLT5tYXNrX2tleWNvZGUpOworCQlicmVhazsKIAl9CiAJaWYgKE5VTEwgPT0gaXJfY29kZXMpIHsKIAkJZHByaW50ayhLRVJOX0lORk8gIk9vb3BzOiBJUiBjb25maWcgZXJyb3IgW2NhcmQ9JWRdXG4iLCBidHYtPmMudHlwZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCmluZGV4IDZkOTNkMTZjLi40NmNiOTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaApAQCAtMTc2LDcgKzE3Niw3IEBACiAjZGVmaW5lIEJUVFZfQk9BUkRfVFlQSE9PTl9UVlRVTkVSUENJCSAgIDB4OTUKICNkZWZpbmUgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y2MDAJICAgMHg5NgogI2RlZmluZSBCVFRWX0JPQVJEX0tPWlVNSV9LVFZfMDFDICAgICAgICAgIDB4OTcKLQorI2RlZmluZSBCVFRWX0JPQVJEX0VOTFRWX0ZNXzIJCSAgIDB4OTgKIAogLyogbW9yZSBjYXJkLXNwZWNpZmljIGRlZmluZXMgKi8KICNkZWZpbmUgUFQyMjU0X0xfQ0hBTk5FTCAweDEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0Y3gtcmlzYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idGN4LXJpc2MuYwppbmRleCAzMzI0YWIzLi5hYzFiMjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0Y3gtcmlzYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnRjeC1yaXNjLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAkJICAgICAgIHVuc2lnbmVkIGludCBzaXplKQogewogCV9fbGUzMiAqY3B1OwotCWRtYV9hZGRyX3QgZG1hOworCWRtYV9hZGRyX3QgZG1hID0gMDsKIAogCWlmIChOVUxMICE9IHJpc2MtPmNwdSAmJiByaXNjLT5zaXplIDwgc2l6ZSkKIAkJYnRjeF9yaXNjbWVtX2ZyZWUocGNpLHJpc2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idy1xY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J3LXFjYW0uYwppbmRleCA2ZTM5ZTI1Li5hY2U0ZmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J3LXFjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J3LXFjYW0uYwpAQCAtNDk1LDcgKzQ5NSw3IEBACiAJCXZhbDIgPSAoKChxLT5wb3J0X21vZGUgJiBRQ19NT0RFX01BU0spID09IFFDX0JJRElSKSA/IDI0IDogOCkgKgogCQkgICAgcS0+dHJhbnNmZXJfc2NhbGU7CiAJfQotCXZhbCA9ICh2YWwgKyB2YWwyIC0gMSkgLyB2YWwyOworCXZhbCA9IERJVl9ST1VORF9VUCh2YWwsIHZhbDIpOwogCXFjX2NvbW1hbmQocSwgMHgxMyk7CiAJcWNfY29tbWFuZChxLCB2YWwpOwogCkBAIC02NTEsNyArNjUxLDcgQEAKIAl0cmFuc3BlcmxpbmUgPSBxLT53aWR0aCAqIHEtPmJwcDsKIAlkaXZpc29yID0gKCgocS0+cG9ydF9tb2RlICYgUUNfTU9ERV9NQVNLKSA9PSBRQ19CSURJUikgPyAyNCA6IDgpICoKIAkgICAgcS0+dHJhbnNmZXJfc2NhbGU7Ci0JdHJhbnNwZXJsaW5lID0gKHRyYW5zcGVybGluZSArIGRpdmlzb3IgLSAxKSAvIGRpdmlzb3I7CisJdHJhbnNwZXJsaW5lID0gRElWX1JPVU5EX1VQKHRyYW5zcGVybGluZSwgZGl2aXNvcik7CiAKIAlmb3IgKGkgPSAwLCB5aWVsZCA9IHlpZWxkbGluZXM7IGkgPCBsaW5lc3RvdHJhbnM7IGkrKykKIAl7CkBAIC04OTQsMTAgKzg5NCwyNyBAQAogCXJldHVybiBsZW47CiB9CiAKK3N0YXRpYyBpbnQgcWNhbV9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCBxY2FtX2RldmljZSAqcWNhbSA9IChzdHJ1Y3QgcWNhbV9kZXZpY2UgKilkZXY7CisKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmcWNhbS0+aW5fdXNlKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcWNhbV9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCBxY2FtX2RldmljZSAqcWNhbSA9IChzdHJ1Y3QgcWNhbV9kZXZpY2UgKilkZXY7CisKKwljbGVhcl9iaXQoMCwgJnFjYW0tPmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFjYW1fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gcWNhbV9leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBxY2FtX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bCAgICAgICAgICA9IHFjYW1faW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC05MDksNiArOTI2LDcgQEAKIHsKIAkubmFtZQkJPSAiQ29ubmVjdGl4IFF1aWNrY2FtIiwKIAkuZm9wcyAgICAgICAgICAgPSAmcWNhbV9mb3BzLAorCS5yZWxlYXNlIAk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogI2RlZmluZSBNQVhfQ0FNUyA0CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J3LXFjYW0uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5oCmluZGV4IDY3MDFkYWYuLjhhNjBjNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5oCkBAIC02NSw0ICs2NSw1IEBACiAJaW50IHRvcCwgbGVmdDsKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGludCBzYXZlZF9iaXRzOworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYy1xY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2MtcWNhbS5jCmluZGV4IDdmNmM2YjQuLjE3YWEwYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYy1xY2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jLXFjYW0uYwpAQCAtNTEsNiArNTEsNyBAQAogCWludCBjb250cmFzdCwgYnJpZ2h0bmVzcywgd2hpdGViYWw7CiAJaW50IHRvcCwgbGVmdDsKIAl1bnNpZ25lZCBpbnQgYmlkaXJlY3Rpb25hbDsKKwl1bnNpZ25lZCBsb25nIGluX3VzZTsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKQEAgLTY4NywxMSArNjg4LDI4IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIGludCBxY2FtX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHFjYW1fZGV2aWNlICpxY2FtID0gKHN0cnVjdCBxY2FtX2RldmljZSAqKWRldjsKKworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZxY2FtLT5pbl91c2UpID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCBxY2FtX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHFjYW1fZGV2aWNlICpxY2FtID0gKHN0cnVjdCBxY2FtX2RldmljZSAqKWRldjsKKworCWNsZWFyX2JpdCgwLCAmcWNhbS0+aW5fdXNlKTsKKwlyZXR1cm4gMDsKK30KKwogLyogdmlkZW8gZGV2aWNlIHRlbXBsYXRlICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxY2FtX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHFjYW1fZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gcWNhbV9leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwgICAgICAgICAgPSBxY2FtX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLApAQCAtNzA0LDYgKzcyMiw3IEBACiB7CiAJLm5hbWUJCT0gIkNvbG91ciBRdWlja0NhbSIsCiAJLmZvcHMgICAgICAgICAgID0gJnFjYW1fZm9wcywKKwkucmVsZWFzZSAJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIC8qIEluaXRpYWxpemUgdGhlIFF1aWNrQ2FtIGRyaXZlciBjb250cm9sIHN0cnVjdHVyZS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCmluZGV4IDU0MDVjMzAuLmZjOTQ5N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwpAQCAtMTQ3Niw5ICsxNDc2LDEyIEBACiB7CiAJc3RydWN0IGNhZmVfY2FtZXJhICpjYW07CiAKKwlsb2NrX2tlcm5lbCgpOwogCWNhbSA9IGNhZmVfZmluZF9kZXYoaW1pbm9yKGlub2RlKSk7Ci0JaWYgKGNhbSA9PSBOVUxMKQorCWlmIChjYW0gPT0gTlVMTCkgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAlmaWxwLT5wcml2YXRlX2RhdGEgPSBjYW07CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwpAQCAtMTQ5MCw2ICsxNDkzLDcgQEAKIAl9CiAJKGNhbS0+dXNlcnMpKys7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA5MiwxNSArMjA5Niw4IEBACiAJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgcmV0OwotCXUxNiBjbGFzc3dvcmQ7CiAJc3RydWN0IGNhZmVfY2FtZXJhICpjYW07Ci0JLyoKLQkgKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIGNhbWVyYSBoZXJlIC0gd2UnbGwgZ2V0IGNhbGxzIGZvcgotCSAqIHRoZSBvdGhlciBjYWZlIGRldmljZXMgYXMgd2VsbC4KLQkgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ0xBU1NfREVWSUNFLCAmY2xhc3N3b3JkKTsKLQlpZiAoY2xhc3N3b3JkICE9IFBDSV9DTEFTU19NVUxUSU1FRElBX1ZJREVPKQotCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qCiAJICogU3RhcnQgcHV0dGluZyB0b2dldGhlciBvbmUgb2Ygb3VyIGJpZyBjYW1lcmEgc3RydWN0dXJlcy4KIAkgKi8KQEAgLTIyODgsOCArMjI4NSw4IEBACiAKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhZmVfaWRzW10gPSB7Ci0JeyBQQ0lfREVWSUNFKDB4MTFhYiwgMHg0MTAwKSB9LCAvKiBFdmVudHVhbCByZWFsIElEICovCi0JeyBQQ0lfREVWSUNFKDB4MTFhYiwgMHg0MTAyKSB9LCAvKiBSZWFsbHkgZXZlbnR1YWwgcmVhbCBJRCAqLworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsCisJCSAgICAgUENJX0RFVklDRV9JRF9NQVJWRUxMXzg4QUxQMDFfQ0NJQykgfSwKIAl7IDAsIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKaW5kZXggYTY2MTgwMC4uMTc5OGI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKQEAgLTM5LDEwICszOSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAotI2lmZGVmIENPTkZJR19LTU9ECi0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2VuZGlmCi0KICNpbmNsdWRlICJjcGlhLmgiCiAKIHN0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKQEAgLTMxNTUsNyArMzE1MSw3IEBACiBzdGF0aWMgaW50IGNwaWFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBjYW1fZGF0YSAqY2FtID0gZGV2LT5wcml2OworCXN0cnVjdCBjYW1fZGF0YSAqY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgZXJyOwogCiAJaWYgKCFjYW0pIHsKQEAgLTMyMDIsNyArMzE5OCw3IEBACiAKIAkvKiBTZXQgb3duZXJzaGlwIG9mIC9wcm9jL2NwaWEvdmlkZW9YIHRvIGN1cnJlbnQgdXNlciAqLwogCWlmKGNhbS0+cHJvY19lbnRyeSkKLQkJY2FtLT5wcm9jX2VudHJ5LT51aWQgPSBjdXJyZW50LT51aWQ7CisJCWNhbS0+cHJvY19lbnRyeS0+dWlkID0gY3VycmVudF91aWQoKTsKIAogCS8qIHNldCBtYXJrIGZvciBsb2FkaW5nIGZpcnN0IGZyYW1lIHVuY29tcHJlc3NlZCAqLwogCWNhbS0+Zmlyc3RfZnJhbWUgPSAxOwpAQCAtMzIzMiw3ICszMjI4LDcgQEAKIHN0YXRpYyBpbnQgY3BpYV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgIHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjYW1fZGF0YSAqY2FtID0gZGV2LT5wcml2OworCXN0cnVjdCBjYW1fZGF0YSAqY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChjYW0tPm9wcykgewogCQkvKiBSZXR1cm4gb3duZXJzaGlwIG9mIC9wcm9jL2NwaWEvdmlkZW9YIHRvIHJvb3QgKi8KQEAgLTMyODQsNyArMzI4MCw3IEBACiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjYW1fZGF0YSAqY2FtID0gZGV2LT5wcml2OworCXN0cnVjdCBjYW1fZGF0YSAqY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgZXJyOwogCiAJLyogbWFrZSB0aGlzIF9yZWFsbHlfIHNtcCBhbmQgbXVsdGl0aHJlYWQtc2FmZSAqLwpAQCAtMzM0MSw3ICszMzM3LDcgQEAKIAkJCSB1bnNpZ25lZCBpbnQgaW9jdGxuciwgdm9pZCAqYXJnKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY2FtX2RhdGEgKmNhbSA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgY2FtX2RhdGEgKmNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldHZhbCA9IDA7CiAKIAlpZiAoIWNhbSB8fCAhY2FtLT5vcHMpCkBAIC0zNzM5LDcgKzM3MzUsNyBAQAogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgc2l6ZSAgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBwYWdlLCBwb3M7Ci0Jc3RydWN0IGNhbV9kYXRhICpjYW0gPSBkZXYtPnByaXY7CisJc3RydWN0IGNhbV9kYXRhICpjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXR2YWw7CiAKIAlpZiAoIWNhbSB8fCAhY2FtLT5vcHMpCkBAIC0zODAxLDYgKzM3OTcsNyBAQAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY3BpYV90ZW1wbGF0ZSA9IHsKIAkubmFtZQkJPSAiQ1BpQSBDYW1lcmEiLAogCS5mb3BzICAgICAgICAgICA9ICZjcGlhX2ZvcHMsCisJLnJlbGVhc2UgCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCiB9OwogCiAvKiBpbml0aWFsaXNlIGNhbV9kYXRhIHN0cnVjdHVyZSAgKi8KQEAgLTM5MjgsNyArMzkyNSw3IEBACiAJY2FtLT5wcm9jX2VudHJ5ID0gTlVMTDsKIAogCW1lbWNweSgmY2FtLT52ZGV2LCAmY3BpYV90ZW1wbGF0ZSwgc2l6ZW9mKGNwaWFfdGVtcGxhdGUpKTsKLQljYW0tPnZkZXYucHJpdiA9IGNhbTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmY2FtLT52ZGV2LCBjYW0pOwogCiAJY2FtLT5jdXJmcmFtZSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IEZSQU1FX05VTTsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfY29yZS5jCmluZGV4IGFmOGI5ZWMuLjdlNzkxYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfY29yZS5jCkBAIC0xNTM3LDcgKzE1MzcsNyBAQAogICoKICAqICBUaGlzIHNldHMgYWxsIHVzZXIgY2hhbmdlYWJsZSBwcm9wZXJ0aWVzIHRvIHRoZSB2YWx1ZXMgaW4gY2FtLT5wYXJhbXMuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgc2V0X2FsbF9wcm9wZXJ0aWVzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQorc3RhdGljIGludCBzZXRfYWxsX3Byb3BlcnRpZXMoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCiB7CiAJLyoqCiAJICogRG9uJ3Qgc2V0IHRhcmdldF9rYiBoZXJlLCBpdCB3aWxsIGJlIHNldCBsYXRlci4KQEAgLTE1ODgsNyArMTU4OCw3IEBACiAgKiAgZ2V0X2NvbG9yX3BhcmFtcwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgZ2V0X2NvbG9yX3BhcmFtcyhzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3N0YXRpYyB2b2lkIGdldF9jb2xvcl9wYXJhbXMoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCiB7CiAJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfVlBfQlJJR0hUTkVTUywgVFJBTlNGRVJfUkVBRCwgMCk7CiAJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfVlBfU0FUVVJBVElPTiwgVFJBTlNGRVJfUkVBRCwgMCk7CkBAIC0xODgxLDcgKzE4ODEsNyBAQAogICogIHdha2Vfc3lzdGVtCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCB3YWtlX3N5c3RlbShzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3N0YXRpYyB2b2lkIHdha2Vfc3lzdGVtKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQogewogCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfU0VUX1dBS0VVUCwgVFJBTlNGRVJfV1JJVEUsIDApOwogfQpAQCAtMTg5Miw3ICsxODkyLDcgQEAKICAqCiAgKiAgVmFsaWQgZm9yIFNUVjUwMCBzZW5zb3Igb25seQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBzZXRfbG93bGlnaHRfYm9vc3Qoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCitzdGF0aWMgdm9pZCBzZXRfbG93bGlnaHRfYm9vc3Qoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCiB7CiAJc3RydWN0IGNwaWEyX2NvbW1hbmQgY21kOwogCkBAIC0yMTY5LDcgKzIxNjksNyBAQAogICoKICAqICBTZXRzIGFsbCB2YWx1ZXMgdG8gdGhlIGRlZmF1bHRzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIHJlc2V0X2NhbWVyYV9zdHJ1Y3Qoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCitzdGF0aWMgdm9pZCByZXNldF9jYW1lcmFfc3RydWN0KHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQogewogCS8qKioKIAkgKiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlciB2YWx1ZXMgYXJlIHRoZSBkZWZhdWx0cyBmcm9tIHRoZSByZWdpc3RlciBtYXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3VzYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl91c2IuYwppbmRleCBhOGExOTkwLi43MzUxMWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3VzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdXNiLmMKQEAgLTQ3OCw3ICs0NzgsNyBAQAogICogc2V0X2FsdGVybmF0ZQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBzZXRfYWx0ZXJuYXRlKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLCB1bnNpZ25lZCBpbnQgYWx0KQorc3RhdGljIGludCBzZXRfYWx0ZXJuYXRlKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLCB1bnNpZ25lZCBpbnQgYWx0KQogewogCWludCByZXQgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYwppbmRleCBlYjlmMTVjLi44OTdlOGQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKQEAgLTI0MSw4ICsyNDEsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBjcGlhMl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGNhbWVyYV9kYXRhICpjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0dmFsID0gMDsKIAogCWlmICghY2FtKSB7CkBAIC0zNTcsOCArMzU2LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGNwaWEyX3Y0bF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCiAJCQkgICAgICBsb2ZmX3QgKm9mZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IG5vYmxvY2sgPSBmaWxlLT5mX2ZsYWdzJk9fTk9OQkxPQ0s7CiAKIAlzdHJ1Y3QgY3BpYTJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwpAQCAtMzgyLDkgKzM4MCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdW5zaWduZWQgaW50IGNwaWEyX3Y0bF9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKLQlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7Ci0KKwlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAJc3RydWN0IGNwaWEyX2ZoICpmaCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAogCWlmKCFjYW0pCkBAIC0xNTc5LDggKzE1NzUsNyBAQAogc3RhdGljIGludCBjcGlhMl9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgdW5zaWduZWQgaW50IGlvY3RsX25yLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGNhbWVyYV9kYXRhICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXR2YWwgPSAwOwogCiAJaWYgKCFjYW0pCkBAIC0xODYwLDkgKzE4NTUsOCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBjcGlhMl9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpCiB7CisJc3RydWN0IGNhbWVyYV9kYXRhICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXR2YWw7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CiAKIAkvKiBQcmlvcml0eSBjaGVjayAqLwogCXN0cnVjdCBjcGlhMl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvTWFrZWZpbGUKaW5kZXggYjIzZDJlMi4uZjdiZjBlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKIAljeDE4LXF1ZXVlLm8gY3gxOC1zdHJlYW1zLm8gY3gxOC1maWxlb3BzLm8gY3gxOC1pb2N0bC5vIGN4MTgtY29udHJvbHMubyBcCiAJY3gxOC1tYWlsYm94Lm8gY3gxOC12YmkubyBjeDE4LWF1ZGlvLm8gY3gxOC12aWRlby5vIGN4MTgtaXJxLm8gXAogCWN4MTgtYXYtY29yZS5vIGN4MTgtYXYtYXVkaW8ubyBjeDE4LWF2LWZpcm13YXJlLm8gY3gxOC1hdi12YmkubyBjeDE4LXNjYi5vIFwKLQljeDE4LWR2Yi5vCisJY3gxOC1kdmIubyBjeDE4LWlvLm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0NYMTgpICs9IGN4MTgubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXVkaW8uYwppbmRleCA2ZDViOTRmLi41N2JlZGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKyNpbmNsdWRlICJjeDE4LWlvLmgiCiAjaW5jbHVkZSAiY3gxOC1pMmMuaCIKICNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCiAjaW5jbHVkZSAiY3gxOC1hdWRpby5oIgpAQCAtNjAsMTAgKzYxLDEwIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXZhbCA9IHJlYWRfcmVnKENYMThfQVVESU9fRU5BQkxFKSAmIH4weDMwOworCXZhbCA9IGN4MThfcmVhZF9yZWcoY3gsIENYMThfQVVESU9fRU5BQkxFKSAmIH4weDMwOwogCXZhbCB8PSAoYXVkaW9faW5wdXQgPiBDWDE4X0FWX0FVRElPX1NFUklBTDIpID8gMHgyMCA6CiAJCQkJCShhdWRpb19pbnB1dCA8PCA0KTsKLQl3cml0ZV9yZWcodmFsIHwgMHhiMDAsIENYMThfQVVESU9fRU5BQkxFKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgdmFsIHwgMHhiMDAsIENYMThfQVVESU9fRU5BQkxFKTsKIAljeDE4X3ZhcGkoY3gsIENYMThfQVBVX1JFU0VUQUksIDEsIDApOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5jCmluZGV4IDNiMGEyYzQuLjczZjUxNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmMKQEAgLTIyLDI3ICsyMiwzNSBAQAogICovCiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorI2luY2x1ZGUgImN4MTgtaW8uaCIKIAogaW50IGN4MThfYXZfd3JpdGUoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTggdmFsdWUpCiB7Ci0JdTMyIHggPSByZWFkbChjeC0+cmVnX21lbSArIDB4YzQwMDAwICsgKGFkZHIgJiB+MykpOworCXUzMiByZWcgPSAweGM0MDAwMCArIChhZGRyICYgfjMpOwogCXUzMiBtYXNrID0gMHhmZjsKIAlpbnQgc2hpZnQgPSAoYWRkciAmIDMpICogODsKKwl1MzIgeCA9IGN4MThfcmVhZF9yZWcoY3gsIHJlZyk7CiAKIAl4ID0gKHggJiB+KG1hc2sgPDwgc2hpZnQpKSB8ICgodTMyKXZhbHVlIDw8IHNoaWZ0KTsKLQl3cml0ZWwoeCwgY3gtPnJlZ19tZW0gKyAweGM0MDAwMCArIChhZGRyICYgfjMpKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgeCwgcmVnKTsKIAlyZXR1cm4gMDsKIH0KIAogaW50IGN4MThfYXZfd3JpdGU0KHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHUzMiB2YWx1ZSkKIHsKLQl3cml0ZWwodmFsdWUsIGN4LT5yZWdfbWVtICsgMHhjNDAwMDAgKyBhZGRyKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgdmFsdWUsIDB4YzQwMDAwICsgYWRkcik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjeDE4X2F2X3dyaXRlNF9ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHUzMiB2YWx1ZSkKK3sKKwljeDE4X3dyaXRlX3JlZ19ub3JldHJ5KGN4LCB2YWx1ZSwgMHhjNDAwMDAgKyBhZGRyKTsKIAlyZXR1cm4gMDsKIH0KIAogdTggY3gxOF9hdl9yZWFkKHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIpCiB7Ci0JdTMyIHggPSByZWFkbChjeC0+cmVnX21lbSArIDB4YzQwMDAwICsgKGFkZHIgJiB+MykpOworCXUzMiB4ID0gY3gxOF9yZWFkX3JlZyhjeCwgMHhjNDAwMDAgKyAoYWRkciAmIH4zKSk7CiAJaW50IHNoaWZ0ID0gKGFkZHIgJiAzKSAqIDg7CiAKIAlyZXR1cm4gKHggPj4gc2hpZnQpICYgMHhmZjsKQEAgLTUwLDcgKzU4LDEyIEBACiAKIHUzMiBjeDE4X2F2X3JlYWQ0KHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIpCiB7Ci0JcmV0dXJuIHJlYWRsKGN4LT5yZWdfbWVtICsgMHhjNDAwMDAgKyBhZGRyKTsKKwlyZXR1cm4gY3gxOF9yZWFkX3JlZyhjeCwgMHhjNDAwMDAgKyBhZGRyKTsKK30KKwordTMyIGN4MThfYXZfcmVhZDRfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyKQoreworCXJldHVybiBjeDE4X3JlYWRfcmVnX25vcmV0cnkoY3gsIDB4YzQwMDAwICsgYWRkcik7CiB9CiAKIGludCBjeDE4X2F2X2FuZF9vcihzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1bnNpZ25lZCBhbmRfbWFzaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaAppbmRleCBlYjYxZmExLi5iNjdkOGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5oCkBAIC0zMDEsOCArMzAxLDEwIEBACiAvKiBjeDE4X2F2LWNvcmUuYyAJCQkJCQkJICAgKi8KIGludCBjeDE4X2F2X3dyaXRlKHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHU4IHZhbHVlKTsKIGludCBjeDE4X2F2X3dyaXRlNChzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1MzIgdmFsdWUpOworaW50IGN4MThfYXZfd3JpdGU0X25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTMyIHZhbHVlKTsKIHU4IGN4MThfYXZfcmVhZChzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyKTsKIHUzMiBjeDE4X2F2X3JlYWQ0KHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIpOwordTMyIGN4MThfYXZfcmVhZDRfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyKTsKIGludCBjeDE4X2F2X2FuZF9vcihzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1bnNpZ25lZCBtYXNrLCB1OCB2YWx1ZSk7CiBpbnQgY3gxOF9hdl9hbmRfb3I0KHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwogaW50IGN4MThfYXZfY21kKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWZpcm13YXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1maXJtd2FyZS5jCmluZGV4IGU5OTZhNGUuLjUyMmEwMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtZmlybXdhcmUuYwpAQCAtMjAsNiArMjAsNyBAQAogICovCiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorI2luY2x1ZGUgImN4MTgtaW8uaCIKICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjZGVmaW5lIENYMThfQVVESU9fRU5BQkxFIDB4YzcyMDE0CkBAIC00OSw3ICs1MCw3IEBACiAJCWN4MThfYXZfd3JpdGU0KGN4LCAweDgxMDAsIDB4MDAwMTAwMDApOwogCiAJCS8qIFB1dCB0aGUgODA1MSBpbiByZXNldCBhbmQgZW5hYmxlIGZpcm13YXJlIHVwbG9hZCAqLwotCQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX0RMX0NUTCwgMHgwRjAwMDAwMCk7CisJCWN4MThfYXZfd3JpdGU0X25vcmV0cnkoY3gsIENYQURFQ19ETF9DVEwsIDB4MEYwMDAwMDApOwogCiAJCXB0ciA9IGZ3LT5kYXRhOwogCQlzaXplID0gZnctPnNpemU7CkBAIC01OCwyMiArNTksMjggQEAKIAkJCXUzMiBkbF9jb250cm9sID0gMHgwRjAwMDAwMCB8IGkgfCAoKHUzMilwdHJbaV0gPDwgMTYpOwogCQkJdTMyIHZhbHVlID0gMDsKIAkJCWludCByZXRyaWVzMjsKKwkJCWludCB1bnJlY19lcnIgPSAwOwogCi0JCQlmb3IgKHJldHJpZXMyID0gMDsgcmV0cmllczIgPCA1OyByZXRyaWVzMisrKSB7Ci0JCQkJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19ETF9DVEwsIGRsX2NvbnRyb2wpOworCQkJZm9yIChyZXRyaWVzMiA9IDA7IHJldHJpZXMyIDwgQ1gxOF9NQVhfTU1JT19SRVRSSUVTOworCQkJICAgICByZXRyaWVzMisrKSB7CisJCQkJY3gxOF9hdl93cml0ZTRfbm9yZXRyeShjeCwgQ1hBREVDX0RMX0NUTCwKKwkJCQkJCSAgICAgICBkbF9jb250cm9sKTsKIAkJCQl1ZGVsYXkoMTApOwotCQkJCXZhbHVlID0gY3gxOF9hdl9yZWFkNChjeCwgQ1hBREVDX0RMX0NUTCk7CisJCQkJdmFsdWUgPSBjeDE4X2F2X3JlYWQ0X25vcmV0cnkoY3gsCisJCQkJCQkJICAgICAgQ1hBREVDX0RMX0NUTCk7CiAJCQkJaWYgKHZhbHVlID09IGRsX2NvbnRyb2wpCiAJCQkJCWJyZWFrOwogCQkJCS8qIENoZWNrIGlmIHdlIGNhbiBjb3JyZWN0IHRoZSBieXRlIGJ5IGNoYW5naW5nCiAJCQkJICAgdGhlIGFkZHJlc3MuICBXZSBjYW4gb25seSB3cml0ZSB0aGUgbG93ZXIKIAkJCQkgICBhZGRyZXNzIGJ5dGUgb2YgdGhlIGFkZHJlc3MuICovCiAJCQkJaWYgKCh2YWx1ZSAmIDB4M0YwMCkgIT0gKGRsX2NvbnRyb2wgJiAweDNGMDApKSB7Ci0JCQkJCXJldHJpZXMyID0gNTsKKwkJCQkJdW5yZWNfZXJyID0gMTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQotCQkJaWYgKHJldHJpZXMyID49IDUpCisJCQljeDE4X2xvZ193cml0ZV9yZXRyaWVzKGN4LCByZXRyaWVzMiwKKwkJCQkJY3gtPnJlZ19tZW0gKyAweGM0MDAwMCArIENYQURFQ19ETF9DVEwpOworCQkJaWYgKHVucmVjX2VyciB8fCByZXRyaWVzMiA+PSBDWDE4X01BWF9NTUlPX1JFVFJJRVMpCiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGkgPT0gc2l6ZSkKQEAgLTExOSwxMCArMTI2LDEwIEBACiAJICAgaGF2ZSBhIG5hbWUgaW4gdGhlIHNwZWMuICovCiAJY3gxOF9hdl93cml0ZTQoY3gsIDB4MDlDQywgMSk7CiAKLQl2ID0gcmVhZF9yZWcoQ1gxOF9BVURJT19FTkFCTEUpOwotCS8qIElmIGJpdCAxMSBpcyAxICovCisJdiA9IGN4MThfcmVhZF9yZWcoY3gsIENYMThfQVVESU9fRU5BQkxFKTsKKwkvKiBJZiBiaXQgMTEgaXMgMSwgY2xlYXIgYml0IDEwICovCiAJaWYgKHYgJiAweDgwMCkKLQkJd3JpdGVfcmVnKHYgJiAweEZGRkZGQkZGLCBDWDE4X0FVRElPX0VOQUJMRSk7IC8qIENsZWFyIGJpdCAxMCAqLworCQljeDE4X3dyaXRlX3JlZyhjeCwgdiAmIDB4RkZGRkZCRkYsIENYMThfQVVESU9fRU5BQkxFKTsKIAogCS8qIEVuYWJsZSBXVyBhdXRvIGF1ZGlvIHN0YW5kYXJkIGRldGVjdGlvbiAqLwogCXYgPSBjeDE4X2F2X3JlYWQ0KGN4LCBDWEFERUNfU1REX0RFVF9DVEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKaW5kZXggM2NiOTczNC4uNWVmZTAxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCkBAIC0yOTIsMTIgKzI5MiwxMTEgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisvKiBUb3NoaWJhIFFvc21pbyBsYXB0b3AgaW50ZXJuYWwgRFZCLVQvQW5hbG9nIEh5YnJpZCBUdW5lciAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZF9wY2lfaW5mbyBjeDE4X3BjaV90b3NoaWJhX3Fvc21pb19kdmJ0W10gPSB7CisJeyBQQ0lfREVWSUNFX0lEX0NYMjM0MTgsIENYMThfUENJX0lEX1RPU0hJQkEsIDB4MDExMCB9LAorCXsgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZCBjeDE4X2NhcmRfdG9zaGliYV9xb3NtaW9fZHZidCA9IHsKKwkudHlwZSA9IENYMThfQ0FSRF9UT1NISUJBX1FPU01JT19EVkJULAorCS5uYW1lID0gIlRvc2hpYmEgUW9zbWlvIERWQi1UL0FuYWxvZyIsCisJLmNvbW1lbnQgPSAiRXhwZXJpbWVudGVycyBhbmQgcGhvdG9zIG5lZWRlZCBmb3IgZGV2aWNlIHRvIHdvcmsgd2VsbC5cbiIKKwkJICAiXHRUbyBoZWxwLCBtYWlsIHRoZSBpdnR2LWRldmVsIGxpc3QgKHd3dy5pdnR2ZHJpdmVyLm9yZykuXG4iLAorCS52NGwyX2NhcGFiaWxpdGllcyA9IENYMThfQ0FQX0VOQ09ERVIsCisJLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXX0NYMjM0MTgsCisJLmh3X2FsbCA9IENYMThfSFdfVFVORVIsCisJLnZpZGVvX2lucHV0cyA9IHsKKwkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEU2IH0sCisJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsCisJCQlDWDE4X0FWX1NWSURFT19MVU1BMyB8IENYMThfQVZfU1ZJREVPX0NIUk9NQTQgfSwKKwkJeyBDWDE4X0NBUkRfSU5QVVRfQ09NUE9TSVRFMSwgMSwgQ1gxOF9BVl9DT01QT1NJVEUxIH0sCisJfSwKKwkuYXVkaW9faW5wdXRzID0geworCQl7IENYMThfQ0FSRF9JTlBVVF9BVURfVFVORVIsIENYMThfQVZfQVVESU81LCAJICAgIDAgfSwKKwkJeyBDWDE4X0NBUkRfSU5QVVRfTElORV9JTjEsICBDWDE4X0FWX0FVRElPX1NFUklBTDEsIDEgfSwKKwl9LAorCS50dW5lcnMgPSB7CisJCXsgLnN0ZCA9IFY0TDJfU1REX0FMTCwgLnR1bmVyID0gVFVORVJfWEMyMDI4IH0sCisJfSwKKwkuZGRyID0geworCQkuY2hpcF9jb25maWcgPSAweDIwMiwKKwkJLnJlZnJlc2ggPSAweDNiYiwKKwkJLnRpbWluZzEgPSAweDMzMzIwYTYzLAorCQkudGltaW5nMiA9IDB4MGEsCisJCS50dW5lX2xhbmUgPSAwLAorCQkuaW5pdGlhbF9lbXJzID0gMHg0MiwKKwl9LAorCS54Y2VpdmVfcGluID0gMTUsCisJLnBjaV9saXN0ID0gY3gxOF9wY2lfdG9zaGliYV9xb3NtaW9fZHZidCwKKwkuaTJjID0gJmN4MThfaTJjX3N0ZCwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogTGVhZHRlayBXaW5GYXN0IFBWUjIxMDAgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmRfcGNpX2luZm8gY3gxOF9wY2lfbGVhZHRla19wdnIyMTAwW10gPSB7CisJeyBQQ0lfREVWSUNFX0lEX0NYMjM0MTgsIENYMThfUENJX0lEX0xFQURURUssIDB4NmYyNyB9LAorCXsgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZCBjeDE4X2NhcmRfbGVhZHRla19wdnIyMTAwID0geworCS50eXBlID0gQ1gxOF9DQVJEX0xFQURURUtfUFZSMjEwMCwKKwkubmFtZSA9ICJMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMCIsCisJLmNvbW1lbnQgPSAiRXhwZXJpbWVudGVycyBhbmQgcGhvdG9zIG5lZWRlZCBmb3IgZGV2aWNlIHRvIHdvcmsgd2VsbC5cbiIKKwkJICAiXHRUbyBoZWxwLCBtYWlsIHRoZSBpdnR2LWRldmVsIGxpc3QgKHd3dy5pdnR2ZHJpdmVyLm9yZykuXG4iLAorCS52NGwyX2NhcGFiaWxpdGllcyA9IENYMThfQ0FQX0VOQ09ERVIsCisJLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXX0NYMjM0MTgsCisJLmh3X211eGVyID0gQ1gxOF9IV19HUElPLAorCS5od19hbGwgPSBDWDE4X0hXX1RVTkVSIHwgQ1gxOF9IV19HUElPLAorCS52aWRlb19pbnB1dHMgPSB7CisJCXsgQ1gxOF9DQVJEX0lOUFVUX1ZJRF9UVU5FUiwgIDAsIENYMThfQVZfQ09NUE9TSVRFMiB9LAorCQl7IENYMThfQ0FSRF9JTlBVVF9TVklERU8xLCAgICAxLAorCQkJQ1gxOF9BVl9TVklERU9fTFVNQTMgfCBDWDE4X0FWX1NWSURFT19DSFJPTUE0IH0sCisJCXsgQ1gxOF9DQVJEX0lOUFVUX0NPTVBPU0lURTEsIDEsIENYMThfQVZfQ09NUE9TSVRFNyB9LAorCX0sCisJLmF1ZGlvX2lucHV0cyA9IHsKKwkJeyBDWDE4X0NBUkRfSU5QVVRfQVVEX1RVTkVSLCBDWDE4X0FWX0FVRElPNSwgCSAgICAwIH0sCisJCXsgQ1gxOF9DQVJEX0lOUFVUX0xJTkVfSU4xLCAgQ1gxOF9BVl9BVURJT19TRVJJQUwxLCAxIH0sCisJfSwKKwkudHVuZXJzID0geworCQkvKiBYQzMwMjggdHVuZXIgKi8KKwkJeyAuc3RkID0gVjRMMl9TVERfQUxMLCAudHVuZXIgPSBUVU5FUl9YQzIwMjggfSwKKwl9LAorCS5yYWRpb19pbnB1dCA9IHsgQ1gxOF9DQVJEX0lOUFVUX0FVRF9UVU5FUiwgQ1gxOF9BVl9BVURJTzUsIDIgfSwKKwkuZGRyID0geworCQkvKgorCQkgKiBQb2ludGVyIHRvIHByb3BlciBERFIgY29uZmlnIHZhbHVlcyBwcm92aWRlZCBieQorCQkgKiBUZXJyeSBXdSA8dGVycnl3dSBhdCBsZWFkdGVrLmNvbS50dz4KKwkJICovCisJCS5jaGlwX2NvbmZpZyA9IDB4MzAzLAorCQkucmVmcmVzaCA9IDB4M2JiLAorCQkudGltaW5nMSA9IDB4MjQyMjBlODMsCisJCS50aW1pbmcyID0gMHgxZiwKKwkJLnR1bmVfbGFuZSA9IDAsCisJCS5pbml0aWFsX2VtcnMgPSAweDIsCisJfSwKKwkuZ3Bpb19pbml0LmluaXRpYWxfdmFsdWUgPSAweDYsCisJLmdwaW9faW5pdC5kaXJlY3Rpb24gPSAweDcsCisJLmdwaW9fYXVkaW9faW5wdXQgPSB7IC5tYXNrICAgPSAweDcsCisJCQkgICAgICAudHVuZXIgID0gMHg2LCAubGluZWluID0gMHgyLCAucmFkaW8gID0gMHgyIH0sCisJLnhjZWl2ZV9waW4gPSAxNSwKKwkucGNpX2xpc3QgPSBjeDE4X3BjaV9sZWFkdGVrX3B2cjIxMDAsCisJLmkyYyA9ICZjeDE4X2kyY19zdGQsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkICpjeDE4X2NhcmRfbGlzdFtdID0gewogCSZjeDE4X2NhcmRfaHZyMTYwMF9lc210LAogCSZjeDE4X2NhcmRfaHZyMTYwMF9zYW1zdW5nLAogCSZjeDE4X2NhcmRfaDkwMCwKIAkmY3gxOF9jYXJkX21wYzcxOCwKIAkmY3gxOF9jYXJkX2NueHRfcmFwdG9yX3BhbCwKKwkmY3gxOF9jYXJkX3Rvc2hpYmFfcW9zbWlvX2R2YnQsCisJJmN4MThfY2FyZF9sZWFkdGVrX3B2cjIxMDAsCiB9OwogCiBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkICpjeDE4X2dldF9jYXJkKHUxNiBpbmRleCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKaW5kZXggYmQxOGFmZS4uMDg1MTIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKQEAgLTQsNiArNCw3IEBACiAgKiAgRGVyaXZlZCBmcm9tIGl2dHYtZHJpdmVyLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIyLDYgKzIzLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKyNpbmNsdWRlICJjeDE4LWlvLmgiCiAjaW5jbHVkZSAiY3gxOC12ZXJzaW9uLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogI2luY2x1ZGUgImN4MTgtaTJjLmgiCkBAIC03MywxMCArNzUsMTQgQEAKIAkJCQkgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKIAkJCQkgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKIAkJCQkgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSB9OwotCitzdGF0aWMgaW50IG1taW9fbmRlbGF5W0NYMThfTUFYX0NBUkRTXSA9IHsgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCQkJCQkgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJCQkJCSAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwkJCQkJICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xIH07CiBzdGF0aWMgdW5zaWduZWQgY2FyZHR5cGVfYyA9IDE7CiBzdGF0aWMgdW5zaWduZWQgdHVuZXJfYyA9IDE7CiBzdGF0aWMgdW5zaWduZWQgcmFkaW9fYyA9IDE7CitzdGF0aWMgdW5zaWduZWQgbW1pb19uZGVsYXlfYyA9IDE7CiBzdGF0aWMgY2hhciBwYWxbXSA9ICItLSI7CiBzdGF0aWMgY2hhciBzZWNhbVtdID0gIi0tIjsKIHN0YXRpYyBjaGFyIG50c2NbXSA9ICItIjsKQEAgLTkwLDE1ICs5NiwxOCBAQAogCiBzdGF0aWMgaW50IGN4MThfcGNpX2xhdGVuY3kgPSAxOwogCitpbnQgY3gxOF9yZXRyeV9tbWlvID0gMTsKIGludCBjeDE4X2RlYnVnOwogCiBtb2R1bGVfcGFyYW1fYXJyYXkodHVuZXIsIGludCwgJnR1bmVyX2MsIDA2NDQpOwogbW9kdWxlX3BhcmFtX2FycmF5KHJhZGlvLCBib29sLCAmcmFkaW9fYywgMDY0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoY2FyZHR5cGUsIGludCwgJmNhcmR0eXBlX2MsIDA2NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KG1taW9fbmRlbGF5LCBpbnQsICZtbWlvX25kZWxheV9jLCAwNjQ0KTsKIG1vZHVsZV9wYXJhbV9zdHJpbmcocGFsLCBwYWwsIHNpemVvZihwYWwpLCAwNjQ0KTsKIG1vZHVsZV9wYXJhbV9zdHJpbmcoc2VjYW0sIHNlY2FtLCBzaXplb2Yoc2VjYW0pLCAwNjQ0KTsKIG1vZHVsZV9wYXJhbV9zdHJpbmcobnRzYywgbnRzYywgc2l6ZW9mKG50c2MpLCAwNjQ0KTsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgY3gxOF9kZWJ1ZywgaW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbV9uYW1lZChyZXRyeV9tbWlvLCBjeDE4X3JldHJ5X21taW8sIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oY3gxOF9wY2lfbGF0ZW5jeSwgaW50LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShjeDE4X2ZpcnN0X21pbm9yLCBpbnQsIDA2NDQpOwogCkBAIC0xMjEsNiArMTMwLDggQEAKIAkJICJcdFx0XHQgMyA9IENvbXBybyBWaWRlb01hdGUgSDkwMFxuIgogCQkgIlx0XHRcdCA0ID0gWXVhbiBNUEM3MThcbiIKIAkJICJcdFx0XHQgNSA9IENvbmV4YW50IFJhcHRvciBQQUwvU0VDQU1cbiIKKwkJICJcdFx0XHQgNiA9IFRvc2hpYmEgUW9zbWlvIERWQi1UL0FuYWxvZ1xuIgorCQkgIlx0XHRcdCA3ID0gTGVhZHRlayBXaW5GYXN0IFBWUjIxMDBcbiIKIAkJICJcdFx0XHQgMCA9IEF1dG9kZXRlY3QgKGRlZmF1bHQpXG4iCiAJCSAiXHRcdFx0LTEgPSBJZ25vcmUgdGhpcyBjYXJkXG5cdFx0Iik7CiBNT0RVTEVfUEFSTV9ERVNDKHBhbCwgIlNldCBQQUwgc3RhbmRhcmQ6IEIsIEcsIEgsIEQsIEssIEksIE0sIE4sIE5jLCA2MCIpOwpAQCAtMTQwLDYgKzE1MSwxNCBAQAogTU9EVUxFX1BBUk1fREVTQyhjeDE4X3BjaV9sYXRlbmN5LAogCQkgIkNoYW5nZSB0aGUgUENJIGxhdGVuY3kgdG8gNjQgaWYgbG93ZXI6IDAgPSBObywgMSA9IFllcyxcbiIKIAkJICJcdFx0XHREZWZhdWx0OiBZZXMiKTsKK01PRFVMRV9QQVJNX0RFU0MocmV0cnlfbW1pbywKKwkJICJDaGVjayBhbmQgcmV0cnkgbWVtb3J5IG1hcHBlZCBJTyBhY2Nlc3Nlc1xuIgorCQkgIlx0XHRcdERlZmF1bHQ6IDEgW1llc10iKTsKK01PRFVMRV9QQVJNX0RFU0MobW1pb19uZGVsYXksCisJCSAiRGVsYXkgKG5zKSBmb3IgZWFjaCBDWDIzNDE4IG1lbW9yeSBtYXBwZWQgSU8gYWNjZXNzLlxuIgorCQkgIlx0XHRcdFRyeSBsYXJnZXIgdmFsdWVzIHRoYXQgYXJlIGNsb3NlIHRvIGEgbXVsdGlwbGUgb2YgdGhlXG4iCisJCSAiXHRcdFx0UENJIGNsb2NrIHBlcmlvZCwgMzAuMyBucywgaWYgeW91ciBjYXJkIGRvZXNuJ3Qgd29yay5cbiIKKwkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfREVGQVVMVF9NTUlPX05ERUxBWSkpOwogTU9EVUxFX1BBUk1fREVTQyhlbmNfbXBnX2J1ZmZlcnMsCiAJCSAiRW5jb2RlciBNUEcgQnVmZmVycyAoaW4gTUIpXG4iCiAJCSAiXHRcdFx0RGVmYXVsdDogIiBfX3N0cmluZ2lmeShDWDE4X0RFRkFVTFRfRU5DX01QR19CVUZGRVJTKSk7CkBAIC0xNTYsNyArMTc1LDcgQEAKIAkJICJFbmNvZGVyIFBDTSBidWZmZXJzIChpbiBNQilcbiIKIAkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfREVGQVVMVF9FTkNfUENNX0JVRkZFUlMpKTsKIAotTU9EVUxFX1BBUk1fREVTQyhjeDE4X2ZpcnN0X21pbm9yLCAiU2V0IG1pbm9yIGFzc2lnbmVkIHRvIGZpcnN0IGNhcmQiKTsKK01PRFVMRV9QQVJNX0RFU0MoY3gxOF9maXJzdF9taW5vciwgIlNldCBrZXJuZWwgbnVtYmVyIGFzc2lnbmVkIHRvIGZpcnN0IGNhcmQiKTsKIAogTU9EVUxFX0FVVEhPUigiSGFucyBWZXJrdWlsIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNYMjM0MTggZHJpdmVyIik7CkBAIC0zNTYsNiArMzc1LDExIEBACiAJY3gtPm9wdGlvbnMudHVuZXIgPSB0dW5lcltjeC0+bnVtXTsKIAljeC0+b3B0aW9ucy5yYWRpbyA9IHJhZGlvW2N4LT5udW1dOwogCisJaWYgKG1taW9fbmRlbGF5W2N4LT5udW1dIDwgMCkKKwkJY3gtPm9wdGlvbnMubW1pb19uZGVsYXkgPSBDWDE4X0RFRkFVTFRfTU1JT19OREVMQVk7CisJZWxzZQorCQljeC0+b3B0aW9ucy5tbWlvX25kZWxheSA9IG1taW9fbmRlbGF5W2N4LT5udW1dOworCiAJY3gtPnN0ZCA9IGN4MThfcGFyc2Vfc3RkKGN4KTsKIAlpZiAoY3gtPm9wdGlvbnMuY2FyZHR5cGUgPT0gLTEpIHsKIAkJQ1gxOF9JTkZPKCJJZ25vcmUgY2FyZFxuIik7CkBAIC0zOTUsOSArNDE5LDkgQEAKIAogCWlmIChjeC0+Y2FyZCA9PSBOVUxMKSB7CiAJCWN4LT5jYXJkID0gY3gxOF9nZXRfY2FyZChDWDE4X0NBUkRfSFZSXzE2MDBfRVNNVCk7Ci0JCUNYMThfRVJSKCJVbmtub3duIGNhcmQ6IHZlbmRvci9kZXZpY2U6ICUwNHgvJTA0eFxuIiwKKwkJQ1gxOF9FUlIoIlVua25vd24gY2FyZDogdmVuZG9yL2RldmljZTogWyUwNHg6JTA0eF1cbiIsCiAJCSAgICAgY3gtPmRldi0+dmVuZG9yLCBjeC0+ZGV2LT5kZXZpY2UpOwotCQlDWDE4X0VSUigiICAgICAgICAgICAgICBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZTogJTA0eC8lMDR4XG4iLAorCQlDWDE4X0VSUigiICAgICAgICAgICAgICBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZTogWyUwNHg6JTA0eF1cbiIsCiAJCSAgICAgY3gtPmRldi0+c3Vic3lzdGVtX3ZlbmRvciwgY3gtPmRldi0+c3Vic3lzdGVtX2RldmljZSk7CiAJCUNYMThfRVJSKCJEZWZhdWx0aW5nIHRvICVzIGNhcmRcbiIsIGN4LT5jYXJkLT5uYW1lKTsKIAkJQ1gxOF9FUlIoIlBsZWFzZSBtYWlsIHRoZSB2ZW5kb3IvZGV2aWNlIGFuZCBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZSBJRHMgYW5kIHdoYXQga2luZCBvZlxuIik7CkBAIC01MTEsOSArNTM1LDkgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JLyogQ2hlY2sgZm9yIGJ1cyBtYXN0ZXJpbmcgKi8KKwkvKiBFbmFibGUgYnVzIG1hc3RlcmluZyBhbmQgbWVtb3J5IG1hcHBlZCBJTyBmb3IgdGhlIENYMjM0MTggKi8KIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLQljbWQgfD0gUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVI7CisJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUjsKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKIAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmY3gtPmNhcmRfcmV2KTsKQEAgLTUyNSwxMSArNTQ5LDYgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDY0KTsKIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJnBjaV9sYXRlbmN5KTsKIAl9Ci0JLyogVGhpcyBjb25maWcgc3BhY2UgdmFsdWUgcmVsYXRlcyB0byBETUEgbGF0ZW5jaWVzLiBUaGUKLQkgICBkZWZhdWx0IHZhbHVlIDB4ODA4MCBpcyB0b28gbG93IGhvd2V2ZXIgYW5kIHdpbGwgbGVhZAotCSAgIHRvIERNQSBlcnJvcnMuIDB4ZmZmZiBpcyB0aGUgbWF4IHZhbHVlIHdoaWNoIHNvbHZlcwotCSAgIHRoZXNlIHByb2JsZW1zLiAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQwLCAweGZmZmYpOwogCiAJQ1gxOF9ERUJVR19JTkZPKCJjeCVkIChyZXYgJWQpIGF0ICUwMng6JTAyeC4leCwgIgogCQkgICAiaXJxOiAlZCwgbGF0ZW5jeTogJWQsIG1lbW9yeTogMHglbHhcbiIsCkBAIC02NTYsNyArNjc1LDcgQEAKIAkJZ290byBmcmVlX21lbTsKIAl9CiAJY3gtPnJlZ19tZW0gPSBjeC0+ZW5jX21lbSArIENYMThfUkVHX09GRlNFVDsKLQlkZXZ0eXBlID0gcmVhZF9yZWcoMHhDNzIwMjgpOworCWRldnR5cGUgPSBjeDE4X3JlYWRfcmVnKGN4LCAweEM3MjAyOCk7CiAJc3dpdGNoIChkZXZ0eXBlICYgMHhmZjAwMDAwMCkgewogCWNhc2UgMHhmZjAwMDAwMDoKIAkJQ1gxOF9JTkZPKCJjeDIzNDE4IHJldmlzaW9uICUwOHggKEEpXG4iLCBkZXZ0eXBlKTsKQEAgLTgxNSw2ICs4MzQsNyBAQAogCWlmIChyZXR2YWwgPT0gMCkKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAlDWDE4X0VSUigiRXJyb3IgJWQgb24gaW5pdGlhbGl6YXRpb25cbiIsIHJldHZhbCk7CisJY3gxOF9sb2dfc3RhdGlzdGljcyhjeCk7CiAKIAlrZnJlZShjeDE4X2NhcmRzW2N4MThfY2FyZHNfYWN0aXZlXSk7CiAJY3gxOF9jYXJkc1tjeDE4X2NhcmRzX2FjdGl2ZV0gPSBOVUxMOwpAQCAtOTAyLDggKzkyMiw4IEBACiAJCWN4MThfc3RvcF9hbGxfY2FwdHVyZXMoY3gpOwogCiAJLyogSW50ZXJydXB0cyAqLwotCXN3MV9pcnFfZGlzYWJsZShJUlFfQ1BVX1RPX0VQVSB8IElSUV9BUFVfVE9fRVBVKTsKLQlzdzJfaXJxX2Rpc2FibGUoSVJRX0NQVV9UT19FUFVfQUNLIHwgSVJRX0FQVV9UT19FUFVfQUNLKTsKKwljeDE4X3N3MV9pcnFfZGlzYWJsZShjeCwgSVJRX0NQVV9UT19FUFUgfCBJUlFfQVBVX1RPX0VQVSk7CisJY3gxOF9zdzJfaXJxX2Rpc2FibGUoY3gsIElSUV9DUFVfVE9fRVBVX0FDSyB8IElSUV9BUFVfVE9fRVBVX0FDSyk7CiAKIAljeDE4X2hhbHRfZmlybXdhcmUoY3gpOwogCkBAIC05MTksNiArOTM5LDcgQEAKIAogCXBjaV9kaXNhYmxlX2RldmljZShjeC0+ZGV2KTsKIAorCWN4MThfbG9nX3N0YXRpc3RpY3MoY3gpOwogCUNYMThfSU5GTygiUmVtb3ZlZCAlcywgY2FyZCAjJWRcbiIsIGN4LT5jYXJkX25hbWUsIGN4LT5udW0pOwogfQogCkBAIC05MzgsNyArOTU5LDcgQEAKIAogCS8qIFZhbGlkYXRlIHBhcmFtZXRlcnMgKi8KIAlpZiAoY3gxOF9maXJzdF9taW5vciA8IDAgfHwgY3gxOF9maXJzdF9taW5vciA+PSBDWDE4X01BWF9DQVJEUykgewotCQlwcmludGsoS0VSTl9FUlIgImN4MTg6ICBFeGl0aW5nLCBpdnR2X2ZpcnN0X21pbm9yIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICJjeDE4OiAgRXhpdGluZywgY3gxOF9maXJzdF9taW5vciBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWRcbiIsCiAJCSAgICAgQ1gxOF9NQVhfQ0FSRFMgLSAxKTsKIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKaW5kZXggNDgwMWJjNy4uYTRiMTcwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKQEAgLTM4LDEwICszOCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi92aWRlby5oPgogI2luY2x1ZGUgPGxpbnV4L2R2Yi9hdWRpby5oPgpAQCAtNjQsNiArNjQsOSBAQAogIyAgZXJyb3IgIlRoaXMgZHJpdmVyIHJlcXVpcmVzIGtlcm5lbCBQQ0kgc3VwcG9ydC4iCiAjZW5kaWYKIAorLyogRGVmYXVsdCBkZWxheSB0byB0aHJvdHRsZSBtbWlvIGFjY2VzcyB0byB0aGUgQ1gyMzQxOCAqLworI2RlZmluZSBDWDE4X0RFRkFVTFRfTU1JT19OREVMQVkgMCAvKiAwIG5zID0gMCBQQ0kgY2xvY2socykgLyAzMyBNSHogKi8KKwogI2RlZmluZSBDWDE4X01FTV9PRkZTRVQJMHgwMDAwMDAwMAogI2RlZmluZSBDWDE4X01FTV9TSVpFCTB4MDQwMDAwMDAKICNkZWZpbmUgQ1gxOF9SRUdfT0ZGU0VUCTB4MDIwMDAwMDAKQEAgLTc3LDcgKzgwLDkgQEAKICNkZWZpbmUgQ1gxOF9DQVJEX0NPTVBST19IOTAwIAkgICAgICAyCS8qIENvbXBybyBWaWRlb01hdGUgSDkwMCAqLwogI2RlZmluZSBDWDE4X0NBUkRfWVVBTl9NUEM3MTggCSAgICAgIDMJLyogWXVhbiBNUEM3MTggKi8KICNkZWZpbmUgQ1gxOF9DQVJEX0NOWFRfUkFQVE9SX1BBTCAgICAgNAkvKiBDb25leGFudCBSYXB0b3IgUEFMICovCi0jZGVmaW5lIENYMThfQ0FSRF9MQVNUIAkJICAgICAgNAorI2RlZmluZSBDWDE4X0NBUkRfVE9TSElCQV9RT1NNSU9fRFZCVCA1IC8qIFRvc2hpYmEgUW9zbWlvIEludGVyYWwgRFZCLVQvQW5hbG9nKi8KKyNkZWZpbmUgQ1gxOF9DQVJEX0xFQURURUtfUFZSMjEwMCAgICAgNiAvKiBMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMCAqLworI2RlZmluZSBDWDE4X0NBUkRfTEFTVCAJCSAgICAgIDYKIAogI2RlZmluZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgIDAKICNkZWZpbmUgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVFMgICAxCkBAIC05Nyw2ICsxMDIsOCBAQAogI2RlZmluZSBDWDE4X1BDSV9JRF9DT01QUk8gCQkweDE4NWIKICNkZWZpbmUgQ1gxOF9QQ0lfSURfWVVBTiAJCTB4MTJhYgogI2RlZmluZSBDWDE4X1BDSV9JRF9DT05FWEFOVAkJMHgxNGYxCisjZGVmaW5lIENYMThfUENJX0lEX1RPU0hJQkEJCTB4MTE3OQorI2RlZmluZSBDWDE4X1BDSV9JRF9MRUFEVEVLCQkweDEwN0QKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PSBTVEFSVCBVU0VSIFNFVFRBQkxFIERNQSBWQVJJQUJMRVMgPT09PT09PT09PT0gKi8KQEAgLTE2OSw2ICsxNzYsNyBAQAogCiAjZGVmaW5lIENYMThfTUFYX1BHTV9JTkRFWCAoNDAwKQogCitleHRlcm4gaW50IGN4MThfcmV0cnlfbW1pbzsJLyogZW5hYmxlIGNoZWNrICYgcmV0cnkgb2YgbW1pbyBhY2Nlc3NlcyAqLwogZXh0ZXJuIGludCBjeDE4X2RlYnVnOwogCiAKQEAgLTE3Nyw2ICsxODUsNyBAQAogCWludCBjYXJkdHlwZTsJCS8qIGZvcmNlIGNhcmQgdHlwZSBvbiBsb2FkICovCiAJaW50IHR1bmVyOwkJLyogc2V0IHR1bmVyIG9uIGxvYWQgKi8KIAlpbnQgcmFkaW87CQkvKiBlbmFibGUvZGlzYWJsZSByYWRpbyAqLworCXVuc2lnbmVkIGxvbmcgbW1pb19uZGVsYXk7IC8qIGRlbGF5IGluIG5zIGFmdGVyIGV2ZXJ5IFBDSSBtbWlvIGFjY2VzcyAqLwogfTsKIAogLyogcGVyLWJ1ZmZlciBiaXQgZmxhZ3MgKi8KQEAgLTIxNiw4ICsyMjUsNyBAQAogCiBzdHJ1Y3QgY3gxOF9xdWV1ZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXUzMiBidWZmZXJzOwotCXUzMiBsZW5ndGg7CisJYXRvbWljX3QgYnVmZmVyczsKIAl1MzIgYnl0ZXN1c2VkOwogfTsKIApAQCAtMjM3LDYgKzI0NSw4IEBACiBzdHJ1Y3QgY3gxODsJIC8qIGZvcndhcmQgcmVmZXJlbmNlICovCiBzdHJ1Y3QgY3gxOF9zY2I7IC8qIGZvcndhcmQgcmVmZXJlbmNlICovCiAKKyNkZWZpbmUgQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFIDB4ZmZmZmZmZmYKKwogc3RydWN0IGN4MThfc3RyZWFtIHsKIAkvKiBUaGVzZSBmaXJzdCBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIHNldCwgZXZlbiBpZiB0aGUgc3RyZWFtCiAJICAgaXMgbm90IGFjdHVhbGx5IGNyZWF0ZWQuICovCkBAIC0yNTksNyArMjY5LDYgQEAKIAkvKiBCdWZmZXIgU3RhdHMgKi8KIAl1MzIgYnVmZmVyczsKIAl1MzIgYnVmX3NpemU7Ci0JdTMyIGJ1ZmZlcnNfc3RvbGVuOwogCiAJLyogQnVmZmVyIFF1ZXVlcyAqLwogCXN0cnVjdCBjeDE4X3F1ZXVlIHFfZnJlZTsJLyogZnJlZSBidWZmZXJzICovCkBAIC0zNDEsNiArMzUwLDEzIEBACiAJaW50IGJ1c19pbmRleDsgICAvKiAwIG9yIDEgZm9yIHRoZSBjeDIzNDE4J3MgMXN0IG9yIDJuZCBJMkMgYnVzICovCiB9OwogCisjZGVmaW5lIENYMThfTUFYX01NSU9fUkVUUklFUyAxMAorCitzdHJ1Y3QgY3gxOF9tbWlvX3N0YXRzIHsKKwlhdG9taWNfdCByZXRyaWVkX3dyaXRlW0NYMThfTUFYX01NSU9fUkVUUklFUysxXTsKKwlhdG9taWNfdCByZXRyaWVkX3JlYWRbQ1gxOF9NQVhfTU1JT19SRVRSSUVTKzFdOworfTsKKwogLyogU3RydWN0IHRvIGhvbGQgaW5mbyBhYm91dCBjeDE4IGNhcmRzICovCiBzdHJ1Y3QgY3gxOCB7CiAJaW50IG51bTsJCS8qIGJvYXJkIG51bWJlciwgLTEgZHVyaW5nIGluaXQhICovCkBAIC00MzAsNiArNDQ2LDkgQEAKIAl1MzIgZ3Bpb192YWw7CiAJc3RydWN0IG11dGV4IGdwaW9fbG9jazsKIAorCS8qIFN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QgY3gxOF9tbWlvX3N0YXRzIG1taW9fc3RhdHM7CisKIAkvKiB2NGwyIGFuZCBVc2VyIHNldHRpbmdzICovCiAKIAkvKiBjb2RlYyBzZXR0aW5ncyAqLwpAQCAtNDU4LDQ3ICs0NzcsNCBAQAogLyogRmlyc3Qtb3BlbiBpbml0aWFsaXphdGlvbjogbG9hZCBmaXJtd2FyZSwgZXRjLiAqLwogaW50IGN4MThfaW5pdF9vbl9maXJzdF9vcGVuKHN0cnVjdCBjeDE4ICpjeCk7CiAKLS8qIFRoaXMgaXMgYSBQQ0kgcG9zdCB0aGluZywgd2hlcmUgaWYgdGhlIHBjaSByZWdpc3RlciBpcyBub3QgcmVhZCwgdGhlbgotICAgdGhlIHdyaXRlIGRvZXNuJ3QgYWx3YXlzIHRha2UgZWZmZWN0IHJpZ2h0IGF3YXkuIEJ5IHJlYWRpbmcgYmFjayB0aGUKLSAgIHJlZ2lzdGVyIGFueSBwZW5kaW5nIFBDSSB3cml0ZXMgd2lsbCBiZSBwZXJmb3JtZWQgKGluIG9yZGVyKSwgYW5kIHNvCi0gICB5b3UgY2FuIGJlIHN1cmUgdGhhdCB0aGUgd3JpdGVzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGRvbmUuCi0KLSAgIFJhcmVseSBuZWVkZWQsIG9ubHkgaW4gc29tZSB0aW1pbmcgc2Vuc2l0aXZlIGNhc2VzLgotICAgQXBwYXJlbnRseSBpZiB0aGlzIGlzIG5vdCBkb25lIHNvbWUgbW90aGVyYm9hcmRzIHNlZW0KLSAgIHRvIGtpbGwgdGhlIGZpcm13YXJlIGFuZCBnZXQgaW50byB0aGUgYnJva2VuIHN0YXRlIHVudGlsIGNvbXB1dGVyIGlzCi0gICByZWJvb3RlZC4gKi8KLSNkZWZpbmUgd3JpdGVfc3luYyh2YWwsIHJlZykgXAotCWRvIHsgd3JpdGVsKHZhbCwgcmVnKTsgcmVhZGwocmVnKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSByZWFkX3JlZyhyZWcpIHJlYWRsKGN4LT5yZWdfbWVtICsgKHJlZykpCi0jZGVmaW5lIHdyaXRlX3JlZyh2YWwsIHJlZykgd3JpdGVsKHZhbCwgY3gtPnJlZ19tZW0gKyAocmVnKSkKLSNkZWZpbmUgd3JpdGVfcmVnX3N5bmModmFsLCByZWcpIFwKLQlkbyB7IHdyaXRlX3JlZyh2YWwsIHJlZyk7IHJlYWRfcmVnKHJlZyk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgcmVhZF9lbmMoYWRkcikgcmVhZGwoY3gtPmVuY19tZW0gKyAodTMyKShhZGRyKSkKLSNkZWZpbmUgd3JpdGVfZW5jKHZhbCwgYWRkcikgd3JpdGVsKHZhbCwgY3gtPmVuY19tZW0gKyAodTMyKShhZGRyKSkKLSNkZWZpbmUgd3JpdGVfZW5jX3N5bmModmFsLCBhZGRyKSBcCi0JZG8geyB3cml0ZV9lbmModmFsLCBhZGRyKTsgcmVhZF9lbmMoYWRkcik7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgc3cxX2lycV9lbmFibGUodmFsKSBkbyB7IFwKLQl3cml0ZV9yZWcodmFsLCBTVzFfSU5UX1NUQVRVUyk7IFwKLQl3cml0ZV9yZWcocmVhZF9yZWcoU1cxX0lOVF9FTkFCTEVfUENJKSB8ICh2YWwpLCBTVzFfSU5UX0VOQUJMRV9QQ0kpOyBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIHN3MV9pcnFfZGlzYWJsZSh2YWwpIFwKLQl3cml0ZV9yZWcocmVhZF9yZWcoU1cxX0lOVF9FTkFCTEVfUENJKSAmIH4odmFsKSwgU1cxX0lOVF9FTkFCTEVfUENJKTsKLQotI2RlZmluZSBzdzJfaXJxX2VuYWJsZSh2YWwpIGRvIHsgXAotCXdyaXRlX3JlZyh2YWwsIFNXMl9JTlRfU1RBVFVTKTsgXAotCXdyaXRlX3JlZyhyZWFkX3JlZyhTVzJfSU5UX0VOQUJMRV9QQ0kpIHwgKHZhbCksIFNXMl9JTlRfRU5BQkxFX1BDSSk7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgc3cyX2lycV9kaXNhYmxlKHZhbCkgXAotCXdyaXRlX3JlZyhyZWFkX3JlZyhTVzJfSU5UX0VOQUJMRV9QQ0kpICYgfih2YWwpLCBTVzJfSU5UX0VOQUJMRV9QQ0kpOwotCi0jZGVmaW5lIHNldHVwX3BhZ2UoYWRkcikgZG8geyBcCi0gICAgdTMyIHZhbCA9IHJlYWRfcmVnKDB4RDAwMEY4KSAmIH4weDFmMDA7IFwKLSAgICB3cml0ZV9yZWcodmFsIHwgKCgoYWRkcikgPj4gMTcpICYgMHgxZjAwKSwgMHhEMDAwRjgpOyBcCi19IHdoaWxlICgwKQotCiAjZW5kaWYgLyogQ1gxOF9EUklWRVJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwppbmRleCAxZTQyMGE4Li5hZmM2OTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwpAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSAiY3gxOC12ZXJzaW9uLmgiCiAjaW5jbHVkZSAiY3gxOC1kdmIuaCIKKyNpbmNsdWRlICJjeDE4LWlvLmgiCiAjaW5jbHVkZSAiY3gxOC1zdHJlYW1zLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogI2luY2x1ZGUgInM1aDE0MDkuaCIKQEAgLTg3LDEzICs4OCwxMyBAQAogCXN3aXRjaCAoY3gtPmNhcmQtPnR5cGUpIHsKIAljYXNlIENYMThfQ0FSRF9IVlJfMTYwMF9FU01UOgogCWNhc2UgQ1gxOF9DQVJEX0hWUl8xNjAwX1NBTVNVTkc6Ci0JCXYgPSByZWFkX3JlZyhDWDE4X1JFR19ETVVYX05VTV9QT1JUXzBfQ09OVFJPTCk7CisJCXYgPSBjeDE4X3JlYWRfcmVnKGN4LCBDWDE4X1JFR19ETVVYX05VTV9QT1JUXzBfQ09OVFJPTCk7CiAJCXYgfD0gMHgwMDQwMDAwMDsgLyogU2VyaWFsIE1vZGUgKi8KIAkJdiB8PSAweDAwMDAyMDAwOyAvKiBEYXRhIExlbmd0aCAtIEJ5dGUgKi8KIAkJdiB8PSAweDAwMDEwMDAwOyAvKiBFcnJvciAtIFBvbGFyaXR5ICovCiAJCXYgfD0gMHgwMDAyMDAwMDsgLyogRXJyb3IgLSBQYXNzdGhydSAqLwogCQl2IHw9IDB4MDAwYzAwMDA7IC8qIEVycm9yIC0gSWdub3JlICovCi0JCXdyaXRlX3JlZyh2LCBDWDE4X1JFR19ETVVYX05VTV9QT1JUXzBfQ09OVFJPTCk7CisJCWN4MThfd3JpdGVfcmVnKGN4LCB2LCBDWDE4X1JFR19ETVVYX05VTV9QT1JUXzBfQ09OVFJPTCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYwppbmRleCAxZTUzN2ZlLi41ZjkwODk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCkBAIC0xMzIsNiArMTMyLDcgQEAKIAl1MTYgbmV3X3N0ZXJlb19tb2RlOwogCWNvbnN0IHUxNiBzdGVyZW9fbWFzayA9IDB4MDMwMDsKIAljb25zdCB1MTYgZHVhbCA9IDB4MDIwMDsKKwl1MzIgaDsKIAogCW5ld19zdGVyZW9fbW9kZSA9IGN4LT5wYXJhbXMuYXVkaW9fcHJvcGVydGllcyAmIHN0ZXJlb19tYXNrOwogCW1lbXNldCgmdnQsIDAsIHNpemVvZih2dCkpOwpAQCAtMTQzLDEzICsxNDQsMjEgQEAKIAlpZiAobmV3X3N0ZXJlb19tb2RlID09IGN4LT5kdWFsd2F0Y2hfc3RlcmVvX21vZGUpCiAJCXJldHVybjsKIAotCW5ld19iaXRtYXAgPSBuZXdfc3RlcmVvX21vZGUgfCAoY3gtPnBhcmFtcy5hdWRpb19wcm9wZXJ0aWVzICYgfnN0ZXJlb19tYXNrKTsKKwluZXdfYml0bWFwID0gbmV3X3N0ZXJlb19tb2RlCisJCQl8IChjeC0+cGFyYW1zLmF1ZGlvX3Byb3BlcnRpZXMgJiB+c3RlcmVvX21hc2spOwogCi0JQ1gxOF9ERUJVR19JTkZPKCJkdWFsd2F0Y2g6IGNoYW5nZSBzdGVyZW8gZmxhZyBmcm9tIDB4JXggdG8gMHgleC4gbmV3IGF1ZGlvX2JpdG1hc2s9MHgldXhcbiIsCi0JCQkgICBjeC0+ZHVhbHdhdGNoX3N0ZXJlb19tb2RlLCBuZXdfc3RlcmVvX21vZGUsIG5ld19iaXRtYXApOworCUNYMThfREVCVUdfSU5GTygiZHVhbHdhdGNoOiBjaGFuZ2Ugc3RlcmVvIGZsYWcgZnJvbSAweCV4IHRvIDB4JXguICIKKwkJCSJuZXcgYXVkaW9fYml0bWFzaz0weCV1eFxuIiwKKwkJCWN4LT5kdWFsd2F0Y2hfc3RlcmVvX21vZGUsIG5ld19zdGVyZW9fbW9kZSwgbmV3X2JpdG1hcCk7CiAKLQlpZiAoY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfQVVESU9fUEFSQU1FVEVSUywgMiwKLQkJCQljeDE4X2ZpbmRfaGFuZGxlKGN4KSwgbmV3X2JpdG1hcCkgPT0gMCkgeworCWggPSBjeDE4X2ZpbmRfaGFuZGxlKGN4KTsKKwlpZiAoaCA9PSBDWDE4X0lOVkFMSURfVEFTS19IQU5ETEUpIHsKKwkJQ1gxOF9ERUJVR19JTkZPKCJkdWFsd2F0Y2g6IGNhbid0IGZpbmQgdmFsaWQgdGFzayBoYW5kbGVcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGN4MThfdmFwaShjeCwKKwkJICAgICAgQ1gxOF9DUFVfU0VUX0FVRElPX1BBUkFNRVRFUlMsIDIsIGgsIG5ld19iaXRtYXApID09IDApIHsKIAkJY3gtPmR1YWx3YXRjaF9zdGVyZW9fbW9kZSA9IG5ld19zdGVyZW9fbW9kZTsKIAkJcmV0dXJuOwogCX0KQEAgLTIyMyw3ICsyMzIsNyBAQAogCQlwcmVwYXJlX3RvX3dhaXQoJnMtPndhaXRxLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJLyogTmV3IGJ1ZmZlcnMgbWlnaHQgaGF2ZSBiZWNvbWUgYXZhaWxhYmxlIGJlZm9yZSB3ZSB3ZXJlIGFkZGVkCiAJCSAgIHRvIHRoZSB3YWl0cXVldWUgKi8KLQkJaWYgKCFzLT5xX2Z1bGwuYnVmZmVycykKKwkJaWYgKCFhdG9taWNfcmVhZCgmcy0+cV9mdWxsLmJ1ZmZlcnMpKQogCQkJc2NoZWR1bGUoKTsKIAkJZmluaXNoX3dhaXQoJnMtPndhaXRxLCAmd2FpdCk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewpAQCAtNTA5LDcgKzUxOCw3IEBACiAJQ1gxOF9ERUJVR19ISV9GSUxFKCJFbmNvZGVyIHBvbGxcbiIpOwogCXBvbGxfd2FpdChmaWxwLCAmcy0+d2FpdHEsIHdhaXQpOwogCi0JaWYgKHMtPnFfZnVsbC5sZW5ndGggfHwgcy0+cV9pby5sZW5ndGgpCisJaWYgKGF0b21pY19yZWFkKCZzLT5xX2Z1bGwuYnVmZmVycykgfHwgYXRvbWljX3JlYWQoJnMtPnFfaW8uYnVmZmVycykpCiAJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwogCWlmIChlb2YpCiAJCXJldHVybiBQT0xMSFVQOwpAQCAtNjk1LDIwICs3MDQsMjggQEAKIAogdm9pZCBjeDE4X211dGUoc3RydWN0IGN4MTggKmN4KQogewotCWlmIChhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpKQotCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9BVURJT19NVVRFLCAyLAotCQkJCWN4MThfZmluZF9oYW5kbGUoY3gpLCAxKTsKKwl1MzIgaDsKKwlpZiAoYXRvbWljX3JlYWQoJmN4LT5hbmFfY2FwdHVyaW5nKSkgeworCQloID0gY3gxOF9maW5kX2hhbmRsZShjeCk7CisJCWlmIChoICE9IENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRSkKKwkJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX0FVRElPX01VVEUsIDIsIGgsIDEpOworCQllbHNlCisJCQlDWDE4X0VSUigiQ2FuJ3QgZmluZCB2YWxpZCB0YXNrIGhhbmRsZSBmb3IgbXV0ZVxuIik7CisJfQogCUNYMThfREVCVUdfSU5GTygiTXV0ZVxuIik7CiB9CiAKIHZvaWQgY3gxOF91bm11dGUoc3RydWN0IGN4MTggKmN4KQogeworCXUzMiBoOwogCWlmIChhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpKSB7Ci0JCWN4MThfbXNsZWVwX3RpbWVvdXQoMTAwLCAwKTsKLQkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfTUlTQ19QQVJBTUVURVJTLCAyLAotCQkJCWN4MThfZmluZF9oYW5kbGUoY3gpLCAxMik7Ci0JCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX0FVRElPX01VVEUsIDIsCi0JCQkJY3gxOF9maW5kX2hhbmRsZShjeCksIDApOworCQloID0gY3gxOF9maW5kX2hhbmRsZShjeCk7CisJCWlmIChoICE9IENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRSkgeworCQkJY3gxOF9tc2xlZXBfdGltZW91dCgxMDAsIDApOworCQkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfTUlTQ19QQVJBTUVURVJTLCAyLCBoLCAxMik7CisJCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9BVURJT19NVVRFLCAyLCBoLCAwKTsKKwkJfSBlbHNlCisJCQlDWDE4X0VSUigiQ2FuJ3QgZmluZCB2YWxpZCB0YXNrIGhhbmRsZSBmb3IgdW5tdXRlXG4iKTsKIAl9CiAJQ1gxOF9ERUJVR19JTkZPKCJVbm11dGVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlybXdhcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpcm13YXJlLmMKaW5kZXggNzhmYWRkMi4uNTE1MzQ0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlybXdhcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maXJtd2FyZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCisjaW5jbHVkZSAiY3gxOC1pby5oIgogI2luY2x1ZGUgImN4MTgtc2NiLmgiCiAjaW5jbHVkZSAiY3gxOC1pcnEuaCIKICNpbmNsdWRlICJjeDE4LWZpcm13YXJlLmgiCkBAIC0xMTMsMTEgKzExNCwxMSBAQAogCXNyYyA9IChjb25zdCB1MzIgKilmdy0+ZGF0YTsKIAogCWZvciAoaSA9IDA7IGkgPCBmdy0+c2l6ZTsgaSArPSA0MDk2KSB7Ci0JCXNldHVwX3BhZ2UoaSk7CisJCWN4MThfc2V0dXBfcGFnZShjeCwgaSk7CiAJCWZvciAoaiA9IGk7IGogPCBmdy0+c2l6ZSAmJiBqIDwgaSArIDQwOTY7IGogKz0gNCkgewogCQkJLyogbm8gbmVlZCBmb3IgZW5kaWFubmVzcyBjb252ZXJzaW9uIG9uIHRoZSBwcGMgKi8KLQkJCV9fcmF3X3dyaXRlbCgqc3JjLCBkc3QpOwotCQkJaWYgKF9fcmF3X3JlYWRsKGRzdCkgIT0gKnNyYykgeworCQkJY3gxOF9yYXdfd3JpdGVsKGN4LCAqc3JjLCBkc3QpOworCQkJaWYgKGN4MThfcmF3X3JlYWRsKGN4LCBkc3QpICE9ICpzcmMpIHsKIAkJCQlDWDE4X0VSUigiTWlzbWF0Y2ggYXQgb2Zmc2V0ICV4XG4iLCBpKTsKIAkJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAkJCQlyZXR1cm4gLUVJTzsKQEAgLTE3MCwxMiArMTcxLDE1IEBACiAJCWlmIChvZmZzZXQgKyBzZWdoZHIuc2l6ZSA+IHN6KQogCQkJYnJlYWs7CiAJCWZvciAoaSA9IDA7IGkgPCBzZWdoZHIuc2l6ZTsgaSArPSA0MDk2KSB7Ci0JCQlzZXR1cF9wYWdlKG9mZnNldCArIGkpOworCQkJY3gxOF9zZXR1cF9wYWdlKGN4LCBvZmZzZXQgKyBpKTsKIAkJCWZvciAoaiA9IGk7IGogPCBzZWdoZHIuc2l6ZSAmJiBqIDwgaSArIDQwOTY7IGogKz0gNCkgewogCQkJCS8qIG5vIG5lZWQgZm9yIGVuZGlhbm5lc3MgY29udmVyc2lvbiBvbiB0aGUgcHBjICovCi0JCQkJX19yYXdfd3JpdGVsKHNyY1sob2Zmc2V0ICsgaikgLyA0XSwgZHN0ICsgc2VnaGRyLmFkZHIgKyBqKTsKLQkJCQlpZiAoX19yYXdfcmVhZGwoZHN0ICsgc2VnaGRyLmFkZHIgKyBqKSAhPSBzcmNbKG9mZnNldCArIGopIC8gNF0pIHsKLQkJCQkJQ1gxOF9FUlIoIk1pc21hdGNoIGF0IG9mZnNldCAleFxuIiwgb2Zmc2V0ICsgaik7CisJCQkJY3gxOF9yYXdfd3JpdGVsKGN4LCBzcmNbKG9mZnNldCArIGopIC8gNF0sCisJCQkJCQlkc3QgKyBzZWdoZHIuYWRkciArIGopOworCQkJCWlmIChjeDE4X3Jhd19yZWFkbChjeCwgZHN0ICsgc2VnaGRyLmFkZHIgKyBqKQorCQkJCSAgICAhPSBzcmNbKG9mZnNldCArIGopIC8gNF0pIHsKKwkJCQkJQ1gxOF9FUlIoIk1pc21hdGNoIGF0IG9mZnNldCAleFxuIiwKKwkJCQkJCSBvZmZzZXQgKyBqKTsKIAkJCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJCQkJCXJldHVybiAtRUlPOwogCQkJCX0KQEAgLTE4OSw0MyArMTkzLDQ1IEBACiAJc2l6ZSA9IGZ3LT5zaXplOwogCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCS8qIENsZWFyIGJpdDAgZm9yIEFQVSB0byBzdGFydCBmcm9tIDAgKi8KLQl3cml0ZV9yZWcocmVhZF9yZWcoMHhjNzIwMzApICYgfjEsIDB4YzcyMDMwKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgY3gxOF9yZWFkX3JlZyhjeCwgMHhjNzIwMzApICYgfjEsIDB4YzcyMDMwKTsKIAlyZXR1cm4gc2l6ZTsKIH0KIAogdm9pZCBjeDE4X2hhbHRfZmlybXdhcmUoc3RydWN0IGN4MTggKmN4KQogewogCUNYMThfREVCVUdfSU5GTygiUHJlcGFyaW5nIGZvciBmaXJtd2FyZSBoYWx0LlxuIik7Ci0Jd3JpdGVfcmVnKDB4MDAwRjAwMEYsIENYMThfUFJPQ19TT0ZUX1JFU0VUKTsgLyogc3RvcCB0aGUgZncgKi8KLQl3cml0ZV9yZWcoMHgwMDAyMDAwMiwgQ1gxOF9BREVDX0NPTlRST0wpOworCWN4MThfd3JpdGVfcmVnKGN4LCAweDAwMEYwMDBGLCBDWDE4X1BST0NfU09GVF9SRVNFVCk7IC8qIHN0b3AgdGhlIGZ3ICovCisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMjAwMDIsIENYMThfQURFQ19DT05UUk9MKTsKIH0KIAogdm9pZCBjeDE4X2luaXRfcG93ZXIoc3RydWN0IGN4MTggKmN4LCBpbnQgbG93cHdyKQogewogCS8qIHBvd2VyLWRvd24gU3BhcmUgYW5kIEFPTSBQTExzICovCiAJLyogcG93ZXItdXAgZmFzdCwgc2xvdyBhbmQgbXBlZyBQTExzICovCi0Jd3JpdGVfcmVnKDB4MDAwMDAwMDgsIENYMThfUExMX1BPV0VSX0RPV04pOworCWN4MThfd3JpdGVfcmVnKGN4LCAweDAwMDAwMDA4LCBDWDE4X1BMTF9QT1dFUl9ET1dOKTsKIAogCS8qIEFERUMgb3V0IG9mIHNsZWVwICovCi0Jd3JpdGVfcmVnKDB4MDAwMjAwMDAsIENYMThfQURFQ19DT05UUk9MKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDAyMDAwMCwgQ1gxOF9BREVDX0NPTlRST0wpOwogCiAJLyogVGhlIGZhc3QgY2xvY2sgaXMgYXQgMjAwLzI0NSBNSHogKi8KLQl3cml0ZV9yZWcobG93cHdyID8gMHhEIDogMHgxMSwgQ1gxOF9GQVNUX0NMT0NLX1BMTF9JTlQpOwotCXdyaXRlX3JlZyhsb3dwd3IgPyAweDFFRkJGMzcgOiAweDAzOEUzRDcsIENYMThfRkFTVF9DTE9DS19QTExfRlJBQyk7CisJY3gxOF93cml0ZV9yZWcoY3gsIGxvd3B3ciA/IDB4RCA6IDB4MTEsIENYMThfRkFTVF9DTE9DS19QTExfSU5UKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgbG93cHdyID8gMHgxRUZCRjM3IDogMHgwMzhFM0Q3LAorCQkJCQkJQ1gxOF9GQVNUX0NMT0NLX1BMTF9GUkFDKTsKIAotCXdyaXRlX3JlZygyLCBDWDE4X0ZBU1RfQ0xPQ0tfUExMX1BPU1QpOwotCXdyaXRlX3JlZygxLCBDWDE4X0ZBU1RfQ0xPQ0tfUExMX1BSRVNDQUxFKTsKLQl3cml0ZV9yZWcoNCwgQ1gxOF9GQVNUX0NMT0NLX1BMTF9BREpVU1RfQkFORFdJRFRIKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgMiwgQ1gxOF9GQVNUX0NMT0NLX1BMTF9QT1NUKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgMSwgQ1gxOF9GQVNUX0NMT0NLX1BMTF9QUkVTQ0FMRSk7CisJY3gxOF93cml0ZV9yZWcoY3gsIDQsIENYMThfRkFTVF9DTE9DS19QTExfQURKVVNUX0JBTkRXSURUSCk7CiAKIAkvKiBzZXQgc2xvdyBjbG9jayB0byAxMjUvMTIwIE1IeiAqLwotCXdyaXRlX3JlZyhsb3dwd3IgPyAweDExIDogMHgxMCwgQ1gxOF9TTE9XX0NMT0NLX1BMTF9JTlQpOwotCXdyaXRlX3JlZyhsb3dwd3IgPyAweEVCQUYwNSA6IDB4MTg2MThBOCwgQ1gxOF9TTE9XX0NMT0NLX1BMTF9GUkFDKTsKLQl3cml0ZV9yZWcoNCwgQ1gxOF9TTE9XX0NMT0NLX1BMTF9QT1NUKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgbG93cHdyID8gMHgxMSA6IDB4MTAsIENYMThfU0xPV19DTE9DS19QTExfSU5UKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgbG93cHdyID8gMHhFQkFGMDUgOiAweDE4NjE4QTgsCisJCQkJCQlDWDE4X1NMT1dfQ0xPQ0tfUExMX0ZSQUMpOworCWN4MThfd3JpdGVfcmVnKGN4LCA0LCBDWDE4X1NMT1dfQ0xPQ0tfUExMX1BPU1QpOwogCiAJLyogbXBlZyBjbG9jayBwbGwgNTRNSHogKi8KLQl3cml0ZV9yZWcoMHhGLCBDWDE4X01QRUdfQ0xPQ0tfUExMX0lOVCk7Ci0Jd3JpdGVfcmVnKDB4MkJDRkVGLCBDWDE4X01QRUdfQ0xPQ0tfUExMX0ZSQUMpOwotCXdyaXRlX3JlZyg4LCBDWDE4X01QRUdfQ0xPQ0tfUExMX1BPU1QpOworCWN4MThfd3JpdGVfcmVnKGN4LCAweEYsIENYMThfTVBFR19DTE9DS19QTExfSU5UKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgMHgyQkNGRUYsIENYMThfTVBFR19DTE9DS19QTExfRlJBQyk7CisJY3gxOF93cml0ZV9yZWcoY3gsIDgsIENYMThfTVBFR19DTE9DS19QTExfUE9TVCk7CiAKIAkvKiBEZWZhdWx0cyAqLwogCS8qIEFQVSA9IFNDIG9yIFNDLzIgPSAxMjUvNjIuNSAqLwpAQCAtMjQyLDgxICsyNDgsODQgQEAKIAkvKiBWRkMgPSBkaXNhYmxlZCAqLwogCS8qIFVTQiA9IGRpc2FibGVkICovCiAKLQl3cml0ZV9yZWcobG93cHdyID8gMHhGRkZGMDAyMCA6IDB4MDAwNjAwMDQsIENYMThfQ0xPQ0tfU0VMRUNUMSk7Ci0Jd3JpdGVfcmVnKGxvd3B3ciA/IDB4RkZGRjAwMDQgOiAweDAwMDYwMDA2LCBDWDE4X0NMT0NLX1NFTEVDVDIpOworCWN4MThfd3JpdGVfcmVnKGN4LCBsb3dwd3IgPyAweEZGRkYwMDIwIDogMHgwMDA2MDAwNCwKKwkJCQkJCQlDWDE4X0NMT0NLX1NFTEVDVDEpOworCWN4MThfd3JpdGVfcmVnKGN4LCBsb3dwd3IgPyAweEZGRkYwMDA0IDogMHgwMDA2MDAwNiwKKwkJCQkJCQlDWDE4X0NMT0NLX1NFTEVDVDIpOwogCi0Jd3JpdGVfcmVnKDB4RkZGRjAwMDIsIENYMThfSEFMRl9DTE9DS19TRUxFQ1QxKTsKLQl3cml0ZV9yZWcoMHhGRkZGMDEwNCwgQ1gxOF9IQUxGX0NMT0NLX1NFTEVDVDIpOworCWN4MThfd3JpdGVfcmVnKGN4LCAweEZGRkYwMDAyLCBDWDE4X0hBTEZfQ0xPQ0tfU0VMRUNUMSk7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4RkZGRjAxMDQsIENYMThfSEFMRl9DTE9DS19TRUxFQ1QyKTsKIAotCXdyaXRlX3JlZygweEZGRkY5MDI2LCBDWDE4X0NMT0NLX0VOQUJMRTEpOwotCXdyaXRlX3JlZygweEZGRkYzMTA1LCBDWDE4X0NMT0NLX0VOQUJMRTIpOworCWN4MThfd3JpdGVfcmVnKGN4LCAweEZGRkY5MDI2LCBDWDE4X0NMT0NLX0VOQUJMRTEpOworCWN4MThfd3JpdGVfcmVnKGN4LCAweEZGRkYzMTA1LCBDWDE4X0NMT0NLX0VOQUJMRTIpOwogfQogCiB2b2lkIGN4MThfaW5pdF9tZW1vcnkoc3RydWN0IGN4MTggKmN4KQogewogCWN4MThfbXNsZWVwX3RpbWVvdXQoMTAsIDApOwotCXdyaXRlX3JlZygweDEwMDAwLCBDWDE4X0REUl9TT0ZUX1JFU0VUKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgMHgxMDAwMCwgQ1gxOF9ERFJfU09GVF9SRVNFVCk7CiAJY3gxOF9tc2xlZXBfdGltZW91dCgxMCwgMCk7CiAKLQl3cml0ZV9yZWcoY3gtPmNhcmQtPmRkci5jaGlwX2NvbmZpZywgQ1gxOF9ERFJfQ0hJUF9DT05GSUcpOworCWN4MThfd3JpdGVfcmVnKGN4LCBjeC0+Y2FyZC0+ZGRyLmNoaXBfY29uZmlnLCBDWDE4X0REUl9DSElQX0NPTkZJRyk7CiAKIAljeDE4X21zbGVlcF90aW1lb3V0KDEwLCAwKTsKIAotCXdyaXRlX3JlZyhjeC0+Y2FyZC0+ZGRyLnJlZnJlc2gsIENYMThfRERSX1JFRlJFU0gpOwotCXdyaXRlX3JlZyhjeC0+Y2FyZC0+ZGRyLnRpbWluZzEsIENYMThfRERSX1RJTUlORzEpOwotCXdyaXRlX3JlZyhjeC0+Y2FyZC0+ZGRyLnRpbWluZzIsIENYMThfRERSX1RJTUlORzIpOworCWN4MThfd3JpdGVfcmVnKGN4LCBjeC0+Y2FyZC0+ZGRyLnJlZnJlc2gsIENYMThfRERSX1JFRlJFU0gpOworCWN4MThfd3JpdGVfcmVnKGN4LCBjeC0+Y2FyZC0+ZGRyLnRpbWluZzEsIENYMThfRERSX1RJTUlORzEpOworCWN4MThfd3JpdGVfcmVnKGN4LCBjeC0+Y2FyZC0+ZGRyLnRpbWluZzIsIENYMThfRERSX1RJTUlORzIpOwogCiAJY3gxOF9tc2xlZXBfdGltZW91dCgxMCwgMCk7CiAKIAkvKiBJbml0aWFsaXplIERRUyBwYWQgdGltZSAqLwotCXdyaXRlX3JlZyhjeC0+Y2FyZC0+ZGRyLnR1bmVfbGFuZSwgQ1gxOF9ERFJfVFVORV9MQU5FKTsKLQl3cml0ZV9yZWcoY3gtPmNhcmQtPmRkci5pbml0aWFsX2VtcnMsIENYMThfRERSX0lOSVRJQUxfRU1SUyk7CisJY3gxOF93cml0ZV9yZWcoY3gsIGN4LT5jYXJkLT5kZHIudHVuZV9sYW5lLCBDWDE4X0REUl9UVU5FX0xBTkUpOworCWN4MThfd3JpdGVfcmVnKGN4LCBjeC0+Y2FyZC0+ZGRyLmluaXRpYWxfZW1ycywgQ1gxOF9ERFJfSU5JVElBTF9FTVJTKTsKIAogCWN4MThfbXNsZWVwX3RpbWVvdXQoMTAsIDApOwogCi0Jd3JpdGVfcmVnKDB4MjAwMDAsIENYMThfRERSX1NPRlRfUkVTRVQpOworCWN4MThfd3JpdGVfcmVnKGN4LCAweDIwMDAwLCBDWDE4X0REUl9TT0ZUX1JFU0VUKTsKIAljeDE4X21zbGVlcF90aW1lb3V0KDEwLCAwKTsKIAogCS8qIHVzZSBwb3dlci1kb3duIG1vZGUgd2hlbiBpZGxlICovCi0Jd3JpdGVfcmVnKDB4MDAwMDAwMTAsIENYMThfRERSX1BPV0VSX1JFRyk7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMDAwMTAsIENYMThfRERSX1BPV0VSX1JFRyk7CiAKLQl3cml0ZV9yZWcoMHgxMDAwMSwgQ1gxOF9SRUdfQlVTX1RJTUVPVVRfRU4pOworCWN4MThfd3JpdGVfcmVnKGN4LCAweDEwMDAxLCBDWDE4X1JFR19CVVNfVElNRU9VVF9FTik7CiAKLQl3cml0ZV9yZWcoMHg0OCwgQ1gxOF9ERFJfTUJfUEVSX1JPV183KTsKLQl3cml0ZV9yZWcoMHhFMDAwMCwgQ1gxOF9ERFJfQkFTRV82M19BRERSKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgMHg0OCwgQ1gxOF9ERFJfTUJfUEVSX1JPV183KTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgMHhFMDAwMCwgQ1gxOF9ERFJfQkFTRV82M19BRERSKTsKIAotCXdyaXRlX3JlZygweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQwMik7ICAvKiBBTyAqLwotCXdyaXRlX3JlZygweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQwOSk7ICAvKiBBSTIgKi8KLQl3cml0ZV9yZWcoMHgwMDAwMDEwMSwgQ1gxOF9XTUJfQ0xJRU5UMDUpOyAgLyogVklNMSAqLwotCXdyaXRlX3JlZygweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQwNik7ICAvKiBBSTEgKi8KLQl3cml0ZV9yZWcoMHgwMDAwMDEwMSwgQ1gxOF9XTUJfQ0xJRU5UMDcpOyAgLyogM0QgY29tYiAqLwotCXdyaXRlX3JlZygweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQxMCk7ICAvKiBNRSAqLwotCXdyaXRlX3JlZygweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQxMik7ICAvKiBFTkMgKi8KLQl3cml0ZV9yZWcoMHgwMDAwMDEwMSwgQ1gxOF9XTUJfQ0xJRU5UMTMpOyAgLyogUEsgKi8KLQl3cml0ZV9yZWcoMHgwMDAwMDEwMSwgQ1gxOF9XTUJfQ0xJRU5UMTEpOyAgLyogUkMgKi8KLQl3cml0ZV9yZWcoMHgwMDAwMDEwMSwgQ1gxOF9XTUJfQ0xJRU5UMTQpOyAgLyogQVZPICovCisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDAyKTsgIC8qIEFPICovCisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDA5KTsgIC8qIEFJMiAqLworCWN4MThfd3JpdGVfcmVnKGN4LCAweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQwNSk7ICAvKiBWSU0xICovCisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDA2KTsgIC8qIEFJMSAqLworCWN4MThfd3JpdGVfcmVnKGN4LCAweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQwNyk7ICAvKiAzRCBjb21iICovCisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDEwKTsgIC8qIE1FICovCisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDEyKTsgIC8qIEVOQyAqLworCWN4MThfd3JpdGVfcmVnKGN4LCAweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQxMyk7ICAvKiBQSyAqLworCWN4MThfd3JpdGVfcmVnKGN4LCAweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQxMSk7ICAvKiBSQyAqLworCWN4MThfd3JpdGVfcmVnKGN4LCAweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQxNCk7ICAvKiBBVk8gKi8KIH0KIAogaW50IGN4MThfZmlybXdhcmVfaW5pdChzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJLyogQWxsb3cgY2hpcCB0byBjb250cm9sIENMS1JVTiAqLwotCXdyaXRlX3JlZygweDUsIENYMThfRFNQMF9JTlRFUlJVUFRfTUFTSyk7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4NSwgQ1gxOF9EU1AwX0lOVEVSUlVQVF9NQVNLKTsKIAotCXdyaXRlX3JlZygweDAwMEYwMDBGLCBDWDE4X1BST0NfU09GVF9SRVNFVCk7IC8qIHN0b3AgdGhlIGZ3ICovCisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwRjAwMEYsIENYMThfUFJPQ19TT0ZUX1JFU0VUKTsgLyogc3RvcCB0aGUgZncgKi8KIAogCWN4MThfbXNsZWVwX3RpbWVvdXQoMSwgMCk7CiAKLQlzdzFfaXJxX2VuYWJsZShJUlFfQ1BVX1RPX0VQVSB8IElSUV9BUFVfVE9fRVBVKTsKLQlzdzJfaXJxX2VuYWJsZShJUlFfQ1BVX1RPX0VQVV9BQ0sgfCBJUlFfQVBVX1RPX0VQVV9BQ0spOworCWN4MThfc3cxX2lycV9lbmFibGUoY3gsIElSUV9DUFVfVE9fRVBVIHwgSVJRX0FQVV9UT19FUFUpOworCWN4MThfc3cyX2lycV9lbmFibGUoY3gsIElSUV9DUFVfVE9fRVBVX0FDSyB8IElSUV9BUFVfVE9fRVBVX0FDSyk7CiAKIAkvKiBPbmx5IGlmIHRoZSBwcm9jZXNzb3IgaXMgbm90IHJ1bm5pbmcgKi8KLQlpZiAocmVhZF9yZWcoQ1gxOF9QUk9DX1NPRlRfUkVTRVQpICYgOCkgeworCWlmIChjeDE4X3JlYWRfcmVnKGN4LCBDWDE4X1BST0NfU09GVF9SRVNFVCkgJiA4KSB7CiAJCWludCBzeiA9IGxvYWRfYXB1X2Z3X2RpcmVjdCgidjRsLWN4MjM0MTgtYXB1LmZ3IiwKIAkJCSAgICAgICBjeC0+ZW5jX21lbSwgY3gpOwogCi0JCXdyaXRlX2VuYygweEU1MUZGMDA0LCAwKTsKLQkJd3JpdGVfZW5jKDB4YTAwMDAwLCA0KTsgIC8qIHRvZG86IG5vdCBoYXJkY29kZWQgKi8KLQkJd3JpdGVfcmVnKDB4MDAwMTAwMDAsIENYMThfUFJPQ19TT0ZUX1JFU0VUKTsgLyogU3RhcnQgQVBVICovCisJCWN4MThfd3JpdGVfZW5jKGN4LCAweEU1MUZGMDA0LCAwKTsKKwkJY3gxOF93cml0ZV9lbmMoY3gsIDB4YTAwMDAwLCA0KTsgIC8qIHRvZG86IG5vdCBoYXJkY29kZWQgKi8KKwkJLyogU3RhcnQgQVBVICovCisJCWN4MThfd3JpdGVfcmVnKGN4LCAweDAwMDEwMDAwLCBDWDE4X1BST0NfU09GVF9SRVNFVCk7CiAJCWN4MThfbXNsZWVwX3RpbWVvdXQoNTAwLCAwKTsKIAogCQlzeiA9IHN6IDw9IDAgPyBzeiA6IGxvYWRfY3B1X2Z3X2RpcmVjdCgidjRsLWN4MjM0MTgtY3B1LmZ3IiwKQEAgLTMyNiw5ICszMzUsMTAgQEAKIAkJCWludCByZXRyaWVzID0gMDsKIAogCQkJLyogc3RhcnQgdGhlIENQVSAqLwotCQkJd3JpdGVfcmVnKDB4MDAwODAwMDAsIENYMThfUFJPQ19TT0ZUX1JFU0VUKTsKKwkJCWN4MThfd3JpdGVfcmVnKGN4LCAweDAwMDgwMDAwLCBDWDE4X1BST0NfU09GVF9SRVNFVCk7CiAJCQl3aGlsZSAocmV0cmllcysrIDwgNTApIHsgLyogTG9vcCBmb3IgbWF4IDUwMG1TICovCi0JCQkJaWYgKChyZWFkX3JlZyhDWDE4X1BST0NfU09GVF9SRVNFVCkgJiAxKSA9PSAwKQorCQkJCWlmICgoY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9QUk9DX1NPRlRfUkVTRVQpCisJCQkJICAgICAmIDEpID09IDApCiAJCQkJCWJyZWFrOwogCQkJCWN4MThfbXNsZWVwX3RpbWVvdXQoMTAsIDApOwogCQkJfQpAQCAtMzQyLDYgKzM1Miw2IEBACiAJCQlyZXR1cm4gLUVJTzsKIAl9CiAJLyogaW5pdGlhbGl6ZSBHUElPICovCi0Jd3JpdGVfcmVnKDB4MTQwMDE0MDAsIDB4Qzc4MTEwKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgMHgxNDAwMTQwMCwgMHhDNzgxMTApOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5jCmluZGV4IDNkNDk1ZGIuLjBlNTYwNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKyNpbmNsdWRlICJjeDE4LWlvLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogI2luY2x1ZGUgImN4MTgtZ3Bpby5oIgogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgpAQCAtNDksMTEgKzUwLDExIEBACiAJdTMyIGRpciA9IGN4LT5ncGlvX2RpcjsKIAl1MzIgdmFsID0gY3gtPmdwaW9fdmFsOwogCi0Jd3JpdGVfcmVnKChkaXIgJiAweGZmZmYpIDw8IDE2LCBDWDE4X1JFR19HUElPX0RJUjEpOwotCXdyaXRlX3JlZygoKGRpciAmIDB4ZmZmZikgPDwgMTYpIHwgKHZhbCAmIDB4ZmZmZiksCisJY3gxOF93cml0ZV9yZWcoY3gsIChkaXIgJiAweGZmZmYpIDw8IDE2LCBDWDE4X1JFR19HUElPX0RJUjEpOworCWN4MThfd3JpdGVfcmVnKGN4LCAoKGRpciAmIDB4ZmZmZikgPDwgMTYpIHwgKHZhbCAmIDB4ZmZmZiksCiAJCQlDWDE4X1JFR19HUElPX09VVDEpOwotCXdyaXRlX3JlZyhkaXIgJiAweGZmZmYwMDAwLCBDWDE4X1JFR19HUElPX0RJUjIpOwotCXdyaXRlX3JlZ19zeW5jKChkaXIgJiAweGZmZmYwMDAwKSB8ICgodmFsICYgMHhmZmZmMDAwMCkgPj4gMTYpLAorCWN4MThfd3JpdGVfcmVnKGN4LCBkaXIgJiAweGZmZmYwMDAwLCBDWDE4X1JFR19HUElPX0RJUjIpOworCWN4MThfd3JpdGVfcmVnX3N5bmMoY3gsIChkaXIgJiAweGZmZmYwMDAwKSB8ICgodmFsICYgMHhmZmZmMDAwMCkgPj4gMTYpLAogCQkJQ1gxOF9SRUdfR1BJT19PVVQyKTsKIH0KIApAQCAtMTQxLDE1ICsxNDIsMTcgQEAKIAl9CiAKIAlDWDE4X0RFQlVHX0lORk8oIkdQSU8gaW5pdGlhbCBkaXI6ICUwOHgvJTA4eCBvdXQ6ICUwOHgvJTA4eFxuIiwKLQkJICAgcmVhZF9yZWcoQ1gxOF9SRUdfR1BJT19ESVIxKSwgcmVhZF9yZWcoQ1gxOF9SRUdfR1BJT19ESVIyKSwKLQkJICAgcmVhZF9yZWcoQ1gxOF9SRUdfR1BJT19PVVQxKSwgcmVhZF9yZWcoQ1gxOF9SRUdfR1BJT19PVVQyKSk7CisJCQljeDE4X3JlYWRfcmVnKGN4LCBDWDE4X1JFR19HUElPX0RJUjEpLAorCQkJY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9SRUdfR1BJT19ESVIyKSwKKwkJCWN4MThfcmVhZF9yZWcoY3gsIENYMThfUkVHX0dQSU9fT1VUMSksCisJCQljeDE4X3JlYWRfcmVnKGN4LCBDWDE4X1JFR19HUElPX09VVDIpKTsKIAogCWdwaW9fd3JpdGUoY3gpOwogCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CiB9CiAKIC8qIFhjZWl2ZSB0dW5lciByZXNldCBmdW5jdGlvbiAqLwotaW50IGN4MThfcmVzZXRfdHVuZXJfZ3Bpbyh2b2lkICpkZXYsIGludCBjbWQsIGludCB2YWx1ZSkKK2ludCBjeDE4X3Jlc2V0X3R1bmVyX2dwaW8odm9pZCAqZGV2LCBpbnQgY29tcG9uZW50LCBpbnQgY21kLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhICphbGdvID0gZGV2OwogCXN0cnVjdCBjeDE4X2kyY19hbGdvX2NhbGxiYWNrX2RhdGEgKmNiX2RhdGEgPSBhbGdvLT5kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5oCmluZGV4IDIyY2Q3ZGQuLmJlYjc0MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmgKQEAgLTIzLDUgKzIzLDUgQEAKIHZvaWQgY3gxOF9ncGlvX2luaXQoc3RydWN0IGN4MTggKmN4KTsKIHZvaWQgY3gxOF9yZXNldF9pMmNfc2xhdmVzX2dwaW8oc3RydWN0IGN4MTggKmN4KTsKIHZvaWQgY3gxOF9yZXNldF9pcl9ncGlvKHZvaWQgKmRhdGEpOwotaW50IGN4MThfcmVzZXRfdHVuZXJfZ3Bpbyh2b2lkICpkZXYsIGludCBjbWQsIGludCB2YWx1ZSk7CitpbnQgY3gxOF9yZXNldF90dW5lcl9ncGlvKHZvaWQgKmRldiwgaW50IGNvbXBvbmVudCwgaW50IGNtZCwgaW50IHZhbHVlKTsKIGludCBjeDE4X2dwaW8oc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdm9pZCAqYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKaW5kZXggNjAyM2JhMy4uYWEwOWU1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKQEAgLTIyLDEzICsyMiwxMiBAQAogICovCiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorI2luY2x1ZGUgImN4MTgtaW8uaCIKICNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCiAjaW5jbHVkZSAiY3gxOC1ncGlvLmgiCiAjaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCiAjaW5jbHVkZSAiY3gxOC1pMmMuaCIKIAotI2luY2x1ZGUgPG1lZGlhL2lyLWtiZC1pMmMuaD4KLQogI2RlZmluZSBDWDE4X1JFR19JMkNfMV9XUiAgIDB4ZjE1MDAwCiAjZGVmaW5lIENYMThfUkVHX0kyQ18xX1JEICAgMHhmMTUwMDgKICNkZWZpbmUgQ1gxOF9SRUdfSTJDXzJfV1IgICAweGYyNTEwMApAQCAtMTU4LDEyICsxNTcsMTIgQEAKIAlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X2kyY19hbGdvX2NhbGxiYWNrX2RhdGEgKilkYXRhKS0+Y3g7CiAJaW50IGJ1c19pbmRleCA9ICgoc3RydWN0IGN4MThfaTJjX2FsZ29fY2FsbGJhY2tfZGF0YSAqKWRhdGEpLT5idXNfaW5kZXg7CiAJdTMyIGFkZHIgPSBidXNfaW5kZXggPyBDWDE4X1JFR19JMkNfMl9XUiA6IENYMThfUkVHX0kyQ18xX1dSOwotCXUzMiByID0gcmVhZF9yZWcoYWRkcik7CisJdTMyIHIgPSBjeDE4X3JlYWRfcmVnKGN4LCBhZGRyKTsKIAogCWlmIChzdGF0ZSkKLQkJd3JpdGVfcmVnX3N5bmMociB8IFNFVFNDTF9CSVQsIGFkZHIpOworCQljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCByIHwgU0VUU0NMX0JJVCwgYWRkcik7CiAJZWxzZQotCQl3cml0ZV9yZWdfc3luYyhyICYgflNFVFNDTF9CSVQsIGFkZHIpOworCQljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCByICYgflNFVFNDTF9CSVQsIGFkZHIpOwogfQogCiBzdGF0aWMgdm9pZCBjeDE4X3NldHNkYSh2b2lkICpkYXRhLCBpbnQgc3RhdGUpCkBAIC0xNzEsMTIgKzE3MCwxMiBAQAogCXN0cnVjdCBjeDE4ICpjeCA9ICgoc3RydWN0IGN4MThfaTJjX2FsZ29fY2FsbGJhY2tfZGF0YSAqKWRhdGEpLT5jeDsKIAlpbnQgYnVzX2luZGV4ID0gKChzdHJ1Y3QgY3gxOF9pMmNfYWxnb19jYWxsYmFja19kYXRhICopZGF0YSktPmJ1c19pbmRleDsKIAl1MzIgYWRkciA9IGJ1c19pbmRleCA/IENYMThfUkVHX0kyQ18yX1dSIDogQ1gxOF9SRUdfSTJDXzFfV1I7Ci0JdTMyIHIgPSByZWFkX3JlZyhhZGRyKTsKKwl1MzIgciA9IGN4MThfcmVhZF9yZWcoY3gsIGFkZHIpOwogCiAJaWYgKHN0YXRlKQotCQl3cml0ZV9yZWdfc3luYyhyIHwgU0VUU0RMX0JJVCwgYWRkcik7CisJCWN4MThfd3JpdGVfcmVnX3N5bmMoY3gsIHIgfCBTRVRTRExfQklULCBhZGRyKTsKIAllbHNlCi0JCXdyaXRlX3JlZ19zeW5jKHIgJiB+U0VUU0RMX0JJVCwgYWRkcik7CisJCWN4MThfd3JpdGVfcmVnX3N5bmMoY3gsIHIgJiB+U0VUU0RMX0JJVCwgYWRkcik7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF9nZXRzY2wodm9pZCAqZGF0YSkKQEAgLTE4NSw3ICsxODQsNyBAQAogCWludCBidXNfaW5kZXggPSAoKHN0cnVjdCBjeDE4X2kyY19hbGdvX2NhbGxiYWNrX2RhdGEgKilkYXRhKS0+YnVzX2luZGV4OwogCXUzMiBhZGRyID0gYnVzX2luZGV4ID8gQ1gxOF9SRUdfSTJDXzJfUkQgOiBDWDE4X1JFR19JMkNfMV9SRDsKIAotCXJldHVybiByZWFkX3JlZyhhZGRyKSAmIEdFVFNDTF9CSVQ7CisJcmV0dXJuIGN4MThfcmVhZF9yZWcoY3gsIGFkZHIpICYgR0VUU0NMX0JJVDsKIH0KIAogc3RhdGljIGludCBjeDE4X2dldHNkYSh2b2lkICpkYXRhKQpAQCAtMTk0LDcgKzE5Myw3IEBACiAJaW50IGJ1c19pbmRleCA9ICgoc3RydWN0IGN4MThfaTJjX2FsZ29fY2FsbGJhY2tfZGF0YSAqKWRhdGEpLT5idXNfaW5kZXg7CiAJdTMyIGFkZHIgPSBidXNfaW5kZXggPyBDWDE4X1JFR19JMkNfMl9SRCA6IENYMThfUkVHX0kyQ18xX1JEOwogCi0JcmV0dXJuIHJlYWRfcmVnKGFkZHIpICYgR0VUU0RMX0JJVDsKKwlyZXR1cm4gY3gxOF9yZWFkX3JlZyhjeCwgYWRkcikgJiBHRVRTRExfQklUOwogfQogCiAvKiB0ZW1wbGF0ZSBmb3IgaTJjLWJpdC1hbGdvICovCkBAIC0zOTQsMjkgKzM5MywzMyBAQAogCQljeC0+aTJjX2FkYXBbaV0uZGV2LnBhcmVudCA9ICZjeC0+ZGV2LT5kZXY7CiAJfQogCi0JaWYgKHJlYWRfcmVnKENYMThfUkVHX0kyQ18yX1dSKSAhPSAweDAwMDNjMDJmKSB7CisJaWYgKGN4MThfcmVhZF9yZWcoY3gsIENYMThfUkVHX0kyQ18yX1dSKSAhPSAweDAwMDNjMDJmKSB7CiAJCS8qIFJlc2V0L1VucmVzZXQgSTJDIGhhcmR3YXJlIGJsb2NrICovCi0JCXdyaXRlX3JlZygweDEwMDAwMDAwLCAweGM3MTAwNCk7IC8qIENsb2NrIHNlbGVjdCAyMjBNSHogKi8KLQkJd3JpdGVfcmVnX3N5bmMoMHgxMDAwMTAwMCwgMHhjNzEwMjQpOyAvKiBDbG9jayBFbmFibGUgKi8KKwkJLyogQ2xvY2sgc2VsZWN0IDIyME1IeiAqLworCQljeDE4X3dyaXRlX3JlZyhjeCwgMHgxMDAwMDAwMCwgMHhjNzEwMDQpOworCQkvKiBDbG9jayBFbmFibGUgKi8KKwkJY3gxOF93cml0ZV9yZWdfc3luYyhjeCwgMHgxMDAwMTAwMCwgMHhjNzEwMjQpOwogCX0KIAkvKiBjb3VydGVzeSBvZiBTdGV2ZW4gVG90aCA8c3RvdGhAaGF1cHBhdWdlLmNvbT4gKi8KLQl3cml0ZV9yZWdfc3luYygweDAwYzAwMDAwLCAweGM3MDAxYyk7CisJY3gxOF93cml0ZV9yZWdfc3luYyhjeCwgMHgwMGMwMDAwMCwgMHhjNzAwMWMpOwogCW1kZWxheSgxMCk7Ci0Jd3JpdGVfcmVnX3N5bmMoMHgwMGMwMDBjMCwgMHhjNzAwMWMpOworCWN4MThfd3JpdGVfcmVnX3N5bmMoY3gsIDB4MDBjMDAwYzAsIDB4YzcwMDFjKTsKIAltZGVsYXkoMTApOwotCXdyaXRlX3JlZ19zeW5jKDB4MDBjMDAwMDAsIDB4YzcwMDFjKTsKKwljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCAweDAwYzAwMDAwLCAweGM3MDAxYyk7CiAJbWRlbGF5KDEwKTsKIAotCXdyaXRlX3JlZ19zeW5jKDB4MDBjMDAwMDAsIDB4YzczMGM4KTsgLyogU2V0IHRvIGVkZ2UtdHJpZ2dlcmVkIGludHJzLiAqLwotCXdyaXRlX3JlZ19zeW5jKDB4MDBjMDAwMDAsIDB4YzczMGM0KTsgLyogQ2xlYXIgYW55IHN0YWxlIGludHJzICovCisJLyogU2V0IHRvIGVkZ2UtdHJpZ2dlcmVkIGludHJzLiAqLworCWN4MThfd3JpdGVfcmVnX3N5bmMoY3gsIDB4MDBjMDAwMDAsIDB4YzczMGM4KTsKKwkvKiBDbGVhciBhbnkgc3RhbGUgaW50cnMgKi8KKwljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCAweDAwYzAwMDAwLCAweGM3MzBjNCk7CiAKIAkvKiBIdyBJMkMxIENsb2NrIEZyZXEgfjEwMGtIeiAqLwotCXdyaXRlX3JlZ19zeW5jKDB4MDAwMjFjMGYgJiB+NCwgQ1gxOF9SRUdfSTJDXzFfV1IpOworCWN4MThfd3JpdGVfcmVnX3N5bmMoY3gsIDB4MDAwMjFjMGYgJiB+NCwgQ1gxOF9SRUdfSTJDXzFfV1IpOwogCWN4MThfc2V0c2NsKCZjeC0+aTJjX2FsZ29fY2JfZGF0YVswXSwgMSk7CiAJY3gxOF9zZXRzZGEoJmN4LT5pMmNfYWxnb19jYl9kYXRhWzBdLCAxKTsKIAogCS8qIEh3IEkyQzIgQ2xvY2sgRnJlcSB+MTAwa0h6ICovCi0Jd3JpdGVfcmVnX3N5bmMoMHgwMDAyMWMwZiAmIH40LCBDWDE4X1JFR19JMkNfMl9XUik7CisJY3gxOF93cml0ZV9yZWdfc3luYyhjeCwgMHgwMDAyMWMwZiAmIH40LCBDWDE4X1JFR19JMkNfMl9XUik7CiAJY3gxOF9zZXRzY2woJmN4LT5pMmNfYWxnb19jYl9kYXRhWzFdLCAxKTsKIAljeDE4X3NldHNkYSgmY3gtPmkyY19hbGdvX2NiX2RhdGFbMV0sIDEpOwogCkBAIC00MzAsOCArNDMzLDEwIEBACiB7CiAJaW50IGk7CiAJQ1gxOF9ERUJVR19JMkMoImkyYyBleGl0XG4iKTsKLQl3cml0ZV9yZWcocmVhZF9yZWcoQ1gxOF9SRUdfSTJDXzFfV1IpIHwgNCwgQ1gxOF9SRUdfSTJDXzFfV1IpOwotCXdyaXRlX3JlZyhyZWFkX3JlZyhDWDE4X1JFR19JMkNfMl9XUikgfCA0LCBDWDE4X1JFR19JMkNfMl9XUik7CisJY3gxOF93cml0ZV9yZWcoY3gsIGN4MThfcmVhZF9yZWcoY3gsIENYMThfUkVHX0kyQ18xX1dSKSB8IDQsCisJCQkJCQkJQ1gxOF9SRUdfSTJDXzFfV1IpOworCWN4MThfd3JpdGVfcmVnKGN4LCBjeDE4X3JlYWRfcmVnKGN4LCBDWDE4X1JFR19JMkNfMl9XUikgfCA0LAorCQkJCQkJCUNYMThfUkVHX0kyQ18yX1dSKTsKIAogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJaTJjX2RlbF9hZGFwdGVyKCZjeC0+aTJjX2FkYXBbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwYWI5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvLmMKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiAgY3gxOCBkcml2ZXIgUENJIG1lbW9yeSBtYXBwZWQgSU8gYWNjZXNzIHJvdXRpbmVzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNyAgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKyNpbmNsdWRlICJjeDE4LWlvLmgiCisjaW5jbHVkZSAiY3gxOC1pcnEuaCIKKwordm9pZCBjeDE4X2xvZ19zdGF0aXN0aWNzKHN0cnVjdCBjeDE4ICpjeCkKK3sKKwlpbnQgaTsKKworCWlmICghKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19JTkZPKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8PSBDWDE4X01BWF9NTUlPX1JFVFJJRVM7IGkrKykKKwkJQ1gxOF9ERUJVR19JTkZPKCJyZXRyaWVkX3dyaXRlWyVkXSA9ICVkXG4iLCBpLAorCQkJCWF0b21pY19yZWFkKCZjeC0+bW1pb19zdGF0cy5yZXRyaWVkX3dyaXRlW2ldKSk7CisJZm9yIChpID0gMDsgaSA8PSBDWDE4X01BWF9NTUlPX1JFVFJJRVM7IGkrKykKKwkJQ1gxOF9ERUJVR19JTkZPKCJyZXRyaWVkX3JlYWRbJWRdID0gJWRcbiIsIGksCisJCQkJYXRvbWljX3JlYWQoJmN4LT5tbWlvX3N0YXRzLnJldHJpZWRfcmVhZFtpXSkpOworCXJldHVybjsKK30KKwordm9pZCBjeDE4X3Jhd193cml0ZWxfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX01NSU9fUkVUUklFUzsgaSsrKSB7CisJCWN4MThfcmF3X3dyaXRlbF9ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOworCQlpZiAodmFsID09IGN4MThfcmF3X3JlYWRsX25vcmV0cnkoY3gsIGFkZHIpKQorCQkJYnJlYWs7CisJfQorCWN4MThfbG9nX3dyaXRlX3JldHJpZXMoY3gsIGksIGFkZHIpOworfQorCit1MzIgY3gxOF9yYXdfcmVhZGxfcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaW50IGk7CisJdTMyIHZhbDsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19SRVRSSUVTOyBpKyspIHsKKwkJdmFsID0gY3gxOF9yYXdfcmVhZGxfbm9yZXRyeShjeCwgYWRkcik7CisJCWlmICh2YWwgIT0gMHhmZmZmZmZmZikgLyogUENJIGJ1cyByZWFkIGVycm9yICovCisJCQlicmVhazsKKwl9CisJY3gxOF9sb2dfcmVhZF9yZXRyaWVzKGN4LCBpLCBhZGRyKTsKKwlyZXR1cm4gdmFsOworfQorCit1MTYgY3gxOF9yYXdfcmVhZHdfcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaW50IGk7CisJdTE2IHZhbDsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19SRVRSSUVTOyBpKyspIHsKKwkJdmFsID0gY3gxOF9yYXdfcmVhZHdfbm9yZXRyeShjeCwgYWRkcik7CisJCWlmICh2YWwgIT0gMHhmZmZmKSAvKiBQQ0kgYnVzIHJlYWQgZXJyb3IgKi8KKwkJCWJyZWFrOworCX0KKwljeDE4X2xvZ19yZWFkX3JldHJpZXMoY3gsIGksIGFkZHIpOworCXJldHVybiB2YWw7Cit9CisKK3ZvaWQgY3gxOF93cml0ZWxfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX01NSU9fUkVUUklFUzsgaSsrKSB7CisJCWN4MThfd3JpdGVsX25vcmV0cnkoY3gsIHZhbCwgYWRkcik7CisJCWlmICh2YWwgPT0gY3gxOF9yZWFkbF9ub3JldHJ5KGN4LCBhZGRyKSkKKwkJCWJyZWFrOworCX0KKwljeDE4X2xvZ193cml0ZV9yZXRyaWVzKGN4LCBpLCBhZGRyKTsKK30KKwordm9pZCBjeDE4X3dyaXRld19yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUxNiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19SRVRSSUVTOyBpKyspIHsKKwkJY3gxOF93cml0ZXdfbm9yZXRyeShjeCwgdmFsLCBhZGRyKTsKKwkJaWYgKHZhbCA9PSBjeDE4X3JlYWR3X25vcmV0cnkoY3gsIGFkZHIpKQorCQkJYnJlYWs7CisJfQorCWN4MThfbG9nX3dyaXRlX3JldHJpZXMoY3gsIGksIGFkZHIpOworfQorCit2b2lkIGN4MThfd3JpdGViX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTggdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX01NSU9fUkVUUklFUzsgaSsrKSB7CisJCWN4MThfd3JpdGViX25vcmV0cnkoY3gsIHZhbCwgYWRkcik7CisJCWlmICh2YWwgPT0gY3gxOF9yZWFkYl9ub3JldHJ5KGN4LCBhZGRyKSkKKwkJCWJyZWFrOworCX0KKwljeDE4X2xvZ193cml0ZV9yZXRyaWVzKGN4LCBpLCBhZGRyKTsKK30KKwordTMyIGN4MThfcmVhZGxfcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaW50IGk7CisJdTMyIHZhbDsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19SRVRSSUVTOyBpKyspIHsKKwkJdmFsID0gY3gxOF9yZWFkbF9ub3JldHJ5KGN4LCBhZGRyKTsKKwkJaWYgKHZhbCAhPSAweGZmZmZmZmZmKSAvKiBQQ0kgYnVzIHJlYWQgZXJyb3IgKi8KKwkJCWJyZWFrOworCX0KKwljeDE4X2xvZ19yZWFkX3JldHJpZXMoY3gsIGksIGFkZHIpOworCXJldHVybiB2YWw7Cit9CisKK3UxNiBjeDE4X3JlYWR3X3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWludCBpOworCXUxNiB2YWw7CisJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX01NSU9fUkVUUklFUzsgaSsrKSB7CisJCXZhbCA9IGN4MThfcmVhZHdfbm9yZXRyeShjeCwgYWRkcik7CisJCWlmICh2YWwgIT0gMHhmZmZmKSAvKiBQQ0kgYnVzIHJlYWQgZXJyb3IgKi8KKwkJCWJyZWFrOworCX0KKwljeDE4X2xvZ19yZWFkX3JldHJpZXMoY3gsIGksIGFkZHIpOworCXJldHVybiB2YWw7Cit9CisKK3U4IGN4MThfcmVhZGJfcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaW50IGk7CisJdTggdmFsOworCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9NTUlPX1JFVFJJRVM7IGkrKykgeworCQl2YWwgPSBjeDE4X3JlYWRiX25vcmV0cnkoY3gsIGFkZHIpOworCQlpZiAodmFsICE9IDB4ZmYpIC8qIFBDSSBidXMgcmVhZCBlcnJvciAqLworCQkJYnJlYWs7CisJfQorCWN4MThfbG9nX3JlYWRfcmV0cmllcyhjeCwgaSwgYWRkcik7CisJcmV0dXJuIHZhbDsKK30KKwordm9pZCBjeDE4X21lbWNweV9mcm9taW8oc3RydWN0IGN4MTggKmN4LCB2b2lkICp0bywKKwkJCWNvbnN0IHZvaWQgX19pb21lbSAqZnJvbSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwljb25zdCB1OCBfX2lvbWVtICpzcmMgPSBmcm9tOworCXU4ICpkc3QgPSB0bzsKKworCS8qIEFsaWduIHJlYWRzIG9uIHRoZSBDWDIzNDE4J3MgYWRkcmVzc2VzICovCisJaWYgKChsZW4gPiAwKSAmJiAoKHVuc2lnbmVkIGxvbmcpIHNyYyAmIDEpKSB7CisJCSpkc3QgPSBjeDE4X3JlYWRiKGN4LCBzcmMpOworCQlsZW4tLTsKKwkJZHN0Kys7CisJCXNyYysrOworCX0KKwlpZiAoKGxlbiA+IDEpICYmICgodW5zaWduZWQgbG9uZykgc3JjICYgMikpIHsKKwkJKigodTE2ICopZHN0KSA9IGN4MThfcmF3X3JlYWR3KGN4LCBzcmMpOworCQlsZW4gLT0gMjsKKwkJZHN0ICs9IDI7CisJCXNyYyArPSAyOworCX0KKwl3aGlsZSAobGVuID4gMykgeworCQkqKCh1MzIgKilkc3QpID0gY3gxOF9yYXdfcmVhZGwoY3gsIHNyYyk7CisJCWxlbiAtPSA0OworCQlkc3QgKz0gNDsKKwkJc3JjICs9IDQ7CisJfQorCWlmIChsZW4gPiAxKSB7CisJCSooKHUxNiAqKWRzdCkgPSBjeDE4X3Jhd19yZWFkdyhjeCwgc3JjKTsKKwkJbGVuIC09IDI7CisJCWRzdCArPSAyOworCQlzcmMgKz0gMjsKKwl9CisJaWYgKGxlbiA+IDApCisJCSpkc3QgPSBjeDE4X3JlYWRiKGN4LCBzcmMpOworfQorCit2b2lkIGN4MThfbWVtc2V0X2lvKHN0cnVjdCBjeDE4ICpjeCwgdm9pZCBfX2lvbWVtICphZGRyLCBpbnQgdmFsLCBzaXplX3QgY291bnQpCit7CisJdTggX19pb21lbSAqZHN0ID0gYWRkcjsKKwl1MTYgdmFsMiA9IHZhbCB8ICh2YWwgPDwgOCk7CisJdTMyIHZhbDQgPSB2YWwyIHwgKHZhbDIgPDwgMTYpOworCisJLyogQWxpZ24gd3JpdGVzIG9uIHRoZSBDWDIzNDE4J3MgYWRkcmVzc2VzICovCisJaWYgKChjb3VudCA+IDApICYmICgodW5zaWduZWQgbG9uZylkc3QgJiAxKSkgeworCQljeDE4X3dyaXRlYihjeCwgKHU4KSB2YWwsIGRzdCk7CisJCWNvdW50LS07CisJCWRzdCsrOworCX0KKwlpZiAoKGNvdW50ID4gMSkgJiYgKCh1bnNpZ25lZCBsb25nKWRzdCAmIDIpKSB7CisJCWN4MThfd3JpdGV3KGN4LCB2YWwyLCBkc3QpOworCQljb3VudCAtPSAyOworCQlkc3QgKz0gMjsKKwl9CisJd2hpbGUgKGNvdW50ID4gMykgeworCQljeDE4X3dyaXRlbChjeCwgdmFsNCwgZHN0KTsKKwkJY291bnQgLT0gNDsKKwkJZHN0ICs9IDQ7CisJfQorCWlmIChjb3VudCA+IDEpIHsKKwkJY3gxOF93cml0ZXcoY3gsIHZhbDIsIGRzdCk7CisJCWNvdW50IC09IDI7CisJCWRzdCArPSAyOworCX0KKwlpZiAoY291bnQgPiAwKQorCQljeDE4X3dyaXRlYihjeCwgKHU4KSB2YWwsIGRzdCk7Cit9CisKK3ZvaWQgY3gxOF9zdzFfaXJxX2VuYWJsZShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwpCit7CisJdTMyIHI7CisJY3gxOF93cml0ZV9yZWcoY3gsIHZhbCwgU1cxX0lOVF9TVEFUVVMpOworCXIgPSBjeDE4X3JlYWRfcmVnKGN4LCBTVzFfSU5UX0VOQUJMRV9QQ0kpOworCWN4MThfd3JpdGVfcmVnKGN4LCByIHwgdmFsLCBTVzFfSU5UX0VOQUJMRV9QQ0kpOworfQorCit2b2lkIGN4MThfc3cxX2lycV9kaXNhYmxlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCkKK3sKKwl1MzIgcjsKKwlyID0gY3gxOF9yZWFkX3JlZyhjeCwgU1cxX0lOVF9FTkFCTEVfUENJKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgciAmIH52YWwsIFNXMV9JTlRfRU5BQkxFX1BDSSk7Cit9CisKK3ZvaWQgY3gxOF9zdzJfaXJxX2VuYWJsZShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwpCit7CisJdTMyIHI7CisJY3gxOF93cml0ZV9yZWcoY3gsIHZhbCwgU1cyX0lOVF9TVEFUVVMpOworCXIgPSBjeDE4X3JlYWRfcmVnKGN4LCBTVzJfSU5UX0VOQUJMRV9QQ0kpOworCWN4MThfd3JpdGVfcmVnKGN4LCByIHwgdmFsLCBTVzJfSU5UX0VOQUJMRV9QQ0kpOworfQorCit2b2lkIGN4MThfc3cyX2lycV9kaXNhYmxlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCkKK3sKKwl1MzIgcjsKKwlyID0gY3gxOF9yZWFkX3JlZyhjeCwgU1cyX0lOVF9FTkFCTEVfUENJKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgciAmIH52YWwsIFNXMl9JTlRfRU5BQkxFX1BDSSk7Cit9CisKK3ZvaWQgY3gxOF9zZXR1cF9wYWdlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIGFkZHIpCit7CisJdTMyIHZhbDsKKwl2YWwgPSBjeDE4X3JlYWRfcmVnKGN4LCAweEQwMDBGOCk7CisJdmFsID0gKHZhbCAmIH4weDFmMDApIHwgKChhZGRyID4+IDE3KSAmIDB4MWYwMCk7CisJY3gxOF93cml0ZV9yZWcoY3gsIHZhbCwgMHhEMDAwRjgpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk3ZDRmYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvLmgKQEAgLTAsMCArMSwzNzggQEAKKy8qCisgKiAgY3gxOCBkcml2ZXIgUENJIG1lbW9yeSBtYXBwZWQgSU8gYWNjZXNzIHJvdXRpbmVzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNyAgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIENYMThfSU9fSAorI2RlZmluZSBDWDE4X0lPX0gKKworI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X2lvX2RlbGF5KHN0cnVjdCBjeDE4ICpjeCkKK3sKKwlpZiAoY3gtPm9wdGlvbnMubW1pb19uZGVsYXkpCisJCW5kZWxheShjeC0+b3B0aW9ucy5tbWlvX25kZWxheSk7Cit9CisKKy8qCisgKiBSZWFkYmFjayBhbmQgcmV0cnkgb2YgTU1JTyBhY2Nlc3MgZm9yIHJlbGlhYmlsaXR5OgorICogVGhlIGNvbmNlcHQgd2FzIHN1Z2dlc3RlZCBieSBTdGV2ZSBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4uCisgKiBUaGUgaW1wbG1lbnRhdGlvbiBpcyB0aGUgZmF1bHQgb2YgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4uCisgKi8KKworLyogU3RhdGlzdGljcyBnYXRoZXJpbmcgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgY3gxOF9sb2dfd3JpdGVfcmV0cmllcyhzdHJ1Y3QgY3gxOCAqY3gsIGludCBpLCBjb25zdCB2b2lkICphZGRyKQoreworCWlmIChpID4gQ1gxOF9NQVhfTU1JT19SRVRSSUVTKQorCQlpID0gQ1gxOF9NQVhfTU1JT19SRVRSSUVTOworCWF0b21pY19pbmMoJmN4LT5tbWlvX3N0YXRzLnJldHJpZWRfd3JpdGVbaV0pOworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZQordm9pZCBjeDE4X2xvZ19yZWFkX3JldHJpZXMoc3RydWN0IGN4MTggKmN4LCBpbnQgaSwgY29uc3Qgdm9pZCAqYWRkcikKK3sKKwlpZiAoaSA+IENYMThfTUFYX01NSU9fUkVUUklFUykKKwkJaSA9IENYMThfTUFYX01NSU9fUkVUUklFUzsKKwlhdG9taWNfaW5jKCZjeC0+bW1pb19zdGF0cy5yZXRyaWVkX3JlYWRbaV0pOworCXJldHVybjsKK30KKwordm9pZCBjeDE4X2xvZ19zdGF0aXN0aWNzKHN0cnVjdCBjeDE4ICpjeCk7CisKKy8qIE5vbiBieXRlc3dhcHBpbmcgbWVtb3J5IG1hcHBlZCBJTyAqLworc3RhdGljIGlubGluZQordm9pZCBjeDE4X3Jhd193cml0ZWxfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBhZGRyKTsKKwljeDE4X2lvX2RlbGF5KGN4KTsKK30KKwordm9pZCBjeDE4X3Jhd193cml0ZWxfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY3gxOF9yYXdfd3JpdGVsKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCWN4MThfcmF3X3dyaXRlbF9yZXRyeShjeCwgdmFsLCBhZGRyKTsKKwllbHNlCisJCWN4MThfcmF3X3dyaXRlbF9ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOworfQorCisKK3N0YXRpYyBpbmxpbmUKK3UzMiBjeDE4X3Jhd19yZWFkbF9ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXUzMiByZXQgPSBfX3Jhd19yZWFkbChhZGRyKTsKKwljeDE4X2lvX2RlbGF5KGN4KTsKKwlyZXR1cm4gcmV0OworfQorCit1MzIgY3gxOF9yYXdfcmVhZGxfcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpOworCitzdGF0aWMgaW5saW5lIHUzMiBjeDE4X3Jhd19yZWFkbChzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpZiAoY3gxOF9yZXRyeV9tbWlvKQorCQlyZXR1cm4gY3gxOF9yYXdfcmVhZGxfcmV0cnkoY3gsIGFkZHIpOworCisJcmV0dXJuIGN4MThfcmF3X3JlYWRsX25vcmV0cnkoY3gsIGFkZHIpOworfQorCisKK3N0YXRpYyBpbmxpbmUKK3UxNiBjeDE4X3Jhd19yZWFkd19ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXUxNiByZXQgPSBfX3Jhd19yZWFkdyhhZGRyKTsKKwljeDE4X2lvX2RlbGF5KGN4KTsKKwlyZXR1cm4gcmV0OworfQorCit1MTYgY3gxOF9yYXdfcmVhZHdfcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpOworCitzdGF0aWMgaW5saW5lIHUxNiBjeDE4X3Jhd19yZWFkdyhzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpZiAoY3gxOF9yZXRyeV9tbWlvKQorCQlyZXR1cm4gY3gxOF9yYXdfcmVhZHdfcmV0cnkoY3gsIGFkZHIpOworCisJcmV0dXJuIGN4MThfcmF3X3JlYWR3X25vcmV0cnkoY3gsIGFkZHIpOworfQorCisKKy8qIE5vcm1hbCBtZW1vcnkgbWFwcGVkIElPICovCitzdGF0aWMgaW5saW5lCit2b2lkIGN4MThfd3JpdGVsX25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGVsKHZhbCwgYWRkcik7CisJY3gxOF9pb19kZWxheShjeCk7Cit9CisKK3ZvaWQgY3gxOF93cml0ZWxfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY3gxOF93cml0ZWwoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaWYgKGN4MThfcmV0cnlfbW1pbykKKwkJY3gxOF93cml0ZWxfcmV0cnkoY3gsIHZhbCwgYWRkcik7CisJZWxzZQorCQljeDE4X3dyaXRlbF9ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOworfQorCisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgY3gxOF93cml0ZXdfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUxNiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl3cml0ZXcodmFsLCBhZGRyKTsKKwljeDE4X2lvX2RlbGF5KGN4KTsKK30KKwordm9pZCBjeDE4X3dyaXRld19yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUxNiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X3dyaXRldyhzdHJ1Y3QgY3gxOCAqY3gsIHUxNiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpZiAoY3gxOF9yZXRyeV9tbWlvKQorCQljeDE4X3dyaXRld19yZXRyeShjeCwgdmFsLCBhZGRyKTsKKwllbHNlCisJCWN4MThfd3JpdGV3X25vcmV0cnkoY3gsIHZhbCwgYWRkcik7Cit9CisKKworc3RhdGljIGlubGluZQordm9pZCBjeDE4X3dyaXRlYl9ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTggdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGViKHZhbCwgYWRkcik7CisJY3gxOF9pb19kZWxheShjeCk7Cit9CisKK3ZvaWQgY3gxOF93cml0ZWJfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1OCB2YWwsIHZvaWQgX19pb21lbSAqYWRkcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X3dyaXRlYihzdHJ1Y3QgY3gxOCAqY3gsIHU4IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCWN4MThfd3JpdGViX3JldHJ5KGN4LCB2YWwsIGFkZHIpOworCWVsc2UKKwkJY3gxOF93cml0ZWJfbm9yZXRyeShjeCwgdmFsLCBhZGRyKTsKK30KKworCitzdGF0aWMgaW5saW5lIHUzMiBjeDE4X3JlYWRsX25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTMyIHJldCA9IHJlYWRsKGFkZHIpOworCWN4MThfaW9fZGVsYXkoY3gpOworCXJldHVybiByZXQ7Cit9CisKK3UzMiBjeDE4X3JlYWRsX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKTsKKworc3RhdGljIGlubGluZSB1MzIgY3gxOF9yZWFkbChzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpZiAoY3gxOF9yZXRyeV9tbWlvKQorCQlyZXR1cm4gY3gxOF9yZWFkbF9yZXRyeShjeCwgYWRkcik7CisKKwlyZXR1cm4gY3gxOF9yZWFkbF9ub3JldHJ5KGN4LCBhZGRyKTsKK30KKworCitzdGF0aWMgaW5saW5lIHUxNiBjeDE4X3JlYWR3X25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTE2IHJldCA9IHJlYWR3KGFkZHIpOworCWN4MThfaW9fZGVsYXkoY3gpOworCXJldHVybiByZXQ7Cit9CisKK3UxNiBjeDE4X3JlYWR3X3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKTsKKworc3RhdGljIGlubGluZSB1MTYgY3gxOF9yZWFkdyhzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpZiAoY3gxOF9yZXRyeV9tbWlvKQorCQlyZXR1cm4gY3gxOF9yZWFkd19yZXRyeShjeCwgYWRkcik7CisKKwlyZXR1cm4gY3gxOF9yZWFkd19ub3JldHJ5KGN4LCBhZGRyKTsKK30KKworCitzdGF0aWMgaW5saW5lIHU4IGN4MThfcmVhZGJfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1OCByZXQgPSByZWFkYihhZGRyKTsKKwljeDE4X2lvX2RlbGF5KGN4KTsKKwlyZXR1cm4gcmV0OworfQorCit1OCBjeDE4X3JlYWRiX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKTsKKworc3RhdGljIGlubGluZSB1OCBjeDE4X3JlYWRiKHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCXJldHVybiBjeDE4X3JlYWRiX3JldHJ5KGN4LCBhZGRyKTsKKworCXJldHVybiBjeDE4X3JlYWRiX25vcmV0cnkoY3gsIGFkZHIpOworfQorCisKK3N0YXRpYyBpbmxpbmUKK3UzMiBjeDE4X3dyaXRlX3N5bmNfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwljeDE4X3dyaXRlbF9ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOworCXJldHVybiBjeDE4X3JlYWRsX25vcmV0cnkoY3gsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lCit1MzIgY3gxOF93cml0ZV9zeW5jX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWN4MThfd3JpdGVsX3JldHJ5KGN4LCB2YWwsIGFkZHIpOworCXJldHVybiBjeDE4X3JlYWRsX3JldHJ5KGN4LCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgY3gxOF93cml0ZV9zeW5jKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCXJldHVybiBjeDE4X3dyaXRlX3N5bmNfcmV0cnkoY3gsIHZhbCwgYWRkcik7CisKKwlyZXR1cm4gY3gxOF93cml0ZV9zeW5jX25vcmV0cnkoY3gsIHZhbCwgYWRkcik7Cit9CisKKwordm9pZCBjeDE4X21lbWNweV9mcm9taW8oc3RydWN0IGN4MTggKmN4LCB2b2lkICp0bywKKwkJCWNvbnN0IHZvaWQgX19pb21lbSAqZnJvbSwgdW5zaWduZWQgaW50IGxlbik7Cit2b2lkIGN4MThfbWVtc2V0X2lvKHN0cnVjdCBjeDE4ICpjeCwgdm9pZCBfX2lvbWVtICphZGRyLCBpbnQgdmFsLCBzaXplX3QgY291bnQpOworCisKKy8qIEFjY2VzcyAicmVnaXN0ZXIiIHJlZ2lvbiBvZiBDWDIzNDE4IG1lbW9yeSBtYXBwZWQgSS9PICovCitzdGF0aWMgaW5saW5lIHZvaWQgY3gxOF93cml0ZV9yZWdfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHUzMiByZWcpCit7CisJY3gxOF93cml0ZWxfbm9yZXRyeShjeCwgdmFsLCBjeC0+cmVnX21lbSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X3dyaXRlX3JlZ19yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHUzMiByZWcpCit7CisJY3gxOF93cml0ZWxfcmV0cnkoY3gsIHZhbCwgY3gtPnJlZ19tZW0gKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3gxOF93cml0ZV9yZWcoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB1MzIgcmVnKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCWN4MThfd3JpdGVfcmVnX3JldHJ5KGN4LCB2YWwsIHJlZyk7CisJZWxzZQorCQljeDE4X3dyaXRlX3JlZ19ub3JldHJ5KGN4LCB2YWwsIHJlZyk7Cit9CisKKworc3RhdGljIGlubGluZSB1MzIgY3gxOF9yZWFkX3JlZ19ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHJlZykKK3sKKwlyZXR1cm4gY3gxOF9yZWFkbF9ub3JldHJ5KGN4LCBjeC0+cmVnX21lbSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGN4MThfcmVhZF9yZWdfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgcmVnKQoreworCXJldHVybiBjeDE4X3JlYWRsX3JldHJ5KGN4LCBjeC0+cmVnX21lbSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGN4MThfcmVhZF9yZWcoc3RydWN0IGN4MTggKmN4LCB1MzIgcmVnKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCXJldHVybiBjeDE4X3JlYWRfcmVnX3JldHJ5KGN4LCByZWcpOworCisJcmV0dXJuIGN4MThfcmVhZF9yZWdfbm9yZXRyeShjeCwgcmVnKTsKK30KKworCitzdGF0aWMgaW5saW5lIHUzMiBjeDE4X3dyaXRlX3JlZ19zeW5jX25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB1MzIgcmVnKQoreworCXJldHVybiBjeDE4X3dyaXRlX3N5bmNfbm9yZXRyeShjeCwgdmFsLCBjeC0+cmVnX21lbSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGN4MThfd3JpdGVfcmVnX3N5bmNfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB1MzIgcmVnKQoreworCXJldHVybiBjeDE4X3dyaXRlX3N5bmNfcmV0cnkoY3gsIHZhbCwgY3gtPnJlZ19tZW0gKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBjeDE4X3dyaXRlX3JlZ19zeW5jKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIHJlZykKK3sKKwlpZiAoY3gxOF9yZXRyeV9tbWlvKQorCQlyZXR1cm4gY3gxOF93cml0ZV9yZWdfc3luY19yZXRyeShjeCwgdmFsLCByZWcpOworCisJcmV0dXJuIGN4MThfd3JpdGVfcmVnX3N5bmNfbm9yZXRyeShjeCwgdmFsLCByZWcpOworfQorCisKKy8qIEFjY2VzcyAiZW5jb2RlciBtZW1vcnkiIHJlZ2lvbiBvZiBDWDIzNDE4IG1lbW9yeSBtYXBwZWQgSS9PICovCitzdGF0aWMgaW5saW5lIHZvaWQgY3gxOF93cml0ZV9lbmNfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHUzMiBhZGRyKQoreworCWN4MThfd3JpdGVsX25vcmV0cnkoY3gsIHZhbCwgY3gtPmVuY19tZW0gKyBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGN4MThfd3JpdGVfZW5jX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIGFkZHIpCit7CisJY3gxOF93cml0ZWxfcmV0cnkoY3gsIHZhbCwgY3gtPmVuY19tZW0gKyBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGN4MThfd3JpdGVfZW5jKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIGFkZHIpCit7CisJaWYgKGN4MThfcmV0cnlfbW1pbykKKwkJY3gxOF93cml0ZV9lbmNfcmV0cnkoY3gsIHZhbCwgYWRkcik7CisJZWxzZQorCQljeDE4X3dyaXRlX2VuY19ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdTMyIGN4MThfcmVhZF9lbmNfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBhZGRyKQoreworCXJldHVybiBjeDE4X3JlYWRsX25vcmV0cnkoY3gsIGN4LT5lbmNfbWVtICsgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGN4MThfcmVhZF9lbmNfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgYWRkcikKK3sKKwlyZXR1cm4gY3gxOF9yZWFkbF9yZXRyeShjeCwgY3gtPmVuY19tZW0gKyBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgY3gxOF9yZWFkX2VuYyhzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBhZGRyKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCXJldHVybiBjeDE4X3JlYWRfZW5jX3JldHJ5KGN4LCBhZGRyKTsKKworCXJldHVybiBjeDE4X3JlYWRfZW5jX25vcmV0cnkoY3gsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lCit1MzIgY3gxOF93cml0ZV9lbmNfc3luY19ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIGFkZHIpCit7CisJcmV0dXJuIGN4MThfd3JpdGVfc3luY19ub3JldHJ5KGN4LCB2YWwsIGN4LT5lbmNfbWVtICsgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3UzMiBjeDE4X3dyaXRlX2VuY19zeW5jX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIGFkZHIpCit7CisJcmV0dXJuIGN4MThfd3JpdGVfc3luY19yZXRyeShjeCwgdmFsLCBjeC0+ZW5jX21lbSArIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lCit1MzIgY3gxOF93cml0ZV9lbmNfc3luYyhzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHUzMiBhZGRyKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCXJldHVybiBjeDE4X3dyaXRlX2VuY19zeW5jX3JldHJ5KGN4LCB2YWwsIGFkZHIpOworCisJcmV0dXJuIGN4MThfd3JpdGVfZW5jX3N5bmNfbm9yZXRyeShjeCwgdmFsLCBhZGRyKTsKK30KKwordm9pZCBjeDE4X3N3MV9pcnFfZW5hYmxlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCk7Cit2b2lkIGN4MThfc3cxX2lycV9kaXNhYmxlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCk7Cit2b2lkIGN4MThfc3cyX2lycV9lbmFibGUoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsKTsKK3ZvaWQgY3gxOF9zdzJfaXJxX2Rpc2FibGUoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsKTsKK3ZvaWQgY3gxOF9zZXR1cF9wYWdlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIGFkZHIpOworCisjZW5kaWYgLyogQ1gxOF9JT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYwppbmRleCBhN2Y4Mzk2Li5mMGNhNTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKyNpbmNsdWRlICJjeDE4LWlvLmgiCiAjaW5jbHVkZSAiY3gxOC12ZXJzaW9uLmgiCiAjaW5jbHVkZSAiY3gxOC1tYWlsYm94LmgiCiAjaW5jbHVkZSAiY3gxOC1pMmMuaCIKQEAgLTE3MCw3ICsxNzEsNiBAQAogewogCXN0cnVjdCBjeDE4X29wZW5faWQgKmlkID0gZmg7CiAJc3RydWN0IGN4MTggKmN4ID0gaWQtPmN4OwotCiAJaW50IHcgPSBmbXQtPmZtdC5waXgud2lkdGg7CiAJaW50IGggPSBmbXQtPmZtdC5waXguaGVpZ2h0OwogCkBAIC0yMDIsOCArMjAyLDcgQEAKIAlzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCA9IGZoOwogCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKIAlpbnQgcmV0OwotCWludCB3ID0gZm10LT5mbXQucGl4LndpZHRoOwotCWludCBoID0gZm10LT5mbXQucGl4LmhlaWdodDsKKwlpbnQgdywgaDsKIAogCXJldCA9IHY0bDJfcHJpb19jaGVjaygmY3gtPnByaW8sICZpZC0+cHJpbyk7CiAJaWYgKHJldCkKQEAgLTIxMiw2ICsyMTEsOCBAQAogCXJldCA9IGN4MThfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmbXQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CisJdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKKwloID0gZm10LT5mbXQucGl4LmhlaWdodDsKIAogCWlmIChjeC0+cGFyYW1zLndpZHRoID09IHcgJiYgY3gtPnBhcmFtcy5oZWlnaHQgPT0gaCkKIAkJcmV0dXJuIDA7CkBAIC0yODYsOSArMjg3LDkgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjeDE4X2NhcmRzX2xvY2ssIGZsYWdzKTsKIAlpZiAoY21kID09IFZJRElPQ19EQkdfR19SRUdJU1RFUikKLQkJcmVncy0+dmFsID0gcmVhZF9lbmMocmVncy0+cmVnKTsKKwkJcmVncy0+dmFsID0gY3gxOF9yZWFkX2VuYyhjeCwgcmVncy0+cmVnKTsKIAllbHNlCi0JCXdyaXRlX2VuYyhyZWdzLT52YWwsIHJlZ3MtPnJlZyk7CisJCWN4MThfd3JpdGVfZW5jKGN4LCByZWdzLT52YWwsIHJlZ3MtPnJlZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3gxOF9jYXJkc19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNDUsNyArMzQ2LDcgQEAKIAogCXN0cmxjcHkodmNhcC0+ZHJpdmVyLCBDWDE4X0RSSVZFUl9OQU1FLCBzaXplb2YodmNhcC0+ZHJpdmVyKSk7CiAJc3RybGNweSh2Y2FwLT5jYXJkLCBjeC0+Y2FyZF9uYW1lLCBzaXplb2YodmNhcC0+Y2FyZCkpOwotCXN0cmxjcHkodmNhcC0+YnVzX2luZm8sIHBjaV9uYW1lKGN4LT5kZXYpLCBzaXplb2YodmNhcC0+YnVzX2luZm8pKTsKKwlzbnByaW50Zih2Y2FwLT5idXNfaW5mbywgc2l6ZW9mKHZjYXAtPmJ1c19pbmZvKSwgIlBDSTolcyIsIHBjaV9uYW1lKGN4LT5kZXYpKTsKIAl2Y2FwLT52ZXJzaW9uID0gQ1gxOF9EUklWRVJfVkVSU0lPTjsgCSAgICAvKiB2ZXJzaW9uICovCiAJdmNhcC0+Y2FwYWJpbGl0aWVzID0gY3gtPnY0bDJfY2FwOyAJICAgIC8qIGNhcGFiaWxpdGllcyAqLwogCXJldHVybiAwOwpAQCAtNjIyLDYgKzYyMyw3IEBACiB7CiAJc3RydWN0IGN4MThfb3Blbl9pZCAqaWQgPSBmaDsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CisJdTMyIGg7CiAKIAlzd2l0Y2ggKGVuYy0+Y21kKSB7CiAJY2FzZSBWNEwyX0VOQ19DTURfU1RBUlQ6CkBAIC02NDMsOCArNjQ1LDE0IEBACiAJCQlyZXR1cm4gLUVQRVJNOwogCQlpZiAodGVzdF9hbmRfc2V0X2JpdChDWDE4X0ZfSV9FTkNfUEFVU0VELCAmY3gtPmlfZmxhZ3MpKQogCQkJcmV0dXJuIDA7CisJCWggPSBjeDE4X2ZpbmRfaGFuZGxlKGN4KTsKKwkJaWYgKGggPT0gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFKSB7CisJCQlDWDE4X0VSUigiQ2FuJ3QgZmluZCB2YWxpZCB0YXNrIGhhbmRsZSBmb3IgIgorCQkJCSAiVjRMMl9FTkNfQ01EX1BBVVNFXG4iKTsKKwkJCXJldHVybiAtRUJBREZEOworCQl9CiAJCWN4MThfbXV0ZShjeCk7Ci0JCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfQ0FQVFVSRV9QQVVTRSwgMSwgY3gxOF9maW5kX2hhbmRsZShjeCkpOworCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX0NBUFRVUkVfUEFVU0UsIDEsIGgpOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9FTkNfQ01EX1JFU1VNRToKQEAgLTY1NCw3ICs2NjIsMTMgQEAKIAkJCXJldHVybiAtRVBFUk07CiAJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KENYMThfRl9JX0VOQ19QQVVTRUQsICZjeC0+aV9mbGFncykpCiAJCQlyZXR1cm4gMDsKLQkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9DQVBUVVJFX1JFU1VNRSwgMSwgY3gxOF9maW5kX2hhbmRsZShjeCkpOworCQloID0gY3gxOF9maW5kX2hhbmRsZShjeCk7CisJCWlmIChoID09IENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRSkgeworCQkJQ1gxOF9FUlIoIkNhbid0IGZpbmQgdmFsaWQgdGFzayBoYW5kbGUgZm9yICIKKwkJCQkgIlY0TDJfRU5DX0NNRF9SRVNVTUVcbiIpOworCQkJcmV0dXJuIC1FQkFERkQ7CisJCX0KKwkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9DQVBUVVJFX1JFU1VNRSwgMSwgaCk7CiAJCWN4MThfdW5tdXRlKGN4KTsKIAkJYnJlYWs7CiAKQEAgLTczMSwxMiArNzQ1LDE0IEBACiAJCQljb250aW51ZTsKIAkJQ1gxOF9JTkZPKCJTdHJlYW0gJXM6IHN0YXR1cyAweCUwNGx4LCAlZCUlIG9mICVkIEtpQiAoJWQgYnVmZmVycykgaW4gdXNlXG4iLAogCQkJICBzLT5uYW1lLCBzLT5zX2ZsYWdzLAotCQkJICAocy0+YnVmZmVycyAtIHMtPnFfZnJlZS5idWZmZXJzKSAqIDEwMCAvIHMtPmJ1ZmZlcnMsCisJCQkgIChzLT5idWZmZXJzIC0gYXRvbWljX3JlYWQoJnMtPnFfZnJlZS5idWZmZXJzKSkKKwkJCQkqIDEwMCAvIHMtPmJ1ZmZlcnMsCiAJCQkgIChzLT5idWZmZXJzICogcy0+YnVmX3NpemUpIC8gMTAyNCwgcy0+YnVmZmVycyk7CiAJfQogCUNYMThfSU5GTygiUmVhZCBNUEVHL1ZCSTogJWxsZC8lbGxkIGJ5dGVzXG4iLAogCQkJKGxvbmcgbG9uZyljeC0+bXBnX2RhdGFfcmVjZWl2ZWQsCiAJCQkobG9uZyBsb25nKWN4LT52YmlfZGF0YV9pbnNlcnRlZCk7CisJY3gxOF9sb2dfc3RhdGlzdGljcyhjeCk7CiAJQ1gxOF9JTkZPKCI9PT09PT09PT09PT09PT09PT0gIEVORCBTVEFUVVMgQ0FSRCAjJWQgID09PT09PT09PT09PT09PT09PVxuIiwgY3gtPm51bSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pcnEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlycS5jCmluZGV4IGFiMjE4MzEuLjM2MDMzMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlycS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlycS5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCisjaW5jbHVkZSAiY3gxOC1pby5oIgogI2luY2x1ZGUgImN4MTgtZmlybXdhcmUuaCIKICNpbmNsdWRlICJjeDE4LWZpbGVvcHMuaCIKICNpbmNsdWRlICJjeDE4LXF1ZXVlLmgiCkBAIC00OCw4ICs0OSw4IEBACiAJCQlicmVhazsKIAl9CiAJaWYgKGkgPT0gQ1gxOF9NQVhfU1RSRUFNUykgewotCQlDWDE4X1dBUk4oIkRNQSBkb25lIGZvciB1bmtub3duIGhhbmRsZSAlZCBmb3Igc3RyZWFtICVzXG4iLAotCQkJaGFuZGxlLCBzLT5uYW1lKTsKKwkJQ1gxOF9XQVJOKCJHb3QgRE1BIGRvbmUgbm90aWZpY2F0aW9uIGZvciB1bmtub3duL2luYWN0aXZlIgorCQkJICAiIGhhbmRsZSAlZFxuIiwgaGFuZGxlKTsKIAkJbWItPmVycm9yID0gQ1hFUlJfTk9UX09QRU47CiAJCW1iLT5jbWQgPSAwOwogCQljeDE4X21iX2FjayhjeCwgbWIpOwpAQCAtNjAsOCArNjEsOCBAQAogCWlmIChtYi0+YXJnc1syXSAhPSAxKQogCQlDWDE4X1dBUk4oIkFjayBzdHJ1Y3QgPSAlZCBmb3IgJXNcbiIsCiAJCQltYi0+YXJnc1syXSwgcy0+bmFtZSk7Ci0JaWQgPSByZWFkX2VuYyhvZmYpOwotCWJ1ZiA9IGN4MThfcXVldWVfZ2V0X2J1Zl9pcnEocywgaWQsIHJlYWRfZW5jKG9mZiArIDQpKTsKKwlpZCA9IGN4MThfcmVhZF9lbmMoY3gsIG9mZik7CisJYnVmID0gY3gxOF9xdWV1ZV9nZXRfYnVmX2lycShzLCBpZCwgY3gxOF9yZWFkX2VuYyhjeCwgb2ZmICsgNCkpOwogCUNYMThfREVCVUdfSElfRE1BKCJETUEgRE9ORSBmb3IgJXMgKGJ1ZmZlciAlZClcbiIsIHMtPm5hbWUsIGlkKTsKIAlpZiAoYnVmKSB7CiAJCWN4MThfYnVmX3N5bmNfZm9yX2NwdShzLCBidWYpOwpAQCAtODEsNyArODIsNyBAQAogCQkJc2V0X2JpdChDWDE4X0ZfQl9ORUVEX0JVRl9TV0FQLCAmYnVmLT5iX2ZsYWdzKTsKIAl9IGVsc2UgewogCQlDWDE4X1dBUk4oIkNvdWxkIG5vdCBmaW5kIGJ1ZiAlZCBmb3Igc3RyZWFtICVzXG4iLAotCQkJCXJlYWRfZW5jKG9mZiksIHMtPm5hbWUpOworCQkJCWN4MThfcmVhZF9lbmMoY3gsIG9mZiksIHMtPm5hbWUpOwogCX0KIAltYi0+ZXJyb3IgPSAwOwogCW1iLT5jbWQgPSAwOwpAQCAtOTcsOCArOTgsOCBAQAogCWNoYXIgKnA7CiAKIAlpZiAobWItPmFyZ3NbMV0pIHsKLQkJc2V0dXBfcGFnZShtYi0+YXJnc1sxXSk7Ci0JCW1lbWNweV9mcm9taW8oc3RyLCBjeC0+ZW5jX21lbSArIG1iLT5hcmdzWzFdLCAyNTIpOworCQljeDE4X3NldHVwX3BhZ2UoY3gsIG1iLT5hcmdzWzFdKTsKKwkJY3gxOF9tZW1jcHlfZnJvbWlvKGN4LCBzdHIsIGN4LT5lbmNfbWVtICsgbWItPmFyZ3NbMV0sIDI1Mik7CiAJCXN0clsyNTJdID0gMDsKIAl9CiAJY3gxOF9tYl9hY2soY3gsIG1iKTsKQEAgLTExMyw3ICsxMTQsNyBAQAogCXN0cnVjdCBjeDE4X21haWxib3ggbWI7CiAKIAlpZiAoc3cxICYgSVJRX0NQVV9UT19FUFUpIHsKLQkJbWVtY3B5X2Zyb21pbygmbWIsICZjeC0+c2NiLT5jcHUyZXB1X21iLCBzaXplb2YobWIpKTsKKwkJY3gxOF9tZW1jcHlfZnJvbWlvKGN4LCAmbWIsICZjeC0+c2NiLT5jcHUyZXB1X21iLCBzaXplb2YobWIpKTsKIAkJbWIuZXJyb3IgPSAwOwogCiAJCXN3aXRjaCAobWIuY21kKSB7CkBAIC0xNDEsMTYgKzE0MiwxNiBAQAogCiAJc3Bpbl9sb2NrKCZjeC0+ZG1hX3JlZ19sb2NrKTsKIAotCWh3Ml9tYXNrID0gcmVhZF9yZWcoSFcyX0lOVF9NQVNLNV9QQ0kpOwotCWh3MiA9IHJlYWRfcmVnKEhXMl9JTlRfQ0xSX1NUQVRVUykgJiBodzJfbWFzazsKLQlzdzJfbWFzayA9IHJlYWRfcmVnKFNXMl9JTlRfRU5BQkxFX1BDSSkgfCBJUlFfRVBVX1RPX0hQVV9BQ0s7Ci0Jc3cyID0gcmVhZF9yZWcoU1cyX0lOVF9TVEFUVVMpICYgc3cyX21hc2s7Ci0Jc3cxX21hc2sgPSByZWFkX3JlZyhTVzFfSU5UX0VOQUJMRV9QQ0kpIHwgSVJRX0VQVV9UT19IUFU7Ci0Jc3cxID0gcmVhZF9yZWcoU1cxX0lOVF9TVEFUVVMpICYgc3cxX21hc2s7CisJaHcyX21hc2sgPSBjeDE4X3JlYWRfcmVnKGN4LCBIVzJfSU5UX01BU0s1X1BDSSk7CisJaHcyID0gY3gxOF9yZWFkX3JlZyhjeCwgSFcyX0lOVF9DTFJfU1RBVFVTKSAmIGh3Ml9tYXNrOworCXN3Ml9tYXNrID0gY3gxOF9yZWFkX3JlZyhjeCwgU1cyX0lOVF9FTkFCTEVfUENJKSB8IElSUV9FUFVfVE9fSFBVX0FDSzsKKwlzdzIgPSBjeDE4X3JlYWRfcmVnKGN4LCBTVzJfSU5UX1NUQVRVUykgJiBzdzJfbWFzazsKKwlzdzFfbWFzayA9IGN4MThfcmVhZF9yZWcoY3gsIFNXMV9JTlRfRU5BQkxFX1BDSSkgfCBJUlFfRVBVX1RPX0hQVTsKKwlzdzEgPSBjeDE4X3JlYWRfcmVnKGN4LCBTVzFfSU5UX1NUQVRVUykgJiBzdzFfbWFzazsKIAotCXdyaXRlX3JlZyhzdzImc3cyX21hc2ssIFNXMl9JTlRfU1RBVFVTKTsKLQl3cml0ZV9yZWcoc3cxJnN3MV9tYXNrLCBTVzFfSU5UX1NUQVRVUyk7Ci0Jd3JpdGVfcmVnKGh3MiZodzJfbWFzaywgSFcyX0lOVF9DTFJfU1RBVFVTKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgc3cyJnN3Ml9tYXNrLCBTVzJfSU5UX1NUQVRVUyk7CisJY3gxOF93cml0ZV9yZWcoY3gsIHN3MSZzdzFfbWFzaywgU1cxX0lOVF9TVEFUVVMpOworCWN4MThfd3JpdGVfcmVnKGN4LCBodzImaHcyX21hc2ssIEhXMl9JTlRfQ0xSX1NUQVRVUyk7CiAKIAlpZiAoc3cxIHx8IHN3MiB8fCBodzIpCiAJCUNYMThfREVCVUdfSElfSVJRKCJTVzE6ICV4ICBTVzI6ICV4ICBIVzI6ICV4XG4iLCBzdzEsIHN3MiwgaHcyKTsKQEAgLTE2MSwxNSArMTYyLDE1IEBACiAJKi8KIAogCWlmIChzdzIpIHsKLQkJaWYgKHN3MiAmIChyZWFkbCgmY3gtPnNjYi0+Y3B1MmhwdV9pcnFfYWNrKSB8Ci0JCQkgICByZWFkbCgmY3gtPnNjYi0+Y3B1MmVwdV9pcnFfYWNrKSkpCisJCWlmIChzdzIgJiAoY3gxOF9yZWFkbChjeCwgJmN4LT5zY2ItPmNwdTJocHVfaXJxX2FjaykgfAorCQkJICAgY3gxOF9yZWFkbChjeCwgJmN4LT5zY2ItPmNwdTJlcHVfaXJxX2FjaykpKQogCQkJd2FrZV91cCgmY3gtPm1iX2NwdV93YWl0cSk7Ci0JCWlmIChzdzIgJiAocmVhZGwoJmN4LT5zY2ItPmFwdTJocHVfaXJxX2FjaykgfAotCQkJICAgcmVhZGwoJmN4LT5zY2ItPmFwdTJlcHVfaXJxX2FjaykpKQorCQlpZiAoc3cyICYgKGN4MThfcmVhZGwoY3gsICZjeC0+c2NiLT5hcHUyaHB1X2lycV9hY2spIHwKKwkJCSAgIGN4MThfcmVhZGwoY3gsICZjeC0+c2NiLT5hcHUyZXB1X2lycV9hY2spKSkKIAkJCXdha2VfdXAoJmN4LT5tYl9hcHVfd2FpdHEpOwotCQlpZiAoc3cyICYgcmVhZGwoJmN4LT5zY2ItPmVwdTJocHVfaXJxX2FjaykpCisJCWlmIChzdzIgJiBjeDE4X3JlYWRsKGN4LCAmY3gtPnNjYi0+ZXB1MmhwdV9pcnFfYWNrKSkKIAkJCXdha2VfdXAoJmN4LT5tYl9lcHVfd2FpdHEpOwotCQlpZiAoc3cyICYgcmVhZGwoJmN4LT5zY2ItPmhwdTJlcHVfaXJxX2FjaykpCisJCWlmIChzdzIgJiBjeDE4X3JlYWRsKGN4LCAmY3gtPnNjYi0+aHB1MmVwdV9pcnFfYWNrKSkKIAkJCXdha2VfdXAoJmN4LT5tYl9ocHVfd2FpdHEpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCmluZGV4IDkzMTc3NTEuLjlkMThkZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCisjaW5jbHVkZSAiY3gxOC1pby5oIgogI2luY2x1ZGUgImN4MTgtc2NiLmgiCiAjaW5jbHVkZSAiY3gxOC1pcnEuaCIKICNpbmNsdWRlICJjeDE4LW1haWxib3guaCIKQEAgLTgyLDYgKzgzLDcgQEAKIAlBUElfRU5UUlkoQ1BVLCBDWDE4X0NQVV9ERV9TRVRfTURMX0FDSywJCQkwKSwKIAlBUElfRU5UUlkoQ1BVLCBDWDE4X0NQVV9ERV9TRVRfTURMLAkJCUFQSV9GQVNUKSwKIAlBUElfRU5UUlkoQ1BVLCBDWDE4X0FQVV9SRVNFVEFJLAkJCUFQSV9GQVNUKSwKKwlBUElfRU5UUlkoQ1BVLCBDWDE4X0NQVV9ERV9SRUxFQVNFX01ETCwJCQkwKSwKIAlBUElfRU5UUlkoMCwgMCwJCQkJCQkwKSwKIH07CiAKQEAgLTEwNSwyMCArMTA3LDIwIEBACiAJc3dpdGNoIChycHUpIHsKIAljYXNlIEFQVToKIAkJbWIgPSAmY3gtPnNjYi0+ZXB1MmFwdV9tYjsKLQkJKnN0YXRlID0gcmVhZGwoJmN4LT5zY2ItPmFwdV9zdGF0ZSk7Ci0JCSppcnEgPSByZWFkbCgmY3gtPnNjYi0+ZXB1MmFwdV9pcnEpOworCQkqc3RhdGUgPSBjeDE4X3JlYWRsKGN4LCAmY3gtPnNjYi0+YXB1X3N0YXRlKTsKKwkJKmlycSA9IGN4MThfcmVhZGwoY3gsICZjeC0+c2NiLT5lcHUyYXB1X2lycSk7CiAJCWJyZWFrOwogCiAJY2FzZSBDUFU6CiAJCW1iID0gJmN4LT5zY2ItPmVwdTJjcHVfbWI7Ci0JCSpzdGF0ZSA9IHJlYWRsKCZjeC0+c2NiLT5jcHVfc3RhdGUpOwotCQkqaXJxID0gcmVhZGwoJmN4LT5zY2ItPmVwdTJjcHVfaXJxKTsKKwkJKnN0YXRlID0gY3gxOF9yZWFkbChjeCwgJmN4LT5zY2ItPmNwdV9zdGF0ZSk7CisJCSppcnEgPSBjeDE4X3JlYWRsKGN4LCAmY3gtPnNjYi0+ZXB1MmNwdV9pcnEpOwogCQlicmVhazsKIAogCWNhc2UgSFBVOgogCQltYiA9ICZjeC0+c2NiLT5lcHUyaHB1X21iOwotCQkqc3RhdGUgPSByZWFkbCgmY3gtPnNjYi0+aHB1X3N0YXRlKTsKLQkJKmlycSA9IHJlYWRsKCZjeC0+c2NiLT5lcHUyaHB1X2lycSk7CisJCSpzdGF0ZSA9IGN4MThfcmVhZGwoY3gsICZjeC0+c2NiLT5ocHVfc3RhdGUpOworCQkqaXJxID0gY3gxOF9yZWFkbChjeCwgJmN4LT5zY2ItPmVwdTJocHVfaXJxKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMjYsOCArMTI4LDggQEAKIAkJcmV0dXJuIG1iOwogCiAJZG8gewotCQkqcmVxID0gcmVhZGwoJm1iLT5yZXF1ZXN0KTsKLQkJYWNrID0gcmVhZGwoJm1iLT5hY2spOworCQkqcmVxID0gY3gxOF9yZWFkbChjeCwgJm1iLT5yZXF1ZXN0KTsKKwkJYWNrID0gY3gxOF9yZWFkbChjeCwgJm1iLT5hY2spOwogCQl3YWl0X2NvdW50Kys7CiAJfSB3aGlsZSAoKnJlcSAhPSBhY2sgJiYgd2FpdF9jb3VudCA8IDYwMCk7CiAKQEAgLTE3Miw5ICsxNzQsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzZXR1cF9wYWdlKFNDQl9PRkZTRVQpOwotCXdyaXRlX3N5bmMobWItPnJlcXVlc3QsICZhY2tfbWItPmFjayk7Ci0Jd3JpdGVfcmVnKGFja19pcnEsIFNXMl9JTlRfU0VUKTsKKwljeDE4X3NldHVwX3BhZ2UoY3gsIFNDQl9PRkZTRVQpOworCWN4MThfd3JpdGVfc3luYyhjeCwgbWItPnJlcXVlc3QsICZhY2tfbWItPmFjayk7CisJY3gxOF93cml0ZV9yZWcoY3gsIGFja19pcnEsIFNXMl9JTlRfU0VUKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk5LDcgKzIwMSw3IEBACiAJCUNYMThfREVCVUdfSElfQVBJKCIlc1xuIiwgaW5mby0+bmFtZSk7CiAJZWxzZQogCQlDWDE4X0RFQlVHX0FQSSgiJXNcbiIsIGluZm8tPm5hbWUpOwotCXNldHVwX3BhZ2UoU0NCX09GRlNFVCk7CisJY3gxOF9zZXR1cF9wYWdlKGN4LCBTQ0JfT0ZGU0VUKTsKIAltYiA9IGN4MThfbWJfaXNfY29tcGxldGUoY3gsIGluZm8tPnJwdSwgJnN0YXRlLCAmaXJxLCAmcmVxKTsKIAogCWlmIChtYiA9PSBOVUxMKSB7CkBAIC0yMDgsMTEgKzIxMCwxMSBAQAogCX0KIAogCW9sZHJlcSA9IHJlcSAtIDE7Ci0Jd3JpdGVsKGNtZCwgJm1iLT5jbWQpOworCWN4MThfd3JpdGVsKGN4LCBjbWQsICZtYi0+Y21kKTsKIAlmb3IgKGkgPSAwOyBpIDwgYXJnczsgaSsrKQotCQl3cml0ZWwoZGF0YVtpXSwgJm1iLT5hcmdzW2ldKTsKLQl3cml0ZWwoMCwgJm1iLT5lcnJvcik7Ci0Jd3JpdGVsKHJlcSwgJm1iLT5yZXF1ZXN0KTsKKwkJY3gxOF93cml0ZWwoY3gsIGRhdGFbaV0sICZtYi0+YXJnc1tpXSk7CisJY3gxOF93cml0ZWwoY3gsIDAsICZtYi0+ZXJyb3IpOworCWN4MThfd3JpdGVsKGN4LCByZXEsICZtYi0+cmVxdWVzdCk7CiAKIAlzd2l0Y2ggKGluZm8tPnJwdSkgewogCWNhc2UgQVBVOiB3YWl0cSA9ICZjeC0+bWJfYXB1X3dhaXRxOyBicmVhazsKQEAgLTIyMyw5ICsyMjUsMTAgQEAKIAl9CiAJaWYgKGluZm8tPmZsYWdzICYgQVBJX0ZBU1QpCiAJCXRpbWVvdXQgLz0gMjsKLQl3cml0ZV9yZWcoaXJxLCBTVzFfSU5UX1NFVCk7CisJY3gxOF93cml0ZV9yZWcoY3gsIGlycSwgU1cxX0lOVF9TRVQpOwogCi0Jd2hpbGUgKCFzaWcgJiYgcmVhZGwoJm1iLT5hY2spICE9IHJlYWRsKCZtYi0+cmVxdWVzdCkgJiYgY250IDwgNjYwKSB7CisJd2hpbGUgKCFzaWcgJiYgY3gxOF9yZWFkbChjeCwgJm1iLT5hY2spICE9IGN4MThfcmVhZGwoY3gsICZtYi0+cmVxdWVzdCkKKwkgICAgICAgJiYgY250IDwgNjYwKSB7CiAJCWlmIChjbnQgPiAyMDAgJiYgIWluX2F0b21pYygpKQogCQkJc2lnID0gY3gxOF9tc2xlZXBfdGltZW91dCgxMCwgMSk7CiAJCWNudCsrOwpAQCAtMjMzLDEzICsyMzYsMTMgQEAKIAlpZiAoc2lnKQogCQlyZXR1cm4gLUVJTlRSOwogCWlmIChjbnQgPT0gNjYwKSB7Ci0JCXdyaXRlbChvbGRyZXEsICZtYi0+cmVxdWVzdCk7CisJCWN4MThfd3JpdGVsKGN4LCBvbGRyZXEsICZtYi0+cmVxdWVzdCk7CiAJCUNYMThfRVJSKCJtYiAlcyBmYWlsZWRcbiIsIGluZm8tPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZm9yIChpID0gMDsgaSA8IE1BWF9NQl9BUkdVTUVOVFM7IGkrKykKLQkJZGF0YVtpXSA9IHJlYWRsKCZtYi0+YXJnc1tpXSk7Ci0JZXJyID0gcmVhZGwoJm1iLT5lcnJvcik7CisJCWRhdGFbaV0gPSBjeDE4X3JlYWRsKGN4LCAmbWItPmFyZ3NbaV0pOworCWVyciA9IGN4MThfcmVhZGwoY3gsICZtYi0+ZXJyb3IpOwogCWlmICghaW5fYXRvbWljKCkgJiYgKGluZm8tPmZsYWdzICYgQVBJX1NMT1cpKQogCQljeDE4X21zbGVlcF90aW1lb3V0KDMwMCwgMCk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5jCmluZGV4IGRiZTc5MmEuLmEzM2JhMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYwpAQCAtMzcsOCArMzcsNyBAQAogdm9pZCBjeDE4X3F1ZXVlX2luaXQoc3RydWN0IGN4MThfcXVldWUgKnEpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJnEtPmxpc3QpOwotCXEtPmJ1ZmZlcnMgPSAwOwotCXEtPmxlbmd0aCA9IDA7CisJYXRvbWljX3NldCgmcS0+YnVmZmVycywgMCk7CiAJcS0+Ynl0ZXN1c2VkID0gMDsKIH0KIApAQCAtNTUsOCArNTQsNyBAQAogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+cWxvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZxLT5saXN0KTsKLQlxLT5idWZmZXJzKys7Ci0JcS0+bGVuZ3RoICs9IHMtPmJ1Zl9zaXplOworCWF0b21pY19pbmMoJnEtPmJ1ZmZlcnMpOwogCXEtPmJ5dGVzdXNlZCArPSBidWYtPmJ5dGVzdXNlZCAtIGJ1Zi0+cmVhZHBvczsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5xbG9jaywgZmxhZ3MpOwogfQpAQCAtNzAsOCArNjgsNyBAQAogCWlmICghbGlzdF9lbXB0eSgmcS0+bGlzdCkpIHsKIAkJYnVmID0gbGlzdF9lbnRyeShxLT5saXN0Lm5leHQsIHN0cnVjdCBjeDE4X2J1ZmZlciwgbGlzdCk7CiAJCWxpc3RfZGVsX2luaXQocS0+bGlzdC5uZXh0KTsKLQkJcS0+YnVmZmVycy0tOwotCQlxLT5sZW5ndGggLT0gcy0+YnVmX3NpemU7CisJCWF0b21pY19kZWMoJnEtPmJ1ZmZlcnMpOwogCQlxLT5ieXRlc3VzZWQgLT0gYnVmLT5ieXRlc3VzZWQgLSBidWYtPnJlYWRwb3M7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPnFsb2NrLCBmbGFncyk7CkBAIC05NSwxMCArOTIsOCBAQAogCQkvKiB0aGUgdHJhbnNwb3J0IGJ1ZmZlcnMgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksCiAJCSAgIHRoZXkgYXJlIG5vdCBtb3ZlZCB0byB0aGUgZnVsbCBxdWV1ZSAqLwogCQlpZiAocy0+dHlwZSAhPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUykgewotCQkJcy0+cV9mcmVlLmJ1ZmZlcnMtLTsKLQkJCXMtPnFfZnJlZS5sZW5ndGggLT0gcy0+YnVmX3NpemU7Ci0JCQlzLT5xX2Z1bGwuYnVmZmVycysrOwotCQkJcy0+cV9mdWxsLmxlbmd0aCArPSBzLT5idWZfc2l6ZTsKKwkJCWF0b21pY19kZWMoJnMtPnFfZnJlZS5idWZmZXJzKTsKKwkJCWF0b21pY19pbmMoJnMtPnFfZnVsbC5idWZmZXJzKTsKIAkJCXMtPnFfZnVsbC5ieXRlc3VzZWQgKz0gYnVmLT5ieXRlc3VzZWQ7CiAJCQlsaXN0X21vdmVfdGFpbCgmYnVmLT5saXN0LCAmcy0+cV9mdWxsLmxpc3QpOwogCQl9CkBAIC0xMjQsOCArMTE5LDcgQEAKIAkJYnVmID0gbGlzdF9lbnRyeShxLT5saXN0Lm5leHQsIHN0cnVjdCBjeDE4X2J1ZmZlciwgbGlzdCk7CiAJCWxpc3RfbW92ZV90YWlsKHEtPmxpc3QubmV4dCwgJnMtPnFfZnJlZS5saXN0KTsKIAkJYnVmLT5ieXRlc3VzZWQgPSBidWYtPnJlYWRwb3MgPSBidWYtPmJfZmxhZ3MgPSAwOwotCQlzLT5xX2ZyZWUuYnVmZmVycysrOwotCQlzLT5xX2ZyZWUubGVuZ3RoICs9IHMtPmJ1Zl9zaXplOworCQlhdG9taWNfaW5jKCZzLT5xX2ZyZWUuYnVmZmVycyk7CiAJfQogCWN4MThfcXVldWVfaW5pdChxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5xbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc2NiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zY2IuYwppbmRleCAzMGJjODAzLi5mNTZkMzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zY2IuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zY2IuYwpAQCAtMjAsMTAyICsyMCwxMDMgQEAKICAqLwogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKyNpbmNsdWRlICJjeDE4LWlvLmgiCiAjaW5jbHVkZSAiY3gxOC1zY2IuaCIKIAogdm9pZCBjeDE4X2luaXRfc2NiKHN0cnVjdCBjeDE4ICpjeCkKIHsKLQlzZXR1cF9wYWdlKFNDQl9PRkZTRVQpOwotCW1lbXNldF9pbyhjeC0+c2NiLCAwLCAweDEwMDAwKTsKKwljeDE4X3NldHVwX3BhZ2UoY3gsIFNDQl9PRkZTRVQpOworCWN4MThfbWVtc2V0X2lvKGN4LCBjeC0+c2NiLCAwLCAweDEwMDAwKTsKIAotCXdyaXRlbChJUlFfQVBVX1RPX0NQVSwgICAgICZjeC0+c2NiLT5hcHUyY3B1X2lycSk7Ci0Jd3JpdGVsKElSUV9DUFVfVE9fQVBVX0FDSywgJmN4LT5zY2ItPmNwdTJhcHVfaXJxX2Fjayk7Ci0Jd3JpdGVsKElSUV9IUFVfVE9fQ1BVLCAgICAgJmN4LT5zY2ItPmhwdTJjcHVfaXJxKTsKLQl3cml0ZWwoSVJRX0NQVV9UT19IUFVfQUNLLCAmY3gtPnNjYi0+Y3B1MmhwdV9pcnFfYWNrKTsKLQl3cml0ZWwoSVJRX1BQVV9UT19DUFUsICAgICAmY3gtPnNjYi0+cHB1MmNwdV9pcnEpOwotCXdyaXRlbChJUlFfQ1BVX1RPX1BQVV9BQ0ssICZjeC0+c2NiLT5jcHUycHB1X2lycV9hY2spOwotCXdyaXRlbChJUlFfRVBVX1RPX0NQVSwgICAgICZjeC0+c2NiLT5lcHUyY3B1X2lycSk7Ci0Jd3JpdGVsKElSUV9DUFVfVE9fRVBVX0FDSywgJmN4LT5zY2ItPmNwdTJlcHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9BUFVfVE9fQ1BVLCAgICAgJmN4LT5zY2ItPmFwdTJjcHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0NQVV9UT19BUFVfQUNLLCAmY3gtPnNjYi0+Y3B1MmFwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0hQVV9UT19DUFUsICAgICAmY3gtPnNjYi0+aHB1MmNwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfQ1BVX1RPX0hQVV9BQ0ssICZjeC0+c2NiLT5jcHUyaHB1X2lycV9hY2spOworCWN4MThfd3JpdGVsKGN4LCBJUlFfUFBVX1RPX0NQVSwgICAgICZjeC0+c2NiLT5wcHUyY3B1X2lycSk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9DUFVfVE9fUFBVX0FDSywgJmN4LT5zY2ItPmNwdTJwcHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9FUFVfVE9fQ1BVLCAgICAgJmN4LT5zY2ItPmVwdTJjcHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0NQVV9UT19FUFVfQUNLLCAmY3gtPnNjYi0+Y3B1MmVwdV9pcnFfYWNrKTsKIAotCXdyaXRlbChJUlFfQ1BVX1RPX0FQVSwgICAgICZjeC0+c2NiLT5jcHUyYXB1X2lycSk7Ci0Jd3JpdGVsKElSUV9BUFVfVE9fQ1BVX0FDSywgJmN4LT5zY2ItPmFwdTJjcHVfaXJxX2Fjayk7Ci0Jd3JpdGVsKElSUV9IUFVfVE9fQVBVLCAgICAgJmN4LT5zY2ItPmhwdTJhcHVfaXJxKTsKLQl3cml0ZWwoSVJRX0FQVV9UT19IUFVfQUNLLCAmY3gtPnNjYi0+YXB1MmhwdV9pcnFfYWNrKTsKLQl3cml0ZWwoSVJRX1BQVV9UT19BUFUsICAgICAmY3gtPnNjYi0+cHB1MmFwdV9pcnEpOwotCXdyaXRlbChJUlFfQVBVX1RPX1BQVV9BQ0ssICZjeC0+c2NiLT5hcHUycHB1X2lycV9hY2spOwotCXdyaXRlbChJUlFfRVBVX1RPX0FQVSwgICAgICZjeC0+c2NiLT5lcHUyYXB1X2lycSk7Ci0Jd3JpdGVsKElSUV9BUFVfVE9fRVBVX0FDSywgJmN4LT5zY2ItPmFwdTJlcHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9DUFVfVE9fQVBVLCAgICAgJmN4LT5zY2ItPmNwdTJhcHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0FQVV9UT19DUFVfQUNLLCAmY3gtPnNjYi0+YXB1MmNwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0hQVV9UT19BUFUsICAgICAmY3gtPnNjYi0+aHB1MmFwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfQVBVX1RPX0hQVV9BQ0ssICZjeC0+c2NiLT5hcHUyaHB1X2lycV9hY2spOworCWN4MThfd3JpdGVsKGN4LCBJUlFfUFBVX1RPX0FQVSwgICAgICZjeC0+c2NiLT5wcHUyYXB1X2lycSk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9BUFVfVE9fUFBVX0FDSywgJmN4LT5zY2ItPmFwdTJwcHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9FUFVfVE9fQVBVLCAgICAgJmN4LT5zY2ItPmVwdTJhcHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0FQVV9UT19FUFVfQUNLLCAmY3gtPnNjYi0+YXB1MmVwdV9pcnFfYWNrKTsKIAotCXdyaXRlbChJUlFfQ1BVX1RPX0hQVSwgICAgICZjeC0+c2NiLT5jcHUyaHB1X2lycSk7Ci0Jd3JpdGVsKElSUV9IUFVfVE9fQ1BVX0FDSywgJmN4LT5zY2ItPmhwdTJjcHVfaXJxX2Fjayk7Ci0Jd3JpdGVsKElSUV9BUFVfVE9fSFBVLCAgICAgJmN4LT5zY2ItPmFwdTJocHVfaXJxKTsKLQl3cml0ZWwoSVJRX0hQVV9UT19BUFVfQUNLLCAmY3gtPnNjYi0+aHB1MmFwdV9pcnFfYWNrKTsKLQl3cml0ZWwoSVJRX1BQVV9UT19IUFUsICAgICAmY3gtPnNjYi0+cHB1MmhwdV9pcnEpOwotCXdyaXRlbChJUlFfSFBVX1RPX1BQVV9BQ0ssICZjeC0+c2NiLT5ocHUycHB1X2lycV9hY2spOwotCXdyaXRlbChJUlFfRVBVX1RPX0hQVSwgICAgICZjeC0+c2NiLT5lcHUyaHB1X2lycSk7Ci0Jd3JpdGVsKElSUV9IUFVfVE9fRVBVX0FDSywgJmN4LT5zY2ItPmhwdTJlcHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9DUFVfVE9fSFBVLCAgICAgJmN4LT5zY2ItPmNwdTJocHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0hQVV9UT19DUFVfQUNLLCAmY3gtPnNjYi0+aHB1MmNwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0FQVV9UT19IUFUsICAgICAmY3gtPnNjYi0+YXB1MmhwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfSFBVX1RPX0FQVV9BQ0ssICZjeC0+c2NiLT5ocHUyYXB1X2lycV9hY2spOworCWN4MThfd3JpdGVsKGN4LCBJUlFfUFBVX1RPX0hQVSwgICAgICZjeC0+c2NiLT5wcHUyaHB1X2lycSk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9IUFVfVE9fUFBVX0FDSywgJmN4LT5zY2ItPmhwdTJwcHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9FUFVfVE9fSFBVLCAgICAgJmN4LT5zY2ItPmVwdTJocHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0hQVV9UT19FUFVfQUNLLCAmY3gtPnNjYi0+aHB1MmVwdV9pcnFfYWNrKTsKIAotCXdyaXRlbChJUlFfQ1BVX1RPX1BQVSwgICAgICZjeC0+c2NiLT5jcHUycHB1X2lycSk7Ci0Jd3JpdGVsKElSUV9QUFVfVE9fQ1BVX0FDSywgJmN4LT5zY2ItPnBwdTJjcHVfaXJxX2Fjayk7Ci0Jd3JpdGVsKElSUV9BUFVfVE9fUFBVLCAgICAgJmN4LT5zY2ItPmFwdTJwcHVfaXJxKTsKLQl3cml0ZWwoSVJRX1BQVV9UT19BUFVfQUNLLCAmY3gtPnNjYi0+cHB1MmFwdV9pcnFfYWNrKTsKLQl3cml0ZWwoSVJRX0hQVV9UT19QUFUsICAgICAmY3gtPnNjYi0+aHB1MnBwdV9pcnEpOwotCXdyaXRlbChJUlFfUFBVX1RPX0hQVV9BQ0ssICZjeC0+c2NiLT5wcHUyaHB1X2lycV9hY2spOwotCXdyaXRlbChJUlFfRVBVX1RPX1BQVSwgICAgICZjeC0+c2NiLT5lcHUycHB1X2lycSk7Ci0Jd3JpdGVsKElSUV9QUFVfVE9fRVBVX0FDSywgJmN4LT5zY2ItPnBwdTJlcHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9DUFVfVE9fUFBVLCAgICAgJmN4LT5zY2ItPmNwdTJwcHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX1BQVV9UT19DUFVfQUNLLCAmY3gtPnNjYi0+cHB1MmNwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0FQVV9UT19QUFUsICAgICAmY3gtPnNjYi0+YXB1MnBwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfUFBVX1RPX0FQVV9BQ0ssICZjeC0+c2NiLT5wcHUyYXB1X2lycV9hY2spOworCWN4MThfd3JpdGVsKGN4LCBJUlFfSFBVX1RPX1BQVSwgICAgICZjeC0+c2NiLT5ocHUycHB1X2lycSk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9QUFVfVE9fSFBVX0FDSywgJmN4LT5zY2ItPnBwdTJocHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9FUFVfVE9fUFBVLCAgICAgJmN4LT5zY2ItPmVwdTJwcHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX1BQVV9UT19FUFVfQUNLLCAmY3gtPnNjYi0+cHB1MmVwdV9pcnFfYWNrKTsKIAotCXdyaXRlbChJUlFfQ1BVX1RPX0VQVSwgICAgICZjeC0+c2NiLT5jcHUyZXB1X2lycSk7Ci0Jd3JpdGVsKElSUV9FUFVfVE9fQ1BVX0FDSywgJmN4LT5zY2ItPmVwdTJjcHVfaXJxX2Fjayk7Ci0Jd3JpdGVsKElSUV9BUFVfVE9fRVBVLCAgICAgJmN4LT5zY2ItPmFwdTJlcHVfaXJxKTsKLQl3cml0ZWwoSVJRX0VQVV9UT19BUFVfQUNLLCAmY3gtPnNjYi0+ZXB1MmFwdV9pcnFfYWNrKTsKLQl3cml0ZWwoSVJRX0hQVV9UT19FUFUsICAgICAmY3gtPnNjYi0+aHB1MmVwdV9pcnEpOwotCXdyaXRlbChJUlFfRVBVX1RPX0hQVV9BQ0ssICZjeC0+c2NiLT5lcHUyaHB1X2lycV9hY2spOwotCXdyaXRlbChJUlFfUFBVX1RPX0VQVSwgICAgICZjeC0+c2NiLT5wcHUyZXB1X2lycSk7Ci0Jd3JpdGVsKElSUV9FUFVfVE9fUFBVX0FDSywgJmN4LT5zY2ItPmVwdTJwcHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9DUFVfVE9fRVBVLCAgICAgJmN4LT5zY2ItPmNwdTJlcHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0VQVV9UT19DUFVfQUNLLCAmY3gtPnNjYi0+ZXB1MmNwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0FQVV9UT19FUFUsICAgICAmY3gtPnNjYi0+YXB1MmVwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfRVBVX1RPX0FQVV9BQ0ssICZjeC0+c2NiLT5lcHUyYXB1X2lycV9hY2spOworCWN4MThfd3JpdGVsKGN4LCBJUlFfSFBVX1RPX0VQVSwgICAgICZjeC0+c2NiLT5ocHUyZXB1X2lycSk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9FUFVfVE9fSFBVX0FDSywgJmN4LT5zY2ItPmVwdTJocHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9QUFVfVE9fRVBVLCAgICAgJmN4LT5zY2ItPnBwdTJlcHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0VQVV9UT19QUFVfQUNLLCAmY3gtPnNjYi0+ZXB1MnBwdV9pcnFfYWNrKTsKIAotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBhcHUyY3B1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgYXB1MmNwdV9tYiksCiAJCQkmY3gtPnNjYi0+YXB1MmNwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBocHUyY3B1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgaHB1MmNwdV9tYiksCiAJCQkmY3gtPnNjYi0+aHB1MmNwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBwcHUyY3B1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgcHB1MmNwdV9tYiksCiAJCQkmY3gtPnNjYi0+cHB1MmNwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBlcHUyY3B1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgZXB1MmNwdV9tYiksCiAJCQkmY3gtPnNjYi0+ZXB1MmNwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBjcHUyYXB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgY3B1MmFwdV9tYiksCiAJCQkmY3gtPnNjYi0+Y3B1MmFwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBocHUyYXB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgaHB1MmFwdV9tYiksCiAJCQkmY3gtPnNjYi0+aHB1MmFwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBwcHUyYXB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgcHB1MmFwdV9tYiksCiAJCQkmY3gtPnNjYi0+cHB1MmFwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBlcHUyYXB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgZXB1MmFwdV9tYiksCiAJCQkmY3gtPnNjYi0+ZXB1MmFwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBjcHUyaHB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgY3B1MmhwdV9tYiksCiAJCQkmY3gtPnNjYi0+Y3B1MmhwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBhcHUyaHB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgYXB1MmhwdV9tYiksCiAJCQkmY3gtPnNjYi0+YXB1MmhwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBwcHUyaHB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgcHB1MmhwdV9tYiksCiAJCQkmY3gtPnNjYi0+cHB1MmhwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBlcHUyaHB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgZXB1MmhwdV9tYiksCiAJCQkmY3gtPnNjYi0+ZXB1MmhwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBjcHUycHB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgY3B1MnBwdV9tYiksCiAJCQkmY3gtPnNjYi0+Y3B1MnBwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBhcHUycHB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgYXB1MnBwdV9tYiksCiAJCQkmY3gtPnNjYi0+YXB1MnBwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBocHUycHB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgaHB1MnBwdV9tYiksCiAJCQkmY3gtPnNjYi0+aHB1MnBwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBlcHUycHB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgZXB1MnBwdV9tYiksCiAJCQkmY3gtPnNjYi0+ZXB1MnBwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBjcHUyZXB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgY3B1MmVwdV9tYiksCiAJCQkmY3gtPnNjYi0+Y3B1MmVwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBhcHUyZXB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgYXB1MmVwdV9tYiksCiAJCQkmY3gtPnNjYi0+YXB1MmVwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBocHUyZXB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgaHB1MmVwdV9tYiksCiAJCQkmY3gtPnNjYi0+aHB1MmVwdV9tYl9vZmZzZXQpOwotCXdyaXRlbChTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBwcHUyZXB1X21iKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgcHB1MmVwdV9tYiksCiAJCQkmY3gtPnNjYi0+cHB1MmVwdV9tYl9vZmZzZXQpOwogCi0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGNwdV9zdGF0ZSksCisJY3gxOF93cml0ZWwoY3gsIFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGNwdV9zdGF0ZSksCiAJCQkmY3gtPnNjYi0+aXBjX29mZnNldCk7CiAKLQl3cml0ZWwoMSwgJmN4LT5zY2ItPmhwdV9zdGF0ZSk7Ci0Jd3JpdGVsKDEsICZjeC0+c2NiLT5lcHVfc3RhdGUpOworCWN4MThfd3JpdGVsKGN4LCAxLCAmY3gtPnNjYi0+aHB1X3N0YXRlKTsKKwljeDE4X3dyaXRlbChjeCwgMSwgJmN4LT5zY2ItPmVwdV9zdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKaW5kZXggMGRhNTdmNS4uMGM4ZTc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwpAQCAtMjIsNiArMjIsNyBAQAogICovCiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorI2luY2x1ZGUgImN4MTgtaW8uaCIKICNpbmNsdWRlICJjeDE4LWZpbGVvcHMuaCIKICNpbmNsdWRlICJjeDE4LW1haWxib3guaCIKICNpbmNsdWRlICJjeDE4LWkyYy5oIgpAQCAtNTYsNyArNTcsNyBAQAogc3RhdGljIHN0cnVjdCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgdmZsX3R5cGU7Ci0JaW50IG1pbm9yX29mZnNldDsKKwlpbnQgbnVtX29mZnNldDsKIAlpbnQgZG1hOwogCWVudW0gdjRsMl9idWZfdHlwZSBidWZfdHlwZTsKIAlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOwpAQCAtMTE5LDcgKzEyMCw3IEBACiAJcy0+Y3ggPSBjeDsKIAlzLT50eXBlID0gdHlwZTsKIAlzLT5uYW1lID0gY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5uYW1lOwotCXMtPmhhbmRsZSA9IDB4ZmZmZmZmZmY7CisJcy0+aGFuZGxlID0gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFOwogCiAJcy0+ZG1hID0gY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5kbWE7CiAJcy0+YnVmX3NpemUgPSBjeC0+c3RyZWFtX2J1Zl9zaXplW3R5cGVdOwpAQCAtMTQzLDggKzE0NCw4IEBACiB7CiAJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW3R5cGVdOwogCXUzMiBjYXAgPSBjeC0+djRsMl9jYXA7Ci0JaW50IG1pbm9yX29mZnNldCA9IGN4MThfc3RyZWFtX2luZm9bdHlwZV0ubWlub3Jfb2Zmc2V0OwotCWludCBtaW5vcjsKKwlpbnQgbnVtX29mZnNldCA9IGN4MThfc3RyZWFtX2luZm9bdHlwZV0ubnVtX29mZnNldDsKKwlpbnQgbnVtID0gY3gtPm51bSArIGN4MThfZmlyc3RfbWlub3IgKyBudW1fb2Zmc2V0OwogCiAJLyogVGhlc2UgZm91ciBmaWVsZHMgYXJlIGFsd2F5cyBpbml0aWFsaXplZC4gSWYgdjRsMmRldiA9PSBOVUxMLCB0aGVuCiAJICAgdGhpcyBzdHJlYW0gaXMgbm90IGluIHVzZS4gSW4gdGhhdCBjYXNlIG5vIG90aGVyIGZpZWxkcyBidXQgdGhlc2UKQEAgLTE2Myw5ICsxNjQsNiBAQAogCSAgICAhKGNhcCAmIChWNEwyX0NBUF9WQklfQ0FQVFVSRSB8IFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSkpKQogCQlyZXR1cm4gMDsKIAotCS8qIGNhcmQgbnVtYmVyICsgdXNlciBkZWZpbmVkIG9mZnNldCArIGRldmljZSBvZmZzZXQgKi8KLQltaW5vciA9IGN4LT5udW0gKyBjeDE4X2ZpcnN0X21pbm9yICsgbWlub3Jfb2Zmc2V0OwotCiAJLyogVXNlciBleHBsaWNpdGx5IHNlbGVjdGVkIDAgYnVmZmVycyBmb3IgdGhlc2Ugc3RyZWFtcywgc28gZG9uJ3QKIAkgICBjcmVhdGUgdGhlbS4gKi8KIAlpZiAoY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5kbWEgIT0gUENJX0RNQV9OT05FICYmCkBAIC0xNzYsNyArMTc0LDcgQEAKIAogCWN4MThfc3RyZWFtX2luaXQoY3gsIHR5cGUpOwogCi0JaWYgKG1pbm9yX29mZnNldCA9PSAtMSkKKwlpZiAobnVtX29mZnNldCA9PSAtMSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgdjRsMiB2aWRlbyBkZXZpY2Ugc3RydWN0dXJlICovCkBAIC0xOTAsNyArMTg4LDcgQEAKIAlzbnByaW50ZihzLT52NGwyZGV2LT5uYW1lLCBzaXplb2Yocy0+djRsMmRldi0+bmFtZSksICJjeDE4LSVkIiwKIAkJCWN4LT5udW0pOwogCi0Jcy0+djRsMmRldi0+bWlub3IgPSBtaW5vcjsKKwlzLT52NGwyZGV2LT5udW0gPSBudW07CiAJcy0+djRsMmRldi0+cGFyZW50ID0gJmN4LT5kZXYtPmRldjsKIAlzLT52NGwyZGV2LT5mb3BzID0gY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5mb3BzOwogCXMtPnY0bDJkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKQEAgLTIyNiw3ICsyMjQsNyBAQAogewogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1t0eXBlXTsKIAlpbnQgdmZsX3R5cGUgPSBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLnZmbF90eXBlOwotCWludCBtaW5vcjsKKwlpbnQgbnVtOwogCiAJLyogVE9ETzogU2hvdWxkbid0IHRoaXMgYmUgYSBWRkxfVFlQRV9UUkFOU1BPUlQgb3Igc29tZXRoaW5nPwogCSAqIFdlIG5lZWQgYSBWRkxfVFlQRV9UUyBkZWZpbmVkLgpAQCAtMjQ0LDM4ICsyNDIsNDQgQEAKIAlpZiAocy0+djRsMmRldiA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCW1pbm9yID0gcy0+djRsMmRldi0+bWlub3I7CisJbnVtID0gcy0+djRsMmRldi0+bnVtOworCS8qIGNhcmQgbnVtYmVyICsgdXNlciBkZWZpbmVkIG9mZnNldCArIGRldmljZSBvZmZzZXQgKi8KKwlpZiAodHlwZSAhPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpIHsKKwkJc3RydWN0IGN4MThfc3RyZWFtICpzX21wZyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEddOworCisJCWlmIChzX21wZy0+djRsMmRldikKKwkJCW51bSA9IHNfbXBnLT52NGwyZGV2LT5udW0gKyBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CisJfQogCiAJLyogUmVnaXN0ZXIgZGV2aWNlLiBGaXJzdCB0cnkgdGhlIGRlc2lyZWQgbWlub3IsIHRoZW4gYW55IGZyZWUgb25lLiAqLwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2Uocy0+djRsMmRldiwgdmZsX3R5cGUsIG1pbm9yKSAmJgotCQkJdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHMtPnY0bDJkZXYsIHZmbF90eXBlLCAtMSkpIHsKLQkJQ1gxOF9FUlIoIkNvdWxkbid0IHJlZ2lzdGVyIHY0bDIgZGV2aWNlIGZvciAlcyBtaW5vciAlZFxuIiwKLQkJCXMtPm5hbWUsIG1pbm9yKTsKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHMtPnY0bDJkZXYsIHZmbF90eXBlLCBudW0pKSB7CisJCUNYMThfRVJSKCJDb3VsZG4ndCByZWdpc3RlciB2NGwyIGRldmljZSBmb3IgJXMga2VybmVsIG51bWJlciAlZFxuIiwKKwkJCXMtPm5hbWUsIG51bSk7CiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKHMtPnY0bDJkZXYpOwogCQlzLT52NGwyZGV2ID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1pbm9yID0gcy0+djRsMmRldi0+bWlub3I7CisJbnVtID0gcy0+djRsMmRldi0+bnVtOwogCiAJc3dpdGNoICh2ZmxfdHlwZSkgewogCWNhc2UgVkZMX1RZUEVfR1JBQkJFUjoKIAkJQ1gxOF9JTkZPKCJSZWdpc3RlcmVkIGRldmljZSB2aWRlbyVkIGZvciAlcyAoJWQgTUIpXG4iLAotCQkJbWlub3IsIHMtPm5hbWUsIGN4LT5vcHRpb25zLm1lZ2FieXRlc1t0eXBlXSk7CisJCQludW0sIHMtPm5hbWUsIGN4LT5vcHRpb25zLm1lZ2FieXRlc1t0eXBlXSk7CiAJCWJyZWFrOwogCiAJY2FzZSBWRkxfVFlQRV9SQURJTzoKIAkJQ1gxOF9JTkZPKCJSZWdpc3RlcmVkIGRldmljZSByYWRpbyVkIGZvciAlc1xuIiwKLQkJCW1pbm9yIC0gTUlOT1JfVkZMX1RZUEVfUkFESU9fTUlOLCBzLT5uYW1lKTsKKwkJCW51bSwgcy0+bmFtZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBWRkxfVFlQRV9WQkk6CiAJCWlmIChjeC0+b3B0aW9ucy5tZWdhYnl0ZXNbdHlwZV0pCiAJCQlDWDE4X0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlIHZiaSVkIGZvciAlcyAoJWQgTUIpXG4iLAotCQkJCW1pbm9yIC0gTUlOT1JfVkZMX1RZUEVfVkJJX01JTiwKKwkJCQludW0sCiAJCQkJcy0+bmFtZSwgY3gtPm9wdGlvbnMubWVnYWJ5dGVzW3R5cGVdKTsKIAkJZWxzZQogCQkJQ1gxOF9JTkZPKCJSZWdpc3RlcmVkIGRldmljZSB2YmklZCBmb3IgJXNcbiIsCi0JCQkJbWlub3IgLSBNSU5PUl9WRkxfVFlQRV9WQklfTUlOLCBzLT5uYW1lKTsKKwkJCQludW0sIHMtPm5hbWUpOwogCQlicmVhazsKIAl9CiAKQEAgLTQzMiw3ICs0MzYsNiBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlzLT5idWZmZXJzX3N0b2xlbiA9IDA7CiAKIAkvKiBtdXRlL3VubXV0ZSB2aWRlbyAqLwogCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX1ZJREVPX01VVEUsIDIsCkBAIC00NzAsNyArNDczLDcgQEAKIAogCWlmIChhdG9taWNfcmVhZCgmY3gtPnRvdF9jYXB0dXJpbmcpID09IDApIHsKIAkJY2xlYXJfYml0KENYMThfRl9JX0VPUywgJmN4LT5pX2ZsYWdzKTsKLQkJd3JpdGVfcmVnKDcsIENYMThfRFNQMF9JTlRFUlJVUFRfTUFTSyk7CisJCWN4MThfd3JpdGVfcmVnKGN4LCA3LCBDWDE4X0RTUDBfSU5URVJSVVBUX01BU0spOwogCX0KIAogCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfREVfU0VUX01ETF9BQ0ssIDMsIHMtPmhhbmRsZSwKQEAgLTQ4MCw4ICs0ODMsOSBAQAogCWxpc3RfZm9yX2VhY2gocCwgJnMtPnFfZnJlZS5saXN0KSB7CiAJCXN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgY3gxOF9idWZmZXIsIGxpc3QpOwogCi0JCXdyaXRlbChidWYtPmRtYV9oYW5kbGUsICZjeC0+c2NiLT5jcHVfbWRsW2J1Zi0+aWRdLnBhZGRyKTsKLQkJd3JpdGVsKHMtPmJ1Zl9zaXplLCAmY3gtPnNjYi0+Y3B1X21kbFtidWYtPmlkXS5sZW5ndGgpOworCQljeDE4X3dyaXRlbChjeCwgYnVmLT5kbWFfaGFuZGxlLAorCQkJCQkmY3gtPnNjYi0+Y3B1X21kbFtidWYtPmlkXS5wYWRkcik7CisJCWN4MThfd3JpdGVsKGN4LCBzLT5idWZfc2l6ZSwgJmN4LT5zY2ItPmNwdV9tZGxbYnVmLT5pZF0ubGVuZ3RoKTsKIAkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9ERV9TRVRfTURMLCA1LCBzLT5oYW5kbGUsCiAJCQkodm9pZCBfX2lvbWVtICopJmN4LT5zY2ItPmNwdV9tZGxbYnVmLT5pZF0gLSBjeC0+ZW5jX21lbSwKIAkJCTEsIGJ1Zi0+aWQsIHMtPmJ1Zl9zaXplKTsKQEAgLTQ4OSw3ICs0OTMsMTQgQEAKIAkvKiBiZWdpbl9jYXB0dXJlICovCiAJaWYgKGN4MThfdmFwaShjeCwgQ1gxOF9DUFVfQ0FQVFVSRV9TVEFSVCwgMSwgcy0+aGFuZGxlKSkgewogCQlDWDE4X0RFQlVHX1dBUk4oIkVycm9yIHN0YXJ0aW5nIGNhcHR1cmUhXG4iKTsKKwkJLyogRW5zdXJlIHdlJ3JlIHJlYWxseSBub3QgY2FwdHVyaW5nIGJlZm9yZSByZWxlYXNpbmcgTURMcyAqLworCQlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpCisJCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX0NBUFRVUkVfU1RPUCwgMiwgcy0+aGFuZGxlLCAxKTsKKwkJZWxzZQorCQkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9DQVBUVVJFX1NUT1AsIDEsIHMtPmhhbmRsZSk7CisJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfREVfUkVMRUFTRV9NREwsIDEsIHMtPmhhbmRsZSk7CiAJCWN4MThfdmFwaShjeCwgQ1gxOF9ERVNUUk9ZX1RBU0ssIDEsIHMtPmhhbmRsZSk7CisJCS8qIEZJWE1FIC0gY2xlYW4tdXAgRFNQMF9JTlQgbWFzaywgaV9mbGFncywgc19mbGFncywgZXRjLiAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU0MSw2ICs1NTIsOSBAQAogCQlDWDE4X0lORk8oImlnbm9yaW5nIGdvcF9lbmQ6IG5vdCAoeWV0Pykgc3VwcG9ydGVkIGJ5IHRoZSBmaXJtd2FyZVxuIik7CiAJfQogCisJLyogVGVsbCB0aGUgQ1gyMzQxOCBpdCBjYW4ndCB1c2Ugb3VyIGJ1ZmZlcnMgYW55bW9yZSAqLworCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfREVfUkVMRUFTRV9NREwsIDEsIHMtPmhhbmRsZSk7CisKIAlpZiAocy0+dHlwZSAhPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUykKIAkJYXRvbWljX2RlYygmY3gtPmFuYV9jYXB0dXJpbmcpOwogCWF0b21pY19kZWMoJmN4LT50b3RfY2FwdHVyaW5nKTsKQEAgLTU0OSwxMiArNTYzLDEyIEBACiAJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpOwogCiAJY3gxOF92YXBpKGN4LCBDWDE4X0RFU1RST1lfVEFTSywgMSwgcy0+aGFuZGxlKTsKLQlzLT5oYW5kbGUgPSAweGZmZmZmZmZmOworCXMtPmhhbmRsZSA9IENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRTsKIAogCWlmIChhdG9taWNfcmVhZCgmY3gtPnRvdF9jYXB0dXJpbmcpID4gMCkKIAkJcmV0dXJuIDA7CiAKLQl3cml0ZV9yZWcoNSwgQ1gxOF9EU1AwX0lOVEVSUlVQVF9NQVNLKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgNSwgQ1gxOF9EU1AwX0lOVEVSUlVQVF9NQVNLKTsKIAl3YWtlX3VwKCZzLT53YWl0cSk7CiAKIAlyZXR1cm4gMDsKQEAgLTU2OCw4ICs1ODIsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9TVFJFQU1TOyBpKyspIHsKIAkJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW2ldOwogCi0JCWlmIChzLT52NGwyZGV2ICYmIHMtPmhhbmRsZSkKKwkJaWYgKHMtPnY0bDJkZXYgJiYgKHMtPmhhbmRsZSAhPSBDWDE4X0lOVkFMSURfVEFTS19IQU5ETEUpKQogCQkJcmV0dXJuIHMtPmhhbmRsZTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaAppbmRleCBkNWM3YTZmLi45ZjZiZTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIENYMThfRFJJVkVSX05BTUUgImN4MTgiCiAjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fTUFKT1IgMQogI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX01JTk9SIDAKLSNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMIDAKKyNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMIDEKIAogI2RlZmluZSBDWDE4X1ZFUlNJT04gX19zdHJpbmdpZnkoQ1gxOF9EUklWRVJfVkVSU0lPTl9NQUpPUikgIi4iIF9fc3RyaW5naWZ5KENYMThfRFJJVkVSX1ZFUlNJT05fTUlOT1IpICIuIiBfX3N0cmluZ2lmeShDWDE4X0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwpCiAjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oQ1gxOF9EUklWRVJfVkVSU0lPTl9NQUpPUiwgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKaW5kZXggZTdlZDA1My4uNjY4Zjk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCkBAIC0zNTEsNyArMzUxLDcgQEAKICAgIERlc2NyaXB0b3IgTGlzdHMgdG8gdGhlIGRyaXZlcgogICAgSU5bMF0gLSBUYXNrIGhhbmRsZS4gSGFuZGxlIG9mIHRoZSB0YXNrIHRvIHN0YXJ0CiAgICBSZXR1cm5Db2RlIC0gT25lIG9mIHRoZSBFUlJfREVfLi4uICovCi0vKiAjZGVmaW5lIENYMThfQ1BVX0RFX1JlbGVhc2VNREwgICAgICAgICAgICAgICAoQ1BVX0NNRF9NQVNLX0RFIHwgMHgwMDA2KSAqLworI2RlZmluZSBDWDE4X0NQVV9ERV9SRUxFQVNFX01ETCAgICAgICAgICAgICAgIAkoQ1BVX0NNRF9NQVNLX0RFIHwgMHgwMDA2KQogCiAvKiBEZXNjcmlwdGlvbjogVGhpcyBjb21tYW5kIHNpZ25hbHMgdGhlIGNwdSB0aGF0IHRoZSBkYXQgYnVmZmVyIGhhcyBiZWVuCiAgICBjb25zdW1lZCBhbmQgcmVhZHkgZm9yIHJlLXVzZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMKaW5kZXggMjI4NDdhMC4uY2JiZTQ3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMKQEAgLTUwOCw3ICs1MDgsMTAgQEAKIAkJLyogdGhpcyBzZXR0aW5nIGlzIHJlYWQtb25seSBmb3IgdGhlIGN4MjM0MXggc2luY2UgdGhlCiAJCSAgIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEUgcmVhbGx5IGRldGVybWluZXMgdGhlCiAJCSAgIE1QRUctMS8yIHNldHRpbmcgKi8KLQkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjdHJsKTsKKwkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJCSAgIFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEsCisJCQkJCSAgIFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzIsIDEsCisJCQkJCSAgIFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzIpOwogCQlpZiAoZXJyID09IDApCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvS2NvbmZpZwppbmRleCBlNjBiZDMxLi44YzFiN2ZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKQEAgLTE1LDYgKzE1LDcgQEAKIAlzZWxlY3QgRFZCX1M1SDE0MDkgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1M1SDE0MTEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0xHRFQzMzBYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQogCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFEVkJfRkVfQ1VTVE9NSVpFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFEVkJfRkVfQ1VTVE9NSVpFCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jCmluZGV4IDdiMGU4YzAuLjM5NWMxMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bWVkaWEvY3gyMzQxeC5oPgogCiAjaW5jbHVkZSAiY3gyMzg4NS5oIgotI2luY2x1ZGUgIm1lZGlhL2N4MjM0MXguaCIKIAogI2RlZmluZSBDWDIzODg1X0ZJUk1fSU1BR0VfU0laRSAzNzY4MzYKICNkZWZpbmUgQ1gyMzg4NV9GSVJNX0lNQUdFX05BTUUgInY0bC1jeDIzODg1LWVuYy5mdyIKQEAgLTYzMiw3ICs2MzEsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIE1QRUcgZW5jb2RlciBBUEkgKi8KLWNoYXIgKmNtZF90b19zdHIoaW50IGNtZCkKK3N0YXRpYyBjaGFyICpjbWRfdG9fc3RyKGludCBjbWQpCiB7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIENYMjM0MVhfRU5DX1BJTkdfRlc6CkBAIC0xNTgzLDYgKzE1ODIsNyBAQAogCiAJZHByaW50aygyLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCisJbG9ja19rZXJuZWwoKTsKIAlsaXN0X2Zvcl9lYWNoKGxpc3QsICZjeDIzODg1X2Rldmxpc3QpIHsKIAkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGN4MjM4ODVfZGV2LCBkZXZsaXN0KTsKIAkJaWYgKGgtPnY0bF9kZXZpY2UtPm1pbm9yID09IG1pbm9yKSB7CkBAIC0xNTkxLDEzICsxNTkxLDE3IEBACiAJCX0KIAl9CiAKLQlpZiAoZGV2ID09IE5VTEwpCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGZoKQorCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJZmgtPmRldiAgICAgID0gZGV2OwpAQCAtMTYwOCw2ICsxNjEyLDcgQEAKIAkJCSAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBjeDIzODg1X2J1ZmZlciksCiAJCQkgICAgZmgpOworCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKaW5kZXggYzM2ZDNmNi4uZGFjNWNjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bWVkaWEvY3gyNTg0MC5oPgogCiAjaW5jbHVkZSAiY3gyMzg4NS5oIgorI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGJvYXJkIGNvbmZpZyBpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzgsMTYgKzM5LDE2IEBACiAJCS5pbnB1dCAgICAgICAgICA9IHt7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0gMCwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFMiwKIAkJCS52bXV4ICAgPSAxLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT1NJVEUzLAogCQkJLnZtdXggICA9IDIsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTQsCiAJCQkudm11eCAgID0gMywKLQkJfX0sCisJCX0gfSwKIAl9LAogCVtDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwbHBdID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjE4MDBscCIsCkBAIC01NiwxOSArNTcsMTkgQEAKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4ZmYwMCwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfREVCVUcsCiAJCQkudm11eCAgID0gMCwKIAkJCS5ncGlvMCAgPSAweGZmMDEsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0gMSwKIAkJCS5ncGlvMCAgPSAweGZmMDIsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4ZmYwMiwKLQkJfX0sCisJCX0gfSwKIAl9LAogCVtDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwXSA9IHsKIAkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlIxODAwIiwKQEAgLTgzLDIwICs4NCwyMCBAQAogCQkJCQlDWDI1ODQwX1ZJTjVfQ0gyIHwKIAkJCQkJQ1gyNTg0MF9WSU4yX0NIMSwKIAkJCS5ncGlvMCAgPSAwLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICA9CUNYMjU4NDBfVklON19DSDMgfAogCQkJCQlDWDI1ODQwX1ZJTjRfQ0gyIHwKIAkJCQkJQ1gyNTg0MF9WSU42X0NIMSwKIAkJCS5ncGlvMCAgPSAwLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0JQ1gyNTg0MF9WSU43X0NIMyB8CiAJCQkJCUNYMjU4NDBfVklONF9DSDIgfAogCQkJCQlDWDI1ODQwX1ZJTjhfQ0gxIHwKIAkJCQkJQ1gyNTg0MF9TVklERU9fT04sCiAJCQkuZ3BpbzAgID0gMCwKLQkJfX0sCisJCX0gfSwKIAl9LAogCVtDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjUwXSA9IHsKIAkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlIxMjUwIiwKQEAgLTEwNSwxOSArMTA2LDE5IEBACiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMCwKIAkJCS5ncGlvMCAgPSAweGZmMDAsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0RFQlVHLAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHhmZjAxLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICA9IDEsCiAJCQkuZ3BpbzAgID0gMHhmZjAyLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0gMiwKIAkJCS5ncGlvMCAgPSAweGZmMDIsCi0JCX19LAorCQl9IH0sCiAJfSwKIAlbQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfRVhQXSA9IHsKIAkJLm5hbWUJCT0gIkRWaUNPIEZ1c2lvbkhEVFY1IEV4cHJlc3MiLApAQCAtMTQ4LDYgKzE0OSwxNSBAQAogCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKIAkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCiAJfSwKKwlbQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUxfRVhQXSA9IHsKKwkJLm5hbWUJCT0gIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgRHVhbCBFeHByZXNzIiwKKwkJLnBvcnRiCQk9IENYMjM4ODVfTVBFR19EVkIsCisJCS5wb3J0YwkJPSBDWDIzODg1X01QRUdfRFZCLAorCX0sCisJW0NYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IXSA9IHsKKwkJLm5hbWUJCT0gIkxlYWR0ZWsgV2luZmFzdCBQeERWUjMyMDAgSCIsCisJCS5wb3J0YwkJPSBDWDIzODg1X01QRUdfRFZCLAorCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4MjM4ODVfYmNvdW50ID0gQVJSQVlfU0laRShjeDIzODg1X2JvYXJkcyk7CiAKQEAgLTE1OSw0MyArMTY5LDQzIEBACiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDM0MDAsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX1VOS05PV04sCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3NjAwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMGxwLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4NzgwMCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3ODAxLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMCwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDc4MDksCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4NzkxMSwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgxOGFjLAogCQkuc3ViZGV2aWNlID0gMHhkNTAwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfRVhQLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4Nzc5MCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDBRLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4Nzc5NywKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDBRLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4NzcxMCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3NzE3LAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMCwKQEAgLTIxNSwxMCArMjI1LDE4IEBACiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDgwMTAsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNDAwLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MThhYywKIAkJLnN1YmRldmljZSA9IDB4ZDYxOCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0RVQUxfRVhQLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MThhYywKKwkJLnN1YmRldmljZSA9IDB4ZGI3OCwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMX0VYUCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDEwN2QsCisJCS5zdWJkZXZpY2UgPSAweDY2ODEsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSCwKIAl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBjeDIzODg1X2lkY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfc3ViaWRzKTsKQEAgLTIyOSwyMyArMjQ3LDI1IEBACiAKIAlpZiAoMCA9PSBkZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciAmJgogCSAgICAwID09IGRldi0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlKSB7Ci0JCXByaW50aygiJXM6IFlvdXIgYm9hcmQgaGFzIG5vIHZhbGlkIFBDSWUgU3Vic3lzdGVtIElEIGFuZCB0aHVzIGNhbid0XG4iCi0JCSAgICAgICAiJXM6IGJlIGF1dG9kZXRlY3RlZC4gIFBsZWFzZSBwYXNzIGNhcmQ9PG4+IGluc21vZCBvcHRpb24gdG9cbiIKLQkJICAgICAgICIlczogd29ya2Fyb3VuZCB0aGF0LiAgUmVkaXJlY3QgY29tcGxhaW50cyB0byB0aGUgdmVuZG9yIG9mXG4iCi0JCSAgICAgICAiJXM6IHRoZSBUViBjYXJkLiAgQmVzdCByZWdhcmRzLFxuIgorCQlwcmludGsoS0VSTl9JTkZPCisJCQkiJXM6IEJvYXJkIGhhcyBubyB2YWxpZCBQQ0llIFN1YnN5c3RlbSBJRCBhbmQgY2FuJ3RcbiIKKwkJICAgICAgICIlczogYmUgYXV0b2RldGVjdGVkLiBQYXNzIGNhcmQ9PG4+IGluc21vZCBvcHRpb25cbiIKKwkJICAgICAgICIlczogdG8gd29ya2Fyb3VuZCB0aGF0LiBSZWRpcmVjdCBjb21wbGFpbnRzIHRvIHRoZVxuIgorCQkgICAgICAgIiVzOiB2ZW5kb3Igb2YgdGhlIFRWIGNhcmQuICBCZXN0IHJlZ2FyZHMsXG4iCiAJCSAgICAgICAiJXM6ICAgICAgICAgLS0gdHV4XG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPm5hbWUsIGRldi0+bmFtZSwgZGV2LT5uYW1lLCBkZXYtPm5hbWUpOwogCX0gZWxzZSB7Ci0JCXByaW50aygiJXM6IFlvdXIgYm9hcmQgaXNuJ3Qga25vd24gKHlldCkgdG8gdGhlIGRyaXZlci4gIFlvdSBjYW5cbiIKLQkJICAgICAgICIlczogdHJ5IHRvIHBpY2sgb25lIG9mIHRoZSBleGlzdGluZyBjYXJkIGNvbmZpZ3MgdmlhXG4iCisJCXByaW50ayhLRVJOX0lORk8KKwkJCSIlczogWW91ciBib2FyZCBpc24ndCBrbm93biAoeWV0KSB0byB0aGUgZHJpdmVyLlxuIgorCQkgICAgICAgIiVzOiBUcnkgdG8gcGljayBvbmUgb2YgdGhlIGV4aXN0aW5nIGNhcmQgY29uZmlncyB2aWFcbiIKIAkJICAgICAgICIlczogY2FyZD08bj4gaW5zbW9kIG9wdGlvbi4gIFVwZGF0aW5nIHRvIHRoZSBsYXRlc3RcbiIKIAkJICAgICAgICIlczogdmVyc2lvbiBtaWdodCBoZWxwIGFzIHdlbGwuXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPm5hbWUsIGRldi0+bmFtZSwgZGV2LT5uYW1lKTsKIAl9Ci0JcHJpbnRrKCIlczogSGVyZSBpcyBhIGxpc3Qgb2YgdmFsaWQgY2hvaWNlcyBmb3IgdGhlIGNhcmQ9PG4+IGluc21vZCBvcHRpb246XG4iLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiBIZXJlIGlzIGEgbGlzdCBvZiB2YWxpZCBjaG9pY2VzIGZvciB0aGUgY2FyZD08bj4gaW5zbW9kIG9wdGlvbjpcbiIsCiAJICAgICAgIGRldi0+bmFtZSk7CiAJZm9yIChpID0gMDsgaSA8IGN4MjM4ODVfYmNvdW50OyBpKyspCi0JCXByaW50aygiJXM6ICAgIGNhcmQ9JWQgLT4gJXNcbiIsCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiAgICBjYXJkPSVkIC0+ICVzXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBpLCBjeDIzODg1X2JvYXJkc1tpXS5uYW1lKTsKIH0KIApAQCAtMjUzLDExICsyNzMsMTEgQEAKIHsKIAlzdHJ1Y3QgdHZlZXByb20gdHY7CiAKLQl0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9nKCZkZXYtPmkyY19idXNbMF0uaTJjX2NsaWVudCwgJnR2LCBlZXByb21fZGF0YSk7CisJdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmZGV2LT5pMmNfYnVzWzBdLmkyY19jbGllbnQsICZ0diwKKwkJZWVwcm9tX2RhdGEpOwogCiAJLyogTWFrZSBzdXJlIHdlIHN1cHBvcnQgdGhlIGJvYXJkIG1vZGVsICovCi0Jc3dpdGNoICh0di5tb2RlbCkKLQl7CisJc3dpdGNoICh0di5tb2RlbCkgewogCWNhc2UgNzEwMDk6CiAJCS8qIFdpblRWLUhWUjEyMDAgKFBDSWUsIFJldGFpbCwgZnVsbCBoZWlnaHQpCiAJCSAqIERWQi1UIGFuZCBiYXNpYyBhbmFsb2cgKi8KQEAgLTI4NSwyMSArMzA1LDUxIEBACiAJY2FzZSA3MTk5OToKIAkJLyogV2luVFYtSFZSMTIwMCAoUENJZSwgT0VNLCBmdWxsIGhlaWdodCkKIAkJICogRFZCLVQgYW5kIGJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzY2MDE6IC8qIFdpblRWLUhWUjE4MDBscCAoUENJZSwgUmV0YWlsLCBObyBJUiwgRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KLQljYXNlIDc3MDAxOiAvKiBXaW5UVi1IVlIxNTAwIChFeHByZXNzIENhcmQsIE9FTSwgTm8gSVIsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzcwMTE6IC8qIFdpblRWLUhWUjE1MDAgKEV4cHJlc3MgQ2FyZCwgUmV0YWlsLCBObyBJUiwgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3NzA0MTogLyogV2luVFYtSFZSMTUwMFEgKEV4cHJlc3MgQ2FyZCwgT0VNLCBObyBJUiwgQVRTQy9RQU0gYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzcwNTE6IC8qIFdpblRWLUhWUjE1MDBRIChFeHByZXNzIENhcmQsIFJldGFpbCwgTm8gSVIsIEFUU0MvUUFNIGFuZCBCYXNpYyBhbmFsb2cgKi8KLQljYXNlIDc4MDExOiAvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBSZXRhaWwsIDMuNW1tIGluLCBJUiwgTm8gRk0sIER1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCi0JY2FzZSA3ODUwMTogLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBSQ0EgaW4sIE5vIElSLCBGTSwgRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KLQljYXNlIDc4NTIxOiAvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBPRU0sIFJDQSBpbiwgTm8gSVIsIEZNLCBEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLwotCWNhc2UgNzg1MzE6IC8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgUkNBIGluLCBObyBJUiwgTm8gRk0sIER1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCi0JY2FzZSA3ODYzMTogLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBObyBJUiwgTm8gRk0sIER1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCi0JY2FzZSA3OTAwMTogLyogV2luVFYtSFZSMTI1MCAoUENJZSwgUmV0YWlsLCBJUiwgZnVsbCBoZWlnaHQsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzkxMDE6IC8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIFJldGFpbCwgSVIsIGhhbGYgaGVpZ2h0LCBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KLQljYXNlIDc5NTYxOiAvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBPRU0sIE5vIElSLCBoYWxmIGhlaWdodCwgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3OTU3MTogLyogV2luVFYtSFZSMTI1MCAoUENJZSwgT0VNLCBObyBJUiwgZnVsbCBoZWlnaHQsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzk2NzE6IC8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIE9FTSwgTm8gSVIsIGhhbGYgaGVpZ2h0LCBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc2NjAxOgorCQkvKiBXaW5UVi1IVlIxODAwbHAgKFBDSWUsIFJldGFpbCwgTm8gSVIsIER1YWwKKwkJCWNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLworCWNhc2UgNzcwMDE6CisJCS8qIFdpblRWLUhWUjE1MDAgKEV4cHJlc3MgQ2FyZCwgT0VNLCBObyBJUiwgQVRTQworCQkJYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzcwMTE6CisJCS8qIFdpblRWLUhWUjE1MDAgKEV4cHJlc3MgQ2FyZCwgUmV0YWlsLCBObyBJUiwgQVRTQworCQkJYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzcwNDE6CisJCS8qIFdpblRWLUhWUjE1MDBRIChFeHByZXNzIENhcmQsIE9FTSwgTm8gSVIsIEFUU0MvUUFNCisJCQlhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3NzA1MToKKwkJLyogV2luVFYtSFZSMTUwMFEgKEV4cHJlc3MgQ2FyZCwgUmV0YWlsLCBObyBJUiwgQVRTQy9RQU0KKwkJCWFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc4MDExOgorCQkvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBSZXRhaWwsIDMuNW1tIGluLCBJUiwgTm8gRk0sCisJCQlEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLworCWNhc2UgNzg1MDE6CisJCS8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgUkNBIGluLCBObyBJUiwgRk0sCisJCQlEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLworCWNhc2UgNzg1MjE6CisJCS8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgUkNBIGluLCBObyBJUiwgRk0sCisJCQlEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLworCWNhc2UgNzg1MzE6CisJCS8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgUkNBIGluLCBObyBJUiwgTm8gRk0sCisJCQlEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLworCWNhc2UgNzg2MzE6CisJCS8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgTm8gSVIsIE5vIEZNLAorCQkJRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KKwljYXNlIDc5MDAxOgorCQkvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBSZXRhaWwsIElSLCBmdWxsIGhlaWdodCwKKwkJCUFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzkxMDE6CisJCS8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIFJldGFpbCwgSVIsIGhhbGYgaGVpZ2h0LAorCQkJQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3OTU2MToKKwkJLyogV2luVFYtSFZSMTI1MCAoUENJZSwgT0VNLCBObyBJUiwgaGFsZiBoZWlnaHQsCisJCQlBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc5NTcxOgorCQkvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBPRU0sIE5vIElSLCBmdWxsIGhlaWdodCwKKwkJIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzk2NzE6CisJCS8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIE9FTSwgTm8gSVIsIGhhbGYgaGVpZ2h0LAorCQkJQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCiAJY2FzZSA4MDAxOToKIAkJLyogV2luVFYtSFZSMTQwMCAoRXhwcmVzcyBDYXJkLCBSZXRhaWwsIElSLAogCQkgKiBEVkItVCBhbmQgQmFzaWMgYW5hbG9nICovCkBAIC0zMTEsNyArMzYxLDggQEAKIAkJICogRFZCLVQgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCIlczogd2FybmluZzogdW5rbm93biBoYXVwcGF1Z2UgbW9kZWwgIyVkXG4iLCBkZXYtPm5hbWUsIHR2Lm1vZGVsKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHdhcm5pbmc6IHVua25vd24gaGF1cHBhdWdlIG1vZGVsICMlZFxuIiwKKwkJCWRldi0+bmFtZSwgdHYubW9kZWwpOwogCQlicmVhazsKIAl9CiAKQEAgLTMxOSwzNyArMzcwLDM3IEBACiAJCQlkZXYtPm5hbWUsIHR2Lm1vZGVsKTsKIH0KIAotLyogVHVuZXIgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGN4MjM4ODUgYm9hcmRzLiBDdXJyZW50bHkgb25seSBuZWVkZWQKLSAqIGZvciBIVlIxNTAwUSwgd2hpY2ggaGFzIGFuIHhjNTAwMCB0dW5lci4KLSAqLwotaW50IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHJpdiwgaW50IGNvbW1hbmQsIGludCBhcmcpCitpbnQgY3gyMzg4NV90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tcG9uZW50LCBpbnQgY29tbWFuZCwgaW50IGFyZykKIHsKLQlzdHJ1Y3QgY3gyMzg4NV9pMmMgKmJ1cyA9IHByaXY7Ci0Jc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBidXMtPmRldjsKKwlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSBwcml2OworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OwogCXUzMiBiaXRtYXNrID0gMDsKIAorCWlmIChjb21tYW5kID09IFhDMjAyOF9SRVNFVF9DTEspCisJCXJldHVybiAwOworCiAJaWYgKGNvbW1hbmQgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IFVua25vd24gY29tbWFuZCAweCV4LlxuIiwKIAkJCV9fZnVuY19fLCBjb21tYW5kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3dpdGNoKGRldi0+Ym9hcmQpIHsKKwlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE0MDA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMFE6Ci0JCS8qIFR1bmVyIFJlc2V0IENvbW1hbmQgZnJvbSB4YzUwMDAgKi8KLQkJaWYgKGNvbW1hbmQgPT0gMCkKLQkJCWJpdG1hc2sgPSAweDA0OworCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CisJCS8qIFR1bmVyIFJlc2V0IENvbW1hbmQgKi8KKwkJYml0bWFzayA9IDB4MDQ7CiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzdfRFVBTF9FWFA6Ci0JCWlmIChjb21tYW5kID09IDApIHsKLQotCQkJLyogVHdvIGlkZW50aWNhbCB0dW5lcnMgb24gdHdvIGRpZmZlcmVudCBpMmMgYnVzZXMsCi0JCQkgKiB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjb3JyZWN0IGdwaW8uICovCi0JCQlpZiAoYnVzLT5uciA9PSAwKQotCQkJCWJpdG1hc2sgPSAweDAxOwotCQkJZWxzZSBpZiAoYnVzLT5uciA9PSAxKQotCQkJCWJpdG1hc2sgPSAweDA0OwotCQl9CisJY2FzZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTF9FWFA6CisJCS8qIFR3byBpZGVudGljYWwgdHVuZXJzIG9uIHR3byBkaWZmZXJlbnQgaTJjIGJ1c2VzLAorCQkgKiB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjb3JyZWN0IGdwaW8uICovCisJCWlmIChwb3J0LT5uciA9PSAwKQorCQkJYml0bWFzayA9IDB4MDE7CisJCWVsc2UgaWYgKHBvcnQtPm5yID09IDEpCisJCQliaXRtYXNrID0gMHgwNDsKIAkJYnJlYWs7CiAJfQogCkBAIC0zNjUsNyArNDE2LDcgQEAKIAogdm9pZCBjeDIzODg1X2dwaW9fc2V0dXAoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCiB7Ci0Jc3dpdGNoKGRldi0+Ym9hcmQpIHsKKwlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTA6CiAJCS8qIEdQSU8tMCBjeDI0MjI3IGRlbW9kdWxhdG9yIHJlc2V0ICovCiAJCWN4X3NldChHUDBfSU8sIDB4MDAwMTAwMDEpOyAvKiBCcmluZyB0aGUgcGFydCBvdXQgb2YgcmVzZXQgKi8KQEAgLTQ2NSw2ICs1MTYsMzIgQEAKIAkJbWRlbGF5KDIwKTsKIAkJY3hfc2V0KEdQMF9JTywgMHgwMDBmMDAwZik7CiAJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUxfRVhQOgorCQkvKiBHUElPLTAgcG9ydGIgeGMzMDI4IHJlc2V0ICovCisJCS8qIEdQSU8tMSBwb3J0YiB6bDEwMzUzIHJlc2V0ICovCisJCS8qIEdQSU8tMiBwb3J0YyB4YzMwMjggcmVzZXQgKi8KKwkJLyogR1BJTy0zIHBvcnRjIHpsMTAzNTMgcmVzZXQgKi8KKworCQkvKiBQdXQgdGhlIHBhcnRzIGludG8gcmVzZXQgYW5kIGJhY2sgKi8KKwkJY3hfc2V0KEdQMF9JTywgMHgwMDBmMDAwMCk7CisJCW1kZWxheSgyMCk7CisJCWN4X2NsZWFyKEdQMF9JTywgMHgwMDAwMDAwZik7CisJCW1kZWxheSgyMCk7CisJCWN4X3NldChHUDBfSU8sIDB4MDAwZjAwMGYpOworCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgorCQkvKiBHUElPLTIgIHhjMzAyOCB0dW5lciByZXNldCAqLworCisJCS8qIFRoZSBmb2xsb3dpbmcgR1BJTydzIGFyZSBvbiB0aGUgaW50ZXJuYWwgQVZDb3JlIChjeDI1ODQwKSAqLworCQkvKiBHUElPLT8gIHpsMTAzNTMgZGVtb2QgcmVzZXQgKi8KKworCQkvKiBQdXQgdGhlIHBhcnRzIGludG8gcmVzZXQgYW5kIGJhY2sgKi8KKwkJY3hfc2V0KEdQMF9JTywgMHgwMDA0MDAwMCk7CisJCW1kZWxheSgyMCk7CisJCWN4X2NsZWFyKEdQMF9JTywgMHgwMDAwMDAwNCk7CisJCW1kZWxheSgyMCk7CisJCWN4X3NldChHUDBfSU8sIDB4MDAwNDAwMDQpOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTQ3OSw2ICs1NTYsOSBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTQwMDoKIAkJLyogRklYTUU6IEltcGxlbWVudCBtZSAqLwogCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMX0VYUDoKKwkJcmVxdWVzdF9tb2R1bGUoImlyLWtiZC1pMmMiKTsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01MTYsNiArNTk2LDcgQEAKIAogCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzdfRFVBTF9FWFA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTF9FWFA6CiAJCXRzMi0+Z2VuX2N0cmxfdmFsICA9IDB4YzsgLyogU2VyaWFsIGJ1cyArIHB1bmN0dXJlZCBjbG9jayAqLwogCQl0czItPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KIAkJdHMyLT5zcmNfc2VsX3ZhbCAgID0gQ1gyMzg4NV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU87CkBAIC01NDgsNiArNjI5LDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyMDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNzAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTQwMDoKKwljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgogCWRlZmF1bHQ6CiAJCXRzMi0+Z2VuX2N0cmxfdmFsICA9IDB4YzsgLyogU2VyaWFsIGJ1cyArIHB1bmN0dXJlZCBjbG9jayAqLwogCQl0czItPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KQEAgLTU2MSwxNiArNjQzLDEwIEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMGxwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTcwMDoKKwljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgogCQlyZXF1ZXN0X21vZHVsZSgiY3gyNTg0MCIpOwogCQlicmVhazsKIAl9CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqIGthdGU6IGVvbCAidW5peCI7IGluZGVudC13aWR0aCAzOyByZW1vdmUtdHJhaWxpbmctc3BhY2Ugb247IHJlcGxhY2UtdHJhaWxpbmctc3BhY2Utc2F2ZSBvbjsgdGFiLXdpZHRoIDg7IHJlcGxhY2UtdGFicyBvZmY7IHNwYWNlLWluZGVudCBvZmY7IG1peGVkLWluZGVudCBvZmYKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCmluZGV4IDI1ZmIwOTkuLjhmNmZiMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKQEAgLTM3LDEyICszNywxMiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOwotbW9kdWxlX3BhcmFtKGRlYnVnLGludCwwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNhcmRbXSAgPSB7WzAgLi4uIChDWDIzODg1X01BWEJPQVJEUyAtIDEpXSA9IFVOU0VUIH07CiBtb2R1bGVfcGFyYW1fYXJyYXkoY2FyZCwgIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGNhcmQsImNhcmQgdHlwZSIpOworTU9EVUxFX1BBUk1fREVTQyhjYXJkLCAiY2FyZCB0eXBlIik7CiAKICNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pXAogCWRvIHsgaWYgKGRlYnVnID49IGxldmVsKVwKQEAgLTM2NCwxMyArMzY0LDEyIEBACiAJCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKIAkJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKIAl9Ci0JaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkKIAkJZGVsX3RpbWVyKCZxLT50aW1lb3V0KTsKLQl9IGVsc2UgeworCWVsc2UKIAkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzICsgQlVGRkVSX1RJTUVPVVQpOwotCX0KIAlpZiAoYmMgIT0gMSkKLQkJcHJpbnRrKCIlczogJWQgYnVmZmVycyBoYW5kbGVkIChzaG91bGQgYmUgMSlcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlZCBidWZmZXJzIGhhbmRsZWQgKHNob3VsZCBiZSAxKVxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBiYyk7CiB9CiAKQEAgLTM4MSw4ICszODAsNyBAQAogCXVuc2lnbmVkIGludCBpLCBsaW5lczsKIAl1MzIgY2R0OwogCi0JaWYgKGNoLT5jbWRzX3N0YXJ0ID09IDApCi0JeworCWlmIChjaC0+Y21kc19zdGFydCA9PSAwKSB7CiAJCWRwcmludGsoMSwgIiVzKCkgRXJhc2luZyBjaGFubmVsIFslc11cbiIsIF9fZnVuY19fLAogCQkJY2gtPm5hbWUpOwogCQljeF93cml0ZShjaC0+cHRyMV9yZWcsIDApOwpAQCAtNDE4LDE1ICs0MTYsMTUgQEAKIAogCS8qIHdyaXRlIENNRFMgKi8KIAlpZiAoY2gtPmp1bXBvbmx5KQotCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArICAwLCA4KTsKKwkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAwLCA4KTsKIAllbHNlCi0JCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgIDAsIHJpc2MpOworCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDAsIHJpc2MpOwogCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgIDQsIDApOyAvKiA2NCBiaXRzIDYzLTMyICovCiAJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAgOCwgY2R0KTsKIAljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDEyLCAobGluZXMqMTYpID4+IDMpOwogCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMTYsIGNoLT5jdHJsX3N0YXJ0KTsKIAlpZiAoY2gtPmp1bXBvbmx5KQotCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDIwLCAweDgwMDAwMDAwIHwgKDY0ID4+IDIpICk7CisJCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMjAsIDB4ODAwMDAwMDAgfCAoNjQgPj4gMikpOwogCWVsc2UKIAkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAyMCwgNjQgPj4gMik7CiAJZm9yIChpID0gMjQ7IGkgPCA4MDsgaSArPSA0KQpAQCAtNDM2LDkgKzQzNCw5IEBACiAJY3hfd3JpdGUoY2gtPnB0cjFfcmVnLCBjaC0+Zmlmb19zdGFydCk7CiAJY3hfd3JpdGUoY2gtPnB0cjJfcmVnLCBjZHQpOwogCWN4X3dyaXRlKGNoLT5jbnQyX3JlZywgKGxpbmVzKjE2KSA+PiAzKTsKLQljeF93cml0ZShjaC0+Y250MV9yZWcsIChicGwgPj4gMykgLTEpOworCWN4X3dyaXRlKGNoLT5jbnQxX3JlZywgKGJwbCA+PiAzKSAtIDEpOwogCi0JZHByaW50aygyLCJbYnJpZGdlICVkXSBzcmFtIHNldHVwICVzOiBicGw9JWQgbGluZXM9JWRcbiIsCisJZHByaW50aygyLCAiW2JyaWRnZSAlZF0gc3JhbSBzZXR1cCAlczogYnBsPSVkIGxpbmVzPSVkXG4iLAogCQlkZXYtPmJyaWRnZSwKIAkJY2gtPm5hbWUsCiAJCWJwbCwKQEAgLTQ2OSw0MyArNDY3LDQzIEBACiAJdTMyIHJpc2M7CiAJdW5zaWduZWQgaW50IGksIGosIG47CiAKLQlwcmludGsoIiVzOiAlcyAtIGRtYSBjaGFubmVsIHN0YXR1cyBkdW1wXG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcyAtIGRtYSBjaGFubmVsIHN0YXR1cyBkdW1wXG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGNoLT5uYW1lKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuYW1lKTsgaSsrKQotCQlwcmludGsoIiVzOiAgIGNtZHM6ICUtMTVzOiAweCUwOHhcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgIGNtZHM6ICUtMTVzOiAweCUwOHhcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIG5hbWVbaV0sCiAJCSAgICAgICBjeF9yZWFkKGNoLT5jbWRzX3N0YXJ0ICsgNCppKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXJpc2MgPSBjeF9yZWFkKGNoLT5jbWRzX3N0YXJ0ICsgNCAqIChpICsgMTQpKTsKLQkJcHJpbnRrKCIlczogICByaXNjJWQ6ICIsIGRldi0+bmFtZSwgaSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgIHJpc2MlZDogIiwgZGV2LT5uYW1lLCBpKTsKIAkJY3gyMzg4NV9yaXNjX2RlY29kZShyaXNjKTsKIAl9CiAJZm9yIChpID0gMDsgaSA8ICg2NCA+PiAyKTsgaSArPSBuKSB7CiAJCXJpc2MgPSBjeF9yZWFkKGNoLT5jdHJsX3N0YXJ0ICsgNCAqIGkpOwogCQkvKiBObyBjb25zaWRlcmF0aW9uIGZvciBiaXRzIDYzLTMyICovCiAKLQkJcHJpbnRrKCIlczogICAoMHglMDh4KSBpcSAleDogIiwgZGV2LT5uYW1lLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogICAoMHglMDh4KSBpcSAleDogIiwgZGV2LT5uYW1lLAogCQkgICAgICAgY2gtPmN0cmxfc3RhcnQgKyA0ICogaSwgaSk7CiAJCW4gPSBjeDIzODg1X3Jpc2NfZGVjb2RlKHJpc2MpOwogCQlmb3IgKGogPSAxOyBqIDwgbjsgaisrKSB7CiAJCQlyaXNjID0gY3hfcmVhZChjaC0+Y3RybF9zdGFydCArIDQgKiAoaSArIGopKTsKLQkJCXByaW50aygiJXM6ICAgaXEgJXg6IDB4JTA4eCBbIGFyZyAjJWQgXVxuIiwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgIGlxICV4OiAweCUwOHggWyBhcmcgIyVkIF1cbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBpK2osIHJpc2MsIGopOwogCQl9CiAJfQogCi0JcHJpbnRrKCIlczogZmlmbzogMHglMDh4IC0+IDB4JXhcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZpZm86IDB4JTA4eCAtPiAweCV4XG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGNoLT5maWZvX3N0YXJ0LCBjaC0+Zmlmb19zdGFydCtjaC0+Zmlmb19zaXplKTsKLQlwcmludGsoIiVzOiBjdHJsOiAweCUwOHggLT4gMHgleFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY3RybDogMHglMDh4IC0+IDB4JXhcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgY2gtPmN0cmxfc3RhcnQsIGNoLT5jdHJsX3N0YXJ0ICsgNioxNik7Ci0JcHJpbnRrKCIlczogICBwdHIxX3JlZzogMHglMDh4XG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgIHB0cjFfcmVnOiAweCUwOHhcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgY3hfcmVhZChjaC0+cHRyMV9yZWcpKTsKLQlwcmludGsoIiVzOiAgIHB0cjJfcmVnOiAweCUwOHhcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgcHRyMl9yZWc6IDB4JTA4eFxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBjeF9yZWFkKGNoLT5wdHIyX3JlZykpOwotCXByaW50aygiJXM6ICAgY250MV9yZWc6IDB4JTA4eFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogICBjbnQxX3JlZzogMHglMDh4XG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGN4X3JlYWQoY2gtPmNudDFfcmVnKSk7Ci0JcHJpbnRrKCIlczogICBjbnQyX3JlZzogMHglMDh4XG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgIGNudDJfcmVnOiAweCUwOHhcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgY3hfcmVhZChjaC0+Y250Ml9yZWcpKTsKIH0KIApAQCAtNTE1LDEzICs1MTMsMTMgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBvcnQtPmRldjsKIAl1bnNpZ25lZCBpbnQgaSwgaiwgbjsKIAotCXByaW50aygiJXM6IHJpc2MgZGlzYXNtOiAlcCBbZG1hPTB4JTA4bHhdXG4iLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiByaXNjIGRpc2FzbTogJXAgW2RtYT0weCUwOGx4XVxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCByaXNjLT5jcHUsICh1bnNpZ25lZCBsb25nKXJpc2MtPmRtYSk7CiAJZm9yIChpID0gMDsgaSA8IChyaXNjLT5zaXplID4+IDIpOyBpICs9IG4pIHsKLQkJcHJpbnRrKCIlczogICAlMDRkOiAiLCBkZXYtPm5hbWUsIGkpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogICAlMDRkOiAiLCBkZXYtPm5hbWUsIGkpOwogCQluID0gY3gyMzg4NV9yaXNjX2RlY29kZShsZTMyX3RvX2NwdShyaXNjLT5jcHVbaV0pKTsKIAkJZm9yIChqID0gMTsgaiA8IG47IGorKykKLQkJCXByaW50aygiJXM6ICAgJTA0ZDogMHglMDh4IFsgYXJnICMlZCBdXG4iLAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICAgJTA0ZDogMHglMDh4IFsgYXJnICMlZCBdXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgaSArIGosIHJpc2MtPmNwdVtpICsgal0sIGopOwogCQlpZiAocmlzYy0+Y3B1W2ldID09IGNwdV90b19sZTMyKFJJU0NfSlVNUCkpCiAJCQlicmVhazsKQEAgLTYwMCw3ICs1OTgsNyBAQAogCSAqIHdoZW4gRE1BIGJlZ2lucyBpZiBSRFJfVExDVEwwIGJpdDQgaXMgbm90IGNsZWFyZWQuIEl0IGRvZXMgbm90CiAJICogb2NjdXIgb24gdGhlIGN4MjM4ODcgYnJpZGdlLgogCSAqLwotCWlmKGRldi0+YnJpZGdlID09IENYMjM4ODVfQlJJREdFXzg4NSkKKwlpZiAoZGV2LT5icmlkZ2UgPT0gQ1gyMzg4NV9CUklER0VfODg1KQogCQljeF9jbGVhcihSRFJfVExDVEwwLCAxIDw8IDQpOwogCiAJcmV0dXJuIDA7CkBAIC02MDgsMTMgKzYwNiwxMyBAQAogCiBzdGF0aWMgaW50IGdldF9yZXNvdXJjZXMoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCiB7Ci0JaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksMCksCi0JCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwwKSwKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMCksCisJCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwgMCksCiAJCQkgICAgICAgZGV2LT5uYW1lKSkKIAkJcmV0dXJuIDA7CiAKIAlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgTU1JTyBtZW1vcnkgQCAweCVsbHhcbiIsCi0JCWRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksMCkpOworCQlkZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAwKSk7CiAKIAlyZXR1cm4gLUVCVVNZOwogfQpAQCAtNjIzLDcgKzYyMSw4IEBACiBpbnQgY3gyMzg4NV9yaXNjX3N0b3BwZXIoc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IGJ0Y3hfcmlzY21lbSAqcmlzYywKIAkJCQl1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKIAotc3RhdGljIGludCBjeDIzODg1X2luaXRfdHNwb3J0KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCBzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQsIGludCBwb3J0bm8pCitzdGF0aWMgaW50IGN4MjM4ODVfaW5pdF90c3BvcnQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsCisJc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0LCBpbnQgcG9ydG5vKQogewogCWRwcmludGsoMSwgIiVzKHBvcnRubz0lZClcbiIsIF9fZnVuY19fLCBwb3J0bm8pOwogCkBAIC02NDMsNyArNjQyLDE4IEBACiAJcG9ydC0+bXBlZ3EudGltZW91dC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcG9ydDsKIAlpbml0X3RpbWVyKCZwb3J0LT5tcGVncS50aW1lb3V0KTsKIAotCXN3aXRjaChwb3J0bm8pIHsKKwltdXRleF9pbml0KCZwb3J0LT5mcm9udGVuZHMubG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnBvcnQtPmZyb250ZW5kcy5mZWxpc3QpOworCXBvcnQtPmZyb250ZW5kcy5hY3RpdmVfZmVfaWQgPSAwOworCisJLyogVGhpcyBzaG91bGQgYmUgaGFyZGNvZGVkIGFsbG93IGEgc2luZ2xlIGZyb250ZW5kCisJICogYXR0YWNobWVudCB0byB0aGlzIHRzcG9ydCwga2VlcGluZyB0aGUgLWR2Yi5jCisJICogY29kZSBjbGVhbiBhbmQgc2FmZS4KKwkgKi8KKwlpZiAoIXBvcnQtPm51bV9mcm9udGVuZHMpCisJCXBvcnQtPm51bV9mcm9udGVuZHMgPSAxOworCisJc3dpdGNoIChwb3J0bm8pIHsKIAljYXNlIDE6CiAJCXBvcnQtPnJlZ19ncGNudCAgICAgICAgICA9IFZJRF9CX0dQQ05UOwogCQlwb3J0LT5yZWdfZ3BjbnRfY3RsICAgICAgPSBWSURfQl9HUENOVF9DVEw7CkBAIC03NDQsMTMgKzc1NCwxMyBAQAogCW11dGV4X3VubG9jaygmZGV2bGlzdCk7CiAKIAkvKiBDb25maWd1cmUgdGhlIGludGVybmFsIG1lbW9yeSAqLwotCWlmKGRldi0+cGNpLT5kZXZpY2UgPT0gMHg4ODgwKSB7CisJaWYgKGRldi0+cGNpLT5kZXZpY2UgPT0gMHg4ODgwKSB7CiAJCWRldi0+YnJpZGdlID0gQ1gyMzg4NV9CUklER0VfODg3OwogCQkvKiBBcHBseSBhIHNlbnNpYmxlIGNsb2NrIGZyZXF1ZW5jeSBmb3IgdGhlIFBDSWUgYnJpZGdlICovCiAJCWRldi0+Y2xrX2ZyZXEgPSAyNTAwMDAwMDsKIAkJZGV2LT5zcmFtX2NoYW5uZWxzID0gY3gyMzg4N19zcmFtX2NoYW5uZWxzOwogCX0gZWxzZQotCWlmKGRldi0+cGNpLT5kZXZpY2UgPT0gMHg4ODUyKSB7CisJaWYgKGRldi0+cGNpLT5kZXZpY2UgPT0gMHg4ODUyKSB7CiAJCWRldi0+YnJpZGdlID0gQ1gyMzg4NV9CUklER0VfODg1OwogCQkvKiBBcHBseSBhIHNlbnNpYmxlIGNsb2NrIGZyZXF1ZW5jeSBmb3IgdGhlIFBDSWUgYnJpZGdlICovCiAJCWRldi0+Y2xrX2ZyZXEgPSAyODAwMDAwMDsKQEAgLTgzMSw4ICs4NDEsOCBAQAogCX0KIAogCS8qIFBDSWUgc3R1ZmYgKi8KLQlkZXYtPmxtbWlvID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksMCksCi0JCQkgICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksMCkpOworCWRldi0+bG1taW8gPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwgMCksCisJCQkgICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksIDApKTsKIAogCWRldi0+Ym1taW8gPSAodTggX19pb21lbSAqKWRldi0+bG1taW87CiAKQEAgLTg2Miw3ICs4NzIsNyBAQAogCWN4MjM4ODVfaTJjX3JlZ2lzdGVyKCZkZXYtPmkyY19idXNbMV0pOwogCWN4MjM4ODVfaTJjX3JlZ2lzdGVyKCZkZXYtPmkyY19idXNbMl0pOwogCWN4MjM4ODVfY2FyZF9zZXR1cChkZXYpOwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cyAoJmRldi0+aTJjX2J1c1swXSwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOworCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzBdLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CiAJY3gyMzg4NV9pcl9pbml0KGRldik7CiAKIAlpZiAoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGEgPT0gQ1gyMzg4NV9BTkFMT0dfVklERU8pIHsKQEAgLTkwOCw4ICs5MTgsOCBAQAogCiBzdGF0aWMgdm9pZCBjeDIzODg1X2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KQogewotCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksMCksCi0JCQkgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLDApKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAwKSwKKwkJCSAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksIDApKTsKIAogCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5yZWZjb3VudCkpCiAJCXJldHVybjsKQEAgLTkzNiw3ICs5NDYsNyBAQAogCWlvdW5tYXAoZGV2LT5sbW1pbyk7CiB9CiAKLXN0YXRpYyBfX2xlMzIqIGN4MjM4ODVfcmlzY19maWVsZChfX2xlMzIgKnJwLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKK3N0YXRpYyBfX2xlMzIgKmN4MjM4ODVfcmlzY19maWVsZChfX2xlMzIgKnJwLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1MzIgc3luY19saW5lLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBicGwsIHVuc2lnbmVkIGludCBwYWRkaW5nLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBsaW5lcykKQEAgLTk1NywzMSArOTY3LDMxIEBACiAJCX0KIAkJaWYgKGJwbCA8PSBzZ19kbWFfbGVuKHNnKS1vZmZzZXQpIHsKIAkJCS8qIGZpdHMgaW50byBjdXJyZW50IGNodW5rICovCi0JCQkqKHJwKyspPWNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19TT0x8UklTQ19FT0x8YnBsKTsKLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7Ci0JCQkqKHJwKyspPWNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCi0JCQlvZmZzZXQrPWJwbDsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfU09MfFJJU0NfRU9MfGJwbCk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpK29mZnNldCk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KKwkJCW9mZnNldCArPSBicGw7CiAJCX0gZWxzZSB7CiAJCQkvKiBzY2FubGluZSBuZWVkcyB0byBiZSBzcGxpdCAqLwogCQkJdG9kbyA9IGJwbDsKLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX1NPTHwKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfU09MfAogCQkJCQkgICAgKHNnX2RtYV9sZW4oc2cpLW9mZnNldCkpOwotCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLwogCQkJdG9kbyAtPSAoc2dfZG1hX2xlbihzZyktb2Zmc2V0KTsKIAkJCW9mZnNldCA9IDA7CiAJCQlzZysrOwogCQkJd2hpbGUgKHRvZG8gPiBzZ19kbWFfbGVuKHNnKSkgewotCQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoUklTQ19XUklURXwKKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19XUklURXwKIAkJCQkJCSAgICBzZ19kbWFfbGVuKHNnKSk7Ci0JCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOwotCQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KIAkJCQl0b2RvIC09IHNnX2RtYV9sZW4oc2cpOwogCQkJCXNnKys7CiAJCQl9Ci0JCQkqKHJwKyspPWNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19FT0x8dG9kbyk7Ci0JCQkqKHJwKyspPWNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7Ci0JCQkqKHJwKyspPWNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX0VPTHx0b2RvKTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCiAJCQlvZmZzZXQgKz0gdG9kbzsKIAkJfQogCQlvZmZzZXQgKz0gcGFkZGluZzsKQEAgLTEwMTAsOSArMTAyMCwxMSBAQAogCSAgIGNhbiBjYXVzZSBuZXh0IGJwbCB0byBzdGFydCBjbG9zZSB0byBhIHBhZ2UgYm9yZGVyLiAgRmlyc3QgRE1BCiAJICAgcmVnaW9uIG1heSBiZSBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFICovCiAJLyogd3JpdGUgYW5kIGp1bXAgbmVlZCBhbmQgZXh0cmEgZHdvcmQgKi8KLQlpbnN0cnVjdGlvbnMgID0gZmllbGRzICogKDEgKyAoKGJwbCArIHBhZGRpbmcpICogbGluZXMpIC8gUEFHRV9TSVpFICsgbGluZXMpOworCWluc3RydWN0aW9ucyAgPSBmaWVsZHMgKiAoMSArICgoYnBsICsgcGFkZGluZykgKiBsaW5lcykKKwkJLyBQQUdFX1NJWkUgKyBsaW5lcyk7CiAJaW5zdHJ1Y3Rpb25zICs9IDI7Ci0JaWYgKChyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhwY2kscmlzYyxpbnN0cnVjdGlvbnMqMTIpKSA8IDApCisJcmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLCByaXNjLCBpbnN0cnVjdGlvbnMqMTIpOworCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAogCS8qIHdyaXRlIHJpc2MgaW5zdHJ1Y3Rpb25zICovCkBAIC0xMDI2LDcgKzEwMzgsNyBAQAogCiAJLyogc2F2ZSBwb2ludGVyIHRvIGptcCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCiAJcmlzYy0+am1wID0gcnA7Ci0JQlVHX09OKChyaXNjLT5qbXAgLSByaXNjLT5jcHUgKyAyKSAqIHNpemVvZiAoKnJpc2MtPmNwdSkgPiByaXNjLT5zaXplKTsKKwlCVUdfT04oKHJpc2MtPmptcCAtIHJpc2MtPmNwdSArIDIpICogc2l6ZW9mKCpyaXNjLT5jcHUpID4gcmlzYy0+c2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNDgsNyArMTA2MCw4IEBACiAJaW5zdHJ1Y3Rpb25zICA9IDEgKyAoYnBsICogbGluZXMpIC8gUEFHRV9TSVpFICsgbGluZXM7CiAJaW5zdHJ1Y3Rpb25zICs9IDE7CiAKLQlpZiAoKHJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKHBjaSxyaXNjLGluc3RydWN0aW9ucyoxMikpIDwgMCkKKwlyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhwY2ksIHJpc2MsIGluc3RydWN0aW9ucyoxMik7CisJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCiAJLyogd3JpdGUgcmlzYyBpbnN0cnVjdGlvbnMgKi8KQEAgLTEwNTcsNyArMTA3MCw3IEBACiAKIAkvKiBzYXZlIHBvaW50ZXIgdG8gam1wIGluc3RydWN0aW9uIGFkZHJlc3MgKi8KIAlyaXNjLT5qbXAgPSBycDsKLQlCVUdfT04oKHJpc2MtPmptcCAtIHJpc2MtPmNwdSArIDIpICogc2l6ZW9mICgqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOworCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMikgKiBzaXplb2YoKnJpc2MtPmNwdSkgPiByaXNjLT5zaXplKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA2Nyw3ICsxMDgwLDggQEAKIAlfX2xlMzIgKnJwOwogCWludCByYzsKIAotCWlmICgocmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLCByaXNjLCA0KjE2KSkgPCAwKQorCXJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKHBjaSwgcmlzYywgNCoxNik7CisJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCiAJLyogd3JpdGUgcmlzYyBpbnN0cnVjdGlvbnMgKi8KQEAgLTExNjEsMjIgKzExNzUsMjMgQEAKIAogCS8qIHNldHVwIGZpZm8gKyBmb3JtYXQgKi8KIAljeDIzODg1X3NyYW1fY2hhbm5lbF9zZXR1cChkZXYsCi0JCQkJICAgJmRldi0+c3JhbV9jaGFubmVsc1sgcG9ydC0+c3JhbV9jaG5vIF0sCisJCQkJICAgJmRldi0+c3JhbV9jaGFubmVsc1twb3J0LT5zcmFtX2Nobm9dLAogCQkJCSAgIHBvcnQtPnRzX3BhY2tldF9zaXplLCBidWYtPnJpc2MuZG1hKTsKLQlpZihkZWJ1ZyA+IDUpIHsKLQkJY3gyMzg4NV9zcmFtX2NoYW5uZWxfZHVtcChkZXYsICZkZXYtPnNyYW1fY2hhbm5lbHNbIHBvcnQtPnNyYW1fY2hubyBdICk7CisJaWYgKGRlYnVnID4gNSkgeworCQljeDIzODg1X3NyYW1fY2hhbm5lbF9kdW1wKGRldiwKKwkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbcG9ydC0+c3JhbV9jaG5vXSk7CiAJCWN4MjM4ODVfcmlzY19kaXNhc20ocG9ydCwgJmJ1Zi0+cmlzYyk7CiAJfQogCiAJLyogd3JpdGUgVFMgbGVuZ3RoIHRvIGNoaXAgKi8KIAljeF93cml0ZShwb3J0LT5yZWdfbG5ndGgsIGJ1Zi0+dmIud2lkdGgpOwogCi0JaWYgKCAoIShjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YiAmIENYMjM4ODVfTVBFR19EVkIpKSAmJgotCQkoIShjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YyAmIENYMjM4ODVfTVBFR19EVkIpKSApIHsKLQkJcHJpbnRrKCAiJXMoKSBGYWlsZWQuIFVuc3VwcG9ydGVkIHZhbHVlIGluIC5wb3J0Yi9jICgweCUwOHgpLygweCUwOHgpXG4iLAorCWlmICgoIShjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YiAmIENYMjM4ODVfTVBFR19EVkIpKSAmJgorCQkoIShjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YyAmIENYMjM4ODVfTVBFR19EVkIpKSkgeworCQlwcmludGsoIiVzKCkgVW5zdXBwb3J0ZWQgLnBvcnRiL2MgKDB4JTA4eCkvKDB4JTA4eClcbiIsCiAJCQlfX2Z1bmNfXywKIAkJCWN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRiLAotCQkJY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGMgKTsKKwkJCWN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRjKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTg2LDcgKzEyMDEsNyBAQAogCXVkZWxheSgxMDApOwogCiAJLyogSWYgdGhlIHBvcnQgc3VwcG9ydHMgU1JDIFNFTEVDVCwgY29uZmlndXJlIGl0ICovCi0JaWYocG9ydC0+cmVnX3NyY19zZWwpCisJaWYgKHBvcnQtPnJlZ19zcmNfc2VsKQogCQljeF93cml0ZShwb3J0LT5yZWdfc3JjX3NlbCwgcG9ydC0+c3JjX3NlbF92YWwpOwogCiAJY3hfd3JpdGUocG9ydC0+cmVnX2h3X3NvcF9jdHJsLCBwb3J0LT5od19zb3BfY3RybF92YWwpOwpAQCAtMTE5NSw3ICsxMjEwLDcgQEAKIAljeF93cml0ZShwb3J0LT5yZWdfZ2VuX2N0cmwsIHBvcnQtPmdlbl9jdHJsX3ZhbCk7CiAJdWRlbGF5KDEwMCk7CiAKLQkvLyBOT1RFOiB0aGlzIGlzIDIgKHJlc2VydmVkKSBmb3IgcG9ydGIsIGRvZXMgaXQgbWF0dGVyPworCS8qIE5PVEU6IHRoaXMgaXMgMiAocmVzZXJ2ZWQpIGZvciBwb3J0YiwgZG9lcyBpdCBtYXR0ZXI/ICovCiAJLyogcmVzZXQgY291bnRlciB0byB6ZXJvICovCiAJY3hfd3JpdGUocG9ydC0+cmVnX2dwY250X2N0bCwgMyk7CiAJcS0+Y291bnQgPSAxOwpAQCAtMTIyOSwxMSArMTI0NCwxMSBAQAogCQljeF93cml0ZShBTFRfUElOX09VVF9TRUwsIDB4MTAxMDAwNDUpOwogCX0KIAotCXN3aXRjaChkZXYtPmJyaWRnZSkgeworCXN3aXRjaCAoZGV2LT5icmlkZ2UpIHsKIAljYXNlIENYMjM4ODVfQlJJREdFXzg4NToKIAljYXNlIENYMjM4ODVfQlJJREdFXzg4NzoKIAkJLyogZW5hYmxlIGlycXMgKi8KLQkJZHByaW50aygxLCAiJXMoKSBlbmFibGluZyBUUyBpbnQncyBhbmQgRE1BXG4iLCBfX2Z1bmNfXyApOworCQlkcHJpbnRrKDEsICIlcygpIGVuYWJsaW5nIFRTIGludCdzIGFuZCBETUFcbiIsIF9fZnVuY19fKTsKIAkJY3hfc2V0KHBvcnQtPnJlZ190c19pbnRfbXNrLCAgcG9ydC0+dHNfaW50X21za192YWwpOwogCQljeF9zZXQocG9ydC0+cmVnX2RtYV9jdGwsIHBvcnQtPmRtYV9jdGxfdmFsKTsKIAkJY3hfc2V0KFBDSV9JTlRfTVNLLCBkZXYtPnBjaV9pcnFtYXNrIHwgcG9ydC0+cGNpX2lycW1hc2spOwpAQCAtMTI5Miw4ICsxMzA3LDcgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9idWZmZXIgKmJ1ZjsKIAogCWRwcmludGsoNSwgIiVzKClcbiIsIF9fZnVuY19fKTsKLQlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkKLQl7CisJaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKIAkJc3RydWN0IGN4MjM4ODVfYnVmZmVyICpwcmV2OwogCQlwcmV2ID0gTlVMTDsKIApAQCAtMTMxMSw3ICsxMzI1LDcgQEAKIAkJCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwogCQkJCWJ1Zi0+Y291bnQgICAgPSBxLT5jb3VudCsrOwogCQkJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcytCVUZGRVJfVElNRU9VVCk7Ci0JCQkJZHByaW50ayg1LCAiWyVwLyVkXSByZXN0YXJ0X3F1ZXVlIC0gZmlyc3QgYWN0aXZlXG4iLAorCQkJCWRwcmludGsoNSwgIlslcC8lZF0gcmVzdGFydF9xdWV1ZSAtIGYvYWN0aXZlXG4iLAogCQkJCQlidWYsIGJ1Zi0+dmIuaSk7CiAKIAkJCX0gZWxzZSBpZiAocHJldi0+dmIud2lkdGggID09IGJ1Zi0+dmIud2lkdGggICYmCkBAIC0xMzIyLDggKzEzMzYsOSBAQAogCQkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CiAJCQkJYnVmLT5jb3VudCAgICA9IHEtPmNvdW50Kys7CiAJCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKLQkJCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOyAvKiA2NCBiaXQgYml0cyA2My0zMiAqLwotCQkJCWRwcmludGsoNSwiWyVwLyVkXSByZXN0YXJ0X3F1ZXVlIC0gbW92ZSB0byBhY3RpdmVcbiIsCisJCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KKwkJCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOworCQkJCWRwcmludGsoNSwgIlslcC8lZF0gcmVzdGFydF9xdWV1ZSAtIG0vYWN0aXZlXG4iLAogCQkJCQlidWYsIGJ1Zi0+dmIuaSk7CiAJCQl9IGVsc2UgewogCQkJCXJldHVybiAwOwpAQCAtMTM2Miw3ICsxMzc3LDggQEAKIAkJYnVmLT52Yi5zaXplICAgPSBzaXplOwogCQlidWYtPnZiLmZpZWxkICA9IGZpZWxkIC8qVjRMMl9GSUVMRF9UT1AqLzsKIAotCQlpZiAoMCAhPSAocmMgPSB2aWRlb2J1Zl9pb2xvY2socSwgJmJ1Zi0+dmIsIE5VTEwpKSkKKwkJcmMgPSB2aWRlb2J1Zl9pb2xvY2socSwgJmJ1Zi0+dmIsIE5VTEwpOworCQlpZiAoMCAhPSByYykKIAkJCWdvdG8gZmFpbDsKIAkJY3gyMzg4NV9yaXNjX2RhdGFidWZmZXIoZGV2LT5wY2ksICZidWYtPnJpc2MsCiAJCQkJCXZpZGVvYnVmX3RvX2RtYSgmYnVmLT52YiktPnNnbGlzdCwKQEAgLTEzODgsNyArMTQwNCw3IEBACiAJYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCiAKIAlpZiAobGlzdF9lbXB0eSgmY3g4OHEtPmFjdGl2ZSkpIHsKLQkJZHByaW50ayggMSwgInF1ZXVlIGlzIGVtcHR5IC0gZmlyc3QgYWN0aXZlXG4iICk7CisJCWRwcmludGsoMSwgInF1ZXVlIGlzIGVtcHR5IC0gZmlyc3QgYWN0aXZlXG4iKTsKIAkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJmN4ODhxLT5hY3RpdmUpOwogCQljeDIzODg1X3N0YXJ0X2RtYShwb3J0LCBjeDg4cSwgYnVmKTsKIAkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKQEAgLTEzOTcsNyArMTQxMyw3IEBACiAJCWRwcmludGsoMSwgIlslcC8lZF0gJXMgLSBmaXJzdCBhY3RpdmVcbiIsCiAJCQlidWYsIGJ1Zi0+dmIuaSwgX19mdW5jX18pOwogCX0gZWxzZSB7Ci0JCWRwcmludGsoIDEsICJxdWV1ZSBpcyBub3QgZW1wdHkgLSBhcHBlbmQgdG8gYWN0aXZlXG4iICk7CisJCWRwcmludGsoMSwgInF1ZXVlIGlzIG5vdCBlbXB0eSAtIGFwcGVuZCB0byBhY3RpdmVcbiIpOwogCQlwcmV2ID0gbGlzdF9lbnRyeShjeDg4cS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDIzODg1X2J1ZmZlciwKIAkJCQkgIHZiLnF1ZXVlKTsKIAkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJmN4ODhxLT5hY3RpdmUpOwpAQCAtMTQwNSw3ICsxNDIxLDcgQEAKIAkJYnVmLT5jb3VudCAgICA9IGN4ODhxLT5jb3VudCsrOwogCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOwogCQlwcmV2LT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOyAvKiA2NCBiaXQgYml0cyA2My0zMiAqLwotCQlkcHJpbnRrKCAxLCAiWyVwLyVkXSAlcyAtIGFwcGVuZCB0byBhY3RpdmVcbiIsCisJCWRwcmludGsoMSwgIlslcC8lZF0gJXMgLSBhcHBlbmQgdG8gYWN0aXZlXG4iLAogCQkJIGJ1ZiwgYnVmLT52Yi5pLCBfX2Z1bmNfXyk7CiAJfQogfQpAQCAtMTQzMSw3ICsxNDQ3LDcgQEAKIAkJCWJ1ZiwgYnVmLT52Yi5pLCByZWFzb24sICh1bnNpZ25lZCBsb25nKWJ1Zi0+cmlzYy5kbWEpOwogCX0KIAlpZiAocmVzdGFydCkgewotCQlkcHJpbnRrKDEsICJyZXN0YXJ0aW5nIHF1ZXVlXG4iICk7CisJCWRwcmludGsoMSwgInJlc3RhcnRpbmcgcXVldWVcbiIpOwogCQljeDIzODg1X3Jlc3RhcnRfcXVldWUocG9ydCwgcSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnNsb2NrLCBmbGFncyk7CkBAIC0xNDQyLDcgKzE0NTgsNyBAQAogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OwogCXN0cnVjdCBjeDIzODg1X2RtYXF1ZXVlICpxID0gJnBvcnQtPm1wZWdxOwogCi0JZHByaW50aygxLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAJZGVsX3RpbWVyX3N5bmMoJnEtPnRpbWVvdXQpOwogCWN4MjM4ODVfc3RvcF9kbWEocG9ydCk7CiAJZG9fY2FuY2VsX2J1ZmZlcnMocG9ydCwgImNhbmNlbCIsIDApOwpAQCAtMTQ1MywxMCArMTQ2OSwxMSBAQAogCXN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCA9IChzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKilkYXRhOwogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OwogCi0JZHByaW50aygxLCAiJXMoKVxuIixfX2Z1bmNfXyk7CisJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJaWYgKGRlYnVnID4gNSkKLQkJY3gyMzg4NV9zcmFtX2NoYW5uZWxfZHVtcChkZXYsICZkZXYtPnNyYW1fY2hhbm5lbHNbIHBvcnQtPnNyYW1fY2hubyBdKTsKKwkJY3gyMzg4NV9zcmFtX2NoYW5uZWxfZHVtcChkZXYsCisJCQkmZGV2LT5zcmFtX2NoYW5uZWxzW3BvcnQtPnNyYW1fY2hub10pOwogCiAJY3gyMzg4NV9zdG9wX2RtYShwb3J0KTsKIAlkb19jYW5jZWxfYnVmZmVycyhwb3J0LCAidGltZW91dCIsIDEpOwpAQCAtMTUzMiwxNiArMTU0OSwyMyBAQAogCWlmICgoc3RhdHVzICYgVklEX0JDX01TS19PUENfRVJSKSB8fAogCQkoc3RhdHVzICYgVklEX0JDX01TS19CQURfUEtUKSB8fAogCQkoc3RhdHVzICYgVklEX0JDX01TS19TWU5DKSB8fAotCQkoc3RhdHVzICYgVklEX0JDX01TS19PRikpCi0JeworCQkoc3RhdHVzICYgVklEX0JDX01TS19PRikpIHsKKwogCQlpZiAoc3RhdHVzICYgVklEX0JDX01TS19PUENfRVJSKQotCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX09QQ19FUlIgMHglMDh4KVxuIiwgVklEX0JDX01TS19PUENfRVJSKTsKKwkJCWRwcmludGsoNywgIiAoVklEX0JDX01TS19PUENfRVJSIDB4JTA4eClcbiIsCisJCQkJVklEX0JDX01TS19PUENfRVJSKTsKKwogCQlpZiAoc3RhdHVzICYgVklEX0JDX01TS19CQURfUEtUKQotCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX0JBRF9QS1QgMHglMDh4KVxuIiwgVklEX0JDX01TS19CQURfUEtUKTsKKwkJCWRwcmludGsoNywgIiAoVklEX0JDX01TS19CQURfUEtUIDB4JTA4eClcbiIsCisJCQkJVklEX0JDX01TS19CQURfUEtUKTsKKwogCQlpZiAoc3RhdHVzICYgVklEX0JDX01TS19TWU5DKQotCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX1NZTkMgICAgMHglMDh4KVxuIiwgVklEX0JDX01TS19TWU5DKTsKKwkJCWRwcmludGsoNywgIiAoVklEX0JDX01TS19TWU5DICAgIDB4JTA4eClcbiIsCisJCQkJVklEX0JDX01TS19TWU5DKTsKKwogCQlpZiAoc3RhdHVzICYgVklEX0JDX01TS19PRikKLQkJCWRwcmludGsoNywgIiAoVklEX0JDX01TS19PRiAgICAgIDB4JTA4eClcbiIsIFZJRF9CQ19NU0tfT0YpOworCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX09GICAgICAgMHglMDh4KVxuIiwKKwkJCQlWSURfQkNfTVNLX09GKTsKIAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtcGVnIHJpc2Mgb3AgY29kZSBlcnJvclxuIiwgZGV2LT5uYW1lKTsKIApAQCAtMTU5NSw3ICsxNjE5LDcgQEAKIAl0czJfc3RhdHVzID0gY3hfcmVhZChWSURfQ19JTlRfU1RBVCk7CiAJdHMyX21hc2sgPSBjeF9yZWFkKFZJRF9DX0lOVF9NU0spOwogCi0JaWYgKCAocGNpX3N0YXR1cyA9PSAwKSAmJiAodHMyX3N0YXR1cyA9PSAwKSAmJiAodHMxX3N0YXR1cyA9PSAwKSApCisJaWYgKChwY2lfc3RhdHVzID09IDApICYmICh0czJfc3RhdHVzID09IDApICYmICh0czFfc3RhdHVzID09IDApKQogCQlnb3RvIG91dDsKIAogCXZpZGFfY291bnQgPSBjeF9yZWFkKFZJRF9BX0dQQ05UKTsKQEAgLTE2MTAsMzggKzE2MzQsNTYgQEAKIAlkcHJpbnRrKDcsICJ0czJfc3RhdHVzOiAweCUwOHggIHRzMl9tYXNrOiAweCUwOHggY291bnQ6IDB4JXhcbiIsCiAJCXRzMl9zdGF0dXMsIHRzMl9tYXNrLCB0czJfY291bnQpOwogCi0JaWYgKCAocGNpX3N0YXR1cyAmIFBDSV9NU0tfUklTQ19SRCkgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19SSVNDX1dSKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FMX1JEKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FMX1dSKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FQQl9ETUEpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0MpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0IpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0EpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVVEX0lOVCkgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfRVhUKSApCi0JeworCWlmICgocGNpX3N0YXR1cyAmIFBDSV9NU0tfUklTQ19SRCkgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1JJU0NfV1IpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BTF9SRCkgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FMX1dSKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVBCX0RNQSkgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9DKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0IpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQSkgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9JTlQpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfRVhUKSkgewogCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19SSVNDX1JEKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1JJU0NfUkQgICAweCUwOHgpXG4iLCBQQ0lfTVNLX1JJU0NfUkQpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1JJU0NfUkQgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfUklTQ19SRCk7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1JJU0NfV1IpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfUklTQ19XUiAgIDB4JTA4eClcbiIsIFBDSV9NU0tfUklTQ19XUik7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfUklTQ19XUiAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19SSVNDX1dSKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQUxfUkQpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQUxfUkQgICAgIDB4JTA4eClcbiIsIFBDSV9NU0tfQUxfUkQpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FMX1JEICAgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfQUxfUkQpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19BTF9XUikKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19BTF9XUiAgICAgMHglMDh4KVxuIiwgUENJX01TS19BTF9XUik7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQUxfV1IgICAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19BTF9XUik7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FQQl9ETUEpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQVBCX0RNQSAgIDB4JTA4eClcbiIsIFBDSV9NU0tfQVBCX0RNQSk7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQVBCX0RNQSAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19BUEJfRE1BKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0MpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfVklEX0MgICAgIDB4JTA4eClcbiIsIFBDSV9NU0tfVklEX0MpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1ZJRF9DICAgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfVklEX0MpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQikKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19WSURfQiAgICAgMHglMDh4KVxuIiwgUENJX01TS19WSURfQik7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfVklEX0IgICAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19WSURfQik7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9BKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1ZJRF9BICAgICAweCUwOHgpXG4iLCBQQ0lfTVNLX1ZJRF9BKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19WSURfQSAgICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX1ZJRF9BKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVVEX0lOVCkKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19BVURfSU5UICAgMHglMDh4KVxuIiwgUENJX01TS19BVURfSU5UKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19BVURfSU5UICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX0FVRF9JTlQpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfRVhUKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FVRF9FWFQgICAweCUwOHgpXG4iLCBQQ0lfTVNLX0FVRF9FWFQpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FVRF9FWFQgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfQVVEX0VYVCk7CiAKIAl9CiAKQEAgLTE3NTMsMTMgKzE3OTUsMTMgQEAKIAkJLmRldmljZSAgICAgICA9IDB4ODg1MiwKIAkJLnN1YnZlbmRvciAgICA9IFBDSV9BTllfSUQsCiAJCS5zdWJkZXZpY2UgICAgPSBQQ0lfQU5ZX0lELAotCX0seworCX0sIHsKIAkJLyogQ1gyMzg4NyBSZXYgMiAqLwogCQkudmVuZG9yICAgICAgID0gMHgxNGYxLAogCQkuZGV2aWNlICAgICAgID0gMHg4ODgwLAogCQkuc3VidmVuZG9yICAgID0gUENJX0FOWV9JRCwKIAkJLnN1YmRldmljZSAgICA9IFBDSV9BTllfSUQsCi0JfSx7CisJfSwgewogCQkvKiAtLS0gZW5kIG9mIGxpc3QgLS0tICovCiAJfQogfTsKQEAgLTE3OTcsOSArMTgzOSwzIEBACiBtb2R1bGVfZXhpdChjeDIzODg1X2ZpbmkpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKiBrYXRlOiBlb2wgInVuaXgiOyBpbmRlbnQtd2lkdGggMzsgcmVtb3ZlLXRyYWlsaW5nLXNwYWNlIG9uOyByZXBsYWNlLXRyYWlsaW5nLXNwYWNlLXNhdmUgb247IHRhYi13aWR0aCA4OyByZXBsYWNlLXRhYnMgb2ZmOyBzcGFjZS1pbmRlbnQgb2ZmOyBtaXhlZC1pbmRlbnQgb2ZmCi0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKaW5kZXggMjkxYjlkMC4uZTFhYWMwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJ0dW5lci1zaW1wbGUuaCIKICNpbmNsdWRlICJkaWI3MDAwcC5oIgogI2luY2x1ZGUgImRpYngwMDBfY29tbW9uLmgiCisjaW5jbHVkZSAiemwxMDM1My5oIgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOwogCkBAIC03NywxOSArNzgsMTkgQEAKIAkJCSAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLCBlbnVtIHY0bDJfZmllbGQgZmllbGQpCiB7CiAJc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0ID0gcS0+cHJpdl9kYXRhOwotCXJldHVybiBjeDIzODg1X2J1Zl9wcmVwYXJlKHEsIHBvcnQsIChzdHJ1Y3QgY3gyMzg4NV9idWZmZXIqKXZiLCBmaWVsZCk7CisJcmV0dXJuIGN4MjM4ODVfYnVmX3ByZXBhcmUocSwgcG9ydCwgKHN0cnVjdCBjeDIzODg1X2J1ZmZlciAqKXZiLCBmaWVsZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGR2Yl9idWZfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKIAlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSBxLT5wcml2X2RhdGE7Ci0JY3gyMzg4NV9idWZfcXVldWUocG9ydCwgKHN0cnVjdCBjeDIzODg1X2J1ZmZlciopdmIpOworCWN4MjM4ODVfYnVmX3F1ZXVlKHBvcnQsIChzdHJ1Y3QgY3gyMzg4NV9idWZmZXIgKil2Yik7CiB9CiAKIHN0YXRpYyB2b2lkIGR2Yl9idWZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCiAJCQkgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCiB7Ci0JY3gyMzg4NV9mcmVlX2J1ZmZlcihxLCAoc3RydWN0IGN4MjM4ODVfYnVmZmVyKil2Yik7CisJY3gyMzg4NV9mcmVlX2J1ZmZlcihxLCAoc3RydWN0IGN4MjM4ODVfYnVmZmVyICopdmIpOwogfQogCiBzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBkdmJfcW9wcyA9IHsKQEAgLTE4OCwxMyArMTg5LDExIEBACiBzdGF0aWMgc3RydWN0IHhjNTAwMF9jb25maWcgaGF1cHBhdWdlX2h2cjE1MDBxX3R1bmVyY29uZmlnID0gewogCS5pMmNfYWRkcmVzcyAgICAgID0gMHg2MSwKIAkuaWZfa2h6ICAgICAgICAgICA9IDUzODAsCi0JLnR1bmVyX2NhbGxiYWNrICAgPSBjeDIzODg1X3R1bmVyX2NhbGxiYWNrCiB9OwogCiBzdGF0aWMgc3RydWN0IHhjNTAwMF9jb25maWcgZHZpY29feGM1MDAwX3R1bmVyY29uZmlnID0gewogCS5pMmNfYWRkcmVzcyAgICAgID0gMHg2NCwKIAkuaWZfa2h6ICAgICAgICAgICA9IDUzODAsCi0JLnR1bmVyX2NhbGxiYWNrICAgPSBjeDIzODg1X3R1bmVyX2NhbGxiYWNrCiB9OwogCiBzdGF0aWMgc3RydWN0IHRkYTgyOXhfY29uZmlnIHRkYTgyOXhfbm9fcHJvYmUgPSB7CkBAIC0zMDMsNTMgKzMwMiwzNSBAQAogCS5vdXRwdXRfbW9kZSA9IE9VVE1PREVfTVBFRzJfU0VSSUFMLAogfTsKIAotc3RhdGljIGludCBjeDIzODg1X2h2cjE1MDBfeGMzMDI4X2NhbGxiYWNrKHZvaWQgKnB0ciwgaW50IGNvbW1hbmQsIGludCBhcmcpCi17Ci0Jc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0ID0gcHRyOwotCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OwotCi0Jc3dpdGNoIChjb21tYW5kKSB7Ci0JY2FzZSBYQzIwMjhfVFVORVJfUkVTRVQ6Ci0JCS8qIFNlbmQgdGhlIHR1bmVyIGluIHRoZW4gb3V0IG9mIHJlc2V0ICovCi0JCS8qIEdQSU8tMiB4YzMwMjggdHVuZXIgKi8KLQkJZHByaW50aygxLCAiJXM6IFhDMjAyOF9UVU5FUl9SRVNFVCAlZFxuIiwgX19mdW5jX18sIGFyZyk7Ci0KLQkJY3hfc2V0KEdQMF9JTywgMHgwMDA0MDAwMCk7Ci0JCWN4X2NsZWFyKEdQMF9JTywgMHgwMDAwMDAwNCk7Ci0JCW1zbGVlcCg1KTsKLQotCQljeF9zZXQoR1AwX0lPLCAweDAwMDQwMDA0KTsKLQkJbXNsZWVwKDUpOwotCQlicmVhazsKLQljYXNlIFhDMjAyOF9SRVNFVF9DTEs6Ci0JCWRwcmludGsoMSwgIiVzOiBYQzIwMjhfUkVTRVRfQ0xLICVkXG4iLCBfX2Z1bmNfXywgYXJnKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZHByaW50aygxLCAiJXM6IHVua25vd24gY29tbWFuZCAlZCwgYXJnICVkXG4iLCBfX2Z1bmNfXywKLQkJCWNvbW1hbmQsIGFyZyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQorc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBkdmljb19mdXNpb25oZHR2X3hjMzAyOCA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MGYsCisJLmlmMiAgICAgICAgICAgPSA0NTYwMCwKKwkubm9fdHVuZXIgICAgICA9IDEsCit9OwogCiBzdGF0aWMgaW50IGR2Yl9yZWdpc3RlcihzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CiAJc3RydWN0IGN4MjM4ODVfaTJjICppMmNfYnVzID0gTlVMTDsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTA7CisKKwkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCisJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmcG9ydC0+ZnJvbnRlbmRzLCAxKTsKKwlpZiAoIWZlMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBpbml0IHN0cnVjdCB2aWRlb2J1Zl9kdmIgKi8KLQlwb3J0LT5kdmIubmFtZSA9IGRldi0+bmFtZTsKKwlmZTAtPmR2Yi5uYW1lID0gZGV2LT5uYW1lOwogCiAJLyogaW5pdCBmcm9udGVuZCAqLwogCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1MDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07Ci0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJCSZoYXVwcGF1Z2VfZ2VuZXJpY19jb25maWcsCiAJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWR2Yl9hdHRhY2gobXQyMTMxX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJZHZiX2F0dGFjaChtdDIxMzFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXAsCiAJCQkJICAgJmhhdXBwYXVnZV9nZW5lcmljX3R1bmVyY29uZmlnLCAwKTsKIAkJfQpAQCAtMzU4LDI3ICszMzksMjcgQEAKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07CiAJCXN3aXRjaCAoYWx0X3R1bmVyKSB7CiAJCWNhc2UgMToKLQkJCXBvcnQtPmR2Yi5mcm9udGVuZCA9CisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9CiAJCQkJZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJICAgJmhhdXBwYXVnZV9lenFhbV9jb25maWcsCiAJCQkJCSAgICZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCQlkdmJfYXR0YWNoKHRkYTgyOXhfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJCWR2Yl9hdHRhY2godGRhODI5eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkgICAmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLCAweDQyLAogCQkJCQkgICAmdGRhODI5eF9ub19wcm9iZSk7Ci0JCQkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSAgIDB4NjAsICZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCiAJCQkJCSAgICZoYXVwcGF1Z2VfdGRhMTgyNzFfY29uZmlnKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDA6CiAJCWRlZmF1bHQ6Ci0JCQlwb3J0LT5kdmIuZnJvbnRlbmQgPQorCQkJZmUwLT5kdmIuZnJvbnRlbmQgPQogCQkJCWR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCSAgICZoYXVwcGF1Z2VfZ2VuZXJpY19jb25maWcsCiAJCQkJCSAgICZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCi0JCQkJZHZiX2F0dGFjaChtdDIxMzFfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKKwkJCQlkdmJfYXR0YWNoKG10MjEzMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXAsCiAJCQkJCSAgICZoYXVwcGF1Z2VfZ2VuZXJpY190dW5lcmNvbmZpZywgMCk7CiAJCQlicmVhazsKQEAgLTM4Niw1NiArMzY3LDU1IEBACiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMGxwOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkJJmhhdXBwYXVnZV9odnIxODAwbHBfY29uZmlnLAogCQkJCQkJJmkyY19idXMtPmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfYXR0YWNoKG10MjEzMV9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWR2Yl9hdHRhY2gobXQyMTMxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmkyY19idXMtPmkyY19hZGFwLAogCQkJCSAgICZoYXVwcGF1Z2VfZ2VuZXJpY190dW5lcmNvbmZpZywgMCk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9FWFA6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOwotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKIAkJCQkJCSZmdXNpb25oZHR2XzVfZXhwcmVzcywKIAkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZpMmNfYnVzLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkgICBUVU5FUl9MR19URFZTX0gwNlhGKTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDBROgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1sxXTsKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkJJmhhdXBwYXVnZV9odnIxNTAwcV9jb25maWcsCiAJCQkJCQkmZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQotCQkJZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCi0JCQkJJmkyY19idXMtPmkyY19hZGFwLAotCQkJCSZoYXVwcGF1Z2VfaHZyMTUwMHFfdHVuZXJjb25maWcsIGkyY19idXMpOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKKwkJCWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJICAgJmkyY19idXMtPmkyY19hZGFwLAorCQkJCSAgICZoYXVwcGF1Z2VfaHZyMTUwMHFfdHVuZXJjb25maWcpOwogCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDA6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzFdOwotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCQkmaGF1cHBhdWdlX2h2cjE1MDBfY29uZmlnLAogCQkJCQkJJmRldi0+aTJjX2J1c1swXS5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewogCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CiAJCQlzdHJ1Y3QgeGMyMDI4X2NvbmZpZyBjZmcgPSB7CiAJCQkJLmkyY19hZGFwICA9ICZpMmNfYnVzLT5pMmNfYWRhcCwKIAkJCQkuaTJjX2FkZHIgID0gMHg2MSwKLQkJCQkuY2FsbGJhY2sgID0gY3gyMzg4NV9odnIxNTAwX3hjMzAyOF9jYWxsYmFjaywKIAkJCX07CiAJCQlzdGF0aWMgc3RydWN0IHhjMjAyOF9jdHJsIGN0bCA9IHsKLQkJCQkuZm5hbWUgICAgICAgPSAieGMzMDI4LXYyNy5mdyIsCisJCQkJLmZuYW1lICAgICAgID0gWEMyMDI4X0RFRkFVTFRfRklSTVdBUkUsCiAJCQkJLm1heF9sZW4gICAgID0gNjQsCiAJCQkJLnNjb2RlX3RhYmxlID0gWEMzMDI4X0ZFX09SRU41MzgsCiAJCQl9OwogCiAJCQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwKLQkJCQkJcG9ydC0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKKwkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsICZjZmcpOwogCQkJaWYgKGZlICE9IE5VTEwgJiYgZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyAhPSBOVUxMKQogCQkJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcoZmUsICZjdGwpOwogCQl9CkBAIC00NDMsMzkgKzQyMyw0MCBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTIwMDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE3MDA6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOwotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ4X2F0dGFjaCwKIAkJCSZoYXVwcGF1Z2VfaHZyMTIwMF9jb25maWcsCiAJCQkmaTJjX2J1cy0+aTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWR2Yl9hdHRhY2godGRhODI5eF9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWR2Yl9hdHRhY2godGRhODI5eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsIDB4NDIsCiAJCQkJJnRkYTgyOXhfbm9fcHJvYmUpOwotCQkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCWR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkweDYwLCAmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLAogCQkJCSZoYXVwcGF1Z2VfaHZyMTIwMF90dW5lcl9jb25maWcpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTQwMDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07Ci0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goZGliNzAwMHBfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goZGliNzAwMHBfYXR0YWNoLAogCQkJJmkyY19idXMtPmkyY19hZGFwLAogCQkJMHgxMiwgJmhhdXBwYXVnZV9odnIxNDAwX2RpYjcwMDBfY29uZmlnKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKIAkJCXN0cnVjdCB4YzIwMjhfY29uZmlnIGNmZyA9IHsKIAkJCQkuaTJjX2FkYXAgID0gJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKIAkJCQkuaTJjX2FkZHIgID0gMHg2NCwKLQkJCQkuY2FsbGJhY2sgID0gY3gyMzg4NV9odnIxNTAwX3hjMzAyOF9jYWxsYmFjaywKIAkJCX07CiAJCQlzdGF0aWMgc3RydWN0IHhjMjAyOF9jdHJsIGN0bCA9IHsKLQkJCQkuZm5hbWUgICA9ICJ4YzMwMjhMLXYzNi5mdyIsCisJCQkJLmZuYW1lICAgPSBYQzMwMjhMX0RFRkFVTFRfRklSTVdBUkUsCiAJCQkJLm1heF9sZW4gPSA2NCwKIAkJCQkuZGVtb2QgICA9IDUwMDAsCi0JCQkJLmQyNjMzICAgPSAxCisJCQkJLyogVGhpcyBpcyB0cnVlIGZvciBhbGwgZGVtb2RzIHdpdGgKKwkJCQkJdjM2IGZpcm13YXJlPyAqLworCQkJCS50eXBlICAgID0gWEMyMDI4X0QyNjMzLAogCQkJfTsKIAogCQkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsCi0JCQkJCXBvcnQtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CisJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKIAkJCWlmIChmZSAhPSBOVUxMICYmIGZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcgIT0gTlVMTCkKIAkJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnKGZlLCAmY3RsKTsKIAkJfQpAQCAtNDgzLDc3ICs0NjQsMTYzIEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfN19EVUFMX0VYUDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbcG9ydC0+bnIgLSAxXTsKIAotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCQkmZHZpY29fczVoMTQwOV9jb25maWcsCiAJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kID09IE5VTEwpCi0JCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MTFfYXR0YWNoLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgPT0gTlVMTCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDExX2F0dGFjaCwKIAkJCQkJCQkmZHZpY29fczVoMTQxMV9jb25maWcsCiAJCQkJCQkJJmkyY19idXMtPmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQotCQkJZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCi0JCQkJJmkyY19idXMtPmkyY19hZGFwLAotCQkJCSZkdmljb194YzUwMDBfdHVuZXJjb25maWcsIGkyY19idXMpOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKKwkJCWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJICAgJmkyY19idXMtPmkyY19hZGFwLAorCQkJCSAgICZkdmljb194YzUwMDBfdHVuZXJjb25maWcpOworCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMX0VYUDogeworCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1twb3J0LT5uciAtIDFdOworCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2X3hjMzAyOCwKKwkJCQkJICAgICAgICZpMmNfYnVzLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICAgICAgKmZlOworCQkJc3RydWN0IHhjMjAyOF9jb25maWcJICBjZmcgPSB7CisJCQkJLmkyY19hZGFwICA9ICZpMmNfYnVzLT5pMmNfYWRhcCwKKwkJCQkuaTJjX2FkZHIgID0gMHg2MSwKKwkJCX07CisJCQlzdGF0aWMgc3RydWN0IHhjMjAyOF9jdHJsIGN0bCA9IHsKKwkJCQkuZm5hbWUgICAgICAgPSBYQzIwMjhfREVGQVVMVF9GSVJNV0FSRSwKKwkJCQkubWF4X2xlbiAgICAgPSA2NCwKKwkJCQkuZGVtb2QgICAgICAgPSBYQzMwMjhfRkVfWkFSTElOSzQ1NiwKKwkJCX07CisKKwkJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkJJmNmZyk7CisJCQlpZiAoZmUgIT0gTlVMTCAmJiBmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnICE9IE5VTEwpCisJCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyhmZSwgJmN0bCk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOworCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJCSZkdmljb19mdXNpb25oZHR2X3hjMzAyOCwKKwkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICAgICAgKmZlOworCQkJc3RydWN0IHhjMjAyOF9jb25maWcJICBjZmcgPSB7CisJCQkJLmkyY19hZGFwICA9ICZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCisJCQkJLmkyY19hZGRyICA9IDB4NjEsCisJCQl9OworCQkJc3RhdGljIHN0cnVjdCB4YzIwMjhfY3RybCBjdGwgPSB7CisJCQkJLmZuYW1lICAgICAgID0gWEMyMDI4X0RFRkFVTFRfRklSTVdBUkUsCisJCQkJLm1heF9sZW4gICAgID0gNjQsCisJCQkJLmRlbW9kICAgICAgID0gWEMzMDI4X0ZFX1pBUkxJTks0NTYsCisJCQl9OworCisJCQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJJmNmZyk7CisJCQlpZiAoZmUgIT0gTlVMTCAmJiBmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnICE9IE5VTEwpCisJCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyhmZSwgJmN0bCk7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCIlczogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLAorCQlwcmludGsoS0VSTl9JTkZPICIlczogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCAiCisJCQkiIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwogCQlicmVhazsKIAl9Ci0JaWYgKE5VTEwgPT0gcG9ydC0+ZHZiLmZyb250ZW5kKSB7Ci0JCXByaW50aygiJXM6IGZyb250ZW5kIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKKwlpZiAoTlVMTCA9PSBmZTAtPmR2Yi5mcm9udGVuZCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmcm9udGVuZCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCisJCQlkZXYtPm5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQorCS8qIGRlZmluZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgcG9pbnRlciAqLworCWZlMC0+ZHZiLmZyb250ZW5kLT5jYWxsYmFjayA9IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2s7CiAKIAkvKiBQdXQgdGhlIGFuYWxvZyBkZWNvZGVyIGluIHN0YW5kYnkgdG8ga2VlcCBpdCBxdWlldCAqLwogCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cyhpMmNfYnVzLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CiAKLQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kLT5vcHMuYW5hbG9nX29wcy5zdGFuZGJ5KQotCQlwb3J0LT5kdmIuZnJvbnRlbmQtPm9wcy5hbmFsb2dfb3BzLnN0YW5kYnkocG9ydC0+ZHZiLmZyb250ZW5kKTsKKwlpZiAoZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5hbmFsb2dfb3BzLnN0YW5kYnkpCisJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuYW5hbG9nX29wcy5zdGFuZGJ5KGZlMC0+ZHZiLmZyb250ZW5kKTsKIAogCS8qIHJlZ2lzdGVyIGV2ZXJ5dGhpbmcgKi8KLQlyZXR1cm4gdmlkZW9idWZfZHZiX3JlZ2lzdGVyKCZwb3J0LT5kdmIsIFRISVNfTU9EVUxFLCBwb3J0LAotCQkJCSAgICAgJmRldi0+cGNpLT5kZXYsIGFkYXB0ZXJfbnIpOworCXJldHVybiB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKCZwb3J0LT5mcm9udGVuZHMsIFRISVNfTU9EVUxFLCBwb3J0LAorCQkmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9uciwgMCk7CisKIH0KIAogaW50IGN4MjM4ODVfZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCkKIHsKKworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlMDsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBvcnQtPmRldjsKLQlpbnQgZXJyOworCWludCBlcnIsIGk7CiAKLQlkcHJpbnRrKDEsICIlc1xuIiwgX19mdW5jX18pOwotCWRwcmludGsoMSwgIiAtPmJlaW5nIHByb2JlZCBieSBDYXJkPSVkIE5hbWU9JXMsIFBDSSAlMDJ4OiUwMnhcbiIsCi0JCWRldi0+Ym9hcmQsCi0JCWRldi0+bmFtZSwKLQkJZGV2LT5wY2lfYnVzLAotCQlkZXYtPnBjaV9zbG90KTsKKwkvKiBIZXJlIHdlIG5lZWQgdG8gYWxsb2NhdGUgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGZyb250ZW5kcywKKwkgKiBhcyByZWZsZWN0ZWQgaW4gdGhlIGNhcmRzIHN0cnVjdC4gVGhlIHJlYWxpdHkgaXMgdGhhdCBjdXJycmVudGx5CisJICogbm8gY3gyMzg4NSBib2FyZHMgc3VwcG9ydCB0aGlzIC0geWV0LiBCdXQsIGlmIHdlIGRvbid0IG1vZGlmeSB0aGlzCisJICogY29kZSB0aGVuIHRoZSBzZWNvbmQgZnJvbnRlbmQgd291bGQgbmV2ZXIgYmUgYWxsb2NhdGVkIChsYXRlcikKKwkgKiBhbmQgZmFpbCB3aXRoIGVycm9yIGJlZm9yZSB0aGUgYXR0YWNoIGluIGR2Yl9yZWdpc3RlcigpLgorCSAqIFdpdGhvdXQgdGhlc2UgY2hhbmdlcyB3ZSByaXNrIGFuIE9PUFMgbGF0ZXIuIFRoZSBjaGFuZ2VzIGhlcmUKKwkgKiBhcmUgZm9yIHNhZmV0eSwgYW5kIHNob3VsZCBwcm92aWRlIGEgZ29vZCBmb3VuZGF0aW9uIGZvciB0aGUKKwkgKiBmdXR1cmUgYWRkaXRpb24gb2YgYW55IG11bHRpLWZyb250ZW5kIGN4MjM4ODUgYmFzZWQgYm9hcmRzLgorCSAqLworCXByaW50ayhLRVJOX0lORk8gIiVzKCkgYWxsb2NhdGluZyAlZCBmcm9udGVuZChzKVxuIiwgX19mdW5jX18sCisJCXBvcnQtPm51bV9mcm9udGVuZHMpOwogCi0JZXJyID0gLUVOT0RFVjsKKwlmb3IgKGkgPSAxOyBpIDw9IHBvcnQtPm51bV9mcm9udGVuZHM7IGkrKykgeworCQlpZiAodmlkZW9idWZfZHZiX2FsbG9jX2Zyb250ZW5kKAorCQkJJnBvcnQtPmZyb250ZW5kcywgaSkgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGZhaWxlZCB0byBhbGxvY1xuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAotCS8qIGR2YiBzdHVmZiAqLwotCXByaW50aygiJXM6IGN4MjM4ODUgYmFzZWQgZHZiIGNhcmRcbiIsIGRldi0+bmFtZSk7Ci0JdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmcG9ydC0+ZHZiLmR2YnEsICZkdmJfcW9wcywgJmRldi0+cGNpLT5kZXYsICZwb3J0LT5zbG9jaywKKwkJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmcG9ydC0+ZnJvbnRlbmRzLCBpKTsKKwkJaWYgKCFmZTApCisJCQllcnIgPSAtRUlOVkFMOworCisJCWRwcmludGsoMSwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJCWRwcmludGsoMSwgIiAtPnByb2JlZCBieSBDYXJkPSVkIE5hbWU9JXMsIFBDSSAlMDJ4OiUwMnhcbiIsCisJCQlkZXYtPmJvYXJkLAorCQkJZGV2LT5uYW1lLAorCQkJZGV2LT5wY2lfYnVzLAorCQkJZGV2LT5wY2lfc2xvdCk7CisKKwkJZXJyID0gLUVOT0RFVjsKKworCQkvKiBkdmIgc3R1ZmYgKi8KKwkJLyogV2UgaGF2ZSB0byBpbml0IHRoZSBxdWV1ZSBmb3IgZWFjaCBmcm9udGVuZCBvbiBhIHBvcnQuICovCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjeDIzODg1IGJhc2VkIGR2YiBjYXJkXG4iLCBkZXYtPm5hbWUpOworCQl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZmZTAtPmR2Yi5kdmJxLCAmZHZiX3FvcHMsCisJCQkgICAgJmRldi0+cGNpLT5kZXYsICZwb3J0LT5zbG9jaywKIAkJCSAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsIFY0TDJfRklFTERfVE9QLAogCQkJICAgIHNpemVvZihzdHJ1Y3QgY3gyMzg4NV9idWZmZXIpLCBwb3J0KTsKKwl9CiAJZXJyID0gZHZiX3JlZ2lzdGVyKHBvcnQpOwogCWlmIChlcnIgIT0gMCkKLQkJcHJpbnRrKCIlcygpIGR2Yl9yZWdpc3RlciBmYWlsZWQgZXJyID0gJWRcbiIsIF9fZnVuY19fLCBlcnIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZHZiX3JlZ2lzdGVyIGZhaWxlZCBlcnIgPSAlZFxuIiwKKwkJCV9fZnVuY19fLCBlcnIpOwogCiAJcmV0dXJuIGVycjsKIH0KIAogaW50IGN4MjM4ODVfZHZiX3VucmVnaXN0ZXIoc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0KQogewotCS8qIGR2YiAqLwotCWlmKHBvcnQtPmR2Yi5mcm9udGVuZCkKLQkJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXIoJnBvcnQtPmR2Yik7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwOworCisJLyogRklYTUU6IGluIGFuIGVycm9yIGNvbmRpdGlvbiB3aGVyZSB0aGUgd2UgaGF2ZQorCSAqIGFuIGV4cGVjdGVkIG51bWJlciBvZiBmcm9udGVuZHMgKGF0dGFjaCBwcm9ibGVtKQorCSAqIHRoZW4gdGhpcyBtaWdodCBub3QgY2xlYW4gdXAgY29ycmVjdGx5LCBpZiAxCisJICogaXMgaW52YWxpZC4KKwkgKiBUaGlzIGNvbW1lbnQgb25seSBhcHBsaWVzIHRvIGZ1dHVyZSBib2FyZHMgSUYgdGhleQorCSAqIGltcGxlbWVudCBNRkUgc3VwcG9ydC4KKwkgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZwb3J0LT5mcm9udGVuZHMsIDEpOworCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkKKwkJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXJfYnVzKCZwb3J0LT5mcm9udGVuZHMpOwogCiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICoga2F0ZTogZW9sICJ1bml4IjsgaW5kZW50LXdpZHRoIDM7IHJlbW92ZS10cmFpbGluZy1zcGFjZSBvbjsgcmVwbGFjZS10cmFpbGluZy1zcGFjZS1zYXZlIG9uOyB0YWItd2lkdGggODsgcmVwbGFjZS10YWJzIG9mZjsgc3BhY2UtaW5kZW50IG9mZjsgbWl4ZWQtaW5kZW50IG9mZgotKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMKaW5kZXggZjk4ZTQ3Ni4uYmI3ZjcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCQkJcHJpbnRrKCIgPlxuIik7CiAJfQogCi0JZm9yIChjbnQgPSAxOyBjbnQgPCBtc2ctPmxlbjsgY250KysgKSB7CisJZm9yIChjbnQgPSAxOyBjbnQgPCBtc2ctPmxlbjsgY250KyspIHsKIAkJLyogZm9sbG93aW5nIGJ5dGVzICovCiAJCXdkYXRhID0gbXNnLT5idWZbY250XTsKIAkJY3RybCA9IGJ1cy0+aTJjX3BlcmlvZCB8ICgxIDw8IDEyKSB8ICgxIDw8IDIpOwpAQCAtMTUxLDkgKzE1MSw5IEBACiAJCWlmIChyZXR2YWwgPT0gMCkKIAkJCWdvdG8gZWlvOwogCQlpZiAoaTJjX2RlYnVnKSB7Ci0JCQlwcmludGsoIiAlMDJ4IiwgbXNnLT5idWZbY250XSk7CisJCQlkcHJpbnRrKDEsICIgJTAyeCIsIG1zZy0+YnVmW2NudF0pOwogCQkJaWYgKCEoY3RybCAmIEkyQ19OT1NUT1ApKQotCQkJCXByaW50aygiID5cbiIpOworCQkJCWRwcmludGsoMSwgIiA+XG4iKTsKIAkJfQogCX0KIAlyZXR1cm4gbXNnLT5sZW47CkBAIC0xNjIsNyArMTYyLDcgQEAKIAlyZXR2YWwgPSAtRUlPOwogIGVycjoKIAlpZiAoaTJjX2RlYnVnKQotCQlwcmludGsoIiBFUlI6ICVkXG4iLCByZXR2YWwpOworCQlwcmludGsoS0VSTl9FUlIgIiBFUlI6ICVkXG4iLCByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE5NCwxMiArMTk0LDEyIEBACiAKIAlpZiAoaTJjX2RlYnVnKSB7CiAJCWlmIChqb2luZWQpCi0JCQlwcmludGsoIiBSIik7CisJCQlkcHJpbnRrKDEsICIgUiIpOwogCQllbHNlCi0JCQlwcmludGsoIiA8UiAlMDJ4IiwgKG1zZy0+YWRkciA8PCAxKSArIDEpOworCQkJZHByaW50aygxLCAiIDxSICUwMngiLCAobXNnLT5hZGRyIDw8IDEpICsgMSk7CiAJfQogCi0JZm9yKGNudCA9IDA7IGNudCA8IG1zZy0+bGVuOyBjbnQrKykgeworCWZvciAoY250ID0gMDsgY250IDwgbXNnLT5sZW47IGNudCsrKSB7CiAKIAkJY3RybCA9IGJ1cy0+aTJjX3BlcmlvZCB8ICgxIDw8IDEyKSB8ICgxIDw8IDIpIHwgMTsKIApAQCAtMjE2LDkgKzIxNiw5IEBACiAJCQlnb3RvIGVpbzsKIAkJbXNnLT5idWZbY250XSA9IGN4X3JlYWQoYnVzLT5yZWdfcmRhdGEpICYgMHhmZjsKIAkJaWYgKGkyY19kZWJ1ZykgewotCQkJcHJpbnRrKCIgJTAyeCIsIG1zZy0+YnVmW2NudF0pOworCQkJZHByaW50aygxLCAiICUwMngiLCBtc2ctPmJ1ZltjbnRdKTsKIAkJCWlmICghKGN0cmwgJiBJMkNfTk9TVE9QKSkKLQkJCQlwcmludGsoIiA+XG4iKTsKKwkJCQlkcHJpbnRrKDEsICIgPlxuIik7CiAJCX0KIAl9CiAJcmV0dXJuIG1zZy0+bGVuOwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJcmV0dmFsID0gLUVJTzsKICBlcnI6CiAJaWYgKGkyY19kZWJ1ZykKLQkJcHJpbnRrKCIgRVJSOiAlZFxuIiwgcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIgRVJSOiAlZFxuIiwgcmV0dmFsKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0zNTMsMTcgKzM1MywxNyBAQAogfTsKIAogc3RhdGljIGNoYXIgKmkyY19kZXZzWzEyOF0gPSB7Ci0JWzB4MTAgPj4gMV0gICA9ICJ0ZGExMDA0OCIsCi0JWzB4MTIgPj4gMV0gICA9ICJkaWI3MDAwcGMiLAotCVsgMHgxYyA+PiAxIF0gPSAibGdkdDMzMDMiLAotCVsgMHg4NiA+PiAxIF0gPSAidGRhOTg4NyIsCi0JWyAweDMyID4+IDEgXSA9ICJjeDI0MjI3IiwKLQlbIDB4ODggPj4gMSBdID0gImN4MjU4MzciLAotCVsgMHg4NCA+PiAxIF0gPSAidGRhODI5NSIsCi0JWyAweGEwID4+IDEgXSA9ICJlZXByb20iLAotCVsgMHhjMCA+PiAxIF0gPSAidHVuZXIvbXQyMTMxL3RkYTgyNzUiLAorCVsweDEwID4+IDFdID0gInRkYTEwMDQ4IiwKKwlbMHgxMiA+PiAxXSA9ICJkaWI3MDAwcGMiLAorCVsweDFjID4+IDFdID0gImxnZHQzMzAzIiwKKwlbMHg4NiA+PiAxXSA9ICJ0ZGE5ODg3IiwKKwlbMHgzMiA+PiAxXSA9ICJjeDI0MjI3IiwKKwlbMHg4OCA+PiAxXSA9ICJjeDI1ODM3IiwKKwlbMHg4NCA+PiAxXSA9ICJ0ZGE4Mjk1IiwKKwlbMHhhMCA+PiAxXSA9ICJlZXByb20iLAorCVsweGMwID4+IDFdID0gInR1bmVyL210MjEzMS90ZGE4Mjc1IiwKIAlbMHhjMiA+PiAxXSA9ICJ0dW5lci9tdDIxMzEvdGRhODI3NS94YzUwMDAveGMzMDI4IiwKLQlbMHhjOCA+PiAxXSAgID0gInR1bmVyL3hjMzAyOEwiLAorCVsweGM4ID4+IDFdID0gInR1bmVyL3hjMzAyOEwiLAogfTsKIAogc3RhdGljIHZvaWQgZG9faTJjX3NjYW4oY2hhciAqbmFtZSwgc3RydWN0IGkyY19jbGllbnQgKmMpCkBAIC0zNzYsNyArMzc2LDcgQEAKIAkJcmMgPSBpMmNfbWFzdGVyX3JlY3YoYywgJmJ1ZiwgMCk7CiAJCWlmIChyYyA8IDApCiAJCQljb250aW51ZTsKLQkJcHJpbnRrKCIlczogaTJjIHNjYW46IGZvdW5kIGRldmljZSBAIDB4JXggIFslc11cbiIsCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpMmMgc2NhbjogZm91bmQgZGV2aWNlIEAgMHgleCAgWyVzXVxuIiwKIAkJICAgICAgIG5hbWUsIGkgPDwgMSwgaTJjX2RldnNbaV0gPyBpMmNfZGV2c1tpXSA6ICI/Pz8iKTsKIAl9CiB9CkBAIC00MDgsMTEgKzQwOCwxMiBAQAogCWJ1cy0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmJ1cy0+aTJjX2FkYXA7CiAKIAlpZiAoMCA9PSBidXMtPmkyY19yYykgewotCQlwcmludGsoIiVzOiBpMmMgYnVzICVkIHJlZ2lzdGVyZWRcbiIsIGRldi0+bmFtZSwgYnVzLT5ucik7CisJCWRwcmludGsoMSwgIiVzOiBpMmMgYnVzICVkIHJlZ2lzdGVyZWRcbiIsIGRldi0+bmFtZSwgYnVzLT5ucik7CiAJCWlmIChpMmNfc2NhbikKIAkJCWRvX2kyY19zY2FuKGRldi0+bmFtZSwgJmJ1cy0+aTJjX2NsaWVudCk7CiAJfSBlbHNlCi0JCXByaW50aygiJXM6IGkyYyBidXMgJWQgcmVnaXN0ZXIgRkFJTEVEXG4iLCBkZXYtPm5hbWUsIGJ1cy0+bnIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaTJjIGJ1cyAlZCByZWdpc3RlciBGQUlMRURcbiIsCisJCQlkZXYtPm5hbWUsIGJ1cy0+bnIpOwogCiAJcmV0dXJuIGJ1cy0+aTJjX3JjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12YmkuYwppbmRleCAzNWU2MWNkLi41YjI5N2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12YmkuYwpAQCAtODUsMTggKzg1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGN4MjM4ODVfc3RvcF92YmlfZG1hKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KQotewotCS8qIHN0b3AgZG1hICovCi0JY3hfY2xlYXIoVklEX0FfRE1BX0NUTCwgMHgwMDAwMDAyMik7CiAKLQkvKiBkaXNhYmxlIGlycXMgKi8KLQljeF9jbGVhcihQQ0lfSU5UX01TSywgMHgwMDAwMDEpOwotCWN4X2NsZWFyKFZJRF9BX0lOVF9NU0ssIDB4MDAwMDAwMjIpOwotCXJldHVybiAwOwotfQotCi1pbnQgY3gyMzg4NV9yZXN0YXJ0X3ZiaV9xdWV1ZShzdHJ1Y3QgY3gyMzg4NV9kZXYgICAgKmRldiwKK3N0YXRpYyBpbnQgY3gyMzg4NV9yZXN0YXJ0X3ZiaV9xdWV1ZShzdHJ1Y3QgY3gyMzg4NV9kZXYgICAgKmRldiwKIAkJCSAgICAgc3RydWN0IGN4MjM4ODVfZG1hcXVldWUgKnEpCiB7CiAJc3RydWN0IGN4MjM4ODVfYnVmZmVyICpidWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwppbmRleCA2MDQ3Yzc4Li5hYjMxMTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKQEAgLTI0NCw3ICsyNDQsNyBAQAogfTsKIHN0YXRpYyBjb25zdCBpbnQgQ1gyMzg4NV9DVExTID0gQVJSQVlfU0laRShjeDIzODg1X2N0bHMpOwogCi1jb25zdCB1MzIgY3gyMzg4NV91c2VyX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGN4MjM4ODVfdXNlcl9jdHJsc1tdID0gewogCVY0TDJfQ0lEX1VTRVJfQ0xBU1MsCiAJVjRMMl9DSURfQlJJR0hUTkVTUywKIAlWNEwyX0NJRF9DT05UUkFTVCwKQEAgLTI1NCwxNCArMjU0LDEzIEBACiAJVjRMMl9DSURfQVVESU9fTVVURSwKIAkwCiB9OwotRVhQT1JUX1NZTUJPTChjeDIzODg1X3VzZXJfY3RybHMpOwogCiBzdGF0aWMgY29uc3QgdTMyICpjdHJsX2NsYXNzZXNbXSA9IHsKIAljeDIzODg1X3VzZXJfY3RybHMsCiAJTlVMTAogfTsKIAotdm9pZCBjeDIzODg1X3ZpZGVvX3dha2V1cChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwKK3N0YXRpYyB2b2lkIGN4MjM4ODVfdmlkZW9fd2FrZXVwKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LAogCQkgc3RydWN0IGN4MjM4ODVfZG1hcXVldWUgKnEsIHUzMiBjb3VudCkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9idWZmZXIgKmJ1ZjsKQEAgLTI4NiwxNyArMjg1LDE2IEBACiAJCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKIAkJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKIAl9Ci0JaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkKIAkJZGVsX3RpbWVyKCZxLT50aW1lb3V0KTsKLQl9IGVsc2UgeworCWVsc2UKIAkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzK0JVRkZFUl9USU1FT1VUKTsKLQl9CiAJaWYgKGJjICE9IDEpCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVkIGJ1ZmZlcnMgaGFuZGxlZCAoc2hvdWxkIGJlIDEpXG4iLAogCQkJX19mdW5jX18sIGJjKTsKIH0KIAotaW50IGN4MjM4ODVfc2V0X3R2bm9ybShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgdjRsMl9zdGRfaWQgbm9ybSkKK3N0YXRpYyBpbnQgY3gyMzg4NV9zZXRfdHZub3JtKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB2NGwyX3N0ZF9pZCBub3JtKQogewogCWRwcmludGsoMSwgIiVzKG5vcm0gPSAweCUwOHgpIG5hbWU6IFslc11cbiIsCiAJCV9fZnVuY19fLApAQCAtMzE0LDcgKzMxMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCB2aWRlb19kZXZpY2UgKmN4MjM4ODVfdmRldl9pbml0KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LAorc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgKmN4MjM4ODVfdmRldl9pbml0KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLAogCQkJCSAgICBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp0ZW1wbGF0ZSwKIAkJCQkgICAgY2hhciAqdHlwZSkKQEAgLTMzNCw3ICszMzIsNyBAQAogCXJldHVybiB2ZmQ7CiB9CiAKLWludCBjeDIzODg1X2N0cmxfcXVlcnkoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKK3N0YXRpYyBpbnQgY3gyMzg4NV9jdHJsX3F1ZXJ5KHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpCiB7CiAJaW50IGk7CiAKQEAgLTM1MSw3ICszNDksNiBAQAogCSpxY3RybCA9IGN4MjM4ODVfY3Rsc1tpXS52OwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChjeDIzODg1X2N0cmxfcXVlcnkpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiByZXNvdXJjZSBtYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zODEsMTIgKzM3OCwxMiBAQAogCiBzdGF0aWMgaW50IHJlc19jaGVjayhzdHJ1Y3QgY3gyMzg4NV9maCAqZmgsIHVuc2lnbmVkIGludCBiaXQpCiB7Ci0JcmV0dXJuIChmaC0+cmVzb3VyY2VzICYgYml0KTsKKwlyZXR1cm4gZmgtPnJlc291cmNlcyAmIGJpdDsKIH0KIAogc3RhdGljIGludCByZXNfbG9ja2VkKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgYml0KQogewotCXJldHVybiAoZGV2LT5yZXNvdXJjZXMgJiBiaXQpOworCXJldHVybiBkZXYtPnJlc291cmNlcyAmIGJpdDsKIH0KIAogc3RhdGljIHZvaWQgcmVzX2ZyZWUoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHN0cnVjdCBjeDIzODg1X2ZoICpmaCwKQEAgLTQwMiw3ICszOTksNyBAQAogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIH0KIAotaW50IGN4MjM4ODVfdmlkZW9fbXV4KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCitzdGF0aWMgaW50IGN4MjM4ODVfdmlkZW9fbXV4KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCiB7CiAJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKIAltZW1zZXQoJnJvdXRlLCAwLCBzaXplb2Yocm91dGUpKTsKQEAgLTQyMiwxMCArNDE5LDkgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChjeDIzODg1X3ZpZGVvX211eCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotaW50IGN4MjM4ODVfc2V0X3NjYWxlKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgd2lkdGgsCitzdGF0aWMgaW50IGN4MjM4ODVfc2V0X3NjYWxlKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgd2lkdGgsCiAJdW5zaWduZWQgaW50IGhlaWdodCwgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQogewogCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKQEAgLTczMSw2ICs3MjcsNyBAQAogCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKIAlpbnQgcmFkaW8gPSAwOwogCisJbG9ja19rZXJuZWwoKTsKIAlsaXN0X2Zvcl9lYWNoKGxpc3QsICZjeDIzODg1X2Rldmxpc3QpIHsKIAkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGN4MjM4ODVfZGV2LCBkZXZsaXN0KTsKIAkJaWYgKGgtPnZpZGVvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKQEAgLTc0OCwxNiArNzQ1LDIwIEBACiAJCQlkZXYgICA9IGg7CiAJCX0KIAl9Ci0JaWYgKE5VTEwgPT0gZGV2KQorCWlmIChOVUxMID09IGRldikgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAogCWRwcmludGsoMSwgIm9wZW4gbWlub3I9JWQgcmFkaW89JWQgdHlwZT0lc1xuIiwKIAkJbWlub3IsIHJhZGlvLCB2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOwogCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGZoKQorCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwogCWZoLT5kZXYgICAgICA9IGRldjsKIAlmaC0+cmFkaW8gICAgPSByYWRpbzsKQEAgLTc3NSw2ICs3NzYsNyBAQAogCiAJZHByaW50aygxLCAicG9zdCB2aWRlb2J1Zl9xdWV1ZV9pbml0KClcbiIpOwogCisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04ODQsMjEgKzg4NiwyMSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBWSURFTyBDVFJMIElPQ1RMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotaW50IGN4MjM4ODVfZ2V0X2NvbnRyb2woc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3N0YXRpYyBpbnQgY3gyMzg4NV9nZXRfY29udHJvbChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwKKwlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCiB7CiAJZHByaW50aygxLCAiJXMoKSBjYWxsaW5nIGN4MjU4NDAoVklESU9DX0dfQ1RSTClcbiIsIF9fZnVuY19fKTsKIAljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0dfQ1RSTCwgY3RsKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woY3gyMzg4NV9nZXRfY29udHJvbCk7CiAKLWludCBjeDIzODg1X3NldF9jb250cm9sKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCitzdGF0aWMgaW50IGN4MjM4ODVfc2V0X2NvbnRyb2woc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsCisJc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQogewogCWRwcmludGsoMSwgIiVzKCkgY2FsbGluZyBjeDI1ODQwKFZJRElPQ19TX0NUUkwpIgogCQkiIChkaXNhYmxlZCAtIG5vIGFjdGlvbilcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woY3gyMzg4NV9zZXRfY29udHJvbCk7CiAKIHN0YXRpYyB2b2lkIGluaXRfY29udHJvbHMoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCiB7CkBAIC0xMDcyLDI5ICsxMDc0LDI5IEBACiAJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnApCiB7CiAJc3RydWN0IGN4MjM4ODVfZmggKmZoID0gcHJpdjsKLQlyZXR1cm4gKHZpZGVvYnVmX3JlcWJ1ZnMoZ2V0X3F1ZXVlKGZoKSwgcCkpOworCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKGdldF9xdWV1ZShmaCksIHApOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAlzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCiB7CiAJc3RydWN0IGN4MjM4ODVfZmggKmZoID0gcHJpdjsKLQlyZXR1cm4gKHZpZGVvYnVmX3F1ZXJ5YnVmKGdldF9xdWV1ZShmaCksIHApKTsKKwlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoZ2V0X3F1ZXVlKGZoKSwgcCk7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJc3RydWN0IHY0bDJfYnVmZmVyICpwKQogewogCXN0cnVjdCBjeDIzODg1X2ZoICpmaCA9IHByaXY7Ci0JcmV0dXJuICh2aWRlb2J1Zl9xYnVmKGdldF9xdWV1ZShmaCksIHApKTsKKwlyZXR1cm4gdmlkZW9idWZfcWJ1ZihnZXRfcXVldWUoZmgpLCBwKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJc3RydWN0IHY0bDJfYnVmZmVyICpwKQogewogCXN0cnVjdCBjeDIzODg1X2ZoICpmaCA9IHByaXY7Ci0JcmV0dXJuICh2aWRlb2J1Zl9kcWJ1ZihnZXRfcXVldWUoZmgpLCBwLAotCQkJCWZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSk7CisJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKGdldF9xdWV1ZShmaCksIHAsCisJCQkJZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTExNDYsNyArMTE0OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjeDIzODg1X2VudW1faW5wdXQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX2lucHV0ICppKQorc3RhdGljIGludCBjeDIzODg1X2VudW1faW5wdXQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX2lucHV0ICppKQogewogCXN0YXRpYyBjb25zdCBjaGFyICppbmFtZVtdID0gewogCQlbQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTFdID0gIkNvbXBvc2l0ZTEiLApAQCAtMTE3OSw3ICsxMTgxLDYgQEAKIAkJaS0+c3RkID0gQ1gyMzg4NV9OT1JNUzsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woY3gyMzg4NV9lbnVtX2lucHV0KTsKIAogc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKQEAgLTEyODgsNyArMTI4OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjeDIzODg1X3NldF9mcmVxKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCitzdGF0aWMgaW50IGN4MjM4ODVfc2V0X2ZyZXEoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKIAlpZiAodW5saWtlbHkoVU5TRVQgPT0gZGV2LT50dW5lcl90eXBlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzA3LDcgKzEzMDgsNiBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGN4MjM4ODVfc2V0X2ZyZXEpOwogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAppbmRleCBlMjNkOTdjLi4xZDUzZjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAotI2RlZmluZSBDWDIzODg1X1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLDAsMSkKKyNkZWZpbmUgQ1gyMzg4NV9WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSkKIAogI2RlZmluZSBVTlNFVCAoLTFVKQogCkBAIC02NCw2ICs2NCw4IEBACiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE3MDAgICAgICAgIDgKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTQwMCAgICAgICAgOQogI2RlZmluZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfN19EVUFMX0VYUCAxMAorI2RlZmluZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTF9FWFAgMTEKKyNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0ggMTIKIAogLyogQ3VycmVudGx5IHVuc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXI6IFBBTC9ILCBOVFNDL0tyLCBTRUNBTSBCL0cvSC9MQyAqLwogI2RlZmluZSBDWDIzODg1X05PUk1TIChcCkBAIC0yMjMsNyArMjI1LDcgQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBucjsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBzcmFtX2Nobm87CiAKLQlzdHJ1Y3QgdmlkZW9idWZfZHZiICAgICAgICBkdmI7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgZnJvbnRlbmRzOwogCiAJLyogZG1hIHF1ZXVlcyAqLwogCXN0cnVjdCBjeDIzODg1X2RtYXF1ZXVlICAgIG1wZWdxOwpAQCAtMjYwLDYgKzI2Miw5IEBACiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NlbF92YWw7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgdmxkX21pc2NfdmFsOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGh3X3NvcF9jdHJsX3ZhbDsKKworCS8qIEFsbG93IGEgc2luZ2xlIHRzcG9ydCB0byBoYXZlIG11bHRpcGxlIGZyb250ZW5kcyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIG51bV9mcm9udGVuZHM7CiB9OwogCiBzdHJ1Y3QgY3gyMzg4NV9kZXYgewpAQCAtMzY1LDE0ICszNzAsMTQgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgY3hfcmVhZChyZWcpICAgICAgICAgICAgIHJlYWRsKGRldi0+bG1taW8gKyAoKHJlZyk+PjIpKQotI2RlZmluZSBjeF93cml0ZShyZWcsdmFsdWUpICAgICAgd3JpdGVsKCh2YWx1ZSksIGRldi0+bG1taW8gKyAoKHJlZyk+PjIpKQorI2RlZmluZSBjeF93cml0ZShyZWcsIHZhbHVlKSAgICAgd3JpdGVsKCh2YWx1ZSksIGRldi0+bG1taW8gKyAoKHJlZyk+PjIpKQogCi0jZGVmaW5lIGN4X2FuZG9yKHJlZyxtYXNrLHZhbHVlKSBcCisjZGVmaW5lIGN4X2FuZG9yKHJlZywgbWFzaywgdmFsdWUpIFwKICAgd3JpdGVsKChyZWFkbChkZXYtPmxtbWlvKygocmVnKT4+MikpICYgfihtYXNrKSkgfFwKICAgKCh2YWx1ZSkgJiAobWFzaykpLCBkZXYtPmxtbWlvKygocmVnKT4+MikpCiAKLSNkZWZpbmUgY3hfc2V0KHJlZyxiaXQpICAgICAgICAgIGN4X2FuZG9yKChyZWcpLChiaXQpLChiaXQpKQotI2RlZmluZSBjeF9jbGVhcihyZWcsYml0KSAgICAgICAgY3hfYW5kb3IoKHJlZyksKGJpdCksMCkKKyNkZWZpbmUgY3hfc2V0KHJlZywgYml0KSAgICAgICAgICBjeF9hbmRvcigocmVnKSwgKGJpdCksIChiaXQpKQorI2RlZmluZSBjeF9jbGVhcihyZWcsIGJpdCkgICAgICAgIGN4X2FuZG9yKChyZWcpLCAoYml0KSwgMCkKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MjM4ODUtY29yZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00MDksNyArNDE0LDggQEAKIGV4dGVybiBzdHJ1Y3QgY3gyMzg4NV9zdWJpZCBjeDIzODg1X3N1Ymlkc1tdOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBjeDIzODg1X2lkY291bnQ7CiAKLWV4dGVybiBpbnQgY3gyMzg4NV90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tbWFuZCwgaW50IGFyZyk7CitleHRlcm4gaW50IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHJpdiwgaW50IGNvbXBvbmVudCwKKwlpbnQgY29tbWFuZCwgaW50IGFyZyk7CiBleHRlcm4gdm9pZCBjeDIzODg1X2NhcmRfbGlzdChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldik7CiBleHRlcm4gaW50ICBjeDIzODg1X2lyX2luaXQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpOwogZXh0ZXJuIHZvaWQgY3gyMzg4NV9ncGlvX3NldHVwKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KTsKQEAgLTQ3NywxMSArNDgzLDMgQEAKIHsKIAlyZXR1cm4gKG5vcm0gJiAoVjRMMl9TVERfTU4gJiB+VjRMMl9TVERfUEFMX05jKSkgPyA3NTQgOiA5MjI7CiB9Ci0KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKiBrYXRlOiBlb2wgInVuaXgiOyBpbmRlbnQtd2lkdGggMzsgcmVtb3ZlLXRyYWlsaW5nLXNwYWNlIG9uOyByZXBsYWNlLXRyYWlsaW5nLXNwYWNlLXNhdmUgb247IHRhYi13aWR0aCA4OyByZXBsYWNlLXRhYnMgb2ZmOyBzcGFjZS1pbmRlbnQgb2ZmOyBtaXhlZC1pbmRlbnQgb2ZmCi0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKaW5kZXggNjlmMmJiZC4uNThlNmVmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKQEAgLTE0MSwxMCArMTQxLDExIEBACiAJCXU4IGxjclsyNF07CiAKIAkJZm10ID0gYXJnOwotCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKQorCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCisJCSAgICBmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKLQkJaWYgKHN2YmktPnNlcnZpY2Vfc2V0ID09IDApIHsKKwkJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CiAJCQkvKiByYXcgVkJJICovCiAJCQltZW1zZXQoc3ZiaSwgMCwgc2l6ZW9mKCpzdmJpKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKaW5kZXggOWRkN2JkZi4uMGI5ZTVmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKQEAgLTU4LDYgKzU4LDEwIEBACiAJc2VsZWN0IERWQl9JU0w2NDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfUzVIMTQxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfQ1gyNDExNiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDI4OCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RCNjAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBEVkIvQVRTQyBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIENvbmV4YW50IDIzODh4IGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCmluZGV4IDlhMTM3NGEuLmU3MTM2OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCkBAIC0xMDU3LDEyICsxMDU3LDE1IEBACiAJc3RydWN0IGN4ODgwMl9kcml2ZXIgKmRydiA9IE5VTEw7CiAJaW50IGVycjsKIAorCWxvY2tfa2VybmVsKCk7CiAJZGV2ID0gY3g4ODAyX2dldF9kZXZpY2UoaW5vZGUpOwogCiAJZHByaW50ayggMSwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoZGV2ID09IE5VTEwpCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJLyogTWFrZSBzdXJlIHdlIGNhbiBhY3F1aXJlIHRoZSBoYXJkd2FyZSAqLwogCWRydiA9IGN4ODgwMl9nZXRfZHJpdmVyKGRldiwgQ1g4OF9NUEVHX0JMQUNLQklSRCk7CkBAIC0xMDcwLDYgKzEwNzMsNyBAQAogCQllcnIgPSBkcnYtPnJlcXVlc3RfYWNxdWlyZShkcnYpOwogCQlpZihlcnIgIT0gMCkgewogCQkJZHByaW50aygxLCIlczogVW5hYmxlIHRvIGFjcXVpcmUgaGFyZHdhcmUsICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9CkBAIC0xMDc3LDYgKzEwODEsNyBAQAogCWlmIChibGFja2JpcmRfaW5pdGlhbGl6ZV9jb2RlYyhkZXYpIDwgMCkgewogCQlpZiAoZHJ2KQogCQkJZHJ2LT5yZXF1ZXN0X3JlbGVhc2UoZHJ2KTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZHByaW50aygxLCJvcGVuIG1pbm9yPSVkXG4iLG1pbm9yKTsKQEAgLTEwODYsNiArMTA5MSw3IEBACiAJaWYgKE5VTEwgPT0gZmgpIHsKIAkJaWYgKGRydikKIAkJCWRydi0+cmVxdWVzdF9yZWxlYXNlKGRydik7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwpAQCAtMTEwMSw2ICsxMTA3LDcgQEAKIAkvKiBGSVhNRTogbG9ja2luZyBhZ2FpbnN0IG90aGVyIHZpZGVvIGRldmljZSAqLwogCWN4ODhfc2V0X3NjYWxlKGRldi0+Y29yZSwgZGV2LT53aWR0aCwgZGV2LT5oZWlnaHQsCiAJCQlmaC0+bXBlZ3EuZmllbGQpOworCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggZGUxOTlhMi4uZmJjMjI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCkBAIC0xMjcwLDI3ICsxMjcwLDQwIEBACiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMF0gPSB7Ci0JCS8qIEZJWE1FOiBBZGQgZHZiICYgcmFkaW8gc3VwcG9ydCAqLwogCQkubmFtZSAgICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWLUhWUjMwMDAgVHJpTW9kZSBBbmFsb2cvRFZCLVMvRFZCLVQiLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5hdWRpb19jaGlwICAgICA9IFY0TDJfSURFTlRfV004Nzc1LAogCQkuaW5wdXQgICAgICAgICAgPSB7ewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHg4NGJmLAorCQkJLyogMTogVFYgQXVkaW8gLyBGTSBNb25vICovCisJCQkuYXVkaW9yb3V0ZSA9IDEsCiAJCX0sewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICA9IDEsCiAJCQkuZ3BpbzAgID0gMHg4NGJmLAorCQkJLyogMjogTGluZS1JbiAqLworCQkJLmF1ZGlvcm91dGUgPSAyLAogCQl9LHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICA9IDIsCiAJCQkuZ3BpbzAgID0gMHg4NGJmLAorCQkJLyogMjogTGluZS1JbiAqLworCQkJLmF1ZGlvcm91dGUgPSAyLAogCQl9fSwKKwkJLnJhZGlvID0geworCQkJLnR5cGUgICA9IENYODhfUkFESU8sCisJCQkuZ3BpbzAJPSAweDg0YmYsCisJCQkvKiA0OiBGTSBTdGVyZW8gKHVudGVzdGVkKSAqLworCQkJLmF1ZGlvcm91dGUgPSA4LAorCQl9LAogCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCQkubnVtX2Zyb250ZW5kcwk9IDIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9OT1JXT09EX01JQ1JPXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk5vcndvb2QgTWljcm8gVFYgVHVuZXIiLApAQCAtMTM0OSwyNyArMTM2MiwzNCBAQAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmF1ZGlvX2NoaXAgICAgID0gVjRMMl9JREVOVF9XTTg3NzUsCisJCS8qCisJCSAqIGdwaW8wIGFzIHJlcG9ydGVkIGJ5IE1pa2UgQ3Jhc2ggPG1pa2UgQVQgbWlrZWNyYXNoLmNvbT4KKwkJICovCiAJCS5pbnB1dAkJPSB7ewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCi0JCQkuZ3BpbzAJPSAweGU3ODAsCisJCQkuZ3BpbzAJPSAweGVmODgsCisJCQkvKiAxOiBUViBBdWRpbyAvIEZNIE1vbm8gKi8KIAkJCS5hdWRpb3JvdXRlID0gMSwKIAkJfSx7CiAJCQkudHlwZQk9IENYODhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXgJPSAxLAotCQkJLmdwaW8wCT0gMHhlNzgwLAorCQkJLmdwaW8wCT0gMHhlZjg4LAorCQkJLyogMjogTGluZS1JbiAqLwogCQkJLmF1ZGlvcm91dGUgPSAyLAogCQl9LHsKIAkJCS50eXBlCT0gQ1g4OF9WTVVYX1NWSURFTywKIAkJCS52bXV4CT0gMiwKLQkJCS5ncGlvMAk9IDB4ZTc4MCwKKwkJCS5ncGlvMAk9IDB4ZWY4OCwKKwkJCS8qIDI6IExpbmUtSW4gKi8KIAkJCS5hdWRpb3JvdXRlID0gMiwKIAkJfX0sCi0JCS8qIGZpeG1lOiBBZGQgcmFkaW8gc3VwcG9ydCAqLwogCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCIHwgQ1g4OF9NUEVHX0JMQUNLQklSRCwKIAkJLnJhZGlvID0gewogCQkJLnR5cGUgICA9IENYODhfUkFESU8sCi0JCQkuZ3BpbzAJPSAweGU3ODAsCisJCQkuZ3BpbzAJPSAweGVmODgsCisJCQkvKiA0OiBGTSBTdGVyZW8gKHVudGVzdGVkKSAqLworCQkJLmF1ZGlvcm91dGUgPSA4LAogCQl9LAogCX0sCiAJW0NYODhfQk9BUkRfQURTVEVDSF9QVFZfMzkwXSA9IHsKQEAgLTE0NDYsMTUgKzE0NjYsMjYgQEAKIAkJLm5hbWUgICAgICAgICAgID0gIlBpbm5hY2xlIEh5YnJpZCBQQ1RWIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfWEMyMDI4LAogCQkudHVuZXJfYWRkciAgICAgPSAweDYxLAorCQkucmFkaW9fdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS5yYWRpb19hZGRyICAgICA9IDB4NjEsCiAJCS5pbnB1dCAgICAgICAgICA9IHsgewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCisJCQkuZ3BpbzAgID0gMHgwMDRmZiwKKwkJCS5ncGlvMSAgPSAweDAxMGZmLAorCQkJLmdwaW8yICA9IDB4MDAwMDEsCiAJCX0sIHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAxLAorCQkJLmdwaW8wICA9IDB4MDA0ZmIsCisJCQkuZ3BpbzEgID0gMHgwMTBlZiwKKwkJCS5hdWRpb3JvdXRlID0gMSwKIAkJfSwgewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweDAwNGZiLAorCQkJLmdwaW8xICA9IDB4MDEwZWYsCisJCQkuYXVkaW9yb3V0ZSA9IDEsCiAJCX0gfSwKIAkJLnJhZGlvID0gewogCQkJLnR5cGUgICA9IENYODhfUkFESU8sCkBAIC0xNDYyLDYgKzE0OTMsNyBAQAogCQkJLmdwaW8xICA9IDB4MDEwZmYsCiAJCQkuZ3BpbzIgID0gMHgwZmYsCiAJCX0sCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9XSU5GQVNUX1RWMjAwMF9YUF9HTE9CQUxdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiV2luZmFzdCBUVjIwMDAgWFAgR2xvYmFsIiwKQEAgLTE1NjYsOSArMTU5OCw5IEBACiAJfSwKIAlbQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX1BST10gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIERWQi1UIFBSTyIsCi0JCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwgLyogWFhYOiBIYXMgWEMzMDI4ICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2FkZHIgICAgID0gMHg2MSwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCi0JCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5pbnB1dCAgICAgICAgICA9IHsgewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLApAQCAtMTYyNSw2ICsxNjU3LDM2IEBACiAJCQkuZ3BpbzIgPSAweDBjZmIsCiAJCX0sCiAJfSwKKwlbQ1g4OF9CT0FSRF9QUk9MSU5LX1BWX0dMT0JBTF9YVFJFTUVdID0geworCQkubmFtZSAgICAgICAgICAgPSAiUHJvbGluayBQaXhlbHZpZXcgR2xvYmFsIEV4dHJlbWUiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9hZGRyICAgICA9IDB4NjEsCisJCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IDAsCisJCQkuZ3BpbzAgPSAweDA0ZmIsCisJCQkuZ3BpbzEgPSAweDA0MDgwLAorCQkJLmdwaW8yID0gMHgwY2Y3LAorCQl9LCB7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMSwKKwkJCS5ncGlvMCA9IDB4MDRmYiwKKwkJCS5ncGlvMSA9IDB4MDQwODAsCisJCQkuZ3BpbzIgPSAweDBjZmIsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IDIsCisJCQkuZ3BpbzAgPSAweDA0ZmIsCisJCQkuZ3BpbzEgPSAweDA0MDgwLAorCQkJLmdwaW8yID0gMHgwY2ZiLAorCQl9IH0sCisJCS5yYWRpbyA9IHsKKwkJCS50eXBlICAgPSBDWDg4X1JBRElPLAorCQkJLmdwaW8wID0gMHgwNGZmLAorCQkJLmdwaW8xID0gMHgwNDA4MCwKKwkJCS5ncGlvMiA9IDB4MGNmNywKKwkJfSwKKwl9LAogCS8qIEJvdGggcmFkaW8sIGFuYWxvZyBhbmQgQVRTQyB3b3JrIHdpdGggdGhpcyBib2FyZC4KIAkgICBIb3dldmVyLCBmb3IgYW5hbG9nIHRvIHdvcmssIHM1aDE0MDkgZ2F0ZSBzaG91bGQgYmUgb3BlbiwKIAkgICBvdGhlcndpc2UsIHR1bmVyLXhjMzAyOCB3b24ndCBiZSBkZXRlY3RlZC4KQEAgLTE2NjQsNiArMTcyNiwxNTEgQEAKIAkJfSwKIAkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAorCVtDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UVi1IVlI0MDAwIERWQi1TL1MyL1QvSHlicmlkIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkuYXVkaW9fY2hpcCAgICAgPSBWNEwyX0lERU5UX1dNODc3NSwKKwkJLyoKKwkJICogR1BJTzAgKFdJTlRWMjAwMCkKKwkJICoKKwkJICogQW5hbG9ndWUgICAgIFNBVCAgICAgRFZCLVQKKwkJICogQW50ZW5uYSAgICAgIDB4YzRiZiAgMHhjNGJiCisJCSAqIENvbXBvc2l0ZSAgICAweGM0YmYgIDB4YzRiYgorCQkgKiBTLVZpZGVvICAgICAgMHhjNGJmICAweGM0YmIKKwkJICogQ29tcG9zaXRlMSAgIDB4YzRmZiAgMHhjNGZiCisJCSAqIFMtVmlkZW8xICAgICAweGM0ZmYgIDB4YzRmYgorCQkgKgorCQkgKiBCSVQgIFZBTFVFICAgRlVOQ1RJT04gR1B7eH1fSU8KKwkJICogMCAgICAxICAgICAgIEk6PworCQkgKiAxICAgIDEgICAgICAgSTo/CisJCSAqIDIgICAgMSAgICAgICBPOk1QRUcgUE9SVCAwPURWQi1UIDE9RFZCLVMKKwkJICogMyAgICAxICAgICAgIEk6PworCQkgKiA0ICAgIDEgICAgICAgSTo/CisJCSAqIDUgICAgMSAgICAgICBJOj8KKwkJICogNiAgICAwICAgICAgIE86SU5QVVQgU0VMRUNUT1IgMD1JTlRFUk5BTCAxPUVYUEFOU0lPTgorCQkgKiA3ICAgIDEgICAgICAgTzpEVkItVCBERU1PRCBSRVNFVCBMT1cKKwkJICoKKwkJICogQklUICBWQUxVRSAgIEZVTkNUSU9OIEdQe3h9X09FCisJCSAqIDggICAgMCAgICAgICBJCisJCSAqIDkgICAgMCAgICAgICBJCisJCSAqIGEgICAgMSAgICAgICBPCisJCSAqIGIgICAgMCAgICAgICBJCisJCSAqIGMgICAgMCAgICAgICBJCisJCSAqIGQgICAgMCAgICAgICBJCisJCSAqIGUgICAgMSAgICAgICBPCisJCSAqIGYgICAgMSAgICAgICBPCisJCSAqCisJCSAqIFdNODc3NSBBREMKKwkJICoKKwkJICogMTogVFYgQXVkaW8gLyBGTSBNb25vCisJCSAqIDI6IExpbmUtSW4KKwkJICogMzogTGluZS1JbiBFeHBhbnNpb24KKwkJICogNDogRk0gU3RlcmVvCisJCSAqLworCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IDAsCisJCQkuZ3BpbzAgID0gMHhjNGJmLAorCQkJLyogMTogVFYgQXVkaW8gLyBGTSBNb25vICovCisJCQkuYXVkaW9yb3V0ZSA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmdwaW8wICA9IDB4YzRiZiwKKwkJCS8qIDI6IExpbmUtSW4gKi8KKwkJCS5hdWRpb3JvdXRlID0gMiwKKwkJfSwgeworCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweGM0YmYsCisJCQkvKiAyOiBMaW5lLUluICovCisJCQkuYXVkaW9yb3V0ZSA9IDIsCisJCX0gfSwKKwkJLnJhZGlvID0geworCQkJLnR5cGUgICA9IENYODhfUkFESU8sCisJCQkuZ3BpbzAJPSAweGM0YmYsCisJCQkvKiA0OiBGTSBTdGVyZW8gKi8KKwkJCS5hdWRpb3JvdXRlID0gOCwKKwkJfSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKKwkJLm51bV9mcm9udGVuZHMJPSAyLAorCX0sCisJW0NYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDBMSVRFXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UVi1IVlI0MDAwKExpdGUpIERWQi1TL1MyIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCisJCQkudm11eCAgID0gMCwKKwkJfSB9LAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCX0sCisJW0NYODhfQk9BUkRfVEVWSUlfUzQyMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUZVZpaSBTNDIwIERWQi1TIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCisJCQkudm11eCAgID0gMCwKKwkJfSB9LAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCX0sCisJW0NYODhfQk9BUkRfVEVWSUlfUzQ2MF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUZVZpaSBTNDYwIERWQi1TL1MyIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCisJCQkudm11eCAgID0gMCwKKwkJfSB9LAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCX0sCisJW0NYODhfQk9BUkRfT01JQ09NX1NTNF9QQ0ldID0geworCQkubmFtZSAgICAgICAgICAgPSAiT21pY29tIFNTNCBEVkItUy9TMiBQQ0kiLAorCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0RWQiwKKwkJCS52bXV4ICAgPSAwLAorCQl9IH0sCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCisJfSwKKwlbQ1g4OF9CT0FSRF9UQlNfODkyMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUQlMgODkyMCBEVkItUy9TMiIsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0RWQiwKKwkJCS52bXV4ICAgPSAxLAorCQl9IH0sCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCisJfSwKKwlbQ1g4OF9CT0FSRF9QUk9GXzczMDBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiUFJPRiA3MzAwIERWQi1TL1MyIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCisJCQkudm11eCAgID0gMCwKKwkJfSB9LAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIwMTAsOSArMjIxNyw1MyBAQAogCQkuc3ViZGV2aWNlID0gMHg0OTM1LAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9QUk9MSU5LX1BWXzgwMDBHVCwKIAl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDE1NTQsCisJCS5zdWJkZXZpY2UgPSAweDQ5NzYsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1BST0xJTktfUFZfR0xPQkFMX1hUUkVNRSwKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDE3ZGUsCiAJCS5zdWJkZXZpY2UgPSAweDA4YzEsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0tXT1JMRF9BVFNDXzEyMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDY5MDAsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4NjkwNCwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHg2OTAyLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDY5MDUsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURSwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDY5MDYsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURSwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweGQ0MjAsCisJCS5zdWJkZXZpY2UgPSAweDkwMjIsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1RFVklJX1M0MjAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHhkNDYwLAorCQkuc3ViZGV2aWNlID0gMHg5MDIyLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9URVZJSV9TNDYwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4QTA0NCwKKwkJLnN1YmRldmljZSA9IDB4MjAxMSwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfT01JQ09NX1NTNF9QQ0ksCisJfSwgeworCQkuc3VidmVuZG9yID0gMHg4OTIwLAorCQkuc3ViZGV2aWNlID0gMHg4ODg4LAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9UQlNfODkyMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweEIwMzMsCisJCS5zdWJkZXZpY2UgPSAweDMwMzMsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1BST0ZfNzMwMCwKIAl9LAogfTsKIApAQCAtMjA2NSw2ICsyMzE2LDEzIEBACiAJY2FzZSAxNDY2OTogLyogV2luVFYtSFZSMzAwMCAoT0VNLCBubyBJUiwgbm8gYi9wYW5lbCB2aWRlbyAtIExvdyBwcm9maWxlKSAqLwogCWNhc2UgMjg1NTI6IC8qIFdpblRWLVBWUiAnUm9zbHluJyAoTm8gSVIpICovCiAJY2FzZSAzNDUxOTogLyogV2luVFYtUENJLUZNICovCisJY2FzZSA2OTAwOToKKwkJLyogV2luVFYtSFZSNDAwMCAoRFZCUy9TMi9ULCBWaWRlbyBhbmQgSVIsIGJhY2sgcGFuZWwgaW5wdXRzKSAqLworCWNhc2UgNjkxMDA6IC8qIFdpblRWLUhWUjQwMDBMSVRFIChEVkJTL1MyLCBJUikgKi8KKwljYXNlIDY5NTAwOiAvKiBXaW5UVi1IVlI0MDAwTElURSAoRFZCUy9TMiwgTm8gSVIpICovCisJY2FzZSA2OTU1OToKKwkJLyogV2luVFYtSFZSNDAwMCAoRFZCUy9TMi9ULCBWaWRlbyBubyBJUiwgYmFjayBwYW5lbCBpbnB1dHMpICovCisJY2FzZSA2OTU2OTogLyogV2luVFYtSFZSNDAwMCAoRFZCUy9TMi9ULCBWaWRlbyBubyBJUikgKi8KIAljYXNlIDkwMDAyOiAvKiBOb3ZhLVQtUENJICg5MDAyKSAqLwogCWNhc2UgOTIwMDE6IC8qIE5vdmEtUy1QbHVzIChWaWRlbyBhbmQgSVIpICovCiAJY2FzZSA5MjAwMjogLyogTm92YS1TLVBsdXMgKFZpZGVvIGFuZCBJUikgKi8KQEAgLTIxNDksOSArMjQwNywyMSBAQAogewogCXN3aXRjaCAoY29tbWFuZCkgewogCWNhc2UgWEMyMDI4X1RVTkVSX1JFU0VUOgotCQljeF93cml0ZShNT19HUDBfSU8sIDB4MTAxMDAwKTsKLQkJbWRlbGF5KDUpOwotCQljeF9zZXQoTU9fR1AwX0lPLCAweDEwMTAxMCk7CisJCXN3aXRjaCAoY29yZS0+Ym9hcmRucikgeworCQljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X1BDSV9OQU5POgorCQkJLyogR1BJTy00IHhjMzAyOCB0dW5lciAqLworCisJCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAxMDAwKTsKKwkJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDAxMCk7CisJCQltc2xlZXAoMTAwKTsKKwkJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwMTApOworCQkJbXNsZWVwKDEwMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWN4X3dyaXRlKE1PX0dQMF9JTywgMHgxMDEwMDApOworCQkJbWRlbGF5KDUpOworCQkJY3hfc2V0KE1PX0dQMF9JTywgMHgxMDEwMTApOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjI1OCw4ICsyNTI4LDEwIEBACiAJCXJldHVybiBjeDg4X3hjMzAyOF9nZW5pYXRlY2hfdHVuZXJfY2FsbGJhY2soY29yZSwKIAkJCQkJCQljb21tYW5kLCBhcmcpOwogCWNhc2UgQ1g4OF9CT0FSRF9QUk9MSU5LX1BWXzgwMDBHVDoKKwljYXNlIENYODhfQk9BUkRfUFJPTElOS19QVl9HTE9CQUxfWFRSRU1FOgogCQlyZXR1cm4gY3g4OF9wdl84MDAwZ3RfY2FsbGJhY2soY29yZSwgY29tbWFuZCwgYXJnKTsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9QUk86CisJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9QQ0lfTkFOTzoKIAkJcmV0dXJuIGN4ODhfZHZpY29feGMyMDI4X2NhbGxiYWNrKGNvcmUsIGNvbW1hbmQsIGFyZyk7CiAJfQogCkBAIC0yMzI3LDcgKzI1OTksNyBAQAogCXJldHVybiAwOyAvKiBTaG91bGQgbmV2ZXIgYmUgaGVyZSAqLwogfQogCi1pbnQgY3g4OF90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tbWFuZCwgaW50IGFyZykKK2ludCBjeDg4X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKQogewogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSAqaTJjX2FsZ28gPSBwcml2OwogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmU7CkBAIC0yMzQ0LDYgKzI2MTYsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoY29tcG9uZW50ICE9IERWQl9GUk9OVEVORF9DT01QT05FTlRfVFVORVIpCisJCXJldHVybiAtRUlOVkFMOworCiAJc3dpdGNoIChjb3JlLT5ib2FyZC50dW5lcl90eXBlKSB7CiAJCWNhc2UgVFVORVJfWEMyMDI4OgogCQkJaW5mb19wcmludGsoY29yZSwgIkNhbGxpbmcgWEMyMDI4LzMwMjggY2FsbGJhY2tcbiIpOwpAQCAtMjM5MiwxNiArMjY2NywyMiBAQAogewogCXN3aXRjaCAoY29yZS0+Ym9hcmRucikgewogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTMwMDoKLQkJLyogQnJpbmcgdGhlIDcwMiBkZW1vZCB1cCBiZWZvcmUgaTJjIHNjYW5uaW5nL2F0dGFjaCBvciBkZXZpY2VzIGFyZSBoaWRkZW4gKi8KLQkJLyogV2UgbGVhdmUgaGVyZSB3aXRoIHRoZSA3MDIgb24gdGhlIGJ1cyAqLwotCQljeF93cml0ZShNT19HUDBfSU8sIDB4MDAwMGU3ODApOworCQkvKgorCQkgKiBCcmluZyB0aGUgNzAyIGRlbW9kIHVwIGJlZm9yZSBpMmMgc2Nhbm5pbmcvYXR0YWNoIG9yIGRldmljZXMgYXJlIGhpZGRlbgorCQkgKiBXZSBsZWF2ZSBoZXJlIHdpdGggdGhlIDcwMiBvbiB0aGUgYnVzCisJCSAqCisJCSAqICJyZXNldCB0aGUgSVIgcmVjZWl2ZXIgb24gR1BJT1szXSIKKwkJICogUmVwb3J0ZWQgYnkgTWlrZSBDcmFzaCA8bWlrZSBBVCBtaWtlY3Jhc2guY29tPgorCQkgKi8KKwkJY3hfd3JpdGUoTU9fR1AwX0lPLCAweDAwMDBlZjg4KTsKIAkJdWRlbGF5KDEwMDApOwotCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwODApOworCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwODgpOwogCQl1ZGVsYXkoNTApOwotCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMDgwKTsgLyogNzAyIG91dCBvZiByZXNldCAqLworCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMDg4KTsgLyogNzAyIG91dCBvZiByZXNldCAqLwogCQl1ZGVsYXkoMTAwMCk7CiAJCWJyZWFrOwogCisJY2FzZSBDWDg4X0JPQVJEX1BST0xJTktfUFZfR0xPQkFMX1hUUkVNRToKIAljYXNlIENYODhfQk9BUkRfUFJPTElOS19QVl84MDAwR1Q6CiAJCWN4X3dyaXRlKE1PX0dQMl9JTywgMHhjZjcpOwogCQltZGVsYXkoNTApOwpAQCAtMjQxMSwxMCArMjY5MiwyMSBAQAogCQltc2xlZXAoMTApOwogCQlicmVhazsKIAotCSBjYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0dPTEQ6CisJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfN19HT0xEOgogCQkvKiBFbmFibGUgdGhlIHhjNTAwMCB0dW5lciAqLwogCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAxMDEwKTsKIAkJYnJlYWs7CisKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgorCQkvKiBJbml0IEdQSU8gKi8KKwkJY3hfd3JpdGUoTU9fR1AwX0lPLCBjb3JlLT5ib2FyZC5pbnB1dFswXS5ncGlvMCk7CisJCXVkZWxheSgxMDAwKTsKKwkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDAwMDAwMDgwKTsKKwkJdWRlbGF5KDUwKTsKKwkJY3hfc2V0KE1PX0dQMF9JTywgMHgwMDAwMDA4MCk7IC8qIDcwMiBvdXQgb2YgcmVzZXQgKi8KKwkJdWRlbGF5KDEwMDApOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTI0MzUsMTcgKzI3MjcsMjIgQEAKIAkJCWNvcmUtPmkyY19hbGdvLnVkZWxheSA9IDE2OwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9QUk86Ci0JCWN0bC0+c2NvZGVfdGFibGUgPSBYQzMwMjhfRkVfWkFSTElOSzQ1NjsKKwkJY3RsLT5kZW1vZCA9IFhDMzAyOF9GRV9aQVJMSU5LNDU2OwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfS1dPUkxEX0FUU0NfMTIwOgogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfUENJX05BTk86CiAJCWN0bC0+ZGVtb2QgPSBYQzMwMjhfRkVfT1JFTjUzODsKIAkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX1BST0xJTktfUFZfR0xPQkFMX1hUUkVNRToKIAljYXNlIENYODhfQk9BUkRfUFJPTElOS19QVl84MDAwR1Q6CiAJCS8qCi0JCSAqIFRoaXMgYm9hcmQgdXNlcyBub24tTVRTIGZpcm13YXJlCisJCSAqIFRob3NlIGJvYXJkcyB1c2VzIG5vbi1NVFMgZmlybXdhcmUKIAkJICovCiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9QSU5OQUNMRV9IWUJSSURfUENUVjoKKwkJY3RsLT5kZW1vZCA9IFhDMzAyOF9GRV9aQVJMSU5LNDU2OworCQljdGwtPm10cyA9IDE7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWN0bC0+ZGVtb2QgPSBYQzMwMjhfRkVfT1JFTjUzODsKIAkJY3RsLT5tdHMgPSAxOwpAQCAtMjQ4OSw2ICsyNzg2LDggQEAKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDBMUDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwOgorCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDBMSVRFOgogCQlpZiAoMCA9PSBjb3JlLT5pMmNfcmMpCiAJCQloYXVwcGF1Z2VfZWVwcm9tKGNvcmUsIGVlcHJvbSk7CiAJCWJyZWFrOwpAQCAtMjU3MCw3ICsyODY5LDE4IEBACiAJCXRlYTU3NjdfY2ZnLnByaXYgID0gJmN0bDsKIAogCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVFVORVJfU0VUX0NPTkZJRywgJnRlYTU3NjdfY2ZnKTsKKwkJYnJlYWs7CiAJfQorCWNhc2UgIENYODhfQk9BUkRfVEVWSUlfUzQyMDoKKwljYXNlICBDWDg4X0JPQVJEX1RFVklJX1M0NjA6CisJY2FzZSAgQ1g4OF9CT0FSRF9PTUlDT01fU1M0X1BDSToKKwljYXNlICBDWDg4X0JPQVJEX1RCU184OTIwOgorCWNhc2UgIENYODhfQk9BUkRfUFJPRl83MzAwOgorCQljeF93cml0ZShNT19TUlNUX0lPLCAwKTsKKwkJbXNsZWVwKDEwMCk7CisJCWN4X3dyaXRlKE1PX1NSU1RfSU8sIDEpOworCQltc2xlZXAoMTAwKTsKKwkJYnJlYWs7CiAJfSAvKmVuZCBzd2l0Y2goKSAqLwogCiAKQEAgLTI3MzQsMTAgKzMwNDQsMTQgQEAKIAogCW1lbWNweSgmY29yZS0+Ym9hcmQsICZjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZG5yXSwgc2l6ZW9mKGNvcmUtPmJvYXJkKSk7CiAKLQlpbmZvX3ByaW50ayhjb3JlLCAic3Vic3lzdGVtOiAlMDR4OiUwNHgsIGJvYXJkOiAlcyBbY2FyZD0lZCwlc11cbiIsCisJaWYgKCFjb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzKQorCQljb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzPTE7CisKKwlpbmZvX3ByaW50ayhjb3JlLCAic3Vic3lzdGVtOiAlMDR4OiUwNHgsIGJvYXJkOiAlcyBbY2FyZD0lZCwlc10sIGZyb250ZW5kKHMpOiAlZFxuIiwKIAkJcGNpLT5zdWJzeXN0ZW1fdmVuZG9yLCBwY2ktPnN1YnN5c3RlbV9kZXZpY2UsIGNvcmUtPmJvYXJkLm5hbWUsCiAJCWNvcmUtPmJvYXJkbnIsIGNhcmRbY29yZS0+bnJdID09IGNvcmUtPmJvYXJkbnIgPwotCQkiaW5zbW9kIG9wdGlvbiIgOiAiYXV0b2RldGVjdGVkIik7CisJCSJpbnNtb2Qgb3B0aW9uIiA6ICJhdXRvZGV0ZWN0ZWQiLAorCQljb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzKTsKIAogCWlmICh0dW5lcltjb3JlLT5ucl0gIT0gVU5TRVQpCiAJCWNvcmUtPmJvYXJkLnR1bmVyX3R5cGUgPSB0dW5lcltjb3JlLT5ucl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKaW5kZXggZDY1NmZlYy4uNjA3MDViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwpAQCAtNTQ5LDcgKzU0OSw4IEBACiAJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcytCVUZGRVJfVElNRU9VVCk7CiAJfQogCWlmIChiYyAhPSAxKQotCQlwcmludGsoIiVzOiAlZCBidWZmZXJzIGhhbmRsZWQgKHNob3VsZCBiZSAxKVxuIixfX2Z1bmNfXyxiYyk7CisJCWRwcmludGsoMiwgIiVzOiAlZCBidWZmZXJzIGhhbmRsZWQgKHNob3VsZCBiZSAxKVxuIiwKKwkJCV9fZnVuY19fLCBiYyk7CiB9CiAKIHZvaWQgY3g4OF9zaHV0ZG93bihzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCBkOTYxNzNmLi42OTY4YWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtNDgsNiArNDgsMTEgQEAKICNpbmNsdWRlICJ0dW5lci1zaW1wbGUuaCIKICNpbmNsdWRlICJ0ZGE5ODg3LmgiCiAjaW5jbHVkZSAiczVoMTQxMS5oIgorI2luY2x1ZGUgInN0djAyOTkuaCIKKyNpbmNsdWRlICJ6MDE5NGEuaCIKKyNpbmNsdWRlICJzdHYwMjg4LmgiCisjaW5jbHVkZSAic3RiNjAwMC5oIgorI2luY2x1ZGUgImN4MjQxMTYuaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJkcml2ZXIgZm9yIGN4MjM4OHggYmFzZWQgRFZCIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJDaHJpcyBQYXNjb2UgPGMucGFzY29lQGl0ZWUudXEuZWR1LmF1PiIpOwpAQCAtMTExLDEzICsxMTYsMjMgQEAKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2PSBmZS0+ZHZiLT5wcml2OwogCXN0cnVjdCBjeDg4MDJfZHJpdmVyICpkcnYgPSBOVUxMOwogCWludCByZXQgPSAwOworCWludCBmZV9pZDsKKworCWZlX2lkID0gdmlkZW9idWZfZHZiX2ZpbmRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCBmZSk7CisJaWYgKCFmZV9pZCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgTm8gZnJvbnRlbmQgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJZHJ2ID0gY3g4ODAyX2dldF9kcml2ZXIoZGV2LCBDWDg4X01QRUdfRFZCKTsKIAlpZiAoZHJ2KSB7Ci0JCWlmIChhY3F1aXJlKQorCQlpZiAoYWNxdWlyZSl7CisJCQlkZXYtPmZyb250ZW5kcy5hY3RpdmVfZmVfaWQgPSBmZV9pZDsKIAkJCXJldCA9IGRydi0+cmVxdWVzdF9hY3F1aXJlKGRydik7Ci0JCWVsc2UKKwkJfSBlbHNlIHsKIAkJCXJldCA9IGRydi0+cmVxdWVzdF9yZWxlYXNlKGRydik7CisJCQlkZXYtPmZyb250ZW5kcy5hY3RpdmVfZmVfaWQgPSAwOworCQl9CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTM3NSwzNyArMzkwLDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3g4OF9wY2lfbmFub19jYWxsYmFjayh2b2lkICpwdHIsIGludCBjb21tYW5kLCBpbnQgYXJnKQorc3RhdGljIGludCB0ZXZpaV9kdmJzX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgICAgIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKIHsKLQlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gcHRyOworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXY9IGZlLT5kdmItPnByaXY7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKIAotCXN3aXRjaCAoY29tbWFuZCkgewotCWNhc2UgWEMyMDI4X1RVTkVSX1JFU0VUOgotCQkvKiBTZW5kIHRoZSB0dW5lciBpbiB0aGVuIG91dCBvZiByZXNldCAqLwotCQlkcHJpbnRrKDEsICIlczogWEMyMDI4X1RVTkVSX1JFU0VUICVkXG4iLCBfX2Z1bmNfXywgYXJnKTsKLQotCQlzd2l0Y2ggKGNvcmUtPmJvYXJkbnIpIHsKLQkJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9QQ0lfTkFOTzoKLQkJCS8qIEdQSU8tNCB4YzMwMjggdHVuZXIgKi8KLQotCQkJY3hfc2V0KE1PX0dQMF9JTywgMHgwMDAwMTAwMCk7Ci0JCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwMTApOwotCQkJbXNsZWVwKDEwMCk7Ci0JCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMDEwKTsKLQkJCW1zbGVlcCgxMDApOworCXN3aXRjaCAodm9sdGFnZSkgeworCQljYXNlIFNFQ19WT0xUQUdFXzEzOgorCQkJcHJpbnRrKCJMTkIgVm9sdGFnZSBTRUNfVk9MVEFHRV8xM1xuIik7CisJCQljeF93cml0ZShNT19HUDBfSU8sIDB4MDAwMDYwNDApOwogCQkJYnJlYWs7Ci0JCX0KLQotCQlicmVhazsKLQljYXNlIFhDMjAyOF9SRVNFVF9DTEs6Ci0JCWRwcmludGsoMSwgIiVzOiBYQzIwMjhfUkVTRVRfQ0xLICVkXG4iLCBfX2Z1bmNfXywgYXJnKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZHByaW50aygxLCAiJXM6IHVua25vd24gY29tbWFuZCAlZCwgYXJnICVkXG4iLCBfX2Z1bmNfXywKLQkJCWNvbW1hbmQsIGFyZyk7Ci0JCXJldHVybiAtRUlOVkFMOworCQljYXNlIFNFQ19WT0xUQUdFXzE4OgorCQkJcHJpbnRrKCJMTkIgVm9sdGFnZSBTRUNfVk9MVEFHRV8xOFxuIik7CisJCQljeF93cml0ZShNT19HUDBfSU8sIDB4MDAwMDYwNjApOworCQkJYnJlYWs7CisJCWNhc2UgU0VDX1ZPTFRBR0VfT0ZGOgorCQkgICAJcHJpbnRrKCJMTkIgVm9sdGFnZSBTRUNfVk9MVEFHRV9vZmZcbiIpOworCQkJYnJlYWs7CiAJfQogCisJaWYgKGNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UpCisJCXJldHVybiBjb3JlLT5wcmV2X3NldF92b2x0YWdlKGZlLCB2b2x0YWdlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDU2LDcgKzQ2MiwxMiBAQAogc3RhdGljIHN0cnVjdCB4YzUwMDBfY29uZmlnIHBpbm5hY2xlX3BjdHZfaGRfODAwaV90dW5lcl9jb25maWcgPSB7CiAJLmkyY19hZGRyZXNzCT0gMHg2NCwKIAkuaWZfa2h6CQk9IDUzODAsCi0JLnR1bmVyX2NhbGxiYWNrCT0gY3g4OF90dW5lcl9jYWxsYmFjaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgemwxMDM1M19jb25maWcgY3g4OF9waW5uYWNsZV9oeWJyaWRfcGN0diA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9ICgweDFlID4+IDEpLAorCS5ub190dW5lciAgICAgID0gMSwKKwkuaWYyICAgICAgICAgICA9IDQ1NjAwLAogfTsKIAogc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBjeDg4X2dlbmlhdGVjaF94ODAwMF9tdCA9IHsKQEAgLTQ3NywyMSArNDg4LDI1IEBACiBzdGF0aWMgc3RydWN0IHhjNTAwMF9jb25maWcgZHZpY29fZnVzaW9uaGR0djdfdHVuZXJfY29uZmlnID0gewogCS5pMmNfYWRkcmVzcyAgICA9IDB4YzIgPj4gMSwKIAkuaWZfa2h6ICAgICAgICAgPSA1MzgwLAotCS50dW5lcl9jYWxsYmFjayA9IGN4ODhfdHVuZXJfY2FsbGJhY2ssCiB9OwogCiBzdGF0aWMgaW50IGF0dGFjaF94YzMwMjgodTggYWRkciwgc3RydWN0IGN4ODgwMl9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTAgPSBOVUxMOwogCXN0cnVjdCB4YzIwMjhfY3RybCBjdGw7CiAJc3RydWN0IHhjMjAyOF9jb25maWcgY2ZnID0gewogCQkuaTJjX2FkYXAgID0gJmRldi0+Y29yZS0+aTJjX2FkYXAsCiAJCS5pMmNfYWRkciAgPSBhZGRyLAogCQkuY3RybCAgICAgID0gJmN0bCwKLQkJLmNhbGxiYWNrICA9IGN4ODhfdHVuZXJfY2FsbGJhY2ssCiAJfTsKIAotCWlmICghZGV2LT5kdmIuZnJvbnRlbmQpIHsKKwkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCisJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDEpOworCWlmICghZmUwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZmUwLT5kdmIuZnJvbnRlbmQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiBkdmIgZnJvbnRlbmQgbm90IGF0dGFjaGVkLiAiCiAJCQkJIkNhbid0IGF0dGFjaCB4YzMwMjhcbiIsCiAJCSAgICAgICBkZXYtPmNvcmUtPm5hbWUpOwpAQCAtNTA1LDEwICs1MjAsMTMgQEAKIAkgKi8KIAljeDg4X3NldHVwX3hjMzAyOChkZXYtPmNvcmUsICZjdGwpOwogCi0JZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKKwlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsICZjZmcpOwogCWlmICghZmUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiB4YzMwMjggYXR0YWNoIGZhaWxlZFxuIiwKIAkJICAgICAgIGRldi0+Y29yZS0+bmFtZSk7CisJCWR2Yl9mcm9udGVuZF9kZXRhY2goZmUwLT5kdmIuZnJvbnRlbmQpOworCQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChmZTAtPmR2Yi5mcm9udGVuZCk7CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gTlVMTDsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC01MTgsMjIgKzUzNiw4NCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X3RzX3BhcmFtKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWludCBpc19wdW5jdHVyZWQpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJZGV2LT50c19nZW5fY250cmwgPSAweDI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI0MTE2X3Jlc2V0X2RldmljZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOworCisJLyogUmVzZXQgdGhlIHBhcnQgKi8KKwkvKiBQdXQgdGhlIGN4MjQxMTYgaW50byByZXNldCAqLworCWN4X3dyaXRlKE1PX1NSU1RfSU8sIDApOworCW1zbGVlcCgxMCk7CisJLyogVGFrZSB0aGUgY3gyNDExNiBvdXQgb2YgcmVzZXQgKi8KKwljeF93cml0ZShNT19TUlNUX0lPLCAxKTsKKwltc2xlZXAoMTApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3gyNDExNl9jb25maWcgaGF1cHBhdWdlX2h2cjQwMDBfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzICAgICAgICAgID0gMHgwNSwKKwkuc2V0X3RzX3BhcmFtcyAgICAgICAgICA9IGN4MjQxMTZfc2V0X3RzX3BhcmFtLAorCS5yZXNldF9kZXZpY2UgICAgICAgICAgID0gY3gyNDExNl9yZXNldF9kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IGN4MjQxMTZfY29uZmlnIHRldmlpX3M0NjBfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg1NSwKKwkuc2V0X3RzX3BhcmFtcyA9IGN4MjQxMTZfc2V0X3RzX3BhcmFtLAorCS5yZXNldF9kZXZpY2UgID0gY3gyNDExNl9yZXNldF9kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHRldmlpX3R1bmVyX3NoYXJwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCisJLmluaXR0YWIgPSBzaGFycF96MDE5NGFfaW5pdHRhYiwKKwkubWNsayA9IDg4MDAwMDAwVUwsCisJLmludmVydCA9IDEsCisJLnNraXBfcmVpbml0ID0gMCwKKwkubG9ja19vdXRwdXQgPSAxLAorCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKKwkubWluX2RlbGF5X21zID0gMTAwLAorCS5zZXRfc3ltYm9sX3JhdGUgPSBzaGFycF96MDE5NGFfc2V0X3N5bWJvbF9yYXRlLAorCS5zZXRfdHNfcGFyYW1zID0gY3gyNDExNl9zZXRfdHNfcGFyYW0sCit9OworCitzdGF0aWMgc3RydWN0IHN0djAyODhfY29uZmlnIHRldmlpX3R1bmVyX2VhcmRhX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCisJLm1pbl9kZWxheV9tcyA9IDEwMCwKKwkuc2V0X3RzX3BhcmFtcyA9IGN4MjQxMTZfc2V0X3RzX3BhcmFtLAorfTsKKwogc3RhdGljIGludCBkdmJfcmVnaXN0ZXIoc3RydWN0IGN4ODgwMl9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlMCwgKmZlMSA9IE5VTEw7CisJaW50IG1mZV9zaGFyZWQgPSAwOyAvKiBidXMgbm90IHNoYXJlZCBieSBkZWZhdWx0ICovCiAKLQkvKiBpbml0IHN0cnVjdCB2aWRlb2J1Zl9kdmIgKi8KLQlkZXYtPmR2Yi5uYW1lID0gY29yZS0+bmFtZTsKLQlkZXYtPnRzX2dlbl9jbnRybCA9IDB4MGM7CisJLyogR2V0IHRoZSBmaXJzdCBmcm9udGVuZCAqLworCWZlMCA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAxKTsKKwlpZiAoIWZlMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBpbml0IGZyb250ZW5kICovCisJLyogbXVsdGktZnJvbnRlbmQgZ2F0ZSBjb250cm9sIGlzIHVuZGVmaW5lZCBvciBkZWZhdWx0cyB0byBmZTAgKi8KKwlkZXYtPmZyb250ZW5kcy5nYXRlID0gMDsKKworCS8qIGluaXQgZnJvbnRlbmQocykgKi8KIAlzd2l0Y2ggKGNvcmUtPmJvYXJkbnIpIHsKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0RWQl9UMToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCiAJCQkJCSAgICAgICAmY29ubmV4YW50X3JlZmJvYXJkX2NvbmZpZywKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJMHg2MSwgJmNvcmUtPmkyY19hZGFwLAogCQkJCQlEVkJfUExMX1RIT01TT05fRFRUNzU5WCkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CkBAIC01NDMsMTEgKzYyMywxMSBAQAogCWNhc2UgQ1g4OF9CT0FSRF9DT05FWEFOVF9EVkJfVDE6CiAJY2FzZSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVF9DWDIyNzAyOgogCWNhc2UgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjEwMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAogCQkJCQkgICAgICAgJmNvbm5leGFudF9yZWZib2FyZF9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCTB4NjAsICZjb3JlLT5pMmNfYWRhcCwKIAkJCQkJRFZCX1BMTF9USE9NU09OX0RUVDc1NzkpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNTU3LDMzICs2MzcsNjcgQEAKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwTFA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwOgotCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCiAJCQkJCSAgICAgICAmaGF1cHBhdWdlX2h2cl9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKKwkJLyogRFZCLVMgaW5pdCAqLworCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCisJCQkgICAgICAgJmhhdXBwYXVnZV9ub3Zhc19jb25maWcsCisJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmICghZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwgMHgwOCwgSVNMNjQyMV9EQ0wsIDB4MDApKSB7CisJCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjMwMDAgLSBEVkItUyBMTkIgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSMzAwMCAtIERWQi1TIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl9CisJCS8qIERWQi1UIGluaXQgKi8KKwkJZmUxID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDIpOworCQlpZiAoZmUxKSB7CisJCQlkZXYtPmZyb250ZW5kcy5nYXRlID0gMjsKKwkJCW1mZV9zaGFyZWQgPSAxOworCQkJZmUxLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAorCQkJCSZoYXVwcGF1Z2VfaHZyX2NvbmZpZywKKwkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCQlpZiAoZmUxLT5kdmIuZnJvbnRlbmQpIHsKKwkJCQlmZTEtPmR2Yi5mcm9udGVuZC0+aWQgPSAxOworCQkJCWlmKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMS0+ZHZiLmZyb250ZW5kLAorCQkJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXAsIDB4NjEsCisJCQkJCQlUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpKSB7CisJCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlIzMDAwIC0gRFZCLVQgbWlzYyBJbml0OiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlIzMDAwIC0gRFZCLVQgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSMzAwMCAtIERWQi1UIEluaXQ6IGNhbid0IGZpbmQgZnJvbnRlbmQgMi5cbiIsIF9fZnVuY19fKTsKKwkJfQorCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9QTFVTOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHYsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCTB4NjAsIE5VTEwsIERWQl9QTExfVEhPTVNPTl9EVFQ3NTc5KSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJCWJyZWFrOwogCQl9CiAJCS8qIFpMMTAzNTMgcmVwbGFjZXMgTVQzNTIgb24gbGF0ZXIgY2FyZHMgKi8KLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCiAJCQkJCSAgICAgICAmZHZpY29fZnVzaW9uaGR0dl9wbHVzX3YxXzEsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCTB4NjAsIE5VTEwsIERWQl9QTExfVEhPTVNPTl9EVFQ3NTc5KSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQpAQCAtNTkxLDMxICs3MDUsMzEgQEAKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMOgogCQkvKiBUaGUgdGluIGJveCBzYXlzIERFRTE2MDEsIGJ1dCBpdCBzZWVtcyB0byBiZSBEVFQ3NTc5CiAJCSAqIGNvbXBhdGlibGUsIHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgTVQzNTIgQUdDIGdhaW4uICovCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCiAJCQkJCSAgICAgICAmZHZpY29fZnVzaW9uaGR0dl9kdWFsLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYxLCBOVUxMLCBEVkJfUExMX1RIT01TT05fRFRUNzU3OSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCQlicmVhazsKIAkJfQogCQkvKiBaTDEwMzUzIHJlcGxhY2VzIE1UMzUyIG9uIGxhdGVyIGNhcmRzICovCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfcGx1c192MV8xLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYxLCBOVUxMLCBEVkJfUExMX1RIT01TT05fRFRUNzU3OSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1QxOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHYsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCTB4NjEsIE5VTEwsIERWQl9QTExfTEdfWjIwMSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KQEAgLTYyMywxMSArNzM3LDExIEBACiAJY2FzZSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVDoKIAljYXNlIENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UOgogCWNhc2UgQ1g4OF9CT0FSRF9BRFNURUNIX0RWQl9UX1BDSToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJICAgICAgICZkbnR2X2xpdmVfZHZidF9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCTB4NjEsIE5VTEwsIERWQl9QTExfVU5LTk9XTl8xKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQpAQCAtNjM1LDEwICs3NDksMTAgQEAKIAljYXNlIENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UX1BSTzoKICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X1ZQMzA1NCkgfHwgKGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0X01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQogCQkvKiBNVDM1MiBpcyBvbiBhIHNlY29uZGFyeSBJMkMgYnVzIG1hZGUgZnJvbSBzb21lIEdQSU8gbGluZXMgKi8KLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJmRudHZfbGl2ZV9kdmJ0X3Byb19jb25maWcsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZkbnR2X2xpdmVfZHZidF9wcm9fY29uZmlnLAogCQkJCQkgICAgICAgJmRldi0+dnAzMDU0LT5hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNjQ5LDIyICs3NjMsMjIgQEAKICNlbmRpZgogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9IWUJSSUQ6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfaHlicmlkLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmY29yZS0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJICAgVFVORVJfVEhPTVNPTl9GRTY2MDApKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX1BSTzoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCiAJCQkJCSAgICAgICAmZHZpY29fZnVzaW9uaGR0dl94YzMwMjgsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgPT0gTlVMTCkKLQkJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCA9PSBOVUxMKQorCQkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJCSZkdmljb19mdXNpb25oZHR2X210MzUyX3hjMzAyOCwKIAkJCQkJCSZjb3JlLT5pMmNfYWRhcCk7CiAJCS8qCkBAIC02NzIsMTYgKzc4NiwxNiBAQAogCQkgKiBXZSBtdXN0IG5vdCBwZXJtaXQgZ2F0ZV9jdHJsIHRvIGJlIHBlcmZvcm1lZCwgb3IKIAkJICogdGhlIHhjMzAyOCBjYW5ub3QgY29tbXVuaWNhdGUgb24gdGhlIGJ1cy4KIAkJICovCi0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IE5VTEw7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IE5VTEw7CiAJCWlmIChhdHRhY2hfeGMzMDI4KDB4NjEsIGRldikgPCAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQzMDAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gob3I1MTEzMl9hdHRhY2gsICZwY2hkdHZfaGQzMDAwLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gob3I1MTEzMl9hdHRhY2gsICZwY2hkdHZfaGQzMDAwLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9USE9NU09OX0RUVDc2MVgpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNjk4LDExICs4MTIsMTEgQEAKIAogCQkvKiBTZWxlY3QgUkYgY29ubmVjdG9yIGNhbGxiYWNrICovCiAJCWZ1c2lvbmhkdHZfM19nb2xkLnBsbF9yZl9zZXQgPSBsZ2R0MzMweF9wbGxfcmZfc2V0OwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJmZ1c2lvbmhkdHZfM19nb2xkLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9NSUNST1RVTkVfNDA0MkZJNSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CkBAIC03MTYsMTEgKzgzMCwxMSBAQAogCQltZGVsYXkoMTAwKTsKIAkJY3hfc2V0KE1PX0dQMF9JTywgOSk7CiAJCW1kZWxheSgyMDApOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJmZ1c2lvbmhkdHZfM19nb2xkLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9USE9NU09OX0RUVDc2MVgpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNzM0LDE1ICs4NDgsMTUgQEAKIAkJbWRlbGF5KDEwMCk7CiAJCWN4X3NldChNT19HUDBfSU8sIDEpOwogCQltZGVsYXkoMjAwKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKIAkJCQkJICAgICAgICZmdXNpb25oZHR2XzVfZ29sZCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfTEdfVERWU19IMDZYRikpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7Ci0JCQlpZiAoIWR2Yl9hdHRhY2godGRhOTg4N19hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQkJaWYgKCFkdmJfYXR0YWNoKHRkYTk4ODdfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmY29yZS0+aTJjX2FkYXAsIDB4NDMpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CkBAIC03NTUsMjUgKzg2OSwyNSBAQAogCQltZGVsYXkoMTAwKTsKIAkJY3hfc2V0KE1PX0dQMF9JTywgMSk7CiAJCW1kZWxheSgyMDApOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJnBjaGR0dl9oZDU1MDAsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmY29yZS0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJCVRVTkVSX0xHX1REVlNfSDA2WEYpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwotCQkJaWYgKCFkdmJfYXR0YWNoKHRkYTk4ODdfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCWlmICghZHZiX2F0dGFjaCh0ZGE5ODg3X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmNvcmUtPmkyY19hZGFwLCAweDQzKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfQVRJX0hEVFZXT05ERVI6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG54dDIwMHhfYXR0YWNoLAogCQkJCQkgICAgICAgJmF0aV9oZHR2d29uZGVyLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9QSElMSVBTX1RVVjEyMzZEKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKQEAgLTc4MSwxMzUgKzg5NSwyMjQgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU1BMVVNfUzE6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU0UyX1MxOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTIzX2F0dGFjaCwKIAkJCQkJICAgICAgICZoYXVwcGF1Z2Vfbm92YXNfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAotCQkJCQkmY29yZS0+aTJjX2FkYXAsIDB4MDgsIDB4MDAsIDB4MDApKQorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmICghZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHgwOCwgSVNMNjQyMV9EQ0wsIDB4MDApKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9LV09STERfRFZCU18xMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTIzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAogCQkJCQkgICAgICAgJmt3b3JsZF9kdmJzXzEwMF9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IGt3b3JsZF9kdmJzXzEwMF9zZXRfdm9sdGFnZTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSBrd29ybGRfZHZic18xMDBfc2V0X3ZvbHRhZ2U7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0dFTklBVEVDSF9EVkJTOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTIzX2F0dGFjaCwKIAkJCQkJICAgICAgICZnZW5pYXRlY2hfZHZic19jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IGdlbmlhdGVjaF9kdmJzX3NldF92b2x0YWdlOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IGdlbmlhdGVjaF9kdmJzX3NldF92b2x0YWdlOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9QSU5OQUNMRV9QQ1RWX0hEXzgwMGk6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkgICAgICAgJnBpbm5hY2xlX3BjdHZfaGRfODAwaV9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJLyogdHVuZXJfY29uZmlnLnZpZGVvX2RldiBtdXN0IHBvaW50IHRvCi0JCQkgKiBpMmNfYWRhcC5hbGdvX2RhdGEKLQkJCSAqLwotCQkJaWYgKCFkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmY29yZS0+aTJjX2FkYXAsCi0JCQkJCSZwaW5uYWNsZV9wY3R2X2hkXzgwMGlfdHVuZXJfY29uZmlnLAotCQkJCQljb3JlLT5pMmNfYWRhcC5hbGdvX2RhdGEpKQorCQkJCQkmcGlubmFjbGVfcGN0dl9oZF84MDBpX3R1bmVyX2NvbmZpZykpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9QQ0lfTkFOTzoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCQkmZHZpY29faGR0djVfcGNpX25hbm9fY29uZmlnLAogCQkJCQkJJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKIAkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOwogCQkJc3RydWN0IHhjMjAyOF9jb25maWcgY2ZnID0gewogCQkJCS5pMmNfYWRhcCAgPSAmY29yZS0+aTJjX2FkYXAsCiAJCQkJLmkyY19hZGRyICA9IDB4NjEsCi0JCQkJLmNhbGxiYWNrICA9IGN4ODhfcGNpX25hbm9fY2FsbGJhY2ssCiAJCQl9OwogCQkJc3RhdGljIHN0cnVjdCB4YzIwMjhfY3RybCBjdGwgPSB7Ci0JCQkJLmZuYW1lICAgICAgID0gInhjMzAyOC12MjcuZnciLAorCQkJCS5mbmFtZSAgICAgICA9IFhDMjAyOF9ERUZBVUxUX0ZJUk1XQVJFLAogCQkJCS5tYXhfbGVuICAgICA9IDY0LAogCQkJCS5zY29kZV90YWJsZSA9IFhDMzAyOF9GRV9PUkVONTM4LAogCQkJfTsKIAogCQkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsCi0JCQkJCWRldi0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKKwkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsICZjZmcpOwogCQkJaWYgKGZlICE9IE5VTEwgJiYgZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyAhPSBOVUxMKQogCQkJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcoZmUsICZjdGwpOwogCQl9CiAJCWJyZWFrOwogCSBjYXNlIENYODhfQk9BUkRfUElOTkFDTEVfSFlCUklEX1BDVFY6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKLQkJCQkJICAgICAgICZjeDg4X2dlbmlhdGVjaF94ODAwMF9tdCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAorCQkJCQkgICAgICAgJmN4ODhfcGlubmFjbGVfaHlicmlkX3BjdHYsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoYXR0YWNoX3hjMzAyOCgweDYxLCBkZXYpIDwgMCkKLQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IE5VTEw7CisJCQlpZiAoYXR0YWNoX3hjMzAyOCgweDYxLCBkZXYpIDwgMCkKKwkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKKwkJfQogCQlicmVhazsKIAkgY2FzZSBDWDg4X0JPQVJEX0dFTklBVEVDSF9YODAwMF9NVDoKIAkJZGV2LT50c19nZW5fY250cmwgPSAweDAwOwogCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmN4ODhfZ2VuaWF0ZWNoX3g4MDAwX210LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGF0dGFjaF94YzMwMjgoMHg2MSwgZGV2KSA8IDApCiAJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJYnJlYWs7CiAJIGNhc2UgQ1g4OF9CT0FSRF9LV09STERfQVRTQ18xMjA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkgICAgICAgJmt3b3JsZF9hdHNjXzEyMF9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwogCQlpZiAoYXR0YWNoX3hjMzAyOCgweDYxLCBkZXYpIDwgMCkKIAkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0dPTEQ6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDExX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MTFfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHY3X2NvbmZpZywKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQkvKiB0dW5lcl9jb25maWcudmlkZW9fZGV2IG11c3QgcG9pbnQgdG8KLQkJCSAqIGkyY19hZGFwLmFsZ29fZGF0YQotCQkJICovCi0JCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwKLQkJCQkJJmR2aWNvX2Z1c2lvbmhkdHY3X3R1bmVyX2NvbmZpZywKLQkJCQkJY29yZS0+aTJjX2FkYXAuYWxnb19kYXRhKSkKKwkJCQkJJmR2aWNvX2Z1c2lvbmhkdHY3X3R1bmVyX2NvbmZpZykpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgorCQkvKiBEVkItUy9TMiBJbml0ICovCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJCSZoYXVwcGF1Z2VfaHZyNDAwMF9jb25maWcsCisJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJaWYoIWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwLCAweDA4LCBJU0w2NDIxX0RDTCwgMHgwMCkpIHsKKwkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSNDAwMCAtIERWQi1TIExOQiBJbml0OiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRwcmludGsoIDEsICIlcygpOiBIVlI0MDAwIC0gRFZCLVMgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCX0KKwkJLyogRFZCLVQgSW5pdCAqLworCQlmZTEgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMik7CisJCWlmIChmZTEpIHsKKwkJCWRldi0+ZnJvbnRlbmRzLmdhdGUgPSAyOworCQkJbWZlX3NoYXJlZCA9IDE7CisJCQlmZTEtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCisJCQkJJmhhdXBwYXVnZV9odnJfY29uZmlnLAorCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJCWlmIChmZTEtPmR2Yi5mcm9udGVuZCkgeworCQkJCWZlMS0+ZHZiLmZyb250ZW5kLT5pZCA9IDE7CisJCQkJaWYoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUxLT5kdmIuZnJvbnRlbmQsCisJCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwLCAweDYxLAorCQkJCQlUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpKSB7CisJCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlI0MDAwIC0gRFZCLVQgbWlzYyBJbml0OiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlI0MDAwIC0gRFZCLVQgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSNDAwMCAtIERWQi1UIEluaXQ6IGNhbid0IGZpbmQgZnJvbnRlbmQgMi5cbiIsIF9fZnVuY19fKTsKKwkJfQorCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDBMSVRFOgorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsCisJCQkmaGF1cHBhdWdlX2h2cjQwMDBfY29uZmlnLAorCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwLAorCQkJCTB4MDgsIElTTDY0MjFfRENMLCAweDAwKTsKKwkJfQorCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfVEVWSUlfUzQyMDoKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHN0djAyOTlfYXR0YWNoLAorCQkJCQkJJnRldmlpX3R1bmVyX3NoYXJwX2NvbmZpZywKKwkJCQkJCSZjb3JlLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQkJCQkmY29yZS0+aTJjX2FkYXAsIERWQl9QTExfT1BFUkExKSkKKwkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKKwkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRldmlpX2R2YnNfc2V0X3ZvbHRhZ2U7CisKKwkJfSBlbHNlIHsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzdHYwMjg4X2F0dGFjaCwKKwkJCQkJCQkgICAgJnRldmlpX3R1bmVyX2VhcmRhX2NvbmZpZywKKwkJCQkJCQkgICAgJmNvcmUtPmkyY19hZGFwKTsKKwkJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJCQlpZiAoIWR2Yl9hdHRhY2goc3RiNjAwMF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAweDYxLAorCQkJCQkJJmNvcmUtPmkyY19hZGFwKSkKKwkJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CisJCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7CisJCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRldmlpX2R2YnNfc2V0X3ZvbHRhZ2U7CisKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfVEVWSUlfUzQ2MDoKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAorCQkJCQkgICAgICAgJnRldmlpX3M0NjBfY29uZmlnLAorCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRldmlpX2R2YnNfc2V0X3ZvbHRhZ2U7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX09NSUNPTV9TUzRfUENJOgorCWNhc2UgQ1g4OF9CT0FSRF9UQlNfODkyMDoKKwljYXNlIENYODhfQk9BUkRfUFJPRl83MzAwOgorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsCisJCQkJCSAgICAgICAmaGF1cHBhdWdlX2h2cjQwMDBfY29uZmlnLAorCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRldmlpX2R2YnNfc2V0X3ZvbHRhZ2U7CisJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCiAJCSAgICAgICBjb3JlLT5uYW1lKTsKIAkJYnJlYWs7CiAJfQotCWlmIChOVUxMID09IGRldi0+ZHZiLmZyb250ZW5kKSB7CisKKyAgICAgICAgaWYgKCAoTlVMTCA9PSBmZTAtPmR2Yi5mcm9udGVuZCkgfHwgKGZlMSAmJiBOVUxMID09IGZlMS0+ZHZiLmZyb250ZW5kKSApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiJXMvMjogZnJvbnRlbmQgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAogCQkgICAgICAgY29yZS0+bmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwkvKiBkZWZpbmUgZ2VuZXJhbC1wdXJwb3NlIGNhbGxiYWNrIHBvaW50ZXIgKi8KKwlmZTAtPmR2Yi5mcm9udGVuZC0+Y2FsbGJhY2sgPSBjeDg4X3R1bmVyX2NhbGxiYWNrOwogCiAJLyogRW5zdXJlIGFsbCBmcm9udGVuZHMgbmVnb3RpYXRlIGJ1cyBhY2Nlc3MgKi8KLQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnRzX2J1c19jdHJsID0gY3g4OF9kdmJfYnVzX2N0cmw7CisJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50c19idXNfY3RybCA9IGN4ODhfZHZiX2J1c19jdHJsOworCWlmIChmZTEpCisJCWZlMS0+ZHZiLmZyb250ZW5kLT5vcHMudHNfYnVzX2N0cmwgPSBjeDg4X2R2Yl9idXNfY3RybDsKIAogCS8qIFB1dCB0aGUgYW5hbG9nIGRlY29kZXIgaW4gc3RhbmRieSB0byBrZWVwIGl0IHF1aWV0ICovCiAJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKIAogCS8qIHJlZ2lzdGVyIGV2ZXJ5dGhpbmcgKi8KLQlyZXR1cm4gdmlkZW9idWZfZHZiX3JlZ2lzdGVyKCZkZXYtPmR2YiwgVEhJU19NT0RVTEUsIGRldiwKLQkJCQkgICAgICZkZXYtPnBjaS0+ZGV2LCBhZGFwdGVyX25yKTsKKwlyZXR1cm4gdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2J1cygmZGV2LT5mcm9udGVuZHMsIFRISVNfTU9EVUxFLCBkZXYsCisJCSZkZXYtPnBjaS0+ZGV2LCBhZGFwdGVyX25yLCBtZmVfc2hhcmVkKTsKIAogZnJvbnRlbmRfZGV0YWNoOgotCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGRldi0+ZHZiLmZyb250ZW5kKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBOVUxMOworCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGZlMC0+ZHZiLmZyb250ZW5kKTsKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBOVUxMOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTkzMyw2ICsxMTM2LDM4IEBACiAJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDAwNCk7CiAJCXVkZWxheSgxMDAwKTsKIAkJYnJlYWs7CisKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgorCQlpZihjb3JlLT5kdmJkZXYtPmZyb250ZW5kcy5hY3RpdmVfZmVfaWQgPT0gMSkgeworCQkJLyogRFZCLVMvUzIgRW5hYmxlZCAqLworCisJCQkvKiBUb2dnbGUgcmVzZXQgb24gY3gyMjcwMiBsZWF2aW5nIGkyYyBhY3RpdmUgKi8KKwkJCWN4X3dyaXRlKE1PX0dQMF9JTywgKGNvcmUtPmJvYXJkLmlucHV0WzBdLmdwaW8wICYgMHgwMDAwZmYwMCkgfCAweDAwMDAwMDgwKTsKKwkJCXVkZWxheSgxMDAwKTsKKwkJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDA4MCk7CisJCQl1ZGVsYXkoNTApOworCQkJY3hfc2V0KE1PX0dQMF9JTywgMHgwMDAwMDA4MCk7IC8qIGN4MjI3MDIgb3V0IG9mIHJlc2V0ICovCisJCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMDA0KTsgLyogdHJpLXN0YXRlIHRoZSBjeDIyNzAyIHBpbnMgKi8KKwkJCXVkZWxheSgxMDAwKTsKKworCQkJY3hfd3JpdGUoTU9fU1JTVF9JTywgMSk7IC8qIFRha2UgdGhlIGN4MjQxMTYvY3gyNDEyMyBvdXQgb2YgcmVzZXQgKi8KKwkJCWNvcmUtPmR2YmRldi0+dHNfZ2VuX2NudHJsID0gMHgwMjsgLyogUGFyYWxsZWwgSU8gKi8KKwkJfSBlbHNlCisJCWlmIChjb3JlLT5kdmJkZXYtPmZyb250ZW5kcy5hY3RpdmVfZmVfaWQgPT0gMikgeworCQkJLyogRFZCLVQgRW5hYmxlZCAqLworCisJCQkvKiBQdXQgdGhlIGN4MjQxMTYvY3gyNDEyMyBpbnRvIHJlc2V0ICovCisJCQljeF93cml0ZShNT19TUlNUX0lPLCAwKTsKKworCQkJLyogY3gyMjcwMiBvdXQgb2YgcmVzZXQgYW5kIGVuYWJsZSBpdCAqLworCQkJY3hfc2V0KE1PX0dQMF9JTywgICAweDAwMDAwMDgwKTsKKwkJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDAwNCk7CisJCQljb3JlLT5kdmJkZXYtPnRzX2dlbl9jbnRybCA9IDB4MGM7IC8qIFNlcmlhbCBJTyAqLworCQkJdWRlbGF5KDEwMDApOworCQl9CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT0RFVjsKIAl9CkBAIC05NTAsNiArMTE4NSw5IEBACiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwOgogCQkvKiBEbyBOb3RoaW5nLCBsZWF2ZSB0aGUgY3gyMjcwMiBvbiB0aGUgYnVzLiAqLwogCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgorCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PREVWOwogCX0KQEAgLTk2MCw3ICsxMTk4LDggQEAKIHsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZHJ2LT5jb3JlOwogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBkcnYtPmNvcmUtPmR2YmRldjsKLQlpbnQgZXJyOworCWludCBlcnIsIGk7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmU7CiAKIAlkcHJpbnRrKCAxLCAiJXNcbiIsIF9fZnVuY19fKTsKIAlkcHJpbnRrKCAxLCAiIC0+YmVpbmcgcHJvYmVkIGJ5IENhcmQ9JWQgTmFtZT0lcywgUENJICUwMng6JTAyeFxuIiwKQEAgLTk4MCwxOCArMTIxOSwyOCBAQAogCiAJLyogZHZiIHN0dWZmICovCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMvMjogY3gyMzg4eCBiYXNlZCBEVkIvQVRTQyBjYXJkXG4iLCBjb3JlLT5uYW1lKTsKLQl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZkZXYtPmR2Yi5kdmJxLCAmZHZiX3FvcHMsCisJZGV2LT50c19nZW5fY250cmwgPSAweDBjOworCisJZm9yIChpID0gMTsgaSA8PSBjb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzOyBpKyspIHsKKwkJZmUgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZjb3JlLT5kdmJkZXYtPmZyb250ZW5kcywgaSk7CisJCWlmICghZmUpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBmYWlsZWQgdG8gZ2V0IGZyb250ZW5kKCVkKVxuIiwgX19mdW5jX18sIGkpOworCQkJY29udGludWU7CisJCX0KKwkJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmUtPmR2Yi5kdmJxLCAmZHZiX3FvcHMsCiAJCQkgICAgJmRldi0+cGNpLT5kZXYsICZkZXYtPnNsb2NrLAogCQkJICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKIAkJCSAgICBWNEwyX0ZJRUxEX1RPUCwKIAkJCSAgICBzaXplb2Yoc3RydWN0IGN4ODhfYnVmZmVyKSwKIAkJCSAgICBkZXYpOworCQkvKiBpbml0IHN0cnVjdCB2aWRlb2J1Zl9kdmIgKi8KKwkJZmUtPmR2Yi5uYW1lID0gZGV2LT5jb3JlLT5uYW1lOworCX0KIAllcnIgPSBkdmJfcmVnaXN0ZXIoZGV2KTsKIAlpZiAoZXJyICE9IDApCiAJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogZHZiX3JlZ2lzdGVyIGZhaWxlZCAoZXJyID0gJWQpXG4iLAogCQkgICAgICAgY29yZS0+bmFtZSwgZXJyKTsKLQotIGZhaWxfY29yZToKK2ZhaWxfY29yZToKIAlyZXR1cm4gZXJyOwogfQogCkBAIC05OTksOSArMTI0OCw3IEBACiB7CiAJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGRydi0+Y29yZS0+ZHZiZGV2OwogCi0JLyogZHZiICovCi0JaWYgKGRldi0+ZHZiLmZyb250ZW5kKQotCQl2aWRlb2J1Zl9kdmJfdW5yZWdpc3RlcigmZGV2LT5kdmIpOworCXZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cygmZGV2LT5mcm9udGVuZHMpOwogCiAJdnAzMDU0X2kyY19yZW1vdmUoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYwppbmRleCBkNzQwNmE5Li4wMWRlMjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYwpAQCAtMTE2LDE4ICsxMTYsMjUgQEAKIAogdm9pZCBjeDg4X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogeworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmID0gJmNvcmUtPmR2YmRldi0+ZnJvbnRlbmRzOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlID0gTlVMTDsKIAlpZiAoMCAhPSBjb3JlLT5pMmNfcmMpCiAJCXJldHVybjsKIAogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfRFZCKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X0RWQl9NT0RVTEUpCi0JaWYgKCAoY29yZS0+ZHZiZGV2KSAmJiAoY29yZS0+ZHZiZGV2LT5kdmIuZnJvbnRlbmQpICkgewotCQlpZiAoY29yZS0+ZHZiZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQkJY29yZS0+ZHZiZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLCAxKTsKKwlpZiAoY29yZS0+ZHZiZGV2ICYmIGYpIHsKKwkJaWYoZi0+Z2F0ZSA8PSAxKSAvKiB1bmRlZmluZWQgb3IgZmUwICovCisJCQlmZSA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoZiwgMSk7CisJCWVsc2UKKwkJCWZlID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZChmLCBmLT5nYXRlKTsKKworCQlpZiAoZmUgJiYgZmUtPmR2Yi5mcm9udGVuZCAmJiBmZS0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLT5kdmIuZnJvbnRlbmQsIDEpOwogCiAJCWkyY19jbGllbnRzX2NvbW1hbmQoJmNvcmUtPmkyY19hZGFwLCBjbWQsIGFyZyk7CiAKLQkJaWYgKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJCWNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybChjb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZCwgMCk7CisJCWlmIChmZSAmJiBmZS0+ZHZiLmZyb250ZW5kICYmIGZlLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwoZmUtPmR2Yi5mcm9udGVuZCwgMCk7CiAJfSBlbHNlCiAjZW5kaWYKIAkJaTJjX2NsaWVudHNfY29tbWFuZCgmY29yZS0+aTJjX2FkYXAsIGNtZCwgYXJnKTsKQEAgLTIwMSw3ICsyMDgsMjMgQEAKIAogCWNvcmUtPmkyY19yYyA9IGkyY19iaXRfYWRkX2J1cygmY29yZS0+aTJjX2FkYXApOwogCWlmICgwID09IGNvcmUtPmkyY19yYykgeworCQlzdGF0aWMgdTggdHVuZXJfZGF0YVtdID0KKwkJCXsgMHgwYiwgMHhkYywgMHg4NiwgMHg1MiB9OworCQlzdGF0aWMgc3RydWN0IGkyY19tc2cgdHVuZXJfbXNnID0KKwkJCXsgLmZsYWdzID0gMCwgLmFkZHIgPSAweGMyID4+IDEsIC5idWYgPSB0dW5lcl9kYXRhLCAubGVuID0gNCB9OworCiAJCWRwcmludGsoMSwgImkyYyByZWdpc3RlciBva1xuIik7CisJCXN3aXRjaCggY29yZS0+Ym9hcmRuciApIHsKKwkJCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTMwMDoKKwkJCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKKwkJCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKKwkJCQlwcmludGsoIiVzOiBpMmMgaW5pdDogZW5hYmxpbmcgYW5hbG9nIGRlbW9kIG9uIEhWUjEzMDAvMzAwMC80MDAwIHR1bmVyXG4iLAorCQkJCQljb3JlLT5uYW1lKTsKKwkJCQlpMmNfdHJhbnNmZXIoY29yZS0+aTJjX2NsaWVudC5hZGFwdGVyLCAmdHVuZXJfbXNnLCAxKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KIAkJaWYgKGkyY19zY2FuKQogCQkJZG9faTJjX3NjYW4oY29yZS0+bmFtZSwmY29yZS0+aTJjX2NsaWVudCk7CiAJfSBlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwppbmRleCA1MzUyNmQ5Li44NjgzZDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKQEAgLTIyNCw2ICsyMjQsOCBAQAogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNQTFVTX1MxOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEwMDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgorCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMExJVEU6CiAJCWlyX2NvZGVzID0gaXJfY29kZXNfaGF1cHBhdWdlX25ldzsKIAkJaXJfdHlwZSA9IElSX1RZUEVfUkM1OwogCQlpci0+c2FtcGxpbmcgPSAxOwpAQCAtMjU5LDYgKzI2MSw3IEBACiAJCWlyLT5wb2xsaW5nID0gMTsgLyogbXMgKi8KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1BST0xJTktfUFZfODAwMEdUOgorCWNhc2UgQ1g4OF9CT0FSRF9QUk9MSU5LX1BWX0dMT0JBTF9YVFJFTUU6CiAJCWlyX2NvZGVzID0gaXJfY29kZXNfcGl4ZWx2aWV3X25ldzsKIAkJaXItPmdwaW9fYWRkciA9IE1PX0dQMV9JTzsKIAkJaXItPm1hc2tfa2V5Y29kZSA9IDB4M2Y7CkBAIC0zOTIsNyArMzk1LDcgQEAKIHsKIAlzdHJ1Y3QgY3g4OF9JUiAqaXIgPSBjb3JlLT5pcjsKIAl1MzIgc2FtcGxlcywgaXJjb2RlOwotCWludCBpOworCWludCBpLCBzdGFydCwgcmFuZ2UsIHRvZ2dsZSwgZGV2LCBjb2RlOwogCiAJaWYgKE5VTEwgPT0gaXIpCiAJCXJldHVybjsKQEAgLTQ2MSw2ICs0NjQsMzQgQEAKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTUExVU19TMToKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwOgorCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDBMSVRFOgorCQlpcmNvZGUgPSBpcl9kZWNvZGVfYmlwaGFzZShpci0+c2FtcGxlcywgaXItPnNjb3VudCwgNSwgNyk7CisJCWlyX2RwcmludGsoImJpcGhhc2UgZGVjb2RlZDogJXhcbiIsIGlyY29kZSk7CisJCS8qCisJCSAqIFJDNSBoYXMgYW4gZXh0ZW5zaW9uIGJpdCB3aGljaCBhZGRzIGEgbmV3IHJhbmdlCisJCSAqIG9mIGF2YWlsYWJsZSBjb2RlcywgdGhpcyBpcyBkZXRlY3RlZCBoZXJlLiBBbHNvCisJCSAqIGhhdXBwYXVnZSByZW1vdGVzIChibGFjay9zaWx2ZXIpIGFsd2F5cyB1c2UKKwkJICogc3BlY2lmaWMgZGV2aWNlIGlkcy4gSWYgd2UgZG8gbm90IGZpbHRlciB0aGUKKwkJICogZGV2aWNlIGlkcyB0aGVuIG1lc3NhZ2VzIGRlc3RpbmVkIGZvciBkZXZpY2VzCisJCSAqIHN1Y2ggYXMgVFZzIChpZD0wKSB3aWxsIGdldCB0aHJvdWdoIHRvIHRoZQorCQkgKiBkZXZpY2UgY2F1c2luZyBtaXMtZmlyZWQgZXZlbnRzLgorCQkgKi8KKwkJLyogc3BsaXQgcmM1IGRhdGEgYmxvY2sgLi4uICovCisJCXN0YXJ0ID0gKGlyY29kZSAmIDB4MjAwMCkgPj4gMTM7CisJCXJhbmdlID0gKGlyY29kZSAmIDB4MTAwMCkgPj4gMTI7CisJCXRvZ2dsZT0gKGlyY29kZSAmIDB4MDgwMCkgPj4gMTE7CisJCWRldiAgID0gKGlyY29kZSAmIDB4MDdjMCkgPj4gNjsKKwkJY29kZSAgPSAoaXJjb2RlICYgMHgwMDNmKSB8ICgocmFuZ2UgPDwgNikgXiAweDAwNDApOworCQlpZiggc3RhcnQgIT0gMSkKKwkJCS8qIG5vIGtleSBwcmVzc2VkICovCisJCQlicmVhazsKKwkJaWYgKCBkZXYgIT0gMHgxZSAmJiBkZXYgIT0gMHgxZiApCisJCQkvKiBub3QgYSBoYXVwcGF1Z2UgcmVtb3RlICovCisJCQlicmVhazsKKwkJaXJfaW5wdXRfa2V5ZG93bihpci0+aW5wdXQsICZpci0+aXIsIGNvZGUsIGlyY29kZSk7CisJCWlyLT5yZWxlYXNlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTIwKTsKKwkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1BJTk5BQ0xFX1BDVFZfSERfODAwaToKIAkJaXJjb2RlID0gaXJfZGVjb2RlX2JpcGhhc2UoaXItPnNhbXBsZXMsIGlyLT5zY291bnQsIDUsIDcpOwogCQlpcl9kcHJpbnRrKCJiaXBoYXNlIGRlY29kZWQ6ICV4XG4iLCBpcmNvZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCmluZGV4IGE2YjA2MWMuLjZkZjVjZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKQEAgLTc2OCw3ICs3NjgsOCBAQAogewogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXY7CiAJc3RydWN0IGN4ODhfY29yZSAgKmNvcmU7Ci0JaW50IGVycjsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpkZW1vZDsKKwlpbnQgZXJyLGk7CiAKIAkvKiBnZW5lcmFsIHNldHVwICovCiAJY29yZSA9IGN4ODhfY29yZV9nZXQocGNpX2Rldik7CkBAIC03ODEsNiArNzgyLDExIEBACiAJaWYgKCFjb3JlLT5ib2FyZC5tcGVnKQogCQlnb3RvIGZhaWxfY29yZTsKIAorCWlmICghY29yZS0+Ym9hcmQubnVtX2Zyb250ZW5kcykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgLm51bV9mcm9udGVuZHMgc2hvdWxkIGJlIG5vbi16ZXJvLCBlcnIgPSAlZFxuIiwgX19mdW5jX18sIGVycik7CisJCWdvdG8gZmFpbF9jb3JlOworCX0KKwogCWVyciA9IC1FTk9NRU07CiAJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksR0ZQX0tFUk5FTCk7CiAJaWYgKE5VTEwgPT0gZGV2KQpAQCAtNzk1LDYgKzgwMSwyMCBAQAogCUlOSVRfTElTVF9IRUFEKCZkZXYtPmRydmxpc3QpOwogCWxpc3RfYWRkX3RhaWwoJmRldi0+ZGV2bGlzdCwmY3g4ODAyX2Rldmxpc3QpOwogCisJbXV0ZXhfaW5pdCgmZGV2LT5mcm9udGVuZHMubG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZnJvbnRlbmRzLmZlbGlzdCk7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcygpIGFsbG9jYXRpbmcgJWQgZnJvbnRlbmQocylcbiIsIF9fZnVuY19fLCBjb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzKTsKKworCWZvciAoaSA9IDE7IGkgPD0gY29yZS0+Ym9hcmQubnVtX2Zyb250ZW5kczsgaSsrKSB7CisJCWRlbW9kID0gdmlkZW9idWZfZHZiX2FsbG9jX2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgaSk7CisJCWlmKGRlbW9kID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSBmYWlsZWQgdG8gYWxsb2NcbiIsIF9fZnVuY19fKTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGZhaWxfZnJlZTsKKwkJfQorCX0KKwogCS8qIE1haW50YWluIGEgcmVmZXJlbmNlIHNvIGN4ODgtdmlkZW8gY2FuIHF1ZXJ5IHRoZSA4ODAyIGRldmljZS4gKi8KIAljb3JlLT5kdmJkZXYgPSBkZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYwppbmRleCAzYTE5NzdmLi43ZGQ1MDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCkBAIC03NjcsNiArNzY3LDE0IEBACiAJY2FzZSBXV19GTToKIAkJc2V0X2F1ZGlvX3N0YW5kYXJkX0ZNKGNvcmUsIHJhZGlvX2RlZW1waGFzaXMpOwogCQlicmVhazsKKwljYXNlIFdXX0kyU0FEQzoKKwkJc2V0X2F1ZGlvX3N0YXJ0KGNvcmUsIDB4MDEpOworCQkvKiBTbGF2ZS9QaGlsaXBzL0F1dG9iYXVkICovCisJCWN4X3dyaXRlKEFVRF9JMlNJTlBVVENOVEwsIDApOworCQkvKiBTd2l0Y2ggdG8gIkkyUyBBREMgbW9kZSIgKi8KKwkJY3hfd3JpdGUoQVVEX0kyU0NOVEwsIDB4MSk7CisJCXNldF9hdWRpb19maW5pc2goY29yZSwgRU5fSTJTSU5fRU5BQkxFKTsKKwkJYnJlYWs7CiAJY2FzZSBXV19OT05FOgogCWRlZmF1bHQ6CiAJCXByaW50aygiJXMvMDogdW5rbm93biB0diBhdWRpbyBtb2RlIFslZF1cbiIsCkBAIC04OTUsNiArOTAzLDkgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOworCWNhc2UgV1dfSTJTQURDOgorCQkvKiBETyBOT1RISU5HICovCisJCWJyZWFrOwogCX0KIAogCWlmIChVTlNFVCAhPSBjdGwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCmluZGV4IGVmNGQ1NmUuLjM5MDRiNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwpAQCAtNDI2LDI0ICs0MjYsNyBAQAogCiAJLyogaWYgdGhlcmUgYXJlIGF1ZGlvcm91dGVzIGRlZmluZWQsIHdlIGhhdmUgYW4gZXh0ZXJuYWwKIAkgICBBREMgdG8gZGVhbCB3aXRoIGF1ZGlvICovCi0KIAlpZiAoSU5QVVQoaW5wdXQpLmF1ZGlvcm91dGUpIHsKLQotCQkvKiBjeDIzODgncyBDLUFEQyBpcyBjb25uZWN0ZWQgdG8gdGhlIHR1bmVyIG9ubHkuCi0JCSAgIFdoZW4gdXNlZCB3aXRoIFMtVmlkZW8sIHRoYXQgQURDIGlzIGJ1c3kgZGVhbGluZyB3aXRoCi0JCSAgIGNocm9tYSwgc28gYW4gZXh0ZXJuYWwgbXVzdCBiZSB1c2VkIGZvciBiYXNlYmFuZCBhdWRpbyAqLwotCi0JCWlmIChJTlBVVChpbnB1dCkudHlwZSAhPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiAmJgotCQkJSU5QVVQoaW5wdXQpLnR5cGUgIT0gQ1g4OF9SQURJTykgewotCQkJLyogIkFEQyBtb2RlIiAqLwotCQkJY3hfd3JpdGUoQVVEX0kyU0NOVEwsIDB4MSk7Ci0JCQljeF9zZXQoQVVEX0NUTCwgRU5fSTJTSU5fRU5BQkxFKTsKLQkJfSBlbHNlIHsKLQkJCS8qIE5vcm1hbCBtb2RlICovCi0JCQljeF93cml0ZShBVURfSTJTQ05UTCwgMHgwKTsKLQkJCWN4X2NsZWFyKEFVRF9DVEwsIEVOX0kyU0lOX0VOQUJMRSk7Ci0JCX0KLQogCQkvKiBUaGUgd204Nzc1IG1vZHVsZSBoYXMgdGhlICIyIiByb3V0ZSBoYXJkd2lyZWQgaW50bwogCQkgICB0aGUgaW5pdGlhbGl6YXRpb24uIFNvbWUgYm9hcmRzIG1heSB1c2UgZGlmZmVyZW50CiAJCSAgIHJvdXRlcyBmb3IgZGlmZmVyZW50IGlucHV0cy4gSFZSLTEzMDAgc3VyZWx5IGRvZXMgKi8KQEAgLTQ1NCw5ICs0MzcsMTkgQEAKIAkJCXJvdXRlLmlucHV0ID0gSU5QVVQoaW5wdXQpLmF1ZGlvcm91dGU7CiAJCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwKIAkJCQlWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKLQogCQl9Ci0KKwkJLyogY3gyMzg4J3MgQy1BREMgaXMgY29ubmVjdGVkIHRvIHRoZSB0dW5lciBvbmx5LgorCQkgICBXaGVuIHVzZWQgd2l0aCBTLVZpZGVvLCB0aGF0IEFEQyBpcyBidXN5IGRlYWxpbmcgd2l0aAorCQkgICBjaHJvbWEsIHNvIGFuIGV4dGVybmFsIG11c3QgYmUgdXNlZCBmb3IgYmFzZWJhbmQgYXVkaW8gKi8KKwkJaWYgKElOUFVUKGlucHV0KS50eXBlICE9IENYODhfVk1VWF9URUxFVklTSU9OICkgeworCQkJLyogIkkyUyBBREMgbW9kZSIgKi8KKwkJCWNvcmUtPnR2YXVkaW8gPSBXV19JMlNBREM7CisJCQljeDg4X3NldF90dmF1ZGlvKGNvcmUpOworCQl9IGVsc2UgeworCQkJLyogTm9ybWFsIG1vZGUgKi8KKwkJCWN4X3dyaXRlKEFVRF9JMlNDTlRMLCAweDApOworCQkJY3hfY2xlYXIoQVVEX0NUTCwgRU5fSTJTSU5fRU5BQkxFKTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtNzczLDYgKzc2Niw3IEBACiAJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSAwOwogCWludCByYWRpbyA9IDA7CiAKKwlsb2NrX2tlcm5lbCgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJmN4ODgwMF9kZXZsaXN0LCBkZXZsaXN0KSB7CiAJCWlmIChoLT52aWRlb19kZXYtPm1pbm9yID09IG1pbm9yKSB7CiAJCQlkZXYgID0gaDsKQEAgLTc4OCw4ICs3ODIsMTAgQEAKIAkJCWRldiAgID0gaDsKIAkJfQogCX0KLQlpZiAoTlVMTCA9PSBkZXYpCisJaWYgKE5VTEwgPT0gZGV2KSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJY29yZSA9IGRldi0+Y29yZTsKIApAQCAtNzk4LDggKzc5NCwxMCBAQAogCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJZmgtPmRldiAgICAgID0gZGV2OwogCWZoLT5yYWRpbyAgICA9IHJhZGlvOwpAQCAtODI3LDExICs4MjUsMjkgQEAKIAkJY3hfd3JpdGUoTU9fR1AwX0lPLCBjb3JlLT5ib2FyZC5yYWRpby5ncGlvMCk7CiAJCWN4X3dyaXRlKE1PX0dQMV9JTywgY29yZS0+Ym9hcmQucmFkaW8uZ3BpbzEpOwogCQljeF93cml0ZShNT19HUDJfSU8sIGNvcmUtPmJvYXJkLnJhZGlvLmdwaW8yKTsKLQkJY29yZS0+dHZhdWRpbyA9IFdXX0ZNOwotCQljeDg4X3NldF90dmF1ZGlvKGNvcmUpOwotCQljeDg4X3NldF9zdGVyZW8oY29yZSxWNEwyX1RVTkVSX01PREVfU1RFUkVPLDEpOworCQlpZiAoY29yZS0+Ym9hcmQucmFkaW8uYXVkaW9yb3V0ZSkgeworCQkJaWYoY29yZS0+Ym9hcmQuYXVkaW9fY2hpcCAmJgorCQkJCWNvcmUtPmJvYXJkLmF1ZGlvX2NoaXAgPT0gVjRMMl9JREVOVF9XTTg3NzUpIHsKKwkJCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCisJCQkJcm91dGUuaW5wdXQgPSBjb3JlLT5ib2FyZC5yYWRpby5hdWRpb3JvdXRlOworCQkJCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLAorCQkJCQlWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKKwkJCX0KKwkJCS8qICJJMlMgQURDIG1vZGUiICovCisJCQljb3JlLT50dmF1ZGlvID0gV1dfSTJTQURDOworCQkJY3g4OF9zZXRfdHZhdWRpbyhjb3JlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEZNIE1vZGUgKi8KKwkJCWNvcmUtPnR2YXVkaW8gPSBXV19GTTsKKwkJCWN4ODhfc2V0X3R2YXVkaW8oY29yZSk7CisJCQljeDg4X3NldF9zdGVyZW8oY29yZSxWNEwyX1RVTkVSX01PREVfU1RFUkVPLDEpOworCQl9CiAJCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLEFVRENfU0VUX1JBRElPLE5VTEwpOwogCX0KKwl1bmxvY2tfa2VybmVsKCk7CisKKwlhdG9taWNfaW5jKCZjb3JlLT51c2Vycyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkyMCw3ICs5MzYsOCBAQAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJa2ZyZWUoZmgpOwogCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzIChkZXYtPmNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwlpZihhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPmNvcmUtPnVzZXJzKSkKKwkJY3g4OF9jYWxsX2kyY19jbGllbnRzIChkZXYtPmNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKaW5kZXggNTRmZTY1MC4uNzYyMDdjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCkBAIC0yMjEsNiArMjIxLDE0IEBACiAjZGVmaW5lIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0dPTEQgNjUKICNkZWZpbmUgQ1g4OF9CT0FSRF9QUk9MSU5LX1BWXzgwMDBHVCAgICAgICA2NgogI2RlZmluZSBDWDg4X0JPQVJEX0tXT1JMRF9BVFNDXzEyMCAgICAgICAgIDY3CisjZGVmaW5lIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDAgICAgICAgNjgKKyNkZWZpbmUgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMExJVEUgICA2OQorI2RlZmluZSBDWDg4X0JPQVJEX1RFVklJX1M0NjAgICAgICAgICAgICAgIDcwCisjZGVmaW5lIENYODhfQk9BUkRfT01JQ09NX1NTNF9QQ0kgICAgICAgICAgNzEKKyNkZWZpbmUgQ1g4OF9CT0FSRF9UQlNfODkyMCAgICAgICAgICAgICAgICA3MgorI2RlZmluZSBDWDg4X0JPQVJEX1RFVklJX1M0MjAgICAgICAgICAgICAgIDczCisjZGVmaW5lIENYODhfQk9BUkRfUFJPTElOS19QVl9HTE9CQUxfWFRSRU1FIDc0CisjZGVmaW5lIENYODhfQk9BUkRfUFJPRl83MzAwICAgICAgICAgICAgICAgNzUKIAogZW51bSBjeDg4X2l0eXBlIHsKIAlDWDg4X1ZNVVhfQ09NUE9TSVRFMSA9IDEsCkBAIC0yMzksNyArMjQ3LDcgQEAKIAllbnVtIGN4ODhfaXR5cGUgdHlwZTsKIAl1MzIgICAgICAgICAgICAgZ3BpbzAsIGdwaW8xLCBncGlvMiwgZ3BpbzM7CiAJdW5zaWduZWQgaW50ICAgIHZtdXg6MjsKLQl1bnNpZ25lZCBpbnQgICAgYXVkaW9yb3V0ZToyOworCXVuc2lnbmVkIGludCAgICBhdWRpb3JvdXRlOjQ7CiB9OwogCiBzdHJ1Y3QgY3g4OF9ib2FyZCB7CkBAIC0yNTMsNiArMjYxLDcgQEAKIAlzdHJ1Y3QgY3g4OF9pbnB1dCAgICAgICByYWRpbzsKIAllbnVtIGN4ODhfYm9hcmRfdHlwZSAgICBtcGVnOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIGF1ZGlvX2NoaXA7CisJaW50CQkJbnVtX2Zyb250ZW5kczsKIH07CiAKIHN0cnVjdCBjeDg4X3N1YmlkIHsKQEAgLTM0MiwxMSArMzUxLDEzIEBACiAJc3RydWN0IG11dGV4ICAgICAgICAgICAgICAgbG9jazsKIAkvKiB2YXJpb3VzIHY0bCBjb250cm9scyAqLwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGZyZXE7CisJYXRvbWljX3QJCSAgIHVzZXJzOwogCiAJLyogY3g4OC12aWRlbyBuZWVkcyB0byBhY2Nlc3MgY3g4ODAyIGZvciBoeWJyaWQgdHVuZXIgcGxsIGFjY2Vzcy4gKi8KIAlzdHJ1Y3QgY3g4ODAyX2RldiAgICAgICAgICAqZHZiZGV2OwogCWVudW0gY3g4OF9ib2FyZF90eXBlICAgICAgIGFjdGl2ZV90eXBlX2lkOwogCWludAkJCSAgIGFjdGl2ZV9yZWY7CisJaW50CQkJICAgYWN0aXZlX2ZlX2lkOwogfTsKIAogc3RydWN0IGN4ODgwMF9kZXY7CkBAIC00ODEsNyArNDkyLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfRFZCKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X0RWQl9NT0RVTEUpCiAJLyogZm9yIGR2YiBvbmx5ICovCi0Jc3RydWN0IHZpZGVvYnVmX2R2YiAgICAgICAgZHZiOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzIGZyb250ZW5kczsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpIHx8IFwKQEAgLTYwMSw3ICs2MTIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4ODgtY2FyZHMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLWV4dGVybiBpbnQgY3g4OF90dW5lcl9jYWxsYmFjayh2b2lkICpkZXYsIGludCBjb21tYW5kLCBpbnQgYXJnKTsKK2V4dGVybiBpbnQgY3g4OF90dW5lcl9jYWxsYmFjayh2b2lkICpkZXYsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKTsKIGV4dGVybiBpbnQgY3g4OF9nZXRfcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsCiAJCQkgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpKTsKIGV4dGVybiBzdHJ1Y3QgY3g4OF9jb3JlICpjeDg4X2NvcmVfY3JlYXRlKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGludCBucik7CkBAIC02MTksNiArNjMwLDcgQEAKICNkZWZpbmUgV1dfRUlBSgkJIDcKICNkZWZpbmUgV1dfSTJTUFQJIDgKICNkZWZpbmUgV1dfRk0JCSA5CisjZGVmaW5lIFdXX0kyU0FEQwkgMTAKIAogdm9pZCBjeDg4X3NldF90dmF1ZGlvKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUpOwogdm9pZCBjeDg4X25ld3N0YXRpb24oc3RydWN0IGN4ODhfY29yZSAqY29yZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwppbmRleCA3OWZhZWRmLi4yOTg4MTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCQkJCQllcnIoImRhYnVzYl9pc29fY29tcGxldGU6IGludmFsaWQgbGVuICVkIiwgbGVuKTsKIAkJCX0KIAkJCWVsc2UKLQkJCQl3YXJuKCJkYWJ1c2JfaXNvX2NvbXBsZXRlOiBjb3JydXB0ZWQgcGFja2V0IHN0YXR1czogJWQiLCBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOworCQkJCWRldl93YXJuKCZwdXJiLT5kZXYtPmRldiwgImRhYnVzYl9pc29fY29tcGxldGU6IGNvcnJ1cHRlZCBwYWNrZXQgc3RhdHVzOiAlZFxuIiwgcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKTsKIAkJaWYgKGRzdCAhPSBwdXJiLT5hY3R1YWxfbGVuZ3RoKQogCQkJZXJyKCJkc3QhPXB1cmItPmFjdHVhbF9sZW5ndGg6JWQhPSVkIiwgZHN0LCBwdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAl9CkBAIC0yODksNyArMjg5LDcgQEAKIAl9CiAKIAlpZiggcmV0ID09IC1FUElQRSApIHsKLQkJd2FybigiQ0xFQVJfRkVBVFVSRSByZXF1ZXN0IHRvIHJlbW92ZSBTVEFMTCBjb25kaXRpb24uIik7CisJCWRldl93YXJuKCZzLT51c2JkZXYtPmRldiwgIkNMRUFSX0ZFQVRVUkUgcmVxdWVzdCB0byByZW1vdmUgU1RBTEwgY29uZGl0aW9uLlxuIik7CiAJCWlmKHVzYl9jbGVhcl9oYWx0KHMtPnVzYmRldiwgdXNiX3BpcGVlbmRwb2ludChwaXBlKSkpCiAJCQllcnIoInJlcXVlc3QgZmFpbGVkIik7CiAJfQpAQCAtODY2LDcgKzg2Niw4IEBACiAKIAlkYmcoImRhYnVzYl9pbml0OiBkcml2ZXIgcmVnaXN0ZXJlZCIpOwogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kcGM3MTQ2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RwYzcxNDYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhkNmRmNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RwYzcxNDYuYworKysgL2Rldi9udWxsCkBAIC0xLDQwOCArMCwwIEBACi0vKgotICAgIGRwYzcxNDYuYyAtIHY0bDIgZHJpdmVyIGZvciB0aGUgZHBjNzE0NiBkZW1vbnN0cmF0aW9uIGJvYXJkCi0KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMyBNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qLwotCi0jZGVmaW5lIERFQlVHX1ZBUklBQkxFIGRlYnVnCi0KLSNpbmNsdWRlIDxtZWRpYS9zYWE3MTQ2X3Z2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgkvKiBmb3Igc2FhNzExMWEgKi8KLQotI2RlZmluZSBJMkNfU0FBNzExMUEgICAgICAgICAgICAweDI0Ci0KLS8qIEFsbCB1bnVzZWQgYnl0ZXMgYXJlIHJlc2VydmVyZC4gKi8KLSNkZWZpbmUgU0FBNzExWF9DSElQX1ZFUlNJT04gICAgICAgICAgICAweDAwCi0jZGVmaW5lIFNBQTcxMVhfQU5BTE9HX0lOUFVUX0NPTlRST0xfMSAgMHgwMgotI2RlZmluZSBTQUE3MTFYX0FOQUxPR19JTlBVVF9DT05UUk9MXzIgIDB4MDMKLSNkZWZpbmUgU0FBNzExWF9BTkFMT0dfSU5QVVRfQ09OVFJPTF8zICAweDA0Ci0jZGVmaW5lIFNBQTcxMVhfQU5BTE9HX0lOUFVUX0NPTlRST0xfNCAgMHgwNQotI2RlZmluZSBTQUE3MTFYX0hPUklaT05UQUxfU1lOQ19TVEFSVCAgIDB4MDYKLSNkZWZpbmUgU0FBNzExWF9IT1JJWk9OVEFMX1NZTkNfU1RPUCAgICAweDA3Ci0jZGVmaW5lIFNBQTcxMVhfU1lOQ19DT05UUk9MICAgICAgICAgICAgMHgwOAotI2RlZmluZSBTQUE3MTFYX0xVTUlOQU5DRV9DT05UUk9MICAgICAgIDB4MDkKLSNkZWZpbmUgU0FBNzExWF9MVU1JTkFOQ0VfQlJJR0hUTkVTUyAgICAweDBBCi0jZGVmaW5lIFNBQTcxMVhfTFVNSU5BTkNFX0NPTlRSQVNUICAgICAgMHgwQgotI2RlZmluZSBTQUE3MTFYX0NIUk9NQV9TQVRVUkFUSU9OICAgICAgIDB4MEMKLSNkZWZpbmUgU0FBNzExWF9DSFJPTUFfSFVFX0NPTlRST0wgICAgICAweDBECi0jZGVmaW5lIFNBQTcxMVhfQ0hST01BX0NPTlRST0wgICAgICAgICAgMHgwRQotI2RlZmluZSBTQUE3MTFYX0ZPUk1BVF9ERUxBWV9DT05UUk9MICAgIDB4MTAKLSNkZWZpbmUgU0FBNzExWF9PVVRQVVRfQ09OVFJPTF8xICAgICAgICAweDExCi0jZGVmaW5lIFNBQTcxMVhfT1VUUFVUX0NPTlRST0xfMiAgICAgICAgMHgxMgotI2RlZmluZSBTQUE3MTFYX09VVFBVVF9DT05UUk9MXzMgICAgICAgIDB4MTMKLSNkZWZpbmUgU0FBNzExWF9WX0dBVEVfMV9TVEFSVCAgICAgICAgICAweDE1Ci0jZGVmaW5lIFNBQTcxMVhfVl9HQVRFXzFfU1RPUCAgICAgICAgICAgMHgxNgotI2RlZmluZSBTQUE3MTFYX1ZfR0FURV8xX01TQiAgICAgICAgICAgIDB4MTcKLSNkZWZpbmUgU0FBNzExWF9URVhUX1NMSUNFUl9TVEFUVVMgICAgICAweDFBCi0jZGVmaW5lIFNBQTcxMVhfREVDT0RFRF9CWVRFU19PRl9UU18xICAgMHgxQgotI2RlZmluZSBTQUE3MTFYX0RFQ09ERURfQllURVNfT0ZfVFNfMiAgIDB4MUMKLSNkZWZpbmUgU0FBNzExWF9TVEFUVVNfQllURSAgICAgICAgICAgICAweDFGCi0KLSNkZWZpbmUgRFBDX0JPQVJEX0NBTl9ET19WQkkoZGV2KSAgIChkZXYtPnJldmlzaW9uICE9IDApCi0KLXN0YXRpYyBpbnQgZGVidWc7Ci1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgdmVyYm9zaXR5Iik7Ci0KLXN0YXRpYyBpbnQgZHBjX251bTsKLQotI2RlZmluZSBEUENfSU5QVVRTCTIKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9pbnB1dCBkcGNfaW5wdXRzW0RQQ19JTlBVVFNdID0gewotCXsgMCwgIlBvcnQgQSIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAgfSwKLQl7IDEsICJQb3J0IEIiLAlWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLAkyLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwIH0sCi19OwotCi0jZGVmaW5lIERQQ19BVURJT1MJMAotCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyBpb2N0bHNbXSA9IHsKLQl7IFZJRElPQ19HX0lOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfRU5VTUlOUFVULCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19TX1NURCwJCVNBQTcxNDZfQUZURVIgfSwKLQl7IDAsCQkJMCB9Ci19OwotCi1zdHJ1Y3QgZHBjCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZQkqdmlkZW9fZGV2OwotCXN0cnVjdCB2aWRlb19kZXZpY2UJKnZiaV9kZXY7Ci0KLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIJaTJjX2FkYXB0ZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQJKnNhYTcxMTFhOwotCi0JaW50IGN1cl9pbnB1dDsJLyogY3VycmVudCBpbnB1dCAqLwotfTsKLQotc3RhdGljIGludCBkcGNfY2hlY2tfY2xpZW50cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRwYyogZHBjID0gZGF0YTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gaTJjX3ZlcmlmeV9jbGllbnQoZGV2KTsKLQotCWlmKCAhY2xpZW50ICkKLQkJcmV0dXJuIDA7Ci0KLQlpZiggSTJDX1NBQTcxMTFBID09IGNsaWVudC0+YWRkciApCi0JCWRwYy0+c2FhNzExMWEgPSBjbGllbnQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogZml4bWU6IGFkZCB2Ymkgc3R1ZmYgaGVyZSAqLwotc3RhdGljIGludCBkcGNfcHJvYmUoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYpCi17Ci0Jc3RydWN0IGRwYyogZHBjID0gTlVMTDsKLQotCWRwYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcGMpLCBHRlBfS0VSTkVMKTsKLQlpZiggTlVMTCA9PSBkcGMgKSB7Ci0JCXByaW50aygiZHBjX3Y0bDIubzogZHBjX3Byb2JlOiBub3QgZW5vdWdoIGtlcm5lbCBtZW1vcnkuXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogRklYTUU6IGVuYWJsZSBpMmMtcG9ydCBwaW5zLCB2aWRlby1wb3J0LXBpbnMKLQkgICB2aWRlbyBwb3J0IHBpbnMgc2hvdWxkIGJlIGVuYWJsZWQgaGVyZSA/ISAqLwotCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzEsIChNQVNLXzA4IHwgTUFTS18yNCB8IE1BU0tfMTAgfCBNQVNLXzI2KSk7Ci0KLQlkcGMtPmkyY19hZGFwdGVyID0gKHN0cnVjdCBpMmNfYWRhcHRlcikgewotCQkuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAotCQkubmFtZSA9ICJkcGM3MTQ2IiwKLQl9OwotCXNhYTcxNDZfaTJjX2FkYXB0ZXJfcHJlcGFyZShkZXYsICZkcGMtPmkyY19hZGFwdGVyLCBTQUE3MTQ2X0kyQ19CVVNfQklUX1JBVEVfNDgwKTsKLQlpZihpMmNfYWRkX2FkYXB0ZXIoJmRwYy0+aTJjX2FkYXB0ZXIpIDwgMCkgewotCQlERUJfUygoImNhbm5vdCByZWdpc3RlciBpMmMtZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKLQkJa2ZyZWUoZHBjKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JLyogbG9vcCB0aHJvdWdoIGFsbCBpMmMtZGV2aWNlcyBvbiB0aGUgYnVzIGFuZCBsb29rIHdobyBpcyB0aGVyZSAqLwotCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmZHBjLT5pMmNfYWRhcHRlci5kZXYsIGRwYywgZHBjX2NoZWNrX2NsaWVudHMpOwotCi0JLyogY2hlY2sgaWYgYWxsIGRldmljZXMgYXJlIHByZXNlbnQgKi8KLQlpZiAoIWRwYy0+c2FhNzExMWEpIHsKLQkJREVCX0QoKCJkcGNfdjRsMi5vOiBkcGNfYXR0YWNoIGZhaWxlZCBmb3IgdGhpcyBkZXZpY2UuXG4iKSk7Ci0JCWkyY19kZWxfYWRhcHRlcigmZHBjLT5pMmNfYWRhcHRlcik7Ci0JCWtmcmVlKGRwYyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qIGFsbCBkZXZpY2VzIGFyZSBwcmVzZW50LCBwcm9iZSB3YXMgc3VjY2Vzc2Z1bCAqLwotCURFQl9EKCgiZHBjX3Y0bDIubzogZHBjX3Byb2JlIHN1Y2NlZWRlZCBmb3IgdGhpcyBkZXZpY2UuXG4iKSk7Ci0KLQkvKiB3ZSBzdG9yZSB0aGUgcG9pbnRlciBpbiBvdXIgcHJpdmF0ZSBkYXRhIGZpZWxkICovCi0JZGV2LT5leHRfcHJpdiA9IGRwYzsKLQotCXJldHVybiAwOwotfQotCi0vKiBicmluZyBoYXJkd2FyZSB0byBhIHNhbmUgc3RhdGUuIHRoaXMgaGFzIHRvIGJlIGRvbmUsIGp1c3QgaW4gY2FzZSBzb21lb25lCi0gICB3YW50cyB0byBjYXB0dXJlIGZyb20gdGhpcyBkZXZpY2UgYmVmb3JlIGl0IGhhcyBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkLgotICAgdGhlIGNhcHR1cmUgZW5naW5lIHdvdWxkIGJhZGx5IGZhaWwsIGJlY2F1c2Ugbm8gdmFsaWQgc2lnbmFsIGFycml2ZXMgb24gdGhlCi0gICBzYWE3MTQ2LCB0aHVzIGxlYWRpbmcgdG8gdGltZW91dHMgYW5kIHN0dWZmLiAqLwotc3RhdGljIGludCBkcGNfaW5pdF9kb25lKHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2KQotewotCXN0cnVjdCBkcGMqIGRwYyA9IChzdHJ1Y3QgZHBjKilkZXYtPmV4dF9wcml2OwotCi0JREVCX0QoKCJkcGNfdjRsMi5vOiBkcGNfaW5pdF9kb25lIGNhbGxlZC5cbiIpKTsKLQotCS8qIGluaXRpYWxpemUgdGhlIGhlbHBlciBpY3MgdG8gdXNlZnVsIHZhbHVlcyAqLwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHBjLT5zYWE3MTExYSwgMHgwMCwgMHgxMSk7Ci0KLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRwYy0+c2FhNzExMWEsIDB4MDIsIDB4YzApOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHBjLT5zYWE3MTExYSwgMHgwMywgMHgzMCk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcGMtPnNhYTcxMTFhLCAweDA0LCAweDAwKTsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRwYy0+c2FhNzExMWEsIDB4MDUsIDB4MDApOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHBjLT5zYWE3MTExYSwgMHgwNiwgMHhkZSk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcGMtPnNhYTcxMTFhLCAweDA3LCAweGFkKTsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRwYy0+c2FhNzExMWEsIDB4MDgsIDB4YTgpOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHBjLT5zYWE3MTExYSwgMHgwOSwgMHgwMCk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcGMtPnNhYTcxMTFhLCAweDBhLCAweDgwKTsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRwYy0+c2FhNzExMWEsIDB4MGIsIDB4NDcpOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHBjLT5zYWE3MTExYSwgMHgwYywgMHg0MCk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcGMtPnNhYTcxMTFhLCAweDBkLCAweDAwKTsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRwYy0+c2FhNzExMWEsIDB4MGUsIDB4MDMpOwotCi0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcGMtPnNhYTcxMTFhLCAweDEwLCAweGQwKTsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRwYy0+c2FhNzExMWEsIDB4MTEsIDB4MWMpOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHBjLT5zYWE3MTExYSwgMHgxMiwgMHhjMSk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcGMtPnNhYTcxMTFhLCAweDEzLCAweDMwKTsKLQotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHBjLT5zYWE3MTExYSwgMHgxZiwgMHg4MSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dF92diB2dl9kYXRhOwotCi0vKiB0aGlzIGZ1bmN0aW9uIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvYmluZyB3YXMgc3VjY2Vzc2Z1bCAqLwotc3RhdGljIGludCBkcGNfYXR0YWNoKHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9wY2lfZXh0ZW5zaW9uX2RhdGEgKmluZm8pCi17Ci0Jc3RydWN0IGRwYyogZHBjID0gKHN0cnVjdCBkcGMqKWRldi0+ZXh0X3ByaXY7Ci0KLQlERUJfRCgoImRwY192NGwyLm86IGRwY19hdHRhY2ggY2FsbGVkLlxuIikpOwotCi0JLyogY2hlY2tpbmcgZm9yIGkyYy1kZXZpY2VzIGNhbiBiZSBvbWl0dGVkIGhlcmUsIGJlY2F1c2Ugd2UKLQkgICBhbHJlYWR5IGRpZCB0aGlzIGluICJkcGNfdmw0Ml9wcm9iZSIgKi8KLQotCXNhYTcxNDZfdnZfaW5pdChkZXYsJnZ2X2RhdGEpOwotCWlmKCAwICE9IHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZkcGMtPnZpZGVvX2RldiwgZGV2LCAiZHBjIiwgVkZMX1RZUEVfR1JBQkJFUikpIHsKLQkJRVJSKCgiY2Fubm90IHJlZ2lzdGVyIGNhcHR1cmUgdjRsMiBkZXZpY2UuIHNraXBwaW5nLlxuIikpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogaW5pdGlhbGl6YXRpb24gc3R1ZmYgKHZiaSkgKG9ubHkgZm9yIHJldmlzaW9uID4gMCBhbmQgZm9yIGV4dGVuc2lvbnMgd2hpY2ggd2FudCBpdCkqLwotCWlmKCAwICE9IERQQ19CT0FSRF9DQU5fRE9fVkJJKGRldikpIHsKLQkJaWYoIDAgIT0gc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmRwYy0+dmJpX2RldiwgZGV2LCAiZHBjIiwgVkZMX1RZUEVfVkJJKSkgewotCQkJRVJSKCgiY2Fubm90IHJlZ2lzdGVyIHZiaSB2NGwyIGRldmljZS4gc2tpcHBpbmcuXG4iKSk7Ci0JCX0KLQl9Ci0KLQlpMmNfdXNlX2NsaWVudChkcGMtPnNhYTcxMTFhKTsKLQotCXByaW50aygiZHBjOiBmb3VuZCAnZHBjNzE0NiBkZW1vbnN0cmF0aW9uIGJvYXJkJy0lZC5cbiIsZHBjX251bSk7Ci0JZHBjX251bSsrOwotCi0JLyogdGhlIHJlc3QgKi8KLQlkcGMtPmN1cl9pbnB1dCA9IDA7Ci0JZHBjX2luaXRfZG9uZShkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHBjX2RldGFjaChzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldikKLXsKLQlzdHJ1Y3QgZHBjKiBkcGMgPSAoc3RydWN0IGRwYyopZGV2LT5leHRfcHJpdjsKLQotCURFQl9FRSgoImRldjolcFxuIixkZXYpKTsKLQotCWkyY19yZWxlYXNlX2NsaWVudChkcGMtPnNhYTcxMTFhKTsKLQotCXNhYTcxNDZfdW5yZWdpc3Rlcl9kZXZpY2UoJmRwYy0+dmlkZW9fZGV2LGRldik7Ci0JaWYoIDAgIT0gRFBDX0JPQVJEX0NBTl9ET19WQkkoZGV2KSkgewotCQlzYWE3MTQ2X3VucmVnaXN0ZXJfZGV2aWNlKCZkcGMtPnZiaV9kZXYsZGV2KTsKLQl9Ci0Jc2FhNzE0Nl92dl9yZWxlYXNlKGRldik7Ci0KLQlkcGNfbnVtLS07Ci0KLQlpMmNfZGVsX2FkYXB0ZXIoJmRwYy0+aTJjX2FkYXB0ZXIpOwotCWtmcmVlKGRwYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBheGEKLWludCBkcGNfdmJpX2J5cGFzcyhzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldikKLXsKLQlzdHJ1Y3QgZHBjKiBkcGMgPSAoc3RydWN0IGRwYyopZGV2LT5leHRfcHJpdjsKLQotCWludCBpID0gMTsKLQotCS8qIHN3aXRjaCBieXBhc3MgaW4gc2FhNzExMWEgKi8KLQlpZiAoIDAgIT0gZHBjLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKGRwYy0+c2FhNzExMWEsU0FBNzExWF9WQklfQllQQVNTLCAmaSkpIHsKLQkJcHJpbnRrKCJkcGNfdjRsMi5vOiBWQklfQllQQVNTOiBjb3VsZCBub3QgYWRkcmVzcyBzYWE3MTExYS5cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBkcGNfaW9jdGwoc3RydWN0IHNhYTcxNDZfZmggKmZoLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBkcGMqIGRwYyA9IChzdHJ1Y3QgZHBjKilkZXYtPmV4dF9wcml2OwotLyoKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0qLwotCXN3aXRjaChjbWQpCi0JewotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2lucHV0ICppID0gYXJnOwotCQlERUJfRUUoKCJWSURJT0NfRU5VTUlOUFVUICVkLlxuIixpLT5pbmRleCkpOwotCi0JCWlmKCBpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gRFBDX0lOUFVUUykgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltZW1jcHkoaSwgJmRwY19pbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKLQotCQlERUJfRCgoImRwY192NGwyLm86IHY0bDJfaW9jdGw6IFZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLGktPmluZGV4KSk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19HX0lOUFVUOgotCXsKLQkJaW50ICppbnB1dCA9IChpbnQgKilhcmc7Ci0JCSppbnB1dCA9IGRwYy0+Y3VyX2lucHV0OwotCi0JCURFQl9EKCgiZHBjX3Y0bDIubzogVklESU9DX0dfSU5QVVQ6ICVkXG4iLCppbnB1dCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfU19JTlBVVDoKLQl7Ci0JCWludAlpbnB1dCA9ICooaW50ICopYXJnOwotCi0JCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gRFBDX0lOUFVUUykgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlkcGMtPmN1cl9pbnB1dCA9IGlucHV0OwotCi0JCS8qIGZpeG1lOiBzd2l0Y2ggaW5wdXQgaGVyZSwgc3dpdGNoIGF1ZGlvLCB0b28hICovCi0vLwkJc2FhNzE0Nl9zZXRfaHBzX3NvdXJjZV9hbmRfc3luYyhkZXYsIGlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc291cmNlLCBpbnB1dF9wb3J0X3NlbGVjdGlvbltpbnB1dF0uaHBzX3N5bmMpOwotCQlwcmludGsoImRwY192NGwyLm86IFZJRElPQ19TX0lOUFVUOiBmaXhtZSBzd2l0Y2ggaW5wdXQuXG4iKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JZGVmYXVsdDoKLS8qCi0JCURFQl9EKCgiZHBjX3Y0bDIubzogdjRsMl9pb2N0bCBkb2VzIG5vdCBoYW5kbGUgdGhpcyBpb2N0bC5cbiIpKTsKLSovCi0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN0ZF9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldiwgc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQgKnN0ZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzYWE3MTQ2X3N0YW5kYXJkIHN0YW5kYXJkW10gPSB7Ci0JewotCQkubmFtZQk9ICJQQUwiLCAJLmlkCT0gVjRMMl9TVERfUEFMLAotCQkudl9vZmZzZXQJPSAweDE3LAkudl9maWVsZCAJPSAyODgsCi0JCS5oX29mZnNldAk9IDB4MTQsCS5oX3BpeGVscyAJPSA2ODAsCi0JCS52X21heF9vdXQJPSA1NzYsCS5oX21heF9vdXQJPSA3NjgsCi0JfSwgewotCQkubmFtZQk9ICJOVFNDIiwgCS5pZAk9IFY0TDJfU1REX05UU0MsCi0JCS52X29mZnNldAk9IDB4MTYsCS52X2ZpZWxkIAk9IDI0MCwKLQkJLmhfb2Zmc2V0CT0gMHgwNiwJLmhfcGl4ZWxzIAk9IDcwOCwKLQkJLnZfbWF4X291dAk9IDQ4MCwJLmhfbWF4X291dAk9IDY0MCwKLQl9LCB7Ci0JCS5uYW1lCT0gIlNFQ0FNIiwgCS5pZAk9IFY0TDJfU1REX1NFQ0FNLAotCQkudl9vZmZzZXQJPSAweDE0LAkudl9maWVsZCAJPSAyODgsCi0JCS5oX29mZnNldAk9IDB4MTQsCS5oX3BpeGVscyAJPSA3MjAsCi0JCS52X21heF9vdXQJPSA1NzYsCS5oX21heF9vdXQJPSA3NjgsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbiBleHRlbnNpb247Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9wY2lfZXh0ZW5zaW9uX2RhdGEgZHBjID0gewotCS5leHRfcHJpdiA9ICJNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCIsCi0JLmV4dCA9ICZleHRlbnNpb24sCi19OwotCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX3RibFtdID0gewotCXsKLQkJLnZlbmRvciAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKLQkJLmRldmljZQkgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTQ2LAotCQkuc3VidmVuZG9yID0gMHgwMDAwLAotCQkuc3ViZGV2aWNlID0gMHgwMDAwLAotCQkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykmZHBjLAotCX0sIHsKLQkJLnZlbmRvciA9IDAsCi0JfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaV90YmwpOwotCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0X3Z2IHZ2X2RhdGEgPSB7Ci0JLmlucHV0cwkJPSBEUENfSU5QVVRTLAotCS5jYXBhYmlsaXRpZXMJPSBWNEwyX0NBUF9WQklfQ0FQVFVSRSwKLQkuc3RkcwkJPSAmc3RhbmRhcmRbMF0sCi0JLm51bV9zdGRzCT0gc2l6ZW9mKHN0YW5kYXJkKS9zaXplb2Yoc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQpLAotCS5zdGRfY2FsbGJhY2sJPSAmc3RkX2NhbGxiYWNrLAotCS5pb2N0bHMJCT0gJmlvY3Rsc1swXSwKLQkuaW9jdGwJCT0gZHBjX2lvY3RsLAotfTsKLQotc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbiBleHRlbnNpb24gPSB7Ci0JLm5hbWUJCT0gImRwYzcxNDYgZGVtb25zdHJhdGlvbiBib2FyZCIsCi0JLmZsYWdzCQk9IFNBQTcxNDZfVVNFX0kyQ19JUlEsCi0KLQkucGNpX3RibAk9ICZwY2lfdGJsWzBdLAotCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCi0KLQkucHJvYmUJCT0gZHBjX3Byb2JlLAotCS5hdHRhY2gJCT0gZHBjX2F0dGFjaCwKLQkuZGV0YWNoCQk9IGRwY19kZXRhY2gsCi0KLQkuaXJxX21hc2sJPSAwLAotCS5pcnFfZnVuYwk9IE5VTEwsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBkcGNfaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlpZiggMCAhPSBzYWE3MTQ2X3JlZ2lzdGVyX2V4dGVuc2lvbigmZXh0ZW5zaW9uKSkgewotCQlERUJfUygoImZhaWxlZCB0byByZWdpc3RlciBleHRlbnNpb24uXG4iKSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZHBjX2NsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0Jc2FhNzE0Nl91bnJlZ2lzdGVyX2V4dGVuc2lvbigmZXh0ZW5zaW9uKTsKLX0KLQotbW9kdWxlX2luaXQoZHBjX2luaXRfbW9kdWxlKTsKLW1vZHVsZV9leGl0KGRwY19jbGVhbnVwX21vZHVsZSk7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigidmlkZW80bGludXgtMiBkcml2ZXIgZm9yIHRoZSAnZHBjNzE0NiBkZW1vbnN0cmF0aW9uIGJvYXJkJyIpOwotTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKaW5kZXggZGU5NDNjZi4uZDY1ZDA1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKQEAgLTExMDEsNyArMTEwMSw3IEBACiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODIwKSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9VTktOT1dOIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODIxKSwKLQkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9VTktOT1dOIH0sCisJCQkuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfUFJPTElOS19QTEFZVFZfVVNCMiB9LAogCXsgVVNCX0RFVklDRSgweGViMWEsIDB4Mjg2MCksCiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfVU5LTk9XTiB9LAogCXsgVVNCX0RFVklDRSgweGViMWEsIDB4Mjg2MSksCkBAIC0xMjcxLDcgKzEyNzEsNyBAQAogCXsweDFiYTUwMDgwLCBFTTI4NjBfQk9BUkRfUE9JTlROSVhfSU5UUkFPUkFMX0NBTUVSQSwgVFVORVJfQUJTRU5UfSwKIH07CiAKLWludCBlbTI4eHhfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHRyLCBpbnQgY29tbWFuZCwgaW50IGFyZykKK2ludCBlbTI4eHhfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHRyLCBpbnQgY29tcG9uZW50LCBpbnQgY29tbWFuZCwgaW50IGFyZykKIHsKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBlbTI4eHggKmRldiA9IHB0cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYwppbmRleCBkMmIxYTFhLi5jOTllMjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCkBAIC0yNDksNyArMjQ5LDYgQEAKIAltZW1zZXQoJmNmZywgMCwgc2l6ZW9mKGNmZykpOwogCWNmZy5pMmNfYWRhcCAgPSAmZGV2LT5pMmNfYWRhcDsKIAljZmcuaTJjX2FkZHIgID0gYWRkcjsKLQljZmcuY2FsbGJhY2sgID0gZW0yOHh4X3R1bmVyX2NhbGxiYWNrOwogCiAJaWYgKCFkZXYtPmR2Yi0+ZnJvbnRlbmQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiBkdmIgZnJvbnRlbmQgbm90IGF0dGFjaGVkLiAiCkBAIC0yNzQsNyArMjczLDcgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLWludCByZWdpc3Rlcl9kdmIoc3RydWN0IGVtMjh4eF9kdmIgKmR2YiwKK3N0YXRpYyBpbnQgcmVnaXN0ZXJfZHZiKHN0cnVjdCBlbTI4eHhfZHZiICpkdmIsCiAJCSBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsCiAJCSBzdHJ1Y3QgZW0yOHh4ICpkZXYsCiAJCSBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCkBAIC00MjIsNiArNDIxLDggQEAKIAkJfQogCQlicmVhazsKIAljYXNlIEVNMjg4MF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzkwMDoKKwljYXNlIEVNMjg4MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFM6CisJY2FzZSBFTTI4ODBfQk9BUkRfS1dPUkxEX0RWQl8zMTBVOgogCQlkdmItPmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKIAkJCQkJICAgJmVtMjh4eF96bDEwMzUzX3dpdGhfeGMzMDI4LAogCQkJCQkgICAmZGV2LT5pMmNfYWRhcCk7CkBAIC00NDMsMjQgKzQ0NCw2IEBACiAJCX0KIAkJYnJlYWs7CiAjZW5kaWYKLQljYXNlIEVNMjg4MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFM6Ci0JCWR2Yi0+ZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAotCQkJCQkJJmVtMjh4eF96bDEwMzUzX3dpdGhfeGMzMDI4LAotCQkJCQkJJmRldi0+aTJjX2FkYXApOwotCQlpZiAoYXR0YWNoX3hjMzAyOCgweDYxLCBkZXYpIDwgMCkgewotCQkJIHJlc3VsdCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dF9mcmVlOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgRU0yODgwX0JPQVJEX0tXT1JMRF9EVkJfMzEwVToKLQkJZHZiLT5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCi0JCQkJCQkmZW0yOHh4X3psMTAzNTNfd2l0aF94YzMwMjgsCi0JCQkJCQkmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChhdHRhY2hfeGMzMDI4KDB4NjEsIGRldikgPCAwKSB7Ci0JCQlyZXN1bHQgPSAtRUlOVkFMOwotCQkJZ290byBvdXRfZnJlZTsKLQkJfQotCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIiVzLzI6IFRoZSBmcm9udGVuZCBvZiB5b3VyIERWQi9BVFNDIGNhcmQiCiAJCQkJIiBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLApAQCAtNDc0LDYgKzQ1Nyw4IEBACiAJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQorCS8qIGRlZmluZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgcG9pbnRlciAqLworCWR2Yi0+ZnJvbnRlbmQtPmNhbGxiYWNrID0gZW0yOHh4X3R1bmVyX2NhbGxiYWNrOwogCiAJLyogcmVnaXN0ZXIgZXZlcnl0aGluZyAqLwogCXJlc3VsdCA9IHJlZ2lzdGVyX2R2YihkdmIsIFRISVNfTU9EVUxFLCBkZXYsICZkZXYtPnVkZXYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKaW5kZXggOTc4NTMzOC4uM2JhYjU2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYwpAQCAtMTQzLDEwICsxNDMsMTEgQEAKIAl9CiAJZm9yICh3cml0ZV90aW1lb3V0ID0gRU0yODAwX0kyQ19XUklURV9USU1FT1VUOyB3cml0ZV90aW1lb3V0ID4gMDsKIAkgICAgIHdyaXRlX3RpbWVvdXQgLT0gNSkgewotCQl1bnNpZ25lZCBtc2cgPSBkZXYtPmVtMjh4eF9yZWFkX3JlZyhkZXYsIDB4NSk7Ci0JCWlmIChtc2cgPT0gMHg5NCkKKwkJdW5zaWduZWQgcmVnID0gZGV2LT5lbTI4eHhfcmVhZF9yZWcoZGV2LCAweDUpOworCisJCWlmIChyZWcgPT0gMHg5NCkKIAkJCXJldHVybiAtRU5PREVWOwotCQllbHNlIGlmIChtc2cgPT0gMHg4NCkKKwkJZWxzZSBpZiAocmVnID09IDB4ODQpCiAJCQlyZXR1cm4gMDsKIAkJbXNsZWVwKDUpOwogCX0KQEAgLTMzNSw4ICszMzYsMTEgQEAKIAogCS8qIENoZWNrIGlmIGJvYXJkIGhhcyBlZXByb20gKi8KIAllcnIgPSBpMmNfbWFzdGVyX3JlY3YoJmRldi0+aTJjX2NsaWVudCwgJmJ1ZiwgMCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiAtMTsKKwlpZiAoZXJyIDwgMCkgeworCQllbTI4eHhfZXJyZGV2KCIlczogaTJjX21hc3Rlcl9yZWN2IGZhaWxlZCEgZXJyIFslZF1cbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAKIAlidWYgPSAwOwogCkBAIC0zNDQsNyArMzQ4LDcgQEAKIAlpZiAoZXJyICE9IDEpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEh1aCwgbm8gZWVwcm9tIHByZXNlbnQgKGVycj0lZCk/XG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiBlcnI7CiAJfQogCXdoaWxlIChzaXplID4gMCkgewogCQlpZiAoc2l6ZSA+IDE2KQpAQCAtMzU3LDcgKzM2MSw3IEBACiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIiVzOiBpMmMgZWVwcm9tIHJlYWQgZXJyb3IgKGVycj0lZClcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIGVycjsKIAkJfQogCQlzaXplIC09IGJsb2NrOwogCQlwICs9IGJsb2NrOwpAQCAtNTg1LDE4ICs1ODksMzEgQEAKICAqLwogaW50IGVtMjh4eF9pMmNfcmVnaXN0ZXIoc3RydWN0IGVtMjh4eCAqZGV2KQogeworCWludCByZXR2YWw7CisKIAlCVUdfT04oIWRldi0+ZW0yOHh4X3dyaXRlX3JlZ3MgfHwgIWRldi0+ZW0yOHh4X3JlYWRfcmVnKTsKIAlCVUdfT04oIWRldi0+ZW0yOHh4X3dyaXRlX3JlZ3NfcmVxIHx8ICFkZXYtPmVtMjh4eF9yZWFkX3JlZ19yZXEpOwogCWRldi0+aTJjX2FkYXAgPSBlbTI4eHhfYWRhcF90ZW1wbGF0ZTsKIAlkZXYtPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT51ZGV2LT5kZXY7CiAJc3RyY3B5KGRldi0+aTJjX2FkYXAubmFtZSwgZGV2LT5uYW1lKTsKIAlkZXYtPmkyY19hZGFwLmFsZ29fZGF0YSA9IGRldjsKLQlpMmNfYWRkX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXApOworCisJcmV0dmFsID0gaTJjX2FkZF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQllbTI4eHhfZXJyZGV2KCIlczogaTJjX2FkZF9hZGFwdGVyIGZhaWxlZCEgcmV0dmFsIFslZF1cbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CiAKIAlkZXYtPmkyY19jbGllbnQgPSBlbTI4eHhfY2xpZW50X3RlbXBsYXRlOwogCWRldi0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmRldi0+aTJjX2FkYXA7CiAKLQllbTI4eHhfaTJjX2VlcHJvbShkZXYsIGRldi0+ZWVkYXRhLCBzaXplb2YoZGV2LT5lZWRhdGEpKTsKKwlyZXR2YWwgPSBlbTI4eHhfaTJjX2VlcHJvbShkZXYsIGRldi0+ZWVkYXRhLCBzaXplb2YoZGV2LT5lZWRhdGEpKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQllbTI4eHhfZXJyZGV2KCIlczogZW0yOHh4X2kyX2VlcHJvbSBmYWlsZWQhIHJldHZhbCBbJWRdXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQogCiAJaWYgKGkyY19zY2FuKQogCQllbTI4eHhfZG9faTJjX3NjYW4oZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKaW5kZXggNDlhYjA2Mi4uYzUzNjQ5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKQEAgLTUxMywxMCArNTEzLDE3IEBACiAgKi8KIHN0YXRpYyBpbnQgZW0yOHh4X2NvbmZpZyhzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7CisJaW50IHJldHZhbDsKIAogCS8qIFNldHMgSTJDIHNwZWVkIHRvIDEwMCBLSHogKi8KLQlpZiAoIWRldi0+aXNfZW0yODAwKQotCQllbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDA2LCAiXHg0MCIsIDEpOworCWlmICghZGV2LT5pc19lbTI4MDApIHsKKwkJcmV0dmFsID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwNiwgIlx4NDAiLCAxKTsKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWVtMjh4eF9lcnJkZXYoIiVzOiBlbTI4eHhfd3JpdGVfcmVnc19yZXEgZmFpbGVkISByZXR2YWwgWyVkXVxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0dmFsKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CiAKIAkvKiBlbmFibGUgdmJpIGNhcHR1cmluZyAqLwogCkBAIC0xNTEyLDYgKzE1MTksNyBAQAogCXN0cnVjdCBlbTI4eHhfZmggKmZoOwogCWVudW0gdjRsMl9idWZfdHlwZSBmaF90eXBlID0gMDsKIAorCWxvY2tfa2VybmVsKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShoLCAmZW0yOHh4X2Rldmxpc3QsIGRldmxpc3QpIHsKIAkJaWYgKGgtPnZkZXYtPm1pbm9yID09IG1pbm9yKSB7CiAJCQlkZXYgID0gaDsKQEAgLTE1MjcsOCArMTUzNSwxMCBAQAogCQkJZGV2ICAgPSBoOwogCQl9CiAJfQotCWlmIChOVUxMID09IGRldikKKwlpZiAoTlVMTCA9PSBkZXYpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAllbTI4eHhfdmlkZW9kYmcoIm9wZW4gbWlub3I9JWQgdHlwZT0lcyB1c2Vycz0lZFxuIiwKIAkJCQltaW5vciwgdjRsMl90eXBlX25hbWVzW2ZoX3R5cGVdLCBkZXYtPnVzZXJzKTsKQEAgLTE1MzcsNiArMTU0Nyw3IEBACiAJZmggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZW0yOHh4X2ZoKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaCkgewogCQllbTI4eHhfZXJyZGV2KCJlbTI4eHgtdmlkZW8uYzogT3V0IG9mIG1lbW9yeT8hXG4iKTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKQEAgLTE1NzMsNiArMTU4NCw3IEBACiAJCQlzaXplb2Yoc3RydWN0IGVtMjh4eF9idWZmZXIpLCBmaCk7CiAKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIGVyckNvZGU7CiB9CkBAIC0xNTg4LDggKzE2MDAsNyBAQAogCS8qRklYTUU6IEkyQyBJUiBzaG91bGQgYmUgZGlzY29ubmVjdGVkICovCiAKIAllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2VzIC9kZXYvdmlkZW8lZCBhbmQgL2Rldi92YmklZCBkZXJlZ2lzdGVyZWRcbiIsCi0JCQkJZGV2LT52ZGV2LT5taW5vci1NSU5PUl9WRkxfVFlQRV9HUkFCQkVSX01JTiwKLQkJCQlkZXYtPnZiaV9kZXYtPm1pbm9yLU1JTk9SX1ZGTF9UWVBFX1ZCSV9NSU4pOworCQkJCWRldi0+dmRldi0+bnVtLCBkZXYtPnZiaV9kZXYtPm51bSk7CiAJbGlzdF9kZWwoJmRldi0+ZGV2bGlzdCk7CiAJaWYgKGRldi0+c2J1dHRvbl9pbnB1dF9kZXYpCiAJCWVtMjh4eF9kZXJlZ2lzdGVyX3NuYXBzaG90X2J1dHRvbihkZXYpOwpAQCAtMTk0OCwxMyArMTk1OSwyMyBAQAogCX0KIAogCS8qIHJlZ2lzdGVyIGkyYyBidXMgKi8KLQllbTI4eHhfaTJjX3JlZ2lzdGVyKGRldik7CisJZXJyQ29kZSA9IGVtMjh4eF9pMmNfcmVnaXN0ZXIoZGV2KTsKKwlpZiAoZXJyQ29kZSA8IDApIHsKKwkJZW0yOHh4X2VycmRldigiJXM6IGVtMjh4eF9pMmNfcmVnaXN0ZXIgLSBlcnJDb2RlIFslZF0hXG4iLAorCQkJX19mdW5jX18sIGVyckNvZGUpOworCQlyZXR1cm4gZXJyQ29kZTsKKwl9CiAKIAkvKiBEbyBib2FyZCBzcGVjaWZpYyBpbml0IGFuZCBlZXByb20gcmVhZGluZyAqLwogCWVtMjh4eF9jYXJkX3NldHVwKGRldik7CiAKIAkvKiBDb25maWd1cmUgYXVkaW8gKi8KLQllbTI4eHhfYXVkaW9fYW5hbG9nX3NldChkZXYpOworCWVyckNvZGUgPSBlbTI4eHhfYXVkaW9fYW5hbG9nX3NldChkZXYpOworCWlmIChlcnJDb2RlIDwgMCkgeworCQllbTI4eHhfZXJyZGV2KCIlczogZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQgLSBlcnJDb2RlIFslZF0hXG4iLAorCQkJX19mdW5jX18sIGVyckNvZGUpOworCQlyZXR1cm4gZXJyQ29kZTsKKwl9CiAKIAkvKiBjb25maWd1cmUgdGhlIGRldmljZSAqLwogCWVtMjh4eF9jb25maWdfaTJjKGRldik7CkBAIC0xOTc0LDYgKzE5OTUsMTEgQEAKIAlkZXYtPmN0bF9pbnB1dCA9IDI7CiAKIAllcnJDb2RlID0gZW0yOHh4X2NvbmZpZyhkZXYpOworCWlmIChlcnJDb2RlIDwgMCkgeworCQllbTI4eHhfZXJyZGV2KCIlczogZW0yOHh4X2NvbmZpZyAtIGVyckNvZGUgWyVkXSFcbiIsCisJCQlfX2Z1bmNfXywgZXJyQ29kZSk7CisJCXJldHVybiBlcnJDb2RlOworCX0KIAogCWxpc3RfYWRkX3RhaWwoJmRldi0+ZGV2bGlzdCwgJmVtMjh4eF9kZXZsaXN0KTsKIApAQCAtMjAyNiwxNyArMjA1MiwyNyBAQAogCiAJaWYgKGRldi0+aGFzX21zcDM0eHgpIHsKIAkJLyogU2VuZCBhIHJlc2V0IHRvIG90aGVyIGNoaXBzIHZpYSBncGlvICovCi0JCWVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDAsIDB4MDgsICJceGY3IiwgMSk7CisJCWVyckNvZGUgPSBlbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDA4LCAiXHhmNyIsIDEpOworCQlpZiAoZXJyQ29kZSA8IDApIHsKKwkJCWVtMjh4eF9lcnJkZXYoIiVzOiBlbTI4eHhfd3JpdGVfcmVnc19yZXEgLSBtc3AzNHh4KDEpIGZhaWxlZCEgZXJyQ29kZSBbJWRdXG4iLAorCQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKKwkJCXJldHVybiBlcnJDb2RlOworCQl9CiAJCW1zbGVlcCgzKTsKLQkJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwOCwgIlx4ZmYiLCAxKTsKKworCQllcnJDb2RlID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwOCwgIlx4ZmYiLCAxKTsKKwkJaWYgKGVyckNvZGUgPCAwKSB7CisJCQllbTI4eHhfZXJyZGV2KCIlczogZW0yOHh4X3dyaXRlX3JlZ3NfcmVxIC0gbXNwMzR4eCgyKSBmYWlsZWQhIGVyckNvZGUgWyVkXVxuIiwKKwkJCQlfX2Z1bmNfXywgZXJyQ29kZSk7CisJCQlyZXR1cm4gZXJyQ29kZTsKKwkJfQogCQltc2xlZXAoMyk7CiAJfQogCiAJdmlkZW9fbXV4KGRldiwgMCk7CiAKIAllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQgYW5kIC9kZXYvdmJpJWRcbiIsCi0JCQkJZGV2LT52ZGV2LT5taW5vci1NSU5PUl9WRkxfVFlQRV9HUkFCQkVSX01JTiwKLQkJCQlkZXYtPnZiaV9kZXYtPm1pbm9yLU1JTk9SX1ZGTF9UWVBFX1ZCSV9NSU4pOworCQkJCWRldi0+dmRldi0+bnVtLCBkZXYtPnZiaV9kZXYtPm51bSk7CiAKIAltdXRleF9sb2NrKCZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3RfbG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3QpKSB7CkBAIC0yMjM2LDcgKzIyNzIsNyBAQAogCQllbTI4eHhfd2FybgogCQkgICAgKCJkZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4hIERlcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgIgogCQkgICAgICJkZWFsbG9jYXRpb24gYXJlIGRlZmVycmVkIG9uIGNsb3NlLlxuIiwKLQkJCQlkZXYtPnZkZXYtPm1pbm9yLU1JTk9SX1ZGTF9UWVBFX0dSQUJCRVJfTUlOKTsKKwkJCQlkZXYtPnZkZXYtPm51bSk7CiAKIAkJZGV2LT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJZW0yOHh4X3VuaW5pdF9pc29jKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCmluZGV4IDlhMzMxMDcuLjgyNzgxMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCkBAIC00MTEsOCArNDExLDggQEAKIAkvKiBmcmFtZSBwcm9wZXJ0aWVzICovCiAJaW50IHdpZHRoOwkJLyogY3VycmVudCBmcmFtZSB3aWR0aCAqLwogCWludCBoZWlnaHQ7CQkvKiBjdXJyZW50IGZyYW1lIGhlaWdodCAqLwotCWludCBoc2NhbGU7CQkvKiBob3Jpem9udGFsIHNjYWxlIGZhY3RvciAoc2VlIGRhdGFzaGVldCkgKi8KLQlpbnQgdnNjYWxlOwkJLyogdmVydGljYWwgc2NhbGUgZmFjdG9yIChzZWUgZGF0YXNoZWV0KSAqLworCXVuc2lnbmVkIGhzY2FsZTsJLyogaG9yaXpvbnRhbCBzY2FsZSBmYWN0b3IgKHNlZSBkYXRhc2hlZXQpICovCisJdW5zaWduZWQgdnNjYWxlOwkvKiB2ZXJ0aWNhbCBzY2FsZSBmYWN0b3IgKHNlZSBkYXRhc2hlZXQpICovCiAJaW50IGludGVybGFjZWQ7CQkvKiAxPWludGVybGFjZSBmaWxlZHMsIDA9anVzdCB0b3AgZmlsZWRzICovCiAJdW5zaWduZWQgaW50IHZpZGVvX2J5dGVzcmVhZDsJLyogTnVtYmVyIG9mIGJ5dGVzIHJlYWQgKi8KIApAQCAtNTI4LDcgKzUyOCw3IEBACiBleHRlcm4gc3RydWN0IHVzYl9kZXZpY2VfaWQgZW0yOHh4X2lkX3RhYmxlW107CiBleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IGVtMjh4eF9iY291bnQ7CiB2b2lkIGVtMjh4eF9zZXRfaXIoc3RydWN0IGVtMjh4eCAqZGV2LCBzdHJ1Y3QgSVJfaTJjICppcik7Ci1pbnQgZW0yOHh4X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnB0ciwgaW50IGNvbW1hbmQsIGludCBhcmcpOworaW50IGVtMjh4eF90dW5lcl9jYWxsYmFjayh2b2lkICpwdHIsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKTsKIAogLyogUHJvdmlkZWQgYnkgZW0yOHh4LWlucHV0LmMgKi8KIC8qIFRPRE86IENoZWNrIGlmIHRoZSBzdGFuZGFyZCBnZXRfa2V5IGhhbmRsZXJzIG9uIGlyLWNvbW1vbiBjYW4gYmUgdXNlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYwppbmRleCA4ZGIyYTA1Li43YTg1YzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYwpAQCAtMTIxNCw3ICsxMjE0LDcgQEAKIAlpZiAoIWRvd25fcmVhZF90cnlsb2NrKCZldDYxeDI1MV9kZXZfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwljYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCiAJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmY2FtLT5wcm9iZSkpIHsKIAkJdXBfcmVhZCgmZXQ2MXgyNTFfZGV2X2xvY2spOwpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAKIAogCWRvd25fd3JpdGUoJmV0NjF4MjUxX2Rldl9sb2NrKTsKIAotCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCWNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAKIAlldDYxeDI1MV9zdG9wX3RyYW5zZmVyKGNhbSk7CiAJZXQ2MXgyNTFfcmVsZWFzZV9idWZmZXJzKGNhbSk7CkBAIC0xMzE4LDcgKzEzMTgsNyBAQAogZXQ2MXgyNTFfcmVhZChzdHJ1Y3QgZmlsZSogZmlscCwgY2hhciBfX3VzZXIgKiBidWYsCiAJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QqIGZfcG9zKQogewotCXN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCBldDYxeDI1MV9kZXZpY2UgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAJc3RydWN0IGV0NjF4MjUxX2ZyYW1lX3QqIGYsICogaTsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAJbG9uZyB0aW1lb3V0OwpAQCAtMTQyNiw3ICsxNDI2LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBldDYxeDI1MV9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCBldDYxeDI1MV9kZXZpY2UgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAJc3RydWN0IGV0NjF4MjUxX2ZyYW1lX3QqIGY7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKQEAgLTE1MDIsNyArMTUwMiw3IEBACiAKIHN0YXRpYyBpbnQgZXQ2MXgyNTFfbW1hcChzdHJ1Y3QgZmlsZSogZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJc3RydWN0IGV0NjF4MjUxX2RldmljZSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCiAJCSAgICAgIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKIAl2b2lkICpwb3M7CkBAIC0yMzk1LDcgKzIzOTUsNyBAQAogc3RhdGljIGludCBldDYxeDI1MV9pb2N0bF92NGwyKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICogYXJnKQogewotCXN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCBldDYxeDI1MV9kZXZpY2UgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCkBAIC0yNDkwLDcgKzI0OTAsNyBAQAogc3RhdGljIGludCBldDYxeDI1MV9pb2N0bChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCwKIAkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwlzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCWludCBlcnIgPSAwOwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3BfbXV0ZXgpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCmluZGV4IDQyYjkwNzQuLjRkMDgxNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKQEAgLTEsMTMgKzEsMjEyIEBACi1jb25maWcgVVNCX0dTUENBCi0JdHJpc3RhdGUgIlVTQiBHU1BDQSBkcml2ZXIiCittZW51Y29uZmlnIFVTQl9HU1BDQQorCXRyaXN0YXRlICJHU1BDQSBiYXNlZCB3ZWJjYW1zIgogCWRlcGVuZHMgb24gVklERU9fVjRMMgorCWRlZmF1bHQgbQogCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdmFyaW91cyBVU0Igd2ViY2Ftcy4KKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzZWxlY3Rpbmcgd2ViY2FtcyBiYXNlZAorCW9uIHRoZSBHU1BDQSBmcmFtZXdvcmsuCiAKLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dD4gZm9yIG1vcmUgaW5mby4KKwlTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQ+IGZvciBtb3JlIGluZm8uCiAKLQkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KLQkgICJWaWRlbyBGb3IgTGludXgiIHRvIHVzZSB0aGlzIGRyaXZlci4KKwlUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCisJIlZpZGVvIEZvciBMaW51eCIgdG8gdXNlIHRoaXMgZHJpdmVyLgogCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIG1vZHVsZXMsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlcyB3aWxsIGJlIGNhbGxlZCBnc3BjYV94eHh4LgorCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgbW9kdWxlcywgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlcyB3aWxsIGJlIGNhbGxlZCBnc3BjYV9tYWluLgorCisKK2lmIFVTQl9HU1BDQSAmJiBWSURFT19WNEwyCisKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9LY29uZmlnIgorCitjb25maWcgVVNCX0dTUENBX0NPTkVYCisJdHJpc3RhdGUgIkNvbmV4YW50IENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIENvbmV4YW50IGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfY29uZXguCisKK2NvbmZpZyBVU0JfR1NQQ0FfRVRPTVMKKwl0cmlzdGF0ZSAiRXRvbXMgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIEV0b21zIGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfZXRvbXMuCisKK2NvbmZpZyBVU0JfR1NQQ0FfRklORVBJWAorCXRyaXN0YXRlICJGdWppZmlsbSBGaW5lUGl4IFVTQiBWNEwyIGRyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgRmluZVBpeCBjaGlwLgorCisJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX2ZpbmVwaXguCisKK2NvbmZpZyBVU0JfR1NQQ0FfTUFSUworCXRyaXN0YXRlICJNYXJzIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBNYXJzIGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfbWFycy4KKworY29uZmlnIFVTQl9HU1BDQV9PVjUxOQorCXRyaXN0YXRlICJPVjUxOSBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgT1Y1MTkgY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9vdjUxOS4KKworY29uZmlnIFVTQl9HU1BDQV9QQUMyMDcKKwl0cmlzdGF0ZSAiUGl4YXJ0IFBBQzIwNyBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgUEFDMjA3IGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfcGFjMjA3LgorCitjb25maWcgVVNCX0dTUENBX1BBQzczMTEKKwl0cmlzdGF0ZSAiUGl4YXJ0IFBBQzczMTEgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFBBQzczMTEgY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9wYWM3MzExLgorCitjb25maWcgVVNCX0dTUENBX1NPTklYQgorCXRyaXN0YXRlICJTTjlDMTAyIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTT05JWEIgY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zb25peGIuCisKK2NvbmZpZyBVU0JfR1NQQ0FfU09OSVhKCisJdHJpc3RhdGUgIlNPTklYIEpQRUcgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFNPTklYSiBjaGlwLgorCisJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3Nvbml4agorCitjb25maWcgVVNCX0dTUENBX1NQQ0E1MDAKKwl0cmlzdGF0ZSAiU1BDQTUwMCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgU1BDQTUwMCBjaGlwLgorCisJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3NwY2E1MDAuCisKK2NvbmZpZyBVU0JfR1NQQ0FfU1BDQTUwMQorCXRyaXN0YXRlICJTUENBNTAxIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTUENBNTAxIGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffc3BjYTUwMS4KKworY29uZmlnIFVTQl9HU1BDQV9TUENBNTA1CisJdHJpc3RhdGUgIlNQQ0E1MDUgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFNQQ0E1MDUgY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcGNhNTA1LgorCitjb25maWcgVVNCX0dTUENBX1NQQ0E1MDYKKwl0cmlzdGF0ZSAiU1BDQTUwNiBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgU1BDQTUwNiBjaGlwLgorCisJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3NwY2E1MDYuCisKK2NvbmZpZyBVU0JfR1NQQ0FfU1BDQTUwOAorCXRyaXN0YXRlICJTUENBNTA4IFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTUENBNTA4IGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffc3BjYTUwOC4KKworY29uZmlnIFVTQl9HU1BDQV9TUENBNTYxCisJdHJpc3RhdGUgIlNQQ0E1NjEgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFNQQ0E1NjEgY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcGNhNTYxLgorCitjb25maWcgVVNCX0dTUENBX1NUSzAxNAorCXRyaXN0YXRlICJTeW50ZWsgRFY0MDAwIChTVEswMTQpIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTVEswMTQgY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zdGswMTQuCisKK2NvbmZpZyBVU0JfR1NQQ0FfU1VOUExVUworCXRyaXN0YXRlICJTVU5QTFVTIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTdW5wbHVzCisJU1BDQTUwNChhYmMpIFNQQ0E1MzMgU1BDQTUzNiBjaGlwcy4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcGNhNXh4LgorCitjb25maWcgVVNCX0dTUENBX1Q2MTMKKwl0cmlzdGF0ZSAiVDYxMyAoSlBFRyBDb21wbGlhbmNlKSBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgVDYxMyBjaGlwLgorCisJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3Q2MTMuCisKK2NvbmZpZyBVU0JfR1NQQ0FfVFY4NTMyCisJdHJpc3RhdGUgIlRWODUzMiBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgVFY4NTMxIGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfdHY4NTMyLgorCitjb25maWcgVVNCX0dTUENBX1ZDMDMyWAorCXRyaXN0YXRlICJWQzAzMlggVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFZDMDMyWCBjaGlwLgorCisJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3ZjMDMyeC4KKworY29uZmlnIFVTQl9HU1BDQV9aQzNYWAorCXRyaXN0YXRlICJWQzN4eCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgWkMzWFggY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV96YzN4eC4KKworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCmluZGV4IGU2OGE4OTYuLjIyNzM0ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQpAQCAtMSwyOSArMSw0OCBAQAotb2JqLSQoQ09ORklHX1VTQl9HU1BDQSkJKz0gZ3NwY2FfbWFpbi5vIFwKLQlnc3BjYV9jb25leC5vIGdzcGNhX2V0b21zLm8gZ3NwY2FfbWFycy5vIFwKLQlnc3BjYV9vdjUxOS5vIGdzcGNhX3BhYzIwNy5vIGdzcGNhX3BhYzczMTEubyBcCi0JZ3NwY2Ffc29uaXhiLm8gZ3NwY2Ffc29uaXhqLm8gZ3NwY2Ffc3BjYTUwMC5vIGdzcGNhX3NwY2E1MDEubyBcCi0JZ3NwY2Ffc3BjYTUwNS5vIGdzcGNhX3NwY2E1MDYubyBnc3BjYV9zcGNhNTA4Lm8gZ3NwY2Ffc3BjYTU2MS5vIFwKLQlnc3BjYV9zdW5wbHVzLm8gZ3NwY2Ffc3RrMDE0Lm8gZ3NwY2FfdDYxMy5vIGdzcGNhX3R2ODUzMi5vIFwKLQlnc3BjYV92YzAzMngubyBnc3BjYV96YzN4eC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBKQkJKz0gZ3NwY2FfbWFpbi5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0NPTkVYKQkrPSBnc3BjYV9jb25leC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0VUT01TKQkrPSBnc3BjYV9ldG9tcy5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVgpCSs9IGdzcGNhX2ZpbmVwaXgubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9NQVJTKQkrPSBnc3BjYV9tYXJzLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkpCSs9IGdzcGNhX292NTE5Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfUEFDMjA3KQkrPSBnc3BjYV9wYWMyMDcubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExKSArPSBnc3BjYV9wYWM3MzExLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU09OSVhCKQkrPSBnc3BjYV9zb25peGIubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TT05JWEopCSs9IGdzcGNhX3Nvbml4ai5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDApICs9IGdzcGNhX3NwY2E1MDAubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTAxKSArPSBnc3BjYV9zcGNhNTAxLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNSkgKz0gZ3NwY2Ffc3BjYTUwNS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDYpICs9IGdzcGNhX3NwY2E1MDYubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4KSArPSBnc3BjYV9zcGNhNTA4Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTU2MSkgKz0gZ3NwY2Ffc3BjYTU2MS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMpICs9IGdzcGNhX3N1bnBsdXMubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TVEswMTQpCSs9IGdzcGNhX3N0azAxNC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1Q2MTMpCSs9IGdzcGNhX3Q2MTMubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9UVjg1MzIpCSs9IGdzcGNhX3R2ODUzMi5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCkJKz0gZ3NwY2FfdmMwMzJ4Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfWkMzWFgpCSs9IGdzcGNhX3pjM3h4Lm8KIAotZ3NwY2FfbWFpbi1vYmpzIDo9IGdzcGNhLm8KLWdzcGNhX2NvbmV4LW9ianMgOj0gY29uZXgubwotZ3NwY2FfZXRvbXMtb2JqcyA6PSBldG9tcy5vCi1nc3BjYV9tYXJzLW9ianMgOj0gbWFycy5vCi1nc3BjYV9vdjUxOS1vYmpzIDo9IG92NTE5Lm8KLWdzcGNhX3BhYzIwNy1vYmpzIDo9IHBhYzIwNy5vCi1nc3BjYV9wYWM3MzExLW9ianMgOj0gcGFjNzMxMS5vCi1nc3BjYV9zb25peGItb2JqcyA6PSBzb25peGIubwotZ3NwY2Ffc29uaXhqLW9ianMgOj0gc29uaXhqLm8KLWdzcGNhX3NwY2E1MDAtb2JqcyA6PSBzcGNhNTAwLm8KLWdzcGNhX3NwY2E1MDEtb2JqcyA6PSBzcGNhNTAxLm8KLWdzcGNhX3NwY2E1MDUtb2JqcyA6PSBzcGNhNTA1Lm8KLWdzcGNhX3NwY2E1MDYtb2JqcyA6PSBzcGNhNTA2Lm8KLWdzcGNhX3NwY2E1MDgtb2JqcyA6PSBzcGNhNTA4Lm8KLWdzcGNhX3NwY2E1NjEtb2JqcyA6PSBzcGNhNTYxLm8KLWdzcGNhX3N0azAxNC1vYmpzIDo9IHN0azAxNC5vCi1nc3BjYV9zdW5wbHVzLW9ianMgOj0gc3VucGx1cy5vCi1nc3BjYV90NjEzLW9ianMgOj0gdDYxMy5vCi1nc3BjYV90djg1MzItb2JqcyA6PSB0djg1MzIubwotZ3NwY2FfdmMwMzJ4LW9ianMgOj0gdmMwMzJ4Lm8KLWdzcGNhX3pjM3h4LW9ianMgOj0gemMzeHgubworZ3NwY2FfbWFpbi1vYmpzCQkJOj0gZ3NwY2EubworZ3NwY2FfY29uZXgtb2JqcwkJOj0gY29uZXgubworZ3NwY2FfZXRvbXMtb2JqcwkJOj0gZXRvbXMubworZ3NwY2FfZmluZXBpeC1vYmpzCQk6PSBmaW5lcGl4Lm8KK2dzcGNhX21hcnMtb2JqcwkJCTo9IG1hcnMubworZ3NwY2Ffb3Y1MTktb2JqcwkJOj0gb3Y1MTkubworZ3NwY2FfcGFjMjA3LW9ianMJCTo9IHBhYzIwNy5vCitnc3BjYV9wYWM3MzExLW9ianMJCTo9IHBhYzczMTEubworZ3NwY2Ffc29uaXhiLW9ianMJCTo9IHNvbml4Yi5vCitnc3BjYV9zb25peGotb2JqcwkJOj0gc29uaXhqLm8KK2dzcGNhX3NwY2E1MDAtb2JqcwkJOj0gc3BjYTUwMC5vCitnc3BjYV9zcGNhNTAxLW9ianMJCTo9IHNwY2E1MDEubworZ3NwY2Ffc3BjYTUwNS1vYmpzCQk6PSBzcGNhNTA1Lm8KK2dzcGNhX3NwY2E1MDYtb2JqcwkJOj0gc3BjYTUwNi5vCitnc3BjYV9zcGNhNTA4LW9ianMJCTo9IHNwY2E1MDgubworZ3NwY2Ffc3BjYTU2MS1vYmpzCQk6PSBzcGNhNTYxLm8KK2dzcGNhX3N0azAxNC1vYmpzCQk6PSBzdGswMTQubworZ3NwY2Ffc3VucGx1cy1vYmpzCQk6PSBzdW5wbHVzLm8KK2dzcGNhX3Q2MTMtb2JqcwkJCTo9IHQ2MTMubworZ3NwY2FfdHY4NTMyLW9ianMJCTo9IHR2ODUzMi5vCitnc3BjYV92YzAzMngtb2JqcwkJOj0gdmMwMzJ4Lm8KK2dzcGNhX3pjM3h4LW9ianMJCTo9IHpjM3h4Lm8KKworb2JqLSQoQ09ORklHX1VTQl9NNTYwMikJCSs9IG01NjAyLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKaW5kZXggNGQ5ZjRjYy4uYTlkNTFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwpAQCAtODM3LDEyICs4MzcsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJY3gxMTY0Nl9pbml0c2l6ZShnc3BjYV9kZXYpOwogCWN4MTE2NDZfZncoZ3NwY2FfZGV2KTsKIAljeF9zZW5zb3IoZ3NwY2FfZGV2KTsKIAljeDExNjQ2X2pwZWcoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCmluZGV4IDRmZjBlMzguLjNiZTMwYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKQEAgLTY5MSw3ICs2OTEsNyBAQAogfQogCiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKQEAgLTcwNCw2ICs3MDQsNyBAQAogCiAJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVTRVRfQUxMLCAweDA4KTsKIAlldF92aWRlbyhnc3BjYV9kZXYsIDEpOwkJLyogdmlkZW8gb24gKi8KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9maW5lcGl4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2ZpbmVwaXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWQzY2JmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9maW5lcGl4LmMKQEAgLTAsMCArMSw0NjYgQEAKKy8qCisgKiBGdWppZmlsbSBGaW5lcGl4IHN1YmRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBGcmFuayBaYWdvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJmaW5lcGl4IgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKworTU9EVUxFX0FVVEhPUigiRnJhbmsgWmFnbyA8ZnJhbmtAemFnby5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZ1amlmaWxtIEZpbmVQaXggVVNCIFY0TDIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIERlZmF1bHQgdGltZW91dCwgaW4gbXMgKi8KKyNkZWZpbmUgRlBJWF9USU1FT1VUIChIWiAvIDEwKQorCisvKiBNYXhpbXVtIHRyYW5zZmVyIHNpemUgdG8gdXNlLiBUaGUgd2luZG93cyBkcml2ZXIgcmVhZHMgYnkgY2h1bmtzIG9mCisgKiAweDIwMDAgYnl0ZXMsIHNvIGRvIHRoZSBzYW1lLiBOb3RlOiByZWFkaW5nIG1vcmUgc2VlbXMgdG8gd29yaworICogdG9vLiAqLworI2RlZmluZSBGUElYX01BWF9UUkFOU0ZFUiAweDIwMDAKKworLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KK3N0cnVjdCB1c2JfZnBpeCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKworCS8qCisJICogVVNCIHN0dWZmCisJICovCisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCBjdHJscmVxOworCXN0cnVjdCB1cmIgKmNvbnRyb2xfdXJiOworCXN0cnVjdCB0aW1lcl9saXN0IGJ1bGtfdGltZXI7CisKKwllbnVtIHsKKwkJRlBJWF9OT1AsCS8qIGluYWN0aXZlLCBlbHNlIHN0cmVhbWluZyAqLworCQlGUElYX1JFU0VULAkvKiBtdXN0IHJlc2V0ICovCisJCUZQSVhfUkVRX0ZSQU1FLAkvKiByZXF1ZXN0aW5nIGEgZnJhbWUgKi8KKwkJRlBJWF9SRUFEX0ZSQU1FLAkvKiByZWFkaW5nIGZyYW1lICovCisJfSBzdGF0ZTsKKworCS8qCisJICogRHJpdmVyIHN0dWZmCisJICovCisJc3RydWN0IGRlbGF5ZWRfd29yayB3cWU7CisJc3RydWN0IGNvbXBsZXRpb24gY2FuX2Nsb3NlOworCWludCBzdHJlYW1pbmc7Cit9OworCisvKiBEZWxheSBhZnRlciB3aGljaCBjbGFpbSB0aGUgbmV4dCBmcmFtZS4gSWYgdGhlIGRlbGF5IGlzIHRvbyBzbWFsbCwKKyAqIHRoZSBjYW1lcmEgd2lsbCByZXR1cm4gb2xkIGZyYW1lcy4gT24gdGhlIDQ4MDBaLCAyMG1zIGlzIGJhZCwgMjVtcworICogd2lsbCBmYWlsIGV2ZXJ5IDQgb3IgNSBmcmFtZXMsIGJ1dCAzMG1zIGlzIHBlcmZlY3QuICovCisjZGVmaW5lIE5FWFRfRlJBTUVfREVMQVkgICgoKEhaICogMzApICsgOTk5KSAvIDEwMDApCisKKyNkZWZpbmUgZGV2X25ld19zdGF0ZShuZXdfc3RhdGUpIHsJCQkJXAorCQlQREVCVUcoRF9TVFJFQU0sICJuZXcgc3RhdGUgZnJvbSAlZCB0byAlZCBhdCAlczolZCIsCVwKKwkJCWRldi0+c3RhdGUsIG5ld19zdGF0ZSwgX19mdW5jX18sIF9fTElORV9fKTsJXAorCQlkZXYtPnN0YXRlID0gbmV3X3N0YXRlOwkJCQkJXAorfQorCisvKiBUaGVzZSBjYW1lcmFzIG9ubHkgc3VwcG9ydCAzMjB4MjAwLiAqLworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZnBpeF9tb2RlWzFdID0geworCXsgMzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfQorfTsKKworLyogUmVhZHMgcGFydCBvZiBhIGZyYW1lICovCitzdGF0aWMgdm9pZCByZWFkX2ZyYW1lX3BhcnQoc3RydWN0IHVzYl9mcGl4ICpkZXYpCit7CisJaW50IHJldDsKKworCVBERUJVRyhEX1NUUkVBTSwgInJlYWRfZnJhbWVfcGFydCIpOworCisJLyogUmVhZHMgcGFydCBvZiBhIGZyYW1lICovCisJcmV0ID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5nc3BjYV9kZXYudXJiWzBdLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KSB7CisJCWRldl9uZXdfc3RhdGUoRlBJWF9SRVNFVCk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT53cWUsIDEpOworCQlQREVCVUcoRF9TVFJFQU0sICJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCAlZCIsCisJCQlyZXQpOworCX0gZWxzZSB7CisJCS8qIFNvbWV0aW1lcyB3ZSBuZXZlciBnZXQgYSBjYWxsYmFjaywgc28gdXNlIGEgdGltZXIuCisJCSAqIElzIHRoaXMgbWFza2luZyBhIGJ1ZyBzb21ld2hlcmUgZWxzZT8gKi8KKwkJZGV2LT5idWxrX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxNTApOworCQlhZGRfdGltZXIoJmRldi0+YnVsa190aW1lcik7CisJfQorfQorCisvKiBDYWxsYmFjayBmb3IgVVJCcy4gKi8KK3N0YXRpYyB2b2lkIHVyYl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7CisKKwlQREVCVUcoRF9QQUNLLAorCQkiZW50ZXIgdXJiX2NhbGxiYWNrIC0gc3RhdHVzPSVkLCBsZW5ndGg9JWQiLAorCQl1cmItPnN0YXR1cywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCWlmIChkZXYtPnN0YXRlID09IEZQSVhfUkVBRF9GUkFNRSkKKwkJZGVsX3RpbWVyKCZkZXYtPmJ1bGtfdGltZXIpOworCisJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwkJLyogV2Uga2lsbCBhIHN0dWNrIHVyYiBldmVyeSA1MCBmcmFtZXMgb24gYXZlcmFnZSwgc28gZG9uJ3QKKwkJICogZGlzcGxheSBhIGxvZyBtZXNzYWdlIGZvciB0aGF0LiAqLworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQpCisJCQlQREVCVUcoRF9TVFJFQU0sICJiYWQgVVJCIHN0YXR1cyAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJZGV2X25ld19zdGF0ZShGUElYX1JFU0VUKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPndxZSwgMSk7CisJfQorCisJc3dpdGNoIChkZXYtPnN0YXRlKSB7CisJY2FzZSBGUElYX1JFUV9GUkFNRToKKwkJZGV2X25ld19zdGF0ZShGUElYX1JFQURfRlJBTUUpOworCQlyZWFkX2ZyYW1lX3BhcnQoZGV2KTsKKwkJYnJlYWs7CisKKwljYXNlIEZQSVhfUkVBRF9GUkFNRTogeworCQl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CisKKwkJZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZSgmZGV2LT5nc3BjYV9kZXYpOworCQlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgRlBJWF9NQVhfVFJBTlNGRVIgfHwKKwkJCShkYXRhW3VyYi0+YWN0dWFsX2xlbmd0aC0yXSA9PSAweGZmICYmCisJCQkJZGF0YVt1cmItPmFjdHVhbF9sZW5ndGgtMV0gPT0gMHhkOSkpIHsKKworCQkJLyogSWYgdGhlIHJlc3VsdCBpcyBsZXNzIHRoYW4gd2hhdCB3YXMgYXNrZWQKKwkJCSAqIGZvciwgdGhlbiBpdCdzIHRoZSBlbmQgb2YgdGhlCisJCQkgKiBmcmFtZS4gU29tZXRpbWUgdGhlIGpwZWcgaXMgbm90IGNvbXBsZXRlLAorCQkJICogYnV0IHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8uIFdlIGFsc28gZW5kCisJCQkgKiBoZXJlIGlmIHRoZSB0aGUganBlZyBlbmRzIHJpZ2h0IGF0IHRoZSBlbmQKKwkJCSAqIG9mIHRoZSBmcmFtZS4gKi8KKwkJCWlmIChmcmFtZSkKKwkJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKKwkJCQkJCWZyYW1lLAorCQkJCQkJZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCWRldl9uZXdfc3RhdGUoRlBJWF9SRVFfRlJBTUUpOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPndxZSwgTkVYVF9GUkFNRV9ERUxBWSk7CisJCX0gZWxzZSB7CisKKwkJCS8qIGdvdCBhIHBhcnRpYWwgaW1hZ2UgKi8KKwkJCWlmIChmcmFtZSkKKwkJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LAorCQkJCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlCisJCQkJCQkJCT09IExBU1RfUEFDS0VUCisJCQkJCQk/IEZJUlNUX1BBQ0tFVCA6IElOVEVSX1BBQ0tFVCwKKwkJCQkJCWZyYW1lLAorCQkJCQlkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJcmVhZF9mcmFtZV9wYXJ0KGRldik7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgRlBJWF9OT1A6CisJY2FzZSBGUElYX1JFU0VUOgorCQlQREVCVUcoRF9TVFJFQU0sICJpbnZhbGlkIHN0YXRlICVkIiwgZGV2LT5zdGF0ZSk7CisJCWJyZWFrOworCX0KK30KKworLyogUmVxdWVzdCBhIG5ldyBmcmFtZSAqLworc3RhdGljIHZvaWQgcmVxdWVzdF9mcmFtZShzdHJ1Y3QgdXNiX2ZwaXggKmRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9ICZkZXYtPmdzcGNhX2RldjsKKworCS8qIFNldHVwIGNvbW1hbmQgcGFja2V0ICovCisJbWVtc2V0KGdzcGNhX2Rldi0+dXNiX2J1ZiwgMCwgMTIpOworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4ZDM7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzddID0gMHgwMTsKKworCS8qIFJlcXVlc3QgYSBmcmFtZSAqLworCWRldi0+Y3RybHJlcS5iUmVxdWVzdFR5cGUgPQorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwlkZXYtPmN0cmxyZXEuYlJlcXVlc3QgPSBVU0JfUkVRX0dFVF9TVEFUVVM7CisJZGV2LT5jdHJscmVxLndWYWx1ZSA9IDA7CisJZGV2LT5jdHJscmVxLndJbmRleCA9IDA7CisJZGV2LT5jdHJscmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNigxMik7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihkZXYtPmNvbnRyb2xfdXJiLAorCQkJICAgICBnc3BjYV9kZXYtPmRldiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKikgJmRldi0+Y3RybHJlcSwKKwkJCSAgICAgZ3NwY2FfZGV2LT51c2JfYnVmLAorCQkJICAgICAxMiwgdXJiX2NhbGxiYWNrLCBnc3BjYV9kZXYpOworCisJcmV0ID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5jb250cm9sX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCkgeworCQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVTRVQpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCAxKTsKKwkJUERFQlVHKERfU1RSRUFNLCAidXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggJWQiLCByZXQpOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFN0YXRlIG1hY2hpbmUuICovCitzdGF0aWMgdm9pZCBmcGl4X3NtKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX2ZwaXgsIHdxZS53b3JrKTsKKworCVBERUJVRyhEX1NUUkVBTSwgImZwaXhfc20gc3RhdGUgJWQiLCBkZXYtPnN0YXRlKTsKKworCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLworCWlmICghZGV2LT5nc3BjYV9kZXYucHJlc2VudCkgeworCQlQREVCVUcoRF9TVFJFQU0sICJkZXZpY2UgaXMgZ29uZSIpOworCQlkZXZfbmV3X3N0YXRlKEZQSVhfTk9QKTsKKwkJY29tcGxldGUoJmRldi0+Y2FuX2Nsb3NlKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghZGV2LT5zdHJlYW1pbmcpIHsKKwkJUERFQlVHKERfU1RSRUFNLCAic3RvcHBpbmcgc3RhdGUgbWFjaGluZSIpOworCQlkZXZfbmV3X3N0YXRlKEZQSVhfTk9QKTsKKwkJY29tcGxldGUoJmRldi0+Y2FuX2Nsb3NlKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoZGV2LT5zdGF0ZSkgeworCWNhc2UgRlBJWF9SRVNFVDoKKwkJZGV2X25ld19zdGF0ZShGUElYX1JFUV9GUkFNRSk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT53cWUsIEhaIC8gMTApOworCQlicmVhazsKKworCWNhc2UgRlBJWF9SRVFfRlJBTUU6CisJCS8qIGdldCBhbiBpbWFnZSAqLworCQlyZXF1ZXN0X2ZyYW1lKGRldik7CisJCWJyZWFrOworCisJY2FzZSBGUElYX05PUDoKKwljYXNlIEZQSVhfUkVBRF9GUkFNRToKKwkJUERFQlVHKERfU1RSRUFNLCAiaW52YWxpZCBzdGF0ZSAlZCIsIGRldi0+c3RhdGUpOworCQlicmVhazsKKwl9Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBjYW0gKmNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKworCWNhbS0+Y2FtX21vZGUgPSBmcGl4X21vZGU7CisJY2FtLT5ubW9kZXMgPSAxOworCWNhbS0+ZXBhZGRyID0gMHgwMTsJLyogdG9kbzogY29ycmVjdCBmb3IgYWxsIGNhbXM/ICovCisJY2FtLT5idWxrX3NpemUgPSBGUElYX01BWF9UUkFOU0ZFUjsKKworLyoJZ3NwY2FfZGV2LT5uYmFsdCA9IDE7CSAqIHVzZSBidWxrIHRyYW5zZmVyICovCisJcmV0dXJuIDA7Cit9CisKKy8qIFN0b3Agc3RyZWFtaW5nIGFuZCBmcmVlIHRoZSByZXNzb3VyY2VzIGFsbG9jYXRlZCBieSBzZF9zdGFydC4gKi8KK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IChzdHJ1Y3QgdXNiX2ZwaXggKikgZ3NwY2FfZGV2OworCisJZGV2LT5zdHJlYW1pbmcgPSAwOworCisJLyogU3RvcCB0aGUgc3RhdGUgbWFjaGluZSAqLworCWlmIChkZXYtPnN0YXRlICE9IEZQSVhfTk9QKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXYtPmNhbl9jbG9zZSk7CisKKwl1c2JfZnJlZV91cmIoZGV2LT5jb250cm9sX3VyYik7CisJZGV2LT5jb250cm9sX3VyYiA9IE5VTEw7Cit9CisKKy8qIEtpbGwgYW4gVVJCIHRoYXQgaGFzbid0IGNvbXBsZXRlZC4gKi8KK3N0YXRpYyB2b2lkIHRpbWVvdXRfa2lsbCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHVyYiAqdXJiID0gKHN0cnVjdCB1cmIgKikgZGF0YTsKKworCXVzYl91bmxpbmtfdXJiKHVyYik7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IChzdHJ1Y3QgdXNiX2ZwaXggKikgZ3NwY2FfZGV2OworCisJSU5JVF9ERUxBWUVEX1dPUksoJmRldi0+d3FlLCBmcGl4X3NtKTsKKworCWluaXRfdGltZXIoJmRldi0+YnVsa190aW1lcik7CisJZGV2LT5idWxrX3RpbWVyLmZ1bmN0aW9uID0gdGltZW91dF9raWxsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKwlpbnQgc2l6ZV9yZXQ7CisKKwkvKiBSZXNldCBidWxrIGluIGVuZHBvaW50ICovCisJdXNiX2NsZWFyX2hhbHQoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+Y2FtLmVwYWRkcik7CisKKwkvKiBJbml0IHRoZSBkZXZpY2UgKi8KKwltZW1zZXQoZ3NwY2FfZGV2LT51c2JfYnVmLCAwLCAxMik7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHhjNjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbOF0gPSAweDIwOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfAorCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLAorCQkJMTIsIEZQSVhfVElNRU9VVCk7CisKKwlpZiAocmV0ICE9IDEyKSB7CisJCVBERUJVRyhEX1NUUkVBTSwgInVzYl9jb250cm9sX21zZyBmYWlsZWQgKCVkKSIsIHJldCk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogUmVhZCB0aGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kLiBJZ25vcmUgdGhlIHJlc3VsdCwgZm9yIGl0CisJICogdmFyaWVzIHdpdGggdGhlIGRldmljZS4gKi8KKwlyZXQgPSB1c2JfYnVsa19tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsCisJCQkJCWdzcGNhX2Rldi0+Y2FtLmVwYWRkciksCisJCQlnc3BjYV9kZXYtPnVzYl9idWYsIEZQSVhfTUFYX1RSQU5TRkVSLCAmc2l6ZV9yZXQsCisJCQlGUElYX1RJTUVPVVQpOworCWlmIChyZXQgIT0gMCkgeworCQlQREVCVUcoRF9TVFJFQU0sICJ1c2JfYnVsa19tc2cgZmFpbGVkICglZCkiLCByZXQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIFJlcXVlc3QgYSBmcmFtZSwgYnV0IGRvbid0IHJlYWQgaXQgKi8KKwltZW1zZXQoZ3NwY2FfZGV2LT51c2JfYnVmLCAwLCAxMik7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHhkMzsKKwlnc3BjYV9kZXYtPnVzYl9idWZbN10gPSAweDAxOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfAorCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLAorCQkJMTIsIEZQSVhfVElNRU9VVCk7CisJaWYgKHJldCAhPSAxMikgeworCQlQREVCVUcoRF9TVFJFQU0sICJ1c2JfY29udHJvbF9tc2cgZmFpbGVkICglZCkiLCByZXQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIEFnYWluLCByZXNldCBidWxrIGluIGVuZHBvaW50ICovCisJdXNiX2NsZWFyX2hhbHQoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+Y2FtLmVwYWRkcik7CisKKwkvKiBBbGxvY2F0ZSBhIGNvbnRyb2wgVVJCICovCisJZGV2LT5jb250cm9sX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmNvbnRyb2xfdXJiKSB7CisJCVBERUJVRyhEX1NUUkVBTSwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBWYXJpb3VzIGluaXRpYWxpemF0aW9ucy4gKi8KKwlpbml0X2NvbXBsZXRpb24oJmRldi0+Y2FuX2Nsb3NlKTsKKwlkZXYtPmJ1bGtfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldi0+Z3NwY2FfZGV2LnVyYlswXTsKKwlkZXYtPmdzcGNhX2Rldi51cmJbMF0tPmNvbXBsZXRlID0gdXJiX2NhbGxiYWNrOworCWRldi0+c3RyZWFtaW5nID0gMTsKKworCS8qIFNjaGVkdWxlIGEgZnJhbWUgcmVxdWVzdC4gKi8KKwlkZXZfbmV3X3N0YXRlKEZQSVhfUkVRX0ZSQU1FKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCAxKTsKKworCXJldHVybiAwOworCitlcnJvcjoKKwkvKiBGcmVlIHRoZSByZXNzb3VyY2VzICovCisJc2Rfc3RvcE4oZ3NwY2FfZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBUYWJsZSBvZiBzdXBwb3J0ZWQgVVNCIGRldmljZXMgKi8KK3N0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTA0KX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMDkpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDEwYil9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTBmKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMTEpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDExMyl9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTE1KX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMTcpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDExOSl9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTFiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMWQpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDEyMSl9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTIzKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMjUpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDEyNyl9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTI5KX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMmIpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDEyZCl9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTJmKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMzEpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDEzYil9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTNkKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxM2YpfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmNvbmZpZyA9IHNkX2NvbmZpZywKKwkuaW5pdCA9IHNkX2luaXQsCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCit9OworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsCisJCQkmc2RfZGVzYywKKwkJCXNpemVvZihzdHJ1Y3QgdXNiX2ZwaXgpLAorCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGdzcGNhX3N1c3BlbmQsCisJLnJlc3VtZSA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJUERFQlVHKERfUFJPQkUsICJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IGFjOTVjNTUuLmU0OGZiZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgTU9EVUxFX05BTUUgImdzcGNhIgogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMjksNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CkBAIC00Myw3ICs0NSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBIFVTQiBDYW1lcmEgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDIsIDApCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigyLCAzLCAwKQogCiBzdGF0aWMgaW50IHZpZGVvX25yID0gLTE7CiAKQEAgLTEwMiw2ICsxMDQsMjIgQEAKIAkuY2xvc2UJCT0gZ3NwY2Ffdm1fY2xvc2UsCiB9OwogCisvKiBnZXQgdGhlIGN1cnJlbnQgaW5wdXQgZnJhbWUgYnVmZmVyICovCitzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmdzcGNhX2dldF9pX2ZyYW1lKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCWludCBpOworCisJaSA9IGdzcGNhX2Rldi0+ZnJfaTsKKwlpID0gZ3NwY2FfZGV2LT5mcl9xdWV1ZVtpXTsKKwlmcmFtZSA9ICZnc3BjYV9kZXYtPmZyYW1lW2ldOworCWlmICgoZnJhbWUtPnY0bDJfYnVmLmZsYWdzICYgQlVGX0FMTF9GTEFHUykKKwkJCQkhPSBWNEwyX0JVRl9GTEFHX1FVRVVFRCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGZyYW1lOworfQorRVhQT1JUX1NZTUJPTChnc3BjYV9nZXRfaV9mcmFtZSk7CisKIC8qCiAgKiBmaWxsIGEgdmlkZW8gZnJhbWUgZnJvbSBhbiBVUkIgYW5kIHJlc3VibWl0CiAgKi8KQEAgLTExMCw3ICsxMjgsNyBAQAogewogCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CiAJX191OCAqZGF0YTsJCS8qIGFkZHJlc3Mgb2YgZGF0YSBpbiB0aGUgaXNvIG1lc3NhZ2UgKi8KLQlpbnQgaSwgaiwgbGVuLCBzdDsKKwlpbnQgaSwgbGVuLCBzdDsKIAljYW1fcGt0X29wIHBrdF9zY2FuOwogCiAJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKQEAgLTEyNCwxMSArMTQyLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CiAKIAkJLyogY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgZnJhbWUgYnVmZmVyICovCi0JCWogPSBnc3BjYV9kZXYtPmZyX2k7Ci0JCWogPSBnc3BjYV9kZXYtPmZyX3F1ZXVlW2pdOwotCQlmcmFtZSA9ICZnc3BjYV9kZXYtPmZyYW1lW2pdOwotCQlpZiAoKGZyYW1lLT52NGwyX2J1Zi5mbGFncyAmIEJVRl9BTExfRkxBR1MpCi0JCQkJCSE9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEKSB7CisJCWZyYW1lID0gZ3NwY2FfZ2V0X2lfZnJhbWUoZ3NwY2FfZGV2KTsKKwkJaWYgKCFmcmFtZSkgewogCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CiAJCQlicmVhazsKIAkJfQpAQCAtMTc4LDYgKzE5MywzOSBAQAogfQogCiAvKgorICogYnVsayBtZXNzYWdlIGludGVycnVwdCBmcm9tIHRoZSBVU0IgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkIGJ1bGtfaXJxKHN0cnVjdCB1cmIgKnVyYgorKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IChzdHJ1Y3QgZ3NwY2FfZGV2ICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCisJUERFQlVHKERfUEFDSywgImJ1bGsgaXJxIik7CisJaWYgKCFnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJcmV0dXJuOworCWlmICh1cmItPnN0YXR1cyAhPSAwICYmIHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUKSB7CisjaWZkZWYgQ09ORklHX1BNCisJCWlmICghZ3NwY2FfZGV2LT5mcm96ZW4pCisjZW5kaWYKKwkJCVBERUJVRyhEX0VSUnxEX1BBQ0ssICJ1cmIgc3RhdHVzOiAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOwkJLyogZGlzY29ubmVjdGlvbiA/ICovCisJfQorCisJLyogY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgZnJhbWUgYnVmZmVyICovCisJZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZShnc3BjYV9kZXYpOworCWlmICghZnJhbWUpIHsKKwkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJfSBlbHNlIHsKKwkJUERFQlVHKERfUEFDSywgInBhY2tldCBsOiVkIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZ3NwY2FfZGV2LT5zZF9kZXNjLT5wa3Rfc2Nhbihnc3BjYV9kZXYsCisJCQkJCWZyYW1lLAorCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwl9Cit9CisKKy8qCiAgKiBhZGQgZGF0YSB0byB0aGUgY3VycmVudCBmcmFtZQogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBzdWJkcml2ZXJzIGF0IGludGVycnVwdCBsZXZlbC4KQEAgLTE5MCw3ICsyMzgsNyBAQAogICogT24gTEFTVF9QQUNLRVQsIGEgbmV3IGZyYW1lIGlzIHJldHVybmVkLgogICovCiBzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmdzcGNhX2ZyYW1lX2FkZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQkJICAgIGludCBwYWNrZXRfdHlwZSwKKwkJCQkgICAgZW51bSBnc3BjYV9wYWNrZXRfdHlwZSBwYWNrZXRfdHlwZSwKIAkJCQkgICAgc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwKIAkJCQkgICAgY29uc3QgX191OCAqZGF0YSwKIAkJCQkgICAgaW50IGxlbikKQEAgLTIzMiw3ICsyODAsNyBAQAogCX0KIAlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBwYWNrZXRfdHlwZTsKIAotCS8qIGlmIGxhc3QgcGFja2V0LCB3YWtlIHRoZSBhcHBsaWNhdGlvbiBhbmQgYWR2YW5jZSBpbiB0aGUgcXVldWUgKi8KKwkvKiBpZiBsYXN0IHBhY2tldCwgd2FrZSB1cCB0aGUgYXBwbGljYXRpb24gYW5kIGFkdmFuY2UgaW4gdGhlIHF1ZXVlICovCiAJaWYgKHBhY2tldF90eXBlID09IExBU1RfUEFDS0VUKSB7CiAJCWZyYW1lLT52NGwyX2J1Zi5ieXRlc3VzZWQgPSBmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YTsKIAkJZnJhbWUtPnY0bDJfYnVmLmZsYWdzICY9IH5WNEwyX0JVRl9GTEFHX1FVRVVFRDsKQEAgLTI3MCw3ICszMTgsNiBAQAogCXZvaWQgKm1lbTsKIAl1bnNpZ25lZCBsb25nIGFkcjsKIAotLyoJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CShhbHJlYWR5IGRvbmUpICovCiAJbWVtID0gdm1hbGxvY18zMihzaXplKTsKIAlpZiAobWVtICE9IE5VTEwpIHsKIAkJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKQEAgLTM1Nyw3ICs0MDQsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCiAJUERFQlVHKERfU1RSRUFNLCAia2lsbCB0cmFuc2ZlciIpOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVSQlM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVSQlM7IGkrKykgewogCQl1cmIgPSBnc3BjYV9kZXYtPnVyYltpXTsKIAkJaWYgKHVyYiA9PSBOVUxMKQogCQkJYnJlYWs7CkBAIC0zNzQsMTAgKzQyMSwxMSBAQAogfQogCiAvKgotICogc2VhcmNoIGFuIGlucHV0IGlzb2Nocm9ub3VzIGVuZHBvaW50IGluIGFuIGFsdGVybmF0ZSBzZXR0aW5nCisgKiBsb29rIGZvciBhbiBpbnB1dCB0cmFuc2ZlciBlbmRwb2ludCBpbiBhbiBhbHRlcm5hdGUgc2V0dGluZwogICovCi1zdGF0aWMgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICphbHRfaXNvYyhzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQsCi0JCQkJCSAgX191OCBlcGFkZHIpCitzdGF0aWMgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICphbHRfeGZlcihzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQsCisJCQkJCSAgX191OCBlcGFkZHIsCisJCQkJCSAgX191OCB4ZmVyKQogewogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CiAJaW50IGksIGF0dHI7CkBAIC0zODgsNyArNDM2LDcgQEAKIAkJaWYgKGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgPT0gZXBhZGRyKSB7CiAJCQlhdHRyID0gZXAtPmRlc2MuYm1BdHRyaWJ1dGVzCiAJCQkJCQkmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOwotCQkJaWYgKGF0dHIgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKKwkJCWlmIChhdHRyID09IHhmZXIpCiAJCQkJcmV0dXJuIGVwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTM5NywxNCArNDQ1LDE0IEBACiB9CiAKIC8qCi0gKiBzZWFyY2ggYW4gaW5wdXQgaXNvY2hyb25vdXMgZW5kcG9pbnQKKyAqIGxvb2sgZm9yIGFuIGlucHV0IChpc29jIG9yIGJ1bGspIGVuZHBvaW50CiAgKgogICogVGhlIGVuZHBvaW50IGlzIGRlZmluZWQgYnkgdGhlIHN1YmRyaXZlci4KICAqIFVzZSBvbmx5IHRoZSBmaXJzdCBpc29jIChzb21lIFpvcmFuIC0gMHgwNTcyOjB4MDAwMSAtIGhhdmUgdHdvIHN1Y2ggZXApLgogICogVGhpcyByb3V0aW5lIG1heSBiZSBjYWxsZWQgbWFueSB0aW1lcyB3aGVuIHRoZSBiYW5kd2lkdGggaXMgdG9vIHNtYWxsCiAgKiAodGhlIGJhbmR3aWR0aCBpcyBjaGVja2VkIG9uIHVyYiBzdWJtaXQpLgogICovCi1zdGF0aWMgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpnZXRfaXNvY19lcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpnZXRfZXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CkBAIC00MTMsMjggKzQ2MSw0MSBAQAogCWludGYgPSB1c2JfaWZudW1fdG9faWYoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UpOwogCWVwID0gTlVMTDsKIAlpID0gZ3NwY2FfZGV2LT5hbHQ7CQkJLyogcHJldmlvdXMgYWx0IHNldHRpbmcgKi8KKworCS8qIHRyeSBpc29jICovCiAJd2hpbGUgKC0taSA+IDApIHsJCQkvKiBhbHQgMCBpcyB1bnVzYWJsZSAqLwotCQllcCA9IGFsdF9pc29jKCZpbnRmLT5hbHRzZXR0aW5nW2ldLCBnc3BjYV9kZXYtPmNhbS5lcGFkZHIpOworCQllcCA9IGFsdF94ZmVyKCZpbnRmLT5hbHRzZXR0aW5nW2ldLAorCQkJCWdzcGNhX2Rldi0+Y2FtLmVwYWRkciwKKwkJCQlVU0JfRU5EUE9JTlRfWEZFUl9JU09DKTsKIAkJaWYgKGVwKQogCQkJYnJlYWs7CiAJfQorCisJLyogaWYgbm8gaXNvYywgdHJ5IGJ1bGsgKi8KIAlpZiAoZXAgPT0gTlVMTCkgewotCQllcnIoIm5vIElTT0MgZW5kcG9pbnQgZm91bmQiKTsKLQkJcmV0dXJuIE5VTEw7CisJCWVwID0gYWx0X3hmZXIoJmludGYtPmFsdHNldHRpbmdbMF0sCisJCQkJZ3NwY2FfZGV2LT5jYW0uZXBhZGRyLAorCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEspOworCQlpZiAoZXAgPT0gTlVMTCkgeworCQkJZXJyKCJubyB0cmFuc2ZlciBlbmRwb2ludCBmb3VuZCIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KIAl9Ci0JUERFQlVHKERfU1RSRUFNLCAidXNlIElTT0MgYWx0ICVkIGVwIDB4JTAyeCIsCisJUERFQlVHKERfU1RSRUFNLCAidXNlIGFsdCAlZCBlcCAweCUwMngiLAogCQkJaSwgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7Ci0JcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsIGkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWVycigic2V0IGludGVyZmFjZSBlcnIgJWQiLCByZXQpOwotCQlyZXR1cm4gTlVMTDsKKwlpZiAoaSA+IDApIHsKKwkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsIGkpOworCQlpZiAocmV0IDwgMCkgeworCQkJZXJyKCJzZXQgaW50ZXJmYWNlIGVyciAlZCIsIHJldCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQogCX0KIAlnc3BjYV9kZXYtPmFsdCA9IGk7CQkvKiBtZW1vcml6ZSB0aGUgY3VycmVudCBhbHQgc2V0dGluZyAqLwogCXJldHVybiBlcDsKIH0KIAogLyoKLSAqIGNyZWF0ZSB0aGUgaXNvY2hyb25vdXMgVVJCcworICogY3JlYXRlIHRoZSBVUkJzIGZvciBpbWFnZSB0cmFuc2ZlcgogICovCiBzdGF0aWMgaW50IGNyZWF0ZV91cmJzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCkBAIC00NDUsMTUgKzUwNiwyNyBAQAogCS8qIGNhbGN1bGF0ZSB0aGUgcGFja2V0IHNpemUgYW5kIHRoZSBudW1iZXIgb2YgcGFja2V0cyAqLwogCXBzaXplID0gbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpOwogCi0JLyogU2VlIHBhcmFncmFwaCA1LjkgLyB0YWJsZSA1LTExIG9mIHRoZSB1c2IgMi4wIHNwZWMuICovCi0JcHNpemUgPSAocHNpemUgJiAweDA3ZmYpICogKDEgKyAoKHBzaXplID4+IDExKSAmIDMpKTsKLQlucGt0ID0gSVNPX01BWF9TSVpFIC8gcHNpemU7Ci0JaWYgKG5wa3QgPiBJU09fTUFYX1BLVCkKLQkJbnBrdCA9IElTT19NQVhfUEtUOwotCWJzaXplID0gcHNpemUgKiBucGt0OwotCVBERUJVRyhEX1NUUkVBTSwKLQkJImlzb2MgJWQgcGt0cyBzaXplICVkIChic2l6ZTolZCkiLCBucGt0LCBwc2l6ZSwgYnNpemUpOwotCW51cmJzID0gREVGX05VUkJTOworCWlmIChnc3BjYV9kZXYtPmFsdCAhPSAwKSB7CQkvKiBpc29jICovCisKKwkJLyogU2VlIHBhcmFncmFwaCA1LjkgLyB0YWJsZSA1LTExIG9mIHRoZSB1c2IgMi4wIHNwZWMuICovCisJCXBzaXplID0gKHBzaXplICYgMHgwN2ZmKSAqICgxICsgKChwc2l6ZSA+PiAxMSkgJiAzKSk7CisJCW5wa3QgPSBJU09fTUFYX1NJWkUgLyBwc2l6ZTsKKwkJaWYgKG5wa3QgPiBJU09fTUFYX1BLVCkKKwkJCW5wa3QgPSBJU09fTUFYX1BLVDsKKwkJYnNpemUgPSBwc2l6ZSAqIG5wa3Q7CisJCVBERUJVRyhEX1NUUkVBTSwKKwkJCSJpc29jICVkIHBrdHMgc2l6ZSAlZCA9IGJzaXplOiVkIiwKKwkJCW5wa3QsIHBzaXplLCBic2l6ZSk7CisJCW51cmJzID0gREVGX05VUkJTOworCX0gZWxzZSB7CQkJCS8qIGJ1bGsgKi8KKwkJbnBrdCA9IDA7CisJCWJzaXplID0gZ3NwY2FfZGV2LT5jYW0uCWJ1bGtfc2l6ZTsKKwkJaWYgKGJzaXplID09IDApCisJCQlic2l6ZSA9IHBzaXplOworCQlQREVCVUcoRF9TVFJFQU0sICJidWxrIGJzaXplOiVkIiwgYnNpemUpOworCQludXJicyA9IDE7CisJfQorCiAJZ3NwY2FfZGV2LT5udXJicyA9IG51cmJzOwogCWZvciAobiA9IDA7IG4gPCBudXJiczsgbisrKSB7CiAJCXVyYiA9IHVzYl9hbGxvY191cmIobnBrdCwgR0ZQX0tFUk5FTCk7CkBAIC00NzYsMTcgKzU0OSwyNCBAQAogCQlnc3BjYV9kZXYtPnVyYltuXSA9IHVyYjsKIAkJdXJiLT5kZXYgPSBnc3BjYV9kZXYtPmRldjsKIAkJdXJiLT5jb250ZXh0ID0gZ3NwY2FfZGV2OwotCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZ3NwY2FfZGV2LT5kZXYsCi0JCQkJCSAgICBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUAotCQkJCQl8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwotCQl1cmItPmludGVydmFsID0gZXAtPmRlc2MuYkludGVydmFsOwotCQl1cmItPmNvbXBsZXRlID0gaXNvY19pcnE7Ci0JCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBucGt0OwogCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBic2l6ZTsKLQkJZm9yIChpID0gMDsgaSA8IG5wa3Q7IGkrKykgewotCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSBwc2l6ZTsKLQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gcHNpemUgKiBpOworCQlpZiAobnBrdCAhPSAwKSB7CQkvKiBJU09DICovCisJCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZ3NwY2FfZGV2LT5kZXYsCisJCQkJCQkgICAgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CisJCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQCisJCQkJCXwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCQl1cmItPmludGVydmFsID0gZXAtPmRlc2MuYkludGVydmFsOworCQkJdXJiLT5jb21wbGV0ZSA9IGlzb2NfaXJxOworCQkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IG5wa3Q7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnBrdDsgaSsrKSB7CisJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSBwc2l6ZTsKKwkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IHBzaXplICogaTsKKwkJCX0KKwkJfSBlbHNlIHsJCS8qIGJ1bGsgKi8KKwkJCXVyYi0+cGlwZSA9IHVzYl9yY3ZidWxrcGlwZShnc3BjYV9kZXYtPmRldiwKKwkJCQkJCWVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpLAorCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQkJdXJiLT5jb21wbGV0ZSA9IGJ1bGtfaXJxOwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtNTA4LDcgKzU4OCw3IEBACiAJZ3NwY2FfZGV2LT5hbHQgPSBnc3BjYV9kZXYtPm5iYWx0OwogCWZvciAoOzspIHsKIAkJUERFQlVHKERfU1RSRUFNLCAiaW5pdCB0cmFuc2ZlciBhbHQgJWQiLCBnc3BjYV9kZXYtPmFsdCk7Ci0JCWVwID0gZ2V0X2lzb2NfZXAoZ3NwY2FfZGV2KTsKKwkJZXAgPSBnZXRfZXAoZ3NwY2FfZGV2KTsKIAkJaWYgKGVwID09IE5VTEwpIHsKIAkJCXJldCA9IC1FSU87CiAJCQlnb3RvIG91dDsKQEAgLTUxOCwxMCArNTk4LDE4IEBACiAJCQlnb3RvIG91dDsKIAogCQkvKiBzdGFydCB0aGUgY2FtICovCi0JCWdzcGNhX2Rldi0+c2RfZGVzYy0+c3RhcnQoZ3NwY2FfZGV2KTsKKwkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdGFydChnc3BjYV9kZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJCQlnb3RvIG91dDsKKwkJfQogCQlnc3BjYV9kZXYtPnN0cmVhbWluZyA9IDE7CiAJCWF0b21pY19zZXQoJmdzcGNhX2Rldi0+bmV2ZW50LCAwKTsKIAorCQkvKiBidWxrIHRyYW5zZmVycyBhcmUgc3RhcnRlZCBieSB0aGUgc3ViZHJpdmVyICovCisJCWlmIChnc3BjYV9kZXYtPmFsdCA9PSAwKQorCQkJYnJlYWs7CisKIAkJLyogc3VibWl0IHRoZSBVUkJzICovCiAJCWZvciAobiA9IDA7IG4gPCBnc3BjYV9kZXYtPm51cmJzOyBuKyspIHsKIAkJCXJldCA9IHVzYl9zdWJtaXRfdXJiKGdzcGNhX2Rldi0+dXJiW25dLCBHRlBfS0VSTkVMKTsKQEAgLTU1Myw3ICs2NDEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIE5vdGUgYm90aCB0aGUgcXVldWUgYW5kIHRoZSB1c2IgbG9jayBzaG91bGQgYmUgaG9sZCB3aGVuIGNhbGxpbmcgdGhpcyAqLworLyogTm90ZTogYm90aCB0aGUgcXVldWUgYW5kIHRoZSB1c2IgbG9ja3Mgc2hvdWxkIGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgKi8KIHN0YXRpYyB2b2lkIGdzcGNhX3N0cmVhbV9vZmYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWdzcGNhX2Rldi0+c3RyZWFtaW5nID0gMDsKQEAgLTc1OSw2ICs4NDcsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBnc3BjYV9kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBnc3BjYV9kZXYsIGtyZWYpOworCisJUERFQlVHKERfU1RSRUFNLCAiZGV2aWNlIGRlbGV0ZWQiKTsKKworCWtmcmVlKGdzcGNhX2Rldi0+dXNiX2J1Zik7CisJa2ZyZWUoZ3NwY2FfZGV2KTsKK30KKwogc3RhdGljIGludCBkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXY7CkBAIC03NzgsMTMgKzg3NiwxOSBAQAogCQlnb3RvIG91dDsKIAl9CiAJZ3NwY2FfZGV2LT51c2VycysrOworCisJLyogb25lIG1vcmUgdXNlciAqLworCWtyZWZfZ2V0KCZnc3BjYV9kZXYtPmtyZWYpOworCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZ3NwY2FfZGV2OwogI2lmZGVmIEdTUENBX0RFQlVHCiAJLyogYWN0aXZhdGUgdGhlIHY0bDIgZGVidWcgKi8KIAlpZiAoZ3NwY2FfZGVidWcgJiBEX1Y0TDIpCi0JCWdzcGNhX2Rldi0+dmRldi5kZWJ1ZyB8PSAzOworCQlnc3BjYV9kZXYtPnZkZXYuZGVidWcgfD0gVjRMMl9ERUJVR19JT0NUTAorCQkJCQl8IFY0TDJfREVCVUdfSU9DVExfQVJHOwogCWVsc2UKLQkJZ3NwY2FfZGV2LT52ZGV2LmRlYnVnICY9IH4zOworCQlnc3BjYV9kZXYtPnZkZXYuZGVidWcgJj0gfihWNEwyX0RFQlVHX0lPQ1RMCisJCQkJCXwgVjRMMl9ERUJVR19JT0NUTF9BUkcpOwogI2VuZGlmCiAJcmV0ID0gMDsKIG91dDoKQEAgLTgxOCw3ICs5MjIsMTEgQEAKIAl9CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7CisKIAlQREVCVUcoRF9TVFJFQU0sICJjbG9zZSBkb25lIik7CisKKwlrcmVmX3B1dCgmZ3NwY2FfZGV2LT5rcmVmLCBnc3BjYV9kZWxldGUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgyOSw3ICs5MzcsNiBAQAogCiAJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mICpjYXApOwogCXN0cm5jcHkoY2FwLT5kcml2ZXIsIGdzcGNhX2Rldi0+c2RfZGVzYy0+bmFtZSwgc2l6ZW9mIGNhcC0+ZHJpdmVyKTsKLS8qCXN0cm5jcHkoY2FwLT5jYXJkLCBnc3BjYV9kZXYtPmNhbS5kZXZfbmFtZSwgc2l6ZW9mIGNhcC0+Y2FyZCk7ICovCiAJaWYgKGdzcGNhX2Rldi0+ZGV2LT5wcm9kdWN0ICE9IE5VTEwpIHsKIAkJc3RybmNweShjYXAtPmNhcmQsIGdzcGNhX2Rldi0+ZGV2LT5wcm9kdWN0LAogCQkJc2l6ZW9mIGNhcC0+Y2FyZCk7CkBAIC0xNDYzLDcgKzE1NzAsNiBAQAogCX0KIAogCWZyYW1lLT52NGwyX2J1Zi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKLS8qCWZyYW1lLT52NGwyX2J1Zi5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19ET05FOyAqLwogCiAJaWYgKGZyYW1lLT52NGwyX2J1Zi5tZW1vcnkgPT0gVjRMMl9NRU1PUllfVVNFUlBUUikgewogCQlmcmFtZS0+djRsMl9idWYubS51c2VycHRyID0gdjRsMl9idWYtPm0udXNlcnB0cjsKQEAgLTE2MTAsNyArMTcxNiw3IEBACiAJCX0KIAogCQkvKiBpZiB0aGUgcHJvY2VzcyBzbGVwdCBmb3IgbW9yZSB0aGFuIDEgc2Vjb25kLAotCQkgKiBnZXQgYW5ld2VyIGZyYW1lICovCisJCSAqIGdldCBhIG5ld2VyIGZyYW1lICovCiAJCWZyYW1lID0gJmdzcGNhX2Rldi0+ZnJhbWVbdjRsMl9idWYuaW5kZXhdOwogCQlpZiAoLS1uIDwgMCkKIAkJCWJyZWFrOwkJCS8qIGF2b2lkIGluZmluaXRlIGxvb3AgKi8KQEAgLTE3MjgsMjEgKzE4MzQsMjEgQEAKIAlpZiAoZGV2X3NpemUgPCBzaXplb2YgKmdzcGNhX2RldikKIAkJZGV2X3NpemUgPSBzaXplb2YgKmdzcGNhX2RldjsKIAlnc3BjYV9kZXYgPSBremFsbG9jKGRldl9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoZ3NwY2FfZGV2ID09IE5VTEwpIHsKKwlpZiAoIWdzcGNhX2RldikgewogCQllcnIoImNvdWxkbid0IGt6YWxsb2MgZ3NwY2Egc3RydWN0Iik7Ci0JCXJldHVybiAtRUlPOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJa3JlZl9pbml0KCZnc3BjYV9kZXYtPmtyZWYpOwogCWdzcGNhX2Rldi0+dXNiX2J1ZiA9IGttYWxsb2MoVVNCX0JVRl9TWiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFnc3BjYV9kZXYtPnVzYl9idWYpIHsKIAkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7Ci0JCXJldCA9IC1FSU87CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAlnc3BjYV9kZXYtPmRldiA9IGRldjsKIAlnc3BjYV9kZXYtPmlmYWNlID0gaW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyOwogCWdzcGNhX2Rldi0+bmJhbHQgPSBpbnRmLT5udW1fYWx0c2V0dGluZzsKIAlnc3BjYV9kZXYtPnNkX2Rlc2MgPSBzZF9kZXNjOwotLyoJZ3NwY2FfZGV2LT51c2VycyA9IDA7CQkJKGRvbmUgYnkga3phbGxvYykgKi8KIAlnc3BjYV9kZXYtPm5idWZyZWFkID0gMjsKIAogCS8qIGNvbmZpZ3VyZSB0aGUgc3ViZHJpdmVyIGFuZCBpbml0aWFsaXplIHRoZSBVU0IgZGV2aWNlICovCkBAIC0xNzgxLDggKzE4ODcsNyBAQAogCVBERUJVRyhEX1BST0JFLCAicHJvYmUgb2siKTsKIAlyZXR1cm4gMDsKIG91dDoKLQlrZnJlZShnc3BjYV9kZXYtPnVzYl9idWYpOwotCWtmcmVlKGdzcGNhX2Rldik7CisJa3JlZl9wdXQoJmdzcGNhX2Rldi0+a3JlZiwgZ3NwY2FfZGVsZXRlKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChnc3BjYV9kZXZfcHJvYmUpOwpAQCAtMTc5NywyNSArMTkwMiwxNiBAQAogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKLQlpZiAoIWdzcGNhX2RldikKLQkJcmV0dXJuOwotCWdzcGNhX2Rldi0+cHJlc2VudCA9IDA7Ci0JbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKTsKLQltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKLQlnc3BjYV9kZXYtPnN0cmVhbWluZyA9IDA7Ci0JZGVzdHJveV91cmJzKGdzcGNhX2Rldik7Ci0JbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKLQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7Ci0Jd2hpbGUgKGdzcGNhX2Rldi0+dXNlcnMgIT0gMCkgewkJLyogd2FpdCB1bnRpbCBmdWxseSBjbG9zZWQgKi8KLQkJYXRvbWljX2luYygmZ3NwY2FfZGV2LT5uZXZlbnQpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+d3EpOwkvKiB3YWtlIHByb2Nlc3NlcyAqLwotCQlzY2hlZHVsZSgpOwotCX0KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCiAvKiBXZSBkb24ndCB3YW50IHBlb3BsZSB0cnlpbmcgdG8gb3BlbiB1cCB0aGUgZGV2aWNlICovCiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmdzcGNhX2Rldi0+dmRldik7Ci0vKiBGcmVlIHRoZSBtZW1vcnkgKi8KLQlrZnJlZShnc3BjYV9kZXYtPnVzYl9idWYpOwotCWtmcmVlKGdzcGNhX2Rldik7CisKKwlnc3BjYV9kZXYtPnByZXNlbnQgPSAwOworCWdzcGNhX2Rldi0+c3RyZWFtaW5nID0gMDsKKworCWtyZWZfcHV0KCZnc3BjYV9kZXYtPmtyZWYsIGdzcGNhX2RlbGV0ZSk7CisKIAlQREVCVUcoRF9QUk9CRSwgImRpc2Nvbm5lY3QgY29tcGxldGUiKTsKIH0KIEVYUE9SVF9TWU1CT0woZ3NwY2FfZGlzY29ubmVjdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKaW5kZXggYzE3NjI1Yy4uMWQ5ZGM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgR1NQQ0FWMl9ICiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CkBAIC00OSwxMyArNDgsMTQgQEAKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIEdTUENBX01BWF9GUkFNRVMgMTYJLyogbWF4aW11bSBudW1iZXIgb2YgdmlkZW8gZnJhbWUgYnVmZmVycyAqLwotLyogSVNPQyB0cmFuc2ZlcnMgKi8KLSNkZWZpbmUgTUFYX05VUkJTIDE2CQkvKiBtYXggbnVtYmVyIG9mIFVSQnMgKi8KKy8qIGltYWdlIHRyYW5zZmVycyAqLworI2RlZmluZSBNQVhfTlVSQlMgNAkJLyogbWF4IG51bWJlciBvZiBVUkJzICovCiAjZGVmaW5lIElTT19NQVhfUEtUIDMyCQkvKiBtYXggbnVtYmVyIG9mIHBhY2tldHMgaW4gYW4gSVNPQyB0cmFuc2ZlciAqLwogI2RlZmluZSBJU09fTUFYX1NJWkUgMHg4MDAwCS8qIG1heCBzaXplIG9mIG9uZSBVUkIgYnVmZmVyICgzMiBLYikgKi8KIAogLyogZGV2aWNlIGluZm9ybWF0aW9uIC0gc2V0IGF0IHByb2JlIHRpbWUgKi8KIHN0cnVjdCBjYW0geworCWludCBidWxrX3NpemU7CQkvKiBidWZmZXIgc2l6ZSB3aGVuIGltYWdlIHRyYW5zZmVyIGJ5IGJ1bGsgKi8KIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpjYW1fbW9kZTsJLyogc2l6ZSBubW9kZXMgKi8KIAljaGFyIG5tb2RlczsKIAlfX3U4IGVwYWRkcjsKQEAgLTkzLDcgKzkzLDcgQEAKIC8qIG1hbmRhdG9yeSBvcGVyYXRpb25zICovCiAJY2FtX2NmX29wIGNvbmZpZzsJLyogY2FsbGVkIG9uIHByb2JlICovCiAJY2FtX29wIGluaXQ7CQkvKiBjYWxsZWQgb24gcHJvYmUgYW5kIHJlc3VtZSAqLwotCWNhbV92X29wIHN0YXJ0OwkJLyogY2FsbGVkIG9uIHN0cmVhbSBvbiAqLworCWNhbV9vcCBzdGFydDsJCS8qIGNhbGxlZCBvbiBzdHJlYW0gb24gKi8KIAljYW1fcGt0X29wIHBrdF9zY2FuOwogLyogb3B0aW9uYWwgb3BlcmF0aW9ucyAqLwogCWNhbV92X29wIHN0b3BOOwkJLyogY2FsbGVkIG9uIHN0cmVhbSBvZmYgLSBtYWluIGFsdCAqLwpAQCAtMTA1LDEwICsxMDUsMTIgQEAKIH07CiAKIC8qIHBhY2tldCB0eXBlcyB3aGVuIG1vdmluZyBmcm9tIGlzbyBidWYgdG8gZnJhbWUgYnVmICovCi0jZGVmaW5lIERJU0NBUkRfUEFDS0VUCTAKLSNkZWZpbmUgRklSU1RfUEFDS0VUCTEKLSNkZWZpbmUgSU5URVJfUEFDS0VUCTIKLSNkZWZpbmUgTEFTVF9QQUNLRVQJMworZW51bSBnc3BjYV9wYWNrZXRfdHlwZSB7CisJRElTQ0FSRF9QQUNLRVQsCisJRklSU1RfUEFDS0VULAorCUlOVEVSX1BBQ0tFVCwKKwlMQVNUX1BBQ0tFVAorfTsKIAogc3RydWN0IGdzcGNhX2ZyYW1lIHsKIAlfX3U4ICpkYXRhOwkJCS8qIGZyYW1lIGJ1ZmZlciAqLwpAQCAtMTIxLDYgKzEyMyw3IEBACiAJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IGtyZWYga3JlZjsKIAlzdHJ1Y3QgZmlsZSAqY2FwdF9maWxlOwkJLyogZmlsZSBkb2luZyB2aWRlbyBjYXB0dXJlICovCiAKIAlzdHJ1Y3QgY2FtIGNhbTsJCQkJLyogZGV2aWNlIGluZm9ybWF0aW9uICovCkBAIC0xNzMsMTAgKzE3NiwxMSBAQAogCQlzdHJ1Y3QgbW9kdWxlICptb2R1bGUpOwogdm9pZCBnc3BjYV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIHN0cnVjdCBnc3BjYV9mcmFtZSAqZ3NwY2FfZnJhbWVfYWRkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCQkgICAgaW50IHBhY2tldF90eXBlLAorCQkJCSAgICBlbnVtIGdzcGNhX3BhY2tldF90eXBlIHBhY2tldF90eXBlLAogCQkJCSAgICBzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAogCQkJCSAgICBjb25zdCBfX3U4ICpkYXRhLAogCQkJCSAgICBpbnQgbGVuKTsKK3N0cnVjdCBnc3BjYV9mcmFtZSAqZ3NwY2FfZ2V0X2lfZnJhbWUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKICNpZmRlZiBDT05GSUdfUE0KIGludCBnc3BjYV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSk7CiBpbnQgZ3NwY2FfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTY5MDE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKK2NvbmZpZyBVU0JfTTU2MDIKKwl0cmlzdGF0ZSAiQUxpIFVTQiBtNTYwMiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlCisJICBBTGkgbTU2MDIgY29ubmVjdGVkIHRvIHZhcmlvdXMgaW1hZ2Ugc2Vuc29ycy4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvbTU2MDIudHh0PiBmb3IgbW9yZSBpbmZvLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9tNTYwMi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNmFiNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAKK29iai0kKENPTkZJR19VU0JfTTU2MDIpICs9IGdzcGNhX201NjAyLm8KKworZ3NwY2FfbTU2MDItb2JqcyA6PSBtNTYwMl9jb3JlLm8gXAorCQkgICAgbTU2MDJfb3Y5NjUwLm8gXAorCQkgICAgbTU2MDJfbXQ5bTExMS5vIFwKKwkJICAgIG01NjAyX3BvMTAzMC5vIFwKKwkJICAgIG01NjAyX3M1azgzYS5vIFwKKwkJICAgIG01NjAyX3M1azRhYS5vCisKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9icmlkZ2UuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfYnJpZGdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzN2FlNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfYnJpZGdlLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBVU0IgRHJpdmVyIGZvciBBTGkgbTU2MDIgYmFzZWQgd2ViY2FtcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgorICoKKyAqIFBvcnRpb25zIG9mIGNvZGUgdG8gVVNCIGludGVyZmFjZSBhbmQgQUxpIGRyaXZlciBzb2Z0d2FyZSwKKyAqIENvcHlyaWdodCAoYykgMjAwNiBXaWxsZW0gRHVpbmtlcgorICogdjRsMiBpbnRlcmZhY2UgbW9kZWxlZCBhZnRlciB0aGUgVjRMMiBkcml2ZXIKKyAqIGZvciBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIE01NjAyX0JSSURHRV9IXworI2RlZmluZSBNNTYwMl9CUklER0VfSF8KKworI2luY2x1ZGUgImdzcGNhLmgiCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgIkFMaSBtNTYwMiIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE01NjAyX1hCX1NFTlNPUl9UWVBFIDB4MDAKKyNkZWZpbmUgTTU2MDJfWEJfU0VOU09SX0NUUkwgMHgwMQorI2RlZmluZSBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0ggMHgwMgorI2RlZmluZSBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0wgMHgwMworI2RlZmluZSBNNTYwMl9YQl9QSVhfT0ZfTElORV9IIDB4MDQKKyNkZWZpbmUgTTU2MDJfWEJfUElYX09GX0xJTkVfTCAweDA1CisjZGVmaW5lIE01NjAyX1hCX1ZTWU5DX1BBUkEgMHgwNgorI2RlZmluZSBNNTYwMl9YQl9IU1lOQ19QQVJBIDB4MDcKKyNkZWZpbmUgTTU2MDJfWEJfVEVTVF9NT0RFXzEgMHgwOAorI2RlZmluZSBNNTYwMl9YQl9URVNUX01PREVfMiAweDA5CisjZGVmaW5lIE01NjAyX1hCX1NJR19JTkkgMHgwYQorI2RlZmluZSBNNTYwMl9YQl9EU19QQVJBIDB4MGUKKyNkZWZpbmUgTTU2MDJfWEJfVFJJR19QQVJBIDB4MGYKKyNkZWZpbmUgTTU2MDJfWEJfQ0xLX1BEIDB4MTAKKyNkZWZpbmUgTTU2MDJfWEJfTUNVX0NMS19DVFJMIDB4MTIKKyNkZWZpbmUgTTU2MDJfWEJfTUNVX0NMS19ESVYgMHgxMworI2RlZmluZSBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwgMHgxNAorI2RlZmluZSBNNTYwMl9YQl9TRU5fQ0xLX0RJViAweDE1CisjZGVmaW5lIE01NjAyX1hCX0FVRF9DTEtfQ1RSTCAweDE2CisjZGVmaW5lIE01NjAyX1hCX0FVRF9DTEtfRElWIDB4MTcKKyNkZWZpbmUgTTU2MDJfWEJfREVWQ1RSMSAweDQxCisjZGVmaW5lIE01NjAyX1hCX0VQU0VUUjAgMHg0MgorI2RlZmluZSBNNTYwMl9YQl9FUEFGQ1RSIDB4NDcKKyNkZWZpbmUgTTU2MDJfWEJfRVBCRkNUUiAweDQ5CisjZGVmaW5lIE01NjAyX1hCX0VQRUZDVFIgMHg0ZgorI2RlZmluZSBNNTYwMl9YQl9URVNUX1JFRyAweDUzCisjZGVmaW5lIE01NjAyX1hCX0FMVDJTSVpFIDB4NTQKKyNkZWZpbmUgTTU2MDJfWEJfQUxUM1NJWkUgMHg1NQorI2RlZmluZSBNNTYwMl9YQl9PQlNGUkFNRSAweDU2CisjZGVmaW5lIE01NjAyX1hCX1BXUl9DVEwgMHg1OQorI2RlZmluZSBNNTYwMl9YQl9BRENfQ1RSTCAweDYwCisjZGVmaW5lIE01NjAyX1hCX0FEQ19EQVRBIDB4NjEKKyNkZWZpbmUgTTU2MDJfWEJfTUlTQ19DVFJMIDB4NjIKKyNkZWZpbmUgTTU2MDJfWEJfU05BUFNIT1QgMHg2MworI2RlZmluZSBNNTYwMl9YQl9TQ1JBVENIXzEgMHg2NAorI2RlZmluZSBNNTYwMl9YQl9TQ1JBVENIXzIgMHg2NQorI2RlZmluZSBNNTYwMl9YQl9TQ1JBVENIXzMgMHg2NgorI2RlZmluZSBNNTYwMl9YQl9TQ1JBVENIXzQgMHg2NworI2RlZmluZSBNNTYwMl9YQl9JMkNfQ1RSTCAweDY4CisjZGVmaW5lIE01NjAyX1hCX0kyQ19DTEtfRElWIDB4NjkKKyNkZWZpbmUgTTU2MDJfWEJfSTJDX0RFVl9BRERSIDB4NmEKKyNkZWZpbmUgTTU2MDJfWEJfSTJDX1JFR19BRERSIDB4NmIKKyNkZWZpbmUgTTU2MDJfWEJfSTJDX0RBVEEgMHg2YworI2RlZmluZSBNNTYwMl9YQl9JMkNfU1RBVFVTIDB4NmQKKyNkZWZpbmUgTTU2MDJfWEJfR1BJT19EQVRfSCAweDcwCisjZGVmaW5lIE01NjAyX1hCX0dQSU9fREFUX0wgMHg3MQorI2RlZmluZSBNNTYwMl9YQl9HUElPX0RJUl9IIDB4NzIKKyNkZWZpbmUgTTU2MDJfWEJfR1BJT19ESVJfTCAweDczCisjZGVmaW5lIE01NjAyX1hCX0dQSU9fRU5fSCAweDc0CisjZGVmaW5lIE01NjAyX1hCX0dQSU9fRU5fTCAweDc1CisjZGVmaW5lIE01NjAyX1hCX0dQSU9fREFUIDB4NzYKKyNkZWZpbmUgTTU2MDJfWEJfR1BJT19ESVIgMHg3NworI2RlZmluZSBNNTYwMl9YQl9NSVNDX0NUTCAweDcwCisKKyNkZWZpbmUgSTJDX0JVU1kgMHg4MAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIERyaXZlciBpbmZvICovCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkFMaSBtNTYwMiBMaW51eCBEcml2ZXIgUHJvamVjdCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkFMaSBtNTYwMiB3ZWJjYW0gZHJpdmVyIgorCisjZGVmaW5lIE01NjAyX0lTT0NfRU5EUE9JTlRfQUREUiAweDgxCisjZGVmaW5lIE01NjAyX0lOVFJfRU5EUE9JTlRfQUREUiAweDgyCisKKyNkZWZpbmUgTTU2MDJfTUFYX0ZSQU1FUwkzMgorI2RlZmluZSBNNTYwMl9VUkJTCQkyCisjZGVmaW5lIE01NjAyX0lTT0NfUEFDS0VUUwkxNAorCisjZGVmaW5lIE01NjAyX1VSQl9USU1FT1VUCW1zZWNzX3RvX2ppZmZpZXMoMiAqIE01NjAyX0lTT0NfUEFDS0VUUykKKyNkZWZpbmUgTTU2MDJfVVJCX01TR19USU1FT1VUICAgNTAwMAorI2RlZmluZSBNNTYwMl9GUkFNRV9USU1FT1VUCTIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBBIHNrZWxldG9uIHVzZWQgZm9yIHNlbmRpbmcgbWVzc2FnZXMgdG8gdGhlIG01NjAyIGJyaWRnZSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnJpZGdlX3VyYl9za2VsZXRvbltdID0geworCTB4MTMsIDB4MDAsIDB4ODEsIDB4MDAKK307CisKKy8qIEEgc2tlbGV0b24gdXNlZCBmb3Igc2VuZGluZyBtZXNzYWdlcyB0byB0aGUgc2Vuc29yICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzZW5zb3JfdXJiX3NrZWxldG9uW10gPSB7CisJMHgyMywgTTU2MDJfWEJfR1BJT19FTl9ILCAweDgxLCAweDA2LAorCTB4MjMsIE01NjAyX1hCX01JU0NfQ1RSTCwgMHg4MSwgMHg4MCwKKwkweDEzLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4ODEsIDB4MDAsCisJMHgxMywgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDgxLCAweDAwLAorCTB4MTMsIE01NjAyX1hCX0kyQ19EQVRBLCAweDgxLCAweDAwLAorCTB4MTMsIE01NjAyX1hCX0kyQ19DVFJMLCAweDgxLCAweDExCit9OworCisvKiBtNTYwMiBkZXZpY2UgZGVzY3JpcHRvciwgY3VycmVudGx5IGl0IGp1c3Qgd3JhcHMgdGhlIG01NjAyX2NhbWVyYSBzdHJ1Y3QgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CisKKwkvKiBUaGUgbmFtZSBvZiB0aGUgbTU2MDIgY2FtZXJhICovCisJY2hhciAqbmFtZTsKKworCS8qIEEgcG9pbnRlciB0byB0aGUgY3VycmVudGx5IGNvbm5lY3RlZCBzZW5zb3IgKi8KKwlzdHJ1Y3QgbTU2MDJfc2Vuc29yICpzZW5zb3I7CisKKwlzdHJ1Y3Qgc2RfZGVzYyAqZGVzYzsKKworCS8qIFRoZSBjdXJyZW50IGZyYW1lJ3MgaWQsIHVzZWQgdG8gZGV0ZWN0IGZyYW1lIGJvdW5kYXJpZXMgKi8KKwl1OCBmcmFtZV9pZDsKKworCS8qIFRoZSBjdXJyZW50IGZyYW1lIGNvdW50ICovCisJdTMyIGZyYW1lX2NvdW50OworfTsKKworaW50IG01NjAyX3JlYWRfYnJpZGdlKAorCXN0cnVjdCBzZCAqc2QsIHU4IGFkZHJlc3MsIHU4ICppMmNfZGF0YSk7CisKK2ludCBtNTYwMl93cml0ZV9icmlkZ2UoCisJc3RydWN0IHNkICpzZCwgdTggYWRkcmVzcywgdTggaTJjX2RhdGEpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2Y2UzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jCkBAIC0wLDAgKzEsMzA5IEBACisgLyoKKyAqIFVTQiBEcml2ZXIgZm9yIEFMaSBtNTYwMiBiYXNlZCB3ZWJjYW1zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgorICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgorICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CisgKgorICogUG9ydGlvbnMgb2YgY29kZSB0byBVU0IgaW50ZXJmYWNlIGFuZCBBTGkgZHJpdmVyIHNvZnR3YXJlLAorICogQ29weXJpZ2h0IChjKSAyMDA2IFdpbGxlbSBEdWlua2VyCisgKiB2NGwyIGludGVyZmFjZSBtb2RlbGVkIGFmdGVyIHRoZSBWNEwyIGRyaXZlcgorICogZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJtNTYwMl9vdjk2NTAuaCIKKyNpbmNsdWRlICJtNTYwMl9tdDltMTExLmgiCisjaW5jbHVkZSAibTU2MDJfcG8xMDMwLmgiCisjaW5jbHVkZSAibTU2MDJfczVrODNhLmgiCisjaW5jbHVkZSAibTU2MDJfczVrNGFhLmgiCisKKy8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycyAqLworaW50IGZvcmNlX3NlbnNvcjsKK2ludCBkdW1wX2JyaWRnZTsKK2ludCBkdW1wX3NlbnNvcjsKKworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgbTU2MDJfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA0MDIsIDB4NTYwMil9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgbTU2MDJfdGFibGUpOworCisvKiBSZWFkcyBhIGJ5dGUgZnJvbSB0aGUgbTU2MDIgKi8KK2ludCBtNTYwMl9yZWFkX2JyaWRnZShzdHJ1Y3Qgc2QgKnNkLCB1OCBhZGRyZXNzLCB1OCAqaTJjX2RhdGEpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OworCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKKworCWVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDA0LCAweGMwLCAweDE0LAorCQkJICAgICAgMHg4MTAwICsgYWRkcmVzcywgYnVmLAorCQkJICAgICAgMSwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKKwkqaTJjX2RhdGEgPSBidWZbMF07CisKKwlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBicmlkZ2UgcmVnaXN0ZXIgMHgleCBjb250YWluaW5nIDB4JXgiLAorCSAgICAgICBhZGRyZXNzLCAqaTJjX2RhdGEpOworCisJLyogdXNiX2NvbnRyb2xfbXNnKC4uLikgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgdXBvbiBzdWNjZXNzLAorCW1hc2sgdGhhdCBhbmQgcmV0dXJuIHplcm8gdXBvbiBzdWNjZXNzIGluc3RlYWQqLworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCisvKiBXcml0ZXMgYSBieXRlIHRvIHRvIHRoZSBtNTYwMiAqLworaW50IG01NjAyX3dyaXRlX2JyaWRnZShzdHJ1Y3Qgc2QgKnNkLCB1OCBhZGRyZXNzLCB1OCBpMmNfZGF0YSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2QtPmdzcGNhX2Rldi5kZXY7CisJX191OCAqYnVmID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmOworCisJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgYnJpZGdlIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKKwkgICAgICAgYWRkcmVzcywgaTJjX2RhdGEpOworCisJbWVtY3B5KGJ1ZiwgYnJpZGdlX3VyYl9za2VsZXRvbiwKKwkgICAgICAgc2l6ZW9mKGJyaWRnZV91cmJfc2tlbGV0b24pKTsKKwlidWZbMV0gPSBhZGRyZXNzOworCWJ1ZlszXSA9IGkyY19kYXRhOworCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQkweDA0LCAweDQwLCAweDE5LAorCQkJCTB4MDAwMCwgYnVmLAorCQkJCTQsIE01NjAyX1VSQl9NU0dfVElNRU9VVCk7CisKKwkvKiB1c2JfY29udHJvbF9tc2coLi4uKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCB1cG9uIHN1Y2Nlc3MsCisJICAgbWFzayB0aGF0IGFuZCByZXR1cm4gemVybyB1cG9uIHN1Y2Nlc3MgaW5zdGVhZCAqLworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCisvKiBEdW1wIGFsbCB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBtNTYwMiBicmlkZ2UsCisgICB1bmZvcnR1bmF0ZWx5IHRoaXMgYnJlYWtzIHRoZSBjYW1lcmEgdW50aWwgaXQncyBwb3dlciBjeWNsZWQgKi8KK3N0YXRpYyB2b2lkIG01NjAyX2R1bXBfYnJpZGdlKHN0cnVjdCBzZCAqc2QpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDB4ODA7IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIHZhbCA9IDA7CisJCW01NjAyX3JlYWRfYnJpZGdlKHNkLCBpLCAmdmFsKTsKKwkJaW5mbygiQUxpIG01NjAyIGFkZHJlc3MgMHgleCBjb250YWlucyAweCV4IiwgaSwgdmFsKTsKKwl9CisJaW5mbygiV2FybmluZzogVGhlIEFMaSBtNTYwMiB3ZWJjYW0gcHJvYmFibHkgd29uJ3Qgd29yayAiCisJCSJ1bnRpbCBpdCdzIHBvd2VyIGN5Y2xlZCIpOworfQorCitzdGF0aWMgaW50IG01NjAyX3Byb2JlX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkKQoreworCS8qIFRyeSB0aGUgcG8xMDMwICovCisJc2QtPnNlbnNvciA9ICZwbzEwMzA7CisJaWYgKCFzZC0+c2Vuc29yLT5wcm9iZShzZCkpCisJCXJldHVybiAwOworCisJLyogVHJ5IHRoZSBtdDltMTExIHNlbnNvciAqLworCXNkLT5zZW5zb3IgPSAmbXQ5bTExMTsKKwlpZiAoIXNkLT5zZW5zb3ItPnByb2JlKHNkKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBUcnkgdGhlIHM1azRhYSAqLworCXNkLT5zZW5zb3IgPSAmczVrNGFhOworCWlmICghc2QtPnNlbnNvci0+cHJvYmUoc2QpKQorCQlyZXR1cm4gMDsKKworCS8qIFRyeSB0aGUgb3Y5NjUwICovCisJc2QtPnNlbnNvciA9ICZvdjk2NTA7CisJaWYgKCFzZC0+c2Vuc29yLT5wcm9iZShzZCkpCisJCXJldHVybiAwOworCisJLyogVHJ5IHRoZSBzNWs4M2EgKi8KKwlzZC0+c2Vuc29yID0gJnM1azgzYTsKKwlpZiAoIXNkLT5zZW5zb3ItPnByb2JlKHNkKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBNb3JlIHNlbnNvciBwcm9iZSBmdW5jdGlvbiBnb2VzIGhlcmUgKi8KKwlpbmZvKCJGYWlsZWQgdG8gZmluZCBhIHNlbnNvciIpOworCXNkLT5zZW5zb3IgPSBOVUxMOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IG01NjAyX2NvbmZpZ3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworCitzdGF0aWMgaW50IG01NjAyX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgZXJyOworCisJUERFQlVHKERfQ09ORiwgIkluaXRpYWxpemluZyBBTGkgbTU2MDIgd2ViY2FtIik7CisJLyogUnVuIHRoZSBpbml0IHNlcXVlbmNlICovCisJZXJyID0gc2QtPnNlbnNvci0+aW5pdChzZCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG01NjAyX3N0YXJ0X3RyYW5zZmVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191OCAqYnVmID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmOworCWludCBlcnI7CisKKwkvKiBTZW5kIHN0YXJ0IGNvbW1hbmQgdG8gdGhlIGNhbWVyYSAqLworCWNvbnN0IHU4IGJ1ZmZlcls0XSA9IHsweDEzLCAweGY5LCAweDBmLCAweDAxfTsKKwltZW1jcHkoYnVmLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwllcnIgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJICAgICAgMHgwNCwgMHg0MCwgMHgxOSwgMHgwMDAwLCBidWYsCisJCQkgICAgICA0LCBNNTYwMl9VUkJfTVNHX1RJTUVPVVQpOworCisJUERFQlVHKERfU1RSRUFNLCAiVHJhbnNmZXIgc3RhcnRlZCIpOworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitzdGF0aWMgdm9pZCBtNTYwMl91cmJfY29tcGxldGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwKKwkJCV9fdTggKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGxlbiA8IDYpIHsKKwkJUERFQlVHKERfUEFDSywgIlBhY2tldCBpcyBsZXNzIHRoYW4gNiBieXRlcyIpOworCQlyZXR1cm47CisJfQorCisJLyogRnJhbWUgZGVsaW1pdGVyOiBmZiB4eCB4eCB4eCBmZiBmZiAqLworCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVs0XSA9PSAweGZmICYmIGRhdGFbNV0gPT0gMHhmZiAmJgorCSAgICBkYXRhWzJdICE9IHNkLT5mcmFtZV9pZCkgeworCQlQREVCVUcoRF9GUkFNLCAiRnJhbWUgZGVsaW1pdGVyIGRldGVjdGVkIik7CisJCXNkLT5mcmFtZV9pZCA9IGRhdGFbMl07CisKKwkJLyogUmVtb3ZlIHRoZSBleHRyYSBmbHVmZiBhcHBlbmRlZCBvbiBlYWNoIGhlYWRlciAqLworCQlkYXRhICs9IDY7CisJCWxlbiAtPSA2OworCisJCS8qIENvbXBsZXRlIHRoZSBsYXN0IGZyYW1lIChpZiBhbnkpICovCisJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCWZyYW1lLCBkYXRhLCAwKTsKKwkJc2QtPmZyYW1lX2NvdW50Kys7CisKKwkJLyogQ3JlYXRlIGEgbmV3IGZyYW1lICovCisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7CisKKwkJUERFQlVHKERfRlJBTSwgIlN0YXJ0aW5nIG5ldyBmcmFtZSAlZCIsCisJCSAgICAgICBzZC0+ZnJhbWVfY291bnQpOworCisJfSBlbHNlIHsKKwkJaW50IGN1cl9mcmFtZV9sZW4gPSBmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YTsKKworCQkvKiBSZW1vdmUgdXJiIGhlYWRlciAqLworCQlkYXRhICs9IDQ7CisJCWxlbiAtPSA0OworCisJCWlmIChjdXJfZnJhbWVfbGVuICsgbGVuIDw9IGZyYW1lLT52NGwyX2J1Zi5sZW5ndGgpIHsKKwkJCVBERUJVRyhEX0ZSQU0sICJDb250aW51aW5nIGZyYW1lICVkIGNvcHlpbmcgJWQgYnl0ZXMiLAorCQkJICAgICAgIHNkLT5mcmFtZV9jb3VudCwgbGVuKTsKKworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwKKwkJCQkJZGF0YSwgbGVuKTsKKwkJfSBlbHNlIGlmIChmcmFtZS0+djRsMl9idWYubGVuZ3RoIC0gY3VyX2ZyYW1lX2xlbiA+IDApIHsKKwkJCS8qIEFkZCB0aGUgcmVtYWluaW5nIGRhdGEgdXAgdG8gZnJhbWUgc2l6ZSAqLworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwKKwkJCQkJZnJhbWUtPnY0bDJfYnVmLmxlbmd0aCAtIGN1cl9mcmFtZV9sZW4pOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBtNTYwMl9zdG9wX3RyYW5zZmVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwkvKiBJcyB0aGVyZSBhcmUgYSBjb21tYW5kIHRvIHN0b3AgYSBkYXRhIHRyYW5zZmVyPyAqLworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uLCB0aGUgY3RybCBhbmQgbmN0cmwgaXMgZmlsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lCQk9IE1PRFVMRV9OQU1FLAorCS5jb25maWcJCT0gbTU2MDJfY29uZmlndXJlLAorCS5pbml0CQk9IG01NjAyX2luaXQsCisJLnN0YXJ0CQk9IG01NjAyX3N0YXJ0X3RyYW5zZmVyLAorCS5zdG9wTgkJPSBtNTYwMl9zdG9wX3RyYW5zZmVyLAorCS5wa3Rfc2Nhbgk9IG01NjAyX3VyYl9jb21wbGV0ZQorfTsKKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBtNTYwMl9jb25maWd1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW07CisJaW50IGVycjsKKworCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKwljYW0tPmVwYWRkciA9IE01NjAyX0lTT0NfRU5EUE9JTlRfQUREUjsKKwlzZC0+ZGVzYyA9ICZzZF9kZXNjOworCisJaWYgKGR1bXBfYnJpZGdlKQorCQltNTYwMl9kdW1wX2JyaWRnZShzZCk7CisKKwkvKiBQcm9iZSBzZW5zb3IgKi8KKwllcnIgPSBtNTYwMl9wcm9iZV9zZW5zb3Ioc2QpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKworCXJldHVybiAwOworCitmYWlsOgorCVBERUJVRyhEX0VSUiwgIkFMaSBtNTYwMiB3ZWJjYW0gZmFpbGVkIik7CisJY2FtLT5jYW1fbW9kZSA9IE5VTEw7CisJY2FtLT5ubW9kZXMgPSAwOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBtNTYwMl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkgICAgICAgVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gbTU2MDJfdGFibGUsCisJLnByb2JlID0gbTU2MDJfcHJvYmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisjZW5kaWYKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IG1vZF9tNTYwMl9pbml0KHZvaWQpCit7CisJaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCisJCXJldHVybiAtMTsKKwlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBtb2RfbTU2MDJfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KG1vZF9tNTYwMl9pbml0KTsKK21vZHVsZV9leGl0KG1vZF9tNTYwMl9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfcGFyYW0oZm9yY2Vfc2Vuc29yLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2Vfc2Vuc29yLAorCQkiZm9yY2UgZGV0ZWN0aW9uIG9mIHNlbnNvciwgIgorCQkiMSA9IE9WOTY1MCwgMiA9IFM1SzgzQSwgMyA9IFM1SzRBQSwgNCA9IE1UOU0xMTEsIDUgPSBQTzEwMzAiKTsKKworbW9kdWxlX3BhcmFtKGR1bXBfYnJpZGdlLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGR1bXBfYnJpZGdlLCAiRHVtcHMgYWxsIHVzYiBicmlkZ2UgcmVnaXN0ZXJzIGF0IHN0YXJ0dXAiKTsKKworbW9kdWxlX3BhcmFtKGR1bXBfc2Vuc29yLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGR1bXBfc2Vuc29yLCAiRHVtcHMgYWxsIHVzYiBzZW5zb3IgcmVnaXN0ZXJzICIKKwkJImF0IHN0YXJ0dXAgcHJvdmlkaW5nIGEgc2Vuc29yIGlzIGZvdW5kIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzAwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYwpAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIG10OW0xMTEgc2Vuc29yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgorICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgorICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CisgKgorICogUG9ydGlvbnMgb2YgY29kZSB0byBVU0IgaW50ZXJmYWNlIGFuZCBBTGkgZHJpdmVyIHNvZnR3YXJlLAorICogQ29weXJpZ2h0IChjKSAyMDA2IFdpbGxlbSBEdWlua2VyCisgKiB2NGwyIGludGVyZmFjZSBtb2RlbGVkIGFmdGVyIHRoZSBWNEwyIGRyaXZlcgorICogZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJtNTYwMl9tdDltMTExLmgiCisKK2ludCBtdDltMTExX3Byb2JlKHN0cnVjdCBzZCAqc2QpCit7CisJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKKwlpbnQgaTsKKworCWlmIChmb3JjZV9zZW5zb3IpIHsKKwkJaWYgKGZvcmNlX3NlbnNvciA9PSBNVDlNMTExX1NFTlNPUikgeworCQkJaW5mbygiRm9yY2luZyBhICVzIHNlbnNvciIsIG10OW0xMTEubmFtZSk7CisJCQlnb3RvIHNlbnNvcl9mb3VuZDsKKwkJfQorCQkvKiBJZiB3ZSB3YW50IHRvIGZvcmNlIGFub3RoZXIgc2Vuc29yLCBkb24ndCB0cnkgdG8gcHJvYmUgdGhpcworCQkgKiBvbmUgKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaW5mbygiUHJvYmluZyBmb3IgYSBtdDltMTExIHNlbnNvciIpOworCisJLyogRG8gdGhlIHByZWluaXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X210OW0xMTEpOyBpKyspIHsKKwkJaWYgKHByZWluaXRfbXQ5bTExMVtpXVswXSA9PSBCUklER0UpIHsKKwkJCW01NjAyX3dyaXRlX2JyaWRnZShzZCwKKwkJCQlwcmVpbml0X210OW0xMTFbaV1bMV0sCisJCQkJcHJlaW5pdF9tdDltMTExW2ldWzJdKTsKKwkJfSBlbHNlIHsKKwkJCWRhdGFbMF0gPSBwcmVpbml0X210OW0xMTFbaV1bMl07CisJCQlkYXRhWzFdID0gcHJlaW5pdF9tdDltMTExW2ldWzNdOworCQkJbXQ5bTExMV93cml0ZV9zZW5zb3Ioc2QsCisJCQkJcHJlaW5pdF9tdDltMTExW2ldWzFdLCBkYXRhLCAyKTsKKwkJfQorCX0KKworCWlmIChtdDltMTExX3JlYWRfc2Vuc29yKHNkLCBNVDlNMTExX1NDX0NISVBWRVIsIGRhdGEsIDIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgoZGF0YVswXSA9PSAweDE0KSAmJiAoZGF0YVsxXSA9PSAweDNhKSkgeworCQlpbmZvKCJEZXRlY3RlZCBhIG10OW0xMTEgc2Vuc29yIik7CisJCWdvdG8gc2Vuc29yX2ZvdW5kOworCX0KKworCXJldHVybiAtRU5PREVWOworCitzZW5zb3JfZm91bmQ6CisJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBtdDltMTExLm1vZGVzOworCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IG10OW0xMTEubm1vZGVzOworCXNkLT5kZXNjLT5jdHJscyA9IG10OW0xMTEuY3RybHM7CisJc2QtPmRlc2MtPm5jdHJscyA9IG10OW0xMTEubmN0cmxzOworCXJldHVybiAwOworfQorCitpbnQgbXQ5bTExMV9pbml0KHN0cnVjdCBzZCAqc2QpCit7CisJaW50IGksIGVyciA9IDA7CisKKwkvKiBJbml0IHRoZSBzZW5zb3IgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0X210OW0xMTEpOyBpKyspIHsKKwkJdTggZGF0YVsyXTsKKworCQlpZiAoaW5pdF9tdDltMTExW2ldWzBdID09IEJSSURHRSkgeworCQkJZXJyID0gbTU2MDJfd3JpdGVfYnJpZGdlKHNkLAorCQkJCWluaXRfbXQ5bTExMVtpXVsxXSwKKwkJCQlpbml0X210OW0xMTFbaV1bMl0pOworCQl9IGVsc2UgeworCQkJZGF0YVswXSA9IGluaXRfbXQ5bTExMVtpXVsyXTsKKwkJCWRhdGFbMV0gPSBpbml0X210OW0xMTFbaV1bM107CisJCQllcnIgPSBtdDltMTExX3dyaXRlX3NlbnNvcihzZCwKKwkJCQlpbml0X210OW0xMTFbaV1bMV0sIGRhdGEsIDIpOworCQl9CisJfQorCisJaWYgKGR1bXBfc2Vuc29yKQorCQltdDltMTExX2R1bXBfcmVnaXN0ZXJzKHNkKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgbXQ5bTExMV9wb3dlcl9kb3duKHN0cnVjdCBzZCAqc2QpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBtdDltMTExX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJaW50IGVycjsKKwl1OCBkYXRhWzJdID0gezB4MDAsIDB4MDB9OworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWVyciA9IG10OW0xMTFfcmVhZF9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwKKwkJCQkgIGRhdGEsIDIpOworCSp2YWwgPSBkYXRhWzBdICYgTVQ5TTExMV9STUJfTUlSUk9SX1JPV1M7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgdmVydGljYWwgZmxpcCAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBtdDltMTExX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGRhdGFbMl0gPSB7MHgwMCwgMHgwMH07CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJUERFQlVHKERfVjRMMiwgIlNldCB2ZXJ0aWNhbCBmbGlwIHRvICVkIiwgdmFsKTsKKworCS8qIFNldCB0aGUgY29ycmVjdCBwYWdlIG1hcCAqLworCWVyciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1BBR0VfTUFQLCBkYXRhLCAyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBtdDltMTExX3JlYWRfc2Vuc29yKHNkLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsIGRhdGEsIDIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWRhdGFbMF0gPSAoZGF0YVswXSAmIDB4ZmUpIHwgdmFsOworCWVyciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsCisJCQkJICAgZGF0YSwgMik7CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBtdDltMTExX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJaW50IGVycjsKKwl1OCBkYXRhWzJdID0gezB4MDAsIDB4MDB9OworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWVyciA9IG10OW0xMTFfcmVhZF9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwKKwkJCQkgIGRhdGEsIDIpOworCSp2YWwgPSBkYXRhWzBdICYgTVQ5TTExMV9STUJfTUlSUk9SX0NPTFM7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG10OW0xMTFfc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGhvcml6b250YWwgZmxpcCB0byAlZCIsIHZhbCk7CisKKwkvKiBTZXQgdGhlIGNvcnJlY3QgcGFnZSBtYXAgKi8KKwllcnIgPSBtdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9QQUdFX01BUCwgZGF0YSwgMik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJZXJyID0gbXQ5bTExMV9yZWFkX3NlbnNvcihzZCwgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9CLCBkYXRhLCAyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlkYXRhWzBdID0gKGRhdGFbMF0gJiAweGZkKSB8ICgodmFsIDw8IDEpICYgMHgwMik7CisJZXJyID0gbXQ5bTExMV93cml0ZV9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwKKwkJCQkJZGF0YSwgMik7CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBtdDltMTExX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlpbnQgZXJyLCB0bXA7CisJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwllcnIgPSBtdDltMTExX3JlYWRfc2Vuc29yKHNkLCBNVDlNMTExX1NDX0dMT0JBTF9HQUlOLCBkYXRhLCAyKTsKKwl0bXAgPSAoKGRhdGFbMV0gPDwgOCkgfCBkYXRhWzBdKTsKKworCSp2YWwgPSAoKHRtcCAmICgxIDw8IDEwKSkgKiAyKSB8CisJICAgICAgKCh0bXAgJiAoMSA8PCAgOSkpICogMikgfAorCSAgICAgICgodG1wICYgKDEgPDwgIDgpKSAqIDIpIHwKKwkgICAgICAgKHRtcCAmIDB4N2YpOworCisJUERFQlVHKERfVjRMMiwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBtdDltMTExX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnIsIHRtcDsKKwl1OCBkYXRhWzJdID0gezB4MDAsIDB4MDB9OworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIFNldCB0aGUgY29ycmVjdCBwYWdlIG1hcCAqLworCWVyciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1BBR0VfTUFQLCBkYXRhLCAyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAodmFsID49IElOSVRJQUxfTUFYX0dBSU4gKiAyICogMiAqIDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCh2YWwgPj0gSU5JVElBTF9NQVhfR0FJTiAqIDIgKiAyKSAmJgorCSAgICAodmFsIDwgKElOSVRJQUxfTUFYX0dBSU4gLSAxKSAqIDIgKiAyICogMikpCisJCXRtcCA9ICgxIDw8IDEwKSB8ICh2YWwgPDwgOSkgfAorCQkJCSh2YWwgPDwgOCkgfCAodmFsIC8gOCk7CisJZWxzZSBpZiAoKHZhbCA+PSBJTklUSUFMX01BWF9HQUlOICogMikgJiYKKwkJICh2YWwgPCAgSU5JVElBTF9NQVhfR0FJTiAqIDIgKiAyKSkKKwkJdG1wID0gKDEgPDwgOSkgfCAoMSA8PCA4KSB8ICh2YWwgLyA0KTsKKwllbHNlIGlmICgodmFsID49IElOSVRJQUxfTUFYX0dBSU4pICYmCisJCSAodmFsIDwgSU5JVElBTF9NQVhfR0FJTiAqIDIpKQorCQl0bXAgPSAoMSA8PCA4KSB8ICh2YWwgLyAyKTsKKwllbHNlCisJCXRtcCA9IHZhbDsKKworCWRhdGFbMV0gPSAodG1wICYgMHhmZjAwKSA+PiA4OworCWRhdGFbMF0gPSAodG1wICYgMHhmZik7CisJUERFQlVHKERfVjRMMiwgInRtcD0lZCwgZGF0YVsxXT0lZCwgZGF0YVswXT0lZCIsIHRtcCwKKwkgICAgICAgZGF0YVsxXSwgZGF0YVswXSk7CisKKwllcnIgPSBtdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9TQ19HTE9CQUxfR0FJTiwKKwkJCQkgICBkYXRhLCAyKTsKK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG10OW0xMTFfcmVhZF9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJCXU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKSB7CisJaW50IGVyciwgaTsKKworCWRvIHsKKwkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19TVEFUVVMsIGkyY19kYXRhKTsKKwl9IHdoaWxlICgoKmkyY19kYXRhICYgSTJDX0JVU1kpICYmICFlcnIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLAorCQkJCSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCBhZGRyZXNzKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuICYmICFlcnI7IGkrKykgeworCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RBVEEsICYoaTJjX2RhdGFbaV0pKTsKKworCQlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgorCQkgICAgICAgIjB4JXggY29udGFpbnMgMHgleCAiLCBhZGRyZXNzLCAqaTJjX2RhdGEpOworCX0KK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG10OW0xMTFfd3JpdGVfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCQkJdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pCit7CisJaW50IGVyciwgaTsKKwl1OCAqcDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OworCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKKworCS8qIE5vIHNlbnNvciB3aXRoIGEgZGF0YSB3aWR0aCBsYXJnZXIKKwkgICB0aGFuIDE2IGJpdHMgaGFzIHlldCBiZWVuIHNlZW4sIG5vciB3aXRoIDAgOnAqLworCWlmIChsZW4gPiAyIHx8ICFsZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KGJ1Ziwgc2Vuc29yX3VyYl9za2VsZXRvbiwKKwkgICAgICAgc2l6ZW9mKHNlbnNvcl91cmJfc2tlbGV0b24pKTsKKworCWJ1ZlsxMV0gPSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQ7CisJYnVmWzE1XSA9IGFkZHJlc3M7CisKKwlwID0gYnVmICsgMTY7CisKKwkvKiBDb3B5IGEgZm91ciBieXRlIHdyaXRlIHNlcXVlbmNlIGZvciBlYWNoIGJ5dGUgdG8gYmUgd3JpdHRlbiB0byAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDE2LCA0KTsKKwkJcFszXSA9IGkyY19kYXRhW2ldOworCQlwICs9IDQ7CisJCVBERUJVRyhEX0NPTkYsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCisJCSAgICAgICBhZGRyZXNzLCBpMmNfZGF0YVtpXSk7CisJfQorCisJLyogQ29weSB0aGUgdGFpbGVyICovCisJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAyMCwgNCk7CisKKwkvKiBTZXQgdGhlIHRvdGFsIGxlbmd0aCAqLworCXBbM10gPSAweDEwICsgbGVuOworCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDQsIDB4NDAsIDB4MTksCisJCQkgICAgICAweDAwMDAsIGJ1ZiwKKwkJCSAgICAgIDIwICsgbGVuICogNCwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCit2b2lkIG10OW0xMTFfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCkKK3sKKwl1OCBhZGRyZXNzLCB2YWx1ZVsyXSA9IHsweDAwLCAweDAwfTsKKworCWluZm8oIkR1bXBpbmcgdGhlIG10OW0xMTEgcmVnaXN0ZXIgc3RhdGUiKTsKKworCWluZm8oIkR1bXBpbmcgdGhlIG10OW0xMTEgc2Vuc29yIGNvcmUgcmVnaXN0ZXJzIik7CisJdmFsdWVbMV0gPSBNVDlNMTExX1NFTlNPUl9DT1JFOworCW10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1BBR0VfTUFQLCB2YWx1ZSwgMik7CisJZm9yIChhZGRyZXNzID0gMDsgYWRkcmVzcyA8IDB4ZmY7IGFkZHJlc3MrKykgeworCQltdDltMTExX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCB2YWx1ZSwgMik7CisJCWluZm8oInJlZ2lzdGVyIDB4JXggY29udGFpbnMgMHgleCV4IiwKKwkJICAgICBhZGRyZXNzLCB2YWx1ZVswXSwgdmFsdWVbMV0pOworCX0KKworCWluZm8oIkR1bXBpbmcgdGhlIG10OW0xMTEgY29sb3IgcGlwZWxpbmUgcmVnaXN0ZXJzIik7CisJdmFsdWVbMV0gPSBNVDlNMTExX0NPTE9SUElQRTsKKwltdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9QQUdFX01BUCwgdmFsdWUsIDIpOworCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPCAweGZmOyBhZGRyZXNzKyspIHsKKwkJbXQ5bTExMV9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgdmFsdWUsIDIpOworCQlpbmZvKCJyZWdpc3RlciAweCV4IGNvbnRhaW5zIDB4JXgleCIsCisJCSAgICAgYWRkcmVzcywgdmFsdWVbMF0sIHZhbHVlWzFdKTsKKwl9CisKKwlpbmZvKCJEdW1waW5nIHRoZSBtdDltMTExIGNhbWVyYSBjb250cm9sIHJlZ2lzdGVycyIpOworCXZhbHVlWzFdID0gTVQ5TTExMV9DQU1FUkFfQ09OVFJPTDsKKwltdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9QQUdFX01BUCwgdmFsdWUsIDIpOworCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPCAweGZmOyBhZGRyZXNzKyspIHsKKwkJbXQ5bTExMV9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgdmFsdWUsIDIpOworCQlpbmZvKCJyZWdpc3RlciAweCV4IGNvbnRhaW5zIDB4JXgleCIsCisJCSAgICAgYWRkcmVzcywgdmFsdWVbMF0sIHZhbHVlWzFdKTsKKwl9CisKKwlpbmZvKCJtdDltMTExIHJlZ2lzdGVyIHN0YXRlIGR1bXAgY29tcGxldGUiKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE1MjA5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5oCkBAIC0wLDAgKzEsMTAxOSBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIG10OW0xMTEgc2Vuc29yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgorICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgorICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CisgKgorICogUG9ydGlvbnMgb2YgY29kZSB0byBVU0IgaW50ZXJmYWNlIGFuZCBBTGkgZHJpdmVyIHNvZnR3YXJlLAorICogQ29weXJpZ2h0IChjKSAyMDA2IFdpbGxlbSBEdWlua2VyCisgKiB2NGwyIGludGVyZmFjZSBtb2RlbGVkIGFmdGVyIHRoZSBWNEwyIGRyaXZlcgorICogZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCisgKgorICogU29tZSBkZWZpbmVzIHRha2VuIGZyb20gdGhlIG10OW0xMTEgc2Vuc29yIGRyaXZlcgorICogQ29weXJpZ2h0IChDKSAyMDA4LCBSb2JlcnQgSmFyem1payA8cm9iZXJ0LmphcnptaWtAZnJlZS5mcj4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBNNTYwMl9NVDlNMTExX0hfCisjZGVmaW5lIE01NjAyX01UOU0xMTFfSF8KKworI2luY2x1ZGUgIm01NjAyX3NlbnNvci5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTVQ5TTExMV9TQ19DSElQVkVSCQkJMHgwMAorI2RlZmluZSBNVDlNMTExX1NDX1JPV1NUQVJUCQkJMHgwMQorI2RlZmluZSBNVDlNMTExX1NDX0NPTFNUQVJUCQkJMHgwMgorI2RlZmluZSBNVDlNMTExX1NDX1dJTkRPV19IRUlHSFQJCTB4MDMKKyNkZWZpbmUgTVQ5TTExMV9TQ19XSU5ET1dfV0lEVEgJCQkweDA0CisjZGVmaW5lIE1UOU0xMTFfU0NfSEJMQU5LX0NPTlRFWFRfQgkJMHgwNQorI2RlZmluZSBNVDlNMTExX1NDX1ZCTEFOS19DT05URVhUX0IJCTB4MDYKKyNkZWZpbmUgTVQ5TTExMV9TQ19IQkxBTktfQ09OVEVYVF9BCQkweDA3CisjZGVmaW5lIE1UOU0xMTFfU0NfVkJMQU5LX0NPTlRFWFRfQQkJMHgwOAorI2RlZmluZSBNVDlNMTExX1NDX1NIVVRURVJfV0lEVEgJCTB4MDkKKyNkZWZpbmUgTVQ5TTExMV9TQ19ST1dfU1BFRUQJCQkweDBhCisKKyNkZWZpbmUgTVQ5TTExMV9TQ19FWFRSQV9ERUxBWQkJCTB4MGIKKyNkZWZpbmUgTVQ5TTExMV9TQ19TSFVUVEVSX0RFTEFZCQkweDBjCisjZGVmaW5lIE1UOU0xMTFfU0NfUkVTRVQJCQkweDBkCisjZGVmaW5lIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQgkJMHgyMAorI2RlZmluZSBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0EJCTB4MjEKKyNkZWZpbmUgTVQ5TTExMV9TQ19GTEFTSF9DT05UUk9MCQkweDIzCisjZGVmaW5lIE1UOU0xMTFfU0NfR1JFRU5fMV9HQUlOCQkJMHgyYgorI2RlZmluZSBNVDlNMTExX1NDX0JMVUVfR0FJTgkJCTB4MmMKKyNkZWZpbmUgTVQ5TTExMV9TQ19SRURfR0FJTgkJCTB4MmQKKyNkZWZpbmUgTVQ5TTExMV9TQ19HUkVFTl8yX0dBSU4JCQkweDJlCisjZGVmaW5lIE1UOU0xMTFfU0NfR0xPQkFMX0dBSU4JCQkweDJmCisKKyNkZWZpbmUgTVQ5TTExMV9STUJfTUlSUk9SX1JPV1MJCQkoMSA8PCAwKQorI2RlZmluZSBNVDlNMTExX1JNQl9NSVJST1JfQ09MUwkJCSgxIDw8IDEpCisKKyNkZWZpbmUgTVQ5TTExMV9DT05URVhUX0NPTlRST0wJCQkweGM4CisjZGVmaW5lIE1UOU0xMTFfUEFHRV9NQVAJCQkweGYwCisjZGVmaW5lIE1UOU0xMTFfQllURVdJU0VfQUREUkVTUwkJMHhmMQorCisjZGVmaW5lIE1UOU0xMTFfQ1BfT1BFUkFUSU5HX01PREVfQ1RMCQkweDA2CisjZGVmaW5lIE1UOU0xMTFfQ1BfTFVNQV9PRkZTRVQJCQkweDM0CisjZGVmaW5lIE1UOU0xMTFfQ1BfTFVNQV9DTElQCQkJMHgzNQorI2RlZmluZSBNVDlNMTExX0NQX09VVFBVVF9GT1JNQVRfQ1RMMl9DT05URVhUX0EgMHgzYQorI2RlZmluZSBNVDlNMTExX0NQX0xFTlNfQ09SUkVDVElPTl8xCQkweDNiCisjZGVmaW5lIE1UOU0xMTFfQ1BfREVGRUNUX0NPUlJfQ09OVEVYVF9BCTB4NGMKKyNkZWZpbmUgTVQ5TTExMV9DUF9ERUZFQ1RfQ09SUl9DT05URVhUX0IJMHg0ZAorI2RlZmluZSBNVDlNMTExX0NQX09VVFBVVF9GT1JNQVRfQ1RMMl9DT05URVhUX0IgMHg5YgorI2RlZmluZSBNVDlNMTExX0NQX0dMT0JBTF9DTEtfQ09OVFJPTAkJMHhiMworCisjZGVmaW5lIE1UOU0xMTFfQ0NfQVVUT19FWFBPU1VSRV9QQVJBTUVURVJfMTggICAweDY1CisjZGVmaW5lIE1UOU0xMTFfQ0NfQVdCX1BBUkFNRVRFUl83CQkweDI4CisKKyNkZWZpbmUgTVQ5TTExMV9TRU5TT1JfQ09SRQkJCTB4MDAKKyNkZWZpbmUgTVQ5TTExMV9DT0xPUlBJUEUJCQkweDAxCisjZGVmaW5lIE1UOU0xMTFfQ0FNRVJBX0NPTlRST0wJCQkweDAyCisKKyNkZWZpbmUgSU5JVElBTF9NQVhfR0FJTgkJCTY0CisjZGVmaW5lIERFRkFVTFRfR0FJTiAJCQkJMjgzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXJzICovCitleHRlcm4gaW50IGZvcmNlX3NlbnNvcjsKK2V4dGVybiBpbnQgZHVtcF9zZW5zb3I7CisKK2ludCBtdDltMTExX3Byb2JlKHN0cnVjdCBzZCAqc2QpOworaW50IG10OW0xMTFfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKK2ludCBtdDltMTExX3Bvd2VyX2Rvd24oc3RydWN0IHNkICpzZCk7CisKK2ludCBtdDltMTExX3JlYWRfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCQl1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7CisKK2ludCBtdDltMTExX3dyaXRlX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkJIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKTsKKwordm9pZCBtdDltMTExX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpOworCitpbnQgbXQ5bTExMV9zZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IG10OW0xMTFfZ2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgbXQ5bTExMV9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBtdDltMTExX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgbXQ5bTExMV9nZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IG10OW0xMTFfc2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworCitzdGF0aWMgc3RydWN0IG01NjAyX3NlbnNvciBtdDltMTExID0geworCS5uYW1lID0gIk1UOU0xMTEiLAorCisJLmkyY19zbGF2ZV9pZCA9IDB4YmEsCisKKwkucHJvYmUgPSBtdDltMTExX3Byb2JlLAorCS5pbml0ID0gbXQ5bTExMV9pbml0LAorCS5wb3dlcl9kb3duID0gbXQ5bTExMV9wb3dlcl9kb3duLAorCisJLnJlYWRfc2Vuc29yID0gbXQ5bTExMV9yZWFkX3NlbnNvciwKKwkud3JpdGVfc2Vuc29yID0gbXQ5bTExMV93cml0ZV9zZW5zb3IsCisKKwkubmN0cmxzID0gMywKKwkuY3RybHMgPSB7CisJeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfVkZMSVAsCisJCQkudHlwZSAgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgICAgICAgICAgID0gInZlcnRpY2FsIGZsaXAiLAorCQkJLm1pbmltdW0gICAgICAgID0gMCwKKwkJCS5tYXhpbXVtICAgICAgICA9IDEsCisJCQkuc3RlcCAgICAgICAgICAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMAorCQl9LAorCQkuc2V0ID0gbXQ5bTExMV9zZXRfdmZsaXAsCisJCS5nZXQgPSBtdDltMTExX2dldF92ZmxpcAorCX0sIHsKKwkJeworCQkJLmlkICAgICAgICAgICAgID0gVjRMMl9DSURfSEZMSVAsCisJCQkudHlwZSAgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgICAgICAgICAgID0gImhvcml6b250YWwgZmxpcCIsCisJCQkubWluaW11bSAgICAgICAgPSAwLAorCQkJLm1heGltdW0gICAgICAgID0gMSwKKwkJCS5zdGVwICAgICAgICAgICA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAgPSAwCisJCX0sCisJCS5zZXQgPSBtdDltMTExX3NldF9oZmxpcCwKKwkJLmdldCA9IG10OW0xMTFfZ2V0X2hmbGlwCisJfSwgeworCQl7CisJCQkuaWQgICAgICAgICAgICAgPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUgICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lICAgICAgICAgICA9ICJnYWluIiwKKwkJCS5taW5pbXVtICAgICAgICA9IDAsCisJCQkubWF4aW11bSAgICAgICAgPSAoSU5JVElBTF9NQVhfR0FJTiAtIDEpICogMiAqIDIgKiAyLAorCQkJLnN0ZXAgICAgICAgICAgID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IERFRkFVTFRfR0FJTiwKKwkJCS5mbGFncyAgICAgICAgICA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgorCQl9LAorCQkuc2V0ID0gbXQ5bTExMV9zZXRfZ2FpbiwKKwkJLmdldCA9IG10OW0xMTFfZ2V0X2dhaW4KKwl9CisJfSwKKworCS5ubW9kZXMgPSAxLAorCS5tb2RlcyA9IHsKKwl7CisJCU01NjAyX0RFRkFVTFRfRlJBTUVfV0lEVEgsCisJCU01NjAyX0RFRkFVTFRfRlJBTUVfSEVJR0hULAorCQlWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPQorCQkJTTU2MDJfREVGQVVMVF9GUkFNRV9XSURUSCAqIE01NjAyX0RFRkFVTFRfRlJBTUVfSEVJR0hULAorCQkuYnl0ZXNwZXJsaW5lID0gTTU2MDJfREVGQVVMVF9GUkFNRV9XSURUSCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxCisJfQorCX0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHByZWluaXRfbXQ5bTExMVtdWzRdID0KK3sKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0RJViwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX0NUUkwsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOSwgMHgwMH0sCisKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweGZmLCAweGY3fSwKKworCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA1LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDNlLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDNlLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0wsIDB4MDAsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDcsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDBiLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHgwMCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ0xLX0RJViwgMHgwYSwgMHgwMH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGluaXRfbXQ5bTExMVtdWzRdID0KK3sKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0RJViwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9DVFJMLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHhmZiwgMHhmZn0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHhmZiwgMHhmZn0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHhmZiwgMHhkZX0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHhmZiwgMHhmZn0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHhmZiwgMHhmN30sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMX0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4YjMsIDB4MDB9LAorCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9HTE9CQUxfQ0xLX0NPTlRST0wsIDB4ZmYsIDB4ZmZ9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDUsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDA0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4M2UsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4M2UsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHhmZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfTCwgMHhmZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MGIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ0xLX0RJViwgMHgwYSwgMHgwMH0sCisKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA1fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDI5fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA4fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAxfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX09QRVJBVElOR19NT0RFX0NUTCwgMHgwMCwgMHgxMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9MRU5TX0NPUlJFQ1RJT05fMSwgMHgwNCwgMHgyYX0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9ERUZFQ1RfQ09SUl9DT05URVhUX0EsIDB4MDAsIDB4MDF9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfREVGRUNUX0NPUlJfQ09OVEVYVF9CLCAweDAwLCAweDAxfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0xVTUFfT0ZGU0VULCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0xVTUFfQ0xJUCwgMHhmZiwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9PVVRQVVRfRk9STUFUX0NUTDJfQ09OVEVYVF9BLCAweDE0LCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX09VVFBVVF9GT1JNQVRfQ1RMMl9DT05URVhUX0IsIDB4MTQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHhjZCwgMHgwMH0sCisKKwl7U0VOU09SLCAweGNkLCAweDAwLCAweDBlfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4ZDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4ZDAsIDB4MDAsIDB4NDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDJ9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ0NfQVVUT19FWFBPU1VSRV9QQVJBTUVURVJfMTgsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgyOCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DQ19BV0JfUEFSQU1FVEVSXzcsIDB4ZWYsIDB4MDd9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgyOCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DQ19BV0JfUEFSQU1FVEVSXzcsIDB4ZWYsIDB4MDN9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgzMywgMHgwMH0sCisJe1NFTlNPUiwgMHgzMywgMHgwMywgMHg0OX0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDMzLCAweDAwfSwKKworCXtTRU5TT1IsIDB4MzMsIDB4MDMsIDB4NDl9LAorCXtTRU5TT1IsIDB4MzQsIDB4YzAsIDB4MTl9LAorCXtTRU5TT1IsIDB4M2YsIDB4MjAsIDB4MjB9LAorCXtTRU5TT1IsIDB4NDAsIDB4MjAsIDB4MjB9LAorCXtTRU5TT1IsIDB4NWEsIDB4YzAsIDB4MGF9LAorCXtTRU5TT1IsIDB4NzAsIDB4N2IsIDB4MGF9LAorCXtTRU5TT1IsIDB4NzEsIDB4ZmYsIDB4MDB9LAorCXtTRU5TT1IsIDB4NzIsIDB4MTksIDB4MGV9LAorCXtTRU5TT1IsIDB4NzMsIDB4MTgsIDB4MGZ9LAorCXtTRU5TT1IsIDB4NzQsIDB4NTcsIDB4MzJ9LAorCXtTRU5TT1IsIDB4NzUsIDB4NTYsIDB4MzR9LAorCXtTRU5TT1IsIDB4NzYsIDB4NzMsIDB4MzV9LAorCXtTRU5TT1IsIDB4NzcsIDB4MzAsIDB4MTJ9LAorCXtTRU5TT1IsIDB4NzgsIDB4NzksIDB4MDJ9LAorCXtTRU5TT1IsIDB4NzksIDB4NzUsIDB4MDZ9LAorCXtTRU5TT1IsIDB4N2EsIDB4NzcsIDB4MGF9LAorCXtTRU5TT1IsIDB4N2IsIDB4NzgsIDB4MDl9LAorCXtTRU5TT1IsIDB4N2MsIDB4N2QsIDB4MDZ9LAorCXtTRU5TT1IsIDB4N2QsIDB4MzEsIDB4MTB9LAorCXtTRU5TT1IsIDB4N2UsIDB4MDAsIDB4N2V9LAorCXtTRU5TT1IsIDB4ODAsIDB4NTksIDB4MDR9LAorCXtTRU5TT1IsIDB4ODEsIDB4NTksIDB4MDR9LAorCXtTRU5TT1IsIDB4ODIsIDB4NTcsIDB4MGF9LAorCXtTRU5TT1IsIDB4ODMsIDB4NTgsIDB4MGJ9LAorCXtTRU5TT1IsIDB4ODQsIDB4NDcsIDB4MGN9LAorCXtTRU5TT1IsIDB4ODUsIDB4NDgsIDB4MGV9LAorCXtTRU5TT1IsIDB4ODYsIDB4NWIsIDB4MDJ9LAorCXtTRU5TT1IsIDB4ODcsIDB4MDAsIDB4NWN9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ09OVEVYVF9DT05UUk9MLCAweDAwLCAweDA4fSwKKwl7U0VOU09SLCAweDYwLCAweDAwLCAweDgwfSwKKwl7U0VOU09SLCAweDYxLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDYyLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDYzLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDY0LCAweDAwLCAweDAwfSwKKworCXtTRU5TT1IsIE1UOU0xMTFfU0NfUk9XU1RBUlQsIDB4MDAsIDB4MGR9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfQ09MU1RBUlQsIDB4MDAsIDB4MTh9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfV0lORE9XX0hFSUdIVCwgMHgwNCwgMHgwNH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19XSU5ET1dfV0lEVEgsIDB4MDUsIDB4MDh9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfSEJMQU5LX0NPTlRFWFRfQiwgMHgwMSwgMHgzOH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19WQkxBTktfQ09OVEVYVF9CLCAweDAwLCAweDExfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX0hCTEFOS19DT05URVhUX0EsIDB4MDEsIDB4Mzh9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfVkJMQU5LX0NPTlRFWFRfQSwgMHgwMCwgMHgxMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9CLCAweDAxLCAweDAzfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0EsIDB4MDEsIDB4MDN9LAorCXtTRU5TT1IsIDB4MzAsIDB4MDQsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0gsIDB4ODIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDUsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDcsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YTAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfU0hVVFRFUl9XSURUSCwgMHgwMSwgMHhmNH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19HTE9CQUxfR0FJTiwgMHgwMCwgMHhlYX0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0xJTkVfT0ZfRlJBTUVfSCwgMHg4MSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfUElYX09GX0xJTkVfSCwgMHg4MiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwNSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwNywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA5fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDI5fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA4fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDBjfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA0fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAxfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4YjMsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfR0xPQkFMX0NMS19DT05UUk9MLCAweDAwLCAweDAzfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgzZSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgzZSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9MLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA3LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwYiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DTEtfRElWLCAweDBhLCAweDAwfSwKKworCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MDV9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4Mjl9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MDh9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDF9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfT1BFUkFUSU5HX01PREVfQ1RMLCAweDAwLCAweDEwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0xFTlNfQ09SUkVDVElPTl8xLCAweDA0LCAweDJhfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0RFRkVDVF9DT1JSX0NPTlRFWFRfQSwgMHgwMCwgMHgwMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9ERUZFQ1RfQ09SUl9DT05URVhUX0IsIDB4MDAsIDB4MDF9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfTFVNQV9PRkZTRVQsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfTFVNQV9DTElQLCAweGZmLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX09VVFBVVF9GT1JNQVRfQ1RMMl9DT05URVhUX0EsIDB4MTQsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfT1VUUFVUX0ZPUk1BVF9DVEwyX0NPTlRFWFRfQiwgMHgxNCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4Y2QsIDB4MDB9LAorCXtTRU5TT1IsIDB4Y2QsIDB4MDAsIDB4MGV9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHhkMCwgMHgwMH0sCisJe1NFTlNPUiwgMHhkMCwgMHgwMCwgMHg0MH0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMn0sCisJe1NFTlNPUiwgTVQ5TTExMV9DQ19BVVRPX0VYUE9TVVJFX1BBUkFNRVRFUl8xOCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDI4LCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NDX0FXQl9QQVJBTUVURVJfNywgMHhlZiwgMHgwN30sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDI4LCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NDX0FXQl9QQVJBTUVURVJfNywgMHhlZiwgMHgwM30sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDMzLCAweDAwfSwKKwl7U0VOU09SLCAweDMzLCAweDAzLCAweDQ5fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MzMsIDB4MDB9LAorCisJe1NFTlNPUiwgMHgzMywgMHgwMywgMHg0OX0sCisJe1NFTlNPUiwgMHgzNCwgMHhjMCwgMHgxOX0sCisJe1NFTlNPUiwgMHgzZiwgMHgyMCwgMHgyMH0sCisJe1NFTlNPUiwgMHg0MCwgMHgyMCwgMHgyMH0sCisJe1NFTlNPUiwgMHg1YSwgMHhjMCwgMHgwYX0sCisJe1NFTlNPUiwgMHg3MCwgMHg3YiwgMHgwYX0sCisJe1NFTlNPUiwgMHg3MSwgMHhmZiwgMHgwMH0sCisJe1NFTlNPUiwgMHg3MiwgMHgxOSwgMHgwZX0sCisJe1NFTlNPUiwgMHg3MywgMHgxOCwgMHgwZn0sCisJe1NFTlNPUiwgMHg3NCwgMHg1NywgMHgzMn0sCisJe1NFTlNPUiwgMHg3NSwgMHg1NiwgMHgzNH0sCisJe1NFTlNPUiwgMHg3NiwgMHg3MywgMHgzNX0sCisJe1NFTlNPUiwgMHg3NywgMHgzMCwgMHgxMn0sCisJe1NFTlNPUiwgMHg3OCwgMHg3OSwgMHgwMn0sCisJe1NFTlNPUiwgMHg3OSwgMHg3NSwgMHgwNn0sCisJe1NFTlNPUiwgMHg3YSwgMHg3NywgMHgwYX0sCisJe1NFTlNPUiwgMHg3YiwgMHg3OCwgMHgwOX0sCisJe1NFTlNPUiwgMHg3YywgMHg3ZCwgMHgwNn0sCisJe1NFTlNPUiwgMHg3ZCwgMHgzMSwgMHgxMH0sCisJe1NFTlNPUiwgMHg3ZSwgMHgwMCwgMHg3ZX0sCisJe1NFTlNPUiwgMHg4MCwgMHg1OSwgMHgwNH0sCisJe1NFTlNPUiwgMHg4MSwgMHg1OSwgMHgwNH0sCisJe1NFTlNPUiwgMHg4MiwgMHg1NywgMHgwYX0sCisJe1NFTlNPUiwgMHg4MywgMHg1OCwgMHgwYn0sCisJe1NFTlNPUiwgMHg4NCwgMHg0NywgMHgwY30sCisJe1NFTlNPUiwgMHg4NSwgMHg0OCwgMHgwZX0sCisJe1NFTlNPUiwgMHg4NiwgMHg1YiwgMHgwMn0sCisJe1NFTlNPUiwgMHg4NywgMHgwMCwgMHg1Y30sCisJe1NFTlNPUiwgTVQ5TTExMV9DT05URVhUX0NPTlRST0wsIDB4MDAsIDB4MDh9LAorCXtTRU5TT1IsIDB4NjAsIDB4MDAsIDB4ODB9LAorCXtTRU5TT1IsIDB4NjEsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4NjIsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4NjMsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4NjQsIDB4MDAsIDB4MDB9LAorCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19ST1dTVEFSVCwgMHgwMCwgMHgwZH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19DT0xTVEFSVCwgMHgwMCwgMHgxOH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19XSU5ET1dfSEVJR0hULCAweDA0LCAweDA0fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1dJTkRPV19XSURUSCwgMHgwNSwgMHgwOH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19IQkxBTktfQ09OVEVYVF9CLCAweDAxLCAweDM4fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1ZCTEFOS19DT05URVhUX0IsIDB4MDAsIDB4MTF9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfSEJMQU5LX0NPTlRFWFRfQSwgMHgwMSwgMHgzOH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19WQkxBTktfQ09OVEVYVF9BLCAweDAwLCAweDExfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsIDB4MDEsIDB4MDN9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQSwgMHgwMSwgMHgwM30sCisJe1NFTlNPUiwgMHgzMCwgMHgwNCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0xJTkVfT0ZfRlJBTUVfSCwgMHg4MSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfUElYX09GX0xJTkVfSCwgMHg4MiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwNSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwNywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhhMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19TSFVUVEVSX1dJRFRILCAweDAxLCAweGY0fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX0dMT0JBTF9HQUlOLCAweDAwLCAweGVhfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKworCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MDl9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4Mjl9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MDh9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MGN9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MDR9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDF9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweGIzLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0dMT0JBTF9DTEtfQ09OVFJPTCwgMHgwMCwgMHgwM30sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDUsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDA0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4M2UsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4M2UsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHhmZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfTCwgMHhmZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MGIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ0xLX0RJViwgMHgwYSwgMHgwMH0sCisKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA1fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDI5fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA4fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAxfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX09QRVJBVElOR19NT0RFX0NUTCwgMHgwMCwgMHgxMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9MRU5TX0NPUlJFQ1RJT05fMSwgMHgwNCwgMHgyYX0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9ERUZFQ1RfQ09SUl9DT05URVhUX0EsIDB4MDAsIDB4MDF9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfREVGRUNUX0NPUlJfQ09OVEVYVF9CLCAweDAwLCAweDAxfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0xVTUFfT0ZGU0VULCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0xVTUFfQ0xJUCwgMHhmZiwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9PVVRQVVRfRk9STUFUX0NUTDJfQ09OVEVYVF9BLCAweDE0LCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX09VVFBVVF9GT1JNQVRfQ1RMMl9DT05URVhUX0IsIDB4MTQsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweGNkLCAweDAwfSwKKwl7U0VOU09SLCAweGNkLCAweDAwLCAweDBlfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4ZDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4ZDAsIDB4MDAsIDB4NDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDJ9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ0NfQVVUT19FWFBPU1VSRV9QQVJBTUVURVJfMTgsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgyOCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DQ19BV0JfUEFSQU1FVEVSXzcsIDB4ZWYsIDB4MDd9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgyOCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DQ19BV0JfUEFSQU1FVEVSXzcsIDB4ZWYsIDB4MDN9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgzMywgMHgwMH0sCisJe1NFTlNPUiwgMHgzMywgMHgwMywgMHg0OX0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDMzLCAweDAwfSwKKworCXtTRU5TT1IsIDB4MzMsIDB4MDMsIDB4NDl9LAorCXtTRU5TT1IsIDB4MzQsIDB4YzAsIDB4MTl9LAorCXtTRU5TT1IsIDB4M2YsIDB4MjAsIDB4MjB9LAorCXtTRU5TT1IsIDB4NDAsIDB4MjAsIDB4MjB9LAorCXtTRU5TT1IsIDB4NWEsIDB4YzAsIDB4MGF9LAorCXtTRU5TT1IsIDB4NzAsIDB4N2IsIDB4MGF9LAorCXtTRU5TT1IsIDB4NzEsIDB4ZmYsIDB4MDB9LAorCXtTRU5TT1IsIDB4NzIsIDB4MTksIDB4MGV9LAorCXtTRU5TT1IsIDB4NzMsIDB4MTgsIDB4MGZ9LAorCXtTRU5TT1IsIDB4NzQsIDB4NTcsIDB4MzJ9LAorCXtTRU5TT1IsIDB4NzUsIDB4NTYsIDB4MzR9LAorCXtTRU5TT1IsIDB4NzYsIDB4NzMsIDB4MzV9LAorCXtTRU5TT1IsIDB4NzcsIDB4MzAsIDB4MTJ9LAorCXtTRU5TT1IsIDB4NzgsIDB4NzksIDB4MDJ9LAorCXtTRU5TT1IsIDB4NzksIDB4NzUsIDB4MDZ9LAorCXtTRU5TT1IsIDB4N2EsIDB4NzcsIDB4MGF9LAorCXtTRU5TT1IsIDB4N2IsIDB4NzgsIDB4MDl9LAorCXtTRU5TT1IsIDB4N2MsIDB4N2QsIDB4MDZ9LAorCXtTRU5TT1IsIDB4N2QsIDB4MzEsIDB4MTB9LAorCXtTRU5TT1IsIDB4N2UsIDB4MDAsIDB4N2V9LAorCXtTRU5TT1IsIDB4ODAsIDB4NTksIDB4MDR9LAorCXtTRU5TT1IsIDB4ODEsIDB4NTksIDB4MDR9LAorCXtTRU5TT1IsIDB4ODIsIDB4NTcsIDB4MGF9LAorCXtTRU5TT1IsIDB4ODMsIDB4NTgsIDB4MGJ9LAorCXtTRU5TT1IsIDB4ODQsIDB4NDcsIDB4MGN9LAorCXtTRU5TT1IsIDB4ODUsIDB4NDgsIDB4MGV9LAorCXtTRU5TT1IsIDB4ODYsIDB4NWIsIDB4MDJ9LAorCXtTRU5TT1IsIDB4ODcsIDB4MDAsIDB4NWN9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ09OVEVYVF9DT05UUk9MLCAweDAwLCAweDA4fSwKKwl7U0VOU09SLCAweDYwLCAweDAwLCAweDgwfSwKKwl7U0VOU09SLCAweDYxLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDYyLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDYzLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDY0LCAweDAwLCAweDAwfSwKKworCXtTRU5TT1IsIE1UOU0xMTFfU0NfUk9XU1RBUlQsIDB4MDAsIDB4MGR9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfQ09MU1RBUlQsIDB4MDAsIDB4MTh9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfV0lORE9XX0hFSUdIVCwgMHgwNCwgMHgwNH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19XSU5ET1dfV0lEVEgsIDB4MDUsIDB4MDh9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfSEJMQU5LX0NPTlRFWFRfQiwgMHgwMSwgMHgzOH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19WQkxBTktfQ09OVEVYVF9CLCAweDAwLCAweDExfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX0hCTEFOS19DT05URVhUX0EsIDB4MDEsIDB4Mzh9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfVkJMQU5LX0NPTlRFWFRfQSwgMHgwMCwgMHgxMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9CLCAweDAxLCAweDAzfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0EsIDB4MDEsIDB4MDN9LAorCXtTRU5TT1IsIDB4MzAsIDB4MDQsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0gsIDB4ODIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDUsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDcsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YTAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfU0hVVFRFUl9XSURUSCwgMHgwMSwgMHhmNH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19HTE9CQUxfR0FJTiwgMHgwMCwgMHhlYX0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA5fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgwZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4Mjl9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwOH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDBjfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgwZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MDR9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDF9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweGIzLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9HTE9CQUxfQ0xLX0NPTlRST0wsIDB4MDAsIDB4MDN9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA1LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDNlLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDNlLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDcsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDBiLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NMS19ESVYsIDB4MGEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwNX0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDI5fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgwZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwOH0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9PUEVSQVRJTkdfTU9ERV9DVEwsIDB4MDAsIDB4MTB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfTEVOU19DT1JSRUNUSU9OXzEsIDB4MDQsIDB4MmF9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfREVGRUNUX0NPUlJfQ09OVEVYVF9BLCAweDAwLCAweDAxfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0RFRkVDVF9DT1JSX0NPTlRFWFRfQiwgMHgwMCwgMHgwMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9MVU1BX09GRlNFVCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9MVU1BX0NMSVAsIDB4ZmYsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfT1VUUFVUX0ZPUk1BVF9DVEwyX0NPTlRFWFRfQSwgMHgxNCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9PVVRQVVRfRk9STUFUX0NUTDJfQ09OVEVYVF9CLCAweDE0LCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweGNkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgMHhjZCwgMHgwMCwgMHgwZX0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4ZDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCAweGQwLCAweDAwLCAweDQwfSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAyfSwKKwl7U0VOU09SLCBNVDlNMTExX0NDX0FVVE9fRVhQT1NVUkVfUEFSQU1FVEVSXzE4LCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgyOCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ0NfQVdCX1BBUkFNRVRFUl83LCAweGVmLCAweDA3fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgyOCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ0NfQVdCX1BBUkFNRVRFUl83LCAweGVmLCAweDAzfSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgzMywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIDB4MzMsIDB4MDMsIDB4NDl9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDMzLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisKKwl7U0VOU09SLCAweDMzLCAweDAzLCAweDQ5fSwKKwl7U0VOU09SLCAweDM0LCAweGMwLCAweDE5fSwKKwl7U0VOU09SLCAweDNmLCAweDIwLCAweDIwfSwKKwl7U0VOU09SLCAweDQwLCAweDIwLCAweDIwfSwKKwl7U0VOU09SLCAweDVhLCAweGMwLCAweDBhfSwKKwl7U0VOU09SLCAweDcwLCAweDdiLCAweDBhfSwKKwl7U0VOU09SLCAweDcxLCAweGZmLCAweDAwfSwKKwl7U0VOU09SLCAweDcyLCAweDE5LCAweDBlfSwKKwl7U0VOU09SLCAweDczLCAweDE4LCAweDBmfSwKKwl7U0VOU09SLCAweDc0LCAweDU3LCAweDMyfSwKKwl7U0VOU09SLCAweDc1LCAweDU2LCAweDM0fSwKKwl7U0VOU09SLCAweDc2LCAweDczLCAweDM1fSwKKwl7U0VOU09SLCAweDc3LCAweDMwLCAweDEyfSwKKwl7U0VOU09SLCAweDc4LCAweDc5LCAweDAyfSwKKwl7U0VOU09SLCAweDc5LCAweDc1LCAweDA2fSwKKwl7U0VOU09SLCAweDdhLCAweDc3LCAweDBhfSwKKwl7U0VOU09SLCAweDdiLCAweDc4LCAweDA5fSwKKwl7U0VOU09SLCAweDdjLCAweDdkLCAweDA2fSwKKwl7U0VOU09SLCAweDdkLCAweDMxLCAweDEwfSwKKwl7U0VOU09SLCAweDdlLCAweDAwLCAweDdlfSwKKwl7U0VOU09SLCAweDgwLCAweDU5LCAweDA0fSwKKwl7U0VOU09SLCAweDgxLCAweDU5LCAweDA0fSwKKwl7U0VOU09SLCAweDgyLCAweDU3LCAweDBhfSwKKwl7U0VOU09SLCAweDgzLCAweDU4LCAweDBifSwKKwl7U0VOU09SLCAweDg0LCAweDQ3LCAweDBjfSwKKwl7U0VOU09SLCAweDg1LCAweDQ4LCAweDBlfSwKKwl7U0VOU09SLCAweDg2LCAweDViLCAweDAyfSwKKwl7U0VOU09SLCAweDg3LCAweDAwLCAweDVjfSwKKwl7U0VOU09SLCBNVDlNMTExX0NPTlRFWFRfQ09OVFJPTCwgMHgwMCwgMHgwOH0sCisJe1NFTlNPUiwgMHg2MCwgMHgwMCwgMHg4MH0sCisJe1NFTlNPUiwgMHg2MSwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg2MiwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg2MywgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg2NCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19ST1dTVEFSVCwgMHgwMCwgMHgwZH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19DT0xTVEFSVCwgMHgwMCwgMHgxMn0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19XSU5ET1dfSEVJR0hULCAweDA0LCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1dJTkRPV19XSURUSCwgMHgwNSwgMHgxMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19IQkxBTktfQ09OVEVYVF9CLCAweDAxLCAweDYwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1ZCTEFOS19DT05URVhUX0IsIDB4MDAsIDB4MTF9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfSEJMQU5LX0NPTlRFWFRfQSwgMHgwMSwgMHg2MH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19WQkxBTktfQ09OVEVYVF9BLCAweDAwLCAweDExfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsIDB4MDEsIDB4MGZ9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQSwgMHgwMSwgMHgwZn0sCisJe1NFTlNPUiwgMHgzMCwgMHgwNCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0xJTkVfT0ZfRlJBTUVfSCwgMHg4MSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfUElYX09GX0xJTkVfSCwgMHg4MiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHhlMywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHg4NywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1NIVVRURVJfV0lEVEgsIDB4MDEsIDB4OTB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfR0xPQkFMX0dBSU4sIDB4MDAsIDB4ZTZ9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwOX0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDI5fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgwZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MDh9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwY30sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA0fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAxfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHhiMywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfR0xPQkFMX0NMS19DT05UUk9MLCAweDAwLCAweDAzfSwKKworCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA1LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDNlLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDNlLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDcsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDBiLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NMS19ESVYsIDB4MGEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwNX0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDI5fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgwZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MDh9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDF9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfT1BFUkFUSU5HX01PREVfQ1RMLCAweDAwLCAweDEwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0xFTlNfQ09SUkVDVElPTl8xLCAweDA0LCAweDJhfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0RFRkVDVF9DT1JSX0NPTlRFWFRfQSwgMHgwMCwgMHgwMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9ERUZFQ1RfQ09SUl9DT05URVhUX0IsIDB4MDAsIDB4MDF9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfTFVNQV9PRkZTRVQsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfTFVNQV9DTElQLCAweGZmLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX09VVFBVVF9GT1JNQVRfQ1RMMl9DT05URVhUX0EsIDB4MTQsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfT1VUUFVUX0ZPUk1BVF9DVEwyX0NPTlRFWFRfQiwgMHgxNCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHhjZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIDB4Y2QsIDB4MDAsIDB4MGV9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweGQwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgMHhkMCwgMHgwMCwgMHg0MH0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMn0sCisJe1NFTlNPUiwgTVQ5TTExMV9DQ19BVVRPX0VYUE9TVVJFX1BBUkFNRVRFUl8xOCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MjgsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NDX0FXQl9QQVJBTUVURVJfNywgMHhlZiwgMHgwN30sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MjgsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NDX0FXQl9QQVJBTUVURVJfNywgMHhlZiwgMHgwM30sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgzMywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIDB4MzMsIDB4MDMsIDB4NDl9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDMzLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisKKwl7U0VOU09SLCAweDMzLCAweDAzLCAweDQ5fSwKKwl7U0VOU09SLCAweDM0LCAweGMwLCAweDE5fSwKKwl7U0VOU09SLCAweDNmLCAweDIwLCAweDIwfSwKKwl7U0VOU09SLCAweDQwLCAweDIwLCAweDIwfSwKKwl7U0VOU09SLCAweDVhLCAweGMwLCAweDBhfSwKKwl7U0VOU09SLCAweDcwLCAweDdiLCAweDBhfSwKKwl7U0VOU09SLCAweDcxLCAweGZmLCAweDAwfSwKKwl7U0VOU09SLCAweDcyLCAweDE5LCAweDBlfSwKKwl7U0VOU09SLCAweDczLCAweDE4LCAweDBmfSwKKwl7U0VOU09SLCAweDc0LCAweDU3LCAweDMyfSwKKwl7U0VOU09SLCAweDc1LCAweDU2LCAweDM0fSwKKwl7U0VOU09SLCAweDc2LCAweDczLCAweDM1fSwKKwl7U0VOU09SLCAweDc3LCAweDMwLCAweDEyfSwKKwl7U0VOU09SLCAweDc4LCAweDc5LCAweDAyfSwKKwl7U0VOU09SLCAweDc5LCAweDc1LCAweDA2fSwKKwl7U0VOU09SLCAweDdhLCAweDc3LCAweDBhfSwKKwl7U0VOU09SLCAweDdiLCAweDc4LCAweDA5fSwKKwl7U0VOU09SLCAweDdjLCAweDdkLCAweDA2fSwKKwl7U0VOU09SLCAweDdkLCAweDMxLCAweDEwfSwKKwl7U0VOU09SLCAweDdlLCAweDAwLCAweDdlfSwKKwl7U0VOU09SLCAweDgwLCAweDU5LCAweDA0fSwKKwl7U0VOU09SLCAweDgxLCAweDU5LCAweDA0fSwKKwl7U0VOU09SLCAweDgyLCAweDU3LCAweDBhfSwKKwl7U0VOU09SLCAweDgzLCAweDU4LCAweDBifSwKKwl7U0VOU09SLCAweDg0LCAweDQ3LCAweDBjfSwKKwl7U0VOU09SLCAweDg1LCAweDQ4LCAweDBlfSwKKwl7U0VOU09SLCAweDg2LCAweDViLCAweDAyfSwKKwl7U0VOU09SLCAweDg3LCAweDAwLCAweDVjfSwKKwl7U0VOU09SLCBNVDlNMTExX0NPTlRFWFRfQ09OVFJPTCwgMHgwMCwgMHgwOH0sCisJe1NFTlNPUiwgMHg2MCwgMHgwMCwgMHg4MH0sCisJe1NFTlNPUiwgMHg2MSwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg2MiwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg2MywgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg2NCwgMHgwMCwgMHgwMH0sCisKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JPV1NUQVJULCAweDAwLCAweDBkfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX0NPTFNUQVJULCAweDAwLCAweDEyfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1dJTkRPV19IRUlHSFQsIDB4MDQsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfV0lORE9XX1dJRFRILCAweDA1LCAweDEwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX0hCTEFOS19DT05URVhUX0IsIDB4MDEsIDB4NjB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfVkJMQU5LX0NPTlRFWFRfQiwgMHgwMCwgMHgxMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19IQkxBTktfQ09OVEVYVF9BLCAweDAxLCAweDYwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1ZCTEFOS19DT05URVhUX0EsIDB4MDAsIDB4MTF9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwgMHgwMSwgMHgwZn0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9BLCAweDAxLCAweDBmfSwKKwl7U0VOU09SLCAweDMwLCAweDA0LCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTElORV9PRl9GUkFNRV9ILCAweDgxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9QSVhfT0ZfTElORV9ILCAweDgyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweGUwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDdmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKworCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCS8qIFNldCBudW1iZXIgb2YgYmxhbmsgcm93cyBjaG9zZW4gdG8gNDAwICovCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19TSFVUVEVSX1dJRFRILCAweDAxLCAweDkwfSwKKwkvKiBTZXQgdGhlIGdsb2JhbCBnYWluIHRvIDI4MyAob2YgNTEyKSAqLworCXtTRU5TT1IsIE1UOU0xMTFfU0NfR0xPQkFMX0dBSU4sIDB4MDMsIDB4NjN9Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzN2M3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCkBAIC0wLDAgKzEsNTQ2IEBACisvKgorICogRHJpdmVyIGZvciB0aGUgb3Y5NjUwIHNlbnNvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgorICoKKyAqIFBvcnRpb25zIG9mIGNvZGUgdG8gVVNCIGludGVyZmFjZSBhbmQgQUxpIGRyaXZlciBzb2Z0d2FyZSwKKyAqIENvcHlyaWdodCAoYykgMjAwNiBXaWxsZW0gRHVpbmtlcgorICogdjRsMiBpbnRlcmZhY2UgbW9kZWxlZCBhZnRlciB0aGUgVjRMMiBkcml2ZXIKKyAqIGZvciBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAibTU2MDJfb3Y5NjUwLmgiCisKK2ludCBvdjk2NTBfcmVhZF9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJICAgICAgdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pCit7CisJaW50IGVyciwgaTsKKworCS8qIFRoZSBvdjk2NTAgcmVnaXN0ZXJzIGhhdmUgYSBtYXggZGVwdGggb2Ygb25lIGJ5dGUgKi8KKwlpZiAobGVuID4gMSB8fCAhbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRvIHsKKwkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19TVEFUVVMsIGkyY19kYXRhKTsKKwl9IHdoaWxlICgoKmkyY19kYXRhICYgSTJDX0JVU1kpICYmICFlcnIpOworCisJbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsCisJCQkgICBvdjk2NTAuaTJjX3NsYXZlX2lkKTsKKwltNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgYWRkcmVzcyk7CisJbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxMCArIGxlbik7CisJbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgwOCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19EQVRBLCAmKGkyY19kYXRhW2ldKSk7CisKKwkJUERFQlVHKERfQ09ORiwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKKwkJCQkiMHgleCBjb250YWluaW5nIDB4JXggIiwgYWRkcmVzcywgKmkyY19kYXRhKTsKKwl9CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfd3JpdGVfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCQl1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbikKK3sKKwlpbnQgZXJyLCBpOworCXU4ICpwOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2QtPmdzcGNhX2Rldi5kZXY7CisJX191OCAqYnVmID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmOworCisJLyogVGhlIG92OTY1MCBvbmx5IHN1cHBvcnRzIG9uZSBieXRlIHdyaXRlcyAqLworCWlmIChsZW4gPiAxIHx8ICFsZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KGJ1Ziwgc2Vuc29yX3VyYl9za2VsZXRvbiwKKwkgICAgICAgc2l6ZW9mKHNlbnNvcl91cmJfc2tlbGV0b24pKTsKKworCWJ1ZlsxMV0gPSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQ7CisJYnVmWzE1XSA9IGFkZHJlc3M7CisKKwkvKiBTcGVjaWFsIGNhc2UgbGFyZ2VyIHNlbnNvciB3cml0ZXMgKi8KKwlwID0gYnVmICsgMTY7CisKKwkvKiBDb3B5IGEgZm91ciBieXRlIHdyaXRlIHNlcXVlbmNlIGZvciBlYWNoIGJ5dGUgdG8gYmUgd3JpdHRlbiB0byAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDE2LCA0KTsKKwkJcFszXSA9IGkyY19kYXRhW2ldOworCQlwICs9IDQ7CisJCVBERUJVRyhEX0NPTkYsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCisJCSAgICAgICBhZGRyZXNzLCBpMmNfZGF0YVtpXSk7CisJfQorCisJLyogQ29weSB0aGUgdGFpbGVyICovCisJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAyMCwgNCk7CisKKwkvKiBTZXQgdGhlIHRvdGFsIGxlbmd0aCAqLworCXBbM10gPSAweDEwICsgbGVuOworCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDQsIDB4NDAsIDB4MTksCisJCQkgICAgICAweDAwMDAsIGJ1ZiwKKwkJCSAgICAgIDIwICsgbGVuICogNCwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX3Byb2JlKHN0cnVjdCBzZCAqc2QpCit7CisJdTggcHJvZF9pZCA9IDAsIHZlcl9pZCA9IDAsIGk7CisKKwlpZiAoZm9yY2Vfc2Vuc29yKSB7CisJCWlmIChmb3JjZV9zZW5zb3IgPT0gT1Y5NjUwX1NFTlNPUikgeworCQkJaW5mbygiRm9yY2luZyBhbiAlcyBzZW5zb3IiLCBvdjk2NTAubmFtZSk7CisJCQlnb3RvIHNlbnNvcl9mb3VuZDsKKwkJfQorCQkvKiBJZiB3ZSB3YW50IHRvIGZvcmNlIGFub3RoZXIgc2Vuc29yLAorCQkgICBkb24ndCB0cnkgdG8gcHJvYmUgdGhpcyBvbmUgKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaW5mbygiUHJvYmluZyBmb3IgYW4gb3Y5NjUwIHNlbnNvciIpOworCisJLyogUnVuIHRoZSBwcmUtaW5pdCB0byBhY3R1YWxseSBwcm9iZSB0aGUgdW5pdCAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWluaXRfb3Y5NjUwKTsgaSsrKSB7CisJCXU4IGRhdGEgPSBwcmVpbml0X292OTY1MFtpXVsyXTsKKwkJaWYgKHByZWluaXRfb3Y5NjUwW2ldWzBdID09IFNFTlNPUikKKwkJCW92OTY1MF93cml0ZV9zZW5zb3Ioc2QsCisJCQkJCSAgICBwcmVpbml0X292OTY1MFtpXVsxXSwgJmRhdGEsIDEpOworCQllbHNlCisJCQltNTYwMl93cml0ZV9icmlkZ2Uoc2QsIHByZWluaXRfb3Y5NjUwW2ldWzFdLCBkYXRhKTsKKwl9CisKKwlpZiAob3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfUElELCAmcHJvZF9pZCwgMSkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX1ZFUiwgJnZlcl9pZCwgMSkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKChwcm9kX2lkID09IDB4OTYpICYmICh2ZXJfaWQgPT0gMHg1MikpIHsKKwkJaW5mbygiRGV0ZWN0ZWQgYW4gb3Y5NjUwIHNlbnNvciIpOworCQlnb3RvIHNlbnNvcl9mb3VuZDsKKwl9CisKKwlyZXR1cm4gLUVOT0RFVjsKKworc2Vuc29yX2ZvdW5kOgorCXNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlID0gb3Y5NjUwLm1vZGVzOworCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IG92OTY1MC5ubW9kZXM7CisJc2QtPmRlc2MtPmN0cmxzID0gb3Y5NjUwLmN0cmxzOworCXNkLT5kZXNjLT5uY3RybHMgPSBvdjk2NTAubmN0cmxzOworCXJldHVybiAwOworfQorCitpbnQgb3Y5NjUwX2luaXQoc3RydWN0IHNkICpzZCkKK3sKKwlpbnQgaSwgZXJyID0gMDsKKwl1OCBkYXRhOworCisJaWYgKGR1bXBfc2Vuc29yKQorCQlvdjk2NTBfZHVtcF9yZWdpc3RlcnMoc2QpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdF9vdjk2NTApICYmICFlcnI7IGkrKykgeworCQlkYXRhID0gaW5pdF9vdjk2NTBbaV1bMl07CisJCWlmIChpbml0X292OTY1MFtpXVswXSA9PSBTRU5TT1IpCisJCQllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBpbml0X292OTY1MFtpXVsxXSwKKwkJCQkJCSAgJmRhdGEsIDEpOworCQllbHNlCisJCQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIGluaXRfb3Y5NjUwW2ldWzFdLCBkYXRhKTsKKwl9CisKKwlpZiAoIWVyciAmJiBkbWlfY2hlY2tfc3lzdGVtKG92OTY1MF9mbGlwX2RtaV90YWJsZSkpIHsKKwkJaW5mbygidmZsaXAgcXVpcmsgYWN0aXZlIik7CisJCWRhdGEgPSAweDMwOworCQllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfTVZGUCwgJmRhdGEsIDEpOworCX0KKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX3Bvd2VyX2Rvd24oc3RydWN0IHNkICpzZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwb3dlcl9kb3duX292OTY1MCk7IGkrKykgeworCQl1OCBkYXRhID0gcG93ZXJfZG93bl9vdjk2NTBbaV1bMl07CisJCWlmIChwb3dlcl9kb3duX292OTY1MFtpXVswXSA9PSBTRU5TT1IpCisJCQlvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLAorCQkJCQkgICAgcG93ZXJfZG93bl9vdjk2NTBbaV1bMV0sICZkYXRhLCAxKTsKKwkJZWxzZQorCQkJbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBwb3dlcl9kb3duX292OTY1MFtpXVsxXSwgZGF0YSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBvdjk2NTBfZ2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggaTJjX2RhdGE7CisJaW50IGVycjsKKworCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTEsICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCSp2YWwgPSBpMmNfZGF0YSAmIDB4MDM7CisKKwllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9BRUNILCAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKwkqdmFsIHw9IChpMmNfZGF0YSA8PCAyKTsKKworCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0FFQ0hNLCAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKwkqdmFsIHw9IChpMmNfZGF0YSAmIDB4M2YpIDw8IDEwOworCisJUERFQlVHKERfVjRMMiwgIlJlYWQgZXhwb3N1cmUgJWQiLCAqdmFsKTsKK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG92OTY1MF9zZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGV4cG9zdXJlIHRvICVkIiwKKwkgICAgICAgdmFsICYgMHhmZmZmKTsKKworCS8qIFRoZSA2IE1TQnMgKi8KKwlpMmNfZGF0YSA9ICh2YWwgPj4gMTApICYgMHgzZjsKKwllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfQUVDSE0sCisJCQkJICAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIFRoZSA4IG1pZGRsZSBiaXRzICovCisJaTJjX2RhdGEgPSAodmFsID4+IDIpICYgMHhmZjsKKwllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfQUVDSCwKKwkJCQkgICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJLyogVGhlIDIgTFNCcyAqLworCWkyY19kYXRhID0gdmFsICYgMHgwMzsKKwllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfQ09NMSwgJmkyY19kYXRhLCAxKTsKKworb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCW92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX1ZSRUYsICZpMmNfZGF0YSwgMSk7CisJKnZhbCA9IChpMmNfZGF0YSAmIDB4MDMpIDw8IDg7CisKKwllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9HQUlOLCAmaTJjX2RhdGEsIDEpOworCSp2YWwgfD0gaTJjX2RhdGE7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogVGhlIDIgTVNCICovCisJLyogUmVhZCB0aGUgT1Y5NjUwX1ZSRUYgcmVnaXN0ZXIgZmlyc3QgdG8gYXZvaWQKKwkgICBjb3JydXB0aW5nIHRoZSBWUkVGIGhpZ2ggYW5kIGxvdyBiaXRzICovCisJb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfVlJFRiwgJmkyY19kYXRhLCAxKTsKKwkvKiBNYXNrIGF3YXkgYWxsIHVuaW50ZXJlc3RpbmcgYml0cyAqLworCWkyY19kYXRhID0gKCh2YWwgJiAweDAzMDApID4+IDIpIHwKKwkJCShpMmNfZGF0YSAmIDB4M0YpOworCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9WUkVGLCAmaTJjX2RhdGEsIDEpOworCisJLyogVGhlIDggTFNCcyAqLworCWkyY19kYXRhID0gdmFsICYgMHhmZjsKKwllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfR0FJTiwgJmkyY19kYXRhLCAxKTsKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG92OTY1MF9nZXRfcmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfUkVELCAmaTJjX2RhdGEsIDEpOworCSp2YWwgPSBpMmNfZGF0YTsKKworCVBERUJVRyhEX1Y0TDIsICJSZWFkIHJlZCBnYWluICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG92OTY1MF9zZXRfcmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHJlZCBnYWluIHRvICVkIiwKKwkJCSAgICAgdmFsICYgMHhmZik7CisKKwlpMmNfZGF0YSA9IHZhbCAmIDB4ZmY7CisJZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX1JFRCwgJmkyY19kYXRhLCAxKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX2dldF9ibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQkxVRSwgJmkyY19kYXRhLCAxKTsKKwkqdmFsID0gaTJjX2RhdGE7CisKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBibHVlIGdhaW4gJWQiLCAqdmFsKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX3NldF9ibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGJsdWUgZ2FpbiB0byAlZCIsCisJICAgICAgIHZhbCAmIDB4ZmYpOworCisJaTJjX2RhdGEgPSB2YWwgJiAweGZmOworCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9CTFVFLCAmaTJjX2RhdGEsIDEpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX01WRlAsICZpMmNfZGF0YSwgMSk7CisJaWYgKGRtaV9jaGVja19zeXN0ZW0ob3Y5NjUwX2ZsaXBfZG1pX3RhYmxlKSkKKwkJKnZhbCA9ICgoaTJjX2RhdGEgJiBPVjk2NTBfSEZMSVApID4+IDUpID8gMCA6IDE7CisJZWxzZQorCQkqdmFsID0gKGkyY19kYXRhICYgT1Y5NjUwX0hGTElQKSA+PiA1OworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGhvcml6b250YWwgZmxpcCAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJUERFQlVHKERfVjRMMiwgIlNldCBob3Jpem9udGFsIGZsaXAgdG8gJWQiLCB2YWwpOworCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX01WRlAsICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKGRtaV9jaGVja19zeXN0ZW0ob3Y5NjUwX2ZsaXBfZG1pX3RhYmxlKSkKKwkJaTJjX2RhdGEgPSAoKGkyY19kYXRhICYgMHhkZikgfAorCQkJCSgoKHZhbCA/IDAgOiAxKSAmIDB4MDEpIDw8IDUpKTsKKwllbHNlCisJCWkyY19kYXRhID0gKChpMmNfZGF0YSAmIDB4ZGYpIHwKKwkJCQkoKHZhbCAmIDB4MDEpIDw8IDUpKTsKKworCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9NVkZQLCAmaTJjX2RhdGEsIDEpOworb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9NVkZQLCAmaTJjX2RhdGEsIDEpOworCWlmIChkbWlfY2hlY2tfc3lzdGVtKG92OTY1MF9mbGlwX2RtaV90YWJsZSkpCisJCSp2YWwgPSAoKGkyY19kYXRhICYgMHgxMCkgPj4gNCkgPyAwIDogMTsKKwllbHNlCisJCSp2YWwgPSAoaTJjX2RhdGEgJiAweDEwKSA+PiA0OworCVBERUJVRyhEX1Y0TDIsICJSZWFkIHZlcnRpY2FsIGZsaXAgJWQiLCAqdmFsKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgdmVydGljYWwgZmxpcCB0byAlZCIsIHZhbCk7CisJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfTVZGUCwgJmkyY19kYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZG1pX2NoZWNrX3N5c3RlbShvdjk2NTBfZmxpcF9kbWlfdGFibGUpKQorCQlpMmNfZGF0YSA9ICgoaTJjX2RhdGEgJiAweGVmKSB8CisJCQkJKCgodmFsID8gMCA6IDEpICYgMHgwMSkgPDwgNCkpOworCWVsc2UKKwkJaTJjX2RhdGEgPSAoKGkyY19kYXRhICYgMHhlZikgfAorCQkJCSgodmFsICYgMHgwMSkgPDwgNCkpOworCisJZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX01WRlAsICZpMmNfZGF0YSwgMSk7CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfVlJFRiwgJmkyY19kYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisJKnZhbCA9IChpMmNfZGF0YSAmIDB4MDMpIDw8IDg7CisKKwllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9HQUlOLCAmaTJjX2RhdGEsIDEpOworCSp2YWwgfD0gaTJjX2RhdGE7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOworb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX3NldF9icmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJUERFQlVHKERfVjRMMiwgIlNldCBnYWluIHRvICVkIiwgdmFsICYgMHgzZmYpOworCisJLyogUmVhZCB0aGUgT1Y5NjUwX1ZSRUYgcmVnaXN0ZXIgZmlyc3QgdG8gYXZvaWQKKwkJY29ycnVwdGluZyB0aGUgVlJFRiBoaWdoIGFuZCBsb3cgYml0cyAqLworCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX1ZSRUYsICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJLyogTWFzayBhd2F5IGFsbCB1bmludGVyZXN0aW5nIGJpdHMgKi8KKwlpMmNfZGF0YSA9ICgodmFsICYgMHgwMzAwKSA+PiAyKSB8IChpMmNfZGF0YSAmIDB4M0YpOworCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9WUkVGLCAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIFRoZSA4IExTQnMgKi8KKwlpMmNfZGF0YSA9IHZhbCAmIDB4ZmY7CisJZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX0dBSU4sICZpMmNfZGF0YSwgMSk7CisKK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG92OTY1MF9nZXRfYXV0b193aGl0ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CisJKnZhbCA9IChpMmNfZGF0YSAmIE9WOTY1MF9BV0JfRU4pID4+IDE7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgYXV0byB3aGl0ZSBiYWxhbmNlICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG92OTY1MF9zZXRfYXV0b193aGl0ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJUERFQlVHKERfVjRMMiwgIlNldCBhdXRvIHdoaXRlIGJhbGFuY2UgdG8gJWQiLCB2YWwpOworCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJaTJjX2RhdGEgPSAoKGkyY19kYXRhICYgMHhmZCkgfCAoKHZhbCAmIDB4MDEpIDw8IDEpKTsKKwllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfQ09NOCwgJmkyY19kYXRhLCAxKTsKK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG92OTY1MF9nZXRfYXV0b19nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CisJKnZhbCA9IChpMmNfZGF0YSAmIE9WOTY1MF9BR0NfRU4pID4+IDI7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgYXV0byBnYWluIGNvbnRyb2wgJWQiLCAqdmFsKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX3NldF9hdXRvX2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGF1dG8gZ2FpbiBjb250cm9sIHRvICVkIiwgdmFsKTsKKwllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9DT004LCAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWkyY19kYXRhID0gKChpMmNfZGF0YSAmIDB4ZmIpIHwgKCh2YWwgJiAweDAxKSA8PCAyKSk7CisJZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK3ZvaWQgb3Y5NjUwX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpCit7CisJaW50IGFkZHJlc3M7CisJaW5mbygiRHVtcGluZyB0aGUgb3Y5NjUwIHJlZ2lzdGVyIHN0YXRlIik7CisJZm9yIChhZGRyZXNzID0gMDsgYWRkcmVzcyA8IDB4YTk7IGFkZHJlc3MrKykgeworCQl1OCB2YWx1ZTsKKwkJb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmdmFsdWUsIDEpOworCQlpbmZvKCJyZWdpc3RlciAweCV4IGNvbnRhaW5zIDB4JXgiLAorCQkgICAgIGFkZHJlc3MsIHZhbHVlKTsKKwl9CisKKwlpbmZvKCJvdjk2NTAgcmVnaXN0ZXIgc3RhdGUgZHVtcCBjb21wbGV0ZSIpOworCisJaW5mbygiUHJvYmluZyBmb3Igd2hpY2ggcmVnaXN0ZXJzIHRoYXQgYXJlIHJlYWQvd3JpdGUiKTsKKwlmb3IgKGFkZHJlc3MgPSAwOyBhZGRyZXNzIDwgMHhmZjsgYWRkcmVzcysrKSB7CisJCXU4IG9sZF92YWx1ZSwgY3RybF92YWx1ZTsKKwkJdTggdGVzdF92YWx1ZVsyXSA9IHsweGZmLCAweGZmfTsKKworCQlvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsdWUsIDEpOworCQlvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBhZGRyZXNzLCB0ZXN0X3ZhbHVlLCAxKTsKKwkJb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmY3RybF92YWx1ZSwgMSk7CisKKwkJaWYgKGN0cmxfdmFsdWUgPT0gdGVzdF92YWx1ZVswXSkKKwkJCWluZm8oInJlZ2lzdGVyIDB4JXggaXMgd3JpdGVhYmxlIiwgYWRkcmVzcyk7CisJCWVsc2UKKwkJCWluZm8oInJlZ2lzdGVyIDB4JXggaXMgcmVhZCBvbmx5IiwgYWRkcmVzcyk7CisKKwkJLyogUmVzdG9yZSBvcmlnaW5hbCB2YWx1ZSAqLworCQlvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBhZGRyZXNzLCAmb2xkX3ZhbHVlLCAxKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjU2MzJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuaApAQCAtMCwwICsxLDUwMiBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIG92OTY1MCBzZW5zb3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KKyAqCisgKiBQb3J0aW9ucyBvZiBjb2RlIHRvIFVTQiBpbnRlcmZhY2UgYW5kIEFMaSBkcml2ZXIgc29mdHdhcmUsCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgV2lsbGVtIER1aW5rZXIKKyAqIHY0bDIgaW50ZXJmYWNlIG1vZGVsZWQgYWZ0ZXIgdGhlIFY0TDIgZHJpdmVyCisgKiBmb3IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBNNTYwMl9PVjk2NTBfSF8KKyNkZWZpbmUgTTU2MDJfT1Y5NjUwX0hfCisKKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKworI2luY2x1ZGUgIm01NjAyX3NlbnNvci5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgT1Y5NjUwX0dBSU4JCQkweDAwCisjZGVmaW5lIE9WOTY1MF9CTFVFCQkJMHgwMQorI2RlZmluZSBPVjk2NTBfUkVECQkJMHgwMgorI2RlZmluZSBPVjk2NTBfVlJFRgkJCTB4MDMKKyNkZWZpbmUgT1Y5NjUwX0NPTTEJCQkweDA0CisjZGVmaW5lIE9WOTY1MF9CQVZFCQkJMHgwNQorI2RlZmluZSBPVjk2NTBfR0VBVkUJCQkweDA2CisjZGVmaW5lIE9WOTY1MF9SU1ZENwkJCTB4MDcKKyNkZWZpbmUgT1Y5NjUwX1BJRAkJCTB4MGEKKyNkZWZpbmUgT1Y5NjUwX1ZFUgkJCTB4MGIKKyNkZWZpbmUgT1Y5NjUwX0NPTTMJCQkweDBjCisjZGVmaW5lIE9WOTY1MF9DT001CQkJMHgwZQorI2RlZmluZSBPVjk2NTBfQ09NNgkJCTB4MGYKKyNkZWZpbmUgT1Y5NjUwX0FFQ0gJCQkweDEwCisjZGVmaW5lIE9WOTY1MF9DTEtSQwkJCTB4MTEKKyNkZWZpbmUgT1Y5NjUwX0NPTTcJCQkweDEyCisjZGVmaW5lIE9WOTY1MF9DT004CQkJMHgxMworI2RlZmluZSBPVjk2NTBfQ09NOQkJCTB4MTQKKyNkZWZpbmUgT1Y5NjUwX0NPTTEwCQkJMHgxNQorI2RlZmluZSBPVjk2NTBfUlNWRDE2CQkJMHgxNgorI2RlZmluZSBPVjk2NTBfSFNUQVJUCQkJMHgxNworI2RlZmluZSBPVjk2NTBfSFNUT1AJCQkweDE4CisjZGVmaW5lIE9WOTY1MF9WU1RSVAkJCTB4MTkKKyNkZWZpbmUgT1Y5NjUwX1ZTVE9QCQkJMHgxYQorI2RlZmluZSBPVjk2NTBfUFNIRlQJCQkweDFiCisjZGVmaW5lIE9WOTY1MF9NVkZQCQkJMHgxZQorI2RlZmluZSBPVjk2NTBfQUVXCQkJMHgyNAorI2RlZmluZSBPVjk2NTBfQUVCCQkJMHgyNQorI2RlZmluZSBPVjk2NTBfVlBUCQkJMHgyNgorI2RlZmluZSBPVjk2NTBfQkJJQVMJCQkweDI3CisjZGVmaW5lIE9WOTY1MF9HYkJJQVMJCQkweDI4CisjZGVmaW5lIE9WOTY1MF9Hcl9DT00JCQkweDI5CisjZGVmaW5lIE9WOTY1MF9SQklBUwkJCTB4MmMKKyNkZWZpbmUgT1Y5NjUwX0hSRUYJCQkweDMyCisjZGVmaW5lIE9WOTY1MF9DSExGCQkJMHgzMworI2RlZmluZSBPVjk2NTBfQVJCTE0JCQkweDM0CisjZGVmaW5lIE9WOTY1MF9SU1ZEMzUJCQkweDM1CisjZGVmaW5lIE9WOTY1MF9SU1ZEMzYJCQkweDM2CisjZGVmaW5lIE9WOTY1MF9BREMJCQkweDM3CisjZGVmaW5lIE9WOTY1MF9BQ09NMzgJCQkweDM4CisjZGVmaW5lIE9WOTY1MF9PRk9OCQkJMHgzOQorI2RlZmluZSBPVjk2NTBfVFNMQgkJCTB4M2EKKyNkZWZpbmUgT1Y5NjUwX0NPTTEyCQkJMHgzYworI2RlZmluZSBPVjk2NTBfQ09NMTMJCQkweDNkCisjZGVmaW5lIE9WOTY1MF9DT00xNQkJCTB4NDAKKyNkZWZpbmUgT1Y5NjUwX0NPTTE2CQkJMHg0MQorI2RlZmluZSBPVjk2NTBfTENDMQkJCTB4NjIKKyNkZWZpbmUgT1Y5NjUwX0xDQzIJCQkweDYzCisjZGVmaW5lIE9WOTY1MF9MQ0MzCQkJMHg2NAorI2RlZmluZSBPVjk2NTBfTENDNAkJCTB4NjUKKyNkZWZpbmUgT1Y5NjUwX0xDQzUJCQkweDY2CisjZGVmaW5lIE9WOTY1MF9IVgkJCTB4NjkKKyNkZWZpbmUgT1Y5NjUwX0RCTFYJCQkweDZiCisjZGVmaW5lIE9WOTY1MF9DT00yMQkJCTB4OGIKKyNkZWZpbmUgT1Y5NjUwX0NPTTIyCQkJMHg4YworI2RlZmluZSBPVjk2NTBfQ09NMjQJCQkweDhlCisjZGVmaW5lIE9WOTY1MF9EQkxDMQkJCTB4OGYKKyNkZWZpbmUgT1Y5NjUwX1JTVkQ5NAkJCTB4OTQKKyNkZWZpbmUgT1Y5NjUwX1JTVkQ5NQkJCTB4OTUKKyNkZWZpbmUgT1Y5NjUwX1JTVkQ5NgkJCTB4OTYKKyNkZWZpbmUgT1Y5NjUwX0xDQ0ZCCQkJMHg5ZAorI2RlZmluZSBPVjk2NTBfTENDRlIJCQkweDllCisjZGVmaW5lIE9WOTY1MF9BRUNITQkJCTB4YTEKKyNkZWZpbmUgT1Y5NjUwX0NPTTI2CQkJMHhhNQorI2RlZmluZSBPVjk2NTBfQUNPTUE4CQkJMHhhOAorI2RlZmluZSBPVjk2NTBfQUNPTUE5CQkJMHhhOQorCisjZGVmaW5lIE9WOTY1MF9SRUdJU1RFUl9SRVNFVAkJKDEgPDwgNykKKyNkZWZpbmUgT1Y5NjUwX1ZHQV9TRUxFQ1QJCSgxIDw8IDYpCisjZGVmaW5lIE9WOTY1MF9SR0JfU0VMRUNUCQkoMSA8PCAyKQorI2RlZmluZSBPVjk2NTBfUkFXX1JHQl9TRUxFQ1QJCSgxIDw8IDApCisKKyNkZWZpbmUgT1Y5NjUwX0ZBU1RfQUdDX0FFQwkJKDEgPDwgNykKKyNkZWZpbmUgT1Y5NjUwX0FFQ19VTkxJTV9TVEVQX1NJWkUJKDEgPDwgNikKKyNkZWZpbmUgT1Y5NjUwX0JBTkRJTkcJCQkoMSA8PCA1KQorI2RlZmluZSBPVjk2NTBfQUdDX0VOCQkJKDEgPDwgMikKKyNkZWZpbmUgT1Y5NjUwX0FXQl9FTgkJCSgxIDw8IDEpCisjZGVmaW5lIE9WOTY1MF9BRUNfRU4JCQkoMSA8PCAwKQorCisjZGVmaW5lIE9WOTY1MF9WQVJJT1BJWEVMCQkoMSA8PCAyKQorI2RlZmluZSBPVjk2NTBfU1lTVEVNX0NMS19TRUwJCSgxIDw8IDcpCisjZGVmaW5lIE9WOTY1MF9TTEFNX01PREUgCQkoMSA8PCA0KQorCisjZGVmaW5lIE9WOTY1MF9WRkxJUAkJCSgxIDw8IDQpCisjZGVmaW5lIE9WOTY1MF9IRkxJUAkJCSgxIDw8IDUpCisKKyNkZWZpbmUgR0FJTl9ERUZBVUxUCQkJMHgxNAorI2RlZmluZSBSRURfR0FJTl9ERUZBVUxUCQkweDcwCisjZGVmaW5lIEJMVUVfR0FJTl9ERUZBVUxUCQkweDIwCisjZGVmaW5lIEVYUE9TVVJFX0RFRkFVTFQJCTB4NTAwMworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycyAqLworZXh0ZXJuIGludCBmb3JjZV9zZW5zb3I7CitleHRlcm4gaW50IGR1bXBfc2Vuc29yOworCitpbnQgb3Y5NjUwX3Byb2JlKHN0cnVjdCBzZCAqc2QpOworaW50IG92OTY1MF9pbml0KHN0cnVjdCBzZCAqc2QpOworaW50IG92OTY1MF9wb3dlcl9kb3duKHN0cnVjdCBzZCAqc2QpOworCitpbnQgb3Y5NjUwX3JlYWRfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCSAgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7CitpbnQgb3Y5NjUwX3dyaXRlX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkgICAgICAgdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pOworCit2b2lkIG92OTY1MF9kdW1wX3JlZ2lzdGVycyhzdHJ1Y3Qgc2QgKnNkKTsKKworaW50IG92OTY1MF9zZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IG92OTY1MF9nZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBvdjk2NTBfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBvdjk2NTBfc2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IG92OTY1MF9nZXRfcmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBvdjk2NTBfc2V0X3JlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBvdjk2NTBfZ2V0X2JsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IG92OTY1MF9zZXRfYmx1ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBvdjk2NTBfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgb3Y5NjUwX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgb3Y5NjUwX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IG92OTY1MF9zZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IG92OTY1MF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IG92OTY1MF9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgb3Y5NjUwX2dldF9hdXRvX3doaXRlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBvdjk2NTBfc2V0X2F1dG9fd2hpdGVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgb3Y5NjUwX2dldF9hdXRvX2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBvdjk2NTBfc2V0X2F1dG9fZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CisKK3N0YXRpYyBzdHJ1Y3QgbTU2MDJfc2Vuc29yIG92OTY1MCA9IHsKKwkubmFtZSA9ICJPVjk2NTAiLAorCS5pMmNfc2xhdmVfaWQgPSAweDYwLAorCS5wcm9iZSA9IG92OTY1MF9wcm9iZSwKKwkuaW5pdCA9IG92OTY1MF9pbml0LAorCS5wb3dlcl9kb3duID0gb3Y5NjUwX3Bvd2VyX2Rvd24sCisJLnJlYWRfc2Vuc29yID0gb3Y5NjUwX3JlYWRfc2Vuc29yLAorCS53cml0ZV9zZW5zb3IgPSBvdjk2NTBfd3JpdGVfc2Vuc29yLAorCisJLm5jdHJscyA9IDgsCisJLmN0cmxzID0geworCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJleHBvc3VyZSIsCisJCQkubWluaW11bQk9IDB4MDAsCisJCQkubWF4aW11bQk9IDB4ZmZmZiwKKwkJCS5zdGVwCQk9IDB4MSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IEVYUE9TVVJFX0RFRkFVTFQsCisJCQkuZmxhZ3MgICAgICAgICAJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnNldCA9IG92OTY1MF9zZXRfZXhwb3N1cmUsCisJCS5nZXQgPSBvdjk2NTBfZ2V0X2V4cG9zdXJlCisJfSwgeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiZ2FpbiIsCisJCQkubWluaW11bQk9IDB4MDAsCisJCQkubWF4aW11bQk9IDB4M2ZmLAorCQkJLnN0ZXAJCT0gMHgxLAorCQkJLmRlZmF1bHRfdmFsdWUJPSBHQUlOX0RFRkFVTFQsCisJCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBvdjk2NTBfc2V0X2dhaW4sCisJCS5nZXQgPSBvdjk2NTBfZ2V0X2dhaW4KKwl9LCB7CisJCXsKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgCQk9ICJyZWQgYmFsYW5jZSIsCisJCQkubWluaW11bSAJPSAweDAwLAorCQkJLm1heGltdW0gCT0gMHhmZiwKKwkJCS5zdGVwIAkJPSAweDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSBSRURfR0FJTl9ERUZBVUxULAorCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBvdjk2NTBfc2V0X3JlZF9iYWxhbmNlLAorCQkuZ2V0ID0gb3Y5NjUwX2dldF9yZWRfYmFsYW5jZQorCX0sIHsKKwkJeworCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSAJCT0gImJsdWUgYmFsYW5jZSIsCisJCQkubWluaW11bSAJPSAweDAwLAorCQkJLm1heGltdW0gCT0gMHhmZiwKKwkJCS5zdGVwIAkJPSAweDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSBCTFVFX0dBSU5fREVGQVVMVCwKKwkJCS5mbGFncyAgICAgICAgIAk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgorCQl9LAorCQkuc2V0ID0gb3Y5NjUwX3NldF9ibHVlX2JhbGFuY2UsCisJCS5nZXQgPSBvdjk2NTBfZ2V0X2JsdWVfYmFsYW5jZQorCX0sIHsKKwkJeworCQkJLmlkIAkJPSBWNEwyX0NJRF9IRkxJUCwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgCQk9ICJob3Jpem9udGFsIGZsaXAiLAorCQkJLm1pbmltdW0gCT0gMCwKKwkJCS5tYXhpbXVtIAk9IDEsCisJCQkuc3RlcCAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IDAKKwkJfSwKKwkJLnNldCA9IG92OTY1MF9zZXRfaGZsaXAsCisJCS5nZXQgPSBvdjk2NTBfZ2V0X2hmbGlwCisJfSwgeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAJCT0gInZlcnRpY2FsIGZsaXAiLAorCQkJLm1pbmltdW0gCT0gMCwKKwkJCS5tYXhpbXVtIAk9IDEsCisJCQkuc3RlcCAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IDAKKwkJfSwKKwkJLnNldCA9IG92OTY1MF9zZXRfdmZsaXAsCisJCS5nZXQgPSBvdjk2NTBfZ2V0X3ZmbGlwCisJfSwgeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgCQk9ICJhdXRvIHdoaXRlIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gCT0gMCwKKwkJCS5tYXhpbXVtIAk9IDEsCisJCQkuc3RlcCAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IDAKKwkJfSwKKwkJLnNldCA9IG92OTY1MF9zZXRfYXV0b193aGl0ZV9iYWxhbmNlLAorCQkuZ2V0ID0gb3Y5NjUwX2dldF9hdXRvX3doaXRlX2JhbGFuY2UKKwl9LCB7CisJCXsKKwkJCS5pZCAJCT0gVjRMMl9DSURfQVVUT0dBSU4sCisJCQkudHlwZSAJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lIAkJPSAiYXV0byBnYWluIGNvbnRyb2wiLAorCQkJLm1pbmltdW0gCT0gMCwKKwkJCS5tYXhpbXVtIAk9IDEsCisJCQkuc3RlcCAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IDAKKwkJfSwKKwkJLnNldCA9IG92OTY1MF9zZXRfYXV0b19nYWluLAorCQkuZ2V0ID0gb3Y5NjUwX2dldF9hdXRvX2dhaW4KKwl9CisJfSwKKworCS5ubW9kZXMgPSAxLAorCS5tb2RlcyA9IHsKKwl7CisJCU01NjAyX0RFRkFVTFRfRlJBTUVfV0lEVEgsCisJCU01NjAyX0RFRkFVTFRfRlJBTUVfSEVJR0hULAorCQlWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPQorCQkJTTU2MDJfREVGQVVMVF9GUkFNRV9XSURUSCAqIE01NjAyX0RFRkFVTFRfRlJBTUVfSEVJR0hULAorCQkuYnl0ZXNwZXJsaW5lID0gTTU2MDJfREVGQVVMVF9GUkFNRV9XSURUSCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxCisJfQorCX0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHByZWluaXRfb3Y5NjUwW11bM10gPQoreworCS8qIFtJTklUQ0FNXSAqLworCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfRElWLCAweDAyfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0NUUkwsIDB4YjB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfQ1RSTCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDV9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDA0fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDZ9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4MDZ9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ0xLX0RJViwgMHgwYX0sCisJLyogUmVzZXQgY2hpcCAqLworCXtTRU5TT1IsIE9WOTY1MF9DT003LCBPVjk2NTBfUkVHSVNURVJfUkVTRVR9LAorCS8qIEVuYWJsZSBkb3VibGUgY2xvY2sgKi8KKwl7U0VOU09SLCBPVjk2NTBfQ0xLUkMsIDB4ODB9LAorCS8qIERvIHNvbWV0aGluZyBvdXQgb2Ygc3BlYyB3aXRoIHRoZSBwb3dlciAqLworCXtTRU5TT1IsIE9WOTY1MF9PRk9OLCAweDQwfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5pdF9vdjk2NTBbXVszXSA9Cit7CisJLyogW0lOSVRDQU1dICovCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19ESVYsIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9DVFJMLCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA4fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDR9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DTEtfRElWLCAweDBhfSwKKwkvKiBSZXNldCBjaGlwICovCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTcsIE9WOTY1MF9SRUdJU1RFUl9SRVNFVH0sCisJLyogRW5hYmxlIGRvdWJsZSBjbG9jayAqLworCXtTRU5TT1IsIE9WOTY1MF9DTEtSQywgMHg4MH0sCisJLyogRG8gc29tZXRoaW5nIG91dCBvZiBzcGVjIHdpdGggdGhlIHBvd2VyICovCisJe1NFTlNPUiwgT1Y5NjUwX09GT04sIDB4NDB9LAorCisJLyogU2V0IFFRVkdBICovCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTEsIDB4MjB9LAorCS8qIFNldCBmYXN0IEFHQy9BRUMgYWxnb3JpdGhtIHdpdGggdW5saW1pdGVkIHN0ZXAgc2l6ZSAqLworCXtTRU5TT1IsIE9WOTY1MF9DT004LCBPVjk2NTBfRkFTVF9BR0NfQUVDIHwKKwkJCSAgICAgIE9WOTY1MF9BRUNfVU5MSU1fU1RFUF9TSVpFIHwKKwkJCSAgICAgIE9WOTY1MF9BV0JfRU4gfCBPVjk2NTBfQUdDX0VOfSwKKworCXtTRU5TT1IsIE9WOTY1MF9DSExGLCAweDEwfSwKKwl7U0VOU09SLCBPVjk2NTBfQVJCTE0sIDB4YmZ9LAorCXtTRU5TT1IsIE9WOTY1MF9BQ09NMzgsIDB4ODF9LAorCS8qIFR1cm4gb2ZmIGNvbG9yIG1hdHJpeCBjb2VmZmljaWVudCBkb3VibGUgb3B0aW9uICovCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTE2LCAweDAwfSwKKwkJLyogRW5hYmxlIGNvbG9yIG1hdHJpeCBmb3IgUkdCL1lVViwgRGVsYXkgWSBjaGFubmVsLAorCXNldCBvdXRwdXQgWS9VViBkZWxheSB0byAxICovCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTEzLCAweDE5fSwKKwkvKiBFbmFibGUgZGlnaXRhbCBCTEMsIFNldCBvdXRwdXQgbW9kZSB0byBVIFkgViBZICovCisJe1NFTlNPUiwgT1Y5NjUwX1RTTEIsIDB4MGN9LAorCS8qIExpbWl0IHRoZSBBR0MvQUVDIHN0YWJsZSB1cHBlciByZWdpb24gKi8KKwl7U0VOU09SLCBPVjk2NTBfQ09NMjQsIDB4MDB9LAorCS8qIEVuYWJsZSBIUkVGIGFuZCBzb21lIG91dCBvZiBzcGVjIHRoaW5ncyAqLworCXtTRU5TT1IsIE9WOTY1MF9DT00xMiwgMHg3M30sCisJCS8qIFNldCBhbGwgREJMQyBvZmZzZXQgc2lnbnMgdG8gcG9zaXRpdmUgYW5kCisJZG8gc29tZSBvdXQgb2Ygc3BlYyBzdHVmZiAqLworCXtTRU5TT1IsIE9WOTY1MF9EQkxDMSwgMHhkZn0sCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTIxLCAweDA2fSwKKwl7U0VOU09SLCBPVjk2NTBfUlNWRDM1LCAweDkxfSwKKwkvKiBOZWNlc3NhcnksIG5vIGNhbWVyYSBzdHJlYW0gd2l0aG91dCBpdCAqLworCXtTRU5TT1IsIE9WOTY1MF9SU1ZEMTYsIDB4MDZ9LAorCXtTRU5TT1IsIE9WOTY1MF9SU1ZEOTQsIDB4OTl9LAorCXtTRU5TT1IsIE9WOTY1MF9SU1ZEOTUsIDB4OTl9LAorCXtTRU5TT1IsIE9WOTY1MF9SU1ZEOTYsIDB4MDR9LAorCS8qIEVuYWJsZSBmdWxsIHJhbmdlIG91dHB1dCAqLworCXtTRU5TT1IsIE9WOTY1MF9DT00xNSwgMHgwfSwKKwkJLyogRW5hYmxlIEhSRUYgYXQgb3B0aWNhbCBibGFjaywgZW5hYmxlIEFEQkxDIGJpYXMsCisJZW5hYmxlIEFEQkxDLCByZXNldCB0aW1pbmdzIGF0IGZvcm1hdCBjaGFuZ2UgKi8KKwl7U0VOU09SLCBPVjk2NTBfQ09NNiwgMHg0Yn0sCisJLyogU3VidHJhY3QgMzIgZnJvbSB0aGUgQiBjaGFubmVsIGJpYXMgKi8KKwl7U0VOU09SLCBPVjk2NTBfQkJJQVMsIDB4YTB9LAorCS8qIFN1YnRyYWN0IDMyIGZyb20gdGhlIEdiIGNoYW5uZWwgYmlhcyAqLworCXtTRU5TT1IsIE9WOTY1MF9HYkJJQVMsIDB4YTB9LAorCS8qIERvIG5vdCBieXBhc3MgdGhlIGFuYWxvZyBCTEMgYW5kIHRvIHNvbWUgb3V0IG9mIHNwZWMgc3R1ZmYgKi8KKwl7U0VOU09SLCBPVjk2NTBfR3JfQ09NLCAweDAwfSwKKwkvKiBTdWJ0cmFjdCAzMiBmcm9tIHRoZSBSIGNoYW5uZWwgYmlhcyAqLworCXtTRU5TT1IsIE9WOTY1MF9SQklBUywgMHhhMH0sCisJLyogU3VidHJhY3QgMzIgZnJvbSB0aGUgUiBjaGFubmVsIGJpYXMgKi8KKwl7U0VOU09SLCBPVjk2NTBfUkJJQVMsIDB4MH0sCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTI2LCAweDgwfSwKKwl7U0VOU09SLCBPVjk2NTBfQUNPTUE5LCAweDk4fSwKKwkvKiBTZXQgdGhlIEFHQy9BRUMgc3RhYmxlIHJlZ2lvbiB1cHBlciBsaW1pdCAqLworCXtTRU5TT1IsIE9WOTY1MF9BRVcsIDB4Njh9LAorCS8qIFNldCB0aGUgQUdDL0FFQyBzdGFibGUgcmVnaW9uIGxvd2VyIGxpbWl0ICovCisJe1NFTlNPUiwgT1Y5NjUwX0FFQiwgMHg1Y30sCisJLyogU2V0IHRoZSBoaWdoIGFuZCBsb3cgbGltaXQgbmliYmxlcyB0byAzICovCisJe1NFTlNPUiwgT1Y5NjUwX1ZQVCwgMHhjM30sCisJCS8qIFNldCB0aGUgQXV0b21hdGljIEdhaW4gQ2VpbGluZyAoQUdDKSB0byAxMjh4LAorCWRyb3AgVlNZTkMgYXQgZnJhbWUgZHJvcCwKKwlsaW1pdCBleHBvc3VyZSB0aW1pbmcsCisJZHJvcCBmcmFtZSB3aGVuIHRoZSBBRUMgc3RlcCBpcyBsYXJnZXIgdGhhbiB0aGUgZXhwb3N1cmUgZ2FwICovCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTksIDB4NmV9LAorCS8qIFNldCBWU1lOQyBuZWdhdGl2ZSwgU2V0IFJFU0VUIHRvIFNMSFMgKHNsYXZlIG1vZGUgaG9yaXpvbnRhbCBzeW5jKQorCWFuZCBzZXQgUFdETiB0byBTTFZTIChzbGF2ZSBtb2RlIHZlcnRpY2FsIHN5bmMpICovCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTEwLCAweDQyfSwKKwkvKiBTZXQgaG9yaXpvbnRhbCBjb2x1bW4gc3RhcnQgaGlnaCB0byBkZWZhdWx0IHZhbHVlICovCisJe1NFTlNPUiwgT1Y5NjUwX0hTVEFSVCwgMHgxYX0sCisJLyogU2V0IGhvcml6b250YWwgY29sdW1uIGVuZCAqLworCXtTRU5TT1IsIE9WOTY1MF9IU1RPUCwgMHhiZn0sCisJLyogQ29tcGxlbWVudGluZyByZWdpc3RlciB0byB0aGUgdHdvIHdyaXRlcyBhYm92ZSAqLworCXtTRU5TT1IsIE9WOTY1MF9IUkVGLCAweGIyfSwKKwkvKiBTZXQgdmVydGljYWwgcm93IHN0YXJ0IGhpZ2ggYml0cyAqLworCXtTRU5TT1IsIE9WOTY1MF9WU1RSVCwgMHgwMn0sCisJLyogU2V0IHZlcnRpY2FsIHJvdyBlbmQgbG93IGJpdHMgKi8KKwl7U0VOU09SLCBPVjk2NTBfVlNUT1AsIDB4N2V9LAorCS8qIFNldCBjb21wbGVtZW50aW5nIHZlcnRpY2FsIGZyYW1lIGNvbnRyb2wgKi8KKwl7U0VOU09SLCBPVjk2NTBfVlJFRiwgMHgxMH0sCisJLyogU2V0IHJhdyBSR0Igb3V0cHV0IGZvcm1hdCB3aXRoIFZHQSByZXNvbHV0aW9uICovCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTcsIE9WOTY1MF9WR0FfU0VMRUNUIHwKKwkJCSAgICAgIE9WOTY1MF9SR0JfU0VMRUNUIHwKKwkJCSAgICAgIE9WOTY1MF9SQVdfUkdCX1NFTEVDVH0sCisJe1NFTlNPUiwgT1Y5NjUwX0FEQywgMHgwNH0sCisJe1NFTlNPUiwgT1Y5NjUwX0hWLCAweDQwfSwKKwkvKiBFbmFibGUgZGVub2lzZSwgYW5kIHdoaXRlLXBpeGVsIGVyYXNlICovCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTIyLCAweDIzfSwKKworCS8qIFNldCB0aGUgaGlnaCBiaXRzIG9mIHRoZSBleHBvc3VyZSB2YWx1ZSAqLworCXtTRU5TT1IsIE9WOTY1MF9BRUNILCAoKEVYUE9TVVJFX0RFRkFVTFQgJiAweGZmMDApID4+IDgpfSwKKworCS8qIFNldCB0aGUgbG93IGJpdHMgb2YgdGhlIGV4cG9zdXJlIHZhbHVlICovCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTEsIChFWFBPU1VSRV9ERUZBVUxUICYgMHhmZil9LAorCXtTRU5TT1IsIE9WOTY1MF9HQUlOLCBHQUlOX0RFRkFVTFR9LAorCXtTRU5TT1IsIE9WOTY1MF9CTFVFLCBCTFVFX0dBSU5fREVGQVVMVH0sCisJe1NFTlNPUiwgT1Y5NjUwX1JFRCwgUkVEX0dBSU5fREVGQVVMVH0sCisKKwl7U0VOU09SLCBPVjk2NTBfQ09NMywgT1Y5NjUwX1ZBUklPUElYRUx9LAorCXtTRU5TT1IsIE9WOTY1MF9DT001LCBPVjk2NTBfU1lTVEVNX0NMS19TRUx9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfTElORV9PRl9GUkFNRV9ILCAweDgyfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0wsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0gsIDB4ODJ9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0wsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDF9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDl9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDF9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4ZTB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4NWV9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4ZGV9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwb3dlcl9kb3duX292OTY1MFtdWzNdID0KK3sKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKKwl7U0VOU09SLCBPVjk2NTBfQ09NNywgMHg4MH0sCisJe1NFTlNPUiwgT1Y5NjUwX09GT04sIDB4ZjR9LAorCXtTRU5TT1IsIE9WOTY1MF9NVkZQLCAweDgwfSwKKwl7U0VOU09SLCBPVjk2NTBfREJMViwgMHgzZn0sCisJe1NFTlNPUiwgT1Y5NjUwX1JTVkQzNiwgMHg0OX0sCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTcsIDB4MDV9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDV9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDA0fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDZ9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDR9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0KK307CisKKy8qIFZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseSBmbGlwcyB0aGUgaW1hZ2UgaWYgbWF0Y2hlZCwgbmVlZGVkIGZvciBtYWNoaW5lcworICAgd2hlcmUgdGhlIHNlbnNvciBpcyBtb3VudGVkIHVwc2lkZSBkb3duICovCitzdGF0aWMKKyAgICBjb25zdAorCXN0cnVjdCBkbWlfc3lzdGVtX2lkIG92OTY1MF9mbGlwX2RtaV90YWJsZVtdID0geworCXsKKwkJLmlkZW50ID0gIkFTVVMgQTZWQyIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQVNVU1RlSyBDb21wdXRlciBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkE2VkMiKQorCQl9CisJfSwKKwl7CisJCS5pZGVudCA9ICJBU1VTIEE2Vk0iLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFTVVNUZUsgQ29tcHV0ZXIgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBNlZNIikKKwkJfQorCX0sCisJeworCQkuaWRlbnQgPSAiQVNVUyBBNkpDIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQTZKQyIpCisJCX0KKwl9LAorCXsKKwkJLmlkZW50ID0gIkFTVVMgQTZLdCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQVNVU1RlSyBDb21wdXRlciBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkE2S3QiKQorCQl9CisJfSwKKwl7IH0KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3YWM1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmMKQEAgLTAsMCArMSw0MDAgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBwbzEwMzAgc2Vuc29yCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEVyaWsgQW5kcsOpbgorICogQ29weXJpZ2h0IChjKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgorICogQ29weXJpZ2h0IChjKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CisgKgorICogUG9ydGlvbnMgb2YgY29kZSB0byBVU0IgaW50ZXJmYWNlIGFuZCBBTGkgZHJpdmVyIHNvZnR3YXJlLAorICogQ29weXJpZ2h0IChjKSAyMDA2IFdpbGxlbSBEdWlua2VyCisgKiB2NGwyIGludGVyZmFjZSBtb2RlbGVkIGFmdGVyIHRoZSBWNEwyIGRyaXZlcgorICogZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJtNTYwMl9wbzEwMzAuaCIKKworaW50IHBvMTAzMF9wcm9iZShzdHJ1Y3Qgc2QgKnNkKQoreworCXU4IHByb2RfaWQgPSAwLCB2ZXJfaWQgPSAwLCBpOworCisJaWYgKGZvcmNlX3NlbnNvcikgeworCQlpZiAoZm9yY2Vfc2Vuc29yID09IFBPMTAzMF9TRU5TT1IpIHsKKwkJCWluZm8oIkZvcmNpbmcgYSAlcyBzZW5zb3IiLCBwbzEwMzAubmFtZSk7CisJCQlnb3RvIHNlbnNvcl9mb3VuZDsKKwkJfQorCQkvKiBJZiB3ZSB3YW50IHRvIGZvcmNlIGFub3RoZXIgc2Vuc29yLCBkb24ndCB0cnkgdG8gcHJvYmUgdGhpcworCQkgKiBvbmUgKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaW5mbygiUHJvYmluZyBmb3IgYSBwbzEwMzAgc2Vuc29yIik7CisKKwkvKiBSdW4gdGhlIHByZS1pbml0IHRvIGFjdHVhbGx5IHByb2JlIHRoZSB1bml0ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJlaW5pdF9wbzEwMzApOyBpKyspIHsKKwkJdTggZGF0YSA9IHByZWluaXRfcG8xMDMwW2ldWzJdOworCQlpZiAocHJlaW5pdF9wbzEwMzBbaV1bMF0gPT0gU0VOU09SKQorCQkJcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwKKwkJCQlwcmVpbml0X3BvMTAzMFtpXVsxXSwgJmRhdGEsIDEpOworCQllbHNlCisJCQltNTYwMl93cml0ZV9icmlkZ2Uoc2QsIHByZWluaXRfcG8xMDMwW2ldWzFdLCBkYXRhKTsKKwl9CisKKwlpZiAocG8xMDMwX3JlYWRfc2Vuc29yKHNkLCAweDMsICZwcm9kX2lkLCAxKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAocG8xMDMwX3JlYWRfc2Vuc29yKHNkLCAweDQsICZ2ZXJfaWQsIDEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgocHJvZF9pZCA9PSAweDAyKSAmJiAodmVyX2lkID09IDB4ZWYpKSB7CisJCWluZm8oIkRldGVjdGVkIGEgcG8xMDMwIHNlbnNvciIpOworCQlnb3RvIHNlbnNvcl9mb3VuZDsKKwl9CisJcmV0dXJuIC1FTk9ERVY7CisKK3NlbnNvcl9mb3VuZDoKKwlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IHBvMTAzMC5tb2RlczsKKwlzZC0+Z3NwY2FfZGV2LmNhbS5ubW9kZXMgPSBwbzEwMzAubm1vZGVzOworCXNkLT5kZXNjLT5jdHJscyA9IHBvMTAzMC5jdHJsczsKKwlzZC0+ZGVzYy0+bmN0cmxzID0gcG8xMDMwLm5jdHJsczsKKwlyZXR1cm4gMDsKK30KKworaW50IHBvMTAzMF9yZWFkX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkJdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pCit7CisJaW50IGVyciwgaTsKKworCWRvIHsKKwkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19TVEFUVVMsIGkyY19kYXRhKTsKKwl9IHdoaWxlICgoKmkyY19kYXRhICYgSTJDX0JVU1kpICYmICFlcnIpOworCisJbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsCisJCQkgICBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQpOworCW01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCBhZGRyZXNzKTsKKwltNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19DVFJMLCAweDEwICsgbGVuKTsKKwltNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19DVFJMLCAweDA4KTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RBVEEsICYoaTJjX2RhdGFbaV0pKTsKKworCQlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgorCQkJCSIweCV4IGNvbnRhaW5pbmcgMHgleCAiLCBhZGRyZXNzLCAqaTJjX2RhdGEpOworCX0KKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF93cml0ZV9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJCXU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKQoreworCWludCBlcnIsIGk7CisJdTggKnA7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZC0+Z3NwY2FfZGV2LmRldjsKKwlfX3U4ICpidWYgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWY7CisKKwkvKiBUaGUgcG8xMDMwIG9ubHkgc3VwcG9ydHMgb25lIGJ5dGUgd3JpdGVzICovCisJaWYgKGxlbiA+IDEgfHwgIWxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoYnVmLCBzZW5zb3JfdXJiX3NrZWxldG9uLCBzaXplb2Yoc2Vuc29yX3VyYl9za2VsZXRvbikpOworCisJYnVmWzExXSA9IHNkLT5zZW5zb3ItPmkyY19zbGF2ZV9pZDsKKwlidWZbMTVdID0gYWRkcmVzczsKKworCXAgPSBidWYgKyAxNjsKKworCS8qIENvcHkgYSBmb3VyIGJ5dGUgd3JpdGUgc2VxdWVuY2UgZm9yIGVhY2ggYnl0ZSB0byBiZSB3cml0dGVuIHRvICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCW1lbWNweShwLCBzZW5zb3JfdXJiX3NrZWxldG9uICsgMTYsIDQpOworCQlwWzNdID0gaTJjX2RhdGFbaV07CisJCXAgKz0gNDsKKwkJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKKwkJICAgICAgIGFkZHJlc3MsIGkyY19kYXRhW2ldKTsKKwl9CisKKwkvKiBDb3B5IHRoZSBmb290ZXIgKi8KKwltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDIwLCA0KTsKKworCS8qIFNldCB0aGUgdG90YWwgbGVuZ3RoICovCisJcFszXSA9IDB4MTAgKyBsZW47CisKKwllcnIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICAgMHgwNCwgMHg0MCwgMHgxOSwKKwkJCSAgICAgIDB4MDAwMCwgYnVmLAorCQkJICAgICAgMjAgKyBsZW4gKiA0LCBNNTYwMl9VUkJfTVNHX1RJTUVPVVQpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBwbzEwMzBfaW5pdChzdHJ1Y3Qgc2QgKnNkKQoreworCWludCBpLCBlcnIgPSAwOworCisJLyogSW5pdCB0aGUgc2Vuc29yICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdF9wbzEwMzApOyBpKyspIHsKKwkJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKKworCQlzd2l0Y2ggKGluaXRfcG8xMDMwW2ldWzBdKSB7CisJCWNhc2UgQlJJREdFOgorCQkJZXJyID0gbTU2MDJfd3JpdGVfYnJpZGdlKHNkLAorCQkJCWluaXRfcG8xMDMwW2ldWzFdLAorCQkJCWluaXRfcG8xMDMwW2ldWzJdKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0VOU09SOgorCQkJZGF0YVswXSA9IGluaXRfcG8xMDMwW2ldWzJdOworCQkJZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwKKwkJCQlpbml0X3BvMTAzMFtpXVsxXSwgZGF0YSwgMSk7CisJCQlicmVhazsKKworCQljYXNlIFNFTlNPUl9MT05HOgorCQkJZGF0YVswXSA9IGluaXRfcG8xMDMwW2ldWzJdOworCQkJZGF0YVsxXSA9IGluaXRfcG8xMDMwW2ldWzNdOworCQkJZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwKKwkJCQlpbml0X3BvMTAzMFtpXVsxXSwgZGF0YSwgMik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWluZm8oIkludmFsaWQgc3RyZWFtIGNvbW1hbmQsIGV4aXRpbmcgaW5pdCIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlpZiAoZHVtcF9zZW5zb3IpCisJCXBvMTAzMF9kdW1wX3JlZ2lzdGVycyhzZCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9nZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCisJZXJyID0gcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0lOVEVHTElORVNfSCwKKwkJCQkgJmkyY19kYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisJKnZhbCA9IChpMmNfZGF0YSA8PCA4KTsKKworCWVyciA9IHBvMTAzMF9yZWFkX3NlbnNvcihzZCwgUE8xMDMwX1JFR19JTlRFR0xJTkVTX00sCisJCQkJICZpMmNfZGF0YSwgMSk7CisJKnZhbCB8PSBpMmNfZGF0YTsKKworCVBERUJVRyhEX1Y0TDIsICJFeHBvc3VyZSByZWFkIGFzICVkIiwgKnZhbCk7CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBwbzEwMzBfc2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCisJUERFQlVHKERfVjRMMiwgIlNldCBleHBvc3VyZSB0byAlZCIsIHZhbCAmIDB4ZmZmZik7CisKKwlpMmNfZGF0YSA9ICgodmFsICYgMHhmZjAwKSA+PiA4KTsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGV4cG9zdXJlIHRvIGhpZ2ggYnl0ZSB0byAweCV4IiwKKwkgICAgICAgaTJjX2RhdGEpOworCisJZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19JTlRFR0xJTkVTX0gsCisJCQkJICAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWkyY19kYXRhID0gKHZhbCAmIDB4ZmYpOworCVBERUJVRyhEX1Y0TDIsICJTZXQgZXhwb3N1cmUgdG8gbG93IGJ5dGUgdG8gMHgleCIsCisJICAgICAgIGkyY19kYXRhKTsKKwllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0lOVEVHTElORVNfTSwKKwkJCQkgICZpMmNfZGF0YSwgMSk7CisKK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9nZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfR0xPQkFMR0FJTiwKKwkJCQkgJmkyY19kYXRhLCAxKTsKKwkqdmFsID0gaTJjX2RhdGE7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgZ2xvYmFsIGdhaW4gJWQiLCAqdmFsKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQ09OVFJPTDIsCisJCQkJICZpMmNfZGF0YSwgMSk7CisKKwkqdmFsID0gKGkyY19kYXRhID4+IDcpICYgMHgwMSA7CisKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBoZmxpcCAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBwbzEwMzBfc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCisJUERFQlVHKERfVjRMMiwgIlNldCBoZmxpcCAlZCIsIHZhbCk7CisKKwlpMmNfZGF0YSA9ICh2YWwgJiAweDAxKSA8PCA3OworCisJZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19DT05UUk9MMiwKKwkJCQkgICZpMmNfZGF0YSwgMSk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCisJZXJyID0gcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0dMT0JBTEdBSU4sCisJCQkJICZpMmNfZGF0YSwgMSk7CisKKwkqdmFsID0gKGkyY19kYXRhID4+IDYpICYgMHgwMTsKKworCVBERUJVRyhEX1Y0TDIsICJSZWFkIHZmbGlwICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9zZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHZmbGlwICVkIiwgdmFsKTsKKworCWkyY19kYXRhID0gKHZhbCAmIDB4MDEpIDw8IDY7CisKKwllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0NPTlRST0wyLAorCQkJCSAgJmkyY19kYXRhLCAxKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCisJaTJjX2RhdGEgPSB2YWwgJiAweGZmOworCVBERUJVRyhEX1Y0TDIsICJTZXQgZ2xvYmFsIGdhaW4gdG8gJWQiLCBpMmNfZGF0YSk7CisJZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19HTE9CQUxHQUlOLAorCQkJCSAgJmkyY19kYXRhLCAxKTsKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9nZXRfcmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCisJZXJyID0gcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX1JFRF9HQUlOLAorCQkJCSAmaTJjX2RhdGEsIDEpOworCSp2YWwgPSBpMmNfZGF0YTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCByZWQgZ2FpbiAlZCIsICp2YWwpOworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX3NldF9yZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggaTJjX2RhdGE7CisJaW50IGVycjsKKworCWkyY19kYXRhID0gdmFsICYgMHhmZjsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHJlZCBnYWluIHRvICVkIiwgaTJjX2RhdGEpOworCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfUkVEX0dBSU4sCisJCQkJICAmaTJjX2RhdGEsIDEpOworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX2dldF9ibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCisJZXJyID0gcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0JMVUVfR0FJTiwKKwkJCQkgJmkyY19kYXRhLCAxKTsKKwkqdmFsID0gaTJjX2RhdGE7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgYmx1ZSBnYWluICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9zZXRfYmx1ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCWkyY19kYXRhID0gdmFsICYgMHhmZjsKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGJsdWUgZ2FpbiB0byAlZCIsIGkyY19kYXRhKTsKKwllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0JMVUVfR0FJTiwKKwkJCQkgICZpMmNfZGF0YSwgMSk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9wb3dlcl9kb3duKHN0cnVjdCBzZCAqc2QpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcG8xMDMwX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpCit7CisJaW50IGFkZHJlc3M7CisJdTggdmFsdWUgPSAwOworCisJaW5mbygiRHVtcGluZyB0aGUgcG8xMDMwIHNlbnNvciBjb3JlIHJlZ2lzdGVycyIpOworCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPCAweDdmOyBhZGRyZXNzKyspIHsKKwkJcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmdmFsdWUsIDEpOworCQlpbmZvKCJyZWdpc3RlciAweCV4IGNvbnRhaW5zIDB4JXgiLAorCQkgICAgIGFkZHJlc3MsIHZhbHVlKTsKKwl9CisKKwlpbmZvKCJwbzEwMzAgcmVnaXN0ZXIgc3RhdGUgZHVtcCBjb21wbGV0ZSIpOworCisJaW5mbygiUHJvYmluZyBmb3Igd2hpY2ggcmVnaXN0ZXJzIHRoYXQgYXJlIHJlYWQvd3JpdGUiKTsKKwlmb3IgKGFkZHJlc3MgPSAwOyBhZGRyZXNzIDwgMHhmZjsgYWRkcmVzcysrKSB7CisJCXU4IG9sZF92YWx1ZSwgY3RybF92YWx1ZTsKKwkJdTggdGVzdF92YWx1ZVsyXSA9IHsweGZmLCAweGZmfTsKKworCQlwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsdWUsIDEpOworCQlwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBhZGRyZXNzLCB0ZXN0X3ZhbHVlLCAxKTsKKwkJcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmY3RybF92YWx1ZSwgMSk7CisKKwkJaWYgKGN0cmxfdmFsdWUgPT0gdGVzdF92YWx1ZVswXSkKKwkJCWluZm8oInJlZ2lzdGVyIDB4JXggaXMgd3JpdGVhYmxlIiwgYWRkcmVzcyk7CisJCWVsc2UKKwkJCWluZm8oInJlZ2lzdGVyIDB4JXggaXMgcmVhZCBvbmx5IiwgYWRkcmVzcyk7CisKKwkJLyogUmVzdG9yZSBvcmlnaW5hbCB2YWx1ZSAqLworCQlwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBhZGRyZXNzLCAmb2xkX3ZhbHVlLCAxKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGI3NWZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuaApAQCAtMCwwICsxLDUwOCBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIHBvMTAzMCBzZW5zb3IuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEVyaWsgQW5kcsOpbgorICogQ29weXJpZ2h0IChjKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgorICogQ29weXJpZ2h0IChjKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CisgKgorICogUG9ydGlvbnMgb2YgY29kZSB0byBVU0IgaW50ZXJmYWNlIGFuZCBBTGkgZHJpdmVyIHNvZnR3YXJlLAorICogQ29weXJpZ2h0IChjKSAyMDA2IFdpbGxlbSBEdWlua2VyCisgKiB2NGwyIGludGVyZmFjZSBtb2RlbGVkIGFmdGVyIHRoZSBWNEwyIGRyaXZlcgorICogZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCisgKgorICogUmVnaXN0ZXIgZGVmaW5lcyB0YWtlbiBmcm9tIFBhc2NhbCBTdGFuZ3MgUHJveHljb24gQXJtbGliCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgTTU2MDJfUE8xMDMwX0hfCisjZGVmaW5lIE01NjAyX1BPMTAzMF9IXworCisjaW5jbHVkZSAibTU2MDJfc2Vuc29yLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBQTzEwMzBfUkVHX0RFVklEX0gJCTB4MDAKKyNkZWZpbmUgUE8xMDMwX1JFR19ERVZJRF9MCQkweDAxCisjZGVmaW5lIFBPMTAzMF9SRUdfRlJBTUVXSURUSF9ICQkweDA0CisjZGVmaW5lIFBPMTAzMF9SRUdfRlJBTUVXSURUSF9MCQkweDA1CisjZGVmaW5lIFBPMTAzMF9SRUdfRlJBTUVIRUlHSFRfSAkweDA2CisjZGVmaW5lIFBPMTAzMF9SRUdfRlJBTUVIRUlHSFRfTAkweDA3CisjZGVmaW5lIFBPMTAzMF9SRUdfV0lORE9XWF9ICQkweDA4CisjZGVmaW5lIFBPMTAzMF9SRUdfV0lORE9XWF9MCQkweDA5CisjZGVmaW5lIFBPMTAzMF9SRUdfV0lORE9XWV9ICQkweDBhCisjZGVmaW5lIFBPMTAzMF9SRUdfV0lORE9XWV9MCQkweDBiCisjZGVmaW5lIFBPMTAzMF9SRUdfV0lORE9XV0lEVEhfSAkweDBjCisjZGVmaW5lIFBPMTAzMF9SRUdfV0lORE9XV0lEVEhfTAkweDBkCisjZGVmaW5lIFBPMTAzMF9SRUdfV0lORE9XSEVJR0hUX0gJMHgwZQorI2RlZmluZSBQTzEwMzBfUkVHX1dJTkRPV0hFSUdIVF9MCTB4MGYKKworI2RlZmluZSBQTzEwMzBfUkVHX0dMT0JBTElCSUFTCQkweDEyCisjZGVmaW5lIFBPMTAzMF9SRUdfUElYRUxJQklBUwkJMHgxMworCisjZGVmaW5lIFBPMTAzMF9SRUdfR0xPQkFMR0FJTgkJMHgxNQorI2RlZmluZSBQTzEwMzBfUkVHX1JFRF9HQUlOCQkweDE2CisjZGVmaW5lIFBPMTAzMF9SRUdfR1JFRU5fMV9HQUlOCQkweDE3CisjZGVmaW5lIFBPMTAzMF9SRUdfQkxVRV9HQUlOCQkweDE4CisjZGVmaW5lIFBPMTAzMF9SRUdfR1JFRU5fMl9HQUlOCQkweDE5CisKKyNkZWZpbmUgUE8xMDMwX1JFR19JTlRFR0xJTkVTX0gJCTB4MWEKKyNkZWZpbmUgUE8xMDMwX1JFR19JTlRFR0xJTkVTX00JCTB4MWIKKyNkZWZpbmUgUE8xMDMwX1JFR19JTlRFR0xJTkVTX0wJCTB4MWMKKworI2RlZmluZSBQTzEwMzBfUkVHX0NPTlRST0wxCQkweDFkCisjZGVmaW5lIFBPMTAzMF9SRUdfQ09OVFJPTDIJCTB4MWUKKyNkZWZpbmUgUE8xMDMwX1JFR19DT05UUk9MMwkJMHgxZgorI2RlZmluZSBQTzEwMzBfUkVHX0NPTlRST0w0CQkweDIwCisKKyNkZWZpbmUgUE8xMDMwX1JFR19QRVJJT0Q1MF9ICQkweDIzCisjZGVmaW5lIFBPMTAzMF9SRUdfUEVSSU9ENTBfTAkJMHgyNAorI2RlZmluZSBQTzEwMzBfUkVHX1BFUklPRDYwX0gJCTB4MjUKKyNkZWZpbmUgUE8xMDMwX1JFR19QRVJJT0Q2MF9MCQkweDI2CisjZGVmaW5lIFBPMTAzMF9SRUdfUkVHQ0xLMTY3CQkweDI3CisjZGVmaW5lIFBPMTAzMF9SRUdfREVMVEE1MAkJMHgyOAorI2RlZmluZSBQTzEwMzBfUkVHX0RFTFRBNjAJCTB4MjkKKworI2RlZmluZSBQTzEwMzBfUkVHX0FEQ09GRlNFVAkJMHgyYworCisvKiBHYW1tYSBDb3JyZWN0aW9uIENvZWZmcyAqLworI2RlZmluZSBQTzEwMzBfUkVHX0dDMAkJCTB4MmQKKyNkZWZpbmUgUE8xMDMwX1JFR19HQzEJCQkweDJlCisjZGVmaW5lIFBPMTAzMF9SRUdfR0MyCQkJMHgyZgorI2RlZmluZSBQTzEwMzBfUkVHX0dDMwkJCTB4MzAKKyNkZWZpbmUgUE8xMDMwX1JFR19HQzQJCQkweDMxCisjZGVmaW5lIFBPMTAzMF9SRUdfR0M1CQkJMHgzMgorI2RlZmluZSBQTzEwMzBfUkVHX0dDNgkJCTB4MzMKKyNkZWZpbmUgUE8xMDMwX1JFR19HQzcJCQkweDM0CisKKy8qIENvbG9yIFRyYW5zZm9ybSBNYXRyaXggKi8KKyNkZWZpbmUgUE8xMDMwX1JFR19DVDAJCQkweDM1CisjZGVmaW5lIFBPMTAzMF9SRUdfQ1QxCQkJMHgzNgorI2RlZmluZSBQTzEwMzBfUkVHX0NUMgkJCTB4MzcKKyNkZWZpbmUgUE8xMDMwX1JFR19DVDMJCQkweDM4CisjZGVmaW5lIFBPMTAzMF9SRUdfQ1Q0CQkJMHgzOQorI2RlZmluZSBQTzEwMzBfUkVHX0NUNQkJCTB4M2EKKyNkZWZpbmUgUE8xMDMwX1JFR19DVDYJCQkweDNiCisjZGVmaW5lIFBPMTAzMF9SRUdfQ1Q3CQkJMHgzYworI2RlZmluZSBQTzEwMzBfUkVHX0NUOAkJCTB4M2QKKworI2RlZmluZSBQTzEwMzBfUkVHX0FVVE9DVFJMMQkJMHgzZQorI2RlZmluZSBQTzEwMzBfUkVHX0FVVE9DVFJMMgkJMHgzZgorCisjZGVmaW5lIFBPMTAzMF9SRUdfWVRBUkdFVAkJMHg0MAorI2RlZmluZSBQTzEwMzBfUkVHX0dMT0JBTEdBSU5NSU4JMHg0MQorI2RlZmluZSBQTzEwMzBfUkVHX0dMT0JBTEdBSU5NQVgJMHg0MgorCisvKiBPdXRwdXQgZm9ybWF0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUE8xMDMwX1JFR19PVVRGT1JNQ1RSTDEJCTB4NWEKKyNkZWZpbmUgUE8xMDMwX1JFR19PVVRGT1JNQ1RSTDIJCTB4NWIKKyNkZWZpbmUgUE8xMDMwX1JFR19PVVRGT1JNQ1RSTDMJCTB4NWMKKyNkZWZpbmUgUE8xMDMwX1JFR19PVVRGT1JNQ1RSTDQJCTB4NWQKKyNkZWZpbmUgUE8xMDMwX1JFR19PVVRGT1JNQ1RSTDUJCTB4NWUKKworLyogSW1hZ2luZyBjb2VmZmljaWVudHMgKi8KKyNkZWZpbmUgUE8xMDMwX1JFR19ZQlJJR0hUCQkweDczCisjZGVmaW5lIFBPMTAzMF9SRUdfWUNPTlRSQVNUCQkweDc0CisjZGVmaW5lIFBPMTAzMF9SRUdfWVNBVFVSQVRJT04JCTB4NzUKKworI2RlZmluZSBQTzEwMzBfSEZMSVAJCQkoMSA8PCA3KQorI2RlZmluZSBQTzEwMzBfVkZMSVAJCQkoMSA8PCA2KQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgUE8xMDMwX0dMT0JBTF9HQUlOX0RFRkFVTFQJMHgxMgorI2RlZmluZSBQTzEwMzBfRVhQT1NVUkVfREVGQVVMVAkJMHgwMDg1CisjZGVmaW5lIFBPMTAzMF9CTFVFX0dBSU5fREVGQVVMVCAJMHg0MAorI2RlZmluZSBQTzEwMzBfUkVEX0dBSU5fREVGQVVMVCAJMHg0MAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycyAqLworZXh0ZXJuIGludCBmb3JjZV9zZW5zb3I7CitleHRlcm4gaW50IGR1bXBfc2Vuc29yOworCitpbnQgcG8xMDMwX3Byb2JlKHN0cnVjdCBzZCAqc2QpOworaW50IHBvMTAzMF9pbml0KHN0cnVjdCBzZCAqc2QpOworaW50IHBvMTAzMF9wb3dlcl9kb3duKHN0cnVjdCBzZCAqc2QpOworCit2b2lkIHBvMTAzMF9kdW1wX3JlZ2lzdGVycyhzdHJ1Y3Qgc2QgKnNkKTsKKworaW50IHBvMTAzMF9yZWFkX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkJICAgICAgdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pOworaW50IHBvMTAzMF93cml0ZV9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJCSAgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7CisKK2ludCBwbzEwMzBfZ2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgcG8xMDMwX3NldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgcG8xMDMwX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgcG8xMDMwX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBwbzEwMzBfZ2V0X3JlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgcG8xMDMwX3NldF9yZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgcG8xMDMwX2dldF9ibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBwbzEwMzBfc2V0X2JsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgcG8xMDMwX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IHBvMTAzMF9zZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IHBvMTAzMF9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBwbzEwMzBfc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKKworc3RhdGljIHN0cnVjdCBtNTYwMl9zZW5zb3IgcG8xMDMwID0geworCS5uYW1lID0gIlBPMTAzMCIsCisKKwkuaTJjX3NsYXZlX2lkID0gMHhkYywKKworCS5wcm9iZSA9IHBvMTAzMF9wcm9iZSwKKwkuaW5pdCA9IHBvMTAzMF9pbml0LAorCS5wb3dlcl9kb3duID0gcG8xMDMwX3Bvd2VyX2Rvd24sCisKKwkubmN0cmxzID0gNiwKKwkuY3RybHMgPSB7CisJeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX0dBSU4sCisJCQkudHlwZSAJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lIAkJPSAiZ2FpbiIsCisJCQkubWluaW11bSAJPSAweDAwLAorCQkJLm1heGltdW0gCT0gMHg0ZiwKKwkJCS5zdGVwIAkJPSAweDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSBQTzEwMzBfR0xPQkFMX0dBSU5fREVGQVVMVCwKKwkJCS5mbGFncyAgICAgICAgIAk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgorCQl9LAorCQkuc2V0ID0gcG8xMDMwX3NldF9nYWluLAorCQkuZ2V0ID0gcG8xMDMwX2dldF9nYWluCisJfSwgeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSAJCT0gImV4cG9zdXJlIiwKKwkJCS5taW5pbXVtIAk9IDB4MDAsCisJCQkubWF4aW11bSAJPSAweDAyZmYsCisJCQkuc3RlcCAJCT0gMHgxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gUE8xMDMwX0VYUE9TVVJFX0RFRkFVTFQsCisJCQkuZmxhZ3MgICAgICAgICAJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnNldCA9IHBvMTAzMF9zZXRfZXhwb3N1cmUsCisJCS5nZXQgPSBwbzEwMzBfZ2V0X2V4cG9zdXJlCisJfSwgeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSAJCT0gInJlZCBiYWxhbmNlIiwKKwkJCS5taW5pbXVtIAk9IDB4MDAsCisJCQkubWF4aW11bSAJPSAweGZmLAorCQkJLnN0ZXAgCQk9IDB4MSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IFBPMTAzMF9SRURfR0FJTl9ERUZBVUxULAorCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBwbzEwMzBfc2V0X3JlZF9iYWxhbmNlLAorCQkuZ2V0ID0gcG8xMDMwX2dldF9yZWRfYmFsYW5jZQorCX0sIHsKKwkJeworCQkJLmlkIAkJPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCisJCQkudHlwZSAJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lIAkJPSAiYmx1ZSBiYWxhbmNlIiwKKwkJCS5taW5pbXVtIAk9IDB4MDAsCisJCQkubWF4aW11bSAJPSAweGZmLAorCQkJLnN0ZXAgCQk9IDB4MSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IFBPMTAzMF9CTFVFX0dBSU5fREVGQVVMVCwKKwkJCS5mbGFncyAgICAgICAgIAk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgorCQl9LAorCQkuc2V0ID0gcG8xMDMwX3NldF9ibHVlX2JhbGFuY2UsCisJCS5nZXQgPSBwbzEwMzBfZ2V0X2JsdWVfYmFsYW5jZQorCX0sIHsKKwkJeworCQkJLmlkIAkJPSBWNEwyX0NJRF9IRkxJUCwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgCQk9ICJob3Jpem9udGFsIGZsaXAiLAorCQkJLm1pbmltdW0gCT0gMCwKKwkJCS5tYXhpbXVtIAk9IDEsCisJCQkuc3RlcCAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IDAsCisJCX0sCisJCS5zZXQgPSBwbzEwMzBfc2V0X2hmbGlwLAorCQkuZ2V0ID0gcG8xMDMwX2dldF9oZmxpcAorCX0sIHsKKwkJeworCQkJLmlkIAkJPSBWNEwyX0NJRF9WRkxJUCwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgCQk9ICJ2ZXJ0aWNhbCBmbGlwIiwKKwkJCS5taW5pbXVtIAk9IDAsCisJCQkubWF4aW11bSAJPSAxLAorCQkJLnN0ZXAgCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSAwLAorCQl9LAorCQkuc2V0ID0gcG8xMDMwX3NldF92ZmxpcCwKKwkJLmdldCA9IHBvMTAzMF9nZXRfdmZsaXAKKwl9CisJfSwKKworCS5ubW9kZXMgPSAxLAorCS5tb2RlcyA9IHsKKwl7CisJCU01NjAyX0RFRkFVTFRfRlJBTUVfV0lEVEgsCisJCU01NjAyX0RFRkFVTFRfRlJBTUVfSEVJR0hULAorCQlWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPQorCQkJTTU2MDJfREVGQVVMVF9GUkFNRV9XSURUSCAqIE01NjAyX0RFRkFVTFRfRlJBTUVfSEVJR0hULAorCQkuYnl0ZXNwZXJsaW5lID0gTTU2MDJfREVGQVVMVF9GUkFNRV9XSURUSCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxCisJfQorCX0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHByZWluaXRfcG8xMDMwW11bM10gPQoreworCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfRElWLCAweDAyfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0NUUkwsIDB4YjB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwZH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX0NUUkwsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwY30sCisKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0FVVE9DVFJMMiwgMHgyNH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDR9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDR9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDZ9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBjfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODF9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0gsIDB4ODJ9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDF9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDF9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4ZWN9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4ODd9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDB9LAorCisJe1NFTlNPUiwgUE8xMDMwX1JFR19BVVRPQ1RSTDIsIDB4MjR9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDV9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDA0fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDZ9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4MDZ9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA0fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwY30sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDV9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDAwfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5pdF9wbzEwMzBbXVs0XSA9Cit7CisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19ESVYsIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfQ1RSTCwgMHhiMH0sCisJLypzZXF1ZW5jZSAxKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MGR9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX0NUUkwsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwY30sCisJLyplbmQgb2Ygc2VxdWVuY2UgMSovCisKKwkvKnNlcXVlbmNlIDIgKHNhbWUgYXMgc3RvcCBzZXF1ZW5jZSkqLworCXtTRU5TT1IsIFBPMTAzMF9SRUdfQVVUT0NUUkwyLCAweDI0fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDR9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMn0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKKwkvKmVuZCBvZiBzZXF1ZW5jZSAyKi8KKworCS8qc2VxdWVuY2UgNSovCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDZ9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBjfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODF9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0gsIDB4ODJ9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDF9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDF9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4ZWN9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4ODd9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDB9LAorCS8qZW5kIG9mIHNlcXVlbmNlIDUqLworCisJLypzZXF1ZW5jZSAyIHN0b3AgKi8KKwl7U0VOU09SLCBQTzEwMzBfUkVHX0FVVE9DVFJMMiwgMHgyNH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDR9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDR9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJLyplbmQgb2Ygc2VxdWVuY2UgMiBzdG9wICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogZW5kIG9mIGluaXQgLSBiZWdpbiBvZiBzdGFydAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKwkvKnNlcXVlbmNlIDMqLworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwY30sCisJLyplbmQgb2Ygc2VxdWVuY2UgMyovCisJLypzZXF1ZW5jZSA0Ki8KKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweDAwfSwKKworCXtTRU5TT1IsIFBPMTAzMF9SRUdfQVVUT0NUUkwyLCAweDA0fSwKKworCS8qIFNldCB0aGUgd2lkdGggdG8gNzUxICovCisJe1NFTlNPUiwgUE8xMDMwX1JFR19GUkFNRVdJRFRIX0gsIDB4MDJ9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfRlJBTUVXSURUSF9MLCAweGVmfSwKKworCS8qIFNldCB0aGUgaGVpZ2h0IHRvIDU0MCAqLworCXtTRU5TT1IsIFBPMTAzMF9SRUdfRlJBTUVIRUlHSFRfSCwgMHgwMn0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19GUkFNRUhFSUdIVF9MLCAweDFjfSwKKworCS8qIFNldCB0aGUgeCB3aW5kb3cgdG8gMSAqLworCXtTRU5TT1IsIFBPMTAzMF9SRUdfV0lORE9XWF9ILCAweDAwfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX1dJTkRPV1hfTCwgMHgwMX0sCisKKwkvKiBTZXQgdGhlIHkgd2luZG93IHRvIDEgKi8KKwl7U0VOU09SLCBQTzEwMzBfUkVHX1dJTkRPV1lfSCwgMHgwMH0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19XSU5ET1dZX0wsIDB4MDF9LAorCisJe1NFTlNPUiwgUE8xMDMwX1JFR19XSU5ET1dXSURUSF9ILCAweDAyfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX1dJTkRPV1dJRFRIX0wsIDB4ODd9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfV0lORE9XSEVJR0hUX0gsIDB4MDF9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfV0lORE9XSEVJR0hUX0wsIDB4ZTN9LAorCisJe1NFTlNPUiwgUE8xMDMwX1JFR19PVVRGT1JNQ1RSTDIsIDB4MDR9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfT1VURk9STUNUUkwyLCAweDA0fSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0FVVE9DVFJMMSwgMHgwOH0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19DT05UUk9MMiwgMHgwM30sCisJe1NFTlNPUiwgMHgyMSwgMHg5MH0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19ZVEFSR0VULCAweDYwfSwKKwl7U0VOU09SLCAweDU5LCAweDEzfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX09VVEZPUk1DVFJMMSwgMHg0MH0sCisJe1NFTlNPUiwgMHg1ZiwgMHgwMH0sCisJe1NFTlNPUiwgMHg2MCwgMHg4MH0sCisJe1NFTlNPUiwgMHg3OCwgMHgxNH0sCisJe1NFTlNPUiwgMHg2ZiwgMHgwMX0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19DT05UUk9MMSwgMHgxOH0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19HTE9CQUxHQUlOTUFYLCAweDE0fSwKKwl7U0VOU09SLCAweDYzLCAweDM4fSwKKwl7U0VOU09SLCAweDY0LCAweDM4fSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0NPTlRST0wxLCAweDU4fSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX1JFRF9HQUlOLCAweDMwfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0dSRUVOXzFfR0FJTiwgMHgzMH0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19CTFVFX0dBSU4sIDB4MzB9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfR1JFRU5fMl9HQUlOLCAweDMwfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0dDMCwgMHgxMH0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19HQzEsIDB4MjB9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfR0MyLCAweDQwfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0dDMywgMHg2MH0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19HQzQsIDB4ODB9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfR0M1LCAweGEwfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0dDNiwgMHhjMH0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19HQzcsIDB4ZmZ9LAorCS8qZW5kIG9mIHNlcXVlbmNlIDQqLworCS8qc2VxdWVuY2UgNSovCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDZ9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBjfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODF9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0gsIDB4ODJ9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDF9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDF9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4ZWN9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4N2V9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDB9LAorCS8qZW5kIG9mIHNlcXVlbmNlIDUqLworCisJLypzZXF1ZW5jZSA2Ki8KKwkvKiBDaGFuZ2luZyA0MCBpbiBmMCB0aGUgaW1hZ2UgYmVjb21lcyBncmVlbiBpbiBiYXllciBtb2RlIGFuZCByZWQgaW4KKwkgKiByZ2IgbW9kZSAqLworCXtTRU5TT1IsIFBPMTAzMF9SRUdfUkVEX0dBSU4sIFBPMTAzMF9SRURfR0FJTl9ERUZBVUxUfSwKKwkvKiBpbiBjaGFuZ2luZyA0MCBpbiBmMCB0aGUgaW1hZ2UgYmVjb21lcyBncmVlbiBpbiBiYXllciBtb2RlIGFuZCByZWQgaW4KKwkgKiByZ2IgbW9kZSAqLworCXtTRU5TT1IsIFBPMTAzMF9SRUdfQkxVRV9HQUlOLCBQTzEwMzBfQkxVRV9HQUlOX0RFRkFVTFR9LAorCisJLyogd2l0aCBhIHZlcnkgbG93IGxpZ2h0ZWQgZW52aXJvbm1lbnQgaW5jcmVhc2UgdGhlIGV4cG9zdXJlIGJ1dAorCSAqIGRlY3JlYXNlIHRoZSBGUFMgKEZyYW1lIFBlciBTZWNvbmQpICovCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisKKwkvKiBDb250cm9scyBoaWdoIGV4cG9zdXJlIG1vcmUgdGhhbiBTRU5TT1JfTE9XX0VYUE9TVVJFLCB1c2Ugb25seSBpbgorCSAqIGxvdyBsaWdodGVkIGVudmlyb25tZW50IChmMCBpcyBtb3JlIHRoYW4gZmYgPykqLworCXtTRU5TT1IsIFBPMTAzMF9SRUdfSU5URUdMSU5FU19ILCAoKFBPMTAzMF9FWFBPU1VSRV9ERUZBVUxUID4+IDIpCisJCSYgMHhmZil9LAorCisJLyogQ29udHJvbHMgbWlkZGxlIGV4cG9zdXJlLCB1c2Ugb25seSBpbiBoaWdoIGxpZ2h0ZWQgZW52aXJvbm1lbnQgKi8KKwl7U0VOU09SLCBQTzEwMzBfUkVHX0lOVEVHTElORVNfTSwgUE8xMDMwX0VYUE9TVVJFX0RFRkFVTFQgJiAweGZmfSwKKworCS8qIENvbnRyb2xzIGNsYXJpdHkgKG5vdCBzdXJlKSAqLworCXtTRU5TT1IsIFBPMTAzMF9SRUdfSU5URUdMSU5FU19MLCAweDAwfSwKKwkvKiBDb250cm9scyBnYWluICh0aGUgaW1hZ2UgaXMgbW9yZSBsaWdodGVkKSAqLworCXtTRU5TT1IsIFBPMTAzMF9SRUdfR0xPQkFMR0FJTiwgUE8xMDMwX0dMT0JBTF9HQUlOX0RFRkFVTFR9LAorCisJLyogU2V0cyB0aGUgd2lkdGggKi8KKwl7U0VOU09SLCBQTzEwMzBfUkVHX0ZSQU1FV0lEVEhfSCwgMHgwMn0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19GUkFNRVdJRFRIX0wsIDB4ZWZ9CisJLyplbmQgb2Ygc2VxdWVuY2UgNiovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YjFlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCkBAIC0wLDAgKzEsNDYzIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgczVrNGFhIHNlbnNvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgorICoKKyAqIFBvcnRpb25zIG9mIGNvZGUgdG8gVVNCIGludGVyZmFjZSBhbmQgQUxpIGRyaXZlciBzb2Z0d2FyZSwKKyAqIENvcHlyaWdodCAoYykgMjAwNiBXaWxsZW0gRHVpbmtlcgorICogdjRsMiBpbnRlcmZhY2UgbW9kZWxlZCBhZnRlciB0aGUgVjRMMiBkcml2ZXIKKyAqIGZvciBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAibTU2MDJfczVrNGFhLmgiCisKK2ludCBzNWs0YWFfcHJvYmUoc3RydWN0IHNkICpzZCkKK3sKKwl1OCBwcm9kX2lkWzZdID0gezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworCWNvbnN0IHU4IGV4cGVjdGVkX3Byb2RfaWRbNl0gPSB7MHgwMCwgMHgxMCwgMHgwMCwgMHg0YiwgMHgzMywgMHg3NX07CisJaW50IGksIGVyciA9IDA7CisKKwlpZiAoZm9yY2Vfc2Vuc29yKSB7CisJCWlmIChmb3JjZV9zZW5zb3IgPT0gUzVLNEFBX1NFTlNPUikgeworCQkJaW5mbygiRm9yY2luZyBhICVzIHNlbnNvciIsIHM1azRhYS5uYW1lKTsKKwkJCWdvdG8gc2Vuc29yX2ZvdW5kOworCQl9CisJCS8qIElmIHdlIHdhbnQgdG8gZm9yY2UgYW5vdGhlciBzZW5zb3IsIGRvbid0IHRyeSB0byBwcm9iZSB0aGlzCisJCSAqIG9uZSAqLworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpbmZvKCJQcm9iaW5nIGZvciBhIHM1azRhYSBzZW5zb3IiKTsKKworCS8qIFByZWluaXQgdGhlIHNlbnNvciAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWluaXRfczVrNGFhKSAmJiAhZXJyOyBpKyspIHsKKwkJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKKworCQlzd2l0Y2ggKHByZWluaXRfczVrNGFhW2ldWzBdKSB7CisJCWNhc2UgQlJJREdFOgorCQkJZXJyID0gbTU2MDJfd3JpdGVfYnJpZGdlKHNkLAorCQkJCQkJIHByZWluaXRfczVrNGFhW2ldWzFdLAorCQkJCQkJIHByZWluaXRfczVrNGFhW2ldWzJdKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0VOU09SOgorCQkJZGF0YVswXSA9IHByZWluaXRfczVrNGFhW2ldWzJdOworCQkJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwKKwkJCQkJCSAgcHJlaW5pdF9zNWs0YWFbaV1bMV0sCisJCQkJCQkgIGRhdGEsIDEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTRU5TT1JfTE9ORzoKKwkJCWRhdGFbMF0gPSBwcmVpbml0X3M1azRhYVtpXVsyXTsKKwkJCWRhdGFbMV0gPSBwcmVpbml0X3M1azRhYVtpXVszXTsKKwkJCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsCisJCQkJCQkgIHByZWluaXRfczVrNGFhW2ldWzFdLAorCQkJCQkJICBkYXRhLCAyKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaW5mbygiSW52YWxpZCBzdHJlYW0gY29tbWFuZCwgZXhpdGluZyBpbml0Iik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIFRlc3Qgc29tZSByZWdpc3RlcnMsIGJ1dCB3ZSBkb24ndCBrbm93IHRoZWlyIGV4YWN0IG1lYW5pbmcgeWV0ICovCisJaWYgKHM1azRhYV9yZWFkX3NlbnNvcihzZCwgMHgwMCwgcHJvZF9pZCwgc2l6ZW9mKHByb2RfaWQpKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAobWVtY21wKHByb2RfaWQsIGV4cGVjdGVkX3Byb2RfaWQsIHNpemVvZihwcm9kX2lkKSkpCisJCXJldHVybiAtRU5PREVWOworCWVsc2UKKwkJaW5mbygiRGV0ZWN0ZWQgYSBzNWs0YWEgc2Vuc29yIik7CitzZW5zb3JfZm91bmQ6CisJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBzNWs0YWEubW9kZXM7CisJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gczVrNGFhLm5tb2RlczsKKwlzZC0+ZGVzYy0+Y3RybHMgPSBzNWs0YWEuY3RybHM7CisJc2QtPmRlc2MtPm5jdHJscyA9IHM1azRhYS5uY3RybHM7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHM1azRhYV9yZWFkX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkgICAgICAgdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pCit7CisJaW50IGVyciwgaTsKKworCWRvIHsKKwkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19TVEFUVVMsIGkyY19kYXRhKTsKKwl9IHdoaWxlICgoKmkyY19kYXRhICYgSTJDX0JVU1kpICYmICFlcnIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLAorCQkJCSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCBhZGRyZXNzKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19DVFJMLCAweDE4ICsgbGVuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlkbyB7CisJCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfU1RBVFVTLCBpMmNfZGF0YSk7CisJfSB3aGlsZSAoKCppMmNfZGF0YSAmIEkyQ19CVVNZKSAmJiAhZXJyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlmb3IgKGkgPSAwOyAoaSA8IGxlbikgJiAhZXJyOyBpKyspIHsKKwkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19EQVRBLCAmKGkyY19kYXRhW2ldKSk7CisKKwkJUERFQlVHKERfQ09ORiwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKKwkJCQkgICIweCV4IGNvbnRhaW5pbmcgMHgleCAiLCBhZGRyZXNzLCAqaTJjX2RhdGEpOworCX0KK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azRhYV93cml0ZV9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJCXU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKQoreworCWludCBlcnIsIGk7CisJdTggKnA7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZC0+Z3NwY2FfZGV2LmRldjsKKwlfX3U4ICpidWYgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWY7CisKKwkvKiBObyBzZW5zb3Igd2l0aCBhIGRhdGEgd2lkdGggbGFyZ2VyIHRoYW4gMTYgYml0cyBoYXMgeWV0IGJlZW4gc2VlbiAqLworCWlmIChsZW4gPiAyIHx8ICFsZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KGJ1Ziwgc2Vuc29yX3VyYl9za2VsZXRvbiwKKwkgICAgICAgc2l6ZW9mKHNlbnNvcl91cmJfc2tlbGV0b24pKTsKKworCWJ1ZlsxMV0gPSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQ7CisJYnVmWzE1XSA9IGFkZHJlc3M7CisKKwkvKiBTcGVjaWFsIGNhc2UgbGFyZ2VyIHNlbnNvciB3cml0ZXMgKi8KKwlwID0gYnVmICsgMTY7CisKKwkvKiBDb3B5IGEgZm91ciBieXRlIHdyaXRlIHNlcXVlbmNlIGZvciBlYWNoIGJ5dGUgdG8gYmUgd3JpdHRlbiB0byAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDE2LCA0KTsKKwkJcFszXSA9IGkyY19kYXRhW2ldOworCQlwICs9IDQ7CisJCVBERUJVRyhEX0NPTkYsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCisJCSAgICAgICBhZGRyZXNzLCBpMmNfZGF0YVtpXSk7CisJfQorCisJLyogQ29weSB0aGUgdGFpbGVyICovCisJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAyMCwgNCk7CisKKwkvKiBTZXQgdGhlIHRvdGFsIGxlbmd0aCAqLworCXBbM10gPSAweDEwICsgbGVuOworCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDQsIDB4NDAsIDB4MTksCisJCQkgICAgICAweDAwMDAsIGJ1ZiwKKwkJCSAgICAgIDIwICsgbGVuICogNCwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrNGFhX2luaXQoc3RydWN0IHNkICpzZCkKK3sKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXRfczVrNGFhKSAmJiAhZXJyOyBpKyspIHsKKwkJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKKworCQlzd2l0Y2ggKGluaXRfczVrNGFhW2ldWzBdKSB7CisJCWNhc2UgQlJJREdFOgorCQkJZXJyID0gbTU2MDJfd3JpdGVfYnJpZGdlKHNkLAorCQkJCWluaXRfczVrNGFhW2ldWzFdLAorCQkJCWluaXRfczVrNGFhW2ldWzJdKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0VOU09SOgorCQkJZGF0YVswXSA9IGluaXRfczVrNGFhW2ldWzJdOworCQkJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwKKwkJCQlpbml0X3M1azRhYVtpXVsxXSwgZGF0YSwgMSk7CisJCQlicmVhazsKKworCQljYXNlIFNFTlNPUl9MT05HOgorCQkJZGF0YVswXSA9IGluaXRfczVrNGFhW2ldWzJdOworCQkJZGF0YVsxXSA9IGluaXRfczVrNGFhW2ldWzNdOworCQkJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwKKwkJCQlpbml0X3M1azRhYVtpXVsxXSwgZGF0YSwgMik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWluZm8oIkludmFsaWQgc3RyZWFtIGNvbW1hbmQsIGV4aXRpbmcgaW5pdCIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlpZiAoZHVtcF9zZW5zb3IpCisJCXM1azRhYV9kdW1wX3JlZ2lzdGVycyhzZCk7CisKKwlpZiAoIWVyciAmJiBkbWlfY2hlY2tfc3lzdGVtKHM1azRhYV92ZmxpcF9kbWlfdGFibGUpKSB7CisJCXU4IGRhdGEgPSAweDAyOworCQlpbmZvKCJ2ZXJ0aWNhbCBmbGlwIHF1aXJrIGFjdGl2ZSIpOworCQlzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKKwkJczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfUkVBRF9NT0RFLCAmZGF0YSwgMSk7CisJCWRhdGEgfD0gUzVLNEFBX1JNX1ZfRkxJUDsKKwkJZGF0YSAmPSB+UzVLNEFBX1JNX0hfRkxJUDsKKwkJczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1JFQURfTU9ERSwgJmRhdGEsIDEpOworCisJCS8qIERlY3JlbWVudCBDT0xTVEFSVCB0byBwcmVzZXJ2ZSBjb2xvciBvcmRlciAoQkdHUikgKi8KKwkJczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfQ09MU1RBUlRfTE8sICZkYXRhLCAxKTsKKwkJZGF0YS0tOworCQlzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfQ09MU1RBUlRfTE8sICZkYXRhLCAxKTsKKworCQkvKiBJbmNyZW1lbnQgUk9XU1RBUlQgdG8gcHJlc2VydmUgY29sb3Igb3JkZXIgKEJHR1IpICovCisJCXM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX1JPV1NUQVJUX0xPLCAmZGF0YSwgMSk7CisJCWRhdGErKzsKKwkJczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1JPV1NUQVJUX0xPLCAmZGF0YSwgMSk7CisJfQorCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs0YWFfcG93ZXJfZG93bihzdHJ1Y3Qgc2QgKnNkKQoreworCXJldHVybiAwOworfQorCitpbnQgczVrNGFhX2dldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGRhdGEgPSBTNUs0QUFfUEFHRV9NQVBfMjsKKwlpbnQgZXJyOworCisJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJZXJyID0gczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfRVhQT1NVUkVfSEksICZkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwkqdmFsID0gZGF0YSA8PCA4OworCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX0VYUE9TVVJFX0xPLCAmZGF0YSwgMSk7CisJKnZhbCB8PSBkYXRhOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGV4cG9zdXJlICVkIiwgKnZhbCk7CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs0YWFfc2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBkYXRhID0gUzVLNEFBX1BBR0VfTUFQXzI7CisJaW50IGVycjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgZXhwb3N1cmUgdG8gJWQiLCB2YWwpOworCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKwlkYXRhID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX0VYUE9TVVJFX0hJLCAmZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCWRhdGEgPSB2YWwgJiAweGZmOworCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9FWFBPU1VSRV9MTywgJmRhdGEsIDEpOworb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrNGFhX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGRhdGEgPSBTNUs0QUFfUEFHRV9NQVBfMjsKKwlpbnQgZXJyOworCisJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJZXJyID0gczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKKwkqdmFsID0gKGRhdGEgJiBTNUs0QUFfUk1fVl9GTElQKSA+PiA3OworCVBERUJVRyhEX1Y0TDIsICJSZWFkIHZlcnRpY2FsIGZsaXAgJWQiLCAqdmFsKTsKKworb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrNGFhX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggZGF0YSA9IFM1SzRBQV9QQUdFX01BUF8yOworCWludCBlcnI7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IHZlcnRpY2FsIGZsaXAgdG8gJWQiLCB2YWwpOworCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKwllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUkVBRF9NT0RFLCAmZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCWRhdGEgPSAoKGRhdGEgJiB+UzVLNEFBX1JNX1ZfRkxJUCkKKwkJCXwgKCh2YWwgJiAweDAxKSA8PCA3KSk7CisJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1JFQURfTU9ERSwgJmRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWlmICh2YWwpIHsKKwkJZXJyID0gczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfUk9XU1RBUlRfTE8sICZkYXRhLCAxKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dDsKKworCQlkYXRhKys7CisJCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9ST1dTVEFSVF9MTywgJmRhdGEsIDEpOworCX0gZWxzZSB7CisJCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX1JPV1NUQVJUX0xPLCAmZGF0YSwgMSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJZGF0YS0tOworCQllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUk9XU1RBUlRfTE8sICZkYXRhLCAxKTsKKwl9CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs0YWFfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggZGF0YSA9IFM1SzRBQV9QQUdFX01BUF8yOworCWludCBlcnI7CisKKwllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOworCSp2YWwgPSAoZGF0YSAmIFM1SzRBQV9STV9IX0ZMSVApID4+IDY7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs0YWFfc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBkYXRhID0gUzVLNEFBX1BBR0VfTUFQXzI7CisJaW50IGVycjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgaG9yaXpvbnRhbCBmbGlwIHRvICVkIiwKKwkgICAgICAgdmFsKTsKKwllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1JFQURfTU9ERSwgJmRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWRhdGEgPSAoKGRhdGEgJiB+UzVLNEFBX1JNX0hfRkxJUCkgfCAoKHZhbCAmIDB4MDEpIDw8IDYpKTsKKwllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUkVBRF9NT0RFLCAmZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKHZhbCkgeworCQllcnIgPSBzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9DT0xTVEFSVF9MTywgJmRhdGEsIDEpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0OworCQlkYXRhKys7CisJCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9DT0xTVEFSVF9MTywgJmRhdGEsIDEpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX0NPTFNUQVJUX0xPLCAmZGF0YSwgMSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXQ7CisJCWRhdGEtLTsKKwkJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX0NPTFNUQVJUX0xPLCAmZGF0YSwgMSk7CisJfQorb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrNGFhX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggZGF0YSA9IFM1SzRBQV9QQUdFX01BUF8yOworCWludCBlcnI7CisKKwllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9HQUlOXzIsICZkYXRhLCAxKTsKKwkqdmFsID0gZGF0YTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBnYWluICVkIiwgKnZhbCk7CisKK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azRhYV9zZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggZGF0YSA9IFM1SzRBQV9QQUdFX01BUF8yOworCWludCBlcnI7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGdhaW4gdG8gJWQiLCB2YWwpOworCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWRhdGEgPSB2YWwgJiAweGZmOworCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9HQUlOXzIsICZkYXRhLCAxKTsKKworb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCit2b2lkIHM1azRhYV9kdW1wX3JlZ2lzdGVycyhzdHJ1Y3Qgc2QgKnNkKQoreworCWludCBhZGRyZXNzOworCXU4IHBhZ2UsIG9sZF9wYWdlOworCXM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmb2xkX3BhZ2UsIDEpOworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCAxNjsgcGFnZSsrKSB7CisJCXM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJnBhZ2UsIDEpOworCQlpbmZvKCJEdW1waW5nIHRoZSBzNWs0YWEgcmVnaXN0ZXIgc3RhdGUgZm9yIHBhZ2UgMHgleCIsIHBhZ2UpOworCQlmb3IgKGFkZHJlc3MgPSAwOyBhZGRyZXNzIDw9IDB4ZmY7IGFkZHJlc3MrKykgeworCQkJdTggdmFsdWUgPSAwOworCQkJczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmdmFsdWUsIDEpOworCQkJaW5mbygicmVnaXN0ZXIgMHgleCBjb250YWlucyAweCV4IiwKKwkJCSAgICAgYWRkcmVzcywgdmFsdWUpOworCQl9CisJfQorCWluZm8oInM1azRhYSByZWdpc3RlciBzdGF0ZSBkdW1wIGNvbXBsZXRlIik7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgMTY7IHBhZ2UrKykgeworCQlzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZwYWdlLCAxKTsKKwkJaW5mbygiUHJvYmluZyBmb3Igd2hpY2ggcmVnaXN0ZXJzIHRoYXQgYXJlICIKKwkJICAgICAicmVhZC93cml0ZSBmb3IgcGFnZSAweCV4IiwgcGFnZSk7CisJCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPD0gMHhmZjsgYWRkcmVzcysrKSB7CisJCQl1OCBvbGRfdmFsdWUsIGN0cmxfdmFsdWUsIHRlc3RfdmFsdWUgPSAweGZmOworCisJCQlzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsdWUsIDEpOworCQkJczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgYWRkcmVzcywgJnRlc3RfdmFsdWUsIDEpOworCQkJczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmY3RybF92YWx1ZSwgMSk7CisKKwkJCWlmIChjdHJsX3ZhbHVlID09IHRlc3RfdmFsdWUpCisJCQkJaW5mbygicmVnaXN0ZXIgMHgleCBpcyB3cml0ZWFibGUiLCBhZGRyZXNzKTsKKwkJCWVsc2UKKwkJCQlpbmZvKCJyZWdpc3RlciAweCV4IGlzIHJlYWQgb25seSIsIGFkZHJlc3MpOworCisJCQkvKiBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlICovCisJCQlzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBhZGRyZXNzLCAmb2xkX3ZhbHVlLCAxKTsKKwkJfQorCX0KKwlpbmZvKCJSZWFkL3dyaXRlIHJlZ2lzdGVyIHByb2JpbmcgY29tcGxldGUiKTsKKwlzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZvbGRfcGFnZSwgMSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWVmNjc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuaApAQCAtMCwwICsxLDM2OSBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIHM1azRhYSBzZW5zb3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KKyAqCisgKiBQb3J0aW9ucyBvZiBjb2RlIHRvIFVTQiBpbnRlcmZhY2UgYW5kIEFMaSBkcml2ZXIgc29mdHdhcmUsCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgV2lsbGVtIER1aW5rZXIKKyAqIHY0bDIgaW50ZXJmYWNlIG1vZGVsZWQgYWZ0ZXIgdGhlIFY0TDIgZHJpdmVyCisgKiBmb3IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBNNTYwMl9TNUs0QUFfSF8KKyNkZWZpbmUgTTU2MDJfUzVLNEFBX0hfCisKKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKworI2luY2x1ZGUgIm01NjAyX3NlbnNvci5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgUzVLNEFBX1BBR0VfTUFQCQkJMHhlYworCisjZGVmaW5lIFM1SzRBQV9QQUdFX01BUF8wCQkweDAwCisjZGVmaW5lIFM1SzRBQV9QQUdFX01BUF8xCQkweDAxCisjZGVmaW5lIFM1SzRBQV9QQUdFX01BUF8yCQkweDAyCisKKy8qIFNlbnNvciByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgcGFnZSAweDAyICovCisjZGVmaW5lIFM1SzRBQV9SRUFEX01PREUJCTB4MDMKKyNkZWZpbmUgUzVLNEFBX1JPV1NUQVJUX0hJCQkweDA0CisjZGVmaW5lIFM1SzRBQV9ST1dTVEFSVF9MTwkJMHgwNQorI2RlZmluZSBTNUs0QUFfQ09MU1RBUlRfSEkJCTB4MDYKKyNkZWZpbmUgUzVLNEFBX0NPTFNUQVJUX0xPCQkweDA3CisjZGVmaW5lIFM1SzRBQV9XSU5ET1dfSEVJR0hUX0hJCQkweDA4CisjZGVmaW5lIFM1SzRBQV9XSU5ET1dfSEVJR0hUX0xPCQkweDA5CisjZGVmaW5lIFM1SzRBQV9XSU5ET1dfV0lEVEhfSEkJCTB4MGEKKyNkZWZpbmUgUzVLNEFBX1dJTkRPV19XSURUSF9MTwkJMHgwYgorI2RlZmluZSBTNUs0QUFfR0xPQkFMX0dBSU5fXwkJMHgwZiAvKiBPbmx5IGEgZ3Vlc3MgQVRNICEhISAqLworI2RlZmluZSBTNUs0QUFfSF9CTEFOS19ISV9fCQkweDFkIC8qIE9ubHkgYSBndWVzcyBBVE0gISEhIHN5bmMgbG9zdAorCQkJCQkJaWYgdG9vIGxvdywgcmVkdWNlcyBmcmFtZSByYXRlCisJCQkJCQlpZiB0b28gaGlnaCAqLworI2RlZmluZSBTNUs0QUFfSF9CTEFOS19MT19fCQkweDFlIC8qIE9ubHkgYSBndWVzcyBBVE0gISEhICovCisjZGVmaW5lIFM1SzRBQV9FWFBPU1VSRV9ISQkJMHgxNworI2RlZmluZSBTNUs0QUFfRVhQT1NVUkVfTE8JCTB4MTgKKyNkZWZpbmUgUzVLNEFBX0dBSU5fMQkJCTB4MWYgLyogKGRpZ2l0YWw/KSBnYWluIDogNSBiaXRzICovCisjZGVmaW5lIFM1SzRBQV9HQUlOXzIJCQkweDIwIC8qIChhbmFsb2d1ZT8pIGdhaW4gOiA3IGJpdHMgKi8KKworI2RlZmluZSBTNUs0QUFfUk1fUk9XX1NLSVBfNFgJCTB4MDgKKyNkZWZpbmUgUzVLNEFBX1JNX1JPV19TS0lQXzJYCQkweDA0CisjZGVmaW5lIFM1SzRBQV9STV9DT0xfU0tJUF80WAkJMHgwMgorI2RlZmluZSBTNUs0QUFfUk1fQ09MX1NLSVBfMlgJCTB4MDEKKyNkZWZpbmUgUzVLNEFBX1JNX0hfRkxJUAkJMHg0MAorI2RlZmluZSBTNUs0QUFfUk1fVl9GTElQCQkweDgwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXJzICovCitleHRlcm4gaW50IGZvcmNlX3NlbnNvcjsKK2V4dGVybiBpbnQgZHVtcF9zZW5zb3I7CisKK2ludCBzNWs0YWFfcHJvYmUoc3RydWN0IHNkICpzZCk7CitpbnQgczVrNGFhX2luaXQoc3RydWN0IHNkICpzZCk7CitpbnQgczVrNGFhX3Bvd2VyX2Rvd24oc3RydWN0IHNkICpzZCk7CisKK3ZvaWQgczVrNGFhX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpOworCitpbnQgczVrNGFhX3JlYWRfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCSAgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7CitpbnQgczVrNGFhX3dyaXRlX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkJdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pOworCitpbnQgczVrNGFhX2dldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IHM1azRhYV9zZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IHM1azRhYV9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBzNWs0YWFfc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBzNWs0YWFfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgczVrNGFhX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgczVrNGFhX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgczVrNGFhX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKKworc3RhdGljIHN0cnVjdCBtNTYwMl9zZW5zb3IgczVrNGFhID0geworCS5uYW1lID0gIlM1SzRBQSIsCisJLnByb2JlID0gczVrNGFhX3Byb2JlLAorCS5pbml0ID0gczVrNGFhX2luaXQsCisJLnBvd2VyX2Rvd24gPSBzNWs0YWFfcG93ZXJfZG93biwKKwkucmVhZF9zZW5zb3IgPSBzNWs0YWFfcmVhZF9zZW5zb3IsCisJLndyaXRlX3NlbnNvciA9IHM1azRhYV93cml0ZV9zZW5zb3IsCisJLmkyY19zbGF2ZV9pZCA9IDB4NWEsCisJLm5jdHJscyA9IDQsCisJLmN0cmxzID0geworCXsKKwkJeworCQkJLmlkIAkJPSBWNEwyX0NJRF9WRkxJUCwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgCQk9ICJ2ZXJ0aWNhbCBmbGlwIiwKKwkJCS5taW5pbXVtIAk9IDAsCisJCQkubWF4aW11bSAJPSAxLAorCQkJLnN0ZXAgCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSAwCisJCX0sCisJCS5zZXQgPSBzNWs0YWFfc2V0X3ZmbGlwLAorCQkuZ2V0ID0gczVrNGFhX2dldF92ZmxpcAorCisJfSwgeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX0hGTElQLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAJCT0gImhvcml6b250YWwgZmxpcCIsCisJCQkubWluaW11bSAJPSAwLAorCQkJLm1heGltdW0gCT0gMSwKKwkJCS5zdGVwIAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMAorCQl9LAorCQkuc2V0ID0gczVrNGFhX3NldF9oZmxpcCwKKwkJLmdldCA9IHM1azRhYV9nZXRfaGZsaXAKKworCX0sIHsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ0lEX0dBSU4sCisJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUJCT0gIkdhaW4iLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSAxMjcsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUJPSAweGEwLAorCQkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgorCQl9LAorCQkuc2V0ID0gczVrNGFhX3NldF9nYWluLAorCQkuZ2V0ID0gczVrNGFhX2dldF9nYWluCisJfSwgeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfRVhQT1NVUkUsCisJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUJCT0gIkV4cG9zdXJlIiwKKwkJCS5taW5pbXVtCT0gMTMsCisJCQkubWF4aW11bQk9IDB4ZmZmLAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlCT0gMHgxMDAsCisJCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBzNWs0YWFfc2V0X2V4cG9zdXJlLAorCQkuZ2V0ID0gczVrNGFhX2dldF9leHBvc3VyZQorCX0KKwl9LAorCisJLm5tb2RlcyA9IDEsCisJLm1vZGVzID0geworCXsKKwkJTTU2MDJfREVGQVVMVF9GUkFNRV9XSURUSCwKKwkJTTU2MDJfREVGQVVMVF9GUkFNRV9IRUlHSFQsCisJCVY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCVY0TDJfRklFTERfTk9ORSwKKwkJLnNpemVpbWFnZSA9CisJCQlNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRIICogTTU2MDJfREVGQVVMVF9GUkFNRV9IRUlHSFQsCisJCS5ieXRlc3BlcmxpbmUgPSBNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRILAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDEKKwl9CisJfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHJlaW5pdF9zNWs0YWFbXVs0XSA9Cit7CisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19ESVYsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfQ1RSTCwgMHgwMCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgxZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDgsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4ODAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgzZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgzZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MWQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0RJViwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgxZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MTQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4ZjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDFkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgxYywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DTEtfRElWLCAweDIwLCAweDAwfSwKKworCXtTRU5TT1IsIFM1SzRBQV9QQUdFX01BUCwgMHgwMCwgMHgwMH0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGluaXRfczVrNGFhW11bNF0gPQoreworCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfRElWLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX0NUUkwsIDB4MDAsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MWQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDA4LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweDgwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4M2YsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4M2YsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDFkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9MLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDgsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19ESVYsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MWQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDE0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGYwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgxZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MWMsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ0xLX0RJViwgMHgyMCwgMHgwMH0sCisKKwl7U0VOU09SLCBTNUs0QUFfUEFHRV9NQVAsIDB4MDcsIDB4MDB9LAorCXtTRU5TT1IsIDB4MzYsIDB4MDEsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg3YiwgMHhmZiwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX1BBR0VfTUFQLCAweDAyLCAweDAwfSwKKwl7U0VOU09SLCAweDBjLCAweDA1LCAweDAwfSwKKwl7U0VOU09SLCAweDAyLCAweDBlLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfR0FJTl8xLCAweDBmLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfR0FJTl8yLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfR0xPQkFMX0dBSU5fXywgMHgwMSwgMHgwMH0sCisJe1NFTlNPUiwgMHgxMSwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxMiwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX1BBR0VfTUFQLCAweDAyLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfUkVBRF9NT0RFLCAweGEwLCAweDAwfSwKKwl7U0VOU09SLCAweDM3LCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfUk9XU1RBUlRfSEksIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9ST1dTVEFSVF9MTywgMHgyYSwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX0NPTFNUQVJUX0hJLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfQ09MU1RBUlRfTE8sIDB4MGIsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9XSU5ET1dfSEVJR0hUX0hJLCAweDAzLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfV0lORE9XX0hFSUdIVF9MTywgMHhjNCwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX1dJTkRPV19XSURUSF9ISSwgMHgwNSwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX1dJTkRPV19XSURUSF9MTywgMHgwOCwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX0hfQkxBTktfSElfXywgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX0hfQkxBTktfTE9fXywgMHg0OCwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX0VYUE9TVVJFX0hJLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfRVhQT1NVUkVfTE8sIDB4NDMsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTEsIDB4MDQsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTIsIDB4YzMsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9QQUdFX01BUCwgMHgwMiwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDgsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0xJTkVfT0ZfRlJBTUVfSCwgMHg4MSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfUElYX09GX0xJTkVfSCwgMHg4MiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJLyogVlNZTkNfUEFSQSwgVlNZTkNfUEFSQSA6IGltZyBoZWlnaHQgNDgwID0gMHgwMWUwICovCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHhlMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJLyogSFNZTkNfUEFSQSwgSFNZTkNfUEFSQSA6IGltZyB3aWR0aCA2NDAgPSAweDAyODAgKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDgwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGEwLCAweDAwfSwgLyogNDggTUh6ICovCisKKwl7U0VOU09SLCBTNUs0QUFfUEFHRV9NQVAsIDB4MDIsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9SRUFEX01PREUsIFM1SzRBQV9STV9IX0ZMSVAgfCBTNUs0QUFfUk1fUk9XX1NLSVBfMlgKKwkJfCBTNUs0QUFfUk1fQ09MX1NLSVBfMlgsIDB4MDB9LAorCS8qIDB4MzcgOiBGaXggaW1hZ2Ugc3RhYmlsaXR5IHdoZW4gbGlnaHQgaXMgdG9vIGJyaWdodCBhbmQgaW1wcm92ZXMKKwkgKiBpbWFnZSBxdWFsaXR5IGluIDY0MHg0ODAsIGJ1dCB3b3JzZW5zIGl0IGluIDEyODB4MTAyNCAqLworCXtTRU5TT1IsIDB4MzcsIDB4MDEsIDB4MDB9LAorCS8qIFJPV1NUQVJUX0hJLCBST1dTVEFSVF9MTyA6IDEwICsgKDEwMjQtOTYwKS8yID0gNDIgPSAweDAwMmEgKi8KKwl7U0VOU09SLCBTNUs0QUFfUk9XU1RBUlRfSEksIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9ST1dTVEFSVF9MTywgMHgyYSwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX0NPTFNUQVJUX0hJLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfQ09MU1RBUlRfTE8sIDB4MGMsIDB4MDB9LAorCS8qIHdpbmRvd19oZWlnaHRfaGksIHdpbmRvd19oZWlnaHRfbG8gOiA5NjAgPSAweDAzYzAgKi8KKwl7U0VOU09SLCBTNUs0QUFfV0lORE9XX0hFSUdIVF9ISSwgMHgwMywgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX1dJTkRPV19IRUlHSFRfTE8sIDB4YzAsIDB4MDB9LAorCS8qIHdpbmRvd193aWR0aF9oaSwgd2luZG93X3dpZHRoX2xvIDogMTI4MCA9IDB4MDUwMCAqLworCXtTRU5TT1IsIFM1SzRBQV9XSU5ET1dfV0lEVEhfSEksIDB4MDUsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9XSU5ET1dfV0lEVEhfTE8sIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9IX0JMQU5LX0hJX18sIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9IX0JMQU5LX0xPX18sIDB4YTgsIDB4MDB9LCAvKiBoZWxwcyB0byBzeW5jLi4uICovCisJe1NFTlNPUiwgUzVLNEFBX0VYUE9TVVJFX0hJLCAweDAxLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfRVhQT1NVUkVfTE8sIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTEsIDB4MDQsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTIsIDB4YzMsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9QQUdFX01BUCwgMHgwMiwgMHgwMH0sCisJe1NFTlNPUiwgMHgwMiwgMHgwZSwgMHgwMH0sCisJe1NFTlNPUl9MT05HLCBTNUs0QUFfR0xPQkFMX0dBSU5fXywgMHgwZiwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX0dBSU5fMSwgMHgwYiwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX0dBSU5fMiwgMHhhMCwgMHgwMH0KK307CisKK3N0YXRpYworICAgIGNvbnN0CisJc3RydWN0IGRtaV9zeXN0ZW1faWQgczVrNGFhX3ZmbGlwX2RtaV90YWJsZVtdID0geworCXsKKwkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBYYSAyNTI4IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gWGEgMjUyOCIpCisJCX0KKwl9LAorCXsKKwkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBYaSAyNTUwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gWGkgMjU1MCIpCisJCX0KKwl9LAorCQl7CisJCS5pZGVudCA9ICJNU0kgR1g3MDAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1pY3JvLVN0YXIgSW50ZXJuYXRpb25hbCIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJHWDcwMCIpLAorCQkJRE1JX01BVENIKERNSV9CSU9TX0RBVEUsICIwNy8yNi8yMDA3IikKKwkJfQorCX0sCisJeyB9Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ODhhNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jCkBAIC0wLDAgKzEsNDIzIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgczVrODNhIHNlbnNvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgorICoKKyAqIFBvcnRpb25zIG9mIGNvZGUgdG8gVVNCIGludGVyZmFjZSBhbmQgQUxpIGRyaXZlciBzb2Z0d2FyZSwKKyAqIENvcHlyaWdodCAoYykgMjAwNiBXaWxsZW0gRHVpbmtlcgorICogdjRsMiBpbnRlcmZhY2UgbW9kZWxlZCBhZnRlciB0aGUgVjRMMiBkcml2ZXIKKyAqIGZvciBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAibTU2MDJfczVrODNhLmgiCisKK2ludCBzNWs4M2FfcHJvYmUoc3RydWN0IHNkICpzZCkKK3sKKwl1OCBwcm9kX2lkID0gMCwgdmVyX2lkID0gMDsKKwlpbnQgaSwgZXJyID0gMDsKKworCWlmIChmb3JjZV9zZW5zb3IpIHsKKwkJaWYgKGZvcmNlX3NlbnNvciA9PSBTNUs4M0FfU0VOU09SKSB7CisJCQlpbmZvKCJGb3JjaW5nIGEgJXMgc2Vuc29yIiwgczVrODNhLm5hbWUpOworCQkJZ290byBzZW5zb3JfZm91bmQ7CisJCX0KKwkJLyogSWYgd2Ugd2FudCB0byBmb3JjZSBhbm90aGVyIHNlbnNvciwgZG9uJ3QgdHJ5IHRvIHByb2JlIHRoaXMKKwkJICogb25lICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworCWluZm8oIlByb2JpbmcgZm9yIGEgczVrODNhIHNlbnNvciIpOworCisJLyogUHJlaW5pdCB0aGUgc2Vuc29yICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJlaW5pdF9zNWs4M2EpICYmICFlcnI7IGkrKykgeworCQl1OCBkYXRhWzJdID0ge3ByZWluaXRfczVrODNhW2ldWzJdLCBwcmVpbml0X3M1azgzYVtpXVszXX07CisJCWlmIChwcmVpbml0X3M1azgzYVtpXVswXSA9PSBTRU5TT1IpCisJCQllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBwcmVpbml0X3M1azgzYVtpXVsxXSwKKwkJCQlkYXRhLCAyKTsKKwkJZWxzZQorCQkJZXJyID0gbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBwcmVpbml0X3M1azgzYVtpXVsxXSwKKwkJCQlkYXRhWzBdKTsKKwl9CisKKwkvKiBXZSBkb24ndCBrbm93IHdoYXQgcmVnaXN0ZXIgKGlmIGFueSkgdGhhdCBjb250YWluIHRoZSBwcm9kdWN0IGlkCisJICogSnVzdCBwaWNrIHRoZSBmaXJzdCBhZGRyZXNzZXMgdGhhdCBzZWVtIHRvIHByb2R1Y2UgdGhlIHNhbWUgcmVzdWx0cworCSAqIG9uIG11bHRpcGxlIG1hY2hpbmVzICovCisJaWYgKHM1azgzYV9yZWFkX3NlbnNvcihzZCwgMHgwMCwgJnByb2RfaWQsIDEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChzNWs4M2FfcmVhZF9zZW5zb3Ioc2QsIDB4MDEsICZ2ZXJfaWQsIDEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgocHJvZF9pZCA9PSAweGZmKSB8fCAodmVyX2lkID09IDB4ZmYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllbHNlCisJCWluZm8oIkRldGVjdGVkIGEgczVrODNhIHNlbnNvciIpOworCitzZW5zb3JfZm91bmQ6CisJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBzNWs4M2EubW9kZXM7CisJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gczVrODNhLm5tb2RlczsKKwlzZC0+ZGVzYy0+Y3RybHMgPSBzNWs4M2EuY3RybHM7CisJc2QtPmRlc2MtPm5jdHJscyA9IHM1azgzYS5uY3RybHM7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzNWs4M2FfcmVhZF9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJCSAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKQoreworCWludCBlcnIsIGk7CisKKwlkbyB7CisJCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfU1RBVFVTLCBpMmNfZGF0YSk7CisJfSB3aGlsZSAoKCppMmNfZGF0YSAmIEkyQ19CVVNZKSAmJiAhZXJyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwKKwkJCQkgc2QtPnNlbnNvci0+aTJjX3NsYXZlX2lkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgYWRkcmVzcyk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJZXJyID0gbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxOCArIGxlbik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJZG8geworCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX1NUQVRVUywgaTJjX2RhdGEpOworCX0gd2hpbGUgKCgqaTJjX2RhdGEgJiBJMkNfQlVTWSkgJiYgIWVycik7CisKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisJZm9yIChpID0gMDsgaSA8IGxlbiAmJiAhbGVuOyBpKyspIHsKKwkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19EQVRBLCAmKGkyY19kYXRhW2ldKSk7CisKKwkJUERFQlVHKERfQ09ORiwgIlJlYWRpbmcgc2Vuc29yIHJlZ2lzdGVyICIKKwkJCQkgICIweCV4IGNvbnRhaW5pbmcgMHgleCAiLCBhZGRyZXNzLCAqaTJjX2RhdGEpOworCX0KKworb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrODNhX3dyaXRlX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkJICAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKQoreworCWludCBlcnIsIGk7CisJdTggKnA7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZC0+Z3NwY2FfZGV2LmRldjsKKwlfX3U4ICpidWYgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWY7CisKKwkvKiBObyBzZW5zb3Igd2l0aCBhIGRhdGEgd2lkdGggbGFyZ2VyIHRoYW4gMTYgYml0cyBoYXMgeWV0IGJlZW4gc2VlbiAqLworCWlmIChsZW4gPiAyIHx8ICFsZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KGJ1Ziwgc2Vuc29yX3VyYl9za2VsZXRvbiwKKwkgICAgICAgc2l6ZW9mKHNlbnNvcl91cmJfc2tlbGV0b24pKTsKKworCWJ1ZlsxMV0gPSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQ7CisJYnVmWzE1XSA9IGFkZHJlc3M7CisKKwkvKiBTcGVjaWFsIGNhc2UgbGFyZ2VyIHNlbnNvciB3cml0ZXMgKi8KKwlwID0gYnVmICsgMTY7CisKKwkvKiBDb3B5IGEgZm91ciBieXRlIHdyaXRlIHNlcXVlbmNlIGZvciBlYWNoIGJ5dGUgdG8gYmUgd3JpdHRlbiB0byAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDE2LCA0KTsKKwkJcFszXSA9IGkyY19kYXRhW2ldOworCQlwICs9IDQ7CisJCVBERUJVRyhEX0NPTkYsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCisJCSAgICAgICBhZGRyZXNzLCBpMmNfZGF0YVtpXSk7CisJfQorCisJLyogQ29weSB0aGUgdGFpbGVyICovCisJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAyMCwgNCk7CisKKwkvKiBTZXQgdGhlIHRvdGFsIGxlbmd0aCAqLworCXBbM10gPSAweDEwICsgbGVuOworCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDQsIDB4NDAsIDB4MTksCisJCQkgICAgICAweDAwMDAsIGJ1ZiwKKwkJCSAgICAgIDIwICsgbGVuICogNCwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrODNhX2luaXQoc3RydWN0IHNkICpzZCkKK3sKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXRfczVrODNhKSAmJiAhZXJyOyBpKyspIHsKKwkJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKKworCQlzd2l0Y2ggKGluaXRfczVrODNhW2ldWzBdKSB7CisJCWNhc2UgQlJJREdFOgorCQkJZXJyID0gbTU2MDJfd3JpdGVfYnJpZGdlKHNkLAorCQkJCQlpbml0X3M1azgzYVtpXVsxXSwKKwkJCQkJaW5pdF9zNWs4M2FbaV1bMl0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBTRU5TT1I6CisJCQlkYXRhWzBdID0gaW5pdF9zNWs4M2FbaV1bMl07CisJCQllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLAorCQkJCWluaXRfczVrODNhW2ldWzFdLCBkYXRhLCAxKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0VOU09SX0xPTkc6CisJCQlkYXRhWzBdID0gaW5pdF9zNWs4M2FbaV1bMl07CisJCQlkYXRhWzFdID0gaW5pdF9zNWs4M2FbaV1bM107CisJCQllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLAorCQkJCWluaXRfczVrODNhW2ldWzFdLCBkYXRhLCAyKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaW5mbygiSW52YWxpZCBzdHJlYW0gY29tbWFuZCwgZXhpdGluZyBpbml0Iik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWlmIChkdW1wX3NlbnNvcikKKwkJczVrODNhX2R1bXBfcmVnaXN0ZXJzKHNkKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrODNhX3Bvd2VyX2Rvd24oc3RydWN0IHNkICpzZCkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzNWs4M2FfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCkKK3sKKwlpbnQgYWRkcmVzczsKKwl1OCBwYWdlLCBvbGRfcGFnZTsKKwlzNWs4M2FfcmVhZF9zZW5zb3Ioc2QsIFM1SzgzQV9QQUdFX01BUCwgJm9sZF9wYWdlLCAxKTsKKworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCAxNjsgcGFnZSsrKSB7CisJCXM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9QQUdFX01BUCwgJnBhZ2UsIDEpOworCQlpbmZvKCJEdW1waW5nIHRoZSBzNWs4M2EgcmVnaXN0ZXIgc3RhdGUgZm9yIHBhZ2UgMHgleCIsIHBhZ2UpOworCQlmb3IgKGFkZHJlc3MgPSAwOyBhZGRyZXNzIDw9IDB4ZmY7IGFkZHJlc3MrKykgeworCQkJdTggdmFsID0gMDsKKwkJCXM1azgzYV9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgJnZhbCwgMSk7CisJCQlpbmZvKCJyZWdpc3RlciAweCV4IGNvbnRhaW5zIDB4JXgiLAorCQkJICAgICBhZGRyZXNzLCB2YWwpOworCQl9CisJfQorCWluZm8oInM1azgzYSByZWdpc3RlciBzdGF0ZSBkdW1wIGNvbXBsZXRlIik7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgMTY7IHBhZ2UrKykgeworCQlzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfUEFHRV9NQVAsICZwYWdlLCAxKTsKKwkJaW5mbygiUHJvYmluZyBmb3Igd2hpY2ggcmVnaXN0ZXJzIHRoYXQgYXJlIHJlYWQvd3JpdGUgIgorCQkgICAgICAiZm9yIHBhZ2UgMHgleCIsIHBhZ2UpOworCQlmb3IgKGFkZHJlc3MgPSAwOyBhZGRyZXNzIDw9IDB4ZmY7IGFkZHJlc3MrKykgeworCQkJdTggb2xkX3ZhbCwgY3RybF92YWwsIHRlc3RfdmFsID0gMHhmZjsKKworCQkJczVrODNhX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmb2xkX3ZhbCwgMSk7CisJCQlzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBhZGRyZXNzLCAmdGVzdF92YWwsIDEpOworCQkJczVrODNhX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmY3RybF92YWwsIDEpOworCisJCQlpZiAoY3RybF92YWwgPT0gdGVzdF92YWwpCisJCQkJaW5mbygicmVnaXN0ZXIgMHgleCBpcyB3cml0ZWFibGUiLCBhZGRyZXNzKTsKKwkJCWVsc2UKKwkJCQlpbmZvKCJyZWdpc3RlciAweCV4IGlzIHJlYWQgb25seSIsIGFkZHJlc3MpOworCisJCQkvKiBSZXN0b3JlIG9yaWdpbmFsIHZhbCAqLworCQkJczVrODNhX3dyaXRlX3NlbnNvcihzZCwgYWRkcmVzcywgJm9sZF92YWwsIDEpOworCQl9CisJfQorCWluZm8oIlJlYWQvd3JpdGUgcmVnaXN0ZXIgcHJvYmluZyBjb21wbGV0ZSIpOworCXM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9QQUdFX01BUCwgJm9sZF9wYWdlLCAxKTsKK30KKworaW50IHM1azgzYV9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJaW50IGVycjsKKwl1OCBkYXRhWzJdOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWVyciA9IHM1azgzYV9yZWFkX3NlbnNvcihzZCwgUzVLODNBX0JSSUdIVE5FU1MsIGRhdGEsIDIpOworCWRhdGFbMV0gPSBkYXRhWzFdIDw8IDE7CisJKnZhbCA9IGRhdGFbMV07CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azgzYV9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGRhdGFbMl07CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZGF0YVswXSA9IDB4MDA7CisJZGF0YVsxXSA9IDB4MjA7CisJZXJyID0gczVrODNhX3dyaXRlX3NlbnNvcihzZCwgMHgxNCwgZGF0YSwgMik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlkYXRhWzBdID0gMHgwMTsKKwlkYXRhWzFdID0gMHgwMDsKKwllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCAweDBkLCBkYXRhLCAyKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIEZJWE1FOiBUaGlzIGlzIG5vdCBzYW5lLCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbXBvc2l0aW9uCisJCSAgb2YgdGhlc2UgcmVnaXN0ZXJzICovCisJZGF0YVswXSA9IHZhbCA+PiAzOyAvKiBicmlnaHRuZXNzLCBoaWdoIDUgYml0cyAqLworCWRhdGFbMV0gPSB2YWwgPj4gMTsgLyogYnJpZ2h0bmVzcywgaGlnaCA3IGJpdHMgKi8KKwllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfQlJJR0hUTkVTUywgZGF0YSwgMik7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azgzYV9nZXRfd2hpdGVuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGRhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZXJyID0gczVrODNhX3JlYWRfc2Vuc29yKHNkLCBTNUs4M0FfV0hJVEVORVNTLCAmZGF0YSwgMSk7CisKKwkqdmFsID0gZGF0YTsKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azgzYV9zZXRfd2hpdGVuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggZGF0YVsxXTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlkYXRhWzBdID0gdmFsOworCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9XSElURU5FU1MsIGRhdGEsIDEpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs4M2FfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCWludCBlcnI7CisJdTggZGF0YVsyXTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwllcnIgPSBzNWs4M2FfcmVhZF9zZW5zb3Ioc2QsIFM1SzgzQV9HQUlOLCBkYXRhLCAyKTsKKworCWRhdGFbMV0gPSBkYXRhWzFdICYgMHgzZjsKKwlpZiAoZGF0YVsxXSA+IFM1SzgzQV9NQVhJTVVNX0dBSU4pCisJCWRhdGFbMV0gPSBTNUs4M0FfTUFYSU1VTV9HQUlOOworCisJKnZhbCA9IGRhdGFbMV07CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azgzYV9zZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGRhdGFbMl07CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZGF0YVswXSA9IDA7CisJZGF0YVsxXSA9IHZhbDsKKwllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfR0FJTiwgZGF0YSwgMik7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azgzYV9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCWludCBlcnI7CisJdTggZGF0YVsxXTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlkYXRhWzBdID0gMHgwNTsKKwllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfUEFHRV9NQVAsIGRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gczVrODNhX3JlYWRfc2Vuc29yKHNkLCBTNUs4M0FfRkxJUCwgZGF0YSwgMSk7CisJKnZhbCA9IChkYXRhWzBdIHwgMHg0MCkgPyAxIDogMDsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrODNhX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGRhdGFbMV07CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZGF0YVswXSA9IDB4MDU7CisJZXJyID0gczVrODNhX3dyaXRlX3NlbnNvcihzZCwgUzVLODNBX1BBR0VfTUFQLCBkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHM1azgzYV9yZWFkX3NlbnNvcihzZCwgUzVLODNBX0ZMSVAsIGRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogc2V0IG9yIHplcm8gc2l4IGJpdCwgc2V2ZW4gaXMgaGZsaXAgKi8KKwlkYXRhWzBdID0gKHZhbCkgPyAoZGF0YVswXSAmIDB4ODApIHwgMHg0MCB8IFM1SzgzQV9GTElQX01BU0sKKwkJCTogKGRhdGFbMF0gJiAweDgwKSB8IFM1SzgzQV9GTElQX01BU0s7CisJZXJyID0gczVrODNhX3dyaXRlX3NlbnNvcihzZCwgUzVLODNBX0ZMSVAsIGRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZGF0YVswXSA9ICh2YWwpID8gMHgwYiA6IDB4MGE7CisJZXJyID0gczVrODNhX3dyaXRlX3NlbnNvcihzZCwgUzVLODNBX1ZGTElQX1RVTkUsIGRhdGEsIDEpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs4M2FfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGRhdGFbMV07CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZGF0YVswXSA9IDB4MDU7CisJZXJyID0gczVrODNhX3dyaXRlX3NlbnNvcihzZCwgUzVLODNBX1BBR0VfTUFQLCBkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHM1azgzYV9yZWFkX3NlbnNvcihzZCwgUzVLODNBX0ZMSVAsIGRhdGEsIDEpOworCSp2YWwgPSAoZGF0YVswXSB8IDB4ODApID8gMSA6IDA7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azgzYV9zZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJaW50IGVycjsKKwl1OCBkYXRhWzFdOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWRhdGFbMF0gPSAweDA1OworCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9QQUdFX01BUCwgZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzNWs4M2FfcmVhZF9zZW5zb3Ioc2QsIFM1SzgzQV9GTElQLCBkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIHNldCBvciB6ZXJvIHNldmVuIGJpdCwgc2l4IGlzIHZmbGlwICovCisJZGF0YVswXSA9ICh2YWwpID8gKGRhdGFbMF0gJiAweDQwKSB8IDB4ODAgfCBTNUs4M0FfRkxJUF9NQVNLCisJCQk6IChkYXRhWzBdICYgMHg0MCkgfCBTNUs4M0FfRkxJUF9NQVNLOworCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9GTElQLCBkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWRhdGFbMF0gPSAodmFsKSA/IDB4MGEgOiAweDBiOworCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9IRkxJUF9UVU5FLCBkYXRhLCAxKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzZWU5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmgKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBzNWs4M2Egc2Vuc29yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgorICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgorICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CisgKgorICogUG9ydGlvbnMgb2YgY29kZSB0byBVU0IgaW50ZXJmYWNlIGFuZCBBTGkgZHJpdmVyIHNvZnR3YXJlLAorICogQ29weXJpZ2h0IChjKSAyMDA2IFdpbGxlbSBEdWlua2VyCisgKiB2NGwyIGludGVyZmFjZSBtb2RlbGVkIGFmdGVyIHRoZSBWNEwyIGRyaXZlcgorICogZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgTTU2MDJfUzVLODNBX0hfCisjZGVmaW5lIE01NjAyX1M1SzgzQV9IXworCisjaW5jbHVkZSAibTU2MDJfc2Vuc29yLmgiCisKKyNkZWZpbmUgUzVLODNBX0ZMSVAJCQkJMHgwMQorI2RlZmluZSBTNUs4M0FfSEZMSVBfVFVORQkJMHgwMworI2RlZmluZSBTNUs4M0FfVkZMSVBfVFVORQkJMHgwNQorI2RlZmluZSBTNUs4M0FfV0hJVEVORVNTCQkweDBhCisjZGVmaW5lIFM1SzgzQV9HQUlOCQkJCTB4MTgKKyNkZWZpbmUgUzVLODNBX0JSSUdIVE5FU1MJCTB4MWIKKyNkZWZpbmUgUzVLODNBX1BBR0VfTUFQCQkJMHhlYworCisjZGVmaW5lIFM1SzgzQV9ERUZBVUxUX0JSSUdIVE5FU1MJMHg3MQorI2RlZmluZSBTNUs4M0FfREVGQVVMVF9XSElURU5FU1MJMHg3ZQorI2RlZmluZSBTNUs4M0FfREVGQVVMVF9HQUlOCQkJMHgwMAorI2RlZmluZSBTNUs4M0FfTUFYSU1VTV9HQUlOCQkJMHgzYworI2RlZmluZSBTNUs4M0FfRkxJUF9NQVNLCQkJMHgxMAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXJzICovCitleHRlcm4gaW50IGZvcmNlX3NlbnNvcjsKK2V4dGVybiBpbnQgZHVtcF9zZW5zb3I7CisKK2ludCBzNWs4M2FfcHJvYmUoc3RydWN0IHNkICpzZCk7CitpbnQgczVrODNhX2luaXQoc3RydWN0IHNkICpzZCk7CitpbnQgczVrODNhX3Bvd2VyX2Rvd24oc3RydWN0IHNkICpzZCk7CisKK3ZvaWQgczVrODNhX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpOworCitpbnQgczVrODNhX3JlYWRfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCSAgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7CitpbnQgczVrODNhX3dyaXRlX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkJdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pOworCitpbnQgczVrODNhX3NldF9icmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBzNWs4M2FfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBzNWs4M2Ffc2V0X3doaXRlbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgczVrODNhX2dldF93aGl0ZW5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBzNWs4M2Ffc2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IHM1azgzYV9nZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IHM1azgzYV9nZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBzNWs4M2Ffc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBzNWs4M2FfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgczVrODNhX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CisKKworc3RhdGljIHN0cnVjdCBtNTYwMl9zZW5zb3IgczVrODNhID0geworCS5uYW1lID0gIlM1SzgzQSIsCisJLnByb2JlID0gczVrODNhX3Byb2JlLAorCS5pbml0ID0gczVrODNhX2luaXQsCisJLnBvd2VyX2Rvd24gPSBzNWs4M2FfcG93ZXJfZG93biwKKwkucmVhZF9zZW5zb3IgPSBzNWs4M2FfcmVhZF9zZW5zb3IsCisJLndyaXRlX3NlbnNvciA9IHM1azgzYV93cml0ZV9zZW5zb3IsCisJLmkyY19zbGF2ZV9pZCA9IDB4NWEsCisJLm5jdHJscyA9IDUsCisJLmN0cmxzID0geworCXsKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImJyaWdodG5lc3MiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweGZmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSBTNUs4M0FfREVGQVVMVF9CUklHSFRORVNTLAorCQkJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCQkuc2V0ID0gczVrODNhX3NldF9icmlnaHRuZXNzLAorCQkJLmdldCA9IHM1azgzYV9nZXRfYnJpZ2h0bmVzcworCisJfSwgeworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9XSElURU5FU1MsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJ3aGl0ZW5lc3MiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweGZmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSBTNUs4M0FfREVGQVVMVF9XSElURU5FU1MsCisJCQkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJCS5zZXQgPSBzNWs4M2Ffc2V0X3doaXRlbmVzcywKKwkJCS5nZXQgPSBzNWs4M2FfZ2V0X3doaXRlbmVzcywKKwl9LCB7CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0dBSU4sCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJnYWluIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gUzVLODNBX01BWElNVU1fR0FJTiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gUzVLODNBX0RFRkFVTFRfR0FJTiwKKwkJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgorCQl9LAorCQkJLnNldCA9IHM1azgzYV9zZXRfZ2FpbiwKKwkJCS5nZXQgPSBzNWs4M2FfZ2V0X2dhaW4KKwl9LCB7CisJCXsKKwkJCS5pZCAgICAgICAgID0gVjRMMl9DSURfSEZMSVAsCisJCQkudHlwZSAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAgICAgICA9ICJob3Jpem9udGFsIGZsaXAiLAorCQkJLm1pbmltdW0gICAgPSAwLAorCQkJLm1heGltdW0gICAgPSAxLAorCQkJLnN0ZXAgICAgICAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMAorCQl9LAorCQkJLnNldCA9IHM1azgzYV9zZXRfaGZsaXAsCisJCQkuZ2V0ID0gczVrODNhX2dldF9oZmxpcAorCX0sIHsKKwkJeworCQkgLmlkICAgICAgICAgPSBWNEwyX0NJRF9WRkxJUCwKKwkJLnR5cGUgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZSAgICAgICA9ICJ2ZXJ0aWNhbCBmbGlwIiwKKwkJLm1pbmltdW0gICAgPSAwLAorCQkubWF4aW11bSAgICA9IDEsCisJCS5zdGVwICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgID0gMAorCQl9LAorCQkuc2V0ID0gczVrODNhX3NldF92ZmxpcCwKKwkJLmdldCA9IHM1azgzYV9nZXRfdmZsaXAKKwkJfQorCX0sCisJLm5tb2RlcyA9IDEsCisJLm1vZGVzID0geworCXsKKwkJTTU2MDJfREVGQVVMVF9GUkFNRV9XSURUSCwKKwkJTTU2MDJfREVGQVVMVF9GUkFNRV9IRUlHSFQsCisJCVY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCVY0TDJfRklFTERfTk9ORSwKKwkJLnNpemVpbWFnZSA9CisJCQlNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRIICogTTU2MDJfREVGQVVMVF9GUkFNRV9IRUlHSFQsCisJCS5ieXRlc3BlcmxpbmUgPSBNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRILAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDEKKwl9CisJfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHJlaW5pdF9zNWs4M2FbXVs0XSA9Cit7CisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19ESVYsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfQ1RSTCwgMHgwMCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgxZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDgsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgzZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgzZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9MLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweDgwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfRElWLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4ZjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDFkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgxYywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DTEtfRElWLCAweDIwLCAweDAwfSwKKworCXtTRU5TT1IsIFM1SzgzQV9QQUdFX01BUCwgMHgwMCwgMHgwMH0KK307CisKKy8qIFRoaXMgY291bGQgcHJvYmFibHkgYmUgY29uc2lkZXJhYmx5IHNob3J0ZW5lZC4KKyAgIEkgZG9uJ3QgaGF2ZSB0aGUgaGFyZHdhcmUgdG8gZXhwZXJpbWVudCB3aXRoIGl0LCBwYXRjaGVzIHdlbGNvbWUKKyovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpbml0X3M1azgzYVtdWzRdID0KK3sKKwl7U0VOU09SLCBTNUs4M0FfUEFHRV9NQVAsIDB4MDQsIDB4MDB9LAorCXtTRU5TT1IsIDB4YWYsIDB4MDEsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzgzQV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg3YiwgMHhmZiwgMHgwMH0sCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDA1LCAweDAwfSwKKwl7U0VOU09SLCAweDAxLCAweDUwLCAweDAwfSwKKwl7U0VOU09SLCAweDEyLCAweDIwLCAweDAwfSwKKwl7U0VOU09SLCAweDE3LCAweDQwLCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfQlJJR0hUTkVTUywgMHgwZiwgMHgwMH0sCisJe1NFTlNPUiwgMHgxYywgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwMiwgMHg3MCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwMywgMHgwYiwgMHgwMH0sCisJe1NFTlNPUiwgMHgwNCwgMHhmMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwNSwgMHgwYiwgMHgwMH0sCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDA1LCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTElORV9PRl9GUkFNRV9ILCAweDgxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9QSVhfT0ZfTElORV9ILCAweDgyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweGU0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDg3LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKworCXtTRU5TT1IsIFM1SzgzQV9QQUdFX01BUCwgMHgwNSwgMHgwMH0sCisJe1NFTlNPUiwgMHgwNiwgMHg3MSwgMHgwMH0sCisJe1NFTlNPUiwgMHgwNywgMHhlOCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwOCwgMHgwMiwgMHgwMH0sCisJe1NFTlNPUiwgMHgwOSwgMHg4OCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxNCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxNSwgMHgyMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxOSwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxYSwgMHg5OCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwZiwgMHgwMiwgMHgwMH0sCisJe1NFTlNPUiwgMHgxMCwgMHhlNSwgMHgwMH0sCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDA1LCAweDAwfSwKKwl7U0VOU09SX0xPTkcsIDB4MTQsIDB4MDAsIDB4MjB9LAorCXtTRU5TT1JfTE9ORywgMHgwZCwgMHgwMCwgMHg3ZH0sCisJe1NFTlNPUl9MT05HLCAweDFiLCAweDBkLCAweDA1fSwKKworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTElORV9PRl9GUkFNRV9ILCAweDgxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9QSVhfT0ZfTElORV9ILCAweDgyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweGU0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDg3LCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDFkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwOCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDNmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDNmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4ODAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19ESVYsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhmMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MWQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDFjLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NMS19ESVYsIDB4MjAsIDB4MDB9LAorCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDA0LCAweDAwfSwKKwl7U0VOU09SLCAweGFmLCAweDAxLCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfUEFHRV9NQVAsIDB4MDUsIDB4MDB9LAorCS8qIGZmICggaW5pdCB2YWx1ZSApaXMgdmVyeSBkYXJrKSB8fCA3MSBhbmQgZjAgYmV0dGVyICovCisJe1NFTlNPUiwgMHg3YiwgMHhmZiwgMHgwMH0sCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDA1LCAweDAwfSwKKwl7U0VOU09SLCAweDAxLCAweDUwLCAweDAwfSwKKwl7U0VOU09SLCAweDEyLCAweDIwLCAweDAwfSwKKwl7U0VOU09SLCAweDE3LCAweDQwLCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfQlJJR0hUTkVTUywgMHgwZiwgMHgwMH0sCisJe1NFTlNPUiwgMHgxYywgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwMiwgMHg3MCwgMHgwMH0sCisJLyogc29tZSB2YWx1ZXMgbGlrZSAweDEwIGdpdmUgYSBibHVlLXB1cnBsZSBpbWFnZSAqLworCXtTRU5TT1IsIDB4MDMsIDB4MGIsIDB4MDB9LAorCXtTRU5TT1IsIDB4MDQsIDB4ZjAsIDB4MDB9LAorCXtTRU5TT1IsIDB4MDUsIDB4MGIsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzgzQV9QQUdFX01BUCwgMHgwNSwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNiwgMHgwMH0sCisJLyogdW5kZXIgODAgZG9uJ3Qgd29yaywgaGlnaHRlciBkZXBlbmQgb24gdmFsdWUgKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0gsIDB4ODIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4ZTQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4N2YsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisKKwl7U0VOU09SLCBTNUs4M0FfUEFHRV9NQVAsIDB4MDUsIDB4MDB9LAorCXtTRU5TT1IsIDB4MDYsIDB4NzEsIDB4MDB9LAorCXtTRU5TT1IsIDB4MDcsIDB4ZTgsIDB4MDB9LAorCXtTRU5TT1IsIDB4MDgsIDB4MDIsIDB4MDB9LAorCXtTRU5TT1IsIDB4MDksIDB4ODgsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTQsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTUsIDB4MjAsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTksIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4MWEsIDB4OTgsIDB4MDB9LAorCXtTRU5TT1IsIDB4MGYsIDB4MDIsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTAsIDB4ZTUsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzgzQV9QQUdFX01BUCwgMHgwNSwgMHgwMH0sCisJe1NFTlNPUl9MT05HLCAweDE0LCAweDAwLCAweDIwfSwKKwl7U0VOU09SX0xPTkcsIDB4MGQsIDB4MDAsIDB4N2R9LAorCXtTRU5TT1JfTE9ORywgMHgxYiwgMHgwZCwgMHgwNX0sCisKKwkvKiBUaGUgZm9sbG93aW5nIHNlcXVlbmNlIGlzIHVzZWxlc3MgYWZ0ZXIgYSBjbGVhbiBib290CisJICAgYnV0IGlzIG5lY2Vzc2FyeSBhZnRlciByZXN1bWUgZnJvbSBzdXNwZW5kICovCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MWQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDA4LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4M2YsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4M2YsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHhmZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfTCwgMHhmZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHg4MCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0RJViwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGYwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgxZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MWMsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ0xLX0RJViwgMHgyMCwgMHgwMH0sCisKKwl7U0VOU09SLCBTNUs4M0FfUEFHRV9NQVAsIDB4MDQsIDB4MDB9LAorCXtTRU5TT1IsIDB4YWYsIDB4MDEsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzgzQV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg3YiwgMHhmZiwgMHgwMH0sCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDA1LCAweDAwfSwKKwl7U0VOU09SLCAweDAxLCAweDUwLCAweDAwfSwKKwl7U0VOU09SLCAweDEyLCAweDIwLCAweDAwfSwKKwl7U0VOU09SLCAweDE3LCAweDQwLCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfQlJJR0hUTkVTUywgMHgwZiwgMHgwMH0sCisJe1NFTlNPUiwgMHgxYywgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwMiwgMHg3MCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwMywgMHgwYiwgMHgwMH0sCisJe1NFTlNPUiwgMHgwNCwgMHhmMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwNSwgMHgwYiwgMHgwMH0sCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDA1LCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTElORV9PRl9GUkFNRV9ILCAweDgxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9QSVhfT0ZfTElORV9ILCAweDgyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweGU0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDdmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKworCXtTRU5TT1IsIFM1SzgzQV9QQUdFX01BUCwgMHgwNSwgMHgwMH0sCisJe1NFTlNPUiwgMHgwNiwgMHg3MSwgMHgwMH0sCisJe1NFTlNPUiwgMHgwNywgMHhlOCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwOCwgMHgwMiwgMHgwMH0sCisJe1NFTlNPUiwgMHgwOSwgMHg4OCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxNCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxNSwgMHgyMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxOSwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxYSwgMHg5OCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwZiwgMHgwMiwgMHgwMH0sCisKKwl7U0VOU09SLCAweDEwLCAweGU1LCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfUEFHRV9NQVAsIDB4MDUsIDB4MDB9LAorCXtTRU5TT1JfTE9ORywgMHgxNCwgMHgwMCwgMHgyMH0sCisJe1NFTlNPUl9MT05HLCAweDBkLCAweDAwLCAweDdkfSwKKwl7U0VOU09SX0xPTkcsIDB4MWIsIDB4MGQsIDB4MDV9LAorCisJLyogbm9ybWFsIGNvbG9ycworCSAgICh0aGlzIGlzIHZhbHVlIGFmdGVyIGJvb3QsIGJ1dCBhZnRlciB0cmllcyBjYW4gYmUgZGlmZmVyZW50KSAqLworCXtTRU5TT1IsIDB4MDAsIDB4MDYsIDB4MDB9LAorCisJLyogc2V0IGRlZmF1bHQgYnJpZ2h0bmVzcyAqLworCXtTRU5TT1JfTE9ORywgMHgxNCwgMHgwMCwgMHgyMH0sCisJe1NFTlNPUl9MT05HLCAweDBkLCAweDAxLCAweDAwfSwKKwl7U0VOU09SX0xPTkcsIDB4MWIsIFM1SzgzQV9ERUZBVUxUX0JSSUdIVE5FU1MgPj4gMywKKwkJCSAgICBTNUs4M0FfREVGQVVMVF9CUklHSFRORVNTID4+IDF9LAorCisJLyogc2V0IGRlZmF1bHQgd2hpdGVuZXNzICovCisJe1NFTlNPUiwgUzVLODNBX1dISVRFTkVTUywgUzVLODNBX0RFRkFVTFRfV0hJVEVORVNTLCAweDAwfSwKKworCS8qIHNldCBkZWZhdWx0IGdhaW4gKi8KKwl7U0VOU09SX0xPTkcsIDB4MTgsIDB4MDAsIFM1SzgzQV9ERUZBVUxUX0dBSU59LAorCisJLyogc2V0IGRlZmF1bHQgZmxpcCAqLworCXtTRU5TT1IsIFM1SzgzQV9QQUdFX01BUCwgMHgwNSwgMHgwMH0sCisJe1NFTlNPUiwgUzVLODNBX0ZMSVAsIDB4MDAgfCBTNUs4M0FfRkxJUF9NQVNLLCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfSEZMSVBfVFVORSwgMHgwYiwgMHgwMH0sCisJe1NFTlNPUiwgUzVLODNBX1ZGTElQX1RVTkUsIDB4MGEsIDB4MDB9CisKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zZW5zb3IuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfc2Vuc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBjOWE0OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfc2Vuc29yLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIFVTQiBEcml2ZXIgZm9yIEFMaSBtNTYwMiBiYXNlZCB3ZWJjYW1zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgorICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgorICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CisgKgorICogUG9ydGlvbnMgb2YgY29kZSB0byBVU0IgaW50ZXJmYWNlIGFuZCBBTGkgZHJpdmVyIHNvZnR3YXJlLAorICogQ29weXJpZ2h0IChjKSAyMDA2IFdpbGxlbSBEdWlua2VyCisgKiB2NGwyIGludGVyZmFjZSBtb2RlbGVkIGFmdGVyIHRoZSBWNEwyIGRyaXZlcgorICogZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgTTU2MDJfU0VOU09SX0hfCisjZGVmaW5lIE01NjAyX1NFTlNPUl9IXworCisjaW5jbHVkZSAibTU2MDJfYnJpZGdlLmgiCisKKyNkZWZpbmUgTTU2MDJfREVGQVVMVF9GUkFNRV9XSURUSCAgNjQwCisjZGVmaW5lIE01NjAyX0RFRkFVTFRfRlJBTUVfSEVJR0hUIDQ4MAorCisjZGVmaW5lIE01NjAyX01BWF9DVFJMUwkJKFY0TDJfQ0lEX0xBU1RQMSAtIFY0TDJfQ0lEX0JBU0UgKyAxMCkKKworLyogRW51bWVyYXRlcyBhbGwgc3VwcG9ydGVkIHNlbnNvcnMgKi8KK2VudW0gc2Vuc29ycyB7CisJT1Y5NjUwX1NFTlNPUgk9IDEsCisJUzVLODNBX1NFTlNPUgk9IDIsCisJUzVLNEFBX1NFTlNPUgk9IDMsCisJTVQ5TTExMV9TRU5TT1IJPSA0LAorCVBPMTAzMF9TRU5TT1IJPSA1Cit9OworCisvKiBFbnVtZXJhdGVzIGFsbCBwb3NzaWJsZSBpbnN0cnVjdGlvbiB0eXBlcyAqLworZW51bSBpbnN0cnVjdGlvbiB7CisJQlJJREdFLAorCVNFTlNPUiwKKwlTRU5TT1JfTE9ORworfTsKKworc3RydWN0IG01NjAyX3NlbnNvciB7CisJLyogRGVmaW5lcyB0aGUgbmFtZSBvZiBhIHNlbnNvciAqLworCWNoYXIgbmFtZVszMl07CisKKwkvKiBXaGF0IGkyYyBhZGRyZXNzIHRoZSBzZW5zb3IgaXMgY29ubmVjdGVkIHRvICovCisJdTggaTJjX3NsYXZlX2lkOworCisJLyogUHJvYmVzIGlmIHRoZSBzZW5zb3IgaXMgY29ubmVjdGVkICovCisJaW50ICgqcHJvYmUpKHN0cnVjdCBzZCAqc2QpOworCisJLyogUGVyZm9ybXMgYSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSAqLworCWludCAoKmluaXQpKHN0cnVjdCBzZCAqc2QpOworCisJLyogUGVyZm9ybXMgYSBwb3dlciBkb3duIHNlcXVlbmNlICovCisJaW50ICgqcG93ZXJfZG93bikoc3RydWN0IHNkICpzZCk7CisKKwkvKiBSZWFkcyBhIHNlbnNvciByZWdpc3RlciAqLworCWludCAoKnJlYWRfc2Vuc29yKShzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCSAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKTsKKworCS8qIFdyaXRlcyB0byBhIHNlbnNvciByZWdpc3RlciAqLworCWludCAoKndyaXRlX3NlbnNvcikoc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7CisKKwlpbnQgbmN0cmxzOworCXN0cnVjdCBjdHJsIGN0cmxzW001NjAyX01BWF9DVFJMU107CisKKwljaGFyIG5tb2RlczsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IG1vZGVzW107Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKaW5kZXggNGQ1ZGI0Ny4uMjc3Y2EzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgZXJyX2NvZGU7CiAJX191OCAqZGF0YTsKQEAgLTE0Myw5ICsxNDMsMTAgQEAKIAlpbnQgaW50cGlwZTsKIAogCVBERUJVRyhEX1NUUkVBTSwgImNhbWVyYSBzdGFydCwgaWZhY2UgJWQsIGFsdCA4IiwgZ3NwY2FfZGV2LT5pZmFjZSk7Ci0JaWYgKHVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlLCA4KSA8IDApIHsKKwllcnJfY29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlLCA4KTsKKwlpZiAoZXJyX2NvZGUgPCAwKSB7CiAJCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwgIlNldCBwYWNrZXQgc2l6ZTogc2V0IGludGVyZmFjZSBlcnJvciIpOwotCQlyZXR1cm47CisJCXJldHVybiBlcnJfY29kZTsKIAl9CiAKIAlkYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmOwpAQCAtMTU0LDcgKzE1NSw3IEBACiAKIAllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CiAJaWYgKGVycl9jb2RlIDwgMCkKLQkJcmV0dXJuOworCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAkvKgogCSAgIEluaXRpYWxpemUgdGhlIE1SOTcxMTMgY2hpcCByZWdpc3RlcgpAQCAtMTgwLDE0ICsxODEsMTQgQEAKIAogCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCAxMSk7CiAJaWYgKGVycl9jb2RlIDwgMCkKLQkJcmV0dXJuOworCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlkYXRhWzBdID0gMHgyMzsJCS8qIGFkZHJlc3MgKi8KIAlkYXRhWzFdID0gMHgwOTsJCS8qIHJlZyAzNSwgYXBwZW5kIGZyYW1lIGhlYWRlciAqLwogCiAJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIGRhdGFbMF0sIDIpOwogCWlmIChlcnJfY29kZSA8IDApCi0JCXJldHVybjsKKwkJcmV0dXJuIGVycl9jb2RlOwogCiAJZGF0YVswXSA9IDB4M2M7CQkvKiBhZGRyZXNzICovCiAvKglpZiAoZ3NwY2FfZGV2LT53aWR0aCA9PSAxMjgwKSAqLwpAQCAtMTk4LDcgKzE5OSw3IEBACiAJCQkJICoJKHVuaXQ6IDRLQikgMjAwS0IgKi8KIAllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CiAJaWYgKGVycl9jb2RlIDwgMCkKLQkJcmV0dXJuOworCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlpZiAoMCkgewkJCS8qIGZpeGVkIGRhcmstZ2FpbiAqLwogCQlkYXRhWzFdID0gMDsJCS8qIHJlZyA5NCwgWSBHYWluICgxLjc1KSAqLwpAQCAtMjQwLDEzICsyNDEsMTMgQEAKIAogCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCA2KTsKIAlpZiAoZXJyX2NvZGUgPCAwKQotCQlyZXR1cm47CisJCXJldHVybiBlcnJfY29kZTsKIAogCWRhdGFbMF0gPSAweDY3OwogCWRhdGFbMV0gPSAweDEzOwkJLyogcmVnIDEwMywgZmlyc3QgcGl4ZWwgQiwgZGlzYWJsZSBzaGFycG5lc3MgKi8KIAllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CiAJaWYgKGVycl9jb2RlIDwgMCkKLQkJcmV0dXJuOworCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAkvKgogCSAqIGluaXRpYWxpemUgdGhlIHZhbHVlIG9mIE1JIHNlbnNvci4uLgpAQCAtMzI2LDYgKzMyNyw3IEBACiAJZGF0YVswXSA9IDB4MDA7CiAJZGF0YVsxXSA9IDB4NGQ7CQkvKiBJU09DIHRyYW5zZmVyaW5nIGVuYWJsZS4uLiAqLwogCXJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CisJcmV0dXJuIGVycl9jb2RlOwogfQogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKaW5kZXggNGRmNGVlYy4uY2E2NzExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwpAQCAtMTg1NCw3ICsxODU0LDcgQEAKIH0KIAogLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLwotc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCByZXQ7CkBAIC0xODcxLDkgKzE4NzEsMTAgQEAKIAkJZ290byBvdXQ7CiAJUERFQlVHKERfU1RSRUFNLCAiY2FtZXJhIHN0YXJ0ZWQgYWx0OiAweCUwMngiLCBnc3BjYV9kZXYtPmFsdCk7CiAJb3Y1MXhfbGVkX2NvbnRyb2woc2QsIDEpOwotCXJldHVybjsKKwlyZXR1cm4gMDsKIG91dDoKIAlQREVCVUcoRF9FUlIsICJjYW1lcmEgc3RhcnQgZXJyb3I6JWQiLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCmluZGV4IDgzYjVmNzQuLjBiMGM1NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYwpAQCAtMjgxLDcgKzI4MSw3IEBACiB9CiAKIC8qIC0tIHN0YXJ0IHRoZSBjYW1lcmEgLS0gKi8KLXN0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlfX3U4IG1vZGU7CkBAIC0zMjMsNiArMzIzLDcgQEAKIAlzZC0+c29mX3JlYWQgPSAwOwogCXNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzID0gMDsKIAlhdG9taWNfc2V0KCZzZC0+YXZnX2x1bSwgLTEpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC01MzQsNiArNTM1LDcgQEAKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjQ3MCl9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDcxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NzIpfSwKKwl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjQ3Nil9LAogCXtVU0JfREVWSUNFKDB4MjAwMSwgMHhmMTE1KX0sCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCmluZGV4IGJhODY1YjcuLmU1ZmY5YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCkBAIC02NzUsNyArNjc1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCkBAIC03MjQsNiArNzI0LDcgQEAKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDAxKTsKIAllbHNlCiAJCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHgwNSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCmluZGV4IDEyYjgxYWUuLjZjNjliYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAJezB4MzAsIDB4MTEsIDB4MDIsIDB4MjAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MTB9LAogfTsKIAotc3RydWN0IHNlbnNvcl9kYXRhIHNlbnNvcl9kYXRhW10gPSB7CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kYXRhIHNlbnNvcl9kYXRhW10gPSB7CiBTRU5TKGluaXRIdjcxMzEsIE5VTEwsIGh2NzEzMV9zZW5zb3JfaW5pdCwgTlVMTCwgTlVMTCwgMCwgTk9fRVhQT3xOT19GUkVRLCAwKSwKIFNFTlMoaW5pdE92NjY1MCwgTlVMTCwgb3Y2NjUwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCBGX0dBSU58Rl9TSUYsIDAsIDB4NjApLAogU0VOUyhpbml0T3Y3NjMwLCBpbml0T3Y3NjMwXzMsIG92NzYzMF9zZW5zb3JfaW5pdCwgTlVMTCwgb3Y3NjMwX3NlbnNvcl9pbml0XzMsCkBAIC04OTIsNyArODkyLDcgQEAKIH0KIAogLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLwotc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKQEAgLTk3Niw2ICs5NzYsNyBAQAogCXNkLT5mcmFtZXNfdG9fZHJvcCA9IDA7CiAJc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPSAwOwogCWF0b21pY19zZXQoJnNkLT5hdmdfbHVtLCAtMSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCmluZGV4IDU3MmIwZjMuLjUzY2I4MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYwpAQCAtMzksNiArMzksNyBAQAogCXVuc2lnbmVkIGNoYXIgY29udHJhc3Q7CiAJdW5zaWduZWQgY2hhciBjb2xvcnM7CiAJdW5zaWduZWQgY2hhciBhdXRvZ2FpbjsKKwlfX3U4IHZmbGlwOwkJCS8qIG92NzYzMCBvbmx5ICovCiAKIAlzaWduZWQgY2hhciBhZ19jbnQ7CiAjZGVmaW5lIEFHX0NOVF9TVEFSVCAxMwpAQCAtNzAsNiArNzEsOCBAQAogc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXR2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKQEAgLTEzMSw2ICsxMzQsMjIgQEAKIAkgICAgLnNldCA9IHNkX3NldGF1dG9nYWluLAogCSAgICAuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCiAJfSwKKy8qIG92NzYzMCBvbmx5ICovCisjZGVmaW5lIFZGTElQX0lEWCA0CisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfVkZMSVAsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUgICAgPSAiVmZsaXAiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBWRkxJUF9ERUYgMQorCQkuZGVmYXVsdF92YWx1ZSA9IFZGTElQX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldHZmbGlwLAorCSAgICAuZ2V0ID0gc2RfZ2V0dmZsaXAsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CkBAIC0yNDgsMTAgKzI2NywxMiBAQAogCTB4YTYsIDB4YjIsIDB4YmYsIDB4Y2EsIDB4ZDUsIDB4ZTAsIDB4ZWIsIDB4ZjUsIDB4ZmYKIH07CiAKKy8qIGNvbG9yIG1hdHJpeCBhbmQgb2Zmc2V0cyAqLwogc3RhdGljIGNvbnN0IF9fdTggcmVnODRbXSA9IHsKLQkweDE0LCAweDAwLCAweDI3LCAweDAwLCAweDA3LCAweDAwLCAweGU1LCAweDBmLAotCTB4ZTQsIDB4MGYsIDB4MzgsIDB4MDAsIDB4M2UsIDB4MDAsIDB4YzMsIDB4MGYsCi0JMHhmNywgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMAorCTB4MTQsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDcsIDB4MDAsCS8qIFlSIFlHIFlCIGdhaW5zICovCisJMHhlOCwgMHgwZiwgMHhkYSwgMHgwZiwgMHg0MCwgMHgwMCwJLyogVVIgVUcgVUIgKi8KKwkweDNlLCAweDAwLCAweGNkLCAweDBmLCAweGY3LCAweDBmLAkvKiBWUiBWRyBWQiAqLworCTB4MDAsIDB4MDAsIDB4MDAJCQkvKiBZVVYgb2Zmc2V0cyAqLwogfTsKIHN0YXRpYyBjb25zdCBfX3U4IGh2NzEzMXJfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHhDMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCkBAIC00MzQsNyArNDU1LDggQEAKIAl7MHhhMSwgMHgyMSwgMHgxMiwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YTEsIDB4MjEsIDB4MTIsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogLypmaXhtZTogKyAweDEyLCAweDA0Ki8KLQl7MHhhMSwgMHgyMSwgMHg3NSwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisvKgl7MHhhMSwgMHgyMSwgMHg3NSwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sICAqIENPTU4KKwkJCQkJCQkgKiBzZXQgYnkgc2V0dmZsaXAgKi8KIAl7MHhhMSwgMHgyMSwgMHgxMCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YTEsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGIxLCAweDIxLCAweDAxLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDEwfSwKQEAgLTk0OSw2ICs5NzEsOCBAQAogCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgQVVUT0dBSU5fSURYKTsKIAkJYnJlYWs7CiAJfQorCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVjc2MzApCisJCWdzcGNhX2Rldi0+Y3RybF9kaXMgfD0gKDEgPDwgVkZMSVBfSURYKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA4MCwyMCArMTEwNCwxNyBAQAogc3RhdGljIHZvaWQgc2V0YnJpZ2h0Y29udChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXVuc2lnbmVkIHZhbDsKKwlpbnQgdmFsOwogCV9fdTggcmVnODRfZnVsbFsweDE1XTsKIAotCW1lbXNldChyZWc4NF9mdWxsLCAwLCBzaXplb2YgcmVnODRfZnVsbCk7Ci0JdmFsID0gc2QtPmNvbnRyYXN0ICogMHgyMCAvIENPTlRSQVNUX01BWCArIDB4MTA7CS8qIDEwLi4zMCAqLwotCXJlZzg0X2Z1bGxbMl0gPSB2YWw7Ci0JcmVnODRfZnVsbFswXSA9ICh2YWwgKyAxKSAvIDI7Ci0JcmVnODRfZnVsbFs0XSA9ICh2YWwgKyAxKSAvIDU7Ci0JaWYgKHZhbCA+IEJSSUdIVE5FU1NfREVGKQotCQl2YWwgPSAoc2QtPmJyaWdodG5lc3MgLSBCUklHSFRORVNTX0RFRikgKiAweDIwCisJbWVtY3B5KHJlZzg0X2Z1bGwsIHJlZzg0LCBzaXplb2YgcmVnODRfZnVsbCk7CisJdmFsID0gc2QtPmNvbnRyYXN0ICogMHgzMCAvIENPTlRSQVNUX01BWCArIDB4MTA7CS8qIDEwLi40MCAqLworCXJlZzg0X2Z1bGxbMF0gPSAodmFsICsgMSkgLyAyOwkJLyogcmVkICovCisJcmVnODRfZnVsbFsyXSA9IHZhbDsJCQkvKiBncmVlbiAqLworCXJlZzg0X2Z1bGxbNF0gPSAodmFsICsgMSkgLyA1OwkJLyogYmx1ZSAqLworCXZhbCA9IChzZC0+YnJpZ2h0bmVzcyAtIEJSSUdIVE5FU1NfREVGKSAqIDB4MTAKIAkJCS8gQlJJR0hUTkVTU19NQVg7Ci0JZWxzZQotCQl2YWwgPSAwOwotCXJlZzg0X2Z1bGxbMHgxMl0gPSB2YWw7CQkJLyogMDAuLjFmICovCisJcmVnODRfZnVsbFsweDEyXSA9IHZhbCAmIDB4MWY7CQkvKiA1OjAgc2lnbmVkIHZhbHVlICovCiAJcmVnX3coZ3NwY2FfZGV2LCAweDg0LCByZWc4NF9mdWxsLCBzaXplb2YgcmVnODRfZnVsbCk7CiB9CiAKQEAgLTExNzIsOCArMTE5MywxNiBAQAogCQlzZC0+YWdfY250ID0gLTE7CiB9CiAKK3N0YXRpYyB2b2lkIHNldHZmbGlwKHN0cnVjdCBzZCAqc2QpCit7CisJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX09WNzYzMCkKKwkJcmV0dXJuOworCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHg3NSwJCQkvKiBDT01OICovCisJCXNkLT52ZmxpcCA/IDB4ODIgOiAweDAyKTsKK30KKwogLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLwotc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBpOwpAQCAtMTI2Myw2ICsxMjkyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjMwOgogCQlvdjc2MzBfSW5pdFNlbnNvcihnc3BjYV9kZXYpOworCQlzZXR2ZmxpcChzZCk7CiAJCXJlZzE3ID0gMHhlMjsKIAkJcmVnMSA9IDB4NDQ7CiAJCWJyZWFrOwpAQCAtMTMyMCwxMiArMTM1MCwxNiBAQAogCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzYzMDoKKwkJc2V0dmZsaXAoc2QpOworCQkvKiBmYWxsIHRocnUgKi8KIAlkZWZhdWx0OgkJCS8qIE9WNzZ4eCAqLwogCQlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7CiAJCWJyZWFrOwogCX0KIAlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIHJlZzEpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC0xNTQ2LDYgKzE1ODAsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZF9zZXR2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+dmZsaXAgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXR2ZmxpcChzZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+dmZsaXA7CisJcmV0dXJuIDA7Cit9CisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC0xNTY3LDYgKzE2MTksNyBAQAogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDA0NTgsIDB4NzAyNSksIEJTSShTTjlDMTIwLCBNSTAzNjAsIDB4NWQpfSwKKwl7VVNCX0RFVklDRSgweDA0NTgsIDB4NzAyZSksIEJTSShTTjlDMTIwLCBPVjc2NjAsIDB4MjEpfSwKIAl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNSksIEJTSShTTjlDMTA1LCBPVjc2NjAsIDB4MjEpfSwKIAl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNyksIEJTSShTTjlDMTA1LCBPVjc2NjAsIDB4MjEpfSwKIAl7VVNCX0RFVklDRSgweDA0NzEsIDB4MDMyNyksIEJTSShTTjlDMTA1LCBNSTAzNjAsIDB4NWQpfSwKQEAgLTE1ODgsNyArMTY0MSw5IEBACiAvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBmYSksIEJTSShTTjlDMTA1LCBPVjc2NDgsIDB4Pz8pfSwgKi8KIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBmYiksIEJTSShTTjlDMTA1LCBPVjc2NjAsIDB4MjEpfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBmYyksIEJTSShTTjlDMTA1LCBIVjcxMzFSLCAweDExKX0sCi0vKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjBmZSksIEJTSShTTjlDMTA1LCBPVjc2MzAsIDB4Pz8pfSwgKi8KKyNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQorCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGZlKSwgQlNJKFNOOUMxMDUsIE9WNzYzMCwgMHgyMSl9LAorI2VuZGlmCiAvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEwOCksIEJTSShTTjlDMTIwLCBPTTY4MDEsIDB4Pz8pfSwgKi8KIC8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTIyKSwgQlNJKFNOOUMxMTAsIElDTTEwNUMsIDB4Pz8pfSwgKi8KIC8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTIzKSwgQlNJKFNOOUMxMTAsIFNhbnlvQ0NELCAweD8/KX0sICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCmluZGV4IDZlNzMzOTAuLmJjYTEwNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCkBAIC02NjAsNyArNjYwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBlcnI7CkBAIC04NjcsNiArODY3LDcgQEAKIAkJd3JpdGVfdmVjdG9yKGdzcGNhX2RldiwgQ2xpY2tzbWFydDUxMF9kZWZhdWx0cyk7CiAJCWJyZWFrOwogCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYwppbmRleCBlOWViNTliLi5iNzQyZjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYwpAQCAtMTk4MCw3ICsxOTgwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBtb2RlOwpAQCAtMjAxMiw2ICsyMDEyLDcgQEAKIAlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYwppbmRleCBmNjAxZGFmLi5iMzQ1NzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYwpAQCAtNjg4LDcgKzY4OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgcmV0OwpAQCAtNzMzLDYgKzczMyw3IEBACiAvKglyZWdfd3JpdGUoZGV2LCAweDUsIDB4MCwgMHgwKTsgKi8KIC8qCXJlZ193cml0ZShkZXYsIDB4NSwgMHgwLCAweDEpOyAqLwogLyoJcmVnX3dyaXRlKGRldiwgMHg1LCAweDExLCAweDIpOyAqLworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKaW5kZXggMTk1ZGNlOS4uNjQ1ZWU5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKQEAgLTQyMiw3ICs0MjIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJX191MTYgbm9ybWU7CkBAIC01NDksNiArNTQ5LDcgQEAKIAlQREVCVUcoRF9TVFJFQU0sICJ3ZWJjYW0gc3RhcnRlZCIpOwogCXNwY2E1MDZfR2V0Tm9ybWVJbnB1dChnc3BjYV9kZXYsICZub3JtZSwgJmNoYW5uZWwpOwogCXNwY2E1MDZfU2V0Tm9ybWVJbnB1dChnc3BjYV9kZXYsIG5vcm1lLCBjaGFubmVsKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYwppbmRleCAyODFjZTAyLi42M2VjOTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYwpAQCAtMTUyOCw3ICsxNTI4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJaW50IG1vZGU7CiAKQEAgLTE1NDYsNiArMTU0Niw3IEBACiAJCWJyZWFrOwogCX0KIAlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODExMiwgMHgxMCB8IDB4MjApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1NjEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCmluZGV4IDk1ZmNmY2IuLjAyMGEwM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAogCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAogCQkJICAgICAgMCwJCS8qIHJlcXVlc3QgKi8KLQkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkgICAgICB2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIDUwMCk7CiAJUERFQlVHKERfVVNCTywgInJlZyB3cml0ZTogMHglMDJ4OjB4JTAyeCIsIGluZGV4LCB2YWx1ZSk7CiAJaWYgKHJldCA8IDApCkBAIC02OTksNyArNjk5LDcgQEAKIAkJc2QtPmFnX2NudCA9IC0xOwogfQogCi1zdGF0aWMgdm9pZCBzZF9zdGFydF8xMmEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydF8xMmEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgQ2xjayA9IDB4OGE7IC8qIGxvd2VyIDB4OFggdmFsdWVzIGxlYWQgdG8gZnBzID4gMzAgKi8KQEAgLTcyNSw4ICs3MjUsOSBAQAogCXNldHdoaXRlKGdzcGNhX2Rldik7CiAJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKIAlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXJldHVybiAwOwogfQotc3RhdGljIHZvaWQgc2Rfc3RhcnRfNzJhKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyBpbnQgc2Rfc3RhcnRfNzJhKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJaW50IENsY2s7CkBAIC03NTAsNiArNzUxLDcgQEAKIAlyZWdfd192YWwoZGV2LCAweDg3MDAsIENsY2spOwkvKiAweDI3IGNsb2NrICovCiAJcmVnX3dfdmFsKGRldiwgMHg4MTEyLCAweDEwIHwgMHgyMCk7CiAJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMTA2NCw3ICsxMDY2LDcgQEAKIAkgICAgewogCQkuaWQgPSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lID0gIldoaWxlIEJhbGFuY2UiLAorCQkubmFtZSA9ICJXaGl0ZSBCYWxhbmNlIiwKIAkJLm1pbmltdW0gPSBXSElURV9NSU4sCiAJCS5tYXhpbXVtID0gV0hJVEVfTUFYLAogCQkuc3RlcCA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwppbmRleCAyZjJkZTQyLi5kOWQ2NDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKQEAgLTMyNCw3ICszMjQsNyBAQAogfQogCiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgcmV0LCB2YWx1ZTsKIApAQCAtMzc0LDkgKzM3NCwxMCBAQAogCXNldF9wYXIoZ3NwY2FfZGV2LCAweDAxMDAwMDAwKTsKIAlzZXRfcGFyKGdzcGNhX2RldiwgMHgwMTAwMDAwMCk7CiAJUERFQlVHKERfU1RSRUFNLCAiY2FtZXJhIHN0YXJ0ZWQgYWx0OiAweCUwMngiLCBnc3BjYV9kZXYtPmFsdCk7Ci0JcmV0dXJuOworCXJldHVybiAwOwogb3V0OgogCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwgImNhbWVyYSBzdGFydCBlcnIgJWQiLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3VucGx1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKaW5kZXggMWNmY2M2Yy4uYmQ5Mjg4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKQEAgLTk2MSw3ICs5NjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwpAQCAtMTA0Miw2ICsxMDQyLDcgQEAKIAkJYnJlYWs7CiAJfQogCXNwNXh4X2luaXRDb250QnJpZ0h1ZVJlZ2lzdGVycyhnc3BjYV9kZXYpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCmluZGV4IGYwMzRjNzQuLmVhYzI0NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jCkBAIC0yOCw4ICsyOCw2IEBACiAKICNpbmNsdWRlICJnc3BjYS5oIgogCi0jZGVmaW5lIE1BWF9HQU1NQSAweDEwCQkvKiAwIHRvIDE1ICovCi0KICNkZWZpbmUgVjRMMl9DSURfRUZGRUNUUyAoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMCkKIAogTU9EVUxFX0FVVEhPUigiTGVhbmRybyBDb3N0YW50aW5vIDxsZV9jb3N0YW50aW5vQHBpeGFydGFyZ2VudGluYS5jb20uYXI+Iik7CkBAIC00OSw2ICs0NywxMCBAQAogCXVuc2lnbmVkIGNoYXIgd2hpdGViYWxhbmNlOwogCXVuc2lnbmVkIGNoYXIgbWlycm9yOwogCXVuc2lnbmVkIGNoYXIgZWZmZWN0OworCisJX191OCBzZW5zb3I7CisjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQSAwCisjZGVmaW5lIFNFTlNPUl9PTTY4MDIgMQogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtODMsOSArODUsOSBAQAogCSAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCSAgLm5hbWUgPSAiQnJpZ2h0bmVzcyIsCiAJICAubWluaW11bSA9IDAsCi0JICAubWF4aW11bSA9IDB4MGYsCisJICAubWF4aW11bSA9IDE0LAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAweDA5LAorCSAgLmRlZmF1bHRfdmFsdWUgPSA4LAogCSAgfSwKIAkgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCiAJIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLApAQCAtMTE4LDE2ICsxMjAsMTcgQEAKIAkgLnNldCA9IHNkX3NldGNvbG9ycywKIAkgLmdldCA9IHNkX2dldGNvbG9ycywKIAkgfSwKLSNkZWZpbmUgU0RfR0FNTUEgMworI2RlZmluZSBHQU1NQV9NQVggMTYKKyNkZWZpbmUgR0FNTUFfREVGIDEwCiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9HQU1NQSwJLyogKGdhbW1hIG9uIHdpbikgKi8KIAkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkgIC5uYW1lID0gIkdhbW1hIChVbnRlc3RlZCkiLAorCSAgLm5hbWUgPSAiR2FtbWEiLAogCSAgLm1pbmltdW0gPSAwLAotCSAgLm1heGltdW0gPSBNQVhfR0FNTUEsCisJICAubWF4aW11bSA9IEdBTU1BX01BWCAtIDEsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4MDksCisJICAuZGVmYXVsdF92YWx1ZSA9IEdBTU1BX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRnYW1tYSwKIAkgLmdldCA9IHNkX2dldGdhbW1hLApAQCAtMTg1LDcgKzE4OCw3IEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDEsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDEsCisJICAuZGVmYXVsdF92YWx1ZSA9IDAsCiAJICB9LAogCSAuc2V0ID0gc2Rfc2V0d2hpdGViYWxhbmNlLAogCSAuZ2V0ID0gc2RfZ2V0d2hpdGViYWxhbmNlCkBAIC0xOTcsNyArMjAwLDcgQEAKIAkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkgIC5uYW1lID0gIlNoYXJwbmVzcyIsCiAJICAubWluaW11bSA9IDAsCi0JICAubWF4aW11bSA9IE1BWF9HQU1NQSwJLyogMCB0byAxNiAqLworCSAgLm1heGltdW0gPSAxNSwKIAkgIC5zdGVwID0gMSwKIAkgIC5kZWZhdWx0X3ZhbHVlID0gMHgwNiwKIAkgIH0sCkBAIC0yNTgsNyArMjYxLDU5IEBACiAJCS5wcml2ID0gMH0sCiB9OwogCi0jZGVmaW5lIFQxNl9PRkZTRVRfREFUQSA2MzEKKy8qIHNlbnNvciBzcGVjaWZpYyBkYXRhICovCitzdHJ1Y3QgYWRkaXRpb25hbF9zZW5zb3JfZGF0YSB7CisJY29uc3QgX191OCBkYXRhMVsyMF07CisJY29uc3QgX191OCBkYXRhMlsxOF07CisJY29uc3QgX191OCBkYXRhM1sxOF07CisJY29uc3QgX191OCBkYXRhNFs0XTsKKwljb25zdCBfX3U4IGRhdGE1WzZdOworCWNvbnN0IF9fdTggc3RyZWFtWzRdOworfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhIHNlbnNvcl9kYXRhW10gPSB7CisgICAgewkJCQkvKiBUQVM1MTMwQSAqLworCS5kYXRhMSA9CisJCXsweGQwLCAweGJiLCAweGQxLCAweDI4LCAweGQyLCAweDEwLCAweGQzLCAweDEwLAorCQkgMHhkNCwgMHhiYiwgMHhkNSwgMHgyOCwgMHhkNiwgMHgxZSwgMHhkNywgMHgyNywKKwkJIDB4ZDgsIDB4YzgsIDB4ZDksIDB4ZmN9LAorCS5kYXRhMiA9CisJCXsweGUwLCAweDYwLCAweGUxLCAweGE4LCAweGUyLCAweGUwLCAweGUzLCAweDYwLAorCQkgMHhlNCwgMHhhOCwgMHhlNSwgMHhlMCwgMHhlNiwgMHg2MCwgMHhlNywgMHhhOCwKKwkJIDB4ZTgsIDB4ZTB9LAorCS5kYXRhMyA9CisJCXsweGM3LCAweDYwLCAweGM4LCAweGE4LCAweGM5LCAweGUwLCAweGNhLCAweDYwLAorCQkgMHhjYiwgMHhhOCwgMHhjYywgMHhlMCwgMHhjZCwgMHg2MCwgMHhjZSwgMHhhOCwKKwkJIDB4Y2YsIDB4ZTB9LAorCS5kYXRhNCA9CS8qIEZyZXEgKDUwLzYwSHopLiBTcGxpdHRlZCBmb3IgdGVzdCBwdXJwb3NlICovCisJCXsweDY2LCAweDAwLCAweGE4LCAweGU4fSwKKwkuZGF0YTUgPQorCQl7MHgwYywgMHgwMywgMHhhYiwgMHgxMCwgMHg4MSwgMHgyMH0sCisJLnN0cmVhbSA9CisJCXsweDBiLCAweDA0LCAweDBhLCAweDQwfSwKKyAgICB9LAorICAgIHsJCQkJLyogT002ODAyICovCisJLmRhdGExID0KKwkJezB4ZDAsIDB4YzIsIDB4ZDEsIDB4MjgsIDB4ZDIsIDB4MGYsIDB4ZDMsIDB4MjIsCisJCSAweGQ0LCAweGNkLCAweGQ1LCAweDI3LCAweGQ2LCAweDJjLCAweGQ3LCAweDA2LAorCQkgMHhkOCwgMHhiMywgMHhkOSwgMHhmY30sCisJLmRhdGEyID0KKwkJezB4ZTAsIDB4ODAsIDB4ZTEsIDB4ZmYsIDB4ZTIsIDB4ZmYsIDB4ZTMsIDB4ODAsCisJCSAweGU0LCAweGZmLCAweGU1LCAweGZmLCAweGU2LCAweDgwLCAweGU3LCAweGZmLAorCQkgMHhlOCwgMHhmZn0sCisJLmRhdGEzID0KKwkJezB4YzcsIDB4ODAsIDB4YzgsIDB4ZmYsIDB4YzksIDB4ZmYsIDB4Y2EsIDB4ODAsCisJCSAweGNiLCAweGZmLCAweGNjLCAweGZmLCAweGNkLCAweDgwLCAweGNlLCAweGZmLAorCQkgMHhjZiwgMHhmZn0sCisJLmRhdGE0ID0JLypGcmVxICg1MC82MEh6KS4gU3BsaXR0ZWQgZm9yIHRlc3QgcHVycG9zZSAqLworCQl7MHg2NiwgMHhjYSwgMHhhOCwgMHhmMCB9LAorCS5kYXRhNSA9CS8qIHRoaXMgY291bGQgYmUgcmVtb3ZlZCBsYXRlciAqLworCQl7MHgwYywgMHgwMywgMHhhYiwgMHgxMywgMHg4MSwgMHgyM30sCisJLnN0cmVhbSA9CisJCXsweDBiLCAweDA0LCAweDBhLCAweDc4fSwKKyAgICB9Cit9OworCiAjZGVmaW5lIE1BWF9FRkZFQ1RTIDcKIC8qIGVhc2lseSBkb25lIGJ5IHNvZnQsIHRoaXMgdGFibGUgY291bGQgYmUgcmVtb3ZlZCwKICAqIGkga2VlcCBpdCBoZXJlIGp1c3QgaW4gY2FzZSAqLwpAQCAtMjcyLDg3ICszMjcsODcgQEAKIAl7MHhhOCwgMHhjOCwgMHhjNiwgMHhkMiwgMHhjMCwgMHg0MH0sCS8qIE5lZ2F0aXZlICovCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBnYW1tYV90YWJsZVtNQVhfR0FNTUFdWzM0XSA9IHsKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgzZSwgMHg5MiwgMHg2OSwgMHg5MywgMHg4NSwKK3N0YXRpYyBjb25zdCBfX3U4IGdhbW1hX3RhYmxlW0dBTU1BX01BWF1bMzRdID0geworCXsweDkwLCAweDAwLCAweDkxLCAweDNlLCAweDkyLCAweDY5LCAweDkzLCAweDg1LAkvKiAwICovCiAJIDB4OTQsIDB4OTUsIDB4OTUsIDB4YTEsIDB4OTYsIDB4YWUsIDB4OTcsIDB4YjksCiAJIDB4OTgsIDB4YzIsIDB4OTksIDB4Y2IsIDB4OWEsIDB4ZDQsIDB4OWIsIDB4ZGIsCiAJIDB4OWMsIDB4ZTMsIDB4OWQsIDB4ZWEsIDB4OWUsIDB4ZjEsIDB4OWYsIDB4ZjgsCiAJIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDMzLCAweDkyLCAweDVBLCAweDkzLCAweDc1LAotCSAweDk0LCAweDg1LCAweDk1LCAweDkzLCAweDk2LCAweEExLCAweDk3LCAweEFELAotCSAweDk4LCAweEI3LCAweDk5LCAweEMyLCAweDlBLCAweENCLCAweDlCLCAweEQ0LAotCSAweDlDLCAweERFLCAweDlELCAweEU3LCAweDlFLCAweEYwLCAweDlGLCAweEY3LAorCXsweDkwLCAweDAwLCAweDkxLCAweDMzLCAweDkyLCAweDVhLCAweDkzLCAweDc1LAkvKiAxICovCisJIDB4OTQsIDB4ODUsIDB4OTUsIDB4OTMsIDB4OTYsIDB4YTEsIDB4OTcsIDB4YWQsCisJIDB4OTgsIDB4YjcsIDB4OTksIDB4YzIsIDB4OWEsIDB4Y2IsIDB4OWIsIDB4ZDQsCisJIDB4OWMsIDB4ZGUsIDB4OUQsIDB4ZTcsIDB4OWUsIDB4ZjAsIDB4OWYsIDB4ZjcsCiAJIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDJGLCAweDkyLCAweDUxLCAweDkzLCAweDZCLAotCSAweDk0LCAweDdDLCAweDk1LCAweDhBLCAweDk2LCAweDk5LCAweDk3LCAweEE2LAotCSAweDk4LCAweEIxLCAweDk5LCAweEJDLCAweDlBLCAweEM2LCAweDlCLCAweEQwLAotCSAweDlDLCAweERCLCAweDlELCAweEU0LCAweDlFLCAweEVELCAweDlGLCAweEY2LAorCXsweDkwLCAweDAwLCAweDkxLCAweDJmLCAweDkyLCAweDUxLCAweDkzLCAweDZiLAkvKiAyICovCisJIDB4OTQsIDB4N2MsIDB4OTUsIDB4OGEsIDB4OTYsIDB4OTksIDB4OTcsIDB4YTYsCisJIDB4OTgsIDB4YjEsIDB4OTksIDB4YmMsIDB4OWEsIDB4YzYsIDB4OWIsIDB4ZDAsCisJIDB4OWMsIDB4ZGIsIDB4OWQsIDB4ZTQsIDB4OWUsIDB4ZWQsIDB4OWYsIDB4ZjYsCiAJIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDI5LCAweDkyLCAweDQ4LCAweDkzLCAweDYwLAotCSAweDk0LCAweDcyLCAweDk1LCAweDgxLCAweDk2LCAweDkwLCAweDk3LCAweDlFLAotCSAweDk4LCAweEFBLCAweDk5LCAweEI1LCAweDlBLCAweEJGLCAweDlCLCAweENCLAotCSAweDlDLCAweEQ2LCAweDlELCAweEUxLCAweDlFLCAweEVCLCAweDlGLCAweEY1LAorCXsweDkwLCAweDAwLCAweDkxLCAweDI5LCAweDkyLCAweDQ4LCAweDkzLCAweDYwLAkvKiAzICovCisJIDB4OTQsIDB4NzIsIDB4OTUsIDB4ODEsIDB4OTYsIDB4OTAsIDB4OTcsIDB4OWUsCisJIDB4OTgsIDB4YWEsIDB4OTksIDB4YjUsIDB4OWEsIDB4YmYsIDB4OWIsIDB4Y2IsCisJIDB4OWMsIDB4ZDYsIDB4OWQsIDB4ZTEsIDB4OWUsIDB4ZWIsIDB4OWYsIDB4ZjUsCiAJIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDIzLCAweDkyLCAweDNGLCAweDkzLCAweDU1LAorCXsweDkwLCAweDAwLCAweDkxLCAweDIzLCAweDkyLCAweDNmLCAweDkzLCAweDU1LAkvKiA0ICovCiAJIDB4OTQsIDB4NjgsIDB4OTUsIDB4NzcsIDB4OTYsIDB4ODYsIDB4OTcsIDB4OTUsCi0JIDB4OTgsIDB4QTIsIDB4OTksIDB4QUQsIDB4OUEsIDB4QjksIDB4OUIsIDB4QzYsCi0JIDB4OUMsIDB4RDIsIDB4OUQsIDB4REUsIDB4OUUsIDB4RTksIDB4OUYsIDB4RjQsCisJIDB4OTgsIDB4YTIsIDB4OTksIDB4YWQsIDB4OWEsIDB4YjksIDB4OWIsIDB4YzYsCisJIDB4OWMsIDB4ZDIsIDB4OWQsIDB4ZGUsIDB4OWUsIDB4ZTksIDB4OWYsIDB4ZjQsCiAJIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDFCLCAweDkyLCAweDMzLCAweDkzLCAweDQ4LAorCXsweDkwLCAweDAwLCAweDkxLCAweDFiLCAweDkyLCAweDMzLCAweDkzLCAweDQ4LAkvKiA1ICovCiAJIDB4OTQsIDB4NTksIDB4OTUsIDB4NjksIDB4OTYsIDB4NzksIDB4OTcsIDB4ODcsCi0JIDB4OTgsIDB4OTYsIDB4OTksIDB4QTMsIDB4OUEsIDB4QjEsIDB4OUIsIDB4QkUsCi0JIDB4OUMsIDB4Q0MsIDB4OUQsIDB4REEsIDB4OUUsIDB4RTcsIDB4OUYsIDB4RjMsCisJIDB4OTgsIDB4OTYsIDB4OTksIDB4YTMsIDB4OWEsIDB4YjEsIDB4OWIsIDB4YmUsCisJIDB4OWMsIDB4Y2MsIDB4OWQsIDB4ZGEsIDB4OWUsIDB4ZTcsIDB4OWYsIDB4ZjMsCiAJIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDAyLCAweDkyLCAweDEwLCAweDkzLCAweDIwLAorCXsweDkwLCAweDAwLCAweDkxLCAweDAyLCAweDkyLCAweDEwLCAweDkzLCAweDIwLAkvKiA2ICovCiAJIDB4OTQsIDB4MzIsIDB4OTUsIDB4NDAsIDB4OTYsIDB4NTcsIDB4OTcsIDB4NjcsCiAJIDB4OTgsIDB4NzcsIDB4OTksIDB4ODgsIDB4OWEsIDB4OTksIDB4OWIsIDB4YWEsCiAJIDB4OWMsIDB4YmIsIDB4OWQsIDB4Y2MsIDB4OWUsIDB4ZGQsIDB4OWYsIDB4ZWUsCiAJIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDAyLCAweDkyLCAweDE0LCAweDkzLCAweDI2LAotCSAweDk0LCAweDM4LCAweDk1LCAweDRBLCAweDk2LCAweDYwLCAweDk3LCAweDcwLAotCSAweDk4LCAweDgwLCAweDk5LCAweDkwLCAweDlBLCAweEEwLCAweDlCLCAweEIwLAotCSAweDlDLCAweEMwLCAweDlELCAweEQwLCAweDlFLCAweEUwLCAweDlGLCAweEYwLAorCXsweDkwLCAweDAwLCAweDkxLCAweDAyLCAweDkyLCAweDE0LCAweDkzLCAweDI2LAkvKiA3ICovCisJIDB4OTQsIDB4MzgsIDB4OTUsIDB4NGEsIDB4OTYsIDB4NjAsIDB4OTcsIDB4NzAsCisJIDB4OTgsIDB4ODAsIDB4OTksIDB4OTAsIDB4OWEsIDB4YTAsIDB4OWIsIDB4YjAsCisJIDB4OWMsIDB4YzAsIDB4OUQsIDB4ZDAsIDB4OWUsIDB4ZTAsIDB4OWYsIDB4ZjAsCiAJIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDEwLCAweDkyLCAweDIyLCAweDkzLCAweDM1LAotCSAweDk0LCAweDQ3LCAweDk1LCAweDVBLCAweDk2LCAweDY5LCAweDk3LCAweDc5LAotCSAweDk4LCAweDg4LCAweDk5LCAweDk3LCAweDlBLCAweEE3LCAweDlCLCAweEI2LAotCSAweDlDLCAweEM0LCAweDlELCAweEQzLCAweDlFLCAweEUwLCAweDlGLCAweEYwLAorCXsweDkwLCAweDAwLCAweDkxLCAweDEwLCAweDkyLCAweDIyLCAweDkzLCAweDM1LAkvKiA4ICovCisJIDB4OTQsIDB4NDcsIDB4OTUsIDB4NWEsIDB4OTYsIDB4NjksIDB4OTcsIDB4NzksCisJIDB4OTgsIDB4ODgsIDB4OTksIDB4OTcsIDB4OWEsIDB4YTcsIDB4OWIsIDB4YjYsCisJIDB4OWMsIDB4YzQsIDB4OWQsIDB4ZDMsIDB4OWUsIDB4ZTAsIDB4OWYsIDB4ZjAsCiAJIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDEwLCAweDkyLCAweDI2LCAweDkzLCAweDQwLAorCXsweDkwLCAweDAwLCAweDkxLCAweDEwLCAweDkyLCAweDI2LCAweDkzLCAweDQwLAkvKiA5ICovCiAJIDB4OTQsIDB4NTQsIDB4OTUsIDB4NjUsIDB4OTYsIDB4NzUsIDB4OTcsIDB4ODQsCiAJIDB4OTgsIDB4OTMsIDB4OTksIDB4YTEsIDB4OWEsIDB4YjAsIDB4OWIsIDB4YmQsCiAJIDB4OWMsIDB4Y2EsIDB4OWQsIDB4ZDYsIDB4OWUsIDB4ZTAsIDB4OWYsIDB4ZjAsCiAJIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDE4LCAweDkyLCAweDJCLCAweDkzLCAweDQ0LAotCSAweDk0LCAweDYwLCAweDk1LCAweDcwLCAweDk2LCAweDgwLCAweDk3LCAweDhFLAotCSAweDk4LCAweDlDLCAweDk5LCAweEFBLCAweDlBLCAweEI3LCAweDlCLCAweEM0LAotCSAweDlDLCAweEQwLCAweDlELCAweEQ4LCAweDlFLCAweEUyLCAweDlGLCAweEYwLAorCXsweDkwLCAweDAwLCAweDkxLCAweDE4LCAweDkyLCAweDJiLCAweDkzLCAweDQ0LAkvKiAxMCAqLworCSAweDk0LCAweDYwLCAweDk1LCAweDcwLCAweDk2LCAweDgwLCAweDk3LCAweDhlLAorCSAweDk4LCAweDljLCAweDk5LCAweGFhLCAweDlhLCAweGI3LCAweDliLCAweGM0LAorCSAweDljLCAweGQwLCAweDlkLCAweGQ4LCAweDllLCAweGUyLCAweDlmLCAweGYwLAogCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgxQSwgMHg5MiwgMHgzNCwgMHg5MywgMHg1MiwKLQkgMHg5NCwgMHg2NiwgMHg5NSwgMHg3RSwgMHg5NiwgMHg4RCwgMHg5NywgMHg5QiwKLQkgMHg5OCwgMHhBOCwgMHg5OSwgMHhCNCwgMHg5QSwgMHhDMCwgMHg5QiwgMHhDQiwKLQkgMHg5QywgMHhENiwgMHg5RCwgMHhFMSwgMHg5RSwgMHhFQiwgMHg5RiwgMHhGNSwKKwl7MHg5MCwgMHgwMCwgMHg5MSwgMHgxYSwgMHg5MiwgMHgzNCwgMHg5MywgMHg1MiwJLyogMTEgKi8KKwkgMHg5NCwgMHg2NiwgMHg5NSwgMHg3ZSwgMHg5NiwgMHg4RCwgMHg5NywgMHg5QiwKKwkgMHg5OCwgMHhhOCwgMHg5OSwgMHhiNCwgMHg5YSwgMHhjMCwgMHg5YiwgMHhjYiwKKwkgMHg5YywgMHhkNiwgMHg5ZCwgMHhlMSwgMHg5ZSwgMHhlYiwgMHg5ZiwgMHhmNSwKIAkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4M0YsIDB4OTIsIDB4NUEsIDB4OTMsIDB4NkUsCi0JIDB4OTQsIDB4N0YsIDB4OTUsIDB4OEUsIDB4OTYsIDB4OUMsIDB4OTcsIDB4QTgsCi0JIDB4OTgsIDB4QjQsIDB4OTksIDB4QkYsIDB4OUEsIDB4QzksIDB4OUIsIDB4RDMsCi0JIDB4OUMsIDB4REMsIDB4OUQsIDB4RTUsIDB4OUUsIDB4RUUsIDB4OUYsIDB4RjYsCi0JIDB4QTAsIDB4RkZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDU0LCAweDkyLCAweDZGLCAweDkzLCAweDgzLAotCSAweDk0LCAweDkzLCAweDk1LCAweEEwLCAweDk2LCAweEFELCAweDk3LCAweEI3LAotCSAweDk4LCAweEMyLCAweDk5LCAweENCLCAweDlBLCAweEQ0LCAweDlCLCAweERDLAotCSAweDlDLCAweEU0LCAweDlELCAweEVCLCAweDlFLCAweEYyLCAweDlGLCAweEY5LAorCXsweDkwLCAweDAwLCAweDkxLCAweDNmLCAweDkyLCAweDVhLCAweDkzLCAweDZlLAkvKiAxMiAqLworCSAweDk0LCAweDdmLCAweDk1LCAweDhlLCAweDk2LCAweDljLCAweDk3LCAweGE4LAorCSAweDk4LCAweGI0LCAweDk5LCAweGJmLCAweDlhLCAweGM5LCAweDliLCAweGQzLAorCSAweDljLCAweGRjLCAweDlkLCAweGU1LCAweDllLCAweGVlLCAweDlmLCAweGY2LAogCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHg2RSwgMHg5MiwgMHg4OCwgMHg5MywgMHg5QSwKLQkgMHg5NCwgMHhBOCwgMHg5NSwgMHhCMywgMHg5NiwgMHhCRCwgMHg5NywgMHhDNiwKLQkgMHg5OCwgMHhDRiwgMHg5OSwgMHhENiwgMHg5QSwgMHhERCwgMHg5QiwgMHhFMywKLQkgMHg5QywgMHhFOSwgMHg5RCwgMHhFRiwgMHg5RSwgMHhGNCwgMHg5RiwgMHhGQSwKKwl7MHg5MCwgMHgwMCwgMHg5MSwgMHg1NCwgMHg5MiwgMHg2ZiwgMHg5MywgMHg4MywJLyogMTMgKi8KKwkgMHg5NCwgMHg5MywgMHg5NSwgMHhhMCwgMHg5NiwgMHhhZCwgMHg5NywgMHhiNywKKwkgMHg5OCwgMHhjMiwgMHg5OSwgMHhjYiwgMHg5YSwgMHhkNCwgMHg5YiwgMHhkYywKKwkgMHg5YywgMHhlNCwgMHg5ZCwgMHhlYiwgMHg5ZSwgMHhmMiwgMHg5ZiwgMHhmOSwKIAkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4OTMsIDB4OTIsIDB4QTgsIDB4OTMsIDB4QjcsCi0JIDB4OTQsIDB4QzEsIDB4OTUsIDB4Q0EsIDB4OTYsIDB4RDIsIDB4OTcsIDB4RDgsCi0JIDB4OTgsIDB4REUsIDB4OTksIDB4RTMsIDB4OUEsIDB4RTgsIDB4OUIsIDB4RUQsCi0JIDB4OUMsIDB4RjEsIDB4OUQsIDB4RjUsIDB4OUUsIDB4RjgsIDB4OUYsIDB4RkMsCi0JIDB4QTAsIDB4RkZ9CisJezB4OTAsIDB4MDAsIDB4OTEsIDB4NmUsIDB4OTIsIDB4ODgsIDB4OTMsIDB4OWEsCS8qIDE0ICovCisJIDB4OTQsIDB4YTgsIDB4OTUsIDB4YjMsIDB4OTYsIDB4YmQsIDB4OTcsIDB4YzYsCisJIDB4OTgsIDB4Y2YsIDB4OTksIDB4ZDYsIDB4OWEsIDB4ZGQsIDB4OWIsIDB4ZTMsCisJIDB4OWMsIDB4ZTksIDB4OWQsIDB4ZWYsIDB4OWUsIDB4ZjQsIDB4OWYsIDB4ZmEsCisJIDB4YTAsIDB4ZmZ9LAorCXsweDkwLCAweDAwLCAweDkxLCAweDkzLCAweDkyLCAweGE4LCAweDkzLCAweGI3LAkvKiAxNSAqLworCSAweDk0LCAweGMxLCAweDk1LCAweGNhLCAweDk2LCAweGQyLCAweDk3LCAweGQ4LAorCSAweDk4LCAweGRlLCAweDk5LCAweGUzLCAweDlhLCAweGU4LCAweDliLCAweGVkLAorCSAweDljLCAweGYxLCAweDlkLCAweGY1LCAweDllLCAweGY4LCAweDlmLCAweGZjLAorCSAweGEwLCAweGZmfQogfTsKIAogc3RhdGljIGNvbnN0IF9fdTggdGFzNTEzMGFfc2Vuc29yX2luaXRbXVs4XSA9IHsKQEAgLTM2Myw4ICs0MTgsMTAgQEAKIAl7fSwKIH07CiAKK3N0YXRpYyBfX3U4IHNlbnNvcl9yZXNldFtdID0gezB4NjEsIDB4NjgsIDB4NjIsIDB4ZmYsIDB4NjAsIDB4MDd9OworCiAvKiByZWFkIDEgYnl0ZSAqLwotc3RhdGljIGludCByZWdfcl8xKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyBpbnQgcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgICBfX3UxNiBpbmRleCkKIHsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCkBAIC0zNzgsMjYgKzQzNSwyNiBAQAogfQogCiBzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQlfX3UxNiB2YWx1ZSwKLQkJCV9fdTE2IGluZGV4LAotCQkJY29uc3QgX191OCAqYnVmZmVyLCBfX3UxNiBsZW4pCisJCSAgX191MTYgaW5kZXgpCiB7Ci0JaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKLQkJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJCTAsCi0JCQkgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCi0JCQkJdmFsdWUsIGluZGV4LAotCQkJCU5VTEwsIDAsIDUwMCk7Ci0JCXJldHVybjsKLQl9CisJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCTAsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkwLCBpbmRleCwKKwkJCU5VTEwsIDAsIDUwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ193X2J1ZihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgY29uc3QgX191OCAqYnVmZmVyLCBfX3UxNiBsZW4pCit7CiAJaWYgKGxlbiA8PSBVU0JfQlVGX1NaKSB7CiAJCW1lbWNweShnc3BjYV9kZXYtPnVzYl9idWYsIGJ1ZmZlciwgbGVuKTsKIAkJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCiAJCQkJMCwKLQkJCSAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKLQkJCQl2YWx1ZSwgaW5kZXgsCisJCQkgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJMHgwMSwgMCwKIAkJCQlnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwgNTAwKTsKIAl9IGVsc2UgewogCQlfX3U4ICp0bXBidWY7CkBAIC00MDcsMTMgKzQ2NCw3MiBAQAogCQl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKIAkJCQkwLAotCQkJICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAotCQkJCXZhbHVlLCBpbmRleCwKKwkJCSAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkweDAxLCAwLAogCQkJCXRtcGJ1ZiwgbGVuLCA1MDApOwogCQlrZnJlZSh0bXBidWYpOwogCX0KIH0KIAorLyogUmVwb3J0ZWQgYXMgT002ODAyKi8KK3N0YXRpYyB2b2lkIG9tNjgwMl9zZW5zb3JfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGk7CisJY29uc3QgX191OCAqcDsKKwlfX3U4IGJ5dGU7CisJX191OCB2YWxbNl0gPSB7MHg2MiwgMCwgMHg2NCwgMCwgMHg2MCwgMHgwNX07CisJc3RhdGljIGNvbnN0IF9fdTggc2Vuc29yX2luaXRbXSA9IHsKKwkJMHhkZiwgMHg2ZCwKKwkJMHhkZCwgMHgxOCwKKwkJMHg1YSwgMHhlMCwKKwkJMHg1YywgMHgwNywKKwkJMHg1ZCwgMHhiMCwKKwkJMHg1ZSwgMHgxZSwKKwkJMHg2MCwgMHg3MSwKKwkJMHhlZiwgMHgwMCwKKwkJMHhlOSwgMHgwMCwKKwkJMHhlYSwgMHgwMCwKKwkJMHg5MCwgMHgyNCwKKwkJMHg5MSwgMHhiMiwKKwkJMHg4MiwgMHgzMiwKKwkJMHhmZCwgMHg0MSwKKwkJMHgwMAkJCS8qIHRhYmxlIGVuZCAqLworCX07CisKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfcmVzZXQsIHNpemVvZiBzZW5zb3JfcmVzZXQpOworCW1zbGVlcCg1KTsKKwlpID0gNDsKKwl3aGlsZSAoLS1pIDwgMCkgeworCQlieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwNjApOworCQlpZiAoIShieXRlICYgMHgwMSkpCisJCQlicmVhazsKKwkJbXNsZWVwKDEwMCk7CisJfQorCWJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDA2Myk7CisJaWYgKGJ5dGUgIT0gMHgxNykgeworCQllcnIoIkJhZCBzZW5zb3IgcmVzZXQgJTAyeCIsIGJ5dGUpOworCQkvKiBjb250aW51ZT8gKi8KKwl9CisKKwlwID0gc2Vuc29yX2luaXQ7CisJd2hpbGUgKCpwICE9IDApIHsKKwkJdmFsWzFdID0gKnArKzsKKwkJdmFsWzNdID0gKnArKzsKKwkJaWYgKCpwID09IDApCisJCQlyZWdfdyhnc3BjYV9kZXYsIDB4M2M4MCk7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHZhbCwgc2l6ZW9mIHZhbCk7CisJCWkgPSA0OworCQl3aGlsZSAoLS1pID49IDApIHsKKwkJCW1zbGVlcCgxNSk7CisJCQlieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDYwKTsKKwkJCWlmICghKGJ5dGUgJiAweDAxKSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwltc2xlZXAoMTUpOworCXJlZ193KGdzcGNhX2RldiwgMHgzYzgwKTsKK30KKwogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwogc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKQEAgLTQzMCw3ICs1NDYsNyBAQAogCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKIAlzZC0+Y29udHJhc3QgPSBzZF9jdHJsc1tTRF9DT05UUkFTVF0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKIAlzZC0+Y29sb3JzID0gc2RfY3RybHNbU0RfQ09MT1JdLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPmdhbW1hID0gc2RfY3RybHNbU0RfR0FNTUFdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmdhbW1hID0gR0FNTUFfREVGOwogCXNkLT5taXJyb3IgPSBzZF9jdHJsc1tTRF9NSVJST1JdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmZyZXEgPSBzZF9jdHJsc1tTRF9MSUdIVEZSRVFdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPndoaXRlYmFsYW5jZSA9IHNkX2N0cmxzW1NEX1dISVRFX0JBTEFOQ0VdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CkBAIC00MzksMjcgKzU1NSw5OCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGluaXRfZGVmYXVsdF9wYXJhbWV0ZXJzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzczsKKwlfX3U4IHNldDZbNF0gPSB7IDB4OGYsIDB4MjQsIDB4YzMsIDB4MDAgfTsKKworCWJyaWdodG5lc3MgPSBzZC0+YnJpZ2h0bmVzczsKKwlpZiAoYnJpZ2h0bmVzcyA8IDcpIHsKKwkJc2V0NlsxXSA9IDB4MjY7CisJCXNldDZbM10gPSAweDcwIC0gYnJpZ2h0bmVzcyAqIDB4MTA7CisJfSBlbHNlIHsKKwkJc2V0NlszXSA9IDB4MDAgKyAoKGJyaWdodG5lc3MgLSA3KSAqIDB4MTApOworCX0KKworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNldDYsIHNpemVvZiBzZXQ2KTsKK30KKworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1bnNpZ25lZCBpbnQgY29udHJhc3QgPSBzZC0+Y29udHJhc3Q7CisJX191MTYgcmVnX3RvX3dyaXRlOworCisJaWYgKGNvbnRyYXN0IDwgNykKKwkJcmVnX3RvX3dyaXRlID0gMHg4ZWE5IC0gY29udHJhc3QgKiAweDIwMDsKKwllbHNlCisJCXJlZ190b193cml0ZSA9IDB4MDBhOSArIChjb250cmFzdCAtIDcpICogMHgyMDA7CisKKwlyZWdfdyhnc3BjYV9kZXYsIHJlZ190b193cml0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTE2IHJlZ190b193cml0ZTsKKworCXJlZ190b193cml0ZSA9IDB4ODBiYiArIHNkLT5jb2xvcnMgKiAweDEwMDsJLyogd2FzIDB4YzAgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIHJlZ190b193cml0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlQREVCVUcoRF9DT05GLCAiR2FtbWE6ICVkIiwgc2QtPmdhbW1hKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBnYW1tYV90YWJsZVtzZC0+Z2FtbWFdLCBzaXplb2YgZ2FtbWFfdGFibGVbMF0pOworfQorCitzdGF0aWMgdm9pZCBzZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCV9fdTggd2hpdGVfYmFsYW5jZVs4XSA9CisJCXsweDg3LCAweDIwLCAweDg4LCAweDIwLCAweDg5LCAweDIwLCAweDgwLCAweDM4fTsKKworCWlmIChzZC0+d2hpdGViYWxhbmNlKQorCQl3aGl0ZV9iYWxhbmNlWzddID0gMHgzYzsKKworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHdoaXRlX2JhbGFuY2UsIHNpemVvZiB3aGl0ZV9iYWxhbmNlKTsKK30KKworc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191MTYgcmVnX3RvX3dyaXRlOworCisJcmVnX3RvX3dyaXRlID0gMHgwYWE2ICsgMHgxMDAwICogc2QtPnNoYXJwbmVzczsKKworCXJlZ193KGdzcGNhX2RldiwgcmVnX3RvX3dyaXRlKTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCS8qIHNvbWUgb2YgdGhpcyByZWdpc3RlcnMgYXJlIG5vdCByZWFsbHkgbmVkZWQsIGJlY2F1c2UKIAkgKiB0aGV5IGFyZSBvdmVycmlkZW4gYnkgc2V0YnJpZ3RobmVzcywgc2V0Y29udHJhc3QsIGV0YywKIAkgKiBidXQgd29udCBodXJ0IGFueXdheSwgYW5kIGNhbiBoZWxwIHNvbWVvbmUgd2l0aCBzaW1pbGFyIHdlYmNhbQogCSAqIHRvIHNlZSB0aGUgaW5pdGlhbCBwYXJhbWV0ZXJzLiovCi0JaW50IGkgPSAwOwotCV9fdTggdGVzdF9ieXRlOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgaTsKKwlfX3U4IGJ5dGUsIHRlc3RfYnl0ZTsKIAogCXN0YXRpYyBjb25zdCBfX3U4IHJlYWRfaW5kZXhzW10gPQogCQl7IDB4MDYsIDB4MDcsIDB4MGEsIDB4MGIsIDB4NjYsIDB4ODAsIDB4ODEsIDB4OGUsIDB4OGYsIDB4YTUsCiAJCSAgMHhhNiwgMHhhOCwgMHhiYiwgMHhiYywgMHhjNiwgMHgwMCwgMHgwMCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IG4xWzZdID0KKwlzdGF0aWMgY29uc3QgX191OCBuMVtdID0KIAkJCXsweDA4LCAweDAzLCAweDA5LCAweDAzLCAweDEyLCAweDA0fTsKLQlzdGF0aWMgY29uc3QgX191OCBuMlsyXSA9CisJc3RhdGljIGNvbnN0IF9fdTggbjJbXSA9CiAJCQl7MHgwOCwgMHgwMH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbnNldFs2XSA9Ci0JCXsgMHg2MSwgMHg2OCwgMHg2MiwgMHhmZiwgMHg2MCwgMHgwNyB9OwotCXN0YXRpYyBjb25zdCBfX3U4IG4zWzZdID0KKwlzdGF0aWMgY29uc3QgX191OCBuM1tdID0KIAkJCXsweDYxLCAweDY4LCAweDY1LCAweDBhLCAweDYwLCAweDA0fTsKLQlzdGF0aWMgY29uc3QgX191OCBuNFsweDQ2XSA9CisJc3RhdGljIGNvbnN0IF9fdTggbjRbXSA9CiAJCXsweDA5LCAweDAxLCAweDEyLCAweDA0LCAweDY2LCAweDhhLCAweDgwLCAweDNjLAogCQkgMHg4MSwgMHgyMiwgMHg4NCwgMHg1MCwgMHg4YSwgMHg3OCwgMHg4YiwgMHg2OCwKIAkJIDB4OGMsIDB4ODgsIDB4OGUsIDB4MzMsIDB4OGYsIDB4MjQsIDB4YWEsIDB4YjEsCkBAIC00NjksMTMxICs2NTYsMTEzIEBACiAJCSAweDY1LCAweDBhLCAweGJiLCAweDg2LCAweGFmLCAweDU4LCAweGIwLCAweDY4LAogCQkgMHg4NywgMHg0MCwgMHg4OSwgMHgyYiwgMHg4ZCwgMHhmZiwgMHg4MywgMHg0MCwKIAkJIDB4YWMsIDB4ODQsIDB4YWQsIDB4ODYsIDB4YWYsIDB4NDZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ0WzE4XSA9IHsKLQkJMHhlMCwgMHg2MCwgMHhlMSwgMHhhOCwgMHhlMiwgMHhlMCwgMHhlMywgMHg2MCwgMHhlNCwgMHhhOCwKLQkJMHhlNSwgMHhlMCwgMHhlNiwgMHg2MCwgMHhlNywgMHhhOCwKLQkJMHhlOCwgMHhlMAotCX07Ci0JLyogb2pvIHB1ZWRlIHNlciAweGU2IGVuIHZleiBkZSAweGU5ICovCi0Jc3RhdGljIGNvbnN0IF9fdTggbnNldDJbMjBdID0gewotCQkweGQwLCAweGJiLCAweGQxLCAweDI4LCAweGQyLCAweDEwLCAweGQzLCAweDEwLCAweGQ0LCAweGJiLAotCQkweGQ1LCAweDI4LCAweGQ2LCAweDFlLCAweGQ3LCAweDI3LAotCQkweGQ4LCAweGM4LCAweGQ5LCAweGZjCi0JfTsKLQlzdGF0aWMgY29uc3QgX191OCBtaXNzaW5nWzhdID0KLQkJeyAweDg3LCAweDIwLCAweDg4LCAweDIwLCAweDg5LCAweDIwLCAweDgwLCAweDM4IH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbnNldDNbMThdID0gewotCQkweGM3LCAweDYwLCAweGM4LCAweGE4LCAweGM5LCAweGUwLCAweGNhLCAweDYwLCAweGNiLCAweGE4LAotCQkweGNjLCAweGUwLCAweGNkLCAweDYwLCAweGNlLCAweGE4LAotCQkweGNmLCAweGUwCi0JfTsKLQlzdGF0aWMgY29uc3QgX191OCBuc2V0NVs0XSA9Ci0JCXsgMHg4ZiwgMHgyNCwgMHhjMywgMHgwMCB9OwkvKiBicmlnaHQgKi8KLQlzdGF0aWMgY29uc3QgX191OCBuc2V0NlszNF0gPSB7Ci0JCTB4OTAsIDB4MDAsIDB4OTEsIDB4MWMsIDB4OTIsIDB4MzAsIDB4OTMsIDB4NDMsIDB4OTQsIDB4NTQsCi0JCTB4OTUsIDB4NjUsIDB4OTYsIDB4NzUsIDB4OTcsIDB4ODQsCi0JCTB4OTgsIDB4OTMsIDB4OTksIDB4YTEsIDB4OWEsIDB4YjAsIDB4OWIsIDB4YmQsIDB4OWMsIDB4Y2EsCi0JCTB4OWQsIDB4ZDgsIDB4OWUsIDB4ZTUsIDB4OWYsIDB4ZjIsCi0JCTB4YTAsIDB4ZmYKLQl9OwkJCS8qIEdhbW1hICovCi0Jc3RhdGljIGNvbnN0IF9fdTggbnNldDdbNF0gPQotCQkJeyAweDY2LCAweGNhLCAweGE4LCAweGY4IH07CS8qIDUwLzYwIEh6ICovCiAJc3RhdGljIGNvbnN0IF9fdTggbnNldDlbNF0gPQogCQkJeyAweDBiLCAweDA0LCAweDBhLCAweDc4IH07CiAJc3RhdGljIGNvbnN0IF9fdTggbnNldDhbNl0gPQogCQkJeyAweGE4LCAweGYwLCAweGM2LCAweDg4LCAweGMwLCAweDAwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbnNldDEwWzZdID0KLQkJCXsgMHgwYywgMHgwMywgMHhhYiwgMHgxMCwgMHg4MSwgMHgyMCB9OwogCi0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG4xLCAweDA2KTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldCwgMHgwNik7Ci0JcmVnX3JfMShnc3BjYV9kZXYsIDB4MDA2Myk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG4yLCAweDAyKTsKKwlieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDA2KTsKKwl0ZXN0X2J5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDcpOworCWlmIChieXRlID09IDB4MDggJiYgdGVzdF9ieXRlID09IDB4MDcpIHsKKwkJUERFQlVHKERfQ09ORiwgInNlbnNvciBvbTY4MDIiKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9PTTY4MDI7CisJfSBlbHNlIGlmIChieXRlID09IDB4MDggJiYgdGVzdF9ieXRlID09IDB4MDEpIHsKKwkJUERFQlVHKERfQ09ORiwgInNlbnNvciB0YXM1MTMwYSIpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBBOworCX0gZWxzZSB7CisJCVBERUJVRyhEX0NPTkYsICJ1bmtub3duIHNlbnNvciAlMDJ4ICUwMngiLCBieXRlLCB0ZXN0X2J5dGUpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBBOworCX0KIAorCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4xLCBzaXplb2YgbjEpOworCXRlc3RfYnl0ZSA9IDA7CisJaSA9IDU7CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9yZXNldCwgc2l6ZW9mIHNlbnNvcl9yZXNldCk7CisJCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDYzKTsKKwkJbXNsZWVwKDEwMCk7CisJCWlmICh0ZXN0X2J5dGUgPT0gMHgxNykKKwkJCWJyZWFrOwkJLyogT0sgKi8KKwl9CisJaWYgKGkgPCAwKSB7CisJCWVycigiQmFkIHNlbnNvciByZXNldCAlMDJ4IiwgdGVzdF9ieXRlKTsKKy8qCQlyZXR1cm4gLUVJTzsgKi8KKy8qZml4bWU6IHRlc3QgLSBjb250aW51ZSAqLworCX0KKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBuMiwgc2l6ZW9mIG4yKTsKKworCWkgPSAwOwogCXdoaWxlIChyZWFkX2luZGV4c1tpXSAhPSAweDAwKSB7Ci0JCXRlc3RfYnl0ZSA9IHJlZ19yXzEoZ3NwY2FfZGV2LCByZWFkX2luZGV4c1tpXSk7Ci0JCVBERUJVRyhEX0NPTkYsICJSZWcgMHglMDJ4ID0+IDB4JTAyeCIsIHJlYWRfaW5kZXhzW2ldLAorCQl0ZXN0X2J5dGUgPSByZWdfcihnc3BjYV9kZXYsIHJlYWRfaW5kZXhzW2ldKTsKKwkJUERFQlVHKERfU1RSRUFNLCAiUmVnIDB4JTAyeCA9IDB4JTAyeCIsIHJlYWRfaW5kZXhzW2ldLAogCQkgICAgICAgdGVzdF9ieXRlKTsKIAkJaSsrOwogCX0KIAotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBuMywgMHgwNik7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG40LCAweDQ2KTsKLQlyZWdfcl8xKGdzcGNhX2RldiwgMHgwMDgwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MmM4MCwgTlVMTCwgMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQyLCAweDE0KTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldDMsIDB4MTIpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBuc2V0NCwgMHgxMik7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDM4ODAsIE5VTEwsIDApOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgzODgwLCBOVUxMLCAwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MzM4ZSwgTlVMTCwgMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQ1LCAweDA0KTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MDBhOSwgTlVMTCwgMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQ2LCAweDIyKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODZiYiwgTlVMTCwgMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDRhYTYsIE5VTEwsIDApOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4zLCBzaXplb2YgbjMpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIG40LCBzaXplb2YgbjQpOworCXJlZ19yKGdzcGNhX2RldiwgMHgwMDgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MmM4MCk7CiAKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbWlzc2luZywgMHgwOCk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTEsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTEpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEzLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEzKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMiwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMik7CiAKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MjA4NywgTlVMTCwgMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDIwODgsIE5VTEwsIDApOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgyMDg5LCBOVUxMLCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4Mzg4MCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDM4ODApOworCXJlZ193KGdzcGNhX2RldiwgMHgzMzhlKTsKIAotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBuc2V0NywgMHgwNCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQxMCwgMHgwNik7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQ4LCAweDA2KTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldDksIDB4MDQpOworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXNldGdhbW1hKGdzcGNhX2Rldik7CisJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CisJc2V0d2hpdGViYWxhbmNlKGdzcGNhX2Rldik7CiAKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4Mjg4MCwgTlVMTCwgMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQyLCAweDE0KTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldDMsIDB4MTIpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBuc2V0NCwgMHgxMik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDIwODcpOwkvKiB0aWVkIHRvIHdoaXRlIGJhbGFuY2U/ICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDIwODgpOworCXJlZ193KGdzcGNhX2RldiwgMHgyMDg5KTsKKworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGE0LAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGE0KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNSwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNSk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDgsIHNpemVvZiBuc2V0OCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDksIHNpemVvZiBuc2V0OSk7CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4Mjg4MCk7CisKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyKTsKIAogCXJldHVybiAwOwogfQogCi0vKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KLXN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0JaW5pdF9kZWZhdWx0X3BhcmFtZXRlcnMoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXVuc2lnbmVkIGludCBicmlnaHRuZXNzOwotCV9fdTggc2V0Nls0XSA9IHsgMHg4ZiwgMHgyNiwgMHhjMywgMHg4MCB9OwotCWJyaWdodG5lc3MgPSBzZC0+YnJpZ2h0bmVzczsKLQotCWlmIChicmlnaHRuZXNzIDwgNykgewotCQlzZXQ2WzNdID0gMHg3MCAtIChicmlnaHRuZXNzICogMHhhKTsKLQl9IGVsc2UgewotCQlzZXQ2WzFdID0gMHgyNDsKLQkJc2V0NlszXSA9IDB4MDAgKyAoKGJyaWdodG5lc3MgLSA3KSAqIDB4YSk7Ci0JfQotCi0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIHNldDYsIDQpOwotfQotCiBzdGF0aWMgdm9pZCBzZXRmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KIAlfX3U4IGZsaXBjbWRbOF0gPQotCSAgICB7IDB4NjIsIDB4MDcsIDB4NjMsIDB4MDMsIDB4NjQsIDB4MDAsIDB4NjAsIDB4MDkgfTsKKwkJezB4NjIsIDB4MDcsIDB4NjMsIDB4MDMsIDB4NjQsIDB4MDAsIDB4NjAsIDB4MDl9OwogCi0JaWYgKHNkLT5taXJyb3IgPT0gMSkKKwlpZiAoc2QtPm1pcnJvcikKIAkJZmxpcGNtZFszXSA9IDB4MDE7CiAKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgZmxpcGNtZCwgOCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgZmxpcGNtZCwgc2l6ZW9mIGZsaXBjbWQpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRlZmZlY3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBlZmZlY3RzX3RhYmxlW3NkLT5lZmZlY3RdLCAweDA2KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBlZmZlY3RzX3RhYmxlW3NkLT5lZmZlY3RdLAorCQkJCXNpemVvZiBlZmZlY3RzX3RhYmxlWzBdKTsKIAlpZiAoc2QtPmVmZmVjdCA9PSAxIHx8IHNkLT5lZmZlY3QgPT0gNSkgewogCQlQREVCVUcoRF9DT05GLAogCQkgICAgICAgIlRoaXMgZWZmZWN0IGhhdmUgYmVlbiBkaXNhYmxlZCBmb3Igd2ViY2FtIFwic2FmZXR5XCIiKTsKQEAgLTYwMSwyMiArNzcwLDkgQEAKIAl9CiAKIAlpZiAoc2QtPmVmZmVjdCA9PSAxIHx8IHNkLT5lZmZlY3QgPT0gNCkKLQkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDRhYTYsIE5VTEwsIDApOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4NGFhNik7CiAJZWxzZQotCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ZmFhNiwgTlVMTCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0JX191OCB3aGl0ZV9iYWxhbmNlWzhdID0KLQkgICAgeyAweDg3LCAweDIwLCAweDg4LCAweDIwLCAweDg5LCAweDIwLCAweDgwLCAweDM4IH07Ci0KLQlpZiAoc2QtPndoaXRlYmFsYW5jZSA9PSAxKQotCQl3aGl0ZV9iYWxhbmNlWzddID0gMHgzYzsKLQotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCB3aGl0ZV9iYWxhbmNlLCA4KTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZhYTYpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRsaWdodGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtNjI3LDQ0ICs3ODMsMTQzIEBACiAJaWYgKHNkLT5mcmVxID09IDIpCS8qIDYwaHogKi8KIAkJZnJlcVsxXSA9IDB4MDA7CiAKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MSwgMHgwMDAwLCBmcmVxLCAweDQpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIGZyZXEsIHNpemVvZiBmcmVxKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorLyogSXMgdGhpcyByZWFsbHkgbmVlZGVkPworICogaSBhZGRlZCBzb21lIG1vZHVsZSBwYXJhbWV0ZXJzIGZvciB0ZXN0IHdpdGggc29tZSB1c2VycyAqLworc3RhdGljIHZvaWQgcG9sbF9zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQl1bnNpZ25lZCBpbnQgY29udHJhc3QgPSBzZC0+Y29udHJhc3Q7Ci0JX191MTYgcmVnX3RvX3dyaXRlID0gMHgwMDsKKwlzdGF0aWMgY29uc3QgX191OCBwb2xsMVtdID0KKwkJezB4NjcsIDB4MDUsIDB4NjgsIDB4ODEsIDB4NjksIDB4ODAsIDB4NmEsIDB4ODIsCisJCSAweDZiLCAweDY4LCAweDZjLCAweDY5LCAweDcyLCAweGQ5LCAweDczLCAweDM0LAorCQkgMHg3NCwgMHgzMiwgMHg3NSwgMHg5MiwgMHg3NiwgMHgwMCwgMHgwOSwgMHgwMSwKKwkJIDB4NjAsIDB4MTR9OworCXN0YXRpYyBjb25zdCBfX3U4IHBvbGwyW10gPQorCQl7MHg2NywgMHgwMiwgMHg2OCwgMHg3MSwgMHg2OSwgMHg3MiwgMHg3MiwgMHhhOSwKKwkJIDB4NzMsIDB4MDIsIDB4NzMsIDB4MDIsIDB4NjAsIDB4MTR9OworCXN0YXRpYyBjb25zdCBfX3U4IHBvbGwzW10gPQorCQl7MHg4NywgMHgzZiwgMHg4OCwgMHgyMCwgMHg4OSwgMHgyZH07CisJc3RhdGljIGNvbnN0IF9fdTggcG9sbDRbXSA9CisJCXsweGE2LCAweDBhLCAweGVhLCAweGNmLCAweGJlLCAweDI2LCAweGIxLCAweDVmLAorCQkgMHhhMSwgMHhiMSwgMHhkYSwgMHg2YiwgMHhkYiwgMHg5OCwgMHhkZiwgMHgwYywKKwkJIDB4YzIsIDB4ODAsIDB4YzMsIDB4MTB9OwogCi0JaWYgKGNvbnRyYXN0IDwgNykKLQkJcmVnX3RvX3dyaXRlID0gMHg4ZWE5IC0gKDB4MjAwICogY29udHJhc3QpOwotCWVsc2UKLQkJcmVnX3RvX3dyaXRlID0gKDB4MDBhOSArICgoY29udHJhc3QgLSA3KSAqIDB4MjAwKSk7Ci0KLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIHJlZ190b193cml0ZSwgTlVMTCwgMCk7CisJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX1RBUzUxMzBBKSB7CisJCVBERUJVRyhEX1NUUkVBTSwgIltTZW5zb3IgcmVxdWlyZXMgcG9sbGluZ10iKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgcG9sbDEsIHNpemVvZiBwb2xsMSk7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHBvbGwyLCBzaXplb2YgcG9sbDIpOworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsMywgc2l6ZW9mIHBvbGwzKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgcG9sbDQsIHNpemVvZiBwb2xsNCk7CisJfQogfQogCi1zdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTE2IHJlZ190b193cml0ZTsKKwlpbnQgaSwgbW9kZTsKKwlfX3U4IHQyW10gPSB7IDB4MDcsIDB4MDAsIDB4MGQsIDB4NjAsIDB4MGUsIDB4ODAgfTsKKwlzdGF0aWMgY29uc3QgX191OCB0M1tdID0KKwkJeyAweGIzLCAweDA3LCAweGI0LCAweDAwLCAweGI1LCAweDg4LCAweGI2LCAweDAyLCAweGI3LCAweDA2LAorCQkgIDB4YjgsIDB4MDAsIDB4YjksIDB4ZTcsIDB4YmEsIDB4MDEgfTsKIAotCXJlZ190b193cml0ZSA9IDB4YzBiYiArIHNkLT5jb2xvcnMgKiAweDEwMDsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIHJlZ190b193cml0ZSwgTlVMTCwgMCk7CisJbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS4gcHJpdjsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIDE6CQkvKiAzNTJ4Mjg4ICovCisJCXQyWzFdID0gMHg0MDsKKwkJYnJlYWs7CisJY2FzZSAyOgkJLyogMzIweDI0MCAqLworCQl0MlsxXSA9IDB4MTA7CisJCWJyZWFrOworCWNhc2UgMzoJCS8qIDE3NngxNDQgKi8KKwkJdDJbMV0gPSAweDUwOworCQlicmVhazsKKwljYXNlIDQ6CQkvKiAxNjB4MTIwICovCisJCXQyWzFdID0gMHgyMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoJLyogNjQweDQ4MCAoMHgwMCkgKi8KKwkJYnJlYWs7CisJfQorCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1RBUzUxMzBBKSB7CisJCWkgPSAwOworCQl3aGlsZSAodGFzNTEzMGFfc2Vuc29yX2luaXRbaV1bMF0gIT0gMCkgeworCQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgdGFzNTEzMGFfc2Vuc29yX2luaXRbaV0sCisJCQkJCSBzaXplb2YgdGFzNTEzMGFfc2Vuc29yX2luaXRbMF0pOworCQkJaSsrOworCQl9CisJCXJlZ193KGdzcGNhX2RldiwgMHgzYzgwKTsKKwkJLyoganVzdCBpbiBjYXNlIGFuZCB0byBrZWVwIHN5bmMgd2l0aCBsb2dzIChmb3IgbWluZSkgKi8KKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgdGFzNTEzMGFfc2Vuc29yX2luaXRbM10sCisJCQkJIHNpemVvZiB0YXM1MTMwYV9zZW5zb3JfaW5pdFswXSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgzYzgwKTsKKwl9IGVsc2UgeworCQlvbTY4MDJfc2Vuc29yX2luaXQoZ3NwY2FfZGV2KTsKKwl9CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTQsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTQpOworCXJlZ19yKGdzcGNhX2RldiwgMHgwMDEyKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCB0Miwgc2l6ZW9mIHQyKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCB0Mywgc2l6ZW9mIHQzKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAxMyk7CisJbXNsZWVwKDE1KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0sCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtKTsKKwlwb2xsX3NlbnNvcihnc3BjYV9kZXYpOworCisJLyogcmVzdGFydCBvbiBlYWNoIHN0YXJ0LCBqdXN0IGluIGNhc2UsIHNvbWV0aW1lcyByZWdzIGdvZXMgd3JvbmcKKwkgKiB3aGVuIHVzaW5nIGNvbnRyb2xzIGZyb20gYXBwICovCisJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLX0KLQotc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191MTYgcmVnX3RvX3dyaXRlOwogCi0JcmVnX3RvX3dyaXRlID0gMHgwYWE2ICsgMHgxMDAwICogc2QtPnNoYXJwbmVzczsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0sCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtKTsKKwltc2xlZXAoMjApOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0pOworCW1zbGVlcCgyMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAzMDkpOworfQogCi0JcmVnX3coZ3NwY2FfZGV2LCAweDAwLCByZWdfdG9fd3JpdGUsIE5VTEwsIDApOworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJc3RhdGljIF9fdTggZmZkOVtdID0geyAweGZmLCAweGQ5IH07CisKKwlpZiAoZGF0YVswXSA9PSAweDVhKSB7CisJCS8qIENvbnRyb2wgUGFja2V0LCBhZnRlciB0aGlzIGNhbWUgdGhlIGhlYWRlciBhZ2FpbiwKKwkJICogYnV0IGV4dHJhIGJ5dGVzIGNhbWUgaW4gdGhlIHBhY2tldCBiZWZvcmUgdGhpcywKKwkJICogc29tZXRpbWVzIGFuIEVPRiBhcnJpdmVzLCBzb21ldGltZXMgbm90Li4uICovCisJCXJldHVybjsKKwl9CisJZGF0YSArPSAyOworCWxlbiAtPSAyOworCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVsxXSA9PSAweGQ4KSB7CisJCS8qIGV4dHJhIGJ5dGVzLi4uLi4sIGNvdWxkIGJlIHByb2Nlc3NlZCB0b28gYnV0IHdvdWxkIGJlCisJCSAqIGEgd2FzdGUgb2YgdGltZSwgcmlnaHQgbm93IGxlYXZlIHRoZSBhcHBsaWNhdGlvbiBhbmQKKwkJICogbGlianBlZyBkbyBpdCBmb3Igb3Vyc2VybHZlcy4uICovCisJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLAorCQkJCQlmZmQ5LCAyKTsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkYXRhW2xlbiAtIDJdID09IDB4ZmYgJiYgZGF0YVtsZW4gLSAxXSA9PSAweGQ5KSB7CisJCS8qIEp1c3QgaW4gY2FzZSwgaSBoYXZlIHNlZW4gcGFja2V0cyB3aXRoIHRoZSBtYXJrZXIsCisJCSAqIG90aGVyJ3MgZG8gbm90IGluY2x1ZGUgaXQuLi4gKi8KKwkJbGVuIC09IDI7CisJfQorCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7CiB9CiAKIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTc4OCw2ICsxMDQzLDcgQEAKIHN0YXRpYyBpbnQgc2RfZ2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwogCSp2YWwgPSBzZC0+Z2FtbWE7CiAJcmV0dXJuIDA7CiB9CkBAIC04MzUsOSArMTA5MSw5IEBACiAKIAlzZC0+YXV0b2dhaW4gPSB2YWw7CiAJaWYgKHZhbCAhPSAwKQotCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ZjQ4ZSwgTlVMTCwgMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhmNDhlKTsKIAllbHNlCi0JCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHhiNDhlLCBOVUxMLCAwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGI0OGUpOwogCXJldHVybiAwOwogfQogCkBAIC04NDksOTkgKzExMDUsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0JaW50IG1vZGU7Ci0KLQlzdGF0aWMgY29uc3QgX191OCB0MVtdID0geyAweDY2LCAweDAwLCAweGE4LCAweGU4IH07Ci0JX191OCB0MltdID0geyAweDA3LCAweDAwLCAweDBkLCAweDYwLCAweDBlLCAweDgwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggdDNbXSA9Ci0JCXsgMHhiMywgMHgwNywgMHhiNCwgMHgwMCwgMHhiNSwgMHg4OCwgMHhiNiwgMHgwMiwgMHhiNywgMHgwNiwKLQkJICAweGI4LCAweDAwLCAweGI5LCAweGU3LCAweGJhLCAweDAxIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggdDRbXSA9IHsgMHgwYiwgMHgwNCwgMHgwYSwgMHg0MCB9OwotCi0JbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS4gcHJpdjsKLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIDE6CQkvKiAzNTJ4Mjg4ICovCi0JCXQyWzFdID0gMHg0MDsKLQkJYnJlYWs7Ci0JY2FzZSAyOgkJLyogMzIweDI0MCAqLwotCQl0MlsxXSA9IDB4MTA7Ci0JCWJyZWFrOwotCWNhc2UgMzoJCS8qIDE3NngxNDQgKi8KLQkJdDJbMV0gPSAweDUwOwotCQlicmVhazsKLQljYXNlIDQ6CQkvKiAxNjB4MTIwICovCi0JCXQyWzFdID0gMHgyMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoJLyogNjQweDQ4MCAoMHgwMCkgKi8KLQkJYnJlYWs7Ci0JfQotCi0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIHRhczUxMzBhX3NlbnNvcl9pbml0WzBdLCAweDgpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCB0YXM1MTMwYV9zZW5zb3JfaW5pdFsxXSwgMHg4KTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgdGFzNTEzMGFfc2Vuc29yX2luaXRbMl0sIDB4OCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIHRhczUxMzBhX3NlbnNvcl9pbml0WzNdLCAweDgpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgzYzgwLCBOVUxMLCAwKTsKLQkJLyoganVzdCBpbiBjYXNlIGFuZCB0byBrZWVwIHN5bmMgd2l0aCBsb2dzICAoZm9yIG1pbmUpICovCi0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIHRhczUxMzBhX3NlbnNvcl9pbml0WzNdLCAweDgpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgzYzgwLCBOVUxMLCAwKTsKLQkJLyoganVzdCBpbiBjYXNlIGFuZCB0byBrZWVwIHN5bmMgd2l0aCBsb2dzICAoZm9yIG1pbmUpICovCi0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIHQxLCA0KTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgdDIsIDYpOwotCXJlZ19yXzEoZ3NwY2FfZGV2LCAweDAwMTIpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCB0MywgMHgxMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDAwMTMsIE5VTEwsIDApOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCB0NCwgMHg0KTsKLQkvKiByZXN0YXJ0IG9uIGVhY2ggc3RhcnQsIGp1c3QgaW4gY2FzZSwgc29tZXRpbWVzIHJlZ3MgZ29lcyB3cm9uZwotCSAqIHdoZW4gdXNpbmcgY29udHJvbHMgZnJvbSBhcHAgKi8KLQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7Ci0Jc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKLQlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCi0JCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCi0JCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCi17Ci0JaW50IHNvZiA9IDA7Ci0Jc3RhdGljIF9fdTggZmZkOVtdID0geyAweGZmLCAweGQ5IH07Ci0KLQlpZiAoZGF0YVswXSA9PSAweDVhKSB7Ci0JCS8qIENvbnRyb2wgUGFja2V0LCBhZnRlciB0aGlzIGNhbWUgdGhlIGhlYWRlciBhZ2FpbiwKLQkJICogYnV0IGV4dHJhIGJ5dGVzIGNhbWUgaW4gdGhlIHBhY2tldCBiZWZvcmUgdGhpcywKLQkJICogc29tZXRpbWVzIGFuIEVPRiBhcnJpdmVzLCBzb21ldGltZXMgbm90Li4uICovCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAoZGF0YVtsZW4gLSAxXSA9PSAweGZmICYmIGRhdGFbbGVuXSA9PSAweGQ5KSB7Ci0JCS8qIEp1c3QgaW4gY2FzZSwgaSBoYXZlIHNlZW4gcGFja2V0cyB3aXRoIHRoZSBtYXJrZXIsCi0JCSAqIG90aGVyJ3MgZG8gbm90IGluY2x1ZGUgaXQuLi4gKi8KLQkJZGF0YSArPSAyOwotCQlsZW4gLT0gNDsKLQl9IGVsc2UgaWYgKGRhdGFbMl0gPT0gMHhmZiAmJiBkYXRhWzNdID09IDB4ZDgpIHsKLQkJc29mID0gMTsKLQkJZGF0YSArPSAyOwotCQlsZW4gLT0gMjsKLQl9IGVsc2UgewotCQlkYXRhICs9IDI7Ci0JCWxlbiAtPSAyOwotCX0KLQotCWlmIChzb2YpIHsKLQkJLyogZXh0cmEgYnl0ZXMuLi4uLiwgY291bGQgYmUgcHJvY2Vzc2VkIHRvbyBidXQgd291bGQgYmUKLQkJICogYSB3YXN0ZSBvZiB0aW1lLCByaWdodCBub3cgbGVhdmUgdGhlIGFwcGxpY2F0aW9uIGFuZAotCQkgKiBsaWJqcGVnIGRvIGl0IGZvciBvdXJzZXJsdmVzLi4gKi8KLQkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCi0JCQkJCWZmZDksIDIpOwotCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOwotCQlyZXR1cm47Ci0JfQotCi0JZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKLX0KLQogc3RhdGljIGludCBzZF9xdWVyeW1lbnUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICptZW51KQogewpAQCAtOTc1LDYgKzExMzgsNyBAQAogCS5jb25maWcgPSBzZF9jb25maWcsCiAJLmluaXQgPSBzZF9pbml0LAogCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAogCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKaW5kZXggMDg0YWYwNS4uOTY4YTU5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCkBAIC0zOTAsNyArMzkwLDcgQEAKIH0KIAogLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLwotc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9TTE9QRSwgMHgzMik7CiAJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9CSVRDVFJMLCAweDAwKTsKQEAgLTQ0Myw2ICs0NDMsNyBAQAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJdHZfODUzMl9Qb2xsUmVnKGdzcGNhX2Rldik7CiAJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAwKTsJLyogMHgzMSAqLworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwppbmRleCBiZDRjMjI2Li5iZTQ2ZDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKQEAgLTgwLDcgKzgwLDYgQEAKIAkJLnN0ZXAgICAgPSAxLAogI2RlZmluZSBGUkVRX0RFRiAxCiAJCS5kZWZhdWx0X3ZhbHVlID0gRlJFUV9ERUYsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKIAkgICAgfSwKIAkgICAgLnNldCA9IHNkX3NldGZyZXEsCiAJICAgIC5nZXQgPSBzZF9nZXRmcmVxLApAQCAtMTUwMiw3ICsxNTAxLDcgQEAKIAl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NjBfZnJlcV90YltzZC0+bGlnaHRmcmVxXSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAljb25zdCBfX3U4ICpHYW1tYVQgPSBOVUxMOwpAQCAtMTU4Niw3ICsxNTg1LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJUERFQlVHKERfUFJPQkUsICJEYW1uZWQgISEgbm8gc2Vuc29yIGZvdW5kIEJ5ZSIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRU1FRElVTVRZUEU7CiAJfQogCWlmIChHYW1tYVQgJiYgTWF0cml4VCkgewogCQlwdXRfdGFiX3RvX3JlZyhnc3BjYV9kZXYsIEdhbW1hVCwgMTcsIDB4Yjg0YSk7CkBAIC0xNjIyLDYgKzE2MjEsNyBAQAogCQlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCQlzZXRsaWdodGZyZXEoZ3NwY2FfZGV2KTsKIAl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYwppbmRleCBkNjFlZjcyLi5kMGE0NDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCkBAIC03MTc4LDcgKzcxNzgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwpAQCAtNzMzMSw2ICs3MzMxLDcgQEAKIAkJcmVnX3coZGV2LCAweDAyLCAweDAwMDgpOwogCQlicmVhazsKIAl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKaW5kZXggYTMwMjU0Yi4uZWZlODQ5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKQEAgLTEyLDYgKzEyLDEwIEBACiAgKiAgICAgIE1hcmt1cyBSZWNoYmVyZ2VyIDxtcmVjaGJlcmdlckBnbWFpbC5jb20+CiAgKiBtb2RpZmllZCBmb3IgRFZpQ08gRnVzaW9uIEhEVFYgNSBSVCBHT0xEIGJ5CiAgKiAgICAgIENoYW9ndWkgWmhhbmcgPGN6aGFuZzE5NzRAZ21haWwuY29tPgorICogbW9kaWZpZWQgZm9yIE1TSSBUVkBueXdoZXJlIFBsdXMgYnkKKyAqICAgICAgSGVucnkgV29uZyA8aGVucnlAc3R1ZmZlZGNvdy5uZXQ+CisgKiAgICAgIE1hcmsgU2NodWx0eiA8bjl4bWpAeWFob28uY29tPgorICogICAgICBCcmlhbiBSb2dlcnMgPGJyaWFuX3JvZ2Vyc0Bjb21jYXN0Lm5ldD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNjUsNyArNjksNyBAQAogCQkJICAgICAgIGludCBzaXplLCBpbnQgb2Zmc2V0KQogewogCXVuc2lnbmVkIGNoYXIgYnVmWzZdOwotCWludCBzdGFydCwgcmFuZ2UsIHRvZ2dsZSwgZGV2LCBjb2RlOworCWludCBzdGFydCwgcmFuZ2UsIHRvZ2dsZSwgZGV2LCBjb2RlLCBpcmNvZGU7CiAKIAkvKiBwb2xsIElSIGNoaXAgKi8KIAlpZiAoc2l6ZSAhPSBpMmNfbWFzdGVyX3JlY3YoJmlyLT5jLGJ1ZixzaXplKSkKQEAgLTg1LDYgKzg5LDI0IEBACiAJaWYgKCFzdGFydCkKIAkJLyogbm8ga2V5IHByZXNzZWQgKi8KIAkJcmV0dXJuIDA7CisJLyoKKwkgKiBIYXVwcGF1Z2UgcmVtb3RlcyAoYmxhY2svc2lsdmVyKSBhbHdheXMgdXNlCisJICogc3BlY2lmaWMgZGV2aWNlIGlkcy4gSWYgd2UgZG8gbm90IGZpbHRlciB0aGUKKwkgKiBkZXZpY2UgaWRzIHRoZW4gbWVzc2FnZXMgZGVzdGluZWQgZm9yIGRldmljZXMKKwkgKiBzdWNoIGFzIFRWcyAoaWQ9MCkgd2lsbCBnZXQgdGhyb3VnaCBjYXVzaW5nCisJICogbWlzLWZpcmVkIGV2ZW50cy4KKwkgKgorCSAqIFdlIGFsc28gZmlsdGVyIG91dCBpbnZhbGlkIGtleSBwcmVzc2VzIHdoaWNoCisJICogcHJvZHVjZSBhbm5veWluZyBkZWJ1ZyBsb2cgZW50cmllcy4KKwkgKi8KKwlpcmNvZGU9IChzdGFydCA8PCAxMikgfCAodG9nZ2xlIDw8IDExKSB8IChkZXYgPDwgNikgfCBjb2RlOworCWlmICgoaXJjb2RlICYgMHgxZmZmKT09MHgxZmZmKQorCQkvKiBpbnZhbGlkIGtleSBwcmVzcyAqLworCQlyZXR1cm4gMDsKKworCWlmIChkZXYhPTB4MWUgJiYgZGV2IT0weDFmKQorCQkvKiBub3QgYSBoYXVwcGF1Z2UgcmVtb3RlICovCisJCXJldHVybiAwOwogCiAJaWYgKCFyYW5nZSkKIAkJY29kZSArPSA2NDsKQEAgLTk0LDcgKzExNiw3IEBACiAKIAkvKiByZXR1cm4ga2V5ICovCiAJKmlyX2tleSA9IGNvZGU7Ci0JKmlyX3JhdyA9IChzdGFydCA8PCAxMikgfCAodG9nZ2xlIDw8IDExKSB8IChkZXYgPDwgNikgfCBjb2RlOworCSppcl9yYXcgPSBpcmNvZGU7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTIyNCw5ICsyNDYsMTUgQEAKIHN0YXRpYyB2b2lkIGlyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBJUl9pMmMgKmlyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBJUl9pMmMsIHdvcmspOworCWludCBwb2xsaW5nX2ludGVydmFsID0gMTAwOworCisJLyogTVNJIFRWQG55d2hlcmUgUGx1cyByZXF1aXJlcyBtb3JlIGZyZXF1ZW50IHBvbGxpbmcKKwkgICBvdGhlcndpc2UgaXQgd2lsbCBtaXNzIHNvbWUga2V5cHJlc3NlcyAqLworCWlmIChpci0+Yy5hZGFwdGVyLT5pZCA9PSBJMkNfSFdfU0FBNzEzNCAmJiBpci0+Yy5hZGRyID09IDB4MzApCisJCXBvbGxpbmdfaW50ZXJ2YWwgPSA1MDsKIAogCWlyX2tleV9wb2xsKGlyKTsKLQltb2RfdGltZXIoJmlyLT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJbW9kX3RpbWVyKCZpci0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHBvbGxpbmdfaW50ZXJ2YWwpKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQ2NSw5ICs0OTMsMzcgQEAKIAkJCSgxID09IHJjKSA/ICJ5ZXMiIDogIm5vIik7CiAJCWlmICgxID09IHJjKSB7CiAJCQlpcl9hdHRhY2goYWRhcCwgcHJvYmVbaV0sIDAsIDApOwotCQkJYnJlYWs7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KKworCS8qIFNwZWNpYWwgY2FzZSBmb3IgTVNJIFRWQG55d2hlcmUgUGx1cyByZW1vdGUgKi8KKwlpZiAoYWRhcC0+aWQgPT0gSTJDX0hXX1NBQTcxMzQpIHsKKwkJdTggdGVtcDsKKworCQkvKiBNU0kgVFZAbnl3aGVyZSBQbHVzIGNvbnRyb2xsZXIgZG9lc24ndCBzZWVtIHRvCisJCSAgIHJlc3BvbmQgdG8gcHJvYmVzIHVubGVzcyB3ZSByZWFkIHNvbWV0aGluZyBmcm9tCisJCSAgIGFuIGV4aXN0aW5nIGRldmljZS4gV2VpcmQuLi4gKi8KKworCQltc2cuYWRkciA9IDB4NTA7CisJCXJjID0gaTJjX3RyYW5zZmVyKGFkYXAsICZtc2csIDEpOworCQkJZHByaW50aygxLCAicHJvYmUgMHglMDJ4IEAgJXM6ICVzXG4iLAorCQkJbXNnLmFkZHIsIGFkYXAtPm5hbWUsCisJCQkoMSA9PSByYykgPyAieWVzIiA6ICJubyIpOworCisJCS8qIE5vdyBkbyB0aGUgcHJvYmUuIFRoZSBjb250cm9sbGVyIGRvZXMgbm90IHJlc3BvbmQKKwkJICAgdG8gMC1ieXRlIHJlYWRzLCBzbyB3ZSB1c2UgYSAxLWJ5dGUgcmVhZCBpbnN0ZWFkLiAqLworCQltc2cuYWRkciA9IDB4MzA7CisJCW1zZy5sZW4gPSAxOworCQltc2cuYnVmID0gJnRlbXA7CisJCXJjID0gaTJjX3RyYW5zZmVyKGFkYXAsICZtc2csIDEpOworCQlkcHJpbnRrKDEsICJwcm9iZSAweCUwMnggQCAlczogJXNcbiIsCisJCQltc2cuYWRkciwgYWRhcC0+bmFtZSwKKwkJCSgxID09IHJjKSA/ICJ5ZXMiIDogIm5vIik7CisJCWlmICgxID09IHJjKQorCQkJaXJfYXR0YWNoKGFkYXAsIG1zZy5hZGRyLCAwLCAwKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmgKaW5kZXggMzgxYWYxYi4uMGI4ZmU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oCkBAIC0xNTQsNyArMTU0LDcgQEAKICNkZWZpbmUgSVZUVl9DQVBfRU5DT0RFUiAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1RVTkVSIHwgXAogCQkJICBWNEwyX0NBUF9BVURJTyB8IFY0TDJfQ0FQX1JFQURXUklURSB8IFY0TDJfQ0FQX1ZCSV9DQVBUVVJFIHwgXAogCQkJICBWNEwyX0NBUF9TTElDRURfVkJJX0NBUFRVUkUpCi0jZGVmaW5lIElWVFZfQ0FQX0RFQ09ERVIgKFY0TDJfQ0FQX1ZCSV9PVVRQVVQgfCBWNEwyX0NBUF9WSURFT19PVVRQVVQgfCBcCisjZGVmaW5lIElWVFZfQ0FQX0RFQ09ERVIgKFY0TDJfQ0FQX1ZJREVPX09VVFBVVCB8IFwKIAkJCSAgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9PVVRQVVQgfCBWNEwyX0NBUF9WSURFT19PVVRQVVRfT1ZFUkxBWSkKIAogc3RydWN0IGl2dHZfY2FyZF92aWRlb19pbnB1dCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCmluZGV4IDRhZmM3ZWEuLmFlYWExM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCkBAIC02MSwxNCArNjEsMTQgQEAKICNpbmNsdWRlICJ0dW5lci14YzIwMjguaCIKIAogLyogdmFyIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBhcnJheSBlbGVtZW50cyBpbiB1c2UgKi8KLWludCBpdnR2X2NhcmRzX2FjdGl2ZSA9IDA7CitpbnQgaXZ0dl9jYXJkc19hY3RpdmU7CiAKIC8qIElmIHlvdSBoYXZlIGFscmVhZHkgWCB2NGwgY2FyZHMsIHRoZW4gc2V0IHRoaXMgdG8gWC4gVGhpcyB3YXkKICAgIHRoZSBkZXZpY2UgbnVtYmVycyBzdGF5IG1hdGNoZWQuIEV4YW1wbGU6IHlvdSBoYXZlIGEgV2luVFYgY2FyZAogICAgd2l0aG91dCByYWRpbyBhbmQgYSBQVlItMzUwIHdpdGguIE5vcm1hbGx5IHRoaXMgd291bGQgZ2l2ZSBhCiAgICB2aWRlbzEgZGV2aWNlIHRvZ2V0aGVyIHdpdGggYSByYWRpbzAgZGV2aWNlIGZvciB0aGUgUFZSLiBCeQogICAgc2V0dGluZyB0aGlzIHRvIDEgeW91IGVuc3VyZSB0aGF0IHJhZGlvMCBpcyBub3cgYWxzbyByYWRpbzEuICovCi1pbnQgaXZ0dl9maXJzdF9taW5vciA9IDA7CitpbnQgaXZ0dl9maXJzdF9taW5vcjsKIAogLyogTWFzdGVyIHZhcmlhYmxlIGZvciBhbGwgaXZ0diBpbmZvICovCiBzdHJ1Y3QgaXZ0diAqaXZ0dl9jYXJkc1tJVlRWX01BWF9DQVJEU107CkBAIC0yNTEsNyArMjUxLDcgQEAKIAkJICJcdFx0XHQtMSBpcyBhdXRvZGV0ZWN0LCAwIGlzIG9mZiwgMSBpcyBvblxuIgogCQkgIlx0XHRcdERlZmF1bHQgaXMgYXV0b2RldGVjdCIpOwogCi1NT0RVTEVfUEFSTV9ERVNDKGl2dHZfZmlyc3RfbWlub3IsICJTZXQgbWlub3IgYXNzaWduZWQgdG8gZmlyc3QgY2FyZCIpOworTU9EVUxFX1BBUk1fREVTQyhpdnR2X2ZpcnN0X21pbm9yLCAiU2V0IGtlcm5lbCBudW1iZXIgYXNzaWduZWQgdG8gZmlyc3QgY2FyZCIpOwogCiBNT0RVTEVfQVVUSE9SKCJLZXZpbiBUaGF5ZXIsIENocmlzIEtlbm5lZHksIEhhbnMgVmVya3VpbCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJDWDIzNDE1L0NYMjM0MTYgZHJpdmVyIik7CkBAIC02NTUsOSArNjU1LDkgQEAKIAogCWlmIChpdHYtPmNhcmQgPT0gTlVMTCkgewogCQlpdHYtPmNhcmQgPSBpdnR2X2dldF9jYXJkKElWVFZfQ0FSRF9QVlJfMTUwKTsKLQkJSVZUVl9FUlIoIlVua25vd24gY2FyZDogdmVuZG9yL2RldmljZTogJTA0eC8lMDR4XG4iLAorCQlJVlRWX0VSUigiVW5rbm93biBjYXJkOiB2ZW5kb3IvZGV2aWNlOiBbJTA0eDolMDR4XVxuIiwKIAkJICAgICBpdHYtPmRldi0+dmVuZG9yLCBpdHYtPmRldi0+ZGV2aWNlKTsKLQkJSVZUVl9FUlIoIiAgICAgICAgICAgICAgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2U6ICUwNHgvJTA0eFxuIiwKKwkJSVZUVl9FUlIoIiAgICAgICAgICAgICAgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2U6IFslMDR4OiUwNHhdXG4iLAogCQkgICAgIGl0di0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBpdHYtPmRldi0+c3Vic3lzdGVtX2RldmljZSk7CiAJCUlWVFZfRVJSKCIgICAgICAgICAgICAgICVzIGJhc2VkXG4iLCBjaGlwbmFtZSk7CiAJCUlWVFZfRVJSKCJEZWZhdWx0aW5nIHRvICVzIGNhcmRcbiIsIGl0di0+Y2FyZC0+bmFtZSk7CkBAIC03MjAsNyArNzIwLDcgQEAKIAlpdHYtPnNwZWVkID0gMTAwMDsKIAogCS8qIFZCSSAqLwotCWl0di0+dmJpLmluLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTsKKwlpdHYtPnZiaS5pbi50eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKIAlpdHYtPnZiaS5zbGljZWRfaW4gPSAmaXR2LT52YmkuaW4uZm10LnNsaWNlZDsKIAogCS8qIEluaXQgdGhlIHNnIHRhYmxlIGZvciBvc2QveXV2IG91dHB1dCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaAppbmRleCAyY2ViNTIyLi4zNzMzYjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaApAQCAtNDksMTMgKzQ5LDEzIEBACiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9kdmIvdmlkZW8uaD4KICNpbmNsdWRlIDxsaW51eC9kdmIvYXVkaW8uaD4KQEAgLTUwNyw2ICs1MDcsOCBAQAogCXN0cnVjdCB2NGwyX3JlY3QgbWFpbl9yZWN0OwogCXUzMiB2NGwyX3NyY193OwogCXUzMiB2NGwyX3NyY19oOworCisJdTggcnVubmluZzsgLyogSGF2ZSBhbnkgZnJhbWVzIGJlZW4gZGlzcGxheWVkICovCiB9OwogCiAjZGVmaW5lIElWVFZfVkJJX0ZSQU1FUyAzMgpAQCAtNzUxLDYgKzc1MywxMiBAQAogLyogRmlyc3Qtb3BlbiBpbml0aWFsaXphdGlvbjogbG9hZCBmaXJtd2FyZSwgaW5pdCBjeDI1ODQwLCBldGMuICovCiBpbnQgaXZ0dl9pbml0X29uX2ZpcnN0X29wZW4oc3RydWN0IGl2dHYgKml0dik7CiAKKy8qIFRlc3QgaWYgdGhlIGN1cnJlbnQgVkJJIG1vZGUgaXMgcmF3ICgxKSBvciBzbGljZWQgKDApICovCitzdGF0aWMgaW5saW5lIGludCBpdnR2X3Jhd192YmkoY29uc3Qgc3RydWN0IGl2dHYgKml0dikKK3sKKwlyZXR1cm4gaXR2LT52YmkuaW4udHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOworfQorCiAvKiBUaGlzIGlzIGEgUENJIHBvc3QgdGhpbmcsIHdoZXJlIGlmIHRoZSBwY2kgcmVnaXN0ZXIgaXMgbm90IHJlYWQsIHRoZW4KICAgIHRoZSB3cml0ZSBkb2Vzbid0IGFsd2F5cyB0YWtlIGVmZmVjdCByaWdodCBhd2F5LiBCeSByZWFkaW5nIGJhY2sgdGhlCiAgICByZWdpc3RlciBhbnkgcGVuZGluZyBQQ0kgd3JpdGVzIHdpbGwgYmUgcGVyZm9ybWVkIChpbiBvcmRlciksIGFuZCBzbwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCmluZGV4IDdlYzVjOTkuLjFjNDA0ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKQEAgLTM5LDcgKzM5LDcgQEAKICAgIGFzc29jaWF0ZWQgVkJJIHN0cmVhbXMgYXJlIGFsc28gYXV0b21hdGljYWxseSBjbGFpbWVkLgogICAgUG9zc2libGUgZXJyb3IgcmV0dXJuczogLUVCVVNZIGlmIHNvbWVvbmUgZWxzZSBoYXMgY2xhaW1lZAogICAgdGhlIHN0cmVhbSBvciAwIG9uIHN1Y2Nlc3MuICovCi1pbnQgaXZ0dl9jbGFpbV9zdHJlYW0oc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQsIGludCB0eXBlKQorc3RhdGljIGludCBpdnR2X2NsYWltX3N0cmVhbShzdHJ1Y3QgaXZ0dl9vcGVuX2lkICppZCwgaW50IHR5cGUpCiB7CiAJc3RydWN0IGl2dHYgKml0diA9IGlkLT5pdHY7CiAJc3RydWN0IGl2dHZfc3RyZWFtICpzID0gJml0di0+c3RyZWFtc1t0eXBlXTsKQEAgLTc4LDcgKzc4LDcgQEAKIAlpZiAodHlwZSA9PSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9NUEcpIHsKIAkJdmJpX3R5cGUgPSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9WQkk7CiAJfSBlbHNlIGlmICh0eXBlID09IElWVFZfRU5DX1NUUkVBTV9UWVBFX01QRyAmJgotCQkgICBpdHYtPnZiaS5pbnNlcnRfbXBlZyAmJiBpdHYtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0KSB7CisJCSAgIGl0di0+dmJpLmluc2VydF9tcGVnICYmICFpdnR2X3Jhd192YmkoaXR2KSkgewogCQl2YmlfdHlwZSA9IElWVFZfRU5DX1NUUkVBTV9UWVBFX1ZCSTsKIAl9IGVsc2UgewogCQlyZXR1cm4gMDsKQEAgLTMwNSw3ICszMDUsNyBAQAogCiAJaWYgKGxlbiA+IHVjb3VudCkgbGVuID0gdWNvdW50OwogCWlmIChpdHYtPnZiaS5pbnNlcnRfbXBlZyAmJiBzLT50eXBlID09IElWVFZfRU5DX1NUUkVBTV9UWVBFX01QRyAmJgotCSAgICBpdHYtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0ICYmIGJ1ZiAhPSAmaXR2LT52Ymkuc2xpY2VkX21wZWdfYnVmKSB7CisJICAgICFpdnR2X3Jhd192YmkoaXR2KSAmJiBidWYgIT0gJml0di0+dmJpLnNsaWNlZF9tcGVnX2J1ZikgewogCQljb25zdCBjaGFyICpzdGFydCA9IGJ1Zi0+YnVmICsgYnVmLT5yZWFkcG9zOwogCQljb25zdCBjaGFyICpwID0gc3RhcnQgKyAxOwogCQljb25zdCB1OCAqcTsKQEAgLTM3Miw3ICszNzIsNyBAQAogCS8qIEVhY2ggVkJJIGJ1ZmZlciBpcyBvbmUgZnJhbWUsIHRoZSB2NGwyIEFQSSBzYXlzIHRoYXQgZm9yIFZCSSB0aGUgZnJhbWVzIHNob3VsZAogCSAgIGFycml2ZSBvbmUtYnktb25lLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgb3V0cHV0IG1vcmUgdGhhbiBvbmUgVkJJIGZyYW1lIGF0IGEgdGltZSAqLwogCWlmIChzLT50eXBlID09IElWVFZfREVDX1NUUkVBTV9UWVBFX1ZCSSB8fAotCQkJKHMtPnR5cGUgPT0gSVZUVl9FTkNfU1RSRUFNX1RZUEVfVkJJICYmIGl0di0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQpKQorCSAgICAocy0+dHlwZSA9PSBJVlRWX0VOQ19TVFJFQU1fVFlQRV9WQkkgJiYgIWl2dHZfcmF3X3ZiaShpdHYpKSkKIAkJc2luZ2xlX2ZyYW1lID0gMTsKIAogCWZvciAoOzspIHsKQEAgLTYwMCwxMyArNjAwLDE0IEBACiAJc2luY2Ugd2UgbWF5IGdldCBoZXJlIGJlZm9yZSB0aGUgc3RyZWFtIGhhcyBiZWVuIGZ1bGx5IHNldC11cCAqLwogCWlmIChtb2RlID09IE9VVF9ZVVYgJiYgcy0+cV9mdWxsLmxlbmd0aCA9PSAwICYmIGl0di0+ZG1hX2RhdGFfcmVxX3NpemUpIHsKIAkJd2hpbGUgKGNvdW50ID49IGl0di0+ZG1hX2RhdGFfcmVxX3NpemUpIHsKLQkJCWlmICghaXZ0dl95dXZfdWRtYV9zdHJlYW1fZnJhbWUgKGl0diwgKHZvaWQgX191c2VyICopdXNlcl9idWYpKSB7Ci0JCQkJYnl0ZXNfd3JpdHRlbiArPSBpdHYtPmRtYV9kYXRhX3JlcV9zaXplOwotCQkJCXVzZXJfYnVmICs9IGl0di0+ZG1hX2RhdGFfcmVxX3NpemU7Ci0JCQkJY291bnQgLT0gaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlyYyA9IGl2dHZfeXV2X3VkbWFfc3RyZWFtX2ZyYW1lKGl0diwgKHZvaWQgX191c2VyICopdXNlcl9idWYpOworCisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKworCQkJYnl0ZXNfd3JpdHRlbiArPSBpdHYtPmRtYV9kYXRhX3JlcV9zaXplOworCQkJdXNlcl9idWYgKz0gaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZTsKKwkJCWNvdW50IC09IGl0di0+ZG1hX2RhdGFfcmVxX3NpemU7CiAJCX0KIAkJaWYgKGNvdW50ID09IDApIHsKIAkJCUlWVFZfREVCVUdfSElfRklMRSgiV3JvdGUgJWQgYnl0ZXMgdG8gJXMgKCVkKVxuIiwgYnl0ZXNfd3JpdHRlbiwgcy0+bmFtZSwgcy0+cV9mdWxsLmJ5dGVzdXNlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmgKaW5kZXggMmM4ZDUxOC4uZGY4MWU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuaApAQCAtMzgsMTEgKzM4LDYgQEAKIAogLyogVXRpbGl0aWVzICovCiAKLS8qIFRyeSB0byBjbGFpbSBhIHN0cmVhbSBmb3IgdGhlIGZpbGVoYW5kbGUuIFJldHVybiAwIG9uIHN1Y2Nlc3MsCi0gICAtRUJVU1kgaWYgc3RyZWFtIGFscmVhZHkgY2xhaW1lZC4gT25jZSBhIHN0cmVhbSBpcyBjbGFpbWVkLCBpdAotICAgcmVtYWlucyBjbGFpbWVkIHVudGlsIHRoZSBhc3NvY2lhdGVkIGZpbGVoYW5kbGUgaXMgY2xvc2VkLiAqLwotaW50IGl2dHZfY2xhaW1fc3RyZWFtKHN0cnVjdCBpdnR2X29wZW5faWQgKmlkLCBpbnQgdHlwZSk7Ci0KIC8qIFJlbGVhc2UgYSBwcmV2aW91c2x5IGNsYWltZWQgc3RyZWFtLiAqLwogdm9pZCBpdnR2X3JlbGVhc2Vfc3RyZWFtKHN0cnVjdCBpdnR2X3N0cmVhbSAqcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uYwppbmRleCBiYzIyOTA1Li43NGE0NDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIH0KIAogLyogWGNlaXZlIHR1bmVyIHJlc2V0IGZ1bmN0aW9uICovCi1pbnQgaXZ0dl9yZXNldF90dW5lcl9ncGlvKHZvaWQgKmRldiwgaW50IGNtZCwgaW50IHZhbHVlKQoraW50IGl2dHZfcmVzZXRfdHVuZXJfZ3Bpbyh2b2lkICpkZXYsIGludCBjb21wb25lbnQsIGludCBjbWQsIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgKmFsZ28gPSBkZXY7CiAJc3RydWN0IGl2dHYgKml0diA9IGFsZ28tPmRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmgKaW5kZXggOTY0YTI2NS4uNDhiNjI5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uaApAQCAtMjQsNyArMjQsNyBAQAogLyogR1BJTyBzdHVmZiAqLwogdm9pZCBpdnR2X2dwaW9faW5pdChzdHJ1Y3QgaXZ0diAqaXR2KTsKIHZvaWQgaXZ0dl9yZXNldF9pcl9ncGlvKHN0cnVjdCBpdnR2ICppdHYpOwotaW50IGl2dHZfcmVzZXRfdHVuZXJfZ3Bpbyh2b2lkICpkZXYsIGludCBjbWQsIGludCB2YWx1ZSk7CitpbnQgaXZ0dl9yZXNldF90dW5lcl9ncGlvKHZvaWQgKmRldiwgaW50IGNvbXBvbmVudCwgaW50IGNtZCwgaW50IHZhbHVlKTsKIGludCBpdnR2X2dwaW8oc3RydWN0IGl2dHYgKml0diwgdW5zaWduZWQgaW50IGNvbW1hbmQsIHZvaWQgKmFyZyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYwppbmRleCBhZjE1NDIzLi4yNDcwMGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYwpAQCAtNjQsOCArNjQsNiBAQAogI2luY2x1ZGUgIml2dHYtZ3Bpby5oIgogI2luY2x1ZGUgIml2dHYtaTJjLmgiCiAKLSNpbmNsdWRlIDxtZWRpYS9pci1rYmQtaTJjLmg+Ci0KIC8qIGkyYyBpbXBsZW1lbnRhdGlvbiBmb3IgY3gyMzQxNS82IGNoaXAsIGl2dHYgcHJvamVjdC4KICAqIEF1dGhvcjogS2V2aW4gVGhheWVyIChudWZhbl93ZmsgYXQgeWFob28uY29tKQogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwppbmRleCA2MTAzMDMwLi4yMDhmYjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKQEAgLTEwMSwxOCArMTAxLDE1IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGNoZWNrX3NlcnZpY2Vfc2V0KHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpmbXQsIGludCBpc19wYWwpCitzdGF0aWMgdm9pZCBjaGVja19zZXJ2aWNlX3NldChzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqZm10LCBpbnQgaXNfcGFsKQogewogCWludCBmLCBsOwotCXUxNiBzZXQgPSAwOwogCiAJZm9yIChmID0gMDsgZiA8IDI7IGYrKykgewogCQlmb3IgKGwgPSAwOyBsIDwgMjQ7IGwrKykgewogCQkJZm10LT5zZXJ2aWNlX2xpbmVzW2ZdW2xdID0gc2VsZWN0X3NlcnZpY2VfZnJvbV9zZXQoZiwgbCwgZm10LT5zZXJ2aWNlX2xpbmVzW2ZdW2xdLCBpc19wYWwpOwotCQkJc2V0IHw9IGZtdC0+c2VydmljZV9saW5lc1tmXVtsXTsKIAkJfQogCX0KLQlyZXR1cm4gc2V0ICE9IDA7CiB9CiAKIHUxNiBpdnR2X2dldF9zZXJ2aWNlX3NldChzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqZm10KQpAQCAtNDc0LDcgKzQ3MSw3IEBACiAJaW50IGggPSBmbXQtPmZtdC5waXguaGVpZ2h0OwogCiAJdyA9IG1pbih3LCA3MjApOwotCXcgPSBtYXgodywgMSk7CisJdyA9IG1heCh3LCAyKTsKIAloID0gbWluKGgsIGl0di0+aXNfNTBoeiA/IDU3NiA6IDQ4MCk7CiAJaCA9IG1heChoLCAyKTsKIAlpdnR2X2dfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGZtdCk7CkBAIC01MTIsMjcgKzUwOSwzNCBAQAogc3RhdGljIGludCBpdnR2X3RyeV9mbXRfdmlkX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewogCXN0cnVjdCBpdnR2X29wZW5faWQgKmlkID0gZmg7Ci0JczMyIHcsIGg7Ci0JaW50IGZpZWxkOwotCWludCByZXQ7CisJczMyIHcgPSBmbXQtPmZtdC5waXgud2lkdGg7CisJczMyIGggPSBmbXQtPmZtdC5waXguaGVpZ2h0OworCWludCBmaWVsZCA9IGZtdC0+Zm10LnBpeC5maWVsZDsKKwlpbnQgcmV0ID0gaXZ0dl9nX2ZtdF92aWRfb3V0KGZpbGUsIGZoLCBmbXQpOwogCi0JdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKLQloID0gZm10LT5mbXQucGl4LmhlaWdodDsKLQlmaWVsZCA9IGZtdC0+Zm10LnBpeC5maWVsZDsKLQlyZXQgPSBpdnR2X2dfZm10X3ZpZF9vdXQoZmlsZSwgZmgsIGZtdCk7CisJdyA9IG1pbih3LCA3MjApOworCXcgPSBtYXgodywgMik7CisJLyogV2h5IGNhbiB0aGUgaGVpZ2h0IGJlIDU3NiBldmVuIHdoZW4gdGhlIG91dHB1dCBpcyBOVFNDPworCisJICAgSW50ZXJuYWxseSB0aGUgYnVmZmVycyBvZiB0aGUgUFZSMzUwIGFyZSBhbHdheXMgc2V0IHRvIDcyMHg1NzYuIFRoZQorCSAgIGRlY29kZWQgdmlkZW8gZnJhbWUgd2lsbCBhbHdheXMgYmUgcGxhY2VkIGluIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YKKwkgICB0aGlzIGJ1ZmZlci4gRm9yIGFueSB2aWRlbyB3aGljaCBpcyBub3QgNzIweDU3NiwgdGhlIGJ1ZmZlciB3aWxsCisJICAgdGhlbiBiZSBjcm9wcGVkIHRvIHJlbW92ZSB0aGUgdW51c2VkIHJpZ2h0IGFuZCBsb3dlciBhcmVhcywgd2l0aAorCSAgIHRoZSByZW1haW5pbmcgaW1hZ2UgYmVpbmcgc2NhbGVkIGJ5IHRoZSBoYXJkd2FyZSB0byBmaXQgdGhlIGRpc3BsYXkKKwkgICBhcmVhLiBUaGUgdmlkZW8gY2FuIGJlIHNjYWxlZCBib3RoIHVwIGFuZCBkb3duLCBzbyBhIDcyMHg0ODAgdmlkZW8KKwkgICBjYW4gYmUgZGlzcGxheWVkIGZ1bGwtc2NyZWVuIG9uIFBBTCBhbmQgYSA3MjB4NTc2IHZpZGVvIGNhbiBiZQorCSAgIGRpc3BsYXllZCB3aXRob3V0IGNyb3BwaW5nIG9uIE5UU0MuCisKKwkgICBOb3RlIHRoYXQgdGhlIHNjYWxpbmcgb25seSBvY2N1cnMgb24gdGhlIHZpZGVvIHN0cmVhbSwgdGhlIG9zZAorCSAgIHJlc29sdXRpb24gaXMgbG9ja2VkIHRvIHRoZSBicm9hZGNhc3Qgc3RhbmRhcmQgYW5kIG5vdCBzY2FsZWQuCisKKwkgICBUaGFua3MgdG8gSWFuIEFybXN0cm9uZyBmb3IgdGhpcyBleHBsYW5hdGlvbi4gKi8KKwloID0gbWluKGgsIDU3Nik7CisJaCA9IG1heChoLCAyKTsKKwlpZiAoaWQtPnR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWKQorCQlmbXQtPmZtdC5waXguZmllbGQgPSBmaWVsZDsKIAlmbXQtPmZtdC5waXgud2lkdGggPSB3OwogCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBoOwotCWlmICghcmV0ICYmIGlkLT50eXBlID09IElWVFZfREVDX1NUUkVBTV9UWVBFX1lVVikgewotCQlmbXQtPmZtdC5waXguZmllbGQgPSBmaWVsZDsKLQkJaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8IDIpCi0JCQlmbXQtPmZtdC5waXgud2lkdGggPSAyOwotCQlpZiAoZm10LT5mbXQucGl4LndpZHRoID4gNzIwKQotCQkJZm10LT5mbXQucGl4LndpZHRoID0gNzIwOwotCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8IDIpCi0JCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gMjsKLQkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPiA1NzYpCi0JCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gNTc2OwotCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC01NjAsOSArNTY0LDkgQEAKIAlzdHJ1Y3QgaXZ0dl9vcGVuX2lkICppZCA9IGZoOwogCXN0cnVjdCBpdnR2ICppdHYgPSBpZC0+aXR2OwogCXN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwID0gJml0di0+cGFyYW1zOworCWludCByZXQgPSBpdnR2X3RyeV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZm10KTsKIAlpbnQgdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKIAlpbnQgaCA9IGZtdC0+Zm10LnBpeC5oZWlnaHQ7Ci0JaW50IHJldCA9IGl2dHZfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmbXQpOwogCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTU4NSw4ICs1ODksMTEgQEAKIHsKIAlzdHJ1Y3QgaXZ0diAqaXR2ID0gKChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmgpLT5pdHY7CiAKKwlpZiAoIWl2dHZfcmF3X3ZiaShpdHYpICYmIGF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZykgPiAwKQorCQlyZXR1cm4gLUVCVVNZOwogCWl0di0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPSAwOwotCWl0di0+dmlkZW9fZGVjX2Z1bmMoaXR2LCBWSURJT0NfU19GTVQsICZpdHYtPnZiaS5pbik7CisJaXR2LT52YmkuaW4udHlwZSA9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7CisJaXR2LT52aWRlb19kZWNfZnVuYyhpdHYsIFZJRElPQ19TX0ZNVCwgZm10KTsKIAlyZXR1cm4gaXZ0dl9nX2ZtdF92YmlfY2FwKGZpbGUsIGZoLCBmbXQpOwogfQogCkBAIC02MDAsMTAgKzYwNywxMCBAQAogCWlmIChyZXQgfHwgaWQtPnR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfVkJJKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKGNoZWNrX3NlcnZpY2Vfc2V0KHZiaWZtdCwgaXR2LT5pc181MGh6KSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSA+IDApCisJY2hlY2tfc2VydmljZV9zZXQodmJpZm10LCBpdHYtPmlzXzUwaHopOworCWlmIChpdnR2X3Jhd192YmkoaXR2KSAmJiBhdG9taWNfcmVhZCgmaXR2LT5jYXB0dXJpbmcpID4gMCkKIAkJcmV0dXJuIC1FQlVTWTsKKwlpdHYtPnZiaS5pbi50eXBlID0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU7CiAJaXR2LT52aWRlb19kZWNfZnVuYyhpdHYsIFZJRElPQ19TX0ZNVCwgZm10KTsKIAltZW1jcHkoaXR2LT52Ymkuc2xpY2VkX2luLCB2YmlmbXQsIHNpemVvZigqaXR2LT52Ymkuc2xpY2VkX2luKSk7CiAJcmV0dXJuIDA7CkBAIC02NTEsOCArNjU4LDYgQEAKIAkJaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZSA9CiAJCQkxMDgwICogKCh5aS0+djRsMl9zcmNfaCArIDMxKSAmIH4zMSk7CiAKLQkvKiBGb3JjZSB1cGRhdGUgb2YgeXV2IHJlZ2lzdGVycyAqLwotCXlpLT55dXZfZm9yY2VkX3VwZGF0ZSA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc2MSw3ICs3NjYsNyBAQAogCiAJc3RybGNweSh2Y2FwLT5kcml2ZXIsIElWVFZfRFJJVkVSX05BTUUsIHNpemVvZih2Y2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KHZjYXAtPmNhcmQsIGl0di0+Y2FyZF9uYW1lLCBzaXplb2YodmNhcC0+Y2FyZCkpOwotCXN0cmxjcHkodmNhcC0+YnVzX2luZm8sIHBjaV9uYW1lKGl0di0+ZGV2KSwgc2l6ZW9mKHZjYXAtPmJ1c19pbmZvKSk7CisJc25wcmludGYodmNhcC0+YnVzX2luZm8sIHNpemVvZih2Y2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLCBwY2lfbmFtZShpdHYtPmRldikpOwogCXZjYXAtPnZlcnNpb24gPSBJVlRWX0RSSVZFUl9WRVJTSU9OOyAJICAgIC8qIHZlcnNpb24gKi8KIAl2Y2FwLT5jYXBhYmlsaXRpZXMgPSBpdHYtPnY0bDJfY2FwOyAJICAgIC8qIGNhcGFiaWxpdGllcyAqLwogCXJldHVybiAwOwpAQCAtMTM3MCw2ICsxMzc1LDkgQEAKIAlpZiAoaXR2LT5vc2RfZ2xvYmFsX2FscGhhX3N0YXRlKQogCQlmYi0+ZmxhZ3MgfD0gVjRMMl9GQlVGX0ZMQUdfR0xPQkFMX0FMUEhBOwogCisJaWYgKHlpLT50cmFja19vc2QpCisJCWZiLT5mbGFncyB8PSBWNEwyX0ZCVUZfRkxBR19PVkVSTEFZOworCiAJcGl4Zm10ICY9IDc7CiAKIAkvKiBubyBsb2NhbCBhbHBoYSBmb3IgUkdCNTY1IG9yIHVua25vd24gZm9ybWF0cyAqLwpAQCAtMTM4OSw4ICsxMzk3LDYgQEAKIAkJZWxzZQogCQkJZmItPmZsYWdzIHw9IFY0TDJfRkJVRl9GTEFHX0xPQ0FMX0FMUEhBOwogCX0KLQlpZiAoeWktPnRyYWNrX29zZCkKLQkJZmItPmZsYWdzIHw9IFY0TDJfRkJVRl9GTEFHX09WRVJMQVk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKaW5kZXggMzRmM2FiOC4uZjVkMDBlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKQEAgLTc1Myw3ICs3NTMsNyBAQAogCSAqLwogCXVuc2lnbmVkIGludCBmcmFtZSA9IHJlYWRfcmVnKDB4MjhjMCkgJiAxOwogCXN0cnVjdCB5dXZfcGxheWJhY2tfaW5mbyAqeWkgPSAmaXR2LT55dXZfaW5mbzsKLQlpbnQgbGFzdF9kbWFfZnJhbWUgPSBhdG9taWNfcmVhZCgmaXR2LT55dXZfaW5mby5uZXh0X2RtYV9mcmFtZSk7CisJaW50IGxhc3RfZG1hX2ZyYW1lID0gYXRvbWljX3JlYWQoJnlpLT5uZXh0X2RtYV9mcmFtZSk7CiAJc3RydWN0IHl1dl9mcmFtZV9pbmZvICpmID0gJnlpLT5uZXdfZnJhbWVfaW5mb1tsYXN0X2RtYV9mcmFtZV07CiAKIAlpZiAoMCkgSVZUVl9ERUJVR19JUlEoIkRFQyBWU1lOQ1xuIik7CkBAIC03NzIsNiArNzcyLDcgQEAKIAkJCQluZXh0X2RtYV9mcmFtZSA9IChuZXh0X2RtYV9mcmFtZSArIDEpICUgSVZUVl9ZVVZfQlVGRkVSUzsKIAkJCQlhdG9taWNfc2V0KCZ5aS0+bmV4dF9kbWFfZnJhbWUsIG5leHRfZG1hX2ZyYW1lKTsKIAkJCQl5aS0+ZmllbGRzX2xhcHNlZCA9IC0xOworCQkJCXlpLT5ydW5uaW5nID0gMTsKIAkJCX0KIAkJfQogCX0KQEAgLTgwNCw5ICs4MDUsMTEgQEAKIAkJfQogCiAJCS8qIENoZWNrIGlmIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSB5dXYgcmVnaXN0ZXJzICovCi0JCWlmICgoeWktPnl1dl9mb3JjZWRfdXBkYXRlIHx8IGYtPnVwZGF0ZSkgJiYgbGFzdF9kbWFfZnJhbWUgIT0gLTEpIHsKKwkJaWYgKHlpLT5ydW5uaW5nICYmICh5aS0+eXV2X2ZvcmNlZF91cGRhdGUgfHwgZi0+dXBkYXRlKSkgewogCQkJaWYgKCFmLT51cGRhdGUpIHsKLQkJCQlsYXN0X2RtYV9mcmFtZSA9ICh1OCkobGFzdF9kbWFfZnJhbWUgLSAxKSAlIElWVFZfWVVWX0JVRkZFUlM7CisJCQkJbGFzdF9kbWFfZnJhbWUgPQorCQkJCQkodTgpKGF0b21pY19yZWFkKCZ5aS0+bmV4dF9kbWFfZnJhbWUpIC0KKwkJCQkJCSAxKSAlIElWVFZfWVVWX0JVRkZFUlM7CiAJCQkJZiA9ICZ5aS0+bmV3X2ZyYW1lX2luZm9bbGFzdF9kbWFfZnJhbWVdOwogCQkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKaW5kZXggNzMwZTg1ZC4uNWJiZjMxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwpAQCAtNzUsNyArNzUsNyBAQAogc3RhdGljIHN0cnVjdCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgdmZsX3R5cGU7Ci0JaW50IG1pbm9yX29mZnNldDsKKwlpbnQgbnVtX29mZnNldDsKIAlpbnQgZG1hLCBwaW87CiAJZW51bSB2NGwyX2J1Zl90eXBlIGJ1Zl90eXBlOwogCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7CkBAIC0xNzEsOCArMTcxLDggQEAKIHN0YXRpYyBpbnQgaXZ0dl9wcmVwX2RldihzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMgPSAmaXR2LT5zdHJlYW1zW3R5cGVdOwotCWludCBtaW5vcl9vZmZzZXQgPSBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLm1pbm9yX29mZnNldDsKLQlpbnQgbWlub3I7CisJaW50IG51bV9vZmZzZXQgPSBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CisJaW50IG51bSA9IGl0di0+bnVtICsgaXZ0dl9maXJzdF9taW5vciArIG51bV9vZmZzZXQ7CiAKIAkvKiBUaGVzZSBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIGluaXRpYWxpemVkLiBJZiB2NGwyZGV2ID09IE5VTEwsIHRoZW4KIAkgICB0aGlzIHN0cmVhbSBpcyBub3QgaW4gdXNlLiBJbiB0aGF0IGNhc2Ugbm8gb3RoZXIgZmllbGRzIGJ1dCB0aGVzZQpAQCAtMTg4LDkgKzE4OCw2IEBACiAJaWYgKHR5cGUgPj0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfTVBHICYmICEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkpCiAJCXJldHVybiAwOwogCi0JLyogY2FyZCBudW1iZXIgKyB1c2VyIGRlZmluZWQgb2Zmc2V0ICsgZGV2aWNlIG9mZnNldCAqLwotCW1pbm9yID0gaXR2LT5udW0gKyBpdnR2X2ZpcnN0X21pbm9yICsgbWlub3Jfb2Zmc2V0OwotCiAJLyogVXNlciBleHBsaWNpdGx5IHNlbGVjdGVkIDAgYnVmZmVycyBmb3IgdGhlc2Ugc3RyZWFtcywgc28gZG9uJ3QKIAkgICBjcmVhdGUgdGhlbS4gKi8KIAlpZiAoaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS5kbWEgIT0gUENJX0RNQV9OT05FICYmCkBAIC0yMTEsNyArMjA4LDcgQEAKIAlzbnByaW50ZihzLT52NGwyZGV2LT5uYW1lLCBzaXplb2Yocy0+djRsMmRldi0+bmFtZSksICJpdnR2JWQgJXMiLAogCQkJaXR2LT5udW0sIHMtPm5hbWUpOwogCi0Jcy0+djRsMmRldi0+bWlub3IgPSBtaW5vcjsKKwlzLT52NGwyZGV2LT5udW0gPSBudW07CiAJcy0+djRsMmRldi0+cGFyZW50ID0gJml0di0+ZGV2LT5kZXY7CiAJcy0+djRsMmRldi0+Zm9wcyA9IGl2dHZfc3RyZWFtX2luZm9bdHlwZV0uZm9wczsKIAlzLT52NGwyZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CkBAIC0yNTAsMzkgKzI0Nyw0NiBAQAogewogCXN0cnVjdCBpdnR2X3N0cmVhbSAqcyA9ICZpdHYtPnN0cmVhbXNbdHlwZV07CiAJaW50IHZmbF90eXBlID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS52ZmxfdHlwZTsKLQlpbnQgbWlub3I7CisJaW50IG51bTsKIAogCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JbWlub3IgPSBzLT52NGwyZGV2LT5taW5vcjsKKwludW0gPSBzLT52NGwyZGV2LT5udW07CisJLyogY2FyZCBudW1iZXIgKyB1c2VyIGRlZmluZWQgb2Zmc2V0ICsgZGV2aWNlIG9mZnNldCAqLworCWlmICh0eXBlICE9IElWVFZfRU5DX1NUUkVBTV9UWVBFX01QRykgeworCQlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnNfbXBnID0gJml0di0+c3RyZWFtc1tJVlRWX0VOQ19TVFJFQU1fVFlQRV9NUEddOworCisJCWlmIChzX21wZy0+djRsMmRldikKKwkJCW51bSA9IHNfbXBnLT52NGwyZGV2LT5udW0gKyBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CisJfQorCiAJLyogUmVnaXN0ZXIgZGV2aWNlLiBGaXJzdCB0cnkgdGhlIGRlc2lyZWQgbWlub3IsIHRoZW4gYW55IGZyZWUgb25lLiAqLwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2Uocy0+djRsMmRldiwgdmZsX3R5cGUsIG1pbm9yKSAmJgotCQkJdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHMtPnY0bDJkZXYsIHZmbF90eXBlLCAtMSkpIHsKLQkJSVZUVl9FUlIoIkNvdWxkbid0IHJlZ2lzdGVyIHY0bDIgZGV2aWNlIGZvciAlcyBtaW5vciAlZFxuIiwKLQkJCQlzLT5uYW1lLCBtaW5vcik7CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShzLT52NGwyZGV2LCB2ZmxfdHlwZSwgbnVtKSkgeworCQlJVlRWX0VSUigiQ291bGRuJ3QgcmVnaXN0ZXIgdjRsMiBkZXZpY2UgZm9yICVzIGtlcm5lbCBudW1iZXIgJWRcbiIsCisJCQkJcy0+bmFtZSwgbnVtKTsKIAkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uocy0+djRsMmRldik7CiAJCXMtPnY0bDJkZXYgPSBOVUxMOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJbnVtID0gcy0+djRsMmRldi0+bnVtOwogCiAJc3dpdGNoICh2ZmxfdHlwZSkgewogCWNhc2UgVkZMX1RZUEVfR1JBQkJFUjoKIAkJSVZUVl9JTkZPKCJSZWdpc3RlcmVkIGRldmljZSB2aWRlbyVkIGZvciAlcyAoJWQga0IpXG4iLAotCQkJcy0+djRsMmRldi0+bWlub3IsIHMtPm5hbWUsIGl0di0+b3B0aW9ucy5raWxvYnl0ZXNbdHlwZV0pOworCQkJbnVtLCBzLT5uYW1lLCBpdHYtPm9wdGlvbnMua2lsb2J5dGVzW3R5cGVdKTsKIAkJYnJlYWs7CiAJY2FzZSBWRkxfVFlQRV9SQURJTzoKIAkJSVZUVl9JTkZPKCJSZWdpc3RlcmVkIGRldmljZSByYWRpbyVkIGZvciAlc1xuIiwKLQkJCXMtPnY0bDJkZXYtPm1pbm9yIC0gTUlOT1JfVkZMX1RZUEVfUkFESU9fTUlOLCBzLT5uYW1lKTsKKwkJCW51bSwgcy0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgVkZMX1RZUEVfVkJJOgogCQlpZiAoaXR2LT5vcHRpb25zLmtpbG9ieXRlc1t0eXBlXSkKIAkJCUlWVFZfSU5GTygiUmVnaXN0ZXJlZCBkZXZpY2UgdmJpJWQgZm9yICVzICglZCBrQilcbiIsCi0JCQkJcy0+djRsMmRldi0+bWlub3IgLSBNSU5PUl9WRkxfVFlQRV9WQklfTUlOLAotCQkJCXMtPm5hbWUsIGl0di0+b3B0aW9ucy5raWxvYnl0ZXNbdHlwZV0pOworCQkJCW51bSwgcy0+bmFtZSwgaXR2LT5vcHRpb25zLmtpbG9ieXRlc1t0eXBlXSk7CiAJCWVsc2UKIAkJCUlWVFZfSU5GTygiUmVnaXN0ZXJlZCBkZXZpY2UgdmJpJWQgZm9yICVzXG4iLAotCQkJCXMtPnY0bDJkZXYtPm1pbm9yIC0gTUlOT1JfVkZMX1RZUEVfVkJJX01JTiwgcy0+bmFtZSk7CisJCQkJbnVtLCBzLT5uYW1lKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpAQCAtMzMwLDcgKzMzNCw3IEBACiAKIHN0YXRpYyB2b2lkIGl2dHZfdmJpX3NldHVwKHN0cnVjdCBpdnR2ICppdHYpCiB7Ci0JaW50IHJhdyA9IGl0di0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPT0gMDsKKwlpbnQgcmF3ID0gaXZ0dl9yYXdfdmJpKGl0dik7CiAJdTMyIGRhdGFbQ1gyMzQxWF9NQk9YX01BWF9EQVRBXTsKIAlpbnQgbGluZXM7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCmluZGV4IDFjZTlkZWIuLjRhMzdhN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAlpbnQgeTsKIAogCS8qIFJhdyBWQkkgZGF0YSAqLwotCWlmIChzdHJlYW10eXBlID09IElWVFZfRU5DX1NUUkVBTV9UWVBFX1ZCSSAmJiBpdHYtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0ID09IDApIHsKKwlpZiAoc3RyZWFtdHlwZSA9PSBJVlRWX0VOQ19TVFJFQU1fVFlQRV9WQkkgJiYgaXZ0dl9yYXdfdmJpKGl0dikpIHsKIAkJdTggdHlwZTsKIAogCQlpdnR2X2J1Zl9zd2FwKGJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di15dXYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXl1di5jCmluZGV4IDMwOTJmZjEuLmVlOTExMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXl1di5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXl1di5jCkBAIC0xMTQ3LDYgKzExNDcsNyBAQAogCUlWVFZfREVCVUdfWVVWKCJpdnR2X3l1dl9jbG9zZVxuIik7CiAJaXZ0dl93YWl0cSgmaXR2LT52c3luY193YWl0cSk7CiAKKwl5aS0+cnVubmluZyA9IDA7CiAJYXRvbWljX3NldCgmeWktPm5leHRfZG1hX2ZyYW1lLCAtMSk7CiAJYXRvbWljX3NldCgmeWktPm5leHRfZmlsbF9mcmFtZSwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYwppbmRleCBiZGZkYTQ4Li44YTRhMTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCkBAIC0yNzUsNyArMjc1LDYgQEAKIAkJCQkgIGludCBzaXplX2luX2J5dGVzKQogewogCURFRklORV9XQUlUKHdhaXQpOwotCWludCByZXQgPSAwOwogCWludCBnb3Rfc2lnID0gMDsKIAogCW11dGV4X2xvY2soJml0di0+dWRtYS5sb2NrKTsKQEAgLTMxNiw3ICszMTUsNyBAQAogCQlyZXR1cm4gLUVJTlRSOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaXZ0dmZiX3ByZXBfZnJhbWUoc3RydWN0IGl2dHYgKml0diwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnNvdXJjZSwKQEAgLTM2OCwxMSArMzY3LDEyIEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90IGl2dHZmYl93cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXVuc2lnbmVkIGxvbmcgcCA9ICpwcG9zOwogCXZvaWQgKmRzdDsKIAlpbnQgZXJyID0gMDsKKwlpbnQgZG1hX2VycjsKIAl1bnNpZ25lZCBsb25nIHRvdGFsX3NpemU7CiAJc3RydWN0IGl2dHYgKml0diA9IChzdHJ1Y3QgaXZ0diAqKSBpbmZvLT5wYXI7CiAJdW5zaWduZWQgbG9uZyBkbWFfb2Zmc2V0ID0KQEAgLTM5OSw3ICszOTksNiBAQAogCWlmIChjb3VudCArIHAgPiB0b3RhbF9zaXplKSB7CiAJCWlmICghZXJyKQogCQkJZXJyID0gLUVOT1NQQzsKLQogCQljb3VudCA9IHRvdGFsX3NpemUgLSBwOwogCX0KIApAQCAtNDA4LDM5ICs0MDcsMzQgQEAKIAlpZiAoaW5mby0+ZmJvcHMtPmZiX3N5bmMpCiAJCWluZm8tPmZib3BzLT5mYl9zeW5jKGluZm8pOwogCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZiwgY291bnQpKSB7Ci0JCUlWVFZGQl9XQVJOKCJJbnZhbGlkIHVzZXJzcGFjZSBwb2ludGVyIDB4JTA4bHhcbiIsCi0JCQkodW5zaWduZWQgbG9uZylidWYpOwotCQllcnIgPSAtRUZBVUxUOwotCX0KLQotCWlmICghZXJyKSB7Ci0JCS8qIElmIHRyYW5zZmVyIHNpemUgPiB0aHJlc2hvbGQgYW5kIGJvdGggc3JjL2RzdAotCQlhZGRyZXNzZXMgYXJlIGFsaWduZWQsIHVzZSBETUEgKi8KLQkJaWYgKGNvdW50ID49IDQwOTYgJiYKLQkJICAgICgodW5zaWduZWQgbG9uZylidWYgJiAzKSA9PSAoKHVuc2lnbmVkIGxvbmcpZHN0ICYgMykpIHsKLQkJCS8qIE9kZCBhZGRyZXNzID0gY2FuJ3QgRE1BLiBBbGlnbiAqLwotCQkJaWYgKCh1bnNpZ25lZCBsb25nKWRzdCAmIDMpIHsKLQkJCQlsZWFkID0gNCAtICgodW5zaWduZWQgbG9uZylkc3QgJiAzKTsKLQkJCQltZW1jcHkoZHN0LCBidWYsIGxlYWQpOwotCQkJCWJ1ZiArPSBsZWFkOwotCQkJCWRzdCArPSBsZWFkOwotCQkJfQotCQkJLyogRE1BIHJlc29sdXRpb24gaXMgMzIgYml0cyAqLwotCQkJaWYgKChjb3VudCAtIGxlYWQpICYgMykKLQkJCQl0YWlsID0gKGNvdW50IC0gbGVhZCkgJiAzOwotCQkJLyogRE1BIHRoZSBkYXRhICovCi0JCQlkbWFfc2l6ZSA9IGNvdW50IC0gbGVhZCAtIHRhaWw7Ci0JCQllcnIgPSBpdnR2ZmJfcHJlcF9kZWNfZG1hX3RvX2RldmljZShpdHYsCi0JCQkgICAgICAgcCArIGxlYWQgKyBkbWFfb2Zmc2V0LCAodm9pZCAqKWJ1ZiwgZG1hX3NpemUpOwotCQkJZHN0ICs9IGRtYV9zaXplOwotCQkJYnVmICs9IGRtYV9zaXplOwotCQkJLyogQ29weSBhbnkgbGVmdG92ZXIgZGF0YSAqLwotCQkJaWYgKHRhaWwpCi0JCQkJbWVtY3B5KGRzdCwgYnVmLCB0YWlsKTsKLQkJfSBlbHNlIHsKLQkJCW1lbWNweShkc3QsIGJ1ZiwgY291bnQpOworCS8qIElmIHRyYW5zZmVyIHNpemUgPiB0aHJlc2hvbGQgYW5kIGJvdGggc3JjL2RzdAorCWFkZHJlc3NlcyBhcmUgYWxpZ25lZCwgdXNlIERNQSAqLworCWlmIChjb3VudCA+PSA0MDk2ICYmCisJICAgICgodW5zaWduZWQgbG9uZylidWYgJiAzKSA9PSAoKHVuc2lnbmVkIGxvbmcpZHN0ICYgMykpIHsKKwkJLyogT2RkIGFkZHJlc3MgPSBjYW4ndCBETUEuIEFsaWduICovCisJCWlmICgodW5zaWduZWQgbG9uZylkc3QgJiAzKSB7CisJCQlsZWFkID0gNCAtICgodW5zaWduZWQgbG9uZylkc3QgJiAzKTsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihkc3QsIGJ1ZiwgbGVhZCkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlidWYgKz0gbGVhZDsKKwkJCWRzdCArPSBsZWFkOwogCQl9CisJCS8qIERNQSByZXNvbHV0aW9uIGlzIDMyIGJpdHMgKi8KKwkJaWYgKChjb3VudCAtIGxlYWQpICYgMykKKwkJCXRhaWwgPSAoY291bnQgLSBsZWFkKSAmIDM7CisJCS8qIERNQSB0aGUgZGF0YSAqLworCQlkbWFfc2l6ZSA9IGNvdW50IC0gbGVhZCAtIHRhaWw7CisJCWRtYV9lcnIgPSBpdnR2ZmJfcHJlcF9kZWNfZG1hX3RvX2RldmljZShpdHYsCisJCSAgICAgICBwICsgbGVhZCArIGRtYV9vZmZzZXQsICh2b2lkIF9fdXNlciAqKWJ1ZiwgZG1hX3NpemUpOworCQlpZiAoZG1hX2VycikKKwkJCXJldHVybiBkbWFfZXJyOworCQlkc3QgKz0gZG1hX3NpemU7CisJCWJ1ZiArPSBkbWFfc2l6ZTsKKwkJLyogQ29weSBhbnkgbGVmdG92ZXIgZGF0YSAqLworCQlpZiAodGFpbCAmJiBjb3B5X2Zyb21fdXNlcihkc3QsIGJ1ZiwgdGFpbCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKGRzdCwgYnVmLCBjb3VudCkpIHsKKwkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAJaWYgICghZXJyKQpAQCAtNDYzLDkgKzQ1NywxMiBAQAogCQkJdmJsYW5rLmZsYWdzID0gRkJfVkJMQU5LX0hBVkVfQ09VTlQgfEZCX1ZCTEFOS19IQVZFX1ZDT1VOVCB8CiAJCQkJCUZCX1ZCTEFOS19IQVZFX1ZTWU5DOwogCQkJdHJhY2UgPSByZWFkX3JlZygweDAyOGMwKSA+PiAxNjsKLQkJCWlmIChpdHYtPmlzXzUwaHogJiYgdHJhY2UgPiAzMTIpIHRyYWNlIC09IDMxMjsKLQkJCWVsc2UgaWYgKGl0di0+aXNfNjBoeiAmJiB0cmFjZSA+IDI2MikgdHJhY2UgLT0gMjYyOwotCQkJaWYgKHRyYWNlID09IDEpIHZibGFuay5mbGFncyB8PSBGQl9WQkxBTktfVlNZTkNJTkc7CisJCQlpZiAoaXR2LT5pc181MGh6ICYmIHRyYWNlID4gMzEyKQorCQkJCXRyYWNlIC09IDMxMjsKKwkJCWVsc2UgaWYgKGl0di0+aXNfNjBoeiAmJiB0cmFjZSA+IDI2MikKKwkJCQl0cmFjZSAtPSAyNjI7CisJCQlpZiAodHJhY2UgPT0gMSkKKwkJCQl2YmxhbmsuZmxhZ3MgfD0gRkJfVkJMQU5LX1ZTWU5DSU5HOwogCQkJdmJsYW5rLmNvdW50ID0gaXR2LT5sYXN0X3ZzeW5jX2ZpZWxkOwogCQkJdmJsYW5rLnZjb3VudCA9IHRyYWNlOwogCQkJdmJsYW5rLmhjb3VudCA9IDA7CkBAIC00NzYsNyArNDczLDggQEAKIAogCQljYXNlIEZCSU9fV0FJVEZPUlZTWU5DOgogCQkJcHJlcGFyZV90b193YWl0KCZpdHYtPnZzeW5jX3dhaXRxLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCWlmICghc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDUwKSkpIHJjID0gLUVUSU1FRE9VVDsKKwkJCWlmICghc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDUwKSkpCisJCQkJcmMgPSAtRVRJTUVET1VUOwogCQkJZmluaXNoX3dhaXQoJml0di0+dnN5bmNfd2FpdHEsICZ3YWl0KTsKIAkJCXJldHVybiByYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMKaW5kZXggMmZkNGI0YS4uYmFlMmQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5jCkBAIC0zMywyNyArMzMsMjAgQEAKICAqIFYxLjEgR2VyYXJkIHYuZC4gSG9yc3QgIEFkZGVkIHNvbWUgZGVidWdvdXRwdXQsIHJlc2V0IHRoZSB2aWRlby1zdGFuZGFyZAogICovCiAKLSNpZm5kZWYgX19LRVJORUxfXwotI2RlZmluZSBfX0tFUk5FTF9fCi0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlICJrczAxMjcuaCIKLQogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlICJrczAxMjcuaCIKIAotI2RlZmluZSBkcHJpbnRrICAgICBpZiAoZGVidWcpIHByaW50awotCi0vKiBpMmMgaWRlbnRpZmljYXRpb24gKi8KLSNkZWZpbmUgSTJDX0tTMDEyN19BRERPTiAgIDB4RDgKLSNkZWZpbmUgSTJDX0tTMDEyN19PTkJPQVJEIDB4REEKK01PRFVMRV9ERVNDUklQVElPTigiS1MwMTI3IHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJSeWFuIERyYWtlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNkZWZpbmUgS1NfVFlQRV9VTktOT1dOCTAKICNkZWZpbmUgS1NfVFlQRV8wMTIyUwkxCkBAIC0yMDQsOCArMTk3LDYgQEAKIH07CiAKIHN0cnVjdCBrczAxMjcgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JdW5zaWduZWQgY2hhcglhZGRyOwogCWludAkJZm9ybWF0X3dpZHRoOwogCWludAkJZm9ybWF0X2hlaWdodDsKIAlpbnQJCWNhcF93aWR0aDsKQEAgLTIyMCwxNiArMjExLDE4IEBACiAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBvdXRwdXQiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIHU4IHJlZ19kZWZhdWx0c1s2NF07CiAKLQotCiBzdGF0aWMgdm9pZCBpbml0X3JlZ19kZWZhdWx0cyh2b2lkKQogeworCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CiAJdTggKnRhYmxlID0gcmVnX2RlZmF1bHRzOwogCisJaWYgKGluaXRpYWxpemVkKQorCQlyZXR1cm47CisJaW5pdGlhbGl6ZWQgPSAxOworCiAJdGFibGVbS1NfQ01EQV0gICAgID0gMHgyYzsgIC8qIFZTRT0wLCBDQ0lSIDYwMSwgYXV0b2RldGVjdCBzdGFuZGFyZCAqLwogCXRhYmxlW0tTX0NNREJdICAgICA9IDB4MTI7ICAvKiBWQUxJR049MCwgQUdDIGNvbnRyb2wgYW5kIGlucHV0ICovCiAJdGFibGVbS1NfQ01EQ10gICAgID0gMHgwMDsgIC8qIFRlc3Qgb3B0aW9ucyAqLwpAQCAtMzA4LDUwICszMDEsNTMgQEAKICAqIEFuIGV4cGxhbmF0aW9uIGZyb20ga2F5b3JrQG1haWwudXRleGFzLmVkdToKICAqCiAgKiBEdXJpbmcgSTJDIHJlYWRzLCB0aGUgS1MwMTI3IG9ubHkgc2FtcGxlcyBmb3IgYSBzdG9wIGNvbmRpdGlvbgotICogZHVyaW5nIHRoZSBwbGFjZSB3aGVyZSB0aGUgYWNrbm9sZWRnZSBiaXQgc2hvdWxkIGJlLiBBbnkgc3RhbmRhcmQKKyAqIGR1cmluZyB0aGUgcGxhY2Ugd2hlcmUgdGhlIGFja25vd2xlZGdlIGJpdCBzaG91bGQgYmUuIEFueSBzdGFuZGFyZAogICogSTJDIGltcGxlbWVudGF0aW9uIChjb3JyZWN0bHkpIHRocm93cyBpbiBhbm90aGVyIGNsb2NrIHRyYW5zaXRpb24KICAqIGF0IHRoZSA5dGggYml0LCBhbmQgdGhlIEtTMDEyNyB3aWxsIG5vdCByZWNvZ25pemUgdGhlIHN0b3AgY29uZGl0aW9uCiAgKiBhbmQgd2lsbCBjb250aW51ZSB0byBjbG9jayBvdXQgZGF0YS4KICAqCiAgKiBTbyB3ZSBoYXZlIHRvIGRvIHRoZSByZWFkIG91cnNlbGYuICBCaWcgZGVhbC4KLQkgICB3b3JrYXJvdW5kIGluIGkyYy1hbGdvLWJpdAorICoJICAgd29ya2Fyb3VuZCBpbiBpMmMtYWxnby1iaXQKICAqLwogCiAKLXN0YXRpYyB1OCBrczAxMjdfcmVhZChzdHJ1Y3Qga3MwMTI3ICprcywgdTggcmVnKQorc3RhdGljIHU4IGtzMDEyN19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1OCByZWcpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmMgPSBrcy0+Y2xpZW50OwogCWNoYXIgdmFsID0gMDsKIAlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7Ci0JCXtjLT5hZGRyLCAwLCBzaXplb2YocmVnKSwgJnJlZ30sCi0JCXtjLT5hZGRyLCBJMkNfTV9SRCB8IEkyQ19NX05PX1JEX0FDSywgc2l6ZW9mKHZhbCksICZ2YWx9fTsKKwkJeyBjLT5hZGRyLCAwLCBzaXplb2YocmVnKSwgJnJlZyB9LAorCQl7IGMtPmFkZHIsIEkyQ19NX1JEIHwgSTJDX01fTk9fUkRfQUNLLCBzaXplb2YodmFsKSwgJnZhbCB9CisJfTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykpOwogCWlmIChyZXQgIT0gQVJSQVlfU0laRShtc2dzKSkKLQkJZHByaW50aygia3MwMTI3X3dyaXRlIGVycm9yXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgInJlYWQgZXJyb3JcbiIpOwogCiAJcmV0dXJuIHZhbDsKIH0KIAogCi1zdGF0aWMgdm9pZCBrczAxMjdfd3JpdGUoc3RydWN0IGtzMDEyNyAqa3MsIHU4IHJlZywgdTggdmFsKQorc3RhdGljIHZvaWQga3MwMTI3X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1OCByZWcsIHU4IHZhbCkKIHsKLQljaGFyIG1zZ1tdID0ge3JlZywgdmFsfTsKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwljaGFyIG1zZ1tdID0geyByZWcsIHZhbCB9OwogCi0JaWYgKGkyY19tYXN0ZXJfc2VuZChrcy0+Y2xpZW50LCBtc2csIHNpemVvZihtc2cpKSAhPSBzaXplb2YobXNnKSkKLQkJZHByaW50aygia3MwMTI3X3dyaXRlIGVycm9yXG4iKTsKKwlpZiAoaTJjX21hc3Rlcl9zZW5kKGMsIG1zZywgc2l6ZW9mKG1zZykpICE9IHNpemVvZihtc2cpKQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAid3JpdGUgZXJyb3JcbiIpOwogCiAJa3MtPnJlZ3NbcmVnXSA9IHZhbDsKIH0KIAogCiAvKiBnZW5lcmljIGJpdC10d2lkZGxpbmcgKi8KLXN0YXRpYyB2b2lkIGtzMDEyN19hbmRfb3Ioc3RydWN0IGtzMDEyNyAqa3MsIHU4IHJlZywgdTggYW5kX3YsIHU4IG9yX3YpCitzdGF0aWMgdm9pZCBrczAxMjdfYW5kX29yKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggYW5kX3YsIHU4IG9yX3YpCiB7CisJc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwogCXU4IHZhbCA9IGtzLT5yZWdzW3JlZ107CiAJdmFsID0gKHZhbCAmIGFuZF92KSB8IG9yX3Y7Ci0Ja3MwMTI3X3dyaXRlKGtzLCByZWcsIHZhbCk7CisJa3MwMTI3X3dyaXRlKGNsaWVudCwgcmVnLCB2YWwpOwogfQogCiAKQEAgLTM1OSw3MyArMzU1LDY5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBrczAxMjcgcHJpdmF0ZSBhcGkKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBrczAxMjdfcmVzZXQoc3RydWN0IGtzMDEyNyoga3MpCitzdGF0aWMgdm9pZCBrczAxMjdfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmMpCiB7Ci0JaW50IGk7CisJc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CiAJdTggKnRhYmxlID0gcmVnX2RlZmF1bHRzOworCWludCBpOwogCiAJa3MtPmtzX3R5cGUgPSBLU19UWVBFX1VOS05PV047CiAKLQlkcHJpbnRrKCJrczAxMjc6IHJlc2V0XG4iKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjLCAicmVzZXRcbiIpOwogCW1zbGVlcCgxKTsKIAogCS8qIGluaXRpYWxpemUgYWxsIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMgKi8KIAkvKiAoZXhjZXB0IFNUQVQsIDB4MjEsIDB4MjIsIFRFU1QgYW5kIDB4MzgsMHgzOSkgKi8KIAotCWZvcihpID0gMTsgaSA8IDMzOyBpKyspCi0JCWtzMDEyN193cml0ZShrcywgaSwgdGFibGVbaV0pOworCWZvciAoaSA9IDE7IGkgPCAzMzsgaSsrKQorCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOwogCi0JZm9yKGkgPSAzNTsgaSA8IDQwOyBpKyspCi0JCWtzMDEyN193cml0ZShrcywgaSwgdGFibGVbaV0pOworCWZvciAoaSA9IDM1OyBpIDwgNDA7IGkrKykKKwkJa3MwMTI3X3dyaXRlKGMsIGksIHRhYmxlW2ldKTsKIAotCWZvcihpID0gNDE7IGkgPCA1NjsgaSsrKQotCQlrczAxMjdfd3JpdGUoa3MsIGksIHRhYmxlW2ldKTsKKwlmb3IgKGkgPSA0MTsgaSA8IDU2OyBpKyspCisJCWtzMDEyN193cml0ZShjLCBpLCB0YWJsZVtpXSk7CiAKLQlmb3IoaSA9IDU4OyBpIDwgNjQ7IGkrKykKLQkJa3MwMTI3X3dyaXRlKGtzLCBpLCB0YWJsZVtpXSk7CisJZm9yIChpID0gNTg7IGkgPCA2NDsgaSsrKQorCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOwogCiAKLQlpZiAoKGtzMDEyN19yZWFkKGtzLCBLU19TVEFUKSAmIDB4ODApID09IDApIHsKKwlpZiAoKGtzMDEyN19yZWFkKGMsIEtTX1NUQVQpICYgMHg4MCkgPT0gMCkgewogCQlrcy0+a3NfdHlwZSA9IEtTX1RZUEVfMDEyMlM7Ci0JCWRwcmludGsoImtzMDEyNzoga3MwMTIycyBGb3VuZFxuIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGMsICJrczAxMjJzIGZvdW5kXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCXN3aXRjaChrczAxMjdfcmVhZChrcywgS1NfQ01ERSkgJiAweDBmKSB7Ci0KKwlzd2l0Y2ggKGtzMDEyN19yZWFkKGMsIEtTX0NNREUpICYgMHgwZikgewogCWNhc2UgMDoKIAkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjc7Ci0JCWRwcmludGsoImtzMDEyNzoga3MwMTI3IGZvdW5kXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgImtzMDEyNyBmb3VuZFxuIik7CiAJCWJyZWFrOwogCiAJY2FzZSA5OgogCQlrcy0+a3NfdHlwZSA9IEtTX1RZUEVfMDEyN0I7Ci0JCWRwcmludGsoImtzMDEyNzoga3MwMTI3QiBSZXZpc2lvbiBBIGZvdW5kXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgImtzMDEyN0IgUmV2aXNpb24gQSBmb3VuZFxuIik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZHByaW50aygia3MwMTI3OiB1bmtub3duIHJldmlzaW9uXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgInVua25vd24gcmV2aXNpb25cbiIpOwogCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyBpbnQga3MwMTI3X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBrczAxMjdfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCWludAkJKmlhcmcgPSAoaW50Kilhcmc7Ci0KKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlpbnQJCSppYXJnID0gKGludCAqKWFyZzsKIAlpbnQJCXN0YXR1czsKIAogCWlmICgha3MpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc3dpdGNoIChjbWQpIHsKLQogCWNhc2UgREVDT0RFUl9JTklUOgotCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9JTklUXG4iKTsKLQkJa3MwMTI3X3Jlc2V0KGtzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgIkRFQ09ERVJfSU5JVFxuIik7CisJCWtzMDEyN19yZXNldChjKTsKIAkJYnJlYWs7CiAKIAljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgpAQCAtNDM2LDE2MSArNDI4LDE2MCBAQAogCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV80OgogCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV81OgogCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV82OgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX0lOUFVUICVkOiAiCi0JCQkJIkNvbXBvc2l0ZVxuIiwgKmlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfSU5QVVQgJWQ6IENvbXBvc2l0ZVxuIiwgKmlhcmcpOwogCQkJLyogYXV0b2RldGVjdCA1MC82MCBIeiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKIAkJCS8qIFZTRT0wICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURBLCAgIH4weDQwLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7CiAJCQkvKiBzZXQgaW5wdXQgbGluZSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQiwgICAweGIwLCAqaWFyZyk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREIsICAgMHhiMCwgKmlhcmcpOwogCQkJLyogbm9uLWZyZWVydW5uaW5nIG1vZGUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7CiAJCQkvKiBhbmFsb2cgaW5wdXQgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREQsICAgMHgwMywgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREQsICAgMHgwMywgMHgwMCk7CiAJCQkvKiBlbmFibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ1RSQUNLLCAweGNmLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ1RSQUNLLCAweGNmLCAweDAwKTsKIAkJCS8qIGNocm9tYSB0cmFwLCBIWUJXUj0xICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19MVU1BLCAgIDB4MDAsCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0xVTUEsICAgMHgwMCwKIAkJCQkgICAgICAgKHJlZ19kZWZhdWx0c1tLU19MVU1BXSl8MHgwYyk7CiAJCQkvKiBzY2FsZXIgZnVsbGJ3LCBsdW1hIGNvbWIgb2ZmICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOwogCQkJLyogbWFudWFsIGNocm9tYSBjb21iIC4yNSAuNSAuMjUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQywgMHgwZiwgMHg5MCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQywgMHgwZiwgMHg5MCk7CiAKIAkJCS8qIGNocm9tYSBwYXRoIGRlbGF5ICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUIsIDB4MGYsIDB4OTApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUIsIDB4MGYsIDB4OTApOwogCi0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVkdBSU4sIHJlZ19kZWZhdWx0c1tLU19WR0FJTl0pOwotCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19VVk9GRkgsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkhdKTsKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVUdBSU4sIHJlZ19kZWZhdWx0c1tLU19VR0FJTl0pOworCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1ZHQUlOLCByZWdfZGVmYXVsdHNbS1NfVkdBSU5dKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19VVk9GRkgsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkhdKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19VVk9GRkwsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkxdKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgS1NfSU5QVVRfU1ZJREVPXzE6CiAJCWNhc2UgS1NfSU5QVVRfU1ZJREVPXzI6CiAJCWNhc2UgS1NfSU5QVVRfU1ZJREVPXzM6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfSU5QVVQgJWQ6ICIKLQkJCQkiUy1WaWRlb1xuIiwgKmlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfSU5QVVQgJWQ6IFMtVmlkZW9cbiIsICppYXJnKTsKIAkJCS8qIGF1dG9kZXRlY3QgNTAvNjAgSHogKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CiAJCQkvKiBWU0U9MCAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgfjB4NDAsIDB4MDApOwogCQkJLyogc2V0IGlucHV0IGxpbmUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREIsICAgMHhiMCwgKmlhcmcpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURCLCAgIDB4YjAsICppYXJnKTsKIAkJCS8qIG5vbi1mcmVlcnVubmluZyBtb2RlICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOwogCQkJLyogYW5hbG9nIGlucHV0ICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURELCAgIDB4MDMsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURELCAgIDB4MDMsIDB4MDApOwogCQkJLyogZW5hYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NUUkFDSywgMHhjZiwgMHgwMCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19MVU1BLCAweDAwLAorCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAweDAwLAogCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfTFVNQV0pOwogCQkJLyogZGlzYWJsZSBsdW1hIGNvbWIgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQSwgMHgwOCwKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElBLCAweDA4LAogCQkJCSAgICAgICAocmVnX2RlZmF1bHRzW0tTX1ZFUlRJQV0mMHhmMCl8MHgwMSk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19WRVJUSUMsIDB4MGYsCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQywgMHgwZiwKIAkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7CiAKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQiwgMHgwZiwKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01CLCAweDBmLAogCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKIAotCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19VR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1VHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1ZHQUlOLCByZWdfZGVmYXVsdHNbS1NfVkdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7Ci0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1VWT0ZGTCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGTF0pOworCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7CiAJCQlicmVhazsKIAogCQljYXNlIEtTX0lOUFVUX1lVVjY1NjoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9JTlBVVCAxNTogIgotCQkJCSJZVVY2NTZcbiIpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfSU5QVVQgMTU6IFlVVjY1NlxuIik7CiAJCQlpZiAoa3MtPm5vcm0gPT0gVklERU9fTU9ERV9OVFNDIHx8CiAJCQkgICAga3MtPm5vcm0gPT0gS1NfU1REX1BBTF9NKQogCQkJCS8qIGZvcmNlIDYwIEh6ICovCi0JCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICAweGZjLCAweDAzKTsKKwkJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMyk7CiAJCQllbHNlCiAJCQkJLyogZm9yY2UgNTAgSHogKi8KLQkJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURBLCAgIDB4ZmMsIDB4MDIpOworCQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAyKTsKIAotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICAweGZmLCAweDQwKTsgLyogVlNFPTEgKi8KKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZmLCAweDQwKTsgLyogVlNFPTEgKi8KIAkJCS8qIHNldCBpbnB1dCBsaW5lIGFuZCBWQUxJR04gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREIsICAgMHhiMCwgKCppYXJnIHwgMHg0MCkpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURCLCAgIDB4YjAsICgqaWFyZyB8IDB4NDApKTsKIAkJCS8qIGZyZWVydW5uaW5nIG1vZGUsICovCiAJCQkvKiBUU1RHRU4gPSAxIFRTVEdGUj0xMSBUU1RHUEg9MCBUU1RHUEs9MCAgVk1FTT0xKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREMsICAgMHg3MCwgMHg4Nyk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREMsICAgMHg3MCwgMHg4Nyk7CiAJCQkvKiBkaWdpdGFsIGlucHV0LCBTWU5ESVIgPSAwIElOUFNMPTAxIENMS0RJUj0wIEVBVj0wICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURELCAgIDB4MDMsIDB4MDgpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURELCAgIDB4MDMsIDB4MDgpOwogCQkJLyogZGlzYWJsZSBjaHJvbWEgZGVtb2R1bGF0aW9uICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MzApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MzApOwogCQkJLyogSFlQSyA9MDEgQ1RSQVAgPSAwIEhZQldSPTAgUEVEPTEgUkdCSD0xIFVOSVQ9MSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfTFVNQSwgICAweDAwLCAweDcxKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQywgMHgwZiwKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfTFVNQSwgICAweDAwLCAweDcxKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElDLCAweDBmLAogCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfVkVSVElDXSYweGYwKTsKIAogCQkJLyogc2NhbGVyIGZ1bGxidywgbHVtYSBjb21iIG9mZiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVkVSVElBLCAweDA4LCAweDgxKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElBLCAweDA4LCAweDgxKTsKIAotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01CLCAweDBmLAorCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUIsIDB4MGYsCiAJCQkJICAgICAgIHJlZ19kZWZhdWx0c1tLU19DSFJPTUJdJjB4ZjApOwogCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DT04sIDB4MDAsIDB4MDApOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQlJULCAweDAwLCAzMik7CS8qIHNwZWM6IDM0ICovCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NPTiwgMHgwMCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0JSVCwgMHgwMCwgMzIpOwkvKiBzcGVjOiAzNCAqLwogCQkJCS8qIHNwZWM6IDIyOSAoZTUpICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19TQVQsIDB4MDAsIDB4ZTgpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfSFVFLCAweDAwLCAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfU0FULCAweDAwLCAweGU4KTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfSFVFLCAweDAwLCAwKTsKIAotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVUdBSU4sIDB4MDAsIDIzOCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19WR0FJTiwgMHgwMCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1VHQUlOLCAweDAwLCAyMzgpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WR0FJTiwgMHgwMCwgMHgwMCk7CiAKIAkJCS8qVU9GRjoweDMwLCBWT0ZGOjB4MzAsIFRTVENHTj0xICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19VVk9GRkgsIDB4MDAsIDB4NGYpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVVZPRkZMLCAweDAwLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVVZPRkZILCAweDAwLCAweDRmKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVVZPRkZMLCAweDAwLCAweDAwKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfSU5QVVQ6ICIKLQkJCQkiVW5rbm93biBpbnB1dCAlZFxuIiwgKmlhcmcpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfSU5QVVQ6IFVua25vd24gaW5wdXQgJWRcbiIsICppYXJnKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogaGFjazogQ0RNTFBGIHNvbWV0aW1lcyBzcG9udGFuZW91c2x5IHN3aXRjaGVzIG9uOyAqLwogCQkvKiBmb3JjZSBiYWNrIG9mZiAqLwotCQlrczAxMjdfd3JpdGUoa3MsIEtTX0RFTU9ELCByZWdfZGVmYXVsdHNbS1NfREVNT0RdKTsKKwkJa3MwMTI3X3dyaXRlKGMsIEtTX0RFTU9ELCByZWdfZGVmYXVsdHNbS1NfREVNT0RdKTsKIAkJYnJlYWs7CiAKIAljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKIAkJc3dpdGNoKCppYXJnKSB7CiAJCWNhc2UgS1NfT1VUUFVUX1lVVjY1NkU6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfT1VUUFVUOiAiCi0JCQkJIk9VVFBVVF9ZVVY2NTZFIChNaXNzaW5nKVxuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9PVVRQVVQ6IE9VVFBVVF9ZVVY2NTZFIChNaXNzaW5nKVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWJyZWFrOwogCiAJCWNhc2UgS1NfT1VUUFVUX0VYVjoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9PVVRQVVQ6ICIKLQkJCQkiT1VUUFVUX0VYVlxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19PRk1UQSwgMHhmMCwgMHgwOSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9PVVRQVVQ6IE9VVFBVVF9FWFZcbiIpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19PRk1UQSwgMHhmMCwgMHgwOSk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAotCWNhc2UgREVDT0RFUl9TRVRfTk9STTogLy9zYW0gVGhpcyBibG9jayBtaXhlcyBvbGQgYW5kIG5ldyBub3JtIG5hbWVzLi4uCisJY2FzZSBERUNPREVSX1NFVF9OT1JNOiAvKiBzYW0gVGhpcyBibG9jayBtaXhlcyBvbGQgYW5kIG5ldyBub3JtIG5hbWVzLi4uICovCiAJCS8qIFNldCB0byBhdXRvbWF0aWMgU0VDQU0vRnNjIG1vZGUgKi8KLQkJa3MwMTI3X2FuZF9vcihrcywgS1NfREVNT0QsIDB4ZjAsIDB4MDApOworCQlrczAxMjdfYW5kX29yKGMsIEtTX0RFTU9ELCAweGYwLCAweDAwKTsKIAogCQlrcy0+bm9ybSA9ICppYXJnOwotCQlzd2l0Y2goKmlhcmcpCi0JCXsKKwkJc3dpdGNoICgqaWFyZykgewogCQkvKiB0aGlzIGlzIHVudGVzdGVkICEhICovCiAJCS8qIEl0IGp1c3QgZGV0ZWN0cyBQQUxfTi9OVFNDX00gKG5vIHNwZWNpYWwgZnJlcXVlbmNpZXMpICovCiAJCS8qIEFuZCB5b3UgaGF2ZSB0byBzZXQgdGhlIHN0YW5kYXJkIGEgc2Vjb25kIHRpbWUgYWZ0ZXJ3YXJkcyAqLwogCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9OT1JNOiBBVVRPXG4iKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX05PUk06IEFVVE9cbiIpOwogCiAJCQkvKiBUaGUgY2hpcCBkZXRlcm1pbmVzIHRoZSBmb3JtYXQgKi8KIAkJCS8qIGJhc2VkIG9uIHRoZSBjdXJyZW50IGZpZWxkIHJhdGUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUEsIDB4OWYsIDB4MjApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4OWYsIDB4MjApOwogCQkJLyogVGhpcyBpcyB3cm9uZyBmb3IgUEFMICEgQXMgSSBzYWlkLCAqLwogCQkJLyogeW91IG5lZWQgdG8gc2V0IHRoZSBzdGFuZGFyZCBvbmNlIGFnYWluICEhICovCiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI0MDsKQEAgLTU5OCw4NCArNTg5LDg2IEBACiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9OT1JNOiBOVFNDX01cbiIpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX05PUk06IE5UU0NfTVxuIik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI0MDsKIAkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CiAJCQlicmVhazsKIAogCQljYXNlIEtTX1NURF9OVFNDX046Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgS1MwMTI3X1NFVF9TVEFOREFSRDogIgotCQkJCSJOVFNDX04gKGZpeG1lKVxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUEsIDB4OWYsIDB4NDApOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiS1MwMTI3X1NFVF9OT1JNOiBOVFNDX04gKGZpeG1lKVxuIik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7CiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI0MDsKIAkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX05PUk06IFBBTF9OXG4iKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9OT1JNOiBQQUxfTlxuIik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI5MDsKIAkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CiAJCQlicmVhazsKIAogCQljYXNlIEtTX1NURF9QQUxfTToKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBLUzAxMjdfU0VUX1NUQU5EQVJEOiAiCi0JCQkJIlBBTF9NIChmaXhtZSlcbiIpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01BLCAweDlmLCAweDQwKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIktTMDEyN19TRVRfTk9STTogUEFMX00gKGZpeG1lKVxuIik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7CiAJCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI5MDsKIAkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7CiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgS1MwMTI3X1NFVF9TVEFOREFSRDogIgotCQkJCSJTRUNBTVxuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJLUzAxMjdfU0VUX05PUk06IFNFQ0FNXG4iKTsKIAkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjkwOwogCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKIAogCQkJLyogc2V0IHRvIHNlY2FtIGF1dG9kZXRlY3Rpb24gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQSwgMHhkZiwgMHgyMCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHhkZiwgMHgyMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0RFTU9ELCAweGYwLCAweDAwKTsKIAkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWi8xMCsxKTsKIAogCQkJLyogZGlkIGl0IGF1dG9kZXRlY3Q/ICovCi0JCQlpZiAoa3MwMTI3X3JlYWQoa3MsIEtTX0RFTU9EKSAmIDB4NDApCisJCQlpZiAoa3MwMTI3X3JlYWQoYywgS1NfREVNT0QpICYgMHg0MCkKIAkJCQlicmVhazsKIAogCQkJLyogZm9yY2UgdG8gc2VjYW0gbW9kZSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfREVNT0QsIDB4ZjAsIDB4MGYpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19ERU1PRCwgMHhmMCwgMHgwZik7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX05PUk06ICIKLQkJCQkiVW5rbm93biBub3JtICVkXG4iLCAqaWFyZyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9OT1JNOiBVbmtub3duIG5vcm0gJWRcbiIsICppYXJnKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgotCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfUElDVFVSRSAiCi0JCQkibm90IHlldCBzdXBwb3J0ZWQgKGZpeG1lKVxuIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkiREVDT0RFUl9TRVRfUElDVFVSRTogbm90IHlldCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfQlJJR0hUTkVTUzogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFCi0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9DT05UUkFTVDogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFCi0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9IVUU6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRT8KLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1NBVFVSQVRJT046IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRQotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfQUdDX01PREU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9BR0M6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9DSFJPTUFfTU9ERToKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1BJWENMS19NT0RFOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfR0FNTUFfTU9ERToKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1VHQUlOOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfVkdBSU46Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFk6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFY6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVk6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVY6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9WU0FMSUdOX01PREU6CisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQlJJR0hUTkVTUzogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQ09OVFJBU1Q6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRSAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0hVRTogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFPyAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1NBVFVSQVRJT046IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRSAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0FHQ19NT0RFOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0FHQzogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9DSFJPTUFfTU9ERTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9QSVhDTEtfTU9ERTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9HQU1NQV9NT0RFOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1VHQUlOOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1ZHQUlOOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0lOVkFMWTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFU6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxWOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1VOVVNFWTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVU6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VWOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1ZTQUxJR05fTU9ERTogKi8KIAogCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKQEAgLTY4NCwzNCArNjc3LDMyIEBACiAJCWlhcmcgPSBhcmc7CiAJCWVuYWJsZSA9ICgqaWFyZyAhPSAwKTsKIAkJaWYgKGVuYWJsZSkgewotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kICIKLQkJCQkJIkRFQ09ERVJfRU5BQkxFX09VVFBVVCBvbiAiCi0JCQkJCSIoJWQpXG4iLCBlbmFibGUpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9FTkFCTEVfT1VUUFVUIG9uXG4iKTsKIAkJCS8qIEFsbCBvdXRwdXQgcGlucyBvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfT0ZNVEEsIDB4Y2YsIDB4MzApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19PRk1UQSwgMHhjZiwgMHgzMCk7CiAJCQkvKiBPYmV5IHRoZSBPRU4gcGluICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DREVNLCAweDdmLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0RFTSwgMHg3ZiwgMHgwMCk7CiAJCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgIgotCQkJCQkiREVDT0RFUl9FTkFCTEVfT1VUUFVUIG9mZiAiCi0JCQkJCSIoJWQpXG4iLCBlbmFibGUpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9FTkFCTEVfT1VUUFVUIG9mZlxuIik7CiAJCQkvKiBWaWRlbyBvdXRwdXQgcGlucyBvZmYgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX09GTVRBLCAweGNmLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfT0ZNVEEsIDB4Y2YsIDB4MDApOwogCQkJLyogSWdub3JlIHRoZSBPRU4gcGluICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DREVNLCAweDdmLCAweDgwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0RFTSwgMHg3ZiwgMHg4MCk7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfT1VUUFVUX01PREU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9XSURUSDoKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0hFSUdIVDoKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0hTQ0FMRToKKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9PVVRQVVRfTU9ERTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9XSURUSDogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9IRUlHSFQ6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSFNDQUxFOiAqLwogCiAJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6Ci0JCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX0dFVF9TVEFUVVNcbiIpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAiREVDT0RFUl9HRVRfU1RBVFVTXG4iKTsKIAkJKmlhcmcgPSAwOwotCQlzdGF0dXMgPSBrczAxMjdfcmVhZChrcywgS1NfU1RBVCk7CisJCXN0YXR1cyA9IGtzMDEyN19yZWFkKGMsIEtTX1NUQVQpOwogCQlpZiAoIShzdGF0dXMgJiAweDIwKSkJCSAvKiBOT1ZJRCBub3Qgc2V0ICovCiAJCQkqaWFyZyA9ICgqaWFyZyB8IERFQ09ERVJfU1RBVFVTX0dPT0QpOwogCQlpZiAoKHN0YXR1cyAmIDB4MDEpKQkJICAgICAgLyogQ0xPQ0sgc2V0ICovCkBAIC03MjIsMTI0ICs3MTMsODEgQEAKIAkJCSppYXJnID0gKCppYXJnIHwgREVDT0RFUl9TVEFUVVNfTlRTQyk7CiAJCWJyZWFrOwogCi0JLy9DYXRjaCBhbnkgdW5rbm93biBjb21tYW5kCisJLyogQ2F0Y2ggYW55IHVua25vd24gY29tbWFuZCAqLwogCWRlZmF1bHQ6Ci0JCWRwcmludGsoImtzMDEyNzogY29tbWFuZCB1bmtub3duOiAlMDRYXG4iLCBjbWQpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAidW5rbm93bjogMHglMDh4XG4iLCBjbWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKIAotCi0KLXN0YXRpYyBpbnQga3MwMTI3X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50IGtzMDEyN19kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgaW50IGtzMDEyN19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7Ci0KLQotCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHtJMkNfS1MwMTI3X0FERE9OPj4xLAotCQkJCSAgICAgICBJMkNfS1MwMTI3X09OQk9BUkQ+PjEsIEkyQ19DTElFTlRfRU5EfTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBwcm9iZVsyXSA9CXtJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkR9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZVsyXSA9IAl7STJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5EfTsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCW5vcm1hbF9pMmMsCi0JcHJvYmUsCi0JaWdub3JlLAorI2RlZmluZSBJMkNfS1MwMTI3X0FERE9OICAgMHhEOAorI2RlZmluZSBJMkNfS1MwMTI3X09OQk9BUkQgMHhEQQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geworCUkyQ19LUzAxMjdfQURET04gPj4gMSwKKwlJMkNfS1MwMTI3X09OQk9BUkQgPj4gMSwKKwlJMkNfQ0xJRU5UX0VORAogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfa3MwMTI3ID0gewotCS5kcml2ZXIubmFtZSA9ICJrczAxMjciLAotCS5pZCAgICAgICAgICAgICA9IEkyQ19EUklWRVJJRF9LUzAxMjcsCi0JLmF0dGFjaF9hZGFwdGVyID0ga3MwMTI3X3Byb2JlLAotCS5kZXRhY2hfY2xpZW50ICA9IGtzMDEyN19kZXRhY2gsCi0JLmNvbW1hbmQgICAgICAgID0ga3MwMTI3X2NvbW1hbmQKLX07CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGtzMDEyN19jbGllbnRfdG1wbCA9Ci17Ci0JLm5hbWUgPSAiKGtzMDEyNyB1bnNldCkiLAotCS5hZGRyID0gMCwKLQkuYWRhcHRlciA9IE5VTEwsCi0JLmRyaXZlciA9ICZpMmNfZHJpdmVyX2tzMDEyNywKLX07Ci0KLXN0YXRpYyBpbnQga3MwMTI3X2ZvdW5kX3Byb2Moc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGtpbmQpCitzdGF0aWMgaW50IGtzMDEyN19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBrczAxMjcgKmtzOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsaWVudCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQltZW1jcHkoY2xpZW50LCAma3MwMTI3X2NsaWVudF90bXBsLCBzaXplb2YoKmNsaWVudCkpOworCXY0bF9pbmZvKGMsICIlcyBjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQljLT5hZGRyID09IChJMkNfS1MwMTI3X0FERE9OID4+IDEpID8gImFkZG9uIiA6ICJvbi1ib2FyZCIsCisJCWMtPmFkZHIgPDwgMSwgYy0+YWRhcHRlci0+bmFtZSk7CiAKIAlrcyA9IGt6YWxsb2Moc2l6ZW9mKCprcyksIEdGUF9LRVJORUwpOwotCWlmIChrcyA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKGtzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGtzKTsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+YWRkciA9IGFkZHI7Ci0Jc3ByaW50ZihjbGllbnQtPm5hbWUsICJrczAxMjctJTAyeCIsIGFkYXB0ZXItPmlkKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoYywga3MpOwogCi0Ja3MtPmNsaWVudCA9IGNsaWVudDsKLQlrcy0+YWRkciA9IGFkZHI7CiAJa3MtPmtzX3R5cGUgPSBLU19UWVBFX1VOS05PV047CiAKIAkvKiBwb3dlciB1cCAqLwotCWtzMDEyN193cml0ZShrcywgS1NfQ01EQSwgMHgyYyk7CisJaW5pdF9yZWdfZGVmYXVsdHMoKTsKKwlrczAxMjdfd3JpdGUoYywgS1NfQ01EQSwgMHgyYyk7CiAJbWRlbGF5KDEwKTsKIAogCS8qIHJlc2V0IHRoZSBkZXZpY2UgKi8KLQlrczAxMjdfcmVzZXQoa3MpOwotCXByaW50ayhLRVJOX0lORk8gImtzMDEyNzogYXR0YWNoOiAlcyB2aWRlbyBkZWNvZGVyXG4iLAotCSAgICAgICBrcy0+YWRkcj09KEkyQ19LUzAxMjdfQURET04+PjEpID8gImFkZG9uIiA6ICJvbi1ib2FyZCIpOwotCi0JaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlrczAxMjdfcmVzZXQoYyk7CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBrczAxMjdfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBrczAxMjdfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjKQogewotCWlmIChhZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9aUjM2MDY3KQotCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGtzMDEyN19mb3VuZF9wcm9jKTsKLQlyZXR1cm4gMDsKLX0KKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKIAotc3RhdGljIGludCBrczAxMjdfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlrczAxMjdfd3JpdGUoYywgS1NfT0ZNVEEsIDB4MjApOyAvKiB0cmlzdGF0ZSAqLworCWtzMDEyN193cml0ZShjLCBLU19DTURBLCAweDJjIHwgMHg4MCk7IC8qIHBvd2VyIGRvd24gKi8KIAotCWtzMDEyN193cml0ZShrcywgS1NfT0ZNVEEsIDB4MjApOyAvKnRyaXN0YXRlKi8KLQlrczAxMjdfd3JpdGUoa3MsIEtTX0NNREEsIDB4MmMgfCAweDgwKTsgLyogcG93ZXIgZG93biAqLwotCi0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIAlrZnJlZShrcyk7Ci0Ja2ZyZWUoY2xpZW50KTsKLQotCWRwcmludGsoImtzMDEyNzogZGV0YWNoXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBrczAxMjdfaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQga3MwMTI3X2xlZ2FjeV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JaW5pdF9yZWdfZGVmYXVsdHMoKTsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfa3MwMTI3KTsKKwlyZXR1cm4gYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfWlIzNjA2NzsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IGtzMDEyN19jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2tzMDEyNyk7Ci19CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQga3MwMTI3X2lkW10gPSB7CisJeyAia3MwMTI3IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBrczAxMjdfaWQpOwogCi0KLW1vZHVsZV9pbml0KGtzMDEyN19pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChrczAxMjdfY2xlYW51cF9tb2R1bGUpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gImtzMDEyNyIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0tTMDEyNywKKwkuY29tbWFuZCA9IGtzMDEyN19jb21tYW5kLAorCS5wcm9iZSA9IGtzMDEyN19wcm9iZSwKKwkucmVtb3ZlID0ga3MwMTI3X3JlbW92ZSwKKwkubGVnYWN5X3Byb2JlID0ga3MwMTI3X2xlZ2FjeV9wcm9iZSwKKwkuaWRfdGFibGUgPSBrczAxMjdfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwppbmRleCBhOWVmNzgwLi42NDE4ZjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwpAQCAtODQzLDE3ICs4NDMsMTYgQEAKIAogc3RhdGljIGludCBtZXllX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgaTsKIAotCWVyciA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuKGlub2RlLCBmaWxlKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmbWV5ZS5pbl91c2UpKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJbWNoaXBfaGljX3N0b3AoKTsKIAogCWlmIChtY2hpcF9kbWFfYWxsb2MoKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1leWU6IG1jaGlwIGZyYW1lYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UoaW5vZGUsIGZpbGUpOworCQljbGVhcl9iaXQoMCwgJm1leWUuaW5fdXNlKTsKIAkJcmV0dXJuIC1FTk9CVUZTOwogCX0KIApAQCAtODY4LDcgKzg2Nyw3IEBACiB7CiAJbWNoaXBfaGljX3N0b3AoKTsKIAltY2hpcF9kbWFfZnJlZSgpOwotCXZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKKwljbGVhcl9iaXQoMCwgJm1leWUuaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc3NCw2ICsxNzczLDcgQEAKIAkJZ290byBvdXRub3RkZXY7CiAJfQogCisJcmV0ID0gLUVOT01FTTsKIAltZXllLm1jaGlwX2RldiA9IHBjaWRldjsKIAltZXllLnZpZGVvX2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOwogCWlmICghbWV5ZS52aWRlb19kZXYpIHsKQEAgLTE3ODEsNyArMTc4MSw2IEBACiAJCWdvdG8gb3V0bm90ZGV2OwogCX0KIAotCXJldCA9IC1FTk9NRU07CiAJbWV5ZS5ncmFiX3RlbXAgPSB2bWFsbG9jKE1DSElQX05CX1BBR0VTX01KUEVHICogUEFHRV9TSVpFKTsKIAlpZiAoIW1leWUuZ3JhYl90ZW1wKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWV5ZTogZ3JhYiBidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuaAppbmRleCBkNTM1NzQ4Li41ZjcwYTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuaApAQCAtMzExLDYgKzMxMSw3IEBACiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2OwkvKiB2aWRlbyBkZXZpY2UgcGFyYW1ldGVycyAqLwogCXN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3R1cmU7CS8qIHZpZGVvIHBpY3R1cmUgcGFyYW1ldGVycyAqLwogCXN0cnVjdCBtZXllX3BhcmFtcyBwYXJhbXM7CS8qIGFkZGl0aW9uYWwgcGFyYW1ldGVycyAqLworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwkJLyogc2V0IHRvIDEgaWYgdGhlIGRldmljZSBpcyBpbiB1c2UgKi8KICNpZmRlZiBDT05GSUdfUE0KIAl1OCBwbV9tY2hpcF9tb2RlOwkJLyogb2xkIG1jaGlwIG1vZGUgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0wMDEuYwppbmRleCA1NTRkMjI5Li4wYzUyNDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0wMDEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0wMDEuYwpAQCAtMTE3LDI0ICsxMTcsNTEgQEAKIAogc3RhdGljIGludCBtdDltMDAxX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CisJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMDAxLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCByZXQ7CiAKLQkvKiBEaXNhYmxlIGNoaXAsIHN5bmNocm9ub3VzIG9wdGlvbiB1cGRhdGUgKi8KIAlkZXZfZGJnKGljZC0+dmRldi0+cGFyZW50LCAiJXNcbiIsIF9fZnVuY19fKTsKIAotCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOU0wMDFfUkVTRVQsIDEpOwotCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5TTAwMV9SRVNFVCwgMCk7Ci0JaWYgKHJldCA+PSAwKQorCWlmIChpY2wtPnBvd2VyKSB7CisJCXJldCA9IGljbC0+cG93ZXIoJm10OW0wMDEtPmNsaWVudC0+ZGV2LCAxKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoaWNkLT52ZGV2LT5wYXJlbnQsCisJCQkJIlBsYXRmb3JtIGZhaWxlZCB0byBwb3dlci1vbiB0aGUgY2FtZXJhLlxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJLyogVGhlIGNhbWVyYSBjb3VsZCBoYXZlIGJlZW4gYWxyZWFkeSBvbiwgd2UgcmVzZXQgaXQgYWRkaXRpb25hbGx5ICovCisJaWYgKGljbC0+cmVzZXQpCisJCXJldCA9IGljbC0+cmVzZXQoJm10OW0wMDEtPmNsaWVudC0+ZGV2KTsKKwllbHNlCisJCXJldCA9IC1FTk9ERVY7CisKKwlpZiAocmV0IDwgMCkgeworCQkvKiBFaXRoZXIgbm8gcGxhdGZvcm0gcmVzZXQsIG9yIHBsYXRmb3JtIHJlc2V0IGZhaWxlZCAqLworCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlNMDAxX1JFU0VULCAxKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlNMDAxX1JFU0VULCAwKTsKKwl9CisJLyogRGlzYWJsZSBjaGlwLCBzeW5jaHJvbm91cyBvcHRpb24gdXBkYXRlICovCisJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOU0wMDFfT1VUUFVUX0NPTlRST0wsIDApOwogCi0JcmV0dXJuIHJldCA+PSAwID8gMCA6IC1FSU87CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBtdDltMDAxX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CisJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMDAxLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCiAJLyogRGlzYWJsZSB0aGUgY2hpcCAqLwogCXJlZ193cml0ZShpY2QsIE1UOU0wMDFfT1VUUFVUX0NPTlRST0wsIDApOworCisJaWYgKGljbC0+cG93ZXIpCisJCWljbC0+cG93ZXIoJm10OW0wMDEtPmNsaWVudC0+ZGV2LCAwKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNjcsMjQgKzI5NCwyNCBAQAogCiAJLyogQmxhbmtpbmcgYW5kIHN0YXJ0IHZhbHVlcyAtIGRlZmF1bHQuLi4gKi8KIAlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlNMDAxX0hPUklaT05UQUxfQkxBTktJTkcsIGhibGFuayk7Ci0JaWYgKHJldCA+PSAwKQorCWlmICghcmV0KQogCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlNMDAxX1ZFUlRJQ0FMX0JMQU5LSU5HLCB2YmxhbmspOwogCiAJLyogVGhlIGNhbGxlciBwcm92aWRlcyBhIHN1cHBvcnRlZCBmb3JtYXQsIGFzIHZlcmlmaWVkIHBlcgogCSAqIGNhbGwgdG8gaWNkLT50cnlfZm10X2NhcCgpICovCi0JaWYgKHJldCA+PSAwKQorCWlmICghcmV0KQogCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlNMDAxX0NPTFVNTl9TVEFSVCwgcmVjdC0+bGVmdCk7Ci0JaWYgKHJldCA+PSAwKQorCWlmICghcmV0KQogCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlNMDAxX1JPV19TVEFSVCwgcmVjdC0+dG9wKTsKLQlpZiAocmV0ID49IDApCisJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOU0wMDFfV0lORE9XX1dJRFRILCByZWN0LT53aWR0aCAtIDEpOwotCWlmIChyZXQgPj0gMCkKKwlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5TTAwMV9XSU5ET1dfSEVJR0hULAogCQkJCXJlY3QtPmhlaWdodCArIGljZC0+eV9za2lwX3RvcCAtIDEpOwotCWlmIChyZXQgPj0gMCAmJiBtdDltMDAxLT5hdXRvZXhwb3N1cmUpIHsKKwlpZiAoIXJldCAmJiBtdDltMDAxLT5hdXRvZXhwb3N1cmUpIHsKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5TTAwMV9TSFVUVEVSX1dJRFRILAogCQkJCXJlY3QtPmhlaWdodCArIGljZC0+eV9za2lwX3RvcCArIHZibGFuayk7Ci0JCWlmIChyZXQgPj0gMCkgeworCQlpZiAoIXJldCkgewogCQkJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCA9CiAJCQkJc29jX2NhbWVyYV9maW5kX3FjdHJsKGljZC0+b3BzLAogCQkJCQkJICAgICAgVjRMMl9DSURfRVhQT1NVUkUpOwpAQCAtMjk1LDcgKzMyMiw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBtdDltMDAxX3RyeV9mbXRfY2FwKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTBiMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMKQEAgLTAsMCArMSw5NzMgQEAKKy8qCisgKiBEcml2ZXIgZm9yIE1UOU0xMTEgQ01PUyBJbWFnZSBTZW5zb3IgZnJvbSBNaWNyb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIFJvYmVydCBKYXJ6bWlrIDxyb2JlcnQuamFyem1pa0BmcmVlLmZyPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CisKKy8qCisgKiBtdDltMTExIGkyYyBhZGRyZXNzIGlzIDB4NWQgb3IgMHg0OCAoZGVwZW5kaW5nIG9uIFNBZGRyIHBpbikKKyAqIFRoZSBwbGF0Zm9ybSBoYXMgdG8gZGVmaW5lIGkyY19ib2FyZF9pbmZvIGFuZCBjYWxsIGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKCkKKyAqLworCisvKiBtdDltMTExOiBTZW5zb3IgcmVnaXN0ZXIgYWRkcmVzc2VzICovCisjZGVmaW5lIE1UOU0xMTFfQ0hJUF9WRVJTSU9OCQkweDAwMAorI2RlZmluZSBNVDlNMTExX1JPV19TVEFSVAkJMHgwMDEKKyNkZWZpbmUgTVQ5TTExMV9DT0xVTU5fU1RBUlQJCTB4MDAyCisjZGVmaW5lIE1UOU0xMTFfV0lORE9XX0hFSUdIVAkJMHgwMDMKKyNkZWZpbmUgTVQ5TTExMV9XSU5ET1dfV0lEVEgJCTB4MDA0CisjZGVmaW5lIE1UOU0xMTFfSE9SSVpPTlRBTF9CTEFOS0lOR19CCTB4MDA1CisjZGVmaW5lIE1UOU0xMTFfVkVSVElDQUxfQkxBTktJTkdfQgkweDAwNgorI2RlZmluZSBNVDlNMTExX0hPUklaT05UQUxfQkxBTktJTkdfQQkweDAwNworI2RlZmluZSBNVDlNMTExX1ZFUlRJQ0FMX0JMQU5LSU5HX0EJMHgwMDgKKyNkZWZpbmUgTVQ5TTExMV9TSFVUVEVSX1dJRFRICQkweDAwOQorI2RlZmluZSBNVDlNMTExX1JPV19TUEVFRAkJMHgwMGEKKyNkZWZpbmUgTVQ5TTExMV9FWFRSQV9ERUxBWQkJMHgwMGIKKyNkZWZpbmUgTVQ5TTExMV9TSFVUVEVSX0RFTEFZCQkweDAwYworI2RlZmluZSBNVDlNMTExX1JFU0VUCQkJMHgwMGQKKyNkZWZpbmUgTVQ5TTExMV9SRUFEX01PREVfQgkJMHgwMjAKKyNkZWZpbmUgTVQ5TTExMV9SRUFEX01PREVfQQkJMHgwMjEKKyNkZWZpbmUgTVQ5TTExMV9GTEFTSF9DT05UUk9MCQkweDAyMworI2RlZmluZSBNVDlNMTExX0dSRUVOMV9HQUlOCQkweDAyYgorI2RlZmluZSBNVDlNMTExX0JMVUVfR0FJTgkJMHgwMmMKKyNkZWZpbmUgTVQ5TTExMV9SRURfR0FJTgkJMHgwMmQKKyNkZWZpbmUgTVQ5TTExMV9HUkVFTjJfR0FJTgkJMHgwMmUKKyNkZWZpbmUgTVQ5TTExMV9HTE9CQUxfR0FJTgkJMHgwMmYKKyNkZWZpbmUgTVQ5TTExMV9DT05URVhUX0NPTlRST0wJCTB4MGM4CisjZGVmaW5lIE1UOU0xMTFfUEFHRV9NQVAJCTB4MGYwCisjZGVmaW5lIE1UOU0xMTFfQllURV9XSVNFX0FERFIJCTB4MGYxCisKKyNkZWZpbmUgTVQ5TTExMV9SRVNFVF9TWU5DX0NIQU5HRVMJKDEgPDwgMTUpCisjZGVmaW5lIE1UOU0xMTFfUkVTRVRfUkVTVEFSVF9CQURfRlJBTUUJKDEgPDwgOSkKKyNkZWZpbmUgTVQ5TTExMV9SRVNFVF9TSE9XX0JBRF9GUkFNRVMJKDEgPDwgOCkKKyNkZWZpbmUgTVQ5TTExMV9SRVNFVF9SRVNFVF9TT0MJCSgxIDw8IDUpCisjZGVmaW5lIE1UOU0xMTFfUkVTRVRfT1VUUFVUX0RJU0FCTEUJKDEgPDwgNCkKKyNkZWZpbmUgTVQ5TTExMV9SRVNFVF9DSElQX0VOQUJMRQkoMSA8PCAzKQorI2RlZmluZSBNVDlNMTExX1JFU0VUX0FOQUxPR19TVEFOREJZCSgxIDw8IDIpCisjZGVmaW5lIE1UOU0xMTFfUkVTRVRfUkVTVEFSVF9GUkFNRQkoMSA8PCAxKQorI2RlZmluZSBNVDlNMTExX1JFU0VUX1JFU0VUX01PREUJKDEgPDwgMCkKKworI2RlZmluZSBNVDlNMTExX1JNQl9NSVJST1JfQ09MUwkJKDEgPDwgMSkKKyNkZWZpbmUgTVQ5TTExMV9STUJfTUlSUk9SX1JPV1MJCSgxIDw8IDApCisjZGVmaW5lIE1UOU0xMTFfQ1RYVF9DVFJMX1JFU1RBUlQJKDEgPDwgMTUpCisjZGVmaW5lIE1UOU0xMTFfQ1RYVF9DVFJMX0RFRkVDVENPUl9CCSgxIDw8IDEyKQorI2RlZmluZSBNVDlNMTExX0NUWFRfQ1RSTF9SRVNJWkVfQgkoMSA8PCAxMCkKKyNkZWZpbmUgTVQ5TTExMV9DVFhUX0NUUkxfQ1RSTDJfQgkoMSA8PCA5KQorI2RlZmluZSBNVDlNMTExX0NUWFRfQ1RSTF9HQU1NQV9CCSgxIDw8IDgpCisjZGVmaW5lIE1UOU0xMTFfQ1RYVF9DVFJMX1hFTk9OX0VOCSgxIDw8IDcpCisjZGVmaW5lIE1UOU0xMTFfQ1RYVF9DVFJMX1JFQURfTU9ERV9CCSgxIDw8IDMpCisjZGVmaW5lIE1UOU0xMTFfQ1RYVF9DVFJMX0xFRF9GTEFTSF9FTgkoMSA8PCAyKQorI2RlZmluZSBNVDlNMTExX0NUWFRfQ1RSTF9WQkxBTktfU0VMX0IJKDEgPDwgMSkKKyNkZWZpbmUgTVQ5TTExMV9DVFhUX0NUUkxfSEJMQU5LX1NFTF9CCSgxIDw8IDApCisvKgorICogbXQ5bTExMTogQ29sb3JwaXBlIHJlZ2lzdGVyIGFkZHJlc3NlcyAoMHgxMDAuLjB4MWZmKQorICovCisjZGVmaW5lIE1UOU0xMTFfT1BFUl9NT0RFX0NUUkwJCTB4MTA2CisjZGVmaW5lIE1UOU0xMTFfT1VUUFVUX0ZPUk1BVF9DVFJMCTB4MTA4CisjZGVmaW5lIE1UOU0xMTFfUkVEVUNFUl9YWk9PTV9CCQkweDFhMAorI2RlZmluZSBNVDlNMTExX1JFRFVDRVJfWFNJWkVfQgkJMHgxYTEKKyNkZWZpbmUgTVQ5TTExMV9SRURVQ0VSX1laT09NX0IJCTB4MWEzCisjZGVmaW5lIE1UOU0xMTFfUkVEVUNFUl9ZU0laRV9CCQkweDFhNAorI2RlZmluZSBNVDlNMTExX1JFRFVDRVJfWFpPT01fQQkJMHgxYTYKKyNkZWZpbmUgTVQ5TTExMV9SRURVQ0VSX1hTSVpFX0EJCTB4MWE3CisjZGVmaW5lIE1UOU0xMTFfUkVEVUNFUl9ZWk9PTV9BCQkweDFhOQorI2RlZmluZSBNVDlNMTExX1JFRFVDRVJfWVNJWkVfQQkJMHgxYWEKKworI2RlZmluZSBNVDlNMTExX09VVFBVVF9GT1JNQVRfQ1RSTDJfQQkweDEzYQorI2RlZmluZSBNVDlNMTExX09VVFBVVF9GT1JNQVRfQ1RSTDJfQgkweDE5YgorCisjZGVmaW5lIE1UOU0xMTFfT1BNT0RFX0FVVE9FWFBPX0VOCSgxIDw8IDE0KQorCisKKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfUFJPQ0VTU0VEX0JBWUVSCSgxIDw8IDE0KQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9CWVBBU1NfSUZQCSgxIDw8IDEwKQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9JTlZfUElYX0NMT0NLCSgxIDw8IDkpCisjZGVmaW5lIE1UOU0xMTFfT1VURk1UX1JHQgkJKDEgPDwgOCkKKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfUkdCNTY1CQkoMHgwIDw8IDYpCisjZGVmaW5lIE1UOU0xMTFfT1VURk1UX1JHQjU1NQkJKDB4MSA8PCA2KQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9SR0I0NDR4CQkoMHgyIDw8IDYpCisjZGVmaW5lIE1UOU0xMTFfT1VURk1UX1JHQng0NDQJCSgweDMgPDwgNikKKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfVFNUX1JBTVBfT0ZGCSgweDAgPDwgNCkKKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfVFNUX1JBTVBfQ09MCSgweDEgPDwgNCkKKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfVFNUX1JBTVBfUk9XCSgweDIgPDwgNCkKKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfVFNUX1JBTVBfRlJBTUUJKDB4MyA8PCA0KQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9TSElGVF8zX1VQCSgxIDw8IDMpCisjZGVmaW5lIE1UOU0xMTFfT1VURk1UX0FWR19DSFJPTUEJKDEgPDwgMikKKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfU1dBUF9ZQ2JDcl9DX1kJKDEgPDwgMSkKKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfU1dBUF9SR0JfRVZFTgkoMSA8PCAxKQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9TV0FQX1lDYkNyX0NiX0NyCSgxIDw8IDApCisvKgorICogbXQ5bTExMTogQ2FtZXJhIGNvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzc2VzICgweDIwMC4uMHgyZmYgbm90IGltcGxlbWVudGVkKQorICovCisKKyNkZWZpbmUgcmVnX3JlYWQocmVnKSBtdDltMTExX3JlZ19yZWFkKGljZCwgTVQ5TTExMV8jI3JlZykKKyNkZWZpbmUgcmVnX3dyaXRlKHJlZywgdmFsKSBtdDltMTExX3JlZ193cml0ZShpY2QsIE1UOU0xMTFfIyNyZWcsICh2YWwpKQorI2RlZmluZSByZWdfc2V0KHJlZywgdmFsKSBtdDltMTExX3JlZ19zZXQoaWNkLCBNVDlNMTExXyMjcmVnLCAodmFsKSkKKyNkZWZpbmUgcmVnX2NsZWFyKHJlZywgdmFsKSBtdDltMTExX3JlZ19jbGVhcihpY2QsIE1UOU0xMTFfIyNyZWcsICh2YWwpKQorCisjZGVmaW5lIE1UOU0xMTFfTUlOX0RBUktfUk9XUwk4CisjZGVmaW5lIE1UOU0xMTFfTUlOX0RBUktfQ09MUwkyNAorI2RlZmluZSBNVDlNMTExX01BWF9IRUlHSFQJMTAyNAorI2RlZmluZSBNVDlNMTExX01BWF9XSURUSAkxMjgwCisKKyNkZWZpbmUgQ09MX0ZNVChfbmFtZSwgX2RlcHRoLCBfZm91cmNjLCBfY29sb3JzcGFjZSkgXAorCXsgLm5hbWUgPSBfbmFtZSwgLmRlcHRoID0gX2RlcHRoLCAuZm91cmNjID0gX2ZvdXJjYywgXAorCS5jb2xvcnNwYWNlID0gX2NvbG9yc3BhY2UgfQorI2RlZmluZSBSR0JfRk1UKF9uYW1lLCBfZGVwdGgsIF9mb3VyY2MpIFwKKwlDT0xfRk1UKF9uYW1lLCBfZGVwdGgsIF9mb3VyY2MsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgbXQ5bTExMV9jb2xvdXJfZm9ybWF0c1tdID0geworCUNPTF9GTVQoIllDcllDYiA4IGJpdCIsIDgsIFY0TDJfUElYX0ZNVF9ZVVlWLCBWNEwyX0NPTE9SU1BBQ0VfSlBFRyksCisJUkdCX0ZNVCgiUkdCIDU2NSIsIDE2LCBWNEwyX1BJWF9GTVRfUkdCNTY1KSwKKwlSR0JfRk1UKCJSR0IgNTU1IiwgMTYsIFY0TDJfUElYX0ZNVF9SR0I1NTUpLAorCVJHQl9GTVQoIkJheWVyIChzUkdCKSAxMCBiaXQiLCAxMCwgVjRMMl9QSVhfRk1UX1NCR0dSMTYpLAorCVJHQl9GTVQoIkJheWVyIChzUkdCKSA4IGJpdCIsIDgsIFY0TDJfUElYX0ZNVF9TQkdHUjgpLAorfTsKKworZW51bSBtdDltMTExX2NvbnRleHQgeworCUhJR0hQT1dFUiA9IDAsCisJTE9XUE9XRVIsCit9OworCitzdHJ1Y3QgbXQ5bTExMSB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgaWNkOworCWludCBtb2RlbDsJLyogVjRMMl9JREVOVF9NVDlNMTExKiBjb2RlcyBmcm9tIHY0bDItY2hpcC1pZGVudC5oICovCisJZW51bSBtdDltMTExX2NvbnRleHQgY29udGV4dDsKKwl1bnNpZ25lZCBpbnQgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0OworCXUzMiBwaXhmbXQ7CisJdW5zaWduZWQgY2hhciBhdXRvZXhwb3N1cmU7CisJdW5zaWduZWQgY2hhciBkYXRhd2lkdGg7CisJdW5zaWduZWQgaW50IHBvd2VyZWQ6MTsKKwl1bnNpZ25lZCBpbnQgaGZsaXA6MTsKKwl1bnNpZ25lZCBpbnQgdmZsaXA6MTsKKwl1bnNpZ25lZCBpbnQgc3dhcF9yZ2JfZXZlbl9vZGQ6MTsKKwl1bnNpZ25lZCBpbnQgc3dhcF9yZ2JfcmVkX2JsdWU6MTsKKwl1bnNpZ25lZCBpbnQgc3dhcF95dXZfeV9jaHJvbWFzOjE7CisJdW5zaWduZWQgaW50IHN3YXBfeXV2X2NiX2NyOjE7Cit9OworCitzdGF0aWMgaW50IHJlZ19wYWdlX21hcF9zZXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTE2IHJlZykKK3sKKwlpbnQgcmV0OworCXUxNiBwYWdlOworCXN0YXRpYyBpbnQgbGFzdHBhZ2UgPSAtMTsJLyogUGFnZU1hcCBjYWNoZSB2YWx1ZSAqLworCisJcGFnZSA9IChyZWcgPj4gOCk7CisJaWYgKHBhZ2UgPT0gbGFzdHBhZ2UpCisJCXJldHVybiAwOworCWlmIChwYWdlID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgTVQ5TTExMV9QQUdFX01BUCwgc3dhYjE2KHBhZ2UpKTsKKwlpZiAoIXJldCkKKwkJbGFzdHBhZ2UgPSBwYWdlOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9yZWdfcmVhZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgY29uc3QgdTE2IHJlZykKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBtdDltMTExLT5jbGllbnQ7CisJaW50IHJldDsKKworCXJldCA9IHJlZ19wYWdlX21hcF9zZXQoY2xpZW50LCByZWcpOworCWlmICghcmV0KQorCQlyZXQgPSBzd2FiMTYoaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgKHJlZyAmIDB4ZmYpKSk7CisKKwlkZXZfZGJnKCZpY2QtPmRldiwgInJlYWQgIHJlZy4lMDN4IC0+ICUwNHhcbiIsIHJlZywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10OW0xMTFfcmVnX3dyaXRlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBjb25zdCB1MTYgcmVnLAorCQkJICAgICBjb25zdCB1MTYgZGF0YSkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBtdDltMTExLT5jbGllbnQ7CisJaW50IHJldDsKKworCXJldCA9IHJlZ19wYWdlX21hcF9zZXQoY2xpZW50LCByZWcpOworCWlmICghcmV0KQorCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKG10OW0xMTEtPmNsaWVudCwgKHJlZyAmIDB4ZmYpLAorCQkJCQkJc3dhYjE2KGRhdGEpKTsKKwlkZXZfZGJnKCZpY2QtPmRldiwgIndyaXRlIHJlZy4lMDN4ID0gJTA0eCAtPiAlZFxuIiwgcmVnLCBkYXRhLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9yZWdfc2V0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBjb25zdCB1MTYgcmVnLAorCQkJICAgY29uc3QgdTE2IGRhdGEpCit7CisJaW50IHJldDsKKworCXJldCA9IG10OW0xMTFfcmVnX3JlYWQoaWNkLCByZWcpOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gbXQ5bTExMV9yZWdfd3JpdGUoaWNkLCByZWcsIHJldCB8IGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9yZWdfY2xlYXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGNvbnN0IHUxNiByZWcsCisJCQkgICAgIGNvbnN0IHUxNiBkYXRhKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtdDltMTExX3JlZ19yZWFkKGljZCwgcmVnKTsKKwlyZXR1cm4gbXQ5bTExMV9yZWdfd3JpdGUoaWNkLCByZWcsIHJldCAmIH5kYXRhKTsKK30KKworc3RhdGljIGludCBtdDltMTExX3NldF9jb250ZXh0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIGVudW0gbXQ5bTExMV9jb250ZXh0IGN0eHQpCit7CisJaW50IHZhbEIgPSBNVDlNMTExX0NUWFRfQ1RSTF9SRVNUQVJUIHwgTVQ5TTExMV9DVFhUX0NUUkxfREVGRUNUQ09SX0IKKwkJfCBNVDlNMTExX0NUWFRfQ1RSTF9SRVNJWkVfQiB8IE1UOU0xMTFfQ1RYVF9DVFJMX0NUUkwyX0IKKwkJfCBNVDlNMTExX0NUWFRfQ1RSTF9HQU1NQV9CIHwgTVQ5TTExMV9DVFhUX0NUUkxfUkVBRF9NT0RFX0IKKwkJfCBNVDlNMTExX0NUWFRfQ1RSTF9WQkxBTktfU0VMX0IKKwkJfCBNVDlNMTExX0NUWFRfQ1RSTF9IQkxBTktfU0VMX0I7CisJaW50IHZhbEEgPSBNVDlNMTExX0NUWFRfQ1RSTF9SRVNUQVJUOworCisJaWYgKGN0eHQgPT0gSElHSFBPV0VSKQorCQlyZXR1cm4gcmVnX3dyaXRlKENPTlRFWFRfQ09OVFJPTCwgdmFsQik7CisJZWxzZQorCQlyZXR1cm4gcmVnX3dyaXRlKENPTlRFWFRfQ09OVFJPTCwgdmFsQSk7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXR1cF9yZWN0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJaW50IHJldCwgaXNfcmF3X2Zvcm1hdDsKKwlpbnQgd2lkdGggPSBtdDltMTExLT53aWR0aDsKKwlpbnQgaGVpZ2h0ID0gbXQ5bTExMS0+aGVpZ2h0OworCisJaWYgKChtdDltMTExLT5waXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkKKwkgICAgfHwgKG10OW0xMTEtPnBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1IxNikpCisJCWlzX3Jhd19mb3JtYXQgPSAxOworCWVsc2UKKwkJaXNfcmF3X2Zvcm1hdCA9IDA7CisKKwlyZXQgPSByZWdfd3JpdGUoQ09MVU1OX1NUQVJULCBtdDltMTExLT5sZWZ0KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKFJPV19TVEFSVCwgbXQ5bTExMS0+dG9wKTsKKworCWlmIChpc19yYXdfZm9ybWF0KSB7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKFdJTkRPV19XSURUSCwgd2lkdGgpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHJlZ193cml0ZShXSU5ET1dfSEVJR0hULCBoZWlnaHQpOworCX0gZWxzZSB7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKFJFRFVDRVJfWFpPT01fQiwgTVQ5TTExMV9NQVhfV0lEVEgpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHJlZ193cml0ZShSRURVQ0VSX1laT09NX0IsIE1UOU0xMTFfTUFYX0hFSUdIVCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKFJFRFVDRVJfWFNJWkVfQiwgd2lkdGgpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHJlZ193cml0ZShSRURVQ0VSX1lTSVpFX0IsIGhlaWdodCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKFJFRFVDRVJfWFpPT01fQSwgTVQ5TTExMV9NQVhfV0lEVEgpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHJlZ193cml0ZShSRURVQ0VSX1laT09NX0EsIE1UOU0xMTFfTUFYX0hFSUdIVCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKFJFRFVDRVJfWFNJWkVfQSwgd2lkdGgpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHJlZ193cml0ZShSRURVQ0VSX1lTSVpFX0EsIGhlaWdodCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDltMTExX3NldHVwX3BpeGZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgdTE2IG91dGZtdCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnX3dyaXRlKE9VVFBVVF9GT1JNQVRfQ1RSTDJfQSwgb3V0Zm10KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKE9VVFBVVF9GT1JNQVRfQ1RSTDJfQiwgb3V0Zm10KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10OW0xMTFfc2V0Zm10X2JheWVyOChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlyZXR1cm4gbXQ5bTExMV9zZXR1cF9waXhmbXQoaWNkLCBNVDlNMTExX09VVEZNVF9QUk9DRVNTRURfQkFZRVIpOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfc2V0Zm10X2JheWVyMTAoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGljZCwgTVQ5TTExMV9PVVRGTVRfQllQQVNTX0lGUCk7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRmbXRfcmdiNTY1KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJaW50IHZhbCA9IDA7CisKKwlpZiAobXQ5bTExMS0+c3dhcF9yZ2JfcmVkX2JsdWUpCisJCXZhbCB8PSBNVDlNMTExX09VVEZNVF9TV0FQX1lDYkNyX0NiX0NyOworCWlmIChtdDltMTExLT5zd2FwX3JnYl9ldmVuX29kZCkKKwkJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1NXQVBfUkdCX0VWRU47CisJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1JHQiB8IE1UOU0xMTFfT1VURk1UX1JHQjU2NTsKKworCXJldHVybiBtdDltMTExX3NldHVwX3BpeGZtdChpY2QsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRmbXRfcmdiNTU1KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJaW50IHZhbCA9IDA7CisKKwlpZiAobXQ5bTExMS0+c3dhcF9yZ2JfcmVkX2JsdWUpCisJCXZhbCB8PSBNVDlNMTExX09VVEZNVF9TV0FQX1lDYkNyX0NiX0NyOworCWlmIChtdDltMTExLT5zd2FwX3JnYl9ldmVuX29kZCkKKwkJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1NXQVBfUkdCX0VWRU47CisJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1JHQiB8IE1UOU0xMTFfT1VURk1UX1JHQjU1NTsKKworCXJldHVybiBtdDltMTExX3NldHVwX3BpeGZtdChpY2QsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRmbXRfeXV2KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJaW50IHZhbCA9IDA7CisKKwlpZiAobXQ5bTExMS0+c3dhcF95dXZfY2JfY3IpCisJCXZhbCB8PSBNVDlNMTExX09VVEZNVF9TV0FQX1lDYkNyX0NiX0NyOworCWlmIChtdDltMTExLT5zd2FwX3l1dl95X2Nocm9tYXMpCisJCXZhbCB8PSBNVDlNMTExX09VVEZNVF9TV0FQX1lDYkNyX0NfWTsKKworCXJldHVybiBtdDltMTExX3NldHVwX3BpeGZtdChpY2QsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9lbmFibGUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMTExLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXQ7CisKKwlpZiAoaWNsLT5wb3dlcikgeworCQlyZXQgPSBpY2wtPnBvd2VyKCZtdDltMTExLT5jbGllbnQtPmRldiwgMSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGljZC0+dmRldi0+cGFyZW50LAorCQkJCSJQbGF0Zm9ybSBmYWlsZWQgdG8gcG93ZXItb24gdGhlIGNhbWVyYS5cbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldCA9IHJlZ19zZXQoUkVTRVQsIE1UOU0xMTFfUkVTRVRfQ0hJUF9FTkFCTEUpOworCWlmICghcmV0KQorCQltdDltMTExLT5wb3dlcmVkID0gMTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10OW0xMTFfZGlzYWJsZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OW0xMTEtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldDsKKworCXJldCA9IHJlZ19jbGVhcihSRVNFVCwgTVQ5TTExMV9SRVNFVF9DSElQX0VOQUJMRSk7CisJaWYgKCFyZXQpCisJCW10OW0xMTEtPnBvd2VyZWQgPSAwOworCisJaWYgKGljbC0+cG93ZXIpCisJCWljbC0+cG93ZXIoJm10OW0xMTEtPmNsaWVudC0+ZGV2LCAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9yZXNldChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnX3NldChSRVNFVCwgTVQ5TTExMV9SRVNFVF9SRVNFVF9NT0RFKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3NldChSRVNFVCwgTVQ5TTExMV9SRVNFVF9SRVNFVF9TT0MpOworCWlmICghcmV0KQorCQlyZXQgPSByZWdfY2xlYXIoUkVTRVQsIE1UOU0xMTFfUkVTRVRfUkVTRVRfTU9ERQorCQkJCXwgTVQ5TTExMV9SRVNFVF9SRVNFVF9TT0MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zdGFydF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfc3RvcF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtdDltMTExX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlyZXR1cm4gU09DQU1fTUFTVEVSIHwgU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwKKwkJU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8CisJCVNPQ0FNX0RBVEFXSURUSF84OworfQorCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgdW5zaWduZWQgbG9uZyBmKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X3BpeGZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgdTMyIHBpeGZtdCkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCWludCByZXQ7CisKKwlzd2l0Y2ggKHBpeGZtdCkgeworCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSODoKKwkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfYmF5ZXI4KGljZCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTY6CisJCXJldCA9IG10OW0xMTFfc2V0Zm10X2JheWVyMTAoaWNkKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgorCQlyZXQgPSBtdDltMTExX3NldGZtdF9yZ2I1NTUoaWNkKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCQlyZXQgPSBtdDltMTExX3NldGZtdF9yZ2I1NjUoaWNkKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKKwkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfeXV2KGljZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmljZC0+ZGV2LCAiUGl4ZWwgZm9ybWF0IG5vdCBoYW5kbGVkIDogJXhcbiIsIHBpeGZtdCk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJaWYgKCFyZXQpCisJCW10OW0xMTEtPnBpeGZtdCA9IHBpeGZtdDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfZm10X2NhcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgICBfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlpbnQgcmV0OworCisJbXQ5bTExMS0+bGVmdCA9IHJlY3QtPmxlZnQ7CisJbXQ5bTExMS0+dG9wID0gcmVjdC0+dG9wOworCW10OW0xMTEtPndpZHRoID0gcmVjdC0+d2lkdGg7CisJbXQ5bTExMS0+aGVpZ2h0ID0gcmVjdC0+aGVpZ2h0OworCisJZGV2X2RiZygmaWNkLT5kZXYsICIlcyBmbXQ9JXggbGVmdD0lZCwgdG9wPSVkLCB3aWR0aD0lZCwgaGVpZ2h0PSVkXG4iLAorCQlfX2Z1bmNfXywgcGl4Zm10LCBtdDltMTExLT5sZWZ0LCBtdDltMTExLT50b3AsIG10OW0xMTEtPndpZHRoLAorCQltdDltMTExLT5oZWlnaHQpOworCisJcmV0ID0gbXQ5bTExMV9zZXR1cF9yZWN0KGljZCk7CisJaWYgKCFyZXQpCisJCXJldCA9IG10OW0xMTFfc2V0X3BpeGZtdChpY2QsIHBpeGZtdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDltMTExX3RyeV9mbXRfY2FwKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlpZiAoZi0+Zm10LnBpeC5oZWlnaHQgPiBNVDlNMTExX01BWF9IRUlHSFQpCisJCWYtPmZtdC5waXguaGVpZ2h0ID0gTVQ5TTExMV9NQVhfSEVJR0hUOworCWlmIChmLT5mbXQucGl4LndpZHRoID4gTVQ5TTExMV9NQVhfV0lEVEgpCisJCWYtPmZtdC5waXgud2lkdGggPSBNVDlNMTExX01BWF9XSURUSDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfZ2V0X2NoaXBfaWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICAgc3RydWN0IHY0bDJfY2hpcF9pZGVudCAqaWQpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKworCWlmIChpZC0+bWF0Y2hfdHlwZSAhPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlkLT5tYXRjaF9jaGlwICE9IG10OW0xMTEtPmNsaWVudC0+YWRkcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZC0+aWRlbnQJPSBtdDltMTExLT5tb2RlbDsKKwlpZC0+cmV2aXNpb24JPSAwOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IG10OW0xMTFfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCit7CisJaW50IHZhbDsKKworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisKKwlpZiAocmVnLT5tYXRjaF90eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiB8fCByZWctPnJlZyA+IDB4MmZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocmVnLT5tYXRjaF9jaGlwICE9IG10OW0xMTEtPmNsaWVudC0+YWRkcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2YWwgPSBtdDltMTExX3JlZ19yZWFkKGljZCwgcmVnLT5yZWcpOworCXJlZy0+dmFsID0gKHU2NCl2YWw7CisKKwlpZiAocmVnLT52YWwgPiAweGZmZmYpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCisJaWYgKHJlZy0+bWF0Y2hfdHlwZSAhPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIgfHwgcmVnLT5yZWcgPiAweDJmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocmVnLT5tYXRjaF9jaGlwICE9IG10OW0xMTEtPmNsaWVudC0+YWRkcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAobXQ5bTExMV9yZWdfd3JpdGUoaWNkLCByZWctPnJlZywgcmVnLT52YWwpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsIG10OW0xMTFfY29udHJvbHNbXSA9IHsKKwl7CisJCS5pZAkJPSBWNEwyX0NJRF9WRkxJUCwKKwkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUJCT0gIkZsaXAgVmVydGljYWx5IiwKKwkJLm1pbmltdW0JPSAwLAorCQkubWF4aW11bQk9IDEsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwKKwl9LCB7CisJCS5pZAkJPSBWNEwyX0NJRF9IRkxJUCwKKwkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUJCT0gIkZsaXAgSG9yaXpvbnRhbHkiLAorCQkubWluaW11bQk9IDAsCisJCS5tYXhpbXVtCT0gMSwKKwkJLnN0ZXAJCT0gMSwKKwkJLmRlZmF1bHRfdmFsdWUJPSAwLAorCX0sIHsJLyogZ2FpbiA9IDEvMzIqdmFsICg9PmdhaW49MSBpZiB2YWw9PTMyKSAqLworCQkuaWQJCT0gVjRMMl9DSURfR0FJTiwKKwkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUJCT0gIkdhaW4iLAorCQkubWluaW11bQk9IDAsCisJCS5tYXhpbXVtCT0gNjMgKiAyICogMiwKKwkJLnN0ZXAJCT0gMSwKKwkJLmRlZmF1bHRfdmFsdWUJPSAzMiwKKwkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKKwl9LCB7CisJCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZQkJPSAiQXV0byBFeHBvc3VyZSIsCisJCS5taW5pbXVtCT0gMCwKKwkJLm1heGltdW0JPSAxLAorCQkuc3RlcAkJPSAxLAorCQkuZGVmYXVsdF92YWx1ZQk9IDEsCisJfQorfTsKKworc3RhdGljIGludCBtdDltMTExX3ZpZGVvX3Byb2JlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIG10OW0xMTFfdmlkZW9fcmVtb3ZlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKK3N0YXRpYyBpbnQgbXQ5bTExMV9nZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICopOworc3RhdGljIGludCBtdDltMTExX3NldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKik7CitzdGF0aWMgaW50IG10OW0xMTFfcmVzdW1lKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKTsKK3N0YXRpYyBpbnQgbXQ5bTExMV9pbml0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKTsKK3N0YXRpYyBpbnQgbXQ5bTExMV9yZWxlYXNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKTsKKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX29wcyBtdDltMTExX29wcyA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5wcm9iZQkJCT0gbXQ5bTExMV92aWRlb19wcm9iZSwKKwkucmVtb3ZlCQkJPSBtdDltMTExX3ZpZGVvX3JlbW92ZSwKKwkuaW5pdAkJCT0gbXQ5bTExMV9pbml0LAorCS5yZXN1bWUJCQk9IG10OW0xMTFfcmVzdW1lLAorCS5yZWxlYXNlCQk9IG10OW0xMTFfcmVsZWFzZSwKKwkuc3RhcnRfY2FwdHVyZQkJPSBtdDltMTExX3N0YXJ0X2NhcHR1cmUsCisJLnN0b3BfY2FwdHVyZQkJPSBtdDltMTExX3N0b3BfY2FwdHVyZSwKKwkuc2V0X2ZtdF9jYXAJCT0gbXQ5bTExMV9zZXRfZm10X2NhcCwKKwkudHJ5X2ZtdF9jYXAJCT0gbXQ5bTExMV90cnlfZm10X2NhcCwKKwkucXVlcnlfYnVzX3BhcmFtCT0gbXQ5bTExMV9xdWVyeV9idXNfcGFyYW0sCisJLnNldF9idXNfcGFyYW0JCT0gbXQ5bTExMV9zZXRfYnVzX3BhcmFtLAorCS5jb250cm9scwkJPSBtdDltMTExX2NvbnRyb2xzLAorCS5udW1fY29udHJvbHMJCT0gQVJSQVlfU0laRShtdDltMTExX2NvbnRyb2xzKSwKKwkuZ2V0X2NvbnRyb2wJCT0gbXQ5bTExMV9nZXRfY29udHJvbCwKKwkuc2V0X2NvbnRyb2wJCT0gbXQ5bTExMV9zZXRfY29udHJvbCwKKwkuZ2V0X2NoaXBfaWQJCT0gbXQ5bTExMV9nZXRfY2hpcF9pZCwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLmdldF9yZWdpc3RlcgkJPSBtdDltMTExX2dldF9yZWdpc3RlciwKKwkuc2V0X3JlZ2lzdGVyCQk9IG10OW0xMTFfc2V0X3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2ZsaXAoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGludCBmbGlwLCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCWludCByZXQ7CisKKwlpZiAobXQ5bTExMS0+Y29udGV4dCA9PSBISUdIUE9XRVIpIHsKKwkJaWYgKGZsaXApCisJCQlyZXQgPSByZWdfc2V0KFJFQURfTU9ERV9CLCBtYXNrKTsKKwkJZWxzZQorCQkJcmV0ID0gcmVnX2NsZWFyKFJFQURfTU9ERV9CLCBtYXNrKTsKKwl9IGVsc2UgeworCQlpZiAoZmxpcCkKKwkJCXJldCA9IHJlZ19zZXQoUkVBRF9NT0RFX0EsIG1hc2spOworCQllbHNlCisJCQlyZXQgPSByZWdfY2xlYXIoUkVBRF9NT0RFX0EsIG1hc2spOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9nZXRfZ2xvYmFsX2dhaW4oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJdW5zaWduZWQgaW50IGRhdGEsIGdhaW47CisKKwlkYXRhID0gcmVnX3JlYWQoR0xPQkFMX0dBSU4pOworCWlmIChkYXRhID49IDApCisJCWdhaW4gPSAoKGRhdGEgJiAoMSA8PCAxMCkpICogMikKKwkJCXwgKChkYXRhICYgKDEgPDwgOSkpICogMikKKwkJCXwgKGRhdGEgJiAweDJmKTsKKwllbHNlCisJCWdhaW4gPSBkYXRhOworCisJcmV0dXJuIGdhaW47Cit9CitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2dsb2JhbF9nYWluKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBpbnQgZ2FpbikKK3sKKwl1MTYgdmFsOworCisJaWYgKGdhaW4gPiA2MyAqIDIgKiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWljZC0+Z2FpbiA9IGdhaW47CisJaWYgKChnYWluID49IDY0ICogMikgJiYgKGdhaW4gPCA2MyAqIDIgKiAyKSkKKwkJdmFsID0gKDEgPDwgMTApIHwgKDEgPDwgOSkgfCAoZ2FpbiAvIDQpOworCWVsc2UgaWYgKChnYWluID49IDY0KSAmJiAoZ2FpbiA8IDY0ICogMikpCisJCXZhbCA9ICgxIDw8IDkpIHwgKGdhaW4gLyAyKTsKKwllbHNlCisJCXZhbCA9IGdhaW47CisKKwlyZXR1cm4gcmVnX3dyaXRlKEdMT0JBTF9HQUlOLCB2YWwpOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgaW50IG9uKQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJaW50IHJldDsKKworCWlmIChvbikKKwkJcmV0ID0gcmVnX3NldChPUEVSX01PREVfQ1RSTCwgTVQ5TTExMV9PUE1PREVfQVVUT0VYUE9fRU4pOworCWVsc2UKKwkJcmV0ID0gcmVnX2NsZWFyKE9QRVJfTU9ERV9DVFJMLCBNVDlNMTExX09QTU9ERV9BVVRPRVhQT19FTik7CisKKwlpZiAoIXJldCkKKwkJbXQ5bTExMS0+YXV0b2V4cG9zdXJlID0gb247CisKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIGludCBtdDltMTExX2dldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlpbnQgZGF0YTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQlpZiAobXQ5bTExMS0+Y29udGV4dCA9PSBISUdIUE9XRVIpCisJCQlkYXRhID0gcmVnX3JlYWQoUkVBRF9NT0RFX0IpOworCQllbHNlCisJCQlkYXRhID0gcmVnX3JlYWQoUkVBRF9NT0RFX0EpOworCisJCWlmIChkYXRhIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSA9ICEhKGRhdGEgJiBNVDlNMTExX1JNQl9NSVJST1JfUk9XUyk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCWlmIChtdDltMTExLT5jb250ZXh0ID09IEhJR0hQT1dFUikKKwkJCWRhdGEgPSByZWdfcmVhZChSRUFEX01PREVfQik7CisJCWVsc2UKKwkJCWRhdGEgPSByZWdfcmVhZChSRUFEX01PREVfQSk7CisKKwkJaWYgKGRhdGEgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlID0gISEoZGF0YSAmIE1UOU0xMTFfUk1CX01JUlJPUl9DT0xTKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQlkYXRhID0gbXQ5bTExMV9nZXRfZ2xvYmFsX2dhaW4oaWNkKTsKKwkJaWYgKGRhdGEgPCAwKQorCQkJcmV0dXJuIGRhdGE7CisJCWN0cmwtPnZhbHVlID0gZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPOgorCQljdHJsLT52YWx1ZSA9IG10OW0xMTEtPmF1dG9leHBvc3VyZTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmw7CisJaW50IHJldDsKKworCXFjdHJsID0gc29jX2NhbWVyYV9maW5kX3FjdHJsKCZtdDltMTExX29wcywgY3RybC0+aWQpOworCisJaWYgKCFxY3RybCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJbXQ5bTExMS0+dmZsaXAgPSBjdHJsLT52YWx1ZTsKKwkJcmV0ID0gbXQ5bTExMV9zZXRfZmxpcChpY2QsIGN0cmwtPnZhbHVlLAorCQkJCQlNVDlNMTExX1JNQl9NSVJST1JfUk9XUyk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCW10OW0xMTEtPmhmbGlwID0gY3RybC0+dmFsdWU7CisJCXJldCA9IG10OW0xMTFfc2V0X2ZsaXAoaWNkLCBjdHJsLT52YWx1ZSwKKwkJCQkJTVQ5TTExMV9STUJfTUlSUk9SX0NPTFMpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCXJldCA9IG10OW0xMTFfc2V0X2dsb2JhbF9nYWluKGljZCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE86CisJCXJldCA9ICBtdDltMTExX3NldF9hdXRvZXhwb3N1cmUoaWNkLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDltMTExX3Jlc3RvcmVfc3RhdGUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKworCW10OW0xMTFfc2V0X2NvbnRleHQoaWNkLCBtdDltMTExLT5jb250ZXh0KTsKKwltdDltMTExX3NldF9waXhmbXQoaWNkLCBtdDltMTExLT5waXhmbXQpOworCW10OW0xMTFfc2V0dXBfcmVjdChpY2QpOworCW10OW0xMTFfc2V0X2ZsaXAoaWNkLCBtdDltMTExLT5oZmxpcCwgTVQ5TTExMV9STUJfTUlSUk9SX0NPTFMpOworCW10OW0xMTFfc2V0X2ZsaXAoaWNkLCBtdDltMTExLT52ZmxpcCwgTVQ5TTExMV9STUJfTUlSUk9SX1JPV1MpOworCW10OW0xMTFfc2V0X2dsb2JhbF9nYWluKGljZCwgaWNkLT5nYWluKTsKKwltdDltMTExX3NldF9hdXRvZXhwb3N1cmUoaWNkLCBtdDltMTExLT5hdXRvZXhwb3N1cmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfcmVzdW1lKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJaW50IHJldCA9IDA7CisKKwlpZiAobXQ5bTExMS0+cG93ZXJlZCkgeworCQlyZXQgPSBtdDltMTExX2VuYWJsZShpY2QpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IG10OW0xMTFfcmVzZXQoaWNkKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBtdDltMTExX3Jlc3RvcmVfc3RhdGUoaWNkKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDltMTExX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlpbnQgcmV0OworCisJbXQ5bTExMS0+Y29udGV4dCA9IEhJR0hQT1dFUjsKKwlyZXQgPSBtdDltMTExX2VuYWJsZShpY2QpOworCWlmICghcmV0KQorCQlyZXQgPSBtdDltMTExX3Jlc2V0KGljZCk7CisJaWYgKCFyZXQpCisJCXJldCA9IG10OW0xMTFfc2V0X2NvbnRleHQoaWNkLCBtdDltMTExLT5jb250ZXh0KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gbXQ5bTExMV9zZXRfYXV0b2V4cG9zdXJlKGljZCwgbXQ5bTExMS0+YXV0b2V4cG9zdXJlKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKCZpY2QtPmRldiwgIm10OW0xMTEgaW5pdCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9yZWxlYXNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtdDltMTExX2Rpc2FibGUoaWNkKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycigmaWNkLT5kZXYsICJtdDltMTExIHJlbGVhc2UgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJbnRlcmZhY2UgYWN0aXZlLCBjYW4gdXNlIGkyYy4gSWYgaXQgZmFpbHMsIGl0IGNhbiBpbmRlZWQgbWVhbiwgdGhhdAorICogdGhpcyB3YXNuJ3Qgb3VyIGNhcHR1cmUgaW50ZXJmYWNlLCBzbywgd2Ugd2FpdCBmb3IgdGhlIHJpZ2h0IG9uZQorICovCitzdGF0aWMgaW50IG10OW0xMTFfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzMzIgZGF0YTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBXZSBtdXN0IGhhdmUgYSBwYXJlbnQgYnkgbm93LiBBbmQgaXQgY2Fubm90IGJlIGEgd3Jvbmcgb25lLgorCSAqIFNvIHRoaXMgZW50aXJlIHRlc3QgaXMgY29tcGxldGVseSByZWR1bmRhbnQuCisJICovCisJaWYgKCFpY2QtPmRldi5wYXJlbnQgfHwKKwkgICAgdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCktPm5yICE9IGljZC0+aWZhY2UpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gbXQ5bTExMV9lbmFibGUoaWNkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVpMmM7CisJcmV0ID0gbXQ5bTExMV9yZXNldChpY2QpOworCWlmIChyZXQpCisJCWdvdG8gZWkyYzsKKworCWRhdGEgPSByZWdfcmVhZChDSElQX1ZFUlNJT04pOworCisJc3dpdGNoIChkYXRhKSB7CisJY2FzZSAweDE0M2E6CisJCW10OW0xMTEtPm1vZGVsID0gVjRMMl9JREVOVF9NVDlNMTExOworCQlpY2QtPmZvcm1hdHMgPSBtdDltMTExX2NvbG91cl9mb3JtYXRzOworCQlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShtdDltMTExX2NvbG91cl9mb3JtYXRzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZGV2X2VycigmaWNkLT5kZXYsCisJCQkiTm8gTVQ5TTExMSBjaGlwIGRldGVjdGVkLCByZWdpc3RlciByZWFkICV4XG4iLCBkYXRhKTsKKwkJZ290byBlaTJjOworCX0KKworCWRldl9pbmZvKCZpY2QtPmRldiwgIkRldGVjdGVkIGEgTVQ5TTExMSBjaGlwIElEIDB4MTQzYVxuIik7CisKKwlyZXQgPSBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KGljZCk7CisJaWYgKHJldCkKKwkJZ290byBlaXNpczsKKworCW10OW0xMTEtPmF1dG9leHBvc3VyZSA9IDE7CisKKwltdDltMTExLT5zd2FwX3JnYl9ldmVuX29kZCA9IDE7CisJbXQ5bTExMS0+c3dhcF9yZ2JfcmVkX2JsdWUgPSAxOworCisJcmV0dXJuIDA7CitlaXNpczoKK2VpMmM6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXQ5bTExMV92aWRlb19yZW1vdmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKworCWRldl9kYmcoJmljZC0+ZGV2LCAiVmlkZW8gJXggcmVtb3ZlZDogJXAsICVwXG4iLCBtdDltMTExLT5jbGllbnQtPmFkZHIsCisJCW10OW0xMTEtPmljZC5kZXYucGFyZW50LCBtdDltMTExLT5pY2QudmRldik7CisJc29jX2NhbWVyYV92aWRlb19zdG9wKCZtdDltMTExLT5pY2QpOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqZGlkKQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKCFpY2wpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJNVDlNMTExIGRyaXZlciBuZWVkcyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEpKSB7CisJCWRldl93YXJuKCZhZGFwdGVyLT5kZXYsCisJCQkgIkkyQy1BZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCBJMkNfRlVOQ19TTUJVU19XT1JEXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJbXQ5bTExMSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtdDltMTExKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtdDltMTExKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW10OW0xMTEtPmNsaWVudCA9IGNsaWVudDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBtdDltMTExKTsKKworCS8qIFNlY29uZCBzdGFnZSBwcm9iZSAtIHdoZW4gYSBjYXB0dXJlIGFkYXB0ZXIgaXMgdGhlcmUgKi8KKwlpY2QgCQk9ICZtdDltMTExLT5pY2Q7CisJaWNkLT5vcHMJPSAmbXQ5bTExMV9vcHM7CisJaWNkLT5jb250cm9sCT0gJmNsaWVudC0+ZGV2OworCWljZC0+eF9taW4JPSBNVDlNMTExX01JTl9EQVJLX0NPTFM7CisJaWNkLT55X21pbgk9IE1UOU0xMTFfTUlOX0RBUktfUk9XUzsKKwlpY2QtPnhfY3VycmVudAk9IGljZC0+eF9taW47CisJaWNkLT55X2N1cnJlbnQJPSBpY2QtPnlfbWluOworCWljZC0+d2lkdGhfbWluCT0gTVQ5TTExMV9NSU5fREFSS19ST1dTOworCWljZC0+d2lkdGhfbWF4CT0gTVQ5TTExMV9NQVhfV0lEVEg7CisJaWNkLT5oZWlnaHRfbWluCT0gTVQ5TTExMV9NSU5fREFSS19DT0xTOworCWljZC0+aGVpZ2h0X21heAk9IE1UOU0xMTFfTUFYX0hFSUdIVDsKKwlpY2QtPnlfc2tpcF90b3AJPSAwOworCWljZC0+aWZhY2UJPSBpY2wtPmJ1c19pZDsKKworCXJldCA9IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKGljZCk7CisJaWYgKHJldCkKKwkJZ290byBlaXNkcjsKKwlyZXR1cm4gMDsKKworZWlzZHI6CisJa2ZyZWUobXQ5bTExMSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDltMTExX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcigmbXQ5bTExMS0+aWNkKTsKKwlrZnJlZShtdDltMTExKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbXQ5bTExMV9pZFtdID0geworCXsgIm10OW0xMTEiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG10OW0xMTFfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbXQ5bTExMV9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm10OW0xMTEiLAorCX0sCisJLnByb2JlCQk9IG10OW0xMTFfcHJvYmUsCisJLnJlbW92ZQkJPSBtdDltMTExX3JlbW92ZSwKKwkuaWRfdGFibGUJPSBtdDltMTExX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXQ5bTExMV9tb2RfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmbXQ5bTExMV9pMmNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG10OW0xMTFfbW9kX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmbXQ5bTExMV9pMmNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXQ5bTExMV9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChtdDltMTExX21vZF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNaWNyb24gTVQ5TTExMSBDYW1lcmEgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJSb2JlcnQgSmFyem1payIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYwppbmRleCA1NjgwOGNkLi4yNTg0MjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYwpAQCAtMTM0LDM0ICsxMzQsNTYgQEAKIHN0YXRpYyBpbnQgbXQ5djAyMl9pbml0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewogCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXYwMjIsIGljZCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5djAyMi0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OwogCisJaWYgKGljbC0+cG93ZXIpIHsKKwkJcmV0ID0gaWNsLT5wb3dlcigmbXQ5djAyMi0+Y2xpZW50LT5kZXYsIDEpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihpY2QtPnZkZXYtPnBhcmVudCwKKwkJCQkiUGxhdGZvcm0gZmFpbGVkIHRvIHBvd2VyLW9uIHRoZSBjYW1lcmEuXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwkvKgorCSAqIFRoZSBjYW1lcmEgY291bGQgaGF2ZSBiZWVuIGFscmVhZHkgb24sIHdlIGhhcmQtcmVzZXQgaXQgYWRkaXRpb25hbGx5LAorCSAqIGlmIGF2YWlsYWJsZS4gU29mdCByZXNldCBpcyBkb25lIGluIHZpZGVvX3Byb2JlKCkuCisJICovCisJaWYgKGljbC0+cmVzZXQpCisJCWljbC0+cmVzZXQoJm10OXYwMjItPmNsaWVudC0+ZGV2KTsKKwogCS8qIEFsbW9zdCB0aGUgZGVmYXVsdCBtb2RlOiBtYXN0ZXIsIHBhcmFsbGVsLCBzaW11bHRhbmVvdXMsIGFuZCBhbgogCSAqIHVuZG9jdW1lbnRlZCBiaXQgMHgyMDAsIHdoaWNoIGlzIHByZXNlbnQgaW4gdGFibGUgNywgYnV0IG5vdCBpbiA4LAogCSAqIHBsdXMgc25hcHNob3QgbW9kZSB0byBkaXNhYmxlIHNjYW4gZm9yIG5vdyAqLwogCW10OXYwMjItPmNoaXBfY29udHJvbCB8PSAweDEwOwogCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVYwMjJfQ0hJUF9DT05UUk9MLCBtdDl2MDIyLT5jaGlwX2NvbnRyb2wpOwotCWlmIChyZXQgPj0gMCkKLQkJcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9SRUFEX01PREUsIDB4MzAwKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9SRUFEX01PREUsIDB4MzAwKTsKIAogCS8qIEFsbCBkZWZhdWx0cyAqLwotCWlmIChyZXQgPj0gMCkKKwlpZiAoIXJldCkKIAkJLyogQUVDLCBBR0Mgb24gKi8KIAkJcmV0ID0gcmVnX3NldChpY2QsIE1UOVYwMjJfQUVDX0FHQ19FTkFCTEUsIDB4Myk7Ci0JaWYgKHJldCA+PSAwKQorCWlmICghcmV0KQogCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlWMDIyX01BWF9UT1RBTF9TSFVUVEVSX1dJRFRILCA0ODApOwotCWlmIChyZXQgPj0gMCkKKwlpZiAoIXJldCkKIAkJLyogZGVmYXVsdCAtIGF1dG8gKi8KIAkJcmV0ID0gcmVnX2NsZWFyKGljZCwgTVQ5VjAyMl9CTEFDS19MRVZFTF9DQUxJQl9DVFJMLCAxKTsKLQlpZiAocmV0ID49IDApCisJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVYwMjJfRElHSVRBTF9URVNUX1BBVFRFUk4sIDApOwogCi0JcmV0dXJuIHJldCA+PSAwID8gMCA6IC1FSU87CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBtdDl2MDIyX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0JLyogTm90aGluZz8gKi8KKwlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl2MDIyLCBpY2QpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OXYwMjItPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoaWNsLT5wb3dlcikKKwkJaWNsLT5wb3dlcigmbXQ5djAyMi0+Y2xpZW50LT5kZXYsIDApOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1MiwyMSArMzc0LDIxIEBACiAJCQkJCXJlY3QtPmhlaWdodCArIGljZC0+eV9za2lwX3RvcCArIDQzKTsKIAl9CiAJLyogU2V0dXAgZnJhbWUgZm9ybWF0OiBkZWZhdWx0cyBhcGFydCBmcm9tIHdpZHRoIGFuZCBoZWlnaHQgKi8KLQlpZiAocmV0ID49IDApCisJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVYwMjJfQ09MVU1OX1NUQVJULCByZWN0LT5sZWZ0KTsKLQlpZiAocmV0ID49IDApCisJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVYwMjJfUk9XX1NUQVJULCByZWN0LT50b3ApOwotCWlmIChyZXQgPj0gMCkKKwlpZiAoIXJldCkKIAkJLyogRGVmYXVsdCA5NCwgUGh5dGVjIGRyaXZlciBzYXlzOgogCQkgKiAid2lkdGggKyBob3Jpem9udGFsIGJsYW5rID49IDY2MCIgKi8KIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9IT1JJWk9OVEFMX0JMQU5LSU5HLAogCQkJCXJlY3QtPndpZHRoID4gNjYwIC0gNDMgPyA0MyA6CiAJCQkJNjYwIC0gcmVjdC0+d2lkdGgpOwotCWlmIChyZXQgPj0gMCkKKwlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9WRVJUSUNBTF9CTEFOS0lORywgNDUpOwotCWlmIChyZXQgPj0gMCkKKwlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9XSU5ET1dfV0lEVEgsIHJlY3QtPndpZHRoKTsKLQlpZiAocmV0ID49IDApCisJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVYwMjJfV0lORE9XX0hFSUdIVCwKIAkJCQlyZWN0LT5oZWlnaHQgKyBpY2QtPnlfc2tpcF90b3ApOwogCkBAIC03MTcsNyArNzM5LDcgQEAKIAkJCWljZC0+bnVtX2Zvcm1hdHMgPSAxOwogCX0KIAotCWlmIChyZXQgPj0gMCkKKwlpZiAoIXJldCkKIAkJcmV0ID0gc29jX2NhbWVyYV92aWRlb19zdGFydChpY2QpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVpc2lzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKaW5kZXggOGVmNTc4Yy4uN2YxMzAyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9zYWE3MTE1Lmg+CiAKICNpbmNsdWRlICJteGIuaCIKICNpbmNsdWRlICJ0ZWE2NDE1Yy5oIgpAQCAtMTIyLDYgKzEyMyw4IEBACiAJeyBWSURJT0NfU19GUkVRVUVOQ1ksIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAogCXsgVklESU9DX0dfQVVESU8sIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAogCXsgVklESU9DX1NfQVVESU8sIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAorCXsgVklESU9DX0RCR19HX1JFR0lTVEVSLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKKwl7IFZJRElPQ19EQkdfU19SRUdJU1RFUiwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCiAJeyBNWEJfU19BVURJT19DRCwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCS8qIGN1c3RvbSBjb250cm9sICovCiAJeyBNWEJfU19BVURJT19MSU5FLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwJLyogY3VzdG9tIGNvbnRyb2wgKi8KIAl7IDAsCQkJMCB9CkBAIC0xMzQsMTIgKzEzNywxMiBAQAogCiAJc3RydWN0IGkyY19hZGFwdGVyCWkyY19hZGFwdGVyOwogCi0Jc3RydWN0IGkyY19jbGllbnQqCXNhYTcxMTFhOwotCXN0cnVjdCBpMmNfY2xpZW50Kgl0ZGE5ODQwOwotCXN0cnVjdCBpMmNfY2xpZW50Kgl0ZWE2NDE1YzsKLQlzdHJ1Y3QgaTJjX2NsaWVudCoJdHVuZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQqCXRlYTY0MjBfMTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCoJdGVhNjQyMF8yOworCXN0cnVjdCBpMmNfY2xpZW50CSpzYWE3MTExYTsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqdGRhOTg0MDsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqdGVhNjQxNWM7CisJc3RydWN0IGkyY19jbGllbnQJKnR1bmVyOworCXN0cnVjdCBpMmNfY2xpZW50CSp0ZWE2NDIwXzE7CisJc3RydWN0IGkyY19jbGllbnQJKnRlYTY0MjBfMjsKIAogCWludAljdXJfbW9kZTsJLyogY3VycmVudCBhdWRpbyBtb2RlIChtb25vLCBzdGVyZW8sIC4uLikgKi8KIAlpbnQJY3VyX2lucHV0OwkvKiBjdXJyZW50IGlucHV0ICovCkBAIC0xNTEsMjMgKzE1NCwyMyBAQAogCiBzdGF0aWMgaW50IG14Yl9jaGVja19jbGllbnRzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbXhiKiBteGIgPSBkYXRhOworCXN0cnVjdCBteGIgKm14YiA9IGRhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGkyY192ZXJpZnlfY2xpZW50KGRldik7CiAKLQlpZiggIWNsaWVudCApCisJaWYgKCFjbGllbnQpCiAJCXJldHVybiAwOwogCi0JaWYoIEkyQ19BRERSX1RFQTY0MjBfMSA9PSBjbGllbnQtPmFkZHIgKQorCWlmIChJMkNfQUREUl9URUE2NDIwXzEgPT0gY2xpZW50LT5hZGRyKQogCQlteGItPnRlYTY0MjBfMSA9IGNsaWVudDsKLQlpZiggSTJDX0FERFJfVEVBNjQyMF8yID09IGNsaWVudC0+YWRkciApCisJaWYgKEkyQ19BRERSX1RFQTY0MjBfMiA9PSBjbGllbnQtPmFkZHIpCiAJCW14Yi0+dGVhNjQyMF8yID0gY2xpZW50OwotCWlmKCBJMkNfVEVBNjQxNUNfMiA9PSBjbGllbnQtPmFkZHIgKQorCWlmIChJMkNfVEVBNjQxNUNfMiA9PSBjbGllbnQtPmFkZHIpCiAJCW14Yi0+dGVhNjQxNWMgPSBjbGllbnQ7Ci0JaWYoIEkyQ19BRERSX1REQTk4NDAgPT0gY2xpZW50LT5hZGRyICkKKwlpZiAoSTJDX0FERFJfVERBOTg0MCA9PSBjbGllbnQtPmFkZHIpCiAJCW14Yi0+dGRhOTg0MCA9IGNsaWVudDsKLQlpZiggSTJDX1NBQTcxMTEgPT0gY2xpZW50LT5hZGRyICkKKwlpZiAoSTJDX1NBQTcxMTEgPT0gY2xpZW50LT5hZGRyKQogCQlteGItPnNhYTcxMTFhID0gY2xpZW50OwotCWlmKCAweDYwID09IGNsaWVudC0+YWRkciApCisJaWYgKDB4NjAgPT0gY2xpZW50LT5hZGRyKQogCQlteGItPnR1bmVyID0gY2xpZW50OwogCiAJcmV0dXJuIDA7CkBAIC0xNzgsMjMgKzE4MSwyOCBAQAogCXN0cnVjdCBteGIqIG14YiA9IE5VTEw7CiAJaW50IHJlc3VsdDsKIAotCWlmICgocmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInNhYTcxMTEiKSkgPCAwKSB7CisJcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInNhYTcxMTUiKTsKKwlpZiAocmVzdWx0IDwgMCkgewogCQlwcmludGsoIm14Yjogc2FhNzExMSBpMmMgbW9kdWxlIG5vdCBhdmFpbGFibGUuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWlmICgocmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInRlYTY0MjAiKSkgPCAwKSB7CisJcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInRlYTY0MjAiKTsKKwlpZiAocmVzdWx0IDwgMCkgewogCQlwcmludGsoIm14YjogdGVhNjQyMCBpMmMgbW9kdWxlIG5vdCBhdmFpbGFibGUuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWlmICgocmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInRlYTY0MTVjIikpIDwgMCkgeworCXJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKCJ0ZWE2NDE1YyIpOworCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50aygibXhiOiB0ZWE2NDE1YyBpMmMgbW9kdWxlIG5vdCBhdmFpbGFibGUuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWlmICgocmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInRkYTk4NDAiKSkgPCAwKSB7CisJcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInRkYTk4NDAiKTsKKwlpZiAocmVzdWx0IDwgMCkgewogCQlwcmludGsoIm14YjogdGRhOTg0MCBpMmMgbW9kdWxlIG5vdCBhdmFpbGFibGUuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWlmICgocmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInR1bmVyIikpIDwgMCkgeworCXJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKCJ0dW5lciIpOworCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50aygibXhiOiB0dW5lciBpMmMgbW9kdWxlIG5vdCBhdmFpbGFibGUuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMjA3LDkgKzIxNSwxMCBAQAogCiAJbXhiLT5pMmNfYWRhcHRlciA9IChzdHJ1Y3QgaTJjX2FkYXB0ZXIpIHsKIAkJLmNsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKLQkJLm5hbWUgPSAibXhiIiwKIAl9OwogCisJc25wcmludGYobXhiLT5pMmNfYWRhcHRlci5uYW1lLCBzaXplb2YobXhiLT5pMmNfYWRhcHRlci5uYW1lKSwgIm14YiVkIiwgbXhiX251bSk7CisKIAlzYWE3MTQ2X2kyY19hZGFwdGVyX3ByZXBhcmUoZGV2LCAmbXhiLT5pMmNfYWRhcHRlciwgU0FBNzE0Nl9JMkNfQlVTX0JJVF9SQVRFXzQ4MCk7CiAJaWYoaTJjX2FkZF9hZGFwdGVyKCZteGItPmkyY19hZGFwdGVyKSA8IDApIHsKIAkJREVCX1MoKCJjYW5ub3QgcmVnaXN0ZXIgaTJjLWRldmljZS4gc2tpcHBpbmcuXG4iKSk7CkBAIC0yOTAsMzggKzI5OSw3IEBACiAJeyA5LCB7IDB4MWQsIDB4ZWQsIDB4ZDAsIDB4NjgsIDB4MjksIDB4YjQsIDB4ZTEsIDB4MDAsIDB4YjggfSB9LAogCXsgOSwgeyAweDNkLCAweGVkLCAweGQwLCAweDY4LCAweDI5LCAweGI0LCAweGUxLCAweDAwLCAweGI4IH0gfSwKIAl7IDMsIHsgMHg4MCwgMHhiMywgMHgwYSB9IH0sCi0Jey0xLCB7IDB9IH0KLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG14Yl9zYWE3MTExX2luaXRbXSA9IHsKLQkweDAwLCAweDAwLAkgIC8qIDAwIC0gSUQgYnl0ZSAqLwotCTB4MDEsIDB4MDAsCSAgLyogMDEgLSByZXNlcnZlZCAqLwotCi0JLypmcm9udCBlbmQgKi8KLQkweDAyLCAweGQ4LAkgIC8qIDAyIC0gRlVTRT14LCBHVURMPXgsIE1PREU9eCAqLwotCTB4MDMsIDB4MjMsCSAgLyogMDMgLSBITE5SUz0wLCBWQlNMPTEsIFdQT0ZGPTAsIEhPTERHPTAsIEdBRklYPTAsIEdBSTE9MjU2LCBHQUkyPTI1NiAqLwotCTB4MDQsIDB4MDAsCSAgLyogMDQgLSBHQUkxPTI1NiAqLwotCTB4MDUsIDB4MDAsCSAgLyogMDUgLSBHQUkyPTI1NiAqLwotCi0JLyogZGVjb2RlciAqLwotCTB4MDYsIDB4ZjAsCSAgLyogMDYgLSBIU0IgYXQgIHh4KDUwSHopIC8gIHh4KDYwSHopIHBpeGVscyBhZnRlciBlbmQgb2YgbGFzdCBsaW5lICovCi0JMHgwNywgMHgzMCwJICAvKiAwNyAtIEhTUyBhdCAgeHgoNTBIeikgLyAgeHgoNjBIeikgcGl4ZWxzIGFmdGVyIGVuZCBvZiBsYXN0IGxpbmUgKi8KLQkweDA4LCAweGE4LAkgIC8qIDA4IC0gQVVGRD14LCBGU0VMPXgsIEVYRklMPXgsIFZUUkM9eCwgSFBMTD14LCBWTk9JPXggKi8KLQkweDA5LCAweDAyLAkgIC8qIDA5IC0gQllQUz14LCBQUkVGPXgsIEJQU1M9eCwgVkJMQj14LCBVUFRDVj14LCBBUEVSPXggKi8KLQkweDBhLCAweDgwLAkgIC8qIDBhIC0gQlJJRz0xMjggKi8KLQkweDBiLCAweDQ3LAkgIC8qIDBiIC0gQ09OVD0xLjEwOSAqLwotCTB4MGMsIDB4NDAsCSAgLyogMGMgLSBTQVROPTEuMCAqLwotCTB4MGQsIDB4MDAsCSAgLyogMGQgLSBIVUU9MCAqLwotCTB4MGUsIDB4MDEsCSAgLyogMGUgLSBDRFRPPTAsIENTVEQ9MCwgRENDRj0wLCBGQ1RDPTAsIENIQlc9MSAqLwotCTB4MGYsIDB4MDAsCSAgLyogMGYgLSByZXNlcnZlZCAqLwotCTB4MTAsIDB4ZDAsCSAgLyogMTAgLSBPRlRTPXgsIEhERUw9eCwgVlJMTj14LCBZREVMPXggKi8KLQkweDExLCAweDhjLAkgIC8qIDExIC0gR1BTVz14LCBDTTk5PXgsIEZFQ089eCwgQ09NUE89eCwgT0VZQz0xLCBPRUhWPTEsIFZJUEI9MCwgQ09MTz0wICovCi0JMHgxMiwgMHg4MCwJICAvKiAxMiAtIHh4IG91dHB1dCBjb250cm9sIDIgKi8KLQkweDEzLCAweDMwLAkgIC8qIDEzIC0geHggb3V0cHV0IGNvbnRyb2wgMyAqLwotCTB4MTQsIDB4MDAsCSAgLyogMTQgLSByZXNlcnZlZCAqLwotCTB4MTUsIDB4MTUsCSAgLyogMTUgLSBWQkkgKi8KLQkweDE2LCAweDA0LAkgIC8qIDE2IC0gVkJJICovCi0JMHgxNywgMHgwMCwJICAvKiAxNyAtIFZCSSAqLworCXstMSwgeyAwIH0gfQogfTsKIAogLyogYnJpbmcgaGFyZHdhcmUgdG8gYSBzYW5lIHN0YXRlLiB0aGlzIGhhcyB0byBiZSBkb25lLCBqdXN0IGluIGNhc2Ugc29tZW9uZQpAQCAtMzMxLDM3ICszMDksMjggQEAKIHN0YXRpYyBpbnQgbXhiX2luaXRfZG9uZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldikKIHsKIAlzdHJ1Y3QgbXhiKiBteGIgPSAoc3RydWN0IG14YiopZGV2LT5leHRfcHJpdjsKLQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IGluaXQ7CiAJc3RydWN0IGkyY19tc2cgbXNnOwogCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CiAJdjRsMl9zdGRfaWQgc3RkID0gVjRMMl9TVERfUEFMX0JHOworCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CiAKIAlpbnQgaSA9IDAsIGVyciA9IDA7Ci0Jc3RydWN0CXRlYTY0MTVjX211bHRpcGxleCB2bTsKKwlzdHJ1Y3QgdGVhNjQxNWNfbXVsdGlwbGV4IHZtOwogCiAJLyogc2VsZWN0IHZpZGVvIG1vZGUgaW4gc2FhNzExMWEgKi8KLQlpID0gVklERU9fTU9ERV9QQUw7Ci0JLyogZml4bWU6IGN1cnJlbnRseSBwb2ludGxlc3M6IGdldHMgb3ZlcndyaXR0ZW4gYnkgY29uZmlndXJhdGlvbiBiZWxvdyAqLwotCW14Yi0+c2FhNzExMWEtPmRyaXZlci0+Y29tbWFuZChteGItPnNhYTcxMTFhLERFQ09ERVJfU0VUX05PUk0sICZpKTsKLQotCS8qIHdyaXRlIGNvbmZpZ3VyYXRpb24gdG8gc2FhNzExMWEgKi8KLQlpbml0LmRhdGEgPSBteGJfc2FhNzExMV9pbml0OwotCWluaXQubGVuID0gc2l6ZW9mKG14Yl9zYWE3MTExX2luaXQpOwotCW14Yi0+c2FhNzExMWEtPmRyaXZlci0+Y29tbWFuZChteGItPnNhYTcxMTFhLERFQ09ERVJfSU5JVCwgJmluaXQpOworCW14Yi0+c2FhNzExMWEtPmRyaXZlci0+Y29tbWFuZChteGItPnNhYTcxMTFhLCBWSURJT0NfU19TVEQsICZzdGQpOwogCiAJLyogc2VsZWN0IHR1bmVyLW91dHB1dCBvbiBzYWE3MTExYSAqLwogCWkgPSAwOwotCW14Yi0+c2FhNzExMWEtPmRyaXZlci0+Y29tbWFuZChteGItPnNhYTcxMTFhLERFQ09ERVJfU0VUX0lOUFVULCAmaSk7Ci0KLQkvKiBlbmFibGUgdmJpIGJ5cGFzcyAqLwotCWkgPSAxOwotCW14Yi0+c2FhNzExMWEtPmRyaXZlci0+Y29tbWFuZChteGItPnNhYTcxMTFhLERFQ09ERVJfU0VUX1ZCSV9CWVBBU1MsICZpKTsKKwlyb3V0ZS5pbnB1dCA9IFNBQTcxMTVfQ09NUE9TSVRFMDsKKwlyb3V0ZS5vdXRwdXQgPSBTQUE3MTExX0ZNVF9DQ0lSIHwgU0FBNzExMV9WQklfQllQQVNTOworCW14Yi0+c2FhNzExMWEtPmRyaXZlci0+Y29tbWFuZChteGItPnNhYTcxMTFhLCBWSURJT0NfSU5UX1NfVklERU9fUk9VVElORywgJnJvdXRlKTsKIAogCS8qIHNlbGVjdCBhIHR1bmVyIHR5cGUgKi8KIAl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFY7CiAJdHVuX3NldHVwLmFkZHIgPSBBRERSX1VOU0VUOwogCXR1bl9zZXR1cC50eXBlID0gVFVORVJfUEhJTElQU19QQUw7Ci0JbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CisJbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOwogCS8qIHR1bmUgaW4gc29tZSBmcmVxdWVuY3kgb24gdHVuZXIgKi8KIAlteGItPmN1cl9mcmVxLnR1bmVyID0gMDsKIAlteGItPmN1cl9mcmVxLnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKQEAgLTM3MywyNyArMzQyLDI2IEBACiAJbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsIFZJRElPQ19TX1NURCwgJnN0ZCk7CiAKIAkvKiBtdXRlIGF1ZGlvIG9uIHRlYTY0MjBzICovCi0JbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSxURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfbGluZVs2XVswXSk7Ci0JbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMixURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfbGluZVs2XVsxXSk7Ci0JbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSxURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfY2RbNl1bMF0pOwotCW14Yi0+dGVhNjQyMF8yLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzIsVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2NkWzZdWzFdKTsKKwlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLCBURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfbGluZVs2XVswXSk7CisJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2xpbmVbNl1bMV0pOworCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsIFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9jZFs2XVswXSk7CisJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2NkWzZdWzFdKTsKIAogCS8qIHN3aXRjaCB0byB0dW5lci1jaGFubmVsIG9uIHRlYTY0MTVjKi8KIAl2bS5vdXQgPSAxNzsKIAl2bS5pbiAgPSAzOwotCW14Yi0+dGVhNjQxNWMtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MTVjLFRFQTY0MTVDX1NXSVRDSCwgJnZtKTsKKwlteGItPnRlYTY0MTVjLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDE1YywgVEVBNjQxNUNfU1dJVENILCAmdm0pOwogCiAJLyogc2VsZWN0IHR1bmVyLW91dHB1dCBvbiBtdWx0aWNhYmxlIG9uIHRlYTY0MTVjKi8KIAl2bS5pbiAgPSAzOwogCXZtLm91dCA9IDEzOwotCW14Yi0+dGVhNjQxNWMtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MTVjLFRFQTY0MTVDX1NXSVRDSCwgJnZtKTsKKwlteGItPnRlYTY0MTVjLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDE1YywgVEVBNjQxNUNfU1dJVENILCAmdm0pOwogCiAJLyogdGhlIHJlc3QgZm9yIG14YiAqLwogCW14Yi0+Y3VyX2lucHV0ID0gMDsKIAlteGItPmN1cl9tdXRlID0gMTsKIAogCW14Yi0+Y3VyX21vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCW14Yi0+dGRhOTg0MC0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGRhOTg0MCwgVERBOTg0MF9TV0lUQ0gsICZteGItPmN1cl9tb2RlKTsKIAogCS8qIGNoZWNrIGlmIHRoZSBzYWE3NzQwIChha2EgJ3NvdW5kIGFyZW5hIG1vZHVsZScpIGlzIHByZXNlbnQKIAkgICBvbiB0aGUgbXhiLiBpZiBzbywgd2UgbXVzdCBpbml0aWFsaXplIGl0LiBkdWUgdG8gbGFjayBvZgpAQCAtNDA0LDIxICszNzIsMjIgQEAKIAltc2cubGVuID0gbXhiX3NhYTc3NDBfaW5pdFswXS5sZW5ndGg7CiAJbXNnLmJ1ZiA9ICZteGJfc2FhNzc0MF9pbml0WzBdLmRhdGFbMF07CiAKLQlpZiggMSA9PSAoZXJyID0gaTJjX3RyYW5zZmVyKCZteGItPmkyY19hZGFwdGVyLCAmbXNnLCAxKSkpIHsKKwllcnIgPSBpMmNfdHJhbnNmZXIoJm14Yi0+aTJjX2FkYXB0ZXIsICZtc2csIDEpOworCWlmIChlcnIgPT0gMSkgewogCQkvKiB0aGUgc291bmQgYXJlbmEgbW9kdWxlIGlzIGEgcG9zLCB0aGF0J3MgcHJvYmFibHkgdGhlIHJlYXNvbgogCQkgICBwaGlsaXBzIHJlZnVzZXMgdG8gaGFuZCBvdXQgYSBkYXRhc2hlZXQgZm9yIHRoZSBzYWE3NzQwLi4uCiAJCSAgIGl0IHNlZW1zIHRvIHNjcmV3IHVwIHRoZSBpMmMgYnVzLCBzbyB3ZSBkaXNhYmxlIGZhc3QgaXJxCiAJCSAgIGJhc2VkIGkyYyB0cmFuc2FjdGlvbnMgaGVyZSBhbmQgcmVseSBvbiB0aGUgc2xvdyBhbmQgc2FmZQogCQkgICBwb2xsaW5nIG1ldGhvZCAuLi4gKi8KIAkJZXh0ZW5zaW9uLmZsYWdzICY9IH5TQUE3MTQ2X1VTRV9JMkNfSVJROwotCQlmb3IoaSA9IDE7O2krKykgewotCQkJaWYoIC0xID09IG14Yl9zYWE3NzQwX2luaXRbaV0ubGVuZ3RoICkgeworCQlmb3IgKGkgPSAxOyA7IGkrKykgeworCQkJaWYgKC0xID09IG14Yl9zYWE3NzQwX2luaXRbaV0ubGVuZ3RoKQogCQkJCWJyZWFrOwotCQkJfQogCiAJCQltc2cubGVuID0gbXhiX3NhYTc3NDBfaW5pdFtpXS5sZW5ndGg7CiAJCQltc2cuYnVmID0gJm14Yl9zYWE3NzQwX2luaXRbaV0uZGF0YVswXTsKLQkJCWlmKCAxICE9IChlcnIgPSBpMmNfdHJhbnNmZXIoJm14Yi0+aTJjX2FkYXB0ZXIsICZtc2csIDEpKSkgeworCQkJZXJyID0gaTJjX3RyYW5zZmVyKCZteGItPmkyY19hZGFwdGVyLCAmbXNnLCAxKTsKKwkJCWlmIChlcnIgIT0gMSkgewogCQkJCURFQl9EKCgiZmFpbGVkIHRvIGluaXRpYWxpemUgJ3NvdW5kIGFyZW5hIG1vZHVsZScuXG4iKSk7CiAJCQkJZ290byBlcnI7CiAJCQl9CkBAIC00MzIsNyArNDAxLDggQEAKIAkvKiBleHQtPnNhYSBoYXMgYmVlbiBmaWxsZWQgYnkgdGhlIGNvcmUgZHJpdmVyICovCiAKIAkvKiBzb21lIHN0dWZmIGlzIGRvbmUgdmlhIHZhcmlhYmxlcyAqLwotCXNhYTcxNDZfc2V0X2hwc19zb3VyY2VfYW5kX3N5bmMoZGV2LCBpbnB1dF9wb3J0X3NlbGVjdGlvbltteGItPmN1cl9pbnB1dF0uaHBzX3NvdXJjZSwgaW5wdXRfcG9ydF9zZWxlY3Rpb25bbXhiLT5jdXJfaW5wdXRdLmhwc19zeW5jKTsKKwlzYWE3MTQ2X3NldF9ocHNfc291cmNlX2FuZF9zeW5jKGRldiwgaW5wdXRfcG9ydF9zZWxlY3Rpb25bbXhiLT5jdXJfaW5wdXRdLmhwc19zb3VyY2UsCisJCQlpbnB1dF9wb3J0X3NlbGVjdGlvbltteGItPmN1cl9pbnB1dF0uaHBzX3N5bmMpOwogCiAJLyogc29tZSBzdHVmZiBpcyBkb25lIHZpYSBkaXJlY3Qgd3JpdGUgdG8gdGhlIHJlZ2lzdGVycyAqLwogCkBAIC00NTcsMjQgKzQyNywyNCBAQAogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dF92diB2dl9kYXRhOwogCiAvKiB0aGlzIGZ1bmN0aW9uIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvYmluZyB3YXMgc3VjY2Vzc2Z1bCAqLwotc3RhdGljIGludCBteGJfYXR0YWNoKHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9wY2lfZXh0ZW5zaW9uX2RhdGEgKmluZm8pCitzdGF0aWMgaW50IG14Yl9hdHRhY2goc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSAqaW5mbykKIHsKLQlzdHJ1Y3QgbXhiKiBteGIgPSAoc3RydWN0IG14YiopZGV2LT5leHRfcHJpdjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CiAKLQlERUJfRUUoKCJkZXY6JXBcbiIsZGV2KSk7CisJREVCX0VFKCgiZGV2OiVwXG4iLCBkZXYpKTsKIAogCS8qIGNoZWNraW5nIGZvciBpMmMtZGV2aWNlcyBjYW4gYmUgb21pdHRlZCBoZXJlLCBiZWNhdXNlIHdlCiAJICAgYWxyZWFkeSBkaWQgdGhpcyBpbiAibXhiX3ZsNDJfcHJvYmUiICovCiAKLQlzYWE3MTQ2X3Z2X2luaXQoZGV2LCZ2dl9kYXRhKTsKLQlpZiggMCAhPSBzYWE3MTQ2X3JlZ2lzdGVyX2RldmljZSgmbXhiLT52aWRlb19kZXYsIGRldiwgIm14YiIsIFZGTF9UWVBFX0dSQUJCRVIpKSB7CisJc2FhNzE0Nl92dl9pbml0KGRldiwgJnZ2X2RhdGEpOworCWlmIChzYWE3MTQ2X3JlZ2lzdGVyX2RldmljZSgmbXhiLT52aWRlb19kZXYsIGRldiwgIm14YiIsIFZGTF9UWVBFX0dSQUJCRVIpKSB7CiAJCUVSUigoImNhbm5vdCByZWdpc3RlciBjYXB0dXJlIHY0bDIgZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCS8qIGluaXRpYWxpemF0aW9uIHN0dWZmICh2YmkpIChvbmx5IGZvciByZXZpc2lvbiA+IDAgYW5kIGZvciBleHRlbnNpb25zIHdoaWNoIHdhbnQgaXQpKi8KLQlpZiggMCAhPSBNWEJfQk9BUkRfQ0FOX0RPX1ZCSShkZXYpKSB7Ci0JCWlmKCAwICE9IHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZteGItPnZiaV9kZXYsIGRldiwgIm14YiIsIFZGTF9UWVBFX1ZCSSkpIHsKKwlpZiAoTVhCX0JPQVJEX0NBTl9ET19WQkkoZGV2KSkgeworCQlpZiAoc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJm14Yi0+dmJpX2RldiwgZGV2LCAibXhiIiwgVkZMX1RZUEVfVkJJKSkgewogCQkJRVJSKCgiY2Fubm90IHJlZ2lzdGVyIHZiaSB2NGwyIGRldmljZS4gc2tpcHBpbmcuXG4iKSk7CiAJCX0KIAl9CkBAIC00ODYsMTggKzQ1NiwxOCBAQAogCWkyY191c2VfY2xpZW50KG14Yi0+c2FhNzExMWEpOwogCWkyY191c2VfY2xpZW50KG14Yi0+dHVuZXIpOwogCi0JcHJpbnRrKCJteGI6IGZvdW5kICdNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCctJWQuXG4iLG14Yl9udW0pOworCXByaW50aygibXhiOiBmb3VuZCBNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCAjJWQuXG4iLCBteGJfbnVtKTsKIAogCW14Yl9udW0rKzsKIAlteGJfaW5pdF9kb25lKGRldik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXhiX2RldGFjaChzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldikKK3N0YXRpYyBpbnQgbXhiX2RldGFjaChzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldikKIHsKLQlzdHJ1Y3QgbXhiKiBteGIgPSAoc3RydWN0IG14YiopZGV2LT5leHRfcHJpdjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CiAKLQlERUJfRUUoKCJkZXY6JXBcbiIsZGV2KSk7CisJREVCX0VFKCgiZGV2OiVwXG4iLCBkZXYpKTsKIAogCWkyY19yZWxlYXNlX2NsaWVudChteGItPnRlYTY0MjBfMSk7CiAJaTJjX3JlbGVhc2VfY2xpZW50KG14Yi0+dGVhNjQyMF8yKTsKQEAgLTUwNyw5ICs0NzcsOCBAQAogCWkyY19yZWxlYXNlX2NsaWVudChteGItPnR1bmVyKTsKIAogCXNhYTcxNDZfdW5yZWdpc3Rlcl9kZXZpY2UoJm14Yi0+dmlkZW9fZGV2LGRldik7Ci0JaWYoIDAgIT0gTVhCX0JPQVJEX0NBTl9ET19WQkkoZGV2KSkgewotCQlzYWE3MTQ2X3VucmVnaXN0ZXJfZGV2aWNlKCZteGItPnZiaV9kZXYsZGV2KTsKLQl9CisJaWYgKE1YQl9CT0FSRF9DQU5fRE9fVkJJKGRldikpCisJCXNhYTcxNDZfdW5yZWdpc3Rlcl9kZXZpY2UoJm14Yi0+dmJpX2RldiwgZGV2KTsKIAlzYWE3MTQ2X3Z2X3JlbGVhc2UoZGV2KTsKIAogCW14Yl9udW0tLTsKQEAgLTUyMyw3ICs0OTIsNyBAQAogc3RhdGljIGludCBteGJfaW9jdGwoc3RydWN0IHNhYTcxNDZfZmggKmZoLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBteGIqIG14YiA9IChzdHJ1Y3QgbXhiKilkZXYtPmV4dF9wcml2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKIAlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CiAKIAlzd2l0Y2goY21kKSB7CkBAIC01MzIsMTEgKzUwMSw5IEBACiAJCXN0cnVjdCB2NGwyX2lucHV0ICppID0gYXJnOwogCiAJCURFQl9FRSgoIlZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLGktPmluZGV4KSk7Ci0JCWlmKCBpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gTVhCX0lOUFVUUykgeworCQlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IE1YQl9JTlBVVFMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCQltZW1jcHkoaSwgJm14Yl9pbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKLQogCQlyZXR1cm4gMDsKIAl9CiAJLyogdGhlIHNhYTcxNDYgcHJvdmlkZXMgc29tZSBjb250cm9scyAoYnJpZ2h0bmVzcywgY29udHJhc3QsIHNhdHVyYXRpb24pCkBAIC01NTAsNyArNTE3LDcgQEAKIAkJZm9yIChpID0gTUFYQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewogCQkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSBxYy0+aWQpIHsKIAkJCQkqcWMgPSBteGJfY29udHJvbHNbaV07Ci0JCQkJREVCX0QoKCJWSURJT0NfUVVFUllDVFJMICVkLlxuIixxYy0+aWQpKTsKKwkJCQlERUJfRCgoIlZJRElPQ19RVUVSWUNUUkwgJWQuXG4iLCBxYy0+aWQpKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQpAQCAtNTYyLDU2ICs1MjksNTEgQEAKIAkJaW50IGk7CiAKIAkJZm9yIChpID0gTUFYQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewotCQkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpIHsKKwkJCWlmIChteGJfY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKQogCQkJCWJyZWFrOwotCQkJfQogCQl9CiAKLQkJaWYoIGkgPCAwICkgeworCQlpZiAoaSA8IDApCiAJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlpZiAodmMtPmlkID09IFY0TDJfQ0lEX0FVRElPX01VVEUpIHsKKwkJCXZjLT52YWx1ZSA9IG14Yi0+Y3VyX211dGU7CisJCQlERUJfRCgoIlZJRElPQ19HX0NUUkwgVjRMMl9DSURfQVVESU9fTVVURTolZC5cbiIsIHZjLT52YWx1ZSkpOworCQkJcmV0dXJuIDA7CiAJCX0KIAotCQlzd2l0Y2ggKHZjLT5pZCApIHsKLQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURTogewotCQkJCXZjLT52YWx1ZSA9IG14Yi0+Y3VyX211dGU7Ci0JCQkJREVCX0QoKCJWSURJT0NfR19DVFJMIFY0TDJfQ0lEX0FVRElPX01VVEU6JWQuXG4iLHZjLT52YWx1ZSkpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0KLQkJREVCX0VFKCgiVklESU9DX0dfQ1RSTCBWNEwyX0NJRF9BVURJT19NVVRFOiVkLlxuIix2Yy0+dmFsdWUpKTsKKwkJREVCX0VFKCgiVklESU9DX0dfQ1RSTCBWNEwyX0NJRF9BVURJT19NVVRFOiVkLlxuIiwgdmMtPnZhbHVlKSk7CiAJCXJldHVybiAwOwogCX0KIAogCWNhc2UgVklESU9DX1NfQ1RSTDoKIAl7Ci0JCXN0cnVjdAl2NGwyX2NvbnRyb2wJKnZjID0gYXJnOworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICp2YyA9IGFyZzsKIAkJaW50IGkgPSAwOwogCiAJCWZvciAoaSA9IE1BWENPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJCWlmIChteGJfY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKSB7CisJCQlpZiAobXhiX2NvbnRyb2xzW2ldLmlkID09IHZjLT5pZCkKIAkJCQlicmVhazsKLQkJCX0KIAkJfQogCi0JCWlmKCBpIDwgMCApIHsKKwkJaWYgKGkgPCAwKQogCQkJcmV0dXJuIC1FQUdBSU47Ci0JCX0KIAotCQlzd2l0Y2ggKHZjLT5pZCApIHsKLQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURTogewotCQkJCW14Yi0+Y3VyX211dGUgPSB2Yy0+dmFsdWU7Ci0JCQkJaWYoIDAgPT0gdmMtPnZhbHVlICkgewotCQkJCQkvKiBzd2l0Y2ggdGhlIGF1ZGlvLXNvdXJjZSAqLwotCQkJCQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbbXhiLT5jdXJfaW5wdXRdXVswXSk7Ci0JCQkJCW14Yi0+dGVhNjQyMF8yLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzIsVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dWzFdKTsKLQkJCQl9IGVsc2UgewotCQkJCQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lWzZdWzBdKTsKLQkJCQkJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMixURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfbGluZVs2XVsxXSk7Ci0JCQkJfQotCQkJCURFQl9FRSgoIlZJRElPQ19TX0NUUkwsIFY0TDJfQ0lEX0FVRElPX01VVEU6ICVkLlxuIix2Yy0+dmFsdWUpKTsKLQkJCQlicmVhazsKKwkJaWYgKHZjLT5pZCA9PSBWNEwyX0NJRF9BVURJT19NVVRFKSB7CisJCQlteGItPmN1cl9tdXRlID0gdmMtPnZhbHVlOworCQkJaWYgKCF2Yy0+dmFsdWUpIHsKKwkJCQkvKiBzd2l0Y2ggdGhlIGF1ZGlvLXNvdXJjZSAqLworCQkJCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsIFRFQTY0MjBfU1dJVENILAorCQkJCQkJJlRFQTY0MjBfbGluZVt2aWRlb19hdWRpb19jb25uZWN0W214Yi0+Y3VyX2lucHV0XV1bMF0pOworCQkJCW14Yi0+dGVhNjQyMF8yLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzIsIFRFQTY0MjBfU1dJVENILAorCQkJCQkJJlRFQTY0MjBfbGluZVt2aWRlb19hdWRpb19jb25uZWN0W214Yi0+Y3VyX2lucHV0XV1bMV0pOworCQkJfSBlbHNlIHsKKwkJCQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLCBURUE2NDIwX1NXSVRDSCwKKwkJCQkJCSZURUE2NDIwX2xpbmVbNl1bMF0pOworCQkJCW14Yi0+dGVhNjQyMF8yLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzIsIFRFQTY0MjBfU1dJVENILAorCQkJCQkJJlRFQTY0MjBfbGluZVs2XVsxXSk7CiAJCQl9CisJCQlERUJfRUUoKCJWSURJT0NfU19DVFJMLCBWNEwyX0NJRF9BVURJT19NVVRFOiAlZC5cbiIsIHZjLT52YWx1ZSkpOwogCQl9CiAJCXJldHVybiAwOwogCX0KQEAgLTYyMCwxMDYgKzU4Miw4NCBAQAogCQlpbnQgKmlucHV0ID0gKGludCAqKWFyZzsKIAkJKmlucHV0ID0gbXhiLT5jdXJfaW5wdXQ7CiAKLQkJREVCX0VFKCgiVklESU9DX0dfSU5QVVQgJWQuXG4iLCppbnB1dCkpOworCQlERUJfRUUoKCJWSURJT0NfR19JTlBVVCAlZC5cbiIsICppbnB1dCkpOwogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBWSURJT0NfU19JTlBVVDoKIAl7CiAJCWludCBpbnB1dCA9ICooaW50ICopYXJnOwotCQlzdHJ1Y3QJdGVhNjQxNWNfbXVsdGlwbGV4IHZtOworCQlzdHJ1Y3QgdGVhNjQxNWNfbXVsdGlwbGV4IHZtOworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwogCQlpbnQgaSA9IDA7CiAKLQkJREVCX0VFKCgiVklESU9DX1NfSU5QVVQgJWQuXG4iLGlucHV0KSk7CisJCURFQl9FRSgoIlZJRElPQ19TX0lOUFVUICVkLlxuIiwgaW5wdXQpKTsKIAotCQlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID49IE1YQl9JTlBVVFMpIHsKKwkJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSBNWEJfSU5QVVRTKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKiBmaXhtZTogbG9ja2UgZGFzIHNldHplbiBkZXMgaW5wdXRzIG1pdCBoaWxmZSBkZXMgbXV0ZXhlcwotCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCQl2aWRlb19tdXgoZGV2LCppKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCQkqLwotCi0JCS8qIGZpeG1lOiBjaGVjayBpZiBzdHJlYW1pbmcgY2FwdHVyZQotCQlpZiAoIDAgIT0gZGV2LT5zdHJlYW1pbmcgKSB7Ci0JCQlERUJfRCgoIlZJRElPQ19TX0lOUFVUIGlsbGVnYWwgd2hpbGUgc3RyZWFtaW5nLlxuIikpOwotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfQotCQkqLwogCiAJCW14Yi0+Y3VyX2lucHV0ID0gaW5wdXQ7CiAKLQkJc2FhNzE0Nl9zZXRfaHBzX3NvdXJjZV9hbmRfc3luYyhkZXYsIGlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc291cmNlLCBpbnB1dF9wb3J0X3NlbGVjdGlvbltpbnB1dF0uaHBzX3N5bmMpOworCQlzYWE3MTQ2X3NldF9ocHNfc291cmNlX2FuZF9zeW5jKGRldiwgaW5wdXRfcG9ydF9zZWxlY3Rpb25baW5wdXRdLmhwc19zb3VyY2UsCisJCQkJaW5wdXRfcG9ydF9zZWxlY3Rpb25baW5wdXRdLmhwc19zeW5jKTsKIAogCQkvKiBwcmVwYXJlIHN3aXRjaGluZyBvZiB0ZWE2NDE1YyBhbmQgc2FhNzExMWE7CiAJCSAgIGhhdmUgYSBsb29rIGF0IHRoZSAnYmFja2dyb3VuZCctZmlsZSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbnMgICovCi0JCXN3aXRjaCggaW5wdXQgKSB7CisJCXN3aXRjaCAoaW5wdXQpIHsKKwkJY2FzZSBUVU5FUjoKKwkJCWkgPSBTQUE3MTE1X0NPTVBPU0lURTA7CisJCQl2bS5pbiAgPSAzOworCQkJdm0ub3V0ID0gMTc7CiAKLQkJCWNhc2UgVFVORVI6Ci0JCQl7Ci0JCQkJaSA9IDA7Ci0JCQkJdm0uaW4gID0gMzsKLQkJCQl2bS5vdXQgPSAxNzsKLQotCQkJaWYgKCAwICE9IG14Yi0+dGVhNjQxNWMtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MTVjLFRFQTY0MTVDX1NXSVRDSCwgJnZtKSkgewotCQkJCQlwcmludGsoIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyB0ZWE2NDE1YyAjMVxuIik7Ci0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCX0KLQkJCQkvKiBjb25uZWN0IHR1bmVyLW91dHB1dCBhbHdheXMgdG8gbXVsdGljYWJsZSAqLwotCQkJCXZtLmluICA9IDM7Ci0JCQkJdm0ub3V0ID0gMTM7Ci0JCQkJYnJlYWs7CisJCQlpZiAobXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsIFRFQTY0MTVDX1NXSVRDSCwgJnZtKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiVklESU9DX1NfSU5QVVQ6IGNvdWxkIG5vdCBhZGRyZXNzIHRlYTY0MTVjICMxXG4iKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCX0KLQkJCWNhc2UgQVVYM19ZQzoKLQkJCXsKLQkJCQkvKiBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4gYXV4M195YyBpcwotCQkJCSAgIGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUgc2FhNzExYSAqLwotCQkJCWkgPSA1OwotCQkJCWJyZWFrOwotCQkJfQotCQkJY2FzZSBBVVgzOgotCQkJewotCQkJCS8qIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlLiBhdXgzIGlzCi0JCQkJICAgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBzYWE3MTFhICovCi0JCQkJaSA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljYXNlIEFVWDE6Ci0JCQl7Ci0JCQkJaSA9IDA7Ci0JCQkJdm0uaW4gID0gMTsKLQkJCQl2bS5vdXQgPSAxNzsKLQkJCQlicmVhazsKLQkJCX0KKwkJCS8qIGNvbm5lY3QgdHVuZXItb3V0cHV0IGFsd2F5cyB0byBtdWx0aWNhYmxlICovCisJCQl2bS5pbiAgPSAzOworCQkJdm0ub3V0ID0gMTM7CisJCQlicmVhazsKKwkJY2FzZSBBVVgzX1lDOgorCQkJLyogbm90aGluZyB0byBiZSBkb25lIGhlcmUuIGF1eDNfeWMgaXMKKwkJCSAgIGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUgc2FhNzExYSAqLworCQkJaSA9IFNBQTcxMTVfU1ZJREVPMTsKKwkJCWJyZWFrOworCQljYXNlIEFVWDM6CisJCQkvKiBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4gYXV4MyBpcworCQkJICAgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBzYWE3MTFhICovCisJCQlpID0gU0FBNzExNV9DT01QT1NJVEUxOworCQkJYnJlYWs7CisJCWNhc2UgQVVYMToKKwkJCWkgPSBTQUE3MTE1X0NPTVBPU0lURTA7CisJCQl2bS5pbiAgPSAxOworCQkJdm0ub3V0ID0gMTc7CisJCQlicmVhazsKIAkJfQogCiAJCS8qIHN3aXRjaCB2aWRlbyBpbiB0ZWE2NDE1YyBvbmx5IGlmIG5lY2Vzc2FyeSAqLwotCQlzd2l0Y2goIGlucHV0ICkgewotCQkJY2FzZSBUVU5FUjoKLQkJCWNhc2UgQVVYMToKLQkJCXsKLQkJCQlpZiAoIDAgIT0gbXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsVEVBNjQxNUNfU1dJVENILCAmdm0pKSB7Ci0JCQkJCXByaW50aygiVklESU9DX1NfSU5QVVQ6IGNvdWxkIG5vdCBhZGRyZXNzIHRlYTY0MTVjICMzXG4iKTsKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJfQotCQkJCWJyZWFrOworCQlzd2l0Y2ggKGlucHV0KSB7CisJCWNhc2UgVFVORVI6CisJCWNhc2UgQVVYMToKKwkJCWlmIChteGItPnRlYTY0MTVjLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDE1YywgVEVBNjQxNUNfU1dJVENILCAmdm0pKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3MgdGVhNjQxNWMgIzNcbiIpOworCQkJCXJldHVybiAtRUZBVUxUOwogCQkJfQotCQkJZGVmYXVsdDoKLQkJCXsKLQkJCQlicmVhazsKLQkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CiAJCX0KIAogCQkvKiBzd2l0Y2ggdmlkZW8gaW4gc2FhNzExMWEgKi8KLQkJaWYgKCAwICE9IG14Yi0+c2FhNzExMWEtPmRyaXZlci0+Y29tbWFuZChteGItPnNhYTcxMTFhLERFQ09ERVJfU0VUX0lOUFVULCAmaSkpIHsKKwkJcm91dGUuaW5wdXQgPSBpOworCQlyb3V0ZS5vdXRwdXQgPSAwOworCQlpZiAobXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCAmcm91dGUpKQogCQkJcHJpbnRrKCJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3Mgc2FhNzExMWEgIzEuXG4iKTsKLQkJfQogCiAJCS8qIHN3aXRjaCB0aGUgYXVkaW8tc291cmNlIG9ubHkgaWYgbmVjZXNzYXJ5ICovCiAJCWlmKCAwID09IG14Yi0+Y3VyX211dGUgKSB7Ci0JCQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbaW5wdXRdXVswXSk7Ci0JCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbaW5wdXRdXVsxXSk7CisJCQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLCBURUE2NDIwX1NXSVRDSCwKKwkJCQkJJlRFQTY0MjBfbGluZVt2aWRlb19hdWRpb19jb25uZWN0W2lucHV0XV1bMF0pOworCQkJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsCisJCQkJICAgICAgICZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtpbnB1dF1dWzFdKTsKIAkJfQogCiAJCXJldHVybiAwOwpAQCAtNzI3LDExNCArNjY3LDQ0IEBACiAJY2FzZSBWSURJT0NfR19UVU5FUjoKIAl7CiAJCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOwotCQlpbnQgYnl0ZSA9IDA7CiAKLQkJaWYoIDAgIT0gdC0+aW5kZXggKSB7CisJCWlmICh0LT5pbmRleCkgewogCQkJREVCX0QoKCJWSURJT0NfR19UVU5FUjogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIgYXR0YWNoZWQuXG4iLCB0LT5pbmRleCkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQlERUJfRUUoKCJWSURJT0NfR19UVU5FUjogJWRcbiIsIHQtPmluZGV4KSk7CiAKLQkJbWVtc2V0KHQsMCxzaXplb2YoKnQpKTsKLQkJc3RyY3B5KHQtPm5hbWUsICJUZWxldmlzaW9uIik7CisJCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKKwkJaTJjX2NsaWVudHNfY29tbWFuZCgmbXhiLT5pMmNfYWRhcHRlciwgY21kLCBhcmcpOwogCisJCXN0cmxjcHkodC0+bmFtZSwgIlRWIFR1bmVyIiwgc2l6ZW9mKHQtPm5hbWUpKTsKIAkJdC0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwotCQl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STSB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8IFY0TDJfVFVORVJfQ0FQX0xBTkcxIHwgVjRMMl9UVU5FUl9DQVBfTEFORzIgfCBWNEwyX1RVTkVSX0NBUF9TQVA7Ci0JCXQtPnJhbmdlbG93ID0gNzcyOwkvKiA0OC4yNSBNSFogLyA2Mi41IGtIeiA9IDc3Miwgc2VlIGZpMTIxNm1rMi1zcGVjcywgcGFnZSAyICovCi0JCXQtPnJhbmdlaGlnaCA9IDEzNjg0OwkvKiA4NTUuMjUgTUh6IC8gNjIuNSBrSHogPSAxMzY4NCAqLwotCQkvKiBGSVhNRTogYWRkIHRoZSByZWFsIHNpZ25hbCBzdHJlbmd0aCBoZXJlICovCi0JCXQtPnNpZ25hbCA9IDB4ZmZmZjsKLQkJdC0+YWZjID0gMDsKLQotCQlteGItPnRkYTk4NDAtPmRyaXZlci0+Y29tbWFuZChteGItPnRkYTk4NDAsVERBOTg0MF9ERVRFQ1QsICZieXRlKTsKKwkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk0gfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBcCisJCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOwogCQl0LT5hdWRtb2RlID0gbXhiLT5jdXJfbW9kZTsKLQotCQlpZiggYnl0ZSA8IDAgKSB7Ci0JCQl0LT5yeHN1YmNoYW5zICA9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JCX0gZWxzZSB7Ci0JCQlzd2l0Y2goYnl0ZSkgewotCQkJCWNhc2UgVERBOTg0MF9NT05PX0RFVEVDVDogewotCQkJCQl0LT5yeHN1YmNoYW5zIAk9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JCQkJCURFQl9EKCgiVklESU9DX0dfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9NT05PLlxuIikpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJY2FzZSBUREE5ODQwX0RVQUxfREVURUNUOiB7Ci0JCQkJCXQtPnJ4c3ViY2hhbnMgCT0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKLQkJCQkJREVCX0QoKCJWSURJT0NfR19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX0xBTkcxLlxuIikpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJY2FzZSBUREE5ODQwX1NURVJFT19ERVRFQ1Q6IHsKLQkJCQkJdC0+cnhzdWJjaGFucyAJPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU8gfCBWNEwyX1RVTkVSX1NVQl9NT05POwotCQkJCQlERUJfRCgoIlZJRElPQ19HX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfU1RFUkVPLlxuIikpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJZGVmYXVsdDogeyAvKiBUREE5ODQwX0lOQ09SUkVDVF9ERVRFQ1QgKi8KLQkJCQkJdC0+cnhzdWJjaGFucyAJPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQkJCQkJREVCX0QoKCJWSURJT0NfR19UVU5FUjogVERBOTg0MF9JTkNPUlJFQ1RfREVURUNUID0+IFY0TDJfVFVORVJfTU9ERV9NT05PXG4iKSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCiAJCXJldHVybiAwOwogCX0KIAljYXNlIFZJRElPQ19TX1RVTkVSOgogCXsKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0JCWludCByZXN1bHQgPSAwOwotCQlpbnQgYnl0ZSA9IDA7CiAKLQkJaWYoIDAgIT0gdC0+aW5kZXggKSB7CisJCWlmICh0LT5pbmRleCkgewogCQkJREVCX0QoKCJWSURJT0NfU19UVU5FUjogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIgYXR0YWNoZWQuXG4iLHQtPmluZGV4KSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCXN3aXRjaCh0LT5hdWRtb2RlKSB7Ci0JCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86IHsKLQkJCQlteGItPmN1cl9tb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQkJCQlieXRlID0gVERBOTg0MF9TRVRfU1RFUkVPOwotCQkJCURFQl9EKCgiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9TVEVSRU9cbiIpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOiB7Ci0JCQkJbXhiLT5jdXJfbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMjsKLQkJCQlieXRlID0gVERBOTg0MF9TRVRfQk9USDsKLQkJCQlERUJfRCgoIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzJcbiIpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOiB7Ci0JCQkJbXhiLT5jdXJfbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKLQkJCQlieXRlID0gVERBOTg0MF9TRVRfTEFORzE7Ci0JCQkJREVCX0QoKCJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX0xBTkcxXG4iKSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjogewotCQkJCW14Yi0+Y3VyX21vZGUgPSBWNEwyX1RVTkVSX01PREVfTEFORzI7Ci0JCQkJYnl0ZSA9IFREQTk4NDBfU0VUX0xBTkcyOwotCQkJCURFQl9EKCgiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9MQU5HMlxuIikpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJZGVmYXVsdDogeyAvKiBjYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POiB7Ki8KLQkJCQlteGItPmN1cl9tb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0JCQkJYnl0ZSA9IFREQTk4NDBfU0VUX01PTk87Ci0JCQkJREVCX0QoKCJWSURJT0NfU19UVU5FUjogVERBOTg0MF9TRVRfTU9OT1xuIikpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYoIDAgIT0gKHJlc3VsdCA9IG14Yi0+dGRhOTg0MC0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGRhOTg0MCwgVERBOTg0MF9TV0lUQ0gsICZieXRlKSkpIHsKLQkJCXByaW50aygiVklESU9DX1NfVFVORVIgZXJyb3IuIHJlc3VsdDolZCwgYnl0ZTolZFxuIixyZXN1bHQsYnl0ZSk7Ci0JCX0KLQorCQlteGItPmN1cl9tb2RlID0gdC0+YXVkbW9kZTsKKwkJaTJjX2NsaWVudHNfY29tbWFuZCgmbXhiLT5pMmNfYWRhcHRlciwgY21kLCBhcmcpOwogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CiAJewogCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CiAKLQkJaWYoMCAhPSBteGItPmN1cl9pbnB1dCkgewotCQkJREVCX0QoKCJWSURJT0NfR19GUkVROiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciFcbiIsbXhiLT5jdXJfaW5wdXQpKTsKKwkJaWYgKG14Yi0+Y3VyX2lucHV0KSB7CisJCQlERUJfRCgoIlZJRElPQ19HX0ZSRVE6IGNoYW5uZWwgJWQgZG9lcyBub3QgaGF2ZSBhIHR1bmVyIVxuIiwKKwkJCQkJCW14Yi0+Y3VyX2lucHV0KSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC04NDcsMTQgKzcxNywxNCBAQAogCXsKIAkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOwogCi0JCWlmICgwICE9IGYtPnR1bmVyKQorCQlpZiAoZi0+dHVuZXIpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAoVjRMMl9UVU5FUl9BTkFMT0dfVFYgIT0gZi0+dHlwZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmKDAgIT0gbXhiLT5jdXJfaW5wdXQpIHsKLQkJCURFQl9EKCgiVklESU9DX1NfRlJFUTogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIhXG4iLG14Yi0+Y3VyX2lucHV0KSk7CisJCWlmIChteGItPmN1cl9pbnB1dCkgeworCQkJREVCX0QoKCJWSURJT0NfU19GUkVROiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciFcbiIsIG14Yi0+Y3VyX2lucHV0KSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC04NzUsNyArNzQ1LDcgQEAKIAl7CiAJCWludCBpID0gKihpbnQqKWFyZzsKIAotCQlpZiggaSA8IDAgfHwgaSA+PSBNWEJfQVVESU9TICkgeworCQlpZiAoaSA8IDAgfHwgaSA+PSBNWEJfQVVESU9TKSB7CiAJCQlERUJfRCgoImlsbGVnYWwgYXJndW1lbnQgdG8gTVhCX1NfQVVESU9fQ0Q6IGk6JWQuXG4iLGkpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC04OTEsNyArNzYxLDcgQEAKIAl7CiAJCWludCBpID0gKihpbnQqKWFyZzsKIAotCQlpZiggaSA8IDAgfHwgaSA+PSBNWEJfQVVESU9TICkgeworCQlpZiAoaSA8IDAgfHwgaSA+PSBNWEJfQVVESU9TKSB7CiAJCQlERUJfRCgoImlsbGVnYWwgYXJndW1lbnQgdG8gTVhCX1NfQVVESU9fTElORTogaTolZC5cbiIsaSkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTkwNiwxMiArNzc2LDEyIEBACiAJewogCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKIAotCQlpZiggYS0+aW5kZXggPCAwIHx8IGEtPmluZGV4ID4gTVhCX0lOUFVUUyApIHsKLQkJCURFQl9EKCgiVklESU9DX0dfQVVESU8gJWQgb3V0IG9mIHJhbmdlLlxuIixhLT5pbmRleCkpOworCQlpZiAoYS0+aW5kZXggPCAwIHx8IGEtPmluZGV4ID4gTVhCX0lOUFVUUykgeworCQkJREVCX0QoKCJWSURJT0NfR19BVURJTyAlZCBvdXQgb2YgcmFuZ2UuXG4iLCBhLT5pbmRleCkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlERUJfRUUoKCJWSURJT0NfR19BVURJTyAlZC5cbiIsYS0+aW5kZXgpKTsKKwkJREVCX0VFKCgiVklESU9DX0dfQVVESU8gJWQuXG4iLCBhLT5pbmRleCkpOwogCQltZW1jcHkoYSwgJm14Yl9hdWRpb3NbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dLCBzaXplb2Yoc3RydWN0IHY0bDJfYXVkaW8pKTsKIAogCQlyZXR1cm4gMDsKQEAgLTkxOSw5ICs3ODksMTYgQEAKIAljYXNlIFZJRElPQ19TX0FVRElPOgogCXsKIAkJc3RydWN0IHY0bDJfYXVkaW8gKmEgPSBhcmc7Ci0JCURFQl9EKCgiVklESU9DX1NfQVVESU8gJWQuXG4iLGEtPmluZGV4KSk7CisKKwkJREVCX0QoKCJWSURJT0NfU19BVURJTyAlZC5cbiIsIGEtPmluZGV4KSk7CiAJCXJldHVybiAwOwogCX0KKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJY2FzZSBWSURJT0NfREJHX1NfUkVHSVNURVI6CisJY2FzZSBWSURJT0NfREJHX0dfUkVHSVNURVI6CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJm14Yi0+aTJjX2FkYXB0ZXIsIGNtZCwgYXJnKTsKKwkJcmV0dXJuIDA7CisjZW5kaWYKIAlkZWZhdWx0OgogLyoKIAkJREVCMihwcmludGsoImRvZXMgbm90IGhhbmRsZSB0aGlzIGlvY3RsLlxuIikpOwpAQCAtOTQ0LDcgKzgyMSw3IEBACiAJCS8qIHNldCB0aGUgNzE0NiBncGlvIHJlZ2lzdGVyIC0tIEkgZG9uJ3Qga25vdyB3aGF0IHRoaXMgZG9lcyBleGFjdGx5ICovCiAJCXNhYTcxNDZfd3JpdGUoZGV2LCBHUElPX0NUUkwsIDB4MDA0MDQwNTApOwogCQkvKiB1bnNldCB0aGUgNzExMSBncGlvIHJlZ2lzdGVyIC0tIEkgZG9uJ3Qga25vdyB3aGF0IHRoaXMgZG9lcyBleGFjdGx5ICovCi0JCW14Yi0+c2FhNzExMWEtPmRyaXZlci0+Y29tbWFuZChteGItPnNhYTcxMTFhLCBERUNPREVSX1NFVF9HUElPLCAmemVybyk7CisJCW14Yi0+c2FhNzExMWEtPmRyaXZlci0+Y29tbWFuZChteGItPnNhYTcxMTFhLCBWSURJT0NfSU5UX1NfR1BJTywgJnplcm8pOwogCQlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVklESU9DX1NfU1RELCAmc3RkKTsKIAl9IGVsc2UgewogCQl2NGwyX3N0ZF9pZCBzdGQgPSBWNEwyX1NURF9QQUxfQkc7CkBAIC05NTMsNyArODMwLDcgQEAKIAkJLyogc2V0IHRoZSA3MTQ2IGdwaW8gcmVnaXN0ZXIgLS0gSSBkb24ndCBrbm93IHdoYXQgdGhpcyBkb2VzIGV4YWN0bHkgKi8KIAkJc2FhNzE0Nl93cml0ZShkZXYsIEdQSU9fQ1RSTCwgMHgwMDQwNDA1MCk7CiAJCS8qIHNldCB0aGUgNzExMSBncGlvIHJlZ2lzdGVyIC0tIEkgZG9uJ3Qga25vdyB3aGF0IHRoaXMgZG9lcyBleGFjdGx5ICovCi0JCW14Yi0+c2FhNzExMWEtPmRyaXZlci0+Y29tbWFuZChteGItPnNhYTcxMTFhLCBERUNPREVSX1NFVF9HUElPLCAmb25lKTsKKwkJbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsIFZJRElPQ19JTlRfU19HUElPLCAmb25lKTsKIAkJbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsIFZJRElPQ19TX1NURCwgJnN0ZCk7CiAJfQogCXJldHVybiAwOwpAQCAtMTAyOSw3ICs5MDYsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBteGJfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlpZiggMCAhPSBzYWE3MTQ2X3JlZ2lzdGVyX2V4dGVuc2lvbigmZXh0ZW5zaW9uKSkgeworCWlmIChzYWE3MTQ2X3JlZ2lzdGVyX2V4dGVuc2lvbigmZXh0ZW5zaW9uKSkgewogCQlERUJfUygoImZhaWxlZCB0byByZWdpc3RlciBleHRlbnNpb24uXG4iKSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYwppbmRleCBjNjg1MjQwLi4yMTBmMTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jCkBAIC05NzQsMTQgKzk3NCwxNCBAQAogCiAJZm9yIChpID0gcmVnMTsgaSA8PSByZWduOyBpKyspIHsKIAkJcmMgPSBpMmNfcihvdiwgaSk7Ci0JCWluZm8oIlNlbnNvclsweCUwMlhdID0gMHglMDJYIiwgaSwgcmMpOworCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yWzB4JTAyWF0gPSAweCUwMlhcbiIsIGksIHJjKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkCiBkdW1wX2kyY19yZWdzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQogewotCWluZm8oIkkyQyBSRUdTIik7CisJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIkkyQyBSRUdTXG4iKTsKIAlkdW1wX2kyY19yYW5nZShvdiwgMHgwMCwgMHg3Qyk7CiB9CiAKQEAgLTk5MiwyOCArOTkyLDI4IEBACiAKIAlmb3IgKGkgPSByZWcxOyBpIDw9IHJlZ247IGkrKykgewogCQlyYyA9IHJlZ19yKG92LCBpKTsKLQkJaW5mbygiT1Y1MTFbMHglMDJYXSA9IDB4JTAyWCIsIGksIHJjKTsKKwkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIk9WNTExWzB4JTAyWF0gPSAweCUwMlhcbiIsIGksIHJjKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkCiBvdjUxMV9kdW1wX3JlZ3Moc3RydWN0IHVzYl9vdjUxMSAqb3YpCiB7Ci0JaW5mbygiQ0FNRVJBIElOVEVSRkFDRSBSRUdTIik7CisJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIkNBTUVSQSBJTlRFUkZBQ0UgUkVHU1xuIik7CiAJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4MTAsIDB4MWYpOwotCWluZm8oIkRSQU0gSU5URVJGQUNFIFJFR1MiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiRFJBTSBJTlRFUkZBQ0UgUkVHU1xuIik7CiAJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4MjAsIDB4MjMpOwotCWluZm8oIklTTyBGSUZPIFJFR1MiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiSVNPIEZJRk8gUkVHU1xuIik7CiAJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4MzAsIDB4MzEpOwotCWluZm8oIlBJTyBSRUdTIik7CisJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlBJTyBSRUdTXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHgzOCwgMHgzOSk7CiAJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4M2UsIDB4M2UpOwotCWluZm8oIkkyQyBSRUdTIik7CisJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIkkyQyBSRUdTXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHg0MCwgMHg0OSk7Ci0JaW5mbygiU1lTVEVNIENPTlRST0wgUkVHUyIpOworCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJTWVNURU0gQ09OVFJPTCBSRUdTXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHg1MCwgMHg1NSk7CiAJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NWUsIDB4NWYpOwotCWluZm8oIk9tbmlDRSBSRUdTIik7CisJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIk9tbmlDRSBSRUdTXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHg3MCwgMHg3OSk7CiAJLyogTk9URTogUXVhbnRpemF0aW9uIHRhYmxlcyBhcmUgbm90IHJlYWRhYmxlLiBZb3Ugd2lsbCBnZXQgdGhlIHZhbHVlCiAJICogaW4gcmVnLiAweDc5IGZvciBldmVyeSB0YWJsZSByZWdpc3RlciAqLwpAQCAtMTAyNSwyNSArMTAyNSwyNSBAQAogc3RhdGljIHZvaWQKIG92NTE4X2R1bXBfcmVncyhzdHJ1Y3QgdXNiX292NTExICpvdikKIHsKLQlpbmZvKCJWSURFTyBNT0RFIFJFR1MiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiVklERU8gTU9ERSBSRUdTXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHgyMCwgMHgyZik7Ci0JaW5mbygiREFUQSBQVU1QIEFORCBTTkFQU0hPVCBSRUdTIik7CisJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIkRBVEEgUFVNUCBBTkQgU05BUFNIT1QgUkVHU1xuIik7CiAJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4MzAsIDB4M2YpOwotCWluZm8oIkkyQyBSRUdTIik7CisJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIkkyQyBSRUdTXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHg0MCwgMHg0Zik7Ci0JaW5mbygiU1lTVEVNIENPTlRST0wgQU5EIFZFTkRPUiBSRUdTIik7CisJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNZU1RFTSBDT05UUk9MIEFORCBWRU5ET1IgUkVHU1xuIik7CiAJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NTAsIDB4NWYpOwotCWluZm8oIjYwIC0gNkYiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiNjAgLSA2RlxuIik7CiAJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NjAsIDB4NmYpOwotCWluZm8oIjcwIC0gN0YiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiNzAgLSA3RlxuIik7CiAJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NzAsIDB4N2YpOwotCWluZm8oIlkgUVVBTlRJWkFUSU9OIFRBQkxFIik7CisJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlkgUVVBTlRJWkFUSU9OIFRBQkxFXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHg4MCwgMHg4Zik7Ci0JaW5mbygiVVYgUVVBTlRJWkFUSU9OIFRBQkxFIik7CisJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlVWIFFVQU5USVpBVElPTiBUQUJMRVxuIik7CiAJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4OTAsIDB4OWYpOwotCWluZm8oIkEwIC0gQkYiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiQTAgLSBCRlxuIik7CiAJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4YTAsIDB4YmYpOwotCWluZm8oIkNCUiIpOworCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJDQlJcbiIpOwogCWR1bXBfcmVnX3JhbmdlKG92LCAweGMwLCAweGNmKTsKIH0KICNlbmRpZgpAQCAtMTA5OCw5ICsxMDk4LDEwIEBACiAJCXJlZ193KG92LCBSNTF4X1NZU19TTkFQLCAweDAyKTsKIAkJcmVnX3cob3YsIFI1MXhfU1lTX1NOQVAsIDB4MDApOwogCX0gZWxzZSBpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpIHsKLQkJd2Fybigic25hcHNob3QgcmVzZXQgbm90IHN1cHBvcnRlZCB5ZXQgb24gT1Y1MTgoKykiKTsKKwkJZGV2X3dhcm4oJm92LT5kZXYtPmRldiwKKwkJCSAic25hcHNob3QgcmVzZXQgbm90IHN1cHBvcnRlZCB5ZXQgb24gT1Y1MTgoKylcbiIpOwogCX0gZWxzZSB7Ci0JCWVycigiY2xlYXIgc25hcDogaW52YWxpZCBicmlkZ2UgdHlwZSIpOworCQlkZXZfZXJyKCZvdi0+ZGV2LT5kZXYsICJjbGVhciBzbmFwOiBpbnZhbGlkIGJyaWRnZSB0eXBlXG4iKTsKIAl9CiB9CiAKQEAgLTExMTUsMTQgKzExMTYsMTYgQEAKIAlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpIHsKIAkJcmV0ID0gcmVnX3Iob3YsIFI1MXhfU1lTX1NOQVApOwogCQlpZiAocmV0IDwgMCkgewotCQkJZXJyKCJFcnJvciBjaGVja2luZyBzbnNwc2hvdCBzdGF0dXMgKCVkKSIsIHJldCk7CisJCQlkZXZfZXJyKCZvdi0+ZGV2LT5kZXYsCisJCQkJIkVycm9yIGNoZWNraW5nIHNuc3BzaG90IHN0YXR1cyAoJWQpXG4iLCByZXQpOwogCQl9IGVsc2UgaWYgKHJldCAmIDB4MDgpIHsKIAkJCXN0YXR1cyA9IDE7CiAJCX0KIAl9IGVsc2UgaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KSB7Ci0JCXdhcm4oInNuYXBzaG90IGNoZWNrIG5vdCBzdXBwb3J0ZWQgeWV0IG9uIE9WNTE4KCspIik7CisJCWRldl93YXJuKCZvdi0+ZGV2LT5kZXYsCisJCQkgInNuYXBzaG90IGNoZWNrIG5vdCBzdXBwb3J0ZWQgeWV0IG9uIE9WNTE4KCspXG4iKTsKIAl9IGVsc2UgewotCQllcnIoImNoZWNrIHNuYXA6IGludmFsaWQgYnJpZGdlIHR5cGUiKTsKKwkJZGV2X2Vycigmb3YtPmRldi0+ZGV2LCAiY2xlYXIgc25hcDogaW52YWxpZCBicmlkZ2UgdHlwZVxuIik7CiAJfQogCiAJcmV0dXJuIHN0YXR1czsKQEAgLTMyMDUsOSArMzIwOCwxMCBAQAogCSAqLwogCiAJaWYgKHByaW50cGgpIHsKLQkJaW5mbygicGgoJTNkKTogJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMngiLAotCQkgICAgIHBudW0sIGluWzBdLCBpblsxXSwgaW5bMl0sIGluWzNdLCBpbls0XSwgaW5bNV0sIGluWzZdLAotCQkgICAgIGluWzddLCBpbls4XSwgaW5bOV0sIGluWzEwXSwgaW5bMTFdKTsKKwkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwKKwkJCSAicGgoJTNkKTogJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnhcbiIsCisJCQkgcG51bSwgaW5bMF0sIGluWzFdLCBpblsyXSwgaW5bM10sIGluWzRdLCBpbls1XSwgaW5bNl0sCisJCQkgaW5bN10sIGluWzhdLCBpbls5XSwgaW5bMTBdLCBpblsxMV0pOwogCX0KIAogCS8qIENoZWNrIGZvciBTT0YvRU9GIHBhY2tldCAqLwpAQCAtMzM2Niw4ICszMzcwLDEwIEBACiAJICogdGhlIGRlZmluaXRpdmUgU09GL0VPRiBmb3JtYXQgKi8KIAlpZiAoKCEoaW5bMF0gfCBpblsxXSB8IGluWzJdIHwgaW5bM10gfCBpbls1XSkpICYmIGluWzZdKSB7CiAJCWlmIChwcmludHBoKSB7Ci0JCQlpbmZvKCJwaDogJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCIsIGluWzBdLAotCQkJICAgICBpblsxXSwgaW5bMl0sIGluWzNdLCBpbls0XSwgaW5bNV0sIGluWzZdLCBpbls3XSk7CisJCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LAorCQkJCSAicGg6ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnhcbiIsCisJCQkJIGluWzBdLCBpblsxXSwgaW5bMl0sIGluWzNdLCBpbls0XSwgaW5bNV0sCisJCQkJIGluWzZdLCBpbls3XSk7CiAJCX0KIAogCQlpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTVEFURV9MSU5FUykgewpAQCAtMzY0NiwxNCArMzY1MiwxNiBAQAogCQlpZiAocGFja2V0c2l6ZSA9PSAtMSkgewogCQkJb3Y1MThfc2V0X3BhY2tldF9zaXplKG92LCA2NDApOwogCQl9IGVsc2UgewotCQkJaW5mbygiRm9yY2luZyBwYWNrZXQgc2l6ZSB0byAlZCIsIHBhY2tldHNpemUpOworCQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIkZvcmNpbmcgcGFja2V0IHNpemUgdG8gJWRcbiIsCisJCQkJIHBhY2tldHNpemUpOwogCQkJb3Y1MThfc2V0X3BhY2tldF9zaXplKG92LCBwYWNrZXRzaXplKTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChwYWNrZXRzaXplID09IC0xKSB7CiAJCQlvdjUxMV9zZXRfcGFja2V0X3NpemUob3YsIHNpemUpOwogCQl9IGVsc2UgewotCQkJaW5mbygiRm9yY2luZyBwYWNrZXQgc2l6ZSB0byAlZCIsIHBhY2tldHNpemUpOworCQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIkZvcmNpbmcgcGFja2V0IHNpemUgdG8gJWRcbiIsCisJCQkJIHBhY2tldHNpemUpOwogCQkJb3Y1MTFfc2V0X3BhY2tldF9zaXplKG92LCBwYWNrZXRzaXplKTsKIAkJfQogCX0KQEAgLTQxMjEsNyArNDEyOSw3IEBACiAJCQlyZXR1cm4gLUVJTzsKIAogCQlpZiAoZm9yY2VfcGFsZXR0ZSAmJiBwLT5wYWxldHRlICE9IGZvcmNlX3BhbGV0dGUpIHsKLQkJCWluZm8oIlBhbGV0dGUgcmVqZWN0ZWQgKCVzKSIsCisJCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiUGFsZXR0ZSByZWplY3RlZCAoJXMpXG4iLAogCQkJICAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBwLT5wYWxldHRlKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtNDg0OSwyNiArNDg1NywyNyBAQAogCQllcnIoIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdHlwZSIpOwogCQlyZXR1cm4gLTE7CiAJfSBlbHNlIGlmICgocmMgJiAzKSA9PSAzKSB7Ci0JCWluZm8oIlNlbnNvciBpcyBhbiBPVjc2MTAiKTsKKwkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNlbnNvciBpcyBhbiBPVjc2MTBcbiIpOwogCQlvdi0+c2Vuc29yID0gU0VOX09WNzYxMDsKIAl9IGVsc2UgaWYgKChyYyAmIDMpID09IDEpIHsKIAkJLyogSSBkb24ndCBrbm93IHdoYXQncyBkaWZmZXJlbnQgYWJvdXQgdGhlIDc2QkUgeWV0LiAqLwogCQlpZiAoaTJjX3Iob3YsIDB4MTUpICYgMSkKLQkJCWluZm8oIlNlbnNvciBpcyBhbiBPVjc2MjBBRSIpOworCQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNlbnNvciBpcyBhbiBPVjc2MjBBRVxuIik7CiAJCWVsc2UKLQkJCWluZm8oIlNlbnNvciBpcyBhbiBPVjc2QkUiKTsKKwkJCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJTZW5zb3IgaXMgYW4gT1Y3NkJFXG4iKTsKIAogCQkvKiBPVjUxMSsgd2lsbCByZXR1cm4gYWxsIHplcm8gaXNvYyBkYXRhIHVubGVzcyB3ZQogCQkgKiBjb25maWd1cmUgdGhlIHNlbnNvciBhcyBhIDc2MjAuIFNvbWVvbmUgbmVlZHMgdG8KIAkJICogZmluZCB0aGUgZXhhY3QgcmVnLiBzZXR0aW5nIHRoYXQgY2F1c2VzIHRoaXMuICovCiAJCWlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxMVBMVVMpIHsKLQkJCWluZm8oIkVuYWJsaW5nIDUxMSsvNzYyMEFFIHdvcmthcm91bmQiKTsKKwkJCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsCisJCQkJICJFbmFibGluZyA1MTErLzc2MjBBRSB3b3JrYXJvdW5kXG4iKTsKIAkJCW92LT5zZW5zb3IgPSBTRU5fT1Y3NjIwOwogCQl9IGVsc2UgewogCQkJb3YtPnNlbnNvciA9IFNFTl9PVjc2QkU7CiAJCX0KIAl9IGVsc2UgaWYgKChyYyAmIDMpID09IDApIHsKLQkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNzYyMCIpOworCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yIGlzIGFuIE9WNzYyMFxuIik7CiAJCW92LT5zZW5zb3IgPSBTRU5fT1Y3NjIwOwogCX0gZWxzZSB7CiAJCWVycigiVW5rbm93biBpbWFnZSBzZW5zb3IgdmVyc2lvbjogJWQiLCByYyAmIDMpOwpAQCAtNTAyNCwxNiArNTAzMywxNiBAQAogCiAJaWYgKChyYyAmIDMpID09IDApIHsKIAkJb3YtPnNlbnNvciA9IFNFTl9PVjY2MzA7Ci0JCWluZm8oIlNlbnNvciBpcyBhbiBPVjY2MzAiKTsKKwkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNlbnNvciBpcyBhbiBPVjY2MzBcbiIpOwogCX0gZWxzZSBpZiAoKHJjICYgMykgPT0gMSkgewogCQlvdi0+c2Vuc29yID0gU0VOX09WNjYyMDsKLQkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNjYyMCIpOworCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yIGlzIGFuIE9WNjYyMFxuIik7CiAJfSBlbHNlIGlmICgocmMgJiAzKSA9PSAyKSB7CiAJCW92LT5zZW5zb3IgPSBTRU5fT1Y2NjMwOwotCQlpbmZvKCJTZW5zb3IgaXMgYW4gT1Y2NjMwQUUiKTsKKwkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNlbnNvciBpcyBhbiBPVjY2MzBBRVxuIik7CiAJfSBlbHNlIGlmICgocmMgJiAzKSA9PSAzKSB7CiAJCW92LT5zZW5zb3IgPSBTRU5fT1Y2NjMwOwotCQlpbmZvKCJTZW5zb3IgaXMgYW4gT1Y2NjMwQUYiKTsKKwkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNlbnNvciBpcyBhbiBPVjY2MzBBRlxuIik7CiAJfQogCiAJLyogU2V0IHNlbnNvci1zcGVjaWZpYyB2YXJzICovCkBAIC01MDg4LDEwICs1MDk3LDEwIEBACiAJCQllcnIoIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdHlwZSIpOwogCQkJcmV0dXJuIC0xOwogCQl9IGVsc2UgaWYgKChyYyAmIDB4MGYpID09IDApIHsKLQkJCWluZm8oIlNlbnNvciBpcyBhIEtTMDEyNyIpOworCQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNlbnNvciBpcyBhIEtTMDEyN1xuIik7CiAJCQlvdi0+c2Vuc29yID0gU0VOX0tTMDEyNzsKIAkJfSBlbHNlIGlmICgocmMgJiAweDBmKSA9PSA5KSB7Ci0JCQlpbmZvKCJTZW5zb3IgaXMgYSBLUzAxMjdCIFJldi4gQSIpOworCQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNlbnNvciBpcyBhIEtTMDEyN0IgUmV2LiBBXG4iKTsKIAkJCW92LT5zZW5zb3IgPSBTRU5fS1MwMTI3QjsKIAkJfQogCX0gZWxzZSB7CkBAIC01MjAwLDcgKzUyMDksOCBAQAogCQllcnIoIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdmVyc2lvbiIpOwogCQlyZXR1cm4gLTE7CiAJfSBlbHNlIHsKLQkJaW5mbygiU2Vuc29yIGlzIGFuIFNBQTcxMTFBICh2ZXJzaW9uIDB4JXgpIiwgcmMpOworCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LAorCQkJICJTZW5zb3IgaXMgYW4gU0FBNzExMUEgKHZlcnNpb24gMHgleClcbiIsIHJjKTsKIAkJb3YtPnNlbnNvciA9IFNFTl9TQUE3MTExQTsKIAl9CiAKQEAgLTUyMTAsNyArNTIyMCw4IEBACiAJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTExKQogCQlyZWdfdyhvdiwgMHgxMSwgMHgwMCk7CiAJZWxzZQotCQl3YXJuKCJTQUE3MTExQSBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIE9WNTE4L09WNTE4KyIpOworCQlkZXZfd2Fybigmb3YtPmRldi0+ZGV2LAorCQkJICJTQUE3MTExQSBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIE9WNTE4L09WNTE4K1xuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyNjIsNyArNTI3Myw3IEBACiAKIAlQREVCVUcgKDEsICJDdXN0b21JRCA9ICVkIiwgb3YtPmN1c3RvbWlkKTsKIAlvdi0+ZGVzYyA9IHN5bWJvbGljKGNhbWxpc3QsIG92LT5jdXN0b21pZCk7Ci0JaW5mbygibW9kZWw6ICVzIiwgb3YtPmRlc2MpOworCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJtb2RlbDogJXNcbiIsIG92LT5kZXNjKTsKIAogCWlmICgwID09IHN0cmNtcChvdi0+ZGVzYywgTk9UX0RFRklORURfU1RSKSkgewogCQllcnIoIkNhbWVyYSB0eXBlICglZCkgbm90IHJlY29nbml6ZWQiLCBvdi0+Y3VzdG9taWQpOwpAQCAtNTQyNiw3ICs1NDM3LDggQEAKIAlQREVCVUcoNCwgIiIpOwogCiAJLyogRmlyc3QgNSBiaXRzIG9mIGN1c3RvbSBJRCByZWcgYXJlIGEgcmV2aXNpb24gSUQgb24gT1Y1MTggKi8KLQlpbmZvKCJEZXZpY2UgcmV2aXNpb24gJWQiLCAweDFGICYgcmVnX3Iob3YsIFI1MTFfU1lTX0NVU1RfSUQpKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiRGV2aWNlIHJldmlzaW9uICVkXG4iLAorCQkgMHgxRiAmIHJlZ19yKG92LCBSNTExX1NZU19DVVNUX0lEKSk7CiAKIAkvKiBHaXZlIGl0IHRoZSBkZWZhdWx0IGRlc2NyaXB0aW9uICovCiAJb3YtPmRlc2MgPSBzeW1ib2xpYyhjYW1saXN0LCAwKTsKQEAgLTU0NDgsNyArNTQ2MCw4IEBACiAJICogcmVxdWlyZWQuIE9WNTE4IGhhcyBubyB1bmNvbXByZXNzZWQgbW9kZSwgdG8gc2F2ZSBSQU0uICovCiAJaWYgKCFkdW1wcGl4ICYmICFvdi0+Y29tcHJlc3MpIHsKIAkJb3YtPmNvbXByZXNzID0gMTsKLQkJd2FybigiQ29tcHJlc3Npb24gcmVxdWlyZWQgd2l0aCBPVjUxOC4uLmVuYWJsaW5nIik7CisJCWRldl93YXJuKCZvdi0+ZGV2LT5kZXYsCisJCQkgIkNvbXByZXNzaW9uIHJlcXVpcmVkIHdpdGggT1Y1MTguLi5lbmFibGluZ1xuIik7CiAJfQogCiAJaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTE4KSB7CkBAIC01NzczLDcgKzU3ODYsOCBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWluZm8oIlVTQiAlcyB2aWRlbyBkZXZpY2UgZm91bmQiLCBzeW1ib2xpYyhicmdsaXN0LCBvdi0+YnJpZGdlKSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlVTQiAlcyB2aWRlbyBkZXZpY2UgZm91bmRcbiIsCisJCSBzeW1ib2xpYyhicmdsaXN0LCBvdi0+YnJpZGdlKSk7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZvdi0+d3EpOwogCkBAIC01ODU0LDggKzU4NjgsOCBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWluZm8oIkRldmljZSBhdCAlcyByZWdpc3RlcmVkIHRvIG1pbm9yICVkIiwgb3YtPnVzYl9wYXRoLAotCSAgICAgb3YtPnZkZXYtPm1pbm9yKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiRGV2aWNlIGF0ICVzIHJlZ2lzdGVyZWQgdG8gbWlub3IgJWRcbiIsCisJCSBvdi0+dXNiX3BhdGgsIG92LT52ZGV2LT5taW5vcik7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIG92KTsKIAlpZiAob3ZfY3JlYXRlX3N5c2ZzKG92LT52ZGV2KSkgewpAQCAtNTk1OCw3ICs1OTcyLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dDsKIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIiA6ICIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNTk2OCw4ICs1OTgzLDcgQEAKIHVzYl9vdjUxMV9leGl0KHZvaWQpCiB7CiAJdXNiX2RlcmVnaXN0ZXIoJm92NTExX2RyaXZlcik7Ci0JaW5mbygiZHJpdmVyIGRlcmVnaXN0ZXJlZCIpOwotCisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBkcml2ZXIgZGVyZWdpc3RlcmVkXG4iKTsKIH0KIAogbW9kdWxlX2luaXQodXNiX292NTExX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5oCmluZGV4IGJhZGVkMTIuLjcwZDk5ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmgKQEAgLTEyLDcgKzEyLDggQEAKIAogI2lmZGVmIE9WNTExX0RFQlVHCiAJI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotCQlpZiAoZGVidWcgPj0gKGxldmVsKSkgaW5mbygiWyVzOiVkXSAiIGZtdCwgXAorCQlpZiAoZGVidWcgPj0gKGxldmVsKSkJXAorCQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiWyVzOiVkXSBcbiIgZm10LCBcCiAJCV9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpCiAjZWxzZQogCSNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlKDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX2NvcmUuYwppbmRleCAwNjVjMjQ1Li4yYzRhY2JmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9jb3JlLmMKQEAgLTQ5LDEyICs0OSw2IEBACiAjZGVmaW5lIEdFTkVSSUNfUkVHX0lEX0xPVyAgICAgICAgMHgxRAkvKiBtYW51ZmFjdHVyZXIgSUQgTFNCICovCiAjZGVmaW5lIEdFTkVSSUNfUkVHX0NPTV9JICAgICAgICAgMHgyOQkvKiBtaXNjIElEIGJpdHMgKi8KIAotZXh0ZXJuIHN0cnVjdCBvdmNhbWNoaXBfb3BzIG92NngyMF9vcHM7Ci1leHRlcm4gc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y2eDMwX29wczsKLWV4dGVybiBzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyBvdjd4MTBfb3BzOwotZXh0ZXJuIHN0cnVjdCBvdmNhbWNoaXBfb3BzIG92N3gyMF9vcHM7Ci1leHRlcm4gc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y3NmJlX29wczsKLQogc3RhdGljIGNoYXIgKmNoaXBfbmFtZXNbTlVNX0NDX1RZUEVTXSA9IHsKIAlbQ0NfVU5LTk9XTl0JPSAiVW5rbm93biBjaGlwIiwKIAlbQ0NfT1Y3NkJFXQk9ICJPVjc2QkUiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9wcml2LmgKaW5kZXggOWFmYTRmZS4uYTA1NjUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfcHJpdi5oCkBAIC01Myw2ICs1MywxMiBAQAogCWludCBpbml0aWFsaXplZDsgICAgICAgICAgIC8qIE9WQ0FNQ0hJUF9DTURfSU5JVElBTElaRSB3YXMgc3VjY2Vzc2Z1bCAqLwogfTsKIAorZXh0ZXJuIHN0cnVjdCBvdmNhbWNoaXBfb3BzIG92NngyMF9vcHM7CitleHRlcm4gc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y2eDMwX29wczsKK2V4dGVybiBzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyBvdjd4MTBfb3BzOworZXh0ZXJuIHN0cnVjdCBvdmNhbWNoaXBfb3BzIG92N3gyMF9vcHM7CitleHRlcm4gc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y3NmJlX29wczsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiAgICAgICAgICAgICAgSTJDIEkvTyAgICAgICAgICAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcG1zLmMKaW5kZXggN2M4NGY3OS4uOTk0ODA3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Btcy5jCkBAIC00Nyw2ICs0Nyw3IEBACiAJc3RydWN0IHZpZGVvX3BpY3R1cmUgcGljdHVyZTsKIAlpbnQgaGVpZ2h0OwogCWludCB3aWR0aDsKKwl1bnNpZ25lZCBsb25nIGluX3VzZTsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKQEAgLTg4MSwxMCArODgyLDI3IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIGludCBwbXNfZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHBtc19kZXZpY2UgKnBkID0gKHN0cnVjdCBwbXNfZGV2aWNlICopdjsKKworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZwZC0+aW5fdXNlKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcG1zX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCBwbXNfZGV2aWNlICpwZCA9IChzdHJ1Y3QgcG1zX2RldmljZSAqKXY7CisKKwljbGVhcl9iaXQoMCwgJnBkLT5pbl91c2UpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwbXNfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gcG1zX2V4Y2x1c2l2ZV9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHBtc19leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwgICAgICAgICAgPSBwbXNfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC04OTcsNiArOTE1LDcgQEAKIHsKIAkubmFtZQkJPSAiTWVkaWF2aXNpb24gUE1TIiwKIAkuZm9wcyAgICAgICAgICAgPSAmcG1zX2ZvcHMsCisJLnJlbGVhc2UgCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBtc19kZXZpY2UgcG1zX2RldmljZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuYwppbmRleCAwNzY0ZmJmLi4yMDNmNTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5jCkBAIC0xMzQsMTMgKzEzNCwxNyBAQAogCiAKIC8qIFJldHJpZXZlIGNvbnRyb2wncyBkZWZhdWx0IHZhbHVlIChhbnkgdHlwZSkgKi8KLWludCBwdnIyX2N0cmxfZ2V0X2RlZihzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyKQoraW50IHB2cjJfY3RybF9nZXRfZGVmKHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsIGludCAqdmFscHRyKQogewogCWludCByZXQgPSAwOwogCWlmICghY3B0cikgcmV0dXJuIDA7CiAJTE9DS19UQUtFKGNwdHItPmhkdy0+YmlnX2xvY2spOyBkbyB7CiAJCWlmIChjcHRyLT5pbmZvLT50eXBlID09IHB2cjJfY3RsX2ludCkgewotCQkJcmV0ID0gY3B0ci0+aW5mby0+ZGVmYXVsdF92YWx1ZTsKKwkJCWlmIChjcHRyLT5pbmZvLT5nZXRfZGVmX3ZhbHVlKSB7CisJCQkJcmV0ID0gY3B0ci0+aW5mby0+Z2V0X2RlZl92YWx1ZShjcHRyLCB2YWxwdHIpOworCQkJfSBlbHNlIHsKKwkJCQkqdmFscHRyID0gY3B0ci0+aW5mby0+ZGVmYXVsdF92YWx1ZTsKKwkJCX0KIAkJfQogCX0gd2hpbGUoMCk7IExPQ0tfR0lWRShjcHRyLT5oZHctPmJpZ19sb2NrKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5oCmluZGV4IDAzNzFhZTYuLjc5NGZmOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jdHJsLmgKQEAgLTQ5LDcgKzQ5LDcgQEAKIGludCBwdnIyX2N0cmxfZ2V0X21pbihzdHJ1Y3QgcHZyMl9jdHJsICopOwogCiAvKiBSZXRyaWV2ZSBjb250cm9sJ3MgZGVmYXVsdCB2YWx1ZSAoYW55IHR5cGUpICovCi1pbnQgcHZyMl9jdHJsX2dldF9kZWYoc3RydWN0IHB2cjJfY3RybCAqKTsKK2ludCBwdnIyX2N0cmxfZ2V0X2RlZihzdHJ1Y3QgcHZyMl9jdHJsICosIGludCAqdmFscHRyKTsKIAogLyogUmV0cmlldmUgY29udHJvbCdzIGVudW1lcmF0aW9uIGNvdW50IChlbnVtIG9ubHkpICovCiBpbnQgcHZyMl9jdHJsX2dldF9jbnQoc3RydWN0IHB2cjJfY3RybCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKaW5kZXggNjU3Zjg2MS4uZGU3ZWU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKQEAgLTgyLDYgKzgyLDcgQEAKIAogCS8qIENvbnRyb2wncyBpbXBsZW1lbnRhdGlvbiAqLwogCXB2cjJfY3RsZl9nZXRfdmFsdWUgZ2V0X3ZhbHVlOyAgICAgIC8qIEdldCBpdHMgdmFsdWUgKi8KKwlwdnIyX2N0bGZfZ2V0X3ZhbHVlIGdldF9kZWZfdmFsdWU7ICAvKiBHZXQgaXRzIGRlZmF1bHQgdmFsdWUgKi8KIAlwdnIyX2N0bGZfZ2V0X3ZhbHVlIGdldF9taW5fdmFsdWU7ICAvKiBHZXQgbWluaW11bSBhbGxvd2VkIHZhbHVlICovCiAJcHZyMl9jdGxmX2dldF92YWx1ZSBnZXRfbWF4X3ZhbHVlOyAgLyogR2V0IG1heGltdW0gYWxsb3dlZCB2YWx1ZSAqLwogCXB2cjJfY3RsZl9zZXRfdmFsdWUgc2V0X3ZhbHVlOyAgICAgIC8qIFNldCBpdHMgdmFsdWUgKi8KQEAgLTMwNyw2ICszMDgsMTAgQEAKIAlzdHJ1Y3QgdjRsMl90dW5lciB0dW5lcl9zaWduYWxfaW5mbzsKIAlpbnQgdHVuZXJfc2lnbmFsX3N0YWxlOwogCisJLyogQ3JvcHBpbmcgY2FwYWJpbGl0eSBpbmZvICovCisJc3RydWN0IHY0bDJfY3JvcGNhcCBjcm9wY2FwX2luZm87CisJaW50IGNyb3BjYXBfc3RhbGU7CisKIAkvKiBWaWRlbyBzdGFuZGFyZCBoYW5kbGluZyAqLwogCXY0bDJfc3RkX2lkIHN0ZF9tYXNrX2VlcHJvbTsgLy8gSGFyZHdhcmUgc3VwcG9ydGVkIHNlbGVjdGlvbnMKIAl2NGwyX3N0ZF9pZCBzdGRfbWFza19hdmFpbDsgIC8vIFdoaWNoIHN0YW5kYXJkcyB3ZSBtYXkgc2VsZWN0IGZyb20KQEAgLTM2Nyw2ICszNzIsMTAgQEAKIAlWQ1JFQVRFX0RBVEEoYmFzcyk7CiAJVkNSRUFURV9EQVRBKHRyZWJsZSk7CiAJVkNSRUFURV9EQVRBKG11dGUpOworCVZDUkVBVEVfREFUQShjcm9wbCk7CisJVkNSRUFURV9EQVRBKGNyb3B0KTsKKwlWQ1JFQVRFX0RBVEEoY3JvcHcpOworCVZDUkVBVEVfREFUQShjcm9waCk7CiAJVkNSRUFURV9EQVRBKGlucHV0KTsKIAlWQ1JFQVRFX0RBVEEoYXVkaW9tb2RlKTsKIAlWQ1JFQVRFX0RBVEEocmVzX2hvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCmluZGV4IGYwNTFjNmEuLjk0MjY1YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jCkBAIC0yOTgsNiArMjk4LDcgQEAKIAkJCQl1bnNpZ25lZCBpbnQgdGltZW91dCxpbnQgcHJvYmVfZmwsCiAJCQkJdm9pZCAqd3JpdGVfZGF0YSx1bnNpZ25lZCBpbnQgd3JpdGVfbGVuLAogCQkJCXZvaWQgKnJlYWRfZGF0YSx1bnNpZ25lZCBpbnQgcmVhZF9sZW4pOworc3RhdGljIGludCBwdnIyX2hkd19jaGVja19jcm9wY2FwKHN0cnVjdCBwdnIyX2hkdyAqaGR3KTsKIAogCiBzdGF0aWMgdm9pZCB0cmFjZV9zdGJpdChjb25zdCBjaGFyICpuYW1lLGludCB2YWwpCkBAIC00MDIsNiArNDAzLDE5NCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGN0cmxfY3JvcGxfbWluX2dldChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLCBpbnQgKmxlZnQpCit7CisJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2FwID0gJmNwdHItPmhkdy0+Y3JvcGNhcF9pbmZvOworCWludCBzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChjcHRyLT5oZHcpOworCWlmIChzdGF0ICE9IDApIHsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCSpsZWZ0ID0gY2FwLT5ib3VuZHMubGVmdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX2Nyb3BsX21heF9nZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0ciwgaW50ICpsZWZ0KQoreworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCA9ICZjcHRyLT5oZHctPmNyb3BjYXBfaW5mbzsKKwlpbnQgc3RhdCA9IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoY3B0ci0+aGR3KTsKKwlpZiAoc3RhdCAhPSAwKSB7CisJCXJldHVybiBzdGF0OworCX0KKwkqbGVmdCA9IGNhcC0+Ym91bmRzLmxlZnQ7CisJaWYgKGNhcC0+Ym91bmRzLndpZHRoID4gY3B0ci0+aGR3LT5jcm9wd192YWwpIHsKKwkJKmxlZnQgKz0gY2FwLT5ib3VuZHMud2lkdGggLSBjcHRyLT5oZHctPmNyb3B3X3ZhbDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3RybF9jcm9wdF9taW5fZ2V0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsIGludCAqdG9wKQoreworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCA9ICZjcHRyLT5oZHctPmNyb3BjYXBfaW5mbzsKKwlpbnQgc3RhdCA9IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoY3B0ci0+aGR3KTsKKwlpZiAoc3RhdCAhPSAwKSB7CisJCXJldHVybiBzdGF0OworCX0KKwkqdG9wID0gY2FwLT5ib3VuZHMudG9wOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN0cmxfY3JvcHRfbWF4X2dldChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLCBpbnQgKnRvcCkKK3sKKwlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjYXAgPSAmY3B0ci0+aGR3LT5jcm9wY2FwX2luZm87CisJaW50IHN0YXQgPSBwdnIyX2hkd19jaGVja19jcm9wY2FwKGNwdHItPmhkdyk7CisJaWYgKHN0YXQgIT0gMCkgeworCQlyZXR1cm4gc3RhdDsKKwl9CisJKnRvcCA9IGNhcC0+Ym91bmRzLnRvcDsKKwlpZiAoY2FwLT5ib3VuZHMuaGVpZ2h0ID4gY3B0ci0+aGR3LT5jcm9waF92YWwpIHsKKwkJKnRvcCArPSBjYXAtPmJvdW5kcy5oZWlnaHQgLSBjcHRyLT5oZHctPmNyb3BoX3ZhbDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3RybF9jcm9wd19tYXhfZ2V0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsIGludCAqdmFsKQoreworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCA9ICZjcHRyLT5oZHctPmNyb3BjYXBfaW5mbzsKKwlpbnQgc3RhdCA9IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoY3B0ci0+aGR3KTsKKwlpZiAoc3RhdCAhPSAwKSB7CisJCXJldHVybiBzdGF0OworCX0KKwkqdmFsID0gMDsKKwlpZiAoY2FwLT5ib3VuZHMud2lkdGggPiBjcHRyLT5oZHctPmNyb3BsX3ZhbCkgeworCQkqdmFsID0gY2FwLT5ib3VuZHMud2lkdGggLSBjcHRyLT5oZHctPmNyb3BsX3ZhbDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3RybF9jcm9waF9tYXhfZ2V0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsIGludCAqdmFsKQoreworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCA9ICZjcHRyLT5oZHctPmNyb3BjYXBfaW5mbzsKKwlpbnQgc3RhdCA9IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoY3B0ci0+aGR3KTsKKwlpZiAoc3RhdCAhPSAwKSB7CisJCXJldHVybiBzdGF0OworCX0KKwkqdmFsID0gMDsKKwlpZiAoY2FwLT5ib3VuZHMuaGVpZ2h0ID4gY3B0ci0+aGR3LT5jcm9wdF92YWwpIHsKKwkJKnZhbCA9IGNhcC0+Ym91bmRzLmhlaWdodCAtIGNwdHItPmhkdy0+Y3JvcHRfdmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX2dldF9jcm9wY2FwYmwoc3RydWN0IHB2cjJfY3RybCAqY3B0ciwgaW50ICp2YWwpCit7CisJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2FwID0gJmNwdHItPmhkdy0+Y3JvcGNhcF9pbmZvOworCWludCBzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChjcHRyLT5oZHcpOworCWlmIChzdGF0ICE9IDApIHsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCSp2YWwgPSBjYXAtPmJvdW5kcy5sZWZ0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN0cmxfZ2V0X2Nyb3BjYXBidChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLCBpbnQgKnZhbCkKK3sKKwlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjYXAgPSAmY3B0ci0+aGR3LT5jcm9wY2FwX2luZm87CisJaW50IHN0YXQgPSBwdnIyX2hkd19jaGVja19jcm9wY2FwKGNwdHItPmhkdyk7CisJaWYgKHN0YXQgIT0gMCkgeworCQlyZXR1cm4gc3RhdDsKKwl9CisJKnZhbCA9IGNhcC0+Ym91bmRzLnRvcDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX2dldF9jcm9wY2FwYncoc3RydWN0IHB2cjJfY3RybCAqY3B0ciwgaW50ICp2YWwpCit7CisJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2FwID0gJmNwdHItPmhkdy0+Y3JvcGNhcF9pbmZvOworCWludCBzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChjcHRyLT5oZHcpOworCWlmIChzdGF0ICE9IDApIHsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCSp2YWwgPSBjYXAtPmJvdW5kcy53aWR0aDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX2dldF9jcm9wY2FwYmgoc3RydWN0IHB2cjJfY3RybCAqY3B0ciwgaW50ICp2YWwpCit7CisJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2FwID0gJmNwdHItPmhkdy0+Y3JvcGNhcF9pbmZvOworCWludCBzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChjcHRyLT5oZHcpOworCWlmIChzdGF0ICE9IDApIHsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCSp2YWwgPSBjYXAtPmJvdW5kcy5oZWlnaHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3RybF9nZXRfY3JvcGNhcGRsKHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsIGludCAqdmFsKQoreworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCA9ICZjcHRyLT5oZHctPmNyb3BjYXBfaW5mbzsKKwlpbnQgc3RhdCA9IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoY3B0ci0+aGR3KTsKKwlpZiAoc3RhdCAhPSAwKSB7CisJCXJldHVybiBzdGF0OworCX0KKwkqdmFsID0gY2FwLT5kZWZyZWN0LmxlZnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3RybF9nZXRfY3JvcGNhcGR0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsIGludCAqdmFsKQoreworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCA9ICZjcHRyLT5oZHctPmNyb3BjYXBfaW5mbzsKKwlpbnQgc3RhdCA9IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoY3B0ci0+aGR3KTsKKwlpZiAoc3RhdCAhPSAwKSB7CisJCXJldHVybiBzdGF0OworCX0KKwkqdmFsID0gY2FwLT5kZWZyZWN0LnRvcDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX2dldF9jcm9wY2FwZHcoc3RydWN0IHB2cjJfY3RybCAqY3B0ciwgaW50ICp2YWwpCit7CisJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2FwID0gJmNwdHItPmhkdy0+Y3JvcGNhcF9pbmZvOworCWludCBzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChjcHRyLT5oZHcpOworCWlmIChzdGF0ICE9IDApIHsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCSp2YWwgPSBjYXAtPmRlZnJlY3Qud2lkdGg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3RybF9nZXRfY3JvcGNhcGRoKHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsIGludCAqdmFsKQoreworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCA9ICZjcHRyLT5oZHctPmNyb3BjYXBfaW5mbzsKKwlpbnQgc3RhdCA9IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoY3B0ci0+aGR3KTsKKwlpZiAoc3RhdCAhPSAwKSB7CisJCXJldHVybiBzdGF0OworCX0KKwkqdmFsID0gY2FwLT5kZWZyZWN0LmhlaWdodDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX2dldF9jcm9wY2FwcGFuKHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsIGludCAqdmFsKQoreworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCA9ICZjcHRyLT5oZHctPmNyb3BjYXBfaW5mbzsKKwlpbnQgc3RhdCA9IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoY3B0ci0+aGR3KTsKKwlpZiAoc3RhdCAhPSAwKSB7CisJCXJldHVybiBzdGF0OworCX0KKwkqdmFsID0gY2FwLT5waXhlbGFzcGVjdC5udW1lcmF0b3I7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3RybF9nZXRfY3JvcGNhcHBhZChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLCBpbnQgKnZhbCkKK3sKKwlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjYXAgPSAmY3B0ci0+aGR3LT5jcm9wY2FwX2luZm87CisJaW50IHN0YXQgPSBwdnIyX2hkd19jaGVja19jcm9wY2FwKGNwdHItPmhkdyk7CisJaWYgKHN0YXQgIT0gMCkgeworCQlyZXR1cm4gc3RhdDsKKwl9CisJKnZhbCA9IGNhcC0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3I7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY3RybF92cmVzX21heF9nZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0cixpbnQgKnZwKQogewogCS8qIEFjdHVhbCBtYXhpbXVtIGRlcGVuZHMgb24gdGhlIHZpZGVvIHN0YW5kYXJkIGluIGVmZmVjdC4gKi8KQEAgLTc3OSw2ICs5NjgsMTAgQEAKIFZDUkVBVEVfRlVOQ1MoYmFzcykKIFZDUkVBVEVfRlVOQ1ModHJlYmxlKQogVkNSRUFURV9GVU5DUyhtdXRlKQorVkNSRUFURV9GVU5DUyhjcm9wbCkKK1ZDUkVBVEVfRlVOQ1MoY3JvcHQpCitWQ1JFQVRFX0ZVTkNTKGNyb3B3KQorVkNSRUFURV9GVU5DUyhjcm9waCkKIFZDUkVBVEVfRlVOQ1MoYXVkaW9tb2RlKQogVkNSRUFURV9GVU5DUyhyZXNfaG9yKQogVkNSRUFURV9GVU5DUyhyZXNfdmVyKQpAQCAtODQ5LDYgKzEwNDIsNzIgQEAKIAkJLmRlZmF1bHRfdmFsdWUgPSAwLAogCQlERUZSRUYobXV0ZSksCiAJCURFRkJPT0wsCisJfSwgeworCQkuZGVzYyA9ICJDYXB0dXJlIGNyb3AgbGVmdCBtYXJnaW4iLAorCQkubmFtZSA9ICJjcm9wX2xlZnQiLAorCQkuaW50ZXJuYWxfaWQgPSBQVlIyX0NJRF9DUk9QTCwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCQlERUZSRUYoY3JvcGwpLAorCQlERUZJTlQoLTEyOSwgMzQwKSwKKwkJLmdldF9taW5fdmFsdWUgPSBjdHJsX2Nyb3BsX21pbl9nZXQsCisJCS5nZXRfbWF4X3ZhbHVlID0gY3RybF9jcm9wbF9tYXhfZ2V0LAorCQkuZ2V0X2RlZl92YWx1ZSA9IGN0cmxfZ2V0X2Nyb3BjYXBkbCwKKwl9LCB7CisJCS5kZXNjID0gIkNhcHR1cmUgY3JvcCB0b3AgbWFyZ2luIiwKKwkJLm5hbWUgPSAiY3JvcF90b3AiLAorCQkuaW50ZXJuYWxfaWQgPSBQVlIyX0NJRF9DUk9QVCwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCQlERUZSRUYoY3JvcHQpLAorCQlERUZJTlQoLTM1LCA1NDQpLAorCQkuZ2V0X21pbl92YWx1ZSA9IGN0cmxfY3JvcHRfbWluX2dldCwKKwkJLmdldF9tYXhfdmFsdWUgPSBjdHJsX2Nyb3B0X21heF9nZXQsCisJCS5nZXRfZGVmX3ZhbHVlID0gY3RybF9nZXRfY3JvcGNhcGR0LAorCX0sIHsKKwkJLmRlc2MgPSAiQ2FwdHVyZSBjcm9wIHdpZHRoIiwKKwkJLm5hbWUgPSAiY3JvcF93aWR0aCIsCisJCS5pbnRlcm5hbF9pZCA9IFBWUjJfQ0lEX0NST1BXLAorCQkuZGVmYXVsdF92YWx1ZSA9IDcyMCwKKwkJREVGUkVGKGNyb3B3KSwKKwkJLmdldF9tYXhfdmFsdWUgPSBjdHJsX2Nyb3B3X21heF9nZXQsCisJCS5nZXRfZGVmX3ZhbHVlID0gY3RybF9nZXRfY3JvcGNhcGR3LAorCX0sIHsKKwkJLmRlc2MgPSAiQ2FwdHVyZSBjcm9wIGhlaWdodCIsCisJCS5uYW1lID0gImNyb3BfaGVpZ2h0IiwKKwkJLmludGVybmFsX2lkID0gUFZSMl9DSURfQ1JPUEgsCisJCS5kZWZhdWx0X3ZhbHVlID0gNDgwLAorCQlERUZSRUYoY3JvcGgpLAorCQkuZ2V0X21heF92YWx1ZSA9IGN0cmxfY3JvcGhfbWF4X2dldCwKKwkJLmdldF9kZWZfdmFsdWUgPSBjdHJsX2dldF9jcm9wY2FwZGgsCisJfSwgeworCQkuZGVzYyA9ICJDYXB0dXJlIGNhcGFiaWxpdHkgcGl4ZWwgYXNwZWN0IG51bWVyYXRvciIsCisJCS5uYW1lID0gImNyb3BjYXBfcGl4ZWxfbnVtZXJhdG9yIiwKKwkJLmludGVybmFsX2lkID0gUFZSMl9DSURfQ1JPUENBUFBBTiwKKwkJLmdldF92YWx1ZSA9IGN0cmxfZ2V0X2Nyb3BjYXBwYW4sCisJfSwgeworCQkuZGVzYyA9ICJDYXB0dXJlIGNhcGFiaWxpdHkgcGl4ZWwgYXNwZWN0IGRlbm9taW5hdG9yIiwKKwkJLm5hbWUgPSAiY3JvcGNhcF9waXhlbF9kZW5vbWluYXRvciIsCisJCS5pbnRlcm5hbF9pZCA9IFBWUjJfQ0lEX0NST1BDQVBQQUQsCisJCS5nZXRfdmFsdWUgPSBjdHJsX2dldF9jcm9wY2FwcGFkLAorCX0sIHsKKwkJLmRlc2MgPSAiQ2FwdHVyZSBjYXBhYmlsaXR5IGJvdW5kcyB0b3AiLAorCQkubmFtZSA9ICJjcm9wY2FwX2JvdW5kc190b3AiLAorCQkuaW50ZXJuYWxfaWQgPSBQVlIyX0NJRF9DUk9QQ0FQQlQsCisJCS5nZXRfdmFsdWUgPSBjdHJsX2dldF9jcm9wY2FwYnQsCisJfSwgeworCQkuZGVzYyA9ICJDYXB0dXJlIGNhcGFiaWxpdHkgYm91bmRzIGxlZnQiLAorCQkubmFtZSA9ICJjcm9wY2FwX2JvdW5kc19sZWZ0IiwKKwkJLmludGVybmFsX2lkID0gUFZSMl9DSURfQ1JPUENBUEJMLAorCQkuZ2V0X3ZhbHVlID0gY3RybF9nZXRfY3JvcGNhcGJsLAorCX0sIHsKKwkJLmRlc2MgPSAiQ2FwdHVyZSBjYXBhYmlsaXR5IGJvdW5kcyB3aWR0aCIsCisJCS5uYW1lID0gImNyb3BjYXBfYm91bmRzX3dpZHRoIiwKKwkJLmludGVybmFsX2lkID0gUFZSMl9DSURfQ1JPUENBUEJXLAorCQkuZ2V0X3ZhbHVlID0gY3RybF9nZXRfY3JvcGNhcGJ3LAorCX0sIHsKKwkJLmRlc2MgPSAiQ2FwdHVyZSBjYXBhYmlsaXR5IGJvdW5kcyBoZWlnaHQiLAorCQkubmFtZSA9ICJjcm9wY2FwX2JvdW5kc19oZWlnaHQiLAorCQkuaW50ZXJuYWxfaWQgPSBQVlIyX0NJRF9DUk9QQ0FQQkgsCisJCS5nZXRfdmFsdWUgPSBjdHJsX2dldF9jcm9wY2FwYmgsCiAJfSx7CiAJCS5kZXNjID0gIlZpZGVvIFNvdXJjZSIsCiAJCS5uYW1lID0gImlucHV0IiwKQEAgLTEzMTMsOSArMTU3MiwxOSBAQAogCQlpZiAoYmNudCA+IEZJUk1XQVJFX0NIVU5LX1NJWkUpIGJjbnQgPSBGSVJNV0FSRV9DSFVOS19TSVpFOwogCQltZW1jcHkoZndfcHRyLCBmd19lbnRyeS0+ZGF0YSArIGZ3X2RvbmUsIGJjbnQpOwogCQkvKiBVc2Jzbm9vcCBsb2cgc2hvd3MgdGhhdCB3ZSBtdXN0IHN3YXAgYnl0ZXMuLi4gKi8KKwkJLyogU29tZSBiYWNrZ3JvdW5kIGluZm86IFRoZSBkYXRhIGJlaW5nIHN3YXBwZWQgaGVyZSBpcyBhCisJCSAgIGZpcm13YXJlIGltYWdlIGRlc3RpbmVkIGZvciB0aGUgbXBlZyBlbmNvZGVyIGNoaXAgdGhhdAorCQkgICBsaXZlcyBhdCB0aGUgb3RoZXIgZW5kIG9mIGEgVVNCIGVuZHBvaW50LiAgVGhlIGVuY29kZXIKKwkJICAgY2hpcCBhbHdheXMgdGFsa3MgaW4gMzIgYml0IGNodW5rcyBhbmQgaXRzIHN0b3JhZ2UgaXMKKwkJICAgb3JnYW5pemVkIGludG8gMzIgYml0IHdvcmRzLiAgSG93ZXZlciBmcm9tIHRoZSBmaWxlCisJCSAgIHN5c3RlbSB0byB0aGUgZW5jb2RlciBjaGlwIGV2ZXJ5dGhpbmcgaXMgcHVyZWx5IGEgYnl0ZQorCQkgICBzdHJlYW0uICBUaGUgZmlybXdhcmUgZmlsZSdzIGNvbnRlbnRzIGFyZSBhbHdheXMgMzIgYml0CisJCSAgIHN3YXBwZWQgZnJvbSB3aGF0IHRoZSBlbmNvZGVyIGV4cGVjdHMuICBUaHVzIHRoZSBuZWVkCisJCSAgIGFsd2F5cyBleGlzdHMgdG8gc3dhcCB0aGUgYnl0ZXMgcmVnYXJkbGVzcyBvZiB0aGUgZW5kaWFuCisJCSAgIHR5cGUgb2YgdGhlIGhvc3QgcHJvY2Vzc29yIGFuZCB0aGVyZWZvcmUgc3dhYjMyKCkgbWFrZXMKKwkJICAgdGhlIG1vc3Qgc2Vuc2UuICovCiAJCWZvciAoaWNudCA9IDA7IGljbnQgPCBiY250LzQgOyBpY250KyspCi0JCQkoKHUzMiAqKWZ3X3B0cilbaWNudF0gPQotCQkJCV9fX3N3YWIzMigoKHUzMiAqKWZ3X3B0cilbaWNudF0pOworCQkJKCh1MzIgKilmd19wdHIpW2ljbnRdID0gc3dhYjMyKCgodTMyICopZndfcHRyKVtpY250XSk7CiAKIAkJcmV0IHw9IHVzYl9idWxrX21zZyhoZHctPnVzYl9kZXYsIHBpcGUsIGZ3X3B0cixiY250LAogCQkJCSAgICAmYWN0dWFsX2xlbmd0aCwgSFopOwpAQCAtMTkwNSw3ICsyMTc0LDcgQEAKIAkJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmlkKQogewogCXVuc2lnbmVkIGludCBpZHgsY250MSxjbnQyLG07Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHc7CisJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBOVUxMOwogCWludCB2YWxpZF9zdGRfbWFzazsKIAlzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyOwogCWNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjICpoZHdfZGVzYzsKQEAgLTE5MTUsNiArMjE4NCwxNiBAQAogCiAJaGR3X2Rlc2MgPSAoY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgKikoZGV2aWQtPmRyaXZlcl9pbmZvKTsKIAorCWlmIChoZHdfZGVzYyA9PSBOVUxMKSB7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULCAicHZyMl9oZHdfY3JlYXRlOiIKKwkJCSAgICIgTm8gZGV2aWNlIGRlc2NyaXB0aW9uIHBvaW50ZXIsIgorCQkJICAgIiB1bmFibGUgdG8gY29udGludWUuIik7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULCAiSWYgeW91IGhhdmUgYSBuZXcgZGV2aWNlIHR5cGUsIgorCQkJICAgIiBwbGVhc2UgY29udGFjdCBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+IgorCQkJICAgIiB0byBnZXQgaXQgaW5jbHVkZWQgaW4gdGhlIGRyaXZlclxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKIAloZHcgPSBremFsbG9jKHNpemVvZigqaGR3KSxHRlBfS0VSTkVMKTsKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwicHZyMl9oZHdfY3JlYXRlOiBoZHc9JXAsIHR5cGUgXCIlc1wiIiwKIAkJICAgaGR3LGhkd19kZXNjLT5kZXNjcmlwdGlvbik7CkBAIC0yMDcyLDYgKzIzNTEsNyBAQAogCQkJdmFsaWRfc3RkX21hc2s7CiAJfQogCisJaGR3LT5jcm9wY2FwX3N0YWxlID0gITA7CiAJaGR3LT5lZXByb21fYWRkciA9IC0xOwogCWhkdy0+dW5pdF9udW1iZXIgPSAtMTsKIAloZHctPnY0bF9taW5vcl9udW1iZXJfdmlkZW8gPSAtMTsKQEAgLTI1MDgsNiArMjc4OCwyOCBAQAogCQkvKiBDYW4ndCBjb21taXQgYW55dGhpbmcgdW50aWwgcGF0aHdheSBpcyBvay4gKi8KIAkJcmV0dXJuIDA7CiAJfQorCS8qIFRoZSBicm9hZGNhc3QgZGVjb2RlciBjYW4gb25seSBzY2FsZSBkb3duLCBzbyBpZgorCSAqIHJlc18qX2RpcnR5ICYmIGNyb3Agd2luZG93IDwgb3V0cHV0IGZvcm1hdCA9PT4gZW5sYXJnZSBjcm9wLgorCSAqCisJICogVGhlIG1wZWcgZW5jb2RlciByZWNlaXZlcyBmaWVsZHMgb2YgcmVzX2hvcl92YWwgZG90cyBhbmQKKwkgKiByZXNfdmVyX3ZhbCBoYWxmbGluZXMuICBMaW1pdHM6IGhvcjw9NzIwLCB2ZXI8PTU3Ni4KKwkgKi8KKwlpZiAoaGR3LT5yZXNfaG9yX2RpcnR5ICYmIGhkdy0+Y3JvcHdfdmFsIDwgaGR3LT5yZXNfaG9yX3ZhbCkgeworCQloZHctPmNyb3B3X3ZhbCA9IGhkdy0+cmVzX2hvcl92YWw7CisJCWhkdy0+Y3JvcHdfZGlydHkgPSAhMDsKKwl9IGVsc2UgaWYgKGhkdy0+Y3JvcHdfZGlydHkpIHsKKwkJaGR3LT5yZXNfaG9yX2RpcnR5ID0gITA7ICAgICAgICAgICAvKiBtdXN0IHJlc2NhbGUgKi8KKwkJaGR3LT5yZXNfaG9yX3ZhbCA9IG1pbig3MjAsIGhkdy0+Y3JvcHdfdmFsKTsKKwl9CisJaWYgKGhkdy0+cmVzX3Zlcl9kaXJ0eSAmJiBoZHctPmNyb3BoX3ZhbCA8IGhkdy0+cmVzX3Zlcl92YWwpIHsKKwkJaGR3LT5jcm9waF92YWwgPSBoZHctPnJlc192ZXJfdmFsOworCQloZHctPmNyb3BoX2RpcnR5ID0gITA7CisJfSBlbHNlIGlmIChoZHctPmNyb3BoX2RpcnR5KSB7CisJCWludCBudnJlcyA9IGhkdy0+c3RkX21hc2tfY3VyICYgVjRMMl9TVERfNTI1XzYwID8gNDgwIDogNTc2OworCQloZHctPnJlc192ZXJfZGlydHkgPSAhMDsKKwkJaGR3LT5yZXNfdmVyX3ZhbCA9IG1pbihudnJlcywgaGR3LT5jcm9waF92YWwpOworCX0KKwogCS8qIElmIGFueSBvZiB0aGUgYmVsb3cgaGFzIGNoYW5nZWQsIHRoZW4gd2UgY2FuJ3QgZG8gdGhlIHVwZGF0ZQogCSAgIHdoaWxlIHRoZSBwaXBlbGluZSBpcyBydW5uaW5nLiAgUGlwZWxpbmUgbXVzdCBiZSBwYXVzZWQgZmlyc3QKIAkgICBhbmQgZGVjb2RlciAtPiBlbmNvZGVyIGNvbm5lY3Rpb24gYmUgbWFkZSBxdWllc2NlbnQgYmVmb3JlIHdlCkBAIC0yNTE4LDYgKzI4MjAsOCBAQAogCQkgaGR3LT5zcmF0ZV9kaXJ0eSB8fAogCQkgaGR3LT5yZXNfdmVyX2RpcnR5IHx8CiAJCSBoZHctPnJlc19ob3JfZGlydHkgfHwKKwkJIGhkdy0+Y3JvcHdfZGlydHkgfHwKKwkJIGhkdy0+Y3JvcGhfZGlydHkgfHwKIAkJIGhkdy0+aW5wdXRfZGlydHkgfHwKIAkJIChoZHctPmFjdGl2ZV9zdHJlYW1fdHlwZSAhPSBoZHctPmRlc2lyZWRfc3RyZWFtX3R5cGUpKTsKIAlpZiAoZGlzcnVwdGl2ZV9jaGFuZ2UgJiYgIWhkdy0+c3RhdGVfcGlwZWxpbmVfaWRsZSkgewpAQCAtMjU4Nyw2ICsyODkxLDkgQEAKIAl9CiAKIAloZHctPnN0YXRlX3BpcGVsaW5lX2NvbmZpZyA9ICEwOworCS8qIEhhcmR3YXJlIHN0YXRlIG1heSBoYXZlIGNoYW5nZWQgaW4gYSB3YXkgdG8gY2F1c2UgdGhlIGNyb3BwaW5nCisJICAgY2FwYWJpbGl0aWVzIHRvIGhhdmUgY2hhbmdlZC4gIFNvIG1hcmsgaXQgc3RhbGUsIHdoaWNoIHdpbGwKKwkgICBjYXVzZSBhIGxhdGVyIHJlLWZldGNoLiAqLwogCXRyYWNlX3N0Yml0KCJzdGF0ZV9waXBlbGluZV9jb25maWciLGhkdy0+c3RhdGVfcGlwZWxpbmVfY29uZmlnKTsKIAlyZXR1cm4gITA7CiB9CkBAIC0yNjc3LDYgKzI5ODQsMzMgQEAKIH0KIAogCitzdGF0aWMgaW50IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoc3RydWN0IHB2cjJfaGR3ICpoZHcpCit7CisJaWYgKCFoZHctPmNyb3BjYXBfc3RhbGUpIHsKKwkJcmV0dXJuIDA7CisJfQorCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKKwlpZiAoaGR3LT5jcm9wY2FwX3N0YWxlKSB7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKiBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgY3JvcHBpbmcgY2FwYWJpbGl0aWVzICovCitpbnQgcHZyMl9oZHdfZ2V0X2Nyb3BjYXAoc3RydWN0IHB2cjJfaGR3ICpoZHcsIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKnBwKQoreworCWludCBzdGF0ID0gMDsKKwlMT0NLX1RBS0UoaGR3LT5iaWdfbG9jayk7CisJc3RhdCA9IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoaGR3KTsKKwlpZiAoIXN0YXQpIHsKKwkJbWVtY3B5KHBwLCAmaGR3LT5jcm9wY2FwX2luZm8sIHNpemVvZihoZHctPmNyb3BjYXBfaW5mbykpOworCX0KKwlMT0NLX0dJVkUoaGR3LT5iaWdfbG9jayk7CisJcmV0dXJuIHN0YXQ7Cit9CisKKwogLyogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0dW5lciAqLwogaW50IHB2cjJfaGR3X2dldF90dW5lcl9zdGF0dXMoc3RydWN0IHB2cjJfaGR3ICpoZHcsc3RydWN0IHY0bDJfdHVuZXIgKnZ0cCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKaW5kZXggYzA0OTU2ZC4uNDk0ODJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKQEAgLTM2LDYgKzM2LDE2IEBACiAjZGVmaW5lIFBWUjJfQ0lEX0ZSRVFVRU5DWSA2CiAjZGVmaW5lIFBWUjJfQ0lEX0hSRVMgNwogI2RlZmluZSBQVlIyX0NJRF9WUkVTIDgKKyNkZWZpbmUgUFZSMl9DSURfQ1JPUEwgOQorI2RlZmluZSBQVlIyX0NJRF9DUk9QVCAxMAorI2RlZmluZSBQVlIyX0NJRF9DUk9QVyAxMQorI2RlZmluZSBQVlIyX0NJRF9DUk9QSCAxMgorI2RlZmluZSBQVlIyX0NJRF9DUk9QQ0FQUEFOIDEzCisjZGVmaW5lIFBWUjJfQ0lEX0NST1BDQVBQQUQgMTQKKyNkZWZpbmUgUFZSMl9DSURfQ1JPUENBUEJMIDE1CisjZGVmaW5lIFBWUjJfQ0lEX0NST1BDQVBCVCAxNgorI2RlZmluZSBQVlIyX0NJRF9DUk9QQ0FQQlcgMTcKKyNkZWZpbmUgUFZSMl9DSURfQ1JPUENBUEJIIDE4CiAKIC8qIExlZ2FsIHZhbHVlcyBmb3IgdGhlIElOUFVUIHN0YXRlIHZhcmlhYmxlICovCiAjZGVmaW5lIFBWUjJfQ1ZBTF9JTlBVVF9UViAwCkBAIC0xNzAsNiArMTgwLDkgQEAKIC8qIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHVuZXIgKi8KIGludCBwdnIyX2hkd19nZXRfdHVuZXJfc3RhdHVzKHN0cnVjdCBwdnIyX2hkdyAqLHN0cnVjdCB2NGwyX3R1bmVyICopOwogCisvKiBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgY3JvcHBpbmcgY2FwYWJpbGl0aWVzICovCitpbnQgcHZyMl9oZHdfZ2V0X2Nyb3BjYXAoc3RydWN0IHB2cjJfaGR3ICosIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKik7CisKIC8qIFF1ZXJ5IGRldmljZSBhbmQgc2VlIGlmIGl0IHRoaW5rcyBpdCBpcyBvbiBhIGhpZ2gtc3BlZWQgVVNCIGxpbmsgKi8KIGludCBwdnIyX2hkd19pc19oc20oc3RydWN0IHB2cjJfaGR3ICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYwppbmRleCBjY2RiNDI5Li45NGE0NzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jaGlwcy12NGwyLmMKQEAgLTM3LDggKzM3LDkgQEAKICNkZWZpbmUgT1BfVk9MVU1FIDMKICNkZWZpbmUgT1BfRlJFUSA0CiAjZGVmaW5lIE9QX0FVRElPUkFURSA1Ci0jZGVmaW5lIE9QX1NJWkUgNgotI2RlZmluZSBPUF9MT0cgNworI2RlZmluZSBPUF9DUk9QIDYKKyNkZWZpbmUgT1BfU0laRSA3CisjZGVmaW5lIE9QX0xPRyA4CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgKiBjb25zdCBvcHNbXSA9IHsKIAlbT1BfU1RBTkRBUkRdID0gJnB2cjJfaTJjX29wX3Y0bDJfc3RhbmRhcmQsCkBAIC00Niw2ICs0Nyw3IEBACiAJW09QX0JDU0hdID0gJnB2cjJfaTJjX29wX3Y0bDJfYmNzaCwKIAlbT1BfVk9MVU1FXSA9ICZwdnIyX2kyY19vcF92NGwyX3ZvbHVtZSwKIAlbT1BfRlJFUV0gPSAmcHZyMl9pMmNfb3BfdjRsMl9mcmVxdWVuY3ksCisJW09QX0NST1BdID0gJnB2cjJfaTJjX29wX3Y0bDJfY3JvcCwKIAlbT1BfU0laRV0gPSAmcHZyMl9pMmNfb3BfdjRsMl9zaXplLAogCVtPUF9MT0ddID0gJnB2cjJfaTJjX29wX3Y0bDJfbG9nLAogfTsKQEAgLTU5LDYgKzYxLDcgQEAKIAkJCSgxIDw8IE9QX0JDU0gpIHwKIAkJCSgxIDw8IE9QX1ZPTFVNRSkgfAogCQkJKDEgPDwgT1BfRlJFUSkgfAorCQkJKDEgPDwgT1BfQ1JPUCkgfAogCQkJKDEgPDwgT1BfU0laRSkgfAogCQkJKDEgPDwgT1BfTE9HKSk7CiAJY3AtPnN0YXR1c19wb2xsID0gcHZyMl92NGwyX2NtZF9zdGF0dXNfcG9sbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmMKaW5kZXggNTVmMDRhMC4uMTZiYjExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmMKQEAgLTM3LDYgKzM3LDcgQEAKIAkJcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX1NURCwmdnMpOwogCX0KIAloZHctPnR1bmVyX3NpZ25hbF9zdGFsZSA9ICEwOworCWhkdy0+Y3JvcGNhcF9zdGFsZSA9ICEwOwogfQogCiAKQEAgLTIzMyw2ICsyMzQsMzcgQEAKIH07CiAKIAorc3RhdGljIHZvaWQgc2V0X2Nyb3Aoc3RydWN0IHB2cjJfaGR3ICpoZHcpCit7CisJc3RydWN0IHY0bDJfY3JvcCBjcm9wOworCisJbWVtc2V0KCZjcm9wLCAwLCBzaXplb2YgY3JvcCk7CisJY3JvcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWNyb3AuYy5sZWZ0ID0gaGR3LT5jcm9wbF92YWw7CisJY3JvcC5jLnRvcCA9IGhkdy0+Y3JvcHRfdmFsOworCWNyb3AuYy5oZWlnaHQgPSBoZHctPmNyb3BoX3ZhbDsKKwljcm9wLmMud2lkdGggPSBoZHctPmNyb3B3X3ZhbDsKKworCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywKKwkJICAgImkyYyB2NGwyIHNldF9jcm9wIGNyb3A9JWQ6JWQ6JWQ6JWQiLAorCQkgICBjcm9wLmMud2lkdGgsIGNyb3AuYy5oZWlnaHQsIGNyb3AuYy5sZWZ0LCBjcm9wLmMudG9wKTsKKworCXB2cjJfaTJjX2NvcmVfY21kKGhkdywgVklESU9DX1NfQ1JPUCwgJmNyb3ApOworfQorCitzdGF0aWMgaW50IGNoZWNrX2Nyb3Aoc3RydWN0IHB2cjJfaGR3ICpoZHcpCit7CisJcmV0dXJuIChoZHctPmNyb3BsX2RpcnR5IHx8IGhkdy0+Y3JvcHRfZGlydHkgfHwKKwkJaGR3LT5jcm9wd19kaXJ0eSB8fCBoZHctPmNyb3BoX2RpcnR5KTsKK30KKworY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfY3JvcCA9IHsKKwkuY2hlY2sgPSBjaGVja19jcm9wLAorCS51cGRhdGUgPSBzZXRfY3JvcCwKKwkubmFtZSA9ICJ2NGwyX2Nyb3AiLAorfTsKKworCiBzdGF0aWMgdm9pZCBkb19sb2coc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdjRsMiBkb19sb2coKSIpOwpAQCAtMjYzLDcgKzI5NSwxOSBAQAogCiB2b2lkIHB2cjJfdjRsMl9jbWRfc3RhdHVzX3BvbGwoc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCiB7Ci0JcHZyMl9pMmNfY2xpZW50X2NtZChjcCxWSURJT0NfR19UVU5FUiwmY3AtPmhkdy0+dHVuZXJfc2lnbmFsX2luZm8pOworCWludCBzdGF0OworCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3AtPmhkdzsKKwlpZiAoaGR3LT5jcm9wY2FwX3N0YWxlKSB7CisJCWhkdy0+Y3JvcGNhcF9pbmZvLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCXN0YXQgPSBwdnIyX2kyY19jbGllbnRfY21kKGNwLCBWSURJT0NfQ1JPUENBUCwKKwkJCQkJICAgJmhkdy0+Y3JvcGNhcF9pbmZvKTsKKwkJaWYgKHN0YXQgPT0gMCkgeworCQkJLyogQ2hlY2sgd2FzIHN1Y2Nlc3NmdWwsIHNvIHRoZSBkYXRhIGlzIG5vCisJCQkgICBsb25nZXIgY29uc2lkZXJlZCBzdGFsZS4gKi8KKwkJCWhkdy0+Y3JvcGNhcF9zdGFsZSA9IDA7CisJCX0KKwl9CisJcHZyMl9pMmNfY2xpZW50X2NtZChjcCwgVklESU9DX0dfVFVORVIsICZoZHctPnR1bmVyX3NpZ25hbF9pbmZvKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oCmluZGV4IDdmYTM4NjguLmViNzQ0YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oCkBAIC0yOSw2ICsyOSw3IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfYmNzaDsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl92b2x1bWU7CiBleHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfZnJlcXVlbmN5OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2Nyb3A7CiBleHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfc2l6ZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9hdWRpb21vZGU7CiBleHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfbG9nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKaW5kZXggZTYwMDU3Ni4uZDZhMzU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCkBAIC04MjcsNyArODI3LDcgQEAKIAlpZiAoKGRldGFpbCAmIFBWUjJfSTJDX0RFVEFJTF9DVExNQVNLKSAmJiBjcC0+Y3RsX21hc2spIHsKIAkJdW5zaWduZWQgaW50IGlkeDsKIAkJdW5zaWduZWQgbG9uZyBtc2ssc207Ci0JCWludCBzcGNmbDsKKwogCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sIiBbIik7CiAJCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwogCQlzbSA9IDA7CkBAIC04OTEsNiArODkxLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmY3AtPmxpc3QpOwogCWNwLT5jbGllbnQgPSBjbGllbnQ7CiAJbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsgZG8geworCQloZHctPmNyb3BjYXBfc3RhbGUgPSAhMDsKIAkJbGlzdF9hZGRfdGFpbCgmY3AtPmxpc3QsJmhkdy0+aTJjX2NsaWVudHMpOwogCQloZHctPmkyY19wZW5kX3R5cGVzIHw9IFBWUjJfSTJDX1BFTkRfREVURUNUOwogCX0gd2hpbGUgKDApOyBtdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7CkBAIC05MDUsNiArOTA2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGFtYXNrID0gMDsKIAlpbnQgZm91bmRmbCA9IDA7CiAJbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsgZG8geworCQloZHctPmNyb3BjYXBfc3RhbGUgPSAhMDsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNwLCBuY3AsICZoZHctPmkyY19jbGllbnRzLCBsaXN0KSB7CiAJCQlpZiAoY3AtPmNsaWVudCA9PSBjbGllbnQpIHsKIAkJCQl0cmFjZV9pMmMoInB2cjJfaTJjX2RldGFjaCIKQEAgLTk0NiwyMiArOTQ4LDMyIEBACiAJLmNsaWVudF91bnJlZ2lzdGVyID0gcHZyMl9pMmNfZGV0YWNoX2luZm9ybSwKIH07CiAKLXN0YXRpYyB2b2lkIGRvX2kyY19zY2FuKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBkZXZpY2UgZXhpc3RzIGF0IGdpdmVuIGFkZHJlc3MgKi8KK3N0YXRpYyBpbnQgZG9faTJjX3Byb2JlKHN0cnVjdCBwdnIyX2hkdyAqaGR3LCBpbnQgYWRkcikKIHsKIAlzdHJ1Y3QgaTJjX21zZyBtc2dbMV07Ci0JaW50IGkscmM7CisJaW50IHJjOwogCW1zZ1swXS5hZGRyID0gMDsKIAltc2dbMF0uZmxhZ3MgPSBJMkNfTV9SRDsKIAltc2dbMF0ubGVuID0gMDsKIAltc2dbMF0uYnVmID0gTlVMTDsKLQlwcmludGsoIiVzOiBpMmMgc2NhbiBiZWdpbm5pbmdcbiIsaGR3LT5uYW1lKTsKKwltc2dbMF0uYWRkciA9IGFkZHI7CisJcmMgPSBpMmNfdHJhbnNmZXIoJmhkdy0+aTJjX2FkYXAsIG1zZywgQVJSQVlfU0laRShtc2cpKTsKKwlyZXR1cm4gcmMgPT0gMTsKK30KKworc3RhdGljIHZvaWQgZG9faTJjX3NjYW4oc3RydWN0IHB2cjJfaGR3ICpoZHcpCit7CisJaW50IGk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGkyYyBzY2FuIGJlZ2lubmluZ1xuIiwgaGR3LT5uYW1lKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKLQkJbXNnWzBdLmFkZHIgPSBpOwotCQlyYyA9IGkyY190cmFuc2ZlcigmaGR3LT5pMmNfYWRhcCxtc2csIEFSUkFZX1NJWkUobXNnKSk7Ci0JCWlmIChyYyAhPSAxKSBjb250aW51ZTsKLQkJcHJpbnRrKCIlczogaTJjIHNjYW46IGZvdW5kIGRldmljZSBAIDB4JXhcbiIsaGR3LT5uYW1lLGkpOworCQlpZiAoZG9faTJjX3Byb2JlKGhkdywgaSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpMmMgc2NhbjogZm91bmQgZGV2aWNlIEAgMHgleFxuIiwKKwkJCSAgICAgICBoZHctPm5hbWUsIGkpOworCQl9CiAJfQotCXByaW50aygiJXM6IGkyYyBzY2FuIGRvbmUuXG4iLGhkdy0+bmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGkyYyBzY2FuIGRvbmUuXG4iLCBoZHctPm5hbWUpOwogfQogCiB2b2lkIHB2cjJfaTJjX2NvcmVfaW5pdChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKQEAgLTk4MCw4ICs5OTIsNiBAQAogCQloZHctPmkyY19mdW5jWzB4MThdID0gaTJjX2JsYWNrX2hvbGU7CiAJfSBlbHNlIGlmIChpcl9tb2RlW2hkdy0+dW5pdF9udW1iZXJdID09IDEpIHsKIAkJaWYgKGhkdy0+aGR3X2Rlc2MtPmlyX3NjaGVtZSA9PSBQVlIyX0lSX1NDSEVNRV8yNFhYWCkgewotCQkJLyogVGhpcyBjb21tZW50IGlzIHByZXNlbnQgUFVSRUxZIHRvIGdldAotCQkJICAgY2hlY2twYXRjaC5wbCB0byBTVEZVLiAgTG92ZWx5LCBlaD8gKi8KIAkJCWhkdy0+aTJjX2Z1bmNbMHgxOF0gPSBpMmNfMjR4eHhfaXI7CiAJCX0KIAl9CkBAIC0xMDA2LDYgKzEwMTYsMTYgQEAKIAltdXRleF9pbml0KCZoZHctPmkyY19saXN0X2xvY2spOwogCWhkdy0+aTJjX2xpbmtlZCA9ICEwOwogCWkyY19hZGRfYWRhcHRlcigmaGR3LT5pMmNfYWRhcCk7CisJaWYgKGhkdy0+aTJjX2Z1bmNbMHgxOF0gPT0gaTJjXzI0eHh4X2lyKSB7CisJCS8qIFByb2JlIGZvciBhIGRpZmZlcmVudCB0eXBlIG9mIElSIHJlY2VpdmVyIG9uIHRoaXMKKwkJICAgZGV2aWNlLiAgSWYgcHJlc2VudCwgZGlzYWJsZSB0aGUgZW11bGF0ZWQgSVIgcmVjZWl2ZXIuICovCisJCWlmIChkb19pMmNfcHJvYmUoaGR3LCAweDcxKSkgeworCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lORk8sCisJCQkJICAgIkRldmljZSBoYXMgbmV3ZXIgSVIgaGFyZHdhcmU7IgorCQkJCSAgICIgZGlzYWJsaW5nIHVubmVlZGVkIHZpcnR1YWwgSVIgZGV2aWNlIik7CisJCQloZHctPmkyY19mdW5jWzB4MThdID0gTlVMTDsKKwkJfQorCX0KIAlpZiAoaTJjX3NjYW4pIGRvX2kyY19zY2FuKGhkdyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLW1haW4uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLW1haW4uYwppbmRleCBhZDBkOThjLi45YjNjODc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jCkBAIC0xMzcsOSArMTM3LDExIEBACiAJcmV0ID0gdXNiX3JlZ2lzdGVyKCZwdnJfZHJpdmVyKTsKIAogCWlmIChyZXQgPT0gMCkKLQkJaW5mbyhEUklWRVJfREVTQyAiIDogIiBEUklWRVJfVkVSU0lPTik7Ci0JaWYgKHB2cnVzYjJfZGVidWcpIGluZm8oIkRlYnVnIG1hc2sgaXMgJWQgKDB4JXgpIiwKLQkJCQlwdnJ1c2IyX2RlYnVnLHB2cnVzYjJfZGVidWcpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKKwlpZiAocHZydXNiMl9kZWJ1ZykKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBEZWJ1ZyBtYXNrIGlzICVkICgweCV4KVxuIiwKKwkJICAgICAgIHB2cnVzYjJfZGVidWcscHZydXNiMl9kZWJ1Zyk7CiAKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwicHZyX2luaXQgY29tcGxldGUiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmMKaW5kZXggNDZhOGMzOS4uNzMzNjgwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCkBAIC02NSw2ICs2NSw3IEBACiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cl90eXBlOwogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHJfbWluOwogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHJfbWF4OworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHJfZGVmOwogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHJfZW51bTsKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyX2JpdHM7CiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cl92YWw7CkBAIC0xNDUsNiArMTQ2LDIzIEBACiAJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsZFxuIiwgdmFsKTsKIH0KIAorc3RhdGljIHNzaXplX3Qgc2hvd19kZWYoc3RydWN0IGRldmljZSAqY2xhc3NfZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IHB2cjJfc3lzZnNfY3RsX2l0ZW0gKmNpcDsKKwlpbnQgdmFsOworCWludCByZXQ7CisJY2lwID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBwdnIyX3N5c2ZzX2N0bF9pdGVtLCBhdHRyX2RlZik7CisJcmV0ID0gcHZyMl9jdHJsX2dldF9kZWYoY2lwLT5jcHRyLCAmdmFsKTsKKwlwdnIyX3N5c2ZzX3RyYWNlKCJwdnIyX3N5c2ZzKCVwKSBzaG93X2RlZihjaWQ9JWQpIGlzICVkLCBzdGF0PSVkIiwKKwkJCSBjaXAtPmNocHRyLCBjaXAtPmN0bF9pZCwgdmFsLCByZXQpOworCWlmIChyZXQgPCAwKSB7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgdmFsKTsKK30KKwogc3RhdGljIHNzaXplX3Qgc2hvd192YWxfbm9ybShzdHJ1Y3QgZGV2aWNlICpjbGFzc19kZXYsCiAJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgICBjaGFyICpidWYpCkBAIC0zMjAsNiArMzM4LDEwIEBACiAJY2lwLT5hdHRyX21heC5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCWNpcC0+YXR0cl9tYXguc2hvdyA9IHNob3dfbWF4OwogCisJY2lwLT5hdHRyX2RlZi5hdHRyLm5hbWUgPSAiZGVmX3ZhbCI7CisJY2lwLT5hdHRyX2RlZi5hdHRyLm1vZGUgPSBTX0lSVUdPOworCWNpcC0+YXR0cl9kZWYuc2hvdyA9IHNob3dfZGVmOworCiAJY2lwLT5hdHRyX3ZhbC5hdHRyLm5hbWUgPSAiY3VyX3ZhbCI7CiAJY2lwLT5hdHRyX3ZhbC5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCkBAIC0zNDMsNiArMzY1LDcgQEAKIAljaXAtPmF0dHJfZ2VuW2FjbnQrK10gPSAmY2lwLT5hdHRyX25hbWUuYXR0cjsKIAljaXAtPmF0dHJfZ2VuW2FjbnQrK10gPSAmY2lwLT5hdHRyX3R5cGUuYXR0cjsKIAljaXAtPmF0dHJfZ2VuW2FjbnQrK10gPSAmY2lwLT5hdHRyX3ZhbC5hdHRyOworCWNpcC0+YXR0cl9nZW5bYWNudCsrXSA9ICZjaXAtPmF0dHJfZGVmLmF0dHI7CiAJY2lwLT5hdHRyX3ZhbC5zaG93ID0gc2hvd192YWxfbm9ybTsKIAljaXAtPmF0dHJfdmFsLnN0b3JlID0gc3RvcmVfdmFsX25vcm07CiAJaWYgKHB2cjJfY3RybF9oYXNfY3VzdG9tX3N5bWJvbHMoY3B0cikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwppbmRleCAwMDMwNmZhLi5mMDQ4ZDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCkBAIC01MzMsNyArNTMzLDcgQEAKIAogCQkJbG1pbiA9IHB2cjJfY3RybF9nZXRfbWluKGhjcCk7CiAJCQlsbWF4ID0gcHZyMl9jdHJsX2dldF9tYXgoaGNwKTsKLQkJCWxkZWYgPSBwdnIyX2N0cmxfZ2V0X2RlZihoY3ApOworCQkJcHZyMl9jdHJsX2dldF9kZWYoaGNwLCAmbGRlZik7CiAJCQlpZiAodyA9PSAtMSkgewogCQkJCXcgPSBsZGVmOwogCQkJfSBlbHNlIGlmICh3IDwgbG1pbikgewpAQCAtNTQzLDcgKzU0Myw3IEBACiAJCQl9CiAJCQlsbWluID0gcHZyMl9jdHJsX2dldF9taW4odmNwKTsKIAkJCWxtYXggPSBwdnIyX2N0cmxfZ2V0X21heCh2Y3ApOwotCQkJbGRlZiA9IHB2cjJfY3RybF9nZXRfZGVmKHZjcCk7CisJCQlwdnIyX2N0cmxfZ2V0X2RlZih2Y3AsICZsZGVmKTsKIAkJCWlmIChoID09IC0xKSB7CiAJCQkJaCA9IGxkZWY7CiAJCQl9IGVsc2UgaWYgKGggPCBsbWluKSB7CkBAIC02MDQsNiArNjA0LDcgQEAKIAljYXNlIFZJRElPQ19RVUVSWUNUUkw6CiAJewogCQlzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyOworCQlpbnQgdmFsOwogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnZjID0gKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqKWFyZzsKIAkJcmV0ID0gMDsKIAkJaWYgKHZjLT5pZCAmIFY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTCkgewpAQCAtNjI3LDcgKzYyOCw4IEBACiAJCQkgICBwdnIyX2N0cmxfZ2V0X2Rlc2MoY3B0cikpOwogCQlzdHJsY3B5KHZjLT5uYW1lLHB2cjJfY3RybF9nZXRfZGVzYyhjcHRyKSxzaXplb2YodmMtPm5hbWUpKTsKIAkJdmMtPmZsYWdzID0gcHZyMl9jdHJsX2dldF92NGxmbGFncyhjcHRyKTsKLQkJdmMtPmRlZmF1bHRfdmFsdWUgPSBwdnIyX2N0cmxfZ2V0X2RlZihjcHRyKTsKKwkJcHZyMl9jdHJsX2dldF9kZWYoY3B0ciwgJnZhbCk7CisJCXZjLT5kZWZhdWx0X3ZhbHVlID0gdmFsOwogCQlzd2l0Y2ggKHB2cjJfY3RybF9nZXRfdHlwZShjcHRyKSkgewogCQljYXNlIHB2cjJfY3RsX2VudW06CiAJCQl2Yy0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX01FTlU7CkBAIC03NTMsNiArNzU1LDkyIEBACiAJCWJyZWFrOwogCX0KIAorCWNhc2UgVklESU9DX0NST1BDQVA6CisJeworCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjYXAgPSAoc3RydWN0IHY0bDJfY3JvcGNhcCAqKWFyZzsKKwkJaWYgKGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBwdnIyX2hkd19nZXRfY3JvcGNhcChoZHcsIGNhcCk7CisJCWNhcC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsgLyogcGFyYW5vaWEgKi8KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfQ1JPUDoKKwl7CisJCXN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AgPSAoc3RydWN0IHY0bDJfY3JvcCAqKWFyZzsKKwkJaW50IHZhbCA9IDA7CisJCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IHB2cjJfY3RybF9nZXRfdmFsdWUoCisJCQlwdnIyX2hkd19nZXRfY3RybF9ieV9pZChoZHcsIFBWUjJfQ0lEX0NST1BMKSwgJnZhbCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWNyb3AtPmMubGVmdCA9IHZhbDsKKwkJcmV0ID0gcHZyMl9jdHJsX2dldF92YWx1ZSgKKwkJCXB2cjJfaGR3X2dldF9jdHJsX2J5X2lkKGhkdywgUFZSMl9DSURfQ1JPUFQpLCAmdmFsKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJY3JvcC0+Yy50b3AgPSB2YWw7CisJCXJldCA9IHB2cjJfY3RybF9nZXRfdmFsdWUoCisJCQlwdnIyX2hkd19nZXRfY3RybF9ieV9pZChoZHcsIFBWUjJfQ0lEX0NST1BXKSwgJnZhbCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWNyb3AtPmMud2lkdGggPSB2YWw7CisJCXJldCA9IHB2cjJfY3RybF9nZXRfdmFsdWUoCisJCQlwdnIyX2hkd19nZXRfY3RybF9ieV9pZChoZHcsIFBWUjJfQ0lEX0NST1BIKSwgJnZhbCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWNyb3AtPmMuaGVpZ2h0ID0gdmFsOworCX0KKwljYXNlIFZJRElPQ19TX0NST1A6CisJeworCQlzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wID0gKHN0cnVjdCB2NGwyX2Nyb3AgKilhcmc7CisJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgY2FwOworCQlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQljYXAudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJcmV0ID0gcHZyMl9jdHJsX3NldF92YWx1ZSgKKwkJCXB2cjJfaGR3X2dldF9jdHJsX2J5X2lkKGhkdywgUFZSMl9DSURfQ1JPUEwpLAorCQkJY3JvcC0+Yy5sZWZ0KTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gcHZyMl9jdHJsX3NldF92YWx1ZSgKKwkJCXB2cjJfaGR3X2dldF9jdHJsX2J5X2lkKGhkdywgUFZSMl9DSURfQ1JPUFQpLAorCQkJY3JvcC0+Yy50b3ApOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBwdnIyX2N0cmxfc2V0X3ZhbHVlKAorCQkJcHZyMl9oZHdfZ2V0X2N0cmxfYnlfaWQoaGR3LCBQVlIyX0NJRF9DUk9QVyksCisJCQljcm9wLT5jLndpZHRoKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gcHZyMl9jdHJsX3NldF92YWx1ZSgKKwkJCXB2cjJfaGR3X2dldF9jdHJsX2J5X2lkKGhkdywgUFZSMl9DSURfQ1JPUEgpLAorCQkJY3JvcC0+Yy5oZWlnaHQpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCX0KIAljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgogCXsKIAkJcHZyMl9oZHdfdHJpZ2dlcl9tb2R1bGVfbG9nKGhkdyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWN0cmwuYwppbmRleCBkYmM1NjA3Li5jNjY1MzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtY3RybC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1jdHJsLmMKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaW5jbHVkZSAicHdjLmgiCiAjaW5jbHVkZSAicHdjLXVuY29tcHJlc3MuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKaW5kZXggOWFlZTdjYi4uYWIyODM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKQEAgLTExMTIsNyArMTExMiw3IEBACiAKIAlQV0NfREVCVUdfT1BFTigiPj4gdmlkZW9fb3BlbiBjYWxsZWQodmRldiA9IDB4JXApLlxuIiwgdmRldik7CiAKLQlwZGV2ID0gKHN0cnVjdCBwd2NfZGV2aWNlICopdmRldi0+cHJpdjsKKwlwZGV2ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CiAJQlVHX09OKCFwZGV2KTsKIAlpZiAocGRldi0+dm9wZW4pIHsKIAkJUFdDX0RFQlVHX09QRU4oIkknbSBidXN5LCBzb21lb25lIGlzIHVzaW5nIHRoZSBkZXZpY2UuXG4iKTsKQEAgLTEyMzMsNyArMTIzMyw3IEBACiAJUFdDX0RFQlVHX09QRU4oIj4+IHZpZGVvX2Nsb3NlIGNhbGxlZCh2ZGV2ID0gMHglcCkuXG4iLCB2ZGV2KTsKIAogCWxvY2tfa2VybmVsKCk7Ci0JcGRldiA9IChzdHJ1Y3QgcHdjX2RldmljZSAqKXZkZXYtPnByaXY7CisJcGRldiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwogCWlmIChwZGV2LT52b3BlbiA9PSAwKQogCQlQV0NfREVCVUdfTU9EVUxFKCJ2aWRlb19jbG9zZSgpIGNhbGxlZCBvbiBjbG9zZWQgZGV2aWNlP1xuIik7CiAKQEAgLTEzMDQsNyArMTMwNCw3IEBACiAJCQl2ZGV2LCBidWYsIGNvdW50KTsKIAlpZiAodmRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlwZGV2ID0gdmRldi0+cHJpdjsKKwlwZGV2ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CiAJaWYgKHBkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTEzODYsNyArMTM4Niw3IEBACiAKIAlpZiAodmRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlwZGV2ID0gdmRldi0+cHJpdjsKKwlwZGV2ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CiAJaWYgKHBkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTE0MDgsNyArMTQwOCw3IEBACiAKIAlpZiAoIXZkZXYpCiAJCWdvdG8gb3V0OwotCXBkZXYgPSB2ZGV2LT5wcml2OworCXBkZXYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAogCW11dGV4X2xvY2soJnBkZXYtPm1vZGxvY2spOwogCWlmICghcGRldi0+dW5wbHVnZ2VkKQpAQCAtMTQyOCw3ICsxNDI4LDcgQEAKIAlpbnQgaW5kZXg7CiAKIAlQV0NfREVCVUdfTUVNT1JZKCI+PiAlc1xuIiwgX19mdW5jX18pOwotCXBkZXYgPSB2ZGV2LT5wcml2OworCXBkZXYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAlzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OwogCXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXY0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXY0bC5jCmluZGV4IDE3NDI4ODkuLjc2YTEzNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy12NGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdjRsLmMKQEAgLTM0Niw3ICszNDYsNyBAQAogCiAJaWYgKHZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JcGRldiA9IHZkZXYtPnByaXY7CisJcGRldiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwogCWlmIChwZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUZBVUxUOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCmluZGV4IGNmOTZiMmMuLmViNmJlNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCkBAIC02MjksMTcgKzYyOSw2IEBACiAJCXBkYXRhLT5pbml0KHBjZGV2LT5kZXYpOwogCX0KIAotCWlmIChwZGF0YSAmJiBwZGF0YS0+cG93ZXIpIHsKLQkJZGV2X2RiZyhwY2Rldi0+ZGV2LCAiJXM6IFBvd2VyIG9uIGNhbWVyYVxuIiwgX19mdW5jX18pOwotCQlwZGF0YS0+cG93ZXIocGNkZXYtPmRldiwgMSk7Ci0JfQotCi0JaWYgKHBkYXRhICYmIHBkYXRhLT5yZXNldCkgewotCQlkZXZfZGJnKHBjZGV2LT5kZXYsICIlczogUmVsZWFzaW5nIGNhbWVyYSByZXNldFxuIiwKLQkJCV9fZnVuY19fKTsKLQkJcGRhdGEtPnJlc2V0KHBjZGV2LT5kZXYsIDEpOwotCX0KLQogCUNJQ1IwID0gMHgzRkY7ICAgLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwogCiAJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfUENMS19FTikKQEAgLTY2MCwyMCArNjQ5LDcgQEAKIAogc3RhdGljIHZvaWQgcHhhX2NhbWVyYV9kZWFjdGl2YXRlKHN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYpCiB7Ci0Jc3RydWN0IHB4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhICpib2FyZCA9IHBjZGV2LT5wZGF0YTsKLQogCWNsa19kaXNhYmxlKHBjZGV2LT5jbGspOwotCi0JaWYgKGJvYXJkICYmIGJvYXJkLT5yZXNldCkgewotCQlkZXZfZGJnKHBjZGV2LT5kZXYsICIlczogQXNzZXJ0aW5nIGNhbWVyYSByZXNldFxuIiwKLQkJCV9fZnVuY19fKTsKLQkJYm9hcmQtPnJlc2V0KHBjZGV2LT5kZXYsIDApOwotCX0KLQotCWlmIChib2FyZCAmJiBib2FyZC0+cG93ZXIpIHsKLQkJZGV2X2RiZyhwY2Rldi0+ZGV2LCAiJXM6IFBvd2VyIG9mZiBjYW1lcmFcbiIsIF9fZnVuY19fKTsKLQkJYm9hcmQtPnBvd2VyKHBjZGV2LT5kZXYsIDApOwotCX0KIH0KIAogc3RhdGljIGlycXJldHVybl90IHB4YV9jYW1lcmFfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCkBAIC0xMTQ0LDMxICsxMTIwLDMxIEBACiAJcGNkZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAKIAkvKiByZXF1ZXN0IGRtYSAqLwotCXBjZGV2LT5kbWFfY2hhbnNbMF0gPSBweGFfcmVxdWVzdF9kbWEoIkNJX1kiLCBETUFfUFJJT19ISUdILAotCQkJCQkgICAgICBweGFfY2FtZXJhX2RtYV9pcnFfeSwgcGNkZXYpOwotCWlmIChwY2Rldi0+ZG1hX2NoYW5zWzBdIDwgMCkgeworCWVyciA9IHB4YV9yZXF1ZXN0X2RtYSgiQ0lfWSIsIERNQV9QUklPX0hJR0gsCisJCQkgICAgICBweGFfY2FtZXJhX2RtYV9pcnFfeSwgcGNkZXYpOworCWlmIChlcnIgPCAwKSB7CiAJCWRldl9lcnIocGNkZXYtPmRldiwgIkNhbid0IHJlcXVlc3QgRE1BIGZvciBZXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2lvdW5tYXA7CiAJfQorCXBjZGV2LT5kbWFfY2hhbnNbMF0gPSBlcnI7CiAJZGV2X2RiZyhwY2Rldi0+ZGV2LCAiZ290IERNQSBjaGFubmVsICVkXG4iLCBwY2Rldi0+ZG1hX2NoYW5zWzBdKTsKIAotCXBjZGV2LT5kbWFfY2hhbnNbMV0gPSBweGFfcmVxdWVzdF9kbWEoIkNJX1UiLCBETUFfUFJJT19ISUdILAotCQkJCQkgICAgICBweGFfY2FtZXJhX2RtYV9pcnFfdSwgcGNkZXYpOwotCWlmIChwY2Rldi0+ZG1hX2NoYW5zWzFdIDwgMCkgeworCWVyciA9IHB4YV9yZXF1ZXN0X2RtYSgiQ0lfVSIsIERNQV9QUklPX0hJR0gsCisJCQkgICAgICBweGFfY2FtZXJhX2RtYV9pcnFfdSwgcGNkZXYpOworCWlmIChlcnIgPCAwKSB7CiAJCWRldl9lcnIocGNkZXYtPmRldiwgIkNhbid0IHJlcXVlc3QgRE1BIGZvciBVXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2ZyZWVfZG1hX3k7CiAJfQorCXBjZGV2LT5kbWFfY2hhbnNbMV0gPSBlcnI7CiAJZGV2X2RiZyhwY2Rldi0+ZGV2LCAiZ290IERNQSBjaGFubmVsIChVKSAlZFxuIiwgcGNkZXYtPmRtYV9jaGFuc1sxXSk7CiAKLQlwY2Rldi0+ZG1hX2NoYW5zWzJdID0gcHhhX3JlcXVlc3RfZG1hKCJDSV9WIiwgRE1BX1BSSU9fSElHSCwKLQkJCQkJICAgICAgcHhhX2NhbWVyYV9kbWFfaXJxX3YsIHBjZGV2KTsKLQlpZiAocGNkZXYtPmRtYV9jaGFuc1swXSA8IDApIHsKKwllcnIgPSBweGFfcmVxdWVzdF9kbWEoIkNJX1YiLCBETUFfUFJJT19ISUdILAorCQkJICAgICAgcHhhX2NhbWVyYV9kbWFfaXJxX3YsIHBjZGV2KTsKKwlpZiAoZXJyIDwgMCkgewogCQlkZXZfZXJyKHBjZGV2LT5kZXYsICJDYW4ndCByZXF1ZXN0IERNQSBmb3IgVlxuIik7Ci0JCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdF9mcmVlX2RtYV91OwogCX0KKwlwY2Rldi0+ZG1hX2NoYW5zWzJdID0gZXJyOwogCWRldl9kYmcocGNkZXYtPmRldiwgImdvdCBETUEgY2hhbm5lbCAoVikgJWRcbiIsIHBjZGV2LT5kbWFfY2hhbnNbMl0pOwogCiAJRFJDTVIoNjgpID0gcGNkZXYtPmRtYV9jaGFuc1swXSB8IERSQ01SX01BUFZMRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYwppbmRleCA5MmI4M2ZlLi41MjcyOTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCkBAIC01OCw2ICs1OCw4IEBACiAKIAogCisvKiBkZWZhdWx0IEpQRUcgcXVhbGl0eSAqLworI2RlZmluZSBTMjI1NV9ERUZfSlBFR19RVUFMICAgICA1MAogLyogdmVuZG9yIHJlcXVlc3QgaW4gKi8KICNkZWZpbmUgUzIyNTVfVlJfSU4JCTAKIC8qIHZlbmRvciByZXF1ZXN0IG91dCAqLwpAQCAtNjcsMjAgKzY5LDIxIEBACiAvKiBVU0IgZW5kcG9pbnQgbnVtYmVyIGZvciBjb25maWd1cmluZyB0aGUgZGV2aWNlICovCiAjZGVmaW5lIFMyMjU1X0NPTkZJR19FUCAgICAgICAgIDIKIC8qIG1heGltdW0gdGltZSBmb3IgRFNQIHRvIHN0YXJ0IHJlc3BvbmRpbmcgYWZ0ZXIgbGFzdCBGVyB3b3JkIGxvYWRlZChtcykgKi8KLSNkZWZpbmUgUzIyNTVfRFNQX0JPT1RUSU1FICAgICAgNDAwCisjZGVmaW5lIFMyMjU1X0RTUF9CT09UVElNRSAgICAgIDgwMAogLyogbWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIGZpcm13YXJlIHRvIGxvYWQgKG1zKSAqLwogI2RlZmluZSBTMjI1NV9MT0FEX1RJTUVPVVQgICAgICAoNTAwMCArIFMyMjU1X0RTUF9CT09UVElNRSkKICNkZWZpbmUgUzIyNTVfREVGX0JVRlMgICAgICAgICAgMTYKKyNkZWZpbmUgUzIyNTVfU0VUTU9ERV9USU1FT1VUICAgNTAwCiAjZGVmaW5lIE1BWF9DSEFOTkVMUwkJNAotI2RlZmluZSBGUkFNRV9NQVJLRVIJCTB4MjI1NURBNEFMCi0jZGVmaW5lIE1BWF9QSVBFX1VTQkJMT0NLCSg0MCAqIDEwMjQpCi0jZGVmaW5lIERFRkFVTFRfUElQRV9VU0JCTE9DSwkoMTYgKiAxMDI0KQorI2RlZmluZSBTMjI1NV9NQVJLRVJfRlJBTUUJMHgyMjU1REE0QUwKKyNkZWZpbmUgUzIyNTVfTUFSS0VSX1JFU1BPTlNFCTB4MjI1NUFDQUNMCisjZGVmaW5lIFMyMjU1X1VTQl9YRkVSX1NJWkUJKDE2ICogMTAyNCkKICNkZWZpbmUgTUFYX0NIQU5ORUxTCQk0CiAjZGVmaW5lIE1BWF9QSVBFX0JVRkZFUlMJMQogI2RlZmluZSBTWVNfRlJBTUVTCQk0CiAvKiBtYXhpbXVtIHNpemUgaXMgUEFMIGZ1bGwgc2l6ZSBwbHVzIHJvb20gZm9yIHRoZSBtYXJrZXIgaGVhZGVyKHMpICovCi0jZGVmaW5lIFNZU19GUkFNRVNfTUFYU0laRQkoNzIwICogMjg4ICogMiAqIDIgKyA0MDk2KQotI2RlZmluZSBERUZfVVNCX0JMT0NLCQkoNDA5NikKKyNkZWZpbmUgU1lTX0ZSQU1FU19NQVhTSVpFCSg3MjAqMjg4KjIqMiArIDQwOTYpCisjZGVmaW5lIERFRl9VU0JfQkxPQ0sJCVMyMjU1X1VTQl9YRkVSX1NJWkUKICNkZWZpbmUgTElORV9TWl80Q0lGU19OVFNDCTY0MAogI2RlZmluZSBMSU5FX1NaXzJDSUZTX05UU0MJNjQwCiAjZGVmaW5lIExJTkVfU1pfMUNJRlNfTlRTQwkzMjAKQEAgLTEwOCw2ICsxMTEsOSBAQAogI2RlZmluZSBDT0xPUl9ZVVZQTAkxCS8qIFlVViBwbGFuYXIgKi8KICNkZWZpbmUgQ09MT1JfWVVWUEsJMgkvKiBZVVYgcGFja2VkICovCiAjZGVmaW5lIENPTE9SX1k4CTQJLyogbW9ub2Nocm9tZSAqLworI2RlZmluZSBDT0xPUl9KUEcgICAgICAgNSAgICAgICAvKiBKUEVHICovCisjZGVmaW5lIE1BU0tfQ09MT1IgICAgICAweGZmCisjZGVmaW5lIE1BU0tfSlBHX1FVQUxJVFkgMHhmZjAwCiAKIC8qIGZyYW1lIGRlY2ltYXRpb24uIE5vdCBpbXBsZW1lbnRlZCBieSBWNEwgeWV0KGV4cGVyaW1lbnRhbCBpbiBWNEwpICovCiAjZGVmaW5lIEZERUNfMQkJMQkvKiBjYXB0dXJlIGV2ZXJ5IGZyYW1lLiBkZWZhdWx0ICovCkBAIC0xNDgsMTYgKzE1NCwxNCBAQAogCXUzMiByZXN0YXJ0OwkvKiBpZiBEU1AgcmVxdWlyZXMgcmVzdGFydCAqLwogfTsKIAorCisjZGVmaW5lIFMyMjU1X1JFQURfSURMRQkJMAorI2RlZmluZSBTMjI1NV9SRUFEX0ZSQU1FCTEKKwogLyogZnJhbWUgc3RydWN0dXJlICovCi0jZGVmaW5lIEZSQU1FX1NUQVRFX1VOVVNFRAkwCi0jZGVmaW5lIEZSQU1FX1NUQVRFX0ZJTExJTkcJMQotI2RlZmluZSBGUkFNRV9TVEFURV9GVUxMCTIKLQotCiBzdHJ1Y3QgczIyNTVfZnJhbWVpIHsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0KLQl1bnNpZ25lZCBsb25nIHVsU3RhdGU7CS8qIHVsU3RhdGUgPT0wIHVudXNlZCwgMSBiZWluZyBmaWxsZWQsIDIgZnVsbCAqLworCXVuc2lnbmVkIGxvbmcgdWxTdGF0ZTsJLyogdWxTdGF0ZTpTMjI1NV9SRUFEX0lETEUsIFMyMjU1X1JFQURfRlJBTUUqLwogCXZvaWQgKmxwdmJpdHM7CQkvKiBpbWFnZSBkYXRhICovCiAJdW5zaWduZWQgbG9uZyBjdXJfc2l6ZTsJLyogY3VycmVudCBkYXRhIGNvcGllZCB0byBpdCAqLwogfTsKQEAgLTE4OCw2ICsxOTIsMTAgQEAKICNkZWZpbmUgUzIyNTVfRldfRkFJTEVECQkzCiAjZGVmaW5lIFMyMjU1X0ZXX0RJU0NPTk5FQ1RJTkcgIDQKIAorI2RlZmluZSBTMjI1NV9GV19NQVJLRVIgICAgICAgICAweDIyNTUyZjJmCisvKiAyMjU1IHJlYWQgc3RhdGVzICovCisjZGVmaW5lIFMyMjU1X1JFQURfSURMRSAgICAgICAgIDAKKyNkZWZpbmUgUzIyNTVfUkVBRF9GUkFNRSAgICAgICAgMQogc3RydWN0IHMyMjU1X2Z3IHsKIAlpbnQJCSAgICAgIGZ3X2xvYWRlZDsKIAlpbnQJCSAgICAgIGZ3X3NpemU7CkBAIC0xOTUsNyArMjAzLDYgQEAKIAlhdG9taWNfdAkgICAgICBmd19zdGF0ZTsKIAl2b2lkCQkgICAgICAqcGZ3X2RhdGE7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgICAgIHdhaXRfZnc7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgICAgIGRzcF93YWl0OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiB9OwogCkBAIC0yMzcsMTUgKzI0NCwyNyBAQAogCXN0cnVjdCBzMjI1NV9waXBlaW5mbwlwaXBlc1tNQVhfUElQRV9CVUZGRVJTXTsKIAlzdHJ1Y3QgczIyNTVfYnVmZmVyaQkJYnVmZmVyW01BWF9DSEFOTkVMU107CiAJc3RydWN0IHMyMjU1X21vZGUJbW9kZVtNQVhfQ0hBTk5FTFNdOworCS8qIGpwZWcgY29tcHJlc3Npb24gKi8KKwlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gamNbTUFYX0NIQU5ORUxTXTsKIAljb25zdCBzdHJ1Y3QgczIyNTVfZm10CSpjdXJfZm10W01BWF9DSEFOTkVMU107CiAJaW50CQkJY3VyX2ZyYW1lW01BWF9DSEFOTkVMU107CiAJaW50CQkJbGFzdF9mcmFtZVtNQVhfQ0hBTk5FTFNdOwogCXUzMgkJCWNjOwkvKiBjdXJyZW50IGNoYW5uZWwgKi8KIAlpbnQJCQliX2FjcXVpcmVbTUFYX0NIQU5ORUxTXTsKKwkvKiBhbGxvY2F0ZWQgaW1hZ2Ugc2l6ZSAqLwogCXVuc2lnbmVkIGxvbmcJCXJlcV9pbWFnZV9zaXplW01BWF9DSEFOTkVMU107CisJLyogcmVjZWl2ZWQgcGFja2V0IHNpemUgKi8KKwl1bnNpZ25lZCBsb25nCQlwa3Rfc2l6ZVtNQVhfQ0hBTk5FTFNdOwogCWludAkJCWJhZF9wYXlsb2FkW01BWF9DSEFOTkVMU107CiAJdW5zaWduZWQgbG9uZwkJZnJhbWVfY291bnRbTUFYX0NIQU5ORUxTXTsKIAlpbnQJCQlmcmFtZV9yZWFkeTsKKwkvKiBpZiBKUEVHIGltYWdlICovCisJaW50ICAgICAgICAgICAgICAgICAgICAganBnX3NpemVbTUFYX0NIQU5ORUxTXTsKKwkvKiBpZiBjaGFubmVsIGNvbmZpZ3VyZWQgdG8gZGVmYXVsdCBzdGF0ZSAqLworCWludCAgICAgICAgICAgICAgICAgICAgIGNobl9jb25maWd1cmVkW01BWF9DSEFOTkVMU107CisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgd2FpdF9zZXRtb2RlW01BWF9DSEFOTkVMU107CisJaW50ICAgICAgICAgICAgICAgICAgICAgc2V0bW9kZV9yZWFkeVtNQVhfQ0hBTk5FTFNdOworCWludCAgICAgICAgICAgICAgICAgICAgIGNobl9yZWFkeTsKIAlzdHJ1Y3Qga3JlZgkJa3JlZjsKIAlzcGlubG9ja190ICAgICAgICAgICAgICBzbG9jazsKIH07CkBAIC0zMDYsMTIgKzMyNSwxNiBAQAogc3RhdGljIGludCBzMjI1NV9zdGFydF9hY3F1aXJlKHN0cnVjdCBzMjI1NV9kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBjaG4pOwogc3RhdGljIGludCBzMjI1NV9zdG9wX2FjcXVpcmUoc3RydWN0IHMyMjU1X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGNobik7CiBzdGF0aWMgdm9pZCBzMjI1NV9maWxsYnVmZihzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHN0cnVjdCBzMjI1NV9idWZmZXIgKmJ1ZiwKLQkJCSAgIGludCBjaG4pOworCQkJICAgaW50IGNobiwgaW50IGpwZ3NpemUpOwogc3RhdGljIGludCBzMjI1NV9zZXRfbW9kZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgY2huLAogCQkJICBzdHJ1Y3QgczIyNTVfbW9kZSAqbW9kZSk7CiBzdGF0aWMgaW50IHMyMjU1X2JvYXJkX3NodXRkb3duKHN0cnVjdCBzMjI1NV9kZXYgKmRldik7CiBzdGF0aWMgdm9pZCBzMjI1NV9leGl0X3Y0bChzdHJ1Y3QgczIyNTVfZGV2ICpkZXYpOwotc3RhdGljIHZvaWQgczIyNTVfZndsb2FkX3N0YXJ0KHN0cnVjdCBzMjI1NV9kZXYgKmRldik7CitzdGF0aWMgdm9pZCBzMjI1NV9md2xvYWRfc3RhcnQoc3RydWN0IHMyMjU1X2RldiAqZGV2LCBpbnQgcmVzZXQpOworc3RhdGljIHZvaWQgczIyNTVfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZik7CitzdGF0aWMgbG9uZyBzMjI1NV92ZW5kb3JfcmVxKHN0cnVjdCBzMjI1NV9kZXYgKmRldiwgdW5zaWduZWQgY2hhciByZXEsCisJCQkgICAgIHUxNiBpbmRleCwgdTE2IHZhbHVlLCB2b2lkICpidWYsCisJCQkgICAgIHMzMiBidWZfbGVuLCBpbnQgYk91dCk7CiAKICNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pCQkJCQlcCiAJZG8gewkJCQkJCQkJXApAQCAtNDA3LDYgKzQzMCwxMCBAQAogCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1VZVlksCiAJCS5kZXB0aCA9IDE2CiAJfSwgeworCQkubmFtZSA9ICJKUEciLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX0pQRUcsCisJCS5kZXB0aCA9IDI0CisJfSwgewogCQkubmFtZSA9ICI4YnBwIEdSRVkiLAogCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX0dSRVksCiAJCS5kZXB0aCA9IDgKQEAgLTQ2NCw2ICs0OTEsMTMgQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyB2b2lkIHMyMjU1X3Jlc2V0X2RzcHBvd2VyKHN0cnVjdCBzMjI1NV9kZXYgKmRldikKK3sKKwlzMjI1NV92ZW5kb3JfcmVxKGRldiwgMHg0MCwgMHgwYjBiLCAweDBiMGIsIE5VTEwsIDAsIDEpOworCW1zbGVlcCgxMCk7CisJczIyNTVfdmVuZG9yX3JlcShkZXYsIDB4NTAsIDB4MDAwMCwgMHgwMDAwLCBOVUxMLCAwLCAxKTsKKwlyZXR1cm47Cit9CiAKIC8qIGtpY2tzdGFydHMgdGhlIGZpcm13YXJlIGxvYWRpbmcuIGZyb20gcHJvYmUKICAqLwpAQCAtNDgwLDE4ICs1MTQsNiBAQAogCX0KIH0KIAotLyogY2FsbGVkIHdoZW4gRFNQIGlzIHVwIGFuZCBydW5uaW5nLiAgRFNQIGlzIGd1YXJhbnRlZWQgdG8KLSAgIGJlIHJ1bm5pbmcgYWZ0ZXIgUzIyNTVfRFNQX0JPT1RUSU1FICovCi1zdGF0aWMgdm9pZCBzMjI1NV9kc3BfcnVubmluZyh1bnNpZ25lZCBsb25nIHVzZXJfZGF0YSkKLXsKLQlzdHJ1Y3QgczIyNTVfZncgKmRhdGEgPSAoc3RydWN0IHMyMjU1X2Z3ICopdXNlcl9kYXRhOwotCWRwcmludGsoMSwgImRzcCBydW5uaW5nXG4iKTsKLQlhdG9taWNfc2V0KCZkYXRhLT5md19zdGF0ZSwgUzIyNTVfRldfU1VDQ0VTUyk7Ci0Jd2FrZV91cCgmZGF0YS0+d2FpdF9mdyk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiczIyNTU6IGZpcm13YXJlIGxvYWRlZCBzdWNjZXNzZnVsbHlcbiIpOwotCXJldHVybjsKLX0KLQogCiAvKiB0aGlzIGxvYWRzIHRoZSBmaXJtd2FyZSBhc3luY2hyb25vdXNseS4KICAgIE9yaWdpbmFsbHkgdGhpcyB3YXMgZG9uZSBzeW5jaHJvb3VzbHkgaW4gcHJvYmUuCkBAIC01NDksMTkgKzU3MSwxNCBAQAogCQl9CiAJCWRhdGEtPmZ3X2xvYWRlZCArPSBsZW47CiAJfSBlbHNlIHsKLQkJaW5pdF90aW1lcigmZGF0YS0+ZHNwX3dhaXQpOwotCQlkYXRhLT5kc3Bfd2FpdC5mdW5jdGlvbiA9IHMyMjU1X2RzcF9ydW5uaW5nOwotCQlkYXRhLT5kc3Bfd2FpdC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGF0YTsKIAkJYXRvbWljX3NldCgmZGF0YS0+Zndfc3RhdGUsIFMyMjU1X0ZXX0xPQURFRF9EU1BXQUlUKTsKLQkJbW9kX3RpbWVyKCZkYXRhLT5kc3Bfd2FpdCwgbXNlY3NfdG9famlmZmllcyhTMjI1NV9EU1BfQk9PVFRJTUUpCi0JCQkgICsgamlmZmllcyk7CiAJfQogCWRwcmludGsoMTAwLCAiMjI1NSBjb21wbGV0ZSBkb25lXG4iKTsKIAlyZXR1cm47CiAKIH0KIAotc3RhdGljIGludCBzMjI1NV9nb3RfZnJhbWUoc3RydWN0IHMyMjU1X2RldiAqZGV2LCBpbnQgY2huKQorc3RhdGljIGludCBzMjI1NV9nb3RfZnJhbWUoc3RydWN0IHMyMjU1X2RldiAqZGV2LCBpbnQgY2huLCBpbnQganBnc2l6ZSkKIHsKIAlzdHJ1Y3QgczIyNTVfZG1hcXVldWUgKmRtYV9xID0gJmRldi0+dmlkcVtjaG5dOwogCXN0cnVjdCBzMjI1NV9idWZmZXIgKmJ1ZjsKQEAgLTU4Niw4ICs2MDMsNyBAQAogCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKIAlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOwogCWRwcmludGsoMTAwLCAiWyVwLyVkXSB3YWtldXBcbiIsIGJ1ZiwgYnVmLT52Yi5pKTsKLQotCXMyMjU1X2ZpbGxidWZmKGRldiwgYnVmLCBkbWFfcS0+Y2hhbm5lbCk7CisJczIyNTVfZmlsbGJ1ZmYoZGV2LCBidWYsIGRtYV9xLT5jaGFubmVsLCBqcGdzaXplKTsKIAl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOwogCWRwcmludGsoMiwgIndha2V1cCBbYnVmL2ldIFslcC8lZF1cbiIsIGJ1ZiwgYnVmLT52Yi5pKTsKIHVubG9jazoKQEAgLTYyMSw3ICs2MzcsNyBAQAogICoKICAqLwogc3RhdGljIHZvaWQgczIyNTVfZmlsbGJ1ZmYoc3RydWN0IHMyMjU1X2RldiAqZGV2LCBzdHJ1Y3QgczIyNTVfYnVmZmVyICpidWYsCi0JCQkgICBpbnQgY2huKQorCQkJICAgaW50IGNobiwgaW50IGpwZ3NpemUpCiB7CiAJaW50IHBvcyA9IDA7CiAJc3RydWN0IHRpbWV2YWwgdHM7CkBAIC02NDksNiArNjY1LDEwIEBACiAJCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6CiAJCQltZW1jcHkodmJ1ZiwgdG1wYnVmLCBidWYtPnZiLndpZHRoICogYnVmLT52Yi5oZWlnaHQpOwogCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX0pQRUc6CisJCQlidWYtPnZiLnNpemUgPSBqcGdzaXplOworCQkJbWVtY3B5KHZidWYsIHRtcGJ1ZiwgYnVmLT52Yi5zaXplKTsKKwkJCWJyZWFrOwogCQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOgogCQkJbWVtY3B5KHZidWYsIHRtcGJ1ZiwKIAkJCSAgICAgICBidWYtPnZiLndpZHRoICogYnVmLT52Yi5oZWlnaHQgKiAyKTsKQEAgLTY1Nyw5ICs2NzcsNiBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgInMyMjU1OiB1bmtub3duIGZvcm1hdD9cbiIpOwogCQl9CiAJCWRldi0+bGFzdF9mcmFtZVtjaG5dID0gLTE7Ci0JCS8qIGRvbmUgd2l0aCB0aGUgZnJhbWUsIGZyZWUgaXQgKi8KLQkJZnJtLT51bFN0YXRlID0gMDsKLQkJZHByaW50ayg0LCAiZnJlZWluZyBidWZmZXJcbiIpOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiczIyNTU6ID09PT09PT1ubyBmcmFtZVxuIik7CiAJCXJldHVybjsKQEAgLTEwMjEsNiArMTAzOCwxMCBAQAogCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6CiAJCWZoLT5tb2RlLmNvbG9yID0gQ09MT1JfWTg7CiAJCWJyZWFrOworCWNhc2UgVjRMMl9QSVhfRk1UX0pQRUc6CisJCWZoLT5tb2RlLmNvbG9yID0gQ09MT1JfSlBHIHwKKwkJCShmaC0+ZGV2LT5qY1tmaC0+Y2hhbm5lbF0ucXVhbGl0eSA8PCA4KTsKKwkJYnJlYWs7CiAJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoKIAkJZmgtPm1vZGUuY29sb3IgPSBDT0xPUl9ZVVZQTDsKIAkJYnJlYWs7CkBAIC0xMTM5LDcgKzExNjAsNyBAQAogCQl9CiAJfQogCW91dEltYWdlU2l6ZSA9IGxpbmVzUGVyRnJhbWUgKiBwaXhlbHNQZXJMaW5lOwotCWlmIChtb2RlLT5jb2xvciAhPSBDT0xPUl9ZOCkgeworCWlmICgobW9kZS0+Y29sb3IgJiBNQVNLX0NPTE9SKSAhPSBDT0xPUl9ZOCkgewogCQkvKiAyIGJ5dGVzL3BpeGVsIGlmIG5vdCBtb25vY2hyb21lICovCiAJCW91dEltYWdlU2l6ZSAqPSAyOwogCX0KQEAgLTExODUsMTIgKzEyMDYsMTcgQEAKIAl1MzIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGNobl9yZXY7CiAKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWNobl9yZXYgPSBHX2Nobm1hcFtjaG5dOwogCWRwcmludGsoMywgIm1vZGUgc2NhbGUgWyVsZF0gJXAgJWRcbiIsIGNobiwgbW9kZSwgbW9kZS0+c2NhbGUpOwogCWRwcmludGsoMywgIm1vZGUgc2NhbGUgWyVsZF0gJXAgJWRcbiIsIGNobiwgJmRldi0+bW9kZVtjaG5dLAogCQlkZXYtPm1vZGVbY2huXS5zY2FsZSk7CiAJZHByaW50aygyLCAibW9kZSBjb250cmFzdCAleFxuIiwgbW9kZS0+Y29udHJhc3QpOwogCisJLyogaWYgSlBFRywgc2V0IHRoZSBxdWFsaXR5ICovCisJaWYgKChtb2RlLT5jb2xvciAmIE1BU0tfQ09MT1IpID09IENPTE9SX0pQRykKKwkJbW9kZS0+Y29sb3IgPSAoZGV2LT5qY1tjaG5dLnF1YWxpdHkgPDwgOCkgfCBDT0xPUl9KUEc7CisKIAkvKiBzYXZlIHRoZSBtb2RlICovCiAJZGV2LT5tb2RlW2Nobl0gPSAqbW9kZTsKIAlkZXYtPnJlcV9pbWFnZV9zaXplW2Nobl0gPSBnZXRfdHJhbnNmZXJfc2l6ZShtb2RlKTsKQEAgLTExOTksNiArMTIyNSw3IEBACiAJYnVmZmVyID0ga3phbGxvYyg1MTIsIEdGUF9LRVJORUwpOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgIm91dCBvZiBtZW1cbiIpOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTIxNCwxMiArMTI0MSwyMCBAQAogCWRwcmludGsoMSwgInNldCBtb2RlIGRvbmUgY2huICVsdSwgJWRcbiIsIGNobiwgcmVzKTsKIAogCS8qIHdhaXQgYXQgbGVhc3QgMyBmcmFtZXMgYmVmb3JlIGNvbnRpbnVpbmcgKi8KLQlpZiAobW9kZS0+cmVzdGFydCkKLQkJbXNsZWVwKDEyNSk7CisJaWYgKG1vZGUtPnJlc3RhcnQpIHsKKwkJZGV2LT5zZXRtb2RlX3JlYWR5W2Nobl0gPSAwOworCQl3YWl0X2V2ZW50X3RpbWVvdXQoZGV2LT53YWl0X3NldG1vZGVbY2huXSwKKwkJCQkgICAoZGV2LT5zZXRtb2RlX3JlYWR5W2Nobl0gIT0gMCksCisJCQkJICAgbXNlY3NfdG9famlmZmllcyhTMjI1NV9TRVRNT0RFX1RJTUVPVVQpKTsKKwkJaWYgKGRldi0+c2V0bW9kZV9yZWFkeVtjaG5dICE9IDEpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJzMjI1NTogbm8gc2V0IG1vZGUgcmVzcG9uc2VcbiIpOworCQkJcmVzID0gLUVGQVVMVDsKKwkJfQorCX0KIAogCS8qIGNsZWFyIHRoZSByZXN0YXJ0IGZsYWcgKi8KIAlkZXYtPm1vZGVbY2huXS5yZXN0YXJ0ID0gMDsKLQorCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xMjcwLDcgKzEzMDUsNyBAQAogCWRldi0+Y3VyX2ZyYW1lW2Nobl0gPSAwOwogCWRldi0+ZnJhbWVfY291bnRbY2huXSA9IDA7CiAJZm9yIChqID0gMDsgaiA8IFNZU19GUkFNRVM7IGorKykgewotCQlkZXYtPmJ1ZmZlcltjaG5dLmZyYW1lW2pdLnVsU3RhdGUgPSAwOworCQlkZXYtPmJ1ZmZlcltjaG5dLmZyYW1lW2pdLnVsU3RhdGUgPSBTMjI1NV9SRUFEX0lETEU7CiAJCWRldi0+YnVmZmVyW2Nobl0uZnJhbWVbal0uY3VyX3NpemUgPSAwOwogCX0KIAlyZXMgPSB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZiX3ZpZHEpOwpAQCAtMTQ0Niw2ICsxNDgxLDI3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX2dfanBlZ2NvbXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqYykKK3sKKwlzdHJ1Y3QgczIyNTVfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OworCSpqYyA9IGRldi0+amNbZmgtPmNoYW5uZWxdOworCWRwcmludGsoMiwgImdldHRpbmcganBlZ2NvbXByZXNzaW9uLCBxdWFsaXR5ICVkXG4iLCBqYy0+cXVhbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfanBlZ2NvbXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqYykKK3sKKwlzdHJ1Y3QgczIyNTVfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWlmIChqYy0+cXVhbGl0eSA8IDAgfHwgamMtPnF1YWxpdHkgPiAxMDApCisJCXJldHVybiAtRUlOVkFMOworCWRldi0+amNbZmgtPmNoYW5uZWxdLnF1YWxpdHkgPSBqYy0+cXVhbGl0eTsKKwlkcHJpbnRrKDIsICJzZXR0aW5nIGpwZWcgcXVhbGl0eSAlZFxuIiwgamMtPnF1YWxpdHkpOworCXJldHVybiAwOworfQogc3RhdGljIGludCBzMjI1NV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CkBAIC0xNDU1LDggKzE1MTEsMTAgQEAKIAllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CiAJaW50IGkgPSAwOwogCWludCBjdXJfY2hhbm5lbCA9IC0xOworCWludCBzdGF0ZTsKIAlkcHJpbnRrKDEsICJzMjI1NTogb3BlbiBjYWxsZWQgKG1pbm9yPSVkKVxuIiwgbWlub3IpOwogCisJbG9ja19rZXJuZWwoKTsKIAlsaXN0X2Zvcl9lYWNoKGxpc3QsICZzMjI1NV9kZXZsaXN0KSB7CiAJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBzMjI1NV9kZXYsIHMyMjU1X2Rldmxpc3QpOwogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTOyBpKyspIHsKQEAgLTE0NjksNDUgKzE1MjcsNzggQEAKIAl9CiAKIAlpZiAoKE5VTEwgPT0gZGV2KSB8fCAoY3VyX2NoYW5uZWwgPT0gLTEpKSB7Ci0JCWRwcmludGsoMSwgInMyMjU1OiBvcGVudjRsIG5vIGRldlxuIik7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiczIyNTU6IG9wZW52NGwgbm8gZGV2XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJaWYgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKSA9PSBTMjI1NV9GV19ESVNDT05ORUNUSU5HKSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZGlzY29ubmVjdGluZ1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlrcmVmX2dldCgmZGV2LT5rcmVmKTsKIAltdXRleF9sb2NrKCZkZXYtPm9wZW5fbG9jayk7CiAKIAlkZXYtPnVzZXJzW2N1cl9jaGFubmVsXSsrOwogCWRwcmludGsoNCwgInMyMjU1OiBvcGVuX2hhbmRsZXMgJWRcbiIsIGRldi0+dXNlcnNbY3VyX2NoYW5uZWxdKTsKIAotCWlmIChhdG9taWNfcmVhZCgmZGV2LT5md19kYXRhLT5md19zdGF0ZSkgPT0gUzIyNTVfRldfRkFJTEVEKSB7CisJc3dpdGNoIChhdG9taWNfcmVhZCgmZGV2LT5md19kYXRhLT5md19zdGF0ZSkpIHsKKwljYXNlIFMyMjU1X0ZXX0ZBSUxFRDoKIAkJZXJyKCIyMjU1IGZpcm13YXJlIGxvYWQgZmFpbGVkLiByZXRyeWluZy5cbiIpOwotCQlzMjI1NV9md2xvYWRfc3RhcnQoZGV2KTsKKwkJczIyNTVfZndsb2FkX3N0YXJ0KGRldiwgMSk7CiAJCXdhaXRfZXZlbnRfdGltZW91dChkZXYtPmZ3X2RhdGEtPndhaXRfZncsCi0JCQkJICAgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQotCQkJCSAgICAhPSBTMjI1NV9GV19OT1RMT0FERUQpLAorCQkJCSAgICgoYXRvbWljX3JlYWQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUpCisJCQkJICAgICA9PSBTMjI1NV9GV19TVUNDRVNTKSB8fAorCQkJCSAgICAoYXRvbWljX3JlYWQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUpCisJCQkJICAgICA9PSBTMjI1NV9GV19ESVNDT05ORUNUSU5HKSksCiAJCQkJICAgbXNlY3NfdG9famlmZmllcyhTMjI1NV9MT0FEX1RJTUVPVVQpKTsKLQkJaWYgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQotCQkgICAgIT0gUzIyNTVfRldfU1VDQ0VTUykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiMjI1NSBGVyBsb2FkIGZhaWxlZC5cbiIpOwotCQkJZGV2LT51c2Vyc1tjdXJfY2hhbm5lbF0tLTsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5vcGVuX2xvY2spOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKSA9PSBTMjI1NV9GV19OT1RMT0FERUQpIHsKKwkJYnJlYWs7CisJY2FzZSBTMjI1NV9GV19OT1RMT0FERUQ6CisJY2FzZSBTMjI1NV9GV19MT0FERURfRFNQV0FJVDoKIAkJLyogZ2l2ZSBTMjI1NV9MT0FEX1RJTUVPVVQgdGltZSBmb3IgZmlybXdhcmUgdG8gbG9hZCBpbiBjYXNlCiAJCSAgIGRyaXZlciBsb2FkZWQgYW5kIHRoZW4gZGV2aWNlIGltbWVkaWF0ZWx5IG9wZW5lZCAqLwogCQlwcmludGsoS0VSTl9JTkZPICIlcyB3YWl0aW5nIGZvciBmaXJtd2FyZSBsb2FkXG4iLCBfX2Z1bmNfXyk7CiAJCXdhaXRfZXZlbnRfdGltZW91dChkZXYtPmZ3X2RhdGEtPndhaXRfZncsCi0JCQkJICAgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQotCQkJCSAgICE9IFMyMjU1X0ZXX05PVExPQURFRCksCi0JCQkJICAgbXNlY3NfdG9famlmZmllcyhTMjI1NV9MT0FEX1RJTUVPVVQpKTsKLQkJaWYgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQotCQkgICAgIT0gUzIyNTVfRldfU1VDQ0VTUykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiMjI1NSBmaXJtd2FyZSBub3QgbG9hZGVkIgotCQkJICAgICAgICJ0cnkgYWdhaW5cbiIpOwotCQkJZGV2LT51c2Vyc1tjdXJfY2hhbm5lbF0tLTsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5vcGVuX2xvY2spOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCQkgICAoKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQorCQkJCSAgICAgPT0gUzIyNTVfRldfU1VDQ0VTUykgfHwKKwkJCQkgICAgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQorCQkJCSAgICAgPT0gUzIyNTVfRldfRElTQ09OTkVDVElORykpLAorCQkJbXNlY3NfdG9famlmZmllcyhTMjI1NV9MT0FEX1RJTUVPVVQpKTsKKwkJYnJlYWs7CisJY2FzZSBTMjI1NV9GV19TVUNDRVNTOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlzdGF0ZSA9IGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKTsKKwlpZiAoc3RhdGUgIT0gUzIyNTVfRldfU1VDQ0VTUykgeworCQlpbnQgcmM7CisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBTMjI1NV9GV19GQUlMRUQ6CisJCQlwcmludGsoS0VSTl9JTkZPICIyMjU1IEZXIGxvYWQgZmFpbGVkLiAlZFxuIiwgc3RhdGUpOworCQkJcmMgPSAtRU5PREVWOworCQkJYnJlYWs7CisJCWNhc2UgUzIyNTVfRldfRElTQ09OTkVDVElORzoKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkaXNjb25uZWN0aW5nXG4iLCBfX2Z1bmNfXyk7CisJCQlyYyA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJY2FzZSBTMjI1NV9GV19MT0FERURfRFNQV0FJVDoKKwkJY2FzZSBTMjI1NV9GV19OT1RMT0FERUQ6CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogZmlybXdhcmUgbm90IGxvYWRlZCB5ZXQiCisJCQkgICAgICAgInBsZWFzZSB0cnkgYWdhaW4gbGF0ZXJcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJcmMgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5rbm93biBzdGF0ZVxuIiwgX19mdW5jX18pOworCQkJcmMgPSAtRUZBVUxUOworCQkJYnJlYWs7CiAJCX0KKwkJZGV2LT51c2Vyc1tjdXJfY2hhbm5lbF0tLTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7CisJCWtyZWZfcHV0KCZkZXYtPmtyZWYsIHMyMjU1X2Rlc3Ryb3kpOworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiByYzsKIAl9CiAKIAkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwpAQCAtMTUxNSw2ICsxNjA2LDggQEAKIAlpZiAoTlVMTCA9PSBmaCkgewogCQlkZXYtPnVzZXJzW2N1cl9jaGFubmVsXS0tOwogCQltdXRleF91bmxvY2soJmRldi0+b3Blbl9sb2NrKTsKKwkJa3JlZl9wdXQoJmRldi0+a3JlZiwgczIyNTVfZGVzdHJveSk7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNTI4LDYgKzE2MjEsMTMgQEAKIAlmaC0+aGVpZ2h0ID0gTlVNX0xJTkVTXzRDSUZTX05UU0MgKiAyOwogCWZoLT5jaGFubmVsID0gY3VyX2NoYW5uZWw7CiAKKwkvKiBjb25maWd1cmUgY2hhbm5lbCB0byBkZWZhdWx0IHN0YXRlICovCisJaWYgKCFkZXYtPmNobl9jb25maWd1cmVkW2N1cl9jaGFubmVsXSkgeworCQlzMjI1NV9zZXRfbW9kZShkZXYsIGN1cl9jaGFubmVsLCAmZmgtPm1vZGUpOworCQlkZXYtPmNobl9jb25maWd1cmVkW2N1cl9jaGFubmVsXSA9IDE7CisJfQorCisKIAkvKiBQdXQgYWxsIGNvbnRyb2xzIGF0IGEgc2FuZSBzdGF0ZSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHMyMjU1X3FjdHJsKTsgaSsrKQogCQlxY3RsX3JlZ3NbaV0gPSBzMjI1NV9xY3RybFtpXS5kZWZhdWx0X3ZhbHVlOwpAQCAtMTU0Niw4ICsxNjQ2LDggQEAKIAkJCQkgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAogCQkJCSAgICBzaXplb2Yoc3RydWN0IHMyMjU1X2J1ZmZlciksIGZoKTsKIAotCWtyZWZfZ2V0KCZkZXYtPmtyZWYpOwogCW11dGV4X3VubG9jaygmZGV2LT5vcGVuX2xvY2spOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU2OSwzMCArMTY2OSwyNCBAQAogc3RhdGljIHZvaWQgczIyNTVfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSB0b19zMjI1NV9kZXYoa3JlZik7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwlpbnQgaTsKIAlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgInMyMjU1ZHJ2OiBrcmVmIHByb2JsZW1cbiIpOwogCQlyZXR1cm47CiAJfQotCi0JLyoKLQkgKiBXYWtlIHVwIGFueSBmaXJtd2FyZSBsb2FkIHdhaXRpbmcgKG9ubHkgZG9uZSBpbiAub3BlbiwKLQkgKiB3aGljaCBob2xkcyB0aGUgb3Blbl9sb2NrIG11dGV4KQotCSAqLwogCWF0b21pY19zZXQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUsIFMyMjU1X0ZXX0RJU0NPTk5FQ1RJTkcpOwogCXdha2VfdXAoJmRldi0+ZndfZGF0YS0+d2FpdF9mdyk7Ci0KLQkvKiBwcmV2ZW50IHMyMjU1X2Rpc2Nvbm5lY3QgZnJvbSByYWNpbmcgczIyNTVfb3BlbiAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ0hBTk5FTFM7IGkrKykgeworCQlkZXYtPnNldG1vZGVfcmVhZHlbaV0gPSAxOworCQl3YWtlX3VwKCZkZXYtPndhaXRfc2V0bW9kZVtpXSk7CisJfQogCW11dGV4X2xvY2soJmRldi0+b3Blbl9sb2NrKTsKKwkvKiByZXNldCB0aGUgRFNQIHNvIGZpcm13YXJlIGNhbiBiZSByZWxvYWQgbmV4dCB0aW1lICovCisJczIyNTVfcmVzZXRfZHNwcG93ZXIoZGV2KTsKIAlzMjI1NV9leGl0X3Y0bChkZXYpOwotCS8qCi0JICogZGV2aWNlIHVucmVnaXN0ZXJlZCBzbyBubyBsb25nZXIgcG9zc2libGUgdG8gb3Blbi4gb3Blbl9tdXRleAotCSAqICBjYW4gYmUgdW5sb2NrZWQgYW5kIHRpbWVycyBkZWxldGVkIGFmdGVyd2FyZHMuCi0JICovCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7Ci0KIAkvKiBib2FyZCBzaHV0ZG93biBzdG9wcyB0aGUgcmVhZCBwaXBlIGlmIGl0IGlzIHJ1bm5pbmcgKi8KIAlzMjI1NV9ib2FyZF9zaHV0ZG93bihkZXYpOwotCiAJLyogbWFrZSBzdXJlIGZpcm13YXJlIHN0aWxsIG5vdCB0cnlpbmcgdG8gbG9hZCAqLwogCWRlbF90aW1lcigmZGV2LT50aW1lcik7ICAvKiBvbmx5IHN0YXJ0ZWQgaW4gLnByb2JlIGFuZCAub3BlbiAqLwogCkBAIC0xNjAyLDIzICsxNjk2LDE5IEBACiAJCXVzYl9mcmVlX3VyYihkZXYtPmZ3X2RhdGEtPmZ3X3VyYik7CiAJCWRldi0+ZndfZGF0YS0+ZndfdXJiID0gTlVMTDsKIAl9Ci0KLQkvKgotCSAqIGRlbGV0ZSB0aGUgZHNwX3dhaXQgdGltZXIsIHdoaWNoIHNldHMgdGhlIGZpcm13YXJlCi0JICogc3RhdGUgb24gY29tcGxldGlvbi4gIFRoaXMgaXMgZG9uZSBiZWZvcmUgZndfZGF0YQotCSAqIGlzIGZyZWVkIGJlbG93LgotCSAqLwotCi0JZGVsX3RpbWVyKCZkZXYtPmZ3X2RhdGEtPmRzcF93YWl0KTsgLyogb25seSBzdGFydGVkIGluIC5vcGVuICovCi0KIAlpZiAoZGV2LT5md19kYXRhLT5mdykKIAkJcmVsZWFzZV9maXJtd2FyZShkZXYtPmZ3X2RhdGEtPmZ3KTsKIAlrZnJlZShkZXYtPmZ3X2RhdGEtPnBmd19kYXRhKTsKIAlrZnJlZShkZXYtPmZ3X2RhdGEpOwotCiAJdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKIAlkcHJpbnRrKDEsICIlcyIsIF9fZnVuY19fKTsKIAlrZnJlZShkZXYpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZzMjI1NV9kZXZsaXN0KSkgeworCQlsaXN0ID0gczIyNTVfZGV2bGlzdC5uZXh0OworCQlsaXN0X2RlbChsaXN0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgczIyNTVfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0xNzAyLDYgKzE3OTIsOCBAQAogI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAogCS52aWRpb2NnbWJ1ZiA9IHZpZGlvY19jZ21idWYsCiAjZW5kaWYKKwkudmlkaW9jX3NfanBlZ2NvbXAgPSB2aWRpb2Nfc19qcGVnY29tcCwKKwkudmlkaW9jX2dfanBlZ2NvbXAgPSB2aWRpb2NfZ19qcGVnY29tcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHRlbXBsYXRlID0gewpAQCAtMTc0MCw3ICsxODMyLDcgQEAKIAkJCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnZkZXZbaV0sCiAJCQkJCQkgICAgVkZMX1RZUEVfR1JBQkJFUiwKIAkJCQkJCSAgICBjdXJfbnIgKyBpKTsKLQkJZGV2LT52ZGV2W2ldLT5wcml2ID0gZGV2OworCQl2aWRlb19zZXRfZHJ2ZGF0YShkZXYtPnZkZXZbaV0sIGRldik7CiAKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwKQEAgLTE3NTQsMTggKzE4NDYsMTYgQEAKIAogc3RhdGljIHZvaWQgczIyNTVfZXhpdF92NGwoc3RydWN0IHMyMjU1X2RldiAqZGV2KQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKIAlpbnQgaTsKLQkvKiB1bnJlZ2lzdGVyIHRoZSB2aWRlbyBkZXZpY2VzICovCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZzMjI1NV9kZXZsaXN0KSkgewotCQlsaXN0ID0gczIyNTVfZGV2bGlzdC5uZXh0OwotCQlsaXN0X2RlbChsaXN0KTsKLQl9CiAJZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMUzsgaSsrKSB7Ci0JCWlmICgtMSAhPSBkZXYtPnZkZXZbaV0tPm1pbm9yKQorCQlpZiAoLTEgIT0gZGV2LT52ZGV2W2ldLT5taW5vcikgewogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2W2ldKTsKLQkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiczIyNTUgdW5yZWdpc3RlcmVkXG4iKTsKKwkJfSBlbHNlIHsKIAkJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmRldltpXSk7CisJCQlwcmludGsoS0VSTl9JTkZPICJzMjI1NSByZWxlYXNlZFxuIik7CisJCX0KIAl9CiB9CiAKQEAgLTE3NzUsMTMzICsxODY1LDEyMiBAQAogICogZnVuY3Rpb24gYWdhaW4pLgogICoKICAqIFJlY2VpdmVkIGZyYW1lIHN0cnVjdHVyZToKLSAqIGJ5dGVzIDAtMzogIG1hcmtlciA6IDB4MjI1NURBNEFMIChGUkFNRV9NQVJLRVIpCisgKiBieXRlcyAwLTM6ICBtYXJrZXIgOiAweDIyNTVEQTRBTCAoUzIyNTVfTUFSS0VSX0ZSQU1FKQogICogYnl0ZXMgNC03OiAgY2hhbm5lbDogMC0zCiAgKiBieXRlcyA4LTExOiBwYXlsb2FkIHNpemU6ICBzaXplIG9mIHRoZSBmcmFtZQogICogYnl0ZXMgMTItcGF5bG9hZHNpemUrMTI6ICBmcmFtZSBkYXRhCiAgKi8KIHN0YXRpYyBpbnQgc2F2ZV9mcmFtZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHN0cnVjdCBzMjI1NV9waXBlaW5mbyAqcGlwZV9pbmZvKQogewotCXN0YXRpYyBpbnQgZGJnc3luYzsgLyogPSAwOyAqLwogCWNoYXIgKnBkZXN0OwogCXUzMiBvZmZzZXQgPSAwOwotCWludCBic3luYyA9IDA7Ci0JaW50IGJ0cnVuYyA9IDA7CisJaW50IGJmcmFtZSA9IDA7CiAJY2hhciAqcHNyYzsKIAl1bnNpZ25lZCBsb25nIGNvcHlfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJczMyIGlkeCA9IC0xOwogCXN0cnVjdCBzMjI1NV9mcmFtZWkgKmZybTsKIAl1bnNpZ25lZCBjaGFyICpwZGF0YTsKLQl1bnNpZ25lZCBsb25nIGN1cl9zaXplOwotCWludCBic2VhcmNoID0gMDsKLQlzdHJ1Y3QgczIyNTVfYnVmZmVyaSAqYnVmOworCiAJZHByaW50aygxMDAsICJidWZmZXIgdG8gdXNlclxuIik7CiAKIAlpZHggPSBkZXYtPmN1cl9mcmFtZVtkZXYtPmNjXTsKLQlidWYgPSAmZGV2LT5idWZmZXJbZGV2LT5jY107Ci0JZnJtID0gJmJ1Zi0+ZnJhbWVbaWR4XTsKLQotCWlmIChmcm0tPnVsU3RhdGUgPT0gMCkgewotCQlmcm0tPnVsU3RhdGUgPSAxOwotCQlmcm0tPmN1cl9zaXplID0gMDsKLQkJYnNlYXJjaCA9IDE7Ci0JfSBlbHNlIGlmIChmcm0tPnVsU3RhdGUgPT0gMikgewotCQkvKiBzeXN0ZW0gZnJhbWUgd2FzIG5vdCBmcmVlZCAqLwotCQlkcHJpbnRrKDIsICJzeXMgZnJhbWUgbm90IGZyZWUuICBvdmVycnVuIHJpbmdidWZcbiIpOwotCQlic2VhcmNoID0gMTsKLQkJZnJtLT51bFN0YXRlID0gMTsKLQkJZnJtLT5jdXJfc2l6ZSA9IDA7Ci0JfQotCi0JaWYgKGJzZWFyY2gpIHsKLQkJaWYgKCooczMyICopIHBpcGVfaW5mby0+dHJhbnNmZXJfYnVmZmVyICE9IEZSQU1FX01BUktFUikgewotCQkJdTMyIGpqOwotCQkJaWYgKGRiZ3N5bmMgPT0gMCkgewotCQkJCWRwcmludGsoMywgIm5vdCBzeW5jaGVkLCBkaXNjYXJkaW5nIGFsbCBwYWNrZXRzIgotCQkJCQkidW50aWwgbWFya2VyXG4iKTsKLQotCQkJCWRiZ3N5bmMrKzsKLQkJCX0KLQkJCXBkYXRhID0gKHVuc2lnbmVkIGNoYXIgKilwaXBlX2luZm8tPnRyYW5zZmVyX2J1ZmZlcjsKLQkJCWZvciAoamogPSAwOyBqaiA8IChwaXBlX2luZm8tPmN1cl90cmFuc2Zlcl9zaXplIC0gMTIpOwotCQkJICAgICBqaisrKSB7Ci0JCQkJaWYgKCooczMyICopIHBkYXRhID09IEZSQU1FX01BUktFUikgewotCQkJCQlpbnQgY2M7Ci0JCQkJCWRwcmludGsoMywKLQkJCQkJCSJmb3VuZCBmcmFtZSBtYXJrZXIgYXQgb2Zmc2V0OiIKLQkJCQkJCSIgJWQgWyV4ICV4XVxuIiwgamosIHBkYXRhWzBdLAotCQkJCQkJcGRhdGFbMV0pOwotCQkJCQlvZmZzZXQgPSBqajsKLQkJCQkJYnN5bmMgPSAxOwotCQkJCQljYyA9ICoodTMyICopIChwZGF0YSArIHNpemVvZih1MzIpKTsKLQkJCQkJaWYgKGNjID49IE1BWF9DSEFOTkVMUykgewotCQkJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJCQkgICAgICAgImJhZCBjaGFubmVsXG4iKTsKLQkJCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCQl9Ci0JCQkJCS8qIHJldmVyc2UgaXQgKi8KLQkJCQkJZGV2LT5jYyA9IEdfY2hubWFwW2NjXTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCXBkYXRhKys7Ci0JCQl9Ci0JCQlpZiAoYnN5bmMgPT0gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfSBlbHNlIHsKLQkJCXUzMiAqcHdvcmQ7Ci0JCQl1MzIgcGF5bG9hZDsKLQkJCWludCBjYzsKLQkJCWRiZ3N5bmMgPSAwOwotCQkJYnN5bmMgPSAxOwotCQkJcHdvcmQgPSAodTMyICopIHBpcGVfaW5mby0+dHJhbnNmZXJfYnVmZmVyOwotCQkJY2MgPSBwd29yZFsxXTsKLQotCQkJaWYgKGNjID49IE1BWF9DSEFOTkVMUykgewotCQkJCXByaW50aygiaW52YWxpZCBjaGFubmVsIGZvdW5kLiAiCi0JCQkJCSJ0aHJvd2luZyBvdXQgZGF0YSFcbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJZGV2LT5jYyA9IEdfY2hubWFwW2NjXTsKLQkJCXBheWxvYWQgPSBwd29yZFsyXTsKLQkJCWlmIChwYXlsb2FkICE9IGRldi0+cmVxX2ltYWdlX3NpemVbZGV2LT5jY10pIHsKLQkJCQlkcHJpbnRrKDEsICJbJWRdWyVkXXVuZXhwZWN0ZWQgcGF5bG9hZDogJWQiCi0JCQkJCSJyZXF1aXJlZDogJWx1IFxuIiwgY2MsIGRldi0+Y2MsCi0JCQkJCXBheWxvYWQsIGRldi0+cmVxX2ltYWdlX3NpemVbZGV2LT5jY10pOwotCQkJCWRldi0+YmFkX3BheWxvYWRbZGV2LT5jY10rKzsKLQkJCQkvKiBkaXNjYXJkIHRoZSBiYWQgZnJhbWUgKi8KLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQl9Ci0JfQotCS8qIHNlYXJjaCBkb25lLiAgbm93IGZpbmQgb3V0IGlmIHNob3VsZCBiZSBhY3F1aXJpbmcKLQkgICBvbiB0aGlzIGNoYW5uZWwgKi8KLQlpZiAoIWRldi0+Yl9hY3F1aXJlW2Rldi0+Y2NdKSB7Ci0JCWZybS0+dWxTdGF0ZSA9IDA7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlkeCA9IGRldi0+Y3VyX2ZyYW1lW2Rldi0+Y2NdOwogCWZybSA9ICZkZXYtPmJ1ZmZlcltkZXYtPmNjXS5mcmFtZVtpZHhdOwogCi0JaWYgKGZybS0+dWxTdGF0ZSA9PSAwKSB7Ci0JCWZybS0+dWxTdGF0ZSA9IDE7Ci0JCWZybS0+Y3VyX3NpemUgPSAwOwotCX0gZWxzZSBpZiAoZnJtLT51bFN0YXRlID09IDIpIHsKLQkJLyogc3lzdGVtIGZyYW1lIHJpbmcgYnVmZmVyIG92ZXJydW4gKi8KLQkJZHByaW50aygyLCAic3lzIGZyYW1lIG92ZXJydW4uICBvdmVyd3JpdGluZyBmcmFtZSAlZCAlZFxuIiwKLQkJCWRldi0+Y2MsIGlkeCk7Ci0JCWZybS0+dWxTdGF0ZSA9IDE7CisJaWYgKGZybS0+dWxTdGF0ZSA9PSBTMjI1NV9SRUFEX0lETEUpIHsKKwkJaW50IGpqOworCQl1bnNpZ25lZCBpbnQgY2M7CisJCXMzMiAqcGR3b3JkOworCQlpbnQgcGF5bG9hZDsKKwkJLyogc2VhcmNoIGZvciBtYXJrZXIgY29kZXMgKi8KKwkJcGRhdGEgPSAodW5zaWduZWQgY2hhciAqKXBpcGVfaW5mby0+dHJhbnNmZXJfYnVmZmVyOworCQlmb3IgKGpqID0gMDsgamogPCAocGlwZV9pbmZvLT5jdXJfdHJhbnNmZXJfc2l6ZSAtIDEyKTsgamorKykgeworCQkJc3dpdGNoICgqKHMzMiAqKSBwZGF0YSkgeworCQkJY2FzZSBTMjI1NV9NQVJLRVJfRlJBTUU6CisJCQkJcGR3b3JkID0gKHMzMiAqKXBkYXRhOworCQkJCWRwcmludGsoNCwgImZvdW5kIGZyYW1lIG1hcmtlciBhdCBvZmZzZXQ6IgorCQkJCQkiICVkIFsleCAleF1cbiIsIGpqLCBwZGF0YVswXSwKKwkJCQkJcGRhdGFbMV0pOworCQkJCW9mZnNldCA9IGpqICsgUFJFRklYX1NJWkU7CisJCQkJYmZyYW1lID0gMTsKKwkJCQljYyA9IHBkd29yZFsxXTsKKwkJCQlpZiAoY2MgPj0gTUFYX0NIQU5ORUxTKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgImJhZCBjaGFubmVsXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCS8qIHJldmVyc2UgaXQgKi8KKwkJCQlkZXYtPmNjID0gR19jaG5tYXBbY2NdOworCQkJCXBheWxvYWQgPSAgcGR3b3JkWzNdOworCQkJCWlmIChwYXlsb2FkID4gZGV2LT5yZXFfaW1hZ2Vfc2l6ZVtkZXYtPmNjXSkgeworCQkJCQlkZXYtPmJhZF9wYXlsb2FkW2Rldi0+Y2NdKys7CisJCQkJCS8qIGRpc2NhcmQgdGhlIGJhZCBmcmFtZSAqLworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQkJZGV2LT5wa3Rfc2l6ZVtkZXYtPmNjXSA9IHBheWxvYWQ7CisJCQkJZGV2LT5qcGdfc2l6ZVtkZXYtPmNjXSA9IHBkd29yZFs0XTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUzIyNTVfTUFSS0VSX1JFU1BPTlNFOgorCQkJCXBkd29yZCA9IChzMzIgKilwZGF0YTsKKwkJCQlwZGF0YSArPSBERUZfVVNCX0JMT0NLOworCQkJCWpqICs9IERFRl9VU0JfQkxPQ0s7CisJCQkJaWYgKHBkd29yZFsxXSA+PSBNQVhfQ0hBTk5FTFMpCisJCQkJCWJyZWFrOworCQkJCWNjID0gR19jaG5tYXBbcGR3b3JkWzFdXTsKKwkJCQlpZiAoIShjYyA+PSAwICYmIGNjIDwgTUFYX0NIQU5ORUxTKSkKKwkJCQkJYnJlYWs7CisJCQkJc3dpdGNoIChwZHdvcmRbMl0pIHsKKwkJCQljYXNlIDB4MDE6CisJCQkJCS8qIGNoZWNrIGlmIGNoYW5uZWwgdmFsaWQgKi8KKwkJCQkJLyogc2V0IG1vZGUgcmVhZHkgKi8KKwkJCQkJZGV2LT5zZXRtb2RlX3JlYWR5W2NjXSA9IDE7CisJCQkJCXdha2VfdXAoJmRldi0+d2FpdF9zZXRtb2RlW2NjXSk7CisJCQkJCWRwcmludGsoNSwgInNldG1vZGUgcmVhZHkgJWRcbiIsIGNjKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAweDEwOgorCisJCQkJCWRldi0+Y2huX3JlYWR5IHw9ICgxIDw8IGNjKTsKKwkJCQkJaWYgKChkZXYtPmNobl9yZWFkeSAmIDB4MGYpICE9IDB4MGYpCisJCQkJCQlicmVhazsKKwkJCQkJLyogYWxsIGNoYW5uZWxzIHJlYWR5ICovCisJCQkJCXByaW50ayhLRVJOX0lORk8gInMyMjU1OiBmdyBsb2FkZWRcbiIpOworCQkJCQlhdG9taWNfc2V0KCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlLAorCQkJCQkJICAgUzIyNTVfRldfU1VDQ0VTUyk7CisJCQkJCXdha2VfdXAoJmRldi0+ZndfZGF0YS0+d2FpdF9mdyk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXByaW50ayhLRVJOX0lORk8gInMyMjU1IHVua253biByZXNwXG4iKTsKKwkJCQl9CisJCQlkZWZhdWx0OgorCQkJCXBkYXRhKys7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoYmZyYW1lKQorCQkJCWJyZWFrOworCQl9IC8qIGZvciAqLworCQlpZiAoIWJmcmFtZSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCisJaWR4ID0gZGV2LT5jdXJfZnJhbWVbZGV2LT5jY107CisJZnJtID0gJmRldi0+YnVmZmVyW2Rldi0+Y2NdLmZyYW1lW2lkeF07CisKKwkvKiBzZWFyY2ggZG9uZS4gIG5vdyBmaW5kIG91dCBpZiBzaG91bGQgYmUgYWNxdWlyaW5nIG9uIHRoaXMgY2hhbm5lbCAqLworCWlmICghZGV2LT5iX2FjcXVpcmVbZGV2LT5jY10pIHsKKwkJLyogd2UgZm91bmQgYSBmcmFtZSwgYnV0IHRoaXMgY2hhbm5lbCBpcyB0dXJuZWQgb2ZmICovCisJCWZybS0+dWxTdGF0ZSA9IFMyMjU1X1JFQURfSURMRTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGZybS0+dWxTdGF0ZSA9PSBTMjI1NV9SRUFEX0lETEUpIHsKKwkJZnJtLT51bFN0YXRlID0gUzIyNTVfUkVBRF9GUkFNRTsKIAkJZnJtLT5jdXJfc2l6ZSA9IDA7CiAJfQogCi0JaWYgKGJzeW5jKSB7Ci0JCS8qIHNraXAgdGhlIG1hcmtlciA1MTIgYnl0ZXMgKGFuZCBvZmZzZXQgaWYgb3V0IG9mIHN5bmMpICovCi0JCXBzcmMgPSAodTggKilwaXBlX2luZm8tPnRyYW5zZmVyX2J1ZmZlciArIG9mZnNldCArIFBSRUZJWF9TSVpFOwotCX0gZWxzZSB7Ci0JCXBzcmMgPSAodTggKilwaXBlX2luZm8tPnRyYW5zZmVyX2J1ZmZlcjsKLQl9CisJLyogc2tpcCB0aGUgbWFya2VyIDUxMiBieXRlcyAoYW5kIG9mZnNldCBpZiBvdXQgb2Ygc3luYykgKi8KKwlwc3JjID0gKHU4ICopcGlwZV9pbmZvLT50cmFuc2Zlcl9idWZmZXIgKyBvZmZzZXQ7CisKIAogCWlmIChmcm0tPmxwdmJpdHMgPT0gTlVMTCkgewogCQlkcHJpbnRrKDEsICJzMjI1NSBmcmFtZSBidWZmZXIgPT0gTlVMTC4lcCAlcCAlZCAlZCIsCkBAIC0xOTExLDMzICsxOTkwLDIwIEBACiAKIAlwZGVzdCA9IGZybS0+bHB2Yml0cyArIGZybS0+Y3VyX3NpemU7CiAKLQlpZiAoYnN5bmMpIHsKLQkJY29weV9zaXplID0KLQkJICAgIChwaXBlX2luZm8tPmN1cl90cmFuc2Zlcl9zaXplIC0gb2Zmc2V0KSAtIFBSRUZJWF9TSVpFOwotCQlpZiAoY29weV9zaXplID4gcGlwZV9pbmZvLT5jdXJfdHJhbnNmZXJfc2l6ZSkgewotCQkJcHJpbnRrKCJpbnZhbGlkIGNvcHkgc2l6ZSwgb3ZlcmZsb3chXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfSBlbHNlIHsKLQkJY29weV9zaXplID0gcGlwZV9pbmZvLT5jdXJfdHJhbnNmZXJfc2l6ZTsKLQl9CisJY29weV9zaXplID0gKHBpcGVfaW5mby0+Y3VyX3RyYW5zZmVyX3NpemUgLSBvZmZzZXQpOwogCi0JY3VyX3NpemUgPSBmcm0tPmN1cl9zaXplOwotCXNpemUgPSBkZXYtPnJlcV9pbWFnZV9zaXplW2Rldi0+Y2NdOworCXNpemUgPSBkZXYtPnBrdF9zaXplW2Rldi0+Y2NdIC0gUFJFRklYX1NJWkU7CiAKLQlpZiAoKGNvcHlfc2l6ZSArIGN1cl9zaXplKSA+IHNpemUpIHsKLQkJY29weV9zaXplID0gc2l6ZSAtIGN1cl9zaXplOwotCQlidHJ1bmMgPSAxOwotCX0KKwkvKiBzYW5pdHkgY2hlY2sgb24gcGRlc3QgKi8KKwlpZiAoKGNvcHlfc2l6ZSArIGZybS0+Y3VyX3NpemUpIDwgZGV2LT5yZXFfaW1hZ2Vfc2l6ZVtkZXYtPmNjXSkKKwkJbWVtY3B5KHBkZXN0LCBwc3JjLCBjb3B5X3NpemUpOwogCi0JbWVtY3B5KHBkZXN0LCBwc3JjLCBjb3B5X3NpemUpOwotCWN1cl9zaXplICs9IGNvcHlfc2l6ZTsKIAlmcm0tPmN1cl9zaXplICs9IGNvcHlfc2l6ZTsKLQlkcHJpbnRrKDUwLCAiY3VyX3NpemUgc2l6ZSAlbHUgc2l6ZSAlbHUgXG4iLCBjdXJfc2l6ZSwgc2l6ZSk7CisJZHByaW50ayg0LCAiY3VyX3NpemUgc2l6ZSAlbHUgc2l6ZSAlbHUgXG4iLCBmcm0tPmN1cl9zaXplLCBzaXplKTsKIAotCWlmIChjdXJfc2l6ZSA+PSAoc2l6ZSAtIFBSRUZJWF9TSVpFKSkgeworCWlmIChmcm0tPmN1cl9zaXplID49IHNpemUpIHsKKwogCQl1MzIgY2MgPSBkZXYtPmNjOwotCQlmcm0tPnVsU3RhdGUgPSAyOwogCQlkcHJpbnRrKDIsICIqKioqKioqKioqKioqKioqWyVkXUJ1ZmZlclslZF1mdWxsKioqKioqKioqKioqKlxuIiwKIAkJCWNjLCBpZHgpOwogCQlkZXYtPmxhc3RfZnJhbWVbY2NdID0gZGV2LT5jdXJfZnJhbWVbY2NdOwpAQCAtMTk0NiwxNiArMjAxMiwxMyBAQAogCQlpZiAoKGRldi0+Y3VyX2ZyYW1lW2NjXSA9PSBTWVNfRlJBTUVTKSB8fAogCQkgICAgKGRldi0+Y3VyX2ZyYW1lW2NjXSA9PSBkZXYtPmJ1ZmZlcltjY10uZHdGcmFtZXMpKQogCQkJZGV2LT5jdXJfZnJhbWVbY2NdID0gMDsKLQotCQkvKiBzaWduYWwgdGhlIHNlbWFwaG9yZSBmb3IgdGhpcyBjaGFubmVsICovCisJCS8qIGZyYW1lIHJlYWR5ICovCiAJCWlmIChkZXYtPmJfYWNxdWlyZVtjY10pCi0JCQlzMjI1NV9nb3RfZnJhbWUoZGV2LCBjYyk7CisJCQlzMjI1NV9nb3RfZnJhbWUoZGV2LCBjYywgZGV2LT5qcGdfc2l6ZVtjY10pOwogCQlkZXYtPmZyYW1lX2NvdW50W2NjXSsrOwotCX0KLQkvKiBmcmFtZSB3YXMgdHJ1bmNhdGVkICovCi0JaWYgKGJ0cnVuYykgewotCQkvKiByZXR1cm4gbW9yZSBkYXRhIHRvIHByb2Nlc3MgKi8KLQkJcmV0dXJuIEVBR0FJTjsKKwkJZnJtLT51bFN0YXRlID0gUzIyNTVfUkVBRF9JRExFOworCQlmcm0tPmN1cl9zaXplID0gMDsKKwogCX0KIAkvKiBkb25lIHN1Y2Nlc3NmdWxseSAqLwogCXJldHVybiAwOwpAQCAtMTk3NCw4ICsyMDM3LDggQEAKIAl9CiAJLyogb3RoZXJ3aXNlIGNvcHkgdG8gdGhlIHN5c3RlbSBidWZmZXJzICovCiAJcmVzID0gc2F2ZV9mcmFtZShkZXYsIHBpcGVfaW5mbyk7Ci0JaWYgKHJlcyA9PSBFQUdBSU4pCi0JCXNhdmVfZnJhbWUoZGV2LCBwaXBlX2luZm8pOworCWlmIChyZXMgIT0gMCkKKwkJZHByaW50ayg0LCAiczIyNTU6IHJlYWQgY2FsbGJhY2sgZmFpbGVkXG4iKTsKIAogCWRwcmludGsoNTAsICJjYWxsYmFjayByZWFkIHZpZGVvIGRvbmVcbiIpOwogCXJldHVybjsKQEAgLTIwOTUsMTEgKzIxNTgsOSBAQAogCiAJCW1lbXNldChwaXBlLCAwLCBzaXplb2YoKnBpcGUpKTsKIAkJcGlwZS0+ZGV2ID0gZGV2OwotCQlwaXBlLT5jdXJfdHJhbnNmZXJfc2l6ZSA9IERFRkFVTFRfUElQRV9VU0JCTE9DSzsKLQkJcGlwZS0+bWF4X3RyYW5zZmVyX3NpemUgPSBNQVhfUElQRV9VU0JCTE9DSzsKKwkJcGlwZS0+Y3VyX3RyYW5zZmVyX3NpemUgPSBTMjI1NV9VU0JfWEZFUl9TSVpFOworCQlwaXBlLT5tYXhfdHJhbnNmZXJfc2l6ZSA9IFMyMjU1X1VTQl9YRkVSX1NJWkU7CiAKLQkJaWYgKHBpcGUtPmN1cl90cmFuc2Zlcl9zaXplID4gcGlwZS0+bWF4X3RyYW5zZmVyX3NpemUpCi0JCQlwaXBlLT5jdXJfdHJhbnNmZXJfc2l6ZSA9IHBpcGUtPm1heF90cmFuc2Zlcl9zaXplOwogCQlwaXBlLT50cmFuc2Zlcl9idWZmZXIgPSBremFsbG9jKHBpcGUtPm1heF90cmFuc2Zlcl9zaXplLAogCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmIChwaXBlLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgewpAQCAtMjExOSw2ICsyMTgwLDcgQEAKIAlmb3IgKGogPSAwOyBqIDwgTUFYX0NIQU5ORUxTOyBqKyspIHsKIAkJZGV2LT5iX2FjcXVpcmVbal0gPSAwOwogCQlkZXYtPm1vZGVbal0gPSBtb2RlX2RlZjsKKwkJZGV2LT5qY1tqXS5xdWFsaXR5ID0gUzIyNTVfREVGX0pQRUdfUVVBTDsKIAkJZGV2LT5jdXJfZm10W2pdID0gJmZvcm1hdHNbMF07CiAJCWRldi0+bW9kZVtqXS5yZXN0YXJ0ID0gMTsKIAkJZGV2LT5yZXFfaW1hZ2Vfc2l6ZVtqXSA9IGdldF90cmFuc2Zlcl9zaXplKCZtb2RlX2RlZik7CkBAIC0yMzIzLDcgKzIzODUsNyBAQAogCWtmcmVlKGJ1ZmZlcik7CiAJZGV2LT5iX2FjcXVpcmVbY2huXSA9IDA7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgdm9pZCBzMjI1NV9zdG9wX3JlYWRwaXBlKHN0cnVjdCBzMjI1NV9kZXYgKmRldikKQEAgLTIzNTksOCArMjQyMSwxMCBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgczIyNTVfZndsb2FkX3N0YXJ0KHN0cnVjdCBzMjI1NV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIHMyMjU1X2Z3bG9hZF9zdGFydChzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIGludCByZXNldCkKIHsKKwlpZiAocmVzZXQpCisJCXMyMjU1X3Jlc2V0X2RzcHBvd2VyKGRldik7CiAJZGV2LT5md19kYXRhLT5md19zaXplID0gZGV2LT5md19kYXRhLT5mdy0+c2l6ZTsKIAlhdG9taWNfc2V0KCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlLCBTMjI1NV9GV19OT1RMT0FERUQpOwogCW1lbWNweShkZXYtPmZ3X2RhdGEtPnBmd19kYXRhLApAQCAtMjM4Myw2ICsyNDQ3LDggQEAKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwogCWludCBpOwogCWludCByZXR2YWwgPSAtRU5PTUVNOworCV9fbGUzMiAqcGRhdGE7CisJaW50IGZ3X3NpemU7CiAKIAlkcHJpbnRrKDIsICJzMjI1NTogcHJvYmVcbiIpOwogCkBAIC0yNDM3LDYgKzI1MDMsOCBAQAogCWRldi0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldi0+ZndfZGF0YTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+ZndfZGF0YS0+d2FpdF9mdyk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMUzsgaSsrKQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfc2V0bW9kZVtpXSk7CiAKIAogCWRldi0+ZndfZGF0YS0+ZndfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKQEAgLTI0NTYsMTYgKzI1MjQsMzAgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJzZW5zb3JheSAyMjU1IGZhaWxlZCB0byBnZXQgZmlybXdhcmVcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KKwkvKiBjaGVjayB0aGUgZmlybXdhcmUgaXMgdmFsaWQgKi8KKwlmd19zaXplID0gZGV2LT5md19kYXRhLT5mdy0+c2l6ZTsKKwlwZGF0YSA9IChfX2xlMzIgKikgJmRldi0+ZndfZGF0YS0+ZnctPmRhdGFbZndfc2l6ZSAtIDhdOwogCisJaWYgKCpwZGF0YSAhPSBTMjI1NV9GV19NQVJLRVIpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmlybXdhcmUgaW52YWxpZC5cbiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOworCX0gZWxzZSB7CisJCS8qIG1ha2Ugc3VyZSBmaXJtd2FyZSBpcyB0aGUgbGF0ZXN0ICovCisJCV9fbGUzMiAqcFJlbDsKKwkJcFJlbCA9IChfX2xlMzIgKikgJmRldi0+ZndfZGF0YS0+ZnctPmRhdGFbZndfc2l6ZSAtIDRdOworCQlwcmludGsoS0VSTl9JTkZPICJzMjI1NSBkc3AgZncgdmVyc2lvbiAleFxuIiwgKnBSZWwpOworCX0KIAkvKiBsb2FkcyB2NGwgc3BlY2lmaWMgKi8KIAlzMjI1NV9wcm9iZV92NGwoZGV2KTsKKwl1c2JfcmVzZXRfZGV2aWNlKGRldi0+dWRldik7CiAJLyogbG9hZCAyMjU1IGJvYXJkIHNwZWNpZmljICovCiAJczIyNTVfYm9hcmRfaW5pdChkZXYpOwogCiAJZHByaW50ayg0LCAiYmVmb3JlIHByb2JlIGRvbmUgJXBcbiIsIGRldik7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+c2xvY2spOwogCi0JczIyNTVfZndsb2FkX3N0YXJ0KGRldik7CisJczIyNTVfZndsb2FkX3N0YXJ0KGRldiwgMCk7CiAJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiU2Vuc29yYXkgMjI1NSBkZXRlY3RlZFxuIik7CiAJcmV0dXJuIDA7CiBlcnJvcjoKQEAgLTI0NzYsMTQgKzI1NTgsMzAgQEAKIHN0YXRpYyB2b2lkIHMyMjU1X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKIAlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBOVUxMOworCWludCBpOwogCWRwcmludGsoMSwgInMyMjU1OiBkaXNjb25uZWN0IGludGVyZmFjZSAlcFxuIiwgaW50ZXJmYWNlKTsKIAlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwkvKgorCSAqIHdha2UgdXAgYW55IG9mIHRoZSB0aW1lcnMgdG8gYWxsb3cgb3Blbl9sb2NrIHRvIGJlCisJICogYWNxdWlyZWQgc29vbmVyCisJICovCisJYXRvbWljX3NldCgmZGV2LT5md19kYXRhLT5md19zdGF0ZSwgUzIyNTVfRldfRElTQ09OTkVDVElORyk7CisJd2FrZV91cCgmZGV2LT5md19kYXRhLT53YWl0X2Z3KTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTOyBpKyspIHsKKwkJZGV2LT5zZXRtb2RlX3JlYWR5W2ldID0gMTsKKwkJd2FrZV91cCgmZGV2LT53YWl0X3NldG1vZGVbaV0pOworCX0KKworCW11dGV4X2xvY2soJmRldi0+b3Blbl9sb2NrKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7CisKIAlpZiAoZGV2KSB7CiAJCWtyZWZfcHV0KCZkZXYtPmtyZWYsIHMyMjU1X2Rlc3Ryb3kpOwogCQlkcHJpbnRrKDEsICJzMjI1NWRydjogZGlzY29ubmVjdFxuIik7CiAJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgInMyMjU1dXNiIG5vdyBkaXNjb25uZWN0ZWRcbiIpOwogCX0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzMjI1NV9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMKaW5kZXggNmVlNjNlNi4uNGEyMWI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYwpAQCAtNDMsMTM2ICs0MywzNjQgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW90ZXh0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi0jaW5jbHVkZSAic2FhNTI0NmEuaCIKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgR2VuZyA8bGludXhATWljaGFlbEdlbmcuZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNTI0NkEsIFNBQTUyODEgVGVsZXRleHQgZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorI2RlZmluZSBNQUpPUl9WRVJTSU9OIDEJCS8qIGRyaXZlciBtYWpvciB2ZXJzaW9uIG51bWJlciAqLworI2RlZmluZSBNSU5PUl9WRVJTSU9OIDgJCS8qIGRyaXZlciBtaW5vciB2ZXJzaW9uIG51bWJlciAqLworCisvKiBOdW1iZXIgb2YgREFVcyA9IG51bWJlciBvZiBwYWdlcyB0aGF0IGNhbiBiZSBzZWFyY2hlZCBhdCB0aGUgc2FtZSB0aW1lLiAqLworI2RlZmluZSBOVU1fREFVUyA0CisKKyNkZWZpbmUgTlVNX1JPV1NfUEVSX1BBR0UgNDAKKworLyogZmlyc3QgY29sdW1uIGlzIDAgKG5vdCAxKSAqLworI2RlZmluZSBQT1NfVElNRV9TVEFSVCAzMgorI2RlZmluZSBQT1NfVElNRV9FTkQgMzkKKworI2RlZmluZSBQT1NfSEVBREVSX1NUQVJUIDcKKyNkZWZpbmUgUE9TX0hFQURFUl9FTkQgMzEKKworLyogUmV0dXJucyAndHJ1ZScgaWYgdGhlIHBhcnQgb2YgdGhlIHZpZGVvdGV4dCBwYWdlIGRlc2NyaWJlZCB3aXRoIHJlcSBjb250YWlucworICAgKGF0IGxlYXN0IHBhcnRzIG9mKSB0aGUgdGltZSBmaWVsZCAqLworI2RlZmluZSBSRVFfQ09OVEFJTlNfVElNRShwX3JlcSkgXAorCSgocF9yZXEpLT5zdGFydCA8PSBQT1NfVElNRV9FTkQgJiYgXAorCSAocF9yZXEpLT5lbmQgICA+PSBQT1NfVElNRV9TVEFSVCkKKworLyogUmV0dXJucyAndHJ1ZScgaWYgdGhlIHBhcnQgb2YgdGhlIHZpZGVvdGV4dCBwYWdlIGRlc2NyaWJlZCB3aXRoIHJlcSBjb250YWlucworICAgKGF0IGxlYXN0IHBhcnRzIG9mKSB0aGUgcGFnZSBoZWFkZXIgKi8KKyNkZWZpbmUgUkVRX0NPTlRBSU5TX0hFQURFUihwX3JlcSkgXAorCSgocF9yZXEpLT5zdGFydCA8PSBQT1NfSEVBREVSX0VORCAmJiBcCisJIChwX3JlcSktPmVuZCAgID49IFBPU19IRUFERVJfU1RBUlQpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1vZGUgcmVnaXN0ZXIgbnVtYmVycyBvZiB0aGUgU0FBNTI0NkEJCQkJICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SMCAgICAwCisjZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1IxICAgIDEKKyNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjIgICAgMgorI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SMyAgICAzCisjZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1I0ICAgIDQKKyNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjUgICAgNQorI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SNiAgICA2CisjZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1I3ICAgIDcKKyNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjggICAgOAorI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SOSAgICA5CisjZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1IxMCAgMTAKKyNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjExICAxMQorI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SMTFCIDExCisKKy8qIFNBQTUyNDZBIG1vZGUgcmVnaXN0ZXJzIG9mdGVuIGF1dG9pbmNyZW1lbnQgdG8gdGhlIG5leHQgcmVnaXN0ZXIuCisgICBUaGVyZWZvcmUgd2UgdXNlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3RzLiBUaGUgZm9sbG93aW5nIG1hY3JvIGluZGljYXRlcworICAgdGhlIGVuZCBvZiBhIGNvbW1hbmQgbGlzdC4gKi8KKyNkZWZpbmUgQ09NTUFORF9FTkQgKC0xKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb250ZW50cyBvZiB0aGUgbW9kZSByZWdpc3RlcnMgb2YgdGhlIFNBQTUyNDZBCQkJICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUmVnaXN0ZXIgUjAgKEFkdmFuY2VkIENvbnRyb2wpICovCisjZGVmaW5lIFIwX1NFTEVDVF9SMTEJCQkJCSAgIDB4MDAKKyNkZWZpbmUgUjBfU0VMRUNUX1IxMUIJCQkJCSAgIDB4MDEKKworI2RlZmluZSBSMF9QTExfVElNRV9DT05TVEFOVF9MT05HCQkJICAgMHgwMAorI2RlZmluZSBSMF9QTExfVElNRV9DT05TVEFOVF9TSE9SVAkJCSAgIDB4MDIKKworI2RlZmluZSBSMF9FTkFCTEVfbk9ERF9FVkVOX09VVFBVVAkJCSAgIDB4MDAKKyNkZWZpbmUgUjBfRElTQUJMRV9uT0REX0VWRU5fT1VUUFVUCQkJICAgMHgwNAorCisjZGVmaW5lIFIwX0VOQUJMRV9IRFJfUE9MTAkJCQkgICAweDAwCisjZGVmaW5lIFIwX0RJU0FCTEVfSERSX1BPTEwJCQkJICAgMHgxMAorCisjZGVmaW5lIFIwX0RPX05PVF9GT1JDRV9uT0REX0VWRU5fTE9XX0lGX1BJQ1RVUkVfRElTUExBWUVEIDB4MDAKKyNkZWZpbmUgUjBfRk9SQ0Vfbk9ERF9FVkVOX0xPV19JRl9QSUNUVVJFX0RJU1BMQVlFRAkgICAweDIwCisKKyNkZWZpbmUgUjBfTk9fRlJFRV9SVU5fUExMCQkJCSAgIDB4MDAKKyNkZWZpbmUgUjBfRlJFRV9SVU5fUExMCQkJCQkgICAweDQwCisKKyNkZWZpbmUgUjBfTk9fQVVUT01BVElDX0ZBU1RFWFRfUFJPTVBUCQkJICAgMHgwMAorI2RlZmluZSBSMF9BVVRPTUFUSUNfRkFTVEVYVF9QUk9NUFQJCQkgICAweDgwCisKKy8qIFJlZ2lzdGVyIFIxIChNb2RlKSAqLworI2RlZmluZSBSMV9JTlRFUkxBQ0VEXzMxMl9BTkRfSEFMRl8zMTJfQU5EX0hBTEZfTElORVMJICAgMHgwMAorI2RlZmluZSBSMV9OT05fSU5URVJMQUNFRF8zMTJfMzEzX0xJTkVTCQkJICAgMHgwMQorI2RlZmluZSBSMV9OT05fSU5URVJMQUNFRF8zMTJfMzEyX0xJTkVTCQkJICAgMHgwMgorI2RlZmluZSBSMV9GRkJfTEVBRElOR19FREdFX0lOX0ZJUlNUX0JST0FEX1BVTFNFCSAgIDB4MDMKKyNkZWZpbmUgUjFfRkZCX0xFQURJTkdfRURHRV9JTl9TRUNPTkRfQlJPQURfUFVMU0UJICAgMHgwNworCisjZGVmaW5lIFIxX0RFVwkJCQkJCSAgIDB4MDAKKyNkZWZpbmUgUjFfRlVMTF9GSUVMRAkJCQkJICAgMHgwOAorCisjZGVmaW5lIFIxX0VYVEVOREVEX1BBQ0tFVF9ESVNBQkxFCQkJICAgMHgwMAorI2RlZmluZSBSMV9FWFRFTkRFRF9QQUNLRVRfRU5BQkxFCQkJICAgMHgxMAorCisjZGVmaW5lIFIxX0RBVVNfQUxMX09OCQkJCQkgICAweDAwCisjZGVmaW5lIFIxX0RBVVNfQUxMX09GRgkJCQkJICAgMHgyMAorCisjZGVmaW5lIFIxXzdfQklUU19QTFVTX1BBUklUWQkJCQkgICAweDAwCisjZGVmaW5lIFIxXzhfQklUU19OT19QQVJJVFkJCQkJICAgMHg0MAorCisjZGVmaW5lIFIxX1ZDU19UT19TQ1MJCQkJCSAgIDB4MDAKKyNkZWZpbmUgUjFfTk9fVkNTX1RPX1NDUwkJCQkgICAweDgwCisKKy8qIFJlZ2lzdGVyIFIyIChQYWdlIHJlcXVlc3QgYWRkcmVzcykgKi8KKyNkZWZpbmUgUjJfSU5fUjNfU0VMRUNUX1BBR0VfSFVORFJFRFMJCQkgICAweDAwCisjZGVmaW5lIFIyX0lOX1IzX1NFTEVDVF9QQUdFX1RFTlMJCQkgICAweDAxCisjZGVmaW5lIFIyX0lOX1IzX1NFTEVDVF9QQUdFX1VOSVRTCQkJICAgMHgwMgorI2RlZmluZSBSMl9JTl9SM19TRUxFQ1RfSE9VUlNfVEVOUwkJCSAgIDB4MDMKKyNkZWZpbmUgUjJfSU5fUjNfU0VMRUNUX0hPVVJTX1VOSVRTCQkJICAgMHgwNAorI2RlZmluZSBSMl9JTl9SM19TRUxFQ1RfTUlOVVRFU19URU5TCQkJICAgMHgwNQorI2RlZmluZSBSMl9JTl9SM19TRUxFQ1RfTUlOVVRFU19VTklUUwkJCSAgIDB4MDYKKworI2RlZmluZSBSMl9EQVVfMAkJCQkJICAgMHgwMAorI2RlZmluZSBSMl9EQVVfMQkJCQkJICAgMHgxMAorI2RlZmluZSBSMl9EQVVfMgkJCQkJICAgMHgyMAorI2RlZmluZSBSMl9EQVVfMwkJCQkJICAgMHgzMAorCisjZGVmaW5lIFIyX0JBTktfMAkJCQkJICAgMHgwMAorI2RlZmluZSBSMl9CQU5LIDEJCQkJCSAgIDB4NDAKKworI2RlZmluZSBSMl9IQU1NSU5HX0NIRUNLX09OCQkJCSAgIDB4ODAKKyNkZWZpbmUgUjJfSEFNTUlOR19DSEVDS19PRkYJCQkJICAgMHgwMAorCisvKiBSZWdpc3RlciBSMyAoUGFnZSByZXF1ZXN0IGRhdGEpICovCisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfMAkJCQkgICAweDAwCisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfMQkJCQkgICAweDAxCisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfMgkJCQkgICAweDAyCisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfMwkJCQkgICAweDAzCisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfNAkJCQkgICAweDA0CisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfNQkJCQkgICAweDA1CisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfNgkJCQkgICAweDA2CisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfNwkJCQkgICAweDA3CisKKyNkZWZpbmUgUjNfSE9MRF9QQUdFCQkJCQkgICAweDAwCisjZGVmaW5lIFIzX1VQREFURV9QQUdFCQkJCQkgICAweDA4CisKKyNkZWZpbmUgUjNfUEFHRV9IVU5EUkVEU19ET19OT1RfQ0FSRQkJCSAgIDB4MDAKKyNkZWZpbmUgUjNfUEFHRV9IVU5EUkVEU19ET19DQVJFCQkJICAgMHgxMAorCisjZGVmaW5lIFIzX1BBR0VfVEVOU19ET19OT1RfQ0FSRQkJCSAgIDB4MDAKKyNkZWZpbmUgUjNfUEFHRV9URU5TX0RPX0NBUkUJCQkJICAgMHgxMAorCisjZGVmaW5lIFIzX1BBR0VfVU5JVFNfRE9fTk9UX0NBUkUJCQkgICAweDAwCisjZGVmaW5lIFIzX1BBR0VfVU5JVFNfRE9fQ0FSRQkJCQkgICAweDEwCisKKyNkZWZpbmUgUjNfSE9VUlNfVEVOU19ET19OT1RfQ0FSRQkJCSAgIDB4MDAKKyNkZWZpbmUgUjNfSE9VUlNfVEVOU19ET19DQVJFCQkJCSAgIDB4MTAKKworI2RlZmluZSBSM19IT1VSU19VTklUU19ET19OT1RfQ0FSRQkJCSAgIDB4MDAKKyNkZWZpbmUgUjNfSE9VUlNfVU5JVFNfRE9fQ0FSRQkJCQkgICAweDEwCisKKyNkZWZpbmUgUjNfTUlOVVRFU19URU5TX0RPX05PVF9DQVJFCQkJICAgMHgwMAorI2RlZmluZSBSM19NSU5VVEVTX1RFTlNfRE9fQ0FSRQkJCQkgICAweDEwCisKKyNkZWZpbmUgUjNfTUlOVVRFU19VTklUU19ET19OT1RfQ0FSRQkJCSAgIDB4MDAKKyNkZWZpbmUgUjNfTUlOVVRFU19VTklUU19ET19DQVJFCQkJICAgMHgxMAorCisvKiBSZWdpc3RlciBSNCAoRGlzcGxheSBjaGFwdGVyKSAqLworI2RlZmluZSBSNF9ESVNQTEFZX1BBR0VfMAkJCQkgICAweDAwCisjZGVmaW5lIFI0X0RJU1BMQVlfUEFHRV8xCQkJCSAgIDB4MDEKKyNkZWZpbmUgUjRfRElTUExBWV9QQUdFXzIJCQkJICAgMHgwMgorI2RlZmluZSBSNF9ESVNQTEFZX1BBR0VfMwkJCQkgICAweDAzCisjZGVmaW5lIFI0X0RJU1BMQVlfUEFHRV80CQkJCSAgIDB4MDQKKyNkZWZpbmUgUjRfRElTUExBWV9QQUdFXzUJCQkJICAgMHgwNQorI2RlZmluZSBSNF9ESVNQTEFZX1BBR0VfNgkJCQkgICAweDA2CisjZGVmaW5lIFI0X0RJU1BMQVlfUEFHRV83CQkJCSAgIDB4MDcKKworLyogUmVnaXN0ZXIgUjUgKE5vcm1hbCBkaXNwbGF5IGNvbnRyb2wpICovCisjZGVmaW5lIFI1X1BJQ1RVUkVfSU5TSURFX0JPWElOR19PRkYJCQkgICAweDAwCisjZGVmaW5lIFI1X1BJQ1RVUkVfSU5TSURFX0JPWElOR19PTgkJCSAgIDB4MDEKKworI2RlZmluZSBSNV9QSUNUVVJFX09VVFNJREVfQk9YSU5HX09GRgkJCSAgIDB4MDAKKyNkZWZpbmUgUjVfUElDVFVSRV9PVVRTSURFX0JPWElOR19PTgkJCSAgIDB4MDIKKworI2RlZmluZSBSNV9URVhUX0lOU0lERV9CT1hJTkdfT0ZGCQkJICAgMHgwMAorI2RlZmluZSBSNV9URVhUX0lOU0lERV9CT1hJTkdfT04JCQkgICAweDA0CisKKyNkZWZpbmUgUjVfVEVYVF9PVVRTSURFX0JPWElOR19PRkYJCQkgICAweDAwCisjZGVmaW5lIFI1X1RFWFRfT1VUU0lERV9CT1hJTkdfT04JCQkgICAweDA4CisKKyNkZWZpbmUgUjVfQ09OVFJBU1RfUkVEVUNUSU9OX0lOU0lERV9CT1hJTkdfT0ZGCQkgICAweDAwCisjZGVmaW5lIFI1X0NPTlRSQVNUX1JFRFVDVElPTl9JTlNJREVfQk9YSU5HX09OCQkgICAweDEwCisKKyNkZWZpbmUgUjVfQ09OVFJBU1RfUkVEVUNUSU9OX09VVFNJREVfQk9YSU5HX09GRgkgICAweDAwCisjZGVmaW5lIFI1X0NPTlRSQVNUX1JFRFVDVElPTl9PVVRTSURFX0JPWElOR19PTgkJICAgMHgyMAorCisjZGVmaW5lIFI1X0JBQ0tHUk9VTkRfQ09MT1JfSU5TSURFX0JPWElOR19PRkYJCSAgIDB4MDAKKyNkZWZpbmUgUjVfQkFDS0dST1VORF9DT0xPUl9JTlNJREVfQk9YSU5HX09OCQkgICAweDQwCisKKyNkZWZpbmUgUjVfQkFDS0dST1VORF9DT0xPUl9PVVRTSURFX0JPWElOR19PRkYJCSAgIDB4MDAKKyNkZWZpbmUgUjVfQkFDS0dST1VORF9DT0xPUl9PVVRTSURFX0JPWElOR19PTgkJICAgMHg4MAorCisvKiBSZWdpc3RlciBSNiAoTmV3c2ZsYXNoIGRpc3BsYXkpICovCisjZGVmaW5lIFI2X05FV1NGTEFTSF9QSUNUVVJFX0lOU0lERV9CT1hJTkdfT0ZGCQkgICAweDAwCisjZGVmaW5lIFI2X05FV1NGTEFTSF9QSUNUVVJFX0lOU0lERV9CT1hJTkdfT04JCSAgIDB4MDEKKworI2RlZmluZSBSNl9ORVdTRkxBU0hfUElDVFVSRV9PVVRTSURFX0JPWElOR19PRkYJCSAgIDB4MDAKKyNkZWZpbmUgUjZfTkVXU0ZMQVNIX1BJQ1RVUkVfT1VUU0lERV9CT1hJTkdfT04JCSAgIDB4MDIKKworI2RlZmluZSBSNl9ORVdTRkxBU0hfVEVYVF9JTlNJREVfQk9YSU5HX09GRgkJICAgMHgwMAorI2RlZmluZSBSNl9ORVdTRkxBU0hfVEVYVF9JTlNJREVfQk9YSU5HX09OCQkgICAweDA0CisKKyNkZWZpbmUgUjZfTkVXU0ZMQVNIX1RFWFRfT1VUU0lERV9CT1hJTkdfT0ZGCQkgICAweDAwCisjZGVmaW5lIFI2X05FV1NGTEFTSF9URVhUX09VVFNJREVfQk9YSU5HX09OCQkgICAweDA4CisKKyNkZWZpbmUgUjZfTkVXU0ZMQVNIX0NPTlRSQVNUX1JFRFVDVElPTl9JTlNJREVfQk9YSU5HX09GRiAgMHgwMAorI2RlZmluZSBSNl9ORVdTRkxBU0hfQ09OVFJBU1RfUkVEVUNUSU9OX0lOU0lERV9CT1hJTkdfT04gICAweDEwCisKKyNkZWZpbmUgUjZfTkVXU0ZMQVNIX0NPTlRSQVNUX1JFRFVDVElPTl9PVVRTSURFX0JPWElOR19PRkYgMHgwMAorI2RlZmluZSBSNl9ORVdTRkxBU0hfQ09OVFJBU1RfUkVEVUNUSU9OX09VVFNJREVfQk9YSU5HX09OICAweDIwCisKKyNkZWZpbmUgUjZfTkVXU0ZMQVNIX0JBQ0tHUk9VTkRfQ09MT1JfSU5TSURFX0JPWElOR19PRkYgICAgMHgwMAorI2RlZmluZSBSNl9ORVdTRkxBU0hfQkFDS0dST1VORF9DT0xPUl9JTlNJREVfQk9YSU5HX09OCSAgIDB4NDAKKworI2RlZmluZSBSNl9ORVdTRkxBU0hfQkFDS0dST1VORF9DT0xPUl9PVVRTSURFX0JPWElOR19PRkYgICAweDAwCisjZGVmaW5lIFI2X05FV1NGTEFTSF9CQUNLR1JPVU5EX0NPTE9SX09VVFNJREVfQk9YSU5HX09OICAgIDB4ODAKKworLyogUmVnaXN0ZXIgUjcgKERpc3BsYXkgbW9kZSkgKi8KKyNkZWZpbmUgUjdfQk9YX09GRl9ST1dfMAkJCQkgICAweDAwCisjZGVmaW5lIFI3X0JPWF9PTl9ST1dfMAkJCQkJICAgMHgwMQorCisjZGVmaW5lIFI3X0JPWF9PRkZfUk9XXzFfVE9fMjMJCQkJICAgMHgwMAorI2RlZmluZSBSN19CT1hfT05fUk9XXzFfVE9fMjMJCQkJICAgMHgwMgorCisjZGVmaW5lIFI3X0JPWF9PRkZfUk9XXzI0CQkJCSAgIDB4MDAKKyNkZWZpbmUgUjdfQk9YX09OX1JPV18yNAkJCQkgICAweDA0CisKKyNkZWZpbmUgUjdfU0lOR0xFX0hFSUdIVAkJCQkgICAweDAwCisjZGVmaW5lIFI3X0RPVUJMRV9IRUlHSFQJCQkJICAgMHgwOAorCisjZGVmaW5lIFI3X1RPUF9IQUxGCQkJCQkgICAweDAwCisjZGVmaW5lIFI3X0JPVFRPTV9IQUxGCQkJCQkgICAweDEwCisKKyNkZWZpbmUgUjdfUkVWRUFMX09GRgkJCQkJICAgMHgwMAorI2RlZmluZSBSN19SRVZFQUxfT04JCQkJCSAgIDB4MjAKKworI2RlZmluZSBSN19DVVJTRVJfT0ZGCQkJCQkgICAweDAwCisjZGVmaW5lIFI3X0NVUlNFUl9PTgkJCQkJICAgMHg0MAorCisjZGVmaW5lIFI3X1NUQVRVU19CT1RUT00JCQkJICAgMHgwMAorI2RlZmluZSBSN19TVEFUVVNfVE9QCQkJCQkgICAweDgwCisKKy8qIFJlZ2lzdGVyIFI4IChBY3RpdmUgY2hhcHRlcikgKi8KKyNkZWZpbmUgUjhfQUNUSVZFX0NIQVBURVJfMAkJCQkgICAweDAwCisjZGVmaW5lIFI4X0FDVElWRV9DSEFQVEVSXzEJCQkJICAgMHgwMQorI2RlZmluZSBSOF9BQ1RJVkVfQ0hBUFRFUl8yCQkJCSAgIDB4MDIKKyNkZWZpbmUgUjhfQUNUSVZFX0NIQVBURVJfMwkJCQkgICAweDAzCisjZGVmaW5lIFI4X0FDVElWRV9DSEFQVEVSXzQJCQkJICAgMHgwNAorI2RlZmluZSBSOF9BQ1RJVkVfQ0hBUFRFUl81CQkJCSAgIDB4MDUKKyNkZWZpbmUgUjhfQUNUSVZFX0NIQVBURVJfNgkJCQkgICAweDA2CisjZGVmaW5lIFI4X0FDVElWRV9DSEFQVEVSXzcJCQkJICAgMHgwNworCisjZGVmaW5lIFI4X0NMRUFSX01FTU9SWQkJCQkJICAgMHgwOAorI2RlZmluZSBSOF9ET19OT1RfQ0xFQVJfTUVNT1JZCQkJCSAgIDB4MDAKKworLyogUmVnaXN0ZXIgUjkgKEN1cnNlciByb3cpICovCisjZGVmaW5lIFI5X0NVUlNFUl9ST1dfMAkJCQkJICAgMHgwMAorI2RlZmluZSBSOV9DVVJTRVJfUk9XXzEJCQkJCSAgIDB4MDEKKyNkZWZpbmUgUjlfQ1VSU0VSX1JPV18yCQkJCQkgICAweDAyCisjZGVmaW5lIFI5X0NVUlNFUl9ST1dfMjUJCQkJICAgMHgxOQorCisvKiBSZWdpc3RlciBSMTAgKEN1cnNlciBjb2x1bW4pICovCisjZGVmaW5lIFIxMF9DVVJTRVJfQ09MVU1OXzAJCQkJICAgMHgwMAorI2RlZmluZSBSMTBfQ1VSU0VSX0NPTFVNTl82CQkJCSAgIDB4MDYKKyNkZWZpbmUgUjEwX0NVUlNFUl9DT0xVTU5fOAkJCQkgICAweDA4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJvdyAyNSBjb250cm9sIGRhdGEgaW4gY29sdW1uIDAgdG8gOQkJCQkJICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBST1cyNV9DT0xVTU4wX1BBR0VfVU5JVFMJCQkgICAweDBGCisKKyNkZWZpbmUgUk9XMjVfQ09MVU1OMV9QQUdFX1RFTlMJCQkJICAgMHgwRgorCisjZGVmaW5lIFJPVzI1X0NPTFVNTjJfTUlOVVRFU19VTklUUwkJCSAgIDB4MEYKKworI2RlZmluZSBST1cyNV9DT0xVTU4zX01JTlVURVNfVEVOUwkJCSAgIDB4MDcKKyNkZWZpbmUgUk9XMjVfQ09MVU1OM19ERUxFVEVfUEFHRQkJCSAgIDB4MDgKKworI2RlZmluZSBST1cyNV9DT0xVTU40X0hPVVJfVU5JVFMJCQkgICAweDBGCisKKyNkZWZpbmUgUk9XMjVfQ09MVU1ONV9IT1VSX1RFTlMJCQkJICAgMHgwMworI2RlZmluZSBST1cyNV9DT0xVTU41X0lOU0VSVF9IRUFETElORQkJCSAgIDB4MDQKKyNkZWZpbmUgUk9XMjVfQ09MVU1ONV9JTlNFUlRfU1VCVElUTEUJCQkgICAweDA4CisKKyNkZWZpbmUgUk9XMjVfQ09MVU1ONl9TVVBQUkVTU19IRUFERVIJCQkgICAweDAxCisjZGVmaW5lIFJPVzI1X0NPTFVNTjZfVVBEQVRFX1BBR0UJCQkgICAweDAyCisjZGVmaW5lIFJPVzI1X0NPTFVNTjZfSU5URVJSVVBURURfU0VRVUVOQ0UJCSAgIDB4MDQKKyNkZWZpbmUgUk9XMjVfQ09MVU1ONl9TVVBQUkVTU19ESVNQTEFZCQkJICAgMHgwOAorCisjZGVmaW5lIFJPVzI1X0NPTFVNTjdfU0VSSUFMX01PREUJCQkgICAweDAxCisjZGVmaW5lIFJPVzI1X0NPTFVNTjdfQ0hBUkFDVEVSX1NFVAkJCSAgIDB4MEUKKworI2RlZmluZSBST1cyNV9DT0xVTU44X1BBR0VfSFVORFJFRFMJCQkgICAweDA3CisjZGVmaW5lIFJPVzI1X0NPTFVNTjhfUEFHRV9OT1RfRk9VTkQJCQkgICAweDEwCisKKyNkZWZpbmUgUk9XMjVfQ09MVU1OOV9QQUdFX0JFSU5HX0xPT0tFRF9GT1IJCSAgIDB4MjAKKworI2RlZmluZSBST1cyNV9DT0xVTU4wX1RPXzdfSEFNTUlOR19FUlJPUgkJICAgMHgxMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBIZWxwZXIgbWFjcm9zIGZvciBleHRyYWN0aW5nIHBhZ2UsIGhvdXIgYW5kIG1pbnV0ZSBkaWdpdHMJCSAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEJZVEVfUE9TICAwIGlzIGF0IHJvdyAwLCBjb2x1bW4gMCwKKyAgIEJZVEVfUE9TICAxIGlzIGF0IHJvdyAwLCBjb2x1bW4gMSwKKyAgIEJZVEVfUE9TIDQwIGlzIGF0IHJvdyAxLCBjb2x1bW4gMCwgKHdpdGggTlVNX1JPV1NfUEVSX1BBR0UgPSA0MCkKKyAgIEJZVEVfUE9TIDQxIGlzIGF0IHJvdyAxLCBjb2x1bW4gMSwgKHdpdGggTlVNX1JPV1NfUEVSX1BBR0UgPSA0MCksCisgICAuLi4gKi8KKyNkZWZpbmUgUk9XKEJZVEVfUE9TKSAgICAoQllURV9QT1MgLyBOVU1fUk9XU19QRVJfUEFHRSkKKyNkZWZpbmUgQ09MVU1OKEJZVEVfUE9TKSAoQllURV9QT1MgJSBOVU1fUk9XU19QRVJfUEFHRSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSGVscGVyIG1hY3JvcyBmb3IgZXh0cmFjdGluZyBwYWdlLCBob3VyIGFuZCBtaW51dGUgZGlnaXRzCQkgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNYWNyb3MgZm9yIGV4dHJhY3RpbmcgaHVuZHJlZHMsIHRlbnMgYW5kIHVuaXRzIG9mIGEgcGFnZSBudW1iZXIgd2hpY2gKKyAgIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgLi4uIDB4Nzk5LgorICAgTm90ZSB0aGF0IHBhZ2UgaXMgY29kZWQgaW4gaGV4YWRlY2ltYWwsIGkuZS4gMHgxMjMgbWVhbnMgcGFnZSAxMjMuCisgICBwYWdlIDB4Li4gbWVhbnMgcGFnZSA4Li4gKi8KKyNkZWZpbmUgSFVORFJFRFNfT0ZfUEFHRShwYWdlKSAoKChwYWdlKSAvIDB4MTAwKSAmIDB4NykKKyNkZWZpbmUgVEVOU19PRl9QQUdFKHBhZ2UpICAgICAoKChwYWdlKSAvIDB4MTApICAmIDB4RikKKyNkZWZpbmUgVU5JVFNfT0ZfUEFHRShwYWdlKSAgICAgKChwYWdlKSAmIDB4RikKKworLyogTWFjcm9zIGZvciBleHRyYWN0aW5nIHRlbnMgYW5kIHVuaXRzIG9mIGEgaG91ciBpbmZvcm1hdGlvbiB3aGljaAorICAgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMCAuLi4gMHgyNC4KKyAgIE5vdGUgdGhhdCBob3VyIGlzIGNvZGVkIGluIGhleGFkZWNpbWFsLCBpLmUuIDB4MTIgbWVhbnMgMTIgaG91cnMgKi8KKyNkZWZpbmUgVEVOU19PRl9IT1VSKGhvdXIpICAoKGhvdXIpIC8gMHgxMCkKKyNkZWZpbmUgVU5JVFNfT0ZfSE9VUihob3VyKSAoKGhvdXIpICYgMHhGKQorCisvKiBNYWNyb3MgZm9yIGV4dHJhY3RpbmcgdGVucyBhbmQgdW5pdHMgb2YgYSBtaW51dGUgaW5mb3JtYXRpb24gd2hpY2gKKyAgIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgLi4uIDB4NTkuCisgICBOb3RlIHRoYXQgbWludXRlIGlzIGNvZGVkIGluIGhleGFkZWNpbWFsLCBpLmUuIDB4MTIgbWVhbnMgMTIgbWludXRlcyAqLworI2RlZmluZSBURU5TX09GX01JTlVURShtaW51dGUpICAoKG1pbnV0ZSkgLyAweDEwKQorI2RlZmluZSBVTklUU19PRl9NSU5VVEUobWludXRlKSAoKG1pbnV0ZSkgJiAweEYpCisKKyNkZWZpbmUgSE9VUl9NQVggICAweDIzCisjZGVmaW5lIE1JTlVURV9NQVggMHg1OQorI2RlZmluZSBQQUdFX01BWCAgIDB4OEZGCisKKwogc3RydWN0IHNhYTUyNDZhX2RldmljZQogewogCXU4ICAgICBwZ2J1ZltOVU1fREFVU11bVlRYX1ZJUlRVQUxTSVpFXTsKIAlpbnQgICAgaXNfc2VhcmNoaW5nW05VTV9EQVVTXTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc2FhX3RlbXBsYXRlOwkvKiBEZWNsYXJlZCBuZWFyIGJvdHRvbSAqLwogCi0vKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXQkgPSB7IEkyQ19BRERSRVNTLCBJMkNfQ0xJRU5UX0VORCB9OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKLQotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZTsKLQotc3RhdGljIGludCBzYWE1MjQ2YV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBpbnQgYWRkciwgaW50IGtpbmQpCi17Ci0JaW50IHBnYnVmOwotCWludCBlcnI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZDsKLQlzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0OwotCi0JcHJpbnRrKEtFUk5fSU5GTyAic2FhNTI0NmE6IHRlbGV0ZXh0IGNoaXAgZm91bmQuXG4iKTsKLQljbGllbnQ9a21hbGxvYyhzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOwotCWlmKGNsaWVudD09TlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50X3RlbXBsYXRlLmFkYXB0ZXIgPSBhZGFwOwotCWNsaWVudF90ZW1wbGF0ZS5hZGRyID0gYWRkcjsKLQltZW1jcHkoY2xpZW50LCAmY2xpZW50X3RlbXBsYXRlLCBzaXplb2YoKmNsaWVudCkpOwotCXQgPSBremFsbG9jKHNpemVvZigqdCksIEdGUF9LRVJORUwpOwotCWlmKHQ9PU5VTEwpCi0JewotCQlrZnJlZShjbGllbnQpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jc3RybGNweShjbGllbnQtPm5hbWUsIElGX05BTUUsIEkyQ19OQU1FX1NJWkUpOwotCW11dGV4X2luaXQoJnQtPmxvY2spOwotCi0JLyoKLQkgKglOb3cgY3JlYXRlIGEgdmlkZW80bGludXggZGV2aWNlCi0JICovCi0KLQl2ZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCWlmKHZkPT1OVUxMKQotCXsKLQkJa2ZyZWUodCk7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB2ZCk7Ci0JbWVtY3B5KHZkLCAmc2FhX3RlbXBsYXRlLCBzaXplb2YoKnZkKSk7Ci0KLQlmb3IgKHBnYnVmID0gMDsgcGdidWYgPCBOVU1fREFVUzsgcGdidWYrKykKLQl7Ci0JCW1lbXNldCh0LT5wZ2J1ZltwZ2J1Zl0sICcgJywgc2l6ZW9mKHQtPnBnYnVmWzBdKSk7Ci0JCXQtPmlzX3NlYXJjaGluZ1twZ2J1Zl0gPSBmYWxzZTsKLQl9Ci0JdmQtPnByaXY9dDsKLQotCi0JLyoKLQkgKglSZWdpc3RlciBpdAotCSAqLwotCi0JaWYoKGVycj12aWRlb19yZWdpc3Rlcl9kZXZpY2UodmQsIFZGTF9UWVBFX1ZUWCwtMSkpPDApCi0JewotCQlrZnJlZSh0KTsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQl0LT5jbGllbnQgPSBjbGllbnQ7Ci0JaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqCVdlIGRvIG1vc3Qgb2YgdGhlIGhhcmQgd29yayB3aGVuIHdlIGJlY29tZSBhIGRldmljZSBvbiB0aGUgaTJjLgotICovCi1zdGF0aWMgaW50IHNhYTUyNDZhX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQlpZiAoYWRhcC0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HKQotCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXAsICZhZGRyX2RhdGEsIHNhYTUyNDZhX2F0dGFjaCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNTI0NmFfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkKTsKLQlrZnJlZSh2ZC0+cHJpdik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqCUkyQyBpbnRlcmZhY2VzCiAgKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfdmlkZW90ZXh0ID0KLXsKLQkuZHJpdmVyID0gewotCQkubmFtZSAJPSBJRl9OQU1FLAkJLyogbmFtZSAqLwotCX0sCi0JLmlkIAkJPSBJMkNfRFJJVkVSSURfU0FBNTI0OSwgLyogaW4gaTJjLmggKi8KLQkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE1MjQ2YV9wcm9iZSwKLQkuZGV0YWNoX2NsaWVudCAgPSBzYWE1MjQ2YV9kZXRhY2gsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlID0gewotCS5kcml2ZXIJCT0gJmkyY19kcml2ZXJfdmlkZW90ZXh0LAotCS5uYW1lCQk9ICIodW5zZXQpIiwKLX07Ci0KIHN0YXRpYyBpbnQgaTJjX3NlbmRidWYoc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCwgaW50IHJlZywgaW50IGNvdW50LCB1OCAqZGF0YSkKIHsKIAljaGFyIGJ1Zls2NF07CkBAIC01NzksOCArODA3LDggQEAKIHN0YXRpYyBpbnQgZG9fc2FhNTI0NmFfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0PXZkLT5wcml2OworCXN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJc3dpdGNoKGNtZCkKIAl7CiAJCWNhc2UgVlRYSU9DR0VUSU5GTzoKQEAgLTcyMCw4ICs5NDgsNyBAQAogc3RhdGljIGludCBzYWE1MjQ2YV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCA9IHZkLT5wcml2OworCXN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBlcnI7CiAKIAljbWQgPSB2dHhfZml4X2NvbW1hbmQoY21kKTsKQEAgLTczMywyMSArOTYwLDE1IEBACiAKIHN0YXRpYyBpbnQgc2FhNTI0NmFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCA9IHZkLT5wcml2OwotCWludCBlcnI7CisJc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQllcnIgPSB2aWRlb19leGNsdXNpdmVfb3Blbihpbm9kZSxmaWxlKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwlpZiAodC0+Y2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHQtPmNsaWVudD09TlVMTCkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGZhaWw7Ci0JfQorCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZ0LT5pbl91c2UpKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGkyY19zZW5kZGF0YSh0LCBTQUE1MjQ2QV9SRUdJU1RFUl9SMCwKLQogCQlSMF9TRUxFQ1RfUjExIHwKIAkJUjBfUExMX1RJTUVfQ09OU1RBTlRfTE9ORyB8CiAJCVIwX0VOQUJMRV9uT0REX0VWRU5fT1VUUFVUIHwKQEAgLTc3MywyMSArOTk0LDE1IEBACiAKIAkJQ09NTUFORF9FTkQpKQogCXsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBmYWlsOworCQljbGVhcl9iaXQoMCwgJnQtPmluX3VzZSk7CisJCXJldHVybiAtRUlPOwogCX0KLQogCXJldHVybiAwOwotCi1mYWlsOgotCXZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKGlub2RlLGZpbGUpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2FhNTI0NmFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCA9IHZkLT5wcml2OworCXN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJLyogU3RvcCBhbGwgYWNxdWlzaXRpb24gY2lyY3VpdHMuICovCiAJaTJjX3NlbmRkYXRhKHQsIFNBQTUyNDZBX1JFR0lTVEVSX1IxLApAQCAtODAwLDI2ICsxMDE1LDEwIEBACiAJCVIxX1ZDU19UT19TQ1MsCiAKIAkJQ09NTUFORF9FTkQpOwotCXZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKGlub2RlLGZpbGUpOworCWNsZWFyX2JpdCgwLCAmdC0+aW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaW5pdF9zYWFfNTI0NmEgKHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTwotCQkiU0FBNTI0NkEgKG9yIGNvbXBhdGlibGUpIFRlbGV0ZXh0IGRlY29kZXIgZHJpdmVyIHZlcnNpb24gJWQuJWRcbiIsCi0JCU1BSk9SX1ZFUlNJT04sIE1JTk9SX1ZFUlNJT04pOwotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl92aWRlb3RleHQpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9zYWFfNTI0NmEgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfdmlkZW90ZXh0KTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9zYWFfNTI0NmEpOwotbW9kdWxlX2V4aXQoY2xlYW51cF9zYWFfNTI0NmEpOwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzYWFfZm9wcyA9IHsKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCiAJLm9wZW4JID0gc2FhNTI0NmFfb3BlbiwKQEAgLTgzMCw4ICsxMDI5LDc5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNhYV90ZW1wbGF0ZSA9CiB7Ci0JLm5hbWUJICA9IElGX05BTUUsCisJLm5hbWUJICA9ICJzYWE1MjQ2YSIsCiAJLmZvcHMJICA9ICZzYWFfZm9wcywKIAkucmVsZWFzZSAgPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKIAkubWlub3IgICAgPSAtMSwKIH07CisKKy8qIEFkZHJlc3NlcyB0byBzY2FuICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDIyID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CisKK0kyQ19DTElFTlRfSU5TTU9EOworCitzdGF0aWMgaW50IHNhYTUyNDZhX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJaW50IHBnYnVmOworCWludCBlcnI7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmQ7CisJc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdDsKKworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKwl2NGxfaW5mbyhjbGllbnQsICJWaWRlb1RleHQgdmVyc2lvbiAlZC4lZFxuIiwKKwkJCU1BSk9SX1ZFUlNJT04sIE1JTk9SX1ZFUlNJT04pOworCXQgPSBremFsbG9jKHNpemVvZigqdCksIEdGUF9LRVJORUwpOworCWlmICh0ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW11dGV4X2luaXQoJnQtPmxvY2spOworCisJLyogTm93IGNyZWF0ZSBhIHZpZGVvNGxpbnV4IGRldmljZSAqLworCXZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKHZkID09IE5VTEwpIHsKKwkJa2ZyZWUodCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB2ZCk7CisJbWVtY3B5KHZkLCAmc2FhX3RlbXBsYXRlLCBzaXplb2YoKnZkKSk7CisKKwlmb3IgKHBnYnVmID0gMDsgcGdidWYgPCBOVU1fREFVUzsgcGdidWYrKykgeworCQltZW1zZXQodC0+cGdidWZbcGdidWZdLCAnICcsIHNpemVvZih0LT5wZ2J1ZlswXSkpOworCQl0LT5pc19zZWFyY2hpbmdbcGdidWZdID0gZmFsc2U7CisJfQorCXZpZGVvX3NldF9kcnZkYXRhKHZkLCB0KTsKKworCS8qIFJlZ2lzdGVyIGl0ICovCisJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZkLCBWRkxfVFlQRV9WVFgsIC0xKTsKKwlpZiAoZXJyIDwgMCkgeworCQlrZnJlZSh0KTsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmQpOworCQlyZXR1cm4gZXJyOworCX0KKwl0LT5jbGllbnQgPSBjbGllbnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNTI0NmFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkKTsKKwlrZnJlZSh2aWRlb19nZXRfZHJ2ZGF0YSh2ZCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc2FhNTI0NmFfaWRbXSA9IHsKKwl7ICJzYWE1MjQ2YSIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNTI0NmFfaWQpOworCitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNTI0NmEiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE1MjQ5LAorCS5wcm9iZSA9IHNhYTUyNDZhX3Byb2JlLAorCS5yZW1vdmUgPSBzYWE1MjQ2YV9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNTI0NmFfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDM5NGMwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1OSArMCwwIEBACi0vKgotICAgRHJpdmVyIGZvciB0aGUgU0FBNTI0NkEgb3IgU0FBNTI4MSBUZWxldGV4dCAoPVZpZGVvdGV4dCkgZGVjb2RlciBjaGlwcyBmcm9tCi0gICBQaGlsaXBzLgotCi0gICBDb3B5cmlnaHQgKEMpIDIwMDQgTWljaGFlbCBHZW5nIChsaW51eEBNaWNoYWVsR2VuZy5kZSkKLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICovCi0jaWZuZGVmIF9fU0FBNTI0NkFfSF9fCi0jZGVmaW5lIF9fU0FBNTI0NkFfSF9fCi0KLSNkZWZpbmUgTUFKT1JfVkVSU0lPTiAxCQkvKiBkcml2ZXIgbWFqb3IgdmVyc2lvbiBudW1iZXIgKi8KLSNkZWZpbmUgTUlOT1JfVkVSU0lPTiA4CQkvKiBkcml2ZXIgbWlub3IgdmVyc2lvbiBudW1iZXIgKi8KLQotI2RlZmluZSBJRl9OQU1FICJTQUE1MjQ2QSIKLQotI2RlZmluZSBJMkNfQUREUkVTUyAxNwotCi0vKiBOdW1iZXIgb2YgREFVcyA9IG51bWJlciBvZiBwYWdlcyB0aGF0IGNhbiBiZSBzZWFyY2hlZCBhdCB0aGUgc2FtZSB0aW1lLiAqLwotI2RlZmluZSBOVU1fREFVUyA0Ci0KLSNkZWZpbmUgTlVNX1JPV1NfUEVSX1BBR0UgNDAKLQotLyogZmlyc3QgY29sdW1uIGlzIDAgKG5vdCAxKSAqLwotI2RlZmluZSBQT1NfVElNRV9TVEFSVCAzMgotI2RlZmluZSBQT1NfVElNRV9FTkQgMzkKLQotI2RlZmluZSBQT1NfSEVBREVSX1NUQVJUIDcKLSNkZWZpbmUgUE9TX0hFQURFUl9FTkQgMzEKLQotLyogUmV0dXJucyAndHJ1ZScgaWYgdGhlIHBhcnQgb2YgdGhlIHZpZGVvdGV4dCBwYWdlIGRlc2NyaWJlZCB3aXRoIHJlcSBjb250YWlucwotICAgKGF0IGxlYXN0IHBhcnRzIG9mKSB0aGUgdGltZSBmaWVsZCAqLwotI2RlZmluZSBSRVFfQ09OVEFJTlNfVElNRShwX3JlcSkgXAotCSgocF9yZXEpLT5zdGFydCA8PSBQT1NfVElNRV9FTkQgJiYgXAotCSAocF9yZXEpLT5lbmQgICA+PSBQT1NfVElNRV9TVEFSVCkKLQotLyogUmV0dXJucyAndHJ1ZScgaWYgdGhlIHBhcnQgb2YgdGhlIHZpZGVvdGV4dCBwYWdlIGRlc2NyaWJlZCB3aXRoIHJlcSBjb250YWlucwotICAgKGF0IGxlYXN0IHBhcnRzIG9mKSB0aGUgcGFnZSBoZWFkZXIgKi8KLSNkZWZpbmUgUkVRX0NPTlRBSU5TX0hFQURFUihwX3JlcSkgXAotCSgocF9yZXEpLT5zdGFydCA8PSBQT1NfSEVBREVSX0VORCAmJiBcCi0JIChwX3JlcSktPmVuZCAgID49IFBPU19IRUFERVJfU1RBUlQpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIE1vZGUgcmVnaXN0ZXIgbnVtYmVycyBvZiB0aGUgU0FBNTI0NkEJCQkJICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SMCAgICAwCi0jZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1IxICAgIDEKLSNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjIgICAgMgotI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SMyAgICAzCi0jZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1I0ICAgIDQKLSNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjUgICAgNQotI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SNiAgICA2Ci0jZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1I3ICAgIDcKLSNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjggICAgOAotI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SOSAgICA5Ci0jZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1IxMCAgMTAKLSNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjExICAxMQotI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SMTFCIDExCi0KLS8qIFNBQTUyNDZBIG1vZGUgcmVnaXN0ZXJzIG9mdGVuIGF1dG9pbmNyZW1lbnQgdG8gdGhlIG5leHQgcmVnaXN0ZXIuCi0gICBUaGVyZWZvcmUgd2UgdXNlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3RzLiBUaGUgZm9sbG93aW5nIG1hY3JvIGluZGljYXRlcwotICAgdGhlIGVuZCBvZiBhIGNvbW1hbmQgbGlzdC4gKi8KLSNkZWZpbmUgQ09NTUFORF9FTkQgKC0gMSkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQ29udGVudHMgb2YgdGhlIG1vZGUgcmVnaXN0ZXJzIG9mIHRoZSBTQUE1MjQ2QQkJCSAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFJlZ2lzdGVyIFIwIChBZHZhbmNlZCBDb250cm9sKSAqLwotI2RlZmluZSBSMF9TRUxFQ1RfUjExCQkJCQkgICAweDAwCi0jZGVmaW5lIFIwX1NFTEVDVF9SMTFCCQkJCQkgICAweDAxCi0KLSNkZWZpbmUgUjBfUExMX1RJTUVfQ09OU1RBTlRfTE9ORwkJCSAgIDB4MDAKLSNkZWZpbmUgUjBfUExMX1RJTUVfQ09OU1RBTlRfU0hPUlQJCQkgICAweDAyCi0KLSNkZWZpbmUgUjBfRU5BQkxFX25PRERfRVZFTl9PVVRQVVQJCQkgICAweDAwCi0jZGVmaW5lIFIwX0RJU0FCTEVfbk9ERF9FVkVOX09VVFBVVAkJCSAgIDB4MDQKLQotI2RlZmluZSBSMF9FTkFCTEVfSERSX1BPTEwJCQkJICAgMHgwMAotI2RlZmluZSBSMF9ESVNBQkxFX0hEUl9QT0xMCQkJCSAgIDB4MTAKLQotI2RlZmluZSBSMF9ET19OT1RfRk9SQ0Vfbk9ERF9FVkVOX0xPV19JRl9QSUNUVVJFX0RJU1BMQVlFRCAweDAwCi0jZGVmaW5lIFIwX0ZPUkNFX25PRERfRVZFTl9MT1dfSUZfUElDVFVSRV9ESVNQTEFZRUQJICAgMHgyMAotCi0jZGVmaW5lIFIwX05PX0ZSRUVfUlVOX1BMTAkJCQkgICAweDAwCi0jZGVmaW5lIFIwX0ZSRUVfUlVOX1BMTAkJCQkJICAgMHg0MAotCi0jZGVmaW5lIFIwX05PX0FVVE9NQVRJQ19GQVNURVhUX1BST01QVAkJCSAgIDB4MDAKLSNkZWZpbmUgUjBfQVVUT01BVElDX0ZBU1RFWFRfUFJPTVBUCQkJICAgMHg4MAotCi0vKiBSZWdpc3RlciBSMSAoTW9kZSkgKi8KLSNkZWZpbmUgUjFfSU5URVJMQUNFRF8zMTJfQU5EX0hBTEZfMzEyX0FORF9IQUxGX0xJTkVTCSAgIDB4MDAKLSNkZWZpbmUgUjFfTk9OX0lOVEVSTEFDRURfMzEyXzMxM19MSU5FUwkJCSAgIDB4MDEKLSNkZWZpbmUgUjFfTk9OX0lOVEVSTEFDRURfMzEyXzMxMl9MSU5FUwkJCSAgIDB4MDIKLSNkZWZpbmUgUjFfRkZCX0xFQURJTkdfRURHRV9JTl9GSVJTVF9CUk9BRF9QVUxTRQkgICAweDAzCi0jZGVmaW5lIFIxX0ZGQl9MRUFESU5HX0VER0VfSU5fU0VDT05EX0JST0FEX1BVTFNFCSAgIDB4MDcKLQotI2RlZmluZSBSMV9ERVcJCQkJCQkgICAweDAwCi0jZGVmaW5lIFIxX0ZVTExfRklFTEQJCQkJCSAgIDB4MDgKLQotI2RlZmluZSBSMV9FWFRFTkRFRF9QQUNLRVRfRElTQUJMRQkJCSAgIDB4MDAKLSNkZWZpbmUgUjFfRVhURU5ERURfUEFDS0VUX0VOQUJMRQkJCSAgIDB4MTAKLQotI2RlZmluZSBSMV9EQVVTX0FMTF9PTgkJCQkJICAgMHgwMAotI2RlZmluZSBSMV9EQVVTX0FMTF9PRkYJCQkJCSAgIDB4MjAKLQotI2RlZmluZSBSMV83X0JJVFNfUExVU19QQVJJVFkJCQkJICAgMHgwMAotI2RlZmluZSBSMV84X0JJVFNfTk9fUEFSSVRZCQkJCSAgIDB4NDAKLQotI2RlZmluZSBSMV9WQ1NfVE9fU0NTCQkJCQkgICAweDAwCi0jZGVmaW5lIFIxX05PX1ZDU19UT19TQ1MJCQkJICAgMHg4MAotCi0vKiBSZWdpc3RlciBSMiAoUGFnZSByZXF1ZXN0IGFkZHJlc3MpICovCi0jZGVmaW5lIFIyX0lOX1IzX1NFTEVDVF9QQUdFX0hVTkRSRURTCQkJICAgMHgwMAotI2RlZmluZSBSMl9JTl9SM19TRUxFQ1RfUEFHRV9URU5TCQkJICAgMHgwMQotI2RlZmluZSBSMl9JTl9SM19TRUxFQ1RfUEFHRV9VTklUUwkJCSAgIDB4MDIKLSNkZWZpbmUgUjJfSU5fUjNfU0VMRUNUX0hPVVJTX1RFTlMJCQkgICAweDAzCi0jZGVmaW5lIFIyX0lOX1IzX1NFTEVDVF9IT1VSU19VTklUUwkJCSAgIDB4MDQKLSNkZWZpbmUgUjJfSU5fUjNfU0VMRUNUX01JTlVURVNfVEVOUwkJCSAgIDB4MDUKLSNkZWZpbmUgUjJfSU5fUjNfU0VMRUNUX01JTlVURVNfVU5JVFMJCQkgICAweDA2Ci0KLSNkZWZpbmUgUjJfREFVXzAJCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjJfREFVXzEJCQkJCSAgIDB4MTAKLSNkZWZpbmUgUjJfREFVXzIJCQkJCSAgIDB4MjAKLSNkZWZpbmUgUjJfREFVXzMJCQkJCSAgIDB4MzAKLQotI2RlZmluZSBSMl9CQU5LXzAJCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjJfQkFOSyAxCQkJCQkgICAweDQwCi0KLSNkZWZpbmUgUjJfSEFNTUlOR19DSEVDS19PTgkJCQkgICAweDgwCi0jZGVmaW5lIFIyX0hBTU1JTkdfQ0hFQ0tfT0ZGCQkJCSAgIDB4MDAKLQotLyogUmVnaXN0ZXIgUjMgKFBhZ2UgcmVxdWVzdCBkYXRhKSAqLwotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzAJCQkJICAgMHgwMAotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzEJCQkJICAgMHgwMQotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzIJCQkJICAgMHgwMgotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzMJCQkJICAgMHgwMwotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzQJCQkJICAgMHgwNAotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzUJCQkJICAgMHgwNQotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzYJCQkJICAgMHgwNgotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzcJCQkJICAgMHgwNwotCi0jZGVmaW5lIFIzX0hPTERfUEFHRQkJCQkJICAgMHgwMAotI2RlZmluZSBSM19VUERBVEVfUEFHRQkJCQkJICAgMHgwOAotCi0jZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfRE9fTk9UX0NBUkUJCQkgICAweDAwCi0jZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfRE9fQ0FSRQkJCSAgIDB4MTAKLQotI2RlZmluZSBSM19QQUdFX1RFTlNfRE9fTk9UX0NBUkUJCQkgICAweDAwCi0jZGVmaW5lIFIzX1BBR0VfVEVOU19ET19DQVJFCQkJCSAgIDB4MTAKLQotI2RlZmluZSBSM19QQUdFX1VOSVRTX0RPX05PVF9DQVJFCQkJICAgMHgwMAotI2RlZmluZSBSM19QQUdFX1VOSVRTX0RPX0NBUkUJCQkJICAgMHgxMAotCi0jZGVmaW5lIFIzX0hPVVJTX1RFTlNfRE9fTk9UX0NBUkUJCQkgICAweDAwCi0jZGVmaW5lIFIzX0hPVVJTX1RFTlNfRE9fQ0FSRQkJCQkgICAweDEwCi0KLSNkZWZpbmUgUjNfSE9VUlNfVU5JVFNfRE9fTk9UX0NBUkUJCQkgICAweDAwCi0jZGVmaW5lIFIzX0hPVVJTX1VOSVRTX0RPX0NBUkUJCQkJICAgMHgxMAotCi0jZGVmaW5lIFIzX01JTlVURVNfVEVOU19ET19OT1RfQ0FSRQkJCSAgIDB4MDAKLSNkZWZpbmUgUjNfTUlOVVRFU19URU5TX0RPX0NBUkUJCQkJICAgMHgxMAotCi0jZGVmaW5lIFIzX01JTlVURVNfVU5JVFNfRE9fTk9UX0NBUkUJCQkgICAweDAwCi0jZGVmaW5lIFIzX01JTlVURVNfVU5JVFNfRE9fQ0FSRQkJCSAgIDB4MTAKLQotLyogUmVnaXN0ZXIgUjQgKERpc3BsYXkgY2hhcHRlcikgKi8KLSNkZWZpbmUgUjRfRElTUExBWV9QQUdFXzAJCQkJICAgMHgwMAotI2RlZmluZSBSNF9ESVNQTEFZX1BBR0VfMQkJCQkgICAweDAxCi0jZGVmaW5lIFI0X0RJU1BMQVlfUEFHRV8yCQkJCSAgIDB4MDIKLSNkZWZpbmUgUjRfRElTUExBWV9QQUdFXzMJCQkJICAgMHgwMwotI2RlZmluZSBSNF9ESVNQTEFZX1BBR0VfNAkJCQkgICAweDA0Ci0jZGVmaW5lIFI0X0RJU1BMQVlfUEFHRV81CQkJCSAgIDB4MDUKLSNkZWZpbmUgUjRfRElTUExBWV9QQUdFXzYJCQkJICAgMHgwNgotI2RlZmluZSBSNF9ESVNQTEFZX1BBR0VfNwkJCQkgICAweDA3Ci0KLS8qIFJlZ2lzdGVyIFI1IChOb3JtYWwgZGlzcGxheSBjb250cm9sKSAqLwotI2RlZmluZSBSNV9QSUNUVVJFX0lOU0lERV9CT1hJTkdfT0ZGCQkJICAgMHgwMAotI2RlZmluZSBSNV9QSUNUVVJFX0lOU0lERV9CT1hJTkdfT04JCQkgICAweDAxCi0KLSNkZWZpbmUgUjVfUElDVFVSRV9PVVRTSURFX0JPWElOR19PRkYJCQkgICAweDAwCi0jZGVmaW5lIFI1X1BJQ1RVUkVfT1VUU0lERV9CT1hJTkdfT04JCQkgICAweDAyCi0KLSNkZWZpbmUgUjVfVEVYVF9JTlNJREVfQk9YSU5HX09GRgkJCSAgIDB4MDAKLSNkZWZpbmUgUjVfVEVYVF9JTlNJREVfQk9YSU5HX09OCQkJICAgMHgwNAotCi0jZGVmaW5lIFI1X1RFWFRfT1VUU0lERV9CT1hJTkdfT0ZGCQkJICAgMHgwMAotI2RlZmluZSBSNV9URVhUX09VVFNJREVfQk9YSU5HX09OCQkJICAgMHgwOAotCi0jZGVmaW5lIFI1X0NPTlRSQVNUX1JFRFVDVElPTl9JTlNJREVfQk9YSU5HX09GRgkJICAgMHgwMAotI2RlZmluZSBSNV9DT05UUkFTVF9SRURVQ1RJT05fSU5TSURFX0JPWElOR19PTgkJICAgMHgxMAotCi0jZGVmaW5lIFI1X0NPTlRSQVNUX1JFRFVDVElPTl9PVVRTSURFX0JPWElOR19PRkYJICAgMHgwMAotI2RlZmluZSBSNV9DT05UUkFTVF9SRURVQ1RJT05fT1VUU0lERV9CT1hJTkdfT04JCSAgIDB4MjAKLQotI2RlZmluZSBSNV9CQUNLR1JPVU5EX0NPTE9SX0lOU0lERV9CT1hJTkdfT0ZGCQkgICAweDAwCi0jZGVmaW5lIFI1X0JBQ0tHUk9VTkRfQ09MT1JfSU5TSURFX0JPWElOR19PTgkJICAgMHg0MAotCi0jZGVmaW5lIFI1X0JBQ0tHUk9VTkRfQ09MT1JfT1VUU0lERV9CT1hJTkdfT0ZGCQkgICAweDAwCi0jZGVmaW5lIFI1X0JBQ0tHUk9VTkRfQ09MT1JfT1VUU0lERV9CT1hJTkdfT04JCSAgIDB4ODAKLQotLyogUmVnaXN0ZXIgUjYgKE5ld3NmbGFzaCBkaXNwbGF5KSAqLwotI2RlZmluZSBSNl9ORVdTRkxBU0hfUElDVFVSRV9JTlNJREVfQk9YSU5HX09GRgkJICAgMHgwMAotI2RlZmluZSBSNl9ORVdTRkxBU0hfUElDVFVSRV9JTlNJREVfQk9YSU5HX09OCQkgICAweDAxCi0KLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX1BJQ1RVUkVfT1VUU0lERV9CT1hJTkdfT0ZGCQkgICAweDAwCi0jZGVmaW5lIFI2X05FV1NGTEFTSF9QSUNUVVJFX09VVFNJREVfQk9YSU5HX09OCQkgICAweDAyCi0KLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX1RFWFRfSU5TSURFX0JPWElOR19PRkYJCSAgIDB4MDAKLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX1RFWFRfSU5TSURFX0JPWElOR19PTgkJICAgMHgwNAotCi0jZGVmaW5lIFI2X05FV1NGTEFTSF9URVhUX09VVFNJREVfQk9YSU5HX09GRgkJICAgMHgwMAotI2RlZmluZSBSNl9ORVdTRkxBU0hfVEVYVF9PVVRTSURFX0JPWElOR19PTgkJICAgMHgwOAotCi0jZGVmaW5lIFI2X05FV1NGTEFTSF9DT05UUkFTVF9SRURVQ1RJT05fSU5TSURFX0JPWElOR19PRkYgIDB4MDAKLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX0NPTlRSQVNUX1JFRFVDVElPTl9JTlNJREVfQk9YSU5HX09OICAgMHgxMAotCi0jZGVmaW5lIFI2X05FV1NGTEFTSF9DT05UUkFTVF9SRURVQ1RJT05fT1VUU0lERV9CT1hJTkdfT0ZGIDB4MDAKLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX0NPTlRSQVNUX1JFRFVDVElPTl9PVVRTSURFX0JPWElOR19PTiAgMHgyMAotCi0jZGVmaW5lIFI2X05FV1NGTEFTSF9CQUNLR1JPVU5EX0NPTE9SX0lOU0lERV9CT1hJTkdfT0ZGICAgIDB4MDAKLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX0JBQ0tHUk9VTkRfQ09MT1JfSU5TSURFX0JPWElOR19PTgkgICAweDQwCi0KLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX0JBQ0tHUk9VTkRfQ09MT1JfT1VUU0lERV9CT1hJTkdfT0ZGICAgMHgwMAotI2RlZmluZSBSNl9ORVdTRkxBU0hfQkFDS0dST1VORF9DT0xPUl9PVVRTSURFX0JPWElOR19PTiAgICAweDgwCi0KLS8qIFJlZ2lzdGVyIFI3IChEaXNwbGF5IG1vZGUpICovCi0jZGVmaW5lIFI3X0JPWF9PRkZfUk9XXzAJCQkJICAgMHgwMAotI2RlZmluZSBSN19CT1hfT05fUk9XXzAJCQkJCSAgIDB4MDEKLQotI2RlZmluZSBSN19CT1hfT0ZGX1JPV18xX1RPXzIzCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjdfQk9YX09OX1JPV18xX1RPXzIzCQkJCSAgIDB4MDIKLQotI2RlZmluZSBSN19CT1hfT0ZGX1JPV18yNAkJCQkgICAweDAwCi0jZGVmaW5lIFI3X0JPWF9PTl9ST1dfMjQJCQkJICAgMHgwNAotCi0jZGVmaW5lIFI3X1NJTkdMRV9IRUlHSFQJCQkJICAgMHgwMAotI2RlZmluZSBSN19ET1VCTEVfSEVJR0hUCQkJCSAgIDB4MDgKLQotI2RlZmluZSBSN19UT1BfSEFMRgkJCQkJICAgMHgwMAotI2RlZmluZSBSN19CT1RUT01fSEFMRgkJCQkJICAgMHgxMAotCi0jZGVmaW5lIFI3X1JFVkVBTF9PRkYJCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjdfUkVWRUFMX09OCQkJCQkgICAweDIwCi0KLSNkZWZpbmUgUjdfQ1VSU0VSX09GRgkJCQkJICAgMHgwMAotI2RlZmluZSBSN19DVVJTRVJfT04JCQkJCSAgIDB4NDAKLQotI2RlZmluZSBSN19TVEFUVVNfQk9UVE9NCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjdfU1RBVFVTX1RPUAkJCQkJICAgMHg4MAotCi0vKiBSZWdpc3RlciBSOCAoQWN0aXZlIGNoYXB0ZXIpICovCi0jZGVmaW5lIFI4X0FDVElWRV9DSEFQVEVSXzAJCQkJICAgMHgwMAotI2RlZmluZSBSOF9BQ1RJVkVfQ0hBUFRFUl8xCQkJCSAgIDB4MDEKLSNkZWZpbmUgUjhfQUNUSVZFX0NIQVBURVJfMgkJCQkgICAweDAyCi0jZGVmaW5lIFI4X0FDVElWRV9DSEFQVEVSXzMJCQkJICAgMHgwMwotI2RlZmluZSBSOF9BQ1RJVkVfQ0hBUFRFUl80CQkJCSAgIDB4MDQKLSNkZWZpbmUgUjhfQUNUSVZFX0NIQVBURVJfNQkJCQkgICAweDA1Ci0jZGVmaW5lIFI4X0FDVElWRV9DSEFQVEVSXzYJCQkJICAgMHgwNgotI2RlZmluZSBSOF9BQ1RJVkVfQ0hBUFRFUl83CQkJCSAgIDB4MDcKLQotI2RlZmluZSBSOF9DTEVBUl9NRU1PUlkJCQkJCSAgIDB4MDgKLSNkZWZpbmUgUjhfRE9fTk9UX0NMRUFSX01FTU9SWQkJCQkgICAweDAwCi0KLS8qIFJlZ2lzdGVyIFI5IChDdXJzZXIgcm93KSAqLwotI2RlZmluZSBSOV9DVVJTRVJfUk9XXzAJCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjlfQ1VSU0VSX1JPV18xCQkJCQkgICAweDAxCi0jZGVmaW5lIFI5X0NVUlNFUl9ST1dfMgkJCQkJICAgMHgwMgotI2RlZmluZSBSOV9DVVJTRVJfUk9XXzI1CQkJCSAgIDB4MTkKLQotLyogUmVnaXN0ZXIgUjEwIChDdXJzZXIgY29sdW1uKSAqLwotI2RlZmluZSBSMTBfQ1VSU0VSX0NPTFVNTl8wCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjEwX0NVUlNFUl9DT0xVTU5fNgkJCQkgICAweDA2Ci0jZGVmaW5lIFIxMF9DVVJTRVJfQ09MVU1OXzgJCQkJICAgMHgwOAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBSb3cgMjUgY29udHJvbCBkYXRhIGluIGNvbHVtbiAwIHRvIDkJCQkJCSAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgUk9XMjVfQ09MVU1OMF9QQUdFX1VOSVRTCQkJICAgMHgwRgotCi0jZGVmaW5lIFJPVzI1X0NPTFVNTjFfUEFHRV9URU5TCQkJCSAgIDB4MEYKLQotI2RlZmluZSBST1cyNV9DT0xVTU4yX01JTlVURVNfVU5JVFMJCQkgICAweDBGCi0KLSNkZWZpbmUgUk9XMjVfQ09MVU1OM19NSU5VVEVTX1RFTlMJCQkgICAweDA3Ci0jZGVmaW5lIFJPVzI1X0NPTFVNTjNfREVMRVRFX1BBR0UJCQkgICAweDA4Ci0KLSNkZWZpbmUgUk9XMjVfQ09MVU1ONF9IT1VSX1VOSVRTCQkJICAgMHgwRgotCi0jZGVmaW5lIFJPVzI1X0NPTFVNTjVfSE9VUl9URU5TCQkJCSAgIDB4MDMKLSNkZWZpbmUgUk9XMjVfQ09MVU1ONV9JTlNFUlRfSEVBRExJTkUJCQkgICAweDA0Ci0jZGVmaW5lIFJPVzI1X0NPTFVNTjVfSU5TRVJUX1NVQlRJVExFCQkJICAgMHgwOAotCi0jZGVmaW5lIFJPVzI1X0NPTFVNTjZfU1VQUFJFU1NfSEVBREVSCQkJICAgMHgwMQotI2RlZmluZSBST1cyNV9DT0xVTU42X1VQREFURV9QQUdFCQkJICAgMHgwMgotI2RlZmluZSBST1cyNV9DT0xVTU42X0lOVEVSUlVQVEVEX1NFUVVFTkNFCQkgICAweDA0Ci0jZGVmaW5lIFJPVzI1X0NPTFVNTjZfU1VQUFJFU1NfRElTUExBWQkJCSAgIDB4MDgKLQotI2RlZmluZSBST1cyNV9DT0xVTU43X1NFUklBTF9NT0RFCQkJICAgMHgwMQotI2RlZmluZSBST1cyNV9DT0xVTU43X0NIQVJBQ1RFUl9TRVQJCQkgICAweDBFCi0KLSNkZWZpbmUgUk9XMjVfQ09MVU1OOF9QQUdFX0hVTkRSRURTCQkJICAgMHgwNwotI2RlZmluZSBST1cyNV9DT0xVTU44X1BBR0VfTk9UX0ZPVU5ECQkJICAgMHgxMAotCi0jZGVmaW5lIFJPVzI1X0NPTFVNTjlfUEFHRV9CRUlOR19MT09LRURfRk9SCQkgICAweDIwCi0KLSNkZWZpbmUgUk9XMjVfQ09MVU1OMF9UT183X0hBTU1JTkdfRVJST1IJCSAgIDB4MTAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogSGVscGVyIG1hY3JvcyBmb3IgZXh0cmFjdGluZyBwYWdlLCBob3VyIGFuZCBtaW51dGUgZGlnaXRzCQkgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBCWVRFX1BPUyAgMCBpcyBhdCByb3cgMCwgY29sdW1uIDAsCi0gICBCWVRFX1BPUyAgMSBpcyBhdCByb3cgMCwgY29sdW1uIDEsCi0gICBCWVRFX1BPUyA0MCBpcyBhdCByb3cgMSwgY29sdW1uIDAsICh3aXRoIE5VTV9ST1dTX1BFUl9QQUdFID0gNDApCi0gICBCWVRFX1BPUyA0MSBpcyBhdCByb3cgMSwgY29sdW1uIDEsICh3aXRoIE5VTV9ST1dTX1BFUl9QQUdFID0gNDApLAotICAgLi4uICovCi0jZGVmaW5lIFJPVyhCWVRFX1BPUykgICAgKEJZVEVfUE9TIC8gTlVNX1JPV1NfUEVSX1BBR0UpCi0jZGVmaW5lIENPTFVNTihCWVRFX1BPUykgKEJZVEVfUE9TICUgTlVNX1JPV1NfUEVSX1BBR0UpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEhlbHBlciBtYWNyb3MgZm9yIGV4dHJhY3RpbmcgcGFnZSwgaG91ciBhbmQgbWludXRlIGRpZ2l0cwkJICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTWFjcm9zIGZvciBleHRyYWN0aW5nIGh1bmRyZWRzLCB0ZW5zIGFuZCB1bml0cyBvZiBhIHBhZ2UgbnVtYmVyIHdoaWNoCi0gICBtdXN0IGJlIGluIHRoZSByYW5nZSAwIC4uLiAweDc5OS4KLSAgIE5vdGUgdGhhdCBwYWdlIGlzIGNvZGVkIGluIGhleGFkZWNpbWFsLCBpLmUuIDB4MTIzIG1lYW5zIHBhZ2UgMTIzLgotICAgcGFnZSAweC4uIG1lYW5zIHBhZ2UgOC4uICovCi0jZGVmaW5lIEhVTkRSRURTX09GX1BBR0UocGFnZSkgKCgocGFnZSkgLyAweDEwMCkgJiAweDcpCi0jZGVmaW5lIFRFTlNfT0ZfUEFHRShwYWdlKSAgICAgKCgocGFnZSkgLyAweDEwKSAgJiAweEYpCi0jZGVmaW5lIFVOSVRTX09GX1BBR0UocGFnZSkgICAgICgocGFnZSkgJiAweEYpCi0KLS8qIE1hY3JvcyBmb3IgZXh0cmFjdGluZyB0ZW5zIGFuZCB1bml0cyBvZiBhIGhvdXIgaW5mb3JtYXRpb24gd2hpY2gKLSAgIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgLi4uIDB4MjQuCi0gICBOb3RlIHRoYXQgaG91ciBpcyBjb2RlZCBpbiBoZXhhZGVjaW1hbCwgaS5lLiAweDEyIG1lYW5zIDEyIGhvdXJzICovCi0jZGVmaW5lIFRFTlNfT0ZfSE9VUihob3VyKSAgKChob3VyKSAvIDB4MTApCi0jZGVmaW5lIFVOSVRTX09GX0hPVVIoaG91cikgKChob3VyKSAmIDB4RikKLQotLyogTWFjcm9zIGZvciBleHRyYWN0aW5nIHRlbnMgYW5kIHVuaXRzIG9mIGEgbWludXRlIGluZm9ybWF0aW9uIHdoaWNoCi0gICBtdXN0IGJlIGluIHRoZSByYW5nZSAwIC4uLiAweDU5LgotICAgTm90ZSB0aGF0IG1pbnV0ZSBpcyBjb2RlZCBpbiBoZXhhZGVjaW1hbCwgaS5lLiAweDEyIG1lYW5zIDEyIG1pbnV0ZXMgKi8KLSNkZWZpbmUgVEVOU19PRl9NSU5VVEUobWludXRlKSAgKChtaW51dGUpIC8gMHgxMCkKLSNkZWZpbmUgVU5JVFNfT0ZfTUlOVVRFKG1pbnV0ZSkgKChtaW51dGUpICYgMHhGKQotCi0jZGVmaW5lIEhPVVJfTUFYICAgMHgyMwotI2RlZmluZSBNSU5VVEVfTUFYIDB4NTkKLSNkZWZpbmUgUEFHRV9NQVggICAweDhGRgotCi0jZW5kaWYgIC8qIF9fU0FBNTI0NkFfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCmluZGV4IDBkNjM5NzMuLjNiYjk1OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCkBAIC0xNSw4ICsxNSw2IEBACiAgKgogICoJQ29weXJpZ2h0IChjKSAxOTk4IFJpY2hhcmQgR3VlbnRoZXIgPHJpY2hhcmQuZ3VlbnRoZXJAc3R1ZGVudC51bmktdHVlYmluZ2VuLmRlPgogICoKLSAqICRJZDogc2FhNTI0OS5jLHYgMS4xIDE5OTgvMDMvMzAgMjI6MjM6MjMgYWxhbiBFeHAgJAotICoKICAqCURlcml2ZWQgRnJvbQogICoKICAqIHZ0eC5jOgpAQCAtNDUsMzMgKzQzLDI4IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW90ZXh0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KIAotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgR2VuZyA8bGludXhATWljaGFlbEdlbmcuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNTI0OSBUZWxldGV4dCBkZWNvZGVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjZGVmaW5lIFZUWF9WRVJfTUFKIDEKICNkZWZpbmUgVlRYX1ZFUl9NSU4gOAogCiAKLQogI2RlZmluZSBOVU1fREFVUyA0CiAjZGVmaW5lIE5VTV9CVUZTIDgKLSNkZWZpbmUgSUZfTkFNRSAiU0FBNTI0OSIKIAogc3RhdGljIGNvbnN0IGludCBkaXNwX21vZGVzWzhdWzNdID0KIHsKQEAgLTEwOSw2ICsxMDIsNyBAQAogCWludCBkaXNwX21vZGU7CiAJaW50IHZpcnR1YWxfbW9kZTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIApAQCAtMTIzLDEyNSArMTE3LDggQEAKIAogI2RlZmluZSBWVFhfREVWX01JTk9SIDAKIAotLyogR2VuZXJhbCBkZWZpbmVzIGFuZCBkZWJ1Z2dpbmcgc3VwcG9ydCAqLwotCi0jZGVmaW5lIFJFU0NIRUQgZG8geyBjb25kX3Jlc2NoZWQoKTsgfSB3aGlsZSgwKQotCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBzYWFfdGVtcGxhdGU7CS8qIERlY2xhcmVkIG5lYXIgYm90dG9tICovCiAKLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gezM0Pj4xLEkyQ19DTElFTlRfRU5EfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGU7Ci0KLXN0YXRpYyBpbnQgc2FhNTI0OV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBpbnQgYWRkciwgaW50IGtpbmQpCi17Ci0JaW50IHBnYnVmOwotCWludCBlcnI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZDsKLQlzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UgKnQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJzYWE1MjQ5OiB0ZWxldGV4dCBjaGlwIGZvdW5kLlxuIik7Ci0JY2xpZW50PWttYWxsb2Moc2l6ZW9mKCpjbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZihjbGllbnQ9PU5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCWNsaWVudF90ZW1wbGF0ZS5hZGFwdGVyID0gYWRhcDsKLQljbGllbnRfdGVtcGxhdGUuYWRkciA9IGFkZHI7Ci0JbWVtY3B5KGNsaWVudCwgJmNsaWVudF90ZW1wbGF0ZSwgc2l6ZW9mKCpjbGllbnQpKTsKLQl0ID0ga3phbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKLQlpZih0PT1OVUxMKQotCXsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXN0cmxjcHkoY2xpZW50LT5uYW1lLCBJRl9OQU1FLCBJMkNfTkFNRV9TSVpFKTsKLQltdXRleF9pbml0KCZ0LT5sb2NrKTsKLQotCS8qCi0JICoJTm93IGNyZWF0ZSBhIHZpZGVvNGxpbnV4IGRldmljZQotCSAqLwotCi0JdmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYodmQ9PU5VTEwpCi0JewotCQlrZnJlZSh0KTsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHZkKTsKLQltZW1jcHkodmQsICZzYWFfdGVtcGxhdGUsIHNpemVvZigqdmQpKTsKLQotCWZvciAocGdidWYgPSAwOyBwZ2J1ZiA8IE5VTV9EQVVTOyBwZ2J1ZisrKQotCXsKLQkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLnBnYnVmLCAnICcsIHNpemVvZih0LT52ZGF1WzBdLnBnYnVmKSk7Ci0JCW1lbXNldCh0LT52ZGF1W3BnYnVmXS5zcmVncywgMCwgc2l6ZW9mKHQtPnZkYXVbMF0uc3JlZ3MpKTsKLQkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLmxhc3RzdGF0LCAwLCBzaXplb2YodC0+dmRhdVswXS5sYXN0c3RhdCkpOwotCQl0LT52ZGF1W3BnYnVmXS5leHBpcmUgPSAwOwotCQl0LT52ZGF1W3BnYnVmXS5jbHJmb3VuZCA9IHRydWU7Ci0JCXQtPnZkYXVbcGdidWZdLnN0b3BwZWQgPSB0cnVlOwotCQl0LT5pc19zZWFyY2hpbmdbcGdidWZdID0gZmFsc2U7Ci0JfQotCXZkLT5wcml2PXQ7Ci0KLQotCS8qCi0JICoJUmVnaXN0ZXIgaXQKLQkgKi8KLQotCWlmKChlcnI9dmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZkLCBWRkxfVFlQRV9WVFgsLTEpKTwwKQotCXsKLQkJa2ZyZWUodCk7Ci0JCWtmcmVlKHZkKTsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JdC0+Y2xpZW50ID0gY2xpZW50OwotCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKglXZSBkbyBtb3N0IG9mIHRoZSBoYXJkIHdvcmsgd2hlbiB3ZSBiZWNvbWUgYSBkZXZpY2Ugb24gdGhlIGkyYy4KLSAqLwotCi1zdGF0aWMgaW50IHNhYTUyNDlfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQotewotCWlmIChhZGFwLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpCi0JCXJldHVybiBpMmNfcHJvYmUoYWRhcCwgJmFkZHJfZGF0YSwgc2FhNTI0OV9hdHRhY2gpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNhYTUyNDlfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkKTsKLQlrZnJlZSh2ZC0+cHJpdik7Ci0Ja2ZyZWUodmQpOwotCWtmcmVlKGNsaWVudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIG5ldyBJMkMgZHJpdmVyIHN1cHBvcnQgKi8KLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfdmlkZW90ZXh0ID0KLXsKLQkuZHJpdmVyID0gewotCQkubmFtZSAJPSBJRl9OQU1FLAkJLyogbmFtZSAqLwotCX0sCi0JLmlkIAkJPSBJMkNfRFJJVkVSSURfU0FBNTI0OSwgLyogaW4gaTJjLmggKi8KLQkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE1MjQ5X3Byb2JlLAotCS5kZXRhY2hfY2xpZW50ICA9IHNhYTUyNDlfZGV0YWNoLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9IHsKLQkuZHJpdmVyCQk9ICZpMmNfZHJpdmVyX3ZpZGVvdGV4dCwKLQkubmFtZQkJPSAiKHVuc2V0KSIsCi19OwotCiAvKgogICoJV2FpdCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGppZmZpZXMgKDEwbXMpLiBUaGlzIGNhbGxzIHRoZSBzY2hlZHVsZXIsIHNvIHRoZSBhY3R1YWwKICAqCWRlbGF5IG1heSBiZSBsb25nZXIuCkBAIC0yNzUsNyArMTUyLDcgQEAKIAlidWZbMF0gPSByZWc7CiAJbWVtY3B5KGJ1ZisxLCBkYXRhLCBjb3VudCk7CiAKLQlpZihpMmNfbWFzdGVyX3NlbmQodC0+Y2xpZW50LCBidWYsIGNvdW50KzEpPT1jb3VudCsxKQorCWlmIChpMmNfbWFzdGVyX3NlbmQodC0+Y2xpZW50LCBidWYsIGNvdW50ICsgMSkgPT0gY291bnQgKyAxKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gLTE7CiB9CkBAIC0zMTcsMjQ2ICsxOTQsMjM2IEBACiAJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0YXRpYyBpbnQgdmlydHVhbF9tb2RlID0gZmFsc2U7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdD12ZC0+cHJpdjsKKwlzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UgKnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0Jc3dpdGNoKGNtZCkKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVlRYSU9DR0VUSU5GTzoKIAl7Ci0JCWNhc2UgVlRYSU9DR0VUSU5GTzoKLQkJewotCQkJdnR4X2luZm9fdCAqaW5mbyA9IGFyZzsKLQkJCWluZm8tPnZlcnNpb25fbWFqb3IgPSBWVFhfVkVSX01BSjsKLQkJCWluZm8tPnZlcnNpb25fbWlub3IgPSBWVFhfVkVSX01JTjsKLQkJCWluZm8tPm51bXBhZ2VzID0gTlVNX0RBVVM7Ci0JCQkvKmluZm8tPmNjdF90eXBlID0gQ0NUX1RZUEU7Ki8KLQkJCXJldHVybiAwOwotCQl9CisJCXZ0eF9pbmZvX3QgKmluZm8gPSBhcmc7CisJCWluZm8tPnZlcnNpb25fbWFqb3IgPSBWVFhfVkVSX01BSjsKKwkJaW5mby0+dmVyc2lvbl9taW5vciA9IFZUWF9WRVJfTUlOOworCQlpbmZvLT5udW1wYWdlcyA9IE5VTV9EQVVTOworCQkvKmluZm8tPmNjdF90eXBlID0gQ0NUX1RZUEU7Ki8KKwkJcmV0dXJuIDA7CisJfQogCi0JCWNhc2UgVlRYSU9DQ0xSUEFHRToKLQkJewotCQkJdnR4X3BhZ2VyZXFfdCAqcmVxID0gYXJnOworCWNhc2UgVlRYSU9DQ0xSUEFHRToKKwl7CisJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKIAotCQkJaWYgKHJlcS0+cGdidWYgPCAwIHx8IHJlcS0+cGdidWYgPj0gTlVNX0RBVVMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQltZW1zZXQodC0+dmRhdVtyZXEtPnBnYnVmXS5wZ2J1ZiwgJyAnLCBzaXplb2YodC0+dmRhdVswXS5wZ2J1ZikpOwotCQkJdC0+dmRhdVtyZXEtPnBnYnVmXS5jbHJmb3VuZCA9IHRydWU7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlpZiAocmVxLT5wZ2J1ZiA8IDAgfHwgcmVxLT5wZ2J1ZiA+PSBOVU1fREFVUykKKwkJCXJldHVybiAtRUlOVkFMOworCQltZW1zZXQodC0+dmRhdVtyZXEtPnBnYnVmXS5wZ2J1ZiwgJyAnLCBzaXplb2YodC0+dmRhdVswXS5wZ2J1ZikpOworCQl0LT52ZGF1W3JlcS0+cGdidWZdLmNscmZvdW5kID0gdHJ1ZTsKKwkJcmV0dXJuIDA7CisJfQogCi0JCWNhc2UgVlRYSU9DQ0xSRk9VTkQ6Ci0JCXsKLQkJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKKwljYXNlIFZUWElPQ0NMUkZPVU5EOgorCXsKKwkJdnR4X3BhZ2VyZXFfdCAqcmVxID0gYXJnOwogCi0JCQlpZiAocmVxLT5wZ2J1ZiA8IDAgfHwgcmVxLT5wZ2J1ZiA+PSBOVU1fREFVUykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uY2xyZm91bmQgPSB0cnVlOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJaWYgKHJlcS0+cGdidWYgPCAwIHx8IHJlcS0+cGdidWYgPj0gTlVNX0RBVVMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJdC0+dmRhdVtyZXEtPnBnYnVmXS5jbHJmb3VuZCA9IHRydWU7CisJCXJldHVybiAwOworCX0KIAotCQljYXNlIFZUWElPQ1BBR0VSRVE6Ci0JCXsKLQkJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKLQkJCWlmICghKHJlcS0+cGFnZW1hc2sgJiBQR01BU0tfUEFHRSkpCi0JCQkJcmVxLT5wYWdlID0gMDsKLQkJCWlmICghKHJlcS0+cGFnZW1hc2sgJiBQR01BU0tfSE9VUikpCi0JCQkJcmVxLT5ob3VyID0gMDsKLQkJCWlmICghKHJlcS0+cGFnZW1hc2sgJiBQR01BU0tfTUlOVVRFKSkKLQkJCQlyZXEtPm1pbnV0ZSA9IDA7Ci0JCQlpZiAocmVxLT5wYWdlIDwgMCB8fCByZXEtPnBhZ2UgPiAweDhmZikgLyogN0ZGID8/ICovCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlyZXEtPnBhZ2UgJj0gMHg3ZmY7Ci0JCQlpZiAocmVxLT5ob3VyIDwgMCB8fCByZXEtPmhvdXIgPiAweDNmIHx8IHJlcS0+bWludXRlIDwgMCB8fCByZXEtPm1pbnV0ZSA+IDB4N2YgfHwKLQkJCQlyZXEtPnBhZ2VtYXNrIDwgMCB8fCByZXEtPnBhZ2VtYXNrID49IFBHTUFTS19NQVggfHwgcmVxLT5wZ2J1ZiA8IDAgfHwgcmVxLT5wZ2J1ZiA+PSBOVU1fREFVUykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uc3JlZ3NbMF0gPSAocmVxLT5wYWdlbWFzayAmIFBHX0hVTkQgPyAweDEwIDogMCkgfCAocmVxLT5wYWdlIC8gMHgxMDApOwotCQkJdC0+dmRhdVtyZXEtPnBnYnVmXS5zcmVnc1sxXSA9IChyZXEtPnBhZ2VtYXNrICYgUEdfVEVOID8gMHgxMCA6IDApIHwgKChyZXEtPnBhZ2UgLyAweDEwKSAmIDB4Zik7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzJdID0gKHJlcS0+cGFnZW1hc2sgJiBQR19VTklUID8gMHgxMCA6IDApIHwgKHJlcS0+cGFnZSAmIDB4Zik7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzNdID0gKHJlcS0+cGFnZW1hc2sgJiBIUl9URU4gPyAweDEwIDogMCkgfCAocmVxLT5ob3VyIC8gMHgxMCk7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzRdID0gKHJlcS0+cGFnZW1hc2sgJiBIUl9VTklUID8gMHgxMCA6IDApIHwgKHJlcS0+aG91ciAmIDB4Zik7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzVdID0gKHJlcS0+cGFnZW1hc2sgJiBNSU5fVEVOID8gMHgxMCA6IDApIHwgKHJlcS0+bWludXRlIC8gMHgxMCk7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzZdID0gKHJlcS0+cGFnZW1hc2sgJiBNSU5fVU5JVCA/IDB4MTAgOiAwKSB8IChyZXEtPm1pbnV0ZSAmIDB4Zik7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQgPSBmYWxzZTsKLQkJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uY2xyZm91bmQgPSB0cnVlOwotCQkJdC0+aXNfc2VhcmNoaW5nW3JlcS0+cGdidWZdID0gdHJ1ZTsKLQkJCXJldHVybiAwOwotCQl9CisJY2FzZSBWVFhJT0NQQUdFUkVROgorCXsKKwkJdnR4X3BhZ2VyZXFfdCAqcmVxID0gYXJnOworCQlpZiAoIShyZXEtPnBhZ2VtYXNrICYgUEdNQVNLX1BBR0UpKQorCQkJcmVxLT5wYWdlID0gMDsKKwkJaWYgKCEocmVxLT5wYWdlbWFzayAmIFBHTUFTS19IT1VSKSkKKwkJCXJlcS0+aG91ciA9IDA7CisJCWlmICghKHJlcS0+cGFnZW1hc2sgJiBQR01BU0tfTUlOVVRFKSkKKwkJCXJlcS0+bWludXRlID0gMDsKKwkJaWYgKHJlcS0+cGFnZSA8IDAgfHwgcmVxLT5wYWdlID4gMHg4ZmYpIC8qIDdGRiA/PyAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlcS0+cGFnZSAmPSAweDdmZjsKKwkJaWYgKHJlcS0+aG91ciA8IDAgfHwgcmVxLT5ob3VyID4gMHgzZiB8fCByZXEtPm1pbnV0ZSA8IDAgfHwgcmVxLT5taW51dGUgPiAweDdmIHx8CisJCQlyZXEtPnBhZ2VtYXNrIDwgMCB8fCByZXEtPnBhZ2VtYXNrID49IFBHTUFTS19NQVggfHwgcmVxLT5wZ2J1ZiA8IDAgfHwgcmVxLT5wZ2J1ZiA+PSBOVU1fREFVUykKKwkJCXJldHVybiAtRUlOVkFMOworCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzBdID0gKHJlcS0+cGFnZW1hc2sgJiBQR19IVU5EID8gMHgxMCA6IDApIHwgKHJlcS0+cGFnZSAvIDB4MTAwKTsKKwkJdC0+dmRhdVtyZXEtPnBnYnVmXS5zcmVnc1sxXSA9IChyZXEtPnBhZ2VtYXNrICYgUEdfVEVOID8gMHgxMCA6IDApIHwgKChyZXEtPnBhZ2UgLyAweDEwKSAmIDB4Zik7CisJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uc3JlZ3NbMl0gPSAocmVxLT5wYWdlbWFzayAmIFBHX1VOSVQgPyAweDEwIDogMCkgfCAocmVxLT5wYWdlICYgMHhmKTsKKwkJdC0+dmRhdVtyZXEtPnBnYnVmXS5zcmVnc1szXSA9IChyZXEtPnBhZ2VtYXNrICYgSFJfVEVOID8gMHgxMCA6IDApIHwgKHJlcS0+aG91ciAvIDB4MTApOworCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzRdID0gKHJlcS0+cGFnZW1hc2sgJiBIUl9VTklUID8gMHgxMCA6IDApIHwgKHJlcS0+aG91ciAmIDB4Zik7CisJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uc3JlZ3NbNV0gPSAocmVxLT5wYWdlbWFzayAmIE1JTl9URU4gPyAweDEwIDogMCkgfCAocmVxLT5taW51dGUgLyAweDEwKTsKKwkJdC0+dmRhdVtyZXEtPnBnYnVmXS5zcmVnc1s2XSA9IChyZXEtPnBhZ2VtYXNrICYgTUlOX1VOSVQgPyAweDEwIDogMCkgfCAocmVxLT5taW51dGUgJiAweGYpOworCQl0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQgPSBmYWxzZTsKKwkJdC0+dmRhdVtyZXEtPnBnYnVmXS5jbHJmb3VuZCA9IHRydWU7CisJCXQtPmlzX3NlYXJjaGluZ1tyZXEtPnBnYnVmXSA9IHRydWU7CisJCXJldHVybiAwOworCX0KIAotCQljYXNlIFZUWElPQ0dFVFNUQVQ6Ci0JCXsKLQkJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKLQkJCXU4IGluZm9iaXRzWzEwXTsKLQkJCXZ0eF9wYWdlaW5mb190IGluZm87Ci0JCQlpbnQgYTsKKwljYXNlIFZUWElPQ0dFVFNUQVQ6CisJeworCQl2dHhfcGFnZXJlcV90ICpyZXEgPSBhcmc7CisJCXU4IGluZm9iaXRzWzEwXTsKKwkJdnR4X3BhZ2VpbmZvX3QgaW5mbzsKKwkJaW50IGE7CiAKLQkJCWlmIChyZXEtPnBnYnVmIDwgMCB8fCByZXEtPnBnYnVmID49IE5VTV9EQVVTKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKCF0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQpCi0JCQl7Ci0JCQkJaWYgKGkyY19zZW5kZGF0YSh0LCAyLCAwLCAtMSkgfHwKLQkJCQkJaTJjX3NlbmRidWYodCwgMywgc2l6ZW9mKHQtPnZkYXVbMF0uc3JlZ3MpLCB0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzKSB8fAotCQkJCQlpMmNfc2VuZGRhdGEodCwgOCwgMCwgMjUsIDAsICcgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsIC0xKSB8fAotCQkJCQlpMmNfc2VuZGRhdGEodCwgMiwgMCwgdC0+dmRhdVtyZXEtPnBnYnVmXS5zcmVnc1swXSB8IDgsIC0xKSB8fAotCQkJCQlpMmNfc2VuZGRhdGEodCwgOCwgMCwgMjUsIDAsIC0xKSkKKwkJaWYgKHJlcS0+cGdidWYgPCAwIHx8IHJlcS0+cGdidWYgPj0gTlVNX0RBVVMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCF0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQpIHsKKwkJCWlmIChpMmNfc2VuZGRhdGEodCwgMiwgMCwgLTEpIHx8CisJCQkJaTJjX3NlbmRidWYodCwgMywgc2l6ZW9mKHQtPnZkYXVbMF0uc3JlZ3MpLCB0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzKSB8fAorCQkJCWkyY19zZW5kZGF0YSh0LCA4LCAwLCAyNSwgMCwgJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywgLTEpIHx8CisJCQkJaTJjX3NlbmRkYXRhKHQsIDIsIDAsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0uc3JlZ3NbMF0gfCA4LCAtMSkgfHwKKwkJCQlpMmNfc2VuZGRhdGEodCwgOCwgMCwgMjUsIDAsIC0xKSkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCWpkZWxheShQQUdFX1dBSVQpOworCQkJaWYgKGkyY19nZXRkYXRhKHQsIDEwLCBpbmZvYml0cykpCisJCQkJcmV0dXJuIC1FSU87CisKKwkJCWlmICghKGluZm9iaXRzWzhdICYgMHgxMCkgJiYgIShpbmZvYml0c1s3XSAmIDB4ZjApICYmCS8qIGNoZWNrIEZPVU5ELWJpdCAqLworCQkJCShtZW1jbXAoaW5mb2JpdHMsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ubGFzdHN0YXQsIHNpemVvZihpbmZvYml0cykpIHx8CisJCQkJdGltZV9hZnRlcl9lcShqaWZmaWVzLCB0LT52ZGF1W3JlcS0+cGdidWZdLmV4cGlyZSkpKQorCQkJewkJLyogY2hlY2sgaWYgbmV3IHBhZ2UgYXJyaXZlZCAqLworCQkJCWlmIChpMmNfc2VuZGRhdGEodCwgOCwgMCwgMCwgMCwgLTEpIHx8CisJCQkJCWkyY19nZXRkYXRhKHQsIFZUWF9QQUdFU0laRSwgdC0+dmRhdVtyZXEtPnBnYnVmXS5wZ2J1ZikpCiAJCQkJCXJldHVybiAtRUlPOwotCQkJCWpkZWxheShQQUdFX1dBSVQpOwotCQkJCWlmIChpMmNfZ2V0ZGF0YSh0LCAxMCwgaW5mb2JpdHMpKQotCQkJCQlyZXR1cm4gLUVJTzsKLQotCQkJCWlmICghKGluZm9iaXRzWzhdICYgMHgxMCkgJiYgIShpbmZvYml0c1s3XSAmIDB4ZjApICYmCS8qIGNoZWNrIEZPVU5ELWJpdCAqLwotCQkJCQkobWVtY21wKGluZm9iaXRzLCB0LT52ZGF1W3JlcS0+cGdidWZdLmxhc3RzdGF0LCBzaXplb2YoaW5mb2JpdHMpKSB8fAotCQkJCQl0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0uZXhwaXJlKSkpCi0JCQkJewkJLyogY2hlY2sgaWYgbmV3IHBhZ2UgYXJyaXZlZCAqLwotCQkJCQlpZiAoaTJjX3NlbmRkYXRhKHQsIDgsIDAsIDAsIDAsIC0xKSB8fAotCQkJCQkJaTJjX2dldGRhdGEodCwgVlRYX1BBR0VTSVpFLCB0LT52ZGF1W3JlcS0+cGdidWZdLnBnYnVmKSkKKwkJCQl0LT52ZGF1W3JlcS0+cGdidWZdLmV4cGlyZSA9IGppZmZpZXMgKyBQR0JVRl9FWFBJUkU7CisJCQkJbWVtc2V0KHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYgKyBWVFhfUEFHRVNJWkUsICcgJywgVlRYX1ZJUlRVQUxTSVpFIC0gVlRYX1BBR0VTSVpFKTsKKwkJCQlpZiAodC0+dmlydHVhbF9tb2RlKSB7CisJCQkJCS8qIFBhY2tldCBYLzI0ICovCisJCQkJCWlmIChpMmNfc2VuZGRhdGEodCwgOCwgMCwgMHgyMCwgMCwgLTEpIHx8CisJCQkJCQlpMmNfZ2V0ZGF0YSh0LCA0MCwgdC0+dmRhdVtyZXEtPnBnYnVmXS5wZ2J1ZiArIFZUWF9QQUdFU0laRSArIDIwICogNDApKQogCQkJCQkJcmV0dXJuIC1FSU87Ci0JCQkJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uZXhwaXJlID0gamlmZmllcyArIFBHQlVGX0VYUElSRTsKLQkJCQkJbWVtc2V0KHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYgKyBWVFhfUEFHRVNJWkUsICcgJywgVlRYX1ZJUlRVQUxTSVpFIC0gVlRYX1BBR0VTSVpFKTsKLQkJCQkJaWYgKHQtPnZpcnR1YWxfbW9kZSkKLQkJCQkJewotCQkJCQkJLyogUGFja2V0IFgvMjQgKi8KLQkJCQkJCWlmIChpMmNfc2VuZGRhdGEodCwgOCwgMCwgMHgyMCwgMCwgLTEpIHx8Ci0JCQkJCQkJaTJjX2dldGRhdGEodCwgNDAsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYgKyBWVFhfUEFHRVNJWkUgKyAyMCAqIDQwKSkKLQkJCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQkJCS8qIFBhY2tldCBYLzI3LzAgKi8KLQkJCQkJCWlmIChpMmNfc2VuZGRhdGEodCwgOCwgMCwgMHgyMSwgMCwgLTEpIHx8Ci0JCQkJCQkJaTJjX2dldGRhdGEodCwgNDAsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYgKyBWVFhfUEFHRVNJWkUgKyAxNiAqIDQwKSkKLQkJCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQkJCS8qIFBhY2tldCA4LzMwLzAuLi44LzMwLzE1Ci0JCQkJCQkgKiBGSVhNRTogQUZBSUssIHRoZSA1MjQ5IGRvZXMgaGFtbWluZy1kZWNvZGluZyBmb3Igc29tZSBieXRlcyBpbiBwYWNrZXQgOC8zMCwKLQkJCQkJCSAqICAgICAgICBzbyB3ZSBzaG91bGQgdW5kbyB0aGlzIGhlcmUuCi0JCQkJCQkgKi8KLQkJCQkJCWlmIChpMmNfc2VuZGRhdGEodCwgOCwgMCwgMHgyMiwgMCwgLTEpIHx8Ci0JCQkJCQkJaTJjX2dldGRhdGEodCwgNDAsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYgKyBWVFhfUEFHRVNJWkUgKyAyMyAqIDQwKSkKLQkJCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQkJfQotCQkJCQl0LT52ZGF1W3JlcS0+cGdidWZdLmNscmZvdW5kID0gZmFsc2U7Ci0JCQkJCW1lbWNweSh0LT52ZGF1W3JlcS0+cGdidWZdLmxhc3RzdGF0LCBpbmZvYml0cywgc2l6ZW9mKGluZm9iaXRzKSk7CisJCQkJCS8qIFBhY2tldCBYLzI3LzAgKi8KKwkJCQkJaWYgKGkyY19zZW5kZGF0YSh0LCA4LCAwLCAweDIxLCAwLCAtMSkgfHwKKwkJCQkJCWkyY19nZXRkYXRhKHQsIDQwLCB0LT52ZGF1W3JlcS0+cGdidWZdLnBnYnVmICsgVlRYX1BBR0VTSVpFICsgMTYgKiA0MCkpCisJCQkJCQlyZXR1cm4gLUVJTzsKKwkJCQkJLyogUGFja2V0IDgvMzAvMC4uLjgvMzAvMTUKKwkJCQkJICogRklYTUU6IEFGQUlLLCB0aGUgNTI0OSBkb2VzIGhhbW1pbmctZGVjb2RpbmcgZm9yIHNvbWUgYnl0ZXMgaW4gcGFja2V0IDgvMzAsCisJCQkJCSAqICAgICAgICBzbyB3ZSBzaG91bGQgdW5kbyB0aGlzIGhlcmUuCisJCQkJCSAqLworCQkJCQlpZiAoaTJjX3NlbmRkYXRhKHQsIDgsIDAsIDB4MjIsIDAsIC0xKSB8fAorCQkJCQkJaTJjX2dldGRhdGEodCwgNDAsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYgKyBWVFhfUEFHRVNJWkUgKyAyMyAqIDQwKSkKKwkJCQkJCXJldHVybiAtRUlPOwogCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQltZW1jcHkoaW5mb2JpdHMsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ubGFzdHN0YXQsIHNpemVvZihpbmZvYml0cykpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCXsKKwkJCQl0LT52ZGF1W3JlcS0+cGdidWZdLmNscmZvdW5kID0gZmFsc2U7CisJCQkJbWVtY3B5KHQtPnZkYXVbcmVxLT5wZ2J1Zl0ubGFzdHN0YXQsIGluZm9iaXRzLCBzaXplb2YoaW5mb2JpdHMpKTsKKwkJCX0gZWxzZSB7CiAJCQkJbWVtY3B5KGluZm9iaXRzLCB0LT52ZGF1W3JlcS0+cGdidWZdLmxhc3RzdGF0LCBzaXplb2YoaW5mb2JpdHMpKTsKIAkJCX0KLQotCQkJaW5mby5wYWdlbnVtID0gKChpbmZvYml0c1s4XSA8PCA4KSAmIDB4NzAwKSB8ICgoaW5mb2JpdHNbMV0gPDwgNCkgJiAweGYwKSB8IChpbmZvYml0c1swXSAmIDB4MGYpOwotCQkJaWYgKGluZm8ucGFnZW51bSA8IDB4MTAwKQotCQkJCWluZm8ucGFnZW51bSArPSAweDgwMDsKLQkJCWluZm8uaG91ciA9ICgoaW5mb2JpdHNbNV0gPDwgNCkgJiAweDMwKSB8IChpbmZvYml0c1s0XSAmIDB4MGYpOwotCQkJaW5mby5taW51dGUgPSAoKGluZm9iaXRzWzNdIDw8IDQpICYgMHg3MCkgfCAoaW5mb2JpdHNbMl0gJiAweDBmKTsKLQkJCWluZm8uY2hhcnNldCA9ICgoaW5mb2JpdHNbN10gPj4gMSkgJiA3KTsKLQkJCWluZm8uZGVsZXRlID0gISEoaW5mb2JpdHNbM10gJiA4KTsKLQkJCWluZm8uaGVhZGxpbmUgPSAhIShpbmZvYml0c1s1XSAmIDQpOwotCQkJaW5mby5zdWJ0aXRsZSA9ICEhKGluZm9iaXRzWzVdICYgOCk7Ci0JCQlpbmZvLnN1cHBfaGVhZGVyID0gISEoaW5mb2JpdHNbNl0gJiAxKTsKLQkJCWluZm8udXBkYXRlID0gISEoaW5mb2JpdHNbNl0gJiAyKTsKLQkJCWluZm8uaW50ZXJfc2VxID0gISEoaW5mb2JpdHNbNl0gJiA0KTsKLQkJCWluZm8uZGlzX2Rpc3AgPSAhIShpbmZvYml0c1s2XSAmIDgpOwotCQkJaW5mby5zZXJpYWwgPSAhIShpbmZvYml0c1s3XSAmIDEpOwotCQkJaW5mby5ub3Rmb3VuZCA9ICEhKGluZm9iaXRzWzhdICYgMHgxMCk7Ci0JCQlpbmZvLnBibGYgPSAhIShpbmZvYml0c1s5XSAmIDB4MjApOwotCQkJaW5mby5oYW1taW5nID0gMDsKLQkJCWZvciAoYSA9IDA7IGEgPD0gNzsgYSsrKQotCQkJewotCQkJCWlmIChpbmZvYml0c1thXSAmIDB4ZjApCi0JCQkJewotCQkJCQlpbmZvLmhhbW1pbmcgPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAodC0+dmRhdVtyZXEtPnBnYnVmXS5jbHJmb3VuZCkKLQkJCQlpbmZvLm5vdGZvdW5kID0gMTsKLQkJCWlmKGNvcHlfdG9fdXNlcihyZXEtPmJ1ZmZlciwgJmluZm8sIHNpemVvZih2dHhfcGFnZWluZm9fdCkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKCFpbmZvLmhhbW1pbmcgJiYgIWluZm8ubm90Zm91bmQpCi0JCQl7Ci0JCQkJdC0+aXNfc2VhcmNoaW5nW3JlcS0+cGdidWZdID0gZmFsc2U7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShpbmZvYml0cywgdC0+dmRhdVtyZXEtPnBnYnVmXS5sYXN0c3RhdCwgc2l6ZW9mKGluZm9iaXRzKSk7CiAJCX0KIAotCQljYXNlIFZUWElPQ0dFVFBBR0U6Ci0JCXsKLQkJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKLQkJCWludCBzdGFydCwgZW5kOwotCi0JCQlpZiAocmVxLT5wZ2J1ZiA8IDAgfHwgcmVxLT5wZ2J1ZiA+PSBOVU1fREFVUyB8fCByZXEtPnN0YXJ0IDwgMCB8fAotCQkJCXJlcS0+c3RhcnQgPiByZXEtPmVuZCB8fCByZXEtPmVuZCA+PSAodmlydHVhbF9tb2RlID8gVlRYX1ZJUlRVQUxTSVpFIDogVlRYX1BBR0VTSVpFKSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmKGNvcHlfdG9fdXNlcihyZXEtPmJ1ZmZlciwgJnQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWZbcmVxLT5zdGFydF0sIHJlcS0+ZW5kIC0gcmVxLT5zdGFydCArIDEpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCi0JCQkgLyoKLQkJCSAgKglBbHdheXMgcmVhZCB0aGUgdGltZSBkaXJlY3RseSBmcm9tIFNBQTUyNDkKLQkJCSAgKi8KLQotCQkJaWYgKHJlcS0+c3RhcnQgPD0gMzkgJiYgcmVxLT5lbmQgPj0gMzIpCi0JCQl7Ci0JCQkJaW50IGxlbjsKLQkJCQljaGFyIGJ1ZlsxNl07Ci0JCQkJc3RhcnQgPSBtYXgocmVxLT5zdGFydCwgMzIpOwotCQkJCWVuZCA9IG1pbihyZXEtPmVuZCwgMzkpOwotCQkJCWxlbj1lbmQtc3RhcnQrMTsKLQkJCQlpZiAoaTJjX3NlbmRkYXRhKHQsIDgsIDAsIDAsIHN0YXJ0LCAtMSkgfHwKLQkJCQkJaTJjX2dldGRhdGEodCwgbGVuLCBidWYpKQotCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQlpZihjb3B5X3RvX3VzZXIocmVxLT5idWZmZXIrc3RhcnQtcmVxLT5zdGFydCwgYnVmLCBsZW4pKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaW5mby5wYWdlbnVtID0gKChpbmZvYml0c1s4XSA8PCA4KSAmIDB4NzAwKSB8ICgoaW5mb2JpdHNbMV0gPDwgNCkgJiAweGYwKSB8IChpbmZvYml0c1swXSAmIDB4MGYpOworCQlpZiAoaW5mby5wYWdlbnVtIDwgMHgxMDApCisJCQlpbmZvLnBhZ2VudW0gKz0gMHg4MDA7CisJCWluZm8uaG91ciA9ICgoaW5mb2JpdHNbNV0gPDwgNCkgJiAweDMwKSB8IChpbmZvYml0c1s0XSAmIDB4MGYpOworCQlpbmZvLm1pbnV0ZSA9ICgoaW5mb2JpdHNbM10gPDwgNCkgJiAweDcwKSB8IChpbmZvYml0c1syXSAmIDB4MGYpOworCQlpbmZvLmNoYXJzZXQgPSAoKGluZm9iaXRzWzddID4+IDEpICYgNyk7CisJCWluZm8uZGVsZXRlID0gISEoaW5mb2JpdHNbM10gJiA4KTsKKwkJaW5mby5oZWFkbGluZSA9ICEhKGluZm9iaXRzWzVdICYgNCk7CisJCWluZm8uc3VidGl0bGUgPSAhIShpbmZvYml0c1s1XSAmIDgpOworCQlpbmZvLnN1cHBfaGVhZGVyID0gISEoaW5mb2JpdHNbNl0gJiAxKTsKKwkJaW5mby51cGRhdGUgPSAhIShpbmZvYml0c1s2XSAmIDIpOworCQlpbmZvLmludGVyX3NlcSA9ICEhKGluZm9iaXRzWzZdICYgNCk7CisJCWluZm8uZGlzX2Rpc3AgPSAhIShpbmZvYml0c1s2XSAmIDgpOworCQlpbmZvLnNlcmlhbCA9ICEhKGluZm9iaXRzWzddICYgMSk7CisJCWluZm8ubm90Zm91bmQgPSAhIShpbmZvYml0c1s4XSAmIDB4MTApOworCQlpbmZvLnBibGYgPSAhIShpbmZvYml0c1s5XSAmIDB4MjApOworCQlpbmZvLmhhbW1pbmcgPSAwOworCQlmb3IgKGEgPSAwOyBhIDw9IDc7IGErKykgeworCQkJaWYgKGluZm9iaXRzW2FdICYgMHhmMCkgeworCQkJCWluZm8uaGFtbWluZyA9IDE7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQkvKiBJbnNlcnQgdGhlIGN1cnJlbnQgaGVhZGVyIGlmIERBVSBpcyBzdGlsbCBzZWFyY2hpbmcgZm9yIGEgcGFnZSAqLwotCQkJaWYgKHJlcS0+c3RhcnQgPD0gMzEgJiYgcmVxLT5lbmQgPj0gNyAmJiB0LT5pc19zZWFyY2hpbmdbcmVxLT5wZ2J1Zl0pCi0JCQl7Ci0JCQkJY2hhciBidWZbMzJdOwotCQkJCWludCBsZW47Ci0JCQkJc3RhcnQgPSBtYXgocmVxLT5zdGFydCwgNyk7Ci0JCQkJZW5kID0gbWluKHJlcS0+ZW5kLCAzMSk7Ci0JCQkJbGVuPWVuZC1zdGFydCsxOwotCQkJCWlmIChpMmNfc2VuZGRhdGEodCwgOCwgMCwgMCwgc3RhcnQsIC0xKSB8fAotCQkJCQlpMmNfZ2V0ZGF0YSh0LCBsZW4sIGJ1ZikpCi0JCQkJCXJldHVybiAtRUlPOwotCQkJCWlmKGNvcHlfdG9fdXNlcihyZXEtPmJ1ZmZlcitzdGFydC1yZXEtPnN0YXJ0LCBidWYsIGxlbikpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCQkJcmV0dXJuIDA7CiAJCX0KLQotCQljYXNlIFZUWElPQ1NUT1BEQVU6Ci0JCXsKLQkJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKLQotCQkJaWYgKHJlcS0+cGdidWYgPCAwIHx8IHJlcS0+cGdidWYgPj0gTlVNX0RBVVMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQgPSB0cnVlOworCQlpZiAodC0+dmRhdVtyZXEtPnBnYnVmXS5jbHJmb3VuZCkKKwkJCWluZm8ubm90Zm91bmQgPSAxOworCQlpZiAoY29weV90b191c2VyKHJlcS0+YnVmZmVyLCAmaW5mbywgc2l6ZW9mKHZ0eF9wYWdlaW5mb190KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKCFpbmZvLmhhbW1pbmcgJiYgIWluZm8ubm90Zm91bmQpCiAJCQl0LT5pc19zZWFyY2hpbmdbcmVxLT5wZ2J1Zl0gPSBmYWxzZTsKLQkJCXJldHVybiAwOwotCQl9CisJCXJldHVybiAwOworCX0KIAotCQljYXNlIFZUWElPQ1BVVFBBR0U6Ci0JCWNhc2UgVlRYSU9DU0VURElTUDoKLQkJY2FzZSBWVFhJT0NQVVRTVEFUOgotCQkJcmV0dXJuIDA7CisJY2FzZSBWVFhJT0NHRVRQQUdFOgorCXsKKwkJdnR4X3BhZ2VyZXFfdCAqcmVxID0gYXJnOworCQlpbnQgc3RhcnQsIGVuZDsKIAotCQljYXNlIFZUWElPQ0NMUkNBQ0hFOgotCQl7Ci0JCQlpZiAoaTJjX3NlbmRkYXRhKHQsIDAsIE5VTV9EQVVTLCAwLCA4LCAtMSkgfHwgaTJjX3NlbmRkYXRhKHQsIDExLAotCQkJCScgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLAotCQkJCScgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCAtMSkpCisJCWlmIChyZXEtPnBnYnVmIDwgMCB8fCByZXEtPnBnYnVmID49IE5VTV9EQVVTIHx8IHJlcS0+c3RhcnQgPCAwIHx8CisJCQlyZXEtPnN0YXJ0ID4gcmVxLT5lbmQgfHwgcmVxLT5lbmQgPj0gKHZpcnR1YWxfbW9kZSA/IFZUWF9WSVJUVUFMU0laRSA6IFZUWF9QQUdFU0laRSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGNvcHlfdG9fdXNlcihyZXEtPmJ1ZmZlciwgJnQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWZbcmVxLT5zdGFydF0sIHJlcS0+ZW5kIC0gcmVxLT5zdGFydCArIDEpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJIC8qCisJCSAgKglBbHdheXMgcmVhZCB0aGUgdGltZSBkaXJlY3RseSBmcm9tIFNBQTUyNDkKKwkJICAqLworCisJCWlmIChyZXEtPnN0YXJ0IDw9IDM5ICYmIHJlcS0+ZW5kID49IDMyKSB7CisJCQlpbnQgbGVuOworCQkJY2hhciBidWZbMTZdOworCQkJc3RhcnQgPSBtYXgocmVxLT5zdGFydCwgMzIpOworCQkJZW5kID0gbWluKHJlcS0+ZW5kLCAzOSk7CisJCQlsZW4gPSBlbmQgLSBzdGFydCArIDE7CisJCQlpZiAoaTJjX3NlbmRkYXRhKHQsIDgsIDAsIDAsIHN0YXJ0LCAtMSkgfHwKKwkJCQlpMmNfZ2V0ZGF0YSh0LCBsZW4sIGJ1ZikpCiAJCQkJcmV0dXJuIC1FSU87Ci0JCQlpZiAoaTJjX3NlbmRkYXRhKHQsIDMsIDB4MjAsIC0xKSkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCWpkZWxheSgxMCAqIENMRUFSX0RFTEFZKTsJCQkvKiBJIGhhdmUgbm8gaWRlYSBob3cgbG9uZyB3ZSBoYXZlIHRvIHdhaXQgaGVyZSAqLwotCQkJcmV0dXJuIDA7CisJCQlpZiAoY29weV90b191c2VyKHJlcS0+YnVmZmVyICsgc3RhcnQgLSByZXEtPnN0YXJ0LCBidWYsIGxlbikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KKwkJLyogSW5zZXJ0IHRoZSBjdXJyZW50IGhlYWRlciBpZiBEQVUgaXMgc3RpbGwgc2VhcmNoaW5nIGZvciBhIHBhZ2UgKi8KKwkJaWYgKHJlcS0+c3RhcnQgPD0gMzEgJiYgcmVxLT5lbmQgPj0gNyAmJiB0LT5pc19zZWFyY2hpbmdbcmVxLT5wZ2J1Zl0pIHsKKwkJCWNoYXIgYnVmWzMyXTsKKwkJCWludCBsZW47CiAKLQkJY2FzZSBWVFhJT0NTRVRWSVJUOgotCQl7Ci0JCQkvKiBUaGUgU0FBNTI0OSBoYXMgdmlydHVhbC1yb3cgcmVjZXB0aW9uIHR1cm5lZCBvbiBhbHdheXMgKi8KLQkJCXQtPnZpcnR1YWxfbW9kZSA9IChpbnQpKGxvbmcpYXJnOwotCQkJcmV0dXJuIDA7CisJCQlzdGFydCA9IG1heChyZXEtPnN0YXJ0LCA3KTsKKwkJCWVuZCA9IG1pbihyZXEtPmVuZCwgMzEpOworCQkJbGVuID0gZW5kIC0gc3RhcnQgKyAxOworCQkJaWYgKGkyY19zZW5kZGF0YSh0LCA4LCAwLCAwLCBzdGFydCwgLTEpIHx8CisJCQkJaTJjX2dldGRhdGEodCwgbGVuLCBidWYpKQorCQkJCXJldHVybiAtRUlPOworCQkJaWYgKGNvcHlfdG9fdXNlcihyZXEtPmJ1ZmZlciArIHN0YXJ0IC0gcmVxLT5zdGFydCwgYnVmLCBsZW4pKQorCQkJCXJldHVybiAtRUZBVUxUOwogCQl9CisJCXJldHVybiAwOworCX0KKworCWNhc2UgVlRYSU9DU1RPUERBVToKKwl7CisJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKKworCQlpZiAocmVxLT5wZ2J1ZiA8IDAgfHwgcmVxLT5wZ2J1ZiA+PSBOVU1fREFVUykKKwkJCXJldHVybiAtRUlOVkFMOworCQl0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQgPSB0cnVlOworCQl0LT5pc19zZWFyY2hpbmdbcmVxLT5wZ2J1Zl0gPSBmYWxzZTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWVFhJT0NQVVRQQUdFOgorCWNhc2UgVlRYSU9DU0VURElTUDoKKwljYXNlIFZUWElPQ1BVVFNUQVQ6CisJCXJldHVybiAwOworCisJY2FzZSBWVFhJT0NDTFJDQUNIRToKKwl7CisJCWlmIChpMmNfc2VuZGRhdGEodCwgMCwgTlVNX0RBVVMsIDAsIDgsIC0xKSB8fCBpMmNfc2VuZGRhdGEodCwgMTEsCisJCQknICcsICcgJywgJyAnLCAnICcsICcgJywgJyAnLAorCQkJJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywKKwkJCScgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsCisJCQknICcsICcgJywgJyAnLCAnICcsICcgJywgJyAnLAorCQkJLTEpKQorCQkJcmV0dXJuIC1FSU87CisJCWlmIChpMmNfc2VuZGRhdGEodCwgMywgMHgyMCwgLTEpKQorCQkJcmV0dXJuIC1FSU87CisJCWpkZWxheSgxMCAqIENMRUFSX0RFTEFZKTsJCQkvKiBJIGhhdmUgbm8gaWRlYSBob3cgbG9uZyB3ZSBoYXZlIHRvIHdhaXQgaGVyZSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZUWElPQ1NFVFZJUlQ6CisJeworCQkvKiBUaGUgU0FBNTI0OSBoYXMgdmlydHVhbC1yb3cgcmVjZXB0aW9uIHR1cm5lZCBvbiBhbHdheXMgKi8KKwkJdC0+dmlydHVhbF9tb2RlID0gKGludCkobG9uZylhcmc7CisJCXJldHVybiAwOworCX0KIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC02MTYsOCArNDgzLDcgQEAKIHN0YXRpYyBpbnQgc2FhNTI0OV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0PXZkLT5wcml2OworCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IGVycjsKIAogCWNtZCA9IHZ0eF9maXhfY29tbWFuZChjbWQpOwpAQCAtNjI5LDMyICs0OTUsMjcgQEAKIAogc3RhdGljIGludCBzYWE1MjQ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdD12ZC0+cHJpdjsKLQlpbnQgZXJyLHBnYnVmOworCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHBnYnVmOwogCi0JZXJyID0gdmlkZW9fZXhjbHVzaXZlX29wZW4oaW5vZGUsZmlsZSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJaWYgKHQtPmNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICh0LT5jbGllbnQ9PU5VTEwpIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBmYWlsOwotCX0KKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmdC0+aW5fdXNlKSkKKwkJcmV0dXJuIC1FQlVTWTsKIAotCWlmIChpMmNfc2VuZGRhdGEodCwgMCwgMCwgLTEpIHx8CQkvKiBTZWxlY3QgUjExICovCi0JCQkJCQkvKiBUdXJuIG9mZiBwYXJpdHkgY2hlY2tzICh3ZSBkbyB0aGlzIG91cnNlbHZlcykgKi8KKwlpZiAoaTJjX3NlbmRkYXRhKHQsIDAsIDAsIC0xKSB8fCAvKiBTZWxlY3QgUjExICovCisJCS8qIFR1cm4gb2ZmIHBhcml0eSBjaGVja3MgKHdlIGRvIHRoaXMgb3Vyc2VsdmVzKSAqLwogCQlpMmNfc2VuZGRhdGEodCwgMSwgZGlzcF9tb2Rlc1t0LT5kaXNwX21vZGVdWzBdLCAwLCAtMSkgfHwKLQkJCQkJCS8qIERpc3BsYXkgVFYtcGljdHVyZSwgbm8gdmlydHVhbCByb3dzICovCi0JCWkyY19zZW5kZGF0YSh0LCA0LCBOVU1fREFVUywgZGlzcF9tb2Rlc1t0LT5kaXNwX21vZGVdWzFdLCBkaXNwX21vZGVzW3QtPmRpc3BfbW9kZV1bMl0sIDcsIC0xKSkgLyogU2V0IGRpc3BsYXkgdG8gcGFnZSA0ICovCi0KKwkJLyogRGlzcGxheSBUVi1waWN0dXJlLCBubyB2aXJ0dWFsIHJvd3MgKi8KKwkJaTJjX3NlbmRkYXRhKHQsIDQsIE5VTV9EQVVTLCBkaXNwX21vZGVzW3QtPmRpc3BfbW9kZV1bMV0sIGRpc3BfbW9kZXNbdC0+ZGlzcF9tb2RlXVsyXSwgNywgLTEpKQorCQkvKiBTZXQgZGlzcGxheSB0byBwYWdlIDQgKi8KIAl7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZmFpbDsKKwkJY2xlYXJfYml0KDAsICZ0LT5pbl91c2UpOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlmb3IgKHBnYnVmID0gMDsgcGdidWYgPCBOVU1fREFVUzsgcGdidWYrKykKLQl7CisJZm9yIChwZ2J1ZiA9IDA7IHBnYnVmIDwgTlVNX0RBVVM7IHBnYnVmKyspIHsKIAkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLnBnYnVmLCAnICcsIHNpemVvZih0LT52ZGF1WzBdLnBnYnVmKSk7CiAJCW1lbXNldCh0LT52ZGF1W3BnYnVmXS5zcmVncywgMCwgc2l6ZW9mKHQtPnZkYXVbMF0uc3JlZ3MpKTsKIAkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLmxhc3RzdGF0LCAwLCBzaXplb2YodC0+dmRhdVswXS5sYXN0c3RhdCkpOwpAQCAtNjY1LDM5ICs1MjYsMjAgQEAKIAl9CiAJdC0+dmlydHVhbF9tb2RlID0gZmFsc2U7CiAJcmV0dXJuIDA7Ci0KLSBmYWlsOgotCXZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKGlub2RlLGZpbGUpOwotCXJldHVybiBlcnI7CiB9CiAKIAogCiBzdGF0aWMgaW50IHNhYTUyNDlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0PXZkLT5wcml2OworCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlpMmNfc2VuZGRhdGEodCwgMSwgMHgyMCwgLTEpOwkJLyogVHVybiBvZmYgQ0NUICovCiAJaTJjX3NlbmRkYXRhKHQsIDUsIDMsIDMsIC0xKTsJCS8qIFR1cm4gb2ZmIFRWLWRpc3BsYXkgKi8KLQl2aWRlb19leGNsdXNpdmVfcmVsZWFzZShpbm9kZSxmaWxlKTsKKwljbGVhcl9iaXQoMCwgJnQtPmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfc2FhXzUyNDkgKHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiU0FBNTI0OSBkcml2ZXIgKCIgSUZfTkFNRSAiIGludGVyZmFjZSkgZm9yIFZpZGVvVGV4dCB2ZXJzaW9uICVkLiVkXG4iLAotCQkJVlRYX1ZFUl9NQUosIFZUWF9WRVJfTUlOKTsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfdmlkZW90ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfc2FhXzUyNDkgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfdmlkZW90ZXh0KTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9zYWFfNTI0OSk7Ci1tb2R1bGVfZXhpdChjbGVhbnVwX3NhYV81MjQ5KTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2FhX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHNhYTUyNDlfb3BlbiwKQEAgLTcxMSw4ICs1NTMsODQgQEAKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc2FhX3RlbXBsYXRlID0KIHsKLQkubmFtZQkJPSBJRl9OQU1FLAorCS5uYW1lCQk9ICJzYWE1MjQ5IiwKIAkuZm9wcyAgICAgICAgICAgPSAmc2FhX2ZvcHMsCisJLnJlbGVhc2UgCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCiB9OwogCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7CisvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyMiA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OworCitJMkNfQ0xJRU5UX0lOU01PRDsKKworc3RhdGljIGludCBzYWE1MjQ5X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJaW50IHBnYnVmOworCWludCBlcnI7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmQ7CisJc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0OworCisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCXY0bF9pbmZvKGNsaWVudCwgIlZpZGVvVGV4dCB2ZXJzaW9uICVkLiVkXG4iLAorCQkJVlRYX1ZFUl9NQUosIFZUWF9WRVJfTUlOKTsKKwl0ID0ga3phbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAodCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltdXRleF9pbml0KCZ0LT5sb2NrKTsKKworCS8qIE5vdyBjcmVhdGUgYSB2aWRlbzRsaW51eCBkZXZpY2UgKi8KKwl2ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2aWRlb19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAodmQgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdmQpOworCW1lbWNweSh2ZCwgJnNhYV90ZW1wbGF0ZSwgc2l6ZW9mKCp2ZCkpOworCisJZm9yIChwZ2J1ZiA9IDA7IHBnYnVmIDwgTlVNX0RBVVM7IHBnYnVmKyspIHsKKwkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLnBnYnVmLCAnICcsIHNpemVvZih0LT52ZGF1WzBdLnBnYnVmKSk7CisJCW1lbXNldCh0LT52ZGF1W3BnYnVmXS5zcmVncywgMCwgc2l6ZW9mKHQtPnZkYXVbMF0uc3JlZ3MpKTsKKwkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLmxhc3RzdGF0LCAwLCBzaXplb2YodC0+dmRhdVswXS5sYXN0c3RhdCkpOworCQl0LT52ZGF1W3BnYnVmXS5leHBpcmUgPSAwOworCQl0LT52ZGF1W3BnYnVmXS5jbHJmb3VuZCA9IHRydWU7CisJCXQtPnZkYXVbcGdidWZdLnN0b3BwZWQgPSB0cnVlOworCQl0LT5pc19zZWFyY2hpbmdbcGdidWZdID0gZmFsc2U7CisJfQorCXZpZGVvX3NldF9kcnZkYXRhKHZkLCB0KTsKKworCS8qIFJlZ2lzdGVyIGl0ICovCisJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZkLCBWRkxfVFlQRV9WVFgsIC0xKTsKKwlpZiAoZXJyIDwgMCkgeworCQlrZnJlZSh0KTsKKwkJa2ZyZWUodmQpOworCQlyZXR1cm4gZXJyOworCX0KKwl0LT5jbGllbnQgPSBjbGllbnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNTI0OV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodmQpOworCWtmcmVlKHZpZGVvX2dldF9kcnZkYXRhKHZkKSk7CisJa2ZyZWUodmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc2FhNTI0OV9pZFtdID0geworCXsgInNhYTUyNDkiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTUyNDlfaWQpOworCitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNTI0OSIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTUyNDksCisJLnByb2JlID0gc2FhNTI0OV9wcm9iZSwKKwkucmVtb3ZlID0gc2FhNTI0OV9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNTI0OV9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCmluZGV4IDRhYTgyYjMuLmFkZjJiYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCkBAIC0zMSwzNiArMzEsMjQgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMTAgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlBhdWxpbmUgTWlkZGVsaW5rIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLQotI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKLQotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0KIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBkcHJpbnRrKG51bSwgZm9ybWF0LCBhcmdzLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZyA+PSBudW0pIFwKLQkJCXByaW50ayhmb3JtYXQsICMjYXJncyk7IFwKLQl9IHdoaWxlICgwKQotCiAjZGVmaW5lIFNBQTcxMTBfTUFYX0lOUFVUCTkJLyogNiBDVkJTLCAzIFNWSFMgKi8KICNkZWZpbmUgU0FBNzExMF9NQVhfT1VUUFVUCTAJLyogaXRzIGEgZGVjb2RlciBvbmx5ICovCiAKLSNkZWZpbmUJSTJDX1NBQTcxMTAJCTB4OUMJLyogb3IgMHg5RSAqLwotCiAjZGVmaW5lIFNBQTcxMTBfTlJfUkVHCQkweDM1CiAKIHN0cnVjdCBzYWE3MTEwIHsKQEAgLTgxLDEwICs2OSw3IEBACiAvKiBJMkMgc3VwcG9ydCBmdW5jdGlvbnMJCQkJCQkgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludAotc2FhNzExMF93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQorc3RhdGljIGludCBzYWE3MTEwX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtOTIsMTAgKzc3LDcgQEAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW50Ci1zYWE3MTEwX3dyaXRlX2Jsb2NrIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGNvbnN0IHU4ICAgICAgICAgICpkYXRhLAotCQkgICAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IHNhYTcxMTBfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZyA9ICpkYXRhOwkJLyogZmlyc3QgcmVnaXN0ZXIgdG8gd3JpdGUgdG8gKi8KQEAgLTExNSw4ICs5Nyw4IEBACiAJCW1lbWNweShkZWNvZGVyLT5yZWcgKyByZWcsIGRhdGEgKyAxLCBsZW4gLSAxKTsKIAl9IGVsc2UgewogCQlmb3IgKCsrZGF0YSwgLS1sZW47IGxlbjsgbGVuLS0pIHsKLQkJCWlmICgocmV0ID0gc2FhNzExMF93cml0ZShjbGllbnQsIHJlZysrLAotCQkJCQkJICpkYXRhKyspKSA8IDApCisJCQlyZXQgPSBzYWE3MTEwX3dyaXRlKGNsaWVudCwgcmVnKyssICpkYXRhKyspOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xMjQsOCArMTA2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludAotc2FhNzExMF9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGlubGluZSBpbnQgc2FhNzExMF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KTsKIH0KQEAgLTEzOCw5ICsxMTksNyBAQAogI2RlZmluZSBGUkVTUF8wNkhfU1ZJREVPIDB4ODMJLy8weEMwCiAKIAotc3RhdGljIGludAotc2FhNzExMF9zZWxtdXggKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCWludCAgICAgICAgICAgICAgICBjaGFuKQorc3RhdGljIGludCBzYWE3MTEwX3NlbG11eChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgY2hhbikKIHsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb2Rlc1s5XVs4XSA9IHsKIAkJLyogbW9kZSAwICovCkBAIC0xOTcsOCArMTc2LDcgQEAKIAkvKiAweDMwICovIDB4NDQsIDB4NzEsIDB4MDIsIDB4OEMsIDB4MDIKIH07CiAKLXN0YXRpYyBpbnQKLWRldGVybWluZV9ub3JtIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBkZXRlcm1pbmVfbm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCURFRklORV9XQUlUKHdhaXQpOwogCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CkBAIC0yMTIsMjkgKzE5MCwyMyBAQAogCWZpbmlzaF93YWl0KCZkZWNvZGVyLT53cSwgJndhaXQpOwogCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOwogCWlmIChzdGF0dXMgJiAweDQwKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3RhdHVzPTB4JTAyeCAobm8gc2lnbmFsKVxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKG5vIHNpZ25hbClcbiIsIHN0YXR1cyk7CiAJCXJldHVybiBkZWNvZGVyLT5ub3JtOwkvLyBubyBjaGFuZ2UKIAl9CiAJaWYgKChzdGF0dXMgJiAzKSA9PSAwKSB7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDA2LCAweDgzKTsKIAkJaWYgKHN0YXR1cyAmIDB4MjApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0lORk8KLQkJCQkiJXM6IHN0YXR1cz0weCUwMnggKE5UU0Mvbm8gY29sb3IpXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIHN0YXR1cyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChOVFNDL25vIGNvbG9yKVxuIiwgc3RhdHVzKTsKIAkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsMHgyRSwweDgxKTsKIAkJCXJldHVybiBWSURFT19NT0RFX05UU0M7CiAJCX0KLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzdGF0dXM9MHglMDJ4IChQQUwvbm8gY29sb3IpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgc3RhdHVzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoUEFML25vIGNvbG9yKVxuIiwgc3RhdHVzKTsKIAkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwweDJFLDB4OUEpOwogCQlyZXR1cm4gVklERU9fTU9ERV9QQUw7CiAJfQogCS8vc2FhNzExMF93cml0ZShjbGllbnQsMHgwNiwweDAzKTsKIAlpZiAoc3RhdHVzICYgMHgyMCkgewkvKiA2MEh6ICovCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3RhdHVzPTB4JTAyeCAoTlRTQylcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChOVFNDKVxuIiwgc3RhdHVzKTsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODYpOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHg1MCk7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDJDKTsKQEAgLTI1NCwxMyArMjI2LDExIEBACiAKIAlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoY2xpZW50KTsKIAlpZiAoKHN0YXR1cyAmIDB4MDMpID09IDB4MDEpIHsKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzdGF0dXM9MHglMDJ4IChTRUNBTSlcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChTRUNBTSlcbiIsIHN0YXR1cyk7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg3KTsKIAkJcmV0dXJuIFZJREVPX01PREVfU0VDQU07CiAJfQotCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3RhdHVzPTB4JTAyeCAoUEFMKVxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJc3RhdHVzKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChQQUwpXG4iLCBzdGF0dXMpOwogCXJldHVybiBWSURFT19NT0RFX1BBTDsKIH0KIApAQCAtMjg2LDggKzI1Niw4IEBACiAJCSAgICBWSURFT19ERUNPREVSX1NFQ0FNIHwgVklERU9fREVDT0RFUl9BVVRPOwogCQlkYy0+aW5wdXRzID0gU0FBNzExMF9NQVhfSU5QVVQ7CiAJCWRjLT5vdXRwdXRzID0gU0FBNzExMF9NQVhfT1VUUFVUOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6CiAJewpAQCAtMjk1LDggKzI2NSw4IEBACiAJCWludCByZXMgPSAwOwogCiAJCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOwotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN0YXR1cz0weCUwMnggbm9ybT0lZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHN0YXR1cywgZGVjb2Rlci0+bm9ybSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggbm9ybT0lZFxuIiwKKwkJCSAgICAgICBzdGF0dXMsIGRlY29kZXItPm5vcm0pOwogCQlpZiAoIShzdGF0dXMgJiAweDQwKSkKIAkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwogCQlpZiAoc3RhdHVzICYgMHgwMykKQEAgLTMxNCw4ICsyODQsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJKihpbnQgKikgYXJnID0gcmVzOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9OT1JNOgogCQl2ID0gKihpbnQgKikgYXJnOwpAQCAtMzI4LDM0ICsyOTgsMjQgQEAKIAkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHg1MCk7CiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4MkMpOwogCQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsIDB4MkUsIDB4ODEpOwotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9JTkZPICIlczogc3dpdGNoZWQgdG8gTlRTQ1xuIiwKLQkJCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gTlRTQ1xuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFZJREVPX01PREVfUEFMOgogCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg2KTsKIAkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHgxMCk7CiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4NTkpOwogCQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsIDB4MkUsIDB4OUEpOwotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9JTkZPICIlczogc3dpdGNoZWQgdG8gUEFMXG4iLAotCQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byBQQUxcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgogCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg3KTsKIAkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHgxMCk7CiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4NTkpOwogCQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsIDB4MkUsIDB4OUEpOwotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9JTkZPCi0JCQkJCSIlczogc3dpdGNoZWQgdG8gU0VDQU1cbiIsCi0JCQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIFNFQ0FNXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9JTkZPCi0JCQkJCSIlczogVFYgc3RhbmRhcmQgZGV0ZWN0aW9uLi4uXG4iLAotCQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byBBVVRPXG4iKTsKIAkJCQlkZWNvZGVyLT5ub3JtID0gZGV0ZXJtaW5lX25vcm0oY2xpZW50KTsKIAkJCQkqKGludCAqKSBhcmcgPSBkZWNvZGVyLT5ub3JtOwogCQkJCWJyZWFrOwpAQCAtMzY4LDE1ICszMjgsMTIgQEAKIAljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgogCQl2ID0gKihpbnQgKikgYXJnOwogCQlpZiAodiA8IDAgfHwgdiA+IFNBQTcxMTBfTUFYX0lOUFVUKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9JTkZPICIlczogaW5wdXQ9JWQgbm90IGF2YWlsYWJsZVxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCB2KTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlucHV0PSVkIG5vdCBhdmFpbGFibGVcbiIsIHYpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKGRlY29kZXItPmlucHV0ICE9IHYpIHsKIAkJCXNhYTcxMTBfc2VsbXV4KGNsaWVudCwgdik7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN3aXRjaGVkIHRvIGlucHV0PSVkXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIHYpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gaW5wdXQ9JWRcbiIsIHYpOwogCQl9CiAJCWJyZWFrOwogCkBAIC0zOTIsOCArMzQ5LDcgQEAKIAkJaWYgKGRlY29kZXItPmVuYWJsZSAhPSB2KSB7CiAJCQlkZWNvZGVyLT5lbmFibGUgPSB2OwogCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEUsIHYgPyAweDE4IDogMHg4MCk7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IFlVViAlc1xuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCQl2ID8gIm9uIiA6ICJvZmYiKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIllVViAlc1xuIiwgdiA/ICJvbiIgOiAib2ZmIik7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTQyMywyMyArMzc5LDIzIEBACiAJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwNywKIAkJCQkgICAgICAoZGVjb2Rlci0+aHVlID4+IDgpIC0gMTI4KTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0RVTVA6CisJCWlmICghZGVidWcpCisJCQlicmVhazsKIAkJZm9yICh2ID0gMDsgdiA8IFNBQTcxMTBfTlJfUkVHOyB2ICs9IDE2KSB7CiAJCQlpbnQgajsKLQkJCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6ICUwMng6IiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCQl2KTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiUwMng6Iiwgdik7CiAJCQlmb3IgKGogPSAwOyBqIDwgMTYgJiYgdiArIGogPCBTQUE3MTEwX05SX1JFRzsgaisrKQotCQkJCWRwcmludGsoMSwgIiAlMDJ4IiwgZGVjb2Rlci0+cmVnW3YgKyBqXSk7Ci0JCQlkcHJpbnRrKDEsICJcbiIpOworCQkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwgZGVjb2Rlci0+cmVnW3YgKyBqXSk7CisJCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZHByaW50aygxLCBLRVJOX0lORk8gInVua25vd24gc2FhNzExMF9jb21tYW5kPz8oJWQpXG4iLAotCQkJY21kKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAidW5rbm93biBjb21tYW5kICUwOHhcbiIsIGNtZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ1MSw1NSArNDA3LDI4IEBACiAgKiBHZW5lcmljIGkyYyBwcm9iZQogICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwogICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCUkyQ19TQUE3MTEwID4+IDEsCi0JKEkyQ19TQUE3MTEwID4+IDEpICsgMSwKLQlJMkNfQ0xJRU5UX0VORAotfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg5YyA+PiAxLCAweDllID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMTA7Ci0KLXN0YXRpYyBpbnQKLXNhYTcxMTBfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQorc3RhdGljIGludCBzYWE3MTEwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlcjsKIAlpbnQgcnY7CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzExMC5jOiBkZXRlY3Rpbmcgc2FhNzExMCBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAotCQlhZGRyZXNzIDw8IDEpOwotCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkKLQkgICAgKGFkYXB0ZXIsCi0JICAgICBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUgfCBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKKwkJSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIHwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTEwOwotCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInNhYTcxMTAiLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExMCksIEdGUF9LRVJORUwpOwotCWlmICghZGVjb2RlcikgewotCQlrZnJlZShjbGllbnQpOworCWlmICghZGVjb2RlcikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKIAlkZWNvZGVyLT5pbnB1dCA9IDA7CiAJZGVjb2Rlci0+ZW5hYmxlID0gMTsKQEAgLTUxMCwxOCArNDM5LDEwIEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGVjb2Rlci0+d3EpOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOwogCi0JcnYgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChydikgewotCQlrZnJlZShjbGllbnQpOwotCQlrZnJlZShkZWNvZGVyKTsKLQkJcmV0dXJuIHJ2OwotCX0KLQogCXJ2ID0gc2FhNzExMF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7Ci0JaWYgKHJ2IDwgMCkKLQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXNfYXR0YWNoOiBpbml0IHN0YXR1cyAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHJ2KTsKLQllbHNlIHsKKwlpZiAocnYgPCAwKSB7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgc3RhdHVzICVkXG4iLCBydik7CisJfSBlbHNlIHsKIAkJaW50IHZlciwgc3RhdHVzOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyMSwgMHgxMCk7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBlLCAweDE4KTsKQEAgLTUzMCwxMCArNDUxLDggQEAKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4MDYpOwogCQkvL21kZWxheSgxNTApOwogCQlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoY2xpZW50KTsKLQkJZHByaW50aygxLAotCQkJS0VSTl9JTkZPCi0JCQkiJXNfYXR0YWNoOiBTQUE3MTEwQSB2ZXJzaW9uICV4IGF0IDB4JTAyeCwgc3RhdHVzPTB4JTAyeFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHZlciwgY2xpZW50LT5hZGRyIDw8IDEsIHN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInZlcnNpb24gJXgsIHN0YXR1cz0weCUwMnhcbiIsCisJCQkgICAgICAgdmVyLCBzdGF0dXMpOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nik7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDEwKTsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4NTkpOwpAQCAtNTQ3LDU4ICs0NjYsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotc2FhNzExMF9hdHRhY2hfYWRhcHRlciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBzYWE3MTEwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTEwLmM6IHN0YXJ0aW5nIHByb2JlIGZvciBhZGFwdGVyICVzICgweCV4KVxuIiwKLQkJSTJDX05BTUUoYWRhcHRlciksIGFkYXB0ZXItPmlkKTsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZzYWE3MTEwX2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1zYWE3MTEwX2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0Ja2ZyZWUoZGVjb2Rlcik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQorCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzExMCA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJzYWE3MTEwIiwKLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTAsCi0KLQkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE3MTEwX2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gc2FhNzExMF9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gc2FhNzExMF9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTcxMTBfaWRbXSA9IHsKKwl7ICJzYWE3MTEwIiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3MTEwX2lkKTsKIAotc3RhdGljIGludCBfX2luaXQKLXNhYTcxMTBfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzExMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotc2FhNzExMF9leGl0ICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMTApOwotfQotCi1tb2R1bGVfaW5pdChzYWE3MTEwX2luaXQpOwotbW9kdWxlX2V4aXQoc2FhNzExMF9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJzYWE3MTEwIiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNzExMCwKKwkuY29tbWFuZCA9IHNhYTcxMTBfY29tbWFuZCwKKwkucHJvYmUgPSBzYWE3MTEwX3Byb2JlLAorCS5yZW1vdmUgPSBzYWE3MTEwX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBzYWE3MTEwX2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMKaW5kZXggOTZjM2Q0My4uYTQ3MzhhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMKQEAgLTI4LDQzICsyOCwyNCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMTEgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmUgUGVya3MiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCi0jZGVmaW5lIEkyQ19OQU1FKHMpIChzKS0+bmFtZQotCi0KIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBkcHJpbnRrKG51bSwgZm9ybWF0LCBhcmdzLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZyA+PSBudW0pIFwKLQkJCXByaW50ayhmb3JtYXQsICMjYXJncyk7IFwKLQl9IHdoaWxlICgwKQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjZGVmaW5lIFNBQTcxMTFfTlJfUkVHCQkweDE4CkBAIC03NywxNCArNTgsOSBAQAogCWludCBlbmFibGU7CiB9OwogCi0jZGVmaW5lICAgSTJDX1NBQTcxMTEgICAgICAgIDB4NDgKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxMTFfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTFfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC05Miw4ICs2OCw3IEBACiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1zYWE3MTExX3dyaXRlX2lmX2NoYW5nZWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzYWE3MTExX3dyaXRlX2lmX2NoYW5nZWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC0xMDMsMTAgKzc4LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTFfd3JpdGVfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSAgICAgY29uc3QgdTggICAgICAgICAgKmRhdGEsCi0JCSAgICAgdW5zaWduZWQgaW50ICAgICAgIGxlbikKK3N0YXRpYyBpbnQgc2FhNzExMV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnOwpAQCAtMTI3LDE4ICs5OSwxNyBAQAogCQkJCSAgICBkZWNvZGVyLT5yZWdbcmVnKytdID0gZGF0YVsxXTsKIAkJCQlsZW4gLT0gMjsKIAkJCQlkYXRhICs9IDI7Ci0JCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJgotCQkJCSBibG9ja19sZW4gPCAzMik7Ci0JCQlpZiAoKHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsCi0JCQkJCQkgICBibG9ja19sZW4pKSA8IDApCisJCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJiBibG9ja19sZW4gPCAzMik7CisJCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLCBibG9ja19sZW4pOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCiAJCXdoaWxlIChsZW4gPj0gMikgewogCQkJcmVnID0gKmRhdGErKzsKLQkJCWlmICgocmV0ID0gc2FhNzExMV93cml0ZShjbGllbnQsIHJlZywKLQkJCQkJCSAqZGF0YSsrKSkgPCAwKQorCQkJcmV0ID0gc2FhNzExMV93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJCWxlbiAtPSAyOwogCQl9CkBAIC0xNDcsMTYgKzExOCwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTFfaW5pdF9kZWNvZGVyIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgIHN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgKmluaXQpCitzdGF0aWMgaW50IHNhYTcxMTFfaW5pdF9kZWNvZGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgKmluaXQpCiB7CiAJcmV0dXJuIHNhYTcxMTFfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0LT5kYXRhLCBpbml0LT5sZW4pOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotc2FhNzExMV9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcpCitzdGF0aWMgaW5saW5lIGludCBzYWE3MTExX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQogewogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQpAQCAtMjAzLDI4ICsxNzEsMjMgQEAKIAkweDE3LCAweDAwLAkJLyogMTcgLSBWQkkgKi8KIH07CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTFfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCBzYWE3MTExX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHNhYTcxMTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXN3aXRjaCAoY21kKSB7Ci0KIAljYXNlIDA6CiAJCWJyZWFrOwogCWNhc2UgREVDT0RFUl9JTklUOgogCXsKIAkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCAqaW5pdCA9IGFyZzsKKwkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB2ZGk7CisKIAkJaWYgKE5VTEwgIT0gaW5pdCkKIAkJCXJldHVybiBzYWE3MTExX2luaXRfZGVjb2RlcihjbGllbnQsIGluaXQpOwotCQllbHNlIHsKLQkJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgdmRpOwotCQkJdmRpLmRhdGEgPSBzYWE3MTExX2kyY19pbml0OwotCQkJdmRpLmxlbiA9IHNpemVvZihzYWE3MTExX2kyY19pbml0KTsKLQkJCXJldHVybiBzYWE3MTExX2luaXRfZGVjb2RlcihjbGllbnQsICZ2ZGkpOwotCQl9CisJCXZkaS5kYXRhID0gc2FhNzExMV9pMmNfaW5pdDsKKwkJdmRpLmxlbiA9IHNpemVvZihzYWE3MTExX2kyY19pbml0KTsKKwkJcmV0dXJuIHNhYTcxMTFfaW5pdF9kZWNvZGVyKGNsaWVudCwgJnZkaSk7CiAJfQogCiAJY2FzZSBERUNPREVSX0RVTVA6CkBAIC0yMzQsMTUgKzE5NywxNSBAQAogCQlmb3IgKGkgPSAwOyBpIDwgU0FBNzExMV9OUl9SRUc7IGkgKz0gMTYpIHsKIAkJCWludCBqOwogCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICUwM3giLCBJMkNfTkFNRShjbGllbnQpLCBpKTsKKwkJCXY0bF9pbmZvKGNsaWVudCwgIiUwM3giLCBpKTsKIAkJCWZvciAoaiA9IDA7IGogPCAxNiAmJiBpICsgaiA8IFNBQTcxMTFfTlJfUkVHOyArK2opIHsKLQkJCQlwcmludGsoIiAlMDJ4IiwKKwkJCQlwcmludGsoS0VSTl9DT05UICIgJTAyeCIsCiAJCQkJICAgICAgIHNhYTcxMTFfcmVhZChjbGllbnQsIGkgKyBqKSk7CiAJCQl9Ci0JCQlwcmludGsoIlxuIik7CisJCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKIAl7CkBAIC0yNTUsOCArMjE4LDggQEAKIAkJCSAgICAgVklERU9fREVDT0RFUl9DQ0lSOwogCQljYXAtPmlucHV0cyA9IDg7CiAJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKIAl7CkBAIC0yNjUsOCArMjI4LDcgQEAKIAkJaW50IHJlczsKIAogCQlzdGF0dXMgPSBzYWE3MTExX3JlYWQoY2xpZW50LCAweDFmKTsKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlcyBzdGF0dXM6IDB4JTAyeFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCXN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1czogMHglMDJ4XG4iLCBzdGF0dXMpOwogCQlyZXMgPSAwOwogCQlpZiAoKHN0YXR1cyAmICgxIDw8IDYpKSA9PSAwKSB7CiAJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKQEAgLTI5NCw4ICsyNTYsOCBAQAogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0NPTE9SOwogCQl9CiAJCSppYXJnID0gcmVzOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9HUElPOgogCXsKQEAgLTM2Miw4ICszMjQsOCBAQAogCiAJCX0KIAkJZGVjb2Rlci0+bm9ybSA9ICppYXJnOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKIAl7CkBAIC0zODcsOCArMzQ5LDggQEAKIAkJCQkJCQkgICAgIDMpID8gMHg4MCA6CiAJCQkJCQkJICAgIDApKTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6CiAJewpAQCAtMzk4LDggKzM2MCw4IEBACiAJCWlmICgqaWFyZyAhPSAwKSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewpAQCAtNDM5LDggKzQwMSw4IEBACiAJCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgxMV0gJiAweGYzKSk7CiAJCQl9CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKIAl7CkBAIC00NTQsOCArNDE2LDggQEAKIAkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MGMsIHBpYy0+Y29sb3VyID4+IDkpOwogCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCiAJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBkLCAocGljLT5odWUgLSAzMjc2OCkgPj4gOCk7Ci0JfQogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ2Niw0OCArNDI4LDIzIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfU0FBNzExMSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMTE7Ci0KLXN0YXRpYyBpbnQKLXNhYTcxMTFfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQorc3RhdGljIGludCBzYWE3MTExX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlcjsKIAlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IHZkaTsKIAotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTExLmM6IGRldGVjdGluZyBzYWE3MTExIGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCi0JCWFkZHJlc3MgPDwgMSk7Ci0KIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTExOwotCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInNhYTcxMTEiLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExMSksIEdGUF9LRVJORUwpOwogCWlmIChkZWNvZGVyID09IE5VTEwpIHsKQEAgLTUxOSw4MiArNDU2LDM3IEBACiAJZGVjb2Rlci0+ZW5hYmxlID0gMTsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKIAotCWkgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChpKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGRlY29kZXIpOwotCQlyZXR1cm4gaTsKLQl9Ci0KIAl2ZGkuZGF0YSA9IHNhYTcxMTFfaTJjX2luaXQ7CiAJdmRpLmxlbiA9IHNpemVvZihzYWE3MTExX2kyY19pbml0KTsKIAlpID0gc2FhNzExMV9pbml0X2RlY29kZXIoY2xpZW50LCAmdmRpKTsKIAlpZiAoaSA8IDApIHsKLQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXNfYXR0YWNoIGVycm9yOiBpbml0IHN0YXR1cyAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGkpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IHN0YXR1cyAlZFxuIiwgaSk7CiAJfSBlbHNlIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9JTkZPCi0JCQkiJXNfYXR0YWNoOiBjaGlwIHZlcnNpb24gJXggYXQgYWRkcmVzcyAweCV4XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgc2FhNzExMV9yZWFkKGNsaWVudCwgMHgwMCkgPj4gNCwKLQkJCWNsaWVudC0+YWRkciA8PCAxKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicmV2aXNpb24gJXhcbiIsCisJCQlzYWE3MTExX3JlYWQoY2xpZW50LCAweDAwKSA+PiA0KTsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotc2FhNzExMV9hdHRhY2hfYWRhcHRlciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBzYWE3MTExX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTExLmM6IHN0YXJ0aW5nIHByb2JlIGZvciBhZGFwdGVyICVzICgweCV4KVxuIiwKLQkJSTJDX05BTUUoYWRhcHRlciksIGFkYXB0ZXItPmlkKTsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZzYWE3MTExX2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1zYWE3MTExX2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHNhYTcxMTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0Ja2ZyZWUoZGVjb2Rlcik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQorCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzExMSA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJzYWE3MTExIiwKLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTFBLAotCi0JLmF0dGFjaF9hZGFwdGVyID0gc2FhNzExMV9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IHNhYTcxMTFfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IHNhYTcxMTFfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTExX2lkW10gPSB7CisJeyAic2FhNzExMV9vbGQiLCAwIH0sCS8qICJzYWE3MTExIiBtYXBzIHRvIHRoZSBzYWE3MTE1IGRyaXZlciAqLworCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3MTExX2lkKTsKIAotc3RhdGljIGludCBfX2luaXQKLXNhYTcxMTFfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzExMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotc2FhNzExMV9leGl0ICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMTEpOwotfQotCi1tb2R1bGVfaW5pdChzYWE3MTExX2luaXQpOwotbW9kdWxlX2V4aXQoc2FhNzExMV9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJzYWE3MTExIiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNzExMUEsCisJLmNvbW1hbmQgPSBzYWE3MTExX2NvbW1hbmQsCisJLnByb2JlID0gc2FhNzExMV9wcm9iZSwKKwkucmVtb3ZlID0gc2FhNzExMV9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNzExMV9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNC5jCmluZGV4IGU3OTA3NTUuLjdjYTcwOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNC5jCkBAIC0yOSw0MyArMjksMjQgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE3MTE0SCB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWF4aW0gWWV2dHl1c2hraW4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCi0jZGVmaW5lIEkyQ19OQU1FKHgpICh4KS0+bmFtZQotCi0KIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBkcHJpbnRrKG51bSwgZm9ybWF0LCBhcmdzLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZyA+PSBudW0pIFwKLQkJCXByaW50ayhmb3JtYXQsICMjYXJncyk7IFwKLQl9IHdoaWxlICgwKQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3Qgc2FhNzExNCB7CkBAIC04MSw5ICs2Miw2IEBACiAJaW50IHBsYXliYWNrOwogfTsKIAotI2RlZmluZSAgIEkyQ19TQUE3MTE0ICAgICAgICAweDQyCi0jZGVmaW5lICAgSTJDX1NBQTcxMTRBICAgICAgIDB4NDAKLQogI2RlZmluZSAgIEkyQ19ERUxBWSAgIDEwCiAKIApAQCAtMTI5LDE4ICsxMDcsMTIgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxMTRfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTRfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW50Ci1zYWE3MTE0X3dyaXRlX2Jsb2NrIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGNvbnN0IHU4ICAgICAgICAgICpkYXRhLAotCQkgICAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IHNhYTcxMTRfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKQEAgLTE2MCwxOCArMTMyLDE3IEBACiAJCQkJcmVnKys7CiAJCQkJbGVuIC09IDI7CiAJCQkJZGF0YSArPSAyOwotCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYKLQkJCQkgYmxvY2tfbGVuIDwgMzIpOwotCQkJaWYgKChyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLAotCQkJCQkJICAgYmxvY2tfbGVuKSkgPCAwKQorCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYgYmxvY2tfbGVuIDwgMzIpOworCQkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwgYmxvY2tfbGVuKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlpZiAoKHJldCA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCByZWcsCi0JCQkJCQkgKmRhdGErKykpIDwgMCkKKwkJCXJldCA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKIAkJfQpAQCAtMTgwLDkgKzE1MSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxMTRfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnKQorc3RhdGljIGlubGluZSBpbnQgc2FhNzExNF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KQEAgLTQ1MiwxNSArNDIxLDExIEBACiAJMHhlZiwgMHgwMAogfTsKIAotc3RhdGljIGludAotc2FhNzExNF9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgdW5zaWduZWQgaW50ICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAgICAgICphcmcpCitzdGF0aWMgaW50IHNhYTcxMTRfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgc2FhNzExNCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJc3dpdGNoIChjbWQpIHsKLQogCWNhc2UgMDoKIAkJLy9kcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHdyaXRpbmcgaW5pdFxuIiwgSTJDX05BTUUoY2xpZW50KSk7CiAJCS8vc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGluaXQsIHNpemVvZihpbml0KSk7CkBAIC00NzAsMjcgKzQzNSwyOCBAQAogCXsKIAkJaW50IGk7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBkZWNvZGVyIGR1bXBcbiIsIEkyQ19OQU1FKGNsaWVudCkpOworCQlpZiAoIWRlYnVnKQorCQkJYnJlYWs7CisJCXY0bF9pbmZvKGNsaWVudCwgImRlY29kZXIgZHVtcFxuIik7CiAKIAkJZm9yIChpID0gMDsgaSA8IDMyOyBpICs9IDE2KSB7CiAJCQlpbnQgajsKIAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlMDN4IiwgSTJDX05BTUUoY2xpZW50KSwgaSk7CisJCQl2NGxfaW5mbyhjbGllbnQsICIlMDN4IiwgaSk7CiAJCQlmb3IgKGogPSAwOyBqIDwgMTY7ICsraikgewotCQkJCXByaW50aygiICUwMngiLAorCQkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwKIAkJCQkgICAgICAgc2FhNzExNF9yZWFkKGNsaWVudCwgaSArIGopKTsKIAkJCX0KLQkJCXByaW50aygiXG4iKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgogCXsKIAkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IGRlY29kZXIgZ2V0IGNhcGFiaWxpdGllc1xuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJnZXQgY2FwYWJpbGl0aWVzXG4iKTsKIAogCQljYXAtPmZsYWdzID0gVklERU9fREVDT0RFUl9QQUwgfAogCQkJICAgICBWSURFT19ERUNPREVSX05UU0MgfApAQCAtNDk4LDggKzQ2NCw4IEBACiAJCQkgICAgIFZJREVPX0RFQ09ERVJfQ0NJUjsKIAkJY2FwLT5pbnB1dHMgPSA4OwogCQljYXAtPm91dHB1dHMgPSAxOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6CiAJewpAQCAtNTA5LDggKzQ3NSw3IEBACiAKIAkJc3RhdHVzID0gc2FhNzExNF9yZWFkKGNsaWVudCwgMHgxZik7CiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlcyBzdGF0dXM6IDB4JTAyeFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCXN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1czogMHglMDJ4XG4iLCBzdGF0dXMpOwogCQlyZXMgPSAwOwogCQlpZiAoKHN0YXR1cyAmICgxIDw8IDYpKSA9PSAwKSB7CiAJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKQEAgLTUzOCw4ICs1MDMsOCBAQAogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0NPTE9SOwogCQl9CiAJCSppYXJnID0gcmVzOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9OT1JNOgogCXsKQEAgLTU0NywxMiArNTEyLDExIEBACiAKIAkJc2hvcnQgaW50IGhvZmYgPSAwLCB2b2ZmID0gMCwgdyA9IDAsIGggPSAwOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IGRlY29kZXIgc2V0IG5vcm0gIiwKLQkJCUkyQ19OQU1FKGNsaWVudCkpOwotCQlzd2l0Y2ggKCppYXJnKSB7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBub3JtXG4iKTsKIAorCQlzd2l0Y2ggKCppYXJnKSB7CiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJZHByaW50aygxLCAiTlRTQ1xuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJOVFNDXG4iKTsKIAkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA2KV0gPQogCQkJICAgIFNBQV83MTE0X05UU0NfSFNZTkNfU1RBUlQ7CiAJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwNyldID0KQEAgLTU3MSw3ICs1MzUsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCWRwcmludGsoMSwgIlBBTFxuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJQQUxcbiIpOwogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDYpXSA9CiAJCQkgICAgU0FBXzcxMTRfUEFMX0hTWU5DX1NUQVJUOwogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDcpXSA9CkBAIC01OTAsOSArNTU0LDggQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsICIgVW5rbm93biB2aWRlbyBtb2RlISEhXG4iKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlVua25vd24gdmlkZW8gbW9kZVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9CiAKIApAQCAtNjQ0LDIyICs2MDcsMjAgQEAKIAkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODAsIDB4MzYpOwkvLyBpLXBvcnQgYW5kIHNjYWxlciBiYWNrIGVuZCBjbG9jayBzZWxlY3Rpb24KIAogCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IGRlY29kZXIgc2V0IGlucHV0ICglZClcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCAqaWFyZyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBpbnB1dCAoJWQpXG4iLCAqaWFyZyk7CiAJCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiA3KSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWlmIChkZWNvZGVyLT5pbnB1dCAhPSAqaWFyZykgewotCQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogbm93IHNldHRpbmcgJXMgaW5wdXRcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vdyBzZXR0aW5nICVzIGlucHV0XG4iLAogCQkJCSppYXJnID49IDYgPyAiUy1WaWRlbyIgOiAiQ29tcG9zaXRlIik7CiAJCQlkZWNvZGVyLT5pbnB1dCA9ICppYXJnOwogCkBAIC02OTAsMzAgKzY1MSwyOSBAQAogCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4MGUsCiAJCQkJICAgICAgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MGUpXSk7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IGRlY29kZXIgc2V0IG91dHB1dFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0XG4iKTsKIAogCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwogCQlpZiAoKmlhcmcgIT0gMCkgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCQlpbnQgZW5hYmxlID0gKCppYXJnICE9IDApOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IGRlY29kZXIgJXMgb3V0cHV0XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlcyBvdXRwdXRcbiIsCisJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CiAKIAkJZGVjb2Rlci0+cGxheWJhY2sgPSAhZW5hYmxlOwogCkBAIC03NTQsMTggKzcxNCwxNiBAQAogCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODAsIDB4MzYpOwogCiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKIAl7CiAJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7CiAKLQkJZHByaW50aygxLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBkZWNvZGVyIHNldCBwaWN0dXJlIGJyaWdodD0lZCBjb250cmFzdD0lZCBzYXR1cmF0aW9uPSVkIGh1ZT0lZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHBpYy0+YnJpZ2h0bmVzcywgcGljLT5jb250cmFzdCwKLQkJCXBpYy0+Y29sb3VyLCBwaWMtPmh1ZSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJkZWNvZGVyIHNldCBwaWN0dXJlIGJyaWdodD0lZCBjb250cmFzdD0lZCBzYXR1cmF0aW9uPSVkIGh1ZT0lZFxuIiwKKwkJCXBpYy0+YnJpZ2h0bmVzcywgcGljLT5jb250cmFzdCwgcGljLT5jb2xvdXIsIHBpYy0+aHVlKTsKIAogCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ICE9IHBpYy0+YnJpZ2h0bmVzcykgewogCQkJLyogV2Ugd2FudCAwIHRvIDI1NSB3ZSBnZXQgMC02NTUzNSAqLwpAQCAtNzg5LDggKzc0Nyw4IEBACiAJCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwZCwKIAkJCQkgICAgICAoZGVjb2Rlci0+aHVlIC0gMzI3NjgpID4+IDgpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgwMSw1OCArNzU5LDMwIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0KLSAgICB7IEkyQ19TQUE3MTE0ID4+IDEsIEkyQ19TQUE3MTE0QSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0MiA+PiAxLCAweDQwID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKK0kyQ19DTElFTlRfSU5TTU9EOwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKLQkubm9ybWFsX2kyYwkJPSBub3JtYWxfaTJjLAotCS5wcm9iZQkJCT0gJmlnbm9yZSwKLQkuaWdub3JlCQkJPSAmaWdub3JlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzExNDsKLQotc3RhdGljIGludAotc2FhNzExNF9kZXRlY3RfY2xpZW50IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGFkZHJlc3MsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGtpbmQpCitzdGF0aWMgaW50IHNhYTcxMTRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgaSwgZXJyWzMwXTsKIAlzaG9ydCBpbnQgaG9mZiA9IFNBQV83MTE0X05UU0NfSE9GRlNFVDsKIAlzaG9ydCBpbnQgdm9mZiA9IFNBQV83MTE0X05UU0NfVk9GRlNFVDsKIAlzaG9ydCBpbnQgdyA9IFNBQV83MTE0X05UU0NfV0lEVEg7CiAJc2hvcnQgaW50IGggPSBTQUFfNzExNF9OVFNDX0hFSUdIVDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBzYWE3MTE0ICpkZWNvZGVyOwogCi0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJInNhYTcxMTQuYzogZGV0ZWN0aW5nIHNhYTcxMTQgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKLQkJYWRkcmVzcyA8PCAxKTsKLQogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAwOworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX3NhYTcxMTQ7Ci0Jc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAic2FhNzExNCIsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTE0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChkZWNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwogCWRlY29kZXItPmlucHV0ID0gLTE7CiAJZGVjb2Rlci0+ZW5hYmxlID0gMTsKQEAgLTkzNyw4ICs4NjcsNyBAQAogCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDBlKV0gfD0gMTsJLy8gY29tYmZpbHRlciBvbgogCiAKLQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzX2F0dGFjaDogc3RhcnRpbmcgZGVjb2RlciBpbml0XG4iLAotCQlJMkNfTkFNRShjbGllbnQpKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGFydGluZyBpbml0XG4iKTsKIAogCWVyclswXSA9CiAJICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHgyMCA8PCAxKSwKQEAgLTk2MiwyOCArODkxLDIzIEBACiAKIAlmb3IgKGkgPSAwOyBpIDw9IDU7IGkrKykgewogCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzX2F0dGFjaDogaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIGksIGVycltpXSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkJImluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKKwkJCQlpLCBlcnJbaV0pOwogCQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCQlrZnJlZShjbGllbnQpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIAogCWZvciAoaSA9IDY7IGkgPCA4OyBpKyspIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzX2F0dGFjaDogcmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJInJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAorCQkJaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCiAJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoaSldKTsKIAl9CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fREVCVUcKLQkJIiVzX2F0dGFjaDogcGVyZm9ybWluZyBkZWNvZGVyIHJlc2V0IHNlcXVlbmNlXG4iLAotCQlJMkNfTkFNRShjbGllbnQpKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCSJwZXJmb3JtaW5nIGRlY29kZXIgcmVzZXQgc2VxdWVuY2VcbiIpOwogCiAJZXJyWzZdID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODAsIDB4MDYpOwkvLyBpLXBvcnQgYW5kIHNjYWxlciBiYWNrZW5kIGNsb2NrIHNlbGVjdGlvbiwgdGFzayBBJkIgb2ZmCiAJZXJyWzddID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZDgpOwkvLyBzdyByZXNldCBzY2FsZXIKQEAgLTk5MSwxOSArOTE1LDE1IEBACiAKIAlmb3IgKGkgPSA2OyBpIDw9IDg7IGkrKykgewogCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzX2F0dGFjaDogaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIGksIGVycltpXSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkJImluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKKwkJCQlpLCBlcnJbaV0pOwogCQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCQlrZnJlZShjbGllbnQpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIAotCWRwcmludGsoMSwgS0VSTl9JTkZPICIlc19hdHRhY2g6IHBlcmZvcm1pbmcgdGhlIHJlc3Qgb2YgaW5pdFxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSk7Ci0KKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJwZXJmb3JtaW5nIHRoZSByZXN0IG9mIGluaXRcbiIpOwogCiAJZXJyWzldID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4MDEsIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDAxKV0pOwogCWVyclsxMF0gPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4MDMgPDwgMSksICgweDFlICsgMSAtIDB4MDMpIDw8IDEpOwkvLyBiaWcgc2VxCkBAIC0xMDM5LDM3ICs5NTksMzIgQEAKIAogCWZvciAoaSA9IDk7IGkgPD0gMTg7IGkrKykgewogCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzX2F0dGFjaDogaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIGksIGVycltpXSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkJImluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKKwkJCQlpLCBlcnJbaV0pOwogCQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCQlrZnJlZShjbGllbnQpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIAogCiAJZm9yIChpID0gNjsgaSA8IDg7IGkrKykgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXNfYXR0YWNoOiByZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkicmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCisJCQlpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKIAkJCWRlY29kZXItPnJlZ1tSRUdfQUREUihpKV0pOwogCX0KIAogCiAJZm9yIChpID0gMHgxMTsgaSA8PSAweDEzOyBpKyspIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzX2F0dGFjaDogcmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJInJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAorCQkJaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCiAJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoaSldKTsKIAl9CiAKIAotCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXNfYXR0YWNoOiBzZXR0aW5nIHZpZGVvIGlucHV0XG4iLAotCQlJMkNfTkFNRShjbGllbnQpKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXR0aW5nIHZpZGVvIGlucHV0XG4iKTsKIAogCWVyclsxOV0gPQogCSAgICBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwMiwgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDIpXSk7CkBAIC0xMDgwLDIwICs5OTUsMTUgQEAKIAogCWZvciAoaSA9IDE5OyBpIDw9IDIxOyBpKyspIHsKIAkJaWYgKGVycltpXSA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlc19hdHRhY2g6IGluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpLCBlcnJbaV0pOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCisJCQkJaSwgZXJyW2ldKTsKIAkJCWtmcmVlKGRlY29kZXIpOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fREVCVUcKLQkJIiVzX2F0dGFjaDogcGVyZm9ybWluZyBkZWNvZGVyIHJlc2V0IHNlcXVlbmNlXG4iLAotCQlJMkNfTkFNRShjbGllbnQpKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJwZXJmb3JtaW5nIGRlY29kZXIgcmVzZXQgc2VxdWVuY2VcbiIpOwogCiAJZXJyWzIyXSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGQ4KTsJLy8gc3cgcmVzZXQgc2NhbGVyCiAJZXJyWzIzXSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGY4KTsJLy8gc3cgcmVzZXQgc2NhbGVyIHJlbGVhc2UKQEAgLTExMDIsMTMgKzEwMTIsMTEgQEAKIAogCWZvciAoaSA9IDIyOyBpIDw9IDI0OyBpKyspIHsKIAkJaWYgKGVycltpXSA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlc19hdHRhY2g6IGluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpLCBlcnJbaV0pOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCisJCQkJaSwgZXJyW2ldKTsKIAkJCWtmcmVlKGRlY29kZXIpOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAKQEAgLTExMTYsMTAxICsxMDI0LDQ1IEBACiAJZXJyWzI2XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDA3LCBpbml0W1JFR19BRERSKDB4MDcpXSk7CiAJZXJyWzI3XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDEwLCBpbml0W1JFR19BRERSKDB4MTApXSk7CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkiJXNfYXR0YWNoOiBjaGlwIHZlcnNpb24gJXgsIGRlY29kZXIgc3RhdHVzIDB4JTAyeFxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSwgc2FhNzExNF9yZWFkKGNsaWVudCwgMHgwMCkgPj4gNCwKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjaGlwIHZlcnNpb24gJXgsIGRlY29kZXIgc3RhdHVzIDB4JTAyeFxuIiwKKwkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHgwMCkgPj4gNCwKIAkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHgxZikpOwotCWRwcmludGsoMSwKLQkJS0VSTl9ERUJVRwotCQkiJXNfYXR0YWNoOiBwb3dlciBzYXZlIGNvbnRyb2w6IDB4JTAyeCwgc2NhbGVyIHN0YXR1czogMHglMDJ4XG4iLAotCQlJMkNfTkFNRShjbGllbnQpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCAweDg4KSwKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCSJwb3dlciBzYXZlIGNvbnRyb2w6IDB4JTAyeCwgc2NhbGVyIHN0YXR1czogMHglMDJ4XG4iLAorCQlzYWE3MTE0X3JlYWQoY2xpZW50LCAweDg4KSwKIAkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHg4ZikpOwogCiAKIAlmb3IgKGkgPSAweDk0OyBpIDwgMHg5NjsgaSsrKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fREVCVUcKLQkJCSIlc19hdHRhY2g6IHJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKKwkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7CiAJfQogCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQogCS8vaSA9IHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0LCBzaXplb2YoaW5pdCkpOwotCWkgPSAwOwotCWlmIChpIDwgMCkgewotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlc19hdHRhY2ggZXJyb3I6IGluaXQgc3RhdHVzICVkXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSk7Ci0JfSBlbHNlIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9JTkZPCi0JCQkiJXNfYXR0YWNoOiBjaGlwIHZlcnNpb24gJXggYXQgYWRkcmVzcyAweCV4XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgc2FhNzExNF9yZWFkKGNsaWVudCwgMHgwMCkgPj4gNCwKLQkJCWNsaWVudC0+YWRkciA8PCAxKTsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotc2FhNzExNF9hdHRhY2hfYWRhcHRlciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBzYWE3MTE0X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTE0LmM6IHN0YXJ0aW5nIHByb2JlIGZvciBhZGFwdGVyICVzICgweCV4KVxuIiwKLQkJSTJDX05BTUUoYWRhcHRlciksIGFkYXB0ZXItPmlkKTsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZzYWE3MTE0X2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1zYWE3MTE0X2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHNhYTcxMTQgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0Ja2ZyZWUoZGVjb2Rlcik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQorCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzExNCA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJzYWE3MTE0IiwKLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTQsCi0KLQkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE3MTE0X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gc2FhNzExNF9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gc2FhNzExNF9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTcxMTRfaWRbXSA9IHsKKwl7ICJzYWE3MTE0X29sZCIsIDAgfSwJLyogInNhYTcxMTQiIG1hcHMgdG8gdGhlIHNhYTcxMTUgZHJpdmVyICovCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTcxMTRfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdAotc2FhNzExNF9pbml0ICh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTE0KTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1zYWE3MTE0X2V4aXQgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzExNCk7Ci19Ci0KLW1vZHVsZV9pbml0KHNhYTcxMTRfaW5pdCk7Ci1tb2R1bGVfZXhpdChzYWE3MTE0X2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gInNhYTcxMTQiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTE0LAorCS5jb21tYW5kID0gc2FhNzExNF9jb21tYW5kLAorCS5wcm9iZSA9IHNhYTcxMTRfcHJvYmUsCisJLnJlbW92ZSA9IHNhYTcxMTRfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHNhYTcxMTRfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwppbmRleCBhZDczM2NhLi5jOGU5Y2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwpAQCAtMTA1Nyw3ICsxMDU3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDw9IDIzOyBpKyspCiAJCWxjcltpXSA9IDB4ZmY7CiAKLQlpZiAoZm10LT5zZXJ2aWNlX3NldCA9PSAwKSB7CisJaWYgKGZtdCA9PSBOVUxMKSB7CiAJCS8qIHJhdyBWQkkgKi8KIAkJaWYgKGlzXzUwaHopCiAJCQlmb3IgKGkgPSA2OyBpIDw9IDIzOyBpKyspCkBAIC0xMTEzLDcgKzExMTMsNyBAQAogCX0KIAogCS8qIGVuYWJsZS9kaXNhYmxlIHJhdyBWQkkgY2FwdHVyaW5nICovCi0Jc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBmbXQtPnNlcnZpY2Vfc2V0ID09IDAgPworCXNhYTcxMXhfd3JpdGVyZWdzKGNsaWVudCwgZm10ID09IE5VTEwgPwogCQkJCXNhYTcxMTVfY2ZnX3ZiaV9vbiA6CiAJCQkJc2FhNzExNV9jZmdfdmJpX29mZik7CiB9CkBAIC0xMTUzLDYgKzExNTMsMTAgQEAKIAkJc2FhNzExeF9zZXRfbGNyKGNsaWVudCwgJmZtdC0+Zm10LnNsaWNlZCk7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpIHsKKwkJc2FhNzExeF9zZXRfbGNyKGNsaWVudCwgTlVMTCk7CisJCXJldHVybiAwOworCX0KIAlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEzMDksMTAgKzEzMTMsMTMgQEAKIAljYXNlIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HOgogCXsKIAkJc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7CisJCXUzMiBpbnB1dCA9IHJvdXRlLT5pbnB1dDsKKwkJdTggbWFzayA9IChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTExKSA/IDB4ZjggOiAweGYwOwogCiAJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgc2V0IGlucHV0ICVkIG91dHB1dCAlZFxuIiwgcm91dGUtPmlucHV0LCByb3V0ZS0+b3V0cHV0KTsKLQkJLyogc2FhNzExMyBkb2VzIG5vdCBoYXZlIHRoZXNlIGlucHV0cyAqLwotCQlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMyAmJgorCQkvKiBzYWE3MTExLzMgZG9lcyBub3QgaGF2ZSB0aGVzZSBpbnB1dHMgKi8KKwkJaWYgKChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTEzIHx8CisJCSAgICAgc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMSkgJiYKIAkJICAgIChyb3V0ZS0+aW5wdXQgPT0gU0FBNzExNV9DT01QT1NJVEU0IHx8CiAJCSAgICAgcm91dGUtPmlucHV0ID09IFNBQTcxMTVfQ09NUE9TSVRFNSkpIHsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMyNywxMCArMTMzNCwyMyBAQAogCQkJKHJvdXRlLT5pbnB1dCA+PSBTQUE3MTE1X1NWSURFTzApID8gIlMtVmlkZW8iIDogIkNvbXBvc2l0ZSIsIChyb3V0ZS0+b3V0cHV0ID09IFNBQTcxMTVfSVBPUlRfT04pID8gImlwb3J0IG9uIiA6ICJpcG9ydCBvZmYiKTsKIAkJc3RhdGUtPmlucHV0ID0gcm91dGUtPmlucHV0OwogCisJCS8qIHNhYTcxMTEgaGFzIHNsaWdodGx5IGRpZmZlcmVudCBpbnB1dCBudW1iZXJpbmcgKi8KKwkJaWYgKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTEpIHsKKwkJCWlmIChpbnB1dCA+PSBTQUE3MTE1X0NPTVBPU0lURTQpCisJCQkJaW5wdXQgLT0gMjsKKwkJCS8qIHNhYTcxMTEgc3BlY2lmaWMgKi8KKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSXzEwX0NIUk9NQV9DTlRMXzIsCisJCQkJCShzYWE3MTF4X3JlYWQoY2xpZW50LCBSXzEwX0NIUk9NQV9DTlRMXzIpICYgMHgzZikgfAorCQkJCQkoKHJvdXRlLT5vdXRwdXQgJiAweGMwKSBeIDB4NDApKTsKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSXzEzX1JUX1hfUE9SVF9PVVRfQ05UTCwKKwkJCQkJKHNhYTcxMXhfcmVhZChjbGllbnQsIFJfMTNfUlRfWF9QT1JUX09VVF9DTlRMKSAmIDB4ZjApIHwKKwkJCQkJKChyb3V0ZS0+b3V0cHV0ICYgMikgPyAweDBhIDogMCkpOworCQl9CisKIAkJLyogc2VsZWN0IG1vZGUgKi8KIAkJc2FhNzExeF93cml0ZShjbGllbnQsIFJfMDJfSU5QVVRfQ05UTF8xLAotCQkJICAgICAgKHNhYTcxMXhfcmVhZChjbGllbnQsIFJfMDJfSU5QVVRfQ05UTF8xKSAmIDB4ZjApIHwKLQkJCSAgICAgICBzdGF0ZS0+aW5wdXQpOworCQkJICAgICAgKHNhYTcxMXhfcmVhZChjbGllbnQsIFJfMDJfSU5QVVRfQ05UTF8xKSAmIG1hc2spIHwKKwkJCSAgICAgICBpbnB1dCk7CiAKIAkJLyogYnlwYXNzIGNocm9taW5hbmNlIHRyYXAgZm9yIFMtVmlkZW8gbW9kZXMgKi8KIAkJc2FhNzExeF93cml0ZShjbGllbnQsIFJfMDlfTFVNQV9DTlRMLApAQCAtMTM4NCw2ICsxNDA0LDEzIEBACiAJCXNhYTcxMXhfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfcmVzZXRfc2NhbGVyKTsKIAkJYnJlYWs7CiAKKwljYXNlIFZJRElPQ19JTlRfU19HUElPOgorCQlpZiAoc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExMSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgxMSwgKHNhYTcxMXhfcmVhZChjbGllbnQsIDB4MTEpICYgMHg3ZikgfAorCQkJKCoodTMyICopYXJnID8gMHg4MCA6IDApKTsKKwkJYnJlYWs7CisKIAljYXNlIFZJRElPQ19JTlRfR19WQklfREFUQToKIAl7CiAJCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSAqZGF0YSA9IGFyZzsKQEAgLTE1MzksNyArMTU2Niw4IEBACiAJCXN0YXRlLT5jcnlzdGFsX2ZyZXEgPSBTQUE3MTE1X0ZSRVFfMzJfMTFfTUhaOwogCQlzYWE3MTF4X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfaW5pdF9hdXRvX2lucHV0KTsKIAl9Ci0Jc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2luaXRfbWlzYyk7CisJaWYgKHN0YXRlLT5pZGVudCAhPSBWNEwyX0lERU5UX1NBQTcxMTEpCisJCXNhYTcxMXhfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9pbml0X21pc2MpOwogCXNhYTcxMXhfc2V0X3Y0bHN0ZChjbGllbnQsIFY0TDJfU1REX05UU0MpOwogCiAJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzOiAoMUUpIDB4JTAyeCwgKDFGKSAweCUwMnhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCmluZGV4IGQwZTgzZmUuLmNjMDJmYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCkBAIC0yOSw3ICsyOSw3IEBACiAgKiBOb3RlOiB0aGUgc2FhNzEyNiBpcyBpZGVudGljYWwgdG8gdGhlIHNhYTcxMjcsIGFuZCB0aGUgc2FhNzEyOCBpcwogICogaWRlbnRpY2FsIHRvIHRoZSBzYWE3MTI5LCBleGNlcHQgdGhhdCB0aGUgc2FhNzEyNiBhbmQgc2FhNzEyOCBoYXZlCiAgKiBtYWNyb3Zpc2lvbiBhbnRpLXRhcGluZyBzdXBwb3J0LiBUaGlzIGRyaXZlciB3aWxsIGFsbW9zdCBjZXJ0YWlubHkKLSAqIHdvcmsgZmluZCBmb3IgdGhvc2UgY2hpcHMsIGV4Y2VwdCBvZiBjb3Vyc2UgZm9yIHRoZSBtaXNzaW5nIGFudGktdGFwaW5nCisgKiB3b3JrIGZpbmUgZm9yIHRob3NlIGNoaXBzLCBleGNlcHQgb2YgY291cnNlIGZvciB0aGUgbWlzc2luZyBhbnRpLXRhcGluZwogICogc3VwcG9ydC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jCmluZGV4IDcwN2JlMTcuLjFmYjZlY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE2NzUyaHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMKQEAgLTEsMyArMSwyNyBAQAorIC8qCisgICAgc2FhNjc1MmhzIC0gaTJjLWRyaXZlciBmb3IgdGhlIHNhYTY3NTJocyBieSBQaGlsaXBzCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQgQW5kcmV3IGRlIFF1aW5jZXkKKworICAgIEFDLTMgc3VwcG9ydDoKKworICAgIENvcHlyaWdodCAoQykgMjAwOCBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2cyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNdnNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0xMCw2ICszNCw4IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KIApAQCAtMjcsOSArNTMsNiBAQAogTU9EVUxFX0FVVEhPUigiQW5kcmV3IGRlIFF1aW5jZXkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlcjsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGU7Ci0KIGVudW0gc2FhNjc1MmhzX3ZpZGVvZm9ybWF0IHsKIAlTQUE2NzUySFNfVkZfRDEgPSAwLCAgICAvKiBzdGFuZGFyZCBEMSB2aWRlbyBmb3JtYXQ6IDcyMHg1NzYgKi8KIAlTQUE2NzUySFNfVkZfMl8zX0QxID0gMSwvKiAyLzNEMSB2aWRlbyBmb3JtYXQ6IDQ4MHg1NzYgKi8KQEAgLTQ2LDcgKzY5LDkgQEAKIAlfX3UxNgkJCQl0c19waWRfcGNyOwogCiAJLyogYXVkaW8gKi8KLQllbnVtIHY0bDJfbXBlZ19hdWRpb19sMl9iaXRyYXRlIGF1X2wyX2JpdHJhdGU7CisJZW51bSB2NGwyX21wZWdfYXVkaW9fZW5jb2RpbmcgICAgYXVfZW5jb2Rpbmc7CisJZW51bSB2NGwyX21wZWdfYXVkaW9fbDJfYml0cmF0ZSAgYXVfbDJfYml0cmF0ZTsKKwllbnVtIHY0bDJfbXBlZ19hdWRpb19hYzNfYml0cmF0ZSBhdV9hYzNfYml0cmF0ZTsKIAogCS8qIHZpZGVvICovCiAJZW51bSB2NGwyX21wZWdfdmlkZW9fYXNwZWN0CXZpX2FzcGVjdDsKQEAgLTcwLDcgKzk1LDkgQEAKIH07CiAKIHN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgewotCXN0cnVjdCBpMmNfY2xpZW50ICAgICAgICAgICAgIGNsaWVudDsKKwlpbnQgCQkJICAgICAgY2hpcDsKKwl1MzIgCQkJICAgICAgcmV2aXNpb247CisJaW50IAkJCSAgICAgIGhhc19hYzM7CiAJc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAgcGFyYW1zOwogCWVudW0gc2FhNjc1MmhzX3ZpZGVvZm9ybWF0ICAgIHZpZGVvX2Zvcm1hdDsKIAl2NGwyX3N0ZF9pZCAgICAgICAgICAgICAgICAgICBzdGFuZGFyZDsKQEAgLTE0NSw2ICsxNzIsMzkgQEAKIAkweDAwLCAweDAwLCAweDAwLCAweDAwIC8qIENSQzMyICovCiB9OwogCitzdGF0aWMgdTggUE1UX0FDM1tdID0geworCTB4YzIsIC8qIGkyYyByZWdpc3RlciAqLworCTB4MDEsIC8qIHRhYmxlIG51bWJlciBmb3IgZW5jb2RlcigxKSAqLworCTB4NDcsIC8qIHN5bmMgKi8KKworCTB4NDAsIC8qIHRyYW5zcG9ydF9lcnJvcl9pbmRpY2F0b3IoMCksIHBheWxvYWRfdW5pdF9zdGFydCgxKSwgdHJhbnNwb3J0X3ByaW9yaXR5KDApICovCisJMHgxMCwgLyogUE1UIFBJRCAoMHgwMDEwKSAqLworCTB4MTAsIC8qIHRyYW5zcG9ydF9zY3JhbWJsaW5nX2NvbnRyb2woMDApLCBhZGFwdGF0aW9uX2ZpZWxkX2NvbnRyb2woMDEpLCBjb250aW51aXR5X2NvdW50ZXIoMCkgKi8KKworCTB4MDAsIC8qIFBTSSBwb2ludGVyIHRvIHN0YXJ0IG9mIHRhYmxlICovCisKKwkweDAyLCAvKiBUSUQgKDIpICovCisJMHhiMCwgMHgxYSwgLyogc2VjdGlvbl9zeW50YXhfaW5kaWNhdG9yKDEpLCBzZWN0aW9uX2xlbmd0aCgyNikgKi8KKworCTB4MDAsIDB4MDEsIC8qIHByb2dyYW1fbnVtYmVyKDEpICovCisKKwkweGMxLCAvKiB2ZXJzaW9uX251bWJlcigwKSwgY3VycmVudF9uZXh0X2luZGljYXRvcigxKSAqLworCisJMHgwMCwgMHgwMCwgLyogc2VjdGlvbl9udW1iZXIoMCksIGxhc3Rfc2VjdGlvbl9udW1iZXIoMCkgKi8KKworCTB4ZTEsIDB4MDQsIC8qIFBDUl9QSUQgKDB4MDEwNCkgKi8KKworCTB4ZjAsIDB4MDAsIC8qIHByb2dyYW1faW5mb19sZW5ndGgoMCkgKi8KKworCTB4MDIsIDB4ZTEsIDB4MDAsIDB4ZjAsIDB4MDAsIC8qIHZpZGVvIHN0cmVhbSB0eXBlKDIpLCBwaWQgKi8KKwkweDA2LCAweGUxLCAweDAzLCAweGYwLCAweDAzLCAvKiBhdWRpbyBzdHJlYW0gdHlwZSg2KSwgcGlkICovCisJMHg2YSwgLyogQUMzICovCisJMHgwMSwgLyogRGVzY3JpcHRvcl9sZW5ndGgoMSkgKi8KKwkweDAwLCAvKiBjb21wb25lbnRfdHlwZV9mbGFnKDApLCBic2lkX2ZsYWcoMCksIG1haW5pZF9mbGFnKDApLCBhc3ZjX2ZsYWcoMCksIHJlc2VydmVkIGZsYWdzKDApICovCisKKwkweEVELCAweERFLCAweDJELCAweEYzIC8qIENSQzMyIEJFICovCit9OworCiBzdGF0aWMgc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyBwYXJhbV9kZWZhdWx0cyA9CiB7CiAJLnRzX3BpZF9wbXQgICAgICA9IDE2LApAQCAtMTU3LDEyICsyMTcsMTQgQEAKIAkudmlfYml0cmF0ZV9wZWFrID0gNjAwMCwKIAkudmlfYml0cmF0ZV9tb2RlID0gVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIsCiAKKwkuYXVfZW5jb2RpbmcgICAgID0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCiAJLmF1X2wyX2JpdHJhdGUgICA9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NkssCisJLmF1X2FjM19iaXRyYXRlICA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLLAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHNhYTY3NTJoc19jaGlwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCwKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX2NoaXBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJCSAgZW51bSBzYWE2NzUyaHNfY29tbWFuZCBjb21tYW5kKQogewogCXVuc2lnbmVkIGNoYXIgYnVmWzNdOwpAQCAtMjI5LDQ1ICsyOTEsNjEgQEAKIH0KIAogCi1zdGF0aWMgaW50IHNhYTY3NTJoc19zZXRfYml0cmF0ZShzdHJ1Y3QgaTJjX2NsaWVudCogY2xpZW50LAotCQkJCSBzdHJ1Y3Qgc2FhNjc1MmhzX21wZWdfcGFyYW1zKiBwYXJhbXMpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3JlZzgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdWludDhfdCByZWcsIHVpbnQ4X3QgdmFsKQoreworCXU4IGJ1ZlsyXTsKKworCWJ1ZlswXSA9IHJlZzsKKwlidWZbMV0gPSB2YWw7CisJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9yZWcxNihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1aW50OF90IHJlZywgdWludDE2X3QgdmFsKQogewogCXU4IGJ1ZlszXTsKKworCWJ1ZlswXSA9IHJlZzsKKwlidWZbMV0gPSB2YWwgPj4gODsKKwlidWZbMl0gPSB2YWwgJiAweGZmOworCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMyk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX3NldF9iaXRyYXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJIHN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmgpCit7CisJc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zID0gJmgtPnBhcmFtczsKIAlpbnQgdG90X2JpdHJhdGU7CisJaW50IGlzXzM4NGs7CiAKIAkvKiBzZXQgdGhlIGJpdHJhdGUgbW9kZSAqLwotCWJ1ZlswXSA9IDB4NzE7Ci0JYnVmWzFdID0gKHBhcmFtcy0+dmlfYml0cmF0ZV9tb2RlID09IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSKSA/IDAgOiAxOwotCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMik7CisJc2V0X3JlZzgoY2xpZW50LCAweDcxLAorCQlwYXJhbXMtPnZpX2JpdHJhdGVfbW9kZSAhPSBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUik7CiAKIAkvKiBzZXQgdGhlIHZpZGVvIGJpdHJhdGUgKi8KIAlpZiAocGFyYW1zLT52aV9iaXRyYXRlX21vZGUgPT0gVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIpIHsKIAkJLyogc2V0IHRoZSB0YXJnZXQgYml0cmF0ZSAqLwotCQlidWZbMF0gPSAweDgwOwotCQlidWZbMV0gPSBwYXJhbXMtPnZpX2JpdHJhdGUgPj4gODsKLQkJYnVmWzJdID0gcGFyYW1zLT52aV9iaXRyYXRlICYgMHhmZjsKLQkJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAzKTsKKwkJc2V0X3JlZzE2KGNsaWVudCwgMHg4MCwgcGFyYW1zLT52aV9iaXRyYXRlKTsKIAogCQkvKiBzZXQgdGhlIG1heCBiaXRyYXRlICovCi0JCWJ1ZlswXSA9IDB4ODE7Ci0JCWJ1ZlsxXSA9IHBhcmFtcy0+dmlfYml0cmF0ZV9wZWFrID4+IDg7Ci0JCWJ1ZlsyXSA9IHBhcmFtcy0+dmlfYml0cmF0ZV9wZWFrICYgMHhmZjsKLQkJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAzKTsKKwkJc2V0X3JlZzE2KGNsaWVudCwgMHg4MSwgcGFyYW1zLT52aV9iaXRyYXRlX3BlYWspOwogCQl0b3RfYml0cmF0ZSA9IHBhcmFtcy0+dmlfYml0cmF0ZV9wZWFrOwogCX0gZWxzZSB7CiAJCS8qIHNldCB0aGUgdGFyZ2V0IGJpdHJhdGUgKG5vIG1heCBiaXRyYXRlIGZvciBDQlIpICovCi0JCWJ1ZlswXSA9IDB4ODE7Ci0JCWJ1ZlsxXSA9IHBhcmFtcy0+dmlfYml0cmF0ZSA+PiA4OwotCQlidWZbMl0gPSBwYXJhbXMtPnZpX2JpdHJhdGUgJiAweGZmOwotCQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDMpOworCQlzZXRfcmVnMTYoY2xpZW50LCAweDgxLCBwYXJhbXMtPnZpX2JpdHJhdGUpOwogCQl0b3RfYml0cmF0ZSA9IHBhcmFtcy0+dmlfYml0cmF0ZTsKIAl9CiAKKwkvKiBzZXQgdGhlIGF1ZGlvIGVuY29kaW5nICovCisJc2V0X3JlZzgoY2xpZW50LCAweDkzLAorCQkJcGFyYW1zLT5hdV9lbmNvZGluZyA9PSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzKTsKKwogCS8qIHNldCB0aGUgYXVkaW8gYml0cmF0ZSAqLwotCWJ1ZlswXSA9IDB4OTQ7Ci0JYnVmWzFdID0gKFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NksgPT0gcGFyYW1zLT5hdV9sMl9iaXRyYXRlKSA/IDAgOiAxOwotCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMik7Ci0JdG90X2JpdHJhdGUgKz0gKFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NksgPT0gcGFyYW1zLT5hdV9sMl9iaXRyYXRlKSA/IDI1NiA6IDM4NDsKKwlpZiAocGFyYW1zLT5hdV9lbmNvZGluZyA9PSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzKQorCQlpc18zODRrID0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEsgPT0gcGFyYW1zLT5hdV9hYzNfYml0cmF0ZTsKKwllbHNlCisJCWlzXzM4NGsgPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLID09IHBhcmFtcy0+YXVfbDJfYml0cmF0ZTsKKwlzZXRfcmVnOChjbGllbnQsIDB4OTQsIGlzXzM4NGspOworCXRvdF9iaXRyYXRlICs9IGlzXzM4NGsgPyAzODQgOiAyNTY7CiAKIAkvKiBOb3RlOiB0aGUgdG90YWwgbWF4IGJpdHJhdGUgaXMgZGV0ZXJtaW5lZCBieSBhZGRpbmcgdGhlIHZpZGVvIGFuZCBhdWRpbwogCSAgIGJpdHJhdGVzIHRvZ2V0aGVyIGFuZCBhbHNvIGFkZGluZyBhbiBleHRyYSA3NjhrYml0L3MgdG8gc3RheSBvbiB0aGUKQEAgLTI3OCwxNiArMzU2LDEyIEBACiAJCXRvdF9iaXRyYXRlID0gTVBFR19UT1RBTF9UQVJHRVRfQklUUkFURV9NQVg7CiAKIAkvKiBzZXQgdGhlIHRvdGFsIGJpdHJhdGUgKi8KLQlidWZbMF0gPSAweGIxOwotCWJ1ZlsxXSA9IHRvdF9iaXRyYXRlID4+IDg7Ci0JYnVmWzJdID0gdG90X2JpdHJhdGUgJiAweGZmOwotCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMyk7Ci0KKwlzZXRfcmVnMTYoY2xpZW50LCAweGIxLCB0b3RfYml0cmF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNhYTY3NTJoc19zZXRfc3Vic2FtcGxpbmcoc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCwKLQkJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQqIGYpCitzdGF0aWMgdm9pZCBzYWE2NzUyaHNfc2V0X3N1YnNhbXBsaW5nKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgZGlzdF8zNTIsIGRpc3RfNDgwLCBkaXN0XzcyMDsKQEAgLTMzMiw3ICs0MDYsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgaGFuZGxlX2N0cmwoc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zLAorc3RhdGljIGludCBoYW5kbGVfY3RybChpbnQgaGFzX2FjMywgc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zLAogCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybCwgdW5zaWduZWQgaW50IGNtZCkKIHsKIAlpbnQgb2xkID0gMCwgbmV3OwpAQCAtMzc5LDggKzQ1Myw5IEBACiAJCQlwYXJhbXMtPnRzX3BpZF9wY3IgPSBuZXc7CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgotCQkJb2xkID0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzI7Ci0JCQlpZiAoc2V0ICYmIG5ldyAhPSBvbGQpCisJCQlvbGQgPSBwYXJhbXMtPmF1X2VuY29kaW5nOworCQkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIgJiYKKwkJCSAgICAoIWhhc19hYzMgfHwgbmV3ICE9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMpKQogCQkJCXJldHVybiAtRVJBTkdFOwogCQkJbmV3ID0gb2xkOwogCQkJYnJlYWs7CkBAIC0zOTUsNiArNDcwLDE5IEBACiAJCQkJbmV3ID0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SzsKIAkJCXBhcmFtcy0+YXVfbDJfYml0cmF0ZSA9IG5ldzsKIAkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCQlpZiAoIWhhc19hYzMpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlvbGQgPSBwYXJhbXMtPmF1X2FjM19iaXRyYXRlOworCQkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzI1NksgJiYKKwkJCQkgICBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEspCisJCQkJcmV0dXJuIC1FUkFOR0U7CisJCQlpZiAobmV3IDw9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLKQorCQkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLOworCQkJZWxzZQorCQkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLOworCQkJcGFyYW1zLT5hdV9hYzNfYml0cmF0ZSA9IG5ldzsKKwkJCWJyZWFrOwogCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKIAkJCW9sZCA9IFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwOwogCQkJaWYgKHNldCAmJiBuZXcgIT0gb2xkKQpAQCAtNDQ4LDE3ICs1MzYsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE2NzUyaHNfcWN0cmwoc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zLAorc3RhdGljIGludCBzYWE2NzUyaHNfcWN0cmwoc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCwKIAkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKIHsKKwlzdHJ1Y3Qgc2FhNjc1MmhzX21wZWdfcGFyYW1zICpwYXJhbXMgPSAmaC0+cGFyYW1zOwogCWludCBlcnI7CiAKIAlzd2l0Y2ggKHFjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKIAkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAogCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yLAotCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yLCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yKTsKKwkJCQloLT5oYXNfYWMzID8gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMyA6CisJCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yLAorCQkJCTEsIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yKTsKIAogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCkBAIC00NjYsNiArNTU2LDE0IEBACiAJCQkJVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SywgMSwKIAkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLKTsKIAorCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURToKKwkJaWYgKCFoLT5oYXNfYWMzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SywKKwkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzg0SywgMSwKKwkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2Syk7CisKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKIAkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAogCQkJCVY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwLApAQCAtNTEyLDQ0ICs2MTAsNTcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBzYWE2NzUyaHNfcW1lbnUoc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zLAorc3RhdGljIGludCBzYWE2NzUyaHNfcW1lbnUoc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCwKIAkJc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSkKIHsKLQlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19sMl9iaXRyYXRlW10gPSB7Ci0JCSIiLAotCQkiIiwKLQkJIiIsCi0JCSIiLAotCQkiIiwKLQkJIiIsCi0JCSIiLAotCQkiIiwKLQkJIiIsCi0JCSIiLAotCQkiIiwKLQkJIjI1NiBrYnBzIiwKLQkJIiIsCi0JCSIzODQga2JwcyIsCi0JCU5VTEwKKwlzdGF0aWMgY29uc3QgdTMyIG1wZWdfYXVkaW9fZW5jb2RpbmdbXSA9IHsKKwkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCisJCVY0TDJfQ1RSTF9NRU5VX0lEU19FTkQKKwl9OworCXN0YXRpYyBjb25zdCB1MzIgbXBlZ19hdWRpb19hYzNfZW5jb2RpbmdbXSA9IHsKKwkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCisJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMsCisJCVY0TDJfQ1RSTF9NRU5VX0lEU19FTkQKKwl9OworCXN0YXRpYyB1MzIgbXBlZ19hdWRpb19sMl9iaXRyYXRlW10gPSB7CisJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NkssCisJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzM4NEssCisJCVY0TDJfQ1RSTF9NRU5VX0lEU19FTkQKKwl9OworCXN0YXRpYyB1MzIgbXBlZ19hdWRpb19hYzNfYml0cmF0ZVtdID0geworCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SywKKwkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEssCisJCVY0TDJfQ1RSTF9NRU5VX0lEU19FTkQKIAl9OwogCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybDsKIAlpbnQgZXJyOwogCiAJcWN0cmwuaWQgPSBxbWVudS0+aWQ7Ci0JZXJyID0gc2FhNjc1MmhzX3FjdHJsKHBhcmFtcywgJnFjdHJsKTsKKwllcnIgPSBzYWE2NzUyaHNfcWN0cmwoaCwgJnFjdHJsKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCWlmIChxbWVudS0+aWQgPT0gVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFKQotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnUocW1lbnUsICZxY3RybCwKKwlzd2l0Y2ggKHFtZW51LT5pZCkgeworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnVfdmFsaWRfaXRlbXMocW1lbnUsCiAJCQkJbXBlZ19hdWRpb19sMl9iaXRyYXRlKTsKLQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnUocW1lbnUsICZxY3RybCwKLQkJCXY0bDJfY3RybF9nZXRfbWVudShxbWVudS0+aWQpKTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCWlmICghaC0+aGFzX2FjMykKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnVfdmFsaWRfaXRlbXMocW1lbnUsCisJCQkJbXBlZ19hdWRpb19hYzNfYml0cmF0ZSk7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnVfdmFsaWRfaXRlbXMocW1lbnUsCisJCQloLT5oYXNfYWMzID8gbXBlZ19hdWRpb19hYzNfZW5jb2RpbmcgOgorCQkJCW1wZWdfYXVkaW9fZW5jb2RpbmcpOworCX0KKwlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnUocW1lbnUsICZxY3RybCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNjc1MmhzX2luaXQoc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCkKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTMyIGxlYWRpbmdfbnVsbF9ieXRlcykKIHsKIAl1bnNpZ25lZCBjaGFyIGJ1Zls5XSwgYnVmMls0XTsKIAlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoOworCXVuc2lnbmVkIHNpemU7CiAJdTMyIGNyYzsKIAl1bnNpZ25lZCBjaGFyIGxvY2FsUEFUWzI1Nl07CiAJdW5zaWduZWQgY2hhciBsb2NhbFBNVFsyNTZdOwpAQCAtNTU3LDQ1ICs2NjgsMzEgQEAKIAloID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAkvKiBTZXQgdmlkZW8gZm9ybWF0IC0gbXVzdCBiZSBkb25lIGZpcnN0IGFzIGl0IHJlc2V0cyBvdGhlciBzZXR0aW5ncyAqLwotCWJ1ZlswXSA9IDB4NDE7Ci0JYnVmWzFdID0gaC0+dmlkZW9fZm9ybWF0OwotCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMik7CisJc2V0X3JlZzgoY2xpZW50LCAweDQxLCBoLT52aWRlb19mb3JtYXQpOwogCiAJLyogU2V0IG51bWJlciBvZiBsaW5lcyBpbiBpbnB1dCBzaWduYWwgKi8KLQlidWZbMF0gPSAweDQwOwotCWJ1ZlsxXSA9IDB4MDA7Ci0JaWYgKGgtPnN0YW5kYXJkICYgVjRMMl9TVERfNTI1XzYwKQotCQlidWZbMV0gPSAweDAxOwotCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMik7CisJc2V0X3JlZzgoY2xpZW50LCAweDQwLCAoaC0+c3RhbmRhcmQgJiBWNEwyX1NURF81MjVfNjApID8gMSA6IDApOwogCiAJLyogc2V0IGJpdHJhdGUgKi8KLQlzYWE2NzUyaHNfc2V0X2JpdHJhdGUoY2xpZW50LCAmaC0+cGFyYW1zKTsKKwlzYWE2NzUyaHNfc2V0X2JpdHJhdGUoY2xpZW50LCBoKTsKIAogCS8qIFNldCBHT1Agc3RydWN0dXJlIHszLCAxM30gKi8KLQlidWZbMF0gPSAweDcyOwotCWJ1ZlsxXSA9IDB4MDM7Ci0JYnVmWzJdID0gMHgwRDsKLQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGJ1ZiwzKTsKKwlzZXRfcmVnMTYoY2xpZW50LCAweDcyLCAweDAzMGQpOwogCiAJLyogU2V0IG1pbmltdW0gUS1zY2FsZSB7NH0gKi8KLQlidWZbMF0gPSAweDgyOwotCWJ1ZlsxXSA9IDB4MDQ7Ci0JaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWYsMik7CisJc2V0X3JlZzgoY2xpZW50LCAweDgyLCAweDA0KTsKIAogCS8qIFNldCBtYXhpbXVtIFEtc2NhbGUgezEyfSAqLwotCWJ1ZlswXSA9IDB4ODM7Ci0JYnVmWzFdID0gMHgwQzsKLQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGJ1ZiwyKTsKKwlzZXRfcmVnOChjbGllbnQsIDB4ODMsIDB4MGMpOwogCiAJLyogU2V0IE91dHB1dCBQcm90b2NvbCAqLwotCWJ1ZlswXSA9IDB4RDA7Ci0JYnVmWzFdID0gMHg4MTsKLQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGJ1ZiwyKTsKKwlzZXRfcmVnOChjbGllbnQsIDB4ZDAsIDB4ODEpOwogCiAJLyogU2V0IHZpZGVvIG91dHB1dCBzdHJlYW0gZm9ybWF0IHtUU30gKi8KLQlidWZbMF0gPSAweEIwOwotCWJ1ZlsxXSA9IDB4MDU7Ci0JaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWYsMik7CisJc2V0X3JlZzgoY2xpZW50LCAweGIwLCAweDA1KTsKKworCS8qIFNldCBsZWFkaW5nIG51bGwgYnl0ZSBmb3IgVFMgKi8KKwlzZXRfcmVnMTYoY2xpZW50LCAweGY2LCBsZWFkaW5nX251bGxfYnl0ZXMpOwogCiAJLyogY29tcHV0ZSBQQVQgKi8KIAltZW1jcHkobG9jYWxQQVQsIFBBVCwgc2l6ZW9mKFBBVCkpOwpAQCAtNjA4LDcgKzcwNSwxMyBAQAogCWxvY2FsUEFUW3NpemVvZihQQVQpIC0gMV0gPSBjcmMgJiAweEZGOwogCiAJLyogY29tcHV0ZSBQTVQgKi8KLQltZW1jcHkobG9jYWxQTVQsIFBNVCwgc2l6ZW9mKFBNVCkpOworCWlmIChoLT5wYXJhbXMuYXVfZW5jb2RpbmcgPT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykgeworCQlzaXplID0gc2l6ZW9mKFBNVF9BQzMpOworCQltZW1jcHkobG9jYWxQTVQsIFBNVF9BQzMsIHNpemUpOworCX0gZWxzZSB7CisJCXNpemUgPSBzaXplb2YoUE1UKTsKKwkJbWVtY3B5KGxvY2FsUE1ULCBQTVQsIHNpemUpOworCX0KIAlsb2NhbFBNVFszXSA9IDB4NDAgfCAoKGgtPnBhcmFtcy50c19waWRfcG10ID4+IDgpICYgMHgwZik7CiAJbG9jYWxQTVRbNF0gPSBoLT5wYXJhbXMudHNfcGlkX3BtdCAmIDB4ZmY7CiAJbG9jYWxQTVRbMTVdID0gMHhFMCB8ICgoaC0+cGFyYW1zLnRzX3BpZF9wY3IgPj4gOCkgJiAweDBGKTsKQEAgLTYxNyw0MCArNzIwLDI4IEBACiAJbG9jYWxQTVRbMjFdID0gaC0+cGFyYW1zLnRzX3BpZF92aWRlbyAmIDB4RkY7CiAJbG9jYWxQTVRbMjVdID0gMHhFMCB8ICgoaC0+cGFyYW1zLnRzX3BpZF9hdWRpbyA+PiA4KSAmIDB4MEYpOwogCWxvY2FsUE1UWzI2XSA9IGgtPnBhcmFtcy50c19waWRfYXVkaW8gJiAweEZGOwotCWNyYyA9IGNyYzMyX2JlKH4wLCAmbG9jYWxQTVRbN10sIHNpemVvZihQTVQpIC0gNyAtIDQpOwotCWxvY2FsUE1UW3NpemVvZihQTVQpIC0gNF0gPSAoY3JjID4+IDI0KSAmIDB4RkY7Ci0JbG9jYWxQTVRbc2l6ZW9mKFBNVCkgLSAzXSA9IChjcmMgPj4gMTYpICYgMHhGRjsKLQlsb2NhbFBNVFtzaXplb2YoUE1UKSAtIDJdID0gKGNyYyA+PiA4KSAmIDB4RkY7Ci0JbG9jYWxQTVRbc2l6ZW9mKFBNVCkgLSAxXSA9IGNyYyAmIDB4RkY7CisJY3JjID0gY3JjMzJfYmUofjAsICZsb2NhbFBNVFs3XSwgc2l6ZSAtIDcgLSA0KTsKKwlsb2NhbFBNVFtzaXplIC0gNF0gPSAoY3JjID4+IDI0KSAmIDB4RkY7CisJbG9jYWxQTVRbc2l6ZSAtIDNdID0gKGNyYyA+PiAxNikgJiAweEZGOworCWxvY2FsUE1UW3NpemUgLSAyXSA9IChjcmMgPj4gOCkgJiAweEZGOworCWxvY2FsUE1UW3NpemUgLSAxXSA9IGNyYyAmIDB4RkY7CiAKIAkvKiBTZXQgQXVkaW8gUElEICovCi0JYnVmWzBdID0gMHhDMTsKLQlidWZbMV0gPSAoaC0+cGFyYW1zLnRzX3BpZF9hdWRpbyA+PiA4KSAmIDB4RkY7Ci0JYnVmWzJdID0gaC0+cGFyYW1zLnRzX3BpZF9hdWRpbyAmIDB4RkY7Ci0JaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWYsMyk7CisJc2V0X3JlZzE2KGNsaWVudCwgMHhjMSwgaC0+cGFyYW1zLnRzX3BpZF9hdWRpbyk7CiAKIAkvKiBTZXQgVmlkZW8gUElEICovCi0JYnVmWzBdID0gMHhDMDsKLQlidWZbMV0gPSAoaC0+cGFyYW1zLnRzX3BpZF92aWRlbyA+PiA4KSAmIDB4RkY7Ci0JYnVmWzJdID0gaC0+cGFyYW1zLnRzX3BpZF92aWRlbyAmIDB4RkY7Ci0JaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWYsMyk7CisJc2V0X3JlZzE2KGNsaWVudCwgMHhjMCwgaC0+cGFyYW1zLnRzX3BpZF92aWRlbyk7CiAKIAkvKiBTZXQgUENSIFBJRCAqLwotCWJ1ZlswXSA9IDB4QzQ7Ci0JYnVmWzFdID0gKGgtPnBhcmFtcy50c19waWRfcGNyID4+IDgpICYgMHhGRjsKLQlidWZbMl0gPSBoLT5wYXJhbXMudHNfcGlkX3BjciAmIDB4RkY7Ci0JaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWYsMyk7CisJc2V0X3JlZzE2KGNsaWVudCwgMHhjNCwgaC0+cGFyYW1zLnRzX3BpZF9wY3IpOwogCiAJLyogU2VuZCBTSSB0YWJsZXMgKi8KLQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGxvY2FsUEFULHNpemVvZihQQVQpKTsKLQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGxvY2FsUE1ULHNpemVvZihQTVQpKTsKKwlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBsb2NhbFBBVCwgc2l6ZW9mKFBBVCkpOworCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGxvY2FsUE1ULCBzaXplKTsKIAogCS8qIG11dGUgdGhlbiB1bm11dGUgYXVkaW8uIFRoaXMgcmVtb3ZlcyBidXp6aW5nIGFydGVmYWN0cyAqLwotCWJ1ZlswXSA9IDB4YTQ7Ci0JYnVmWzFdID0gMTsKLQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDIpOwotCWJ1ZlsxXSA9IDA7Ci0JaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKTsKKwlzZXRfcmVnOChjbGllbnQsIDB4YTQsIDEpOworCXNldF9yZWc4KGNsaWVudCwgMHhhNCwgMCk7CiAKIAkvKiBzdGFydCBpdCBnb2luZyAqLwogCXNhYTY3NTJoc19jaGlwX2NvbW1hbmQoY2xpZW50LCBTQUE2NzUySFNfQ09NTUFORF9TVEFSVCk7CkBAIC02ODgsNDUgKzc3OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNjc1MmhzX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLCBpbnQga2luZCkKLXsKLQlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoOwotCi0KLQlpZiAoTlVMTCA9PSAoaCA9IGt6YWxsb2Moc2l6ZW9mKCpoKSwgR0ZQX0tFUk5FTCkpKQotCQlyZXR1cm4gLUVOT01FTTsKLQloLT5jbGllbnQgPSBjbGllbnRfdGVtcGxhdGU7Ci0JaC0+cGFyYW1zID0gcGFyYW1fZGVmYXVsdHM7Ci0JaC0+Y2xpZW50LmFkYXB0ZXIgPSBhZGFwOwotCWgtPmNsaWVudC5hZGRyID0gYWRkcjsKLQotCS8qIEFzc3VtZSA2MjUgaW5wdXQgbGluZXMgKi8KLQloLT5zdGFuZGFyZCA9IDA7Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoJmgtPmNsaWVudCwgaCk7Ci0JaTJjX2F0dGFjaF9jbGllbnQoJmgtPmNsaWVudCk7Ci0KLQl2NGxfaW5mbygmaC0+Y2xpZW50LCJzYWE2NzUyaHM6IGNoaXAgZm91bmQgQCAweCV4XG4iLCBhZGRyPDwxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYWE2NzUyaHNfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQotewotCWlmIChhZGFwLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpCi0JCXJldHVybiBpMmNfcHJvYmUoYWRhcCwgJmFkZHJfZGF0YSwgc2FhNjc1MmhzX2F0dGFjaCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNjc1MmhzX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmg7Ci0KLQloID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShoKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludAogc2FhNjc1MmhzX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewpAQCAtNzM3LDE0ICs3ODksMTMgQEAKIAlpbnQgaTsKIAogCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfSU5UX0lOSVQ6CisJCS8qIGFwcGx5IHNldHRpbmdzIGFuZCBzdGFydCBlbmNvZGVyICovCisJCXNhYTY3NTJoc19pbml0KGNsaWVudCwgKih1MzIgKilhcmcpOworCQlicmVhazsKIAljYXNlIFZJRElPQ19TX0VYVF9DVFJMUzoKIAkJaWYgKGN0cmxzLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChjdHJscy0+Y291bnQgPT0gMCkgewotCQkJLyogYXBwbHkgc2V0dGluZ3MgYW5kIHN0YXJ0IGVuY29kZXIgKi8KLQkJCXNhYTY3NTJoc19pbml0KGNsaWVudCk7Ci0JCQlicmVhazsKLQkJfQogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIFZJRElPQ19UUllfRVhUX0NUUkxTOgogCWNhc2UgVklESU9DX0dfRVhUX0NUUkxTOgpAQCAtNzUyLDcgKzgwMyw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcGFyYW1zID0gaC0+cGFyYW1zOwogCQlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKLQkJCWlmICgoZXJyID0gaGFuZGxlX2N0cmwoJnBhcmFtcywgY3RybHMtPmNvbnRyb2xzICsgaSwgY21kKSkpIHsKKwkJCWVyciA9IGhhbmRsZV9jdHJsKGgtPmhhc19hYzMsICZwYXJhbXMsIGN0cmxzLT5jb250cm9scyArIGksIGNtZCk7CisJCQlpZiAoZXJyKSB7CiAJCQkJY3RybHMtPmVycm9yX2lkeCA9IGk7CiAJCQkJcmV0dXJuIGVycjsKIAkJCX0KQEAgLTc2MCw5ICs4MTIsOSBAQAogCQloLT5wYXJhbXMgPSBwYXJhbXM7CiAJCWJyZWFrOwogCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQkJcmV0dXJuIHNhYTY3NTJoc19xY3RybCgmaC0+cGFyYW1zLCBhcmcpOworCQlyZXR1cm4gc2FhNjc1MmhzX3FjdHJsKGgsIGFyZyk7CiAJY2FzZSBWSURJT0NfUVVFUllNRU5VOgotCQlyZXR1cm4gc2FhNjc1MmhzX3FtZW51KCZoLT5wYXJhbXMsIGFyZyk7CisJCXJldHVybiBzYWE2NzUyaHNfcW1lbnUoaCwgYXJnKTsKIAljYXNlIFZJRElPQ19HX0ZNVDoKIAl7CiAJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwpAQCAtNzg1LDYgKzgzNywxMSBAQAogCWNhc2UgVklESU9DX1NfU1REOgogCQloLT5zdGFuZGFyZCA9ICooKHY0bDJfc3RkX2lkICopIGFyZyk7CiAJCWJyZWFrOworCisJY2FzZSBWSURJT0NfR19DSElQX0lERU5UOgorCQlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LAorCQkJCWFyZywgaC0+Y2hpcCwgaC0+cmV2aXNpb24pOworCiAJZGVmYXVsdDoKIAkJLyogbm90aGluZyAqLwogCQlicmVhazsKQEAgLTc5MywzNiArODUwLDU1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSAgID0gInNhYTY3NTJocyIsCi0JfSwKLQkuaWQgICAgICAgICAgICAgPSBJMkNfRFJJVkVSSURfU0FBNjc1MkhTLAotCS5hdHRhY2hfYWRhcHRlciA9IHNhYTY3NTJoc19wcm9iZSwKLQkuZGV0YWNoX2NsaWVudCAgPSBzYWE2NzUyaHNfZGV0YWNoLAotCS5jb21tYW5kICAgICAgICA9IHNhYTY3NTJoc19jb21tYW5kLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9CitzdGF0aWMgaW50IHNhYTY3NTJoc19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCS5uYW1lICAgICAgID0gInNhYTY3NTJocyIsCi0JLmRyaXZlciAgICAgPSAmZHJpdmVyLAotfTsKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0ga3phbGxvYyhzaXplb2YoKmgpLCBHRlBfS0VSTkVMKTsKKwl1OCBhZGRyID0gMHgxMzsKKwl1OCBkYXRhWzEyXTsKIAotc3RhdGljIGludCBfX2luaXQgc2FhNjc1MmhzX2luaXRfbW9kdWxlKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZkcml2ZXIpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKwlpZiAoaCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsICZhZGRyLCAxKTsKKwlpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBkYXRhLCBzaXplb2YoZGF0YSkpOworCWgtPmNoaXAgPSBWNEwyX0lERU5UX1NBQTY3NTJIUzsKKwloLT5yZXZpc2lvbiA9IChkYXRhWzhdIDw8IDgpIHwgZGF0YVs5XTsKKwloLT5oYXNfYWMzID0gMDsKKwlpZiAoaC0+cmV2aXNpb24gPT0gMHgwMjA2KSB7CisJCWgtPmNoaXAgPSBWNEwyX0lERU5UX1NBQTY3NTJIU19BQzM7CisJCWgtPmhhc19hYzMgPSAxOworCQl2NGxfaW5mbyhjbGllbnQsICJzdXBwb3J0IEFDLTNcbiIpOworCX0KKwloLT5wYXJhbXMgPSBwYXJhbV9kZWZhdWx0czsKKwloLT5zdGFuZGFyZCA9IDA7IC8qIEFzc3VtZSA2MjUgaW5wdXQgbGluZXMgKi8KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGgpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2FhNjc1MmhzX2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IHNhYTY3NTJoc19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlpMmNfZGVsX2RyaXZlcigmZHJpdmVyKTsKKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJcmV0dXJuIDA7CiB9CiAKLW1vZHVsZV9pbml0KHNhYTY3NTJoc19pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChzYWE2NzUyaHNfY2xlYW51cF9tb2R1bGUpOworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTY3NTJoc19pZFtdID0geworCXsgInNhYTY3NTJocyIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNjc1MmhzX2lkKTsKKworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gInNhYTY3NTJocyIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTY3NTJIUywKKwkuY29tbWFuZCA9IHNhYTY3NTJoc19jb21tYW5kLAorCS5wcm9iZSA9IHNhYTY3NTJoc19wcm9iZSwKKwkucmVtb3ZlID0gc2FhNjc1MmhzX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBzYWE2NzUyaHNfaWQsCit9OwogCiAvKgogICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCA5ODM2NGQxLi5kZGM1NDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTMyNjAsNiArMzI2MCw3IEBACiAJfSwKIAlbU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMF0gPSB7CiAJCS8qIFRob21hcyBHZW50eSA8dG9tbG9oYXZlQGdtYWlsLmNvbT4gKi8KKwkJLyogRGF2aWQgQmVudGhhbSA8ZGIyNjAxNzlAaG90bWFpbC5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMTExMCBEVkItVC9IeWJyaWQiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCkBAIC0zMjY4LDIzICszMjY5LDI2IEBACiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS50dW5lcl9jb25maWcgICA9IDEsCiAJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDIwMDEwMCwKIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV90diwKIAkJCS52bXV4ID0gMSwKIAkJCS5hbXV4ID0gVFYsCiAJCQkudHYgICA9IDEsCi0JCX0sewotCQkJLm5hbWUgICA9IG5hbWVfY29tcDEsCi0JCQkudm11eCAgID0gMywKLQkJCS5hbXV4ICAgPSBMSU5FMiwgLyogRklYTUU6IGF1ZGlvIGRvZXNuJ3Qgd29yayBvbiBzdmlkZW8vY29tcG9zaXRlICovCi0JCX0sewotCQkJLm5hbWUgICA9IG5hbWVfc3ZpZGVvLAotCQkJLnZtdXggICA9IDgsCi0JCQkuYW11eCAgID0gTElORTIsIC8qIEZJWE1FOiBhdWRpbyBkb2Vzbid0IHdvcmsgb24gc3ZpZGVvL2NvbXBvc2l0ZSAqLwotCQl9fSwKKwkJCS5ncGlvID0gMHgwMDAwMTAwLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSB9LAogCQkucmFkaW8gPSB7CiAJCQkubmFtZSA9IG5hbWVfcmFkaW8sCi0JCQkuYW11eCAgID0gVFYsCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDAyMDAxMDAsCiAJCX0sCiAJfSwKIAlbU0FBNzEzNF9CT0FSRF9DSU5FUkdZX0hUX1BDTUNJQV0gPSB7CkBAIC0zMzg4LDYgKzMzOTIsNDIgQEAKIAkJCS5hbXV4ID0gMCwKIAkJfSwKIAl9LAorCVtTQUE3MTM0X0JPQVJEX0VOQ09SRV9FTkxUVl9GTTUzXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkVuY29yZSBFTkxUVi1GTSB2NS4zIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDIwMDAwMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVE5GXzUzMzVNRiwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuZ3Bpb21hc2sJPSAweDcwMDAsCisJCS5pbnB1dHMgICAgICAgICA9IHsgeworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSAxLAorCQkJLnR2ICAgPSAxLAorCQkJLmdwaW8gPSAweDUwMDAwLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IDIsCisJCQkuZ3BpbyA9IDB4MjAwMCwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gMiwKKwkJCS5ncGlvID0gMHgyMDAwLAorCQl9IH0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gMSwKKwkJfSwKKwkJLm11dGUgPSB7CisJCQkubmFtZSA9IG5hbWVfbXV0ZSwKKwkJCS5ncGlvID0gMHhmMDAwLAorCQkJLmFtdXggPSAwLAorCQl9LAorCX0sCiAJW1NBQTcxMzRfQk9BUkRfQ0lORVJHWV9IVF9QQ0ldID0gewogCQkubmFtZSAgICAgICAgICAgPSAiVGVycmF0ZWMgQ2luZXJneSBIVCBQQ0kiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LApAQCAtMzYzMSw2ICszNjcxLDQwIEBACiAJCQkudHYgICAgID0gMSwKIAkJfX0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfTTEzNUFdID0geworCQkubmFtZSAgICAgICAgICAgPSAiQXZlcm1lZGlhIFBDSSBwdXJlIGFuYWxvZyAoTTEzNUEpIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnR1bmVyX2NvbmZpZyAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMjAyMDAwMDAsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IFRWLAorCQkJLnR2ICAgPSAxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSB9LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDAwMjAwMDAwLAorCQl9LAorCQkubXV0ZSA9IHsKKwkJCS5uYW1lID0gbmFtZV9tdXRlLAorCQkJLmFtdXggPSBUViwKKwkJCS5ncGlvID0gMHgwMSwKKwkJfSwKKwl9LAogCVtTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDFdID0gewogCQkvKiAgICAgICBCZWhvbGRlciBJbnRsLiBMdGQuIDIwMDggICAgICAqLwogCQkvKkRtaXRyeSBCZWxpbW92IDxkLmJlbGltb3ZAZ21haWwuY29tPiAqLwpAQCAtNDQwOSw2ICs0NDgzLDEyOSBAQAogCQkvKiBubyBEVkIgc3VwcG9ydCBmb3Igbm93ICovCiAJCS8qIC5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsICovCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RJR0VSXzNJTjFdID0geworCQkubmFtZSAgICAgICAgICAgPSAiQXN1cyBUaWdlciAzaW4xIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnR1bmVyX2NvbmZpZyAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMSA8PCAyMSwKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9jb21wLAorCQkJLnZtdXggPSAwLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTIsCisJCX0gfSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBUViwKKwkJCS5ncGlvID0gMHgwMjAwMDAwLAorCQl9LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfUkVBTF9BTkdFTF8yMjBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiWm9naXMgUmVhbCBBbmdlbCAyMjAiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9UTkZfNTMzNU1GLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmdwaW9tYXNrICAgICAgID0gMHg4MDFhODA4NywKKwkJLmlucHV0cyA9IHsgeworCQkJLm5hbWUgICA9IG5hbWVfdHYsCisJCQkudm11eCAgID0gMywKKwkJCS5hbXV4ICAgPSBMSU5FMiwKKwkJCS50diAgICAgPSAxLAorCQkJLmdwaW8gICA9IDB4NjI0MDAwLAorCQl9LCB7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmFtdXggICA9IExJTkUxLAorCQkJLmdwaW8gICA9IDB4NjI0MDAwLAorCQl9LCB7CisJCQkubmFtZSAgID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCAgID0gMSwKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJCS5ncGlvICAgPSAweDYyNDAwMCwKKwkJfSB9LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSAgID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ICAgPSBMSU5FMiwKKwkJCS5ncGlvICAgPSAweDYyNDAwMSwKKwkJfSwKKwkJLm11dGUgPSB7CisJCQkubmFtZSA9IG5hbWVfbXV0ZSwKKwkJCS5hbXV4ID0gVFYsCisJCX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9IRFRWX1BDSV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJBRFMgVGVjaCBJbnN0YW50IEhEVFYiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1RVVjEyMzZELAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuaW5wdXRzICAgICAgICAgPSB7IHsKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9jb21wLAorCQkJLnZtdXggPSA0LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0gfSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX0FTVVNUZUtfVElHRVJdID0geworCQkubmFtZSAgICAgICAgICAgPSAiQXN1cyBUaWdlciBSZXY6MS4wMCIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkudHVuZXJfY29uZmlnICAgPSAwLAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDAyMDAwMDAsCisJCS5pbnB1dHMgPSB7IHsKKwkJCS5uYW1lICAgPSBuYW1lX3R2LAorCQkJLnZtdXggICA9IDEsCisJCQkuYW11eCAgID0gVFYsCisJCQkudHYgICAgID0gMSwKKwkJfSwgeworCQkJLm5hbWUgICA9IG5hbWVfY29tcDEsCisJCQkudm11eCAgID0gMywKKwkJCS5hbXV4ICAgPSBMSU5FMiwKKwkJfSwgeworCQkJLm5hbWUgICA9IG5hbWVfY29tcDIsCisJCQkudm11eCAgID0gMCwKKwkJCS5hbXV4ICAgPSBMSU5FMiwKKwkJfSwgeworCQkJLm5hbWUgICA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggICA9IDgsCisJCQkuYW11eCAgID0gTElORTIsCisJCX0gfSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgICA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCAgID0gVFYsCisJCQkuZ3BpbyAgID0gMHgwMjAwMDAwLAorCQl9LAorCX0sCiB9OwogCiBjb25zdCB1bnNpZ25lZCBpbnQgc2FhNzEzNF9iY291bnQgPSBBUlJBWV9TSVpFKHNhYTcxMzRfYm9hcmRzKTsKQEAgLTQ3NzcsNiArNDk3NCwxMiBAQAogCiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MTQ2MSwgLyogQXZlcm1lZGlhIFRlY2hub2xvZ2llcyBJbmMgKi8KKwkJLnN1YmRldmljZSAgICA9IDB4ZjExZCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX00xMzVBLAorCX0sIHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMwLAogCQkuc3VidmVuZG9yICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuc3ViZGV2aWNlICAgID0gMHgyMDA0LApAQCAtNTE1Nyw2ICs1MzYwLDEyIEBACiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0VOQ09SRV9FTkxUVl9GTSwKIAl9LHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMwLAorCQkuc3VidmVuZG9yICAgID0gMHgxYTdmLAorCQkuc3ViZGV2aWNlICAgID0gMHgyMDA4LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9FTkNPUkVfRU5MVFZfRk01MywKKwl9LCB7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKIAkJLnN1YnZlbmRvciAgICA9IDB4MTUzYiwKIAkJLnN1YmRldmljZSAgICA9IDB4MTE3NSwKQEAgLTUxODMsOCArNTM5Miw4IEBACiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKIAkJLnN1YnZlbmRvciAgICA9IDB4MTA0MywKLQkJLnN1YmRldmljZSAgICA9IDB4NDg1NywKLQkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9EVUFMLAorCQkuc3ViZGV2aWNlICAgID0gMHg0ODU3LAkJLyogUkVWOjEuMDAgKi8KKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQVNVU1RlS19USUdFUiwKIAl9LHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LApAQCAtNTQxNSw2ICs1NjI0LDEyIEBACiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9UNzUwLAogCX0sIHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLCAvKiBTQUE3MTM1SEwgKi8KKwkJLnN1YnZlbmRvciAgICA9IDB4MTQyMSwKKwkJLnN1YmRldmljZSAgICA9IDB4MDM4MCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQURTX0lOU1RBTlRfSERUVl9QQ0ksCisJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCiAJCS5zdWJ2ZW5kb3IgICAgPSAweDUxNjksCiAJCS5zdWJkZXZpY2UgICAgPSAweDE1MDIsCkBAIC01NDMyLDYgKzU2NDcsMTIgQEAKIAkJLnN1YmRldmljZSAgICA9IDB4ZjYzNiwKIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX00xMDMsCiAJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDEwNDMsCisJCS5zdWJkZXZpY2UgICAgPSAweDQ4NzgsIC8qIFJFVjoxLjAyRyAqLworCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RJR0VSXzNJTjEsCisJfSwgewogCQkvKiAtLS0gYm9hcmRzIHdpdGhvdXQgZWVwcm9tICsgc3Vic3lzdGVtIElEIC0tLSAqLwogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCkBAIC01NTQwLDcgKzU3NjEsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc2FhNzEzNF90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tbWFuZCwgaW50IGFyZykKK2ludCBzYWE3MTM0X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKQogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gcHJpdjsKIAlpZiAoZGV2ICE9IE5VTEwpIHsKQEAgLTU2MjAsNiArNTg0MSw3IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVFVESU9fNTA3OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfR09fMDA3X0ZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfNzc3OgorCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfTTEzNUE6CiAvKiAgICAgIGNhc2UgU0FBNzEzNF9CT0FSRF9TQUJSRU5UX1NCVFRWRk06ICAqLyAvKiBub3QgZmluaXNoZWQgeWV0ICovCiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9UVl9QVlI6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9HT0xEX1BMVVM6CkBAIC01NjQ0LDYgKzU4NjYsNyBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2QVI6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0VOQ09SRV9FTkxUVjoKIAljYXNlIFNBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWX0ZNOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9FTkNPUkVfRU5MVFZfRk01MzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfMTBNT09OU1RWTUFTVEVSMzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzQwMToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzQwMzoKQEAgLTU2NTYsNiArNTg3OSw3IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVGTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN185Rk06CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0dFTklVU19UVkdPX0ExMU1DRToKKwljYXNlIFNBQTcxMzRfQk9BUkRfUkVBTF9BTkdFTF8yMjA6CiAJCWRldi0+aGFzX3JlbW90ZSA9IFNBQTcxMzRfUkVNT1RFX0dQSU87CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJTX0xSMzAwOgpAQCAtNTc0NSw2ICs1OTY5LDcgQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8xMTBpOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV9QQ1RWXzMxMGk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1VQTU9TVF9QVVJQTEVfVFY6CisJY2FzZSBTQUE3MTM0X0JPQVJEX01TSV9UVkFUQU5ZV0hFUkVfUExVUzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF82MDdfOUZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfTTY6CkBAIC01OTg3LDYgKzYyMTIsNyBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV9QQ1RWXzMxMGk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9EVkJUXzIxMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfVEVWSU9OX0RWQlRfMjIwUkY6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfVElHRVI6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9IWUJSSURfTE5BOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9NRURJT05fTUQ4ODAwX1FVQURSTzoKQEAgLTYwMDIsNiArNjIyOCwxNCBAQAogCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOwogCQlicmVhazsKIAl9CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfVElHRVJfM0lOMToKKwl7CisJCXU4IGRhdGFbXSA9IHsgMHgzYywgMHgzMywgMHg2MH07CisJCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkciA9IDB4MGIsIC5mbGFncyA9IDAsIC5idWYgPSBkYXRhLAorCQkJCQkJCS5sZW4gPSBzaXplb2YoZGF0YSl9OworCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCQlicmVhazsKKwl9CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQl9UUklPOgogCXsKIAkJdTggZGF0YVtdID0geyAweDNjLCAweDMzLCAweDYyfTsKQEAgLTYwMjcsNiArNjI2MSw3IEBACiAJCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CiAJCWJyZWFrOwogCX0KKwljYXNlIFNBQTcxMzRfQk9BUkRfQURTX0lOU1RBTlRfSERUVl9QQ0k6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9BVFNDMTEwOgogCXsKIAkJLyogZW5hYmxlIHR1bmVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKaW5kZXggNzVkNjE4NC4uYjY4NmJmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiBpbnQgc2FhNzEzNF9wZ3RhYmxlX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBzYWE3MTM0X3BndGFibGUgKnB0KQogewogCV9fbGUzMiAgICAgICAqY3B1OwotCWRtYV9hZGRyX3QgICBkbWFfYWRkcjsKKwlkbWFfYWRkcl90ICAgZG1hX2FkZHIgPSAwOwogCiAJY3B1ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGNpLCBTQUE3MTM0X1BHVEFCTEVfU0laRSwgJmRtYV9hZGRyKTsKIAlpZiAoTlVMTCA9PSBjcHUpCkBAIC0zNTksMzIgKzM1OSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jayxmbGFncyk7CiB9CiAKLS8qIHJlc2VuZHMgYSBjdXJyZW50IGJ1ZmZlciBpbiBxdWV1ZSBhZnRlciByZXN1bWUgKi8KLQotc3RhdGljIGludCBzYWE3MTM0X2J1ZmZlcl9yZXF1ZXVlKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAotCQkJCSAgc3RydWN0IHNhYTcxMzRfZG1hcXVldWUgKnEpCi17Ci0Jc3RydWN0IHNhYTcxMzRfYnVmICpidWYsICpuZXh0OwotCi0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZkZXYtPnNsb2NrKTsKLQotCWJ1ZiAgPSBxLT5jdXJyOwotCW5leHQgPSBidWY7Ci0JZHByaW50aygiYnVmZmVyX3JlcXVldWVcbiIpOwotCi0JaWYgKCFidWYpCi0JCXJldHVybiAwOwotCi0JZHByaW50aygiYnVmZmVyX3JlcXVldWUgOiByZXNlbmRpbmcgYWN0aXZlIGJ1ZmZlcnMgXG4iKTsKLQotCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWUpKQotCQluZXh0ID0gbGlzdF9lbnRyeShxLT5xdWV1ZS5uZXh0LCBzdHJ1Y3Qgc2FhNzEzNF9idWYsCi0JCQkJCSAgdmIucXVldWUpOwotCWJ1Zi0+YWN0aXZhdGUoZGV2LCBidWYsIG5leHQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBpbnQgc2FhNzEzNF9zZXRfZG1hYml0cyhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKQEAgLTQ0Miw5ICs0MTYsNyBAQAogCS8qIFRTIGNhcHR1cmUgLS0gZG1hIDUgKi8KIAlpZiAoZGV2LT50c19xLmN1cnIpIHsKIAkJY3RybCB8PSBTQUE3MTM0X01BSU5fQ1RSTF9URTU7Ci0JCWlycSAgfD0gU0FBNzEzNF9JUlExX0lOVEVfUkEyXzMgfAotCQkJU0FBNzEzNF9JUlExX0lOVEVfUkEyXzIgfAotCQkJU0FBNzEzNF9JUlExX0lOVEVfUkEyXzEgfAorCQlpcnEgIHw9IFNBQTcxMzRfSVJRMV9JTlRFX1JBMl8xIHwKIAkJCVNBQTcxMzRfSVJRMV9JTlRFX1JBMl8wOwogCX0KIApAQCAtNzI3LDYgKzY5OSwxMCBAQAogCQkJaXJxMl9tYXNrIHw9IFNBQTcxMzRfSVJRMl9JTlRFX0dQSU8xOEE7CiAJfQogCisJaWYgKGRldi0+aGFzX3JlbW90ZSA9PSBTQUE3MTM0X1JFTU9URV9JMkMpIHsKKwkJcmVxdWVzdF9tb2R1bGUoImlyLWtiZC1pMmMiKTsKKwl9CisKIAlzYWFfd3JpdGVsKFNBQTcxMzRfSVJRMSwgMCk7CiAJc2FhX3dyaXRlbChTQUE3MTM0X0lSUTIsIGlycTJfbWFzayk7CiAKQEAgLTExMzksNiArMTExNSwzMiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCisKKy8qIHJlc2VuZHMgYSBjdXJyZW50IGJ1ZmZlciBpbiBxdWV1ZSBhZnRlciByZXN1bWUgKi8KK3N0YXRpYyBpbnQgc2FhNzEzNF9idWZmZXJfcmVxdWV1ZShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKKwkJCQkgIHN0cnVjdCBzYWE3MTM0X2RtYXF1ZXVlICpxKQoreworCXN0cnVjdCBzYWE3MTM0X2J1ZiAqYnVmLCAqbmV4dDsKKworCWFzc2VydF9zcGluX2xvY2tlZCgmZGV2LT5zbG9jayk7CisKKwlidWYgID0gcS0+Y3VycjsKKwluZXh0ID0gYnVmOworCWRwcmludGsoImJ1ZmZlcl9yZXF1ZXVlXG4iKTsKKworCWlmICghYnVmKQorCQlyZXR1cm4gMDsKKworCWRwcmludGsoImJ1ZmZlcl9yZXF1ZXVlIDogcmVzZW5kaW5nIGFjdGl2ZSBidWZmZXJzIFxuIik7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlKSkKKwkJbmV4dCA9IGxpc3RfZW50cnkocS0+cXVldWUubmV4dCwgc3RydWN0IHNhYTcxMzRfYnVmLAorCQkJCQkgIHZiLnF1ZXVlKTsKKwlidWYtPmFjdGl2YXRlKGRldiwgYnVmLCBuZXh0KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNhYTcxMzRfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiAsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCBiZTQ4YjliLi44YzQ2MTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtNTM1LDExICs1MzUsMTYgQEAKIAkJCQlzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnICpjZGVjX2NvbmYsCiAJCQkJc3RydWN0IHRkYTgyN3hfY29uZmlnICp0dW5lcl9jb25mKQogewotCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsIGNkZWNfY29uZiwgJmRldi0+aTJjX2FkYXApOwotCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgeworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlMDsKKworCS8qIEdldCB0aGUgZmlyc3QgZnJvbnRlbmQgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMSk7CisKKwlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLCBjZGVjX2NvbmYsICZkZXYtPmkyY19hZGFwKTsKKwlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKIAkJaWYgKGNkZWNfY29uZi0+aTJjX2dhdGUpCi0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSB0ZGE4MjkwX2kyY19nYXRlX2N0cmw7Ci0JCWlmIChkdmJfYXR0YWNoKHRkYTgyN3hfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IHRkYTgyOTBfaTJjX2dhdGVfY3RybDsKKwkJaWYgKGR2Yl9hdHRhY2godGRhODI3eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJICAgICAgIGNkZWNfY29uZi0+dHVuZXJfYWRkcmVzcywKIAkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCwgdHVuZXJfY29uZikpCiAJCQlyZXR1cm4gMDsKQEAgLTU1Myw3ICs1NTgsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdGRhODI3eF9jb25maWcgdGRhODI3eF9jZmdfMCA9IHsKLQkudHVuZXJfY2FsbGJhY2sgPSBzYWE3MTM0X3R1bmVyX2NhbGxiYWNrLAogCS5pbml0ID0gcGhpbGlwc190ZGE4Mjd4X3R1bmVyX2luaXQsCiAJLnNsZWVwID0gcGhpbGlwc190ZGE4Mjd4X3R1bmVyX3NsZWVwLAogCS5jb25maWcgPSAwLApAQCAtNTYxLDcgKzU2NSw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHRkYTgyN3hfY29uZmlnIHRkYTgyN3hfY2ZnXzEgPSB7Ci0JLnR1bmVyX2NhbGxiYWNrID0gc2FhNzEzNF90dW5lcl9jYWxsYmFjaywKIAkuaW5pdCA9IHBoaWxpcHNfdGRhODI3eF90dW5lcl9pbml0LAogCS5zbGVlcCA9IHBoaWxpcHNfdGRhODI3eF90dW5lcl9zbGVlcCwKIAkuY29uZmlnID0gMSwKQEAgLTU2OSw3ICs1NzIsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB0ZGE4Mjd4X2NvbmZpZyB0ZGE4Mjd4X2NmZ18yID0gewotCS50dW5lcl9jYWxsYmFjayA9IHNhYTcxMzRfdHVuZXJfY2FsbGJhY2ssCiAJLmluaXQgPSBwaGlsaXBzX3RkYTgyN3hfdHVuZXJfaW5pdCwKIAkuc2xlZXAgPSBwaGlsaXBzX3RkYTgyN3hfdHVuZXJfc2xlZXAsCiAJLmNvbmZpZyA9IDIsCkBAIC01NzcsNyArNTc5LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdGRhODI3eF9jb25maWcgdGRhODI3eF9jZmdfMl9zdzQyID0gewotCS50dW5lcl9jYWxsYmFjayA9IHNhYTcxMzRfdHVuZXJfY2FsbGJhY2ssCiAJLmluaXQgPSBwaGlsaXBzX3RkYTgyN3hfdHVuZXJfaW5pdCwKIAkuc2xlZXAgPSBwaGlsaXBzX3RkYTgyN3hfdHVuZXJfc2xlZXAsCiAJLmNvbmZpZyA9IDIsCkBAIC03OTksNiArODAwLDIwIEBACiAJLnJlcXVlc3RfZmlybXdhcmUgPSBwaGlsaXBzX3RkYTEwMDR4X3JlcXVlc3RfZmlybXdhcmUKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnIGFzdXNfdGlnZXJfM2luMV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDBiLAorCS5pbnZlcnQgICAgICAgID0gMSwKKwkuaW52ZXJ0X29jbGsgICA9IDAsCisJLnh0YWxfZnJlcSAgICAgPSBUREExMDA0Nl9YVEFMXzE2TSwKKwkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19UREE4MjdYLAorCS5ncGlvX2NvbmZpZyAgID0gVERBMTAwNDZfR1AxMV9JLAorCS5pZl9mcmVxICAgICAgID0gVERBMTAwNDZfRlJFUV8wNDUsCisJLmkyY19nYXRlICAgICAgPSAweDRiLAorCS50dW5lcl9hZGRyZXNzID0gMHg2MSwKKwkuYW50ZW5uYV9zd2l0Y2ggPSAxLAorCS5yZXF1ZXN0X2Zpcm13YXJlID0gcGhpbGlwc190ZGExMDA0eF9yZXF1ZXN0X2Zpcm13YXJlCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIHNwZWNpYWwgY2FzZTogdGhpcyBjYXJkIHVzZXMgc2FhNzEzeCBHUElPMjIgZm9yIHRoZSBtb2RlIHN3aXRjaAogICovCkBAIC04MjIsNyArODM3LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB0ZGE4Mjd4X2NvbmZpZyBhZHNfZHVvX2NmZyA9IHsKLQkudHVuZXJfY2FsbGJhY2sgPSBzYWE3MTM0X3R1bmVyX2NhbGxiYWNrLAogCS5pbml0ID0gYWRzX2R1b190dW5lcl9pbml0LAogCS5zbGVlcCA9IGFkc19kdW9fdHVuZXJfc2xlZXAsCiAJLmNvbmZpZyA9IDAKQEAgLTkzNSwxMiArOTQ5LDMwIEBACiB7CiAJaW50IHJldDsKIAlpbnQgYXR0YWNoX3hjMzAyOCA9IDA7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwOworCisJLyogRklYTUU6IGFkZCBzdXBwb3J0IGZvciBtdWx0aS1mcm9udGVuZCAqLworCW11dGV4X2luaXQoJmRldi0+ZnJvbnRlbmRzLmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmZyb250ZW5kcy5mZWxpc3QpOworCWRldi0+ZnJvbnRlbmRzLmFjdGl2ZV9mZV9pZCA9IDA7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcygpIGFsbG9jYXRpbmcgMSBmcm9udGVuZFxuIiwgX19mdW5jX18pOworCisJaWYgKHZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDEpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGZhaWxlZCB0byBhbGxvY1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCisJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDEpOworCWlmICghZmUwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGluaXQgc3RydWN0IHZpZGVvYnVmX2R2YiAqLwogCWRldi0+dHMubnJfYnVmcyAgICA9IDMyOwogCWRldi0+dHMubnJfcGFja2V0cyA9IDMyKjQ7Ci0JZGV2LT5kdmIubmFtZSA9IGRldi0+bmFtZTsKLQl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZkZXYtPmR2Yi5kdmJxLCAmc2FhNzEzNF90c19xb3BzLAorCWZlMC0+ZHZiLm5hbWUgPSBkZXYtPm5hbWU7CisJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmUwLT5kdmIuZHZicSwgJnNhYTcxMzRfdHNfcW9wcywKIAkJCSAgICAmZGV2LT5wY2ktPmRldiwgJmRldi0+c2xvY2ssCiAJCQkgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAogCQkJICAgIFY0TDJfRklFTERfQUxURVJOQVRFLApAQCAtOTUwLDQ3ICs5ODIsNDcgQEAKIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfMzAwSV9EVkJUX1BBTDoKIAkJZHByaW50aygicGlubmFjbGUgMzAwaSBkdmIgc2V0dXBcbiIpOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmcGlubmFjbGVfMzAwaSwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJnBpbm5hY2xlXzMwMGksCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IG10MzUyX3Bpbm5hY2xlX3R1bmVyX3NldF9wYXJhbXM7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IG10MzUyX3Bpbm5hY2xlX3R1bmVyX3NldF9wYXJhbXM7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV83Nzc6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BMTZBUjoKIAkJZHByaW50aygiYXZlcnR2IDc3NyBkdmIgc2V0dXBcbiIpOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmYXZlcm1lZGlhXzc3NywKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJmF2ZXJtZWRpYV83NzcsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZkZXYtPmkyY19hZGFwLCAweDYxLAogCQkJCSAgIFRVTkVSX1BISUxJUFNfVEQxMzE2KTsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNkQ6CiAJCWRwcmludGsoIkF2ZXJNZWRpYSBBMTZEIGR2YiBzZXR1cFxuIik7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCiAJCQkJCQkmYXZlcm1lZGlhX3hjMzAyOF9tdDM1Ml9kZXYsCiAJCQkJCQkmZGV2LT5pMmNfYWRhcCk7CiAJCWF0dGFjaF94YzMwMjggPSAxOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfTUQ3MTM0OgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJm1lZGlvbl9jYXJkYnVzLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmZGV2LT5pMmNfYWRhcCwgbWVkaW9uX2NhcmRidXMudHVuZXJfYWRkcmVzcywKIAkJCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RPVUdIOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJnBoaWxpcHNfdHUxMjE2XzYwX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfaW5pdDsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldDsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfaW5pdDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldDsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVERVTzoKQEAgLTEwMDEsMjQgKzEwMzMsMjQgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BISUxJUFNfRVVST1BBOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8zMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCiAJCQkJCSAgICAgICAmcGhpbGlwc19ldXJvcGFfY29uZmlnLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+b3JpZ2luYWxfZGVtb2Rfc2xlZXAgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX2RlbW9kX3NsZWVwOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfZXVyb3BhX3R1bmVyX2luaXQ7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX3R1bmVyX3NsZWVwOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX3NldF9wYXJhbXM7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZGV2LT5vcmlnaW5hbF9kZW1vZF9zbGVlcCA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXA7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwID0gcGhpbGlwc19ldXJvcGFfZGVtb2Rfc2xlZXA7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc19ldXJvcGFfdHVuZXJfaW5pdDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwID0gcGhpbGlwc19ldXJvcGFfdHVuZXJfc2xlZXA7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZDEzMTZfdHVuZXJfc2V0X3BhcmFtczsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJnBoaWxpcHNfdHUxMjE2XzYxX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfaW5pdDsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldDsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfaW5pdDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldDsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX0RWQlRfMjEwOgpAQCAtMTA1NywxNCArMTA4OSwxNCBAQAogCQkJCQkJICZ0ZGE4Mjd4X2NmZ18wKSA8IDApCiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCQl9IGVsc2UgeyAgCQkvKiBzYXRlbGxpdGUgKi8KLQkJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsICZmbHlkdmJzLCAmZGV2LT5pMmNfYWRhcCk7Ci0JCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjMsCisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLCAmZmx5ZHZicywgJmRldi0+aTJjX2FkYXApOworCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAweDYzLAogCQkJCQkJCQkJJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKIAkJCQkJd3ByaW50aygiJXM6IExpZmV2aWV3IFRyaW8sIE5vIHRkYTgyNnggZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKIAkJCQl9Ci0JCQkJaWYgKGR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAmZGV2LT5pMmNfYWRhcCwKKwkJCQlpZiAoZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsICZkZXYtPmkyY19hZGFwLAogCQkJCQkJCQkJCTB4MDgsIDAsIDApID09IE5VTEwpIHsKIAkJCQkJd3ByaW50aygiJXM6IExpZmV2aWV3IFRyaW8sIE5vIElTTDY0MjEgZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKQEAgLTEwNzQsMTEgKzExMDYsMTEgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FEU19EVU9fQ0FSREJVU19QVFYzMzE6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfSFlCUklEX0NBUkRCVVM6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCiAJCQkJCSAgICAgICAmYWRzX3RlY2hfZHVvX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlpZiAoZHZiX2F0dGFjaCh0ZGE4Mjd4X2F0dGFjaCxkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4Mjd4X2F0dGFjaCxmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICBhZHNfdGVjaF9kdW9fY29uZmlnLnR1bmVyX2FkZHJlc3MsICZkZXYtPmkyY19hZGFwLAogCQkJCQkJCQkmYWRzX2R1b19jZmcpID09IE5VTEwpIHsKIAkJCQl3cHJpbnRrKCJubyB0ZGE4Mjd4IHR1bmVyIGZvdW5kIGF0IGFkZHI6ICUwMnhcbiIsCkBAIC0xMDk5LDE1ICsxMTMxLDE1IEBACiAJCQkJCQkgJnRkYTgyN3hfY2ZnXzApIDwgMCkKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCX0gZWxzZSB7ICAgICAgICAvKiBzYXRlbGxpdGUgKi8KLQkJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsCisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLAogCQkJCQkJCSZmbHlkdmJzLCAmZGV2LT5pMmNfYWRhcCk7Ci0JCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSA9IGRldi0+ZHZiLmZyb250ZW5kOworCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBmZTAtPmR2Yi5mcm9udGVuZDsKIAkJCQl1OCBkZXZfaWQgPSBkZXYtPmVlZGF0YVsyXTsKIAkJCQl1OCBkYXRhID0gMHhjNDsKIAkJCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSAweDA4LCAuZmxhZ3MgPSAwLCAubGVuID0gMX07CiAKLQkJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkJMHg2MCwgJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKIAkJCQkJd3ByaW50aygiJXM6IE1lZGlvbiBRdWFkcm8sIG5vIHRkYTgyNnggIgogCQkJCQkJImZvdW5kICFcbiIsIF9fZnVuY19fKTsKQEAgLTExNDEsMzAgKzExNzMsMzEgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0FWRVJUVkhEX0ExODA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwgJmF2ZXJ0dmhkYTE4MCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG54dDIwMHhfYXR0YWNoLCAmYXZlcnR2aGRhMTgwLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpCi0JCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKQorCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsIDB4NjEsCiAJCQkJICAgTlVMTCwgRFZCX1BMTF9UREhVMik7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9IRFRWX1BDSToKIAljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX0FUU0MxMTA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwgJmt3b3JsZGF0c2MxMTAsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwgJmt3b3JsZGF0c2MxMTAsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkKLQkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkKKwkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmRldi0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJICAgVFVORVJfUEhJTElQU19UVVYxMjM2RCk7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJTX0xSMzAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLCAmZmx5ZHZicywKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwgJmZseWR2YnMsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MCwKIAkJCQkgICAgICAgJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKIAkJCQl3cHJpbnRrKCIlczogTm8gdGRhODI2eCBmb3VuZCFcbiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCQl9Ci0JCQlpZiAoZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCQlpZiAoZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgICAgICZkZXYtPmkyY19hZGFwLCAweDA4LCAwLCAwKSA9PSBOVUxMKSB7CiAJCQkJd3ByaW50aygiJXM6IE5vIElTTDY0MjEgZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwpAQCAtMTE3MiwyNSArMTIwNSwyNSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTX0VVUk9QQTJfSFlCUklEOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJm1lZGlvbl9jYXJkYnVzLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+b3JpZ2luYWxfZGVtb2Rfc2xlZXAgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX2RlbW9kX3NsZWVwOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWRldi0+b3JpZ2luYWxfZGVtb2Rfc2xlZXAgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX2RlbW9kX3NsZWVwOwogCi0JCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmZGV2LT5pMmNfYWRhcCwgbWVkaW9uX2NhcmRidXMudHVuZXJfYWRkcmVzcywKIAkJCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDBBOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCSZwaGlsaXBzX2V1cm9wYV9jb25maWcsCiAJCQkJJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX3RkMTMxNl90dW5lcl9pbml0OwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX3NldF9wYXJhbXM7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX2luaXQ7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZDEzMTZfdHVuZXJfc2V0X3BhcmFtczsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQ0lORVJHWV9IVF9QQ01DSUE6CkBAIC0xMjI5LDE1ICsxMjYyLDE1IEBACiAJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX1NOQUtFOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLCAmZmx5ZHZicywKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwgJmZseWR2YnMsCiAJCQkJCQkmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MCwKIAkJCQkJJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKIAkJCQl3cHJpbnRrKCIlczogTm8gdGRhODI2eCBmb3VuZCFcbiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCQl9Ci0JCQlpZiAoZHZiX2F0dGFjaChsbmJwMjFfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCWlmIChkdmJfYXR0YWNoKGxuYnAyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmZGV2LT5pMmNfYWRhcCwgMCwgMCkgPT0gTlVMTCkgewogCQkJCXdwcmludGsoIiVzOiBObyBsbmJwMjEgZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwpAQCAtMTI1OSwyNCArMTI5MiwyNCBAQAogCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjUsIDApOwogCQltc2xlZXAoMTApOwogCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjUsIDEpOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAogCQkJCQkJJmF2ZXJtZWRpYV94YzMwMjhfbXQzNTJfZGV2LAogCQkJCQkJJmRldi0+aTJjX2FkYXApOwogCQlhdHRhY2hfeGMzMDI4ID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX01ENzEzNF9CUklER0VfMjoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwKIAkJCQkJCSZzZDE4NzhfNG0sICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgewogCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7Ci0JCQlpZiAoZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjAsCisJCQlpZiAoZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsIDB4NjAsCiAJCQkJICAmZGV2LT5pMmNfYWRhcCwgRFZCX1BMTF9QSElMSVBTX1NEMTg3OF9UREE4MjYxKSA9PSBOVUxMKSB7CiAJCQkJd3ByaW50aygiJXM6IE1ENzEzNCBEVkItUywgbm8gU0QxODc4ICIKIAkJCQkJImZvdW5kICFcbiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCQl9CiAJCQkvKiB3ZSBuZWVkIHRvIG9wZW4gdGhlIGkyYyBnYXRlICh3ZSBrbm93IGl0IGV4aXN0cykgKi8KLQkJCWZlID0gZGV2LT5kdmIuZnJvbnRlbmQ7CisJCQlmZSA9IGZlMC0+ZHZiLmZyb250ZW5kOwogCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIAkJCWlmIChkdmJfYXR0YWNoKGlzbDY0MDVfYXR0YWNoLCBmZSwKIAkJCQkJJmRldi0+aTJjX2FkYXAsIDB4MDgsIDAsIDApID09IE5VTEwpIHsKQEAgLTEyOTUsMTEgKzEzMjgsNDEgQEAKIAkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI1LCAwKTsKIAkJbXNsZWVwKDEwKTsKIAkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI1LCAxKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJCSZhdmVybWVkaWFfeGMzMDI4X210MzUyX2RldiwKIAkJCQkJCSZkZXYtPmkyY19hZGFwKTsKIAkJYXR0YWNoX3hjMzAyOCA9IDE7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RJR0VSXzNJTjE6CisJCWlmICghdXNlX2Zyb250ZW5kKSB7ICAgICAvKiB0ZXJyZXN0cmlhbCAqLworCQkJaWYgKGNvbmZpZ3VyZV90ZGE4Mjd4X2ZlKGRldiwgJmFzdXNfdGlnZXJfM2luMV9jb25maWcsCisJCQkJCQkJJnRkYTgyN3hfY2ZnXzIpIDwgMCkKKwkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CisJCX0gZWxzZSB7ICAJCS8qIHNhdGVsbGl0ZSAqLworCQkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwKKwkJCQkJCSZmbHlkdmJzLCAmZGV2LT5pMmNfYWRhcCk7CisJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwKKwkJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQkJCQkJJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKKwkJCQkJd3ByaW50aygiJXM6IEFzdXMgVGlnZXIgM2luMSwgbm8gIgorCQkJCQkJInRkYTgyNnggZm91bmQhXG4iLCBfX2Z1bmNfXyk7CisJCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKKwkJCQl9CisJCQkJaWYgKGR2Yl9hdHRhY2gobG5icDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJCQkmZGV2LT5pMmNfYWRhcCwgMCwgMCkgPT0gTlVMTCkgeworCQkJCQl3cHJpbnRrKCIlczogQXN1cyBUaWdlciAzaW4xLCBubyBsbmJwMjEiCisJCQkJCQkiIGZvdW5kIVxuIiwgX19mdW5jX18pOworCQkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RJR0VSOgorCQlpZiAoY29uZmlndXJlX3RkYTgyN3hfZmUoZGV2LCAmcGhpbGlwc190aWdlcl9jb25maWcsCisJCQkJCSAmdGRhODI3eF9jZmdfMCkgPCAwKQorCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOworCQlicmVhazsKIAlkZWZhdWx0OgogCQl3cHJpbnRrKCJIdWg/IHVua25vd24gRFZCIGNhcmQ/XG4iKTsKIAkJYnJlYWs7CkBAIC0xMzEyLDEwICsxMzc1LDEwIEBACiAJCQkuaTJjX2FkZHIgID0gMHg2MSwKIAkJfTsKIAotCQlpZiAoIWRldi0+ZHZiLmZyb250ZW5kKQorCQlpZiAoIWZlMC0+ZHZiLmZyb250ZW5kKQogCQkJcmV0dXJuIC0xOwogCi0JCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CisJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CiAJCWlmICghZmUpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogeGMzMDI4IGF0dGFjaCBmYWlsZWRcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKQEAgLTEzMjMsMzggKzEzODYsNDcgQEAKIAkJfQogCX0KIAotCWlmIChOVUxMID09IGRldi0+ZHZiLmZyb250ZW5kKSB7CisJaWYgKE5VTEwgPT0gZmUwLT5kdmIuZnJvbnRlbmQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy9kdmI6IGZyb250ZW5kIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC0xOwogCX0KKwkvKiBkZWZpbmUgZ2VuZXJhbC1wdXJwb3NlIGNhbGxiYWNrIHBvaW50ZXIgKi8KKwlmZTAtPmR2Yi5mcm9udGVuZC0+Y2FsbGJhY2sgPSBzYWE3MTM0X3R1bmVyX2NhbGxiYWNrOwogCiAJLyogcmVnaXN0ZXIgZXZlcnl0aGluZyBlbHNlICovCi0JcmV0ID0gdmlkZW9idWZfZHZiX3JlZ2lzdGVyKCZkZXYtPmR2YiwgVEhJU19NT0RVTEUsIGRldiwgJmRldi0+cGNpLT5kZXYsCi0JCQkJICAgIGFkYXB0ZXJfbnIpOworCXJldCA9IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMoJmRldi0+ZnJvbnRlbmRzLCBUSElTX01PRFVMRSwgZGV2LAorCQkmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9uciwgMCk7CiAKIAkvKiB0aGlzIHNlcXVlbmNlIGlzIG5lY2Vzc2FyeSB0byBtYWtlIHRoZSB0ZGExMDA0eCBsb2FkIGl0cyBmaXJtd2FyZQogCSAqIGFuZCB0byBlbnRlciBhbmFsb2cgbW9kZSBvZiBoeWJyaWQgYm9hcmRzCiAJICovCiAJaWYgKCFyZXQpIHsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaW5pdCkKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaW5pdChkZXYtPmR2Yi5mcm9udGVuZCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwKQotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcChkZXYtPmR2Yi5mcm9udGVuZCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCkKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwKGRldi0+ZHZiLmZyb250ZW5kKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaW5pdCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaW5pdChmZTAtPmR2Yi5mcm9udGVuZCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwKQorCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcChmZTAtPmR2Yi5mcm9udGVuZCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwKGZlMC0+ZHZiLmZyb250ZW5kKTsKIAl9CiAJcmV0dXJuIHJldDsKIAogZGV0dGFjaF9mcm9udGVuZDoKLQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpCi0JCWR2Yl9mcm9udGVuZF9kZXRhY2goZGV2LT5kdmIuZnJvbnRlbmQpOwotCWRldi0+ZHZiLmZyb250ZW5kID0gTlVMTDsKKwlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCisJCWR2Yl9mcm9udGVuZF9kZXRhY2goZmUwLT5kdmIuZnJvbnRlbmQpOworCWZlMC0+ZHZiLmZyb250ZW5kID0gTlVMTDsKIAogCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBkdmJfZmluaShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTA7CisKKwkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCisJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDEpOworCWlmICghZmUwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIEZJWE1FOiBJIHN1c3BlY3QgdGhhdCB0aGlzIGNvZGUgaXMgYm9ndXMsIHNpbmNlIHRoZSBlbnRyeSBmb3IKIAkgICBQaW5uYWNsZSAzMDBJIERWQi1UIFBBTCBhbHJlYWR5IGRlZmluZXMgdGhlIHByb3BlciBpbml0IHRvIGFsbG93CiAJICAgdGhlIGRldGVjdGlvbiBvZiBtdDIwMzIgKFREQTk4ODdfUE9SVDJfSU5BQ1RJVkUpCkBAIC0xMzc0LDcgKzE0NDYsNyBAQAogCQkJdTggZGF0YSA9IDB4ODA7CiAJCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSAweDA4LCAuYnVmID0gJmRhdGEsIC5mbGFncyA9IDAsIC5sZW4gPSAxfTsKIAkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOwotCQkJZmUgPSBkZXYtPmR2Yi5mcm9udGVuZDsKKwkJCWZlID0gZmUwLT5kdmIuZnJvbnRlbmQ7CiAJCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKSB7CiAJCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIAkJCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOwpAQCAtMTM4Miw4ICsxNDU0LDggQEAKIAkJCX0KIAkJfQogCX0KLQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpCi0JCXZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyKCZkZXYtPmR2Yik7CisJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKQorCQl2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoJmRldi0+ZnJvbnRlbmRzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCmluZGV4IGMwYzVkNzUuLjlhODc2NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPG1lZGlhL3NhYTY3NTJocy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC02MywxMCArNjQsMTkgQEAKIAogc3RhdGljIGludCB0c19pbml0X2VuY29kZXIoc3RydWN0IHNhYTcxMzRfZGV2KiBkZXYpCiB7Ci0Jc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzIGN0cmxzID0geyBWNEwyX0NUUkxfQ0xBU1NfTVBFRywgMCB9OworCXUzMiBsZWFkaW5nX251bGxfYnl0ZXMgPSAwOwogCisJLyogSWYgbW9yZSBjYXJkcyBzdGFydCB0byBuZWVkIHRoaXMsIHRoZW4gdGhpcworCSAgIHNob3VsZCBwcm9iYWJseSBiZSBhZGRlZCB0byB0aGUgY2FyZCBkZWZpbml0aW9ucy4gKi8KKwlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEX002OgorCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfTTYzOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfTTZfRVhUUkE6CisJCWxlYWRpbmdfbnVsbF9ieXRlcyA9IDE7CisJCWJyZWFrOworCX0KIAl0c19yZXNldF9lbmNvZGVyKGRldik7Ci0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfRVhUX0NUUkxTLCAmY3RybHMpOworCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19JTlRfSU5JVCwgJmxlYWRpbmdfbnVsbF9ieXRlcyk7CiAJZGV2LT5lbXByZXNzX3N0YXJ0ZWQgPSAxOwogCXJldHVybiAwOwogfQpAQCAtNzksOSArODksMTEgQEAKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldjsKIAlpbnQgZXJyOwogCisJbG9ja19rZXJuZWwoKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnNhYTcxMzRfZGV2bGlzdCwgZGV2bGlzdCkKIAkJaWYgKGRldi0+ZW1wcmVzc19kZXYgJiYgZGV2LT5lbXByZXNzX2Rldi0+bWlub3IgPT0gbWlub3IpCiAJCQlnb3RvIGZvdW5kOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gLUVOT0RFVjsKICBmb3VuZDoKIApAQCAtMTAzLDYgKzExNSw3IEBACiBkb25lX3VwOgogCW11dGV4X3VubG9jaygmZGV2LT5lbXByZXNzX3RzcS52Yl9sb2NrKTsKIGRvbmU6CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI5MCwxNSArMzAzLDYgQEAKIAlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb2ZmKCZkZXYtPmVtcHJlc3NfdHNxKTsKIH0KIAotc3RhdGljIGludCBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlpZiAoZGV2LT5tcGVnX2kyY19jbGllbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGRldi0+bXBlZ19pMmNfY2xpZW50LT5kcml2ZXItPmNvbW1hbmQoZGV2LT5tcGVnX2kyY19jbGllbnQsCi0JCQkJCQkJCWNtZCwgYXJnKTsKLX0KLQogc3RhdGljIGludCBlbXByZXNzX3NfZXh0X2N0cmxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCiB7CkBAIC00MDAsNiArNDA0LDM5IEBACiAJcmV0dXJuIHNhYTcxMzRfaTJjX2NhbGxfc2FhNjc1MihkZXYsIFZJRElPQ19RVUVSWU1FTlUsIGMpOwogfQogCitzdGF0aWMgaW50IGVtcHJlc3NfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkgICAgICAgc3RydWN0IHY0bDJfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9OT05FOworCWNoaXAtPnJldmlzaW9uID0gMDsKKwlpZiAoZGV2LT5tcGVnX2kyY19jbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNoaXAtPm1hdGNoX3R5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVIgJiYKKwkgICAgY2hpcC0+bWF0Y2hfY2hpcCA9PSBJMkNfRFJJVkVSSURfU0FBNjc1MkhTKQorCQlyZXR1cm4gc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX0dfQ0hJUF9JREVOVCwgY2hpcCk7CisJaWYgKGNoaXAtPm1hdGNoX3R5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSICYmCisJICAgIGNoaXAtPm1hdGNoX2NoaXAgPT0gZGV2LT5tcGVnX2kyY19jbGllbnQtPmFkZHIpCisJCXJldHVybiBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfR19DSElQX0lERU5ULCBjaGlwKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBlbXByZXNzX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqaWQpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gc2FhNzEzNF9zX3N0ZF9pbnRlcm5hbChkZXYsIE5VTEwsIGlkKTsKK30KKworc3RhdGljIGludCBlbXByZXNzX2dfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqaWQpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkqaWQgPSBkZXYtPnR2bm9ybS0+aWQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRzX2ZvcHMgPQogewogCS5vd25lcgkgID0gVEhJU19NT0RVTEUsCkBAIC00MjgsMTEgKzQ2NSwxMyBAQAogCS52aWRpb2NfZW51bV9pbnB1dAkJPSBlbXByZXNzX2VudW1faW5wdXQsCiAJLnZpZGlvY19nX2lucHV0CQkJPSBlbXByZXNzX2dfaW5wdXQsCiAJLnZpZGlvY19zX2lucHV0CQkJPSBlbXByZXNzX3NfaW5wdXQsCi0KIAkudmlkaW9jX3F1ZXJ5Y3RybAkJPSBlbXByZXNzX3F1ZXJ5Y3RybCwKIAkudmlkaW9jX3F1ZXJ5bWVudQkJPSBlbXByZXNzX3F1ZXJ5bWVudSwKIAkudmlkaW9jX2dfY3RybAkJCT0gZW1wcmVzc19nX2N0cmwsCiAJLnZpZGlvY19zX2N0cmwJCQk9IGVtcHJlc3Nfc19jdHJsLAorCS52aWRpb2NfZ19jaGlwX2lkZW50IAkJPSBlbXByZXNzX2dfY2hpcF9pZGVudCwKKwkudmlkaW9jX3Nfc3RkCQkJPSBlbXByZXNzX3Nfc3RkLAorCS52aWRpb2NfZ19zdGQJCQk9IGVtcHJlc3NfZ19zdGQsCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYwppbmRleCA1ZjcxM2U2Li4yMGMxYjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYwpAQCAtMzM3LDYgKzMzNyw3IEBACiAJCWNhc2UgMHg0NzoKIAkJY2FzZSAweDcxOgogCQljYXNlIDB4MmQ6CisJCWNhc2UgMHgzMDoKIAkJewogCQkJc3RydWN0IElSX2kyYyAqaXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAkJCWQxcHJpbnRrKCIlcyBpMmMgSVIgZGV0ZWN0ZWQgKCVzKS5cbiIsCkBAIC00MjcsNiArNDI4LDE2IEBACiAJaTJjX2NsaWVudHNfY29tbWFuZCgmZGV2LT5pMmNfYWRhcCwgY21kLCBhcmcpOwogfQogCitpbnQgc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJaWYgKGRldi0+bXBlZ19pMmNfY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBkZXYtPm1wZWdfaTJjX2NsaWVudC0+ZHJpdmVyLT5jb21tYW5kKGRldi0+bXBlZ19pMmNfY2xpZW50LAorCQkJCQkJCQljbWQsIGFyZyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIpOworCiBpbnQgc2FhNzEzNF9pMmNfcmVnaXN0ZXIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7CiAJZGV2LT5pMmNfYWRhcCA9IHNhYTcxMzRfYWRhcF90ZW1wbGF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCmluZGV4IGFkMDhkMTMuLmM1M2ZkNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYwpAQCAtNjIsOCArNjIsMTEgQEAKICNkZWZpbmUgaTJjZHByaW50ayhmbXQsIGFyZy4uLikgICAgaWYgKGlyX2RlYnVnKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzL2lyOiAiIGZtdCwgaXItPmMubmFtZSAsICMjIGFyZykKIAotLyoqIHJjNSBmdW5jdGlvbnMgKi8KKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIFJDNSBhbmQgTkVDIGRlY29kaW5nIGF0IEdQSU8xNiBvciBHUElPMTggKi8KIHN0YXRpYyBpbnQgc2FhNzEzNF9yYzVfaXJxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKK3N0YXRpYyBpbnQgc2FhNzEzNF9uZWNfaXJxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKK3N0YXRpYyB2b2lkIG5lY190YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBzYWE3MTM0X25lY190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBHUElPIGdlbmVyaWMga2V5Y29kZSBidWlsZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTExNSw2ICsxMTgsNTMgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENoaXAgc3BlY2lmaWMgSTJDIGtleSBidWlsZGVycyAtLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgaW50IGdldF9rZXlfbXNpX3R2YW55d2hlcmVfcGx1cyhzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksCisJCQkJICAgICAgIHUzMiAqaXJfcmF3KQoreworCXVuc2lnbmVkIGNoYXIgYjsKKwlpbnQgZ3BpbzsKKworCS8qIDxkZXY+IGlzIG5lZWRlZCB0byBhY2Nlc3MgR1BJTy4gVXNlZCBieSB0aGUgc2FhX3JlYWRsIG1hY3JvLiAqLworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gaXItPmMuYWRhcHRlci0+YWxnb19kYXRhOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlkcHJpbnRrKCJnZXRfa2V5X21zaV90dmFueXdoZXJlX3BsdXM6ICIKKwkJCSJnaXItPmMuYWRhcHRlci0+YWxnb19kYXRhIGlzIE5VTEwhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogcmlzaW5nIFNBQTcxMzRfR1BJT19HUFJFU0NBTiByZWFkcyB0aGUgc3RhdHVzICovCisKKwlzYWFfY2xlYXJiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCisJZ3BpbyA9IHNhYV9yZWFkbChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIpOworCisJLyogR1BJTyYweDQwIGlzIHB1bHNlZCBsb3cgd2hlbiBhIGJ1dHRvbiBpcyBwcmVzc2VkLiBEb24ndCBkbworCSAgIEkyQyByZWNlaXZlIGlmIGdwaW8mMHg0MCBpcyBub3QgbG93LiAqLworCisJaWYgKGdwaW8gJiAweDQwKQorCQlyZXR1cm4gMDsgICAgICAgLyogTm8gYnV0dG9uIHByZXNzICovCisKKwkvKiBHUElPIHNheXMgdGhlcmUgaXMgYSBidXR0b24gcHJlc3MuIEdldCBpdC4gKi8KKworCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsICZiLCAxKSkgeworCQlpMmNkcHJpbnRrKCJyZWFkIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogTm8gYnV0dG9uIHByZXNzICovCisKKwlpZiAoYiA9PSAweGZmKQorCQlyZXR1cm4gMDsKKworCS8qIEJ1dHRvbiBwcmVzc2VkICovCisKKwlkcHJpbnRrKCJnZXRfa2V5X21zaV90dmFueXdoZXJlX3BsdXM6IEtleSA9IDB4JTAyWFxuIiwgYik7CisJKmlyX2tleSA9IGI7CisJKmlyX3JhdyA9IGI7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X2tleV9wdXJwbGV0dihzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQogewogCXVuc2lnbmVkIGNoYXIgYjsKQEAgLTI4MCw3ICszMzAsOSBAQAogewogCXN0cnVjdCBjYXJkX2lyICppciA9IGRldi0+cmVtb3RlOwogCi0JaWYgKCFpci0+cG9sbGluZyAmJiAhaXItPnJjNV9ncGlvKSB7CisJaWYgKGlyLT5uZWNfZ3BpbykgeworCQlzYWE3MTM0X25lY19pcnEoZGV2KTsKKwl9IGVsc2UgaWYgKCFpci0+cG9sbGluZyAmJiAhaXItPnJjNV9ncGlvKSB7CiAJCWJ1aWxkX2tleShkZXYpOwogCX0gZWxzZSBpZiAoaXItPnJjNV9ncGlvKSB7CiAJCXNhYTcxMzRfcmM1X2lycShkZXYpOwpAQCAtMzE2LDYgKzM2OCwxMCBAQAogCQlpci0+YWRkciA9IDB4MTc7CiAJCWlyLT5yYzVfa2V5X3RpbWVvdXQgPSBpcl9yYzVfa2V5X3RpbWVvdXQ7CiAJCWlyLT5yYzVfcmVtb3RlX2dhcCA9IGlyX3JjNV9yZW1vdGVfZ2FwOworCX0gZWxzZSBpZiAoaXItPm5lY19ncGlvKSB7CisJCXNldHVwX3RpbWVyKCZpci0+dGltZXJfa2V5dXAsIHNhYTcxMzRfbmVjX3RpbWVyLAorCQkJICAgICh1bnNpZ25lZCBsb25nKWRldik7CisJCXRhc2tsZXRfaW5pdCgmaXItPnRsZXQsIG5lY190YXNrLCAodW5zaWduZWQgbG9uZylkZXYpOwogCX0KIH0KIApAQCAtMzM1LDYgKzM5MSw3IEBACiAJdTMyIG1hc2tfa2V5dXAgICA9IDA7CiAJaW50IHBvbGxpbmcgICAgICA9IDA7CiAJaW50IHJjNV9ncGlvCSA9IDA7CisJaW50IG5lY19ncGlvCSA9IDA7CiAJaW50IGlyX3R5cGUgICAgICA9IElSX1RZUEVfT1RIRVI7CiAJaW50IGVycjsKIApAQCAtMzkxLDYgKzQ0OCwxMiBAQAogCQlzYWFfc2V0YihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHg0KTsKIAkJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgMHg0KTsKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9NMTM1QToKKwkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhOworCQltYXNrX2tleWRvd24gPSAweDAwNDAwMDA7CisJCW1hc2tfa2V5Y29kZSA9IDB4MDAwMTNmOworCQluZWNfZ3BpbyAgICAgPSAxOworCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBXzc3NzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNkFSOgogCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19hdmVybWVkaWE7CkBAIC00OTksNiArNTYyLDEyIEBACiAJCW1hc2tfa2V5dXAgICA9IDB4MDQwMDAwOwogCQlwb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0VOQ09SRV9FTkxUVl9GTTUzOgorCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19lbmNvcmVfZW5sdHZfZm01MzsKKwkJbWFza19rZXlkb3duID0gMHgwMDQwMDAwOworCQltYXNrX2tleWNvZGUgPSAweDAwMDA3ZjsKKwkJbmVjX2dwaW8gPSAxOworCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfMTBNT09OU1RWTUFTVEVSMzoKIAkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfZW5jb3JlX2VubHR2OwogCQltYXNrX2tleWNvZGUgPSAweDVmODAwMDA7CkBAIC01MTEsNiArNTgwLDEyIEBACiAJCW1hc2tfa2V5ZG93biA9IDB4ZjAwMDAwOwogCQlwb2xsaW5nID0gNTA7IC8qIG1zICovCiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9SRUFMX0FOR0VMXzIyMDoKKwkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfcmVhbF9hdWRpb18yMjBfMzJfa2V5czsKKwkJbWFza19rZXljb2RlID0gMHgzZjAwOworCQltYXNrX2tleXVwICAgPSAweDQwMDA7CisJCXBvbGxpbmcgPSA1MDsgLyogbXMgKi8KKwkJYnJlYWs7CiAJfQogCWlmIChOVUxMID09IGlyX2NvZGVzKSB7CiAJCXByaW50aygiJXM6IE9vcHM6IElSIGNvbmZpZyBlcnJvciBbY2FyZD0lZF1cbiIsCkBAIC01MzMsNiArNjA4LDcgQEAKIAlpci0+bWFza19rZXl1cCAgID0gbWFza19rZXl1cDsKIAlpci0+cG9sbGluZyAgICAgID0gcG9sbGluZzsKIAlpci0+cmM1X2dwaW8JID0gcmM1X2dwaW87CisJaXItPm5lY19ncGlvCSA9IG5lY19ncGlvOwogCiAJLyogaW5pdCBpbnB1dCBkZXZpY2UgKi8KIAlzbnByaW50Zihpci0+bmFtZSwgc2l6ZW9mKGlyLT5uYW1lKSwgInNhYTcxMzQgSVIgKCVzKSIsCkBAIC02MTIsNiArNjg4LDExIEBACiAJCWlyLT5nZXRfa2V5ICAgPSBnZXRfa2V5X3B1cnBsZXR2OwogCQlpci0+aXJfY29kZXMgID0gaXJfY29kZXNfcHVycGxldHY7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9NU0lfVFZBVEFOWVdIRVJFX1BMVVM6CisJCXNucHJpbnRmKGlyLT5jLm5hbWUsIHNpemVvZihpci0+Yy5uYW1lKSwgIk1TSSBUVkBueXdoZXJlIFBsdXMiKTsKKwkJaXItPmdldF9rZXkgID0gZ2V0X2tleV9tc2lfdHZhbnl3aGVyZV9wbHVzOworCQlpci0+aXJfY29kZXMgPSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZV9wbHVzOworCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTA6CiAJCXNucHJpbnRmKGlyLT5jLm5hbWUsIHNpemVvZihpci0+Yy5uYW1lKSwgIkhWUiAxMTEwIik7CiAJCWlyLT5nZXRfa2V5ICAgPSBnZXRfa2V5X2h2cjExMTA7CkBAIC02NzUsOCArNzU2LDEyNSBAQAogCXJldHVybiAxOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgorCisvKiBPbiBORUMgcHJvdG9jb2wsIE9uZSBoYXMgMi4yNSBtcywgYW5kIHplcm8gaGFzIDEuMTI1IG1zCisgICBUaGUgZmlyc3QgcHVsc2UgKHN0YXJ0KSBoYXMgOSArIDQuNSBtcwogICovCisKK3N0YXRpYyB2b2lkIHNhYTcxMzRfbmVjX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKikgZGF0YTsKKwlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBkZXYtPnJlbW90ZTsKKworCWRwcmludGsoIkNhbmNlbCBrZXkgcmVwZWF0XG4iKTsKKworCWlyX2lucHV0X25va2V5KGlyLT5kZXYsICZpci0+aXIpOworfQorCitzdGF0aWMgdm9pZCBuZWNfdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSAoc3RydWN0IHNhYTcxMzRfZGV2ICopIGRhdGE7CisJc3RydWN0IGNhcmRfaXIgKmlyOworCXN0cnVjdCB0aW1ldmFsIHR2OworCWludCBjb3VudCwgcHVsc2UsIG9sZHB1bHNlLCBnYXA7CisJdTMyIGlyY29kZSA9IDAsIG5vdF9jb2RlID0gMDsKKwlpbnQgbmdhcCA9IDA7CisKKwlpZiAoIWRhdGEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzYWE3MTN4L2lyOiBDYW4ndCByZWNvdmVyIGRldiBzdHJ1Y3RcbiIpOworCQkvKiBHUElPIHdpbGwgYmUga2VwdCBkaXNhYmxlZCAqLworCQlyZXR1cm47CisJfQorCisJaXIgPSBkZXYtPnJlbW90ZTsKKworCS8qIHJpc2luZyBTQUE3MTM0X0dQSU9fR1BSRVNDQU4gcmVhZHMgdGhlIHN0YXR1cyAqLworCXNhYV9jbGVhcmIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CisJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CisKKwlvbGRwdWxzZSA9IHNhYV9yZWFkbChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIpICYgaXItPm1hc2tfa2V5ZG93bjsKKwlwdWxzZSA9IG9sZHB1bHNlOworCisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisJaXItPmJhc2VfdGltZSA9IHR2OworCisJLyogRGVjb2RlIE5FQyBwdWxzZWNvZGUuIFRoaXMgY29kZSBjYW4gdGFrZSB1cCB0byA3Ni41IG1zIHRvIHJ1bi4KKwkgICBVbmZvcnR1bmF0ZWx5LCB1c2luZyBJUlEgdG8gZGVjb2RlIHB1bHNlIGRpZG4ndCB3b3JrLCBzaW5jZSBpdCB1c2VzCisJICAgYSBwdWxzZSB0cmFpbiBvZiAzOEtIei4gVGhpcyBtZWFucyBvbmUgcHVsc2Ugb24gZWFjaCA1MiB1cworCSAqLworCWRvIHsKKwkJLyogV2FpdCB1bnRpbCB0aGUgZW5kIG9mIHB1bHNlL3NwYWNlIG9yIDUgbXMgKi8KKwkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgNTAwOyBjb3VudCsrKSAgeworCQkJdWRlbGF5KDEwKTsKKwkJCS8qIHJpc2luZyBTQUE3MTM0X0dQSU9fR1BSRVNDQU4gcmVhZHMgdGhlIHN0YXR1cyAqLworCQkJc2FhX2NsZWFyYihTQUE3MTM0X0dQSU9fR1BNT0RFMywgU0FBNzEzNF9HUElPX0dQUkVTQ0FOKTsKKwkJCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCQkJcHVsc2UgPSBzYWFfcmVhZGwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyKQorCQkJCSYgaXItPm1hc2tfa2V5ZG93bjsKKwkJCWlmIChwdWxzZSAhPSBvbGRwdWxzZSkKKwkJCQlicmVhazsKKwkJfQorCisJCWRvX2dldHRpbWVvZmRheSgmdHYpOworCQlnYXAgPSAxMDAwMDAwICogKHR2LnR2X3NlYyAtIGlyLT5iYXNlX3RpbWUudHZfc2VjKSArCisJCQkJdHYudHZfdXNlYyAtIGlyLT5iYXNlX3RpbWUudHZfdXNlYzsKKworCQlpZiAoIXB1bHNlKSB7CisJCQkvKiBCaXQgMCBoYXMgNTYwIHVzLCB3aGlsZSBiaXQgMSBoYXMgMTEyMCB1cy4KKwkJCSAgIERvIHNvbWV0aGluZyBvbmx5IGlmIGJpdCA9PSAxCisJCQkgKi8KKwkJCWlmIChuZ2FwICYmIChnYXAgPiA1NjAgKyAyODApKSB7CisJCQkJdW5zaWduZWQgaW50IHNoaWZ0ID0gbmdhcCAtIDE7CisKKwkJCQkvKiBBZGRyZXNzIGZpcnN0LCB0aGVuIGNvbW1hbmQgKi8KKwkJCQlpZiAoc2hpZnQgPCA4KSB7CisJCQkJCXNoaWZ0ICs9IDg7CisJCQkJCWlyY29kZSB8PSAxIDw8IHNoaWZ0OworCQkJCX0gZWxzZSBpZiAoc2hpZnQgPCAxNikgeworCQkJCQlub3RfY29kZSB8PSAxIDw8IHNoaWZ0OworCQkJCX0gZWxzZSBpZiAoc2hpZnQgPCAyNCkgeworCQkJCQlzaGlmdCAtPSAxNjsKKwkJCQkJaXJjb2RlIHw9IDEgPDwgc2hpZnQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJc2hpZnQgLT0gMjQ7CisJCQkJCW5vdF9jb2RlIHw9IDEgPDwgc2hpZnQ7CisJCQkJfQorCQkJfQorCQkJbmdhcCsrOworCQl9CisKKworCQlpci0+YmFzZV90aW1lID0gdHY7CisKKwkJLyogVElNRU9VVCAtIExvbmcgcHVsc2UgKi8KKwkJaWYgKGdhcCA+PSA1MDAwKQorCQkJYnJlYWs7CisJCW9sZHB1bHNlID0gcHVsc2U7CisJfSB3aGlsZSAobmdhcCA8IDMyKTsKKworCWlmIChuZ2FwID09IDMyKSB7CisJCS8qIEZJWE1FOiBzaG91bGQgY2hlY2sgaWYgbm90X2NvZGUgPT0gfmlyY29kZSAqLworCQlpci0+Y29kZSA9IGlyX2V4dHJhY3RfYml0cyhpcmNvZGUsIGlyLT5tYXNrX2tleWNvZGUpOworCisJCWRwcmludGsoInNjYW5jb2RlID0gMHglMDJ4IChjb2RlID0gMHglMDJ4LCBub3Rjb2RlPSAweCUwMngpXG4iLAorCQkJIGlyLT5jb2RlLCBpcmNvZGUsIG5vdF9jb2RlKTsKKworCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5kZXYsICZpci0+aXIsIGlyLT5jb2RlLCBpci0+Y29kZSk7CisJfSBlbHNlCisJCWRwcmludGsoIlJlcGVhdCBsYXN0IGtleVxuIik7CisKKwkvKiBLZWVwIHJlcGVhdGluZyB0aGUgbGFzdCBrZXkgKi8KKwltb2RfdGltZXIoJmlyLT50aW1lcl9rZXl1cCwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTUwKSk7CisKKwlzYWFfc2V0bChTQUE3MTM0X0lSUTIsIFNBQTcxMzRfSVJRMl9JTlRFX0dQSU8xOCk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF9uZWNfaXJxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQoreworCXN0cnVjdCBjYXJkX2lyICppciA9IGRldi0+cmVtb3RlOworCisJc2FhX2NsZWFybChTQUE3MTM0X0lSUTIsIFNBQTcxMzRfSVJRMl9JTlRFX0dQSU8xOCk7CisJdGFza2xldF9zY2hlZHVsZSgmaXItPnRsZXQpOworCisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYwppbmRleCBlYWU3MmZkLi5lZjU1YTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKQEAgLTY2LDExICs2NiwyOSBAQAogCXNhYTcxMzRfc2V0X2RtYWJpdHMoZGV2KTsKIAogCW1vZF90aW1lcigmZGV2LT50c19xLnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOworCisJaWYgKGRldi0+dHNfc3RhdGUgPT0gU0FBNzEzNF9UU19CVUZGX0RPTkUpIHsKKwkJLyogQ2xlYXIgVFMgY2FjaGUgKi8KKwkJZGV2LT5idWZmX2NudCA9IDA7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwxLCAweDAwKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDMpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMSwgMHgwMCk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwxLCAweDAxKTsKKworCQkvKiBUUyBjbG9jayBub24taW52ZXJ0ZWQgKi8KKwkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDApOworCisJCS8qIFN0YXJ0IFRTIHN0cmVhbSAqLworCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMCwgMHg0MCk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhFQyk7CisJCWRldi0+dHNfc3RhdGUgPSBTQUE3MTM0X1RTX1NUQVJURUQ7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYnVmZmVyX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKLQkJCSAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQorCQllbnVtIHY0bDJfZmllbGQgZmllbGQpCiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBxLT5wcml2X2RhdGE7CiAJc3RydWN0IHNhYTcxMzRfYnVmICpidWYgPSBjb250YWluZXJfb2YodmIsc3RydWN0IHNhYTcxMzRfYnVmLHZiKTsKQEAgLTExMCwxNiArMTI4LDIyIEBACiAJCQlnb3RvIG9vcHM7CiAJfQogCi0JLyogZG1hOiBzZXR1cCBjaGFubmVsIDUgKD0gVFMpICovCi0JY29udHJvbCA9IFNBQTcxMzRfUlNfQ09OVFJPTF9CVVJTVF8xNiB8Ci0JCSAgU0FBNzEzNF9SU19DT05UUk9MX01FIHwKLQkJICAoYnVmLT5wdC0+ZG1hID4+IDEyKTsKKwlkZXYtPmJ1ZmZfY250Kys7CiAKLQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfRE1BMCwgKChsaW5lcy0xKSYweGZmKSk7Ci0Jc2FhX3dyaXRlYihTQUE3MTM0X1RTX0RNQTEsICgoKGxpbmVzLTEpPj44KSYweGZmKSk7Ci0Jc2FhX3dyaXRlYihTQUE3MTM0X1RTX0RNQTIsICgoKChsaW5lcy0xKT4+MTYpJjB4M2YpIHwgMHgwMCkpOyAvKiBUU05PUElUPTAsIFRTQ09MQVA9MCAqLwotCXNhYV93cml0ZWwoU0FBNzEzNF9SU19QSVRDSCg1KSxUU19QQUNLRVRfU0laRSk7Ci0Jc2FhX3dyaXRlbChTQUE3MTM0X1JTX0NPTlRST0woNSksY29udHJvbCk7CisJaWYgKGRldi0+YnVmZl9jbnQgPT0gZGV2LT50cy5ucl9idWZzKSB7CisJCWRldi0+dHNfc3RhdGUgPSBTQUE3MTM0X1RTX0JVRkZfRE9ORTsKKwkJLyogZG1hOiBzZXR1cCBjaGFubmVsIDUgKD0gVFMpICovCisJCWNvbnRyb2wgPSBTQUE3MTM0X1JTX0NPTlRST0xfQlVSU1RfMTYgfAorCQkJU0FBNzEzNF9SU19DT05UUk9MX01FIHwKKwkJCShidWYtPnB0LT5kbWEgPj4gMTIpOworCisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19ETUEwLCAobGluZXMgLSAxKSAmIDB4ZmYpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfRE1BMSwgKChsaW5lcyAtIDEpID4+IDgpICYgMHhmZik7CisJCS8qIFRTTk9QSVQ9MCwgVFNDT0xBUD0wICovCisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19ETUEyLCAoKChsaW5lcyAtIDEpID4+IDE2KSAmIDB4M2YpIHwgMHgwMCk7CisJCXNhYV93cml0ZWwoU0FBNzEzNF9SU19QSVRDSCg1KSwgVFNfUEFDS0VUX1NJWkUpOworCQlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQ09OVFJPTCg1KSwgY29udHJvbCk7CisJfQogCiAJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOwogCWJ1Zi0+YWN0aXZhdGUgPSBidWZmZXJfYWN0aXZhdGU7CkBAIC0xNDAsNiArMTY0LDggQEAKIAlpZiAoMCA9PSAqY291bnQpCiAJCSpjb3VudCA9IGRldi0+dHMubnJfYnVmczsKIAkqY291bnQgPSBzYWE3MTM0X2J1ZmZlcl9jb3VudCgqc2l6ZSwqY291bnQpOworCWRldi0+YnVmZl9jbnQgPSAwOworCWRldi0+dHNfc3RhdGUgPSBTQUE3MTM0X1RTX1NUT1BQRUQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1NCw3ICsxODAsMTMgQEAKIHN0YXRpYyB2b2lkIGJ1ZmZlcl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCiB7CiAJc3RydWN0IHNhYTcxMzRfYnVmICpidWYgPSBjb250YWluZXJfb2YodmIsc3RydWN0IHNhYTcxMzRfYnVmLHZiKTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHEtPnByaXZfZGF0YTsKIAorCWlmIChkZXYtPnRzX3N0YXRlID09IFNBQTcxMzRfVFNfU1RBUlRFRCkgeworCQkvKiBTdG9wIFRTIHRyYW5zcG9ydCAqLworCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfUEFSQUxMRUwsIDB4NmMpOworCQlkZXYtPnRzX3N0YXRlID0gU0FBNzEzNF9UU19TVE9QUEVEOworCX0KIAlzYWE3MTM0X2RtYV9mcmVlKHEsYnVmKTsKIH0KIApAQCAtMTgyLDcgKzIxNCw3IEBACiAJLyogZGVhY3RpdmF0ZSBUUyBzb2Z0cmVzZXQgKi8KIAlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMSwgMHgwMCk7CiAJLyogVFNTT1AgaGlnaCBhY3RpdmUsIFRTVkFMIGhpZ2ggYWN0aXZlLCBUU0xPQ0sgaWdub3JlZCAqLwotCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhlYyk7CisJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweDZjKTsKIAlzYWFfd3JpdGViKFNBQTcxMzRfVFNfUEFSQUxMRUxfU0VSSUFMLCAoVFNfUEFDS0VUX1NJWkUtMSkpOwogCXNhYV93cml0ZWIoU0FBNzEzNF9UU19ETUEwLCAoKGRldi0+dHMubnJfcGFja2V0cy0xKSYweGZmKSk7CiAJc2FhX3dyaXRlYihTQUE3MTM0X1RTX0RNQTEsICgoKGRldi0+dHMubnJfcGFja2V0cy0xKT4+OCkmMHhmZikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKaW5kZXggNjhjMjY4OS4uMDJiYjY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCkBAIC02MjgsNiArNjI4LDkgQEAKIAogCWlmIChjYXJkX2luKGRldiwgZGV2LT5jdGxfaW5wdXQpLnR2KQogCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU19TVEQsICZkZXYtPnR2bm9ybS0+aWQpOworCS8qIFNldCB0aGUgY29ycmVjdCBub3JtIGZvciB0aGUgc2FhNjc1MmhzLiBUaGlzIGZ1bmN0aW9uCisJICAgZG9lcyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIHNhYTY3NTJocy4gKi8KKwlzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfU19TVEQsICZkZXYtPnR2bm9ybS0+aWQpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfaF9wcmVzY2FsZShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgaW50IHRhc2ssIGludCBwcmVzY2FsZSkKQEAgLTEzMzAsNiArMTMzMyw4IEBACiAJc3RydWN0IHNhYTcxMzRfZmggKmZoOwogCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWludCByYWRpbyA9IDA7CisKKwlsb2NrX2tlcm5lbCgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmc2FhNzEzNF9kZXZsaXN0LCBkZXZsaXN0KSB7CiAJCWlmIChkZXYtPnZpZGVvX2RldiAmJiAoZGV2LT52aWRlb19kZXYtPm1pbm9yID09IG1pbm9yKSkKIAkJCWdvdG8gZm91bmQ7CkBAIC0xMzQyLDYgKzEzNDcsNyBAQAogCQkJZ290byBmb3VuZDsKIAkJfQogCX0KKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIC1FTk9ERVY7CiAgZm91bmQ6CiAKQEAgLTEzNTAsOCArMTM1NiwxMCBAQAogCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJZmgtPmRldiAgICAgID0gZGV2OwogCWZoLT5yYWRpbyAgICA9IHJhZGlvOwpAQCAtMTM4NCw2ICsxMzkyLDcgQEAKIAkJLyogc3dpdGNoIHRvIHZpZGVvL3ZiaSBtb2RlICovCiAJCXZpZGVvX211eChkZXYsZGV2LT5jdGxfaW5wdXQpOwogCX0KKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3OTAsMTggKzE3OTksMjUgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzEzNF9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKmlkKQoraW50IHNhYTcxMzRfc19zdGRfaW50ZXJuYWwoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIHN0cnVjdCBzYWE3MTM0X2ZoICpmaCwgdjRsMl9zdGRfaWQgKmlkKQogewotCXN0cnVjdCBzYWE3MTM0X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGk7CiAJdjRsMl9zdGRfaWQgZml4dXA7CiAJaW50IGVycjsKIAotCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOwotCWlmICgwICE9IGVycikKLQkJcmV0dXJuIGVycjsKKwkvKiBXaGVuIGNhbGxlZCBmcm9tIHRoZSBlbXByZXNzIGNvZGUgZmggPT0gTlVMTC4KKwkgICBUaGF0IG5lZWRzIHRvIGJlIGZpeGVkIHNvbWVob3csIGJ1dCBmb3Igbm93IHRoaXMgaXMKKwkgICBnb29kIGVub3VnaC4gKi8KKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIGlmIChyZXNfbG9ja2VkKGRldiwgUkVTT1VSQ0VfT1ZFUkxBWSkpIHsKKwkJLyogRG9uJ3QgY2hhbmdlIHRoZSBzdGQgZnJvbSB0aGUgbXBlZyBkZXZpY2UKKwkJICAgaWYgb3ZlcmxheSBpcyBhY3RpdmUuICovCisJCXJldHVybiAtRUJVU1k7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFRWTk9STVM7IGkrKykKIAkJaWYgKCppZCA9PSB0dm5vcm1zW2ldLmlkKQpAQCAtMTgzNCw3ICsxODUwLDcgQEAKIAkqaWQgPSB0dm5vcm1zW2ldLmlkOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9PVkVSTEFZKSkgeworCWlmIChmaCAmJiByZXNfY2hlY2soZmgsIFJFU09VUkNFX09WRVJMQVkpKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLCBmbGFncyk7CiAJCXN0b3BfcHJldmlldyhkZXYsIGZoKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jaywgZmxhZ3MpOwpAQCAtMTg1MSw2ICsxODY3LDIzIEBACiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2FhNzEzNF9zX3N0ZF9pbnRlcm5hbCk7CisKK3N0YXRpYyBpbnQgc2FhNzEzNF9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKmlkKQoreworCXN0cnVjdCBzYWE3MTM0X2ZoICpmaCA9IHByaXY7CisKKwlyZXR1cm4gc2FhNzEzNF9zX3N0ZF9pbnRlcm5hbChmaC0+ZGV2LCBmaCwgaWQpOworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9maCAqZmggPSBwcml2OworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmgtPmRldjsKKworCSppZCA9IGRldi0+dHZub3JtLT5pZDsKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGludCBzYWE3MTM0X2Nyb3BjYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCkKQEAgLTIwNzcsMTggKzIxMTAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxMzRfZW51bV9mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCi17Ci0JaWYgKDAgIT0gZi0+aW5kZXgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZi0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfR1JFWTsKLQlzdHJjcHkoZi0+ZGVzY3JpcHRpb24sICJ2YmkgZGF0YSIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc2FhNzEzNF9nX2ZidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmYsCiAJCQkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiKQogewpAQCAtMjM3OSw3ICsyNDAwLDYgQEAKIAkudmlkaW9jX2dfZm10X3ZpZF9vdmVybGF5CT0gc2FhNzEzNF9nX2ZtdF92aWRfb3ZlcmxheSwKIAkudmlkaW9jX3RyeV9mbXRfdmlkX292ZXJsYXkJPSBzYWE3MTM0X3RyeV9mbXRfdmlkX292ZXJsYXksCiAJLnZpZGlvY19zX2ZtdF92aWRfb3ZlcmxheQk9IHNhYTcxMzRfc19mbXRfdmlkX292ZXJsYXksCi0JLnZpZGlvY19lbnVtX2ZtdF92YmlfY2FwCT0gc2FhNzEzNF9lbnVtX2ZtdF92YmlfY2FwLAogCS52aWRpb2NfZ19mbXRfdmJpX2NhcAkJPSBzYWE3MTM0X3RyeV9nZXRfc2V0X2ZtdF92YmlfY2FwLAogCS52aWRpb2NfdHJ5X2ZtdF92YmlfY2FwCQk9IHNhYTcxMzRfdHJ5X2dldF9zZXRfZm10X3ZiaV9jYXAsCiAJLnZpZGlvY19zX2ZtdF92YmlfY2FwCQk9IHNhYTcxMzRfdHJ5X2dldF9zZXRfZm10X3ZiaV9jYXAsCkBAIC0yMzkxLDYgKzI0MTEsNyBAQAogCS52aWRpb2NfcWJ1ZgkJCT0gc2FhNzEzNF9xYnVmLAogCS52aWRpb2NfZHFidWYJCQk9IHNhYTcxMzRfZHFidWYsCiAJLnZpZGlvY19zX3N0ZAkJCT0gc2FhNzEzNF9zX3N0ZCwKKwkudmlkaW9jX2dfc3RkCQkJPSBzYWE3MTM0X2dfc3RkLAogCS52aWRpb2NfZW51bV9pbnB1dAkJPSBzYWE3MTM0X2VudW1faW5wdXQsCiAJLnZpZGlvY19nX2lucHV0CQkJPSBzYWE3MTM0X2dfaW5wdXQsCiAJLnZpZGlvY19zX2lucHV0CQkJPSBzYWE3MTM0X3NfaW5wdXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCBhMDg4NGY2Li4yNDA5NmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTI2OSw2ICsyNjksMTIgQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfTTZfRVhUUkEgICAgMTQ0CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX00xMDMgICAgMTQ1CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9BTkFMT0cgMTQ2CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19USUdFUl8zSU4xICAgMTQ3CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWX0ZNNTMgMTQ4CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX00xMzVBICAgIDE0OQorI2RlZmluZSBTQUE3MTM0X0JPQVJEX1JFQUxfQU5HRUxfMjIwICAgICAxNTAKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9IRFRWX1BDSSAgMTUxCisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19USUdFUiAgICAgICAgIDE1MgogCiAjZGVmaW5lIFNBQTcxMzRfTUFYQk9BUkRTIDgKICNkZWZpbmUgU0FBNzEzNF9JTlBVVF9NQVggOApAQCAtNDYyLDYgKzQ2OCwxMiBAQAogCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICgqc2lnbmFsX2NoYW5nZSkoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpOwogfTsKIAorZW51bSBzYWE3MTM0X3RzX3N0YXR1cyB7CisJU0FBNzEzNF9UU19TVE9QUEVELAorCVNBQTcxMzRfVFNfQlVGRl9ET05FLAorCVNBQTcxMzRfVFNfU1RBUlRFRCwKK307CisKIC8qIGdsb2JhbCBkZXZpY2Ugc3RhdHVzICovCiBzdHJ1Y3Qgc2FhNzEzNF9kZXYgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgIGRldmxpc3Q7CkBAIC01NTUsNiArNTY3LDggQEAKIAkvKiBTQUE3MTM0X01QRUdfKiAqLwogCXN0cnVjdCBzYWE3MTM0X3RzICAgICAgICAgIHRzOwogCXN0cnVjdCBzYWE3MTM0X2RtYXF1ZXVlICAgIHRzX3E7CisJZW51bSBzYWE3MTM0X3RzX3N0YXR1cyAJICAgdHNfc3RhdGU7CisJdW5zaWduZWQgaW50IAkJICAgYnVmZl9jbnQ7CiAJc3RydWN0IHNhYTcxMzRfbXBlZ19vcHMgICAgKm1vcHM7CiAJc3RydWN0IGkyY19jbGllbnQgCSAgICptcGVnX2kyY19jbGllbnQ7CiAKQEAgLTU2Nyw3ICs1ODEsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fU0FBNzEzNF9EVkIpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX1NBQTcxMzRfRFZCX01PRFVMRSkKIAkvKiBTQUE3MTM0X01QRUdfRFZCIG9ubHkgKi8KLQlzdHJ1Y3QgdmlkZW9idWZfZHZiICAgICAgICBkdmI7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgZnJvbnRlbmRzOwogCWludCAoKm9yaWdpbmFsX2RlbW9kX3NsZWVwKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CiAJaW50ICgqb3JpZ2luYWxfc2V0X3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpOwogCWludCAoKm9yaWdpbmFsX3NldF9oaWdoX3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBsb25nIGFyZyk7CkBAIC02NDQsNyArNjU4LDcgQEAKIAogZXh0ZXJuIGludCBzYWE3MTM0X2JvYXJkX2luaXQxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKIGV4dGVybiBpbnQgc2FhNzEzNF9ib2FyZF9pbml0MihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7Ci1pbnQgc2FhNzEzNF90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tbWFuZCwgaW50IGFyZyk7CitpbnQgc2FhNzEzNF90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tcG9uZW50LCBpbnQgY29tbWFuZCwgaW50IGFyZyk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTY1NCw2ICs2NjgsOCBAQAogaW50IHNhYTcxMzRfaTJjX3VucmVnaXN0ZXIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpOwogdm9pZCBzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworaW50IHNhYTcxMzRfaTJjX2NhbGxfc2FhNjc1MihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTY2Niw2ICs2ODIsNyBAQAogaW50IHNhYTcxMzRfc19jdHJsX2ludGVybmFsKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCAgc3RydWN0IHNhYTcxMzRfZmggKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjKTsKIGludCBzYWE3MTM0X2dfY3RybF9pbnRlcm5hbChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgIHN0cnVjdCBzYWE3MTM0X2ZoICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqYyk7CiBpbnQgc2FhNzEzNF9xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqYyk7CitpbnQgc2FhNzEzNF9zX3N0ZF9pbnRlcm5hbChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgIHN0cnVjdCBzYWE3MTM0X2ZoICpmaCwgdjRsMl9zdGRfaWQgKmlkKTsKIAogaW50IHNhYTcxMzRfdmlkZW9wb3J0X2luaXQoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpOwogdm9pZCBzYWE3MTM0X3NldF90dm5vcm1faHcoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTg1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYwppbmRleCAwMmZkYTRlLi42ZGViYjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYwpAQCAtMjUsNDMgKzI1LDI1IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzE4NSB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiRGF2ZSBQZXJrcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAKLSNkZWZpbmUgSTJDX05BTUUocykgKHMpLT5uYW1lCi0KLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBzYWE3MTg1IHsKQEAgLTc1LDMyICs1NywyNCBAQAogCWludCBzYXQ7CiB9OwogCi0jZGVmaW5lICAgSTJDX1NBQTcxODUgICAgICAgIDB4ODgKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxODVfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxODVfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudCk7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxODVfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbnQgc2FhNzE4NV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIlNBQTcxODU6ICUwMnggc2V0IHRvICUwMnhcbiIsIHJlZywgdmFsdWUpOworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiUwMnggc2V0IHRvICUwMnhcbiIsIHJlZywgdmFsdWUpOwogCWVuY29kZXItPnJlZ1tyZWddID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludAotc2FhNzE4NV93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCBzYWE3MTg1X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCWNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CkBAIC0xMjEsMTggKzk1LDE3IEBACiAJCQkJICAgIGVuY29kZXItPnJlZ1tyZWcrK10gPSBkYXRhWzFdOwogCQkJCWxlbiAtPSAyOwogCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmCi0JCQkJIGJsb2NrX2xlbiA8IDMyKTsKLQkJCWlmICgocmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwKLQkJCQkJCSAgIGJsb2NrX2xlbikpIDwgMCkKKwkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKKwkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJaWYgKChyZXQgPSBzYWE3MTg1X3dyaXRlKGNsaWVudCwgcmVnLAotCQkJCQkJICpkYXRhKyspKSA8IDApCisJCQlyZXQgPSBzYWE3MTg1X3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQkJbGVuIC09IDI7CiAJCX0KQEAgLTI0MCwxNSArMjEzLDExIEBACiAJMHg2NiwgMHgyMSwJCS8qIEZTQzMgKi8KIH07CiAKLXN0YXRpYyBpbnQKLXNhYTcxODVfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCBzYWE3MTg1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXN3aXRjaCAoY21kKSB7Ci0KIAljYXNlIDA6CiAJCXNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwKIAkJCQkgICAgc2l6ZW9mKGluaXRfY29tbW9uKSk7CkBAIC0yNjQsNyArMjMzLDYgQEAKIAkJCQkJICAgIHNpemVvZihpbml0X3BhbCkpOwogCQkJYnJlYWs7CiAJCX0KLQogCQlicmVhazsKIAogCWNhc2UgRU5DT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgpAQCAtMjc2LDggKzI0NCw4IEBACiAJCSAgICBWSURFT19FTkNPREVSX1NFQ0FNIHwgVklERU9fRU5DT0RFUl9DQ0lSOwogCQljYXAtPmlucHV0cyA9IDE7CiAJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX05PUk06CiAJewpAQCAtMjg2LDcgKzI1NCw2IEBACiAJCS8vc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKIAogCQlzd2l0Y2ggKCppYXJnKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAogCQkJCQkgICAgc2l6ZW9mKGluaXRfbnRzYykpOwpAQCAtMzAwLDExICsyNjcsMTAgQEAKIAkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQogCQllbmNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX0lOUFVUOgogCXsKQEAgLTMxNCw3ICsyODAsNiBAQAogCQkgKmlhcmcgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAgKi8KIAogCQlzd2l0Y2ggKCppYXJnKSB7Ci0KIAkJY2FzZSAwOgogCQkJLyogU3dpdGNoIFJUQ0UgdG8gMSAqLwogCQkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsCkBAIC0zMzIsMjEgKzI5NywxOSBAQAogCiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAogCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkgeworCQlpZiAoKmlhcmcgIT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKIAl7CkBAIC0zNTYsOCArMzE5LDggQEAKIAkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsCiAJCQkgICAgICAoZW5jb2Rlci0+cmVnWzB4NjFdICYgMHhiZikgfAogCQkJICAgICAgKGVuY29kZXItPmVuYWJsZSA/IDB4MDAgOiAweDQwKSk7Ci0JfQogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM2OCwxMzggKzMzMSw2NSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKgotICogR2VuZXJpYyBpMmMgcHJvYmUKLSAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKLSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX1NBQTcxODUgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTg1OwotCi1zdGF0aWMgaW50Ci1zYWE3MTg1X2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKK3N0YXRpYyBpbnQgc2FhNzE4NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHNhYTcxODUgKmVuY29kZXI7CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzE4NS5jOiBkZXRlY3Rpbmcgc2FhNzE4NSBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAotCQlhZGRyZXNzIDw8IDEpOwotCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfc2FhNzE4NTsKLQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJzYWE3MTg1Iiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxODUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZW5jb2RlciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKGVuY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWVuY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CiAJZW5jb2Rlci0+ZW5hYmxlID0gMTsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBlbmNvZGVyKTsKIAotCWkgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChpKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGVuY29kZXIpOwotCQlyZXR1cm4gaTsKLQl9Ci0KIAlpID0gc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKLQlpZiAoaSA+PSAwKSB7Ci0JCWkgPSBzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAotCQkJCQlzaXplb2YoaW5pdF9udHNjKSk7Ci0JfQotCWlmIChpIDwgMCkgewotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlc19hdHRhY2g6IGluaXQgZXJyb3IgJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpKTsKLQl9IGVsc2UgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0lORk8KLQkJCSIlc19hdHRhY2g6IGNoaXAgdmVyc2lvbiAlZCBhdCBhZGRyZXNzIDB4JXhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzYWE3MTg1X3JlYWQoY2xpZW50KSA+PiA1LAotCQkJY2xpZW50LT5hZGRyIDw8IDEpOwotCX0KLQorCWlmIChpID49IDApCisJCWkgPSBzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLCBzaXplb2YoaW5pdF9udHNjKSk7CisJaWYgKGkgPCAwKQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IGVycm9yICVkXG4iLCBpKTsKKwllbHNlCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInJldmlzaW9uIDB4JXhcbiIsCisJCQkJc2FhNzE4NV9yZWFkKGNsaWVudCkgPj4gNSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxODVfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzE4NS5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmc2FhNzE4NV9kZXRlY3RfY2xpZW50KTsKLX0KLQotc3RhdGljIGludAotc2FhNzE4NV9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBzYWE3MTg1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNhYTcxODVfd3JpdGUoY2xpZW50LCAweDYxLCAoZW5jb2Rlci0+cmVnWzB4NjFdKSB8IDB4NDApOwkvKiBTVzogb3V0cHV0IG9mZiBpcyBhY3RpdmUgKi8KIAkvL3NhYTcxODVfd3JpdGUoY2xpZW50LCAweDNhLCAoZW5jb2Rlci0+cmVnWzB4M2FdKSB8IDB4ODApOyAvKiBTVzogY29sb3IgYmFyICovCiAKIAlrZnJlZShlbmNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxODUgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAic2FhNzE4NSIsCS8qIG5hbWUgKi8KLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX1NBQTcxODVCLAotCi0JLmF0dGFjaF9hZGFwdGVyID0gc2FhNzE4NV9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IHNhYTcxODVfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IHNhYTcxODVfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTg1X2lkW10gPSB7CisJeyAic2FhNzE4NSIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNzE4NV9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1zYWE3MTg1X2luaXQgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxODUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXNhYTcxODVfZXhpdCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTg1KTsKLX0KLQotbW9kdWxlX2luaXQoc2FhNzE4NV9pbml0KTsKLW1vZHVsZV9leGl0KHNhYTcxODVfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNzE4NSIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxODVCLAorCS5jb21tYW5kID0gc2FhNzE4NV9jb21tYW5kLAorCS5wcm9iZSA9IHNhYTcxODVfcHJvYmUsCisJLnJlbW92ZSA9IHNhYTcxODVfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHNhYTcxODVfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zZTQwMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zZTQwMS5jCmluZGV4IGFjY2VlZDUuLmFlMzk0OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2U0MDEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmMKQEAgLTI4OCw3ICsyODgsNyBAQAogCWludCBzdGF0dXM7CiAKIAlpZiAoIXNlNDAxLT5kZXYpIHsKLQkJaW5mbygib2hvaDogZGV2aWNlIHZhcG91cmlzaGVkIik7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiZGV2aWNlIHZhcG91cmlzaGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzI4LDcgKzMyOCw3IEBACiAJCXJldHVybjsKIAogCWlmICghc2U0MDEtPmRldikgewotCQlpbmZvICgib2hvaDogZGV2aWNlIHZhcG91cmlzaGVkIik7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiZGV2aWNlIHZhcG91cmlzaGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzc1LDcgKzM3NSw3IEBACiAJdXJiLT5zdGF0dXM9MDsKIAl1cmItPmRldj1zZTQwMS0+ZGV2OwogCWlmKHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCkpCi0JCWluZm8oInVyYiBidXJuZWQgZG93biIpOworCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgInVyYiBidXJuZWQgZG93blxuIik7CiAJcmV0dXJuOwogfQogCkBAIC04NjAsNyArODYwLDggQEAKIAkJKTsKIAkJaWYgKHNlNDAxLT5udWxscGFja2V0cyA+IFNFNDAxX01BWF9OVUxMUEFDS0VUUykgewogCQkJc2U0MDEtPm51bGxwYWNrZXRzPTA7Ci0JCQlpbmZvKCJ0byBtYW55IG51bGwgbGVuZ3RoIHBhY2tldHMsIHJlc3RhcnRpbmcgY2FwdHVyZSIpOworCQkJZGV2X2luZm8oJnNlNDAxLT5kZXYtPmRldiwKKwkJCQkgInRvbyBtYW55IG51bGwgbGVuZ3RoIHBhY2tldHMsIHJlc3RhcnRpbmcgY2FwdHVyZVxuIik7CiAJCQlzZTQwMV9zdG9wX3N0cmVhbShzZTQwMSk7CiAJCQlzZTQwMV9zdGFydF9zdHJlYW0oc2U0MDEpOwogCQl9IGVsc2UgewpAQCAtODgwLDcgKzg4MSw4IEBACiAJCQkJc2U0MDEtPnNjcmF0Y2hfdXNlPTA7CiAJCQlpZiAoZXJyb3JzID4gU0U0MDFfTUFYX0VSUk9SUykgewogCQkJCWVycm9ycz0wOwotCQkJCWluZm8oInRvIG11Y2ggZXJyb3JzLCByZXN0YXJ0aW5nIGNhcHR1cmUiKTsKKwkJCQlkZXZfaW5mbygmc2U0MDEtPmRldi0+ZGV2LAorCQkJCQkgInRvbyBtYW55IGVycm9ycywgcmVzdGFydGluZyBjYXB0dXJlXG4iKTsKIAkJCQlzZTQwMV9zdG9wX3N0cmVhbShzZTQwMSk7CiAJCQkJc2U0MDFfc3RhcnRfc3RyZWFtKHNlNDAxKTsKIAkJCX0KQEAgLTkxMyw3ICs5MTUsNyBAQAogCQl1c2Jfa2lsbF91cmIoc2U0MDEtPmludHVyYik7CiAJCXVzYl9mcmVlX3VyYihzZTQwMS0+aW50dXJiKTsKIAl9Ci0JaW5mbygiJXMgZGlzY29ubmVjdGVkIiwgc2U0MDEtPmNhbWVyYV9uYW1lKTsKKwlkZXZfaW5mbygmc2U0MDEtPmRldi0+ZGV2LCAiJXMgZGlzY29ubmVjdGVkIiwgc2U0MDEtPmNhbWVyYV9uYW1lKTsKIAogCS8qIEZyZWUgdGhlIG1lbW9yeSAqLwogCWtmcmVlKHNlNDAxLT53aWR0aCk7CkBAIC05MzYsMTQgKzkzOCwxOCBAQAogCXN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxID0gKHN0cnVjdCB1c2Jfc2U0MDEgKilkZXY7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoc2U0MDEtPnVzZXIpCisJbG9ja19rZXJuZWwoKTsKKwlpZiAoc2U0MDEtPnVzZXIpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVCVVNZOworCX0KIAlzZTQwMS0+ZmJ1ZiA9IHJ2bWFsbG9jKHNlNDAxLT5tYXhmcmFtZXNpemUgKiBTRTQwMV9OVU1GUkFNRVMpOwogCWlmIChzZTQwMS0+ZmJ1ZikKIAkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OwogCWVsc2UKIAkJZXJyID0gLUVOT01FTTsKIAlzZTQwMS0+dXNlciA9ICFlcnI7CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTk1Niw4ICs5NjIsOCBAQAogCiAJcnZmcmVlKHNlNDAxLT5mYnVmLCBzZTQwMS0+bWF4ZnJhbWVzaXplICogU0U0MDFfTlVNRlJBTUVTKTsKIAlpZiAoc2U0MDEtPnJlbW92ZWQpIHsKKwkJZGV2X2luZm8oJnNlNDAxLT5kZXYtPmRldiwgImRldmljZSB1bnJlZ2lzdGVyZWRcbiIpOwogCQl1c2Jfc2U0MDFfcmVtb3ZlX2Rpc2Nvbm5lY3RlZChzZTQwMSk7Ci0JCWluZm8oImRldmljZSB1bnJlZ2lzdGVyZWQiKTsKIAl9IGVsc2UgewogCQlmb3IgKGk9MDsgaTxTRTQwMV9OVU1GUkFNRVM7IGkrKykKIAkJCXNlNDAxLT5mcmFtZVtpXS5ncmFic3RhdGU9RlJBTUVfVU5VU0VEOwpAQCAtMTIzMiw2ICsxMjM4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNlNDAxX3RlbXBsYXRlID0gewogCS5uYW1lID0gICAgICAgICAic2U0MDEgVVNCIGNhbWVyYSIsCiAJLmZvcHMgPSAgICAgICAgICZzZTQwMV9mb3BzLAorCS5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCiB9OwogCiAKQEAgLTEyNzEsNyArMTI3OCw3IEBACiAJZm9yIChpPTA7IGk8c2U0MDEtPnNpemVzOyBpKyspIHsKIAkJc3ByaW50Zih0ZW1wLCAiJXMgJWR4JWQiLCB0ZW1wLCBzZTQwMS0+d2lkdGhbaV0sIHNlNDAxLT5oZWlnaHRbaV0pOwogCX0KLQlpbmZvKCIlcyIsIHRlbXApOworCWRldl9pbmZvKCZzZTQwMS0+ZGV2LT5kZXYsICIlc1xuIiwgdGVtcCk7CiAJc2U0MDEtPm1heGZyYW1lc2l6ZT1zZTQwMS0+d2lkdGhbc2U0MDEtPnNpemVzLTFdKnNlNDAxLT5oZWlnaHRbc2U0MDEtPnNpemVzLTFdKjM7CiAKIAlyYz1zZTQwMV9zbmRjdHJsKDAsIHNlNDAxLCBTRTQwMV9SRVFfR0VUX1dJRFRILCAwLCBjcCwgc2l6ZW9mKGNwKSk7CkBAIC0xMzA1LDcgKzEzMTIsOCBAQAogCWlmIChidXR0b24pIHsKIAkJc2U0MDEtPmludHVyYj11c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQlpZiAoIXNlNDAxLT5pbnR1cmIpIHsKLQkJCWluZm8oIkFsbG9jYXRpb24gb2YgaW50dXJiIGZhaWxlZCIpOworCQkJZGV2X2luZm8oJnNlNDAxLT5kZXYtPmRldiwKKwkJCQkgIkFsbG9jYXRpb24gb2YgaW50dXJiIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQl1c2JfZmlsbF9pbnRfdXJiKHNlNDAxLT5pbnR1cmIsIHNlNDAxLT5kZXYsCkBAIC0xMzE2LDcgKzEzMjQsNyBAQAogCQkgICAgOAogCQkpOwogCQlpZiAodXNiX3N1Ym1pdF91cmIoc2U0MDEtPmludHVyYiwgR0ZQX0tFUk5FTCkpIHsKLQkJCWluZm8oImludCB1cmIgYnVybmVkIGRvd24iKTsKKwkJCWRldl9pbmZvKCZzZTQwMS0+ZGV2LT5kZXYsICJpbnQgdXJiIGJ1cm5lZCBkb3duXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSBlbHNlCkBAIC0xMzczLDcgKzEzODEsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIFdlIGZvdW5kIG9uZSAqLwotCWluZm8oIlNFNDAxIGNhbWVyYSBmb3VuZDogJXMiLCBjYW1lcmFfbmFtZSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlNFNDAxIGNhbWVyYSBmb3VuZDogJXNcbiIsIGNhbWVyYV9uYW1lKTsKIAogCWlmICgoc2U0MDEgPSBremFsbG9jKHNpemVvZigqc2U0MDEpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQllcnIoImNvdWxkbid0IGttYWxsb2Mgc2U0MDEgc3RydWN0Iik7CkBAIC0xMzg0LDcgKzEzOTIsOCBAQAogCXNlNDAxLT5pZmFjZSA9IGludGVyZmFjZS0+YkludGVyZmFjZU51bWJlcjsKIAlzZTQwMS0+Y2FtZXJhX25hbWUgPSBjYW1lcmFfbmFtZTsKIAotCWluZm8oImZpcm13YXJlIHZlcnNpb246ICUwMngiLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSAmIDI1NSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgImZpcm13YXJlIHZlcnNpb246ICUwMnhcbiIsCisJCSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSAmIDI1NSk7CiAKIAlpZiAoc2U0MDFfaW5pdChzZTQwMSwgYnV0dG9uKSkgewogCQlrZnJlZShzZTQwMSk7CkBAIC0xNDAyLDcgKzE0MTEsOCBAQAogCQllcnIoInZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCWluZm8oInJlZ2lzdGVyZWQgbmV3IHZpZGVvIGRldmljZTogdmlkZW8lZCIsIHNlNDAxLT52ZGV2Lm1pbm9yKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAicmVnaXN0ZXJlZCBuZXcgdmlkZW8gZGV2aWNlOiB2aWRlbyVkXG4iLAorCQkgc2U0MDEtPnZkZXYubWlub3IpOwogCiAJdXNiX3NldF9pbnRmZGF0YSAoaW50Ziwgc2U0MDEpOwogCXJldHVybiAwOwpAQCAtMTQ0NiwxMCArMTQ1NiwxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB1c2Jfc2U0MDFfaW5pdCh2b2lkKQogewotCWluZm8oIlNFNDAxIHVzYiBjYW1lcmEgZHJpdmVyIHZlcnNpb24gJXMgcmVnaXN0ZXJpbmciLCB2ZXJzaW9uKTsKKwlwcmludGsoS0VSTl9JTkZPICJTRTQwMSB1c2IgY2FtZXJhIGRyaXZlciB2ZXJzaW9uICVzIHJlZ2lzdGVyaW5nXG4iLCB2ZXJzaW9uKTsKIAlpZiAoZmxpY2tlcmxlc3MpCiAJCWlmIChmbGlja2VybGVzcyE9NTAgJiYgZmxpY2tlcmxlc3MhPTYwKSB7Ci0JCQlpbmZvKCJJbnZhbGxpZCBmbGlja2VybGVzcyB2YWx1ZSwgdXNlIDAsIDUwIG9yIDYwLiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGxpZCBmbGlja2VybGVzcyB2YWx1ZSwgdXNlIDAsIDUwIG9yIDYwLlxuIik7CiAJCQlyZXR1cm4gLTE7CiAJfQogCXJldHVybiB1c2JfcmVnaXN0ZXIoJnNlNDAxX2RyaXZlcik7CkBAIC0xNDU4LDcgKzE0NjgsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHVzYl9zZTQwMV9leGl0KHZvaWQpCiB7CiAJdXNiX2RlcmVnaXN0ZXIoJnNlNDAxX2RyaXZlcik7Ci0JaW5mbygiU0U0MDEgZHJpdmVyIGRlcmVnaXN0ZXJlZCIpOworCXByaW50ayhLRVJOX0lORk8gIlNFNDAxIGRyaXZlciBkZXJlZ2lzdGVyZWRcZnJhbWUiKTsKIH0KIAogbW9kdWxlX2luaXQodXNiX3NlNDAxX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCmluZGV4IDMxODc1NGUuLjI0MDc2MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTQwLDM5ICs0MCwzOSBAQAogCiAvKiByZWdpc3RlciBvZmZzZXRzIGZvciBzaDc3MjIgLyBzaDc3MjMgKi8KIAotI2RlZmluZSBDQVBTUiAgMHgwMAotI2RlZmluZSBDQVBDUiAgMHgwNAotI2RlZmluZSBDQU1DUiAgMHgwOAotI2RlZmluZSBDTUNZUiAgMHgwYwotI2RlZmluZSBDQU1PUiAgMHgxMAotI2RlZmluZSBDQVBXUiAgMHgxNAotI2RlZmluZSBDQUlGUiAgMHgxOAotI2RlZmluZSBDU1RDUiAgMHgyMCAvKiBub3Qgb24gc2g3NzIzICovCi0jZGVmaW5lIENTRUNSICAweDI0IC8qIG5vdCBvbiBzaDc3MjMgKi8KLSNkZWZpbmUgQ1JDTlRSIDB4MjgKLSNkZWZpbmUgQ1JDTVBSIDB4MmMKLSNkZWZpbmUgQ0ZMQ1IgIDB4MzAKLSNkZWZpbmUgQ0ZTWlIgIDB4MzQKLSNkZWZpbmUgQ0RXRFIgIDB4MzgKLSNkZWZpbmUgQ0RBWVIgIDB4M2MKLSNkZWZpbmUgQ0RBQ1IgIDB4NDAKLSNkZWZpbmUgQ0RCWVIgIDB4NDQKLSNkZWZpbmUgQ0RCQ1IgIDB4NDgKLSNkZWZpbmUgQ0JEU1IgIDB4NGMKLSNkZWZpbmUgQ0ZXQ1IgIDB4NWMKLSNkZWZpbmUgQ0xGQ1IgIDB4NjAKLSNkZWZpbmUgQ0RPQ1IgIDB4NjQKLSNkZWZpbmUgQ0REQ1IgIDB4NjgKLSNkZWZpbmUgQ0REQVIgIDB4NmMKLSNkZWZpbmUgQ0VJRVIgIDB4NzAKLSNkZWZpbmUgQ0VUQ1IgIDB4NzQKLSNkZWZpbmUgQ1NUU1IgIDB4N2MKLSNkZWZpbmUgQ1NSVFIgIDB4ODAKLSNkZWZpbmUgQ0RTU1IgIDB4ODQKLSNkZWZpbmUgQ0RBWVIyIDB4OTAKLSNkZWZpbmUgQ0RBQ1IyIDB4OTQKLSNkZWZpbmUgQ0RCWVIyIDB4OTgKLSNkZWZpbmUgQ0RCQ1IyIDB4OWMKKyNkZWZpbmUgQ0FQU1IgIDB4MDAgLyogQ2FwdHVyZSBzdGFydCByZWdpc3RlciAqLworI2RlZmluZSBDQVBDUiAgMHgwNCAvKiBDYXB0dXJlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FNQ1IgIDB4MDggLyogQ2FwdHVyZSBpbnRlcmZhY2UgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDTUNZUiAgMHgwYyAvKiBDYXB0dXJlIGludGVyZmFjZSBjeWNsZSAgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FNT1IgIDB4MTAgLyogQ2FwdHVyZSBpbnRlcmZhY2Ugb2Zmc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIENBUFdSICAweDE0IC8qIENhcHR1cmUgaW50ZXJmYWNlIHdpZHRoIHJlZ2lzdGVyICovCisjZGVmaW5lIENBSUZSICAweDE4IC8qIENhcHR1cmUgaW50ZXJmYWNlIGlucHV0IGZvcm1hdCByZWdpc3RlciAqLworI2RlZmluZSBDU1RDUiAgMHgyMCAvKiBDYW1lcmEgc3Ryb2JlIGNvbnRyb2wgcmVnaXN0ZXIgKDw9IHNoNzcyMikgKi8KKyNkZWZpbmUgQ1NFQ1IgIDB4MjQgLyogQ2FtZXJhIHN0cm9iZSBlbWlzc2lvbiBjb3VudCByZWdpc3RlciAoPD0gc2g3NzIyKSAqLworI2RlZmluZSBDUkNOVFIgMHgyOCAvKiBDRVUgcmVnaXN0ZXIgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDUkNNUFIgMHgyYyAvKiBDRVUgcmVnaXN0ZXIgZm9yY2libGUgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDRkxDUiAgMHgzMCAvKiBDYXB0dXJlIGZpbHRlciBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENGU1pSICAweDM0IC8qIENhcHR1cmUgZmlsdGVyIHNpemUgY2xpcCByZWdpc3RlciAqLworI2RlZmluZSBDRFdEUiAgMHgzOCAvKiBDYXB0dXJlIGRlc3RpbmF0aW9uIHdpZHRoIHJlZ2lzdGVyICovCisjZGVmaW5lIENEQVlSICAweDNjIC8qIENhcHR1cmUgZGF0YSBhZGRyZXNzIFkgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0RBQ1IgIDB4NDAgLyogQ2FwdHVyZSBkYXRhIGFkZHJlc3MgQyByZWdpc3RlciAqLworI2RlZmluZSBDREJZUiAgMHg0NCAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgWSByZWdpc3RlciAqLworI2RlZmluZSBDREJDUiAgMHg0OCAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgQyByZWdpc3RlciAqLworI2RlZmluZSBDQkRTUiAgMHg0YyAvKiBDYXB0dXJlIGJ1bmRsZSBkZXN0aW5hdGlvbiBzaXplIHJlZ2lzdGVyICovCisjZGVmaW5lIENGV0NSICAweDVjIC8qIEZpcmV3YWxsIG9wZXJhdGlvbiBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENMRkNSICAweDYwIC8qIENhcHR1cmUgbG93LXBhc3MgZmlsdGVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0RPQ1IgIDB4NjQgLyogQ2FwdHVyZSBkYXRhIG91dHB1dCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENERENSICAweDY4IC8qIENhcHR1cmUgZGF0YSBjb21wbGV4aXR5IGxldmVsIHJlZ2lzdGVyICovCisjZGVmaW5lIENEREFSICAweDZjIC8qIENhcHR1cmUgZGF0YSBjb21wbGV4aXR5IGxldmVsIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0VJRVIgIDB4NzAgLyogQ2FwdHVyZSBldmVudCBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCisjZGVmaW5lIENFVENSICAweDc0IC8qIENhcHR1cmUgZXZlbnQgZmxhZyBjbGVhciByZWdpc3RlciAqLworI2RlZmluZSBDU1RTUiAgMHg3YyAvKiBDYXB0dXJlIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBDU1JUUiAgMHg4MCAvKiBDYXB0dXJlIHNvZnR3YXJlIHJlc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIENEU1NSICAweDg0IC8qIENhcHR1cmUgZGF0YSBzaXplIHJlZ2lzdGVyICovCisjZGVmaW5lIENEQVlSMiAweDkwIC8qIENhcHR1cmUgZGF0YSBhZGRyZXNzIFkgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBDREFDUjIgMHg5NCAvKiBDYXB0dXJlIGRhdGEgYWRkcmVzcyBDIHJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQ0RCWVIyIDB4OTggLyogQ2FwdHVyZSBkYXRhIGJvdHRvbS1maWVsZCBhZGRyZXNzIFkgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBDREJDUjIgMHg5YyAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgQyByZWdpc3RlciAyICovCiAKIHN0YXRpYyBERUZJTkVfTVVURVgoY2FtZXJhX2xvY2spOwogCkBAIC0xNjUsNiArMTY1LDcgQEAKIAljZXVfd3JpdGUocGNkZXYsIENFVENSLCAweDAzMTdmMzEzIF4gMHgxMCk7CiAKIAlpZiAocGNkZXYtPmFjdGl2ZSkgeworCQlwY2Rldi0+YWN0aXZlLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKIAkJY2V1X3dyaXRlKHBjZGV2LCBDREFZUiwgdmlkZW9idWZfdG9fZG1hX2NvbnRpZyhwY2Rldi0+YWN0aXZlKSk7CiAJCWNldV93cml0ZShwY2RldiwgQ0FQU1IsIDB4MSk7IC8qIHN0YXJ0IGNhcHR1cmUgKi8KIAl9CkBAIC0yMzYsNyArMjM3LDcgQEAKIAlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICV6ZFxuIiwgX19mdW5jX18sCiAJCXZiLCB2Yi0+YmFkZHIsIHZiLT5ic2l6ZSk7CiAKLQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwY2Rldi0+bG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJnBjZGV2LT5jYXB0dXJlKTsKIApAQCAtMzA0LDkgKzMwNSw2IEBACiAJCSAiU3VwZXJIIE1vYmlsZSBDRVUgZHJpdmVyIGF0dGFjaGVkIHRvIGNhbWVyYSAlZFxuIiwKIAkJIGljZC0+ZGV2bnVtKTsKIAotCWlmIChwY2Rldi0+cGRhdGEtPmVuYWJsZV9jYW1lcmEpCi0JCXBjZGV2LT5wZGF0YS0+ZW5hYmxlX2NhbWVyYSgpOwotCiAJcmV0ID0gaWNkLT5vcHMtPmluaXQoaWNkKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKQEAgLTMyNiwxNSArMzI0LDI1IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJQlVHX09OKGljZCAhPSBwY2Rldi0+aWNkKTsKIAogCS8qIGRpc2FibGUgY2FwdHVyZSwgZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJY2V1X3dyaXRlKHBjZGV2LCBDRUlFUiwgMCk7CiAJY2V1X3dyaXRlKHBjZGV2LCBDQVBTUiwgMSA8PCAxNik7IC8qIHJlc2V0ICovCisKKwkvKiBtYWtlIHN1cmUgYWN0aXZlIGJ1ZmZlciBpcyBjYW5jZWxlZCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwY2Rldi0+bG9jaywgZmxhZ3MpOworCWlmIChwY2Rldi0+YWN0aXZlKSB7CisJCWxpc3RfZGVsKCZwY2Rldi0+YWN0aXZlLT5xdWV1ZSk7CisJCXBjZGV2LT5hY3RpdmUtPnN0YXRlID0gVklERU9CVUZfRVJST1I7CisJCXdha2VfdXBfYWxsKCZwY2Rldi0+YWN0aXZlLT5kb25lKTsKKwkJcGNkZXYtPmFjdGl2ZSA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CisKIAlpY2QtPm9wcy0+cmVsZWFzZShpY2QpOwotCWlmIChwY2Rldi0+cGRhdGEtPmRpc2FibGVfY2FtZXJhKQotCQlwY2Rldi0+cGRhdGEtPmRpc2FibGVfY2FtZXJhKCk7CiAKIAlkZXZfaW5mbygmaWNkLT5kZXYsCiAJCSAiU3VwZXJIIE1vYmlsZSBDRVUgZHJpdmVyIGRldGFjaGVkIGZyb20gY2FtZXJhICVkXG4iLApAQCAtMzk2LDcgKzQwNCwyMCBAQAogCWNldV93cml0ZShwY2RldiwgQ0ZMQ1IsIDApOyAvKiBkYXRhIGZldGNoIG1vZGUgLSBubyBzY2FsaW5nICovCiAJY2V1X3dyaXRlKHBjZGV2LCBDRlNaUiwgKGljZC0+aGVpZ2h0IDw8IDE2KSB8IGNmc3pyX3dpZHRoKTsKIAljZXVfd3JpdGUocGNkZXYsIENMRkNSLCAwKTsgLyogZGF0YSBmZXRjaCBtb2RlIC0gbm8gbG93cGFzcyBmaWx0ZXIgKi8KLQljZXVfd3JpdGUocGNkZXYsIENET0NSLCAweDAwMDAwMDE2KTsKKworCS8qIEEgZmV3IHdvcmRzIGFib3V0IGJ5dGUgb3JkZXIgKG9ic2VydmVkIGluIEJpZyBFbmRpYW4gbW9kZSkKKwkgKgorCSAqIEluIGRhdGEgZmV0Y2ggbW9kZSBieXRlcyBhcmUgcmVjZWl2ZWQgaW4gY2h1bmtzIG9mIDggYnl0ZXMuCisJICogRDAsIEQxLCBEMiwgRDMsIEQ0LCBENSwgRDYsIEQ3IChEMCByZWNlaXZlZCBmaXJzdCkKKwkgKgorCSAqIFRoZSBkYXRhIGlzIGhvd2V2ZXIgYnkgZGVmYXVsdCB3cml0dGVuIHRvIG1lbW9yeSBpbiByZXZlcnNlIG9yZGVyOgorCSAqIEQ3LCBENiwgRDUsIEQ0LCBEMywgRDIsIEQxLCBEMCAoRDcgd3JpdHRlbiB0byBsb3dlc3QgYnl0ZSkKKwkgKgorCSAqIFRoZSBsb3dlc3QgdGhyZWUgYml0cyBvZiBDRE9DUiBhbGxvd3MgdXMgdG8gZG8gc3dhcHBpbmcsCisJICogdXNpbmcgNyB3ZSBzd2FwIHRoZSBkYXRhIGJ5dGVzIHRvIG1hdGNoIHRoZSBpbmNvbWluZyBvcmRlcjoKKwkgKiBEMCwgRDEsIEQyLCBEMywgRDQsIEQ1LCBENiwgRDcKKwkgKi8KKwljZXVfd3JpdGUocGNkZXYsIENET0NSLCAweDAwMDAwMDE3KTsKIAogCWNldV93cml0ZShwY2RldiwgQ0RXRFIsIGNkd2RyX3dpZHRoKTsKIAljZXVfd3JpdGUocGNkZXYsIENGV0NSLCAwKTsgLyoga2VlcCAiZGF0YWZldGNoIGZpcmV3YWxsIiBkaXNhYmxlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCmluZGV4IDJkYTY5MzguLjIwZTMwYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKQEAgLTExNiw2ICsxMTYsMjYgQEAKIAkJICJcbiIpOwogI2VuZGlmCiAKKy8qCisgICBBZGQgdGhlIHByb2JlIGVudHJpZXMgdG8gdGhpcyB0YWJsZS4gQmUgc3VyZSB0byBhZGQgdGhlIGVudHJ5IGluIHRoZSByaWdodAorICAgcGxhY2UsIHNpbmNlLCBvbiBmYWlsdXJlLCB0aGUgbmV4dCBwcm9iaW5nIHJvdXRpbmUgaXMgY2FsbGVkIGFjY29yZGluZyB0bworICAgdGhlIG9yZGVyIG9mIHRoZSBsaXN0IGJlbG93LCBmcm9tIHRvcCB0byBib3R0b20uCisqLworc3RhdGljIGludCAoKnNuOWMxMDJfc2Vuc29yX3RhYmxlW10pKHN0cnVjdCBzbjljMTAyX2RldmljZSAqKSA9IHsKKwkmc245YzEwMl9wcm9iZV9odjcxMzFkLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KKwkmc245YzEwMl9wcm9iZV9odjcxMzFyLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KKwkmc245YzEwMl9wcm9iZV9taTAzNDMsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLworCSZzbjljMTAyX3Byb2JlX21pMDM2MCwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCisJJnNuOWMxMDJfcHJvYmVfbXQ5djExMSwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCisJJnNuOWMxMDJfcHJvYmVfcGFzMTA2YiwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCisJJnNuOWMxMDJfcHJvYmVfcGFzMjAyYmNiLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KKwkmc245YzEwMl9wcm9iZV9vdjc2MzAsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLworCSZzbjljMTAyX3Byb2JlX292NzY2MCwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCisJJnNuOWMxMDJfcHJvYmVfdGFzNTExMGMxYiwgLyogZGV0ZWN0aW9uIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovCisJJnNuOWMxMDJfcHJvYmVfdGFzNTExMGQsIC8qIGRldGVjdGlvbiBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLworCSZzbjljMTAyX3Byb2JlX3RhczUxMzBkMWIsIC8qIGRldGVjdGlvbiBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLworfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdTMyCkBAIC0xNzQ2LDcgKzE3NjYsNyBAQAogCWlmICghZG93bl9yZWFkX3RyeWxvY2soJnNuOWMxMDJfZGV2X2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCi0JY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAogCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmNhbS0+cHJvYmUpKSB7CiAJCXVwX3JlYWQoJnNuOWMxMDJfZGV2X2xvY2spOwpAQCAtMTg0Myw3ICsxODYzLDcgQEAKIAogCWRvd25fd3JpdGUoJnNuOWMxMDJfZGV2X2xvY2spOwogCi0JY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAogCXNuOWMxMDJfc3RvcF90cmFuc2ZlcihjYW0pOwogCXNuOWMxMDJfcmVsZWFzZV9idWZmZXJzKGNhbSk7CkBAIC0xODYzLDcgKzE4ODMsNyBAQAogc3RhdGljIHNzaXplX3QKIHNuOWMxMDJfcmVhZChzdHJ1Y3QgZmlsZSogZmlscCwgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90KiBmX3BvcykKIHsKLQlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCBzbjljMTAyX2RldmljZSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAlzdHJ1Y3Qgc245YzEwMl9mcmFtZV90KiBmLCAqIGk7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCWxvbmcgdGltZW91dDsKQEAgLTE5ODcsNyArMjAwNyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc245YzEwMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCXN0cnVjdCBzbjljMTAyX2ZyYW1lX3QqIGY7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKQEAgLTIwNjMsNyArMjA4Myw3IEBACiAKIHN0YXRpYyBpbnQgc245YzEwMl9tbWFwKHN0cnVjdCBmaWxlKiBmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCBzbjljMTAyX2RldmljZSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCiAJCSAgICAgIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKIAl2b2lkICpwb3M7CkBAIC0zMDc1LDcgKzMwOTUsNyBAQAogc3RhdGljIGludCBzbjljMTAyX2lvY3RsX3Y0bDIoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHAsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKLQlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCBzbjljMTAyX2RldmljZSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAogCXN3aXRjaCAoY21kKSB7CiAKQEAgLTMxNzksNyArMzE5OSw3IEBACiBzdGF0aWMgaW50IHNuOWMxMDJfaW9jdGwoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHAsCiAJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9tdXRleCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaAppbmRleCA5MGE0MDFkLi5lMjM3MzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKQEAgLTE0MCwyNCArMTQwLDQgQEAKIGV4dGVybiBpbnQgc245YzEwMl9wcm9iZV90YXM1MTEwZChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CiBleHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfdGFzNTEzMGQxYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CiAKLS8qCi0gICBBZGQgdGhlIGFib3ZlIGVudHJpZXMgdG8gdGhpcyB0YWJsZS4gQmUgc3VyZSB0byBhZGQgdGhlIGVudHJ5IGluIHRoZSByaWdodAotICAgcGxhY2UsIHNpbmNlLCBvbiBmYWlsdXJlLCB0aGUgbmV4dCBwcm9iaW5nIHJvdXRpbmUgaXMgY2FsbGVkIGFjY29yZGluZyB0bwotICAgdGhlIG9yZGVyIG9mIHRoZSBsaXN0IGJlbG93LCBmcm9tIHRvcCB0byBib3R0b20uCi0qLwotc3RhdGljIGludCAoKnNuOWMxMDJfc2Vuc29yX3RhYmxlW10pKHN0cnVjdCBzbjljMTAyX2RldmljZSopID0gewotCSZzbjljMTAyX3Byb2JlX2h2NzEzMWQsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLwotCSZzbjljMTAyX3Byb2JlX2h2NzEzMXIsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLwotCSZzbjljMTAyX3Byb2JlX21pMDM0MywgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCi0JJnNuOWMxMDJfcHJvYmVfbWkwMzYwLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KLQkmc245YzEwMl9wcm9iZV9tdDl2MTExLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KLQkmc245YzEwMl9wcm9iZV9wYXMxMDZiLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KLQkmc245YzEwMl9wcm9iZV9wYXMyMDJiY2IsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLwotCSZzbjljMTAyX3Byb2JlX292NzYzMCwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCi0JJnNuOWMxMDJfcHJvYmVfb3Y3NjYwLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KLQkmc245YzEwMl9wcm9iZV90YXM1MTEwYzFiLCAvKiBkZXRlY3Rpb24gYmFzZWQgb24gVVNCIHBpZC92aWQgKi8KLQkmc245YzEwMl9wcm9iZV90YXM1MTEwZCwgLyogZGV0ZWN0aW9uIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovCi0JJnNuOWMxMDJfcHJvYmVfdGFzNTEzMGQxYiwgLyogZGV0ZWN0aW9uIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovCi19OwotCiAjZW5kaWYgLyogX1NOOUMxMDJfREVWVEFCTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2h2NzEzMWQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2h2NzEzMWQuYwppbmRleCBlYWY5YWQwLi5kYjI0MzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9odjcxMzFkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfaHY3MTMxZC5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKyNpbmNsdWRlICJzbjljMTAyX2RldnRhYmxlLmgiCiAKIAogc3RhdGljIGludCBodjcxMzFkX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9odjcxMzFyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9odjcxMzFyLmMKaW5kZXggMGZjNDAxMi4uNDI5NTg4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfaHY3MTMxci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2h2NzEzMXIuYwpAQCAtMjAsNiArMjAsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisjaW5jbHVkZSAic245YzEwMl9kZXZ0YWJsZS5oIgogCiAKIHN0YXRpYyBpbnQgaHY3MTMxcl9pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfbWkwMzQzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9taTAzNDMuYwppbmRleCAwMGIxMzRjLi4xZjViMDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9taTAzNDMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9taTAzNDMuYwpAQCAtMjAsNiArMjAsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisjaW5jbHVkZSAic245YzEwMl9kZXZ0YWJsZS5oIgogCiAKIHN0YXRpYyBpbnQgbWkwMzQzX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9taTAzNjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX21pMDM2MC5jCmluZGV4IGY4ZDgxZDguLmQ5NzNmYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX21pMDM2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX21pMDM2MC5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKyNpbmNsdWRlICJzbjljMTAyX2RldnRhYmxlLmgiCiAKIAogc3RhdGljIGludCBtaTAzNjBfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX210OXYxMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX210OXYxMTEuYwppbmRleCAzYjk4YWMzLi45NTk4NmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9tdDl2MTExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfbXQ5djExMS5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKyNpbmNsdWRlICJzbjljMTAyX2RldnRhYmxlLmgiCiAKIAogc3RhdGljIGludCBtdDl2MTExX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlICpjYW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9vdjc2MzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX292NzYzMC5jCmluZGV4IGU0ODU2ZmQuLjgwMzcxMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX292NzYzMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX292NzYzMC5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKyNpbmNsdWRlICJzbjljMTAyX2RldnRhYmxlLmgiCiAKIAogc3RhdGljIGludCBvdjc2MzBfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX292NzY2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfb3Y3NjYwLmMKaW5kZXggOGFhZTQxNi4uNzk3Nzc5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfb3Y3NjYwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfb3Y3NjYwLmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlICJzbjljMTAyX3NlbnNvci5oIgorI2luY2x1ZGUgInNuOWMxMDJfZGV2dGFibGUuaCIKIAogCiBzdGF0aWMgaW50IG92NzY2MF9pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfcGFzMTA2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfcGFzMTA2Yi5jCmluZGV4IDM2MGYyYTguLjgxY2Q5NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczEwNmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMxMDZiLmMKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKyNpbmNsdWRlICJzbjljMTAyX2RldnRhYmxlLmgiCiAKIAogc3RhdGljIGludCBwYXMxMDZiX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMyMDJiY2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczIwMmJjYi5jCmluZGV4IGNhNGExNTAuLjI3ODJmOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczIwMmJjYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczIwMmJjYi5jCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisjaW5jbHVkZSAic245YzEwMl9kZXZ0YWJsZS5oIgogCiAKIHN0YXRpYyBpbnQgcGFzMjAyYmNiX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTEwYzFiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTEwYzFiLmMKaW5kZXggZTdkMmRlMi4uMDRjZGZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTExMGMxYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMTBjMWIuYwpAQCAtMjAsNiArMjAsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisjaW5jbHVkZSAic245YzEwMl9kZXZ0YWJsZS5oIgogCiAKIHN0YXRpYyBpbnQgdGFzNTExMGMxYl9pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTExMGQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMTBkLmMKaW5kZXggZDMyZmRiYy4uOTM3MmU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTExMGQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTEwZC5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKyNpbmNsdWRlICJzbjljMTAyX2RldnRhYmxlLmgiCiAKIAogc3RhdGljIGludCB0YXM1MTEwZF9pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTEzMGQxYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTEzMGQxYi5jCmluZGV4IDU2ZmIxZDUuLmEzMGJiYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMzBkMWIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTMwZDFiLmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlICJzbjljMTAyX3NlbnNvci5oIgorI2luY2x1ZGUgInNuOWMxMDJfZGV2dGFibGUuaCIKIAogCiBzdGF0aWMgaW50IHRhczUxMzBkMWJfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKaW5kZXggMWFkYzI1Ny4uYmI3YTlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKQEAgLTE4LDE1ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+Ci0KLXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gewotCWludCBpZmFjZTsKLQljaGFyICpmb3JtYXRfbmFtZTsKLQl1bnNpZ25lZCBsb25nIGZvcm1hdF9kZXB0aDsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGZvcm1hdDsKLQl1bnNpZ25lZCBsb25nIGJ1c19wYXJhbTsKLQlpbnQgKCpzZXRfY2FwdHVyZSkoc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqaW5mbywgaW50IGVuYWJsZSk7Ci19OworI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaD4KIAogc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1fcHJpdiB7CiAJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqaW5mbzsKQEAgLTQ0LDExICszNiwyMSBAQAogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1faW5pdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICpwID0gc29jX2NhbWVyYV9wbGF0Zm9ybV9nZXRfaW5mbyhpY2QpOworCisJaWYgKHAtPnBvd2VyKQorCQlwLT5wb3dlcigxKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fcmVsZWFzZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvICpwID0gc29jX2NhbWVyYV9wbGF0Zm9ybV9nZXRfaW5mbyhpY2QpOworCisJaWYgKHAtPnBvd2VyKQorCQlwLT5wb3dlcigwKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCmluZGV4IGFkMzZhZjMuLmVkYWVhNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTY1LDIyICs2NCw2IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHN0a3dlYmNhbV90YWJsZSk7CiAKLXN0YXRpYyB2b2lkIHN0a19jYW1lcmFfY2xlYW51cChzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gdG9fc3RrX2NhbWVyYShrcmVmKTsKLQotCVNUS19JTkZPKCJTeW50ZWsgVVNCMi4wIENhbWVyYSByZWxlYXNlIHJlc291cmNlcyIKLQkJIiB2aWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkXG4iLCBkZXYtPnZkZXYubWlub3IpOwotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYpOwotCWRldi0+dmRldi5wcml2ID0gTlVMTDsKLQotCWlmIChkZXYtPnNpb19idWZzICE9IE5VTEwgfHwgZGV2LT5pc29idWZzICE9IE5VTEwpCi0JCVNUS19FUlJPUigiV2UgYXJlIGxlYWtpbmcgbWVtb3J5XG4iKTsKLQl1c2JfcHV0X2ludGYoZGV2LT5pbnRlcmZhY2UpOwotCWtmcmVlKGRldik7Ci19Ci0KLQogLyoKICAqIEJhc2ljIHN0dWZmCiAgKi8KQEAgLTU3Niw3ICs1NTksNyBAQAogCiAJCXVyYiA9IGRldi0+aXNvYnVmc1tpXS51cmI7CiAJCWlmICh1cmIpIHsKLQkJCWlmIChhdG9taWNfcmVhZCgmZGV2LT51cmJzX3VzZWQpKQorCQkJaWYgKGF0b21pY19yZWFkKCZkZXYtPnVyYnNfdXNlZCkgJiYgaXNfcHJlc2VudChkZXYpKQogCQkJCXVzYl9raWxsX3VyYih1cmIpOwogCQkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCX0KQEAgLTY4OSw0NSArNjcyLDMwIEBACiAJdmRldiA9IHZpZGVvX2RldmRhdGEoZnApOwogCWRldiA9IHZkZXZfdG9fY2FtZXJhKHZkZXYpOwogCi0JaWYgKGRldiA9PSBOVUxMIHx8ICFpc19wcmVzZW50KGRldikpCisJbG9ja19rZXJuZWwoKTsKKwlpZiAoZGV2ID09IE5VTEwgfHwgIWlzX3ByZXNlbnQoZGV2KSkgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5YSU87Ci0JZnAtPnByaXZhdGVfZGF0YSA9IHZkZXY7Ci0Ja3JlZl9nZXQoJmRldi0+a3JlZik7CisJfQorCWZwLT5wcml2YXRlX2RhdGEgPSBkZXY7CiAJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRldi0+aW50ZXJmYWNlKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2NGxfc3RrX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZwKQogewotCXN0cnVjdCBzdGtfY2FtZXJhICpkZXY7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKKwlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gZnAtPnByaXZhdGVfZGF0YTsKIAotCXZkZXYgPSB2aWRlb19kZXZkYXRhKGZwKTsKLQlpZiAodmRldiA9PSBOVUxMKSB7Ci0JCVNUS19FUlJPUigidjRsX3JlbGVhc2UgY2FsbGVkIHcvbyB2aWRlbyBkZXZkYXRhXG4iKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWRldiA9IHZkZXZfdG9fY2FtZXJhKHZkZXYpOwotCWlmIChkZXYgPT0gTlVMTCkgewotCQlTVEtfRVJST1IoInY0bF9yZWxlYXNlIGNhbGxlZCBvbiByZW1vdmVkIGRldmljZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCWlmIChkZXYtPm93bmVyID09IGZwKSB7CisJCXN0a19zdG9wX3N0cmVhbShkZXYpOworCQlzdGtfZnJlZV9idWZmZXJzKGRldik7CisJCWRldi0+b3duZXIgPSBOVUxMOwogCX0KIAotCWlmIChkZXYtPm93bmVyICE9IGZwKSB7CisJaWYoaXNfcHJlc2VudChkZXYpKQogCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGV2LT5pbnRlcmZhY2UpOwotCQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBzdGtfY2FtZXJhX2NsZWFudXApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzdGtfc3RvcF9zdHJlYW0oZGV2KTsKLQotCXN0a19mcmVlX2J1ZmZlcnMoZGV2KTsKLQotCWRldi0+b3duZXIgPSBOVUxMOwotCi0JdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50ZXJmYWNlKTsKLQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBzdGtfY2FtZXJhX2NsZWFudXApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03MzgsMTcgKzcwNiw4IEBACiAJaW50IGk7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBzdGtfY2FtZXJhICpkZXY7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKIAlzdHJ1Y3Qgc3RrX3Npb19idWZmZXIgKnNidWY7Ci0KLQl2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmcCk7Ci0JaWYgKHZkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JZGV2ID0gdmRldl90b19jYW1lcmEodmRldik7Ci0KLQlpZiAoZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUlPOworCXN0cnVjdCBzdGtfY2FtZXJhICpkZXYgPSBmcC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKCFpc19wcmVzZW50KGRldikpCiAJCXJldHVybiAtRUlPOwpAQCAtODA0LDE3ICs3NjMsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHY0bF9zdGtfcG9sbChzdHJ1Y3QgZmlsZSAqZnAsIHBvbGxfdGFibGUgKndhaXQpCiB7Ci0Jc3RydWN0IHN0a19jYW1lcmEgKmRldjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwotCi0JdmRldiA9IHZpZGVvX2RldmRhdGEoZnApOwotCi0JaWYgKHZkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlkZXYgPSB2ZGV2X3RvX2NhbWVyYSh2ZGV2KTsKLQlpZiAoZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOworCXN0cnVjdCBzdGtfY2FtZXJhICpkZXYgPSBmcC0+cHJpdmF0ZV9kYXRhOwogCiAJcG9sbF93YWl0KGZwLCAmZGV2LT53YWl0X2ZyYW1lLCB3YWl0KTsKIApAQCAtODUwLDE2ICs3OTksMTIgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwotCXN0cnVjdCBzdGtfY2FtZXJhICpkZXY7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKKwlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gZnAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc3RrX3Npb19idWZmZXIgKnNidWYgPSBOVUxMOwogCiAJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB8fCAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXZkZXYgPSB2aWRlb19kZXZkYXRhKGZwKTsKLQlkZXYgPSB2ZGV2X3RvX2NhbWVyYSh2ZGV2KTsKLQogCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc2J1ZnM7IGkrKykgewogCQlpZiAoZGV2LT5zaW9fYnVmc1tpXS52NGxidWYubS5vZmZzZXQgPT0gb2Zmc2V0KSB7CiAJCQlzYnVmID0gZGV2LT5zaW9fYnVmcyArIGk7CkBAIC0xMzU1LDYgKzEzMDAsMTIgQEAKIAogc3RhdGljIHZvaWQgc3RrX3Y0bF9kZXZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCkKIHsKKwlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gdmRldl90b19jYW1lcmEodmQpOworCisJaWYgKGRldi0+c2lvX2J1ZnMgIT0gTlVMTCB8fCBkZXYtPmlzb2J1ZnMgIT0gTlVMTCkKKwkJU1RLX0VSUk9SKCJXZSBhcmUgbGVha2luZyBtZW1vcnlcbiIpOworCXVzYl9wdXRfaW50ZihkZXYtPmludGVyZmFjZSk7CisJa2ZyZWUoZGV2KTsKIH0KIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc3RrX3Y0bF9kYXRhID0gewpAQCAtMTM3NSw3ICsxMzI2LDYgQEAKIAlkZXYtPnZkZXYgPSBzdGtfdjRsX2RhdGE7CiAJZGV2LT52ZGV2LmRlYnVnID0gZGVidWc7CiAJZGV2LT52ZGV2LnBhcmVudCA9ICZkZXYtPmludGVyZmFjZS0+ZGV2OwotCWRldi0+dmRldi5wcml2ID0gZGV2OwogCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CiAJaWYgKGVycikKIAkJU1RLX0VSUk9SKCJ2NGwgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CkBAIC0xMzkyLDcgKzEzNDIsNyBAQAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGk7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAogCXN0cnVjdCBzdGtfY2FtZXJhICpkZXYgPSBOVUxMOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwpAQCAtMTQwNSw3ICsxMzU1LDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Ja3JlZl9pbml0KCZkZXYtPmtyZWYpOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPnNwaW5sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfZnJhbWUpOwogCkBAIC0xNDM4LDggKzEzODcsOCBAQAogCX0KIAlpZiAoIWRldi0+aXNvY19lcCkgewogCQlTVEtfRVJST1IoIkNvdWxkIG5vdCBmaW5kIGlzb2MtaW4gZW5kcG9pbnQiKTsKLQkJa3JlZl9wdXQoJmRldi0+a3JlZiwgc3RrX2NhbWVyYV9jbGVhbnVwKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CiAJfQogCWRldi0+dnNldHRpbmdzLmJyaWdodG5lc3MgPSAweDdmZmY7CiAJZGV2LT52c2V0dGluZ3MucGFsZXR0ZSA9IFY0TDJfUElYX0ZNVF9SR0I1NjU7CkBAIC0xNDUzLDE0ICsxNDAyLDE3IEBACiAKIAllcnIgPSBzdGtfcmVnaXN0ZXJfdmlkZW9fZGV2aWNlKGRldik7CiAJaWYgKGVycikgewotCQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBzdGtfY2FtZXJhX2NsZWFudXApOwotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycm9yOwogCX0KIAogCXN0a19jcmVhdGVfc3lzZnNfZmlsZXMoJmRldi0+dmRldik7CiAJdXNiX2F1dG9wbV9lbmFibGUoZGV2LT5pbnRlcmZhY2UpOwogCiAJcmV0dXJuIDA7CisKK2Vycm9yOgorCWtmcmVlKGRldik7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgc3RrX2NhbWVyYV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCkBAIC0xNDczLDcgKzE0MjUsMTAgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d2FpdF9mcmFtZSk7CiAJc3RrX3JlbW92ZV9zeXNmc19maWxlcygmZGV2LT52ZGV2KTsKIAotCWtyZWZfcHV0KCZkZXYtPmtyZWYsIHN0a19jYW1lcmFfY2xlYW51cCk7CisJU1RLX0lORk8oIlN5bnRlayBVU0IyLjAgQ2FtZXJhIHJlbGVhc2UgcmVzb3VyY2VzICIKKwkJInZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWRcbiIsIGRldi0+dmRldi5taW5vcik7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uaAppbmRleCBkZjRkZmVmLi45ZjY3MzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uaApAQCAtOTksNyArOTksNiBAQAogCiAJdTggaXNvY19lcDsKIAotCXN0cnVjdCBrcmVmIGtyZWY7CiAJLyogTm90IHN1cmUgaWYgdGhpcyBpcyByaWdodCAqLwogCWF0b21pY190IHVyYnNfdXNlZDsKIApAQCAtMTIxLDEwICsxMjAsOCBAQAogCXVuc2lnbmVkIHNlcXVlbmNlOwogfTsKIAotI2RlZmluZSB0b19zdGtfY2FtZXJhKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc3RrX2NhbWVyYSwga3JlZikKICNkZWZpbmUgdmRldl90b19jYW1lcmEoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBzdGtfY2FtZXJhLCB2ZGV2KQogCi12b2lkIHN0a19jYW1lcmFfZGVsZXRlKHN0cnVjdCBrcmVmICopOwogaW50IHN0a19jYW1lcmFfd3JpdGVfcmVnKHN0cnVjdCBzdGtfY2FtZXJhICosIHUxNiwgdTgpOwogaW50IHN0a19jYW1lcmFfcmVhZF9yZWcoc3RydWN0IHN0a19jYW1lcmEgKiwgdTE2LCBpbnQgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RyYWRpcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMKaW5kZXggMjc2YmRlZC4uYmJhZDU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMKQEAgLTE4ODIsMTIgKzE4ODIsMTYgQEAKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKIAlzdHJ1Y3Qgc2FhNzE0NiAqc2FhID0gY29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBzYWE3MTQ2LCB2aWRlb19kZXYpOwogCisJbG9ja19rZXJuZWwoKTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBzYWE7CiAKIAlzYWEtPnVzZXIrKzsKLQlpZiAoc2FhLT51c2VyID4gMSkKKwlpZiAoc2FhLT51c2VyID4gMSkgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAwOwkvKiBkZXZpY2Ugb3BlbiBhbHJlYWR5LCBkb24ndCByZXNldCAqLworCX0KIAlzYWEtPndyaXRlbW9kZSA9IFZJRF9XUklURV9NUEVHX1ZJRDsJLyogZGVmYXVsdCB0byB2aWRlbyAqLworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkyMSw2ICsxOTI1LDcgQEAKIAkubmFtZSA9ICJTQUE3MTQ2QSIsCiAJLmZvcHMgPSAmc2FhX2ZvcHMsCiAJLm1pbm9yID0gLTEsCisJLnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNvbmZpZ3VyZV9zYWE3MTQ2KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLmMKaW5kZXggZGNlOTQ3NC4uOWM1NDlkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0djY4MC5jCkBAIC04NCw3ICs4NCw4IEBACiAjZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCiAJZG8geyBcCiAJaWYgKGRlYnVnID49IGxldmVsKQlcCi0JCWluZm8oIlslczolZF0gIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOwlcCisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIiBbJXM6JWRdIFxuIiBmbXQsCVwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOwlcCiAJfSB3aGlsZSAoMCkKIAogCkBAIC0xMDg2LDYgKzEwODcsNyBAQAogCWludCBlcnIgPSAwOwogCiAJLyogd2UgYXJlIGNhbGxlZCB3aXRoIHRoZSBCS0wgaGVsZCAqLworCWxvY2tfa2VybmVsKCk7CiAJc3R2NjgwLT51c2VyID0gMTsKIAllcnIgPSBzdHZfaW5pdCAoc3R2NjgwKTsJLyogbWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBjYW1lcmEgKi8KIApAQCAtMTA5OSw2ICsxMTAxLDcgQEAKIAl9CiAJaWYgKGVycikKIAkJc3R2NjgwLT51c2VyID0gMDsKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTU1MCw3ICsxNTUzLDggQEAKIAl9CiAJUERFQlVHICgwLCAiU1RWKGkpOiB1c2IgY2FtZXJhIGRyaXZlciB2ZXJzaW9uICVzIHJlZ2lzdGVyaW5nIiwgRFJJVkVSX1ZFUlNJT04pOwogCi0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKaW5kZXggMjQzN2MxYS4uMWMzOTFmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKQEAgLTIsNiArMiw3IEBACiAgICAgdGRhOTg0MCAtIGkyYy1kcml2ZXIgZm9yIHRoZSB0ZGE5ODQwIGJ5IFNHUyBUaG9tc29uCiAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMyBNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPgorICAgIENvcHlyaWdodCAoQykgMjAwOCBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KIAogICAgIFRoZSB0ZGE5ODQwIGlzIGEgc3RlcmVvL2R1YWwgc291bmQgcHJvY2Vzc29yIHdpdGggZGlnaXRhbAogICAgIGlkZW50aWZpY2F0aW9uLiBJdCBjYW4gYmUgZm91bmQgYXQgYWRkcmVzcyAweDg0IG9uIHRoZSBpMmMtYnVzLgpAQCAtMjgsNTkgKzI5LDExOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KICNpbmNsdWRlICJ0ZGE5ODQwLmgiCiAKLXN0YXRpYyBpbnQgZGVidWc7CQkvKiBpbnNtb2QgcGFyYW1ldGVyICovCi1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZGV2aWNlIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigidGRhOTg0MCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKLQkgICAgZG8geyBpZiAoZGVidWcpIHsgcHJpbnRrKCIlczogJXMoKVslZF06ICIsIEtCVUlMRF9NT0ROQU1FLCBfX2Z1bmNfXywgX19MSU5FX18pOyBwcmludGsoYXJncyk7IH0gfSB3aGlsZSAoMCkKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CisKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCiAjZGVmaW5lCVNXSVRDSAkJMHgwMAogI2RlZmluZQlMRVZFTF9BREpVU1QJMHgwMgogI2RlZmluZQlTVEVSRU9fQURKVVNUCTB4MDMKICNkZWZpbmUJVEVTVAkJMHgwNAogCisjZGVmaW5lIFREQTk4NDBfU0VUX01VVEUgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBUREE5ODQwX1NFVF9NT05PICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgVERBOTg0MF9TRVRfU1RFUkVPICAgICAgICAgICAgICAweDJhCisjZGVmaW5lIFREQTk4NDBfU0VUX0xBTkcxICAgICAgICAgICAgICAgMHgxMgorI2RlZmluZSBUREE5ODQwX1NFVF9MQU5HMiAgICAgICAgICAgICAgIDB4MWUKKyNkZWZpbmUgVERBOTg0MF9TRVRfQk9USCAgICAgICAgICAgICAgICAweDFhCisjZGVmaW5lIFREQTk4NDBfU0VUX0JPVEhfUiAgICAgICAgICAgICAgMHgxNgorI2RlZmluZSBUREE5ODQwX1NFVF9FWFRFUk5BTCAgICAgICAgICAgIDB4N2EKKwogLyogYWRkcmVzc2VzIHRvIHNjYW4sIGZvdW5kIG9ubHkgYXQgMHg0MiAoNy1CaXQpICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQUREUl9UREE5ODQwLCBJMkNfQ0xJRU5UX0VORCB9OwogCiAvKiBtYWdpYyBkZWZpbml0aW9uIG9mIGFsbCBvdGhlciB2YXJpYWJsZXMgYW5kIHRoaW5ncyAqLwogSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXI7Ci1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlOwotCi1zdGF0aWMgaW50IGNvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIHZvaWQgdGRhOTg0MF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbCkKIHsKLQlpbnQgcmVzdWx0OworCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpKQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJlcnJvciB3cml0aW5nICUwMnggdG8gJTAyeFxuIiwKKwkJCQl2YWwsIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgdGRhOTg0MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorewogCWludCBieXRlID0gKihpbnQgKilhcmc7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVERBOTg0MF9TV0lUQ0g6CisJY2FzZSBWSURJT0NfU19UVU5FUjogeworCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKKwkJaW50IGJ5dGU7CiAKLQkJZHByaW50aygiVERBOTg0MF9TV0lUQ0g6IDB4JTAyeFxuIiwgYnl0ZSk7CisJCWlmICh0LT5pbmRleCkKKwkJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmIChieXRlICE9IFREQTk4NDBfU0VUX01PTk8KLQkJICAgICYmIGJ5dGUgIT0gVERBOTg0MF9TRVRfTVVURQotCQkgICAgJiYgYnl0ZSAhPSBUREE5ODQwX1NFVF9TVEVSRU8KLQkJICAgICYmIGJ5dGUgIT0gVERBOTg0MF9TRVRfTEFORzEKLQkJICAgICYmIGJ5dGUgIT0gVERBOTg0MF9TRVRfTEFORzIKLQkJICAgICYmIGJ5dGUgIT0gVERBOTg0MF9TRVRfQk9USAotCQkgICAgJiYgYnl0ZSAhPSBUREE5ODQwX1NFVF9CT1RIX1IKLQkJICAgICYmIGJ5dGUgIT0gVERBOTg0MF9TRVRfRVhURVJOQUwpIHsKKwkJc3dpdGNoICh0LT5hdWRtb2RlKSB7CisJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJCWJ5dGUgPSBUREE5ODQwX1NFVF9TVEVSRU87CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6CisJCQlieXRlID0gVERBOTg0MF9TRVRfQk9USDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKKwkJCWJ5dGUgPSBUREE5ODQwX1NFVF9MQU5HMTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKKwkJCWJ5dGUgPSBUREE5ODQwX1NFVF9MQU5HMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnl0ZSA9IFREQTk4NDBfU0VUX01PTk87CisJCQlicmVhazsKKwkJfQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJUREE5ODQwX1NXSVRDSDogMHglMDJ4XG4iLCBieXRlKTsKKwkJdGRhOTg0MF93cml0ZShjbGllbnQsIFNXSVRDSCwgYnl0ZSk7CisJCWJyZWFrOworCX0KKworCWNhc2UgVklESU9DX0dfVFVORVI6IHsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7CisJCXU4IGJ5dGU7CisKKwkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CisJCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsICZieXRlLCAxKSkgeworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJCSJpMmNfbWFzdGVyX3JlY3YoKSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZiAoYnl0ZSAmIDB4ODApIHsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCQkiVERBOTg0MF9ERVRFQ1Q6IHJlZ2lzdGVyIGNvbnRlbnRzIGludmFsaWRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlyZXN1bHQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgU1dJVENILCBieXRlKTsKLQkJaWYgKHJlc3VsdCkKLQkJCWRwcmludGsoImkyY19zbWJ1c193cml0ZV9ieXRlKCkgZmFpbGVkLCByZXQ6JWRcbiIsIHJlc3VsdCk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlREQTk4NDBfREVURUNUOiBieXRlOiAweCUwMnhcbiIsIGJ5dGUpOworCisJCXN3aXRjaCAoYnl0ZSAmIDB4NjApIHsKKwkJY2FzZSAweDAwOgorCQkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CisJCQlicmVhazsKKwkJY2FzZSAweDIwOgorCQkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX0xBTkcxIHwgVjRMMl9UVU5FUl9TVUJfTEFORzI7CisJCQlicmVhazsKKwkJY2FzZSAweDQwOgorCQkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTyB8IFY0TDJfVFVORVJfU1VCX01PTk87CisJCQlicmVhazsKKwkJZGVmYXVsdDogLyogSW5jb3JyZWN0IGRldGVjdCAqLworCQkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCQkJYnJlYWs7CisJCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBUREE5ODQwX0xFVkVMX0FESlVTVDoKLQotCQlkcHJpbnRrKCJUREE5ODQwX0xFVkVMX0FESlVTVDogJWRcbiIsIGJ5dGUpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJUREE5ODQwX0xFVkVMX0FESlVTVDogJWRcbiIsIGJ5dGUpOwogCiAJCS8qIGNoZWNrIGZvciBjb3JyZWN0IHJhbmdlICovCiAJCWlmIChieXRlID4gMjUgfHwgYnl0ZSA8IC0yMCkKQEAgLTkyLDE1ICsxNTIsMTEgQEAKIAkJCWJ5dGUgKz0gMHg4OwogCQllbHNlCiAJCQlieXRlID0gLWJ5dGU7Ci0KLQkJcmVzdWx0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExFVkVMX0FESlVTVCwgYnl0ZSk7Ci0JCWlmIChyZXN1bHQpCi0JCQlkcHJpbnRrKCJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIGZhaWxlZCwgcmV0OiVkXG4iLCByZXN1bHQpOworCQl0ZGE5ODQwX3dyaXRlKGNsaWVudCwgTEVWRUxfQURKVVNULCBieXRlKTsKIAkJYnJlYWs7CiAKIAljYXNlIFREQTk4NDBfU1RFUkVPX0FESlVTVDoKLQotCQlkcHJpbnRrKCJUREE5ODQwX1NURVJFT19BREpVU1Q6ICVkXG4iLCBieXRlKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiVERBOTg0MF9TVEVSRU9fQURKVVNUOiAlZFxuIiwgYnl0ZSk7CiAKIAkJLyogY2hlY2sgZm9yIGNvcnJlY3QgcmFuZ2UgKi8KIAkJaWYgKGJ5dGUgPiAyNSB8fCBieXRlIDwgLTI0KQpAQCAtMTEzLDE0MyArMTY5LDU5IEBACiAJCWVsc2UKIAkJCWJ5dGUgPSAtYnl0ZTsKIAotCQlyZXN1bHQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgU1RFUkVPX0FESlVTVCwgYnl0ZSk7Ci0JCWlmIChyZXN1bHQpCi0JCQlkcHJpbnRrKCJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIGZhaWxlZCwgcmV0OiVkXG4iLCByZXN1bHQpOwotCQlicmVhazsKLQotCWNhc2UgVERBOTg0MF9ERVRFQ1Q6IHsKLQkJaW50ICpyZXQgPSAoaW50ICopYXJnOwotCi0JCWJ5dGUgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBTVEVSRU9fQURKVVNUKTsKLQkJaWYgKGJ5dGUgPT0gLTEpIHsKLQkJCWRwcmludGsoImkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSgpIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCWlmICgwICE9IChieXRlICYgMHg4MCkpIHsKLQkJCWRwcmludGsoIlREQTk4NDBfREVURUNUOiByZWdpc3RlciBjb250ZW50cyBpbnZhbGlkXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJZHByaW50aygiVERBOTg0MF9ERVRFQ1Q6IGJ5dGU6IDB4JTAyeFxuIiwgYnl0ZSk7Ci0JCSpyZXQgPSAoKGJ5dGUgJiAweDYwKSA+PiA1KTsKLQkJcmVzdWx0ID0gMDsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVERBOTg0MF9URVNUOgotCQlkcHJpbnRrKCJUREE5ODQwX1RFU1Q6IDB4JTAyeFxuIiwgYnl0ZSk7Ci0KLQkJLyogbWFzayBvdXQgaXJyZWxldmFudCBiaXRzICovCi0JCWJ5dGUgJj0gMHgzOwotCi0JCXJlc3VsdCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBURVNULCBieXRlKTsKLQkJaWYgKHJlc3VsdCkKLQkJCWRwcmludGsoImkyY19zbWJ1c193cml0ZV9ieXRlKCkgZmFpbGVkLCByZXQ6JWRcbiIsIHJlc3VsdCk7CisJCXRkYTk4NDBfd3JpdGUoY2xpZW50LCBTVEVSRU9fQURKVVNULCBieXRlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CiAKLQlpZiAocmVzdWx0KQotCQlyZXR1cm4gLUVJTzsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKK3N0YXRpYyBpbnQgdGRhOTg0MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlpbnQgcmVzdWx0ID0gMDsKLQotCWludCBieXRlID0gMHgwOworCWludCByZXN1bHQ7CisJaW50IGJ5dGU7CiAKIAkvKiBsZXQncyBzZWUgd2hldGhlciB0aGlzIGFkYXB0ZXIgY2FuIHN1cHBvcnQgd2hhdCB3ZSBuZWVkICovCi0JaWYgKDAgPT0gaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwKLQkJCQkgICAgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFX0RBVEEgfAotCQkJCSAgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEpKSB7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCQlJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQSB8CisJCQlJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEpKQogCQlyZXR1cm4gMDsKLQl9CiAKLQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNsaWVudCBzdHJ1Y3R1cmUgKi8KLQljbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KSB7Ci0JCXByaW50aygibm90IGVub3VnaCBrZXJuZWwgbWVtb3J5XG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogZmlsbCBjbGllbnQgc3RydWN0dXJlICovCi0JbWVtY3B5KGNsaWVudCwgJmNsaWVudF90ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCi0JLyogdGVsbCB0aGUgaTJjIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwotCWlmICgwICE9IChyZXN1bHQgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpKSkgewotCQlrZnJlZShjbGllbnQpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAkvKiBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIGxldmVsICYgc3RlcmVvIC0gYWRqdXN0bWVudCwgbW9kZSAqLwogCWJ5dGUgPSAwOwotCXJlc3VsdCAgPSBjb21tYW5kKGNsaWVudCwgVERBOTg0MF9MRVZFTF9BREpVU1QsICZieXRlKTsKLQlyZXN1bHQgKz0gY29tbWFuZChjbGllbnQsIFREQTk4NDBfU1RFUkVPX0FESlVTVCwgJmJ5dGUpOwotCWJ5dGUgPSBUREE5ODQwX1NFVF9NT05POwotCXJlc3VsdCA9IGNvbW1hbmQoY2xpZW50LCBUREE5ODQwX1NXSVRDSCwgJmJ5dGUpOworCXJlc3VsdCA9IHRkYTk4NDBfY29tbWFuZChjbGllbnQsIFREQTk4NDBfTEVWRUxfQURKVVNULCAmYnl0ZSk7CisJcmVzdWx0ICs9IHRkYTk4NDBfY29tbWFuZChjbGllbnQsIFREQTk4NDBfU1RFUkVPX0FESlVTVCwgJmJ5dGUpOworCXRkYTk4NDBfd3JpdGUoY2xpZW50LCBTV0lUQ0gsIFREQTk4NDBfU0VUX1NURVJFTyk7CiAJaWYgKHJlc3VsdCkgewotCQlkcHJpbnRrKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSB0ZGE5ODQwXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiY291bGQgbm90IGluaXRpYWxpemUgdGRhOTg0MFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQotCXByaW50aygidGRhOTg0MDogZGV0ZWN0ZWQgQCAweCUwMnggb24gYWRhcHRlciAlc1xuIiwgYWRkcmVzcywgJmNsaWVudC0+YWRhcHRlci0+bmFtZVswXSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgdGRhOTg0MF9sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewotCS8qIGxldCdzIHNlZSB3aGV0aGVyIHRoaXMgaXMgYSBrbm93IGFkYXB0ZXIgd2UgY2FuIGF0dGFjaCB0byAqLwotCWlmIChhZGFwdGVyLT5pZCAhPSBJMkNfSFdfU0FBNzE0NikgewotCQlkcHJpbnRrKCJyZWZ1c2luZyB0byBwcm9iZSBvbiB1bmtub3duIGFkYXB0ZXIgW25hbWU9JyVzJyxpZD0weCV4XVxuIiwgYWRhcHRlci0+bmFtZSwgYWRhcHRlci0+aWQpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZkZXRlY3QpOworCS8qIExldCdzIHNlZSB3aGV0aGVyIHRoaXMgaXMgYSBrbm93biBhZGFwdGVyIHdlIGNhbiBhdHRhY2ggdG8uCisJICAgUHJldmVudHMgY29uZmxpY3RzIHdpdGggdHZhdWRpby5jLiAqLworCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfU0FBNzE0NjsKIH0KLQotc3RhdGljIGludCBkZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlpbnQgcmV0ID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShjbGllbnQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAidGRhOTg0MCIsCi0JfSwKLQkuaWQJPSBJMkNfRFJJVkVSSURfVERBOTg0MCwKLQkuYXR0YWNoX2FkYXB0ZXIJPSBhdHRhY2gsCi0JLmRldGFjaF9jbGllbnQJPSBkZXRhY2gsCi0JLmNvbW1hbmQJPSBjb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRkYTk4NDBfaWRbXSA9IHsKKwl7ICJ0ZGE5ODQwIiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0ZGE5ODQwX2lkKTsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ0ZGE5ODQwIiwKLQkuZHJpdmVyID0gJmRyaXZlciwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVERBOTg0MCwKKwkuY29tbWFuZCA9IHRkYTk4NDBfY29tbWFuZCwKKwkucHJvYmUgPSB0ZGE5ODQwX3Byb2JlLAorCS5sZWdhY3lfcHJvYmUgPSB0ZGE5ODQwX2xlZ2FjeV9wcm9iZSwKKwkuaWRfdGFibGUgPSB0ZGE5ODQwX2lkLAogfTsKLQotc3RhdGljIGludCBfX2luaXQgdGhpc19tb2R1bGVfaW5pdCh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHRoaXNfbW9kdWxlX2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQodGhpc19tb2R1bGVfaW5pdCk7Ci1tb2R1bGVfZXhpdCh0aGlzX21vZHVsZV9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigidGRhOTg0MCBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmgKaW5kZXggN2RhODQzMi4uZGMxMmFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmgKQEAgLTMsMjQgKzMsNiBAQAogCiAjZGVmaW5lCUkyQ19BRERSX1REQTk4NDAJCTB4NDIKIAotI2RlZmluZSBUREE5ODQwX0RFVEVDVAkJX0lPUigndicsMSxpbnQpCi0vKiByZXR1cm4gdmFsdWVzIGZvciBUREE5ODQwX0RFVENUICovCi0jZGVmaW5lIFREQTk4NDBfTU9OT19ERVRFQ1QJCTB4MAotI2RlZmluZQlUREE5ODQwX0RVQUxfREVURUNUCQkweDEKLSNkZWZpbmUJVERBOTg0MF9TVEVSRU9fREVURUNUCQkweDIKLSNkZWZpbmUJVERBOTg0MF9JTkNPUlJFQ1RfREVURUNUCTB4MwotCi0jZGVmaW5lIFREQTk4NDBfU1dJVENICQlfSU9XKCd2JywyLGludCkKLS8qIG1vZGVzIHRoYW4gY2FuIGJlIHNldCB3aXRoIFREQTk4NDBfU1dJVENIICovCi0jZGVmaW5lCVREQTk4NDBfU0VUX01VVEUJCTB4MDAKLSNkZWZpbmUJVERBOTg0MF9TRVRfTU9OTwkJMHgxMAotI2RlZmluZQlUREE5ODQwX1NFVF9TVEVSRU8JCTB4MmEKLSNkZWZpbmUJVERBOTg0MF9TRVRfTEFORzEJCTB4MTIKLSNkZWZpbmUJVERBOTg0MF9TRVRfTEFORzIJCTB4MWUKLSNkZWZpbmUJVERBOTg0MF9TRVRfQk9USAkJMHgxYQotI2RlZmluZQlUREE5ODQwX1NFVF9CT1RIX1IJCTB4MTYKLSNkZWZpbmUJVERBOTg0MF9TRVRfRVhURVJOQUwJCTB4N2EKLQogLyogdmFsdWVzIG1heSByYW5nZSBiZXR3ZWVuICsyLjUgYW5kIC0yLjA7CiAgICB0aGUgdmFsdWUgaGFzIHRvIGJlIG11bHRpcGxpZWQgd2l0aCAxMCAqLwogI2RlZmluZSBUREE5ODQwX0xFVkVMX0FESlVTVAlfSU9XKCd2JywzLGludCkKQEAgLTI5LDcgKzExLDQgQEAKICAgIHRoZSB2YWx1ZSBoYXMgdG8gYmUgbXVsdGlwbGllZCB3aXRoIDEwICovCiAjZGVmaW5lIFREQTk4NDBfU1RFUkVPX0FESlVTVAlfSU9XKCd2Jyw0LGludCkKIAotLyogY3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZCAqLwotI2RlZmluZSBUREE5ODQwX1RFU1QJCV9JT1coJ3YnLDUsaW50KQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYwppbmRleCA0MjFjMTQ0Li5jZGUwOTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCkBAIC0yLDYgKzIsNyBAQAogICAgIHRlYTY0MTVjIC0gaTJjLWRyaXZlciBmb3IgdGhlIHRlYTY0MTVjIGJ5IFNHUyBUaG9tc29uCiAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMyBNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPgorICAgIENvcHlyaWdodCAoQykgMjAwOCBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KIAogICAgIFRoZSB0ZWE2NDE1YyBpcyBhIGJ1cyBjb250cm9sbGVkIHZpZGVvLW1hdHJpeC1zd2l0Y2gKICAgICB3aXRoIDggaW5wdXRzIGFuZCA2IG91dHB1dHMuCkBAIC0zMCwxOCArMzEsMTggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAjaW5jbHVkZSAidGVhNjQxNWMuaCIKIAotc3RhdGljIGludCBkZWJ1ZzsJCS8qIGluc21vZCBwYXJhbWV0ZXIgKi8KK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInRlYTY0MTVjIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGRldmljZSBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKIAotI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKLQkgICAgZG8geyBpZiAoZGVidWcpIHsgcHJpbnRrKCIlczogJXMoKVslZF06ICIsIEtCVUlMRF9NT0ROQU1FLCBfX2Z1bmNfXywgX19MSU5FX18pOyBwcmludGsoYXJncyk7IH0gfSB3aGlsZSAoMCkKLQotI2RlZmluZSBURUE2NDE1Q19OVU1fSU5QVVRTCTgKLSNkZWZpbmUgVEVBNjQxNUNfTlVNX09VVFBVVFMJNgorTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKIC8qIGFkZHJlc3NlcyB0byBzY2FuLCBmb3VuZCBvbmx5IGF0IDB4MDMgYW5kL29yIDB4NDMgKDctYml0KSAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX1RFQTY0MTVDXzEsIEkyQ19URUE2NDE1Q18yLCBJMkNfQ0xJRU5UX0VORCB9OwpAQCAtNDksNjAgKzUwLDYgQEAKIC8qIG1hZ2ljIGRlZmluaXRpb24gb2YgYWxsIG90aGVyIHZhcmlhYmxlcyBhbmQgdGhpbmdzICovCiBJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlcjsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGU7Ci0KLS8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGkyY19wcm9iZSAqLwotc3RhdGljIGludCBkZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IE5VTEw7Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBsZXQncyBzZWUgd2hldGhlciB0aGlzIGFkYXB0ZXIgY2FuIHN1cHBvcnQgd2hhdCB3ZSBuZWVkICovCi0JaWYgKDAgPT0gaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURSkpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogYWxsb2NhdGUgbWVtb3J5IGZvciBjbGllbnQgc3RydWN0dXJlICovCi0JY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkgewotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiBmaWxsIGNsaWVudCBzdHJ1Y3R1cmUgKi8KLQltZW1jcHkoY2xpZW50LCAmY2xpZW50X3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0KLQkvKiB0ZWxsIHRoZSBpMmMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCi0JaWYgKDAgIT0gKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCkpKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JcHJpbnRrKCJ0ZWE2NDE1YzogZGV0ZWN0ZWQgQCAweCUwMnggb24gYWRhcHRlciAlc1xuIiwgYWRkcmVzcywgJmNsaWVudC0+YWRhcHRlci0+bmFtZVswXSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCS8qIGxldCdzIHNlZSB3aGV0aGVyIHRoaXMgaXMgYSBrbm93IGFkYXB0ZXIgd2UgY2FuIGF0dGFjaCB0byAqLwotCWlmIChhZGFwdGVyLT5pZCAhPSBJMkNfSFdfU0FBNzE0NikgewotCQlkcHJpbnRrKCJyZWZ1c2luZyB0byBwcm9iZSBvbiB1bmtub3duIGFkYXB0ZXIgW25hbWU9JyVzJyxpZD0weCV4XVxuIiwgYWRhcHRlci0+bmFtZSwgYWRhcHRlci0+aWQpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZkZXRlY3QpOwotfQotCi1zdGF0aWMgaW50IGRldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWludCByZXQgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWtmcmVlKGNsaWVudCk7Ci0JcmV0dXJuIHJldDsKLX0KLQogLyogbWFrZXMgYSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGlucHV0LXBpbiAnaScgYW5kIHRoZSBvdXRwdXQtcGluICdvJwogICAgZm9yIHRoZSB0ZWE2NDE1Yy1jbGllbnQgJ2NsaWVudCcgKi8KIHN0YXRpYyBpbnQgc3dpdGNoX21hdHJpeChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaSwgaW50IG8pCkBAIC0xMTAsNyArNTcsNyBAQAogCXU4IGJ5dGUgPSAwOwogCWludCByZXQ7CiAKLQlkcHJpbnRrKCJhZHI6MHglMDJ4LCBpOiVkLCBvOiVkXG4iLCBjbGllbnQtPmFkZHIsIGksIG8pOworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImk9JWQsIG89JWRcbiIsIGksIG8pOwogCiAJLyogY2hlY2sgaWYgdGhlIHBpbnMgYXJlIHZhbGlkICovCiAJaWYgKDAgPT0gKCgxID09IGkgfHwgIDMgPT0gaSB8fCAgNSA9PSBpIHx8ICA2ID09IGkgfHwgIDggPT0gaSB8fCAxMCA9PSBpIHx8IDIwID09IGkgfHwgMTEgPT0gaSkKQEAgLTE2OCwxNCArMTE1LDE0IEBACiAKIAlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZShjbGllbnQsIGJ5dGUpOwogCWlmIChyZXQpIHsKLQkJZHByaW50aygiaTJjX3NtYnVzX3dyaXRlX2J5dGUoKSBmYWlsZWQsIHJldDolZFxuIiwgcmV0KTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJImkyY19zbWJ1c193cml0ZV9ieXRlKCkgZmFpbGVkLCByZXQ6JWRcbiIsIHJldCk7CiAJCXJldHVybiAtRUlPOwogCX0KLQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHRlYTY0MTVjX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHRlYTY0MTVjX211bHRpcGxleCAqdiA9IChzdHJ1Y3QgdGVhNjQxNWNfbXVsdGlwbGV4ICopYXJnOwogCWludCByZXN1bHQgPSAwOwpAQCAtMTg3LDM4ICsxMzQsNDAgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KLQogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAidGVhNjQxNWMiLAotCX0sCi0JLmlkIAk9IEkyQ19EUklWRVJJRF9URUE2NDE1QywKLQkuYXR0YWNoX2FkYXB0ZXIJPSBhdHRhY2gsCi0JLmRldGFjaF9jbGllbnQJPSBkZXRhY2gsCi0JLmNvbW1hbmQJPSBjb21tYW5kLAotfTsKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGkyY19wcm9iZSAqLworc3RhdGljIGludCB0ZWE2NDE1Y19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJLyogbGV0J3Mgc2VlIHdoZXRoZXIgdGhpcyBhZGFwdGVyIGNhbiBzdXBwb3J0IHdoYXQgd2UgbmVlZCAqLworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFKSkKKwkJcmV0dXJuIDA7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGUgPSB7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlYTY0MTVjX2xlZ2FjeV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJLyogTGV0J3Mgc2VlIHdoZXRoZXIgdGhpcyBpcyBhIGtub3duIGFkYXB0ZXIgd2UgY2FuIGF0dGFjaCB0by4KKwkgICBQcmV2ZW50cyBjb25mbGljdHMgd2l0aCB0dmF1ZGlvLmMuICovCisJcmV0dXJuIGFkYXB0ZXItPmlkID09IEkyQ19IV19TQUE3MTQ2OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdGVhNjQxNWNfaWRbXSA9IHsKKwl7ICJ0ZWE2NDE1YyIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdGVhNjQxNWNfaWQpOworCitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidGVhNjQxNWMiLAotCS5kcml2ZXIgPSAmZHJpdmVyLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9URUE2NDE1QywKKwkuY29tbWFuZCA9IHRlYTY0MTVjX2NvbW1hbmQsCisJLnByb2JlID0gdGVhNjQxNWNfcHJvYmUsCisJLmxlZ2FjeV9wcm9iZSA9IHRlYTY0MTVjX2xlZ2FjeV9wcm9iZSwKKwkuaWRfdGFibGUgPSB0ZWE2NDE1Y19pZCwKIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHRoaXNfbW9kdWxlX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmRyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0aGlzX21vZHVsZV9leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmRyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHRoaXNfbW9kdWxlX2luaXQpOwotbW9kdWxlX2V4aXQodGhpc19tb2R1bGVfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oInRlYTY0MTVjIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwppbmRleCBiNWM4OTU3Li5lNTA4MjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwpAQCAtMiw2ICsyLDcgQEAKICAgICB0ZWE2NDIwIC0gaTJjLWRyaXZlciBmb3IgdGhlIHRlYTY0MjAgYnkgU0dTIFRob21zb24KIAogICAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAzIE1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgogCiAgICAgVGhlIHRlYTY0MjAgaXMgYSBidXMgY29udHJvbGxlZCBhdWRpby1tYXRyaXggd2l0aCA1IHN0ZXJlbyBpbnB1dHMsCiAgICAgNCBzdGVyZW8gb3V0cHV0cyBhbmQgZ2FpbiBjb250cm9sIGZvciBlYWNoIG91dHB1dC4KQEAgLTMwLDE1ICszMSwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KICNpbmNsdWRlICJ0ZWE2NDIwLmgiCiAKLXN0YXRpYyBpbnQgZGVidWc7CQkvKiBpbnNtb2QgcGFyYW1ldGVyICovCi1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZGV2aWNlIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigidGVhNjQyMCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKLQkgICAgZG8geyBpZiAoZGVidWcpIHsgcHJpbnRrKCIlczogJXMoKVslZF06ICIsIEtCVUlMRF9NT0ROQU1FLCBfX2Z1bmNfXywgX19MSU5FX18pOyBwcmludGsoYXJncyk7IH0gfSB3aGlsZSAoMCkKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CisKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCiAvKiBhZGRyZXNzZXMgdG8gc2NhbiwgZm91bmQgb25seSBhdCAweDRjIGFuZC9vciAweDRkICg3LUJpdCkgKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19BRERSX1RFQTY0MjBfMSwgSTJDX0FERFJfVEVBNjQyMF8yLCBJMkNfQ0xJRU5UX0VORCB9OwpAQCAtNDYsMjMgKzUwLDIwIEBACiAvKiBtYWdpYyBkZWZpbml0aW9uIG9mIGFsbCBvdGhlciB2YXJpYWJsZXMgYW5kIHRoaW5ncyAqLwogSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXI7Ci1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlOwotCiAvKiBtYWtlIGEgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBpbnB1dCAnaScgYW5kIHRoZSBvdXRwdXQgJ28nCiAgICB3aXRoIGdhaW4gJ2cnIGZvciB0aGUgdGVhNjQyMC1jbGllbnQgJ2NsaWVudCcgKG5vdGU6IGkgPSA2IG1lYW5zICdtdXRlJykgKi8KIHN0YXRpYyBpbnQgdGVhNjQyMF9zd2l0Y2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGksIGludCBvLCBpbnQgZykKIHsKLQl1OCBieXRlID0gMDsKKwl1OCBieXRlOwogCWludCByZXQ7CiAKLQlkcHJpbnRrKCJhZHI6MHglMDJ4LCBpOiVkLCBvOiVkLCBnOiVkXG4iLCBjbGllbnQtPmFkZHIsIGksIG8sIGcpOworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImk9JWQsIG89JWQsIGc9JWRcbiIsIGksIG8sIGcpOwogCiAJLyogY2hlY2sgaWYgdGhlIHBhcmFtZXRlcnMgYXJlIHZhbGlkICovCiAJaWYgKGkgPCAxIHx8IGkgPiA2IHx8IG8gPCAxIHx8IG8gPiA0IHx8IGcgPCAwIHx8IGcgPiA2IHx8IGcgJSAyICE9IDApCiAJCXJldHVybiAtMTsKIAotCWJ5dGUgID0gKChvIC0gMSkgPDwgNSk7CisJYnl0ZSA9ICgobyAtIDEpIDw8IDUpOwogCWJ5dGUgfD0gKGkgLSAxKTsKIAogCS8qIHRvIHVuZGVyc3RhbmQgdGhpcywgaGF2ZSBhIGxvb2sgYXQgdGhlIHRlYTY0MjAtc3BlY3MgKHAuNSkgKi8KQEAgLTgyLDc2ICs4MywxNCBAQAogCiAJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCBieXRlKTsKIAlpZiAocmV0KSB7Ci0JCWRwcmludGsoImkyY19zbWJ1c193cml0ZV9ieXRlKCkgZmFpbGVkLCByZXQ6JWRcbiIsIHJldCk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIGZhaWxlZCwgcmV0OiVkXG4iLCByZXQpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaTJjX3Byb2JlICovCi1zdGF0aWMgaW50IHRlYTY0MjBfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JaW50IGVyciA9IDAsIGkgPSAwOwotCi0JLyogbGV0J3Mgc2VlIHdoZXRoZXIgdGhpcyBhZGFwdGVyIGNhbiBzdXBwb3J0IHdoYXQgd2UgbmVlZCAqLwotCWlmICgwID09IGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEUpKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgY2xpZW50IHN0cnVjdHVyZSAqLwotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpIHsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogZmlsbCBjbGllbnQgc3RydWN0dXJlICovCi0JbWVtY3B5KGNsaWVudCwgJmNsaWVudF90ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCi0JLyogdGVsbCB0aGUgaTJjIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwotCWlmICgwICE9IChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpKSkgewotCQlrZnJlZShjbGllbnQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIHNldCBpbml0aWFsIHZhbHVlczogc2V0ICJtdXRlIi1pbnB1dCB0byBhbGwgb3V0cHV0cyBhdCBnYWluIDAgKi8KLQllcnIgPSAwOwotCWZvciAoaSA9IDE7IGkgPCA1OyBpKyspIHsKLQkJZXJyICs9IHRlYTY0MjBfc3dpdGNoKGNsaWVudCwgNiwgaSwgMCk7Ci0JfQotCWlmIChlcnIpIHsKLQkJZHByaW50aygiY291bGQgbm90IGluaXRpYWxpemUgdGVhNjQyMFxuIik7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXByaW50aygidGVhNjQyMDogZGV0ZWN0ZWQgQCAweCUwMnggb24gYWRhcHRlciAlc1xuIiwgYWRkcmVzcywgJmNsaWVudC0+YWRhcHRlci0+bmFtZVswXSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCS8qIGxldCdzIHNlZSB3aGV0aGVyIHRoaXMgaXMgYSBrbm93IGFkYXB0ZXIgd2UgY2FuIGF0dGFjaCB0byAqLwotCWlmIChhZGFwdGVyLT5pZCAhPSBJMkNfSFdfU0FBNzE0NikgewotCQlkcHJpbnRrKCJyZWZ1c2luZyB0byBwcm9iZSBvbiB1bmtub3duIGFkYXB0ZXIgW25hbWU9JyVzJyxpZD0weCV4XVxuIiwgYWRhcHRlci0+bmFtZSwgYWRhcHRlci0+aWQpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZ0ZWE2NDIwX2RldGVjdCk7Ci19Ci0KLXN0YXRpYyBpbnQgZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JaW50IHJldCA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0Ja2ZyZWUoY2xpZW50KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGNvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB0ZWE2NDIwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHRlYTY0MjBfbXVsdGlwbGV4ICphID0gKHN0cnVjdCB0ZWE2NDIwX211bHRpcGxleCAqKWFyZzsKIAlpbnQgcmVzdWx0ID0gMDsKQEAgLTE2NywzNCArMTA2LDUwIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJ0ZWE2NDIwIiwKLQl9LAotCS5pZAk9IEkyQ19EUklWRVJJRF9URUE2NDIwLAotCS5hdHRhY2hfYWRhcHRlcgk9IGF0dGFjaCwKLQkuZGV0YWNoX2NsaWVudAk9IGRldGFjaCwKLQkuY29tbWFuZAk9IGNvbW1hbmQsCi19OworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaTJjX3Byb2JlICovCitzdGF0aWMgaW50IHRlYTY0MjBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWludCBlcnIsIGk7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGUgPSB7CisJLyogbGV0J3Mgc2VlIHdoZXRoZXIgdGhpcyBhZGFwdGVyIGNhbiBzdXBwb3J0IHdoYXQgd2UgbmVlZCAqLworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFKSkKKwkJcmV0dXJuIC1FSU87CisKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CisKKwkvKiBzZXQgaW5pdGlhbCB2YWx1ZXM6IHNldCAibXV0ZSItaW5wdXQgdG8gYWxsIG91dHB1dHMgYXQgZ2FpbiAwICovCisJZXJyID0gMDsKKwlmb3IgKGkgPSAxOyBpIDwgNTsgaSsrKSB7CisJCWVyciArPSB0ZWE2NDIwX3N3aXRjaChjbGllbnQsIDYsIGksIDApOworCX0KKwlpZiAoZXJyKSB7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImNvdWxkIG5vdCBpbml0aWFsaXplIHRlYTY0MjBcbiIpOworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVhNjQyMF9sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCS8qIExldCdzIHNlZSB3aGV0aGVyIHRoaXMgaXMgYSBrbm93biBhZGFwdGVyIHdlIGNhbiBhdHRhY2ggdG8uCisJICAgUHJldmVudHMgY29uZmxpY3RzIHdpdGggdHZhdWRpby5jLiAqLworCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfU0FBNzE0NjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRlYTY0MjBfaWRbXSA9IHsKKwl7ICJ0ZWE2NDIwIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0ZWE2NDIwX2lkKTsKKworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInRlYTY0MjAiLAotCS5kcml2ZXIgPSAmZHJpdmVyLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9URUE2NDIwLAorCS5jb21tYW5kID0gdGVhNjQyMF9jb21tYW5kLAorCS5wcm9iZSA9IHRlYTY0MjBfcHJvYmUsCisJLmxlZ2FjeV9wcm9iZSA9IHRlYTY0MjBfbGVnYWN5X3Byb2JlLAorCS5pZF90YWJsZSA9IHRlYTY0MjBfaWQsCiB9OwotCi1zdGF0aWMgaW50IF9faW5pdCB0aGlzX21vZHVsZV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZkcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdGhpc19tb2R1bGVfZXhpdCh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZkcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdCh0aGlzX21vZHVsZV9pbml0KTsKLW1vZHVsZV9leGl0KHRoaXNfbW9kdWxlX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJ0ZWE2NDIwIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci0zMDM2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLTMwMzYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRmNTA2ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLTMwMzYuYworKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi0vKgotICogRHJpdmVyIGZvciBQaGlsaXBzIFNBQjMwMzYgIkNJVEFDIiB0dW5lciBjb250cm9sIGNoaXAuCi0gKgotICogQXV0aG9yOiBQaGlsIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgotICoKLSAqIFRoZSBTQUIzMDM2IGlzIGp1c3QgYWJvdXQgZGlmZmVyZW50IGVub3VnaCBmcm9tIHRoZSBjaGlwcyB0aGF0Ci0gKiB0dW5lci5jIGNvcGVzIHdpdGggdG8gbWFrZSBpdCBub3Qgd29ydGggdGhlIGVmZm9ydCB0byBjcm93YmFyCi0gKiB0aGUgc3VwcG9ydCBpbnRvIHRoYXQgZmlsZS4gIFNvIGluc3RlYWQgd2UgaGF2ZSBhIHNlcGFyYXRlIGRyaXZlci4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0KLSNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgotCi1zdGF0aWMgaW50IGRlYnVnOwkvKiBpbnNtb2QgcGFyYW1ldGVyICovCi1zdGF0aWMgaW50IHRoaXNfYWRhcDsKLQotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZTsKLQotLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NjAsIDB4NjEsIEkyQ19DTElFTlRfRU5EIH07Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCT0gJmlnbm9yZSwKLQkuaWdub3JlCQk9ICZpZ25vcmUsCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyCi10dW5lcl9nZXRzdGF0dXMgKHN0cnVjdCBpMmNfY2xpZW50ICpjKQotewotCXVuc2lnbmVkIGNoYXIgYnl0ZTsKLQlpZiAoaTJjX21hc3Rlcl9yZWN2KGMsICZieXRlLCAxKSAhPSAxKQotCQlwcmludGsoS0VSTl9FUlIgInR1bmVyLTMwMzY6IEkvTyBlcnJvci5cbiIpOwotCXJldHVybiBieXRlOwotfQotCi0jZGVmaW5lIFRVTkVSX0ZMICAgICAgICAweDgwCi0KLXN0YXRpYyBpbnQKLXR1bmVyX2lzbG9ja2VkIChzdHJ1Y3QgaTJjX2NsaWVudCAqYykKLXsKLQlyZXR1cm4gKHR1bmVyX2dldHN0YXR1cyhjKSAmIFRVTkVSX0ZMKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdm9pZAotc2V0X3R2X2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmMsIGludCBmcmVxKQotewotCXUxNiBkaXYgPSAoKGZyZXEgKiAyMCkgLyAxNik7Ci0JdW5zaWduZWQgbG9uZyBnaXZlX3VwID0gamlmZmllcyArIEhaOwotCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzJdOwotCi0JaWYgKGRlYnVnKQotCQlwcmludGsoS0VSTl9ERUJVRyAidHVuZXI6IHNldHRpbmcgZnJlcXVlbmN5ICVkTUh6LCBkaXZpc29yICV4XG4iLCBmcmVxIC8gMTYsIGRpdik7Ci0KLQkvKiBTZWxlY3QgaGlnaCB0dW5pbmcgY3VycmVudCAqLwotCWJ1ZmZlclswXSA9IDB4Mjk7Ci0JYnVmZmVyWzFdID0gMHgzZTsKLQotCWlmIChpMmNfbWFzdGVyX3NlbmQoYywgYnVmZmVyLCAyKSAhPSAyKQotCQlwcmludGsoInR1bmVyOiBpMmMgaS9vIGVycm9yIDFcbiIpOwotCi0JYnVmZmVyWzBdID0gMHg4MCB8ICgoZGl2Pj44KSAmIDB4N2YpOwotCWJ1ZmZlclsxXSA9IGRpdiAmIDB4ZmY7Ci0KLQlpZiAoaTJjX21hc3Rlcl9zZW5kKGMsIGJ1ZmZlciwgMikgIT0gMikKLQkJcHJpbnRrKCJ0dW5lcjogaTJjIGkvbyBlcnJvciAyXG4iKTsKLQotCXdoaWxlICghdHVuZXJfaXNsb2NrZWQoYykgJiYgdGltZV9iZWZvcmUoamlmZmllcywgZ2l2ZV91cCkpCi0JCXNjaGVkdWxlKCk7Ci0KLQlpZiAoIXR1bmVyX2lzbG9ja2VkKGMpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0dW5lcjogZmFpbGVkIHRvIGFjaGlldmUgUExMIGxvY2tcbiIpOwotCi0JLyogU2VsZWN0IGxvdyB0dW5pbmcgY3VycmVudCBhbmQgZW5nYWdlIEFGQyAqLwotCWJ1ZmZlclswXSA9IDB4Mjk7Ci0JYnVmZmVyWzFdID0gMHhiMjsKLQotCWlmIChpMmNfbWFzdGVyX3NlbmQoYywgYnVmZmVyLCAyKSAhPSAyKQotCQlwcmludGsoInR1bmVyOiBpMmMgaS9vIGVycm9yIDNcbiIpOwotCi0JaWYgKGRlYnVnKQotCQlwcmludGsoS0VSTl9ERUJVRyAidHVuZXI6IHN0YXR1cyAlMDJ4XG4iLCB0dW5lcl9nZXRzdGF0dXMoYykpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQKLXR1bmVyX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLCBpbnQga2luZCkKLXsKLQlzdGF0aWMgdW5zaWduZWQgY2hhciBidWZmZXJbXSA9IHsgMHgyOSwgMHgzMiwgMHgyYSwgMCwgMHgyYiwgMCB9OwotCi0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQotCWlmICh0aGlzX2FkYXAgPiAwKQotCQlyZXR1cm4gLTE7Ci0JdGhpc19hZGFwKys7Ci0KLQljbGllbnRfdGVtcGxhdGUuYWRhcHRlciA9IGFkYXA7Ci0JY2xpZW50X3RlbXBsYXRlLmFkZHIgPSBhZGRyOwotCi0JY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2xpZW50ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbWNweShjbGllbnQsICZjbGllbnRfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwotCi0JcHJpbnRrKCJ0dW5lcjogU0FCMzAzNiBmb3VuZCwgc3RhdHVzICUwMnhcbiIsIHR1bmVyX2dldHN0YXR1cyhjbGllbnQpKTsKLQotCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0KLQlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmZmVyLCAyKSAhPSAyKQotCQlwcmludGsoInR1bmVyOiBpMmMgaS9vIGVycm9yIDFcbiIpOwotCWlmIChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWZmZXIrMiwgMikgIT0gMikKLQkJcHJpbnRrKCJ0dW5lcjogaTJjIGkvbyBlcnJvciAyXG4iKTsKLQlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmZmVyKzQsIDIpICE9IDIpCi0JCXByaW50aygidHVuZXI6IGkyYyBpL28gZXJyb3IgM1xuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXR1bmVyX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqYykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdHVuZXJfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaW50ICppYXJnID0gKGludCopYXJnOwotCi0Jc3dpdGNoIChjbWQpCi0JewotCQljYXNlIFZJRElPQ1NGUkVROgotCQkJc2V0X3R2X2ZyZXEoY2xpZW50LCAqaWFyZyk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci10dW5lcl9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCi17Ci0JdGhpc19hZGFwID0gMDsKLQlpZiAoYWRhcC0+aWQgPT0gSTJDX0hXX0JfTFApCi0JCXJldHVybiBpMmNfcHJvYmUoYWRhcCwgJmFkZHJfZGF0YSwgdHVuZXJfYXR0YWNoKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyCi1pMmNfZHJpdmVyX3R1bmVyID0KLXsKLQkuZHJpdmVyID0gewotCQkubmFtZQk9CSJzYWIzMDM2IiwKLQl9LAotCS5pZAkJPQlJMkNfRFJJVkVSSURfU0FCMzAzNiwKLQkuYXR0YWNoX2FkYXB0ZXIgPQl0dW5lcl9wcm9iZSwKLQkuZGV0YWNoX2NsaWVudCAgPQl0dW5lcl9kZXRhY2gsCi0JLmNvbW1hbmQJPQl0dW5lcl9jb21tYW5kCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlID0KLXsKLQkuZHJpdmVyCQk9ICZpMmNfZHJpdmVyX3R1bmVyLAotCS5uYW1lCQk9ICJTQUIzMDM2IiwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci10dW5lcjMwMzZfaW5pdCh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl90dW5lcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotdHVuZXIzMDM2X2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl90dW5lcik7Ci19Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiU0FCMzAzNiB0dW5lciBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIlBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywiRW5hYmxlIGRlYnVnZ2luZyBvdXRwdXQiKTsKLQotbW9kdWxlX2luaXQodHVuZXIzMDM2X2luaXQpOwotbW9kdWxlX2V4aXQodHVuZXIzMDM2X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwppbmRleCBkODA2YTM1Li40YTc3MzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYwpAQCAtOTIsNyArOTIsNiBAQAogCiAJdW5zaWduZWQgaW50ICAgICAgICB0eXBlOyAvKiBjaGlwIHR5cGUgaWQgKi8KIAl1bnNpZ25lZCBpbnQgICAgICAgIGNvbmZpZzsKLQlpbnQgKCp0dW5lcl9jYWxsYmFjaykgKHZvaWQgKmRldiwgaW50IGNvbW1hbmQsIGludCBhcmcpOwogCWNvbnN0IGNoYXIgICAgICAgICAgKm5hbWU7CiB9OwogCkBAIC0zNDYsNyArMzQ1LDcgQEAKIAogc3RhdGljIHZvaWQgc2V0X3R5cGUoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCB0eXBlLAogCQkgICAgIHVuc2lnbmVkIGludCBuZXdfbW9kZV9tYXNrLCB1bnNpZ25lZCBpbnQgbmV3X2NvbmZpZywKLQkJICAgICBpbnQgKCp0dW5lcl9jYWxsYmFjaykgKHZvaWQgKmRldiwgaW50IGNvbW1hbmQsaW50IGFyZykpCisJCSAgICAgaW50ICgqdHVuZXJfY2FsbGJhY2spICh2b2lkICpkZXYsIGludCBjb21wb25lbnQsIGludCBjbWQsIGludCBhcmcpKQogewogCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKIAlzdHJ1Y3QgZHZiX3R1bmVyX29wcyAqZmVfdHVuZXJfb3BzID0gJnQtPmZlLm9wcy50dW5lcl9vcHM7CkBAIC0zNjIsNyArMzYxLDcgQEAKIAl0LT5jb25maWcgPSBuZXdfY29uZmlnOwogCWlmICh0dW5lcl9jYWxsYmFjayAhPSBOVUxMKSB7CiAJCXR1bmVyX2RiZygiZGVmaW5pbmcgR1BJTyBjYWxsYmFja1xuIik7Ci0JCXQtPnR1bmVyX2NhbGxiYWNrID0gdHVuZXJfY2FsbGJhY2s7CisJCXQtPmZlLmNhbGxiYWNrID0gdHVuZXJfY2FsbGJhY2s7CiAJfQogCiAJaWYgKHQtPm1vZGUgPT0gVF9VTklOSVRJQUxJWkVEKSB7CkBAIC0zODUsNyArMzg0LDYgQEAKIAl7CiAJCXN0cnVjdCB0ZGE4Mjl4X2NvbmZpZyBjZmcgPSB7CiAJCQkubG5hX2NmZyAgICAgICAgPSB0LT5jb25maWcsCi0JCQkudHVuZXJfY2FsbGJhY2sgPSB0LT50dW5lcl9jYWxsYmFjaywKIAkJfTsKIAkJaWYgKCFkdmJfYXR0YWNoKHRkYTgyOXhfYXR0YWNoLCAmdC0+ZmUsIHQtPmkyYy0+YWRhcHRlciwKIAkJCQl0LT5pMmMtPmFkZHIsICZjZmcpKQpAQCAtNDMzLDcgKzQzMSw2IEBACiAJCXN0cnVjdCB4YzIwMjhfY29uZmlnIGNmZyA9IHsKIAkJCS5pMmNfYWRhcCAgPSB0LT5pMmMtPmFkYXB0ZXIsCiAJCQkuaTJjX2FkZHIgID0gdC0+aTJjLT5hZGRyLAotCQkJLmNhbGxiYWNrICA9IHQtPnR1bmVyX2NhbGxiYWNrLAogCQl9OwogCQlpZiAoIWR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwgJnQtPmZlLCAmY2ZnKSkKIAkJCWdvdG8gYXR0YWNoX2ZhaWxlZDsKQEAgLTQ1MCwxMCArNDQ3LDggQEAKIAogCQl4YzUwMDBfY2ZnLmkyY19hZGRyZXNzCSAgPSB0LT5pMmMtPmFkZHI7CiAJCXhjNTAwMF9jZmcuaWZfa2h6CSAgPSA1MzgwOwotCQl4YzUwMDBfY2ZnLnR1bmVyX2NhbGxiYWNrID0gdC0+dHVuZXJfY2FsbGJhY2s7CiAJCWlmICghZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLAotCQkJCSZ0LT5mZSwgdC0+aTJjLT5hZGFwdGVyLCAmeGM1MDAwX2NmZywKLQkJCQljLT5hZGFwdGVyLT5hbGdvX2RhdGEpKQorCQkJCSZ0LT5mZSwgdC0+aTJjLT5hZGFwdGVyLCAmeGM1MDAwX2NmZykpCiAJCQlnb3RvIGF0dGFjaF9mYWlsZWQ7CiAKIAkJeGNfdHVuZXJfb3BzID0gJnQtPmZlLm9wcy50dW5lcl9vcHM7CkBAIC0xMjI1LDcgKzEyMjAsNyBAQAogCX0gZWxzZSB7CiAJCXQtPm1vZGUgPSBWNEwyX1RVTkVSX0RJR0lUQUxfVFY7CiAJfQotCXNldF90eXBlKGNsaWVudCwgdC0+dHlwZSwgdC0+bW9kZV9tYXNrLCB0LT5jb25maWcsIHQtPnR1bmVyX2NhbGxiYWNrKTsKKwlzZXRfdHlwZShjbGllbnQsIHQtPnR5cGUsIHQtPm1vZGVfbWFzaywgdC0+Y29uZmlnLCB0LT5mZS5jYWxsYmFjayk7CiAJbGlzdF9hZGRfdGFpbCgmdC0+bGlzdCwgJnR1bmVyX2xpc3QpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCmluZGV4IGJjYzMyZmEuLjNiMGI4NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiVENMIE0yNTIzXzNEQkhfRSJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiVENMIE0yNTIzXzNESUhfRSJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiVENMIE1GUEUwNV8yX1UifSwKLQl7IFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMywJIlBoaWxpcHMgRk1EMTIxNk1FWCJ9LAorCXsgVFVORVJfUEhJTElQU19GTUQxMjE2TUVYX01LMywJIlBoaWxpcHMgRk1EMTIxNk1FWCJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiUGhpbGlwcyBGUkgyMDM2QiJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiUGFuYXNvbmljIEVOR0Y3NV8wMUdGIn0sCiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAJCSJNYXhMaW5lYXIgTVhMNTAwNSJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9pYm1jYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vaWJtY2FtLmMKaW5kZXggY2MyN2VmZS4uMjg0MjFkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9pYm1jYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2libWNhbS5jCkBAIC0yNTgsNyArMjU4LDkgQEAKIAkJCSAgICAoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAyKSA9PSAweDAwKSkKIAkJCXsKICNpZiAwCQkJCS8qIFRoaXMgY29kZSBoZWxwcyB0byBkZXRlY3QgbmV3IGZyYW1lIG1hcmtlcnMgKi8KLQkJCQlpbmZvKCJIZWFkZXIgc2lnOiAwMCBGRiAwMCAlMDJYIiwgUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAzKSk7CisJCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJCSAiSGVhZGVyIHNpZzogMDAgRkYgMDAgJTAyWFxuIiwKKwkJCQkJIFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMykpOwogI2VuZGlmCiAJCQkJZnJhbWUtPmhlYWRlciA9IFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMyk7CiAJCQkJaWYgKChmcmFtZS0+aGVhZGVyID09IEhEUlNJR19NT0RFTDFfMTI4eDk2KSB8fApAQCAtMjY2LDcgKzI2OCw4IEBACiAJCQkJICAgIChmcmFtZS0+aGVhZGVyID09IEhEUlNJR19NT0RFTDFfMzUyeDI4OCkpCiAJCQkJewogI2lmIDAKLQkJCQkJaW5mbygiSGVhZGVyIGZvdW5kLiIpOworCQkJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkJCSAiSGVhZGVyIGZvdW5kLlxuIik7CiAjZW5kaWYKIAkJCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCBtYXJrZXJfbGVuKTsKIAkJCQkJaWNhbS0+aGFzX2hkciA9IDE7CkBAIC0yOTUsNyArMjk4LDcgQEAKIAkJCSAgICAoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAxKSA9PSAweEZGKSkKIAkJCXsKICNpZiAwCi0JCQkJaW5mbygiSGVhZGVyIGZvdW5kLiIpOworCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiSGVhZGVyIGZvdW5kLlxuIik7CiAjZW5kaWYKIAkJCQlSSU5HX1FVRVVFX0RFUVVFVUVfQllURVMoJnV2ZC0+ZHAsIG1hcmtlcl9sZW4pOwogCQkJCWljYW0tPmhhc19oZHIgPSAxOwpAQCAtMzM4LDcgKzM0MSw3IEBACiAJCQkJYnl0ZTQgPSBSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDMpOwogCQkJCWZyYW1lLT5oZWFkZXIgPSAoYnl0ZTMgPDwgOCkgfCBieXRlNDsKICNpZiAwCi0JCQkJaW5mbygiSGVhZGVyIGZvdW5kLiIpOworCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiSGVhZGVyIGZvdW5kLlxuIik7CiAjZW5kaWYKIAkJCQlSSU5HX1FVRVVFX0RFUVVFVUVfQllURVMoJnV2ZC0+ZHAsIG1hcmtlcl9sZW4pOwogCQkJCWljYW0tPmhhc19oZHIgPSAxOwpAQCAtMzU0LDcgKzM1Nyw4IEBACiAJfQogCWlmICghaWNhbS0+aGFzX2hkcikgewogCQlpZiAodXZkLT5kZWJ1ZyA+IDIpCi0JCQlpbmZvKCJTa2lwcGluZyBmcmFtZSwgbm8gaGVhZGVyIik7CisJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkgIlNraXBwaW5nIGZyYW1lLCBubyBoZWFkZXJcbiIpOwogCQlyZXR1cm4gc2Nhbl9FbmRQYXJzZTsKIAl9CiAKQEAgLTg4MSw3ICs4ODUsOSBAQAogCSAqLwogCWlmICgoZnJhbWUtPmN1cmxpbmUgKyAxKSA+PSBkYXRhX2gpIHsKIAkJaWYgKHV2ZC0+ZGVidWcgPj0gMykKLQkJCWluZm8oIlJlYWNoZWQgbGluZSAlZC4gKGZyYW1lIGlzIGRvbmUpIiwgZnJhbWUtPmN1cmxpbmUpOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJICJSZWFjaGVkIGxpbmUgJWQuIChmcmFtZSBpcyBkb25lKVxuIiwKKwkJCQkgZnJhbWUtPmN1cmxpbmUpOwogCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CiAJfQogCkBAIC05NTQsOCArOTYwLDkgQEAKIAogCWlmIChmcmFtZS0+Y3VybGluZSA+PSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpIHsKIAkJaWYgKHV2ZC0+ZGVidWcgPj0gMykgewotCQkJaW5mbygiQWxsIHJlcXVlc3RlZCBsaW5lcyAoJWxkLikgZG9uZS4iLAotCQkJICAgICBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJICJBbGwgcmVxdWVzdGVkIGxpbmVzICglbGQuKSBkb25lLlxuIiwKKwkJCQkgVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKTsKIAkJfQogCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CiAJfSBlbHNlCkBAIC0xMDAwLDcgKzEwMDcsOSBAQAogCSAqLwogCWlmICgoZnJhbWUtPmN1cmxpbmUgKyAxKSA+PSBkYXRhX2gpIHsKIAkJaWYgKHV2ZC0+ZGVidWcgPj0gMykKLQkJCWluZm8oIlJlYWNoZWQgbGluZSAlZC4gKGZyYW1lIGlzIGRvbmUpIiwgZnJhbWUtPmN1cmxpbmUpOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJICJSZWFjaGVkIGxpbmUgJWQuIChmcmFtZSBpcyBkb25lKVxuIiwKKwkJCQkgZnJhbWUtPmN1cmxpbmUpOwogCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CiAJfQogCkBAIC0xMDQ5LDggKzEwNTgsOSBAQAogCiAJaWYgKGZyYW1lLT5jdXJsaW5lID49IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSkgewogCQlpZiAodXZkLT5kZWJ1ZyA+PSAzKSB7Ci0JCQlpbmZvKCJBbGwgcmVxdWVzdGVkIGxpbmVzICglbGQuKSBkb25lLiIsCi0JCQkgICAgIFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSk7CisJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkgIkFsbCByZXF1ZXN0ZWQgbGluZXMgKCVsZC4pIGRvbmUuXG4iLAorCQkJCSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpOwogCQl9CiAJCXJldHVybiBzY2FuX05leHRGcmFtZTsKIAl9IGVsc2UKQEAgLTExNzEsMTAgKzExODEsMTEgQEAKIAkJCXNpemVvZihjcCksCiAJCQkxMDAwKTsKICNpZiAwCi0JCWluZm8oIlVTQiA9PiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCi0JCSAgICAgICAiKHJlcT0kJTAyeCB2YWw9JCUwNHggaW5kPSQlMDR4KSIsCi0JCSAgICAgICBjcFswXSxjcFsxXSxjcFsyXSxjcFszXSxjcFs0XSxjcFs1XSxjcFs2XSxjcFs3XSwKLQkJICAgICAgIHJlcSwgdmFsdWUsIGluZGV4KTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkgIlVTQiA9PiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCisJCQkgIihyZXE9JCUwMnggdmFsPSQlMDR4IGluZD0kJTA0eClcbiIsCisJCQkgY3BbMF0sY3BbMV0sY3BbMl0sY3BbM10sY3BbNF0sY3BbNV0sY3BbNl0sY3BbN10sCisJCQkgcmVxLCB2YWx1ZSwgaW5kZXgpOwogI2VuZGlmCiAJfSBlbHNlIHsKIAkJaSA9IHVzYl9jb250cm9sX21zZygKQEAgLTE0NDksMTAgKzE0NjAsOSBAQAogICovCiBzdGF0aWMgdm9pZCBpYm1jYW1fY2hhbmdlX2xpZ2h0aW5nX2NvbmRpdGlvbnMoc3RydWN0IHV2ZCAqdXZkKQogewotCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJpYm1jYW1fY2hhbmdlX2xpZ2h0aW5nX2NvbmRpdGlvbnMiOwotCiAJaWYgKGRlYnVnID4gMCkKLQkJaW5mbygiJXM6IFNldCBsaWdodGluZyB0byAlaHUuIiwgcHJvYywgbGlnaHRpbmcpOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCSAiJXM6IFNldCBsaWdodGluZyB0byAlaHUuXG4iLCBfX2Z1bmNfXywgbGlnaHRpbmcpOwogCiAJc3dpdGNoIChJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwpIHsKIAljYXNlIElCTUNBTV9NT0RFTF8xOgpAQCAtMTQ5NSw4ICsxNTA1LDYgQEAKICAqLwogc3RhdGljIHZvaWQgaWJtY2FtX3NldF9zaGFycG5lc3Moc3RydWN0IHV2ZCAqdXZkKQogewotCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJpYm1jYW1fc2V0X3NoYXJwbmVzcyI7Ci0KIAlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgewogCWNhc2UgSUJNQ0FNX01PREVMXzE6CiAJewpAQCAtMTUwNSw3ICsxNTEzLDggQEAKIAogCQlSRVNUUklDVF9UT19SQU5HRShzaGFycG5lc3MsIFNIQVJQTkVTU19NSU4sIFNIQVJQTkVTU19NQVgpOwogCQlpZiAoZGVidWcgPiAwKQotCQkJaW5mbygiJXM6IFNldCBzaGFycG5lc3MgdG8gJWh1LiIsIHByb2MsIHNoYXJwbmVzcyk7CisJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIiVzOiBTZXQgc2hhcnBuZXNzIHRvICVodS5cbiIsCisJCQkJIF9fZnVuY19fLCBzaGFycG5lc3MpOwogCiAJCXN2ID0gc2Fbc2hhcnBuZXNzIC0gU0hBUlBORVNTX01JTl07CiAJCWZvciAoaT0wOyBpIDwgMjsgaSsrKSB7CkBAIC0xNTY0LDExICsxNTczLDExIEBACiAgKi8KIHN0YXRpYyB2b2lkIGlibWNhbV9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgdXZkICp1dmQpCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgcHJvY1tdID0gImlibWNhbV9zZXRfYnJpZ2h0bmVzcyI7CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG4gPSAxOwogCiAJaWYgKGRlYnVnID4gMCkKLQkJaW5mbygiJXM6IFNldCBicmlnaHRuZXNzIHRvICVodS4iLCBwcm9jLCB1dmQtPnZwaWMuYnJpZ2h0bmVzcyk7CisJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiJXM6IFNldCBicmlnaHRuZXNzIHRvICVodS5cbiIsCisJCQkgX19mdW5jX18sIHV2ZC0+dnBpYy5icmlnaHRuZXNzKTsKIAogCXN3aXRjaCAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsKSB7CiAJY2FzZSBJQk1DQU1fTU9ERUxfMToKQEAgLTIxMTUsNyArMjEyNCw4IEBACiAJCQlicmVhazsKIAkJfQogCQlpZiAodXZkLT5kZWJ1ZyA+IDApCi0JCQlpbmZvKCJGcmFtZXJhdGUgKGhhcmR3YXJlKTogJWhkLiIsIGh3X2Zwcyk7CisJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIkZyYW1lcmF0ZSAoaGFyZHdhcmUpOiAlaGQuXG4iLAorCQkJCSBod19mcHMpOwogCQlSRVNUUklDVF9UT19SQU5HRShod19mcHMsIDAsIDMxKTsKIAkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9zZXRfZnJhbWVyYXRlLCBod19mcHMpOwogCX0KQEAgLTM0ODcsNyArMzQ5Nyw3IEBACiAJLyogMDEuMDEuMDggLSBBZGRlZCBmb3IgUkNBIHZpZGVvIGluIHN1cHBvcnQgLUxPICovCiAJaWYoaW5pdF9tb2RlbDNfaW5wdXQpIHsKIAkJaWYgKGRlYnVnID4gMCkKLQkJCWluZm8oIlNldHRpbmcgaW5wdXQgdG8gUkNBLiIpOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICJTZXR0aW5nIGlucHV0IHRvIFJDQS5cbiIpOwogCQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUoaW5pdERhdGEpOyBpKyspIHsKIAkJCWlibWNhbV92ZWlvKHV2ZCwgaW5pdERhdGFbaV0ucmVxLCBpbml0RGF0YVtpXS52YWx1ZSwgaW5pdERhdGFbaV0uaW5kZXgpOwogCQl9CkBAIC0zNjg1LDcgKzM2OTUsNyBAQAogCXVuc2lnbmVkIGNoYXIgdmlkZW9fZXAgPSAwOwogCiAJaWYgKGRlYnVnID49IDEpCi0JCWluZm8oImlibWNhbV9wcm9iZSglcCwldS4pIiwgaW50ZiwgaWZudW0pOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgImlibWNhbV9wcm9iZSglcCwldS4pXG4iLCBpbnRmLCBpZm51bSk7CiAKIAkvKiBXZSBkb24ndCBoYW5kbGUgbXVsdGktY29uZmlnIGNhbWVyYXMgKi8KIAlpZiAoZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQpAQCAtMzczNiwxNCArMzc0NiwxNiBAQAogCQkJYnJhbmQgPSAiSUJNIFBDIENhbWVyYSI7IC8qIGEuay5hLiBYaXJsaW5rIEMtSXQgKi8KIAkJCWJyZWFrOwogCQl9Ci0JCWluZm8oIiVzIFVTQiBjYW1lcmEgZm91bmQgKG1vZGVsICVkLCByZXYuIDB4JTA0eCkiLAotCQkgICAgIGJyYW5kLCBtb2RlbCwgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCSAiJXMgVVNCIGNhbWVyYSBmb3VuZCAobW9kZWwgJWQsIHJldi4gMHglMDR4KVxuIiwKKwkJCSBicmFuZCwgbW9kZWwsIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKTsKIAl9IHdoaWxlICgwKTsKIAogCS8qIFZhbGlkYXRlIGZvdW5kIGludGVyZmFjZTogbXVzdCBoYXZlIG9uZSBJU08gZW5kcG9pbnQgKi8KIAluYXMgPSBpbnRmLT5udW1fYWx0c2V0dGluZzsKIAlpZiAoZGVidWcgPiAwKQotCQlpbmZvKCJOdW1iZXIgb2YgYWx0ZXJuYXRlIHNldHRpbmdzPSVkLiIsIG5hcyk7CisJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiTnVtYmVyIG9mIGFsdGVybmF0ZSBzZXR0aW5ncz0lZC5cbiIsCisJCQkgbmFzKTsKIAlpZiAobmFzIDwgMikgewogCQllcnIoIlRvbyBmZXcgYWx0ZXJuYXRlIHNldHRpbmdzIGZvciB0aGlzIGNhbWVyYSEiKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0zNzg3LDcgKzM3OTksOSBAQAogCQkJCWFjdEludGVyZmFjZSA9IGk7CiAJCQkJbWF4UFMgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOwogCQkJCWlmIChkZWJ1ZyA+IDApCi0JCQkJCWluZm8oIkFjdGl2ZSBzZXR0aW5nPSVkLiBtYXhQUz0lZC4iLCBpLCBtYXhQUyk7CisJCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCQkJICJBY3RpdmUgc2V0dGluZz0lZC4gIgorCQkJCQkJICJtYXhQUz0lZC5cbiIsIGksIG1heFBTKTsKIAkJCX0gZWxzZQogCQkJCWVycigiTW9yZSB0aGFuIG9uZSBhY3RpdmUgYWx0LiBzZXR0aW5nISBJZ25vcmluZyAjJWQuIiwgaSk7CiAJCX0KQEAgLTM4MjYsNyArMzg0MCw3IEBACiAJCQlSRVNUUklDVF9UT19SQU5HRShmcmFtZXJhdGUsIDAsIDUpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlpbmZvKCJJQk0gY2FtZXJhOiB1c2luZyAzMjB4MjQwIik7CisJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIklCTSBjYW1lcmE6IHVzaW5nIDMyMHgyNDBcbiIpOwogCQkJc2l6ZSA9IFNJWkVfMzIweDI0MDsKIAkJCS8qIE5vIGJyZWFrIGhlcmUgKi8KIAkJY2FzZSBTSVpFXzMyMHgyNDA6CkBAIC0zODU1LDcgKzM4NjksNyBAQAogCQkJY2FudmFzWSA9IDEyMDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJaW5mbygiSUJNIE5ldENhbWVyYTogdXNpbmcgMTc2eDE0NCIpOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICJJQk0gTmV0Q2FtZXJhOiB1c2luZyAxNzZ4MTQ0XG4iKTsKIAkJCXNpemUgPSBTSVpFXzE3NngxNDQ7CiAJCQkvKiBObyBicmVhayBoZXJlICovCiAJCWNhc2UgU0laRV8xNzZ4MTQ0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jCmluZGV4IDFjMTgwMjguLmRhMjdhNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8va29uaWNhd2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2tvbmljYXdjLmMKQEAgLTIyOSw3ICsyMjksOCBAQAogCiAJY2FtLT5pbnB1dCA9IGlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghaW5wdXRfZGV2KSB7Ci0JCXdhcm4oIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBjYW1lcmEncyBpbnB1dCBkZXZpY2VcbiIpOworCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBjYW1lcmEncyBpbnB1dCBkZXZpY2VcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNDMsOCArMjQ0LDkgQEAKIAogCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGNhbS0+aW5wdXQpOwogCWlmIChlcnJvcikgewotCQl3YXJuKCJGYWlsZWQgdG8gcmVnaXN0ZXIgY2FtZXJhJ3MgaW5wdXQgZGV2aWNlLCBlcnI6ICVkXG4iLAotCQkgICAgIGVycm9yKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2FtZXJhJ3MgaW5wdXQgZGV2aWNlLCBlcnI6ICVkXG4iLAorCQkJIGVycm9yKTsKIAkJaW5wdXRfZnJlZV9kZXZpY2UoY2FtLT5pbnB1dCk7CiAJCWNhbS0+aW5wdXQgPSBOVUxMOwogCX0KQEAgLTMzNyw3ICszMzksOCBAQAogCQl9CiAKIAkJaWYoKHN0cyA+IDB4MDEpICYmIChzdHMgPCAweDgwKSkgewotCQkJaW5mbygidW5rbm93biBzdGF0dXMgJTIuMngiLCBzdHMpOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICJ1bmtub3duIHN0YXR1cyAlMi4yeFxuIiwKKwkJCQkgc3RzKTsKIAkJCWJhZCsrOwogCQkJY29udGludWU7CiAJCX0KQEAgLTU2OCw4ICs1NzEsMTIgQEAKIAkJCQkJZmRyb3BzID0gKDB4ODAgKyBjdXJmcmFtZSAtIGNhbS0+bGFzdGZyYW1lKSAmIDB4N0Y7CiAJCQkJCWZkcm9wcy0tOwogCQkJCQlpZihmZHJvcHMpIHsKLQkJCQkJCWluZm8oIkRyb3BwZWQgJWQgZnJhbWVzICglZCAtPiAlZCkiLCBmZHJvcHMsCi0JCQkJCQkgICAgIGNhbS0+bGFzdGZyYW1lLCBjdXJmcmFtZSk7CisJCQkJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkJCQkgIkRyb3BwZWQgJWQgZnJhbWVzICIKKwkJCQkJCQkgIiglZCAtPiAlZClcbiIsCisJCQkJCQkJIGZkcm9wcywKKwkJCQkJCQkgY2FtLT5sYXN0ZnJhbWUsCisJCQkJCQkJIGN1cmZyYW1lKTsKIAkJCQkJfQogCQkJCX0KIAkJCQljYW0tPmxhc3RmcmFtZSA9IGN1cmZyYW1lOwpAQCAtNzg0LDcgKzc5MSw4IEBACiAJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpbmZvKCJLb25pY2EgV2ViY2FtIChyZXYuIDB4JTA0eCkiLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIktvbmljYSBXZWJjYW0gKHJldi4gMHglMDR4KVxuIiwKKwkJIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKTsKIAlSRVNUUklDVF9UT19SQU5HRShzcGVlZCwgMCwgTUFYX1NQRUVEKTsKIAogCS8qIFZhbGlkYXRlIGZvdW5kIGludGVyZmFjZTogbXVzdCBoYXZlIG9uZSBJU08gZW5kcG9pbnQgKi8KQEAgLTkyNSw3ICs5MzMsOCBAQAogc3RhdGljIGludCBfX2luaXQga29uaWNhd2NfaW5pdCh2b2lkKQogewogCXN0cnVjdCB1c2J2aWRlb19jYiBjYlRibDsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAltZW1zZXQoJmNiVGJsLCAwLCBzaXplb2YoY2JUYmwpKTsKIAljYlRibC5wcm9iZSA9IGtvbmljYXdjX3Byb2JlOwogCWNiVGJsLnNldHVwT25PcGVuID0ga29uaWNhd2Nfc2V0dXBfb25fb3BlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5jCmluZGV4IDNkMjZhMzAuLjQ0NTliOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9xdWlja2NhbV9tZXNzZW5nZXIuYwpAQCAtOTMsNyArOTMsNyBAQAogCiAJY2FtLT5pbnB1dCA9IGlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghaW5wdXRfZGV2KSB7Ci0JCXdhcm4oImluc3VmZmljaWVudCBtZW0gZm9yIGNhbSBpbnB1dCBkZXZpY2UiKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiaW5zdWZmaWNpZW50IG1lbSBmb3IgY2FtIGlucHV0IGRldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwNyw4ICsxMDcsOSBAQAogCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoY2FtLT5pbnB1dCk7CiAJaWYgKGVycm9yKSB7Ci0JCXdhcm4oIkZhaWxlZCB0byByZWdpc3RlciBjYW1lcmEncyBpbnB1dCBkZXZpY2UsIGVycjogJWRcbiIsCi0JCSAgICAgZXJyb3IpOworCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkgIkZhaWxlZCB0byByZWdpc3RlciBjYW1lcmEncyBpbnB1dCBkZXZpY2UsIGVycjogJWRcbiIsCisJCQkgZXJyb3IpOwogCQlpbnB1dF9mcmVlX2RldmljZShjYW0tPmlucHV0KTsKIAkJY2FtLT5pbnB1dCA9IE5VTEw7CiAJfQpAQCAtNTg3LDggKzU4OCw5IEBACiAJCQlkYXRhdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CiAKIAkJaWYgKHN0IDwgMCkgewotCQkJd2FybigiRGF0YSBlcnJvcjogcGFja2V0PSVkLiBsZW49JWQuIHN0YXR1cz0lZC4iLAotCQkJICAgICAgaSwgbiwgc3QpOworCQkJZGV2X3dhcm4oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJICJEYXRhIGVycm9yOiBwYWNrZXQ9JWQuIGxlbj0lZC4gc3RhdHVzPSVkLlxuIiwKKwkJCQkgaSwgbiwgc3QpOwogCQkJdXZkLT5zdGF0cy5pc29fZXJyX2NvdW50Kys7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNjk5LDcgKzcwMSw3IEBACiAKIAlyZXQgPSBxY21fY2FtZXJhX29mZih1dmQpOwogCWlmIChyZXQpCi0JCXdhcm4oImNvdWxkbid0IHR1cm4gdGhlIGNhbSBvZmYuIik7CisJCWRldl93YXJuKCZ1dmQtPmRldi0+ZGV2LCAiY291bGRuJ3QgdHVybiB0aGUgY2FtIG9mZi5cbiIpOwogCiAJdXZkLT5zdHJlYW1pbmcgPSAwOwogCkBAIC0xMDgwLDcgKzEwODIsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBxY21faW5pdCh2b2lkKQogewotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIHVzYnZpZGVvX3JlZ2lzdGVyKAogCQkmY2FtcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdWx0cmFjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdWx0cmFjYW0uYwppbmRleCA5NTQ0ZTY0Li45NzE0YmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VsdHJhY2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91bHRyYWNhbS5jCkBAIC0xNTYsMTAgKzE1NiwxMSBAQAogCQkJc2l6ZW9mKGNwKSwKIAkJCTEwMDApOwogI2lmIDEKLQkJaW5mbygiVVNCID0+ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKLQkJICAgICAgICIocmVxPSQlMDJ4IHZhbD0kJTA0eCBpbmQ9JCUwNHgpIiwKLQkJICAgICAgIGNwWzBdLGNwWzFdLGNwWzJdLGNwWzNdLGNwWzRdLGNwWzVdLGNwWzZdLGNwWzddLAotCQkgICAgICAgcmVxLCB2YWx1ZSwgaW5kZXgpOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCSAiVVNCID0+ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKKwkJCSAiKHJlcT0kJTAyeCB2YWw9JCUwNHggaW5kPSQlMDR4KVxuIiwKKwkJCSBjcFswXSxjcFsxXSxjcFsyXSxjcFszXSxjcFs0XSxjcFs1XSxjcFs2XSxjcFs3XSwKKwkJCSByZXEsIHZhbHVlLCBpbmRleCk7CiAjZW5kaWYKIAl9IGVsc2UgewogCQlpID0gdXNiX2NvbnRyb2xfbXNnKApAQCAtNTE3LDE5ICs1MTgsMjAgQEAKIAl1bnNpZ25lZCBjaGFyIHZpZGVvX2VwID0gMDsKIAogCWlmIChkZWJ1ZyA+PSAxKQotCQlpbmZvKCJ1bHRyYWNhbV9wcm9iZSglcCkiLCBpbnRmKTsKKwkJZGV2X2luZm8oJmludGYtPmRldiwgInVsdHJhY2FtX3Byb2JlXG4iKTsKIAogCS8qIFdlIGRvbid0IGhhbmRsZSBtdWx0aS1jb25maWcgY2FtZXJhcyAqLwogCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaW5mbygiSUJNIFVsdHJhIGNhbWVyYSBmb3VuZCAocmV2LiAweCUwNHgpIiwKLQkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJJQk0gVWx0cmEgY2FtZXJhIGZvdW5kIChyZXYuIDB4JTA0eClcbiIsCisJCSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSk7CiAKIAkvKiBWYWxpZGF0ZSBmb3VuZCBpbnRlcmZhY2U6IG11c3QgaGF2ZSBvbmUgSVNPIGVuZHBvaW50ICovCiAJbmFzID0gaW50Zi0+bnVtX2FsdHNldHRpbmc7CiAJaWYgKGRlYnVnID4gMCkKLQkJaW5mbygiTnVtYmVyIG9mIGFsdGVybmF0ZSBzZXR0aW5ncz0lZC4iLCBuYXMpOworCQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiTnVtYmVyIG9mIGFsdGVybmF0ZSBzZXR0aW5ncz0lZC5cbiIsCisJCQkgbmFzKTsKIAlpZiAobmFzIDwgOCkgewogCQllcnIoIlRvbyBmZXcgYWx0ZXJuYXRlIHNldHRpbmdzIGZvciB0aGlzIGNhbWVyYSEiKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01NzYsNyArNTc4LDkgQEAKIAkJCQlhY3RJbnRlcmZhY2UgPSBpOwogCQkJCW1heFBTID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKIAkJCQlpZiAoZGVidWcgPiAwKQotCQkJCQlpbmZvKCJBY3RpdmUgc2V0dGluZz0lZC4gbWF4UFM9JWQuIiwgaSwgbWF4UFMpOworCQkJCQlkZXZfaW5mbygmaW50Zi0+ZGV2LAorCQkJCQkJICJBY3RpdmUgc2V0dGluZz0lZC4gIgorCQkJCQkJICJtYXhQUz0lZC5cbiIsIGksIG1heFBTKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogR290IGFub3RoZXIgYWN0aXZlIGFsdC4gc2V0dGluZyAqLwogCQkJCWlmIChtYXhQUyA8IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkpIHsKQEAgLTU4NCw4ICs1ODgsMTEgQEAKIAkJCQkJYWN0SW50ZXJmYWNlID0gaTsKIAkJCQkJbWF4UFMgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOwogCQkJCQlpZiAoZGVidWcgPiAwKSB7Ci0JCQkJCQlpbmZvKCJFdmVuIGJldHRlciBjdGl2ZSBzZXR0aW5nPSVkLiBtYXhQUz0lZC4iLAotCQkJCQkJICAgICBpLCBtYXhQUyk7CisJCQkJCQlkZXZfaW5mbygmaW50Zi0+ZGV2LAorCQkJCQkJCSAiRXZlbiBiZXR0ZXIgY3RpdmUgIgorCQkJCQkJCSAic2V0dGluZz0lZC4gIgorCQkJCQkJCSAibWF4UFM9JWQuXG4iLAorCQkJCQkJCSBpLCBtYXhQUyk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMKaW5kZXggYmYxYmMyZi4uMDdjZDg3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYwpAQCAtNDY4LDggKzQ2OCw5IEBACiAJCQlwZXJjZW50ID0gKDEwMCAqIGdvb2RQYWNrZXRzKSAvIGFsbFBhY2tldHM7CiAJCWVsc2UKIAkJCXBlcmNlbnQgPSBnb29kUGFja2V0cyAvIChhbGxQYWNrZXRzIC8gMTAwKTsKLQkJaW5mbygiUGFja2V0IFN0YXRpc3RpY3M6IFRvdGFsPSVsdS4gRW1wdHk9JWx1LiBVc2FnZT0lbHUlJSIsCi0JCSAgICAgYWxsUGFja2V0cywgYmFkUGFja2V0cywgcGVyY2VudCk7CisJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJICJQYWNrZXQgU3RhdGlzdGljczogVG90YWw9JWx1LiBFbXB0eT0lbHUuIFVzYWdlPSVsdSUlXG4iLAorCQkJIGFsbFBhY2tldHMsIGJhZFBhY2tldHMsIHBlcmNlbnQpOwogCQlpZiAodXZkLT5pc29fcGFja2V0X2xlbiA+IDApIHsKIAkJCXVuc2lnbmVkIGxvbmcgYWxsQnl0ZXMsIHhmZXJCeXRlczsKIAkJCWNoYXIgbXVsdGlwbGllciA9ICcgJzsKQEAgLTQ5Nyw4ICs0OTgsOSBAQAogCQkJCQl9CiAJCQkJfQogCQkJfQotCQkJaW5mbygiVHJhbnNmZXIgU3RhdGlzdGljczogVHJhbnNmZXJyZWQ9JWx1JWNCIFVzYWdlPSVsdSUlIiwKLQkJCSAgICAgeGZlckJ5dGVzLCBtdWx0aXBsaWVyLCBwZXJjZW50KTsKKwkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCSAiVHJhbnNmZXIgU3RhdGlzdGljczogVHJhbnNmZXJyZWQ9JWx1JWNCIFVzYWdlPSVsdSUlXG4iLAorCQkJCSB4ZmVyQnl0ZXMsIG11bHRpcGxpZXIsIHBlcmNlbnQpOwogCQl9CiAJfQogfQpAQCAtNTQ1LDcgKzU0Nyw3IEBACiAJewkvKiBGb3IgZGVidWdnaW5nIHB1cnBvc2VzIG9ubHkgKi8KIAkJY2hhciB0bXBbMjBdOwogCQl1c2J2aWRlb19WaWRlb3NpemVUb1N0cmluZyh0bXAsIHNpemVvZih0bXApLCBmcmFtZS0+cmVxdWVzdCk7Ci0JCWluZm8oInRlc3RwYXR0ZXJuOiBmcmFtZT0lcyIsIHRtcCk7CisJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAidGVzdHBhdHRlcm46IGZyYW1lPSVzXG4iLCB0bXApOwogCX0KICNlbmRpZgogCS8qIEZvcm0gZXZlcnkgc2NhbiBsaW5lICovCkBAIC04NTQsNyArODU2LDcgQEAKIAogCXVzYnZpZGVvX0NsaWVudEluY01vZENvdW50KHV2ZCk7CiAJaWYgKHV2ZC0+ZGVidWcgPiAwKQotCQlpbmZvKCIlcyglcC4pIiwgX19mdW5jX18sIGludGYpOworCQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiJXMoJXAuKVxuIiwgX19mdW5jX18sIGludGYpOwogCiAJbXV0ZXhfbG9jaygmdXZkLT5sb2NrKTsKIAl1dmQtPnJlbW92ZV9wZW5kaW5nID0gMTsgLyogTm93IGFsbCBJU08gZGF0YSB3aWxsIGJlIGlnbm9yZWQgKi8KQEAgLTg3MCwxNCArODcyLDE1IEBACiAKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdXZkLT52ZGV2KTsKIAlpZiAodXZkLT5kZWJ1ZyA+IDApCi0JCWluZm8oIiVzOiBWaWRlbyB1bnJlZ2lzdGVyZWQuIiwgX19mdW5jX18pOworCQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiJXM6IFZpZGVvIHVucmVnaXN0ZXJlZC5cbiIsIF9fZnVuY19fKTsKIAogCWlmICh1dmQtPnVzZXIpCi0JCWluZm8oIiVzOiBJbiB1c2UsIGRpc2Nvbm5lY3QgcGVuZGluZy4iLCBfX2Z1bmNfXyk7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICIlczogSW4gdXNlLCBkaXNjb25uZWN0IHBlbmRpbmcuXG4iLAorCQkJIF9fZnVuY19fKTsKIAllbHNlCiAJCXVzYnZpZGVvX0NhbWVyYVJlbGVhc2UodXZkKTsKIAltdXRleF91bmxvY2soJnV2ZC0+bG9jayk7Ci0JaW5mbygiVVNCIGNhbWVyYSBkaXNjb25uZWN0ZWQuIik7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlVTQiBjYW1lcmEgZGlzY29ubmVjdGVkLlxuIik7CiAKIAl1c2J2aWRlb19DbGllbnREZWNNb2RDb3VudCh1dmQpOwogfQpAQCAtMTAxNSwxNCArMTAxOCwxNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHV2ZC0+dmlkZW9fZW5kcCA9PSAwKSB7Ci0JCWluZm8oIiVzOiBObyB2aWRlbyBlbmRwb2ludCBzcGVjaWZpZWQ7IGRhdGEgcHVtcCBkaXNhYmxlZC4iLCBfX2Z1bmNfXyk7CisJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJICIlczogTm8gdmlkZW8gZW5kcG9pbnQgc3BlY2lmaWVkOyBkYXRhIHB1bXAgZGlzYWJsZWQuXG4iLAorCQkJIF9fZnVuY19fKTsKIAl9CiAJaWYgKHV2ZC0+cGFsZXR0ZUJpdHMgPT0gMCkgewogCQllcnIoIiVzOiBObyBwYWxldHRlcyBzcGVjaWZpZWQhIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHV2ZC0+ZGVmYXVsdFBhbGV0dGUgPT0gMCkgewotCQlpbmZvKCIlczogTm8gZGVmYXVsdCBwYWxldHRlISIsIF9fZnVuY19fKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICIlczogTm8gZGVmYXVsdCBwYWxldHRlIVxuIiwKKwkJCSBfX2Z1bmNfXyk7CiAJfQogCiAJdXZkLT5tYXhfZnJhbWVfc2l6ZSA9IFZJREVPU0laRV9YKHV2ZC0+Y2FudmFzKSAqCkBAIC0xMDMxLDI1ICsxMDM3LDI5IEBACiAJdXNidmlkZW9fVmlkZW9zaXplVG9TdHJpbmcodG1wMiwgc2l6ZW9mKHRtcDIpLCB1dmQtPmNhbnZhcyk7CiAKIAlpZiAodXZkLT5kZWJ1ZyA+IDApIHsKLQkJaW5mbygiJXM6IGlmYWNlPSVkLiBlbmRwb2ludD0kJTAyeCBwYWxldHRlQml0cz0kJTA4bHgiLAotCQkgICAgIF9fZnVuY19fLCB1dmQtPmlmYWNlLCB1dmQtPnZpZGVvX2VuZHAsIHV2ZC0+cGFsZXR0ZUJpdHMpOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCSAiJXM6IGlmYWNlPSVkLiBlbmRwb2ludD0kJTAyeCBwYWxldHRlQml0cz0kJTA4bHhcbiIsCisJCQkgX19mdW5jX18sIHV2ZC0+aWZhY2UsIHV2ZC0+dmlkZW9fZW5kcCwKKwkJCSB1dmQtPnBhbGV0dGVCaXRzKTsKIAl9CiAJaWYgKHV2ZC0+ZGV2ID09IE5VTEwpIHsKIAkJZXJyKCIlczogdXZkLT5kZXYgPT0gTlVMTCIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXV2ZC0+dmRldi5wYXJlbnQgPSAmdXZkLT5kZXYtPmRldjsKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ1dmQtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKSA9PSAtMSkgeworCXV2ZC0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdXZkLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucikgPCAwKSB7CiAJCWVycigiJXM6IHZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRVBJUEU7CiAJfQogCWlmICh1dmQtPmRlYnVnID4gMSkgewotCQlpbmZvKCIlczogdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCkgc3VjY2Vzc2Z1bCIsIF9fZnVuY19fKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkgIiVzOiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKSBzdWNjZXNzZnVsXG4iLCBfX2Z1bmNfXyk7CiAJfQogCi0JaW5mbygiJXMgb24gL2Rldi92aWRlbyVkOiBjYW52YXM9JXMgdmlkZW9zaXplPSVzIiwKLQkgICAgICh1dmQtPmhhbmRsZSAhPSBOVUxMKSA/IHV2ZC0+aGFuZGxlLT5kcnZOYW1lIDogIj8/PyIsCi0JICAgICB1dmQtPnZkZXYubWlub3IsIHRtcDIsIHRtcDEpOworCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiJXMgb24gL2Rldi92aWRlbyVkOiBjYW52YXM9JXMgdmlkZW9zaXplPSVzXG4iLAorCQkgKHV2ZC0+aGFuZGxlICE9IE5VTEwpID8gdXZkLT5oYW5kbGUtPmRydk5hbWUgOiAiPz8/IiwKKwkJIHV2ZC0+dmRldi5taW5vciwgdG1wMiwgdG1wMSk7CiAKIAl1c2JfZ2V0X2Rldih1dmQtPmRldik7CiAJcmV0dXJuIDA7CkBAIC0xMTExLDcgKzExMjEsNyBAQAogCWludCBpLCBlcnJDb2RlID0gMDsKIAogCWlmICh1dmQtPmRlYnVnID4gMSkKLQkJaW5mbygiJXMoJCVwKSIsIF9fZnVuY19fLCBkZXYpOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIiVzKCQlcClcbiIsIF9fZnVuY19fLCBkZXYpOwogCiAJaWYgKDAgPCB1c2J2aWRlb19DbGllbnRJbmNNb2RDb3VudCh1dmQpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTExNzgsMTkgKzExODgsMjUgQEAKIAkJaWYgKGVyckNvZGUgPT0gMCkgewogCQkJaWYgKFZBTElEX0NBTExCQUNLKHV2ZCwgc2V0dXBPbk9wZW4pKSB7CiAJCQkJaWYgKHV2ZC0+ZGVidWcgPiAxKQotCQkJCQlpbmZvKCIlczogc2V0dXBPbk9wZW4gY2FsbGJhY2siLCBfX2Z1bmNfXyk7CisJCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCQkJICIlczogc2V0dXBPbk9wZW4gY2FsbGJhY2tcbiIsCisJCQkJCQkgX19mdW5jX18pOwogCQkJCWVyckNvZGUgPSBHRVRfQ0FMTEJBQ0sodXZkLCBzZXR1cE9uT3BlbikodXZkKTsKIAkJCQlpZiAoZXJyQ29kZSA8IDApIHsKIAkJCQkJZXJyKCIlczogc2V0dXBPbk9wZW4gY2FsbGJhY2sgZmFpbGVkICglZC4pLiIsCiAJCQkJCSAgICBfX2Z1bmNfXywgZXJyQ29kZSk7CiAJCQkJfSBlbHNlIGlmICh1dmQtPmRlYnVnID4gMSkgewotCQkJCQlpbmZvKCIlczogc2V0dXBPbk9wZW4gY2FsbGJhY2sgc3VjY2Vzc2Z1bCIsIF9fZnVuY19fKTsKKwkJCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJCQkgIiVzOiBzZXR1cE9uT3BlbiBjYWxsYmFjayBzdWNjZXNzZnVsXG4iLAorCQkJCQkJIF9fZnVuY19fKTsKIAkJCQl9CiAJCQl9CiAJCQlpZiAoZXJyQ29kZSA9PSAwKSB7CiAJCQkJdXZkLT5zZXR0aW5nc0FkanVzdGVkID0gMDsKIAkJCQlpZiAodXZkLT5kZWJ1ZyA+IDEpCi0JCQkJCWluZm8oIiVzOiBPcGVuIHN1Y2NlZWRlZC4iLCBfX2Z1bmNfXyk7CisJCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCQkJICIlczogT3BlbiBzdWNjZWVkZWQuXG4iLAorCQkJCQkJIF9fZnVuY19fKTsKIAkJCQl1dmQtPnVzZXIrKzsKIAkJCQlmaWxlLT5wcml2YXRlX2RhdGEgPSB1dmQ7CiAJCQl9CkBAIC0xMjAwLDcgKzEyMTYsOCBAQAogCWlmIChlcnJDb2RlICE9IDApCiAJCXVzYnZpZGVvX0NsaWVudERlY01vZENvdW50KHV2ZCk7CiAJaWYgKHV2ZC0+ZGVidWcgPiAwKQotCQlpbmZvKCIlczogUmV0dXJuaW5nICVkLiIsIF9fZnVuY19fLCBlcnJDb2RlKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICIlczogUmV0dXJuaW5nICVkLlxuIiwgX19mdW5jX18sCisJCQkgZXJyQ29kZSk7CiAJcmV0dXJuIGVyckNvZGU7CiB9CiAKQEAgLTEyMjMsNyArMTI0MCw3IEBACiAJaW50IGk7CiAKIAlpZiAodXZkLT5kZWJ1ZyA+IDEpCi0JCWluZm8oIiVzKCQlcCkiLCBfX2Z1bmNfXywgZGV2KTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICIlcygkJXApXG4iLCBfX2Z1bmNfXywgZGV2KTsKIAogCW11dGV4X2xvY2soJnV2ZC0+bG9jayk7CiAJR0VUX0NBTExCQUNLKHV2ZCwgc3RvcERhdGFQdW1wKSh1dmQpOwpAQCAtMTI0MywxNCArMTI2MCwxNSBAQAogCXV2ZC0+dXNlci0tOwogCWlmICh1dmQtPnJlbW92ZV9wZW5kaW5nKSB7CiAJCWlmICh1dmQtPmRlYnVnID4gMCkKLQkJCWluZm8oInVzYnZpZGVvX3Y0bF9jbG9zZTogRmluYWwgZGlzY29ubmVjdC4iKTsKKwkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiJXM6IEZpbmFsIGRpc2Nvbm5lY3QuXG4iLAorCQkJCSBfX2Z1bmNfXyk7CiAJCXVzYnZpZGVvX0NhbWVyYVJlbGVhc2UodXZkKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ1dmQtPmxvY2spOwogCXVzYnZpZGVvX0NsaWVudERlY01vZENvdW50KHV2ZCk7CiAKIAlpZiAodXZkLT5kZWJ1ZyA+IDEpCi0JCWluZm8oIiVzOiBDb21wbGV0ZWQuIiwgX19mdW5jX18pOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIiVzOiBDb21wbGV0ZWQuXG4iLCBfX2Z1bmNfXyk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNjQsOCArMTM4Miw5IEBACiAJCQlzdHJ1Y3QgdmlkZW9fbW1hcCAqdm0gPSBhcmc7CiAKIAkJCWlmICh1dmQtPmRlYnVnID49IDEpIHsKLQkJCQlpbmZvKCJWSURJT0NNQ0FQVFVSRTogZnJhbWU9JWQuIHNpemU9JWR4JWQsIGZvcm1hdD0lZC4iLAotCQkJCSAgICAgdm0tPmZyYW1lLCB2bS0+d2lkdGgsIHZtLT5oZWlnaHQsIHZtLT5mb3JtYXQpOworCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCQkgIlZJRElPQ01DQVBUVVJFOiBmcmFtZT0lZC4gc2l6ZT0lZHglZCwgZm9ybWF0PSVkLlxuIiwKKwkJCQkJIHZtLT5mcmFtZSwgdm0tPndpZHRoLCB2bS0+aGVpZ2h0LCB2bS0+Zm9ybWF0KTsKIAkJCX0KIAkJCS8qCiAJCQkgKiBDaGVjayBpZiB0aGUgcmVxdWVzdGVkIHNpemUgaXMgc3VwcG9ydGVkLiBJZiB0aGUgcmVxdWVzdG9yCkBAIC0xMzgzLDE4ICsxNDAyLDI0IEBACiAJCQlpZiAoKHZtLT53aWR0aCA+IFZJREVPU0laRV9YKHV2ZC0+Y2FudmFzKSkgfHwKIAkJCSAgICAodm0tPmhlaWdodCA+IFZJREVPU0laRV9ZKHV2ZC0+Y2FudmFzKSkpIHsKIAkJCQlpZiAodXZkLT5kZWJ1ZyA+IDApIHsKLQkJCQkJaW5mbygiVklESU9DTUNBUFRVUkU6IFNpemU9JWR4JWQgdG9vIGxhcmdlOyAiCi0JCQkJCSAgICAgImFsbG93ZWQgb25seSB1cCB0byAlbGR4JWxkIiwgdm0tPndpZHRoLCB2bS0+aGVpZ2h0LAotCQkJCQkgICAgIFZJREVPU0laRV9YKHV2ZC0+Y2FudmFzKSwgVklERU9TSVpFX1kodXZkLT5jYW52YXMpKTsKKwkJCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJCQkgIlZJRElPQ01DQVBUVVJFOiBTaXplPSVkeCVkICIKKwkJCQkJCSAidG9vIGxhcmdlOyBhbGxvd2VkIG9ubHkgdXAgIgorCQkJCQkJICJ0byAlbGR4JWxkXG4iLCB2bS0+d2lkdGgsCisJCQkJCQkgdm0tPmhlaWdodCwKKwkJCQkJCSBWSURFT1NJWkVfWCh1dmQtPmNhbnZhcyksCisJCQkJCQkgVklERU9TSVpFX1kodXZkLT5jYW52YXMpKTsKIAkJCQl9CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQkvKiBDaGVjayBpZiB0aGUgcGFsZXR0ZSBpcyBzdXBwb3J0ZWQgKi8KIAkJCWlmICgoKDFMIDw8IHZtLT5mb3JtYXQpICYgdXZkLT5wYWxldHRlQml0cykgPT0gMCkgewogCQkJCWlmICh1dmQtPmRlYnVnID4gMCkgewotCQkJCQlpbmZvKCJWSURJT0NNQ0FQVFVSRTogZm9ybWF0PSVkLiBub3Qgc3VwcG9ydGVkIgotCQkJCQkgICAgICIgKHBhbGV0dGVCaXRzPSQlMDhseCkiLAotCQkJCQkgICAgIHZtLT5mb3JtYXQsIHV2ZC0+cGFsZXR0ZUJpdHMpOworCQkJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkJCSAiVklESU9DTUNBUFRVUkU6IGZvcm1hdD0lZC4gIgorCQkJCQkJICJub3Qgc3VwcG9ydGVkICIKKwkJCQkJCSAiKHBhbGV0dGVCaXRzPSQlMDhseClcbiIsCisJCQkJCQkgdm0tPmZvcm1hdCwgdXZkLT5wYWxldHRlQml0cyk7CiAJCQkJfQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQpAQCAtMTQyMiw3ICsxNDQ3LDkgQEAKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMSkKLQkJCQlpbmZvKCJWSURJT0NTWU5DOiBzeW5jaW5nIHRvIGZyYW1lICVkLiIsICpmcmFtZU51bSk7CisJCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJCSAiVklESU9DU1lOQzogc3luY2luZyB0byBmcmFtZSAlZC5cbiIsCisJCQkJCSAqZnJhbWVOdW0pOwogCQkJaWYgKHV2ZC0+ZmxhZ3MgJiBGTEFHU19OT19ERUNPRElORykKIAkJCQlyZXQgPSB1c2J2aWRlb19HZXRGcmFtZSh1dmQsICpmcmFtZU51bSk7CiAJCQllbHNlIGlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIGdldEZyYW1lKSkgewpAQCAtMTUwNCw3ICsxNTMxLDkgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAodXZkLT5kZWJ1ZyA+PSAxKQotCQlpbmZvKCIlczogJVpkLiBieXRlcywgbm9ibG9jaz0lZC4iLCBfX2Z1bmNfXywgY291bnQsIG5vYmxvY2spOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCSAiJXM6ICVaZC4gYnl0ZXMsIG5vYmxvY2s9JWQuXG4iLAorCQkJIF9fZnVuY19fLCBjb3VudCwgbm9ibG9jayk7CiAKIAltdXRleF9sb2NrKCZ1dmQtPmxvY2spOwogCkBAIC0xNjg1LDE4ICsxNzE0LDIxIEBACiAJCXJldHVybjsKICNpZiAwCiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApIHsKLQkJaW5mbygidXJiPSQlcCBzdGF0dXM9JWQuIGVycmNvdW50PSVkLiBsZW5ndGg9JWQuIiwKLQkJICAgICB1cmIsIHVyYi0+c3RhdHVzLCB1cmItPmVycm9yX2NvdW50LCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCSAidXJiPSQlcCBzdGF0dXM9JWQuIGVycmNvdW50PSVkLiBsZW5ndGg9JWQuXG4iLAorCQkJIHVyYiwgdXJiLT5zdGF0dXMsIHVyYi0+ZXJyb3JfY291bnQsCisJCQkgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAl9IGVsc2UgewogCQlzdGF0aWMgaW50IGMgPSAwOwogCQlpZiAoYysrICUgMTAwID09IDApCi0JCQlpbmZvKCJObyBJc29jIGRhdGEiKTsKKwkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiTm8gSXNvYyBkYXRhXG4iKTsKIAl9CiAjZW5kaWYKIAogCWlmICghdXZkLT5zdHJlYW1pbmcpIHsKIAkJaWYgKHV2ZC0+ZGVidWcgPj0gMSkKLQkJCWluZm8oIk5vdCBzdHJlYW1pbmcsIGJ1dCBpbnRlcnJ1cHQhIik7CisJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkgIk5vdCBzdHJlYW1pbmcsIGJ1dCBpbnRlcnJ1cHQhXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTc0MSw3ICsxNzczLDcgQEAKIAlpbnQgaSwgZXJyRmxhZzsKIAogCWlmICh1dmQtPmRlYnVnID4gMSkKLQkJaW5mbygiJXMoJCVwKSIsIF9fZnVuY19fLCB1dmQpOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIiVzKCQlcClcbiIsIF9fZnVuY19fLCB1dmQpOwogCiAJaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSkgewogCQllcnIoIiVzOiBDYW1lcmEgaXMgbm90IG9wZXJhdGlvbmFsIiwgX19mdW5jX18pOwpAQCAtMTc4OSw3ICsxODIxLDkgQEAKIAogCXV2ZC0+c3RyZWFtaW5nID0gMTsKIAlpZiAodXZkLT5kZWJ1ZyA+IDEpCi0JCWluZm8oIiVzOiBzdHJlYW1pbmc9MSB2aWRlb19lbmRwPSQlMDJ4IiwgX19mdW5jX18sIHV2ZC0+dmlkZW9fZW5kcCk7CisJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJICIlczogc3RyZWFtaW5nPTEgdmlkZW9fZW5kcD0kJTAyeFxuIiwgX19mdW5jX18sCisJCQkgdXZkLT52aWRlb19lbmRwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgxMSwxNCArMTg0NSwxNCBAQAogCQlyZXR1cm47CiAKIAlpZiAodXZkLT5kZWJ1ZyA+IDEpCi0JCWluZm8oIiVzKCQlcCkiLCBfX2Z1bmNfXywgdXZkKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICIlcygkJXApXG4iLCBfX2Z1bmNfXywgdXZkKTsKIAogCS8qIFVuc2NoZWR1bGUgYWxsIG9mIHRoZSBpc28gdGQncyAqLwogCWZvciAoaT0wOyBpIDwgVVNCVklERU9fTlVNU0JVRjsgaSsrKSB7CiAJCXVzYl9raWxsX3VyYih1dmQtPnNidWZbaV0udXJiKTsKIAl9CiAJaWYgKHV2ZC0+ZGVidWcgPiAxKQotCQlpbmZvKCIlczogc3RyZWFtaW5nPTAiLCBfX2Z1bmNfXyk7CisJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiJXM6IHN0cmVhbWluZz0wXG4iLCBfX2Z1bmNfXyk7CiAJdXZkLT5zdHJlYW1pbmcgPSAwOwogCiAJaWYgKCF1dmQtPnJlbW92ZV9wZW5kaW5nKSB7CkBAIC0xODUwLDcgKzE4ODQsOCBAQAogCWludCBuOwogCiAJaWYgKHV2ZC0+ZGVidWcgPiAxKQotCQlpbmZvKCJ1c2J2aWRlb19OZXdGcmFtZSgkJXAsJWQuKSIsIHV2ZCwgZnJhbWVudW0pOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgInVzYnZpZGVvX05ld0ZyYW1lKCQlcCwlZC4pXG4iLCB1dmQsCisJCQkgZnJhbWVudW0pOwogCiAJLyogSWYgd2UncmUgbm90IGdyYWJiaW5nIGEgZnJhbWUgcmlnaHQgbm93IGFuZCB0aGUgb3RoZXIgZnJhbWUgaXMgKi8KIAkvKiAgcmVhZHkgdG8gYmUgZ3JhYmJlZCBpbnRvLCB0aGVuIHVzZSBpdCBpbnN0ZWFkICovCkBAIC0xOTU1LDEyICsxOTkwLDE0IEBACiAJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSA9ICZ1dmQtPmZyYW1lW2ZyYW1lTnVtXTsKIAogCWlmICh1dmQtPmRlYnVnID49IDIpCi0JCWluZm8oIiVzKCQlcCwlZC4pIiwgX19mdW5jX18sIHV2ZCwgZnJhbWVOdW0pOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIiVzKCQlcCwlZC4pXG4iLCBfX2Z1bmNfXywgdXZkLAorCQkJIGZyYW1lTnVtKTsKIAogCXN3aXRjaCAoZnJhbWUtPmZyYW1lU3RhdGUpIHsKIAljYXNlIEZyYW1lU3RhdGVfVW51c2VkOgogCQlpZiAodXZkLT5kZWJ1ZyA+PSAyKQotCQkJaW5mbygiJXM6IEZyYW1lU3RhdGVfVW51c2VkIiwgX19mdW5jX18pOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICIlczogRnJhbWVTdGF0ZV9VbnVzZWRcbiIsCisJCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJY2FzZSBGcmFtZVN0YXRlX1JlYWR5OgogCWNhc2UgRnJhbWVTdGF0ZV9HcmFiYmluZzoKQEAgLTE5NzAsNyArMjAwNyw5IEBACiAJcmVkbzoKIAkJaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSkgewogCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKLQkJCQlpbmZvKCIlczogQ2FtZXJhIGlzIG5vdCBvcGVyYXRpb25hbCAoMSkiLCBfX2Z1bmNfXyk7CisJCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJCSAiJXM6IENhbWVyYSBpcyBub3Qgb3BlcmF0aW9uYWwgKDEpXG4iLAorCQkJCQkgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAkJbnRyaWVzID0gMDsKQEAgLTE5NzksMjQgKzIwMTgsMzMgQEAKIAkJCXNpZ25hbFBlbmRpbmcgPSBzaWduYWxfcGVuZGluZyhjdXJyZW50KTsKIAkJCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpIHsKIAkJCQlpZiAodXZkLT5kZWJ1ZyA+PSAyKQotCQkJCQlpbmZvKCIlczogQ2FtZXJhIGlzIG5vdCBvcGVyYXRpb25hbCAoMikiLCBfX2Z1bmNfXyk7CisJCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCQkJICIlczogQ2FtZXJhIGlzIG5vdCAiCisJCQkJCQkgIm9wZXJhdGlvbmFsICgyKVxuIiwgX19mdW5jX18pOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQogCQkJYXNzZXJ0KHV2ZC0+ZmJ1ZiAhPSBOVUxMKTsKIAkJCWlmIChzaWduYWxQZW5kaW5nKSB7CiAJCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKLQkJCQkJaW5mbygiJXM6IFNpZ25hbD0kJTA4eCIsIF9fZnVuY19fLCBzaWduYWxQZW5kaW5nKTsKKwkJCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJCSIlczogU2lnbmFsPSQlMDh4XG4iLCBfX2Z1bmNfXywKKwkJCQkJc2lnbmFsUGVuZGluZyk7CiAJCQkJaWYgKHV2ZC0+ZmxhZ3MgJiBGTEFHU19SRVRSWV9WSURJT0NTWU5DKSB7CiAJCQkJCXVzYnZpZGVvX1Rlc3RQYXR0ZXJuKHV2ZCwgMSwgMCk7CiAJCQkJCXV2ZC0+Y3VyZnJhbWUgPSAtMTsKIAkJCQkJdXZkLT5zdGF0cy5mcmFtZV9udW0rKzsKIAkJCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKLQkJCQkJCWluZm8oIiVzOiBGb3JjZWQgdGVzdCBwYXR0ZXJuIHNjcmVlbiIsIF9fZnVuY19fKTsKKwkJCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCQkJCSAiJXM6IEZvcmNlZCB0ZXN0ICIKKwkJCQkJCQkgInBhdHRlcm4gc2NyZWVuXG4iLAorCQkJCQkJCSBfX2Z1bmNfXyk7CiAJCQkJCXJldHVybiAwOwogCQkJCX0gZWxzZSB7CiAJCQkJCS8qIFN0YW5kYXJkIGFuc3dlcjogSW50ZXJydXB0ZWQhICovCiAJCQkJCWlmICh1dmQtPmRlYnVnID49IDIpCi0JCQkJCQlpbmZvKCIlczogSW50ZXJydXB0ZWQhIiwgX19mdW5jX18pOworCQkJCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJCQkJICIlczogSW50ZXJydXB0ZWQhXG4iLAorCQkJCQkJCSBfX2Z1bmNfXyk7CiAJCQkJCXJldHVybiAtRUlOVFI7CiAJCQkJfQogCQkJfSBlbHNlIHsKQEAgLTIwMTAsOCArMjA1OCwxMCBAQAogCQkJfQogCQl9IHdoaWxlIChmcmFtZS0+ZnJhbWVTdGF0ZSA9PSBGcmFtZVN0YXRlX0dyYWJiaW5nKTsKIAkJaWYgKHV2ZC0+ZGVidWcgPj0gMikgewotCQkJaW5mbygiJXM6IEdyYWJiaW5nIGRvbmU7IHN0YXRlPSVkLiAoJWx1LiBieXRlcykiLAotCQkJICAgICBfX2Z1bmNfXywgZnJhbWUtPmZyYW1lU3RhdGUsIGZyYW1lLT5zZXFSZWFkX0xlbmd0aCk7CisJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkgIiVzOiBHcmFiYmluZyBkb25lOyBzdGF0ZT0lZC4gKCVsdS4gYnl0ZXMpXG4iLAorCQkJCSBfX2Z1bmNfXywgZnJhbWUtPmZyYW1lU3RhdGUsCisJCQkJIGZyYW1lLT5zZXFSZWFkX0xlbmd0aCk7CiAJCX0KIAkJaWYgKGZyYW1lLT5mcmFtZVN0YXRlID09IEZyYW1lU3RhdGVfRXJyb3IpIHsKIAkJCWludCByZXQgPSB1c2J2aWRlb19OZXdGcmFtZSh1dmQsIGZyYW1lTnVtKTsKQEAgLTIwNDgsNyArMjA5OCw5IEBACiAJCX0KIAkJZnJhbWUtPmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX0RvbmVfSG9sZDsKIAkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKLQkJCWluZm8oIiVzOiBFbnRlcmVkIEZyYW1lU3RhdGVfRG9uZV9Ib2xkIHN0YXRlLiIsIF9fZnVuY19fKTsKKwkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCSAiJXM6IEVudGVyZWQgRnJhbWVTdGF0ZV9Eb25lX0hvbGQgc3RhdGUuXG4iLAorCQkJCSBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBGcmFtZVN0YXRlX0RvbmVfSG9sZDoKQEAgLTIwNTksNyArMjExMSw5IEBACiAJCSAqIGl0IHdpbGwgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSB3aWxkIHRvIHJvYW0gZnJlZWx5LgogCQkgKi8KIAkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKLQkJCWluZm8oIiVzOiBGcmFtZVN0YXRlX0RvbmVfSG9sZCBzdGF0ZS4iLCBfX2Z1bmNfXyk7CisJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkgIiVzOiBGcmFtZVN0YXRlX0RvbmVfSG9sZCBzdGF0ZS5cbiIsCisJCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKaW5kZXggMmViNDU4Mi4uN2ExMjdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYwpAQCAtNDcyLDkgKzQ3Miw4IEBACiBzdGF0aWMgaW50CiB2aWNhbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtID0KLQkgICAgKHN0cnVjdCB2aWNhbV9jYW1lcmEgKikgZGV2LT5wcml2OworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlEQkcoIm9wZW5cbiIpOwogCiAJaWYgKCFjYW0pIHsKQEAgLTQ4OCwyMCArNDg3LDI0IEBACiAJICogcmVseSBvbiB0aGlzIGZhY3QgZm9yZXZlci4KIAkgKi8KIAorCWxvY2tfa2VybmVsKCk7CiAJaWYgKGNhbS0+b3Blbl9jb3VudCA+IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkgICAgICAgInZpY2FtX29wZW4gY2FsbGVkIG9uIGFscmVhZHkgb3BlbmVkIGNhbWVyYSIpOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJY2FtLT5yYXdfaW1hZ2UgPSBrbWFsbG9jKFZJQ0FNX01BWF9SRUFEX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghY2FtLT5yYXdfaW1hZ2UpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAljYW0tPmZyYW1lYnVmID0gcnZtYWxsb2MoVklDQU1fTUFYX0ZSQU1FX1NJWkUgKiBWSUNBTV9GUkFNRVMpOwogCWlmICghY2FtLT5mcmFtZWJ1ZikgewogCQlrZnJlZShjYW0tPnJhd19pbWFnZSk7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC01MDksNiArNTEyLDcgQEAKIAlpZiAoIWNhbS0+Y250cmxidWYpIHsKIAkJa2ZyZWUoY2FtLT5yYXdfaW1hZ2UpOwogCQlydmZyZWUoY2FtLT5mcmFtZWJ1ZiwgVklDQU1fTUFYX0ZSQU1FX1NJWkUgKiBWSUNBTV9GUkFNRVMpOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtNTI2LDYgKzUzMCw3IEBACiAJY2FtLT5vcGVuX2NvdW50Kys7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBjYW07CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03OTUsNiArODAwLDcgQEAKIAkubmFtZSAJCT0gIlZpQ2FtLWJhc2VkIFVTQiBDYW1lcmEiLAogCS5mb3BzIAkJPSAmdmljYW1fZm9wcywKIAkubWlub3IgCQk9IC0xLAorCS5yZWxlYXNlIAk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwpAQCAtODU5LDkgKzg2NSw4IEBACiAKIAltdXRleF9pbml0KCZjYW0tPmNhbV9sb2NrKTsKIAotCW1lbWNweSgmY2FtLT52ZGV2LCAmdmljYW1fdGVtcGxhdGUsCi0JICAgICAgIHNpemVvZiAodmljYW1fdGVtcGxhdGUpKTsKLQljYW0tPnZkZXYucHJpdiA9IGNhbTsJLy8gc29ydCBvZiBhIHJldmVyc2UgbWFwcGluZyBmb3IgdGhvc2UgZnVuY3Rpb25zIHRoYXQgZ2V0IHZkZXYgb25seQorCW1lbWNweSgmY2FtLT52ZGV2LCAmdmljYW1fdGVtcGxhdGUsIHNpemVvZih2aWNhbV90ZW1wbGF0ZSkpOworCXZpZGVvX3NldF9kcnZkYXRhKCZjYW0tPnZkZXYsIGNhbSk7CiAKIAljYW0tPnVkZXYgPSBkZXY7CiAJY2FtLT5idWxrRW5kcG9pbnQgPSBidWxrRW5kcG9pbnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYwppbmRleCBjMzE3ZWQ3Li45ZTRmNTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMKQEAgLTQ1LDEwICs0NSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAotI2lmZGVmIENPTkZJR19LTU9ECi0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2VuZGlmCi0KICNpbmNsdWRlICJ1c2J2aXNpb24uaCIKIAogc3RhdGljIHVuc2lnbmVkIGludCBjb3JlX2RlYnVnOwpAQCAtODQsNyArODAsOCBAQAogI2lmZGVmIFVTQlZJU0lPTl9ERUJVRwogCSNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIHsgXAogCQlpZiAoY29yZV9kZWJ1ZyAmIChsZXZlbCkpIFwKLQkJCWluZm8oIlslczolZF0gIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyBcCisJCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6WyVzOiVkXSAiIGZtdCwgXAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyBcCiAJfQogI2Vsc2UKIAkjZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSgwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCmluZGV4IGE2ZDAwODUuLjkyNDI3ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKQEAgLTQ3LDcgKzQ3LDggQEAKIAogI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgeyBcCiAJCWlmIChpMmNfZGVidWcgJiAobGV2ZWwpKSBcCi0JCQlpbmZvKCJbJXM6JWRdICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOlslczolZF0gIiBmbXQsIFwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsgXAogCX0KIAogc3RhdGljIGludCB1c2J2aXNpb25faTJjX3dyaXRlKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIHVuc2lnbmVkIGNoYXIgYWRkciwgY2hhciAqYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYwppbmRleCBiOTc3MTE2Li43N2FlYjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYwpAQCAtNjksMTAgKzY5LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCi0jaWZkZWYgQ09ORklHX0tNT0QKLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgInVzYnZpc2lvbi5oIgogI2luY2x1ZGUgInVzYnZpc2lvbi1jYXJkcy5oIgogCkBAIC05OCw3ICs5NCw4IEBACiAjaWZkZWYgVVNCVklTSU9OX0RFQlVHCiAJI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgeyBcCiAJCWlmICh2aWRlb19kZWJ1ZyAmIChsZXZlbCkpIFwKLQkJCWluZm8oIlslczolZF0gIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyBcCisJCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6WyVzOiVkXSAiIGZtdCwgXAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyBcCiAJfQogI2Vsc2UKIAkjZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSgwKQpAQCAtMzYwLDEzICszNTcsMTIgQEAKICAqLwogc3RhdGljIGludCB1c2J2aXNpb25fdjRsMl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBlcnJDb2RlID0gMDsKIAogCVBERUJVRyhEQkdfSU8sICJvcGVuIik7CiAKKwlsb2NrX2tlcm5lbCgpOwogCXVzYnZpc2lvbl9yZXNldF9wb3dlck9mZlRpbWVyKHVzYnZpc2lvbik7CiAKIAlpZiAodXNidmlzaW9uLT51c2VyKQpAQCAtNDI0LDYgKzQyMCw3IEBACiAJdXNidmlzaW9uX2VtcHR5X2ZyYW1lcXVldWVzKHVzYnZpc2lvbik7CiAKIAlQREVCVUcoREJHX0lPLCAic3VjY2VzcyIpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyQ29kZTsKIH0KIApAQCAtNDM3LDkgKzQzNCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgdXNidmlzaW9uX3Y0bDJfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlQREVCVUcoREJHX0lPLCAiY2xvc2UiKTsKIAltdXRleF9sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwpAQCAtNDg0LDkgKzQ3OSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX3JlZ2lzdGVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBlcnJDb2RlOwogCiAJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaG9zdChyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCkBAIC01MDUsOSArNDk4LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfcmVnaXN0ZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpyZWcpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IGVyckNvZGU7CiAKIAlpZiAoIXY0bDJfY2hpcF9tYXRjaF9ob3N0KHJlZy0+bWF0Y2hfdHlwZSwgcmVnLT5tYXRjaF9jaGlwKSkKQEAgLTUyNiw5ICs1MTcsNyBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdmMpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzdHJsY3B5KHZjLT5kcml2ZXIsICJVU0JWaXNpb24iLCBzaXplb2YodmMtPmRyaXZlcikpOwogCXN0cmxjcHkodmMtPmNhcmQsCkBAIC01NDgsOSArNTM3LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2lucHV0ICp2aSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgY2hhbjsKIAogCWlmICgodmktPmluZGV4ID49IHVzYnZpc2lvbi0+dmlkZW9faW5wdXRzKSB8fCAodmktPmluZGV4IDwgMCkgKQpAQCAtNjAzLDkgKzU5MCw3IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmlucHV0KQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJKmlucHV0ID0gdXNidmlzaW9uLT5jdGxfaW5wdXQ7CiAJcmV0dXJuIDA7CkBAIC02MTMsOSArNTk4LDcgQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpbnB1dCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICgoaW5wdXQgPj0gdXNidmlzaW9uLT52aWRlb19pbnB1dHMpIHx8IChpbnB1dCA8IDApICkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MzIsOSArNjE1LDggQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19zdGQgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqaWQpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAl1c2J2aXNpb24tPnR2bm9ybUlkPSppZDsKIAogCW11dGV4X2xvY2soJnVzYnZpc2lvbi0+bG9jayk7CkBAIC02NTAsOSArNjMyLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2dCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICghdXNidmlzaW9uLT5oYXZlX3R1bmVyIHx8IHZ0LT5pbmRleCkJLy8gT25seSB0dW5lciAwCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjcxLDkgKzY1MSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAkvLyBPbmx5IG5vIG9yIG9uZSB0dW5lciBmb3Igbm93CiAJaWYgKCF1c2J2aXNpb24tPmhhdmVfdHVuZXIgfHwgdnQtPmluZGV4KQpAQCAtNjg3LDkgKzY2NSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZnJlcS0+dHVuZXIgPSAwOyAvLyBPbmx5IG9uZSB0dW5lcgogCWlmKHVzYnZpc2lvbi0+cmFkaW8pIHsKQEAgLTcwNSw5ICs2ODEsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCS8vIE9ubHkgbm8gb3Igb25lIHR1bmVyIGZvciBub3cKIAlpZiAoIXVzYnZpc2lvbi0+aGF2ZV90dW5lciB8fCBmcmVxLT50dW5lcikKQEAgLTcyMSw5ICs2OTUsNyBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAltZW1zZXQoYSwwLHNpemVvZigqYSkpOwogCWlmKHVzYnZpc2lvbi0+cmFkaW8pIHsKQEAgLTc0OCw5ICs3MjAsNyBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IGlkPWN0cmwtPmlkOwogCiAJbWVtc2V0KGN0cmwsMCxzaXplb2YoKmN0cmwpKTsKQEAgLTc2Nyw5ICs3MzcsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfR19DVFJMLCBjdHJsKTsKIAogCXJldHVybiAwOwpAQCAtNzc4LDkgKzc0Niw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19TX0NUUkwsIGN0cmwpOwogCiAJcmV0dXJuIDA7CkBAIC03ODksOSArNzU1LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3JlcWJ1ZnMgKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnZyKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXQ7CiAKIAlSRVNUUklDVF9UT19SQU5HRSh2ci0+Y291bnQsMSxVU0JWSVNJT05fTlVNRlJBTUVTKTsKQEAgLTgxOSw5ICs3ODMsNyBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnlidWYgKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqdmIpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJc3RydWN0IHVzYnZpc2lvbl9mcmFtZSAqZnJhbWU7CiAKIAkvKiBGSVhNRSA6IG11c3QgY29udHJvbApAQCAtODU3LDkgKzgxOSw3IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3FidWYgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnZiKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCB1c2J2aXNpb25fZnJhbWUgKmZyYW1lOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIApAQCAtODk2LDkgKzg1Niw3IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX2RxYnVmIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICp2YikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0OwogCXN0cnVjdCB1c2J2aXNpb25fZnJhbWUgKmY7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwpAQCAtOTM5LDkgKzg5Nyw3IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgYj1WNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAKIAl1c2J2aXNpb24tPnN0cmVhbWluZyA9IFN0cmVhbV9PbjsKQEAgLTk1Myw5ICs5MDksNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBiPVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAogCWlmICh0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKQEAgLTk4OCw5ICs5NDIsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqdmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdmYtPmZtdC5waXgud2lkdGggPSB1c2J2aXNpb24tPmN1cndpZHRoOwogCXZmLT5mbXQucGl4LmhlaWdodCA9IHVzYnZpc2lvbi0+Y3VyaGVpZ2h0OwogCXZmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gdXNidmlzaW9uLT5wYWxldHRlLmZvcm1hdDsKQEAgLTEwMDYsOSArOTU4LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICp2ZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgZm9ybWF0SWR4OwogCiAJLyogRmluZCByZXF1ZXN0ZWQgZm9ybWF0IGluIGF2YWlsYWJsZSBvbmVzICovCkBAIC0xMDM2LDkgKzk4Niw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqdmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IHJldDsKIAogCWlmKCAwICE9IChyZXQ9dmlkaW9jX3RyeV9mbXRfdmlkX2NhcCAoZmlsZSwgcHJpdiwgdmYpKSApIHsKQEAgLTEwNjYsOSArMTAxNCw3IEBACiBzdGF0aWMgc3NpemVfdCB1c2J2aXNpb25fdjRsMl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgbm9ibG9jayA9IGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIApAQCAtMTE3NywxMCArMTEyMyw3IEBACiAJCXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKIAl2b2lkICpwb3M7CiAJdTMyIGk7Ci0KLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCVBERUJVRyhEQkdfTU1BUCwgIm1tYXAiKTsKIApAQCAtMTIzNyw5ICsxMTgwLDcgQEAKICAqLwogc3RhdGljIGludCB1c2J2aXNpb25fcmFkaW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgZXJyQ29kZSA9IDA7CiAKIAlQREVCVUcoREJHX0lPLCAiJXM6IiwgX19mdW5jX18pOwpAQCAtMTI4OSw5ICsxMjMwLDcgQEAKIAogc3RhdGljIGludCB1c2J2aXNpb25fcmFkaW9fY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IGVyckNvZGUgPSAwOwogCiAJUERFQlVHKERCR19JTywgIiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKaW5kZXggZmVhYjEyYS4uZjE2YWFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCkBAIC04Myw2ICs4MywyMiBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAorCQkuc2VsZWN0b3IJPSBQVV9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFX0NPTlRST0wsCisJCS5pbmRleAkJPSA2LAorCQkuc2l6ZQkJPSAyLAorCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQorCQkJCXwgVVZDX0NPTlRST0xfUkVTVE9SRSB8IFVWQ19DT05UUk9MX0FVVE9fVVBEQVRFLAorCX0sCisJeworCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAorCQkuc2VsZWN0b3IJPSBQVV9XSElURV9CQUxBTkNFX0NPTVBPTkVOVF9DT05UUk9MLAorCQkuaW5kZXgJCT0gNywKKwkJLnNpemUJCT0gNCwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKKwkJCQl8IFVWQ19DT05UUk9MX1JFU1RPUkUgfCBVVkNfQ09OVFJPTF9BVVRPX1VQREFURSwKKwl9LAorCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKIAkJLnNlbGVjdG9yCT0gUFVfQkFDS0xJR0hUX0NPTVBFTlNBVElPTl9DT05UUk9MLAogCQkuaW5kZXgJCT0gOCwKIAkJLnNpemUJCT0gMiwKQEAgLTExNCw2ICsxMzAsNjAgQEAKIAkJCQl8IFVWQ19DT05UUk9MX0dFVF9ERUYgfCBVVkNfQ09OVFJPTF9SRVNUT1JFLAogCX0sCiAJeworCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAorCQkuc2VsZWN0b3IJPSBQVV9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFX0FVVE9fQ09OVFJPTCwKKwkJLmluZGV4CQk9IDEyLAorCQkuc2l6ZQkJPSAxLAorCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9DVVIKKwkJCQl8IFVWQ19DT05UUk9MX0dFVF9ERUYgfCBVVkNfQ09OVFJPTF9SRVNUT1JFLAorCX0sCisJeworCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAorCQkuc2VsZWN0b3IJPSBQVV9XSElURV9CQUxBTkNFX0NPTVBPTkVOVF9BVVRPX0NPTlRST0wsCisJCS5pbmRleAkJPSAxMywKKwkJLnNpemUJCT0gMSwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfQ1VSCisJCQkJfCBVVkNfQ09OVFJPTF9HRVRfREVGIHwgVVZDX0NPTlRST0xfUkVTVE9SRSwKKwl9LAorCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKKwkJLnNlbGVjdG9yCT0gUFVfRElHSVRBTF9NVUxUSVBMSUVSX0NPTlRST0wsCisJCS5pbmRleAkJPSAxNCwKKwkJLnNpemUJCT0gMiwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKKwkJCQl8IFVWQ19DT05UUk9MX1JFU1RPUkUsCisJfSwKKwl7CisJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCisJCS5zZWxlY3Rvcgk9IFBVX0RJR0lUQUxfTVVMVElQTElFUl9MSU1JVF9DT05UUk9MLAorCQkuaW5kZXgJCT0gMTUsCisJCS5zaXplCQk9IDIsCisJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCisJCQkJfCBVVkNfQ09OVFJPTF9SRVNUT1JFLAorCX0sCisJeworCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAorCQkuc2VsZWN0b3IJPSBQVV9BTkFMT0dfVklERU9fU1RBTkRBUkRfQ09OVFJPTCwKKwkJLmluZGV4CQk9IDE2LAorCQkuc2l6ZQkJPSAxLAorCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfR0VUX0NVUiwKKwl9LAorCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKKwkJLnNlbGVjdG9yCT0gUFVfQU5BTE9HX0xPQ0tfU1RBVFVTX0NPTlRST0wsCisJCS5pbmRleAkJPSAxNywKKwkJLnNpemUJCT0gMSwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX0dFVF9DVVIsCisJfSwKKwl7CisJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKKwkJLnNlbGVjdG9yCT0gQ1RfU0NBTk5JTkdfTU9ERV9DT05UUk9MLAorCQkuaW5kZXgJCT0gMCwKKwkJLnNpemUJCT0gMSwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfQ1VSCisJCQkJfCBVVkNfQ09OVFJPTF9SRVNUT1JFLAorCX0sCisJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCiAJCS5zZWxlY3Rvcgk9IENUX0FFX01PREVfQ09OVFJPTCwKIAkJLmluZGV4CQk9IDEsCkBAIC0xNDAsNiArMjEwLDE0IEBACiAJfSwKIAl7CiAJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKKwkJLnNlbGVjdG9yCT0gQ1RfRVhQT1NVUkVfVElNRV9SRUxBVElWRV9DT05UUk9MLAorCQkuaW5kZXgJCT0gNCwKKwkJLnNpemUJCT0gMSwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfQ1VSCisJCQkJfCBVVkNfQ09OVFJPTF9SRVNUT1JFLAorCX0sCisJeworCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCiAJCS5zZWxlY3Rvcgk9IENUX0ZPQ1VTX0FCU09MVVRFX0NPTlRST0wsCiAJCS5pbmRleAkJPSA1LAogCQkuc2l6ZQkJPSAyLApAQCAtMTQ4LDYgKzIyNiw3OCBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCisJCS5zZWxlY3Rvcgk9IENUX0ZPQ1VTX1JFTEFUSVZFX0NPTlRST0wsCisJCS5pbmRleAkJPSA2LAorCQkuc2l6ZQkJPSAyLAorCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQorCQkJCXwgVVZDX0NPTlRST0xfQVVUT19VUERBVEUsCisJfSwKKwl7CisJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKKwkJLnNlbGVjdG9yCT0gQ1RfSVJJU19BQlNPTFVURV9DT05UUk9MLAorCQkuaW5kZXgJCT0gNywKKwkJLnNpemUJCT0gMiwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKKwkJCQl8IFVWQ19DT05UUk9MX1JFU1RPUkUgfCBVVkNfQ09OVFJPTF9BVVRPX1VQREFURSwKKwl9LAorCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAorCQkuc2VsZWN0b3IJPSBDVF9JUklTX1JFTEFUSVZFX0NPTlRST0wsCisJCS5pbmRleAkJPSA4LAorCQkuc2l6ZQkJPSAxLAorCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9DVVIKKwkJCQl8IFVWQ19DT05UUk9MX0FVVE9fVVBEQVRFLAorCX0sCisJeworCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCisJCS5zZWxlY3Rvcgk9IENUX1pPT01fQUJTT0xVVEVfQ09OVFJPTCwKKwkJLmluZGV4CQk9IDksCisJCS5zaXplCQk9IDIsCisJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCisJCQkJfCBVVkNfQ09OVFJPTF9SRVNUT1JFIHwgVVZDX0NPTlRST0xfQVVUT19VUERBVEUsCisJfSwKKwl7CisJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKKwkJLnNlbGVjdG9yCT0gQ1RfWk9PTV9SRUxBVElWRV9DT05UUk9MLAorCQkuaW5kZXgJCT0gMTAsCisJCS5zaXplCQk9IDMsCisJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCisJCQkJfCBVVkNfQ09OVFJPTF9BVVRPX1VQREFURSwKKwl9LAorCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAorCQkuc2VsZWN0b3IJPSBDVF9QQU5USUxUX0FCU09MVVRFX0NPTlRST0wsCisJCS5pbmRleAkJPSAxMSwKKwkJLnNpemUJCT0gOCwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKKwkJCQl8IFVWQ19DT05UUk9MX1JFU1RPUkUgfCBVVkNfQ09OVFJPTF9BVVRPX1VQREFURSwKKwl9LAorCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAorCQkuc2VsZWN0b3IJPSBDVF9QQU5USUxUX1JFTEFUSVZFX0NPTlRST0wsCisJCS5pbmRleAkJPSAxMiwKKwkJLnNpemUJCT0gNCwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKKwkJCQl8IFVWQ19DT05UUk9MX0FVVE9fVVBEQVRFLAorCX0sCisJeworCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCisJCS5zZWxlY3Rvcgk9IENUX1JPTExfQUJTT0xVVEVfQ09OVFJPTCwKKwkJLmluZGV4CQk9IDEzLAorCQkuc2l6ZQkJPSAyLAorCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQorCQkJCXwgVVZDX0NPTlRST0xfUkVTVE9SRSB8IFVWQ19DT05UUk9MX0FVVE9fVVBEQVRFLAorCX0sCisJeworCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCisJCS5zZWxlY3Rvcgk9IENUX1JPTExfUkVMQVRJVkVfQ09OVFJPTCwKKwkJLmluZGV4CQk9IDE0LAorCQkuc2l6ZQkJPSAyLAorCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQorCQkJCXwgVVZDX0NPTlRST0xfQVVUT19VUERBVEUsCisJfSwKKwl7CisJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKIAkJLnNlbGVjdG9yCT0gQ1RfRk9DVVNfQVVUT19DT05UUk9MLAogCQkuaW5kZXgJCT0gMTcsCiAJCS5zaXplCQk9IDEsCkBAIC0xNTUsMzUgKzMwNSwxMSBAQAogCQkJCXwgVVZDX0NPTlRST0xfR0VUX0RFRiB8IFVWQ19DT05UUk9MX1JFU1RPUkUsCiAJfSwKIAl7Ci0JCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCi0JCS5zZWxlY3Rvcgk9IFBVX1dISVRFX0JBTEFOQ0VfVEVNUEVSQVRVUkVfQVVUT19DT05UUk9MLAotCQkuaW5kZXgJCT0gMTIsCisJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKKwkJLnNlbGVjdG9yCT0gQ1RfUFJJVkFDWV9DT05UUk9MLAorCQkuaW5kZXgJCT0gMTgsCiAJCS5zaXplCQk9IDEsCiAJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX0NVUgotCQkJCXwgVVZDX0NPTlRST0xfR0VUX0RFRiB8IFVWQ19DT05UUk9MX1JFU1RPUkUsCi0JfSwKLQl7Ci0JCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCi0JCS5zZWxlY3Rvcgk9IFBVX1dISVRFX0JBTEFOQ0VfVEVNUEVSQVRVUkVfQ09OVFJPTCwKLQkJLmluZGV4CQk9IDYsCi0JCS5zaXplCQk9IDIsCi0JCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCi0JCQkJfCBVVkNfQ09OVFJPTF9SRVNUT1JFIHwgVVZDX0NPTlRST0xfQVVUT19VUERBVEUsCi0JfSwKLQl7Ci0JCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCi0JCS5zZWxlY3Rvcgk9IFBVX1dISVRFX0JBTEFOQ0VfQ09NUE9ORU5UX0FVVE9fQ09OVFJPTCwKLQkJLmluZGV4CQk9IDEzLAotCQkuc2l6ZQkJPSAxLAotCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9DVVIKLQkJCQl8IFVWQ19DT05UUk9MX0dFVF9ERUYgfCBVVkNfQ09OVFJPTF9SRVNUT1JFLAotCX0sCi0JewotCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9XSElURV9CQUxBTkNFX0NPTVBPTkVOVF9DT05UUk9MLAotCQkuaW5kZXgJCT0gNywKLQkJLnNpemUJCT0gNCwKLQkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKIAkJCQl8IFVWQ19DT05UUk9MX1JFU1RPUkUgfCBVVkNfQ09OVFJPTF9BVVRPX1VQREFURSwKIAl9LAogfTsKQEAgLTcxMSw3ICs4MzcsMTcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBlbnRpdHktPm5jb250cm9sczsgKytpKSB7CiAJCWN0cmwgPSAmZW50aXR5LT5jb250cm9sc1tpXTsKLQkJaWYgKGN0cmwtPmluZm8gPT0gTlVMTCB8fCAhY3RybC0+ZGlydHkpCisJCWlmIChjdHJsLT5pbmZvID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKiBSZXNldCB0aGUgbG9hZGVkIGZsYWcgZm9yIGF1dG8tdXBkYXRlIGNvbnRyb2xzIHRoYXQgd2VyZQorCQkgKiBtYXJrZWQgYXMgbG9hZGVkIGluIHV2Y19jdHJsX2dldC91dmNfY3RybF9zZXQgdG8gcHJldmVudAorCQkgKiB1dmNfY3RybF9nZXQgZnJvbSB1c2luZyB0aGUgY2FjaGVkIHZhbHVlLgorCQkgKi8KKwkJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfQVVUT19VUERBVEUpCisJCQljdHJsLT5sb2FkZWQgPSAwOworCisJCWlmICghY3RybC0+ZGlydHkpCiAJCQljb250aW51ZTsKIAogCQlpZiAoIXJvbGxiYWNrKQpAQCAtNzI3LDkgKzg2Myw2IEBACiAJCQkgICAgICAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX0JBQ0tVUCksCiAJCQkgICAgICAgY3RybC0+aW5mby0+c2l6ZSk7CiAKLQkJaWYgKChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9DVVIpID09IDApCi0JCQljdHJsLT5sb2FkZWQgPSAwOwotCiAJCWN0cmwtPmRpcnR5ID0gMDsKIAogCQlpZiAocmV0IDwgMCkKQEAgLTc4Nyw4ICs5MjAsNyBAQAogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJaWYgKChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0FVVE9fVVBEQVRFKSA9PSAwKQotCQkJY3RybC0+bG9hZGVkID0gMTsKKwkJY3RybC0+bG9hZGVkID0gMTsKIAl9CiAKIAl4Y3RybC0+dmFsdWUgPSB1dmNfZ2V0X2xlX3ZhbHVlKApAQCAtODM5LDggKzk3MSw3IEBACiAJCQkJcmV0dXJuIHJldDsKIAkJfQogCi0JCWlmICgoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9BVVRPX1VQREFURSkgPT0gMCkKLQkJCWN0cmwtPmxvYWRlZCA9IDE7CisJCWN0cmwtPmxvYWRlZCA9IDE7CiAJfQogCiAJaWYgKCFjdHJsLT5kaXJ0eSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCmluZGV4IDdlMTAyMDMuLmQ3YWQwNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKQEAgLTE2NjMsNyArMTY2Myw3IEBACiAJcmV0dXJuIHV2Y192aWRlb19zdXNwZW5kKCZkZXYtPnZpZGVvKTsKIH0KIAotc3RhdGljIGludCB1dmNfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQorc3RhdGljIGludCBfX3V2Y19yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGludCByZXNldCkKIHsKIAlzdHJ1Y3QgdXZjX2RldmljZSAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAlpbnQgcmV0OwpAQCAtMTY3Miw3ICsxNjcyLDcgQEAKIAkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CiAKIAlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzID09IFNDX1ZJREVPQ09OVFJPTCkgewotCQlpZiAoKHJldCA9IHV2Y19jdHJsX3Jlc3VtZV9kZXZpY2UoZGV2KSkgPCAwKQorCQlpZiAocmVzZXQgJiYgKHJldCA9IHV2Y19jdHJsX3Jlc3VtZV9kZXZpY2UoZGV2KSkgPCAwKQogCQkJcmV0dXJuIHJldDsKIAogCQlyZXR1cm4gdXZjX3N0YXR1c19yZXN1bWUoZGV2KTsKQEAgLTE2ODcsNiArMTY4NywxNiBAQAogCXJldHVybiB1dmNfdmlkZW9fcmVzdW1lKCZkZXYtPnZpZGVvKTsKIH0KIAorc3RhdGljIGludCB1dmNfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXJldHVybiBfX3V2Y19yZXN1bWUoaW50ZiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgdXZjX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlyZXR1cm4gX191dmNfcmVzdW1lKGludGYsIDEpOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIERyaXZlciBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cAogICovCkBAIC0xOTAyLDYgKzE5MTIsMjQgQEAKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCiAJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1BST0JFX01JTk1BWCB9LAorCS8qIENvbXBhcSBQcmVzYXJpbyBCMTIwMCAtIEJpc29uIEVsZWN0cm9uaWNzICovCisJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKKwkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJICAuaWRWZW5kb3IJCT0gMHg1OTg2LAorCSAgLmlkUHJvZHVjdAkJPSAweDAxMDQsCisJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAorCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCisJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYIH0sCisJLyogQWNlciBUcmF2ZWxtYXRlIDc3MjAgLSBCaXNvbiBFbGVjdHJvbmljcyAqLworCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCisJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAorCSAgLmlkVmVuZG9yCQk9IDB4NTk4NiwKKwkgIC5pZFByb2R1Y3QJCT0gMHgwMTA1LAorCSAgLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19WSURFTywKKwkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAorCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCisJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1BST0JFX01JTk1BWCB9LAogCS8qIE1lZGlvbiBBa295YSBNaW5pIEUxMjEwIC0gQmlzb24gRWxlY3Ryb25pY3MgKi8KIAl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQogCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKQEAgLTE5MjAsNiArMTk0OCwyNCBAQAogCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCiAJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKIAkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYIH0sCisJLyogIEZ1aml0c3UgQW1pbG8gU0kyNjM2IC0gQmlzb24gRWxlY3Ryb25pY3MgKi8KKwl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQorCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkgIC5pZFZlbmRvcgkJPSAweDU5ODYsCisJICAuaWRQcm9kdWN0CQk9IDB4MDIwMiwKKwkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCisJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKKwkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAorCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19QUk9CRV9NSU5NQVggfSwKKwkvKiAgQWR2ZW50IDQyMTEgLSBCaXNvbiBFbGVjdHJvbmljcyAqLworCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCisJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAorCSAgLmlkVmVuZG9yCQk9IDB4NTk4NiwKKwkgIC5pZFByb2R1Y3QJCT0gMHgwMjAzLAorCSAgLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19WSURFTywKKwkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAorCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCisJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1BST0JFX01JTk1BWCB9LAogCS8qIEJpc29uIEVsZWN0cm9uaWNzICovCiAJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKIAkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCkBAIC0xOTUyLDYgKzE5OTgsNyBAQAogCQkuZGlzY29ubmVjdAk9IHV2Y19kaXNjb25uZWN0LAogCQkuc3VzcGVuZAk9IHV2Y19zdXNwZW5kLAogCQkucmVzdW1lCQk9IHV2Y19yZXN1bWUsCisJCS5yZXNldF9yZXN1bWUJPSB1dmNfcmVzZXRfcmVzdW1lLAogCQkuaWRfdGFibGUJPSB1dmNfaWRzLAogCQkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfc3RhdHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfc3RhdHVzLmMKaW5kZXggNzVlNjc4YS4uNWQ2MGIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3N0YXR1cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19zdGF0dXMuYwpAQCAtMTc3LDEwICsxNzcsMTYgQEAKIAogCXV2Y19pbnB1dF9pbml0KGRldik7CiAKLQlkZXYtPmludF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmIChkZXYtPmludF91cmIgPT0gTlVMTCkKKwlkZXYtPnN0YXR1cyA9IGt6YWxsb2MoVVZDX01BWF9TVEFUVVNfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldi0+c3RhdHVzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZGV2LT5pbnRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2LT5pbnRfdXJiID09IE5VTEwpIHsKKwkJa2ZyZWUoZGV2LT5zdGF0dXMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKIAlwaXBlID0gdXNiX3JjdmludHBpcGUoZGV2LT51ZGV2LCBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKIAogCS8qIEZvciBoaWdoLXNwZWVkIGludGVycnVwdCBlbmRwb2ludHMsIHRoZSBiSW50ZXJ2YWwgdmFsdWUgaXMgdXNlZCBhcwpAQCAtMTkyLDcgKzE5OCw3IEBACiAJCWludGVydmFsID0gZmxzKGludGVydmFsKSAtIDE7CiAKIAl1c2JfZmlsbF9pbnRfdXJiKGRldi0+aW50X3VyYiwgZGV2LT51ZGV2LCBwaXBlLAotCQlkZXYtPnN0YXR1cywgc2l6ZW9mIGRldi0+c3RhdHVzLCB1dmNfc3RhdHVzX2NvbXBsZXRlLAorCQlkZXYtPnN0YXR1cywgVVZDX01BWF9TVEFUVVNfU0laRSwgdXZjX3N0YXR1c19jb21wbGV0ZSwKIAkJZGV2LCBpbnRlcnZhbCk7CiAKIAlyZXR1cm4gdXNiX3N1Ym1pdF91cmIoZGV2LT5pbnRfdXJiLCBHRlBfS0VSTkVMKTsKQEAgLTIwMiw2ICsyMDgsNyBAQAogewogCXVzYl9raWxsX3VyYihkZXYtPmludF91cmIpOwogCXVzYl9mcmVlX3VyYihkZXYtPmludF91cmIpOworCWtmcmVlKGRldi0+c3RhdHVzKTsKIAl1dmNfaW5wdXRfY2xlYW51cChkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwppbmRleCBkN2JkNzFiLi43OGU0YzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKQEAgLTQwMCwxNSArNDAwLDEzIEBACiAKIHN0YXRpYyBpbnQgdXZjX3Y0bDJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwogCXN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbzsKIAlzdHJ1Y3QgdXZjX2ZoICpoYW5kbGU7CiAJaW50IHJldCA9IDA7CiAKIAl1dmNfdHJhY2UoVVZDX1RSQUNFX0NBTExTLCAidXZjX3Y0bDJfb3BlblxuIik7CiAJbXV0ZXhfbG9jaygmdXZjX2RyaXZlci5vcGVuX211dGV4KTsKLQl2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQl2aWRlbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCXZpZGVvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2aWRlby0+ZGV2LT5zdGF0ZSAmIFVWQ19ERVZfRElTQ09OTkVDVEVEKSB7CiAJCXJldCA9IC1FTk9ERVY7CkBAIC00NDAsOCArNDM4LDcgQEAKIAogc3RhdGljIGludCB1dmNfdjRsMl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCXN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJc3RydWN0IHV2Y19maCAqaGFuZGxlID0gKHN0cnVjdCB1dmNfZmggKilmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAl1dmNfdHJhY2UoVVZDX1RSQUNFX0NBTExTLCAidXZjX3Y0bDJfcmVsZWFzZVxuIik7CkBAIC04NDUsMTAgKzg0Miw2IEBACiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAotCQlpZiAoISh2aWRlby0+c3RyZWFtaW5nLT5jdXJfZm9ybWF0LT5mbGFncyAmCi0JCSAgICBVVkNfRk1UX0ZMQUdfQ09NUFJFU1NFRCkpCi0JCQl2aWRlby0+cXVldWUuZmxhZ3MgfD0gVVZDX1FVRVVFX0RST1BfSU5DT01QTEVURTsKLQogCQlyYi0+Y291bnQgPSByZXQ7CiAJCXJldCA9IDA7CiAJCWJyZWFrOwpAQCAtMTAzMSw4ICsxMDI0LDcgQEAKIAogc3RhdGljIGludCB1dmNfdjRsMl9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKwlzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCB1dmNfYnVmZmVyICp1bmluaXRpYWxpemVkX3ZhcihidWZmZXIpOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgYWRkciwgc3RhcnQsIHNpemU7CkBAIC0xMDg1LDggKzEwNzcsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHV2Y192NGwyX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXV2Y190cmFjZShVVkNfVFJBQ0VfQ0FMTFMsICJ1dmNfdjRsMl9wb2xsXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYwppbmRleCA2ODU0YWM3Li5iN2JiMjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYwpAQCAtNDU1LDcgKzQ1NSw4IEBACiAJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggLSByZXQpOwogCiAJCS8qIFByb2Nlc3MgdGhlIGhlYWRlciBhZ2Fpbi4gKi8KLQkJdXZjX3ZpZGVvX2RlY29kZV9lbmQodmlkZW8sIGJ1ZiwgbWVtLCByZXQpOworCQl1dmNfdmlkZW9fZGVjb2RlX2VuZCh2aWRlbywgYnVmLCBtZW0sCisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpOwogCiAJCWlmIChidWYtPnN0YXRlID09IFVWQ19CVUZfU1RBVEVfRE9ORSB8fAogCQkgICAgYnVmLT5zdGF0ZSA9PSBVVkNfQlVGX1NUQVRFX0VSUk9SKQpAQCAtNTEyLDcgKzUxMyw3IEBACiAJICAgIHZpZGVvLT5idWxrLnBheWxvYWRfc2l6ZSA+PSB2aWRlby0+YnVsay5tYXhfcGF5bG9hZF9zaXplKSB7CiAJCWlmICghdmlkZW8tPmJ1bGsuc2tpcF9wYXlsb2FkICYmIGJ1ZiAhPSBOVUxMKSB7CiAJCQl1dmNfdmlkZW9fZGVjb2RlX2VuZCh2aWRlbywgYnVmLCB2aWRlby0+YnVsay5oZWFkZXIsCi0JCQkJdmlkZW8tPmJ1bGsuaGVhZGVyX3NpemUpOworCQkJCXZpZGVvLT5idWxrLnBheWxvYWRfc2l6ZSk7CiAJCQlpZiAoYnVmLT5zdGF0ZSA9PSBVVkNfQlVGX1NUQVRFX0RPTkUgfHwKIAkJCSAgICBidWYtPnN0YXRlID09IFVWQ19CVUZfU1RBVEVfRVJST1IpCiAJCQkJYnVmID0gdXZjX3F1ZXVlX25leHRfYnVmZmVyKCZ2aWRlby0+cXVldWUsIGJ1Zik7CkBAIC02NTUsNyArNjU2LDcgQEAKIAlpZiAoc2l6ZSA+IFVWQ19NQVhfRlJBTUVfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlucGFja2V0cyA9IChzaXplICsgcHNpemUgLSAxKSAvIHBzaXplOworCW5wYWNrZXRzID0gRElWX1JPVU5EX1VQKHNpemUsIHBzaXplKTsKIAlpZiAobnBhY2tldHMgPiBVVkNfTUFYX0lTT19QQUNLRVRTKQogCQlucGFja2V0cyA9IFVWQ19NQVhfSVNPX1BBQ0tFVFM7CiAKQEAgLTk3MCw2ICs5NzEsMTEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKHZpZGVvLT5zdHJlYW1pbmctPmN1cl9mb3JtYXQtPmZsYWdzICYgVVZDX0ZNVF9GTEFHX0NPTVBSRVNTRUQpCisJCXZpZGVvLT5xdWV1ZS5mbGFncyAmPSB+VVZDX1FVRVVFX0RST1BfSU5DT01QTEVURTsKKwllbHNlCisJCXZpZGVvLT5xdWV1ZS5mbGFncyB8PSBVVkNfUVVFVUVfRFJPUF9JTkNPTVBMRVRFOworCiAJaWYgKChyZXQgPSB1dmNfcXVldWVfZW5hYmxlKCZ2aWRlby0+cXVldWUsIDEpKSA8IDApCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCmluZGV4IGJhZmUzNDAuLjlhNmJjMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaApAQCAtMzAzLDYgKzMwMyw4IEBACiAjZGVmaW5lIFVWQ19NQVhfRlJBTUVfU0laRQkoMTYqMTAyNCoxMDI0KQogLyogTWF4aW11bSBudW1iZXIgb2YgdmlkZW8gYnVmZmVycy4gKi8KICNkZWZpbmUgVVZDX01BWF9WSURFT19CVUZGRVJTCTMyCisvKiBNYXhpbXVtIHN0YXR1cyBidWZmZXIgc2l6ZSBpbiBieXRlcyBvZiBpbnRlcnJ1cHQgVVJCLiAqLworI2RlZmluZSBVVkNfTUFYX1NUQVRVU19TSVpFCTE2CiAKICNkZWZpbmUgVVZDX0NUUkxfQ09OVFJPTF9USU1FT1VUCTMwMAogI2RlZmluZSBVVkNfQ1RSTF9TVFJFQU1JTkdfVElNRU9VVAkxMDAwCkBAIC02MzQsNyArNjM2LDcgQEAKIAkvKiBTdGF0dXMgSW50ZXJydXB0IEVuZHBvaW50ICovCiAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICppbnRfZXA7CiAJc3RydWN0IHVyYiAqaW50X3VyYjsKLQlfX3U4IHN0YXR1c1sxNl07CisJX191OCAqc3RhdHVzOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCiAJLyogVmlkZW8gU3RyZWFtaW5nIGludGVyZmFjZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYwppbmRleCA3OTkzN2QxLi45MjhjYjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCkBAIC0zNiwxMCArMzYsNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCi0jaWZkZWYgQ09ORklHX0tNT0QKLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKLQogc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwppbmRleCA4OGNhMTMxLi44NDY3NjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCkBAIC02MCwxMCArNjAsNiBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAKLSNpZmRlZiBDT05GSUdfS01PRAotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKIE1PRFVMRV9BVVRIT1IoIkJpbGwgRGlya3MsIEp1c3RpbiBTY2hvZW1hbiwgR2VyZCBLbm9yciIpOwpAQCAtMTg3LDkgKzE4MywxMSBAQAogCQlOVUxMCiAJfTsKIAlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19lbmNvZGluZ1tdID0gewotCQkiTGF5ZXIgSSIsCi0JCSJMYXllciBJSSIsCi0JCSJMYXllciBJSUkiLAorCQkiTVBFRy0xLzIgTGF5ZXIgSSIsCisJCSJNUEVHLTEvMiBMYXllciBJSSIsCisJCSJNUEVHLTEvMiBMYXllciBJSUkiLAorCQkiTVBFRy0yLzQgQUFDIiwKKwkJIkFDLTMiLAogCQlOVUxMCiAJfTsKIAlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19sMV9iaXRyYXRlW10gPSB7CkBAIC0yNDMsNiArMjQxLDI4IEBACiAJCSIzMjAga2JwcyIsCiAJCU5VTEwKIAl9OworCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX2F1ZGlvX2FjM19iaXRyYXRlW10gPSB7CisJCSIzMiBrYnBzIiwKKwkJIjQwIGticHMiLAorCQkiNDgga2JwcyIsCisJCSI1NiBrYnBzIiwKKwkJIjY0IGticHMiLAorCQkiODAga2JwcyIsCisJCSI5NiBrYnBzIiwKKwkJIjExMiBrYnBzIiwKKwkJIjEyOCBrYnBzIiwKKwkJIjE2MCBrYnBzIiwKKwkJIjE5MiBrYnBzIiwKKwkJIjIyNCBrYnBzIiwKKwkJIjI1NiBrYnBzIiwKKwkJIjMyMCBrYnBzIiwKKwkJIjM4NCBrYnBzIiwKKwkJIjQ0OCBrYnBzIiwKKwkJIjUxMiBrYnBzIiwKKwkJIjU3NiBrYnBzIiwKKwkJIjY0MCBrYnBzIiwKKwkJTlVMTAorCX07CiAJc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfYXVkaW9fbW9kZVtdID0gewogCQkiU3RlcmVvIiwKIAkJIkpvaW50IFN0ZXJlbyIsCkBAIC0yNzEsNiArMjkxLDcgQEAKIAlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ192aWRlb19lbmNvZGluZ1tdID0gewogCQkiTVBFRy0xIiwKIAkJIk1QRUctMiIsCisJCSJNUEVHLTQgQVZDIiwKIAkJTlVMTAogCX07CiAJc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfdmlkZW9fYXNwZWN0W10gPSB7CkBAIC0zMTEsNiArMzMyLDggQEAKIAkJCXJldHVybiBtcGVnX2F1ZGlvX2wyX2JpdHJhdGU7CiAJCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFOgogCQkJcmV0dXJuIG1wZWdfYXVkaW9fbDNfYml0cmF0ZTsKKwkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFOgorCQkJcmV0dXJuIG1wZWdfYXVkaW9fYWMzX2JpdHJhdGU7CiAJCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFOgogCQkJcmV0dXJuIG1wZWdfYXVkaW9fbW9kZTsKIAkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OOgpAQCAtMzM1LDYyICszNTgsNzMgQEAKIH0KIEVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX2dldF9tZW51KTsKIAorLyogUmV0dXJuIHRoZSBjb250cm9sIG5hbWUuICovCitjb25zdCBjaGFyICp2NGwyX2N0cmxfZ2V0X25hbWUodTMyIGlkKQoreworCXN3aXRjaCAoaWQpIHsKKwkvKiBVU0VSIGNvbnRyb2xzICovCisJY2FzZSBWNEwyX0NJRF9VU0VSX0NMQVNTOiAJcmV0dXJuICJVc2VyIENvbnRyb2xzIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRTogCXJldHVybiAiVm9sdW1lIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6IAlyZXR1cm4gIk11dGUiOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRTogCXJldHVybiAiQmFsYW5jZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOiAJcmV0dXJuICJCYXNzIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRTogCXJldHVybiAiVHJlYmxlIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOiAJcmV0dXJuICJMb3VkbmVzcyI7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOiAJcmV0dXJuICJCcmlnaHRuZXNzIjsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOiAJcmV0dXJuICJDb250cmFzdCI7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOiAJcmV0dXJuICJTYXR1cmF0aW9uIjsKKwljYXNlIFY0TDJfQ0lEX0hVRTogCQlyZXR1cm4gIkh1ZSI7CisKKwkvKiBNUEVHIGNvbnRyb2xzICovCisJY2FzZSBWNEwyX0NJRF9NUEVHX0NMQVNTOiAJCXJldHVybiAiTVBFRyBFbmNvZGVyIENvbnRyb2xzIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUTogcmV0dXJuICJBdWRpbyBTYW1wbGluZyBGcmVxdWVuY3kiOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzogCXJldHVybiAiQXVkaW8gRW5jb2RpbmciOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFOiAJcmV0dXJuICJBdWRpbyBMYXllciBJIEJpdHJhdGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOiAJcmV0dXJuICJBdWRpbyBMYXllciBJSSBCaXRyYXRlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDNfQklUUkFURTogCXJldHVybiAiQXVkaW8gTGF5ZXIgSUlJIEJpdHJhdGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQUNfQklUUkFURTogCXJldHVybiAiQXVkaW8gQUFDIEJpdHJhdGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURTogCXJldHVybiAiQXVkaW8gQUMtMyBCaXRyYXRlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERTogCQlyZXR1cm4gIkF1ZGlvIFN0ZXJlbyBNb2RlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT046IHJldHVybiAiQXVkaW8gU3RlcmVvIE1vZGUgRXh0ZW5zaW9uIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVM6IAlyZXR1cm4gIkF1ZGlvIEVtcGhhc2lzIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDOiAJCXJldHVybiAiQXVkaW8gQ1JDIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURTogCQlyZXR1cm4gIkF1ZGlvIE11dGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzogCXJldHVybiAiVmlkZW8gRW5jb2RpbmciOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6IAlyZXR1cm4gIlZpZGVvIEFzcGVjdCI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTOiAJcmV0dXJuICJWaWRlbyBCIEZyYW1lcyI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFOiAJcmV0dXJuICJWaWRlbyBHT1AgU2l6ZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFOiAJcmV0dXJuICJWaWRlbyBHT1AgQ2xvc3VyZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOOiAJcmV0dXJuICJWaWRlbyBQdWxsZG93biI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERTogCXJldHVybiAiVmlkZW8gQml0cmF0ZSBNb2RlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURTogCXJldHVybiAiVmlkZW8gQml0cmF0ZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzogCXJldHVybiAiVmlkZW8gUGVhayBCaXRyYXRlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTjogcmV0dXJuICJWaWRlbyBUZW1wb3JhbCBEZWNpbWF0aW9uIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURTogCQlyZXR1cm4gIlZpZGVvIE11dGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVVRFX1lVVjoJcmV0dXJuICJWaWRlbyBNdXRlIFlVViI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOiAJcmV0dXJuICJTdHJlYW0gVHlwZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UOiAJcmV0dXJuICJTdHJlYW0gUE1UIFByb2dyYW0gSUQiOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX0FVRElPOiAJcmV0dXJuICJTdHJlYW0gQXVkaW8gUHJvZ3JhbSBJRCI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfVklERU86IAlyZXR1cm4gIlN0cmVhbSBWaWRlbyBQcm9ncmFtIElEIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1I6IAlyZXR1cm4gIlN0cmVhbSBQQ1IgUHJvZ3JhbSBJRCI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfQVVESU86IHJldHVybiAiU3RyZWFtIFBFUyBBdWRpbyBJRCI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfVklERU86IHJldHVybiAiU3RyZWFtIFBFUyBWaWRlbyBJRCI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UOglyZXR1cm4gIlN0cmVhbSBWQkkgRm9ybWF0IjsKKworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0wodjRsMl9jdHJsX2dldF9uYW1lKTsKKwogLyogRmlsbCBpbiBhIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqLwogaW50IHY0bDJfY3RybF9xdWVyeV9maWxsKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwsIHMzMiBtaW4sIHMzMiBtYXgsIHMzMiBzdGVwLCBzMzIgZGVmKQogewotCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqbmFtZSA9IHY0bDJfY3RybF9nZXRfbmFtZShxY3RybC0+aWQpOwogCiAJcWN0cmwtPmZsYWdzID0gMDsKLQlzd2l0Y2ggKHFjdHJsLT5pZCkgewotCS8qIFVTRVIgY29udHJvbHMgKi8KLQljYXNlIFY0TDJfQ0lEX1VTRVJfQ0xBU1M6IAluYW1lID0gIlVzZXIgQ29udHJvbHMiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRTogCW5hbWUgPSAiVm9sdW1lIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiAJbmFtZSA9ICJNdXRlIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOiAJbmFtZSA9ICJCYWxhbmNlIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOiAJbmFtZSA9ICJCYXNzIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6IAluYW1lID0gIlRyZWJsZSI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6IAluYW1lID0gIkxvdWRuZXNzIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOiAJbmFtZSA9ICJCcmlnaHRuZXNzIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDogCW5hbWUgPSAiQ29udHJhc3QiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046IAluYW1lID0gIlNhdHVyYXRpb24iOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX0hVRTogCQluYW1lID0gIkh1ZSI7IGJyZWFrOwotCi0JLyogTVBFRyBjb250cm9scyAqLwotCWNhc2UgVjRMMl9DSURfTVBFR19DTEFTUzogCQluYW1lID0gIk1QRUcgRW5jb2RlciBDb250cm9scyI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVROiBuYW1lID0gIkF1ZGlvIFNhbXBsaW5nIEZyZXF1ZW5jeSI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzogCW5hbWUgPSAiQXVkaW8gRW5jb2RpbmcgTGF5ZXIiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURTogCW5hbWUgPSAiQXVkaW8gTGF5ZXIgSSBCaXRyYXRlIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEU6IAluYW1lID0gIkF1ZGlvIExheWVyIElJIEJpdHJhdGUiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDNfQklUUkFURTogCW5hbWUgPSAiQXVkaW8gTGF5ZXIgSUlJIEJpdHJhdGUiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERTogCQluYW1lID0gIkF1ZGlvIFN0ZXJlbyBNb2RlIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OOiBuYW1lID0gIkF1ZGlvIFN0ZXJlbyBNb2RlIEV4dGVuc2lvbiI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTVBIQVNJUzogCW5hbWUgPSAiQXVkaW8gRW1waGFzaXMiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDOiAJCW5hbWUgPSAiQXVkaW8gQ1JDIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01VVEU6IAkJbmFtZSA9ICJBdWRpbyBNdXRlIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HOiAJbmFtZSA9ICJWaWRlbyBFbmNvZGluZyI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6IAluYW1lID0gIlZpZGVvIEFzcGVjdCI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUzogCW5hbWUgPSAiVmlkZW8gQiBGcmFtZXMiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX1NJWkU6IAluYW1lID0gIlZpZGVvIEdPUCBTaXplIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFOiAJbmFtZSA9ICJWaWRlbyBHT1AgQ2xvc3VyZSI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19QVUxMRE9XTjogCW5hbWUgPSAiVmlkZW8gUHVsbGRvd24iOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOiAJbmFtZSA9ICJWaWRlbyBCaXRyYXRlIE1vZGUiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURTogCW5hbWUgPSAiVmlkZW8gQml0cmF0ZSI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6IAluYW1lID0gIlZpZGVvIFBlYWsgQml0cmF0ZSI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19URU1QT1JBTF9ERUNJTUFUSU9OOiBuYW1lID0gIlZpZGVvIFRlbXBvcmFsIERlY2ltYXRpb24iOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURTogCQluYW1lID0gIlZpZGVvIE11dGUiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURV9ZVVY6CW5hbWUgPSAiVmlkZW8gTXV0ZSBZVVYiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6IAluYW1lID0gIlN0cmVhbSBUeXBlIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UOiAJbmFtZSA9ICJTdHJlYW0gUE1UIFByb2dyYW0gSUQiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9BVURJTzogCW5hbWUgPSAiU3RyZWFtIEF1ZGlvIFByb2dyYW0gSUQiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9WSURFTzogCW5hbWUgPSAiU3RyZWFtIFZpZGVvIFByb2dyYW0gSUQiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1I6IAluYW1lID0gIlN0cmVhbSBQQ1IgUHJvZ3JhbSBJRCI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUEVTX0lEX0FVRElPOiBuYW1lID0gIlN0cmVhbSBQRVMgQXVkaW8gSUQiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9WSURFTzogbmFtZSA9ICJTdHJlYW0gUEVTIFZpZGVvIElEIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UOgluYW1lID0gIlN0cmVhbSBWQkkgRm9ybWF0IjsgYnJlYWs7Ci0KLQlkZWZhdWx0OgorCWlmIChuYW1lID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKwogCXN3aXRjaCAocWN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6CkBAIC00MDcsNiArNDQxLDcgQEAKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURToKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDNfQklUUkFURToKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OOgogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTVBIQVNJUzoKQEAgLTQ5Myw3ICs1MjgsNyBAQAogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKIAkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAogCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8xLAotCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8zLCAxLAorCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMsIDEsCiAJCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIpOwogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFOgogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCkBAIC01MTAsNiArNTQ1LDEzIEBACiAJCQkJVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMzJLLAogCQkJCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMyMEssIDEsCiAJCQkJVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTkySyk7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FBQ19CSVRSQVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDY0MDAsIDEsIDMyMDAwMDApOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zMkssCisJCQkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzY0MEssIDEsCisJCQkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEspOwogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFOgogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCiAJCQkJVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPLApAQCAtNTM1LDcgKzU3Nyw3IEBACiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HOgogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCiAJCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMSwKLQkJCQlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18yLCAxLAorCQkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDLCAxLAogCQkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzIpOwogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6CiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKQEAgLTU5NCwxMiArNjM2LDE3IEBACiBFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZCk7CiAKIC8qIEZpbGwgaW4gYSBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgYmFzZWQgb24gdGhlIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBhbmQKLSAgIHRoZSBtZW51LiBUaGUgcWN0cmwgcG9pbnRlciBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBpZ25vcmVkLiAqLworICAgdGhlIG1lbnUuIFRoZSBxY3RybCBwb2ludGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIGl0IGlzIGlnbm9yZWQuCisgICBJZiBtZW51X2l0ZW1zIGlzIE5VTEwsIHRoZW4gdGhlIG1lbnUgaXRlbXMgYXJlIHJldHJpZXZlZCB1c2luZworICAgdjRsMl9jdHJsX2dldF9tZW51LiAqLwogaW50IHY0bDJfY3RybF9xdWVyeV9tZW51KHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwsCiAJICAgICAgIGNvbnN0IGNoYXIgKiptZW51X2l0ZW1zKQogewogCWludCBpOwogCisJcW1lbnUtPnJlc2VydmVkID0gMDsKKwlpZiAobWVudV9pdGVtcyA9PSBOVUxMKQorCQltZW51X2l0ZW1zID0gdjRsMl9jdHJsX2dldF9tZW51KHFtZW51LT5pZCk7CiAJaWYgKG1lbnVfaXRlbXMgPT0gTlVMTCB8fAogCSAgICAocWN0cmwgJiYgKHFtZW51LT5pbmRleCA8IHFjdHJsLT5taW5pbXVtIHx8IHFtZW51LT5pbmRleCA+IHFjdHJsLT5tYXhpbXVtKSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjA3LDExICs2NTQsMzEgQEAKIAlpZiAobWVudV9pdGVtc1tpXSA9PSBOVUxMIHx8IG1lbnVfaXRlbXNbaV1bMF0gPT0gJ1wwJykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJc25wcmludGYocW1lbnUtPm5hbWUsIHNpemVvZihxbWVudS0+bmFtZSksIG1lbnVfaXRlbXNbcW1lbnUtPmluZGV4XSk7Ci0JcW1lbnUtPnJlc2VydmVkID0gMDsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX3F1ZXJ5X21lbnUpOwogCisvKiBGaWxsIGluIGEgc3RydWN0IHY0bDJfcXVlcnltZW51IGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgYXJyYXkgb2YgdmFsaWQKKyAgIG1lbnUgaXRlbXMgKHRlcm1pbmF0ZWQgYnkgVjRMMl9DVFJMX01FTlVfSURTX0VORCkuCisgICBVc2UgdGhpcyBpZiB0aGVyZSBhcmUgJ2hvbGVzJyBpbiB0aGUgbGlzdCBvZiB2YWxpZCBtZW51IGl0ZW1zLiAqLworaW50IHY0bDJfY3RybF9xdWVyeV9tZW51X3ZhbGlkX2l0ZW1zKHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUsIGNvbnN0IHUzMiAqaWRzKQoreworCWNvbnN0IGNoYXIgKiptZW51X2l0ZW1zID0gdjRsMl9jdHJsX2dldF9tZW51KHFtZW51LT5pZCk7CisKKwlxbWVudS0+cmVzZXJ2ZWQgPSAwOworCWlmIChtZW51X2l0ZW1zID09IE5VTEwgfHwgaWRzID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCXdoaWxlICgqaWRzICE9IFY0TDJfQ1RSTF9NRU5VX0lEU19FTkQpIHsKKwkJaWYgKCppZHMrKyA9PSBxbWVudS0+aW5kZXgpIHsKKwkJCXNucHJpbnRmKHFtZW51LT5uYW1lLCBzaXplb2YocW1lbnUtPm5hbWUpLAorCQkJCSAgICAgICBtZW51X2l0ZW1zW3FtZW51LT5pbmRleF0pOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9xdWVyeV9tZW51X3ZhbGlkX2l0ZW1zKTsKKwogLyogY3RybF9jbGFzc2VzIHBvaW50cyB0byBhbiBhcnJheSBvZiB1MzIgcG9pbnRlcnMsIHRoZSBsYXN0IGVsZW1lbnQgaXMKICAgIGEgTlVMTCBwb2ludGVyLiBFYWNoIHUzMiBhcnJheSBpcyBhIDAtdGVybWluYXRlZCBhcnJheSBvZiBjb250cm9sIElEcy4KICAgIEVhY2ggYXJyYXkgbXVzdCBiZSBzb3J0ZWQgbG93IHRvIGhpZ2ggYW5kIGJlbG9uZyB0byB0aGUgc2FtZSBjb250cm9sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKaW5kZXggMTU1ZmRlYy4uY2NkNjU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYwpAQCAtNDIsNiArNDIsNyBAQAogCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBkZXYpOworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIHZmZC0+aW5kZXgpOwogfQogCkBAIC00OSw2ICs1MCw3IEBACiAJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQgPSBjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsIGRldik7CisKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlLipzXG4iLCAoaW50KXNpemVvZih2ZmQtPm5hbWUpLCB2ZmQtPm5hbWUpOwogfQogCkBAIC01OCwxMiArNjAsMTYgQEAKIAlfX0FUVFJfTlVMTAogfTsKIAorLyoKKyAqCUFjdGl2ZSBkZXZpY2VzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXZpY2VbVklERU9fTlVNX0RFVklDRVNdOworc3RhdGljIERFRklORV9NVVRFWCh2aWRlb2Rldl9sb2NrKTsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUCh2aWRlb19udW1zW1ZGTF9UWVBFX01BWF0sIFZJREVPX05VTV9ERVZJQ0VTKTsKKwogc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2aWNlX2FsbG9jKHZvaWQpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmZkOwotCi0JdmZkID0ga3phbGxvYyhzaXplb2YoKnZmZCksIEdGUF9LRVJORUwpOwotCXJldHVybiB2ZmQ7CisJcmV0dXJuIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aWRlb19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIH0KIEVYUE9SVF9TWU1CT0wodmlkZW9fZGV2aWNlX2FsbG9jKTsKIApAQCAtNzMsMTYgKzc5LDUyIEBACiB9CiBFWFBPUlRfU1lNQk9MKHZpZGVvX2RldmljZV9yZWxlYXNlKTsKIAordm9pZCB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQpCit7CisJLyogRG8gbm90aGluZyAqLworCS8qIE9ubHkgdmFsaWQgd2hlbiB0aGUgdmlkZW9fZGV2aWNlIHN0cnVjdCBpcyBhIHN0YXRpYy4gKi8KK30KK0VYUE9SVF9TWU1CT0wodmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHkpOworCisvKiBDYWxsZWQgd2hlbiB0aGUgbGFzdCB1c2VyIG9mIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGlzIGdvbmUuICovCitzdGF0aWMgdm9pZCB2NGwyX2NoYXJkZXZfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHZpZGVvX2RldmljZSwgY2Rldi5rb2JqKTsKKworCW11dGV4X2xvY2soJnZpZGVvZGV2X2xvY2spOworCWlmICh2aWRlb19kZXZpY2VbdmZkLT5taW5vcl0gIT0gdmZkKSB7CisJCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CisJCUJVRygpOworCQlyZXR1cm47CisJfQorCisJLyogRnJlZSB1cCB0aGlzIGRldmljZSBmb3IgcmV1c2UgKi8KKwl2aWRlb19kZXZpY2VbdmZkLT5taW5vcl0gPSBOVUxMOworCWNsZWFyX2JpdCh2ZmQtPm51bSwgdmlkZW9fbnVtc1t2ZmQtPnZmbF90eXBlXSk7CisJbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKKworCS8qIFJlbGVhc2UgdGhlIGNoYXJhY3RlciBkZXZpY2UgKi8KKwl2ZmQtPmNkZXZfcmVsZWFzZShrb2JqKTsKKwkvKiBSZWxlYXNlIHZpZGVvX2RldmljZSBhbmQgcGVyZm9ybSBvdGhlcgorCSAgIGNsZWFudXBzIGFzIG5lZWRlZC4gKi8KKwlpZiAodmZkLT5yZWxlYXNlKQorCQl2ZmQtPnJlbGVhc2UodmZkKTsKK30KKworLyogVGhlIG5ldyBrb2JqX3R5cGUgZm9yIHRoZSBjaGFyYWN0ZXIgZGV2aWNlICovCitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSB2NGwyX2t0eXBlX2NkZXZfZGVmYXVsdCA9IHsKKwkucmVsZWFzZSA9IHY0bDJfY2hhcmRldl9yZWxlYXNlLAorfTsKKwogc3RhdGljIHZvaWQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpjZCkKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQgPSBjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsIGRldik7CiAKLSNpZiAxCi0JLyogbmVlZGVkIHVudGlsIGFsbCBkcml2ZXJzIGFyZSBmaXhlZCAqLwotCWlmICghdmZkLT5yZWxlYXNlKQotCQlyZXR1cm47Ci0jZW5kaWYKLQl2ZmQtPnJlbGVhc2UodmZkKTsKKwkvKiBJdCdzIG5vdyBzYWZlIHRvIGRlbGV0ZSB0aGUgY2hhciBkZXZpY2UuCisJICAgVGhpcyB3aWxsIGVpdGhlciB0cmlnZ2VyIHRoZSB2NGwyX2NoYXJkZXZfcmVsZWFzZSBpbW1lZGlhdGVseSAoaWYKKwkgICB0aGUgcmVmY291bnQgZ29lcyB0byAwKSBvciBsYXRlciB3aGVuIHRoZSBsYXN0IHVzZXIgb2YgdGhlCisJICAgY2hhcmFjdGVyIGRldmljZSBjbG9zZXMgaXQuICovCisJY2Rldl9kZWwoJnZmZC0+Y2Rldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgdmlkZW9fY2xhc3MgPSB7CkBAIC05MSw4NyArMTMzLDEyIEBACiAJLmRldl9yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKIH07CiAKLS8qCi0gKglBY3RpdmUgZGV2aWNlcwotICovCi0KLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXZpY2VbVklERU9fTlVNX0RFVklDRVNdOwotc3RhdGljIERFRklORV9NVVRFWCh2aWRlb2Rldl9sb2NrKTsKLQogc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2ZGF0YShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlyZXR1cm4gdmlkZW9fZGV2aWNlW2ltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKV07CiB9CiBFWFBPUlRfU1lNQk9MKHZpZGVvX2RldmRhdGEpOwogCi0vKgotICoJT3BlbiBhIHZpZGVvIGRldmljZSAtIEZJWE1FOiBPYnNvbGV0ZWQKLSAqLwotc3RhdGljIGludCB2aWRlb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmZsOwotCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKm9sZF9mb3BzOwotCi0JaWYgKG1pbm9yID49IFZJREVPX05VTV9ERVZJQ0VTKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlsb2NrX2tlcm5lbCgpOwotCW11dGV4X2xvY2soJnZpZGVvZGV2X2xvY2spOwotCXZmbCA9IHZpZGVvX2RldmljZVttaW5vcl07Ci0JaWYgKHZmbCA9PSBOVUxMKSB7Ci0JCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7Ci0JCXJlcXVlc3RfbW9kdWxlKCJjaGFyLW1ham9yLSVkLSVkIiwgVklERU9fTUFKT1IsIG1pbm9yKTsKLQkJbXV0ZXhfbG9jaygmdmlkZW9kZXZfbG9jayk7Ci0JCXZmbCA9IHZpZGVvX2RldmljZVttaW5vcl07Ci0JCWlmICh2ZmwgPT0gTlVMTCkgewotCQkJbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKLQkJCXVubG9ja19rZXJuZWwoKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JfQotCW9sZF9mb3BzID0gZmlsZS0+Zl9vcDsKLQlmaWxlLT5mX29wID0gZm9wc19nZXQodmZsLT5mb3BzKTsKLQlpZiAoZmlsZS0+Zl9vcC0+b3BlbikKLQkJZXJyID0gZmlsZS0+Zl9vcC0+b3Blbihpbm9kZSwgZmlsZSk7Ci0JaWYgKGVycikgewotCQlmb3BzX3B1dChmaWxlLT5mX29wKTsKLQkJZmlsZS0+Zl9vcCA9IGZvcHNfZ2V0KG9sZF9mb3BzKTsKLQl9Ci0JZm9wc19wdXQob2xkX2ZvcHMpOwotCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0gKiBvcGVuL3JlbGVhc2UgaGVscGVyIGZ1bmN0aW9ucyAtLSBoYW5kbGUgZXhjbHVzaXZlIG9wZW5zCi0gKiBTaG91bGQgYmUgcmVtb3ZlZCBzb29uCi0gKi8KLWludCB2aWRlb19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmwgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCWludCByZXR2YWwgPSAwOwotCi0JbXV0ZXhfbG9jaygmdmZsLT5sb2NrKTsKLQlpZiAodmZsLT51c2VycykKLQkJcmV0dmFsID0gLUVCVVNZOwotCWVsc2UKLQkJdmZsLT51c2VycysrOwotCW11dGV4X3VubG9jaygmdmZsLT5sb2NrKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotRVhQT1JUX1NZTUJPTCh2aWRlb19leGNsdXNpdmVfb3Blbik7Ci0KLWludCB2aWRlb19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmwgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCi0JdmZsLT51c2Vycy0tOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTCh2aWRlb19leGNsdXNpdmVfcmVsZWFzZSk7Ci0KIC8qKgogICogZ2V0X2luZGV4IC0gYXNzaWduIHN0cmVhbSBudW1iZXIgYmFzZWQgb24gcGFyZW50IGRldmljZQogICogQHZkZXY6IHZpZGVvX2RldmljZSB0byBhc3NpZ24gaW5kZXggbnVtYmVyIHRvLCB2ZGV2LT5kZXYgc2hvdWxkIGJlIGFzc2lnbmVkCkBAIC0yNTIsMzMgKzIxOSwyOSBAQAogCQkJCQlpbnQgaW5kZXgpCiB7CiAJaW50IGkgPSAwOwotCWludCBiYXNlOwotCWludCBlbmQ7CiAJaW50IHJldDsKLQljaGFyICpuYW1lX2Jhc2U7CisJaW50IG1pbm9yX29mZnNldCA9IDA7CisJaW50IG1pbm9yX2NudCA9IFZJREVPX05VTV9ERVZJQ0VTOworCWNvbnN0IGNoYXIgKm5hbWVfYmFzZTsKKwl2b2lkICpwcml2ID0gdmlkZW9fZ2V0X2RydmRhdGEodmZkKTsKKworCS8qIHRoZSByZWxlYXNlIGNhbGxiYWNrIE1VU1QgYmUgcHJlc2VudCAqLworCUJVR19PTighdmZkLT5yZWxlYXNlKTsKIAogCWlmICh2ZmQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFZGTF9UWVBFX0dSQUJCRVI6Ci0JCWJhc2UgPSBNSU5PUl9WRkxfVFlQRV9HUkFCQkVSX01JTjsKLQkJZW5kID0gTUlOT1JfVkZMX1RZUEVfR1JBQkJFUl9NQVgrMTsKIAkJbmFtZV9iYXNlID0gInZpZGVvIjsKIAkJYnJlYWs7CiAJY2FzZSBWRkxfVFlQRV9WVFg6Ci0JCWJhc2UgPSBNSU5PUl9WRkxfVFlQRV9WVFhfTUlOOwotCQllbmQgPSBNSU5PUl9WRkxfVFlQRV9WVFhfTUFYKzE7CiAJCW5hbWVfYmFzZSA9ICJ2dHgiOwogCQlicmVhazsKIAljYXNlIFZGTF9UWVBFX1ZCSToKLQkJYmFzZSA9IE1JTk9SX1ZGTF9UWVBFX1ZCSV9NSU47Ci0JCWVuZCA9IE1JTk9SX1ZGTF9UWVBFX1ZCSV9NQVgrMTsKIAkJbmFtZV9iYXNlID0gInZiaSI7CiAJCWJyZWFrOwogCWNhc2UgVkZMX1RZUEVfUkFESU86Ci0JCWJhc2UgPSBNSU5PUl9WRkxfVFlQRV9SQURJT19NSU47Ci0JCWVuZCA9IE1JTk9SX1ZGTF9UWVBFX1JBRElPX01BWCsxOwogCQluYW1lX2Jhc2UgPSAicmFkaW8iOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjg3LDI4ICsyNTAsNzAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJdmZkLT52ZmxfdHlwZSA9IHR5cGU7CisKKyNpZmRlZiBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTCisJLyogS2VlcCB0aGUgcmFuZ2VzIGZvciB0aGUgZmlyc3QgZm91ciB0eXBlcyBmb3IgaGlzdG9yaWNhbAorCSAqIHJlYXNvbnMuCisJICogTmV3ZXIgZGV2aWNlcyAobm90IHlldCBpbiBwbGFjZSkgc2hvdWxkIHVzZSB0aGUgcmFuZ2UKKwkgKiBvZiAxMjgtMTkxIGFuZCBqdXN0IHBpY2sgdGhlIGZpcnN0IGZyZWUgbWlub3IgdGhlcmUKKwkgKiAobmV3IHN0eWxlKS4gKi8KKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFZGTF9UWVBFX0dSQUJCRVI6CisJCW1pbm9yX29mZnNldCA9IDA7CisJCW1pbm9yX2NudCA9IDY0OworCQlicmVhazsKKwljYXNlIFZGTF9UWVBFX1JBRElPOgorCQltaW5vcl9vZmZzZXQgPSA2NDsKKwkJbWlub3JfY250ID0gNjQ7CisJCWJyZWFrOworCWNhc2UgVkZMX1RZUEVfVlRYOgorCQltaW5vcl9vZmZzZXQgPSAxOTI7CisJCW1pbm9yX2NudCA9IDMyOworCQlicmVhazsKKwljYXNlIFZGTF9UWVBFX1ZCSToKKwkJbWlub3Jfb2Zmc2V0ID0gMjI0OworCQltaW5vcl9jbnQgPSAzMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbWlub3Jfb2Zmc2V0ID0gMTI4OworCQltaW5vcl9jbnQgPSA2NDsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisKKwkvKiBJbml0aWFsaXplIHRoZSBjaGFyYWN0ZXIgZGV2aWNlICovCisJY2Rldl9pbml0KCZ2ZmQtPmNkZXYsIHZmZC0+Zm9wcyk7CisJdmZkLT5jZGV2Lm93bmVyID0gdmZkLT5mb3BzLT5vd25lcjsKIAkvKiBwaWNrIGEgbWlub3IgbnVtYmVyICovCiAJbXV0ZXhfbG9jaygmdmlkZW9kZXZfbG9jayk7Ci0JaWYgKG5yID49IDAgICYmICBuciA8IGVuZC1iYXNlKSB7Ci0JCS8qIHVzZSB0aGUgb25lIHRoZSBkcml2ZXIgYXNrZWQgZm9yICovCi0JCWkgPSBiYXNlICsgbnI7Ci0JCWlmIChOVUxMICE9IHZpZGVvX2RldmljZVtpXSkgewotCQkJbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKLQkJCXJldHVybiAtRU5GSUxFOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogdXNlIGZpcnN0IGZyZWUgKi8KLQkJZm9yIChpID0gYmFzZTsgaSA8IGVuZDsgaSsrKQotCQkJaWYgKE5VTEwgPT0gdmlkZW9fZGV2aWNlW2ldKQotCQkJCWJyZWFrOwotCQlpZiAoaSA9PSBlbmQpIHsKLQkJCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7Ci0JCQlyZXR1cm4gLUVORklMRTsKLQkJfQorCW5yID0gZmluZF9uZXh0X3plcm9fYml0KHZpZGVvX251bXNbdHlwZV0sIG1pbm9yX2NudCwgbnIgPT0gLTEgPyAwIDogbnIpOworCWlmIChuciA9PSBtaW5vcl9jbnQpCisJCW5yID0gZmluZF9maXJzdF96ZXJvX2JpdCh2aWRlb19udW1zW3R5cGVdLCBtaW5vcl9jbnQpOworCWlmIChuciA9PSBtaW5vcl9jbnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3QgZ2V0IGEgZnJlZSBrZXJuZWwgbnVtYmVyXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKKwkJcmV0dXJuIC1FTkZJTEU7CiAJfQotCXZpZGVvX2RldmljZVtpXSA9IHZmZDsKLQl2ZmQtPnZmbF90eXBlID0gdHlwZTsKLQl2ZmQtPm1pbm9yID0gaTsKKyNpZmRlZiBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTCisJLyogMS1vbi0xIG1hcHBpbmcgb2Yga2VybmVsIG51bWJlciB0byBtaW5vciBudW1iZXIgKi8KKwlpID0gbnI7CisjZWxzZQorCS8qIFRoZSBrZXJuZWwgbnVtYmVyIGFuZCBtaW5vciBudW1iZXJzIGFyZSBpbmRlcGVuZGVudCAqLworCWZvciAoaSA9IDA7IGkgPCBWSURFT19OVU1fREVWSUNFUzsgaSsrKQorCQlpZiAodmlkZW9fZGV2aWNlW2ldID09IE5VTEwpCisJCQlicmVhazsKKwlpZiAoaSA9PSBWSURFT19OVU1fREVWSUNFUykgeworCQltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOworCQlwcmludGsoS0VSTl9FUlIgImNvdWxkIG5vdCBnZXQgYSBmcmVlIG1pbm9yXG4iKTsKKwkJcmV0dXJuIC1FTkZJTEU7CisJfQorI2VuZGlmCisJdmZkLT5taW5vciA9IGkgKyBtaW5vcl9vZmZzZXQ7CisJdmZkLT5udW0gPSBucjsKKwlzZXRfYml0KG5yLCB2aWRlb19udW1zW3R5cGVdKTsKKwlCVUdfT04odmlkZW9fZGV2aWNlW3ZmZC0+bWlub3JdKTsKKwl2aWRlb19kZXZpY2VbdmZkLT5taW5vcl0gPSB2ZmQ7CiAKIAlyZXQgPSBnZXRfaW5kZXgodmZkLCBpbmRleCk7CiAJdmZkLT5pbmRleCA9IHJldDsKQEAgLTMyMCwzNSArMzI1LDQxIEBACiAJCWdvdG8gZmFpbF9taW5vcjsKIAl9CiAKLQltdXRleF9pbml0KCZ2ZmQtPmxvY2spOwotCisJcmV0ID0gY2Rldl9hZGQoJnZmZC0+Y2RldiwgTUtERVYoVklERU9fTUFKT1IsIHZmZC0+bWlub3IpLCAxKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjZGV2X2FkZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBmYWlsX21pbm9yOworCX0KIAkvKiBzeXNmcyBjbGFzcyAqLwotCW1lbXNldCgmdmZkLT5kZXYsIDB4MDAsIHNpemVvZih2ZmQtPmRldikpOworCW1lbXNldCgmdmZkLT5kZXYsIDAsIHNpemVvZih2ZmQtPmRldikpOworCS8qIFRoZSBtZW1zZXQgYWJvdmUgY2xlYXJlZCB0aGUgZGV2aWNlJ3MgZHJ2ZGF0YSwgc28KKwkgICBwdXQgYmFjayB0aGUgY29weSB3ZSBtYWRlIGVhcmxpZXIuICovCisJdmlkZW9fc2V0X2RydmRhdGEodmZkLCBwcml2KTsKIAl2ZmQtPmRldi5jbGFzcyA9ICZ2aWRlb19jbGFzczsKIAl2ZmQtPmRldi5kZXZ0ID0gTUtERVYoVklERU9fTUFKT1IsIHZmZC0+bWlub3IpOwogCWlmICh2ZmQtPnBhcmVudCkKIAkJdmZkLT5kZXYucGFyZW50ID0gdmZkLT5wYXJlbnQ7Ci0Jc3ByaW50Zih2ZmQtPmRldi5idXNfaWQsICIlcyVkIiwgbmFtZV9iYXNlLCBpIC0gYmFzZSk7CisJc3ByaW50Zih2ZmQtPmRldi5idXNfaWQsICIlcyVkIiwgbmFtZV9iYXNlLCBucik7CiAJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZ2ZmQtPmRldik7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlnb3RvIGZhaWxfbWlub3I7CisJCWdvdG8gZGVsX2NkZXY7CiAJfQotCi0jaWYgMQotCS8qIG5lZWRlZCB1bnRpbCBhbGwgZHJpdmVycyBhcmUgZml4ZWQgKi8KLQlpZiAoIXZmZC0+cmVsZWFzZSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidmlkZW9kZXY6IFwiJXNcIiBoYXMgbm8gcmVsZWFzZSBjYWxsYmFjay4gIgotCQkgICAgICAgIlBsZWFzZSBmaXggeW91ciBkcml2ZXIgZm9yIHByb3BlciBzeXNmcyBzdXBwb3J0LCBzZWUgIgotCQkgICAgICAgImh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzM2ODUwL1xuIiwgdmZkLT5uYW1lKTsKLSNlbmRpZgorCS8qIFJlbWVtYmVyIHRoZSBjZGV2J3MgcmVsZWFzZSBmdW5jdGlvbiAqLworCXZmZC0+Y2Rldl9yZWxlYXNlID0gdmZkLT5jZGV2LmtvYmoua3R5cGUtPnJlbGVhc2U7CisJLyogSW5zdGFsbCBvdXIgb3duICovCisJdmZkLT5jZGV2LmtvYmoua3R5cGUgPSAmdjRsMl9rdHlwZV9jZGV2X2RlZmF1bHQ7CiAJcmV0dXJuIDA7CiAKK2RlbF9jZGV2OgorCWNkZXZfZGVsKCZ2ZmQtPmNkZXYpOworCiBmYWlsX21pbm9yOgogCW11dGV4X2xvY2soJnZpZGVvZGV2X2xvY2spOwogCXZpZGVvX2RldmljZVt2ZmQtPm1pbm9yXSA9IE5VTEw7Ci0JdmZkLT5taW5vciA9IC0xOworCWNsZWFyX2JpdCh2ZmQtPm51bSwgdmlkZW9fbnVtc1t0eXBlXSk7CiAJbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKKwl2ZmQtPm1pbm9yID0gLTE7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wodmlkZW9fcmVnaXN0ZXJfZGV2aWNlX2luZGV4KTsKQEAgLTM2Myw0MiArMzc0LDI5IEBACiAKIHZvaWQgdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKQogewotCW11dGV4X2xvY2soJnZpZGVvZGV2X2xvY2spOwotCWlmICh2aWRlb19kZXZpY2VbdmZkLT5taW5vcl0gIT0gdmZkKQotCQlwYW5pYygidmlkZW9kZXY6IGJhZCB1bnJlZ2lzdGVyIik7Ci0KLQl2aWRlb19kZXZpY2VbdmZkLT5taW5vcl0gPSBOVUxMOwogCWRldmljZV91bnJlZ2lzdGVyKCZ2ZmQtPmRldik7Ci0JbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0wodmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UpOwogCiAvKgotICogVmlkZW8gZnMgb3BlcmF0aW9ucwotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubGxzZWVrCQk9IG5vX2xsc2VlaywKLQkub3BlbgkJPSB2aWRlb19vcGVuLAotfTsKLQotLyoKICAqCUluaXRpYWxpc2UgdmlkZW8gZm9yIGxpbnV4CiAgKi8KLQogc3RhdGljIGludCBfX2luaXQgdmlkZW9kZXZfaW5pdCh2b2lkKQogeworCWRldl90IGRldiA9IE1LREVWKFZJREVPX01BSk9SLCAwKTsKIAlpbnQgcmV0OwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTGludXggdmlkZW8gY2FwdHVyZSBpbnRlcmZhY2U6IHYyLjAwXG4iKTsKLQlpZiAocmVnaXN0ZXJfY2hyZGV2KFZJREVPX01BSk9SLCBWSURFT19OQU1FLCAmdmlkZW9fZm9wcykpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidmlkZW9fZGV2OiB1bmFibGUgdG8gZ2V0IG1ham9yICVkXG4iLCBWSURFT19NQUpPUik7Ci0JCXJldHVybiAtRUlPOworCXJldCA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBWSURFT19OVU1fREVWSUNFUywgVklERU9fTkFNRSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidmlkZW9kZXY6IHVuYWJsZSB0byBnZXQgbWFqb3IgJWRcbiIsCisJCQkJVklERU9fTUFKT1IpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IGNsYXNzX3JlZ2lzdGVyKCZ2aWRlb19jbGFzcyk7CiAJaWYgKHJldCA8IDApIHsKLQkJdW5yZWdpc3Rlcl9jaHJkZXYoVklERU9fTUFKT1IsIFZJREVPX05BTUUpOworCQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBWSURFT19OVU1fREVWSUNFUyk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInZpZGVvX2RldjogY2xhc3NfcmVnaXN0ZXIgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtNDA4LDggKzQwNiwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdmlkZW9kZXZfZXhpdCh2b2lkKQogeworCWRldl90IGRldiA9IE1LREVWKFZJREVPX01BSk9SLCAwKTsKKwogCWNsYXNzX3VucmVnaXN0ZXIoJnZpZGVvX2NsYXNzKTsKLQl1bnJlZ2lzdGVyX2NocmRldihWSURFT19NQUpPUiwgVklERU9fTkFNRSk7CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgVklERU9fTlVNX0RFVklDRVMpOwogfQogCiBtb2R1bGVfaW5pdCh2aWRlb2Rldl9pbml0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYwppbmRleCAxNDBlZjkyLi4xNTVjOWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYwpAQCAtNzQ2LDE4ICs3NDYsNiBAQAogCQkJCXJldCA9IG9wcy0+dmlkaW9jX2VudW1fZm10X3ZpZF9vdmVybGF5KGZpbGUsCiAJCQkJCWZoLCBmKTsKIAkJCWJyZWFrOwotI2lmIDEKLQkJLyogVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSBzaG91bGQgbm90IHN1cHBvcnQgVklESU9DX0VOVU1fRk1UCi0JCSAqIGFjY29yZGluZyB0byB0aGUgc3BlYy4gVGhlIGJ0dHYgYW5kIHNhYTcxMzQgZHJpdmVycyBzdXBwb3J0Ci0JCSAqIGl0IHRob3VnaCwgc28ganVzdCB3YXJuIHRoYXQgdGhpcyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlCi0JCSAqIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlLiAqLwotCQljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6Ci0JCQlpZiAob3BzLT52aWRpb2NfZW51bV9mbXRfdmJpX2NhcCkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInZpZGlvY19lbnVtX2ZtdF92YmlfY2FwIHdpbGwgYmUgcmVtb3ZlZCBpbiAyLjYuMjghXG4iKTsKLQkJCQlyZXQgPSBvcHMtPnZpZGlvY19lbnVtX2ZtdF92YmlfY2FwKGZpbGUsIGZoLCBmKTsKLQkJCX0KLQkJCWJyZWFrOwotI2VuZGlmCiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6CiAJCQlpZiAob3BzLT52aWRpb2NfZW51bV9mbXRfdmlkX291dCkKIAkJCQlyZXQgPSBvcHMtPnZpZGlvY19lbnVtX2ZtdF92aWRfb3V0KGZpbGUsIGZoLCBmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWR2Yi5jCmluZGV4IGI1NmNmZmMuLjkxNzI3N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kdmIuYwpAQCAtMTI2LDcgKzEyNiw2IEBACiAJbXV0ZXhfbG9jaygmZHZiLT5sb2NrKTsKIAlkdmItPm5mZWVkcy0tOwogCWlmICgwID09IGR2Yi0+bmZlZWRzICAmJiAgTlVMTCAhPSBkdmItPnRocmVhZCkgewotCQkvLyBGSVhNRTogY3g4ODAyX2NhbmNlbF9idWZmZXJzKGRldik7CiAJCWVyciA9IGt0aHJlYWRfc3RvcChkdmItPnRocmVhZCk7CiAJCWR2Yi0+dGhyZWFkID0gTlVMTDsKIAl9CkBAIC0xMzQsMzAgKzEzMywzOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1pbnQgdmlkZW9idWZfZHZiX3JlZ2lzdGVyKHN0cnVjdCB2aWRlb2J1Zl9kdmIgKmR2YiwKK3N0YXRpYyBpbnQgdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmZlLAogCQkJICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsCiAJCQkgIHZvaWQgKmFkYXB0ZXJfcHJpdiwKIAkJCSAgc3RydWN0IGRldmljZSAqZGV2aWNlLAotCQkJICBzaG9ydCAqYWRhcHRlcl9ucikKKwkJCSAgY2hhciAqYWRhcHRlcl9uYW1lLAorCQkJICBzaG9ydCAqYWRhcHRlcl9uciwKKwkJCSAgaW50IG1mZV9zaGFyZWQpCiB7CiAJaW50IHJlc3VsdDsKIAotCW11dGV4X2luaXQoJmR2Yi0+bG9jayk7CisJbXV0ZXhfaW5pdCgmZmUtPmxvY2spOwogCiAJLyogcmVnaXN0ZXIgYWRhcHRlciAqLwotCXJlc3VsdCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZkdmItPmFkYXB0ZXIsIGR2Yi0+bmFtZSwgbW9kdWxlLCBkZXZpY2UsCi0JCQkJICAgICAgYWRhcHRlcl9ucik7CisJcmVzdWx0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmZlLT5hZGFwdGVyLCBhZGFwdGVyX25hbWUsIG1vZHVsZSwKKwkJZGV2aWNlLCBhZGFwdGVyX25yKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHZiX3JlZ2lzdGVyX2FkYXB0ZXIgZmFpbGVkIChlcnJubyA9ICVkKVxuIiwKLQkJICAgICAgIGR2Yi0+bmFtZSwgcmVzdWx0KTsKLQkJZ290byBmYWlsX2FkYXB0ZXI7CisJCSAgICAgICBhZGFwdGVyX25hbWUsIHJlc3VsdCk7CiAJfQotCWR2Yi0+YWRhcHRlci5wcml2ID0gYWRhcHRlcl9wcml2OworCWZlLT5hZGFwdGVyLnByaXYgPSBhZGFwdGVyX3ByaXY7CisJZmUtPmFkYXB0ZXIubWZlX3NoYXJlZCA9IG1mZV9zaGFyZWQ7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9mcm9udGVuZChzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmFkYXB0ZXIsCisJc3RydWN0IHZpZGVvYnVmX2R2YiAqZHZiKQoreworCWludCByZXN1bHQ7CiAKIAkvKiByZWdpc3RlciBmcm9udGVuZCAqLwotCXJlc3VsdCA9IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmZHZiLT5hZGFwdGVyLCBkdmItPmZyb250ZW5kKTsKKwlyZXN1bHQgPSBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoYWRhcHRlciwgZHZiLT5mcm9udGVuZCk7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCBmYWlsZWQgKGVycm5vID0gJWQpXG4iLAogCQkgICAgICAgZHZiLT5uYW1lLCByZXN1bHQpOwpAQCAtMTgzLDcgKzE5MCw4IEBACiAJZHZiLT5kbXhkZXYuZmlsdGVybnVtICAgID0gMjU2OwogCWR2Yi0+ZG14ZGV2LmRlbXV4ICAgICAgICA9ICZkdmItPmRlbXV4LmRteDsKIAlkdmItPmRteGRldi5jYXBhYmlsaXRpZXMgPSAwOwotCXJlc3VsdCA9IGR2Yl9kbXhkZXZfaW5pdCgmZHZiLT5kbXhkZXYsICZkdmItPmFkYXB0ZXIpOworCXJlc3VsdCA9IGR2Yl9kbXhkZXZfaW5pdCgmZHZiLT5kbXhkZXYsIGFkYXB0ZXIpOworCiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGR2Yl9kbXhkZXZfaW5pdCBmYWlsZWQgKGVycm5vID0gJWQpXG4iLAogCQkgICAgICAgZHZiLT5uYW1lLCByZXN1bHQpOwpAQCAtMjE0LDcgKzIyMiwxMSBAQAogCX0KIAogCS8qIHJlZ2lzdGVyIG5ldHdvcmsgYWRhcHRlciAqLwotCWR2Yl9uZXRfaW5pdCgmZHZiLT5hZGFwdGVyLCAmZHZiLT5uZXQsICZkdmItPmRlbXV4LmRteCk7CisJZHZiX25ldF9pbml0KGFkYXB0ZXIsICZkdmItPm5ldCwgJmR2Yi0+ZGVtdXguZG14KTsKKwlpZiAoZHZiLT5uZXQuZHZiZGV2ID09IE5VTEwpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2ZlX2Nvbm47CisJfQogCXJldHVybiAwOwogCiBmYWlsX2ZlX2Nvbm46CkBAIC0yMjksMzAgKzI0MSwxNTEgQEAKIAlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChkdmItPmZyb250ZW5kKTsKIGZhaWxfZnJvbnRlbmQ6CiAJZHZiX2Zyb250ZW5kX2RldGFjaChkdmItPmZyb250ZW5kKTsKLQlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZkdmItPmFkYXB0ZXIpOwotZmFpbF9hZGFwdGVyOgorCWR2Yi0+ZnJvbnRlbmQgPSBOVUxMOworCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCB2aWRlb2J1Zl9kdmJfdW5yZWdpc3RlcihzdHJ1Y3QgdmlkZW9idWZfZHZiICpkdmIpCi17Ci0JZHZiX25ldF9yZWxlYXNlKCZkdmItPm5ldCk7Ci0JZHZiLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZkdmItPmRlbXV4LmRteCwgJmR2Yi0+ZmVfbWVtKTsKLQlkdmItPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmR2Yi0+ZGVtdXguZG14LCAmZHZiLT5mZV9odyk7Ci0JZHZiX2RteGRldl9yZWxlYXNlKCZkdmItPmRteGRldik7Ci0JZHZiX2RteF9yZWxlYXNlKCZkdmItPmRlbXV4KTsKLQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChkdmItPmZyb250ZW5kKTsKLQlkdmJfZnJvbnRlbmRfZGV0YWNoKGR2Yi0+ZnJvbnRlbmQpOwotCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmR2Yi0+YWRhcHRlcik7Ci19Ci0KLUVYUE9SVF9TWU1CT0wodmlkZW9idWZfZHZiX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wodmlkZW9idWZfZHZiX3VucmVnaXN0ZXIpOwotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogY29tcGlsZS1jb21tYW5kOiAibWFrZSBEVkI9MSIKLSAqIEVuZDoKLSAqLworLyogUmVnaXN0ZXIgYSBzaW5nbGUgYWRhcHRlciBhbmQgb25lIG9yIG1vcmUgZnJvbnRlbmRzICovCitpbnQgdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2J1cyhzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwKKwkJCSAgc3RydWN0IG1vZHVsZSAqbW9kdWxlLAorCQkJICB2b2lkICphZGFwdGVyX3ByaXYsCisJCQkgIHN0cnVjdCBkZXZpY2UgKmRldmljZSwKKwkJCSAgc2hvcnQgKmFkYXB0ZXJfbnIsCisJCQkgIGludCBtZmVfc2hhcmVkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsICpxOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlOworCWludCByZXM7CisKKwlmZSA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoZiwgMSk7CisJaWYgKCFmZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIGFkYXB0ZXIgd2hpY2ggaGFzIG5vIGZyb250ZW5kc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEJyaW5nIHVwIHRoZSBhZGFwdGVyICovCisJcmVzID0gdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoZiwgbW9kdWxlLCBhZGFwdGVyX3ByaXYsIGRldmljZSwKKwkJZmUtPmR2Yi5uYW1lLCBhZGFwdGVyX25yLCBtZmVfc2hhcmVkKTsKKwlpZiAocmVzIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYWRhcHRlciBmYWlsZWQgKGVycm5vID0gJWQpXG4iLCByZXMpOworCQlyZXR1cm4gcmVzOworCX0KKworCS8qIEF0dGFjaCBhbGwgb2YgdGhlIGZyb250ZW5kcyB0byB0aGUgYWRhcHRlciAqLworCW11dGV4X2xvY2soJmYtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCBxLCAmZi0+ZmVsaXN0KSB7CisJCWZlID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kLCBmZWxpc3QpOworCQlyZXMgPSB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfZnJvbnRlbmQoJmYtPmFkYXB0ZXIsICZmZS0+ZHZiKTsKKwkJaWYgKHJlcyA8IDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfZnJvbnRlbmQgZmFpbGVkIChlcnJubyA9ICVkKVxuIiwKKwkJCQlmZS0+ZHZiLm5hbWUsIHJlcyk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmYtPmxvY2spOworCXJldHVybiAwOworCitlcnI6CisJbXV0ZXhfdW5sb2NrKCZmLT5sb2NrKTsKKwl2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoZik7CisJcmV0dXJuIHJlczsKK30KK0VYUE9SVF9TWU1CT0wodmlkZW9idWZfZHZiX3JlZ2lzdGVyX2J1cyk7CisKK3ZvaWQgdmlkZW9idWZfZHZiX3VucmVnaXN0ZXJfYnVzKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsICpxOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlOworCisJbXV0ZXhfbG9jaygmZi0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3QsIHEsICZmLT5mZWxpc3QpIHsKKwkJZmUgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQsIGZlbGlzdCk7CisJCWlmIChmZS0+ZHZiLm5ldC5kdmJkZXYpIHsKKwkJCWR2Yl9uZXRfcmVsZWFzZSgmZmUtPmR2Yi5uZXQpOworCQkJZmUtPmR2Yi5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmZS0+ZHZiLmRlbXV4LmRteCwKKwkJCQkmZmUtPmR2Yi5mZV9tZW0pOworCQkJZmUtPmR2Yi5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmZS0+ZHZiLmRlbXV4LmRteCwKKwkJCQkmZmUtPmR2Yi5mZV9odyk7CisJCQlkdmJfZG14ZGV2X3JlbGVhc2UoJmZlLT5kdmIuZG14ZGV2KTsKKwkJCWR2Yl9kbXhfcmVsZWFzZSgmZmUtPmR2Yi5kZW11eCk7CisJCQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChmZS0+ZHZiLmZyb250ZW5kKTsKKwkJfQorCQlpZiAoZmUtPmR2Yi5mcm9udGVuZCkKKwkJCS8qIGFsd2F5cyBhbGxvY2F0ZWQsIG1heSBoYXZlIGJlZW4gcmVzZXQgKi8KKwkJCWR2Yl9mcm9udGVuZF9kZXRhY2goZmUtPmR2Yi5mcm9udGVuZCk7CisJCWxpc3RfZGVsKGxpc3QpOworCQlrZnJlZShmZSk7CisJfQorCW11dGV4X3VubG9jaygmZi0+bG9jayk7CisKKwlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZmLT5hZGFwdGVyKTsKK30KK0VYUE9SVF9TWU1CT0wodmlkZW9idWZfZHZiX3VucmVnaXN0ZXJfYnVzKTsKKworc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwgaW50IGlkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsICpxOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlLCAqcmV0ID0gTlVMTDsKKworCW11dGV4X2xvY2soJmYtPmxvY2spOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3QsIHEsICZmLT5mZWxpc3QpIHsKKwkJZmUgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQsIGZlbGlzdCk7CisJCWlmIChmZS0+aWQgPT0gaWQpIHsKKwkJCXJldCA9IGZlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJmYtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wodmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCk7CisKK2ludCB2aWRlb2J1Zl9kdmJfZmluZF9mcm9udGVuZChzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpwKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsICpxOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmYtPmxvY2spOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3QsIHEsICZmLT5mZWxpc3QpIHsKKwkJZmUgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQsIGZlbGlzdCk7CisJCWlmIChmZS0+ZHZiLmZyb250ZW5kID09IHApIHsKKwkJCXJldCA9IGZlLT5pZDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZmLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl9maW5kX2Zyb250ZW5kKTsKKworc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqdmlkZW9idWZfZHZiX2FsbG9jX2Zyb250ZW5kKAorCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmLCBpbnQgaWQpCit7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmU7CisKKwlmZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZmUgPT0gTlVMTCkKKwkJZ290byBmYWlsX2FsbG9jOworCisJZmUtPmlkID0gaWQ7CisJbXV0ZXhfaW5pdCgmZmUtPmR2Yi5sb2NrKTsKKworCW11dGV4X2xvY2soJmYtPmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmZlLT5mZWxpc3QsICZmLT5mZWxpc3QpOworCW11dGV4X3VubG9jaygmZi0+bG9jayk7CisKK2ZhaWxfYWxsb2M6CisJcmV0dXJuIGZlOworfQorRVhQT1JUX1NZTUJPTCh2aWRlb2J1Zl9kdmJfYWxsb2NfZnJvbnRlbmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYwppbmRleCAxZWRkYTQ1Li4xZWZjNWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYwpAQCAtMzAsMTYgKzMwLDEyIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotCi0jaWZkZWYgQ09ORklHX0tNT0QKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLXNnaS5oPgogCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KQEAgLTgxMCw3ICs4MDYsNyBAQAogCWRwcmludGsoInZpbm9fZnJlZV9idWZmZXJfd2l0aF9jb3VudCgpOiBjb3VudCA9ICVkXG4iLCBjb3VudCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoZmItPmRlc2NfdGFibGUudmlydHVhbFtpXSkpOworCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoKHZvaWQgKilmYi0+ZGVzY190YWJsZS52aXJ0dWFsW2ldKSk7CiAJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwKIAkJCQkgZmItPmRlc2NfdGFibGUuZG1hX2NwdVtWSU5PX1BBR0VfUkFUSU8gKiBpXSwKIAkJCQkgUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwpAQCAtODg4LDcgKzg4NCw3IEBACiAJCQkJZG1hX2RhdGFfYWRkciArIFZJTk9fUEFHRV9TSVpFICogajsKIAkJfQogCi0JCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoZmItPmRlc2NfdGFibGUudmlydHVhbFtpXSkpOworCQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKCh2b2lkICopZmItPmRlc2NfdGFibGUudmlydHVhbFtpXSkpOwogCX0KIAogCS8qIHBhZ2VfY291bnQgbmVlZHMgdG8gYmUgc2V0IGFueXdheSwgYmVjYXVzZSB0aGUgZGVzY3JpcHRvciB0YWJsZSBoYXMKQEAgLTk3NSw3ICs5NzEsNyBAQAogCQkJCWRtYV9kYXRhX2FkZHIgKyBWSU5PX1BBR0VfU0laRSAqIGo7CiAJCX0KIAotCQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGZiLT5kZXNjX3RhYmxlLnZpcnR1YWxbaV0pKTsKKwkJU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZSgodm9pZCAqKWZiLT5kZXNjX3RhYmxlLnZpcnR1YWxbaV0pKTsKIAl9CiAKIAkvKiBwYWdlX2NvdW50IG5lZWRzIHRvIGJlIHNldCBhbnl3YXksIGJlY2F1c2UgdGhlIGRlc2NyaXB0b3IgdGFibGUgaGFzCkBAIC00MDI1LDggKzQwMjEsNyBAQAogCiBzdGF0aWMgaW50IHZpbm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0ID0gMDsKIAlkcHJpbnRrKCJvcGVuKCk6IGNoYW5uZWwgPSAlY1xuIiwKIAkgICAgICAgKHZjcy0+Y2hhbm5lbCA9PSBWSU5PX0NIQU5ORUxfQSkgPyAnQScgOiAnQicpOwpAQCAtNDA1Nyw4ICs0MDUyLDcgQEAKIAogc3RhdGljIGludCB2aW5vX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWRwcmludGsoImNsb3NlKCk6XG4iKTsKIAogCW11dGV4X2xvY2soJnZjcy0+bXV0ZXgpOwpAQCAtNDEwMSw4ICs0MDk1LDcgQEAKIAogc3RhdGljIGludCB2aW5vX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OwpAQCAtNDIwNyw4ICs0MjAwLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCB2aW5vX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKnB0KQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGludCBvdXRnb2luZzsKIAl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKIApAQCAtNDI0OCw4ICs0MjQwLDcgQEAKIHN0YXRpYyBpbnQgdmlub19kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAjaWZkZWYgVklOT19ERUJVRwogCXN3aXRjaCAoX0lPQ19UWVBFKGNtZCkpIHsKQEAgLTQzNTYsOCArNDM0Nyw3IEBACiBzdGF0aWMgaW50IHZpbm9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXQ7CiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2Y3MtPm11dGV4KSkKQEAgLTQ2NDEsNyArNDYzMSw3IEBACiAJfQogCXZpbm9faW5pdF9zdGFnZSsrOwogCi0jaWYgZGVmaW5lZChDT05GSUdfS01PRCkgJiYgZGVmaW5lZChNT0RVTEUpCisjaWZkZWYgTU9EVUxFCiAJcmVxdWVzdF9tb2R1bGUoInNhYTcxOTEiKTsKIAlyZXF1ZXN0X21vZHVsZSgiaW5keWNhbSIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCmluZGV4IDhiYThkYWEuLjdkN2U1MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCkBAIC0xMjgsMTIgKzEyOCw1NiBAQAogCWludCAgIGRlcHRoOwogfTsKIAotc3RhdGljIHN0cnVjdCB2aXZpX2ZtdCBmb3JtYXQgPSB7Ci0JLm5hbWUgICAgID0gIjQ6MjoyLCBwYWNrZWQsIFlVWVYiLAotCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9ZVVlWLAotCS5kZXB0aCAgICA9IDE2LAorc3RhdGljIHN0cnVjdCB2aXZpX2ZtdCBmb3JtYXRzW10gPSB7CisJeworCQkubmFtZSAgICAgPSAiNDoyOjIsIHBhY2tlZCwgWVVZViIsCisJCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9ZVVlWLAorCQkuZGVwdGggICAgPSAxNiwKKwl9LAorCXsKKwkJLm5hbWUgICAgID0gIjQ6MjoyLCBwYWNrZWQsIFVZVlkiLAorCQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfVVlWWSwKKwkJLmRlcHRoICAgID0gMTYsCisJfSwKKwl7CisJCS5uYW1lICAgICA9ICJSR0I1NjUgKExFKSIsCisJCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9SR0I1NjUsIC8qIGdnZ2JiYmJiIHJycnJyZ2dnICovCisJCS5kZXB0aCAgICA9IDE2LAorCX0sCisJeworCQkubmFtZSAgICAgPSAiUkdCNTY1IChCRSkiLAorCQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfUkdCNTY1WCwgLyogcnJycnJnZ2cgZ2dnYmJiYmIgKi8KKwkJLmRlcHRoICAgID0gMTYsCisJfSwKKwl7CisJCS5uYW1lICAgICA9ICJSR0I1NTUgKExFKSIsCisJCS5mb3VyY2MgICA9IFY0TDJfUElYX0ZNVF9SR0I1NTUsIC8qIGdnZ2JiYmJiIGFycnJycmdnICovCisJCS5kZXB0aCAgICA9IDE2LAorCX0sCisJeworCQkubmFtZSAgICAgPSAiUkdCNTU1IChCRSkiLAorCQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfUkdCNTU1WCwgLyogYXJycnJyZ2cgZ2dnYmJiYmIgKi8KKwkJLmRlcHRoICAgID0gMTYsCisJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgdml2aV9mbXQgKmdldF9mb3JtYXQoc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2aXZpX2ZtdCAqZm10OworCXVuc2lnbmVkIGludCBrOworCisJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUoZm9ybWF0cyk7IGsrKykgeworCQlmbXQgPSAmZm9ybWF0c1trXTsKKwkJaWYgKGZtdC0+Zm91cmNjID09IGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoayA9PSBBUlJBWV9TSVpFKGZvcm1hdHMpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiAmZm9ybWF0c1trXTsKK30KKwogc3RydWN0IHNnX3RvX2FkZHIgewogCWludCBwb3M7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKQEAgLTE5MCw2ICsyMzQsNyBAQAogCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAgICAgIHZiX3ZpZHE7CiAKIAllbnVtIHY0bDJfYnVmX3R5cGUgICAgICAgICB0eXBlOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgIGJhcnNbOF1bM107CiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIzNCwxMyArMjc5LDEwNyBAQAogI2RlZmluZSBUU1RBTVBfTUFYX1kgVFNUQU1QX01JTl9ZKzE1CiAjZGVmaW5lIFRTVEFNUF9NSU5fWCA2NAogCi1zdGF0aWMgdm9pZCBnZW5fbGluZShjaGFyICpiYXNlcCwgaW50IGluaXBvcywgaW50IHdtYXgsCitzdGF0aWMgdm9pZCBnZW5fdHdvcGl4KHN0cnVjdCB2aXZpX2ZoICpmaCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY29sb3Jwb3MpCit7CisJdW5zaWduZWQgY2hhciByX3ksIGdfdSwgYl92OworCXVuc2lnbmVkIGNoYXIgKnA7CisJaW50IGNvbG9yOworCisJcl95ID0gZmgtPmJhcnNbY29sb3Jwb3NdWzBdOyAvKiBSIG9yIHByZWNhbGN1bGF0ZWQgWSAqLworCWdfdSA9IGZoLT5iYXJzW2NvbG9ycG9zXVsxXTsgLyogRyBvciBwcmVjYWxjdWxhdGVkIFUgKi8KKwliX3YgPSBmaC0+YmFyc1tjb2xvcnBvc11bMl07IC8qIEIgb3IgcHJlY2FsY3VsYXRlZCBWICovCisKKwlmb3IgKGNvbG9yID0gMDsgY29sb3IgPCA0OyBjb2xvcisrKSB7CisJCXAgPSBidWYgKyBjb2xvcjsKKworCQlzd2l0Y2ggKGZoLT5mbXQtPmZvdXJjYykgeworCQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgorCQkJc3dpdGNoIChjb2xvcikgeworCQkJY2FzZSAwOgorCQkJY2FzZSAyOgorCQkJCSpwID0gcl95OworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCSpwID0gZ191OworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCSpwID0gYl92OworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CisJCQlzd2l0Y2ggKGNvbG9yKSB7CisJCQljYXNlIDE6CisJCQljYXNlIDM6CisJCQkJKnAgPSByX3k7CisJCQkJYnJlYWs7CisJCQljYXNlIDA6CisJCQkJKnAgPSBnX3U7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJKnAgPSBiX3Y7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCQkJc3dpdGNoIChjb2xvcikgeworCQkJY2FzZSAwOgorCQkJY2FzZSAyOgorCQkJCSpwID0gKGdfdSA8PCA1KSB8IGJfdjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IChyX3kgPDwgMykgfCAoZ191ID4+IDMpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NVg6CisJCQlzd2l0Y2ggKGNvbG9yKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDI6CisJCQkJKnAgPSAocl95IDw8IDMpIHwgKGdfdSA+PiAzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IChnX3UgPDwgNSkgfCBiX3Y7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgorCQkJc3dpdGNoIChjb2xvcikgeworCQkJY2FzZSAwOgorCQkJY2FzZSAyOgorCQkJCSpwID0gKGdfdSA8PCA1KSB8IGJfdjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IChyX3kgPDwgMikgfCAoZ191ID4+IDMpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NVg6CisJCQlzd2l0Y2ggKGNvbG9yKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDI6CisJCQkJKnAgPSAocl95IDw8IDIpIHwgKGdfdSA+PiAzKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IChnX3UgPDwgNSkgfCBiX3Y7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZ2VuX2xpbmUoc3RydWN0IHZpdmlfZmggKmZoLCBjaGFyICpiYXNlcCwgaW50IGluaXBvcywgaW50IHdtYXgsCiAJCWludCBobWF4LCBpbnQgbGluZSwgaW50IGNvdW50LCBjaGFyICp0aW1lc3RyKQogewotCWludCAgdywgaSwgaiwgeTsKKwlpbnQgIHcsIGksIGo7CiAJaW50IHBvcyA9IGluaXBvczsKLQljaGFyICpwLCAqczsKLQl1OCAgIGNociwgciwgZywgYiwgY29sb3I7CisJY2hhciAqczsKKwl1OCBjaHI7CiAKIAkvKiBXZSB3aWxsIGp1c3QgZHVwbGljYXRlIHRoZSBzZWNvbmQgcGl4ZWwgYXQgdGhlIHBhY2tldCAqLwogCXdtYXggLz0gMjsKQEAgLTI0OCwyNyArMzg3LDkgQEAKIAkvKiBHZW5lcmF0ZSBhIHN0YW5kYXJkIGNvbG9yIGJhciBwYXR0ZXJuICovCiAJZm9yICh3ID0gMDsgdyA8IHdtYXg7IHcrKykgewogCQlpbnQgY29sb3Jwb3MgPSAoKHcgKyBjb3VudCkgKiA4Lyh3bWF4ICsgMSkpICUgODsKLQkJciA9IGJhcnNbY29sb3Jwb3NdWzBdOwotCQlnID0gYmFyc1tjb2xvcnBvc11bMV07Ci0JCWIgPSBiYXJzW2NvbG9ycG9zXVsyXTsKIAotCQlmb3IgKGNvbG9yID0gMDsgY29sb3IgPCA0OyBjb2xvcisrKSB7Ci0JCQlwID0gYmFzZXAgKyBwb3M7Ci0KLQkJCXN3aXRjaCAoY29sb3IpIHsKLQkJCWNhc2UgMDoKLQkJCWNhc2UgMjoKLQkJCQkqcCA9IFRPX1kociwgZywgYik7CS8qIEx1bWEgKi8KLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQkqcCA9IFRPX1UociwgZywgYik7CS8qIENiICovCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDM6Ci0JCQkJKnAgPSBUT19WKHIsIGcsIGIpOwkvKiBDciAqLwotCQkJCWJyZWFrOwotCQkJfQotCQkJcG9zKys7Ci0JCX0KKwkJZ2VuX3R3b3BpeChmaCwgYmFzZXAgKyBwb3MsIGNvbG9ycG9zKTsKKwkJcG9zICs9IDQ7IC8qIG9ubHkgMTYgYnBwIHN1cHBvcnRlZCBmb3Igbm93ICovCiAJfQogCiAJLyogQ2hlY2tzIGlmIGl0IGlzIHBvc3NpYmxlIHRvIHNob3cgdGltZXN0YW1wICovCkBAIC0yODMsMzggKzQwNCwxMiBAQAogCQlmb3IgKHMgPSB0aW1lc3RyOyAqczsgcysrKSB7CiAJCQljaHIgPSByb204eDE2X2JpdHNbKCpzLTB4MzApKjE2K2xpbmUtVFNUQU1QX01JTl9ZXTsKIAkJCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKLQkJCQlpZiAoY2hyICYgMSA8PCAoNyAtIGkpKSB7Ci0JCQkJCS8qIEZvbnQgY29sb3IqLwotCQkJCQlyID0gMDsKLQkJCQkJZyA9IDE5ODsKLQkJCQkJYiA9IDA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogQmFja2dyb3VuZCBjb2xvciAqLwotCQkJCQlyID0gYmFyc1tCTEFDS11bMF07Ci0JCQkJCWcgPSBiYXJzW0JMQUNLXVsxXTsKLQkJCQkJYiA9IGJhcnNbQkxBQ0tdWzJdOwotCQkJCX0KLQogCQkJCXBvcyA9IGluaXBvcyArIGogKiAyOwotCQkJCWZvciAoY29sb3IgPSAwOyBjb2xvciA8IDQ7IGNvbG9yKyspIHsKLQkJCQkJcCA9IGJhc2VwICsgcG9zOwotCi0JCQkJCXkgPSBUT19ZKHIsIGcsIGIpOwotCi0JCQkJCXN3aXRjaCAoY29sb3IpIHsKLQkJCQkJY2FzZSAwOgotCQkJCQljYXNlIDI6Ci0JCQkJCQkqcCA9IFRPX1kociwgZywgYik7IC8qIEx1bWEgKi8KLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIDE6Ci0JCQkJCQkqcCA9IFRPX1UociwgZywgYik7IC8qIENiICovCi0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSAzOgotCQkJCQkJKnAgPSBUT19WKHIsIGcsIGIpOyAvKiBDciAqLwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJcG9zKys7Ci0JCQkJfQorCQkJCS8qIERyYXcgd2hpdGUgZm9udCBvbiBibGFjayBiYWNrZ3JvdW5kICovCisJCQkJaWYgKGNociAmIDEgPDwgKDcgLSBpKSkKKwkJCQkJZ2VuX3R3b3BpeChmaCwgYmFzZXAgKyBwb3MsIFdISVRFKTsKKwkJCQllbHNlCisJCQkJCWdlbl90d29waXgoZmgsIGJhc2VwICsgcG9zLCBCTEFDSyk7CiAJCQkJaisrOwogCQkJfQogCQl9CkBAIC0zMjQsOCArNDE5LDkgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIHZpdmlfZmlsbGJ1ZmYoc3RydWN0IHZpdmlfZGV2ICpkZXYsIHN0cnVjdCB2aXZpX2J1ZmZlciAqYnVmKQorc3RhdGljIHZvaWQgdml2aV9maWxsYnVmZihzdHJ1Y3Qgdml2aV9maCAqZmgsIHN0cnVjdCB2aXZpX2J1ZmZlciAqYnVmKQogeworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gZmgtPmRldjsKIAlpbnQgaCAsIHBvcyA9IDA7CiAJaW50IGhtYXggID0gYnVmLT52Yi5oZWlnaHQ7CiAJaW50IHdtYXggID0gYnVmLT52Yi53aWR0aDsKQEAgLTM0MSw3ICs0MzcsNyBAQAogCQlyZXR1cm47CiAKIAlmb3IgKGggPSAwOyBoIDwgaG1heDsgaCsrKSB7Ci0JCWdlbl9saW5lKHRtcGJ1ZiwgMCwgd21heCwgaG1heCwgaCwgZGV2LT5tdl9jb3VudCwKKwkJZ2VuX2xpbmUoZmgsIHRtcGJ1ZiwgMCwgd21heCwgaG1heCwgaCwgZGV2LT5tdl9jb3VudCwKIAkJCSBkZXYtPnRpbWVzdHIpOwogCQltZW1jcHkodmJ1ZiArIHBvcywgdG1wYnVmLCB3bWF4ICogMik7CiAJCXBvcyArPSB3bWF4KjI7CkBAIC00MTAsNyArNTA2LDcgQEAKIAlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOwogCiAJLyogRmlsbCBidWZmZXIgKi8KLQl2aXZpX2ZpbGxidWZmKGRldiwgYnVmKTsKKwl2aXZpX2ZpbGxidWZmKGZoLCBidWYpOwogCWRwcmludGsoZGV2LCAxLCAiZmlsbGVkIGJ1ZmZlciAlcFxuIiwgYnVmKTsKIAogCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7CkBAIC02MzYsMTEgKzczMiwxNSBAQAogc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCiB7Ci0JaWYgKGYtPmluZGV4ID4gMCkKKwlzdHJ1Y3Qgdml2aV9mbXQgKmZtdDsKKworCWlmIChmLT5pbmRleCA+PSBBUlJBWV9TSVpFKGZvcm1hdHMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sIGZvcm1hdC5uYW1lLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKLQlmLT5waXhlbGZvcm1hdCA9IGZvcm1hdC5mb3VyY2M7CisJZm10ID0gJmZvcm1hdHNbZi0+aW5kZXhdOworCisJc3RybGNweShmLT5kZXNjcmlwdGlvbiwgZm10LT5uYW1lLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKKwlmLT5waXhlbGZvcm1hdCA9IGZtdC0+Zm91cmNjOwogCXJldHVybiAwOwogfQogCkBAIC02NzAsMTMgKzc3MCwxMiBAQAogCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKIAl1bnNpZ25lZCBpbnQgbWF4dywgbWF4aDsKIAotCWlmIChmb3JtYXQuZm91cmNjICE9IGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpIHsKLQkJZHByaW50ayhkZXYsIDEsICJGb3VyY2MgZm9ybWF0ICgweCUwOHgpIGludmFsaWQuICIKLQkJCSJEcml2ZXIgYWNjZXB0cyBvbmx5IDB4JTA4eFxuIiwKLQkJCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQsIGZvcm1hdC5mb3VyY2MpOworCWZtdCA9IGdldF9mb3JtYXQoZik7CisJaWYgKCFmbXQpIHsKKwkJZHByaW50ayhkZXYsIDEsICJGb3VyY2MgZm9ybWF0ICgweCUwOHgpIGludmFsaWQuXG4iLAorCQkJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlmbXQgPSAmZm9ybWF0OwogCiAJZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwogCkBAIC03MTQsNiArODEzLDggQEAKIHsKIAlzdHJ1Y3Qgdml2aV9maCAgKmZoID0gcHJpdjsKIAlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEgPSAmZmgtPnZiX3ZpZHE7CisJdW5zaWduZWQgY2hhciByLCBnLCBiOworCWludCBrLCBpc195dXY7CiAKIAlpbnQgcmV0ID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZik7CiAJaWYgKHJldCA8IDApCkBAIC03MjcsMTIgKzgyOCw0OSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlmaC0+Zm10ICAgICAgICAgICA9ICZmb3JtYXQ7CisJZmgtPmZtdCAgICAgICAgICAgPSBnZXRfZm9ybWF0KGYpOwogCWZoLT53aWR0aCAgICAgICAgID0gZi0+Zm10LnBpeC53aWR0aDsKIAlmaC0+aGVpZ2h0ICAgICAgICA9IGYtPmZtdC5waXguaGVpZ2h0OwogCWZoLT52Yl92aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKIAlmaC0+dHlwZSAgICAgICAgICA9IGYtPnR5cGU7CiAKKwkvKiBwcmVjYWxjdWxhdGUgY29sb3IgYmFyIHZhbHVlcyB0byBzcGVlZCB1cCByZW5kZXJpbmcgKi8KKwlmb3IgKGsgPSAwOyBrIDwgODsgaysrKSB7CisJCXIgPSBiYXJzW2tdWzBdOworCQlnID0gYmFyc1trXVsxXTsKKwkJYiA9IGJhcnNba11bMl07CisJCWlzX3l1diA9IDA7CisKKwkJc3dpdGNoIChmaC0+Zm10LT5mb3VyY2MpIHsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKKwkJY2FzZSBWNEwyX1BJWF9GTVRfVVlWWToKKwkJCWlzX3l1diA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjVYOgorCQkJciA+Pj0gMzsKKwkJCWcgPj49IDI7CisJCQliID4+PSAzOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1WDoKKwkJCXIgPj49IDM7CisJCQlnID4+PSAzOworCQkJYiA+Pj0gMzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGlzX3l1dikgeworCQkJZmgtPmJhcnNba11bMF0gPSBUT19ZKHIsIGcsIGIpOwkvKiBMdW1hICovCisJCQlmaC0+YmFyc1trXVsxXSA9IFRPX1UociwgZywgYik7CS8qIENiICovCisJCQlmaC0+YmFyc1trXVsyXSA9IFRPX1YociwgZywgYik7CS8qIENyICovCisJCX0gZWxzZSB7CisJCQlmaC0+YmFyc1trXVswXSA9IHI7CisJCQlmaC0+YmFyc1trXVsxXSA9IGc7CisJCQlmaC0+YmFyc1trXVsyXSA9IGI7CisJCX0KKwl9CisKIAlyZXQgPSAwOwogb3V0OgogCW11dGV4X3VubG9jaygmcS0+dmJfbG9jayk7CkBAIC04ODYsOCArMTAyNCw2IEBACiAJRmlsZSBvcGVyYXRpb25zIGZvciB0aGUgZGV2aWNlCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jZGVmaW5lIGxpbmVfYnVmX3NpemUobm9ybSkgKG5vcm1fbWF4dyhub3JtKSooZm9ybWF0LmRlcHRoKzcpLzgpCi0KIHN0YXRpYyBpbnQgdml2aV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CkBAIC04OTgsOSArMTAzNCwxMSBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgInZpdmk6IG9wZW4gY2FsbGVkIChtaW5vcj0lZClcbiIsIG1pbm9yKTsKIAorCWxvY2tfa2VybmVsKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZ2aXZpX2Rldmxpc3QsIHZpdmlfZGV2bGlzdCkKIAkJaWYgKGRldi0+dmZkLT5taW5vciA9PSBtaW5vcikKIAkJCWdvdG8gZm91bmQ7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAtRU5PREVWOwogCiBmb3VuZDoKQEAgLTkyNSwxNCArMTA2MywxNiBAQAogCX0KIHVubG9jazoKIAltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCWlmIChyZXR2YWwpCisJaWYgKHJldHZhbCkgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiByZXR2YWw7CisJfQogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJZmgtPmRldiAgICAgID0gZGV2OwogCiAJZmgtPnR5cGUgICAgID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWZoLT5mbXQgICAgICA9ICZmb3JtYXQ7CisJZmgtPmZtdCAgICAgID0gJmZvcm1hdHNbMF07CiAJZmgtPndpZHRoICAgID0gNjQwOwogCWZoLT5oZWlnaHQgICA9IDQ4MDsKIApAQCAtOTU1LDYgKzEwOTUsNyBAQAogCQkJc2l6ZW9mKHN0cnVjdCB2aXZpX2J1ZmZlciksIGZoKTsKIAogCXZpdmlfc3RhcnRfdGhyZWFkKGZoKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKaW5kZXggMzUyOTMwMi4uNjdhYTBkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKQEAgLTIyLDM0ICsyMiwyMSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWIuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLQotI2RlZmluZSBJMkNfTkFNRSh4KSAoeCktPm5hbWUKLQotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CiAKLSNkZWZpbmUgSTJDX1ZQWDMyMjAgICAgICAgIDB4ODYKLSNkZWZpbmUgVlBYMzIyMF9ERUJVRwlLRVJOX0RFQlVHICJ2cHgzMjIwOiAiCitNT0RVTEVfREVTQ1JJUFRJT04oInZweDMyMjBhL3ZweDMyMTZiL3ZweDMyMTRjIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJMYXVyZW50IFBpbmNoYXJ0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBkcHJpbnRrKG51bSwgZm9ybWF0LCBhcmdzLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZyA+PSBudW0pIFwKLQkJCXByaW50ayhmb3JtYXQsICMjYXJncyk7IFwKLQl9IHdoaWxlICgwKQotCiAjZGVmaW5lIFZQWF9USU1FT1VUX0NPVU5UICAxMAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNjksMTAgKzU2LDggQEAKIHN0YXRpYyBjaGFyICppbnB1dHNbXSA9IHsgImludGVybmFsIiwgImNvbXBvc2l0ZSIsICJzdmlkZW8iIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgaW5saW5lIGludAotdnB4MzIyMF93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQorCitzdGF0aWMgaW5saW5lIGludCB2cHgzMjIwX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtODAsMTUgKzY1LDEyIEBACiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLXZweDMyMjBfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnKQorc3RhdGljIGlubGluZSBpbnQgdnB4MzIyMF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIAotc3RhdGljIGludAotdnB4MzIyMF9mcF9zdGF0dXMgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHZweDMyMjBfZnBfc3RhdHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJdW5zaWduZWQgY2hhciBzdGF0dXM7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0xMDgsMTQgKzkwLDExIEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50Ci12cHgzMjIwX2ZwX3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgIHU4ICAgICAgICAgICAgICAgICBmcGFkZHIsCi0JCSAgdTE2ICAgICAgICAgICAgICAgIGRhdGEpCitzdGF0aWMgaW50IHZweDMyMjBfZnBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggZnBhZGRyLCB1MTYgZGF0YSkKIHsKIAkvKiBXcml0ZSB0aGUgMTYtYml0IGFkZHJlc3MgdG8gdGhlIEZQV1IgcmVnaXN0ZXIgKi8KIAlpZiAoaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIDB4MjcsIHN3YWIxNihmcGFkZHIpKSA9PSAtMSkgewotCQlkcHJpbnRrKDEsIFZQWDMyMjBfREVCVUcgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMjQsMjIgKzEwMywyMCBAQAogCiAJLyogV3JpdGUgdGhlIDE2LWJpdCBkYXRhIHRvIHRoZSBGUERBVCByZWdpc3RlciAqLwogCWlmIChpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgMHgyOCwgc3dhYjE2KGRhdGEpKSA9PSAtMSkgewotCQlkcHJpbnRrKDEsIFZQWDMyMjBfREVCVUcgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MTYKLXZweDMyMjBfZnBfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHUxNiAgICAgICAgICAgICAgICBmcGFkZHIpCitzdGF0aWMgdTE2IHZweDMyMjBfZnBfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgZnBhZGRyKQogewogCXMxNiBkYXRhOwogCiAJLyogV3JpdGUgdGhlIDE2LWJpdCBhZGRyZXNzIHRvIHRoZSBGUFJEIHJlZ2lzdGVyICovCiAJaWYgKGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAweDI2LCBzd2FiMTYoZnBhZGRyKSkgPT0gLTEpIHsKLQkJZHByaW50aygxLCBWUFgzMjIwX0RFQlVHICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTQ5LDI1ICsxMjYsMjIgQEAKIAkvKiBSZWFkIHRoZSAxNi1iaXQgZGF0YSBmcm9tIHRoZSBGUERBVCByZWdpc3RlciAqLwogCWRhdGEgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCAweDI4KTsKIAlpZiAoZGF0YSA9PSAtMSkgewotCQlkcHJpbnRrKDEsIFZQWDMyMjBfREVCVUcgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIHN3YWIxNihkYXRhKTsKIH0KIAotc3RhdGljIGludAotdnB4MzIyMF93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCB2cHgzMjIwX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXU4IHJlZzsKIAlpbnQgcmV0ID0gLTE7CiAKIAl3aGlsZSAobGVuID49IDIpIHsKIAkJcmVnID0gKmRhdGErKzsKLQkJaWYgKChyZXQgPQotCQkgICAgIHZweDMyMjBfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspKSA8IDApCisJCXJldCA9IHZweDMyMjBfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOwogCQlsZW4gLT0gMjsKIAl9CkBAIC0xNzUsMTAgKzE0OSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludAotdnB4MzIyMF93cml0ZV9mcF9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCWNvbnN0IHUxNiAgICAgICAgICpkYXRhLAotCQkJdW5zaWduZWQgaW50ICAgICAgIGxlbikKK3N0YXRpYyBpbnQgdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQljb25zdCB1MTYgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdTggcmVnOwogCWludCByZXQgPSAwOwpAQCAtMjg3LDI1ICsyNTksMjAgQEAKIAkweDRiLCAweDI5OCwJCS8qIFBMTCBnYWluICovCiB9OwogCi1zdGF0aWMgdm9pZAotdnB4MzIyMF9kdW1wX2kyYyAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2b2lkIHZweDMyMjBfZHVtcF9pMmMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlpbnQgbGVuID0gc2l6ZW9mKGluaXRfY29tbW9uKTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gaW5pdF9jb21tb247CiAKIAl3aGlsZSAobGVuID4gMSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0RFQlVHICJ2cHgzMjE2YiBpMmMgcmVnIDB4JTAyeCBkYXRhIDB4JTAyeFxuIiwKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaTJjIHJlZyAweCUwMnggZGF0YSAweCUwMnhcbiIsCiAJCQkqZGF0YSwgdnB4MzIyMF9yZWFkKGNsaWVudCwgKmRhdGEpKTsKIAkJZGF0YSArPSAyOwogCQlsZW4gLT0gMjsKIAl9CiB9CiAKLXN0YXRpYyBpbnQKLXZweDMyMjBfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCB2cHgzMjIwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtMzE3LDcgKzI4NCw2IEBACiAJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X2ZwLAogCQkJCSAgICAgICBzaXplb2YoaW5pdF9mcCkgPj4gMSk7CiAJCXN3aXRjaCAoZGVjb2Rlci0+bm9ybSkgewotCiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgogCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfbnRzYywKIAkJCQkJICAgICAgIHNpemVvZihpbml0X250c2MpID4+IDEpOwpAQCAtMzM2LDIxICszMDIsMjAgQEAKIAkJCQkJICAgICAgIHNpemVvZihpbml0X3BhbCkgPj4gMSk7CiAJCQlicmVhazsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0RVTVA6CiAJewogCQl2cHgzMjIwX2R1bXBfaTJjKGNsaWVudCk7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKIAl7CiAJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBERUNPREVSX0dFVF9DQVBBQklMSVRJRVNcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTXG4iKTsKIAogCQljYXAtPmZsYWdzID0gVklERU9fREVDT0RFUl9QQUwgfAogCQkJICAgICBWSURFT19ERUNPREVSX05UU0MgfApAQCAtMzU5LDIwICszMjQsMTggQEAKIAkJCSAgICAgVklERU9fREVDT0RFUl9DQ0lSOwogCQljYXAtPmlucHV0cyA9IDM7CiAJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKIAl7CiAJCWludCByZXMgPSAwLCBzdGF0dXM7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBERUNPREVSX0dFVF9TVEFUVVNcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVDT0RFUl9HRVRfU1RBVFVTXG4iKTsKIAogCQlzdGF0dXMgPSB2cHgzMjIwX2ZwX3JlYWQoY2xpZW50LCAweDBmMyk7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzdGF0dXM6IDB4JTA0eFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCXN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1czogMHglMDR4XG4iLCBzdGF0dXMpOwogCiAJCWlmIChzdGF0dXMgPCAwKQogCQkJcmV0dXJuIHN0YXR1czsKQEAgLTM4MSw3ICszNDQsNiBAQAogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0QgfCBERUNPREVSX1NUQVRVU19DT0xPUjsKIAogCQkJc3dpdGNoIChzdGF0dXMgJiAweDE4KSB7Ci0KIAkJCWNhc2UgMHgwMDoKIAkJCWNhc2UgMHgxMDoKIAkJCWNhc2UgMHgxNDoKQEAgLTQwMiw4ICszNjQsOCBAQAogCQl9CiAKIAkJKihpbnQgKikgYXJnID0gcmVzOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9OT1JNOgogCXsKQEAgLTQxNSw1MCArMzc3LDQzIEBACiAJCSAgIGNob29zZW4gdmlkZW8gbm9ybSAqLwogCQl0ZW1wX2lucHV0ID0gdnB4MzIyMF9mcF9yZWFkKGNsaWVudCwgMHhmMik7CiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogREVDT0RFUl9TRVRfTk9STSAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksICppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVDT0RFUl9TRVRfTk9STSAlZFxuIiwgKmlhcmcpOwogCQlzd2l0Y2ggKCppYXJnKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAogCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfbnRzYykgPj4gMSk7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IG5vcm0gc3dpdGNoZWQgdG8gTlRTQ1xuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vcm0gc3dpdGNoZWQgdG8gTlRTQ1xuIik7CiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfUEFMOgogCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfcGFsLAogCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKLQkJCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogbm9ybSBzd2l0Y2hlZCB0byBQQUxcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIFBBTFxuIik7CiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfU0VDQU06CiAJCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9zZWNhbSwKIAkJCQkJICAgICAgIHNpemVvZihpbml0X3NlY2FtKSA+PiAxKTsKLQkJCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogbm9ybSBzd2l0Y2hlZCB0byBTRUNBTVxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vcm0gc3dpdGNoZWQgdG8gU0VDQU1cbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBWSURFT19NT0RFX0FVVE86CiAJCQkvKiBGSVhNRSBUaGlzIGlzIG9ubHkgcHJlbGltaW5hcnkgc3VwcG9ydCAqLwogCQkJZGF0YSA9IHZweDMyMjBfZnBfcmVhZChjbGllbnQsIDB4ZjIpICYgMHgyMDsKIAkJCXZweDMyMjBfZnBfd3JpdGUoY2xpZW50LCAweGYyLCAweDAwYzAgfCBkYXRhKTsKLQkJCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogbm9ybSBzd2l0Y2hlZCB0byBBdXRvXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm9ybSBzd2l0Y2hlZCB0byBBVVRPXG4iKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9CiAJCWRlY29kZXItPm5vcm0gPSAqaWFyZzsKIAogCQkvKiBBbmQgaGVyZSB3ZSBzZXQgdGhlIGJhY2tlZCB1cCB2aWRlbyBpbnB1dCBhZ2FpbiAqLwogCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHhmMiwgdGVtcF9pbnB1dCB8IDB4MDAxMCk7CiAJCXVkZWxheSgxMCk7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgogCXsKQEAgLTQ3Nyw4ICs0MzIsNyBAQAogCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gMikKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogaW5wdXQgc3dpdGNoZWQgdG8gJXNcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpbnB1dHNbKmlhcmddKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5wdXQgc3dpdGNoZWQgdG8gJXNcbiIsIGlucHV0c1sqaWFyZ10pOwogCiAJCXZweDMyMjBfd3JpdGUoY2xpZW50LCAweDMzLCBpbnB1dFsqaWFyZ11bMF0pOwogCkBAIC00OTAsOCArNDQ0LDggQEAKIAkJCQkgZGF0YSB8IChpbnB1dFsqaWFyZ11bMV0gPDwgNSkgfCAweDAwMTApOwogCiAJCXVkZWxheSgxMCk7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKIAl7CkBAIC01MDEsMTkgKzQ1NSwxOCBAQAogCQlpZiAoKmlhcmcgIT0gMCkgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IERFQ09ERVJfRU5BQkxFX09VVFBVVCAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksICppYXJnKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVDT0RFUl9FTkFCTEVfT1VUUFVUICVkXG4iLCAqaWFyZyk7CiAKIAkJdnB4MzIyMF93cml0ZShjbGllbnQsIDB4ZjIsICgqaWFyZyA/IDB4MWIgOiAweDAwKSk7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6CiAJewpAQCAtNTQ0LDggKzQ5Nyw4IEBACiAJCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHgxYywKIAkJCQkJICgoZGVjb2Rlci0+aHVlIC0gMzI3NjgpID4+IDYpICYgMHhGRkYpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU1NCw4ICs1MDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci12cHgzMjIwX2luaXRfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCB2cHgzMjIwX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJdnB4MzIyMF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKIAl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9mcCwgc2l6ZW9mKGluaXRfZnApID4+IDEpOwpAQCAtNTY5LDExNSArNTIxLDI2IEBACiAgKiBDbGllbnQgbWFuYWdlbWVudCBjb2RlCiAgKi8KIAotLyoKLSAqIEdlbmVyaWMgaTJjIHByb2JlCi0gKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPQotICAgIHsgSTJDX1ZQWDMyMjAgPj4gMSwgKEkyQ19WUFgzMjIwID4+IDEpICsgNCwKLQlJMkNfQ0xJRU5UX0VORAotfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODYgPj4gMSwgMHg4ZSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB2cHgzMjIwX2kyY19kcml2ZXI7Ci0KLXN0YXRpYyBpbnQKLXZweDMyMjBfZGV0YWNoX2NsaWVudCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgdnB4MzIyMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGRlY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdnB4MzIyMF9kZXRlY3RfY2xpZW50IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGFkZHJlc3MsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGtpbmQpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyOwotCi0JZHByaW50aygxLCBWUFgzMjIwX0RFQlVHICIlc1xuIiwgX19mdW5jX18pOworCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworCXU4IHZlcjsKKwl1MTYgcG47CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eQotCSAgICAoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBKSkKLQkJcmV0dXJuIDA7Ci0KLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmIChjbGllbnQgPT0gTlVMTCkgewotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmdnB4MzIyMF9pMmNfZHJpdmVyOwotCi0JLyogQ2hlY2sgZm9yIG1hbnVmYWN0dXJlIElEIGFuZCBwYXJ0IG51bWJlciAqLwotCWlmIChraW5kIDwgMCkgewotCQl1OCBpZDsKLQkJdTE2IHBuOwotCi0JCWlkID0gdnB4MzIyMF9yZWFkKGNsaWVudCwgMHgwMCk7Ci0JCWlmIChpZCAhPSAweGVjKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9JTkZPCi0JCQkJInZweDMyMjBfYXR0YWNoOiBXcm9uZyBtYW51ZmFjdHVyZXIgSUQgKDB4JTAyeClcbiIsCi0JCQkJaWQpOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJcG4gPSAodnB4MzIyMF9yZWFkKGNsaWVudCwgMHgwMikgPDwgOCkgKwotCQkgICAgdnB4MzIyMF9yZWFkKGNsaWVudCwgMHgwMSk7Ci0JCXN3aXRjaCAocG4pIHsKLQkJY2FzZSAweDQ2ODA6Ci0JCQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJ2cHgzMjIwYSIsCi0JCQkJc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKLQkJCWJyZWFrOwotCQljYXNlIDB4NDI2MDoKLQkJCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInZweDMyMTZiIiwKLQkJCQlzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHg0MjgwOgotCQkJc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAidnB4MzIxNGMiLAotCQkJCXNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0lORk8KLQkJCQkiJXM6IFdyb25nIHBhcnQgbnVtYmVyICgweCUwNHgpXG4iLAotCQkJCV9fZnVuY19fLCBwbik7Ci0JCQlrZnJlZShjbGllbnQpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJmb3JjZWQgdnB4MzJ4eCIsCi0JCQlzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOwotCX0KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKKwkJSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZweDMyMjApLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGVjb2RlciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKGRlY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKIAlkZWNvZGVyLT5pbnB1dCA9IDA7CiAJZGVjb2Rlci0+ZW5hYmxlID0gMTsKQEAgLTY4Nyw2MyArNTUwLDUyIEBACiAJZGVjb2Rlci0+c2F0ID0gMzI3Njg7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CiAKLQllcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCXJldHVybiBlcnI7CisJdmVyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHgwMCk7CisJcG4gPSAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHgwMikgPDwgOCkgKworCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDAxKTsKKwlpZiAodmVyID09IDB4ZWMpIHsKKwkJc3dpdGNoIChwbikgeworCQljYXNlIDB4NDY4MDoKKwkJCW5hbWUgPSAidnB4MzIyMGEiOworCQkJYnJlYWs7CisJCWNhc2UgMHg0MjYwOgorCQkJbmFtZSA9ICJ2cHgzMjE2YiI7CisJCQlicmVhazsKKwkJY2FzZSAweDQyODA6CisJCQluYW1lID0gInZweDMyMTRjIjsKKwkJCWJyZWFrOworCQl9CiAJfQotCi0JZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiB2cHgzMnh4IGNsaWVudCBmb3VuZCBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSwgY2xpZW50LT5hZGRyIDw8IDEpOworCWlmIChuYW1lKQorCQl2NGxfaW5mbyhjbGllbnQsICIlcyBmb3VuZCBAIDB4JXggKCVzKVxuIiwgbmFtZSwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCWVsc2UKKwkJdjRsX2luZm8oY2xpZW50LCAiY2hpcCAoJTAyeDolMDR4KSBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCXZlciwgcG4sIGNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJdnB4MzIyMF9pbml0X2NsaWVudChjbGllbnQpOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXZweDMyMjBfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgdnB4MzIyMF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZ2cHgzMjIwX2RldGVjdF9jbGllbnQpOwotCWRwcmludGsoMSwgVlBYMzIyMF9ERUJVRyAiJXM6IGkyY19wcm9iZSByZXR1cm5lZCAlZFxuIiwKLQkJX19mdW5jX18sIHJldCk7Ci0JcmV0dXJuIHJldDsKKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJcmV0dXJuIDA7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEcml2ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgY29kZQotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB2cHgzMjIwX2kyY19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAidnB4MzIyMCIsCi0JfSwKLQotCS5pZCA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAotCi0JLmF0dGFjaF9hZGFwdGVyID0gdnB4MzIyMF9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IHZweDMyMjBfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IHZweDMyMjBfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB2cHgzMjIwX2lkW10gPSB7CisJeyAidnB4MzIyMGEiLCAwIH0sCisJeyAidnB4MzIxNmIiLCAwIH0sCisJeyAidnB4MzIxNGMiLCAwIH0sCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHZweDMyMjBfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdAotdnB4MzIyMF9pbml0ICh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdnB4MzIyMF9pMmNfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci12cHgzMjIwX2NsZWFudXAgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJnZweDMyMjBfaTJjX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHZweDMyMjBfaW5pdCk7Ci1tb2R1bGVfZXhpdCh2cHgzMjIwX2NsZWFudXApOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oInZweDMyMjBhL3ZweDMyMTZiL3ZweDMyMTRjIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJMYXVyZW50IFBpbmNoYXJ0Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAidnB4MzIyMCIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1ZQWDMyMjAsCisJLmNvbW1hbmQgPSB2cHgzMjIwX2NvbW1hbmQsCisJLnByb2JlID0gdnB4MzIyMF9wcm9iZSwKKwkucmVtb3ZlID0gdnB4MzIyMF9yZW1vdmUsCisJLmlkX3RhYmxlID0gdnB4MzIyMF9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMKaW5kZXggMmZmMDBiYy4uYjJkYmU0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYwpAQCAtMTEzLDYgKzExMyw3IEBACiAJc2lnbmVkIGNoYXIgY29udHJhc3Q7CiAJc2lnbmVkIGNoYXIgY29sb3I7CiAJc2lnbmVkIGNoYXIgaHVlOworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogfTsKIAogLyoKQEAgLTE4NCwxMCArMTg1LDI1IEBACiBzdGF0aWMgc3NpemVfdCB3OTk2Nl92NGxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKIAorc3RhdGljIGludCB3OTk2Nl9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgdzk5NjZfZGV2ICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmNhbS0+aW5fdXNlKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdzk5NjZfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHc5OTY2X2RldiAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWNsZWFyX2JpdCgwLCAmY2FtLT5pbl91c2UpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3OTk2Nl9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSB3OTk2Nl9leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSB3OTk2Nl9leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwgICAgICAgICAgPSB3OTk2Nl92NGxfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC0xOTgsNiArMjE0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHc5OTY2X3RlbXBsYXRlID0gewogCS5uYW1lICAgICAgICAgICA9IFc5OTY2X0RSSVZFUk5BTUUsCiAJLmZvcHMgICAgICAgICAgID0gJnc5OTY2X2ZvcHMsCisJLnJlbGVhc2UgCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCiB9OwogCiAvKgpAQCAtMzMyLDcgKzM0OSw3IEBACiAKIC8vIEZpbGwgaW4gdGhlIHZpZGVvX2RldmljZSBzdHJ1Y3QgYW5kIHJlZ2lzdGVyIHVzIHRvIHY0bAogCW1lbWNweSgmY2FtLT52ZGV2LCAmdzk5NjZfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSk7Ci0JY2FtLT52ZGV2LnByaXYgPSBjYW07CisJdmlkZW9fc2V0X2RydmRhdGEoJmNhbS0+dmRldiwgY2FtKTsKIAogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpIDwgMCkKIAkJcmV0dXJuIC0xOwpAQCAtNzEzLDggKzczMCw3IEBACiBzdGF0aWMgaW50IHc5OTY2X3Y0bF9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3Qgdzk5NjZfZGV2ICpjYW0gPSB2ZGV2LT5wcml2OworCXN0cnVjdCB3OTk2Nl9kZXYgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2goY21kKQogCXsKQEAgLTg3Miw4ICs4ODgsNyBAQAogc3RhdGljIHNzaXplX3Qgdzk5NjZfdjRsX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgIF9fdXNlciAqYnVmLAogCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHc5OTY2X2RldiAqY2FtID0gdmRldi0+cHJpdjsKKwlzdHJ1Y3Qgdzk5NjZfZGV2ICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGNoYXIgYWRkciA9IDB4YTA7CS8vIEVDUCwgcmVhZCwgQ0NELXRyYW5zZmVyLCAwMDAwMAogCXVuc2lnbmVkIGNoYXIgX191c2VyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopYnVmOwogCXVuc2lnbmVkIGxvbmcgZGxlZnQgPSBjb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMKaW5kZXggMTFlZGY3OS4uZGNkNDVkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBhcmFtX252WzI0XTsgLyogbnVtYmVyIG9mIHZhbHVlcyBwZXIgcGFyYW1ldGVyICovCiAKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiBtb2R1bGVfcGFyYW0ob3Ztb2RfbG9hZCwgYm9vbCwgMDY0NCk7CiAjZW5kaWYKIG1vZHVsZV9wYXJhbShzaW1jYW1zLCB1c2hvcnQsIDA2NDQpOwpAQCAtMTQ0LDcgKzE0NCw3IEBACiBtb2R1bGVfcGFyYW0oc3BlY2lmaWNfZGVidWcsIGJvb2wsIDA2NDQpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiBNT0RVTEVfUEFSTV9ERVNDKG92bW9kX2xvYWQsCiAJCSAiXG48MHwxPiBBdXRvbWF0aWMgJ292Y2FtY2hpcCcgbW9kdWxlIGxvYWRpbmcuIgogCQkgIlxuMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCmluZGV4IDBjMzI4NzcuLjZhMDkwMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYwpAQCAtNjU3LDcgKzY1Nyw3IEBACiAJaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmemMwMzAxX2Rldl9sb2NrKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwljYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCiAJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmY2FtLT5wcm9iZSkpIHsKIAkJdXBfcmVhZCgmemMwMzAxX2Rldl9sb2NrKTsKQEAgLTczOSw3ICs3MzksNyBAQAogCiAJZG93bl93cml0ZSgmemMwMzAxX2Rldl9sb2NrKTsKIAotCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCWNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAKIAl6YzAzMDFfc3RvcF90cmFuc2ZlcihjYW0pOwogCXpjMDMwMV9yZWxlYXNlX2J1ZmZlcnMoY2FtKTsKQEAgLTc1OSw3ICs3NTksNyBAQAogc3RhdGljIHNzaXplX3QKIHpjMDMwMV9yZWFkKHN0cnVjdCBmaWxlKiBmaWxwLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QqIGZfcG9zKQogewotCXN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwlzdHJ1Y3QgemMwMzAxX2RldmljZSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAlzdHJ1Y3QgemMwMzAxX2ZyYW1lX3QqIGYsICogaTsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAJbG9uZyB0aW1lb3V0OwpAQCAtODY2LDcgKzg2Niw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgemMwMzAxX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpCiB7Ci0Jc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCB6YzAzMDFfZGV2aWNlICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCXN0cnVjdCB6YzAzMDFfZnJhbWVfdCogZjsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwpAQCAtOTQxLDcgKzk0MSw3IEBACiAKIHN0YXRpYyBpbnQgemMwMzAxX21tYXAoc3RydWN0IGZpbGUqIGZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwlzdHJ1Y3QgemMwMzAxX2RldmljZSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCiAJCSAgICAgIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKIAl2b2lkICpwb3M7CkBAIC0xNzk2LDcgKzE3OTYsNyBAQAogc3RhdGljIGludCB6YzAzMDFfaW9jdGxfdjRsMihzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCwKIAkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7Ci0Jc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCB6YzAzMDFfZGV2aWNlICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCiAJc3dpdGNoIChjbWQpIHsKIApAQCAtMTg5MSw3ICsxODkxLDcgQEAKIHN0YXRpYyBpbnQgemMwMzAxX2lvY3RsKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAogCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCB6YzAzMDFfZGV2aWNlICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCWludCBlcnIgPSAwOwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3BfbXV0ZXgpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYTVmYTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL0tjb25maWcKQEAgLTAsMCArMSw3MyBAQAorY29uZmlnIFZJREVPX1pPUkFOCisJdHJpc3RhdGUgIlpvcmFuIFpSMzYwNTcvMzYwNjcgVmlkZW8gRm9yIExpbnV4IgorCWRlcGVuZHMgb24gUENJICYmIEkyQ19BTEdPQklUICYmIFZJREVPX1Y0TDEgJiYgVklSVF9UT19CVVMKKwloZWxwCisJICBTYXkgWSBmb3Igc3VwcG9ydCBmb3IgTUpQRUcgY2FwdHVyZSBjYXJkcyBiYXNlZCBvbiB0aGUgWm9yYW4KKwkgIDM2MDU3LzM2MDY3IFBDSSBjb250cm9sbGVyIGNoaXBzZXQuIFRoaXMgaW5jbHVkZXMgdGhlIElvbWVnYQorCSAgQnV6LCBQaW5uYWNsZSBEQzEwKyBhbmQgdGhlIExpbnV4IE1lZGlhIExhYnMgTE1MMzMuIFRoZXJlIGlzCisJICBhIGRyaXZlciBob21lcGFnZSBhdCA8aHR0cDovL21qcGVnLnNmLm5ldC9kcml2ZXItem9yYW4vPi4gRm9yCisJICBtb3JlIGluZm9ybWF0aW9uLCBjaGVjayA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1pvcmFuPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgenIzNjA2Ny4KKworY29uZmlnIFZJREVPX1pPUkFOX0RDMzAKKwl0cmlzdGF0ZSAiUGlubmFjbGUvTWlybyBEQzMwKCspIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19aT1JBTgorCXNlbGVjdCBWSURFT19BRFY3MTc1IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1ZQWDMyMjAgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgUGlubmFjbGUvTWlybyBEQzMwKCspIE1KUEVHIGNhcHR1cmUvcGxheWJhY2sKKwkgIGNhcmQuIFRoaXMgYWxzbyBzdXBwb3J0cyByZWFsbHkgb2xkIERDMTAgY2FyZHMgYmFzZWQgb24gdGhlCisJICB6cjM2MDUwIE1KUEVHIGNvZGVjIGFuZCB6cjM2MDE2IFZGRS4KKworY29uZmlnIFZJREVPX1pPUkFOX1pSMzYwNjAKKwl0cmlzdGF0ZSAiWm9yYW4gWlIzNjA2MCIKKwlkZXBlbmRzIG9uIFZJREVPX1pPUkFOCisJaGVscAorCSAgU2F5IFkgdG8gc3VwcG9ydCBab3JhbiBib2FyZHMgYmFzZWQgb24gMzYwNjAgY2hpcHMuCisJICBUaGlzIGluY2x1ZGVzIElvbWVnYSBCdXosIFBpbm5hY2xlIERDMTAsIExpbnV4IG1lZGlhIExhYnMgMzMKKwkgIGFuZCAzMyBSMTAgYW5kIEF2ZXJNZWRpYSA2IGJvYXJkcy4KKworY29uZmlnIFZJREVPX1pPUkFOX0JVWgorCXRyaXN0YXRlICJJb21lZ2EgQnV6IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19aT1JBTl9aUjM2MDYwCisJc2VsZWN0IFZJREVPX1NBQTcxMTEgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fU0FBNzE4NSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBJb21lZ2EgQnV6IE1KUEVHIGNhcHR1cmUvcGxheWJhY2sgY2FyZC4KKworY29uZmlnIFZJREVPX1pPUkFOX0RDMTAKKwl0cmlzdGF0ZSAiUGlubmFjbGUvTWlybyBEQzEwKCspIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19aT1JBTl9aUjM2MDYwCisJc2VsZWN0IFZJREVPX1NBQTcxMTAgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fQURWNzE3NSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBQaW5uYWNsZS9NaXJvIERDMTAoKykgTUpQRUcgY2FwdHVyZS9wbGF5YmFjaworCSAgY2FyZC4KKworY29uZmlnIFZJREVPX1pPUkFOX0xNTDMzCisJdHJpc3RhdGUgIkxpbnV4IE1lZGlhIExhYnMgTE1MMzMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAKKwlzZWxlY3QgVklERU9fQlQ4MTkgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fQlQ4NTYgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgTGludXggTWVkaWEgTGFicyBMTUwzMyBNSlBFRyBjYXB0dXJlL3BsYXliYWNrCisJICBjYXJkLgorCitjb25maWcgVklERU9fWk9SQU5fTE1MMzNSMTAKKwl0cmlzdGF0ZSAiTGludXggTWVkaWEgTGFicyBMTUwzM1IxMCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MAorCXNlbGVjdCBWSURFT19TQUE3MTE0IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX0FEVjcxNzAgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwloZWxwCisJICBzdXBwb3J0IGZvciB0aGUgTGludXggTWVkaWEgTGFicyBMTUwzM1IxMCBNSlBFRyBjYXB0dXJlL3BsYXliYWNrCisJICBjYXJkLgorCitjb25maWcgVklERU9fWk9SQU5fQVZTNkVZRVMKKwl0cmlzdGF0ZSAiQXZlck1lZGlhIDYgRXllcyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MCAmJiBFWFBFUklNRU5UQUwgJiYgVklERU9fVjRMMQorCXNlbGVjdCBWSURFT19CVDg1NiBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19LUzAxMjcgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgQXZlck1lZGlhIDYgRXllcyB2aWRlbyBzdXJ2ZWlsbGFuY2UgY2FyZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0Y2MxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorenIzNjA2Ny1vYmpzCTo9CXpvcmFuX3Byb2Nmcy5vIHpvcmFuX2RldmljZS5vIFwKKwkJCXpvcmFuX2RyaXZlci5vIHpvcmFuX2NhcmQubworCitvYmotJChDT05GSUdfVklERU9fWk9SQU4pICs9IHpyMzYwNjcubyB2aWRlb2NvZGVjLm8KK29iai0kKENPTkZJR19WSURFT19aT1JBTl9EQzMwKSArPSB6cjM2MDUwLm8genIzNjAxNi5vCitvYmotJChDT05GSUdfVklERU9fWk9SQU5fWlIzNjA2MCkgKz0genIzNjA2MC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvY29kZWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vdmlkZW9jb2RlYy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvY29kZWMuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi92aWRlb2NvZGVjLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9jb2RlYy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi92aWRlb2NvZGVjLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9jb2RlYy5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuLmgKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTVmMmY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKQEAgLTAsMCArMSwxNjcxIEBACisvKgorICogWm9yYW4genIzNjA1Ny96cjM2MDY3IFBDSSBjb250cm9sbGVyIGRyaXZlciwgZm9yIHRoZQorICogUGlubmFjbGUvTWlybyBEQzEwL0RDMTArL0RDMzAvREMzMCssIElvbWVnYSBCdXosIExpbnV4CisgKiBNZWRpYSBMYWJzIExNTDMzL0xNTDMzUjEwLgorICoKKyAqIFRoaXMgcGFydCBoYW5kbGVzIGNhcmQtc3BlY2lmaWMgZGF0YSBhbmQgZGV0ZWN0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFNlcmd1ZWkgTWlyaWRvbm92IDxtaXJzZXZAY2ljZXNlLm14PgorICoKKyAqIEN1cnJlbnRseSBtYWludGFpbmVkIGJ5OgorICogICBSb25hbGQgQnVsdGplICAgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisgKiAgIExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAc2t5bmV0LmJlPgorICogICBNYWlsaW5nbGlzdCAgICAgIDxtanBlZy11c2Vyc0BsaXN0cy5zZi5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2VtLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSAidmlkZW9jb2RlYy5oIgorI2luY2x1ZGUgInpvcmFuLmgiCisjaW5jbHVkZSAiem9yYW5fY2FyZC5oIgorI2luY2x1ZGUgInpvcmFuX2RldmljZS5oIgorI2luY2x1ZGUgInpvcmFuX3Byb2Nmcy5oIgorCitleHRlcm4gY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCB6b3Jhbl9mb3JtYXRzW107CisKK3N0YXRpYyBpbnQgY2FyZFtCVVpfTUFYXSA9IHsgLTEsIC0xLCAtMSwgLTEgfTsKK21vZHVsZV9wYXJhbV9hcnJheShjYXJkLCBpbnQsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhjYXJkLCAiVGhlIHR5cGUgb2YgY2FyZCIpOworCitzdGF0aWMgaW50IGVuY29kZXJbQlVaX01BWF0gPSB7IC0xLCAtMSwgLTEsIC0xIH07Cittb2R1bGVfcGFyYW1fYXJyYXkoZW5jb2RlciwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW5jb2RlciwgImkyYyBUViBlbmNvZGVyIik7CisKK3N0YXRpYyBpbnQgZGVjb2RlcltCVVpfTUFYXSA9IHsgLTEsIC0xLCAtMSwgLTEgfTsKK21vZHVsZV9wYXJhbV9hcnJheShkZWNvZGVyLCBpbnQsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWNvZGVyLCAiaTJjIFRWIGRlY29kZXIiKTsKKworLyoKKyAgIFRoZSB2aWRlbyBtZW0gYWRkcmVzcyBvZiB0aGUgdmlkZW8gY2FyZC4KKyAgIFRoZSBkcml2ZXIgaGFzIGEgbGl0dGxlIGRhdGFiYXNlIGZvciBzb21lIHZpZGVvY2FyZHMKKyAgIHRvIGRldGVybWluZSBpdCBmcm9tIHRoZXJlLiBJZiB5b3VyIHZpZGVvIGNhcmQgaXMgbm90IGluIHRoZXJlCisgICB5b3UgaGF2ZSBlaXRoZXIgdG8gZ2l2ZSBpdCB0byB0aGUgZHJpdmVyIGFzIGEgcGFyYW1ldGVyCisgICBvciBzZXQgaW4gaW4gYSBWSURJT0NTRkJVRiBpb2N0bAorICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHZpZG1lbTsJLyogZGVmYXVsdCA9IDAgLSBWaWRlbyBtZW1vcnkgYmFzZSBhZGRyZXNzICovCittb2R1bGVfcGFyYW0odmlkbWVtLCB1bG9uZywgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZG1lbSwgIkRlZmF1bHQgdmlkZW8gbWVtb3J5IGJhc2UgYWRkcmVzcyIpOworCisvKgorICAgRGVmYXVsdCBpbnB1dCBhbmQgdmlkZW8gbm9ybSBhdCBzdGFydHVwIG9mIHRoZSBkcml2ZXIuCisqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGRlZmF1bHRfaW5wdXQ7CS8qIGRlZmF1bHQgMCA9IENvbXBvc2l0ZSwgMSA9IFMtVmlkZW8gKi8KK21vZHVsZV9wYXJhbShkZWZhdWx0X2lucHV0LCB1aW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVmYXVsdF9pbnB1dCwKKwkJICJEZWZhdWx0IGlucHV0ICgwPUNvbXBvc2l0ZSwgMT1TLVZpZGVvLCAyPUludGVybmFsKSIpOworCitzdGF0aWMgaW50IGRlZmF1bHRfbXV4ID0gMTsJLyogNiBFeWVzIGlucHV0IHNlbGVjdGlvbiAqLworbW9kdWxlX3BhcmFtKGRlZmF1bHRfbXV4LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWZhdWx0X211eCwKKwkJICJEZWZhdWx0IDYgRXllcyBtdXggc2V0dGluZyAoSW5wdXQgc2VsZWN0aW9uKSIpOworCitzdGF0aWMgaW50IGRlZmF1bHRfbm9ybTsJLyogZGVmYXVsdCAwID0gUEFMLCAxID0gTlRTQyAyID0gU0VDQU0gKi8KK21vZHVsZV9wYXJhbShkZWZhdWx0X25vcm0sIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfbm9ybSwgIkRlZmF1bHQgbm9ybSAoMD1QQUwsIDE9TlRTQywgMj1TRUNBTSkiKTsKKworLyogL2Rldi92aWRlb04sIC0xIGZvciBhdXRvZGV0ZWN0ICovCitzdGF0aWMgaW50IHZpZGVvX25yW0JVWl9NQVhdID0gey0xLCAtMSwgLTEsIC0xfTsKK21vZHVsZV9wYXJhbV9hcnJheSh2aWRlb19uciwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmlkZW9fbnIsICJ2aWRlbyBkZXZpY2UgbnVtYmVyICgtMT1BdXRvKSIpOworCisvKgorICAgTnVtYmVyIGFuZCBzaXplIG9mIGdyYWIgYnVmZmVycyBmb3IgVmlkZW8gNCBMaW51eAorICAgVGhlIHZhc3QgbWFqb3JpdHkgb2YgYXBwbGljYXRpb25zIHNob3VsZCBub3QgbmVlZCBtb3JlIHRoYW4gMiwKKyAgIHRoZSB2ZXJ5IHBvcHVsYXIgQlRUViBkcml2ZXIgYWN0dWFsbHkgZG9lcyBPTkxZIGhhdmUgMi4KKyAgIFRpbWUgc2Vuc2l0aXZlIGFwcGxpY2F0aW9ucyBtaWdodCBuZWVkIG1vcmUsIHRoZSBtYXhpbXVtCisgICBpcyBWSURFT19NQVhfRlJBTUUgKGRlZmluZWQgaW4gPGxpbnV4L3ZpZGVvZGV2Lmg+KS4KKworICAgVGhlIHNpemUgaXMgc2V0IHNvIHRoYXQgdGhlIG1heGltdW0gcG9zc2libGUgcmVxdWVzdAorICAgY2FuIGJlIHNhdGlzZmllZC4gRGVjcmVhc2UgIGl0LCBpZiBiaWdwaHlzX2FyZWEgYWxsb2MnZAorICAgbWVtb3J5IGlzIGxvdy4gSWYgeW91IGRvbid0IGhhdmUgdGhlIGJpZ3BoeXNfYXJlYSBwYXRjaCwKKyAgIHNldCBpdCB0byAxMjggS0IuIFdpbGwgeW91IGFsbG93IG9ubHkgdG8gZ3JhYiBzbWFsbAorICAgaW1hZ2VzIHdpdGggVjRMLCBidXQgdGhhdCdzIGJldHRlciB0aGFuIG5vdGhpbmcuCisKKyAgIHY0bF9idWZzaXplIGhhcyB0byBiZSBnaXZlbiBpbiBLQiAhCisKKyovCisKK2ludCB2NGxfbmJ1ZnMgPSAyOworaW50IHY0bF9idWZzaXplID0gMTI4OwkJLyogRXZlcnlib2R5IHNob3VsZCBiZSBhYmxlIHRvIHdvcmsgd2l0aCB0aGlzIHNldHRpbmcgKi8KK21vZHVsZV9wYXJhbSh2NGxfbmJ1ZnMsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHY0bF9uYnVmcywgIk1heGltdW0gbnVtYmVyIG9mIFY0TCBidWZmZXJzIHRvIHVzZSIpOworbW9kdWxlX3BhcmFtKHY0bF9idWZzaXplLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh2NGxfYnVmc2l6ZSwgIk1heGltdW0gc2l6ZSBwZXIgVjRMIGJ1ZmZlciAoaW4ga0IpIik7CisKK2ludCBqcGdfbmJ1ZnMgPSAzMjsKK2ludCBqcGdfYnVmc2l6ZSA9IDUxMjsJCS8qIG1heCBzaXplIGZvciAxMDAlIHF1YWxpdHkgZnVsbC1QQUwgZnJhbWUgKi8KK21vZHVsZV9wYXJhbShqcGdfbmJ1ZnMsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGpwZ19uYnVmcywgIk1heGltdW0gbnVtYmVyIG9mIEpQRyBidWZmZXJzIHRvIHVzZSIpOworbW9kdWxlX3BhcmFtKGpwZ19idWZzaXplLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhqcGdfYnVmc2l6ZSwgIk1heGltdW0gc2l6ZSBwZXIgSlBHIGJ1ZmZlciAoaW4ga0IpIik7CisKK2ludCBwYXNzX3Rocm91Z2ggPSAwOwkJLyogMT1QYXNzIHRocm91Z2ggVFYgc2lnbmFsIHdoZW4gZGV2aWNlIGlzIG5vdCB1c2VkICovCisJCQkJLyogMD1TaG93IGNvbG9yIGJhciB3aGVuIGRldmljZSBpcyBub3QgdXNlZCAoTE1MMzM6IG9ubHkgaWYgbG1sMzNkcGF0aD0xKSAqLworbW9kdWxlX3BhcmFtKHBhc3NfdGhyb3VnaCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocGFzc190aHJvdWdoLAorCQkgIlBhc3MgVFYgc2lnbmFsIHRocm91Z2ggdG8gVFYtb3V0IHdoZW4gaWRsaW5nIik7CisKK2ludCB6cjM2MDY3X2RlYnVnID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgenIzNjA2N19kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC01KSIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlpvcmFuLTM2MDU3LzM2MDY3IEpQRUcgY29kZWMgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJTZXJndWVpIE1pcmlkb25vdiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgenIzNjA2N19wY2lfdGJsW10gPSB7CisJe1BDSV9WRU5ET1JfSURfWk9SQU4sIFBDSV9ERVZJQ0VfSURfWk9SQU5fMzYwNTcsCisJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6cjM2MDY3X3BjaV90YmwpOworCitpbnQgem9yYW5fbnVtOwkJCS8qIG51bWJlciBvZiBCdXpzIGluIHVzZSAqLworc3RydWN0IHpvcmFuICp6b3JhbltCVVpfTUFYXTsKKworLyogdmlkZW9jb2RlYyBidXMgZnVuY3Rpb25zIFpSMzYwNjAgKi8KK3N0YXRpYyB1MzIKK3pyMzYwNjBfcmVhZCAoc3RydWN0IHZpZGVvY29kZWMgKmNvZGVjLAorCSAgICAgIHUxNiAgICAgICAgICAgICAgICByZWcpCit7CisJc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgY29kZWMtPm1hc3Rlcl9kYXRhLT5kYXRhOworCV9fdTMyIGRhdGE7CisKKwlpZiAocG9zdF9vZmZpY2Vfd2FpdCh6cikKKwkgICAgfHwgcG9zdF9vZmZpY2Vfd3JpdGUoenIsIDAsIDEsIHJlZyA+PiA4KQorCSAgICB8fCBwb3N0X29mZmljZV93cml0ZSh6ciwgMCwgMiwgcmVnICYgMHhmZikpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCWRhdGEgPSBwb3N0X29mZmljZV9yZWFkKHpyLCAwLCAzKSAmIDB4ZmY7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkCit6cjM2MDYwX3dyaXRlIChzdHJ1Y3QgdmlkZW9jb2RlYyAqY29kZWMsCisJICAgICAgIHUxNiAgICAgICAgICAgICAgICByZWcsCisJICAgICAgIHUzMiAgICAgICAgICAgICAgICB2YWwpCit7CisJc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgY29kZWMtPm1hc3Rlcl9kYXRhLT5kYXRhOworCisJaWYgKHBvc3Rfb2ZmaWNlX3dhaXQoenIpCisJICAgIHx8IHBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAwLCAxLCByZWcgPj4gOCkKKwkgICAgfHwgcG9zdF9vZmZpY2Vfd3JpdGUoenIsIDAsIDIsIHJlZyAmIDB4ZmYpKSB7CisJCXJldHVybjsKKwl9CisKKwlwb3N0X29mZmljZV93cml0ZSh6ciwgMCwgMywgdmFsICYgMHhmZik7Cit9CisKKy8qIHZpZGVvY29kZWMgYnVzIGZ1bmN0aW9ucyBaUjM2MDUwICovCitzdGF0aWMgdTMyCit6cjM2MDUwX3JlYWQgKHN0cnVjdCB2aWRlb2NvZGVjICpjb2RlYywKKwkgICAgICB1MTYgICAgICAgICAgICAgICAgcmVnKQoreworCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGNvZGVjLT5tYXN0ZXJfZGF0YS0+ZGF0YTsKKwlfX3UzMiBkYXRhOworCisJaWYgKHBvc3Rfb2ZmaWNlX3dhaXQoenIpCisJICAgIHx8IHBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAxLCAwLCByZWcgPj4gMikpIHsJLy8gcmVnLiBISUdIQllURVMKKwkJcmV0dXJuIC0xOworCX0KKworCWRhdGEgPSBwb3N0X29mZmljZV9yZWFkKHpyLCAwLCByZWcgJiAweDAzKSAmIDB4ZmY7CS8vIHJlZy4gTE9XQllURVMgKyByZWFkCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkCit6cjM2MDUwX3dyaXRlIChzdHJ1Y3QgdmlkZW9jb2RlYyAqY29kZWMsCisJICAgICAgIHUxNiAgICAgICAgICAgICAgICByZWcsCisJICAgICAgIHUzMiAgICAgICAgICAgICAgICB2YWwpCit7CisJc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgY29kZWMtPm1hc3Rlcl9kYXRhLT5kYXRhOworCisJaWYgKHBvc3Rfb2ZmaWNlX3dhaXQoenIpCisJICAgIHx8IHBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAxLCAwLCByZWcgPj4gMikpIHsJLy8gcmVnLiBISUdIQllURVMKKwkJcmV0dXJuOworCX0KKworCXBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAwLCByZWcgJiAweDAzLCB2YWwgJiAweGZmKTsJLy8gcmVnLiBMT1dCWVRFUyArIHdyLiBkYXRhCit9CisKKy8qIHZpZGVvY29kZWMgYnVzIGZ1bmN0aW9ucyBaUjM2MDE2ICovCitzdGF0aWMgdTMyCit6cjM2MDE2X3JlYWQgKHN0cnVjdCB2aWRlb2NvZGVjICpjb2RlYywKKwkgICAgICB1MTYgICAgICAgICAgICAgICAgcmVnKQoreworCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGNvZGVjLT5tYXN0ZXJfZGF0YS0+ZGF0YTsKKwlfX3UzMiBkYXRhOworCisJaWYgKHBvc3Rfb2ZmaWNlX3dhaXQoenIpKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlkYXRhID0gcG9zdF9vZmZpY2VfcmVhZCh6ciwgMiwgcmVnICYgMHgwMykgJiAweGZmOwkvLyByZWFkCisJcmV0dXJuIGRhdGE7Cit9CisKKy8qIGhhY2sgZm9yIGluIHpvcmFuX2RldmljZS5jICovCit2b2lkCit6cjM2MDE2X3dyaXRlIChzdHJ1Y3QgdmlkZW9jb2RlYyAqY29kZWMsCisJICAgICAgIHUxNiAgICAgICAgICAgICAgICByZWcsCisJICAgICAgIHUzMiAgICAgICAgICAgICAgICB2YWwpCit7CisJc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgY29kZWMtPm1hc3Rlcl9kYXRhLT5kYXRhOworCisJaWYgKHBvc3Rfb2ZmaWNlX3dhaXQoenIpKSB7CisJCXJldHVybjsKKwl9CisKKwlwb3N0X29mZmljZV93cml0ZSh6ciwgMiwgcmVnICYgMHgwMywgdmFsICYgMHgwZmYpOwkvLyB3ci4gZGF0YQorfQorCisvKgorICogQm9hcmQgc3BlY2lmaWMgaW5mb3JtYXRpb24KKyAqLworCitzdGF0aWMgdm9pZAorZGMxMF9pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IGRjMTBfaW5pdCgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkvKiBQaXhlbCBjbG9jayBzZWxlY3Rpb24gKi8KKwlHUElPKHpyLCA0LCAwKTsKKwlHUElPKHpyLCA1LCAxKTsKKwkvKiBFbmFibGUgdGhlIHZpZGVvIGJ1cyBzeW5jIHNpZ25hbHMgKi8KKwlHUElPKHpyLCA3LCAwKTsKK30KKworc3RhdGljIHZvaWQKK2RjMTBwbHVzX2luaXQgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogZGMxMHBsdXNfaW5pdCgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7Cit9CisKK3N0YXRpYyB2b2lkCitidXpfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKK3sKKwlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBidXpfaW5pdCgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkvKiBzb21lIHN0dWZmIGZyb20gSW9tZWdhICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh6ci0+cGNpX2RldiwgMHhmYywgMHg5MDY4MGYxNSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh6ci0+cGNpX2RldiwgMHgwYywgMHgwMDAxMjAyMCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh6ci0+cGNpX2RldiwgMHhlOCwgMHhjMDIwMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkCitsbWwzM19pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IGxtbDMzX2luaXQoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCisJR1BJTyh6ciwgMiwgMSk7CQkvLyBTZXQgQ29tcG9zaXRlIGlucHV0L291dHB1dAorfQorCitzdGF0aWMgdm9pZAorYXZzNmV5ZXNfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKK3sKKwkvLyBBdmVyTWVkaWEgNi1FeWVzIG9yaWdpbmFsIGRyaXZlciBieSBDaHJpc3RlciBXZWluaWdlbAorCisJLy8gTGlmdGVkIHN0cmFpZ2h0IGZyb20gQ2hyaXN0ZXIncyBvbGQgZHJpdmVyIGFuZAorCS8vIG1vZGlmaWVkIHNsaWdodGx5IGJ5IE1hcnRpbiBTYW11ZWxzc29uLgorCisJaW50IG11eCA9IGRlZmF1bHRfbXV4OyAvKiAxID0gQlQ4NjYsIDcgPSBWSUQxICovCisKKwlHUElPKHpyLCA0LCAxKTsgLyogQnQ4NjYgU0xFRVAgb24gKi8KKwl1ZGVsYXkoMik7CisKKwlHUElPKHpyLCAwLCAxKTsgLyogWlIzNjA2MCAvUkVTRVQgb24gKi8KKwlHUElPKHpyLCAxLCAwKTsgLyogWlIzNjA2MCAvU0xFRVAgb24gKi8KKwlHUElPKHpyLCAyLCBtdXggJiAxKTsgICAvKiBNVVggUzAgKi8KKwlHUElPKHpyLCAzLCAwKTsgLyogL0ZSQU1FIG9uICovCisJR1BJTyh6ciwgNCwgMCk7IC8qIEJ0ODY2IFNMRUVQIG9mZiAqLworCUdQSU8oenIsIDUsIG11eCAmIDIpOyAgIC8qIE1VWCBTMSAqLworCUdQSU8oenIsIDYsIDApOyAvKiA/ICovCisJR1BJTyh6ciwgNywgbXV4ICYgNCk7ICAgLyogTVVYIFMyICovCisKK30KKworc3RhdGljIGNoYXIgKgoraTJjaWRfdG9fbW9kdWxlbmFtZSAodTE2IGkyY19pZCkKK3sKKwljaGFyICpuYW1lID0gTlVMTDsKKworCXN3aXRjaCAoaTJjX2lkKSB7CisJY2FzZSBJMkNfRFJJVkVSSURfU0FBNzExMDoKKwkJbmFtZSA9ICJzYWE3MTEwIjsKKwkJYnJlYWs7CisJY2FzZSBJMkNfRFJJVkVSSURfU0FBNzExMUE6CisJCW5hbWUgPSAic2FhNzExMSI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX1NBQTcxMTQ6CisJCW5hbWUgPSAic2FhNzExNCI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX1NBQTcxODVCOgorCQluYW1lID0gInNhYTcxODUiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9BRFY3MTcwOgorCQluYW1lID0gImFkdjcxNzAiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9BRFY3MTc1OgorCQluYW1lID0gImFkdjcxNzUiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9CVDgxOToKKwkJbmFtZSA9ICJidDgxOSI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX0JUODU2OgorCQluYW1lID0gImJ0ODU2IjsKKwkJYnJlYWs7CisJY2FzZSBJMkNfRFJJVkVSSURfQlQ4NjY6CisJCW5hbWUgPSAiYnQ4NjYiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9WUFgzMjIwOgorCQluYW1lID0gInZweDMyMjAiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9LUzAxMjc6CisJCW5hbWUgPSAia3MwMTI3IjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIG5hbWU7Cit9CisKK3N0YXRpYyBjaGFyICoKK2NvZGVjaWRfdG9fbW9kdWxlbmFtZSAodTE2IGNvZGVjaWQpCit7CisJY2hhciAqbmFtZSA9IE5VTEw7CisKKwlzd2l0Y2ggKGNvZGVjaWQpIHsKKwljYXNlIENPREVDX1RZUEVfWlIzNjA2MDoKKwkJbmFtZSA9ICJ6cjM2MDYwIjsKKwkJYnJlYWs7CisJY2FzZSBDT0RFQ19UWVBFX1pSMzYwNTA6CisJCW5hbWUgPSAienIzNjA1MCI7CisJCWJyZWFrOworCWNhc2UgQ09ERUNfVFlQRV9aUjM2MDE2OgorCQluYW1lID0gInpyMzYwMTYiOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbmFtZTsKK30KKworLy8gc3RydWN0IHR2bm9ybSB7CisvLyAgICAgIHUxNiBXdCwgV2EsIEhTdGFydCwgSFN5bmNTdGFydCwgSHQsIEhhLCBWU3RhcnQ7CisvLyB9OworCitzdGF0aWMgc3RydWN0IHR2bm9ybSBmNTBzcXBpeGVsID0geyA5NDQsIDc2OCwgODMsIDg4MCwgNjI1LCA1NzYsIDE2IH07CitzdGF0aWMgc3RydWN0IHR2bm9ybSBmNjBzcXBpeGVsID0geyA3ODAsIDY0MCwgNTEsIDcxNiwgNTI1LCA0ODAsIDEyIH07CitzdGF0aWMgc3RydWN0IHR2bm9ybSBmNTBjY2lyNjAxID0geyA4NjQsIDcyMCwgNzUsIDgwNCwgNjI1LCA1NzYsIDE4IH07CitzdGF0aWMgc3RydWN0IHR2bm9ybSBmNjBjY2lyNjAxID0geyA4NTgsIDcyMCwgNTcsIDc4OCwgNTI1LCA0ODAsIDE2IH07CisKK3N0YXRpYyBzdHJ1Y3QgdHZub3JtIGY1MGNjaXI2MDFfbG1sMzMgPSB7IDg2NCwgNzIwLCA3NSszNCwgODA0LCA2MjUsIDU3NiwgMTggfTsKK3N0YXRpYyBzdHJ1Y3QgdHZub3JtIGY2MGNjaXI2MDFfbG1sMzMgPSB7IDg1OCwgNzIwLCA1NyszNCwgNzg4LCA1MjUsIDQ4MCwgMTYgfTsKKworLyogVGhlIERDMTAgKDU3LzE2LzUwKSB1c2VzIFZBY3RpdmUgYXMgSFN5bmMsIHNvIEhTdGFydCBtdXN0IGJlIDAgKi8KK3N0YXRpYyBzdHJ1Y3QgdHZub3JtIGY1MHNxcGl4ZWxfZGMxMCA9IHsgOTQ0LCA3NjgsIDAsIDg4MCwgNjI1LCA1NzYsIDAgfTsKK3N0YXRpYyBzdHJ1Y3QgdHZub3JtIGY2MHNxcGl4ZWxfZGMxMCA9IHsgNzgwLCA2NDAsIDAsIDcxNiwgNTI1LCA0ODAsIDEyIH07CisKKy8qIEZJWE1FOiBJIGNhbm5vdCBzd2FwIFUgYW5kIFYgaW4gc2FhNzExNCwgc28gaSBkbyBvbmUKKyAqIHBpeGVsIGxlZnQgc2hpZnQgaW4gem9yYW4gKDc1IC0+IDc0KQorICogKE1heGltIFlldnR5dXNoa2luIDxtYXhAbGludXhtZWRpYWxhYnMuY29tPikgKi8KK3N0YXRpYyBzdHJ1Y3QgdHZub3JtIGY1MGNjaXI2MDFfbG0zM3IxMCA9IHsgODY0LCA3MjAsIDc0KzU0LCA4MDQsIDYyNSwgNTc2LCAxOCB9Oworc3RhdGljIHN0cnVjdCB0dm5vcm0gZjYwY2NpcjYwMV9sbTMzcjEwID0geyA4NTgsIDcyMCwgNTYrNTQsIDc4OCwgNTI1LCA0ODAsIDE2IH07CisKKy8qIEZJWE1FOiBUaGUga3MwMTI3IHNlZW0gaW5jYXBhYmxlIG9mIHN3YXBwaW5nIFUgYW5kIFYsIHRvbywgd2hpY2ggaXMgd2h5IEkKKyAqIGNvcHkgTWF4aW0ncyBsZWZ0IHNoaWZ0IGhhY2sgZm9yIHRoZSA2IEV5ZXMuCisgKgorICogQ2hyaXN0ZXIncyBkcml2ZXIgdXNlZCB0aGUgdW5zaGlmdGVkIG5vcm1zLCB0aG91Z2guLi4KKyAqIC9TYW0gICovCitzdGF0aWMgc3RydWN0IHR2bm9ybSBmNTBjY2lyNjAxX2F2czZleWVzID0geyA4NjQsIDcyMCwgNzQsIDgwNCwgNjI1LCA1NzYsIDE4IH07CitzdGF0aWMgc3RydWN0IHR2bm9ybSBmNjBjY2lyNjAxX2F2czZleWVzID0geyA4NTgsIDcyMCwgNTYsIDc4OCwgNTI1LCA0ODAsIDE2IH07CisKK3N0YXRpYyBzdHJ1Y3QgY2FyZF9pbmZvIHpvcmFuX2NhcmRzW05VTV9DQVJEU10gX19kZXZpbml0ZGF0YSA9IHsKKwl7CisJCS50eXBlID0gREMxMF9vbGQsCisJCS5uYW1lID0gIkRDMTAob2xkKSIsCisJCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAorCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNTAsCisJCS52aWRlb192ZmUgPSBDT0RFQ19UWVBFX1pSMzYwMTYsCisKKwkJLmlucHV0cyA9IDMsCisJCS5pbnB1dCA9IHsKKwkJCXsgMSwgIkNvbXBvc2l0ZSIgfSwKKwkJCXsgMiwgIlMtVmlkZW8iIH0sCisJCQl7IDAsICJJbnRlcm5hbC9jb21wIiB9CisJCX0sCisJCS5ub3JtcyA9IDMsCisJCS50dm4gPSB7CisJCQkmZjUwc3FwaXhlbF9kYzEwLAorCQkJJmY2MHNxcGl4ZWxfZGMxMCwKKwkJCSZmNTBzcXBpeGVsX2RjMTAKKwkJfSwKKwkJLmpwZWdfaW50ID0gMCwKKwkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlExLAorCQkuZ3BpbyA9IHsgMiwgMSwgLTEsIDMsIDcsIDAsIDQsIDUgfSwKKwkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwIH0sCisJCS5ncGNzID0geyAtMSwgMCB9LAorCQkudmZlX3BvbCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAorCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAwLAorCQkuaW5wdXRfbXV4ID0gMCwKKwkJLmluaXQgPSAmZGMxMF9pbml0LAorCX0sIHsKKwkJLnR5cGUgPSBEQzEwX25ldywKKwkJLm5hbWUgPSAiREMxMChuZXcpIiwKKwkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxMTAsCisJCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAorCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCisKKwkJLmlucHV0cyA9IDMsCisJCS5pbnB1dCA9IHsKKwkJCQl7IDAsICJDb21wb3NpdGUiIH0sCisJCQkJeyA3LCAiUy1WaWRlbyIgfSwKKwkJCQl7IDUsICJJbnRlcm5hbC9jb21wIiB9CisJCQl9LAorCQkubm9ybXMgPSAzLAorCQkudHZuID0geworCQkJCSZmNTBzcXBpeGVsLAorCQkJCSZmNjBzcXBpeGVsLAorCQkJCSZmNTBzcXBpeGVsfSwKKwkJLmpwZWdfaW50ID0gWlIzNjA1N19JU1JfR0lSUTAsCisJCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKKwkJLmdwaW8gPSB7IDMsIDAsIDYsIDEsIDIsIC0xLCA0LCA1IH0sCisJCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAorCQkuZ3BjcyA9IHsgLTEsIDF9LAorCQkudmZlX3BvbCA9IHsgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCB9LAorCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAwLAorCQkuaW5wdXRfbXV4ID0gMCwKKwkJLmluaXQgPSAmZGMxMHBsdXNfaW5pdCwKKwl9LCB7CisJCS50eXBlID0gREMxMHBsdXMsCisJCS5uYW1lID0gIkRDMTBwbHVzIiwKKwkJLnZlbmRvcl9pZCA9IFBDSV9WRU5ET1JfSURfTUlSTywKKwkJLmRldmljZV9pZCA9IFBDSV9ERVZJQ0VfSURfTUlST19EQzEwUExVUywKKwkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxMTAsCisJCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAorCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCisKKwkJLmlucHV0cyA9IDMsCisJCS5pbnB1dCA9IHsKKwkJCXsgMCwgIkNvbXBvc2l0ZSIgfSwKKwkJCXsgNywgIlMtVmlkZW8iIH0sCisJCQl7IDUsICJJbnRlcm5hbC9jb21wIiB9CisJCX0sCisJCS5ub3JtcyA9IDMsCisJCS50dm4gPSB7CisJCQkmZjUwc3FwaXhlbCwKKwkJCSZmNjBzcXBpeGVsLAorCQkJJmY1MHNxcGl4ZWwKKwkJfSwKKwkJLmpwZWdfaW50ID0gWlIzNjA1N19JU1JfR0lSUTAsCisJCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKKwkJLmdwaW8gPSB7IDMsIDAsIDYsIDEsIDIsIC0xLCA0LCA1IH0sCisJCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAorCQkuZ3BjcyA9IHsgLTEsIDEgfSwKKwkJLnZmZV9wb2wgPSB7IDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAgfSwKKwkJLmd3c19ub3RfY29ubmVjdGVkID0gMCwKKwkJLmlucHV0X211eCA9IDAsCisJCS5pbml0ID0gJmRjMTBwbHVzX2luaXQsCisJfSwgeworCQkudHlwZSA9IERDMzAsCisJCS5uYW1lID0gIkRDMzAiLAorCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfVlBYMzIyMCwKKwkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCisJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA1MCwKKwkJLnZpZGVvX3ZmZSA9IENPREVDX1RZUEVfWlIzNjAxNiwKKworCQkuaW5wdXRzID0gMywKKwkJLmlucHV0ID0geworCQkJeyAxLCAiQ29tcG9zaXRlIiB9LAorCQkJeyAyLCAiUy1WaWRlbyIgfSwKKwkJCXsgMCwgIkludGVybmFsL2NvbXAiIH0KKwkJfSwKKwkJLm5vcm1zID0gMywKKwkJLnR2biA9IHsKKwkJCSZmNTBzcXBpeGVsX2RjMTAsCisJCQkmZjYwc3FwaXhlbF9kYzEwLAorCQkJJmY1MHNxcGl4ZWxfZGMxMAorCQl9LAorCQkuanBlZ19pbnQgPSAwLAorCQkudnN5bmNfaW50ID0gWlIzNjA1N19JU1JfR0lSUTEsCisJCS5ncGlvID0geyAyLCAxLCAtMSwgMywgNywgMCwgNCwgNSB9LAorCQkuZ3Bpb19wb2wgPSB7IDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAgfSwKKwkJLmdwY3MgPSB7IC0xLCAwIH0sCisJCS52ZmVfcG9sID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDAsCisJCS5pbnB1dF9tdXggPSAwLAorCQkuaW5pdCA9ICZkYzEwX2luaXQsCisJfSwgeworCQkudHlwZSA9IERDMzBwbHVzLAorCQkubmFtZSA9ICJEQzMwcGx1cyIsCisJCS52ZW5kb3JfaWQgPSBQQ0lfVkVORE9SX0lEX01JUk8sCisJCS5kZXZpY2VfaWQgPSBQQ0lfREVWSUNFX0lEX01JUk9fREMzMFBMVVMsCisJCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAorCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQURWNzE3NSwKKwkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDUwLAorCQkudmlkZW9fdmZlID0gQ09ERUNfVFlQRV9aUjM2MDE2LAorCisJCS5pbnB1dHMgPSAzLAorCQkuaW5wdXQgPSB7CisJCQl7IDEsICJDb21wb3NpdGUiIH0sCisJCQl7IDIsICJTLVZpZGVvIiB9LAorCQkJeyAwLCAiSW50ZXJuYWwvY29tcCIgfQorCQl9LAorCQkubm9ybXMgPSAzLAorCQkudHZuID0geworCQkJJmY1MHNxcGl4ZWxfZGMxMCwKKwkJCSZmNjBzcXBpeGVsX2RjMTAsCisJCQkmZjUwc3FwaXhlbF9kYzEwCisJCX0sCisJCS5qcGVnX2ludCA9IDAsCisJCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKKwkJLmdwaW8gPSB7IDIsIDEsIC0xLCAzLCA3LCAwLCA0LCA1IH0sCisJCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCB9LAorCQkuZ3BjcyA9IHsgLTEsIDAgfSwKKwkJLnZmZV9wb2wgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKwkJLmd3c19ub3RfY29ubmVjdGVkID0gMCwKKwkJLmlucHV0X211eCA9IDAsCisJCS5pbml0ID0gJmRjMTBfaW5pdCwKKwl9LCB7CisJCS50eXBlID0gTE1MMzMsCisJCS5uYW1lID0gIkxNTDMzIiwKKwkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX0JUODE5LAorCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQlQ4NTYsCisJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKKworCQkuaW5wdXRzID0gMiwKKwkJLmlucHV0ID0geworCQkJeyAwLCAiQ29tcG9zaXRlIiB9LAorCQkJeyA3LCAiUy1WaWRlbyIgfQorCQl9LAorCQkubm9ybXMgPSAyLAorCQkudHZuID0geworCQkJJmY1MGNjaXI2MDFfbG1sMzMsCisJCQkmZjYwY2NpcjYwMV9sbWwzMywKKwkJCU5VTEwKKwkJfSwKKwkJLmpwZWdfaW50ID0gWlIzNjA1N19JU1JfR0lSUTEsCisJCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMCwKKwkJLmdwaW8gPSB7IDEsIC0xLCAzLCA1LCA3LCAtMSwgLTEsIC0xIH0sCisJCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCB9LAorCQkuZ3BjcyA9IHsgMywgMSB9LAorCQkudmZlX3BvbCA9IHsgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMCB9LAorCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAxLAorCQkuaW5wdXRfbXV4ID0gMCwKKwkJLmluaXQgPSAmbG1sMzNfaW5pdCwKKwl9LCB7CisJCS50eXBlID0gTE1MMzNSMTAsCisJCS5uYW1lID0gIkxNTDMzUjEwIiwKKwkJLnZlbmRvcl9pZCA9IFBDSV9WRU5ET1JfSURfRUxFQ1RST05JQ0RFU0lHTkdNQkgsCisJCS5kZXZpY2VfaWQgPSBQQ0lfREVWSUNFX0lEX0xNTF8zM1IxMCwKKwkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxMTQsCisJCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTcwLAorCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCisKKwkJLmlucHV0cyA9IDIsCisJCS5pbnB1dCA9IHsKKwkJCXsgMCwgIkNvbXBvc2l0ZSIgfSwKKwkJCXsgNywgIlMtVmlkZW8iIH0KKwkJfSwKKwkJLm5vcm1zID0gMiwKKwkJLnR2biA9IHsKKwkJCSZmNTBjY2lyNjAxX2xtMzNyMTAsCisJCQkmZjYwY2NpcjYwMV9sbTMzcjEwLAorCQkJTlVMTAorCQl9LAorCQkuanBlZ19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKKwkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlEwLAorCQkuZ3BpbyA9IHsgMSwgLTEsIDMsIDUsIDcsIC0xLCAtMSwgLTEgfSwKKwkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwIH0sCisJCS5ncGNzID0geyAzLCAxIH0sCisJCS52ZmVfcG9sID0geyAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwIH0sCisJCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDEsCisJCS5pbnB1dF9tdXggPSAwLAorCQkuaW5pdCA9ICZsbWwzM19pbml0LAorCX0sIHsKKwkJLnR5cGUgPSBCVVosCisJCS5uYW1lID0gIkJ1eiIsCisJCS52ZW5kb3JfaWQgPSBQQ0lfVkVORE9SX0lEX0lPTUVHQSwKKwkJLmRldmljZV9pZCA9IFBDSV9ERVZJQ0VfSURfSU9NRUdBX0JVWiwKKwkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxMTFBLAorCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzE4NUIsCisJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKKworCQkuaW5wdXRzID0gMiwKKwkJLmlucHV0ID0geworCQkJeyAzLCAiQ29tcG9zaXRlIiB9LAorCQkJeyA3LCAiUy1WaWRlbyIgfQorCQl9LAorCQkubm9ybXMgPSAzLAorCQkudHZuID0geworCQkJJmY1MGNjaXI2MDEsCisJCQkmZjYwY2NpcjYwMSwKKwkJCSZmNTBjY2lyNjAxCisJCX0sCisJCS5qcGVnX2ludCA9IFpSMzYwNTdfSVNSX0dJUlExLAorCQkudnN5bmNfaW50ID0gWlIzNjA1N19JU1JfR0lSUTAsCisJCS5ncGlvID0geyAxLCAtMSwgMywgLTEsIC0xLCAtMSwgLTEsIC0xIH0sCisJCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAorCQkuZ3BjcyA9IHsgMywgMSB9LAorCQkudmZlX3BvbCA9IHsgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMCB9LAorCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAxLAorCQkuaW5wdXRfbXV4ID0gMCwKKwkJLmluaXQgPSAmYnV6X2luaXQsCisJfSwgeworCQkudHlwZSA9IEFWUzZFWUVTLAorCQkubmFtZSA9ICI2LUV5ZXMiLAorCQkvKiBBdmVyTWVkaWEgY2hvc2Ugbm90IHRvIGJyYW5kIHRoZSA2LUV5ZXMuIFRodXMgaXQKKwkJICAgY2FuJ3QgYmUgYXV0b2RldGVjdGVkLCBhbmQgcmVxdWlyZXMgY2FyZD14LiAqLworCQkudmVuZG9yX2lkID0gLTEsCisJCS5kZXZpY2VfaWQgPSAtMSwKKwkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX0tTMDEyNywKKwkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0JUODY2LAorCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCisKKwkJLmlucHV0cyA9IDEwLAorCQkuaW5wdXQgPSB7CisJCQl7IDAsICJDb21wb3NpdGUgMSIgfSwKKwkJCXsgMSwgIkNvbXBvc2l0ZSAyIiB9LAorCQkJeyAyLCAiQ29tcG9zaXRlIDMiIH0sCisJCQl7IDQsICJDb21wb3NpdGUgNCIgfSwKKwkJCXsgNSwgIkNvbXBvc2l0ZSA1IiB9LAorCQkJeyA2LCAiQ29tcG9zaXRlIDYiIH0sCisJCQl7IDgsICJTLVZpZGVvIDEiIH0sCisJCQl7IDksICJTLVZpZGVvIDIiIH0sCisJCQl7MTAsICJTLVZpZGVvIDMiIH0sCisJCQl7MTUsICJZQ2JDciIgfQorCQl9LAorCQkubm9ybXMgPSAyLAorCQkudHZuID0geworCQkJJmY1MGNjaXI2MDFfYXZzNmV5ZXMsCisJCQkmZjYwY2NpcjYwMV9hdnM2ZXllcywKKwkJCU5VTEwKKwkJfSwKKwkJLmpwZWdfaW50ID0gWlIzNjA1N19JU1JfR0lSUTEsCisJCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMCwKKwkJLmdwaW8gPSB7IDEsIDAsIDMsIC0xLCAtMSwgLTEsIC0xLCAtMSB9LC8vIFZhbGlkaXR5IHVua25vd24gL1NhbQorCQkuZ3Bpb19wb2wgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwgLy8gVmFsaWRpdHkgdW5rbm93biAvU2FtCisJCS5ncGNzID0geyAzLCAxIH0sCQkJLy8gVmFsaWRpdHkgdW5rbm93biAvU2FtCisJCS52ZmVfcG9sID0geyAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwIH0sICAvLyBWYWxpZGl0eSB1bmtub3duIC9TYW0KKwkJLmd3c19ub3RfY29ubmVjdGVkID0gMSwKKwkJLmlucHV0X211eCA9IDEsCisJCS5pbml0ID0gJmF2czZleWVzX2luaXQsCisJfQorCit9OworCisvKgorICogSTJDIGZ1bmN0aW9ucworICovCisvKiBzb2Z0d2FyZSBJMkMgZnVuY3Rpb25zICovCitzdGF0aWMgaW50Cit6b3Jhbl9pMmNfZ2V0c2RhICh2b2lkICpkYXRhKQoreworCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGRhdGE7CisKKwlyZXR1cm4gKGJ0cmVhZChaUjM2MDU3X0kyQ0JSKSA+PiAxKSAmIDE7Cit9CisKK3N0YXRpYyBpbnQKK3pvcmFuX2kyY19nZXRzY2wgKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgZGF0YTsKKworCXJldHVybiBidHJlYWQoWlIzNjA1N19JMkNCUikgJiAxOworfQorCitzdGF0aWMgdm9pZAorem9yYW5faTJjX3NldHNkYSAodm9pZCAqZGF0YSwKKwkJICBpbnQgICBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBkYXRhOworCisJaWYgKHN0YXRlKQorCQl6ci0+aTJjYnIgfD0gMjsKKwllbHNlCisJCXpyLT5pMmNiciAmPSB+MjsKKwlidHdyaXRlKHpyLT5pMmNiciwgWlIzNjA1N19JMkNCUik7Cit9CisKK3N0YXRpYyB2b2lkCit6b3Jhbl9pMmNfc2V0c2NsICh2b2lkICpkYXRhLAorCQkgIGludCAgIHN0YXRlKQoreworCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGRhdGE7CisKKwlpZiAoc3RhdGUpCisJCXpyLT5pMmNiciB8PSAxOworCWVsc2UKKwkJenItPmkyY2JyICY9IH4xOworCWJ0d3JpdGUoenItPmkyY2JyLCBaUjM2MDU3X0kyQ0JSKTsKK30KKworc3RhdGljIGludAorem9yYW5faTJjX2NsaWVudF9yZWdpc3RlciAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7CisJaW50IHJlcyA9IDA7CisKKwlkcHJpbnRrKDIsCisJCUtFUk5fREVCVUcgIiVzOiBpMmNfY2xpZW50X3JlZ2lzdGVyKCkgLSBkcml2ZXIgaWQgPSAlZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIGNsaWVudC0+ZHJpdmVyLT5pZCk7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoenItPnVzZXIgPiAwKSB7CisJCS8qIHdlJ3JlIGFscmVhZHkgYnVzeSwgc28gd2Uga2VlcCBhIHJlZmVyZW5jZSB0bworCQkgKiB0aGVtLi4uIENvdWxkIGRvIGEgbG90IG9mIHN0dWZmIGhlcmUsIGJ1dCB0aGlzCisJCSAqIGlzIGVhc2llc3QuIChEaWQgSSBldmVyIG1lbnRpb24gSSdtIGEgbGF6eSBhc3M/KQorCQkgKi8KKwkJcmVzID0gLUVCVVNZOworCQlnb3RvIGNsaWVudHJlZ191bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwlpZiAoY2xpZW50LT5kcml2ZXItPmlkID09IHpyLT5jYXJkLmkyY19kZWNvZGVyKQorCQl6ci0+ZGVjb2RlciA9IGNsaWVudDsKKwllbHNlIGlmIChjbGllbnQtPmRyaXZlci0+aWQgPT0genItPmNhcmQuaTJjX2VuY29kZXIpCisJCXpyLT5lbmNvZGVyID0gY2xpZW50OworCWVsc2UgeworCQlyZXMgPSAtRU5PREVWOworCQlnb3RvIGNsaWVudHJlZ191bmxvY2tfYW5kX3JldHVybjsKKwl9CisKK2NsaWVudHJlZ191bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQKK3pvcmFuX2kyY19jbGllbnRfdW5yZWdpc3RlciAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7CisJaW50IHJlcyA9IDA7CisKKwlkcHJpbnRrKDIsIEtFUk5fREVCVUcgIiVzOiBpMmNfY2xpZW50X3VucmVnaXN0ZXIoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJaWYgKHpyLT51c2VyID4gMCkgeworCQlyZXMgPSAtRUJVU1k7CisJCWdvdG8gY2xpZW50dW5yZWdfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJLyogdHJ5IHRvIGxvY2F0ZSBpdCAqLworCWlmIChjbGllbnQgPT0genItPmVuY29kZXIpIHsKKwkJenItPmVuY29kZXIgPSBOVUxMOworCX0gZWxzZSBpZiAoY2xpZW50ID09IHpyLT5kZWNvZGVyKSB7CisJCXpyLT5kZWNvZGVyID0gTlVMTDsKKwkJc25wcmludGYoWlJfREVWTkFNRSh6ciksIHNpemVvZihaUl9ERVZOQU1FKHpyKSksICJNSlBFR1slZF0iLCB6ci0+aWQpOworCX0KK2NsaWVudHVucmVnX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgem9yYW5faTJjX2JpdF9kYXRhX3RlbXBsYXRlID0geworCS5zZXRzZGEgPSB6b3Jhbl9pMmNfc2V0c2RhLAorCS5zZXRzY2wgPSB6b3Jhbl9pMmNfc2V0c2NsLAorCS5nZXRzZGEgPSB6b3Jhbl9pMmNfZ2V0c2RhLAorCS5nZXRzY2wgPSB6b3Jhbl9pMmNfZ2V0c2NsLAorCS51ZGVsYXkgPSAxMCwKKwkudGltZW91dCA9IDEwMCwKK307CisKK3N0YXRpYyBpbnQKK3pvcmFuX3JlZ2lzdGVyX2kyYyAoc3RydWN0IHpvcmFuICp6cikKK3sKKwltZW1jcHkoJnpyLT5pMmNfYWxnbywgJnpvcmFuX2kyY19iaXRfZGF0YV90ZW1wbGF0ZSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSkpOworCXpyLT5pMmNfYWxnby5kYXRhID0genI7CisJenItPmkyY19hZGFwdGVyLmNsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRzsKKwl6ci0+aTJjX2FkYXB0ZXIuaWQgPSBJMkNfSFdfQl9aUjM2MDY3OworCXpyLT5pMmNfYWRhcHRlci5jbGllbnRfcmVnaXN0ZXIgPSB6b3Jhbl9pMmNfY2xpZW50X3JlZ2lzdGVyOworCXpyLT5pMmNfYWRhcHRlci5jbGllbnRfdW5yZWdpc3RlciA9IHpvcmFuX2kyY19jbGllbnRfdW5yZWdpc3RlcjsKKwlzdHJsY3B5KHpyLT5pMmNfYWRhcHRlci5uYW1lLCBaUl9ERVZOQU1FKHpyKSwKKwkJc2l6ZW9mKHpyLT5pMmNfYWRhcHRlci5uYW1lKSk7CisJaTJjX3NldF9hZGFwZGF0YSgmenItPmkyY19hZGFwdGVyLCB6cik7CisJenItPmkyY19hZGFwdGVyLmFsZ29fZGF0YSA9ICZ6ci0+aTJjX2FsZ287CisJenItPmkyY19hZGFwdGVyLmRldi5wYXJlbnQgPSAmenItPnBjaV9kZXYtPmRldjsKKwlyZXR1cm4gaTJjX2JpdF9hZGRfYnVzKCZ6ci0+aTJjX2FkYXB0ZXIpOworfQorCitzdGF0aWMgdm9pZAorem9yYW5fdW5yZWdpc3Rlcl9pMmMgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJaTJjX2RlbF9hZGFwdGVyKCZ6ci0+aTJjX2FkYXB0ZXIpOworfQorCisvKiBDaGVjayBhIHpvcmFuX3BhcmFtcyBzdHJ1Y3QgZm9yIGNvcnJlY3RuZXNzLCBpbnNlcnQgZGVmYXVsdCBwYXJhbXMgKi8KKworaW50Cit6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MgKHN0cnVjdCB6b3JhbiAgICAgICAgICAgICAgKnpyLAorCQkJICBzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzICpzZXR0aW5ncykKK3sKKwlpbnQgZXJyID0gMCwgZXJyMCA9IDA7CisKKwlkcHJpbnRrKDQsCisJCUtFUk5fREVCVUcKKwkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIGRlYzogJWQsIEhkY206ICVkLCBWZGNtOiAlZCwgVGRjbTogJWRcbiIsCisJCVpSX0RFVk5BTUUoenIpLCBzZXR0aW5ncy0+ZGVjaW1hdGlvbiwgc2V0dGluZ3MtPkhvckRjbSwKKwkJc2V0dGluZ3MtPlZlckRjbSwgc2V0dGluZ3MtPlRtcERjbSk7CisJZHByaW50ayg0LAorCQlLRVJOX0RFQlVHCisJCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSB4OiAlZCwgeTogJWQsIHc6ICVkLCB5OiAlZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIHNldHRpbmdzLT5pbWdfeCwgc2V0dGluZ3MtPmltZ195LAorCQlzZXR0aW5ncy0+aW1nX3dpZHRoLCBzZXR0aW5ncy0+aW1nX2hlaWdodCk7CisJLyogQ2hlY2sgZGVjaW1hdGlvbiwgc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBkZWNpbWF0aW9uID0gMSwgMiwgNCAqLworCXN3aXRjaCAoc2V0dGluZ3MtPmRlY2ltYXRpb24pIHsKKwljYXNlIDE6CisKKwkJc2V0dGluZ3MtPkhvckRjbSA9IDE7CisJCXNldHRpbmdzLT5WZXJEY20gPSAxOworCQlzZXR0aW5ncy0+VG1wRGNtID0gMTsKKwkJc2V0dGluZ3MtPmZpZWxkX3Blcl9idWZmID0gMjsKKwkJc2V0dGluZ3MtPmltZ194ID0gMDsKKwkJc2V0dGluZ3MtPmltZ195ID0gMDsKKwkJc2V0dGluZ3MtPmltZ193aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJCXNldHRpbmdzLT5pbWdfaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQgLyAyOworCQlicmVhazsKKwljYXNlIDI6CisKKwkJc2V0dGluZ3MtPkhvckRjbSA9IDI7CisJCXNldHRpbmdzLT5WZXJEY20gPSAxOworCQlzZXR0aW5ncy0+VG1wRGNtID0gMjsKKwkJc2V0dGluZ3MtPmZpZWxkX3Blcl9idWZmID0gMTsKKwkJc2V0dGluZ3MtPmltZ194ID0gKEJVWl9NQVhfV0lEVEggPT0gNzIwKSA/IDggOiAwOworCQlzZXR0aW5ncy0+aW1nX3kgPSAwOworCQlzZXR0aW5ncy0+aW1nX3dpZHRoID0KKwkJICAgIChCVVpfTUFYX1dJRFRIID09IDcyMCkgPyA3MDQgOiBCVVpfTUFYX1dJRFRIOworCQlzZXR0aW5ncy0+aW1nX2hlaWdodCA9IEJVWl9NQVhfSEVJR0hUIC8gMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCisJCWlmICh6ci0+Y2FyZC50eXBlID09IERDMTBfbmV3KSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9ERUJVRworCQkJCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBIRGVjIGJ5IDQgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgREMxMFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQllcnIwKys7CisJCQlicmVhazsKKwkJfQorCisJCXNldHRpbmdzLT5Ib3JEY20gPSA0OworCQlzZXR0aW5ncy0+VmVyRGNtID0gMjsKKwkJc2V0dGluZ3MtPlRtcERjbSA9IDI7CisJCXNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiA9IDE7CisJCXNldHRpbmdzLT5pbWdfeCA9IChCVVpfTUFYX1dJRFRIID09IDcyMCkgPyA4IDogMDsKKwkJc2V0dGluZ3MtPmltZ195ID0gMDsKKwkJc2V0dGluZ3MtPmltZ193aWR0aCA9CisJCSAgICAoQlVaX01BWF9XSURUSCA9PSA3MjApID8gNzA0IDogQlVaX01BWF9XSURUSDsKKwkJc2V0dGluZ3MtPmltZ19oZWlnaHQgPSBCVVpfTUFYX0hFSUdIVCAvIDI7CisJCWJyZWFrOworCWNhc2UgMDoKKworCQkvKiBXZSBoYXZlIHRvIGNoZWNrIHRoZSBkYXRhIHRoZSB1c2VyIGhhcyBzZXQgKi8KKworCQlpZiAoc2V0dGluZ3MtPkhvckRjbSAhPSAxICYmIHNldHRpbmdzLT5Ib3JEY20gIT0gMiAmJgorCQkgICAgKHpyLT5jYXJkLnR5cGUgPT0gREMxMF9uZXcgfHwgc2V0dGluZ3MtPkhvckRjbSAhPSA0KSkKKwkJCWVycjArKzsKKwkJaWYgKHNldHRpbmdzLT5WZXJEY20gIT0gMSAmJiBzZXR0aW5ncy0+VmVyRGNtICE9IDIpCisJCQllcnIwKys7CisJCWlmIChzZXR0aW5ncy0+VG1wRGNtICE9IDEgJiYgc2V0dGluZ3MtPlRtcERjbSAhPSAyKQorCQkJZXJyMCsrOworCQlpZiAoc2V0dGluZ3MtPmZpZWxkX3Blcl9idWZmICE9IDEgJiYKKwkJICAgIHNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiAhPSAyKQorCQkJZXJyMCsrOworCQlpZiAoc2V0dGluZ3MtPmltZ194IDwgMCkKKwkJCWVycjArKzsKKwkJaWYgKHNldHRpbmdzLT5pbWdfeSA8IDApCisJCQllcnIwKys7CisJCWlmIChzZXR0aW5ncy0+aW1nX3dpZHRoIDwgMCkKKwkJCWVycjArKzsKKwkJaWYgKHNldHRpbmdzLT5pbWdfaGVpZ2h0IDwgMCkKKwkJCWVycjArKzsKKwkJaWYgKHNldHRpbmdzLT5pbWdfeCArIHNldHRpbmdzLT5pbWdfd2lkdGggPiBCVVpfTUFYX1dJRFRIKQorCQkJZXJyMCsrOworCQlpZiAoc2V0dGluZ3MtPmltZ195ICsgc2V0dGluZ3MtPmltZ19oZWlnaHQgPgorCQkgICAgQlVaX01BWF9IRUlHSFQgLyAyKQorCQkJZXJyMCsrOworCQlpZiAoc2V0dGluZ3MtPkhvckRjbSAmJiBzZXR0aW5ncy0+VmVyRGNtKSB7CisJCQlpZiAoc2V0dGluZ3MtPmltZ193aWR0aCAlCisJCQkgICAgKDE2ICogc2V0dGluZ3MtPkhvckRjbSkgIT0gMCkKKwkJCQllcnIwKys7CisJCQlpZiAoc2V0dGluZ3MtPmltZ19oZWlnaHQgJQorCQkJICAgICg4ICogc2V0dGluZ3MtPlZlckRjbSkgIT0gMCkKKwkJCQllcnIwKys7CisJCX0KKworCQlpZiAoZXJyMCkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIGVycm9yIGluIHBhcmFtcyBmb3IgZGVjaW1hdGlvbiA9IDBcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBkZWNpbWF0aW9uID0gJWQsIG11c3QgYmUgMCwgMSwgMiBvciA0XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIHNldHRpbmdzLT5kZWNpbWF0aW9uKTsKKwkJZXJyKys7CisJCWJyZWFrOworCX0KKworCWlmIChzZXR0aW5ncy0+anBnX2NvbXAucXVhbGl0eSA+IDEwMCkKKwkJc2V0dGluZ3MtPmpwZ19jb21wLnF1YWxpdHkgPSAxMDA7CisJaWYgKHNldHRpbmdzLT5qcGdfY29tcC5xdWFsaXR5IDwgNSkKKwkJc2V0dGluZ3MtPmpwZ19jb21wLnF1YWxpdHkgPSA1OworCWlmIChzZXR0aW5ncy0+anBnX2NvbXAuQVBQbiA8IDApCisJCXNldHRpbmdzLT5qcGdfY29tcC5BUFBuID0gMDsKKwlpZiAoc2V0dGluZ3MtPmpwZ19jb21wLkFQUG4gPiAxNSkKKwkJc2V0dGluZ3MtPmpwZ19jb21wLkFQUG4gPSAxNTsKKwlpZiAoc2V0dGluZ3MtPmpwZ19jb21wLkFQUF9sZW4gPCAwKQorCQlzZXR0aW5ncy0+anBnX2NvbXAuQVBQX2xlbiA9IDA7CisJaWYgKHNldHRpbmdzLT5qcGdfY29tcC5BUFBfbGVuID4gNjApCisJCXNldHRpbmdzLT5qcGdfY29tcC5BUFBfbGVuID0gNjA7CisJaWYgKHNldHRpbmdzLT5qcGdfY29tcC5DT01fbGVuIDwgMCkKKwkJc2V0dGluZ3MtPmpwZ19jb21wLkNPTV9sZW4gPSAwOworCWlmIChzZXR0aW5ncy0+anBnX2NvbXAuQ09NX2xlbiA+IDYwKQorCQlzZXR0aW5ncy0+anBnX2NvbXAuQ09NX2xlbiA9IDYwOworCWlmIChlcnIpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCit2b2lkCit6b3Jhbl9vcGVuX2luaXRfcGFyYW1zIChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCWludCBpOworCisJLyogVXNlciBtdXN0IGV4cGxpY2l0bHkgc2V0IGEgd2luZG93ICovCisJenItPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0ID0gMDsKKwl6ci0+b3ZlcmxheV9tYXNrID0gTlVMTDsKKwl6ci0+b3ZlcmxheV9hY3RpdmUgPSBaT1JBTl9GUkVFOworCisJenItPnY0bF9tZW1ncmFiX2FjdGl2ZSA9IDA7CisJenItPnY0bF9vdmVybGF5X2FjdGl2ZSA9IDA7CisJenItPnY0bF9ncmFiX2ZyYW1lID0gTk9fR1JBQl9BQ1RJVkU7CisJenItPnY0bF9ncmFiX3NlcSA9IDA7CisJenItPnY0bF9zZXR0aW5ncy53aWR0aCA9IDE5MjsKKwl6ci0+djRsX3NldHRpbmdzLmhlaWdodCA9IDE0NDsKKwl6ci0+djRsX3NldHRpbmdzLmZvcm1hdCA9ICZ6b3Jhbl9mb3JtYXRzWzddOwkvKiBZVVkyIC0gWVVWLTQ6MjoyIHBhY2tlZCAqLworCXpyLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lID0KKwkgICAgenItPnY0bF9zZXR0aW5ncy53aWR0aCAqCisJICAgICgoenItPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmRlcHRoICsgNykgLyA4KTsKKworCS8qIERNQSByaW5nIHN0dWZmIGZvciBWNEwgKi8KKwl6ci0+djRsX3BlbmRfdGFpbCA9IDA7CisJenItPnY0bF9wZW5kX2hlYWQgPSAwOworCXpyLT52NGxfc3luY190YWlsID0gMDsKKwl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwlmb3IgKGkgPSAwOyBpIDwgVklERU9fTUFYX0ZSQU1FOyBpKyspIHsKKwkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOwkvKiBub3RoaW5nIGdvaW5nIG9uICovCisJfQorCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEJVWl9NQVhfRlJBTUU7IGkrKykgeworCQl6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7CS8qIG5vdGhpbmcgZ29pbmcgb24gKi8KKwl9CisJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJLyogU2V0IG5lY2Vzc2FyeSBwYXJhbXMgYW5kIGNhbGwgem9yYW5fY2hlY2tfanBnX3NldHRpbmdzIHRvIHNldCB0aGUgZGVmYXVsdHMgKi8KKwl6ci0+anBnX3NldHRpbmdzLmRlY2ltYXRpb24gPSAxOworCXpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAucXVhbGl0eSA9IDUwOwkvKiBkZWZhdWx0IGNvbXByZXNzaW9uIGZhY3RvciA4ICovCisJaWYgKHpyLT5jYXJkLnR5cGUgIT0gQlVaKQorCQl6ci0+anBnX3NldHRpbmdzLm9kZF9ldmVuID0gMTsKKwllbHNlCisJCXpyLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPSAwOworCXpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQbiA9IDA7CisJenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfbGVuID0gMDsJLyogTm8gQVBQbiBtYXJrZXIgKi8KKwltZW1zZXQoenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSwgMCwKKwkgICAgICAgc2l6ZW9mKHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2RhdGEpKTsKKwl6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9sZW4gPSAwOwkvKiBObyBDT00gbWFya2VyICovCisJbWVtc2V0KHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2RhdGEsIDAsCisJICAgICAgIHNpemVvZih6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9kYXRhKSk7CisJenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5qcGVnX21hcmtlcnMgPQorCSAgICBKUEVHX01BUktFUl9ESFQgfCBKUEVHX01BUktFUl9EUVQ7CisJaSA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnpyLT5qcGdfc2V0dGluZ3MpOworCWlmIChpKQorCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiB6b3Jhbl9vcGVuX2luaXRfcGFyYW1zKCkgaW50ZXJuYWwgZXJyb3JcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisKKwljbGVhcl9pbnRlcnJ1cHRfY291bnRlcnMoenIpOworCXpyLT50ZXN0aW5nID0gMDsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0Cit0ZXN0X2ludGVycnVwdHMgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJREVGSU5FX1dBSVQod2FpdCk7CisJaW50IHRpbWVvdXQsIGljcjsKKworCWNsZWFyX2ludGVycnVwdF9jb3VudGVycyh6cik7CisKKwl6ci0+dGVzdGluZyA9IDE7CisJaWNyID0gYnRyZWFkKFpSMzYwNTdfSUNSKTsKKwlidHdyaXRlKDB4NzgwMDAwMDAgfCBaUjM2MDU3X0lDUl9JbnRQaW5FbiwgWlIzNjA1N19JQ1IpOworCXByZXBhcmVfdG9fd2FpdCgmenItPnRlc3RfcSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQoSFopOworCWZpbmlzaF93YWl0KCZ6ci0+dGVzdF9xLCAmd2FpdCk7CisJYnR3cml0ZSgwLCBaUjM2MDU3X0lDUik7CisJYnR3cml0ZSgweDc4MDAwMDAwLCBaUjM2MDU3X0lTUik7CisJenItPnRlc3RpbmcgPSAwOworCWRwcmludGsoNSwgS0VSTl9JTkZPICIlczogVGVzdGluZyBpbnRlcnJ1cHRzLi4uXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisJaWYgKHRpbWVvdXQpIHsKKwkJZHByaW50aygxLCAiOiB0aW1lIHNwZW50OiAlZFxuIiwgMSAqIEhaIC0gdGltZW91dCk7CisJfQorCWlmICh6cjM2MDY3X2RlYnVnID4gMSkKKwkJcHJpbnRfaW50ZXJydXB0cyh6cik7CisJYnR3cml0ZShpY3IsIFpSMzYwNTdfSUNSKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK3pyMzYwNTdfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKK3sKKwlpbnQgaiwgZXJyOworCWludCB0d28gPSAyOworCWludCB6ZXJvID0gMDsKKworCWRwcmludGsoMSwKKwkJS0VSTl9JTkZPCisJCSIlczogenIzNjA1N19pbml0KCkgLSBpbml0aWFsaXppbmcgY2FyZFslZF0sIHpyPSVwXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgenItPmlkLCB6cik7CisKKwkvKiBkZWZhdWx0IHNldHVwIG9mIGFsbCBwYXJhbWV0ZXJzIHdoaWNoIHdpbGwgcGVyc2lzdCBiZXR3ZWVuIG9wZW5zICovCisJenItPnVzZXIgPSAwOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmenItPnY0bF9jYXBxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ6ci0+anBnX2NhcHEpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnpyLT50ZXN0X3EpOworCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCisJenItPmJ1ZmZlci5iYXNlID0gKHZvaWQgKikgdmlkbWVtOworCXpyLT5idWZmZXIud2lkdGggPSAwOworCXpyLT5idWZmZXIuaGVpZ2h0ID0gMDsKKwl6ci0+YnVmZmVyLmRlcHRoID0gMDsKKwl6ci0+YnVmZmVyLmJ5dGVzcGVybGluZSA9IDA7CisKKwkvKiBBdm9pZCBub25zZW5zZSBzZXR0aW5ncyBmcm9tIHVzZXIgZm9yIGRlZmF1bHQgaW5wdXQvbm9ybSAqLworCWlmIChkZWZhdWx0X25vcm0gPCBWSURFT19NT0RFX1BBTCAmJgorCSAgICBkZWZhdWx0X25vcm0gPiBWSURFT19NT0RFX1NFQ0FNKQorCQlkZWZhdWx0X25vcm0gPSBWSURFT19NT0RFX1BBTDsKKwl6ci0+bm9ybSA9IGRlZmF1bHRfbm9ybTsKKwlpZiAoISh6ci0+dGltaW5nID0genItPmNhcmQudHZuW3pyLT5ub3JtXSkpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9XQVJOSU5HCisJCQkiJXM6IHpyMzYwNTdfaW5pdCgpIC0gZGVmYXVsdCBUViBzdGFuZGFyZCBub3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLiBQQUwgd2lsbCBiZSB1c2VkLlxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJenItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKKwkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blt6ci0+bm9ybV07CisJfQorCisJaWYgKGRlZmF1bHRfaW5wdXQgPiB6ci0+Y2FyZC5pbnB1dHMtMSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX1dBUk5JTkcKKwkJCSIlczogZGVmYXVsdF9pbnB1dCB2YWx1ZSAlZCBvdXQgb2YgcmFuZ2UgKDAtJWQpXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGRlZmF1bHRfaW5wdXQsIHpyLT5jYXJkLmlucHV0cy0xKTsKKwkJZGVmYXVsdF9pbnB1dCA9IDA7CisJfQorCXpyLT5pbnB1dCA9IGRlZmF1bHRfaW5wdXQ7CisKKwkvKiBTaG91bGQgdGhlIGZvbGxvd2luZyBiZSByZXNldCBhdCBldmVyeSBvcGVuID8gKi8KKwl6ci0+aHVlID0gMzI3Njg7CisJenItPmNvbnRyYXN0ID0gMzI3Njg7CisJenItPnNhdHVyYXRpb24gPSAzMjc2ODsKKwl6ci0+YnJpZ2h0bmVzcyA9IDMyNzY4OworCisJLyogZGVmYXVsdCBzZXR1cCAod2lsbCBiZSByZXBlYXRlZCBhdCBldmVyeSBvcGVuKSAqLworCXpvcmFuX29wZW5faW5pdF9wYXJhbXMoenIpOworCisJLyogYWxsb2NhdGUgbWVtb3J5ICpiZWZvcmUqIGRvaW5nIGFueXRoaW5nIHRvIHRoZSBoYXJkd2FyZQorCSAqIGluIGNhc2UgYWxsb2NhdGlvbiBmYWlscyAqLworCXpyLT5zdGF0X2NvbSA9IGt6YWxsb2MoQlVaX05VTV9TVEFUX0NPTSAqIDQsIEdGUF9LRVJORUwpOworCXpyLT52aWRlb19kZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF6ci0+c3RhdF9jb20gfHwgIXpyLT52aWRlb19kZXYpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogenIzNjA1N19pbml0KCkgLSBrbWFsbG9jIChTVEFUX0NPTSkgZmFpbGVkXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXRfZnJlZTsKKwl9CisJZm9yIChqID0gMDsgaiA8IEJVWl9OVU1fU1RBVF9DT007IGorKykgeworCQl6ci0+c3RhdF9jb21bal0gPSBjcHVfdG9fbGUzMigxKTsgLyogbWFyayBhcyB1bmF2YWlsYWJsZSB0byB6cjM2MDU3ICovCisJfQorCisJLyoKKwkgKiAgIE5vdyBhZGQgdGhlIHRlbXBsYXRlIGFuZCByZWdpc3RlciB0aGUgZGV2aWNlIHVuaXQuCisJICovCisJbWVtY3B5KHpyLT52aWRlb19kZXYsICZ6b3Jhbl90ZW1wbGF0ZSwgc2l6ZW9mKHpvcmFuX3RlbXBsYXRlKSk7CisJc3RyY3B5KHpyLT52aWRlb19kZXYtPm5hbWUsIFpSX0RFVk5BTUUoenIpKTsKKwllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoenItPnZpZGVvX2RldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnJbenItPmlkXSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXhpdF91bnJlZ2lzdGVyOworCisJem9yYW5faW5pdF9oYXJkd2FyZSh6cik7CisJaWYgKHpyMzYwNjdfZGVidWcgPiAyKQorCQlkZXRlY3RfZ3Vlc3RfYWN0aXZpdHkoenIpOworCXRlc3RfaW50ZXJydXB0cyh6cik7CisJaWYgKCFwYXNzX3Rocm91Z2gpIHsKKwkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZ6ZXJvKTsKKwkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJnR3byk7CisJfQorCisJenItPnpvcmFuX3Byb2MgPSBOVUxMOworCXpyLT5pbml0aWFsaXplZCA9IDE7CisJcmV0dXJuIDA7CisKK2V4aXRfdW5yZWdpc3RlcjoKKwl6b3Jhbl91bnJlZ2lzdGVyX2kyYyh6cik7CitleGl0X2ZyZWU6CisJa2ZyZWUoenItPnN0YXRfY29tKTsKKwlrZnJlZSh6ci0+dmlkZW9fZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorem9yYW5fcmVsZWFzZSAoc3RydWN0IHpvcmFuICp6cikKK3sKKwlpZiAoIXpyLT5pbml0aWFsaXplZCkKKwkJZ290byBleGl0X2ZyZWU7CisJLyogdW5yZWdpc3RlciB2aWRlb2NvZGVjIGJ1cyAqLworCWlmICh6ci0+Y29kZWMpIHsKKwkJc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyICptYXN0ZXIgPSB6ci0+Y29kZWMtPm1hc3Rlcl9kYXRhOworCisJCXZpZGVvY29kZWNfZGV0YWNoKHpyLT5jb2RlYyk7CisJCWtmcmVlKG1hc3Rlcik7CisJfQorCWlmICh6ci0+dmZlKSB7CisJCXN0cnVjdCB2aWRlb2NvZGVjX21hc3RlciAqbWFzdGVyID0genItPnZmZS0+bWFzdGVyX2RhdGE7CisKKwkJdmlkZW9jb2RlY19kZXRhY2goenItPnZmZSk7CisJCWtmcmVlKG1hc3Rlcik7CisJfQorCisJLyogdW5yZWdpc3RlciBpMmMgYnVzICovCisJem9yYW5fdW5yZWdpc3Rlcl9pMmMoenIpOworCS8qIGRpc2FibGUgUENJIGJ1cy1tYXN0ZXJpbmcgKi8KKwl6b3Jhbl9zZXRfcGNpX21hc3Rlcih6ciwgMCk7CisJLyogcHV0IGNoaXAgaW50byByZXNldCAqLworCWJ0d3JpdGUoMCwgWlIzNjA1N19TUEdQUENSKTsKKwlmcmVlX2lycSh6ci0+cGNpX2Rldi0+aXJxLCB6cik7CisJLyogdW5tYXAgYW5kIGZyZWUgbWVtb3J5ICovCisJa2ZyZWUoenItPnN0YXRfY29tKTsKKwl6b3Jhbl9wcm9jX2NsZWFudXAoenIpOworCWlvdW5tYXAoenItPnpyMzYwNTdfbWVtKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoenItPnBjaV9kZXYpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHpyLT52aWRlb19kZXYpOworZXhpdF9mcmVlOgorCWtmcmVlKHpyKTsKK30KKwordm9pZAorem9yYW5fdmRldl9yZWxlYXNlIChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQoreworCWtmcmVlKHZkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyICogX19kZXZpbml0Cit6b3Jhbl9zZXR1cF92aWRlb2NvZGVjIChzdHJ1Y3Qgem9yYW4gKnpyLAorCQkJaW50ICAgICAgICAgICB0eXBlKQoreworCXN0cnVjdCB2aWRlb2NvZGVjX21hc3RlciAqbSA9IE5VTEw7CisKKwltID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHpvcmFuX3NldHVwX3ZpZGVvY29kZWMoKSAtIG5vIG1lbW9yeVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIG07CisJfQorCisJLyogbWFnaWMgYW5kIHR5cGUgYXJlIHVudXNlZCBmb3IgbWFzdGVyIHN0cnVjdC4gTWFrZXMgc2Vuc2Ugb25seSBhdAorCSAgIGNvZGVjIHN0cnVjdHMuCisJICAgSW4gdGhlIHBhc3QsIC50eXBlIHdlcmUgaW5pdGlhbGl6ZWQgdG8gdGhlIG9sZCBWNEwxIC5oYXJkd2FyZQorCSAgIHZhbHVlLCBhcyBWSURfSEFSRFdBUkVfWlIzNjA2NworCSAqLworCW0tPm1hZ2ljID0gMEw7CisJbS0+dHlwZSA9IDA7CisKKwltLT5mbGFncyA9IENPREVDX0ZMQUdfRU5DT0RFUiB8IENPREVDX0ZMQUdfREVDT0RFUjsKKwlzdHJuY3B5KG0tPm5hbWUsIFpSX0RFVk5BTUUoenIpLCBzaXplb2YobS0+bmFtZSkpOworCW0tPmRhdGEgPSB6cjsKKworCXN3aXRjaCAodHlwZSkKKwl7CisJY2FzZSBDT0RFQ19UWVBFX1pSMzYwNjA6CisJCW0tPnJlYWRyZWcgPSB6cjM2MDYwX3JlYWQ7CisJCW0tPndyaXRlcmVnID0genIzNjA2MF93cml0ZTsKKwkJbS0+ZmxhZ3MgfD0gQ09ERUNfRkxBR19KUEVHIHwgQ09ERUNfRkxBR19WRkU7CisJCWJyZWFrOworCWNhc2UgQ09ERUNfVFlQRV9aUjM2MDUwOgorCQltLT5yZWFkcmVnID0genIzNjA1MF9yZWFkOworCQltLT53cml0ZXJlZyA9IHpyMzYwNTBfd3JpdGU7CisJCW0tPmZsYWdzIHw9IENPREVDX0ZMQUdfSlBFRzsKKwkJYnJlYWs7CisJY2FzZSBDT0RFQ19UWVBFX1pSMzYwMTY6CisJCW0tPnJlYWRyZWcgPSB6cjM2MDE2X3JlYWQ7CisJCW0tPndyaXRlcmVnID0genIzNjAxNl93cml0ZTsKKwkJbS0+ZmxhZ3MgfD0gQ09ERUNfRkxBR19WRkU7CisJCWJyZWFrOworCX0KKworCXJldHVybiBtOworfQorCisvKgorICogICBTY2FuIGZvciBhIEJ1eiBjYXJkIChhY3R1YWxseSBmb3IgdGhlIFBDSSBjb250cm9sbGVyIFpSMzYwNTcpLAorICogICByZXF1ZXN0IHRoZSBpcnEgYW5kIG1hcCB0aGUgaW8gbWVtb3J5CisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0CitmaW5kX3pyMzYwNTcgKHZvaWQpCit7CisJdW5zaWduZWQgY2hhciBsYXRlbmN5LCBuZWVkX2xhdGVuY3k7CisJc3RydWN0IHpvcmFuICp6cjsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKwlpbnQgcmVzdWx0OworCXN0cnVjdCB2aWRlb2NvZGVjX21hc3RlciAqbWFzdGVyX3ZmZSA9IE5VTEw7CisJc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyICptYXN0ZXJfY29kZWMgPSBOVUxMOworCWludCBjYXJkX251bTsKKwljaGFyICppMmNfZW5jX25hbWUsICppMmNfZGVjX25hbWUsICpjb2RlY19uYW1lLCAqdmZlX25hbWU7CisKKwl6b3Jhbl9udW0gPSAwOworCXdoaWxlICh6b3Jhbl9udW0gPCBCVVpfTUFYICYmCisJICAgICAgIChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1pPUkFOLCBQQ0lfREVWSUNFX0lEX1pPUkFOXzM2MDU3LCBkZXYpKSAhPSBOVUxMKSB7CisJCWNhcmRfbnVtID0gY2FyZFt6b3Jhbl9udW1dOworCQl6ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3JhbiksIEdGUF9LRVJORUwpOworCQlpZiAoIXpyKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0ga3phbGxvYyBmYWlsZWRcbiIsCisJCQkJWk9SQU5fTkFNRSk7CisJCQljb250aW51ZTsKKwkJfQorCQl6ci0+cGNpX2RldiA9IGRldjsKKwkJLy96ci0+enIzNjA1N19tZW0gPSBOVUxMOworCQl6ci0+aWQgPSB6b3Jhbl9udW07CisJCXNucHJpbnRmKFpSX0RFVk5BTUUoenIpLCBzaXplb2YoWlJfREVWTkFNRSh6cikpLCAiTUpQRUdbJXVdIiwgenItPmlkKTsKKwkJc3Bpbl9sb2NrX2luaXQoJnpyLT5zcGlubG9jayk7CisJCW11dGV4X2luaXQoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldikpCisJCQlnb3RvIHpyX2ZyZWVfbWVtOworCQl6ci0+enIzNjA1N19hZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoenItPnBjaV9kZXYsIDApOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZSh6ci0+cGNpX2RldiwgUENJX0NMQVNTX1JFVklTSU9OLAorCQkJCSAgICAgJnpyLT5yZXZpc2lvbik7CisJCWlmICh6ci0+cmV2aXNpb24gPCAyKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9JTkZPCisJCQkJIiVzOiBab3JhbiBaUjM2MDU3IChyZXYgJWQpIGlycTogJWQsIG1lbW9yeTogMHglMDh4LlxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgenItPnJldmlzaW9uLCB6ci0+cGNpX2Rldi0+aXJxLAorCQkJCXpyLT56cjM2MDU3X2Fkcik7CisKKwkJCWlmIChjYXJkX251bSA9PSAtMSkgeworCQkJCWRwcmludGsoMSwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIG5vIGNhcmQgc3BlY2lmaWVkLCBwbGVhc2UgdXNlIHRoZSBjYXJkPVggaW5zbW9kIG9wdGlvblxuIiwKKwkJCQkJWlJfREVWTkFNRSh6cikpOworCQkJCWdvdG8genJfZnJlZV9tZW07CisJCQl9CisJCX0gZWxzZSB7CisJCQlpbnQgaTsKKwkJCXVuc2lnbmVkIHNob3J0IHNzX3ZlbmRvciwgc3NfZGV2aWNlOworCisJCQlzc192ZW5kb3IgPSB6ci0+cGNpX2Rldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKwkJCXNzX2RldmljZSA9IHpyLT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOworCQkJZHByaW50aygxLAorCQkJCUtFUk5fSU5GTworCQkJCSIlczogWm9yYW4gWlIzNjA2NyAocmV2ICVkKSBpcnE6ICVkLCBtZW1vcnk6IDB4JTA4eFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgenItPnJldmlzaW9uLCB6ci0+cGNpX2Rldi0+aXJxLAorCQkJCXpyLT56cjM2MDU3X2Fkcik7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9JTkZPCisJCQkJIiVzOiBzdWJzeXN0ZW0gdmVuZG9yPTB4JTA0eCBpZD0weCUwNHhcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIHNzX3ZlbmRvciwgc3NfZGV2aWNlKTsKKwkJCWlmIChjYXJkX251bSA9PSAtMSkgeworCQkJCWRwcmludGsoMywKKwkJCQkJS0VSTl9ERUJVRworCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gdHJ5aW5nIHRvIGF1dG9kZXRlY3QgY2FyZCB0eXBlXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJZm9yIChpPTA7aTxOVU1fQ0FSRFM7aSsrKSB7CisJCQkJCWlmIChzc192ZW5kb3IgPT0gem9yYW5fY2FyZHNbaV0udmVuZG9yX2lkICYmCisJCQkJCSAgICBzc19kZXZpY2UgPT0gem9yYW5fY2FyZHNbaV0uZGV2aWNlX2lkKSB7CisJCQkJCQlkcHJpbnRrKDMsCisJCQkJCQkJS0VSTl9ERUJVRworCQkJCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBjYXJkICVzIGRldGVjdGVkXG4iLAorCQkJCQkJCVpSX0RFVk5BTUUoenIpLAorCQkJCQkJCXpvcmFuX2NhcmRzW2ldLm5hbWUpOworCQkJCQkJY2FyZF9udW0gPSBpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKGkgPT0gTlVNX0NBUkRTKSB7CisJCQkJCWRwcmludGsoMSwKKwkJCQkJCUtFUk5fRVJSCisJCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gdW5rbm93biBjYXJkXG4iLAorCQkJCQkJWlJfREVWTkFNRSh6cikpOworCQkJCQlnb3RvIHpyX2ZyZWVfbWVtOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChjYXJkX251bSA8IDAgfHwgY2FyZF9udW0gPj0gTlVNX0NBUkRTKSB7CisJCQlkcHJpbnRrKDIsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gaW52YWxpZCBjYXJkbnVtICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBjYXJkX251bSk7CisJCQlnb3RvIHpyX2ZyZWVfbWVtOworCQl9CisKKwkJLyogZXZlbiB0aG91Z2ggd2UgbWFrZSB0aGlzIGEgbm9uIHBvaW50ZXIgYW5kIHRodXMKKwkJICogdGhlb3JldGljYWxseSBhbGxvdyBmb3IgbWFraW5nIGNoYW5nZXMgdG8gdGhpcyBzdHJ1Y3QKKwkJICogb24gYSBwZXItaW5kaXZpZHVhbCBjYXJkIGJhc2lzIGF0IHJ1bnRpbWUsIHRoaXMgaXMKKwkJICogc3Ryb25nbHkgZGlzY291cmFnZWQuIFRoaXMgc3RydWN0dXJlIGlzIGludGVuZGVkIHRvCisJCSAqIGtlZXAgZ2VuZXJhbCBjYXJkIGluZm9ybWF0aW9uLCBubyBzZXR0aW5ncyBvciBhbnl0aGluZyAqLworCQl6ci0+Y2FyZCA9IHpvcmFuX2NhcmRzW2NhcmRfbnVtXTsKKwkJc25wcmludGYoWlJfREVWTkFNRSh6ciksIHNpemVvZihaUl9ERVZOQU1FKHpyKSksCisJCQkgIiVzWyV1XSIsIHpyLT5jYXJkLm5hbWUsIHpyLT5pZCk7CisKKwkJenItPnpyMzYwNTdfbWVtID0gaW9yZW1hcF9ub2NhY2hlKHpyLT56cjM2MDU3X2FkciwgMHgxMDAwKTsKKwkJaWYgKCF6ci0+enIzNjA1N19tZW0pIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBpb3JlbWFwIGZhaWxlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlnb3RvIHpyX2ZyZWVfbWVtOworCQl9CisKKwkJcmVzdWx0ID0gcmVxdWVzdF9pcnEoenItPnBjaV9kZXYtPmlycSwKKwkJCQkgICAgIHpvcmFuX2lycSwKKwkJCQkgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwKKwkJCQkgICAgIFpSX0RFVk5BTUUoenIpLAorCQkJCSAgICAgKHZvaWQgKikgenIpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJaWYgKHJlc3VsdCA9PSAtRUlOVkFMKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gYmFkIGlycSBudW1iZXIgb3IgaGFuZGxlclxuIiwKKwkJCQkJWlJfREVWTkFNRSh6cikpOworCQkJfSBlbHNlIGlmIChyZXN1bHQgPT0gLUVCVVNZKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gSVJRICVkIGJ1c3ksIGNoYW5nZSB5b3VyIFBuUCBjb25maWcgaW4gQklPU1xuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIHpyLT5wY2lfZGV2LT5pcnEpOworCQkJfSBlbHNlIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBjYW4ndCBhc3NpZ24gaXJxLCBlcnJvciBjb2RlICVkXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgcmVzdWx0KTsKKwkJCX0KKwkJCWdvdG8genJfdW5tYXA7CisJCX0KKworCQkvKiBzZXQgUENJIGxhdGVuY3kgdGltZXIgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoenItPnBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLAorCQkJCSAgICAgJmxhdGVuY3kpOworCQluZWVkX2xhdGVuY3kgPSB6ci0+cmV2aXNpb24gPiAxID8gMzIgOiA0ODsKKwkJaWYgKGxhdGVuY3kgIT0gbmVlZF9sYXRlbmN5KSB7CisJCQlkcHJpbnRrKDIsCisJCQkJS0VSTl9JTkZPCisJCQkJIiVzOiBDaGFuZ2luZyBQQ0kgbGF0ZW5jeSBmcm9tICVkIHRvICVkLlxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgbGF0ZW5jeSwgbmVlZF9sYXRlbmN5KTsKKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZSh6ci0+cGNpX2RldiwKKwkJCQkJICAgICAgUENJX0xBVEVOQ1lfVElNRVIsCisJCQkJCSAgICAgIG5lZWRfbGF0ZW5jeSk7CisJCX0KKworCQl6cjM2MDU3X3Jlc3RhcnQoenIpOworCQkvKiBpMmMgKi8KKwkJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBJbml0aWFsaXppbmcgaTJjIGJ1cy4uLlxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKworCQkvKiBpMmMgZGVjb2RlciAqLworCQlpZiAoZGVjb2Rlclt6ci0+aWRdICE9IC0xKSB7CisJCQlpMmNfZGVjX25hbWUgPSBpMmNpZF90b19tb2R1bGVuYW1lKGRlY29kZXJbenItPmlkXSk7CisJCQl6ci0+Y2FyZC5pMmNfZGVjb2RlciA9IGRlY29kZXJbenItPmlkXTsKKwkJfSBlbHNlIGlmICh6ci0+Y2FyZC5pMmNfZGVjb2RlciAhPSAwKSB7CisJCQlpMmNfZGVjX25hbWUgPQorCQkJCWkyY2lkX3RvX21vZHVsZW5hbWUoenItPmNhcmQuaTJjX2RlY29kZXIpOworCQl9IGVsc2UgeworCQkJaTJjX2RlY19uYW1lID0gTlVMTDsKKwkJfQorCisJCWlmIChpMmNfZGVjX25hbWUpIHsKKwkJCWlmICgocmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoaTJjX2RlY19uYW1lKSkgPCAwKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IGZhaWxlZCB0byBsb2FkIG1vZHVsZSAlczogJWRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCBpMmNfZGVjX25hbWUsIHJlc3VsdCk7CisJCQl9CisJCX0KKworCQkvKiBpMmMgZW5jb2RlciAqLworCQlpZiAoZW5jb2Rlclt6ci0+aWRdICE9IC0xKSB7CisJCQlpMmNfZW5jX25hbWUgPSBpMmNpZF90b19tb2R1bGVuYW1lKGVuY29kZXJbenItPmlkXSk7CisJCQl6ci0+Y2FyZC5pMmNfZW5jb2RlciA9IGVuY29kZXJbenItPmlkXTsKKwkJfSBlbHNlIGlmICh6ci0+Y2FyZC5pMmNfZW5jb2RlciAhPSAwKSB7CisJCQlpMmNfZW5jX25hbWUgPQorCQkJCWkyY2lkX3RvX21vZHVsZW5hbWUoenItPmNhcmQuaTJjX2VuY29kZXIpOworCQl9IGVsc2UgeworCQkJaTJjX2VuY19uYW1lID0gTlVMTDsKKwkJfQorCisJCWlmIChpMmNfZW5jX25hbWUpIHsKKwkJCWlmICgocmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoaTJjX2VuY19uYW1lKSkgPCAwKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IGZhaWxlZCB0byBsb2FkIG1vZHVsZSAlczogJWRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCBpMmNfZW5jX25hbWUsIHJlc3VsdCk7CisJCQl9CisJCX0KKworCQlpZiAoem9yYW5fcmVnaXN0ZXJfaTJjKHpyKSA8IDApIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBjYW4ndCBpbml0aWFsaXplIGkyYyBidXNcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJZ290byB6cl9mcmVlX2lycTsKKwkJfQorCisJCWRwcmludGsoMiwKKwkJCUtFUk5fSU5GTyAiJXM6IEluaXRpYWxpemluZyB2aWRlb2NvZGVjIGJ1cy4uLlxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKworCQlpZiAoenItPmNhcmQudmlkZW9fY29kZWMgIT0gMCAmJgorCQkgICAgKGNvZGVjX25hbWUgPQorCQkgICAgIGNvZGVjaWRfdG9fbW9kdWxlbmFtZSh6ci0+Y2FyZC52aWRlb19jb2RlYykpICE9IE5VTEwpIHsKKwkJCWlmICgocmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoY29kZWNfbmFtZSkpIDwgMCkgeworCQkJCWRwcmludGsoMSwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiBmYWlsZWQgdG8gbG9hZCBtb2R1bGVzICVzOiAlZFxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIGNvZGVjX25hbWUsIHJlc3VsdCk7CisJCQl9CisJCX0KKwkJaWYgKHpyLT5jYXJkLnZpZGVvX3ZmZSAhPSAwICYmCisJCSAgICAodmZlX25hbWUgPQorCQkgICAgIGNvZGVjaWRfdG9fbW9kdWxlbmFtZSh6ci0+Y2FyZC52aWRlb192ZmUpKSAhPSBOVUxMKSB7CisJCQlpZiAoKHJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKHZmZV9uYW1lKSkgPCAwKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IGZhaWxlZCB0byBsb2FkIG1vZHVsZXMgJXM6ICVkXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgdmZlX25hbWUsIHJlc3VsdCk7CisJCQl9CisJCX0KKworCQkvKiByZXNldCBKUEVHIGNvZGVjICovCisJCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOworCQlqcGVnX2NvZGVjX3Jlc2V0KHpyKTsKKwkJLyogdmlkZW8gYnVzIGVuYWJsZWQgKi8KKwkJLyogZGlzcGxheSBjb2RlYyByZXZpc2lvbiAqLworCQlpZiAoenItPmNhcmQudmlkZW9fY29kZWMgIT0gMCkgeworCQkJbWFzdGVyX2NvZGVjID0gem9yYW5fc2V0dXBfdmlkZW9jb2RlYyh6ciwKKwkJCQkJCQkgICAgICB6ci0+Y2FyZC52aWRlb19jb2RlYyk7CisJCQlpZiAoIW1hc3Rlcl9jb2RlYykKKwkJCQlnb3RvIHpyX3VucmVnX2kyYzsKKwkJCXpyLT5jb2RlYyA9IHZpZGVvY29kZWNfYXR0YWNoKG1hc3Rlcl9jb2RlYyk7CisJCQlpZiAoIXpyLT5jb2RlYykgeworCQkJCWRwcmludGsoMSwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIG5vIGNvZGVjIGZvdW5kXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJZ290byB6cl9mcmVlX2NvZGVjOworCQkJfQorCQkJaWYgKHpyLT5jb2RlYy0+dHlwZSAhPSB6ci0+Y2FyZC52aWRlb19jb2RlYykgeworCQkJCWRwcmludGsoMSwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIHdyb25nIGNvZGVjXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJZ290byB6cl9kZXRhY2hfY29kZWM7CisJCQl9CisJCX0KKwkJaWYgKHpyLT5jYXJkLnZpZGVvX3ZmZSAhPSAwKSB7CisJCQltYXN0ZXJfdmZlID0gem9yYW5fc2V0dXBfdmlkZW9jb2RlYyh6ciwKKwkJCQkJCQkgICAgenItPmNhcmQudmlkZW9fdmZlKTsKKwkJCWlmICghbWFzdGVyX3ZmZSkKKwkJCQlnb3RvIHpyX2RldGFjaF9jb2RlYzsKKwkJCXpyLT52ZmUgPSB2aWRlb2NvZGVjX2F0dGFjaChtYXN0ZXJfdmZlKTsKKwkJCWlmICghenItPnZmZSkgeworCQkJCWRwcmludGsoMSwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIG5vIFZGRSBmb3VuZFxuIiwKKwkJCQkJWlJfREVWTkFNRSh6cikpOworCQkJCWdvdG8genJfZnJlZV92ZmU7CisJCQl9CisJCQlpZiAoenItPnZmZS0+dHlwZSAhPSB6ci0+Y2FyZC52aWRlb192ZmUpIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogZmluZF96cjM2MDU3KCkgPSB3cm9uZyBWRkVcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQlnb3RvIHpyX2RldGFjaF92ZmU7CisJCQl9CisJCX0KKwkJLyogU3VjY2VzcyBzbyBrZWVwIHRoZSBwY2lfZGV2IHJlZmVyZW5jZWQgKi8KKwkJcGNpX2Rldl9nZXQoenItPnBjaV9kZXYpOworCQl6b3Jhblt6b3Jhbl9udW0rK10gPSB6cjsKKwkJY29udGludWU7CisKKwkJLy8gSW5pdCBlcnJvcnMKKwkgICAgICB6cl9kZXRhY2hfdmZlOgorCQl2aWRlb2NvZGVjX2RldGFjaCh6ci0+dmZlKTsKKwkgICAgICB6cl9mcmVlX3ZmZToKKwkJa2ZyZWUobWFzdGVyX3ZmZSk7CisJICAgICAgenJfZGV0YWNoX2NvZGVjOgorCQl2aWRlb2NvZGVjX2RldGFjaCh6ci0+Y29kZWMpOworCSAgICAgIHpyX2ZyZWVfY29kZWM6CisJCWtmcmVlKG1hc3Rlcl9jb2RlYyk7CisJICAgICAgenJfdW5yZWdfaTJjOgorCQl6b3Jhbl91bnJlZ2lzdGVyX2kyYyh6cik7CisJICAgICAgenJfZnJlZV9pcnE6CisJCWJ0d3JpdGUoMCwgWlIzNjA1N19TUEdQUENSKTsKKwkJZnJlZV9pcnEoenItPnBjaV9kZXYtPmlycSwgenIpOworCSAgICAgIHpyX3VubWFwOgorCQlpb3VubWFwKHpyLT56cjM2MDU3X21lbSk7CisJICAgICAgenJfZnJlZV9tZW06CisJCWtmcmVlKHpyKTsKKwkJY29udGludWU7CisJfQorCWlmIChkZXYpCS8qIENsZWFuIHVwIHJlZiBjb3VudCBvbiBlYXJseSBleGl0ICovCisJCXBjaV9kZXZfcHV0KGRldik7CisKKwlpZiAoem9yYW5fbnVtID09IDApIHsKKwkJZHByaW50aygxLCBLRVJOX0lORk8gIk5vIGtub3duIE1KUEVHIGNhcmRzIGZvdW5kLlxuIik7CisJfQorCXJldHVybiB6b3Jhbl9udW07Cit9CisKK3N0YXRpYyBpbnQgX19pbml0Citpbml0X2RjMTBfY2FyZHMgKHZvaWQpCit7CisJaW50IGk7CisKKwltZW1zZXQoem9yYW4sIDAsIHNpemVvZih6b3JhbikpOworCXByaW50ayhLRVJOX0lORk8gIlpvcmFuIE1KUEVHIGJvYXJkIGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkXG4iLAorCSAgICAgICBNQUpPUl9WRVJTSU9OLCBNSU5PUl9WRVJTSU9OLCBSRUxFQVNFX1ZFUlNJT04pOworCisJLyogTG9vayBmb3IgY2FyZHMgKi8KKwlpZiAoZmluZF96cjM2MDU3KCkgPCAwKSB7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoem9yYW5fbnVtID09IDApCisJCXJldHVybiAtRU5PREVWOworCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogJWQgY2FyZChzKSBmb3VuZFxuIiwgWk9SQU5fTkFNRSwKKwkJem9yYW5fbnVtKTsKKwkvKiBjaGVjayB0aGUgcGFyYW1ldGVycyB3ZSBoYXZlIGJlZW4gZ2l2ZW4sIGFkanVzdCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAodjRsX25idWZzIDwgMikKKwkJdjRsX25idWZzID0gMjsKKwlpZiAodjRsX25idWZzID4gVklERU9fTUFYX0ZSQU1FKQorCQl2NGxfbmJ1ZnMgPSBWSURFT19NQVhfRlJBTUU7CisJLyogVGhlIHVzZXIgc3BlY2ZpZXMgdGhlIGluIEtCLCB3ZSB3YW50IHRoZW0gaW4gYnl0ZQorCSAqIChhbmQgcGFnZSBhbGlnbmVkKSAqLworCXY0bF9idWZzaXplID0gUEFHRV9BTElHTih2NGxfYnVmc2l6ZSAqIDEwMjQpOworCWlmICh2NGxfYnVmc2l6ZSA8IDMyNzY4KQorCQl2NGxfYnVmc2l6ZSA9IDMyNzY4OworCS8qIDIgTUIgaXMgYXJiaXRyYXJ5IGJ1dCBzdWZmaWNpZW50IGZvciB0aGUgbWF4aW11bSBwb3NzaWJsZSBpbWFnZXMgKi8KKwlpZiAodjRsX2J1ZnNpemUgPiAyMDQ4ICogMTAyNCkKKwkJdjRsX2J1ZnNpemUgPSAyMDQ4ICogMTAyNDsKKwlpZiAoanBnX25idWZzIDwgNCkKKwkJanBnX25idWZzID0gNDsKKwlpZiAoanBnX25idWZzID4gQlVaX01BWF9GUkFNRSkKKwkJanBnX25idWZzID0gQlVaX01BWF9GUkFNRTsKKwlqcGdfYnVmc2l6ZSA9IFBBR0VfQUxJR04oanBnX2J1ZnNpemUgKiAxMDI0KTsKKwlpZiAoanBnX2J1ZnNpemUgPCA4MTkyKQorCQlqcGdfYnVmc2l6ZSA9IDgxOTI7CisJaWYgKGpwZ19idWZzaXplID4gKDUxMiAqIDEwMjQpKQorCQlqcGdfYnVmc2l6ZSA9IDUxMiAqIDEwMjQ7CisJLyogVXNlIHBhcmFtZXRlciBmb3IgdmlkbWVtIG9yIHRyeSB0byBmaW5kIGEgdmlkZW8gY2FyZCAqLworCWlmICh2aWRtZW0pIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9JTkZPCisJCQkiJXM6IFVzaW5nIHN1cHBsaWVkIHZpZGVvIG1lbW9yeSBiYXNlIGFkZHJlc3MgQCAweCVseFxuIiwKKwkJCVpPUkFOX05BTUUsIHZpZG1lbSk7CisJfQorCisJLyogcmFuZG9tIG5vbnNlbnNlICovCisJZHByaW50ayg2LCBLRVJOX0RFQlVHICJKb3R0aSBpcyBlZW4gaGVsZCFcbiIpOworCisJLyogc29tZSBtYWluYm9hcmRzIG1pZ2h0IG5vdCBkbyBQQ0ktUENJIGRhdGEgdHJhbnNmZXIgd2VsbCAqLworCWlmIChwY2lfcGNpX3Byb2JsZW1zICYgKFBDSVBDSV9GQUlMfFBDSUFHUF9GQUlMfFBDSVBDSV9BTElNQUdJSykpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9XQVJOSU5HCisJCQkiJXM6IGNoaXBzZXQgZG9lcyBub3Qgc3VwcG9ydCByZWxpYWJsZSBQQ0ktUENJIERNQVxuIiwKKwkJCVpPUkFOX05BTUUpOworCX0KKworCS8qIHRha2UgY2FyZSBvZiBOYXRvbWEgY2hpcHNldCBhbmQgYSByZXZpc2lvbiAxIHpyMzYwNTcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgem9yYW5fbnVtOyBpKyspIHsKKwkJc3RydWN0IHpvcmFuICp6ciA9IHpvcmFuW2ldOworCisJCWlmICgocGNpX3BjaV9wcm9ibGVtcyAmIFBDSVBDSV9OQVRPTUEpICYmIHpyLT5yZXZpc2lvbiA8PSAxKSB7CisJCQl6ci0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzID0gMTsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0lORk8KKwkJCQkiJXM6IFpSMzYwNTcvTmF0b21hIGJ1ZywgbWF4LiBidWZmZXIgc2l6ZSBpcyAxMjhLXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJfQorCisJCWlmICh6cjM2MDU3X2luaXQoenIpIDwgMCkgeworCQkJZm9yIChpID0gMDsgaSA8IHpvcmFuX251bTsgaSsrKQorCQkJCXpvcmFuX3JlbGVhc2Uoem9yYW5baV0pOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJem9yYW5fcHJvY19pbml0KHpyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cit1bmxvYWRfZGMxMF9jYXJkcyAodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB6b3Jhbl9udW07IGkrKykKKwkJem9yYW5fcmVsZWFzZSh6b3JhbltpXSk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfZGMxMF9jYXJkcyk7Cittb2R1bGVfZXhpdCh1bmxvYWRfZGMxMF9jYXJkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2NhcmQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2NhcmQuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOTQ4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jCkBAIC0wLDAgKzEsMTc0NyBAQAorLyoKKyAqIFpvcmFuIHpyMzYwNTcvenIzNjA2NyBQQ0kgY29udHJvbGxlciBkcml2ZXIsIGZvciB0aGUKKyAqIFBpbm5hY2xlL01pcm8gREMxMC9EQzEwKy9EQzMwL0RDMzArLCBJb21lZ2EgQnV6LCBMaW51eAorICogTWVkaWEgTGFicyBMTUwzMy9MTUwzM1IxMC4KKyAqCisgKiBUaGlzIHBhcnQgaGFuZGxlcyBkZXZpY2UgYWNjZXNzIChQQ0kvSTJDL2NvZGVjLy4uLikKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU2VyZ3VlaSBNaXJpZG9ub3YgPG1pcnNldkBjaWNlc2UubXg+CisgKgorICogQ3VycmVudGx5IG1haW50YWluZWQgYnk6CisgKiAgIFJvbmFsZCBCdWx0amUgICAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKyAqICAgTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBza3luZXQuYmU+CisgKiAgIE1haWxpbmdsaXN0ICAgICAgPG1qcGVnLXVzZXJzQGxpc3RzLnNmLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbS5oPgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgInZpZGVvY29kZWMuaCIKKyNpbmNsdWRlICJ6b3Jhbi5oIgorI2luY2x1ZGUgInpvcmFuX2RldmljZS5oIgorI2luY2x1ZGUgInpvcmFuX2NhcmQuaCIKKworI2RlZmluZSBJUlFfTUFTSyAoIFpSMzYwNTdfSVNSX0dJUlEwIHwgXAorCQkgICBaUjM2MDU3X0lTUl9HSVJRMSB8IFwKKwkJICAgWlIzNjA1N19JU1JfSlBFR1JlcElSUSApCisKK3N0YXRpYyBpbnQgbG1sMzNkcGF0aDsJCS8qIGRlZmF1bHQgPSAwCisJCQkJICogMSB3aWxsIHVzZSBkaWdpdGFsIHBhdGggaW4gY2FwdHVyZQorCQkJCSAqIG1vZGUgaW5zdGVhZCBvZiBhbmFsb2cuIEl0IGNhbiBiZQorCQkJCSAqIHVzZWQgZm9yIHBpY3R1cmUgYWRqdXN0bWVudHMgdXNpbmcKKwkJCQkgKiB0b29sIGxpa2UgeGF3dHYgd2hpbGUgd2F0Y2hpbmcgaW1hZ2UKKwkJCQkgKiBvbiBUViBtb25pdG9yIGNvbm5lY3RlZCB0byB0aGUgb3V0cHV0LgorCQkJCSAqIEhvd2V2ZXIsIGR1ZSB0byBhYnNlbmNlIG9mIDc1IE9obQorCQkJCSAqIGxvYWQgb24gQnQ4MTkgaW5wdXQsIHRoZXJlIHdpbGwgYmUKKwkJCQkgKiBzb21lIGltYWdlIGltcGVyZmVjdGlvbnMgKi8KKworbW9kdWxlX3BhcmFtKGxtbDMzZHBhdGgsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhsbWwzM2RwYXRoLAorCQkgIlVzZSBkaWdpdGFsIHBhdGggY2FwdHVyZSBtb2RlIChvbiBMTUwzMyBjYXJkcykiKTsKKworc3RhdGljIHZvaWQKK3pyMzYwNTdfaW5pdF92ZmUgKHN0cnVjdCB6b3JhbiAqenIpOworCisvKgorICogR2VuZXJhbCBQdXJwb3NlIEkvTyBhbmQgR3Vlc3QgYnVzIGFjY2VzcworICovCisKKy8qCisgKiBUaGlzIGlzIGEgYml0IHRyaWNreS4gV2hlbiBhIGJvYXJkIGxhY2tzIGEgR1BJTyBmdW5jdGlvbiwgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIEdQSU8gYml0IG51bWJlciBpbiB0aGUgY2FyZF9pbmZvIHN0cnVjdHVyZSBpcyBzZXQgdG8gMC4KKyAqLworCit2b2lkCitHUElPIChzdHJ1Y3Qgem9yYW4gKnpyLAorICAgICAgaW50ICAgICAgICAgICBiaXQsCisgICAgICB1bnNpZ25lZCBpbnQgIHZhbHVlKQoreworCXUzMiByZWc7CisJdTMyIG1hc2s7CisKKwkvKiBNYWtlIHN1cmUgdGhlIGJpdCBudW1iZXIgaXMgbGVnYWwKKwkgKiBBIGJpdCBudW1iZXIgb2YgLTEgKGxhY2tpbmcpIGdpdmVzIGEgbWFzayBvZiAwLAorCSAqIG1ha2luZyBpdCBoYXJtbGVzcyAqLworCW1hc2sgPSAoMSA8PCAoMjQgKyBiaXQpKSAmIDB4ZmYwMDAwMDA7CisJcmVnID0gYnRyZWFkKFpSMzYwNTdfR1BQR0NSMSkgJiB+bWFzazsKKwlpZiAodmFsdWUpIHsKKwkJcmVnIHw9IG1hc2s7CisJfQorCWJ0d3JpdGUocmVnLCBaUjM2MDU3X0dQUEdDUjEpOworCXVkZWxheSgxKTsKK30KKworLyoKKyAqIFdhaXQgdGlsIHBvc3Qgb2ZmaWNlIGlzIG5vIGxvbmdlciBidXN5CisgKi8KKworaW50Citwb3N0X29mZmljZV93YWl0IChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCXUzMiBwb3I7CisKKy8vICAgICAgd2hpbGUgKCgocG9yID0gYnRyZWFkKFpSMzYwNTdfUE9SKSkgJiAoWlIzNjA1N19QT1JfUE9QZW4gfCBaUjM2MDU3X1BPUl9QT1RpbWUpKSA9PSBaUjM2MDU3X1BPUl9QT1BlbikgeworCXdoaWxlICgocG9yID0gYnRyZWFkKFpSMzYwNTdfUE9SKSkgJiBaUjM2MDU3X1BPUl9QT1BlbikgeworCQkvKiB3YWl0IGZvciBzb21ldGhpbmcgdG8gaGFwcGVuICovCisJfQorCWlmICgocG9yICYgWlIzNjA1N19QT1JfUE9UaW1lKSAmJiAhenItPmNhcmQuZ3dzX25vdF9jb25uZWN0ZWQpIHsKKwkJLyogSW4gTE1MMzMvQlVaIFxHV1MgbGluZSBpcyBub3QgY29ubmVjdGVkLCBzbyBpdCBoYXMgYWx3YXlzIHRpbWVvdXQgc2V0ICovCisJCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogcG9wIHRpbWVvdXQgJTA4eFxuIiwgWlJfREVWTkFNRSh6ciksCisJCQlwb3IpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludAorcG9zdF9vZmZpY2Vfd3JpdGUgKHN0cnVjdCB6b3JhbiAqenIsCisJCSAgIHVuc2lnbmVkIGludCAgZ3Vlc3QsCisJCSAgIHVuc2lnbmVkIGludCAgcmVnLAorCQkgICB1bnNpZ25lZCBpbnQgIHZhbHVlKQoreworCXUzMiBwb3I7CisKKwlwb3IgPQorCSAgICBaUjM2MDU3X1BPUl9QT0RpciB8IFpSMzYwNTdfUE9SX1BPVGltZSB8ICgoZ3Vlc3QgJiA3KSA8PCAyMCkgfAorCSAgICAoKHJlZyAmIDcpIDw8IDE2KSB8ICh2YWx1ZSAmIDB4RkYpOworCWJ0d3JpdGUocG9yLCBaUjM2MDU3X1BPUik7CisKKwlyZXR1cm4gcG9zdF9vZmZpY2Vfd2FpdCh6cik7Cit9CisKK2ludAorcG9zdF9vZmZpY2VfcmVhZCAoc3RydWN0IHpvcmFuICp6ciwKKwkJICB1bnNpZ25lZCBpbnQgIGd1ZXN0LAorCQkgIHVuc2lnbmVkIGludCAgcmVnKQoreworCXUzMiBwb3I7CisKKwlwb3IgPSBaUjM2MDU3X1BPUl9QT1RpbWUgfCAoKGd1ZXN0ICYgNykgPDwgMjApIHwgKChyZWcgJiA3KSA8PCAxNik7CisJYnR3cml0ZShwb3IsIFpSMzYwNTdfUE9SKTsKKwlpZiAocG9zdF9vZmZpY2Vfd2FpdCh6cikgPCAwKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gYnRyZWFkKFpSMzYwNTdfUE9SKSAmIDB4RkY7Cit9CisKKy8qCisgKiBkZXRlY3QgZ3Vlc3RzCisgKi8KKworc3RhdGljIHZvaWQKK2R1bXBfZ3Vlc3RzIChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCWlmICh6cjM2MDY3X2RlYnVnID4gMikgeworCQlpbnQgaSwgZ3Vlc3RbOF07CisKKwkJZm9yIChpID0gMTsgaSA8IDg7IGkrKykgewkvLyBEb24ndCByZWFkIGpwZWcgY29kZWMgaGVyZQorCQkJZ3Vlc3RbaV0gPSBwb3N0X29mZmljZV9yZWFkKHpyLCBpLCAwKTsKKwkJfQorCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBHdWVzdHM6IiwgWlJfREVWTkFNRSh6cikpOworCisJCWZvciAoaSA9IDE7IGkgPCA4OyBpKyspIHsKKwkJCXByaW50aygiIDB4JTAyeCIsIGd1ZXN0W2ldKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2dldF90aW1lICh2b2lkKQoreworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisJcmV0dXJuICgxMDAwMDAwICogdHYudHZfc2VjICsgdHYudHZfdXNlYyk7Cit9CisKK3ZvaWQKK2RldGVjdF9ndWVzdF9hY3Rpdml0eSAoc3RydWN0IHpvcmFuICp6cikKK3sKKwlpbnQgdGltZW91dCwgaSwgaiwgcmVzLCBndWVzdFs4XSwgZ3Vlc3QwWzhdLCBjaGFuZ2VbOF1bM107CisJdW5zaWduZWQgbG9uZyB0MCwgdDE7CisKKwlkdW1wX2d1ZXN0cyh6cik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERldGVjdGluZyBndWVzdHMgYWN0aXZpdHksIHBsZWFzZSB3YWl0Li4uXG4iLAorCSAgICAgICBaUl9ERVZOQU1FKHpyKSk7CisJZm9yIChpID0gMTsgaSA8IDg7IGkrKykgewkvLyBEb24ndCByZWFkIGpwZWcgY29kZWMgaGVyZQorCQlndWVzdDBbaV0gPSBndWVzdFtpXSA9IHBvc3Rfb2ZmaWNlX3JlYWQoenIsIGksIDApOworCX0KKworCXRpbWVvdXQgPSAwOworCWogPSAwOworCXQwID0gZ2V0X3RpbWUoKTsKKwl3aGlsZSAodGltZW91dCA8IDEwMDAwKSB7CisJCXVkZWxheSgxMCk7CisJCXRpbWVvdXQrKzsKKwkJZm9yIChpID0gMTsgKGkgPCA4KSAmJiAoaiA8IDgpOyBpKyspIHsKKwkJCXJlcyA9IHBvc3Rfb2ZmaWNlX3JlYWQoenIsIGksIDApOworCQkJaWYgKHJlcyAhPSBndWVzdFtpXSkgeworCQkJCXQxID0gZ2V0X3RpbWUoKTsKKwkJCQljaGFuZ2Vbal1bMF0gPSAodDEgLSB0MCk7CisJCQkJdDAgPSB0MTsKKwkJCQljaGFuZ2Vbal1bMV0gPSBpOworCQkJCWNoYW5nZVtqXVsyXSA9IHJlczsKKwkJCQlqKys7CisJCQkJZ3Vlc3RbaV0gPSByZXM7CisJCQl9CisJCX0KKwkJaWYgKGogPj0gOCkKKwkJCWJyZWFrOworCX0KKwlwcmludGsoS0VSTl9JTkZPICIlczogR3Vlc3RzOiIsIFpSX0RFVk5BTUUoenIpKTsKKworCWZvciAoaSA9IDE7IGkgPCA4OyBpKyspIHsKKwkJcHJpbnRrKCIgMHglMDJ4IiwgZ3Vlc3QwW2ldKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCWlmIChqID09IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIGFjdGl2aXR5IGRldGVjdGVkLlxuIiwgWlJfREVWTkFNRSh6cikpOworCQlyZXR1cm47CisJfQorCWZvciAoaSA9IDA7IGkgPCBqOyBpKyspIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICU2ZDogJWQgPT4gMHglMDJ4XG4iLCBaUl9ERVZOQU1FKHpyKSwKKwkJICAgICAgIGNoYW5nZVtpXVswXSwgY2hhbmdlW2ldWzFdLCBjaGFuZ2VbaV1bMl0pOworCX0KK30KKworLyoKKyAqIEpQRUcgQ29kZWMgYWNjZXNzCisgKi8KKwordm9pZAoranBlZ19jb2RlY19zbGVlcCAoc3RydWN0IHpvcmFuICp6ciwKKwkJICBpbnQgICAgICAgICAgIHNsZWVwKQoreworCUdQSU8oenIsIHpyLT5jYXJkLmdwaW9bWlJfR1BJT19KUEVHX1NMRUVQXSwgIXNsZWVwKTsKKwlpZiAoIXNsZWVwKSB7CisJCWRwcmludGsoMywKKwkJCUtFUk5fREVCVUcKKwkJCSIlczoganBlZ19jb2RlY19zbGVlcCgpIC0gd2FrZSBHUElPPTB4JTA4eFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBidHJlYWQoWlIzNjA1N19HUFBHQ1IxKSk7CisJCXVkZWxheSg1MDApOworCX0gZWxzZSB7CisJCWRwcmludGsoMywKKwkJCUtFUk5fREVCVUcKKwkJCSIlczoganBlZ19jb2RlY19zbGVlcCgpIC0gc2xlZXAgR1BJTz0weCUwOHhcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgYnRyZWFkKFpSMzYwNTdfR1BQR0NSMSkpOworCQl1ZGVsYXkoMik7CisJfQorfQorCitpbnQKK2pwZWdfY29kZWNfcmVzZXQgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJLyogVGFrZSB0aGUgY29kZWMgb3V0IG9mIHNsZWVwICovCisJanBlZ19jb2RlY19zbGVlcCh6ciwgMCk7CisKKwlpZiAoenItPmNhcmQuZ3Bjc1tHUENTX0pQRUdfUkVTRVRdICE9IDB4ZmYpIHsKKwkJcG9zdF9vZmZpY2Vfd3JpdGUoenIsIHpyLT5jYXJkLmdwY3NbR1BDU19KUEVHX1JFU0VUXSwgMCwKKwkJCQkgIDApOworCQl1ZGVsYXkoMik7CisJfSBlbHNlIHsKKwkJR1BJTyh6ciwgenItPmNhcmQuZ3Bpb1taUl9HUElPX0pQRUdfUkVTRVRdLCAwKTsKKwkJdWRlbGF5KDIpOworCQlHUElPKHpyLCB6ci0+Y2FyZC5ncGlvW1pSX0dQSU9fSlBFR19SRVNFVF0sIDEpOworCQl1ZGVsYXkoMik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgIFNldCB0aGUgcmVnaXN0ZXJzIGZvciB0aGUgc2l6ZSB3ZSBoYXZlIHNwZWNpZmllZC4gRG9uJ3QgYm90aGVyCisgKiAgIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoaXMgd2l0aG91dCB0aGUgWlIzNjA1NyBtYW51YWwgaW4gZnJvbnQgb2YKKyAqICAgeW91IFtBQ10uCisgKgorICogICBQUzogVGhlIG1hbnVhbCBpcyBmcmVlIGZvciBkb3dubG9hZCBpbiAucGRmIGZvcm1hdCBmcm9tCisgKiAgIHd3dy56b3Jhbi5jb20gLSBuaWNlbHkgZG9uZSB0aG9zZSBmb2xrcy4KKyAqLworCitzdGF0aWMgdm9pZAorenIzNjA1N19hZGp1c3RfdmZlIChzdHJ1Y3Qgem9yYW4gICAgICAgICAgKnpyLAorCQkgICAgZW51bSB6b3Jhbl9jb2RlY19tb2RlICBtb2RlKQoreworCXUzMiByZWc7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOgorCQlidGFuZCh+WlIzNjA1N19WRkVTUEZSX0V4dEZsLCBaUjM2MDU3X1ZGRVNQRlIpOworCQlyZWcgPSBidHJlYWQoWlIzNjA1N19WRkVIQ1IpOworCQlpZiAoKHJlZyAmICgxIDw8IDEwKSkgJiYgenItPmNhcmQudHlwZSAhPSBMTUwzM1IxMCkgeworCQkJcmVnICs9ICgoMSA8PCAxMCkgfCAxKTsKKwkJfQorCQlidHdyaXRlKHJlZywgWlIzNjA1N19WRkVIQ1IpOworCQlicmVhazsKKwljYXNlIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzoKKwljYXNlIEJVWl9NT0RFX0lETEU6CisJZGVmYXVsdDoKKwkJaWYgKHpyLT5ub3JtID09IFZJREVPX01PREVfTlRTQyB8fAorCQkgICAgKHpyLT5jYXJkLnR5cGUgPT0gTE1MMzNSMTAgJiYKKwkJICAgICB6ci0+bm9ybSA9PSBWSURFT19NT0RFX1BBTCkpCisJCQlidGFuZCh+WlIzNjA1N19WRkVTUEZSX0V4dEZsLCBaUjM2MDU3X1ZGRVNQRlIpOworCQllbHNlCisJCQlidG9yKFpSMzYwNTdfVkZFU1BGUl9FeHRGbCwgWlIzNjA1N19WRkVTUEZSKTsKKwkJcmVnID0gYnRyZWFkKFpSMzYwNTdfVkZFSENSKTsKKwkJaWYgKCEocmVnICYgKDEgPDwgMTApKSAmJiB6ci0+Y2FyZC50eXBlICE9IExNTDMzUjEwKSB7CisJCQlyZWcgLT0gKCgxIDw8IDEwKSB8IDEpOworCQl9CisJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZGRUhDUik7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIHNldCBnZW9tZXRyeQorICovCisKK3N0YXRpYyB2b2lkCit6cjM2MDU3X3NldF92ZmUgKHN0cnVjdCB6b3JhbiAgICAgICAgICAgICAgKnpyLAorCQkgaW50ICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fd2lkdGgsCisJCSBpbnQgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb19oZWlnaHQsCisJCSBjb25zdCBzdHJ1Y3Qgem9yYW5fZm9ybWF0ICpmb3JtYXQpCit7CisJc3RydWN0IHR2bm9ybSAqdHZuOworCXVuc2lnbmVkIEhTdGFydCwgSEVuZCwgVlN0YXJ0LCBWRW5kOworCXVuc2lnbmVkIERpc3BNb2RlOworCXVuc2lnbmVkIFZpZFdpbldpZCwgVmlkV2luSHQ7CisJdW5zaWduZWQgaGNyb3AxLCBoY3JvcDIsIHZjcm9wMSwgdmNyb3AyOworCXVuc2lnbmVkIFdhLCBXZSwgSGEsIEhlOworCXVuc2lnbmVkIFgsIFksIEhvckRjbSwgVmVyRGNtOworCXUzMiByZWc7CisJdW5zaWduZWQgbWFza19saW5lX3NpemU7CisKKwl0dm4gPSB6ci0+dGltaW5nOworCisJV2EgPSB0dm4tPldhOworCUhhID0gdHZuLT5IYTsKKworCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogc2V0X3ZmZSgpIC0gd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsCisJCVpSX0RFVk5BTUUoenIpLCB2aWRlb193aWR0aCwgdmlkZW9faGVpZ2h0KTsKKworCWlmICh6ci0+bm9ybSAhPSBWSURFT19NT0RFX1BBTCAmJgorCSAgICB6ci0+bm9ybSAhPSBWSURFT19NT0RFX05UU0MgJiYKKwkgICAgenItPm5vcm0gIT0gVklERU9fTU9ERV9TRUNBTSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUiAiJXM6IHNldF92ZmUoKSAtIG5vcm0gPSAlZCBub3QgdmFsaWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgenItPm5vcm0pOworCQlyZXR1cm47CisJfQorCWlmICh2aWRlb193aWR0aCA8IEJVWl9NSU5fV0lEVEggfHwKKwkgICAgdmlkZW9faGVpZ2h0IDwgQlVaX01JTl9IRUlHSFQgfHwKKwkgICAgdmlkZW9fd2lkdGggPiBXYSB8fCB2aWRlb19oZWlnaHQgPiBIYSkgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogc2V0X3ZmZTogdz0lZCBoPSVkIG5vdCB2YWxpZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCB2aWRlb193aWR0aCwgdmlkZW9faGVpZ2h0KTsKKwkJcmV0dXJuOworCX0KKworCS8qKioqIHpyMzYwNTcgKioqKi8KKworCS8qIGhvcml6b250YWwgKi8KKwlWaWRXaW5XaWQgPSB2aWRlb193aWR0aDsKKwlYID0gRElWX1JPVU5EX1VQKFZpZFdpbldpZCAqIDY0LCB0dm4tPldhKTsKKwlXZSA9IChWaWRXaW5XaWQgKiA2NCkgLyBYOworCUhvckRjbSA9IDY0IC0gWDsKKwloY3JvcDEgPSAyICogKCh0dm4tPldhIC0gV2UpIC8gNCk7CisJaGNyb3AyID0gdHZuLT5XYSAtIFdlIC0gaGNyb3AxOworCUhTdGFydCA9IHR2bi0+SFN0YXJ0ID8gdHZuLT5IU3RhcnQgOiAxOworCS8qIChSb25hbGQpIE9yaWdpbmFsIGNvbW1lbnQ6CisJICogInwgMSBEb2Vzbid0IGhhdmUgYW55IGVmZmVjdCwgdGVzdGVkIG9uIGJvdGggYSBEQzEwIGFuZCBhIERDMTArIgorCSAqIHRoaXMgaXMgZmFsc2UuIEl0IGludmVyc2VzIGNocm9tYSB2YWx1ZXMgb24gdGhlIExNTDMzUjEwIChzbyBDcgorCSAqIHN1ZGRlbmx5IGlzIHNob3duIGFzIENiIGFuZCByZXZlcnNlLCByZWFsbHkgY29vbCBlZmZlY3QgaWYgeW91CisJICogd2FudCB0byBzZWUgYmx1ZSBmYWNlcywgbm90IHVzZWZ1bCBvdGhlcndpc2UpLiBTbyBkb24ndCB1c2UgfDEuCisJICogSG93ZXZlciwgdGhlIERDMTAgaGFzICcwJyBhcyBIU3RhcnQsIGJ1dCBkb2VzIG5lZWQgfDEsIHNvIHdlCisJICogdXNlIGEgZGlydHkgY2hlY2suLi4KKwkgKi8KKwlIRW5kID0gSFN0YXJ0ICsgdHZuLT5XYSAtIDE7CisJSFN0YXJ0ICs9IGhjcm9wMTsKKwlIRW5kIC09IGhjcm9wMjsKKwlyZWcgPSAoKEhTdGFydCAmIFpSMzYwNTdfVkZFSENSX0htYXNrKSA8PCBaUjM2MDU3X1ZGRUhDUl9IU3RhcnQpCisJICAgIHwgKChIRW5kICYgWlIzNjA1N19WRkVIQ1JfSG1hc2spIDw8IFpSMzYwNTdfVkZFSENSX0hFbmQpOworCWlmICh6ci0+Y2FyZC52ZmVfcG9sLmhzeW5jX3BvbCkKKwkJcmVnIHw9IFpSMzYwNTdfVkZFSENSX0hTUG9sOworCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZGRUhDUik7CisKKwkvKiBWZXJ0aWNhbCAqLworCURpc3BNb2RlID0gISh2aWRlb19oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCAvIDIpOworCVZpZFdpbkh0ID0gRGlzcE1vZGUgPyB2aWRlb19oZWlnaHQgOiB2aWRlb19oZWlnaHQgLyAyOworCVkgPSBESVZfUk9VTkRfVVAoVmlkV2luSHQgKiA2NCAqIDIsIHR2bi0+SGEpOworCUhlID0gKFZpZFdpbkh0ICogNjQpIC8gWTsKKwlWZXJEY20gPSA2NCAtIFk7CisJdmNyb3AxID0gKHR2bi0+SGEgLyAyIC0gSGUpIC8gMjsKKwl2Y3JvcDIgPSB0dm4tPkhhIC8gMiAtIEhlIC0gdmNyb3AxOworCVZTdGFydCA9IHR2bi0+VlN0YXJ0OworCVZFbmQgPSBWU3RhcnQgKyB0dm4tPkhhIC8gMjsJLy8gLSAxOyBGSVhNRSBTbmFwU2hvdCB0aW1lcyBvdXQgd2l0aCAtMSBpbiA3NjgqNTc2IG9uIHRoZSBEQzEwIC0gTFAKKwlWU3RhcnQgKz0gdmNyb3AxOworCVZFbmQgLT0gdmNyb3AyOworCXJlZyA9ICgoVlN0YXJ0ICYgWlIzNjA1N19WRkVWQ1JfVm1hc2spIDw8IFpSMzYwNTdfVkZFVkNSX1ZTdGFydCkKKwkgICAgfCAoKFZFbmQgJiBaUjM2MDU3X1ZGRVZDUl9WbWFzaykgPDwgWlIzNjA1N19WRkVWQ1JfVkVuZCk7CisJaWYgKHpyLT5jYXJkLnZmZV9wb2wudnN5bmNfcG9sKQorCQlyZWcgfD0gWlIzNjA1N19WRkVWQ1JfVlNQb2w7CisJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkZFVkNSKTsKKworCS8qIHNjYWxlciBhbmQgcGl4ZWwgZm9ybWF0ICovCisJcmVnID0gMDsKKwlyZWcgfD0gKEhvckRjbSA8PCBaUjM2MDU3X1ZGRVNQRlJfSG9yRGNtKTsKKwlyZWcgfD0gKFZlckRjbSA8PCBaUjM2MDU3X1ZGRVNQRlJfVmVyRGNtKTsKKwlyZWcgfD0gKERpc3BNb2RlIDw8IFpSMzYwNTdfVkZFU1BGUl9EaXNwTW9kZSk7CisJLyogUko6IEkgZG9uJ3Qga25vdywgd2h5IHRoZSBmb2xsb3dpbmcgaGFzIHRvIGJlIHRoZSBvcHBvc2l0ZQorCSAqIG9mIHRoZSBjb3JyZXNwb25kaW5nIFpSMzYwNjAgc2V0dGluZywgYnV0IG9ubHkgdGhpcyB3YXkKKwkgKiB3ZSBnZXQgdGhlIGNvcnJlY3QgY29sb3JzIHdoZW4gdW5jb21wcmVzc2luZyB0byB0aGUgc2NyZWVuICAqLworCS8vcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9WQ0xLUG9sOyAvKiovCisJLyogUko6IERvbid0IGtub3cgaWYgdGhhdCBpcyBuZWVkZWQgZm9yIE5UU0MgYWxzbyAqLworCWlmICh6ci0+bm9ybSAhPSBWSURFT19NT0RFX05UU0MpCisJCXJlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfRXh0Rmw7CS8vIE5FRURFRCEhISEhISEgV29sZmdhbmcKKwlyZWcgfD0gWlIzNjA1N19WRkVTUEZSX1RvcEZpZWxkOworCWlmIChIb3JEY20gPj0gNDgpIHsKKwkJcmVnIHw9IDMgPDwgWlIzNjA1N19WRkVTUEZSX0hGaWx0ZXI7CS8qIDUgdGFwIGZpbHRlciAqLworCX0gZWxzZSBpZiAoSG9yRGNtID49IDMyKSB7CisJCXJlZyB8PSAyIDw8IFpSMzYwNTdfVkZFU1BGUl9IRmlsdGVyOwkvKiA0IHRhcCBmaWx0ZXIgKi8KKwl9IGVsc2UgaWYgKEhvckRjbSA+PSAxNikgeworCQlyZWcgfD0gMSA8PCBaUjM2MDU3X1ZGRVNQRlJfSEZpbHRlcjsJLyogMyB0YXAgZmlsdGVyICovCisJfQorCXJlZyB8PSBmb3JtYXQtPnZmZXNwZnI7CisJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkZFU1BGUik7CisKKwkvKiBkaXNwbGF5IGNvbmZpZ3VyYXRpb24gKi8KKwlyZWcgPSAoMTYgPDwgWlIzNjA1N19WRENSX01pblBpeCkKKwkgICAgfCAoVmlkV2luSHQgPDwgWlIzNjA1N19WRENSX1ZpZFdpbkh0KQorCSAgICB8IChWaWRXaW5XaWQgPDwgWlIzNjA1N19WRENSX1ZpZFdpbldpZCk7CisJaWYgKHBjaV9wY2lfcHJvYmxlbXMgJiBQQ0lQQ0lfVFJJVE9OKQorCQkvLyB8fCB6ci0+cmV2aXNpb24gPCAxKSAvLyBSZXZpc2lvbiAxIGhhcyBhbHNvIFRyaXRvbiBzdXBwb3J0CisJCXJlZyAmPSB+WlIzNjA1N19WRENSX1RyaXRvbjsKKwllbHNlCisJCXJlZyB8PSBaUjM2MDU3X1ZEQ1JfVHJpdG9uOworCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEQ1IpOworCisJLyogKFJvbmFsZCkgZG9uJ3Qgd3JpdGUgdGhpcyBpZiBvdmVybGF5X21hc2sgPSBOVUxMICovCisJaWYgKHpyLT5vdmVybGF5X21hc2spIHsKKwkJLyogV3JpdGUgb3ZlcmxheSBjbGlwcGluZyBtYXNrIGRhdGEsIGJ1dCBkb24ndCBlbmFibGUgb3ZlcmxheSBjbGlwcGluZyAqLworCQkvKiBSSjogc2luY2UgdGhpcyBtYWtlcyBvbmx5IHNlbnNlIG9uIHRoZSBzY3JlZW4sIHdlIHVzZQorCQkgKiB6ci0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCBpbnN0ZWFkIG9mIHZpZGVvX3dpZHRoICovCisKKwkJbWFza19saW5lX3NpemUgPSAoQlVaX01BWF9XSURUSCArIDMxKSAvIDMyOworCQlyZWcgPSB2aXJ0X3RvX2J1cyh6ci0+b3ZlcmxheV9tYXNrKTsKKwkJYnR3cml0ZShyZWcsIFpSMzYwNTdfTU1UUik7CisJCXJlZyA9IHZpcnRfdG9fYnVzKHpyLT5vdmVybGF5X21hc2sgKyBtYXNrX2xpbmVfc2l6ZSk7CisJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X01NQlIpOworCQlyZWcgPQorCQkgICAgbWFza19saW5lX3NpemUgLSAoenItPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGggKworCQkJCSAgICAgIDMxKSAvIDMyOworCQlpZiAoRGlzcE1vZGUgPT0gMCkKKwkJCXJlZyArPSBtYXNrX2xpbmVfc2l6ZTsKKwkJcmVnIDw8PSBaUjM2MDU3X09DUl9NYXNrU3RyaWRlOworCQlidHdyaXRlKHJlZywgWlIzNjA1N19PQ1IpOworCX0KKworCXpyMzYwNTdfYWRqdXN0X3ZmZSh6ciwgenItPmNvZGVjX21vZGUpOworfQorCisvKgorICogU3dpdGNoIG92ZXJsYXkgb24gb3Igb2ZmCisgKi8KKwordm9pZAorenIzNjA1N19vdmVybGF5IChzdHJ1Y3Qgem9yYW4gKnpyLAorCQkgaW50ICAgICAgICAgICBvbikKK3sKKwl1MzIgcmVnOworCisJaWYgKG9uKSB7CisJCS8qIGRvIHRoZSBuZWNlc3Nhcnkgc2V0dGluZ3MgLi4uICovCisJCWJ0YW5kKH5aUjM2MDU3X1ZEQ1JfVmlkRW4sIFpSMzYwNTdfVkRDUik7CS8qIHN3aXRjaCBpdCBvZmYgZmlyc3QgKi8KKworCQl6cjM2MDU3X3NldF92ZmUoenIsCisJCQkJenItPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGgsCisJCQkJenItPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0LAorCQkJCXpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCk7CisKKwkJLyogU3RhcnQgYW5kIGxlbmd0aCBvZiBlYWNoIGxpbmUgTVVTVCBiZSA0LWJ5dGUgYWxpZ25lZC4KKwkJICogVGhpcyBzaG91bGQgYmUgYWxscmVhZHkgY2hlY2tlZCBiZWZvcmUgdGhlIGNhbGwgdG8gdGhpcyByb3V0aW5lLgorCQkgKiBBbGwgZXJyb3IgbWVzc2FnZXMgYXJlIGludGVybmFsIGRyaXZlciBjaGVja2luZyBvbmx5ISAqLworCisJCS8qIHZpZGVvIGRpc3BsYXkgdG9wIGFuZCBib3R0b20gcmVnaXN0ZXJzICovCisJCXJlZyA9IChsb25nKSB6ci0+YnVmZmVyLmJhc2UgKworCQkgICAgenItPm92ZXJsYXlfc2V0dGluZ3MueCAqCisJCSAgICAoKHpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+ZGVwdGggKyA3KSAvIDgpICsKKwkJICAgIHpyLT5vdmVybGF5X3NldHRpbmdzLnkgKgorCQkgICAgenItPmJ1ZmZlci5ieXRlc3BlcmxpbmU7CisJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEVFIpOworCQlpZiAocmVnICYgMykKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogenIzNjA1N19vdmVybGF5KCkgLSB2aWRlb19hZGRyZXNzIG5vdCBhbGlnbmVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJaWYgKHpyLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUIC8gMikKKwkJCXJlZyArPSB6ci0+YnVmZmVyLmJ5dGVzcGVybGluZTsKKwkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRCUik7CisKKwkJLyogdmlkZW8gc3RyaWRlLCBzdGF0dXMsIGFuZCBmcmFtZSBncmFiIHJlZ2lzdGVyICovCisJCXJlZyA9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lIC0KKwkJICAgIHpyLT5vdmVybGF5X3NldHRpbmdzLndpZHRoICoKKwkJICAgICgoenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5kZXB0aCArIDcpIC8gOCk7CisJCWlmICh6ci0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCAvIDIpCisJCQlyZWcgKz0genItPmJ1ZmZlci5ieXRlc3BlcmxpbmU7CisJCWlmIChyZWcgJiAzKQorCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiB6cjM2MDU3X292ZXJsYXkoKSAtIHZpZGVvX3N0cmlkZSBub3QgYWxpZ25lZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlZyA9IChyZWcgPDwgWlIzNjA1N19WU1NGR1JfRGlzcFN0cmlkZSk7CisJCXJlZyB8PSBaUjM2MDU3X1ZTU0ZHUl9WaWRPdmY7CS8qIGNsZWFyIG92ZXJmbG93IHN0YXR1cyAqLworCQlidHdyaXRlKHJlZywgWlIzNjA1N19WU1NGR1IpOworCisJCS8qIFNldCBvdmVybGF5IGNsaXBwaW5nICovCisJCWlmICh6ci0+b3ZlcmxheV9zZXR0aW5ncy5jbGlwY291bnQgPiAwKQorCQkJYnRvcihaUjM2MDU3X09DUl9PdmxFbmFibGUsIFpSMzYwNTdfT0NSKTsKKworCQkvKiAuLi4gYW5kIHN3aXRjaCBpdCBvbiAqLworCQlidG9yKFpSMzYwNTdfVkRDUl9WaWRFbiwgWlIzNjA1N19WRENSKTsKKwl9IGVsc2UgeworCQkvKiBTd2l0Y2ggaXQgb2ZmICovCisJCWJ0YW5kKH5aUjM2MDU3X1ZEQ1JfVmlkRW4sIFpSMzYwNTdfVkRDUik7CisJfQorfQorCisvKgorICogVGhlIG92ZXJsYXkgbWFzayBoYXMgb25lIGJpdCBmb3IgZWFjaCBwaXhlbCBvbiBhIHNjYW4gbGluZSwKKyAqICBhbmQgdGhlIG1heGltdW0gd2luZG93IHNpemUgaXMgQlVaX01BWF9XSURUSCAqIEJVWl9NQVhfSEVJR0hUIHBpeGVscy4KKyAqLworCit2b2lkCit3cml0ZV9vdmVybGF5X21hc2sgKHN0cnVjdCBmaWxlICAgICAgICpmaWxlLAorCQkgICAgc3RydWN0IHZpZGVvX2NsaXAgKnZwLAorCQkgICAgaW50ICAgICAgICAgICAgICAgIGNvdW50KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwl1bnNpZ25lZCBtYXNrX2xpbmVfc2l6ZSA9IChCVVpfTUFYX1dJRFRIICsgMzEpIC8gMzI7CisJdTMyICptYXNrOworCWludCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworCXVuc2lnbmVkIGksIGosIGs7CisJdTMyIHJlZzsKKworCS8qIGZpbGwgbWFzayB3aXRoIG9uZSBiaXRzICovCisJbWVtc2V0KGZoLT5vdmVybGF5X21hc2ssIH4wLCBtYXNrX2xpbmVfc2l6ZSAqIDQgKiBCVVpfTUFYX0hFSUdIVCk7CisJcmVnID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisJCS8qIHBpY2sgdXAgbG9jYWwgY29weSBvZiBjbGlwICovCisJCXggPSB2cFtpXS54OworCQl5ID0gdnBbaV0ueTsKKwkJd2lkdGggPSB2cFtpXS53aWR0aDsKKwkJaGVpZ2h0ID0gdnBbaV0uaGVpZ2h0OworCisJCS8qIHRyaW0gY2xpcHMgdGhhdCBleHRlbmQgYmV5b25kIHRoZSB3aW5kb3cgKi8KKwkJaWYgKHggPCAwKSB7CisJCQl3aWR0aCArPSB4OworCQkJeCA9IDA7CisJCX0KKwkJaWYgKHkgPCAwKSB7CisJCQloZWlnaHQgKz0geTsKKwkJCXkgPSAwOworCQl9CisJCWlmICh4ICsgd2lkdGggPiBmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCkgeworCQkJd2lkdGggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCAtIHg7CisJCX0KKwkJaWYgKHkgKyBoZWlnaHQgPiBmaC0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQpIHsKKwkJCWhlaWdodCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodCAtIHk7CisJCX0KKworCQkvKiBpZ25vcmUgZGVnZW5lcmF0ZSBjbGlwcyAqLworCQlpZiAoaGVpZ2h0IDw9IDApIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh3aWR0aCA8PSAwKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGFwcGx5IGNsaXAgZm9yIGVhY2ggc2NhbiBsaW5lICovCisJCWZvciAoaiA9IDA7IGogPCBoZWlnaHQ7ICsraikgeworCQkJLyogcmVzZXQgYml0IGZvciBlYWNoIHBpeGVsICovCisJCQkvKiB0aGlzIGNhbiBiZSBvcHRpbWl6ZWQgbGF0ZXIgaWYgbmVlZCBiZSAqLworCQkJbWFzayA9IGZoLT5vdmVybGF5X21hc2sgKyAoeSArIGopICogbWFza19saW5lX3NpemU7CisJCQlmb3IgKGsgPSAwOyBrIDwgd2lkdGg7ICsraykgeworCQkJCW1hc2tbKHggKyBrKSAvIDMyXSAmPQorCQkJCSAgICB+KCh1MzIpIDEgPDwgKHggKyBrKSAlIDMyKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyogRW5hYmxlL0Rpc2FibGUgdW5jb21wcmVzc2VkIG1lbW9yeSBncmFiYmluZyBvZiB0aGUgMzYwNTcgKi8KKwordm9pZAorenIzNjA1N19zZXRfbWVtZ3JhYiAoc3RydWN0IHpvcmFuICp6ciwKKwkJICAgICBpbnQgICAgICAgICAgIG1vZGUpCit7CisJaWYgKG1vZGUpIHsKKwkJLyogV2Ugb25seSBjaGVjayBTbmFwU2hvdCBhbmQgbm90IEZyYW1lR3JhYiBoZXJlLiAgU25hcFNob3Q9PTEKKwkJICogbWVhbnMgYSBjYXB0dXJlIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIGJ1dCBGcmFtZUdyYWI9PTEKKwkJICogZG9lc24ndCBuZWNlc3NhcnkgbWVhbiB0aGF0LiAgSXQncyBtb3JlIGNvcnJlY3QgdG8gc2F5IGEgMQorCQkgKiB0byAwIHRyYW5zaXRpb24gaW5kaWNhdGVzIGEgY2FwdHVyZSBjb21wbGV0ZWQuICBJZiBhCisJCSAqIGNhcHR1cmUgaXMgcGVuZGluZyB3aGVuIGNhcHR1cmluZyBpcyB0dW5lZCBvZmYsIEZyYW1lR3JhYgorCQkgKiB3aWxsIGJlIHN0dWNrIGF0IDEgdW50aWwgY2FwdHVyaW5nIGlzIHR1cm5lZCBiYWNrIG9uLgorCQkgKi8KKwkJaWYgKGJ0cmVhZChaUjM2MDU3X1ZTU0ZHUikgJiBaUjM2MDU3X1ZTU0ZHUl9TbmFwU2hvdCkKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX1dBUk5JTkcKKwkJCQkiJXM6IHpyMzYwNTdfc2V0X21lbWdyYWIoMSkgd2l0aCBTbmFwU2hvdCBvbiE/XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKworCQkvKiBzd2l0Y2ggb24gVlN5bmMgaW50ZXJydXB0cyAqLworCQlidHdyaXRlKElSUV9NQVNLLCBaUjM2MDU3X0lTUik7CS8vIENsZWFyIEludGVycnVwdHMKKwkJYnRvcih6ci0+Y2FyZC52c3luY19pbnQsIFpSMzYwNTdfSUNSKTsJLy8gU1cKKworCQkvKiBlbmFibGUgU25hcFNob3QgKi8KKwkJYnRvcihaUjM2MDU3X1ZTU0ZHUl9TbmFwU2hvdCwgWlIzNjA1N19WU1NGR1IpOworCisJCS8qIFNldCB6cjM2MDU3IHZpZGVvIGZyb250IGVuZCAgYW5kIGVuYWJsZSB2aWRlbyAqLworCQl6cjM2MDU3X3NldF92ZmUoenIsIHpyLT52NGxfc2V0dGluZ3Mud2lkdGgsCisJCQkJenItPnY0bF9zZXR0aW5ncy5oZWlnaHQsCisJCQkJenItPnY0bF9zZXR0aW5ncy5mb3JtYXQpOworCisJCXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgPSAxOworCX0gZWxzZSB7CisJCS8qIHN3aXRjaCBvZmYgVlN5bmMgaW50ZXJydXB0cyAqLworCQlidGFuZCh+enItPmNhcmQudnN5bmNfaW50LCBaUjM2MDU3X0lDUik7CS8vIFNXCisKKwkJenItPnY0bF9tZW1ncmFiX2FjdGl2ZSA9IDA7CisJCXpyLT52NGxfZ3JhYl9mcmFtZSA9IE5PX0dSQUJfQUNUSVZFOworCisJCS8qIHJlZW5hYmxlIGdyYWJiaW5nIHRvIHNjcmVlbiBpZiBpdCB3YXMgcnVubmluZyAqLworCQlpZiAoenItPnY0bF9vdmVybGF5X2FjdGl2ZSkgeworCQkJenIzNjA1N19vdmVybGF5KHpyLCAxKTsKKwkJfSBlbHNlIHsKKwkJCWJ0YW5kKH5aUjM2MDU3X1ZEQ1JfVmlkRW4sIFpSMzYwNTdfVkRDUik7CisJCQlidGFuZCh+WlIzNjA1N19WU1NGR1JfU25hcFNob3QsIFpSMzYwNTdfVlNTRkdSKTsKKwkJfQorCX0KK30KKworaW50Cit3YWl0X2dyYWJfcGVuZGluZyAoc3RydWN0IHpvcmFuICp6cikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogd2FpdCB1bnRpbCBhbGwgcGVuZGluZyBncmFicyBhcmUgZmluaXNoZWQgKi8KKworCWlmICghenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkKKwkJcmV0dXJuIDA7CisKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoenItPnY0bF9jYXBxLAorCQkJKHpyLT52NGxfcGVuZF90YWlsID09IHpyLT52NGxfcGVuZF9oZWFkKSk7CisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgU2V0IHVwIHRoZSBCdXotc3BlY2lmaWMgTUpQRUcgcGFydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF9mcmFtZSAoc3RydWN0IHpvcmFuICp6ciwKKwkgICBpbnQgICAgICAgICAgIHZhbCkKK3sKKwlHUElPKHpyLCB6ci0+Y2FyZC5ncGlvW1pSX0dQSU9fSlBFR19GUkFNRV0sIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfdmlkZW9idXNfZGlyIChzdHJ1Y3Qgem9yYW4gKnpyLAorCQkgIGludCAgICAgICAgICAgdmFsKQoreworCXN3aXRjaCAoenItPmNhcmQudHlwZSkgeworCWNhc2UgTE1MMzM6CisJY2FzZSBMTUwzM1IxMDoKKwkJaWYgKGxtbDMzZHBhdGggPT0gMCkKKwkJCUdQSU8oenIsIDUsIHZhbCk7CisJCWVsc2UKKwkJCUdQSU8oenIsIDUsIDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlHUElPKHpyLCB6ci0+Y2FyZC5ncGlvW1pSX0dQSU9fVklEX0RJUl0sCisJCSAgICAgenItPmNhcmQuZ3Bpb19wb2xbWlJfR1BJT19WSURfRElSXSA/ICF2YWwgOiB2YWwpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpbml0X2pwZWdfcXVldWUgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJaW50IGk7CisKKwkvKiByZS1pbml0aWFsaXplIERNQSByaW5nIHN0dWZmICovCisJenItPmpwZ19xdWVfaGVhZCA9IDA7CisJenItPmpwZ19kbWFfaGVhZCA9IDA7CisJenItPmpwZ19kbWFfdGFpbCA9IDA7CisJenItPmpwZ19xdWVfdGFpbCA9IDA7CisJenItPmpwZ19zZXFfbnVtID0gMDsKKwl6ci0+SlBFR19lcnJvciA9IDA7CisJenItPm51bV9lcnJvcnMgPSAwOworCXpyLT5qcGdfZXJyX3NlcSA9IDA7CisJenItPmpwZ19lcnJfc2hpZnQgPSAwOworCXpyLT5qcGdfcXVldWVkX251bSA9IDA7CisJZm9yIChpID0gMDsgaSA8IHpyLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7CisJCXpyLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsJLyogbm90aGluZyBnb2luZyBvbiAqLworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQlVaX05VTV9TVEFUX0NPTTsgaSsrKSB7CisJCXpyLT5zdGF0X2NvbVtpXSA9IGNwdV90b19sZTMyKDEpOwkvKiBtYXJrIGFzIHVuYXZhaWxhYmxlIHRvIHpyMzYwNTcgKi8KKwl9Cit9CisKK3N0YXRpYyB2b2lkCit6cjM2MDU3X3NldF9qcGcgKHN0cnVjdCB6b3JhbiAgICAgICAgICAqenIsCisJCSBlbnVtIHpvcmFuX2NvZGVjX21vZGUgIG1vZGUpCit7CisJc3RydWN0IHR2bm9ybSAqdHZuOworCXUzMiByZWc7CisKKwl0dm4gPSB6ci0+dGltaW5nOworCisJLyogYXNzZXJ0IFBfUmVzZXQsIGRpc2FibGUgY29kZSB0cmFuc2ZlciwgZGVhc3NlcnQgQWN0aXZlICovCisJYnR3cml0ZSgwLCBaUjM2MDU3X0pQQyk7CisKKwkvKiBNSlBFRyBjb21wcmVzc2lvbiBtb2RlICovCisJc3dpdGNoIChtb2RlKSB7CisKKwljYXNlIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzoKKwlkZWZhdWx0OgorCQlyZWcgPSBaUjM2MDU3X0pNQ19NSlBHQ21wTW9kZTsKKwkJYnJlYWs7CisKKwljYXNlIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOgorCQlyZWcgPSBaUjM2MDU3X0pNQ19NSlBHRXhwTW9kZTsKKwkJcmVnIHw9IFpSMzYwNTdfSk1DX1N5bmNNc3RyOworCQkvKiBSSjogVGhlIGZvbGxvd2luZyBpcyBleHBlcmltZW50YWwgLSBpbXByb3ZlcyB0aGUgb3V0cHV0IHRvIHNjcmVlbiAqLworCQkvL2lmKHpyLT5qcGdfc2V0dGluZ3MuVkZJRk9fRkIpIHJlZyB8PSBaUjM2MDU3X0pNQ19WRklGT19GQjsgLy8gTm8sIGl0IGRvZXNuJ3QuIFNNCisJCWJyZWFrOworCisJY2FzZSBCVVpfTU9ERV9TVElMTF9DT01QUkVTUzoKKwkJcmVnID0gWlIzNjA1N19KTUNfSlBHQ21wTW9kZTsKKwkJYnJlYWs7CisKKwljYXNlIEJVWl9NT0RFX1NUSUxMX0RFQ09NUFJFU1M6CisJCXJlZyA9IFpSMzYwNTdfSk1DX0pQR0V4cE1vZGU7CisJCWJyZWFrOworCisJfQorCXJlZyB8PSBaUjM2MDU3X0pNQ19KUEc7CisJaWYgKHpyLT5qcGdfc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPT0gMSkKKwkJcmVnIHw9IFpSMzYwNTdfSk1DX0ZsZF9wZXJfYnVmZjsKKwlidHdyaXRlKHJlZywgWlIzNjA1N19KTUMpOworCisJLyogdmVydGljYWwgKi8KKwlidG9yKFpSMzYwNTdfVkZFVkNSX1ZTUG9sLCBaUjM2MDU3X1ZGRVZDUik7CisJcmVnID0gKDYgPDwgWlIzNjA1N19WU1BfVnN5bmNTaXplKSB8CisJICAgICAgKHR2bi0+SHQgPDwgWlIzNjA1N19WU1BfRnJtVG90KTsKKwlidHdyaXRlKHJlZywgWlIzNjA1N19WU1ApOworCXJlZyA9ICgoenItPmpwZ19zZXR0aW5ncy5pbWdfeSArIHR2bi0+VlN0YXJ0KSA8PCBaUjM2MDU3X0ZWQVBfTkFZKSB8CisJICAgICAgKHpyLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCA8PCBaUjM2MDU3X0ZWQVBfUEFZKTsKKwlidHdyaXRlKHJlZywgWlIzNjA1N19GVkFQKTsKKworCS8qIGhvcml6b250YWwgKi8KKwlpZiAoenItPmNhcmQudmZlX3BvbC5oc3luY19wb2wpCisJCWJ0b3IoWlIzNjA1N19WRkVIQ1JfSFNQb2wsIFpSMzYwNTdfVkZFSENSKTsKKwllbHNlCisJCWJ0YW5kKH5aUjM2MDU3X1ZGRUhDUl9IU1BvbCwgWlIzNjA1N19WRkVIQ1IpOworCXJlZyA9ICgodHZuLT5IU3luY1N0YXJ0KSA8PCBaUjM2MDU3X0hTUF9Ic3luY1N0YXJ0KSB8CisJICAgICAgKHR2bi0+V3QgPDwgWlIzNjA1N19IU1BfTGluZVRvdCk7CisJYnR3cml0ZShyZWcsIFpSMzYwNTdfSFNQKTsKKwlyZWcgPSAoKHpyLT5qcGdfc2V0dGluZ3MuaW1nX3ggKworCQl0dm4tPkhTdGFydCArIDQpIDw8IFpSMzYwNTdfRkhBUF9OQVgpIHwKKwkgICAgICAoenItPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggPDwgWlIzNjA1N19GSEFQX1BBWCk7CisJYnR3cml0ZShyZWcsIFpSMzYwNTdfRkhBUCk7CisKKwkvKiBmaWVsZCBwcm9jZXNzIHBhcmFtZXRlcnMgKi8KKwlpZiAoenItPmpwZ19zZXR0aW5ncy5vZGRfZXZlbikKKwkJcmVnID0gWlIzNjA1N19GUFBfT2RkX0V2ZW47CisJZWxzZQorCQlyZWcgPSAwOworCisJYnR3cml0ZShyZWcsIFpSMzYwNTdfRlBQKTsKKworCS8qIFNldCBwcm9wZXIgVkNMSyBQb2xhcml0eSwgZWxzZSBjb2xvcnMgd2lsbCBiZSB3cm9uZyBkdXJpbmcgcGxheWJhY2sgKi8KKwkvL2J0b3IoWlIzNjA1N19WRkVTUEZSX1ZDTEtQb2wsIFpSMzYwNTdfVkZFU1BGUik7CisKKwkvKiBjb2RlIGJhc2UgYWRkcmVzcyAqLworCXJlZyA9IHZpcnRfdG9fYnVzKHpyLT5zdGF0X2NvbSk7CisJYnR3cml0ZShyZWcsIFpSMzYwNTdfSkNCQSk7CisKKwkvKiBGSUZPIHRocmVzaG9sZCAoRklGTyBpcyAxNjAuIGRvdWJsZSB3b3JkcykgKi8KKwkvKiBOT1RFOiBkZWNpbWFsIHZhbHVlcyBoZXJlICovCisJc3dpdGNoIChtb2RlKSB7CisKKwljYXNlIEJVWl9NT0RFX1NUSUxMX0NPTVBSRVNTOgorCWNhc2UgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTOgorCQlpZiAoenItPmNhcmQudHlwZSAhPSBCVVopCisJCQlyZWcgPSAxNDA7CisJCWVsc2UKKwkJCXJlZyA9IDYwOworCQlicmVhazsKKworCWNhc2UgQlVaX01PREVfU1RJTExfREVDT01QUkVTUzoKKwljYXNlIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOgorCQlyZWcgPSAyMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZWcgPSA4MDsKKwkJYnJlYWs7CisKKwl9CisJYnR3cml0ZShyZWcsIFpSMzYwNTdfSkNGVCk7CisJenIzNjA1N19hZGp1c3RfdmZlKHpyLCBtb2RlKTsKKworfQorCit2b2lkCitwcmludF9pbnRlcnJ1cHRzIChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCWludCByZXMsIG5vZXJyID0gMDsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnRlcnJ1cHRzIHJlY2VpdmVkOiIsIFpSX0RFVk5BTUUoenIpKTsKKwlpZiAoKHJlcyA9IHpyLT5maWVsZF9jb3VudGVyKSA8IC0xIHx8IHJlcyA+IDEpIHsKKwkJcHJpbnRrKCIgRkQ6JWQiLCByZXMpOworCX0KKwlpZiAoKHJlcyA9IHpyLT5pbnRyX2NvdW50ZXJfR0lSUTEpICE9IDApIHsKKwkJcHJpbnRrKCIgR0lSUTE6JWQiLCByZXMpOworCQlub2VycisrOworCX0KKwlpZiAoKHJlcyA9IHpyLT5pbnRyX2NvdW50ZXJfR0lSUTApICE9IDApIHsKKwkJcHJpbnRrKCIgR0lSUTA6JWQiLCByZXMpOworCQlub2VycisrOworCX0KKwlpZiAoKHJlcyA9IHpyLT5pbnRyX2NvdW50ZXJfQ29kUmVwSVJRKSAhPSAwKSB7CisJCXByaW50aygiIENvZFJlcElSUTolZCIsIHJlcyk7CisJCW5vZXJyKys7CisJfQorCWlmICgocmVzID0genItPmludHJfY291bnRlcl9KUEVHUmVwSVJRKSAhPSAwKSB7CisJCXByaW50aygiIEpQRUdSZXBJUlE6JWQiLCByZXMpOworCQlub2VycisrOworCX0KKwlpZiAoenItPkpQRUdfbWF4X21pc3NlZCkgeworCQlwcmludGsoIiBKUEVHIGRlbGF5czogbWF4PSVkIG1pbj0lZCIsIHpyLT5KUEVHX21heF9taXNzZWQsCisJCSAgICAgICB6ci0+SlBFR19taW5fbWlzc2VkKTsKKwl9CisJaWYgKHpyLT5FTkRfZXZlbnRfbWlzc2VkKSB7CisJCXByaW50aygiIEVORHMgbWlzc2VkOiAlZCIsIHpyLT5FTkRfZXZlbnRfbWlzc2VkKTsKKwl9CisJLy9pZiAoenItPmpwZ19xdWV1ZWRfbnVtKSB7CisJcHJpbnRrKCIgcXVldWVfc3RhdGU9JWxkLyVsZC8lbGQvJWxkIiwgenItPmpwZ19xdWVfdGFpbCwKKwkgICAgICAgenItPmpwZ19kbWFfdGFpbCwgenItPmpwZ19kbWFfaGVhZCwgenItPmpwZ19xdWVfaGVhZCk7CisJLy99CisJaWYgKCFub2VycikgeworCQlwcmludGsoIjogbm8gaW50ZXJydXB0cyBkZXRlY3RlZC4iKTsKKwl9CisJcHJpbnRrKCJcbiIpOworfQorCit2b2lkCitjbGVhcl9pbnRlcnJ1cHRfY291bnRlcnMgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJenItPmludHJfY291bnRlcl9HSVJRMSA9IDA7CisJenItPmludHJfY291bnRlcl9HSVJRMCA9IDA7CisJenItPmludHJfY291bnRlcl9Db2RSZXBJUlEgPSAwOworCXpyLT5pbnRyX2NvdW50ZXJfSlBFR1JlcElSUSA9IDA7CisJenItPmZpZWxkX2NvdW50ZXIgPSAwOworCXpyLT5JUlExX2luID0gMDsKKwl6ci0+SVJRMV9vdXQgPSAwOworCXpyLT5KUEVHX2luID0gMDsKKwl6ci0+SlBFR19vdXQgPSAwOworCXpyLT5KUEVHXzAgPSAwOworCXpyLT5KUEVHXzEgPSAwOworCXpyLT5FTkRfZXZlbnRfbWlzc2VkID0gMDsKKwl6ci0+SlBFR19taXNzZWQgPSAwOworCXpyLT5KUEVHX21heF9taXNzZWQgPSAwOworCXpyLT5KUEVHX21pbl9taXNzZWQgPSAweDdmZmZmZmZmOworfQorCitzdGF0aWMgdTMyCitjb3VudF9yZXNldF9pbnRlcnJ1cHQgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJdTMyIGlzcjsKKworCWlmICgoaXNyID0gYnRyZWFkKFpSMzYwNTdfSVNSKSAmIDB4NzgwMDAwMDApKSB7CisJCWlmIChpc3IgJiBaUjM2MDU3X0lTUl9HSVJRMSkgeworCQkJYnR3cml0ZShaUjM2MDU3X0lTUl9HSVJRMSwgWlIzNjA1N19JU1IpOworCQkJenItPmludHJfY291bnRlcl9HSVJRMSsrOworCQl9CisJCWlmIChpc3IgJiBaUjM2MDU3X0lTUl9HSVJRMCkgeworCQkJYnR3cml0ZShaUjM2MDU3X0lTUl9HSVJRMCwgWlIzNjA1N19JU1IpOworCQkJenItPmludHJfY291bnRlcl9HSVJRMCsrOworCQl9CisJCWlmIChpc3IgJiBaUjM2MDU3X0lTUl9Db2RSZXBJUlEpIHsKKwkJCWJ0d3JpdGUoWlIzNjA1N19JU1JfQ29kUmVwSVJRLCBaUjM2MDU3X0lTUik7CisJCQl6ci0+aW50cl9jb3VudGVyX0NvZFJlcElSUSsrOworCQl9CisJCWlmIChpc3IgJiBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRKSB7CisJCQlidHdyaXRlKFpSMzYwNTdfSVNSX0pQRUdSZXBJUlEsIFpSMzYwNTdfSVNSKTsKKwkJCXpyLT5pbnRyX2NvdW50ZXJfSlBFR1JlcElSUSsrOworCQl9CisJfQorCXJldHVybiBpc3I7Cit9CisKK3ZvaWQKK2pwZWdfc3RhcnQgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJaW50IHJlZzsKKworCXpyLT5mcmFtZV9udW0gPSAwOworCisJLyogZGVhc3NlcnQgUF9yZXNldCwgZGlzYWJsZSBjb2RlIHRyYW5zZmVyLCBkZWFzc2VydCBBY3RpdmUgKi8KKwlidHdyaXRlKFpSMzYwNTdfSlBDX1BfUmVzZXQsIFpSMzYwNTdfSlBDKTsKKwkvKiBzdG9wIGZsdXNoaW5nIHRoZSBpbnRlcm5hbCBjb2RlIGJ1ZmZlciAqLworCWJ0YW5kKH5aUjM2MDU3X01DVENSX0NGbHVzaCwgWlIzNjA1N19NQ1RDUik7CisJLyogZW5hYmxlIGNvZGUgdHJhbnNmZXIgKi8KKwlidG9yKFpSMzYwNTdfSlBDX0NvZFRybnNFbiwgWlIzNjA1N19KUEMpOworCisJLyogY2xlYXIgSVJRcyAqLworCWJ0d3JpdGUoSVJRX01BU0ssIFpSMzYwNTdfSVNSKTsKKwkvKiBlbmFibGUgdGhlIEpQRUcgSVJRcyAqLworCWJ0d3JpdGUoenItPmNhcmQuanBlZ19pbnQgfAorCQkJWlIzNjA1N19JQ1JfSlBFR1JlcElSUSB8CisJCQlaUjM2MDU3X0lDUl9JbnRQaW5FbiwKKwkJWlIzNjA1N19JQ1IpOworCisJc2V0X2ZyYW1lKHpyLCAwKTsJLy8gXEZSQU1FCisKKwkvKiBzZXQgdGhlIEpQRUcgY29kZWMgZ3Vlc3QgSUQgKi8KKwlyZWcgPSAoenItPmNhcmQuZ3Bjc1sxXSA8PCBaUjM2MDU3X0pDR0lfSlBFR3Vlc3RJRCkgfAorCSAgICAgICAoMCA8PCBaUjM2MDU3X0pDR0lfSlBFR3Vlc3RSZWcpOworCWJ0d3JpdGUocmVnLCBaUjM2MDU3X0pDR0kpOworCisJaWYgKHpyLT5jYXJkLnZpZGVvX3ZmZSA9PSBDT0RFQ19UWVBFX1pSMzYwMTYgJiYKKwkgICAgenItPmNhcmQudmlkZW9fY29kZWMgPT0gQ09ERUNfVFlQRV9aUjM2MDUwKSB7CisJCS8qIEVuYWJsZSBwcm9jZXNzaW5nIG9uIHRoZSBaUjM2MDE2ICovCisJCWlmICh6ci0+dmZlKQorCQkJenIzNjAxNl93cml0ZSh6ci0+dmZlLCAwLCAxKTsKKworCQkvKiBsb2FkIHRoZSBhZGRyZXNzIG9mIHRoZSBHTyByZWdpc3RlciBpbiB0aGUgWlIzNjA1MCBsYXRjaCAqLworCQlwb3N0X29mZmljZV93cml0ZSh6ciwgMCwgMCwgMCk7CisJfQorCisJLyogYXNzZXJ0IEFjdGl2ZSAqLworCWJ0b3IoWlIzNjA1N19KUENfQWN0aXZlLCBaUjM2MDU3X0pQQyk7CisKKwkvKiBlbmFibGUgdGhlIEdvIGdlbmVyYXRpb24gKi8KKwlidG9yKFpSMzYwNTdfSk1DX0dvX2VuLCBaUjM2MDU3X0pNQyk7CisJdWRlbGF5KDMwKTsKKworCXNldF9mcmFtZSh6ciwgMSk7CS8vIC9GUkFNRQorCisJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczoganBlZ19zdGFydFxuIiwgWlJfREVWTkFNRSh6cikpOworfQorCit2b2lkCit6cjM2MDU3X2VuYWJsZV9qcGcgKHN0cnVjdCB6b3JhbiAgICAgICAgICAqenIsCisJCSAgICBlbnVtIHpvcmFuX2NvZGVjX21vZGUgIG1vZGUpCit7CisJc3RhdGljIGludCB6ZXJvOworCXN0YXRpYyBpbnQgb25lID0gMTsKKwlzdHJ1Y3QgdmZlX3NldHRpbmdzIGNhcDsKKwlpbnQgZmllbGRfc2l6ZSA9CisJICAgIHpyLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAvIHpyLT5qcGdfc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmY7CisKKwl6ci0+Y29kZWNfbW9kZSA9IG1vZGU7CisKKwljYXAueCA9IHpyLT5qcGdfc2V0dGluZ3MuaW1nX3g7CisJY2FwLnkgPSB6ci0+anBnX3NldHRpbmdzLmltZ195OworCWNhcC53aWR0aCA9IHpyLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoOworCWNhcC5oZWlnaHQgPSB6ci0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQ7CisJY2FwLmRlY2ltYXRpb24gPQorCSAgICB6ci0+anBnX3NldHRpbmdzLkhvckRjbSB8ICh6ci0+anBnX3NldHRpbmdzLlZlckRjbSA8PCA4KTsKKwljYXAucXVhbGl0eSA9IHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAucXVhbGl0eTsKKworCXN3aXRjaCAobW9kZSkgeworCisJY2FzZSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M6IHsKKwkJc3RydWN0IGpwZWdfYXBwX21hcmtlciBhcHA7CisJCXN0cnVjdCBqcGVnX2NvbV9tYXJrZXIgY29tOworCisJCS8qIEluIG1vdGlvbiBjb21wcmVzcyBtb2RlLCB0aGUgZGVjb2RlciBvdXRwdXQgbXVzdCBiZSBlbmFibGVkLCBhbmQKKwkJICogdGhlIHZpZGVvIGJ1cyBkaXJlY3Rpb24gc2V0IHRvIGlucHV0LgorCQkgKi8KKwkJc2V0X3ZpZGVvYnVzX2Rpcih6ciwgMCk7CisJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9FTkFCTEVfT1VUUFVULCAmb25lKTsKKwkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJnplcm8pOworCisJCS8qIFRha2UgdGhlIEpQRUcgY29kZWMgYW5kIHRoZSBWRkUgb3V0IG9mIHNsZWVwICovCisJCWpwZWdfY29kZWNfc2xlZXAoenIsIDApOworCisJCS8qIHNldCBKUEVHIGFwcC9jb20gbWFya2VyICovCisJCWFwcC5hcHBuID0genItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBuOworCQlhcHAubGVuID0genItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfbGVuOworCQltZW1jcHkoYXBwLmRhdGEsIHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2RhdGEsIDYwKTsKKwkJenItPmNvZGVjLT5jb250cm9sKHpyLT5jb2RlYywgQ09ERUNfU19KUEVHX0FQUF9EQVRBLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QganBlZ19hcHBfbWFya2VyKSwgJmFwcCk7CisKKwkJY29tLmxlbiA9IHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbjsKKwkJbWVtY3B5KGNvbS5kYXRhLCB6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9kYXRhLCA2MCk7CisJCXpyLT5jb2RlYy0+Y29udHJvbCh6ci0+Y29kZWMsIENPREVDX1NfSlBFR19DT01fREFUQSwKKwkJCQkgICBzaXplb2Yoc3RydWN0IGpwZWdfY29tX21hcmtlciksICZjb20pOworCisJCS8qIFNldHVwIHRoZSBKUEVHIGNvZGVjICovCisJCXpyLT5jb2RlYy0+Y29udHJvbCh6ci0+Y29kZWMsIENPREVDX1NfSlBFR19URFNfQllURSwKKwkJCQkgICBzaXplb2YoaW50KSwgJmZpZWxkX3NpemUpOworCQl6ci0+Y29kZWMtPnNldF92aWRlbyh6ci0+Y29kZWMsIHpyLT50aW1pbmcsICZjYXAsCisJCQkJICAgICAmenItPmNhcmQudmZlX3BvbCk7CisJCXpyLT5jb2RlYy0+c2V0X21vZGUoenItPmNvZGVjLCBDT0RFQ19ET19DT01QUkVTU0lPTik7CisKKwkJLyogU2V0dXAgdGhlIFZGRSAqLworCQlpZiAoenItPnZmZSkgeworCQkJenItPnZmZS0+Y29udHJvbCh6ci0+dmZlLCBDT0RFQ19TX0pQRUdfVERTX0JZVEUsCisJCQkJCSBzaXplb2YoaW50KSwgJmZpZWxkX3NpemUpOworCQkJenItPnZmZS0+c2V0X3ZpZGVvKHpyLT52ZmUsIHpyLT50aW1pbmcsICZjYXAsCisJCQkJCSAgICZ6ci0+Y2FyZC52ZmVfcG9sKTsKKwkJCXpyLT52ZmUtPnNldF9tb2RlKHpyLT52ZmUsIENPREVDX0RPX0NPTVBSRVNTSU9OKTsKKwkJfQorCisJCWluaXRfanBlZ19xdWV1ZSh6cik7CisJCXpyMzYwNTdfc2V0X2pwZyh6ciwgbW9kZSk7CS8vIFxQX1Jlc2V0LCAuLi4gVmlkZW8gcGFyYW0sIEZJRk8KKworCQljbGVhcl9pbnRlcnJ1cHRfY291bnRlcnMoenIpOworCQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IGVuYWJsZV9qcGcoTU9USU9OX0NPTVBSRVNTKVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzoKKwkJLyogSW4gbW90aW9uIGRlY29tcHJlc3Npb24gbW9kZSwgdGhlIGRlY29kZXIgb3V0cHV0IG11c3QgYmUgZGlzYWJsZWQsIGFuZAorCQkgKiB0aGUgdmlkZW8gYnVzIGRpcmVjdGlvbiBzZXQgdG8gb3V0cHV0LgorCQkgKi8KKwkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZ6ZXJvKTsKKwkJc2V0X3ZpZGVvYnVzX2Rpcih6ciwgMSk7CisJCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfSU5QVVQsICZvbmUpOworCisJCS8qIFRha2UgdGhlIEpQRUcgY29kZWMgYW5kIHRoZSBWRkUgb3V0IG9mIHNsZWVwICovCisJCWpwZWdfY29kZWNfc2xlZXAoenIsIDApOworCQkvKiBTZXR1cCB0aGUgVkZFICovCisJCWlmICh6ci0+dmZlKSB7CisJCQl6ci0+dmZlLT5zZXRfdmlkZW8oenItPnZmZSwgenItPnRpbWluZywgJmNhcCwKKwkJCQkJICAgJnpyLT5jYXJkLnZmZV9wb2wpOworCQkJenItPnZmZS0+c2V0X21vZGUoenItPnZmZSwgQ09ERUNfRE9fRVhQQU5TSU9OKTsKKwkJfQorCQkvKiBTZXR1cCB0aGUgSlBFRyBjb2RlYyAqLworCQl6ci0+Y29kZWMtPnNldF92aWRlbyh6ci0+Y29kZWMsIHpyLT50aW1pbmcsICZjYXAsCisJCQkJICAgICAmenItPmNhcmQudmZlX3BvbCk7CisJCXpyLT5jb2RlYy0+c2V0X21vZGUoenItPmNvZGVjLCBDT0RFQ19ET19FWFBBTlNJT04pOworCisJCWluaXRfanBlZ19xdWV1ZSh6cik7CisJCXpyMzYwNTdfc2V0X2pwZyh6ciwgbW9kZSk7CS8vIFxQX1Jlc2V0LCAuLi4gVmlkZW8gcGFyYW0sIEZJRk8KKworCQljbGVhcl9pbnRlcnJ1cHRfY291bnRlcnMoenIpOworCQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IGVuYWJsZV9qcGcoTU9USU9OX0RFQ09NUFJFU1MpXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlicmVhazsKKworCWNhc2UgQlVaX01PREVfSURMRToKKwlkZWZhdWx0OgorCQkvKiBzaHV0IGRvd24gcHJvY2Vzc2luZyAqLworCQlidGFuZCh+KHpyLT5jYXJkLmpwZWdfaW50IHwgWlIzNjA1N19JQ1JfSlBFR1JlcElSUSksCisJCSAgICAgIFpSMzYwNTdfSUNSKTsKKwkJYnR3cml0ZSh6ci0+Y2FyZC5qcGVnX2ludCB8IFpSMzYwNTdfSUNSX0pQRUdSZXBJUlEsCisJCQlaUjM2MDU3X0lTUik7CisJCWJ0YW5kKH5aUjM2MDU3X0pNQ19Hb19lbiwgWlIzNjA1N19KTUMpOwkvLyBcR29fZW4KKworCQltc2xlZXAoNTApOworCisJCXNldF92aWRlb2J1c19kaXIoenIsIDApOworCQlzZXRfZnJhbWUoenIsIDEpOwkvLyAvRlJBTUUKKwkJYnRvcihaUjM2MDU3X01DVENSX0NGbHVzaCwgWlIzNjA1N19NQ1RDUik7CS8vIC9DRmx1c2gKKwkJYnR3cml0ZSgwLCBaUjM2MDU3X0pQQyk7CS8vIFxQX1Jlc2V0LFxDb2RUcm5zRW4sXEFjdGl2ZQorCQlidGFuZCh+WlIzNjA1N19KTUNfVkZJRk9fRkIsIFpSMzYwNTdfSk1DKTsKKwkJYnRhbmQoflpSMzYwNTdfSk1DX1N5bmNNc3RyLCBaUjM2MDU3X0pNQyk7CisJCWpwZWdfY29kZWNfcmVzZXQoenIpOworCQlqcGVnX2NvZGVjX3NsZWVwKHpyLCAxKTsKKwkJenIzNjA1N19hZGp1c3RfdmZlKHpyLCBtb2RlKTsKKworCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJm9uZSk7CisJCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfSU5QVVQsICZ6ZXJvKTsKKworCQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IGVuYWJsZV9qcGcoSURMRSlcbiIsIFpSX0RFVk5BTUUoenIpKTsKKwkJYnJlYWs7CisKKwl9Cit9CisKKy8qIHdoZW4gdGhpcyBpcyBjYWxsZWQgdGhlIHNwaW5sb2NrIG11c3QgYmUgaGVsZCAqLwordm9pZAorem9yYW5fZmVlZF9zdGF0X2NvbSAoc3RydWN0IHpvcmFuICp6cikKK3sKKwkvKiBtb3ZlIGZyYW1lcyBmcm9tIHBlbmRpbmcgcXVldWUgdG8gRE1BICovCisKKwlpbnQgZnJhbWUsIGksIG1heF9zdGF0X2NvbTsKKworCW1heF9zdGF0X2NvbSA9CisJICAgICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSA9PQorCSAgICAgMSkgPyBCVVpfTlVNX1NUQVRfQ09NIDogKEJVWl9OVU1fU1RBVF9DT00gPj4gMSk7CisKKwl3aGlsZSAoKHpyLT5qcGdfZG1hX2hlYWQgLSB6ci0+anBnX2RtYV90YWlsKSA8IG1heF9zdGF0X2NvbSAmJgorCSAgICAgICB6ci0+anBnX2RtYV9oZWFkIDwgenItPmpwZ19xdWVfaGVhZCkgeworCisJCWZyYW1lID0genItPmpwZ19wZW5kW3pyLT5qcGdfZG1hX2hlYWQgJiBCVVpfTUFTS19GUkFNRV07CisJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKSB7CisJCQkvKiBmaWxsIDEgc3RhdF9jb20gZW50cnkgKi8KKwkJCWkgPSAoenItPmpwZ19kbWFfaGVhZCAtCisJCQkgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIEJVWl9NQVNLX1NUQVRfQ09NOworCQkJaWYgKCEoenItPnN0YXRfY29tW2ldICYgY3B1X3RvX2xlMzIoMSkpKQorCQkJCWJyZWFrOworCQkJenItPnN0YXRfY29tW2ldID0KKwkJCSAgICBjcHVfdG9fbGUzMih6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5mcmFnX3RhYl9idXMpOworCQl9IGVsc2UgeworCQkJLyogZmlsbCAyIHN0YXRfY29tIGVudHJpZXMgKi8KKwkJCWkgPSAoKHpyLT5qcGdfZG1hX2hlYWQgLQorCQkJICAgICAgenItPmpwZ19lcnJfc2hpZnQpICYgMSkgKiAyOworCQkJaWYgKCEoenItPnN0YXRfY29tW2ldICYgY3B1X3RvX2xlMzIoMSkpKQorCQkJCWJyZWFrOworCQkJenItPnN0YXRfY29tW2ldID0KKwkJCSAgICBjcHVfdG9fbGUzMih6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5mcmFnX3RhYl9idXMpOworCQkJenItPnN0YXRfY29tW2kgKyAxXSA9CisJCQkgICAgY3B1X3RvX2xlMzIoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uZnJhZ190YWJfYnVzKTsKKwkJfQorCQl6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSA9IEJVWl9TVEFURV9ETUE7CisJCXpyLT5qcGdfZG1hX2hlYWQrKzsKKworCX0KKwlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpCisJCXpyLT5qcGdfcXVldWVkX251bSsrOworfQorCisvKiB3aGVuIHRoaXMgaXMgY2FsbGVkIHRoZSBzcGlubG9jayBtdXN0IGJlIGhlbGQgKi8KK3N0YXRpYyB2b2lkCit6b3Jhbl9yZWFwX3N0YXRfY29tIChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCS8qIG1vdmUgZnJhbWVzIGZyb20gRE1BIHF1ZXVlIHRvIGRvbmUgcXVldWUgKi8KKworCWludCBpOworCXUzMiBzdGF0X2NvbTsKKwl1bnNpZ25lZCBpbnQgc2VxOworCXVuc2lnbmVkIGludCBkaWY7CisJc3RydWN0IHpvcmFuX2pwZ19idWZmZXIgKmJ1ZmZlcjsKKwlpbnQgZnJhbWU7CisKKwkvKiBJbiBtb3Rpb24gZGVjb21wcmVzcyB3ZSBkb24ndCBoYXZlIGEgaGFyZHdhcmUgZnJhbWUgY291bnRlciwKKwkgKiB3ZSBqdXN0IGNvdW50IHRoZSBpbnRlcnJ1cHRzIGhlcmUgKi8KKworCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykgeworCQl6ci0+anBnX3NlcV9udW0rKzsKKwl9CisJd2hpbGUgKHpyLT5qcGdfZG1hX3RhaWwgPCB6ci0+anBnX2RtYV9oZWFkKSB7CisJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQorCQkJaSA9ICh6ci0+anBnX2RtYV90YWlsIC0KKwkJCSAgICAgenItPmpwZ19lcnJfc2hpZnQpICYgQlVaX01BU0tfU1RBVF9DT007CisJCWVsc2UKKwkJCWkgPSAoKHpyLT5qcGdfZG1hX3RhaWwgLQorCQkJICAgICAgenItPmpwZ19lcnJfc2hpZnQpICYgMSkgKiAyICsgMTsKKworCQlzdGF0X2NvbSA9IGxlMzJfdG9fY3B1KHpyLT5zdGF0X2NvbVtpXSk7CisKKwkJaWYgKChzdGF0X2NvbSAmIDEpID09IDApIHsKKwkJCXJldHVybjsKKwkJfQorCQlmcmFtZSA9IHpyLT5qcGdfcGVuZFt6ci0+anBnX2RtYV90YWlsICYgQlVaX01BU0tfRlJBTUVdOworCQlidWZmZXIgPSAmenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV07CisJCWRvX2dldHRpbWVvZmRheSgmYnVmZmVyLT5icy50aW1lc3RhbXApOworCisJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpIHsKKwkJCWJ1ZmZlci0+YnMubGVuZ3RoID0gKHN0YXRfY29tICYgMHg3ZmZmZmYpID4+IDE7CisKKwkJCS8qIHVwZGF0ZSBzZXF1ZW5jZSBudW1iZXIgd2l0aCB0aGUgaGVscCBvZiB0aGUgY291bnRlciBpbiBzdGF0X2NvbSAqLworCisJCQlzZXEgPSAoKHN0YXRfY29tID4+IDI0KSArIHpyLT5qcGdfZXJyX3NlcSkgJiAweGZmOworCQkJZGlmID0gKHNlcSAtIHpyLT5qcGdfc2VxX251bSkgJiAweGZmOworCQkJenItPmpwZ19zZXFfbnVtICs9IGRpZjsKKwkJfSBlbHNlIHsKKwkJCWJ1ZmZlci0+YnMubGVuZ3RoID0gMDsKKwkJfQorCQlidWZmZXItPmJzLnNlcSA9CisJCSAgICB6ci0+anBnX3NldHRpbmdzLlRtcERjbSA9PQorCQkgICAgMiA/ICh6ci0+anBnX3NlcV9udW0gPj4gMSkgOiB6ci0+anBnX3NlcV9udW07CisJCWJ1ZmZlci0+c3RhdGUgPSBCVVpfU1RBVEVfRE9ORTsKKworCQl6ci0+anBnX2RtYV90YWlsKys7CisJfQorfQorCitzdGF0aWMgdm9pZAorZXJyb3JfaGFuZGxlciAoc3RydWN0IHpvcmFuICp6ciwKKwkgICAgICAgdTMyICAgICAgICAgICBhc3RhdCwKKwkgICAgICAgdTMyICAgICAgICAgICBzdGF0KQoreworCS8qIFRoaXMgaXMgSlBFRyBlcnJvciBoYW5kbGluZyBwYXJ0ICovCisJaWYgKCh6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpICYmCisJICAgICh6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykpIHsKKwkJLy9kcHJpbnRrKDEsIEtFUk5fRVJSICIlczogSW50ZXJuYWwgZXJyb3I6IGVycm9yIGhhbmRsaW5nIHJlcXVlc3QgaW4gbW9kZSAlZFxuIiwgWlJfREVWTkFNRSh6ciksIHpyLT5jb2RlY19tb2RlKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgoc3RhdCAmIDEpID09IDAgJiYKKwkgICAgenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTICYmCisJICAgIHpyLT5qcGdfZG1hX3RhaWwgLSB6ci0+anBnX3F1ZV90YWlsID49CisJICAgICB6ci0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMpIHsKKwkJLyogTm8gZnJlZSBidWZmZXJzLi4uICovCisJCXpvcmFuX3JlYXBfc3RhdF9jb20oenIpOworCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6ci0+anBnX2NhcHEpOworCQl6ci0+SlBFR19taXNzZWQgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKHpyLT5KUEVHX2Vycm9yICE9IDEpIHsKKwkJLyoKKwkJICogRmlyc3QgZW50cnk6IGVycm9yIGp1c3QgaGFwcGVuZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24KKwkJICoKKwkJICogSW4gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTOgorCQkgKgorCQkgKiBQb3NzaWJsZSBnbGl0Y2ggaW4gVFYgc2lnbmFsLiBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkCisJCSAqIHN0b3AgdGhlIGNvZGVjIGFuZCB3YWl0IGZvciBnb29kIHF1YWxpdHkgc2lnbmFsIGJlZm9yZQorCQkgKiByZXN0YXJ0aW5nIGl0IHRvIGF2b2lkIGZ1cnRoZXIgcHJvYmxlbXMKKwkJICoKKwkJICogSW4gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1M6CisJCSAqCisJCSAqIEJhZCBKUEVHIGZyYW1lOiB3ZSBoYXZlIHRvIG1hcmsgaXQgYXMgcHJvY2Vzc2VkIChjb2RlYyBjcmFzaGVkCisJCSAqIGFuZCB3YXMgbm90IGFibGUgdG8gZG8gaXQgaXRzZWxmKSwgYW5kIHRvIHJlbW92ZSBpdCBmcm9tIHF1ZXVlLgorCQkgKi8KKwkJYnRhbmQoflpSMzYwNTdfSk1DX0dvX2VuLCBaUjM2MDU3X0pNQyk7CisJCXVkZWxheSgxKTsKKwkJc3RhdCA9IHN0YXQgfCAocG9zdF9vZmZpY2VfcmVhZCh6ciwgNywgMCkgJiAzKSA8PCA4OworCQlidHdyaXRlKDAsIFpSMzYwNTdfSlBDKTsKKwkJYnRvcihaUjM2MDU3X01DVENSX0NGbHVzaCwgWlIzNjA1N19NQ1RDUik7CisJCWpwZWdfY29kZWNfcmVzZXQoenIpOworCQlqcGVnX2NvZGVjX3NsZWVwKHpyLCAxKTsKKwkJenItPkpQRUdfZXJyb3IgPSAxOworCQl6ci0+bnVtX2Vycm9ycysrOworCisJCS8qIFJlcG9ydCBlcnJvciAqLworCQlpZiAoenIzNjA2N19kZWJ1ZyA+IDEgJiYgenItPm51bV9lcnJvcnMgPD0gOCkgeworCQkJbG9uZyBmcmFtZTsKKwkJCWZyYW1lID0KKwkJCSAgICB6ci0+anBnX3BlbmRbenItPmpwZ19kbWFfdGFpbCAmIEJVWl9NQVNLX0ZSQU1FXTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogSlBFRyBlcnJvciBzdGF0PTB4JTA4eCgweCUwOHgpIHF1ZXVlX3N0YXRlPSVsZC8lbGQvJWxkLyVsZCBzZXE9JWxkIGZyYW1lPSVsZC4gQ29kZWMgc3RvcHBlZC4gIiwKKwkJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgc3RhdCwgenItPmxhc3RfaXNyLAorCQkJICAgICAgIHpyLT5qcGdfcXVlX3RhaWwsIHpyLT5qcGdfZG1hX3RhaWwsCisJCQkgICAgICAgenItPmpwZ19kbWFfaGVhZCwgenItPmpwZ19xdWVfaGVhZCwKKwkJCSAgICAgICB6ci0+anBnX3NlcV9udW0sIGZyYW1lKTsKKwkJCXByaW50aygic3RhdF9jb20gZnJhbWVzOiIpOworCQkJeworCQkJCWludCBpLCBqOworCQkJCWZvciAoaiA9IDA7IGogPCBCVVpfTlVNX1NUQVRfQ09NOyBqKyspIHsKKwkJCQkJZm9yIChpID0gMDsKKwkJCQkJICAgICBpIDwgenItPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOworCQkJCQkgICAgIGkrKykgeworCQkJCQkJaWYgKGxlMzJfdG9fY3B1KHpyLT5zdGF0X2NvbVtqXSkgPT0KKwkJCQkJCSAgICB6ci0+anBnX2J1ZmZlcnMuCisJCQkJCQkgICAgYnVmZmVyW2ldLgorCQkJCQkJICAgIGZyYWdfdGFiX2J1cykgeworCQkJCQkJCXByaW50aygiJSBkLT4lZCIsCisJCQkJCQkJICAgICAgIGosIGkpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCXByaW50aygiXG4iKTsKKwkJCX0KKwkJfQorCQkvKiBGaW5kIGFuIGVudHJ5IGluIHN0YXRfY29tIGFuZCByb3RhdGUgY29udGVudHMgKi8KKwkJeworCQkJaW50IGk7CisKKwkJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQorCQkJCWkgPSAoenItPmpwZ19kbWFfdGFpbCAtCisJCQkJICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJiBCVVpfTUFTS19TVEFUX0NPTTsKKwkJCWVsc2UKKwkJCQlpID0gKCh6ci0+anBnX2RtYV90YWlsIC0KKwkJCQkgICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJiAxKSAqIDI7CisJCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpIHsKKwkJCQkvKiBNaW1pYyB6cjM2MDY3IG9wZXJhdGlvbiAqLworCQkJCXpyLT5zdGF0X2NvbVtpXSB8PSBjcHVfdG9fbGUzMigxKTsKKwkJCQlpZiAoenItPmpwZ19zZXR0aW5ncy5UbXBEY20gIT0gMSkKKwkJCQkJenItPnN0YXRfY29tW2kgKyAxXSB8PSBjcHVfdG9fbGUzMigxKTsKKwkJCQkvKiBSZWZpbGwgKi8KKwkJCQl6b3Jhbl9yZWFwX3N0YXRfY29tKHpyKTsKKwkJCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT5qcGdfY2FwcSk7CisJCQkJLyogRmluZCBhbiBlbnRyeSBpbiBzdGF0X2NvbSBhZ2FpbiBhZnRlciByZWZpbGwgKi8KKwkJCQlpZiAoenItPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJCQkJaSA9ICh6ci0+anBnX2RtYV90YWlsIC0KKwkJCQkJICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJgorCQkJCQkgICAgQlVaX01BU0tfU1RBVF9DT007CisJCQkJZWxzZQorCQkJCQlpID0gKCh6ci0+anBnX2RtYV90YWlsIC0KKwkJCQkJICAgICAgenItPmpwZ19lcnJfc2hpZnQpICYgMSkgKiAyOworCQkJfQorCQkJaWYgKGkpIHsKKwkJCQkvKiBSb3RhdGUgc3RhdF9jb21tIGVudHJpZXMgdG8gbWFrZSBjdXJyZW50IGVudHJ5IGZpcnN0ICovCisJCQkJaW50IGo7CisJCQkJX19sZTMyIGJ1c19hZGRyW0JVWl9OVU1fU1RBVF9DT01dOworCisJCQkJLyogSGVyZSB3ZSBhcmUgY29weWluZyB0aGUgc3RhdF9jb20gYXJyYXksIHdoaWNoCisJCQkJICogaXMgYWxyZWFkeSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCwgc28KKwkJCQkgKiBubyBlbmRpYW4gY29udmVyc2lvbnMgaGVyZQorCQkJCSAqLworCQkJCW1lbWNweShidXNfYWRkciwgenItPnN0YXRfY29tLAorCQkJCSAgICAgICBzaXplb2YoYnVzX2FkZHIpKTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgQlVaX05VTV9TVEFUX0NPTTsgaisrKSB7CisJCQkJCXpyLT5zdGF0X2NvbVtqXSA9CisJCQkJCSAgICBidXNfYWRkclsoaSArIGopICYKKwkJCQkJCSAgICAgQlVaX01BU0tfU1RBVF9DT01dOworCisJCQkJfQorCQkJCXpyLT5qcGdfZXJyX3NoaWZ0ICs9IGk7CisJCQkJenItPmpwZ19lcnJfc2hpZnQgJj0gQlVaX01BU0tfU1RBVF9DT007CisJCQl9CisJCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKQorCQkJCXpyLT5qcGdfZXJyX3NlcSA9IHpyLT5qcGdfc2VxX251bTsJLyogKyAxOyAqLworCQl9CisJfQorCisJLyogTm93IHRoZSBzdGF0X2NvbW0gYnVmZmVyIGlzIHJlYWR5IGZvciByZXN0YXJ0ICovCisJZG8geworCQlpbnQgc3RhdHVzLCBtb2RlOworCisJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpIHsKKwkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfU1RBVFVTLCAmc3RhdHVzKTsKKwkJCW1vZGUgPSBDT0RFQ19ET19DT01QUkVTU0lPTjsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IDA7CisJCQltb2RlID0gQ09ERUNfRE9fRVhQQU5TSU9OOworCQl9CisJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyB8fAorCQkgICAgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpKSB7CisJCQkvKioqKioqKioqKiBSRVNUQVJUIGNvZGUgKioqKioqKioqKioqKi8KKwkJCWpwZWdfY29kZWNfcmVzZXQoenIpOworCQkJenItPmNvZGVjLT5zZXRfbW9kZSh6ci0+Y29kZWMsIG1vZGUpOworCQkJenIzNjA1N19zZXRfanBnKHpyLCB6ci0+Y29kZWNfbW9kZSk7CisJCQlqcGVnX3N0YXJ0KHpyKTsKKworCQkJaWYgKHpyLT5udW1fZXJyb3JzIDw9IDgpCisJCQkJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBSZXN0YXJ0XG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisKKwkJCXpyLT5KUEVHX21pc3NlZCA9IDA7CisJCQl6ci0+SlBFR19lcnJvciA9IDI7CisJCQkvKioqKioqKioqKiBFbmQgUkVTVEFSVCBjb2RlICoqKioqKioqKioqLworCQl9CisJfSB3aGlsZSAoMCk7Cit9CisKK2lycXJldHVybl90Cit6b3Jhbl9pcnEgKGludCAgICAgICAgICAgICBpcnEsCisJICAgdm9pZCAgICAgICAgICAgKmRldl9pZCkKK3sKKwl1MzIgc3RhdCwgYXN0YXQ7CisJaW50IGNvdW50OworCXN0cnVjdCB6b3JhbiAqenI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXpyID0gZGV2X2lkOworCWNvdW50ID0gMDsKKworCWlmICh6ci0+dGVzdGluZykgeworCQkvKiBUZXN0aW5nIGludGVycnVwdHMgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQl3aGlsZSAoKHN0YXQgPSBjb3VudF9yZXNldF9pbnRlcnJ1cHQoenIpKSkgeworCQkJaWYgKGNvdW50KysgPiAxMDApIHsKKwkJCQlidGFuZCh+WlIzNjA1N19JQ1JfSW50UGluRW4sIFpSMzYwNTdfSUNSKTsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogSVJRIGxvY2t1cCB3aGlsZSB0ZXN0aW5nLCBpc3I9MHglMDh4LCBjbGVhcmVkIGludCBtYXNrXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgc3RhdCk7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6ci0+dGVzdF9xKTsKKwkJCX0KKwkJfQorCQl6ci0+bGFzdF9pc3IgPSBzdGF0OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoMSkgeworCQkvKiBnZXQvY2xlYXIgaW50ZXJydXB0IHN0YXR1cyBiaXRzICovCisJCXN0YXQgPSBjb3VudF9yZXNldF9pbnRlcnJ1cHQoenIpOworCQlhc3RhdCA9IHN0YXQgJiBJUlFfTUFTSzsKKwkJaWYgKCFhc3RhdCkgeworCQkJYnJlYWs7CisJCX0KKwkJZHByaW50ayg0LAorCQkJS0VSTl9ERUJVRworCQkJInpvcmFuX2lycTogYXN0YXQ6IDB4JTA4eCwgbWFzazogMHglMDh4XG4iLAorCQkJYXN0YXQsIGJ0cmVhZChaUjM2MDU3X0lDUikpOworCQlpZiAoYXN0YXQgJiB6ci0+Y2FyZC52c3luY19pbnQpIHsJLy8gU1cKKworCQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTIHx8CisJCQkgICAgenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7CisJCQkJLyogY291bnQgbWlzc2VkIGludGVycnVwdHMgKi8KKwkJCQl6ci0+SlBFR19taXNzZWQrKzsKKwkJCX0KKwkJCS8vcG9zdF9vZmZpY2VfcmVhZCh6ciwxLDApOworCQkJLyogSW50ZXJydXB0cyBtYXkgc3RpbGwgaGFwcGVuIHdoZW4KKwkJCSAqIHpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgaXMgc3dpdGNoZWQgb2ZmLgorCQkJICogV2Ugc2ltcGx5IGlnbm9yZSB0aGVtICovCisKKwkJCWlmICh6ci0+djRsX21lbWdyYWJfYWN0aXZlKSB7CisKKwkJCQkvKiBBIGxvdCBtb3JlIGNoZWNrcyBzaG91bGQgYmUgaGVyZSAuLi4gKi8KKwkJCQlpZiAoKGJ0cmVhZChaUjM2MDU3X1ZTU0ZHUikgJgorCQkJCSAgICAgWlIzNjA1N19WU1NGR1JfU25hcFNob3QpID09IDApCisJCQkJCWRwcmludGsoMSwKKwkJCQkJCUtFUk5fV0FSTklORworCQkJCQkJIiVzOiBCdXpJUlEgd2l0aCBTbmFwU2hvdCBvZmYgPz8/XG4iLAorCQkJCQkJWlJfREVWTkFNRSh6cikpOworCisJCQkJaWYgKHpyLT52NGxfZ3JhYl9mcmFtZSAhPSBOT19HUkFCX0FDVElWRSkgeworCQkJCQkvKiBUaGVyZSBpcyBhIGdyYWIgb24gYSBmcmFtZSBnb2luZyBvbiwgY2hlY2sgaWYgaXQgaGFzIGZpbmlzaGVkICovCisKKwkJCQkJaWYgKChidHJlYWQoWlIzNjA1N19WU1NGR1IpICYKKwkJCQkJICAgICBaUjM2MDU3X1ZTU0ZHUl9GcmFtZUdyYWIpID09CisJCQkJCSAgICAwKSB7CisJCQkJCQkvKiBpdCBpcyBmaW5pc2hlZCwgbm90aWZ5IHRoZSB1c2VyICovCisKKwkJCQkJCXpyLT52NGxfYnVmZmVycy5idWZmZXJbenItPnY0bF9ncmFiX2ZyYW1lXS5zdGF0ZSA9IEJVWl9TVEFURV9ET05FOworCQkJCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlclt6ci0+djRsX2dyYWJfZnJhbWVdLmJzLnNlcSA9IHpyLT52NGxfZ3JhYl9zZXE7CisJCQkJCQlkb19nZXR0aW1lb2ZkYXkoJnpyLT52NGxfYnVmZmVycy5idWZmZXJbenItPnY0bF9ncmFiX2ZyYW1lXS5icy50aW1lc3RhbXApOworCQkJCQkJenItPnY0bF9ncmFiX2ZyYW1lID0gTk9fR1JBQl9BQ1RJVkU7CisJCQkJCQl6ci0+djRsX3BlbmRfdGFpbCsrOworCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKHpyLT52NGxfZ3JhYl9mcmFtZSA9PSBOT19HUkFCX0FDVElWRSkKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6ci0+djRsX2NhcHEpOworCisJCQkJLyogQ2hlY2sgaWYgdGhlcmUgaXMgYW5vdGhlciBncmFiIHF1ZXVlZCAqLworCisJCQkJaWYgKHpyLT52NGxfZ3JhYl9mcmFtZSA9PSBOT19HUkFCX0FDVElWRSAmJgorCQkJCSAgICB6ci0+djRsX3BlbmRfdGFpbCAhPSB6ci0+djRsX3BlbmRfaGVhZCkgeworCisJCQkJCWludCBmcmFtZSA9IHpyLT52NGxfcGVuZFt6ci0+djRsX3BlbmRfdGFpbCAmCisJCQkJCQkJIFY0TF9NQVNLX0ZSQU1FXTsKKwkJCQkJdTMyIHJlZzsKKworCQkJCQl6ci0+djRsX2dyYWJfZnJhbWUgPSBmcmFtZTsKKworCQkJCQkvKiBTZXQgenIzNjA1NyB2aWRlbyBmcm9udCBlbmQgYW5kIGVuYWJsZSB2aWRlbyAqLworCisJCQkJCS8qIEJ1ZmZlciBhZGRyZXNzICovCisKKwkJCQkJcmVnID0KKwkJCQkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLgorCQkJCQkgICAgZmJ1ZmZlcl9idXM7CisJCQkJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEVFIpOworCQkJCQlpZiAoenItPnY0bF9zZXR0aW5ncy5oZWlnaHQgPgorCQkJCQkgICAgQlVaX01BWF9IRUlHSFQgLyAyKQorCQkJCQkJcmVnICs9CisJCQkJCQkgICAgenItPnY0bF9zZXR0aW5ncy4KKwkJCQkJCSAgICBieXRlc3BlcmxpbmU7CisJCQkJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEQlIpOworCisJCQkJCS8qIHZpZGVvIHN0cmlkZSwgc3RhdHVzLCBhbmQgZnJhbWUgZ3JhYiByZWdpc3RlciAqLworCQkJCQlyZWcgPSAwOworCQkJCQlpZiAoenItPnY0bF9zZXR0aW5ncy5oZWlnaHQgPgorCQkJCQkgICAgQlVaX01BWF9IRUlHSFQgLyAyKQorCQkJCQkJcmVnICs9CisJCQkJCQkgICAgenItPnY0bF9zZXR0aW5ncy4KKwkJCQkJCSAgICBieXRlc3BlcmxpbmU7CisJCQkJCXJlZyA9CisJCQkJCSAgICAocmVnIDw8CisJCQkJCSAgICAgWlIzNjA1N19WU1NGR1JfRGlzcFN0cmlkZSk7CisJCQkJCXJlZyB8PSBaUjM2MDU3X1ZTU0ZHUl9WaWRPdmY7CisJCQkJCXJlZyB8PSBaUjM2MDU3X1ZTU0ZHUl9TbmFwU2hvdDsKKwkJCQkJcmVnIHw9IFpSMzYwNTdfVlNTRkdSX0ZyYW1lR3JhYjsKKwkJCQkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVlNTRkdSKTsKKworCQkJCQlidG9yKFpSMzYwNTdfVkRDUl9WaWRFbiwKKwkJCQkJICAgICBaUjM2MDU3X1ZEQ1IpOworCQkJCX0KKwkJCX0KKworCQkJLyogZXZlbiBpZiB3ZSBkb24ndCBncmFiLCB3ZSBkbyB3YW50IHRvIGluY3JlbWVudAorCQkJICogdGhlIHNlcXVlbmNlIGNvdW50ZXIgdG8gc2VlIGxvc3QgZnJhbWVzICovCisJCQl6ci0+djRsX2dyYWJfc2VxKys7CisJCX0KKyNpZiAoSVJRX01BU0sgJiBaUjM2MDU3X0lTUl9Db2RSZXBJUlEpCisJCWlmIChhc3RhdCAmIFpSMzYwNTdfSVNSX0NvZFJlcElSUSkgeworCQkJenItPmludHJfY291bnRlcl9Db2RSZXBJUlErKzsKKwkJCUlERUJVRyhwcmludGsKKwkJCSAgICAgICAoS0VSTl9ERUJVRyAiJXM6IFpSMzYwNTdfSVNSX0NvZFJlcElSUVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSkpOworCQkJYnRhbmQoflpSMzYwNTdfSUNSX0NvZFJlcElSUSwgWlIzNjA1N19JQ1IpOworCQl9CisjZW5kaWYJCQkJLyogKElSUV9NQVNLICYgWlIzNjA1N19JU1JfQ29kUmVwSVJRKSAqLworCisjaWYgKElSUV9NQVNLICYgWlIzNjA1N19JU1JfSlBFR1JlcElSUSkKKwkJaWYgKGFzdGF0ICYgWlIzNjA1N19JU1JfSlBFR1JlcElSUSkgeworCisJCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MgfHwKKwkJCSAgICB6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpIHsKKwkJCQlpZiAoenIzNjA2N19kZWJ1ZyA+IDEgJiYKKwkJCQkgICAgKCF6ci0+ZnJhbWVfbnVtIHx8IHpyLT5KUEVHX2Vycm9yKSkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJCSAgICAgICAiJXM6IGZpcnN0IGZyYW1lIHJlYWR5OiBzdGF0ZT0weCUwOHggb2RkX2V2ZW49JWQgZmllbGRfcGVyX2J1ZmY9JWQgZGVsYXk9JWRcbiIsCisJCQkJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgc3RhdCwKKwkJCQkJICAgICAgIHpyLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4sCisJCQkJCSAgICAgICB6ci0+anBnX3NldHRpbmdzLgorCQkJCQkgICAgICAgZmllbGRfcGVyX2J1ZmYsCisJCQkJCSAgICAgICB6ci0+SlBFR19taXNzZWQpOworCQkJCQl7CisJCQkJCQljaGFyIHNjW10gPSAiMDAwMCI7CisJCQkJCQljaGFyIHN2WzVdOworCQkJCQkJaW50IGk7CisJCQkJCQlzdHJjcHkoc3YsIHNjKTsKKwkJCQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCQkJCQlpZiAobGUzMl90b19jcHUoenItPnN0YXRfY29tW2ldKSAmIDEpCisJCQkJCQkJCXN2W2ldID0gJzEnOworCQkJCQkJfQorCQkJCQkJc3ZbNF0gPSAwOworCQkJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCQkJICAgICAgICIlczogc3RhdF9jb209JXMgcXVldWVfc3RhdGU9JWxkLyVsZC8lbGQvJWxkXG4iLAorCQkJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBzdiwKKwkJCQkJCSAgICAgICB6ci0+anBnX3F1ZV90YWlsLAorCQkJCQkJICAgICAgIHpyLT5qcGdfZG1hX3RhaWwsCisJCQkJCQkgICAgICAgenItPmpwZ19kbWFfaGVhZCwKKwkJCQkJCSAgICAgICB6ci0+anBnX3F1ZV9oZWFkKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmICh6ci0+SlBFR19taXNzZWQgPiB6ci0+SlBFR19tYXhfbWlzc2VkKQkvLyBHZXQgc3RhdGlzdGljcworCQkJCQkJenItPkpQRUdfbWF4X21pc3NlZCA9CisJCQkJCQkgICAgenItPkpQRUdfbWlzc2VkOworCQkJCQlpZiAoenItPkpQRUdfbWlzc2VkIDwKKwkJCQkJICAgIHpyLT5KUEVHX21pbl9taXNzZWQpCisJCQkJCQl6ci0+SlBFR19taW5fbWlzc2VkID0KKwkJCQkJCSAgICB6ci0+SlBFR19taXNzZWQ7CisJCQkJfQorCisJCQkJaWYgKHpyMzYwNjdfZGVidWcgPiAyICYmIHpyLT5mcmFtZV9udW0gPCA2KSB7CisJCQkJCWludCBpOworCQkJCQlwcmludGsoIiVzOiBzZXE9JWxkIHN0YXRfY29tOiIsCisJCQkJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgenItPmpwZ19zZXFfbnVtKTsKKwkJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJCQkJcHJpbnRrKCIgJTA4eCIsCisJCQkJCQkgICAgICAgbGUzMl90b19jcHUoenItPnN0YXRfY29tW2ldKSk7CisJCQkJCX0KKwkJCQkJcHJpbnRrKCJcbiIpOworCQkJCX0KKwkJCQl6ci0+ZnJhbWVfbnVtKys7CisJCQkJenItPkpQRUdfbWlzc2VkID0gMDsKKwkJCQl6ci0+SlBFR19lcnJvciA9IDA7CisJCQkJem9yYW5fcmVhcF9zdGF0X2NvbSh6cik7CisJCQkJem9yYW5fZmVlZF9zdGF0X2NvbSh6cik7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6ci0+anBnX2NhcHEpOworCQkJfSAvKmVsc2UgeworCQkJICAgICAgZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IEpQRUcgaW50ZXJydXB0IHdoaWxlIG5vdCBpbiBtb3Rpb24gKGRlKWNvbXByZXNzIG1vZGUhXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQl9Ki8KKwkJfQorI2VuZGlmCQkJCS8qIChJUlFfTUFTSyAmIFpSMzYwNTdfSVNSX0pQRUdSZXBJUlEpICovCisKKwkJLyogREFURVJSLCB0b28gbWFueSBmaWVsZHMgbWlzc2VkLCBlcnJvciBwcm9jZXNzaW5nICovCisJCWlmICgoYXN0YXQgJiB6ci0+Y2FyZC5qcGVnX2ludCkgfHwKKwkJICAgIHpyLT5KUEVHX21pc3NlZCA+IDI1IHx8CisJCSAgICB6ci0+SlBFR19lcnJvciA9PSAxCXx8CisJCSAgICAoKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSAmJgorCQkgICAgICh6ci0+ZnJhbWVfbnVtICYgKHpyLT5KUEVHX21pc3NlZCA+CisJCQkJICAgICAgIHpyLT5qcGdfc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYpKSkpIHsKKwkJCWVycm9yX2hhbmRsZXIoenIsIGFzdGF0LCBzdGF0KTsKKwkJfQorCisJCWNvdW50Kys7CisJCWlmIChjb3VudCA+IDEwKSB7CisJCQlkcHJpbnRrKDIsIEtFUk5fV0FSTklORyAiJXM6IGlycSBsb29wICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBjb3VudCk7CisJCQlpZiAoY291bnQgPiAyMCkgeworCQkJCWJ0YW5kKH5aUjM2MDU3X0lDUl9JbnRQaW5FbiwgWlIzNjA1N19JQ1IpOworCQkJCWRwcmludGsoMiwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiBJUlEgbG9ja3VwLCBjbGVhcmVkIGludCBtYXNrXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJenItPmxhc3RfaXNyID0gc3RhdDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQKK3pvcmFuX3NldF9wY2lfbWFzdGVyIChzdHJ1Y3Qgem9yYW4gKnpyLAorCQkgICAgICBpbnQgICAgICAgICAgIHNldF9tYXN0ZXIpCit7CisJaWYgKHNldF9tYXN0ZXIpIHsKKwkJcGNpX3NldF9tYXN0ZXIoenItPnBjaV9kZXYpOworCX0gZWxzZSB7CisJCXUxNiBjb21tYW5kOworCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHpyLT5wY2lfZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOworCQljb21tYW5kICY9IH5QQ0lfQ09NTUFORF9NQVNURVI7CisJCXBjaV93cml0ZV9jb25maWdfd29yZCh6ci0+cGNpX2RldiwgUENJX0NPTU1BTkQsIGNvbW1hbmQpOworCX0KK30KKwordm9pZAorem9yYW5faW5pdF9oYXJkd2FyZSAoc3RydWN0IHpvcmFuICp6cikKK3sKKwlpbnQgaiwgemVybyA9IDA7CisKKwkvKiBFbmFibGUgYnVzLW1hc3RlcmluZyAqLworCXpvcmFuX3NldF9wY2lfbWFzdGVyKHpyLCAxKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGJvYXJkICovCisJaWYgKHpyLT5jYXJkLmluaXQpIHsKKwkJenItPmNhcmQuaW5pdCh6cik7CisJfQorCisJaiA9IHpyLT5jYXJkLmlucHV0W3pyLT5pbnB1dF0ubXV4c2VsOworCisJZGVjb2Rlcl9jb21tYW5kKHpyLCAwLCBOVUxMKTsKKwlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZ6ci0+bm9ybSk7CisJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9JTlBVVCwgJmopOworCisJZW5jb2Rlcl9jb21tYW5kKHpyLCAwLCBOVUxMKTsKKwllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX05PUk0sICZ6ci0+bm9ybSk7CisJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJnplcm8pOworCisJLyogdG9nZ2xlIEpQRUcgY29kZWMgc2xlZXAgdG8gc3luYyBQTEwgKi8KKwlqcGVnX2NvZGVjX3NsZWVwKHpyLCAxKTsKKwlqcGVnX2NvZGVjX3NsZWVwKHpyLCAwKTsKKworCS8qIHNldCBpbmRpdmlkdWFsIGludGVycnVwdCBlbmFibGVzICh3aXRob3V0IEdJUlExKQorCSAqIGJ1dCBkb24ndCBnbG9iYWwgZW5hYmxlIHVudGlsIHpvcmFuX29wZW4oKSAqLworCisJLy9idHdyaXRlKElSUV9NQVNLICYgflpSMzYwNTdfSVNSX0dJUlExLCBaUjM2MDU3X0lDUik7ICAvLyBTVworCS8vIEl0IGxvb2tzIGxpa2UgdXNpbmcgb25seSBKUEVHUmVwSVJRRW4gaXMgbm90IGFsd2F5cyByZWxpYWJsZSwKKwkvLyBtYXkgYmUgd2hlbiBKUEVHIGNvZGVjIGNyYXNoZXMgaXQgd29uJ3QgZ2VuZXJhdGUgSVJRPyBTbywKKwkgLypDUCovCQkJLy8gICAgICAgIGJ0d3JpdGUoSVJRX01BU0ssIFpSMzYwNTdfSUNSKTsgLy8gRW5hYmxlIFZzeW5jIGludGVycnVwdHMgdG9vLiBTTSAgICBXSFkgPyBMUAorCSAgICB6cjM2MDU3X2luaXRfdmZlKHpyKTsKKworCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgQlVaX01PREVfSURMRSk7CisKKwlidHdyaXRlKElSUV9NQVNLLCBaUjM2MDU3X0lTUik7CS8vIENsZWFycyBpbnRlcnJ1cHRzCit9CisKK3ZvaWQKK3pyMzYwNTdfcmVzdGFydCAoc3RydWN0IHpvcmFuICp6cikKK3sKKwlidHdyaXRlKDAsIFpSMzYwNTdfU1BHUFBDUik7CisJbWRlbGF5KDEpOworCWJ0b3IoWlIzNjA1N19TUEdQUENSX1NvZnRSZXNldCwgWlIzNjA1N19TUEdQUENSKTsKKwltZGVsYXkoMSk7CisKKwkvKiBhc3NlcnQgUF9SZXNldCAqLworCWJ0d3JpdGUoMCwgWlIzNjA1N19KUEMpOworCS8qIHNldCB1cCBHUElPIGRpcmVjdGlvbiAtIGFsbCBvdXRwdXQgKi8KKwlidHdyaXRlKFpSMzYwNTdfU1BHUFBDUl9Tb2Z0UmVzZXQgfCAwLCBaUjM2MDU3X1NQR1BQQ1IpOworCisJLyogc2V0IHVwIEdQSU8gcGlucyBhbmQgZ3Vlc3QgYnVzIHRpbWluZyAqLworCWJ0d3JpdGUoKDB4ODEgPDwgMjQpIHwgMHg4ODg4LCBaUjM2MDU3X0dQUEdDUjEpOworfQorCisvKgorICogaW5pdGlhbGl6ZSB2aWRlbyBmcm9udCBlbmQKKyAqLworCitzdGF0aWMgdm9pZAorenIzNjA1N19pbml0X3ZmZSAoc3RydWN0IHpvcmFuICp6cikKK3sKKwl1MzIgcmVnOworCisJcmVnID0gYnRyZWFkKFpSMzYwNTdfVkZFU1BGUik7CisJcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW47CisJcmVnICY9IH5aUjM2MDU3X1ZGRVNQRlJfVkNMS1BvbDsKKwlyZWcgfD0gWlIzNjA1N19WRkVTUEZSX0V4dEZsOworCXJlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfVG9wRmllbGQ7CisJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkZFU1BGUik7CisJcmVnID0gYnRyZWFkKFpSMzYwNTdfVkRDUik7CisJaWYgKHBjaV9wY2lfcHJvYmxlbXMgJiBQQ0lQQ0lfVFJJVE9OKQorCQkvLyB8fCB6ci0+cmV2aXNpb24gPCAxKSAvLyBSZXZpc2lvbiAxIGhhcyBhbHNvIFRyaXRvbiBzdXBwb3J0CisJCXJlZyAmPSB+WlIzNjA1N19WRENSX1RyaXRvbjsKKwllbHNlCisJCXJlZyB8PSBaUjM2MDU3X1ZEQ1JfVHJpdG9uOworCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEQ1IpOworfQorCisvKgorICogSW50ZXJmYWNlIHRvIGRlY29kZXIgYW5kIGVuY29kZXIgY2hpcHMgdXNpbmcgaTJjIGJ1cworICovCisKK2ludAorZGVjb2Rlcl9jb21tYW5kIChzdHJ1Y3Qgem9yYW4gKnpyLAorCQkgaW50ICAgICAgICAgICBjbWQsCisJCSB2b2lkICAgICAgICAgKmRhdGEpCit7CisJaWYgKHpyLT5kZWNvZGVyID09IE5VTEwpCisJCXJldHVybiAtRUlPOworCisJaWYgKHpyLT5jYXJkLnR5cGUgPT0gTE1MMzMgJiYKKwkgICAgKGNtZCA9PSBERUNPREVSX1NFVF9OT1JNIHx8IGNtZCA9PSBERUNPREVSX1NFVF9JTlBVVCkpIHsKKwkJaW50IHJlczsKKworCQkvLyBCdDgxOSBuZWVkcyB0byByZXNldCBpdHMgRklGTyBidWZmZXIgdXNpbmcgI0ZSU1QgcGluIGFuZAorCQkvLyBMTUwzMyBjYXJkIHVzZXMgR1BJTyg3KSBmb3IgdGhhdC4KKwkJR1BJTyh6ciwgNywgMCk7CisJCXJlcyA9IHpyLT5kZWNvZGVyLT5kcml2ZXItPmNvbW1hbmQoenItPmRlY29kZXIsIGNtZCwgZGF0YSk7CisJCS8vIFB1bGwgI0ZSU1QgaGlnaC4KKwkJR1BJTyh6ciwgNywgMSk7CisJCXJldHVybiByZXM7CisJfSBlbHNlCisJCXJldHVybiB6ci0+ZGVjb2Rlci0+ZHJpdmVyLT5jb21tYW5kKHpyLT5kZWNvZGVyLCBjbWQsCisJCQkJCQkgICAgZGF0YSk7Cit9CisKK2ludAorZW5jb2Rlcl9jb21tYW5kIChzdHJ1Y3Qgem9yYW4gKnpyLAorCQkgaW50ICAgICAgICAgICBjbWQsCisJCSB2b2lkICAgICAgICAgKmRhdGEpCit7CisJaWYgKHpyLT5lbmNvZGVyID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXJldHVybiB6ci0+ZW5jb2Rlci0+ZHJpdmVyLT5jb21tYW5kKHpyLT5lbmNvZGVyLCBjbWQsIGRhdGEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRjNmM4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIFpvcmFuIHpyMzYwNTcvenIzNjA2NyBQQ0kgY29udHJvbGxlciBkcml2ZXIsIGZvciB0aGUKKyAqIFBpbm5hY2xlL01pcm8gREMxMC9EQzEwKy9EQzMwL0RDMzArLCBJb21lZ2EgQnV6LCBMaW51eAorICogTWVkaWEgTGFicyBMTUwzMy9MTUwzM1IxMC4KKyAqCisgKiBUaGlzIHBhcnQgaGFuZGxlcyBjYXJkLXNwZWNpZmljIGRhdGEgYW5kIGRldGVjdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBTZXJndWVpIE1pcmlkb25vdiA8bWlyc2V2QGNpY2VzZS5teD4KKyAqCisgKiBDdXJyZW50bHkgbWFpbnRhaW5lZCBieToKKyAqICAgUm9uYWxkIEJ1bHRqZSAgICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorICogICBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QHNreW5ldC5iZT4KKyAqICAgTWFpbGluZ2xpc3QgICAgICA8bWpwZWctdXNlcnNAbGlzdHMuc2YubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19aT1JBTl9ERVZJQ0VfSF9fCisjZGVmaW5lIF9fWk9SQU5fREVWSUNFX0hfXworCisvKiBnZW5lcmFsIHB1cnBvc2UgSS9PICovCitleHRlcm4gdm9pZCBHUElPKHN0cnVjdCB6b3JhbiAqenIsCisJCSBpbnQgYml0LAorCQkgdW5zaWduZWQgaW50IHZhbHVlKTsKKworLyogY29kZWMgKG9yIGFjdHVhbGx5OiBndWVzdCBidXMpIGFjY2VzcyAqLworZXh0ZXJuIGludCBwb3N0X29mZmljZV93YWl0KHN0cnVjdCB6b3JhbiAqenIpOworZXh0ZXJuIGludCBwb3N0X29mZmljZV93cml0ZShzdHJ1Y3Qgem9yYW4gKnpyLAorCQkJICAgICB1bnNpZ25lZCBndWVzdCwKKwkJCSAgICAgdW5zaWduZWQgcmVnLAorCQkJICAgICB1bnNpZ25lZCB2YWx1ZSk7CitleHRlcm4gaW50IHBvc3Rfb2ZmaWNlX3JlYWQoc3RydWN0IHpvcmFuICp6ciwKKwkJCSAgICB1bnNpZ25lZCBndWVzdCwKKwkJCSAgICB1bnNpZ25lZCByZWcpOworCitleHRlcm4gdm9pZCBkZXRlY3RfZ3Vlc3RfYWN0aXZpdHkoc3RydWN0IHpvcmFuICp6cik7CisKK2V4dGVybiB2b2lkIGpwZWdfY29kZWNfc2xlZXAoc3RydWN0IHpvcmFuICp6ciwKKwkJCSAgICAgaW50IHNsZWVwKTsKK2V4dGVybiBpbnQganBlZ19jb2RlY19yZXNldChzdHJ1Y3Qgem9yYW4gKnpyKTsKKworLyogenIzNjB4NyBhY2Nlc3MgdG8gcmF3IGNhcHR1cmUgKi8KK2V4dGVybiB2b2lkIHpyMzYwNTdfb3ZlcmxheShzdHJ1Y3Qgem9yYW4gKnpyLAorCQkJICAgIGludCBvbik7CitleHRlcm4gdm9pZCB3cml0ZV9vdmVybGF5X21hc2soc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgc3RydWN0IHZpZGVvX2NsaXAgKnZwLAorCQkJICAgICAgIGludCBjb3VudCk7CitleHRlcm4gdm9pZCB6cjM2MDU3X3NldF9tZW1ncmFiKHN0cnVjdCB6b3JhbiAqenIsCisJCQkJaW50IG1vZGUpOworZXh0ZXJuIGludCB3YWl0X2dyYWJfcGVuZGluZyhzdHJ1Y3Qgem9yYW4gKnpyKTsKKworLyogaW50ZXJydXB0cyAqLworZXh0ZXJuIHZvaWQgcHJpbnRfaW50ZXJydXB0cyhzdHJ1Y3Qgem9yYW4gKnpyKTsKK2V4dGVybiB2b2lkIGNsZWFyX2ludGVycnVwdF9jb3VudGVycyhzdHJ1Y3Qgem9yYW4gKnpyKTsKK2V4dGVybiBpcnFyZXR1cm5fdCB6b3Jhbl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKKworLyogSlBFRyBjb2RlYyBhY2Nlc3MgKi8KK2V4dGVybiB2b2lkIGpwZWdfc3RhcnQoc3RydWN0IHpvcmFuICp6cik7CitleHRlcm4gdm9pZCB6cjM2MDU3X2VuYWJsZV9qcGcoc3RydWN0IHpvcmFuICp6ciwKKwkJCSAgICAgICBlbnVtIHpvcmFuX2NvZGVjX21vZGUgbW9kZSk7CitleHRlcm4gdm9pZCB6b3Jhbl9mZWVkX3N0YXRfY29tKHN0cnVjdCB6b3JhbiAqenIpOworCisvKiBnZW5lcmFsICovCitleHRlcm4gdm9pZCB6b3Jhbl9zZXRfcGNpX21hc3RlcihzdHJ1Y3Qgem9yYW4gKnpyLAorCQkJCSBpbnQgc2V0X21hc3Rlcik7CitleHRlcm4gdm9pZCB6b3Jhbl9pbml0X2hhcmR3YXJlKHN0cnVjdCB6b3JhbiAqenIpOworZXh0ZXJuIHZvaWQgenIzNjA1N19yZXN0YXJ0KHN0cnVjdCB6b3JhbiAqenIpOworCitleHRlcm4gY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCB6b3Jhbl9mb3JtYXRzW107CisKK2V4dGVybiBpbnQgdjRsX25idWZzOworZXh0ZXJuIGludCB2NGxfYnVmc2l6ZTsKK2V4dGVybiBpbnQganBnX25idWZzOworZXh0ZXJuIGludCBqcGdfYnVmc2l6ZTsKK2V4dGVybiBpbnQgcGFzc190aHJvdWdoOworCisvKiBpMmMgKi8KK2V4dGVybiBpbnQgZGVjb2Rlcl9jb21tYW5kKHN0cnVjdCB6b3JhbiAqenIsCisJCQkgICBpbnQgY21kLAorCQkJICAgdm9pZCAqZGF0YSk7CitleHRlcm4gaW50IGVuY29kZXJfY29tbWFuZChzdHJ1Y3Qgem9yYW4gKnpyLAorCQkJICAgaW50IGNtZCwKKwkJCSAgIHZvaWQgKmRhdGEpOworCisjZW5kaWYJCQkJLyogX19aT1JBTl9ERVZJQ0VfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjExYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwpAQCAtMCwwICsxLDQ2NDggQEAKKy8qCisgKiBab3JhbiB6cjM2MDU3L3pyMzYwNjcgUENJIGNvbnRyb2xsZXIgZHJpdmVyLCBmb3IgdGhlCisgKiBQaW5uYWNsZS9NaXJvIERDMTAvREMxMCsvREMzMC9EQzMwKywgSW9tZWdhIEJ1eiwgTGludXgKKyAqIE1lZGlhIExhYnMgTE1MMzMvTE1MMzNSMTAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFNlcmd1ZWkgTWlyaWRvbm92IDxtaXJzZXZAY2ljZXNlLm14PgorICoKKyAqIENoYW5nZXMgZm9yIEJVWiBieSBXb2xmZ2FuZyBTY2hlcnIgPHNjaGVyckBuZXQ0eW91Lm5ldD4KKyAqCisgKiBDaGFuZ2VzIGZvciBEQzEwL0RDMzAgYnkgTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBza3luZXQuYmU+CisgKgorICogQ2hhbmdlcyBmb3IgTE1MMzNSMTAgYnkgTWF4aW0gWWV2dHl1c2hraW4gPG1heEBsaW51eG1lZGlhbGFicy5jb20+CisgKgorICogQ2hhbmdlcyBmb3IgdmlkZW9kZXYyL3Y0bDIgYnkgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorICoKKyAqIEJhc2VkIG9uCisgKgorICogTWlybyBEQzEwIGRyaXZlcgorICogQ29weXJpZ2h0IChDKSAxOTk5IFdvbGZnYW5nIFNjaGVyciA8c2NoZXJyQG5ldDR5b3UubmV0PgorICoKKyAqIElvbWVnYSBCdXogZHJpdmVyIHZlcnNpb24gMS4wCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgUmFpbmVyIEpvaGFubmkgPFJhaW5lckBKb2hhbm5pLmRlPgorICoKKyAqIGJ1ei4wLjAuMworICogQ29weXJpZ2h0IChDKSAxOTk4IERhdmUgUGVya3MgPGRwZXJrc0BpYm0ubmV0PgorICoKKyAqIGJ0dHYgLSBCdDg0OCBmcmFtZSBncmFiYmVyIGRyaXZlcgorICogQ29weXJpZ2h0IChDKSAxOTk2LDk3LDk4IFJhbHBoICBNZXR6bGVyIChyamttQHRocC51bmkta29lbG4uZGUpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICYgTWFyY3VzIE1ldHpsZXIgKG1vY21AdGhwLnVuaS1rb2Vsbi5kZSkKKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNkZWZpbmUgICAgIE1BUF9OUih4KSAgICAgICB2aXJ0X3RvX3BhZ2UoeCkKKyNkZWZpbmUgICAgIFpPUkFOX1ZJRF9UWVBFICAoIFwKKwkJCQlWSURfVFlQRV9DQVBUVVJFIHwgXAorCQkJCVZJRF9UWVBFX09WRVJMQVkgfCBcCisJCQkJVklEX1RZUEVfQ0xJUFBJTkcgfCBcCisJCQkJVklEX1RZUEVfRlJBTUVSQU0gfCBcCisJCQkJVklEX1RZUEVfU0NBTEVTIHwgXAorCQkJCVZJRF9UWVBFX01KUEVHX0RFQ09ERVIgfCBcCisJCQkJVklEX1RZUEVfTUpQRUdfRU5DT0RFUiBcCisJCQkgICAgICkKKworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSAidmlkZW9jb2RlYy5oIgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgInpvcmFuLmgiCisjaW5jbHVkZSAiem9yYW5fZGV2aWNlLmgiCisjaW5jbHVkZSAiem9yYW5fY2FyZC5oIgorCisJLyogd2UgZGVjbGFyZSBzb21lIGNhcmQgdHlwZSBkZWZpbml0aW9ucyBoZXJlLCB0aGV5IG1lYW4KKwkgKiB0aGUgc2FtZSBhcyB0aGUgdjRsMSBaT1JBTl9WSURfVFlQRSBhYm92ZSwgZXhjZXB0IGl0J3MgdjRsMiAqLworI2RlZmluZSBaT1JBTl9WNEwyX1ZJRF9GTEFHUyAoIFwKKwkJCQlWNEwyX0NBUF9TVFJFQU1JTkcgfFwKKwkJCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHxcCisJCQkJVjRMMl9DQVBfVklERU9fT1VUUFVUIHxcCisJCQkJVjRMMl9DQVBfVklERU9fT1ZFUkxBWSBcCisJCQkgICAgICApCisKKworI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUKQorI2RlZmluZSBaRk1UKHBhbCwgZmNjLCBjcykgXAorCS5wYWxldHRlID0gKHBhbCksIC5mb3VyY2MgPSAoZmNjKSwgLmNvbG9yc3BhY2UgPSAoY3MpCisjZWxzZQorI2RlZmluZSBaRk1UKHBhbCwgZmNjLCBjcykgXAorCS5mb3VyY2MgPSAoZmNjKSwgLmNvbG9yc3BhY2UgPSAoY3MpCisjZW5kaWYKKworY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCB6b3Jhbl9mb3JtYXRzW10gPSB7CisJeworCQkubmFtZSA9ICIxNS1iaXQgUkdCIExFIiwKKwkJWkZNVChWSURFT19QQUxFVFRFX1JHQjU1NSwKKwkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTU1LCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCisJCS5kZXB0aCA9IDE1LAorCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CisJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCisJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjU1NXxaUjM2MDU3X1ZGRVNQRlJfRXJyRGlmfAorCQkJICAgWlIzNjA1N19WRkVTUEZSX0xpdHRsZUVuZGlhbiwKKwl9LCB7CisJCS5uYW1lID0gIjE1LWJpdCBSR0IgQkUiLAorCQlaRk1UKC0xLAorCQkgICAgIFY0TDJfUElYX0ZNVF9SR0I1NTVYLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCisJCS5kZXB0aCA9IDE1LAorCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CisJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCisJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjU1NXxaUjM2MDU3X1ZGRVNQRlJfRXJyRGlmLAorCX0sIHsKKwkJLm5hbWUgPSAiMTYtYml0IFJHQiBMRSIsCisJCVpGTVQoVklERU9fUEFMRVRURV9SR0I1NjUsCisJCSAgICAgVjRMMl9QSVhfRk1UX1JHQjU2NSwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZGVwdGggPSAxNiwKKwkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAorCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAorCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I1NjV8WlIzNjA1N19WRkVTUEZSX0VyckRpZnwKKwkJCSAgIFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCisJfSwgeworCQkubmFtZSA9ICIxNi1iaXQgUkdCIEJFIiwKKwkJWkZNVCgtMSwKKwkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTY1WCwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZGVwdGggPSAxNiwKKwkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAorCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAorCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I1NjV8WlIzNjA1N19WRkVTUEZSX0VyckRpZiwKKwl9LCB7CisJCS5uYW1lID0gIjI0LWJpdCBSR0IiLAorCQlaRk1UKFZJREVPX1BBTEVUVEVfUkdCMjQsCisJCSAgICAgVjRMMl9QSVhfRk1UX0JHUjI0LCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCisJCS5kZXB0aCA9IDI0LAorCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CisJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCisJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjg4OHxaUjM2MDU3X1ZGRVNQRlJfUGFjazI0LAorCX0sIHsKKwkJLm5hbWUgPSAiMzItYml0IFJHQiBMRSIsCisJCVpGTVQoVklERU9fUEFMRVRURV9SR0IzMiwKKwkJICAgICBWNEwyX1BJWF9GTVRfQkdSMzIsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKKwkJLmRlcHRoID0gMzIsCisJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKKwkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKKwkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCODg4fFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCisJfSwgeworCQkubmFtZSA9ICIzMi1iaXQgUkdCIEJFIiwKKwkJWkZNVCgtMSwKKwkJICAgICBWNEwyX1BJWF9GTVRfUkdCMzIsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKKwkJLmRlcHRoID0gMzIsCisJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKKwkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKKwkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCODg4LAorCX0sIHsKKwkJLm5hbWUgPSAiNDoyOjIsIHBhY2tlZCwgWVVZViIsCisJCVpGTVQoVklERU9fUEFMRVRURV9ZVVY0MjIsCisJCSAgICAgVjRMMl9QSVhfRk1UX1lVWVYsIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0pLAorCQkuZGVwdGggPSAxNiwKKwkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAorCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAorCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9ZVVY0MjIsCisJfSwgeworCQkubmFtZSA9ICI0OjI6MiwgcGFja2VkLCBVWVZZIiwKKwkJWkZNVChWSURFT19QQUxFVFRFX1VZVlksCisJCSAgICAgVjRMMl9QSVhfRk1UX1VZVlksIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0pLAorCQkuZGVwdGggPSAxNiwKKwkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAorCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAorCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9ZVVY0MjJ8WlIzNjA1N19WRkVTUEZSX0xpdHRsZUVuZGlhbiwKKwl9LCB7CisJCS5uYW1lID0gIkhhcmR3YXJlLWVuY29kZWQgTW90aW9uLUpQRUciLAorCQlaRk1UKC0xLAorCQkgICAgIFY0TDJfUElYX0ZNVF9NSlBFRywgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSksCisJCS5kZXB0aCA9IDAsCisJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKKwkJCSBaT1JBTl9GT1JNQVRfUExBWUJBQ0sgfAorCQkJIFpPUkFOX0ZPUk1BVF9DT01QUkVTU0VELAorCX0KK307CisjZGVmaW5lIE5VTV9GT1JNQVRTIEFSUkFZX1NJWkUoem9yYW5fZm9ybWF0cykKKworLy8gUko6IFRlc3Qgb25seSAtIHdhbnQgdG8gdGVzdCBCVVpfVVNFX0hJTUVNIGV2ZW4gd2hlbiBDT05GSUdfQklHUEhZU19BUkVBIGlzIGRlZmluZWQKKworCitzdGF0aWMgaW50IGxvY2tfbm9ybTsJLyogMCA9IGRlZmF1bHQgMSA9IERvbid0IGNoYW5nZSBUViBzdGFuZGFyZCAobm9ybSkgKi8KK21vZHVsZV9wYXJhbShsb2NrX25vcm0sIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGxvY2tfbm9ybSwgIlByZXZlbnQgbm9ybSBjaGFuZ2VzICgxID0gaWdub3JlLCA+MSA9IGZhaWwpIik7CisKKwkvKiBzbWFsbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNhbGN1bGF0aW5nIGJ1ZmZlcnNpemVzIGZvciB2NGwyCisJICogd2UgY2FsY3VsYXRlIHRoZSBuZWFyZXN0IGhpZ2hlciBwb3dlci1vZi10d28sIHdoaWNoCisJICogd2lsbCBiZSB0aGUgcmVjb21tZW5kZWQgYnVmZmVyc2l6ZSAqLworc3RhdGljIF9fdTMyCit6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSAoc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyAqc2V0dGluZ3MpCit7CisJX191OCBkaXYgPSBzZXR0aW5ncy0+VmVyRGNtICogc2V0dGluZ3MtPkhvckRjbSAqIHNldHRpbmdzLT5UbXBEY207CisJX191MzIgbnVtID0gKDEwMjQgKiA1MTIpIC8gKGRpdik7CisJX191MzIgcmVzdWx0ID0gMjsKKworCW51bS0tOworCXdoaWxlIChudW0pIHsKKwkJbnVtID4+PSAxOworCQlyZXN1bHQgPDw9IDE7CisJfQorCisJaWYgKHJlc3VsdCA+IGpwZ19idWZzaXplKQorCQlyZXR1cm4ganBnX2J1ZnNpemU7CisJaWYgKHJlc3VsdCA8IDgxOTIpCisJCXJldHVybiA4MTkyOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIGZvcndhcmQgcmVmZXJlbmNlcyAqLworc3RhdGljIHZvaWQgdjRsX2ZidWZmZXJfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgdm9pZCBqcGdfZmJ1ZmZlcl9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKTsKKworLyoKKyAqICAgQWxsb2NhdGUgdGhlIFY0TCBncmFiIGJ1ZmZlcnMKKyAqCisgKiAgIFRoZXNlIGhhdmUgdG8gYmUgcHlzaWNhbGx5IGNvbnRpZ3VvdXMuCisgKiAgIElmIHY0bF9idWZzaXplIDw9IE1BWF9LTUFMTE9DX01FTSB3ZSB1c2Uga21hbGxvYworICogICBlbHNlIHdlIHRyeSB0byBhbGxvY2F0ZSB0aGVtIHdpdGggYmlncGh5c2FyZWFfYWxsb2NfcGFnZXMKKyAqICAgaWYgdGhlIGJpZ3BoeXNhcmVhIHBhdGNoIGlzIHByZXNlbnQgaW4gdGhlIGtlcm5lbCwKKyAqICAgZWxzZSB3ZSB0cnkgdG8gdXNlIGhpZ2ggbWVtb3J5IChpZiB0aGUgdXNlciBoYXMgYm9vdGV0CisgKiAgIExpbnV4IHdpdGggdGhlIG5lY2Vzc2FyeSBtZW1vcnkgbGVmdCBvdmVyKS4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZworZ2V0X2hpZ2hfbWVtICh1bnNpZ25lZCBsb25nIHNpemUpCit7CisvKgorICogQ2hlY2sgaWYgdGhlcmUgaXMgdXNhYmxlIG1lbW9yeSBhdCB0aGUgZW5kIG9mIExpbnV4IG1lbW9yeQorICogb2YgYXQgbGVhc3Qgc2l6ZS4gUmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgbWVtb3J5LAorICogcmV0dXJuIDAgb24gZmFpbHVyZS4KKyAqCisgKiBUaGUgaWRlYSBpcyBmcm9tIEFsZXhhbmRybyBSdWJpbmkncyBib29rICJMaW51eCBkZXZpY2UgZHJpdmVycyIuCisgKiBUaGUgZHJpdmVyIGZyb20gaGltIHdoaWNoIGlzIGRvd25sb2FkYWJsZSBmcm9tIE8nUmVpbGx5J3MKKyAqIHdlYiBzaXRlIG1pc3NlcyB0aGUgInZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkiIHBhcnQKKyAqIChhbmQgdGhlcmVmb3JlIGRvZXNuJ3Qgd29yayBhdCBhbGwgLSBhdCBsZWFzdCB3aXRoIDIuMi54IGtlcm5lbHMpLgorICoKKyAqIEl0IHNob3VsZCBiZSB1bm5lY2Vzc2FyeSB0byBtZW50aW9uIHRoYXQgVEhJUyBJUyBEQU5HRVJPVVMsCisgKiBpZiBtb3JlIHRoYW4gb25lIGRyaXZlciBhdCBhIHRpbWUgaGFzIHRoZSBpZGVhIHRvIHVzZSB0aGlzIG1lbW9yeSEhISEKKyAqLworCisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2lvbWVtICptZW07CisJdW5zaWduZWQgY2hhciBjOworCXVuc2lnbmVkIGxvbmcgaGlfbWVtX3BoOworCXVuc2lnbmVkIGxvbmcgaTsKKworCS8qIE1hcCB0aGUgaGlnaCBtZW1vcnkgdG8gdXNlciBzcGFjZSAqLworCisJaGlfbWVtX3BoID0gdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KTsKKworCW1lbSA9IGlvcmVtYXAoaGlfbWVtX3BoLCBzaXplKTsKKwlpZiAoIW1lbSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUiAiJXM6IGdldF9oaWdoX21lbSgpIC0gaW9yZW1hcCBmYWlsZWRcbiIsCisJCQlaT1JBTl9OQU1FKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkvKiBDaGVjayBpZiBpdCBpcyBtZW1vcnkgKi8KKwkJYyA9IGkgJiAweGZmOworCQl3cml0ZWIoYywgbWVtICsgaSk7CisJCWlmIChyZWFkYihtZW0gKyBpKSAhPSBjKQorCQkJYnJlYWs7CisJCWMgPSAyNTUgLSBjOworCQl3cml0ZWIoYywgbWVtICsgaSk7CisJCWlmIChyZWFkYihtZW0gKyBpKSAhPSBjKQorCQkJYnJlYWs7CisJCXdyaXRlYigwLCBtZW0gKyBpKTsJLyogemVybyBvdXQgbWVtb3J5ICovCisKKwkJLyogZ2l2ZSB0aGUga2VybmVsIGFpciB0byBicmVhdGggKi8KKwkJaWYgKChpICYgMHgzZmZmZikgPT0gMHgzZmZmZikKKwkJCXNjaGVkdWxlKCk7CisJfQorCisJaW91bm1hcChtZW0pOworCisJaWYgKGkgIT0gc2l6ZSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBnZXRfaGlnaF9tZW0oKSAtIHJlcXVlc3RlZCAlbHUsIGF2YWlsICVsdVxuIiwKKwkJCVpPUkFOX05BTUUsIHNpemUsIGkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gaGlfbWVtX3BoOworfQorCitzdGF0aWMgaW50Cit2NGxfZmJ1ZmZlcl9hbGxvYyAoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCBpLCBvZmY7CisJdW5zaWduZWQgY2hhciAqbWVtOworCXVuc2lnbmVkIGxvbmcgcG1lbSA9IDA7CisKKwkvKiB3ZSBtaWdodCBoYXZlIG9sZCBidWZmZXJzIGx5aW5nIGFyb3VuZC4uLiAqLworCWlmIChmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKKwkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKKwkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcikKKwkJCWRwcmludGsoMiwKKwkJCQlLRVJOX1dBUk5JTkcKKwkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBidWZmZXIgJWQgYWxscmVhZHkgYWxsb2NhdGVkIT9cbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGkpOworCisJCS8vdWRlbGF5KDIwKTsKKwkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSA8PSBNQVhfS01BTExPQ19NRU0pIHsKKwkJCS8qIFVzZSBrbWFsbG9jICovCisKKwkJCW1lbSA9IGttYWxsb2MoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghbWVtKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBrbWFsbG9jIGZvciBWNEwgYnVmICVkIGZhaWxlZFxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIGkpOworCQkJCXY0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7CisJCQkJcmV0dXJuIC1FTk9CVUZTOworCQkJfQorCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyID0gbWVtOworCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX3BoeXMgPQorCQkJICAgIHZpcnRfdG9fcGh5cyhtZW0pOworCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX2J1cyA9CisJCQkgICAgdmlydF90b19idXMobWVtKTsKKwkJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOworCQkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQorCQkJCVNldFBhZ2VSZXNlcnZlZChNQVBfTlIobWVtICsgb2ZmKSk7CisJCQlkcHJpbnRrKDQsCisJCQkJS0VSTl9JTkZPCisJCQkJIiVzOiB2NGxfZmJ1ZmZlcl9hbGxvYygpIC0gVjRMIGZyYW1lICVkIG1lbSAweCVseCAoYnVzOiAweCVseClcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGksICh1bnNpZ25lZCBsb25nKSBtZW0sCisJCQkJdmlydF90b19idXMobWVtKSk7CisJCX0gZWxzZSB7CisKKwkJCS8qIFVzZSBoaWdoIG1lbW9yeSB3aGljaCBoYXMgYmVlbiBsZWZ0IGF0IGJvb3QgdGltZSAqLworCisJCQkvKiBPay4sIE9rLiB0aGlzIGlzIGFuIGV2aWwgaGFjayAtIHdlIG1ha2UKKwkJCSAqIHRoZSBhc3N1bXB0aW9uIHRoYXQgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZQorCQkJICogdGhlIHNhbWUgYXMgYnVzIGFkZHJlc3NlcyAodHJ1ZSBhdCBsZWFzdAorCQkJICogZm9yIEludGVsIHByb2Nlc3NvcnMpLiBUaGUgd2hvbGUgbWV0aG9kIG9mCisJCQkgKiBvYnRhaW5pbmcgYW5kIHVzaW5nIHRoaXMgbWVtb3J5IGlzIG5vdCB2ZXJ5CisJCQkgKiBuaWNlIC0gYnV0IEkgaG9wZSBpdCBzYXZlcyBzb21lIHBvb3IgdXNlcnMKKwkJCSAqIGZyb20ga2VybmVsIGhhY2tpbmcsIHdoaWNoIG1pZ2h0IGhhdmUgZXZlbgorCQkJICogbW9yZSBldmlsIHJlc3VsdHMgKi8KKworCQkJaWYgKGkgPT0gMCkgeworCQkJCWludCBzaXplID0KKwkJCQkgICAgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzICoKKwkJCQkgICAgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOworCisJCQkJcG1lbSA9IGdldF9oaWdoX21lbShzaXplKTsKKwkJCQlpZiAocG1lbSA9PSAwKSB7CisJCQkJCWRwcmludGsoMSwKKwkJCQkJCUtFUk5fRVJSCisJCQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBnZXRfaGlnaF9tZW0gKHNpemUgPSAlZCBLQikgZm9yIFY0TCBidWZzIGZhaWxlZFxuIiwKKwkJCQkJCVpSX0RFVk5BTUUoenIpLCBzaXplID4+IDEwKTsKKwkJCQkJcmV0dXJuIC1FTk9CVUZTOworCQkJCX0KKwkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyWzBdLmZidWZmZXIgPSBOVUxMOworCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbMF0uZmJ1ZmZlcl9waHlzID0gcG1lbTsKKwkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyWzBdLmZidWZmZXJfYnVzID0gcG1lbTsKKwkJCQlkcHJpbnRrKDQsCisJCQkJCUtFUk5fSU5GTworCQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSB1c2luZyAlZCBLQiBoaWdoIG1lbW9yeVxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIHNpemUgPj4gMTApOworCQkJfSBlbHNlIHsKKwkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIgPSBOVUxMOworCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcl9waHlzID0KKwkJCQkgICAgcG1lbSArIGkgKiBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX2J1cyA9CisJCQkJICAgIHBtZW0gKyBpICogZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOworCQkJfQorCQl9CisJfQorCisJZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyogZnJlZSB0aGUgVjRMIGdyYWIgYnVmZmVycyAqLworc3RhdGljIHZvaWQKK3Y0bF9mYnVmZmVyX2ZyZWUgKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgaSwgb2ZmOworCXVuc2lnbmVkIGNoYXIgKm1lbTsKKworCWRwcmludGsoNCwgS0VSTl9JTkZPICIlczogdjRsX2ZidWZmZXJfZnJlZSgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKKwkJaWYgKCFmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIpCisJCQljb250aW51ZTsKKworCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplIDw9IE1BWF9LTUFMTE9DX01FTSkgeworCQkJbWVtID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyOworCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCisJCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQoTUFQX05SKG1lbSArIG9mZikpOworCQkJa2ZyZWUoKHZvaWQgKikgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyKTsKKwkJfQorCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIgPSBOVUxMOworCX0KKworCWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCWZoLT52NGxfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCA9IDA7Cit9CisKKy8qCisgKiAgIEFsbG9jYXRlIHRoZSBNSlBFRyBncmFiIGJ1ZmZlcnMuCisgKgorICogICBJZiB0aGUgcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGlzIHNtYWxsZXIgdGhhbiBNQVhfS01BTExPQ19NRU0sCisgKiAgIGttYWxsb2MgaXMgdXNlZCB0byByZXF1ZXN0IGEgcGh5c2ljYWxseSBjb250aWd1b3VzIGFyZWEsCisgKiAgIGVsc2Ugd2UgYWxsb2NhdGUgdGhlIG1lbW9yeSBpbiBmcmFtZ2VudHMgd2l0aCBnZXRfemVyb2VkX3BhZ2UuCisgKgorICogICBJZiBhIE5hdG9tYSBjaGlwc2V0IGlzIHByZXNlbnQgYW5kIHRoaXMgaXMgYSByZXZpc2lvbiAxIHpyMzYwNTcsCisgKiAgIGVhY2ggTUpQRUcgYnVmZmVyIG5lZWRzIHRvIGJlIHBoeXNpY2FsbHkgY29udGlndW91cy4KKyAqICAgKFJKOiBUaGlzIHN0YXRlbWVudCBpcyBmcm9tIERhdmUgUGVya3MnIG9yaWdpbmFsIGRyaXZlciwKKyAqICAgSSBjb3VsZCBuZXZlciBjaGVjayBpdCBiZWNhdXNlIEkgaGF2ZSBhIHpyMzYwNjcpCisgKiAgIFRoZSBkcml2ZXIgY2FyZXMgYWJvdXQgdGhpcyBiZWNhdXNlIGl0IHJlZHVjZXMgdGhlIGJ1ZmZlcgorICogICBzaXplIHRvIE1BWF9LTUFMTE9DX01FTSBpbiB0aGF0IGNhc2UgKHdoaWNoIGZvcmNlcyBjb250aWd1b3VzIGFsbG9jYXRpb24pLgorICoKKyAqICAgUko6IFRoZSBjb250ZW50cyBncmFiIGJ1ZmZlcnMgbmVlZHMgbmV2ZXIgYmUgYWNjZXNzZWQgaW4gdGhlIGRyaXZlci4KKyAqICAgICAgIFRoZXJlZm9yZSB0aGVyZSBpcyBubyBuZWVkIHRvIGFsbG9jYXRlIHRoZW0gd2l0aCB2bWFsbG9jIGluIG9yZGVyCisgKiAgICAgICB0byBnZXQgYSBjb250aWd1b3VzIHZpcnR1YWwgbWVtb3J5IHNwYWNlLgorICogICAgICAgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSBtYW55IG90aGVyIGRyaXZlcnMgZmlyc3QgYWxsb2NhdGUgdGhlbSB3aXRoCisgKiAgICAgICB2bWFsbG9jICh3aGljaCB1c2VzIGludGVybmFsbHkgYWxzbyBnZXRfemVyb2VkX3BhZ2UsIGJ1dCBkZWxpdmVycyB5b3UKKyAqICAgICAgIHZpcnR1YWwgYWRkcmVzc2VzKSBhbmQgdGhlbiBhZ2FpbiBoYXZlIHRvIG1ha2UgYSBsb3Qgb2YgZWZmb3J0cworICogICAgICAgdG8gZ2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzLgorICoKKyAqICAgQmVuIENhcHBlcjoKKyAqICAgICAgIE9uIGJpZy1lbmRpYW4gYXJjaGl0ZWN0dXJlcyAoc3VjaCBhcyBwcGMpIHNvbWUgZXh0cmEgc3RlcHMKKyAqICAgICAgIGFyZSBuZWVkZWQuIFdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUgc3RhdF9jb20gYXJyYXkKKyAqICAgICAgIGFuZCBmcmFnbWVudCBidWZmZXJzLCB0aGUgZGV2aWNlIGV4cGVjdHMgdG8gc2VlIGxpdHRsZS0KKyAqICAgICAgIGVuZGlhbiB2YWx1ZXMuIFRoZSB1c2Ugb2YgY3B1X3RvX2xlMzIoKSBhbmQgbGUzMl90b19jcHUoKQorICogICAgICAgaW4gdGhpcyBmdW5jdGlvbiAoYW5kIG9uZSBvciB0d28gb3RoZXJzIGluIHpvcmFuX2RldmljZS5jKQorICogICAgICAgZW5zdXJlIHRoYXQgdGhlc2UgdmFsdWVzIGFyZSBhbHdheXMgc3RvcmVkIGluIGxpdHRsZS1lbmRpYW4KKyAqICAgICAgIGZvcm0sIHJlZ2FyZGxlc3Mgb2YgYXJjaGl0ZWN0dXJlLiBUaGUgenIzNjA1NyBkb2VzIFZlcnkgQmFkCisgKiAgICAgICBUaGluZ3Mgb24gYmlnIGVuZGlhbiBhcmNoaXRlY3R1cmVzIGlmIHRoZSBzdGF0X2NvbSBhcnJheQorICogICAgICAgYW5kIGZyYWdtZW50IGJ1ZmZlcnMgYXJlIG5vdCBsaXR0bGUtZW5kaWFuLgorICovCisKK3N0YXRpYyBpbnQKK2pwZ19mYnVmZmVyX2FsbG9jIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IGksIGosIG9mZjsKKwl1bnNpZ25lZCBsb25nIG1lbTsKKworCS8qIHdlIG1pZ2h0IGhhdmUgb2xkIGJ1ZmZlcnMgbHlpbmcgYXJvdW5kICovCisJaWYgKGZoLT5qcGdfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkgeworCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgeworCQlpZiAoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYikKKwkJCWRwcmludGsoMiwKKwkJCQlLRVJOX1dBUk5JTkcKKwkJCQkiJXM6IGpwZ19mYnVmZmVyX2FsbG9jKCkgLSBidWZmZXIgJWQgYWxscmVhZHkgYWxsb2NhdGVkIT9cbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGkpOworCisJCS8qIEFsbG9jYXRlIGZyYWdtZW50IHRhYmxlIGZvciB0aGlzIGJ1ZmZlciAqLworCisJCW1lbSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKG1lbSA9PSAwKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IGpwZ19mYnVmZmVyX2FsbG9jKCkgLSBnZXRfemVyb2VkX3BhZ2UgKGZyYWdfdGFiKSBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7CisJCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCQkJcmV0dXJuIC1FTk9CVUZTOworCQl9CisJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWIgPSAoX19sZTMyICopIG1lbTsKKwkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYl9idXMgPQorCQkgICAgdmlydF90b19idXMoKHZvaWQgKikgbWVtKTsKKworCQkvL2lmIChhbGxvY19jb250aWcpIHsKKwkJaWYgKGZoLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXMpIHsKKwkJCW1lbSA9CisJCQkgICAgKHVuc2lnbmVkIGxvbmcpIGttYWxsb2MoZmgtPmpwZ19idWZmZXJzLgorCQkJCQkJICAgIGJ1ZmZlcl9zaXplLAorCQkJCQkJICAgIEdGUF9LRVJORUwpOworCQkJaWYgKG1lbSA9PSAwKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IGpwZ19mYnVmZmVyX2FsbG9jKCkgLSBrbWFsbG9jIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7CisJCQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKKwkJCQlyZXR1cm4gLUVOT0JVRlM7CisJCQl9CisJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzBdID0KKwkJCSAgICBjcHVfdG9fbGUzMih2aXJ0X3RvX2J1cygodm9pZCAqKSBtZW0pKTsKKwkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMV0gPQorCQkJICAgIGNwdV90b19sZTMyKCgoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplIC8gNCkgPDwgMSkgfCAxKTsKKwkJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOworCQkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQorCQkJCVNldFBhZ2VSZXNlcnZlZChNQVBfTlIobWVtICsgb2ZmKSk7CisJCX0gZWxzZSB7CisJCQkvKiBqcGdfYnVmc2l6ZSBpcyBhbGxyZWF5IHBhZ2UgYWxpZ25lZCAqLworCQkJZm9yIChqID0gMDsKKwkJCSAgICAgaiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsKKwkJCSAgICAgaisrKSB7CisJCQkJbWVtID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQkJCWlmIChtZW0gPT0gMCkgeworCQkJCQlkcHJpbnRrKDEsCisJCQkJCQlLRVJOX0VSUgorCQkJCQkJIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0gZ2V0X3plcm9lZF9wYWdlIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAorCQkJCQkJWlJfREVWTkFNRSh6ciksIGkpOworCQkJCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCQkJCQlyZXR1cm4gLUVOT0JVRlM7CisJCQkJfQorCisJCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogal0gPQorCQkJCSAgICBjcHVfdG9fbGUzMih2aXJ0X3RvX2J1cygodm9pZCAqKSBtZW0pKTsKKwkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqICsKKwkJCQkJCQkJICAgMV0gPQorCQkJCSAgICBjcHVfdG9fbGUzMigoUEFHRV9TSVpFIC8gNCkgPDwgMSk7CisJCQkJU2V0UGFnZVJlc2VydmVkKE1BUF9OUihtZW0pKTsKKwkJCX0KKworCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogaiAtIDFdIHw9IGNwdV90b19sZTMyKDEpOworCQl9CisJfQorCisJZHByaW50ayg0LAorCQlLRVJOX0RFQlVHICIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtICVkIEtCIGFsbG9jYXRlZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksCisJCShmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgKgorCQkgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplKSA+PiAxMCk7CisKKwlmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMTsKKworCXJldHVybiAwOworfQorCisvKiBmcmVlIHRoZSBNSlBFRyBncmFiIGJ1ZmZlcnMgKi8KK3N0YXRpYyB2b2lkCitqcGdfZmJ1ZmZlcl9mcmVlIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IGksIGosIG9mZjsKKwl1bnNpZ25lZCBjaGFyICptZW07CisKKwlkcHJpbnRrKDQsIEtFUk5fREVCVUcgIiVzOiBqcGdfZmJ1ZmZlcl9mcmVlKClcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCWZvciAoaSA9IDA7IGkgPCBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgeworCQlpZiAoIWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWIpCisJCQljb250aW51ZTsKKworCQkvL2lmIChhbGxvY19jb250aWcpIHsKKwkJaWYgKGZoLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXMpIHsKKwkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzBdKSB7CisJCQkJbWVtID0gKHVuc2lnbmVkIGNoYXIgKikgYnVzX3RvX3ZpcnQobGUzMl90b19jcHUoCisJCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0pKTsKKwkJCQlmb3IgKG9mZiA9IDA7CisJCQkJICAgICBvZmYgPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCQkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQorCQkJCQlDbGVhclBhZ2VSZXNlcnZlZChNQVBfTlIKKwkJCQkJCQkgIChtZW0gKyBvZmYpKTsKKwkJCQlrZnJlZShtZW0pOworCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0gPSAwOworCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMV0gPSAwOworCQkJfQorCQl9IGVsc2UgeworCQkJZm9yIChqID0gMDsKKwkJCSAgICAgaiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsKKwkJCSAgICAgaisrKSB7CisJCQkJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLgorCQkJCSAgICBmcmFnX3RhYlsyICogal0pCisJCQkJCWJyZWFrOworCQkJCUNsZWFyUGFnZVJlc2VydmVkKE1BUF9OUgorCQkJCQkJICAoYnVzX3RvX3ZpcnQKKwkJCQkJCSAgIChsZTMyX3RvX2NwdQorCQkJCQkJICAgIChmaC0+anBnX2J1ZmZlcnMuCisJCQkJCQkgICAgIGJ1ZmZlcltpXS5mcmFnX3RhYlsyICoKKwkJCQkJCQkJICAgICAgIGpdKSkpKTsKKwkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpCisJCQkJCSAgYnVzX3RvX3ZpcnQKKwkJCQkJCSAgKGxlMzJfdG9fY3B1CisJCQkJCQkgICAoZmgtPmpwZ19idWZmZXJzLgorCQkJCQkJICAgICAgYnVmZmVyW2ldLgorCQkJCQkJICAgICAgZnJhZ190YWJbMiAqIGpdKSkpOworCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMiAqIGpdID0KKwkJCQkgICAgMDsKKwkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqICsKKwkJCQkJCQkJICAgMV0gPSAwOworCQkJfQorCQl9CisKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLgorCQkJICBmcmFnX3RhYik7CisJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWIgPSBOVUxMOworCX0KKworCWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCWZoLT5qcGdfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCA9IDA7Cit9CisKKy8qCisgKiAgIFY0TCBCdWZmZXIgZ3JhYmJpbmcKKyAqLworCitzdGF0aWMgaW50Cit6b3Jhbl92NGxfc2V0X2Zvcm1hdCAoc3RydWN0IGZpbGUgICAgICAgICAgICAgICAqZmlsZSwKKwkJICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisJCSAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwKKwkJICAgICAgY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCAqZm9ybWF0KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgYnBwOworCisJLyogQ2hlY2sgc2l6ZSBhbmQgZm9ybWF0IG9mIHRoZSBncmFiIHdhbnRlZCAqLworCisJaWYgKGhlaWdodCA8IEJVWl9NSU5fSEVJR0hUIHx8IHdpZHRoIDwgQlVaX01JTl9XSURUSCB8fAorCSAgICBoZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCB8fCB3aWR0aCA+IEJVWl9NQVhfV0lEVEgpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogdjRsX3NldF9mb3JtYXQoKSAtIHdyb25nIGZyYW1lIHNpemUgKCVkeCVkKVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCB3aWR0aCwgaGVpZ2h0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYnBwID0gKGZvcm1hdC0+ZGVwdGggKyA3KSAvIDg7CisKKwkvKiBDaGVjayBhZ2FpbnN0IGF2YWlsYWJsZSBidWZmZXIgc2l6ZSAqLworCWlmIChoZWlnaHQgKiB3aWR0aCAqIGJwcCA+IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiB2NGxfc2V0X2Zvcm1hdCgpIC0gdmlkZW8gYnVmZmVyIHNpemUgKCVkIGtCKSBpcyB0b28gc21hbGxcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplID4+IDEwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVGhlIHZpZGVvIGZyb250IGVuZCBuZWVkcyA0LWJ5dGUgYWxpbmdlZCBsaW5lIHNpemVzICovCisKKwlpZiAoKGJwcCA9PSAyICYmICh3aWR0aCAmIDEpKSB8fCAoYnBwID09IDMgJiYgKHdpZHRoICYgMykpKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHY0bF9zZXRfZm9ybWF0KCkgLSB3cm9uZyBmcmFtZSBhbGluZ21lbnRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZoLT52NGxfc2V0dGluZ3Mud2lkdGggPSB3aWR0aDsKKwlmaC0+djRsX3NldHRpbmdzLmhlaWdodCA9IGhlaWdodDsKKwlmaC0+djRsX3NldHRpbmdzLmZvcm1hdCA9IGZvcm1hdDsKKwlmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZSA9IGJwcCAqIGZoLT52NGxfc2V0dGluZ3Mud2lkdGg7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorem9yYW5fdjRsX3F1ZXVlX2ZyYW1lIChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICAgIGludCAgICAgICAgICBudW0pCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoIWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogdjRsX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRU5PTUVNOworCX0KKworCS8qIE5vIGdyYWJiaW5nIG91dHNpZGUgdGhlIGJ1ZmZlciByYW5nZSEgKi8KKwlpZiAobnVtID49IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyB8fCBudW0gPCAwKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHY0bF9xdWV1ZV9mcmFtZSgpIC0gYnVmZmVyICVkIGlzIG91dCBvZiByYW5nZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBudW0pOworCQlyZXMgPSAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwkJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgeworCQkJenItPnY0bF9idWZmZXJzID0gZmgtPnY0bF9idWZmZXJzOworCQkJZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0FDVElWRTsKKwkJfSBlbHNlIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogdjRsX3F1ZXVlX2ZyYW1lKCkgLSBhbm90aGVyIHNlc3Npb24gaXMgYWxyZWFkeSBjYXB0dXJpbmdcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmVzID0gLUVCVVNZOworCQl9CisJfQorCisJLyogbWFrZSBzdXJlIGEgZ3JhYiBpc24ndCBnb2luZyBvbiBjdXJyZW50bHkgd2l0aCB0aGlzIGJ1ZmZlciAqLworCWlmICghcmVzKSB7CisJCXN3aXRjaCAoenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlKSB7CisJCWRlZmF1bHQ6CisJCWNhc2UgQlVaX1NUQVRFX1BFTkQ6CisJCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJCQkJZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCQkJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJCQl9CisJCQlyZXMgPSAtRUJVU1k7CS8qIHdoYXQgYXJlIHlvdSBkb2luZz8gKi8KKwkJCWJyZWFrOworCQljYXNlIEJVWl9TVEFURV9ET05FOgorCQkJZHByaW50aygyLAorCQkJCUtFUk5fV0FSTklORworCQkJCSIlczogdjRsX3F1ZXVlX2ZyYW1lKCkgLSBxdWV1ZWluZyBidWZmZXIgJWQgaW4gc3RhdGUgRE9ORSE/XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBudW0pOworCQljYXNlIEJVWl9TVEFURV9VU0VSOgorCQkJLyogc2luY2UgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHVudXNlZCBidWZmZXIgdGhlcmUncyByb29tIGZvciBhdCBsZWFzdAorCQkJICogb25lIG1vcmUgcGVuZFtdIGVudHJ5ICovCisJCQl6ci0+djRsX3BlbmRbenItPnY0bF9wZW5kX2hlYWQrKyAmCisJCQkJCVY0TF9NQVNLX0ZSQU1FXSA9IG51bTsKKwkJCXpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9IEJVWl9TVEFURV9QRU5EOworCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLmJzLmxlbmd0aCA9CisJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmUgKgorCQkJICAgIHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0OworCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dID0KKwkJCSAgICB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV07CisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKCFyZXMgJiYgenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQorCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQKK3Y0bF9ncmFiIChzdHJ1Y3QgZmlsZSAgICAgICAqZmlsZSwKKwkgIHN0cnVjdCB2aWRlb19tbWFwICptcCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlcyA9IDAsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykgeworCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5wYWxldHRlID09IG1wLT5mb3JtYXQgJiYKKwkJICAgIHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBaT1JBTl9GT1JNQVRfQ0FQVFVSRSAmJgorCQkgICAgISh6b3Jhbl9mb3JtYXRzW2ldLmZsYWdzICYgWk9SQU5fRk9STUFUX0NPTVBSRVNTRUQpKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IE5VTV9GT1JNQVRTIHx8IHpvcmFuX2Zvcm1hdHNbaV0uZGVwdGggPT0gMCkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiB2NGxfZ3JhYigpIC0gd3JvbmcgYnl0ZXMtcGVyLXBpeGVsIGZvcm1hdFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBUbyBtaW5pbWl6ZSB0aGUgdGltZSBzcGVudCBpbiB0aGUgSVJRIHJvdXRpbmUsIHdlIGF2b2lkIHNldHRpbmcgdXAKKwkgKiB0aGUgdmlkZW8gZnJvbnQgZW5kIHRoZXJlLgorCSAqIElmIHRoaXMgZ3JhYiBoYXMgZGlmZmVyZW50IHBhcmFtZXRlcnMgZnJvbSBhIHJ1bm5pbmcgc3RyZWFtaW5nIGNhcHR1cmUKKwkgKiB3ZSBzdG9wIHRoZSBzdHJlYW1pbmcgY2FwdHVyZSBhbmQgc3RhcnQgaXQgb3ZlciBhZ2Fpbi4KKwkgKi8KKwlpZiAoenItPnY0bF9tZW1ncmFiX2FjdGl2ZSAmJgorCSAgICAoenItPnY0bF9zZXR0aW5ncy53aWR0aCAhPSBtcC0+d2lkdGggfHwKKwkgICAgIHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0ICE9IG1wLT5oZWlnaHQgfHwKKwkgICAgIHpyLT52NGxfc2V0dGluZ3MuZm9ybWF0LT5wYWxldHRlICE9IG1wLT5mb3JtYXQpKSB7CisJCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKKwkJaWYgKHJlcykKKwkJCXJldHVybiByZXM7CisJfQorCWlmICgocmVzID0gem9yYW5fdjRsX3NldF9mb3JtYXQoZmlsZSwKKwkJCQkJbXAtPndpZHRoLAorCQkJCQltcC0+aGVpZ2h0LAorCQkJCQkmem9yYW5fZm9ybWF0c1tpXSkpKQorCQlyZXR1cm4gcmVzOworCXpyLT52NGxfc2V0dGluZ3MgPSBmaC0+djRsX3NldHRpbmdzOworCisJLyogcXVldWUgdGhlIGZyYW1lIGluIHRoZSBwZW5kaW5nIHF1ZXVlICovCisJaWYgKChyZXMgPSB6b3Jhbl92NGxfcXVldWVfZnJhbWUoZmlsZSwgbXAtPmZyYW1lKSkpIHsKKwkJZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCXJldHVybiByZXM7CisJfQorCisJLyogcHV0IHRoZSAzNjA1NyBpbnRvIGZyYW1lIGdyYWJiaW5nIG1vZGUgKi8KKwlpZiAoIXJlcyAmJiAhenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkKKwkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMSk7CisKKwkvL2RwcmludGsoNCwgS0VSTl9JTkZPICIlczogRnJhbWUgZ3JhYiAzLi4uXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogU3luYyBvbiBhIFY0TCBidWZmZXIKKyAqLworCitzdGF0aWMgaW50Cit2NGxfc3luYyAoc3RydWN0IGZpbGUgKmZpbGUsCisJICBpbnQgICAgICAgICAgZnJhbWUpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHY0bF9zeW5jKCkgLSBubyBncmFiIGFjdGl2ZSBmb3IgdGhpcyBzZXNzaW9uXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjaGVjayBwYXNzZWQtaW4gZnJhbWUgbnVtYmVyICovCisJaWYgKGZyYW1lID49IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyB8fCBmcmFtZSA8IDApIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIgIiVzOiB2NGxfc3luYygpIC0gZnJhbWUgJWQgaXMgaW52YWxpZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBmcmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENoZWNrIGlmIGlzIGJ1ZmZlciB3YXMgcXVldWVkIGF0IGFsbCAqLworCWlmICh6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiB2NGxfc3luYygpIC0gYXR0ZW1wdCB0byBzeW5jIG9uIGEgYnVmZmVyIHdoaWNoIHdhcyBub3QgcXVldWVkP1xuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FUFJPVE87CisJfQorCisJLyogd2FpdCBvbiB0aGlzIGJ1ZmZlciB0byBnZXQgcmVhZHkgKi8KKwlpZiAoIXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHpyLT52NGxfY2FwcSwKKwkJCQkoenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgIT0gQlVaX1NUQVRFX1BFTkQpLAorCQkJCTEwKkhaKSkKKwkJcmV0dXJuIC1FVElNRTsKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBidWZmZXIgc2hvdWxkIG5vdyBiZSBpbiBCVVpfU1RBVEVfRE9ORSAqLworCWlmICh6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSAhPSBCVVpfU1RBVEVfRE9ORSkKKwkJZHByaW50aygyLAorCQkJS0VSTl9FUlIgIiVzOiB2NGxfc3luYygpIC0gaW50ZXJuYWwgc3RhdGUgZXJyb3JcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisKKwl6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOworCWZoLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdID0genItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvKiBDaGVjayBpZiBzdHJlYW1pbmcgY2FwdHVyZSBoYXMgZmluaXNoZWQgKi8KKwlpZiAoenItPnY0bF9wZW5kX3RhaWwgPT0genItPnY0bF9wZW5kX2hlYWQpIHsKKwkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7CisJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0FDVElWRSkgeworCQkJZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9IHpyLT52NGxfYnVmZmVycy5hY3RpdmUgPQorCQkJICAgIFpPUkFOX0ZSRUU7CisJCQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgIFF1ZXVlIGEgTUpQRUcgYnVmZmVyIGZvciBjYXB0dXJlL3BsYXliYWNrCisgKi8KKworc3RhdGljIGludAorem9yYW5fanBnX3F1ZXVlX2ZyYW1lIChzdHJ1Y3QgZmlsZSAgICAgICAgICAqZmlsZSwKKwkJICAgICAgIGludCAgICAgICAgICAgICAgICAgICBudW0sCisJCSAgICAgICBlbnVtIHpvcmFuX2NvZGVjX21vZGUgbW9kZSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzID0gMDsKKworCS8qIENoZWNrIGlmIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCAqLworCWlmICghZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIGJ1ZmZlcnMgbm90IHlldCBhbGxvY2F0ZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIE5vIGdyYWJiaW5nIG91dHNpZGUgdGhlIGJ1ZmZlciByYW5nZSEgKi8KKwlpZiAobnVtID49IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyB8fCBudW0gPCAwKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IGpwZ19xdWV1ZV9mcmFtZSgpIC0gYnVmZmVyICVkIG91dCBvZiByYW5nZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBudW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiB3aGF0IGlzIHRoZSBjb2RlYyBtb2RlIHJpZ2h0IG5vdz8gKi8KKwlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfSURMRSkgeworCQl6ci0+anBnX3NldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKKwl9IGVsc2UgaWYgKHpyLT5jb2RlY19tb2RlICE9IG1vZGUpIHsKKwkJLyogd3JvbmcgY29kZWMgbW9kZSBhY3RpdmUgLSBpbnZhbGlkICovCisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IGpwZ19xdWV1ZV9mcmFtZSgpIC0gY29kZWMgaW4gd3JvbmcgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgeworCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJCQl6ci0+anBnX2J1ZmZlcnMgPSBmaC0+anBnX2J1ZmZlcnM7CisJCQlmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fQUNUSVZFOworCQl9IGVsc2UgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIGFub3RoZXIgc2Vzc2lvbiBpcyBhbHJlYWR5IGNhcHR1cmluZ1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXMgPSAtRUJVU1k7CisJCX0KKwl9CisKKwlpZiAoIXJlcyAmJiB6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9JRExFKSB7CisJCS8qIE9rIGxvYWQgdXAgdGhlIGpwZWcgY29kZWMgKi8KKwkJenIzNjA1N19lbmFibGVfanBnKHpyLCBtb2RlKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoIXJlcykgeworCQlzd2l0Y2ggKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSkgeworCQljYXNlIEJVWl9TVEFURV9ET05FOgorCQkJZHByaW50aygyLAorCQkJCUtFUk5fV0FSTklORworCQkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBxdWVpbmcgZnJhbWUgaW4gQlVaX1NUQVRFX0RPTkUgc3RhdGUhP1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCWNhc2UgQlVaX1NUQVRFX1VTRVI6CisJCQkvKiBzaW5jZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgdW51c2VkIGJ1ZmZlciB0aGVyZSdzIHJvb20gZm9yIGF0CisJCQkgKmxlYXN0IG9uZSBtb3JlIHBlbmRbXSBlbnRyeSAqLworCQkJenItPmpwZ19wZW5kW3pyLT5qcGdfcXVlX2hlYWQrKyAmIEJVWl9NQVNLX0ZSQU1FXSA9CisJCQkgICAgbnVtOworCQkJenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID0gQlVaX1NUQVRFX1BFTkQ7CisJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0gPQorCQkJICAgIHpyLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXTsKKwkJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCWNhc2UgQlVaX1NUQVRFX0RNQToKKwkJY2FzZSBCVVpfU1RBVEVfUEVORDoKKwkJCWlmICh6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwkJCQlmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwkJCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwkJCX0KKwkJCXJlcyA9IC1FQlVTWTsJLyogd2hhdCBhcmUgeW91IGRvaW5nPyAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWlmICghcmVzICYmIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgeworCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmpwZ19idWZmZXJzLmFjdGl2ZTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50CitqcGdfcWJ1ZiAoc3RydWN0IGZpbGUgICAgICAgICAgKmZpbGUsCisJICBpbnQgICAgICAgICAgICAgICAgICAgZnJhbWUsCisJICBlbnVtIHpvcmFuX2NvZGVjX21vZGUgbW9kZSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlcyA9IDA7CisKKwkvKiBEb2VzIHRoZSB1c2VyIHdhbnQgdG8gc3RvcCBzdHJlYW1pbmc/ICovCisJaWYgKGZyYW1lIDwgMCkgeworCQlpZiAoenItPmNvZGVjX21vZGUgPT0gbW9kZSkgeworCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgeworCQkJCWRwcmludGsoMSwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiBqcGdfcWJ1ZigtMSkgLSBzZXNzaW9uIG5vdCBhY3RpdmVcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0KKwkJCSAgICBaT1JBTl9GUkVFOworCQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJCQl6cjM2MDU3X2VuYWJsZV9qcGcoenIsIEJVWl9NT0RFX0lETEUpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IGpwZ19xYnVmKCkgLSBzdG9wIHN0cmVhbWluZyBidXQgbm90IGluIHN0cmVhbWluZyBtb2RlXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKChyZXMgPSB6b3Jhbl9qcGdfcXVldWVfZnJhbWUoZmlsZSwgZnJhbWUsIG1vZGUpKSkKKwkJcmV0dXJuIHJlczsKKworCS8qIFN0YXJ0IHRoZSBqcGVnIGNvZGVjIHdoZW4gdGhlIGZpcnN0IGZyYW1lIGlzIHF1ZXVlZCAgKi8KKwlpZiAoIXJlcyAmJiB6ci0+anBnX3F1ZV9oZWFkID09IDEpCisJCWpwZWdfc3RhcnQoenIpOworCisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqICAgU3luYyBvbiBhIE1KUEVHIGJ1ZmZlcgorICovCisKK3N0YXRpYyBpbnQKK2pwZ19zeW5jIChzdHJ1Y3QgZmlsZSAgICAgICAqZmlsZSwKKwkgIHN0cnVjdCB6b3Jhbl9zeW5jICpicykKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZnJhbWU7CisKKwlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IGpwZ19zeW5jKCkgLSBjYXB0dXJlIGlzIG5vdCBjdXJyZW50bHkgYWN0aXZlXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTICYmCisJICAgIHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBqcGdfc3luYygpIC0gY29kZWMgbm90IGluIHN0cmVhbWluZyBtb2RlXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKCF3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh6ci0+anBnX2NhcHEsCisJCQkoenItPmpwZ19xdWVfdGFpbCAhPSB6ci0+anBnX2RtYV90YWlsIHx8CisJCQkgenItPmpwZ19kbWFfdGFpbCA9PSB6ci0+anBnX2RtYV9oZWFkKSwKKwkJCTEwKkhaKSkgeworCQlpbnQgaXNyOworCisJCWJ0YW5kKH5aUjM2MDU3X0pNQ19Hb19lbiwgWlIzNjA1N19KTUMpOworCQl1ZGVsYXkoMSk7CisJCXpyLT5jb2RlYy0+Y29udHJvbCh6ci0+Y29kZWMsIENPREVDX0dfU1RBVFVTLAorCQkJCQkgICBzaXplb2YoaXNyKSwgJmlzcik7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IGpwZ19zeW5jKCkgLSB0aW1lb3V0OiBjb2RlYyBpc3I9MHglMDJ4XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGlzcik7CisKKwkJcmV0dXJuIC1FVElNRTsKKworCX0KKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoenItPmpwZ19kbWFfdGFpbCAhPSB6ci0+anBnX2RtYV9oZWFkKQorCQlmcmFtZSA9IHpyLT5qcGdfcGVuZFt6ci0+anBnX3F1ZV90YWlsKysgJiBCVVpfTUFTS19GUkFNRV07CisJZWxzZQorCQlmcmFtZSA9IHpyLT5qcGdfcGVuZFt6ci0+anBnX3F1ZV90YWlsICYgQlVaX01BU0tfRlJBTUVdOworCisJLyogYnVmZmVyIHNob3VsZCBub3cgYmUgaW4gQlVaX1NUQVRFX0RPTkUgKi8KKwlpZiAoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgIT0gQlVaX1NUQVRFX0RPTkUpCisJCWRwcmludGsoMiwKKwkJCUtFUk5fRVJSICIlczoganBnX3N5bmMoKSAtIGludGVybmFsIHN0YXRlIGVycm9yXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCisJKmJzID0genItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uYnM7CisJYnMtPmZyYW1lID0gZnJhbWU7CisJenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsKKwlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXSA9IHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3pvcmFuX29wZW5faW5pdF9zZXNzaW9uIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwkvKiBQZXIgZGVmYXVsdCwgbWFwIHRoZSBWNEwgQnVmZmVycyAqLworCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKKworCS8qIHRha2Ugb3ZlciB0aGUgY2FyZCdzIGN1cnJlbnQgc2V0dGluZ3MgKi8KKwlmaC0+b3ZlcmxheV9zZXR0aW5ncyA9IHpyLT5vdmVybGF5X3NldHRpbmdzOworCWZoLT5vdmVybGF5X3NldHRpbmdzLmlzX3NldCA9IDA7CisJZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0ID0genItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0OworCWZoLT5vdmVybGF5X2FjdGl2ZSA9IFpPUkFOX0ZSRUU7CisKKwkvKiB2NGwgc2V0dGluZ3MgKi8KKwlmaC0+djRsX3NldHRpbmdzID0genItPnY0bF9zZXR0aW5nczsKKworCS8qIHY0bF9idWZmZXJzICovCisJbWVtc2V0KCZmaC0+djRsX2J1ZmZlcnMsIDAsIHNpemVvZihzdHJ1Y3Qgem9yYW5fdjRsX3N0cnVjdCkpOworCWZvciAoaSA9IDA7IGkgPCBWSURFT19NQVhfRlJBTUU7IGkrKykgeworCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7CS8qIG5vdGhpbmcgZ29pbmcgb24gKi8KKwkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5icy5mcmFtZSA9IGk7CisJfQorCWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCWZoLT52NGxfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCA9IDA7CisJZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplID0gdjRsX2J1ZnNpemU7CisJZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzID0gdjRsX25idWZzOworCisJLyoganBnIHNldHRpbmdzICovCisJZmgtPmpwZ19zZXR0aW5ncyA9IHpyLT5qcGdfc2V0dGluZ3M7CisKKwkvKiBqcGdfYnVmZmVycyAqLworCW1lbXNldCgmZmgtPmpwZ19idWZmZXJzLCAwLCBzaXplb2Yoc3RydWN0IHpvcmFuX2pwZ19zdHJ1Y3QpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQlVaX01BWF9GUkFNRTsgaSsrKSB7CisJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsJLyogbm90aGluZyBnb2luZyBvbiAqLworCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmJzLmZyYW1lID0gaTsKKwl9CisJZmgtPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cyA9IHpyLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXM7CisJZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKKwlmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgPSBqcGdfYnVmc2l6ZTsKKwlmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSBqcGdfbmJ1ZnM7Cit9CisKK3N0YXRpYyB2b2lkCit6b3Jhbl9jbG9zZV9lbmRfc2Vzc2lvbiAoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJLyogb3ZlcmxheSAqLworCWlmIChmaC0+b3ZlcmxheV9hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQlmaC0+b3ZlcmxheV9hY3RpdmUgPSB6ci0+b3ZlcmxheV9hY3RpdmUgPSBaT1JBTl9GUkVFOworCQl6ci0+djRsX292ZXJsYXlfYWN0aXZlID0gMDsKKwkJaWYgKCF6ci0+djRsX21lbWdyYWJfYWN0aXZlKQorCQkJenIzNjA1N19vdmVybGF5KHpyLCAwKTsKKwkJenItPm92ZXJsYXlfbWFzayA9IE5VTEw7CisJfQorCisJLyogdjRsIGNhcHR1cmUgKi8KKwlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKKwkJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0KKwkJICAgIFpPUkFOX0ZSRUU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCX0KKworCS8qIHY0bCBidWZmZXJzICovCisJaWYgKGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgfHwKKwkgICAgZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKSB7CisJCXY0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7CisJfQorCisJLyoganBnIGNhcHR1cmUgKi8KKwlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgQlVaX01PREVfSURMRSk7CisJCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9CisJCSAgICBaT1JBTl9GUkVFOworCX0KKworCS8qIGpwZyBidWZmZXJzICovCisJaWYgKGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgfHwKKwkgICAgZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKSB7CisJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7CisJfQorfQorCisvKgorICogICBPcGVuIGEgem9yYW4gY2FyZC4gUmlnaHQgbm93IHRoZSBmbGFncyBzdHVmZiBpcyBqdXN0IHBsYXlpbmcKKyAqLworCitzdGF0aWMgaW50Cit6b3Jhbl9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCSAgICBzdHJ1Y3QgZmlsZSAgKmZpbGUpCit7CisJdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gTlVMTDsKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoOworCWludCBpLCByZXMsIGZpcnN0X29wZW4gPSAwLCBoYXZlX21vZHVsZV9sb2NrcyA9IDA7CisKKwlsb2NrX2tlcm5lbCgpOworCS8qIGZpbmQgdGhlIGRldmljZSAqLworCWZvciAoaSA9IDA7IGkgPCB6b3Jhbl9udW07IGkrKykgeworCQlpZiAoem9yYW5baV0tPnZpZGVvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKKwkJCXpyID0gem9yYW5baV07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghenIpIHsKKwkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IGRldmljZSBub3QgZm91bmQhXG4iLCBaT1JBTl9OQU1FKTsKKwkJcmVzID0gLUVOT0RFVjsKKwkJZ290byBvcGVuX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworCS8qIHNlZSBmcy9kZXZpY2UuYyAtIHRoZSBrZXJuZWwgYWxyZWFkeSBsb2NrcyBkdXJpbmcgb3BlbigpLAorCSAqIHNvIGxvY2tpbmcgb3Vyc2VsdmVzIG9ubHkgY2F1c2VzIGRlYWRsb2NrcyAqLworCS8qbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOyovCisKKwlpZiAoIXpyLT5kZWNvZGVyKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSICIlczogbm8gVFYgZGVjb2RlciBsb2FkZWQgZm9yIGRldmljZSFcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FSU87CisJCWdvdG8gb3Blbl91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwkvKiB0cnkgdG8gZ3JhYiBhIG1vZHVsZSBsb2NrICovCisJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogZmFpbGVkIHRvIGFjcXVpcmUgbXkgb3duIGxvY2shIFBBTklDIVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVOT0RFVjsKKwkJZ290byBvcGVuX3VubG9ja19hbmRfcmV0dXJuOworCX0KKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHpyLT5kZWNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcikpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogZmFpbGVkIHRvIGdyYWIgb3duZXJzaGlwIG9mIGkyYyBkZWNvZGVyXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRUlPOworCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwkJZ290byBvcGVuX3VubG9ja19hbmRfcmV0dXJuOworCX0KKwlpZiAoenItPmVuY29kZXIgJiYKKwkgICAgIXRyeV9tb2R1bGVfZ2V0KHpyLT5lbmNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcikpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogZmFpbGVkIHRvIGdyYWIgb3duZXJzaGlwIG9mIGkyYyBlbmNvZGVyXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRUlPOworCQltb2R1bGVfcHV0KHpyLT5kZWNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7CisJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJaGF2ZV9tb2R1bGVfbG9ja3MgPSAxOworCisJaWYgKHpyLT51c2VyID49IDIwNDgpIHsKKwkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IHRvbyBtYW55IHVzZXJzICglZCkgb24gZGV2aWNlXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIHpyLT51c2VyKTsKKwkJcmVzID0gLUVCVVNZOworCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiB6b3Jhbl9vcGVuKCVzLCBwaWQ9WyVkXSksIHVzZXJzKC0pPSVkXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHpyLT51c2VyKTsKKworCS8qIG5vdywgY3JlYXRlIHRoZSBvcGVuKCktc3BlY2lmaWMgZmlsZV9vcHMgc3RydWN0ICovCisJZmggPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgem9yYW5fZmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZoKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHpvcmFuX29wZW4oKSAtIGFsbG9jYXRpb24gb2Ygem9yYW5fZmggZmFpbGVkXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRU5PTUVNOworCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCS8qIHVzZWQgdG8gYmUgQlVaX01BWF9XSURUSC9IRUlHSFQsIGJ1dCB0aGF0IGdpdmVzIG92ZXJmbG93cworCSAqIG9uIG5vcm0tY2hhbmdlISAqLworCWZoLT5vdmVybGF5X21hc2sgPQorCSAgICBrbWFsbG9jKCgoNzY4ICsgMzEpIC8gMzIpICogNTc2ICogNCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaC0+b3ZlcmxheV9tYXNrKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHpvcmFuX29wZW4oKSAtIGFsbG9jYXRpb24gb2Ygb3ZlcmxheV9tYXNrIGZhaWxlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJa2ZyZWUoZmgpOworCQlyZXMgPSAtRU5PTUVNOworCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJaWYgKHpyLT51c2VyKysgPT0gMCkKKwkJZmlyc3Rfb3BlbiA9IDE7CisKKwkvKm11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOyovCisKKwkvKiBkZWZhdWx0IHNldHVwIC0gVE9ETzogbG9vayBhdCBmbGFncyAqLworCWlmIChmaXJzdF9vcGVuKSB7CS8qIEZpcnN0IGRldmljZSBvcGVuICovCisJCXpyMzYwNTdfcmVzdGFydCh6cik7CisJCXpvcmFuX29wZW5faW5pdF9wYXJhbXMoenIpOworCQl6b3Jhbl9pbml0X2hhcmR3YXJlKHpyKTsKKworCQlidG9yKFpSMzYwNTdfSUNSX0ludFBpbkVuLCBaUjM2MDU3X0lDUik7CisJfQorCisJLyogc2V0IGZpbGVfb3BzIHN0dWZmICovCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJZmgtPnpyID0genI7CisJem9yYW5fb3Blbl9pbml0X3Nlc3Npb24oZmlsZSk7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIDA7CisKK29wZW5fdW5sb2NrX2FuZF9yZXR1cm46CisJLyogaWYgd2UgZ3JhYmJlZCBsb2NrcywgcmVsZWFzZSB0aGVtIGFjY29yZGluZ2x5ICovCisJaWYgKGhhdmVfbW9kdWxlX2xvY2tzKSB7CisJCW1vZHVsZV9wdXQoenItPmRlY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKKwkJaWYgKHpyLT5lbmNvZGVyKSB7CisJCQltb2R1bGVfcHV0KHpyLT5lbmNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7CisJCX0KKwkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJfQorCisJLyogaWYgdGhlcmUncyBubyBkZXZpY2UgZm91bmQsIHdlIGRpZG4ndCBvYnRhaW4gdGhlIGxvY2sgZWl0aGVyICovCisJaWYgKHpyKSB7CisJCS8qbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KKwl9CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludAorem9yYW5fY2xvc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJICAgICBzdHJ1Y3QgZmlsZSAgKmZpbGUpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiB6b3Jhbl9jbG9zZSglcywgcGlkPVslZF0pLCB1c2VycygrKT0lZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCB6ci0+dXNlcik7CisKKwkvKiBrZXJuZWwgbG9ja3MgKGZzL2RldmljZS5jKSwgc28gZG9uJ3QgZG8gdGhhdCBvdXJzZWx2ZXMKKwkgKiAocHJldmVudHMgZGVhZGxvY2tzKSAqLworCS8qbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOyovCisKKwl6b3Jhbl9jbG9zZV9lbmRfc2Vzc2lvbihmaWxlKTsKKworCWlmICh6ci0+dXNlci0tID09IDEpIHsJLyogTGFzdCBwcm9jZXNzICovCisJCS8qIENsZWFuIHVwIEpQRUcgcHJvY2VzcyAqLworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT5qcGdfY2FwcSk7CisJCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgQlVaX01PREVfSURMRSk7CisJCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKworCQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwkJYnRhbmQoflpSMzYwNTdfSUNSX0ludFBpbkVuLCBaUjM2MDU3X0lDUik7CisKKwkJaWYgKHpyMzYwNjdfZGVidWcgPiAxKQorCQkJcHJpbnRfaW50ZXJydXB0cyh6cik7CisKKwkJLyogT3ZlcmxheSBvZmYgKi8KKwkJenItPnY0bF9vdmVybGF5X2FjdGl2ZSA9IDA7CisJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMCk7CisJCXpyLT5vdmVybGF5X21hc2sgPSBOVUxMOworCisJCS8qIGNhcHR1cmUgb2ZmICovCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPnY0bF9jYXBxKTsKKwkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7CisJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwkJem9yYW5fc2V0X3BjaV9tYXN0ZXIoenIsIDApOworCisJCWlmICghcGFzc190aHJvdWdoKSB7CS8qIFN3aXRjaCB0byBjb2xvciBiYXIgKi8KKwkJCWludCB6ZXJvID0gMCwgdHdvID0gMjsKKwkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9FTkFCTEVfT1VUUFVULCAmemVybyk7CisJCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmdHdvKTsKKwkJfQorCX0KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJa2ZyZWUoZmgtPm92ZXJsYXlfbWFzayk7CisJa2ZyZWUoZmgpOworCisJLyogcmVsZWFzZSBsb2NrcyBvbiB0aGUgaTJjIG1vZHVsZXMgKi8KKwltb2R1bGVfcHV0KHpyLT5kZWNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7CisJaWYgKHpyLT5lbmNvZGVyKSB7CisJCSBtb2R1bGVfcHV0KHpyLT5lbmNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7CisJfQorCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCisJLyptdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsqLworCisJZHByaW50ayg0LCBLRVJOX0lORk8gIiVzOiB6b3Jhbl9jbG9zZSgpIGRvbmVcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzc2l6ZV90Cit6b3Jhbl9yZWFkIChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkgICAgY2hhciAgICAgICAgX191c2VyICpkYXRhLAorCSAgICBzaXplX3QgICAgICAgY291bnQsCisJICAgIGxvZmZfdCAgICAgICpwcG9zKQoreworCS8qIHdlIHNpbXBseSBkb24ndCBzdXBwb3J0IHJlYWQoKSAoeWV0KS4uLiAqLworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit6b3Jhbl93cml0ZSAoc3RydWN0IGZpbGUgKmZpbGUsCisJICAgICBjb25zdCBjaGFyICBfX3VzZXIgKmRhdGEsCisJICAgICBzaXplX3QgICAgICAgY291bnQsCisJICAgICBsb2ZmX3QgICAgICAqcHBvcykKK3sKKwkvKiAuLi5hbmQgdGhlIHNhbWUgZ29lcyBmb3Igd3JpdGUoKSAqLworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQKK3NldHVwX2ZidWZmZXIgKHN0cnVjdCBmaWxlICAgICAgICAgICAgICAgKmZpbGUsCisJICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgKmJhc2UsCisJICAgICAgIGNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgKmZtdCwKKwkgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisJICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwKKwkgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNwZXJsaW5lKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCS8qIChSb25hbGQpIHY0bC92NGwyIGd1aWRlbGluZXMgKi8KKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgJiYgIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBEb24ndCBhbGxvdyBmcmFtZSBidWZmZXIgb3ZlcmxheSBpZiBQQ0kgb3IgQUdQIGlzIGJ1Z2d5LCBvciBvbgorCSAgIEFMaSBNYWdpayAodGhhdCBuZWVkcyB2ZXJ5IGxvdyBsYXRlbmN5IHdoaWxlIHRoZSBjYXJkIG5lZWRzIGEKKwkgICBoaWdoZXIgdmFsdWUgYWx3YXlzKSAqLworCisJaWYgKHBjaV9wY2lfcHJvYmxlbXMgJiAoUENJUENJX0ZBSUwgfCBQQ0lBR1BfRkFJTCB8IFBDSVBDSV9BTElNQUdJSykpCisJCXJldHVybiAtRU5YSU87CisKKwkvKiB3ZSBuZWVkIGEgYnl0ZXNwZXJsaW5lIHZhbHVlLCBldmVuIGlmIG5vdCBnaXZlbiAqLworCWlmICghYnl0ZXNwZXJsaW5lKQorCQlieXRlc3BlcmxpbmUgPSB3aWR0aCAqICgoZm10LT5kZXB0aCArIDcpICYgfjcpIC8gODsKKworI2lmIDAKKwlpZiAoenItPm92ZXJsYXlfYWN0aXZlKSB7CisJCS8qIGR6amVlLi4uIHN0dXBpZCB1c2Vycy4uLiBkb24ndCBldmVuIGJvdGhlciB0byB0dXJuIG9mZgorCQkgKiBvdmVybGF5IGJlZm9yZSBjaGFuZ2luZyB0aGUgbWVtb3J5IGxvY2F0aW9uLi4uCisJCSAqIG5vcm1hbGx5LCB3ZSB3b3VsZCByZXR1cm4gZXJyb3JzIGhlcmUuIEhvd2V2ZXIsIG9uZSBvZgorCQkgKiB0aGUgdG9vbHMgdGhhdCBkb2VzIHRoaXMgaXMuLi4geGF3dHYhIGFuZCBzaW5jZSB4YXd0dgorCQkgKiBpcyB1c2VkIGJ5ICsvLSA5OSUgb2YgdGhlIHVzZXJzLCB3ZSdkIHJhdGhlciBiZSB1c2VyLQorCQkgKiBmcmllbmRseSBhbmQgc2lsZW50bHkgZG8gYXMgaWYgbm90aGluZyB3ZW50IHdyb25nICovCisJCWRwcmludGsoMywKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHNldHVwX2ZidWZmZXIoKSAtIGZvcmNlZCBvdmVybGF5IHR1cm5vZmYgYmVjYXVzZSBmcmFtZWJ1ZmZlciBjaGFuZ2VkXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOworCX0KKyNlbmRpZgorCisJaWYgKCEoZm10LT5mbGFncyAmIFpPUkFOX0ZPUk1BVF9PVkVSTEFZKSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBzZXR1cF9mYnVmZmVyKCkgLSBubyB2YWxpZCBvdmVybGF5IGZvcm1hdCBnaXZlblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChoZWlnaHQgPD0gMCB8fCB3aWR0aCA8PSAwIHx8IGJ5dGVzcGVybGluZSA8PSAwKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHNldHVwX2ZidWZmZXIoKSAtIGludmFsaWQgaGVpZ2h0L3dpZHRoL2JwbCB2YWx1ZSAoJWR8JWR8JWQpXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIHdpZHRoLCBoZWlnaHQsIGJ5dGVzcGVybGluZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoYnl0ZXNwZXJsaW5lICYgMykgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBzZXR1cF9mYnVmZmVyKCkgLSBieXRlc3BlcmxpbmUgKCVkKSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGJ5dGVzcGVybGluZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXpyLT5idWZmZXIuYmFzZSA9ICh2b2lkICopICgodW5zaWduZWQgbG9uZykgYmFzZSAmIH4zKTsKKwl6ci0+YnVmZmVyLmhlaWdodCA9IGhlaWdodDsKKwl6ci0+YnVmZmVyLndpZHRoID0gd2lkdGg7CisJenItPmJ1ZmZlci5kZXB0aCA9IGZtdC0+ZGVwdGg7CisJenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0ID0gZm10OworCXpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lID0gYnl0ZXNwZXJsaW5lOworCisJLyogVGhlIHVzZXIgc2hvdWxkIHNldCBuZXcgd2luZG93IHBhcmFtZXRlcnMgKi8KKwl6ci0+b3ZlcmxheV9zZXR0aW5ncy5pc19zZXQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAorc2V0dXBfd2luZG93IChzdHJ1Y3QgZmlsZSAgICAgICAqZmlsZSwKKwkgICAgICBpbnQgICAgICAgICAgICAgICAgeCwKKwkgICAgICBpbnQgICAgICAgICAgICAgICAgeSwKKwkgICAgICBpbnQgICAgICAgICAgICAgICAgd2lkdGgsCisJICAgICAgaW50ICAgICAgICAgICAgICAgIGhlaWdodCwKKwkgICAgICBzdHJ1Y3QgdmlkZW9fY2xpcCBfX3VzZXIgKmNsaXBzLAorCSAgICAgIGludCAgICAgICAgICAgICAgICBjbGlwY291bnQsCisJICAgICAgdm9pZCAgICAgICAgICAgICAgX191c2VyICpiaXRtYXApCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCXN0cnVjdCB2aWRlb19jbGlwICp2Y3AgPSBOVUxMOworCWludCBvbiwgZW5kOworCisKKwlpZiAoIXpyLT5idWZmZXIuYmFzZSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBzZXR1cF93aW5kb3coKSAtIGZyYW1lIGJ1ZmZlciBoYXMgdG8gYmUgc2V0IGZpcnN0XG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBzZXR1cF93aW5kb3coKSAtIG5vIG92ZXJsYXkgZm9ybWF0IHNldFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBUaGUgdmlkZW8gZnJvbnQgZW5kIG5lZWRzIDQtYnl0ZSBhbGluZ2VkIGxpbmUgc2l6ZXMsIHdlIGNvcnJlY3QgdGhhdAorCSAqIHNpbGVudGx5IGhlcmUgaWYgbmVjZXNzYXJ5CisJICovCisJaWYgKHpyLT5idWZmZXIuZGVwdGggPT0gMTUgfHwgenItPmJ1ZmZlci5kZXB0aCA9PSAxNikgeworCQllbmQgPSAoeCArIHdpZHRoKSAmIH4xOwkvKiByb3VuZCBkb3duICovCisJCXggPSAoeCArIDEpICYgfjE7CS8qIHJvdW5kIHVwICovCisJCXdpZHRoID0gZW5kIC0geDsKKwl9CisKKwlpZiAoenItPmJ1ZmZlci5kZXB0aCA9PSAyNCkgeworCQllbmQgPSAoeCArIHdpZHRoKSAmIH4zOwkvKiByb3VuZCBkb3duICovCisJCXggPSAoeCArIDMpICYgfjM7CS8qIHJvdW5kIHVwICovCisJCXdpZHRoID0gZW5kIC0geDsKKwl9CisKKwlpZiAod2lkdGggPiBCVVpfTUFYX1dJRFRIKQorCQl3aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJaWYgKGhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKQorCQloZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKKworCS8qIENoZWNrIGZvciB2YWlsZCBwYXJhbWV0ZXJzICovCisJaWYgKHdpZHRoIDwgQlVaX01JTl9XSURUSCB8fCBoZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCB8fAorCSAgICB3aWR0aCA+IEJVWl9NQVhfV0lEVEggfHwgaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogc2V0dXBfd2luZG93KCkgLSB3aWR0aCA9ICVkIG9yIGhlaWdodCA9ICVkIGludmFsaWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgd2lkdGgsIGhlaWdodCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZoLT5vdmVybGF5X3NldHRpbmdzLnggPSB4OworCWZoLT5vdmVybGF5X3NldHRpbmdzLnkgPSB5OworCWZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoID0gd2lkdGg7CisJZmgtPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0ID0gaGVpZ2h0OworCWZoLT5vdmVybGF5X3NldHRpbmdzLmNsaXBjb3VudCA9IGNsaXBjb3VudDsKKworCS8qCisJICogSWYgYW4gb3ZlcmxheSBpcyBydW5uaW5nLCB3ZSBoYXZlIHRvIHN3aXRjaCBpdCBvZmYKKwkgKiBhbmQgc3dpdGNoIGl0IG9uIGFnYWluIGluIG9yZGVyIHRvIGdldCB0aGUgbmV3IHNldHRpbmdzIGluIGVmZmVjdC4KKwkgKgorCSAqIFdlIGFsc28gd2FudCB0byBhdm9pZCB0aGF0IHRoZSBvdmVybGF5IG1hc2sgaXMgd3JpdHRlbgorCSAqIHdoZW4gYW4gb3ZlcmxheSBpcyBydW5uaW5nLgorCSAqLworCisJb24gPSB6ci0+djRsX292ZXJsYXlfYWN0aXZlICYmICF6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmCisJICAgIHpyLT5vdmVybGF5X2FjdGl2ZSAhPSBaT1JBTl9GUkVFICYmCisJICAgIGZoLT5vdmVybGF5X2FjdGl2ZSAhPSBaT1JBTl9GUkVFOworCWlmIChvbikKKwkJenIzNjA1N19vdmVybGF5KHpyLCAwKTsKKworCS8qCisJICogICBXcml0ZSB0aGUgb3ZlcmxheSBtYXNrIGlmIGNsaXBzIGFyZSB3YW50ZWQuCisJICogICBXZSBwcmVmZXIgYSBiaXRtYXAuCisJICovCisJaWYgKGJpdG1hcCkgeworCQkvKiBmYWtlIHZhbHVlIC0gaXQganVzdCBtZWFucyB3ZSB3YW50IGNsaXBzICovCisJCWZoLT5vdmVybGF5X3NldHRpbmdzLmNsaXBjb3VudCA9IDE7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGZoLT5vdmVybGF5X21hc2ssIGJpdG1hcCwKKwkJCQkgICAod2lkdGggKiBoZWlnaHQgKyA3KSAvIDgpKSB7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0gZWxzZSBpZiAoY2xpcGNvdW50ID4gMCkgeworCQkvKiB3cml0ZSBvdXIgb3duIGJpdG1hcCBmcm9tIHRoZSBjbGlwcyAqLworCQl2Y3AgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9fY2xpcCkgKiAoY2xpcGNvdW50ICsgNCkpOworCQlpZiAodmNwID09IE5VTEwpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogc2V0dXBfd2luZG93KCkgLSBBbGxvYyBvZiBjbGlwIG1hc2sgZmFpbGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcgorCQkgICAgKHZjcCwgY2xpcHMsIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2xpcCkgKiBjbGlwY291bnQpKSB7CisJCQl2ZnJlZSh2Y3ApOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJd3JpdGVfb3ZlcmxheV9tYXNrKGZpbGUsIHZjcCwgY2xpcGNvdW50KTsKKwkJdmZyZWUodmNwKTsKKwl9CisKKwlmaC0+b3ZlcmxheV9zZXR0aW5ncy5pc19zZXQgPSAxOworCWlmIChmaC0+b3ZlcmxheV9hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgorCSAgICB6ci0+b3ZlcmxheV9hY3RpdmUgIT0gWk9SQU5fRlJFRSkKKwkJenItPm92ZXJsYXlfc2V0dGluZ3MgPSBmaC0+b3ZlcmxheV9zZXR0aW5nczsKKworCWlmIChvbikKKwkJenIzNjA1N19vdmVybGF5KHpyLCAxKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCisJcmV0dXJuIHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKK30KKworc3RhdGljIGludAorc2V0dXBfb3ZlcmxheSAoc3RydWN0IGZpbGUgKmZpbGUsCisJICAgICAgIGludCAgICAgICAgICBvbikKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwkvKiBJZiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLCByZXR1cm4gaW1tZWRpYXRseSAqLworCWlmICgob24gJiYgZmgtPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHx8CisJICAgICghb24gJiYgZmgtPm92ZXJsYXlfYWN0aXZlID09IFpPUkFOX0ZSRUUpKQorCQlyZXR1cm4gMDsKKworCS8qIGNoZWNrIHdoZXRoZXIgd2UncmUgdG91Y2hpbmcgc29tZW9uZSBlbHNlJ3Mgb3ZlcmxheSAqLworCWlmIChvbiAmJiB6ci0+b3ZlcmxheV9hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgorCSAgICBmaC0+b3ZlcmxheV9hY3RpdmUgPT0gWk9SQU5fRlJFRSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBzZXR1cF9vdmVybGF5KCkgLSBvdmVybGF5IGlzIGFscmVhZHkgYWN0aXZlIGZvciBhbm90aGVyIHNlc3Npb25cbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmICghb24gJiYgenItPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKKwkgICAgZmgtPm92ZXJsYXlfYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogc2V0dXBfb3ZlcmxheSgpIC0geW91IGNhbm5vdCBjYW5jZWwgc29tZW9uZSBlbHNlJ3Mgc2Vzc2lvblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlpZiAob24gPT0gMCkgeworCQl6ci0+b3ZlcmxheV9hY3RpdmUgPSBmaC0+b3ZlcmxheV9hY3RpdmUgPSBaT1JBTl9GUkVFOworCQl6ci0+djRsX292ZXJsYXlfYWN0aXZlID0gMDsKKwkJLyogV2hlbiBhIGdyYWIgaXMgcnVubmluZywgdGhlIHZpZGVvIHNpbXBseQorCQkgKiB3b24ndCBiZSBzd2l0Y2hlZCBvbiBhbnkgbW9yZSAqLworCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpCisJCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOworCQl6ci0+b3ZlcmxheV9tYXNrID0gTlVMTDsKKwl9IGVsc2UgeworCQlpZiAoIXpyLT5idWZmZXIuYmFzZSB8fCAhZmgtPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0KSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IHNldHVwX292ZXJsYXkoKSAtIGJ1ZmZlciBvciB3aW5kb3cgbm90IHNldFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoIWZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBzZXR1cF9vdmVybGF5KCkgLSBubyBvdmVybGF5IGZvcm1hdCBzZXRcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJenItPm92ZXJsYXlfYWN0aXZlID0gZmgtPm92ZXJsYXlfYWN0aXZlID0gWk9SQU5fTE9DS0VEOworCQl6ci0+djRsX292ZXJsYXlfYWN0aXZlID0gMTsKKwkJenItPm92ZXJsYXlfbWFzayA9IGZoLT5vdmVybGF5X21hc2s7CisJCXpyLT5vdmVybGF5X3NldHRpbmdzID0gZmgtPm92ZXJsYXlfc2V0dGluZ3M7CisJCWlmICghenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkKKwkJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMSk7CisJCS8qIFdoZW4gYSBncmFiIGlzIHJ1bm5pbmcsIHRoZSB2aWRlbyB3aWxsIGJlCisJCSAqIHN3aXRjaGVkIG9uIHdoZW4gZ3JhYiBpcyBmaW5pc2hlZCAqLworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCisJcmV0dXJuIHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKK30KKworCS8qIGdldCB0aGUgc3RhdHVzIG9mIGEgYnVmZmVyIGluIHRoZSBjbGllbnRzIGJ1ZmZlciBxdWV1ZSAqLworc3RhdGljIGludAorem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzIChzdHJ1Y3QgZmlsZSAgICAgICAgKmZpbGUsCisJCQkgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmLAorCQkJICBpbnQgICAgICAgICAgICAgICAgIG51bSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwlidWYtPmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7CisKKwlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgeworCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgorCisJCS8qIGNoZWNrIHJhbmdlICovCisJCWlmIChudW0gPCAwIHx8IG51bSA+PSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKKwkJICAgICFmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IHY0bDJfYnVmZmVyX3N0YXR1cygpIC0gd3JvbmcgbnVtYmVyIG9yIGJ1ZmZlcnMgbm90IGFsbG9jYXRlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWJ1Zi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJYnVmLT5sZW5ndGggPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisKKwkJLyogZ2V0IGJ1ZmZlciAqLworCQlidWYtPmJ5dGVzdXNlZCA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5icy5sZW5ndGg7CisJCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUgfHwKKwkJICAgIGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgeworCQkJYnVmLT5zZXF1ZW5jZSA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5icy5zZXE7CisJCQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKKwkJCWJ1Zi0+dGltZXN0YW1wID0KKwkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMudGltZXN0YW1wOworCQl9IGVsc2UgeworCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKKwkJfQorCisJCWlmIChmaC0+djRsX3NldHRpbmdzLmhlaWdodCA8PSBCVVpfTUFYX0hFSUdIVCAvIDIpCisJCQlidWYtPmZpZWxkID0gVjRMMl9GSUVMRF9UT1A7CisJCWVsc2UKKwkJCWJ1Zi0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisKKwkJYnJlYWs7CisKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKKworCQkvKiBjaGVjayByYW5nZSAqLworCQlpZiAobnVtIDwgMCB8fCBudW0gPj0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzIHx8CisJCSAgICAhZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiB2NGwyX2J1ZmZlcl9zdGF0dXMoKSAtIHdyb25nIG51bWJlciBvciBidWZmZXJzIG5vdCBhbGxvY2F0ZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlidWYtPnR5cGUgPSAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19SRUMpID8KKwkJCSAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSA6CisJCQkgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKKwkJYnVmLT5sZW5ndGggPSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisKKwkJLyogdGhlc2UgdmFyaWFibGVzIGFyZSBvbmx5IHdyaXR0ZW4gYWZ0ZXIgZnJhbWUgaGFzIGJlZW4gY2FwdHVyZWQgKi8KKwkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfRE9ORSB8fAorCQkgICAgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9VU0VSKSB7CisJCQlidWYtPnNlcXVlbmNlID0gZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnNlcTsKKwkJCWJ1Zi0+dGltZXN0YW1wID0KKwkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMudGltZXN0YW1wOworCQkJYnVmLT5ieXRlc3VzZWQgPQorCQkJICAgIGZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5icy5sZW5ndGg7CisJCQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKKwkJfSBlbHNlIHsKKwkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7CisJCX0KKworCQkvKiB3aGljaCBmaWVsZHMgYXJlIHRoZXNlPyAqLworCQlpZiAoZmgtPmpwZ19zZXR0aW5ncy5UbXBEY20gIT0gMSkKKwkJCWJ1Zi0+ZmllbGQgPQorCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuCisJCQkgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1RPUCA6IFY0TDJfRklFTERfQk9UVE9NOworCQllbHNlCisJCQlidWYtPmZpZWxkID0KKwkJCSAgICBmaC0+anBnX3NldHRpbmdzLgorCQkJICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9TRVFfVEIgOgorCQkJICAgIFY0TDJfRklFTERfU0VRX0JUOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKworCQlkcHJpbnRrKDUsCisJCQlLRVJOX0VSUgorCQkJIiVzOiB2NGwyX2J1ZmZlcl9zdGF0dXMoKSAtIGludmFsaWQgYnVmZmVyIHR5cGV8bWFwX21vZGUgKCVkfCVkKVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJ1Zi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKwlidWYtPmluZGV4ID0gbnVtOworCWJ1Zi0+bS5vZmZzZXQgPSBidWYtPmxlbmd0aCAqIG51bTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit6b3Jhbl9zZXRfbm9ybSAoc3RydWN0IHpvcmFuICp6ciwKKwkJaW50ICAgICAgICAgICBub3JtKSAvKiBWSURFT19NT0RFXyogKi8KK3sKKwlpbnQgbm9ybV9lbmNvZGVyLCBvbjsKKworCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgfHwKKwkgICAgenItPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fV0FSTklORworCQkJIiVzOiBzZXRfbm9ybSgpIGNhbGxlZCB3aGlsZSBpbiBwbGF5YmFjay9jYXB0dXJlIG1vZGVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKGxvY2tfbm9ybSAmJiBub3JtICE9IHpyLT5ub3JtKSB7CisJCWlmIChsb2NrX25vcm0gPiAxKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9XQVJOSU5HCisJCQkJIiVzOiBzZXRfbm9ybSgpIC0gVFYgc3RhbmRhcmQgaXMgbG9ja2VkLCBjYW4gbm90IHN3aXRjaCBub3JtXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJldHVybiAtRVBFUk07CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9XQVJOSU5HCisJCQkJIiVzOiBzZXRfbm9ybSgpIC0gVFYgc3RhbmRhcmQgaXMgbG9ja2VkLCBub3JtIHdhcyBub3QgY2hhbmdlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlub3JtID0genItPm5vcm07CisJCX0KKwl9CisKKwlpZiAobm9ybSAhPSBWSURFT19NT0RFX0FVVE8gJiYKKwkgICAgKG5vcm0gPCAwIHx8IG5vcm0gPj0genItPmNhcmQubm9ybXMgfHwKKwkgICAgICF6ci0+Y2FyZC50dm5bbm9ybV0pKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSICIlczogc2V0X25vcm0oKSAtIHVuc3VwcG9ydGVkIG5vcm0gJWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgbm9ybSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChub3JtID09IFZJREVPX01PREVfQVVUTykgeworCQlpbnQgc3RhdHVzOworCisJCS8qIGlmIHdlIGhhdmUgYXV0b2RldGVjdCwgLi4uICovCisJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgY2FwczsKKwkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9DQVBBQklMSVRJRVMsICZjYXBzKTsKKwkJaWYgKCEoY2Fwcy5mbGFncyAmIFZJREVPX0RFQ09ERVJfQVVUTykpIHsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBub3JtPWF1dG8gdW5zdXBwb3J0ZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZub3JtKTsKKworCQkvKiBsZXQgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCisJCXNzbGVlcCgyKTsKKworCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX1NUQVRVUywgJnN0YXR1cyk7CisJCWlmICghKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IHNldF9ub3JtKCkgLSBubyBub3JtIGRldGVjdGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCS8qIHJlc2V0IG5vcm0gKi8KKwkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJnpyLT5ub3JtKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJaWYgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX05UU0MpCisJCQlub3JtID0gVklERU9fTU9ERV9OVFNDOworCQllbHNlIGlmIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19TRUNBTSkKKwkJCW5vcm0gPSBWSURFT19NT0RFX1NFQ0FNOworCQllbHNlCisJCQlub3JtID0gVklERU9fTU9ERV9QQUw7CisJfQorCXpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5bbm9ybV07CisJbm9ybV9lbmNvZGVyID0gbm9ybTsKKworCS8qIFdlIHN3aXRjaCBvdmVybGF5IG9mZiBhbmQgb24gc2luY2UgYSBjaGFuZ2UgaW4gdGhlCisJICogbm9ybSBuZWVkcyBkaWZmZXJlbnQgVkZFIHNldHRpbmdzICovCisJb24gPSB6ci0+b3ZlcmxheV9hY3RpdmUgJiYgIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmU7CisJaWYgKG9uKQorCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOworCisJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmbm9ybSk7CisJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9OT1JNLCAmbm9ybV9lbmNvZGVyKTsKKworCWlmIChvbikKKwkJenIzNjA1N19vdmVybGF5KHpyLCAxKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCisJenItPm5vcm0gPSBub3JtOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3pvcmFuX3NldF9pbnB1dCAoc3RydWN0IHpvcmFuICp6ciwKKwkJIGludCAgICAgICAgICAgaW5wdXQpCit7CisJaW50IHJlYWxpbnB1dDsKKworCWlmIChpbnB1dCA9PSB6ci0+aW5wdXQpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSB8fAorCSAgICB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9XQVJOSU5HCisJCQkiJXM6IHNldF9pbnB1dCgpIGNhbGxlZCB3aGlsZSBpbiBwbGF5YmFjay9jYXB0dXJlIG1vZGVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSB6ci0+Y2FyZC5pbnB1dHMpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogc2V0X2lucHV0KCkgLSB1bm5zdXBwb3J0ZWQgaW5wdXQgJWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgaW5wdXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZWFsaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFtpbnB1dF0ubXV4c2VsOworCXpyLT5pbnB1dCA9IGlucHV0OworCisJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9JTlBVVCwgJnJlYWxpbnB1dCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICAgaW9jdGwgcm91dGluZQorICovCisKK3N0YXRpYyBpbnQKK3pvcmFuX2RvX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQlzdHJ1Y3QgZmlsZSAgKmZpbGUsCisJCXVuc2lnbmVkIGludCAgY21kLAorCQl2b2lkICAgICAgICAgKmFyZykKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJLyogQ0FSRUZVTDogdXNlZCBpbiBtdWx0aXBsZSBwbGFjZXMgaGVyZSAqLworCXN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3Mgc2V0dGluZ3M7CisKKwkvKiB3ZSBtaWdodCBoYXZlIG9sZGVyIGJ1ZmZlcnMgbHlpbmcgYXJvdW5kLi4uIFdlIGRvbid0IHdhbnQKKwkgKiB0byB3YWl0LCBidXQgd2UgZG8gd2FudCB0byB0cnkgY2xlYW5pbmcgdGhlbSB1cCBBU0FQLiBTbworCSAqIHdlIHRyeSB0byBvYnRhaW4gdGhlIGxvY2sgYW5kIGZyZWUgdGhlbS4gSWYgdGhhdCBmYWlscywgd2UKKwkgKiBkb24ndCBkbyBhbnl0aGluZyBhbmQgd2FpdCBmb3IgdGhlIG5leHQgdHVybi4gSW4gdGhlIGVuZCwKKwkgKiB6b3Jhbl9jbG9zZSgpIG9yIGEgbmV3IGFsbG9jYXRpb24gd2lsbCBzdGlsbCBmcmVlIHRoZW0uLi4KKwkgKiBUaGlzIGlzIGp1c3QgYSAndGhlIHNvb25lciB0aGUgYmV0dGVyJyBleHRyYSAnZmVhdHVyZScKKwkgKgorCSAqIFdlIGRvbid0IGZyZWUgdGhlIGJ1ZmZlcnMgcmlnaHQgb24gbXVubWFwKCkgYmVjYXVzZSB0aGF0CisJICogY2F1c2VzIG9vcHNlcyAoa2ZyZWUoKSBpbnNpZGUgbXVubWFwKCkgb29wc2VzIGZvciBubworCSAqIGFwcGFyZW50IHJlYXNvbiAtIGl0J3MgYWxzbyBub3QgcmVwcm9kdWNlYWJsZSBpbiBhbnkgd2F5LAorCSAqIGJ1dCBtb3ZpbmcgdGhlIGZyZWUgY29kZSBvdXRzaWRlIHRoZSBtdW5tYXAoKSBoYW5kbGVyIGZpeGVzCisJICogYWxsIHRoaXMuLi4gSWYgc29tZW9uZSBrbm93cyB3aHksIHBsZWFzZSBleHBsYWluIG1lIChSb25hbGQpCisJICovCisJaWYgKG11dGV4X3RyeWxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKSkgeworCQkvKiB3ZSBvYnRhaW5lZCBpdCEgTGV0J3MgdHJ5IHRvIGZyZWUgc29tZSB0aGluZ3MgKi8KKwkJaWYgKGZoLT5qcGdfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkKKwkJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7CisJCWlmIChmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpCisJCQl2NGxfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCX0KKworCXN3aXRjaCAoY21kKSB7CisKKwljYXNlIFZJRElPQ0dDQVA6CisJeworCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqdmNhcCA9IGFyZzsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHQ0FQXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkJbWVtc2V0KHZjYXAsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSkpOworCQlzdHJuY3B5KHZjYXAtPm5hbWUsIFpSX0RFVk5BTUUoenIpLCBzaXplb2YodmNhcC0+bmFtZSktMSk7CisJCXZjYXAtPnR5cGUgPSBaT1JBTl9WSURfVFlQRTsKKworCQl2Y2FwLT5jaGFubmVscyA9IHpyLT5jYXJkLmlucHV0czsKKwkJdmNhcC0+YXVkaW9zID0gMDsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCQl2Y2FwLT5tYXh3aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJCXZjYXAtPm1heGhlaWdodCA9IEJVWl9NQVhfSEVJR0hUOworCQl2Y2FwLT5taW53aWR0aCA9IEJVWl9NSU5fV0lEVEg7CisJCXZjYXAtPm1pbmhlaWdodCA9IEJVWl9NSU5fSEVJR0hUOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NHQ0hBTjoKKwl7CisJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2Y2hhbiA9IGFyZzsKKwkJaW50IGNoYW5uZWwgPSB2Y2hhbi0+Y2hhbm5lbDsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHQ0hBTiAtIGNoYW5uZWw9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgdmNoYW4tPmNoYW5uZWwpOworCisJCW1lbXNldCh2Y2hhbiwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19jaGFubmVsKSk7CisJCWlmIChjaGFubmVsID4genItPmNhcmQuaW5wdXRzIHx8IGNoYW5uZWwgPCAwKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ0dDSEFOIG9uIG5vdCBleGlzdGluZyBjaGFubmVsICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBjaGFubmVsKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJc3RyY3B5KHZjaGFuLT5uYW1lLCB6ci0+Y2FyZC5pbnB1dFtjaGFubmVsXS5uYW1lKTsKKworCQl2Y2hhbi0+dHVuZXJzID0gMDsKKwkJdmNoYW4tPmZsYWdzID0gMDsKKwkJdmNoYW4tPnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCQl2Y2hhbi0+bm9ybSA9IHpyLT5ub3JtOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJdmNoYW4tPmNoYW5uZWwgPSBjaGFubmVsOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwkJLyogUko6IHRoZSBkb2N1bWVudGF0aW9uIGF0IGh0dHA6Ly9yb2FkcnVubmVyLnN3YW5zZWEubGludXgub3JnLnVrL3Y0bGFwaS5zaHRtbCBzYXlzOgorCQkgKgorCQkgKiAqICJUaGUgVklESU9DU0NIQU4gaW9jdGwgdGFrZXMgYW4gaW50ZWdlciBhcmd1bWVudCBhbmQgc3dpdGNoZXMgdGhlIGNhcHR1cmUgdG8gdGhpcyBpbnB1dC4iCisJCSAqICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eCisJCSAqICogVGhlIGZhbW9zIEJUVFYgZHJpdmVyIGhhcyBpdCBpbXBsZW1lbnRlZCB3aXRoIGEgc3RydWN0IHZpZGVvX2NoYW5uZWwgYXJndW1lbnQKKwkJICogKiBhbmQgd2UgZm9sbG93IGl0IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMKKwkJICogKgorCQkgKiAqIEJUVzogdGhpcyBpcyB0aGUgb25seSB3YXkgdGhlIHVzZXIgY2FuIHNldCB0aGUgbm9ybSEKKwkJICovCisKKwljYXNlIFZJRElPQ1NDSEFOOgorCXsKKwkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnZjaGFuID0gYXJnOworCQlpbnQgcmVzOworCisJCWRwcmludGsoMywKKwkJCUtFUk5fREVCVUcKKwkJCSIlczogVklESU9DU0NIQU4gLSBjaGFubmVsPSVkLCBub3JtPSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIHZjaGFuLT5jaGFubmVsLCB2Y2hhbi0+bm9ybSk7CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlpZiAoKHJlcyA9IHpvcmFuX3NldF9pbnB1dCh6ciwgdmNoYW4tPmNoYW5uZWwpKSkKKwkJCWdvdG8gc2NoYW5fdW5sb2NrX2FuZF9yZXR1cm47CisJCWlmICgocmVzID0gem9yYW5fc2V0X25vcm0oenIsIHZjaGFuLT5ub3JtKSkpCisJCQlnb3RvIHNjaGFuX3VubG9ja19hbmRfcmV0dXJuOworCisJCS8qIE1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCisJCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKKwlzY2hhbl91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DR1BJQ1Q6CisJeworCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqdnBpY3QgPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR1BJQ1RcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCQltZW1zZXQodnBpY3QsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fcGljdHVyZSkpOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXZwaWN0LT5odWUgPSB6ci0+aHVlOworCQl2cGljdC0+YnJpZ2h0bmVzcyA9IHpyLT5icmlnaHRuZXNzOworCQl2cGljdC0+Y29udHJhc3QgPSB6ci0+Y29udHJhc3Q7CisJCXZwaWN0LT5jb2xvdXIgPSB6ci0+c2F0dXJhdGlvbjsKKwkJaWYgKGZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCkgeworCQkJdnBpY3QtPmRlcHRoID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5kZXB0aDsKKwkJCXZwaWN0LT5wYWxldHRlID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5wYWxldHRlOworCQl9IGVsc2UgeworCQkJdnBpY3QtPmRlcHRoID0gMDsKKwkJfQorCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NTUElDVDoKKwl7CisJCXN0cnVjdCB2aWRlb19waWN0dXJlICp2cGljdCA9IGFyZzsKKwkJaW50IGk7CisKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiBWSURJT0NTUElDVCAtIGJyaT0lZCwgaHVlPSVkLCBjb2w9JWQsIGNvbj0lZCwgZGVwPSVkLCBwYWw9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgdnBpY3QtPmJyaWdodG5lc3MsIHZwaWN0LT5odWUsCisJCQl2cGljdC0+Y29sb3VyLCB2cGljdC0+Y29udHJhc3QsIHZwaWN0LT5kZXB0aCwKKwkJCXZwaWN0LT5wYWxldHRlKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykgeworCQkJY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCAqZm10ID0gJnpvcmFuX2Zvcm1hdHNbaV07CisKKwkJCWlmIChmbXQtPnBhbGV0dGUgIT0gLTEgJiYKKwkJCSAgICBmbXQtPmZsYWdzICYgWk9SQU5fRk9STUFUX09WRVJMQVkgJiYKKwkJCSAgICBmbXQtPnBhbGV0dGUgPT0gdnBpY3QtPnBhbGV0dGUgJiYKKwkJCSAgICBmbXQtPmRlcHRoID09IHZwaWN0LT5kZXB0aCkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NTUElDVCAtIEludmFsaWQgcGFsZXR0ZSAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgdnBpY3QtPnBhbGV0dGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9QSUNUVVJFLCB2cGljdCk7CisKKwkJenItPmh1ZSA9IHZwaWN0LT5odWU7CisJCXpyLT5jb250cmFzdCA9IHZwaWN0LT5jb250cmFzdDsKKwkJenItPnNhdHVyYXRpb24gPSB2cGljdC0+Y29sb3VyOworCQl6ci0+YnJpZ2h0bmVzcyA9IHZwaWN0LT5icmlnaHRuZXNzOworCisJCWZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCA9ICZ6b3Jhbl9mb3JtYXRzW2ldOworCisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ0NBUFRVUkU6CisJeworCQlpbnQgKm9uID0gYXJnLCByZXM7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DQ0FQVFVSRSAtIG9uPSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksICpvbik7CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlyZXMgPSBzZXR1cF9vdmVybGF5KGZpbGUsICpvbik7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DR1dJTjoKKwl7CisJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3aW4gPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR1dJTlxuIiwgWlJfREVWTkFNRSh6cikpOworCisJCW1lbXNldCh2d2luLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3dpbmRvdykpOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXZ3aW4tPnggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy54OworCQl2d2luLT55ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MueTsKKwkJdndpbi0+d2lkdGggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aDsKKwkJdndpbi0+aGVpZ2h0ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0OworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJdndpbi0+Y2xpcGNvdW50ID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DU1dJTjoKKwl7CisJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3aW4gPSBhcmc7CisJCWludCByZXM7CisKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiBWSURJT0NTV0lOIC0geD0lZCwgeT0lZCwgdz0lZCwgaD0lZCwgY2xpcGNvdW50PSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIHZ3aW4tPngsIHZ3aW4tPnksIHZ3aW4tPndpZHRoLAorCQkJdndpbi0+aGVpZ2h0LCB2d2luLT5jbGlwY291bnQpOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmVzID0KKwkJICAgIHNldHVwX3dpbmRvdyhmaWxlLCB2d2luLT54LCB2d2luLT55LCB2d2luLT53aWR0aCwKKwkJCQkgdndpbi0+aGVpZ2h0LCB2d2luLT5jbGlwcywKKwkJCQkgdndpbi0+Y2xpcGNvdW50LCBOVUxMKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NHRkJVRjoKKwl7CisJCXN0cnVjdCB2aWRlb19idWZmZXIgKnZidWYgPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR0ZCVUZcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCSp2YnVmID0genItPmJ1ZmZlcjsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ1NGQlVGOgorCXsKKwkJc3RydWN0IHZpZGVvX2J1ZmZlciAqdmJ1ZiA9IGFyZzsKKwkJaW50IGksIHJlcyA9IDA7CisKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiBWSURJT0NTRkJVRiAtIGJhc2U9JXAsIHc9JWQsIGg9JWQsIGRlcHRoPSVkLCBicGw9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgdmJ1Zi0+YmFzZSwgdmJ1Zi0+d2lkdGgsCisJCQl2YnVmLT5oZWlnaHQsIHZidWYtPmRlcHRoLCB2YnVmLT5ieXRlc3BlcmxpbmUpOworCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKQorCQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZGVwdGggPT0gdmJ1Zi0+ZGVwdGgpCisJCQkJYnJlYWs7CisJCWlmIChpID09IE5VTV9GT1JNQVRTKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ1NGQlVGIC0gaW52YWxpZCBmYnVmIGRlcHRoICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCB2YnVmLT5kZXB0aCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmVzID0KKwkJICAgIHNldHVwX2ZidWZmZXIoZmlsZSwgdmJ1Zi0+YmFzZSwgJnpvcmFuX2Zvcm1hdHNbaV0sCisJCQkJICB2YnVmLT53aWR0aCwgdmJ1Zi0+aGVpZ2h0LAorCQkJCSAgdmJ1Zi0+Ynl0ZXNwZXJsaW5lKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NTWU5DOgorCXsKKwkJaW50ICpmcmFtZSA9IGFyZywgcmVzOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ1NZTkMgLSBmcmFtZT0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCAqZnJhbWUpOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmVzID0gdjRsX3N5bmMoZmlsZSwgKmZyYW1lKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCWlmICghcmVzKQorCQkJenItPnY0bF9zeW5jX3RhaWwrKzsKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NNQ0FQVFVSRToKKwl7CisJCXN0cnVjdCB2aWRlb19tbWFwICp2bWFwID0gYXJnOworCQlpbnQgcmVzOworCisJCWRwcmludGsoMywKKwkJCUtFUk5fREVCVUcKKwkJCSIlczogVklESU9DTUNBUFRVUkUgLSBmcmFtZT0lZCwgZ2VvbT0lZHglZCwgZm10PSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIHZtYXAtPmZyYW1lLCB2bWFwLT53aWR0aCwgdm1hcC0+aGVpZ2h0LAorCQkJdm1hcC0+Zm9ybWF0KTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXJlcyA9IHY0bF9ncmFiKGZpbGUsIHZtYXApOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NHTUJVRjoKKwl7CisJCXN0cnVjdCB2aWRlb19tYnVmICp2bWJ1ZiA9IGFyZzsKKwkJaW50IGksIHJlcyA9IDA7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR01CVUZcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCQl2bWJ1Zi0+c2l6ZSA9CisJCSAgICBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgKgorCQkgICAgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOworCQl2bWJ1Zi0+ZnJhbWVzID0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOworCQlmb3IgKGkgPSAwOyBpIDwgdm1idWYtPmZyYW1lczsgaSsrKSB7CisJCQl2bWJ1Zi0+b2Zmc2V0c1tpXSA9CisJCQkgICAgaSAqIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKKwkJfQorCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fCBmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ0dNQlVGIC0gYnVmZmVycyBhbHJlYWR5IGFsbG9jYXRlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byB2NGwxcmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJaWYgKHY0bF9mYnVmZmVyX2FsbG9jKGZpbGUpKSB7CisJCQlyZXMgPSAtRU5PTUVNOworCQkJZ290byB2NGwxcmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgVjRMIGJ1ZmZlcnMgKi8KKwkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfUkFXOworCXY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DR1VOSVQ6CisJeworCQlzdHJ1Y3QgdmlkZW9fdW5pdCAqdnVuaXQgPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR1VOSVRcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCQl2dW5pdC0+dmlkZW8gPSB6ci0+dmlkZW9fZGV2LT5taW5vcjsKKwkJdnVuaXQtPnZiaSA9IFZJREVPX05PX1VOSVQ7CisJCXZ1bml0LT5yYWRpbyA9IFZJREVPX05PX1VOSVQ7CisJCXZ1bml0LT5hdWRpbyA9IFZJREVPX05PX1VOSVQ7CisJCXZ1bml0LT50ZWxldGV4dCA9IFZJREVPX05PX1VOSVQ7CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCQkvKgorCQkgKiBSSjogSW4gcHJpbmNpcGFsIHdlIGNvdWxkIHN1cHBvcnQgc3ViY2FwdHVyZXMgZm9yIFY0TCBncmFiYmluZy4KKwkJICogICAgIE5vdCBldmVuIHRoZSBmYW1vdXMgQlRUViBkcml2ZXIgaGFzIHRoZW0sIGhvd2V2ZXIuCisJCSAqICAgICBJZiB0aGVyZSBzaG91bGQgYmUgYSBzdHJvbmcgZGVtYW5kLCBvbmUgY291bGQgY29uc2lkZXIKKwkJICogICAgIHRvIGltcGxlbWVudCB0aGVtLgorCQkgKi8KKwljYXNlIFZJRElPQ0dDQVBUVVJFOgorCXsKKwkJZHByaW50aygzLCBLRVJOX0VSUiAiJXM6IFZJRElPQ0dDQVBUVVJFIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ1NDQVBUVVJFOgorCXsKKwkJZHByaW50aygzLCBLRVJOX0VSUiAiJXM6IFZJRElPQ1NDQVBUVVJFIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkJYnJlYWs7CisKKwljYXNlIEJVWklPQ19HX1BBUkFNUzoKKwl7CisJCXN0cnVjdCB6b3Jhbl9wYXJhbXMgKmJwYXJhbXMgPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogQlVaSU9DX0dfUEFSQU1TXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkJbWVtc2V0KGJwYXJhbXMsIDAsIHNpemVvZihzdHJ1Y3Qgem9yYW5fcGFyYW1zKSk7CisJCWJwYXJhbXMtPm1ham9yX3ZlcnNpb24gPSBNQUpPUl9WRVJTSU9OOworCQlicGFyYW1zLT5taW5vcl92ZXJzaW9uID0gTUlOT1JfVkVSU0lPTjsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJYnBhcmFtcy0+bm9ybSA9IHpyLT5ub3JtOworCQlicGFyYW1zLT5pbnB1dCA9IHpyLT5pbnB1dDsKKworCQlicGFyYW1zLT5kZWNpbWF0aW9uID0gZmgtPmpwZ19zZXR0aW5ncy5kZWNpbWF0aW9uOworCQlicGFyYW1zLT5Ib3JEY20gPSBmaC0+anBnX3NldHRpbmdzLkhvckRjbTsKKwkJYnBhcmFtcy0+VmVyRGNtID0gZmgtPmpwZ19zZXR0aW5ncy5WZXJEY207CisJCWJwYXJhbXMtPlRtcERjbSA9IGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtOworCQlicGFyYW1zLT5maWVsZF9wZXJfYnVmZiA9IGZoLT5qcGdfc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmY7CisJCWJwYXJhbXMtPmltZ194ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfeDsKKwkJYnBhcmFtcy0+aW1nX3kgPSBmaC0+anBnX3NldHRpbmdzLmltZ195OworCQlicGFyYW1zLT5pbWdfd2lkdGggPSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aDsKKwkJYnBhcmFtcy0+aW1nX2hlaWdodCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodDsKKwkJYnBhcmFtcy0+b2RkX2V2ZW4gPSBmaC0+anBnX3NldHRpbmdzLm9kZF9ldmVuOworCisJCWJwYXJhbXMtPnF1YWxpdHkgPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLnF1YWxpdHk7CisJCWJwYXJhbXMtPkFQUG4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUG47CisJCWJwYXJhbXMtPkFQUF9sZW4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW47CisJCW1lbWNweShicGFyYW1zLT5BUFBfZGF0YSwKKwkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2RhdGEsCisJCSAgICAgICBzaXplb2YoYnBhcmFtcy0+QVBQX2RhdGEpKTsKKwkJYnBhcmFtcy0+Q09NX2xlbiA9IHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbjsKKwkJbWVtY3B5KGJwYXJhbXMtPkNPTV9kYXRhLAorCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSwKKwkJICAgICAgIHNpemVvZihicGFyYW1zLT5DT01fZGF0YSkpOworCQlicGFyYW1zLT5qcGVnX21hcmtlcnMgPQorCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5qcGVnX21hcmtlcnM7CisKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJYnBhcmFtcy0+VkZJRk9fRkIgPSAwOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIEJVWklPQ19TX1BBUkFNUzoKKwl7CisJCXN0cnVjdCB6b3Jhbl9wYXJhbXMgKmJwYXJhbXMgPSBhcmc7CisJCWludCByZXMgPSAwOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19TX1BBUkFNU1xuIiwgWlJfREVWTkFNRSh6cikpOworCisJCXNldHRpbmdzLmRlY2ltYXRpb24gPSBicGFyYW1zLT5kZWNpbWF0aW9uOworCQlzZXR0aW5ncy5Ib3JEY20gPSBicGFyYW1zLT5Ib3JEY207CisJCXNldHRpbmdzLlZlckRjbSA9IGJwYXJhbXMtPlZlckRjbTsKKwkJc2V0dGluZ3MuVG1wRGNtID0gYnBhcmFtcy0+VG1wRGNtOworCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IGJwYXJhbXMtPmZpZWxkX3Blcl9idWZmOworCQlzZXR0aW5ncy5pbWdfeCA9IGJwYXJhbXMtPmltZ194OworCQlzZXR0aW5ncy5pbWdfeSA9IGJwYXJhbXMtPmltZ195OworCQlzZXR0aW5ncy5pbWdfd2lkdGggPSBicGFyYW1zLT5pbWdfd2lkdGg7CisJCXNldHRpbmdzLmltZ19oZWlnaHQgPSBicGFyYW1zLT5pbWdfaGVpZ2h0OworCQlzZXR0aW5ncy5vZGRfZXZlbiA9IGJwYXJhbXMtPm9kZF9ldmVuOworCisJCXNldHRpbmdzLmpwZ19jb21wLnF1YWxpdHkgPSBicGFyYW1zLT5xdWFsaXR5OworCQlzZXR0aW5ncy5qcGdfY29tcC5BUFBuID0gYnBhcmFtcy0+QVBQbjsKKwkJc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbiA9IGJwYXJhbXMtPkFQUF9sZW47CisJCW1lbWNweShzZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSwgYnBhcmFtcy0+QVBQX2RhdGEsCisJCSAgICAgICBzaXplb2YoYnBhcmFtcy0+QVBQX2RhdGEpKTsKKwkJc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbiA9IGJwYXJhbXMtPkNPTV9sZW47CisJCW1lbWNweShzZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSwgYnBhcmFtcy0+Q09NX2RhdGEsCisJCSAgICAgICBzaXplb2YoYnBhcmFtcy0+Q09NX2RhdGEpKTsKKwkJc2V0dGluZ3MuanBnX2NvbXAuanBlZ19tYXJrZXJzID0gYnBhcmFtcy0+anBlZ19tYXJrZXJzOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlpZiAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfSURMRSkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBCVVpJT0NfU19QQVJBTVMgY2FsbGVkLCBidXQgQnV6IGluIGNhcHR1cmUvcGxheWJhY2sgbW9kZVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBzcGFyYW1zX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJLyogQ2hlY2sgdGhlIHBhcmFtcyBmaXJzdCBiZWZvcmUgb3ZlcndyaXRpbmcgb3VyCisJCSAqIG50ZXJuYWwgdmFsdWVzICovCisJCWlmICh6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncykpIHsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCQlnb3RvIHNwYXJhbXNfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQlmaC0+anBnX3NldHRpbmdzID0gc2V0dGluZ3M7CisJc3BhcmFtc191bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBCVVpJT0NfUkVRQlVGUzoKKwl7CisJCXN0cnVjdCB6b3Jhbl9yZXF1ZXN0YnVmZmVycyAqYnJlcSA9IGFyZzsKKwkJaW50IHJlcyA9IDA7CisKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiBCVVpJT0NfUkVRQlVGUyAtIGNvdW50PSVsdSwgc2l6ZT0lbHVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgYnJlcS0+Y291bnQsIGJyZXEtPnNpemUpOworCisJCS8qIEVuZm9yY2UgcmVhc29uYWJsZSBsb3dlciBhbmQgdXBwZXIgbGltaXRzICovCisJCWlmIChicmVxLT5jb3VudCA8IDQpCisJCQlicmVxLT5jb3VudCA9IDQ7CS8qIENvdWxkIGJlIGNob29zZW4gc21hbGxlciAqLworCQlpZiAoYnJlcS0+Y291bnQgPiBqcGdfbmJ1ZnMpCisJCQlicmVxLT5jb3VudCA9IGpwZ19uYnVmczsKKwkJYnJlcS0+c2l6ZSA9IFBBR0VfQUxJR04oYnJlcS0+c2l6ZSk7CisJCWlmIChicmVxLT5zaXplIDwgODE5MikKKwkJCWJyZXEtPnNpemUgPSA4MTkyOwkvKiBBcmJpdHJhcnkgKi8KKwkJLyogYnJlcS0+c2l6ZSBpcyBsaW1pdGVkIGJ5IDEgcGFnZSBmb3IgdGhlIHN0YXRfY29tCisJCSAqIHRhYmxlcyB0byBhIE1heGltdW0gb2YgMiBNQiAqLworCQlpZiAoYnJlcS0+c2l6ZSA+IGpwZ19idWZzaXplKQorCQkJYnJlcS0+c2l6ZSA9IGpwZ19idWZzaXplOworCQlpZiAoZmgtPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cyAmJgorCQkgICAgYnJlcS0+c2l6ZSA+IE1BWF9LTUFMTE9DX01FTSkKKwkJCWJyZXEtPnNpemUgPSBNQVhfS01BTExPQ19NRU07CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogQlVaSU9DX1JFUUJVRlMgLSBidWZmZXJzIGFsbHJlYWR5IGFsbG9jYXRlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXMgPSAtRUJVU1k7CisJCQlnb3RvIGpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCWZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyA9IGJyZXEtPmNvdW50OworCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgPSBicmVxLT5zaXplOworCisJCWlmIChqcGdfZmJ1ZmZlcl9hbGxvYyhmaWxlKSkgeworCQkJcmVzID0gLUVOT01FTTsKKwkJCWdvdG8ganBncmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgTUpQRUcgYnVmZmVycyAtIGNvdWxkCisJCSAqIGFsc28gYmUgKl9QTEFZLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgaGVyZSAqLworCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOworCWpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBCVVpJT0NfUUJVRl9DQVBUOgorCXsKKwkJaW50ICpmcmFtZSA9IGFyZywgcmVzOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19RQlVGX0NBUFQgLSBmcmFtZT0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCAqZnJhbWUpOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmVzID0ganBnX3FidWYoZmlsZSwgKmZyYW1lLCBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIEJVWklPQ19RQlVGX1BMQVk6CisJeworCQlpbnQgKmZyYW1lID0gYXJnLCByZXM7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogQlVaSU9DX1FCVUZfUExBWSAtIGZyYW1lPSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksICpmcmFtZSk7CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlyZXMgPSBqcGdfcWJ1ZihmaWxlLCAqZnJhbWUsIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBCVVpJT0NfU1lOQzoKKwl7CisJCXN0cnVjdCB6b3Jhbl9zeW5jICpic3luYyA9IGFyZzsKKwkJaW50IHJlczsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBCVVpJT0NfU1lOQ1xuIiwgWlJfREVWTkFNRSh6cikpOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmVzID0ganBnX3N5bmMoZmlsZSwgYnN5bmMpOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIEJVWklPQ19HX1NUQVRVUzoKKwl7CisJCXN0cnVjdCB6b3Jhbl9zdGF0dXMgKmJzdGF0ID0gYXJnOworCQlpbnQgbm9ybSwgaW5wdXQsIHN0YXR1cywgcmVzID0gMDsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBCVVpJT0NfR19TVEFUVVNcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCQlpZiAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfSURMRSkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBCVVpJT0NfR19TVEFUVVMgY2FsbGVkIGJ1dCBCdXogaW4gY2FwdHVyZS9wbGF5YmFjayBtb2RlXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFtic3RhdC0+aW5wdXRdLm11eHNlbDsKKwkJbm9ybSA9IFZJREVPX01PREVfQVVUTzsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJaWYgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX0lETEUpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogQlVaSU9DX0dfU1RBVFVTIGNhbGxlZCwgYnV0IEJ1eiBpbiBjYXB0dXJlL3BsYXliYWNrIG1vZGVcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gZ3N0YXRfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmaW5wdXQpOworCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZub3JtKTsKKworCQkvKiBzbGVlcCAxIHNlY29uZCAqLworCQlzc2xlZXAoMSk7CisKKwkJLyogR2V0IHN0YXR1cyBvZiB2aWRlbyBkZWNvZGVyICovCisJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfU1RBVFVTLCAmc3RhdHVzKTsKKworCQkvKiByZXN0b3JlIHByZXZpb3VzIGlucHV0IGFuZCBub3JtICovCisJCWlucHV0ID0genItPmNhcmQuaW5wdXRbenItPmlucHV0XS5tdXhzZWw7CisJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfSU5QVVQsICZpbnB1dCk7CisJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJnpyLT5ub3JtKTsKKwlnc3RhdF91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJaWYgKCFyZXMpIHsKKwkJCWJzdGF0LT5zaWduYWwgPQorCQkJICAgIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSA/IDEgOiAwOworCQkJaWYgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX05UU0MpCisJCQkJYnN0YXQtPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CisJCQllbHNlIGlmIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19TRUNBTSkKKwkJCQlic3RhdC0+bm9ybSA9IFZJREVPX01PREVfU0VDQU07CisJCQllbHNlCisJCQkJYnN0YXQtPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKKworCQkJYnN0YXQtPmNvbG9yID0KKwkJCSAgICAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfQ09MT1IpID8gMSA6IDA7CisJCX0KKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwkJLyogVGhlIG5ldyB2aWRlbzRsaW51eDIgY2FwdHVyZSBpbnRlcmZhY2UgLSBtdWNoIG5pY2VyIHRoYW4gdmlkZW80bGludXgxLCBzaW5jZQorCQkgKiBpdCBhbGxvd3MgZm9yIGludGVncmF0aW5nIHRoZSBKUEVHIGNhcHR1cmluZyBjYWxscyBpbnNpZGUgc3RhbmRhcmQgdjRsMgorCQkgKi8KKworCWNhc2UgVklESU9DX1FVRVJZQ0FQOgorCXsKKwkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RVUVSWUNBUFxuIiwgWlJfREVWTkFNRSh6cikpOworCisJCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7CisJCXN0cm5jcHkoY2FwLT5jYXJkLCBaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKGNhcC0+Y2FyZCktMSk7CisJCXN0cm5jcHkoY2FwLT5kcml2ZXIsICJ6b3JhbiIsIHNpemVvZihjYXAtPmRyaXZlciktMSk7CisJCXNucHJpbnRmKGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSwgIlBDSTolcyIsCisJCQkgcGNpX25hbWUoenItPnBjaV9kZXYpKTsKKwkJY2FwLT52ZXJzaW9uID0KKwkJICAgIEtFUk5FTF9WRVJTSU9OKE1BSk9SX1ZFUlNJT04sIE1JTk9SX1ZFUlNJT04sCisJCQkJICAgUkVMRUFTRV9WRVJTSU9OKTsKKwkJY2FwLT5jYXBhYmlsaXRpZXMgPSBaT1JBTl9WNEwyX1ZJRF9GTEFHUzsKKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfRU5VTV9GTVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQgPSBhcmc7CisJCWludCBpbmRleCA9IGZtdC0+aW5kZXgsIG51bSA9IC0xLCBpLCBmbGFnID0gMCwgdHlwZSA9CisJCSAgICBmbXQtPnR5cGU7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0VOVU1fRk1UIC0gaW5kZXg9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgZm10LT5pbmRleCk7CisKKwkJc3dpdGNoIChmbXQtPnR5cGUpIHsKKwkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCQlmbGFnID0gWk9SQU5fRk9STUFUX0NBUFRVUkU7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKKwkJCWZsYWcgPSBaT1JBTl9GT1JNQVRfUExBWUJBQ0s7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6CisJCQlmbGFnID0gWk9SQU5fRk9STUFUX09WRVJMQVk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX0VOVU1fRk1UIC0gdW5rbm93biB0eXBlICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykgeworCQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBmbGFnKQorCQkJCW51bSsrOworCQkJaWYgKG51bSA9PSBmbXQtPmluZGV4KQorCQkJCWJyZWFrOworCQl9CisJCWlmIChmbXQtPmluZGV4IDwgMCAvKiBsYXRlLCBidXQgbm90IHRvbyBsYXRlICovICB8fAorCQkgICAgaSA9PSBOVU1fRk9STUFUUykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7CisJCWZtdC0+aW5kZXggPSBpbmRleDsKKwkJZm10LT50eXBlID0gdHlwZTsKKwkJc3RybmNweShmbXQtPmRlc2NyaXB0aW9uLCB6b3Jhbl9mb3JtYXRzW2ldLm5hbWUsIHNpemVvZihmbXQtPmRlc2NyaXB0aW9uKS0xKTsKKwkJZm10LT5waXhlbGZvcm1hdCA9IHpvcmFuX2Zvcm1hdHNbaV0uZm91cmNjOworCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mbGFncyAmIFpPUkFOX0ZPUk1BVF9DT01QUkVTU0VEKQorCQkJZm10LT5mbGFncyB8PSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX0dfRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQgPSBhcmc7CisJCWludCB0eXBlID0gZm10LT50eXBlOworCisJCWRwcmludGsoNSwgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0ZNVFxuIiwgWlJfREVWTkFNRSh6cikpOworCisJCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7CisJCWZtdC0+dHlwZSA9IHR5cGU7CisKKwkJc3dpdGNoIChmbXQtPnR5cGUpIHsKKwkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6CisKKwkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQkJZm10LT5mbXQud2luLncubGVmdCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLng7CisJCQlmbXQtPmZtdC53aW4udy50b3AgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy55OworCQkJZm10LT5mbXQud2luLncud2lkdGggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aDsKKwkJCWZtdC0+Zm10Lndpbi53LmhlaWdodCA9CisJCQkgICAgZmgtPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0OworCQkJaWYgKGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoICogMiA+CisJCQkgICAgQlVaX01BWF9IRUlHSFQpCisJCQkJZm10LT5mbXQud2luLmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQkJZWxzZQorCQkJCWZtdC0+Zm10Lndpbi5maWVsZCA9IFY0TDJfRklFTERfVE9QOworCisJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6CisKKwkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQkJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgJiYKKwkJCSAgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSB7CisKKwkJCQlmbXQtPmZtdC5waXgud2lkdGggPQorCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLndpZHRoOworCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQorCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmhlaWdodDsKKwkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KKwkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmUgKgorCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmhlaWdodDsKKwkJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPQorCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmZvcm1hdC0+Zm91cmNjOworCQkJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0KKwkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmNvbG9yc3BhY2U7CisJCQkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9CisJCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOworCQkJCWlmIChCVVpfTUFYX0hFSUdIVCA8CisJCQkJICAgIChmaC0+djRsX3NldHRpbmdzLmhlaWdodCAqIDIpKQorCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQorCQkJCQkgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQkJCWVsc2UKKwkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KKwkJCQkJICAgIFY0TDJfRklFTERfVE9QOworCisJCQl9IGVsc2UgeworCisJCQkJZm10LT5mbXQucGl4LndpZHRoID0KKwkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLworCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLkhvckRjbTsKKwkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KKwkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0IC8KKwkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuVmVyRGNtICoKKwkJCQkgICAgIGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtKTsKKwkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KKwkJCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT4KKwkJCQkJCQkgICAganBnX3NldHRpbmdzKTsKKwkJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPQorCQkJCSAgICBWNEwyX1BJWF9GTVRfTUpQRUc7CisJCQkJaWYgKGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpCisJCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9CisJCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy4KKwkJCQkJICAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfU0VRX0JUIDoKKwkJCQkJICAgICBWNEwyX0ZJRUxEX1NFUV9CVCk7CisJCQkJZWxzZQorCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQorCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCisJCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1RPUCA6CisJCQkJCSAgICAgVjRMMl9GSUVMRF9CT1RUT00pOworCisJCQkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CisJCQkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPQorCQkJCSAgICBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOworCQkJfQorCisJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX0dfRk1UIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19TX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOworCQlpbnQgaSwgcmVzID0gMDsKKwkJX19sZTMyIHByaW50Zm9ybWF0OworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX0ZNVCAtIHR5cGU9JWQsICIsCisJCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKKworCQlzd2l0Y2ggKGZtdC0+dHlwZSkgeworCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKKworCQkJZHByaW50aygzLCAieD0lZCwgeT0lZCwgdz0lZCwgaD0lZCwgY250PSVkLCBtYXA9MHglcFxuIiwKKwkJCQlmbXQtPmZtdC53aW4udy5sZWZ0LCBmbXQtPmZtdC53aW4udy50b3AsCisJCQkJZm10LT5mbXQud2luLncud2lkdGgsCisJCQkJZm10LT5mbXQud2luLncuaGVpZ2h0LAorCQkJCWZtdC0+Zm10Lndpbi5jbGlwY291bnQsCisJCQkJZm10LT5mbXQud2luLmJpdG1hcCk7CisJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQlyZXMgPQorCQkJICAgIHNldHVwX3dpbmRvdyhmaWxlLCBmbXQtPmZtdC53aW4udy5sZWZ0LAorCQkJCQkgZm10LT5mbXQud2luLncudG9wLAorCQkJCQkgZm10LT5mbXQud2luLncud2lkdGgsCisJCQkJCSBmbXQtPmZtdC53aW4udy5oZWlnaHQsCisJCQkJCSAoc3RydWN0IHZpZGVvX2NsaXAgX191c2VyICopCisJCQkJCSAgIGZtdC0+Zm10Lndpbi5jbGlwcywKKwkJCQkJIGZtdC0+Zm10Lndpbi5jbGlwY291bnQsCisJCQkJCSBmbXQtPmZtdC53aW4uYml0bWFwKTsKKwkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCQkJcmV0dXJuIHJlczsKKwkJCWJyZWFrOworCisJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOgorCisJCQlwcmludGZvcm1hdCA9CisJCQkgICAgX19jcHVfdG9fbGUzMihmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCQkJZHByaW50aygzLCAic2l6ZT0lZHglZCwgZm10PTB4JXggKCU0LjRzKVxuIiwKKwkJCQlmbXQtPmZtdC5waXgud2lkdGgsIGZtdC0+Zm10LnBpeC5oZWlnaHQsCisJCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0LAorCQkJCShjaGFyICopICZwcmludGZvcm1hdCk7CisKKwkJCS8qIHdlIGNhbiBiZSByZXF1ZXN0ZWQgdG8gZG8gSlBFRy9yYXcgcGxheWJhY2svY2FwdHVyZSAqLworCQkJaWYgKCEKKwkJCSAgICAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCQkJICAgICAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCisJCQkgICAgICBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0KKwkJCSAgICAgIFY0TDJfUElYX0ZNVF9NSlBFRykpKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIHVua25vd24gdHlwZSAlZC8weCV4KCU0LjRzKSBjb21iaW5hdGlvblxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSwKKwkJCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0LAorCQkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykgeworCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQkJCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKKworCQkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkIHx8CisJCQkJICAgIGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJCQkJZHByaW50aygxLAorCQkJCQkJS0VSTl9FUlIKKwkJCQkJCSIlczogVklESU9DX1NfRk1UIC0gY2Fubm90IGNoYW5nZSBjYXB0dXJlIG1vZGVcbiIsCisJCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJCXJlcyA9IC1FQlVTWTsKKwkJCQkJZ290byBzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOworCQkJCX0KKworCQkJCS8qIHdlIGFjdHVhbGx5IG5lZWQgdG8gc2V0ICdyZWFsJyBwYXJhbWV0ZXJzIG5vdyAqLworCQkJCWlmICgoZm10LT5mbXQucGl4LmhlaWdodCAqIDIpID4KKwkJCQkgICAgQlVaX01BWF9IRUlHSFQpCisJCQkJCXNldHRpbmdzLlRtcERjbSA9IDE7CisJCQkJZWxzZQorCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAyOworCQkJCXNldHRpbmdzLmRlY2ltYXRpb24gPSAwOworCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDw9CisJCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvIDIpCisJCQkJCXNldHRpbmdzLlZlckRjbSA9IDI7CisJCQkJZWxzZQorCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAxOworCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KKwkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyA0KQorCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSA0OworCQkJCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PQorCQkJCQkgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyAyKQorCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSAyOworCQkJCWVsc2UKKwkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMTsKKwkJCQlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCisJCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMjsKKwkJCQllbHNlCisJCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMTsKKworCQkJCS8qIGNoZWNrICovCisJCQkJaWYgKChyZXMgPQorCQkJCSAgICAgem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLAorCQkJCQkJCSAgICAgICZzZXR0aW5ncykpKQorCQkJCQlnb3RvIHNmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkJCQkvKiBpdCdzIG9rLCBzbyBzZXQgdGhlbSAqLworCQkJCWZoLT5qcGdfc2V0dGluZ3MgPSBzZXR0aW5nczsKKworCQkJCS8qIHRlbGwgdGhlIHVzZXIgd2hhdCB3ZSBhY3R1YWxseSBkaWQgKi8KKwkJCQlmbXQtPmZtdC5waXgud2lkdGggPQorCQkJCSAgICBzZXR0aW5ncy5pbWdfd2lkdGggLyBzZXR0aW5ncy5Ib3JEY207CisJCQkJZm10LT5mbXQucGl4LmhlaWdodCA9CisJCQkJICAgIHNldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KKwkJCQkgICAgKHNldHRpbmdzLlRtcERjbSAqIHNldHRpbmdzLlZlckRjbSk7CisJCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQorCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQorCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCisJCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9UQiA6CisJCQkJCSAgICAgVjRMMl9GSUVMRF9TRVFfQlQpOworCQkJCWVsc2UKKwkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KKwkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgorCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOgorCQkJCQkgICAgIFY0TDJfRklFTERfQk9UVE9NKTsKKwkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgPQorCQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPgorCQkJCQkJCSAgICBqcGdfc2V0dGluZ3MpOworCQkJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOworCQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPQorCQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCQkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPQorCQkJCSAgICBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOworCisJCQkJLyogd2UgaGVyZWJ5IGFidXNlIHRoaXMgdmFyaWFibGUgdG8gc2hvdyB0aGF0CisJCQkJICogd2UncmUgZ29ubmEgZG8gbWpwZWcgY2FwdHVyZSAqLworCQkJCWZoLT5tYXBfbW9kZSA9CisJCQkJICAgIChmbXQtPnR5cGUgPT0KKwkJCQkgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgPworCQkJCSAgICBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDIDoKKwkJCQkgICAgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk7CisJCQlzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOgorCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCQkJfSBlbHNlIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKKwkJCQkJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PQorCQkJCQkgICAgem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MpCisJCQkJCQlicmVhazsKKwkJCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgeworCQkJCQlkcHJpbnRrKDEsCisJCQkJCQlLRVJOX0VSUgorCQkJCQkJIiVzOiBWSURJT0NfU19GTVQgLSB1bmtub3duL3Vuc3VwcG9ydGVkIGZvcm1hdCAweCV4ICglNC40cylcbiIsCisJCQkJCQlaUl9ERVZOQU1FKHpyKSwKKwkJCQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCwKKwkJCQkJCShjaGFyICopICZwcmludGZvcm1hdCk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgfHwKKwkJCQkgICAgKGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgJiYKKwkJCQkgICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0KKwkJCQkgICAgIFpPUkFOX0ZSRUUpKSB7CisJCQkJCWRwcmludGsoMSwKKwkJCQkJCUtFUk5fRVJSCisJCQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIGNhbm5vdCBjaGFuZ2UgY2FwdHVyZSBtb2RlXG4iLAorCQkJCQkJWlJfREVWTkFNRSh6cikpOworCQkJCQlyZXMgPSAtRUJVU1k7CisJCQkJCWdvdG8gc2ZtdHY0bF91bmxvY2tfYW5kX3JldHVybjsKKwkJCQl9CisJCQkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKKwkJCQkJZm10LT5mbXQucGl4LmhlaWdodCA9CisJCQkJCSAgICBCVVpfTUFYX0hFSUdIVDsKKwkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoID4gQlVaX01BWF9XSURUSCkKKwkJCQkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01BWF9XSURUSDsKKworCQkJCWlmICgocmVzID0KKwkJCQkgICAgIHpvcmFuX3Y0bF9zZXRfZm9ybWF0KGZpbGUsCisJCQkJCQkJICBmbXQtPmZtdC5waXguCisJCQkJCQkJICB3aWR0aCwKKwkJCQkJCQkgIGZtdC0+Zm10LnBpeC4KKwkJCQkJCQkgIGhlaWdodCwKKwkJCQkJCQkgICZ6b3Jhbl9mb3JtYXRzCisJCQkJCQkJICBbaV0pKSkKKwkJCQkJZ290byBzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOworCisJCQkJLyogdGVsbCB0aGUgdXNlciB0aGUKKwkJCQkgKiByZXN1bHRzL21pc3Npbmcgc3R1ZmYgKi8KKwkJCQlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0KKwkJCQkJZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmU7CisJCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9CisJCQkJCWZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0ICoKKwkJCQkJZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmU7CisJCQkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPQorCQkJCQlmaC0+djRsX3NldHRpbmdzLmZvcm1hdC0+Y29sb3JzcGFjZTsKKwkJCQlpZiAoQlVaX01BWF9IRUlHSFQgPAorCQkJCSAgICAoZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgKiAyKSkKKwkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KKwkJCQkJICAgIFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwkJCQllbHNlCisJCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9CisJCQkJCSAgICBWNEwyX0ZJRUxEX1RPUDsKKworCQkJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKKwkJCXNmbXR2NGxfdW5sb2NrX2FuZF9yZXR1cm46CisJCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQl9CisKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX0dfRkJVRjoKKwl7CisJCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYiA9IGFyZzsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19GQlVGXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkJbWVtc2V0KGZiLCAwLCBzaXplb2YoKmZiKSk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJZmItPmJhc2UgPSB6ci0+YnVmZmVyLmJhc2U7CisJCWZiLT5mbXQud2lkdGggPSB6ci0+YnVmZmVyLndpZHRoOworCQlmYi0+Zm10LmhlaWdodCA9IHpyLT5idWZmZXIuaGVpZ2h0OworCQlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KSB7CisJCQlmYi0+Zm10LnBpeGVsZm9ybWF0ID0KKwkJCQlmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmZvdXJjYzsKKwkJfQorCQlmYi0+Zm10LmJ5dGVzcGVybGluZSA9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJZmItPmZtdC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7CisJCWZiLT5mbXQuZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJCWZiLT5mbGFncyA9IFY0TDJfRkJVRl9GTEFHX09WRVJMQVk7CisJCWZiLT5jYXBhYmlsaXR5ID0gVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19TX0ZCVUY6CisJeworCQlpbnQgaSwgcmVzID0gMDsKKwkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiID0gYXJnOworCQlfX2xlMzIgcHJpbnRmb3JtYXQgPSBfX2NwdV90b19sZTMyKGZiLT5mbXQucGl4ZWxmb3JtYXQpOworCisJCWRwcmludGsoMywKKwkJCUtFUk5fREVCVUcKKwkJCSIlczogVklESU9DX1NfRkJVRiAtIGJhc2U9MHglcCwgc2l6ZT0lZHglZCwgYnBsPSVkLCBmbXQ9MHgleCAoJTQuNHMpXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGZiLT5iYXNlLCBmYi0+Zm10LndpZHRoLCBmYi0+Zm10LmhlaWdodCwKKwkJCWZiLT5mbXQuYnl0ZXNwZXJsaW5lLCBmYi0+Zm10LnBpeGVsZm9ybWF0LAorCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKKwkJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmYi0+Zm10LnBpeGVsZm9ybWF0KQorCQkJCWJyZWFrOworCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfU19GQlVGIC0gZm9ybWF0PTB4JXggKCU0LjRzKSBub3QgYWxsb3dlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgZmItPmZtdC5waXhlbGZvcm1hdCwKKwkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXJlcyA9CisJCSAgICBzZXR1cF9mYnVmZmVyKGZpbGUsIGZiLT5iYXNlLCAmem9yYW5fZm9ybWF0c1tpXSwKKwkJCQkgIGZiLT5mbXQud2lkdGgsIGZiLT5mbXQuaGVpZ2h0LAorCQkJCSAgZmItPmZtdC5ieXRlc3BlcmxpbmUpOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19PVkVSTEFZOgorCXsKKwkJaW50ICpvbiA9IGFyZywgcmVzOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19QUkVWSUVXIC0gb249JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgKm9uKTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXJlcyA9IHNldHVwX292ZXJsYXkoZmlsZSwgKm9uKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfUkVRQlVGUzoKKwl7CisJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXEgPSBhcmc7CisJCWludCByZXMgPSAwOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19SRVFCVUZTIC0gdHlwZT0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCByZXEtPnR5cGUpOworCisJCWlmIChyZXEtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IG9ubHkgTUVNT1JZX01NQVAgY2FwdHVyZSBpcyBzdXBwb3J0ZWQsIG5vdCAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgcmVxLT5tZW1vcnkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJaWYgKGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgfHwgZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfUkVRQlVGUyAtIGJ1ZmZlcnMgYWxscmVhZHkgYWxsb2NhdGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJlcyA9IC1FQlVTWTsKKwkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXICYmCisJCSAgICByZXEtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisKKwkJCS8qIGNvbnRyb2wgdXNlciBpbnB1dCAqLworCQkJaWYgKHJlcS0+Y291bnQgPCAyKQorCQkJCXJlcS0+Y291bnQgPSAyOworCQkJaWYgKHJlcS0+Y291bnQgPiB2NGxfbmJ1ZnMpCisJCQkJcmVxLT5jb3VudCA9IHY0bF9uYnVmczsKKwkJCWZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyA9IHJlcS0+Y291bnQ7CisKKwkJCWlmICh2NGxfZmJ1ZmZlcl9hbGxvYyhmaWxlKSkgeworCQkJCXJlcyA9IC1FTk9NRU07CisJCQkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQkJfQorCisJCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBWNEwgYnVmZmVycyAqLworCQkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfUkFXOworCisJCX0gZWxzZSBpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19SRUMgfHwKKwkJCSAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkgeworCisJCQkvKiB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzaXplIG91cnNlbHZlcyBub3cgKi8KKwkJCWlmIChyZXEtPmNvdW50IDwgNCkKKwkJCQlyZXEtPmNvdW50ID0gNDsKKwkJCWlmIChyZXEtPmNvdW50ID4ganBnX25idWZzKQorCQkJCXJlcS0+Y291bnQgPSBqcGdfbmJ1ZnM7CisJCQlmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSByZXEtPmNvdW50OworCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0KKwkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPmpwZ19zZXR0aW5ncyk7CisKKwkJCWlmIChqcGdfZmJ1ZmZlcl9hbGxvYyhmaWxlKSkgeworCQkJCXJlcyA9IC1FTk9NRU07CisJCQkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQkJfQorCisJCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBNSlBFRyBidWZmZXJzICovCisJCQlpZiAocmVxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOworCQkJZWxzZQorCQkJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOworCisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19SRVFCVUZTIC0gdW5rbm93biB0eXBlICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCByZXEtPnR5cGUpOworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCXY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19RVUVSWUJVRjoKKwl7CisJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOworCQlfX3UzMiB0eXBlID0gYnVmLT50eXBlOworCQlpbnQgaW5kZXggPSBidWYtPmluZGV4LCByZXM7CisKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiBWSURJT0NfUVVFUllCVUYgLSBpbmRleD0lZCwgdHlwZT0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBidWYtPmluZGV4LCBidWYtPnR5cGUpOworCisJCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7CisJCWJ1Zi0+dHlwZSA9IHR5cGU7CisJCWJ1Zi0+aW5kZXggPSBpbmRleDsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXJlcyA9IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhmaWxlLCBidWYsIGJ1Zi0+aW5kZXgpOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19RQlVGOgorCXsKKwkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7CisJCWludCByZXMgPSAwLCBjb2RlY19tb2RlLCBidWZfdHlwZTsKKworCQlkcHJpbnRrKDMsCisJCQlLRVJOX0RFQlVHICIlczogVklESU9DX1FCVUYgLSB0eXBlPSVkLCBpbmRleD0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGJ1Zi0+aW5kZXgpOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgeworCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKKwkJCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOworCQkJCXJlcyA9IC1FSU5WQUw7CisJCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQkJfQorCisJCQlyZXMgPSB6b3Jhbl92NGxfcXVldWVfZnJhbWUoZmlsZSwgYnVmLT5pbmRleCk7CisJCQlpZiAocmVzKQorCQkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJCWlmICghenItPnY0bF9tZW1ncmFiX2FjdGl2ZSAmJgorCQkJICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fTE9DS0VEKQorCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgorCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCQkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkgeworCQkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7CisJCQkJY29kZWNfbW9kZSA9IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOworCQkJfSBlbHNlIHsKKwkJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJCQljb2RlY19tb2RlID0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTOworCQkJfQorCisJCQlpZiAoYnVmLT50eXBlICE9IGJ1Zl90eXBlKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOworCQkJCXJlcyA9IC1FSU5WQUw7CisJCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQkJfQorCisJCQlyZXMgPQorCQkJICAgIHpvcmFuX2pwZ19xdWV1ZV9mcmFtZShmaWxlLCBidWYtPmluZGV4LAorCQkJCQkJICBjb2RlY19tb2RlKTsKKwkJCWlmIChyZXMgIT0gMCkKKwkJCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfSURMRSAmJgorCQkJICAgIGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fTE9DS0VEKSB7CisJCQkJenIzNjA1N19lbmFibGVfanBnKHpyLCBjb2RlY19tb2RlKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19RQlVGIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlKTsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKwlxYnVmX3VubG9ja19hbmRfcmV0dXJuOgorCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19EUUJVRjoKKwl7CisJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOworCQlpbnQgcmVzID0gMCwgYnVmX3R5cGUsIG51bSA9IC0xOwkvKiBjb21waWxlciBib3JrcyBoZXJlICg/KSAqLworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19EUUJVRiAtIHR5cGU9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlKTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKKwkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CisJCQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQkJCWRwcmludGsoMSwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKKwkJCQlyZXMgPSAtRUlOVkFMOworCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisKKwkJCW51bSA9IHpyLT52NGxfcGVuZFt6ci0+djRsX3N5bmNfdGFpbCAmIFY0TF9NQVNLX0ZSQU1FXTsKKwkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyAmJgorCQkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSAhPQorCQkJICAgIEJVWl9TVEFURV9ET05FKSB7CisJCQkJcmVzID0gLUVBR0FJTjsKKwkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQkJfQorCQkJcmVzID0gdjRsX3N5bmMoZmlsZSwgbnVtKTsKKwkJCWlmIChyZXMpCisJCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJCWVsc2UKKwkJCQl6ci0+djRsX3N5bmNfdGFpbCsrOworCQkJcmVzID0gem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZpbGUsIGJ1ZiwgbnVtKTsKKwkJCWJyZWFrOworCisJCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKKwkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKKwkJeworCQkJc3RydWN0IHpvcmFuX3N5bmMgYnM7CisKKwkJCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkpCisJCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKKwkJCWVsc2UKKwkJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKworCQkJaWYgKGJ1Zi0+dHlwZSAhPSBidWZfdHlwZSkgeworCQkJCWRwcmludGsoMSwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKKwkJCQlyZXMgPSAtRUlOVkFMOworCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisKKwkJCW51bSA9CisJCQkgICAgenItPmpwZ19wZW5kW3pyLT4KKwkJCQkJIGpwZ19xdWVfdGFpbCAmIEJVWl9NQVNLX0ZSQU1FXTsKKworCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICYmCisJCQkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlICE9CisJCQkgICAgQlVaX1NUQVRFX0RPTkUpIHsKKwkJCQlyZXMgPSAtRUFHQUlOOworCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisJCQlyZXMgPSBqcGdfc3luYyhmaWxlLCAmYnMpOworCQkJaWYgKHJlcykKKwkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQkJcmVzID0KKwkJCSAgICB6b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMoZmlsZSwgYnVmLCBicy5mcmFtZSk7CisJCQlicmVhazsKKwkJfQorCisJCWRlZmF1bHQ6CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19EUUJVRiAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCWRxYnVmX3VubG9ja19hbmRfcmV0dXJuOgorCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19TVFJFQU1PTjoKKwl7CisJCWludCByZXMgPSAwOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TVFJFQU1PTlxuIiwgWlJfREVWTkFNRSh6cikpOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgeworCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoJLyogcmF3IGNhcHR1cmUgKi8KKwkJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSB8fAorCQkJICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fQUNUSVZFKSB7CisJCQkJcmVzID0gLUVCVVNZOworCQkJCWdvdG8gc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOworCQkJfQorCisJCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9CisJCQkgICAgWk9SQU5fTE9DS0VEOworCQkJenItPnY0bF9zZXR0aW5ncyA9IGZoLT52NGxfc2V0dGluZ3M7CisKKwkJCXpyLT52NGxfc3luY190YWlsID0genItPnY0bF9wZW5kX3RhaWw7CisJCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgJiYKKwkJCSAgICB6ci0+djRsX3BlbmRfaGVhZCAhPSB6ci0+djRsX3BlbmRfdGFpbCkgeworCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDEpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgorCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCQkJLyogd2hhdCBpcyB0aGUgY29kZWMgbW9kZSByaWdodCBub3c/ICovCisJCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUgfHwKKwkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSkgeworCQkJCXJlcyA9IC1FQlVTWTsKKwkJCQlnb3RvIHN0cm1vbl91bmxvY2tfYW5kX3JldHVybjsKKwkJCX0KKworCQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPQorCQkJICAgIFpPUkFOX0xPQ0tFRDsKKworCQkJaWYgKHpyLT5qcGdfcXVlX2hlYWQgIT0genItPmpwZ19xdWVfdGFpbCkgeworCQkJCS8qIFN0YXJ0IHRoZSBqcGVnIGNvZGVjIHdoZW4gdGhlIGZpcnN0IGZyYW1lIGlzIHF1ZXVlZCAgKi8KKwkJCQlqcGVnX3N0YXJ0KHpyKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19TVFJFQU1PTiAtIGludmFsaWQgbWFwIG1vZGUgJWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKwlzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm46CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKKwl7CisJCWludCBpLCByZXMgPSAwOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TVFJFQU1PRkZcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKKwkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CS8qIHJhdyBjYXB0dXJlICovCisJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFICYmCisJCQkgICAgenItPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCQkJcmVzID0gLUVQRVJNOwkvKiBzdGF5IG9mZiBvdGhlcidzIHNldHRpbmdzISAqLworCQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKKwkJCX0KKwkJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCisJCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCisJCQkvKiB1bmxvYWQgY2FwdHVyZSAqLworCQkJaWYgKHpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpIHsKKwkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspCisJCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9CisJCQkJICAgIEJVWl9TVEFURV9VU0VSOworCQkJZmgtPnY0bF9idWZmZXJzID0genItPnY0bF9idWZmZXJzOworCisJCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9CisJCQkgICAgWk9SQU5fRlJFRTsKKworCQkJenItPnY0bF9ncmFiX3NlcSA9IDA7CisJCQl6ci0+djRsX3BlbmRfaGVhZCA9IHpyLT52NGxfcGVuZF90YWlsID0gMDsKKwkJCXpyLT52NGxfc3luY190YWlsID0gMDsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgorCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSAmJgorCQkJICAgIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQkJCXJlcyA9IC1FUEVSTTsJLyogc3RheSBvZmYgb3RoZXIncyBzZXR0aW5ncyEgKi8KKwkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisJCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQorCQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKKworCQkJcmVzID0KKwkJCSAgICBqcGdfcWJ1ZihmaWxlLCAtMSwKKwkJCQkgICAgIChmaC0+bWFwX21vZGUgPT0KKwkJCQkgICAgICBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDKSA/CisJCQkJICAgICBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MgOgorCQkJCSAgICAgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpOworCQkJaWYgKHJlcykKKwkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX1NUUkVBTU9GRiAtIGludmFsaWQgbWFwIG1vZGUgJWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsID0gYXJnOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RVUVSWUNUUkwgLSBpZD0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT5pZCk7CisKKwkJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KKwkJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAorCQkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZWxzZSB7CisJCQlpbnQgaWQgPSBjdHJsLT5pZDsKKwkJCW1lbXNldChjdHJsLCAwLCBzaXplb2YoKmN0cmwpKTsKKwkJCWN0cmwtPmlkID0gaWQ7CisJCX0KKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkJyaWdodG5lc3MiLCBzaXplb2YoY3RybC0+bmFtZSktMSk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkNvbnRyYXN0Iiwgc2l6ZW9mKGN0cmwtPm5hbWUpLTEpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIlNhdHVyYXRpb24iLCBzaXplb2YoY3RybC0+bmFtZSktMSk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJIdWUiLCBzaXplb2YoY3RybC0+bmFtZSktMSk7CisJCQlicmVhazsKKwkJfQorCisJCWN0cmwtPm1pbmltdW0gPSAwOworCQljdHJsLT5tYXhpbXVtID0gNjU1MzU7CisJCWN0cmwtPnN0ZXAgPSAxOworCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMzI3Njg7CisJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19HX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0NUUkwgLSBpZD0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT5pZCk7CisKKwkJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KKwkJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAorCQkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJY3RybC0+dmFsdWUgPSB6ci0+YnJpZ2h0bmVzczsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJY3RybC0+dmFsdWUgPSB6ci0+Y29udHJhc3Q7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJY3RybC0+dmFsdWUgPSB6ci0+c2F0dXJhdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWN0cmwtPnZhbHVlID0genItPmh1ZTsKKwkJCWJyZWFrOworCQl9CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19TX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0OworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX0NUUkwgLSBpZD0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT5pZCk7CisKKwkJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KKwkJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAorCQkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gNjU1MzUpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX1NfQ1RSTCAtIGludmFsaWQgdmFsdWUgJWQgZm9yIGlkPSVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT52YWx1ZSwgY3RybC0+aWQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJenItPmJyaWdodG5lc3MgPSBjdHJsLT52YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJenItPmNvbnRyYXN0ID0gY3RybC0+dmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJenItPnNhdHVyYXRpb24gPSBjdHJsLT52YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCXpyLT5odWUgPSBjdHJsLT52YWx1ZTsKKwkJCWJyZWFrOworCQl9CisJCXBpY3QuYnJpZ2h0bmVzcyA9IHpyLT5icmlnaHRuZXNzOworCQlwaWN0LmNvbnRyYXN0ID0genItPmNvbnRyYXN0OworCQlwaWN0LmNvbG91ciA9IHpyLT5zYXR1cmF0aW9uOworCQlwaWN0Lmh1ZSA9IHpyLT5odWU7CisKKwkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9QSUNUVVJFLCAmcGljdCk7CisKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX0VOVU1TVEQ6CisJeworCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqc3RkID0gYXJnOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNU1REIC0gaW5kZXg9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgc3RkLT5pbmRleCk7CisKKwkJaWYgKHN0ZC0+aW5kZXggPCAwIHx8IHN0ZC0+aW5kZXggPj0gKHpyLT5jYXJkLm5vcm1zICsgMSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZWxzZSB7CisJCQlpbnQgaWQgPSBzdGQtPmluZGV4OworCQkJbWVtc2V0KHN0ZCwgMCwgc2l6ZW9mKCpzdGQpKTsKKwkJCXN0ZC0+aW5kZXggPSBpZDsKKwkJfQorCisJCWlmIChzdGQtPmluZGV4ID09IHpyLT5jYXJkLm5vcm1zKSB7CisJCQkvKiBpZiB3ZSBoYXZlIGF1dG9kZXRlY3QsIC4uLiAqLworCQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSBjYXBzOworCQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9DQVBBQklMSVRJRVMsCisJCQkJCSZjYXBzKTsKKwkJCWlmIChjYXBzLmZsYWdzICYgVklERU9fREVDT0RFUl9BVVRPKSB7CisJCQkJc3RkLT5pZCA9IFY0TDJfU1REX0FMTDsKKwkJCQlzdHJuY3B5KHN0ZC0+bmFtZSwgIkF1dG9kZXRlY3QiLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0gZWxzZQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXN3aXRjaCAoc3RkLT5pbmRleCkgeworCQljYXNlIDA6CisJCQlzdGQtPmlkID0gVjRMMl9TVERfUEFMOworCQkJc3RybmNweShzdGQtPm5hbWUsICJQQUwiLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKKwkJCXN0ZC0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTsKKwkJCXN0ZC0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAyNTsKKwkJCXN0ZC0+ZnJhbWVsaW5lcyA9IHpyLT5jYXJkLnR2blswXS0+SHQ7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJc3RkLT5pZCA9IFY0TDJfU1REX05UU0M7CisJCQlzdHJuY3B5KHN0ZC0+bmFtZSwgIk5UU0MiLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKKwkJCXN0ZC0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTAwMTsKKwkJCXN0ZC0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAzMDAwMDsKKwkJCXN0ZC0+ZnJhbWVsaW5lcyA9IHpyLT5jYXJkLnR2blsxXS0+SHQ7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJc3RkLT5pZCA9IFY0TDJfU1REX1NFQ0FNOworCQkJc3RybmNweShzdGQtPm5hbWUsICJTRUNBTSIsIHNpemVvZihzdGQtPm5hbWUpLTEpOworCQkJc3RkLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxOworCQkJc3RkLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9IDI1OworCQkJc3RkLT5mcmFtZWxpbmVzID0genItPmNhcmQudHZuWzJdLT5IdDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX0dfU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKKwkJaW50IG5vcm07CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfU1REXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlub3JtID0genItPm5vcm07CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXN3aXRjaCAobm9ybSkgeworCQljYXNlIFZJREVPX01PREVfUEFMOgorCQkJKnN0ZCA9IFY0TDJfU1REX1BBTDsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPX01PREVfTlRTQzoKKwkJCSpzdGQgPSBWNEwyX1NURF9OVFNDOworCQkJYnJlYWs7CisJCWNhc2UgVklERU9fTU9ERV9TRUNBTToKKwkJCSpzdGQgPSBWNEwyX1NURF9TRUNBTTsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX1NfU1REOgorCXsKKwkJaW50IG5vcm0gPSAtMSwgcmVzID0gMDsKKwkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19TVEQgLSBub3JtPTB4JWxseFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCAodW5zaWduZWQgbG9uZyBsb25nKSpzdGQpOworCisJCWlmICgoKnN0ZCAmIFY0TDJfU1REX1BBTCkgJiYgISgqc3RkICYgflY0TDJfU1REX1BBTCkpCisJCQlub3JtID0gVklERU9fTU9ERV9QQUw7CisJCWVsc2UgaWYgKCgqc3RkICYgVjRMMl9TVERfTlRTQykgJiYgISgqc3RkICYgflY0TDJfU1REX05UU0MpKQorCQkJbm9ybSA9IFZJREVPX01PREVfTlRTQzsKKwkJZWxzZSBpZiAoKCpzdGQgJiBWNEwyX1NURF9TRUNBTSkgJiYgISgqc3RkICYgflY0TDJfU1REX1NFQ0FNKSkKKwkJCW5vcm0gPSBWSURFT19NT0RFX1NFQ0FNOworCQllbHNlIGlmICgqc3RkID09IFY0TDJfU1REX0FMTCkKKwkJCW5vcm0gPSBWSURFT19NT0RFX0FVVE87CisJCWVsc2UgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfU19TVEQgLSBpbnZhbGlkIG5vcm0gMHglbGx4XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCAodW5zaWduZWQgbG9uZyBsb25nKSpzdGQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCWlmICgocmVzID0gem9yYW5fc2V0X25vcm0oenIsIG5vcm0pKSkKKwkJCWdvdG8gc3N0ZF91bmxvY2tfYW5kX3JldHVybjsKKworCQlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7CisJc3N0ZF91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKKwl7CisJCXN0cnVjdCB2NGwyX2lucHV0ICppbnAgPSBhcmc7CisJCWludCBzdGF0dXM7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0VOVU1JTlBVVCAtIGluZGV4PSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGlucC0+aW5kZXgpOworCisJCWlmIChpbnAtPmluZGV4IDwgMCB8fCBpbnAtPmluZGV4ID49IHpyLT5jYXJkLmlucHV0cykKKwkJCXJldHVybiAtRUlOVkFMOworCQllbHNlIHsKKwkJCWludCBpZCA9IGlucC0+aW5kZXg7CisJCQltZW1zZXQoaW5wLCAwLCBzaXplb2YoKmlucCkpOworCQkJaW5wLT5pbmRleCA9IGlkOworCQl9CisKKwkJc3RybmNweShpbnAtPm5hbWUsIHpyLT5jYXJkLmlucHV0W2lucC0+aW5kZXhdLm5hbWUsCisJCQlzaXplb2YoaW5wLT5uYW1lKSAtIDEpOworCQlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCQlpbnAtPnN0ZCA9IFY0TDJfU1REX0FMTDsKKworCQkvKiBHZXQgc3RhdHVzIG9mIHZpZGVvIGRlY29kZXIgKi8KKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX1NUQVRVUywgJnN0YXR1cyk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCWlmICghKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpKSB7CisJCQlpbnAtPnN0YXR1cyB8PSBWNEwyX0lOX1NUX05PX1BPV0VSOworCQkJaW5wLT5zdGF0dXMgfD0gVjRMMl9JTl9TVF9OT19TSUdOQUw7CisJCX0KKwkJaWYgKCEoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfQ09MT1IpKQorCQkJaW5wLT5zdGF0dXMgfD0gVjRMMl9JTl9TVF9OT19DT0xPUjsKKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfR19JTlBVVDoKKwl7CisJCWludCAqaW5wdXQgPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfSU5QVVRcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCSppbnB1dCA9IHpyLT5pbnB1dDsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX1NfSU5QVVQ6CisJeworCQlpbnQgKmlucHV0ID0gYXJnLCByZXMgPSAwOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX0lOUFVUIC0gaW5wdXQ9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgKmlucHV0KTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCWlmICgocmVzID0gem9yYW5fc2V0X2lucHV0KHpyLCAqaW5wdXQpKSkKKwkJCWdvdG8gc2lucHV0X3VubG9ja19hbmRfcmV0dXJuOworCisJCS8qIE1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCisJCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKKwlzaW5wdXRfdW5sb2NrX2FuZF9yZXR1cm46CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19FTlVNT1VUUFVUOgorCXsKKwkJc3RydWN0IHY0bDJfb3V0cHV0ICpvdXRwID0gYXJnOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNT1VUUFVUIC0gaW5kZXg9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgb3V0cC0+aW5kZXgpOworCisJCWlmIChvdXRwLT5pbmRleCAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWVtc2V0KG91dHAsIDAsIHNpemVvZigqb3V0cCkpOworCQlvdXRwLT5pbmRleCA9IDA7CisJCW91dHAtPnR5cGUgPSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPR1ZHQU9WRVJMQVk7CisJCXN0cm5jcHkob3V0cC0+bmFtZSwgIkF1dG9kZXRlY3QiLCBzaXplb2Yob3V0cC0+bmFtZSktMSk7CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX0dfT1VUUFVUOgorCXsKKwkJaW50ICpvdXRwdXQgPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfT1VUUFVUXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkJKm91dHB1dCA9IDA7CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX1NfT1VUUFVUOgorCXsKKwkJaW50ICpvdXRwdXQgPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NfT1VUUFVUIC0gb3V0cHV0PSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksICpvdXRwdXQpOworCisJCWlmICgqb3V0cHV0ICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJCS8qIGNyb3BwaW5nIChzdWItZnJhbWUgY2FwdHVyZSkgKi8KKwljYXNlIFZJRElPQ19DUk9QQ0FQOgorCXsKKwkJc3RydWN0IHY0bDJfY3JvcGNhcCAqY3JvcGNhcCA9IGFyZzsKKwkJaW50IHR5cGUgPSBjcm9wY2FwLT50eXBlLCByZXMgPSAwOworCisJCWRwcmludGsoMywgS0VSTl9FUlIgIiVzOiBWSURJT0NfQ1JPUENBUCAtIHR5cGU9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgY3JvcGNhcC0+dHlwZSk7CisKKwkJbWVtc2V0KGNyb3BjYXAsIDAsIHNpemVvZigqY3JvcGNhcCkpOworCQljcm9wY2FwLT50eXBlID0gdHlwZTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJaWYgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKKwkJICAgIChjcm9wY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCQkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19DUk9QQ0FQIC0gc3ViY2FwdHVyZSBvbmx5IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBjYXB0dXJlXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCQlnb3RvIGNyb3BjYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQljcm9wY2FwLT5ib3VuZHMudG9wID0gY3JvcGNhcC0+Ym91bmRzLmxlZnQgPSAwOworCQljcm9wY2FwLT5ib3VuZHMud2lkdGggPSBCVVpfTUFYX1dJRFRIOworCQljcm9wY2FwLT5ib3VuZHMuaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7CisJCWNyb3BjYXAtPmRlZnJlY3QudG9wID0gY3JvcGNhcC0+ZGVmcmVjdC5sZWZ0ID0gMDsKKwkJY3JvcGNhcC0+ZGVmcmVjdC53aWR0aCA9IEJVWl9NSU5fV0lEVEg7CisJCWNyb3BjYXAtPmRlZnJlY3QuaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7CisJY3JvcGNhcF91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX0dfQ1JPUDoKKwl7CisJCXN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AgPSBhcmc7CisJCWludCB0eXBlID0gY3JvcC0+dHlwZSwgcmVzID0gMDsKKworCQlkcHJpbnRrKDMsIEtFUk5fRVJSICIlczogVklESU9DX0dfQ1JPUCAtIHR5cGU9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgY3JvcC0+dHlwZSk7CisKKwkJbWVtc2V0KGNyb3AsIDAsIHNpemVvZigqY3JvcCkpOworCQljcm9wLT50eXBlID0gdHlwZTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKKwkJICAgIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCQkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19HX0NST1AgLSBzdWJjYXB0dXJlIG9ubHkgc3VwcG9ydGVkIGZvciBjb21wcmVzc2VkIGNhcHR1cmVcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gZ2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQljcm9wLT5jLnRvcCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3k7CisJCWNyb3AtPmMubGVmdCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3g7CisJCWNyb3AtPmMud2lkdGggPSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aDsKKwkJY3JvcC0+Yy5oZWlnaHQgPSBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQ7CisKKwlnY3JvcF91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfU19DUk9QOgorCXsKKwkJc3RydWN0IHY0bDJfY3JvcCAqY3JvcCA9IGFyZzsKKwkJaW50IHJlcyA9IDA7CisKKwkJc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOworCisJCWRwcmludGsoMywKKwkJCUtFUk5fRVJSCisJCQkiJXM6IFZJRElPQ19TX0NST1AgLSB0eXBlPSVkLCB4PSVkLHk9JWQsdz0lZCxoPSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGNyb3AtPnR5cGUsIGNyb3AtPmMubGVmdCwgY3JvcC0+Yy50b3AsCisJCQljcm9wLT5jLndpZHRoLCBjcm9wLT5jLmhlaWdodCk7CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX1NfQ1JPUCAtIGNhbm5vdCBjaGFuZ2Ugc2V0dGluZ3Mgd2hpbGUgYWN0aXZlXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJlcyA9IC1FQlVTWTsKKwkJCWdvdG8gc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgorCQkgICAgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCSAgICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX0dfQ1JPUCAtIHN1YmNhcHR1cmUgb25seSBzdXBwb3J0ZWQgZm9yIGNvbXByZXNzZWQgY2FwdHVyZVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBzY3JvcF91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCS8qIG1vdmUgaW50byBhIGZvcm0gdGhhdCB3ZSB1bmRlcnN0YW5kICovCisJCXNldHRpbmdzLmltZ194ID0gY3JvcC0+Yy5sZWZ0OworCQlzZXR0aW5ncy5pbWdfeSA9IGNyb3AtPmMudG9wOworCQlzZXR0aW5ncy5pbWdfd2lkdGggPSBjcm9wLT5jLndpZHRoOworCQlzZXR0aW5ncy5pbWdfaGVpZ2h0ID0gY3JvcC0+Yy5oZWlnaHQ7CisKKwkJLyogY2hlY2sgdmFsaWRpdHkgKi8KKwkJaWYgKChyZXMgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncykpKQorCQkJZ290byBzY3JvcF91bmxvY2tfYW5kX3JldHVybjsKKworCQkvKiBhY2NlcHQgKi8KKwkJZmgtPmpwZ19zZXR0aW5ncyA9IHNldHRpbmdzOworCisJc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm46CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19HX0pQRUdDT01QOgorCXsKKwkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwYXJhbXMgPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfSlBFR0NPTVBcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisKKwkJbWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcGFyYW1zLT5xdWFsaXR5ID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5xdWFsaXR5OworCQlwYXJhbXMtPkFQUG4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUG47CisJCW1lbWNweShwYXJhbXMtPkFQUF9kYXRhLAorCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSwKKwkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbik7CisJCXBhcmFtcy0+QVBQX2xlbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbjsKKwkJbWVtY3B5KHBhcmFtcy0+Q09NX2RhdGEsCisJCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9kYXRhLAorCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuKTsKKwkJcGFyYW1zLT5DT01fbGVuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuOworCQlwYXJhbXMtPmpwZWdfbWFya2VycyA9CisJCSAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLmpwZWdfbWFya2VyczsKKworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfU19KUEVHQ09NUDoKKwl7CisJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcGFyYW1zID0gYXJnOworCQlpbnQgcmVzID0gMDsKKworCQlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7CisKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiBWSURJT0NfU19KUEVHQ09NUCAtIHF1YWxpdHk9JWQsIEFQUE49JWQsIEFQUF9sZW49JWQsIENPTV9sZW49JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgcGFyYW1zLT5xdWFsaXR5LCBwYXJhbXMtPkFQUG4sCisJCQlwYXJhbXMtPkFQUF9sZW4sIHBhcmFtcy0+Q09NX2xlbik7CisKKwkJc2V0dGluZ3MuanBnX2NvbXAgPSAqcGFyYW1zOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFIHx8CisJCSAgICBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX1dBUk5JTkcKKwkJCQkiJXM6IFZJRElPQ19TX0pQRUdDT01QIGNhbGxlZCB3aGlsZSBpbiBwbGF5YmFjay9jYXB0dXJlIG1vZGVcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmVzID0gLUVCVVNZOworCQkJZ290byBzanBlZ2NfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQlpZiAoKHJlcyA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzKSkpCisJCQlnb3RvIHNqcGVnY191bmxvY2tfYW5kX3JldHVybjsKKwkJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKQorCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0KKwkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPmpwZ19zZXR0aW5ncyk7CisJCWZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAgPSAqcGFyYW1zID0gc2V0dGluZ3MuanBnX2NvbXA7CisJc2pwZWdjX3VubG9ja19hbmRfcmV0dXJuOgorCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfUVVFUllTVEQ6CS8qIHdoeSBpcyB0aGlzIHVzZWZ1bD8gKi8KKwl7CisJCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7CisKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RVUVSWV9TVEQgLSBzdGQ9MHglbGx4XG4iLAorCQkJWlJfREVWTkFNRSh6ciksICh1bnNpZ25lZCBsb25nIGxvbmcpKnN0ZCk7CisKKwkJaWYgKCpzdGQgPT0gVjRMMl9TVERfQUxMIHx8ICpzdGQgPT0gVjRMMl9TVERfTlRTQyB8fAorCQkgICAgKnN0ZCA9PSBWNEwyX1NURF9QQUwgfHwgKCpzdGQgPT0gVjRMMl9TVERfU0VDQU0gJiYKKwkJCQkJICAgICB6ci0+Y2FyZC5ub3JtcyA9PSAzKSkgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfVFJZX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOworCQlpbnQgcmVzID0gMDsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfVFJZX0ZNVCAtIHR5cGU9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKKworCQlzd2l0Y2ggKGZtdC0+dHlwZSkgeworCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKKwkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQkJaWYgKGZtdC0+Zm10Lndpbi53LndpZHRoID4gQlVaX01BWF9XSURUSCkKKwkJCQlmbXQtPmZtdC53aW4udy53aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJCQlpZiAoZm10LT5mbXQud2luLncud2lkdGggPCBCVVpfTUlOX1dJRFRIKQorCQkJCWZtdC0+Zm10Lndpbi53LndpZHRoID0gQlVaX01JTl9XSURUSDsKKwkJCWlmIChmbXQtPmZtdC53aW4udy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKKwkJCQlmbXQtPmZtdC53aW4udy5oZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKKwkJCWlmIChmbXQtPmZtdC53aW4udy5oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCkKKwkJCQlmbXQtPmZtdC53aW4udy5oZWlnaHQgPSBCVVpfTUlOX0hFSUdIVDsKKworCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQlicmVhazsKKworCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKKwkJCWlmIChmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID4gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCQlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykgeworCQkJCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKKworCQkJCS8qIHdlIGFjdHVhbGx5IG5lZWQgdG8gc2V0ICdyZWFsJyBwYXJhbWV0ZXJzIG5vdyAqLworCQkJCWlmICgoZm10LT5mbXQucGl4LmhlaWdodCAqIDIpID4KKwkJCQkgICAgQlVaX01BWF9IRUlHSFQpCisJCQkJCXNldHRpbmdzLlRtcERjbSA9IDE7CisJCQkJZWxzZQorCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAyOworCQkJCXNldHRpbmdzLmRlY2ltYXRpb24gPSAwOworCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDw9CisJCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvIDIpCisJCQkJCXNldHRpbmdzLlZlckRjbSA9IDI7CisJCQkJZWxzZQorCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAxOworCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KKwkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyA0KQorCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSA0OworCQkJCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PQorCQkJCQkgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyAyKQorCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSAyOworCQkJCWVsc2UKKwkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMTsKKwkJCQlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCisJCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMjsKKwkJCQllbHNlCisJCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMTsKKworCQkJCS8qIGNoZWNrICovCisJCQkJaWYgKChyZXMgPQorCQkJCSAgICAgem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLAorCQkJCQkJCSAgICAgICZzZXR0aW5ncykpKQorCQkJCQlnb3RvIHRyeWZtdF91bmxvY2tfYW5kX3JldHVybjsKKworCQkJCS8qIHRlbGwgdGhlIHVzZXIgd2hhdCB3ZSBhY3R1YWxseSBkaWQgKi8KKwkJCQlmbXQtPmZtdC5waXgud2lkdGggPQorCQkJCSAgICBzZXR0aW5ncy5pbWdfd2lkdGggLyBzZXR0aW5ncy5Ib3JEY207CisJCQkJZm10LT5mbXQucGl4LmhlaWdodCA9CisJCQkJICAgIHNldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KKwkJCQkgICAgKHNldHRpbmdzLlRtcERjbSAqIHNldHRpbmdzLlZlckRjbSk7CisJCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQorCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQorCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCisJCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9UQiA6CisJCQkJCSAgICAgVjRMMl9GSUVMRF9TRVFfQlQpOworCQkJCWVsc2UKKwkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KKwkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgorCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOgorCQkJCQkgICAgIFY0TDJfRklFTERfQk9UVE9NKTsKKworCQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPQorCQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmc2V0dGluZ3MpOworCQkJfSBlbHNlIGlmIChmbXQtPnR5cGUgPT0KKwkJCQkgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJCQlpbnQgaTsKKworCQkJCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKQorCQkJCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MgPT0KKwkJCQkJICAgIGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCkKKwkJCQkJCWJyZWFrOworCQkJCWlmIChpID09IE5VTV9GT1JNQVRTKSB7CisJCQkJCXJlcyA9IC1FSU5WQUw7CisJCQkJCWdvdG8gdHJ5Zm10X3VubG9ja19hbmRfcmV0dXJuOworCQkJCX0KKworCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPiBCVVpfTUFYX1dJRFRIKQorCQkJCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUFYX1dJRFRIOworCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPCBCVVpfTUlOX1dJRFRIKQorCQkJCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUlOX1dJRFRIOworCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCisJCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQorCQkJCQkgICAgQlVaX01BWF9IRUlHSFQ7CisJCQkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCkKKwkJCQkJZm10LT5mbXQucGl4LmhlaWdodCA9CisJCQkJCSAgICBCVVpfTUlOX0hFSUdIVDsKKwkJCX0gZWxzZSB7CisJCQkJcmVzID0gLUVJTlZBTDsKKwkJCQlnb3RvIHRyeWZtdF91bmxvY2tfYW5kX3JldHVybjsKKwkJCX0KKwkJdHJ5Zm10X3VubG9ja19hbmRfcmV0dXJuOgorCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJCXJldHVybiByZXM7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogVU5LTk9XTiBpb2N0bCBjbWQ6IDB4JXhcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgY21kKTsKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwkJYnJlYWs7CisKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAorem9yYW5faW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJICAgICBzdHJ1Y3QgZmlsZSAgKmZpbGUsCisJICAgICB1bnNpZ25lZCBpbnQgIGNtZCwKKwkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHpvcmFuX2RvX2lvY3RsKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorem9yYW5fcG9sbCAoc3RydWN0IGZpbGUgKmZpbGUsCisJICAgIHBvbGxfdGFibGUgICp3YWl0KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzID0gMCwgZnJhbWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIHdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGJ1ZmZlcnMgYXJlIHJlYWR5IHRvIGJlIHN5bmNlZCBvbgorCSAqICh3L28gd2FpdHMgLSBPX05PTkJMT0NLKSBoZXJlCisJICogaWYgcmVhZHkgZm9yIHJlYWQgKHN5bmMpLCByZXR1cm4gUE9MTElOfFBPTExSRE5PUk0sCisJICogaWYgcmVhZHkgZm9yIHdyaXRlIChzeW5jKSwgcmV0dXJuIFBPTExPVVR8UE9MTFdSTk9STSwKKwkgKiBpZiBlcnJvciwgcmV0dXJuIFBPTExFUlIsCisJICogaWYgbm8gYnVmZmVycyBxdWV1ZWQgb3Igc28sIHJldHVybiBQT0xMTlZBTAorCSAqLworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKKwljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKKwkJcG9sbF93YWl0KGZpbGUsICZ6ci0+djRsX2NhcHEsIHdhaXQpOworCQlmcmFtZSA9IHpyLT52NGxfcGVuZFt6ci0+djRsX3N5bmNfdGFpbCAmIFY0TF9NQVNLX0ZSQU1FXTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJCWRwcmludGsoMywKKwkJCUtFUk5fREVCVUcKKwkJCSIlczogJXMoKSByYXcgLSBhY3RpdmU9JWMsIHN5bmNfdGFpbD0lbHUvJWMsIHBlbmRfdGFpbD0lbHUsIHBlbmRfaGVhZD0lbHVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sCisJCQkiRkFMIltmaC0+djRsX2J1ZmZlcnMuYWN0aXZlXSwgenItPnY0bF9zeW5jX3RhaWwsCisJCQkiVVBNRCJbenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGVdLAorCQkJenItPnY0bF9wZW5kX3RhaWwsIHpyLT52NGxfcGVuZF9oZWFkKTsKKwkJLyogUHJvY2VzcyBpcyB0aGUgb25lIGNhcHR1cmluZz8gKi8KKwkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgorCQkgICAgLyogQnVmZmVyIHJlYWR5IHRvIERRQlVGPyAqLworCQkgICAgenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUpCisJCQlyZXMgPSBQT0xMSU4gfCBQT0xMUkROT1JNOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKworCQlicmVhazsKKworCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCQlwb2xsX3dhaXQoZmlsZSwgJnpyLT5qcGdfY2FwcSwgd2FpdCk7CisJCWZyYW1lID0genItPmpwZ19wZW5kW3pyLT5qcGdfcXVlX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQlkcHJpbnRrKDMsCisJCQlLRVJOX0RFQlVHCisJCQkiJXM6ICVzKCkganBnIC0gYWN0aXZlPSVjLCBxdWVfdGFpbD0lbHUvJWMsIHF1ZV9oZWFkPSVsdSwgZG1hPSVsdS8lbHVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sCisJCQkiRkFMIltmaC0+anBnX2J1ZmZlcnMuYWN0aXZlXSwgenItPmpwZ19xdWVfdGFpbCwKKwkJCSJVUE1EIlt6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZV0sCisJCQl6ci0+anBnX3F1ZV9oZWFkLCB6ci0+anBnX2RtYV90YWlsLCB6ci0+anBnX2RtYV9oZWFkKTsKKwkJaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgorCQkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUpIHsKKwkJCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1JFQykKKwkJCQlyZXMgPSBQT0xMSU4gfCBQT0xMUkROT1JNOworCQkJZWxzZQorCQkJCXJlcyA9IFBPTExPVVQgfCBQT0xMV1JOT1JNOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogem9yYW5fcG9sbCgpIC0gaW50ZXJuYWwgZXJyb3IsIHVua25vd24gbWFwX21vZGU9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgZmgtPm1hcF9tb2RlKTsKKwkJcmVzID0gUE9MTE5WQUw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCisKKy8qCisgKiBUaGlzIG1hcHMgdGhlIGJ1ZmZlcnMgdG8gdXNlciBzcGFjZS4KKyAqCisgKiBEZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIGZoLT5tYXBfbW9kZQorICogdGhlIFY0TCBvciB0aGUgTUpQRUcgYnVmZmVycyBhcmUgbWFwcGVkCisgKiBwZXIgYnVmZmVyIG9yIGFsbCB0b2dldGhlcgorICoKKyAqIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGNvbm5lY3QgdG8gc29tZQorICogdW5tYXAgc2lnbmFsIGV2ZW50IHRvIHVubWFwIHRoZSBkZS1hbGxvY2F0ZQorICogdGhlIGJ1ZmZlciBhY2NvcmRpbmdseSAoem9yYW5fdm1fY2xvc2UoKSkKKyAqLworCitzdGF0aWMgdm9pZAorem9yYW5fdm1fb3BlbiAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHpvcmFuX21hcHBpbmcgKm1hcCA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJbWFwLT5jb3VudCsrOworfQorCitzdGF0aWMgdm9pZAorem9yYW5fdm1fY2xvc2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCB6b3Jhbl9tYXBwaW5nICptYXAgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IG1hcC0+ZmlsZTsKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IGk7CisKKwltYXAtPmNvdW50LS07CisJaWYgKG1hcC0+Y291bnQgPT0gMCkgeworCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgeworCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6CisJCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisKKwkJCWRwcmludGsoMywgS0VSTl9JTkZPICIlczogbXVubWFwKE1KUEVHKVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgeworCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9PSBtYXApIHsKKwkJCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPQorCQkJCQkgICAgTlVMTDsKKwkJCQl9CisJCQl9CisJCQlrZnJlZShtYXApOworCisJCQlmb3IgKGkgPSAwOyBpIDwgZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspCisJCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0ubWFwKQorCQkJCQlicmVhazsKKwkJCWlmIChpID09IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycykgeworCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJCQkJanBnX3FidWYoZmlsZSwgLTEsIHpyLT5jb2RlY19tb2RlKTsKKwkJCQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJCQkJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPQorCQkJCQkgICAgZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9CisJCQkJCSAgICBaT1JBTl9GUkVFOworCQkJCX0KKwkJCQkvL2pwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7CisJCQkJZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJCQkJZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMTsKKworCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKKworCQkJZHByaW50aygzLCBLRVJOX0lORk8gIiVzOiBtdW5tYXAoVjRMKVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgeworCQkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9PSBtYXApIHsKKwkJCQkJLyogdW5xdWV1ZS91bm1hcCAqLworCQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9CisJCQkJCSAgICBOVUxMOworCQkJCX0KKwkJCX0KKwkJCWtmcmVlKG1hcCk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykKKwkJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXApCisJCQkJCWJyZWFrOworCQkJaWYgKGkgPT0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzKSB7CisJCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCQkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7CisJCQkJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQkJCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0KKwkJCQkJICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPQorCQkJCQkgICAgWk9SQU5fRlJFRTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJCQkJfQorCQkJCS8vdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKKwkJCQlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwkJCQlmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAxOworCisJCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQl9CisKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IG11bm1hcCgpIC0gaW50ZXJuYWwgZXJyb3IgLSB1bmtub3duIG1hcCBtb2RlICVkXG4iLAorCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOworCQkJYnJlYWs7CisKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB6b3Jhbl92bV9vcHMgPSB7CisJLm9wZW4gPSB6b3Jhbl92bV9vcGVuLAorCS5jbG9zZSA9IHpvcmFuX3ZtX2Nsb3NlLAorfTsKKworc3RhdGljIGludAorem9yYW5fbW1hcCAoc3RydWN0IGZpbGUgICAgICAgICAgICpmaWxlLAorCSAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJdW5zaWduZWQgbG9uZyBzaXplID0gKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJaW50IGksIGo7CisJdW5zaWduZWQgbG9uZyBwYWdlLCBzdGFydCA9IHZtYS0+dm1fc3RhcnQsIHRvZG8sIHBvcywgZnJhZ2xlbjsKKwlpbnQgZmlyc3QsIGxhc3Q7CisJc3RydWN0IHpvcmFuX21hcHBpbmcgKm1hcDsKKwlpbnQgcmVzID0gMDsKKworCWRwcmludGsoMywKKwkJS0VSTl9JTkZPICIlczogbW1hcCglcykgb2YgMHglMDhseC0weCUwOGx4IChzaXplPSVsdSlcbiIsCisJCVpSX0RFVk5BTUUoenIpLAorCQlmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXID8gIlY0TCIgOiAiTUpQRUciLAorCQl2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgc2l6ZSk7CisKKwlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSB8fCAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSB8fAorCSAgICAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogbW1hcCgpIC0gbm8gTUFQX1NIQVJFRC9QUk9UX3tSRUFELFdSSVRFfSBnaXZlblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKKworCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCisJCS8qIGxvY2sgKi8KKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCS8qIE1hcCB0aGUgTUpQRUcgYnVmZmVycyAqLworCQlpZiAoIWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogem9yYW5fbW1hcChNSlBFRykgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJlcyA9IC1FTk9NRU07CisJCQlnb3RvIGpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJZmlyc3QgPSBvZmZzZXQgLyBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCWxhc3QgPSBmaXJzdCAtIDEgKyBzaXplIC8gZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOworCQlpZiAob2Zmc2V0ICUgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplICE9IDAgfHwKKwkJICAgIHNpemUgJSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgIT0gMCB8fCBmaXJzdCA8IDAgfHwKKwkJICAgIGxhc3QgPCAwIHx8IGZpcnN0ID49IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyB8fAorCQkgICAgbGFzdCA+PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogbW1hcChNSlBFRykgLSBvZmZzZXQ9JWx1IG9yIHNpemU9JWx1IGludmFsaWQgZm9yIGJ1ZnNpemU9JWQgYW5kIG51bWJ1ZnM9JWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIG9mZnNldCwgc2l6ZSwKKwkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUsCisJCQkJZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzKTsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCQlnb3RvIGpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgeworCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0ubWFwKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IG1tYXAoTUpQRUcpIC0gYnVmZmVyICVkIGFscmVhZHkgbWFwcGVkXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7CisJCQkJcmVzID0gLUVCVVNZOworCQkJCWdvdG8ganBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisJCX0KKworCQkvKiBtYXAgdGhlc2UgYnVmZmVycyAodjRsX2J1ZmZlcnNbaV0pICovCisJCW1hcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9tYXBwaW5nKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbWFwKSB7CisJCQlyZXMgPSAtRU5PTUVNOworCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQltYXAtPmZpbGUgPSBmaWxlOworCQltYXAtPmNvdW50ID0gMTsKKworCQl2bWEtPnZtX29wcyA9ICZ6b3Jhbl92bV9vcHM7CisJCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVEVYUEFORDsKKwkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBtYXA7CisKKwkJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7CisJCQlmb3IgKGogPSAwOworCQkJICAgICBqIDwgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplIC8gUEFHRV9TSVpFOworCQkJICAgICBqKyspIHsKKwkJCQlmcmFnbGVuID0KKwkJCQkgICAgKGxlMzJfdG9fY3B1KGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uCisJCQkJICAgICBmcmFnX3RhYlsyICogaiArIDFdKSAmIH4xKSA8PCAxOworCQkJCXRvZG8gPSBzaXplOworCQkJCWlmICh0b2RvID4gZnJhZ2xlbikKKwkJCQkJdG9kbyA9IGZyYWdsZW47CisJCQkJcG9zID0KKwkJCQkgICAgbGUzMl90b19jcHUoZmgtPmpwZ19idWZmZXJzLgorCQkJCSAgICBidWZmZXJbaV0uZnJhZ190YWJbMiAqIGpdKTsKKwkJCQkvKiBzaG91bGQganVzdCBiZSBwb3Mgb24gaTM4NiAqLworCQkJCXBhZ2UgPSB2aXJ0X3RvX3BoeXMoYnVzX3RvX3ZpcnQocG9zKSkKKwkJCQkJCQkJPj4gUEFHRV9TSElGVDsKKwkJCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsCisJCQkJCQkJdG9kbywgUEFHRV9TSEFSRUQpKSB7CisJCQkJCWRwcmludGsoMSwKKwkJCQkJCUtFUk5fRVJSCisJCQkJCQkiJXM6IHpvcmFuX21tYXAoVjRMKSAtIHJlbWFwX3Bmbl9yYW5nZSBmYWlsZWRcbiIsCisJCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJCXJlcyA9IC1FQUdBSU47CisJCQkJCWdvdG8ganBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJCQkJfQorCQkJCXNpemUgLT0gdG9kbzsKKwkJCQlzdGFydCArPSB0b2RvOworCQkJCWlmIChzaXplID09IDApCisJCQkJCWJyZWFrOworCQkJCWlmIChsZTMyX3RvX2NwdShmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLgorCQkJCSAgICBmcmFnX3RhYlsyICogaiArIDFdKSAmIDEpCisJCQkJCWJyZWFrOwkvKiB3YXMgbGFzdCBmcmFnbWVudCAqLworCQkJfQorCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPSBtYXA7CisJCQlpZiAoc2l6ZSA9PSAwKQorCQkJCWJyZWFrOworCisJCX0KKwlqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJYnJlYWs7CisKKwljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJLyogTWFwIHRoZSBWNEwgYnVmZmVycyAqLworCQlpZiAoIWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogem9yYW5fbW1hcChWNEwpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXMgPSAtRU5PTUVNOworCQkJZ290byB2NGxfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCWZpcnN0ID0gb2Zmc2V0IC8gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOworCQlsYXN0ID0gZmlyc3QgLSAxICsgc2l6ZSAvIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKKwkJaWYgKG9mZnNldCAlIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8CisJCSAgICBzaXplICUgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplICE9IDAgfHwgZmlyc3QgPCAwIHx8CisJCSAgICBsYXN0IDwgMCB8fCBmaXJzdCA+PSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKKwkJICAgIGxhc3QgPj0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IG1tYXAoVjRMKSAtIG9mZnNldD0lbHUgb3Igc2l6ZT0lbHUgaW52YWxpZCBmb3IgYnVmc2l6ZT0lZCBhbmQgbnVtYnVmcz0lZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgb2Zmc2V0LCBzaXplLAorCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSwKKwkJCQlmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMpOworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKwkJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7CisJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXApIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogbW1hcChWNEwpIC0gYnVmZmVyICVkIGFscmVhZHkgbWFwcGVkXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7CisJCQkJcmVzID0gLUVCVVNZOworCQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisJCX0KKworCQkvKiBtYXAgdGhlc2UgYnVmZmVycyAodjRsX2J1ZmZlcnNbaV0pICovCisJCW1hcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9tYXBwaW5nKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbWFwKSB7CisJCQlyZXMgPSAtRU5PTUVNOworCQkJZ290byB2NGxfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQltYXAtPmZpbGUgPSBmaWxlOworCQltYXAtPmNvdW50ID0gMTsKKworCQl2bWEtPnZtX29wcyA9ICZ6b3Jhbl92bV9vcHM7CisJCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVEVYUEFORDsKKwkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBtYXA7CisKKwkJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7CisJCQl0b2RvID0gc2l6ZTsKKwkJCWlmICh0b2RvID4gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplKQorCQkJCXRvZG8gPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCQlwYWdlID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX3BoeXM7CisJCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UgPj4gUEFHRV9TSElGVCwKKwkJCQkJCQl0b2RvLCBQQUdFX1NIQVJFRCkpIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogem9yYW5fbW1hcChWNEwpaSAtIHJlbWFwX3Bmbl9yYW5nZSBmYWlsZWRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQlyZXMgPSAtRUFHQUlOOworCQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisJCQlzaXplIC09IHRvZG87CisJCQlzdGFydCArPSB0b2RvOworCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPSBtYXA7CisJCQlpZiAoc2l6ZSA9PSAwKQorCQkJCWJyZWFrOworCQl9CisJdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm46CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogem9yYW5fbW1hcCgpIC0gaW50ZXJuYWwgZXJyb3IgLSB1bmtub3duIG1hcCBtb2RlICVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6b3Jhbl9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gem9yYW5fb3BlbiwKKwkucmVsZWFzZSA9IHpvcmFuX2Nsb3NlLAorCS5pb2N0bCA9IHpvcmFuX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAorI2VuZGlmCisJLmxsc2VlayA9IG5vX2xsc2VlaywKKwkucmVhZCA9IHpvcmFuX3JlYWQsCisJLndyaXRlID0gem9yYW5fd3JpdGUsCisJLm1tYXAgPSB6b3Jhbl9tbWFwLAorCS5wb2xsID0gem9yYW5fcG9sbCwKK307CisKK3N0cnVjdCB2aWRlb19kZXZpY2Ugem9yYW5fdGVtcGxhdGUgX19kZXZpbml0ZGF0YSA9IHsKKwkubmFtZSA9IFpPUkFOX05BTUUsCisJLmZvcHMgPSAmem9yYW5fZm9wcywKKwkucmVsZWFzZSA9ICZ6b3Jhbl92ZGV2X3JlbGVhc2UsCisJLm1pbm9yID0gLTEKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fcHJvY2ZzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX3Byb2Nmcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX3Byb2Nmcy5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX3Byb2Nmcy5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX3Byb2Nmcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9wcm9jZnMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9wcm9jZnMuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9wcm9jZnMuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDE2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwMTYuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDE2LmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjAxNi5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwMTYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjAxNi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwMTYuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDE2LmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDUwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA1MC5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNTAuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDUwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNTAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDUwLmgKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA1MC5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNTcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA1Ny5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNTcuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDU3LmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDYwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA2MC5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNjAuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDYwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNjAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDYwLmgKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2NhcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fY2FyZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjgyYmU3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fY2FyZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY3MCArMCwwIEBACi0vKgotICogWm9yYW4genIzNjA1Ny96cjM2MDY3IFBDSSBjb250cm9sbGVyIGRyaXZlciwgZm9yIHRoZQotICogUGlubmFjbGUvTWlybyBEQzEwL0RDMTArL0RDMzAvREMzMCssIElvbWVnYSBCdXosIExpbnV4Ci0gKiBNZWRpYSBMYWJzIExNTDMzL0xNTDMzUjEwLgotICoKLSAqIFRoaXMgcGFydCBoYW5kbGVzIGNhcmQtc3BlY2lmaWMgZGF0YSBhbmQgZGV0ZWN0aW9uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFNlcmd1ZWkgTWlyaWRvbm92IDxtaXJzZXZAY2ljZXNlLm14PgotICoKLSAqIEN1cnJlbnRseSBtYWludGFpbmVkIGJ5OgotICogICBSb25hbGQgQnVsdGplICAgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKiAgIExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAc2t5bmV0LmJlPgotICogICBNYWlsaW5nbGlzdCAgICAgIDxtanBlZy11c2Vyc0BsaXN0cy5zZi5uZXQ+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtLmg+Ci0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSAidmlkZW9jb2RlYy5oIgotI2luY2x1ZGUgInpvcmFuLmgiCi0jaW5jbHVkZSAiem9yYW5fY2FyZC5oIgotI2luY2x1ZGUgInpvcmFuX2RldmljZS5oIgotI2luY2x1ZGUgInpvcmFuX3Byb2Nmcy5oIgotCi1leHRlcm4gY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCB6b3Jhbl9mb3JtYXRzW107Ci0KLXN0YXRpYyBpbnQgY2FyZFtCVVpfTUFYXSA9IHsgLTEsIC0xLCAtMSwgLTEgfTsKLW1vZHVsZV9wYXJhbV9hcnJheShjYXJkLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhjYXJkLCAiVGhlIHR5cGUgb2YgY2FyZCIpOwotCi1zdGF0aWMgaW50IGVuY29kZXJbQlVaX01BWF0gPSB7IC0xLCAtMSwgLTEsIC0xIH07Ci1tb2R1bGVfcGFyYW1fYXJyYXkoZW5jb2RlciwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZW5jb2RlciwgImkyYyBUViBlbmNvZGVyIik7Ci0KLXN0YXRpYyBpbnQgZGVjb2RlcltCVVpfTUFYXSA9IHsgLTEsIC0xLCAtMSwgLTEgfTsKLW1vZHVsZV9wYXJhbV9hcnJheShkZWNvZGVyLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWNvZGVyLCAiaTJjIFRWIGRlY29kZXIiKTsKLQotLyoKLSAgIFRoZSB2aWRlbyBtZW0gYWRkcmVzcyBvZiB0aGUgdmlkZW8gY2FyZC4KLSAgIFRoZSBkcml2ZXIgaGFzIGEgbGl0dGxlIGRhdGFiYXNlIGZvciBzb21lIHZpZGVvY2FyZHMKLSAgIHRvIGRldGVybWluZSBpdCBmcm9tIHRoZXJlLiBJZiB5b3VyIHZpZGVvIGNhcmQgaXMgbm90IGluIHRoZXJlCi0gICB5b3UgaGF2ZSBlaXRoZXIgdG8gZ2l2ZSBpdCB0byB0aGUgZHJpdmVyIGFzIGEgcGFyYW1ldGVyCi0gICBvciBzZXQgaW4gaW4gYSBWSURJT0NTRkJVRiBpb2N0bAotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZpZG1lbTsJLyogZGVmYXVsdCA9IDAgLSBWaWRlbyBtZW1vcnkgYmFzZSBhZGRyZXNzICovCi1tb2R1bGVfcGFyYW0odmlkbWVtLCB1bG9uZywgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHZpZG1lbSwgIkRlZmF1bHQgdmlkZW8gbWVtb3J5IGJhc2UgYWRkcmVzcyIpOwotCi0vKgotICAgRGVmYXVsdCBpbnB1dCBhbmQgdmlkZW8gbm9ybSBhdCBzdGFydHVwIG9mIHRoZSBkcml2ZXIuCi0qLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlZmF1bHRfaW5wdXQ7CS8qIGRlZmF1bHQgMCA9IENvbXBvc2l0ZSwgMSA9IFMtVmlkZW8gKi8KLW1vZHVsZV9wYXJhbShkZWZhdWx0X2lucHV0LCB1aW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVmYXVsdF9pbnB1dCwKLQkJICJEZWZhdWx0IGlucHV0ICgwPUNvbXBvc2l0ZSwgMT1TLVZpZGVvLCAyPUludGVybmFsKSIpOwotCi1zdGF0aWMgaW50IGRlZmF1bHRfbXV4ID0gMTsJLyogNiBFeWVzIGlucHV0IHNlbGVjdGlvbiAqLwotbW9kdWxlX3BhcmFtKGRlZmF1bHRfbXV4LCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWZhdWx0X211eCwKLQkJICJEZWZhdWx0IDYgRXllcyBtdXggc2V0dGluZyAoSW5wdXQgc2VsZWN0aW9uKSIpOwotCi1zdGF0aWMgaW50IGRlZmF1bHRfbm9ybTsJLyogZGVmYXVsdCAwID0gUEFMLCAxID0gTlRTQyAyID0gU0VDQU0gKi8KLW1vZHVsZV9wYXJhbShkZWZhdWx0X25vcm0sIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfbm9ybSwgIkRlZmF1bHQgbm9ybSAoMD1QQUwsIDE9TlRTQywgMj1TRUNBTSkiKTsKLQotLyogL2Rldi92aWRlb04sIC0xIGZvciBhdXRvZGV0ZWN0ICovCi1zdGF0aWMgaW50IHZpZGVvX25yW0JVWl9NQVhdID0gey0xLCAtMSwgLTEsIC0xfTsKLW1vZHVsZV9wYXJhbV9hcnJheSh2aWRlb19uciwgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0ModmlkZW9fbnIsICJ2aWRlbyBkZXZpY2UgbnVtYmVyICgtMT1BdXRvKSIpOwotCi0vKgotICAgTnVtYmVyIGFuZCBzaXplIG9mIGdyYWIgYnVmZmVycyBmb3IgVmlkZW8gNCBMaW51eAotICAgVGhlIHZhc3QgbWFqb3JpdHkgb2YgYXBwbGljYXRpb25zIHNob3VsZCBub3QgbmVlZCBtb3JlIHRoYW4gMiwKLSAgIHRoZSB2ZXJ5IHBvcHVsYXIgQlRUViBkcml2ZXIgYWN0dWFsbHkgZG9lcyBPTkxZIGhhdmUgMi4KLSAgIFRpbWUgc2Vuc2l0aXZlIGFwcGxpY2F0aW9ucyBtaWdodCBuZWVkIG1vcmUsIHRoZSBtYXhpbXVtCi0gICBpcyBWSURFT19NQVhfRlJBTUUgKGRlZmluZWQgaW4gPGxpbnV4L3ZpZGVvZGV2Lmg+KS4KLQotICAgVGhlIHNpemUgaXMgc2V0IHNvIHRoYXQgdGhlIG1heGltdW0gcG9zc2libGUgcmVxdWVzdAotICAgY2FuIGJlIHNhdGlzZmllZC4gRGVjcmVhc2UgIGl0LCBpZiBiaWdwaHlzX2FyZWEgYWxsb2MnZAotICAgbWVtb3J5IGlzIGxvdy4gSWYgeW91IGRvbid0IGhhdmUgdGhlIGJpZ3BoeXNfYXJlYSBwYXRjaCwKLSAgIHNldCBpdCB0byAxMjggS0IuIFdpbGwgeW91IGFsbG93IG9ubHkgdG8gZ3JhYiBzbWFsbAotICAgaW1hZ2VzIHdpdGggVjRMLCBidXQgdGhhdCdzIGJldHRlciB0aGFuIG5vdGhpbmcuCi0KLSAgIHY0bF9idWZzaXplIGhhcyB0byBiZSBnaXZlbiBpbiBLQiAhCi0KLSovCi0KLWludCB2NGxfbmJ1ZnMgPSAyOwotaW50IHY0bF9idWZzaXplID0gMTI4OwkJLyogRXZlcnlib2R5IHNob3VsZCBiZSBhYmxlIHRvIHdvcmsgd2l0aCB0aGlzIHNldHRpbmcgKi8KLW1vZHVsZV9wYXJhbSh2NGxfbmJ1ZnMsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHY0bF9uYnVmcywgIk1heGltdW0gbnVtYmVyIG9mIFY0TCBidWZmZXJzIHRvIHVzZSIpOwotbW9kdWxlX3BhcmFtKHY0bF9idWZzaXplLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyh2NGxfYnVmc2l6ZSwgIk1heGltdW0gc2l6ZSBwZXIgVjRMIGJ1ZmZlciAoaW4ga0IpIik7Ci0KLWludCBqcGdfbmJ1ZnMgPSAzMjsKLWludCBqcGdfYnVmc2l6ZSA9IDUxMjsJCS8qIG1heCBzaXplIGZvciAxMDAlIHF1YWxpdHkgZnVsbC1QQUwgZnJhbWUgKi8KLW1vZHVsZV9wYXJhbShqcGdfbmJ1ZnMsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGpwZ19uYnVmcywgIk1heGltdW0gbnVtYmVyIG9mIEpQRyBidWZmZXJzIHRvIHVzZSIpOwotbW9kdWxlX3BhcmFtKGpwZ19idWZzaXplLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhqcGdfYnVmc2l6ZSwgIk1heGltdW0gc2l6ZSBwZXIgSlBHIGJ1ZmZlciAoaW4ga0IpIik7Ci0KLWludCBwYXNzX3Rocm91Z2ggPSAwOwkJLyogMT1QYXNzIHRocm91Z2ggVFYgc2lnbmFsIHdoZW4gZGV2aWNlIGlzIG5vdCB1c2VkICovCi0JCQkJLyogMD1TaG93IGNvbG9yIGJhciB3aGVuIGRldmljZSBpcyBub3QgdXNlZCAoTE1MMzM6IG9ubHkgaWYgbG1sMzNkcGF0aD0xKSAqLwotbW9kdWxlX3BhcmFtKHBhc3NfdGhyb3VnaCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocGFzc190aHJvdWdoLAotCQkgIlBhc3MgVFYgc2lnbmFsIHRocm91Z2ggdG8gVFYtb3V0IHdoZW4gaWRsaW5nIik7Ci0KLWludCB6cjM2MDY3X2RlYnVnID0gMTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgenIzNjA2N19kZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC01KSIpOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlpvcmFuLTM2MDU3LzM2MDY3IEpQRUcgY29kZWMgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJTZXJndWVpIE1pcmlkb25vdiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgenIzNjA2N19wY2lfdGJsW10gPSB7Ci0Je1BDSV9WRU5ET1JfSURfWk9SQU4sIFBDSV9ERVZJQ0VfSURfWk9SQU5fMzYwNTcsCi0JIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAotCXswfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB6cjM2MDY3X3BjaV90YmwpOwotCi1pbnQgem9yYW5fbnVtOwkJCS8qIG51bWJlciBvZiBCdXpzIGluIHVzZSAqLwotc3RydWN0IHpvcmFuICp6b3JhbltCVVpfTUFYXTsKLQotLyogdmlkZW9jb2RlYyBidXMgZnVuY3Rpb25zIFpSMzYwNjAgKi8KLXN0YXRpYyB1MzIKLXpyMzYwNjBfcmVhZCAoc3RydWN0IHZpZGVvY29kZWMgKmNvZGVjLAotCSAgICAgIHUxNiAgICAgICAgICAgICAgICByZWcpCi17Ci0Jc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgY29kZWMtPm1hc3Rlcl9kYXRhLT5kYXRhOwotCV9fdTMyIGRhdGE7Ci0KLQlpZiAocG9zdF9vZmZpY2Vfd2FpdCh6cikKLQkgICAgfHwgcG9zdF9vZmZpY2Vfd3JpdGUoenIsIDAsIDEsIHJlZyA+PiA4KQotCSAgICB8fCBwb3N0X29mZmljZV93cml0ZSh6ciwgMCwgMiwgcmVnICYgMHhmZikpIHsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWRhdGEgPSBwb3N0X29mZmljZV9yZWFkKHpyLCAwLCAzKSAmIDB4ZmY7Ci0JcmV0dXJuIGRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkCi16cjM2MDYwX3dyaXRlIChzdHJ1Y3QgdmlkZW9jb2RlYyAqY29kZWMsCi0JICAgICAgIHUxNiAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHUzMiAgICAgICAgICAgICAgICB2YWwpCi17Ci0Jc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgY29kZWMtPm1hc3Rlcl9kYXRhLT5kYXRhOwotCi0JaWYgKHBvc3Rfb2ZmaWNlX3dhaXQoenIpCi0JICAgIHx8IHBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAwLCAxLCByZWcgPj4gOCkKLQkgICAgfHwgcG9zdF9vZmZpY2Vfd3JpdGUoenIsIDAsIDIsIHJlZyAmIDB4ZmYpKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlwb3N0X29mZmljZV93cml0ZSh6ciwgMCwgMywgdmFsICYgMHhmZik7Ci19Ci0KLS8qIHZpZGVvY29kZWMgYnVzIGZ1bmN0aW9ucyBaUjM2MDUwICovCi1zdGF0aWMgdTMyCi16cjM2MDUwX3JlYWQgKHN0cnVjdCB2aWRlb2NvZGVjICpjb2RlYywKLQkgICAgICB1MTYgICAgICAgICAgICAgICAgcmVnKQotewotCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGNvZGVjLT5tYXN0ZXJfZGF0YS0+ZGF0YTsKLQlfX3UzMiBkYXRhOwotCi0JaWYgKHBvc3Rfb2ZmaWNlX3dhaXQoenIpCi0JICAgIHx8IHBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAxLCAwLCByZWcgPj4gMikpIHsJLy8gcmVnLiBISUdIQllURVMKLQkJcmV0dXJuIC0xOwotCX0KLQotCWRhdGEgPSBwb3N0X29mZmljZV9yZWFkKHpyLCAwLCByZWcgJiAweDAzKSAmIDB4ZmY7CS8vIHJlZy4gTE9XQllURVMgKyByZWFkCi0JcmV0dXJuIGRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkCi16cjM2MDUwX3dyaXRlIChzdHJ1Y3QgdmlkZW9jb2RlYyAqY29kZWMsCi0JICAgICAgIHUxNiAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHUzMiAgICAgICAgICAgICAgICB2YWwpCi17Ci0Jc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgY29kZWMtPm1hc3Rlcl9kYXRhLT5kYXRhOwotCi0JaWYgKHBvc3Rfb2ZmaWNlX3dhaXQoenIpCi0JICAgIHx8IHBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAxLCAwLCByZWcgPj4gMikpIHsJLy8gcmVnLiBISUdIQllURVMKLQkJcmV0dXJuOwotCX0KLQotCXBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAwLCByZWcgJiAweDAzLCB2YWwgJiAweGZmKTsJLy8gcmVnLiBMT1dCWVRFUyArIHdyLiBkYXRhCi19Ci0KLS8qIHZpZGVvY29kZWMgYnVzIGZ1bmN0aW9ucyBaUjM2MDE2ICovCi1zdGF0aWMgdTMyCi16cjM2MDE2X3JlYWQgKHN0cnVjdCB2aWRlb2NvZGVjICpjb2RlYywKLQkgICAgICB1MTYgICAgICAgICAgICAgICAgcmVnKQotewotCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGNvZGVjLT5tYXN0ZXJfZGF0YS0+ZGF0YTsKLQlfX3UzMiBkYXRhOwotCi0JaWYgKHBvc3Rfb2ZmaWNlX3dhaXQoenIpKSB7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlkYXRhID0gcG9zdF9vZmZpY2VfcmVhZCh6ciwgMiwgcmVnICYgMHgwMykgJiAweGZmOwkvLyByZWFkCi0JcmV0dXJuIGRhdGE7Ci19Ci0KLS8qIGhhY2sgZm9yIGluIHpvcmFuX2RldmljZS5jICovCi12b2lkCi16cjM2MDE2X3dyaXRlIChzdHJ1Y3QgdmlkZW9jb2RlYyAqY29kZWMsCi0JICAgICAgIHUxNiAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHUzMiAgICAgICAgICAgICAgICB2YWwpCi17Ci0Jc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgY29kZWMtPm1hc3Rlcl9kYXRhLT5kYXRhOwotCi0JaWYgKHBvc3Rfb2ZmaWNlX3dhaXQoenIpKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlwb3N0X29mZmljZV93cml0ZSh6ciwgMiwgcmVnICYgMHgwMywgdmFsICYgMHgwZmYpOwkvLyB3ci4gZGF0YQotfQotCi0vKgotICogQm9hcmQgc3BlY2lmaWMgaW5mb3JtYXRpb24KLSAqLwotCi1zdGF0aWMgdm9pZAotZGMxMF9pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IGRjMTBfaW5pdCgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkvKiBQaXhlbCBjbG9jayBzZWxlY3Rpb24gKi8KLQlHUElPKHpyLCA0LCAwKTsKLQlHUElPKHpyLCA1LCAxKTsKLQkvKiBFbmFibGUgdGhlIHZpZGVvIGJ1cyBzeW5jIHNpZ25hbHMgKi8KLQlHUElPKHpyLCA3LCAwKTsKLX0KLQotc3RhdGljIHZvaWQKLWRjMTBwbHVzX2luaXQgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogZGMxMHBsdXNfaW5pdCgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1idXpfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKLXsKLQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBidXpfaW5pdCgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkvKiBzb21lIHN0dWZmIGZyb20gSW9tZWdhICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh6ci0+cGNpX2RldiwgMHhmYywgMHg5MDY4MGYxNSk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh6ci0+cGNpX2RldiwgMHgwYywgMHgwMDAxMjAyMCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh6ci0+cGNpX2RldiwgMHhlOCwgMHhjMDIwMDAwMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1sbWwzM19pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IGxtbDMzX2luaXQoKVxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JR1BJTyh6ciwgMiwgMSk7CQkvLyBTZXQgQ29tcG9zaXRlIGlucHV0L291dHB1dAotfQotCi1zdGF0aWMgdm9pZAotYXZzNmV5ZXNfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKLXsKLQkvLyBBdmVyTWVkaWEgNi1FeWVzIG9yaWdpbmFsIGRyaXZlciBieSBDaHJpc3RlciBXZWluaWdlbAotCi0JLy8gTGlmdGVkIHN0cmFpZ2h0IGZyb20gQ2hyaXN0ZXIncyBvbGQgZHJpdmVyIGFuZAotCS8vIG1vZGlmaWVkIHNsaWdodGx5IGJ5IE1hcnRpbiBTYW11ZWxzc29uLgotCi0JaW50IG11eCA9IGRlZmF1bHRfbXV4OyAvKiAxID0gQlQ4NjYsIDcgPSBWSUQxICovCi0KLQlHUElPKHpyLCA0LCAxKTsgLyogQnQ4NjYgU0xFRVAgb24gKi8KLQl1ZGVsYXkoMik7Ci0KLQlHUElPKHpyLCAwLCAxKTsgLyogWlIzNjA2MCAvUkVTRVQgb24gKi8KLQlHUElPKHpyLCAxLCAwKTsgLyogWlIzNjA2MCAvU0xFRVAgb24gKi8KLQlHUElPKHpyLCAyLCBtdXggJiAxKTsgICAvKiBNVVggUzAgKi8KLQlHUElPKHpyLCAzLCAwKTsgLyogL0ZSQU1FIG9uICovCi0JR1BJTyh6ciwgNCwgMCk7IC8qIEJ0ODY2IFNMRUVQIG9mZiAqLwotCUdQSU8oenIsIDUsIG11eCAmIDIpOyAgIC8qIE1VWCBTMSAqLwotCUdQSU8oenIsIDYsIDApOyAvKiA/ICovCi0JR1BJTyh6ciwgNywgbXV4ICYgNCk7ICAgLyogTVVYIFMyICovCi0KLX0KLQotc3RhdGljIGNoYXIgKgotaTJjaWRfdG9fbW9kdWxlbmFtZSAodTE2IGkyY19pZCkKLXsKLQljaGFyICpuYW1lID0gTlVMTDsKLQotCXN3aXRjaCAoaTJjX2lkKSB7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzExMDoKLQkJbmFtZSA9ICJzYWE3MTEwIjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzExMUE6Ci0JCW5hbWUgPSAic2FhNzExMSI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX1NBQTcxMTQ6Ci0JCW5hbWUgPSAic2FhNzExNCI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX1NBQTcxODVCOgotCQluYW1lID0gInNhYTcxODUiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9BRFY3MTcwOgotCQluYW1lID0gImFkdjcxNzAiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9BRFY3MTc1OgotCQluYW1lID0gImFkdjcxNzUiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9CVDgxOToKLQkJbmFtZSA9ICJidDgxOSI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0JUODU2OgotCQluYW1lID0gImJ0ODU2IjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfQlQ4NjY6Ci0JCW5hbWUgPSAiYnQ4NjYiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9WUFgzMjIwOgotCQluYW1lID0gInZweDMyMjAiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9LUzAxMjc6Ci0JCW5hbWUgPSAia3MwMTI3IjsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIG5hbWU7Ci19Ci0KLXN0YXRpYyBjaGFyICoKLWNvZGVjaWRfdG9fbW9kdWxlbmFtZSAodTE2IGNvZGVjaWQpCi17Ci0JY2hhciAqbmFtZSA9IE5VTEw7Ci0KLQlzd2l0Y2ggKGNvZGVjaWQpIHsKLQljYXNlIENPREVDX1RZUEVfWlIzNjA2MDoKLQkJbmFtZSA9ICJ6cjM2MDYwIjsKLQkJYnJlYWs7Ci0JY2FzZSBDT0RFQ19UWVBFX1pSMzYwNTA6Ci0JCW5hbWUgPSAienIzNjA1MCI7Ci0JCWJyZWFrOwotCWNhc2UgQ09ERUNfVFlQRV9aUjM2MDE2OgotCQluYW1lID0gInpyMzYwMTYiOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gbmFtZTsKLX0KLQotLy8gc3RydWN0IHR2bm9ybSB7Ci0vLyAgICAgIHUxNiBXdCwgV2EsIEhTdGFydCwgSFN5bmNTdGFydCwgSHQsIEhhLCBWU3RhcnQ7Ci0vLyB9OwotCi1zdGF0aWMgc3RydWN0IHR2bm9ybSBmNTBzcXBpeGVsID0geyA5NDQsIDc2OCwgODMsIDg4MCwgNjI1LCA1NzYsIDE2IH07Ci1zdGF0aWMgc3RydWN0IHR2bm9ybSBmNjBzcXBpeGVsID0geyA3ODAsIDY0MCwgNTEsIDcxNiwgNTI1LCA0ODAsIDEyIH07Ci1zdGF0aWMgc3RydWN0IHR2bm9ybSBmNTBjY2lyNjAxID0geyA4NjQsIDcyMCwgNzUsIDgwNCwgNjI1LCA1NzYsIDE4IH07Ci1zdGF0aWMgc3RydWN0IHR2bm9ybSBmNjBjY2lyNjAxID0geyA4NTgsIDcyMCwgNTcsIDc4OCwgNTI1LCA0ODAsIDE2IH07Ci0KLXN0YXRpYyBzdHJ1Y3QgdHZub3JtIGY1MGNjaXI2MDFfbG1sMzMgPSB7IDg2NCwgNzIwLCA3NSszNCwgODA0LCA2MjUsIDU3NiwgMTggfTsKLXN0YXRpYyBzdHJ1Y3QgdHZub3JtIGY2MGNjaXI2MDFfbG1sMzMgPSB7IDg1OCwgNzIwLCA1NyszNCwgNzg4LCA1MjUsIDQ4MCwgMTYgfTsKLQotLyogVGhlIERDMTAgKDU3LzE2LzUwKSB1c2VzIFZBY3RpdmUgYXMgSFN5bmMsIHNvIEhTdGFydCBtdXN0IGJlIDAgKi8KLXN0YXRpYyBzdHJ1Y3QgdHZub3JtIGY1MHNxcGl4ZWxfZGMxMCA9IHsgOTQ0LCA3NjgsIDAsIDg4MCwgNjI1LCA1NzYsIDAgfTsKLXN0YXRpYyBzdHJ1Y3QgdHZub3JtIGY2MHNxcGl4ZWxfZGMxMCA9IHsgNzgwLCA2NDAsIDAsIDcxNiwgNTI1LCA0ODAsIDEyIH07Ci0KLS8qIEZJWE1FOiBJIGNhbm5vdCBzd2FwIFUgYW5kIFYgaW4gc2FhNzExNCwgc28gaSBkbyBvbmUKLSAqIHBpeGVsIGxlZnQgc2hpZnQgaW4gem9yYW4gKDc1IC0+IDc0KQotICogKE1heGltIFlldnR5dXNoa2luIDxtYXhAbGludXhtZWRpYWxhYnMuY29tPikgKi8KLXN0YXRpYyBzdHJ1Y3QgdHZub3JtIGY1MGNjaXI2MDFfbG0zM3IxMCA9IHsgODY0LCA3MjAsIDc0KzU0LCA4MDQsIDYyNSwgNTc2LCAxOCB9Owotc3RhdGljIHN0cnVjdCB0dm5vcm0gZjYwY2NpcjYwMV9sbTMzcjEwID0geyA4NTgsIDcyMCwgNTYrNTQsIDc4OCwgNTI1LCA0ODAsIDE2IH07Ci0KLS8qIEZJWE1FOiBUaGUga3MwMTI3IHNlZW0gaW5jYXBhYmxlIG9mIHN3YXBwaW5nIFUgYW5kIFYsIHRvbywgd2hpY2ggaXMgd2h5IEkKLSAqIGNvcHkgTWF4aW0ncyBsZWZ0IHNoaWZ0IGhhY2sgZm9yIHRoZSA2IEV5ZXMuCi0gKgotICogQ2hyaXN0ZXIncyBkcml2ZXIgdXNlZCB0aGUgdW5zaGlmdGVkIG5vcm1zLCB0aG91Z2guLi4KLSAqIC9TYW0gICovCi1zdGF0aWMgc3RydWN0IHR2bm9ybSBmNTBjY2lyNjAxX2F2czZleWVzID0geyA4NjQsIDcyMCwgNzQsIDgwNCwgNjI1LCA1NzYsIDE4IH07Ci1zdGF0aWMgc3RydWN0IHR2bm9ybSBmNjBjY2lyNjAxX2F2czZleWVzID0geyA4NTgsIDcyMCwgNTYsIDc4OCwgNTI1LCA0ODAsIDE2IH07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2FyZF9pbmZvIHpvcmFuX2NhcmRzW05VTV9DQVJEU10gX19kZXZpbml0ZGF0YSA9IHsKLQl7Ci0JCS50eXBlID0gREMxMF9vbGQsCi0JCS5uYW1lID0gIkRDMTAob2xkKSIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAotCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNTAsCi0JCS52aWRlb192ZmUgPSBDT0RFQ19UWVBFX1pSMzYwMTYsCi0KLQkJLmlucHV0cyA9IDMsCi0JCS5pbnB1dCA9IHsKLQkJCXsgMSwgIkNvbXBvc2l0ZSIgfSwKLQkJCXsgMiwgIlMtVmlkZW8iIH0sCi0JCQl7IDAsICJJbnRlcm5hbC9jb21wIiB9Ci0JCX0sCi0JCS5ub3JtcyA9IDMsCi0JCS50dm4gPSB7Ci0JCQkmZjUwc3FwaXhlbF9kYzEwLAotCQkJJmY2MHNxcGl4ZWxfZGMxMCwKLQkJCSZmNTBzcXBpeGVsX2RjMTAKLQkJfSwKLQkJLmpwZWdfaW50ID0gMCwKLQkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlExLAotCQkuZ3BpbyA9IHsgMiwgMSwgLTEsIDMsIDcsIDAsIDQsIDUgfSwKLQkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwIH0sCi0JCS5ncGNzID0geyAtMSwgMCB9LAotCQkudmZlX3BvbCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAotCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAwLAotCQkuaW5wdXRfbXV4ID0gMCwKLQkJLmluaXQgPSAmZGMxMF9pbml0LAotCX0sIHsKLQkJLnR5cGUgPSBEQzEwX25ldywKLQkJLm5hbWUgPSAiREMxMChuZXcpIiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxMTAsCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAotCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCi0KLQkJLmlucHV0cyA9IDMsCi0JCS5pbnB1dCA9IHsKLQkJCQl7IDAsICJDb21wb3NpdGUiIH0sCi0JCQkJeyA3LCAiUy1WaWRlbyIgfSwKLQkJCQl7IDUsICJJbnRlcm5hbC9jb21wIiB9Ci0JCQl9LAotCQkubm9ybXMgPSAzLAotCQkudHZuID0gewotCQkJCSZmNTBzcXBpeGVsLAotCQkJCSZmNjBzcXBpeGVsLAotCQkJCSZmNTBzcXBpeGVsfSwKLQkJLmpwZWdfaW50ID0gWlIzNjA1N19JU1JfR0lSUTAsCi0JCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKLQkJLmdwaW8gPSB7IDMsIDAsIDYsIDEsIDIsIC0xLCA0LCA1IH0sCi0JCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAotCQkuZ3BjcyA9IHsgLTEsIDF9LAotCQkudmZlX3BvbCA9IHsgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCB9LAotCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAwLAotCQkuaW5wdXRfbXV4ID0gMCwKLQkJLmluaXQgPSAmZGMxMHBsdXNfaW5pdCwKLQl9LCB7Ci0JCS50eXBlID0gREMxMHBsdXMsCi0JCS5uYW1lID0gIkRDMTBwbHVzIiwKLQkJLnZlbmRvcl9pZCA9IFBDSV9WRU5ET1JfSURfTUlSTywKLQkJLmRldmljZV9pZCA9IFBDSV9ERVZJQ0VfSURfTUlST19EQzEwUExVUywKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxMTAsCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAotCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCi0KLQkJLmlucHV0cyA9IDMsCi0JCS5pbnB1dCA9IHsKLQkJCXsgMCwgIkNvbXBvc2l0ZSIgfSwKLQkJCXsgNywgIlMtVmlkZW8iIH0sCi0JCQl7IDUsICJJbnRlcm5hbC9jb21wIiB9Ci0JCX0sCi0JCS5ub3JtcyA9IDMsCi0JCS50dm4gPSB7Ci0JCQkmZjUwc3FwaXhlbCwKLQkJCSZmNjBzcXBpeGVsLAotCQkJJmY1MHNxcGl4ZWwKLQkJfSwKLQkJLmpwZWdfaW50ID0gWlIzNjA1N19JU1JfR0lSUTAsCi0JCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKLQkJLmdwaW8gPSB7IDMsIDAsIDYsIDEsIDIsIC0xLCA0LCA1IH0sCi0JCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAotCQkuZ3BjcyA9IHsgLTEsIDEgfSwKLQkJLnZmZV9wb2wgPSB7IDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAgfSwKLQkJLmd3c19ub3RfY29ubmVjdGVkID0gMCwKLQkJLmlucHV0X211eCA9IDAsCi0JCS5pbml0ID0gJmRjMTBwbHVzX2luaXQsCi0JfSwgewotCQkudHlwZSA9IERDMzAsCi0JCS5uYW1lID0gIkRDMzAiLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfVlBYMzIyMCwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCi0JCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA1MCwKLQkJLnZpZGVvX3ZmZSA9IENPREVDX1RZUEVfWlIzNjAxNiwKLQotCQkuaW5wdXRzID0gMywKLQkJLmlucHV0ID0gewotCQkJeyAxLCAiQ29tcG9zaXRlIiB9LAotCQkJeyAyLCAiUy1WaWRlbyIgfSwKLQkJCXsgMCwgIkludGVybmFsL2NvbXAiIH0KLQkJfSwKLQkJLm5vcm1zID0gMywKLQkJLnR2biA9IHsKLQkJCSZmNTBzcXBpeGVsX2RjMTAsCi0JCQkmZjYwc3FwaXhlbF9kYzEwLAotCQkJJmY1MHNxcGl4ZWxfZGMxMAotCQl9LAotCQkuanBlZ19pbnQgPSAwLAotCQkudnN5bmNfaW50ID0gWlIzNjA1N19JU1JfR0lSUTEsCi0JCS5ncGlvID0geyAyLCAxLCAtMSwgMywgNywgMCwgNCwgNSB9LAotCQkuZ3Bpb19wb2wgPSB7IDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAgfSwKLQkJLmdwY3MgPSB7IC0xLCAwIH0sCi0JCS52ZmVfcG9sID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDAsCi0JCS5pbnB1dF9tdXggPSAwLAotCQkuaW5pdCA9ICZkYzEwX2luaXQsCi0JfSwgewotCQkudHlwZSA9IERDMzBwbHVzLAotCQkubmFtZSA9ICJEQzMwcGx1cyIsCi0JCS52ZW5kb3JfaWQgPSBQQ0lfVkVORE9SX0lEX01JUk8sCi0JCS5kZXZpY2VfaWQgPSBQQ0lfREVWSUNFX0lEX01JUk9fREMzMFBMVVMsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQURWNzE3NSwKLQkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDUwLAotCQkudmlkZW9fdmZlID0gQ09ERUNfVFlQRV9aUjM2MDE2LAotCi0JCS5pbnB1dHMgPSAzLAotCQkuaW5wdXQgPSB7Ci0JCQl7IDEsICJDb21wb3NpdGUiIH0sCi0JCQl7IDIsICJTLVZpZGVvIiB9LAotCQkJeyAwLCAiSW50ZXJuYWwvY29tcCIgfQotCQl9LAotCQkubm9ybXMgPSAzLAotCQkudHZuID0gewotCQkJJmY1MHNxcGl4ZWxfZGMxMCwKLQkJCSZmNjBzcXBpeGVsX2RjMTAsCi0JCQkmZjUwc3FwaXhlbF9kYzEwCi0JCX0sCi0JCS5qcGVnX2ludCA9IDAsCi0JCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKLQkJLmdwaW8gPSB7IDIsIDEsIC0xLCAzLCA3LCAwLCA0LCA1IH0sCi0JCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCB9LAotCQkuZ3BjcyA9IHsgLTEsIDAgfSwKLQkJLnZmZV9wb2wgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKLQkJLmd3c19ub3RfY29ubmVjdGVkID0gMCwKLQkJLmlucHV0X211eCA9IDAsCi0JCS5pbml0ID0gJmRjMTBfaW5pdCwKLQl9LCB7Ci0JCS50eXBlID0gTE1MMzMsCi0JCS5uYW1lID0gIkxNTDMzIiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX0JUODE5LAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQlQ4NTYsCi0JCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKLQotCQkuaW5wdXRzID0gMiwKLQkJLmlucHV0ID0gewotCQkJeyAwLCAiQ29tcG9zaXRlIiB9LAotCQkJeyA3LCAiUy1WaWRlbyIgfQotCQl9LAotCQkubm9ybXMgPSAyLAotCQkudHZuID0gewotCQkJJmY1MGNjaXI2MDFfbG1sMzMsCi0JCQkmZjYwY2NpcjYwMV9sbWwzMywKLQkJCU5VTEwKLQkJfSwKLQkJLmpwZWdfaW50ID0gWlIzNjA1N19JU1JfR0lSUTEsCi0JCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMCwKLQkJLmdwaW8gPSB7IDEsIC0xLCAzLCA1LCA3LCAtMSwgLTEsIC0xIH0sCi0JCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCB9LAotCQkuZ3BjcyA9IHsgMywgMSB9LAotCQkudmZlX3BvbCA9IHsgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMCB9LAotCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAxLAotCQkuaW5wdXRfbXV4ID0gMCwKLQkJLmluaXQgPSAmbG1sMzNfaW5pdCwKLQl9LCB7Ci0JCS50eXBlID0gTE1MMzNSMTAsCi0JCS5uYW1lID0gIkxNTDMzUjEwIiwKLQkJLnZlbmRvcl9pZCA9IFBDSV9WRU5ET1JfSURfRUxFQ1RST05JQ0RFU0lHTkdNQkgsCi0JCS5kZXZpY2VfaWQgPSBQQ0lfREVWSUNFX0lEX0xNTF8zM1IxMCwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxMTQsCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTcwLAotCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCi0KLQkJLmlucHV0cyA9IDIsCi0JCS5pbnB1dCA9IHsKLQkJCXsgMCwgIkNvbXBvc2l0ZSIgfSwKLQkJCXsgNywgIlMtVmlkZW8iIH0KLQkJfSwKLQkJLm5vcm1zID0gMiwKLQkJLnR2biA9IHsKLQkJCSZmNTBjY2lyNjAxX2xtMzNyMTAsCi0JCQkmZjYwY2NpcjYwMV9sbTMzcjEwLAotCQkJTlVMTAotCQl9LAotCQkuanBlZ19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKLQkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlEwLAotCQkuZ3BpbyA9IHsgMSwgLTEsIDMsIDUsIDcsIC0xLCAtMSwgLTEgfSwKLQkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwIH0sCi0JCS5ncGNzID0geyAzLCAxIH0sCi0JCS52ZmVfcG9sID0geyAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwIH0sCi0JCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDEsCi0JCS5pbnB1dF9tdXggPSAwLAotCQkuaW5pdCA9ICZsbWwzM19pbml0LAotCX0sIHsKLQkJLnR5cGUgPSBCVVosCi0JCS5uYW1lID0gIkJ1eiIsCi0JCS52ZW5kb3JfaWQgPSBQQ0lfVkVORE9SX0lEX0lPTUVHQSwKLQkJLmRldmljZV9pZCA9IFBDSV9ERVZJQ0VfSURfSU9NRUdBX0JVWiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxMTFBLAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzE4NUIsCi0JCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKLQotCQkuaW5wdXRzID0gMiwKLQkJLmlucHV0ID0gewotCQkJeyAzLCAiQ29tcG9zaXRlIiB9LAotCQkJeyA3LCAiUy1WaWRlbyIgfQotCQl9LAotCQkubm9ybXMgPSAzLAotCQkudHZuID0gewotCQkJJmY1MGNjaXI2MDEsCi0JCQkmZjYwY2NpcjYwMSwKLQkJCSZmNTBjY2lyNjAxCi0JCX0sCi0JCS5qcGVnX2ludCA9IFpSMzYwNTdfSVNSX0dJUlExLAotCQkudnN5bmNfaW50ID0gWlIzNjA1N19JU1JfR0lSUTAsCi0JCS5ncGlvID0geyAxLCAtMSwgMywgLTEsIC0xLCAtMSwgLTEsIC0xIH0sCi0JCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAotCQkuZ3BjcyA9IHsgMywgMSB9LAotCQkudmZlX3BvbCA9IHsgMSwgMSwgMCwgMCwgMCwgMSwgMCwgMCB9LAotCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAxLAotCQkuaW5wdXRfbXV4ID0gMCwKLQkJLmluaXQgPSAmYnV6X2luaXQsCi0JfSwgewotCQkudHlwZSA9IEFWUzZFWUVTLAotCQkubmFtZSA9ICI2LUV5ZXMiLAotCQkvKiBBdmVyTWVkaWEgY2hvc2Ugbm90IHRvIGJyYW5kIHRoZSA2LUV5ZXMuIFRodXMgaXQKLQkJICAgY2FuJ3QgYmUgYXV0b2RldGVjdGVkLCBhbmQgcmVxdWlyZXMgY2FyZD14LiAqLwotCQkudmVuZG9yX2lkID0gLTEsCi0JCS5kZXZpY2VfaWQgPSAtMSwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX0tTMDEyNywKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0JUODY2LAotCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCi0KLQkJLmlucHV0cyA9IDEwLAotCQkuaW5wdXQgPSB7Ci0JCQl7IDAsICJDb21wb3NpdGUgMSIgfSwKLQkJCXsgMSwgIkNvbXBvc2l0ZSAyIiB9LAotCQkJeyAyLCAiQ29tcG9zaXRlIDMiIH0sCi0JCQl7IDQsICJDb21wb3NpdGUgNCIgfSwKLQkJCXsgNSwgIkNvbXBvc2l0ZSA1IiB9LAotCQkJeyA2LCAiQ29tcG9zaXRlIDYiIH0sCi0JCQl7IDgsICJTLVZpZGVvIDEiIH0sCi0JCQl7IDksICJTLVZpZGVvIDIiIH0sCi0JCQl7MTAsICJTLVZpZGVvIDMiIH0sCi0JCQl7MTUsICJZQ2JDciIgfQotCQl9LAotCQkubm9ybXMgPSAyLAotCQkudHZuID0gewotCQkJJmY1MGNjaXI2MDFfYXZzNmV5ZXMsCi0JCQkmZjYwY2NpcjYwMV9hdnM2ZXllcywKLQkJCU5VTEwKLQkJfSwKLQkJLmpwZWdfaW50ID0gWlIzNjA1N19JU1JfR0lSUTEsCi0JCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMCwKLQkJLmdwaW8gPSB7IDEsIDAsIDMsIC0xLCAtMSwgLTEsIC0xLCAtMSB9LC8vIFZhbGlkaXR5IHVua25vd24gL1NhbQotCQkuZ3Bpb19wb2wgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwgLy8gVmFsaWRpdHkgdW5rbm93biAvU2FtCi0JCS5ncGNzID0geyAzLCAxIH0sCQkJLy8gVmFsaWRpdHkgdW5rbm93biAvU2FtCi0JCS52ZmVfcG9sID0geyAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwIH0sICAvLyBWYWxpZGl0eSB1bmtub3duIC9TYW0KLQkJLmd3c19ub3RfY29ubmVjdGVkID0gMSwKLQkJLmlucHV0X211eCA9IDEsCi0JCS5pbml0ID0gJmF2czZleWVzX2luaXQsCi0JfQotCi19OwotCi0vKgotICogSTJDIGZ1bmN0aW9ucwotICovCi0vKiBzb2Z0d2FyZSBJMkMgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50Ci16b3Jhbl9pMmNfZ2V0c2RhICh2b2lkICpkYXRhKQotewotCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGRhdGE7Ci0KLQlyZXR1cm4gKGJ0cmVhZChaUjM2MDU3X0kyQ0JSKSA+PiAxKSAmIDE7Ci19Ci0KLXN0YXRpYyBpbnQKLXpvcmFuX2kyY19nZXRzY2wgKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgZGF0YTsKLQotCXJldHVybiBidHJlYWQoWlIzNjA1N19JMkNCUikgJiAxOwotfQotCi1zdGF0aWMgdm9pZAotem9yYW5faTJjX3NldHNkYSAodm9pZCAqZGF0YSwKLQkJICBpbnQgICBzdGF0ZSkKLXsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBkYXRhOwotCi0JaWYgKHN0YXRlKQotCQl6ci0+aTJjYnIgfD0gMjsKLQllbHNlCi0JCXpyLT5pMmNiciAmPSB+MjsKLQlidHdyaXRlKHpyLT5pMmNiciwgWlIzNjA1N19JMkNCUik7Ci19Ci0KLXN0YXRpYyB2b2lkCi16b3Jhbl9pMmNfc2V0c2NsICh2b2lkICpkYXRhLAotCQkgIGludCAgIHN0YXRlKQotewotCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGRhdGE7Ci0KLQlpZiAoc3RhdGUpCi0JCXpyLT5pMmNiciB8PSAxOwotCWVsc2UKLQkJenItPmkyY2JyICY9IH4xOwotCWJ0d3JpdGUoenItPmkyY2JyLCBaUjM2MDU3X0kyQ0JSKTsKLX0KLQotc3RhdGljIGludAotem9yYW5faTJjX2NsaWVudF9yZWdpc3RlciAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0JaW50IHJlcyA9IDA7Ci0KLQlkcHJpbnRrKDIsCi0JCUtFUk5fREVCVUcgIiVzOiBpMmNfY2xpZW50X3JlZ2lzdGVyKCkgLSBkcml2ZXIgaWQgPSAlZFxuIiwKLQkJWlJfREVWTkFNRSh6ciksIGNsaWVudC0+ZHJpdmVyLT5pZCk7Ci0KLQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQlpZiAoenItPnVzZXIgPiAwKSB7Ci0JCS8qIHdlJ3JlIGFscmVhZHkgYnVzeSwgc28gd2Uga2VlcCBhIHJlZmVyZW5jZSB0bwotCQkgKiB0aGVtLi4uIENvdWxkIGRvIGEgbG90IG9mIHN0dWZmIGhlcmUsIGJ1dCB0aGlzCi0JCSAqIGlzIGVhc2llc3QuIChEaWQgSSBldmVyIG1lbnRpb24gSSdtIGEgbGF6eSBhc3M/KQotCQkgKi8KLQkJcmVzID0gLUVCVVNZOwotCQlnb3RvIGNsaWVudHJlZ191bmxvY2tfYW5kX3JldHVybjsKLQl9Ci0KLQlpZiAoY2xpZW50LT5kcml2ZXItPmlkID09IHpyLT5jYXJkLmkyY19kZWNvZGVyKQotCQl6ci0+ZGVjb2RlciA9IGNsaWVudDsKLQllbHNlIGlmIChjbGllbnQtPmRyaXZlci0+aWQgPT0genItPmNhcmQuaTJjX2VuY29kZXIpCi0JCXpyLT5lbmNvZGVyID0gY2xpZW50OwotCWVsc2UgewotCQlyZXMgPSAtRU5PREVWOwotCQlnb3RvIGNsaWVudHJlZ191bmxvY2tfYW5kX3JldHVybjsKLQl9Ci0KLWNsaWVudHJlZ191bmxvY2tfYW5kX3JldHVybjoKLQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQKLXpvcmFuX2kyY19jbGllbnRfdW5yZWdpc3RlciAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0JaW50IHJlcyA9IDA7Ci0KLQlkcHJpbnRrKDIsIEtFUk5fREVCVUcgIiVzOiBpMmNfY2xpZW50X3VucmVnaXN0ZXIoKVxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JaWYgKHpyLT51c2VyID4gMCkgewotCQlyZXMgPSAtRUJVU1k7Ci0JCWdvdG8gY2xpZW50dW5yZWdfdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCi0JLyogdHJ5IHRvIGxvY2F0ZSBpdCAqLwotCWlmIChjbGllbnQgPT0genItPmVuY29kZXIpIHsKLQkJenItPmVuY29kZXIgPSBOVUxMOwotCX0gZWxzZSBpZiAoY2xpZW50ID09IHpyLT5kZWNvZGVyKSB7Ci0JCXpyLT5kZWNvZGVyID0gTlVMTDsKLQkJc25wcmludGYoWlJfREVWTkFNRSh6ciksIHNpemVvZihaUl9ERVZOQU1FKHpyKSksICJNSlBFR1slZF0iLCB6ci0+aWQpOwotCX0KLWNsaWVudHVucmVnX3VubG9ja19hbmRfcmV0dXJuOgotCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgem9yYW5faTJjX2JpdF9kYXRhX3RlbXBsYXRlID0gewotCS5zZXRzZGEgPSB6b3Jhbl9pMmNfc2V0c2RhLAotCS5zZXRzY2wgPSB6b3Jhbl9pMmNfc2V0c2NsLAotCS5nZXRzZGEgPSB6b3Jhbl9pMmNfZ2V0c2RhLAotCS5nZXRzY2wgPSB6b3Jhbl9pMmNfZ2V0c2NsLAotCS51ZGVsYXkgPSAxMCwKLQkudGltZW91dCA9IDEwMCwKLX07Ci0KLXN0YXRpYyBpbnQKLXpvcmFuX3JlZ2lzdGVyX2kyYyAoc3RydWN0IHpvcmFuICp6cikKLXsKLQltZW1jcHkoJnpyLT5pMmNfYWxnbywgJnpvcmFuX2kyY19iaXRfZGF0YV90ZW1wbGF0ZSwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSkpOwotCXpyLT5pMmNfYWxnby5kYXRhID0genI7Ci0JenItPmkyY19hZGFwdGVyLmlkID0gSTJDX0hXX0JfWlIzNjA2NzsKLQl6ci0+aTJjX2FkYXB0ZXIuY2xpZW50X3JlZ2lzdGVyID0gem9yYW5faTJjX2NsaWVudF9yZWdpc3RlcjsKLQl6ci0+aTJjX2FkYXB0ZXIuY2xpZW50X3VucmVnaXN0ZXIgPSB6b3Jhbl9pMmNfY2xpZW50X3VucmVnaXN0ZXI7Ci0Jc3RybGNweSh6ci0+aTJjX2FkYXB0ZXIubmFtZSwgWlJfREVWTkFNRSh6ciksCi0JCXNpemVvZih6ci0+aTJjX2FkYXB0ZXIubmFtZSkpOwotCWkyY19zZXRfYWRhcGRhdGEoJnpyLT5pMmNfYWRhcHRlciwgenIpOwotCXpyLT5pMmNfYWRhcHRlci5hbGdvX2RhdGEgPSAmenItPmkyY19hbGdvOwotCXpyLT5pMmNfYWRhcHRlci5kZXYucGFyZW50ID0gJnpyLT5wY2lfZGV2LT5kZXY7Ci0JcmV0dXJuIGkyY19iaXRfYWRkX2J1cygmenItPmkyY19hZGFwdGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLXpvcmFuX3VucmVnaXN0ZXJfaTJjIChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCWkyY19kZWxfYWRhcHRlcigmenItPmkyY19hZGFwdGVyKTsKLX0KLQotLyogQ2hlY2sgYSB6b3Jhbl9wYXJhbXMgc3RydWN0IGZvciBjb3JyZWN0bmVzcywgaW5zZXJ0IGRlZmF1bHQgcGFyYW1zICovCi0KLWludAotem9yYW5fY2hlY2tfanBnX3NldHRpbmdzIChzdHJ1Y3Qgem9yYW4gICAgICAgICAgICAgICp6ciwKLQkJCSAgc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyAqc2V0dGluZ3MpCi17Ci0JaW50IGVyciA9IDAsIGVycjAgPSAwOwotCi0JZHByaW50ayg0LAotCQlLRVJOX0RFQlVHCi0JCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBkZWM6ICVkLCBIZGNtOiAlZCwgVmRjbTogJWQsIFRkY206ICVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgc2V0dGluZ3MtPmRlY2ltYXRpb24sIHNldHRpbmdzLT5Ib3JEY20sCi0JCXNldHRpbmdzLT5WZXJEY20sIHNldHRpbmdzLT5UbXBEY20pOwotCWRwcmludGsoNCwKLQkJS0VSTl9ERUJVRwotCQkiJXM6IGNoZWNrX2pwZ19zZXR0aW5ncygpIC0geDogJWQsIHk6ICVkLCB3OiAlZCwgeTogJWRcbiIsCi0JCVpSX0RFVk5BTUUoenIpLCBzZXR0aW5ncy0+aW1nX3gsIHNldHRpbmdzLT5pbWdfeSwKLQkJc2V0dGluZ3MtPmltZ193aWR0aCwgc2V0dGluZ3MtPmltZ19oZWlnaHQpOwotCS8qIENoZWNrIGRlY2ltYXRpb24sIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZGVjaW1hdGlvbiA9IDEsIDIsIDQgKi8KLQlzd2l0Y2ggKHNldHRpbmdzLT5kZWNpbWF0aW9uKSB7Ci0JY2FzZSAxOgotCi0JCXNldHRpbmdzLT5Ib3JEY20gPSAxOwotCQlzZXR0aW5ncy0+VmVyRGNtID0gMTsKLQkJc2V0dGluZ3MtPlRtcERjbSA9IDE7Ci0JCXNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiA9IDI7Ci0JCXNldHRpbmdzLT5pbWdfeCA9IDA7Ci0JCXNldHRpbmdzLT5pbWdfeSA9IDA7Ci0JCXNldHRpbmdzLT5pbWdfd2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCQlzZXR0aW5ncy0+aW1nX2hlaWdodCA9IEJVWl9NQVhfSEVJR0hUIC8gMjsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCi0JCXNldHRpbmdzLT5Ib3JEY20gPSAyOwotCQlzZXR0aW5ncy0+VmVyRGNtID0gMTsKLQkJc2V0dGluZ3MtPlRtcERjbSA9IDI7Ci0JCXNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiA9IDE7Ci0JCXNldHRpbmdzLT5pbWdfeCA9IChCVVpfTUFYX1dJRFRIID09IDcyMCkgPyA4IDogMDsKLQkJc2V0dGluZ3MtPmltZ195ID0gMDsKLQkJc2V0dGluZ3MtPmltZ193aWR0aCA9Ci0JCSAgICAoQlVaX01BWF9XSURUSCA9PSA3MjApID8gNzA0IDogQlVaX01BWF9XSURUSDsKLQkJc2V0dGluZ3MtPmltZ19oZWlnaHQgPSBCVVpfTUFYX0hFSUdIVCAvIDI7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQotCQlpZiAoenItPmNhcmQudHlwZSA9PSBEQzEwX25ldykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fREVCVUcKLQkJCQkiJXM6IGNoZWNrX2pwZ19zZXR0aW5ncygpIC0gSERlYyBieSA0IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIERDMTBcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJZXJyMCsrOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzZXR0aW5ncy0+SG9yRGNtID0gNDsKLQkJc2V0dGluZ3MtPlZlckRjbSA9IDI7Ci0JCXNldHRpbmdzLT5UbXBEY20gPSAyOwotCQlzZXR0aW5ncy0+ZmllbGRfcGVyX2J1ZmYgPSAxOwotCQlzZXR0aW5ncy0+aW1nX3ggPSAoQlVaX01BWF9XSURUSCA9PSA3MjApID8gOCA6IDA7Ci0JCXNldHRpbmdzLT5pbWdfeSA9IDA7Ci0JCXNldHRpbmdzLT5pbWdfd2lkdGggPQotCQkgICAgKEJVWl9NQVhfV0lEVEggPT0gNzIwKSA/IDcwNCA6IEJVWl9NQVhfV0lEVEg7Ci0JCXNldHRpbmdzLT5pbWdfaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQgLyAyOwotCQlicmVhazsKLQljYXNlIDA6Ci0KLQkJLyogV2UgaGF2ZSB0byBjaGVjayB0aGUgZGF0YSB0aGUgdXNlciBoYXMgc2V0ICovCi0KLQkJaWYgKHNldHRpbmdzLT5Ib3JEY20gIT0gMSAmJiBzZXR0aW5ncy0+SG9yRGNtICE9IDIgJiYKLQkJICAgICh6ci0+Y2FyZC50eXBlID09IERDMTBfbmV3IHx8IHNldHRpbmdzLT5Ib3JEY20gIT0gNCkpCi0JCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+VmVyRGNtICE9IDEgJiYgc2V0dGluZ3MtPlZlckRjbSAhPSAyKQotCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPlRtcERjbSAhPSAxICYmIHNldHRpbmdzLT5UbXBEY20gIT0gMikKLQkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiAhPSAxICYmCi0JCSAgICBzZXR0aW5ncy0+ZmllbGRfcGVyX2J1ZmYgIT0gMikKLQkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5pbWdfeCA8IDApCi0JCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX3kgPCAwKQotCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPmltZ193aWR0aCA8IDApCi0JCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX2hlaWdodCA8IDApCi0JCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX3ggKyBzZXR0aW5ncy0+aW1nX3dpZHRoID4gQlVaX01BWF9XSURUSCkKLQkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5pbWdfeSArIHNldHRpbmdzLT5pbWdfaGVpZ2h0ID4KLQkJICAgIEJVWl9NQVhfSEVJR0hUIC8gMikKLQkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5Ib3JEY20gJiYgc2V0dGluZ3MtPlZlckRjbSkgewotCQkJaWYgKHNldHRpbmdzLT5pbWdfd2lkdGggJQotCQkJICAgICgxNiAqIHNldHRpbmdzLT5Ib3JEY20pICE9IDApCi0JCQkJZXJyMCsrOwotCQkJaWYgKHNldHRpbmdzLT5pbWdfaGVpZ2h0ICUKLQkJCSAgICAoOCAqIHNldHRpbmdzLT5WZXJEY20pICE9IDApCi0JCQkJZXJyMCsrOwotCQl9Ci0KLQkJaWYgKGVycjApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBlcnJvciBpbiBwYXJhbXMgZm9yIGRlY2ltYXRpb24gPSAwXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCWVycisrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IGNoZWNrX2pwZ19zZXR0aW5ncygpIC0gZGVjaW1hdGlvbiA9ICVkLCBtdXN0IGJlIDAsIDEsIDIgb3IgNFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBzZXR0aW5ncy0+ZGVjaW1hdGlvbik7Ci0JCWVycisrOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoc2V0dGluZ3MtPmpwZ19jb21wLnF1YWxpdHkgPiAxMDApCi0JCXNldHRpbmdzLT5qcGdfY29tcC5xdWFsaXR5ID0gMTAwOwotCWlmIChzZXR0aW5ncy0+anBnX2NvbXAucXVhbGl0eSA8IDUpCi0JCXNldHRpbmdzLT5qcGdfY29tcC5xdWFsaXR5ID0gNTsKLQlpZiAoc2V0dGluZ3MtPmpwZ19jb21wLkFQUG4gPCAwKQotCQlzZXR0aW5ncy0+anBnX2NvbXAuQVBQbiA9IDA7Ci0JaWYgKHNldHRpbmdzLT5qcGdfY29tcC5BUFBuID4gMTUpCi0JCXNldHRpbmdzLT5qcGdfY29tcC5BUFBuID0gMTU7Ci0JaWYgKHNldHRpbmdzLT5qcGdfY29tcC5BUFBfbGVuIDwgMCkKLQkJc2V0dGluZ3MtPmpwZ19jb21wLkFQUF9sZW4gPSAwOwotCWlmIChzZXR0aW5ncy0+anBnX2NvbXAuQVBQX2xlbiA+IDYwKQotCQlzZXR0aW5ncy0+anBnX2NvbXAuQVBQX2xlbiA9IDYwOwotCWlmIChzZXR0aW5ncy0+anBnX2NvbXAuQ09NX2xlbiA8IDApCi0JCXNldHRpbmdzLT5qcGdfY29tcC5DT01fbGVuID0gMDsKLQlpZiAoc2V0dGluZ3MtPmpwZ19jb21wLkNPTV9sZW4gPiA2MCkKLQkJc2V0dGluZ3MtPmpwZ19jb21wLkNPTV9sZW4gPSA2MDsKLQlpZiAoZXJyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZAotem9yYW5fb3Blbl9pbml0X3BhcmFtcyAoc3RydWN0IHpvcmFuICp6cikKLXsKLQlpbnQgaTsKLQotCS8qIFVzZXIgbXVzdCBleHBsaWNpdGx5IHNldCBhIHdpbmRvdyAqLwotCXpyLT5vdmVybGF5X3NldHRpbmdzLmlzX3NldCA9IDA7Ci0JenItPm92ZXJsYXlfbWFzayA9IE5VTEw7Ci0JenItPm92ZXJsYXlfYWN0aXZlID0gWk9SQU5fRlJFRTsKLQotCXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgPSAwOwotCXpyLT52NGxfb3ZlcmxheV9hY3RpdmUgPSAwOwotCXpyLT52NGxfZ3JhYl9mcmFtZSA9IE5PX0dSQUJfQUNUSVZFOwotCXpyLT52NGxfZ3JhYl9zZXEgPSAwOwotCXpyLT52NGxfc2V0dGluZ3Mud2lkdGggPSAxOTI7Ci0JenItPnY0bF9zZXR0aW5ncy5oZWlnaHQgPSAxNDQ7Ci0JenItPnY0bF9zZXR0aW5ncy5mb3JtYXQgPSAmem9yYW5fZm9ybWF0c1s3XTsJLyogWVVZMiAtIFlVVi00OjI6MiBwYWNrZWQgKi8KLQl6ci0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZSA9Ci0JICAgIHpyLT52NGxfc2V0dGluZ3Mud2lkdGggKgotCSAgICAoKHpyLT52NGxfc2V0dGluZ3MuZm9ybWF0LT5kZXB0aCArIDcpIC8gOCk7Ci0KLQkvKiBETUEgcmluZyBzdHVmZiBmb3IgVjRMICovCi0JenItPnY0bF9wZW5kX3RhaWwgPSAwOwotCXpyLT52NGxfcGVuZF9oZWFkID0gMDsKLQl6ci0+djRsX3N5bmNfdGFpbCA9IDA7Ci0JenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7Ci0JZm9yIChpID0gMDsgaSA8IFZJREVPX01BWF9GUkFNRTsgaSsrKSB7Ci0JCXpyLT52NGxfYnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsJLyogbm90aGluZyBnb2luZyBvbiAqLwotCX0KLQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBCVVpfTUFYX0ZSQU1FOyBpKyspIHsKLQkJenItPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOwkvKiBub3RoaW5nIGdvaW5nIG9uICovCi0JfQotCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwotCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCS8qIFNldCBuZWNlc3NhcnkgcGFyYW1zIGFuZCBjYWxsIHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyB0byBzZXQgdGhlIGRlZmF1bHRzICovCi0JenItPmpwZ19zZXR0aW5ncy5kZWNpbWF0aW9uID0gMTsKLQl6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLnF1YWxpdHkgPSA1MDsJLyogZGVmYXVsdCBjb21wcmVzc2lvbiBmYWN0b3IgOCAqLwotCWlmICh6ci0+Y2FyZC50eXBlICE9IEJVWikKLQkJenItPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA9IDE7Ci0JZWxzZQotCQl6ci0+anBnX3NldHRpbmdzLm9kZF9ldmVuID0gMDsKLQl6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUG4gPSAwOwotCXpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbiA9IDA7CS8qIE5vIEFQUG4gbWFya2VyICovCi0JbWVtc2V0KHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2RhdGEsIDAsCi0JICAgICAgIHNpemVvZih6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9kYXRhKSk7Ci0JenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuID0gMDsJLyogTm8gQ09NIG1hcmtlciAqLwotCW1lbXNldCh6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9kYXRhLCAwLAotCSAgICAgICBzaXplb2YoenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSkpOwotCXpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuanBlZ19tYXJrZXJzID0KLQkgICAgSlBFR19NQVJLRVJfREhUIHwgSlBFR19NQVJLRVJfRFFUOwotCWkgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZ6ci0+anBnX3NldHRpbmdzKTsKLQlpZiAoaSkKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogem9yYW5fb3Blbl9pbml0X3BhcmFtcygpIGludGVybmFsIGVycm9yXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCi0JY2xlYXJfaW50ZXJydXB0X2NvdW50ZXJzKHpyKTsKLQl6ci0+dGVzdGluZyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdAotdGVzdF9pbnRlcnJ1cHRzIChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCURFRklORV9XQUlUKHdhaXQpOwotCWludCB0aW1lb3V0LCBpY3I7Ci0KLQljbGVhcl9pbnRlcnJ1cHRfY291bnRlcnMoenIpOwotCi0JenItPnRlc3RpbmcgPSAxOwotCWljciA9IGJ0cmVhZChaUjM2MDU3X0lDUik7Ci0JYnR3cml0ZSgweDc4MDAwMDAwIHwgWlIzNjA1N19JQ1JfSW50UGluRW4sIFpSMzYwNTdfSUNSKTsKLQlwcmVwYXJlX3RvX3dhaXQoJnpyLT50ZXN0X3EsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwotCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KEhaKTsKLQlmaW5pc2hfd2FpdCgmenItPnRlc3RfcSwgJndhaXQpOwotCWJ0d3JpdGUoMCwgWlIzNjA1N19JQ1IpOwotCWJ0d3JpdGUoMHg3ODAwMDAwMCwgWlIzNjA1N19JU1IpOwotCXpyLT50ZXN0aW5nID0gMDsKLQlkcHJpbnRrKDUsIEtFUk5fSU5GTyAiJXM6IFRlc3RpbmcgaW50ZXJydXB0cy4uLlxuIiwgWlJfREVWTkFNRSh6cikpOwotCWlmICh0aW1lb3V0KSB7Ci0JCWRwcmludGsoMSwgIjogdGltZSBzcGVudDogJWRcbiIsIDEgKiBIWiAtIHRpbWVvdXQpOwotCX0KLQlpZiAoenIzNjA2N19kZWJ1ZyA+IDEpCi0JCXByaW50X2ludGVycnVwdHMoenIpOwotCWJ0d3JpdGUoaWNyLCBaUjM2MDU3X0lDUik7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci16cjM2MDU3X2luaXQgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JaW50IGosIGVycjsKLQlpbnQgdHdvID0gMjsKLQlpbnQgemVybyA9IDA7Ci0KLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkiJXM6IHpyMzYwNTdfaW5pdCgpIC0gaW5pdGlhbGl6aW5nIGNhcmRbJWRdLCB6cj0lcFxuIiwKLQkJWlJfREVWTkFNRSh6ciksIHpyLT5pZCwgenIpOwotCi0JLyogZGVmYXVsdCBzZXR1cCBvZiBhbGwgcGFyYW1ldGVycyB3aGljaCB3aWxsIHBlcnNpc3QgYmV0d2VlbiBvcGVucyAqLwotCXpyLT51c2VyID0gMDsKLQotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnpyLT52NGxfY2FwcSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmenItPmpwZ19jYXBxKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ6ci0+dGVzdF9xKTsKLQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQotCXpyLT5idWZmZXIuYmFzZSA9ICh2b2lkICopIHZpZG1lbTsKLQl6ci0+YnVmZmVyLndpZHRoID0gMDsKLQl6ci0+YnVmZmVyLmhlaWdodCA9IDA7Ci0JenItPmJ1ZmZlci5kZXB0aCA9IDA7Ci0JenItPmJ1ZmZlci5ieXRlc3BlcmxpbmUgPSAwOwotCi0JLyogQXZvaWQgbm9uc2Vuc2Ugc2V0dGluZ3MgZnJvbSB1c2VyIGZvciBkZWZhdWx0IGlucHV0L25vcm0gKi8KLQlpZiAoZGVmYXVsdF9ub3JtIDwgVklERU9fTU9ERV9QQUwgJiYKLQkgICAgZGVmYXVsdF9ub3JtID4gVklERU9fTU9ERV9TRUNBTSkKLQkJZGVmYXVsdF9ub3JtID0gVklERU9fTU9ERV9QQUw7Ci0JenItPm5vcm0gPSBkZWZhdWx0X25vcm07Ci0JaWYgKCEoenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blt6ci0+bm9ybV0pKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fV0FSTklORwotCQkJIiVzOiB6cjM2MDU3X2luaXQoKSAtIGRlZmF1bHQgVFYgc3RhbmRhcmQgbm90IHN1cHBvcnRlZCBieSBoYXJkd2FyZS4gUEFMIHdpbGwgYmUgdXNlZC5cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXpyLT5ub3JtID0gVklERU9fTU9ERV9QQUw7Ci0JCXpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5benItPm5vcm1dOwotCX0KLQotCWlmIChkZWZhdWx0X2lucHV0ID4genItPmNhcmQuaW5wdXRzLTEpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9XQVJOSU5HCi0JCQkiJXM6IGRlZmF1bHRfaW5wdXQgdmFsdWUgJWQgb3V0IG9mIHJhbmdlICgwLSVkKVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBkZWZhdWx0X2lucHV0LCB6ci0+Y2FyZC5pbnB1dHMtMSk7Ci0JCWRlZmF1bHRfaW5wdXQgPSAwOwotCX0KLQl6ci0+aW5wdXQgPSBkZWZhdWx0X2lucHV0OwotCi0JLyogU2hvdWxkIHRoZSBmb2xsb3dpbmcgYmUgcmVzZXQgYXQgZXZlcnkgb3BlbiA/ICovCi0JenItPmh1ZSA9IDMyNzY4OwotCXpyLT5jb250cmFzdCA9IDMyNzY4OwotCXpyLT5zYXR1cmF0aW9uID0gMzI3Njg7Ci0JenItPmJyaWdodG5lc3MgPSAzMjc2ODsKLQotCS8qIGRlZmF1bHQgc2V0dXAgKHdpbGwgYmUgcmVwZWF0ZWQgYXQgZXZlcnkgb3BlbikgKi8KLQl6b3Jhbl9vcGVuX2luaXRfcGFyYW1zKHpyKTsKLQotCS8qIGFsbG9jYXRlIG1lbW9yeSAqYmVmb3JlKiBkb2luZyBhbnl0aGluZyB0byB0aGUgaGFyZHdhcmUKLQkgKiBpbiBjYXNlIGFsbG9jYXRpb24gZmFpbHMgKi8KLQl6ci0+c3RhdF9jb20gPSBremFsbG9jKEJVWl9OVU1fU1RBVF9DT00gKiA0LCBHRlBfS0VSTkVMKTsKLQl6ci0+dmlkZW9fZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZpZGVvX2RldmljZSksIEdGUF9LRVJORUwpOwotCWlmICghenItPnN0YXRfY29tIHx8ICF6ci0+dmlkZW9fZGV2KSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHpyMzYwNTdfaW5pdCgpIC0ga21hbGxvYyAoU1RBVF9DT00pIGZhaWxlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBleGl0X2ZyZWU7Ci0JfQotCWZvciAoaiA9IDA7IGogPCBCVVpfTlVNX1NUQVRfQ09NOyBqKyspIHsKLQkJenItPnN0YXRfY29tW2pdID0gY3B1X3RvX2xlMzIoMSk7IC8qIG1hcmsgYXMgdW5hdmFpbGFibGUgdG8genIzNjA1NyAqLwotCX0KLQotCS8qCi0JICogICBOb3cgYWRkIHRoZSB0ZW1wbGF0ZSBhbmQgcmVnaXN0ZXIgdGhlIGRldmljZSB1bml0LgotCSAqLwotCW1lbWNweSh6ci0+dmlkZW9fZGV2LCAmem9yYW5fdGVtcGxhdGUsIHNpemVvZih6b3Jhbl90ZW1wbGF0ZSkpOwotCXN0cmNweSh6ci0+dmlkZW9fZGV2LT5uYW1lLCBaUl9ERVZOQU1FKHpyKSk7Ci0JZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHpyLT52aWRlb19kZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yW3pyLT5pZF0pOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGV4aXRfdW5yZWdpc3RlcjsKLQotCXpvcmFuX2luaXRfaGFyZHdhcmUoenIpOwotCWlmICh6cjM2MDY3X2RlYnVnID4gMikKLQkJZGV0ZWN0X2d1ZXN0X2FjdGl2aXR5KHpyKTsKLQl0ZXN0X2ludGVycnVwdHMoenIpOwotCWlmICghcGFzc190aHJvdWdoKSB7Ci0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9FTkFCTEVfT1VUUFVULCAmemVybyk7Ci0JCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfSU5QVVQsICZ0d28pOwotCX0KLQotCXpyLT56b3Jhbl9wcm9jID0gTlVMTDsKLQl6ci0+aW5pdGlhbGl6ZWQgPSAxOwotCXJldHVybiAwOwotCi1leGl0X3VucmVnaXN0ZXI6Ci0Jem9yYW5fdW5yZWdpc3Rlcl9pMmMoenIpOwotZXhpdF9mcmVlOgotCWtmcmVlKHpyLT5zdGF0X2NvbSk7Ci0Ja2ZyZWUoenItPnZpZGVvX2Rldik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQKLXpvcmFuX3JlbGVhc2UgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JaWYgKCF6ci0+aW5pdGlhbGl6ZWQpCi0JCWdvdG8gZXhpdF9mcmVlOwotCS8qIHVucmVnaXN0ZXIgdmlkZW9jb2RlYyBidXMgKi8KLQlpZiAoenItPmNvZGVjKSB7Ci0JCXN0cnVjdCB2aWRlb2NvZGVjX21hc3RlciAqbWFzdGVyID0genItPmNvZGVjLT5tYXN0ZXJfZGF0YTsKLQotCQl2aWRlb2NvZGVjX2RldGFjaCh6ci0+Y29kZWMpOwotCQlrZnJlZShtYXN0ZXIpOwotCX0KLQlpZiAoenItPnZmZSkgewotCQlzdHJ1Y3QgdmlkZW9jb2RlY19tYXN0ZXIgKm1hc3RlciA9IHpyLT52ZmUtPm1hc3Rlcl9kYXRhOwotCi0JCXZpZGVvY29kZWNfZGV0YWNoKHpyLT52ZmUpOwotCQlrZnJlZShtYXN0ZXIpOwotCX0KLQotCS8qIHVucmVnaXN0ZXIgaTJjIGJ1cyAqLwotCXpvcmFuX3VucmVnaXN0ZXJfaTJjKHpyKTsKLQkvKiBkaXNhYmxlIFBDSSBidXMtbWFzdGVyaW5nICovCi0Jem9yYW5fc2V0X3BjaV9tYXN0ZXIoenIsIDApOwotCS8qIHB1dCBjaGlwIGludG8gcmVzZXQgKi8KLQlidHdyaXRlKDAsIFpSMzYwNTdfU1BHUFBDUik7Ci0JZnJlZV9pcnEoenItPnBjaV9kZXYtPmlycSwgenIpOwotCS8qIHVubWFwIGFuZCBmcmVlIG1lbW9yeSAqLwotCWtmcmVlKHpyLT5zdGF0X2NvbSk7Ci0Jem9yYW5fcHJvY19jbGVhbnVwKHpyKTsKLQlpb3VubWFwKHpyLT56cjM2MDU3X21lbSk7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHpyLT5wY2lfZGV2KTsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh6ci0+dmlkZW9fZGV2KTsKLWV4aXRfZnJlZToKLQlrZnJlZSh6cik7Ci19Ci0KLXZvaWQKLXpvcmFuX3ZkZXZfcmVsZWFzZSAoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKLXsKLQlrZnJlZSh2ZGV2KTsKLX0KLQotc3RhdGljIHN0cnVjdCB2aWRlb2NvZGVjX21hc3RlciAqIF9fZGV2aW5pdAotem9yYW5fc2V0dXBfdmlkZW9jb2RlYyAoc3RydWN0IHpvcmFuICp6ciwKLQkJCWludCAgICAgICAgICAgdHlwZSkKLXsKLQlzdHJ1Y3QgdmlkZW9jb2RlY19tYXN0ZXIgKm0gPSBOVUxMOwotCi0JbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2aWRlb2NvZGVjX21hc3RlciksIEdGUF9LRVJORUwpOwotCWlmICghbSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiB6b3Jhbl9zZXR1cF92aWRlb2NvZGVjKCkgLSBubyBtZW1vcnlcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiBtOwotCX0KLQotCS8qIG1hZ2ljIGFuZCB0eXBlIGFyZSB1bnVzZWQgZm9yIG1hc3RlciBzdHJ1Y3QuIE1ha2VzIHNlbnNlIG9ubHkgYXQKLQkgICBjb2RlYyBzdHJ1Y3RzLgotCSAgIEluIHRoZSBwYXN0LCAudHlwZSB3ZXJlIGluaXRpYWxpemVkIHRvIHRoZSBvbGQgVjRMMSAuaGFyZHdhcmUKLQkgICB2YWx1ZSwgYXMgVklEX0hBUkRXQVJFX1pSMzYwNjcKLQkgKi8KLQltLT5tYWdpYyA9IDBMOwotCW0tPnR5cGUgPSAwOwotCi0JbS0+ZmxhZ3MgPSBDT0RFQ19GTEFHX0VOQ09ERVIgfCBDT0RFQ19GTEFHX0RFQ09ERVI7Ci0Jc3RybmNweShtLT5uYW1lLCBaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKG0tPm5hbWUpKTsKLQltLT5kYXRhID0genI7Ci0KLQlzd2l0Y2ggKHR5cGUpCi0JewotCWNhc2UgQ09ERUNfVFlQRV9aUjM2MDYwOgotCQltLT5yZWFkcmVnID0genIzNjA2MF9yZWFkOwotCQltLT53cml0ZXJlZyA9IHpyMzYwNjBfd3JpdGU7Ci0JCW0tPmZsYWdzIHw9IENPREVDX0ZMQUdfSlBFRyB8IENPREVDX0ZMQUdfVkZFOwotCQlicmVhazsKLQljYXNlIENPREVDX1RZUEVfWlIzNjA1MDoKLQkJbS0+cmVhZHJlZyA9IHpyMzYwNTBfcmVhZDsKLQkJbS0+d3JpdGVyZWcgPSB6cjM2MDUwX3dyaXRlOwotCQltLT5mbGFncyB8PSBDT0RFQ19GTEFHX0pQRUc7Ci0JCWJyZWFrOwotCWNhc2UgQ09ERUNfVFlQRV9aUjM2MDE2OgotCQltLT5yZWFkcmVnID0genIzNjAxNl9yZWFkOwotCQltLT53cml0ZXJlZyA9IHpyMzYwMTZfd3JpdGU7Ci0JCW0tPmZsYWdzIHw9IENPREVDX0ZMQUdfVkZFOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gbTsKLX0KLQotLyoKLSAqICAgU2NhbiBmb3IgYSBCdXogY2FyZCAoYWN0dWFsbHkgZm9yIHRoZSBQQ0kgY29udHJvbGxlciBaUjM2MDU3KSwKLSAqICAgcmVxdWVzdCB0aGUgaXJxIGFuZCBtYXAgdGhlIGlvIG1lbW9yeQotICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdAotZmluZF96cjM2MDU3ICh2b2lkKQotewotCXVuc2lnbmVkIGNoYXIgbGF0ZW5jeSwgbmVlZF9sYXRlbmN5OwotCXN0cnVjdCB6b3JhbiAqenI7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7Ci0JaW50IHJlc3VsdDsKLQlzdHJ1Y3QgdmlkZW9jb2RlY19tYXN0ZXIgKm1hc3Rlcl92ZmUgPSBOVUxMOwotCXN0cnVjdCB2aWRlb2NvZGVjX21hc3RlciAqbWFzdGVyX2NvZGVjID0gTlVMTDsKLQlpbnQgY2FyZF9udW07Ci0JY2hhciAqaTJjX2VuY19uYW1lLCAqaTJjX2RlY19uYW1lLCAqY29kZWNfbmFtZSwgKnZmZV9uYW1lOwotCi0Jem9yYW5fbnVtID0gMDsKLQl3aGlsZSAoem9yYW5fbnVtIDwgQlVaX01BWCAmJgotCSAgICAgICAoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9aT1JBTiwgUENJX0RFVklDRV9JRF9aT1JBTl8zNjA1NywgZGV2KSkgIT0gTlVMTCkgewotCQljYXJkX251bSA9IGNhcmRbem9yYW5fbnVtXTsKLQkJenIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgem9yYW4pLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF6cikgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIGt6YWxsb2MgZmFpbGVkXG4iLAotCQkJCVpPUkFOX05BTUUpOwotCQkJY29udGludWU7Ci0JCX0KLQkJenItPnBjaV9kZXYgPSBkZXY7Ci0JCS8venItPnpyMzYwNTdfbWVtID0gTlVMTDsKLQkJenItPmlkID0gem9yYW5fbnVtOwotCQlzbnByaW50ZihaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKFpSX0RFVk5BTUUoenIpKSwgIk1KUEVHWyV1XSIsIHpyLT5pZCk7Ci0JCXNwaW5fbG9ja19pbml0KCZ6ci0+c3BpbmxvY2spOwotCQltdXRleF9pbml0KCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYpKQotCQkJZ290byB6cl9mcmVlX21lbTsKLQkJenItPnpyMzYwNTdfYWRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHpyLT5wY2lfZGV2LCAwKTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoenItPnBjaV9kZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwKLQkJCQkgICAgICZ6ci0+cmV2aXNpb24pOwotCQlpZiAoenItPnJldmlzaW9uIDwgMikgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fSU5GTwotCQkJCSIlczogWm9yYW4gWlIzNjA1NyAocmV2ICVkKSBpcnE6ICVkLCBtZW1vcnk6IDB4JTA4eC5cbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIHpyLT5yZXZpc2lvbiwgenItPnBjaV9kZXYtPmlycSwKLQkJCQl6ci0+enIzNjA1N19hZHIpOwotCi0JCQlpZiAoY2FyZF9udW0gPT0gLTEpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBubyBjYXJkIHNwZWNpZmllZCwgcGxlYXNlIHVzZSB0aGUgY2FyZD1YIGluc21vZCBvcHRpb25cbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCQlnb3RvIHpyX2ZyZWVfbWVtOwotCQkJfQotCQl9IGVsc2UgewotCQkJaW50IGk7Ci0JCQl1bnNpZ25lZCBzaG9ydCBzc192ZW5kb3IsIHNzX2RldmljZTsKLQotCQkJc3NfdmVuZG9yID0genItPnBjaV9kZXYtPnN1YnN5c3RlbV92ZW5kb3I7Ci0JCQlzc19kZXZpY2UgPSB6ci0+cGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZTsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0lORk8KLQkJCQkiJXM6IFpvcmFuIFpSMzYwNjcgKHJldiAlZCkgaXJxOiAlZCwgbWVtb3J5OiAweCUwOHhcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIHpyLT5yZXZpc2lvbiwgenItPnBjaV9kZXYtPmlycSwKLQkJCQl6ci0+enIzNjA1N19hZHIpOwotCQkJZHByaW50aygxLAotCQkJCUtFUk5fSU5GTwotCQkJCSIlczogc3Vic3lzdGVtIHZlbmRvcj0weCUwNHggaWQ9MHglMDR4XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBzc192ZW5kb3IsIHNzX2RldmljZSk7Ci0JCQlpZiAoY2FyZF9udW0gPT0gLTEpIHsKLQkJCQlkcHJpbnRrKDMsCi0JCQkJCUtFUk5fREVCVUcKLQkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIHRyeWluZyB0byBhdXRvZGV0ZWN0IGNhcmQgdHlwZVxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCWZvciAoaT0wO2k8TlVNX0NBUkRTO2krKykgewotCQkJCQlpZiAoc3NfdmVuZG9yID09IHpvcmFuX2NhcmRzW2ldLnZlbmRvcl9pZCAmJgotCQkJCQkgICAgc3NfZGV2aWNlID09IHpvcmFuX2NhcmRzW2ldLmRldmljZV9pZCkgewotCQkJCQkJZHByaW50aygzLAotCQkJCQkJCUtFUk5fREVCVUcKLQkJCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gY2FyZCAlcyBkZXRlY3RlZFxuIiwKLQkJCQkJCQlaUl9ERVZOQU1FKHpyKSwKLQkJCQkJCQl6b3Jhbl9jYXJkc1tpXS5uYW1lKTsKLQkJCQkJCWNhcmRfbnVtID0gaTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChpID09IE5VTV9DQVJEUykgewotCQkJCQlkcHJpbnRrKDEsCi0JCQkJCQlLRVJOX0VSUgotCQkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIHVua25vd24gY2FyZFxuIiwKLQkJCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCQkJZ290byB6cl9mcmVlX21lbTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlpZiAoY2FyZF9udW0gPCAwIHx8IGNhcmRfbnVtID49IE5VTV9DQVJEUykgewotCQkJZHByaW50aygyLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIGludmFsaWQgY2FyZG51bSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgY2FyZF9udW0pOwotCQkJZ290byB6cl9mcmVlX21lbTsKLQkJfQotCi0JCS8qIGV2ZW4gdGhvdWdoIHdlIG1ha2UgdGhpcyBhIG5vbiBwb2ludGVyIGFuZCB0aHVzCi0JCSAqIHRoZW9yZXRpY2FsbHkgYWxsb3cgZm9yIG1ha2luZyBjaGFuZ2VzIHRvIHRoaXMgc3RydWN0Ci0JCSAqIG9uIGEgcGVyLWluZGl2aWR1YWwgY2FyZCBiYXNpcyBhdCBydW50aW1lLCB0aGlzIGlzCi0JCSAqIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLiBUaGlzIHN0cnVjdHVyZSBpcyBpbnRlbmRlZCB0bwotCQkgKiBrZWVwIGdlbmVyYWwgY2FyZCBpbmZvcm1hdGlvbiwgbm8gc2V0dGluZ3Mgb3IgYW55dGhpbmcgKi8KLQkJenItPmNhcmQgPSB6b3Jhbl9jYXJkc1tjYXJkX251bV07Ci0JCXNucHJpbnRmKFpSX0RFVk5BTUUoenIpLCBzaXplb2YoWlJfREVWTkFNRSh6cikpLAotCQkJICIlc1sldV0iLCB6ci0+Y2FyZC5uYW1lLCB6ci0+aWQpOwotCi0JCXpyLT56cjM2MDU3X21lbSA9IGlvcmVtYXBfbm9jYWNoZSh6ci0+enIzNjA1N19hZHIsIDB4MTAwMCk7Ci0JCWlmICghenItPnpyMzYwNTdfbWVtKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gaW9yZW1hcCBmYWlsZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJZ290byB6cl9mcmVlX21lbTsKLQkJfQotCi0JCXJlc3VsdCA9IHJlcXVlc3RfaXJxKHpyLT5wY2lfZGV2LT5pcnEsCi0JCQkJICAgICB6b3Jhbl9pcnEsCi0JCQkJICAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsCi0JCQkJICAgICBaUl9ERVZOQU1FKHpyKSwKLQkJCQkgICAgICh2b2lkICopIHpyKTsKLQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCWlmIChyZXN1bHQgPT0gLUVJTlZBTCkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIGJhZCBpcnEgbnVtYmVyIG9yIGhhbmRsZXJcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCX0gZWxzZSBpZiAocmVzdWx0ID09IC1FQlVTWSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIElSUSAlZCBidXN5LCBjaGFuZ2UgeW91ciBQblAgY29uZmlnIGluIEJJT1NcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCB6ci0+cGNpX2Rldi0+aXJxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gY2FuJ3QgYXNzaWduIGlycSwgZXJyb3IgY29kZSAlZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIHJlc3VsdCk7Ci0JCQl9Ci0JCQlnb3RvIHpyX3VubWFwOwotCQl9Ci0KLQkJLyogc2V0IFBDSSBsYXRlbmN5IHRpbWVyICovCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHpyLT5wY2lfZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwKLQkJCQkgICAgICZsYXRlbmN5KTsKLQkJbmVlZF9sYXRlbmN5ID0genItPnJldmlzaW9uID4gMSA/IDMyIDogNDg7Ci0JCWlmIChsYXRlbmN5ICE9IG5lZWRfbGF0ZW5jeSkgewotCQkJZHByaW50aygyLAotCQkJCUtFUk5fSU5GTwotCQkJCSIlczogQ2hhbmdpbmcgUENJIGxhdGVuY3kgZnJvbSAlZCB0byAlZC5cbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGxhdGVuY3ksIG5lZWRfbGF0ZW5jeSk7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoenItPnBjaV9kZXYsCi0JCQkJCSAgICAgIFBDSV9MQVRFTkNZX1RJTUVSLAotCQkJCQkgICAgICBuZWVkX2xhdGVuY3kpOwotCQl9Ci0KLQkJenIzNjA1N19yZXN0YXJ0KHpyKTsKLQkJLyogaTJjICovCi0JCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogSW5pdGlhbGl6aW5nIGkyYyBidXMuLi5cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJLyogaTJjIGRlY29kZXIgKi8KLQkJaWYgKGRlY29kZXJbenItPmlkXSAhPSAtMSkgewotCQkJaTJjX2RlY19uYW1lID0gaTJjaWRfdG9fbW9kdWxlbmFtZShkZWNvZGVyW3pyLT5pZF0pOwotCQkJenItPmNhcmQuaTJjX2RlY29kZXIgPSBkZWNvZGVyW3pyLT5pZF07Ci0JCX0gZWxzZSBpZiAoenItPmNhcmQuaTJjX2RlY29kZXIgIT0gMCkgewotCQkJaTJjX2RlY19uYW1lID0KLQkJCQlpMmNpZF90b19tb2R1bGVuYW1lKHpyLT5jYXJkLmkyY19kZWNvZGVyKTsKLQkJfSBlbHNlIHsKLQkJCWkyY19kZWNfbmFtZSA9IE5VTEw7Ci0JCX0KLQotCQlpZiAoaTJjX2RlY19uYW1lKSB7Ci0JCQlpZiAoKHJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKGkyY19kZWNfbmFtZSkpIDwgMCkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBmYWlsZWQgdG8gbG9hZCBtb2R1bGUgJXM6ICVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgaTJjX2RlY19uYW1lLCByZXN1bHQpOwotCQkJfQotCQl9Ci0KLQkJLyogaTJjIGVuY29kZXIgKi8KLQkJaWYgKGVuY29kZXJbenItPmlkXSAhPSAtMSkgewotCQkJaTJjX2VuY19uYW1lID0gaTJjaWRfdG9fbW9kdWxlbmFtZShlbmNvZGVyW3pyLT5pZF0pOwotCQkJenItPmNhcmQuaTJjX2VuY29kZXIgPSBlbmNvZGVyW3pyLT5pZF07Ci0JCX0gZWxzZSBpZiAoenItPmNhcmQuaTJjX2VuY29kZXIgIT0gMCkgewotCQkJaTJjX2VuY19uYW1lID0KLQkJCQlpMmNpZF90b19tb2R1bGVuYW1lKHpyLT5jYXJkLmkyY19lbmNvZGVyKTsKLQkJfSBlbHNlIHsKLQkJCWkyY19lbmNfbmFtZSA9IE5VTEw7Ci0JCX0KLQotCQlpZiAoaTJjX2VuY19uYW1lKSB7Ci0JCQlpZiAoKHJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKGkyY19lbmNfbmFtZSkpIDwgMCkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBmYWlsZWQgdG8gbG9hZCBtb2R1bGUgJXM6ICVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgaTJjX2VuY19uYW1lLCByZXN1bHQpOwotCQkJfQotCQl9Ci0KLQkJaWYgKHpvcmFuX3JlZ2lzdGVyX2kyYyh6cikgPCAwKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gY2FuJ3QgaW5pdGlhbGl6ZSBpMmMgYnVzXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCWdvdG8genJfZnJlZV9pcnE7Ci0JCX0KLQotCQlkcHJpbnRrKDIsCi0JCQlLRVJOX0lORk8gIiVzOiBJbml0aWFsaXppbmcgdmlkZW9jb2RlYyBidXMuLi5cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJaWYgKHpyLT5jYXJkLnZpZGVvX2NvZGVjICE9IDAgJiYKLQkJICAgIChjb2RlY19uYW1lID0KLQkJICAgICBjb2RlY2lkX3RvX21vZHVsZW5hbWUoenItPmNhcmQudmlkZW9fY29kZWMpKSAhPSBOVUxMKSB7Ci0JCQlpZiAoKHJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKGNvZGVjX25hbWUpKSA8IDApIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogZmFpbGVkIHRvIGxvYWQgbW9kdWxlcyAlczogJWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBjb2RlY19uYW1lLCByZXN1bHQpOwotCQkJfQotCQl9Ci0JCWlmICh6ci0+Y2FyZC52aWRlb192ZmUgIT0gMCAmJgotCQkgICAgKHZmZV9uYW1lID0KLQkJICAgICBjb2RlY2lkX3RvX21vZHVsZW5hbWUoenItPmNhcmQudmlkZW9fdmZlKSkgIT0gTlVMTCkgewotCQkJaWYgKChyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSh2ZmVfbmFtZSkpIDwgMCkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBmYWlsZWQgdG8gbG9hZCBtb2R1bGVzICVzOiAlZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIHZmZV9uYW1lLCByZXN1bHQpOwotCQkJfQotCQl9Ci0KLQkJLyogcmVzZXQgSlBFRyBjb2RlYyAqLwotCQlqcGVnX2NvZGVjX3NsZWVwKHpyLCAxKTsKLQkJanBlZ19jb2RlY19yZXNldCh6cik7Ci0JCS8qIHZpZGVvIGJ1cyBlbmFibGVkICovCi0JCS8qIGRpc3BsYXkgY29kZWMgcmV2aXNpb24gKi8KLQkJaWYgKHpyLT5jYXJkLnZpZGVvX2NvZGVjICE9IDApIHsKLQkJCW1hc3Rlcl9jb2RlYyA9IHpvcmFuX3NldHVwX3ZpZGVvY29kZWMoenIsCi0JCQkJCQkJICAgICAgenItPmNhcmQudmlkZW9fY29kZWMpOwotCQkJaWYgKCFtYXN0ZXJfY29kZWMpCi0JCQkJZ290byB6cl91bnJlZ19pMmM7Ci0JCQl6ci0+Y29kZWMgPSB2aWRlb2NvZGVjX2F0dGFjaChtYXN0ZXJfY29kZWMpOwotCQkJaWYgKCF6ci0+Y29kZWMpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBubyBjb2RlYyBmb3VuZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCWdvdG8genJfZnJlZV9jb2RlYzsKLQkJCX0KLQkJCWlmICh6ci0+Y29kZWMtPnR5cGUgIT0genItPmNhcmQudmlkZW9fY29kZWMpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSB3cm9uZyBjb2RlY1xuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCWdvdG8genJfZGV0YWNoX2NvZGVjOwotCQkJfQotCQl9Ci0JCWlmICh6ci0+Y2FyZC52aWRlb192ZmUgIT0gMCkgewotCQkJbWFzdGVyX3ZmZSA9IHpvcmFuX3NldHVwX3ZpZGVvY29kZWMoenIsCi0JCQkJCQkJICAgIHpyLT5jYXJkLnZpZGVvX3ZmZSk7Ci0JCQlpZiAoIW1hc3Rlcl92ZmUpCi0JCQkJZ290byB6cl9kZXRhY2hfY29kZWM7Ci0JCQl6ci0+dmZlID0gdmlkZW9jb2RlY19hdHRhY2gobWFzdGVyX3ZmZSk7Ci0JCQlpZiAoIXpyLT52ZmUpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBubyBWRkUgZm91bmRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCQlnb3RvIHpyX2ZyZWVfdmZlOwotCQkJfQotCQkJaWYgKHpyLT52ZmUtPnR5cGUgIT0genItPmNhcmQudmlkZW9fdmZlKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpID0gd3JvbmcgVkZFXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkJZ290byB6cl9kZXRhY2hfdmZlOwotCQkJfQotCQl9Ci0JCS8qIFN1Y2Nlc3Mgc28ga2VlcCB0aGUgcGNpX2RldiByZWZlcmVuY2VkICovCi0JCXBjaV9kZXZfZ2V0KHpyLT5wY2lfZGV2KTsKLQkJem9yYW5bem9yYW5fbnVtKytdID0genI7Ci0JCWNvbnRpbnVlOwotCi0JCS8vIEluaXQgZXJyb3JzCi0JICAgICAgenJfZGV0YWNoX3ZmZToKLQkJdmlkZW9jb2RlY19kZXRhY2goenItPnZmZSk7Ci0JICAgICAgenJfZnJlZV92ZmU6Ci0JCWtmcmVlKG1hc3Rlcl92ZmUpOwotCSAgICAgIHpyX2RldGFjaF9jb2RlYzoKLQkJdmlkZW9jb2RlY19kZXRhY2goenItPmNvZGVjKTsKLQkgICAgICB6cl9mcmVlX2NvZGVjOgotCQlrZnJlZShtYXN0ZXJfY29kZWMpOwotCSAgICAgIHpyX3VucmVnX2kyYzoKLQkJem9yYW5fdW5yZWdpc3Rlcl9pMmMoenIpOwotCSAgICAgIHpyX2ZyZWVfaXJxOgotCQlidHdyaXRlKDAsIFpSMzYwNTdfU1BHUFBDUik7Ci0JCWZyZWVfaXJxKHpyLT5wY2lfZGV2LT5pcnEsIHpyKTsKLQkgICAgICB6cl91bm1hcDoKLQkJaW91bm1hcCh6ci0+enIzNjA1N19tZW0pOwotCSAgICAgIHpyX2ZyZWVfbWVtOgotCQlrZnJlZSh6cik7Ci0JCWNvbnRpbnVlOwotCX0KLQlpZiAoZGV2KQkvKiBDbGVhbiB1cCByZWYgY291bnQgb24gZWFybHkgZXhpdCAqLwotCQlwY2lfZGV2X3B1dChkZXYpOwotCi0JaWYgKHpvcmFuX251bSA9PSAwKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICJObyBrbm93biBNSlBFRyBjYXJkcyBmb3VuZC5cbiIpOwotCX0KLQlyZXR1cm4gem9yYW5fbnVtOwotfQotCi1zdGF0aWMgaW50IF9faW5pdAotaW5pdF9kYzEwX2NhcmRzICh2b2lkKQotewotCWludCBpOwotCi0JbWVtc2V0KHpvcmFuLCAwLCBzaXplb2Yoem9yYW4pKTsKLQlwcmludGsoS0VSTl9JTkZPICJab3JhbiBNSlBFRyBib2FyZCBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZFxuIiwKLQkgICAgICAgTUFKT1JfVkVSU0lPTiwgTUlOT1JfVkVSU0lPTiwgUkVMRUFTRV9WRVJTSU9OKTsKLQotCS8qIExvb2sgZm9yIGNhcmRzICovCi0JaWYgKGZpbmRfenIzNjA1NygpIDwgMCkgewotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JaWYgKHpvcmFuX251bSA9PSAwKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6ICVkIGNhcmQocykgZm91bmRcbiIsIFpPUkFOX05BTUUsCi0JCXpvcmFuX251bSk7Ci0JLyogY2hlY2sgdGhlIHBhcmFtZXRlcnMgd2UgaGF2ZSBiZWVuIGdpdmVuLCBhZGp1c3QgaWYgbmVjZXNzYXJ5ICovCi0JaWYgKHY0bF9uYnVmcyA8IDIpCi0JCXY0bF9uYnVmcyA9IDI7Ci0JaWYgKHY0bF9uYnVmcyA+IFZJREVPX01BWF9GUkFNRSkKLQkJdjRsX25idWZzID0gVklERU9fTUFYX0ZSQU1FOwotCS8qIFRoZSB1c2VyIHNwZWNmaWVzIHRoZSBpbiBLQiwgd2Ugd2FudCB0aGVtIGluIGJ5dGUKLQkgKiAoYW5kIHBhZ2UgYWxpZ25lZCkgKi8KLQl2NGxfYnVmc2l6ZSA9IFBBR0VfQUxJR04odjRsX2J1ZnNpemUgKiAxMDI0KTsKLQlpZiAodjRsX2J1ZnNpemUgPCAzMjc2OCkKLQkJdjRsX2J1ZnNpemUgPSAzMjc2ODsKLQkvKiAyIE1CIGlzIGFyYml0cmFyeSBidXQgc3VmZmljaWVudCBmb3IgdGhlIG1heGltdW0gcG9zc2libGUgaW1hZ2VzICovCi0JaWYgKHY0bF9idWZzaXplID4gMjA0OCAqIDEwMjQpCi0JCXY0bF9idWZzaXplID0gMjA0OCAqIDEwMjQ7Ci0JaWYgKGpwZ19uYnVmcyA8IDQpCi0JCWpwZ19uYnVmcyA9IDQ7Ci0JaWYgKGpwZ19uYnVmcyA+IEJVWl9NQVhfRlJBTUUpCi0JCWpwZ19uYnVmcyA9IEJVWl9NQVhfRlJBTUU7Ci0JanBnX2J1ZnNpemUgPSBQQUdFX0FMSUdOKGpwZ19idWZzaXplICogMTAyNCk7Ci0JaWYgKGpwZ19idWZzaXplIDwgODE5MikKLQkJanBnX2J1ZnNpemUgPSA4MTkyOwotCWlmIChqcGdfYnVmc2l6ZSA+ICg1MTIgKiAxMDI0KSkKLQkJanBnX2J1ZnNpemUgPSA1MTIgKiAxMDI0OwotCS8qIFVzZSBwYXJhbWV0ZXIgZm9yIHZpZG1lbSBvciB0cnkgdG8gZmluZCBhIHZpZGVvIGNhcmQgKi8KLQlpZiAodmlkbWVtKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fSU5GTwotCQkJIiVzOiBVc2luZyBzdXBwbGllZCB2aWRlbyBtZW1vcnkgYmFzZSBhZGRyZXNzIEAgMHglbHhcbiIsCi0JCQlaT1JBTl9OQU1FLCB2aWRtZW0pOwotCX0KLQotCS8qIHJhbmRvbSBub25zZW5zZSAqLwotCWRwcmludGsoNiwgS0VSTl9ERUJVRyAiSm90dGkgaXMgZWVuIGhlbGQhXG4iKTsKLQotCS8qIHNvbWUgbWFpbmJvYXJkcyBtaWdodCBub3QgZG8gUENJLVBDSSBkYXRhIHRyYW5zZmVyIHdlbGwgKi8KLQlpZiAocGNpX3BjaV9wcm9ibGVtcyAmIChQQ0lQQ0lfRkFJTHxQQ0lBR1BfRkFJTHxQQ0lQQ0lfQUxJTUFHSUspKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fV0FSTklORwotCQkJIiVzOiBjaGlwc2V0IGRvZXMgbm90IHN1cHBvcnQgcmVsaWFibGUgUENJLVBDSSBETUFcbiIsCi0JCQlaT1JBTl9OQU1FKTsKLQl9Ci0KLQkvKiB0YWtlIGNhcmUgb2YgTmF0b21hIGNoaXBzZXQgYW5kIGEgcmV2aXNpb24gMSB6cjM2MDU3ICovCi0JZm9yIChpID0gMDsgaSA8IHpvcmFuX251bTsgaSsrKSB7Ci0JCXN0cnVjdCB6b3JhbiAqenIgPSB6b3JhbltpXTsKLQotCQlpZiAoKHBjaV9wY2lfcHJvYmxlbXMgJiBQQ0lQQ0lfTkFUT01BKSAmJiB6ci0+cmV2aXNpb24gPD0gMSkgewotCQkJenItPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cyA9IDE7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9JTkZPCi0JCQkJIiVzOiBaUjM2MDU3L05hdG9tYSBidWcsIG1heC4gYnVmZmVyIHNpemUgaXMgMTI4S1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCX0KLQotCQlpZiAoenIzNjA1N19pbml0KHpyKSA8IDApIHsKLQkJCWZvciAoaSA9IDA7IGkgPCB6b3Jhbl9udW07IGkrKykKLQkJCQl6b3Jhbl9yZWxlYXNlKHpvcmFuW2ldKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCXpvcmFuX3Byb2NfaW5pdCh6cik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotdW5sb2FkX2RjMTBfY2FyZHMgKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgem9yYW5fbnVtOyBpKyspCi0JCXpvcmFuX3JlbGVhc2Uoem9yYW5baV0pOwotfQotCi1tb2R1bGVfaW5pdChpbml0X2RjMTBfY2FyZHMpOwotbW9kdWxlX2V4aXQodW5sb2FkX2RjMTBfY2FyZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kZXZpY2UuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZGV2aWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZDM2OTcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kZXZpY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDE3NDkgKzAsMCBAQAotLyoKLSAqIFpvcmFuIHpyMzYwNTcvenIzNjA2NyBQQ0kgY29udHJvbGxlciBkcml2ZXIsIGZvciB0aGUKLSAqIFBpbm5hY2xlL01pcm8gREMxMC9EQzEwKy9EQzMwL0RDMzArLCBJb21lZ2EgQnV6LCBMaW51eAotICogTWVkaWEgTGFicyBMTUwzMy9MTUwzM1IxMC4KLSAqCi0gKiBUaGlzIHBhcnQgaGFuZGxlcyBkZXZpY2UgYWNjZXNzIChQQ0kvSTJDL2NvZGVjLy4uLikKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgU2VyZ3VlaSBNaXJpZG9ub3YgPG1pcnNldkBjaWNlc2UubXg+Ci0gKgotICogQ3VycmVudGx5IG1haW50YWluZWQgYnk6Ci0gKiAgIFJvbmFsZCBCdWx0amUgICAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqICAgTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBza3luZXQuYmU+Ci0gKiAgIE1haWxpbmdsaXN0ICAgICAgPG1qcGVnLXVzZXJzQGxpc3RzLnNmLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3NlbS5oPgotCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2luY2x1ZGUgInZpZGVvY29kZWMuaCIKLSNpbmNsdWRlICJ6b3Jhbi5oIgotI2luY2x1ZGUgInpvcmFuX2RldmljZS5oIgotI2luY2x1ZGUgInpvcmFuX2NhcmQuaCIKLQotI2RlZmluZSBJUlFfTUFTSyAoIFpSMzYwNTdfSVNSX0dJUlEwIHwgXAotCQkgICBaUjM2MDU3X0lTUl9HSVJRMSB8IFwKLQkJICAgWlIzNjA1N19JU1JfSlBFR1JlcElSUSApCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3Qgem9yYW5fZm9ybWF0IHpvcmFuX2Zvcm1hdHNbXTsKLQotc3RhdGljIGludCBsbWwzM2RwYXRoOwkJLyogZGVmYXVsdCA9IDAKLQkJCQkgKiAxIHdpbGwgdXNlIGRpZ2l0YWwgcGF0aCBpbiBjYXB0dXJlCi0JCQkJICogbW9kZSBpbnN0ZWFkIG9mIGFuYWxvZy4gSXQgY2FuIGJlCi0JCQkJICogdXNlZCBmb3IgcGljdHVyZSBhZGp1c3RtZW50cyB1c2luZwotCQkJCSAqIHRvb2wgbGlrZSB4YXd0diB3aGlsZSB3YXRjaGluZyBpbWFnZQotCQkJCSAqIG9uIFRWIG1vbml0b3IgY29ubmVjdGVkIHRvIHRoZSBvdXRwdXQuCi0JCQkJICogSG93ZXZlciwgZHVlIHRvIGFic2VuY2Ugb2YgNzUgT2htCi0JCQkJICogbG9hZCBvbiBCdDgxOSBpbnB1dCwgdGhlcmUgd2lsbCBiZQotCQkJCSAqIHNvbWUgaW1hZ2UgaW1wZXJmZWN0aW9ucyAqLwotCi1tb2R1bGVfcGFyYW0obG1sMzNkcGF0aCwgYm9vbCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGxtbDMzZHBhdGgsCi0JCSAiVXNlIGRpZ2l0YWwgcGF0aCBjYXB0dXJlIG1vZGUgKG9uIExNTDMzIGNhcmRzKSIpOwotCi1zdGF0aWMgdm9pZAotenIzNjA1N19pbml0X3ZmZSAoc3RydWN0IHpvcmFuICp6cik7Ci0KLS8qCi0gKiBHZW5lcmFsIFB1cnBvc2UgSS9PIGFuZCBHdWVzdCBidXMgYWNjZXNzCi0gKi8KLQotLyoKLSAqIFRoaXMgaXMgYSBiaXQgdHJpY2t5LiBXaGVuIGEgYm9hcmQgbGFja3MgYSBHUElPIGZ1bmN0aW9uLCB0aGUgY29ycmVzcG9uZGluZwotICogR1BJTyBiaXQgbnVtYmVyIGluIHRoZSBjYXJkX2luZm8gc3RydWN0dXJlIGlzIHNldCB0byAwLgotICovCi0KLXZvaWQKLUdQSU8gKHN0cnVjdCB6b3JhbiAqenIsCi0gICAgICBpbnQgICAgICAgICAgIGJpdCwKLSAgICAgIHVuc2lnbmVkIGludCAgdmFsdWUpCi17Ci0JdTMyIHJlZzsKLQl1MzIgbWFzazsKLQotCS8qIE1ha2Ugc3VyZSB0aGUgYml0IG51bWJlciBpcyBsZWdhbAotCSAqIEEgYml0IG51bWJlciBvZiAtMSAobGFja2luZykgZ2l2ZXMgYSBtYXNrIG9mIDAsCi0JICogbWFraW5nIGl0IGhhcm1sZXNzICovCi0JbWFzayA9ICgxIDw8ICgyNCArIGJpdCkpICYgMHhmZjAwMDAwMDsKLQlyZWcgPSBidHJlYWQoWlIzNjA1N19HUFBHQ1IxKSAmIH5tYXNrOwotCWlmICh2YWx1ZSkgewotCQlyZWcgfD0gbWFzazsKLQl9Ci0JYnR3cml0ZShyZWcsIFpSMzYwNTdfR1BQR0NSMSk7Ci0JdWRlbGF5KDEpOwotfQotCi0vKgotICogV2FpdCB0aWwgcG9zdCBvZmZpY2UgaXMgbm8gbG9uZ2VyIGJ1c3kKLSAqLwotCi1pbnQKLXBvc3Rfb2ZmaWNlX3dhaXQgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JdTMyIHBvcjsKLQotLy8gICAgICB3aGlsZSAoKChwb3IgPSBidHJlYWQoWlIzNjA1N19QT1IpKSAmIChaUjM2MDU3X1BPUl9QT1BlbiB8IFpSMzYwNTdfUE9SX1BPVGltZSkpID09IFpSMzYwNTdfUE9SX1BPUGVuKSB7Ci0Jd2hpbGUgKChwb3IgPSBidHJlYWQoWlIzNjA1N19QT1IpKSAmIFpSMzYwNTdfUE9SX1BPUGVuKSB7Ci0JCS8qIHdhaXQgZm9yIHNvbWV0aGluZyB0byBoYXBwZW4gKi8KLQl9Ci0JaWYgKChwb3IgJiBaUjM2MDU3X1BPUl9QT1RpbWUpICYmICF6ci0+Y2FyZC5nd3Nfbm90X2Nvbm5lY3RlZCkgewotCQkvKiBJbiBMTUwzMy9CVVogXEdXUyBsaW5lIGlzIG5vdCBjb25uZWN0ZWQsIHNvIGl0IGhhcyBhbHdheXMgdGltZW91dCBzZXQgKi8KLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBwb3AgdGltZW91dCAlMDh4XG4iLCBaUl9ERVZOQU1FKHpyKSwKLQkJCXBvcik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50Ci1wb3N0X29mZmljZV93cml0ZSAoc3RydWN0IHpvcmFuICp6ciwKLQkJICAgdW5zaWduZWQgaW50ICBndWVzdCwKLQkJICAgdW5zaWduZWQgaW50ICByZWcsCi0JCSAgIHVuc2lnbmVkIGludCAgdmFsdWUpCi17Ci0JdTMyIHBvcjsKLQotCXBvciA9Ci0JICAgIFpSMzYwNTdfUE9SX1BPRGlyIHwgWlIzNjA1N19QT1JfUE9UaW1lIHwgKChndWVzdCAmIDcpIDw8IDIwKSB8Ci0JICAgICgocmVnICYgNykgPDwgMTYpIHwgKHZhbHVlICYgMHhGRik7Ci0JYnR3cml0ZShwb3IsIFpSMzYwNTdfUE9SKTsKLQotCXJldHVybiBwb3N0X29mZmljZV93YWl0KHpyKTsKLX0KLQotaW50Ci1wb3N0X29mZmljZV9yZWFkIChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkgIHVuc2lnbmVkIGludCAgZ3Vlc3QsCi0JCSAgdW5zaWduZWQgaW50ICByZWcpCi17Ci0JdTMyIHBvcjsKLQotCXBvciA9IFpSMzYwNTdfUE9SX1BPVGltZSB8ICgoZ3Vlc3QgJiA3KSA8PCAyMCkgfCAoKHJlZyAmIDcpIDw8IDE2KTsKLQlidHdyaXRlKHBvciwgWlIzNjA1N19QT1IpOwotCWlmIChwb3N0X29mZmljZV93YWl0KHpyKSA8IDApIHsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiBidHJlYWQoWlIzNjA1N19QT1IpICYgMHhGRjsKLX0KLQotLyoKLSAqIGRldGVjdCBndWVzdHMKLSAqLwotCi1zdGF0aWMgdm9pZAotZHVtcF9ndWVzdHMgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JaWYgKHpyMzYwNjdfZGVidWcgPiAyKSB7Ci0JCWludCBpLCBndWVzdFs4XTsKLQotCQlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7CS8vIERvbid0IHJlYWQganBlZyBjb2RlYyBoZXJlCi0JCQlndWVzdFtpXSA9IHBvc3Rfb2ZmaWNlX3JlYWQoenIsIGksIDApOwotCQl9Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEd1ZXN0czoiLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJZm9yIChpID0gMTsgaSA8IDg7IGkrKykgewotCQkJcHJpbnRrKCIgMHglMDJ4IiwgZ3Vlc3RbaV0pOwotCQl9Ci0JCXByaW50aygiXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotZ2V0X3RpbWUgKHZvaWQpCi17Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0KLQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKLQlyZXR1cm4gKDEwMDAwMDAgKiB0di50dl9zZWMgKyB0di50dl91c2VjKTsKLX0KLQotdm9pZAotZGV0ZWN0X2d1ZXN0X2FjdGl2aXR5IChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCWludCB0aW1lb3V0LCBpLCBqLCByZXMsIGd1ZXN0WzhdLCBndWVzdDBbOF0sIGNoYW5nZVs4XVszXTsKLQl1bnNpZ25lZCBsb25nIHQwLCB0MTsKLQotCWR1bXBfZ3Vlc3RzKHpyKTsKLQlwcmludGsoS0VSTl9JTkZPICIlczogRGV0ZWN0aW5nIGd1ZXN0cyBhY3Rpdml0eSwgcGxlYXNlIHdhaXQuLi5cbiIsCi0JICAgICAgIFpSX0RFVk5BTUUoenIpKTsKLQlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7CS8vIERvbid0IHJlYWQganBlZyBjb2RlYyBoZXJlCi0JCWd1ZXN0MFtpXSA9IGd1ZXN0W2ldID0gcG9zdF9vZmZpY2VfcmVhZCh6ciwgaSwgMCk7Ci0JfQotCi0JdGltZW91dCA9IDA7Ci0JaiA9IDA7Ci0JdDAgPSBnZXRfdGltZSgpOwotCXdoaWxlICh0aW1lb3V0IDwgMTAwMDApIHsKLQkJdWRlbGF5KDEwKTsKLQkJdGltZW91dCsrOwotCQlmb3IgKGkgPSAxOyAoaSA8IDgpICYmIChqIDwgOCk7IGkrKykgewotCQkJcmVzID0gcG9zdF9vZmZpY2VfcmVhZCh6ciwgaSwgMCk7Ci0JCQlpZiAocmVzICE9IGd1ZXN0W2ldKSB7Ci0JCQkJdDEgPSBnZXRfdGltZSgpOwotCQkJCWNoYW5nZVtqXVswXSA9ICh0MSAtIHQwKTsKLQkJCQl0MCA9IHQxOwotCQkJCWNoYW5nZVtqXVsxXSA9IGk7Ci0JCQkJY2hhbmdlW2pdWzJdID0gcmVzOwotCQkJCWorKzsKLQkJCQlndWVzdFtpXSA9IHJlczsKLQkJCX0KLQkJfQotCQlpZiAoaiA+PSA4KQotCQkJYnJlYWs7Ci0JfQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBHdWVzdHM6IiwgWlJfREVWTkFNRSh6cikpOwotCi0JZm9yIChpID0gMTsgaSA8IDg7IGkrKykgewotCQlwcmludGsoIiAweCUwMngiLCBndWVzdDBbaV0pOwotCX0KLQlwcmludGsoIlxuIik7Ci0JaWYgKGogPT0gMCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogTm8gYWN0aXZpdHkgZGV0ZWN0ZWQuXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybjsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IGo7IGkrKykgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogJTZkOiAlZCA9PiAweCUwMnhcbiIsIFpSX0RFVk5BTUUoenIpLAotCQkgICAgICAgY2hhbmdlW2ldWzBdLCBjaGFuZ2VbaV1bMV0sIGNoYW5nZVtpXVsyXSk7Ci0JfQotfQotCi0vKgotICogSlBFRyBDb2RlYyBhY2Nlc3MKLSAqLwotCi12b2lkCi1qcGVnX2NvZGVjX3NsZWVwIChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkgIGludCAgICAgICAgICAgc2xlZXApCi17Ci0JR1BJTyh6ciwgenItPmNhcmQuZ3Bpb1taUl9HUElPX0pQRUdfU0xFRVBdLCAhc2xlZXApOwotCWlmICghc2xlZXApIHsKLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBqcGVnX2NvZGVjX3NsZWVwKCkgLSB3YWtlIEdQSU89MHglMDh4XG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGJ0cmVhZChaUjM2MDU3X0dQUEdDUjEpKTsKLQkJdWRlbGF5KDUwMCk7Ci0JfSBlbHNlIHsKLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBqcGVnX2NvZGVjX3NsZWVwKCkgLSBzbGVlcCBHUElPPTB4JTA4eFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBidHJlYWQoWlIzNjA1N19HUFBHQ1IxKSk7Ci0JCXVkZWxheSgyKTsKLQl9Ci19Ci0KLWludAotanBlZ19jb2RlY19yZXNldCAoc3RydWN0IHpvcmFuICp6cikKLXsKLQkvKiBUYWtlIHRoZSBjb2RlYyBvdXQgb2Ygc2xlZXAgKi8KLQlqcGVnX2NvZGVjX3NsZWVwKHpyLCAwKTsKLQotCWlmICh6ci0+Y2FyZC5ncGNzW0dQQ1NfSlBFR19SRVNFVF0gIT0gMHhmZikgewotCQlwb3N0X29mZmljZV93cml0ZSh6ciwgenItPmNhcmQuZ3Bjc1tHUENTX0pQRUdfUkVTRVRdLCAwLAotCQkJCSAgMCk7Ci0JCXVkZWxheSgyKTsKLQl9IGVsc2UgewotCQlHUElPKHpyLCB6ci0+Y2FyZC5ncGlvW1pSX0dQSU9fSlBFR19SRVNFVF0sIDApOwotCQl1ZGVsYXkoMik7Ci0JCUdQSU8oenIsIHpyLT5jYXJkLmdwaW9bWlJfR1BJT19KUEVHX1JFU0VUXSwgMSk7Ci0JCXVkZWxheSgyKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqICAgU2V0IHRoZSByZWdpc3RlcnMgZm9yIHRoZSBzaXplIHdlIGhhdmUgc3BlY2lmaWVkLiBEb24ndCBib3RoZXIKLSAqICAgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhpcyB3aXRob3V0IHRoZSBaUjM2MDU3IG1hbnVhbCBpbiBmcm9udCBvZgotICogICB5b3UgW0FDXS4KLSAqCi0gKiAgIFBTOiBUaGUgbWFudWFsIGlzIGZyZWUgZm9yIGRvd25sb2FkIGluIC5wZGYgZm9ybWF0IGZyb20KLSAqICAgd3d3LnpvcmFuLmNvbSAtIG5pY2VseSBkb25lIHRob3NlIGZvbGtzLgotICovCi0KLXN0YXRpYyB2b2lkCi16cjM2MDU3X2FkanVzdF92ZmUgKHN0cnVjdCB6b3JhbiAgICAgICAgICAqenIsCi0JCSAgICBlbnVtIHpvcmFuX2NvZGVjX21vZGUgIG1vZGUpCi17Ci0JdTMyIHJlZzsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1M6Ci0JCWJ0YW5kKH5aUjM2MDU3X1ZGRVNQRlJfRXh0RmwsIFpSMzYwNTdfVkZFU1BGUik7Ci0JCXJlZyA9IGJ0cmVhZChaUjM2MDU3X1ZGRUhDUik7Ci0JCWlmICgocmVnICYgKDEgPDwgMTApKSAmJiB6ci0+Y2FyZC50eXBlICE9IExNTDMzUjEwKSB7Ci0JCQlyZWcgKz0gKCgxIDw8IDEwKSB8IDEpOwotCQl9Ci0JCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZGRUhDUik7Ci0JCWJyZWFrOwotCWNhc2UgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTOgotCWNhc2UgQlVaX01PREVfSURMRToKLQlkZWZhdWx0OgotCQlpZiAoenItPm5vcm0gPT0gVklERU9fTU9ERV9OVFNDIHx8Ci0JCSAgICAoenItPmNhcmQudHlwZSA9PSBMTUwzM1IxMCAmJgotCQkgICAgIHpyLT5ub3JtID09IFZJREVPX01PREVfUEFMKSkKLQkJCWJ0YW5kKH5aUjM2MDU3X1ZGRVNQRlJfRXh0RmwsIFpSMzYwNTdfVkZFU1BGUik7Ci0JCWVsc2UKLQkJCWJ0b3IoWlIzNjA1N19WRkVTUEZSX0V4dEZsLCBaUjM2MDU3X1ZGRVNQRlIpOwotCQlyZWcgPSBidHJlYWQoWlIzNjA1N19WRkVIQ1IpOwotCQlpZiAoIShyZWcgJiAoMSA8PCAxMCkpICYmIHpyLT5jYXJkLnR5cGUgIT0gTE1MMzNSMTApIHsKLQkJCXJlZyAtPSAoKDEgPDwgMTApIHwgMSk7Ci0JCX0KLQkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkZFSENSKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKgotICogc2V0IGdlb21ldHJ5Ci0gKi8KLQotc3RhdGljIHZvaWQKLXpyMzYwNTdfc2V0X3ZmZSAoc3RydWN0IHpvcmFuICAgICAgICAgICAgICAqenIsCi0JCSBpbnQgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb193aWR0aCwKLQkJIGludCAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2hlaWdodCwKLQkJIGNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgKmZvcm1hdCkKLXsKLQlzdHJ1Y3QgdHZub3JtICp0dm47Ci0JdW5zaWduZWQgSFN0YXJ0LCBIRW5kLCBWU3RhcnQsIFZFbmQ7Ci0JdW5zaWduZWQgRGlzcE1vZGU7Ci0JdW5zaWduZWQgVmlkV2luV2lkLCBWaWRXaW5IdDsKLQl1bnNpZ25lZCBoY3JvcDEsIGhjcm9wMiwgdmNyb3AxLCB2Y3JvcDI7Ci0JdW5zaWduZWQgV2EsIFdlLCBIYSwgSGU7Ci0JdW5zaWduZWQgWCwgWSwgSG9yRGNtLCBWZXJEY207Ci0JdTMyIHJlZzsKLQl1bnNpZ25lZCBtYXNrX2xpbmVfc2l6ZTsKLQotCXR2biA9IHpyLT50aW1pbmc7Ci0KLQlXYSA9IHR2bi0+V2E7Ci0JSGEgPSB0dm4tPkhhOwotCi0JZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBzZXRfdmZlKCkgLSB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwKLQkJWlJfREVWTkFNRSh6ciksIHZpZGVvX3dpZHRoLCB2aWRlb19oZWlnaHQpOwotCi0JaWYgKHpyLT5ub3JtICE9IFZJREVPX01PREVfUEFMICYmCi0JICAgIHpyLT5ub3JtICE9IFZJREVPX01PREVfTlRTQyAmJgotCSAgICB6ci0+bm9ybSAhPSBWSURFT19NT0RFX1NFQ0FNKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSICIlczogc2V0X3ZmZSgpIC0gbm9ybSA9ICVkIG5vdCB2YWxpZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB6ci0+bm9ybSk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKHZpZGVvX3dpZHRoIDwgQlVaX01JTl9XSURUSCB8fAotCSAgICB2aWRlb19oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCB8fAotCSAgICB2aWRlb193aWR0aCA+IFdhIHx8IHZpZGVvX2hlaWdodCA+IEhhKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBzZXRfdmZlOiB3PSVkIGg9JWQgbm90IHZhbGlkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHZpZGVvX3dpZHRoLCB2aWRlb19oZWlnaHQpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoqKiogenIzNjA1NyAqKioqLwotCi0JLyogaG9yaXpvbnRhbCAqLwotCVZpZFdpbldpZCA9IHZpZGVvX3dpZHRoOwotCVggPSAoVmlkV2luV2lkICogNjQgKyB0dm4tPldhIC0gMSkgLyB0dm4tPldhOwotCVdlID0gKFZpZFdpbldpZCAqIDY0KSAvIFg7Ci0JSG9yRGNtID0gNjQgLSBYOwotCWhjcm9wMSA9IDIgKiAoKHR2bi0+V2EgLSBXZSkgLyA0KTsKLQloY3JvcDIgPSB0dm4tPldhIC0gV2UgLSBoY3JvcDE7Ci0JSFN0YXJ0ID0gdHZuLT5IU3RhcnQgPyB0dm4tPkhTdGFydCA6IDE7Ci0JLyogKFJvbmFsZCkgT3JpZ2luYWwgY29tbWVudDoKLQkgKiAifCAxIERvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0LCB0ZXN0ZWQgb24gYm90aCBhIERDMTAgYW5kIGEgREMxMCsiCi0JICogdGhpcyBpcyBmYWxzZS4gSXQgaW52ZXJzZXMgY2hyb21hIHZhbHVlcyBvbiB0aGUgTE1MMzNSMTAgKHNvIENyCi0JICogc3VkZGVubHkgaXMgc2hvd24gYXMgQ2IgYW5kIHJldmVyc2UsIHJlYWxseSBjb29sIGVmZmVjdCBpZiB5b3UKLQkgKiB3YW50IHRvIHNlZSBibHVlIGZhY2VzLCBub3QgdXNlZnVsIG90aGVyd2lzZSkuIFNvIGRvbid0IHVzZSB8MS4KLQkgKiBIb3dldmVyLCB0aGUgREMxMCBoYXMgJzAnIGFzIEhTdGFydCwgYnV0IGRvZXMgbmVlZCB8MSwgc28gd2UKLQkgKiB1c2UgYSBkaXJ0eSBjaGVjay4uLgotCSAqLwotCUhFbmQgPSBIU3RhcnQgKyB0dm4tPldhIC0gMTsKLQlIU3RhcnQgKz0gaGNyb3AxOwotCUhFbmQgLT0gaGNyb3AyOwotCXJlZyA9ICgoSFN0YXJ0ICYgWlIzNjA1N19WRkVIQ1JfSG1hc2spIDw8IFpSMzYwNTdfVkZFSENSX0hTdGFydCkKLQkgICAgfCAoKEhFbmQgJiBaUjM2MDU3X1ZGRUhDUl9IbWFzaykgPDwgWlIzNjA1N19WRkVIQ1JfSEVuZCk7Ci0JaWYgKHpyLT5jYXJkLnZmZV9wb2wuaHN5bmNfcG9sKQotCQlyZWcgfD0gWlIzNjA1N19WRkVIQ1JfSFNQb2w7Ci0JYnR3cml0ZShyZWcsIFpSMzYwNTdfVkZFSENSKTsKLQotCS8qIFZlcnRpY2FsICovCi0JRGlzcE1vZGUgPSAhKHZpZGVvX2hlaWdodCA+IEJVWl9NQVhfSEVJR0hUIC8gMik7Ci0JVmlkV2luSHQgPSBEaXNwTW9kZSA/IHZpZGVvX2hlaWdodCA6IHZpZGVvX2hlaWdodCAvIDI7Ci0JWSA9IChWaWRXaW5IdCAqIDY0ICogMiArIHR2bi0+SGEgLSAxKSAvIHR2bi0+SGE7Ci0JSGUgPSAoVmlkV2luSHQgKiA2NCkgLyBZOwotCVZlckRjbSA9IDY0IC0gWTsKLQl2Y3JvcDEgPSAodHZuLT5IYSAvIDIgLSBIZSkgLyAyOwotCXZjcm9wMiA9IHR2bi0+SGEgLyAyIC0gSGUgLSB2Y3JvcDE7Ci0JVlN0YXJ0ID0gdHZuLT5WU3RhcnQ7Ci0JVkVuZCA9IFZTdGFydCArIHR2bi0+SGEgLyAyOwkvLyAtIDE7IEZJWE1FIFNuYXBTaG90IHRpbWVzIG91dCB3aXRoIC0xIGluIDc2OCo1NzYgb24gdGhlIERDMTAgLSBMUAotCVZTdGFydCArPSB2Y3JvcDE7Ci0JVkVuZCAtPSB2Y3JvcDI7Ci0JcmVnID0gKChWU3RhcnQgJiBaUjM2MDU3X1ZGRVZDUl9WbWFzaykgPDwgWlIzNjA1N19WRkVWQ1JfVlN0YXJ0KQotCSAgICB8ICgoVkVuZCAmIFpSMzYwNTdfVkZFVkNSX1ZtYXNrKSA8PCBaUjM2MDU3X1ZGRVZDUl9WRW5kKTsKLQlpZiAoenItPmNhcmQudmZlX3BvbC52c3luY19wb2wpCi0JCXJlZyB8PSBaUjM2MDU3X1ZGRVZDUl9WU1BvbDsKLQlidHdyaXRlKHJlZywgWlIzNjA1N19WRkVWQ1IpOwotCi0JLyogc2NhbGVyIGFuZCBwaXhlbCBmb3JtYXQgKi8KLQlyZWcgPSAwOwotCXJlZyB8PSAoSG9yRGNtIDw8IFpSMzYwNTdfVkZFU1BGUl9Ib3JEY20pOwotCXJlZyB8PSAoVmVyRGNtIDw8IFpSMzYwNTdfVkZFU1BGUl9WZXJEY20pOwotCXJlZyB8PSAoRGlzcE1vZGUgPDwgWlIzNjA1N19WRkVTUEZSX0Rpc3BNb2RlKTsKLQkvKiBSSjogSSBkb24ndCBrbm93LCB3aHkgdGhlIGZvbGxvd2luZyBoYXMgdG8gYmUgdGhlIG9wcG9zaXRlCi0JICogb2YgdGhlIGNvcnJlc3BvbmRpbmcgWlIzNjA2MCBzZXR0aW5nLCBidXQgb25seSB0aGlzIHdheQotCSAqIHdlIGdldCB0aGUgY29ycmVjdCBjb2xvcnMgd2hlbiB1bmNvbXByZXNzaW5nIHRvIHRoZSBzY3JlZW4gICovCi0JLy9yZWcgfD0gWlIzNjA1N19WRkVTUEZSX1ZDTEtQb2w7IC8qKi8KLQkvKiBSSjogRG9uJ3Qga25vdyBpZiB0aGF0IGlzIG5lZWRlZCBmb3IgTlRTQyBhbHNvICovCi0JaWYgKHpyLT5ub3JtICE9IFZJREVPX01PREVfTlRTQykKLQkJcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9FeHRGbDsJLy8gTkVFREVEISEhISEhISBXb2xmZ2FuZwotCXJlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfVG9wRmllbGQ7Ci0JaWYgKEhvckRjbSA+PSA0OCkgewotCQlyZWcgfD0gMyA8PCBaUjM2MDU3X1ZGRVNQRlJfSEZpbHRlcjsJLyogNSB0YXAgZmlsdGVyICovCi0JfSBlbHNlIGlmIChIb3JEY20gPj0gMzIpIHsKLQkJcmVnIHw9IDIgPDwgWlIzNjA1N19WRkVTUEZSX0hGaWx0ZXI7CS8qIDQgdGFwIGZpbHRlciAqLwotCX0gZWxzZSBpZiAoSG9yRGNtID49IDE2KSB7Ci0JCXJlZyB8PSAxIDw8IFpSMzYwNTdfVkZFU1BGUl9IRmlsdGVyOwkvKiAzIHRhcCBmaWx0ZXIgKi8KLQl9Ci0JcmVnIHw9IGZvcm1hdC0+dmZlc3BmcjsKLQlidHdyaXRlKHJlZywgWlIzNjA1N19WRkVTUEZSKTsKLQotCS8qIGRpc3BsYXkgY29uZmlndXJhdGlvbiAqLwotCXJlZyA9ICgxNiA8PCBaUjM2MDU3X1ZEQ1JfTWluUGl4KQotCSAgICB8IChWaWRXaW5IdCA8PCBaUjM2MDU3X1ZEQ1JfVmlkV2luSHQpCi0JICAgIHwgKFZpZFdpbldpZCA8PCBaUjM2MDU3X1ZEQ1JfVmlkV2luV2lkKTsKLQlpZiAocGNpX3BjaV9wcm9ibGVtcyAmIFBDSVBDSV9UUklUT04pCi0JCS8vIHx8IHpyLT5yZXZpc2lvbiA8IDEpIC8vIFJldmlzaW9uIDEgaGFzIGFsc28gVHJpdG9uIHN1cHBvcnQKLQkJcmVnICY9IH5aUjM2MDU3X1ZEQ1JfVHJpdG9uOwotCWVsc2UKLQkJcmVnIHw9IFpSMzYwNTdfVkRDUl9Ucml0b247Ci0JYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRDUik7Ci0KLQkvKiAoUm9uYWxkKSBkb24ndCB3cml0ZSB0aGlzIGlmIG92ZXJsYXlfbWFzayA9IE5VTEwgKi8KLQlpZiAoenItPm92ZXJsYXlfbWFzaykgewotCQkvKiBXcml0ZSBvdmVybGF5IGNsaXBwaW5nIG1hc2sgZGF0YSwgYnV0IGRvbid0IGVuYWJsZSBvdmVybGF5IGNsaXBwaW5nICovCi0JCS8qIFJKOiBzaW5jZSB0aGlzIG1ha2VzIG9ubHkgc2Vuc2Ugb24gdGhlIHNjcmVlbiwgd2UgdXNlCi0JCSAqIHpyLT5vdmVybGF5X3NldHRpbmdzLndpZHRoIGluc3RlYWQgb2YgdmlkZW9fd2lkdGggKi8KLQotCQltYXNrX2xpbmVfc2l6ZSA9IChCVVpfTUFYX1dJRFRIICsgMzEpIC8gMzI7Ci0JCXJlZyA9IHZpcnRfdG9fYnVzKHpyLT5vdmVybGF5X21hc2spOwotCQlidHdyaXRlKHJlZywgWlIzNjA1N19NTVRSKTsKLQkJcmVnID0gdmlydF90b19idXMoenItPm92ZXJsYXlfbWFzayArIG1hc2tfbGluZV9zaXplKTsKLQkJYnR3cml0ZShyZWcsIFpSMzYwNTdfTU1CUik7Ci0JCXJlZyA9Ci0JCSAgICBtYXNrX2xpbmVfc2l6ZSAtICh6ci0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCArCi0JCQkJICAgICAgMzEpIC8gMzI7Ci0JCWlmIChEaXNwTW9kZSA9PSAwKQotCQkJcmVnICs9IG1hc2tfbGluZV9zaXplOwotCQlyZWcgPDw9IFpSMzYwNTdfT0NSX01hc2tTdHJpZGU7Ci0JCWJ0d3JpdGUocmVnLCBaUjM2MDU3X09DUik7Ci0JfQotCi0JenIzNjA1N19hZGp1c3RfdmZlKHpyLCB6ci0+Y29kZWNfbW9kZSk7Ci19Ci0KLS8qCi0gKiBTd2l0Y2ggb3ZlcmxheSBvbiBvciBvZmYKLSAqLwotCi12b2lkCi16cjM2MDU3X292ZXJsYXkgKHN0cnVjdCB6b3JhbiAqenIsCi0JCSBpbnQgICAgICAgICAgIG9uKQotewotCXUzMiByZWc7Ci0KLQlpZiAob24pIHsKLQkJLyogZG8gdGhlIG5lY2Vzc2FyeSBzZXR0aW5ncyAuLi4gKi8KLQkJYnRhbmQoflpSMzYwNTdfVkRDUl9WaWRFbiwgWlIzNjA1N19WRENSKTsJLyogc3dpdGNoIGl0IG9mZiBmaXJzdCAqLwotCi0JCXpyMzYwNTdfc2V0X3ZmZSh6ciwKLQkJCQl6ci0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCwKLQkJCQl6ci0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQsCi0JCQkJenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KTsKLQotCQkvKiBTdGFydCBhbmQgbGVuZ3RoIG9mIGVhY2ggbGluZSBNVVNUIGJlIDQtYnl0ZSBhbGlnbmVkLgotCQkgKiBUaGlzIHNob3VsZCBiZSBhbGxyZWFkeSBjaGVja2VkIGJlZm9yZSB0aGUgY2FsbCB0byB0aGlzIHJvdXRpbmUuCi0JCSAqIEFsbCBlcnJvciBtZXNzYWdlcyBhcmUgaW50ZXJuYWwgZHJpdmVyIGNoZWNraW5nIG9ubHkhICovCi0KLQkJLyogdmlkZW8gZGlzcGxheSB0b3AgYW5kIGJvdHRvbSByZWdpc3RlcnMgKi8KLQkJcmVnID0gKGxvbmcpIHpyLT5idWZmZXIuYmFzZSArCi0JCSAgICB6ci0+b3ZlcmxheV9zZXR0aW5ncy54ICoKLQkJICAgICgoenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5kZXB0aCArIDcpIC8gOCkgKwotCQkgICAgenItPm92ZXJsYXlfc2V0dGluZ3MueSAqCi0JCSAgICB6ci0+YnVmZmVyLmJ5dGVzcGVybGluZTsKLQkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRUUik7Ci0JCWlmIChyZWcgJiAzKQotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiB6cjM2MDU3X292ZXJsYXkoKSAtIHZpZGVvX2FkZHJlc3Mgbm90IGFsaWduZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgLyAyKQotCQkJcmVnICs9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOwotCQlidHdyaXRlKHJlZywgWlIzNjA1N19WREJSKTsKLQotCQkvKiB2aWRlbyBzdHJpZGUsIHN0YXR1cywgYW5kIGZyYW1lIGdyYWIgcmVnaXN0ZXIgKi8KLQkJcmVnID0genItPmJ1ZmZlci5ieXRlc3BlcmxpbmUgLQotCQkgICAgenItPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGggKgotCQkgICAgKCh6ci0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmRlcHRoICsgNykgLyA4KTsKLQkJaWYgKHpyLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUIC8gMikKLQkJCXJlZyArPSB6ci0+YnVmZmVyLmJ5dGVzcGVybGluZTsKLQkJaWYgKHJlZyAmIDMpCi0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHpyMzYwNTdfb3ZlcmxheSgpIC0gdmlkZW9fc3RyaWRlIG5vdCBhbGlnbmVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmVnID0gKHJlZyA8PCBaUjM2MDU3X1ZTU0ZHUl9EaXNwU3RyaWRlKTsKLQkJcmVnIHw9IFpSMzYwNTdfVlNTRkdSX1ZpZE92ZjsJLyogY2xlYXIgb3ZlcmZsb3cgc3RhdHVzICovCi0JCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZTU0ZHUik7Ci0KLQkJLyogU2V0IG92ZXJsYXkgY2xpcHBpbmcgKi8KLQkJaWYgKHpyLT5vdmVybGF5X3NldHRpbmdzLmNsaXBjb3VudCA+IDApCi0JCQlidG9yKFpSMzYwNTdfT0NSX092bEVuYWJsZSwgWlIzNjA1N19PQ1IpOwotCi0JCS8qIC4uLiBhbmQgc3dpdGNoIGl0IG9uICovCi0JCWJ0b3IoWlIzNjA1N19WRENSX1ZpZEVuLCBaUjM2MDU3X1ZEQ1IpOwotCX0gZWxzZSB7Ci0JCS8qIFN3aXRjaCBpdCBvZmYgKi8KLQkJYnRhbmQoflpSMzYwNTdfVkRDUl9WaWRFbiwgWlIzNjA1N19WRENSKTsKLQl9Ci19Ci0KLS8qCi0gKiBUaGUgb3ZlcmxheSBtYXNrIGhhcyBvbmUgYml0IGZvciBlYWNoIHBpeGVsIG9uIGEgc2NhbiBsaW5lLAotICogIGFuZCB0aGUgbWF4aW11bSB3aW5kb3cgc2l6ZSBpcyBCVVpfTUFYX1dJRFRIICogQlVaX01BWF9IRUlHSFQgcGl4ZWxzLgotICovCi0KLXZvaWQKLXdyaXRlX292ZXJsYXlfbWFzayAoc3RydWN0IGZpbGUgICAgICAgKmZpbGUsCi0JCSAgICBzdHJ1Y3QgdmlkZW9fY2xpcCAqdnAsCi0JCSAgICBpbnQgICAgICAgICAgICAgICAgY291bnQpCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCXVuc2lnbmVkIG1hc2tfbGluZV9zaXplID0gKEJVWl9NQVhfV0lEVEggKyAzMSkgLyAzMjsKLQl1MzIgKm1hc2s7Ci0JaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7Ci0JdW5zaWduZWQgaSwgaiwgazsKLQl1MzIgcmVnOwotCi0JLyogZmlsbCBtYXNrIHdpdGggb25lIGJpdHMgKi8KLQltZW1zZXQoZmgtPm92ZXJsYXlfbWFzaywgfjAsIG1hc2tfbGluZV9zaXplICogNCAqIEJVWl9NQVhfSEVJR0hUKTsKLQlyZWcgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLQkJLyogcGljayB1cCBsb2NhbCBjb3B5IG9mIGNsaXAgKi8KLQkJeCA9IHZwW2ldLng7Ci0JCXkgPSB2cFtpXS55OwotCQl3aWR0aCA9IHZwW2ldLndpZHRoOwotCQloZWlnaHQgPSB2cFtpXS5oZWlnaHQ7Ci0KLQkJLyogdHJpbSBjbGlwcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlIHdpbmRvdyAqLwotCQlpZiAoeCA8IDApIHsKLQkJCXdpZHRoICs9IHg7Ci0JCQl4ID0gMDsKLQkJfQotCQlpZiAoeSA8IDApIHsKLQkJCWhlaWdodCArPSB5OwotCQkJeSA9IDA7Ci0JCX0KLQkJaWYgKHggKyB3aWR0aCA+IGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoKSB7Ci0JCQl3aWR0aCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoIC0geDsKLQkJfQotCQlpZiAoeSArIGhlaWdodCA+IGZoLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodCkgewotCQkJaGVpZ2h0ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0IC0geTsKLQkJfQotCi0JCS8qIGlnbm9yZSBkZWdlbmVyYXRlIGNsaXBzICovCi0JCWlmIChoZWlnaHQgPD0gMCkgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHdpZHRoIDw9IDApIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogYXBwbHkgY2xpcCBmb3IgZWFjaCBzY2FuIGxpbmUgKi8KLQkJZm9yIChqID0gMDsgaiA8IGhlaWdodDsgKytqKSB7Ci0JCQkvKiByZXNldCBiaXQgZm9yIGVhY2ggcGl4ZWwgKi8KLQkJCS8qIHRoaXMgY2FuIGJlIG9wdGltaXplZCBsYXRlciBpZiBuZWVkIGJlICovCi0JCQltYXNrID0gZmgtPm92ZXJsYXlfbWFzayArICh5ICsgaikgKiBtYXNrX2xpbmVfc2l6ZTsKLQkJCWZvciAoayA9IDA7IGsgPCB3aWR0aDsgKytrKSB7Ci0JCQkJbWFza1soeCArIGspIC8gMzJdICY9Ci0JCQkJICAgIH4oKHUzMikgMSA8PCAoeCArIGspICUgMzIpOwotCQkJfQotCQl9Ci0JfQotfQotCi0vKiBFbmFibGUvRGlzYWJsZSB1bmNvbXByZXNzZWQgbWVtb3J5IGdyYWJiaW5nIG9mIHRoZSAzNjA1NyAqLwotCi12b2lkCi16cjM2MDU3X3NldF9tZW1ncmFiIChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkgICAgIGludCAgICAgICAgICAgbW9kZSkKLXsKLQlpZiAobW9kZSkgewotCQkvKiBXZSBvbmx5IGNoZWNrIFNuYXBTaG90IGFuZCBub3QgRnJhbWVHcmFiIGhlcmUuICBTbmFwU2hvdD09MQotCQkgKiBtZWFucyBhIGNhcHR1cmUgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgYnV0IEZyYW1lR3JhYj09MQotCQkgKiBkb2Vzbid0IG5lY2Vzc2FyeSBtZWFuIHRoYXQuICBJdCdzIG1vcmUgY29ycmVjdCB0byBzYXkgYSAxCi0JCSAqIHRvIDAgdHJhbnNpdGlvbiBpbmRpY2F0ZXMgYSBjYXB0dXJlIGNvbXBsZXRlZC4gIElmIGEKLQkJICogY2FwdHVyZSBpcyBwZW5kaW5nIHdoZW4gY2FwdHVyaW5nIGlzIHR1bmVkIG9mZiwgRnJhbWVHcmFiCi0JCSAqIHdpbGwgYmUgc3R1Y2sgYXQgMSB1bnRpbCBjYXB0dXJpbmcgaXMgdHVybmVkIGJhY2sgb24uCi0JCSAqLwotCQlpZiAoYnRyZWFkKFpSMzYwNTdfVlNTRkdSKSAmIFpSMzYwNTdfVlNTRkdSX1NuYXBTaG90KQotCQkJZHByaW50aygxLAotCQkJCUtFUk5fV0FSTklORwotCQkJCSIlczogenIzNjA1N19zZXRfbWVtZ3JhYigxKSB3aXRoIFNuYXBTaG90IG9uIT9cbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCi0JCS8qIHN3aXRjaCBvbiBWU3luYyBpbnRlcnJ1cHRzICovCi0JCWJ0d3JpdGUoSVJRX01BU0ssIFpSMzYwNTdfSVNSKTsJLy8gQ2xlYXIgSW50ZXJydXB0cwotCQlidG9yKHpyLT5jYXJkLnZzeW5jX2ludCwgWlIzNjA1N19JQ1IpOwkvLyBTVwotCi0JCS8qIGVuYWJsZSBTbmFwU2hvdCAqLwotCQlidG9yKFpSMzYwNTdfVlNTRkdSX1NuYXBTaG90LCBaUjM2MDU3X1ZTU0ZHUik7Ci0KLQkJLyogU2V0IHpyMzYwNTcgdmlkZW8gZnJvbnQgZW5kICBhbmQgZW5hYmxlIHZpZGVvICovCi0JCXpyMzYwNTdfc2V0X3ZmZSh6ciwgenItPnY0bF9zZXR0aW5ncy53aWR0aCwKLQkJCQl6ci0+djRsX3NldHRpbmdzLmhlaWdodCwKLQkJCQl6ci0+djRsX3NldHRpbmdzLmZvcm1hdCk7Ci0KLQkJenItPnY0bF9tZW1ncmFiX2FjdGl2ZSA9IDE7Ci0JfSBlbHNlIHsKLQkJLyogc3dpdGNoIG9mZiBWU3luYyBpbnRlcnJ1cHRzICovCi0JCWJ0YW5kKH56ci0+Y2FyZC52c3luY19pbnQsIFpSMzYwNTdfSUNSKTsJLy8gU1cKLQotCQl6ci0+djRsX21lbWdyYWJfYWN0aXZlID0gMDsKLQkJenItPnY0bF9ncmFiX2ZyYW1lID0gTk9fR1JBQl9BQ1RJVkU7Ci0KLQkJLyogcmVlbmFibGUgZ3JhYmJpbmcgdG8gc2NyZWVuIGlmIGl0IHdhcyBydW5uaW5nICovCi0JCWlmICh6ci0+djRsX292ZXJsYXlfYWN0aXZlKSB7Ci0JCQl6cjM2MDU3X292ZXJsYXkoenIsIDEpOwotCQl9IGVsc2UgewotCQkJYnRhbmQoflpSMzYwNTdfVkRDUl9WaWRFbiwgWlIzNjA1N19WRENSKTsKLQkJCWJ0YW5kKH5aUjM2MDU3X1ZTU0ZHUl9TbmFwU2hvdCwgWlIzNjA1N19WU1NGR1IpOwotCQl9Ci0JfQotfQotCi1pbnQKLXdhaXRfZ3JhYl9wZW5kaW5nIChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiB3YWl0IHVudGlsIGFsbCBwZW5kaW5nIGdyYWJzIGFyZSBmaW5pc2hlZCAqLwotCi0JaWYgKCF6ci0+djRsX21lbWdyYWJfYWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh6ci0+djRsX2NhcHEsCi0JCQkoenItPnY0bF9wZW5kX3RhaWwgPT0genItPnY0bF9wZW5kX2hlYWQpKTsKLQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0JenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICBTZXQgdXAgdGhlIEJ1ei1zcGVjaWZpYyBNSlBFRyBwYXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotc2V0X2ZyYW1lIChzdHJ1Y3Qgem9yYW4gKnpyLAotCSAgIGludCAgICAgICAgICAgdmFsKQotewotCUdQSU8oenIsIHpyLT5jYXJkLmdwaW9bWlJfR1BJT19KUEVHX0ZSQU1FXSwgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQKLXNldF92aWRlb2J1c19kaXIgKHN0cnVjdCB6b3JhbiAqenIsCi0JCSAgaW50ICAgICAgICAgICB2YWwpCi17Ci0Jc3dpdGNoICh6ci0+Y2FyZC50eXBlKSB7Ci0JY2FzZSBMTUwzMzoKLQljYXNlIExNTDMzUjEwOgotCQlpZiAobG1sMzNkcGF0aCA9PSAwKQotCQkJR1BJTyh6ciwgNSwgdmFsKTsKLQkJZWxzZQotCQkJR1BJTyh6ciwgNSwgMSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUdQSU8oenIsIHpyLT5jYXJkLmdwaW9bWlJfR1BJT19WSURfRElSXSwKLQkJICAgICB6ci0+Y2FyZC5ncGlvX3BvbFtaUl9HUElPX1ZJRF9ESVJdID8gIXZhbCA6IHZhbCk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWluaXRfanBlZ19xdWV1ZSAoc3RydWN0IHpvcmFuICp6cikKLXsKLQlpbnQgaTsKLQotCS8qIHJlLWluaXRpYWxpemUgRE1BIHJpbmcgc3R1ZmYgKi8KLQl6ci0+anBnX3F1ZV9oZWFkID0gMDsKLQl6ci0+anBnX2RtYV9oZWFkID0gMDsKLQl6ci0+anBnX2RtYV90YWlsID0gMDsKLQl6ci0+anBnX3F1ZV90YWlsID0gMDsKLQl6ci0+anBnX3NlcV9udW0gPSAwOwotCXpyLT5KUEVHX2Vycm9yID0gMDsKLQl6ci0+bnVtX2Vycm9ycyA9IDA7Ci0JenItPmpwZ19lcnJfc2VxID0gMDsKLQl6ci0+anBnX2Vycl9zaGlmdCA9IDA7Ci0JenItPmpwZ19xdWV1ZWRfbnVtID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgenItPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJenItPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOwkvKiBub3RoaW5nIGdvaW5nIG9uICovCi0JfQotCWZvciAoaSA9IDA7IGkgPCBCVVpfTlVNX1NUQVRfQ09NOyBpKyspIHsKLQkJenItPnN0YXRfY29tW2ldID0gY3B1X3RvX2xlMzIoMSk7CS8qIG1hcmsgYXMgdW5hdmFpbGFibGUgdG8genIzNjA1NyAqLwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXpyMzYwNTdfc2V0X2pwZyAoc3RydWN0IHpvcmFuICAgICAgICAgICp6ciwKLQkJIGVudW0gem9yYW5fY29kZWNfbW9kZSAgbW9kZSkKLXsKLQlzdHJ1Y3QgdHZub3JtICp0dm47Ci0JdTMyIHJlZzsKLQotCXR2biA9IHpyLT50aW1pbmc7Ci0KLQkvKiBhc3NlcnQgUF9SZXNldCwgZGlzYWJsZSBjb2RlIHRyYW5zZmVyLCBkZWFzc2VydCBBY3RpdmUgKi8KLQlidHdyaXRlKDAsIFpSMzYwNTdfSlBDKTsKLQotCS8qIE1KUEVHIGNvbXByZXNzaW9uIG1vZGUgKi8KLQlzd2l0Y2ggKG1vZGUpIHsKLQotCWNhc2UgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTOgotCWRlZmF1bHQ6Ci0JCXJlZyA9IFpSMzYwNTdfSk1DX01KUEdDbXBNb2RlOwotCQlicmVhazsKLQotCWNhc2UgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1M6Ci0JCXJlZyA9IFpSMzYwNTdfSk1DX01KUEdFeHBNb2RlOwotCQlyZWcgfD0gWlIzNjA1N19KTUNfU3luY01zdHI7Ci0JCS8qIFJKOiBUaGUgZm9sbG93aW5nIGlzIGV4cGVyaW1lbnRhbCAtIGltcHJvdmVzIHRoZSBvdXRwdXQgdG8gc2NyZWVuICovCi0JCS8vaWYoenItPmpwZ19zZXR0aW5ncy5WRklGT19GQikgcmVnIHw9IFpSMzYwNTdfSk1DX1ZGSUZPX0ZCOyAvLyBObywgaXQgZG9lc24ndC4gU00KLQkJYnJlYWs7Ci0KLQljYXNlIEJVWl9NT0RFX1NUSUxMX0NPTVBSRVNTOgotCQlyZWcgPSBaUjM2MDU3X0pNQ19KUEdDbXBNb2RlOwotCQlicmVhazsKLQotCWNhc2UgQlVaX01PREVfU1RJTExfREVDT01QUkVTUzoKLQkJcmVnID0gWlIzNjA1N19KTUNfSlBHRXhwTW9kZTsKLQkJYnJlYWs7Ci0KLQl9Ci0JcmVnIHw9IFpSMzYwNTdfSk1DX0pQRzsKLQlpZiAoenItPmpwZ19zZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9PSAxKQotCQlyZWcgfD0gWlIzNjA1N19KTUNfRmxkX3Blcl9idWZmOwotCWJ0d3JpdGUocmVnLCBaUjM2MDU3X0pNQyk7Ci0KLQkvKiB2ZXJ0aWNhbCAqLwotCWJ0b3IoWlIzNjA1N19WRkVWQ1JfVlNQb2wsIFpSMzYwNTdfVkZFVkNSKTsKLQlyZWcgPSAoNiA8PCBaUjM2MDU3X1ZTUF9Wc3luY1NpemUpIHwKLQkgICAgICAodHZuLT5IdCA8PCBaUjM2MDU3X1ZTUF9Gcm1Ub3QpOwotCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZTUCk7Ci0JcmVnID0gKCh6ci0+anBnX3NldHRpbmdzLmltZ195ICsgdHZuLT5WU3RhcnQpIDw8IFpSMzYwNTdfRlZBUF9OQVkpIHwKLQkgICAgICAoenItPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0IDw8IFpSMzYwNTdfRlZBUF9QQVkpOwotCWJ0d3JpdGUocmVnLCBaUjM2MDU3X0ZWQVApOwotCi0JLyogaG9yaXpvbnRhbCAqLwotCWlmICh6ci0+Y2FyZC52ZmVfcG9sLmhzeW5jX3BvbCkKLQkJYnRvcihaUjM2MDU3X1ZGRUhDUl9IU1BvbCwgWlIzNjA1N19WRkVIQ1IpOwotCWVsc2UKLQkJYnRhbmQoflpSMzYwNTdfVkZFSENSX0hTUG9sLCBaUjM2MDU3X1ZGRUhDUik7Ci0JcmVnID0gKCh0dm4tPkhTeW5jU3RhcnQpIDw8IFpSMzYwNTdfSFNQX0hzeW5jU3RhcnQpIHwKLQkgICAgICAodHZuLT5XdCA8PCBaUjM2MDU3X0hTUF9MaW5lVG90KTsKLQlidHdyaXRlKHJlZywgWlIzNjA1N19IU1ApOwotCXJlZyA9ICgoenItPmpwZ19zZXR0aW5ncy5pbWdfeCArCi0JCXR2bi0+SFN0YXJ0ICsgNCkgPDwgWlIzNjA1N19GSEFQX05BWCkgfAotCSAgICAgICh6ci0+anBnX3NldHRpbmdzLmltZ193aWR0aCA8PCBaUjM2MDU3X0ZIQVBfUEFYKTsKLQlidHdyaXRlKHJlZywgWlIzNjA1N19GSEFQKTsKLQotCS8qIGZpZWxkIHByb2Nlc3MgcGFyYW1ldGVycyAqLwotCWlmICh6ci0+anBnX3NldHRpbmdzLm9kZF9ldmVuKQotCQlyZWcgPSBaUjM2MDU3X0ZQUF9PZGRfRXZlbjsKLQllbHNlCi0JCXJlZyA9IDA7Ci0KLQlidHdyaXRlKHJlZywgWlIzNjA1N19GUFApOwotCi0JLyogU2V0IHByb3BlciBWQ0xLIFBvbGFyaXR5LCBlbHNlIGNvbG9ycyB3aWxsIGJlIHdyb25nIGR1cmluZyBwbGF5YmFjayAqLwotCS8vYnRvcihaUjM2MDU3X1ZGRVNQRlJfVkNMS1BvbCwgWlIzNjA1N19WRkVTUEZSKTsKLQotCS8qIGNvZGUgYmFzZSBhZGRyZXNzICovCi0JcmVnID0gdmlydF90b19idXMoenItPnN0YXRfY29tKTsKLQlidHdyaXRlKHJlZywgWlIzNjA1N19KQ0JBKTsKLQotCS8qIEZJRk8gdGhyZXNob2xkIChGSUZPIGlzIDE2MC4gZG91YmxlIHdvcmRzKSAqLwotCS8qIE5PVEU6IGRlY2ltYWwgdmFsdWVzIGhlcmUgKi8KLQlzd2l0Y2ggKG1vZGUpIHsKLQotCWNhc2UgQlVaX01PREVfU1RJTExfQ09NUFJFU1M6Ci0JY2FzZSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M6Ci0JCWlmICh6ci0+Y2FyZC50eXBlICE9IEJVWikKLQkJCXJlZyA9IDE0MDsKLQkJZWxzZQotCQkJcmVnID0gNjA7Ci0JCWJyZWFrOwotCi0JY2FzZSBCVVpfTU9ERV9TVElMTF9ERUNPTVBSRVNTOgotCWNhc2UgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1M6Ci0JCXJlZyA9IDIwOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJlZyA9IDgwOwotCQlicmVhazsKLQotCX0KLQlidHdyaXRlKHJlZywgWlIzNjA1N19KQ0ZUKTsKLQl6cjM2MDU3X2FkanVzdF92ZmUoenIsIG1vZGUpOwotCi19Ci0KLXZvaWQKLXByaW50X2ludGVycnVwdHMgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JaW50IHJlcywgbm9lcnIgPSAwOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludGVycnVwdHMgcmVjZWl2ZWQ6IiwgWlJfREVWTkFNRSh6cikpOwotCWlmICgocmVzID0genItPmZpZWxkX2NvdW50ZXIpIDwgLTEgfHwgcmVzID4gMSkgewotCQlwcmludGsoIiBGRDolZCIsIHJlcyk7Ci0JfQotCWlmICgocmVzID0genItPmludHJfY291bnRlcl9HSVJRMSkgIT0gMCkgewotCQlwcmludGsoIiBHSVJRMTolZCIsIHJlcyk7Ci0JCW5vZXJyKys7Ci0JfQotCWlmICgocmVzID0genItPmludHJfY291bnRlcl9HSVJRMCkgIT0gMCkgewotCQlwcmludGsoIiBHSVJRMDolZCIsIHJlcyk7Ci0JCW5vZXJyKys7Ci0JfQotCWlmICgocmVzID0genItPmludHJfY291bnRlcl9Db2RSZXBJUlEpICE9IDApIHsKLQkJcHJpbnRrKCIgQ29kUmVwSVJROiVkIiwgcmVzKTsKLQkJbm9lcnIrKzsKLQl9Ci0JaWYgKChyZXMgPSB6ci0+aW50cl9jb3VudGVyX0pQRUdSZXBJUlEpICE9IDApIHsKLQkJcHJpbnRrKCIgSlBFR1JlcElSUTolZCIsIHJlcyk7Ci0JCW5vZXJyKys7Ci0JfQotCWlmICh6ci0+SlBFR19tYXhfbWlzc2VkKSB7Ci0JCXByaW50aygiIEpQRUcgZGVsYXlzOiBtYXg9JWQgbWluPSVkIiwgenItPkpQRUdfbWF4X21pc3NlZCwKLQkJICAgICAgIHpyLT5KUEVHX21pbl9taXNzZWQpOwotCX0KLQlpZiAoenItPkVORF9ldmVudF9taXNzZWQpIHsKLQkJcHJpbnRrKCIgRU5EcyBtaXNzZWQ6ICVkIiwgenItPkVORF9ldmVudF9taXNzZWQpOwotCX0KLQkvL2lmICh6ci0+anBnX3F1ZXVlZF9udW0pIHsKLQlwcmludGsoIiBxdWV1ZV9zdGF0ZT0lbGQvJWxkLyVsZC8lbGQiLCB6ci0+anBnX3F1ZV90YWlsLAotCSAgICAgICB6ci0+anBnX2RtYV90YWlsLCB6ci0+anBnX2RtYV9oZWFkLCB6ci0+anBnX3F1ZV9oZWFkKTsKLQkvL30KLQlpZiAoIW5vZXJyKSB7Ci0JCXByaW50aygiOiBubyBpbnRlcnJ1cHRzIGRldGVjdGVkLiIpOwotCX0KLQlwcmludGsoIlxuIik7Ci19Ci0KLXZvaWQKLWNsZWFyX2ludGVycnVwdF9jb3VudGVycyAoc3RydWN0IHpvcmFuICp6cikKLXsKLQl6ci0+aW50cl9jb3VudGVyX0dJUlExID0gMDsKLQl6ci0+aW50cl9jb3VudGVyX0dJUlEwID0gMDsKLQl6ci0+aW50cl9jb3VudGVyX0NvZFJlcElSUSA9IDA7Ci0JenItPmludHJfY291bnRlcl9KUEVHUmVwSVJRID0gMDsKLQl6ci0+ZmllbGRfY291bnRlciA9IDA7Ci0JenItPklSUTFfaW4gPSAwOwotCXpyLT5JUlExX291dCA9IDA7Ci0JenItPkpQRUdfaW4gPSAwOwotCXpyLT5KUEVHX291dCA9IDA7Ci0JenItPkpQRUdfMCA9IDA7Ci0JenItPkpQRUdfMSA9IDA7Ci0JenItPkVORF9ldmVudF9taXNzZWQgPSAwOwotCXpyLT5KUEVHX21pc3NlZCA9IDA7Ci0JenItPkpQRUdfbWF4X21pc3NlZCA9IDA7Ci0JenItPkpQRUdfbWluX21pc3NlZCA9IDB4N2ZmZmZmZmY7Ci19Ci0KLXN0YXRpYyB1MzIKLWNvdW50X3Jlc2V0X2ludGVycnVwdCAoc3RydWN0IHpvcmFuICp6cikKLXsKLQl1MzIgaXNyOwotCi0JaWYgKChpc3IgPSBidHJlYWQoWlIzNjA1N19JU1IpICYgMHg3ODAwMDAwMCkpIHsKLQkJaWYgKGlzciAmIFpSMzYwNTdfSVNSX0dJUlExKSB7Ci0JCQlidHdyaXRlKFpSMzYwNTdfSVNSX0dJUlExLCBaUjM2MDU3X0lTUik7Ci0JCQl6ci0+aW50cl9jb3VudGVyX0dJUlExKys7Ci0JCX0KLQkJaWYgKGlzciAmIFpSMzYwNTdfSVNSX0dJUlEwKSB7Ci0JCQlidHdyaXRlKFpSMzYwNTdfSVNSX0dJUlEwLCBaUjM2MDU3X0lTUik7Ci0JCQl6ci0+aW50cl9jb3VudGVyX0dJUlEwKys7Ci0JCX0KLQkJaWYgKGlzciAmIFpSMzYwNTdfSVNSX0NvZFJlcElSUSkgewotCQkJYnR3cml0ZShaUjM2MDU3X0lTUl9Db2RSZXBJUlEsIFpSMzYwNTdfSVNSKTsKLQkJCXpyLT5pbnRyX2NvdW50ZXJfQ29kUmVwSVJRKys7Ci0JCX0KLQkJaWYgKGlzciAmIFpSMzYwNTdfSVNSX0pQRUdSZXBJUlEpIHsKLQkJCWJ0d3JpdGUoWlIzNjA1N19JU1JfSlBFR1JlcElSUSwgWlIzNjA1N19JU1IpOwotCQkJenItPmludHJfY291bnRlcl9KUEVHUmVwSVJRKys7Ci0JCX0KLQl9Ci0JcmV0dXJuIGlzcjsKLX0KLQotdm9pZAotanBlZ19zdGFydCAoc3RydWN0IHpvcmFuICp6cikKLXsKLQlpbnQgcmVnOwotCi0JenItPmZyYW1lX251bSA9IDA7Ci0KLQkvKiBkZWFzc2VydCBQX3Jlc2V0LCBkaXNhYmxlIGNvZGUgdHJhbnNmZXIsIGRlYXNzZXJ0IEFjdGl2ZSAqLwotCWJ0d3JpdGUoWlIzNjA1N19KUENfUF9SZXNldCwgWlIzNjA1N19KUEMpOwotCS8qIHN0b3AgZmx1c2hpbmcgdGhlIGludGVybmFsIGNvZGUgYnVmZmVyICovCi0JYnRhbmQoflpSMzYwNTdfTUNUQ1JfQ0ZsdXNoLCBaUjM2MDU3X01DVENSKTsKLQkvKiBlbmFibGUgY29kZSB0cmFuc2ZlciAqLwotCWJ0b3IoWlIzNjA1N19KUENfQ29kVHJuc0VuLCBaUjM2MDU3X0pQQyk7Ci0KLQkvKiBjbGVhciBJUlFzICovCi0JYnR3cml0ZShJUlFfTUFTSywgWlIzNjA1N19JU1IpOwotCS8qIGVuYWJsZSB0aGUgSlBFRyBJUlFzICovCi0JYnR3cml0ZSh6ci0+Y2FyZC5qcGVnX2ludCB8Ci0JCQlaUjM2MDU3X0lDUl9KUEVHUmVwSVJRIHwKLQkJCVpSMzYwNTdfSUNSX0ludFBpbkVuLAotCQlaUjM2MDU3X0lDUik7Ci0KLQlzZXRfZnJhbWUoenIsIDApOwkvLyBcRlJBTUUKLQotCS8qIHNldCB0aGUgSlBFRyBjb2RlYyBndWVzdCBJRCAqLwotCXJlZyA9ICh6ci0+Y2FyZC5ncGNzWzFdIDw8IFpSMzYwNTdfSkNHSV9KUEVHdWVzdElEKSB8Ci0JICAgICAgICgwIDw8IFpSMzYwNTdfSkNHSV9KUEVHdWVzdFJlZyk7Ci0JYnR3cml0ZShyZWcsIFpSMzYwNTdfSkNHSSk7Ci0KLQlpZiAoenItPmNhcmQudmlkZW9fdmZlID09IENPREVDX1RZUEVfWlIzNjAxNiAmJgotCSAgICB6ci0+Y2FyZC52aWRlb19jb2RlYyA9PSBDT0RFQ19UWVBFX1pSMzYwNTApIHsKLQkJLyogRW5hYmxlIHByb2Nlc3Npbmcgb24gdGhlIFpSMzYwMTYgKi8KLQkJaWYgKHpyLT52ZmUpCi0JCQl6cjM2MDE2X3dyaXRlKHpyLT52ZmUsIDAsIDEpOwotCi0JCS8qIGxvYWQgdGhlIGFkZHJlc3Mgb2YgdGhlIEdPIHJlZ2lzdGVyIGluIHRoZSBaUjM2MDUwIGxhdGNoICovCi0JCXBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAwLCAwLCAwKTsKLQl9Ci0KLQkvKiBhc3NlcnQgQWN0aXZlICovCi0JYnRvcihaUjM2MDU3X0pQQ19BY3RpdmUsIFpSMzYwNTdfSlBDKTsKLQotCS8qIGVuYWJsZSB0aGUgR28gZ2VuZXJhdGlvbiAqLwotCWJ0b3IoWlIzNjA1N19KTUNfR29fZW4sIFpSMzYwNTdfSk1DKTsKLQl1ZGVsYXkoMzApOwotCi0Jc2V0X2ZyYW1lKHpyLCAxKTsJLy8gL0ZSQU1FCi0KLQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBqcGVnX3N0YXJ0XG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci19Ci0KLXZvaWQKLXpyMzYwNTdfZW5hYmxlX2pwZyAoc3RydWN0IHpvcmFuICAgICAgICAgICp6ciwKLQkJICAgIGVudW0gem9yYW5fY29kZWNfbW9kZSAgbW9kZSkKLXsKLQlzdGF0aWMgaW50IHplcm87Ci0Jc3RhdGljIGludCBvbmUgPSAxOwotCXN0cnVjdCB2ZmVfc2V0dGluZ3MgY2FwOwotCWludCBmaWVsZF9zaXplID0KLQkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplIC8genItPmpwZ19zZXR0aW5ncy5maWVsZF9wZXJfYnVmZjsKLQotCXpyLT5jb2RlY19tb2RlID0gbW9kZTsKLQotCWNhcC54ID0genItPmpwZ19zZXR0aW5ncy5pbWdfeDsKLQljYXAueSA9IHpyLT5qcGdfc2V0dGluZ3MuaW1nX3k7Ci0JY2FwLndpZHRoID0genItPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGg7Ci0JY2FwLmhlaWdodCA9IHpyLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodDsKLQljYXAuZGVjaW1hdGlvbiA9Ci0JICAgIHpyLT5qcGdfc2V0dGluZ3MuSG9yRGNtIHwgKHpyLT5qcGdfc2V0dGluZ3MuVmVyRGNtIDw8IDgpOwotCWNhcC5xdWFsaXR5ID0genItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5xdWFsaXR5OwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0KLQljYXNlIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzogewotCQlzdHJ1Y3QganBlZ19hcHBfbWFya2VyIGFwcDsKLQkJc3RydWN0IGpwZWdfY29tX21hcmtlciBjb207Ci0KLQkJLyogSW4gbW90aW9uIGNvbXByZXNzIG1vZGUsIHRoZSBkZWNvZGVyIG91dHB1dCBtdXN0IGJlIGVuYWJsZWQsIGFuZAotCQkgKiB0aGUgdmlkZW8gYnVzIGRpcmVjdGlvbiBzZXQgdG8gaW5wdXQuCi0JCSAqLwotCQlzZXRfdmlkZW9idXNfZGlyKHpyLCAwKTsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZvbmUpOwotCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmemVybyk7Ci0KLQkJLyogVGFrZSB0aGUgSlBFRyBjb2RlYyBhbmQgdGhlIFZGRSBvdXQgb2Ygc2xlZXAgKi8KLQkJanBlZ19jb2RlY19zbGVlcCh6ciwgMCk7Ci0KLQkJLyogc2V0IEpQRUcgYXBwL2NvbSBtYXJrZXIgKi8KLQkJYXBwLmFwcG4gPSB6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUG47Ci0JCWFwcC5sZW4gPSB6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW47Ci0JCW1lbWNweShhcHAuZGF0YSwgenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSwgNjApOwotCQl6ci0+Y29kZWMtPmNvbnRyb2woenItPmNvZGVjLCBDT0RFQ19TX0pQRUdfQVBQX0RBVEEsCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBqcGVnX2FwcF9tYXJrZXIpLCAmYXBwKTsKLQotCQljb20ubGVuID0genItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuOwotCQltZW1jcHkoY29tLmRhdGEsIHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2RhdGEsIDYwKTsKLQkJenItPmNvZGVjLT5jb250cm9sKHpyLT5jb2RlYywgQ09ERUNfU19KUEVHX0NPTV9EQVRBLAotCQkJCSAgIHNpemVvZihzdHJ1Y3QganBlZ19jb21fbWFya2VyKSwgJmNvbSk7Ci0KLQkJLyogU2V0dXAgdGhlIEpQRUcgY29kZWMgKi8KLQkJenItPmNvZGVjLT5jb250cm9sKHpyLT5jb2RlYywgQ09ERUNfU19KUEVHX1REU19CWVRFLAotCQkJCSAgIHNpemVvZihpbnQpLCAmZmllbGRfc2l6ZSk7Ci0JCXpyLT5jb2RlYy0+c2V0X3ZpZGVvKHpyLT5jb2RlYywgenItPnRpbWluZywgJmNhcCwKLQkJCQkgICAgICZ6ci0+Y2FyZC52ZmVfcG9sKTsKLQkJenItPmNvZGVjLT5zZXRfbW9kZSh6ci0+Y29kZWMsIENPREVDX0RPX0NPTVBSRVNTSU9OKTsKLQotCQkvKiBTZXR1cCB0aGUgVkZFICovCi0JCWlmICh6ci0+dmZlKSB7Ci0JCQl6ci0+dmZlLT5jb250cm9sKHpyLT52ZmUsIENPREVDX1NfSlBFR19URFNfQllURSwKLQkJCQkJIHNpemVvZihpbnQpLCAmZmllbGRfc2l6ZSk7Ci0JCQl6ci0+dmZlLT5zZXRfdmlkZW8oenItPnZmZSwgenItPnRpbWluZywgJmNhcCwKLQkJCQkJICAgJnpyLT5jYXJkLnZmZV9wb2wpOwotCQkJenItPnZmZS0+c2V0X21vZGUoenItPnZmZSwgQ09ERUNfRE9fQ09NUFJFU1NJT04pOwotCQl9Ci0KLQkJaW5pdF9qcGVnX3F1ZXVlKHpyKTsKLQkJenIzNjA1N19zZXRfanBnKHpyLCBtb2RlKTsJLy8gXFBfUmVzZXQsIC4uLiBWaWRlbyBwYXJhbSwgRklGTwotCi0JCWNsZWFyX2ludGVycnVwdF9jb3VudGVycyh6cik7Ci0JCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogZW5hYmxlX2pwZyhNT1RJT05fQ09NUFJFU1MpXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOgotCQkvKiBJbiBtb3Rpb24gZGVjb21wcmVzc2lvbiBtb2RlLCB0aGUgZGVjb2RlciBvdXRwdXQgbXVzdCBiZSBkaXNhYmxlZCwgYW5kCi0JCSAqIHRoZSB2aWRlbyBidXMgZGlyZWN0aW9uIHNldCB0byBvdXRwdXQuCi0JCSAqLwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJnplcm8pOwotCQlzZXRfdmlkZW9idXNfZGlyKHpyLCAxKTsKLQkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJm9uZSk7Ci0KLQkJLyogVGFrZSB0aGUgSlBFRyBjb2RlYyBhbmQgdGhlIFZGRSBvdXQgb2Ygc2xlZXAgKi8KLQkJanBlZ19jb2RlY19zbGVlcCh6ciwgMCk7Ci0JCS8qIFNldHVwIHRoZSBWRkUgKi8KLQkJaWYgKHpyLT52ZmUpIHsKLQkJCXpyLT52ZmUtPnNldF92aWRlbyh6ci0+dmZlLCB6ci0+dGltaW5nLCAmY2FwLAotCQkJCQkgICAmenItPmNhcmQudmZlX3BvbCk7Ci0JCQl6ci0+dmZlLT5zZXRfbW9kZSh6ci0+dmZlLCBDT0RFQ19ET19FWFBBTlNJT04pOwotCQl9Ci0JCS8qIFNldHVwIHRoZSBKUEVHIGNvZGVjICovCi0JCXpyLT5jb2RlYy0+c2V0X3ZpZGVvKHpyLT5jb2RlYywgenItPnRpbWluZywgJmNhcCwKLQkJCQkgICAgICZ6ci0+Y2FyZC52ZmVfcG9sKTsKLQkJenItPmNvZGVjLT5zZXRfbW9kZSh6ci0+Y29kZWMsIENPREVDX0RPX0VYUEFOU0lPTik7Ci0KLQkJaW5pdF9qcGVnX3F1ZXVlKHpyKTsKLQkJenIzNjA1N19zZXRfanBnKHpyLCBtb2RlKTsJLy8gXFBfUmVzZXQsIC4uLiBWaWRlbyBwYXJhbSwgRklGTwotCi0JCWNsZWFyX2ludGVycnVwdF9jb3VudGVycyh6cik7Ci0JCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogZW5hYmxlX2pwZyhNT1RJT05fREVDT01QUkVTUylcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBCVVpfTU9ERV9JRExFOgotCWRlZmF1bHQ6Ci0JCS8qIHNodXQgZG93biBwcm9jZXNzaW5nICovCi0JCWJ0YW5kKH4oenItPmNhcmQuanBlZ19pbnQgfCBaUjM2MDU3X0lDUl9KUEVHUmVwSVJRKSwKLQkJICAgICAgWlIzNjA1N19JQ1IpOwotCQlidHdyaXRlKHpyLT5jYXJkLmpwZWdfaW50IHwgWlIzNjA1N19JQ1JfSlBFR1JlcElSUSwKLQkJCVpSMzYwNTdfSVNSKTsKLQkJYnRhbmQoflpSMzYwNTdfSk1DX0dvX2VuLCBaUjM2MDU3X0pNQyk7CS8vIFxHb19lbgotCi0JCW1zbGVlcCg1MCk7Ci0KLQkJc2V0X3ZpZGVvYnVzX2Rpcih6ciwgMCk7Ci0JCXNldF9mcmFtZSh6ciwgMSk7CS8vIC9GUkFNRQotCQlidG9yKFpSMzYwNTdfTUNUQ1JfQ0ZsdXNoLCBaUjM2MDU3X01DVENSKTsJLy8gL0NGbHVzaAotCQlidHdyaXRlKDAsIFpSMzYwNTdfSlBDKTsJLy8gXFBfUmVzZXQsXENvZFRybnNFbixcQWN0aXZlCi0JCWJ0YW5kKH5aUjM2MDU3X0pNQ19WRklGT19GQiwgWlIzNjA1N19KTUMpOwotCQlidGFuZCh+WlIzNjA1N19KTUNfU3luY01zdHIsIFpSMzYwNTdfSk1DKTsKLQkJanBlZ19jb2RlY19yZXNldCh6cik7Ci0JCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOwotCQl6cjM2MDU3X2FkanVzdF92ZmUoenIsIG1vZGUpOwotCi0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9FTkFCTEVfT1VUUFVULCAmb25lKTsKLQkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJnplcm8pOwotCi0JCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogZW5hYmxlX2pwZyhJRExFKVxuIiwgWlJfREVWTkFNRSh6cikpOwotCQlicmVhazsKLQotCX0KLX0KLQotLyogd2hlbiB0aGlzIGlzIGNhbGxlZCB0aGUgc3BpbmxvY2sgbXVzdCBiZSBoZWxkICovCi12b2lkCi16b3Jhbl9mZWVkX3N0YXRfY29tIChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCS8qIG1vdmUgZnJhbWVzIGZyb20gcGVuZGluZyBxdWV1ZSB0byBETUEgKi8KLQotCWludCBmcmFtZSwgaSwgbWF4X3N0YXRfY29tOwotCi0JbWF4X3N0YXRfY29tID0KLQkgICAgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09Ci0JICAgICAxKSA/IEJVWl9OVU1fU1RBVF9DT00gOiAoQlVaX05VTV9TVEFUX0NPTSA+PiAxKTsKLQotCXdoaWxlICgoenItPmpwZ19kbWFfaGVhZCAtIHpyLT5qcGdfZG1hX3RhaWwpIDwgbWF4X3N0YXRfY29tICYmCi0JICAgICAgIHpyLT5qcGdfZG1hX2hlYWQgPCB6ci0+anBnX3F1ZV9oZWFkKSB7Ci0KLQkJZnJhbWUgPSB6ci0+anBnX3BlbmRbenItPmpwZ19kbWFfaGVhZCAmIEJVWl9NQVNLX0ZSQU1FXTsKLQkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpIHsKLQkJCS8qIGZpbGwgMSBzdGF0X2NvbSBlbnRyeSAqLwotCQkJaSA9ICh6ci0+anBnX2RtYV9oZWFkIC0KLQkJCSAgICAgenItPmpwZ19lcnJfc2hpZnQpICYgQlVaX01BU0tfU1RBVF9DT007Ci0JCQlpZiAoISh6ci0+c3RhdF9jb21baV0gJiBjcHVfdG9fbGUzMigxKSkpCi0JCQkJYnJlYWs7Ci0JCQl6ci0+c3RhdF9jb21baV0gPQotCQkJICAgIGNwdV90b19sZTMyKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmZyYWdfdGFiX2J1cyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBmaWxsIDIgc3RhdF9jb20gZW50cmllcyAqLwotCQkJaSA9ICgoenItPmpwZ19kbWFfaGVhZCAtCi0JCQkgICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJiAxKSAqIDI7Ci0JCQlpZiAoISh6ci0+c3RhdF9jb21baV0gJiBjcHVfdG9fbGUzMigxKSkpCi0JCQkJYnJlYWs7Ci0JCQl6ci0+c3RhdF9jb21baV0gPQotCQkJICAgIGNwdV90b19sZTMyKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmZyYWdfdGFiX2J1cyk7Ci0JCQl6ci0+c3RhdF9jb21baSArIDFdID0KLQkJCSAgICBjcHVfdG9fbGUzMih6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5mcmFnX3RhYl9idXMpOwotCQl9Ci0JCXpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX0RNQTsKLQkJenItPmpwZ19kbWFfaGVhZCsrOwotCi0JfQotCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykKLQkJenItPmpwZ19xdWV1ZWRfbnVtKys7Ci19Ci0KLS8qIHdoZW4gdGhpcyBpcyBjYWxsZWQgdGhlIHNwaW5sb2NrIG11c3QgYmUgaGVsZCAqLwotc3RhdGljIHZvaWQKLXpvcmFuX3JlYXBfc3RhdF9jb20gKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JLyogbW92ZSBmcmFtZXMgZnJvbSBETUEgcXVldWUgdG8gZG9uZSBxdWV1ZSAqLwotCi0JaW50IGk7Ci0JdTMyIHN0YXRfY29tOwotCXVuc2lnbmVkIGludCBzZXE7Ci0JdW5zaWduZWQgaW50IGRpZjsKLQlzdHJ1Y3Qgem9yYW5fanBnX2J1ZmZlciAqYnVmZmVyOwotCWludCBmcmFtZTsKLQotCS8qIEluIG1vdGlvbiBkZWNvbXByZXNzIHdlIGRvbid0IGhhdmUgYSBoYXJkd2FyZSBmcmFtZSBjb3VudGVyLAotCSAqIHdlIGp1c3QgY291bnQgdGhlIGludGVycnVwdHMgaGVyZSAqLwotCi0JaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSB7Ci0JCXpyLT5qcGdfc2VxX251bSsrOwotCX0KLQl3aGlsZSAoenItPmpwZ19kbWFfdGFpbCA8IHpyLT5qcGdfZG1hX2hlYWQpIHsKLQkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQlpID0gKHpyLT5qcGdfZG1hX3RhaWwgLQotCQkJICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJiBCVVpfTUFTS19TVEFUX0NPTTsKLQkJZWxzZQotCQkJaSA9ICgoenItPmpwZ19kbWFfdGFpbCAtCi0JCQkgICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJiAxKSAqIDIgKyAxOwotCi0JCXN0YXRfY29tID0gbGUzMl90b19jcHUoenItPnN0YXRfY29tW2ldKTsKLQotCQlpZiAoKHN0YXRfY29tICYgMSkgPT0gMCkgewotCQkJcmV0dXJuOwotCQl9Ci0JCWZyYW1lID0genItPmpwZ19wZW5kW3pyLT5qcGdfZG1hX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07Ci0JCWJ1ZmZlciA9ICZ6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXTsKLQkJZG9fZ2V0dGltZW9mZGF5KCZidWZmZXItPmJzLnRpbWVzdGFtcCk7Ci0KLQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgewotCQkJYnVmZmVyLT5icy5sZW5ndGggPSAoc3RhdF9jb20gJiAweDdmZmZmZikgPj4gMTsKLQotCQkJLyogdXBkYXRlIHNlcXVlbmNlIG51bWJlciB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjb3VudGVyIGluIHN0YXRfY29tICovCi0KLQkJCXNlcSA9ICgoc3RhdF9jb20gPj4gMjQpICsgenItPmpwZ19lcnJfc2VxKSAmIDB4ZmY7Ci0JCQlkaWYgPSAoc2VxIC0genItPmpwZ19zZXFfbnVtKSAmIDB4ZmY7Ci0JCQl6ci0+anBnX3NlcV9udW0gKz0gZGlmOwotCQl9IGVsc2UgewotCQkJYnVmZmVyLT5icy5sZW5ndGggPSAwOwotCQl9Ci0JCWJ1ZmZlci0+YnMuc2VxID0KLQkJICAgIHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09Ci0JCSAgICAyID8gKHpyLT5qcGdfc2VxX251bSA+PiAxKSA6IHpyLT5qcGdfc2VxX251bTsKLQkJYnVmZmVyLT5zdGF0ZSA9IEJVWl9TVEFURV9ET05FOwotCi0JCXpyLT5qcGdfZG1hX3RhaWwrKzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1lcnJvcl9oYW5kbGVyIChzdHJ1Y3Qgem9yYW4gKnpyLAotCSAgICAgICB1MzIgICAgICAgICAgIGFzdGF0LAotCSAgICAgICB1MzIgICAgICAgICAgIHN0YXQpCi17Ci0JLyogVGhpcyBpcyBKUEVHIGVycm9yIGhhbmRsaW5nIHBhcnQgKi8KLQlpZiAoKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgJiYKLQkgICAgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSkgewotCQkvL2RwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBJbnRlcm5hbCBlcnJvcjogZXJyb3IgaGFuZGxpbmcgcmVxdWVzdCBpbiBtb2RlICVkXG4iLCBaUl9ERVZOQU1FKHpyKSwgenItPmNvZGVjX21vZGUpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKChzdGF0ICYgMSkgPT0gMCAmJgotCSAgICB6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MgJiYKLQkgICAgenItPmpwZ19kbWFfdGFpbCAtIHpyLT5qcGdfcXVlX3RhaWwgPj0KLQkgICAgIHpyLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycykgewotCQkvKiBObyBmcmVlIGJ1ZmZlcnMuLi4gKi8KLQkJem9yYW5fcmVhcF9zdGF0X2NvbSh6cik7Ci0JCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT5qcGdfY2FwcSk7Ci0JCXpyLT5KUEVHX21pc3NlZCA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoenItPkpQRUdfZXJyb3IgIT0gMSkgewotCQkvKgotCQkgKiBGaXJzdCBlbnRyeTogZXJyb3IganVzdCBoYXBwZW5lZCBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbgotCQkgKgotCQkgKiBJbiBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M6Ci0JCSAqCi0JCSAqIFBvc3NpYmxlIGdsaXRjaCBpbiBUViBzaWduYWwuIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQKLQkJICogc3RvcCB0aGUgY29kZWMgYW5kIHdhaXQgZm9yIGdvb2QgcXVhbGl0eSBzaWduYWwgYmVmb3JlCi0JCSAqIHJlc3RhcnRpbmcgaXQgdG8gYXZvaWQgZnVydGhlciBwcm9ibGVtcwotCQkgKgotCQkgKiBJbiBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzoKLQkJICoKLQkJICogQmFkIEpQRUcgZnJhbWU6IHdlIGhhdmUgdG8gbWFyayBpdCBhcyBwcm9jZXNzZWQgKGNvZGVjIGNyYXNoZWQKLQkJICogYW5kIHdhcyBub3QgYWJsZSB0byBkbyBpdCBpdHNlbGYpLCBhbmQgdG8gcmVtb3ZlIGl0IGZyb20gcXVldWUuCi0JCSAqLwotCQlidGFuZCh+WlIzNjA1N19KTUNfR29fZW4sIFpSMzYwNTdfSk1DKTsKLQkJdWRlbGF5KDEpOwotCQlzdGF0ID0gc3RhdCB8IChwb3N0X29mZmljZV9yZWFkKHpyLCA3LCAwKSAmIDMpIDw8IDg7Ci0JCWJ0d3JpdGUoMCwgWlIzNjA1N19KUEMpOwotCQlidG9yKFpSMzYwNTdfTUNUQ1JfQ0ZsdXNoLCBaUjM2MDU3X01DVENSKTsKLQkJanBlZ19jb2RlY19yZXNldCh6cik7Ci0JCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOwotCQl6ci0+SlBFR19lcnJvciA9IDE7Ci0JCXpyLT5udW1fZXJyb3JzKys7Ci0KLQkJLyogUmVwb3J0IGVycm9yICovCi0JCWlmICh6cjM2MDY3X2RlYnVnID4gMSAmJiB6ci0+bnVtX2Vycm9ycyA8PSA4KSB7Ci0JCQlsb25nIGZyYW1lOwotCQkJZnJhbWUgPQotCQkJICAgIHpyLT5qcGdfcGVuZFt6ci0+anBnX2RtYV90YWlsICYgQlVaX01BU0tfRlJBTUVdOwotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBKUEVHIGVycm9yIHN0YXQ9MHglMDh4KDB4JTA4eCkgcXVldWVfc3RhdGU9JWxkLyVsZC8lbGQvJWxkIHNlcT0lbGQgZnJhbWU9JWxkLiBDb2RlYyBzdG9wcGVkLiAiLAotCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBzdGF0LCB6ci0+bGFzdF9pc3IsCi0JCQkgICAgICAgenItPmpwZ19xdWVfdGFpbCwgenItPmpwZ19kbWFfdGFpbCwKLQkJCSAgICAgICB6ci0+anBnX2RtYV9oZWFkLCB6ci0+anBnX3F1ZV9oZWFkLAotCQkJICAgICAgIHpyLT5qcGdfc2VxX251bSwgZnJhbWUpOwotCQkJcHJpbnRrKCJzdGF0X2NvbSBmcmFtZXM6Iik7Ci0JCQl7Ci0JCQkJaW50IGksIGo7Ci0JCQkJZm9yIChqID0gMDsgaiA8IEJVWl9OVU1fU1RBVF9DT007IGorKykgewotCQkJCQlmb3IgKGkgPSAwOwotCQkJCQkgICAgIGkgPCB6ci0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnM7Ci0JCQkJCSAgICAgaSsrKSB7Ci0JCQkJCQlpZiAobGUzMl90b19jcHUoenItPnN0YXRfY29tW2pdKSA9PQotCQkJCQkJICAgIHpyLT5qcGdfYnVmZmVycy4KLQkJCQkJCSAgICBidWZmZXJbaV0uCi0JCQkJCQkgICAgZnJhZ190YWJfYnVzKSB7Ci0JCQkJCQkJcHJpbnRrKCIlIGQtPiVkIiwKLQkJCQkJCQkgICAgICAgaiwgaSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcHJpbnRrKCJcbiIpOwotCQkJfQotCQl9Ci0JCS8qIEZpbmQgYW4gZW50cnkgaW4gc3RhdF9jb20gYW5kIHJvdGF0ZSBjb250ZW50cyAqLwotCQl7Ci0JCQlpbnQgaTsKLQotCQkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJaSA9ICh6ci0+anBnX2RtYV90YWlsIC0KLQkJCQkgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIEJVWl9NQVNLX1NUQVRfQ09NOwotCQkJZWxzZQotCQkJCWkgPSAoKHpyLT5qcGdfZG1hX3RhaWwgLQotCQkJCSAgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIDEpICogMjsKLQkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykgewotCQkJCS8qIE1pbWljIHpyMzYwNjcgb3BlcmF0aW9uICovCi0JCQkJenItPnN0YXRfY29tW2ldIHw9IGNwdV90b19sZTMyKDEpOwotCQkJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSAhPSAxKQotCQkJCQl6ci0+c3RhdF9jb21baSArIDFdIHw9IGNwdV90b19sZTMyKDEpOwotCQkJCS8qIFJlZmlsbCAqLwotCQkJCXpvcmFuX3JlYXBfc3RhdF9jb20oenIpOwotCQkJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPmpwZ19jYXBxKTsKLQkJCQkvKiBGaW5kIGFuIGVudHJ5IGluIHN0YXRfY29tIGFnYWluIGFmdGVyIHJlZmlsbCAqLwotCQkJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlpID0gKHpyLT5qcGdfZG1hX3RhaWwgLQotCQkJCQkgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmCi0JCQkJCSAgICBCVVpfTUFTS19TVEFUX0NPTTsKLQkJCQllbHNlCi0JCQkJCWkgPSAoKHpyLT5qcGdfZG1hX3RhaWwgLQotCQkJCQkgICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJiAxKSAqIDI7Ci0JCQl9Ci0JCQlpZiAoaSkgewotCQkJCS8qIFJvdGF0ZSBzdGF0X2NvbW0gZW50cmllcyB0byBtYWtlIGN1cnJlbnQgZW50cnkgZmlyc3QgKi8KLQkJCQlpbnQgajsKLQkJCQlfX2xlMzIgYnVzX2FkZHJbQlVaX05VTV9TVEFUX0NPTV07Ci0KLQkJCQkvKiBIZXJlIHdlIGFyZSBjb3B5aW5nIHRoZSBzdGF0X2NvbSBhcnJheSwgd2hpY2gKLQkJCQkgKiBpcyBhbHJlYWR5IGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0LCBzbwotCQkJCSAqIG5vIGVuZGlhbiBjb252ZXJzaW9ucyBoZXJlCi0JCQkJICovCi0JCQkJbWVtY3B5KGJ1c19hZGRyLCB6ci0+c3RhdF9jb20sCi0JCQkJICAgICAgIHNpemVvZihidXNfYWRkcikpOwotCQkJCWZvciAoaiA9IDA7IGogPCBCVVpfTlVNX1NUQVRfQ09NOyBqKyspIHsKLQkJCQkJenItPnN0YXRfY29tW2pdID0KLQkJCQkJICAgIGJ1c19hZGRyWyhpICsgaikgJgotCQkJCQkJICAgICBCVVpfTUFTS19TVEFUX0NPTV07Ci0KLQkJCQl9Ci0JCQkJenItPmpwZ19lcnJfc2hpZnQgKz0gaTsKLQkJCQl6ci0+anBnX2Vycl9zaGlmdCAmPSBCVVpfTUFTS19TVEFUX0NPTTsKLQkJCX0KLQkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpCi0JCQkJenItPmpwZ19lcnJfc2VxID0genItPmpwZ19zZXFfbnVtOwkvKiArIDE7ICovCi0JCX0KLQl9Ci0KLQkvKiBOb3cgdGhlIHN0YXRfY29tbSBidWZmZXIgaXMgcmVhZHkgZm9yIHJlc3RhcnQgKi8KLQlkbyB7Ci0JCWludCBzdGF0dXMsIG1vZGU7Ci0KLQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgewotCQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9TVEFUVVMsICZzdGF0dXMpOwotCQkJbW9kZSA9IENPREVDX0RPX0NPTVBSRVNTSU9OOwotCQl9IGVsc2UgewotCQkJc3RhdHVzID0gMDsKLQkJCW1vZGUgPSBDT0RFQ19ET19FWFBBTlNJT047Ci0JCX0KLQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTIHx8Ci0JCSAgICAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfR09PRCkpIHsKLQkJCS8qKioqKioqKioqIFJFU1RBUlQgY29kZSAqKioqKioqKioqKioqLwotCQkJanBlZ19jb2RlY19yZXNldCh6cik7Ci0JCQl6ci0+Y29kZWMtPnNldF9tb2RlKHpyLT5jb2RlYywgbW9kZSk7Ci0JCQl6cjM2MDU3X3NldF9qcGcoenIsIHpyLT5jb2RlY19tb2RlKTsKLQkJCWpwZWdfc3RhcnQoenIpOwotCi0JCQlpZiAoenItPm51bV9lcnJvcnMgPD0gOCkKLQkJCQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IFJlc3RhcnRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKLQotCQkJenItPkpQRUdfbWlzc2VkID0gMDsKLQkJCXpyLT5KUEVHX2Vycm9yID0gMjsKLQkJCS8qKioqKioqKioqIEVuZCBSRVNUQVJUIGNvZGUgKioqKioqKioqKiovCi0JCX0KLQl9IHdoaWxlICgwKTsKLX0KLQotaXJxcmV0dXJuX3QKLXpvcmFuX2lycSAoaW50ICAgICAgICAgICAgIGlycSwKLQkgICB2b2lkICAgICAgICAgICAqZGV2X2lkKQotewotCXUzMiBzdGF0LCBhc3RhdDsKLQlpbnQgY291bnQ7Ci0Jc3RydWN0IHpvcmFuICp6cjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JenIgPSBkZXZfaWQ7Ci0JY291bnQgPSAwOwotCi0JaWYgKHpyLT50ZXN0aW5nKSB7Ci0JCS8qIFRlc3RpbmcgaW50ZXJydXB0cyAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0JCXdoaWxlICgoc3RhdCA9IGNvdW50X3Jlc2V0X2ludGVycnVwdCh6cikpKSB7Ci0JCQlpZiAoY291bnQrKyA+IDEwMCkgewotCQkJCWJ0YW5kKH5aUjM2MDU3X0lDUl9JbnRQaW5FbiwgWlIzNjA1N19JQ1IpOwotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBJUlEgbG9ja3VwIHdoaWxlIHRlc3RpbmcsIGlzcj0weCUwOHgsIGNsZWFyZWQgaW50IG1hc2tcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBzdGF0KTsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT50ZXN0X3EpOwotCQkJfQotCQl9Ci0JCXpyLT5sYXN0X2lzciA9IHN0YXQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCXdoaWxlICgxKSB7Ci0JCS8qIGdldC9jbGVhciBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMgKi8KLQkJc3RhdCA9IGNvdW50X3Jlc2V0X2ludGVycnVwdCh6cik7Ci0JCWFzdGF0ID0gc3RhdCAmIElSUV9NQVNLOwotCQlpZiAoIWFzdGF0KSB7Ci0JCQlicmVhazsKLQkJfQotCQlkcHJpbnRrKDQsCi0JCQlLRVJOX0RFQlVHCi0JCQkiem9yYW5faXJxOiBhc3RhdDogMHglMDh4LCBtYXNrOiAweCUwOHhcbiIsCi0JCQlhc3RhdCwgYnRyZWFkKFpSMzYwNTdfSUNSKSk7Ci0JCWlmIChhc3RhdCAmIHpyLT5jYXJkLnZzeW5jX2ludCkgewkvLyBTVwotCi0JCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MgfHwKLQkJCSAgICB6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpIHsKLQkJCQkvKiBjb3VudCBtaXNzZWQgaW50ZXJydXB0cyAqLwotCQkJCXpyLT5KUEVHX21pc3NlZCsrOwotCQkJfQotCQkJLy9wb3N0X29mZmljZV9yZWFkKHpyLDEsMCk7Ci0JCQkvKiBJbnRlcnJ1cHRzIG1heSBzdGlsbCBoYXBwZW4gd2hlbgotCQkJICogenItPnY0bF9tZW1ncmFiX2FjdGl2ZSBpcyBzd2l0Y2hlZCBvZmYuCi0JCQkgKiBXZSBzaW1wbHkgaWdub3JlIHRoZW0gKi8KLQotCQkJaWYgKHpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpIHsKLQotCQkJCS8qIEEgbG90IG1vcmUgY2hlY2tzIHNob3VsZCBiZSBoZXJlIC4uLiAqLwotCQkJCWlmICgoYnRyZWFkKFpSMzYwNTdfVlNTRkdSKSAmCi0JCQkJICAgICBaUjM2MDU3X1ZTU0ZHUl9TbmFwU2hvdCkgPT0gMCkKLQkJCQkJZHByaW50aygxLAotCQkJCQkJS0VSTl9XQVJOSU5HCi0JCQkJCQkiJXM6IEJ1eklSUSB3aXRoIFNuYXBTaG90IG9mZiA/Pz9cbiIsCi0JCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJCQlpZiAoenItPnY0bF9ncmFiX2ZyYW1lICE9IE5PX0dSQUJfQUNUSVZFKSB7Ci0JCQkJCS8qIFRoZXJlIGlzIGEgZ3JhYiBvbiBhIGZyYW1lIGdvaW5nIG9uLCBjaGVjayBpZiBpdCBoYXMgZmluaXNoZWQgKi8KLQotCQkJCQlpZiAoKGJ0cmVhZChaUjM2MDU3X1ZTU0ZHUikgJgotCQkJCQkgICAgIFpSMzYwNTdfVlNTRkdSX0ZyYW1lR3JhYikgPT0KLQkJCQkJICAgIDApIHsKLQkJCQkJCS8qIGl0IGlzIGZpbmlzaGVkLCBub3RpZnkgdGhlIHVzZXIgKi8KLQotCQkJCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlclt6ci0+djRsX2dyYWJfZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX0RPTkU7Ci0JCQkJCQl6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW3pyLT52NGxfZ3JhYl9mcmFtZV0uYnMuc2VxID0genItPnY0bF9ncmFiX3NlcTsKLQkJCQkJCWRvX2dldHRpbWVvZmRheSgmenItPnY0bF9idWZmZXJzLmJ1ZmZlclt6ci0+djRsX2dyYWJfZnJhbWVdLmJzLnRpbWVzdGFtcCk7Ci0JCQkJCQl6ci0+djRsX2dyYWJfZnJhbWUgPSBOT19HUkFCX0FDVElWRTsKLQkJCQkJCXpyLT52NGxfcGVuZF90YWlsKys7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlpZiAoenItPnY0bF9ncmFiX2ZyYW1lID09IE5PX0dSQUJfQUNUSVZFKQotCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT52NGxfY2FwcSk7Ci0KLQkJCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBhbm90aGVyIGdyYWIgcXVldWVkICovCi0KLQkJCQlpZiAoenItPnY0bF9ncmFiX2ZyYW1lID09IE5PX0dSQUJfQUNUSVZFICYmCi0JCQkJICAgIHpyLT52NGxfcGVuZF90YWlsICE9IHpyLT52NGxfcGVuZF9oZWFkKSB7Ci0KLQkJCQkJaW50IGZyYW1lID0genItPnY0bF9wZW5kW3pyLT52NGxfcGVuZF90YWlsICYKLQkJCQkJCQkgVjRMX01BU0tfRlJBTUVdOwotCQkJCQl1MzIgcmVnOwotCi0JCQkJCXpyLT52NGxfZ3JhYl9mcmFtZSA9IGZyYW1lOwotCi0JCQkJCS8qIFNldCB6cjM2MDU3IHZpZGVvIGZyb250IGVuZCBhbmQgZW5hYmxlIHZpZGVvICovCi0KLQkJCQkJLyogQnVmZmVyIGFkZHJlc3MgKi8KLQotCQkJCQlyZWcgPQotCQkJCQkgICAgenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uCi0JCQkJCSAgICBmYnVmZmVyX2J1czsKLQkJCQkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRUUik7Ci0JCQkJCWlmICh6ci0+djRsX3NldHRpbmdzLmhlaWdodCA+Ci0JCQkJCSAgICBCVVpfTUFYX0hFSUdIVCAvIDIpCi0JCQkJCQlyZWcgKz0KLQkJCQkJCSAgICB6ci0+djRsX3NldHRpbmdzLgotCQkJCQkJICAgIGJ5dGVzcGVybGluZTsKLQkJCQkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRCUik7Ci0KLQkJCQkJLyogdmlkZW8gc3RyaWRlLCBzdGF0dXMsIGFuZCBmcmFtZSBncmFiIHJlZ2lzdGVyICovCi0JCQkJCXJlZyA9IDA7Ci0JCQkJCWlmICh6ci0+djRsX3NldHRpbmdzLmhlaWdodCA+Ci0JCQkJCSAgICBCVVpfTUFYX0hFSUdIVCAvIDIpCi0JCQkJCQlyZWcgKz0KLQkJCQkJCSAgICB6ci0+djRsX3NldHRpbmdzLgotCQkJCQkJICAgIGJ5dGVzcGVybGluZTsKLQkJCQkJcmVnID0KLQkJCQkJICAgIChyZWcgPDwKLQkJCQkJICAgICBaUjM2MDU3X1ZTU0ZHUl9EaXNwU3RyaWRlKTsKLQkJCQkJcmVnIHw9IFpSMzYwNTdfVlNTRkdSX1ZpZE92ZjsKLQkJCQkJcmVnIHw9IFpSMzYwNTdfVlNTRkdSX1NuYXBTaG90OwotCQkJCQlyZWcgfD0gWlIzNjA1N19WU1NGR1JfRnJhbWVHcmFiOwotCQkJCQlidHdyaXRlKHJlZywgWlIzNjA1N19WU1NGR1IpOwotCi0JCQkJCWJ0b3IoWlIzNjA1N19WRENSX1ZpZEVuLAotCQkJCQkgICAgIFpSMzYwNTdfVkRDUik7Ci0JCQkJfQotCQkJfQotCi0JCQkvKiBldmVuIGlmIHdlIGRvbid0IGdyYWIsIHdlIGRvIHdhbnQgdG8gaW5jcmVtZW50Ci0JCQkgKiB0aGUgc2VxdWVuY2UgY291bnRlciB0byBzZWUgbG9zdCBmcmFtZXMgKi8KLQkJCXpyLT52NGxfZ3JhYl9zZXErKzsKLQkJfQotI2lmIChJUlFfTUFTSyAmIFpSMzYwNTdfSVNSX0NvZFJlcElSUSkKLQkJaWYgKGFzdGF0ICYgWlIzNjA1N19JU1JfQ29kUmVwSVJRKSB7Ci0JCQl6ci0+aW50cl9jb3VudGVyX0NvZFJlcElSUSsrOwotCQkJSURFQlVHKHByaW50awotCQkJICAgICAgIChLRVJOX0RFQlVHICIlczogWlIzNjA1N19JU1JfQ29kUmVwSVJRXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKSk7Ci0JCQlidGFuZCh+WlIzNjA1N19JQ1JfQ29kUmVwSVJRLCBaUjM2MDU3X0lDUik7Ci0JCX0KLSNlbmRpZgkJCQkvKiAoSVJRX01BU0sgJiBaUjM2MDU3X0lTUl9Db2RSZXBJUlEpICovCi0KLSNpZiAoSVJRX01BU0sgJiBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRKQotCQlpZiAoYXN0YXQgJiBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRKSB7Ci0KLQkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyB8fAotCQkJICAgIHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgewotCQkJCWlmICh6cjM2MDY3X2RlYnVnID4gMSAmJgotCQkJCSAgICAoIXpyLT5mcmFtZV9udW0gfHwgenItPkpQRUdfZXJyb3IpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJICAgICAgICIlczogZmlyc3QgZnJhbWUgcmVhZHk6IHN0YXRlPTB4JTA4eCBvZGRfZXZlbj0lZCBmaWVsZF9wZXJfYnVmZj0lZCBkZWxheT0lZFxuIiwKLQkJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBzdGF0LAotCQkJCQkgICAgICAgenItPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiwKLQkJCQkJICAgICAgIHpyLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgICBmaWVsZF9wZXJfYnVmZiwKLQkJCQkJICAgICAgIHpyLT5KUEVHX21pc3NlZCk7Ci0JCQkJCXsKLQkJCQkJCWNoYXIgc2NbXSA9ICIwMDAwIjsKLQkJCQkJCWNoYXIgc3ZbNV07Ci0JCQkJCQlpbnQgaTsKLQkJCQkJCXN0cmNweShzdiwgc2MpOwotCQkJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJCQkJCWlmIChsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21baV0pICYgMSkKLQkJCQkJCQkJc3ZbaV0gPSAnMSc7Ci0JCQkJCQl9Ci0JCQkJCQlzdls0XSA9IDA7Ci0JCQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCQkgICAgICAgIiVzOiBzdGF0X2NvbT0lcyBxdWV1ZV9zdGF0ZT0lbGQvJWxkLyVsZC8lbGRcbiIsCi0JCQkJCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN2LAotCQkJCQkJICAgICAgIHpyLT5qcGdfcXVlX3RhaWwsCi0JCQkJCQkgICAgICAgenItPmpwZ19kbWFfdGFpbCwKLQkJCQkJCSAgICAgICB6ci0+anBnX2RtYV9oZWFkLAotCQkJCQkJICAgICAgIHpyLT5qcGdfcXVlX2hlYWQpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKHpyLT5KUEVHX21pc3NlZCA+IHpyLT5KUEVHX21heF9taXNzZWQpCS8vIEdldCBzdGF0aXN0aWNzCi0JCQkJCQl6ci0+SlBFR19tYXhfbWlzc2VkID0KLQkJCQkJCSAgICB6ci0+SlBFR19taXNzZWQ7Ci0JCQkJCWlmICh6ci0+SlBFR19taXNzZWQgPAotCQkJCQkgICAgenItPkpQRUdfbWluX21pc3NlZCkKLQkJCQkJCXpyLT5KUEVHX21pbl9taXNzZWQgPQotCQkJCQkJICAgIHpyLT5KUEVHX21pc3NlZDsKLQkJCQl9Ci0KLQkJCQlpZiAoenIzNjA2N19kZWJ1ZyA+IDIgJiYgenItPmZyYW1lX251bSA8IDYpIHsKLQkJCQkJaW50IGk7Ci0JCQkJCXByaW50aygiJXM6IHNlcT0lbGQgc3RhdF9jb206IiwKLQkJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCB6ci0+anBnX3NlcV9udW0pOwotCQkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQkJCQlwcmludGsoIiAlMDh4IiwKLQkJCQkJCSAgICAgICBsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21baV0pKTsKLQkJCQkJfQotCQkJCQlwcmludGsoIlxuIik7Ci0JCQkJfQotCQkJCXpyLT5mcmFtZV9udW0rKzsKLQkJCQl6ci0+SlBFR19taXNzZWQgPSAwOwotCQkJCXpyLT5KUEVHX2Vycm9yID0gMDsKLQkJCQl6b3Jhbl9yZWFwX3N0YXRfY29tKHpyKTsKLQkJCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT5qcGdfY2FwcSk7Ci0JCQl9IC8qZWxzZSB7Ci0JCQkgICAgICBkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogSlBFRyBpbnRlcnJ1cHQgd2hpbGUgbm90IGluIG1vdGlvbiAoZGUpY29tcHJlc3MgbW9kZSFcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCX0qLwotCQl9Ci0jZW5kaWYJCQkJLyogKElSUV9NQVNLICYgWlIzNjA1N19JU1JfSlBFR1JlcElSUSkgKi8KLQotCQkvKiBEQVRFUlIsIHRvbyBtYW55IGZpZWxkcyBtaXNzZWQsIGVycm9yIHByb2Nlc3NpbmcgKi8KLQkJaWYgKChhc3RhdCAmIHpyLT5jYXJkLmpwZWdfaW50KSB8fAotCQkgICAgenItPkpQRUdfbWlzc2VkID4gMjUgfHwKLQkJICAgIHpyLT5KUEVHX2Vycm9yID09IDEJfHwKLQkJICAgICgoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpICYmCi0JCSAgICAgKHpyLT5mcmFtZV9udW0gJiAoenItPkpQRUdfbWlzc2VkID4KLQkJCQkgICAgICAgenItPmpwZ19zZXR0aW5ncy5maWVsZF9wZXJfYnVmZikpKSkgewotCQkJZXJyb3JfaGFuZGxlcih6ciwgYXN0YXQsIHN0YXQpOwotCQl9Ci0KLQkJY291bnQrKzsKLQkJaWYgKGNvdW50ID4gMTApIHsKLQkJCWRwcmludGsoMiwgS0VSTl9XQVJOSU5HICIlczogaXJxIGxvb3AgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGNvdW50KTsKLQkJCWlmIChjb3VudCA+IDIwKSB7Ci0JCQkJYnRhbmQoflpSMzYwNTdfSUNSX0ludFBpbkVuLCBaUjM2MDU3X0lDUik7Ci0JCQkJZHByaW50aygyLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IElSUSBsb2NrdXAsIGNsZWFyZWQgaW50IG1hc2tcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl6ci0+bGFzdF9pc3IgPSBzdGF0OwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotdm9pZAotem9yYW5fc2V0X3BjaV9tYXN0ZXIgKHN0cnVjdCB6b3JhbiAqenIsCi0JCSAgICAgIGludCAgICAgICAgICAgc2V0X21hc3RlcikKLXsKLQlpZiAoc2V0X21hc3RlcikgewotCQlwY2lfc2V0X21hc3Rlcih6ci0+cGNpX2Rldik7Ci0JfSBlbHNlIHsKLQkJdTE2IGNvbW1hbmQ7Ci0KLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoenItPnBjaV9kZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7Ci0JCWNvbW1hbmQgJj0gflBDSV9DT01NQU5EX01BU1RFUjsKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHpyLT5wY2lfZGV2LCBQQ0lfQ09NTUFORCwgY29tbWFuZCk7Ci0JfQotfQotCi12b2lkCi16b3Jhbl9pbml0X2hhcmR3YXJlIChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCWludCBqLCB6ZXJvID0gMDsKLQotCS8qIEVuYWJsZSBidXMtbWFzdGVyaW5nICovCi0Jem9yYW5fc2V0X3BjaV9tYXN0ZXIoenIsIDEpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgYm9hcmQgKi8KLQlpZiAoenItPmNhcmQuaW5pdCkgewotCQl6ci0+Y2FyZC5pbml0KHpyKTsKLQl9Ci0KLQlqID0genItPmNhcmQuaW5wdXRbenItPmlucHV0XS5tdXhzZWw7Ci0KLQlkZWNvZGVyX2NvbW1hbmQoenIsIDAsIE5VTEwpOwotCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJnpyLT5ub3JtKTsKLQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmaik7Ci0KLQllbmNvZGVyX2NvbW1hbmQoenIsIDAsIE5VTEwpOwotCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfTk9STSwgJnpyLT5ub3JtKTsKLQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmemVybyk7Ci0KLQkvKiB0b2dnbGUgSlBFRyBjb2RlYyBzbGVlcCB0byBzeW5jIFBMTCAqLwotCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOwotCWpwZWdfY29kZWNfc2xlZXAoenIsIDApOwotCi0JLyogc2V0IGluZGl2aWR1YWwgaW50ZXJydXB0IGVuYWJsZXMgKHdpdGhvdXQgR0lSUTEpCi0JICogYnV0IGRvbid0IGdsb2JhbCBlbmFibGUgdW50aWwgem9yYW5fb3BlbigpICovCi0KLQkvL2J0d3JpdGUoSVJRX01BU0sgJiB+WlIzNjA1N19JU1JfR0lSUTEsIFpSMzYwNTdfSUNSKTsgIC8vIFNXCi0JLy8gSXQgbG9va3MgbGlrZSB1c2luZyBvbmx5IEpQRUdSZXBJUlFFbiBpcyBub3QgYWx3YXlzIHJlbGlhYmxlLAotCS8vIG1heSBiZSB3aGVuIEpQRUcgY29kZWMgY3Jhc2hlcyBpdCB3b24ndCBnZW5lcmF0ZSBJUlE/IFNvLAotCSAvKkNQKi8JCQkvLyAgICAgICAgYnR3cml0ZShJUlFfTUFTSywgWlIzNjA1N19JQ1IpOyAvLyBFbmFibGUgVnN5bmMgaW50ZXJydXB0cyB0b28uIFNNICAgIFdIWSA/IExQCi0JICAgIHpyMzYwNTdfaW5pdF92ZmUoenIpOwotCi0JenIzNjA1N19lbmFibGVfanBnKHpyLCBCVVpfTU9ERV9JRExFKTsKLQotCWJ0d3JpdGUoSVJRX01BU0ssIFpSMzYwNTdfSVNSKTsJLy8gQ2xlYXJzIGludGVycnVwdHMKLX0KLQotdm9pZAotenIzNjA1N19yZXN0YXJ0IChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCWJ0d3JpdGUoMCwgWlIzNjA1N19TUEdQUENSKTsKLQltZGVsYXkoMSk7Ci0JYnRvcihaUjM2MDU3X1NQR1BQQ1JfU29mdFJlc2V0LCBaUjM2MDU3X1NQR1BQQ1IpOwotCW1kZWxheSgxKTsKLQotCS8qIGFzc2VydCBQX1Jlc2V0ICovCi0JYnR3cml0ZSgwLCBaUjM2MDU3X0pQQyk7Ci0JLyogc2V0IHVwIEdQSU8gZGlyZWN0aW9uIC0gYWxsIG91dHB1dCAqLwotCWJ0d3JpdGUoWlIzNjA1N19TUEdQUENSX1NvZnRSZXNldCB8IDAsIFpSMzYwNTdfU1BHUFBDUik7Ci0KLQkvKiBzZXQgdXAgR1BJTyBwaW5zIGFuZCBndWVzdCBidXMgdGltaW5nICovCi0JYnR3cml0ZSgoMHg4MSA8PCAyNCkgfCAweDg4ODgsIFpSMzYwNTdfR1BQR0NSMSk7Ci19Ci0KLS8qCi0gKiBpbml0aWFsaXplIHZpZGVvIGZyb250IGVuZAotICovCi0KLXN0YXRpYyB2b2lkCi16cjM2MDU3X2luaXRfdmZlIChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSBidHJlYWQoWlIzNjA1N19WRkVTUEZSKTsKLQlyZWcgfD0gWlIzNjA1N19WRkVTUEZSX0xpdHRsZUVuZGlhbjsKLQlyZWcgJj0gflpSMzYwNTdfVkZFU1BGUl9WQ0xLUG9sOwotCXJlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfRXh0Rmw7Ci0JcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9Ub3BGaWVsZDsKLQlidHdyaXRlKHJlZywgWlIzNjA1N19WRkVTUEZSKTsKLQlyZWcgPSBidHJlYWQoWlIzNjA1N19WRENSKTsKLQlpZiAocGNpX3BjaV9wcm9ibGVtcyAmIFBDSVBDSV9UUklUT04pCi0JCS8vIHx8IHpyLT5yZXZpc2lvbiA8IDEpIC8vIFJldmlzaW9uIDEgaGFzIGFsc28gVHJpdG9uIHN1cHBvcnQKLQkJcmVnICY9IH5aUjM2MDU3X1ZEQ1JfVHJpdG9uOwotCWVsc2UKLQkJcmVnIHw9IFpSMzYwNTdfVkRDUl9Ucml0b247Ci0JYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRDUik7Ci19Ci0KLS8qCi0gKiBJbnRlcmZhY2UgdG8gZGVjb2RlciBhbmQgZW5jb2RlciBjaGlwcyB1c2luZyBpMmMgYnVzCi0gKi8KLQotaW50Ci1kZWNvZGVyX2NvbW1hbmQgKHN0cnVjdCB6b3JhbiAqenIsCi0JCSBpbnQgICAgICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAqZGF0YSkKLXsKLQlpZiAoenItPmRlY29kZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoenItPmNhcmQudHlwZSA9PSBMTUwzMyAmJgotCSAgICAoY21kID09IERFQ09ERVJfU0VUX05PUk0gfHwgY21kID09IERFQ09ERVJfU0VUX0lOUFVUKSkgewotCQlpbnQgcmVzOwotCi0JCS8vIEJ0ODE5IG5lZWRzIHRvIHJlc2V0IGl0cyBGSUZPIGJ1ZmZlciB1c2luZyAjRlJTVCBwaW4gYW5kCi0JCS8vIExNTDMzIGNhcmQgdXNlcyBHUElPKDcpIGZvciB0aGF0LgotCQlHUElPKHpyLCA3LCAwKTsKLQkJcmVzID0genItPmRlY29kZXItPmRyaXZlci0+Y29tbWFuZCh6ci0+ZGVjb2RlciwgY21kLCBkYXRhKTsKLQkJLy8gUHVsbCAjRlJTVCBoaWdoLgotCQlHUElPKHpyLCA3LCAxKTsKLQkJcmV0dXJuIHJlczsKLQl9IGVsc2UKLQkJcmV0dXJuIHpyLT5kZWNvZGVyLT5kcml2ZXItPmNvbW1hbmQoenItPmRlY29kZXIsIGNtZCwKLQkJCQkJCSAgICBkYXRhKTsKLX0KLQotaW50Ci1lbmNvZGVyX2NvbW1hbmQgKHN0cnVjdCB6b3JhbiAqenIsCi0JCSBpbnQgICAgICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAqZGF0YSkKLXsKLQlpZiAoenItPmVuY29kZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIHpyLT5lbmNvZGVyLT5kcml2ZXItPmNvbW1hbmQoenItPmVuY29kZXIsIGNtZCwgZGF0YSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RldmljZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kZXZpY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdmYTg2YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RldmljZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIFpvcmFuIHpyMzYwNTcvenIzNjA2NyBQQ0kgY29udHJvbGxlciBkcml2ZXIsIGZvciB0aGUKLSAqIFBpbm5hY2xlL01pcm8gREMxMC9EQzEwKy9EQzMwL0RDMzArLCBJb21lZ2EgQnV6LCBMaW51eAotICogTWVkaWEgTGFicyBMTUwzMy9MTUwzM1IxMC4KLSAqCi0gKiBUaGlzIHBhcnQgaGFuZGxlcyBjYXJkLXNwZWNpZmljIGRhdGEgYW5kIGRldGVjdGlvbgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBTZXJndWVpIE1pcmlkb25vdiA8bWlyc2V2QGNpY2VzZS5teD4KLSAqCi0gKiBDdXJyZW50bHkgbWFpbnRhaW5lZCBieToKLSAqICAgUm9uYWxkIEJ1bHRqZSAgICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogICBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QHNreW5ldC5iZT4KLSAqICAgTWFpbGluZ2xpc3QgICAgICA8bWpwZWctdXNlcnNAbGlzdHMuc2YubmV0PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19aT1JBTl9ERVZJQ0VfSF9fCi0jZGVmaW5lIF9fWk9SQU5fREVWSUNFX0hfXwotCi0vKiBnZW5lcmFsIHB1cnBvc2UgSS9PICovCi1leHRlcm4gdm9pZCBHUElPKHN0cnVjdCB6b3JhbiAqenIsCi0JCSBpbnQgYml0LAotCQkgdW5zaWduZWQgaW50IHZhbHVlKTsKLQotLyogY29kZWMgKG9yIGFjdHVhbGx5OiBndWVzdCBidXMpIGFjY2VzcyAqLwotZXh0ZXJuIGludCBwb3N0X29mZmljZV93YWl0KHN0cnVjdCB6b3JhbiAqenIpOwotZXh0ZXJuIGludCBwb3N0X29mZmljZV93cml0ZShzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJICAgICB1bnNpZ25lZCBndWVzdCwKLQkJCSAgICAgdW5zaWduZWQgcmVnLAotCQkJICAgICB1bnNpZ25lZCB2YWx1ZSk7Ci1leHRlcm4gaW50IHBvc3Rfb2ZmaWNlX3JlYWQoc3RydWN0IHpvcmFuICp6ciwKLQkJCSAgICB1bnNpZ25lZCBndWVzdCwKLQkJCSAgICB1bnNpZ25lZCByZWcpOwotCi1leHRlcm4gdm9pZCBkZXRlY3RfZ3Vlc3RfYWN0aXZpdHkoc3RydWN0IHpvcmFuICp6cik7Ci0KLWV4dGVybiB2b2lkIGpwZWdfY29kZWNfc2xlZXAoc3RydWN0IHpvcmFuICp6ciwKLQkJCSAgICAgaW50IHNsZWVwKTsKLWV4dGVybiBpbnQganBlZ19jb2RlY19yZXNldChzdHJ1Y3Qgem9yYW4gKnpyKTsKLQotLyogenIzNjB4NyBhY2Nlc3MgdG8gcmF3IGNhcHR1cmUgKi8KLWV4dGVybiB2b2lkIHpyMzYwNTdfb3ZlcmxheShzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJICAgIGludCBvbik7Ci1leHRlcm4gdm9pZCB3cml0ZV9vdmVybGF5X21hc2soc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICAgc3RydWN0IHZpZGVvX2NsaXAgKnZwLAotCQkJICAgICAgIGludCBjb3VudCk7Ci1leHRlcm4gdm9pZCB6cjM2MDU3X3NldF9tZW1ncmFiKHN0cnVjdCB6b3JhbiAqenIsCi0JCQkJaW50IG1vZGUpOwotZXh0ZXJuIGludCB3YWl0X2dyYWJfcGVuZGluZyhzdHJ1Y3Qgem9yYW4gKnpyKTsKLQotLyogaW50ZXJydXB0cyAqLwotZXh0ZXJuIHZvaWQgcHJpbnRfaW50ZXJydXB0cyhzdHJ1Y3Qgem9yYW4gKnpyKTsKLWV4dGVybiB2b2lkIGNsZWFyX2ludGVycnVwdF9jb3VudGVycyhzdHJ1Y3Qgem9yYW4gKnpyKTsKLWV4dGVybiBpcnFyZXR1cm5fdCB6b3Jhbl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLQotLyogSlBFRyBjb2RlYyBhY2Nlc3MgKi8KLWV4dGVybiB2b2lkIGpwZWdfc3RhcnQoc3RydWN0IHpvcmFuICp6cik7Ci1leHRlcm4gdm9pZCB6cjM2MDU3X2VuYWJsZV9qcGcoc3RydWN0IHpvcmFuICp6ciwKLQkJCSAgICAgICBlbnVtIHpvcmFuX2NvZGVjX21vZGUgbW9kZSk7Ci1leHRlcm4gdm9pZCB6b3Jhbl9mZWVkX3N0YXRfY29tKHN0cnVjdCB6b3JhbiAqenIpOwotCi0vKiBnZW5lcmFsICovCi1leHRlcm4gdm9pZCB6b3Jhbl9zZXRfcGNpX21hc3RlcihzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJCSBpbnQgc2V0X21hc3Rlcik7Ci1leHRlcm4gdm9pZCB6b3Jhbl9pbml0X2hhcmR3YXJlKHN0cnVjdCB6b3JhbiAqenIpOwotZXh0ZXJuIHZvaWQgenIzNjA1N19yZXN0YXJ0KHN0cnVjdCB6b3JhbiAqenIpOwotCi0vKiBpMmMgKi8KLWV4dGVybiBpbnQgZGVjb2Rlcl9jb21tYW5kKHN0cnVjdCB6b3JhbiAqenIsCi0JCQkgICBpbnQgY21kLAotCQkJICAgdm9pZCAqZGF0YSk7Ci1leHRlcm4gaW50IGVuY29kZXJfY29tbWFuZChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJICAgaW50IGNtZCwKLQkJCSAgIHZvaWQgKmRhdGEpOwotCi0jZW5kaWYJCQkJLyogX19aT1JBTl9ERVZJQ0VfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kcml2ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRhYjllZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNDY0OCArMCwwIEBACi0vKgotICogWm9yYW4genIzNjA1Ny96cjM2MDY3IFBDSSBjb250cm9sbGVyIGRyaXZlciwgZm9yIHRoZQotICogUGlubmFjbGUvTWlybyBEQzEwL0RDMTArL0RDMzAvREMzMCssIElvbWVnYSBCdXosIExpbnV4Ci0gKiBNZWRpYSBMYWJzIExNTDMzL0xNTDMzUjEwLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBTZXJndWVpIE1pcmlkb25vdiA8bWlyc2V2QGNpY2VzZS5teD4KLSAqCi0gKiBDaGFuZ2VzIGZvciBCVVogYnkgV29sZmdhbmcgU2NoZXJyIDxzY2hlcnJAbmV0NHlvdS5uZXQ+Ci0gKgotICogQ2hhbmdlcyBmb3IgREMxMC9EQzMwIGJ5IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAc2t5bmV0LmJlPgotICoKLSAqIENoYW5nZXMgZm9yIExNTDMzUjEwIGJ5IE1heGltIFlldnR5dXNoa2luIDxtYXhAbGludXhtZWRpYWxhYnMuY29tPgotICoKLSAqIENoYW5nZXMgZm9yIHZpZGVvZGV2Mi92NGwyIGJ5IFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqCi0gKiBCYXNlZCBvbgotICoKLSAqIE1pcm8gREMxMCBkcml2ZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSBXb2xmZ2FuZyBTY2hlcnIgPHNjaGVyckBuZXQ0eW91Lm5ldD4KLSAqCi0gKiBJb21lZ2EgQnV6IGRyaXZlciB2ZXJzaW9uIDEuMAotICogQ29weXJpZ2h0IChDKSAxOTk5IFJhaW5lciBKb2hhbm5pIDxSYWluZXJASm9oYW5uaS5kZT4KLSAqCi0gKiBidXouMC4wLjMKLSAqIENvcHlyaWdodCAoQykgMTk5OCBEYXZlIFBlcmtzIDxkcGVya3NAaWJtLm5ldD4KLSAqCi0gKiBidHR2IC0gQnQ4NDggZnJhbWUgZ3JhYmJlciBkcml2ZXIKLSAqIENvcHlyaWdodCAoQykgMTk5Niw5Nyw5OCBSYWxwaCAgTWV0emxlciAocmprbUB0aHAudW5pLWtvZWxuLmRlKQotICogICAgICAgICAgICAgICAgICAgICAgICAmIE1hcmN1cyBNZXR6bGVyIChtb2NtQHRocC51bmkta29lbG4uZGUpCi0gKgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jZGVmaW5lICAgICBNQVBfTlIoeCkgICAgICAgdmlydF90b19wYWdlKHgpCi0jZGVmaW5lICAgICBaT1JBTl9WSURfVFlQRSAgKCBcCi0JCQkJVklEX1RZUEVfQ0FQVFVSRSB8IFwKLQkJCQlWSURfVFlQRV9PVkVSTEFZIHwgXAotCQkJCVZJRF9UWVBFX0NMSVBQSU5HIHwgXAotCQkJCVZJRF9UWVBFX0ZSQU1FUkFNIHwgXAotCQkJCVZJRF9UWVBFX1NDQUxFUyB8IFwKLQkJCQlWSURfVFlQRV9NSlBFR19ERUNPREVSIHwgXAotCQkJCVZJRF9UWVBFX01KUEVHX0VOQ09ERVIgXAotCQkJICAgICApCi0KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgInZpZGVvY29kZWMuaCIKLQotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlICJ6b3Jhbi5oIgotI2luY2x1ZGUgInpvcmFuX2RldmljZS5oIgotI2luY2x1ZGUgInpvcmFuX2NhcmQuaCIKLQotCS8qIHdlIGRlY2xhcmUgc29tZSBjYXJkIHR5cGUgZGVmaW5pdGlvbnMgaGVyZSwgdGhleSBtZWFuCi0JICogdGhlIHNhbWUgYXMgdGhlIHY0bDEgWk9SQU5fVklEX1RZUEUgYWJvdmUsIGV4Y2VwdCBpdCdzIHY0bDIgKi8KLSNkZWZpbmUgWk9SQU5fVjRMMl9WSURfRkxBR1MgKCBcCi0JCQkJVjRMMl9DQVBfU1RSRUFNSU5HIHxcCi0JCQkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8XAotCQkJCVY0TDJfQ0FQX1ZJREVPX09VVFBVVCB8XAotCQkJCVY0TDJfQ0FQX1ZJREVPX09WRVJMQVkgXAotCQkJICAgICAgKQotCi0KLSNpZiBkZWZpbmVkKENPTkZJR19WSURFT19WNEwxX0NPTVBBVCkKLSNkZWZpbmUgWkZNVChwYWwsIGZjYywgY3MpIFwKLQkucGFsZXR0ZSA9IChwYWwpLCAuZm91cmNjID0gKGZjYyksIC5jb2xvcnNwYWNlID0gKGNzKQotI2Vsc2UKLSNkZWZpbmUgWkZNVChwYWwsIGZjYywgY3MpIFwKLQkuZm91cmNjID0gKGZjYyksIC5jb2xvcnNwYWNlID0gKGNzKQotI2VuZGlmCi0KLWNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgem9yYW5fZm9ybWF0c1tdID0gewotCXsKLQkJLm5hbWUgPSAiMTUtYml0IFJHQiBMRSIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9SR0I1NTUsCi0JCSAgICAgVjRMMl9QSVhfRk1UX1JHQjU1NSwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAotCQkuZGVwdGggPSAxNSwKLQkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAotCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAotCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I1NTV8WlIzNjA1N19WRkVTUEZSX0VyckRpZnwKLQkJCSAgIFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCi0JfSwgewotCQkubmFtZSA9ICIxNS1iaXQgUkdCIEJFIiwKLQkJWkZNVCgtMSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTU1WCwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAotCQkuZGVwdGggPSAxNSwKLQkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAotCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAotCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I1NTV8WlIzNjA1N19WRkVTUEZSX0VyckRpZiwKLQl9LCB7Ci0JCS5uYW1lID0gIjE2LWJpdCBSR0IgTEUiLAotCQlaRk1UKFZJREVPX1BBTEVUVEVfUkdCNTY1LAotCQkgICAgIFY0TDJfUElYX0ZNVF9SR0I1NjUsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKLQkJLmRlcHRoID0gMTYsCi0JCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKLQkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKLQkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCNTY1fFpSMzYwNTdfVkZFU1BGUl9FcnJEaWZ8Ci0JCQkgICBaUjM2MDU3X1ZGRVNQRlJfTGl0dGxlRW5kaWFuLAotCX0sIHsKLQkJLm5hbWUgPSAiMTYtYml0IFJHQiBCRSIsCi0JCVpGTVQoLTEsCi0JCSAgICAgVjRMMl9QSVhfRk1UX1JHQjU2NVgsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKLQkJLmRlcHRoID0gMTYsCi0JCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKLQkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKLQkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCNTY1fFpSMzYwNTdfVkZFU1BGUl9FcnJEaWYsCi0JfSwgewotCQkubmFtZSA9ICIyNC1iaXQgUkdCIiwKLQkJWkZNVChWSURFT19QQUxFVFRFX1JHQjI0LAotCQkgICAgIFY0TDJfUElYX0ZNVF9CR1IyNCwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAotCQkuZGVwdGggPSAyNCwKLQkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAotCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAotCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I4ODh8WlIzNjA1N19WRkVTUEZSX1BhY2syNCwKLQl9LCB7Ci0JCS5uYW1lID0gIjMyLWJpdCBSR0IgTEUiLAotCQlaRk1UKFZJREVPX1BBTEVUVEVfUkdCMzIsCi0JCSAgICAgVjRMMl9QSVhfRk1UX0JHUjMyLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCi0JCS5kZXB0aCA9IDMyLAotCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8Ci0JCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCi0JCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjg4OHxaUjM2MDU3X1ZGRVNQRlJfTGl0dGxlRW5kaWFuLAotCX0sIHsKLQkJLm5hbWUgPSAiMzItYml0IFJHQiBCRSIsCi0JCVpGTVQoLTEsCi0JCSAgICAgVjRMMl9QSVhfRk1UX1JHQjMyLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCi0JCS5kZXB0aCA9IDMyLAotCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8Ci0JCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCi0JCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjg4OCwKLQl9LCB7Ci0JCS5uYW1lID0gIjQ6MjoyLCBwYWNrZWQsIFlVWVYiLAotCQlaRk1UKFZJREVPX1BBTEVUVEVfWVVWNDIyLAotCQkgICAgIFY0TDJfUElYX0ZNVF9ZVVlWLCBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNKSwKLQkJLmRlcHRoID0gMTYsCi0JCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKLQkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKLQkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfWVVWNDIyLAotCX0sIHsKLQkJLm5hbWUgPSAiNDoyOjIsIHBhY2tlZCwgVVlWWSIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9VWVZZLAotCQkgICAgIFY0TDJfUElYX0ZNVF9VWVZZLCBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNKSwKLQkJLmRlcHRoID0gMTYsCi0JCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKLQkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKLQkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfWVVWNDIyfFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCi0JfSwgewotCQkubmFtZSA9ICJIYXJkd2FyZS1lbmNvZGVkIE1vdGlvbi1KUEVHIiwKLQkJWkZNVCgtMSwKLQkJICAgICBWNEwyX1BJWF9GTVRfTUpQRUcsIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0pLAotCQkuZGVwdGggPSAwLAotCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8Ci0JCQkgWk9SQU5fRk9STUFUX1BMQVlCQUNLIHwKLQkJCSBaT1JBTl9GT1JNQVRfQ09NUFJFU1NFRCwKLQl9Ci19OwotI2RlZmluZSBOVU1fRk9STUFUUyBBUlJBWV9TSVpFKHpvcmFuX2Zvcm1hdHMpCi0KLS8vIFJKOiBUZXN0IG9ubHkgLSB3YW50IHRvIHRlc3QgQlVaX1VTRV9ISU1FTSBldmVuIHdoZW4gQ09ORklHX0JJR1BIWVNfQVJFQSBpcyBkZWZpbmVkCi0KLQotZXh0ZXJuIGludCB2NGxfbmJ1ZnM7Ci1leHRlcm4gaW50IHY0bF9idWZzaXplOwotZXh0ZXJuIGludCBqcGdfbmJ1ZnM7Ci1leHRlcm4gaW50IGpwZ19idWZzaXplOwotZXh0ZXJuIGludCBwYXNzX3Rocm91Z2g7Ci0KLXN0YXRpYyBpbnQgbG9ja19ub3JtOwkvKiAwID0gZGVmYXVsdCAxID0gRG9uJ3QgY2hhbmdlIFRWIHN0YW5kYXJkIChub3JtKSAqLwotbW9kdWxlX3BhcmFtKGxvY2tfbm9ybSwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobG9ja19ub3JtLCAiUHJldmVudCBub3JtIGNoYW5nZXMgKDEgPSBpZ25vcmUsID4xID0gZmFpbCkiKTsKLQotCS8qIHNtYWxsIGhlbHBlciBmdW5jdGlvbiBmb3IgY2FsY3VsYXRpbmcgYnVmZmVyc2l6ZXMgZm9yIHY0bDIKLQkgKiB3ZSBjYWxjdWxhdGUgdGhlIG5lYXJlc3QgaGlnaGVyIHBvd2VyLW9mLXR3bywgd2hpY2gKLQkgKiB3aWxsIGJlIHRoZSByZWNvbW1lbmRlZCBidWZmZXJzaXplICovCi1zdGF0aWMgX191MzIKLXpvcmFuX3Y0bDJfY2FsY19idWZzaXplIChzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzICpzZXR0aW5ncykKLXsKLQlfX3U4IGRpdiA9IHNldHRpbmdzLT5WZXJEY20gKiBzZXR0aW5ncy0+SG9yRGNtICogc2V0dGluZ3MtPlRtcERjbTsKLQlfX3UzMiBudW0gPSAoMTAyNCAqIDUxMikgLyAoZGl2KTsKLQlfX3UzMiByZXN1bHQgPSAyOwotCi0JbnVtLS07Ci0Jd2hpbGUgKG51bSkgewotCQludW0gPj49IDE7Ci0JCXJlc3VsdCA8PD0gMTsKLQl9Ci0KLQlpZiAocmVzdWx0ID4ganBnX2J1ZnNpemUpCi0JCXJldHVybiBqcGdfYnVmc2l6ZTsKLQlpZiAocmVzdWx0IDwgODE5MikKLQkJcmV0dXJuIDgxOTI7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogZm9yd2FyZCByZWZlcmVuY2VzICovCi1zdGF0aWMgdm9pZCB2NGxfZmJ1ZmZlcl9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyB2b2lkIGpwZ19mYnVmZmVyX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpOwotCi0vKgotICogICBBbGxvY2F0ZSB0aGUgVjRMIGdyYWIgYnVmZmVycwotICoKLSAqICAgVGhlc2UgaGF2ZSB0byBiZSBweXNpY2FsbHkgY29udGlndW91cy4KLSAqICAgSWYgdjRsX2J1ZnNpemUgPD0gTUFYX0tNQUxMT0NfTUVNIHdlIHVzZSBrbWFsbG9jCi0gKiAgIGVsc2Ugd2UgdHJ5IHRvIGFsbG9jYXRlIHRoZW0gd2l0aCBiaWdwaHlzYXJlYV9hbGxvY19wYWdlcwotICogICBpZiB0aGUgYmlncGh5c2FyZWEgcGF0Y2ggaXMgcHJlc2VudCBpbiB0aGUga2VybmVsLAotICogICBlbHNlIHdlIHRyeSB0byB1c2UgaGlnaCBtZW1vcnkgKGlmIHRoZSB1c2VyIGhhcyBib290ZXQKLSAqICAgTGludXggd2l0aCB0aGUgbmVjZXNzYXJ5IG1lbW9yeSBsZWZ0IG92ZXIpLgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1nZXRfaGlnaF9tZW0gKHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLS8qCi0gKiBDaGVjayBpZiB0aGVyZSBpcyB1c2FibGUgbWVtb3J5IGF0IHRoZSBlbmQgb2YgTGludXggbWVtb3J5Ci0gKiBvZiBhdCBsZWFzdCBzaXplLiBSZXR1cm4gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhpcyBtZW1vcnksCi0gKiByZXR1cm4gMCBvbiBmYWlsdXJlLgotICoKLSAqIFRoZSBpZGVhIGlzIGZyb20gQWxleGFuZHJvIFJ1YmluaSdzIGJvb2sgIkxpbnV4IGRldmljZSBkcml2ZXJzIi4KLSAqIFRoZSBkcml2ZXIgZnJvbSBoaW0gd2hpY2ggaXMgZG93bmxvYWRhYmxlIGZyb20gTydSZWlsbHkncwotICogd2ViIHNpdGUgbWlzc2VzIHRoZSAidmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSIgcGFydAotICogKGFuZCB0aGVyZWZvcmUgZG9lc24ndCB3b3JrIGF0IGFsbCAtIGF0IGxlYXN0IHdpdGggMi4yLngga2VybmVscykuCi0gKgotICogSXQgc2hvdWxkIGJlIHVubmVjZXNzYXJ5IHRvIG1lbnRpb24gdGhhdCBUSElTIElTIERBTkdFUk9VUywKLSAqIGlmIG1vcmUgdGhhbiBvbmUgZHJpdmVyIGF0IGEgdGltZSBoYXMgdGhlIGlkZWEgdG8gdXNlIHRoaXMgbWVtb3J5ISEhIQotICovCi0KLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKm1lbTsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0JdW5zaWduZWQgbG9uZyBoaV9tZW1fcGg7Ci0JdW5zaWduZWQgbG9uZyBpOwotCi0JLyogTWFwIHRoZSBoaWdoIG1lbW9yeSB0byB1c2VyIHNwYWNlICovCi0KLQloaV9tZW1fcGggPSB2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpOwotCi0JbWVtID0gaW9yZW1hcChoaV9tZW1fcGgsIHNpemUpOwotCWlmICghbWVtKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSICIlczogZ2V0X2hpZ2hfbWVtKCkgLSBpb3JlbWFwIGZhaWxlZFxuIiwKLQkJCVpPUkFOX05BTUUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCS8qIENoZWNrIGlmIGl0IGlzIG1lbW9yeSAqLwotCQljID0gaSAmIDB4ZmY7Ci0JCXdyaXRlYihjLCBtZW0gKyBpKTsKLQkJaWYgKHJlYWRiKG1lbSArIGkpICE9IGMpCi0JCQlicmVhazsKLQkJYyA9IDI1NSAtIGM7Ci0JCXdyaXRlYihjLCBtZW0gKyBpKTsKLQkJaWYgKHJlYWRiKG1lbSArIGkpICE9IGMpCi0JCQlicmVhazsKLQkJd3JpdGViKDAsIG1lbSArIGkpOwkvKiB6ZXJvIG91dCBtZW1vcnkgKi8KLQotCQkvKiBnaXZlIHRoZSBrZXJuZWwgYWlyIHRvIGJyZWF0aCAqLwotCQlpZiAoKGkgJiAweDNmZmZmKSA9PSAweDNmZmZmKQotCQkJc2NoZWR1bGUoKTsKLQl9Ci0KLQlpb3VubWFwKG1lbSk7Ci0KLQlpZiAoaSAhPSBzaXplKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IGdldF9oaWdoX21lbSgpIC0gcmVxdWVzdGVkICVsdSwgYXZhaWwgJWx1XG4iLAotCQkJWk9SQU5fTkFNRSwgc2l6ZSwgaSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiBoaV9tZW1fcGg7Ci19Ci0KLXN0YXRpYyBpbnQKLXY0bF9mYnVmZmVyX2FsbG9jIChzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0JaW50IGksIG9mZjsKLQl1bnNpZ25lZCBjaGFyICptZW07Ci0JdW5zaWduZWQgbG9uZyBwbWVtID0gMDsKLQotCS8qIHdlIG1pZ2h0IGhhdmUgb2xkIGJ1ZmZlcnMgbHlpbmcgYXJvdW5kLi4uICovCi0JaWYgKGZoLT52NGxfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkgewotCQl2NGxfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgewotCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyKQotCQkJZHByaW50aygyLAotCQkJCUtFUk5fV0FSTklORwotCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIGJ1ZmZlciAlZCBhbGxyZWFkeSBhbGxvY2F0ZWQhP1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0KLQkJLy91ZGVsYXkoMjApOwotCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplIDw9IE1BWF9LTUFMTE9DX01FTSkgewotCQkJLyogVXNlIGttYWxsb2MgKi8KLQotCQkJbWVtID0ga21hbGxvYyhmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwotCQkJaWYgKCFtZW0pIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIGttYWxsb2MgZm9yIFY0TCBidWYgJWQgZmFpbGVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQkJCQlyZXR1cm4gLUVOT0JVRlM7Ci0JCQl9Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIgPSBtZW07Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfcGh5cyA9Ci0JCQkgICAgdmlydF90b19waHlzKG1lbSk7Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfYnVzID0KLQkJCSAgICB2aXJ0X3RvX2J1cyhtZW0pOwotCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCi0JCQkJU2V0UGFnZVJlc2VydmVkKE1BUF9OUihtZW0gKyBvZmYpKTsKLQkJCWRwcmludGsoNCwKLQkJCQlLRVJOX0lORk8KLQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBWNEwgZnJhbWUgJWQgbWVtIDB4JWx4IChidXM6IDB4JWx4KVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgaSwgKHVuc2lnbmVkIGxvbmcpIG1lbSwKLQkJCQl2aXJ0X3RvX2J1cyhtZW0pKTsKLQkJfSBlbHNlIHsKLQotCQkJLyogVXNlIGhpZ2ggbWVtb3J5IHdoaWNoIGhhcyBiZWVuIGxlZnQgYXQgYm9vdCB0aW1lICovCi0KLQkJCS8qIE9rLiwgT2suIHRoaXMgaXMgYW4gZXZpbCBoYWNrIC0gd2UgbWFrZQotCQkJICogdGhlIGFzc3VtcHRpb24gdGhhdCBwaHlzaWNhbCBhZGRyZXNzZXMgYXJlCi0JCQkgKiB0aGUgc2FtZSBhcyBidXMgYWRkcmVzc2VzICh0cnVlIGF0IGxlYXN0Ci0JCQkgKiBmb3IgSW50ZWwgcHJvY2Vzc29ycykuIFRoZSB3aG9sZSBtZXRob2Qgb2YKLQkJCSAqIG9idGFpbmluZyBhbmQgdXNpbmcgdGhpcyBtZW1vcnkgaXMgbm90IHZlcnkKLQkJCSAqIG5pY2UgLSBidXQgSSBob3BlIGl0IHNhdmVzIHNvbWUgcG9vciB1c2VycwotCQkJICogZnJvbSBrZXJuZWwgaGFja2luZywgd2hpY2ggbWlnaHQgaGF2ZSBldmVuCi0JCQkgKiBtb3JlIGV2aWwgcmVzdWx0cyAqLwotCi0JCQlpZiAoaSA9PSAwKSB7Ci0JCQkJaW50IHNpemUgPQotCQkJCSAgICBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgKgotCQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0KLQkJCQlwbWVtID0gZ2V0X2hpZ2hfbWVtKHNpemUpOwotCQkJCWlmIChwbWVtID09IDApIHsKLQkJCQkJZHByaW50aygxLAotCQkJCQkJS0VSTl9FUlIKLQkJCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIGdldF9oaWdoX21lbSAoc2l6ZSA9ICVkIEtCKSBmb3IgVjRMIGJ1ZnMgZmFpbGVkXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6ciksIHNpemUgPj4gMTApOwotCQkJCQlyZXR1cm4gLUVOT0JVRlM7Ci0JCQkJfQotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbMF0uZmJ1ZmZlciA9IE5VTEw7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlclswXS5mYnVmZmVyX3BoeXMgPSBwbWVtOwotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbMF0uZmJ1ZmZlcl9idXMgPSBwbWVtOwotCQkJCWRwcmludGsoNCwKLQkJCQkJS0VSTl9JTkZPCi0JCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIHVzaW5nICVkIEtCIGhpZ2ggbWVtb3J5XG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgc2l6ZSA+PiAxMCk7Ci0JCQl9IGVsc2UgewotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlciA9IE5VTEw7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX3BoeXMgPQotCQkJCSAgICBwbWVtICsgaSAqIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfYnVzID0KLQkJCQkgICAgcG1lbSArIGkgKiBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMTsKLQotCXJldHVybiAwOwotfQotCi0vKiBmcmVlIHRoZSBWNEwgZ3JhYiBidWZmZXJzICovCi1zdGF0aWMgdm9pZAotdjRsX2ZidWZmZXJfZnJlZSAoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCWludCBpLCBvZmY7Ci0JdW5zaWduZWQgY2hhciAqbWVtOwotCi0JZHByaW50ayg0LCBLRVJOX0lORk8gIiVzOiB2NGxfZmJ1ZmZlcl9mcmVlKClcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgewotCQlpZiAoIWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcikKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgPD0gTUFYX0tNQUxMT0NfTUVNKSB7Ci0JCQltZW0gPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXI7Ci0JCQlmb3IgKG9mZiA9IDA7IG9mZiA8IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJCSAgICAgb2ZmICs9IFBBR0VfU0laRSkKLQkJCQlDbGVhclBhZ2VSZXNlcnZlZChNQVBfTlIobWVtICsgb2ZmKSk7Ci0JCQlrZnJlZSgodm9pZCAqKSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIpOwotCQl9Ci0JCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlciA9IE5VTEw7Ci0JfQotCi0JZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKLX0KLQotLyoKLSAqICAgQWxsb2NhdGUgdGhlIE1KUEVHIGdyYWIgYnVmZmVycy4KLSAqCi0gKiAgIElmIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUgaXMgc21hbGxlciB0aGFuIE1BWF9LTUFMTE9DX01FTSwKLSAqICAga21hbGxvYyBpcyB1c2VkIHRvIHJlcXVlc3QgYSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgYXJlYSwKLSAqICAgZWxzZSB3ZSBhbGxvY2F0ZSB0aGUgbWVtb3J5IGluIGZyYW1nZW50cyB3aXRoIGdldF96ZXJvZWRfcGFnZS4KLSAqCi0gKiAgIElmIGEgTmF0b21hIGNoaXBzZXQgaXMgcHJlc2VudCBhbmQgdGhpcyBpcyBhIHJldmlzaW9uIDEgenIzNjA1NywKLSAqICAgZWFjaCBNSlBFRyBidWZmZXIgbmVlZHMgdG8gYmUgcGh5c2ljYWxseSBjb250aWd1b3VzLgotICogICAoUko6IFRoaXMgc3RhdGVtZW50IGlzIGZyb20gRGF2ZSBQZXJrcycgb3JpZ2luYWwgZHJpdmVyLAotICogICBJIGNvdWxkIG5ldmVyIGNoZWNrIGl0IGJlY2F1c2UgSSBoYXZlIGEgenIzNjA2NykKLSAqICAgVGhlIGRyaXZlciBjYXJlcyBhYm91dCB0aGlzIGJlY2F1c2UgaXQgcmVkdWNlcyB0aGUgYnVmZmVyCi0gKiAgIHNpemUgdG8gTUFYX0tNQUxMT0NfTUVNIGluIHRoYXQgY2FzZSAod2hpY2ggZm9yY2VzIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbikuCi0gKgotICogICBSSjogVGhlIGNvbnRlbnRzIGdyYWIgYnVmZmVycyBuZWVkcyBuZXZlciBiZSBhY2Nlc3NlZCBpbiB0aGUgZHJpdmVyLgotICogICAgICAgVGhlcmVmb3JlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYWxsb2NhdGUgdGhlbSB3aXRoIHZtYWxsb2MgaW4gb3JkZXIKLSAqICAgICAgIHRvIGdldCBhIGNvbnRpZ3VvdXMgdmlydHVhbCBtZW1vcnkgc3BhY2UuCi0gKiAgICAgICBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IG1hbnkgb3RoZXIgZHJpdmVycyBmaXJzdCBhbGxvY2F0ZSB0aGVtIHdpdGgKLSAqICAgICAgIHZtYWxsb2MgKHdoaWNoIHVzZXMgaW50ZXJuYWxseSBhbHNvIGdldF96ZXJvZWRfcGFnZSwgYnV0IGRlbGl2ZXJzIHlvdQotICogICAgICAgdmlydHVhbCBhZGRyZXNzZXMpIGFuZCB0aGVuIGFnYWluIGhhdmUgdG8gbWFrZSBhIGxvdCBvZiBlZmZvcnRzCi0gKiAgICAgICB0byBnZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MuCi0gKgotICogICBCZW4gQ2FwcGVyOgotICogICAgICAgT24gYmlnLWVuZGlhbiBhcmNoaXRlY3R1cmVzIChzdWNoIGFzIHBwYykgc29tZSBleHRyYSBzdGVwcwotICogICAgICAgYXJlIG5lZWRlZC4gV2hlbiByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBzdGF0X2NvbSBhcnJheQotICogICAgICAgYW5kIGZyYWdtZW50IGJ1ZmZlcnMsIHRoZSBkZXZpY2UgZXhwZWN0cyB0byBzZWUgbGl0dGxlLQotICogICAgICAgZW5kaWFuIHZhbHVlcy4gVGhlIHVzZSBvZiBjcHVfdG9fbGUzMigpIGFuZCBsZTMyX3RvX2NwdSgpCi0gKiAgICAgICBpbiB0aGlzIGZ1bmN0aW9uIChhbmQgb25lIG9yIHR3byBvdGhlcnMgaW4gem9yYW5fZGV2aWNlLmMpCi0gKiAgICAgICBlbnN1cmUgdGhhdCB0aGVzZSB2YWx1ZXMgYXJlIGFsd2F5cyBzdG9yZWQgaW4gbGl0dGxlLWVuZGlhbgotICogICAgICAgZm9ybSwgcmVnYXJkbGVzcyBvZiBhcmNoaXRlY3R1cmUuIFRoZSB6cjM2MDU3IGRvZXMgVmVyeSBCYWQKLSAqICAgICAgIFRoaW5ncyBvbiBiaWcgZW5kaWFuIGFyY2hpdGVjdHVyZXMgaWYgdGhlIHN0YXRfY29tIGFycmF5Ci0gKiAgICAgICBhbmQgZnJhZ21lbnQgYnVmZmVycyBhcmUgbm90IGxpdHRsZS1lbmRpYW4uCi0gKi8KLQotc3RhdGljIGludAotanBnX2ZidWZmZXJfYWxsb2MgKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQlpbnQgaSwgaiwgb2ZmOwotCXVuc2lnbmVkIGxvbmcgbWVtOwotCi0JLyogd2UgbWlnaHQgaGF2ZSBvbGQgYnVmZmVycyBseWluZyBhcm91bmQgKi8KLQlpZiAoZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKSB7Ci0JCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7Ci0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiKQotCQkJZHByaW50aygyLAotCQkJCUtFUk5fV0FSTklORwotCQkJCSIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtIGJ1ZmZlciAlZCBhbGxyZWFkeSBhbGxvY2F0ZWQhP1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0KLQkJLyogQWxsb2NhdGUgZnJhZ21lbnQgdGFibGUgZm9yIHRoaXMgYnVmZmVyICovCi0KLQkJbWVtID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCQlpZiAobWVtID09IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtIGdldF96ZXJvZWRfcGFnZSAoZnJhZ190YWIpIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKLQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JCQlyZXR1cm4gLUVOT0JVRlM7Ci0JCX0KLQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYiA9IChfX2xlMzIgKikgbWVtOwotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiX2J1cyA9Ci0JCSAgICB2aXJ0X3RvX2J1cygodm9pZCAqKSBtZW0pOwotCi0JCS8vaWYgKGFsbG9jX2NvbnRpZykgewotCQlpZiAoZmgtPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cykgewotCQkJbWVtID0KLQkJCSAgICAodW5zaWduZWQgbG9uZykga21hbGxvYyhmaC0+anBnX2J1ZmZlcnMuCi0JCQkJCQkgICAgYnVmZmVyX3NpemUsCi0JCQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAobWVtID09IDApIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtIGttYWxsb2MgZmFpbGVkIGZvciBidWZmZXIgJWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKLQkJCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCQkJCXJldHVybiAtRU5PQlVGUzsKLQkJCX0KLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0gPQotCQkJICAgIGNwdV90b19sZTMyKHZpcnRfdG9fYnVzKCh2b2lkICopIG1lbSkpOwotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsxXSA9Ci0JCQkgICAgY3B1X3RvX2xlMzIoKChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyA0KSA8PCAxKSB8IDEpOwotCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCi0JCQkJU2V0UGFnZVJlc2VydmVkKE1BUF9OUihtZW0gKyBvZmYpKTsKLQkJfSBlbHNlIHsKLQkJCS8qIGpwZ19idWZzaXplIGlzIGFsbHJlYXkgcGFnZSBhbGlnbmVkICovCi0JCQlmb3IgKGogPSAwOwotCQkJICAgICBqIDwgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplIC8gUEFHRV9TSVpFOwotCQkJICAgICBqKyspIHsKLQkJCQltZW0gPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCQkJaWYgKG1lbSA9PSAwKSB7Ci0JCQkJCWRwcmludGsoMSwKLQkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IGpwZ19mYnVmZmVyX2FsbG9jKCkgLSBnZXRfemVyb2VkX3BhZ2UgZmFpbGVkIGZvciBidWZmZXIgJWRcbiIsCi0JCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JCQkJCXJldHVybiAtRU5PQlVGUzsKLQkJCQl9Ci0KLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqXSA9Ci0JCQkJICAgIGNwdV90b19sZTMyKHZpcnRfdG9fYnVzKCh2b2lkICopIG1lbSkpOwotCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMiAqIGogKwotCQkJCQkJCQkgICAxXSA9Ci0JCQkJICAgIGNwdV90b19sZTMyKChQQUdFX1NJWkUgLyA0KSA8PCAxKTsKLQkJCQlTZXRQYWdlUmVzZXJ2ZWQoTUFQX05SKG1lbSkpOwotCQkJfQotCi0JCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqIC0gMV0gfD0gY3B1X3RvX2xlMzIoMSk7Ci0JCX0KLQl9Ci0KLQlkcHJpbnRrKDQsCi0JCUtFUk5fREVCVUcgIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0gJWQgS0IgYWxsb2NhdGVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwKLQkJKGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyAqCi0JCSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUpID4+IDEwKTsKLQotCWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGZyZWUgdGhlIE1KUEVHIGdyYWIgYnVmZmVycyAqLwotc3RhdGljIHZvaWQKLWpwZ19mYnVmZmVyX2ZyZWUgKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQlpbnQgaSwgaiwgb2ZmOwotCXVuc2lnbmVkIGNoYXIgKm1lbTsKLQotCWRwcmludGsoNCwgS0VSTl9ERUJVRyAiJXM6IGpwZ19mYnVmZmVyX2ZyZWUoKVxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JZm9yIChpID0gMDsgaSA8IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7Ci0JCWlmICghZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYikKLQkJCWNvbnRpbnVlOwotCi0JCS8vaWYgKGFsbG9jX2NvbnRpZykgewotCQlpZiAoZmgtPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cykgewotCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0pIHsKLQkJCQltZW0gPSAodW5zaWduZWQgY2hhciAqKSBidXNfdG9fdmlydChsZTMyX3RvX2NwdSgKLQkJCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlswXSkpOwotCQkJCWZvciAob2ZmID0gMDsKLQkJCQkgICAgIG9mZiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCi0JCQkJCUNsZWFyUGFnZVJlc2VydmVkKE1BUF9OUgotCQkJCQkJCSAgKG1lbSArIG9mZikpOwotCQkJCWtmcmVlKG1lbSk7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlswXSA9IDA7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsxXSA9IDA7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlmb3IgKGogPSAwOwotCQkJICAgICBqIDwgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplIC8gUEFHRV9TSVpFOwotCQkJICAgICBqKyspIHsKLQkJCQlpZiAoIWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uCi0JCQkJICAgIGZyYWdfdGFiWzIgKiBqXSkKLQkJCQkJYnJlYWs7Ci0JCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQoTUFQX05SCi0JCQkJCQkgIChidXNfdG9fdmlydAotCQkJCQkJICAgKGxlMzJfdG9fY3B1Ci0JCQkJCQkgICAgKGZoLT5qcGdfYnVmZmVycy4KLQkJCQkJCSAgICAgYnVmZmVyW2ldLmZyYWdfdGFiWzIgKgotCQkJCQkJCQkgICAgICAgal0pKSkpOwotCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykKLQkJCQkJICBidXNfdG9fdmlydAotCQkJCQkJICAobGUzMl90b19jcHUKLQkJCQkJCSAgIChmaC0+anBnX2J1ZmZlcnMuCi0JCQkJCQkgICAgICBidWZmZXJbaV0uCi0JCQkJCQkgICAgICBmcmFnX3RhYlsyICogal0pKSk7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogal0gPQotCQkJCSAgICAwOwotCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMiAqIGogKwotCQkJCQkJCQkgICAxXSA9IDA7Ci0JCQl9Ci0JCX0KLQotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uCi0JCQkgIGZyYWdfdGFiKTsKLQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYiA9IE5VTEw7Ci0JfQotCi0JZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKLX0KLQotLyoKLSAqICAgVjRMIEJ1ZmZlciBncmFiYmluZwotICovCi0KLXN0YXRpYyBpbnQKLXpvcmFuX3Y0bF9zZXRfZm9ybWF0IChzdHJ1Y3QgZmlsZSAgICAgICAgICAgICAgICpmaWxlLAotCQkgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKLQkJICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAotCQkgICAgICBjb25zdCBzdHJ1Y3Qgem9yYW5fZm9ybWF0ICpmb3JtYXQpCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCWludCBicHA7Ci0KLQkvKiBDaGVjayBzaXplIGFuZCBmb3JtYXQgb2YgdGhlIGdyYWIgd2FudGVkICovCi0KLQlpZiAoaGVpZ2h0IDwgQlVaX01JTl9IRUlHSFQgfHwgd2lkdGggPCBCVVpfTUlOX1dJRFRIIHx8Ci0JICAgIGhlaWdodCA+IEJVWl9NQVhfSEVJR0hUIHx8IHdpZHRoID4gQlVaX01BWF9XSURUSCkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiB2NGxfc2V0X2Zvcm1hdCgpIC0gd3JvbmcgZnJhbWUgc2l6ZSAoJWR4JWQpXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHdpZHRoLCBoZWlnaHQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlicHAgPSAoZm9ybWF0LT5kZXB0aCArIDcpIC8gODsKLQotCS8qIENoZWNrIGFnYWluc3QgYXZhaWxhYmxlIGJ1ZmZlciBzaXplICovCi0JaWYgKGhlaWdodCAqIHdpZHRoICogYnBwID4gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9zZXRfZm9ybWF0KCkgLSB2aWRlbyBidWZmZXIgc2l6ZSAoJWQga0IpIGlzIHRvbyBzbWFsbFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgPj4gMTApOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBUaGUgdmlkZW8gZnJvbnQgZW5kIG5lZWRzIDQtYnl0ZSBhbGluZ2VkIGxpbmUgc2l6ZXMgKi8KLQotCWlmICgoYnBwID09IDIgJiYgKHdpZHRoICYgMSkpIHx8IChicHAgPT0gMyAmJiAod2lkdGggJiAzKSkpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3NldF9mb3JtYXQoKSAtIHdyb25nIGZyYW1lIGFsaW5nbWVudFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZmgtPnY0bF9zZXR0aW5ncy53aWR0aCA9IHdpZHRoOwotCWZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0ID0gaGVpZ2h0OwotCWZoLT52NGxfc2V0dGluZ3MuZm9ybWF0ID0gZm9ybWF0OwotCWZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lID0gYnBwICogZmgtPnY0bF9zZXR0aW5ncy53aWR0aDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci16b3Jhbl92NGxfcXVldWVfZnJhbWUgKHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICAgaW50ICAgICAgICAgIG51bSkKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmVzID0gMDsKLQotCWlmICghZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiB2NGxfcXVldWVfZnJhbWUoKSAtIGJ1ZmZlcnMgbm90IHlldCBhbGxvY2F0ZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJlcyA9IC1FTk9NRU07Ci0JfQotCi0JLyogTm8gZ3JhYmJpbmcgb3V0c2lkZSB0aGUgYnVmZmVyIHJhbmdlISAqLwotCWlmIChudW0gPj0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzIHx8IG51bSA8IDApIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXIgJWQgaXMgb3V0IG9mIHJhbmdlXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIG51bSk7Ci0JCXJlcyA9IC1FSU5WQUw7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCi0JaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7Ci0JCQl6ci0+djRsX2J1ZmZlcnMgPSBmaC0+djRsX2J1ZmZlcnM7Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fQUNUSVZFOwotCQl9IGVsc2UgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiB2NGxfcXVldWVfZnJhbWUoKSAtIGFub3RoZXIgc2Vzc2lvbiBpcyBhbHJlYWR5IGNhcHR1cmluZ1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUJVU1k7Ci0JCX0KLQl9Ci0KLQkvKiBtYWtlIHN1cmUgYSBncmFiIGlzbid0IGdvaW5nIG9uIGN1cnJlbnRseSB3aXRoIHRoaXMgYnVmZmVyICovCi0JaWYgKCFyZXMpIHsKLQkJc3dpdGNoICh6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUpIHsKLQkJZGVmYXVsdDoKLQkJY2FzZSBCVVpfU1RBVEVfUEVORDoKLQkJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKLQkJCQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJCX0KLQkJCXJlcyA9IC1FQlVTWTsJLyogd2hhdCBhcmUgeW91IGRvaW5nPyAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgQlVaX1NUQVRFX0RPTkU6Ci0JCQlkcHJpbnRrKDIsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiB2NGxfcXVldWVfZnJhbWUoKSAtIHF1ZXVlaW5nIGJ1ZmZlciAlZCBpbiBzdGF0ZSBET05FIT9cbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIG51bSk7Ci0JCWNhc2UgQlVaX1NUQVRFX1VTRVI6Ci0JCQkvKiBzaW5jZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgdW51c2VkIGJ1ZmZlciB0aGVyZSdzIHJvb20gZm9yIGF0IGxlYXN0Ci0JCQkgKiBvbmUgbW9yZSBwZW5kW10gZW50cnkgKi8KLQkJCXpyLT52NGxfcGVuZFt6ci0+djRsX3BlbmRfaGVhZCsrICYKLQkJCQkJVjRMX01BU0tfRlJBTUVdID0gbnVtOwotCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID0gQlVaX1NUQVRFX1BFTkQ7Ci0JCQl6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMubGVuZ3RoID0KLQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZSAqCi0JCQkgICAgenItPnY0bF9zZXR0aW5ncy5oZWlnaHQ7Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0gPQotCQkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIXJlcyAmJiB6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCi0JCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlOwotCi0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAotdjRsX2dyYWIgKHN0cnVjdCBmaWxlICAgICAgICpmaWxlLAotCSAgc3RydWN0IHZpZGVvX21tYXAgKm1wKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQlpbnQgcmVzID0gMCwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKSB7Ci0JCWlmICh6b3Jhbl9mb3JtYXRzW2ldLnBhbGV0dGUgPT0gbXAtPmZvcm1hdCAmJgotCQkgICAgem9yYW5fZm9ybWF0c1tpXS5mbGFncyAmIFpPUkFOX0ZPUk1BVF9DQVBUVVJFICYmCi0JCSAgICAhKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBaT1JBTl9GT1JNQVRfQ09NUFJFU1NFRCkpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gTlVNX0ZPUk1BVFMgfHwgem9yYW5fZm9ybWF0c1tpXS5kZXB0aCA9PSAwKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9ncmFiKCkgLSB3cm9uZyBieXRlcy1wZXItcGl4ZWwgZm9ybWF0XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIFRvIG1pbmltaXplIHRoZSB0aW1lIHNwZW50IGluIHRoZSBJUlEgcm91dGluZSwgd2UgYXZvaWQgc2V0dGluZyB1cAotCSAqIHRoZSB2aWRlbyBmcm9udCBlbmQgdGhlcmUuCi0JICogSWYgdGhpcyBncmFiIGhhcyBkaWZmZXJlbnQgcGFyYW1ldGVycyBmcm9tIGEgcnVubmluZyBzdHJlYW1pbmcgY2FwdHVyZQotCSAqIHdlIHN0b3AgdGhlIHN0cmVhbWluZyBjYXB0dXJlIGFuZCBzdGFydCBpdCBvdmVyIGFnYWluLgotCSAqLwotCWlmICh6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmCi0JICAgICh6ci0+djRsX3NldHRpbmdzLndpZHRoICE9IG1wLT53aWR0aCB8fAotCSAgICAgenItPnY0bF9zZXR0aW5ncy5oZWlnaHQgIT0gbXAtPmhlaWdodCB8fAotCSAgICAgenItPnY0bF9zZXR0aW5ncy5mb3JtYXQtPnBhbGV0dGUgIT0gbXAtPmZvcm1hdCkpIHsKLQkJcmVzID0gd2FpdF9ncmFiX3BlbmRpbmcoenIpOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0JaWYgKChyZXMgPSB6b3Jhbl92NGxfc2V0X2Zvcm1hdChmaWxlLAotCQkJCQltcC0+d2lkdGgsCi0JCQkJCW1wLT5oZWlnaHQsCi0JCQkJCSZ6b3Jhbl9mb3JtYXRzW2ldKSkpCi0JCXJldHVybiByZXM7Ci0JenItPnY0bF9zZXR0aW5ncyA9IGZoLT52NGxfc2V0dGluZ3M7Ci0KLQkvKiBxdWV1ZSB0aGUgZnJhbWUgaW4gdGhlIHBlbmRpbmcgcXVldWUgKi8KLQlpZiAoKHJlcyA9IHpvcmFuX3Y0bF9xdWV1ZV9mcmFtZShmaWxlLCBtcC0+ZnJhbWUpKSkgewotCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0KLQkvKiBwdXQgdGhlIDM2MDU3IGludG8gZnJhbWUgZ3JhYmJpbmcgbW9kZSAqLwotCWlmICghcmVzICYmICF6ci0+djRsX21lbWdyYWJfYWN0aXZlKQotCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKLQotCS8vZHByaW50ayg0LCBLRVJOX0lORk8gIiVzOiBGcmFtZSBncmFiIDMuLi5cbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCXJldHVybiByZXM7Ci19Ci0KLS8qCi0gKiBTeW5jIG9uIGEgVjRMIGJ1ZmZlcgotICovCi0KLXN0YXRpYyBpbnQKLXY0bF9zeW5jIChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkgIGludCAgICAgICAgICBmcmFtZSkKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3N5bmMoKSAtIG5vIGdyYWIgYWN0aXZlIGZvciB0aGlzIHNlc3Npb25cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIGNoZWNrIHBhc3NlZC1pbiBmcmFtZSBudW1iZXIgKi8KLQlpZiAoZnJhbWUgPj0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzIHx8IGZyYW1lIDwgMCkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUiAiJXM6IHY0bF9zeW5jKCkgLSBmcmFtZSAlZCBpcyBpbnZhbGlkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZyYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogQ2hlY2sgaWYgaXMgYnVmZmVyIHdhcyBxdWV1ZWQgYXQgYWxsICovCi0JaWYgKHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID09IEJVWl9TVEFURV9VU0VSKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9zeW5jKCkgLSBhdHRlbXB0IHRvIHN5bmMgb24gYSBidWZmZXIgd2hpY2ggd2FzIG5vdCBxdWV1ZWQ/XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVQUk9UTzsKLQl9Ci0KLQkvKiB3YWl0IG9uIHRoaXMgYnVmZmVyIHRvIGdldCByZWFkeSAqLwotCWlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoenItPnY0bF9jYXBxLAotCQkJCSh6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSAhPSBCVVpfU1RBVEVfUEVORCksCi0JCQkJMTAqSFopKQotCQlyZXR1cm4gLUVUSU1FOwotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQotCS8qIGJ1ZmZlciBzaG91bGQgbm93IGJlIGluIEJVWl9TVEFURV9ET05FICovCi0JaWYgKHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlICE9IEJVWl9TVEFURV9ET05FKQotCQlkcHJpbnRrKDIsCi0JCQlLRVJOX0VSUiAiJXM6IHY0bF9zeW5jKCkgLSBpbnRlcm5hbCBzdGF0ZSBlcnJvclxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQotCXpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7Ci0JZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0gPSB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQotCS8qIENoZWNrIGlmIHN0cmVhbWluZyBjYXB0dXJlIGhhcyBmaW5pc2hlZCAqLwotCWlmICh6ci0+djRsX3BlbmRfdGFpbCA9PSB6ci0+djRsX3BlbmRfaGVhZCkgewotCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKLQkJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fQUNUSVZFKSB7Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0genItPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCQkgICAgWk9SQU5fRlJFRTsKLQkJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqICAgUXVldWUgYSBNSlBFRyBidWZmZXIgZm9yIGNhcHR1cmUvcGxheWJhY2sKLSAqLwotCi1zdGF0aWMgaW50Ci16b3Jhbl9qcGdfcXVldWVfZnJhbWUgKHN0cnVjdCBmaWxlICAgICAgICAgICpmaWxlLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIG51bSwKLQkJICAgICAgIGVudW0gem9yYW5fY29kZWNfbW9kZSBtb2RlKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXMgPSAwOwotCi0JLyogQ2hlY2sgaWYgYnVmZmVycyBhcmUgYWxsb2NhdGVkICovCi0JaWYgKCFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IGpwZ19xdWV1ZV9mcmFtZSgpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogTm8gZ3JhYmJpbmcgb3V0c2lkZSB0aGUgYnVmZmVyIHJhbmdlISAqLwotCWlmIChudW0gPj0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzIHx8IG51bSA8IDApIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXIgJWQgb3V0IG9mIHJhbmdlXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIG51bSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIHdoYXQgaXMgdGhlIGNvZGVjIG1vZGUgcmlnaHQgbm93PyAqLwotCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9JRExFKSB7Ci0JCXpyLT5qcGdfc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOwotCX0gZWxzZSBpZiAoenItPmNvZGVjX21vZGUgIT0gbW9kZSkgewotCQkvKiB3cm9uZyBjb2RlYyBtb2RlIGFjdGl2ZSAtIGludmFsaWQgKi8KLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBjb2RlYyBpbiB3cm9uZyBtb2RlXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7Ci0JCWlmICh6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJCXpyLT5qcGdfYnVmZmVycyA9IGZoLT5qcGdfYnVmZmVyczsKLQkJCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9BQ1RJVkU7Ci0JCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGpwZ19xdWV1ZV9mcmFtZSgpIC0gYW5vdGhlciBzZXNzaW9uIGlzIGFscmVhZHkgY2FwdHVyaW5nXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FQlVTWTsKLQkJfQotCX0KLQotCWlmICghcmVzICYmIHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX0lETEUpIHsKLQkJLyogT2sgbG9hZCB1cCB0aGUganBlZyBjb2RlYyAqLwotCQl6cjM2MDU3X2VuYWJsZV9qcGcoenIsIG1vZGUpOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQotCWlmICghcmVzKSB7Ci0JCXN3aXRjaCAoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlKSB7Ci0JCWNhc2UgQlVaX1NUQVRFX0RPTkU6Ci0JCQlkcHJpbnRrKDIsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIHF1ZWluZyBmcmFtZSBpbiBCVVpfU1RBVEVfRE9ORSBzdGF0ZSE/XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJY2FzZSBCVVpfU1RBVEVfVVNFUjoKLQkJCS8qIHNpbmNlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB1bnVzZWQgYnVmZmVyIHRoZXJlJ3Mgcm9vbSBmb3IgYXQKLQkJCSAqbGVhc3Qgb25lIG1vcmUgcGVuZFtdIGVudHJ5ICovCi0JCQl6ci0+anBnX3BlbmRbenItPmpwZ19xdWVfaGVhZCsrICYgQlVaX01BU0tfRlJBTUVdID0KLQkJCSAgICBudW07Ci0JCQl6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPSBCVVpfU1RBVEVfUEVORDsKLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXSA9Ci0JCQkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dOwotCQkJem9yYW5fZmVlZF9zdGF0X2NvbSh6cik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJY2FzZSBCVVpfU1RBVEVfRE1BOgotCQljYXNlIEJVWl9TVEFURV9QRU5EOgotCQkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQkJCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwotCQkJCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQkJfQotCQkJcmVzID0gLUVCVVNZOwkvKiB3aGF0IGFyZSB5b3UgZG9pbmc/ICovCi0JCQlicmVhazsKLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCi0JaWYgKCFyZXMgJiYgenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7Ci0JCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlOwotCX0KLQotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQKLWpwZ19xYnVmIChzdHJ1Y3QgZmlsZSAgICAgICAgICAqZmlsZSwKLQkgIGludCAgICAgICAgICAgICAgICAgICBmcmFtZSwKLQkgIGVudW0gem9yYW5fY29kZWNfbW9kZSBtb2RlKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQlpbnQgcmVzID0gMDsKLQotCS8qIERvZXMgdGhlIHVzZXIgd2FudCB0byBzdG9wIHN0cmVhbWluZz8gKi8KLQlpZiAoZnJhbWUgPCAwKSB7Ci0JCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBtb2RlKSB7Ci0JCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IGpwZ19xYnVmKC0xKSAtIHNlc3Npb24gbm90IGFjdGl2ZVxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9IHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPQotCQkJICAgIFpPUkFOX0ZSRUU7Ci0JCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgQlVaX01PREVfSURMRSk7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczoganBnX3FidWYoKSAtIHN0b3Agc3RyZWFtaW5nIGJ1dCBub3QgaW4gc3RyZWFtaW5nIG1vZGVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlpZiAoKHJlcyA9IHpvcmFuX2pwZ19xdWV1ZV9mcmFtZShmaWxlLCBmcmFtZSwgbW9kZSkpKQotCQlyZXR1cm4gcmVzOwotCi0JLyogU3RhcnQgdGhlIGpwZWcgY29kZWMgd2hlbiB0aGUgZmlyc3QgZnJhbWUgaXMgcXVldWVkICAqLwotCWlmICghcmVzICYmIHpyLT5qcGdfcXVlX2hlYWQgPT0gMSkKLQkJanBlZ19zdGFydCh6cik7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi0vKgotICogICBTeW5jIG9uIGEgTUpQRUcgYnVmZmVyCi0gKi8KLQotc3RhdGljIGludAotanBnX3N5bmMgKHN0cnVjdCBmaWxlICAgICAgICpmaWxlLAotCSAgc3RydWN0IHpvcmFuX3N5bmMgKmJzKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBmcmFtZTsKLQotCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3N5bmMoKSAtIGNhcHR1cmUgaXMgbm90IGN1cnJlbnRseSBhY3RpdmVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MgJiYKLQkgICAgenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IGpwZ19zeW5jKCkgLSBjb2RlYyBub3QgaW4gc3RyZWFtaW5nIG1vZGVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoIXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHpyLT5qcGdfY2FwcSwKLQkJCSh6ci0+anBnX3F1ZV90YWlsICE9IHpyLT5qcGdfZG1hX3RhaWwgfHwKLQkJCSB6ci0+anBnX2RtYV90YWlsID09IHpyLT5qcGdfZG1hX2hlYWQpLAotCQkJMTAqSFopKSB7Ci0JCWludCBpc3I7Ci0KLQkJYnRhbmQoflpSMzYwNTdfSk1DX0dvX2VuLCBaUjM2MDU3X0pNQyk7Ci0JCXVkZWxheSgxKTsKLQkJenItPmNvZGVjLT5jb250cm9sKHpyLT5jb2RlYywgQ09ERUNfR19TVEFUVVMsCi0JCQkJCSAgIHNpemVvZihpc3IpLCAmaXNyKTsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3N5bmMoKSAtIHRpbWVvdXQ6IGNvZGVjIGlzcj0weCUwMnhcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgaXNyKTsKLQotCQlyZXR1cm4gLUVUSU1FOwotCi0JfQotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQotCWlmICh6ci0+anBnX2RtYV90YWlsICE9IHpyLT5qcGdfZG1hX2hlYWQpCi0JCWZyYW1lID0genItPmpwZ19wZW5kW3pyLT5qcGdfcXVlX3RhaWwrKyAmIEJVWl9NQVNLX0ZSQU1FXTsKLQllbHNlCi0JCWZyYW1lID0genItPmpwZ19wZW5kW3pyLT5qcGdfcXVlX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07Ci0KLQkvKiBidWZmZXIgc2hvdWxkIG5vdyBiZSBpbiBCVVpfU1RBVEVfRE9ORSAqLwotCWlmICh6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSAhPSBCVVpfU1RBVEVfRE9ORSkKLQkJZHByaW50aygyLAotCQkJS0VSTl9FUlIgIiVzOiBqcGdfc3luYygpIC0gaW50ZXJuYWwgc3RhdGUgZXJyb3JcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0KLQkqYnMgPSB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5iczsKLQlicy0+ZnJhbWUgPSBmcmFtZTsKLQl6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOwotCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdID0genItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV07Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotem9yYW5fb3Blbl9pbml0X3Nlc3Npb24gKHN0cnVjdCBmaWxlICpmaWxlKQotewotCWludCBpOwotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQotCS8qIFBlciBkZWZhdWx0LCBtYXAgdGhlIFY0TCBCdWZmZXJzICovCi0JZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfUkFXOwotCi0JLyogdGFrZSBvdmVyIHRoZSBjYXJkJ3MgY3VycmVudCBzZXR0aW5ncyAqLwotCWZoLT5vdmVybGF5X3NldHRpbmdzID0genItPm92ZXJsYXlfc2V0dGluZ3M7Ci0JZmgtPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0ID0gMDsKLQlmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQgPSB6ci0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQ7Ci0JZmgtPm92ZXJsYXlfYWN0aXZlID0gWk9SQU5fRlJFRTsKLQotCS8qIHY0bCBzZXR0aW5ncyAqLwotCWZoLT52NGxfc2V0dGluZ3MgPSB6ci0+djRsX3NldHRpbmdzOwotCi0JLyogdjRsX2J1ZmZlcnMgKi8KLQltZW1zZXQoJmZoLT52NGxfYnVmZmVycywgMCwgc2l6ZW9mKHN0cnVjdCB6b3Jhbl92NGxfc3RydWN0KSk7Ci0JZm9yIChpID0gMDsgaSA8IFZJREVPX01BWF9GUkFNRTsgaSsrKSB7Ci0JCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsJLyogbm90aGluZyBnb2luZyBvbiAqLwotCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmJzLmZyYW1lID0gaTsKLQl9Ci0JZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKLQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKLQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgPSB2NGxfYnVmc2l6ZTsKLQlmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSB2NGxfbmJ1ZnM7Ci0KLQkvKiBqcGcgc2V0dGluZ3MgKi8KLQlmaC0+anBnX3NldHRpbmdzID0genItPmpwZ19zZXR0aW5nczsKLQotCS8qIGpwZ19idWZmZXJzICovCi0JbWVtc2V0KCZmaC0+anBnX2J1ZmZlcnMsIDAsIHNpemVvZihzdHJ1Y3Qgem9yYW5fanBnX3N0cnVjdCkpOwotCWZvciAoaSA9IDA7IGkgPCBCVVpfTUFYX0ZSQU1FOyBpKyspIHsKLQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOwkvKiBub3RoaW5nIGdvaW5nIG9uICovCi0JCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uYnMuZnJhbWUgPSBpOwotCX0KLQlmaC0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzID0genItPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91czsKLQlmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQlmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAwOwotCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwotCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSA9IGpwZ19idWZzaXplOwotCWZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyA9IGpwZ19uYnVmczsKLX0KLQotc3RhdGljIHZvaWQKLXpvcmFuX2Nsb3NlX2VuZF9zZXNzaW9uIChzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0KLQkvKiBvdmVybGF5ICovCi0JaWYgKGZoLT5vdmVybGF5X2FjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCWZoLT5vdmVybGF5X2FjdGl2ZSA9IHpyLT5vdmVybGF5X2FjdGl2ZSA9IFpPUkFOX0ZSRUU7Ci0JCXpyLT52NGxfb3ZlcmxheV9hY3RpdmUgPSAwOwotCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpCi0JCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOwotCQl6ci0+b3ZlcmxheV9tYXNrID0gTlVMTDsKLQl9Ci0KLQkvKiB2NGwgY2FwdHVyZSAqLwotCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0JCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOwotCQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPQotCQkgICAgWk9SQU5fRlJFRTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0JfQotCi0JLyogdjRsIGJ1ZmZlcnMgKi8KLQlpZiAoZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCB8fAotCSAgICBmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKLQkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQl9Ci0KLQkvKiBqcGcgY2FwdHVyZSAqLwotCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJenIzNjA1N19lbmFibGVfanBnKHpyLCBCVVpfTU9ERV9JRExFKTsKLQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0KLQkJICAgIFpPUkFOX0ZSRUU7Ci0JfQotCi0JLyoganBnIGJ1ZmZlcnMgKi8KLQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fAotCSAgICBmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKLQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKLQl9Ci19Ci0KLS8qCi0gKiAgIE9wZW4gYSB6b3JhbiBjYXJkLiBSaWdodCBub3cgdGhlIGZsYWdzIHN0dWZmIGlzIGp1c3QgcGxheWluZwotICovCi0KLXN0YXRpYyBpbnQKLXpvcmFuX29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JICAgIHN0cnVjdCBmaWxlICAqZmlsZSkKLXsKLQl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCXN0cnVjdCB6b3JhbiAqenIgPSBOVUxMOwotCXN0cnVjdCB6b3Jhbl9maCAqZmg7Ci0JaW50IGksIHJlcywgZmlyc3Rfb3BlbiA9IDAsIGhhdmVfbW9kdWxlX2xvY2tzID0gMDsKLQotCS8qIGZpbmQgdGhlIGRldmljZSAqLwotCWZvciAoaSA9IDA7IGkgPCB6b3Jhbl9udW07IGkrKykgewotCQlpZiAoem9yYW5baV0tPnZpZGVvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKLQkJCXpyID0gem9yYW5baV07Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghenIpIHsKLQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IGRldmljZSBub3QgZm91bmQhXG4iLCBaT1JBTl9OQU1FKTsKLQkJcmVzID0gLUVOT0RFVjsKLQkJZ290byBvcGVuX3VubG9ja19hbmRfcmV0dXJuOwotCX0KLQotCS8qIHNlZSBmcy9kZXZpY2UuYyAtIHRoZSBrZXJuZWwgYWxyZWFkeSBsb2NrcyBkdXJpbmcgb3BlbigpLAotCSAqIHNvIGxvY2tpbmcgb3Vyc2VsdmVzIG9ubHkgY2F1c2VzIGRlYWRsb2NrcyAqLwotCS8qbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOyovCi0KLQlpZiAoIXpyLT5kZWNvZGVyKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSICIlczogbm8gVFYgZGVjb2RlciBsb2FkZWQgZm9yIGRldmljZSFcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJlcyA9IC1FSU87Ci0JCWdvdG8gb3Blbl91bmxvY2tfYW5kX3JldHVybjsKLQl9Ci0KLQkvKiB0cnkgdG8gZ3JhYiBhIG1vZHVsZSBsb2NrICovCi0JaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZmFpbGVkIHRvIGFjcXVpcmUgbXkgb3duIGxvY2shIFBBTklDIVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmVzID0gLUVOT0RFVjsKLQkJZ290byBvcGVuX3VubG9ja19hbmRfcmV0dXJuOwotCX0KLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHpyLT5kZWNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcikpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZmFpbGVkIHRvIGdyYWIgb3duZXJzaGlwIG9mIGkyYyBkZWNvZGVyXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXMgPSAtRUlPOwotCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQkJZ290byBvcGVuX3VubG9ja19hbmRfcmV0dXJuOwotCX0KLQlpZiAoenItPmVuY29kZXIgJiYKLQkgICAgIXRyeV9tb2R1bGVfZ2V0KHpyLT5lbmNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcikpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZmFpbGVkIHRvIGdyYWIgb3duZXJzaGlwIG9mIGkyYyBlbmNvZGVyXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXMgPSAtRUlPOwotCQltb2R1bGVfcHV0KHpyLT5kZWNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci0JCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCi0JaGF2ZV9tb2R1bGVfbG9ja3MgPSAxOwotCi0JaWYgKHpyLT51c2VyID49IDIwNDgpIHsKLQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IHRvbyBtYW55IHVzZXJzICglZCkgb24gZGV2aWNlXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHpyLT51c2VyKTsKLQkJcmVzID0gLUVCVVNZOwotCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCi0JZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiB6b3Jhbl9vcGVuKCVzLCBwaWQ9WyVkXSksIHVzZXJzKC0pPSVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHpyLT51c2VyKTsKLQotCS8qIG5vdywgY3JlYXRlIHRoZSBvcGVuKCktc3BlY2lmaWMgZmlsZV9vcHMgc3RydWN0ICovCi0JZmggPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgem9yYW5fZmgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZoKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX29wZW4oKSAtIGFsbG9jYXRpb24gb2Ygem9yYW5fZmggZmFpbGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXMgPSAtRU5PTUVNOwotCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCS8qIHVzZWQgdG8gYmUgQlVaX01BWF9XSURUSC9IRUlHSFQsIGJ1dCB0aGF0IGdpdmVzIG92ZXJmbG93cwotCSAqIG9uIG5vcm0tY2hhbmdlISAqLwotCWZoLT5vdmVybGF5X21hc2sgPQotCSAgICBrbWFsbG9jKCgoNzY4ICsgMzEpIC8gMzIpICogNTc2ICogNCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmaC0+b3ZlcmxheV9tYXNrKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX29wZW4oKSAtIGFsbG9jYXRpb24gb2Ygb3ZlcmxheV9tYXNrIGZhaWxlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJa2ZyZWUoZmgpOwotCQlyZXMgPSAtRU5PTUVNOwotCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCi0JaWYgKHpyLT51c2VyKysgPT0gMCkKLQkJZmlyc3Rfb3BlbiA9IDE7Ci0KLQkvKm11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOyovCi0KLQkvKiBkZWZhdWx0IHNldHVwIC0gVE9ETzogbG9vayBhdCBmbGFncyAqLwotCWlmIChmaXJzdF9vcGVuKSB7CS8qIEZpcnN0IGRldmljZSBvcGVuICovCi0JCXpyMzYwNTdfcmVzdGFydCh6cik7Ci0JCXpvcmFuX29wZW5faW5pdF9wYXJhbXMoenIpOwotCQl6b3Jhbl9pbml0X2hhcmR3YXJlKHpyKTsKLQotCQlidG9yKFpSMzYwNTdfSUNSX0ludFBpbkVuLCBaUjM2MDU3X0lDUik7Ci0JfQotCi0JLyogc2V0IGZpbGVfb3BzIHN0dWZmICovCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7Ci0JZmgtPnpyID0genI7Ci0Jem9yYW5fb3Blbl9pbml0X3Nlc3Npb24oZmlsZSk7Ci0KLQlyZXR1cm4gMDsKLQotb3Blbl91bmxvY2tfYW5kX3JldHVybjoKLQkvKiBpZiB3ZSBncmFiYmVkIGxvY2tzLCByZWxlYXNlIHRoZW0gYWNjb3JkaW5nbHkgKi8KLQlpZiAoaGF2ZV9tb2R1bGVfbG9ja3MpIHsKLQkJbW9kdWxlX3B1dCh6ci0+ZGVjb2Rlci0+ZHJpdmVyLT5kcml2ZXIub3duZXIpOwotCQlpZiAoenItPmVuY29kZXIpIHsKLQkJCW1vZHVsZV9wdXQoenItPmVuY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKLQkJfQotCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQl9Ci0KLQkvKiBpZiB0aGVyZSdzIG5vIGRldmljZSBmb3VuZCwgd2UgZGlkbid0IG9idGFpbiB0aGUgbG9jayBlaXRoZXIgKi8KLQlpZiAoenIpIHsKLQkJLyptdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsqLwotCX0KLQotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQKLXpvcmFuX2Nsb3NlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCSAgICAgc3RydWN0IGZpbGUgICpmaWxlKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQotCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogem9yYW5fY2xvc2UoJXMsIHBpZD1bJWRdKSwgdXNlcnMoKyk9JWRcbiIsCi0JCVpSX0RFVk5BTUUoenIpLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgenItPnVzZXIpOwotCi0JLyoga2VybmVsIGxvY2tzIChmcy9kZXZpY2UuYyksIHNvIGRvbid0IGRvIHRoYXQgb3Vyc2VsdmVzCi0JICogKHByZXZlbnRzIGRlYWRsb2NrcykgKi8KLQkvKm11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsqLwotCi0Jem9yYW5fY2xvc2VfZW5kX3Nlc3Npb24oZmlsZSk7Ci0KLQlpZiAoenItPnVzZXItLSA9PSAxKSB7CS8qIExhc3QgcHJvY2VzcyAqLwotCQkvKiBDbGVhbiB1cCBKUEVHIHByb2Nlc3MgKi8KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6ci0+anBnX2NhcHEpOwotCQl6cjM2MDU3X2VuYWJsZV9qcGcoenIsIEJVWl9NT0RFX0lETEUpOwotCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7Ci0KLQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JCWJ0YW5kKH5aUjM2MDU3X0lDUl9JbnRQaW5FbiwgWlIzNjA1N19JQ1IpOwotCi0JCWlmICh6cjM2MDY3X2RlYnVnID4gMSkKLQkJCXByaW50X2ludGVycnVwdHMoenIpOwotCi0JCS8qIE92ZXJsYXkgb2ZmICovCi0JCXpyLT52NGxfb3ZlcmxheV9hY3RpdmUgPSAwOwotCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOwotCQl6ci0+b3ZlcmxheV9tYXNrID0gTlVMTDsKLQotCQkvKiBjYXB0dXJlIG9mZiAqLwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT52NGxfY2FwcSk7Ci0JCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOwotCQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7Ci0JCXpvcmFuX3NldF9wY2lfbWFzdGVyKHpyLCAwKTsKLQotCQlpZiAoIXBhc3NfdGhyb3VnaCkgewkvKiBTd2l0Y2ggdG8gY29sb3IgYmFyICovCi0JCQlpbnQgemVybyA9IDAsIHR3byA9IDI7Ci0JCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJnplcm8pOwotCQkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJnR3byk7Ci0JCX0KLQl9Ci0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCWtmcmVlKGZoLT5vdmVybGF5X21hc2spOwotCWtmcmVlKGZoKTsKLQotCS8qIHJlbGVhc2UgbG9ja3Mgb24gdGhlIGkyYyBtb2R1bGVzICovCi0JbW9kdWxlX3B1dCh6ci0+ZGVjb2Rlci0+ZHJpdmVyLT5kcml2ZXIub3duZXIpOwotCWlmICh6ci0+ZW5jb2RlcikgewotCQkgbW9kdWxlX3B1dCh6ci0+ZW5jb2Rlci0+ZHJpdmVyLT5kcml2ZXIub3duZXIpOwotCX0KLQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQotCS8qbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KLQotCWRwcmludGsoNCwgS0VSTl9JTkZPICIlczogem9yYW5fY2xvc2UoKSBkb25lXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgc3NpemVfdAotem9yYW5fcmVhZCAoc3RydWN0IGZpbGUgKmZpbGUsCi0JICAgIGNoYXIgICAgICAgIF9fdXNlciAqZGF0YSwKLQkgICAgc2l6ZV90ICAgICAgIGNvdW50LAotCSAgICBsb2ZmX3QgICAgICAqcHBvcykKLXsKLQkvKiB3ZSBzaW1wbHkgZG9uJ3Qgc3VwcG9ydCByZWFkKCkgKHlldCkuLi4gKi8KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgc3NpemVfdAotem9yYW5fd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLAotCSAgICAgY29uc3QgY2hhciAgX191c2VyICpkYXRhLAotCSAgICAgc2l6ZV90ICAgICAgIGNvdW50LAotCSAgICAgbG9mZl90ICAgICAgKnBwb3MpCi17Ci0JLyogLi4uYW5kIHRoZSBzYW1lIGdvZXMgZm9yIHdyaXRlKCkgKi8KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50Ci1zZXR1cF9mYnVmZmVyIChzdHJ1Y3QgZmlsZSAgICAgICAgICAgICAgICpmaWxlLAotCSAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICpiYXNlLAotCSAgICAgICBjb25zdCBzdHJ1Y3Qgem9yYW5fZm9ybWF0ICpmbXQsCi0JICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAotCSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCi0JICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzcGVybGluZSkKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0KLQkvKiAoUm9uYWxkKSB2NGwvdjRsMiBndWlkZWxpbmVzICovCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pICYmICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JLyogRG9uJ3QgYWxsb3cgZnJhbWUgYnVmZmVyIG92ZXJsYXkgaWYgUENJIG9yIEFHUCBpcyBidWdneSwgb3Igb24KLQkgICBBTGkgTWFnaWsgKHRoYXQgbmVlZHMgdmVyeSBsb3cgbGF0ZW5jeSB3aGlsZSB0aGUgY2FyZCBuZWVkcyBhCi0JICAgaGlnaGVyIHZhbHVlIGFsd2F5cykgKi8KLQotCWlmIChwY2lfcGNpX3Byb2JsZW1zICYgKFBDSVBDSV9GQUlMIHwgUENJQUdQX0ZBSUwgfCBQQ0lQQ0lfQUxJTUFHSUspKQotCQlyZXR1cm4gLUVOWElPOwotCi0JLyogd2UgbmVlZCBhIGJ5dGVzcGVybGluZSB2YWx1ZSwgZXZlbiBpZiBub3QgZ2l2ZW4gKi8KLQlpZiAoIWJ5dGVzcGVybGluZSkKLQkJYnl0ZXNwZXJsaW5lID0gd2lkdGggKiAoKGZtdC0+ZGVwdGggKyA3KSAmIH43KSAvIDg7Ci0KLSNpZiAwCi0JaWYgKHpyLT5vdmVybGF5X2FjdGl2ZSkgewotCQkvKiBkemplZS4uLiBzdHVwaWQgdXNlcnMuLi4gZG9uJ3QgZXZlbiBib3RoZXIgdG8gdHVybiBvZmYKLQkJICogb3ZlcmxheSBiZWZvcmUgY2hhbmdpbmcgdGhlIG1lbW9yeSBsb2NhdGlvbi4uLgotCQkgKiBub3JtYWxseSwgd2Ugd291bGQgcmV0dXJuIGVycm9ycyBoZXJlLiBIb3dldmVyLCBvbmUgb2YKLQkJICogdGhlIHRvb2xzIHRoYXQgZG9lcyB0aGlzIGlzLi4uIHhhd3R2ISBhbmQgc2luY2UgeGF3dHYKLQkJICogaXMgdXNlZCBieSArLy0gOTklIG9mIHRoZSB1c2Vycywgd2UnZCByYXRoZXIgYmUgdXNlci0KLQkJICogZnJpZW5kbHkgYW5kIHNpbGVudGx5IGRvIGFzIGlmIG5vdGhpbmcgd2VudCB3cm9uZyAqLwotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF9mYnVmZmVyKCkgLSBmb3JjZWQgb3ZlcmxheSB0dXJub2ZmIGJlY2F1c2UgZnJhbWVidWZmZXIgY2hhbmdlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJenIzNjA1N19vdmVybGF5KHpyLCAwKTsKLQl9Ci0jZW5kaWYKLQotCWlmICghKGZtdC0+ZmxhZ3MgJiBaT1JBTl9GT1JNQVRfT1ZFUkxBWSkpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfZmJ1ZmZlcigpIC0gbm8gdmFsaWQgb3ZlcmxheSBmb3JtYXQgZ2l2ZW5cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoaGVpZ2h0IDw9IDAgfHwgd2lkdGggPD0gMCB8fCBieXRlc3BlcmxpbmUgPD0gMCkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF9mYnVmZmVyKCkgLSBpbnZhbGlkIGhlaWdodC93aWR0aC9icGwgdmFsdWUgKCVkfCVkfCVkKVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB3aWR0aCwgaGVpZ2h0LCBieXRlc3BlcmxpbmUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKGJ5dGVzcGVybGluZSAmIDMpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfZmJ1ZmZlcigpIC0gYnl0ZXNwZXJsaW5lICglZCkgbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBieXRlc3BlcmxpbmUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl6ci0+YnVmZmVyLmJhc2UgPSAodm9pZCAqKSAoKHVuc2lnbmVkIGxvbmcpIGJhc2UgJiB+Myk7Ci0JenItPmJ1ZmZlci5oZWlnaHQgPSBoZWlnaHQ7Ci0JenItPmJ1ZmZlci53aWR0aCA9IHdpZHRoOwotCXpyLT5idWZmZXIuZGVwdGggPSBmbXQtPmRlcHRoOwotCXpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCA9IGZtdDsKLQl6ci0+YnVmZmVyLmJ5dGVzcGVybGluZSA9IGJ5dGVzcGVybGluZTsKLQotCS8qIFRoZSB1c2VyIHNob3VsZCBzZXQgbmV3IHdpbmRvdyBwYXJhbWV0ZXJzICovCi0JenItPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0ID0gMDsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQKLXNldHVwX3dpbmRvdyAoc3RydWN0IGZpbGUgICAgICAgKmZpbGUsCi0JICAgICAgaW50ICAgICAgICAgICAgICAgIHgsCi0JICAgICAgaW50ICAgICAgICAgICAgICAgIHksCi0JICAgICAgaW50ICAgICAgICAgICAgICAgIHdpZHRoLAotCSAgICAgIGludCAgICAgICAgICAgICAgICBoZWlnaHQsCi0JICAgICAgc3RydWN0IHZpZGVvX2NsaXAgX191c2VyICpjbGlwcywKLQkgICAgICBpbnQgICAgICAgICAgICAgICAgY2xpcGNvdW50LAotCSAgICAgIHZvaWQgICAgICAgICAgICAgIF9fdXNlciAqYml0bWFwKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQlzdHJ1Y3QgdmlkZW9fY2xpcCAqdmNwID0gTlVMTDsKLQlpbnQgb24sIGVuZDsKLQotCi0JaWYgKCF6ci0+YnVmZmVyLmJhc2UpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfd2luZG93KCkgLSBmcmFtZSBidWZmZXIgaGFzIHRvIGJlIHNldCBmaXJzdFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfd2luZG93KCkgLSBubyBvdmVybGF5IGZvcm1hdCBzZXRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0JICogVGhlIHZpZGVvIGZyb250IGVuZCBuZWVkcyA0LWJ5dGUgYWxpbmdlZCBsaW5lIHNpemVzLCB3ZSBjb3JyZWN0IHRoYXQKLQkgKiBzaWxlbnRseSBoZXJlIGlmIG5lY2Vzc2FyeQotCSAqLwotCWlmICh6ci0+YnVmZmVyLmRlcHRoID09IDE1IHx8IHpyLT5idWZmZXIuZGVwdGggPT0gMTYpIHsKLQkJZW5kID0gKHggKyB3aWR0aCkgJiB+MTsJLyogcm91bmQgZG93biAqLwotCQl4ID0gKHggKyAxKSAmIH4xOwkvKiByb3VuZCB1cCAqLwotCQl3aWR0aCA9IGVuZCAtIHg7Ci0JfQotCi0JaWYgKHpyLT5idWZmZXIuZGVwdGggPT0gMjQpIHsKLQkJZW5kID0gKHggKyB3aWR0aCkgJiB+MzsJLyogcm91bmQgZG93biAqLwotCQl4ID0gKHggKyAzKSAmIH4zOwkvKiByb3VuZCB1cCAqLwotCQl3aWR0aCA9IGVuZCAtIHg7Ci0JfQotCi0JaWYgKHdpZHRoID4gQlVaX01BWF9XSURUSCkKLQkJd2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCWlmIChoZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKLQkJaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7Ci0KLQkvKiBDaGVjayBmb3IgdmFpbGQgcGFyYW1ldGVycyAqLwotCWlmICh3aWR0aCA8IEJVWl9NSU5fV0lEVEggfHwgaGVpZ2h0IDwgQlVaX01JTl9IRUlHSFQgfHwKLQkgICAgd2lkdGggPiBCVVpfTUFYX1dJRFRIIHx8IGhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX3dpbmRvdygpIC0gd2lkdGggPSAlZCBvciBoZWlnaHQgPSAlZCBpbnZhbGlkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHdpZHRoLCBoZWlnaHQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlmaC0+b3ZlcmxheV9zZXR0aW5ncy54ID0geDsKLQlmaC0+b3ZlcmxheV9zZXR0aW5ncy55ID0geTsKLQlmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCA9IHdpZHRoOwotCWZoLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodCA9IGhlaWdodDsKLQlmaC0+b3ZlcmxheV9zZXR0aW5ncy5jbGlwY291bnQgPSBjbGlwY291bnQ7Ci0KLQkvKgotCSAqIElmIGFuIG92ZXJsYXkgaXMgcnVubmluZywgd2UgaGF2ZSB0byBzd2l0Y2ggaXQgb2ZmCi0JICogYW5kIHN3aXRjaCBpdCBvbiBhZ2FpbiBpbiBvcmRlciB0byBnZXQgdGhlIG5ldyBzZXR0aW5ncyBpbiBlZmZlY3QuCi0JICoKLQkgKiBXZSBhbHNvIHdhbnQgdG8gYXZvaWQgdGhhdCB0aGUgb3ZlcmxheSBtYXNrIGlzIHdyaXR0ZW4KLQkgKiB3aGVuIGFuIG92ZXJsYXkgaXMgcnVubmluZy4KLQkgKi8KLQotCW9uID0genItPnY0bF9vdmVybGF5X2FjdGl2ZSAmJiAhenItPnY0bF9tZW1ncmFiX2FjdGl2ZSAmJgotCSAgICB6ci0+b3ZlcmxheV9hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgotCSAgICBmaC0+b3ZlcmxheV9hY3RpdmUgIT0gWk9SQU5fRlJFRTsKLQlpZiAob24pCi0JCXpyMzYwNTdfb3ZlcmxheSh6ciwgMCk7Ci0KLQkvKgotCSAqICAgV3JpdGUgdGhlIG92ZXJsYXkgbWFzayBpZiBjbGlwcyBhcmUgd2FudGVkLgotCSAqICAgV2UgcHJlZmVyIGEgYml0bWFwLgotCSAqLwotCWlmIChiaXRtYXApIHsKLQkJLyogZmFrZSB2YWx1ZSAtIGl0IGp1c3QgbWVhbnMgd2Ugd2FudCBjbGlwcyAqLwotCQlmaC0+b3ZlcmxheV9zZXR0aW5ncy5jbGlwY291bnQgPSAxOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcihmaC0+b3ZlcmxheV9tYXNrLCBiaXRtYXAsCi0JCQkJICAgKHdpZHRoICogaGVpZ2h0ICsgNykgLyA4KSkgewotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQl9IGVsc2UgaWYgKGNsaXBjb3VudCA+IDApIHsKLQkJLyogd3JpdGUgb3VyIG93biBiaXRtYXAgZnJvbSB0aGUgY2xpcHMgKi8KLQkJdmNwID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IHZpZGVvX2NsaXApICogKGNsaXBjb3VudCArIDQpKTsKLQkJaWYgKHZjcCA9PSBOVUxMKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHNldHVwX3dpbmRvdygpIC0gQWxsb2Mgb2YgY2xpcCBtYXNrIGZhaWxlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQlpZiAoY29weV9mcm9tX3VzZXIKLQkJICAgICh2Y3AsIGNsaXBzLCBzaXplb2Yoc3RydWN0IHZpZGVvX2NsaXApICogY2xpcGNvdW50KSkgewotCQkJdmZyZWUodmNwKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JCXdyaXRlX292ZXJsYXlfbWFzayhmaWxlLCB2Y3AsIGNsaXBjb3VudCk7Ci0JCXZmcmVlKHZjcCk7Ci0JfQotCi0JZmgtPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0ID0gMTsKLQlpZiAoZmgtPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKLQkgICAgenItPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUUpCi0JCXpyLT5vdmVybGF5X3NldHRpbmdzID0gZmgtPm92ZXJsYXlfc2V0dGluZ3M7Ci0KLQlpZiAob24pCi0JCXpyMzYwNTdfb3ZlcmxheSh6ciwgMSk7Ci0KLQkvKiBNYWtlIHN1cmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLwotCXJldHVybiB3YWl0X2dyYWJfcGVuZGluZyh6cik7Ci19Ci0KLXN0YXRpYyBpbnQKLXNldHVwX292ZXJsYXkgKHN0cnVjdCBmaWxlICpmaWxlLAotCSAgICAgICBpbnQgICAgICAgICAgb24pCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCi0JLyogSWYgdGhlcmUgaXMgbm90aGluZyB0byBkbywgcmV0dXJuIGltbWVkaWF0bHkgKi8KLQlpZiAoKG9uICYmIGZoLT5vdmVybGF5X2FjdGl2ZSAhPSBaT1JBTl9GUkVFKSB8fAotCSAgICAoIW9uICYmIGZoLT5vdmVybGF5X2FjdGl2ZSA9PSBaT1JBTl9GUkVFKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBjaGVjayB3aGV0aGVyIHdlJ3JlIHRvdWNoaW5nIHNvbWVvbmUgZWxzZSdzIG92ZXJsYXkgKi8KLQlpZiAob24gJiYgenItPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKLQkgICAgZmgtPm92ZXJsYXlfYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfb3ZlcmxheSgpIC0gb3ZlcmxheSBpcyBhbHJlYWR5IGFjdGl2ZSBmb3IgYW5vdGhlciBzZXNzaW9uXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQlpZiAoIW9uICYmIHpyLT5vdmVybGF5X2FjdGl2ZSAhPSBaT1JBTl9GUkVFICYmCi0JICAgIGZoLT5vdmVybGF5X2FjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX292ZXJsYXkoKSAtIHlvdSBjYW5ub3QgY2FuY2VsIHNvbWVvbmUgZWxzZSdzIHNlc3Npb25cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JaWYgKG9uID09IDApIHsKLQkJenItPm92ZXJsYXlfYWN0aXZlID0gZmgtPm92ZXJsYXlfYWN0aXZlID0gWk9SQU5fRlJFRTsKLQkJenItPnY0bF9vdmVybGF5X2FjdGl2ZSA9IDA7Ci0JCS8qIFdoZW4gYSBncmFiIGlzIHJ1bm5pbmcsIHRoZSB2aWRlbyBzaW1wbHkKLQkJICogd29uJ3QgYmUgc3dpdGNoZWQgb24gYW55IG1vcmUgKi8KLQkJaWYgKCF6ci0+djRsX21lbWdyYWJfYWN0aXZlKQotCQkJenIzNjA1N19vdmVybGF5KHpyLCAwKTsKLQkJenItPm92ZXJsYXlfbWFzayA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJaWYgKCF6ci0+YnVmZmVyLmJhc2UgfHwgIWZoLT5vdmVybGF5X3NldHRpbmdzLmlzX3NldCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBzZXR1cF9vdmVybGF5KCkgLSBidWZmZXIgb3Igd2luZG93IG5vdCBzZXRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKCFmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogc2V0dXBfb3ZlcmxheSgpIC0gbm8gb3ZlcmxheSBmb3JtYXQgc2V0XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXpyLT5vdmVybGF5X2FjdGl2ZSA9IGZoLT5vdmVybGF5X2FjdGl2ZSA9IFpPUkFOX0xPQ0tFRDsKLQkJenItPnY0bF9vdmVybGF5X2FjdGl2ZSA9IDE7Ci0JCXpyLT5vdmVybGF5X21hc2sgPSBmaC0+b3ZlcmxheV9tYXNrOwotCQl6ci0+b3ZlcmxheV9zZXR0aW5ncyA9IGZoLT5vdmVybGF5X3NldHRpbmdzOwotCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpCi0JCQl6cjM2MDU3X292ZXJsYXkoenIsIDEpOwotCQkvKiBXaGVuIGEgZ3JhYiBpcyBydW5uaW5nLCB0aGUgdmlkZW8gd2lsbCBiZQotCQkgKiBzd2l0Y2hlZCBvbiB3aGVuIGdyYWIgaXMgZmluaXNoZWQgKi8KLQl9Ci0KLQkvKiBNYWtlIHN1cmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLwotCXJldHVybiB3YWl0X2dyYWJfcGVuZGluZyh6cik7Ci19Ci0KLQkvKiBnZXQgdGhlIHN0YXR1cyBvZiBhIGJ1ZmZlciBpbiB0aGUgY2xpZW50cyBidWZmZXIgcXVldWUgKi8KLXN0YXRpYyBpbnQKLXpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyAoc3RydWN0IGZpbGUgICAgICAgICpmaWxlLAotCQkJICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiwKLQkJCSAgaW50ICAgICAgICAgICAgICAgICBudW0pCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCi0JYnVmLT5mbGFncyA9IFY0TDJfQlVGX0ZMQUdfTUFQUEVEOwotCi0Jc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKLQotCQkvKiBjaGVjayByYW5nZSAqLwotCQlpZiAobnVtIDwgMCB8fCBudW0gPj0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzIHx8Ci0JCSAgICAhZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiB2NGwyX2J1ZmZlcl9zdGF0dXMoKSAtIHdyb25nIG51bWJlciBvciBidWZmZXJzIG5vdCBhbGxvY2F0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlidWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCWJ1Zi0+bGVuZ3RoID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCi0JCS8qIGdldCBidWZmZXIgKi8KLQkJYnVmLT5ieXRlc3VzZWQgPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMubGVuZ3RoOwotCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9ET05FIHx8Ci0JCSAgICBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX1VTRVIpIHsKLQkJCWJ1Zi0+c2VxdWVuY2UgPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMuc2VxOwotCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7Ci0JCQlidWYtPnRpbWVzdGFtcCA9Ci0JCQkgICAgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnRpbWVzdGFtcDsKLQkJfSBlbHNlIHsKLQkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7Ci0JCX0KLQotCQlpZiAoZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgPD0gQlVaX01BWF9IRUlHSFQgLyAyKQotCQkJYnVmLT5maWVsZCA9IFY0TDJfRklFTERfVE9QOwotCQllbHNlCi0JCQlidWYtPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCi0JCWJyZWFrOwotCi0JY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6Ci0KLQkJLyogY2hlY2sgcmFuZ2UgKi8KLQkJaWYgKG51bSA8IDAgfHwgbnVtID49IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyB8fAotCQkgICAgIWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogdjRsMl9idWZmZXJfc3RhdHVzKCkgLSB3cm9uZyBudW1iZXIgb3IgYnVmZmVycyBub3QgYWxsb2NhdGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJYnVmLT50eXBlID0gKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDKSA/Ci0JCQkgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgOgotCQkJICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7Ci0JCWJ1Zi0+bGVuZ3RoID0gZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOwotCi0JCS8qIHRoZXNlIHZhcmlhYmxlcyBhcmUgb25seSB3cml0dGVuIGFmdGVyIGZyYW1lIGhhcyBiZWVuIGNhcHR1cmVkICovCi0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUgfHwKLQkJICAgIGZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgewotCQkJYnVmLT5zZXF1ZW5jZSA9IGZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5icy5zZXE7Ci0JCQlidWYtPnRpbWVzdGFtcCA9Ci0JCQkgICAgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnRpbWVzdGFtcDsKLQkJCWJ1Zi0+Ynl0ZXN1c2VkID0KLQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMubGVuZ3RoOwotCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7Ci0JCX0gZWxzZSB7Ci0JCQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOwotCQl9Ci0KLQkJLyogd2hpY2ggZmllbGRzIGFyZSB0aGVzZT8gKi8KLQkJaWYgKGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtICE9IDEpCi0JCQlidWYtPmZpZWxkID0KLQkJCSAgICBmaC0+anBnX3NldHRpbmdzLgotCQkJICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOiBWNEwyX0ZJRUxEX0JPVFRPTTsKLQkJZWxzZQotCQkJYnVmLT5maWVsZCA9Ci0JCQkgICAgZmgtPmpwZ19zZXR0aW5ncy4KLQkJCSAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfU0VRX1RCIDoKLQkJCSAgICBWNEwyX0ZJRUxEX1NFUV9CVDsKLQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0KLQkJZHByaW50ayg1LAotCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsMl9idWZmZXJfc3RhdHVzKCkgLSBpbnZhbGlkIGJ1ZmZlciB0eXBlfG1hcF9tb2RlICglZHwlZClcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlidWYtPm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7Ci0JYnVmLT5pbmRleCA9IG51bTsKLQlidWYtPm0ub2Zmc2V0ID0gYnVmLT5sZW5ndGggKiBudW07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotem9yYW5fc2V0X25vcm0gKHN0cnVjdCB6b3JhbiAqenIsCi0JCWludCAgICAgICAgICAgbm9ybSkgLyogVklERU9fTU9ERV8qICovCi17Ci0JaW50IG5vcm1fZW5jb2Rlciwgb247Ci0KLQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFIHx8Ci0JICAgIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX1dBUk5JTkcKLQkJCSIlczogc2V0X25vcm0oKSBjYWxsZWQgd2hpbGUgaW4gcGxheWJhY2svY2FwdHVyZSBtb2RlXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCWlmIChsb2NrX25vcm0gJiYgbm9ybSAhPSB6ci0+bm9ybSkgewotCQlpZiAobG9ja19ub3JtID4gMSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fV0FSTklORwotCQkJCSIlczogc2V0X25vcm0oKSAtIFRWIHN0YW5kYXJkIGlzIGxvY2tlZCwgY2FuIG5vdCBzd2l0Y2ggbm9ybVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXR1cm4gLUVQRVJNOwotCQl9IGVsc2UgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fV0FSTklORwotCQkJCSIlczogc2V0X25vcm0oKSAtIFRWIHN0YW5kYXJkIGlzIGxvY2tlZCwgbm9ybSB3YXMgbm90IGNoYW5nZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJbm9ybSA9IHpyLT5ub3JtOwotCQl9Ci0JfQotCi0JaWYgKG5vcm0gIT0gVklERU9fTU9ERV9BVVRPICYmCi0JICAgIChub3JtIDwgMCB8fCBub3JtID49IHpyLT5jYXJkLm5vcm1zIHx8Ci0JICAgICAhenItPmNhcmQudHZuW25vcm1dKSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUiAiJXM6IHNldF9ub3JtKCkgLSB1bnN1cHBvcnRlZCBub3JtICVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIG5vcm0pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAobm9ybSA9PSBWSURFT19NT0RFX0FVVE8pIHsKLQkJaW50IHN0YXR1czsKLQotCQkvKiBpZiB3ZSBoYXZlIGF1dG9kZXRlY3QsIC4uLiAqLwotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5IGNhcHM7Ci0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTLCAmY2Fwcyk7Ci0JCWlmICghKGNhcHMuZmxhZ3MgJiBWSURFT19ERUNPREVSX0FVVE8pKSB7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogbm9ybT1hdXRvIHVuc3VwcG9ydGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmbm9ybSk7Ci0KLQkJLyogbGV0IGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLwotCQlzc2xlZXAoMik7Ci0KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9TVEFUVVMsICZzdGF0dXMpOwotCQlpZiAoIShzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBzZXRfbm9ybSgpIC0gbm8gbm9ybSBkZXRlY3RlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkvKiByZXNldCBub3JtICovCi0JCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZ6ci0+bm9ybSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCWlmIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19OVFNDKQotCQkJbm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQkJZWxzZSBpZiAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfU0VDQU0pCi0JCQlub3JtID0gVklERU9fTU9ERV9TRUNBTTsKLQkJZWxzZQotCQkJbm9ybSA9IFZJREVPX01PREVfUEFMOwotCX0KLQl6ci0+dGltaW5nID0genItPmNhcmQudHZuW25vcm1dOwotCW5vcm1fZW5jb2RlciA9IG5vcm07Ci0KLQkvKiBXZSBzd2l0Y2ggb3ZlcmxheSBvZmYgYW5kIG9uIHNpbmNlIGEgY2hhbmdlIGluIHRoZQotCSAqIG5vcm0gbmVlZHMgZGlmZmVyZW50IFZGRSBzZXR0aW5ncyAqLwotCW9uID0genItPm92ZXJsYXlfYWN0aXZlICYmICF6ci0+djRsX21lbWdyYWJfYWN0aXZlOwotCWlmIChvbikKLQkJenIzNjA1N19vdmVybGF5KHpyLCAwKTsKLQotCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJm5vcm0pOwotCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfTk9STSwgJm5vcm1fZW5jb2Rlcik7Ci0KLQlpZiAob24pCi0JCXpyMzYwNTdfb3ZlcmxheSh6ciwgMSk7Ci0KLQkvKiBNYWtlIHN1cmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLwotCXpyLT5ub3JtID0gbm9ybTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci16b3Jhbl9zZXRfaW5wdXQgKHN0cnVjdCB6b3JhbiAqenIsCi0JCSBpbnQgICAgICAgICAgIGlucHV0KQotewotCWludCByZWFsaW5wdXQ7Ci0KLQlpZiAoaW5wdXQgPT0genItPmlucHV0KSB7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgfHwKLQkgICAgenItPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fV0FSTklORwotCQkJIiVzOiBzZXRfaW5wdXQoKSBjYWxsZWQgd2hpbGUgaW4gcGxheWJhY2svY2FwdHVyZSBtb2RlXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0genItPmNhcmQuaW5wdXRzKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldF9pbnB1dCgpIC0gdW5uc3VwcG9ydGVkIGlucHV0ICVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGlucHV0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmVhbGlucHV0ID0genItPmNhcmQuaW5wdXRbaW5wdXRdLm11eHNlbDsKLQl6ci0+aW5wdXQgPSBpbnB1dDsKLQotCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfSU5QVVQsICZyZWFsaW5wdXQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiAgIGlvY3RsIHJvdXRpbmUKLSAqLwotCi1zdGF0aWMgaW50Ci16b3Jhbl9kb19pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSwKLQkJc3RydWN0IGZpbGUgICpmaWxlLAotCQl1bnNpZ25lZCBpbnQgIGNtZCwKLQkJdm9pZCAgICAgICAgICphcmcpCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCS8qIENBUkVGVUw6IHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzIGhlcmUgKi8KLQlzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzIHNldHRpbmdzOwotCi0JLyogd2UgbWlnaHQgaGF2ZSBvbGRlciBidWZmZXJzIGx5aW5nIGFyb3VuZC4uLiBXZSBkb24ndCB3YW50Ci0JICogdG8gd2FpdCwgYnV0IHdlIGRvIHdhbnQgdG8gdHJ5IGNsZWFuaW5nIHRoZW0gdXAgQVNBUC4gU28KLQkgKiB3ZSB0cnkgdG8gb2J0YWluIHRoZSBsb2NrIGFuZCBmcmVlIHRoZW0uIElmIHRoYXQgZmFpbHMsIHdlCi0JICogZG9uJ3QgZG8gYW55dGhpbmcgYW5kIHdhaXQgZm9yIHRoZSBuZXh0IHR1cm4uIEluIHRoZSBlbmQsCi0JICogem9yYW5fY2xvc2UoKSBvciBhIG5ldyBhbGxvY2F0aW9uIHdpbGwgc3RpbGwgZnJlZSB0aGVtLi4uCi0JICogVGhpcyBpcyBqdXN0IGEgJ3RoZSBzb29uZXIgdGhlIGJldHRlcicgZXh0cmEgJ2ZlYXR1cmUnCi0JICoKLQkgKiBXZSBkb24ndCBmcmVlIHRoZSBidWZmZXJzIHJpZ2h0IG9uIG11bm1hcCgpIGJlY2F1c2UgdGhhdAotCSAqIGNhdXNlcyBvb3BzZXMgKGtmcmVlKCkgaW5zaWRlIG11bm1hcCgpIG9vcHNlcyBmb3Igbm8KLQkgKiBhcHBhcmVudCByZWFzb24gLSBpdCdzIGFsc28gbm90IHJlcHJvZHVjZWFibGUgaW4gYW55IHdheSwKLQkgKiBidXQgbW92aW5nIHRoZSBmcmVlIGNvZGUgb3V0c2lkZSB0aGUgbXVubWFwKCkgaGFuZGxlciBmaXhlcwotCSAqIGFsbCB0aGlzLi4uIElmIHNvbWVvbmUga25vd3Mgd2h5LCBwbGVhc2UgZXhwbGFpbiBtZSAoUm9uYWxkKQotCSAqLwotCWlmIChtdXRleF90cnlsb2NrKCZ6ci0+cmVzb3VyY2VfbG9jaykpIHsKLQkJLyogd2Ugb2J0YWluZWQgaXQhIExldCdzIHRyeSB0byBmcmVlIHNvbWUgdGhpbmdzICovCi0JCWlmIChmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpCi0JCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCQlpZiAoZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKQotCQkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQl9Ci0KLQlzd2l0Y2ggKGNtZCkgewotCi0JY2FzZSBWSURJT0NHQ0FQOgotCXsKLQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKnZjYXAgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR0NBUFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldCh2Y2FwLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkpKTsKLQkJc3RybmNweSh2Y2FwLT5uYW1lLCBaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKHZjYXAtPm5hbWUpLTEpOwotCQl2Y2FwLT50eXBlID0gWk9SQU5fVklEX1RZUEU7Ci0KLQkJdmNhcC0+Y2hhbm5lbHMgPSB6ci0+Y2FyZC5pbnB1dHM7Ci0JCXZjYXAtPmF1ZGlvcyA9IDA7Ci0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJdmNhcC0+bWF4d2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCQl2Y2FwLT5tYXhoZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKLQkJdmNhcC0+bWlud2lkdGggPSBCVVpfTUlOX1dJRFRIOwotCQl2Y2FwLT5taW5oZWlnaHQgPSBCVVpfTUlOX0hFSUdIVDsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DR0NIQU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdmNoYW4gPSBhcmc7Ci0JCWludCBjaGFubmVsID0gdmNoYW4tPmNoYW5uZWw7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR0NIQU4gLSBjaGFubmVsPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHZjaGFuLT5jaGFubmVsKTsKLQotCQltZW1zZXQodmNoYW4sIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2hhbm5lbCkpOwotCQlpZiAoY2hhbm5lbCA+IHpyLT5jYXJkLmlucHV0cyB8fCBjaGFubmVsIDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NHQ0hBTiBvbiBub3QgZXhpc3RpbmcgY2hhbm5lbCAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgY2hhbm5lbCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXN0cmNweSh2Y2hhbi0+bmFtZSwgenItPmNhcmQuaW5wdXRbY2hhbm5lbF0ubmFtZSk7Ci0KLQkJdmNoYW4tPnR1bmVycyA9IDA7Ci0JCXZjaGFuLT5mbGFncyA9IDA7Ci0JCXZjaGFuLT50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7Ci0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJdmNoYW4tPm5vcm0gPSB6ci0+bm9ybTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXZjaGFuLT5jaGFubmVsID0gY2hhbm5lbDsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JCS8qIFJKOiB0aGUgZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vcm9hZHJ1bm5lci5zd2Fuc2VhLmxpbnV4Lm9yZy51ay92NGxhcGkuc2h0bWwgc2F5czoKLQkJICoKLQkJICogKiAiVGhlIFZJRElPQ1NDSEFOIGlvY3RsIHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQgYW5kIHN3aXRjaGVzIHRoZSBjYXB0dXJlIHRvIHRoaXMgaW5wdXQuIgotCQkgKiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXgotCQkgKiAqIFRoZSBmYW1vcyBCVFRWIGRyaXZlciBoYXMgaXQgaW1wbGVtZW50ZWQgd2l0aCBhIHN0cnVjdCB2aWRlb19jaGFubmVsIGFyZ3VtZW50Ci0JCSAqICogYW5kIHdlIGZvbGxvdyBpdCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zCi0JCSAqICoKLQkJICogKiBCVFc6IHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRoZSB1c2VyIGNhbiBzZXQgdGhlIG5vcm0hCi0JCSAqLwotCi0JY2FzZSBWSURJT0NTQ0hBTjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19jaGFubmVsICp2Y2hhbiA9IGFyZzsKLQkJaW50IHJlczsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ1NDSEFOIC0gY2hhbm5lbD0lZCwgbm9ybT0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2Y2hhbi0+Y2hhbm5lbCwgdmNoYW4tPm5vcm0pOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJaWYgKChyZXMgPSB6b3Jhbl9zZXRfaW5wdXQoenIsIHZjaGFuLT5jaGFubmVsKSkpCi0JCQlnb3RvIHNjaGFuX3VubG9ja19hbmRfcmV0dXJuOwotCQlpZiAoKHJlcyA9IHpvcmFuX3NldF9ub3JtKHpyLCB2Y2hhbi0+bm9ybSkpKQotCQkJZ290byBzY2hhbl91bmxvY2tfYW5kX3JldHVybjsKLQotCQkvKiBNYWtlIHN1cmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLwotCQlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7Ci0Jc2NoYW5fdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dQSUNUOgotCXsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnZwaWN0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dQSUNUXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbWVtc2V0KHZwaWN0LCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3BpY3R1cmUpKTsKLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQl2cGljdC0+aHVlID0genItPmh1ZTsKLQkJdnBpY3QtPmJyaWdodG5lc3MgPSB6ci0+YnJpZ2h0bmVzczsKLQkJdnBpY3QtPmNvbnRyYXN0ID0genItPmNvbnRyYXN0OwotCQl2cGljdC0+Y29sb3VyID0genItPnNhdHVyYXRpb247Ci0JCWlmIChmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQpIHsKLQkJCXZwaWN0LT5kZXB0aCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+ZGVwdGg7Ci0JCQl2cGljdC0+cGFsZXR0ZSA9IGZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+cGFsZXR0ZTsKLQkJfSBlbHNlIHsKLQkJCXZwaWN0LT5kZXB0aCA9IDA7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DU1BJQ1Q6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqdnBpY3QgPSBhcmc7Ci0JCWludCBpOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DU1BJQ1QgLSBicmk9JWQsIGh1ZT0lZCwgY29sPSVkLCBjb249JWQsIGRlcD0lZCwgcGFsPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHZwaWN0LT5icmlnaHRuZXNzLCB2cGljdC0+aHVlLAotCQkJdnBpY3QtPmNvbG91ciwgdnBpY3QtPmNvbnRyYXN0LCB2cGljdC0+ZGVwdGgsCi0JCQl2cGljdC0+cGFsZXR0ZSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspIHsKLQkJCWNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgKmZtdCA9ICZ6b3Jhbl9mb3JtYXRzW2ldOwotCi0JCQlpZiAoZm10LT5wYWxldHRlICE9IC0xICYmCi0JCQkgICAgZm10LT5mbGFncyAmIFpPUkFOX0ZPUk1BVF9PVkVSTEFZICYmCi0JCQkgICAgZm10LT5wYWxldHRlID09IHZwaWN0LT5wYWxldHRlICYmCi0JCQkgICAgZm10LT5kZXB0aCA9PSB2cGljdC0+ZGVwdGgpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DU1BJQ1QgLSBJbnZhbGlkIHBhbGV0dGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIHZwaWN0LT5wYWxldHRlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfUElDVFVSRSwgdnBpY3QpOwotCi0JCXpyLT5odWUgPSB2cGljdC0+aHVlOwotCQl6ci0+Y29udHJhc3QgPSB2cGljdC0+Y29udHJhc3Q7Ci0JCXpyLT5zYXR1cmF0aW9uID0gdnBpY3QtPmNvbG91cjsKLQkJenItPmJyaWdodG5lc3MgPSB2cGljdC0+YnJpZ2h0bmVzczsKLQotCQlmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQgPSAmem9yYW5fZm9ybWF0c1tpXTsKLQotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NDQVBUVVJFOgotCXsKLQkJaW50ICpvbiA9IGFyZywgcmVzOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0NBUFRVUkUgLSBvbj0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAqb24pOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0gc2V0dXBfb3ZlcmxheShmaWxlLCAqb24pOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dXSU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2d2luID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dXSU5cbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltZW1zZXQodndpbiwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3cpKTsKLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQl2d2luLT54ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MueDsKLQkJdndpbi0+eSA9IGZoLT5vdmVybGF5X3NldHRpbmdzLnk7Ci0JCXZ3aW4tPndpZHRoID0gZmgtPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGg7Ci0JCXZ3aW4tPmhlaWdodCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodDsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXZ3aW4tPmNsaXBjb3VudCA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ1NXSU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2d2luID0gYXJnOwotCQlpbnQgcmVzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DU1dJTiAtIHg9JWQsIHk9JWQsIHc9JWQsIGg9JWQsIGNsaXBjb3VudD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2d2luLT54LCB2d2luLT55LCB2d2luLT53aWR0aCwKLQkJCXZ3aW4tPmhlaWdodCwgdndpbi0+Y2xpcGNvdW50KTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9Ci0JCSAgICBzZXR1cF93aW5kb3coZmlsZSwgdndpbi0+eCwgdndpbi0+eSwgdndpbi0+d2lkdGgsCi0JCQkJIHZ3aW4tPmhlaWdodCwgdndpbi0+Y2xpcHMsCi0JCQkJIHZ3aW4tPmNsaXBjb3VudCwgTlVMTCk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DR0ZCVUY6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyICp2YnVmID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dGQlVGXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkqdmJ1ZiA9IHpyLT5idWZmZXI7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NTRkJVRjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19idWZmZXIgKnZidWYgPSBhcmc7Ci0JCWludCBpLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DU0ZCVUYgLSBiYXNlPSVwLCB3PSVkLCBoPSVkLCBkZXB0aD0lZCwgYnBsPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHZidWYtPmJhc2UsIHZidWYtPndpZHRoLAotCQkJdmJ1Zi0+aGVpZ2h0LCB2YnVmLT5kZXB0aCwgdmJ1Zi0+Ynl0ZXNwZXJsaW5lKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKLQkJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmRlcHRoID09IHZidWYtPmRlcHRoKQotCQkJCWJyZWFrOwotCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NTRkJVRiAtIGludmFsaWQgZmJ1ZiBkZXB0aCAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgdmJ1Zi0+ZGVwdGgpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9Ci0JCSAgICBzZXR1cF9mYnVmZmVyKGZpbGUsIHZidWYtPmJhc2UsICZ6b3Jhbl9mb3JtYXRzW2ldLAotCQkJCSAgdmJ1Zi0+d2lkdGgsIHZidWYtPmhlaWdodCwKLQkJCQkgIHZidWYtPmJ5dGVzcGVybGluZSk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DU1lOQzoKLQl7Ci0JCWludCAqZnJhbWUgPSBhcmcsIHJlczsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NTWU5DIC0gZnJhbWU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKmZyYW1lKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IHY0bF9zeW5jKGZpbGUsICpmcmFtZSk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlpZiAoIXJlcykKLQkJCXpyLT52NGxfc3luY190YWlsKys7Ci0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DTUNBUFRVUkU6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fbW1hcCAqdm1hcCA9IGFyZzsKLQkJaW50IHJlczsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ01DQVBUVVJFIC0gZnJhbWU9JWQsIGdlb209JWR4JWQsIGZtdD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2bWFwLT5mcmFtZSwgdm1hcC0+d2lkdGgsIHZtYXAtPmhlaWdodCwKLQkJCXZtYXAtPmZvcm1hdCk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSB2NGxfZ3JhYihmaWxlLCB2bWFwKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DR01CVUY6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqdm1idWYgPSBhcmc7Ci0JCWludCBpLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dNQlVGXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJdm1idWYtPnNpemUgPQotCQkgICAgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzICoKLQkJICAgIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJdm1idWYtPmZyYW1lcyA9IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsKLQkJZm9yIChpID0gMDsgaSA8IHZtYnVmLT5mcmFtZXM7IGkrKykgewotCQkJdm1idWYtPm9mZnNldHNbaV0gPQotCQkJICAgIGkgKiBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgfHwgZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NHTUJVRiAtIGJ1ZmZlcnMgYWxyZWFkeSBhbGxvY2F0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCWlmICh2NGxfZmJ1ZmZlcl9hbGxvYyhmaWxlKSkgewotCQkJcmVzID0gLUVOT01FTTsKLQkJCWdvdG8gdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCS8qIFRoZSBuZXh0IG1tYXAgd2lsbCBtYXAgdGhlIFY0TCBidWZmZXJzICovCi0JCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKLQl2NGwxcmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dVTklUOgotCXsKLQkJc3RydWN0IHZpZGVvX3VuaXQgKnZ1bml0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dVTklUXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJdnVuaXQtPnZpZGVvID0genItPnZpZGVvX2Rldi0+bWlub3I7Ci0JCXZ1bml0LT52YmkgPSBWSURFT19OT19VTklUOwotCQl2dW5pdC0+cmFkaW8gPSBWSURFT19OT19VTklUOwotCQl2dW5pdC0+YXVkaW8gPSBWSURFT19OT19VTklUOwotCQl2dW5pdC0+dGVsZXRleHQgPSBWSURFT19OT19VTklUOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQkJLyoKLQkJICogUko6IEluIHByaW5jaXBhbCB3ZSBjb3VsZCBzdXBwb3J0IHN1YmNhcHR1cmVzIGZvciBWNEwgZ3JhYmJpbmcuCi0JCSAqICAgICBOb3QgZXZlbiB0aGUgZmFtb3VzIEJUVFYgZHJpdmVyIGhhcyB0aGVtLCBob3dldmVyLgotCQkgKiAgICAgSWYgdGhlcmUgc2hvdWxkIGJlIGEgc3Ryb25nIGRlbWFuZCwgb25lIGNvdWxkIGNvbnNpZGVyCi0JCSAqICAgICB0byBpbXBsZW1lbnQgdGhlbS4KLQkJICovCi0JY2FzZSBWSURJT0NHQ0FQVFVSRToKLQl7Ci0JCWRwcmludGsoMywgS0VSTl9FUlIgIiVzOiBWSURJT0NHQ0FQVFVSRSBub3Qgc3VwcG9ydGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NTQ0FQVFVSRToKLQl7Ci0JCWRwcmludGsoMywgS0VSTl9FUlIgIiVzOiBWSURJT0NTQ0FQVFVSRSBub3Qgc3VwcG9ydGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBCVVpJT0NfR19QQVJBTVM6Ci0JewotCQlzdHJ1Y3Qgem9yYW5fcGFyYW1zICpicGFyYW1zID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19HX1BBUkFNU1xuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChicGFyYW1zLCAwLCBzaXplb2Yoc3RydWN0IHpvcmFuX3BhcmFtcykpOwotCQlicGFyYW1zLT5tYWpvcl92ZXJzaW9uID0gTUFKT1JfVkVSU0lPTjsKLQkJYnBhcmFtcy0+bWlub3JfdmVyc2lvbiA9IE1JTk9SX1ZFUlNJT047Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWJwYXJhbXMtPm5vcm0gPSB6ci0+bm9ybTsKLQkJYnBhcmFtcy0+aW5wdXQgPSB6ci0+aW5wdXQ7Ci0KLQkJYnBhcmFtcy0+ZGVjaW1hdGlvbiA9IGZoLT5qcGdfc2V0dGluZ3MuZGVjaW1hdGlvbjsKLQkJYnBhcmFtcy0+SG9yRGNtID0gZmgtPmpwZ19zZXR0aW5ncy5Ib3JEY207Ci0JCWJwYXJhbXMtPlZlckRjbSA9IGZoLT5qcGdfc2V0dGluZ3MuVmVyRGNtOwotCQlicGFyYW1zLT5UbXBEY20gPSBmaC0+anBnX3NldHRpbmdzLlRtcERjbTsKLQkJYnBhcmFtcy0+ZmllbGRfcGVyX2J1ZmYgPSBmaC0+anBnX3NldHRpbmdzLmZpZWxkX3Blcl9idWZmOwotCQlicGFyYW1zLT5pbWdfeCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3g7Ci0JCWJwYXJhbXMtPmltZ195ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfeTsKLQkJYnBhcmFtcy0+aW1nX3dpZHRoID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGg7Ci0JCWJwYXJhbXMtPmltZ19oZWlnaHQgPSBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQ7Ci0JCWJwYXJhbXMtPm9kZF9ldmVuID0gZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbjsKLQotCQlicGFyYW1zLT5xdWFsaXR5ID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5xdWFsaXR5OwotCQlicGFyYW1zLT5BUFBuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBuOwotCQlicGFyYW1zLT5BUFBfbGVuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfbGVuOwotCQltZW1jcHkoYnBhcmFtcy0+QVBQX2RhdGEsCi0JCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9kYXRhLAotCQkgICAgICAgc2l6ZW9mKGJwYXJhbXMtPkFQUF9kYXRhKSk7Ci0JCWJwYXJhbXMtPkNPTV9sZW4gPSB6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9sZW47Ci0JCW1lbWNweShicGFyYW1zLT5DT01fZGF0YSwKLQkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2RhdGEsCi0JCSAgICAgICBzaXplb2YoYnBhcmFtcy0+Q09NX2RhdGEpKTsKLQkJYnBhcmFtcy0+anBlZ19tYXJrZXJzID0KLQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuanBlZ19tYXJrZXJzOwotCi0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWJwYXJhbXMtPlZGSUZPX0ZCID0gMDsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBCVVpJT0NfU19QQVJBTVM6Ci0JewotCQlzdHJ1Y3Qgem9yYW5fcGFyYW1zICpicGFyYW1zID0gYXJnOwotCQlpbnQgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBCVVpJT0NfU19QQVJBTVNcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQlzZXR0aW5ncy5kZWNpbWF0aW9uID0gYnBhcmFtcy0+ZGVjaW1hdGlvbjsKLQkJc2V0dGluZ3MuSG9yRGNtID0gYnBhcmFtcy0+SG9yRGNtOwotCQlzZXR0aW5ncy5WZXJEY20gPSBicGFyYW1zLT5WZXJEY207Ci0JCXNldHRpbmdzLlRtcERjbSA9IGJwYXJhbXMtPlRtcERjbTsKLQkJc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPSBicGFyYW1zLT5maWVsZF9wZXJfYnVmZjsKLQkJc2V0dGluZ3MuaW1nX3ggPSBicGFyYW1zLT5pbWdfeDsKLQkJc2V0dGluZ3MuaW1nX3kgPSBicGFyYW1zLT5pbWdfeTsKLQkJc2V0dGluZ3MuaW1nX3dpZHRoID0gYnBhcmFtcy0+aW1nX3dpZHRoOwotCQlzZXR0aW5ncy5pbWdfaGVpZ2h0ID0gYnBhcmFtcy0+aW1nX2hlaWdodDsKLQkJc2V0dGluZ3Mub2RkX2V2ZW4gPSBicGFyYW1zLT5vZGRfZXZlbjsKLQotCQlzZXR0aW5ncy5qcGdfY29tcC5xdWFsaXR5ID0gYnBhcmFtcy0+cXVhbGl0eTsKLQkJc2V0dGluZ3MuanBnX2NvbXAuQVBQbiA9IGJwYXJhbXMtPkFQUG47Ci0JCXNldHRpbmdzLmpwZ19jb21wLkFQUF9sZW4gPSBicGFyYW1zLT5BUFBfbGVuOwotCQltZW1jcHkoc2V0dGluZ3MuanBnX2NvbXAuQVBQX2RhdGEsIGJwYXJhbXMtPkFQUF9kYXRhLAotCQkgICAgICAgc2l6ZW9mKGJwYXJhbXMtPkFQUF9kYXRhKSk7Ci0JCXNldHRpbmdzLmpwZ19jb21wLkNPTV9sZW4gPSBicGFyYW1zLT5DT01fbGVuOwotCQltZW1jcHkoc2V0dGluZ3MuanBnX2NvbXAuQ09NX2RhdGEsIGJwYXJhbXMtPkNPTV9kYXRhLAotCQkgICAgICAgc2l6ZW9mKGJwYXJhbXMtPkNPTV9kYXRhKSk7Ci0JCXNldHRpbmdzLmpwZ19jb21wLmpwZWdfbWFya2VycyA9IGJwYXJhbXMtPmpwZWdfbWFya2VyczsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX0lETEUpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogQlVaSU9DX1NfUEFSQU1TIGNhbGxlZCwgYnV0IEJ1eiBpbiBjYXB0dXJlL3BsYXliYWNrIG1vZGVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gc3BhcmFtc191bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCS8qIENoZWNrIHRoZSBwYXJhbXMgZmlyc3QgYmVmb3JlIG92ZXJ3cml0aW5nIG91cgotCQkgKiBudGVybmFsIHZhbHVlcyAqLwotCQlpZiAoem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmc2V0dGluZ3MpKSB7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBzcGFyYW1zX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJZmgtPmpwZ19zZXR0aW5ncyA9IHNldHRpbmdzOwotCXNwYXJhbXNfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgQlVaSU9DX1JFUUJVRlM6Ci0JewotCQlzdHJ1Y3Qgem9yYW5fcmVxdWVzdGJ1ZmZlcnMgKmJyZXEgPSBhcmc7Ci0JCWludCByZXMgPSAwOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogQlVaSU9DX1JFUUJVRlMgLSBjb3VudD0lbHUsIHNpemU9JWx1XG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGJyZXEtPmNvdW50LCBicmVxLT5zaXplKTsKLQotCQkvKiBFbmZvcmNlIHJlYXNvbmFibGUgbG93ZXIgYW5kIHVwcGVyIGxpbWl0cyAqLwotCQlpZiAoYnJlcS0+Y291bnQgPCA0KQotCQkJYnJlcS0+Y291bnQgPSA0OwkvKiBDb3VsZCBiZSBjaG9vc2VuIHNtYWxsZXIgKi8KLQkJaWYgKGJyZXEtPmNvdW50ID4ganBnX25idWZzKQotCQkJYnJlcS0+Y291bnQgPSBqcGdfbmJ1ZnM7Ci0JCWJyZXEtPnNpemUgPSBQQUdFX0FMSUdOKGJyZXEtPnNpemUpOwotCQlpZiAoYnJlcS0+c2l6ZSA8IDgxOTIpCi0JCQlicmVxLT5zaXplID0gODE5MjsJLyogQXJiaXRyYXJ5ICovCi0JCS8qIGJyZXEtPnNpemUgaXMgbGltaXRlZCBieSAxIHBhZ2UgZm9yIHRoZSBzdGF0X2NvbQotCQkgKiB0YWJsZXMgdG8gYSBNYXhpbXVtIG9mIDIgTUIgKi8KLQkJaWYgKGJyZXEtPnNpemUgPiBqcGdfYnVmc2l6ZSkKLQkJCWJyZXEtPnNpemUgPSBqcGdfYnVmc2l6ZTsKLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXMgJiYKLQkJICAgIGJyZXEtPnNpemUgPiBNQVhfS01BTExPQ19NRU0pCi0JCQlicmVxLT5zaXplID0gTUFYX0tNQUxMT0NfTUVNOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fCBmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IEJVWklPQ19SRVFCVUZTIC0gYnVmZmVycyBhbGxyZWFkeSBhbGxvY2F0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVCVVNZOwotCQkJZ290byBqcGdyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSBicmVxLT5jb3VudDsKLQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0gYnJlcS0+c2l6ZTsKLQotCQlpZiAoanBnX2ZidWZmZXJfYWxsb2MoZmlsZSkpIHsKLQkJCXJlcyA9IC1FTk9NRU07Ci0JCQlnb3RvIGpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCS8qIFRoZSBuZXh0IG1tYXAgd2lsbCBtYXAgdGhlIE1KUEVHIGJ1ZmZlcnMgLSBjb3VsZAotCQkgKiBhbHNvIGJlICpfUExBWSwgYnV0IGl0IGRvZXNuJ3QgbWF0dGVyIGhlcmUgKi8KLQkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfSlBHX1JFQzsKLQlqcGdyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgQlVaSU9DX1FCVUZfQ0FQVDoKLQl7Ci0JCWludCAqZnJhbWUgPSBhcmcsIHJlczsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBCVVpJT0NfUUJVRl9DQVBUIC0gZnJhbWU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKmZyYW1lKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IGpwZ19xYnVmKGZpbGUsICpmcmFtZSwgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBCVVpJT0NfUUJVRl9QTEFZOgotCXsKLQkJaW50ICpmcmFtZSA9IGFyZywgcmVzOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19RQlVGX1BMQVkgLSBmcmFtZT0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAqZnJhbWUpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0ganBnX3FidWYoZmlsZSwgKmZyYW1lLCBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgQlVaSU9DX1NZTkM6Ci0JewotCQlzdHJ1Y3Qgem9yYW5fc3luYyAqYnN5bmMgPSBhcmc7Ci0JCWludCByZXM7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogQlVaSU9DX1NZTkNcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IGpwZ19zeW5jKGZpbGUsIGJzeW5jKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBCVVpJT0NfR19TVEFUVVM6Ci0JewotCQlzdHJ1Y3Qgem9yYW5fc3RhdHVzICpic3RhdCA9IGFyZzsKLQkJaW50IG5vcm0sIGlucHV0LCBzdGF0dXMsIHJlcyA9IDA7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogQlVaSU9DX0dfU1RBVFVTXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJaWYgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX0lETEUpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogQlVaSU9DX0dfU1RBVFVTIGNhbGxlZCBidXQgQnV6IGluIGNhcHR1cmUvcGxheWJhY2sgbW9kZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlucHV0ID0genItPmNhcmQuaW5wdXRbYnN0YXQtPmlucHV0XS5tdXhzZWw7Ci0JCW5vcm0gPSBWSURFT19NT0RFX0FVVE87Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmICh6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9JRExFKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IEJVWklPQ19HX1NUQVRVUyBjYWxsZWQsIGJ1dCBCdXogaW4gY2FwdHVyZS9wbGF5YmFjayBtb2RlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGdzdGF0X3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9JTlBVVCwgJmlucHV0KTsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmbm9ybSk7Ci0KLQkJLyogc2xlZXAgMSBzZWNvbmQgKi8KLQkJc3NsZWVwKDEpOwotCi0JCS8qIEdldCBzdGF0dXMgb2YgdmlkZW8gZGVjb2RlciAqLwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0KLQkJLyogcmVzdG9yZSBwcmV2aW91cyBpbnB1dCBhbmQgbm9ybSAqLwotCQlpbnB1dCA9IHpyLT5jYXJkLmlucHV0W3pyLT5pbnB1dF0ubXV4c2VsOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmaW5wdXQpOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZ6ci0+bm9ybSk7Ci0JZ3N0YXRfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmICghcmVzKSB7Ci0JCQlic3RhdC0+c2lnbmFsID0KLQkJCSAgICAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfR09PRCkgPyAxIDogMDsKLQkJCWlmIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19OVFNDKQotCQkJCWJzdGF0LT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwotCQkJZWxzZSBpZiAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfU0VDQU0pCi0JCQkJYnN0YXQtPm5vcm0gPSBWSURFT19NT0RFX1NFQ0FNOwotCQkJZWxzZQotCQkJCWJzdGF0LT5ub3JtID0gVklERU9fTU9ERV9QQUw7Ci0KLQkJCWJzdGF0LT5jb2xvciA9Ci0JCQkgICAgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0NPTE9SKSA/IDEgOiAwOwotCQl9Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JCS8qIFRoZSBuZXcgdmlkZW80bGludXgyIGNhcHR1cmUgaW50ZXJmYWNlIC0gbXVjaCBuaWNlciB0aGFuIHZpZGVvNGxpbnV4MSwgc2luY2UKLQkJICogaXQgYWxsb3dzIGZvciBpbnRlZ3JhdGluZyB0aGUgSlBFRyBjYXB0dXJpbmcgY2FsbHMgaW5zaWRlIHN0YW5kYXJkIHY0bDIKLQkJICovCi0KLQljYXNlIFZJRElPQ19RVUVSWUNBUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfUVVFUllDQVBcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOwotCQlzdHJuY3B5KGNhcC0+Y2FyZCwgWlJfREVWTkFNRSh6ciksIHNpemVvZihjYXAtPmNhcmQpLTEpOwotCQlzdHJuY3B5KGNhcC0+ZHJpdmVyLCAiem9yYW4iLCBzaXplb2YoY2FwLT5kcml2ZXIpLTEpOwotCQlzbnByaW50ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLAotCQkJIHBjaV9uYW1lKHpyLT5wY2lfZGV2KSk7Ci0JCWNhcC0+dmVyc2lvbiA9Ci0JCSAgICBLRVJORUxfVkVSU0lPTihNQUpPUl9WRVJTSU9OLCBNSU5PUl9WRVJTSU9OLAotCQkJCSAgIFJFTEVBU0VfVkVSU0lPTik7Ci0JCWNhcC0+Y2FwYWJpbGl0aWVzID0gWk9SQU5fVjRMMl9WSURfRkxBR1M7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0VOVU1fRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ID0gYXJnOwotCQlpbnQgaW5kZXggPSBmbXQtPmluZGV4LCBudW0gPSAtMSwgaSwgZmxhZyA9IDAsIHR5cGUgPQotCQkgICAgZm10LT50eXBlOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNX0ZNVCAtIGluZGV4PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+aW5kZXgpOwotCi0JCXN3aXRjaCAoZm10LT50eXBlKSB7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQkJZmxhZyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0JCQlmbGFnID0gWk9SQU5fRk9STUFUX1BMQVlCQUNLOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCQkJZmxhZyA9IFpPUkFOX0ZPUk1BVF9PVkVSTEFZOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19FTlVNX0ZNVCAtIHVua25vd24gdHlwZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspIHsKLQkJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZsYWdzICYgZmxhZykKLQkJCQludW0rKzsKLQkJCWlmIChudW0gPT0gZm10LT5pbmRleCkKLQkJCQlicmVhazsKLQkJfQotCQlpZiAoZm10LT5pbmRleCA8IDAgLyogbGF0ZSwgYnV0IG5vdCB0b28gbGF0ZSAqLyAgfHwKLQkJICAgIGkgPT0gTlVNX0ZPUk1BVFMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQltZW1zZXQoZm10LCAwLCBzaXplb2YoKmZtdCkpOwotCQlmbXQtPmluZGV4ID0gaW5kZXg7Ci0JCWZtdC0+dHlwZSA9IHR5cGU7Ci0JCXN0cm5jcHkoZm10LT5kZXNjcmlwdGlvbiwgem9yYW5fZm9ybWF0c1tpXS5uYW1lLCBzaXplb2YoZm10LT5kZXNjcmlwdGlvbiktMSk7Ci0JCWZtdC0+cGl4ZWxmb3JtYXQgPSB6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYzsKLQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBaT1JBTl9GT1JNQVRfQ09NUFJFU1NFRCkKLQkJCWZtdC0+ZmxhZ3MgfD0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOwotCQlpbnQgdHlwZSA9IGZtdC0+dHlwZTsKLQotCQlkcHJpbnRrKDUsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19GTVRcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltZW1zZXQoZm10LCAwLCBzaXplb2YoKmZtdCkpOwotCQlmbXQtPnR5cGUgPSB0eXBlOwotCi0JCXN3aXRjaCAoZm10LT50eXBlKSB7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCi0JCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWZtdC0+Zm10Lndpbi53LmxlZnQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy54OwotCQkJZm10LT5mbXQud2luLncudG9wID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MueTsKLQkJCWZtdC0+Zm10Lndpbi53LndpZHRoID0gZmgtPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGg7Ci0JCQlmbXQtPmZtdC53aW4udy5oZWlnaHQgPQotCQkJICAgIGZoLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodDsKLQkJCWlmIChmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCAqIDIgPgotCQkJICAgIEJVWl9NQVhfSEVJR0hUKQotCQkJCWZtdC0+Zm10Lndpbi5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJCWVsc2UKLQkJCQlmbXQtPmZtdC53aW4uZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKLQotCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOgotCi0JCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWlmIChmbXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICYmCi0JCQkgICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykgewotCi0JCQkJZm10LT5mbXQucGl4LndpZHRoID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy53aWR0aDsKLQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQ7Ci0JCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9Ci0JCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lICoKLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQ7Ci0JCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmZvdXJjYzsKLQkJCQlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9Ci0JCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuZm9ybWF0LT5jb2xvcnNwYWNlOwotCQkJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPQotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKLQkJCQlpZiAoQlVaX01BWF9IRUlHSFQgPAotCQkJCSAgICAoZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgKiAyKSkKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJCQllbHNlCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICBWNEwyX0ZJRUxEX1RPUDsKLQotCQkJfSBlbHNlIHsKLQotCQkJCWZtdC0+Zm10LnBpeC53aWR0aCA9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5Ib3JEY207Ci0JCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvCi0JCQkJICAgIChmaC0+anBnX3NldHRpbmdzLlZlckRjbSAqCi0JCQkJICAgICBmaC0+anBnX3NldHRpbmdzLlRtcERjbSk7Ci0JCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9Ci0JCQkJICAgIHpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZmaC0+Ci0JCQkJCQkJICAgIGpwZ19zZXR0aW5ncyk7Ci0JCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0KLQkJCQkgICAgVjRMMl9QSVhfRk1UX01KUEVHOwotCQkJCWlmIChmaC0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9CVCA6Ci0JCQkJCSAgICAgVjRMMl9GSUVMRF9TRVFfQlQpOwotCQkJCWVsc2UKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOgotCQkJCQkgICAgIFY0TDJfRklFTERfQk9UVE9NKTsKLQotCQkJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwotCQkJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0KLQkJCQkgICAgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKLQkJCX0KLQotCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19HX0ZNVCAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9IGFyZzsKLQkJaW50IGksIHJlcyA9IDA7Ci0JCV9fbGUzMiBwcmludGZvcm1hdDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19GTVQgLSB0eXBlPSVkLCAiLAotCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7Ci0KLQkJc3dpdGNoIChmbXQtPnR5cGUpIHsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0KLQkJCWRwcmludGsoMywgIng9JWQsIHk9JWQsIHc9JWQsIGg9JWQsIGNudD0lZCwgbWFwPTB4JXBcbiIsCi0JCQkJZm10LT5mbXQud2luLncubGVmdCwgZm10LT5mbXQud2luLncudG9wLAotCQkJCWZtdC0+Zm10Lndpbi53LndpZHRoLAotCQkJCWZtdC0+Zm10Lndpbi53LmhlaWdodCwKLQkJCQlmbXQtPmZtdC53aW4uY2xpcGNvdW50LAotCQkJCWZtdC0+Zm10Lndpbi5iaXRtYXApOwotCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJcmVzID0KLQkJCSAgICBzZXR1cF93aW5kb3coZmlsZSwgZm10LT5mbXQud2luLncubGVmdCwKLQkJCQkJIGZtdC0+Zm10Lndpbi53LnRvcCwKLQkJCQkJIGZtdC0+Zm10Lndpbi53LndpZHRoLAotCQkJCQkgZm10LT5mbXQud2luLncuaGVpZ2h0LAotCQkJCQkgKHN0cnVjdCB2aWRlb19jbGlwIF9fdXNlciAqKQotCQkJCQkgICBmbXQtPmZtdC53aW4uY2xpcHMsCi0JCQkJCSBmbXQtPmZtdC53aW4uY2xpcGNvdW50LAotCQkJCQkgZm10LT5mbXQud2luLmJpdG1hcCk7Ci0JCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJCXJldHVybiByZXM7Ci0JCQlicmVhazsKLQotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLQotCQkJcHJpbnRmb3JtYXQgPQotCQkJICAgIF9fY3B1X3RvX2xlMzIoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKLQkJCWRwcmludGsoMywgInNpemU9JWR4JWQsIGZtdD0weCV4ICglNC40cylcbiIsCi0JCQkJZm10LT5mbXQucGl4LndpZHRoLCBmbXQtPmZtdC5waXguaGVpZ2h0LAotCQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCwKLQkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOwotCi0JCQkvKiB3ZSBjYW4gYmUgcmVxdWVzdGVkIHRvIGRvIEpQRUcvcmF3IHBsYXliYWNrL2NhcHR1cmUgKi8KLQkJCWlmICghCi0JCQkgICAgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKLQkJCSAgICAgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgotCQkJICAgICAgZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09Ci0JCQkgICAgICBWNEwyX1BJWF9GTVRfTUpQRUcpKSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfU19GTVQgLSB1bmtub3duIHR5cGUgJWQvMHgleCglNC40cykgY29tYmluYXRpb25cbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUsCi0JCQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCwKLQkJCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTUpQRUcpIHsKLQkJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCQlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7Ci0KLQkJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCB8fAotCQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQkJCWRwcmludGsoMSwKLQkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIGNhbm5vdCBjaGFuZ2UgY2FwdHVyZSBtb2RlXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCQlyZXMgPSAtRUJVU1k7Ci0JCQkJCWdvdG8gc2ZtdGpwZ191bmxvY2tfYW5kX3JldHVybjsKLQkJCQl9Ci0KLQkJCQkvKiB3ZSBhY3R1YWxseSBuZWVkIHRvIHNldCAncmVhbCcgcGFyYW1ldGVycyBub3cgKi8KLQkJCQlpZiAoKGZtdC0+Zm10LnBpeC5oZWlnaHQgKiAyKSA+Ci0JCQkJICAgIEJVWl9NQVhfSEVJR0hUKQotCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAxOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuVG1wRGNtID0gMjsKLQkJCQlzZXR0aW5ncy5kZWNpbWF0aW9uID0gMDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8PQotCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgLyAyKQotCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAyOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuVmVyRGNtID0gMTsKLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoIDw9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gNCkKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gNDsKLQkJCQllbHNlIGlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KLQkJCQkJIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gMikKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMjsKLQkJCQllbHNlCi0JCQkJCXNldHRpbmdzLkhvckRjbSA9IDE7Ci0JCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IDI7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IDE7Ci0KLQkJCQkvKiBjaGVjayAqLwotCQkJCWlmICgocmVzID0KLQkJCQkgICAgIHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwKLQkJCQkJCQkgICAgICAmc2V0dGluZ3MpKSkKLQkJCQkJZ290byBzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOwotCi0JCQkJLyogaXQncyBvaywgc28gc2V0IHRoZW0gKi8KLQkJCQlmaC0+anBnX3NldHRpbmdzID0gc2V0dGluZ3M7Ci0KLQkJCQkvKiB0ZWxsIHRoZSB1c2VyIHdoYXQgd2UgYWN0dWFsbHkgZGlkICovCi0JCQkJZm10LT5mbXQucGl4LndpZHRoID0KLQkJCQkgICAgc2V0dGluZ3MuaW1nX3dpZHRoIC8gc2V0dGluZ3MuSG9yRGNtOwotCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCSAgICBzZXR0aW5ncy5pbWdfaGVpZ2h0ICogMiAvCi0JCQkJICAgIChzZXR0aW5ncy5UbXBEY20gKiBzZXR0aW5ncy5WZXJEY20pOwotCQkJCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9TRVFfVEIgOgotCQkJCQkgICAgIFY0TDJfRklFTERfU0VRX0JUKTsKLQkJCQllbHNlCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy4KLQkJCQkJICAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfVE9QIDoKLQkJCQkJICAgICBWNEwyX0ZJRUxEX0JPVFRPTSk7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0KLQkJCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT4KLQkJCQkJCQkgICAganBnX3NldHRpbmdzKTsKLQkJCQlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKLQkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkgICAgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOwotCi0JCQkJLyogd2UgaGVyZWJ5IGFidXNlIHRoaXMgdmFyaWFibGUgdG8gc2hvdyB0aGF0Ci0JCQkJICogd2UncmUgZ29ubmEgZG8gbWpwZWcgY2FwdHVyZSAqLwotCQkJCWZoLT5tYXBfbW9kZSA9Ci0JCQkJICAgIChmbXQtPnR5cGUgPT0KLQkJCQkgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgPwotCQkJCSAgICBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDIDoKLQkJCQkgICAgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk7Ci0JCQlzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOgotCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJfSBlbHNlIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKLQkJCQkJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PQotCQkJCQkgICAgem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MpCi0JCQkJCQlicmVhazsKLQkJCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgewotCQkJCQlkcHJpbnRrKDEsCi0JCQkJCQlLRVJOX0VSUgotCQkJCQkJIiVzOiBWSURJT0NfU19GTVQgLSB1bmtub3duL3Vuc3VwcG9ydGVkIGZvcm1hdCAweCV4ICglNC40cylcbiIsCi0JCQkJCQlaUl9ERVZOQU1FKHpyKSwKLQkJCQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCwKLQkJCQkJCShjaGFyICopICZwcmludGZvcm1hdCk7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgfHwKLQkJCQkgICAgKGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgJiYKLQkJCQkgICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0KLQkJCQkgICAgIFpPUkFOX0ZSRUUpKSB7Ci0JCQkJCWRwcmludGsoMSwKLQkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIGNhbm5vdCBjaGFuZ2UgY2FwdHVyZSBtb2RlXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCQlyZXMgPSAtRUJVU1k7Ci0JCQkJCWdvdG8gc2ZtdHY0bF91bmxvY2tfYW5kX3JldHVybjsKLQkJCQl9Ci0JCQkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKLQkJCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJCSAgICBCVVpfTUFYX0hFSUdIVDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoID4gQlVaX01BWF9XSURUSCkKLQkJCQkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01BWF9XSURUSDsKLQotCQkJCWlmICgocmVzID0KLQkJCQkgICAgIHpvcmFuX3Y0bF9zZXRfZm9ybWF0KGZpbGUsCi0JCQkJCQkJICBmbXQtPmZtdC5waXguCi0JCQkJCQkJICB3aWR0aCwKLQkJCQkJCQkgIGZtdC0+Zm10LnBpeC4KLQkJCQkJCQkgIGhlaWdodCwKLQkJCQkJCQkgICZ6b3Jhbl9mb3JtYXRzCi0JCQkJCQkJICBbaV0pKSkKLQkJCQkJZ290byBzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOwotCi0JCQkJLyogdGVsbCB0aGUgdXNlciB0aGUKLQkJCQkgKiByZXN1bHRzL21pc3Npbmcgc3R1ZmYgKi8KLQkJCQlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0KLQkJCQkJZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmU7Ci0JCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9Ci0JCQkJCWZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0ICoKLQkJCQkJZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmU7Ci0JCQkJaWYgKEJVWl9NQVhfSEVJR0hUIDwKLQkJCQkgICAgKGZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0ICogMikpCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCQkJZWxzZQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgVjRMMl9GSUVMRF9UT1A7Ci0KLQkJCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9SQVc7Ci0JCQlzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOgotCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJfQotCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJZHByaW50aygzLCAidW5zdXBwb3J0ZWRcbiIpOwotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfU19GTVQgLSB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0ZCVUY6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfRkJVRlxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChmYiwgMCwgc2l6ZW9mKCpmYikpOwotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWZiLT5iYXNlID0genItPmJ1ZmZlci5iYXNlOwotCQlmYi0+Zm10LndpZHRoID0genItPmJ1ZmZlci53aWR0aDsKLQkJZmItPmZtdC5oZWlnaHQgPSB6ci0+YnVmZmVyLmhlaWdodDsKLQkJaWYgKHpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCkgewotCQkJZmItPmZtdC5waXhlbGZvcm1hdCA9Ci0JCQkJZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5mb3VyY2M7Ci0JCX0KLQkJZmItPmZtdC5ieXRlc3BlcmxpbmUgPSB6ci0+YnVmZmVyLmJ5dGVzcGVybGluZTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWZiLT5mbXQuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOwotCQlmYi0+Zm10LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQlmYi0+ZmxhZ3MgPSBWNEwyX0ZCVUZfRkxBR19PVkVSTEFZOwotCQlmYi0+Y2FwYWJpbGl0eSA9IFY0TDJfRkJVRl9DQVBfTElTVF9DTElQUElORzsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19GQlVGOgotCXsKLQkJaW50IGksIHJlcyA9IDA7Ci0JCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYiA9IGFyZzsKLQkJX19sZTMyIHByaW50Zm9ybWF0ID0gX19jcHVfdG9fbGUzMihmYi0+Zm10LnBpeGVsZm9ybWF0KTsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ19TX0ZCVUYgLSBiYXNlPTB4JXAsIHNpemU9JWR4JWQsIGJwbD0lZCwgZm10PTB4JXggKCU0LjRzKVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBmYi0+YmFzZSwgZmItPmZtdC53aWR0aCwgZmItPmZtdC5oZWlnaHQsCi0JCQlmYi0+Zm10LmJ5dGVzcGVybGluZSwgZmItPmZtdC5waXhlbGZvcm1hdCwKLQkJCShjaGFyICopICZwcmludGZvcm1hdCk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCi0JCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MgPT0gZmItPmZtdC5waXhlbGZvcm1hdCkKLQkJCQlicmVhazsKLQkJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NfRkJVRiAtIGZvcm1hdD0weCV4ICglNC40cykgbm90IGFsbG93ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZiLT5mbXQucGl4ZWxmb3JtYXQsCi0JCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPQotCQkgICAgc2V0dXBfZmJ1ZmZlcihmaWxlLCBmYi0+YmFzZSwgJnpvcmFuX2Zvcm1hdHNbaV0sCi0JCQkJICBmYi0+Zm10LndpZHRoLCBmYi0+Zm10LmhlaWdodCwKLQkJCQkgIGZiLT5mbXQuYnl0ZXNwZXJsaW5lKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfT1ZFUkxBWToKLQl7Ci0JCWludCAqb24gPSBhcmcsIHJlczsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfUFJFVklFVyAtIG9uPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICpvbik7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSBzZXR1cF9vdmVybGF5KGZpbGUsICpvbik7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1JFUUJVRlM6Ci0JewotCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxID0gYXJnOwotCQlpbnQgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfUkVRQlVGUyAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgcmVxLT50eXBlKTsKLQotCQlpZiAocmVxLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBvbmx5IE1FTU9SWV9NTUFQIGNhcHR1cmUgaXMgc3VwcG9ydGVkLCBub3QgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIHJlcS0+bWVtb3J5KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1JFUUJVRlMgLSBidWZmZXJzIGFsbHJlYWR5IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUJVU1k7Ci0JCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVyAmJgotCQkgICAgcmVxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewotCi0JCQkvKiBjb250cm9sIHVzZXIgaW5wdXQgKi8KLQkJCWlmIChyZXEtPmNvdW50IDwgMikKLQkJCQlyZXEtPmNvdW50ID0gMjsKLQkJCWlmIChyZXEtPmNvdW50ID4gdjRsX25idWZzKQotCQkJCXJlcS0+Y291bnQgPSB2NGxfbmJ1ZnM7Ci0JCQlmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSByZXEtPmNvdW50OwotCi0JCQlpZiAodjRsX2ZidWZmZXJfYWxsb2MoZmlsZSkpIHsKLQkJCQlyZXMgPSAtRU5PTUVNOwotCQkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgVjRMIGJ1ZmZlcnMgKi8KLQkJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKLQotCQl9IGVsc2UgaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDIHx8Ci0JCQkgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkpIHsKLQotCQkJLyogd2UgbmVlZCB0byBjYWxjdWxhdGUgc2l6ZSBvdXJzZWx2ZXMgbm93ICovCi0JCQlpZiAocmVxLT5jb3VudCA8IDQpCi0JCQkJcmVxLT5jb3VudCA9IDQ7Ci0JCQlpZiAocmVxLT5jb3VudCA+IGpwZ19uYnVmcykKLQkJCQlyZXEtPmNvdW50ID0ganBnX25idWZzOwotCQkJZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzID0gcmVxLT5jb3VudDsKLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSA9Ci0JCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT5qcGdfc2V0dGluZ3MpOwotCi0JCQlpZiAoanBnX2ZidWZmZXJfYWxsb2MoZmlsZSkpIHsKLQkJCQlyZXMgPSAtRU5PTUVNOwotCQkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgTUpQRUcgYnVmZmVycyAqLwotCQkJaWYgKHJlcS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCQkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfSlBHX1JFQzsKLQkJCWVsc2UKLQkJCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWTsKLQotCQl9IGVsc2UgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfUkVRQlVGUyAtIHVua25vd24gdHlwZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgcmVxLT50eXBlKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQl2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUVVFUllCVUY6Ci0JewotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKLQkJX191MzIgdHlwZSA9IGJ1Zi0+dHlwZTsKLQkJaW50IGluZGV4ID0gYnVmLT5pbmRleCwgcmVzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DX1FVRVJZQlVGIC0gaW5kZXg9JWQsIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT5pbmRleCwgYnVmLT50eXBlKTsKLQotCQltZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOwotCQlidWYtPnR5cGUgPSB0eXBlOwotCQlidWYtPmluZGV4ID0gaW5kZXg7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSB6b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMoZmlsZSwgYnVmLCBidWYtPmluZGV4KTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUUJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwotCQlpbnQgcmVzID0gMCwgY29kZWNfbW9kZSwgYnVmX3R5cGU7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RQlVGIC0gdHlwZT0lZCwgaW5kZXg9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBidWYtPmluZGV4KTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0JCQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKLQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJcmVzID0gem9yYW5fdjRsX3F1ZXVlX2ZyYW1lKGZpbGUsIGJ1Zi0+aW5kZXgpOwotCQkJaWYgKHJlcykKLQkJCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgJiYKLQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0xPQ0tFRCkKLQkJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQkJCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkpIHsKLQkJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOwotCQkJCWNvZGVjX21vZGUgPSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzsKLQkJCX0gZWxzZSB7Ci0JCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCQkJY29kZWNfbW9kZSA9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzsKLQkJCX0KLQotCQkJaWYgKGJ1Zi0+dHlwZSAhPSBidWZfdHlwZSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKLQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJcmVzID0KLQkJCSAgICB6b3Jhbl9qcGdfcXVldWVfZnJhbWUoZmlsZSwgYnVmLT5pbmRleCwKLQkJCQkJCSAgY29kZWNfbW9kZSk7Ci0JCQlpZiAocmVzICE9IDApCi0JCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX0lETEUgJiYKLQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0xPQ0tFRCkgewotCQkJCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgY29kZWNfbW9kZSk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfUUJVRiAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0JcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfRFFCVUY6Ci0JewotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKLQkJaW50IHJlcyA9IDAsIGJ1Zl90eXBlLCBudW0gPSAtMTsJLyogY29tcGlsZXIgYm9ya3MgaGVyZSAoPykgKi8KLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfRFFCVUYgLSB0eXBlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7Ci0JCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgotCQkJaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogVklESU9DX1FCVUYgLSBpbnZhbGlkIGJ1Zi0+dHlwZT0lZCBmb3IgbWFwX21vZGU9JWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7Ci0JCQkJcmVzID0gLUVJTlZBTDsKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQludW0gPSB6ci0+djRsX3BlbmRbenItPnY0bF9zeW5jX3RhaWwgJiBWNExfTUFTS19GUkFNRV07Ci0JCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0sgJiYKLQkJCSAgICB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgIT0KLQkJCSAgICBCVVpfU1RBVEVfRE9ORSkgewotCQkJCXJlcyA9IC1FQUdBSU47Ci0JCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQkJCXJlcyA9IHY0bF9zeW5jKGZpbGUsIG51bSk7Ci0JCQlpZiAocmVzKQotCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQllbHNlCi0JCQkJenItPnY0bF9zeW5jX3RhaWwrKzsKLQkJCXJlcyA9IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhmaWxlLCBidWYsIG51bSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6Ci0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6Ci0JCXsKLQkJCXN0cnVjdCB6b3Jhbl9zeW5jIGJzOwotCi0JCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZKQotCQkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7Ci0JCQllbHNlCi0JCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0KLQkJCWlmIChidWYtPnR5cGUgIT0gYnVmX3R5cGUpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogVklESU9DX1FCVUYgLSBpbnZhbGlkIGJ1Zi0+dHlwZT0lZCBmb3IgbWFwX21vZGU9JWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7Ci0JCQkJcmVzID0gLUVJTlZBTDsKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQludW0gPQotCQkJICAgIHpyLT5qcGdfcGVuZFt6ci0+Ci0JCQkJCSBqcGdfcXVlX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07Ci0KLQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyAmJgotCQkJICAgIHpyLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSAhPQotCQkJICAgIEJVWl9TVEFURV9ET05FKSB7Ci0JCQkJcmVzID0gLUVBR0FJTjsKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQkJcmVzID0ganBnX3N5bmMoZmlsZSwgJmJzKTsKLQkJCWlmIChyZXMpCi0JCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCXJlcyA9Ci0JCQkgICAgem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZpbGUsIGJ1ZiwgYnMuZnJhbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfRFFCVUYgLSB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQlkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU1RSRUFNT046Ci0JewotCQlpbnQgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU1RSRUFNT05cbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CS8qIHJhdyBjYXB0dXJlICovCi0JCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUgfHwKLQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSkgewotCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQlnb3RvIHN0cm1vbl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPQotCQkJICAgIFpPUkFOX0xPQ0tFRDsKLQkJCXpyLT52NGxfc2V0dGluZ3MgPSBmaC0+djRsX3NldHRpbmdzOwotCi0JCQl6ci0+djRsX3N5bmNfdGFpbCA9IHpyLT52NGxfcGVuZF90YWlsOwotCQkJaWYgKCF6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmCi0JCQkgICAgenItPnY0bF9wZW5kX2hlYWQgIT0genItPnY0bF9wZW5kX3RhaWwpIHsKLQkJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQkJCS8qIHdoYXQgaXMgdGhlIGNvZGVjIG1vZGUgcmlnaHQgbm93PyAqLwotCQkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fQUNUSVZFIHx8Ci0JCQkgICAgZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUpIHsKLQkJCQlyZXMgPSAtRUJVU1k7Ci0JCQkJZ290byBzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0KLQkJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0KLQkJCSAgICBaT1JBTl9MT0NLRUQ7Ci0KLQkJCWlmICh6ci0+anBnX3F1ZV9oZWFkICE9IHpyLT5qcGdfcXVlX3RhaWwpIHsKLQkJCQkvKiBTdGFydCB0aGUganBlZyBjb2RlYyB3aGVuIHRoZSBmaXJzdCBmcmFtZSBpcyBxdWV1ZWQgICovCi0JCQkJanBlZ19zdGFydCh6cik7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfU1RSRUFNT04gLSBpbnZhbGlkIG1hcCBtb2RlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0Jc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TVFJFQU1PRkY6Ci0JewotCQlpbnQgaSwgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU1RSRUFNT0ZGXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7Ci0JCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgkvKiByYXcgY2FwdHVyZSAqLwotCQkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSAmJgotCQkJICAgIHpyLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQkJCXJlcyA9IC1FUEVSTTsJLyogc3RheSBvZmYgb3RoZXIncyBzZXR0aW5ncyEgKi8KLQkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQotCQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKLQotCQkJLyogdW5sb2FkIGNhcHR1cmUgKi8KLQkJCWlmICh6ci0+djRsX21lbWdyYWJfYWN0aXZlKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJCX0KLQotCQkJZm9yIChpID0gMDsgaSA8IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKQotCQkJCXpyLT52NGxfYnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPQotCQkJCSAgICBCVVpfU1RBVEVfVVNFUjsKLQkJCWZoLT52NGxfYnVmZmVycyA9IHpyLT52NGxfYnVmZmVyczsKLQotCQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPQotCQkJICAgIFpPUkFOX0ZSRUU7Ci0KLQkJCXpyLT52NGxfZ3JhYl9zZXEgPSAwOwotCQkJenItPnY0bF9wZW5kX2hlYWQgPSB6ci0+djRsX3BlbmRfdGFpbCA9IDA7Ci0JCQl6ci0+djRsX3N5bmNfdGFpbCA9IDA7Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUgJiYKLQkJCSAgICB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJCQlyZXMgPSAtRVBFUk07CS8qIHN0YXkgb2ZmIG90aGVyJ3Mgc2V0dGluZ3MhICovCi0JCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkKLQkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJCXJlcyA9Ci0JCQkgICAganBnX3FidWYoZmlsZSwgLTEsCi0JCQkJICAgICAoZmgtPm1hcF9tb2RlID09Ci0JCQkJICAgICAgWk9SQU5fTUFQX01PREVfSlBHX1JFQykgPwotCQkJCSAgICAgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTIDoKLQkJCQkgICAgIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKTsKLQkJCWlmIChyZXMpCi0JCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TVFJFQU1PRkYgLSBpbnZhbGlkIG1hcCBtb2RlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCXN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfUVVFUllDVFJMIC0gaWQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3RybC0+aWQpOwotCi0JCS8qIHdlIG9ubHkgc3VwcG9ydCBodWUvc2F0dXJhdGlvbi9jb250cmFzdC9icmlnaHRuZXNzICovCi0JCWlmIChjdHJsLT5pZCA8IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwKLQkJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWVsc2UgewotCQkJaW50IGlkID0gY3RybC0+aWQ7Ci0JCQltZW1zZXQoY3RybCwgMCwgc2l6ZW9mKCpjdHJsKSk7Ci0JCQljdHJsLT5pZCA9IGlkOwotCQl9Ci0KLQkJc3dpdGNoIChjdHJsLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJCcmlnaHRuZXNzIiwgc2l6ZW9mKGN0cmwtPm5hbWUpLTEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJDb250cmFzdCIsIHNpemVvZihjdHJsLT5uYW1lKS0xKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJTYXR1cmF0aW9uIiwgc2l6ZW9mKGN0cmwtPm5hbWUpLTEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfSFVFOgotCQkJc3RybmNweShjdHJsLT5uYW1lLCAiSHVlIiwgc2l6ZW9mKGN0cmwtPm5hbWUpLTEpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljdHJsLT5taW5pbXVtID0gMDsKLQkJY3RybC0+bWF4aW11bSA9IDY1NTM1OwotCQljdHJsLT5zdGVwID0gMTsKLQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDMyNzY4OwotCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19DVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19DVFJMIC0gaWQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3RybC0+aWQpOwotCi0JCS8qIHdlIG9ubHkgc3VwcG9ydCBodWUvc2F0dXJhdGlvbi9jb250cmFzdC9icmlnaHRuZXNzICovCi0JCWlmIChjdHJsLT5pZCA8IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwKLQkJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJCWN0cmwtPnZhbHVlID0genItPmJyaWdodG5lc3M7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJCWN0cmwtPnZhbHVlID0genItPmNvbnRyYXN0OwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJCWN0cmwtPnZhbHVlID0genItPnNhdHVyYXRpb247Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCQljdHJsLT52YWx1ZSA9IHpyLT5odWU7Ci0JCQlicmVhazsKLQkJfQotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgcGljdDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19DVFJMIC0gaWQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3RybC0+aWQpOwotCi0JCS8qIHdlIG9ubHkgc3VwcG9ydCBodWUvc2F0dXJhdGlvbi9jb250cmFzdC9icmlnaHRuZXNzICovCi0JCWlmIChjdHJsLT5pZCA8IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwKLQkJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDY1NTM1KSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TX0NUUkwgLSBpbnZhbGlkIHZhbHVlICVkIGZvciBpZD0lZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgY3RybC0+dmFsdWUsIGN0cmwtPmlkKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJCXpyLT5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJCXpyLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJCXpyLT5zYXR1cmF0aW9uID0gY3RybC0+dmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCQl6ci0+aHVlID0gY3RybC0+dmFsdWU7Ci0JCQlicmVhazsKLQkJfQotCQlwaWN0LmJyaWdodG5lc3MgPSB6ci0+YnJpZ2h0bmVzczsKLQkJcGljdC5jb250cmFzdCA9IHpyLT5jb250cmFzdDsKLQkJcGljdC5jb2xvdXIgPSB6ci0+c2F0dXJhdGlvbjsKLQkJcGljdC5odWUgPSB6ci0+aHVlOwotCi0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfUElDVFVSRSwgJnBpY3QpOwotCi0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19FTlVNU1REOgotCXsKLQkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKnN0ZCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfRU5VTVNURCAtIGluZGV4PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHN0ZC0+aW5kZXgpOwotCi0JCWlmIChzdGQtPmluZGV4IDwgMCB8fCBzdGQtPmluZGV4ID49ICh6ci0+Y2FyZC5ub3JtcyArIDEpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWVsc2UgewotCQkJaW50IGlkID0gc3RkLT5pbmRleDsKLQkJCW1lbXNldChzdGQsIDAsIHNpemVvZigqc3RkKSk7Ci0JCQlzdGQtPmluZGV4ID0gaWQ7Ci0JCX0KLQotCQlpZiAoc3RkLT5pbmRleCA9PSB6ci0+Y2FyZC5ub3JtcykgewotCQkJLyogaWYgd2UgaGF2ZSBhdXRvZGV0ZWN0LCAuLi4gKi8KLQkJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgY2FwczsKLQkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTLAotCQkJCQkmY2Fwcyk7Ci0JCQlpZiAoY2Fwcy5mbGFncyAmIFZJREVPX0RFQ09ERVJfQVVUTykgewotCQkJCXN0ZC0+aWQgPSBWNEwyX1NURF9BTEw7Ci0JCQkJc3RybmNweShzdGQtPm5hbWUsICJBdXRvZGV0ZWN0Iiwgc2l6ZW9mKHN0ZC0+bmFtZSktMSk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9IGVsc2UKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlzd2l0Y2ggKHN0ZC0+aW5kZXgpIHsKLQkJY2FzZSAwOgotCQkJc3RkLT5pZCA9IFY0TDJfU1REX1BBTDsKLQkJCXN0cm5jcHkoc3RkLT5uYW1lLCAiUEFMIiwgc2l6ZW9mKHN0ZC0+bmFtZSktMSk7Ci0JCQlzdGQtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDE7Ci0JCQlzdGQtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0gMjU7Ci0JCQlzdGQtPmZyYW1lbGluZXMgPSB6ci0+Y2FyZC50dm5bMF0tPkh0OwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXN0ZC0+aWQgPSBWNEwyX1NURF9OVFNDOwotCQkJc3RybmNweShzdGQtPm5hbWUsICJOVFNDIiwgc2l6ZW9mKHN0ZC0+bmFtZSktMSk7Ci0JCQlzdGQtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDEwMDE7Ci0JCQlzdGQtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0gMzAwMDA7Ci0JCQlzdGQtPmZyYW1lbGluZXMgPSB6ci0+Y2FyZC50dm5bMV0tPkh0OwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXN0ZC0+aWQgPSBWNEwyX1NURF9TRUNBTTsKLQkJCXN0cm5jcHkoc3RkLT5uYW1lLCAiU0VDQU0iLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAyNTsKLQkJCXN0ZC0+ZnJhbWVsaW5lcyA9IHpyLT5jYXJkLnR2blsyXS0+SHQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX1NURDoKLQl7Ci0JCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7Ci0JCWludCBub3JtOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX1NURFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJbm9ybSA9IHpyLT5ub3JtOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlzd2l0Y2ggKG5vcm0pIHsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCSpzdGQgPSBWNEwyX1NURF9QQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQkqc3RkID0gVjRMMl9TVERfTlRTQzsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQkqc3RkID0gVjRMMl9TVERfU0VDQU07Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX1NURDoKLQl7Ci0JCWludCBub3JtID0gLTEsIHJlcyA9IDA7Ci0JCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NfU1REIC0gbm9ybT0weCVsbHhcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykqc3RkKTsKLQotCQlpZiAoKCpzdGQgJiBWNEwyX1NURF9QQUwpICYmICEoKnN0ZCAmIH5WNEwyX1NURF9QQUwpKQotCQkJbm9ybSA9IFZJREVPX01PREVfUEFMOwotCQllbHNlIGlmICgoKnN0ZCAmIFY0TDJfU1REX05UU0MpICYmICEoKnN0ZCAmIH5WNEwyX1NURF9OVFNDKSkKLQkJCW5vcm0gPSBWSURFT19NT0RFX05UU0M7Ci0JCWVsc2UgaWYgKCgqc3RkICYgVjRMMl9TVERfU0VDQU0pICYmICEoKnN0ZCAmIH5WNEwyX1NURF9TRUNBTSkpCi0JCQlub3JtID0gVklERU9fTU9ERV9TRUNBTTsKLQkJZWxzZSBpZiAoKnN0ZCA9PSBWNEwyX1NURF9BTEwpCi0JCQlub3JtID0gVklERU9fTU9ERV9BVVRPOwotCQllbHNlIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NfU1REIC0gaW52YWxpZCBub3JtIDB4JWxseFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykqc3RkKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlpZiAoKHJlcyA9IHpvcmFuX3NldF9ub3JtKHpyLCBub3JtKSkpCi0JCQlnb3RvIHNzdGRfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJcmVzID0gd2FpdF9ncmFiX3BlbmRpbmcoenIpOwotCXNzdGRfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19FTlVNSU5QVVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wID0gYXJnOwotCQlpbnQgc3RhdHVzOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNSU5QVVQgLSBpbmRleD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBpbnAtPmluZGV4KTsKLQotCQlpZiAoaW5wLT5pbmRleCA8IDAgfHwgaW5wLT5pbmRleCA+PSB6ci0+Y2FyZC5pbnB1dHMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZWxzZSB7Ci0JCQlpbnQgaWQgPSBpbnAtPmluZGV4OwotCQkJbWVtc2V0KGlucCwgMCwgc2l6ZW9mKCppbnApKTsKLQkJCWlucC0+aW5kZXggPSBpZDsKLQkJfQotCi0JCXN0cm5jcHkoaW5wLT5uYW1lLCB6ci0+Y2FyZC5pbnB1dFtpbnAtPmluZGV4XS5uYW1lLAotCQkJc2l6ZW9mKGlucC0+bmFtZSkgLSAxKTsKLQkJaW5wLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKLQkJaW5wLT5zdGQgPSBWNEwyX1NURF9BTEw7Ci0KLQkJLyogR2V0IHN0YXR1cyBvZiB2aWRlbyBkZWNvZGVyICovCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9TVEFUVVMsICZzdGF0dXMpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoIShzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSkgewotCQkJaW5wLT5zdGF0dXMgfD0gVjRMMl9JTl9TVF9OT19QT1dFUjsKLQkJCWlucC0+c3RhdHVzIHw9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOwotCQl9Ci0JCWlmICghKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0NPTE9SKSkKLQkJCWlucC0+c3RhdHVzIHw9IFY0TDJfSU5fU1RfTk9fQ09MT1I7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JewotCQlpbnQgKmlucHV0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0lOUFVUXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkqaW5wdXQgPSB6ci0+aW5wdXQ7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0lOUFVUOgotCXsKLQkJaW50ICppbnB1dCA9IGFyZywgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19JTlBVVCAtIGlucHV0PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICppbnB1dCk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlpZiAoKHJlcyA9IHpvcmFuX3NldF9pbnB1dCh6ciwgKmlucHV0KSkpCi0JCQlnb3RvIHNpbnB1dF91bmxvY2tfYW5kX3JldHVybjsKLQotCQkvKiBNYWtlIHN1cmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLwotCQlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7Ci0Jc2lucHV0X3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfRU5VTU9VVFBVVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX291dHB1dCAqb3V0cCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfRU5VTU9VVFBVVCAtIGluZGV4PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIG91dHAtPmluZGV4KTsKLQotCQlpZiAob3V0cC0+aW5kZXggIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1lbXNldChvdXRwLCAwLCBzaXplb2YoKm91dHApKTsKLQkJb3V0cC0+aW5kZXggPSAwOwotCQlvdXRwLT50eXBlID0gVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0dWR0FPVkVSTEFZOwotCQlzdHJuY3B5KG91dHAtPm5hbWUsICJBdXRvZGV0ZWN0Iiwgc2l6ZW9mKG91dHAtPm5hbWUpLTEpOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX09VVFBVVDoKLQl7Ci0JCWludCAqb3V0cHV0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX09VVFBVVFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCSpvdXRwdXQgPSAwOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX09VVFBVVDoKLQl7Ci0JCWludCAqb3V0cHV0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX09VVFBVVCAtIG91dHB1dD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAqb3V0cHV0KTsKLQotCQlpZiAoKm91dHB1dCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCQkvKiBjcm9wcGluZyAoc3ViLWZyYW1lIGNhcHR1cmUpICovCi0JY2FzZSBWSURJT0NfQ1JPUENBUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3BjYXAgPSBhcmc7Ci0JCWludCB0eXBlID0gY3JvcGNhcC0+dHlwZSwgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fRVJSICIlczogVklESU9DX0NST1BDQVAgLSB0eXBlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGNyb3BjYXAtPnR5cGUpOwotCi0JCW1lbXNldChjcm9wY2FwLCAwLCBzaXplb2YoKmNyb3BjYXApKTsKLQkJY3JvcGNhcC0+dHlwZSA9IHR5cGU7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChjcm9wY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCi0JCSAgICAoY3JvcGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKLQkJICAgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfQ1JPUENBUCAtIHN1YmNhcHR1cmUgb25seSBzdXBwb3J0ZWQgZm9yIGNvbXByZXNzZWQgY2FwdHVyZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBjcm9wY2FwX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJY3JvcGNhcC0+Ym91bmRzLnRvcCA9IGNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKLQkJY3JvcGNhcC0+Ym91bmRzLndpZHRoID0gQlVaX01BWF9XSURUSDsKLQkJY3JvcGNhcC0+Ym91bmRzLmhlaWdodCA9IEJVWl9NQVhfSEVJR0hUOwotCQljcm9wY2FwLT5kZWZyZWN0LnRvcCA9IGNyb3BjYXAtPmRlZnJlY3QubGVmdCA9IDA7Ci0JCWNyb3BjYXAtPmRlZnJlY3Qud2lkdGggPSBCVVpfTUlOX1dJRFRIOwotCQljcm9wY2FwLT5kZWZyZWN0LmhlaWdodCA9IEJVWl9NSU5fSEVJR0hUOwotCWNyb3BjYXBfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NST1A6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wID0gYXJnOwotCQlpbnQgdHlwZSA9IGNyb3AtPnR5cGUsIHJlcyA9IDA7Ci0KLQkJZHByaW50aygzLCBLRVJOX0VSUiAiJXM6IFZJRElPQ19HX0NST1AgLSB0eXBlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGNyb3AtPnR5cGUpOwotCi0JCW1lbXNldChjcm9wLCAwLCBzaXplb2YoKmNyb3ApKTsKLQkJY3JvcC0+dHlwZSA9IHR5cGU7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCi0JCSAgICAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKLQkJICAgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfR19DUk9QIC0gc3ViY2FwdHVyZSBvbmx5IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBjYXB0dXJlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGdjcm9wX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJY3JvcC0+Yy50b3AgPSBmaC0+anBnX3NldHRpbmdzLmltZ195OwotCQljcm9wLT5jLmxlZnQgPSBmaC0+anBnX3NldHRpbmdzLmltZ194OwotCQljcm9wLT5jLndpZHRoID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGg7Ci0JCWNyb3AtPmMuaGVpZ2h0ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0OwotCi0JZ2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfQ1JPUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AgPSBhcmc7Ci0JCWludCByZXMgPSAwOwotCi0JCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBWSURJT0NfU19DUk9QIC0gdHlwZT0lZCwgeD0lZCx5PSVkLHc9JWQsaD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBjcm9wLT50eXBlLCBjcm9wLT5jLmxlZnQsIGNyb3AtPmMudG9wLAotCQkJY3JvcC0+Yy53aWR0aCwgY3JvcC0+Yy5oZWlnaHQpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fCBmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TX0NST1AgLSBjYW5ub3QgY2hhbmdlIHNldHRpbmdzIHdoaWxlIGFjdGl2ZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUJVU1k7Ci0JCQlnb3RvIHNjcm9wX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKLQkJICAgIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCQkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19HX0NST1AgLSBzdWJjYXB0dXJlIG9ubHkgc3VwcG9ydGVkIGZvciBjb21wcmVzc2VkIGNhcHR1cmVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQkvKiBtb3ZlIGludG8gYSBmb3JtIHRoYXQgd2UgdW5kZXJzdGFuZCAqLwotCQlzZXR0aW5ncy5pbWdfeCA9IGNyb3AtPmMubGVmdDsKLQkJc2V0dGluZ3MuaW1nX3kgPSBjcm9wLT5jLnRvcDsKLQkJc2V0dGluZ3MuaW1nX3dpZHRoID0gY3JvcC0+Yy53aWR0aDsKLQkJc2V0dGluZ3MuaW1nX2hlaWdodCA9IGNyb3AtPmMuaGVpZ2h0OwotCi0JCS8qIGNoZWNrIHZhbGlkaXR5ICovCi0JCWlmICgocmVzID0gem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmc2V0dGluZ3MpKSkKLQkJCWdvdG8gc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJLyogYWNjZXB0ICovCi0JCWZoLT5qcGdfc2V0dGluZ3MgPSBzZXR0aW5nczsKLQotCXNjcm9wX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19KUEVHQ09NUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcGFyYW1zID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0pQRUdDT01QXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChwYXJhbXMsIDAsIHNpemVvZigqcGFyYW1zKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXBhcmFtcy0+cXVhbGl0eSA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAucXVhbGl0eTsKLQkJcGFyYW1zLT5BUFBuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBuOwotCQltZW1jcHkocGFyYW1zLT5BUFBfZGF0YSwKLQkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2RhdGEsCi0JCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW4pOwotCQlwYXJhbXMtPkFQUF9sZW4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW47Ci0JCW1lbWNweShwYXJhbXMtPkNPTV9kYXRhLAotCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSwKLQkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbik7Ci0JCXBhcmFtcy0+Q09NX2xlbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbjsKLQkJcGFyYW1zLT5qcGVnX21hcmtlcnMgPQotCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5qcGVnX21hcmtlcnM7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfSlBFR0NPTVA6Ci0JewotCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKnBhcmFtcyA9IGFyZzsKLQkJaW50IHJlcyA9IDA7Ci0KLQkJc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DX1NfSlBFR0NPTVAgLSBxdWFsaXR5PSVkLCBBUFBOPSVkLCBBUFBfbGVuPSVkLCBDT01fbGVuPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHBhcmFtcy0+cXVhbGl0eSwgcGFyYW1zLT5BUFBuLAotCQkJcGFyYW1zLT5BUFBfbGVuLCBwYXJhbXMtPkNPTV9sZW4pOwotCi0JCXNldHRpbmdzLmpwZ19jb21wID0gKnBhcmFtczsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSB8fAotCQkgICAgZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBWSURJT0NfU19KUEVHQ09NUCBjYWxsZWQgd2hpbGUgaW4gcGxheWJhY2svY2FwdHVyZSBtb2RlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FQlVTWTsKLQkJCWdvdG8gc2pwZWdjX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJaWYgKChyZXMgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncykpKQotCQkJZ290byBzanBlZ2NfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCWlmICghZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkKLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSA9Ci0JCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT5qcGdfc2V0dGluZ3MpOwotCQlmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wID0gKnBhcmFtcyA9IHNldHRpbmdzLmpwZ19jb21wOwotCXNqcGVnY191bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1FVRVJZU1REOgkvKiB3aHkgaXMgdGhpcyB1c2VmdWw/ICovCi0JewotCQl2NGwyX3N0ZF9pZCAqc3RkID0gYXJnOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcgIiVzOiBWSURJT0NfUVVFUllfU1REIC0gc3RkPTB4JWxseFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAodW5zaWduZWQgbG9uZyBsb25nKSpzdGQpOwotCi0JCWlmICgqc3RkID09IFY0TDJfU1REX0FMTCB8fCAqc3RkID09IFY0TDJfU1REX05UU0MgfHwKLQkJICAgICpzdGQgPT0gVjRMMl9TVERfUEFMIHx8ICgqc3RkID09IFY0TDJfU1REX1NFQ0FNICYmCi0JCQkJCSAgICAgenItPmNhcmQubm9ybXMgPT0gMykpIHsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1RSWV9GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9IGFyZzsKLQkJaW50IHJlcyA9IDA7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1RSWV9GTVQgLSB0eXBlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7Ci0KLQkJc3dpdGNoIChmbXQtPnR5cGUpIHsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWlmIChmbXQtPmZtdC53aW4udy53aWR0aCA+IEJVWl9NQVhfV0lEVEgpCi0JCQkJZm10LT5mbXQud2luLncud2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCQkJaWYgKGZtdC0+Zm10Lndpbi53LndpZHRoIDwgQlVaX01JTl9XSURUSCkKLQkJCQlmbXQtPmZtdC53aW4udy53aWR0aCA9IEJVWl9NSU5fV0lEVEg7Ci0JCQlpZiAoZm10LT5mbXQud2luLncuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCi0JCQkJZm10LT5mbXQud2luLncuaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7Ci0JCQlpZiAoZm10LT5mbXQud2luLncuaGVpZ2h0IDwgQlVaX01JTl9IRUlHSFQpCi0JCQkJZm10LT5mbXQud2luLncuaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7Ci0KLQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0JCQlpZiAoZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA+IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTUpQRUcpIHsKLQkJCQlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7Ci0KLQkJCQkvKiB3ZSBhY3R1YWxseSBuZWVkIHRvIHNldCAncmVhbCcgcGFyYW1ldGVycyBub3cgKi8KLQkJCQlpZiAoKGZtdC0+Zm10LnBpeC5oZWlnaHQgKiAyKSA+Ci0JCQkJICAgIEJVWl9NQVhfSEVJR0hUKQotCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAxOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuVG1wRGNtID0gMjsKLQkJCQlzZXR0aW5ncy5kZWNpbWF0aW9uID0gMDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8PQotCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgLyAyKQotCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAyOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuVmVyRGNtID0gMTsKLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoIDw9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gNCkKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gNDsKLQkJCQllbHNlIGlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KLQkJCQkJIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gMikKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMjsKLQkJCQllbHNlCi0JCQkJCXNldHRpbmdzLkhvckRjbSA9IDE7Ci0JCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IDI7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IDE7Ci0KLQkJCQkvKiBjaGVjayAqLwotCQkJCWlmICgocmVzID0KLQkJCQkgICAgIHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwKLQkJCQkJCQkgICAgICAmc2V0dGluZ3MpKSkKLQkJCQkJZ290byB0cnlmbXRfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJCQkvKiB0ZWxsIHRoZSB1c2VyIHdoYXQgd2UgYWN0dWFsbHkgZGlkICovCi0JCQkJZm10LT5mbXQucGl4LndpZHRoID0KLQkJCQkgICAgc2V0dGluZ3MuaW1nX3dpZHRoIC8gc2V0dGluZ3MuSG9yRGNtOwotCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCSAgICBzZXR0aW5ncy5pbWdfaGVpZ2h0ICogMiAvCi0JCQkJICAgIChzZXR0aW5ncy5UbXBEY20gKiBzZXR0aW5ncy5WZXJEY20pOwotCQkJCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9TRVFfVEIgOgotCQkJCQkgICAgIFY0TDJfRklFTERfU0VRX0JUKTsKLQkJCQllbHNlCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy4KLQkJCQkJICAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfVE9QIDoKLQkJCQkJICAgICBWNEwyX0ZJRUxEX0JPVFRPTSk7Ci0KLQkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJnNldHRpbmdzKTsKLQkJCX0gZWxzZSBpZiAoZm10LT50eXBlID09Ci0JCQkJICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7Ci0JCQkJaW50IGk7Ci0KLQkJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKLQkJCQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZm91cmNjID09Ci0JCQkJCSAgICBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpCi0JCQkJCQlicmVhazsKLQkJCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgewotCQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCQlnb3RvIHRyeWZtdF91bmxvY2tfYW5kX3JldHVybjsKLQkJCQl9Ci0KLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoID4gQlVaX01BWF9XSURUSCkKLQkJCQkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01BWF9XSURUSDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoIDwgQlVaX01JTl9XSURUSCkKLQkJCQkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01JTl9XSURUSDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKQotCQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KLQkJCQkJICAgIEJVWl9NQVhfSEVJR0hUOwotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDwgQlVaX01JTl9IRUlHSFQpCi0JCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCQkgICAgQlVaX01JTl9IRUlHSFQ7Ci0JCQl9IGVsc2UgewotCQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQkJZ290byB0cnlmbXRfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCXRyeWZtdF91bmxvY2tfYW5kX3JldHVybjoKLQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCQlyZXR1cm4gcmVzOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IFVOS05PV04gaW9jdGwgY21kOiAweCV4XG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGNtZCk7Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JCWJyZWFrOwotCi0JfQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQKLXpvcmFuX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCSAgICAgc3RydWN0IGZpbGUgICpmaWxlLAotCSAgICAgdW5zaWduZWQgaW50ICBjbWQsCi0JICAgICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCB6b3Jhbl9kb19pb2N0bCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXpvcmFuX3BvbGwgKHN0cnVjdCBmaWxlICpmaWxlLAotCSAgICBwb2xsX3RhYmxlICAqd2FpdCkKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0JaW50IHJlcyA9IDAsIGZyYW1lOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiB3ZSBzaG91bGQgY2hlY2sgd2hldGhlciBidWZmZXJzIGFyZSByZWFkeSB0byBiZSBzeW5jZWQgb24KLQkgKiAody9vIHdhaXRzIC0gT19OT05CTE9DSykgaGVyZQotCSAqIGlmIHJlYWR5IGZvciByZWFkIChzeW5jKSwgcmV0dXJuIFBPTExJTnxQT0xMUkROT1JNLAotCSAqIGlmIHJlYWR5IGZvciB3cml0ZSAoc3luYyksIHJldHVybiBQT0xMT1VUfFBPTExXUk5PUk0sCi0JICogaWYgZXJyb3IsIHJldHVybiBQT0xMRVJSLAotCSAqIGlmIG5vIGJ1ZmZlcnMgcXVldWVkIG9yIHNvLCByZXR1cm4gUE9MTE5WQUwKLQkgKi8KLQotCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7Ci0JY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0JCXBvbGxfd2FpdChmaWxlLCAmenItPnY0bF9jYXBxLCB3YWl0KTsKLQkJZnJhbWUgPSB6ci0+djRsX3BlbmRbenItPnY0bF9zeW5jX3RhaWwgJiBWNExfTUFTS19GUkFNRV07Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6ICVzKCkgcmF3IC0gYWN0aXZlPSVjLCBzeW5jX3RhaWw9JWx1LyVjLCBwZW5kX3RhaWw9JWx1LCBwZW5kX2hlYWQ9JWx1XG4iLAotCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLAotCQkJIkZBTCJbZmgtPnY0bF9idWZmZXJzLmFjdGl2ZV0sIHpyLT52NGxfc3luY190YWlsLAotCQkJIlVQTUQiW3pyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlXSwKLQkJCXpyLT52NGxfcGVuZF90YWlsLCB6ci0+djRsX3BlbmRfaGVhZCk7Ci0JCS8qIFByb2Nlc3MgaXMgdGhlIG9uZSBjYXB0dXJpbmc/ICovCi0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKLQkJICAgIC8qIEJ1ZmZlciByZWFkeSB0byBEUUJVRj8gKi8KLQkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID09IEJVWl9TVEFURV9ET05FKQotCQkJcmVzID0gUE9MTElOIHwgUE9MTFJETk9STTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6Ci0JY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQkJcG9sbF93YWl0KGZpbGUsICZ6ci0+anBnX2NhcHEsIHdhaXQpOwotCQlmcmFtZSA9IHpyLT5qcGdfcGVuZFt6ci0+anBnX3F1ZV90YWlsICYgQlVaX01BU0tfRlJBTUVdOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiAlcygpIGpwZyAtIGFjdGl2ZT0lYywgcXVlX3RhaWw9JWx1LyVjLCBxdWVfaGVhZD0lbHUsIGRtYT0lbHUvJWx1XG4iLAotCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLAotCQkJIkZBTCJbZmgtPmpwZ19idWZmZXJzLmFjdGl2ZV0sIHpyLT5qcGdfcXVlX3RhaWwsCi0JCQkiVVBNRCJbenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGVdLAotCQkJenItPmpwZ19xdWVfaGVhZCwgenItPmpwZ19kbWFfdGFpbCwgenItPmpwZ19kbWFfaGVhZCk7Ci0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKLQkJICAgIHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID09IEJVWl9TVEFURV9ET05FKSB7Ci0JCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19SRUMpCi0JCQkJcmVzID0gUE9MTElOIHwgUE9MTFJETk9STTsKLQkJCWVsc2UKLQkJCQlyZXMgPSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX3BvbGwoKSAtIGludGVybmFsIGVycm9yLCB1bmtub3duIG1hcF9tb2RlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7Ci0JCXJlcyA9IFBPTExOVkFMOwotCX0KLQotCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JcmV0dXJuIHJlczsKLX0KLQotCi0vKgotICogVGhpcyBtYXBzIHRoZSBidWZmZXJzIHRvIHVzZXIgc3BhY2UuCi0gKgotICogRGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiBmaC0+bWFwX21vZGUKLSAqIHRoZSBWNEwgb3IgdGhlIE1KUEVHIGJ1ZmZlcnMgYXJlIG1hcHBlZAotICogcGVyIGJ1ZmZlciBvciBhbGwgdG9nZXRoZXIKLSAqCi0gKiBOb3RlIHRoYXQgd2UgbmVlZCB0byBjb25uZWN0IHRvIHNvbWUKLSAqIHVubWFwIHNpZ25hbCBldmVudCB0byB1bm1hcCB0aGUgZGUtYWxsb2NhdGUKLSAqIHRoZSBidWZmZXIgYWNjb3JkaW5nbHkgKHpvcmFuX3ZtX2Nsb3NlKCkpCi0gKi8KLQotc3RhdGljIHZvaWQKLXpvcmFuX3ZtX29wZW4gKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCB6b3Jhbl9tYXBwaW5nICptYXAgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKLQotCW1hcC0+Y291bnQrKzsKLX0KLQotc3RhdGljIHZvaWQKLXpvcmFuX3ZtX2Nsb3NlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3Qgem9yYW5fbWFwcGluZyAqbWFwID0gdm1hLT52bV9wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBtYXAtPmZpbGU7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCWludCBpOwotCi0JbWFwLT5jb3VudC0tOwotCWlmIChtYXAtPmNvdW50ID09IDApIHsKLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgotCi0JCQlkcHJpbnRrKDMsIEtFUk5fSU5GTyAiJXM6IG11bm1hcChNSlBFRylcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPT0gbWFwKSB7Ci0JCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0ubWFwID0KLQkJCQkJICAgIE5VTEw7Ci0JCQkJfQotCQkJfQotCQkJa2ZyZWUobWFwKTsKLQotCQkJZm9yIChpID0gMDsgaSA8IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKQotCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCkKLQkJCQkJYnJlYWs7Ci0JCQlpZiAoaSA9PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMpIHsKLQkJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCQkJCWpwZ19xYnVmKGZpbGUsIC0xLCB6ci0+Y29kZWNfbW9kZSk7Ci0JCQkJCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQkJCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0KLQkJCQkJICAgIGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPQotCQkJCQkgICAgWk9SQU5fRlJFRTsKLQkJCQl9Ci0JCQkJLy9qcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCQkJCWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQkJCWZoLT5qcGdfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCA9IDE7Ci0KLQkJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJCX0KLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0KLQkJCWRwcmludGsoMywgS0VSTl9JTkZPICIlczogbXVubWFwKFY0TClcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPT0gbWFwKSB7Ci0JCQkJCS8qIHVucXVldWUvdW5tYXAgKi8KLQkJCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPQotCQkJCQkgICAgTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCQlrZnJlZShtYXApOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspCi0JCQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0ubWFwKQotCQkJCQlicmVhazsKLQkJCWlmIChpID09IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycykgewotCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0JCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOwotCQkJCQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJCQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0KLQkJCQkJICAgIFpPUkFOX0ZSRUU7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQkJCX0KLQkJCQkvL3Y0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMTsKLQotCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJfQotCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBtdW5tYXAoKSAtIGludGVybmFsIGVycm9yIC0gdW5rbm93biBtYXAgbW9kZSAlZFxuIiwKLQkJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgZmgtPm1hcF9tb2RlKTsKLQkJCWJyZWFrOwotCi0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgem9yYW5fdm1fb3BzID0gewotCS5vcGVuID0gem9yYW5fdm1fb3BlbiwKLQkuY2xvc2UgPSB6b3Jhbl92bV9jbG9zZSwKLX07Ci0KLXN0YXRpYyBpbnQKLXpvcmFuX21tYXAgKHN0cnVjdCBmaWxlICAgICAgICAgICAqZmlsZSwKLQkgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9ICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwotCWludCBpLCBqOwotCXVuc2lnbmVkIGxvbmcgcGFnZSwgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0LCB0b2RvLCBwb3MsIGZyYWdsZW47Ci0JaW50IGZpcnN0LCBsYXN0OwotCXN0cnVjdCB6b3Jhbl9tYXBwaW5nICptYXA7Ci0JaW50IHJlcyA9IDA7Ci0KLQlkcHJpbnRrKDMsCi0JCUtFUk5fSU5GTyAiJXM6IG1tYXAoJXMpIG9mIDB4JTA4bHgtMHglMDhseCAoc2l6ZT0lbHUpXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwKLQkJZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVyA/ICJWNEwiIDogIk1KUEVHIiwKLQkJdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsIHNpemUpOwotCi0JaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkgfHwgISh2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkgfHwKLQkgICAgISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IG1tYXAoKSAtIG5vIE1BUF9TSEFSRUQvUFJPVF97UkVBRCxXUklURX0gZ2l2ZW5cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7Ci0KLQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6Ci0JY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQotCQkvKiBsb2NrICovCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkvKiBNYXAgdGhlIE1KUEVHIGJ1ZmZlcnMgKi8KLQkJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHpvcmFuX21tYXAoTUpQRUcpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRU5PTUVNOwotCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCWZpcnN0ID0gb2Zmc2V0IC8gZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQlsYXN0ID0gZmlyc3QgLSAxICsgc2l6ZSAvIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJaWYgKG9mZnNldCAlIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8Ci0JCSAgICBzaXplICUgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplICE9IDAgfHwgZmlyc3QgPCAwIHx8Ci0JCSAgICBsYXN0IDwgMCB8fCBmaXJzdCA+PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKLQkJICAgIGxhc3QgPj0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IG1tYXAoTUpQRUcpIC0gb2Zmc2V0PSVsdSBvciBzaXplPSVsdSBpbnZhbGlkIGZvciBidWZzaXplPSVkIGFuZCBudW1idWZzPSVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBvZmZzZXQsIHNpemUsCi0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplLAotCQkJCWZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCQlmb3IgKGkgPSBmaXJzdDsgaSA8PSBsYXN0OyBpKyspIHsKLQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBtbWFwKE1KUEVHKSAtIGJ1ZmZlciAlZCBhbHJlYWR5IG1hcHBlZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGkpOwotCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQlnb3RvIGpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJLyogbWFwIHRoZXNlIGJ1ZmZlcnMgKHY0bF9idWZmZXJzW2ldKSAqLwotCQltYXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgem9yYW5fbWFwcGluZyksIEdGUF9LRVJORUwpOwotCQlpZiAoIW1hcCkgewotCQkJcmVzID0gLUVOT01FTTsKLQkJCWdvdG8ganBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQkJbWFwLT5maWxlID0gZmlsZTsKLQkJbWFwLT5jb3VudCA9IDE7Ci0KLQkJdm1hLT52bV9vcHMgPSAmem9yYW5fdm1fb3BzOwotCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRFWFBBTkQ7Ci0JCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gbWFwOwotCi0JCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgewotCQkJZm9yIChqID0gMDsKLQkJCSAgICAgaiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsKLQkJCSAgICAgaisrKSB7Ci0JCQkJZnJhZ2xlbiA9Ci0JCQkJICAgIChsZTMyX3RvX2NwdShmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLgotCQkJCSAgICAgZnJhZ190YWJbMiAqIGogKyAxXSkgJiB+MSkgPDwgMTsKLQkJCQl0b2RvID0gc2l6ZTsKLQkJCQlpZiAodG9kbyA+IGZyYWdsZW4pCi0JCQkJCXRvZG8gPSBmcmFnbGVuOwotCQkJCXBvcyA9Ci0JCQkJICAgIGxlMzJfdG9fY3B1KGZoLT5qcGdfYnVmZmVycy4KLQkJCQkgICAgYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqXSk7Ci0JCQkJLyogc2hvdWxkIGp1c3QgYmUgcG9zIG9uIGkzODYgKi8KLQkJCQlwYWdlID0gdmlydF90b19waHlzKGJ1c190b192aXJ0KHBvcykpCi0JCQkJCQkJCT4+IFBBR0VfU0hJRlQ7Ci0JCQkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLAotCQkJCQkJCXRvZG8sIFBBR0VfU0hBUkVEKSkgewotCQkJCQlkcHJpbnRrKDEsCi0JCQkJCQlLRVJOX0VSUgotCQkJCQkJIiVzOiB6b3Jhbl9tbWFwKFY0TCkgLSByZW1hcF9wZm5fcmFuZ2UgZmFpbGVkXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCQlyZXMgPSAtRUFHQUlOOwotCQkJCQlnb3RvIGpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQkJCX0KLQkJCQlzaXplIC09IHRvZG87Ci0JCQkJc3RhcnQgKz0gdG9kbzsKLQkJCQlpZiAoc2l6ZSA9PSAwKQotCQkJCQlicmVhazsKLQkJCQlpZiAobGUzMl90b19jcHUoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS4KLQkJCQkgICAgZnJhZ190YWJbMiAqIGogKyAxXSkgJiAxKQotCQkJCQlicmVhazsJLyogd2FzIGxhc3QgZnJhZ21lbnQgKi8KLQkJCX0KLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0ubWFwID0gbWFwOwotCQkJaWYgKHNpemUgPT0gMCkKLQkJCQlicmVhazsKLQotCQl9Ci0JanBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWJyZWFrOwotCi0JY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCS8qIE1hcCB0aGUgVjRMIGJ1ZmZlcnMgKi8KLQkJaWYgKCFmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHpvcmFuX21tYXAoVjRMKSAtIGJ1ZmZlcnMgbm90IHlldCBhbGxvY2F0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVOT01FTTsKLQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlmaXJzdCA9IG9mZnNldCAvIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJbGFzdCA9IGZpcnN0IC0gMSArIHNpemUgLyBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCWlmIChvZmZzZXQgJSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgIT0gMCB8fAotCQkgICAgc2l6ZSAlIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8IGZpcnN0IDwgMCB8fAotCQkgICAgbGFzdCA8IDAgfHwgZmlyc3QgPj0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzIHx8Ci0JCSAgICBsYXN0ID49IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBtbWFwKFY0TCkgLSBvZmZzZXQ9JWx1IG9yIHNpemU9JWx1IGludmFsaWQgZm9yIGJ1ZnNpemU9JWQgYW5kIG51bWJ1ZnM9JWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIG9mZnNldCwgc2l6ZSwKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUsCi0JCQkJZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0JCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgewotCQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0ubWFwKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IG1tYXAoVjRMKSAtIGJ1ZmZlciAlZCBhbHJlYWR5IG1hcHBlZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGkpOwotCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQlnb3RvIHY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJLyogbWFwIHRoZXNlIGJ1ZmZlcnMgKHY0bF9idWZmZXJzW2ldKSAqLwotCQltYXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgem9yYW5fbWFwcGluZyksIEdGUF9LRVJORUwpOwotCQlpZiAoIW1hcCkgewotCQkJcmVzID0gLUVOT01FTTsKLQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQkJbWFwLT5maWxlID0gZmlsZTsKLQkJbWFwLT5jb3VudCA9IDE7Ci0KLQkJdm1hLT52bV9vcHMgPSAmem9yYW5fdm1fb3BzOwotCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRFWFBBTkQ7Ci0JCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gbWFwOwotCi0JCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgewotCQkJdG9kbyA9IHNpemU7Ci0JCQlpZiAodG9kbyA+IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSkKLQkJCQl0b2RvID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJcGFnZSA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcl9waHlzOwotCQkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlID4+IFBBR0VfU0hJRlQsCi0JCQkJCQkJdG9kbywgUEFHRV9TSEFSRUQpKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IHpvcmFuX21tYXAoVjRMKWkgLSByZW1hcF9wZm5fcmFuZ2UgZmFpbGVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkJcmVzID0gLUVBR0FJTjsKLQkJCQlnb3RvIHY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQkJc2l6ZSAtPSB0b2RvOwotCQkJc3RhcnQgKz0gdG9kbzsKLQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0ubWFwID0gbWFwOwotCQkJaWYgKHNpemUgPT0gMCkKLQkJCQlicmVhazsKLQkJfQotCXY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX21tYXAoKSAtIGludGVybmFsIGVycm9yIC0gdW5rbm93biBtYXAgbW9kZSAlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgem9yYW5fZm9wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkub3BlbiA9IHpvcmFuX29wZW4sCi0JLnJlbGVhc2UgPSB6b3Jhbl9jbG9zZSwKLQkuaW9jdGwgPSB6b3Jhbl9pb2N0bCwKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0JLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKLSNlbmRpZgotCS5sbHNlZWsgPSBub19sbHNlZWssCi0JLnJlYWQgPSB6b3Jhbl9yZWFkLAotCS53cml0ZSA9IHpvcmFuX3dyaXRlLAotCS5tbWFwID0gem9yYW5fbW1hcCwKLQkucG9sbCA9IHpvcmFuX3BvbGwsCi19OwotCi1zdHJ1Y3QgdmlkZW9fZGV2aWNlIHpvcmFuX3RlbXBsYXRlIF9fZGV2aW5pdGRhdGEgPSB7Ci0JLm5hbWUgPSBaT1JBTl9OQU1FLAotCS5mb3BzID0gJnpvcmFuX2ZvcHMsCi0JLnJlbGVhc2UgPSAmem9yYW5fdmRldl9yZWxlYXNlLAotCS5taW5vciA9IC0xCi19OwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCmluZGV4IDE4ZDFjNGIuLjdjZGFjOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jCkBAIC01Miw3ICs1Miw3IEBACiAKIAogLyogRGVidWcgbWFjcm8gKi8KLSNkZWZpbmUgREJHKHguLi4pIGlmIChkZWJ1ZykgaW5mbyh4KQorI2RlZmluZSBEQkcoeC4uLikgaWYgKGRlYnVnKSBwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FIHgpCiAKIAogLyogSW5pdCBtZXRob2RzLCBuZWVkIHRvIGZpbmQgbmljZXIgbmFtZXMgZm9yIHRoZXNlCkBAIC0xMTYsNiArMTE2LDcgQEAKIAlpbnQgaGVpZ2h0OwogCWludCBtZXRob2Q7CiAJc3RydWN0IG11dGV4IGxvY2s7CisJaW50IHVzZXJzOwogfTsKIAogCkBAIC0xMjcsNyArMTI4LDcgQEAKIAogCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKLQkJaW5mbygia21hbGxvYyglZCkgZmFpbGVkIiwgc2l6ZSk7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImttYWxsb2MoJWQpIGZhaWxlZFxuIiwgc2l6ZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTQzLDcgKzE0NCw4IEBACiAJa2ZyZWUodHJhbnNmZXJfYnVmZmVyKTsKIAogCWlmIChzdGF0dXMgPCAwKQotCQlpbmZvKCJGYWlsZWQgc2VuZGluZyBjb250cm9sIG1lc3NhZ2UsIGVycm9yICVkLiIsIHN0YXR1cyk7CisJCWRldl9lcnIoJnVkZXYtPmRldiwKKwkJCSJGYWlsZWQgc2VuZGluZyBjb250cm9sIG1lc3NhZ2UsIGVycm9yICVkLlxuIiwgc3RhdHVzKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0zMDMsMTEgKzMwNSwxMSBAQAogCQlEQkcoImJ1ZmZlciA6ICVkICVkIiwgY2FtLT5idWZmZXJbMF0sIGNhbS0+YnVmZmVyWzFdKTsKIAkJREJHKCJidWxrIDogbj0lZCBzaXplPSVkIiwgbiwgYWN0dWFsX2xlbmd0aCk7CiAJCWlmIChuIDwgMCkgewotCQkJaW5mbygiZXJyb3IgcmVhZGluZyBidWxrIG1zZyIpOworCQkJZGV2X2VycigmY2FtLT51ZGV2LT5kZXYsICJlcnJvciByZWFkaW5nIGJ1bGsgbXNnXG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmIChhY3R1YWxfbGVuZ3RoIDwgMCB8fCBhY3R1YWxfbGVuZ3RoID4gQlVGRkVSX1NJWkUpIHsKLQkJCWluZm8oIndyb25nIG51bWJlciBvZiBieXRlcyIpOworCQkJZGV2X2VycigmY2FtLT51ZGV2LT5kZXYsICJ3cm9uZyBudW1iZXIgb2YgYnl0ZXNcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtNjQxLDQyICs2NDMsNDcgQEAKIAogCURCRygienIzNjR4eF9vcGVuIik7CiAKLQljYW0tPnNraXAgPSAyOworCW11dGV4X2xvY2soJmNhbS0+bG9jayk7CiAKLQllcnIgPSB2aWRlb19leGNsdXNpdmVfb3Blbihpbm9kZSwgZmlsZSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJaWYgKGNhbS0+dXNlcnMpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAoIWNhbS0+ZnJhbWVidWYpIHsKIAkJY2FtLT5mcmFtZWJ1ZiA9IHZtYWxsb2NfMzIoTUFYX0ZSQU1FX1NJWkUgKiBGUkFNRVMpOwogCQlpZiAoIWNhbS0+ZnJhbWVidWYpIHsKLQkJCWluZm8oInZtYWxsb2NfMzIgZmFpbGVkISIpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlkZXZfZXJyKCZjYW0tPnVkZXYtPmRldiwgInZtYWxsb2NfMzIgZmFpbGVkIVxuIik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKLQltdXRleF9sb2NrKCZjYW0tPmxvY2spOwogCWZvciAoaSA9IDA7IGluaXRbY2FtLT5tZXRob2RdW2ldLnNpemUgIT0gLTE7IGkrKykgewogCQllcnIgPQogCQkgICAgc2VuZF9jb250cm9sX21zZyh1ZGV2LCAxLCBpbml0W2NhbS0+bWV0aG9kXVtpXS52YWx1ZSwKIAkJCQkgICAgIDAsIGluaXRbY2FtLT5tZXRob2RdW2ldLmJ5dGVzLAogCQkJCSAgICAgaW5pdFtjYW0tPm1ldGhvZF1baV0uc2l6ZSk7CiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlpbmZvKCJlcnJvciBkdXJpbmcgb3BlbiBzZXF1ZW5jZTogJWQiLCBpKTsKLQkJCW11dGV4X3VubG9jaygmY2FtLT5sb2NrKTsKLQkJCXJldHVybiBlcnI7CisJCQlkZXZfZXJyKCZjYW0tPnVkZXYtPmRldiwKKwkJCQkiZXJyb3IgZHVyaW5nIG9wZW4gc2VxdWVuY2U6ICVkXG4iLCBpKTsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfQogCisJY2FtLT5za2lwID0gMjsKKwljYW0tPnVzZXJzKys7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdmRldjsKIAogCS8qIEFkZGVkIHNvbWUgZGVsYXkgaGVyZSwgc2luY2Ugb3BlbmluZy9jbG9zaW5nIHRoZSBjYW1lcmEgcXVpY2tseSwKIAkgKiBsaWtlIEVraWdhIGRvZXMgZHVyaW5nIGl0cyBzdGFydHVwLCBjYW4gY3Jhc2ggdGhlIHdlYmNhbQogCSAqLwogCW1kZWxheSgxMDApOworCWVyciA9IDA7CiAKK291dDoKIAltdXRleF91bmxvY2soJmNhbS0+bG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogCkBAIC02OTcsMjggKzcwNCwzMCBAQAogCXVkZXYgPSBjYW0tPnVkZXY7CiAKIAltdXRleF9sb2NrKCZjYW0tPmxvY2spOworCisJY2FtLT51c2Vycy0tOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWVyciA9CiAJCSAgICBzZW5kX2NvbnRyb2xfbXNnKHVkZXYsIDEsIGluaXRbY2FtLT5tZXRob2RdW2ldLnZhbHVlLAogCQkJCSAgICAgMCwgaW5pdFtpXVtjYW0tPm1ldGhvZF0uYnl0ZXMsCiAJCQkJICAgICBpbml0W2NhbS0+bWV0aG9kXVtpXS5zaXplKTsKIAkJaWYgKGVyciA8IDApIHsKLQkJCWluZm8oImVycm9yIGR1cmluZyByZWxlYXNlIHNlcXVlbmNlIik7Ci0JCQltdXRleF91bmxvY2soJmNhbS0+bG9jayk7Ci0JCQlyZXR1cm4gZXJyOworCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiZXJyb3IgZHVyaW5nIHJlbGVhc2Ugc2VxdWVuY2VcbiIpOworCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCXZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKLQogCS8qIEFkZGVkIHNvbWUgZGVsYXkgaGVyZSwgc2luY2Ugb3BlbmluZy9jbG9zaW5nIHRoZSBjYW1lcmEgcXVpY2tseSwKIAkgKiBsaWtlIEVraWdhIGRvZXMgZHVyaW5nIGl0cyBzdGFydHVwLCBjYW4gY3Jhc2ggdGhlIHdlYmNhbQogCSAqLwogCW1kZWxheSgxMDApOworCWVyciA9IDA7CiAKK291dDoKIAltdXRleF91bmxvY2soJmNhbS0+bG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogCkBAIC04MDEsMTMgKzgxMCwxNCBAQAogCiAJREJHKCJwcm9iaW5nLi4uIik7CiAKLQlpbmZvKERSSVZFUl9ERVNDICIgY29tcGF0aWJsZSB3ZWJjYW0gcGx1Z2dlZCIpOwotCWluZm8oIm1vZGVsICUwNHg6JTA0eCBkZXRlY3RlZCIsIHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IsCi0JICAgICB1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJZGV2X2luZm8oJmludGYtPmRldiwgRFJJVkVSX0RFU0MgIiBjb21wYXRpYmxlIHdlYmNhbSBwbHVnZ2VkXG4iKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAibW9kZWwgJTA0eDolMDR4IGRldGVjdGVkXG4iLAorCQkgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwogCiAJY2FtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpyMzY0eHhfY2FtZXJhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNhbSA9PSBOVUxMKSB7Ci0JCWluZm8oImNhbTogb3V0IG9mIG1lbW9yeSAhIik7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImNhbTogb3V0IG9mIG1lbW9yeSAhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCS8qIHNhdmUgdGhlIGluaXQgbWV0aG9kIHVzZWQgYnkgdGhpcyBjYW1lcmEgKi8KQEAgLTgxNSw3ICs4MjUsNyBAQAogCiAJY2FtLT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CiAJaWYgKGNhbS0+dmRldiA9PSBOVUxMKSB7Ci0JCWluZm8oImNhbS0+dmRldjogb3V0IG9mIG1lbW9yeSAhIik7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImNhbS0+dmRldjogb3V0IG9mIG1lbW9yeSAhXG4iKTsKIAkJa2ZyZWUoY2FtKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtODI3LDcgKzgzNyw3IEBACiAJY2FtLT51ZGV2ID0gdWRldjsKIAogCWlmICgoY2FtLT5idWZmZXIgPSBrbWFsbG9jKEJVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlpbmZvKCJjYW0tPmJ1ZmZlcjogb3V0IG9mIG1lbW9yeSAhIik7CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJjYW0tPmJ1ZmZlcjogb3V0IG9mIG1lbW9yeSAhXG4iKTsKIAkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoY2FtLT52ZGV2KTsKIAkJa2ZyZWUoY2FtKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC04MzUsMTcgKzg0NSwxNyBAQAogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSAxOgotCQlpbmZvKCIxNjB4MTIwIG1vZGUgc2VsZWN0ZWQiKTsKKwkJZGV2X2luZm8oJnVkZXYtPmRldiwgIjE2MHgxMjAgbW9kZSBzZWxlY3RlZFxuIik7CiAJCWNhbS0+d2lkdGggPSAxNjA7CiAJCWNhbS0+aGVpZ2h0ID0gMTIwOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWluZm8oIjY0MHg0ODAgbW9kZSBzZWxlY3RlZCIpOworCQlkZXZfaW5mbygmdWRldi0+ZGV2LCAiNjQweDQ4MCBtb2RlIHNlbGVjdGVkXG4iKTsKIAkJY2FtLT53aWR0aCA9IDY0MDsKIAkJY2FtLT5oZWlnaHQgPSA0ODA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWluZm8oIjMyMHgyNDAgbW9kZSBzZWxlY3RlZCIpOworCQlkZXZfaW5mbygmdWRldi0+ZGV2LCAiMzIweDI0MCBtb2RlIHNlbGVjdGVkXG4iKTsKIAkJY2FtLT53aWR0aCA9IDMyMDsKIAkJY2FtLT5oZWlnaHQgPSAyNDA7CiAJCWJyZWFrOwpAQCAtODY1LDcgKzg3NSw3IEBACiAKIAllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoY2FtLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CiAJaWYgKGVycikgewotCQlpbmZvKCJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkIik7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgInZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWRcbiIpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShjYW0tPnZkZXYpOwogCQlrZnJlZShjYW0tPmJ1ZmZlcik7CiAJCWtmcmVlKGNhbSk7CkBAIC04NzQsNyArODg0LDggQEAKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FtKTsKIAotCWluZm8oRFJJVkVSX0RFU0MgIiBjb250cm9sbGluZyB2aWRlbyBkZXZpY2UgJWQiLCBjYW0tPnZkZXYtPm1pbm9yKTsKKwlkZXZfaW5mbygmdWRldi0+ZGV2LCBEUklWRVJfREVTQyAiIGNvbnRyb2xsaW5nIHZpZGVvIGRldmljZSAlZFxuIiwKKwkJIGNhbS0+dmRldi0+bWlub3IpOwogCXJldHVybiAwOwogfQogCkBAIC04ODQsNyArODk1LDcgQEAKIAlzdHJ1Y3QgenIzNjR4eF9jYW1lcmEgKmNhbSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAlkZXZfc2V0X2RydmRhdGEoJmludGYtPmRldiwgTlVMTCk7Ci0JaW5mbyhEUklWRVJfREVTQyAiIHdlYmNhbSB1bnBsdWdnZWQiKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCBEUklWRVJfREVTQyAiIHdlYmNhbSB1bnBsdWdnZWRcbiIpOwogCWlmIChjYW0tPnZkZXYpCiAJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGNhbS0+dmRldik7CiAJY2FtLT52ZGV2ID0gTlVMTDsKQEAgLTkxMywxNiArOTI0LDE2IEBACiAJaW50IHJldHZhbDsKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnpyMzY0eHhfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQotCQlpbmZvKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkISIpOworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogdXNiX3JlZ2lzdGVyIGZhaWxlZCFcbiIpOwogCWVsc2UKLQkJaW5mbyhEUklWRVJfREVTQyAiIG1vZHVsZSBsb2FkZWQiKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXR2YWw7CiB9CiAKIAogc3RhdGljIHZvaWQgX19leGl0IHpyMzY0eHhfZXhpdCh2b2lkKQogewotCWluZm8oRFJJVkVSX0RFU0MgIiBtb2R1bGUgdW5sb2FkZWQiKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX0RFU0MgIiBtb2R1bGUgdW5sb2FkZWRcbiIpOwogCXVzYl9kZXJlZ2lzdGVyKCZ6cjM2NHh4X2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKaW5kZXggNmUyOTFiZi4uNTI2MzkxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKQEAgLTEwNDQsNyArMTA0NCw2IEBACiAKIAkJc19hdHRyLT5kZXZfYXR0ci5hdHRyLm5hbWUgPSBzX2F0dHItPm5hbWU7CiAJCXNfYXR0ci0+ZGV2X2F0dHIuYXR0ci5tb2RlID0gU19JUlVHTzsKLQkJc19hdHRyLT5kZXZfYXR0ci5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJCXNfYXR0ci0+ZGV2X2F0dHIuc2hvdyA9IG1zcHJvX2Jsb2NrX2F0dHJfc2hvdyhzX2F0dHItPmlkKTsKIAogCQlpZiAoIXJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vTWFrZWZpbGUKaW5kZXggMmMyZTM5YS4uYjA5ODJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogIyBJbiB0aGUgZnV0dXJlLCBzb21lIG9mIHRoZXNlIHNob3VsZCBiZSBidWlsdCBjb25kaXRpb25hbGx5LgogIwogCi1pMm9fY29yZS15CQkrPSBpb3AubyBkcml2ZXIubyBkZXZpY2UubyBkZWJ1Zy5vIHBjaS5vIGV4ZWMtb3NtLm8KK2kyb19jb3JlLXkJCSs9IGlvcC5vIGRyaXZlci5vIGRldmljZS5vIGRlYnVnLm8gcGNpLm8gZXhlYy1vc20ubyBtZW1vcnkubwogaTJvX2J1cy15CQkrPSBidXMtb3NtLm8KIGkyb19jb25maWcteQkJKz0gY29uZmlnLW9zbS5vCiBvYmotJChDT05GSUdfSTJPKQkrPSBpMm9fY29yZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2RldmljZS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9kZXZpY2UuYwppbmRleCA4Nzc0YzY3Li41NGMyZTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2RldmljZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vZGV2aWNlLmMKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCiAJcmVzLnZpcnQgPSBOVUxMOwogCi0JaWYgKGkyb19kbWFfYWxsb2MoZGV2LCAmcmVzLCByZXNsZW4sIEdGUF9LRVJORUwpKQorCWlmIChpMm9fZG1hX2FsbG9jKGRldiwgJnJlcywgcmVzbGVuKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAltc2cgPSBpMm9fbXNnX2dldF93YWl0KGMsIEkyT19USU1FT1VUX01FU1NBR0VfR0VUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYwppbmRleCA2Y2JjYzIxLi41NmZhZWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jCkBAIC0zODgsOCArMzg4LDggQEAKIAogCWRldiA9ICZjLT5wZGV2LT5kZXY7CiAKLQlpZiAoaTJvX2RtYV9yZWFsbG9jCi0JICAgIChkZXYsICZjLT5kbGN0LCBsZTMyX3RvX2NwdShzYi0+ZXhwZWN0ZWRfbGN0X3NpemUpLCBHRlBfS0VSTkVMKSkKKwlpZiAoaTJvX2RtYV9yZWFsbG9jKGRldiwgJmMtPmRsY3QsCisJCQkJCWxlMzJfdG9fY3B1KHNiLT5leHBlY3RlZF9sY3Rfc2l6ZSkpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCW1zZyA9IGkyb19tc2dfZ2V0X3dhaXQoYywgSTJPX1RJTUVPVVRfTUVTU0FHRV9HRVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fY29uZmlnLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYwppbmRleCA0MjM4ZGU5Li5hM2ZhYmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJaWYgKElTX0VSUihtc2cpKQogCQlyZXR1cm4gUFRSX0VSUihtc2cpOwogCi0JaWYgKGkyb19kbWFfYWxsb2MoJmMtPnBkZXYtPmRldiwgJmJ1ZmZlciwgZnJhZ3NpemUsIEdGUF9LRVJORUwpKSB7CisJaWYgKGkyb19kbWFfYWxsb2MoJmMtPnBkZXYtPmRldiwgJmJ1ZmZlciwgZnJhZ3NpemUpKSB7CiAJCWkyb19tc2dfbm9wKGMsIG1zZyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTMzOSw3ICszMzksNyBAQAogCWlmIChJU19FUlIobXNnKSkKIAkJcmV0dXJuIFBUUl9FUlIobXNnKTsKIAotCWlmIChpMm9fZG1hX2FsbG9jKCZjLT5wZGV2LT5kZXYsICZidWZmZXIsIGZyYWdzaXplLCBHRlBfS0VSTkVMKSkgeworCWlmIChpMm9fZG1hX2FsbG9jKCZjLT5wZGV2LT5kZXYsICZidWZmZXIsIGZyYWdzaXplKSkgewogCQlpMm9fbXNnX25vcChjLCBtc2cpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC02MzQsOSArNjM0LDcgQEAKIAkJCXNnX3NpemUgPSBzZ1tpXS5mbGFnX2NvdW50ICYgMHhmZmZmZmY7CiAJCQlwID0gJihzZ19saXN0W3NnX2luZGV4XSk7CiAJCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB0cmFuc2ZlciAqLwotCQkJaWYgKGkyb19kbWFfYWxsb2MKLQkJCSAgICAoJmMtPnBkZXYtPmRldiwgcCwgc2dfc2l6ZSwKLQkJCSAgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKSkgeworCQkJaWYgKGkyb19kbWFfYWxsb2MoJmMtPnBkZXYtPmRldiwgcCwgc2dfc2l6ZSkpIHsKIAkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSAgICAgICAiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSBTRyBidWZmZXIgLSBzaXplID0gJWQgYnVmZmVyIG51bWJlciAlZCBvZiAlZFxuIiwKIAkJCQkgICAgICAgYy0+bmFtZSwgc2dfc2l6ZSwgaSwgc2dfY291bnQpOwpAQCAtNzgwLDEyICs3NzgsMTEgQEAKIAl1MzIgc2l6ZSA9IDA7CiAJdTMyIHJlcGx5X3NpemUgPSAwOwogCXUzMiByY29kZSA9IDA7Ci0Jdm9pZCAqc2dfbGlzdFtTR19UQUJMRVNJWkVdOworCXN0cnVjdCBpMm9fZG1hIHNnX2xpc3RbU0dfVEFCTEVTSVpFXTsKIAl1MzIgc2dfb2Zmc2V0ID0gMDsKIAl1MzIgc2dfY291bnQgPSAwOwogCWludCBzZ19pbmRleCA9IDA7CiAJdTMyIGkgPSAwOwotCXZvaWQgKnAgPSBOVUxMOwogCWkyb19zdGF0dXNfYmxvY2sgKnNiOwogCXN0cnVjdCBpMm9fbWVzc2FnZSAqbXNnOwogCXVuc2lnbmVkIGludCBpb3A7CkBAIC04NDIsNiArODM5LDcgQEAKIAltZW1zZXQoc2dfbGlzdCwgMCwgc2l6ZW9mKHNnX2xpc3RbMF0pICogU0dfVEFCTEVTSVpFKTsKIAlpZiAoc2dfb2Zmc2V0KSB7CiAJCXN0cnVjdCBzZ19zaW1wbGVfZWxlbWVudCAqc2c7CisJCXN0cnVjdCBpMm9fZG1hICpwOwogCiAJCWlmIChzZ19vZmZzZXQgKiA0ID49IHNpemUpIHsKIAkJCXJjb2RlID0gLUVGQVVMVDsKQEAgLTg3MSwyMiArODY5LDIyIEBACiAJCQkJZ290byBzZ19saXN0X2NsZWFudXA7CiAJCQl9CiAJCQlzZ19zaXplID0gc2dbaV0uZmxhZ19jb3VudCAmIDB4ZmZmZmZmOworCQkJcCA9ICYoc2dfbGlzdFtzZ19pbmRleF0pOworCQkJaWYgKGkyb19kbWFfYWxsb2MoJmMtPnBkZXYtPmRldiwgcCwgc2dfc2l6ZSkpIHsKIAkJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHRyYW5zZmVyICovCi0JCQlwID0ga21hbGxvYyhzZ19zaXplLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghcCkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkJICAgICAgICIlczogQ291bGQgbm90IGFsbG9jYXRlIFNHIGJ1ZmZlciAtIHNpemUgPSAlZCBidWZmZXIgbnVtYmVyICVkIG9mICVkXG4iLAogCQkJCSAgICAgICBjLT5uYW1lLCBzZ19zaXplLCBpLCBzZ19jb3VudCk7CiAJCQkJcmNvZGUgPSAtRU5PTUVNOwogCQkJCWdvdG8gc2dfbGlzdF9jbGVhbnVwOwogCQkJfQotCQkJc2dfbGlzdFtzZ19pbmRleCsrXSA9IHA7CS8vIHNnbGlzdCBpbmRleGVkIHdpdGggaW5wdXQgZnJhbWUsIG5vdCBvdXIgaW50ZXJuYWwgZnJhbWUuCisJCQlzZ19pbmRleCsrOwogCQkJLyogQ29weSBpbiB0aGUgdXNlcidzIFNHIGJ1ZmZlciBpZiBuZWNlc3NhcnkgKi8KIAkJCWlmIChzZ1tpXS4KIAkJCSAgICBmbGFnX2NvdW50ICYgMHgwNDAwMDAwMCAvKkkyT19TR0xfRkxBR1NfRElSICovICkgewogCQkJCS8vIFRPRE8gNjRiaXQgZml4CiAJCQkJaWYgKGNvcHlfZnJvbV91c2VyCi0JCQkJICAgIChwLCAodm9pZCBfX3VzZXIgKilzZ1tpXS5hZGRyX2J1cywKKwkJCQkgICAgKHAtPnZpcnQsICh2b2lkIF9fdXNlciAqKXNnW2ldLmFkZHJfYnVzLAogCQkJCSAgICAgc2dfc2l6ZSkpIHsKIAkJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkJICAgICAgICIlczogQ291bGQgbm90IGNvcHkgU0cgYnVmICVkIEZST00gdXNlclxuIiwKQEAgLTg5NSw4ICs4OTMsNyBAQAogCQkJCQlnb3RvIHNnX2xpc3RfY2xlYW51cDsKIAkJCQl9CiAJCQl9Ci0JCQkvL1RPRE8gNjRiaXQgZml4Ci0JCQlzZ1tpXS5hZGRyX2J1cyA9IHZpcnRfdG9fYnVzKHApOworCQkJc2dbaV0uYWRkcl9idXMgPSBwLT5waHlzOwogCQl9CiAJfQogCkBAIC05MDgsNyArOTA1LDcgQEAKIAl9CiAKIAlpZiAoc2dfb2Zmc2V0KSB7Ci0JCXUzMiBybXNnWzEyOF07CisJCXUzMiBybXNnW0kyT19PVVRCT1VORF9NU0dfRlJBTUVfU0laRV07CiAJCS8qIENvcHkgYmFjayB0aGUgU2NhdHRlciBHYXRoZXIgYnVmZmVycyBiYWNrIHRvIHVzZXIgc3BhY2UgKi8KIAkJdTMyIGo7CiAJCS8vIFRPRE8gNjRiaXQgZml4CkBAIC05NDIsMTEgKzkzOSwxMSBAQAogCQkJCXNnX3NpemUgPSBzZ1tqXS5mbGFnX2NvdW50ICYgMHhmZmZmZmY7CiAJCQkJLy8gVE9ETyA2NGJpdCBmaXgKIAkJCQlpZiAoY29weV90b191c2VyCi0JCQkJICAgICgodm9pZCBfX3VzZXIgKilzZ1tqXS5hZGRyX2J1cywgc2dfbGlzdFtqXSwKKwkJCQkgICAgKCh2b2lkIF9fdXNlciAqKXNnW2pdLmFkZHJfYnVzLCBzZ19saXN0W2pdLnZpcnQsCiAJCQkJICAgICBzZ19zaXplKSkgewogCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJCSAgICAgICAiJXM6IENvdWxkIG5vdCBjb3B5ICVwIFRPIHVzZXIgJXhcbiIsCi0JCQkJCSAgICAgICBjLT5uYW1lLCBzZ19saXN0W2pdLAorCQkJCQkgICAgICAgYy0+bmFtZSwgc2dfbGlzdFtqXS52aXJ0LAogCQkJCQkgICAgICAgc2dbal0uYWRkcl9idXMpOwogCQkJCQlyY29kZSA9IC1FRkFVTFQ7CiAJCQkJCWdvdG8gc2dfbGlzdF9jbGVhbnVwOwpAQCAtOTczLDcgKzk3MCw3IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHNnX2luZGV4OyBpKyspCi0JCWtmcmVlKHNnX2xpc3RbaV0pOworCQlpMm9fZG1hX2ZyZWUoJmMtPnBkZXYtPmRldiwgJnNnX2xpc3RbaV0pOwogCiBjbGVhbnVwOgogCWtmcmVlKHJlcGx5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jCmluZGV4IGRhNzE1ZTEuLmJlMmI1OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYwpAQCAtMTAwNCw3ICsxMDA0LDcgQEAKIAogCQlzaXplID0gaHJ0LT5udW1fZW50cmllcyAqIGhydC0+ZW50cnlfbGVuIDw8IDI7CiAJCWlmIChzaXplID4gYy0+aHJ0LmxlbikgewotCQkJaWYgKGkyb19kbWFfcmVhbGxvYyhkZXYsICZjLT5ocnQsIHNpemUsIEdGUF9LRVJORUwpKQorCQkJaWYgKGkyb19kbWFfcmVhbGxvYyhkZXYsICZjLT5ocnQsIHNpemUpKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJZWxzZQogCQkJCWhydCA9IGMtPmhydC52aXJ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9tZW1vcnkuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vbWVtb3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjYzk1YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vbWVtb3J5LmMKQEAgLTAsMCArMSwzMTMgQEAKKy8qCisgKglGdW5jdGlvbnMgdG8gaGFuZGxlIEkyTyBtZW1vcnkKKyAqCisgKglQdWxsZWQgZnJvbSB0aGUgaW5saW5lcyBpbiBpMm8gaGVhZGVycyBhbmQgdW5pbmxpbmVkCisgKgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKgl1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqCW9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImNvcmUuaCIKKworLyogUHJvdGVjdHMgb3VyIDMyLzY0Yml0IG1hc2sgc3dpdGNoaW5nICovCitzdGF0aWMgREVGSU5FX01VVEVYKG1lbV9sb2NrKTsKKworLyoqCisgKglpMm9fc2dfdGFibGVzaXplIC0gQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIFNHTAorICoJQGM6IEkyTyBjb250cm9sbGVyIGZvciB3aGljaCB0aGUgY2FsY3VsYXRpb24gc2hvdWxkIGJlIGRvbmUKKyAqCUBib2R5X3NpemU6IG1heGltdW0gYm9keSBzaXplIHVzZWQgZm9yIG1lc3NhZ2UgaW4gMzItYml0IHdvcmRzLgorICoKKyAqCVJldHVybiB0aGUgbWF4aW11bSBudW1iZXIgb2YgU0cgZWxlbWVudHMgaW4gYSBTRyBsaXN0LgorICovCit1MTYgaTJvX3NnX3RhYmxlc2l6ZShzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsIHUxNiBib2R5X3NpemUpCit7CisJaTJvX3N0YXR1c19ibG9jayAqc2IgPSBjLT5zdGF0dXNfYmxvY2sudmlydDsKKwl1MTYgc2dfY291bnQgPQorCSAgICAoc2ItPmluYm91bmRfZnJhbWVfc2l6ZSAtIHNpemVvZihzdHJ1Y3QgaTJvX21lc3NhZ2UpIC8gNCkgLQorCSAgICBib2R5X3NpemU7CisKKwlpZiAoYy0+cGFlX3N1cHBvcnQpIHsKKwkJLyoKKwkJICogZm9yIDY0LWJpdCBhIFNHIGF0dHJpYnV0ZSBlbGVtZW50IG11c3QgYmUgYWRkZWQgYW5kIGVhY2gKKwkJICogU0cgZWxlbWVudCBuZWVkcyAxMiBieXRlcyBpbnN0ZWFkIG9mIDguCisJCSAqLworCQlzZ19jb3VudCAtPSAyOworCQlzZ19jb3VudCAvPSAzOworCX0gZWxzZQorCQlzZ19jb3VudCAvPSAyOworCisJaWYgKGMtPnNob3J0X3JlcSAmJiAoc2dfY291bnQgPiA4KSkKKwkJc2dfY291bnQgPSA4OworCisJcmV0dXJuIHNnX2NvdW50OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaTJvX3NnX3RhYmxlc2l6ZSk7CisKKworLyoqCisgKglpMm9fZG1hX21hcF9zaW5nbGUgLSBNYXAgcG9pbnRlciB0byBjb250cm9sbGVyIGFuZCBmaWxsIGluIEkyTyBtZXNzYWdlLgorICoJQGM6IEkyTyBjb250cm9sbGVyCisgKglAcHRyOiBwb2ludGVyIHRvIHRoZSBkYXRhIHdoaWNoIHNob3VsZCBiZSBtYXBwZWQKKyAqCUBzaXplOiBzaXplIG9mIGRhdGEgaW4gYnl0ZXMKKyAqCUBkaXJlY3Rpb246IERNQV9UT19ERVZJQ0UgLyBETUFfRlJPTV9ERVZJQ0UKKyAqCUBzZ19wdHI6IHBvaW50ZXIgdG8gdGhlIFNHIGxpc3QgaW5zaWRlIHRoZSBJMk8gbWVzc2FnZQorICoKKyAqCVRoaXMgZnVuY3Rpb24gZG9lcyBhbGwgbmVjZXNzYXJ5IERNQSBoYW5kbGluZyBhbmQgYWxzbyB3cml0ZXMgdGhlIEkyTworICoJU0dMIGVsZW1lbnRzIGludG8gdGhlIEkyTyBtZXNzYWdlLiBGb3IgZGV0YWlscyBvbiBETUEgaGFuZGxpbmcgc2VlIGFsc28KKyAqCWRtYV9tYXBfc2luZ2xlKCkuIFRoZSBwb2ludGVyIHNnX3B0ciB3aWxsIG9ubHkgYmUgc2V0IHRvIHRoZSBlbmQgb2YgdGhlCisgKglTRyBsaXN0IGlmIHRoZSBhbGxvY2F0aW9uIHdhcyBzdWNjZXNzZnVsLgorICoKKyAqCVJldHVybnMgRE1BIGFkZHJlc3Mgd2hpY2ggbXVzdCBiZSBjaGVja2VkIGZvciBmYWlsdXJlcyB1c2luZworICoJZG1hX21hcHBpbmdfZXJyb3IoKS4KKyAqLworZG1hX2FkZHJfdCBpMm9fZG1hX21hcF9zaW5nbGUoc3RydWN0IGkyb19jb250cm9sbGVyICpjLCB2b2lkICpwdHIsCisJCQkJCSAgICBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJICAgIHUzMiAqKiBzZ19wdHIpCit7CisJdTMyIHNnX2ZsYWdzOworCXUzMiAqbXB0ciA9ICpzZ19wdHI7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKworCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisJY2FzZSBETUFfVE9fREVWSUNFOgorCQlzZ19mbGFncyA9IDB4ZDQwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgRE1BX0ZST01fREVWSUNFOgorCQlzZ19mbGFncyA9IDB4ZDAwMDAwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgcHRyLCBzaXplLCBkaXJlY3Rpb24pOworCWlmICghZG1hX21hcHBpbmdfZXJyb3IoJmMtPnBkZXYtPmRldiwgZG1hX2FkZHIpKSB7CisjaWZkZWYgQ09ORklHX0kyT19FWFRfQURBUFRFQ19ETUE2NAorCQlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGMtPnBhZV9zdXBwb3J0KSB7CisJCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoMHg3QzAyMDAwMik7CisJCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoUEFHRV9TSVpFKTsKKwkJfQorI2VuZGlmCisKKwkJKm1wdHIrKyA9IGNwdV90b19sZTMyKHNnX2ZsYWdzIHwgc2l6ZSk7CisJCSptcHRyKysgPSBjcHVfdG9fbGUzMihpMm9fZG1hX2xvdyhkbWFfYWRkcikpOworI2lmZGVmIENPTkZJR19JMk9fRVhUX0FEQVBURUNfRE1BNjQKKwkJaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSAmJiBjLT5wYWVfc3VwcG9ydCkKKwkJCSptcHRyKysgPSBjcHVfdG9fbGUzMihpMm9fZG1hX2hpZ2goZG1hX2FkZHIpKTsKKyNlbmRpZgorCQkqc2dfcHRyID0gbXB0cjsKKwl9CisJcmV0dXJuIGRtYV9hZGRyOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaTJvX2RtYV9tYXBfc2luZ2xlKTsKKworLyoqCisgKglpMm9fZG1hX21hcF9zZyAtIE1hcCBhIFNHIExpc3QgdG8gY29udHJvbGxlciBhbmQgZmlsbCBpbiBJMk8gbWVzc2FnZS4KKyAqCUBjOiBJMk8gY29udHJvbGxlcgorICoJQHNnOiBTRyBsaXN0IHRvIGJlIG1hcHBlZAorICoJQHNnX2NvdW50OiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIFNHIGxpc3QKKyAqCUBkaXJlY3Rpb246IERNQV9UT19ERVZJQ0UgLyBETUFfRlJPTV9ERVZJQ0UKKyAqCUBzZ19wdHI6IHBvaW50ZXIgdG8gdGhlIFNHIGxpc3QgaW5zaWRlIHRoZSBJMk8gbWVzc2FnZQorICoKKyAqCVRoaXMgZnVuY3Rpb24gZG9lcyBhbGwgbmVjZXNzYXJ5IERNQSBoYW5kbGluZyBhbmQgYWxzbyB3cml0ZXMgdGhlIEkyTworICoJU0dMIGVsZW1lbnRzIGludG8gdGhlIEkyTyBtZXNzYWdlLiBGb3IgZGV0YWlscyBvbiBETUEgaGFuZGxpbmcgc2VlIGFsc28KKyAqCWRtYV9tYXBfc2coKS4gVGhlIHBvaW50ZXIgc2dfcHRyIHdpbGwgb25seSBiZSBzZXQgdG8gdGhlIGVuZCBvZiB0aGUgU0cKKyAqCWxpc3QgaWYgdGhlIGFsbG9jYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisgKgorICoJUmV0dXJucyAwIG9uIGZhaWx1cmUgb3IgMSBvbiBzdWNjZXNzLgorICovCitpbnQgaTJvX2RtYV9tYXBfc2coc3RydWN0IGkyb19jb250cm9sbGVyICpjLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCSAgICBpbnQgc2dfY291bnQsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwgdTMyICoqIHNnX3B0cikKK3sKKwl1MzIgc2dfZmxhZ3M7CisJdTMyICptcHRyID0gKnNnX3B0cjsKKworCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisJY2FzZSBETUFfVE9fREVWSUNFOgorCQlzZ19mbGFncyA9IDB4MTQwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgRE1BX0ZST01fREVWSUNFOgorCQlzZ19mbGFncyA9IDB4MTAwMDAwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXNnX2NvdW50ID0gZG1hX21hcF9zZygmYy0+cGRldi0+ZGV2LCBzZywgc2dfY291bnQsIGRpcmVjdGlvbik7CisJaWYgKCFzZ19jb3VudCkKKwkJcmV0dXJuIDA7CisKKyNpZmRlZiBDT05GSUdfSTJPX0VYVF9BREFQVEVDX0RNQTY0CisJaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSAmJiBjLT5wYWVfc3VwcG9ydCkgeworCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoMHg3QzAyMDAwMik7CisJCSptcHRyKysgPSBjcHVfdG9fbGUzMihQQUdFX1NJWkUpOworCX0KKyNlbmRpZgorCisJd2hpbGUgKHNnX2NvdW50LS0gPiAwKSB7CisJCWlmICghc2dfY291bnQpCisJCQlzZ19mbGFncyB8PSAweEMwMDAwMDAwOworCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoc2dfZmxhZ3MgfCBzZ19kbWFfbGVuKHNnKSk7CisJCSptcHRyKysgPSBjcHVfdG9fbGUzMihpMm9fZG1hX2xvdyhzZ19kbWFfYWRkcmVzcyhzZykpKTsKKyNpZmRlZiBDT05GSUdfSTJPX0VYVF9BREFQVEVDX0RNQTY0CisJCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgJiYgYy0+cGFlX3N1cHBvcnQpCisJCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoaTJvX2RtYV9oaWdoKHNnX2RtYV9hZGRyZXNzKHNnKSkpOworI2VuZGlmCisJCXNnID0gc2dfbmV4dChzZyk7CisJfQorCSpzZ19wdHIgPSBtcHRyOworCisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpMm9fZG1hX21hcF9zZyk7CisKKy8qKgorICoJaTJvX2RtYV9hbGxvYyAtIEFsbG9jYXRlIERNQSBtZW1vcnkKKyAqCUBkZXY6IHN0cnVjdCBkZXZpY2UgcG9pbnRlciB0byB0aGUgUENJIGRldmljZSBvZiB0aGUgSTJPIGNvbnRyb2xsZXIKKyAqCUBhZGRyOiBpMm9fZG1hIHN0cnVjdCB3aGljaCBzaG91bGQgZ2V0IHRoZSBETUEgYnVmZmVyCisgKglAbGVuOiBsZW5ndGggb2YgdGhlIG5ldyBETUEgbWVtb3J5CisgKgorICoJQWxsb2NhdGUgYSBjb2hlcmVudCBETUEgbWVtb3J5IGFuZCB3cml0ZSB0aGUgcG9pbnRlcnMgaW50byBhZGRyLgorICoKKyAqCVJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FTk9NRU0gb24gZmFpbHVyZS4KKyAqLworaW50IGkyb19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaTJvX2RtYSAqYWRkciwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlpbnQgZG1hXzY0ID0gMDsKKworCW11dGV4X2xvY2soJm1lbV9sb2NrKTsKKwlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIChwZGV2LT5kbWFfbWFzayA9PSBETUFfNjRCSVRfTUFTSykpIHsKKwkJZG1hXzY0ID0gMTsKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSB7CisJCQltdXRleF91bmxvY2soJm1lbV9sb2NrKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJYWRkci0+dmlydCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIGxlbiwgJmFkZHItPnBoeXMsIEdGUF9LRVJORUwpOworCisJaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSAmJiBkbWFfNjQpCisJCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImkybzogdW5hYmxlIHRvIHNldCA2NC1iaXQgRE1BIik7CisJbXV0ZXhfdW5sb2NrKCZtZW1fbG9jayk7CisKKwlpZiAoIWFkZHItPnZpcnQpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KGFkZHItPnZpcnQsIDAsIGxlbik7CisJYWRkci0+bGVuID0gbGVuOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpMm9fZG1hX2FsbG9jKTsKKworCisvKioKKyAqCWkyb19kbWFfZnJlZSAtIEZyZWUgRE1BIG1lbW9yeQorICoJQGRldjogc3RydWN0IGRldmljZSBwb2ludGVyIHRvIHRoZSBQQ0kgZGV2aWNlIG9mIHRoZSBJMk8gY29udHJvbGxlcgorICoJQGFkZHI6IGkyb19kbWEgc3RydWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBETUEgYnVmZmVyCisgKgorICoJRnJlZSBhIGNvaGVyZW50IERNQSBtZW1vcnkgYW5kIHNldCB2aXJ0dWFsIGFkZHJlc3Mgb2YgYWRkciB0byBOVUxMLgorICovCit2b2lkIGkyb19kbWFfZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyKQoreworCWlmIChhZGRyLT52aXJ0KSB7CisJCWlmIChhZGRyLT5waHlzKQorCQkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBhZGRyLT5sZW4sIGFkZHItPnZpcnQsCisJCQkJCSAgYWRkci0+cGh5cyk7CisJCWVsc2UKKwkJCWtmcmVlKGFkZHItPnZpcnQpOworCQlhZGRyLT52aXJ0ID0gTlVMTDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpMm9fZG1hX2ZyZWUpOworCisKKy8qKgorICoJaTJvX2RtYV9yZWFsbG9jIC0gUmVhbGxvYyBETUEgbWVtb3J5CisgKglAZGV2OiBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2Ugb2YgdGhlIEkyTyBjb250cm9sbGVyCisgKglAYWRkcjogcG9pbnRlciB0byBhIGkyb19kbWEgc3RydWN0IERNQSBidWZmZXIKKyAqCUBsZW46IG5ldyBsZW5ndGggb2YgbWVtb3J5CisgKgorICoJSWYgdGhlcmUgd2FzIHNvbWV0aGluZyBhbGxvY2F0ZWQgaW4gdGhlIGFkZHIsIGZyZWUgaXQgZmlyc3QuIElmIGxlbiA+IDAKKyAqCXRoYW4gdHJ5IHRvIGFsbG9jYXRlIGl0IGFuZCB3cml0ZSB0aGUgYWRkcmVzc2VzIGJhY2sgdG8gdGhlIGFkZHIKKyAqCXN0cnVjdHVyZS4gSWYgbGVuID09IDAgc2V0IHRoZSB2aXJ0dWFsIGFkZHJlc3MgdG8gTlVMTC4KKyAqCisgKglSZXR1cm5zIHRoZSAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgaTJvX2RtYV9yZWFsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGkyb19kbWEgKmFkZHIsIHNpemVfdCBsZW4pCit7CisJaTJvX2RtYV9mcmVlKGRldiwgYWRkcik7CisKKwlpZiAobGVuKQorCQlyZXR1cm4gaTJvX2RtYV9hbGxvYyhkZXYsIGFkZHIsIGxlbik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGkyb19kbWFfcmVhbGxvYyk7CisKKy8qCisgKglpMm9fcG9vbF9hbGxvYyAtIEFsbG9jYXRlIGFuIHNsYWIgY2FjaGUgYW5kIG1lbXBvb2wKKyAqCUBtZW1wb29sOiBwb2ludGVyIHRvIHN0cnVjdCBpMm9fcG9vbCB0byB3cml0ZSBkYXRhIGludG8uCisgKglAbmFtZTogbmFtZSB3aGljaCBpcyB1c2VkIHRvIGlkZW50aWZ5IGNhY2hlCisgKglAc2l6ZTogc2l6ZSBvZiBlYWNoIG9iamVjdAorICoJQG1pbl9ucjogbWluaW11bSBudW1iZXIgb2Ygb2JqZWN0cworICoKKyAqCUZpcnN0IGFsbG9jYXRlcyBhIHNsYWIgY2FjaGUgd2l0aCBuYW1lIGFuZCBzaXplLiBUaGVuIGFsbG9jYXRlcyBhCisgKgltZW1wb29sIHdoaWNoIHVzZXMgdGhlIHNsYWIgY2FjaGUgZm9yIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcuCisgKgorICoJUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgaTJvX3Bvb2xfYWxsb2Moc3RydWN0IGkyb19wb29sICpwb29sLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSBzaXplX3Qgc2l6ZSwgaW50IG1pbl9ucikKK3sKKwlwb29sLT5uYW1lID0ga21hbGxvYyhzdHJsZW4obmFtZSkgKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvb2wtPm5hbWUpCisJCWdvdG8gZXhpdDsKKwlzdHJjcHkocG9vbC0+bmFtZSwgbmFtZSk7CisKKwlwb29sLT5zbGFiID0KKwkgICAga21lbV9jYWNoZV9jcmVhdGUocG9vbC0+bmFtZSwgc2l6ZSwgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKwlpZiAoIXBvb2wtPnNsYWIpCisJCWdvdG8gZnJlZV9uYW1lOworCisJcG9vbC0+bWVtcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChtaW5fbnIsIHBvb2wtPnNsYWIpOworCWlmICghcG9vbC0+bWVtcG9vbCkKKwkJZ290byBmcmVlX3NsYWI7CisKKwlyZXR1cm4gMDsKKworZnJlZV9zbGFiOgorCWttZW1fY2FjaGVfZGVzdHJveShwb29sLT5zbGFiKTsKKworZnJlZV9uYW1lOgorCWtmcmVlKHBvb2wtPm5hbWUpOworCitleGl0OgorCXJldHVybiAtRU5PTUVNOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaTJvX3Bvb2xfYWxsb2MpOworCisvKgorICoJaTJvX3Bvb2xfZnJlZSAtIEZyZWUgc2xhYiBjYWNoZSBhbmQgbWVtcG9vbCBhZ2FpbgorICoJQG1lbXBvb2w6IHBvaW50ZXIgdG8gc3RydWN0IGkyb19wb29sIHdoaWNoIHNob3VsZCBiZSBmcmVlZAorICoKKyAqCU5vdGUgdGhhdCB5b3UgaGF2ZSB0byByZXR1cm4gYWxsIG9iamVjdHMgdG8gdGhlIG1lbXBvb2wgYWdhaW4gYmVmb3JlCisgKgljYWxsaW5nIGkyb19wb29sX2ZyZWUoKS4KKyAqLwordm9pZCBpMm9fcG9vbF9mcmVlKHN0cnVjdCBpMm9fcG9vbCAqcG9vbCkKK3sKKwltZW1wb29sX2Rlc3Ryb3kocG9vbC0+bWVtcG9vbCk7CisJa21lbV9jYWNoZV9kZXN0cm95KHBvb2wtPnNsYWIpOworCWtmcmVlKHBvb2wtPm5hbWUpOworfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGkyb19wb29sX2ZyZWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9wY2kuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vcGNpLmMKaW5kZXggNjg1YTg5NS4uNjEwZWYxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9wY2kuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL3BjaS5jCkBAIC0xODYsMzEgKzE4NiwyOSBAQAogCQl9CiAJfQogCi0JaWYgKGkyb19kbWFfYWxsb2MoZGV2LCAmYy0+c3RhdHVzLCA4LCBHRlBfS0VSTkVMKSkgeworCWlmIChpMm9fZG1hX2FsbG9jKGRldiwgJmMtPnN0YXR1cywgOCkpIHsKIAkJaTJvX3BjaV9mcmVlKGMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAoaTJvX2RtYV9hbGxvYyhkZXYsICZjLT5ocnQsIHNpemVvZihpMm9faHJ0KSwgR0ZQX0tFUk5FTCkpIHsKKwlpZiAoaTJvX2RtYV9hbGxvYyhkZXYsICZjLT5ocnQsIHNpemVvZihpMm9faHJ0KSkpIHsKIAkJaTJvX3BjaV9mcmVlKGMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAoaTJvX2RtYV9hbGxvYyhkZXYsICZjLT5kbGN0LCA4MTkyLCBHRlBfS0VSTkVMKSkgeworCWlmIChpMm9fZG1hX2FsbG9jKGRldiwgJmMtPmRsY3QsIDgxOTIpKSB7CiAJCWkyb19wY2lfZnJlZShjKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKGkyb19kbWFfYWxsb2MoZGV2LCAmYy0+c3RhdHVzX2Jsb2NrLCBzaXplb2YoaTJvX3N0YXR1c19ibG9jayksCi0JCQkgIEdGUF9LRVJORUwpKSB7CisJaWYgKGkyb19kbWFfYWxsb2MoZGV2LCAmYy0+c3RhdHVzX2Jsb2NrLCBzaXplb2YoaTJvX3N0YXR1c19ibG9jaykpKSB7CiAJCWkyb19wY2lfZnJlZShjKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKGkyb19kbWFfYWxsb2MKLQkgICAgKGRldiwgJmMtPm91dF9xdWV1ZSwKLQkgICAgIEkyT19NQVhfT1VUQk9VTkRfTVNHX0ZSQU1FUyAqIEkyT19PVVRCT1VORF9NU0dfRlJBTUVfU0laRSAqCi0JICAgICBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCkpIHsKKwlpZiAoaTJvX2RtYV9hbGxvYyhkZXYsICZjLT5vdXRfcXVldWUsCisJCUkyT19NQVhfT1VUQk9VTkRfTVNHX0ZSQU1FUyAqIEkyT19PVVRCT1VORF9NU0dfRlJBTUVfU0laRSAqCisJCQkJc2l6ZW9mKHUzMikpKSB7CiAJCWkyb19wY2lfZnJlZShjKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2RyaXZlcnMvbWZkL0tjb25maWcKaW5kZXggMGRhZTI0NS4uNWE3OWQyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZworKysgYi9kcml2ZXJzL21mZC9LY29uZmlnCkBAIC01Miw2ICs1Miw4IEBACiAKIGNvbmZpZyBVQ0IxNDAwX0NPUkUKIAl0cmlzdGF0ZSAiUGhpbGlwcyBVQ0IxNDAwIENvcmUgZHJpdmVyIgorCWRlcGVuZHMgb24gQUM5N19CVVMKKwlkZXBlbmRzIG9uIEdQSU9MSUIKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgVUNCMTQwMCBjb3JlIGZ1bmN0aW9ucy4KIAkgIFRoZSBVQ0IxNDAwIGlzIGFuIEFDOTcgYXVkaW8gY29kZWMuCkBAIC01OSw2ICs2MSwyMCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdWNiMTQwMF9jb3JlLgogCitjb25maWcgVFdMNDAzMF9DT1JFCisJYm9vbCAiVGV4YXMgSW5zdHJ1bWVudHMgVFdMNDAzMC9UUFM2NTl4MCBTdXBwb3J0IgorCWRlcGVuZHMgb24gSTJDPXkgJiYgR0VORVJJQ19IQVJESVJRUyAmJiAoQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzKQorCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSBpZiB5b3UgaGF2ZSBUV0w0MDMwIGZhbWlseSBjaGlwIG9uIHlvdXIgYm9hcmQuCisJICBUaGlzIGNvcmUgZHJpdmVyIHByb3ZpZGVzIHJlZ2lzdGVyIGFjY2VzcyBhbmQgSVJRIGhhbmRsaW5nCisJICBmYWNpbGl0aWVzLCBhbmQgcmVnaXN0ZXJzIGRldmljZXMgZm9yIHRoZSB2YXJpb3VzIGZ1bmN0aW9ucworCSAgc28gdGhhdCBmdW5jdGlvbi1zcGVjaWZpYyBkcml2ZXJzIGNhbiBiaW5kIHRvIHRoZW0uCisKKwkgIFRoZXNlIG11bHRpLWZ1bmN0aW9uIGNoaXBzIGFyZSBmb3VuZCBvbiBtYW55IE9NQVAyIGFuZCBPTUFQMworCSAgYm9hcmRzLCBwcm92aWRpbmcgcG93ZXIgbWFuYWdlbWVudCwgUlRDLCBHUElPLCBrZXlwYWQsIGEKKwkgIGhpZ2ggc3BlZWQgVVNCIE9URyB0cmFuc2NlaXZlciwgYW4gYXVkaW8gY29kZWMgKG9uIG1vc3QKKwkgIHZlcnNpb25zKSBhbmQgbWFueSBvdGhlciBmZWF0dXJlcy4KKwogY29uZmlnIE1GRF9UTUlPCiAJYm9vbAogCWRlZmF1bHQgbgpAQCAtODcsNiArMTAzLDQ0IEBACiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVG9zaGliYSBNb2JpbGUgSU8gQ29udHJvbGxlciBUQzYzOTNYQgogCitjb25maWcgTUZEX1dNODQwMAorCXRyaXN0YXRlICJTdXBwb3J0IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTg0MDAiCisJaGVscAorCSAgU3VwcG9ydCBmb3IgdGhlIFdvbGZzb24gTWljcm9lbGVjcm9uaWNzIFdNODQwMCBQTUlDIGFuZCBhdWRpbworCSAgQ09ERUMuICBUaGlzIGRyaXZlciBhZGRzIHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0IGZvciBhY2Nlc3NpbmcKKwkgIHRoZSBkZXZpY2UsIGFkZGl0aW9uYWwgZHJpdmVycyBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlCisJICB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZGV2aWNlLgorCitjb25maWcgTUZEX1dNODM1MAorCXRyaXN0YXRlCisKK2NvbmZpZyBNRkRfV004MzUwX0NPTkZJR19NT0RFXzAKKwlib29sCisJZGVwZW5kcyBvbiBNRkRfV004MzUwCisKK2NvbmZpZyBNRkRfV004MzUwX0NPTkZJR19NT0RFXzEKKwlib29sCisJZGVwZW5kcyBvbiBNRkRfV004MzUwCisKK2NvbmZpZyBNRkRfV004MzUwX0NPTkZJR19NT0RFXzIKKwlib29sCisJZGVwZW5kcyBvbiBNRkRfV004MzUwCisKK2NvbmZpZyBNRkRfV004MzUwX0NPTkZJR19NT0RFXzMKKwlib29sCisJZGVwZW5kcyBvbiBNRkRfV004MzUwCisKK2NvbmZpZyBNRkRfV004MzUwX0kyQworCXRyaXN0YXRlICJTdXBwb3J0IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTgzNTAgd2l0aCBJMkMiCisJc2VsZWN0IE1GRF9XTTgzNTAKKwlkZXBlbmRzIG9uIEkyQworCWhlbHAKKwkgIFRoZSBXTTgzNTAgaXMgYW4gaW50ZWdyYXRlZCBhdWRpbyBhbmQgcG93ZXIgbWFuYWdlbWVudAorCSAgc3Vic3lzdGVtIHdpdGggd2F0Y2hkb2cgYW5kIFJUQyBmdW5jdGlvbmFsaXR5IGZvciBlbWJlZGRlZAorCSAgc3lzdGVtcy4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgY29yZSBzdXBwb3J0IGZvciB0aGUgV004MzUwIHdpdGgKKwkgIEkyQyBhcyB0aGUgY29udHJvbCBpbnRlcmZhY2UuICBBZGRpdGlvbmFsIG9wdGlvbnMgbXVzdCBiZQorCSAgc2VsZWN0ZWQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBjaGlwLgorCiBlbmRtZW51CiAKIG1lbnUgIk11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKaW5kZXggNmFiZWJlMy4uNjhlMjM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKQEAgLTEyLDYgKzEyLDEzIEBACiBvYmotJChDT05GSUdfTUZEX1RDNjM4N1hCKQkrPSB0YzYzODd4Yi5vCiBvYmotJChDT05GSUdfTUZEX1RDNjM5M1hCKQkrPSB0YzYzOTN4Yi5vCiAKK29iai0kKENPTkZJR19NRkRfV004NDAwKQkrPSB3bTg0MDAtY29yZS5vCit3bTgzNTAtb2JqcwkJCTo9IHdtODM1MC1jb3JlLm8gd204MzUwLXJlZ21hcC5vIHdtODM1MC1ncGlvLm8KK29iai0kKENPTkZJR19NRkRfV004MzUwKQkrPSB3bTgzNTAubworb2JqLSQoQ09ORklHX01GRF9XTTgzNTBfSTJDKQkrPSB3bTgzNTAtaTJjLm8KKworb2JqLSQoQ09ORklHX1RXTDQwMzBfQ09SRSkJKz0gdHdsNDAzMC1jb3JlLm8KKwogb2JqLSQoQ09ORklHX01GRF9DT1JFKQkJKz0gbWZkLWNvcmUubwogCiBvYmotJChDT05GSUdfTUNQKQkJKz0gbWNwLWNvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYXNpYzMuYyBiL2RyaXZlcnMvbWZkL2FzaWMzLmMKaW5kZXggYmE1YWEyMC4uZTRjMGRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYXNpYzMuYworKysgYi9kcml2ZXJzL21mZC9hc2ljMy5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkJCQkJaXJxbnIgPSBhc2ljLT5pcnFfYmFzZSArCiAJCQkJCQkoQVNJQzNfR1BJT1NfUEVSX0JBTksgKiBiYW5rKQogCQkJCQkJKyBpOwotCQkJCQlkZXNjID0gaXJxX2Rlc2MgKyBpcnFucjsKKwkJCQkJZGVzYyA9IGlycV90b19kZXNjKGlycW5yKTsKIAkJCQkJZGVzYy0+aGFuZGxlX2lycShpcnFuciwgZGVzYyk7CiAJCQkJCWlmIChhc2ljLT5pcnFfYm90aGVkZ2VbYmFua10gJiBiaXQpCiAJCQkJCQlhc2ljM19pcnFfZmxpcF9lZGdlKGFzaWMsIGJhc2UsCkBAIC0xMzYsNyArMTM2LDcgQEAKIAkJZm9yIChpID0gQVNJQzNfTlVNX0dQSU9TOyBpIDwgQVNJQzNfTlJfSVJRUzsgaSsrKSB7CiAJCQkvKiBUaGV5IHN0YXJ0IGF0IGJpdCA0IGFuZCBnbyB1cCAqLwogCQkJaWYgKHN0YXR1cyAmICgxIDw8IChpIC0gQVNJQzNfTlVNX0dQSU9TICsgNCkpKSB7Ci0JCQkJZGVzYyA9IGlycV9kZXNjICsgYXNpYy0+aXJxX2Jhc2UgKyBpOworCQkJCWRlc2MgPSBpcnFfdG9fZGVzYyhhc2ljLT5pcnFfYmFzZSArIGkpOwogCQkJCWRlc2MtPmhhbmRsZV9pcnEoYXNpYy0+aXJxX2Jhc2UgKyBpLAogCQkJCQkJIGRlc2MpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvZGE5MDN4LmMgYi9kcml2ZXJzL21mZC9kYTkwM3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTczMjZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvZGE5MDN4LmMKQEAgLTAsMCArMSw1NjMgQEAKKy8qCisgKiBCYXNlIGRyaXZlciBmb3IgRGlhbG9nIFNlbWljb25kdWN0b3IgREE5MDMwL0RBOTAzNAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb21wdWxhYiwgTHRkLgorICogCU1pa2UgUmFwb3BvcnQgPG1pa2VAY29tcHVsYWIuY28uaWw+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqIAlFcmljIE1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGE5MDN4Lmg+CisKKyNkZWZpbmUgREE5MDMwX0NISVBfSUQJCTB4MDAKKyNkZWZpbmUgREE5MDMwX0VWRU5UX0EJCTB4MDEKKyNkZWZpbmUgREE5MDMwX0VWRU5UX0IJCTB4MDIKKyNkZWZpbmUgREE5MDMwX0VWRU5UX0MJCTB4MDMKKyNkZWZpbmUgREE5MDMwX1NUQVRVUwkJMHgwNAorI2RlZmluZSBEQTkwMzBfSVJRX01BU0tfQQkweDA1CisjZGVmaW5lIERBOTAzMF9JUlFfTUFTS19CCTB4MDYKKyNkZWZpbmUgREE5MDMwX0lSUV9NQVNLX0MJMHgwNworI2RlZmluZSBEQTkwMzBfU1lTX0NUUkxfQQkweDA4CisjZGVmaW5lIERBOTAzMF9TWVNfQ1RSTF9CCTB4MDkKKyNkZWZpbmUgREE5MDMwX0ZBVUxUX0xPRwkweDBhCisKKyNkZWZpbmUgREE5MDM0X0NISVBfSUQJCTB4MDAKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0EJCTB4MDEKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0IJCTB4MDIKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0MJCTB4MDMKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0QJCTB4MDQKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19BCQkweDA1CisjZGVmaW5lIERBOTAzNF9TVEFUVVNfQgkJMHgwNgorI2RlZmluZSBEQTkwMzRfSVJRX01BU0tfQQkweDA3CisjZGVmaW5lIERBOTAzNF9JUlFfTUFTS19CCTB4MDgKKyNkZWZpbmUgREE5MDM0X0lSUV9NQVNLX0MJMHgwOQorI2RlZmluZSBEQTkwMzRfSVJRX01BU0tfRAkweDBhCisjZGVmaW5lIERBOTAzNF9TWVNfQ1RSTF9BCTB4MGIKKyNkZWZpbmUgREE5MDM0X1NZU19DVFJMX0IJMHgwYworI2RlZmluZSBEQTkwMzRfRkFVTFRfTE9HCTB4MGQKKworc3RydWN0IGRhOTAzeF9jaGlwOworCitzdHJ1Y3QgZGE5MDN4X2NoaXBfb3BzIHsKKwlpbnQJKCppbml0X2NoaXApKHN0cnVjdCBkYTkwM3hfY2hpcCAqKTsKKwlpbnQJKCp1bm1hc2tfZXZlbnRzKShzdHJ1Y3QgZGE5MDN4X2NoaXAgKiwgdW5zaWduZWQgaW50IGV2ZW50cyk7CisJaW50CSgqbWFza19ldmVudHMpKHN0cnVjdCBkYTkwM3hfY2hpcCAqLCB1bnNpZ25lZCBpbnQgZXZlbnRzKTsKKwlpbnQJKCpyZWFkX2V2ZW50cykoc3RydWN0IGRhOTAzeF9jaGlwICosIHVuc2lnbmVkIGludCAqZXZlbnRzKTsKKwlpbnQJKCpyZWFkX3N0YXR1cykoc3RydWN0IGRhOTAzeF9jaGlwICosIHVuc2lnbmVkIGludCAqc3RhdHVzKTsKK307CisKK3N0cnVjdCBkYTkwM3hfY2hpcCB7CisJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBkYTkwM3hfY2hpcF9vcHMJKm9wczsKKworCWludAkJCXR5cGU7CisJdWludDMyX3QJCWV2ZW50c19tYXNrOworCisJc3RydWN0IG11dGV4CQlsb2NrOworCXN0cnVjdCB3b3JrX3N0cnVjdAlpcnFfd29yazsKKworCXN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkIG5vdGlmaWVyX2xpc3Q7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBfX2RhOTAzeF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJaW50IHJlZywgdWludDhfdCAqdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHJlYWRpbmcgYXQgMHglMDJ4XG4iLCByZWcpOworCQlyZXR1cm4gcmV0OworCX0KKworCSp2YWwgPSAodWludDhfdClyZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZGE5MDN4X3JlYWRzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCByZWcsCisJCQkJIGludCBsZW4sIHVpbnQ4X3QgKnZhbCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCByZWcsIGxlbiwgdmFsKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCByZWFkaW5nIGZyb20gMHglMDJ4XG4iLCByZWcpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19kYTkwM3hfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgaW50IHJlZywgdWludDhfdCB2YWwpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgd3JpdGluZyAweCUwMnggdG8gMHglMDJ4XG4iLAorCQkJCXZhbCwgcmVnKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZGE5MDN4X3dyaXRlcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmVnLAorCQkJCSAgaW50IGxlbiwgdWludDhfdCAqdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCByZWcsIGxlbiwgdmFsKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB3cml0aW5ncyB0byAweCUwMnhcbiIsIHJlZyk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZGE5MDN4X3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQl1bnNpZ25lZCBpbnQgZXZlbnRzKQoreworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJY2hpcC0+b3BzLT51bm1hc2tfZXZlbnRzKGNoaXAsIGV2ZW50cyk7CisJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZjaGlwLT5ub3RpZmllcl9saXN0LCBuYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYTkwM3hfcmVnaXN0ZXJfbm90aWZpZXIpOworCitpbnQgZGE5MDN4X3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCXVuc2lnbmVkIGludCBldmVudHMpCit7CisJc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwljaGlwLT5vcHMtPm1hc2tfZXZlbnRzKGNoaXAsIGV2ZW50cyk7CisJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmNoaXAtPm5vdGlmaWVyX2xpc3QsIG5iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRhOTAzeF91bnJlZ2lzdGVyX25vdGlmaWVyKTsKKworaW50IGRhOTAzeF93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgdmFsKQoreworCXJldHVybiBfX2RhOTAzeF93cml0ZSh0b19pMmNfY2xpZW50KGRldiksIHJlZywgdmFsKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRhOTAzeF93cml0ZSk7CisKK2ludCBkYTkwM3hfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgKnZhbCkKK3sKKwlyZXR1cm4gX19kYTkwM3hfcmVhZCh0b19pMmNfY2xpZW50KGRldiksIHJlZywgdmFsKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRhOTAzeF9yZWFkKTsKKworaW50IGRhOTAzeF9zZXRfYml0cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgYml0X21hc2spCit7CisJc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdWludDhfdCByZWdfdmFsOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CisKKwlyZXQgPSBfX2RhOTAzeF9yZWFkKGNoaXAtPmNsaWVudCwgcmVnLCAmcmVnX3ZhbCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpZiAoKHJlZ192YWwgJiBiaXRfbWFzaykgPT0gMCkgeworCQlyZWdfdmFsIHw9IGJpdF9tYXNrOworCQlyZXQgPSBfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIHJlZywgcmVnX3ZhbCk7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRhOTAzeF9zZXRfYml0cyk7CisKK2ludCBkYTkwM3hfY2xyX2JpdHMoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IGJpdF9tYXNrKQoreworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVpbnQ4X3QgcmVnX3ZhbDsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOworCisJcmV0ID0gX19kYTkwM3hfcmVhZChjaGlwLT5jbGllbnQsIHJlZywgJnJlZ192YWwpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWYgKHJlZ192YWwgJiBiaXRfbWFzaykgeworCQlyZWdfdmFsICY9IH5iaXRfbWFzazsKKwkJcmV0ID0gX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCByZWcsIHJlZ192YWwpOworCX0KK291dDoKKwltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYTkwM3hfY2xyX2JpdHMpOworCitpbnQgZGE5MDN4X3VwZGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgdmFsLCB1aW50OF90IG1hc2spCit7CisJc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdWludDhfdCByZWdfdmFsOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CisKKwlyZXQgPSBfX2RhOTAzeF9yZWFkKGNoaXAtPmNsaWVudCwgcmVnLCAmcmVnX3ZhbCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpZiAoKHJlZ192YWwgJiBtYXNrKSAhPSB2YWwpIHsKKwkJcmVnX3ZhbCA9IChyZWdfdmFsICYgfm1hc2spIHwgdmFsOworCQlyZXQgPSBfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIHJlZywgcmVnX3ZhbCk7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRhOTAzeF91cGRhdGUpOworCitpbnQgZGE5MDN4X3F1ZXJ5X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBzYml0cykKK3sKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKKworCWNoaXAtPm9wcy0+cmVhZF9zdGF0dXMoY2hpcCwgJnN0YXR1cyk7CisJcmV0dXJuICgoc3RhdHVzICYgc2JpdHMpID09IHNiaXRzKTsKK30KK0VYUE9SVF9TWU1CT0woZGE5MDN4X3F1ZXJ5X3N0YXR1cyk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRhOTAzMF9pbml0X2NoaXAoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwKQoreworCXVpbnQ4X3QgY2hpcF9pZDsKKwlpbnQgZXJyOworCisJZXJyID0gX19kYTkwM3hfcmVhZChjaGlwLT5jbGllbnQsIERBOTAzMF9DSElQX0lELCAmY2hpcF9pZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IF9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgREE5MDMwX1NZU19DVFJMX0EsIDB4RTgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlkZXZfaW5mbyhjaGlwLT5kZXYsICJEQTkwMzAgKENISVAgSUQ6IDB4JTAyeCkgZGV0ZWN0ZWRcbiIsIGNoaXBfaWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhOTAzMF91bm1hc2tfZXZlbnRzKHN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGV2ZW50cykKK3sKKwl1aW50OF90IHZbM107CisKKwljaGlwLT5ldmVudHNfbWFzayAmPSB+ZXZlbnRzOworCisJdlswXSA9IChjaGlwLT5ldmVudHNfbWFzayAmIDB4ZmYpOworCXZbMV0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgPj4gOCkgJiAweGZmOworCXZbMl0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgPj4gMTYpICYgMHhmZjsKKworCXJldHVybiBfX2RhOTAzeF93cml0ZXMoY2hpcC0+Y2xpZW50LCBEQTkwMzBfSVJRX01BU0tfQSwgMywgdik7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDMwX21hc2tfZXZlbnRzKHN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGV2ZW50cykKK3sKKwl1aW50OF90IHZbM107CisKKwljaGlwLT5ldmVudHNfbWFzayAmPSB+ZXZlbnRzOworCisJdlswXSA9IChjaGlwLT5ldmVudHNfbWFzayAmIDB4ZmYpOworCXZbMV0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgPj4gOCkgJiAweGZmOworCXZbMl0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgPj4gMTYpICYgMHhmZjsKKworCXJldHVybiBfX2RhOTAzeF93cml0ZXMoY2hpcC0+Y2xpZW50LCBEQTkwMzBfSVJRX01BU0tfQSwgMywgdik7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDMwX3JlYWRfZXZlbnRzKHN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50ICpldmVudHMpCit7CisJdWludDhfdCB2WzNdID0gezAsIDAsIDB9OworCWludCByZXQ7CisKKwlyZXQgPSBfX2RhOTAzeF9yZWFkcyhjaGlwLT5jbGllbnQsIERBOTAzMF9FVkVOVF9BLCAzLCB2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCSpldmVudHMgPSAodlsyXSA8PCAxNikgfCAodlsxXSA8PCA4KSB8IHZbMF07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDMwX3JlYWRfc3RhdHVzKHN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50ICpzdGF0dXMpCit7CisJcmV0dXJuIF9fZGE5MDN4X3JlYWQoY2hpcC0+Y2xpZW50LCBEQTkwMzBfU1RBVFVTLCAodWludDhfdCAqKXN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDM0X2luaXRfY2hpcChzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXApCit7CisJdWludDhfdCBjaGlwX2lkOworCWludCBlcnI7CisKKwllcnIgPSBfX2RhOTAzeF9yZWFkKGNoaXAtPmNsaWVudCwgREE5MDM0X0NISVBfSUQsICZjaGlwX2lkKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCBEQTkwMzRfU1lTX0NUUkxfQSwgMHhFOCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIGF2b2lkIFNSQU0gcG93ZXIgb2ZmIGR1cmluZyBzbGVlcCovCisJX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCAweDEwLCAweDA3KTsKKwlfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIDB4MTEsIDB4ZmYpOworCV9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgMHgxMiwgMHhmZik7CisKKwkvKiBFbmFibGUgdGhlIE9OS0VZIHBvd2VyIGRvd24gZnVuY3Rpb25hbGl0eSAqLworCV9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgREE5MDM0X1NZU19DVFJMX0IsIDB4MjApOworCV9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgREE5MDM0X1NZU19DVFJMX0EsIDB4NjApOworCisJLyogd29ya2Fyb3VuZCB0byBtYWtlIExFRHMgd29yayAqLworCV9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgMHg5MCwgMHgwMSk7CisJX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCAweEIwLCAweDA4KTsKKworCS8qIG1ha2UgQURUVjEgYW5kIFNEVFYxIGVmZmVjdGl2ZSAqLworCV9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgMHgyMCwgMHgwMCk7CisKKwlkZXZfaW5mbyhjaGlwLT5kZXYsICJEQTkwMzQgKENISVAgSUQ6IDB4JTAyeCkgZGV0ZWN0ZWRcbiIsIGNoaXBfaWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhOTAzNF91bm1hc2tfZXZlbnRzKHN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGV2ZW50cykKK3sKKwl1aW50OF90IHZbNF07CisKKwljaGlwLT5ldmVudHNfbWFzayAmPSB+ZXZlbnRzOworCisJdlswXSA9IChjaGlwLT5ldmVudHNfbWFzayAmIDB4ZmYpOworCXZbMV0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgPj4gOCkgJiAweGZmOworCXZbMl0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgPj4gMTYpICYgMHhmZjsKKwl2WzNdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDI0KSAmIDB4ZmY7CisKKwlyZXR1cm4gX19kYTkwM3hfd3JpdGVzKGNoaXAtPmNsaWVudCwgREE5MDM0X0lSUV9NQVNLX0EsIDQsIHYpOworfQorCitzdGF0aWMgaW50IGRhOTAzNF9tYXNrX2V2ZW50cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBldmVudHMpCit7CisJdWludDhfdCB2WzRdOworCisJY2hpcC0+ZXZlbnRzX21hc2sgfD0gZXZlbnRzOworCisJdlswXSA9IChjaGlwLT5ldmVudHNfbWFzayAmIDB4ZmYpOworCXZbMV0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgPj4gOCkgJiAweGZmOworCXZbMl0gPSAoY2hpcC0+ZXZlbnRzX21hc2sgPj4gMTYpICYgMHhmZjsKKwl2WzNdID0gKGNoaXAtPmV2ZW50c19tYXNrID4+IDI0KSAmIDB4ZmY7CisKKwlyZXR1cm4gX19kYTkwM3hfd3JpdGVzKGNoaXAtPmNsaWVudCwgREE5MDM0X0lSUV9NQVNLX0EsIDQsIHYpOworfQorCitzdGF0aWMgaW50IGRhOTAzNF9yZWFkX2V2ZW50cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCAqZXZlbnRzKQoreworCXVpbnQ4X3Qgdls0XSA9IHswLCAwLCAwLCAwfTsKKwlpbnQgcmV0OworCisJcmV0ID0gX19kYTkwM3hfcmVhZHMoY2hpcC0+Y2xpZW50LCBEQTkwMzRfRVZFTlRfQSwgNCwgdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkqZXZlbnRzID0gKHZbM10gPDwgMjQpIHwgKHZbMl0gPDwgMTYpIHwgKHZbMV0gPDwgOCkgfCB2WzBdOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhOTAzNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCAqc3RhdHVzKQoreworCXVpbnQ4X3QgdlsyXSA9IHswLCAwfTsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IF9fZGE5MDN4X3JlYWRzKGNoaXAtPmNsaWVudCwgREE5MDM0X1NUQVRVU19BLCAyLCB2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJKnN0YXR1cyA9ICh2WzFdIDw8IDgpIHwgdlswXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGE5MDN4X2lycV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRhOTAzeF9jaGlwLCBpcnFfd29yayk7CisJdW5zaWduZWQgaW50IGV2ZW50cyA9IDA7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoY2hpcC0+b3BzLT5yZWFkX2V2ZW50cyhjaGlwLCAmZXZlbnRzKSkKKwkJCWJyZWFrOworCisJCWV2ZW50cyAmPSB+Y2hpcC0+ZXZlbnRzX21hc2s7CisJCWlmIChldmVudHMgPT0gMCkKKwkJCWJyZWFrOworCisJCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oCisJCQkJJmNoaXAtPm5vdGlmaWVyX2xpc3QsIGV2ZW50cywgTlVMTCk7CisJfQorCWVuYWJsZV9pcnEoY2hpcC0+Y2xpZW50LT5pcnEpOworfQorCitzdGF0aWMgaW50IGRhOTAzeF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGRhdGE7CisKKwlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKwkodm9pZClzY2hlZHVsZV93b3JrKCZjaGlwLT5pcnFfd29yayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGE5MDN4X2NoaXBfb3BzIGRhOTAzeF9vcHNbXSA9IHsKKwlbMF0gPSB7CisJCS5pbml0X2NoaXAJPSBkYTkwMzBfaW5pdF9jaGlwLAorCQkudW5tYXNrX2V2ZW50cwk9IGRhOTAzMF91bm1hc2tfZXZlbnRzLAorCQkubWFza19ldmVudHMJPSBkYTkwMzBfbWFza19ldmVudHMsCisJCS5yZWFkX2V2ZW50cwk9IGRhOTAzMF9yZWFkX2V2ZW50cywKKwkJLnJlYWRfc3RhdHVzCT0gZGE5MDMwX3JlYWRfc3RhdHVzLAorCX0sCisJWzFdID0geworCQkuaW5pdF9jaGlwCT0gZGE5MDM0X2luaXRfY2hpcCwKKwkJLnVubWFza19ldmVudHMJPSBkYTkwMzRfdW5tYXNrX2V2ZW50cywKKwkJLm1hc2tfZXZlbnRzCT0gZGE5MDM0X21hc2tfZXZlbnRzLAorCQkucmVhZF9ldmVudHMJPSBkYTkwMzRfcmVhZF9ldmVudHMsCisJCS5yZWFkX3N0YXR1cwk9IGRhOTAzNF9yZWFkX3N0YXR1cywKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgZGE5MDN4X2lkX3RhYmxlW10gPSB7CisJeyAiZGE5MDMwIiwgMCB9LAorCXsgImRhOTAzNCIsIDEgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGRhOTAzeF9pZF90YWJsZSk7CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IF9fcmVtb3ZlX3N1YmRldihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnVudXNlZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRhOTAzeF9yZW1vdmVfc3ViZGV2cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXApCit7CisJcmV0dXJuIGRldmljZV9mb3JfZWFjaF9jaGlsZChjaGlwLT5kZXYsIE5VTEwsIF9fcmVtb3ZlX3N1YmRldik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRhOTAzeF9hZGRfc3ViZGV2cyhzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAsCisJCQkJCXN0cnVjdCBkYTkwM3hfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IGRhOTAzeF9zdWJkZXZfaW5mbyAqc3ViZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IGksIHJldCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9zdWJkZXZzOyBpKyspIHsKKwkJc3ViZGV2ID0gJnBkYXRhLT5zdWJkZXZzW2ldOworCisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2Moc3ViZGV2LT5uYW1lLCBzdWJkZXYtPmlkKTsKKworCQlwZGV2LT5kZXYucGFyZW50ID0gY2hpcC0+ZGV2OworCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHN1YmRldi0+cGxhdGZvcm1fZGF0YTsKKworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CisJfQorCXJldHVybiAwOworCitmYWlsZWQ6CisJZGE5MDN4X3JlbW92ZV9zdWJkZXZzKGNoaXApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRhOTAzeF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkYTkwM3hfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCWludCByZXQ7CisKKwljaGlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhOTAzeF9jaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoaXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljaGlwLT5jbGllbnQgPSBjbGllbnQ7CisJY2hpcC0+ZGV2ID0gJmNsaWVudC0+ZGV2OworCWNoaXAtPm9wcyA9ICZkYTkwM3hfb3BzW2lkLT5kcml2ZXJfZGF0YV07CisKKwltdXRleF9pbml0KCZjaGlwLT5sb2NrKTsKKwlJTklUX1dPUksoJmNoaXAtPmlycV93b3JrLCBkYTkwM3hfaXJxX3dvcmspOworCUJMT0NLSU5HX0lOSVRfTk9USUZJRVJfSEVBRCgmY2hpcC0+bm90aWZpZXJfbGlzdCk7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBjaGlwKTsKKworCXJldCA9IGNoaXAtPm9wcy0+aW5pdF9jaGlwKGNoaXApOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWVfY2hpcDsKKworCS8qIG1hc2sgYW5kIGNsZWFyIGFsbCBJUlFzICovCisJY2hpcC0+ZXZlbnRzX21hc2sgPSAweGZmZmZmZmZmOworCWNoaXAtPm9wcy0+bWFza19ldmVudHMoY2hpcCwgY2hpcC0+ZXZlbnRzX21hc2spOworCWNoaXAtPm9wcy0+cmVhZF9ldmVudHMoY2hpcCwgJnRtcCk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShjbGllbnQtPmlycSwgZGE5MDN4X2lycV9oYW5kbGVyLAorCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJImRhOTAzeCIsIGNoaXApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsCisJCQkJY2xpZW50LT5pcnEpOworCQlnb3RvIG91dF9mcmVlX2NoaXA7CisJfQorCisJcmV0ID0gZGE5MDN4X2FkZF9zdWJkZXZzKGNoaXAsIHBkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlX2lycTsKKworCXJldHVybiAwOworCitvdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEoY2xpZW50LT5pcnEsIGNoaXApOworb3V0X2ZyZWVfY2hpcDoKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwlrZnJlZShjaGlwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBkYTkwM3hfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlkYTkwM3hfcmVtb3ZlX3N1YmRldnMoY2hpcCk7CisJa2ZyZWUoY2hpcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkYTkwM3hfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImRhOTAzeCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGRhOTAzeF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGRhOTAzeF9yZW1vdmUpLAorCS5pZF90YWJsZQk9IGRhOTAzeF9pZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRhOTAzeF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZkYTkwM3hfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGRhOTAzeF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGRhOTAzeF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmRhOTAzeF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoZGE5MDN4X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlBNSUMgRHJpdmVyIGZvciBEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTkwMzQiKTsKK01PRFVMRV9BVVRIT1IoIkVyaWMgTWlhbyA8ZXJpYy5taWFvQG1hcnZlbGwuY29tPiIKKwkgICAgICAiTWlrZSBSYXBvcG9ydCA8bWlrZUBjb21wdWxhYi5jby5pbD4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2h0Yy1lZ3Bpby5jIGIvZHJpdmVycy9tZmQvaHRjLWVncGlvLmMKaW5kZXggNmJlNDMxNy4uMWE0ZDA0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvaHRjLWVncGlvLmMKKysrIGIvZHJpdmVycy9tZmQvaHRjLWVncGlvLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogCQkvKiBSdW4gaXJxIGhhbmRsZXIgKi8KIAkJcHJfZGVidWcoImdvdCBJUlEgJWRcbiIsIGlycXBpbik7CiAJCWlycSA9IGVpLT5pcnFfc3RhcnQgKyBpcnFwaW47Ci0JCWRlc2MgPSAmaXJxX2Rlc2NbaXJxXTsKKwkJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJCWRlc2MtPmhhbmRsZV9pcnEoaXJxLCBkZXNjKTsKIAl9CiB9CkBAIC0yODksNyArMjg5LDcgQEAKIAllaS0+YmFzZV9hZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCk7CiAJaWYgKCFlaS0+YmFzZV9hZGRyKQogCQlnb3RvIGZhaWw7Ci0JcHJfZGVidWcoIkVHUElPIHBoeXM9JTA4eCB2aXJ0PSVwXG4iLCByZXMtPnN0YXJ0LCBlaS0+YmFzZV9hZGRyKTsKKwlwcl9kZWJ1ZygiRUdQSU8gcGh5cz0lMDh4IHZpcnQ9JXBcbiIsICh1MzIpcmVzLT5zdGFydCwgZWktPmJhc2VfYWRkcik7CiAKIAlpZiAoKHBkYXRhLT5idXNfd2lkdGggIT0gMTYpICYmIChwZGF0YS0+YnVzX3dpZHRoICE9IDMyKSkKIAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbWZkLWNvcmUuYyBiL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMKaW5kZXggOWM5YzEyNi4uNmMwZDFiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvbWZkLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC9tZmQtY29yZS5jCkBAIC0yMCw3ICsyMCw3IEBACiAJCQkgIHN0cnVjdCByZXNvdXJjZSAqbWVtX2Jhc2UsCiAJCQkgIGludCBpcnFfYmFzZSkKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzW2NlbGwtPm51bV9yZXNvdXJjZXNdOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IHJldCA9IC1FTk9NRU07CiAJaW50IHI7CkBAIC0yOSwxNCArMjksMTcgQEAKIAlpZiAoIXBkZXYpCiAJCWdvdG8gZmFpbF9hbGxvYzsKIAorCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKCpyZXMpICogY2VsbC0+bnVtX3Jlc291cmNlcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXMpCisJCWdvdG8gZmFpbF9kZXZpY2U7CisKIAlwZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OwogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsCiAJCQljZWxsLT5wbGF0Zm9ybV9kYXRhLCBjZWxsLT5kYXRhX3NpemUpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF9kZXZpY2U7CisJCWdvdG8gZmFpbF9yZXM7CiAKLQltZW1zZXQocmVzLCAwLCBzaXplb2YocmVzKSk7CiAJZm9yIChyID0gMDsgciA8IGNlbGwtPm51bV9yZXNvdXJjZXM7IHIrKykgewogCQlyZXNbcl0ubmFtZSA9IGNlbGwtPnJlc291cmNlc1tyXS5uYW1lOwogCQlyZXNbcl0uZmxhZ3MgPSBjZWxsLT5yZXNvdXJjZXNbcl0uZmxhZ3M7CkBAIC02NCwxMSArNjcsMTUgQEAKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJaWYgKHJldCkKLQkJZ290byBmYWlsX2RldmljZTsKKwkJZ290byBmYWlsX3JlczsKKworCWtmcmVlKHJlcyk7CiAKIAlyZXR1cm4gMDsKIAogLyoJcGxhdGZvcm1fZGV2aWNlX2RlbChwZGV2KTsgKi8KK2ZhaWxfcmVzOgorCWtmcmVlKHJlcyk7CiBmYWlsX2RldmljZToKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogZmFpbF9hbGxvYzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3NtNTAxLmMgYi9kcml2ZXJzL21mZC9zbTUwMS5jCmluZGV4IDdhZWJhZDQuLjIyMGU0MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3NtNTAxLmMKKysrIGIvZHJpdmVycy9tZmQvc201MDEuYwpAQCAtNjIzLDggKzYyMyw4IEBACiAKIAlzbTUwMV9zeW5jX3JlZ3Moc20pOwogCi0JZGV2X2luZm8oc20tPmRldiwgImdhdGUgJTA4bHgsIGNsb2NrICUwOGx4LCBtb2RlICUwOGx4XG4iLAotCQkgZ2F0ZSwgY2xvY2ssIG1vZGUpOworCWRldl9kYmcoc20tPmRldiwgImdhdGUgJTA4bHgsIGNsb2NrICUwOGx4LCBtb2RlICUwOGx4XG4iLAorCQlnYXRlLCBjbG9jaywgbW9kZSk7CiAKIAlzbTUwMV9tZGVsYXkoc20sIDE2KTsKIAltdXRleF91bmxvY2soJnNtLT5jbG9ja19sb2NrKTsKQEAgLTc0Miw3ICs3NDIsNyBAQAogCWludCByZXQ7CiAKIAlmb3IgKHB0ciA9IDA7IHB0ciA8IHBkZXYtPm51bV9yZXNvdXJjZXM7IHB0cisrKSB7Ci0JCXByaW50aygiJXNbJWRdIGZsYWdzICUwOGx4OiAlMDhsbHguLiUwOGxseFxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzWyVkXSBmbGFncyAlMDhseDogJTA4bGx4Li4lMDhsbHhcbiIsCiAJCSAgICAgICBwZGV2LT5uYW1lLCBwdHIsCiAJCSAgICAgICBwZGV2LT5yZXNvdXJjZVtwdHJdLmZsYWdzLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZGV2LT5yZXNvdXJjZVtwdHJdLnN0YXJ0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jIGIvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jCmluZGV4IDQ5YTBmZmYuLjlmNzAyNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3Q3bDY2eGIuYworKysgYi9kcml2ZXJzL21mZC90N2w2NnhiLmMKQEAgLTI0LDggKzI0LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KQEAgLTU2LDYgKzU4LDggQEAKIAlzcGlubG9ja190CQlsb2NrOwogCiAJc3RydWN0IHJlc291cmNlCQlyc2NyOworCXN0cnVjdCBjbGsJCSpjbGs0OG07CisJc3RydWN0IGNsawkJKmNsazMyazsKIAlpbnQJCQlpcnE7CiAJaW50CQkJaXJxX2Jhc2U7CiB9OwpAQCAtNjUsMTMgKzY5LDExIEBACiBzdGF0aWMgaW50IHQ3bDY2eGJfbW1jX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptbWMpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKG1tYy0+ZGV2LnBhcmVudCk7Ci0Jc3RydWN0IHQ3bDY2eGJfcGxhdGZvcm1fZGF0YSAgICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHQ3bDY2eGIgKnQ3bDY2eGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggZGV2X2N0bDsKIAotCWlmIChwZGF0YS0+ZW5hYmxlX2NsazMyaykKLQkJcGRhdGEtPmVuYWJsZV9jbGszMmsoZGV2KTsKKwljbGtfZW5hYmxlKHQ3bDY2eGItPmNsazMyayk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdDdsNjZ4Yi0+bG9jaywgZmxhZ3MpOwogCkBAIC04Nyw3ICs4OSw2IEBACiBzdGF0aWMgaW50IHQ3bDY2eGJfbW1jX2Rpc2FibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbW1jKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShtbWMtPmRldi5wYXJlbnQpOwotCXN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgICAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB0N2w2NnhiICp0N2w2NnhiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGRldl9jdGw7CkBAIC0xMDAsOCArMTAxLDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQ3bDY2eGItPmxvY2ssIGZsYWdzKTsKIAotCWlmIChwZGF0YS0+ZGlzYWJsZV9jbGszMmspCi0JCXBkYXRhLT5kaXNhYmxlX2NsazMyayhkZXYpOworCWNsa19kaXNhYmxlKHQ3bDY2eGItPmNsazMyayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI1OCwxOCArMjU4LDIyIEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHQ3bDY2eGJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKKwlzdHJ1Y3QgdDdsNjZ4YiAqdDdsNjZ4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHQ3bDY2eGJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5zdXNwZW5kKQogCQlwZGF0YS0+c3VzcGVuZChkZXYpOworCWNsa19kaXNhYmxlKHQ3bDY2eGItPmNsazQ4bSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0N2w2NnhiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHQ3bDY2eGIgKnQ3bDY2eGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAorCWNsa19lbmFibGUodDdsNjZ4Yi0+Y2xrNDhtKTsKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnJlc3VtZSkKIAkJcGRhdGEtPnJlc3VtZShkZXYpOwogCkBAIC0zMDksNiArMzEzLDE5IEBACiAKIAl0N2w2NnhiLT5pcnFfYmFzZSA9IHBkYXRhLT5pcnFfYmFzZTsKIAorCXQ3bDY2eGItPmNsazMyayA9IGNsa19nZXQoJmRldi0+ZGV2LCAiQ0xLX0NLMzJLIik7CisJaWYgKElTX0VSUih0N2w2NnhiLT5jbGszMmspKSB7CisJCXJldCA9IFBUUl9FUlIodDdsNjZ4Yi0+Y2xrMzJrKTsKKwkJZ290byBlcnJfY2xrMzJrX2dldDsKKwl9CisKKwl0N2w2NnhiLT5jbGs0OG0gPSBjbGtfZ2V0KCZkZXYtPmRldiwgIkNMS19DSzQ4TSIpOworCWlmIChJU19FUlIodDdsNjZ4Yi0+Y2xrNDhtKSkgeworCQlyZXQgPSBQVFJfRVJSKHQ3bDY2eGItPmNsazQ4bSk7CisJCWNsa19wdXQodDdsNjZ4Yi0+Y2xrMzJrKTsKKwkJZ290byBlcnJfY2xrNDhtX2dldDsKKwl9CisKIAlyc2NyID0gJnQ3bDY2eGItPnJzY3I7CiAJcnNjci0+bmFtZSA9ICJ0N2w2NnhiLWNvcmUiOwogCXJzY3ItPnN0YXJ0ID0gaW9tZW0tPnN0YXJ0OwpAQCAtMzI1LDYgKzM0Miw4IEBACiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQogCisJY2xrX2VuYWJsZSh0N2w2NnhiLT5jbGs0OG0pOworCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5lbmFibGUpCiAJCXBkYXRhLT5lbmFibGUoZGV2KTsKIApAQCAtMzU5LDkgKzM3OCwxMyBAQAogCWlvdW5tYXAodDdsNjZ4Yi0+c2NyKTsKIGVycl9pb3JlbWFwOgogCXJlbGVhc2VfcmVzb3VyY2UoJnQ3bDY2eGItPnJzY3IpOwotZXJyX25vaXJxOgogZXJyX3JlcXVlc3Rfc2NyOgogCWtmcmVlKHQ3bDY2eGIpOworCWNsa19wdXQodDdsNjZ4Yi0+Y2xrNDhtKTsKK2Vycl9jbGs0OG1fZ2V0OgorCWNsa19wdXQodDdsNjZ4Yi0+Y2xrMzJrKTsKK2Vycl9jbGszMmtfZ2V0OgorZXJyX25vaXJxOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM3Miw3ICszOTUsOCBAQAogCWludCByZXQ7CiAKIAlyZXQgPSBwZGF0YS0+ZGlzYWJsZShkZXYpOwotCisJY2xrX2Rpc2FibGUodDdsNjZ4Yi0+Y2xrNDhtKTsKKwljbGtfcHV0KHQ3bDY2eGItPmNsazQ4bSk7CiAJdDdsNjZ4Yl9kZXRhY2hfaXJxKGRldik7CiAJaW91bm1hcCh0N2w2NnhiLT5zY3IpOwogCXJlbGVhc2VfcmVzb3VyY2UoJnQ3bDY2eGItPnJzY3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGM2Mzg3eGIuYyBiL2RyaXZlcnMvbWZkL3RjNjM4N3hiLmMKaW5kZXggYTIyYjIxYS4uNDMyMjJjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdGM2Mzg3eGIuYworKysgYi9kcml2ZXJzL21mZC90YzYzODd4Yi5jCkBAIC0xMiw2ICsxMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CkBAIC0yNCwxOCArMjUsMjIgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgdGM2Mzg3eGJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjbGsgKmNsazMyayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWlmIChwZGF0YSAmJiBwZGF0YS0+c3VzcGVuZCkKIAkJcGRhdGEtPnN1c3BlbmQoZGV2KTsKKwljbGtfZGlzYWJsZShjbGszMmspOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdGM2Mzg3eGJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjbGsgKmNsazMyayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAorCWNsa19lbmFibGUoY2xrMzJrKTsKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnJlc3VtZSkKIAkJcGRhdGEtPnJlc3VtZShkZXYpOwogCkBAIC01MSwxMCArNTYsOSBAQAogc3RhdGljIGludCB0YzYzODd4Yl9tbWNfZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1tYykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgICAgICA9IHRvX3BsYXRmb3JtX2RldmljZShtbWMtPmRldi5wYXJlbnQpOwotCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICp0YzYzODd4YiA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGNsayAqY2xrMzJrID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmICh0YzYzODd4Yi0+ZW5hYmxlX2NsazMyaykKLQkJdGM2Mzg3eGItPmVuYWJsZV9jbGszMmsoZGV2KTsKKwljbGtfZW5hYmxlKGNsazMyayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYyLDEwICs2Niw5IEBACiBzdGF0aWMgaW50IHRjNjM4N3hiX21tY19kaXNhYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1tYykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgICAgICA9IHRvX3BsYXRmb3JtX2RldmljZShtbWMtPmRldi5wYXJlbnQpOwotCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICp0YzYzODd4YiA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGNsayAqY2xrMzJrID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmICh0YzYzODd4Yi0+ZGlzYWJsZV9jbGszMmspCi0JCXRjNjM4N3hiLT5kaXNhYmxlX2NsazMyayhkZXYpOworCWNsa19kaXNhYmxlKGNsazMyayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMiwxNCArMTA1LDE0IEBACiAKIHN0YXRpYyBpbnQgdGM2Mzg3eGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqaW9tZW07CisJc3RydWN0IGNsayAqY2xrMzJrOwogCWludCBpcnEsIHJldDsKIAogCWlvbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghaW9tZW0pIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfcmVzb3VyY2U7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldCAgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CkBAIC0xMTgsOCArMTIxLDE1IEBACiAJZWxzZQogCQlnb3RvIGVycl9yZXNvdXJjZTsKIAotCWlmIChkYXRhICYmIGRhdGEtPmVuYWJsZSkKLQkJZGF0YS0+ZW5hYmxlKGRldik7CisJY2xrMzJrID0gY2xrX2dldCgmZGV2LT5kZXYsICJDTEtfQ0szMksiKTsKKwlpZiAoSVNfRVJSKGNsazMyaykpIHsKKwkJcmV0ID0gUFRSX0VSUihjbGszMmspOworCQlnb3RvIGVycl9yZXNvdXJjZTsKKwl9CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBjbGszMmspOworCisJaWYgKHBkYXRhICYmIHBkYXRhLT5lbmFibGUpCisJCXBkYXRhLT5lbmFibGUoZGV2KTsKIAogCXByaW50ayhLRVJOX0lORk8gIlRvc2hpYmEgdGM2Mzg3eGIgaW5pdGlhbGlzZWRcbiIpOwogCkBAIC0xMzQsMTggKzE0NCwxOSBAQAogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKIAorCWNsa19wdXQoY2xrMzJrKTsKIGVycl9yZXNvdXJjZToKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHRjNjM4N3hiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjbGsgKmNsazMyayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoZGF0YSAmJiBkYXRhLT5kaXNhYmxlKQotCQlkYXRhLT5kaXNhYmxlKGRldik7Ci0KLQkvKiBGSVhNRSAtIGZyZWUgdGhlIHJlc291cmNlcyEgKi8KKwltZmRfcmVtb3ZlX2RldmljZXMoJmRldi0+ZGV2KTsKKwljbGtfZGlzYWJsZShjbGszMmspOworCWNsa19wdXQoY2xrMzJrKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90YzYzOTN4Yi5jIGIvZHJpdmVycy9tZmQvdGM2MzkzeGIuYwppbmRleCBlNGMxYzc4Li5mODU2ZTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90YzYzOTN4Yi5jCisrKyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKQEAgLTExMyw2ICsxMTMsOCBAQAogZW51bSB7CiAJVEM2MzkzWEJfQ0VMTF9OQU5ELAogCVRDNjM5M1hCX0NFTExfTU1DLAorCVRDNjM5M1hCX0NFTExfT0hDSSwKKwlUQzYzOTNYQl9DRUxMX0ZCLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNzAsNiArMTcyLDE3NiBAQAogCX0sCiB9OwogCitjb25zdCBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRjNjM5M3hiX29oY2lfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSAweDMwMDAsCisJCS5lbmQJPSAweDMxZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSAweDAzMDAsCisJCS5lbmQJPSAweDAzZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSAweDAxMDAwMCwKKwkJLmVuZAk9IDB4MDE3ZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gMHgwMTgwMDAsCisJCS5lbmQJPSAweDAxZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9UQzYzOTNfT0hDSSwKKwkJLmVuZAk9IElSUV9UQzYzOTNfT0hDSSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgX19kZXZpbml0ZGF0YSB0YzYzOTN4Yl9mYl9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4NTAwMCwKKwkJLmVuZAk9IDB4NTFmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IDB4MDUwMCwKKwkJLmVuZAk9IDB4MDVmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IDB4MTAwMDAwLAorCQkuZW5kCT0gMHgxZmZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVEM2MzkzX0ZCLAorCQkuZW5kCT0gSVJRX1RDNjM5M19GQiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgdGM2MzkzeGJfb2hjaV9lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5kZXYucGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBjY3I7CisJdTggZmVyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwljY3IgPSB0bWlvX2lvcmVhZDE2KHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKwljY3IgfD0gU0NSX0NDUl9VU0JDSzsKKwl0bWlvX2lvd3JpdGUxNihjY3IsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKworCWZlciA9IHRtaW9faW9yZWFkOCh0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7CisJZmVyIHw9IFNDUl9GRVJfVVNCRU47CisJdG1pb19pb3dyaXRlOChmZXIsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0YzYzOTN4Yl9vaGNpX2Rpc2FibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5kZXYucGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBjY3I7CisJdTggZmVyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlmZXIgPSB0bWlvX2lvcmVhZDgodGM2MzkzeGItPnNjciArIFNDUl9GRVIpOworCWZlciAmPSB+U0NSX0ZFUl9VU0JFTjsKKwl0bWlvX2lvd3JpdGU4KGZlciwgdGM2MzkzeGItPnNjciArIFNDUl9GRVIpOworCisJY2NyID0gdG1pb19pb3JlYWQxNih0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisJY2NyICY9IH5TQ1JfQ0NSX1VTQkNLOworCXRtaW9faW93cml0ZTE2KGNjciwgdGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRjNjM5M3hiX2ZiX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPmRldi5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGNjcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJY2NyID0gdG1pb19pb3JlYWQxNih0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisJY2NyICY9IH5TQ1JfQ0NSX01DTEtfTUFTSzsKKwljY3IgfD0gU0NSX0NDUl9NQ0xLXzQ4OworCXRtaW9faW93cml0ZTE2KGNjciwgdGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRjNjM5M3hiX2ZiX2Rpc2FibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5kZXYucGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBjY3I7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCWNjciA9IHRtaW9faW9yZWFkMTYodGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCWNjciAmPSB+U0NSX0NDUl9NQ0xLX01BU0s7CisJY2NyIHw9IFNDUl9DQ1JfTUNMS19PRkY7CisJdG1pb19pb3dyaXRlMTYoY2NyLCB0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB0YzYzOTN4Yl9sY2Rfc2V0X3Bvd2VyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZiLCBib29sIG9uKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShmYi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJdTggZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCWZlciA9IGlvcmVhZDgodGM2MzkzeGItPnNjciArIFNDUl9GRVIpOworCWlmIChvbikKKwkJZmVyIHw9IFNDUl9GRVJfU0xDREVOOworCWVsc2UKKwkJZmVyICY9IH5TQ1JfRkVSX1NMQ0RFTjsKKwlpb3dyaXRlOChmZXIsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodGM2MzkzeGJfbGNkX3NldF9wb3dlcik7CisKK2ludCB0YzYzOTN4Yl9sY2RfbW9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpmYiwKKwkJCQkJY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSkgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShmYi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJaW93cml0ZTE2KG1vZGUtPnBpeGNsb2NrLCB0YzYzOTN4Yi0+c2NyICsgU0NSX1BMTDFDUiArIDApOworCWlvd3JpdGUxNihtb2RlLT5waXhjbG9jayA+PiAxNiwgdGM2MzkzeGItPnNjciArIFNDUl9QTEwxQ1IgKyAyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodGM2MzkzeGJfbGNkX21vZGUpOworCiBzdGF0aWMgc3RydWN0IG1mZF9jZWxsIF9fZGV2aW5pdGRhdGEgdGM2MzkzeGJfY2VsbHNbXSA9IHsKIAlbVEM2MzkzWEJfQ0VMTF9OQU5EXSA9IHsKIAkJLm5hbWUgPSAidG1pby1uYW5kIiwKQEAgLTE4Miw2ICszNTQsMjQgQEAKIAkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRjNjM5M3hiX21tY19yZXNvdXJjZXMpLAogCQkucmVzb3VyY2VzID0gdGM2MzkzeGJfbW1jX3Jlc291cmNlcywKIAl9LAorCVtUQzYzOTNYQl9DRUxMX09IQ0ldID0geworCQkubmFtZSA9ICJ0bWlvLW9oY2kiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGM2MzkzeGJfb2hjaV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGM2MzkzeGJfb2hjaV9yZXNvdXJjZXMsCisJCS5lbmFibGUgPSB0YzYzOTN4Yl9vaGNpX2VuYWJsZSwKKwkJLnN1c3BlbmQgPSB0YzYzOTN4Yl9vaGNpX2Rpc2FibGUsCisJCS5yZXN1bWUgPSB0YzYzOTN4Yl9vaGNpX2VuYWJsZSwKKwkJLmRpc2FibGUgPSB0YzYzOTN4Yl9vaGNpX2Rpc2FibGUsCisJfSwKKwlbVEM2MzkzWEJfQ0VMTF9GQl0gPSB7CisJCS5uYW1lID0gInRtaW8tZmIiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGM2MzkzeGJfZmJfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRjNjM5M3hiX2ZiX3Jlc291cmNlcywKKwkJLmVuYWJsZSA9IHRjNjM5M3hiX2ZiX2VuYWJsZSwKKwkJLnN1c3BlbmQgPSB0YzYzOTN4Yl9mYl9kaXNhYmxlLAorCQkucmVzdW1lID0gdGM2MzkzeGJfZmJfZW5hYmxlLAorCQkuZGlzYWJsZSA9IHRjNjM5M3hiX2ZiX2Rpc2FibGUsCisJfSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzY5LDQxICs1NTksMTIgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgdGM2MzkzeGJfaHdfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgKnRjcGQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBpOwotCi0JaW93cml0ZTgodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZmVyLAl0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7Ci0JaW93cml0ZTE2KHRjcGQtPnNjcl9wbGwyY3IsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX1BMTDJDUik7Ci0JaW93cml0ZTE2KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmNjciwJdGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOwotCWlvd3JpdGUxNihTQ1JfTUNSX1JEWV9PUEVORFJBSU4gfCBTQ1JfTUNSX1JEWV9VTksgfCBTQ1JfTUNSX1JEWV9FTiB8Ci0JCSAgU0NSX01DUl9JTlRfT1BFTkRSQUlOIHwgU0NSX01DUl9JTlRfVU5LIHwgU0NSX01DUl9JTlRfRU4gfAotCQkgIEJJVCgxNSksCQkJdGM2MzkzeGItPnNjciArIFNDUl9NQ1IpOwotCWlvd3JpdGUxNih0Y3BkLT5zY3JfZ3BlciwJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BFUik7Ci0JaW93cml0ZTgoMCwJCQkJdGM2MzkzeGItPnNjciArIFNDUl9JUlIpOwotCWlvd3JpdGU4KDB4YmYsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfSU1SKTsKLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJaW93cml0ZTgodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BvX2RzcltpXSwKLQkJCQkJdGM2MzkzeGItPnNjciArIFNDUl9HUE9fRFNSKGkpKTsKLQkJaW93cml0ZTgodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BvX2RvZWNyW2ldLAotCQkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQT19ET0VDUihpKSk7Ci0JCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwaV9iY3JbaV0sCi0JCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BJX0JDUihpKSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19kZXZpbml0IHRjNjM5M3hiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGM2MzkzeGJfcGxhdGZvcm1fZGF0YSAqdGNwZCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvbWVtLCAqcnNjcjsKIAlpbnQgcmV0LCB0ZW1wOwotCWludCBpOwogCiAJaW9tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFpb21lbSkKQEAgLTQ1OCwyMSArNjE5LDE2IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfZW5hYmxlOwogCi0JdGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZmVyID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJdGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BvX2RzcltpXSA9Ci0JCQkodGNwZC0+c2NyX2dwb19kc3IgPj4gKDggKiBpKSkgJiAweGZmOwotCQl0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5ncG9fZG9lY3JbaV0gPQotCQkJKHRjcGQtPnNjcl9ncG9fZG9lY3IgPj4gKDggKiBpKSkgJiAweGZmOwotCX0KLQotCXRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmNjciA9IFNDUl9DQ1JfVU5LMSB8Ci0JCQkJCVNDUl9DQ1JfSENMS180ODsKLQotCXJldCA9IHRjNjM5M3hiX2h3X2luaXQoZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9od19pbml0OworCWlvd3JpdGU4KDAsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKwlpb3dyaXRlMTYodGNwZC0+c2NyX3BsbDJjciwJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfUExMMkNSKTsKKwlpb3dyaXRlMTYoU0NSX0NDUl9VTksxIHwgU0NSX0NDUl9IQ0xLXzQ4LAorCQkJCQkJdGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCWlvd3JpdGUxNihTQ1JfTUNSX1JEWV9PUEVORFJBSU4gfCBTQ1JfTUNSX1JEWV9VTksgfCBTQ1JfTUNSX1JEWV9FTiB8CisJCSAgU0NSX01DUl9JTlRfT1BFTkRSQUlOIHwgU0NSX01DUl9JTlRfVU5LIHwgU0NSX01DUl9JTlRfRU4gfAorCQkgIEJJVCgxNSksCQkJdGM2MzkzeGItPnNjciArIFNDUl9NQ1IpOworCWlvd3JpdGUxNih0Y3BkLT5zY3JfZ3BlciwJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BFUik7CisJaW93cml0ZTgoMCwJCQkJdGM2MzkzeGItPnNjciArIFNDUl9JUlIpOworCWlvd3JpdGU4KDB4YmYsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfSU1SKTsKIAogCXByaW50ayhLRVJOX0lORk8gIlRvc2hpYmEgdGM2MzkzeGIgcmV2aXNpb24gJWQgYXQgMHglMDhseCwgaXJxICVkXG4iLAogCQkJdG1pb19pb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfUkVWSUQpLApAQCAtNDg4LDE2ICs2NDQsMzMgQEAKIAogCXRjNjM5M3hiX2F0dGFjaF9pcnEoZGV2KTsKIAorCWlmICh0Y3BkLT5zZXR1cCkgeworCQlyZXQgPSB0Y3BkLT5zZXR1cChkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfc2V0dXA7CisJfQorCiAJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXS5kcml2ZXJfZGF0YSA9IHRjcGQtPm5hbmRfZGF0YTsKIAl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX05BTkRdLnBsYXRmb3JtX2RhdGEgPQogCQkmdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXTsKIAl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX05BTkRdLmRhdGFfc2l6ZSA9CiAJCXNpemVvZih0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX05BTkRdKTsKKwogCXRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfTU1DXS5wbGF0Zm9ybV9kYXRhID0KIAkJJnRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfTU1DXTsKIAl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX01NQ10uZGF0YV9zaXplID0KIAkJc2l6ZW9mKHRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfTU1DXSk7CiAKKwl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX09IQ0ldLnBsYXRmb3JtX2RhdGEgPQorCQkmdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9PSENJXTsKKwl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX09IQ0ldLmRhdGFfc2l6ZSA9CisJCXNpemVvZih0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX09IQ0ldKTsKKworCXRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfRkJdLmRyaXZlcl9kYXRhID0gdGNwZC0+ZmJfZGF0YTsKKwl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX0ZCXS5wbGF0Zm9ybV9kYXRhID0KKwkJJnRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfRkJdOworCXRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfRkJdLmRhdGFfc2l6ZSA9CisJCXNpemVvZih0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX0ZCXSk7CiAKIAlyZXQgPSBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCBkZXYtPmlkLAogCQkJdGM2MzkzeGJfY2VsbHMsIEFSUkFZX1NJWkUodGM2MzkzeGJfY2VsbHMpLApAQCAtNTA2LDEyICs2NzksMTUgQEAKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKKwlpZiAodGNwZC0+dGVhcmRvd24pCisJCXRjcGQtPnRlYXJkb3duKGRldik7CisKK2Vycl9zZXR1cDoKIAl0YzYzOTN4Yl9kZXRhY2hfaXJxKGRldik7CiAKIGVycl9ncGlvX2FkZDoKIAlpZiAodGM2MzkzeGItPmdwaW8uYmFzZSAhPSAtMSkKIAkJdGVtcCA9IGdwaW9jaGlwX3JlbW92ZSgmdGM2MzkzeGItPmdwaW8pOwotZXJyX2h3X2luaXQ6CiAJdGNwZC0+ZGlzYWJsZShkZXYpOwogZXJyX2Nsa19lbmFibGU6CiAJY2xrX2Rpc2FibGUodGM2MzkzeGItPmNsayk7CkBAIC01MzUsNiArNzExLDEwIEBACiAJaW50IHJldDsKIAogCW1mZF9yZW1vdmVfZGV2aWNlcygmZGV2LT5kZXYpOworCisJaWYgKHRjcGQtPnRlYXJkb3duKQorCQl0Y3BkLT50ZWFyZG93bihkZXYpOworCiAJdGM2MzkzeGJfZGV0YWNoX2lycShkZXYpOwogCiAJaWYgKHRjNjM5M3hiLT5ncGlvLmJhc2UgIT0gLTEpIHsKQEAgLTU4NSwxNSArNzY1LDM3IEBACiAJc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgKnRjcGQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQ7CisJaW50IGk7CiAKIAljbGtfZW5hYmxlKHRjNjM5M3hiLT5jbGspOwogCiAJcmV0ID0gdGNwZC0+cmVzdW1lKGRldik7Ci0KIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIHRjNjM5M3hiX2h3X2luaXQoZGV2KTsKKwlpZiAoIXRjcGQtPnJlc3VtZV9yZXN0b3JlKQorCQlyZXR1cm4gMDsKKworCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmZlciwJdGM2MzkzeGItPnNjciArIFNDUl9GRVIpOworCWlvd3JpdGUxNih0Y3BkLT5zY3JfcGxsMmNyLAkJdGM2MzkzeGItPnNjciArIFNDUl9QTEwyQ1IpOworCWlvd3JpdGUxNih0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5jY3IsCXRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKwlpb3dyaXRlMTYoU0NSX01DUl9SRFlfT1BFTkRSQUlOIHwgU0NSX01DUl9SRFlfVU5LIHwgU0NSX01DUl9SRFlfRU4gfAorCQkgIFNDUl9NQ1JfSU5UX09QRU5EUkFJTiB8IFNDUl9NQ1JfSU5UX1VOSyB8IFNDUl9NQ1JfSU5UX0VOIHwKKwkJICBCSVQoMTUpLAkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfTUNSKTsKKwlpb3dyaXRlMTYodGNwZC0+c2NyX2dwZXIsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQRVIpOworCWlvd3JpdGU4KDAsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfSVJSKTsKKwlpb3dyaXRlOCgweGJmLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0lNUik7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kc3JbaV0sCisJCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BPX0RTUihpKSk7CisJCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kb2VjcltpXSwKKwkJCQkJdGM2MzkzeGItPnNjciArIFNDUl9HUE9fRE9FQ1IoaSkpOworCQlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5ncGlfYmNyW2ldLAorCQkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQSV9CQ1IoaSkpOworCX0KKworCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgdGM2MzkzeGJfc3VzcGVuZCBOVUxMCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOWEwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwpAQCAtMCwwICsxLDExOTMgQEAKKy8qCisgKiB0d2w0MDMwX2NvcmUuYyAtIGRyaXZlciBmb3IgVFdMNDAzMC9UUFM2NTl4MCBQTSBhbmQgYXVkaW8gQ09ERUMgZGV2aWNlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogTW9kaWZpY2F0aW9ucyB0byBkZWZlciBpbnRlcnJ1cHQgaGFuZGxpbmcgdG8gYSBrZXJuZWwgdGhyZWFkOgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBCYXNlZCBvbiB0bHYzMjBhaWMyMy5jOgorICogQ29weXJpZ2h0IChjKSBieSBLYWkgU3ZhaG4gPGthaS5zdmFobkBub2tpYS5jb20+CisgKgorICogQ29kZSBjbGVhbnVwIGFuZCBtb2RpZmljYXRpb25zIHRvIElSUSBoYW5kbGVyLgorICogYnkgc3llZCBraGFzaW0gPHgwa2hhc2ltQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorCisKKy8qCisgKiBUaGUgVFdMNDAzMCAiVHJpdG9uIDIiIGlzIG9uZSBvZiBhIGZhbWlseSBvZiBhIG11bHRpLWZ1bmN0aW9uICJQb3dlcgorICogTWFuYWdlbWVudCBhbmQgU3lzdGVtIENvbXBhbmlvbiBEZXZpY2UiIGNoaXBzIG9yaWdpbmFsbHkgZGVzaWduZWQgZm9yCisgKiB1c2UgaW4gT01BUDIgYW5kIE9NQVAgMyBiYXNlZCBzeXN0ZW1zLiAgSXRzIGNvbnRyb2wgaW50ZXJmYWNlcyB1c2UgSTJDLAorICogb2Z0ZW4gYXQgYXJvdW5kIDMgTWJpdC9zZWMsIGluY2x1ZGluZyBmb3IgaW50ZXJydXB0IGhhbmRsaW5nLgorICoKKyAqIFRoaXMgZHJpdmVyIGNvcmUgcHJvdmlkZXMgZ2VuaXJxIHN1cHBvcnQgZm9yIHRoZSBpbnRlcnJ1cHRzIGVtaXR0ZWQsCisgKiBieSB0aGUgdmFyaW91cyBtb2R1bGVzLCBhbmQgZXhwb3J0cyByZWdpc3RlciBhY2Nlc3MgcHJpbWl0aXZlcy4KKyAqCisgKiBGSVhNRSB0aGlzIGRyaXZlciBjdXJyZW50bHkgcmVxdWlyZXMgdXNlIG9mIHRoZSBmaXJzdCBpbnRlcnJ1cHQgbGluZQorICogKGFuZCBhc3NvY2lhdGVkIHJlZ2lzdGVycykuCisgKi8KKworI2RlZmluZSBEUklWRVJfTkFNRQkJCSJ0d2w0MDMwIgorCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9CQ0lfQkFUVEVSWSkgfHwgXAorCWRlZmluZWQoQ09ORklHX1RXTDQwMzBfQkNJX0JBVFRFUllfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX2JjaSgpCQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX2JjaSgpCQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9UV0w0MDMwKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9UV0w0MDMwX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc19rZXlwYWQoKQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX2tleXBhZCgpCWZhbHNlCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0dQSU9fVFdMNDAzMCkgfHwgZGVmaW5lZChDT05GSUdfR1BJT19UV0w0MDMwX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc19ncGlvKCkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19ncGlvKCkJZmFsc2UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9NQURDKSB8fCBkZWZpbmVkKENPTkZJR19UV0w0MDMwX01BRENfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX21hZGMoKQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX21hZGMoKQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX1RXTDQwMzApIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfVFdMNDAzMF9NT0RVTEUpCisjZGVmaW5lIHR3bF9oYXNfcnRjKCkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19ydGMoKQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX1VTQikgfHwgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9VU0JfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX3VzYigpCXRydWUKKyNlbHNlCisjZGVmaW5lIHR3bF9oYXNfdXNiKCkJZmFsc2UKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfaXJxKGludCBpcnEpCit7CisjaWZkZWYgQ09ORklHX0FSTQorCS8qIEFSTSByZXF1aXJlcyBhbiBleHRyYSBzdGVwIHRvIGNsZWFyIElSUV9OT1JFUVVFU1QsIHdoaWNoIGl0CisJICogc2V0cyBvbiBiZWhhbGYgb2YgZXZlcnkgaXJxX2NoaXAuICBBbHNvIHNldHMgSVJRX05PUFJPQkUuCisJICovCisJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworI2Vsc2UKKwkvKiBzYW1lIGVmZmVjdCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzICovCisJc2V0X2lycV9ub3Byb2JlKGlycSk7CisjZW5kaWYKK30KKworLyogUHJpbWFyeSBJbnRlcnJ1cHQgSGFuZGxlciBvbiBUV0w0MDMwIFJlZ2lzdGVycyAqLworCisvKiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworCisjZGVmaW5lIFJFR19QSUhfSVNSX1AxCQkJKDB4MSkKKyNkZWZpbmUgUkVHX1BJSF9JU1JfUDIJCQkoMHgyKQorI2RlZmluZSBSRUdfUElIX1NJUgkJCSgweDMpCisKKy8qIFRyaXRvbiBDb3JlIGludGVybmFsIGluZm9ybWF0aW9uIChCRUdJTikgKi8KKworLyogTGFzdCAtIGZvciBpbmRleCBtYXgqLworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9MQVNUCQlUV0w0MDMwX01PRFVMRV9TRUNVUkVEX1JFRworCisjZGVmaW5lIFRXTDQwMzBfTlVNX1NMQVZFUwkJNAorCisKKy8qIEJhc2UgQWRkcmVzcyBkZWZucyBmb3IgdHdsNDAzMF9tYXBbXSAqLworCisvKiBzdWJjaGlwL3NsYXZlIDAgLSBVU0IgSUQgKi8KKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1VTQgkJMHgwMDAwCisKKy8qIHN1YmNoaXAvc2xhdmUgMSAtIEFVRCBJRCAqLworI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfQVVESU9fVk9JQ0UJMHgwMDAwCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9HUElPCQkweDAwOTgKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0lOVEJSCQkweDAwODUKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BJSAkJMHgwMDgwCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9URVNUCQkweDAwNEMKKworLyogc3ViY2hpcC9zbGF2ZSAyIC0gQVVYIElEICovCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9JTlRFUlJVUFRTCTB4MDBCOQorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfTEVECQkweDAwRUUKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX01BREMJCTB4MDAwMAorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfTUFJTl9DSEFSR0UJMHgwMDc0CisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QUkVDSEFSR0UJMHgwMEFBCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QV00wCQkweDAwRjgKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BXTTEJCTB4MDBGQgorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUFdNQQkJMHgwMEVGCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QV01CCQkweDAwRjEKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0tFWVBBRAkJMHgwMEQyCisKKy8qIHN1YmNoaXAvc2xhdmUgMyAtIFBPV0VSIElEICovCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9CQUNLVVAJCTB4MDAxNAorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfSU5UCQkweDAwMkUKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BNX01BU1RFUgkweDAwMzYKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BNX1JFQ0VJVkVSCTB4MDA1QgorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUlRDCQkweDAwMUMKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1NFQ1VSRURfUkVHCTB4MDAwMAorCisvKiBUcml0b24gQ29yZSBpbnRlcm5hbCBpbmZvcm1hdGlvbiAoRU5EKSAqLworCisKKy8qIEZldyBwb3dlciB2YWx1ZXMgKi8KKyNkZWZpbmUgUl9DRkdfQk9PVAkJCTB4MDUKKyNkZWZpbmUgUl9QUk9URUNUX0tFWQkJCTB4MEUKKworLyogYWNjZXNzIGNvbnRyb2wgdmFsdWVzIGZvciBSX1BST1RFQ1RfS0VZICovCisjZGVmaW5lIEtFWV9VTkxPQ0sxCQkJMHhjZQorI2RlZmluZSBLRVlfVU5MT0NLMgkJCTB4ZWMKKyNkZWZpbmUgS0VZX0xPQ0sJCQkweDAwCisKKy8qIHNvbWUgZmllbGRzIGluIFJfQ0ZHX0JPT1QgKi8KKyNkZWZpbmUgSEZDTEtfRlJFUV8xOXAyX01IWgkJKDEgPDwgMCkKKyNkZWZpbmUgSEZDTEtfRlJFUV8yNl9NSFoJCSgyIDw8IDApCisjZGVmaW5lIEhGQ0xLX0ZSRVFfMzhwNF9NSFoJCSgzIDw8IDApCisjZGVmaW5lIEhJR0hfUEVSRl9TUQkJCSgxIDw8IDMpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBzdHJ1Y3QgdHdsNDAzMF9tb2RfaXJlZ3MgLSBUV0wgbW9kdWxlIElNUi9JU1IgcmVncyB0byBtYXNrL2NsZWFyIGF0IGluaXQKKyAqIEBtb2Rfbm86IFRXTDQwMzAgbW9kdWxlIG51bWJlciAoZS5nLiwgVFdMNDAzMF9NT0RVTEVfR1BJTykKKyAqIEBzaWhfY3RybDogYWRkcmVzcyBvZiBtb2R1bGUgU0lIX0NUUkwgcmVnaXN0ZXIKKyAqIEByZWdfY250OiBudW1iZXIgb2YgSU1SL0lTUiByZWdzCisgKiBAaW1yczogcG9pbnRlciB0byBhcnJheSBvZiBUV0wgbW9kdWxlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyIGluZGljZXMKKyAqIEBpc3JzOiBwb2ludGVyIHRvIGFycmF5IG9mIFRXTCBtb2R1bGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBpbmRpY2VzCisgKgorICogVGllcyB0b2dldGhlciBUV0w0MDMwIG1vZHVsZXMgYW5kIGxpc3RzIG9mIElNUi9JU1IgcmVnaXN0ZXJzIHRvIG1hc2svY2xlYXIKKyAqIGR1cmluZyB0d2xfaW5pdF9pcnEoKS4KKyAqLworc3RydWN0IHR3bDQwMzBfbW9kX2lyZWdzIHsKKwljb25zdCB1OCBtb2Rfbm87CisJY29uc3QgdTggc2loX2N0cmw7CisJY29uc3QgdTggcmVnX2NudDsKKwljb25zdCB1OCAqaW1yczsKKwljb25zdCB1OCAqaXNyczsKK307CisKKy8qIFRXTDQwMzAgSU5UIG1vZHVsZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcnMgKi8KK3N0YXRpYyBjb25zdCB1OCBfX2luaXRjb25zdCB0d2w0MDMwX2ludF9pbXJfcmVnc1tdID0geworCVRXTDQwMzBfSU5UX1BXUl9JTVIxLAorCVRXTDQwMzBfSU5UX1BXUl9JTVIyLAorfTsKKworLyogVFdMNDAzMCBJTlQgbW9kdWxlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9pbnRfaXNyX3JlZ3NbXSA9IHsKKwlUV0w0MDMwX0lOVF9QV1JfSVNSMSwKKwlUV0w0MDMwX0lOVF9QV1JfSVNSMiwKK307CisKKy8qIFRXTDQwMzAgSU5URVJSVVBUUyBtb2R1bGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9pbnRlcnJ1cHRzX2ltcl9yZWdzW10gPSB7CisJVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjFBLAorCVRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIxQiwKKwlUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMkEsCisJVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjJCLAorfTsKKworLyogVFdMNDAzMCBJTlRFUlJVUFRTIG1vZHVsZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfaW50ZXJydXB0c19pc3JfcmVnc1tdID0geworCVRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IxQSwKKwlUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMUIsCisJVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjJBLAorCVRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IyQiwKK307CisKKy8qIFRXTDQwMzAgTUFEQyBtb2R1bGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9tYWRjX2ltcl9yZWdzW10gPSB7CisJVFdMNDAzMF9NQURDX0lNUjEsCisJVFdMNDAzMF9NQURDX0lNUjIsCit9OworCisvKiBUV0w0MDMwIE1BREMgbW9kdWxlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9tYWRjX2lzcl9yZWdzW10gPSB7CisJVFdMNDAzMF9NQURDX0lTUjEsCisJVFdMNDAzMF9NQURDX0lTUjIsCit9OworCisvKiBUV0w0MDMwIGtleXBhZCBtb2R1bGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9rZXlwYWRfaW1yX3JlZ3NbXSA9IHsKKwlUV0w0MDMwX0tFWVBBRF9LRVlQX0lNUjEsCisJVFdMNDAzMF9LRVlQQURfS0VZUF9JTVIyLAorfTsKKworLyogVFdMNDAzMCBrZXlwYWQgbW9kdWxlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9rZXlwYWRfaXNyX3JlZ3NbXSA9IHsKKwlUV0w0MDMwX0tFWVBBRF9LRVlQX0lTUjEsCisJVFdMNDAzMF9LRVlQQURfS0VZUF9JU1IyLAorfTsKKworLyogVFdMNDAzMCBHUElPIG1vZHVsZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcnMgKi8KK3N0YXRpYyBjb25zdCB1OCBfX2luaXRjb25zdCB0d2w0MDMwX2dwaW9faW1yX3JlZ3NbXSA9IHsKKwlSRUdfR1BJT19JTVIxQSwKKwlSRUdfR1BJT19JTVIxQiwKKwlSRUdfR1BJT19JTVIyQSwKKwlSRUdfR1BJT19JTVIyQiwKKwlSRUdfR1BJT19JTVIzQSwKKwlSRUdfR1BJT19JTVIzQiwKK307CisKKy8qIFRXTDQwMzAgR1BJTyBtb2R1bGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKi8KK3N0YXRpYyBjb25zdCB1OCBfX2luaXRjb25zdCB0d2w0MDMwX2dwaW9faXNyX3JlZ3NbXSA9IHsKKwlSRUdfR1BJT19JU1IxQSwKKwlSRUdfR1BJT19JU1IxQiwKKwlSRUdfR1BJT19JU1IyQSwKKwlSRUdfR1BJT19JU1IyQiwKKwlSRUdfR1BJT19JU1IzQSwKKwlSRUdfR1BJT19JU1IzQiwKK307CisKKy8qIFRXTDQwMzAgbW9kdWxlcyB0aGF0IGhhdmUgSU1SL0lTUiByZWdpc3RlcnMgdGhhdCBtdXN0IGJlIG1hc2tlZC9jbGVhcmVkICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHR3bDQwMzBfbW9kX2lyZWdzIF9faW5pdGNvbnN0IHR3bDQwMzBfbW9kX3JlZ3NbXSA9IHsKKwl7CisJCS5tb2Rfbm8JICA9IFRXTDQwMzBfTU9EVUxFX0lOVCwKKwkJLnNpaF9jdHJsID0gVFdMNDAzMF9JTlRfUFdSX1NJSF9DVFJMLAorCQkucmVnX2NudCAgPSBBUlJBWV9TSVpFKHR3bDQwMzBfaW50X2ltcl9yZWdzKSwKKwkJLmltcnMJICA9IHR3bDQwMzBfaW50X2ltcl9yZWdzLAorCQkuaXNycwkgID0gdHdsNDAzMF9pbnRfaXNyX3JlZ3MsCisJfSwKKwl7CisJCS5tb2Rfbm8JICA9IFRXTDQwMzBfTU9EVUxFX0lOVEVSUlVQVFMsCisJCS5zaWhfY3RybCA9IFRXTDQwMzBfSU5URVJSVVBUU19CQ0lTSUhDVFJMLAorCQkucmVnX2NudCAgPSBBUlJBWV9TSVpFKHR3bDQwMzBfaW50ZXJydXB0c19pbXJfcmVncyksCisJCS5pbXJzCSAgPSB0d2w0MDMwX2ludGVycnVwdHNfaW1yX3JlZ3MsCisJCS5pc3JzCSAgPSB0d2w0MDMwX2ludGVycnVwdHNfaXNyX3JlZ3MsCisJfSwKKwl7CisJCS5tb2Rfbm8JICA9IFRXTDQwMzBfTU9EVUxFX01BREMsCisJCS5zaWhfY3RybCA9IFRXTDQwMzBfTUFEQ19TSUhfQ1RSTCwKKwkJLnJlZ19jbnQgID0gQVJSQVlfU0laRSh0d2w0MDMwX21hZGNfaW1yX3JlZ3MpLAorCQkuaW1ycwkgID0gdHdsNDAzMF9tYWRjX2ltcl9yZWdzLAorCQkuaXNycwkgID0gdHdsNDAzMF9tYWRjX2lzcl9yZWdzLAorCX0sCisJeworCQkubW9kX25vCSAgPSBUV0w0MDMwX01PRFVMRV9LRVlQQUQsCisJCS5zaWhfY3RybCA9IFRXTDQwMzBfS0VZUEFEX0tFWVBfU0lIX0NUUkwsCisJCS5yZWdfY250ICA9IEFSUkFZX1NJWkUodHdsNDAzMF9rZXlwYWRfaW1yX3JlZ3MpLAorCQkuaW1ycwkgID0gdHdsNDAzMF9rZXlwYWRfaW1yX3JlZ3MsCisJCS5pc3JzCSAgPSB0d2w0MDMwX2tleXBhZF9pc3JfcmVncywKKwl9LAorCXsKKwkJLm1vZF9ubwkgID0gVFdMNDAzMF9NT0RVTEVfR1BJTywKKwkJLnNpaF9jdHJsID0gUkVHX0dQSU9fU0lIX0NUUkwsCisJCS5yZWdfY250ICA9IEFSUkFZX1NJWkUodHdsNDAzMF9ncGlvX2ltcl9yZWdzKSwKKwkJLmltcnMJICA9IHR3bDQwMzBfZ3Bpb19pbXJfcmVncywKKwkJLmlzcnMJICA9IHR3bDQwMzBfZ3Bpb19pc3JfcmVncywKKwl9LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogaXMgZHJpdmVyIGFjdGl2ZSwgYm91bmQgdG8gYSBjaGlwPyAqLworc3RhdGljIGJvb2wgaW51c2U7CisKKy8qIFN0cnVjdHVyZSBmb3IgZWFjaCBUV0w0MDMwIFNsYXZlICovCitzdHJ1Y3QgdHdsNDAzMF9jbGllbnQgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJdTggYWRkcmVzczsKKworCS8qIG1heCBudW1iIG9mIGkyY19tc2cgcmVxdWlyZWQgaXMgZm9yIHJlYWQgPTIgKi8KKwlzdHJ1Y3QgaTJjX21zZyB4ZmVyX21zZ1syXTsKKworCS8qIFRvIGxvY2sgYWNjZXNzIHRvIHhmZXJfbXNnICovCisJc3RydWN0IG11dGV4IHhmZXJfbG9jazsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jbGllbnQgdHdsNDAzMF9tb2R1bGVzW1RXTDQwMzBfTlVNX1NMQVZFU107CisKKworLyogbWFwcGluZyB0aGUgbW9kdWxlIGlkIHRvIHNsYXZlIGlkIGFuZCBiYXNlIGFkZHJlc3MgKi8KK3N0cnVjdCB0d2w0MDMwbWFwcGluZyB7CisJdW5zaWduZWQgY2hhciBzaWQ7CS8qIFNsYXZlIElEICovCisJdW5zaWduZWQgY2hhciBiYXNlOwkvKiBiYXNlIGFkZHJlc3MgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMG1hcHBpbmcgdHdsNDAzMF9tYXBbVFdMNDAzMF9NT0RVTEVfTEFTVCArIDFdID0geworCS8qCisJICogTk9URTogIGRvbid0IGNoYW5nZSB0aGlzIHRhYmxlIHdpdGhvdXQgdXBkYXRpbmcgdGhlCisJICogPGxpbnV4L2kyYy90d2w0MDMwLmg+IGRlZmluZXMgZm9yIFRXTDQwMzBfTU9EVUxFXyoKKwkgKiBzbyB0aGV5IGNvbnRpbnVlIHRvIG1hdGNoIHRoZSBvcmRlciBpbiB0aGlzIHRhYmxlLgorCSAqLworCisJeyAwLCBUV0w0MDMwX0JBU0VBRERfVVNCIH0sCisKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9BVURJT19WT0lDRSB9LAorCXsgMSwgVFdMNDAzMF9CQVNFQUREX0dQSU8gfSwKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9JTlRCUiB9LAorCXsgMSwgVFdMNDAzMF9CQVNFQUREX1BJSCB9LAorCXsgMSwgVFdMNDAzMF9CQVNFQUREX1RFU1QgfSwKKworCXsgMiwgVFdMNDAzMF9CQVNFQUREX0tFWVBBRCB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX01BREMgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9JTlRFUlJVUFRTIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfTEVEIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfTUFJTl9DSEFSR0UgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QUkVDSEFSR0UgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QV00wIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfUFdNMSB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX1BXTUEgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QV01CIH0sCisKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9CQUNLVVAgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9JTlQgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9QTV9NQVNURVIgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9QTV9SRUNFSVZFUiB9LAorCXsgMywgVFdMNDAzMF9CQVNFQUREX1JUQyB9LAorCXsgMywgVFdMNDAzMF9CQVNFQUREX1NFQ1VSRURfUkVHIH0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVFdMNDAzMCBkb2Vzbid0IGhhdmUgUElIIG1hc2ssIGhlbmNlIGR1bW15IGZ1bmN0aW9uIGZvciBtYXNrCisgKiBhbmQgdW5tYXNrIG9mIHRoZSAoZWlnaHQpIGludGVycnVwdHMgcmVwb3J0ZWQgYXQgdGhhdCBsZXZlbCAuLi4KKyAqIG1hc2tpbmcgaXMgb25seSBhdmFpbGFibGUgZnJvbSBTSUggKHNlY29uZGFyeSkgbW9kdWxlcy4KKyAqLworCitzdGF0aWMgdm9pZCB0d2w0MDMwX2kyY19hY2tpcnEodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHZvaWQgdHdsNDAzMF9pMmNfZGlzYWJsZWludCh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCitzdGF0aWMgdm9pZCB0d2w0MDMwX2kyY19lbmFibGVpbnQodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB0d2w0MDMwX2lycV9jaGlwID0geworCS5uYW1lCT0gInR3bDQwMzAiLAorCS5hY2sJPSB0d2w0MDMwX2kyY19hY2tpcnEsCisJLm1hc2sJPSB0d2w0MDMwX2kyY19kaXNhYmxlaW50LAorCS51bm1hc2sJPSB0d2w0MDMwX2kyY19lbmFibGVpbnQsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFeHBvcnRlZCBGdW5jdGlvbnMgKi8KKworLyoqCisgKiB0d2w0MDMwX2kyY193cml0ZSAtIFdyaXRlcyBhIG4gYml0IHJlZ2lzdGVyIGluIFRXTDQwMzAKKyAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKKyAqIEB2YWx1ZTogYW4gYXJyYXkgb2YgbnVtX2J5dGVzKzEgY29udGFpbmluZyBkYXRhIHRvIHdyaXRlCisgKiBAcmVnOiByZWdpc3RlciBhZGRyZXNzIChqdXN0IG9mZnNldCB3aWxsIGRvKQorICogQG51bV9ieXRlczogbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyCisgKgorICogSU1QT1JUQU5UOiBmb3IgJ3ZhbHVlJyBwYXJhbWV0ZXI6IEFsbG9jYXRlIHZhbHVlIG51bV9ieXRlcysxIGFuZAorICogdmFsaWQgZGF0YSBzdGFydHMgYXQgT2Zmc2V0IDEuCisgKgorICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIG9wZXJhdGlvbiAtIDAgaXMgc3VjY2VzcworICovCitpbnQgdHdsNDAzMF9pMmNfd3JpdGUodTggbW9kX25vLCB1OCAqdmFsdWUsIHU4IHJlZywgdTggbnVtX2J5dGVzKQoreworCWludCByZXQ7CisJaW50IHNpZDsKKwlzdHJ1Y3QgdHdsNDAzMF9jbGllbnQgKnR3bDsKKwlzdHJ1Y3QgaTJjX21zZyAqbXNnOworCisJaWYgKHVubGlrZWx5KG1vZF9ubyA+IFRXTDQwMzBfTU9EVUxFX0xBU1QpKSB7CisJCXByX2VycigiJXM6IGludmFsaWQgbW9kdWxlIG51bWJlciAlZFxuIiwgRFJJVkVSX05BTUUsIG1vZF9ubyk7CisJCXJldHVybiAtRVBFUk07CisJfQorCXNpZCA9IHR3bDQwMzBfbWFwW21vZF9ub10uc2lkOworCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbc2lkXTsKKworCWlmICh1bmxpa2VseSghaW51c2UpKSB7CisJCXByX2VycigiJXM6IGNsaWVudCAlZCBpcyBub3QgaW5pdGlhbGl6ZWRcbiIsIERSSVZFUl9OQU1FLCBzaWQpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwltdXRleF9sb2NrKCZ0d2wtPnhmZXJfbG9jayk7CisJLyoKKwkgKiBbTVNHMV06IGZpbGwgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgZGF0YQorCSAqIGZpbGwgdGhlIGRhdGEgVHggYnVmZmVyCisJICovCisJbXNnID0gJnR3bC0+eGZlcl9tc2dbMF07CisJbXNnLT5hZGRyID0gdHdsLT5hZGRyZXNzOworCW1zZy0+bGVuID0gbnVtX2J5dGVzICsgMTsKKwltc2ctPmZsYWdzID0gMDsKKwltc2ctPmJ1ZiA9IHZhbHVlOworCS8qIG92ZXIgd3JpdGUgdGhlIGZpcnN0IGJ5dGUgb2YgYnVmZmVyIHdpdGggdGhlIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKwkqdmFsdWUgPSB0d2w0MDMwX21hcFttb2Rfbm9dLmJhc2UgKyByZWc7CisJcmV0ID0gaTJjX3RyYW5zZmVyKHR3bC0+Y2xpZW50LT5hZGFwdGVyLCB0d2wtPnhmZXJfbXNnLCAxKTsKKwltdXRleF91bmxvY2soJnR3bC0+eGZlcl9sb2NrKTsKKworCS8qIGkyY1RyYW5zZmVyIHJldHVybnMgbnVtIG1lc3NhZ2VzLnRyYW5zbGF0ZSBpdCBwbHMuLiAqLworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gMDsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh0d2w0MDMwX2kyY193cml0ZSk7CisKKy8qKgorICogdHdsNDAzMF9pMmNfcmVhZCAtIFJlYWRzIGEgbiBiaXQgcmVnaXN0ZXIgaW4gVFdMNDAzMAorICogQG1vZF9ubzogbW9kdWxlIG51bWJlcgorICogQHZhbHVlOiBhbiBhcnJheSBvZiBudW1fYnl0ZXMgY29udGFpbmluZyBkYXRhIHRvIGJlIHJlYWQKKyAqIEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MgKGp1c3Qgb2Zmc2V0IHdpbGwgZG8pCisgKiBAbnVtX2J5dGVzOiBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIKKyAqCisgKiBSZXR1cm5zIHJlc3VsdCBvZiBvcGVyYXRpb24gLSBudW1fYnl0ZXMgaXMgc3VjY2VzcyBlbHNlIGZhaWx1cmUuCisgKi8KK2ludCB0d2w0MDMwX2kyY19yZWFkKHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcsIHU4IG51bV9ieXRlcykKK3sKKwlpbnQgcmV0OworCXU4IHZhbDsKKwlpbnQgc2lkOworCXN0cnVjdCB0d2w0MDMwX2NsaWVudCAqdHdsOworCXN0cnVjdCBpMmNfbXNnICptc2c7CisKKwlpZiAodW5saWtlbHkobW9kX25vID4gVFdMNDAzMF9NT0RVTEVfTEFTVCkpIHsKKwkJcHJfZXJyKCIlczogaW52YWxpZCBtb2R1bGUgbnVtYmVyICVkXG4iLCBEUklWRVJfTkFNRSwgbW9kX25vKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisJc2lkID0gdHdsNDAzMF9tYXBbbW9kX25vXS5zaWQ7CisJdHdsID0gJnR3bDQwMzBfbW9kdWxlc1tzaWRdOworCisJaWYgKHVubGlrZWx5KCFpbnVzZSkpIHsKKwkJcHJfZXJyKCIlczogY2xpZW50ICVkIGlzIG5vdCBpbml0aWFsaXplZFxuIiwgRFJJVkVSX05BTUUsIHNpZCk7CisJCXJldHVybiAtRVBFUk07CisJfQorCW11dGV4X2xvY2soJnR3bC0+eGZlcl9sb2NrKTsKKwkvKiBbTVNHMV0gZmlsbCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBkYXRhICovCisJbXNnID0gJnR3bC0+eGZlcl9tc2dbMF07CisJbXNnLT5hZGRyID0gdHdsLT5hZGRyZXNzOworCW1zZy0+bGVuID0gMTsKKwltc2ctPmZsYWdzID0gMDsJLyogUmVhZCB0aGUgcmVnaXN0ZXIgdmFsdWUgKi8KKwl2YWwgPSB0d2w0MDMwX21hcFttb2Rfbm9dLmJhc2UgKyByZWc7CisJbXNnLT5idWYgPSAmdmFsOworCS8qIFtNU0cyXSBmaWxsIHRoZSBkYXRhIHJ4IGJ1ZmZlciAqLworCW1zZyA9ICZ0d2wtPnhmZXJfbXNnWzFdOworCW1zZy0+YWRkciA9IHR3bC0+YWRkcmVzczsKKwltc2ctPmZsYWdzID0gSTJDX01fUkQ7CS8qIFJlYWQgdGhlIHJlZ2lzdGVyIHZhbHVlICovCisJbXNnLT5sZW4gPSBudW1fYnl0ZXM7CS8qIG9ubHkgbiBieXRlcyAqLworCW1zZy0+YnVmID0gdmFsdWU7CisJcmV0ID0gaTJjX3RyYW5zZmVyKHR3bC0+Y2xpZW50LT5hZGFwdGVyLCB0d2wtPnhmZXJfbXNnLCAyKTsKKwltdXRleF91bmxvY2soJnR3bC0+eGZlcl9sb2NrKTsKKworCS8qIGkyY1RyYW5zZmVyIHJldHVybnMgbnVtIG1lc3NhZ2VzLnRyYW5zbGF0ZSBpdCBwbHMuLiAqLworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gMDsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh0d2w0MDMwX2kyY19yZWFkKTsKKworLyoqCisgKiB0d2w0MDMwX2kyY193cml0ZV91OCAtIFdyaXRlcyBhIDggYml0IHJlZ2lzdGVyIGluIFRXTDQwMzAKKyAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKKyAqIEB2YWx1ZTogdGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gOCBiaXQKKyAqIEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MgKGp1c3Qgb2Zmc2V0IHdpbGwgZG8pCisgKgorICogUmV0dXJucyByZXN1bHQgb2Ygb3BlcmF0aW9uIC0gMCBpcyBzdWNjZXNzCisgKi8KK2ludCB0d2w0MDMwX2kyY193cml0ZV91OCh1OCBtb2Rfbm8sIHU4IHZhbHVlLCB1OCByZWcpCit7CisKKwkvKiAyIGJ5dGVzIG9mZnNldCAxIGNvbnRhaW5zIHRoZSBkYXRhIG9mZnNldCAwIGlzIHVzZWQgYnkgaTJjX3dyaXRlICovCisJdTggdGVtcF9idWZmZXJbMl0gPSB7IDAgfTsKKwkvKiBvZmZzZXQgMSBjb250YWlucyB0aGUgZGF0YSAqLworCXRlbXBfYnVmZmVyWzFdID0gdmFsdWU7CisJcmV0dXJuIHR3bDQwMzBfaTJjX3dyaXRlKG1vZF9ubywgdGVtcF9idWZmZXIsIHJlZywgMSk7Cit9CitFWFBPUlRfU1lNQk9MKHR3bDQwMzBfaTJjX3dyaXRlX3U4KTsKKworLyoqCisgKiB0d2w0MDMwX2kyY19yZWFkX3U4IC0gUmVhZHMgYSA4IGJpdCByZWdpc3RlciBmcm9tIFRXTDQwMzAKKyAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKKyAqIEB2YWx1ZTogdGhlIHZhbHVlIHJlYWQgOCBiaXQKKyAqIEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MgKGp1c3Qgb2Zmc2V0IHdpbGwgZG8pCisgKgorICogUmV0dXJucyByZXN1bHQgb2Ygb3BlcmF0aW9uIC0gMCBpcyBzdWNjZXNzCisgKi8KK2ludCB0d2w0MDMwX2kyY19yZWFkX3U4KHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcpCit7CisJcmV0dXJuIHR3bDQwMzBfaTJjX3JlYWQobW9kX25vLCB2YWx1ZSwgcmVnLCAxKTsKK30KK0VYUE9SVF9TWU1CT0wodHdsNDAzMF9pMmNfcmVhZF91OCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB1bnNpZ25lZCB0d2w0MDMwX2lycV9iYXNlOworCitzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gaXJxX2V2ZW50OworCisvKgorICogVGhpcyB0aHJlYWQgcHJvY2Vzc2VzIGludGVycnVwdHMgcmVwb3J0ZWQgYnkgdGhlIFByaW1hcnkgSW50ZXJydXB0IEhhbmRsZXIuCisgKi8KK3N0YXRpYyBpbnQgdHdsNDAzMF9pcnFfdGhyZWFkKHZvaWQgKmRhdGEpCit7CisJbG9uZyBpcnEgPSAobG9uZylkYXRhOworCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdGF0aWMgdW5zaWduZWQgaTJjX2Vycm9yczsKKwljb25zdCBzdGF0aWMgdW5zaWduZWQgbWF4X2kyY19lcnJvcnMgPSAxMDA7CisKKwljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCWludCByZXQ7CisJCWludCBtb2R1bGVfaXJxOworCQl1OCBwaWhfaXNyOworCisJCS8qIFdhaXQgZm9yIElSUSwgdGhlbiByZWFkIFBJSCBpcnEgc3RhdHVzIChhbHNvIGJsb2NraW5nKSAqLworCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmlycV9ldmVudCk7CisKKwkJcmV0ID0gdHdsNDAzMF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9QSUgsICZwaWhfaXNyLAorCQkJCQkgIFJFR19QSUhfSVNSX1AxKTsKKwkJaWYgKHJldCkgeworCQkJcHJfd2FybmluZygiJXM6IEkyQyBlcnJvciAlZCByZWFkaW5nIFBJSCBJU1JcbiIsCisJCQkJCURSSVZFUl9OQU1FLCByZXQpOworCQkJaWYgKCsraTJjX2Vycm9ycyA+PSBtYXhfaTJjX2Vycm9ycykgeworCQkJCXByaW50ayhLRVJOX0VSUiAiTWF4aW11bSBJMkMgZXJyb3IgY291bnQiCisJCQkJCQkiIGV4Y2VlZGVkLiAgVGVybWluYXRpbmcgJXMuXG4iLAorCQkJCQkJX19mdW5jX18pOworCQkJCWJyZWFrOworCQkJfQorCQkJY29tcGxldGUoJmlycV9ldmVudCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIHRoZXNlIGhhbmRsZXJzIGRlYWwgd2l0aCB0aGUgcmVsZXZhbnQgU0lIIGlycSBzdGF0dXMgKi8KKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJZm9yIChtb2R1bGVfaXJxID0gdHdsNDAzMF9pcnFfYmFzZTsKKwkJCQlwaWhfaXNyOworCQkJCXBpaF9pc3IgPj49IDEsIG1vZHVsZV9pcnErKykgeworCQkJaWYgKHBpaF9pc3IgJiAweDEpIHsKKwkJCQlpcnFfZGVzY190ICpkID0gaXJxX2Rlc2MgKyBtb2R1bGVfaXJxOworCisJCQkJZC0+aGFuZGxlX2lycShtb2R1bGVfaXJxLCBkKTsKKwkJCX0KKwkJfQorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkb190d2w0MDMwX2lycSgpIGlzIHRoZSBkZXNjLT5oYW5kbGUgbWV0aG9kIGZvciB0aGUgdHdsNDAzMCBpbnRlcnJ1cHQuCisgKiBUaGlzIGlzIGEgY2hhaW5lZCBpbnRlcnJ1cHQsIHNvIHRoZXJlIGlzIG5vIGRlc2MtPmFjdGlvbiBtZXRob2QgZm9yIGl0LgorICogTm93IHdlIG5lZWQgdG8gcXVlcnkgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGluIHRoZSB0d2w0MDMwIHRvIGRldGVybWluZQorICogd2hpY2ggbW9kdWxlIGlzIGdlbmVyYXRpbmcgdGhlIGludGVycnVwdCByZXF1ZXN0LiAgSG93ZXZlciwgd2UgY2FuJ3QgZG8gaTJjCisgKiB0cmFuc2FjdGlvbnMgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIG11c3QgZGVmZXIgdGhhdCB3b3JrIHRvIGEga2VybmVsCisgKiB0aHJlYWQuICBBbGwgd2UgZG8gaGVyZSBpcyBhY2tub3dsZWRnZSBhbmQgbWFzayB0aGUgaW50ZXJydXB0IGFuZCB3YWtldXAKKyAqIHRoZSBrZXJuZWwgdGhyZWFkLgorICovCitzdGF0aWMgdm9pZCBkb190d2w0MDMwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpcnFfZGVzY190ICpkZXNjKQoreworCWNvbnN0IHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwkvKgorCSAqIEVhcmxpZXIgdGhpcyB3YXMgZGVzYy0+dHJpZ2dlcmVkID0gMTsKKwkgKi8KKwlkZXNjLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCisJLyoKKwkgKiBBY2tub3dsZWRnZSwgY2xlYXIgX0FORF8gZGlzYWJsZSB0aGUgaW50ZXJydXB0LgorCSAqLworCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCisJaWYgKCFkZXNjLT5kZXB0aCkgeworCQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKKworCQljb21wbGV0ZSgmaXJxX2V2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBfX2luaXQgc3RhcnRfdHdsNDAzMF9pcnFfdGhyZWFkKGxvbmcgaXJxKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOworCisJaW5pdF9jb21wbGV0aW9uKCZpcnFfZXZlbnQpOworCXRocmVhZCA9IGt0aHJlYWRfcnVuKHR3bDQwMzBfaXJxX3RocmVhZCwgKHZvaWQgKilpcnEsICJ0d2w0MDMwLWlycSIpOworCWlmICghdGhyZWFkKQorCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgY3JlYXRlIHR3bDQwMzAgaXJxICVsZCB0aHJlYWQhXG4iLAorCQkgICAgICAgRFJJVkVSX05BTUUsIGlycSk7CisKKwlyZXR1cm4gdGhyZWFkOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGFkZF9jaGlsZHJlbihzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdHdsNDAzMF9jbGllbnQJKnR3bCA9IE5VTEw7CisJaW50CQkJc3RhdHVzID0gMDsKKworCWlmICh0d2xfaGFzX2JjaSgpICYmIHBkYXRhLT5iY2kpIHsKKwkJdHdsID0gJnR3bDQwMzBfbW9kdWxlc1szXTsKKworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ0d2w0MDMwX2JjaSIsIC0xKTsKKwkJaWYgKCFwZGV2KSB7CisJCQlwcl9kZWJ1ZygiJXM6IGNhbid0IGFsbG9jIGJjaSBkZXZcbiIsIERSSVZFUl9OQU1FKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJcGRldi0+ZGV2LnBhcmVudCA9ICZ0d2wtPmNsaWVudC0+ZGV2OworCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIHBkYXRhLT5iY2ksCisJCQkJCXNpemVvZigqcGRhdGEtPmJjaSkpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgYWRkIGJjaSBkYXRhLCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfQorCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJc3RydWN0IHJlc291cmNlIHIgPSB7CisJCQkJLnN0YXJ0ID0gVFdMNDAzMF9QV1JJUlFfQ0hHX1BSRVMsCisJCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCQl9OworCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmciwgMSk7CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGNyZWF0ZSBiY2kgZGV2LCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJaWYgKHR3bF9oYXNfZ3BpbygpICYmIHBkYXRhLT5ncGlvKSB7CisJCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbMV07CisKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidHdsNDAzMF9ncGlvIiwgLTEpOworCQlpZiAoIXBkZXYpIHsKKwkJCXByX2RlYnVnKCIlczogY2FuJ3QgYWxsb2MgZ3BpbyBkZXZcbiIsIERSSVZFUl9OQU1FKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCisJCS8qIG1vcmUgZHJpdmVyIG1vZGVsIGluaXQgKi8KKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlwZGV2LT5kZXYucGFyZW50ID0gJnR3bC0+Y2xpZW50LT5kZXY7CisJCQkvKiBkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7ICovCisKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YS0+Z3BpbywKKwkJCQkJc2l6ZW9mKCpwZGF0YS0+Z3BpbykpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgYWRkIGdwaW8gZGF0YSwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQkJZ290byBlcnI7CisJCQl9CisJCX0KKworCQkvKiBHUElPIG1vZHVsZSBJUlEgKi8KKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlzdHJ1Y3QgcmVzb3VyY2UJciA9IHsKKwkJCQkuc3RhcnQgPSBwZGF0YS0+aXJxX2Jhc2UgKyAwLAorCQkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkJfTsKKworCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgJnIsIDEpOworCQl9CisKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBjcmVhdGUgZ3BpbyBkZXYsICVkXG4iLAorCQkJCQlzdGF0dXMpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAodHdsX2hhc19rZXlwYWQoKSAmJiBwZGF0YS0+a2V5cGFkKSB7CisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInR3bDQwMzBfa2V5cGFkIiwgLTEpOworCQlpZiAocGRldikgeworCQkJdHdsID0gJnR3bDQwMzBfbW9kdWxlc1syXTsKKwkJCXBkZXYtPmRldi5wYXJlbnQgPSAmdHdsLT5jbGllbnQtPmRldjsKKwkJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YS0+a2V5cGFkLAorCQkJCQlzaXplb2YoKnBkYXRhLT5rZXlwYWQpKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGFkZCBrZXlwYWQgZGF0YSwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJCSJjYW4ndCBjcmVhdGUga2V5cGFkIGRldiwgJWRcbiIsCisJCQkJCQlzdGF0dXMpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQl9IGVsc2UgeworCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBhbGxvYyBrZXlwYWQgZGV2XG4iLCBEUklWRVJfTkFNRSk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAodHdsX2hhc19tYWRjKCkgJiYgcGRhdGEtPm1hZGMpIHsKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidHdsNDAzMF9tYWRjIiwgLTEpOworCQlpZiAocGRldikgeworCQkJdHdsID0gJnR3bDQwMzBfbW9kdWxlc1syXTsKKwkJCXBkZXYtPmRldi5wYXJlbnQgPSAmdHdsLT5jbGllbnQtPmRldjsKKwkJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YS0+bWFkYywKKwkJCQkJc2l6ZW9mKCpwZGF0YS0+bWFkYykpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBhZGQgbWFkYyBkYXRhLCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJCSJjYW4ndCBjcmVhdGUgbWFkYyBkZXYsICVkXG4iLAorCQkJCQkJc3RhdHVzKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByX2RlYnVnKCIlczogY2FuJ3QgYWxsb2MgbWFkYyBkZXZcbiIsIERSSVZFUl9OQU1FKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCWlmICh0d2xfaGFzX3J0YygpKSB7CisJCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbM107CisKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidHdsNDAzMF9ydGMiLCAtMSk7CisJCWlmICghcGRldikgeworCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBhbGxvYyBydGMgZGV2XG4iLCBEUklWRVJfTkFNRSk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJcGRldi0+ZGV2LnBhcmVudCA9ICZ0d2wtPmNsaWVudC0+ZGV2OworCQkJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOworCQl9CisKKwkJLyoKKwkJICogUkVWSVNJVCBwbGF0Zm9ybV9kYXRhIGhlcmUgY3VycmVudGx5IG1pZ2h0IHVzZSBvZgorCQkgKiAibXNlY3VyZSIgbGluZSAuLi4gYnV0IGZvciBub3cgd2UganVzdCBleHBlY3QgYm9hcmQKKwkJICogc2V0dXAgdG8gdGVsbCB0aGUgY2hpcCAid2UgYXJlIHNlY3VyZSIgYXQgYWxsIHRpbWVzLgorCQkgKiBFdmVudHVhbGx5LCBMaW51eCBtaWdodCBiZWNvbWUgbW9yZSBhd2FyZSBvZiBzdWNoCisJCSAqIEhXIHNlY3VyaXR5IGNvbmNlcm5zLCBhbmQgImxlYXN0IHByaXZpbGVnZSIuCisJCSAqLworCisJCS8qIFJUQyBtb2R1bGUgSVJRICovCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJc3RydWN0IHJlc291cmNlCXIgPSB7CisJCQkJLyogUkVWSVNJVCBkb24ndCBoYXJkLXdpcmUgdGhpcyBzdHVmZiAqLworCQkJCS5zdGFydCA9IFRXTDQwMzBfUFdSSVJRX1JUQywKKwkJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJCX07CisKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyLCAxKTsKKwkJfQorCisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgY3JlYXRlIHJ0YyBkZXYsICVkXG4iLAorCQkJCQlzdGF0dXMpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAodHdsX2hhc191c2IoKSAmJiBwZGF0YS0+dXNiKSB7CisJCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbMF07CisKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidHdsNDAzMF91c2IiLCAtMSk7CisJCWlmICghcGRldikgeworCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBhbGxvYyB1c2IgZGV2XG4iLCBEUklWRVJfTkFNRSk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXBkZXYtPmRldi5wYXJlbnQgPSAmdHdsLT5jbGllbnQtPmRldjsKKwkJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YS0+dXNiLAorCQkJCQlzaXplb2YoKnBkYXRhLT51c2IpKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgYWRkIHVzYiBkYXRhLCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfQorCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJc3RydWN0IHJlc291cmNlIHIgPSB7CisJCQkJLnN0YXJ0ID0gVFdMNDAzMF9QV1JJUlFfVVNCX1BSRVMsCisJCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCQl9OworCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmciwgMSk7CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGNyZWF0ZSB1c2IgZGV2LCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJfQorCX0KKworZXJyOgorCWlmIChzdGF0dXMpCisJCXByX2VycigiZmFpbGVkIHRvIGFkZCB0d2w0MDMwJ3MgY2hpbGRyZW4gKHN0YXR1cyAlZClcbiIsIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFRoZXNlIHRocmVlIGZ1bmN0aW9ucyBpbml0aWFsaXplIHRoZSBvbi1jaGlwIGNsb2NrIGZyYW1ld29yaywKKyAqIGxldHRpbmcgaXQgZ2VuZXJhdGUgdGhlIHJpZ2h0IGZyZXF1ZW5jaWVzIGZvciBVU0IsIE1BREMsIGFuZAorICogb3RoZXIgcHVycG9zZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBwcm90ZWN0X3BtX21hc3Rlcih2b2lkKQoreworCWludCBlID0gMDsKKworCWUgPSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIEtFWV9MT0NLLAorCQkJUl9QUk9URUNUX0tFWSk7CisJcmV0dXJuIGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCB1bnByb3RlY3RfcG1fbWFzdGVyKHZvaWQpCit7CisJaW50IGUgPSAwOworCisJZSB8PSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIEtFWV9VTkxPQ0sxLAorCQkJUl9QUk9URUNUX0tFWSk7CisJZSB8PSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIEtFWV9VTkxPQ0syLAorCQkJUl9QUk9URUNUX0tFWSk7CisJcmV0dXJuIGU7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjbG9ja3NfaW5pdCh2b2lkKQoreworCWludCBlID0gMDsKKwlzdHJ1Y3QgY2xrICpvc2M7CisJdTMyIHJhdGU7CisJdTggY3RybCA9IEhGQ0xLX0ZSRVFfMjZfTUhaOworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCW9zYyA9IGNsa19nZXQoTlVMTCwgIm9zY19jayIpOworCWVsc2UKKwkJb3NjID0gY2xrX2dldChOVUxMLCAib3NjX3N5c19jayIpOworI2Vsc2UKKwkvKiBSRVZJU0lUIGZvciBub24tT01BUCBzeXN0ZW1zLCBwYXNzIHRoZSBjbG9jayByYXRlIGZyb20KKwkgKiBib2FyZCBpbml0IGNvZGUsIHVzaW5nIHBsYXRmb3JtX2RhdGEuCisJICovCisJb3NjID0gRVJSX1BUUigtRUlPKTsKKyNlbmRpZgorCWlmIChJU19FUlIob3NjKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJTa2lwcGluZyB0d2w0MDMwIGludGVybmFsIGNsb2NrIGluaXQgYW5kICIKKwkJCQkidXNpbmcgYm9vdGxvYWRlciB2YWx1ZSAodW5rbm93biBvc2MgcmF0ZSlcbiIpOworCQlyZXR1cm47CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShvc2MpOworCWNsa19wdXQob3NjKTsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgMTkyMDAwMDA6CisJCWN0cmwgPSBIRkNMS19GUkVRXzE5cDJfTUhaOworCQlicmVhazsKKwljYXNlIDI2MDAwMDAwOgorCQljdHJsID0gSEZDTEtfRlJFUV8yNl9NSFo7CisJCWJyZWFrOworCWNhc2UgMzg0MDAwMDA6CisJCWN0cmwgPSBIRkNMS19GUkVRXzM4cDRfTUhaOworCQlicmVhazsKKwl9CisKKwljdHJsIHw9IEhJR0hfUEVSRl9TUTsKKwllIHw9IHVucHJvdGVjdF9wbV9tYXN0ZXIoKTsKKwkvKiBlZmZlY3QtPk1BREMrVVNCIGNrIGVuICovCisJZSB8PSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIGN0cmwsIFJfQ0ZHX0JPT1QpOworCWUgfD0gcHJvdGVjdF9wbV9tYXN0ZXIoKTsKKworCWlmIChlIDwgMCkKKwkJcHJfZXJyKCIlczogY2xvY2sgaW5pdCBlcnIgWyVkXVxuIiwgRFJJVkVSX05BTUUsIGUpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHR3bDQwMzBfaTJjX2NsZWFyX2lzciAtIGNsZWFyIFRXTDQwMzAgU0lIIElTUiByZWdzIHZpYSByZWFkICsgd3JpdGUKKyAqIEBtb2Rfbm86IFRXTDQwMzAgbW9kdWxlIG51bWJlcgorICogQHJlZzogcmVnaXN0ZXIgaW5kZXggdG8gY2xlYXIKKyAqIEBjb3I6IHZhbHVlIG9mIHRoZSA8bW9kdWxlPl9TSUhfQ1RSTC5DT1IgYml0ICgxIG9yIDApCisgKgorICogRWl0aGVyIHJlYWRzIChjb3IgPT0gMSkgb3Igd3JpdGVzIChjb3IgPT0gMCkgdG8gYSBUV0w0MDMwIGludGVycnVwdAorICogc3RhdHVzIHJlZ2lzdGVyIHRvIGVuc3VyZSB0aGF0IGFueSBwcmlvciBpbnRlcnJ1cHRzIGFyZSBjbGVhcmVkLgorICogUmV0dXJucyB0aGUgc3RhdHVzIGZyb20gdGhlIEkyQyByZWFkIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIGludCBfX2luaXQgdHdsNDAzMF9pMmNfY2xlYXJfaXNyKHU4IG1vZF9ubywgdTggcmVnLCB1OCBjb3IpCit7CisJdTggdG1wOworCisJcmV0dXJuIChjb3IpID8gdHdsNDAzMF9pMmNfcmVhZF91OChtb2Rfbm8sICZ0bXAsIHJlZykgOgorCQl0d2w0MDMwX2kyY193cml0ZV91OChtb2Rfbm8sIDB4ZmYsIHJlZyk7Cit9CisKKy8qKgorICogdHdsNDAzMF9yZWFkX2Nvcl9iaXQgLSBhcmUgVFdMIG1vZHVsZSBJU1JzIGNsZWFyZWQgYnkgcmVhZHMgb3Igd3JpdGVzPworICogQG1vZF9ubzogVFdMNDAzMCBtb2R1bGUgbnVtYmVyCisgKiBAcmVnOiByZWdpc3RlciBpbmRleCB0byBjbGVhcgorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgVFdMNDAzMCBTSUggaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKElTUnMpIGZvcgorICogdGhlIHNwZWNpZmllZCBUV0wgbW9kdWxlIGFyZSBjbGVhcmVkIGJ5IHJlYWRzLCBvciAwIGlmIGNsZWFyZWQgYnkKKyAqIHdyaXRlcy4KKyAqLworc3RhdGljIGludCB0d2w0MDMwX3JlYWRfY29yX2JpdCh1OCBtb2Rfbm8sIHU4IHJlZykKK3sKKwl1OCB0bXAgPSAwOworCisJV0FSTl9PTih0d2w0MDMwX2kyY19yZWFkX3U4KG1vZF9ubywgJnRtcCwgcmVnKSA8IDApOworCisJdG1wICY9IFRXTDQwMzBfU0lIX0NUUkxfQ09SX01BU0s7CisJdG1wID4+PSBfX2ZmcyhUV0w0MDMwX1NJSF9DVFJMX0NPUl9NQVNLKTsKKworCXJldHVybiB0bXA7Cit9CisKKy8qKgorICogdHdsNDAzMF9tYXNrX2NsZWFyX2ludHJzIC0gbWFzayBhbmQgY2xlYXIgYWxsIFRXTDQwMzAgaW50ZXJydXB0cworICogQHQ6IHBvaW50ZXIgdG8gdHdsNDAzMF9tb2RfaXJlZ3MgYXJyYXkKKyAqIEB0X3N6OiBBUlJBWV9TSVpFKHQpIChzdGFydGluZyBhdCAxKQorICoKKyAqIE1hc2sgYWxsIFRXTDQwMzAgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzIChJTVJzKSBhbmQgY2xlYXIgYWxsCisgKiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAoSVNScykuICBObyByZXR1cm4gdmFsdWUsIGJ1dCB3aWxsIFdBUk4gaWYKKyAqIGFueSBJMkMgb3BlcmF0aW9ucyBmYWlsLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgdHdsNDAzMF9tYXNrX2NsZWFyX2ludHJzKGNvbnN0IHN0cnVjdCB0d2w0MDMwX21vZF9pcmVncyAqdCwKKwkJCQkJICAgIGNvbnN0IHU4IHRfc3opCit7CisJaW50IGksIGo7CisKKwkvKgorCSAqIE4uQi4gLSBmdXJ0aGVyIGVmZmljaWVuY3kgaXMgcG9zc2libGUgaGVyZS4gIEVpZ2h0IEkyQworCSAqIG9wZXJhdGlvbnMgb24gQkNJIGFuZCBHUElPIG1vZHVsZXMgYXJlIGF2b2lkYWJsZSBpZiBJMkMKKwkgKiBidXJzdCByZWFkL3dyaXRlIHRyYW5zYWN0aW9ucyB3ZXJlIGltcGxlbWVudGVkLiAgV291bGQKKwkgKiBwcm9iYWJseSBzYXZlIGFib3V0IDFtcyBvZiBib290IHRpbWUgYW5kIGEgc21hbGwgYW1vdW50IG9mCisJICogcG93ZXIuCisJICovCisJZm9yIChpID0gMDsgaSA8IHRfc3o7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgdHdsNDAzMF9tb2RfaXJlZ3MgdG1yID0gdFtpXTsKKwkJaW50IGNvcjsKKworCQkvKiBBcmUgSVNScyBjbGVhcmVkIGJ5IHJlYWRzIG9yIHdyaXRlcz8gKi8KKwkJY29yID0gdHdsNDAzMF9yZWFkX2Nvcl9iaXQodG1yLm1vZF9ubywgdG1yLnNpaF9jdHJsKTsKKworCQlmb3IgKGogPSAwOyBqIDwgdG1yLnJlZ19jbnQ7IGorKykgeworCisJCQkvKiBNYXNrIGludGVycnVwdHMgYXQgdGhlIFRXTDQwMzAgKi8KKwkJCVdBUk5fT04odHdsNDAzMF9pMmNfd3JpdGVfdTgodG1yLm1vZF9ubywgMHhmZiwKKwkJCQkJCSAgICAgdG1yLmltcnNbal0pIDwgMCk7CisKKwkJCS8qIENsZWFyIFRXTDQwMzAgSVNScyAqLworCQkJV0FSTl9PTih0d2w0MDMwX2kyY19jbGVhcl9pc3IodG1yLm1vZF9ubywKKwkJCQkJCSAgICAgIHRtci5pc3JzW2pdLCBjb3IpIDwgMCk7CisJCX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQgdHdsX2luaXRfaXJxKGludCBpcnFfbnVtLCB1bnNpZ25lZCBpcnFfYmFzZSwgdW5zaWduZWQgaXJxX2VuZCkKK3sKKwlpbnQJaTsKKworCS8qCisJICogTWFzayBhbmQgY2xlYXIgYWxsIFRXTDQwMzAgaW50ZXJydXB0cyBzaW5jZSBpbml0aWFsbHkgd2UgZG8KKwkgKiBub3QgaGF2ZSBhbnkgVFdMNDAzMCBtb2R1bGUgaW50ZXJydXB0IGhhbmRsZXJzIHByZXNlbnQKKwkgKi8KKwl0d2w0MDMwX21hc2tfY2xlYXJfaW50cnModHdsNDAzMF9tb2RfcmVncywKKwkJCQkgQVJSQVlfU0laRSh0d2w0MDMwX21vZF9yZWdzKSk7CisKKwl0d2w0MDMwX2lycV9iYXNlID0gaXJxX2Jhc2U7CisKKwkvKiBpbnN0YWxsIGFuIGlycSBoYW5kbGVyIGZvciBlYWNoIG9mIHRoZSBQSUggbW9kdWxlcyAqLworCWZvciAoaSA9IGlycV9iYXNlOyBpIDwgaXJxX2VuZDsgaSsrKSB7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmdHdsNDAzMF9pcnFfY2hpcCwKKwkJCQloYW5kbGVfc2ltcGxlX2lycSk7CisJCWFjdGl2YXRlX2lycShpKTsKKwl9CisKKwkvKiBpbnN0YWxsIGFuIGlycSBoYW5kbGVyIHRvIGRlbXVsdGlwbGV4IHRoZSBUV0w0MDMwIGludGVycnVwdCAqLworCXNldF9pcnFfZGF0YShpcnFfbnVtLCBzdGFydF90d2w0MDMwX2lycV90aHJlYWQoaXJxX251bSkpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGlycV9udW0sIGRvX3R3bDQwMzBfaXJxKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB0d2w0MDMwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXVuc2lnbmVkIGk7CisKKwkvKiBGSVhNRSB1bmRvIHR3bF9pbml0X2lycSgpICovCisJaWYgKHR3bDQwMzBfaXJxX2Jhc2UpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJjYW4ndCB5ZXQgY2xlYW4gdXAgSVJRcz9cbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVFdMNDAzMF9OVU1fU0xBVkVTOyBpKyspIHsKKwkJc3RydWN0IHR3bDQwMzBfY2xpZW50CSp0d2wgPSAmdHdsNDAzMF9tb2R1bGVzW2ldOworCisJCWlmICh0d2wtPmNsaWVudCAmJiB0d2wtPmNsaWVudCAhPSBjbGllbnQpCisJCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UodHdsLT5jbGllbnQpOworCQl0d2w0MDMwX21vZHVsZXNbaV0uY2xpZW50ID0gTlVMTDsKKwl9CisJaW51c2UgPSBmYWxzZTsKKwlyZXR1cm4gMDsKK30KKworLyogTk9URTogIHRoaXMgZHJpdmVyIG9ubHkgaGFuZGxlcyBhIHNpbmdsZSB0d2w0MDMwL3RwczY1OXgwIGNoaXAgKi8KK3N0YXRpYyBpbnQKK3R3bDQwMzBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWludAkJCQlzdGF0dXM7CisJdW5zaWduZWQJCQlpOworCXN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEJKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhP1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykgPT0gMCkgeworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImNhbid0IHRhbGsgSTJDP1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChpbnVzZSB8fCB0d2w0MDMwX2lycV9iYXNlKSB7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZHJpdmVyIGlzIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVFdMNDAzMF9OVU1fU0xBVkVTOyBpKyspIHsKKwkJc3RydWN0IHR3bDQwMzBfY2xpZW50CSp0d2wgPSAmdHdsNDAzMF9tb2R1bGVzW2ldOworCisJCXR3bC0+YWRkcmVzcyA9IGNsaWVudC0+YWRkciArIGk7CisJCWlmIChpID09IDApCisJCQl0d2wtPmNsaWVudCA9IGNsaWVudDsKKwkJZWxzZSB7CisJCQl0d2wtPmNsaWVudCA9IGkyY19uZXdfZHVtbXkoY2xpZW50LT5hZGFwdGVyLAorCQkJCQl0d2wtPmFkZHJlc3MpOworCQkJaWYgKCF0d2wtPmNsaWVudCkgeworCQkJCWRldl9lcnIoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBhdHRhY2ggY2xpZW50ICVkXG4iLCBpKTsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJCXN0cmxjcHkodHdsLT5jbGllbnQtPm5hbWUsIGlkLT5uYW1lLAorCQkJCQlzaXplb2YodHdsLT5jbGllbnQtPm5hbWUpKTsKKwkJfQorCQltdXRleF9pbml0KCZ0d2wtPnhmZXJfbG9jayk7CisJfQorCWludXNlID0gdHJ1ZTsKKworCS8qIHNldHVwIGNsb2NrIGZyYW1ld29yayAqLworCWNsb2Nrc19pbml0KCk7CisKKwkvKiBNYXliZSBpbml0IHRoZSBUMiBJbnRlcnJ1cHQgc3Vic3lzdGVtICovCisJaWYgKGNsaWVudC0+aXJxCisJCQkmJiBwZGF0YS0+aXJxX2Jhc2UKKwkJCSYmIHBkYXRhLT5pcnFfZW5kID4gcGRhdGEtPmlycV9iYXNlKSB7CisJCXR3bF9pbml0X2lycShjbGllbnQtPmlycSwgcGRhdGEtPmlycV9iYXNlLCBwZGF0YS0+aXJxX2VuZCk7CisJCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIklSUSAlZCBjaGFpbnMgSVJRcyAlZC4uJWRcbiIsCisJCQkJY2xpZW50LT5pcnEsIHBkYXRhLT5pcnFfYmFzZSwgcGRhdGEtPmlycV9lbmQgLSAxKTsKKwl9CisKKwlzdGF0dXMgPSBhZGRfY2hpbGRyZW4ocGRhdGEpOworZmFpbDoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJdHdsNDAzMF9yZW1vdmUoY2xpZW50KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHdsNDAzMF9pZHNbXSA9IHsKKwl7ICJ0d2w0MDMwIiwgMCB9LAkvKiAiVHJpdG9uIDIiICovCisJeyAidHBzNjU5NTAiLCAwIH0sCS8qIGNhdGFsb2cgdmVyc2lvbiBvZiB0d2w0MDMwICovCisJeyAidHBzNjU5MzAiLCAwIH0sCS8qIGZld2VyIExET3MgYW5kIERBQ3M7IG5vIGNoYXJnZXIgKi8KKwl7ICJ0cHM2NTkyMCIsIDAgfSwJLyogZmV3ZXIgTERPczsgbm8gY29kZWMgb3IgY2hhcmdlciAqLworCXsgInR3bDUwMzAiLCAwIH0sCS8qIFQyIHVwZGF0ZWQgKi8KKwl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHR3bDQwMzBfaWRzKTsKKworLyogT25lIENsaWVudCBEcml2ZXIgLCA0IENsaWVudHMgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0d2w0MDMwX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkuaWRfdGFibGUJPSB0d2w0MDMwX2lkcywKKwkucHJvYmUJCT0gdHdsNDAzMF9wcm9iZSwKKwkucmVtb3ZlCQk9IHR3bDQwMzBfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdHdsNDAzMF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0d2w0MDMwX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwodHdsNDAzMF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHR3bDQwMzBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ0d2w0MDMwX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh0d2w0MDMwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cywgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMgQ29yZSBpbnRlcmZhY2UgZm9yIFRXTDQwMzAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMgYi9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmODdmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCkBAIC0wLDAgKzEsMTI3MyBAQAorLyoKKyAqIHdtODM1MC1jb3JlLmMgIC0tICBEZXZpY2UgYWNjZXNzIGZvciBXb2xmc29uIFdNODM1MAorICoKKyAqIENvcHlyaWdodCAyMDA3LCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kLCBNYXJrIEJyb3duCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvYXVkaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2NvbXBhcmF0b3IuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3BtaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC93ZHQuaD4KKworI2RlZmluZSBXTTgzNTBfVU5MT0NLX0tFWQkJMHgwMDEzCisjZGVmaW5lIFdNODM1MF9MT0NLX0tFWQkJCTB4MDAwMAorCisjZGVmaW5lIFdNODM1MF9DTE9DS19DT05UUk9MXzEJCTB4MjgKKyNkZWZpbmUgV004MzUwX0FJRl9URVNUCQkJMHg3NAorCisvKiBkZWJ1ZyAqLworI2RlZmluZSBXTTgzNTBfQlVTX0RFQlVHIDAKKyNpZiBXTTgzNTBfQlVTX0RFQlVHCisjZGVmaW5lIGR1bXAocmVncywgc3JjKSBkbyB7IFwKKwlpbnQgaV87IFwKKwl1MTYgKnNyY18gPSBzcmM7IFwKKwlwcmludGsoS0VSTl9ERUJVRyk7IFwKKwlmb3IgKGlfID0gMDsgaV8gPCByZWdzOyBpXysrKSBcCisJCXByaW50aygiIDB4JTQuNHgiLCAqc3JjXysrKTsgXAorCXByaW50aygiXG4iKTsgXAorfSB3aGlsZSAoMCk7CisjZWxzZQorI2RlZmluZSBkdW1wKGJ5dGVzLCBzcmMpCisjZW5kaWYKKworI2RlZmluZSBXTTgzNTBfTE9DS19ERUJVRyAwCisjaWYgV004MzUwX0xPQ0tfREVCVUcKKyNkZWZpbmUgbGRiZyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKGZvcm1hdCwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgbGRiZyhmb3JtYXQsIGFyZy4uLikKKyNlbmRpZgorCisvKgorICogV004MzUwIERldmljZSBJTworICovCitzdGF0aWMgREVGSU5FX01VVEVYKGlvX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgocmVnX2xvY2tfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChhdXhhZGNfbXV0ZXgpOworCisvKiBQZXJmb3JtIGEgcGh5c2ljYWwgcmVhZCBmcm9tIHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgd204MzUwX3BoeXNfcmVhZChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIHU4IHJlZywgaW50IG51bV9yZWdzLAorCQkJICAgIHUxNiAqZGVzdCkKK3sKKwlpbnQgaSwgcmV0OworCWludCBieXRlcyA9IG51bV9yZWdzICogMjsKKworCWRldl9kYmcod204MzUwLT5kZXYsICJ2b2xhdGlsZSByZWFkXG4iKTsKKwlyZXQgPSB3bTgzNTAtPnJlYWRfZGV2KHdtODM1MCwgcmVnLCBieXRlcywgKGNoYXIgKilkZXN0KTsKKworCWZvciAoaSA9IHJlZzsgaSA8IHJlZyArIG51bV9yZWdzOyBpKyspIHsKKwkJLyogQ2FjaGUgaXMgQ1BVIGVuZGlhbiAqLworCQlkZXN0W2kgLSByZWddID0gYmUxNl90b19jcHUoZGVzdFtpIC0gcmVnXSk7CisKKwkJLyogU2F0aXNmeSBub24tdm9sYXRpbGUgYml0cyBmcm9tIGNhY2hlICovCisJCWRlc3RbaSAtIHJlZ10gJj0gd204MzUwX3JlZ19pb19tYXBbaV0udm9sOworCQlkZXN0W2kgLSByZWddIHw9IHdtODM1MC0+cmVnX2NhY2hlW2ldOworCisJCS8qIE1hc2sgb3V0IG5vbi1yZWFkYWJsZSBiaXRzICovCisJCWRlc3RbaSAtIHJlZ10gJj0gd204MzUwX3JlZ19pb19tYXBbaV0ucmVhZGFibGU7CisJfQorCisJZHVtcChudW1fcmVncywgZGVzdCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtODM1MF9yZWFkKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgdTggcmVnLCBpbnQgbnVtX3JlZ3MsIHUxNiAqZGVzdCkKK3sKKwlpbnQgaTsKKwlpbnQgZW5kID0gcmVnICsgbnVtX3JlZ3M7CisJaW50IHJldCA9IDA7CisJaW50IGJ5dGVzID0gbnVtX3JlZ3MgKiAyOworCisJaWYgKHdtODM1MC0+cmVhZF9kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoKHJlZyArIG51bV9yZWdzIC0gMSkgPiBXTTgzNTBfTUFYX1JFR0lTVEVSKSB7CisJCWRldl9lcnIod204MzUwLT5kZXYsICJpbnZhbGlkIHJlZyAleFxuIiwKKwkJCXJlZyArIG51bV9yZWdzIC0gMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcod204MzUwLT5kZXYsCisJCSIlcyBSJWQoMHglMi4yeCkgJWQgcmVnc1xuIiwgX19mdW5jX18sIHJlZywgcmVnLCBudW1fcmVncyk7CisKKyNpZiBXTTgzNTBfQlVTX0RFQlVHCisJLyogd2UgY2FuIF9zYWZlbHlfIHJlYWQgYW55IHJlZ2lzdGVyLCBidXQgd2FybiBpZiByZWFkIG5vdCBzdXBwb3J0ZWQgKi8KKwlmb3IgKGkgPSByZWc7IGkgPCBlbmQ7IGkrKykgeworCQlpZiAoIXdtODM1MF9yZWdfaW9fbWFwW2ldLnJlYWRhYmxlKQorCQkJZGV2X3dhcm4od204MzUwLT5kZXYsCisJCQkJInJlZyBSJWQgaXMgbm90IHJlYWRhYmxlXG4iLCBpKTsKKwl9CisjZW5kaWYKKworCS8qIGlmIGFueSB2b2xhdGlsZSByZWdpc3RlcnMgYXJlIHJlcXVpcmVkLCB0aGVuIHJlYWQgYmFjayBhbGwgKi8KKwlmb3IgKGkgPSByZWc7IGkgPCBlbmQ7IGkrKykKKwkJaWYgKHdtODM1MF9yZWdfaW9fbWFwW2ldLnZvbCkKKwkJCXJldHVybiB3bTgzNTBfcGh5c19yZWFkKHdtODM1MCwgcmVnLCBudW1fcmVncywgZGVzdCk7CisKKwkvKiBubyB2b2xhdGlsZXMsIHRoZW4gY2FjaGUgaXMgZ29vZCAqLworCWRldl9kYmcod204MzUwLT5kZXYsICJjYWNoZSByZWFkXG4iKTsKKwltZW1jcHkoZGVzdCwgJndtODM1MC0+cmVnX2NhY2hlW3JlZ10sIGJ5dGVzKTsKKwlkdW1wKG51bV9yZWdzLCBkZXN0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19yZWdfbG9ja2VkKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgdTggcmVnKQoreworCWlmIChyZWcgPT0gV004MzUwX1NFQ1VSSVRZIHx8CisJICAgIHdtODM1MC0+cmVnX2NhY2hlW1dNODM1MF9TRUNVUklUWV0gPT0gV004MzUwX1VOTE9DS19LRVkpCisJCXJldHVybiAwOworCisJaWYgKChyZWcgPT0gV004MzUwX0dQSU9fQ09ORklHVVJBVElPTl9JX08pIHx8CisJICAgIChyZWcgPj0gV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzEgJiYKKwkgICAgIHJlZyA8PSBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfNCkgfHwKKwkgICAgKHJlZyA+PSBXTTgzNTBfQkFUVEVSWV9DSEFSR0VSX0NPTlRST0xfMSAmJgorCSAgICAgcmVnIDw9IFdNODM1MF9CQVRURVJZX0NIQVJHRVJfQ09OVFJPTF8zKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX3dyaXRlKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgdTggcmVnLCBpbnQgbnVtX3JlZ3MsIHUxNiAqc3JjKQoreworCWludCBpOworCWludCBlbmQgPSByZWcgKyBudW1fcmVnczsKKwlpbnQgYnl0ZXMgPSBudW1fcmVncyAqIDI7CisKKwlpZiAod204MzUwLT53cml0ZV9kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoKHJlZyArIG51bV9yZWdzIC0gMSkgPiBXTTgzNTBfTUFYX1JFR0lTVEVSKSB7CisJCWRldl9lcnIod204MzUwLT5kZXYsICJpbnZhbGlkIHJlZyAleFxuIiwKKwkJCXJlZyArIG51bV9yZWdzIC0gMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGl0J3MgZ2VuZXJhbGx5IG5vdCBhIGdvb2QgaWRlYSB0byB3cml0ZSB0byBSTyBvciBsb2NrZWQgcmVnaXN0ZXJzICovCisJZm9yIChpID0gcmVnOyBpIDwgZW5kOyBpKyspIHsKKwkJaWYgKCF3bTgzNTBfcmVnX2lvX21hcFtpXS53cml0YWJsZSkgeworCQkJZGV2X2Vycih3bTgzNTAtPmRldiwKKwkJCQkiYXR0ZW1wdGVkIHdyaXRlIHRvIHJlYWQgb25seSByZWcgUiVkXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGlzX3JlZ19sb2NrZWQod204MzUwLCBpKSkgeworCQkJZGV2X2Vycih3bTgzNTAtPmRldiwKKwkJCSAgICAgICAiYXR0ZW1wdGVkIHdyaXRlIHRvIGxvY2tlZCByZWcgUiVkXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJc3JjW2kgLSByZWddICY9IHdtODM1MF9yZWdfaW9fbWFwW2ldLndyaXRhYmxlOworCisJCXdtODM1MC0+cmVnX2NhY2hlW2ldID0KKwkJCSh3bTgzNTAtPnJlZ19jYWNoZVtpXSAmIH53bTgzNTBfcmVnX2lvX21hcFtpXS53cml0YWJsZSkKKwkJCXwgc3JjW2kgLSByZWddOworCisJCXNyY1tpIC0gcmVnXSA9IGNwdV90b19iZTE2KHNyY1tpIC0gcmVnXSk7CisJfQorCisJLyogQWN0dWFsbHkgd3JpdGUgaXQgb3V0ICovCisJcmV0dXJuIHdtODM1MC0+d3JpdGVfZGV2KHdtODM1MCwgcmVnLCBieXRlcywgKGNoYXIgKilzcmMpOworfQorCisvKgorICogU2FmZSByZWFkLCBtb2RpZnksIHdyaXRlIG1ldGhvZHMKKyAqLworaW50IHdtODM1MF9jbGVhcl9iaXRzKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgdTE2IHJlZywgdTE2IG1hc2spCit7CisJdTE2IGRhdGE7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJmlvX211dGV4KTsKKwllcnIgPSB3bTgzNTBfcmVhZCh3bTgzNTAsIHJlZywgMSwgJmRhdGEpOworCWlmIChlcnIpIHsKKwkJZGV2X2Vycih3bTgzNTAtPmRldiwgInJlYWQgZnJvbSByZWcgUiVkIGZhaWxlZFxuIiwgcmVnKTsKKwkJZ290byBvdXQ7CisJfQorCisJZGF0YSAmPSB+bWFzazsKKwllcnIgPSB3bTgzNTBfd3JpdGUod204MzUwLCByZWcsIDEsICZkYXRhKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAid3JpdGUgdG8gcmVnIFIlZCBmYWlsZWRcbiIsIHJlZyk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9jbGVhcl9iaXRzKTsKKworaW50IHdtODM1MF9zZXRfYml0cyhzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIHUxNiByZWcsIHUxNiBtYXNrKQoreworCXUxNiBkYXRhOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZpb19tdXRleCk7CisJZXJyID0gd204MzUwX3JlYWQod204MzUwLCByZWcsIDEsICZkYXRhKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIod204MzUwLT5kZXYsICJyZWFkIGZyb20gcmVnIFIlZCBmYWlsZWRcbiIsIHJlZyk7CisJCWdvdG8gb3V0OworCX0KKworCWRhdGEgfD0gbWFzazsKKwllcnIgPSB3bTgzNTBfd3JpdGUod204MzUwLCByZWcsIDEsICZkYXRhKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAid3JpdGUgdG8gcmVnIFIlZCBmYWlsZWRcbiIsIHJlZyk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9zZXRfYml0cyk7CisKK3UxNiB3bTgzNTBfcmVnX3JlYWQoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgcmVnKQoreworCXUxNiBkYXRhOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZpb19tdXRleCk7CisJZXJyID0gd204MzUwX3JlYWQod204MzUwLCByZWcsIDEsICZkYXRhKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAicmVhZCBmcm9tIHJlZyBSJWQgZmFpbGVkXG4iLCByZWcpOworCisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIGRhdGE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfcmVnX3JlYWQpOworCitpbnQgd204MzUwX3JlZ193cml0ZShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCByZWcsIHUxNiB2YWwpCit7CisJaW50IHJldDsKKwl1MTYgZGF0YSA9IHZhbDsKKworCW11dGV4X2xvY2soJmlvX211dGV4KTsKKwlyZXQgPSB3bTgzNTBfd3JpdGUod204MzUwLCByZWcsIDEsICZkYXRhKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAid3JpdGUgdG8gcmVnIFIlZCBmYWlsZWRcbiIsIHJlZyk7CisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWdfd3JpdGUpOworCitpbnQgd204MzUwX2Jsb2NrX3JlYWQoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgc3RhcnRfcmVnLCBpbnQgcmVncywKKwkJICAgICAgdTE2ICpkZXN0KQoreworCWludCBlcnIgPSAwOworCisJbXV0ZXhfbG9jaygmaW9fbXV0ZXgpOworCWVyciA9IHdtODM1MF9yZWFkKHdtODM1MCwgc3RhcnRfcmVnLCByZWdzLCBkZXN0KTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiYmxvY2sgcmVhZCBzdGFydGluZyBmcm9tIFIlZCBmYWlsZWRcbiIsCisJCQlzdGFydF9yZWcpOworCW11dGV4X3VubG9jaygmaW9fbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfYmxvY2tfcmVhZCk7CisKK2ludCB3bTgzNTBfYmxvY2tfd3JpdGUoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgc3RhcnRfcmVnLCBpbnQgcmVncywKKwkJICAgICAgIHUxNiAqc3JjKQoreworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmaW9fbXV0ZXgpOworCXJldCA9IHdtODM1MF93cml0ZSh3bTgzNTAsIHN0YXJ0X3JlZywgcmVncywgc3JjKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiYmxvY2sgd3JpdGUgc3RhcnRpbmcgYXQgUiVkIGZhaWxlZFxuIiwKKwkJCXN0YXJ0X3JlZyk7CisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9ibG9ja193cml0ZSk7CisKK2ludCB3bTgzNTBfcmVnX2xvY2soc3RydWN0IHdtODM1MCAqd204MzUwKQoreworCXUxNiBrZXkgPSBXTTgzNTBfTE9DS19LRVk7CisJaW50IHJldDsKKworCWxkYmcoX19mdW5jX18pOworCW11dGV4X2xvY2soJmlvX211dGV4KTsKKwlyZXQgPSB3bTgzNTBfd3JpdGUod204MzUwLCBXTTgzNTBfU0VDVVJJVFksIDEsICZrZXkpOworCWlmIChyZXQpCisJCWRldl9lcnIod204MzUwLT5kZXYsICJsb2NrIGZhaWxlZFxuIik7CisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWdfbG9jayk7CisKK2ludCB3bTgzNTBfcmVnX3VubG9jayhzdHJ1Y3Qgd204MzUwICp3bTgzNTApCit7CisJdTE2IGtleSA9IFdNODM1MF9VTkxPQ0tfS0VZOworCWludCByZXQ7CisKKwlsZGJnKF9fZnVuY19fKTsKKwltdXRleF9sb2NrKCZpb19tdXRleCk7CisJcmV0ID0gd204MzUwX3dyaXRlKHdtODM1MCwgV004MzUwX1NFQ1VSSVRZLCAxLCAma2V5KTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAidW5sb2NrIGZhaWxlZFxuIik7CisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWdfdW5sb2NrKTsKKworc3RhdGljIHZvaWQgd204MzUwX2lycV9jYWxsX2hhbmRsZXIoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKQoreworCW11dGV4X2xvY2soJndtODM1MC0+aXJxX211dGV4KTsKKworCWlmICh3bTgzNTAtPmlycVtpcnFdLmhhbmRsZXIpCisJCXdtODM1MC0+aXJxW2lycV0uaGFuZGxlcih3bTgzNTAsIGlycSwgd204MzUwLT5pcnFbaXJxXS5kYXRhKTsKKwllbHNlIHsKKwkJZGV2X2Vycih3bTgzNTAtPmRldiwgImlycSAlZCBub2JvZHkgY2FyZWQuIG5vdyBtYXNrZWQuXG4iLAorCQkJaXJxKTsKKwkJd204MzUwX21hc2tfaXJxKHdtODM1MCwgaXJxKTsKKwl9CisKKwltdXRleF91bmxvY2soJndtODM1MC0+aXJxX211dGV4KTsKK30KKworLyoKKyAqIHdtODM1MF9pcnFfd29ya2VyIGFjdHVhbGx5IGhhbmRsZXMgdGhlIGludGVycnVwdHMuICBTaW5jZSBhbGwKKyAqIGludGVycnVwdHMgYXJlIGNsZWFyIG9uIHJlYWQgdGhlIElSUSBsaW5lIHdpbGwgYmUgcmVhc3NlcnRlZCBhbmQKKyAqIHRoZSBwaHlzaWNhbCBJUlEgd2lsbCBiZSBoYW5kbGVkIGFnYWluIGlmIGFub3RoZXIgaW50ZXJydXB0IGlzCisgKiBhc3NlcnRlZCB3aGlsZSB3ZSBydW4gLSBpbiB0aGUgbm9ybWFsIGNvdXJzZSBvZiBldmVudHMgdGhpcyBpcyBhCisgKiByYXJlIG9jY3VycmVuY2Ugc28gd2Ugc2F2ZSBJMkMvU1BJIHJlYWRzLgorICovCitzdGF0aWMgdm9pZCB3bTgzNTBfaXJxX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bTgzNTAsIGlycV93b3JrKTsKKwl1MTYgbGV2ZWxfb25lLCBzdGF0dXMxLCBzdGF0dXMyLCBjb21wOworCisJLyogVE9ETzogVXNlIGJsb2NrIHJlYWRzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2U/ICovCisJbGV2ZWxfb25lID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTKQorCQkmIH53bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfU1lTVEVNX0lOVEVSUlVQVFNfTUFTSyk7CisJc3RhdHVzMSA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzEpCisJCSYgfndtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSyk7CisJc3RhdHVzMiA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzIpCisJCSYgfndtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSyk7CisJY29tcCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVMpCisJCSYgfndtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSyk7CisKKwkvKiBvdmVyIGN1cnJlbnQgKi8KKwlpZiAobGV2ZWxfb25lICYgV004MzUwX09DX0lOVCkgeworCQl1MTYgb2M7CisKKwkJb2MgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfT1ZFUl9DVVJSRU5UX0lOVF9TVEFUVVMpOworCQlvYyAmPSB+d204MzUwX3JlZ19yZWFkKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX09WRVJfQ1VSUkVOVF9JTlRfU1RBVFVTX01BU0spOworCisJCWlmIChvYyAmIFdNODM1MF9PQ19MU19FSU5UKQkvKiBsaW1pdCBzd2l0Y2ggKi8KKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9PQ19MUyk7CisJfQorCisJLyogdW5kZXIgdm9sdGFnZSAqLworCWlmIChsZXZlbF9vbmUgJiBXTTgzNTBfVVZfSU5UKSB7CisJCXUxNiB1djsKKworCQl1diA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVMpOworCQl1diAmPSB+d204MzUwX3JlZ19yZWFkKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLKTsKKworCQlpZiAodXYgJiBXTTgzNTBfVVZfREMxX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfVVZfREMxKTsKKwkJaWYgKHV2ICYgV004MzUwX1VWX0RDMl9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0RDMik7CisJCWlmICh1diAmIFdNODM1MF9VVl9EQzNfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9VVl9EQzMpOworCQlpZiAodXYgJiBXTTgzNTBfVVZfREM0X0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfVVZfREM0KTsKKwkJaWYgKHV2ICYgV004MzUwX1VWX0RDNV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0RDNSk7CisJCWlmICh1diAmIFdNODM1MF9VVl9EQzZfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9VVl9EQzYpOworCQlpZiAodXYgJiBXTTgzNTBfVVZfTERPMV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0xETzEpOworCQlpZiAodXYgJiBXTTgzNTBfVVZfTERPMl9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0xETzIpOworCQlpZiAodXYgJiBXTTgzNTBfVVZfTERPM19FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0xETzMpOworCQlpZiAodXYgJiBXTTgzNTBfVVZfTERPNF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0xETzQpOworCX0KKworCS8qIGNoYXJnZXIsIFJUQyAqLworCWlmIChzdGF0dXMxKSB7CisJCWlmIChzdGF0dXMxICYgV004MzUwX0NIR19CQVRfSE9UX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX0NIR19CQVRfSE9UKTsKKwkJaWYgKHN0YXR1czEgJiBXTTgzNTBfQ0hHX0JBVF9DT0xEX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX0NIR19CQVRfQ09MRCk7CisJCWlmIChzdGF0dXMxICYgV004MzUwX0NIR19CQVRfRkFJTF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9DSEdfQkFUX0ZBSUwpOworCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfVE9fRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVE8pOworCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfRU5EX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0VORCk7CisJCWlmIChzdGF0dXMxICYgV004MzUwX0NIR19TVEFSVF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX0NIR19TVEFSVCk7CisJCWlmIChzdGF0dXMxICYgV004MzUwX0NIR19GQVNUX1JEWV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9DSEdfRkFTVF9SRFkpOworCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfVkJBVFRfTFRfM1A5X0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDkpOworCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfVkJBVFRfTFRfM1AxX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDEpOworCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfVkJBVFRfTFRfMlA4NV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfMlA4NSk7CisJCWlmIChzdGF0dXMxICYgV004MzUwX1JUQ19BTE1fRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9SVENfQUxNKTsKKwkJaWYgKHN0YXR1czEgJiBXTTgzNTBfUlRDX1NFQ19FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1JUQ19TRUMpOworCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9SVENfUEVSX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfUlRDX1BFUik7CisJfQorCisJLyogY3VycmVudCBzaW5rLCBzeXN0ZW0sIGF1eCBhZGMgKi8KKwlpZiAoc3RhdHVzMikgeworCQlpZiAoc3RhdHVzMiAmIFdNODM1MF9DUzFfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9DUzEpOworCQlpZiAoc3RhdHVzMiAmIFdNODM1MF9DUzJfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9DUzIpOworCisJCWlmIChzdGF0dXMyICYgV004MzUwX1NZU19IWVNUX0NPTVBfRkFJTF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9TWVNfSFlTVF9DT01QX0ZBSUwpOworCQlpZiAoc3RhdHVzMiAmIFdNODM1MF9TWVNfQ0hJUF9HVDExNV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9TWVNfQ0hJUF9HVDExNSk7CisJCWlmIChzdGF0dXMyICYgV004MzUwX1NZU19DSElQX0dUMTQwX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX1NZU19DSElQX0dUMTQwKTsKKwkJaWYgKHN0YXR1czIgJiBXTTgzNTBfU1lTX1dET0dfVE9fRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKKwkJCQkJCVdNODM1MF9JUlFfU1lTX1dET0dfVE8pOworCisJCWlmIChzdGF0dXMyICYgV004MzUwX0FVWEFEQ19EQVRBUkRZX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX0FVWEFEQ19EQVRBUkRZKTsKKwkJaWYgKHN0YXR1czIgJiBXTTgzNTBfQVVYQURDX0RDT01QNF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9BVVhBRENfRENPTVA0KTsKKwkJaWYgKHN0YXR1czIgJiBXTTgzNTBfQVVYQURDX0RDT01QM19FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9BVVhBRENfRENPTVAzKTsKKwkJaWYgKHN0YXR1czIgJiBXTTgzNTBfQVVYQURDX0RDT01QMl9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9BVVhBRENfRENPTVAyKTsKKwkJaWYgKHN0YXR1czIgJiBXTTgzNTBfQVVYQURDX0RDT01QMV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9BVVhBRENfRENPTVAxKTsKKworCQlpZiAoc3RhdHVzMiAmIFdNODM1MF9VU0JfTElNSVRfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9VU0JfTElNSVQpOworCX0KKworCS8qIHdha2UsIGNvZGVjLCBleHQgKi8KKwlpZiAoY29tcCkgeworCQlpZiAoY29tcCAmIFdNODM1MF9XS1VQX09GRl9TVEFURV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9XS1VQX09GRl9TVEFURSk7CisJCWlmIChjb21wICYgV004MzUwX1dLVVBfSElCX1NUQVRFX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX1dLVVBfSElCX1NUQVRFKTsKKwkJaWYgKGNvbXAgJiBXTTgzNTBfV0tVUF9DT05WX0ZBVUxUX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX1dLVVBfQ09OVl9GQVVMVCk7CisJCWlmIChjb21wICYgV004MzUwX1dLVVBfV0RPR19SU1RfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKKwkJCQkJCVdNODM1MF9JUlFfV0tVUF9XRE9HX1JTVCk7CisJCWlmIChjb21wICYgV004MzUwX1dLVVBfR1BfUFdSX09OX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX1dLVVBfR1BfUFdSX09OKTsKKwkJaWYgKGNvbXAgJiBXTTgzNTBfV0tVUF9PTktFWV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1dLVVBfT05LRVkpOworCQlpZiAoY29tcCAmIFdNODM1MF9XS1VQX0dQX1dBS0VVUF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9XS1VQX0dQX1dBS0VVUCk7CisKKwkJaWYgKGNvbXAgJiBXTTgzNTBfQ09ERUNfSkNLX0RFVF9MX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTCk7CisJCWlmIChjb21wICYgV004MzUwX0NPREVDX0pDS19ERVRfUl9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1IpOworCQlpZiAoY29tcCAmIFdNODM1MF9DT0RFQ19NSUNTQ0RfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKKwkJCQkJCVdNODM1MF9JUlFfQ09ERUNfTUlDU0NEKTsKKwkJaWYgKGNvbXAgJiBXTTgzNTBfQ09ERUNfTUlDRF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX01JQ0QpOworCisJCWlmIChjb21wICYgV004MzUwX0VYVF9VU0JfRkJfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9FWFRfVVNCX0ZCKTsKKwkJaWYgKGNvbXAgJiBXTTgzNTBfRVhUX1dBTExfRkJfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKKwkJCQkJCVdNODM1MF9JUlFfRVhUX1dBTExfRkIpOworCQlpZiAoY29tcCAmIFdNODM1MF9FWFRfQkFUX0ZCX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfRVhUX0JBVF9GQik7CisJfQorCisJaWYgKGxldmVsX29uZSAmIFdNODM1MF9HUF9JTlQpIHsKKwkJaW50IGk7CisJCXUxNiBncGlvOworCisJCWdwaW8gPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfR1BJT19JTlRfU1RBVFVTKTsKKwkJZ3BpbyAmPSB+d204MzUwX3JlZ19yZWFkKHdtODM1MCwKKwkJCQkJIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSyk7CisKKwkJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKKwkJCWlmIChncGlvICYgKDEgPDwgaSkpCisJCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJCVdNODM1MF9JUlFfR1BJTyhpKSk7CisJCX0KKwl9CisKKwllbmFibGVfaXJxKHdtODM1MC0+Y2hpcF9pcnEpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgd204MzUwX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGRhdGE7CisKKwlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKwlzY2hlZHVsZV93b3JrKCZ3bTgzNTAtPmlycV93b3JrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworaW50IHdtODM1MF9yZWdpc3Rlcl9pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxLAorCQkJdm9pZCAoKmhhbmRsZXIpIChzdHJ1Y3Qgd204MzUwICosIGludCwgdm9pZCAqKSwKKwkJCXZvaWQgKmRhdGEpCit7CisJaWYgKGlycSA8IDAgfHwgaXJxID4gV004MzUwX05VTV9JUlEgfHwgIWhhbmRsZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdtODM1MC0+aXJxW2lycV0uaGFuZGxlcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCW11dGV4X2xvY2soJndtODM1MC0+aXJxX211dGV4KTsKKwl3bTgzNTAtPmlycVtpcnFdLmhhbmRsZXIgPSBoYW5kbGVyOworCXdtODM1MC0+aXJxW2lycV0uZGF0YSA9IGRhdGE7CisJbXV0ZXhfdW5sb2NrKCZ3bTgzNTAtPmlycV9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWdpc3Rlcl9pcnEpOworCitpbnQgd204MzUwX2ZyZWVfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3sKKwlpZiAoaXJxIDwgMCB8fCBpcnEgPiBXTTgzNTBfTlVNX0lSUSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZ3bTgzNTAtPmlycV9tdXRleCk7CisJd204MzUwLT5pcnFbaXJxXS5oYW5kbGVyID0gTlVMTDsKKwltdXRleF91bmxvY2soJndtODM1MC0+aXJxX211dGV4KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9mcmVlX2lycSk7CisKK2ludCB3bTgzNTBfbWFza19pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKQoreworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19CQVRfSE9UOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fQ0hHX0JBVF9IT1RfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19CQVRfQ09MRDoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0NIR19CQVRfQ09MRF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ0hHX0JBVF9GQUlMOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fQ0hHX0JBVF9GQUlMX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfVE86CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DSEdfVE9fRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19FTkQ6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DSEdfRU5EX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfU1RBUlQ6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DSEdfU1RBUlRfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19GQVNUX1JEWToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0NIR19GQVNUX1JEWV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfUlRDX1BFUjoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1JUQ19QRVJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1JUQ19TRUM6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9SVENfU0VDX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9SVENfQUxNOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fUlRDX0FMTV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzNQOToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0NIR19WQkFUVF9MVF8zUDlfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDE6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DSEdfVkJBVFRfTFRfM1AxX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfMlA4NToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0NIR19WQkFUVF9MVF8yUDg1X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DUzE6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DUzFfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NTMjoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0NTMl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfVVNCX0xJTUlUOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fVVNCX0xJTUlUX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9BVVhBRENfREFUQVJEWToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0FVWEFEQ19EQVRBUkRZX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9BVVhBRENfRENPTVA0OgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fQVVYQURDX0RDT01QNF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQVVYQURDX0RDT01QMzoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0FVWEFEQ19EQ09NUDNfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0FVWEFEQ19EQ09NUDI6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9BVVhBRENfRENPTVAyX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9BVVhBRENfRENPTVAxOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fQVVYQURDX0RDT01QMV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfU1lTX0hZU1RfQ09NUF9GQUlMOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fU1lTX0hZU1RfQ09NUF9GQUlMX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9TWVNfQ0hJUF9HVDExNToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1NZU19DSElQX0dUMTE1X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9TWVNfQ0hJUF9HVDE0MDoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1NZU19DSElQX0dUMTQwX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9TWVNfV0RPR19UTzoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1NZU19XRE9HX1RPX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9MRE80OgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fVVZfTERPNF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfVVZfTERPMzoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1VWX0xETzNfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1VWX0xETzI6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9VVl9MRE8yX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9MRE8xOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fVVZfTERPMV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfVVZfREM2OgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fVVZfREM2X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzU6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9VVl9EQzVfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1VWX0RDNDoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1VWX0RDNF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfVVZfREMzOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fVVZfREMzX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzI6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9VVl9EQzJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1VWX0RDMToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1VWX0RDMV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfT0NfTFM6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfT1ZFUl9DVVJSRU5UX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX09DX0xTX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9FWFRfVVNCX0ZCOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fRVhUX1VTQl9GQl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfRVhUX1dBTExfRkI6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9FWFRfV0FMTF9GQl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfRVhUX0JBVF9GQjoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0VYVF9CQVRfRkJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTDoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0NPREVDX0pDS19ERVRfTF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fQ09ERUNfSkNLX0RFVF9SX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DT0RFQ19NSUNTQ0Q6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DT0RFQ19NSUNTQ0RfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX01JQ0Q6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DT0RFQ19NSUNEX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX09GRl9TVEFURToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1dLVVBfT0ZGX1NUQVRFX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX0hJQl9TVEFURToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1dLVVBfSElCX1NUQVRFX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX0NPTlZfRkFVTFQ6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9XS1VQX0NPTlZfRkFVTFRfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1dLVVBfV0RPR19SU1Q6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9XS1VQX09GRl9TVEFURV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfV0tVUF9HUF9QV1JfT046CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9XS1VQX0dQX1BXUl9PTl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfV0tVUF9PTktFWToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1dLVVBfT05LRVlfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1dLVVBfR1BfV0FLRVVQOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fV0tVUF9HUF9XQUtFVVBfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMCk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDBfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMSk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDFfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMik6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMyk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDNfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oNCk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDRfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oNSk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDVfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oNik6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDZfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oNyk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDdfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oOCk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDhfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oOSk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDlfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMTApOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fR1AxMF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfR1BJTygxMSk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDExX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9HUElPKDEyKToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0dQMTJfRUlOVCk7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4od204MzUwLT5kZXYsICJBdHRlbXB0aW5nIHRvIG1hc2sgdW5rbm93biBJUlEgJWRcbiIsCisJCQkgaXJxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX21hc2tfaXJxKTsKKworaW50IHdtODM1MF91bm1hc2tfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3sKKwlzd2l0Y2ggKGlycSkgeworCWNhc2UgV004MzUwX0lSUV9DSEdfQkFUX0hPVDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAorCQkJCQkgV004MzUwX0lNX0NIR19CQVRfSE9UX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfQkFUX0NPTEQ6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DSEdfQkFUX0NPTERfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19CQVRfRkFJTDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAorCQkJCQkgV004MzUwX0lNX0NIR19CQVRfRkFJTF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ0hHX1RPOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQ0hHX1RPX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfRU5EOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQ0hHX0VORF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ0hHX1NUQVJUOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQ0hHX1NUQVJUX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfRkFTVF9SRFk6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DSEdfRkFTVF9SRFlfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1JUQ19QRVI6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9SVENfUEVSX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9SVENfU0VDOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fUlRDX1NFQ19FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfUlRDX0FMTToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAorCQkJCQkgV004MzUwX0lNX1JUQ19BTE1fRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDk6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DSEdfVkJBVFRfTFRfM1A5X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1AxOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQ0hHX1ZCQVRUX0xUXzNQMV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzJQODU6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DSEdfVkJBVFRfTFRfMlA4NV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ1MxOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQ1MxX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DUzI6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DUzJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1VTQl9MSU1JVDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCQkgV004MzUwX0lNX1VTQl9MSU1JVF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQVVYQURDX0RBVEFSRFk6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9BVVhBRENfREFUQVJEWV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQVVYQURDX0RDT01QNDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCQkgV004MzUwX0lNX0FVWEFEQ19EQ09NUDRfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0FVWEFEQ19EQ09NUDM6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9BVVhBRENfRENPTVAzX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9BVVhBRENfRENPTVAyOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQVVYQURDX0RDT01QMl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQVVYQURDX0RDT01QMToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCQkgV004MzUwX0lNX0FVWEFEQ19EQ09NUDFfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1NZU19IWVNUX0NPTVBfRkFJTDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCQkgV004MzUwX0lNX1NZU19IWVNUX0NPTVBfRkFJTF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfU1lTX0NISVBfR1QxMTU6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9TWVNfQ0hJUF9HVDExNV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfU1lTX0NISVBfR1QxNDA6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9TWVNfQ0hJUF9HVDE0MF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfU1lTX1dET0dfVE86CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9TWVNfV0RPR19UT19FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfVVZfTERPNDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9VVl9MRE80X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9MRE8zOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX1VWX0xETzNfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1VWX0xETzI6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfTERPMl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfVVZfTERPMToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9VVl9MRE8xX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzY6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfREM2X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzU6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfREM1X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzQ6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfREM0X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzM6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfREMzX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzI6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfREMyX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzE6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfREMxX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9PQ19MUzoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9PVkVSX0NVUlJFTlRfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX09DX0xTX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9FWFRfVVNCX0ZCOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0VYVF9VU0JfRkJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0VYVF9XQUxMX0ZCOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0VYVF9XQUxMX0ZCX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9FWFRfQkFUX0ZCOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0VYVF9CQVRfRkJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DT0RFQ19KQ0tfREVUX0xfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUjoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DT0RFQ19KQ0tfREVUX1JfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX01JQ1NDRDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DT0RFQ19NSUNTQ0RfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX01JQ0Q6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQ09ERUNfTUlDRF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfV0tVUF9PRkZfU1RBVEU6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fV0tVUF9PRkZfU1RBVEVfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1dLVVBfSElCX1NUQVRFOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX1dLVVBfSElCX1NUQVRFX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX0NPTlZfRkFVTFQ6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fV0tVUF9DT05WX0ZBVUxUX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX1dET0dfUlNUOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX1dLVVBfT0ZGX1NUQVRFX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX0dQX1BXUl9PTjoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9XS1VQX0dQX1BXUl9PTl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfV0tVUF9PTktFWToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9XS1VQX09OS0VZX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX0dQX1dBS0VVUDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9XS1VQX0dQX1dBS0VVUF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfR1BJTygwKToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9HUDBfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMSk6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fR1AxX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9HUElPKDIpOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0dQMl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfR1BJTygzKToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9HUDNfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oNCk6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fR1A0X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9HUElPKDUpOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0dQNV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfR1BJTyg2KToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9HUDZfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oNyk6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fR1A3X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9HUElPKDgpOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0dQOF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfR1BJTyg5KToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9HUDlfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMTApOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0dQMTBfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMTEpOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0dQMTFfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMTIpOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0dQMTJfRUlOVCk7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4od204MzUwLT5kZXYsICJBdHRlbXB0aW5nIHRvIHVubWFzayB1bmtub3duIElSUSAlZFxuIiwKKwkJCSBpcnEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfdW5tYXNrX2lycSk7CisKKy8qCisgKiBDYWNoZSBpcyBhbHdheXMgaG9zdCBlbmRpYW4uCisgKi8KK3N0YXRpYyBpbnQgd204MzUwX2NyZWF0ZV9jYWNoZShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBtb2RlKQoreworCWludCBpLCByZXQgPSAwOworCXUxNiB2YWx1ZTsKKwljb25zdCB1MTYgKnJlZ19tYXA7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKyNpZmRlZiBDT05GSUdfTUZEX1dNODM1MF9DT05GSUdfTU9ERV8wCisJY2FzZSAwOgorCQlyZWdfbWFwID0gd204MzUwX21vZGUwX2RlZmF1bHRzOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NRkRfV004MzUwX0NPTkZJR19NT0RFXzEKKwljYXNlIDE6CisJCXJlZ19tYXAgPSB3bTgzNTBfbW9kZTFfZGVmYXVsdHM7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01GRF9XTTgzNTBfQ09ORklHX01PREVfMgorCWNhc2UgMjoKKwkJcmVnX21hcCA9IHdtODM1MF9tb2RlMl9kZWZhdWx0czsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUZEX1dNODM1MF9DT05GSUdfTU9ERV8zCisJY2FzZSAzOgorCQlyZWdfbWFwID0gd204MzUwX21vZGUzX2RlZmF1bHRzOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWRldl9lcnIod204MzUwLT5kZXYsICJDb25maWd1cmF0aW9uIG1vZGUgJWQgbm90IHN1cHBvcnRlZFxuIiwKKwkJCW1vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3bTgzNTAtPnJlZ19jYWNoZSA9CisJICAgIGt6YWxsb2Moc2l6ZW9mKHUxNikgKiAoV004MzUwX01BWF9SRUdJU1RFUiArIDEpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204MzUwLT5yZWdfY2FjaGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBSZWFkIHRoZSBpbml0aWFsIGNhY2hlIHN0YXRlIGJhY2sgZnJvbSB0aGUgZGV2aWNlIC0gdGhpcyBpcworCSAqIGEgUE1JQyBzbyB0aGUgZGV2aWNlIG1hbnkgbm90IGJlIGluIGEgdmlyZ2luIHN0YXRlIGFuZCB3ZQorCSAqIGNhbid0IHJlbHkgb24gdGhlIHNpbGljb24gdmFsdWVzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBXTTgzNTBfTUFYX1JFR0lTVEVSOyBpKyspIHsKKwkJLyogYXVkaW8gcmVnaXN0ZXIgcmFuZ2UgKi8KKwkJaWYgKHdtODM1MF9yZWdfaW9fbWFwW2ldLnJlYWRhYmxlICYmCisJCSAgICAoaSA8IFdNODM1MF9DTE9DS19DT05UUk9MXzEgfHwgaSA+IFdNODM1MF9BSUZfVEVTVCkpIHsKKwkJCXJldCA9IHdtODM1MC0+cmVhZF9kZXYod204MzUwLCBpLCAyLCAoY2hhciAqKSZ2YWx1ZSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWRldl9lcnIod204MzUwLT5kZXYsCisJCQkJICAgICAgICJmYWlsZWQgdG8gcmVhZCBpbml0aWFsIGNhY2hlIHZhbHVlXG4iKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXZhbHVlID0gYmUxNl90b19jcHUodmFsdWUpOworCQkJdmFsdWUgJj0gd204MzUwX3JlZ19pb19tYXBbaV0ucmVhZGFibGU7CisJCQl3bTgzNTAtPnJlZ19jYWNoZVtpXSA9IHZhbHVlOworCQl9IGVsc2UKKwkJCXdtODM1MC0+cmVnX2NhY2hlW2ldID0gcmVnX21hcFtpXTsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX2NyZWF0ZV9jYWNoZSk7CisKKy8qCisgKiBSZWdpc3RlciBhIGNsaWVudCBkZXZpY2UuICBUaGlzIGlzIG5vbi1mYXRhbCBzaW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvCisgKiBmYWlsIHRoZSBlbnRpcmUgZGV2aWNlIGluaXQgZHVlIHRvIGEgc2luZ2xlIHBsYXRmb3JtIGRldmljZSBmYWlsaW5nLgorICovCitzdGF0aWMgdm9pZCB3bTgzNTBfY2xpZW50X2Rldl9yZWdpc3RlcihzdHJ1Y3Qgd204MzUwICp3bTgzNTAsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKipwZGV2KQoreworCWludCByZXQ7CisKKwkqcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhuYW1lLCAtMSk7CisJaWYgKHBkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlICVzXG4iLCBuYW1lKTsKKwkJcmV0dXJuOworCX0KKworCSgqcGRldiktPmRldi5wYXJlbnQgPSB3bTgzNTAtPmRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSgqcGRldiwgd204MzUwKTsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKCpwZGV2KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycih3bTgzNTAtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciAlczogJWRcbiIsIG5hbWUsIHJldCk7CisJCXBsYXRmb3JtX2RldmljZV9wdXQoKnBkZXYpOworCQkqcGRldiA9IE5VTEw7CisJfQorfQorCitpbnQgd204MzUwX2RldmljZV9pbml0KHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwKKwkJICAgICAgIHN0cnVjdCB3bTgzNTBfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJdTE2IGlkMSwgaWQyLCBtYXNrLCBtb2RlOworCisJLyogZ2V0IFdNODM1MCByZXZpc2lvbiBhbmQgY29uZmlnIG1vZGUgKi8KKwl3bTgzNTAtPnJlYWRfZGV2KHdtODM1MCwgV004MzUwX1JFU0VUX0lELCBzaXplb2YoaWQxKSwgJmlkMSk7CisJd204MzUwLT5yZWFkX2Rldih3bTgzNTAsIFdNODM1MF9JRCwgc2l6ZW9mKGlkMiksICZpZDIpOworCisJaWQxID0gYmUxNl90b19jcHUoaWQxKTsKKwlpZDIgPSBiZTE2X3RvX2NwdShpZDIpOworCisJaWYgKGlkMSA9PSAweDYxNDMpIHsKKwkJc3dpdGNoICgoaWQyICYgV004MzUwX0NISVBfUkVWX01BU0spID4+IDEyKSB7CisJCWNhc2UgV004MzUwX1JFVl9FOgorCQkJZGV2X2luZm8od204MzUwLT5kZXYsICJGb3VuZCBSZXYgRSBkZXZpY2VcbiIpOworCQkJd204MzUwLT5yZXYgPSBXTTgzNTBfUkVWX0U7CisJCQlicmVhazsKKwkJY2FzZSBXTTgzNTBfUkVWX0Y6CisJCQlkZXZfaW5mbyh3bTgzNTAtPmRldiwgIkZvdW5kIFJldiBGIGRldmljZVxuIik7CisJCQl3bTgzNTAtPnJldiA9IFdNODM1MF9SRVZfRjsKKwkJCWJyZWFrOworCQljYXNlIFdNODM1MF9SRVZfRzoKKwkJCWRldl9pbmZvKHdtODM1MC0+ZGV2LCAiRm91bmQgUmV2IEcgZGV2aWNlXG4iKTsKKwkJCXdtODM1MC0+cmV2ID0gV004MzUwX1JFVl9HOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBGb3Igc2FmZXR5IHdlIHJlZnVzZSB0byBydW4gb24gdW5rbm93biBoYXJkd2FyZSAqLworCQkJZGV2X2luZm8od204MzUwLT5kZXYsICJGb3VuZCB1bmtub3duIHJldlxuIik7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBlcnI7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfaW5mbyh3bTgzNTAtPmRldiwgIkRldmljZSB3aXRoIElEICV4IGlzIG5vdCBhIFdNODM1MFxuIiwKKwkJCSBpZDEpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycjsKKwl9CisKKwltb2RlID0gaWQyICYgV004MzUwX0NPTkZfU1RTX01BU0sgPj4gMTA7CisJbWFzayA9IGlkMiAmIFdNODM1MF9DVVNUX0lEX01BU0s7CisJZGV2X2luZm8od204MzUwLT5kZXYsICJDb25maWcgbW9kZSAlZCwgUk9NIG1hc2sgJWRcbiIsIG1vZGUsIG1hc2spOworCisJcmV0ID0gd204MzUwX2NyZWF0ZV9jYWNoZSh3bTgzNTAsIG1vZGUpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAid204MzUwOiBmYWlsZWQgdG8gY3JlYXRlIHJlZ2lzdGVyIGNhY2hlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAocGRhdGEtPmluaXQpIHsKKwkJcmV0ID0gcGRhdGEtPmluaXQod204MzUwKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiUGxhdGZvcm0gaW5pdCgpIGZhaWxlZDogJWRcbiIsCisJCQkJcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJbXV0ZXhfaW5pdCgmd204MzUwLT5pcnFfbXV0ZXgpOworCUlOSVRfV09SSygmd204MzUwLT5pcnFfd29yaywgd204MzUwX2lycV93b3JrZXIpOworCWlmIChpcnEpIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCB3bTgzNTBfaXJxLCAwLAorCQkJCSAgIndtODM1MCIsIHdtODM1MCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycih3bTgzNTAtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElSUTogJWRcbiIsCisJCQkJcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2Vycih3bTgzNTAtPmRldiwgIk5vIElSUSBjb25maWd1cmVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCXdtODM1MC0+Y2hpcF9pcnEgPSBpcnE7CisKKwl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTX01BU0ssIDB4MCk7CisKKwl3bTgzNTBfY2xpZW50X2Rldl9yZWdpc3Rlcih3bTgzNTAsICJ3bTgzNTAtY29kZWMiLAorCQkJCSAgICYod204MzUwLT5jb2RlYy5wZGV2KSk7CisJd204MzUwX2NsaWVudF9kZXZfcmVnaXN0ZXIod204MzUwLCAid204MzUwLWdwaW8iLAorCQkJCSAgICYod204MzUwLT5ncGlvLnBkZXYpKTsKKwl3bTgzNTBfY2xpZW50X2Rldl9yZWdpc3Rlcih3bTgzNTAsICJ3bTgzNTAtcG93ZXIiLAorCQkJCSAgICYod204MzUwLT5wb3dlci5wZGV2KSk7CisJd204MzUwX2NsaWVudF9kZXZfcmVnaXN0ZXIod204MzUwLCAid204MzUwLXJ0YyIsICYod204MzUwLT5ydGMucGRldikpOworCXdtODM1MF9jbGllbnRfZGV2X3JlZ2lzdGVyKHdtODM1MCwgIndtODM1MC13ZHQiLCAmKHdtODM1MC0+d2R0LnBkZXYpKTsKKworCXJldHVybiAwOworCitlcnI6CisJa2ZyZWUod204MzUwLT5yZWdfY2FjaGUpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfZGV2aWNlX2luaXQpOworCit2b2lkIHdtODM1MF9kZXZpY2VfZXhpdChzdHJ1Y3Qgd204MzUwICp3bTgzNTApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTgzNTAtPnBtaWMucGRldik7IGkrKykKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod204MzUwLT5wbWljLnBkZXZbaV0pOworCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod204MzUwLT53ZHQucGRldik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod204MzUwLT5ydGMucGRldik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod204MzUwLT5wb3dlci5wZGV2KTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih3bTgzNTAtPmdwaW8ucGRldik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod204MzUwLT5jb2RlYy5wZGV2KTsKKworCWZyZWVfaXJxKHdtODM1MC0+Y2hpcF9pcnEsIHdtODM1MCk7CisJZmx1c2hfd29yaygmd204MzUwLT5pcnFfd29yayk7CisJa2ZyZWUod204MzUwLT5yZWdfY2FjaGUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX2RldmljZV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJXTTgzNTAgQXVkaW9QbHVzIFBNSUMgY29yZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODM1MC1ncGlvLmMgYi9kcml2ZXJzL21mZC93bTgzNTAtZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZjk5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC93bTgzNTAtZ3Bpby5jCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogd204MzUwLWNvcmUuYyAgLS0gIERldmljZSBhY2Nlc3MgZm9yIFdvbGZzb24gV004MzUwCisgKgorICogQ29weXJpZ2h0IDIwMDcsIDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3BtaWMuaD4KKworc3RhdGljIGludCBncGlvX3NldF9kaXIoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgZ3BpbywgaW50IGRpcikKK3sKKwlpbnQgcmV0OworCisJd204MzUwX3JlZ191bmxvY2sod204MzUwKTsKKwlpZiAoZGlyID09IFdNODM1MF9HUElPX0RJUl9PVVQpCisJCXJldCA9IHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJV004MzUwX0dQSU9fQ09ORklHVVJBVElPTl9JX08sCisJCQkJCTEgPDwgZ3Bpbyk7CisJZWxzZQorCQlyZXQgPSB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgIFdNODM1MF9HUElPX0NPTkZJR1VSQVRJT05fSV9PLAorCQkJCSAgICAgIDEgPDwgZ3Bpbyk7CisJd204MzUwX3JlZ19sb2NrKHdtODM1MCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBncGlvX3NldF9kZWJvdW5jZShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBncGlvLCBpbnQgZGIpCit7CisJaWYgKGRiID09IFdNODM1MF9HUElPX0RFQk9VTkNFX09OKQorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0dQSU9fREVCT1VOQ0UsCisJCQkJICAgICAgIDEgPDwgZ3Bpbyk7CisJZWxzZQorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fREVCT1VOQ0UsIDEgPDwgZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19zZXRfZnVuYyhzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBncGlvLCBpbnQgZnVuYykKK3sKKwl1MTYgcmVnOworCisJd204MzUwX3JlZ191bmxvY2sod204MzUwKTsKKwlzd2l0Y2ggKGdwaW8pIHsKKwljYXNlIDA6CisJCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8xKQorCQkgICAgJiB+V004MzUwX0dQMF9GTl9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzEsCisJCQkJIHJlZyB8ICgoZnVuYyAmIDB4ZikgPDwgMCkpOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8xKQorCQkgICAgJiB+V004MzUwX0dQMV9GTl9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzEsCisJCQkJIHJlZyB8ICgoZnVuYyAmIDB4ZikgPDwgNCkpOworCQlicmVhazsKKwljYXNlIDI6CisJCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8xKQorCQkgICAgJiB+V004MzUwX0dQMl9GTl9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzEsCisJCQkJIHJlZyB8ICgoZnVuYyAmIDB4ZikgPDwgOCkpOworCQlicmVhazsKKwljYXNlIDM6CisJCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8xKQorCQkgICAgJiB+V004MzUwX0dQM19GTl9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzEsCisJCQkJIHJlZyB8ICgoZnVuYyAmIDB4ZikgPDwgMTIpKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlyZWcgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMikKKwkJICAgICYgfldNODM1MF9HUDRfRk5fTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8yLAorCQkJCSByZWcgfCAoKGZ1bmMgJiAweGYpIDw8IDApKTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlyZWcgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMikKKwkJICAgICYgfldNODM1MF9HUDVfRk5fTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8yLAorCQkJCSByZWcgfCAoKGZ1bmMgJiAweGYpIDw8IDQpKTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlyZWcgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMikKKwkJICAgICYgfldNODM1MF9HUDZfRk5fTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8yLAorCQkJCSByZWcgfCAoKGZ1bmMgJiAweGYpIDw8IDgpKTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlyZWcgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMikKKwkJICAgICYgfldNODM1MF9HUDdfRk5fTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8yLAorCQkJCSByZWcgfCAoKGZ1bmMgJiAweGYpIDw8IDEyKSk7CisJCWJyZWFrOworCWNhc2UgODoKKwkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzMpCisJCSAgICAmIH5XTTgzNTBfR1A4X0ZOX01BU0s7CisJCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMywKKwkJCQkgcmVnIHwgKChmdW5jICYgMHhmKSA8PCAwKSk7CisJCWJyZWFrOworCWNhc2UgOToKKwkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzMpCisJCSAgICAmIH5XTTgzNTBfR1A5X0ZOX01BU0s7CisJCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMywKKwkJCQkgcmVnIHwgKChmdW5jICYgMHhmKSA8PCA0KSk7CisJCWJyZWFrOworCWNhc2UgMTA6CisJCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8zKQorCQkgICAgJiB+V004MzUwX0dQMTBfRk5fTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8zLAorCQkJCSByZWcgfCAoKGZ1bmMgJiAweGYpIDw8IDgpKTsKKwkJYnJlYWs7CisJY2FzZSAxMToKKwkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzMpCisJCSAgICAmIH5XTTgzNTBfR1AxMV9GTl9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzMsCisJCQkJIHJlZyB8ICgoZnVuYyAmIDB4ZikgPDwgMTIpKTsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzQpCisJCSAgICAmIH5XTTgzNTBfR1AxMl9GTl9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzQsCisJCQkJIHJlZyB8ICgoZnVuYyAmIDB4ZikgPDwgMCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3bTgzNTBfcmVnX2xvY2sod204MzUwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd204MzUwX3JlZ19sb2NrKHdtODM1MCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19zZXRfcHVsbF91cChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBncGlvLCBpbnQgdXApCit7CisJaWYgKHVwKQorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX0dQSU9fUElOX1BVTExfVVBfQ09OVFJPTCwKKwkJCQkgICAgICAgMSA8PCBncGlvKTsKKwllbHNlCisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfR1BJT19QSU5fUFVMTF9VUF9DT05UUk9MLAorCQkJCQkgMSA8PCBncGlvKTsKK30KKworc3RhdGljIGludCBncGlvX3NldF9wdWxsX2Rvd24oc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgZ3BpbywgaW50IGRvd24pCit7CisJaWYgKGRvd24pCisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19QVUxMX0RPV05fQ09OVFJPTCwKKwkJCQkgICAgICAgMSA8PCBncGlvKTsKKwllbHNlCisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfR1BJT19QVUxMX0RPV05fQ09OVFJPTCwKKwkJCQkJIDEgPDwgZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19zZXRfcG9sYXJpdHkoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgZ3BpbywgaW50IHBvbCkKK3sKKwlpZiAocG9sID09IFdNODM1MF9HUElPX0FDVElWRV9ISUdIKQorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX0dQSU9fUElOX1BPTEFSSVRZX1RZUEUsCisJCQkJICAgICAgIDEgPDwgZ3Bpbyk7CisJZWxzZQorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fUElOX1BPTEFSSVRZX1RZUEUsCisJCQkJCSAxIDw8IGdwaW8pOworfQorCitzdGF0aWMgaW50IGdwaW9fc2V0X2ludmVydChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBncGlvLCBpbnQgaW52ZXJ0KQoreworCWlmIChpbnZlcnQgPT0gV004MzUwX0dQSU9fSU5WRVJUX09OKQorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0dQSU9fSU5UX01PREUsIDEgPDwgZ3Bpbyk7CisJZWxzZQorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX01PREUsIDEgPDwgZ3Bpbyk7Cit9CisKK2ludCB3bTgzNTBfZ3Bpb19jb25maWcoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgZ3BpbywgaW50IGRpciwgaW50IGZ1bmMsCisJCSAgICAgICBpbnQgcG9sLCBpbnQgcHVsbCwgaW50IGludmVydCwgaW50IGRlYm91bmNlKQoreworCS8qIG1ha2Ugc3VyZSB3ZSBuZXZlciBwdWxsIHVwIGFuZCBkb3duIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwlpZiAocHVsbCA9PSBXTTgzNTBfR1BJT19QVUxMX05PTkUpIHsKKwkJaWYgKGdwaW9fc2V0X3B1bGxfdXAod204MzUwLCBncGlvLCAwKSkKKwkJCWdvdG8gZXJyOworCQlpZiAoZ3Bpb19zZXRfcHVsbF9kb3duKHdtODM1MCwgZ3BpbywgMCkpCisJCQlnb3RvIGVycjsKKwl9IGVsc2UgaWYgKHB1bGwgPT0gV004MzUwX0dQSU9fUFVMTF9VUCkgeworCQlpZiAoZ3Bpb19zZXRfcHVsbF9kb3duKHdtODM1MCwgZ3BpbywgMCkpCisJCQlnb3RvIGVycjsKKwkJaWYgKGdwaW9fc2V0X3B1bGxfdXAod204MzUwLCBncGlvLCAxKSkKKwkJCWdvdG8gZXJyOworCX0gZWxzZSBpZiAocHVsbCA9PSBXTTgzNTBfR1BJT19QVUxMX0RPV04pIHsKKwkJaWYgKGdwaW9fc2V0X3B1bGxfdXAod204MzUwLCBncGlvLCAwKSkKKwkJCWdvdG8gZXJyOworCQlpZiAoZ3Bpb19zZXRfcHVsbF9kb3duKHdtODM1MCwgZ3BpbywgMSkpCisJCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoZ3Bpb19zZXRfaW52ZXJ0KHdtODM1MCwgZ3BpbywgaW52ZXJ0KSkKKwkJZ290byBlcnI7CisJaWYgKGdwaW9fc2V0X3BvbGFyaXR5KHdtODM1MCwgZ3BpbywgcG9sKSkKKwkJZ290byBlcnI7CisJaWYgKGdwaW9fc2V0X2RlYm91bmNlKHdtODM1MCwgZ3BpbywgZGVib3VuY2UpKQorCQlnb3RvIGVycjsKKwlpZiAoZ3Bpb19zZXRfZGlyKHdtODM1MCwgZ3BpbywgZGlyKSkKKwkJZ290byBlcnI7CisJcmV0dXJuIGdwaW9fc2V0X2Z1bmMod204MzUwLCBncGlvLCBmdW5jKTsKKworZXJyOgorCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX2dwaW9fY29uZmlnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODM1MC1pMmMuYyBiL2RyaXZlcnMvbWZkL3dtODM1MC1pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGZlMjFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvd204MzUwLWkyYy5jCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogd204MzUwLWkyYy5jICAtLSAgR2VuZXJpYyBJMkMgZHJpdmVyIGZvciBXb2xmc29uIFdNODM1MCBQTUlDCisgKgorICogVGhpcyBkcml2ZXIgZGVmaW5lcyBhbmQgY29uZmlndXJlcyB0aGUgV004MzUwIGZvciB0aGUgRnJlZXNjYWxlIGkuTVgzMkFEUy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAorICogICAgICAgICBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2NvcmUuaD4KKworc3RhdGljIGludCB3bTgzNTBfaTJjX3JlYWRfZGV2aWNlKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgY2hhciByZWcsCisJCQkJICBpbnQgYnl0ZXMsIHZvaWQgKmRlc3QpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19tYXN0ZXJfc2VuZCh3bTgzNTAtPmkyY19jbGllbnQsICZyZWcsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiBpMmNfbWFzdGVyX3JlY3Yod204MzUwLT5pMmNfY2xpZW50LCBkZXN0LCBieXRlcyk7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2kyY193cml0ZV9kZXZpY2Uoc3RydWN0IHdtODM1MCAqd204MzUwLCBjaGFyIHJlZywKKwkJCQkgICBpbnQgYnl0ZXMsIHZvaWQgKnNyYykKK3sKKwkvKiB3ZSBhZGQgMSBieXRlIGZvciBkZXZpY2UgcmVnaXN0ZXIgKi8KKwl1OCBtc2dbKFdNODM1MF9NQVhfUkVHSVNURVIgPDwgMSkgKyAxXTsKKworCWlmIChieXRlcyA+ICgoV004MzUwX01BWF9SRUdJU1RFUiA8PCAxKSArIDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1zZ1swXSA9IHJlZzsKKwltZW1jcHkoJm1zZ1sxXSwgc3JjLCBieXRlcyk7CisJcmV0dXJuIGkyY19tYXN0ZXJfc2VuZCh3bTgzNTAtPmkyY19jbGllbnQsIG1zZywgYnl0ZXMgKyAxKTsKK30KKworc3RhdGljIGludCB3bTgzNTBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MDsKKwlpbnQgcmV0ID0gMDsKKworCXdtODM1MCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTgzNTApLCBHRlBfS0VSTkVMKTsKKwlpZiAod204MzUwID09IE5VTEwpIHsKKwkJa2ZyZWUoaTJjKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204MzUwKTsKKwl3bTgzNTAtPmRldiA9ICZpMmMtPmRldjsKKwl3bTgzNTAtPmkyY19jbGllbnQgPSBpMmM7CisJd204MzUwLT5yZWFkX2RldiA9IHdtODM1MF9pMmNfcmVhZF9kZXZpY2U7CisJd204MzUwLT53cml0ZV9kZXYgPSB3bTgzNTBfaTJjX3dyaXRlX2RldmljZTsKKworCXJldCA9IHdtODM1MF9kZXZpY2VfaW5pdCh3bTgzNTAsIGkyYy0+aXJxLCBpMmMtPmRldi5wbGF0Zm9ybV9kYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gcmV0OworCitlcnI6CisJa2ZyZWUod204MzUwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtODM1MF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisKKwl3bTgzNTBfZGV2aWNlX2V4aXQod204MzUwKTsKKwlrZnJlZSh3bTgzNTApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTgzNTBfaTJjX2lkW10gPSB7CisgICAgICAgeyAid204MzUwIiwgMCB9LAorICAgICAgIHsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTgzNTBfaTJjX2lkKTsKKworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204MzUwX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAid204MzUwIiwKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSB3bTgzNTBfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSB3bTgzNTBfaTJjX3JlbW92ZSwKKwkuaWRfdGFibGUgPSB3bTgzNTBfaTJjX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204MzUwX2kyY19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ3bTgzNTBfaTJjX2RyaXZlcik7Cit9CisvKiBpbml0IGVhcmx5IHNvIGNvbnN1bWVyIGRldmljZXMgY2FuIGNvbXBsZXRlIHN5c3RlbSBib290ICovCitzdWJzeXNfaW5pdGNhbGwod204MzUwX2kyY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODM1MF9pMmNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ3bTgzNTBfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTgzNTBfaTJjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkkyQyBzdXBwb3J0IGZvciB0aGUgV004MzUwIEF1ZGlvUGx1cyBQTUlDIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzNTAtcmVnbWFwLmMgYi9kcml2ZXJzL21mZC93bTgzNTAtcmVnbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0Njc4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3dtODM1MC1yZWdtYXAuYwpAQCAtMCwwICsxLDEzNDcgQEAKKy8qCisgKiB3bTgzNTAtcmVnbWFwLmMgIC0tICBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004MzUwIHJlZ2lzdGVyIG1hcAorICoKKyAqIFRoaXMgZmlsZSBzcGxpdHMgb3V0IHRoZSB0YWJsZXMgZGVzY3JpYmluZyB0aGUgZGVmYXVsdHMgYW5kIGFjY2VzcworICogc3RhdHVzIG9mIHRoZSBXTTgzNTAgcmVnaXN0ZXJzIHNpbmNlIHRoZXkgYXJlIHJhdGhlciBsYXJnZS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2NvcmUuaD4KKworI2lmZGVmIENPTkZJR19NRkRfV004MzUwX0NPTkZJR19NT0RFXzAKKworI3VuZGVmIFdNODM1MF9IQVZFX0NPTkZJR19NT0RFCisjZGVmaW5lIFdNODM1MF9IQVZFX0NPTkZJR19NT0RFCisKK2NvbnN0IHUxNiB3bTgzNTBfbW9kZTBfZGVmYXVsdHNbXSA9IHsKKwkweDE3RkYsICAgICAvKiBSMCAgIC0gUmVzZXQvSUQgKi8KKwkweDEwMDAsICAgICAvKiBSMSAgIC0gSUQgKi8KKwkweDAwMDAsICAgICAvKiBSMiAqLworCTB4MTAwMiwgICAgIC8qIFIzICAgLSBTeXN0ZW0gQ29udHJvbCAxICovCisJMHgwMDA0LCAgICAgLyogUjQgICAtIFN5c3RlbSBDb250cm9sIDIgKi8KKwkweDAwMDAsICAgICAvKiBSNSAgIC0gU3lzdGVtIEhpYmVybmF0ZSAqLworCTB4OEEwMCwgICAgIC8qIFI2ICAgLSBJbnRlcmZhY2UgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3ICovCisJMHg4MDAwLCAgICAgLyogUjggICAtIFBvd2VyIG1nbXQgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjkgICAtIFBvd2VyIG1nbXQgKDIpICovCisJMHgwMDAwLCAgICAgLyogUjEwICAtIFBvd2VyIG1nbXQgKDMpICovCisJMHgyMDAwLCAgICAgLyogUjExICAtIFBvd2VyIG1nbXQgKDQpICovCisJMHgwRTAwLCAgICAgLyogUjEyICAtIFBvd2VyIG1nbXQgKDUpICovCisJMHgwMDAwLCAgICAgLyogUjEzICAtIFBvd2VyIG1nbXQgKDYpICovCisJMHgwMDAwLCAgICAgLyogUjE0ICAtIFBvd2VyIG1nbXQgKDcpICovCisJMHgwMDAwLCAgICAgLyogUjE1ICovCisJMHgwMDAwLCAgICAgLyogUjE2ICAtIFJUQyBTZWNvbmRzL01pbnV0ZXMgKi8KKwkweDAxMDAsICAgICAvKiBSMTcgIC0gUlRDIEhvdXJzL0RheSAqLworCTB4MDEwMSwgICAgIC8qIFIxOCAgLSBSVEMgRGF0ZS9Nb250aCAqLworCTB4MTQwMCwgICAgIC8qIFIxOSAgLSBSVEMgWWVhciAqLworCTB4MDAwMCwgICAgIC8qIFIyMCAgLSBBbGFybSBTZWNvbmRzL01pbnV0ZXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjEgIC0gQWxhcm0gSG91cnMvRGF5ICovCisJMHgwMDAwLCAgICAgLyogUjIyICAtIEFsYXJtIERhdGUvTW9udGggKi8KKwkweDAzMjAsICAgICAvKiBSMjMgIC0gUlRDIFRpbWUgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIyNCAgLSBTeXN0ZW0gSW50ZXJydXB0cyAqLworCTB4MDAwMCwgICAgIC8qIFIyNSAgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgKi8KKwkweDAwMDAsICAgICAvKiBSMjYgIC0gSW50ZXJydXB0IFN0YXR1cyAyICovCisJMHgwMDAwLCAgICAgLyogUjI3ICAtIFBvd2VyIFVwIEludGVycnVwdCBTdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjggIC0gVW5kZXIgVm9sdGFnZSBJbnRlcnJ1cHQgc3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjI5ICAtIE92ZXIgQ3VycmVudCBJbnRlcnJ1cHQgc3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjMwICAtIEdQSU8gSW50ZXJydXB0IFN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIzMSAgLSBDb21wYXJhdG9yIEludGVycnVwdCBTdGF0dXMgKi8KKwkweDNGRkYsICAgICAvKiBSMzIgIC0gU3lzdGVtIEludGVycnVwdHMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzMyAgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzNCAgLSBJbnRlcnJ1cHQgU3RhdHVzIDIgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzNSAgLSBQb3dlciBVcCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzYgIC0gVW5kZXIgVm9sdGFnZSBJbnRlcnJ1cHQgc3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzcgIC0gT3ZlciBDdXJyZW50IEludGVycnVwdCBzdGF0dXMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzOCAgLSBHUElPIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzOSAgLSBDb21wYXJhdG9yIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCTB4MDA0MCwgICAgIC8qIFI0MCAgLSBDbG9jayBDb250cm9sIDEgKi8KKwkweDAwMDAsICAgICAvKiBSNDEgIC0gQ2xvY2sgQ29udHJvbCAyICovCisJMHgzQjAwLCAgICAgLyogUjQyICAtIEZMTCBDb250cm9sIDEgKi8KKwkweDcwODYsICAgICAvKiBSNDMgIC0gRkxMIENvbnRyb2wgMiAqLworCTB4QzIyNiwgICAgIC8qIFI0NCAgLSBGTEwgQ29udHJvbCAzICovCisJMHgwMDAwLCAgICAgLyogUjQ1ICAtIEZMTCBDb250cm9sIDQgKi8KKwkweDAwMDAsICAgICAvKiBSNDYgKi8KKwkweDAwMDAsICAgICAvKiBSNDcgKi8KKwkweDAwMDAsICAgICAvKiBSNDggIC0gREFDIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNDkgKi8KKwkweDAwQzAsICAgICAvKiBSNTAgIC0gREFDIERpZ2l0YWwgVm9sdW1lIEwgKi8KKwkweDAwQzAsICAgICAvKiBSNTEgIC0gREFDIERpZ2l0YWwgVm9sdW1lIFIgKi8KKwkweDAwMDAsICAgICAvKiBSNTIgKi8KKwkweDAwNDAsICAgICAvKiBSNTMgIC0gREFDIExSIFJhdGUgKi8KKwkweDAwMDAsICAgICAvKiBSNTQgIC0gREFDIENsb2NrIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNTUgKi8KKwkweDAwMDAsICAgICAvKiBSNTYgKi8KKwkweDAwMDAsICAgICAvKiBSNTcgKi8KKwkweDQwMDAsICAgICAvKiBSNTggIC0gREFDIE11dGUgKi8KKwkweDAwMDAsICAgICAvKiBSNTkgIC0gREFDIE11dGUgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjYwICAtIERBQyBTaWRlICovCisJMHgwMDAwLCAgICAgLyogUjYxICovCisJMHgwMDAwLCAgICAgLyogUjYyICovCisJMHgwMDAwLCAgICAgLyogUjYzICovCisJMHg4MDAwLCAgICAgLyogUjY0ICAtIEFEQyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjY1ICovCisJMHgwMEMwLCAgICAgLyogUjY2ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBMICovCisJMHgwMEMwLCAgICAgLyogUjY3ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBSICovCisJMHgwMDAwLCAgICAgLyogUjY4ICAtIEFEQyBEaXZpZGVyICovCisJMHgwMDAwLCAgICAgLyogUjY5ICovCisJMHgwMDQwLCAgICAgLyogUjcwICAtIEFEQyBMUiBSYXRlICovCisJMHgwMDAwLCAgICAgLyogUjcxICovCisJMHgwMzAzLCAgICAgLyogUjcyICAtIElucHV0IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzMgIC0gSU4zIElucHV0IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzQgIC0gTWljIEJpYXMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3NSAqLworCTB4MDAwMCwgICAgIC8qIFI3NiAgLSBPdXRwdXQgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3NyAgLSBKYWNrIERldGVjdCAqLworCTB4MDAwMCwgICAgIC8qIFI3OCAgLSBBbnRpIFBvcCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjc5ICovCisJMHgwMDQwLCAgICAgLyogUjgwICAtIExlZnQgSW5wdXQgVm9sdW1lICovCisJMHgwMDQwLCAgICAgLyogUjgxICAtIFJpZ2h0IElucHV0IFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI4MiAqLworCTB4MDAwMCwgICAgIC8qIFI4MyAqLworCTB4MDAwMCwgICAgIC8qIFI4NCAqLworCTB4MDAwMCwgICAgIC8qIFI4NSAqLworCTB4MDAwMCwgICAgIC8qIFI4NiAqLworCTB4MDAwMCwgICAgIC8qIFI4NyAqLworCTB4MDgwMCwgICAgIC8qIFI4OCAgLSBMZWZ0IE1peGVyIENvbnRyb2wgKi8KKwkweDEwMDAsICAgICAvKiBSODkgIC0gUmlnaHQgTWl4ZXIgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI5MCAqLworCTB4MDAwMCwgICAgIC8qIFI5MSAqLworCTB4MDAwMCwgICAgIC8qIFI5MiAgLSBPVVQzIE1peGVyIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSOTMgIC0gT1VUNCBNaXhlciBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjk0ICovCisJMHgwMDAwLCAgICAgLyogUjk1ICovCisJMHgwMDAwLCAgICAgLyogUjk2ICAtIE91dHB1dCBMZWZ0IE1peGVyIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI5NyAgLSBPdXRwdXQgUmlnaHQgTWl4ZXIgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjk4ICAtIElucHV0IE1peGVyIFZvbHVtZSBMICovCisJMHgwMDAwLCAgICAgLyogUjk5ICAtIElucHV0IE1peGVyIFZvbHVtZSBSICovCisJMHgwMDAwLCAgICAgLyogUjEwMCAtIElucHV0IE1peGVyIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTAyICovCisJMHgwMDAwLCAgICAgLyogUjEwMyAqLworCTB4MDBFNCwgICAgIC8qIFIxMDQgLSBMT1VUMSBWb2x1bWUgKi8KKwkweDAwRTQsICAgICAvKiBSMTA1IC0gUk9VVDEgVm9sdW1lICovCisJMHgwMEU0LCAgICAgLyogUjEwNiAtIExPVVQyIFZvbHVtZSAqLworCTB4MDJFNCwgICAgIC8qIFIxMDcgLSBST1VUMiBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSMTA4ICovCisJMHgwMDAwLCAgICAgLyogUjEwOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTExIC0gQkVFUCBWb2x1bWUgKi8KKwkweDBBMDAsICAgICAvKiBSMTEyIC0gQUkgRm9ybWF0aW5nICovCisJMHgwMDAwLCAgICAgLyogUjExMyAtIEFEQyBEQUMgQ09NUCAqLworCTB4MDAyMCwgICAgIC8qIFIxMTQgLSBBSSBBREMgQ29udHJvbCAqLworCTB4MDAyMCwgICAgIC8qIFIxMTUgLSBBSSBEQUMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTYgLSBBSUYgVGVzdCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTE4ICovCisJMHgwMDAwLCAgICAgLyogUjExOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjAgKi8KKwkweDAwMDAsICAgICAvKiBSMTIxICovCisJMHgwMDAwLCAgICAgLyogUjEyMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMjMgKi8KKwkweDAwMDAsICAgICAvKiBSMTI0ICovCisJMHgwMDAwLCAgICAgLyogUjEyNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjYgKi8KKwkweDAwMDAsICAgICAvKiBSMTI3ICovCisJMHgxRkZGLCAgICAgLyogUjEyOCAtIEdQSU8gRGVib3VuY2UgKi8KKwkweDAwMDAsICAgICAvKiBSMTI5IC0gR1BJTyBQaW4gcHVsbCB1cCBDb250cm9sICovCisJMHgwM0ZDLCAgICAgLyogUjEzMCAtIEdQSU8gUHVsbCBkb3duIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTMxIC0gR1BJTyBJbnRlcnJ1cHQgTW9kZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzIgKi8KKwkweDAwMDAsICAgICAvKiBSMTMzIC0gR1BJTyBDb250cm9sICovCisJMHgwRkZDLCAgICAgLyogUjEzNCAtIEdQSU8gQ29uZmlndXJhdGlvbiAoaS9vKSAqLworCTB4MEZGQywgICAgIC8qIFIxMzUgLSBHUElPIFBpbiBQb2xhcml0eSAvIFR5cGUgKi8KKwkweDAwMDAsICAgICAvKiBSMTM2ICovCisJMHgwMDAwLCAgICAgLyogUjEzNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMzggKi8KKwkweDAwMDAsICAgICAvKiBSMTM5ICovCisJMHgwMDEzLCAgICAgLyogUjE0MCAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTQxIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMiAqLworCTB4MDAwMCwgICAgIC8qIFIxNDIgLSBHUElPIEZ1bmN0aW9uIFNlbGVjdCAzICovCisJMHgwMDAzLCAgICAgLyogUjE0MyAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDQgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ0IC0gRGlnaXRpc2VyIENvbnRyb2wgKDEpICovCisJMHgwMDAyLCAgICAgLyogUjE0NSAtIERpZ2l0aXNlciBDb250cm9sICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDYgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ3ICovCisJMHgwMDAwLCAgICAgLyogUjE0OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDkgKi8KKwkweDAwMDAsICAgICAvKiBSMTUwICovCisJMHgwMDAwLCAgICAgLyogUjE1MSAqLworCTB4NzAwMCwgICAgIC8qIFIxNTIgLSBBVVgxIFJlYWRiYWNrICovCisJMHg3MDAwLCAgICAgLyogUjE1MyAtIEFVWDIgUmVhZGJhY2sgKi8KKwkweDcwMDAsICAgICAvKiBSMTU0IC0gQVVYMyBSZWFkYmFjayAqLworCTB4NzAwMCwgICAgIC8qIFIxNTUgLSBBVVg0IFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE1NiAtIFVTQiBWb2x0YWdlIFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE1NyAtIExJTkUgVm9sdGFnZSBSZWFkYmFjayAqLworCTB4MDAwMCwgICAgIC8qIFIxNTggLSBCQVRUIFZvbHRhZ2UgUmVhZGJhY2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTU5IC0gQ2hpcCBUZW1wIFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE2MCAqLworCTB4MDAwMCwgICAgIC8qIFIxNjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTYyICovCisJMHgwMDAwLCAgICAgLyogUjE2MyAtIEdlbmVyaWMgQ29tcGFyYXRvciBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE2NCAtIEdlbmVyaWMgY29tcGFyYXRvciAxICovCisJMHgwMDAwLCAgICAgLyogUjE2NSAtIEdlbmVyaWMgY29tcGFyYXRvciAyICovCisJMHgwMDAwLCAgICAgLyogUjE2NiAtIEdlbmVyaWMgY29tcGFyYXRvciAzICovCisJMHgwMDAwLCAgICAgLyogUjE2NyAtIEdlbmVyaWMgY29tcGFyYXRvciA0ICovCisJMHhBMDBGLCAgICAgLyogUjE2OCAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDEgKi8KKwkweDBCMDYsICAgICAvKiBSMTY5IC0gQmF0dGVyeSBDaGFyZ2VyIENvbnRyb2wgMiAqLworCTB4MDAwMCwgICAgIC8qIFIxNzAgLSBCYXR0ZXJ5IENoYXJnZXIgQ29udHJvbCAzICovCisJMHgwMDAwLCAgICAgLyogUjE3MSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzIgLSBDdXJyZW50IFNpbmsgRHJpdmVyIEEgKi8KKwkweDAwMDAsICAgICAvKiBSMTczIC0gQ1NBIEZsYXNoIGNvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTc0IC0gQ3VycmVudCBTaW5rIERyaXZlciBCICovCisJMHgwMDAwLCAgICAgLyogUjE3NSAtIENTQiBGbGFzaCBjb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE3NiAtIERDREMvTERPIHJlcXVlc3RlZCAqLworCTB4MDAyRCwgICAgIC8qIFIxNzcgLSBEQ0RDIEFjdGl2ZSBvcHRpb25zICovCisJMHgwMDAwLCAgICAgLyogUjE3OCAtIERDREMgU2xlZXAgb3B0aW9ucyAqLworCTB4MDAyNSwgICAgIC8qIFIxNzkgLSBQb3dlci1jaGVjayBjb21wYXJhdG9yICovCisJMHgwMDBFLCAgICAgLyogUjE4MCAtIERDREMxIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTgxIC0gRENEQzEgVGltZW91dHMgKi8KKwkweDEwMDYsICAgICAvKiBSMTgyIC0gRENEQzEgTG93IFBvd2VyICovCisJMHgwMDE4LCAgICAgLyogUjE4MyAtIERDREMyIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTg0IC0gRENEQzIgVGltZW91dHMgKi8KKwkweDAwMDAsICAgICAvKiBSMTg1ICovCisJMHgwMDAwLCAgICAgLyogUjE4NiAtIERDREMzIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTg3IC0gRENEQzMgVGltZW91dHMgKi8KKwkweDAwMDYsICAgICAvKiBSMTg4IC0gRENEQzMgTG93IFBvd2VyICovCisJMHgwMDAwLCAgICAgLyogUjE4OSAtIERDREM0IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTkwIC0gRENEQzQgVGltZW91dHMgKi8KKwkweDAwMDYsICAgICAvKiBSMTkxIC0gRENEQzQgTG93IFBvd2VyICovCisJMHgwMDA4LCAgICAgLyogUjE5MiAtIERDREM1IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTkzIC0gRENEQzUgVGltZW91dHMgKi8KKwkweDAwMDAsICAgICAvKiBSMTk0ICovCisJMHgwMDAwLCAgICAgLyogUjE5NSAtIERDREM2IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTk2IC0gRENEQzYgVGltZW91dHMgKi8KKwkweDAwMDYsICAgICAvKiBSMTk3IC0gRENEQzYgTG93IFBvd2VyICovCisJMHgwMDAwLCAgICAgLyogUjE5OCAqLworCTB4MDAwMywgICAgIC8qIFIxOTkgLSBMaW1pdCBTd2l0Y2ggQ29udHJvbCAqLworCTB4MDAxQywgICAgIC8qIFIyMDAgLSBMRE8xIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjAxIC0gTERPMSBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMDIgLSBMRE8xIExvdyBQb3dlciAqLworCTB4MDAxQiwgICAgIC8qIFIyMDMgLSBMRE8yIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjA0IC0gTERPMiBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMDUgLSBMRE8yIExvdyBQb3dlciAqLworCTB4MDAxQiwgICAgIC8qIFIyMDYgLSBMRE8zIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjA3IC0gTERPMyBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMDggLSBMRE8zIExvdyBQb3dlciAqLworCTB4MDAxQiwgICAgIC8qIFIyMDkgLSBMRE80IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjEwIC0gTERPNCBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMTEgLSBMRE80IExvdyBQb3dlciAqLworCTB4MDAwMCwgICAgIC8qIFIyMTIgKi8KKwkweDAwMDAsICAgICAvKiBSMjEzICovCisJMHgwMDAwLCAgICAgLyogUjIxNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTUgLSBWQ0NfRkFVTFQgTWFza3MgKi8KKwkweDAwMUYsICAgICAvKiBSMjE2IC0gTWFpbiBCYW5kZ2FwIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjE3IC0gT1NDIENvbnRyb2wgKi8KKwkweDkwMDAsICAgICAvKiBSMjE4IC0gUlRDIFRpY2sgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTkgKi8KKwkweDQwMDAsICAgICAvKiBSMjIwIC0gUkFNIEJJU1QgMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMjEgKi8KKwkweDAwMDAsICAgICAvKiBSMjIyICovCisJMHgwMDAwLCAgICAgLyogUjIyMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMjQgKi8KKwkweDAwMDAsICAgICAvKiBSMjI1IC0gRENEQy9MRE8gc3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjIyNiAqLworCTB4MDAwMCwgICAgIC8qIFIyMjcgKi8KKwkweDAwMDAsICAgICAvKiBSMjI4ICovCisJMHgwMDAwLCAgICAgLyogUjIyOSAqLworCTB4RTAwMCwgICAgIC8qIFIyMzAgLSBHUElPIFBpbiBTdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjMxICovCisJMHgwMDAwLCAgICAgLyogUjIzMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMzMgKi8KKwkweDAwMDAsICAgICAvKiBSMjM0ICovCisJMHgwMDAwLCAgICAgLyogUjIzNSAqLworCTB4MDAwMCwgICAgIC8qIFIyMzYgKi8KKwkweDAwMDAsICAgICAvKiBSMjM3ICovCisJMHgwMDAwLCAgICAgLyogUjIzOCAqLworCTB4MDAwMCwgICAgIC8qIFIyMzkgKi8KKwkweDAwMDAsICAgICAvKiBSMjQwICovCisJMHgwMDAwLCAgICAgLyogUjI0MSAqLworCTB4MDAwMCwgICAgIC8qIFIyNDIgKi8KKwkweDAwMDAsICAgICAvKiBSMjQzICovCisJMHgwMDAwLCAgICAgLyogUjI0NCAqLworCTB4MDAwMCwgICAgIC8qIFIyNDUgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ2ICovCisJMHgwMDAwLCAgICAgLyogUjI0NyAqLworCTB4MDAwMCwgICAgIC8qIFIyNDggKi8KKwkweDAwMDAsICAgICAvKiBSMjQ5ICovCisJMHgwMDAwLCAgICAgLyogUjI1MCAqLworCTB4MDAwMCwgICAgIC8qIFIyNTEgKi8KKwkweDAwMDAsICAgICAvKiBSMjUyICovCisJMHgwMDAwLCAgICAgLyogUjI1MyAqLworCTB4MDAwMCwgICAgIC8qIFIyNTQgKi8KKwkweDAwMDAsICAgICAvKiBSMjU1ICovCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUZEX1dNODM1MF9DT05GSUdfTU9ERV8xCisKKyN1bmRlZiBXTTgzNTBfSEFWRV9DT05GSUdfTU9ERQorI2RlZmluZSBXTTgzNTBfSEFWRV9DT05GSUdfTU9ERQorCitjb25zdCB1MTYgd204MzUwX21vZGUxX2RlZmF1bHRzW10gPSB7CisJMHgxN0ZGLCAgICAgLyogUjAgICAtIFJlc2V0L0lEICovCisJMHgxMDAwLCAgICAgLyogUjEgICAtIElEICovCisJMHgwMDAwLCAgICAgLyogUjIgKi8KKwkweDEwMDIsICAgICAvKiBSMyAgIC0gU3lzdGVtIENvbnRyb2wgMSAqLworCTB4MDAxNCwgICAgIC8qIFI0ICAgLSBTeXN0ZW0gQ29udHJvbCAyICovCisJMHgwMDAwLCAgICAgLyogUjUgICAtIFN5c3RlbSBIaWJlcm5hdGUgKi8KKwkweDhBMDAsICAgICAvKiBSNiAgIC0gSW50ZXJmYWNlIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNyAqLworCTB4ODAwMCwgICAgIC8qIFI4ICAgLSBQb3dlciBtZ210ICgxKSAqLworCTB4MDAwMCwgICAgIC8qIFI5ICAgLSBQb3dlciBtZ210ICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFIxMCAgLSBQb3dlciBtZ210ICgzKSAqLworCTB4MjAwMCwgICAgIC8qIFIxMSAgLSBQb3dlciBtZ210ICg0KSAqLworCTB4MEUwMCwgICAgIC8qIFIxMiAgLSBQb3dlciBtZ210ICg1KSAqLworCTB4MDAwMCwgICAgIC8qIFIxMyAgLSBQb3dlciBtZ210ICg2KSAqLworCTB4MDAwMCwgICAgIC8qIFIxNCAgLSBQb3dlciBtZ210ICg3KSAqLworCTB4MDAwMCwgICAgIC8qIFIxNSAqLworCTB4MDAwMCwgICAgIC8qIFIxNiAgLSBSVEMgU2Vjb25kcy9NaW51dGVzICovCisJMHgwMTAwLCAgICAgLyogUjE3ICAtIFJUQyBIb3Vycy9EYXkgKi8KKwkweDAxMDEsICAgICAvKiBSMTggIC0gUlRDIERhdGUvTW9udGggKi8KKwkweDE0MDAsICAgICAvKiBSMTkgIC0gUlRDIFllYXIgKi8KKwkweDAwMDAsICAgICAvKiBSMjAgIC0gQWxhcm0gU2Vjb25kcy9NaW51dGVzICovCisJMHgwMDAwLCAgICAgLyogUjIxICAtIEFsYXJtIEhvdXJzL0RheSAqLworCTB4MDAwMCwgICAgIC8qIFIyMiAgLSBBbGFybSBEYXRlL01vbnRoICovCisJMHgwMzIwLCAgICAgLyogUjIzICAtIFJUQyBUaW1lIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjQgIC0gU3lzdGVtIEludGVycnVwdHMgKi8KKwkweDAwMDAsICAgICAvKiBSMjUgIC0gSW50ZXJydXB0IFN0YXR1cyAxICovCisJMHgwMDAwLCAgICAgLyogUjI2ICAtIEludGVycnVwdCBTdGF0dXMgMiAqLworCTB4MDAwMCwgICAgIC8qIFIyNyAgLSBQb3dlciBVcCBJbnRlcnJ1cHQgU3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjI4ICAtIFVuZGVyIFZvbHRhZ2UgSW50ZXJydXB0IHN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIyOSAgLSBPdmVyIEN1cnJlbnQgSW50ZXJydXB0IHN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIzMCAgLSBHUElPIEludGVycnVwdCBTdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMzEgIC0gQ29tcGFyYXRvciBJbnRlcnJ1cHQgU3RhdHVzICovCisJMHgzRkZGLCAgICAgLyogUjMyICAtIFN5c3RlbSBJbnRlcnJ1cHRzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzMgIC0gSW50ZXJydXB0IFN0YXR1cyAxIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzQgIC0gSW50ZXJydXB0IFN0YXR1cyAyIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzUgIC0gUG93ZXIgVXAgSW50ZXJydXB0IFN0YXR1cyBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjM2ICAtIFVuZGVyIFZvbHRhZ2UgSW50ZXJydXB0IHN0YXR1cyBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjM3ICAtIE92ZXIgQ3VycmVudCBJbnRlcnJ1cHQgc3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzggIC0gR1BJTyBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzkgIC0gQ29tcGFyYXRvciBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgKi8KKwkweDAwNDAsICAgICAvKiBSNDAgIC0gQ2xvY2sgQ29udHJvbCAxICovCisJMHgwMDAwLCAgICAgLyogUjQxICAtIENsb2NrIENvbnRyb2wgMiAqLworCTB4M0IwMCwgICAgIC8qIFI0MiAgLSBGTEwgQ29udHJvbCAxICovCisJMHg3MDg2LCAgICAgLyogUjQzICAtIEZMTCBDb250cm9sIDIgKi8KKwkweEMyMjYsICAgICAvKiBSNDQgIC0gRkxMIENvbnRyb2wgMyAqLworCTB4MDAwMCwgICAgIC8qIFI0NSAgLSBGTEwgQ29udHJvbCA0ICovCisJMHgwMDAwLCAgICAgLyogUjQ2ICovCisJMHgwMDAwLCAgICAgLyogUjQ3ICovCisJMHgwMDAwLCAgICAgLyogUjQ4ICAtIERBQyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjQ5ICovCisJMHgwMEMwLCAgICAgLyogUjUwICAtIERBQyBEaWdpdGFsIFZvbHVtZSBMICovCisJMHgwMEMwLCAgICAgLyogUjUxICAtIERBQyBEaWdpdGFsIFZvbHVtZSBSICovCisJMHgwMDAwLCAgICAgLyogUjUyICovCisJMHgwMDQwLCAgICAgLyogUjUzICAtIERBQyBMUiBSYXRlICovCisJMHgwMDAwLCAgICAgLyogUjU0ICAtIERBQyBDbG9jayBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjU1ICovCisJMHgwMDAwLCAgICAgLyogUjU2ICovCisJMHgwMDAwLCAgICAgLyogUjU3ICovCisJMHg0MDAwLCAgICAgLyogUjU4ICAtIERBQyBNdXRlICovCisJMHgwMDAwLCAgICAgLyogUjU5ICAtIERBQyBNdXRlIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI2MCAgLSBEQUMgU2lkZSAqLworCTB4MDAwMCwgICAgIC8qIFI2MSAqLworCTB4MDAwMCwgICAgIC8qIFI2MiAqLworCTB4MDAwMCwgICAgIC8qIFI2MyAqLworCTB4ODAwMCwgICAgIC8qIFI2NCAgLSBBREMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI2NSAqLworCTB4MDBDMCwgICAgIC8qIFI2NiAgLSBBREMgRGlnaXRhbCBWb2x1bWUgTCAqLworCTB4MDBDMCwgICAgIC8qIFI2NyAgLSBBREMgRGlnaXRhbCBWb2x1bWUgUiAqLworCTB4MDAwMCwgICAgIC8qIFI2OCAgLSBBREMgRGl2aWRlciAqLworCTB4MDAwMCwgICAgIC8qIFI2OSAqLworCTB4MDA0MCwgICAgIC8qIFI3MCAgLSBBREMgTFIgUmF0ZSAqLworCTB4MDAwMCwgICAgIC8qIFI3MSAqLworCTB4MDMwMywgICAgIC8qIFI3MiAgLSBJbnB1dCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjczICAtIElOMyBJbnB1dCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjc0ICAtIE1pYyBCaWFzIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzUgKi8KKwkweDAwMDAsICAgICAvKiBSNzYgIC0gT3V0cHV0IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzcgIC0gSmFjayBEZXRlY3QgKi8KKwkweDAwMDAsICAgICAvKiBSNzggIC0gQW50aSBQb3AgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3OSAqLworCTB4MDA0MCwgICAgIC8qIFI4MCAgLSBMZWZ0IElucHV0IFZvbHVtZSAqLworCTB4MDA0MCwgICAgIC8qIFI4MSAgLSBSaWdodCBJbnB1dCBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSODIgKi8KKwkweDAwMDAsICAgICAvKiBSODMgKi8KKwkweDAwMDAsICAgICAvKiBSODQgKi8KKwkweDAwMDAsICAgICAvKiBSODUgKi8KKwkweDAwMDAsICAgICAvKiBSODYgKi8KKwkweDAwMDAsICAgICAvKiBSODcgKi8KKwkweDA4MDAsICAgICAvKiBSODggIC0gTGVmdCBNaXhlciBDb250cm9sICovCisJMHgxMDAwLCAgICAgLyogUjg5ICAtIFJpZ2h0IE1peGVyIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSOTAgKi8KKwkweDAwMDAsICAgICAvKiBSOTEgKi8KKwkweDAwMDAsICAgICAvKiBSOTIgIC0gT1VUMyBNaXhlciBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjkzICAtIE9VVDQgTWl4ZXIgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI5NCAqLworCTB4MDAwMCwgICAgIC8qIFI5NSAqLworCTB4MDAwMCwgICAgIC8qIFI5NiAgLSBPdXRwdXQgTGVmdCBNaXhlciBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSOTcgIC0gT3V0cHV0IFJpZ2h0IE1peGVyIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI5OCAgLSBJbnB1dCBNaXhlciBWb2x1bWUgTCAqLworCTB4MDAwMCwgICAgIC8qIFI5OSAgLSBJbnB1dCBNaXhlciBWb2x1bWUgUiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDAgLSBJbnB1dCBNaXhlciBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSMTAxICovCisJMHgwMDAwLCAgICAgLyogUjEwMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDMgKi8KKwkweDAwRTQsICAgICAvKiBSMTA0IC0gTE9VVDEgVm9sdW1lICovCisJMHgwMEU0LCAgICAgLyogUjEwNSAtIFJPVVQxIFZvbHVtZSAqLworCTB4MDBFNCwgICAgIC8qIFIxMDYgLSBMT1VUMiBWb2x1bWUgKi8KKwkweDAyRTQsICAgICAvKiBSMTA3IC0gUk9VVDIgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjEwOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDkgKi8KKwkweDAwMDAsICAgICAvKiBSMTEwICovCisJMHgwMDAwLCAgICAgLyogUjExMSAtIEJFRVAgVm9sdW1lICovCisJMHgwQTAwLCAgICAgLyogUjExMiAtIEFJIEZvcm1hdGluZyAqLworCTB4MDAwMCwgICAgIC8qIFIxMTMgLSBBREMgREFDIENPTVAgKi8KKwkweDAwMjAsICAgICAvKiBSMTE0IC0gQUkgQURDIENvbnRyb2wgKi8KKwkweDAwMjAsICAgICAvKiBSMTE1IC0gQUkgREFDIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTE2IC0gQUlGIFRlc3QgKi8KKwkweDAwMDAsICAgICAvKiBSMTE3ICovCisJMHgwMDAwLCAgICAgLyogUjExOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTkgKi8KKwkweDAwMDAsICAgICAvKiBSMTIwICovCisJMHgwMDAwLCAgICAgLyogUjEyMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjIgKi8KKwkweDAwMDAsICAgICAvKiBSMTIzICovCisJMHgwMDAwLCAgICAgLyogUjEyNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjUgKi8KKwkweDAwMDAsICAgICAvKiBSMTI2ICovCisJMHgwMDAwLCAgICAgLyogUjEyNyAqLworCTB4MUZGRiwgICAgIC8qIFIxMjggLSBHUElPIERlYm91bmNlICovCisJMHgwMDAwLCAgICAgLyogUjEyOSAtIEdQSU8gUGluIHB1bGwgdXAgQ29udHJvbCAqLworCTB4MDNGQywgICAgIC8qIFIxMzAgLSBHUElPIFB1bGwgZG93biBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjEzMSAtIEdQSU8gSW50ZXJydXB0IE1vZGUgKi8KKwkweDAwMDAsICAgICAvKiBSMTMyICovCisJMHgwMDAwLCAgICAgLyogUjEzMyAtIEdQSU8gQ29udHJvbCAqLworCTB4MDBGQiwgICAgIC8qIFIxMzQgLSBHUElPIENvbmZpZ3VyYXRpb24gKGkvbykgKi8KKwkweDA0RkUsICAgICAvKiBSMTM1IC0gR1BJTyBQaW4gUG9sYXJpdHkgLyBUeXBlICovCisJMHgwMDAwLCAgICAgLyogUjEzNiAqLworCTB4MDAwMCwgICAgIC8qIFIxMzcgKi8KKwkweDAwMDAsICAgICAvKiBSMTM4ICovCisJMHgwMDAwLCAgICAgLyogUjEzOSAqLworCTB4MDMxMiwgICAgIC8qIFIxNDAgLSBHUElPIEZ1bmN0aW9uIFNlbGVjdCAxICovCisJMHgxMDAzLCAgICAgLyogUjE0MSAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDIgKi8KKwkweDEzMzEsICAgICAvKiBSMTQyIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMyAqLworCTB4MDAwMywgICAgIC8qIFIxNDMgLSBHUElPIEZ1bmN0aW9uIFNlbGVjdCA0ICovCisJMHgwMDAwLCAgICAgLyogUjE0NCAtIERpZ2l0aXNlciBDb250cm9sICgxKSAqLworCTB4MDAwMiwgICAgIC8qIFIxNDUgLSBEaWdpdGlzZXIgQ29udHJvbCAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ2ICovCisJMHgwMDAwLCAgICAgLyogUjE0NyAqLworCTB4MDAwMCwgICAgIC8qIFIxNDggKi8KKwkweDAwMDAsICAgICAvKiBSMTQ5ICovCisJMHgwMDAwLCAgICAgLyogUjE1MCAqLworCTB4MDAwMCwgICAgIC8qIFIxNTEgKi8KKwkweDcwMDAsICAgICAvKiBSMTUyIC0gQVVYMSBSZWFkYmFjayAqLworCTB4NzAwMCwgICAgIC8qIFIxNTMgLSBBVVgyIFJlYWRiYWNrICovCisJMHg3MDAwLCAgICAgLyogUjE1NCAtIEFVWDMgUmVhZGJhY2sgKi8KKwkweDcwMDAsICAgICAvKiBSMTU1IC0gQVVYNCBSZWFkYmFjayAqLworCTB4MDAwMCwgICAgIC8qIFIxNTYgLSBVU0IgVm9sdGFnZSBSZWFkYmFjayAqLworCTB4MDAwMCwgICAgIC8qIFIxNTcgLSBMSU5FIFZvbHRhZ2UgUmVhZGJhY2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTU4IC0gQkFUVCBWb2x0YWdlIFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE1OSAtIENoaXAgVGVtcCBSZWFkYmFjayAqLworCTB4MDAwMCwgICAgIC8qIFIxNjAgKi8KKwkweDAwMDAsICAgICAvKiBSMTYxICovCisJMHgwMDAwLCAgICAgLyogUjE2MiAqLworCTB4MDAwMCwgICAgIC8qIFIxNjMgLSBHZW5lcmljIENvbXBhcmF0b3IgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxNjQgLSBHZW5lcmljIGNvbXBhcmF0b3IgMSAqLworCTB4MDAwMCwgICAgIC8qIFIxNjUgLSBHZW5lcmljIGNvbXBhcmF0b3IgMiAqLworCTB4MDAwMCwgICAgIC8qIFIxNjYgLSBHZW5lcmljIGNvbXBhcmF0b3IgMyAqLworCTB4MDAwMCwgICAgIC8qIFIxNjcgLSBHZW5lcmljIGNvbXBhcmF0b3IgNCAqLworCTB4QTAwRiwgICAgIC8qIFIxNjggLSBCYXR0ZXJ5IENoYXJnZXIgQ29udHJvbCAxICovCisJMHgwQjA2LCAgICAgLyogUjE2OSAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTcwIC0gQmF0dGVyeSBDaGFyZ2VyIENvbnRyb2wgMyAqLworCTB4MDAwMCwgICAgIC8qIFIxNzEgKi8KKwkweDAwMDAsICAgICAvKiBSMTcyIC0gQ3VycmVudCBTaW5rIERyaXZlciBBICovCisJMHgwMDAwLCAgICAgLyogUjE3MyAtIENTQSBGbGFzaCBjb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE3NCAtIEN1cnJlbnQgU2luayBEcml2ZXIgQiAqLworCTB4MDAwMCwgICAgIC8qIFIxNzUgLSBDU0IgRmxhc2ggY29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxNzYgLSBEQ0RDL0xETyByZXF1ZXN0ZWQgKi8KKwkweDAwMkQsICAgICAvKiBSMTc3IC0gRENEQyBBY3RpdmUgb3B0aW9ucyAqLworCTB4MDAwMCwgICAgIC8qIFIxNzggLSBEQ0RDIFNsZWVwIG9wdGlvbnMgKi8KKwkweDAwMjUsICAgICAvKiBSMTc5IC0gUG93ZXItY2hlY2sgY29tcGFyYXRvciAqLworCTB4MDA2MiwgICAgIC8qIFIxODAgLSBEQ0RDMSBDb250cm9sICovCisJMHgwNDAwLCAgICAgLyogUjE4MSAtIERDREMxIFRpbWVvdXRzICovCisJMHgxMDA2LCAgICAgLyogUjE4MiAtIERDREMxIExvdyBQb3dlciAqLworCTB4MDAxOCwgICAgIC8qIFIxODMgLSBEQ0RDMiBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE4NCAtIERDREMyIFRpbWVvdXRzICovCisJMHgwMDAwLCAgICAgLyogUjE4NSAqLworCTB4MDAyNiwgICAgIC8qIFIxODYgLSBEQ0RDMyBDb250cm9sICovCisJMHgwNDAwLCAgICAgLyogUjE4NyAtIERDREMzIFRpbWVvdXRzICovCisJMHgwMDA2LCAgICAgLyogUjE4OCAtIERDREMzIExvdyBQb3dlciAqLworCTB4MDA2MiwgICAgIC8qIFIxODkgLSBEQ0RDNCBDb250cm9sICovCisJMHgwNDAwLCAgICAgLyogUjE5MCAtIERDREM0IFRpbWVvdXRzICovCisJMHgwMDA2LCAgICAgLyogUjE5MSAtIERDREM0IExvdyBQb3dlciAqLworCTB4MDAwOCwgICAgIC8qIFIxOTIgLSBEQ0RDNSBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE5MyAtIERDREM1IFRpbWVvdXRzICovCisJMHgwMDAwLCAgICAgLyogUjE5NCAqLworCTB4MDAyNiwgICAgIC8qIFIxOTUgLSBEQ0RDNiBDb250cm9sICovCisJMHgwODAwLCAgICAgLyogUjE5NiAtIERDREM2IFRpbWVvdXRzICovCisJMHgwMDA2LCAgICAgLyogUjE5NyAtIERDREM2IExvdyBQb3dlciAqLworCTB4MDAwMCwgICAgIC8qIFIxOTggKi8KKwkweDAwMDMsICAgICAvKiBSMTk5IC0gTGltaXQgU3dpdGNoIENvbnRyb2wgKi8KKwkweDAwMDYsICAgICAvKiBSMjAwIC0gTERPMSBDb250cm9sICovCisJMHgwNDAwLCAgICAgLyogUjIwMSAtIExETzEgVGltZW91dHMgKi8KKwkweDAwMUMsICAgICAvKiBSMjAyIC0gTERPMSBMb3cgUG93ZXIgKi8KKwkweDAwMDYsICAgICAvKiBSMjAzIC0gTERPMiBDb250cm9sICovCisJMHgwNDAwLCAgICAgLyogUjIwNCAtIExETzIgVGltZW91dHMgKi8KKwkweDAwMUMsICAgICAvKiBSMjA1IC0gTERPMiBMb3cgUG93ZXIgKi8KKwkweDAwMUIsICAgICAvKiBSMjA2IC0gTERPMyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjIwNyAtIExETzMgVGltZW91dHMgKi8KKwkweDAwMUMsICAgICAvKiBSMjA4IC0gTERPMyBMb3cgUG93ZXIgKi8KKwkweDAwMUIsICAgICAvKiBSMjA5IC0gTERPNCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjIxMCAtIExETzQgVGltZW91dHMgKi8KKwkweDAwMUMsICAgICAvKiBSMjExIC0gTERPNCBMb3cgUG93ZXIgKi8KKwkweDAwMDAsICAgICAvKiBSMjEyICovCisJMHgwMDAwLCAgICAgLyogUjIxMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMTQgKi8KKwkweDAwMDAsICAgICAvKiBSMjE1IC0gVkNDX0ZBVUxUIE1hc2tzICovCisJMHgwMDFGLCAgICAgLyogUjIxNiAtIE1haW4gQmFuZGdhcCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjIxNyAtIE9TQyBDb250cm9sICovCisJMHg5MDAwLCAgICAgLyogUjIxOCAtIFJUQyBUaWNrIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjE5ICovCisJMHg0MDAwLCAgICAgLyogUjIyMCAtIFJBTSBCSVNUIDEgKi8KKwkweDAwMDAsICAgICAvKiBSMjIxICovCisJMHgwMDAwLCAgICAgLyogUjIyMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMjMgKi8KKwkweDAwMDAsICAgICAvKiBSMjI0ICovCisJMHgwMDAwLCAgICAgLyogUjIyNSAtIERDREMvTERPIHN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIyMjYgKi8KKwkweDAwMDAsICAgICAvKiBSMjI3ICovCisJMHgwMDAwLCAgICAgLyogUjIyOCAqLworCTB4MDAwMCwgICAgIC8qIFIyMjkgKi8KKwkweEUwMDAsICAgICAvKiBSMjMwIC0gR1BJTyBQaW4gU3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjIzMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMzIgKi8KKwkweDAwMDAsICAgICAvKiBSMjMzICovCisJMHgwMDAwLCAgICAgLyogUjIzNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMzUgKi8KKwkweDAwMDAsICAgICAvKiBSMjM2ICovCisJMHgwMDAwLCAgICAgLyogUjIzNyAqLworCTB4MDAwMCwgICAgIC8qIFIyMzggKi8KKwkweDAwMDAsICAgICAvKiBSMjM5ICovCisJMHgwMDAwLCAgICAgLyogUjI0MCAqLworCTB4MDAwMCwgICAgIC8qIFIyNDEgKi8KKwkweDAwMDAsICAgICAvKiBSMjQyICovCisJMHgwMDAwLCAgICAgLyogUjI0MyAqLworCTB4MDAwMCwgICAgIC8qIFIyNDQgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ1ICovCisJMHgwMDAwLCAgICAgLyogUjI0NiAqLworCTB4MDAwMCwgICAgIC8qIFIyNDcgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ4ICovCisJMHgwMDAwLCAgICAgLyogUjI0OSAqLworCTB4MDAwMCwgICAgIC8qIFIyNTAgKi8KKwkweDAwMDAsICAgICAvKiBSMjUxICovCisJMHgwMDAwLCAgICAgLyogUjI1MiAqLworCTB4MDAwMCwgICAgIC8qIFIyNTMgKi8KKwkweDAwMDAsICAgICAvKiBSMjU0ICovCisJMHgwMDAwLCAgICAgLyogUjI1NSAqLworfTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01GRF9XTTgzNTBfQ09ORklHX01PREVfMgorCisjdW5kZWYgV004MzUwX0hBVkVfQ09ORklHX01PREUKKyNkZWZpbmUgV004MzUwX0hBVkVfQ09ORklHX01PREUKKworY29uc3QgdTE2IHdtODM1MF9tb2RlMl9kZWZhdWx0c1tdID0geworCTB4MTdGRiwgICAgIC8qIFIwICAgLSBSZXNldC9JRCAqLworCTB4MTAwMCwgICAgIC8qIFIxICAgLSBJRCAqLworCTB4MDAwMCwgICAgIC8qIFIyICovCisJMHgxMDAyLCAgICAgLyogUjMgICAtIFN5c3RlbSBDb250cm9sIDEgKi8KKwkweDAwMTQsICAgICAvKiBSNCAgIC0gU3lzdGVtIENvbnRyb2wgMiAqLworCTB4MDAwMCwgICAgIC8qIFI1ICAgLSBTeXN0ZW0gSGliZXJuYXRlICovCisJMHg4QTAwLCAgICAgLyogUjYgICAtIEludGVyZmFjZSBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjcgKi8KKwkweDgwMDAsICAgICAvKiBSOCAgIC0gUG93ZXIgbWdtdCAoMSkgKi8KKwkweDAwMDAsICAgICAvKiBSOSAgIC0gUG93ZXIgbWdtdCAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSMTAgIC0gUG93ZXIgbWdtdCAoMykgKi8KKwkweDIwMDAsICAgICAvKiBSMTEgIC0gUG93ZXIgbWdtdCAoNCkgKi8KKwkweDBFMDAsICAgICAvKiBSMTIgIC0gUG93ZXIgbWdtdCAoNSkgKi8KKwkweDAwMDAsICAgICAvKiBSMTMgIC0gUG93ZXIgbWdtdCAoNikgKi8KKwkweDAwMDAsICAgICAvKiBSMTQgIC0gUG93ZXIgbWdtdCAoNykgKi8KKwkweDAwMDAsICAgICAvKiBSMTUgKi8KKwkweDAwMDAsICAgICAvKiBSMTYgIC0gUlRDIFNlY29uZHMvTWludXRlcyAqLworCTB4MDEwMCwgICAgIC8qIFIxNyAgLSBSVEMgSG91cnMvRGF5ICovCisJMHgwMTAxLCAgICAgLyogUjE4ICAtIFJUQyBEYXRlL01vbnRoICovCisJMHgxNDAwLCAgICAgLyogUjE5ICAtIFJUQyBZZWFyICovCisJMHgwMDAwLCAgICAgLyogUjIwICAtIEFsYXJtIFNlY29uZHMvTWludXRlcyAqLworCTB4MDAwMCwgICAgIC8qIFIyMSAgLSBBbGFybSBIb3Vycy9EYXkgKi8KKwkweDAwMDAsICAgICAvKiBSMjIgIC0gQWxhcm0gRGF0ZS9Nb250aCAqLworCTB4MDMyMCwgICAgIC8qIFIyMyAgLSBSVEMgVGltZSBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjI0ICAtIFN5c3RlbSBJbnRlcnJ1cHRzICovCisJMHgwMDAwLCAgICAgLyogUjI1ICAtIEludGVycnVwdCBTdGF0dXMgMSAqLworCTB4MDAwMCwgICAgIC8qIFIyNiAgLSBJbnRlcnJ1cHQgU3RhdHVzIDIgKi8KKwkweDAwMDAsICAgICAvKiBSMjcgIC0gUG93ZXIgVXAgSW50ZXJydXB0IFN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIyOCAgLSBVbmRlciBWb2x0YWdlIEludGVycnVwdCBzdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjkgIC0gT3ZlciBDdXJyZW50IEludGVycnVwdCBzdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMzAgIC0gR1BJTyBJbnRlcnJ1cHQgU3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjMxICAtIENvbXBhcmF0b3IgSW50ZXJydXB0IFN0YXR1cyAqLworCTB4M0ZGRiwgICAgIC8qIFIzMiAgLSBTeXN0ZW0gSW50ZXJydXB0cyBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjMzICAtIEludGVycnVwdCBTdGF0dXMgMSBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjM0ICAtIEludGVycnVwdCBTdGF0dXMgMiBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjM1ICAtIFBvd2VyIFVwIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzNiAgLSBVbmRlciBWb2x0YWdlIEludGVycnVwdCBzdGF0dXMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzNyAgLSBPdmVyIEN1cnJlbnQgSW50ZXJydXB0IHN0YXR1cyBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjM4ICAtIEdQSU8gSW50ZXJydXB0IFN0YXR1cyBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjM5ICAtIENvbXBhcmF0b3IgSW50ZXJydXB0IFN0YXR1cyBNYXNrICovCisJMHgwMDQwLCAgICAgLyogUjQwICAtIENsb2NrIENvbnRyb2wgMSAqLworCTB4MDAwMCwgICAgIC8qIFI0MSAgLSBDbG9jayBDb250cm9sIDIgKi8KKwkweDNCMDAsICAgICAvKiBSNDIgIC0gRkxMIENvbnRyb2wgMSAqLworCTB4NzA4NiwgICAgIC8qIFI0MyAgLSBGTEwgQ29udHJvbCAyICovCisJMHhDMjI2LCAgICAgLyogUjQ0ICAtIEZMTCBDb250cm9sIDMgKi8KKwkweDAwMDAsICAgICAvKiBSNDUgIC0gRkxMIENvbnRyb2wgNCAqLworCTB4MDAwMCwgICAgIC8qIFI0NiAqLworCTB4MDAwMCwgICAgIC8qIFI0NyAqLworCTB4MDAwMCwgICAgIC8qIFI0OCAgLSBEQUMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI0OSAqLworCTB4MDBDMCwgICAgIC8qIFI1MCAgLSBEQUMgRGlnaXRhbCBWb2x1bWUgTCAqLworCTB4MDBDMCwgICAgIC8qIFI1MSAgLSBEQUMgRGlnaXRhbCBWb2x1bWUgUiAqLworCTB4MDAwMCwgICAgIC8qIFI1MiAqLworCTB4MDA0MCwgICAgIC8qIFI1MyAgLSBEQUMgTFIgUmF0ZSAqLworCTB4MDAwMCwgICAgIC8qIFI1NCAgLSBEQUMgQ2xvY2sgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI1NSAqLworCTB4MDAwMCwgICAgIC8qIFI1NiAqLworCTB4MDAwMCwgICAgIC8qIFI1NyAqLworCTB4NDAwMCwgICAgIC8qIFI1OCAgLSBEQUMgTXV0ZSAqLworCTB4MDAwMCwgICAgIC8qIFI1OSAgLSBEQUMgTXV0ZSBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSNjAgIC0gREFDIFNpZGUgKi8KKwkweDAwMDAsICAgICAvKiBSNjEgKi8KKwkweDAwMDAsICAgICAvKiBSNjIgKi8KKwkweDAwMDAsICAgICAvKiBSNjMgKi8KKwkweDgwMDAsICAgICAvKiBSNjQgIC0gQURDIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNjUgKi8KKwkweDAwQzAsICAgICAvKiBSNjYgIC0gQURDIERpZ2l0YWwgVm9sdW1lIEwgKi8KKwkweDAwQzAsICAgICAvKiBSNjcgIC0gQURDIERpZ2l0YWwgVm9sdW1lIFIgKi8KKwkweDAwMDAsICAgICAvKiBSNjggIC0gQURDIERpdmlkZXIgKi8KKwkweDAwMDAsICAgICAvKiBSNjkgKi8KKwkweDAwNDAsICAgICAvKiBSNzAgIC0gQURDIExSIFJhdGUgKi8KKwkweDAwMDAsICAgICAvKiBSNzEgKi8KKwkweDAzMDMsICAgICAvKiBSNzIgIC0gSW5wdXQgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3MyAgLSBJTjMgSW5wdXQgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3NCAgLSBNaWMgQmlhcyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjc1ICovCisJMHgwMDAwLCAgICAgLyogUjc2ICAtIE91dHB1dCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjc3ICAtIEphY2sgRGV0ZWN0ICovCisJMHgwMDAwLCAgICAgLyogUjc4ICAtIEFudGkgUG9wIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzkgKi8KKwkweDAwNDAsICAgICAvKiBSODAgIC0gTGVmdCBJbnB1dCBWb2x1bWUgKi8KKwkweDAwNDAsICAgICAvKiBSODEgIC0gUmlnaHQgSW5wdXQgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjgyICovCisJMHgwMDAwLCAgICAgLyogUjgzICovCisJMHgwMDAwLCAgICAgLyogUjg0ICovCisJMHgwMDAwLCAgICAgLyogUjg1ICovCisJMHgwMDAwLCAgICAgLyogUjg2ICovCisJMHgwMDAwLCAgICAgLyogUjg3ICovCisJMHgwODAwLCAgICAgLyogUjg4ICAtIExlZnQgTWl4ZXIgQ29udHJvbCAqLworCTB4MTAwMCwgICAgIC8qIFI4OSAgLSBSaWdodCBNaXhlciBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjkwICovCisJMHgwMDAwLCAgICAgLyogUjkxICovCisJMHgwMDAwLCAgICAgLyogUjkyICAtIE9VVDMgTWl4ZXIgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI5MyAgLSBPVVQ0IE1peGVyIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSOTQgKi8KKwkweDAwMDAsICAgICAvKiBSOTUgKi8KKwkweDAwMDAsICAgICAvKiBSOTYgIC0gT3V0cHV0IExlZnQgTWl4ZXIgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjk3ICAtIE91dHB1dCBSaWdodCBNaXhlciBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSOTggIC0gSW5wdXQgTWl4ZXIgVm9sdW1lIEwgKi8KKwkweDAwMDAsICAgICAvKiBSOTkgIC0gSW5wdXQgTWl4ZXIgVm9sdW1lIFIgKi8KKwkweDAwMDAsICAgICAvKiBSMTAwIC0gSW5wdXQgTWl4ZXIgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjEwMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTAzICovCisJMHgwMEU0LCAgICAgLyogUjEwNCAtIExPVVQxIFZvbHVtZSAqLworCTB4MDBFNCwgICAgIC8qIFIxMDUgLSBST1VUMSBWb2x1bWUgKi8KKwkweDAwRTQsICAgICAvKiBSMTA2IC0gTE9VVDIgVm9sdW1lICovCisJMHgwMkU0LCAgICAgLyogUjEwNyAtIFJPVVQyIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDggKi8KKwkweDAwMDAsICAgICAvKiBSMTA5ICovCisJMHgwMDAwLCAgICAgLyogUjExMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTEgLSBCRUVQIFZvbHVtZSAqLworCTB4MEEwMCwgICAgIC8qIFIxMTIgLSBBSSBGb3JtYXRpbmcgKi8KKwkweDAwMDAsICAgICAvKiBSMTEzIC0gQURDIERBQyBDT01QICovCisJMHgwMDIwLCAgICAgLyogUjExNCAtIEFJIEFEQyBDb250cm9sICovCisJMHgwMDIwLCAgICAgLyogUjExNSAtIEFJIERBQyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjExNiAtIEFJRiBUZXN0ICovCisJMHgwMDAwLCAgICAgLyogUjExNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMTggKi8KKwkweDAwMDAsICAgICAvKiBSMTE5ICovCisJMHgwMDAwLCAgICAgLyogUjEyMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTIyICovCisJMHgwMDAwLCAgICAgLyogUjEyMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMjQgKi8KKwkweDAwMDAsICAgICAvKiBSMTI1ICovCisJMHgwMDAwLCAgICAgLyogUjEyNiAqLworCTB4MDAwMCwgICAgIC8qIFIxMjcgKi8KKwkweDFGRkYsICAgICAvKiBSMTI4IC0gR1BJTyBEZWJvdW5jZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjkgLSBHUElPIFBpbiBwdWxsIHVwIENvbnRyb2wgKi8KKwkweDAzRkMsICAgICAvKiBSMTMwIC0gR1BJTyBQdWxsIGRvd24gQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzEgLSBHUElPIEludGVycnVwdCBNb2RlICovCisJMHgwMDAwLCAgICAgLyogUjEzMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMzMgLSBHUElPIENvbnRyb2wgKi8KKwkweDA4RkIsICAgICAvKiBSMTM0IC0gR1BJTyBDb25maWd1cmF0aW9uIChpL28pICovCisJMHgwQ0ZFLCAgICAgLyogUjEzNSAtIEdQSU8gUGluIFBvbGFyaXR5IC8gVHlwZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzYgKi8KKwkweDAwMDAsICAgICAvKiBSMTM3ICovCisJMHgwMDAwLCAgICAgLyogUjEzOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzkgKi8KKwkweDAzMTIsICAgICAvKiBSMTQwIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMSAqLworCTB4MDAwMywgICAgIC8qIFIxNDEgLSBHUElPIEZ1bmN0aW9uIFNlbGVjdCAyICovCisJMHgyMzMxLCAgICAgLyogUjE0MiAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDMgKi8KKwkweDAwMDMsICAgICAvKiBSMTQzIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgNCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDQgLSBEaWdpdGlzZXIgQ29udHJvbCAoMSkgKi8KKwkweDAwMDIsICAgICAvKiBSMTQ1IC0gRGlnaXRpc2VyIENvbnRyb2wgKDIpICovCisJMHgwMDAwLCAgICAgLyogUjE0NiAqLworCTB4MDAwMCwgICAgIC8qIFIxNDcgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ4ICovCisJMHgwMDAwLCAgICAgLyogUjE0OSAqLworCTB4MDAwMCwgICAgIC8qIFIxNTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTUxICovCisJMHg3MDAwLCAgICAgLyogUjE1MiAtIEFVWDEgUmVhZGJhY2sgKi8KKwkweDcwMDAsICAgICAvKiBSMTUzIC0gQVVYMiBSZWFkYmFjayAqLworCTB4NzAwMCwgICAgIC8qIFIxNTQgLSBBVVgzIFJlYWRiYWNrICovCisJMHg3MDAwLCAgICAgLyogUjE1NSAtIEFVWDQgUmVhZGJhY2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTU2IC0gVVNCIFZvbHRhZ2UgUmVhZGJhY2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTU3IC0gTElORSBWb2x0YWdlIFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE1OCAtIEJBVFQgVm9sdGFnZSBSZWFkYmFjayAqLworCTB4MDAwMCwgICAgIC8qIFIxNTkgLSBDaGlwIFRlbXAgUmVhZGJhY2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTYwICovCisJMHgwMDAwLCAgICAgLyogUjE2MSAqLworCTB4MDAwMCwgICAgIC8qIFIxNjIgKi8KKwkweDAwMDAsICAgICAvKiBSMTYzIC0gR2VuZXJpYyBDb21wYXJhdG9yIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTY0IC0gR2VuZXJpYyBjb21wYXJhdG9yIDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTY1IC0gR2VuZXJpYyBjb21wYXJhdG9yIDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTY2IC0gR2VuZXJpYyBjb21wYXJhdG9yIDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTY3IC0gR2VuZXJpYyBjb21wYXJhdG9yIDQgKi8KKwkweEEwMEYsICAgICAvKiBSMTY4IC0gQmF0dGVyeSBDaGFyZ2VyIENvbnRyb2wgMSAqLworCTB4MEIwNiwgICAgIC8qIFIxNjkgLSBCYXR0ZXJ5IENoYXJnZXIgQ29udHJvbCAyICovCisJMHgwMDAwLCAgICAgLyogUjE3MCAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTcxICovCisJMHgwMDAwLCAgICAgLyogUjE3MiAtIEN1cnJlbnQgU2luayBEcml2ZXIgQSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzMgLSBDU0EgRmxhc2ggY29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxNzQgLSBDdXJyZW50IFNpbmsgRHJpdmVyIEIgKi8KKwkweDAwMDAsICAgICAvKiBSMTc1IC0gQ1NCIEZsYXNoIGNvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTc2IC0gRENEQy9MRE8gcmVxdWVzdGVkICovCisJMHgwMDJELCAgICAgLyogUjE3NyAtIERDREMgQWN0aXZlIG9wdGlvbnMgKi8KKwkweDAwMDAsICAgICAvKiBSMTc4IC0gRENEQyBTbGVlcCBvcHRpb25zICovCisJMHgwMDI1LCAgICAgLyogUjE3OSAtIFBvd2VyLWNoZWNrIGNvbXBhcmF0b3IgKi8KKwkweDAwMEUsICAgICAvKiBSMTgwIC0gRENEQzEgQ29udHJvbCAqLworCTB4MDQwMCwgICAgIC8qIFIxODEgLSBEQ0RDMSBUaW1lb3V0cyAqLworCTB4MTAwNiwgICAgIC8qIFIxODIgLSBEQ0RDMSBMb3cgUG93ZXIgKi8KKwkweDAwMTgsICAgICAvKiBSMTgzIC0gRENEQzIgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxODQgLSBEQ0RDMiBUaW1lb3V0cyAqLworCTB4MDAwMCwgICAgIC8qIFIxODUgKi8KKwkweDAwMkUsICAgICAvKiBSMTg2IC0gRENEQzMgQ29udHJvbCAqLworCTB4MDgwMCwgICAgIC8qIFIxODcgLSBEQ0RDMyBUaW1lb3V0cyAqLworCTB4MDAwNiwgICAgIC8qIFIxODggLSBEQ0RDMyBMb3cgUG93ZXIgKi8KKwkweDAwMEUsICAgICAvKiBSMTg5IC0gRENEQzQgQ29udHJvbCAqLworCTB4MDgwMCwgICAgIC8qIFIxOTAgLSBEQ0RDNCBUaW1lb3V0cyAqLworCTB4MDAwNiwgICAgIC8qIFIxOTEgLSBEQ0RDNCBMb3cgUG93ZXIgKi8KKwkweDAwMDgsICAgICAvKiBSMTkyIC0gRENEQzUgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxOTMgLSBEQ0RDNSBUaW1lb3V0cyAqLworCTB4MDAwMCwgICAgIC8qIFIxOTQgKi8KKwkweDAwMjYsICAgICAvKiBSMTk1IC0gRENEQzYgQ29udHJvbCAqLworCTB4MEMwMCwgICAgIC8qIFIxOTYgLSBEQ0RDNiBUaW1lb3V0cyAqLworCTB4MDAwNiwgICAgIC8qIFIxOTcgLSBEQ0RDNiBMb3cgUG93ZXIgKi8KKwkweDAwMDAsICAgICAvKiBSMTk4ICovCisJMHgwMDAzLCAgICAgLyogUjE5OSAtIExpbWl0IFN3aXRjaCBDb250cm9sICovCisJMHgwMDFBLCAgICAgLyogUjIwMCAtIExETzEgQ29udHJvbCAqLworCTB4MDgwMCwgICAgIC8qIFIyMDEgLSBMRE8xIFRpbWVvdXRzICovCisJMHgwMDFDLCAgICAgLyogUjIwMiAtIExETzEgTG93IFBvd2VyICovCisJMHgwMDEwLCAgICAgLyogUjIwMyAtIExETzIgQ29udHJvbCAqLworCTB4MDgwMCwgICAgIC8qIFIyMDQgLSBMRE8yIFRpbWVvdXRzICovCisJMHgwMDFDLCAgICAgLyogUjIwNSAtIExETzIgTG93IFBvd2VyICovCisJMHgwMDBBLCAgICAgLyogUjIwNiAtIExETzMgQ29udHJvbCAqLworCTB4MEMwMCwgICAgIC8qIFIyMDcgLSBMRE8zIFRpbWVvdXRzICovCisJMHgwMDFDLCAgICAgLyogUjIwOCAtIExETzMgTG93IFBvd2VyICovCisJMHgwMDFBLCAgICAgLyogUjIwOSAtIExETzQgQ29udHJvbCAqLworCTB4MDgwMCwgICAgIC8qIFIyMTAgLSBMRE80IFRpbWVvdXRzICovCisJMHgwMDFDLCAgICAgLyogUjIxMSAtIExETzQgTG93IFBvd2VyICovCisJMHgwMDAwLCAgICAgLyogUjIxMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMTMgKi8KKwkweDAwMDAsICAgICAvKiBSMjE0ICovCisJMHgwMDAwLCAgICAgLyogUjIxNSAtIFZDQ19GQVVMVCBNYXNrcyAqLworCTB4MDAxRiwgICAgIC8qIFIyMTYgLSBNYWluIEJhbmRnYXAgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTcgLSBPU0MgQ29udHJvbCAqLworCTB4OTAwMCwgICAgIC8qIFIyMTggLSBSVEMgVGljayBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjIxOSAqLworCTB4NDAwMCwgICAgIC8qIFIyMjAgLSBSQU0gQklTVCAxICovCisJMHgwMDAwLCAgICAgLyogUjIyMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMjIgKi8KKwkweDAwMDAsICAgICAvKiBSMjIzICovCisJMHgwMDAwLCAgICAgLyogUjIyNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMjUgLSBEQ0RDL0xETyBzdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjI2ICovCisJMHgwMDAwLCAgICAgLyogUjIyNyAqLworCTB4MDAwMCwgICAgIC8qIFIyMjggKi8KKwkweDAwMDAsICAgICAvKiBSMjI5ICovCisJMHhFMDAwLCAgICAgLyogUjIzMCAtIEdQSU8gUGluIFN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIyMzEgKi8KKwkweDAwMDAsICAgICAvKiBSMjMyICovCisJMHgwMDAwLCAgICAgLyogUjIzMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMzQgKi8KKwkweDAwMDAsICAgICAvKiBSMjM1ICovCisJMHgwMDAwLCAgICAgLyogUjIzNiAqLworCTB4MDAwMCwgICAgIC8qIFIyMzcgKi8KKwkweDAwMDAsICAgICAvKiBSMjM4ICovCisJMHgwMDAwLCAgICAgLyogUjIzOSAqLworCTB4MDAwMCwgICAgIC8qIFIyNDAgKi8KKwkweDAwMDAsICAgICAvKiBSMjQxICovCisJMHgwMDAwLCAgICAgLyogUjI0MiAqLworCTB4MDAwMCwgICAgIC8qIFIyNDMgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ0ICovCisJMHgwMDAwLCAgICAgLyogUjI0NSAqLworCTB4MDAwMCwgICAgIC8qIFIyNDYgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ3ICovCisJMHgwMDAwLCAgICAgLyogUjI0OCAqLworCTB4MDAwMCwgICAgIC8qIFIyNDkgKi8KKwkweDAwMDAsICAgICAvKiBSMjUwICovCisJMHgwMDAwLCAgICAgLyogUjI1MSAqLworCTB4MDAwMCwgICAgIC8qIFIyNTIgKi8KKwkweDAwMDAsICAgICAvKiBSMjUzICovCisJMHgwMDAwLCAgICAgLyogUjI1NCAqLworCTB4MDAwMCwgICAgIC8qIFIyNTUgKi8KK307CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NRkRfV004MzUwX0NPTkZJR19NT0RFXzMKKworI3VuZGVmIFdNODM1MF9IQVZFX0NPTkZJR19NT0RFCisjZGVmaW5lIFdNODM1MF9IQVZFX0NPTkZJR19NT0RFCisKK2NvbnN0IHUxNiB3bTgzNTBfbW9kZTNfZGVmYXVsdHNbXSA9IHsKKwkweDE3RkYsICAgICAvKiBSMCAgIC0gUmVzZXQvSUQgKi8KKwkweDEwMDAsICAgICAvKiBSMSAgIC0gSUQgKi8KKwkweDAwMDAsICAgICAvKiBSMiAqLworCTB4MTAwMCwgICAgIC8qIFIzICAgLSBTeXN0ZW0gQ29udHJvbCAxICovCisJMHgwMDA0LCAgICAgLyogUjQgICAtIFN5c3RlbSBDb250cm9sIDIgKi8KKwkweDAwMDAsICAgICAvKiBSNSAgIC0gU3lzdGVtIEhpYmVybmF0ZSAqLworCTB4OEEwMCwgICAgIC8qIFI2ICAgLSBJbnRlcmZhY2UgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3ICovCisJMHg4MDAwLCAgICAgLyogUjggICAtIFBvd2VyIG1nbXQgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjkgICAtIFBvd2VyIG1nbXQgKDIpICovCisJMHgwMDAwLCAgICAgLyogUjEwICAtIFBvd2VyIG1nbXQgKDMpICovCisJMHgyMDAwLCAgICAgLyogUjExICAtIFBvd2VyIG1nbXQgKDQpICovCisJMHgwRTAwLCAgICAgLyogUjEyICAtIFBvd2VyIG1nbXQgKDUpICovCisJMHgwMDAwLCAgICAgLyogUjEzICAtIFBvd2VyIG1nbXQgKDYpICovCisJMHgwMDAwLCAgICAgLyogUjE0ICAtIFBvd2VyIG1nbXQgKDcpICovCisJMHgwMDAwLCAgICAgLyogUjE1ICovCisJMHgwMDAwLCAgICAgLyogUjE2ICAtIFJUQyBTZWNvbmRzL01pbnV0ZXMgKi8KKwkweDAxMDAsICAgICAvKiBSMTcgIC0gUlRDIEhvdXJzL0RheSAqLworCTB4MDEwMSwgICAgIC8qIFIxOCAgLSBSVEMgRGF0ZS9Nb250aCAqLworCTB4MTQwMCwgICAgIC8qIFIxOSAgLSBSVEMgWWVhciAqLworCTB4MDAwMCwgICAgIC8qIFIyMCAgLSBBbGFybSBTZWNvbmRzL01pbnV0ZXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjEgIC0gQWxhcm0gSG91cnMvRGF5ICovCisJMHgwMDAwLCAgICAgLyogUjIyICAtIEFsYXJtIERhdGUvTW9udGggKi8KKwkweDAzMjAsICAgICAvKiBSMjMgIC0gUlRDIFRpbWUgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIyNCAgLSBTeXN0ZW0gSW50ZXJydXB0cyAqLworCTB4MDAwMCwgICAgIC8qIFIyNSAgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgKi8KKwkweDAwMDAsICAgICAvKiBSMjYgIC0gSW50ZXJydXB0IFN0YXR1cyAyICovCisJMHgwMDAwLCAgICAgLyogUjI3ICAtIFBvd2VyIFVwIEludGVycnVwdCBTdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjggIC0gVW5kZXIgVm9sdGFnZSBJbnRlcnJ1cHQgc3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjI5ICAtIE92ZXIgQ3VycmVudCBJbnRlcnJ1cHQgc3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjMwICAtIEdQSU8gSW50ZXJydXB0IFN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIzMSAgLSBDb21wYXJhdG9yIEludGVycnVwdCBTdGF0dXMgKi8KKwkweDNGRkYsICAgICAvKiBSMzIgIC0gU3lzdGVtIEludGVycnVwdHMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzMyAgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzNCAgLSBJbnRlcnJ1cHQgU3RhdHVzIDIgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzNSAgLSBQb3dlciBVcCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzYgIC0gVW5kZXIgVm9sdGFnZSBJbnRlcnJ1cHQgc3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzcgIC0gT3ZlciBDdXJyZW50IEludGVycnVwdCBzdGF0dXMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzOCAgLSBHUElPIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzOSAgLSBDb21wYXJhdG9yIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCTB4MDA0MCwgICAgIC8qIFI0MCAgLSBDbG9jayBDb250cm9sIDEgKi8KKwkweDAwMDAsICAgICAvKiBSNDEgIC0gQ2xvY2sgQ29udHJvbCAyICovCisJMHgzQjAwLCAgICAgLyogUjQyICAtIEZMTCBDb250cm9sIDEgKi8KKwkweDcwODYsICAgICAvKiBSNDMgIC0gRkxMIENvbnRyb2wgMiAqLworCTB4QzIyNiwgICAgIC8qIFI0NCAgLSBGTEwgQ29udHJvbCAzICovCisJMHgwMDAwLCAgICAgLyogUjQ1ICAtIEZMTCBDb250cm9sIDQgKi8KKwkweDAwMDAsICAgICAvKiBSNDYgKi8KKwkweDAwMDAsICAgICAvKiBSNDcgKi8KKwkweDAwMDAsICAgICAvKiBSNDggIC0gREFDIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNDkgKi8KKwkweDAwQzAsICAgICAvKiBSNTAgIC0gREFDIERpZ2l0YWwgVm9sdW1lIEwgKi8KKwkweDAwQzAsICAgICAvKiBSNTEgIC0gREFDIERpZ2l0YWwgVm9sdW1lIFIgKi8KKwkweDAwMDAsICAgICAvKiBSNTIgKi8KKwkweDAwNDAsICAgICAvKiBSNTMgIC0gREFDIExSIFJhdGUgKi8KKwkweDAwMDAsICAgICAvKiBSNTQgIC0gREFDIENsb2NrIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNTUgKi8KKwkweDAwMDAsICAgICAvKiBSNTYgKi8KKwkweDAwMDAsICAgICAvKiBSNTcgKi8KKwkweDQwMDAsICAgICAvKiBSNTggIC0gREFDIE11dGUgKi8KKwkweDAwMDAsICAgICAvKiBSNTkgIC0gREFDIE11dGUgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjYwICAtIERBQyBTaWRlICovCisJMHgwMDAwLCAgICAgLyogUjYxICovCisJMHgwMDAwLCAgICAgLyogUjYyICovCisJMHgwMDAwLCAgICAgLyogUjYzICovCisJMHg4MDAwLCAgICAgLyogUjY0ICAtIEFEQyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjY1ICovCisJMHgwMEMwLCAgICAgLyogUjY2ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBMICovCisJMHgwMEMwLCAgICAgLyogUjY3ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBSICovCisJMHgwMDAwLCAgICAgLyogUjY4ICAtIEFEQyBEaXZpZGVyICovCisJMHgwMDAwLCAgICAgLyogUjY5ICovCisJMHgwMDQwLCAgICAgLyogUjcwICAtIEFEQyBMUiBSYXRlICovCisJMHgwMDAwLCAgICAgLyogUjcxICovCisJMHgwMzAzLCAgICAgLyogUjcyICAtIElucHV0IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzMgIC0gSU4zIElucHV0IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzQgIC0gTWljIEJpYXMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3NSAqLworCTB4MDAwMCwgICAgIC8qIFI3NiAgLSBPdXRwdXQgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3NyAgLSBKYWNrIERldGVjdCAqLworCTB4MDAwMCwgICAgIC8qIFI3OCAgLSBBbnRpIFBvcCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjc5ICovCisJMHgwMDQwLCAgICAgLyogUjgwICAtIExlZnQgSW5wdXQgVm9sdW1lICovCisJMHgwMDQwLCAgICAgLyogUjgxICAtIFJpZ2h0IElucHV0IFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI4MiAqLworCTB4MDAwMCwgICAgIC8qIFI4MyAqLworCTB4MDAwMCwgICAgIC8qIFI4NCAqLworCTB4MDAwMCwgICAgIC8qIFI4NSAqLworCTB4MDAwMCwgICAgIC8qIFI4NiAqLworCTB4MDAwMCwgICAgIC8qIFI4NyAqLworCTB4MDgwMCwgICAgIC8qIFI4OCAgLSBMZWZ0IE1peGVyIENvbnRyb2wgKi8KKwkweDEwMDAsICAgICAvKiBSODkgIC0gUmlnaHQgTWl4ZXIgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI5MCAqLworCTB4MDAwMCwgICAgIC8qIFI5MSAqLworCTB4MDAwMCwgICAgIC8qIFI5MiAgLSBPVVQzIE1peGVyIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSOTMgIC0gT1VUNCBNaXhlciBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjk0ICovCisJMHgwMDAwLCAgICAgLyogUjk1ICovCisJMHgwMDAwLCAgICAgLyogUjk2ICAtIE91dHB1dCBMZWZ0IE1peGVyIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI5NyAgLSBPdXRwdXQgUmlnaHQgTWl4ZXIgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjk4ICAtIElucHV0IE1peGVyIFZvbHVtZSBMICovCisJMHgwMDAwLCAgICAgLyogUjk5ICAtIElucHV0IE1peGVyIFZvbHVtZSBSICovCisJMHgwMDAwLCAgICAgLyogUjEwMCAtIElucHV0IE1peGVyIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTAyICovCisJMHgwMDAwLCAgICAgLyogUjEwMyAqLworCTB4MDBFNCwgICAgIC8qIFIxMDQgLSBMT1VUMSBWb2x1bWUgKi8KKwkweDAwRTQsICAgICAvKiBSMTA1IC0gUk9VVDEgVm9sdW1lICovCisJMHgwMEU0LCAgICAgLyogUjEwNiAtIExPVVQyIFZvbHVtZSAqLworCTB4MDJFNCwgICAgIC8qIFIxMDcgLSBST1VUMiBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSMTA4ICovCisJMHgwMDAwLCAgICAgLyogUjEwOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTExIC0gQkVFUCBWb2x1bWUgKi8KKwkweDBBMDAsICAgICAvKiBSMTEyIC0gQUkgRm9ybWF0aW5nICovCisJMHgwMDAwLCAgICAgLyogUjExMyAtIEFEQyBEQUMgQ09NUCAqLworCTB4MDAyMCwgICAgIC8qIFIxMTQgLSBBSSBBREMgQ29udHJvbCAqLworCTB4MDAyMCwgICAgIC8qIFIxMTUgLSBBSSBEQUMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTYgLSBBSUYgVGVzdCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTE4ICovCisJMHgwMDAwLCAgICAgLyogUjExOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjAgKi8KKwkweDAwMDAsICAgICAvKiBSMTIxICovCisJMHgwMDAwLCAgICAgLyogUjEyMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMjMgKi8KKwkweDAwMDAsICAgICAvKiBSMTI0ICovCisJMHgwMDAwLCAgICAgLyogUjEyNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjYgKi8KKwkweDAwMDAsICAgICAvKiBSMTI3ICovCisJMHgxRkZGLCAgICAgLyogUjEyOCAtIEdQSU8gRGVib3VuY2UgKi8KKwkweDAwMDAsICAgICAvKiBSMTI5IC0gR1BJTyBQaW4gcHVsbCB1cCBDb250cm9sICovCisJMHgwM0ZDLCAgICAgLyogUjEzMCAtIEdQSU8gUHVsbCBkb3duIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTMxIC0gR1BJTyBJbnRlcnJ1cHQgTW9kZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzIgKi8KKwkweDAwMDAsICAgICAvKiBSMTMzIC0gR1BJTyBDb250cm9sICovCisJMHgwQTdCLCAgICAgLyogUjEzNCAtIEdQSU8gQ29uZmlndXJhdGlvbiAoaS9vKSAqLworCTB4MDZGRSwgICAgIC8qIFIxMzUgLSBHUElPIFBpbiBQb2xhcml0eSAvIFR5cGUgKi8KKwkweDAwMDAsICAgICAvKiBSMTM2ICovCisJMHgwMDAwLCAgICAgLyogUjEzNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMzggKi8KKwkweDAwMDAsICAgICAvKiBSMTM5ICovCisJMHgxMzEyLCAgICAgLyogUjE0MCAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDEgKi8KKwkweDEwMzAsICAgICAvKiBSMTQxIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMiAqLworCTB4MjIzMSwgICAgIC8qIFIxNDIgLSBHUElPIEZ1bmN0aW9uIFNlbGVjdCAzICovCisJMHgwMDAzLCAgICAgLyogUjE0MyAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDQgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ0IC0gRGlnaXRpc2VyIENvbnRyb2wgKDEpICovCisJMHgwMDAyLCAgICAgLyogUjE0NSAtIERpZ2l0aXNlciBDb250cm9sICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDYgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ3ICovCisJMHgwMDAwLCAgICAgLyogUjE0OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDkgKi8KKwkweDAwMDAsICAgICAvKiBSMTUwICovCisJMHgwMDAwLCAgICAgLyogUjE1MSAqLworCTB4NzAwMCwgICAgIC8qIFIxNTIgLSBBVVgxIFJlYWRiYWNrICovCisJMHg3MDAwLCAgICAgLyogUjE1MyAtIEFVWDIgUmVhZGJhY2sgKi8KKwkweDcwMDAsICAgICAvKiBSMTU0IC0gQVVYMyBSZWFkYmFjayAqLworCTB4NzAwMCwgICAgIC8qIFIxNTUgLSBBVVg0IFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE1NiAtIFVTQiBWb2x0YWdlIFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE1NyAtIExJTkUgVm9sdGFnZSBSZWFkYmFjayAqLworCTB4MDAwMCwgICAgIC8qIFIxNTggLSBCQVRUIFZvbHRhZ2UgUmVhZGJhY2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTU5IC0gQ2hpcCBUZW1wIFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE2MCAqLworCTB4MDAwMCwgICAgIC8qIFIxNjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTYyICovCisJMHgwMDAwLCAgICAgLyogUjE2MyAtIEdlbmVyaWMgQ29tcGFyYXRvciBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE2NCAtIEdlbmVyaWMgY29tcGFyYXRvciAxICovCisJMHgwMDAwLCAgICAgLyogUjE2NSAtIEdlbmVyaWMgY29tcGFyYXRvciAyICovCisJMHgwMDAwLCAgICAgLyogUjE2NiAtIEdlbmVyaWMgY29tcGFyYXRvciAzICovCisJMHgwMDAwLCAgICAgLyogUjE2NyAtIEdlbmVyaWMgY29tcGFyYXRvciA0ICovCisJMHhBMDBGLCAgICAgLyogUjE2OCAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDEgKi8KKwkweDBCMDYsICAgICAvKiBSMTY5IC0gQmF0dGVyeSBDaGFyZ2VyIENvbnRyb2wgMiAqLworCTB4MDAwMCwgICAgIC8qIFIxNzAgLSBCYXR0ZXJ5IENoYXJnZXIgQ29udHJvbCAzICovCisJMHgwMDAwLCAgICAgLyogUjE3MSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzIgLSBDdXJyZW50IFNpbmsgRHJpdmVyIEEgKi8KKwkweDAwMDAsICAgICAvKiBSMTczIC0gQ1NBIEZsYXNoIGNvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTc0IC0gQ3VycmVudCBTaW5rIERyaXZlciBCICovCisJMHgwMDAwLCAgICAgLyogUjE3NSAtIENTQiBGbGFzaCBjb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE3NiAtIERDREMvTERPIHJlcXVlc3RlZCAqLworCTB4MDAyRCwgICAgIC8qIFIxNzcgLSBEQ0RDIEFjdGl2ZSBvcHRpb25zICovCisJMHgwMDAwLCAgICAgLyogUjE3OCAtIERDREMgU2xlZXAgb3B0aW9ucyAqLworCTB4MDAyNSwgICAgIC8qIFIxNzkgLSBQb3dlci1jaGVjayBjb21wYXJhdG9yICovCisJMHgwMDBFLCAgICAgLyogUjE4MCAtIERDREMxIENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMTgxIC0gRENEQzEgVGltZW91dHMgKi8KKwkweDEwMDYsICAgICAvKiBSMTgyIC0gRENEQzEgTG93IFBvd2VyICovCisJMHgwMDE4LCAgICAgLyogUjE4MyAtIERDREMyIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTg0IC0gRENEQzIgVGltZW91dHMgKi8KKwkweDAwMDAsICAgICAvKiBSMTg1ICovCisJMHgwMDBFLCAgICAgLyogUjE4NiAtIERDREMzIENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMTg3IC0gRENEQzMgVGltZW91dHMgKi8KKwkweDAwMDYsICAgICAvKiBSMTg4IC0gRENEQzMgTG93IFBvd2VyICovCisJMHgwMDI2LCAgICAgLyogUjE4OSAtIERDREM0IENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMTkwIC0gRENEQzQgVGltZW91dHMgKi8KKwkweDAwMDYsICAgICAvKiBSMTkxIC0gRENEQzQgTG93IFBvd2VyICovCisJMHgwMDA4LCAgICAgLyogUjE5MiAtIERDREM1IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTkzIC0gRENEQzUgVGltZW91dHMgKi8KKwkweDAwMDAsICAgICAvKiBSMTk0ICovCisJMHgwMDI2LCAgICAgLyogUjE5NSAtIERDREM2IENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMTk2IC0gRENEQzYgVGltZW91dHMgKi8KKwkweDAwMDYsICAgICAvKiBSMTk3IC0gRENEQzYgTG93IFBvd2VyICovCisJMHgwMDAwLCAgICAgLyogUjE5OCAqLworCTB4MDAwMywgICAgIC8qIFIxOTkgLSBMaW1pdCBTd2l0Y2ggQ29udHJvbCAqLworCTB4MDAxQywgICAgIC8qIFIyMDAgLSBMRE8xIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjAxIC0gTERPMSBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMDIgLSBMRE8xIExvdyBQb3dlciAqLworCTB4MDAxQywgICAgIC8qIFIyMDMgLSBMRE8yIENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMjA0IC0gTERPMiBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMDUgLSBMRE8yIExvdyBQb3dlciAqLworCTB4MDAxQywgICAgIC8qIFIyMDYgLSBMRE8zIENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMjA3IC0gTERPMyBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMDggLSBMRE8zIExvdyBQb3dlciAqLworCTB4MDAxRiwgICAgIC8qIFIyMDkgLSBMRE80IENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMjEwIC0gTERPNCBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMTEgLSBMRE80IExvdyBQb3dlciAqLworCTB4MDAwMCwgICAgIC8qIFIyMTIgKi8KKwkweDAwMDAsICAgICAvKiBSMjEzICovCisJMHgwMDAwLCAgICAgLyogUjIxNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTUgLSBWQ0NfRkFVTFQgTWFza3MgKi8KKwkweDAwMUYsICAgICAvKiBSMjE2IC0gTWFpbiBCYW5kZ2FwIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjE3IC0gT1NDIENvbnRyb2wgKi8KKwkweDkwMDAsICAgICAvKiBSMjE4IC0gUlRDIFRpY2sgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTkgKi8KKwkweDQwMDAsICAgICAvKiBSMjIwIC0gUkFNIEJJU1QgMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMjEgKi8KKwkweDAwMDAsICAgICAvKiBSMjIyICovCisJMHgwMDAwLCAgICAgLyogUjIyMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMjQgKi8KKwkweDAwMDAsICAgICAvKiBSMjI1IC0gRENEQy9MRE8gc3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjIyNiAqLworCTB4MDAwMCwgICAgIC8qIFIyMjcgKi8KKwkweDAwMDAsICAgICAvKiBSMjI4ICovCisJMHgwMDAwLCAgICAgLyogUjIyOSAqLworCTB4RTAwMCwgICAgIC8qIFIyMzAgLSBHUElPIFBpbiBTdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjMxICovCisJMHgwMDAwLCAgICAgLyogUjIzMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMzMgKi8KKwkweDAwMDAsICAgICAvKiBSMjM0ICovCisJMHgwMDAwLCAgICAgLyogUjIzNSAqLworCTB4MDAwMCwgICAgIC8qIFIyMzYgKi8KKwkweDAwMDAsICAgICAvKiBSMjM3ICovCisJMHgwMDAwLCAgICAgLyogUjIzOCAqLworCTB4MDAwMCwgICAgIC8qIFIyMzkgKi8KKwkweDAwMDAsICAgICAvKiBSMjQwICovCisJMHgwMDAwLCAgICAgLyogUjI0MSAqLworCTB4MDAwMCwgICAgIC8qIFIyNDIgKi8KKwkweDAwMDAsICAgICAvKiBSMjQzICovCisJMHgwMDAwLCAgICAgLyogUjI0NCAqLworCTB4MDAwMCwgICAgIC8qIFIyNDUgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ2ICovCisJMHgwMDAwLCAgICAgLyogUjI0NyAqLworCTB4MDAwMCwgICAgIC8qIFIyNDggKi8KKwkweDAwMDAsICAgICAvKiBSMjQ5ICovCisJMHgwMDAwLCAgICAgLyogUjI1MCAqLworCTB4MDAwMCwgICAgIC8qIFIyNTEgKi8KKwkweDAwMDAsICAgICAvKiBSMjUyICovCisJMHgwMDAwLCAgICAgLyogUjI1MyAqLworCTB4MDAwMCwgICAgIC8qIFIyNTQgKi8KKwkweDAwMDAsICAgICAvKiBSMjU1ICovCit9OworI2VuZGlmCisKKy8qIFRoZSByZWdpc3RlciBkZWZhdWx0cyBmb3IgdGhlIGNvbmZpZyBtb2RlIHVzZWQgbXVzdCBiZSBjb21waWxlZCBpbiBidXQKKyAqIGR1ZSB0byB0aGUgaW1wYWN0IG9uIGtlcm5lbCBzaXplIGl0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUKKyAqLworI2lmbmRlZiBXTTgzNTBfSEFWRV9DT05GSUdfTU9ERQorI3dhcm5pbmcgTm8gV004MzUwIGNvbmZpZyBtb2RlcyBzdXBwb3J0ZWQgLSBzZWxlY3QgYXQgbGVhc3Qgb25lIG9mIHRoZQorI3dhcm5pbmcgTUZEX1dNODM1MF9DT05GSUdfTU9ERV9uIG9wdGlvbnMgZnJvbSB0aGUgYm9hcmQgZHJpdmVyLgorI2VuZGlmCisKKy8qCisgKiBBY2Nlc3MgbWFza3MuCisgKi8KKworY29uc3Qgc3RydWN0IHdtODM1MF9yZWdfYWNjZXNzIHdtODM1MF9yZWdfaW9fbWFwW10gPSB7CisJLyogIHJlYWQgICAgd3JpdGUgdm9sYXRpbGUgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweEZGRkYgfSwgLyogUjAgICAtIFJlc2V0L0lEICovCisJeyAweDdDRkYsIDB4MEMwMCwgMHg3RkZGIH0sIC8qIFIxICAgLSBJRCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMiAqLworCXsgMHhCRTNCLCAweEJFM0IsIDB4ODAwMCB9LCAvKiBSMyAgIC0gU3lzdGVtIENvbnRyb2wgMSAqLworCXsgMHhGQ0Y3LCAweEZDRjcsIDB4RjgwMCB9LCAvKiBSNCAgIC0gU3lzdGVtIENvbnRyb2wgMiAqLworCXsgMHg4MEZGLCAweDgwRkYsIDB4ODAwMCB9LCAvKiBSNSAgIC0gU3lzdGVtIEhpYmVybmF0ZSAqLworCXsgMHhGQjBFLCAweEZCMEUsIDB4MDAwMCB9LCAvKiBSNiAgIC0gSW50ZXJmYWNlIENvbnRyb2wgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcgKi8KKwl7IDB4RTUzNywgMHhFNTM3LCAweEZGRkYgfSwgLyogUjggICAtIFBvd2VyIG1nbXQgKDEpICovCisJeyAweDBGRjMsIDB4MEZGMywgMHhGRkZGIH0sIC8qIFI5ICAgLSBQb3dlciBtZ210ICgyKSAqLworCXsgMHgwMDhGLCAweDAwOEYsIDB4RkZGRiB9LCAvKiBSMTAgIC0gUG93ZXIgbWdtdCAoMykgKi8KKwl7IDB4NkQzQywgMHg2RDNDLCAweEZGRkYgfSwgLyogUjExICAtIFBvd2VyIG1nbXQgKDQpICovCisJeyAweDFGOEYsIDB4MUY4RiwgMHhGRkZGIH0sIC8qIFIxMiAgLSBQb3dlciBtZ210ICg1KSAqLworCXsgMHg4RjNGLCAweDhGM0YsIDB4RkZGRiB9LCAvKiBSMTMgIC0gUG93ZXIgbWdtdCAoNikgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweEZGRkYgfSwgLyogUjE0ICAtIFBvd2VyIG1nbXQgKDcpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNSAqLworCXsgMHg3RjdGLCAweDdGN0YsIDB4RkZGRiB9LCAvKiBSMTYgIC0gUlRDIFNlY29uZHMvTWludXRlcyAqLworCXsgMHgwNzNGLCAweDA3M0YsIDB4RkZGRiB9LCAvKiBSMTcgIC0gUlRDIEhvdXJzL0RheSAqLworCXsgMHgxRjNGLCAweDFGM0YsIDB4RkZGRiB9LCAvKiBSMTggIC0gUlRDIERhdGUvTW9udGggKi8KKwl7IDB4M0ZGRiwgMHgwMEZGLCAweEZGRkYgfSwgLyogUjE5ICAtIFJUQyBZZWFyICovCisJeyAweDdGN0YsIDB4N0Y3RiwgMHgwMDAwIH0sIC8qIFIyMCAgLSBBbGFybSBTZWNvbmRzL01pbnV0ZXMgKi8KKwl7IDB4MEYzRiwgMHgwRjNGLCAweDAwMDAgfSwgLyogUjIxICAtIEFsYXJtIEhvdXJzL0RheSAqLworCXsgMHgxRjNGLCAweDFGM0YsIDB4MDAwMCB9LCAvKiBSMjIgIC0gQWxhcm0gRGF0ZS9Nb250aCAqLworCXsgMHhFRjdGLCAweEVBN0YsIDB4RkZGRiB9LCAvKiBSMjMgIC0gUlRDIFRpbWUgQ29udHJvbCAqLworCXsgMHgzQkZGLCAweDAwMDAsIDB4RkZGRiB9LCAvKiBSMjQgIC0gU3lzdGVtIEludGVycnVwdHMgKi8KKwl7IDB4RkVFNywgMHgwMDAwLCAweEZGRkYgfSwgLyogUjI1ICAtIEludGVycnVwdCBTdGF0dXMgMSAqLworCXsgMHgzNUZGLCAweDAwMDAsIDB4RkZGRiB9LCAvKiBSMjYgIC0gSW50ZXJydXB0IFN0YXR1cyAyICovCisJeyAweDBGM0YsIDB4MDAwMCwgMHhGRkZGIH0sIC8qIFIyNyAgLSBQb3dlciBVcCBJbnRlcnJ1cHQgU3RhdHVzICovCisJeyAweDBGM0YsIDB4MDAwMCwgMHhGRkZGIH0sIC8qIFIyOCAgLSBVbmRlciBWb2x0YWdlIEludGVycnVwdCBzdGF0dXMgKi8KKwl7IDB4ODAwMCwgMHgwMDAwLCAweEZGRkYgfSwgLyogUjI5ICAtIE92ZXIgQ3VycmVudCBJbnRlcnJ1cHQgc3RhdHVzICovCisJeyAweDFGRkYsIDB4MDAwMCwgMHhGRkZGIH0sIC8qIFIzMCAgLSBHUElPIEludGVycnVwdCBTdGF0dXMgKi8KKwl7IDB4RUY3RiwgMHgwMDAwLCAweEZGRkYgfSwgLyogUjMxICAtIENvbXBhcmF0b3IgSW50ZXJydXB0IFN0YXR1cyAqLworCXsgMHgzRkZGLCAweDNGRkYsIDB4MDAwMCB9LCAvKiBSMzIgIC0gU3lzdGVtIEludGVycnVwdHMgTWFzayAqLworCXsgMHhGRUU3LCAweEZFRTcsIDB4MDAwMCB9LCAvKiBSMzMgIC0gSW50ZXJydXB0IFN0YXR1cyAxIE1hc2sgKi8KKwl7IDB4RjVGRiwgMHhGNUZGLCAweDAwMDAgfSwgLyogUjM0ICAtIEludGVycnVwdCBTdGF0dXMgMiBNYXNrICovCisJeyAweDBGM0YsIDB4MEYzRiwgMHgwMDAwIH0sIC8qIFIzNSAgLSBQb3dlciBVcCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgKi8KKwl7IDB4MEYzRiwgMHgwRjNGLCAweDAwMDAgfSwgLyogUjM2ICAtIFVuZGVyIFZvbHRhZ2UgSW50IHN0YXR1cyBNYXNrICovCisJeyAweDgwMDAsIDB4ODAwMCwgMHgwMDAwIH0sIC8qIFIzNyAgLSBPdmVyIEN1cnJlbnQgSW50IHN0YXR1cyBNYXNrICovCisJeyAweDFGRkYsIDB4MUZGRiwgMHgwMDAwIH0sIC8qIFIzOCAgLSBHUElPIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCXsgMHhFRjdGLCAweEVGN0YsIDB4MDAwMCB9LCAvKiBSMzkgIC0gQ29tcGFyYXRvciBJbnRTdGF0dXMgTWFzayAqLworCXsgMHhDOUY3LCAweEM5RjcsIDB4RkZGRiB9LCAvKiBSNDAgIC0gQ2xvY2sgQ29udHJvbCAxICovCisJeyAweDgwMDEsIDB4ODAwMSwgMHgwMDAwIH0sIC8qIFI0MSAgLSBDbG9jayBDb250cm9sIDIgKi8KKwl7IDB4RkZGNywgMHhGRkY3LCAweEZGRkYgfSwgLyogUjQyICAtIEZMTCBDb250cm9sIDEgKi8KKwl7IDB4RkJGRiwgMHhGQkZGLCAweDAwMDAgfSwgLyogUjQzICAtIEZMTCBDb250cm9sIDIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjQ0ICAtIEZMTCBDb250cm9sIDMgKi8KKwl7IDB4MDAzMywgMHgwMDMzLCAweDAwMDAgfSwgLyogUjQ1ICAtIEZMTCBDb250cm9sIDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NyAqLworCXsgMHgzMDMzLCAweDMwMzMsIDB4MDAwMCB9LCAvKiBSNDggIC0gREFDIENvbnRyb2wgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5ICovCisJeyAweDgxRkYsIDB4ODFGRiwgMHhGRkZGIH0sIC8qIFI1MCAgLSBEQUMgRGlnaXRhbCBWb2x1bWUgTCAqLworCXsgMHg4MUZGLCAweDgxRkYsIDB4RkZGRiB9LCAvKiBSNTEgIC0gREFDIERpZ2l0YWwgVm9sdW1lIFIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUyICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHhGRkZGIH0sIC8qIFI1MyAgLSBEQUMgTFIgUmF0ZSAqLworCXsgMHgwMDE3LCAweDAwMTcsIDB4MDAwMCB9LCAvKiBSNTQgIC0gREFDIENsb2NrIENvbnRyb2wgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTcgKi8KKwl7IDB4NDAwMCwgMHg0MDAwLCAweDAwMDAgfSwgLyogUjU4ICAtIERBQyBNdXRlICovCisJeyAweDcwMDAsIDB4NzAwMCwgMHgwMDAwIH0sIC8qIFI1OSAgLSBEQUMgTXV0ZSBWb2x1bWUgKi8KKwl7IDB4M0MwMCwgMHgzQzAwLCAweDAwMDAgfSwgLyogUjYwICAtIERBQyBTaWRlICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzICovCisJeyAweDgzMDMsIDB4ODMwMywgMHhGRkZGIH0sIC8qIFI2NCAgLSBBREMgQ29udHJvbCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjUgKi8KKwl7IDB4ODFGRiwgMHg4MUZGLCAweEZGRkYgfSwgLyogUjY2ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBMICovCisJeyAweDgxRkYsIDB4ODFGRiwgMHhGRkZGIH0sIC8qIFI2NyAgLSBBREMgRGlnaXRhbCBWb2x1bWUgUiAqLworCXsgMHgwRkZGLCAweDBGRkYsIDB4MDAwMCB9LCAvKiBSNjggIC0gQURDIERpdmlkZXIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5ICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHhGRkZGIH0sIC8qIFI3MCAgLSBBREMgTFIgUmF0ZSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzEgKi8KKwl7IDB4MDcwNywgMHgwNzA3LCAweEZGRkYgfSwgLyogUjcyICAtIElucHV0IENvbnRyb2wgKi8KKwl7IDB4QzBDMCwgMHhDMEMwLCAweEZGRkYgfSwgLyogUjczICAtIElOMyBJbnB1dCBDb250cm9sICovCisJeyAweEMwOUYsIDB4QzA5RiwgMHhGRkZGIH0sIC8qIFI3NCAgLSBNaWMgQmlhcyBDb250cm9sICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NSAqLworCXsgMHgwRjE1LCAweDBGMTUsIDB4RkZGRiB9LCAvKiBSNzYgIC0gT3V0cHV0IENvbnRyb2wgKi8KKwl7IDB4QzAwMCwgMHhDMDAwLCAweEZGRkYgfSwgLyogUjc3ICAtIEphY2sgRGV0ZWN0ICovCisJeyAweDAzRkYsIDB4MDNGRiwgMHgwMDAwIH0sIC8qIFI3OCAgLSBBbnRpIFBvcCBDb250cm9sICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OSAqLworCXsgMHhFMUZDLCAweEUxRkMsIDB4ODAwMCB9LCAvKiBSODAgIC0gTGVmdCBJbnB1dCBWb2x1bWUgKi8KKwl7IDB4RTFGQywgMHhFMUZDLCAweDgwMDAgfSwgLyogUjgxICAtIFJpZ2h0IElucHV0IFZvbHVtZSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NyAqLworCXsgMHg5ODA3LCAweDk4MDcsIDB4RkZGRiB9LCAvKiBSODggIC0gTGVmdCBNaXhlciBDb250cm9sICovCisJeyAweDk4MEIsIDB4OTgwQiwgMHhGRkZGIH0sIC8qIFI4OSAgLSBSaWdodCBNaXhlciBDb250cm9sICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTEgKi8KKwl7IDB4ODkwOSwgMHg4OTA5LCAweEZGRkYgfSwgLyogUjkyICAtIE9VVDMgTWl4ZXIgQ29udHJvbCAqLworCXsgMHg5RTA3LCAweDlFMDcsIDB4RkZGRiB9LCAvKiBSOTMgIC0gT1VUNCBNaXhlciBDb250cm9sICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTUgKi8KKwl7IDB4MEVFRSwgMHgwRUVFLCAweDAwMDAgfSwgLyogUjk2ICAtIE91dHB1dCBMZWZ0IE1peGVyIFZvbHVtZSAqLworCXsgMHhFMEVFLCAweEUwRUUsIDB4MDAwMCB9LCAvKiBSOTcgIC0gT3V0cHV0IFJpZ2h0IE1peGVyIFZvbHVtZSAqLworCXsgMHgwRTBGLCAweDBFMEYsIDB4MDAwMCB9LCAvKiBSOTggIC0gSW5wdXQgTWl4ZXIgVm9sdW1lIEwgKi8KKwl7IDB4RTBFMSwgMHhFMEUxLCAweDAwMDAgfSwgLyogUjk5ICAtIElucHV0IE1peGVyIFZvbHVtZSBSICovCisJeyAweDgwMEUsIDB4ODAwRSwgMHgwMDAwIH0sIC8qIFIxMDAgLSBJbnB1dCBNaXhlciBWb2x1bWUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDMgKi8KKwl7IDB4RTFGQywgMHhFMUZDLCAweEZGRkYgfSwgLyogUjEwNCAtIExPVVQxIFZvbHVtZSAqLworCXsgMHhFMUZDLCAweEUxRkMsIDB4RkZGRiB9LCAvKiBSMTA1IC0gUk9VVDEgVm9sdW1lICovCisJeyAweEUxRkMsIDB4RTFGQywgMHhGRkZGIH0sIC8qIFIxMDYgLSBMT1VUMiBWb2x1bWUgKi8KKwl7IDB4RTdGQywgMHhFN0ZDLCAweEZGRkYgfSwgLyogUjEwNyAtIFJPVVQyIFZvbHVtZSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMCAqLworCXsgMHg4MEUwLCAweDgwRTAsIDB4RkZGRiB9LCAvKiBSMTExIC0gQkVFUCBWb2x1bWUgKi8KKwl7IDB4QkYwMCwgMHhCRjAwLCAweDAwMDAgfSwgLyogUjExMiAtIEFJIEZvcm1hdGluZyAqLworCXsgMHgwMEYxLCAweDAwRjEsIDB4MDAwMCB9LCAvKiBSMTEzIC0gQURDIERBQyBDT01QICovCisJeyAweDAwRjgsIDB4MDBGOCwgMHgwMDAwIH0sIC8qIFIxMTQgLSBBSSBBREMgQ29udHJvbCAqLworCXsgMHg0MEZCLCAweDQwRkIsIDB4MDAwMCB9LCAvKiBSMTE1IC0gQUkgREFDIENvbnRyb2wgKi8KKwl7IDB4N0MzMCwgMHg3QzMwLCAweDAwMDAgfSwgLyogUjExNiAtIEFJRiBUZXN0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNyAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCB9LCAvKiBSMTI4IC0gR1BJTyBEZWJvdW5jZSAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCB9LCAvKiBSMTI5IC0gR1BJTyBQaW4gcHVsbCB1cCBDb250cm9sICovCisJeyAweDFGRkYsIDB4MUZGRiwgMHgwMDAwIH0sIC8qIFIxMzAgLSBHUElPIFB1bGwgZG93biBDb250cm9sICovCisJeyAweDFGRkYsIDB4MUZGRiwgMHgwMDAwIH0sIC8qIFIxMzEgLSBHUElPIEludGVycnVwdCBNb2RlICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIgKi8KKwl7IDB4MDBDMCwgMHgwMEMwLCAweDAwMDAgfSwgLyogUjEzMyAtIEdQSU8gQ29udHJvbCAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCB9LCAvKiBSMTM0IC0gR1BJTyBDb25maWd1cmF0aW9uIChpL28pICovCisJeyAweDFGRkYsIDB4MUZGRiwgMHgwMDAwIH0sIC8qIFIxMzUgLSBHUElPIFBpbiBQb2xhcml0eSAvIFR5cGUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQwIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQyIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMyAqLworCXsgMHgwMDBGLCAweDAwMEYsIDB4MDAwMCB9LCAvKiBSMTQzIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgNCAqLworCXsgMHhGMEZGLCAweEYwRkYsIDB4QTAwMCB9LCAvKiBSMTQ0IC0gRGlnaXRpc2VyIENvbnRyb2wgKDEpICovCisJeyAweDM3MDcsIDB4MzcwNywgMHgwMDAwIH0sIC8qIFIxNDUgLSBEaWdpdGlzZXIgQ29udHJvbCAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTEgKi8KKwl7IDB4N0ZGRiwgMHg3MDAwLCAweEZGRkYgfSwgLyogUjE1MiAtIEFVWDEgUmVhZGJhY2sgKi8KKwl7IDB4N0ZGRiwgMHg3MDAwLCAweEZGRkYgfSwgLyogUjE1MyAtIEFVWDIgUmVhZGJhY2sgKi8KKwl7IDB4N0ZGRiwgMHg3MDAwLCAweEZGRkYgfSwgLyogUjE1NCAtIEFVWDMgUmVhZGJhY2sgKi8KKwl7IDB4N0ZGRiwgMHg3MDAwLCAweEZGRkYgfSwgLyogUjE1NSAtIEFVWDQgUmVhZGJhY2sgKi8KKwl7IDB4MEZGRiwgMHgwMDAwLCAweEZGRkYgfSwgLyogUjE1NiAtIFVTQiBWb2x0YWdlIFJlYWRiYWNrICovCisJeyAweDBGRkYsIDB4MDAwMCwgMHhGRkZGIH0sIC8qIFIxNTcgLSBMSU5FIFZvbHRhZ2UgUmVhZGJhY2sgKi8KKwl7IDB4MEZGRiwgMHgwMDAwLCAweEZGRkYgfSwgLyogUjE1OCAtIEJBVFQgVm9sdGFnZSBSZWFkYmFjayAqLworCXsgMHgwRkZGLCAweDAwMDAsIDB4RkZGRiB9LCAvKiBSMTU5IC0gQ2hpcCBUZW1wIFJlYWRiYWNrICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTYyICovCisJeyAweDAwMEYsIDB4MDAwRiwgMHgwMDAwIH0sIC8qIFIxNjMgLSBHZW5lcmljIENvbXBhcmF0b3IgQ29udHJvbCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTY0IC0gR2VuZXJpYyBjb21wYXJhdG9yIDEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE2NSAtIEdlbmVyaWMgY29tcGFyYXRvciAyICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNjYgLSBHZW5lcmljIGNvbXBhcmF0b3IgMyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTY3IC0gR2VuZXJpYyBjb21wYXJhdG9yIDQgKi8KKwl7IDB4QkZGRiwgMHhCRkZGLCAweDgwMDAgfSwgLyogUjE2OCAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDEgKi8KKwl7IDB4RkZGRiwgMHg0RkZGLCAweEIwMDAgfSwgLyogUjE2OSAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDIgKi8KKwl7IDB4MDA3RiwgMHgwMDdGLCAweDAwMDAgfSwgLyogUjE3MCAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3MSAqLworCXsgMHg5MDNGLCAweDkwM0YsIDB4RkZGRiB9LCAvKiBSMTcyIC0gQ3VycmVudCBTaW5rIERyaXZlciBBICovCisJeyAweEUzMzMsIDB4RTMzMywgMHhGRkZGIH0sIC8qIFIxNzMgLSBDU0EgRmxhc2ggY29udHJvbCAqLworCXsgMHg5MDNGLCAweDkwM0YsIDB4RkZGRiB9LCAvKiBSMTc0IC0gQ3VycmVudCBTaW5rIERyaXZlciBCICovCisJeyAweEUzMzMsIDB4RTMzMywgMHhGRkZGIH0sIC8qIFIxNzUgLSBDU0IgRmxhc2ggY29udHJvbCAqLworCXsgMHg4RjNGLCAweDhGM0YsIDB4RkZGRiB9LCAvKiBSMTc2IC0gRENEQy9MRE8gcmVxdWVzdGVkICovCisJeyAweDMzMkQsIDB4MzMyRCwgMHgwMDAwIH0sIC8qIFIxNzcgLSBEQ0RDIEFjdGl2ZSBvcHRpb25zICovCisJeyAweDAwMkQsIDB4MDAyRCwgMHgwMDAwIH0sIC8qIFIxNzggLSBEQ0RDIFNsZWVwIG9wdGlvbnMgKi8KKwl7IDB4NTE3NywgMHg1MTc3LCAweDgwMDAgfSwgLyogUjE3OSAtIFBvd2VyLWNoZWNrIGNvbXBhcmF0b3IgKi8KKwl7IDB4MDQ3RiwgMHgwNDdGLCAweDAwMDAgfSwgLyogUjE4MCAtIERDREMxIENvbnRyb2wgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE4MSAtIERDREMxIFRpbWVvdXRzICovCisJeyAweDczN0YsIDB4NzM3RiwgMHgwMDAwIH0sIC8qIFIxODIgLSBEQ0RDMSBMb3cgUG93ZXIgKi8KKwl7IDB4NTM1QiwgMHg1MzVCLCAweDAwMDAgfSwgLyogUjE4MyAtIERDREMyIENvbnRyb2wgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE4NCAtIERDREMyIFRpbWVvdXRzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODUgKi8KKwl7IDB4MDQ3RiwgMHgwNDdGLCAweDAwMDAgfSwgLyogUjE4NiAtIERDREMzIENvbnRyb2wgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE4NyAtIERDREMzIFRpbWVvdXRzICovCisJeyAweDczN0YsIDB4NzM3RiwgMHgwMDAwIH0sIC8qIFIxODggLSBEQ0RDMyBMb3cgUG93ZXIgKi8KKwl7IDB4MDQ3RiwgMHgwNDdGLCAweDAwMDAgfSwgLyogUjE4OSAtIERDREM0IENvbnRyb2wgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE5MCAtIERDREM0IFRpbWVvdXRzICovCisJeyAweDczN0YsIDB4NzM3RiwgMHgwMDAwIH0sIC8qIFIxOTEgLSBEQ0RDNCBMb3cgUG93ZXIgKi8KKwl7IDB4NTM1QiwgMHg1MzVCLCAweDAwMDAgfSwgLyogUjE5MiAtIERDREM1IENvbnRyb2wgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE5MyAtIERDREM1IFRpbWVvdXRzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTQgKi8KKwl7IDB4MDQ3RiwgMHgwNDdGLCAweDAwMDAgfSwgLyogUjE5NSAtIERDREM2IENvbnRyb2wgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE5NiAtIERDREM2IFRpbWVvdXRzICovCisJeyAweDczN0YsIDB4NzM3RiwgMHgwMDAwIH0sIC8qIFIxOTcgLSBEQ0RDNiBMb3cgUG93ZXIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5OCAqLworCXsgMHhGRkQzLCAweEZGRDMsIDB4MDAwMCB9LCAvKiBSMTk5IC0gTGltaXQgU3dpdGNoIENvbnRyb2wgKi8KKwl7IDB4NDQxRiwgMHg0NDFGLCAweDAwMDAgfSwgLyogUjIwMCAtIExETzEgQ29udHJvbCAqLworCXsgMHhGRkMwLCAweEZGQzAsIDB4MDAwMCB9LCAvKiBSMjAxIC0gTERPMSBUaW1lb3V0cyAqLworCXsgMHgzMzFGLCAweDMzMUYsIDB4MDAwMCB9LCAvKiBSMjAyIC0gTERPMSBMb3cgUG93ZXIgKi8KKwl7IDB4NDQxRiwgMHg0NDFGLCAweDAwMDAgfSwgLyogUjIwMyAtIExETzIgQ29udHJvbCAqLworCXsgMHhGRkMwLCAweEZGQzAsIDB4MDAwMCB9LCAvKiBSMjA0IC0gTERPMiBUaW1lb3V0cyAqLworCXsgMHgzMzFGLCAweDMzMUYsIDB4MDAwMCB9LCAvKiBSMjA1IC0gTERPMiBMb3cgUG93ZXIgKi8KKwl7IDB4NDQxRiwgMHg0NDFGLCAweDAwMDAgfSwgLyogUjIwNiAtIExETzMgQ29udHJvbCAqLworCXsgMHhGRkMwLCAweEZGQzAsIDB4MDAwMCB9LCAvKiBSMjA3IC0gTERPMyBUaW1lb3V0cyAqLworCXsgMHgzMzFGLCAweDMzMUYsIDB4MDAwMCB9LCAvKiBSMjA4IC0gTERPMyBMb3cgUG93ZXIgKi8KKwl7IDB4NDQxRiwgMHg0NDFGLCAweDAwMDAgfSwgLyogUjIwOSAtIExETzQgQ29udHJvbCAqLworCXsgMHhGRkMwLCAweEZGQzAsIDB4MDAwMCB9LCAvKiBSMjEwIC0gTERPNCBUaW1lb3V0cyAqLworCXsgMHgzMzFGLCAweDMzMUYsIDB4MDAwMCB9LCAvKiBSMjExIC0gTERPNCBMb3cgUG93ZXIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTQgKi8KKwl7IDB4OEYzRiwgMHg4RjNGLCAweDAwMDAgfSwgLyogUjIxNSAtIFZDQ19GQVVMVCBNYXNrcyAqLworCXsgMHhGRjNGLCAweEUwM0YsIDB4MDAwMCB9LCAvKiBSMjE2IC0gTWFpbiBCYW5kZ2FwIENvbnRyb2wgKi8KKwl7IDB4RUYyRiwgMHhFMDJGLCAweDAwMDAgfSwgLyogUjIxNyAtIE9TQyBDb250cm9sICovCisJeyAweEYzRkYsIDB4QjNGRiwgMHhjMDAwIH0sIC8qIFIyMTggLSBSVEMgVGljayBDb250cm9sICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIyMTkgKi8KKwl7IDB4MDlGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjIyMCAtIFJBTSBCSVNUIDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyMSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMjIyICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIyMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyNCAqLworCXsgMHg4RjNGLCAweDAwMDAsIDB4RkZGRiB9LCAvKiBSMjI1IC0gRENEQy9MRE8gc3RhdHVzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweEZGRkYgfSwgLyogUjIyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjkgKi8KKwl7IDB4RkZGRiwgMHgxRkZGLCAweEZGRkYgfSwgLyogUjIzMCAtIEdQSU8gUGluIFN0YXR1cyAqLworCXsgMHhGRkZGLCAweDFGRkYsIDB4RkZGRiB9LCAvKiBSMjMxICovCisJeyAweEZGRkYsIDB4MUZGRiwgMHhGRkZGIH0sIC8qIFIyMzIgKi8KKwl7IDB4RkZGRiwgMHgxRkZGLCAweEZGRkYgfSwgLyogUjIzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDcgKi8KKwl7IDB4RkZGRiwgMHgwMDEwLCAweEZGRkYgfSwgLyogUjI0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQ5ICovCisJeyAweEZGRkYsIDB4MDAxMCwgMHhGRkZGIH0sIC8qIFIyNTAgKi8KKwl7IDB4RkZGRiwgMHgwMDEwLCAweEZGRkYgfSwgLyogUjI1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjUyICovCisJeyAweEZGRkYsIDB4MDAxMCwgMHhGRkZGIH0sIC8qIFIyNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjU1ICovCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204NDAwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3dtODQwMC1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwY2VkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3dtODQwMC1jb3JlLmMKQEAgLTAsMCArMSw0NTUgQEAKKy8qCisgKiBDb3JlIGRyaXZlciBmb3IgV004NDAwLgorICoKKyAqIENvcHlyaWdodCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODQwMC1wcml2YXRlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODQwMC1hdWRpby5oPgorCitzdGF0aWMgc3RydWN0IHsKKwl1MTYgIHJlYWRhYmxlOyAgICAvKiBNYXNrIG9mIHJlYWRhYmxlIGJpdHMgKi8KKwl1MTYgIHdyaXRhYmxlOyAgICAvKiBNYXNrIG9mIHdyaXRhYmxlIGJpdHMgKi8KKwl1MTYgIHZvbDsgICAgICAgICAvKiBNYXNrIG9mIHZvbGF0aWxlIGJpdHMgKi8KKwlpbnQgIGlzX2NvZGVjOyAgICAvKiBSZWdpc3RlciBjb250cm9sbGVkIGJ5IGNvZGVjIHJlc2V0ICovCisJdTE2ICBkZWZhdWx0X3ZhbDsgLyogVmFsdWUgb24gcmVzZXQgKi8KK30gcmVnX2RhdGFbXSA9IHsKKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAsIDAsIDB4NjE3MiB9LCAvKiBSMCAqLworCXsgMHg3MDAwLCAweDAwMDAsIDB4ODAwMCwgMCwgMHgwMDAwIH0sIC8qIFIxICovCisJeyAweEZGMTcsIDB4RkYxNywgMHgwMDAwLCAwLCAweDAwMDAgfSwgLyogUjIgKi8KKwl7IDB4RUJGMywgMHhFQkYzLCAweDAwMDAsIDEsIDB4NjAwMCB9LCAvKiBSMyAqLworCXsgMHgzQ0YzLCAweDNDRjMsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0ICAqLworCXsgMHhGMUY4LCAweEYxRjgsIDB4MDAwMCwgMSwgMHg0MDUwIH0sIC8qIFI1ICAqLworCXsgMHhGQzFGLCAweEZDMUYsIDB4MDAwMCwgMSwgMHg0MDAwIH0sIC8qIFI2ICAqLworCXsgMHhERkRFLCAweERGREUsIDB4MDAwMCwgMSwgMHgwMUM4IH0sIC8qIFI3ICAqLworCXsgMHhGQ0ZDLCAweEZDRkMsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI4ICAqLworCXsgMHhFRkZGLCAweEVGRkYsIDB4MDAwMCwgMSwgMHgwMDQwIH0sIC8qIFI5ICAqLworCXsgMHhFRkZGLCAweEVGRkYsIDB4MDAwMCwgMSwgMHgwMDQwIH0sIC8qIFIxMCAqLworCXsgMHgyN0Y3LCAweDI3RjcsIDB4MDAwMCwgMSwgMHgwMDA0IH0sIC8qIFIxMSAqLworCXsgMHgwMUZGLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMEMwIH0sIC8qIFIxMiAqLworCXsgMHgwMUZGLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMEMwIH0sIC8qIFIxMyAqLworCXsgMHgxRkVGLCAweDFGRUYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFIxNCAqLworCXsgMHgwMTYzLCAweDAxNjMsIDB4MDAwMCwgMSwgMHgwMTAwIH0sIC8qIFIxNSAqLworCXsgMHgwMUZGLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMEMwIH0sIC8qIFIxNiAqLworCXsgMHgwMUZGLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMEMwIH0sIC8qIFIxNyAqLworCXsgMHgxRkZGLCAweDBGRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFIxOCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMSwgMHgxMDAwIH0sIC8qIFIxOSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMSwgMHgxMDEwIH0sIC8qIFIyMCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMSwgMHgxMDEwIH0sIC8qIFIyMSAqLworCXsgMHgwRkRELCAweDBGREQsIDB4MDAwMCwgMSwgMHg4MDAwIH0sIC8qIFIyMiAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCwgMSwgMHgwODAwIH0sIC8qIFIyMyAqLworCXsgMHgwMDAwLCAweDAxREYsIDB4MDAwMCwgMSwgMHgwMDhCIH0sIC8qIFIyNCAqLworCXsgMHgwMDAwLCAweDAxREYsIDB4MDAwMCwgMSwgMHgwMDhCIH0sIC8qIFIyNSAqLworCXsgMHgwMDAwLCAweDAxREYsIDB4MDAwMCwgMSwgMHgwMDhCIH0sIC8qIFIyNiAqLworCXsgMHgwMDAwLCAweDAxREYsIDB4MDAwMCwgMSwgMHgwMDhCIH0sIC8qIFIyNyAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFIyOCAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFIyOSAqLworCXsgMHgwMDAwLCAweDAwNzcsIDB4MDAwMCwgMSwgMHgwMDY2IH0sIC8qIFIzMCAqLworCXsgMHgwMDAwLCAweDAwMzMsIDB4MDAwMCwgMSwgMHgwMDIyIH0sIC8qIFIzMSAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDc5IH0sIC8qIFIzMiAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDc5IH0sIC8qIFIzMyAqLworCXsgMHgwMDAwLCAweDAwMDMsIDB4MDAwMCwgMSwgMHgwMDAzIH0sIC8qIFIzNCAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAzIH0sIC8qIFIzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFIzNiAqLworCXsgMHgwMDAwLCAweDAwM0YsIDB4MDAwMCwgMSwgMHgwMTAwIH0sIC8qIFIzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFIzOCAqLworCXsgMHgwMDAwLCAweDAwMEYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFIzOSAqLworCXsgMHgwMDAwLCAweDAwRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0MCAqLworCXsgMHgwMDAwLCAweDAxQjcsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0MSAqLworCXsgMHgwMDAwLCAweDAxQjcsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0MiAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0MyAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0NCAqLworCXsgMHgwMDAwLCAweDAwRkQsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0NSAqLworCXsgMHgwMDAwLCAweDAwRkQsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0NiAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0NyAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0OCAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0OSAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1MCAqLworCXsgMHgwMDAwLCAweDAxQjMsIDB4MDAwMCwgMSwgMHgwMTgwIH0sIC8qIFI1MSAqLworCXsgMHgwMDAwLCAweDAwNzcsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1MiAqLworCXsgMHgwMDAwLCAweDAwNzcsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1MyAqLworCXsgMHgwMDAwLCAweDAwRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1NCAqLworCXsgMHgwMDAwLCAweDAwMDEsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1NSAqLworCXsgMHgwMDAwLCAweDAwM0YsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1NiAqLworCXsgMHgwMDAwLCAweDAwNEYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1NyAqLworCXsgMHgwMDAwLCAweDAwRkQsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI1OSAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI2MCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI2MSAqLworCXsgMHgwM0ZGLCAweDAzRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI2MiAqLworCXsgMHgwMDdGLCAweDAwN0YsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI2NCAqLworCXsgMHhERkZGLCAweERGRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI2NSAqLworCXsgMHhERkZGLCAweERGRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI2NiAqLworCXsgMHhERkZGLCAweERGRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI2NyAqLworCXsgMHhERkZGLCAweERGRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI2OSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMCwgMHg0NDAwIH0sIC8qIFI3MCAqLworCXsgMHgyM0ZGLCAweDIzRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI3MSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMCwgMHg0NDAwIH0sIC8qIFI3MiAqLworCXsgMHgyM0ZGLCAweDIzRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI3NCAqLworCXsgMHgwMDBFLCAweDAwMEUsIDB4MDAwMCwgMCwgMHgwMDA4IH0sIC8qIFI3NSAqLworCXsgMHhFMDBGLCAweEUwMEYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI3NyAqLworCXsgMHgwM0MwLCAweDAzQzAsIDB4MDAwMCwgMCwgMHgwMkMwIH0sIC8qIFI3OCAqLworCXsgMHhGRkZGLCAweDAwMDAsIDB4ZmZmZiwgMCwgMHgwMDAwIH0sIC8qIFI3OSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI4MCAqLworCXsgMHhGRkZGLCAweDAwMDAsIDB4ZmZmZiwgMCwgMHgwMDAwIH0sIC8qIFI4MSAqLworCXsgMHgyQkZGLCAweDAwMDAsIDB4ZmZmZiwgMCwgMHgwMDAwIH0sIC8qIFI4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI4MyAqLworCXsgMHg4MEZGLCAweDgwRkYsIDB4MDAwMCwgMCwgMHgwMGZmIH0sIC8qIFI4NCAqLworfTsKKworc3RhdGljIGludCB3bTg0MDBfcmVhZChzdHJ1Y3Qgd204NDAwICp3bTg0MDAsIHU4IHJlZywgaW50IG51bV9yZWdzLCB1MTYgKmRlc3QpCit7CisJaW50IGksIHJldCA9IDA7CisKKwlCVUdfT04ocmVnICsgbnVtX3JlZ3MgLSAxID4gQVJSQVlfU0laRSh3bTg0MDAtPnJlZ19jYWNoZSkpOworCisJLyogSWYgdGhlcmUgYXJlIGFueSB2b2xhdGlsZSByZWFkcyB0aGVuIHJlYWQgYmFjayB0aGUgZW50aXJlIGJsb2NrICovCisJZm9yIChpID0gcmVnOyBpIDwgcmVnICsgbnVtX3JlZ3M7IGkrKykKKwkJaWYgKHJlZ19kYXRhW2ldLnZvbCkgeworCQkJcmV0ID0gd204NDAwLT5yZWFkX2Rldih3bTg0MDAtPmlvX2RhdGEsIHJlZywKKwkJCQkJICAgICAgIG51bV9yZWdzLCBkZXN0KTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlyZXR1cm4gcmV0OworCQkJZm9yIChpID0gMDsgaSA8IG51bV9yZWdzOyBpKyspCisJCQkJZGVzdFtpXSA9IGJlMTZfdG9fY3B1KGRlc3RbaV0pOworCisJCQlyZXR1cm4gMDsKKwkJfQorCisJLyogT3RoZXJ3aXNlIHVzZSB0aGUgY2FjaGUgKi8KKwltZW1jcHkoZGVzdCwgJndtODQwMC0+cmVnX2NhY2hlW3JlZ10sIG51bV9yZWdzICogc2l6ZW9mKHUxNikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX3dyaXRlKHN0cnVjdCB3bTg0MDAgKndtODQwMCwgdTggcmVnLCBpbnQgbnVtX3JlZ3MsCisJCQl1MTYgKnNyYykKK3sKKwlpbnQgcmV0LCBpOworCisJQlVHX09OKHJlZyArIG51bV9yZWdzIC0gMSA+IEFSUkFZX1NJWkUod204NDAwLT5yZWdfY2FjaGUpKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcmVnczsgaSsrKSB7CisJCUJVR19PTighcmVnX2RhdGFbcmVnICsgaV0ud3JpdGFibGUpOworCQl3bTg0MDAtPnJlZ19jYWNoZVtyZWcgKyBpXSA9IHNyY1tpXTsKKwkJc3JjW2ldID0gY3B1X3RvX2JlMTYoc3JjW2ldKTsKKwl9CisKKwkvKiBEbyB0aGUgYWN0dWFsIEkvTyAqLworCXJldCA9IHdtODQwMC0+d3JpdGVfZGV2KHdtODQwMC0+aW9fZGF0YSwgcmVnLCBudW1fcmVncywgc3JjKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogd204NDAwX3JlZ19yZWFkIC0gU2luZ2xlIHJlZ2lzdGVyIHJlYWQKKyAqCisgKiBAd204NDAwOiBQb2ludGVyIHRvIHdtODQwMCBjb250cm9sIHN0cnVjdHVyZQorICogQHJlZzogICAgUmVnaXN0ZXIgdG8gcmVhZAorICoKKyAqIEByZXR1cm4gIFJlYWQgdmFsdWUKKyAqLwordTE2IHdtODQwMF9yZWdfcmVhZChzdHJ1Y3Qgd204NDAwICp3bTg0MDAsIHU4IHJlZykKK3sKKwl1MTYgdmFsOworCisJbXV0ZXhfbG9jaygmd204NDAwLT5pb19sb2NrKTsKKworCXdtODQwMF9yZWFkKHdtODQwMCwgcmVnLCAxLCAmdmFsKTsKKworCW11dGV4X3VubG9jaygmd204NDAwLT5pb19sb2NrKTsKKworCXJldHVybiB2YWw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg0MDBfcmVnX3JlYWQpOworCitpbnQgd204NDAwX2Jsb2NrX3JlYWQoc3RydWN0IHdtODQwMCAqd204NDAwLCB1OCByZWcsIGludCBjb3VudCwgdTE2ICpkYXRhKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ3bTg0MDAtPmlvX2xvY2spOworCisJcmV0ID0gd204NDAwX3JlYWQod204NDAwLCByZWcsIGNvdW50LCBkYXRhKTsKKworCW11dGV4X3VubG9jaygmd204NDAwLT5pb19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg0MDBfYmxvY2tfcmVhZCk7CisKKy8qKgorICogd204NDAwX3NldF9iaXRzIC0gQml0bWFzayB3cml0ZQorICoKKyAqIEB3bTg0MDA6IFBvaW50ZXIgdG8gd204NDAwIGNvbnRyb2wgc3RydWN0dXJlCisgKiBAcmVnOiAgICBSZWdpc3RlciB0byBhY2Nlc3MKKyAqIEBtYXNrOiAgIE1hc2sgb2YgYml0cyB0byBjaGFuZ2UKKyAqIEB2YWw6ICAgIFZhbHVlIHRvIHNldCBmb3IgbWFza2VkIGJpdHMKKyAqLworaW50IHdtODQwMF9zZXRfYml0cyhzdHJ1Y3Qgd204NDAwICp3bTg0MDAsIHU4IHJlZywgdTE2IG1hc2ssIHUxNiB2YWwpCit7CisJdTE2IHRtcDsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd204NDAwLT5pb19sb2NrKTsKKworCXJldCA9IHdtODQwMF9yZWFkKHdtODQwMCwgcmVnLCAxLCAmdG1wKTsKKwl0bXAgPSAodG1wICYgfm1hc2spIHwgdmFsOworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gd204NDAwX3dyaXRlKHdtODQwMCwgcmVnLCAxLCAmdG1wKTsKKworCW11dGV4X3VubG9jaygmd204NDAwLT5pb19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg0MDBfc2V0X2JpdHMpOworCisvKioKKyAqIHdtODQwMF9yZXNldF9jb2RlY19yZWdfY2FjaGUgLSBSZXNldCBjYWNoZWQgY29kZWMgcmVnaXN0ZXJzIHRvCisgKiB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAqLwordm9pZCB3bTg0MDBfcmVzZXRfY29kZWNfcmVnX2NhY2hlKHN0cnVjdCB3bTg0MDAgKndtODQwMCkKK3sKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJndtODQwMC0+aW9fbG9jayk7CisKKwkvKiBSZXNldCBhbGwgY29kZWMgcmVnaXN0ZXJzIHRvIHRoZWlyIGluaXRpYWwgdmFsdWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg0MDAtPnJlZ19jYWNoZSk7IGkrKykKKwkJaWYgKHJlZ19kYXRhW2ldLmlzX2NvZGVjKQorCQkJd204NDAwLT5yZWdfY2FjaGVbaV0gPSByZWdfZGF0YVtpXS5kZWZhdWx0X3ZhbDsKKworCW11dGV4X3VubG9jaygmd204NDAwLT5pb19sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODQwMF9yZXNldF9jb2RlY19yZWdfY2FjaGUpOworCisvKgorICogd204NDAwX2luaXQgLSBHZW5lcmljIGluaXRpYWxpc2F0aW9uCisgKgorICogVGhlIFdNODQwMCBjYW4gYmUgY29uZmlndXJlZCBhcyBlaXRoZXIgYW4gSTJDIG9yIFNQSSBkZXZpY2UuICBQcm9iZQorICogZnVuY3Rpb25zIGZvciBlYWNoIGJ1cyBzZXQgdXAgdGhlIGFjY2Vzc29ycyB0aGVuIGNhbGwgaW50byB0aGlzIHRvCisgKiBzZXQgdXAgdGhlIGRldmljZSBpdHNlbGYuCisgKi8KK3N0YXRpYyBpbnQgd204NDAwX2luaXQoc3RydWN0IHdtODQwMCAqd204NDAwLAorCQkgICAgICAgc3RydWN0IHdtODQwMF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwl1MTYgcmVnOworCWludCByZXQsIGk7CisKKwltdXRleF9pbml0KCZ3bTg0MDAtPmlvX2xvY2spOworCisJd204NDAwLT5kZXYtPmRyaXZlcl9kYXRhID0gd204NDAwOworCisJLyogQ2hlY2sgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IGEgV004NDAwICovCisJcmV0ID0gd204NDAwLT5yZWFkX2Rldih3bTg0MDAtPmlvX2RhdGEsIFdNODQwMF9SRVNFVF9JRCwgMSwgJnJlZyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIod204NDAwLT5kZXYsICJDaGlwIElEIHJlZ2lzdGVyIHJlYWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChiZTE2X3RvX2NwdShyZWcpICE9IHJlZ19kYXRhW1dNODQwMF9SRVNFVF9JRF0uZGVmYXVsdF92YWwpIHsKKwkJZGV2X2Vycih3bTg0MDAtPmRldiwgIkRldmljZSBpcyBub3QgYSBXTTg0MDAsIElEIGlzICV4XG4iLAorCQkJYmUxNl90b19jcHUocmVnKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFdlIGRvbid0IGtub3cgd2hhdCBzdGF0ZSB0aGUgaGFyZHdhcmUgaXMgaW4gYW5kIHNpbmNlIHRoaXMKKwkgKiBpcyBhIFBNSUMgd2UgY2FuJ3QgcmVzZXQgaXQgc2FmZWx5IHNvIGluaXRpYWxpc2UgdGhlIHJlZ2lzdGVyCisJICogY2FjaGUgZnJvbSB0aGUgaGFyZHdhcmUuCisJICovCisJcmV0ID0gd204NDAwLT5yZWFkX2Rldih3bTg0MDAtPmlvX2RhdGEsIDAsCisJCQkgICAgICAgQVJSQVlfU0laRSh3bTg0MDAtPnJlZ19jYWNoZSksCisJCQkgICAgICAgd204NDAwLT5yZWdfY2FjaGUpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKHdtODQwMC0+ZGV2LCAiUmVnaXN0ZXIgY2FjaGUgcmVhZCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NDAwLT5yZWdfY2FjaGUpOyBpKyspCisJCXdtODQwMC0+cmVnX2NhY2hlW2ldID0gYmUxNl90b19jcHUod204NDAwLT5yZWdfY2FjaGVbaV0pOworCisJLyogSWYgdGhlIGNvZGVjIGlzIGluIHJlc2V0IHVzZSBoYXJkIGNvZGVkIHZhbHVlcyAqLworCWlmICghKHdtODQwMC0+cmVnX2NhY2hlW1dNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzFdICYgV004NDAwX0NPREVDX0VOQSkpCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODQwMC0+cmVnX2NhY2hlKTsgaSsrKQorCQkJaWYgKHJlZ19kYXRhW2ldLmlzX2NvZGVjKQorCQkJCXdtODQwMC0+cmVnX2NhY2hlW2ldID0gcmVnX2RhdGFbaV0uZGVmYXVsdF92YWw7CisKKwlyZXQgPSB3bTg0MDBfcmVhZCh3bTg0MDAsIFdNODQwMF9JRCwgMSwgJnJlZyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIod204NDAwLT5kZXYsICJJRCByZWdpc3RlciByZWFkIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXJlZyA9IChyZWcgJiBXTTg0MDBfQ0hJUF9SRVZfTUFTSykgPj4gV004NDAwX0NISVBfUkVWX1NISUZUOworCWRldl9pbmZvKHdtODQwMC0+ZGV2LCAiV004NDAwIHJldmlzaW9uICV4XG4iLCByZWcpOworCisJaWYgKHBkYXRhICYmIHBkYXRhLT5wbGF0Zm9ybV9pbml0KSB7CisJCXJldCA9IHBkYXRhLT5wbGF0Zm9ybV9pbml0KHdtODQwMC0+ZGV2KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X2Vycih3bTg0MDAtPmRldiwgIlBsYXRmb3JtIGluaXQgZmFpbGVkOiAlZFxuIiwKKwkJCQlyZXQpOworCX0gZWxzZQorCQlkZXZfd2Fybih3bTg0MDAtPmRldiwgIk5vIHBsYXRmb3JtIGluaXRpYWxpc2F0aW9uIHN1cHBsaWVkXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdtODQwMF9yZWxlYXNlKHN0cnVjdCB3bTg0MDAgKndtODQwMCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODQwMC0+cmVndWxhdG9ycyk7IGkrKykKKwkJaWYgKHdtODQwMC0+cmVndWxhdG9yc1tpXS5uYW1lKQorCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJndtODQwMC0+cmVndWxhdG9yc1tpXSk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCitzdGF0aWMgaW50IHdtODQwMF9pMmNfcmVhZCh2b2lkICppb19kYXRhLCBjaGFyIHJlZywgaW50IGNvdW50LCB1MTYgKmRlc3QpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGlvX2RhdGE7CisJc3RydWN0IGkyY19tc2cgeGZlclsyXTsKKwlpbnQgcmV0OworCisJLyogV3JpdGUgcmVnaXN0ZXIgKi8KKwl4ZmVyWzBdLmFkZHIgPSBpMmMtPmFkZHI7CisJeGZlclswXS5mbGFncyA9IDA7CisJeGZlclswXS5sZW4gPSAxOworCXhmZXJbMF0uYnVmID0gJnJlZzsKKworCS8qIFJlYWQgZGF0YSAqLworCXhmZXJbMV0uYWRkciA9IGkyYy0+YWRkcjsKKwl4ZmVyWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJeGZlclsxXS5sZW4gPSBjb3VudCAqIHNpemVvZih1MTYpOworCXhmZXJbMV0uYnVmID0gKHU4ICopZGVzdDsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmMtPmFkYXB0ZXIsIHhmZXIsIDIpOworCWlmIChyZXQgPT0gMikKKwkJcmV0ID0gMDsKKwllbHNlIGlmIChyZXQgPj0gMCkKKwkJcmV0ID0gLUVJTzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX2kyY193cml0ZSh2b2lkICppb19kYXRhLCBjaGFyIHJlZywgaW50IGNvdW50LCBjb25zdCB1MTYgKnNyYykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gaW9fZGF0YTsKKwl1OCAqbXNnOworCWludCByZXQ7CisKKwkvKiBXZSBhZGQgMSBieXRlIGZvciBkZXZpY2UgcmVnaXN0ZXIgLSBpZGVhbGx5IEkyQyB3b3VsZCBnYXRoZXIuICovCisJbXNnID0ga21hbGxvYygoY291bnQgKiBzaXplb2YodTE2KSkgKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAobXNnID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbXNnWzBdID0gcmVnOworCW1lbWNweSgmbXNnWzFdLCBzcmMsIGNvdW50ICogc2l6ZW9mKHUxNikpOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgbXNnLCAoY291bnQgKiBzaXplb2YodTE2KSkgKyAxKTsKKworCWlmIChyZXQgPT0gKGNvdW50ICogMikgKyAxKQorCQlyZXQgPSAwOworCWVsc2UgaWYgKHJldCA+PSAwKQorCQlyZXQgPSAtRUlPOworCisJa2ZyZWUobXNnKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDA7CisJaW50IHJldDsKKworCXdtODQwMCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg0MDApLCBHRlBfS0VSTkVMKTsKKwlpZiAod204NDAwID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJd204NDAwLT5pb19kYXRhID0gaTJjOworCXdtODQwMC0+cmVhZF9kZXYgPSB3bTg0MDBfaTJjX3JlYWQ7CisJd204NDAwLT53cml0ZV9kZXYgPSB3bTg0MDBfaTJjX3dyaXRlOworCXdtODQwMC0+ZGV2ID0gJmkyYy0+ZGV2OworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODQwMCk7CisKKwlyZXQgPSB3bTg0MDBfaW5pdCh3bTg0MDAsIGkyYy0+ZGV2LnBsYXRmb3JtX2RhdGEpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBzdHJ1Y3RfZXJyOworCisJcmV0dXJuIDA7CisKK3N0cnVjdF9lcnI6CisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgTlVMTCk7CisJa2ZyZWUod204NDAwKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtODQwMF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJc3RydWN0IHdtODQwMCAqd204NDAwID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisKKwl3bTg0MDBfcmVsZWFzZSh3bTg0MDApOworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIE5VTEwpOworCWtmcmVlKHdtODQwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODQwMF9pMmNfaWRbXSA9IHsKKyAgICAgICB7ICJ3bTg0MDAiLCAwIH0sCisgICAgICAgeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODQwMF9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204NDAwX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiV004NDAwIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgICAgPSB3bTg0MDBfaTJjX3Byb2JlLAorCS5yZW1vdmUgICA9IHdtODQwMF9pMmNfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHdtODQwMF9pMmNfaWQsCit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHdtODQwMF9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQgPSAtRU5PREVWOworCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg0MDBfaTJjX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKQorCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBJMkMgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKyNlbmRpZgorCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KHdtODQwMF9tb2R1bGVfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTg0MDBfbW9kdWxlX2V4aXQodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJndtODQwMF9pMmNfZHJpdmVyKTsKKyNlbmRpZgorfQorbW9kdWxlX2V4aXQod204NDAwX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IGE3MjZmM2IuLmVmZDNhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC0xNSw3ICsxNSw3IEBACiAKIGNvbmZpZyBBVE1FTF9QV00KIAl0cmlzdGF0ZSAiQXRtZWwgQVQzMi9BVDkxIFBXTSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxCisJZGVwZW5kcyBvbiBBVlIzMiB8fCBBUkNIX0FUOTFTQU05MjYzIHx8IEFSQ0hfQVQ5MVNBTTlSTCB8fCBBUkNIX0FUOTFDQVA5CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBkZXZpY2UgZHJpdmVyIHN1cHBvcnQgZm9yIHRoZSBQV00gY2hhbm5lbHMKIAkgIG9uIGNlcnRhaW4gQXRtZWwgcHJjb2Vzc29ycy4gIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gaXMgdXNlZCBmb3IKQEAgLTQwOSw2ICs0MDksNyBAQAogCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCWRlcGVuZHMgb24gSFdNT04KIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gUkZLSUxMCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEZuLUZ4IGtleXMgb24gRWVlIFBDIGxhcHRvcHMuCiAJICBJdCBhbHNvIGFkZHMgdGhlIGFiaWxpdHkgdG8gc3dpdGNoIGNhbWVyYS93bGFuIG9uL29mZi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9ocC13bWkuYyBiL2RyaXZlcnMvbWlzYy9ocC13bWkuYwppbmRleCA2ZDQwN2MyLi40YjdjMjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaHAtd21pLmMKKysrIGIvZHJpdmVycy9taXNjL2hwLXdtaS5jCkBAIC04Miw2ICs4Miw3IEBACiAJe0tFX0tFWSwgMHgwMywgS0VZX0JSSUdIVE5FU1NET1dOfSwKIAl7S0VfS0VZLCAweDIwZTYsIEtFWV9QUk9HMX0sCiAJe0tFX0tFWSwgMHgyMTQyLCBLRVlfTUVESUF9LAorCXtLRV9LRVksIDB4MjEzYiwgS0VZX0lORk99LAogCXtLRV9LRVksIDB4MjMxYiwgS0VZX0hFTFB9LAogCXtLRV9FTkQsIDB9CiB9OwpAQCAtMzA5LDcgKzMxMCw3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXZvaWQgaHBfd21pX25vdGlmeSh1MzIgdmFsdWUsIHZvaWQgKmNvbnRleHQpCitzdGF0aWMgdm9pZCBocF93bWlfbm90aWZ5KHUzMiB2YWx1ZSwgdm9pZCAqY29udGV4dCkKIHsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgcmVzcG9uc2UgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmtleTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9waGFudG9tLmMgYi9kcml2ZXJzL21pc2MvcGhhbnRvbS5jCmluZGV4IGRhZjU4NTYuLmFiZGViZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9waGFudG9tLmMKKysrIGIvZHJpdmVycy9taXNjL3BoYW50b20uYwpAQCAtMzk5LDkgKzM5OSw5IEBACiAJCWdvdG8gZXJyX2lycTsKIAl9CiAKLQlpZiAoSVNfRVJSKGRldmljZV9jcmVhdGVfZHJ2ZGF0YShwaGFudG9tX2NsYXNzLCAmcGRldi0+ZGV2LAotCQkJCQkgTUtERVYocGhhbnRvbV9tYWpvciwgbWlub3IpLAotCQkJCQkgTlVMTCwgInBoYW50b20ldSIsIG1pbm9yKSkpCisJaWYgKElTX0VSUihkZXZpY2VfY3JlYXRlKHBoYW50b21fY2xhc3MsICZwZGV2LT5kZXYsCisJCQkJIE1LREVWKHBoYW50b21fbWFqb3IsIG1pbm9yKSwgTlVMTCwKKwkJCQkgInBoYW50b20ldSIsIG1pbm9yKSkpCiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGNyZWF0ZSBkZXZpY2VcbiIpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHBodCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnUuaCBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydS5oCmluZGV4IDQwZGY3Y2IuLmY5M2YwM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydS5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydS5oCkBAIC0zMCw5ICszMCw5IEBACiAvKgogICogU2l6ZSB1c2VkIHRvIG1hcCBHUlUgR1NlZwogICovCi0jaWYgZGVmaW5lZCBDT05GSUdfSUE2NAorI2lmIGRlZmluZWQoQ09ORklHX0lBNjQpCiAjZGVmaW5lIEdSVV9HU0VHX1BBR0VTSVpFCSgyNTYgKiAxMDI0VUwpCi0jZWxpZiBkZWZpbmVkIENPTkZJR19YODZfNjQKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKICNkZWZpbmUgR1JVX0dTRUdfUEFHRVNJWkUJKDI1NiAqIDEwMjRVTCkJCS8qIFpaWiAyTUIgPz8/ICovCiAjZWxzZQogI2Vycm9yICJVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVfaW5zdHJ1Y3Rpb25zLmggYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVfaW5zdHJ1Y3Rpb25zLmgKaW5kZXggMGRjMzYyMi4uNDg3NjJlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1X2luc3RydWN0aW9ucy5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydV9pbnN0cnVjdGlvbnMuaApAQCAtMjYsNyArMjYsNyBAQAogICogQXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBmdW5jdGlvbnMKICAqLwogCi0jaWYgZGVmaW5lZCBDT05GSUdfSUE2NAorI2lmIGRlZmluZWQoQ09ORklHX0lBNjQpCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgogI2RlZmluZSBfX2ZsdXNoX2NhY2hlKHApCQlpYTY0X2ZjKHApCkBAIC0zNiw3ICszNiw3IEBACiAJCQliYXJyaWVyKCk7CQkJCQlcCiAJCQkqKCh2b2xhdGlsZSBpbnQgKikocCkpID0gdjsgLyogZm9yY2Ugc3QucmVsICovCVwKIAkJfSB3aGlsZSAoMCkKLSNlbGlmIGRlZmluZWQgQ09ORklHX1g4Nl82NAorI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQogI2RlZmluZSBfX2ZsdXNoX2NhY2hlKHApCQljbGZsdXNoKHApCiAjZGVmaW5lIGdydV9vcmRlcmVkX3N0b3JlX2ludChwLHYpCQkJCQlcCiAJCWRvIHsJCQkJCQkJXApAQCAtMjk5LDYgKzI5OSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZ3J1X3N0YXJ0X2luc3RydWN0aW9uKHN0cnVjdCBncnVfaW5zdHJ1Y3Rpb24gKmlucywgaW50IG9wMzIpCiB7CiAJZ3J1X29yZGVyZWRfc3RvcmVfaW50KGlucywgb3AzMik7CisJZ3J1X2ZsdXNoX2NhY2hlKGlucyk7CiB9CiAKIApAQCAtNjA0LDggKzYwNSw5IEBACiBzdGF0aWMgaW5saW5lIGludCBncnVfY2hlY2tfc3RhdHVzKHZvaWQgKmNiKQogewogCXN0cnVjdCBncnVfY29udHJvbF9ibG9ja19zdGF0dXMgKmNicyA9ICh2b2lkICopY2I7Ci0JaW50IHJldCA9IGNicy0+aXN0YXR1czsKKwlpbnQgcmV0OwogCisJcmV0ID0gY2JzLT5pc3RhdHVzOwogCWlmIChyZXQgPT0gQ0JTX0NBTExfT1MpCiAJCXJldCA9IGdydV9jaGVja19zdGF0dXNfcHJvYyhjYik7CiAJcmV0dXJuIHJldDsKQEAgLTYxNyw3ICs2MTksNyBAQAogc3RhdGljIGlubGluZSBpbnQgZ3J1X3dhaXQodm9pZCAqY2IpCiB7CiAJc3RydWN0IGdydV9jb250cm9sX2Jsb2NrX3N0YXR1cyAqY2JzID0gKHZvaWQgKiljYjsKLQlpbnQgcmV0ID0gY2JzLT5pc3RhdHVzOzsKKwlpbnQgcmV0ID0gY2JzLT5pc3RhdHVzOwogCiAJaWYgKHJldCAhPSBDQlNfSURMRSkKIAkJcmV0ID0gZ3J1X3dhaXRfcHJvYyhjYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmYXVsdC5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmF1bHQuYwppbmRleCAzZDMzMDE1Li44YzM4OWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmYXVsdC5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZhdWx0LmMKQEAgLTIxNCwxMiArMjE0LDE0IEBACiB9CiAKIC8qCi0gKgogICogYXRvbWljX3B0ZV9sb29rdXAKICAqCiAgKiBDb252ZXJ0IGEgdXNlciB2aXJ0dWFsIGFkZHJlc3MgdG8gYSBwaHlzaWNhbCBhZGRyZXNzCiAgKiBPbmx5IHN1cHBvcnRzIEludGVsIGxhcmdlIHBhZ2VzICgyTUIgb25seSkgb24geDg2XzY0LgogICoJWlpaIC0gaHVnZXBhZ2Ugc3VwcG9ydCBpcyBpbmNvbXBsZXRlCisgKgorICogTk9URTogbW1hcF9zZW0gaXMgYWxyZWFkeSBoZWxkIG9uIGVudHJ5IHRvIHRoaXMgZnVuY3Rpb24uIFRoaXMKKyAqIGd1YXJhbnRlZXMgZXhpc3RlbmNlIG9mIHRoZSBwYWdlIHRhYmxlcy4KICAqLwogc3RhdGljIGludCBhdG9taWNfcHRlX2xvb2t1cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB2YWRkciwKIAlpbnQgd3JpdGUsIHVuc2lnbmVkIGxvbmcgKnBhZGRyLCBpbnQgKnBhZ2VzaGlmdCkKQEAgLTIyOSw5ICsyMzEsNiBAQAogCXB1ZF90ICpwdWRwOwogCXB0ZV90IHB0ZTsKIAotCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsJCS8qIFpaWiBkZWJ1ZyAqLwotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlwZ2RwID0gcGdkX29mZnNldCh2bWEtPnZtX21tLCB2YWRkcik7CiAJaWYgKHVubGlrZWx5KHBnZF9ub25lKCpwZ2RwKSkpCiAJCWdvdG8gZXJyOwpAQCAtMjUwLDggKzI0OSw2IEBACiAjZW5kaWYKIAkJcHRlID0gKnB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIHZhZGRyKTsKIAotCWxvY2FsX2lycV9lbmFibGUoKTsKLQogCWlmICh1bmxpa2VseSghcHRlX3ByZXNlbnQocHRlKSB8fAogCQkgICAgICh3cml0ZSAmJiAoIXB0ZV93cml0ZShwdGUpIHx8ICFwdGVfZGlydHkocHRlKSkpKSkKIAkJcmV0dXJuIDE7CkBAIC0zMjQsNiArMzIxLDcgQEAKIAkgKiBBdG9taWMgbG9va3VwIGlzIGZhc3RlciAmIHVzdWFsbHkgd29ya3MgZXZlbiBpZiBjYWxsZWQgaW4gbm9uLWF0b21pYwogCSAqIGNvbnRleHQuCiAJICovCisJcm1iKCk7CS8qIE11c3QvY2hlY2sgbXNfcmFuZ2VfYWN0aXZlIGJlZm9yZSBsb2FkaW5nIFBURXMgKi8KIAlyZXQgPSBhdG9taWNfcHRlX2xvb2t1cCh2bWEsIHZhZGRyLCB3cml0ZSwgJnBhZGRyLCAmcGFnZXNoaWZ0KTsKIAlpZiAocmV0KSB7CiAJCWlmICghY2IpCkBAIC01NDMsNiArNTQxLDcgQEAKIAkJdWNibnVtID0gZ2V0X2NiX251bWJlcigodm9pZCAqKWV4Y2RldC5jYik7CiAJCWNicm51bSA9IHRocmVhZF9jYnJfbnVtYmVyKGd0cywgdWNibnVtKTsKIAkJY2JlID0gZ2V0X2NiZV9ieV9pbmRleChndHMtPnRzX2dydSwgY2JybnVtKTsKKwkJcHJlZmV0Y2h3KGNiZSk7CQkvKiBIYXJtbGVzcyBvbiBoYXJkd2FyZSwgcmVxdWlyZWQgZm9yIGVtdWxhdG9yICovCiAJCWV4Y2RldC5vcGMgPSBjYmUtPm9wY2NweTsKIAkJZXhjZGV0LmV4b3BjID0gY2JlLT5leG9wY2NweTsKIAkJZXhjZGV0LmVjYXVzZSA9IGNiZS0+ZWNhdXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCmluZGV4IGQ2MWNlZTcuLjVjMDI3YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKHZtYS0+dm1fc3RhcnQgJiAoR1JVX0dTRUdfUEFHRVNJWkUgLSAxKSB8fAotCQkJdm1hLT52bV9lbmQgJiAoR1JVX0dTRUdfUEFHRVNJWkUgLSAxKSkKKwkgICAgCQkJdm1hLT52bV9lbmQgJiAoR1JVX0dTRUdfUEFHRVNJWkUgLSAxKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl2bWEtPnZtX2ZsYWdzIHw9CkBAIC0zOTgsNiArMzk4LDEyIEBACiAJaXJxID0gZ2V0X2Jhc2VfaXJxKCk7CiAJZm9yIChjaGlwID0gMDsgY2hpcCA8IEdSVV9DSElQTEVUU19QRVJfQkxBREU7IGNoaXArKykgewogCQlyZXQgPSByZXF1ZXN0X2lycShpcnEgKyBjaGlwLCBncnVfaW50ciwgMCwgaWQsIE5VTEwpOworCQkvKiBUT0RPOiBmaXggaXJxIGhhbmRsaW5nIG9uIHg4Ni4gRm9yIG5vdyBpZ25vcmUgZmFpbHVyZXMgYmVjYXVzZQorCQkgKiBpbnRlcnJ1cHRzIGFyZSBub3QgcmVxdWlyZWQgJiBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZCAqLworCQlpZiAocmV0KSB7CisJCQlwcmludGsoIiEhIVdBUk5JTkc6IEdSVSBpZ25vcmluZyByZXF1ZXN0IGZhaWx1cmUhISFcbiIpOworCQkJcmV0ID0gMDsKKwkJfQogCQlpZiAocmV0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIsCiAJCQkgICAgICAgR1JVX0RSSVZFUl9JRF9TVFIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5oIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5oCmluZGV4IGQxNjAzMWQuLmI2MzAxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVoYW5kbGVzLmgKQEAgLTkxLDEyICs5MSw3IEBACiAjZGVmaW5lIEdTRUdQT0ZGKGgpIAkJKChoKSAmIChHUlVfU0laRSAtIDEpKQogCiAvKiBDb252ZXJ0IGFuIGFyYml0cmFyeSBoYW5kbGUgYWRkcmVzcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBHUlUgc2VnbWVudCAqLwotI2lmbmRlZiBfX1BMVUdJTl9fCiAjZGVmaW5lIEdSVUJBU0UoaCkJCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoaCkgJiB+KEdSVV9TSVpFIC0gMSkpKQotI2Vsc2UKLWV4dGVybiB2b2lkICpnbXVfZ3J1YmFzZSh2b2lkICpoKTsKLSNkZWZpbmUgR1JVQkFTRShoKQkJZ211X2dydWJhc2UoaCkKLSNlbmRpZgogCiAvKiBHZW5lcmFsIGFkZHJlc3NpbmcgbWFjcm9zLiAqLwogc3RhdGljIGlubGluZSB2b2lkICpnZXRfZ3NlZ19iYXNlX2FkZHJlc3Modm9pZCAqYmFzZSwgaW50IGN0eG51bSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmMKaW5kZXggZGZkNDlhZi4uODgwYzU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmMKQEAgLTEyMiw2ICsxMjIsNyBAQAogCXN0cnVjdCBncnVfY29udHJvbF9ibG9ja19leHRlbmRlZCAqY2JlOwogCiAJY2JlID0gZ2V0X2NiZShHUlVCQVNFKGNiKSwgZ2V0X2NiX251bWJlcihjYikpOworCXByZWZldGNodyhjYmUpOyAgICAgICAgIC8qIEhhcm1sZXNzIG9uIGhhcmR3YXJlLCByZXF1aXJlZCBmb3IgZW11bGF0b3IgKi8KIAlleGNkZXQtPm9wYyA9IGNiZS0+b3BjY3B5OwogCWV4Y2RldC0+ZXhvcGMgPSBjYmUtPmV4b3BjY3B5OwogCWV4Y2RldC0+ZWNhdXNlID0gY2JlLT5lY2F1c2U7CkBAIC00NjYsNyArNDY3LDcgQEAKIAlTVEFUKG1lc3Ffc2VuZCk7CiAJQlVHX09OKGJ5dGVzIDwgc2l6ZW9mKGludCkgfHwgYnl0ZXMgPiAyICogR1JVX0NBQ0hFX0xJTkVfQllURVMpOwogCi0JY2xpbmVzID0gKGJ5dGVzICsgR1JVX0NBQ0hFX0xJTkVfQllURVMgLSAxKSAvIEdSVV9DQUNIRV9MSU5FX0JZVEVTOworCWNsaW5lcyA9IERJVl9ST1VORF9VUChieXRlcywgR1JVX0NBQ0hFX0xJTkVfQllURVMpOwogCWlmIChncnVfZ2V0X2NwdV9yZXNvdXJjZXMoYnl0ZXMsICZjYiwgJmRzcikpCiAJCXJldHVybiBNUUVfQlVHX05PX1JFU09VUkNFUzsKIAltZW1jcHkoZHNyLCBtZXNnLCBieXRlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVtYWluLmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVtYWluLmMKaW5kZXggMGVlYjhkZC4uZTExZTFhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1bWFpbi5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydW1haW4uYwpAQCAtNDMyLDcgKzQzMiwyMiBAQAogCXJldHVybiBHUlVfSEFORExFX0JZVEVTOwogfQogCi0vKiByZXdyaXRlIGluIGFzc2VtYmx5ICYgdXNlIGxvdHMgb2YgcHJlZmV0Y2ggKi8KK3N0YXRpYyB2b2lkIGdydV9wcmVmZXRjaF9jb250ZXh0KHZvaWQgKmdzZWcsIHZvaWQgKmNiLCB2b2lkICpjYmUsIHVuc2lnbmVkIGxvbmcgY2JybWFwLAorCQkJCXVuc2lnbmVkIGxvbmcgbGVuZ3RoKQoreworCWludCBpLCBzY3I7CisKKwlwcmVmZXRjaF9kYXRhKGdzZWcgKyBHUlVfRFNfQkFTRSwgbGVuZ3RoIC8gR1JVX0NBQ0hFX0xJTkVfQllURVMsCisJCSAgICAgIEdSVV9DQUNIRV9MSU5FX0JZVEVTKTsKKworCWZvcl9lYWNoX2Nicl9pbl9hbGxvY2F0aW9uX21hcChpLCAmY2JybWFwLCBzY3IpIHsKKwkJcHJlZmV0Y2hfZGF0YShjYiwgMSwgR1JVX0NBQ0hFX0xJTkVfQllURVMpOworCQlwcmVmZXRjaF9kYXRhKGNiZSArIGkgKiBHUlVfSEFORExFX1NUUklERSwgMSwKKwkJCSAgICAgIEdSVV9DQUNIRV9MSU5FX0JZVEVTKTsKKwkJY2IgKz0gR1JVX0hBTkRMRV9TVFJJREU7CisJfQorfQorCiBzdGF0aWMgdm9pZCBncnVfbG9hZF9jb250ZXh0X2RhdGEodm9pZCAqc2F2ZSwgdm9pZCAqZ3J1YmFzZSwgaW50IGN0eG51bSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgY2JybWFwLCB1bnNpZ25lZCBsb25nIGRzcm1hcCkKIHsKQEAgLTQ0MSwyMCArNDU2LDExIEBACiAJaW50IGksIHNjcjsKIAogCWdzZWcgPSBncnViYXNlICsgY3R4bnVtICogR1JVX0dTRUdfU1RSSURFOwotCWxlbmd0aCA9IGh3ZWlnaHQ2NChkc3JtYXApICogR1JVX0RTUl9BVV9CWVRFUzsKLQlwcmVmZXRjaF9kYXRhKGdzZWcgKyBHUlVfRFNfQkFTRSwgbGVuZ3RoIC8gR1JVX0NBQ0hFX0xJTkVfQllURVMsCi0JCSAgICAgIEdSVV9DQUNIRV9MSU5FX0JZVEVTKTsKLQogCWNiID0gZ3NlZyArIEdSVV9DQl9CQVNFOwogCWNiZSA9IGdydWJhc2UgKyBHUlVfQ0JFX0JBU0U7Ci0JZm9yX2VhY2hfY2JyX2luX2FsbG9jYXRpb25fbWFwKGksICZjYnJtYXAsIHNjcikgewotCQlwcmVmZXRjaF9kYXRhKGNiLCAxLCBHUlVfQ0FDSEVfTElORV9CWVRFUyk7Ci0JCXByZWZldGNoX2RhdGEoY2JlICsgaSAqIEdSVV9IQU5ETEVfU1RSSURFLCAxLAotCQkJICAgICAgR1JVX0NBQ0hFX0xJTkVfQllURVMpOwotCQljYiArPSBHUlVfSEFORExFX1NUUklERTsKLQl9CisJbGVuZ3RoID0gaHdlaWdodDY0KGRzcm1hcCkgKiBHUlVfRFNSX0FVX0JZVEVTOworCWdydV9wcmVmZXRjaF9jb250ZXh0KGdzZWcsIGNiLCBjYmUsIGNicm1hcCwgbGVuZ3RoKTsKIAotCWNiID0gZ3NlZyArIEdSVV9DQl9CQVNFOwogCWZvcl9lYWNoX2Nicl9pbl9hbGxvY2F0aW9uX21hcChpLCAmY2JybWFwLCBzY3IpIHsKIAkJc2F2ZSArPSBncnVfY29weV9oYW5kbGUoY2IsIHNhdmUpOwogCQlzYXZlICs9IGdydV9jb3B5X2hhbmRsZShjYmUgKyBpICogR1JVX0hBTkRMRV9TVFJJREUsIHNhdmUpOwpAQCAtNDcyLDE1ICs0NzgsMTYgQEAKIAlpbnQgaSwgc2NyOwogCiAJZ3NlZyA9IGdydWJhc2UgKyBjdHhudW0gKiBHUlVfR1NFR19TVFJJREU7Ci0KIAljYiA9IGdzZWcgKyBHUlVfQ0JfQkFTRTsKIAljYmUgPSBncnViYXNlICsgR1JVX0NCRV9CQVNFOworCWxlbmd0aCA9IGh3ZWlnaHQ2NChkc3JtYXApICogR1JVX0RTUl9BVV9CWVRFUzsKKwlncnVfcHJlZmV0Y2hfY29udGV4dChnc2VnLCBjYiwgY2JlLCBjYnJtYXAsIGxlbmd0aCk7CisKIAlmb3JfZWFjaF9jYnJfaW5fYWxsb2NhdGlvbl9tYXAoaSwgJmNicm1hcCwgc2NyKSB7CiAJCXNhdmUgKz0gZ3J1X2NvcHlfaGFuZGxlKHNhdmUsIGNiKTsKIAkJc2F2ZSArPSBncnVfY29weV9oYW5kbGUoc2F2ZSwgY2JlICsgaSAqIEdSVV9IQU5ETEVfU1RSSURFKTsKIAkJY2IgKz0gR1JVX0hBTkRMRV9TVFJJREU7CiAJfQotCWxlbmd0aCA9IGh3ZWlnaHQ2NChkc3JtYXApICogR1JVX0RTUl9BVV9CWVRFUzsKIAltZW1jcHkoc2F2ZSwgZ3NlZyArIEdSVV9EU19CQVNFLCBsZW5ndGgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMgYi9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKaW5kZXggNDA2OTg5ZS4uN2E3MmU3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYwpAQCAtMTMyLDYgKzEzMiw3IEBACiAKIAlibGtfcXVldWVfcHJlcF9ycShtcS0+cXVldWUsIG1tY19wcmVwX3JlcXVlc3QpOwogCWJsa19xdWV1ZV9vcmRlcmVkKG1xLT5xdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTiwgTlVMTCk7CisJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19OT05ST1QsIG1xLT5xdWV1ZSk7CiAKICNpZmRlZiBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRQogCWlmIChob3N0LT5tYXhfaHdfc2VncyA9PSAxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCmluZGV4IGMxNjAyODguLjFiOWZjM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiB9OwogCi12b2lkIG1tY19vbWFwX2ZjbGtfb2ZmZGVsYXkoc3RydWN0IG1tY19vbWFwX3Nsb3QgKnNsb3QpCitzdGF0aWMgdm9pZCBtbWNfb21hcF9mY2xrX29mZmRlbGF5KHN0cnVjdCBtbWNfb21hcF9zbG90ICpzbG90KQogewogCXVuc2lnbmVkIGxvbmcgdGlja19uczsKIApAQCAtMTgyLDcgKzE4Miw3IEBACiAJfQogfQogCi12b2lkIG1tY19vbWFwX2ZjbGtfZW5hYmxlKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgZW5hYmxlKQorc3RhdGljIHZvaWQgbW1jX29tYXBfZmNsa19lbmFibGUoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBlbmFibGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTQ1NSw3ICsxNDU1LDkgQEAKIAogCWhvc3QtPmlycSA9IGlycTsKIAlob3N0LT5waHlzX2Jhc2UgPSBob3N0LT5tZW1fcmVzLT5zdGFydDsKLQlob3N0LT52aXJ0X2Jhc2UgPSAodm9pZCBfX2lvbWVtICopIElPX0FERFJFU1MoaG9zdC0+cGh5c19iYXNlKTsKKwlob3N0LT52aXJ0X2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghaG9zdC0+dmlydF9iYXNlKQorCQlnb3RvIGVycl9pb3JlbWFwOwogCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCWhvc3QtPmljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtbWNfaWNrIik7CkBAIC0xNTEwLDYgKzE1MTIsOCBAQAogCQljbGtfcHV0KGhvc3QtPmljbGspOwogCX0KIGVycl9mcmVlX21tY19ob3N0OgorCWlvdW5tYXAoaG9zdC0+dmlydF9iYXNlKTsKK2Vycl9pb3JlbWFwOgogCWtmcmVlKGhvc3QpOwogZXJyX2ZyZWVfbWVtX3JlZ2lvbjoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CkBAIC0xNTM2LDYgKzE1NDAsNyBAQAogCWlmIChob3N0LT5mY2xrICYmICFJU19FUlIoaG9zdC0+ZmNsaykpCiAJCWNsa19wdXQoaG9zdC0+ZmNsayk7CiAKKwlpb3VubWFwKGhvc3QtPnZpcnRfYmFzZSk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAogCQkJICAgcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKaW5kZXggYWUxNmQ4NC4uM2IyMDg1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCkBAIC0zLDYgKzMsOSBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBtYWludGVjaCBHbWJILCBUaG9tYXMgS2xlZmZlbCA8dGtAbWFpbnRlY2guZGU+CiAgKgorICogQ3VycmVudCBkcml2ZXIgbWFpbnRhaW5lZCBieSBCZW4gRG9va3MgYW5kIFNpbXRlYyBFbGVjdHJvbmljcworICogIENvcHlyaWdodCAoQykgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MgPGJlbi1saW51eEBmbHVmZi5vcmc+CisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KQEAgLTEzLDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCkBAIC0zOSw5ICs0Myw5IEBACiAJZGJnX2NvbmYgID0gKDEgPDwgOCksCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGRiZ21hcF9lcnIgICA9IGRiZ19lcnIgfCBkYmdfZmFpbDsKK3N0YXRpYyBjb25zdCBpbnQgZGJnbWFwX2VyciAgID0gZGJnX2ZhaWw7CiBzdGF0aWMgY29uc3QgaW50IGRiZ21hcF9pbmZvICA9IGRiZ19pbmZvIHwgZGJnX2NvbmY7Ci1zdGF0aWMgY29uc3QgaW50IGRiZ21hcF9kZWJ1ZyA9IGRiZ19kZWJ1ZzsKK3N0YXRpYyBjb25zdCBpbnQgZGJnbWFwX2RlYnVnID0gZGJnX2VyciB8IGRiZ19kZWJ1ZzsKIAogI2RlZmluZSBkYmcoaG9zdCwgY2hhbm5lbHMsIGFyZ3MuLi4pCQkgIFwKIAlkbyB7CQkJCQkgIFwKQEAgLTE4OSw3ICsxOTMsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBnZXRfZGF0YV9idWZmZXIoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0LAotCQkJCSAgdTMyICp3b3JkcywgdTMyICoqcG9pbnRlcikKKwkJCQkgIHUzMiAqYnl0ZXMsIHUzMiAqKnBvaW50ZXIpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIApAQCAtMjA2LDcgKzIxMCw3IEBACiAJfQogCXNnID0gJmhvc3QtPm1ycS0+ZGF0YS0+c2dbaG9zdC0+cGlvX3NncHRyXTsKIAotCSp3b3JkcyA9IHNnLT5sZW5ndGggPj4gMjsKKwkqYnl0ZXMgPSBzZy0+bGVuZ3RoOwogCSpwb2ludGVyID0gc2dfdmlydChzZyk7CiAKIAlob3N0LT5waW9fc2dwdHIrKzsKQEAgLTIyMiw3ICsyMjYsNyBAQAogCXUzMiBmaWZvc3RhdCA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUZTVEEpOwogCiAJZmlmb3N0YXQgJj0gUzNDMjQxMF9TRElGU1RBX0NPVU5UTUFTSzsKLQlyZXR1cm4gZmlmb3N0YXQgPj4gMjsKKwlyZXR1cm4gZmlmb3N0YXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGZpZm9fZnJlZShzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCkBAIC0yMzAsMTMgKzIzNCwxNSBAQAogCXUzMiBmaWZvc3RhdCA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUZTVEEpOwogCiAJZmlmb3N0YXQgJj0gUzNDMjQxMF9TRElGU1RBX0NPVU5UTUFTSzsKLQlyZXR1cm4gKDYzIC0gZmlmb3N0YXQpID4+IDI7CisJcmV0dXJuIDYzIC0gZmlmb3N0YXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX3Bpb19yZWFkKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKIHsKIAlpbnQgcmVzOwogCXUzMiBmaWZvOworCXUzMiAqcHRyOworCXUzMiBmaWZvX3dvcmRzOwogCXZvaWQgX19pb21lbSAqZnJvbV9wdHI7CiAKIAkvKiB3cml0ZSByZWFsIHByZXNjYWxlciB0byBob3N0LCBpdCBtaWdodCBiZSBzZXQgc2xvdyB0byBmaXggKi8KQEAgLTI0NSw4ICsyNTEsOCBAQAogCWZyb21fcHRyID0gaG9zdC0+YmFzZSArIGhvc3QtPnNkaWRhdGE7CiAKIAl3aGlsZSAoKGZpZm8gPSBmaWZvX2NvdW50KGhvc3QpKSkgewotCQlpZiAoIWhvc3QtPnBpb193b3JkcykgewotCQkJcmVzID0gZ2V0X2RhdGFfYnVmZmVyKGhvc3QsICZob3N0LT5waW9fd29yZHMsCisJCWlmICghaG9zdC0+cGlvX2J5dGVzKSB7CisJCQlyZXMgPSBnZXRfZGF0YV9idWZmZXIoaG9zdCwgJmhvc3QtPnBpb19ieXRlcywKIAkJCQkJICAgICAgJmhvc3QtPnBpb19wdHIpOwogCQkJaWYgKHJlcykgewogCQkJCWhvc3QtPnBpb19hY3RpdmUgPSBYRkVSX05PTkU7CkBAIC0yNTksMjYgKzI2NSw0NyBAQAogCiAJCQlkYmcoaG9zdCwgZGJnX3BpbywKIAkJCSAgICAicGlvX3JlYWQoKTogbmV3IHRhcmdldDogWyVpXUBbJXBdXG4iLAotCQkJICAgIGhvc3QtPnBpb193b3JkcywgaG9zdC0+cGlvX3B0cik7CisJCQkgICAgaG9zdC0+cGlvX2J5dGVzLCBob3N0LT5waW9fcHRyKTsKIAkJfQogCiAJCWRiZyhob3N0LCBkYmdfcGlvLAogCQkgICAgInBpb19yZWFkKCk6IGZpZm86WyUwMmldIGJ1ZmZlcjpbJTAzaV0gZGNudDpbJTA4WF1cbiIsCi0JCSAgICBmaWZvLCBob3N0LT5waW9fd29yZHMsCisJCSAgICBmaWZvLCBob3N0LT5waW9fYnl0ZXMsCiAJCSAgICByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEQ05UKSk7CiAKLQkJaWYgKGZpZm8gPiBob3N0LT5waW9fd29yZHMpCi0JCQlmaWZvID0gaG9zdC0+cGlvX3dvcmRzOworCQkvKiBJZiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgYmxvY2ssIHdlIGNhbgorCQkgKiByZWFkIGEgd29yZCBhbmQgZ2V0IDEgdG8gMyBieXRlcy4gIElmIHdlIGluIHRoZQorCQkgKiBtaWRkbGUgb2YgdGhlIGJsb2NrLCB3ZSBoYXZlIHRvIHJlYWQgZnVsbCB3b3JkcywKKwkJICogb3RoZXJ3aXNlIHdlIHdpbGwgd3JpdGUgZ2FyYmFnZSwgc28gcm91bmQgZG93biB0bworCQkgKiBhbiBldmVuIG11bHRpcGxlIG9mIDQuICovCisJCWlmIChmaWZvID49IGhvc3QtPnBpb19ieXRlcykKKwkJCWZpZm8gPSBob3N0LT5waW9fYnl0ZXM7CisJCWVsc2UKKwkJCWZpZm8gLT0gZmlmbyAmIDM7CiAKLQkJaG9zdC0+cGlvX3dvcmRzIC09IGZpZm87CisJCWhvc3QtPnBpb19ieXRlcyAtPSBmaWZvOwogCQlob3N0LT5waW9fY291bnQgKz0gZmlmbzsKIAotCQl3aGlsZSAoZmlmby0tKQotCQkJKihob3N0LT5waW9fcHRyKyspID0gcmVhZGwoZnJvbV9wdHIpOworCQlmaWZvX3dvcmRzID0gZmlmbyA+PiAyOworCQlwdHIgPSBob3N0LT5waW9fcHRyOworCQl3aGlsZSAoZmlmb193b3Jkcy0tKQorCQkJKnB0cisrID0gcmVhZGwoZnJvbV9wdHIpOworCQlob3N0LT5waW9fcHRyID0gcHRyOworCisJCWlmIChmaWZvICYgMykgeworCQkJdTMyIG4gPSBmaWZvICYgMzsKKwkJCXUzMiBkYXRhID0gcmVhZGwoZnJvbV9wdHIpOworCQkJdTggKnAgPSAodTggKilob3N0LT5waW9fcHRyOworCisJCQl3aGlsZSAobi0tKSB7CisJCQkJKnArKyA9IGRhdGE7CisJCQkJZGF0YSA+Pj0gODsKKwkJCX0KKwkJfQogCX0KIAotCWlmICghaG9zdC0+cGlvX3dvcmRzKSB7Ci0JCXJlcyA9IGdldF9kYXRhX2J1ZmZlcihob3N0LCAmaG9zdC0+cGlvX3dvcmRzLCAmaG9zdC0+cGlvX3B0cik7CisJaWYgKCFob3N0LT5waW9fYnl0ZXMpIHsKKwkJcmVzID0gZ2V0X2RhdGFfYnVmZmVyKGhvc3QsICZob3N0LT5waW9fYnl0ZXMsICZob3N0LT5waW9fcHRyKTsKIAkJaWYgKHJlcykgewogCQkJZGJnKGhvc3QsIGRiZ19waW8sCiAJCQkgICAgInBpb19yZWFkKCk6IGNvbXBsZXRlIChubyBtb3JlIGJ1ZmZlcnMpLlxuIik7CkBAIC0yOTgsMTIgKzMyNSwxMyBAQAogCXZvaWQgX19pb21lbSAqdG9fcHRyOwogCWludCByZXM7CiAJdTMyIGZpZm87CisJdTMyICpwdHI7CiAKIAl0b19wdHIgPSBob3N0LT5iYXNlICsgaG9zdC0+c2RpZGF0YTsKIAogCXdoaWxlICgoZmlmbyA9IGZpZm9fZnJlZShob3N0KSkpIHsKLQkJaWYgKCFob3N0LT5waW9fd29yZHMpIHsKLQkJCXJlcyA9IGdldF9kYXRhX2J1ZmZlcihob3N0LCAmaG9zdC0+cGlvX3dvcmRzLAorCQlpZiAoIWhvc3QtPnBpb19ieXRlcykgeworCQkJcmVzID0gZ2V0X2RhdGFfYnVmZmVyKGhvc3QsICZob3N0LT5waW9fYnl0ZXMsCiAJCQkJCQkJJmhvc3QtPnBpb19wdHIpOwogCQkJaWYgKHJlcykgewogCQkJCWRiZyhob3N0LCBkYmdfcGlvLApAQCAtMzE1LDE4ICszNDMsMjcgQEAKIAogCQkJZGJnKGhvc3QsIGRiZ19waW8sCiAJCQkgICAgInBpb193cml0ZSgpOiBuZXcgc291cmNlOiBbJWldQFslcF1cbiIsCi0JCQkgICAgaG9zdC0+cGlvX3dvcmRzLCBob3N0LT5waW9fcHRyKTsKKwkJCSAgICBob3N0LT5waW9fYnl0ZXMsIGhvc3QtPnBpb19wdHIpOwogCiAJCX0KIAotCQlpZiAoZmlmbyA+IGhvc3QtPnBpb193b3JkcykKLQkJCWZpZm8gPSBob3N0LT5waW9fd29yZHM7CisJCS8qIElmIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBibG9jaywgd2UgaGF2ZSB0bworCQkgKiB3cml0ZSBleGFjdGx5IHRoZSByZW1haW5pbmcgbnVtYmVyIG9mIGJ5dGVzLiAgSWYgd2UKKwkJICogaW4gdGhlIG1pZGRsZSBvZiB0aGUgYmxvY2ssIHdlIGhhdmUgdG8gd3JpdGUgZnVsbAorCQkgKiB3b3Jkcywgc28gcm91bmQgZG93biB0byBhbiBldmVuIG11bHRpcGxlIG9mIDQuICovCisJCWlmIChmaWZvID49IGhvc3QtPnBpb19ieXRlcykKKwkJCWZpZm8gPSBob3N0LT5waW9fYnl0ZXM7CisJCWVsc2UKKwkJCWZpZm8gLT0gZmlmbyAmIDM7CiAKLQkJaG9zdC0+cGlvX3dvcmRzIC09IGZpZm87CisJCWhvc3QtPnBpb19ieXRlcyAtPSBmaWZvOwogCQlob3N0LT5waW9fY291bnQgKz0gZmlmbzsKIAorCQlmaWZvID0gKGZpZm8gKyAzKSA+PiAyOworCQlwdHIgPSBob3N0LT5waW9fcHRyOwogCQl3aGlsZSAoZmlmby0tKQotCQkJd3JpdGVsKCooaG9zdC0+cGlvX3B0cisrKSwgdG9fcHRyKTsKKwkJCXdyaXRlbCgqcHRyKyssIHRvX3B0cik7CisJCWhvc3QtPnBpb19wdHIgPSBwdHI7CiAJfQogCiAJZW5hYmxlX2ltYXNrKGhvc3QsIFMzQzI0MTBfU0RJSU1TS19UWEZJRk9IQUxGKTsKQEAgLTM0OSw5ICszODYsOSBAQAogCQljbGVhcl9pbWFzayhob3N0KTsKIAkJaWYgKGhvc3QtPnBpb19hY3RpdmUgIT0gWEZFUl9OT05FKSB7CiAJCQlkYmcoaG9zdCwgZGJnX2VyciwgInVuZmluaXNoZWQgJXMgIgotCQkJICAgICItIHBpb19jb3VudDpbJXVdIHBpb193b3JkczpbJXVdXG4iLAorCQkJICAgICItIHBpb19jb3VudDpbJXVdIHBpb19ieXRlczpbJXVdXG4iLAogCQkJICAgIChob3N0LT5waW9fYWN0aXZlID09IFhGRVJfUkVBRCkgPyAicmVhZCIgOiAid3JpdGUiLAotCQkJICAgIGhvc3QtPnBpb19jb3VudCwgaG9zdC0+cGlvX3dvcmRzKTsKKwkJCSAgICBob3N0LT5waW9fY291bnQsIGhvc3QtPnBpb19ieXRlcyk7CiAKIAkJCWlmIChob3N0LT5tcnEtPmRhdGEpCiAJCQkJaG9zdC0+bXJxLT5kYXRhLT5lcnJvciA9IC1FSU5WQUw7CkBAIC04MTIsMTEgKzg0OSwxMCBAQAogCQkvKiBXZSBjYW5ub3QgZGVhbCB3aXRoIHVuYWxpZ25lZCBibG9ja3Mgd2l0aCBtb3JlIHRoYW4KIAkJICogb25lIGJsb2NrIGJlaW5nIHRyYW5zZmVyZWQuICovCiAKLQkJaWYgKGRhdGEtPmJsb2NrcyA+IDEpCisJCWlmIChkYXRhLT5ibG9ja3MgPiAxKSB7CisJCQlwcl93YXJuaW5nKCIlczogY2FuJ3QgZG8gbm9uLXdvcmQgc2l6ZWQgYmxvY2sgdHJhbnNmZXJzIChibGtzeiAlZClcbiIsIF9fZnVuY19fLCBkYXRhLT5ibGtzeik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBObyBzdXBwb3J0IHlldCBmb3Igbm9uLXdvcmQgYmxvY2sgdHJhbnNmZXJzLiAqLwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAogCXdoaWxlIChyZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEU1RBKSAmCkBAIC04OTYsNyArOTMyLDcgQEAKIAlCVUdfT04oKGRhdGEtPmZsYWdzICYgQk9USF9ESVIpID09IEJPVEhfRElSKTsKIAogCWhvc3QtPnBpb19zZ3B0ciA9IDA7Ci0JaG9zdC0+cGlvX3dvcmRzID0gMDsKKwlob3N0LT5waW9fYnl0ZXMgPSAwOwogCWhvc3QtPnBpb19jb3VudCA9IDA7CiAJaG9zdC0+cGlvX2FjdGl2ZSA9IHJ3ID8gWEZFUl9XUklURSA6IFhGRVJfUkVBRDsKIApAQCAtMTAzMywxMCArMTA2OSwzMyBAQAogCQlzM2NtY2lfc2VuZF9yZXF1ZXN0KG1tYyk7CiB9CiAKK3N0YXRpYyB2b2lkIHMzY21jaV9zZXRfY2xrKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19pb3MgKmlvcykKK3sKKwl1MzIgbWNpX3BzYzsKKworCS8qIFNldCBjbG9jayAqLworCWZvciAobWNpX3BzYyA9IDA7IG1jaV9wc2MgPCAyNTU7IG1jaV9wc2MrKykgeworCQlob3N0LT5yZWFsX3JhdGUgPSBob3N0LT5jbGtfcmF0ZSAvIChob3N0LT5jbGtfZGl2KihtY2lfcHNjKzEpKTsKKworCQlpZiAoaG9zdC0+cmVhbF9yYXRlIDw9IGlvcy0+Y2xvY2spCisJCQlicmVhazsKKwl9CisKKwlpZiAobWNpX3BzYyA+IDI1NSkKKwkJbWNpX3BzYyA9IDI1NTsKKworCWhvc3QtPnByZXNjYWxlciA9IG1jaV9wc2M7CisJd3JpdGVsKGhvc3QtPnByZXNjYWxlciwgaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJUFJFKTsKKworCS8qIElmIHJlcXVlc3RlZCBjbG9jayBpcyAwLCByZWFsX3JhdGUgd2lsbCBiZSAwLCB0b28gKi8KKwlpZiAoaW9zLT5jbG9jayA9PSAwKQorCQlob3N0LT5yZWFsX3JhdGUgPSAwOworfQorCiBzdGF0aWMgdm9pZCBzM2NtY2lfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKIHsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwotCXUzMiBtY2lfcHNjLCBtY2lfY29uOworCXUzMiBtY2lfY29uOwogCiAJLyogU2V0IHRoZSBwb3dlciBzdGF0ZSAqLwogCkBAIC0xMDc0LDIzICsxMTMzLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogU2V0IGNsb2NrICovCi0JZm9yIChtY2lfcHNjID0gMDsgbWNpX3BzYyA8IDI1NTsgbWNpX3BzYysrKSB7Ci0JCWhvc3QtPnJlYWxfcmF0ZSA9IGhvc3QtPmNsa19yYXRlIC8gKGhvc3QtPmNsa19kaXYqKG1jaV9wc2MrMSkpOwotCi0JCWlmIChob3N0LT5yZWFsX3JhdGUgPD0gaW9zLT5jbG9jaykKLQkJCWJyZWFrOwotCX0KLQotCWlmIChtY2lfcHNjID4gMjU1KQotCQltY2lfcHNjID0gMjU1OwotCi0JaG9zdC0+cHJlc2NhbGVyID0gbWNpX3BzYzsKLQl3cml0ZWwoaG9zdC0+cHJlc2NhbGVyLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElQUkUpOwotCi0JLyogSWYgcmVxdWVzdGVkIGNsb2NrIGlzIDAsIHJlYWxfcmF0ZSB3aWxsIGJlIDAsIHRvbyAqLwotCWlmIChpb3MtPmNsb2NrID09IDApCi0JCWhvc3QtPnJlYWxfcmF0ZSA9IDA7CisJczNjbWNpX3NldF9jbGsoaG9zdCwgaW9zKTsKIAogCS8qIFNldCBDTE9DS19FTkFCTEUgKi8KIAlpZiAoaW9zLT5jbG9jaykKQEAgLTExNDgsNiArMTE5MSw2MSBAQAogCSAqIGNoZWNrcy4gQW55IHplcm8gZmllbGRzIHRvIGVuc3VyZSByZWFvbmFibGUgZGVmYXVsdHMgYXJlIHBpY2tlZC4gKi8KIH07CiAKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKworc3RhdGljIGludCBzM2NtY2lfY3B1ZnJlcV90cmFuc2l0aW9uKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3Q7CisJc3RydWN0IG1tY19ob3N0ICptbWM7CisJdW5zaWduZWQgbG9uZyBuZXdjbGs7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWhvc3QgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBzM2NtY2lfaG9zdCwgZnJlcV90cmFuc2l0aW9uKTsKKwluZXdjbGsgPSBjbGtfZ2V0X3JhdGUoaG9zdC0+Y2xrKTsKKwltbWMgPSBob3N0LT5tbWM7CisKKwlpZiAoKHZhbCA9PSBDUFVGUkVRX1BSRUNIQU5HRSAmJiBuZXdjbGsgPiBob3N0LT5jbGtfcmF0ZSkgfHwKKwkgICAgKHZhbCA9PSBDUFVGUkVRX1BPU1RDSEFOR0UgJiYgbmV3Y2xrIDwgaG9zdC0+Y2xrX3JhdGUpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZtbWMtPmxvY2ssIGZsYWdzKTsKKworCQlob3N0LT5jbGtfcmF0ZSA9IG5ld2NsazsKKworCQlpZiAobW1jLT5pb3MucG93ZXJfbW9kZSAhPSBNTUNfUE9XRVJfT0ZGICYmCisJCSAgICBtbWMtPmlvcy5jbG9jayAhPSAwKQorCQkJczNjbWNpX3NldF9jbGsoaG9zdCwgJm1tYy0+aW9zKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtbWMtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgczNjbWNpX2NwdWZyZXFfcmVnaXN0ZXIoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQoreworCWhvc3QtPmZyZXFfdHJhbnNpdGlvbi5ub3RpZmllcl9jYWxsID0gczNjbWNpX2NwdWZyZXFfdHJhbnNpdGlvbjsKKworCXJldHVybiBjcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZob3N0LT5mcmVxX3RyYW5zaXRpb24sCisJCQkJCSBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjbWNpX2NwdWZyZXFfZGVyZWdpc3RlcihzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisJY3B1ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKCZob3N0LT5mcmVxX3RyYW5zaXRpb24sCisJCQkJICAgIENQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBzM2NtY2lfY3B1ZnJlcV9yZWdpc3RlcihzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NtY2lfY3B1ZnJlcV9kZXJlZ2lzdGVyKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKK3sKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlzMjQ0MCkKIHsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3Q7CkBAIC0xMjk4LDEwICsxMzk2LDE2IEBACiAJICAgIChob3N0LT5pczI0NDA/IjI0NDAiOiIiKSwKIAkgICAgaG9zdC0+YmFzZSwgaG9zdC0+aXJxLCBob3N0LT5pcnFfY2QsIGhvc3QtPmRtYSk7CiAKKwlyZXQgPSBzM2NtY2lfY3B1ZnJlcV9yZWdpc3Rlcihob3N0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjcHVmcmVxXG4iKTsKKwkJZ290byBmcmVlX2RtYWJ1ZjsKKwl9CisKIAlyZXQgPSBtbWNfYWRkX2hvc3QobW1jKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgbW1jIGhvc3QuXG4iKTsKLQkJZ290byBmcmVlX2RtYWJ1ZjsKKwkJZ290byBmcmVlX2NwdWZyZXE7CiAJfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKQEAgLTEzMDksNiArMTQxMyw5IEBACiAKIAlyZXR1cm4gMDsKIAorIGZyZWVfY3B1ZnJlcToKKwlzM2NtY2lfY3B1ZnJlcV9kZXJlZ2lzdGVyKGhvc3QpOworCiAgZnJlZV9kbWFidWY6CiAJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKIApAQCAtMTM0Miw2ICsxNDQ5LDcgQEAKIAlpZiAoaG9zdC0+aXJxX2NkID49IDApCiAJCWZyZWVfaXJxKGhvc3QtPmlycV9jZCwgaG9zdCk7CiAKKwlzM2NtY2lfY3B1ZnJlcV9kZXJlZ2lzdGVyKGhvc3QpOwogCW1tY19yZW1vdmVfaG9zdChtbWMpOwogCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CiB9CkBAIC0xNDU1LDcgKzE1NjMsNyBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgUzNDIE1NQy9TRCBDYXJkIEludGVyZmFjZSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLU1PRFVMRV9BVVRIT1IoIlRob21hcyBLbGVmZmVsIDx0a0BtYWludGVjaC5kZT4iKTsKK01PRFVMRV9BVVRIT1IoIlRob21hcyBLbGVmZmVsIDx0a0BtYWludGVjaC5kZT4sIEJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4iKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQxMC1zZGkiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQxMi1zZGkiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQ0MC1zZGkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmggYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5oCmluZGV4IDM3ZDljNjAuLmNhMWJhM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuaApAQCAtNTEsNyArNTEsNyBAQAogCWludAkJCWRtYV9jb21wbGV0ZTsKIAogCXUzMgkJCXBpb19zZ3B0cjsKLQl1MzIJCQlwaW9fd29yZHM7CisJdTMyCQkJcGlvX2J5dGVzOwogCXUzMgkJCXBpb19jb3VudDsKIAl1MzIJCQkqcGlvX3B0cjsKICNkZWZpbmUgWEZFUl9OT05FIDAKQEAgLTY3LDQgKzY3LDggQEAKIAogCXVuc2lnbmVkIGludAkJY2NudCwgZGNudDsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcGlvX3Rhc2tsZXQ7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJZnJlcV90cmFuc2l0aW9uOworI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKaW5kZXggMGE4NGYxMC4uOWJkNzAyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCkBAIC0zMjcsNyArMzI3LDcgQEAKIAogCXsKIAkJLnZlbmRvciAgICAgICAgID0gUENJX1ZFTkRPUl9JRF9NQVJWRUxMLAotCQkuZGV2aWNlICAgICAgICAgPSBQQ0lfREVWSUNFX0lEX01BUlZFTExfQ0FGRV9TRCwKKwkJLmRldmljZSAgICAgICAgID0gUENJX0RFVklDRV9JRF9NQVJWRUxMXzg4QUxQMDFfU0QsCiAJCS5zdWJ2ZW5kb3IgICAgICA9IFBDSV9BTllfSUQsCiAJCS5zdWJkZXZpY2UgICAgICA9IFBDSV9BTllfSUQsCiAJCS5kcml2ZXJfZGF0YSAgICA9IChrZXJuZWxfdWxvbmdfdCkmc2RoY2lfY2FmZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL0tjb25maWcgYi9kcml2ZXJzL210ZC9LY29uZmlnCmluZGV4IDE0ZjExZjguLmE5MGQ1MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvS2NvbmZpZwpAQCAtMTcyLDYgKzE3MiwxMSBAQAogCSAgbWVtb3J5IGNoaXBzLCBhbmQgYWxzbyB1c2UgaW9jdGwoKSB0byBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQKIAkgIHRoZSBkZXZpY2UsIG9yIHRvIGVyYXNlIHBhcnRzIG9mIGl0LgogCitjb25maWcgSEFWRV9NVERfT1RQCisJYm9vbAorCWhlbHAKKwkgIEVuYWJsZSBhY2Nlc3MgdG8gT1RQIHJlZ2lvbnMgdXNpbmcgTVREX0NIQVIuCisKIGNvbmZpZyBNVERfQkxLREVWUwogCXRyaXN0YXRlICJDb21tb24gaW50ZXJmYWNlIHRvIGJsb2NrIGxheWVyIGZvciBNVEQgJ3RyYW5zbGF0aW9uIGxheWVycyciCiAJZGVwZW5kcyBvbiBCTE9DSwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKaW5kZXggNDc5ZDMyYi4uOTQwODA5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCkBAIC02LDYgKzYsNyBAQAogY29uZmlnIE1URF9DRkkKIAl0cmlzdGF0ZSAiRGV0ZWN0IGZsYXNoIGNoaXBzIGJ5IENvbW1vbiBGbGFzaCBJbnRlcmZhY2UgKENGSSkgcHJvYmUiCiAJc2VsZWN0IE1URF9HRU5fUFJPQkUKKwlzZWxlY3QgTVREX0NGSV9VVElMCiAJaGVscAogCSAgVGhlIENvbW1vbiBGbGFzaCBJbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiB3YXMgZGV2ZWxvcGVkIGJ5IEludGVsLAogCSAgQU1EIGFuZCBvdGhlciBmbGFzaCBtYW51ZmFjdHVyZXMgdGhhdCBwcm92aWRlcyBhIHVuaXZlcnNhbCBtZXRob2QKQEAgLTE1NCw2ICsxNTUsNyBAQAogY29uZmlnIE1URF9PVFAKIAlib29sICJQcm90ZWN0aW9uIFJlZ2lzdGVycyBha2Egb25lLXRpbWUgcHJvZ3JhbW1hYmxlIChPVFApIGJpdHMiCiAJZGVwZW5kcyBvbiBNVERfQ0ZJX0FEVl9PUFRJT05TCisJc2VsZWN0IEhBVkVfTVREX09UUAogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciByZWFkaW5nLCB3cml0aW5nIGFuZCBsb2NraW5nIHNvIGNhbGxlZApAQCAtMTg3LDcgKzE4OSw3IEBACiAJICBTdHJhdGFGbGFzaCBhbmQgb3RoZXIgcGFydHMuCiAKIGNvbmZpZyBNVERfQ0ZJX0FNRFNURAotCXRyaXN0YXRlICJTdXBwb3J0IGZvciBBTUQvRnVqaXRzdSBmbGFzaCBjaGlwcyIKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgQU1EL0Z1aml0c3UvU3BhbnNpb24gZmxhc2ggY2hpcHMiCiAJZGVwZW5kcyBvbiBNVERfR0VOX1BST0JFCiAJc2VsZWN0IE1URF9DRklfVVRJTAogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKaW5kZXggNWYxYjQ3Mi4uYzkzYThiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKQEAgLTQ3OCw2ICs0NzgsMjggQEAKIAkJZWxzZQogCQkJY2ZpLT5jaGlwc1tpXS5lcmFzZV90aW1lID0gMjAwMDAwMDsKIAorCQlpZiAoY2ZpLT5jZmlxLT5Xb3JkV3JpdGVUaW1lb3V0VHlwICYmCisJCSAgICBjZmktPmNmaXEtPldvcmRXcml0ZVRpbWVvdXRNYXgpCisJCQljZmktPmNoaXBzW2ldLndvcmRfd3JpdGVfdGltZV9tYXggPQorCQkJCTE8PChjZmktPmNmaXEtPldvcmRXcml0ZVRpbWVvdXRUeXAgKworCQkJCSAgICBjZmktPmNmaXEtPldvcmRXcml0ZVRpbWVvdXRNYXgpOworCQllbHNlCisJCQljZmktPmNoaXBzW2ldLndvcmRfd3JpdGVfdGltZV9tYXggPSA1MDAwMCAqIDg7CisKKwkJaWYgKGNmaS0+Y2ZpcS0+QnVmV3JpdGVUaW1lb3V0VHlwICYmCisJCSAgICBjZmktPmNmaXEtPkJ1ZldyaXRlVGltZW91dE1heCkKKwkJCWNmaS0+Y2hpcHNbaV0uYnVmZmVyX3dyaXRlX3RpbWVfbWF4ID0KKwkJCQkxPDwoY2ZpLT5jZmlxLT5CdWZXcml0ZVRpbWVvdXRUeXAgKworCQkJCSAgICBjZmktPmNmaXEtPkJ1ZldyaXRlVGltZW91dE1heCk7CisKKwkJaWYgKGNmaS0+Y2ZpcS0+QmxvY2tFcmFzZVRpbWVvdXRUeXAgJiYKKwkJICAgIGNmaS0+Y2ZpcS0+QmxvY2tFcmFzZVRpbWVvdXRNYXgpCisJCQljZmktPmNoaXBzW2ldLmVyYXNlX3RpbWVfbWF4ID0KKwkJCQkxMDAwPDwoY2ZpLT5jZmlxLT5CbG9ja0VyYXNlVGltZW91dFR5cCArCisJCQkJICAgICAgIGNmaS0+Y2ZpcS0+QmxvY2tFcmFzZVRpbWVvdXRNYXgpOworCQllbHNlCisJCQljZmktPmNoaXBzW2ldLmVyYXNlX3RpbWVfbWF4ID0gMjAwMDAwMCAqIDg7CisKIAkJY2ZpLT5jaGlwc1tpXS5yZWZfcG9pbnRfY291bnRlciA9IDA7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJihjZmktPmNoaXBzW2ldLndxKSk7CiAJfQpAQCAtNzAzLDYgKzcyNSwxMCBAQAogCXN0cnVjdCBjZmlfcHJpX2ludGVsZXh0ICpjZmlwID0gY2ZpLT5jbWRzZXRfcHJpdjsKIAl1bnNpZ25lZCBsb25nIHRpbWVvID0gamlmZmllcyArIEhaOwogCisJLyogUHJldmVudCBzZXR0aW5nIHN0YXRlIEZMX1NZTkNJTkcgZm9yIGNoaXAgaW4gc3VzcGVuZGVkIHN0YXRlLiAqLworCWlmIChtb2RlID09IEZMX1NZTkNJTkcgJiYgY2hpcC0+b2xkc3RhdGUgIT0gRkxfUkVBRFkpCisJCWdvdG8gc2xlZXA7CisKIAlzd2l0Y2ggKGNoaXAtPnN0YXRlKSB7CiAKIAljYXNlIEZMX1NUQVRVUzoKQEAgLTgwOCw4ICs4MzQsOSBAQAogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCiAgcmV0cnk6Ci0JaWYgKGNoaXAtPnByaXYgJiYgKG1vZGUgPT0gRkxfV1JJVElORyB8fCBtb2RlID09IEZMX0VSQVNJTkcKLQkJCSAgIHx8IG1vZGUgPT0gRkxfT1RQX1dSSVRFIHx8IG1vZGUgPT0gRkxfU0hVVERPV04pKSB7CisJaWYgKGNoaXAtPnByaXYgJiYKKwkgICAgKG1vZGUgPT0gRkxfV1JJVElORyB8fCBtb2RlID09IEZMX0VSQVNJTkcgfHwgbW9kZSA9PSBGTF9PVFBfV1JJVEUKKwkgICAgfHwgbW9kZSA9PSBGTF9TSFVURE9XTikgJiYgY2hpcC0+c3RhdGUgIT0gRkxfU1lOQ0lORykgewogCQkvKgogCQkgKiBPSy4gV2UgaGF2ZSBwb3NzaWJpbGl0eSBmb3IgY29udGVudGlvbiBvbiB0aGUgd3JpdGUvZXJhc2UKIAkJICogb3BlcmF0aW9ucyB3aGljaCBhcmUgZ2xvYmFsIHRvIHRoZSByZWFsIGNoaXAgYW5kIG5vdCBwZXIKQEAgLTg1OSw2ICs4ODYsMTQgQEAKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQogCQkJc3Bpbl9sb2NrKCZzaGFyZWQtPmxvY2spOworCisJCQkvKiBXZSBzaG91bGQgbm90IG93biBjaGlwIGlmIGl0IGlzIGFscmVhZHkKKwkJCSAqIGluIEZMX1NZTkNJTkcgc3RhdGUuIFB1dCBjb250ZW5kZXIgYW5kIHJldHJ5LiAqLworCQkJaWYgKGNoaXAtPnN0YXRlID09IEZMX1NZTkNJTkcpIHsKKwkJCQlwdXRfY2hpcChtYXAsIGNvbnRlbmRlciwgY29udGVuZGVyLT5zdGFydCk7CisJCQkJc3Bpbl91bmxvY2soY29udGVuZGVyLT5tdXRleCk7CisJCQkJZ290byByZXRyeTsKKwkJCX0KIAkJCXNwaW5fdW5sb2NrKGNvbnRlbmRlci0+bXV0ZXgpOwogCQl9CiAKQEAgLTEwMTIsNyArMTA0Nyw3IEBACiAKIHN0YXRpYyBpbnQgX194aXByYW0geGlwX3dhaXRfZm9yX29wZXJhdGlvbigKIAkJc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsCi0JCXVuc2lnbmVkIGxvbmcgYWRyLCB1bnNpZ25lZCBpbnQgY2hpcF9vcF90aW1lICkKKwkJdW5zaWduZWQgbG9uZyBhZHIsIHVuc2lnbmVkIGludCBjaGlwX29wX3RpbWVfbWF4KQogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwogCXN0cnVjdCBjZmlfcHJpX2ludGVsZXh0ICpjZmlwID0gY2ZpLT5jbWRzZXRfcHJpdjsKQEAgLTEwMjEsNyArMTA1Niw3IEBACiAJZmxzdGF0ZV90IG9sZHN0YXRlLCBuZXdzdGF0ZTsKIAogICAgICAgIAlzdGFydCA9IHhpcF9jdXJydGltZSgpOwotCXVzZWMgPSBjaGlwX29wX3RpbWUgKiA4OworCXVzZWMgPSBjaGlwX29wX3RpbWVfbWF4OwogCWlmICh1c2VjID09IDApCiAJCXVzZWMgPSA1MDAwMDA7CiAJZG9uZSA9IDA7CkBAIC0xMTMxLDggKzExNjYsOCBAQAogI2RlZmluZSBYSVBfSU5WQUxfQ0FDSEVEX1JBTkdFKG1hcCwgZnJvbSwgc2l6ZSkgIFwKIAlJTlZBTElEQVRFX0NBQ0hFRF9SQU5HRShtYXAsIGZyb20sIHNpemUpCiAKLSNkZWZpbmUgSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBjbWRfYWRyLCBpbnZhbF9hZHIsIGludmFsX2xlbiwgdXNlYykgXAotCXhpcF93YWl0X2Zvcl9vcGVyYXRpb24obWFwLCBjaGlwLCBjbWRfYWRyLCB1c2VjKQorI2RlZmluZSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGNtZF9hZHIsIGludmFsX2FkciwgaW52YWxfbGVuLCB1c2VjLCB1c2VjX21heCkgXAorCXhpcF93YWl0X2Zvcl9vcGVyYXRpb24obWFwLCBjaGlwLCBjbWRfYWRyLCB1c2VjX21heCkKIAogI2Vsc2UKIApAQCAtMTE0NCw3ICsxMTc5LDcgQEAKIHN0YXRpYyBpbnQgaW52YWxfY2FjaGVfYW5kX3dhaXRfZm9yX29wZXJhdGlvbigKIAkJc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsCiAJCXVuc2lnbmVkIGxvbmcgY21kX2FkciwgdW5zaWduZWQgbG9uZyBpbnZhbF9hZHIsIGludCBpbnZhbF9sZW4sCi0JCXVuc2lnbmVkIGludCBjaGlwX29wX3RpbWUpCisJCXVuc2lnbmVkIGludCBjaGlwX29wX3RpbWUsIHVuc2lnbmVkIGludCBjaGlwX29wX3RpbWVfbWF4KQogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwogCW1hcF93b3JkIHN0YXR1cywgc3RhdHVzX09LID0gQ01EKDB4ODApOwpAQCAtMTE1Niw4ICsxMTkxLDcgQEAKIAkJSU5WQUxJREFURV9DQUNIRURfUkFOR0UobWFwLCBpbnZhbF9hZHIsIGludmFsX2xlbik7CiAJc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsKIAotCS8qIHNldCBvdXIgdGltZW91dCB0byA4IHRpbWVzIHRoZSBleHBlY3RlZCBkZWxheSAqLwotCXRpbWVvID0gY2hpcF9vcF90aW1lICogODsKKwl0aW1lbyA9IGNoaXBfb3BfdGltZV9tYXg7CiAJaWYgKCF0aW1lbykKIAkJdGltZW8gPSA1MDAwMDA7CiAJcmVzZXRfdGltZW8gPSB0aW1lbzsKQEAgLTEyMTcsOCArMTI1MSw4IEBACiAKICNlbmRpZgogCi0jZGVmaW5lIFdBSVRfVElNRU9VVChtYXAsIGNoaXAsIGFkciwgdWRlbGF5KSBcCi0JSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBhZHIsIDAsIDAsIHVkZWxheSk7CisjZGVmaW5lIFdBSVRfVElNRU9VVChtYXAsIGNoaXAsIGFkciwgdWRlbGF5LCB1ZGVsYXlfbWF4KSBcCisJSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBhZHIsIDAsIDAsIHVkZWxheSwgdWRlbGF5X21heCk7CiAKIAogc3RhdGljIGludCBkb19wb2ludF9vbmVjaGlwIChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwgbG9mZl90IGFkciwgc2l6ZV90IGxlbikKQEAgLTE0NTIsNyArMTQ4Niw4IEBACiAKIAlyZXQgPSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGFkciwKIAkJCQkgICBhZHIsIG1hcF9iYW5rd2lkdGgobWFwKSwKLQkJCQkgICBjaGlwLT53b3JkX3dyaXRlX3RpbWUpOworCQkJCSAgIGNoaXAtPndvcmRfd3JpdGVfdGltZSwKKwkJCQkgICBjaGlwLT53b3JkX3dyaXRlX3RpbWVfbWF4KTsKIAlpZiAocmV0KSB7CiAJCXhpcF9lbmFibGUobWFwLCBjaGlwLCBhZHIpOwogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB3b3JkIHdyaXRlIGVycm9yIChzdGF0dXMgdGltZW91dClcbiIsIG1hcC0+bmFtZSk7CkBAIC0xNjIzLDcgKzE2NTgsNyBAQAogCiAJY2hpcC0+c3RhdGUgPSBGTF9XUklUSU5HX1RPX0JVRkZFUjsKIAltYXBfd3JpdGUobWFwLCB3cml0ZV9jbWQsIGNtZF9hZHIpOwotCXJldCA9IFdBSVRfVElNRU9VVChtYXAsIGNoaXAsIGNtZF9hZHIsIDApOworCXJldCA9IFdBSVRfVElNRU9VVChtYXAsIGNoaXAsIGNtZF9hZHIsIDAsIDApOwogCWlmIChyZXQpIHsKIAkJLyogQXJnaC4gTm90IHJlYWR5IGZvciB3cml0ZSB0byBidWZmZXIgKi8KIAkJbWFwX3dvcmQgWHN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgY21kX2Fkcik7CkBAIC0xNjQwLDcgKzE2NzUsNyBAQAogCiAJLyogRmlndXJlIG91dCB0aGUgbnVtYmVyIG9mIHdvcmRzIHRvIHdyaXRlICovCiAJd29yZF9nYXAgPSAoLWFkciAmIChtYXBfYmFua3dpZHRoKG1hcCktMSkpOwotCXdvcmRzID0gKGxlbiAtIHdvcmRfZ2FwICsgbWFwX2Jhbmt3aWR0aChtYXApIC0gMSkgLyBtYXBfYmFua3dpZHRoKG1hcCk7CisJd29yZHMgPSBESVZfUk9VTkRfVVAobGVuIC0gd29yZF9nYXAsIG1hcF9iYW5rd2lkdGgobWFwKSk7CiAJaWYgKCF3b3JkX2dhcCkgewogCQl3b3Jkcy0tOwogCX0gZWxzZSB7CkBAIC0xNjkyLDcgKzE3MjcsOCBAQAogCiAJcmV0ID0gSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBjbWRfYWRyLAogCQkJCSAgIGluaXRpYWxfYWRyLCBpbml0aWFsX2xlbiwKLQkJCQkgICBjaGlwLT5idWZmZXJfd3JpdGVfdGltZSk7CisJCQkJICAgY2hpcC0+YnVmZmVyX3dyaXRlX3RpbWUsCisJCQkJICAgY2hpcC0+YnVmZmVyX3dyaXRlX3RpbWVfbWF4KTsKIAlpZiAocmV0KSB7CiAJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgY21kX2Fkcik7CiAJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwpAQCAtMTgyNyw3ICsxODYzLDggQEAKIAogCXJldCA9IElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgYWRyLAogCQkJCSAgIGFkciwgbGVuLAotCQkJCSAgIGNoaXAtPmVyYXNlX3RpbWUpOworCQkJCSAgIGNoaXAtPmVyYXNlX3RpbWUsCisJCQkJICAgY2hpcC0+ZXJhc2VfdGltZV9tYXgpOwogCWlmIChyZXQpIHsKIAkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBhZHIpOwogCQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKQEAgLTIwMDYsNyArMjA0Myw3IEBACiAJICovCiAJdWRlbGF5ID0gKCFleHRwIHx8ICEoZXh0cC0+RmVhdHVyZVN1cHBvcnQgJiAoMSA8PCA1KSkpID8gMTAwMDAwMC9IWiA6IDA7CiAKLQlyZXQgPSBXQUlUX1RJTUVPVVQobWFwLCBjaGlwLCBhZHIsIHVkZWxheSk7CisJcmV0ID0gV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgYWRyLCB1ZGVsYXksIHVkZWxheSAqIDEwMCk7CiAJaWYgKHJldCkgewogCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGFkcik7CiAJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYwppbmRleCBhOTcyY2M2Li4zZTZmNWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYwpAQCAtMTMsNiArMTMsOCBAQAogICogWElQIHN1cHBvcnQgaG9va3MgYnkgVml0YWx5IFdvb2wgKGJhc2VkIG9uIGNvZGUgZm9yIEludGVsIGZsYXNoCiAgKiBieSBOaWNvbGFzIFBpdHJlKQogICoKKyAqIDI1LzA5LzIwMDggQ2hyaXN0b3BoZXIgTW9vcmU6IFRvcEJvdHRvbSBmaXh1cCBmb3IgbWFueSBNYWNyb25peCB3aXRoIENGSSBWMS4wCisgKgogICogT2NjYXNpb25hbGx5IG1haW50YWluZWQgYnkgVGhheW5lIEhhcmJhdWdoIHRoYXJiYXVnaCBhdCBsbnhpIGRvdCBjb20KICAqCiAgKiBUaGlzIGNvZGUgaXMgR1BMCkBAIC00Myw2ICs0NSw3IEBACiAKICNkZWZpbmUgTUFOVUZBQ1RVUkVSX0FNRAkweDAwMDEKICNkZWZpbmUgTUFOVUZBQ1RVUkVSX0FUTUVMCTB4MDAxRgorI2RlZmluZSBNQU5VRkFDVFVSRVJfTUFDUk9OSVgJMHgwMEMyCiAjZGVmaW5lIE1BTlVGQUNUVVJFUl9TU1QJMHgwMEJGCiAjZGVmaW5lIFNTVDQ5TEYwMDRCCSAgICAgICAgMHgwMDYwCiAjZGVmaW5lIFNTVDQ5TEYwNDBCCSAgICAgICAgMHgwMDUwCkBAIC0xNDQsMTIgKzE0Nyw0NCBAQAogCiAJaWYgKCgobWFqb3IgPDwgOCkgfCBtaW5vcikgPCAweDMxMzEpIHsKIAkJLyogQ0ZJIHZlcnNpb24gMS4wID0+IGRvbid0IHRydXN0IGJvb3Rsb2MgKi8KKworCQlERUJVRyhNVERfREVCVUdfTEVWRUwxLAorCQkJIiVzOiBKRURFQyBWZW5kb3IgSUQgaXMgMHglMDJYIERldmljZSBJRCBpcyAweCUwMlhcbiIsCisJCQltYXAtPm5hbWUsIGNmaS0+bWZyLCBjZmktPmlkKTsKKworCQkvKiBBRkFJQ1MgYWxsIDI5TFY0MDAgd2l0aCBhIGJvdHRvbSBib290IGJsb2NrIGhhdmUgYSBkZXZpY2UgSUQKKwkJICogb2YgMHgyMkJBIGluIDE2LWJpdCBtb2RlIGFuZCAweEJBIGluIDgtYml0IG1vZGUuCisJCSAqIFRoZXNlIHdlcmUgYmFkbHkgZGV0ZWN0ZWQgYXMgdGhleSBoYXZlIHRoZSAweDgwIGJpdCBzZXQKKwkJICogc28gdHJlYXQgdGhlbSBhcyBhIHNwZWNpYWwgY2FzZS4KKwkJICovCisJCWlmICgoKGNmaS0+aWQgPT0gMHhCQSkgfHwgKGNmaS0+aWQgPT0gMHgyMkJBKSkgJiYKKworCQkJLyogTWFjcm9uaXggYWRkZWQgQ0ZJIHRvIHRoZWlyIDJuZCBnZW5lcmF0aW9uCisJCQkgKiBNWDI5TFY0MDBDIEIvVCBidXQgQUZBSUNTIG5vIG90aGVyIDI5TFY0MDAgKEFNRCwKKwkJCSAqIEZ1aml0c3UsIFNwYW5zaW9uLCBFT04sIEVTSSBhbmQgb2xkZXIgTWFjcm9uaXgpCisJCQkgKiBoYXMgQ0ZJLgorCQkJICoKKwkJCSAqIFRoZXJlZm9yZSBhbHNvIGNoZWNrIHRoZSBtYW51ZmFjdHVyZXIuCisJCQkgKiBUaGlzIHJlZHVjZXMgdGhlIHJpc2sgb2YgZmFsc2UgZGV0ZWN0aW9uIGR1ZSB0bworCQkJICogdGhlIDgtYml0IGRldmljZSBJRC4KKwkJCSAqLworCQkJKGNmaS0+bWZyID09IE1BTlVGQUNUVVJFUl9NQUNST05JWCkpIHsKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDEsCisJCQkJIiVzOiBNYWNyb25peCBNWDI5TFY0MDBDIHdpdGggYm90dG9tIGJvb3QgYmxvY2siCisJCQkJIiBkZXRlY3RlZFxuIiwgbWFwLT5uYW1lKTsKKwkJCWV4dHAtPlRvcEJvdHRvbSA9IDI7CS8qIGJvdHRvbSBib290ICovCisJCX0gZWxzZQogCQlpZiAoY2ZpLT5pZCAmIDB4ODApIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBKRURFQyBEZXZpY2UgSUQgaXMgMHglMDJYLiBBc3N1bWluZyBicm9rZW4gQ0ZJIHRhYmxlLlxuIiwgbWFwLT5uYW1lLCBjZmktPmlkKTsKIAkJCWV4dHAtPlRvcEJvdHRvbSA9IDM7CS8qIHRvcCBib290ICovCiAJCX0gZWxzZSB7CiAJCQlleHRwLT5Ub3BCb3R0b20gPSAyOwkvKiBib3R0b20gYm9vdCAqLwogCQl9CisKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMSwKKwkJCSIlczogQU1EIENGSSBQUkkgViVjLiVjIGhhcyBubyBib290IGJsb2NrIGZpZWxkOyIKKwkJCSIgZGVkdWNlZCAlcyBmcm9tIERldmljZSBJRFxuIiwgbWFwLT5uYW1lLCBtYWpvciwgbWlub3IsCisJCQlleHRwLT5Ub3BCb3R0b20gPT0gMiA/ICJib3R0b20iIDogInRvcCIpOwogCX0KIH0KICNlbmRpZgpAQCAtMTc4LDEwICsyMTMsMTggQEAKIAlpZiAoYXRtZWxfcHJpLkZlYXR1cmVzICYgMHgwMikKIAkJZXh0cC0+RXJhc2VTdXNwZW5kID0gMjsKIAotCWlmIChhdG1lbF9wcmkuQm90dG9tQm9vdCkKLQkJZXh0cC0+VG9wQm90dG9tID0gMjsKLQllbHNlCi0JCWV4dHAtPlRvcEJvdHRvbSA9IDM7CisJLyogU29tZSBjaGlwcyBnb3QgaXQgYmFja3dhcmRzLi4uICovCisJaWYgKGNmaS0+aWQgPT0gQVQ0OUJWNjQxNikgeworCQlpZiAoYXRtZWxfcHJpLkJvdHRvbUJvb3QpCisJCQlleHRwLT5Ub3BCb3R0b20gPSAzOworCQllbHNlCisJCQlleHRwLT5Ub3BCb3R0b20gPSAyOworCX0gZWxzZSB7CisJCWlmIChhdG1lbF9wcmkuQm90dG9tQm9vdCkKKwkJCWV4dHAtPlRvcEJvdHRvbSA9IDI7CisJCWVsc2UKKwkJCWV4dHAtPlRvcEJvdHRvbSA9IDM7CisJfQogCiAJLyogYnVyc3Qgd3JpdGUgbW9kZSBub3Qgc3VwcG9ydGVkICovCiAJY2ZpLT5jZmlxLT5CdWZXcml0ZVRpbWVvdXRUeXAgPSAwOwpAQCAtMjQzLDYgKzI4Niw3IEBACiAJeyBDRklfTUZSX0FUTUVMLCBDRklfSURfQU5ZLCBmaXh1cF9jb252ZXJ0X2F0bWVsX3ByaSwgTlVMTCB9LAogI2lmZGVmIEFNRF9CT09UTE9DX0JVRwogCXsgQ0ZJX01GUl9BTUQsIENGSV9JRF9BTlksIGZpeHVwX2FtZF9ib290YmxvY2ssIE5VTEwgfSwKKwl7IE1BTlVGQUNUVVJFUl9NQUNST05JWCwgQ0ZJX0lEX0FOWSwgZml4dXBfYW1kX2Jvb3RibG9jaywgTlVMTCB9LAogI2VuZGlmCiAJeyBDRklfTUZSX0FNRCwgMHgwMDUwLCBmaXh1cF91c2Vfc2Vjc2ksIE5VTEwsIH0sCiAJeyBDRklfTUZSX0FNRCwgMHgwMDUzLCBmaXh1cF91c2Vfc2Vjc2ksIE5VTEwsIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jCmluZGV4IGM0MThlOTIuLmU2M2U2NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jCkBAIC00NCwxNyArNDQsMTQgQEAKIAogI2RlZmluZSB4aXBfZW5hYmxlKGJhc2UsIG1hcCwgY2ZpKSBcCiBkbyB7IFwKLQljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsgXAotCWNmaV9zZW5kX2dlbl9jbWQoMHhGRiwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOyBcCisJY2ZpX3FyeV9tb2RlX29mZihiYXNlLCBtYXAsIGNmaSk7CQlcCiAJeGlwX2FsbG93ZWQoYmFzZSwgbWFwKTsgXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSB4aXBfZGlzYWJsZV9xcnkoYmFzZSwgbWFwLCBjZmkpIFwKIGRvIHsgXAogCXhpcF9kaXNhYmxlKCk7IFwKLQljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsgXAotCWNmaV9zZW5kX2dlbl9jbWQoMHhGRiwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOyBcCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweDk4LCAweDU1LCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7IFwKKwljZmlfcXJ5X21vZGVfb24oYmFzZSwgbWFwLCBjZmkpOyBcCiB9IHdoaWxlICgwKQogCiAjZWxzZQpAQCAtNzAsMzIgKzY3LDYgQEAKICAgIGluOiBpbnRlcmxlYXZlLHR5cGUsbW9kZQogICAgcmV0OiB0YWJsZSBpbmRleCwgPDAgZm9yIGVycm9yCiAgKi8KLXN0YXRpYyBpbnQgX194aXByYW0gcXJ5X3ByZXNlbnQoc3RydWN0IG1hcF9pbmZvICptYXAsIF9fdTMyIGJhc2UsCi0JCQkJc3RydWN0IGNmaV9wcml2YXRlICpjZmkpCi17Ci0JaW50IG9zZiA9IGNmaS0+aW50ZXJsZWF2ZSAqIGNmaS0+ZGV2aWNlX3R5cGU7CS8vIHNjYWxlIGZhY3RvcgotCW1hcF93b3JkIHZhbFszXTsKLQltYXBfd29yZCBxcnlbM107Ci0KLQlxcnlbMF0gPSBjZmlfYnVpbGRfY21kKCdRJywgbWFwLCBjZmkpOwotCXFyeVsxXSA9IGNmaV9idWlsZF9jbWQoJ1InLCBtYXAsIGNmaSk7Ci0JcXJ5WzJdID0gY2ZpX2J1aWxkX2NtZCgnWScsIG1hcCwgY2ZpKTsKLQotCXZhbFswXSA9IG1hcF9yZWFkKG1hcCwgYmFzZSArIG9zZioweDEwKTsKLQl2YWxbMV0gPSBtYXBfcmVhZChtYXAsIGJhc2UgKyBvc2YqMHgxMSk7Ci0JdmFsWzJdID0gbWFwX3JlYWQobWFwLCBiYXNlICsgb3NmKjB4MTIpOwotCi0JaWYgKCFtYXBfd29yZF9lcXVhbChtYXAsIHFyeVswXSwgdmFsWzBdKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIW1hcF93b3JkX2VxdWFsKG1hcCwgcXJ5WzFdLCB2YWxbMV0pKQotCQlyZXR1cm4gMDsKLQotCWlmICghbWFwX3dvcmRfZXF1YWwobWFwLCBxcnlbMl0sIHZhbFsyXSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7IAkvLyAiUVJZIiBmb3VuZAotfQogCiBzdGF0aWMgaW50IF9feGlwcmFtIGNmaV9wcm9iZV9jaGlwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBfX3UzMiBiYXNlLAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmNoaXBfbWFwLCBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSkKQEAgLTExNiwxMSArODcsNyBAQAogCX0KIAogCXhpcF9kaXNhYmxlKCk7Ci0JY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Ci0JY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Ci0JY2ZpX3NlbmRfZ2VuX2NtZCgweDk4LCAweDU1LCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Ci0KLQlpZiAoIXFyeV9wcmVzZW50KG1hcCxiYXNlLGNmaSkpIHsKKwlpZiAoIWNmaV9xcnlfbW9kZV9vbihiYXNlLCBtYXAsIGNmaSkpIHsKIAkJeGlwX2VuYWJsZShiYXNlLCBtYXAsIGNmaSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTE0MSwxNCArMTA4LDEzIEBACiAgCQlzdGFydCA9IGkgPDwgY2ZpLT5jaGlwc2hpZnQ7CiAJCS8qIFRoaXMgY2hpcCBzaG91bGQgYmUgaW4gcmVhZCBtb2RlIGlmIGl0J3Mgb25lCiAJCSAgIHdlJ3ZlIGFscmVhZHkgdG91Y2hlZC4gKi8KLQkJaWYgKHFyeV9wcmVzZW50KG1hcCwgc3RhcnQsIGNmaSkpIHsKKwkJaWYgKGNmaV9xcnlfcHJlc2VudChtYXAsIHN0YXJ0LCBjZmkpKSB7CiAJCQkvKiBFZXAuIFRoaXMgY2hpcCBhbHNvIGhhZCB0aGUgUVJZIG1hcmtlci4KIAkJCSAqIElzIGl0IGFuIGFsaWFzIGZvciB0aGUgbmV3IG9uZT8gKi8KLQkJCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgc3RhcnQsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQkJCWNmaV9zZW5kX2dlbl9jbWQoMHhGRiwgMCwgc3RhcnQsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwkJCWNmaV9xcnlfbW9kZV9vZmYoc3RhcnQsIG1hcCwgY2ZpKTsKIAogCQkJLyogSWYgdGhlIFFSWSBtYXJrZXIgZ29lcyBhd2F5LCBpdCdzIGFuIGFsaWFzICovCi0JCQlpZiAoIXFyeV9wcmVzZW50KG1hcCwgc3RhcnQsIGNmaSkpIHsKKwkJCWlmICghY2ZpX3FyeV9wcmVzZW50KG1hcCwgc3RhcnQsIGNmaSkpIHsKIAkJCQl4aXBfYWxsb3dlZChiYXNlLCBtYXApOwogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogRm91bmQgYW4gYWxpYXMgYXQgMHgleCBmb3IgdGhlIGNoaXAgYXQgMHglbHhcbiIsCiAJCQkJICAgICAgIG1hcC0+bmFtZSwgYmFzZSwgc3RhcnQpOwpAQCAtMTU4LDEwICsxMjQsOSBAQAogCQkJICogdW5mb3J0dW5hdGUuIFN0aWNrIHRoZSBuZXcgY2hpcCBpbiByZWFkIG1vZGUKIAkJCSAqIHRvbyBhbmQgaWYgaXQncyB0aGUgc2FtZSwgYXNzdW1lIGl0J3MgYW4gYWxpYXMuICovCiAJCQkvKiBGSVhNRTogVXNlIG90aGVyIG1vZGVzIHRvIGRvIGEgcHJvcGVyIGNoZWNrICovCi0JCQljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQkJCWNmaV9zZW5kX2dlbl9jbWQoMHhGRiwgMCwgc3RhcnQsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwkJCWNmaV9xcnlfbW9kZV9vZmYoYmFzZSwgbWFwLCBjZmkpOwogCi0JCQlpZiAocXJ5X3ByZXNlbnQobWFwLCBiYXNlLCBjZmkpKSB7CisJCQlpZiAoY2ZpX3FyeV9wcmVzZW50KG1hcCwgYmFzZSwgY2ZpKSkgewogCQkJCXhpcF9hbGxvd2VkKGJhc2UsIG1hcCk7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGb3VuZCBhbiBhbGlhcyBhdCAweCV4IGZvciB0aGUgY2hpcCBhdCAweCVseFxuIiwKIAkJCQkgICAgICAgbWFwLT5uYW1lLCBiYXNlLCBzdGFydCk7CkBAIC0xNzYsOCArMTQxLDcgQEAKIAljZmktPm51bWNoaXBzKys7CiAKIAkvKiBQdXQgaXQgYmFjayBpbnRvIFJlYWQgTW9kZSAqLwotCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwotCWNmaV9zZW5kX2dlbl9jbWQoMHhGRiwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWNmaV9xcnlfbW9kZV9vZmYoYmFzZSwgbWFwLCBjZmkpOwogCXhpcF9hbGxvd2VkKGJhc2UsIG1hcCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogRm91bmQgJWQgeCVkIGRldmljZXMgYXQgMHgleCBpbiAlZC1iaXQgYmFua1xuIiwKQEAgLTIzNyw5ICsyMDEsNyBAQAogCQkJICBjZmlfcmVhZF9xdWVyeShtYXAsIGJhc2UgKyAweGYgKiBvZnNfZmFjdG9yKTsKIAogCS8qIFB1dCBpdCBiYWNrIGludG8gUmVhZCBNb2RlICovCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Ci0JLyogLi4uIGV2ZW4gaWYgaXQncyBhbiBJbnRlbCBjaGlwICovCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweEZGLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3FyeV9tb2RlX29mZihiYXNlLCBtYXAsIGNmaSk7CiAJeGlwX2FsbG93ZWQoYmFzZSwgbWFwKTsKIAogCS8qIERvIGFueSBuZWNlc3NhcnkgYnl0ZXN3YXBwaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfdXRpbC5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYwppbmRleCAwZWU0NTcwLi4zNGQ0MGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfdXRpbC5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMKQEAgLTI0LDYgKzI0LDY2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL2NmaS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXRtYWMuaD4KIAoraW50IF9feGlwcmFtIGNmaV9xcnlfcHJlc2VudChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgX191MzIgYmFzZSwKKwkJCSAgICAgc3RydWN0IGNmaV9wcml2YXRlICpjZmkpCit7CisJaW50IG9zZiA9IGNmaS0+aW50ZXJsZWF2ZSAqIGNmaS0+ZGV2aWNlX3R5cGU7CS8qIHNjYWxlIGZhY3RvciAqLworCW1hcF93b3JkIHZhbFszXTsKKwltYXBfd29yZCBxcnlbM107CisKKwlxcnlbMF0gPSBjZmlfYnVpbGRfY21kKCdRJywgbWFwLCBjZmkpOworCXFyeVsxXSA9IGNmaV9idWlsZF9jbWQoJ1InLCBtYXAsIGNmaSk7CisJcXJ5WzJdID0gY2ZpX2J1aWxkX2NtZCgnWScsIG1hcCwgY2ZpKTsKKworCXZhbFswXSA9IG1hcF9yZWFkKG1hcCwgYmFzZSArIG9zZioweDEwKTsKKwl2YWxbMV0gPSBtYXBfcmVhZChtYXAsIGJhc2UgKyBvc2YqMHgxMSk7CisJdmFsWzJdID0gbWFwX3JlYWQobWFwLCBiYXNlICsgb3NmKjB4MTIpOworCisJaWYgKCFtYXBfd29yZF9lcXVhbChtYXAsIHFyeVswXSwgdmFsWzBdKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW1hcF93b3JkX2VxdWFsKG1hcCwgcXJ5WzFdLCB2YWxbMV0pKQorCQlyZXR1cm4gMDsKKworCWlmICghbWFwX3dvcmRfZXF1YWwobWFwLCBxcnlbMl0sIHZhbFsyXSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7IAkvKiAiUVJZIiBmb3VuZCAqLworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZpX3FyeV9wcmVzZW50KTsKKworaW50IF9feGlwcmFtIGNmaV9xcnlfbW9kZV9vbih1aW50MzJfdCBiYXNlLCBzdHJ1Y3QgbWFwX2luZm8gKm1hcCwKKwkJCSAgICAgc3RydWN0IGNmaV9wcml2YXRlICpjZmkpCit7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweDk4LCAweDU1LCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJaWYgKGNmaV9xcnlfcHJlc2VudChtYXAsIGJhc2UsIGNmaSkpCisJCXJldHVybiAxOworCS8qIFFSWSBub3QgZm91bmQgcHJvYmFibHkgd2UgZGVhbCB3aXRoIHNvbWUgb2RkIENGSSBjaGlwcyAqLworCS8qIFNvbWUgcmV2aXNpb25zIG9mIHNvbWUgb2xkIEludGVsIGNoaXBzPyAqLworCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWNmaV9zZW5kX2dlbl9jbWQoMHhGRiwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWNmaV9zZW5kX2dlbl9jbWQoMHg5OCwgMHg1NSwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWlmIChjZmlfcXJ5X3ByZXNlbnQobWFwLCBiYXNlLCBjZmkpKQorCQlyZXR1cm4gMTsKKwkvKiBTVCBNMjlEVyBjaGlwcyAqLworCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWNmaV9zZW5kX2dlbl9jbWQoMHg5OCwgMHg1NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwlpZiAoY2ZpX3FyeV9wcmVzZW50KG1hcCwgYmFzZSwgY2ZpKSkKKwkJcmV0dXJuIDE7CisJLyogUVJZIG5vdCBmb3VuZCAqLworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZpX3FyeV9tb2RlX29uKTsKKwordm9pZCBfX3hpcHJhbSBjZmlfcXJ5X21vZGVfb2ZmKHVpbnQzMl90IGJhc2UsIHN0cnVjdCBtYXBfaW5mbyAqbWFwLAorCQkJICAgICAgIHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpKQoreworCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWNmaV9zZW5kX2dlbl9jbWQoMHhGRiwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZpX3FyeV9tb2RlX29mZik7CisKIHN0cnVjdCBjZmlfZXh0cXVlcnkgKgogX194aXByYW0gY2ZpX3JlYWRfcHJpKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBfX3UxNiBhZHIsIF9fdTE2IHNpemUsIGNvbnN0IGNoYXIqIG5hbWUpCiB7CkBAIC00OCw4ICsxMDgsNyBAQAogI2VuZGlmCiAKIAkvKiBTd2l0Y2ggaXQgaW50byBRdWVyeSBNb2RlICovCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweDk4LCAweDU1LCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Ci0KKwljZmlfcXJ5X21vZGVfb24oYmFzZSwgbWFwLCBjZmkpOwogCS8qIFJlYWQgaW4gdGhlIEV4dGVuZGVkIFF1ZXJ5IFRhYmxlICovCiAJZm9yIChpPTA7IGk8c2l6ZTsgaSsrKSB7CiAJCSgodW5zaWduZWQgY2hhciAqKWV4dHApW2ldID0KQEAgLTU3LDggKzExNiw3IEBACiAJfQogCiAJLyogTWFrZSBzdXJlIGl0IHJldHVybnMgdG8gcmVhZCBtb2RlICovCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweGYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Ci0JY2ZpX3NlbmRfZ2VuX2NtZCgweGZmLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3FyeV9tb2RlX29mZihiYXNlLCBtYXAsIGNmaSk7CiAKICNpZmRlZiBDT05GSUdfTVREX1hJUAogCSh2b2lkKSBtYXBfcmVhZChtYXAsIGJhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvZ2VuX3Byb2JlLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9nZW5fcHJvYmUuYwppbmRleCBmMDYxODg1Li5lMmRjOTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9nZW5fcHJvYmUuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9nZW5fcHJvYmUuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJCW1heF9jaGlwcyA9IDE7CiAJfQogCi0JbWFwc2l6ZSA9IHNpemVvZihsb25nKSAqICggKG1heF9jaGlwcyArIEJJVFNfUEVSX0xPTkctMSkgLyBCSVRTX1BFUl9MT05HICk7CisJbWFwc2l6ZSA9IHNpemVvZihsb25nKSAqIERJVl9ST1VORF9VUChtYXhfY2hpcHMsIEJJVFNfUEVSX0xPTkcpOwogCWNoaXBfbWFwID0ga3phbGxvYyhtYXBzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNoaXBfbWFwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBrbWFsbG9jIGZhaWxlZCBmb3IgQ0ZJIGNoaXAgbWFwXG4iLCBtYXAtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY21kbGluZXBhcnQuYyBiL2RyaXZlcnMvbXRkL2NtZGxpbmVwYXJ0LmMKaW5kZXggNzFiYzA3Zi4uNTBhMzQwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY21kbGluZXBhcnQuYworKysgYi9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jCkBAIC03LDYgKzcsNyBAQAogICoKICAqIG10ZHBhcnRzPTxtdGRkZWY+Wzs8bXRkZGVmXQogICogPG10ZGRlZj4gIDo9IDxtdGQtaWQ+OjxwYXJ0ZGVmPlssPHBhcnRkZWY+XQorICogICAgICAgICAgICAgIHdoZXJlIDxtdGQtaWQ+IGlzIHRoZSBuYW1lIGZyb20gdGhlICJjYXQgL3Byb2MvbXRkIiBjb21tYW5kCiAgKiA8cGFydGRlZj4gOj0gPHNpemU+W0BvZmZzZXRdWzxuYW1lPl1bcm9dW2xrXQogICogPG10ZC1pZD4gIDo9IHVuaXF1ZSBuYW1lIHVzZWQgaW4gbWFwcGluZyBkcml2ZXIvZGV2aWNlIChtdGQtPm5hbWUpCiAgKiA8c2l6ZT4gICAgOj0gc3RhbmRhcmQgbGludXggbWVtc2l6ZSBPUiAiLSIgdG8gZGVub3RlIGFsbCByZW1haW5pbmcgc3BhY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwppbmRleCA5YzYxM2YwLi42ZmRlMGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCkBAIC01OSw2ICs1OSwyNyBAQAogCSAgU29tZXRpbWVzIERhdGFGbGFzaCBjaGlwcyBhcmUgcGFja2FnZWQgaW5zaWRlIE1NQy1mb3JtYXQKIAkgIGNhcmRzOyBhdCB0aGlzIHdyaXRpbmcsIHRoZSBNTUMgc3RhY2sgd29uJ3QgaGFuZGxlIHRob3NlLgogCitjb25maWcgTVREX0RBVEFGTEFTSF9XUklURV9WRVJJRlkKKwlib29sICJWZXJpZnkgRGF0YUZsYXNoIHBhZ2Ugd3JpdGVzIgorCWRlcGVuZHMgb24gTVREX0RBVEFGTEFTSAorCWhlbHAKKwkgIFRoaXMgYWRkcyBhbiBleHRyYSBjaGVjayB3aGVuIGRhdGEgaXMgd3JpdHRlbiB0byB0aGUgZmxhc2guCisJICBJdCBtYXkgaGVscCBpZiB5b3UgYXJlIHZlcmlmeWluZyBjaGlwIHNldHVwICh0aW1pbmdzIGV0Yykgb24KKwkgIHlvdXIgYm9hcmQuICBUaGVyZSBpcyBhIHJhcmUgcG9zc2liaWxpdHkgdGhhdCBldmVuIHRob3VnaCB0aGUKKwkgIGRldmljZSB0aGlua3MgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLCBhIGJpdCBjb3VsZCBoYXZlIGJlZW4KKwkgIGZsaXBwZWQgYWNjaWRlbnRhbGx5IGR1ZSB0byBkZXZpY2Ugd2VhciBvciBzb21ldGhpbmcgZWxzZS4KKworY29uZmlnIE1URF9EQVRBRkxBU0hfT1RQCisJYm9vbCAiRGF0YUZsYXNoIE9UUCBzdXBwb3J0IChTZWN1cml0eSBSZWdpc3RlcikiCisJZGVwZW5kcyBvbiBNVERfREFUQUZMQVNICisJc2VsZWN0IEhBVkVfTVREX09UUAorCWhlbHAKKwkgIE5ld2VyIERhdGFGbGFzaCBjaGlwcyAocmV2aXNpb25zIEMgYW5kIEQpIHN1cHBvcnQgMTI4IGJ5dGVzIG9mCisJICBvbmUtdGltZS1wcm9ncmFtbWFibGUgKE9UUCkgZGF0YS4gIFRoZSBmaXJzdCBoYWxmIG1heSBiZSB3cml0dGVuCisJICAob25jZSkgd2l0aCB1cCB0byA2NCBieXRlcyBvZiBkYXRhLCBzdWNoIGFzIGEgc2VyaWFsIG51bWJlciBvcgorCSAgb3RoZXIga2V5IHByb2R1Y3QgZGF0YS4gIFRoZSBzZWNvbmQgaGFsZiBpcyBwcm9ncmFtbWVkIHdpdGggYQorCSAgdW5pcXVlLXRvLWVhY2gtY2hpcCBiaXQgcGF0dGVybiBhdCB0aGUgZmFjdG9yeS4KKwogY29uZmlnIE1URF9NMjVQODAKIAl0cmlzdGF0ZSAiU3VwcG9ydCBtb3N0IFNQSSBGbGFzaCBjaGlwcyAoQVQyNkRGLCBNMjVQLCBXMjVYLCAuLi4pIgogCWRlcGVuZHMgb24gU1BJX01BU1RFUiAmJiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCmluZGV4IGIzNWMzMzMuLjc2YTc2NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwpAQCAtMzksNiArMzksNyBAQAogI2RlZmluZQlPUENPREVfUFAJCTB4MDIJLyogUGFnZSBwcm9ncmFtICh1cCB0byAyNTYgYnl0ZXMpICovCiAjZGVmaW5lCU9QQ09ERV9CRV80SyAJCTB4MjAJLyogRXJhc2UgNEtpQiBibG9jayAqLwogI2RlZmluZQlPUENPREVfQkVfMzJLCQkweDUyCS8qIEVyYXNlIDMyS2lCIGJsb2NrICovCisjZGVmaW5lCU9QQ09ERV9CRQkJMHhjNwkvKiBFcmFzZSB3aG9sZSBmbGFzaCBibG9jayAqLwogI2RlZmluZQlPUENPREVfU0UJCTB4ZDgJLyogU2VjdG9yIGVyYXNlICh1c3VhbGx5IDY0S2lCKSAqLwogI2RlZmluZQlPUENPREVfUkRJRAkJMHg5ZgkvKiBSZWFkIEpFREVDIElEICovCiAKQEAgLTE2MSw2ICsxNjIsMzEgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoKKyAqIEVyYXNlIHRoZSB3aG9sZSBmbGFzaCBtZW1vcnkKKyAqCisgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgbm9uLXplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGVyYXNlX2Jsb2NrKHN0cnVjdCBtMjVwICpmbGFzaCkKK3sKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiJXM6ICVzICVkS2lCXG4iLAorCQkJZmxhc2gtPnNwaS0+ZGV2LmJ1c19pZCwgX19mdW5jX18sCisJCQlmbGFzaC0+bXRkLnNpemUgLyAxMDI0KTsKKworCS8qIFdhaXQgdW50aWwgZmluaXNoZWQgcHJldmlvdXMgd3JpdGUgY29tbWFuZC4gKi8KKwlpZiAod2FpdF90aWxsX3JlYWR5KGZsYXNoKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBTZW5kIHdyaXRlIGVuYWJsZSwgdGhlbiBlcmFzZSBjb21tYW5kcy4gKi8KKwl3cml0ZV9lbmFibGUoZmxhc2gpOworCisJLyogU2V0IHVwIGNvbW1hbmQgYnVmZmVyLiAqLworCWZsYXNoLT5jb21tYW5kWzBdID0gT1BDT0RFX0JFOworCisJc3BpX3dyaXRlKGZsYXNoLT5zcGksIGZsYXNoLT5jb21tYW5kLCAxKTsKKworCXJldHVybiAwOworfQogCiAvKgogICogRXJhc2Ugb25lIHNlY3RvciBvZiBmbGFzaCBtZW1vcnkgYXQgb2Zmc2V0IGBgb2Zmc2V0Jycgd2hpY2ggaXMgYW55CkBAIC0yMjksMTUgKzI1NSwyMSBAQAogCSAqLwogCiAJLyogbm93IGVyYXNlIHRob3NlIHNlY3RvcnMgKi8KLQl3aGlsZSAobGVuKSB7Ci0JCWlmIChlcmFzZV9zZWN0b3IoZmxhc2gsIGFkZHIpKSB7Ci0JCQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRkFJTEVEOwotCQkJbXV0ZXhfdW5sb2NrKCZmbGFzaC0+bG9jayk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQorCWlmIChsZW4gPT0gZmxhc2gtPm10ZC5zaXplICYmIGVyYXNlX2Jsb2NrKGZsYXNoKSkgeworCQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRkFJTEVEOworCQltdXRleF91bmxvY2soJmZsYXNoLT5sb2NrKTsKKwkJcmV0dXJuIC1FSU87CisJfSBlbHNlIHsKKwkJd2hpbGUgKGxlbikgeworCQkJaWYgKGVyYXNlX3NlY3RvcihmbGFzaCwgYWRkcikpIHsKKwkJCQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRkFJTEVEOworCQkJCW11dGV4X3VubG9jaygmZmxhc2gtPmxvY2spOworCQkJCXJldHVybiAtRUlPOworCQkJfQogCi0JCWFkZHIgKz0gbXRkLT5lcmFzZXNpemU7Ci0JCWxlbiAtPSBtdGQtPmVyYXNlc2l6ZTsKKwkJCWFkZHIgKz0gbXRkLT5lcmFzZXNpemU7CisJCQlsZW4gLT0gbXRkLT5lcmFzZXNpemU7CisJCX0KIAl9CiAKIAltdXRleF91bmxvY2soJmZsYXNoLT5sb2NrKTsKQEAgLTQzNyw2ICs0NjksNyBAQAogCSAqIHRoZW4gYSB0d28gYnl0ZSBkZXZpY2UgaWQuCiAJICovCiAJdTMyCQlqZWRlY19pZDsKKwl1MTYgICAgICAgICAgICAgZXh0X2lkOwogCiAJLyogVGhlIHNpemUgbGlzdGVkIGhlcmUgaXMgd2hhdCB3b3JrcyB3aXRoIE9QQ09ERV9TRSwgd2hpY2ggaXNuJ3QKIAkgKiBuZWNlc3NhcmlseSBjYWxsZWQgYSAic2VjdG9yIiBieSB0aGUgdmVuZG9yLgpAQCAtNDU2LDcyICs0ODksNzUgQEAKIHN0YXRpYyBzdHJ1Y3QgZmxhc2hfaW5mbyBfX2RldmluaXRkYXRhIG0yNXBfZGF0YSBbXSA9IHsKIAogCS8qIEF0bWVsIC0tIHNvbWUgYXJlIChjb25mdXNpbmdseSkgbWFya2V0ZWQgYXMgIkRhdGFGbGFzaCIgKi8KLQl7ICJhdDI1ZnMwMTAiLCAgMHgxZjY2MDEsIDMyICogMTAyNCwgNCwgU0VDVF80SywgfSwKLQl7ICJhdDI1ZnMwNDAiLCAgMHgxZjY2MDQsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKKwl7ICJhdDI1ZnMwMTAiLCAgMHgxZjY2MDEsIDAsIDMyICogMTAyNCwgNCwgU0VDVF80SywgfSwKKwl7ICJhdDI1ZnMwNDAiLCAgMHgxZjY2MDQsIDAsIDY0ICogMTAyNCwgOCwgU0VDVF80SywgfSwKIAotCXsgImF0MjVkZjA0MWEiLCAweDFmNDQwMSwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAotCXsgImF0MjVkZjY0MSIsICAweDFmNDgwMCwgNjQgKiAxMDI0LCAxMjgsIFNFQ1RfNEssIH0sCisJeyAiYXQyNWRmMDQxYSIsIDB4MWY0NDAxLCAwLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCisJeyAiYXQyNWRmNjQxIiwgIDB4MWY0ODAwLCAwLCA2NCAqIDEwMjQsIDEyOCwgU0VDVF80SywgfSwKIAotCXsgImF0MjZmMDA0IiwgICAweDFmMDQwMCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAotCXsgImF0MjZkZjA4MWEiLCAweDFmNDUwMSwgNjQgKiAxMDI0LCAxNiwgU0VDVF80SywgfSwKLQl7ICJhdDI2ZGYxNjFhIiwgMHgxZjQ2MDEsIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEssIH0sCi0JeyAiYXQyNmRmMzIxIiwgIDB4MWY0NzAxLCA2NCAqIDEwMjQsIDY0LCBTRUNUXzRLLCB9LAorCXsgImF0MjZmMDA0IiwgICAweDFmMDQwMCwgMCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAorCXsgImF0MjZkZjA4MWEiLCAweDFmNDUwMSwgMCwgNjQgKiAxMDI0LCAxNiwgU0VDVF80SywgfSwKKwl7ICJhdDI2ZGYxNjFhIiwgMHgxZjQ2MDEsIDAsIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEssIH0sCisJeyAiYXQyNmRmMzIxIiwgIDB4MWY0NzAxLCAwLCA2NCAqIDEwMjQsIDY0LCBTRUNUXzRLLCB9LAogCiAJLyogU3BhbnNpb24gLS0gc2luZ2xlIChsYXJnZSkgc2VjdG9yIHNpemUgb25seSwgYXQgbGVhc3QKIAkgKiBmb3IgdGhlIGNoaXBzIGxpc3RlZCBoZXJlICh3aXRob3V0IGJvb3Qgc2VjdG9ycykuCiAJICovCi0JeyAiczI1c2wwMDRhIiwgMHgwMTAyMTIsIDY0ICogMTAyNCwgOCwgfSwKLQl7ICJzMjVzbDAwOGEiLCAweDAxMDIxMywgNjQgKiAxMDI0LCAxNiwgfSwKLQl7ICJzMjVzbDAxNmEiLCAweDAxMDIxNCwgNjQgKiAxMDI0LCAzMiwgfSwKLQl7ICJzMjVzbDAzMmEiLCAweDAxMDIxNSwgNjQgKiAxMDI0LCA2NCwgfSwKLQl7ICJzMjVzbDA2NGEiLCAweDAxMDIxNiwgNjQgKiAxMDI0LCAxMjgsIH0sCisJeyAiczI1c2wwMDRhIiwgMHgwMTAyMTIsIDAsIDY0ICogMTAyNCwgOCwgfSwKKwl7ICJzMjVzbDAwOGEiLCAweDAxMDIxMywgMCwgNjQgKiAxMDI0LCAxNiwgfSwKKwl7ICJzMjVzbDAxNmEiLCAweDAxMDIxNCwgMCwgNjQgKiAxMDI0LCAzMiwgfSwKKwl7ICJzMjVzbDAzMmEiLCAweDAxMDIxNSwgMCwgNjQgKiAxMDI0LCA2NCwgfSwKKwl7ICJzMjVzbDA2NGEiLCAweDAxMDIxNiwgMCwgNjQgKiAxMDI0LCAxMjgsIH0sCisgICAgICAgIHsgInMyNXNsMTI4MDAiLCAweDAxMjAxOCwgMHgwMzAwLCAyNTYgKiAxMDI0LCA2NCwgfSwKKwl7ICJzMjVzbDEyODAxIiwgMHgwMTIwMTgsIDB4MDMwMSwgNjQgKiAxMDI0LCAyNTYsIH0sCiAKIAkvKiBTU1QgLS0gbGFyZ2UgZXJhc2Ugc2l6ZXMgYXJlICJvdmVybGF5cyIsICJzZWN0b3JzIiBhcmUgNEsgKi8KLQl7ICJzc3QyNXZmMDQwYiIsIDB4YmYyNThkLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCi0JeyAic3N0MjV2ZjA4MGIiLCAweGJmMjU4ZSwgNjQgKiAxMDI0LCAxNiwgU0VDVF80SywgfSwKLQl7ICJzc3QyNXZmMDE2YiIsIDB4YmYyNTQxLCA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLLCB9LAotCXsgInNzdDI1dmYwMzJiIiwgMHhiZjI1NGEsIDY0ICogMTAyNCwgNjQsIFNFQ1RfNEssIH0sCisJeyAic3N0MjV2ZjA0MGIiLCAweGJmMjU4ZCwgMCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAorCXsgInNzdDI1dmYwODBiIiwgMHhiZjI1OGUsIDAsIDY0ICogMTAyNCwgMTYsIFNFQ1RfNEssIH0sCisJeyAic3N0MjV2ZjAxNmIiLCAweGJmMjU0MSwgMCwgNjQgKiAxMDI0LCAzMiwgU0VDVF80SywgfSwKKwl7ICJzc3QyNXZmMDMyYiIsIDB4YmYyNTRhLCAwLCA2NCAqIDEwMjQsIDY0LCBTRUNUXzRLLCB9LAogCiAJLyogU1QgTWljcm9lbGVjdHJvbmljcyAtLSBuZXdlciBwcm9kdWN0aW9uIG1heSBoYXZlIGZlYXR1cmUgdXBkYXRlcyAqLwotCXsgIm0yNXAwNSIsICAweDIwMjAxMCwgIDMyICogMTAyNCwgMiwgfSwKLQl7ICJtMjVwMTAiLCAgMHgyMDIwMTEsICAzMiAqIDEwMjQsIDQsIH0sCi0JeyAibTI1cDIwIiwgIDB4MjAyMDEyLCAgNjQgKiAxMDI0LCA0LCB9LAotCXsgIm0yNXA0MCIsICAweDIwMjAxMywgIDY0ICogMTAyNCwgOCwgfSwKLQl7ICJtMjVwODAiLCAgICAgICAgIDAsICA2NCAqIDEwMjQsIDE2LCB9LAotCXsgIm0yNXAxNiIsICAweDIwMjAxNSwgIDY0ICogMTAyNCwgMzIsIH0sCi0JeyAibTI1cDMyIiwgIDB4MjAyMDE2LCAgNjQgKiAxMDI0LCA2NCwgfSwKLQl7ICJtMjVwNjQiLCAgMHgyMDIwMTcsICA2NCAqIDEwMjQsIDEyOCwgfSwKLQl7ICJtMjVwMTI4IiwgMHgyMDIwMTgsIDI1NiAqIDEwMjQsIDY0LCB9LAorCXsgIm0yNXAwNSIsICAweDIwMjAxMCwgIDAsIDMyICogMTAyNCwgMiwgfSwKKwl7ICJtMjVwMTAiLCAgMHgyMDIwMTEsICAwLCAzMiAqIDEwMjQsIDQsIH0sCisJeyAibTI1cDIwIiwgIDB4MjAyMDEyLCAgMCwgNjQgKiAxMDI0LCA0LCB9LAorCXsgIm0yNXA0MCIsICAweDIwMjAxMywgIDAsIDY0ICogMTAyNCwgOCwgfSwKKwl7ICJtMjVwODAiLCAgICAgICAgIDAsICAwLCA2NCAqIDEwMjQsIDE2LCB9LAorCXsgIm0yNXAxNiIsICAweDIwMjAxNSwgIDAsIDY0ICogMTAyNCwgMzIsIH0sCisJeyAibTI1cDMyIiwgIDB4MjAyMDE2LCAgMCwgNjQgKiAxMDI0LCA2NCwgfSwKKwl7ICJtMjVwNjQiLCAgMHgyMDIwMTcsICAwLCA2NCAqIDEwMjQsIDEyOCwgfSwKKwl7ICJtMjVwMTI4IiwgMHgyMDIwMTgsIDAsIDI1NiAqIDEwMjQsIDY0LCB9LAogCi0JeyAibTQ1cGU4MCIsIDB4MjA0MDE0LCAgNjQgKiAxMDI0LCAxNiwgfSwKLQl7ICJtNDVwZTE2IiwgMHgyMDQwMTUsICA2NCAqIDEwMjQsIDMyLCB9LAorCXsgIm00NXBlODAiLCAweDIwNDAxNCwgIDAsIDY0ICogMTAyNCwgMTYsIH0sCisJeyAibTQ1cGUxNiIsIDB4MjA0MDE1LCAgMCwgNjQgKiAxMDI0LCAzMiwgfSwKIAotCXsgIm0yNXBlODAiLCAweDIwODAxNCwgIDY0ICogMTAyNCwgMTYsIH0sCi0JeyAibTI1cGUxNiIsIDB4MjA4MDE1LCAgNjQgKiAxMDI0LCAzMiwgU0VDVF80SywgfSwKKwl7ICJtMjVwZTgwIiwgMHgyMDgwMTQsICAwLCA2NCAqIDEwMjQsIDE2LCB9LAorCXsgIm0yNXBlMTYiLCAweDIwODAxNSwgIDAsIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEssIH0sCiAKIAkvKiBXaW5ib25kIC0tIHcyNXggImJsb2NrcyIgYXJlIDY0SywgInNlY3RvcnMiIGFyZSA0S2lCICovCi0JeyAidzI1eDEwIiwgMHhlZjMwMTEsIDY0ICogMTAyNCwgMiwgU0VDVF80SywgfSwKLQl7ICJ3MjV4MjAiLCAweGVmMzAxMiwgNjQgKiAxMDI0LCA0LCBTRUNUXzRLLCB9LAotCXsgIncyNXg0MCIsIDB4ZWYzMDEzLCA2NCAqIDEwMjQsIDgsIFNFQ1RfNEssIH0sCi0JeyAidzI1eDgwIiwgMHhlZjMwMTQsIDY0ICogMTAyNCwgMTYsIFNFQ1RfNEssIH0sCi0JeyAidzI1eDE2IiwgMHhlZjMwMTUsIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEssIH0sCi0JeyAidzI1eDMyIiwgMHhlZjMwMTYsIDY0ICogMTAyNCwgNjQsIFNFQ1RfNEssIH0sCi0JeyAidzI1eDY0IiwgMHhlZjMwMTcsIDY0ICogMTAyNCwgMTI4LCBTRUNUXzRLLCB9LAorCXsgIncyNXgxMCIsIDB4ZWYzMDExLCAwLCA2NCAqIDEwMjQsIDIsIFNFQ1RfNEssIH0sCisJeyAidzI1eDIwIiwgMHhlZjMwMTIsIDAsIDY0ICogMTAyNCwgNCwgU0VDVF80SywgfSwKKwl7ICJ3MjV4NDAiLCAweGVmMzAxMywgMCwgNjQgKiAxMDI0LCA4LCBTRUNUXzRLLCB9LAorCXsgIncyNXg4MCIsIDB4ZWYzMDE0LCAwLCA2NCAqIDEwMjQsIDE2LCBTRUNUXzRLLCB9LAorCXsgIncyNXgxNiIsIDB4ZWYzMDE1LCAwLCA2NCAqIDEwMjQsIDMyLCBTRUNUXzRLLCB9LAorCXsgIncyNXgzMiIsIDB4ZWYzMDE2LCAwLCA2NCAqIDEwMjQsIDY0LCBTRUNUXzRLLCB9LAorCXsgIncyNXg2NCIsIDB4ZWYzMDE3LCAwLCA2NCAqIDEwMjQsIDEyOCwgU0VDVF80SywgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZmxhc2hfaW5mbyAqX19kZXZpbml0IGplZGVjX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJaW50CQkJdG1wOwogCXU4CQkJY29kZSA9IE9QQ09ERV9SRElEOwotCXU4CQkJaWRbM107CisJdTgJCQlpZFs1XTsKIAl1MzIJCQlqZWRlYzsKKwl1MTYgICAgICAgICAgICAgICAgICAgICBleHRfamVkZWM7CiAJc3RydWN0IGZsYXNoX2luZm8JKmluZm87CiAKIAkvKiBKRURFQyBhbHNvIGRlZmluZXMgYW4gb3B0aW9uYWwgImV4dGVuZGVkIGRldmljZSBpbmZvcm1hdGlvbiIKIAkgKiBzdHJpbmcgZm9yIGFmdGVyIHZlbmRvci1zcGVjaWZpYyBkYXRhLCBhZnRlciB0aGUgdGhyZWUgYnl0ZXMKIAkgKiB3ZSB1c2UgaGVyZS4gIFN1cHBvcnRpbmcgc29tZSBjaGlwcyBtaWdodCByZXF1aXJlIHVzaW5nIGl0LgogCSAqLwotCXRtcCA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCAmY29kZSwgMSwgaWQsIDMpOworCXRtcCA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCAmY29kZSwgMSwgaWQsIDUpOwogCWlmICh0bXAgPCAwKSB7CiAJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICIlczogZXJyb3IgJWQgcmVhZGluZyBKRURFQyBJRFxuIiwKIAkJCXNwaS0+ZGV2LmJ1c19pZCwgdG1wKTsKQEAgLTUzMywxMCArNTY5LDE0IEBACiAJamVkZWMgPSBqZWRlYyA8PCA4OwogCWplZGVjIHw9IGlkWzJdOwogCisJZXh0X2plZGVjID0gaWRbM10gPDwgOCB8IGlkWzRdOworCiAJZm9yICh0bXAgPSAwLCBpbmZvID0gbTI1cF9kYXRhOwogCQkJdG1wIDwgQVJSQVlfU0laRShtMjVwX2RhdGEpOwogCQkJdG1wKyssIGluZm8rKykgewogCQlpZiAoaW5mby0+amVkZWNfaWQgPT0gamVkZWMpCisJCQlpZiAoZXh0X2plZGVjICE9IDAgJiYgaW5mby0+ZXh0X2lkICE9IGV4dF9qZWRlYykKKwkJCQljb250aW51ZTsKIAkJCXJldHVybiBpbmZvOwogCX0KIAlkZXZfZXJyKCZzcGktPmRldiwgInVucmVjb2duaXplZCBKRURFQyBpZCAlMDZ4XG4iLCBqZWRlYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jCmluZGV4IDhiZDBkZWEuLjZkZDlhZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jCkBAIC0zMCwxMiArMzAsMTAgQEAKICAqIGRvZXNuJ3QgKHlldCkgdXNlIHRoZXNlIGZvciBhbnkga2luZCBvZiBpL28gb3ZlcmxhcCBvciBwcmVmZXRjaGluZy4KICAqCiAgKiBTb21ldGltZXMgRGF0YUZsYXNoIGlzIHBhY2thZ2VkIGluIE1NQy1mb3JtYXQgY2FyZHMsIGFsdGhvdWdoIHRoZQotICogTU1DIHN0YWNrIGNhbid0IHVzZSBTUEkgKHlldCksIG9yIGRpc3Rpbmd1aXNoIGJldHdlZW4gTU1DIGFuZCBEYXRhRmxhc2gKKyAqIE1NQyBzdGFjayBjYW4ndCAoeWV0PykgZGlzdGluZ3Vpc2ggYmV0d2VlbiBNTUMgYW5kIERhdGFGbGFzaAogICogcHJvdG9jb2xzIGR1cmluZyBlbnVtZXJhdGlvbi4KICAqLwogCi0jZGVmaW5lIENPTkZJR19EQVRBRkxBU0hfV1JJVEVfVkVSSUZZCi0KIC8qIHJlYWRzIGNhbiBieXBhc3MgdGhlIGJ1ZmZlcnMgKi8KICNkZWZpbmUgT1BfUkVBRF9DT05USU5VT1VTCTB4RTgKICNkZWZpbmUgT1BfUkVBRF9QQUdFCQkweEQyCkBAIC04MCw3ICs3OCw4IEBACiAgKi8KICNkZWZpbmUgT1BfUkVBRF9JRAkJMHg5RgogI2RlZmluZSBPUF9SRUFEX1NFQ1VSSVRZCTB4NzcKLSNkZWZpbmUgT1BfV1JJVEVfU0VDVVJJVFkJMHg5QQkvKiBPVFAgYml0cyAqLworI2RlZmluZSBPUF9XUklURV9TRUNVUklUWV9SRVZDCTB4OUEKKyNkZWZpbmUgT1BfV1JJVEVfU0VDVVJJVFkJMHg5QgkvKiByZXZpc2lvbiBEICovCiAKIAogc3RydWN0IGRhdGFmbGFzaCB7CkBAIC00MDIsNyArNDAxLDcgQEAKIAkJKHZvaWQpIGRhdGFmbGFzaF93YWl0cmVhZHkocHJpdi0+c3BpKTsKIAogCi0jaWZkZWYJQ09ORklHX0RBVEFGTEFTSF9XUklURV9WRVJJRlkKKyNpZmRlZiBDT05GSUdfTVREX0RBVEFGTEFTSF9WRVJJRllfV1JJVEUKIAogCQkvKiAoMykgQ29tcGFyZSB0byBCdWZmZXIxICovCiAJCWFkZHIgPSBwYWdlYWRkciA8PCBwcml2LT5wYWdlX29mZnNldDsKQEAgLTQzMSw3ICs0MzAsNyBAQAogCQl9IGVsc2UKIAkJCXN0YXR1cyA9IDA7CiAKLSNlbmRpZgkvKiBDT05GSUdfREFUQUZMQVNIX1dSSVRFX1ZFUklGWSAqLworI2VuZGlmCS8qIENPTkZJR19NVERfREFUQUZMQVNIX1ZFUklGWV9XUklURSAqLwogCiAJCXJlbWFpbmluZyA9IHJlbWFpbmluZyAtIHdyaXRlbGVuOwogCQlwYWdlYWRkcisrOwpAQCAtNDUxLDE2ICs0NTAsMTkyIEBACiAKIC8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KIAorI2lmZGVmIENPTkZJR19NVERfREFUQUZMQVNIX09UUAorCitzdGF0aWMgaW50IGRhdGFmbGFzaF9nZXRfb3RwX2luZm8oc3RydWN0IG10ZF9pbmZvICptdGQsCisJCXN0cnVjdCBvdHBfaW5mbyAqaW5mbywgc2l6ZV90IGxlbikKK3sKKwkvKiBSZXBvcnQgYm90aCBibG9ja3MgYXMgaWRlbnRpY2FsOiAgYnl0ZXMgMC4uNjQsIGxvY2tlZC4KKwkgKiBVbmxlc3MgdGhlIHVzZXIgYmxvY2sgY2hhbmdlZCBmcm9tIGFsbC1vbmVzLCB3ZSBjYW4ndAorCSAqIHRlbGwgd2hldGhlciBpdCdzIHN0aWxsIHdyaXRhYmxlOyBzbyB3ZSBhc3N1bWUgaXQgaXNuJ3QuCisJICovCisJaW5mby0+c3RhcnQgPSAwOworCWluZm8tPmxlbmd0aCA9IDY0OworCWluZm8tPmxvY2tlZCA9IDE7CisJcmV0dXJuIHNpemVvZigqaW5mbyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG90cF9yZWFkKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHVuc2lnbmVkIGJhc2UsCisJCXVpbnQ4X3QgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbTsKKwlzaXplX3QJCQlsOworCXVpbnQ4X3QJCQkqc2NyYXRjaDsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXQ7CisJaW50CQkJc3RhdHVzOworCisJaWYgKG9mZiA+IDY0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgob2ZmICsgbGVuKSA+IDY0KQorCQlsZW4gPSA2NCAtIG9mZjsKKwlpZiAobGVuID09IDApCisJCXJldHVybiBsZW47CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKworCWwgPSA0ICsgYmFzZSArIG9mZiArIGxlbjsKKwlzY3JhdGNoID0ga3phbGxvYyhsLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNjcmF0Y2gpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogT1VUOiBPUF9SRUFEX1NFQ1VSSVRZLCAzIGRvbid0LWNhcmUgYnl0ZXMsIHplcm9lcworCSAqIElOOiAgaWdub3JlIDQgYnl0ZXMsIGRhdGEgYnl0ZXMgMC4uTiAobWF4IDEyNykKKwkgKi8KKwlzY3JhdGNoWzBdID0gT1BfUkVBRF9TRUNVUklUWTsKKworCW1lbXNldCgmdCwgMCwgc2l6ZW9mIHQpOworCXQudHhfYnVmID0gc2NyYXRjaDsKKwl0LnJ4X2J1ZiA9IHNjcmF0Y2g7CisJdC5sZW4gPSBsOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CisKKwlkYXRhZmxhc2hfd2FpdHJlYWR5KHNwaSk7CisKKwlzdGF0dXMgPSBzcGlfc3luYyhzcGksICZtKTsKKwlpZiAoc3RhdHVzID49IDApIHsKKwkJbWVtY3B5KGJ1Ziwgc2NyYXRjaCArIDQgKyBiYXNlICsgb2ZmLCBsZW4pOworCQlzdGF0dXMgPSBsZW47CisJfQorCisJa2ZyZWUoc2NyYXRjaCk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkYXRhZmxhc2hfcmVhZF9mYWN0X290cChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGF0YWZsYXNoCSpwcml2ID0gKHN0cnVjdCBkYXRhZmxhc2ggKiltdGQtPnByaXY7CisJaW50CQkJc3RhdHVzOworCisJLyogNjQgYnl0ZXMsIGZyb20gMC4uNjMgLi4uIHN0YXJ0IGF0IDY0IG9uLWNoaXAgKi8KKwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKKwlzdGF0dXMgPSBvdHBfcmVhZChwcml2LT5zcGksIDY0LCBidWYsIGZyb20sIGxlbik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCSpyZXRsZW4gPSBzdGF0dXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGF0YWZsYXNoX3JlYWRfdXNlcl9vdHAoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCWxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCit7CisJc3RydWN0IGRhdGFmbGFzaAkqcHJpdiA9IChzdHJ1Y3QgZGF0YWZsYXNoICopbXRkLT5wcml2OworCWludAkJCXN0YXR1czsKKworCS8qIDY0IGJ5dGVzLCBmcm9tIDAuLjYzIC4uLiBzdGFydCBhdCAwIG9uLWNoaXAgKi8KKwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKKwlzdGF0dXMgPSBvdHBfcmVhZChwcml2LT5zcGksIDAsIGJ1ZiwgZnJvbSwgbGVuKTsKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOworCisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisJKnJldGxlbiA9IHN0YXR1czsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXRhZmxhc2hfd3JpdGVfdXNlcl9vdHAoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCWxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCit7CisJc3RydWN0IHNwaV9tZXNzYWdlCW07CisJY29uc3Qgc2l6ZV90CQlsID0gNCArIDY0OworCXVpbnQ4X3QJCQkqc2NyYXRjaDsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXQ7CisJc3RydWN0IGRhdGFmbGFzaAkqcHJpdiA9IChzdHJ1Y3QgZGF0YWZsYXNoICopbXRkLT5wcml2OworCWludAkJCXN0YXR1czsKKworCWlmIChsZW4gPiA2NCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTdHJpY3RseSBzcGVha2luZywgd2UgKmNvdWxkKiB0cnVuY2F0ZSB0aGUgd3JpdGUgLi4uIGJ1dAorCSAqIGxldCdzIG5vdCBkbyB0aGF0IGZvciB0aGUgb25seSB3cml0ZSB0aGF0J3MgZXZlciBwb3NzaWJsZS4KKwkgKi8KKwlpZiAoKGZyb20gKyBsZW4pID4gNjQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogT1VUOiBPUF9XUklURV9TRUNVUklUWSwgMyB6ZXJvZXMsIDY0IGRhdGEtb3ItemVybyBieXRlcworCSAqIElOOiAgaWdub3JlIGFsbAorCSAqLworCXNjcmF0Y2ggPSBremFsbG9jKGwsIEdGUF9LRVJORUwpOworCWlmICghc2NyYXRjaCkKKwkJcmV0dXJuIC1FTk9NRU07CisJc2NyYXRjaFswXSA9IE9QX1dSSVRFX1NFQ1VSSVRZOworCW1lbWNweShzY3JhdGNoICsgNCArIGZyb20sIGJ1ZiwgbGVuKTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCisJbWVtc2V0KCZ0LCAwLCBzaXplb2YgdCk7CisJdC50eF9idWYgPSBzY3JhdGNoOworCXQubGVuID0gbDsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOworCisJLyogV3JpdGUgdGhlIE9UUCBiaXRzLCBpZiB0aGV5J3ZlIG5vdCB5ZXQgYmVlbiB3cml0dGVuLgorCSAqIFRoaXMgbW9kaWZpZXMgU1JBTSBidWZmZXIxLgorCSAqLworCW11dGV4X2xvY2soJnByaXYtPmxvY2spOworCWRhdGFmbGFzaF93YWl0cmVhZHkocHJpdi0+c3BpKTsKKwlzdGF0dXMgPSBzcGlfc3luYyhwcml2LT5zcGksICZtKTsKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOworCisJa2ZyZWUoc2NyYXRjaCk7CisKKwlpZiAoc3RhdHVzID49IDApIHsKKwkJc3RhdHVzID0gMDsKKwkJKnJldGxlbiA9IGxlbjsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGNoYXIgKm90cF9zZXR1cChzdHJ1Y3QgbXRkX2luZm8gKmRldmljZSwgY2hhciByZXZpc2lvbikKK3sKKwlkZXZpY2UtPmdldF9mYWN0X3Byb3RfaW5mbyA9IGRhdGFmbGFzaF9nZXRfb3RwX2luZm87CisJZGV2aWNlLT5yZWFkX2ZhY3RfcHJvdF9yZWcgPSBkYXRhZmxhc2hfcmVhZF9mYWN0X290cDsKKwlkZXZpY2UtPmdldF91c2VyX3Byb3RfaW5mbyA9IGRhdGFmbGFzaF9nZXRfb3RwX2luZm87CisJZGV2aWNlLT5yZWFkX3VzZXJfcHJvdF9yZWcgPSBkYXRhZmxhc2hfcmVhZF91c2VyX290cDsKKworCS8qIHJldiBjIHBhcnRzIChhdDQ1ZGIzMjFjIGFuZCBhdDQ1ZGIxMjgxIG9ubHkhKSB1c2UgYQorCSAqIGRpZmZlcmVudCB3cml0ZSBwcm9jZWR1cmU7IG5vdCAoeWV0PykgaW1wbGVtZW50ZWQuCisJICovCisJaWYgKHJldmlzaW9uID4gJ2MnKQorCQlkZXZpY2UtPndyaXRlX3VzZXJfcHJvdF9yZWcgPSBkYXRhZmxhc2hfd3JpdGVfdXNlcl9vdHA7CisKKwlyZXR1cm4gIiwgT1RQIjsKK30KKworI2Vsc2UKKworc3RhdGljIGNoYXIgKm90cF9zZXR1cChzdHJ1Y3QgbXRkX2luZm8gKmRldmljZSwgY2hhciByZXZpc2lvbikKK3sKKwlyZXR1cm4gIiAoT1RQKSI7Cit9CisKKyNlbmRpZgorCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisKIC8qCiAgKiBSZWdpc3RlciBEYXRhRmxhc2ggZGV2aWNlIHdpdGggTVREIHN1YnN5c3RlbS4KICAqLwogc3RhdGljIGludCBfX2RldmluaXQKLWFkZF9kYXRhZmxhc2goc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY2hhciAqbmFtZSwKLQkJaW50IG5yX3BhZ2VzLCBpbnQgcGFnZXNpemUsIGludCBwYWdlb2Zmc2V0KQorYWRkX2RhdGFmbGFzaF9vdHAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY2hhciAqbmFtZSwKKwkJaW50IG5yX3BhZ2VzLCBpbnQgcGFnZXNpemUsIGludCBwYWdlb2Zmc2V0LCBjaGFyIHJldmlzaW9uKQogewogCXN0cnVjdCBkYXRhZmxhc2gJCSpwcml2OwogCXN0cnVjdCBtdGRfaW5mbwkJCSpkZXZpY2U7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEJKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwljaGFyCQkJCSpvdHBfdGFnID0gIiI7CiAKIAlwcml2ID0ga3phbGxvYyhzaXplb2YgKnByaXYsIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKQEAgLTQ4OSw4ICs2NjQsMTIgQEAKIAlkZXZpY2UtPndyaXRlID0gZGF0YWZsYXNoX3dyaXRlOwogCWRldmljZS0+cHJpdiA9IHByaXY7CiAKLQlkZXZfaW5mbygmc3BpLT5kZXYsICIlcyAoJWQgS0J5dGVzKSBwYWdlc2l6ZSAlZCBieXRlc1xuIiwKLQkJCW5hbWUsIERJVl9ST1VORF9VUChkZXZpY2UtPnNpemUsIDEwMjQpLCBwYWdlc2l6ZSk7CisJaWYgKHJldmlzaW9uID49ICdjJykKKwkJb3RwX3RhZyA9IG90cF9zZXR1cChkZXZpY2UsIHJldmlzaW9uKTsKKworCWRldl9pbmZvKCZzcGktPmRldiwgIiVzICglZCBLQnl0ZXMpIHBhZ2VzaXplICVkIGJ5dGVzJXNcbiIsCisJCQluYW1lLCBESVZfUk9VTkRfVVAoZGV2aWNlLT5zaXplLCAxMDI0KSwKKwkJCXBhZ2VzaXplLCBvdHBfdGFnKTsKIAlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBwcml2KTsKIAogCWlmIChtdGRfaGFzX3BhcnRpdGlvbnMoKSkgewpAQCAtNTE5LDYgKzY5OCwxNCBAQAogCXJldHVybiBhZGRfbXRkX2RldmljZShkZXZpY2UpID09IDEgPyAtRU5PREVWIDogMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgX19kZXZpbml0CithZGRfZGF0YWZsYXNoKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNoYXIgKm5hbWUsCisJCWludCBucl9wYWdlcywgaW50IHBhZ2VzaXplLCBpbnQgcGFnZW9mZnNldCkKK3sKKwlyZXR1cm4gYWRkX2RhdGFmbGFzaF9vdHAoc3BpLCBuYW1lLCBucl9wYWdlcywgcGFnZXNpemUsCisJCQlwYWdlb2Zmc2V0LCAwKTsKK30KKwogc3RydWN0IGZsYXNoX2luZm8gewogCWNoYXIJCSpuYW1lOwogCkBAIC02NjQsMTMgKzg1MSwxNiBAQAogCSAqIFRyeSB0byBkZXRlY3QgZGF0YWZsYXNoIGJ5IEpFREVDIElELgogCSAqIElmIGl0IHN1Y2NlZWRzIHdlIGtub3cgd2UgaGF2ZSBlaXRoZXIgYSBDIG9yIEQgcGFydC4KIAkgKiBEIHdpbGwgc3VwcG9ydCBwb3dlciBvZiAyIHBhZ2VzaXplIG9wdGlvbi4KKwkgKiBCb3RoIHN1cHBvcnQgdGhlIHNlY3VyaXR5IHJlZ2lzdGVyLCB0aG91Z2ggd2l0aCBkaWZmZXJlbnQKKwkgKiB3cml0ZSBwcm9jZWR1cmVzLgogCSAqLwogCWluZm8gPSBqZWRlY19wcm9iZShzcGkpOwogCWlmIChJU19FUlIoaW5mbykpCiAJCXJldHVybiBQVFJfRVJSKGluZm8pOwogCWlmIChpbmZvICE9IE5VTEwpCi0JCXJldHVybiBhZGRfZGF0YWZsYXNoKHNwaSwgaW5mby0+bmFtZSwgaW5mby0+bnJfcGFnZXMsCi0JCQkJIGluZm8tPnBhZ2VzaXplLCBpbmZvLT5wYWdlb2Zmc2V0KTsKKwkJcmV0dXJuIGFkZF9kYXRhZmxhc2hfb3RwKHNwaSwgaW5mby0+bmFtZSwgaW5mby0+bnJfcGFnZXMsCisJCQkJaW5mby0+cGFnZXNpemUsIGluZm8tPnBhZ2VvZmZzZXQsCisJCQkJKGluZm8tPmZsYWdzICYgU1VQX1BPVzJQUykgPyAnZCcgOiAnYycpOwogCiAJLyoKIAkgKiBPbGRlciBjaGlwcyBzdXBwb3J0IG9ubHkgbGVnYWN5IGNvbW1hbmRzLCBpZGVudGlmaW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYyBiL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jCmluZGV4IGM0ZjlkMzMuLjUwY2UxMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jCisrKyBiL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jCkBAIC0zODgsNiArMzg4LDEwIEBACiAJCWlmICh0aGlzRVVOID09IHRhcmdldEVVTikKIAkJCWJyZWFrOwogCisJCS8qIFVubGluayB0aGUgbGFzdCBibG9jayBmcm9tIHRoZSBjaGFpbi4gKi8KKwkJaW5mdGwtPlBVdGFibGVbcHJldkVVTl0gPSBCTE9DS19OSUw7CisKKwkJLyogTm93IHRyeSB0byBlcmFzZSBpdC4gKi8KIAkJaWYgKElORlRMX2Zvcm1hdGJsb2NrKGluZnRsLCB0aGlzRVVOKSA8IDApIHsKIAkJCS8qCiAJCQkgKiBDb3VsZCBub3QgZXJhc2UgOiBtYXJrIGJsb2NrIGFzIHJlc2VydmVkLgpAQCAtMzk2LDcgKzQwMCw2IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBDb3JyZWN0bHkgZXJhc2VkIDogbWFyayBpdCBhcyBmcmVlICovCiAJCQlpbmZ0bC0+UFV0YWJsZVt0aGlzRVVOXSA9IEJMT0NLX0ZSRUU7Ci0JCQlpbmZ0bC0+UFV0YWJsZVtwcmV2RVVOXSA9IEJMT0NLX05JTDsKIAkJCWluZnRsLT5udW1mcmVlRVVOcysrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCmluZGV4IGRmOGUwMGIuLjVlYTE2OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKQEAgLTMzMiwzMCArMzMyLDYgQEAKIAkgIE1hcHBpbmcgZm9yIHRoZSBGbGFnYSBkaWdpdGFsIG1vZHVsZS4gSWYgeW91IGRvbid0IGhhdmUgb25lLCBpZ25vcmUKIAkgIHRoaXMgc2V0dGluZy4KIAotY29uZmlnIE1URF9XQUxOVVQKLQl0cmlzdGF0ZSAiRmxhc2ggZGV2aWNlIG1hcHBlZCBvbiBJQk0gNDA1R1AgV2FsbnV0IgotCWRlcGVuZHMgb24gTVREX0pFREVDUFJPQkUgJiYgV0FMTlVUICYmICFQUENfTUVSR0UKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgYWNjZXNzIHJvdXRpbmVzIGZvciB0aGUgZmxhc2ggY2hpcHMgb24gdGhlIElCTSA0MDVHUAotCSAgV2FsbnV0IGJvYXJkLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgYm9hcmRzIGFuZCB3b3VsZCBsaWtlIHRvCi0JICB1c2UgdGhlIGZsYXNoIGNoaXBzIG9uIGl0LCBzYXkgJ1knLgotCi1jb25maWcgTVREX0VCT05ZCi0JdHJpc3RhdGUgIkZsYXNoIGRldmljZXMgbWFwcGVkIG9uIElCTSA0NDBHUCBFYm9ueSIKLQlkZXBlbmRzIG9uIE1URF9KRURFQ1BST0JFICYmIEVCT05ZICYmICFQUENfTUVSR0UKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgYWNjZXNzIHJvdXRpbmVzIGZvciB0aGUgZmxhc2ggY2hpcHMgb24gdGhlIElCTSA0NDBHUAotCSAgRWJvbnkgYm9hcmQuIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBib2FyZHMgYW5kIHdvdWxkIGxpa2UgdG8KLQkgIHVzZSB0aGUgZmxhc2ggY2hpcHMgb24gaXQsIHNheSAnWScuCi0KLWNvbmZpZyBNVERfT0NPVEVBCi0JdHJpc3RhdGUgIkZsYXNoIGRldmljZXMgbWFwcGVkIG9uIElCTSA0NDBHWCBPY290ZWEiCi0JZGVwZW5kcyBvbiBNVERfQ0ZJICYmIE9DT1RFQSAmJiAhUFBDX01FUkdFCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIGFjY2VzcyByb3V0aW5lcyBmb3IgdGhlIGZsYXNoIGNoaXBzIG9uIHRoZSBJQk0gNDQwR1gKLQkgIE9jb3RlYSBib2FyZC4gSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIGJvYXJkcyBhbmQgd291bGQgbGlrZSB0bwotCSAgdXNlIHRoZSBmbGFzaCBjaGlwcyBvbiBpdCwgc2F5ICdZJy4KLQogY29uZmlnIE1URF9SRURXT09ECiAJdHJpc3RhdGUgIkNGSSBGbGFzaCBkZXZpY2VzIG1hcHBlZCBvbiBJQk0gUmVkd29vZCIKIAlkZXBlbmRzIG9uIE1URF9DRkkgJiYgKCBSRURXT09EXzQgfHwgUkVEV09PRF81IHx8IFJFRFdPT0RfNiApCkBAIC00NTgsMTMgKzQzNCw2IEBACiAJICBQaG90b01heCBEaWdpdGFsIFBpY3R1cmUgRnJhbWUuCiAJICBJZiB5b3UgaGF2ZSBzdWNoIGEgZGV2aWNlLCBzYXkgJ1knLgogCi1jb25maWcgTVREX05PUl9UT1RPCi0JdHJpc3RhdGUgIk5PUiBGbGFzaCBkZXZpY2Ugb24gVE9UTyBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUCAmJiBPTUFQX1RPVE8KLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgYWNjZXNzIHRvIHRoZSBOT1IgZmxhc2ggb24gdGhlIFRleGFzIEluc3RydW1lbnRzCi0JICBUT1RPIGJvYXJkLgotCiBjb25maWcgTVREX0g3MjBYCiAJdHJpc3RhdGUgIkh5bml4IGV2YWx1YXRpb24gYm9hcmQgbWFwcGluZ3MiCiAJZGVwZW5kcyBvbiBNVERfQ0ZJICYmICggQVJDSF9INzIwMSB8fCBBUkNIX0g3MjAyICkKQEAgLTUyMiw3ICs0OTEsNyBAQAogCiBjb25maWcgTVREX1VDTElOVVgKIAl0cmlzdGF0ZSAiR2VuZXJpYyB1Q2xpbnV4IFJBTS9ST00gZmlsZXN5c3RlbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTVREX1BBUlRJVElPTlMgJiYgIU1NVQorCWRlcGVuZHMgb24gTVREX1BBUlRJVElPTlMgJiYgTVREX1JBTSAmJiAhTU1VCiAJaGVscAogCSAgTWFwIGRyaXZlciB0byBzdXBwb3J0IGltYWdlIGJhc2VkIGZpbGVzeXN0ZW1zIGZvciB1Q2xpbnV4LgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQppbmRleCA2Y2RhNmRmLi42ZDliYTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKQEAgLTUwLDEyICs1MCw4IEBACiBvYmotJChDT05GSUdfTVREX1VDTElOVVgpCSs9IHVjbGludXgubwogb2JqLSQoQ09ORklHX01URF9ORVR0ZWwpCSs9IG5ldHRlbC5vCiBvYmotJChDT05GSUdfTVREX1NDQjJfRkxBU0gpCSs9IHNjYjJfZmxhc2gubwotb2JqLSQoQ09ORklHX01URF9FQk9OWSkJCSs9IGVib255Lm8KLW9iai0kKENPTkZJR19NVERfT0NPVEVBKQkrPSBvY290ZWEubwotb2JqLSQoQ09ORklHX01URF9XQUxOVVQpICAgICAgICArPSB3YWxudXQubwogb2JqLSQoQ09ORklHX01URF9INzIwWCkJCSs9IGg3MjB4LWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfU0JDODI0MCkJKz0gc2JjODI0MC5vCi1vYmotJChDT05GSUdfTVREX05PUl9UT1RPKQkrPSBvbWFwLXRvdG8tZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9JWFA0WFgpCSs9IGl4cDR4eC5vCiBvYmotJChDT05GSUdfTVREX0lYUDIwMDApCSs9IGl4cDIwMDAubwogb2JqLSQoQ09ORklHX01URF9XUlNCQzgyNjApCSs9IHdyX3NiYzgyeHhfZmxhc2gubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9lYm9ueS5jIGIvZHJpdmVycy9tdGQvbWFwcy9lYm9ueS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTJiN2M3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbXRkL21hcHMvZWJvbnkuYworKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKgotICogTWFwcGluZyBmb3IgRWJvbnkgdXNlciBmbGFzaAotICoKLSAqIE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+Ci0gKgotICogQ29weXJpZ2h0IDIwMDItMjAwNCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2libTQ0eC5oPgotI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgvZWJvbnkuaD4KLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZmxhc2g7Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2luZm8gZWJvbnlfc21hbGxfbWFwID0gewotCS5uYW1lID0JCSJFYm9ueSBzbWFsbCBmbGFzaCIsCi0JLnNpemUgPQkJRUJPTllfU01BTExfRkxBU0hfU0laRSwKLQkuYmFua3dpZHRoID0JMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2luZm8gZWJvbnlfbGFyZ2VfbWFwID0gewotCS5uYW1lID0JCSJFYm9ueSBsYXJnZSBmbGFzaCIsCi0JLnNpemUgPQkJRUJPTllfTEFSR0VfRkxBU0hfU0laRSwKLQkuYmFua3dpZHRoID0JMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBlYm9ueV9zbWFsbF9wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkubmFtZSA9ICAgIk9wZW5CSU9TIiwKLQkJLm9mZnNldCA9IDB4MCwKLQkJLnNpemUgPSAgIDB4ODAwMDAsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGVib255X2xhcmdlX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gICAiZnMiLAotCQkub2Zmc2V0ID0gMCwKLQkJLnNpemUgPSAgIDB4MzgwMDAwLAotCX0sCi0JewotCQkubmFtZSA9ICAgImZpcm13YXJlIiwKLQkJLm9mZnNldCA9IDB4MzgwMDAwLAotCQkuc2l6ZSA9ICAgMHg4MDAwMCwKLQl9Ci19OwotCi1pbnQgX19pbml0IGluaXRfZWJvbnkodm9pZCkKLXsKLQl1OCBmcGdhMF9yZWc7Ci0JdTggX19pb21lbSAqZnBnYTBfYWRyOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBzbWFsbF9mbGFzaF9iYXNlLCBsYXJnZV9mbGFzaF9iYXNlOwotCi0JZnBnYTBfYWRyID0gaW9yZW1hcDY0KEVCT05ZX0ZQR0FfQUREUiwgMTYpOwotCWlmICghZnBnYTBfYWRyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZwZ2EwX3JlZyA9IHJlYWRiKGZwZ2EwX2Fkcik7Ci0JaW91bm1hcChmcGdhMF9hZHIpOwotCi0JaWYgKEVCT05ZX0JPT1RfU01BTExfRkxBU0goZnBnYTBfcmVnKSAmJgotCQkJIUVCT05ZX0ZMQVNIX1NFTChmcGdhMF9yZWcpKQotCQlzbWFsbF9mbGFzaF9iYXNlID0gRUJPTllfU01BTExfRkxBU0hfSElHSDI7Ci0JZWxzZSBpZiAoRUJPTllfQk9PVF9TTUFMTF9GTEFTSChmcGdhMF9yZWcpICYmCi0JCQlFQk9OWV9GTEFTSF9TRUwoZnBnYTBfcmVnKSkKLQkJc21hbGxfZmxhc2hfYmFzZSA9IEVCT05ZX1NNQUxMX0ZMQVNIX0hJR0gxOwotCWVsc2UgaWYgKCFFQk9OWV9CT09UX1NNQUxMX0ZMQVNIKGZwZ2EwX3JlZykgJiYKLQkJCSFFQk9OWV9GTEFTSF9TRUwoZnBnYTBfcmVnKSkKLQkJc21hbGxfZmxhc2hfYmFzZSA9IEVCT05ZX1NNQUxMX0ZMQVNIX0xPVzI7Ci0JZWxzZQotCQlzbWFsbF9mbGFzaF9iYXNlID0gRUJPTllfU01BTExfRkxBU0hfTE9XMTsKLQotCWlmIChFQk9OWV9CT09UX1NNQUxMX0ZMQVNIKGZwZ2EwX3JlZykgJiYKLQkJCSFFQk9OWV9PTkJSRF9GTEFTSF9FTihmcGdhMF9yZWcpKQotCQlsYXJnZV9mbGFzaF9iYXNlID0gRUJPTllfTEFSR0VfRkxBU0hfTE9XOwotCWVsc2UKLQkJbGFyZ2VfZmxhc2hfYmFzZSA9IEVCT05ZX0xBUkdFX0ZMQVNIX0hJR0g7Ci0KLQllYm9ueV9zbWFsbF9tYXAucGh5cyA9IHNtYWxsX2ZsYXNoX2Jhc2U7Ci0JZWJvbnlfc21hbGxfbWFwLnZpcnQgPSBpb3JlbWFwNjQoc21hbGxfZmxhc2hfYmFzZSwKLQkJCQkJIGVib255X3NtYWxsX21hcC5zaXplKTsKLQotCWlmICghZWJvbnlfc21hbGxfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcCBmbGFzaFxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXNpbXBsZV9tYXBfaW5pdCgmZWJvbnlfc21hbGxfbWFwKTsKLQotCWZsYXNoID0gZG9fbWFwX3Byb2JlKCJqZWRlY19wcm9iZSIsICZlYm9ueV9zbWFsbF9tYXApOwotCWlmIChmbGFzaCkgewotCQlmbGFzaC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJYWRkX210ZF9wYXJ0aXRpb25zKGZsYXNoLCBlYm9ueV9zbWFsbF9wYXJ0aXRpb25zLAotCQkJCQlBUlJBWV9TSVpFKGVib255X3NtYWxsX3BhcnRpdGlvbnMpKTsKLQl9IGVsc2UgewotCQlwcmludGsoIm1hcCBwcm9iZSBmYWlsZWQgZm9yIGZsYXNoXG4iKTsKLQkJaW91bm1hcChlYm9ueV9zbWFsbF9tYXAudmlydCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JZWJvbnlfbGFyZ2VfbWFwLnBoeXMgPSBsYXJnZV9mbGFzaF9iYXNlOwotCWVib255X2xhcmdlX21hcC52aXJ0ID0gaW9yZW1hcDY0KGxhcmdlX2ZsYXNoX2Jhc2UsCi0JCQkJCSBlYm9ueV9sYXJnZV9tYXAuc2l6ZSk7Ci0KLQlpZiAoIWVib255X2xhcmdlX21hcC52aXJ0KSB7Ci0JCXByaW50aygiRmFpbGVkIHRvIGlvcmVtYXAgZmxhc2hcbiIpOwotCQlpb3VubWFwKGVib255X3NtYWxsX21hcC52aXJ0KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jc2ltcGxlX21hcF9pbml0KCZlYm9ueV9sYXJnZV9tYXApOwotCi0JZmxhc2ggPSBkb19tYXBfcHJvYmUoImplZGVjX3Byb2JlIiwgJmVib255X2xhcmdlX21hcCk7Ci0JaWYgKGZsYXNoKSB7Ci0JCWZsYXNoLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQlhZGRfbXRkX3BhcnRpdGlvbnMoZmxhc2gsIGVib255X2xhcmdlX3BhcnRpdGlvbnMsCi0JCQkJCUFSUkFZX1NJWkUoZWJvbnlfbGFyZ2VfcGFydGl0aW9ucykpOwotCX0gZWxzZSB7Ci0JCXByaW50aygibWFwIHByb2JlIGZhaWxlZCBmb3IgZmxhc2hcbiIpOwotCQlpb3VubWFwKGVib255X3NtYWxsX21hcC52aXJ0KTsKLQkJaW91bm1hcChlYm9ueV9sYXJnZV9tYXAudmlydCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2Vib255KHZvaWQpCi17Ci0JaWYgKGZsYXNoKSB7Ci0JCWRlbF9tdGRfcGFydGl0aW9ucyhmbGFzaCk7Ci0JCW1hcF9kZXN0cm95KGZsYXNoKTsKLQl9Ci0KLQlpZiAoZWJvbnlfc21hbGxfbWFwLnZpcnQpIHsKLQkJaW91bm1hcChlYm9ueV9zbWFsbF9tYXAudmlydCk7Ci0JCWVib255X3NtYWxsX21hcC52aXJ0ID0gTlVMTDsKLQl9Ci0KLQlpZiAoZWJvbnlfbGFyZ2VfbWFwLnZpcnQpIHsKLQkJaW91bm1hcChlYm9ueV9sYXJnZV9tYXAudmlydCk7Ci0JCWVib255X2xhcmdlX21hcC52aXJ0ID0gTlVMTDsKLQl9Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfZWJvbnkpOwotbW9kdWxlX2V4aXQoY2xlYW51cF9lYm9ueSk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1URCBtYXAgYW5kIHBhcnRpdGlvbnMgZm9yIElCTSA0NDBHUCBFYm9ueSBib2FyZHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvb2NvdGVhLmMgYi9kcml2ZXJzL210ZC9tYXBzL29jb3RlYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTIyZWFjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbXRkL21hcHMvb2NvdGVhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoKLSAqIE1hcHBpbmcgZm9yIE9jb3RlYSB1c2VyIGZsYXNoCi0gKgotICogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMi0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaWJtNDR4Lmg+Ci0jaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC9vY290ZWEuaD4KLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZmxhc2g7Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2luZm8gb2NvdGVhX3NtYWxsX21hcCA9IHsKLQkubmFtZSA9CQkiT2NvdGVhIHNtYWxsIGZsYXNoIiwKLQkuc2l6ZSA9CQlPQ09URUFfU01BTExfRkxBU0hfU0laRSwKLQkuYnVzd2lkdGggPQkxLAotfTsKLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBvY290ZWFfbGFyZ2VfbWFwID0gewotCS5uYW1lID0JCSJPY290ZWEgbGFyZ2UgZmxhc2giLAotCS5zaXplID0JCU9DT1RFQV9MQVJHRV9GTEFTSF9TSVpFLAotCS5idXN3aWR0aCA9CTEsCi19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb2NvdGVhX3NtYWxsX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gICAicGlicyIsCi0JCS5vZmZzZXQgPSAweDAsCi0JCS5zaXplID0gICAweDEwMDAwMCwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb2NvdGVhX2xhcmdlX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gICAiZnMiLAotCQkub2Zmc2V0ID0gMCwKLQkJLnNpemUgPSAgIDB4MzAwMDAwLAotCX0sCi0JewotCQkubmFtZSA9ICAgImZpcm13YXJlIiwKLQkJLm9mZnNldCA9IDB4MzAwMDAwLAotCQkuc2l6ZSA9ICAgMHgxMDAwMDAsCi0JfQotfTsKLQotaW50IF9faW5pdCBpbml0X29jb3RlYSh2b2lkKQotewotCXU4IGZwZ2EwX3JlZzsKLQl1OCAqZnBnYTBfYWRyOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBzbWFsbF9mbGFzaF9iYXNlLCBsYXJnZV9mbGFzaF9iYXNlOwotCi0JZnBnYTBfYWRyID0gaW9yZW1hcDY0KE9DT1RFQV9GUEdBX0FERFIsIDE2KTsKLQlpZiAoIWZwZ2EwX2FkcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmcGdhMF9yZWcgPSByZWFkYigodW5zaWduZWQgbG9uZylmcGdhMF9hZHIpOwotCWlvdW5tYXAoZnBnYTBfYWRyKTsKLQotCWlmIChPQ09URUFfQk9PVF9MQVJHRV9GTEFTSChmcGdhMF9yZWcpKSB7Ci0JCXNtYWxsX2ZsYXNoX2Jhc2UgPSBPQ09URUFfU01BTExfRkxBU0hfSElHSDsKLQkJbGFyZ2VfZmxhc2hfYmFzZSA9IE9DT1RFQV9MQVJHRV9GTEFTSF9MT1c7Ci0JfQotCWVsc2UgewotCQlzbWFsbF9mbGFzaF9iYXNlID0gT0NPVEVBX1NNQUxMX0ZMQVNIX0xPVzsKLQkJbGFyZ2VfZmxhc2hfYmFzZSA9IE9DT1RFQV9MQVJHRV9GTEFTSF9ISUdIOwotCX0KLQotCW9jb3RlYV9zbWFsbF9tYXAucGh5cyA9IHNtYWxsX2ZsYXNoX2Jhc2U7Ci0Jb2NvdGVhX3NtYWxsX21hcC52aXJ0ID0gaW9yZW1hcDY0KHNtYWxsX2ZsYXNoX2Jhc2UsCi0JCQkJCSBvY290ZWFfc21hbGxfbWFwLnNpemUpOwotCi0JaWYgKCFvY290ZWFfc21hbGxfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcCBmbGFzaFxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXNpbXBsZV9tYXBfaW5pdCgmb2NvdGVhX3NtYWxsX21hcCk7Ci0KLQlmbGFzaCA9IGRvX21hcF9wcm9iZSgibWFwX3JvbSIsICZvY290ZWFfc21hbGxfbWFwKTsKLQlpZiAoZmxhc2gpIHsKLQkJZmxhc2gtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCWFkZF9tdGRfcGFydGl0aW9ucyhmbGFzaCwgb2NvdGVhX3NtYWxsX3BhcnRpdGlvbnMsCi0JCQkJCUFSUkFZX1NJWkUob2NvdGVhX3NtYWxsX3BhcnRpdGlvbnMpKTsKLQl9IGVsc2UgewotCQlwcmludGsoIm1hcCBwcm9iZSBmYWlsZWQgZm9yIGZsYXNoXG4iKTsKLQkJaW91bm1hcChvY290ZWFfc21hbGxfbWFwLnZpcnQpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQotCW9jb3RlYV9sYXJnZV9tYXAucGh5cyA9IGxhcmdlX2ZsYXNoX2Jhc2U7Ci0Jb2NvdGVhX2xhcmdlX21hcC52aXJ0ID0gaW9yZW1hcDY0KGxhcmdlX2ZsYXNoX2Jhc2UsCi0JCQkJCSBvY290ZWFfbGFyZ2VfbWFwLnNpemUpOwotCi0JaWYgKCFvY290ZWFfbGFyZ2VfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcCBmbGFzaFxuIik7Ci0JCWlvdW5tYXAob2NvdGVhX3NtYWxsX21hcC52aXJ0KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jc2ltcGxlX21hcF9pbml0KCZvY290ZWFfbGFyZ2VfbWFwKTsKLQotCWZsYXNoID0gZG9fbWFwX3Byb2JlKCJjZmlfcHJvYmUiLCAmb2NvdGVhX2xhcmdlX21hcCk7Ci0JaWYgKGZsYXNoKSB7Ci0JCWZsYXNoLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQlhZGRfbXRkX3BhcnRpdGlvbnMoZmxhc2gsIG9jb3RlYV9sYXJnZV9wYXJ0aXRpb25zLAotCQkJCQlBUlJBWV9TSVpFKG9jb3RlYV9sYXJnZV9wYXJ0aXRpb25zKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCJtYXAgcHJvYmUgZmFpbGVkIGZvciBmbGFzaFxuIik7Ci0JCWlvdW5tYXAob2NvdGVhX3NtYWxsX21hcC52aXJ0KTsKLQkJaW91bm1hcChvY290ZWFfbGFyZ2VfbWFwLnZpcnQpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9vY290ZWEodm9pZCkKLXsKLQlpZiAoZmxhc2gpIHsKLQkJZGVsX210ZF9wYXJ0aXRpb25zKGZsYXNoKTsKLQkJbWFwX2Rlc3Ryb3koZmxhc2gpOwotCX0KLQotCWlmIChvY290ZWFfc21hbGxfbWFwLnZpcnQpIHsKLQkJaW91bm1hcCgodm9pZCAqKW9jb3RlYV9zbWFsbF9tYXAudmlydCk7Ci0JCW9jb3RlYV9zbWFsbF9tYXAudmlydCA9IDA7Ci0JfQotCi0JaWYgKG9jb3RlYV9sYXJnZV9tYXAudmlydCkgewotCQlpb3VubWFwKCh2b2lkICopb2NvdGVhX2xhcmdlX21hcC52aXJ0KTsKLQkJb2NvdGVhX2xhcmdlX21hcC52aXJ0ID0gMDsKLQl9Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfb2NvdGVhKTsKLW1vZHVsZV9leGl0KGNsZWFudXBfb2NvdGVhKTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBhbmQgcGFydGl0aW9ucyBmb3IgSUJNIDQ0MEdYIE9jb3RlYSBib2FyZHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvb21hcC10b3RvLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL29tYXAtdG90by1mbGFzaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTYwZWJiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbXRkL21hcHMvb21hcC10b3RvLWZsYXNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIE5PUiBGbGFzaCBtZW1vcnkgYWNjZXNzIG9uIFRJIFRvdG8gYm9hcmQKLSAqCi0gKiBqemhhbmdAdGkuY29tIChDKSAyMDAzIFRleGFzIEluc3RydW1lbnRzLgotICoKLSAqICAoQykgMjAwMiBNb250VmlzdGEgU29mdHdhcmUsIEluYy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotCi0jaWZuZGVmIENPTkZJR19BUkNIX09NQVAKLSNlcnJvciBUaGlzIGlzIGZvciBPTUFQIGFyY2hpdGVjdHVyZSBvbmx5Ci0jZW5kaWYKLQotLy90aGVzZSBsaW5lcyBuZWVkIGJlIG1vdmVkIHRvIGEgaGFyZHdhcmUgaGVhZGVyIGZpbGUKLSNkZWZpbmUgT01BUF9UT1RPX0ZMQVNIX0JBU0UgMHhkODAwMDAwMAotI2RlZmluZSBPTUFQX1RPVE9fRkxBU0hfU0laRSAweDgwMDAwCi0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2luZm8gb21hcF90b3RvX21hcF9mbGFzaCA9IHsKLQkubmFtZSA9CQkiT01BUCBUb3RvIGZsYXNoIiwKLQkuYmFua3dpZHRoID0JMiwKLQkudmlydCA9CQkodm9pZCBfX2lvbWVtICopT01BUF9UT1RPX0ZMQVNIX0JBU0UsCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB0b3RvX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lID0JCSJCb290TG9hZGVyIiwKLQkJLnNpemUgPQkJMHgwMDA0MDAwMCwgICAgIC8qIGhvcGVmdWxseSB1LWJvb3Qgd2lsbCBzdGF5IDEyOGsgKyAxMjgqLwotCQkub2Zmc2V0ID0JMCwKLQkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFLCAgLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwgewotCQkubmFtZSA9CQkiUmVzZXJ2ZWRTcGFjZSIsCi0JCS5zaXplID0JCTB4MDAwMzAwMDAsCi0JCS5vZmZzZXQgPQlNVERQQVJUX09GU19BUFBFTkQsCi0JCS8vbWFza19mbGFnczoJTVREX1dSSVRFQUJMRSwgIC8qIGZvcmNlIHJlYWQtb25seSAqLwotCX0sIHsKLQkJLm5hbWUgPQkJIkVudkFyZWEiLCAgICAgIC8qIGJvdHRvbSA2NEtpQiBmb3IgZW52IHZhcnMgKi8KLQkJLnNpemUgPQkJTVREUEFSVF9TSVpfRlVMTCwKLQkJLm9mZnNldCA9CU1URFBBUlRfT0ZTX0FQUEVORCwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnNlZF9wYXJ0czsKLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZmxhc2hfbXRkOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2ZsYXNoICh2b2lkKQotewotCi0Jc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwotCWludCBuYl9wYXJ0cyA9IDA7Ci0JaW50IHBhcnNlZF9ucl9wYXJ0cyA9IDA7Ci0JY29uc3QgY2hhciAqcGFydF90eXBlOwotCi0JLyoKLQkgKiBTdGF0aWMgcGFydGl0aW9uIGRlZmluaXRpb24gc2VsZWN0aW9uCi0JICovCi0JcGFydF90eXBlID0gInN0YXRpYyI7Ci0KLSAJcGFydHMgPSB0b3RvX2ZsYXNoX3BhcnRpdGlvbnM7Ci0JbmJfcGFydHMgPSBBUlJBWV9TSVpFKHRvdG9fZmxhc2hfcGFydGl0aW9ucyk7Ci0Jb21hcF90b3RvX21hcF9mbGFzaC5zaXplID0gT01BUF9UT1RPX0ZMQVNIX1NJWkU7Ci0Jb21hcF90b3RvX21hcF9mbGFzaC5waHlzID0gdmlydF90b19waHlzKE9NQVBfVE9UT19GTEFTSF9CQVNFKTsKLQotCXNpbXBsZV9tYXBfaW5pdCgmb21hcF90b3RvX21hcF9mbGFzaCk7Ci0JLyoKLQkgKiBOb3cgbGV0J3MgcHJvYmUgZm9yIHRoZSBhY3R1YWwgZmxhc2guICBEbyBpdCBoZXJlIHNpbmNlCi0JICogc3BlY2lmaWMgbWFjaGluZSBzZXR0aW5ncyBtaWdodCBoYXZlIGJlZW4gc2V0IGFib3ZlLgotCSAqLwotCXByaW50ayhLRVJOX05PVElDRSAiT01BUCB0b3RvIGZsYXNoOiBwcm9iaW5nICVkLWJpdCBmbGFzaCBidXNcbiIsCi0JCW9tYXBfdG90b19tYXBfZmxhc2guYmFua3dpZHRoKjgpOwotCWZsYXNoX210ZCA9IGRvX21hcF9wcm9iZSgiamVkZWNfcHJvYmUiLCAmb21hcF90b3RvX21hcF9mbGFzaCk7Ci0JaWYgKCFmbGFzaF9tdGQpCi0JCXJldHVybiAtRU5YSU87Ci0KLSAJaWYgKHBhcnNlZF9ucl9wYXJ0cyA+IDApIHsKLQkJcGFydHMgPSBwYXJzZWRfcGFydHM7Ci0JCW5iX3BhcnRzID0gcGFyc2VkX25yX3BhcnRzOwotCX0KLQotCWlmIChuYl9wYXJ0cyA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiT01BUCB0b3RvIGZsYXNoOiBubyBwYXJ0aXRpb24gaW5mbyBhdmFpbGFibGUsIgotCQkJInJlZ2lzdGVyaW5nIHdob2xlIGZsYXNoIGF0IG9uY2VcbiIpOwotCQlpZiAoYWRkX210ZF9kZXZpY2UoZmxhc2hfbXRkKSl7Ci0gICAgICAgICAgICByZXR1cm4gLUVOWElPOwotICAgICAgICB9Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJVc2luZyAlcyBwYXJ0aXRpb24gZGVmaW5pdGlvblxuIiwKLQkJCXBhcnRfdHlwZSk7Ci0JCXJldHVybiBhZGRfbXRkX3BhcnRpdGlvbnMoZmxhc2hfbXRkLCBwYXJ0cywgbmJfcGFydHMpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IF9faW5pdCBvbWFwX3RvdG9fbXRkX2luaXQodm9pZCkKLXsKLQlpbnQgc3RhdHVzOwotCi0gCWlmIChzdGF0dXMgPSBpbml0X2ZsYXNoKCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJPTUFQIFRvdG8gRmxhc2g6IHVuYWJsZSB0byBpbml0IG1hcCBmb3IgdG90byBmbGFzaFxuIik7Ci0JfQotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyB2b2lkICBfX2V4aXQgb21hcF90b3RvX210ZF9jbGVhbnVwKHZvaWQpCi17Ci0JaWYgKGZsYXNoX210ZCkgewotCQlkZWxfbXRkX3BhcnRpdGlvbnMoZmxhc2hfbXRkKTsKLQkJbWFwX2Rlc3Ryb3koZmxhc2hfbXRkKTsKLQkJa2ZyZWUocGFyc2VkX3BhcnRzKTsKLQl9Ci19Ci0KLW1vZHVsZV9pbml0KG9tYXBfdG90b19tdGRfaW5pdCk7Ci1tb2R1bGVfZXhpdChvbWFwX3RvdG9fbXRkX2NsZWFudXApOwotCi1NT0RVTEVfQVVUSE9SKCJKaWFuIFpoYW5nIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk9NQVAgVG90byBib2FyZCBtYXAgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BjaS5jIGIvZHJpdmVycy9tdGQvbWFwcy9wY2kuYwppbmRleCA1YzZhMjVjLi40OGY0Y2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BjaS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGNpLmMKQEAgLTIwMywxNSArMjAzLDggQEAKIAkJICogbm90IGVuYWJsZWQsIHNob3VsZCB3ZSBiZSBhbGxvY2F0aW5nIGEgbmV3IHJlc291cmNlIGZvciBpdAogCQkgKiBvciBzaW1wbHkgZW5hYmxpbmcgaXQ/CiAJCSAqLwotCQlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCBQQ0lfUk9NX1JFU09VUkNFKSAmCi0JCQkJICAgIElPUkVTT1VSQ0VfUk9NX0VOQUJMRSkpIHsKLQkJICAgICAJdTMyIHZhbDsKLQkJCXBjaV9yZXNvdXJjZV9mbGFncyhkZXYsIFBDSV9ST01fUkVTT1VSQ0UpIHw9IElPUkVTT1VSQ0VfUk9NX0VOQUJMRTsKLQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9ST01fQUREUkVTUywgJnZhbCk7Ci0JCQl2YWwgfD0gUENJX1JPTV9BRERSRVNTX0VOQUJMRTsKLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfUk9NX0FERFJFU1MsIHZhbCk7Ci0JCQlwcmludGsoIiVzOiBlbmFibGluZyBleHBhbnNpb24gUk9NXG4iLCBwY2lfbmFtZShkZXYpKTsKLQkJfQorCQlwY2lfZW5hYmxlX3JvbShkZXYpOworCQlwcmludGsoIiVzOiBlbmFibGluZyBleHBhbnNpb24gUk9NXG4iLCBwY2lfbmFtZShkZXYpKTsKIAl9CiAKIAlpZiAoIWxlbiB8fCAhYmFzZSkKQEAgLTIzMiwxOCArMjI1LDEzIEBACiBzdGF0aWMgdm9pZAogaW50ZWxfZGMyMTI4NV9leGl0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtYXBfcGNpX2luZm8gKm1hcCkKIHsKLQl1MzIgdmFsOwotCiAJaWYgKG1hcC0+YmFzZSkKIAkJaW91bm1hcChtYXAtPmJhc2UpOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIHVuZG8gdGhlIFBDSSBCQVIyL1BDSSBST00gQkFSIGFkZHJlc3MgYWx0ZXJhdGlvbi4KIAkgKi8KLQlwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCBQQ0lfUk9NX1JFU09VUkNFKSAmPSB+SU9SRVNPVVJDRV9ST01fRU5BQkxFOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9ST01fQUREUkVTUywgJnZhbCk7Ci0JdmFsICY9IH5QQ0lfUk9NX0FERFJFU1NfRU5BQkxFOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfUk9NX0FERFJFU1MsIHZhbCk7CisJcGNpX2Rpc2FibGVfcm9tKGRldik7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jIGIvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYwppbmRleCA5MDkyNGZiLi5kNjAwYzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKQEAgLTExOCw3ICsxMTgsOCBAQAogCQlERUJVRygyLCAiUmVtYXBwaW5nIHdpbmRvdyBmcm9tIDB4JTguOHggdG8gMHglOC44eCIsCiAJCSAgICAgIGRldi0+b2Zmc2V0LCBtcnEuQ2FyZE9mZnNldCk7CiAJCW1ycS5QYWdlID0gMDsKLQkJaWYoIChyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKHdpbiwgJm1ycSkpICE9IENTX1NVQ0NFU1MpIHsKKwkJcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZSh3aW4sICZtcnEpOworCQlpZiAocmV0ICE9IDApIHsKIAkJCWNzX2Vycm9yKGRldi0+cF9kZXYsIE1hcE1lbVBhZ2UsIHJldCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtMzI2LDkgKzMyNyw4IEBACiAKIAlERUJVRygyLCAiZGV2ID0gJXAgb24gPSAlZCB2cHAgPSAlZFxuIiwgZGV2LCBvbiwgZGV2LT52cHApOwogCXJldCA9IHBjbWNpYV9tb2RpZnlfY29uZmlndXJhdGlvbihsaW5rLCAmbW9kKTsKLQlpZihyZXQgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXQgIT0gMCkKIAkJY3NfZXJyb3IobGluaywgTW9kaWZ5Q29uZmlndXJhdGlvbiwgcmV0KTsKLQl9CiB9CiAKIApAQCAtMzY4LDE0ICszNjgsMTQgQEAKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBSRVRVUk5fRklSU1RfVFVQTEU7CiAKIAlyYyA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKLQl3aGlsZShyYyA9PSBDU19TVUNDRVNTKSB7CisJd2hpbGUgKHJjID09IDApIHsKIAkJcmMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKLQkJaWYocmMgIT0gQ1NfU1VDQ0VTUykgeworCQlpZiAocmMgIT0gMCkgewogCQkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCByYyk7CiAJCQlicmVhazsKIAkJfQotCQlyYyA9IHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0JCWlmKHJjICE9IENTX1NVQ0NFU1MpIHsKKwkJcmMgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpOworCQlpZiAocmMgIT0gMCkgewogCQkJY3NfZXJyb3IobGluaywgUGFyc2VUdXBsZSwgcmMpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTQ5MywxOCArNDkzLDExIEBACiAJaW50IGxhc3RfcmV0ID0gMCwgbGFzdF9mbiA9IDA7CiAJaW50IHJldDsKIAlpbnQgaTsKLQljb25maWdfaW5mb190IHQ7CiAJc3RhdGljIGNoYXIgKnByb2Jlc1tdID0geyAiamVkZWNfcHJvYmUiLCAiY2ZpX3Byb2JlIiB9OwogCWludCBuZXdfbmFtZSA9IDA7CiAKIAlERUJVRygzLCAibGluaz0weCVwIiwgbGluayk7CiAKLQlERUJVRygyLCAiVmFsaWRhdGluZyBDSVMiKTsKLQlyZXQgPSBwY21jaWFfdmFsaWRhdGVfY2lzKGxpbmssIE5VTEwpOwotCWlmKHJldCAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmssIEdldFR1cGxlRGF0YSwgcmV0KTsKLQl9Ci0KIAljYXJkX3NldHRpbmdzKGRldiwgbGluaywgJm5ld19uYW1lKTsKIAogCWRldi0+cGNtY2lhX21hcC5waHlzID0gTk9fWElQOwpAQCAtNTcxLDEwICs1NjQsNyBAQAogCWRldi0+cGNtY2lhX21hcC5tYXBfcHJpdl8xID0gKHVuc2lnbmVkIGxvbmcpZGV2OwogCWRldi0+cGNtY2lhX21hcC5tYXBfcHJpdl8yID0gKHVuc2lnbmVkIGxvbmcpbGluay0+d2luOwogCi0JREVCVUcoMiwgIkdldHRpbmcgY29uZmlndXJhdGlvbiIpOwotCUNTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmdCkpOwotCURFQlVHKDIsICJWY2MgPSAlZCBWcHAxID0gJWQgVnBwMiA9ICVkIiwgdC5WY2MsIHQuVnBwMSwgdC5WcHAyKTsKLQlkZXYtPnZwcCA9ICh2cHApID8gdnBwIDogdC5WcHAxOworCWRldi0+dnBwID0gKHZwcCkgPyB2cHAgOiBsaW5rLT5zb2NrZXQuc29ja2V0LlZwcDsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOwogCWlmKHNldHZwcCA9PSAyKSB7CiAJCWxpbmstPmNvbmYuVnBwID0gZGV2LT52cHA7CkBAIC01ODMsMTYgKzU3MywxMCBAQAogCX0KIAogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUlk7Ci0JbGluay0+Y29uZi5Db25maWdCYXNlID0gdC5Db25maWdCYXNlOwotCWxpbmstPmNvbmYuU3RhdHVzID0gdC5TdGF0dXM7Ci0JbGluay0+Y29uZi5QaW4gPSB0LlBpbjsKLQlsaW5rLT5jb25mLkNvcHkgPSB0LkNvcHk7Ci0JbGluay0+Y29uZi5FeHRTdGF0dXMgPSB0LkV4dFN0YXR1czsKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMDsKLQlsaW5rLT5jb25mLlByZXNlbnQgPSB0LlByZXNlbnQ7CiAJREVCVUcoMiwgIlNldHRpbmcgQ29uZmlndXJhdGlvbiIpOwogCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwotCWlmKHJldCAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHJldCAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCByZXQpOwogCQlpZiAoZGV2LT53aW5fYmFzZSkgewogCQkJaW91bm1hcChkZXYtPndpbl9iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKaW5kZXggNDlhY2Q0MS4uNWZjZmVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKQEAgLTIzMCw4ICsyMzAsNyBAQAogCiAjaWZkZWYgQ09ORklHX01URF9PRl9QQVJUUwogCWlmIChlcnIgPT0gMCkgewotCQllcnIgPSBvZl9tdGRfcGFyc2VfcGFydGl0aW9ucygmZGV2LT5kZXYsIGluZm8tPm10ZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHAsICZpbmZvLT5wYXJ0cyk7CisJCWVyciA9IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKCZkZXYtPmRldiwgZHAsICZpbmZvLT5wYXJ0cyk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jIGIvZHJpdmVycy9tdGQvbWFwcy93YWxudXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0MzQ3Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBNYXBwaW5nIGZvciBXYWxudXQgZmxhc2gKLSAqICh1c2VkIGVib255LmMgYXMgYSAiZnJhbWV3b3JrIikKLSAqCi0gKiBIZWlra2kgTGluZGhvbG0gPGhvbGluZGhvQGluZnJhZGVhZC5vcmc+Ci0gKgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaWJtNHh4Lmg+Ci0jaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC93YWxudXQuaD4KLQotLyogdGhlc2Ugc2hvdWxkIGJlIGluIHBsYXRmb3Jtcy80eHgvd2FsbnV0LmggPyAqLwotI2RlZmluZSBXQUxOVVRfRkxBU0hfT05CRF9OKHgpCQkoeCAmIDB4MDIpCi0jZGVmaW5lIFdBTE5VVF9GTEFTSF9TUkFNX1NFTCh4KQkoeCAmIDB4MDEpCi0jZGVmaW5lIFdBTE5VVF9GTEFTSF9MT1cJCTB4RkZGMDAwMDAKLSNkZWZpbmUgV0FMTlVUX0ZMQVNIX0hJR0gJCTB4RkZGODAwMDAKLSNkZWZpbmUgV0FMTlVUX0ZMQVNIX1NJWkUJCTB4ODAwMDAKLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZmxhc2g7Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2luZm8gd2FsbnV0X21hcCA9IHsKLQkubmFtZSA9CQkiV2FsbnV0IGZsYXNoIiwKLQkuc2l6ZSA9CQlXQUxOVVRfRkxBU0hfU0laRSwKLQkuYmFua3dpZHRoID0JMSwKLX07Ci0KLS8qIEFjdHVhbGx5LCBPcGVuQklPUyBpcyB0aGUgbGFzdCAxMjggS2lCIG9mIHRoZSBmbGFzaCAtIGJldHRlcgotICogcGFydGl0aW9uaW5nIGNvdWxkIGJlIG1hZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB3YWxudXRfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPSAgICJPcGVuQklPUyIsCi0JCS5vZmZzZXQgPSAweDAsCi0JCS5zaXplID0gICBXQUxOVVRfRkxBU0hfU0laRSwKLQkJLyoubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsICovIC8qIGZvcmNlIHJlYWQtb25seSAqLwotCX0KLX07Ci0KLWludCBfX2luaXQgaW5pdF93YWxudXQodm9pZCkKLXsKLQl1OCBmcGdhX2JyZHMxOwotCXZvaWQgKmZwZ2FfYnJkczFfYWRyOwotCXZvaWQgKmZwZ2Ffc3RhdHVzX2FkcjsKLQl1bnNpZ25lZCBsb25nIGZsYXNoX2Jhc2U7Ci0KLQkvKiB0aGlzIHNob3VsZCBhbHJlYWR5IGJlIG1hcHBlZCAocGxhdGZvcm0vNHh4L3dhbG51dC5jKSAqLwotCWZwZ2Ffc3RhdHVzX2FkciA9IGlvcmVtYXAoV0FMTlVUX0ZQR0FfQkFTRSwgOCk7Ci0JaWYgKCFmcGdhX3N0YXR1c19hZHIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZnBnYV9icmRzMV9hZHIgPSBmcGdhX3N0YXR1c19hZHIrNTsKLQlmcGdhX2JyZHMxID0gcmVhZGIoZnBnYV9icmRzMV9hZHIpOwotCS8qIGlvdW5tYXAoZnBnYV9zdGF0dXNfYWRyKTsgKi8KLQotCWlmIChXQUxOVVRfRkxBU0hfT05CRF9OKGZwZ2FfYnJkczEpKSB7Ci0JCXByaW50aygiVGhlIG9uLWJvYXJkIGZsYXNoIGlzIGRpc2FibGVkIChVNzkgc3cgNSkhIik7Ci0JCWlvdW5tYXAoZnBnYV9zdGF0dXNfYWRyKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWlmIChXQUxOVVRfRkxBU0hfU1JBTV9TRUwoZnBnYV9icmRzMSkpCi0JCWZsYXNoX2Jhc2UgPSBXQUxOVVRfRkxBU0hfTE9XOwotCWVsc2UKLQkJZmxhc2hfYmFzZSA9IFdBTE5VVF9GTEFTSF9ISUdIOwotCi0Jd2FsbnV0X21hcC5waHlzID0gZmxhc2hfYmFzZTsKLQl3YWxudXRfbWFwLnZpcnQgPQotCQkodm9pZCBfX2lvbWVtICopaW9yZW1hcChmbGFzaF9iYXNlLCB3YWxudXRfbWFwLnNpemUpOwotCi0JaWYgKCF3YWxudXRfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcCBmbGFzaC5cbiIpOwotCQlpb3VubWFwKGZwZ2Ffc3RhdHVzX2Fkcik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXNpbXBsZV9tYXBfaW5pdCgmd2FsbnV0X21hcCk7Ci0KLQlmbGFzaCA9IGRvX21hcF9wcm9iZSgiamVkZWNfcHJvYmUiLCAmd2FsbnV0X21hcCk7Ci0JaWYgKGZsYXNoKSB7Ci0JCWZsYXNoLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQlhZGRfbXRkX3BhcnRpdGlvbnMoZmxhc2gsIHdhbG51dF9wYXJ0aXRpb25zLAotCQkJCQlBUlJBWV9TSVpFKHdhbG51dF9wYXJ0aXRpb25zKSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCJtYXAgcHJvYmUgZmFpbGVkIGZvciBmbGFzaFxuIik7Ci0JCWlvdW5tYXAoZnBnYV9zdGF0dXNfYWRyKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0KLQlpb3VubWFwKGZwZ2Ffc3RhdHVzX2Fkcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3dhbG51dCh2b2lkKQotewotCWlmIChmbGFzaCkgewotCQlkZWxfbXRkX3BhcnRpdGlvbnMoZmxhc2gpOwotCQltYXBfZGVzdHJveShmbGFzaCk7Ci0JfQotCi0JaWYgKHdhbG51dF9tYXAudmlydCkgewotCQlpb3VubWFwKCh2b2lkICopd2FsbnV0X21hcC52aXJ0KTsKLQkJd2FsbnV0X21hcC52aXJ0ID0gMDsKLQl9Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfd2FsbnV0KTsKLW1vZHVsZV9leGl0KGNsZWFudXBfd2FsbnV0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSGVpa2tpIExpbmRob2xtIDxob2xpbmRob0BpbmZyYWRlYWQub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGFuZCBwYXJ0aXRpb25zIGZvciBJQk0gNDA1R1AgV2FsbnV0IGJvYXJkcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkY2hhci5jIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCmluZGV4IGUwMGQ0MjQuLjk2Mzg0MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNoYXIuYworKysgYi9kcml2ZXJzL210ZC9tdGRjaGFyLmMKQEAgLTI2LDEzICsyNiwxMSBAQAogCWlmICghbXRkKQogCQlyZXR1cm47CiAKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEobXRkX2NsYXNzLCBOVUxMLAotCQkJICAgICAgTUtERVYoTVREX0NIQVJfTUFKT1IsIG10ZC0+aW5kZXgqMiksCi0JCQkgICAgICBOVUxMLCAibXRkJWQiLCBtdGQtPmluZGV4KTsKKwlkZXZpY2VfY3JlYXRlKG10ZF9jbGFzcywgTlVMTCwgTUtERVYoTVREX0NIQVJfTUFKT1IsIG10ZC0+aW5kZXgqMiksCisJCSAgICAgIE5VTEwsICJtdGQlZCIsIG10ZC0+aW5kZXgpOwogCi0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKG10ZF9jbGFzcywgTlVMTCwKLQkJCSAgICAgIE1LREVWKE1URF9DSEFSX01BSk9SLCBtdGQtPmluZGV4KjIrMSksCi0JCQkgICAgICBOVUxMLCAibXRkJWRybyIsIG10ZC0+aW5kZXgpOworCWRldmljZV9jcmVhdGUobXRkX2NsYXNzLCBOVUxMLCBNS0RFVihNVERfQ0hBUl9NQUpPUiwgbXRkLT5pbmRleCoyKzEpLAorCQkgICAgICBOVUxMLCAibXRkJWRybyIsIG10ZC0+aW5kZXgpOwogfQogCiBzdGF0aWMgdm9pZCBtdGRfbm90aWZ5X3JlbW92ZShzdHJ1Y3QgbXRkX2luZm8qIG10ZCkKQEAgLTM1MCw3ICszNDgsNyBAQAogCXdha2VfdXAoKHdhaXRfcXVldWVfaGVhZF90ICopaW5zdHItPnByaXYpOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX09UUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX09ORU5BTkRfT1RQKQorI2lmZGVmIENPTkZJR19IQVZFX01URF9PVFAKIHN0YXRpYyBpbnQgb3RwX3NlbGVjdF9maWxlbW9kZShzdHJ1Y3QgbXRkX2ZpbGVfaW5mbyAqbWZpLCBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG1maS0+bXRkOwpAQCAtNjY3LDcgKzY2NSw3IEBACiAJCWJyZWFrOwogCX0KIAotI2lmIGRlZmluZWQoQ09ORklHX01URF9PVFApIHx8IGRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09UUCkKKyNpZmRlZiBDT05GSUdfSEFWRV9NVERfT1RQCiAJY2FzZSBPVFBTRUxFQ1Q6CiAJewogCQlpbnQgbW9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKaW5kZXggMjk3MmE1ZS4uNzg5ODQyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaW5zdHItPmZhaWxfYWRkciA9IDB4ZmZmZmZmZmY7CisJaW5zdHItPmZhaWxfYWRkciA9IE1URF9GQUlMX0FERFJfVU5LTk9XTjsKIAogCS8qIG1ha2UgYSBsb2NhbCBjb3B5IG9mIGluc3RyIHRvIGF2b2lkIG1vZGlmeWluZyB0aGUgY2FsbGVyJ3Mgc3RydWN0ICovCiAJZXJhc2UgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGVyYXNlX2luZm8pLCBHRlBfS0VSTkVMKTsKQEAgLTQ5Myw3ICs0OTMsNyBAQAogCQkJLyogc2FuaXR5IGNoZWNrOiBzaG91bGQgbmV2ZXIgaGFwcGVuIHNpbmNlCiAJCQkgKiBibG9jayBhbGlnbm1lbnQgaGFzIGJlZW4gY2hlY2tlZCBhYm92ZSAqLwogCQkJQlVHX09OKGVyciA9PSAtRUlOVkFMKTsKLQkJCWlmIChlcmFzZS0+ZmFpbF9hZGRyICE9IDB4ZmZmZmZmZmYpCisJCQlpZiAoZXJhc2UtPmZhaWxfYWRkciAhPSBNVERfRkFJTF9BRERSX1VOS05PV04pCiAJCQkJaW5zdHItPmZhaWxfYWRkciA9IGVyYXNlLT5mYWlsX2FkZHIgKyBvZmZzZXQ7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkb29wcy5jIGIvZHJpdmVycy9tdGQvbXRkb29wcy5jCmluZGV4IDVhNjgwZTEuLmFlYmIzYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZG9vcHMuYworKysgYi9kcml2ZXJzL210ZC9tdGRvb3BzLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAKKyNkZWZpbmUgTVRET09QU19LRVJOTVNHX01BR0lDIDB4NWQwMDVkMDAKICNkZWZpbmUgT09QU19QQUdFX1NJWkUgNDA5NgogCiBzdGF0aWMgc3RydWN0IG10ZG9vcHNfY29udGV4dCB7CkBAIC05OSw3ICsxMDAsNyBAQAogCWludCByZXQ7CiAKIAljeHQtPm5leHRwYWdlKys7Ci0JaWYgKGN4dC0+bmV4dHBhZ2UgPiBjeHQtPm9vcHNfcGFnZXMpCisJaWYgKGN4dC0+bmV4dHBhZ2UgPj0gY3h0LT5vb3BzX3BhZ2VzKQogCQljeHQtPm5leHRwYWdlID0gMDsKIAljeHQtPm5leHRjb3VudCsrOwogCWlmIChjeHQtPm5leHRjb3VudCA9PSAweGZmZmZmZmZmKQpAQCAtMTQxLDcgKzE0Miw3IEBACiAJbW9kID0gKGN4dC0+bmV4dHBhZ2UgKiBPT1BTX1BBR0VfU0laRSkgJSBtdGQtPmVyYXNlc2l6ZTsKIAlpZiAobW9kICE9IDApIHsKIAkJY3h0LT5uZXh0cGFnZSA9IGN4dC0+bmV4dHBhZ2UgKyAoKG10ZC0+ZXJhc2VzaXplIC0gbW9kKSAvIE9PUFNfUEFHRV9TSVpFKTsKLQkJaWYgKGN4dC0+bmV4dHBhZ2UgPiBjeHQtPm9vcHNfcGFnZXMpCisJCWlmIChjeHQtPm5leHRwYWdlID49IGN4dC0+b29wc19wYWdlcykKIAkJCWN4dC0+bmV4dHBhZ2UgPSAwOwogCX0KIApAQCAtMTU4LDcgKzE1OSw3IEBACiAJCQkJY3h0LT5uZXh0cGFnZSAqIE9PUFNfUEFHRV9TSVpFKTsKIAkJaSsrOwogCQljeHQtPm5leHRwYWdlID0gY3h0LT5uZXh0cGFnZSArIChtdGQtPmVyYXNlc2l6ZSAvIE9PUFNfUEFHRV9TSVpFKTsKLQkJaWYgKGN4dC0+bmV4dHBhZ2UgPiBjeHQtPm9vcHNfcGFnZXMpCisJCWlmIChjeHQtPm5leHRwYWdlID49IGN4dC0+b29wc19wYWdlcykKIAkJCWN4dC0+bmV4dHBhZ2UgPSAwOwogCQlpZiAoaSA9PSAoY3h0LT5vb3BzX3BhZ2VzIC8gKG10ZC0+ZXJhc2VzaXplIC8gT09QU19QQUdFX1NJWkUpKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiBBbGwgYmxvY2tzIGJhZCFcbiIpOwpAQCAtMjI0LDQwICsyMjUsNDAgQEAKIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGN4dC0+bXRkOwogCWludCByZXQsIHBhZ2UsIG1heHBvcyA9IDA7Ci0JdTMyIGNvdW50LCBtYXhjb3VudCA9IDB4ZmZmZmZmZmY7CisJdTMyIGNvdW50WzJdLCBtYXhjb3VudCA9IDB4ZmZmZmZmZmY7CiAJc2l6ZV90IHJldGxlbjsKIAogCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBjeHQtPm9vcHNfcGFnZXM7IHBhZ2UrKykgewotCQlyZXQgPSBtdGQtPnJlYWQobXRkLCBwYWdlICogT09QU19QQUdFX1NJWkUsIDQsICZyZXRsZW4sICh1X2NoYXIgKikgJmNvdW50KTsKLQkJaWYgKChyZXRsZW4gIT0gNCkgfHwgKChyZXQgPCAwKSAmJiAocmV0ICE9IC1FVUNMRUFOKSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAibXRkb29wczogUmVhZCBmYWlsdXJlIGF0ICVkICgldGQgb2YgNCByZWFkKSIKKwkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgcGFnZSAqIE9PUFNfUEFHRV9TSVpFLCA4LCAmcmV0bGVuLCAodV9jaGFyICopICZjb3VudFswXSk7CisJCWlmICgocmV0bGVuICE9IDgpIHx8ICgocmV0IDwgMCkgJiYgKHJldCAhPSAtRVVDTEVBTikpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIm10ZG9vcHM6IFJlYWQgZmFpbHVyZSBhdCAlZCAoJXRkIG9mIDggcmVhZCkiCiAJCQkJIiwgZXJyICVkLlxuIiwgcGFnZSAqIE9PUFNfUEFHRV9TSVpFLCByZXRsZW4sIHJldCk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChjb3VudCA9PSAweGZmZmZmZmZmKQorCQlpZiAoY291bnRbMV0gIT0gTVRET09QU19LRVJOTVNHX01BR0lDKQorCQkJY29udGludWU7CisJCWlmIChjb3VudFswXSA9PSAweGZmZmZmZmZmKQogCQkJY29udGludWU7CiAJCWlmIChtYXhjb3VudCA9PSAweGZmZmZmZmZmKSB7Ci0JCQltYXhjb3VudCA9IGNvdW50OworCQkJbWF4Y291bnQgPSBjb3VudFswXTsKIAkJCW1heHBvcyA9IHBhZ2U7Ci0JCX0gZWxzZSBpZiAoKGNvdW50IDwgMHg0MDAwMDAwMCkgJiYgKG1heGNvdW50ID4gMHhjMDAwMDAwMCkpIHsKLQkJCW1heGNvdW50ID0gY291bnQ7CisJCX0gZWxzZSBpZiAoKGNvdW50WzBdIDwgMHg0MDAwMDAwMCkgJiYgKG1heGNvdW50ID4gMHhjMDAwMDAwMCkpIHsKKwkJCW1heGNvdW50ID0gY291bnRbMF07CiAJCQltYXhwb3MgPSBwYWdlOwotCQl9IGVsc2UgaWYgKChjb3VudCA+IG1heGNvdW50KSAmJiAoY291bnQgPCAweGMwMDAwMDAwKSkgewotCQkJbWF4Y291bnQgPSBjb3VudDsKKwkJfSBlbHNlIGlmICgoY291bnRbMF0gPiBtYXhjb3VudCkgJiYgKGNvdW50WzBdIDwgMHhjMDAwMDAwMCkpIHsKKwkJCW1heGNvdW50ID0gY291bnRbMF07CiAJCQltYXhwb3MgPSBwYWdlOwotCQl9IGVsc2UgaWYgKChjb3VudCA+IG1heGNvdW50KSAmJiAoY291bnQgPiAweGMwMDAwMDAwKQorCQl9IGVsc2UgaWYgKChjb3VudFswXSA+IG1heGNvdW50KSAmJiAoY291bnRbMF0gPiAweGMwMDAwMDAwKQogCQkJCQkmJiAobWF4Y291bnQgPiAweDgwMDAwMDAwKSkgewotCQkJbWF4Y291bnQgPSBjb3VudDsKKwkJCW1heGNvdW50ID0gY291bnRbMF07CiAJCQltYXhwb3MgPSBwYWdlOwogCQl9CiAJfQogCWlmIChtYXhjb3VudCA9PSAweGZmZmZmZmZmKSB7CiAJCWN4dC0+bmV4dHBhZ2UgPSAwOwogCQljeHQtPm5leHRjb3VudCA9IDE7Ci0JCWN4dC0+cmVhZHkgPSAxOwotCQlwcmludGsoS0VSTl9ERUJVRyAibXRkb29wczogUmVhZHkgJWQsICVkIChmaXJzdCBpbml0KVxuIiwKLQkJCQljeHQtPm5leHRwYWdlLCBjeHQtPm5leHRjb3VudCk7CisJCXNjaGVkdWxlX3dvcmsoJmN4dC0+d29ya19lcmFzZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM1OCw4ICszNTksOSBAQAogCiAJaWYgKGN4dC0+d3JpdGVjb3VudCA9PSAwKSB7CiAJCXUzMiAqc3RhbXAgPSBjeHQtPm9vcHNfYnVmOwotCQkqc3RhbXAgPSBjeHQtPm5leHRjb3VudDsKLQkJY3h0LT53cml0ZWNvdW50ID0gNDsKKwkJKnN0YW1wKysgPSBjeHQtPm5leHRjb3VudDsKKwkJKnN0YW1wID0gTVRET09QU19LRVJOTVNHX01BR0lDOworCQljeHQtPndyaXRlY291bnQgPSA4OwogCX0KIAogCWlmICgoY291bnQgKyBjeHQtPndyaXRlY291bnQpID4gT09QU19QQUdFX1NJWkUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMgYi9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKaW5kZXggZWRiOTBiNS4uMzcyODkxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJaW5zdHItPmFkZHIgKz0gcGFydC0+b2Zmc2V0OwogCXJldCA9IHBhcnQtPm1hc3Rlci0+ZXJhc2UocGFydC0+bWFzdGVyLCBpbnN0cik7CiAJaWYgKHJldCkgewotCQlpZiAoaW5zdHItPmZhaWxfYWRkciAhPSAweGZmZmZmZmZmKQorCQlpZiAoaW5zdHItPmZhaWxfYWRkciAhPSBNVERfRkFJTF9BRERSX1VOS05PV04pCiAJCQlpbnN0ci0+ZmFpbF9hZGRyIC09IHBhcnQtPm9mZnNldDsKIAkJaW5zdHItPmFkZHIgLT0gcGFydC0+b2Zmc2V0OwogCX0KQEAgLTIyNiw3ICsyMjYsNyBAQAogCWlmIChpbnN0ci0+bXRkLT5lcmFzZSA9PSBwYXJ0X2VyYXNlKSB7CiAJCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IFBBUlQoaW5zdHItPm10ZCk7CiAKLQkJaWYgKGluc3RyLT5mYWlsX2FkZHIgIT0gMHhmZmZmZmZmZikKKwkJaWYgKGluc3RyLT5mYWlsX2FkZHIgIT0gTVREX0ZBSUxfQUREUl9VTktOT1dOKQogCQkJaW5zdHItPmZhaWxfYWRkciAtPSBwYXJ0LT5vZmZzZXQ7CiAJCWluc3RyLT5hZGRyIC09IHBhcnQtPm9mZnNldDsKIAl9CkBAIC01NjQsMTAgKzU2NCw4IEBACiAKIAlmb3IgKCA7IHJldCA8PSAwICYmICp0eXBlczsgdHlwZXMrKykgewogCQlwYXJzZXIgPSBnZXRfcGFydGl0aW9uX3BhcnNlcigqdHlwZXMpOwotI2lmZGVmIENPTkZJR19LTU9ECiAJCWlmICghcGFyc2VyICYmICFyZXF1ZXN0X21vZHVsZSgiJXMiLCAqdHlwZXMpKQogCQkJCXBhcnNlciA9IGdldF9wYXJ0aXRpb25fcGFyc2VyKCp0eXBlcyk7Ci0jZW5kaWYKIAkJaWYgKCFwYXJzZXIpIHsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiJXMgcGFydGl0aW9uIHBhcnNpbmcgbm90IGF2YWlsYWJsZVxuIiwKIAkJCSAgICAgICAqdHlwZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCmluZGV4IDQxZjM2MWMuLjFjMmU5NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKQEAgLTU2LDYgKzU2LDEyIEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBpUEFRIGgxOTAwIGZsYXNoLgogCitjb25maWcgTVREX05BTkRfR1BJTworCXRyaXN0YXRlICJHUElPIE5BTkQgRmxhc2ggZHJpdmVyIgorCWRlcGVuZHMgb24gR0VORVJJQ19HUElPICYmIEFSTQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBhIEdQSU8gYmFzZWQgTkFORCBmbGFzaCBkcml2ZXIuCisKIGNvbmZpZyBNVERfTkFORF9TUElBCiAJdHJpc3RhdGUgIk5BTkQgRmxhc2ggZGV2aWNlIG9uIFNQSUEgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX1A3MjBUCkBAIC02OCwxMiArNzQsNiBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIE5BTkQgZmxhc2ggb24gQW1zdHJhZCBFMyAoRGVsdGEpLgogCi1jb25maWcgTVREX05BTkRfVE9UTwotCXRyaXN0YXRlICJOQU5EIEZsYXNoIGRldmljZSBvbiBUT1RPIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQICYmIEJST0tFTgotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIE5BTkQgZmxhc2ggb24gVGV4YXMgSW5zdHJ1bWVudHMgVG90byBwbGF0Zm9ybS4KLQogY29uZmlnIE1URF9OQU5EX1RTNzI1MAogCXRyaXN0YXRlICJOQU5EIEZsYXNoIGRldmljZSBvbiBUUy03MjUwIGJvYXJkIgogCWRlcGVuZHMgb24gTUFDSF9UUzcyWFgKQEAgLTE2MywxMyArMTYzLDYgQEAKIAkgIGluY29ycmVjdCBFQ0MgZ2VuZXJhdGlvbiwgYW5kIGlmIHVzaW5nIHRoZXNlLCB0aGUgZGVmYXVsdCBvZgogCSAgc29mdHdhcmUgRUNDIGlzIHByZWZlcmFibGUuCiAKLWNvbmZpZyBNVERfTkFORF9OREZDCi0JdHJpc3RhdGUgIk5ERkMgTmFuRCBGbGFzaCBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gNHh4ICYmICFQUENfTUVSR0UKLQlzZWxlY3QgTVREX05BTkRfRUNDX1NNQwotCWhlbHAKLQkgTkRGQyBOYW5kIEZsYXNoIENvbnRyb2xsZXJzIGFyZSBpbnRlZ3JhdGVkIGluIElCTS9BTUNDJ3MgNHh4IFNvQ3MKLQogY29uZmlnIE1URF9OQU5EX1MzQzI0MTBfQ0xLU1RPUAogCWJvb2wgIlMzQzI0MTAgTkFORCBJRExFIGNsb2NrIHN0b3AiCiAJZGVwZW5kcyBvbiBNVERfTkFORF9TM0MyNDEwCkBAIC0zNDAsNiArMzMzLDEzIEBACiAJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggZGV2aWNlIGZvdW5kIG9uCiAJICBQWEEzeHggcHJvY2Vzc29ycwogCitjb25maWcgTVREX05BTkRfUFhBM3h4X0JVSUxUSU4KKwlib29sICJVc2UgYnVpbHRpbiBkZWZpbml0aW9ucyBmb3Igc29tZSBOQU5EIGNoaXBzIChkZXByZWNhdGVkKSIKKwlkZXBlbmRzIG9uIE1URF9OQU5EX1BYQTN4eAorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBidWlsdGluIGRlZmluaXRpb25zIGZvciBzb21lIE5BTkQgY2hpcHMuIFRoaXMKKwkgIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcGxhdGZvcm0gc3BlY2lmaWMgZGF0YS4KKwogY29uZmlnIE1URF9OQU5EX0NNX1gyNzAKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBGbGFzaCBvbiBDTS1YMjcwIG1vZHVsZXMiCiAJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBNQUNIX0FSTUNPUkUKQEAgLTQwMCwxMCArNDAwLDI0IEBACiAKIGNvbmZpZyBNVERfTkFORF9GU0xfVVBNCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgb24gRnJlZXNjYWxlIFVQTSIKLQlkZXBlbmRzIG9uIE1URF9OQU5EICYmIE9GX0dQSU8gJiYgKFBQQ184M3h4IHx8IFBQQ184NXh4KQorCWRlcGVuZHMgb24gTVREX05BTkQgJiYgKFBQQ184M3h4IHx8IFBQQ184NXh4KQogCXNlbGVjdCBGU0xfTEJDCiAJaGVscAogCSAgRW5hYmxlcyBzdXBwb3J0IGZvciBOQU5EIEZsYXNoIGNoaXBzIHdpcmVkIG9udG8gRnJlZXNjYWxlIFBvd2VyUEMKIAkgIHByb2Nlc3NvciBsb2NhbGJ1cyB3aXRoIFVzZXItUHJvZ3JhbW1hYmxlIE1hY2hpbmUgc3VwcG9ydC4KIAorY29uZmlnIE1URF9OQU5EX01YQworCXRyaXN0YXRlICJNWEMgTkFORCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9NWDIKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggY29udHJvbGxlciBvbiB0aGUKKwkgIE1YQyBwcm9jZXNzb3JzLgorCitjb25maWcgTVREX05BTkRfU0hfRkxDVEwKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBvbiBSZW5lc2FzIFN1cGVySCBGTENUTCIKKwlkZXBlbmRzIG9uIE1URF9OQU5EICYmIFNVUEVSSCAmJiBDUFVfU1VCVFlQRV9TSDc3MjMKKwloZWxwCisJICBTZXZlcmFsIFJlbmVzYXMgU3VwZXJIIENQVSBoYXMgRkxDVEwuIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydAorCSAgZm9yIE5BTkQgRmxhc2ggdXNpbmcgRkxDVEwuIFRoaXMgZHJpdmVyIHN1cHBvcnQgU0g3NzIzLgorCiBlbmRpZiAjIE1URF9OQU5ECmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQppbmRleCBiNzg2YzVkLi5iNjYxNTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKQEAgLTgsNyArOCw2IEBACiBvYmotJChDT05GSUdfTVREX05BTkRfQ0FGRSkJCSs9IGNhZmVfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfU1BJQSkJCSs9IHNwaWEubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0FNU19ERUxUQSkJKz0gYW1zLWRlbHRhLm8KLW9iai0kKENPTkZJR19NVERfTkFORF9UT1RPKQkJKz0gdG90by5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQVVUQ1BVMTIpCQkrPSBhdXRjcHUxMi5vCiBvYmotJChDT05GSUdfTVREX05BTkRfRURCNzMxMikJCSs9IGVkYjczMTIubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0FVMTU1MCkJCSs9IGF1MTU1MG5kLm8KQEAgLTI0LDYgKzIzLDcgQEAKIG9iai0kKENPTkZJR19NVERfTkFORF9DUzU1M1gpCQkrPSBjczU1M3hfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfTkRGQykJCSs9IG5kZmMubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0FUTUVMKQkJKz0gYXRtZWxfbmFuZC5vCitvYmotJChDT05GSUdfTVREX05BTkRfR1BJTykJCSs9IGdwaW8ubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0NNX1gyNzApCQkrPSBjbXgyNzBfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQkFTTEVSX0VYQ0lURSkJKz0gZXhjaXRlX25hbmRmbGFzaC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfUFhBM3h4KQkJKz0gcHhhM3h4X25hbmQubwpAQCAtMzQsNSArMzQsNyBAQAogb2JqLSQoQ09ORklHX01URF9OQU5EX09SSU9OKQkJKz0gb3Jpb25fbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfRlNMX0VMQkMpCQkrPSBmc2xfZWxiY19uYW5kLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9GU0xfVVBNKQkJKz0gZnNsX3VwbS5vCitvYmotJChDT05GSUdfTVREX05BTkRfU0hfRkxDVEwpCQkrPSBzaF9mbGN0bC5vCitvYmotJChDT05GSUdfTVREX05BTkRfTVhDKQkJKz0gbXhjX25hbmQubwogCiBuYW5kLW9ianMgOj0gbmFuZF9iYXNlLm8gbmFuZF9iYnQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hbGF1ZGEuYyBiL2RyaXZlcnMvbXRkL25hbmQvYWxhdWRhLmMKaW5kZXggMjU3OTM3Yy4uOTYyMzgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9hbGF1ZGEuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2FsYXVkYS5jCkBAIC02OTEsNyArNjkxLDcgQEAKIAlhbFswXS5wb3J0ID0gQUxBVURBX1BPUlRfWEQ7CiAJYWxbMV0ucG9ydCA9IEFMQVVEQV9QT1JUX1NNOwogCi0JaW5mbygiYWxhdWRhIHByb2JlZCIpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgImFsYXVkYSBwcm9iZWRcbiIpOwogCWFsYXVkYV9jaGVja19tZWRpYShhbCk7CiAJYWxhdWRhX2NoZWNrX21lZGlhKGFsKzEpOwogCkBAIC03MTYsNyArNzE2LDcgQEAKIAlpZiAoYWwpCiAJCWtyZWZfcHV0KCZhbC0+a3JlZiwgYWxhdWRhX2RlbGV0ZSk7CiAKLQlpbmZvKCJhbGF1ZGEgZ29uZSIpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgImFsYXVkYSBnb25lIik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhbGF1ZGFfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYyBiL2RyaXZlcnMvbXRkL25hbmQvYW1zLWRlbHRhLmMKaW5kZXggMjZkNDI5OC4uNzgyOTk0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2Ftcy1kZWx0YS5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAogc3RhdGljIGludCBhbXNfZGVsdGFfbmFuZF9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlyZXR1cm4gb21hcF9nZXRfZ3Bpb19kYXRhaW4oQU1TX0RFTFRBX0dQSU9fUElOX05BTkRfUkIpOworCXJldHVybiBncGlvX2dldF92YWx1ZShBTVNfREVMVEFfR1BJT19QSU5fTkFORF9SQik7CiB9CiAKIC8qCkBAIC0xODUsNyArMTg1LDcgQEAKIAl0aGlzLT5yZWFkX2J1ZiA9IGFtc19kZWx0YV9yZWFkX2J1ZjsKIAl0aGlzLT52ZXJpZnlfYnVmID0gYW1zX2RlbHRhX3ZlcmlmeV9idWY7CiAJdGhpcy0+Y21kX2N0cmwgPSBhbXNfZGVsdGFfaHdjb250cm9sOwotCWlmICghb21hcF9yZXF1ZXN0X2dwaW8oQU1TX0RFTFRBX0dQSU9fUElOX05BTkRfUkIpKSB7CisJaWYgKGdwaW9fcmVxdWVzdChBTVNfREVMVEFfR1BJT19QSU5fTkFORF9SQiwgIm5hbmRfcmR5IikgPT0gMCkgewogCQl0aGlzLT5kZXZfcmVhZHkgPSBhbXNfZGVsdGFfbmFuZF9yZWFkeTsKIAl9IGVsc2UgewogCQl0aGlzLT5kZXZfcmVhZHkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdG1lbF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYwppbmRleCAzMzg3ZTBkLi5jOThjMTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYwpAQCAtMTc0LDQ4ICsxNzQsNiBAQAogfQogCiAvKgotICogd3JpdGUgb29iIGZvciBzbWFsbCBwYWdlcwotICovCi1zdGF0aWMgaW50IGF0bWVsX25hbmRfd3JpdGVfb29iXzUxMihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IHBhZ2UpCi17Ci0JaW50IGNodW5rID0gY2hpcC0+ZWNjLmJ5dGVzICsgY2hpcC0+ZWNjLnByZXBhZCArIGNoaXAtPmVjYy5wb3N0cGFkOwotCWludCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemUsIGxlbmd0aCA9IG10ZC0+b29ic2l6ZTsKLQlpbnQgbGVuLCBwb3MsIHN0YXR1cyA9IDA7Ci0JY29uc3QgdWludDhfdCAqYnVmcG9pID0gY2hpcC0+b29iX3BvaTsKLQotCXBvcyA9IGVjY3NpemUgKyBjaHVuazsKLQotCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TRVFJTiwgcG9zLCBwYWdlKTsKLQlsZW4gPSBtaW5fdChpbnQsIGxlbmd0aCwgY2h1bmspOwotCWNoaXAtPndyaXRlX2J1ZihtdGQsIGJ1ZnBvaSwgbGVuKTsKLQlidWZwb2kgKz0gbGVuOwotCWxlbmd0aCAtPSBsZW47Ci0JaWYgKGxlbmd0aCA+IDApCi0JCWNoaXAtPndyaXRlX2J1ZihtdGQsIGJ1ZnBvaSwgbGVuZ3RoKTsKLQotCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9QQUdFUFJPRywgLTEsIC0xKTsKLQlzdGF0dXMgPSBjaGlwLT53YWl0ZnVuYyhtdGQsIGNoaXApOwotCi0JcmV0dXJuIHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwgPyAtRUlPIDogMDsKLQotfQotCi0vKgotICogcmVhZCBvb2IgZm9yIHNtYWxsIHBhZ2VzCi0gKi8KLXN0YXRpYyBpbnQgYXRtZWxfbmFuZF9yZWFkX29vYl81MTIoc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCWludCBwYWdlLCBpbnQgc25kY21kKQotewotCWlmIChzbmRjbWQpIHsKLQkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURPT0IsIDAsIHBhZ2UpOwotCQlzbmRjbWQgPSAwOwotCX0KLQljaGlwLT5yZWFkX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7Ci0JcmV0dXJuIHNuZGNtZDsKLX0KLQotLyoKICAqIENhbGN1bGF0ZSBIVyBFQ0MKICAqCiAgKiBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgYSB3cml0ZQpAQCAtMjM1LDE0ICsxOTMsMTQgQEAKIAkvKiBnZXQgdGhlIGZpcnN0IDIgRUNDIGJ5dGVzICovCiAJZWNjX3ZhbHVlID0gZWNjX3JlYWRsKGhvc3QtPmVjYywgUFIpOwogCi0JZWNjX2NvZGVbZWNjcG9zWzBdXSA9IGVjY192YWx1ZSAmIDB4RkY7Ci0JZWNjX2NvZGVbZWNjcG9zWzFdXSA9IChlY2NfdmFsdWUgPj4gOCkgJiAweEZGOworCWVjY19jb2RlWzBdID0gZWNjX3ZhbHVlICYgMHhGRjsKKwllY2NfY29kZVsxXSA9IChlY2NfdmFsdWUgPj4gOCkgJiAweEZGOwogCiAJLyogZ2V0IHRoZSBsYXN0IDIgRUNDIGJ5dGVzICovCiAJZWNjX3ZhbHVlID0gZWNjX3JlYWRsKGhvc3QtPmVjYywgTlBSKSAmIEFUTUVMX0VDQ19OUEFSSVRZOwogCi0JZWNjX2NvZGVbZWNjcG9zWzJdXSA9IGVjY192YWx1ZSAmIDB4RkY7Ci0JZWNjX2NvZGVbZWNjcG9zWzNdXSA9IChlY2NfdmFsdWUgPj4gOCkgJiAweEZGOworCWVjY19jb2RlWzJdID0gZWNjX3ZhbHVlICYgMHhGRjsKKwllY2NfY29kZVszXSA9IChlY2NfdmFsdWUgPj4gOCkgJiAweEZGOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NzYsMTQgKzQzNCwxMiBAQAogCQkJcmVzID0gLUVJTzsKIAkJCWdvdG8gZXJyX2VjY19pb3JlbWFwOwogCQl9Ci0JCW5hbmRfY2hpcC0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IV19TWU5EUk9NRTsKKwkJbmFuZF9jaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXOwogCQluYW5kX2NoaXAtPmVjYy5jYWxjdWxhdGUgPSBhdG1lbF9uYW5kX2NhbGN1bGF0ZTsKIAkJbmFuZF9jaGlwLT5lY2MuY29ycmVjdCA9IGF0bWVsX25hbmRfY29ycmVjdDsKIAkJbmFuZF9jaGlwLT5lY2MuaHdjdGwgPSBhdG1lbF9uYW5kX2h3Y3RsOwogCQluYW5kX2NoaXAtPmVjYy5yZWFkX3BhZ2UgPSBhdG1lbF9uYW5kX3JlYWRfcGFnZTsKIAkJbmFuZF9jaGlwLT5lY2MuYnl0ZXMgPSA0OwotCQluYW5kX2NoaXAtPmVjYy5wcmVwYWQgPSAwOwotCQluYW5kX2NoaXAtPmVjYy5wb3N0cGFkID0gMDsKIAl9CiAKIAluYW5kX2NoaXAtPmNoaXBfZGVsYXkgPSAyMDsJCS8qIDIwdXMgY29tbWFuZCBkZWxheSB0aW1lICovCkBAIC01MTQsNyArNDcwLDcgQEAKIAkJZ290byBlcnJfc2Nhbl9pZGVudDsKIAl9CiAKLQlpZiAobmFuZF9jaGlwLT5lY2MubW9kZSA9PSBOQU5EX0VDQ19IV19TWU5EUk9NRSkgeworCWlmIChuYW5kX2NoaXAtPmVjYy5tb2RlID09IE5BTkRfRUNDX0hXKSB7CiAJCS8qIEVDQyBpcyBjYWxjdWxhdGVkIGZvciB0aGUgd2hvbGUgcGFnZSAoMSBzdGVwKSAqLwogCQluYW5kX2NoaXAtPmVjYy5zaXplID0gbXRkLT53cml0ZXNpemU7CiAKQEAgLTUyMiw4ICs0NzgsNiBAQAogCQlzd2l0Y2ggKG10ZC0+d3JpdGVzaXplKSB7CiAJCWNhc2UgNTEyOgogCQkJbmFuZF9jaGlwLT5lY2MubGF5b3V0ID0gJmF0bWVsX29vYmluZm9fc21hbGw7Ci0JCQluYW5kX2NoaXAtPmVjYy5yZWFkX29vYiA9IGF0bWVsX25hbmRfcmVhZF9vb2JfNTEyOwotCQkJbmFuZF9jaGlwLT5lY2Mud3JpdGVfb29iID0gYXRtZWxfbmFuZF93cml0ZV9vb2JfNTEyOwogCQkJZWNjX3dyaXRlbChob3N0LT5lY2MsIE1SLCBBVE1FTF9FQ0NfUEFHRVNJWkVfNTI4KTsKIAkJCWJyZWFrOwogCQljYXNlIDEwMjQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2NhZmVfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9jYWZlX25hbmQuYwppbmRleCA5NTM0NWQwLi5iODA2NGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2NhZmVfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvY2FmZV9uYW5kLmMKQEAgLTEsNiArMSw5IEBACiAvKgogICogRHJpdmVyIGZvciBPbmUgTGFwdG9wIFBlciBDaGlsZCDigJhDQUbDieKAmSBjb250cm9sbGVyLCBha2EgTWFydmVsbCA4OEFMUDAxCiAgKgorICogVGhlIGRhdGEgc2hlZXQgZm9yIHRoaXMgZGV2aWNlIGNhbiBiZSBmb3VuZCBhdDoKKyAqICAgIGh0dHA6Ly93d3cubWFydmVsbC5jb20vcHJvZHVjdHMvcGNjb25uLzg4QUxQMDEuanNwCisgKgogICogQ29weXJpZ2h0IMKpIDIwMDYgUmVkIEhhdCwgSW5jLgogICogQ29weXJpZ2h0IMKpIDIwMDYgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICovCkBAIC04NDIsNyArODQ1LDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhZmVfbmFuZF90YmxbXSA9IHsKLQl7IDB4MTFhYiwgMHg0MTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCisJeyBQQ0lfVkVORE9SX0lEX01BUlZFTEwsIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF84OEFMUDAxX05BTkQsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMKaW5kZXggMzM3MGE4MC4uOWYxYjQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9jczU1M3hfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvY3M1NTN4X25hbmQuYwpAQCAtMjg5LDggKzI4OSwxMCBAQAogCWludCBpOwogCXVpbnQ2NF90IHZhbDsKIAorI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCWludCBtdGRfcGFydHNfbmIgPSAwOwogCXN0cnVjdCBtdGRfcGFydGl0aW9uICptdGRfcGFydHMgPSBOVUxMOworI2VuZGlmCiAKIAkvKiBJZiB0aGUgQ1BVIGlzbid0IGEgR2VvZGUgR1ggb3IgTFgsIGFib3J0ICovCiAJaWYgKCFpc19nZW9kZSgpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfZWxiY19uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYwppbmRleCA5OGFkM2NlLi40YWE1YmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYwpAQCAtOTE4LDggKzkxOCw3IEBACiAKICNpZmRlZiBDT05GSUdfTVREX09GX1BBUlRTCiAJaWYgKHJldCA9PSAwKSB7Ci0JCXJldCA9IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKHByaXYtPmRldiwgJnByaXYtPm10ZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwgJnBhcnRzKTsKKwkJcmV0ID0gb2ZfbXRkX3BhcnNlX3BhcnRpdGlvbnMocHJpdi0+ZGV2LCBub2RlLCAmcGFydHMpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZnNsX3VwbS5jIGIvZHJpdmVycy9tdGQvbmFuZC9mc2xfdXBtLmMKaW5kZXggMWViZmQ4Ny4uMDI0ZTNmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfdXBtLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9mc2xfdXBtLmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpAQCAtMzYsOCArMzcsNiBAQAogCXVpbnQ4X3QgdXBtX2NtZF9vZmZzZXQ7CiAJdm9pZCBfX2lvbWVtICppb19iYXNlOwogCWludCBybmJfZ3BpbzsKLQljb25zdCB1aW50MzJfdCAqd2FpdF9wYXR0ZXJuOwotCWNvbnN0IHVpbnQzMl90ICp3YWl0X3dyaXRlOwogCWludCBjaGlwX2RlbGF5OwogfTsKIApAQCAtNjEsMTAgKzYwLDExIEBACiAJaWYgKGZ1bi0+cm5iX2dwaW8gPj0gMCkgewogCQl3aGlsZSAoLS1jbnQgJiYgIWZ1bl9jaGlwX3JlYWR5KCZmdW4tPm10ZCkpCiAJCQljcHVfcmVsYXgoKTsKKwkJaWYgKCFjbnQpCisJCQlkZXZfZXJyKGZ1bi0+ZGV2LCAidGlyZWQgd2FpdGluZyBmb3IgUk5CXG4iKTsKKwl9IGVsc2UgeworCQluZGVsYXkoMTAwKTsKIAl9Ci0KLQlpZiAoIWNudCkKLQkJZGV2X2VycihmdW4tPmRldiwgInRpcmVkIHdhaXRpbmcgZm9yIFJOQlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGZ1bl9jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0cmwpCkBAIC04OSw4ICs4OSw3IEBACiAKIAlmc2xfdXBtX3J1bl9wYXR0ZXJuKCZmdW4tPnVwbSwgZnVuLT5pb19iYXNlLCBjbWQpOwogCi0JaWYgKGZ1bi0+d2FpdF9wYXR0ZXJuKQotCQlmdW5fd2FpdF9ybmIoZnVuKTsKKwlmdW5fd2FpdF9ybmIoZnVuKTsKIH0KIAogc3RhdGljIHVpbnQ4X3QgZnVuX3JlYWRfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKQEAgLTExNiwxNCArMTE1LDE2IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJb3V0XzgoZnVuLT5jaGlwLklPX0FERFJfVywgYnVmW2ldKTsKLQkJaWYgKGZ1bi0+d2FpdF93cml0ZSkKLQkJCWZ1bl93YWl0X3JuYihmdW4pOworCQlmdW5fd2FpdF9ybmIoZnVuKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGZ1bl9jaGlwX2luaXQoc3RydWN0IGZzbF91cG1fbmFuZCAqZnVuKQorc3RhdGljIGludCBfX2RldmluaXQgZnVuX2NoaXBfaW5pdChzdHJ1Y3QgZnNsX3VwbV9uYW5kICpmdW4sCisJCQkJICAgY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICp1cG1fbnAsCisJCQkJICAgY29uc3Qgc3RydWN0IHJlc291cmNlICppb19yZXMpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmZsYXNoX25wOwogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCXN0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3R5cGVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwsIH07CiAjZW5kaWYKQEAgLTE0MywxOCArMTQ0LDM3IEBACiAJZnVuLT5tdGQucHJpdiA9ICZmdW4tPmNoaXA7CiAJZnVuLT5tdGQub3duZXIgPSBUSElTX01PRFVMRTsKIAorCWZsYXNoX25wID0gb2ZfZ2V0X25leHRfY2hpbGQodXBtX25wLCBOVUxMKTsKKwlpZiAoIWZsYXNoX25wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZ1bi0+bXRkLm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiV4LiVzIiwgaW9fcmVzLT5zdGFydCwKKwkJCQkgIGZsYXNoX25wLT5uYW1lKTsKKwlpZiAoIWZ1bi0+bXRkLm5hbWUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCiAJcmV0ID0gbmFuZF9zY2FuKCZmdW4tPm10ZCwgMSk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWZ1bi0+bXRkLm5hbWUgPSBmdW4tPmRldi0+YnVzX2lkOworCQlnb3RvIGVycjsKIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCXJldCA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKCZmdW4tPm10ZCwgcGFydF90eXBlcywgJmZ1bi0+cGFydHMsIDApOwotCWlmIChyZXQgPiAwKQotCQlyZXR1cm4gYWRkX210ZF9wYXJ0aXRpb25zKCZmdW4tPm10ZCwgZnVuLT5wYXJ0cywgcmV0KTsKKworI2lmZGVmIENPTkZJR19NVERfT0ZfUEFSVFMKKwlpZiAocmV0ID09IDApCisJCXJldCA9IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKGZ1bi0+ZGV2LCAmZnVuLT5tdGQsCisJCQkJCSAgICAgIGZsYXNoX25wLCAmZnVuLT5wYXJ0cyk7CiAjZW5kaWYKLQlyZXR1cm4gYWRkX210ZF9kZXZpY2UoJmZ1bi0+bXRkKTsKKwlpZiAocmV0ID4gMCkKKwkJcmV0ID0gYWRkX210ZF9wYXJ0aXRpb25zKCZmdW4tPm10ZCwgZnVuLT5wYXJ0cywgcmV0KTsKKwllbHNlCisjZW5kaWYKKwkJcmV0ID0gYWRkX210ZF9kZXZpY2UoJmZ1bi0+bXRkKTsKK2VycjoKKwlvZl9ub2RlX3B1dChmbGFzaF9ucCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgZnVuX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LApAQCAtMjExLDYgKzIzMSwxMiBAQAogCQlnb3RvIGVycjI7CiAJfQogCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgImNoaXAtZGVsYXkiLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJZnVuLT5jaGlwX2RlbGF5ID0gKnByb3A7CisJZWxzZQorCQlmdW4tPmNoaXBfZGVsYXkgPSA1MDsKKwogCWZ1bi0+aW9fYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZvZmRldi0+ZGV2LCBpb19yZXMuc3RhcnQsCiAJCQkJCSAgaW9fcmVzLmVuZCAtIGlvX3Jlcy5zdGFydCArIDEpOwogCWlmICghZnVuLT5pb19iYXNlKSB7CkBAIC0yMjAsMTcgKzI0Niw4IEBACiAKIAlmdW4tPmRldiA9ICZvZmRldi0+ZGV2OwogCWZ1bi0+bGFzdF9jdHJsID0gTkFORF9DTEU7Ci0JZnVuLT53YWl0X3BhdHRlcm4gPSBvZl9nZXRfcHJvcGVydHkob2ZkZXYtPm5vZGUsICJmc2wsd2FpdC1wYXR0ZXJuIiwKLQkJCQkJICAgIE5VTEwpOwotCWZ1bi0+d2FpdF93cml0ZSA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgImZzbCx3YWl0LXdyaXRlIiwgTlVMTCk7CiAKLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAiY2hpcC1kZWxheSIsIE5VTEwpOwotCWlmIChwcm9wKQotCQlmdW4tPmNoaXBfZGVsYXkgPSAqcHJvcDsKLQllbHNlCi0JCWZ1bi0+Y2hpcF9kZWxheSA9IDUwOwotCi0JcmV0ID0gZnVuX2NoaXBfaW5pdChmdW4pOworCXJldCA9IGZ1bl9jaGlwX2luaXQoZnVuLCBvZmRldi0+bm9kZSwgJmlvX3Jlcyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnIyOwogCkBAIC0yNTEsNiArMjY4LDcgQEAKIAlzdHJ1Y3QgZnNsX3VwbV9uYW5kICpmdW4gPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOwogCiAJbmFuZF9yZWxlYXNlKCZmdW4tPm10ZCk7CisJa2ZyZWUoZnVuLT5tdGQubmFtZSk7CiAKIAlpZiAoZnVuLT5ybmJfZ3BpbyA+PSAwKQogCQlncGlvX2ZyZWUoZnVuLT5ybmJfZ3Bpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2dwaW8uYyBiL2RyaXZlcnMvbXRkL25hbmQvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOTAyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL2dwaW8uYwpAQCAtMCwwICsxLDM3NSBAQAorLyoKKyAqIGRyaXZlcnMvbXRkL25hbmQvZ3Bpby5jCisgKgorICogVXBkYXRlZCwgYW5kIGNvbnZlcnRlZCB0byBnZW5lcmljIEdQSU8gYmFzZWQgZHJpdmVyIGJ5IFJ1c3NlbGwgS2luZy4KKyAqCisgKiBXcml0dGVuIGJ5IEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgQmFzZWQgb24gMi40IHZlcnNpb24gYnkgTWFyayBXaGl0dGFrZXIKKyAqCisgKiDCqSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICoKKyAqIERldmljZSBkcml2ZXIgZm9yIE5BTkQgY29ubmVjdGVkIHZpYSBHUElPCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC1ncGlvLmg+CisKK3N0cnVjdCBncGlvbXRkIHsKKwl2b2lkIF9faW9tZW0JCSppb19zeW5jOworCXN0cnVjdCBtdGRfaW5mbwkJbXRkX2luZm87CisJc3RydWN0IG5hbmRfY2hpcAluYW5kX2NoaXA7CisJc3RydWN0IGdwaW9fbmFuZF9wbGF0ZGF0YSBwbGF0OworfTsKKworI2RlZmluZSBncGlvX25hbmRfZ2V0cHJpdih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGdwaW9tdGQsIG10ZF9pbmZvKQorCisKKyNpZmRlZiBDT05GSUdfQVJNCisvKiBncGlvX25hbmRfZG9zeW5jKCkKKyAqCisgKiBNYWtlIHN1cmUgdGhlIEdQSU8gc3RhdGUgY2hhbmdlcyBvY2N1ciBpbi1vcmRlciB3aXRoIHdyaXRlcyB0byBOQU5ECisgKiBtZW1vcnkgcmVnaW9uLgorICogTmVlZGVkIG9uIFBYQSBkdWUgdG8gYnVzLXJlb3JkZXJpbmcgd2l0aGluIHRoZSBTb0MgaXRzZWxmIChzZWUgc2VjdGlvbiBvbgorICogSS9PIG9yZGVyaW5nIGluIFBYQSBtYW51YWwgKHNlY3Rpb24gMi4zLCBwMzUpCisgKi8KK3N0YXRpYyB2b2lkIGdwaW9fbmFuZF9kb3N5bmMoc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlpZiAoZ3Bpb210ZC0+aW9fc3luYykgeworCQkvKgorCQkgKiBMaW51eCBtZW1vcnkgYmFycmllcnMgZG9uJ3QgY2F0ZXIgZm9yIHdoYXQncyByZXF1aXJlZCBoZXJlLgorCQkgKiBXaGF0J3MgcmVxdWlyZWQgaXMgd2hhdCdzIGhlcmUgLSBhIHJlYWQgZnJvbSBhIHNlcGFyYXRlCisJCSAqIHJlZ2lvbiB3aXRoIGEgZGVwZW5kZW5jeSBvbiB0aGF0IHJlYWQuCisJCSAqLworCQl0bXAgPSByZWFkbChncGlvbXRkLT5pb19zeW5jKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3YgJTEsICUwXG4iIDogIj1yIiAodG1wKSA6ICJyIiAodG1wKSk7CisJfQorfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX25hbmRfZG9zeW5jKHN0cnVjdCBncGlvbXRkICpncGlvbXRkKSB7fQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGdwaW9fbmFuZF9jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQgPSBncGlvX25hbmRfZ2V0cHJpdihtdGQpOworCisJZ3Bpb19uYW5kX2Rvc3luYyhncGlvbXRkKTsKKworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQlncGlvX3NldF92YWx1ZShncGlvbXRkLT5wbGF0LmdwaW9fbmNlLCAhKGN0cmwgJiBOQU5EX05DRSkpOworCQlncGlvX3NldF92YWx1ZShncGlvbXRkLT5wbGF0LmdwaW9fY2xlLCAhIShjdHJsICYgTkFORF9DTEUpKTsKKwkJZ3Bpb19zZXRfdmFsdWUoZ3Bpb210ZC0+cGxhdC5ncGlvX2FsZSwgISEoY3RybCAmIE5BTkRfQUxFKSk7CisJCWdwaW9fbmFuZF9kb3N5bmMoZ3Bpb210ZCk7CisJfQorCWlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkKKwkJcmV0dXJuOworCisJd3JpdGViKGNtZCwgZ3Bpb210ZC0+bmFuZF9jaGlwLklPX0FERFJfVyk7CisJZ3Bpb19uYW5kX2Rvc3luYyhncGlvbXRkKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJd3JpdGVzYih0aGlzLT5JT19BRERSX1csIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX3JlYWRidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlyZWFkc2IodGhpcy0+SU9fQUREUl9SLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19uYW5kX3ZlcmlmeWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl1bnNpZ25lZCBjaGFyIHJlYWQsICpwID0gKHVuc2lnbmVkIGNoYXIgKikgYnVmOworCWludCBpLCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXJlYWQgPSByZWFkYih0aGlzLT5JT19BRERSX1IpOworCQlpZiAocmVhZCAhPSBwW2ldKSB7CisJCQlwcl9kZWJ1ZygiJXM6IGVyciBhdCAlZCAocmVhZCAlMDR4IHZzICUwNHgpXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpLCByZWFkLCBwW2ldKTsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX3dyaXRlYnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLAorCQkJCSBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlpZiAoSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylidWYsIDIpKSB7CisJCXdyaXRlc3codGhpcy0+SU9fQUREUl9XLCBidWYsIGxlbj4+MSk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXVuc2lnbmVkIHNob3J0ICpwdHIgPSAodW5zaWduZWQgc2hvcnQgKilidWY7CisKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAyLCBwdHIrKykKKwkJCXdyaXRldygqcHRyLCB0aGlzLT5JT19BRERSX1cpOworCX0KK30KKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX3JlYWRidWYxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKworCWlmIChJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWJ1ZiwgMikpIHsKKwkJcmVhZHN3KHRoaXMtPklPX0FERFJfUiwgYnVmLCBsZW4+PjEpOworCX0gZWxzZSB7CisJCWludCBpOworCQl1bnNpZ25lZCBzaG9ydCAqcHRyID0gKHVuc2lnbmVkIHNob3J0ICopYnVmOworCisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMiwgcHRyKyspCisJCQkqcHRyID0gcmVhZHcodGhpcy0+SU9fQUREUl9SKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19uYW5kX3ZlcmlmeWJ1ZjE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwKKwkJCQkgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXVuc2lnbmVkIHNob3J0IHJlYWQsICpwID0gKHVuc2lnbmVkIHNob3J0ICopIGJ1ZjsKKwlpbnQgaSwgZXJyID0gMDsKKwlsZW4gPj49IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJcmVhZCA9IHJlYWR3KHRoaXMtPklPX0FERFJfUik7CisJCWlmIChyZWFkICE9IHBbaV0pIHsKKwkJCXByX2RlYnVnKCIlczogZXJyIGF0ICVkIChyZWFkICUwNHggdnMgJTA0eClcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGksIHJlYWQsIHBbaV0pOworCQkJZXJyID0gLUVGQVVMVDsKKwkJfQorCX0KKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgZ3Bpb19uYW5kX2RldnJlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBncGlvbXRkICpncGlvbXRkID0gZ3Bpb19uYW5kX2dldHByaXYobXRkKTsKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoZ3Bpb210ZC0+cGxhdC5ncGlvX3JkeSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGdwaW9fbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncGlvbXRkICpncGlvbXRkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCW5hbmRfcmVsZWFzZSgmZ3Bpb210ZC0+bXRkX2luZm8pOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlvdW5tYXAoZ3Bpb210ZC0+aW9fc3luYyk7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlvdW5tYXAoZ3Bpb210ZC0+bmFuZF9jaGlwLklPX0FERFJfUik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpCisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3AsIDApOworCWdwaW9fc2V0X3ZhbHVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19uY2UsIDEpOworCisJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19jbGUpOworCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fYWxlKTsKKwlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX25jZSk7CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpCisJCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fbndwKTsKKwlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX3JkeSk7CisKKwlrZnJlZShncGlvbXRkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpyZXF1ZXN0X2FuZF9yZW1hcChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgc2l6ZV90IHNpemUsCisJCQkJCWNvbnN0IGNoYXIgKm5hbWUsIGludCAqZXJyKQoreworCXZvaWQgX19pb21lbSAqcHRyOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgbmFtZSkpIHsKKwkJKmVyciA9IC1FQlVTWTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcHRyID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzaXplKTsKKwlpZiAoIXB0cikgeworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJCSplcnIgPSAtRU5PTUVNOworCX0KKwlyZXR1cm4gcHRyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBncGlvX25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncGlvbXRkICpncGlvbXRkOworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CisJc3RydWN0IHJlc291cmNlICpyZXMwLCAqcmVzMTsKKwlpbnQgcmV0OworCisJaWYgKCFkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlczAgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWdwaW9tdGQgPSBremFsbG9jKHNpemVvZigqZ3Bpb210ZCksIEdGUF9LRVJORUwpOworCWlmIChncGlvbXRkID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIE5BTkQgTVREXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdGhpcyA9ICZncGlvbXRkLT5uYW5kX2NoaXA7CisJdGhpcy0+SU9fQUREUl9SID0gcmVxdWVzdF9hbmRfcmVtYXAocmVzMCwgMiwgIk5BTkQiLCAmcmV0KTsKKwlpZiAoIXRoaXMtPklPX0FERFJfUikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgInVuYWJsZSB0byBtYXAgTkFORFxuIik7CisJCWdvdG8gZXJyX21hcDsKKwl9CisKKwlyZXMxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlmIChyZXMxKSB7CisJCWdwaW9tdGQtPmlvX3N5bmMgPSByZXF1ZXN0X2FuZF9yZW1hcChyZXMxLCA0LCAiTkFORCBzeW5jIiwgJnJldCk7CisJCWlmICghZ3Bpb210ZC0+aW9fc3luYykgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICJ1bmFibGUgdG8gbWFwIHN5bmMgTkFORFxuIik7CisJCQlnb3RvIGVycl9zeW5jOworCQl9CisJfQorCisJbWVtY3B5KCZncGlvbXRkLT5wbGF0LCBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhLCBzaXplb2YoZ3Bpb210ZC0+cGxhdCkpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9tdGQtPnBsYXQuZ3Bpb19uY2UsICJOQU5EIE5DRSIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX25jZTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb210ZC0+cGxhdC5ncGlvX25jZSwgMSk7CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3AsICJOQU5EIE5XUCIpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfbndwOworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCwgMSk7CisJfQorCXJldCA9IGdwaW9fcmVxdWVzdChncGlvbXRkLT5wbGF0LmdwaW9fYWxlLCAiTkFORCBBTEUiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9hbGU7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW9tdGQtPnBsYXQuZ3Bpb19hbGUsIDApOworCXJldCA9IGdwaW9fcmVxdWVzdChncGlvbXRkLT5wbGF0LmdwaW9fY2xlLCAiTkFORCBDTEUiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jbGU7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW9tdGQtPnBsYXQuZ3Bpb19jbGUsIDApOworCXJldCA9IGdwaW9fcmVxdWVzdChncGlvbXRkLT5wbGF0LmdwaW9fcmR5LCAiTkFORCBSRFkiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZHk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb210ZC0+cGxhdC5ncGlvX3JkeSk7CisKKworCXRoaXMtPklPX0FERFJfVyAgPSB0aGlzLT5JT19BRERSX1I7CisJdGhpcy0+ZWNjLm1vZGUgICA9IE5BTkRfRUNDX1NPRlQ7CisJdGhpcy0+b3B0aW9ucyAgICA9IGdwaW9tdGQtPnBsYXQub3B0aW9uczsKKwl0aGlzLT5jaGlwX2RlbGF5ID0gZ3Bpb210ZC0+cGxhdC5jaGlwX2RlbGF5OworCisJLyogaW5zdGFsbCBvdXIgcm91dGluZXMgKi8KKwl0aGlzLT5jbWRfY3RybCAgID0gZ3Bpb19uYW5kX2NtZF9jdHJsOworCXRoaXMtPmRldl9yZWFkeSAgPSBncGlvX25hbmRfZGV2cmVhZHk7CisKKwlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpIHsKKwkJdGhpcy0+cmVhZF9idWYgICA9IGdwaW9fbmFuZF9yZWFkYnVmMTY7CisJCXRoaXMtPndyaXRlX2J1ZiAgPSBncGlvX25hbmRfd3JpdGVidWYxNjsKKwkJdGhpcy0+dmVyaWZ5X2J1ZiA9IGdwaW9fbmFuZF92ZXJpZnlidWYxNjsKKwl9IGVsc2UgeworCQl0aGlzLT5yZWFkX2J1ZiAgID0gZ3Bpb19uYW5kX3JlYWRidWY7CisJCXRoaXMtPndyaXRlX2J1ZiAgPSBncGlvX25hbmRfd3JpdGVidWY7CisJCXRoaXMtPnZlcmlmeV9idWYgPSBncGlvX25hbmRfdmVyaWZ5YnVmOworCX0KKworCS8qIHNldCB0aGUgbXRkIHByaXZhdGUgZGF0YSBmb3IgdGhlIG5hbmQgZHJpdmVyICovCisJZ3Bpb210ZC0+bXRkX2luZm8ucHJpdiA9IHRoaXM7CisJZ3Bpb210ZC0+bXRkX2luZm8ub3duZXIgPSBUSElTX01PRFVMRTsKKworCWlmIChuYW5kX3NjYW4oJmdwaW9tdGQtPm10ZF9pbmZvLCAxKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIm5vIG5hbmQgY2hpcHMgZm91bmQ/XG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycl93cDsKKwl9CisKKwlpZiAoZ3Bpb210ZC0+cGxhdC5hZGp1c3RfcGFydHMpCisJCWdwaW9tdGQtPnBsYXQuYWRqdXN0X3BhcnRzKCZncGlvbXRkLT5wbGF0LAorCQkJCQkgICBncGlvbXRkLT5tdGRfaW5mby5zaXplKTsKKworCWFkZF9tdGRfcGFydGl0aW9ucygmZ3Bpb210ZC0+bXRkX2luZm8sIGdwaW9tdGQtPnBsYXQucGFydHMsCisJCQkgICBncGlvbXRkLT5wbGF0Lm51bV9wYXJ0cyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBncGlvbXRkKTsKKworCXJldHVybiAwOworCitlcnJfd3A6CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpCisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3AsIDApOworCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fcmR5KTsKK2Vycl9yZHk6CisJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19jbGUpOworZXJyX2NsZToKKwlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX2FsZSk7CitlcnJfYWxlOgorCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3ApKQorCQlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCk7CitlcnJfbndwOgorCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fbmNlKTsKK2Vycl9uY2U6CisJaW91bm1hcChncGlvbXRkLT5pb19zeW5jKTsKKwlpZiAocmVzMSkKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlczEtPnN0YXJ0LCByZXMxLT5lbmQgLSByZXMxLT5zdGFydCArIDEpOworZXJyX3N5bmM6CisJaW91bm1hcChncGlvbXRkLT5uYW5kX2NoaXAuSU9fQUREUl9SKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzMC0+c3RhcnQsIHJlczAtPmVuZCAtIHJlczAtPnN0YXJ0ICsgMSk7CitlcnJfbWFwOgorCWtmcmVlKGdwaW9tdGQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdwaW9fbmFuZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGdwaW9fbmFuZF9wcm9iZSwKKwkucmVtb3ZlCQk9IGdwaW9fbmFuZF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImdwaW8tbmFuZCIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGdwaW9fbmFuZF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiR1BJTyBOQU5EIGRyaXZlciwgwqkgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOworCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZ3Bpb19uYW5kX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBncGlvX25hbmRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZncGlvX25hbmRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZ3Bpb19uYW5kX2luaXQpOworbW9kdWxlX2V4aXQoZ3Bpb19uYW5kX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdQSU8gTkFORCBEcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWZkNGYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCkBAIC0wLDAgKzEsMTA3NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IFNhc2NoYSBIYXVlciwga2VybmVsQHBlbmd1dHJvbml4LmRlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAibXhjX25hbmQiCisKKy8qIEFkZHJlc3NlcyBmb3IgTkZDIHJlZ2lzdGVycyAqLworI2RlZmluZSBORkNfQlVGX1NJWkUJCTB4RTAwCisjZGVmaW5lIE5GQ19CVUZfQUREUgkJMHhFMDQKKyNkZWZpbmUgTkZDX0ZMQVNIX0FERFIJCTB4RTA2CisjZGVmaW5lIE5GQ19GTEFTSF9DTUQJCTB4RTA4CisjZGVmaW5lIE5GQ19DT05GSUcJCTB4RTBBCisjZGVmaW5lIE5GQ19FQ0NfU1RBVFVTX1JFU1VMVAkweEUwQworI2RlZmluZSBORkNfUlNMVE1BSU5fQVJFQQkweEUwRQorI2RlZmluZSBORkNfUlNMVFNQQVJFX0FSRUEJMHhFMTAKKyNkZWZpbmUgTkZDX1dSUFJPVAkJMHhFMTIKKyNkZWZpbmUgTkZDX1VOTE9DS1NUQVJUX0JMS0FERFIJMHhFMTQKKyNkZWZpbmUgTkZDX1VOTE9DS0VORF9CTEtBRERSCTB4RTE2CisjZGVmaW5lIE5GQ19ORl9XUlBSU1QJCTB4RTE4CisjZGVmaW5lIE5GQ19DT05GSUcxCQkweEUxQQorI2RlZmluZSBORkNfQ09ORklHMgkJMHhFMUMKKworLyogQWRkcmVzc2VzIGZvciBORkMgUkFNIEJVRkZFUiBNYWluIGFyZWEgMCAqLworI2RlZmluZSBNQUlOX0FSRUEwCQkweDAwMAorI2RlZmluZSBNQUlOX0FSRUExCQkweDIwMAorI2RlZmluZSBNQUlOX0FSRUEyCQkweDQwMAorI2RlZmluZSBNQUlOX0FSRUEzCQkweDYwMAorCisvKiBBZGRyZXNzZXMgZm9yIE5GQyBTUEFSRSBCVUZGRVIgU3BhcmUgYXJlYSAwICovCisjZGVmaW5lIFNQQVJFX0FSRUEwCQkweDgwMAorI2RlZmluZSBTUEFSRV9BUkVBMQkJMHg4MTAKKyNkZWZpbmUgU1BBUkVfQVJFQTIJCTB4ODIwCisjZGVmaW5lIFNQQVJFX0FSRUEzCQkweDgzMAorCisvKiBTZXQgSU5UIHRvIDAsIEZDTUQgdG8gMSwgcmVzdCB0byAwIGluIE5GQ19DT05GSUcyIFJlZ2lzdGVyCisgKiBmb3IgQ29tbWFuZCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0NNRCAgICAgICAgICAgIDB4MQorCisvKiBTZXQgSU5UIHRvIDAsIEZBREQgdG8gMSwgcmVzdCB0byAwIGluIE5GQ19DT05GSUcyIFJlZ2lzdGVyCisgKiBmb3IgQWRkcmVzcyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0FERFIgICAgICAgICAgIDB4MgorCisvKiBTZXQgSU5UIHRvIDAsIEZESSB0byAxLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKKyAqIGZvciBJbnB1dCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0lOUFVUICAgICAgICAgIDB4NAorCisvKiBTZXQgSU5UIHRvIDAsIEZETyB0byAwMDEsIHJlc3QgdG8gMCBpbiBORkNfQ09ORklHMiBSZWdpc3RlcgorICogZm9yIERhdGEgT3V0cHV0IG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfT1VUUFVUICAgICAgICAgMHg4CisKKy8qIFNldCBJTlQgdG8gMCwgRkQwIHRvIDAxMCwgcmVzdCB0byAwIGluIE5GQ19DT05GSUcyIFJlZ2lzdGVyCisgKiBmb3IgUmVhZCBJRCBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0lEICAgICAgICAgICAgIDB4MTAKKworLyogU2V0IElOVCB0byAwLCBGRE8gdG8gMTAwLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKKyAqIGZvciBSZWFkIFN0YXR1cyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX1NUQVRVUyAgICAgICAgIDB4MjAKKworLyogU2V0IElOVCB0byAxLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIgZm9yIFJlYWQKKyAqIFN0YXR1cyBvcGVyYXRpb24gKi8KKyNkZWZpbmUgTkZDX0lOVCAgICAgICAgICAgIDB4ODAwMAorCisjZGVmaW5lIE5GQ19TUF9FTiAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgTkZDX0VDQ19FTiAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBORkNfSU5UX01TSyAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIE5GQ19CSUcgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgTkZDX1JTVCAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBORkNfQ0UgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIE5GQ19PTkVfQ1lDTEUgICAgICAgKDEgPDwgOCkKKworc3RydWN0IG14Y19uYW5kX2hvc3QgeworCXN0cnVjdCBtdGRfaW5mbwkJbXRkOworCXN0cnVjdCBuYW5kX2NoaXAJbmFuZDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydHM7CisJc3RydWN0IGRldmljZQkJKmRldjsKKworCXZvaWQgX19pb21lbQkJKnJlZ3M7CisJaW50CQkJc3BhcmVfb25seTsKKwlpbnQJCQlzdGF0dXNfcmVxdWVzdDsKKwlpbnQJCQlwYWdlc2l6ZV8yazsKKwl1aW50MTZfdAkJY29sX2FkZHI7CisJc3RydWN0IGNsawkJKmNsazsKKwlpbnQJCQljbGtfYWN0OworCWludAkJCWlycTsKKworCXdhaXRfcXVldWVfaGVhZF90CWlycV93YWl0cTsKK307CisKKy8qIERlZmluZSBkZWxheXMgaW4gbWljcm9zZWMgZm9yIE5BTkQgZGV2aWNlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgVFJPUF9VU19ERUxBWSAgIDIwMDAKKy8qIE1hY3JvcyB0byBnZXQgYnl0ZSBhbmQgYml0IHBvc2l0aW9ucyBvZiBFQ0MgKi8KKyNkZWZpbmUgQ09MUE9TKHgpICAoKHgpID4+IDMpCisjZGVmaW5lIEJJVFBPUyh4KSAoKHgpICYgMHhmKQorCisvKiBEZWZpbmUgc2luZ2xlIGJpdCBFcnJvciBwb3NpdGlvbnMgaW4gTWFpbiAmIFNwYXJlIGFyZWEgKi8KKyNkZWZpbmUgTUFJTl9TSU5HTEVCSVRfRVJST1IgMHg0CisjZGVmaW5lIFNQQVJFX1NJTkdMRUJJVF9FUlJPUiAweDEKKworLyogT09CIHBsYWNlbWVudCBibG9jayBmb3IgdXNlIHdpdGggaGFyZHdhcmUgZWNjIGdlbmVyYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9od19lY2Nvb2JfOCA9IHsKKwkuZWNjYnl0ZXMgPSA1LAorCS5lY2Nwb3MgPSB7NiwgNywgOCwgOSwgMTB9LAorCS5vb2JmcmVlID0ge3swLCA1fSwgezExLCA1fSwgfQorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX2h3X2VjY29vYl8xNiA9IHsKKwkuZWNjYnl0ZXMgPSA1LAorCS5lY2Nwb3MgPSB7NiwgNywgOCwgOSwgMTB9LAorCS5vb2JmcmVlID0ge3swLCA2fSwgezEyLCA0fSwgfQorfTsKKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7ICJSZWRCb290IiwgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OworI2VuZGlmCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBteGNfbmZjX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QgPSBkZXZfaWQ7CisKKwl1aW50MTZfdCB0bXA7CisKKwl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCXRtcCB8PSBORkNfSU5UX01TSzsgLyogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KKwl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCisJd2FrZV91cCgmaG9zdC0+aXJxX3dhaXRxKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBwb2xscyB0aGUgTkFOREZDIHRvIHdhaXQgZm9yIHRoZSBiYXNpYyBvcGVyYXRpb24gdG8KKyAqIGNvbXBsZXRlIGJ5IGNoZWNraW5nIHRoZSBJTlQgYml0IG9mIGNvbmZpZzIgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHdhaXRfb3BfZG9uZShzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCwgaW50IG1heF9yZXRyaWVzLAorCQkJCXVpbnQxNl90IHBhcmFtLCBpbnQgdXNlaXJxKQoreworCXVpbnQzMl90IHRtcDsKKworCWlmICh1c2VpcnEpIHsKKwkJaWYgKChyZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpICYgTkZDX0lOVCkgPT0gMCkgeworCisJCQl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCQkJdG1wICAmPSB+TkZDX0lOVF9NU0s7CS8qIEVuYWJsZSBpbnRlcnJ1cHQgKi8KKwkJCXdyaXRldyh0bXAsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisKKwkJCXdhaXRfZXZlbnQoaG9zdC0+aXJxX3dhaXRxLAorCQkJCXJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMikgJiBORkNfSU5UKTsKKworCQkJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKTsKKwkJCXRtcCAgJj0gfk5GQ19JTlQ7CisJCQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCQl9CisJfSBlbHNlIHsKKwkJd2hpbGUgKG1heF9yZXRyaWVzLS0gPiAwKSB7CisJCQlpZiAocmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKSAmIE5GQ19JTlQpIHsKKwkJCQl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCQkJCXRtcCAgJj0gfk5GQ19JTlQ7CisJCQkJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXVkZWxheSgxKTsKKwkJfQorCQlpZiAobWF4X3JldHJpZXMgPD0gMCkKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICIlcyglZCk6IElOVCBub3Qgc2V0XG4iLAorCQkJICAgICAgX19mdW5jX18sIHBhcmFtKTsKKwl9Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXNzdWVzIHRoZSBzcGVjaWZpZWQgY29tbWFuZCB0byB0aGUgTkFORCBkZXZpY2UgYW5kCisgKiB3YWl0cyBmb3IgY29tcGxldGlvbi4gKi8KK3N0YXRpYyB2b2lkIHNlbmRfY21kKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0LCB1aW50MTZfdCBjbWQsIGludCB1c2VpcnEpCit7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgInNlbmRfY21kKGhvc3QsIDB4JXgsICVkKVxuIiwgY21kLCB1c2VpcnEpOworCisJd3JpdGV3KGNtZCwgaG9zdC0+cmVncyArIE5GQ19GTEFTSF9DTUQpOworCXdyaXRldyhORkNfQ01ELCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIGNtZCwgdXNlaXJxKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzZW5kcyBhbiBhZGRyZXNzIChvciBwYXJ0aWFsIGFkZHJlc3MpIHRvIHRoZQorICogTkFORCBkZXZpY2UuIFRoZSBhZGRyZXNzIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBzb3VyY2UvZGVzdGluYXRpb24gZm9yCisgKiBhIE5BTkQgY29tbWFuZC4gKi8KK3N0YXRpYyB2b2lkIHNlbmRfYWRkcihzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCwgdWludDE2X3QgYWRkciwgaW50IGlzbGFzdCkKK3sKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAic2VuZF9hZGRyKGhvc3QsIDB4JXggJWQpXG4iLCBhZGRyLCBpc2xhc3QpOworCisJd3JpdGV3KGFkZHIsIGhvc3QtPnJlZ3MgKyBORkNfRkxBU0hfQUREUik7CisJd3JpdGV3KE5GQ19BRERSLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIGFkZHIsIGlzbGFzdCk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmVxdWVzdHMgdGhlIE5BTkRGQyB0byBpbml0YXRlIHRoZSB0cmFuc2ZlcgorICogb2YgZGF0YSBjdXJyZW50bHkgaW4gdGhlIE5BTkRGQyBSQU0gYnVmZmVyIHRvIHRoZSBOQU5EIGRldmljZS4gKi8KK3N0YXRpYyB2b2lkIHNlbmRfcHJvZ19wYWdlKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0LCB1aW50OF90IGJ1Zl9pZCwKKwkJCWludCBzcGFyZV9vbmx5KQoreworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJzZW5kX3Byb2dfcGFnZSAoJWQpXG4iLCBzcGFyZV9vbmx5KTsKKworCS8qIE5BTkRGQyBidWZmZXIgMCBpcyB1c2VkIGZvciBwYWdlIHJlYWQvd3JpdGUgKi8KKwl3cml0ZXcoYnVmX2lkLCBob3N0LT5yZWdzICsgTkZDX0JVRl9BRERSKTsKKworCS8qIENvbmZpZ3VyZSBzcGFyZSBvciBwYWdlK3NwYXJlIGFjY2VzcyAqLworCWlmICghaG9zdC0+cGFnZXNpemVfMmspIHsKKwkJdWludDE2X3QgY29uZmlnMSA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJCWlmIChzcGFyZV9vbmx5KQorCQkJY29uZmlnMSB8PSBORkNfU1BfRU47CisJCWVsc2UKKwkJCWNvbmZpZzEgJj0gfihORkNfU1BfRU4pOworCQl3cml0ZXcoY29uZmlnMSwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl9CisKKwl3cml0ZXcoTkZDX0lOUFVULCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIHNwYXJlX29ubHksIHRydWUpOworfQorCisvKiBSZXF1ZXN0cyBOQU5ERkMgdG8gaW5pdGF0ZWQgdGhlIHRyYW5zZmVyIG9mIGRhdGEgZnJvbSB0aGUKKyAqIE5BTkQgZGV2aWNlIGludG8gaW4gdGhlIE5BTkRGQyByYW0gYnVmZmVyLiAqLworc3RhdGljIHZvaWQgc2VuZF9yZWFkX3BhZ2Uoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QsIHVpbnQ4X3QgYnVmX2lkLAorCQlpbnQgc3BhcmVfb25seSkKK3sKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAic2VuZF9yZWFkX3BhZ2UgKCVkKVxuIiwgc3BhcmVfb25seSk7CisKKwkvKiBOQU5ERkMgYnVmZmVyIDAgaXMgdXNlZCBmb3IgcGFnZSByZWFkL3dyaXRlICovCisJd3JpdGV3KGJ1Zl9pZCwgaG9zdC0+cmVncyArIE5GQ19CVUZfQUREUik7CisKKwkvKiBDb25maWd1cmUgc3BhcmUgb3IgcGFnZStzcGFyZSBhY2Nlc3MgKi8KKwlpZiAoIWhvc3QtPnBhZ2VzaXplXzJrKSB7CisJCXVpbnQzMl90IGNvbmZpZzEgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCQlpZiAoc3BhcmVfb25seSkKKwkJCWNvbmZpZzEgfD0gTkZDX1NQX0VOOworCQllbHNlCisJCQljb25maWcxICY9IH5ORkNfU1BfRU47CisJCXdyaXRldyhjb25maWcxLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCX0KKworCXdyaXRldyhORkNfT1VUUFVULCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIHNwYXJlX29ubHksIHRydWUpOworfQorCisvKiBSZXF1ZXN0IHRoZSBOQU5ERkMgdG8gcGVyZm9ybSBhIHJlYWQgb2YgdGhlIE5BTkQgZGV2aWNlIElELiAqLworc3RhdGljIHZvaWQgc2VuZF9yZWFkX2lkKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0KQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAmaG9zdC0+bmFuZDsKKwl1aW50MTZfdCB0bXA7CisKKwkvKiBOQU5ERkMgYnVmZmVyIDAgaXMgdXNlZCBmb3IgZGV2aWNlIElEIG91dHB1dCAqLworCXdyaXRldygweDAsIGhvc3QtPnJlZ3MgKyBORkNfQlVGX0FERFIpOworCisJLyogUmVhZCBJRCBpbnRvIG1haW4gYnVmZmVyICovCisJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl0bXAgJj0gfk5GQ19TUF9FTjsKKwl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCisJd3JpdGV3KE5GQ19JRCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKTsKKworCS8qIFdhaXQgZm9yIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLworCXdhaXRfb3BfZG9uZShob3N0LCBUUk9QX1VTX0RFTEFZLCAwLCB0cnVlKTsKKworCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgeworCQl2b2lkIF9faW9tZW0gKm1haW5fYnVmID0gaG9zdC0+cmVncyArIE1BSU5fQVJFQTA7CisJCS8qIGNvbXByZXNzIHRoZSBJRCBpbmZvICovCisJCXdyaXRlYihyZWFkYihtYWluX2J1ZiArIDIpLCBtYWluX2J1ZiArIDEpOworCQl3cml0ZWIocmVhZGIobWFpbl9idWYgKyA0KSwgbWFpbl9idWYgKyAyKTsKKwkJd3JpdGViKHJlYWRiKG1haW5fYnVmICsgNiksIG1haW5fYnVmICsgMyk7CisJCXdyaXRlYihyZWFkYihtYWluX2J1ZiArIDgpLCBtYWluX2J1ZiArIDQpOworCQl3cml0ZWIocmVhZGIobWFpbl9idWYgKyAxMCksIG1haW5fYnVmICsgNSk7CisJfQorfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJlcXVlc3RzIHRoZSBOQU5ERkMgdG8gcGVyZm9ybSBhIHJlYWQgb2YgdGhlCisgKiBOQU5EIGRldmljZSBzdGF0dXMgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdHVzLiAqLworc3RhdGljIHVpbnQxNl90IGdldF9kZXZfc3RhdHVzKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0KQoreworCXZvaWQgX19pb21lbSAqbWFpbl9idWYgPSBob3N0LT5yZWdzICsgTUFJTl9BUkVBMTsKKwl1aW50MzJfdCBzdG9yZTsKKwl1aW50MTZfdCByZXQsIHRtcDsKKwkvKiBJc3N1ZSBzdGF0dXMgcmVxdWVzdCB0byBOQU5EIGRldmljZSAqLworCisJLyogc3RvcmUgdGhlIG1haW4gYXJlYTEgZmlyc3Qgd29yZCwgbGF0ZXIgZG8gcmVjb3ZlcnkgKi8KKwlzdG9yZSA9IHJlYWRsKG1haW5fYnVmKTsKKwkvKiBOQU5ERkMgYnVmZmVyIDEgaXMgdXNlZCBmb3IgZGV2aWNlIHN0YXR1cyB0byBwcmV2ZW50CisJICogY29ycnVwdGlvbiBvZiByZWFkL3dyaXRlIGJ1ZmZlciBvbiBzdGF0dXMgcmVxdWVzdHMuICovCisJd3JpdGV3KDEsIGhvc3QtPnJlZ3MgKyBORkNfQlVGX0FERFIpOworCisJLyogUmVhZCBzdGF0dXMgaW50byBtYWluIGJ1ZmZlciAqLworCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJdG1wICY9IH5ORkNfU1BfRU47CisJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKworCXdyaXRldyhORkNfU1RBVFVTLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIDAsIHRydWUpOworCisJLyogU3RhdHVzIGlzIHBsYWNlZCBpbiBmaXJzdCB3b3JkIG9mIG1haW4gYnVmZmVyICovCisJLyogZ2V0IHN0YXR1cywgdGhlbiByZWNvdmVyeSBhcmVhIDEgZGF0YSAqLworCXJldCA9IHJlYWR3KG1haW5fYnVmKTsKKwl3cml0ZWwoc3RvcmUsIG1haW5fYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb25zIGlzIHVzZWQgYnkgdXBwZXIgbGF5ZXIgdG8gY2hlY2tzIGlmIGRldmljZSBpcyByZWFkeSAqLworc3RhdGljIGludCBteGNfbmFuZF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJLyoKKwkgKiBORkMgaGFuZGxlcyBSL0IgaW50ZXJuYWxseS4gVGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uCisJICogYWx3YXlzIHJldHVybnMgc3RhdHVzIGFzIHJlYWR5LgorCSAqLworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBteGNfbmFuZF9lbmFibGVfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKQoreworCS8qCisJICogSWYgSFcgRUNDIGlzIGVuYWJsZWQsIHdlIHR1cm4gaXQgb24gZHVyaW5nIGluaXQuIFRoZXJlIGlzCisJICogbm8gbmVlZCB0byBlbmFibGUgYWdhaW4gaGVyZS4KKwkgKi8KK30KKworc3RhdGljIGludCBteGNfbmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LAorCQkJCSB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKworCS8qCisJICogMS1CaXQgZXJyb3JzIGFyZSBhdXRvbWF0aWNhbGx5IGNvcnJlY3RlZCBpbiBIVy4gIE5vIG5lZWQgZm9yCisJICogYWRkaXRpb25hbCBjb3JyZWN0aW9uLiAgMi1CaXQgZXJyb3JzIGNhbm5vdCBiZSBjb3JyZWN0ZWQgYnkKKwkgKiBIVyBFQ0MsIHNvIHdlIG5lZWQgdG8gcmV0dXJuIGZhaWx1cmUKKwkgKi8KKwl1aW50MTZfdCBlY2Nfc3RhdHVzID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19FQ0NfU1RBVFVTX1JFU1VMVCk7CisKKwlpZiAoKChlY2Nfc3RhdHVzICYgMHgzKSA9PSAyKSB8fCAoKGVjY19zdGF0dXMgPj4gMikgPT0gMikpIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwKKwkJICAgICAgIk1YQ19OQU5EOiBIV0VDQyB1bmNvcnJlY3RhYmxlIDItYml0IEVDQyBlcnJvclxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteGNfbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwKKwkJCQkgIHVfY2hhciAqZWNjX2NvZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1X2NoYXIgbXhjX25hbmRfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKwl1aW50OF90IHJldCA9IDA7CisJdWludDE2X3QgY29sLCByZF93b3JkOworCXVpbnQxNl90IF9faW9tZW0gKm1haW5fYnVmID0gaG9zdC0+cmVncyArIE1BSU5fQVJFQTA7CisJdWludDE2X3QgX19pb21lbSAqc3BhcmVfYnVmID0gaG9zdC0+cmVncyArIFNQQVJFX0FSRUEwOworCisJLyogQ2hlY2sgZm9yIHN0YXR1cyByZXF1ZXN0ICovCisJaWYgKGhvc3QtPnN0YXR1c19yZXF1ZXN0KQorCQlyZXR1cm4gZ2V0X2Rldl9zdGF0dXMoaG9zdCkgJiAweEZGOworCisJLyogR2V0IGNvbHVtbiBmb3IgMTYtYml0IGFjY2VzcyAqLworCWNvbCA9IGhvc3QtPmNvbF9hZGRyID4+IDE7CisKKwkvKiBJZiB3ZSBhcmUgYWNjZXNzaW5nIHRoZSBzcGFyZSByZWdpb24gKi8KKwlpZiAoaG9zdC0+c3BhcmVfb25seSkKKwkJcmRfd29yZCA9IHJlYWR3KCZzcGFyZV9idWZbY29sXSk7CisJZWxzZQorCQlyZF93b3JkID0gcmVhZHcoJm1haW5fYnVmW2NvbF0pOworCisJLyogUGljayB1cHBlci9sb3dlciBieXRlIG9mIHdvcmQgZnJvbSBSQU0gYnVmZmVyICovCisJaWYgKGhvc3QtPmNvbF9hZGRyICYgMHgxKQorCQlyZXQgPSAocmRfd29yZCA+PiA4KSAmIDB4RkY7CisJZWxzZQorCQlyZXQgPSByZF93b3JkICYgMHhGRjsKKworCS8qIFVwZGF0ZSBzYXZlZCBjb2x1bW4gYWRkcmVzcyAqLworCWhvc3QtPmNvbF9hZGRyKys7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDE2X3QgbXhjX25hbmRfcmVhZF93b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKwl1aW50MTZfdCBjb2wsIHJkX3dvcmQsIHJldDsKKwl1aW50MTZfdCBfX2lvbWVtICpwOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywKKwkgICAgICAibXhjX25hbmRfcmVhZF93b3JkKGNvbCA9ICVkKVxuIiwgaG9zdC0+Y29sX2FkZHIpOworCisJY29sID0gaG9zdC0+Y29sX2FkZHI7CisJLyogQWRqdXN0IHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaWYgKGNvbCA8IG10ZC0+d3JpdGVzaXplICYmIGhvc3QtPnNwYXJlX29ubHkpCisJCWNvbCArPSBtdGQtPndyaXRlc2l6ZTsKKworCWlmIChjb2wgPCBtdGQtPndyaXRlc2l6ZSkKKwkJcCA9IChob3N0LT5yZWdzICsgTUFJTl9BUkVBMCkgKyAoY29sID4+IDEpOworCWVsc2UKKwkJcCA9IChob3N0LT5yZWdzICsgU1BBUkVfQVJFQTApICsgKChjb2wgLSBtdGQtPndyaXRlc2l6ZSkgPj4gMSk7CisKKwlpZiAoY29sICYgMSkgeworCQlyZF93b3JkID0gcmVhZHcocCk7CisJCXJldCA9IChyZF93b3JkID4+IDgpICYgMHhmZjsKKwkJcmRfd29yZCA9IHJlYWR3KCZwWzFdKTsKKwkJcmV0IHw9IChyZF93b3JkIDw8IDgpICYgMHhmZjAwOworCisJfSBlbHNlCisJCXJldCA9IHJlYWR3KHApOworCisJLyogVXBkYXRlIHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaG9zdC0+Y29sX2FkZHIgPSBjb2wgKyAyOworCisJcmV0dXJuIHJldDsKK30KKworLyogV3JpdGUgZGF0YSBvZiBsZW5ndGggbGVuIHRvIGJ1ZmZlciBidWYuIFRoZSBkYXRhIHRvIGJlCisgKiB3cml0dGVuIG9uIE5BTkQgRmxhc2ggaXMgZmlyc3QgY29waWVkIHRvIFJBTWJ1ZmZlci4gQWZ0ZXIgdGhlIERhdGEgSW5wdXQKKyAqIE9wZXJhdGlvbiBieSB0aGUgTkZDLCB0aGUgZGF0YSBpcyB3cml0dGVuIHRvIE5BTkQgRmxhc2ggKi8KK3N0YXRpYyB2b2lkIG14Y19uYW5kX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQljb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXAgPSBtdGQtPnByaXY7CisJc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2NoaXAtPnByaXY7CisJaW50IG4sIGNvbCwgaSA9IDA7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCSAgICAgICJteGNfbmFuZF93cml0ZV9idWYoY29sID0gJWQsIGxlbiA9ICVkKVxuIiwgaG9zdC0+Y29sX2FkZHIsCisJICAgICAgbGVuKTsKKworCWNvbCA9IGhvc3QtPmNvbF9hZGRyOworCisJLyogQWRqdXN0IHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaWYgKGNvbCA8IG10ZC0+d3JpdGVzaXplICYmIGhvc3QtPnNwYXJlX29ubHkpCisJCWNvbCArPSBtdGQtPndyaXRlc2l6ZTsKKworCW4gPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZSAtIGNvbDsKKwluID0gbWluKGxlbiwgbik7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCSAgICAgICIlczolZDogY29sID0gJWQsIG4gPSAlZFxuIiwgX19mdW5jX18sIF9fTElORV9fLCBjb2wsIG4pOworCisJd2hpbGUgKG4pIHsKKwkJdm9pZCBfX2lvbWVtICpwOworCisJCWlmIChjb2wgPCBtdGQtPndyaXRlc2l6ZSkKKwkJCXAgPSBob3N0LT5yZWdzICsgTUFJTl9BUkVBMCArIChjb2wgJiB+Myk7CisJCWVsc2UKKwkJCXAgPSBob3N0LT5yZWdzICsgU1BBUkVfQVJFQTAgLQorCQkJCQkJbXRkLT53cml0ZXNpemUgKyAoY29sICYgfjMpOworCisJCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICIlczolZDogcCA9ICVwXG4iLCBfX2Z1bmNfXywKKwkJICAgICAgX19MSU5FX18sIHApOworCisJCWlmICgoKGNvbCB8IChpbnQpJmJ1ZltpXSkgJiAzKSB8fCBuIDwgMTYpIHsKKwkJCXVpbnQzMl90IGRhdGEgPSAwOworCisJCQlpZiAoY29sICYgMyB8fCBuIDwgNCkKKwkJCQlkYXRhID0gcmVhZGwocCk7CisKKwkJCXN3aXRjaCAoY29sICYgMykgeworCQkJY2FzZSAwOgorCQkJCWlmIChuKSB7CisJCQkJCWRhdGEgPSAoZGF0YSAmIDB4ZmZmZmZmMDApIHwKKwkJCQkJICAgIChidWZbaSsrXSA8PCAwKTsKKwkJCQkJbi0tOworCQkJCQljb2wrKzsKKwkJCQl9CisJCQljYXNlIDE6CisJCQkJaWYgKG4pIHsKKwkJCQkJZGF0YSA9IChkYXRhICYgMHhmZmZmMDBmZikgfAorCQkJCQkgICAgKGJ1ZltpKytdIDw8IDgpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCWNhc2UgMjoKKwkJCQlpZiAobikgeworCQkJCQlkYXRhID0gKGRhdGEgJiAweGZmMDBmZmZmKSB8CisJCQkJCSAgICAoYnVmW2krK10gPDwgMTYpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCWNhc2UgMzoKKwkJCQlpZiAobikgeworCQkJCQlkYXRhID0gKGRhdGEgJiAweDAwZmZmZmZmKSB8CisJCQkJCSAgICAoYnVmW2krK10gPDwgMjQpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCX0KKworCQkJd3JpdGVsKGRhdGEsIHApOworCQl9IGVsc2UgeworCQkJaW50IG0gPSBtdGQtPndyaXRlc2l6ZSAtIGNvbDsKKworCQkJaWYgKGNvbCA+PSBtdGQtPndyaXRlc2l6ZSkKKwkJCQltICs9IG10ZC0+b29ic2l6ZTsKKworCQkJbSA9IG1pbihuLCBtKSAmIH4zOworCisJCQlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCQkJICAgICAgIiVzOiVkOiBuID0gJWQsIG0gPSAlZCwgaSA9ICVkLCBjb2wgPSAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCAgX19MSU5FX18sIG4sIG0sIGksIGNvbCk7CisKKwkJCW1lbWNweShwLCAmYnVmW2ldLCBtKTsKKwkJCWNvbCArPSBtOworCQkJaSArPSBtOworCQkJbiAtPSBtOworCQl9CisJfQorCS8qIFVwZGF0ZSBzYXZlZCBjb2x1bW4gYWRkcmVzcyAqLworCWhvc3QtPmNvbF9hZGRyID0gY29sOworfQorCisvKiBSZWFkIHRoZSBkYXRhIGJ1ZmZlciBmcm9tIHRoZSBOQU5EIEZsYXNoLiBUbyByZWFkIHRoZSBkYXRhIGZyb20gTkFORAorICogRmxhc2ggZmlyc3QgdGhlIGRhdGEgb3V0cHV0IGN5Y2xlIGlzIGluaXRpYXRlZCBieSB0aGUgTkZDLCB3aGljaCBjb3BpZXMKKyAqIHRoZSBkYXRhIHRvIFJBTWJ1ZmZlci4gVGhpcyBkYXRhIG9mIGxlbmd0aCBsZW4gaXMgdGhlbiBjb3BpZWQgdG8gYnVmZmVyIGJ1Zi4KKyAqLworc3RhdGljIHZvaWQgbXhjX25hbmRfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKwlpbnQgbiwgY29sLCBpID0gMDsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsCisJICAgICAgIm14Y19uYW5kX3JlYWRfYnVmKGNvbCA9ICVkLCBsZW4gPSAlZClcbiIsIGhvc3QtPmNvbF9hZGRyLCBsZW4pOworCisJY29sID0gaG9zdC0+Y29sX2FkZHI7CisKKwkvKiBBZGp1c3Qgc2F2ZWQgY29sdW1uIGFkZHJlc3MgKi8KKwlpZiAoY29sIDwgbXRkLT53cml0ZXNpemUgJiYgaG9zdC0+c3BhcmVfb25seSkKKwkJY29sICs9IG10ZC0+d3JpdGVzaXplOworCisJbiA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplIC0gY29sOworCW4gPSBtaW4obGVuLCBuKTsKKworCXdoaWxlIChuKSB7CisJCXZvaWQgX19pb21lbSAqcDsKKworCQlpZiAoY29sIDwgbXRkLT53cml0ZXNpemUpCisJCQlwID0gaG9zdC0+cmVncyArIE1BSU5fQVJFQTAgKyAoY29sICYgfjMpOworCQllbHNlCisJCQlwID0gaG9zdC0+cmVncyArIFNQQVJFX0FSRUEwIC0KKwkJCQkJbXRkLT53cml0ZXNpemUgKyAoY29sICYgfjMpOworCisJCWlmICgoKGNvbCB8IChpbnQpJmJ1ZltpXSkgJiAzKSB8fCBuIDwgMTYpIHsKKwkJCXVpbnQzMl90IGRhdGE7CisKKwkJCWRhdGEgPSByZWFkbChwKTsKKwkJCXN3aXRjaCAoY29sICYgMykgeworCQkJY2FzZSAwOgorCQkJCWlmIChuKSB7CisJCQkJCWJ1ZltpKytdID0gKHVpbnQ4X3QpIChkYXRhKTsKKwkJCQkJbi0tOworCQkJCQljb2wrKzsKKwkJCQl9CisJCQljYXNlIDE6CisJCQkJaWYgKG4pIHsKKwkJCQkJYnVmW2krK10gPSAodWludDhfdCkgKGRhdGEgPj4gOCk7CisJCQkJCW4tLTsKKwkJCQkJY29sKys7CisJCQkJfQorCQkJY2FzZSAyOgorCQkJCWlmIChuKSB7CisJCQkJCWJ1ZltpKytdID0gKHVpbnQ4X3QpIChkYXRhID4+IDE2KTsKKwkJCQkJbi0tOworCQkJCQljb2wrKzsKKwkJCQl9CisJCQljYXNlIDM6CisJCQkJaWYgKG4pIHsKKwkJCQkJYnVmW2krK10gPSAodWludDhfdCkgKGRhdGEgPj4gMjQpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWludCBtID0gbXRkLT53cml0ZXNpemUgLSBjb2w7CisKKwkJCWlmIChjb2wgPj0gbXRkLT53cml0ZXNpemUpCisJCQkJbSArPSBtdGQtPm9vYnNpemU7CisKKwkJCW0gPSBtaW4obiwgbSkgJiB+MzsKKwkJCW1lbWNweSgmYnVmW2ldLCBwLCBtKTsKKwkJCWNvbCArPSBtOworCQkJaSArPSBtOworCQkJbiAtPSBtOworCQl9CisJfQorCS8qIFVwZGF0ZSBzYXZlZCBjb2x1bW4gYWRkcmVzcyAqLworCWhvc3QtPmNvbF9hZGRyID0gY29sOworCit9CisKKy8qIFVzZWQgYnkgdGhlIHVwcGVyIGxheWVyIHRvIHZlcmlmeSB0aGUgZGF0YSBpbiBOQU5EIEZsYXNoCisgKiB3aXRoIHRoZSBkYXRhIGluIHRoZSBidWYuICovCitzdGF0aWMgaW50IG14Y19uYW5kX3ZlcmlmeV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSB1cHBlciBsYXllciBmb3Igc2VsZWN0IGFuZAorICogZGVzZWxlY3Qgb2YgdGhlIE5BTkQgY2hpcCAqLworc3RhdGljIHZvaWQgbXhjX25hbmRfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKworI2lmZGVmIENPTkZJR19NVERfTkFORF9NWENfRk9SQ0VfQ0UKKwlpZiAoY2hpcCA+IDApIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwKKwkJICAgICAgIkVSUk9SOiAgSWxsZWdhbCBjaGlwIHNlbGVjdCAoY2hpcCA9ICVkKVxuIiwgY2hpcCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY2hpcCA9PSAtMSkgeworCQl3cml0ZXcocmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKSAmIH5ORkNfQ0UsCisJCQkJaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRldyhyZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpIHwgTkZDX0NFLAorCQkJaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKyNlbmRpZgorCisJc3dpdGNoIChjaGlwKSB7CisJY2FzZSAtMToKKwkJLyogRGlzYWJsZSB0aGUgTkZDIGNsb2NrICovCisJCWlmIChob3N0LT5jbGtfYWN0KSB7CisJCQljbGtfZGlzYWJsZShob3N0LT5jbGspOworCQkJaG9zdC0+Y2xrX2FjdCA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAwOgorCQkvKiBFbmFibGUgdGhlIE5GQyBjbG9jayAqLworCQlpZiAoIWhvc3QtPmNsa19hY3QpIHsKKwkJCWNsa19lbmFibGUoaG9zdC0+Y2xrKTsKKwkJCWhvc3QtPmNsa19hY3QgPSAxOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKiBVc2VkIGJ5IHRoZSB1cHBlciBsYXllciB0byB3cml0ZSBjb21tYW5kIHRvIE5BTkQgRmxhc2ggZm9yCisgKiBkaWZmZXJlbnQgb3BlcmF0aW9ucyB0byBiZSBjYXJyaWVkIG91dCBvbiBOQU5EIEZsYXNoICovCitzdGF0aWMgdm9pZCBteGNfbmFuZF9jb21tYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLAorCQkJCWludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCWludCB1c2VpcnEgPSB0cnVlOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywKKwkgICAgICAibXhjX25hbmRfY29tbWFuZCAoY21kID0gMHgleCwgY29sID0gMHgleCwgcGFnZSA9IDB4JXgpXG4iLAorCSAgICAgIGNvbW1hbmQsIGNvbHVtbiwgcGFnZV9hZGRyKTsKKworCS8qIFJlc2V0IGNvbW1hbmQgc3RhdGUgaW5mb3JtYXRpb24gKi8KKwlob3N0LT5zdGF0dXNfcmVxdWVzdCA9IGZhbHNlOworCisJLyogQ29tbWFuZCBwcmUtcHJvY2Vzc2luZyBzdGVwICovCisJc3dpdGNoIChjb21tYW5kKSB7CisKKwljYXNlIE5BTkRfQ01EX1NUQVRVUzoKKwkJaG9zdC0+Y29sX2FkZHIgPSAwOworCQlob3N0LT5zdGF0dXNfcmVxdWVzdCA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKwkJaG9zdC0+Y29sX2FkZHIgPSBjb2x1bW47CisJCWhvc3QtPnNwYXJlX29ubHkgPSBmYWxzZTsKKwkJdXNlaXJxID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRUFET09COgorCQlob3N0LT5jb2xfYWRkciA9IGNvbHVtbjsKKwkJaG9zdC0+c3BhcmVfb25seSA9IHRydWU7CisJCXVzZWlycSA9IGZhbHNlOworCQlpZiAoaG9zdC0+cGFnZXNpemVfMmspCisJCQljb21tYW5kID0gTkFORF9DTURfUkVBRDA7IC8qIG9ubHkgUkVBRDAgaXMgdmFsaWQgKi8KKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1NFUUlOOgorCQlpZiAoY29sdW1uID49IG10ZC0+d3JpdGVzaXplKSB7CisJCQkvKgorCQkJICogRklYTUU6IGJlZm9yZSBzZW5kIFNFUUlOIGNvbW1hbmQgZm9yIHdyaXRlIE9PQiwKKwkJCSAqIFdlIG11c3QgcmVhZCBvbmUgcGFnZSBvdXQuCisJCQkgKiBGb3IgSzlGMUdYWCBoYXMgbm8gUkVBRDEgY29tbWFuZCB0byBzZXQgY3VycmVudCBIVworCQkJICogcG9pbnRlciB0byBzcGFyZSBhcmVhLCB3ZSBtdXN0IHdyaXRlIHRoZSB3aG9sZSBwYWdlCisJCQkgKiBpbmNsdWRpbmcgT09CIHRvZ2V0aGVyLgorCQkJICovCisJCQlpZiAoaG9zdC0+cGFnZXNpemVfMmspCisJCQkJLyogY2FsbCBvdXJzZWxmIHRvIHJlYWQgYSBwYWdlICovCisJCQkJbXhjX25hbmRfY29tbWFuZChtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLAorCQkJCQkJcGFnZV9hZGRyKTsKKworCQkJaG9zdC0+Y29sX2FkZHIgPSBjb2x1bW4gLSBtdGQtPndyaXRlc2l6ZTsKKwkJCWhvc3QtPnNwYXJlX29ubHkgPSB0cnVlOworCisJCQkvKiBTZXQgcHJvZ3JhbSBwb2ludGVyIHRvIHNwYXJlIHJlZ2lvbiAqLworCQkJaWYgKCFob3N0LT5wYWdlc2l6ZV8yaykKKwkJCQlzZW5kX2NtZChob3N0LCBOQU5EX0NNRF9SRUFET09CLCBmYWxzZSk7CisJCX0gZWxzZSB7CisJCQlob3N0LT5zcGFyZV9vbmx5ID0gZmFsc2U7CisJCQlob3N0LT5jb2xfYWRkciA9IGNvbHVtbjsKKworCQkJLyogU2V0IHByb2dyYW0gcG9pbnRlciB0byBwYWdlIHN0YXJ0ICovCisJCQlpZiAoIWhvc3QtPnBhZ2VzaXplXzJrKQorCQkJCXNlbmRfY21kKGhvc3QsIE5BTkRfQ01EX1JFQUQwLCBmYWxzZSk7CisJCX0KKwkJdXNlaXJxID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKKwkJc2VuZF9wcm9nX3BhZ2UoaG9zdCwgMCwgaG9zdC0+c3BhcmVfb25seSk7CisKKwkJaWYgKGhvc3QtPnBhZ2VzaXplXzJrKSB7CisJCQkvKiBkYXRhIGluIDQgYXJlYXMgZGF0YXMgKi8KKwkJCXNlbmRfcHJvZ19wYWdlKGhvc3QsIDEsIGhvc3QtPnNwYXJlX29ubHkpOworCQkJc2VuZF9wcm9nX3BhZ2UoaG9zdCwgMiwgaG9zdC0+c3BhcmVfb25seSk7CisJCQlzZW5kX3Byb2dfcGFnZShob3N0LCAzLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9FUkFTRTE6CisJCXVzZWlycSA9IGZhbHNlOworCQlicmVhazsKKwl9CisKKwkvKiBXcml0ZSBvdXQgdGhlIGNvbW1hbmQgdG8gdGhlIGRldmljZS4gKi8KKwlzZW5kX2NtZChob3N0LCBjb21tYW5kLCB1c2VpcnEpOworCisJLyogV3JpdGUgb3V0IGNvbHVtbiBhZGRyZXNzLCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoY29sdW1uICE9IC0xKSB7CisJCS8qCisJCSAqIE1YQyBOQU5ERkMgY2FuIG9ubHkgcGVyZm9ybSBmdWxsIHBhZ2Urc3BhcmUgb3IKKwkJICogc3BhcmUtb25seSByZWFkL3dyaXRlLiAgV2hlbiB0aGUgdXBwZXIgbGF5ZXJzCisJCSAqIGxheWVycyBwZXJmb3JtIGEgcmVhZC93cml0ZSBidWYgb3BlcmF0aW9uLAorCQkgKiB3ZSB3aWxsIHVzZWQgdGhlIHNhdmVkIGNvbHVtbiBhZHJlc3MgdG8gaW5kZXggaW50bworCQkgKiB0aGUgZnVsbCBwYWdlLgorCQkgKi8KKwkJc2VuZF9hZGRyKGhvc3QsIDAsIHBhZ2VfYWRkciA9PSAtMSk7CisJCWlmIChob3N0LT5wYWdlc2l6ZV8yaykKKwkJCS8qIGFub3RoZXIgY29sIGFkZHIgY3ljbGUgZm9yIDJrIHBhZ2UgKi8KKwkJCXNlbmRfYWRkcihob3N0LCAwLCBmYWxzZSk7CisJfQorCisJLyogV3JpdGUgb3V0IHBhZ2UgYWRkcmVzcywgaWYgbmVjZXNzYXJ5ICovCisJaWYgKHBhZ2VfYWRkciAhPSAtMSkgeworCQkvKiBwYWRkcl8wIC0gcF9hZGRyXzcgKi8KKwkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgJiAweGZmKSwgZmFsc2UpOworCisJCWlmIChob3N0LT5wYWdlc2l6ZV8yaykgeworCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gOCkgJiAweEZGLCBmYWxzZSk7CisJCQlpZiAobXRkLT5zaXplID49IDB4NDAwMDAwMDApCisJCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gMTYpICYgMHhmZiwgdHJ1ZSk7CisJCX0gZWxzZSB7CisJCQkvKiBPbmUgbW9yZSBhZGRyZXNzIGN5Y2xlIGZvciBoaWdoZXIgZGVuc2l0eSBkZXZpY2VzICovCisJCQlpZiAobXRkLT5zaXplID49IDB4NDAwMDAwMCkgeworCQkJCS8qIHBhZGRyXzggLSBwYWRkcl8xNSAqLworCQkJCXNlbmRfYWRkcihob3N0LCAocGFnZV9hZGRyID4+IDgpICYgMHhmZiwgZmFsc2UpOworCQkJCXNlbmRfYWRkcihob3N0LCAocGFnZV9hZGRyID4+IDE2KSAmIDB4ZmYsIHRydWUpOworCQkJfSBlbHNlCisJCQkJLyogcGFkZHJfOCAtIHBhZGRyXzE1ICovCisJCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gOCkgJiAweGZmLCB0cnVlKTsKKwkJfQorCX0KKworCS8qIENvbW1hbmQgcG9zdC1wcm9jZXNzaW5nIHN0ZXAgKi8KKwlzd2l0Y2ggKGNvbW1hbmQpIHsKKworCWNhc2UgTkFORF9DTURfUkVTRVQ6CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRUFET09COgorCWNhc2UgTkFORF9DTURfUkVBRDA6CisJCWlmIChob3N0LT5wYWdlc2l6ZV8yaykgeworCQkJLyogc2VuZCByZWFkIGNvbmZpcm0gY29tbWFuZCAqLworCQkJc2VuZF9jbWQoaG9zdCwgTkFORF9DTURfUkVBRFNUQVJULCB0cnVlKTsKKwkJCS8qIHJlYWQgZm9yIGVhY2ggQVJFQSAqLworCQkJc2VuZF9yZWFkX3BhZ2UoaG9zdCwgMCwgaG9zdC0+c3BhcmVfb25seSk7CisJCQlzZW5kX3JlYWRfcGFnZShob3N0LCAxLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJCXNlbmRfcmVhZF9wYWdlKGhvc3QsIDIsIGhvc3QtPnNwYXJlX29ubHkpOworCQkJc2VuZF9yZWFkX3BhZ2UoaG9zdCwgMywgaG9zdC0+c3BhcmVfb25seSk7CisJCX0gZWxzZQorCQkJc2VuZF9yZWFkX3BhZ2UoaG9zdCwgMCwgaG9zdC0+c3BhcmVfb25seSk7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRUFESUQ6CisJCXNlbmRfcmVhZF9pZChob3N0KTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgorCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfRVJBU0UyOgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG14Y25kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKwlzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1aW50MTZfdCB0bXA7CisJaW50IGVyciA9IDAsIG5yX3BhcnRzID0gMDsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLworCWhvc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXhjX25hbmRfaG9zdCksIEdGUF9LRVJORUwpOworCWlmICghaG9zdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlob3N0LT5kZXYgPSAmcGRldi0+ZGV2OworCS8qIHN0cnVjdHVyZXMgbXVzdCBiZSBsaW5rZWQgKi8KKwl0aGlzID0gJmhvc3QtPm5hbmQ7CisJbXRkID0gJmhvc3QtPm10ZDsKKwltdGQtPnByaXYgPSB0aGlzOworCW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCS8qIDUwIHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLworCXRoaXMtPmNoaXBfZGVsYXkgPSA1OworCisJdGhpcy0+cHJpdiA9IGhvc3Q7CisJdGhpcy0+ZGV2X3JlYWR5ID0gbXhjX25hbmRfZGV2X3JlYWR5OworCXRoaXMtPmNtZGZ1bmMgPSBteGNfbmFuZF9jb21tYW5kOworCXRoaXMtPnNlbGVjdF9jaGlwID0gbXhjX25hbmRfc2VsZWN0X2NoaXA7CisJdGhpcy0+cmVhZF9ieXRlID0gbXhjX25hbmRfcmVhZF9ieXRlOworCXRoaXMtPnJlYWRfd29yZCA9IG14Y19uYW5kX3JlYWRfd29yZDsKKwl0aGlzLT53cml0ZV9idWYgPSBteGNfbmFuZF93cml0ZV9idWY7CisJdGhpcy0+cmVhZF9idWYgPSBteGNfbmFuZF9yZWFkX2J1ZjsKKwl0aGlzLT52ZXJpZnlfYnVmID0gbXhjX25hbmRfdmVyaWZ5X2J1ZjsKKworCWhvc3QtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm5mY19jbGsiKTsKKwlpZiAoSVNfRVJSKGhvc3QtPmNsaykpCisJCWdvdG8gZWNsazsKKworCWNsa19lbmFibGUoaG9zdC0+Y2xrKTsKKwlob3N0LT5jbGtfYWN0ID0gMTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcmVzOworCX0KKworCWhvc3QtPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghaG9zdC0+cmVncykgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGVyZXM7CisJfQorCisJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl0bXAgfD0gTkZDX0lOVF9NU0s7CisJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmhvc3QtPmlycV93YWl0cSk7CisKKwlob3N0LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJZXJyID0gcmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBteGNfbmZjX2lycSwgMCwgIm14Y19uZCIsIGhvc3QpOworCWlmIChlcnIpCisJCWdvdG8gZWlycTsKKworCWlmIChwZGF0YS0+aHdfZWNjKSB7CisJCXRoaXMtPmVjYy5jYWxjdWxhdGUgPSBteGNfbmFuZF9jYWxjdWxhdGVfZWNjOworCQl0aGlzLT5lY2MuaHdjdGwgPSBteGNfbmFuZF9lbmFibGVfaHdlY2M7CisJCXRoaXMtPmVjYy5jb3JyZWN0ID0gbXhjX25hbmRfY29ycmVjdF9kYXRhOworCQl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXOworCQl0aGlzLT5lY2Muc2l6ZSA9IDUxMjsKKwkJdGhpcy0+ZWNjLmJ5dGVzID0gMzsKKwkJdGhpcy0+ZWNjLmxheW91dCA9ICZuYW5kX2h3X2VjY29vYl84OworCQl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCQl0bXAgfD0gTkZDX0VDQ19FTjsKKwkJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl9IGVsc2UgeworCQl0aGlzLT5lY2Muc2l6ZSA9IDUxMjsKKwkJdGhpcy0+ZWNjLmJ5dGVzID0gMzsKKwkJdGhpcy0+ZWNjLmxheW91dCA9ICZuYW5kX2h3X2VjY29vYl84OworCQl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisJCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJCXRtcCAmPSB+TkZDX0VDQ19FTjsKKwkJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl9CisKKwkvKiBSZXNldCBOQU5EICovCisJdGhpcy0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFU0VULCAtMSwgLTEpOworCisJLyogcHJlc2V0IG9wZXJhdGlvbiAqLworCS8qIFVubG9jayB0aGUgaW50ZXJuYWwgUkFNIEJ1ZmZlciAqLworCXdyaXRldygweDIsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHKTsKKworCS8qIEJsb2NrcyB0byBiZSB1bmxvY2tlZCAqLworCXdyaXRldygweDAsIGhvc3QtPnJlZ3MgKyBORkNfVU5MT0NLU1RBUlRfQkxLQUREUik7CisJd3JpdGV3KDB4NDAwMCwgaG9zdC0+cmVncyArIE5GQ19VTkxPQ0tFTkRfQkxLQUREUik7CisKKwkvKiBVbmxvY2sgQmxvY2sgQ29tbWFuZCBmb3IgZ2l2ZW4gYWRkcmVzcyByYW5nZSAqLworCXdyaXRldygweDQsIGhvc3QtPnJlZ3MgKyBORkNfV1JQUk9UKTsKKworCS8qIE5BTkQgYnVzIHdpZHRoIGRldGVybWluZXMgYWNjZXNzIGZ1bnRpb25zIHVzZWQgYnkgdXBwZXIgbGF5ZXIgKi8KKwlpZiAocGRhdGEtPndpZHRoID09IDIpIHsKKwkJdGhpcy0+b3B0aW9ucyB8PSBOQU5EX0JVU1dJRFRIXzE2OworCQl0aGlzLT5lY2MubGF5b3V0ID0gJm5hbmRfaHdfZWNjb29iXzE2OworCX0KKworCWhvc3QtPnBhZ2VzaXplXzJrID0gMDsKKworCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLworCWlmIChuYW5kX3NjYW4obXRkLCAxKSkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLAorCQkgICAgICAiTVhDX05EOiBVbmFibGUgdG8gZmluZCBhbnkgTkFORCBkZXZpY2UuXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVzY2FuOworCX0KKworCS8qIFJlZ2lzdGVyIHRoZSBwYXJ0aXRpb25zICovCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJbnJfcGFydHMgPQorCSAgICBwYXJzZV9tdGRfcGFydGl0aW9ucyhtdGQsIHBhcnRfcHJvYmVzLCAmaG9zdC0+cGFydHMsIDApOworCWlmIChucl9wYXJ0cyA+IDApCisJCWFkZF9tdGRfcGFydGl0aW9ucyhtdGQsIGhvc3QtPnBhcnRzLCBucl9wYXJ0cyk7CisJZWxzZQorI2VuZGlmCisJeworCQlwcl9pbmZvKCJSZWdpc3RlcmluZyAlcyBhcyB3aG9sZSBkZXZpY2VcbiIsIG10ZC0+bmFtZSk7CisJCWFkZF9tdGRfZGV2aWNlKG10ZCk7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaG9zdCk7CisKKwlyZXR1cm4gMDsKKworZXNjYW46CisJZnJlZV9pcnEoaG9zdC0+aXJxLCBOVUxMKTsKK2VpcnE6CisJaW91bm1hcChob3N0LT5yZWdzKTsKK2VyZXM6CisJY2xrX3B1dChob3N0LT5jbGspOworZWNsazoKKwlrZnJlZShob3N0KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG14Y25kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwljbGtfcHV0KGhvc3QtPmNsayk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCW5hbmRfcmVsZWFzZSgmaG9zdC0+bXRkKTsKKwlmcmVlX2lycShob3N0LT5pcnEsIE5VTEwpOworCWlvdW5tYXAoaG9zdC0+cmVncyk7CisJa2ZyZWUoaG9zdCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBteGNuZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRkX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJNWENfTkQgOiBOQU5EIHN1c3BlbmRcbiIpOworCWlmIChpbmZvKQorCQlyZXQgPSBpbmZvLT5zdXNwZW5kKGluZm8pOworCisJLyogRGlzYWJsZSB0aGUgTkZDIGNsb2NrICovCisJY2xrX2Rpc2FibGUobmZjX2Nsayk7CS8qIEZJWE1FICovCisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG14Y25kX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGRfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQgPSAwOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIk1YQ19ORCA6IE5BTkQgcmVzdW1lXG4iKTsKKwkvKiBFbmFibGUgdGhlIE5GQyBjbG9jayAqLworCWNsa19lbmFibGUobmZjX2Nsayk7CS8qIEZJWE1FICovCisKKwlpZiAoaW5mbykKKwkJaW5mby0+cmVzdW1lKGluZm8pOworCisJcmV0dXJuIHJldDsKK30KKworI2Vsc2UKKyMgZGVmaW5lIG14Y25kX3N1c3BlbmQgICBOVUxMCisjIGRlZmluZSBteGNuZF9yZXN1bWUgICAgTlVMTAorI2VuZGlmCQkJCS8qIENPTkZJR19QTSAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteGNuZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJICAgfSwKKwkucmVtb3ZlID0gX19leGl0X3AobXhjbmRfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IG14Y25kX3N1c3BlbmQsCisJLnJlc3VtZSA9IG14Y25kX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG14Y19uZF9pbml0KHZvaWQpCit7CisJLyogUmVnaXN0ZXIgdGhlIGRldmljZSBkcml2ZXIgc3RydWN0dXJlLiAqLworCXByX2luZm8oIk1YQyBNVEQgbmFuZCBEcml2ZXJcbiIpOworCWlmIChwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm14Y25kX2RyaXZlciwgbXhjbmRfcHJvYmUpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJEcml2ZXIgcmVnaXN0ZXIgZmFpbGVkIGZvciBteGNuZF9kcml2ZXJcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBteGNfbmRfY2xlYW51cCh2b2lkKQoreworCS8qIFVucmVnaXN0ZXIgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXhjbmRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXhjX25kX2luaXQpOworbW9kdWxlX2V4aXQobXhjX25kX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCJGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNWEMgTkFORCBNVEQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwppbmRleCBkMTEyOWJhLi4wYTljOWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKQEAgLTgwMSw5ICs4MDEsOSBAQAogICogbmFuZF9yZWFkX3N1YnBhZ2UgLSBbUkVQTEFDQUJMRV0gc29mdHdhcmUgZWNjIGJhc2VkIHN1Yi1wYWdlIHJlYWQgZnVuY3Rpb24KICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQotICogQGRhdGFvZnMJb2Zmc2V0IG9mIHJlcXVlc3RlZCBkYXRhIHdpdGhpbiB0aGUgcGFnZQotICogQHJlYWRsZW4JZGF0YSBsZW5ndGgKLSAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBkYXRhX29mZnM6CW9mZnNldCBvZiByZXF1ZXN0ZWQgZGF0YSB3aXRoaW4gdGhlIHBhZ2UKKyAqIEByZWFkbGVuOglkYXRhIGxlbmd0aAorICogQGJ1ZnBvaToJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQogICovCiBzdGF0aWMgaW50IG5hbmRfcmVhZF9zdWJwYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1aW50MzJfdCBkYXRhX29mZnMsIHVpbnQzMl90IHJlYWRsZW4sIHVpbnQ4X3QgKmJ1ZnBvaSkKIHsKQEAgLTIwNDIsNyArMjA0Miw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWluc3RyLT5mYWlsX2FkZHIgPSAweGZmZmZmZmZmOworCWluc3RyLT5mYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV047CiAKIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KIAluYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9FUkFTSU5HKTsKQEAgLTIzMTgsNiArMjMxOCwxMiBAQAogCS8qIFNlbGVjdCB0aGUgZGV2aWNlICovCiAJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAwKTsKIAorCS8qCisJICogUmVzZXQgdGhlIGNoaXAsIHJlcXVpcmVkIGJ5IHNvbWUgY2hpcHMgKGUuZy4gTWljcm9uIE1UMjlGeEd4eHh4eCkKKwkgKiBhZnRlciBwb3dlci11cAorCSAqLworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRVNFVCwgLTEsIC0xKTsKKwogCS8qIFNlbmQgdGhlIGNvbW1hbmQgZm9yIHJlYWRpbmcgZGV2aWNlIElEICovCiAJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURJRCwgMHgwMCwgLTEpOwogCkBAIC0yNDg4LDYgKzI0OTQsOCBAQAogCS8qIENoZWNrIGZvciBhIGNoaXAgYXJyYXkgKi8KIAlmb3IgKGkgPSAxOyBpIDwgbWF4Y2hpcHM7IGkrKykgewogCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGkpOworCQkvKiBTZWUgY29tbWVudCBpbiBuYW5kX2dldF9mbGFzaF90eXBlIGZvciByZXNldCAqLworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVTRVQsIC0xLCAtMSk7CiAJCS8qIFNlbmQgdGhlIGNvbW1hbmQgZm9yIHJlYWRpbmcgZGV2aWNlIElEICovCiAJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFESUQsIDB4MDAsIC0xKTsKIAkJLyogUmVhZCBtYW51ZmFjdHVyZXIgYW5kIGRldmljZSBJRHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYwppbmRleCA5MThhODA2Li44NjgxNDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCkBAIC0xLDEzICsxLDE4IEBACiAvKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGFuIEVDQyBhbGdvcml0aG0gZnJvbSBUb3NoaWJhIHRoYXQgZGV0ZWN0cyBhbmQKLSAqIGNvcnJlY3RzIDEgYml0IGVycm9ycyBpbiBhIDI1NiBieXRlIGJsb2NrIG9mIGRhdGEuCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYW4gRUNDIGFsZ29yaXRobSB0aGF0IGRldGVjdHMgYW5kIGNvcnJlY3RzIDEgYml0CisgKiBlcnJvcnMgaW4gYSAyNTYgYnl0ZSBibG9jayBvZiBkYXRhLgogICoKICAqIGRyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA0IFN0ZXZlbiBKLiBIaWxsIChzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tKQotICogICAgICAgICAgICAgICAgICAgICAgICAgVG9zaGliYSBBbWVyaWNhIEVsZWN0cm9uaWNzIENvbXBvbmVudHMsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA4IEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTlYuCisgKiAgICAgICAgICAgICAgICAgIEF1dGhvcjogRnJhbnMgTWV1bGVuYnJvZWtzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICogQ29tcGxldGVseSByZXBsYWNlcyB0aGUgcHJldmlvdXMgRUNDIGltcGxlbWVudGF0aW9uIHdoaWNoIHdhcyB3cml0dGVuIGJ5OgorICogICBTdGV2ZW4gSi4gSGlsbCAoc2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbSkKKyAqICAgVGhvbWFzIEdsZWl4bmVyICh0Z2x4QGxpbnV0cm9uaXguZGUpCisgKgorICogSW5mb3JtYXRpb24gb24gaG93IHRoaXMgYWxnb3JpdGhtIHdvcmtzIGFuZCBob3cgaXQgd2FzIGRldmVsb3BlZAorICogY2FuIGJlIGZvdW5kIGluIERvY3VtZW50YXRpb24vbXRkL25hbmRfZWNjLnR4dAogICoKICAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTIzLDE3NCArMjgsNDc1IEBACiAgKiB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCiAgKgotICogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZQotICogbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGVzZSBmaWxlcywgb3IgeW91IGNvbXBpbGUgdGhlc2UKLSAqIGZpbGVzIGFuZCBsaW5rIHRoZW0gd2l0aCBvdGhlciB3b3JrcyB0byBwcm9kdWNlIGEgd29yayBiYXNlZCBvbiB0aGVzZQotICogZmlsZXMsIHRoZXNlIGZpbGVzIGRvIG5vdCBieSB0aGVtc2VsdmVzIGNhdXNlIHRoZSByZXN1bHRpbmcgd29yayB0byBiZQotICogY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIEhvd2V2ZXIgdGhlIHNvdXJjZSBjb2RlIGZvcgotICogdGhlc2UgZmlsZXMgbXVzdCBzdGlsbCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggc2VjdGlvbiAoMykKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAqCi0gKiBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSBhIHdvcmsgYmFzZWQgb24KLSAqIHRoaXMgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KICAqLwogCisvKgorICogVGhlIFNUQU5EQUxPTkUgbWFjcm8gaXMgdXNlZnVsIHdoZW4gcnVubmluZyB0aGUgY29kZSBvdXRzaWRlIHRoZSBrZXJuZWwKKyAqIGUuZy4gd2hlbiBydW5uaW5nIHRoZSBjb2RlIGluIGEgdGVzdGJlZCBvciBhIGJlbmNobWFyayBwcm9ncmFtLgorICogV2hlbiBTVEFOREFMT05FIGlzIHVzZWQsIHRoZSBtb2R1bGUgcmVsYXRlZCBtYWNyb3MgYXJlIGNvbW1lbnRlZCBvdXQKKyAqIGFzIHdlbGwgYXMgdGhlIGxpbnV4IGluY2x1ZGUgZmlsZXMuCisgKiBJbnN0ZWFkIGEgcHJpdmF0ZSBkZWZpbml0aW9uIG9mIG10ZF9pbmZvIGlzIGdpdmVuIHRvIHNhdGlzZnkgdGhlIGNvbXBpbGVyCisgKiAodGhlIGNvZGUgZG9lcyBub3QgdXNlIG10ZF9pbmZvLCBzbyB0aGUgY29kZSBkb2VzIG5vdCBjYXJlKQorICovCisjaWZuZGVmIFNUQU5EQUxPTkUKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+CitzdHJ1Y3QgbXRkX2luZm87CisjZGVmaW5lIEVYUE9SVF9TWU1CT0woeCkgIC8qIHggKi8KKworI2RlZmluZSBNT0RVTEVfTElDRU5TRSh4KQkvKiB4ICovCisjZGVmaW5lIE1PRFVMRV9BVVRIT1IoeCkJLyogeCAqLworI2RlZmluZSBNT0RVTEVfREVTQ1JJUFRJT04oeCkJLyogeCAqLworCisjZGVmaW5lIHByaW50ayBwcmludGYKKyNkZWZpbmUgS0VSTl9FUlIJCSIiCisjZW5kaWYKIAogLyoKLSAqIFByZS1jYWxjdWxhdGVkIDI1Ni13YXkgMSBieXRlIGNvbHVtbiBwYXJpdHkKKyAqIGludnBhcml0eSBpcyBhIDI1NiBieXRlIHRhYmxlIHRoYXQgY29udGFpbnMgdGhlIG9kZCBwYXJpdHkKKyAqIGZvciBlYWNoIGJ5dGUuIFNvIGlmIHRoZSBudW1iZXIgb2YgYml0cyBpbiBhIGJ5dGUgaXMgZXZlbiwKKyAqIHRoZSBhcnJheSBlbGVtZW50IGlzIDEsIGFuZCB3aGVuIHRoZSBudW1iZXIgb2YgYml0cyBpcyBvZGQKKyAqIHRoZSBhcnJheSBlbGVlbW50IGlzIDAuCiAgKi8KLXN0YXRpYyBjb25zdCB1X2NoYXIgbmFuZF9lY2NfcHJlY2FsY190YWJsZVtdID0gewotCTB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsCi0JMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwgMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwKLQkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDY1LCAweDMwLCAweDMzLCAweDY2LAotCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsCi0JMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwKLQkweDBjLCAweDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDU2LCAweDAzLCAweDAwLCAweDU1LCAweDBmLCAweDVhLCAweDU5LCAweDBjLAotCTB4MGYsIDB4NWEsIDB4NTksIDB4MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4MGMsIDB4NTksIDB4NWEsIDB4MGYsCi0JMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwgMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwKLQkweDZhLCAweDNmLCAweDNjLCAweDY5LCAweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDY5LCAweDNjLCAweDNmLCAweDZhLAotCTB4MGYsIDB4NWEsIDB4NTksIDB4MGMsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4MGMsIDB4NTksIDB4NWEsIDB4MGYsCi0JMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwgMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywKLQkweDY5LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDZhLCAweDNmLCAweDNjLCAweDY5LAotCTB4MDMsIDB4NTYsIDB4NTUsIDB4MDAsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsCi0JMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwgMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwKLQkweDY1LCAweDMwLCAweDMzLCAweDY2LCAweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDY2LCAweDMzLCAweDMwLCAweDY1LAotCTB4MDAsIDB4NTUsIDB4NTYsIDB4MDMsIDB4NTksIDB4MGMsIDB4MGYsIDB4NWEsIDB4NWEsIDB4MGYsIDB4MGMsIDB4NTksIDB4MDMsIDB4NTYsIDB4NTUsIDB4MDAKK3N0YXRpYyBjb25zdCBjaGFyIGludnBhcml0eVsyNTZdID0geworCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEKK307CisKKy8qCisgKiBiaXRzcGVyYnl0ZSBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJpdHMgcGVyIGJ5dGUKKyAqIHRoaXMgaXMgb25seSB1c2VkIGZvciB0ZXN0aW5nIGFuZCByZXBhaXJpbmcgcGFyaXR5CisgKiAoYSBwcmVjYWxjdWxhdGVkIHZhbHVlIHNsaWdodGx5IGltcHJvdmVzIHBlcmZvcm1hbmNlKQorICovCitzdGF0aWMgY29uc3QgY2hhciBiaXRzcGVyYnl0ZVsyNTZdID0geworCTAsIDEsIDEsIDIsIDEsIDIsIDIsIDMsIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsCisJMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSwKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSwKKwkyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwKKwkzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywKKwkzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsIDUsIDYsIDYsIDcsIDYsIDcsIDcsIDgsCit9OworCisvKgorICogYWRkcmVzc2JpdHMgaXMgYSBsb29rdXAgdGFibGUgdG8gZmlsdGVyIG91dCB0aGUgYml0cyBmcm9tIHRoZSB4b3ItZWQKKyAqIGVjYyBkYXRhIHRoYXQgaWRlbnRpZnkgdGhlIGZhdWx0eSBsb2NhdGlvbi4KKyAqIHRoaXMgaXMgb25seSB1c2VkIGZvciByZXBhaXJpbmcgcGFyaXR5CisgKiBzZWUgdGhlIGNvbW1lbnRzIGluIG5hbmRfY29ycmVjdF9kYXRhIGZvciBtb3JlIGRldGFpbHMKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgYWRkcmVzc2JpdHNbMjU2XSA9IHsKKwkweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAxLAorCTB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwKKwkweDAyLCAweDAyLCAweDAzLCAweDAzLCAweDAyLCAweDAyLCAweDAzLCAweDAzLAorCTB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsIDB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsCisJMHgwNiwgMHgwNiwgMHgwNywgMHgwNywgMHgwNiwgMHgwNiwgMHgwNywgMHgwNywKKwkweDA0LCAweDA0LCAweDA1LCAweDA1LCAweDA0LCAweDA0LCAweDA1LCAweDA1LAorCTB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsIDB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwKKwkweDAyLCAweDAyLCAweDAzLCAweDAzLCAweDAyLCAweDAyLCAweDAzLCAweDAzLAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsCisJMHgwMiwgMHgwMiwgMHgwMywgMHgwMywgMHgwMiwgMHgwMiwgMHgwMywgMHgwMywKKwkweDA0LCAweDA0LCAweDA1LCAweDA1LCAweDA0LCAweDA0LCAweDA1LCAweDA1LAorCTB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsIDB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsCisJMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwKKwkweDA2LCAweDA2LCAweDA3LCAweDA3LCAweDA2LCAweDA2LCAweDA3LCAweDA3LAorCTB4MDgsIDB4MDgsIDB4MDksIDB4MDksIDB4MDgsIDB4MDgsIDB4MDksIDB4MDksCisJMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwgMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwKKwkweDA4LCAweDA4LCAweDA5LCAweDA5LCAweDA4LCAweDA4LCAweDA5LCAweDA5LAorCTB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsIDB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsCisJMHgwYywgMHgwYywgMHgwZCwgMHgwZCwgMHgwYywgMHgwYywgMHgwZCwgMHgwZCwKKwkweDBlLCAweDBlLCAweDBmLCAweDBmLCAweDBlLCAweDBlLCAweDBmLCAweDBmLAorCTB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsIDB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsCisJMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwgMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwKKwkweDA4LCAweDA4LCAweDA5LCAweDA5LCAweDA4LCAweDA4LCAweDA5LCAweDA5LAorCTB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsIDB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsCisJMHgwOCwgMHgwOCwgMHgwOSwgMHgwOSwgMHgwOCwgMHgwOCwgMHgwOSwgMHgwOSwKKwkweDBhLCAweDBhLCAweDBiLCAweDBiLCAweDBhLCAweDBhLCAweDBiLCAweDBiLAorCTB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsIDB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsCisJMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwgMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwKKwkweDBjLCAweDBjLCAweDBkLCAweDBkLCAweDBjLCAweDBjLCAweDBkLCAweDBkLAorCTB4MGUsIDB4MGUsIDB4MGYsIDB4MGYsIDB4MGUsIDB4MGUsIDB4MGYsIDB4MGYKIH07CiAKIC8qKgotICogbmFuZF9jYWxjdWxhdGVfZWNjIC0gW05BTkQgSW50ZXJmYWNlXSBDYWxjdWxhdGUgMy1ieXRlIEVDQyBmb3IgMjU2LWJ5dGUgYmxvY2sKKyAqIG5hbmRfY2FsY3VsYXRlX2VjYyAtIFtOQU5EIEludGVyZmFjZV0gQ2FsY3VsYXRlIDMtYnl0ZSBFQ0MgZm9yIDI1Ni81MTItYnl0ZQorICoJCQkgYmxvY2sKICAqIEBtdGQ6CU1URCBibG9jayBzdHJ1Y3R1cmUKLSAqIEBkYXQ6CXJhdyBkYXRhCi0gKiBAZWNjX2NvZGU6CWJ1ZmZlciBmb3IgRUNDCisgKiBAYnVmOglpbnB1dCBidWZmZXIgd2l0aCByYXcgZGF0YQorICogQGNvZGU6CW91dHB1dCBidWZmZXIgd2l0aCBFQ0MKICAqLwotaW50IG5hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsCi0JCSAgICAgICB1X2NoYXIgKmVjY19jb2RlKQoraW50IG5hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqY29kZSkKIHsKLQl1aW50OF90IGlkeCwgcmVnMSwgcmVnMiwgcmVnMywgdG1wMSwgdG1wMjsKIAlpbnQgaTsKKwljb25zdCB1aW50MzJfdCAqYnAgPSAodWludDMyX3QgKilidWY7CisJLyogMjU2IG9yIDUxMiBieXRlcy9lY2MgICovCisJY29uc3QgdWludDMyX3QgZWNjc2l6ZV9tdWx0ID0KKwkJCSgoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5lY2Muc2l6ZSkgPj4gODsKKwl1aW50MzJfdCBjdXI7CQkvKiBjdXJyZW50IHZhbHVlIGluIGJ1ZmZlciAqLworCS8qIHJwMC4ucnAxNS4ucnAxNyBhcmUgdGhlIHZhcmlvdXMgYWNjdW11bGF0ZWQgcGFyaXRpZXMgKHBlciBieXRlKSAqLworCXVpbnQzMl90IHJwMCwgcnAxLCBycDIsIHJwMywgcnA0LCBycDUsIHJwNiwgcnA3OworCXVpbnQzMl90IHJwOCwgcnA5LCBycDEwLCBycDExLCBycDEyLCBycDEzLCBycDE0LCBycDE1LCBycDE2OworCXVpbnQzMl90IHVuaW5pdGlhbGl6ZWRfdmFyKHJwMTcpOwkvKiB0byBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJdWludDMyX3QgcGFyOwkJLyogdGhlIGN1bXVsYXRpdmUgcGFyaXR5IGZvciBhbGwgZGF0YSAqLworCXVpbnQzMl90IHRtcHBhcjsJLyogdGhlIGN1bXVsYXRpdmUgcGFyaXR5IGZvciB0aGlzIGl0ZXJhdGlvbjsKKwkJCQkgICBmb3IgcnAxMiwgcnAxNCBhbmQgcnAxNiBhdCB0aGUgZW5kIG9mIHRoZQorCQkJCSAgIGxvb3AgKi8KIAotCS8qIEluaXRpYWxpemUgdmFyaWFibGVzICovCi0JcmVnMSA9IHJlZzIgPSByZWczID0gMDsKKwlwYXIgPSAwOworCXJwNCA9IDA7CisJcnA2ID0gMDsKKwlycDggPSAwOworCXJwMTAgPSAwOworCXJwMTIgPSAwOworCXJwMTQgPSAwOworCXJwMTYgPSAwOwogCi0JLyogQnVpbGQgdXAgY29sdW1uIHBhcml0eSAqLwotCWZvcihpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCS8qIEdldCBDUDAgLSBDUDUgZnJvbSB0YWJsZSAqLwotCQlpZHggPSBuYW5kX2VjY19wcmVjYWxjX3RhYmxlWypkYXQrK107Ci0JCXJlZzEgXj0gKGlkeCAmIDB4M2YpOworCS8qCisJICogVGhlIGxvb3AgaXMgdW5yb2xsZWQgYSBudW1iZXIgb2YgdGltZXM7CisJICogVGhpcyBhdm9pZHMgaWYgc3RhdGVtZW50cyB0byBkZWNpZGUgb24gd2hpY2ggcnAgdmFsdWUgdG8gdXBkYXRlCisJICogQWxzbyB3ZSBwcm9jZXNzIHRoZSBkYXRhIGJ5IGxvbmd3b3Jkcy4KKwkgKiBOb3RlOiBwYXNzaW5nIHVuYWxpZ25lZCBkYXRhIG1pZ2h0IGdpdmUgYSBwZXJmb3JtYW5jZSBwZW5hbHR5LgorCSAqIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgYnVmZmVycyBhcmUgYWxpZ25lZC4KKwkgKiB0bXBwYXIgaXMgdGhlIGN1bXVsYXRpdmUgc3VtIG9mIHRoaXMgaXRlcmF0aW9uLgorCSAqIG5lZWRlZCBmb3IgY2FsY3VsYXRpbmcgcnAxMiwgcnAxNCwgcnAxNiBhbmQgcGFyCisJICogYWxzbyB1c2VkIGFzIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgZm9yIHJwNiwgcnA4IGFuZCBycDEwCisJICovCisJZm9yIChpID0gMDsgaSA8IGVjY3NpemVfbXVsdCA8PCAyOyBpKyspIHsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciA9IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNiBePSB0bXBwYXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDQgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA4IF49IHRtcHBhcjsKIAotCQkvKiBBbGwgYml0IFhPUiA9IDEgPyAqLwotCQlpZiAoaWR4ICYgMHg0MCkgewotCQkJcmVnMyBePSAodWludDhfdCkgaTsKLQkJCXJlZzIgXj0gfigodWludDhfdCkgaSk7Ci0JCX0KKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCXJwNiBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwMTAgXj0gdG1wcGFyOworCisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDQgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQlycDggXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA2IF49IGN1cjsKKwkJcnA4IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCXJwOCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDggXj0gY3VyOworCisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDQgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA2IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCisJCXBhciBePSB0bXBwYXI7CisJCWlmICgoaSAmIDB4MSkgPT0gMCkKKwkJCXJwMTIgXj0gdG1wcGFyOworCQlpZiAoKGkgJiAweDIpID09IDApCisJCQlycDE0IF49IHRtcHBhcjsKKwkJaWYgKGVjY3NpemVfbXVsdCA9PSAyICYmIChpICYgMHg0KSA9PSAwKQorCQkJcnAxNiBePSB0bXBwYXI7CiAJfQogCi0JLyogQ3JlYXRlIG5vbi1pbnZlcnRlZCBFQ0MgY29kZSBmcm9tIGxpbmUgcGFyaXR5ICovCi0JdG1wMSAgPSAocmVnMyAmIDB4ODApID4+IDA7IC8qIEI3IC0+IEI3ICovCi0JdG1wMSB8PSAocmVnMiAmIDB4ODApID4+IDE7IC8qIEI3IC0+IEI2ICovCi0JdG1wMSB8PSAocmVnMyAmIDB4NDApID4+IDE7IC8qIEI2IC0+IEI1ICovCi0JdG1wMSB8PSAocmVnMiAmIDB4NDApID4+IDI7IC8qIEI2IC0+IEI0ICovCi0JdG1wMSB8PSAocmVnMyAmIDB4MjApID4+IDI7IC8qIEI1IC0+IEIzICovCi0JdG1wMSB8PSAocmVnMiAmIDB4MjApID4+IDM7IC8qIEI1IC0+IEIyICovCi0JdG1wMSB8PSAocmVnMyAmIDB4MTApID4+IDM7IC8qIEI0IC0+IEIxICovCi0JdG1wMSB8PSAocmVnMiAmIDB4MTApID4+IDQ7IC8qIEI0IC0+IEIwICovCisJLyoKKwkgKiBoYW5kbGUgdGhlIGZhY3QgdGhhdCB3ZSB1c2UgbG9uZ3dvcmQgb3BlcmF0aW9ucworCSAqIHdlJ2xsIGJyaW5nIHJwNC4ucnAxNC4ucnAxNiBiYWNrIHRvIHNpbmdsZSBieXRlIGVudGl0aWVzIGJ5CisJICogc2hpZnRpbmcgYW5kIHhvcmluZyBmaXJzdCBmb2xkIHRoZSB1cHBlciBhbmQgbG93ZXIgMTYgYml0cywKKwkgKiB0aGVuIHRoZSB1cHBlciBhbmQgbG93ZXIgOCBiaXRzLgorCSAqLworCXJwNCBePSAocnA0ID4+IDE2KTsKKwlycDQgXj0gKHJwNCA+PiA4KTsKKwlycDQgJj0gMHhmZjsKKwlycDYgXj0gKHJwNiA+PiAxNik7CisJcnA2IF49IChycDYgPj4gOCk7CisJcnA2ICY9IDB4ZmY7CisJcnA4IF49IChycDggPj4gMTYpOworCXJwOCBePSAocnA4ID4+IDgpOworCXJwOCAmPSAweGZmOworCXJwMTAgXj0gKHJwMTAgPj4gMTYpOworCXJwMTAgXj0gKHJwMTAgPj4gOCk7CisJcnAxMCAmPSAweGZmOworCXJwMTIgXj0gKHJwMTIgPj4gMTYpOworCXJwMTIgXj0gKHJwMTIgPj4gOCk7CisJcnAxMiAmPSAweGZmOworCXJwMTQgXj0gKHJwMTQgPj4gMTYpOworCXJwMTQgXj0gKHJwMTQgPj4gOCk7CisJcnAxNCAmPSAweGZmOworCWlmIChlY2NzaXplX211bHQgPT0gMikgeworCQlycDE2IF49IChycDE2ID4+IDE2KTsKKwkJcnAxNiBePSAocnAxNiA+PiA4KTsKKwkJcnAxNiAmPSAweGZmOworCX0KIAotCXRtcDIgID0gKHJlZzMgJiAweDA4KSA8PCA0OyAvKiBCMyAtPiBCNyAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDA4KSA8PCAzOyAvKiBCMyAtPiBCNiAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDA0KSA8PCAzOyAvKiBCMiAtPiBCNSAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDA0KSA8PCAyOyAvKiBCMiAtPiBCNCAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDAyKSA8PCAyOyAvKiBCMSAtPiBCMyAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDAyKSA8PCAxOyAvKiBCMSAtPiBCMiAqLwotCXRtcDIgfD0gKHJlZzMgJiAweDAxKSA8PCAxOyAvKiBCMCAtPiBCMSAqLwotCXRtcDIgfD0gKHJlZzIgJiAweDAxKSA8PCAwOyAvKiBCNyAtPiBCMCAqLwotCi0JLyogQ2FsY3VsYXRlIGZpbmFsIEVDQyBjb2RlICovCi0jaWZkZWYgQ09ORklHX01URF9OQU5EX0VDQ19TTUMKLQllY2NfY29kZVswXSA9IH50bXAyOwotCWVjY19jb2RlWzFdID0gfnRtcDE7CisJLyoKKwkgKiB3ZSBhbHNvIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSByb3cgcGFyaXR5IGZvciBycDAuLnJwMworCSAqIFRoaXMgaXMgcHJlc2VudCBpbiBwYXIsIGJlY2F1c2UgcGFyIGlzIG5vdworCSAqIHJwMyBycDMgcnAyIHJwMiBpbiBsaXR0bGUgZW5kaWFuIGFuZAorCSAqIHJwMiBycDIgcnAzIHJwMyBpbiBiaWcgZW5kaWFuCisJICogYXMgd2VsbCBhcworCSAqIHJwMSBycDAgcnAxIHJwMCBpbiBsaXR0bGUgZW5kaWFuIGFuZAorCSAqIHJwMCBycDEgcnAwIHJwMSBpbiBiaWcgZW5kaWFuCisJICogRmlyc3QgY2FsY3VsYXRlIHJwMiBhbmQgcnAzCisJICovCisjaWZkZWYgX19CSUdfRU5ESUFOCisJcnAyID0gKHBhciA+PiAxNik7CisJcnAyIF49IChycDIgPj4gOCk7CisJcnAyICY9IDB4ZmY7CisJcnAzID0gcGFyICYgMHhmZmZmOworCXJwMyBePSAocnAzID4+IDgpOworCXJwMyAmPSAweGZmOwogI2Vsc2UKLQllY2NfY29kZVswXSA9IH50bXAxOwotCWVjY19jb2RlWzFdID0gfnRtcDI7CisJcnAzID0gKHBhciA+PiAxNik7CisJcnAzIF49IChycDMgPj4gOCk7CisJcnAzICY9IDB4ZmY7CisJcnAyID0gcGFyICYgMHhmZmZmOworCXJwMiBePSAocnAyID4+IDgpOworCXJwMiAmPSAweGZmOwogI2VuZGlmCi0JZWNjX2NvZGVbMl0gPSAoKH5yZWcxKSA8PCAyKSB8IDB4MDM7CiAKKwkvKiByZWR1Y2UgcGFyIHRvIDE2IGJpdHMgdGhlbiBjYWxjdWxhdGUgcnAxIGFuZCBycDAgKi8KKwlwYXIgXj0gKHBhciA+PiAxNik7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJcnAwID0gKHBhciA+PiA4KSAmIDB4ZmY7CisJcnAxID0gKHBhciAmIDB4ZmYpOworI2Vsc2UKKwlycDEgPSAocGFyID4+IDgpICYgMHhmZjsKKwlycDAgPSAocGFyICYgMHhmZik7CisjZW5kaWYKKworCS8qIGZpbmFsbHkgcmVkdWNlIHBhciB0byA4IGJpdHMgKi8KKwlwYXIgXj0gKHBhciA+PiA4KTsKKwlwYXIgJj0gMHhmZjsKKworCS8qCisJICogYW5kIGNhbGN1bGF0ZSBycDUuLnJwMTUuLnJwMTcKKwkgKiBub3RlIHRoYXQgcGFyID0gcnA0IF4gcnA1IGFuZCBkdWUgdG8gdGhlIGNvbW11dGF0aXZlIHByb3BlcnR5CisJICogb2YgdGhlIF4gb3BlcmF0b3Igd2UgY2FuIHNheToKKwkgKiBycDUgPSAocGFyIF4gcnA0KTsKKwkgKiBUaGUgJiAweGZmIHNlZW1zIHN1cGVyZmx1b3VzLCBidXQgYmVuY2htYXJraW5nIGxlYXJuZWQgdGhhdAorCSAqIGxlYXZpbmcgaXQgb3V0IGdpdmVzIHNsaWdodGx5IHdvcnNlIHJlc3VsdHMuIE5vIGlkZWEgd2h5LCBwcm9iYWJseQorCSAqIGl0IGhhcyB0byBkbyB3aXRoIHRoZSB3YXkgdGhlIHBpcGVsaW5lIGluIHBlbnRpdW0gaXMgb3JnYW5pemVkLgorCSAqLworCXJwNSA9IChwYXIgXiBycDQpICYgMHhmZjsKKwlycDcgPSAocGFyIF4gcnA2KSAmIDB4ZmY7CisJcnA5ID0gKHBhciBeIHJwOCkgJiAweGZmOworCXJwMTEgPSAocGFyIF4gcnAxMCkgJiAweGZmOworCXJwMTMgPSAocGFyIF4gcnAxMikgJiAweGZmOworCXJwMTUgPSAocGFyIF4gcnAxNCkgJiAweGZmOworCWlmIChlY2NzaXplX211bHQgPT0gMikKKwkJcnAxNyA9IChwYXIgXiBycDE2KSAmIDB4ZmY7CisKKwkvKgorCSAqIEZpbmFsbHkgY2FsY3VsYXRlIHRoZSBlY2MgYml0cy4KKwkgKiBBZ2FpbiBoZXJlIGl0IG1pZ2h0IHNlZW0gdGhhdCB0aGVyZSBhcmUgcGVyZm9ybWFuY2Ugb3B0aW1pc2F0aW9ucworCSAqIHBvc3NpYmxlLCBidXQgYmVuY2htYXJrcyBzaG93ZWQgdGhhdCBvbiB0aGUgc3lzdGVtIHRoaXMgaXMgZGV2ZWxvcGVkCisJICogdGhlIGNvZGUgYmVsb3cgaXMgdGhlIGZhc3Rlc3QKKwkgKi8KKyNpZmRlZiBDT05GSUdfTVREX05BTkRfRUNDX1NNQworCWNvZGVbMF0gPQorCSAgICAoaW52cGFyaXR5W3JwN10gPDwgNykgfAorCSAgICAoaW52cGFyaXR5W3JwNl0gPDwgNikgfAorCSAgICAoaW52cGFyaXR5W3JwNV0gPDwgNSkgfAorCSAgICAoaW52cGFyaXR5W3JwNF0gPDwgNCkgfAorCSAgICAoaW52cGFyaXR5W3JwM10gPDwgMykgfAorCSAgICAoaW52cGFyaXR5W3JwMl0gPDwgMikgfAorCSAgICAoaW52cGFyaXR5W3JwMV0gPDwgMSkgfAorCSAgICAoaW52cGFyaXR5W3JwMF0pOworCWNvZGVbMV0gPQorCSAgICAoaW52cGFyaXR5W3JwMTVdIDw8IDcpIHwKKwkgICAgKGludnBhcml0eVtycDE0XSA8PCA2KSB8CisJICAgIChpbnZwYXJpdHlbcnAxM10gPDwgNSkgfAorCSAgICAoaW52cGFyaXR5W3JwMTJdIDw8IDQpIHwKKwkgICAgKGludnBhcml0eVtycDExXSA8PCAzKSB8CisJICAgIChpbnZwYXJpdHlbcnAxMF0gPDwgMikgfAorCSAgICAoaW52cGFyaXR5W3JwOV0gPDwgMSkgIHwKKwkgICAgKGludnBhcml0eVtycDhdKTsKKyNlbHNlCisJY29kZVsxXSA9CisJICAgIChpbnZwYXJpdHlbcnA3XSA8PCA3KSB8CisJICAgIChpbnZwYXJpdHlbcnA2XSA8PCA2KSB8CisJICAgIChpbnZwYXJpdHlbcnA1XSA8PCA1KSB8CisJICAgIChpbnZwYXJpdHlbcnA0XSA8PCA0KSB8CisJICAgIChpbnZwYXJpdHlbcnAzXSA8PCAzKSB8CisJICAgIChpbnZwYXJpdHlbcnAyXSA8PCAyKSB8CisJICAgIChpbnZwYXJpdHlbcnAxXSA8PCAxKSB8CisJICAgIChpbnZwYXJpdHlbcnAwXSk7CisJY29kZVswXSA9CisJICAgIChpbnZwYXJpdHlbcnAxNV0gPDwgNykgfAorCSAgICAoaW52cGFyaXR5W3JwMTRdIDw8IDYpIHwKKwkgICAgKGludnBhcml0eVtycDEzXSA8PCA1KSB8CisJICAgIChpbnZwYXJpdHlbcnAxMl0gPDwgNCkgfAorCSAgICAoaW52cGFyaXR5W3JwMTFdIDw8IDMpIHwKKwkgICAgKGludnBhcml0eVtycDEwXSA8PCAyKSB8CisJICAgIChpbnZwYXJpdHlbcnA5XSA8PCAxKSAgfAorCSAgICAoaW52cGFyaXR5W3JwOF0pOworI2VuZGlmCisJaWYgKGVjY3NpemVfbXVsdCA9PSAxKQorCQljb2RlWzJdID0KKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHhmMF0gPDwgNykgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweDBmXSA8PCA2KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4Y2NdIDw8IDUpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHgzM10gPDwgNCkgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweGFhXSA8PCAzKSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4NTVdIDw8IDIpIHwKKwkJICAgIDM7CisJZWxzZQorCQljb2RlWzJdID0KKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHhmMF0gPDwgNykgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweDBmXSA8PCA2KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4Y2NdIDw8IDUpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHgzM10gPDwgNCkgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweGFhXSA8PCAzKSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4NTVdIDw8IDIpIHwKKwkJICAgIChpbnZwYXJpdHlbcnAxN10gPDwgMSkgfAorCQkgICAgKGludnBhcml0eVtycDE2XSA8PCAwKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wobmFuZF9jYWxjdWxhdGVfZWNjKTsKIAotc3RhdGljIGlubGluZSBpbnQgY291bnRiaXRzKHVpbnQzMl90IGJ5dGUpCi17Ci0JaW50IHJlcyA9IDA7Ci0KLQlmb3IgKDtieXRlOyBieXRlID4+PSAxKQotCQlyZXMgKz0gYnl0ZSAmIDB4MDE7Ci0JcmV0dXJuIHJlczsKLX0KLQogLyoqCiAgKiBuYW5kX2NvcnJlY3RfZGF0YSAtIFtOQU5EIEludGVyZmFjZV0gRGV0ZWN0IGFuZCBjb3JyZWN0IGJpdCBlcnJvcihzKQogICogQG10ZDoJTVREIGJsb2NrIHN0cnVjdHVyZQotICogQGRhdDoJcmF3IGRhdGEgcmVhZCBmcm9tIHRoZSBjaGlwCisgKiBAYnVmOglyYXcgZGF0YSByZWFkIGZyb20gdGhlIGNoaXAKICAqIEByZWFkX2VjYzoJRUNDIGZyb20gdGhlIGNoaXAKICAqIEBjYWxjX2VjYzoJdGhlIEVDQyBjYWxjdWxhdGVkIGZyb20gcmF3IGRhdGEKICAqCi0gKiBEZXRlY3QgYW5kIGNvcnJlY3QgYSAxIGJpdCBlcnJvciBmb3IgMjU2IGJ5dGUgYmxvY2sKKyAqIERldGVjdCBhbmQgY29ycmVjdCBhIDEgYml0IGVycm9yIGZvciAyNTYvNTEyIGJ5dGUgYmxvY2sKICAqLwotaW50IG5hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwKLQkJICAgICAgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYykKK2ludCBuYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICpyZWFkX2VjYywgdW5zaWduZWQgY2hhciAqY2FsY19lY2MpCiB7Ci0JdWludDhfdCBzMCwgczEsIHMyOworCXVuc2lnbmVkIGNoYXIgYjAsIGIxLCBiMjsKKwl1bnNpZ25lZCBjaGFyIGJ5dGVfYWRkciwgYml0X2FkZHI7CisJLyogMjU2IG9yIDUxMiBieXRlcy9lY2MgICovCisJY29uc3QgdWludDMyX3QgZWNjc2l6ZV9tdWx0ID0KKwkJCSgoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5lY2Muc2l6ZSkgPj4gODsKIAorCS8qCisJICogYjAgdG8gYjIgaW5kaWNhdGUgd2hpY2ggYml0IGlzIGZhdWx0eSAoaWYgYW55KQorCSAqIHdlIG1pZ2h0IG5lZWQgdGhlIHhvciByZXN1bHQgIG1vcmUgdGhhbiBvbmNlLAorCSAqIHNvIGtlZXAgdGhlbSBpbiBhIGxvY2FsIHZhcgorCSovCiAjaWZkZWYgQ09ORklHX01URF9OQU5EX0VDQ19TTUMKLQlzMCA9IGNhbGNfZWNjWzBdIF4gcmVhZF9lY2NbMF07Ci0JczEgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNjWzFdOwotCXMyID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKKwliMCA9IHJlYWRfZWNjWzBdIF4gY2FsY19lY2NbMF07CisJYjEgPSByZWFkX2VjY1sxXSBeIGNhbGNfZWNjWzFdOwogI2Vsc2UKLQlzMSA9IGNhbGNfZWNjWzBdIF4gcmVhZF9lY2NbMF07Ci0JczAgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNjWzFdOwotCXMyID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKKwliMCA9IHJlYWRfZWNjWzFdIF4gY2FsY19lY2NbMV07CisJYjEgPSByZWFkX2VjY1swXSBeIGNhbGNfZWNjWzBdOwogI2VuZGlmCi0JaWYgKChzMCB8IHMxIHwgczIpID09IDApCi0JCXJldHVybiAwOworCWIyID0gcmVhZF9lY2NbMl0gXiBjYWxjX2VjY1syXTsKIAotCS8qIENoZWNrIGZvciBhIHNpbmdsZSBiaXQgZXJyb3IgKi8KLQlpZiggKChzMCBeIChzMCA+PiAxKSkgJiAweDU1KSA9PSAweDU1ICYmCi0JICAgICgoczEgXiAoczEgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSAmJgotCSAgICAoKHMyIF4gKHMyID4+IDEpKSAmIDB4NTQpID09IDB4NTQpIHsKKwkvKiBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGJpdGZhdWx0cyAqLwogCi0JCXVpbnQzMl90IGJ5dGVvZmZzLCBiaXRudW07CisJLyogcmVwZWF0ZWQgaWYgc3RhdGVtZW50cyBhcmUgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgdGhhbiBzd2l0Y2ggLi4uICovCisJLyogb3JkZXJlZCBpbiBvcmRlciBvZiBsaWtlbGlob29kICovCiAKLQkJYnl0ZW9mZnMgPSAoczEgPDwgMCkgJiAweDgwOwotCQlieXRlb2ZmcyB8PSAoczEgPDwgMSkgJiAweDQwOwotCQlieXRlb2ZmcyB8PSAoczEgPDwgMikgJiAweDIwOwotCQlieXRlb2ZmcyB8PSAoczEgPDwgMykgJiAweDEwOworCWlmICgoYjAgfCBiMSB8IGIyKSA9PSAwKQorCQlyZXR1cm4gMDsJLyogbm8gZXJyb3IgKi8KIAotCQlieXRlb2ZmcyB8PSAoczAgPj4gNCkgJiAweDA4OwotCQlieXRlb2ZmcyB8PSAoczAgPj4gMykgJiAweDA0OwotCQlieXRlb2ZmcyB8PSAoczAgPj4gMikgJiAweDAyOwotCQlieXRlb2ZmcyB8PSAoczAgPj4gMSkgJiAweDAxOwotCi0JCWJpdG51bSA9IChzMiA+PiA1KSAmIDB4MDQ7Ci0JCWJpdG51bSB8PSAoczIgPj4gNCkgJiAweDAyOwotCQliaXRudW0gfD0gKHMyID4+IDMpICYgMHgwMTsKLQotCQlkYXRbYnl0ZW9mZnNdIF49ICgxIDw8IGJpdG51bSk7Ci0KKwlpZiAoKCgoYjAgXiAoYjAgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSkgJiYKKwkgICAgKCgoYjEgXiAoYjEgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSkgJiYKKwkgICAgKChlY2NzaXplX211bHQgPT0gMSAmJiAoKGIyIF4gKGIyID4+IDEpKSAmIDB4NTQpID09IDB4NTQpIHx8CisJICAgICAoZWNjc2l6ZV9tdWx0ID09IDIgJiYgKChiMiBeIChiMiA+PiAxKSkgJiAweDU1KSA9PSAweDU1KSkpIHsKKwkvKiBzaW5nbGUgYml0IGVycm9yICovCisJCS8qCisJCSAqIHJwMTcvcnAxNS8xMy8xMS85LzcvNS8zLzEgaW5kaWNhdGUgd2hpY2ggYnl0ZSBpcyB0aGUgZmF1bHR5CisJCSAqIGJ5dGUsIGNwIDUvMy8xIGluZGljYXRlIHRoZSBmYXVsdHkgYml0LgorCQkgKiBBIGxvb2t1cCB0YWJsZSAoY2FsbGVkIGFkZHJlc3NiaXRzKSBpcyB1c2VkIHRvIGZpbHRlcgorCQkgKiB0aGUgYml0cyBmcm9tIHRoZSBieXRlIHRoZXkgYXJlIGluLgorCQkgKiBBIG1hcmdpbmFsIG9wdGltaXNhdGlvbiBpcyBwb3NzaWJsZSBieSBoYXZpbmcgdGhyZWUKKwkJICogZGlmZmVyZW50IGxvb2t1cCB0YWJsZXMuCisJCSAqIE9uZSBhcyB3ZSBoYXZlIG5vdyAoZm9yIGIwKSwgb25lIGZvciBiMgorCQkgKiAodGhhdCB3b3VsZCBhdm9pZCB0aGUgPj4gMSksIGFuZCBvbmUgZm9yIGIxICh3aXRoIGFsbCB2YWx1ZXMKKwkJICogPDwgNCkuIEhvd2V2ZXIgaXQgd2FzIGZlbHQgdGhhdCBpbnRyb2R1Y2luZyB0d28gbW9yZSB0YWJsZXMKKwkJICogaGFyZGx5IGp1c3RpZnkgdGhlIGdhaW4uCisJCSAqCisJCSAqIFRoZSBiMiBzaGlmdCBpcyB0aGVyZSB0byBnZXQgcmlkIG9mIHRoZSBsb3dlc3QgdHdvIGJpdHMuCisJCSAqIFdlIGNvdWxkIGFsc28gZG8gYWRkcmVzc2JpdHNbYjJdID4+IDEgYnV0IGZvciB0aGUKKwkJICogcGVyZm9ybWFjZSBpdCBkb2VzIG5vdCBtYWtlIGFueSBkaWZmZXJlbmNlCisJCSAqLworCQlpZiAoZWNjc2l6ZV9tdWx0ID09IDEpCisJCQlieXRlX2FkZHIgPSAoYWRkcmVzc2JpdHNbYjFdIDw8IDQpICsgYWRkcmVzc2JpdHNbYjBdOworCQllbHNlCisJCQlieXRlX2FkZHIgPSAoYWRkcmVzc2JpdHNbYjIgJiAweDNdIDw8IDgpICsKKwkJCQkgICAgKGFkZHJlc3NiaXRzW2IxXSA8PCA0KSArIGFkZHJlc3NiaXRzW2IwXTsKKwkJYml0X2FkZHIgPSBhZGRyZXNzYml0c1tiMiA+PiAyXTsKKwkJLyogZmxpcCB0aGUgYml0ICovCisJCWJ1ZltieXRlX2FkZHJdIF49ICgxIDw8IGJpdF9hZGRyKTsKIAkJcmV0dXJuIDE7CisKIAl9CisJLyogY291bnQgbnIgb2YgYml0czsgdXNlIHRhYmxlIGxvb2t1cCwgZmFzdGVyIHRoYW4gY2FsY3VsYXRpbmcgaXQgKi8KKwlpZiAoKGJpdHNwZXJieXRlW2IwXSArIGJpdHNwZXJieXRlW2IxXSArIGJpdHNwZXJieXRlW2IyXSkgPT0gMSkKKwkJcmV0dXJuIDE7CS8qIGVycm9yIGluIGVjYyBkYXRhOyBubyBhY3Rpb24gbmVlZGVkICovCiAKLQlpZihjb3VudGJpdHMoczAgfCAoKHVpbnQzMl90KXMxIDw8IDgpIHwgKCh1aW50MzJfdClzMiA8PDE2KSkgPT0gMSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gLUVCQURNU0c7CisJcHJpbnRrKEtFUk5fRVJSICJ1bmNvcnJlY3RhYmxlIGVycm9yIDogIik7CisJcmV0dXJuIC0xOwogfQogRVhQT1JUX1NZTUJPTChuYW5kX2NvcnJlY3RfZGF0YSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiRnJhbnMgTWV1bGVuYnJvZWtzIDxmcmFuc21ldWxlbmJyb2Vrc0BnbWFpbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgTkFORCBFQ0Mgc3VwcG9ydCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYwppbmRleCA1NTZlODEzLi5hZTdjNTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAvKiBEZWZhdWx0IHNpbXVsYXRvciBwYXJhbWV0ZXJzIHZhbHVlcyAqLwogI2lmICFkZWZpbmVkKENPTkZJR19OQU5EU0lNX0ZJUlNUX0lEX0JZVEUpICB8fCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMKaW5kZXggYTY0YWQxNS4uYzBmYTljOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYwpAQCAtMTE1LDU1ICsxMTUsMTEgQEAKIAlTVEFURV9QSU9fV1JJVElORywKIH07CiAKLXN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgewotCXVuc2lnbmVkIGludAl0Q0g7ICAvKiBFbmFibGUgc2lnbmFsIGhvbGQgdGltZSAqLwotCXVuc2lnbmVkIGludAl0Q1M7ICAvKiBFbmFibGUgc2lnbmFsIHNldHVwIHRpbWUgKi8KLQl1bnNpZ25lZCBpbnQJdFdIOyAgLyogTkRfbldFIGhpZ2ggZHVyYXRpb24gKi8KLQl1bnNpZ25lZCBpbnQJdFdQOyAgLyogTkRfbldFIHB1bHNlIHRpbWUgKi8KLQl1bnNpZ25lZCBpbnQJdFJIOyAgLyogTkRfblJFIGhpZ2ggZHVyYXRpb24gKi8KLQl1bnNpZ25lZCBpbnQJdFJQOyAgLyogTkRfblJFIHB1bHNlIHdpZHRoICovCi0JdW5zaWduZWQgaW50CXRSOyAgIC8qIE5EX25XRSBoaWdoIHRvIE5EX25SRSBsb3cgZm9yIHJlYWQgKi8KLQl1bnNpZ25lZCBpbnQJdFdIUjsgLyogTkRfbldFIGhpZ2ggdG8gTkRfblJFIGxvdyBmb3Igc3RhdHVzIHJlYWQgKi8KLQl1bnNpZ25lZCBpbnQJdEFSOyAgLyogTkRfQUxFIGxvdyB0byBORF9uUkUgbG93IGRlbGF5ICovCi19OwotCi1zdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0IHsKLQl1aW50MTZfdAlyZWFkMTsKLQl1aW50MTZfdAlyZWFkMjsKLQl1aW50MTZfdAlwcm9ncmFtOwotCXVpbnQxNl90CXJlYWRfc3RhdHVzOwotCXVpbnQxNl90CXJlYWRfaWQ7Ci0JdWludDE2X3QJZXJhc2U7Ci0JdWludDE2X3QJcmVzZXQ7Ci0JdWludDE2X3QJbG9jazsKLQl1aW50MTZfdAl1bmxvY2s7Ci0JdWludDE2X3QJbG9ja19zdGF0dXM7Ci19OwotCi1zdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggewotCXN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgKnRpbWluZzsgLyogTkFORCBGbGFzaCB0aW1pbmcgKi8KLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQ7Ci0KLQl1aW50MzJfdCBwYWdlX3Blcl9ibG9jazsvKiBQYWdlcyBwZXIgYmxvY2sgKFBHX1BFUl9CTEspICovCi0JdWludDMyX3QgcGFnZV9zaXplOwkvKiBQYWdlIHNpemUgaW4gYnl0ZXMgKFBBR0VfU1opICovCi0JdWludDMyX3QgZmxhc2hfd2lkdGg7CS8qIFdpZHRoIG9mIEZsYXNoIG1lbW9yeSAoRFdJRFRIX00pICovCi0JdWludDMyX3QgZGZjX3dpZHRoOwkvKiBXaWR0aCBvZiBmbGFzaCBjb250cm9sbGVyKERXSURUSF9DKSAqLwotCXVpbnQzMl90IG51bV9ibG9ja3M7CS8qIE51bWJlciBvZiBwaHlzaWNhbCBibG9ja3MgaW4gRmxhc2ggKi8KLQl1aW50MzJfdCBjaGlwX2lkOwotCi0JLyogTk9URTogdGhlc2UgYXJlIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCwgZG8gbm90IGRlZmluZSAqLwotCXNpemVfdAkJb29iX3NpemU7Ci0Jc2l6ZV90CQlyZWFkX2lkX2J5dGVzOwotCi0JdW5zaWduZWQgaW50CWNvbF9hZGRyX2N5Y2xlczsKLQl1bnNpZ25lZCBpbnQJcm93X2FkZHJfY3ljbGVzOwotfTsKLQogc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gewogCXN0cnVjdCBuYW5kX2NoaXAJbmFuZF9jaGlwOwogCiAJc3RydWN0IHBsYXRmb3JtX2RldmljZQkgKnBkZXY7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmbGFzaF9pbmZvOworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZmxhc2hfaW5mbzsKIAogCXN0cnVjdCBjbGsJCSpjbGs7CiAJdm9pZCBfX2lvbWVtCQkqbW1pb19iYXNlOwpAQCAtMjAyLDEyICsxNTgsMjAgQEAKIAl1aW50MzJfdAkJbmRjYjA7CiAJdWludDMyX3QJCW5kY2IxOwogCXVpbnQzMl90CQluZGNiMjsKKworCS8qIGNhbGN1bGF0ZWQgZnJvbSBweGEzeHhfbmFuZF9mbGFzaCBkYXRhICovCisJc2l6ZV90CQlvb2Jfc2l6ZTsKKwlzaXplX3QJCXJlYWRfaWRfYnl0ZXM7CisKKwl1bnNpZ25lZCBpbnQJY29sX2FkZHJfY3ljbGVzOworCXVuc2lnbmVkIGludAlyb3dfYWRkcl9jeWNsZXM7CiB9OwogCiBzdGF0aWMgaW50IHVzZV9kbWEgPSAxOwogbW9kdWxlX3BhcmFtKHVzZV9kbWEsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh1c2VfZG1hLCAiZW5hYmxlIERNQSBmb3IgZGF0YSB0cmFuc2ZlcmluZyB0by9mcm9tIE5BTkQgSFciKTsKIAorI2lmZGVmIENPTkZJR19NVERfTkFORF9QWEEzeHhfQlVJTFRJTgogc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgc21hbGxwYWdlX2NtZHNldCA9IHsKIAkucmVhZDEJCT0gMHgwMDAwLAogCS5yZWFkMgkJPSAweDAwNTAsCkBAIC0yOTEsMTEgKzI1NSwzNSBAQAogCS5jaGlwX2lkCT0gMHhiMTJjLAogfTsKIAorc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgc3RtMkdiWDE2X3RpbWluZyA9IHsKKwkudENIID0gMTAsCisJLnRDUyA9IDM1LAorCS50V0ggPSAxNSwKKwkudFdQID0gMjUsCisJLnRSSCA9IDE1LAorCS50UlAgPSAyNSwKKwkudFIgPSAyNTAwMCwKKwkudFdIUiA9IDYwLAorCS50QVIgPSAxMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggc3RtMkdiWDE2ID0geworCS50aW1pbmcgPSAmc3RtMkdiWDE2X3RpbWluZywKKwkucGFnZV9wZXJfYmxvY2sgPSA2NCwKKwkucGFnZV9zaXplID0gMjA0OCwKKwkuZmxhc2hfd2lkdGggPSAxNiwKKwkuZGZjX3dpZHRoID0gMTYsCisJLm51bV9ibG9ja3MgPSAyMDQ4LAorCS5jaGlwX2lkID0gMHhiYTIwLAorfTsKKwogc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqYnVpbHRpbl9mbGFzaF90eXBlc1tdID0gewogCSZzYW1zdW5nNTEyTWJYMTYsCiAJJm1pY3JvbjFHYlg4LAogCSZtaWNyb24xR2JYMTYsCisJJnN0bTJHYlgxNiwKIH07CisjZW5kaWYgLyogQ09ORklHX01URF9OQU5EX1BYQTN4eF9CVUlMVElOICovCiAKICNkZWZpbmUgTkRUUjBfdENIKGMpCShtaW4oKGMpLCA3KSA8PCAxOSkKICNkZWZpbmUgTkRUUjBfdENTKGMpCShtaW4oKGMpLCA3KSA8PCAxNikKQEAgLTMxMiw3ICszMDAsNyBAQAogI2RlZmluZSBuczJjeWNsZShucywgY2xrKQkoaW50KSgoKG5zKSAqIChjbGsgLyAxMDAwMDAwKSAvIDEwMDApICsgMSkKIAogc3RhdGljIHZvaWQgcHhhM3h4X25hbmRfc2V0X3RpbWluZyhzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbywKLQkJCQkgICBzdHJ1Y3QgcHhhM3h4X25hbmRfdGltaW5nICp0KQorCQkJCSAgIGNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgKnQpCiB7CiAJdW5zaWduZWQgbG9uZyBuYW5kX2NsayA9IGNsa19nZXRfcmF0ZShpbmZvLT5jbGspOwogCXVpbnQzMl90IG5kdHIwLCBuZHRyMTsKQEAgLTM1NCw4ICszNDIsOCBAQAogc3RhdGljIGludCBwcmVwYXJlX3JlYWRfcHJvZ19jbWQoc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8sCiAJCQl1aW50MTZfdCBjbWQsIGludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCiB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmLT5jbWRzZXQ7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmLT5jbWRzZXQ7CiAKIAkvKiBjYWxjdWxhdGUgZGF0YSBzaXplICovCiAJc3dpdGNoIChmLT5wYWdlX3NpemUpIHsKQEAgLTM3MywxNCArMzYxLDE0IEBACiAJaW5mby0+bmRjYjAgPSBjbWQgfCAoKGNtZCAmIDB4ZmYwMCkgPyBORENCMF9EQkMgOiAwKTsKIAlpbmZvLT5uZGNiMSA9IDA7CiAJaW5mby0+bmRjYjIgPSAwOwotCWluZm8tPm5kY2IwIHw9IE5EQ0IwX0FERFJfQ1lDKGYtPnJvd19hZGRyX2N5Y2xlcyArIGYtPmNvbF9hZGRyX2N5Y2xlcyk7CisJaW5mby0+bmRjYjAgfD0gTkRDQjBfQUREUl9DWUMoaW5mby0+cm93X2FkZHJfY3ljbGVzICsgaW5mby0+Y29sX2FkZHJfY3ljbGVzKTsKIAotCWlmIChmLT5jb2xfYWRkcl9jeWNsZXMgPT0gMikgeworCWlmIChpbmZvLT5jb2xfYWRkcl9jeWNsZXMgPT0gMikgewogCQkvKiBsYXJnZSBibG9jaywgMiBjeWNsZXMgZm9yIGNvbHVtbiBhZGRyZXNzCiAJCSAqIHJvdyBhZGRyZXNzIHN0YXJ0cyBmcm9tIDNyZCBjeWNsZQogCQkgKi8KIAkJaW5mby0+bmRjYjEgfD0gKHBhZ2VfYWRkciA8PCAxNikgfCAoY29sdW1uICYgMHhmZmZmKTsKLQkJaWYgKGYtPnJvd19hZGRyX2N5Y2xlcyA9PSAzKQorCQlpZiAoaW5mby0+cm93X2FkZHJfY3ljbGVzID09IDMpCiAJCQlpbmZvLT5uZGNiMiA9IChwYWdlX2FkZHIgPj4gMTYpICYgMHhmZjsKIAl9IGVsc2UKIAkJLyogc21hbGwgYmxvY2ssIDEgY3ljbGVzIGZvciBjb2x1bW4gYWRkcmVzcwpAQCAtNDA2LDcgKzM5NCw3IEBACiAKIHN0YXRpYyBpbnQgcHJlcGFyZV9vdGhlcl9jbWQoc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8sIHVpbnQxNl90IGNtZCkKIHsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBpbmZvLT5mbGFzaF9pbmZvLT5jbWRzZXQ7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2NtZHNldCAqY21kc2V0ID0gaW5mby0+Zmxhc2hfaW5mby0+Y21kc2V0OwogCiAJaW5mby0+bmRjYjAgPSBjbWQgfCAoKGNtZCAmIDB4ZmYwMCkgPyBORENCMF9EQkMgOiAwKTsKIAlpbmZvLT5uZGNiMSA9IDA7CkBAIC02NDEsOCArNjI5LDggQEAKIAkJCQlpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQogewogCXN0cnVjdCBweGEzeHhfbmFuZF9pbmZvICppbmZvID0gbXRkLT5wcml2OwotCXN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZmxhc2hfaW5mbyA9IGluZm8tPmZsYXNoX2luZm87Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2NtZHNldCAqY21kc2V0ID0gZmxhc2hfaW5mby0+Y21kc2V0OworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZmxhc2hfaW5mbyA9IGluZm8tPmZsYXNoX2luZm87CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2NtZHNldCAqY21kc2V0ID0gZmxhc2hfaW5mby0+Y21kc2V0OwogCWludCByZXQ7CiAKIAlpbmZvLT51c2VfZG1hID0gKHVzZV9kbWEpID8gMSA6IDA7CkBAIC03MjAsNyArNzA4LDcgQEAKIAkJaW5mby0+dXNlX2RtYSA9IDA7CS8qIGZvcmNlIFBJTyByZWFkICovCiAJCWluZm8tPmJ1Zl9zdGFydCA9IDA7CiAJCWluZm8tPmJ1Zl9jb3VudCA9IChjb21tYW5kID09IE5BTkRfQ01EX1JFQURJRCkgPwotCQkJCWZsYXNoX2luZm8tPnJlYWRfaWRfYnl0ZXMgOiAxOworCQkJCWluZm8tPnJlYWRfaWRfYnl0ZXMgOiAxOwogCiAJCWlmIChwcmVwYXJlX290aGVyX2NtZChpbmZvLCAoY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFESUQpID8KIAkJCQljbWRzZXQtPnJlYWRfaWQgOiBjbWRzZXQtPnJlYWRfc3RhdHVzKSkKQEAgLTg2MSw4ICs4NDksOCBAQAogCiBzdGF0aWMgaW50IF9fcmVhZGlkKHN0cnVjdCBweGEzeHhfbmFuZF9pbmZvICppbmZvLCB1aW50MzJfdCAqaWQpCiB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmLT5jbWRzZXQ7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmLT5jbWRzZXQ7CiAJdWludDMyX3QgbmRjcjsKIAl1aW50OF90ICBpZF9idWZmWzhdOwogCkBAIC04OTEsNyArODc5LDcgQEAKIH0KIAogc3RhdGljIGludCBweGEzeHhfbmFuZF9jb25maWdfZmxhc2goc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8sCi0JCQkJICAgIHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZikKKwkJCQkgICAgY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBpbmZvLT5wZGV2OwogCXN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwpAQCAtOTA0LDI1ICs4OTIsMjUgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBjYWxjdWxhdGUgZmxhc2ggaW5mb3JtYXRpb24gKi8KLQlmLT5vb2Jfc2l6ZSA9IChmLT5wYWdlX3NpemUgPT0gMjA0OCkgPyA2NCA6IDE2OwotCWYtPnJlYWRfaWRfYnl0ZXMgPSAoZi0+cGFnZV9zaXplID09IDIwNDgpID8gNCA6IDI7CisJaW5mby0+b29iX3NpemUgPSAoZi0+cGFnZV9zaXplID09IDIwNDgpID8gNjQgOiAxNjsKKwlpbmZvLT5yZWFkX2lkX2J5dGVzID0gKGYtPnBhZ2Vfc2l6ZSA9PSAyMDQ4KSA/IDQgOiAyOwogCiAJLyogY2FsY3VsYXRlIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24gKi8KLQlmLT5jb2xfYWRkcl9jeWNsZXMgPSAoZi0+cGFnZV9zaXplID09IDIwNDgpID8gMiA6IDE7CisJaW5mby0+Y29sX2FkZHJfY3ljbGVzID0gKGYtPnBhZ2Vfc2l6ZSA9PSAyMDQ4KSA/IDIgOiAxOwogCiAJaWYgKGYtPm51bV9ibG9ja3MgKiBmLT5wYWdlX3Blcl9ibG9jayA+IDY1NTM2KQotCQlmLT5yb3dfYWRkcl9jeWNsZXMgPSAzOworCQlpbmZvLT5yb3dfYWRkcl9jeWNsZXMgPSAzOwogCWVsc2UKLQkJZi0+cm93X2FkZHJfY3ljbGVzID0gMjsKKwkJaW5mby0+cm93X2FkZHJfY3ljbGVzID0gMjsKIAogCW5kY3IgfD0gKHBkYXRhLT5lbmFibGVfYXJiaXRlcikgPyBORENSX05EX0FSQl9FTiA6IDA7Ci0JbmRjciB8PSAoZi0+Y29sX2FkZHJfY3ljbGVzID09IDIpID8gTkRDUl9SQV9TVEFSVCA6IDA7CisJbmRjciB8PSAoaW5mby0+Y29sX2FkZHJfY3ljbGVzID09IDIpID8gTkRDUl9SQV9TVEFSVCA6IDA7CiAJbmRjciB8PSAoZi0+cGFnZV9wZXJfYmxvY2sgPT0gNjQpID8gTkRDUl9QR19QRVJfQkxLIDogMDsKIAluZGNyIHw9IChmLT5wYWdlX3NpemUgPT0gMjA0OCkgPyBORENSX1BBR0VfU1ogOiAwOwogCW5kY3IgfD0gKGYtPmZsYXNoX3dpZHRoID09IDE2KSA/IE5EQ1JfRFdJRFRIX00gOiAwOwogCW5kY3IgfD0gKGYtPmRmY193aWR0aCA9PSAxNikgPyBORENSX0RXSURUSF9DIDogMDsKIAotCW5kY3IgfD0gTkRDUl9SRF9JRF9DTlQoZi0+cmVhZF9pZF9ieXRlcyk7CisJbmRjciB8PSBORENSX1JEX0lEX0NOVChpbmZvLT5yZWFkX2lkX2J5dGVzKTsKIAluZGNyIHw9IE5EQ1JfU1BBUkVfRU47IC8qIGVuYWJsZSBzcGFyZSBieSBkZWZhdWx0ICovCiAKIAlpbmZvLT5yZWdfbmRjciA9IG5kY3I7CkBAIC05MzIsMTIgKzkyMCwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YTN4eF9uYW5kX2RldGVjdF9mbGFzaChzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgcHhhM3h4X25hbmRfZGV0ZWN0X2ZsYXNoKHN0cnVjdCBweGEzeHhfbmFuZF9pbmZvICppbmZvLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmOwotCXVpbnQzMl90IGlkOworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZjsKKwl1aW50MzJfdCBpZCA9IC0xOwogCWludCBpOwogCisJZm9yIChpID0gMDsgaTxwZGF0YS0+bnVtX2ZsYXNoOyArK2kpIHsKKwkJZiA9IHBkYXRhLT5mbGFzaCArIGk7CisKKwkJaWYgKHB4YTN4eF9uYW5kX2NvbmZpZ19mbGFzaChpbmZvLCBmKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChfX3JlYWRpZChpbmZvLCAmaWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKGlkID09IGYtPmNoaXBfaWQpCisJCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBDT05GSUdfTVREX05BTkRfUFhBM3h4X0JVSUxUSU4KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWlsdGluX2ZsYXNoX3R5cGVzKTsgaSsrKSB7CiAKIAkJZiA9IGJ1aWx0aW5fZmxhc2hfdHlwZXNbaV07CkBAIC05NTEsNyArOTU0LDExIEBACiAJCWlmIChpZCA9PSBmLT5jaGlwX2lkKQogCQkJcmV0dXJuIDA7CiAJfQorI2VuZGlmCiAKKwlkZXZfd2FybigmaW5mby0+cGRldi0+ZGV2LAorCQkgImZhaWxlZCB0byBkZXRlY3QgY29uZmlndXJlZCBuYW5kIGZsYXNoOyBmb3VuZCAlMDR4IGluc3RlYWQgb2ZcbiIsCisJCSBpZCk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKQEAgLTEwMTQsNyArMTAyMSw3IEBACiBzdGF0aWMgdm9pZCBweGEzeHhfbmFuZF9pbml0X210ZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKIAkJCQkgc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmID0gaW5mby0+Zmxhc2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYgPSBpbmZvLT5mbGFzaF9pbmZvOwogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAmaW5mby0+bmFuZF9jaGlwOwogCiAJdGhpcy0+b3B0aW9ucyA9IChmLT5mbGFzaF93aWR0aCA9PSAxNikgPyBOQU5EX0JVU1dJRFRIXzE2OiAwOwpAQCAtMTEzNSw3ICsxMTQyLDcgQEAKIAkJZ290byBmYWlsX2ZyZWVfYnVmOwogCX0KIAotCXJldCA9IHB4YTN4eF9uYW5kX2RldGVjdF9mbGFzaChpbmZvKTsKKwlyZXQgPSBweGEzeHhfbmFuZF9kZXRlY3RfZmxhc2goaW5mbywgcGRhdGEpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGRldGVjdCBmbGFzaFxuIik7CiAJCXJldCA9IC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMgYi9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIxYWNiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYwpAQCAtMCwwICsxLDg3OCBAQAorLyoKKyAqIFN1cGVySCBGTENUTCBuYW5kIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ29weXJpZ2h0IMKpIDIwMDggQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCisgKgorICogQmFzZWQgb24gZnNsX2VsYmNfbmFuZC5jLCBDb3B5cmlnaHQgwqkgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9zaF9mbGN0bC5oPgorCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGZsY3RsXzRzZWNjX29vYl8xNiA9IHsKKwkuZWNjYnl0ZXMgPSAxMCwKKwkuZWNjcG9zID0gezAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDl9LAorCS5vb2JmcmVlID0geworCQl7Lm9mZnNldCA9IDEyLAorCQkuIGxlbmd0aCA9IDR9IH0sCit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGZsY3RsXzRzZWNjX29vYl82NCA9IHsKKwkuZWNjYnl0ZXMgPSAxMCwKKwkuZWNjcG9zID0gezQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3fSwKKwkub29iZnJlZSA9IHsKKwkJey5vZmZzZXQgPSA2MCwKKwkJLiBsZW5ndGggPSA0fSB9LAorfTsKKworc3RhdGljIHVpbnQ4X3Qgc2Nhbl9mZl9wYXR0ZXJuW10gPSB7IDB4ZmYsIDB4ZmYgfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBmbGN0bF80c2VjY19zbWFsbHBhZ2UgPSB7CisJLm9wdGlvbnMgPSBOQU5EX0JCVF9TQ0FOMk5EUEFHRSwKKwkub2ZmcyA9IDExLAorCS5sZW4gPSAxLAorCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuLAorfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBmbGN0bF80c2VjY19sYXJnZXBhZ2UgPSB7CisJLm9wdGlvbnMgPSAwLAorCS5vZmZzID0gNTgsCisJLmxlbiA9IDIsCisJLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4sCit9OworCitzdGF0aWMgdm9pZCBlbXB0eV9maWZvKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJd3JpdGVsKDB4MDAwYzAwMDAsIEZMSU5URE1BQ1IoZmxjdGwpKTsJLyogRklGTyBDbGVhciAqLworCXdyaXRlbCgweDAwMDAwMDAwLCBGTElOVERNQUNSKGZsY3RsKSk7CS8qIENsZWFyIEVycm9yIGZsYWdzICovCit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X3RyYW5zbGF0aW9uKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJd3JpdGViKFRSU1RSVCwgRkxUUkNSKGZsY3RsKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfY29tcGxldGlvbihzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQoreworCXVpbnQzMl90IHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQlpZiAocmVhZGIoRkxUUkNSKGZsY3RsKSkgJiBUUkVORCkgeworCQkJd3JpdGViKDB4MCwgRkxUUkNSKGZsY3RsKSk7CisJCQlyZXR1cm47CisJCX0KKwkJdWRlbGF5KDEpOworCX0KKworCXByaW50ayhLRVJOX0VSUiAid2FpdF9jb21wbGV0aW9uKCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXdyaXRlYigweDAsIEZMVFJDUihmbGN0bCkpOworfQorCitzdGF0aWMgdm9pZCBzZXRfYWRkcihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJdWludDMyX3QgYWRkciA9IDA7CisKKwlpZiAoY29sdW1uID09IC0xKSB7CisJCWFkZHIgPSBwYWdlX2FkZHI7CS8qIEVSQVNFMSAqLworCX0gZWxzZSBpZiAocGFnZV9hZGRyICE9IC0xKSB7CisJCS8qIFNFUUlOLCBSRUFEMCwgZXRjLi4gKi8KKwkJaWYgKGZsY3RsLT5wYWdlX3NpemUpIHsKKwkJCWFkZHIgPSBjb2x1bW4gJiAweDBGRkY7CisJCQlhZGRyIHw9IChwYWdlX2FkZHIgJiAweGZmKSA8PCAxNjsKKwkJCWFkZHIgfD0gKChwYWdlX2FkZHIgPj4gOCkgJiAweGZmKSA8PCAyNDsKKwkJCS8qIGJpZyB0aGFuIDEyOE1CICovCisJCQlpZiAoZmxjdGwtPnJ3X0FEUkNOVCA9PSBBRFJDTlQyX0UpIHsKKwkJCQl1aW50MzJfdCAJYWRkcjI7CisJCQkJYWRkcjIgPSAocGFnZV9hZGRyID4+IDE2KSAmIDB4ZmY7CisJCQkJd3JpdGVsKGFkZHIyLCBGTEFEUjIoZmxjdGwpKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWFkZHIgPSBjb2x1bW47CisJCQlhZGRyIHw9IChwYWdlX2FkZHIgJiAweGZmKSA8PCA4OworCQkJYWRkciB8PSAoKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYpIDw8IDE2OworCQkJYWRkciB8PSAoKHBhZ2VfYWRkciA+PiAxNikgJiAweGZmKSA8PCAyNDsKKwkJfQorCX0KKwl3cml0ZWwoYWRkciwgRkxBRFIoZmxjdGwpKTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9yZmlmb19yZWFkeShzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQoreworCXVpbnQzMl90IHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQl1aW50MzJfdCB2YWw7CisJCS8qIGNoZWNrIEZJRk8gKi8KKwkJdmFsID0gcmVhZGwoRkxEVENOVFIoZmxjdGwpKSA+PiAxNjsKKwkJaWYgKHZhbCAmIDB4RkYpCisJCQlyZXR1cm47CisJCXVkZWxheSgxKTsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3JmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X3dmaWZvX3JlYWR5KHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJdWludDMyX3QgbGVuLCB0aW1lb3V0ID0gTE9PUF9USU1FT1VUX01BWDsKKworCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJLyogY2hlY2sgRklGTyAqLworCQlsZW4gPSAocmVhZGwoRkxEVENOVFIoZmxjdGwpKSA+PiAxNikgJiAweEZGOworCQlpZiAobGVuID49IDQpCisJCQlyZXR1cm47CisJCXVkZWxheSgxKTsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3dmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworfQorCitzdGF0aWMgaW50IHdhaXRfcmVjZmlmb19yZWFkeShzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQoreworCXVpbnQzMl90IHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCWludCBjaGVja2VkWzRdOworCXZvaWQgX19pb21lbSAqZWNjX3JlZ1s0XTsKKwlpbnQgaTsKKwl1aW50MzJfdCBkYXRhLCBzaXplOworCisJbWVtc2V0KGNoZWNrZWQsIDAsIHNpemVvZihjaGVja2VkKSk7CisKKwl3aGlsZSAodGltZW91dC0tKSB7CisJCXNpemUgPSByZWFkbChGTERUQ05UUihmbGN0bCkpID4+IDI0OworCQlpZiAoc2l6ZSAmIDB4RkYpCisJCQlyZXR1cm4gMDsJLyogc3VjY2VzcyAqLworCisJCWlmIChyZWFkbChGTDRFQ0NDUihmbGN0bCkpICYgXzRFQ0NGQSkKKwkJCXJldHVybiAxOwkvKiBjYW4ndCBjb3JyZWN0ICovCisKKwkJdWRlbGF5KDEpOworCQlpZiAoIShyZWFkbChGTDRFQ0NDUihmbGN0bCkpICYgXzRFQ0NFTkQpKQorCQkJY29udGludWU7CisKKwkJLyogc3RhcnQgZXJyb3IgY29ycmVjdGlvbiAqLworCQllY2NfcmVnWzBdID0gRkw0RUNDUkVTVUxUMChmbGN0bCk7CisJCWVjY19yZWdbMV0gPSBGTDRFQ0NSRVNVTFQxKGZsY3RsKTsKKwkJZWNjX3JlZ1syXSA9IEZMNEVDQ1JFU1VMVDIoZmxjdGwpOworCQllY2NfcmVnWzNdID0gRkw0RUNDUkVTVUxUMyhmbGN0bCk7CisKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJZGF0YSA9IHJlYWRsKGVjY19yZWdbaV0pOworCQkJaWYgKGRhdGEgIT0gSU5JVF9GTDRFQ0NSRVNVTFRfVkFMICYmICFjaGVja2VkW2ldKSB7CisJCQkJdWludDhfdCBvcmc7CisJCQkJaW50IGluZGV4OworCisJCQkJaW5kZXggPSBkYXRhID4+IDE2OworCQkJCW9yZyA9IGZsY3RsLT5kb25lX2J1ZmZbaW5kZXhdOworCQkJCWZsY3RsLT5kb25lX2J1ZmZbaW5kZXhdID0gb3JnIF4gKGRhdGEgJiAweEZGKTsKKwkJCQljaGVja2VkW2ldID0gMTsKKwkJCX0KKwkJfQorCisJCXdyaXRlbCgwLCBGTDRFQ0NDUihmbGN0bCkpOworCX0KKworCXByaW50ayhLRVJOX0VSUiAid2FpdF9yZWNmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworCXJldHVybiAxOwkvKiB0aW1lb3V0ICovCit9CisKK3N0YXRpYyB2b2lkIHdhaXRfd2VjZmlmb19yZWFkeShzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQoreworCXVpbnQzMl90IHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCXVpbnQzMl90IGxlbjsKKworCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJLyogY2hlY2sgRkxFQ0ZJRk8gKi8KKwkJbGVuID0gKHJlYWRsKEZMRFRDTlRSKGZsY3RsKSkgPj4gMjQpICYgMHhGRjsKKwkJaWYgKGxlbiA+PSA0KQorCQkJcmV0dXJuOworCQl1ZGVsYXkoMSk7CisJfQorCXByaW50ayhLRVJOX0VSUiAid2FpdF93ZWNmaWZvX3JlYWR5KCk6IFRpbWVvdXQgb2NjdXJlZCBcbiIpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2RhdGFyZWcoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgaW50IG9mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGE7CisJdW5zaWduZWQgbG9uZyAqYnVmID0gKHVuc2lnbmVkIGxvbmcgKikmZmxjdGwtPmRvbmVfYnVmZltvZmZzZXRdOworCisJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKworCWRhdGEgPSByZWFkbChGTERBVEFSKGZsY3RsKSk7CisJKmJ1ZiA9IGxlMzJfdG9fY3B1KGRhdGEpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2ZpZm9yZWcoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgaW50IHJsZW4sIGludCBvZmZzZXQpCit7CisJaW50IGksIGxlbl80YWxpZ247CisJdW5zaWduZWQgbG9uZyAqYnVmID0gKHVuc2lnbmVkIGxvbmcgKikmZmxjdGwtPmRvbmVfYnVmZltvZmZzZXRdOworCXZvaWQgKmZpZm9fYWRkciA9ICh2b2lkICopRkxEVEZJRk8oZmxjdGwpOworCisJbGVuXzRhbGlnbiA9IChybGVuICsgMykgLyA0OworCisJZm9yIChpID0gMDsgaSA8IGxlbl80YWxpZ247IGkrKykgeworCQl3YWl0X3JmaWZvX3JlYWR5KGZsY3RsKTsKKwkJYnVmW2ldID0gcmVhZGwoZmlmb19hZGRyKTsKKwkJYnVmW2ldID0gYmUzMl90b19jcHUoYnVmW2ldKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9lY2ZpZm9yZWcoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgdWludDhfdCAqYnVmZikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nICplY2NfYnVmID0gKHVuc2lnbmVkIGxvbmcgKilidWZmOworCXZvaWQgKmZpZm9fYWRkciA9ICh2b2lkICopRkxFQ0ZJRk8oZmxjdGwpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAod2FpdF9yZWNmaWZvX3JlYWR5KGZsY3RsKSkKKwkJCXJldHVybiAxOworCQllY2NfYnVmW2ldID0gcmVhZGwoZmlmb19hZGRyKTsKKwkJZWNjX2J1ZltpXSA9IGJlMzJfdG9fY3B1KGVjY19idWZbaV0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9maWZvcmVnKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwsIGludCBybGVuLCBpbnQgb2Zmc2V0KQoreworCWludCBpLCBsZW5fNGFsaWduOworCXVuc2lnbmVkIGxvbmcgKmRhdGEgPSAodW5zaWduZWQgbG9uZyAqKSZmbGN0bC0+ZG9uZV9idWZmW29mZnNldF07CisJdm9pZCAqZmlmb19hZGRyID0gKHZvaWQgKilGTERURklGTyhmbGN0bCk7CisKKwlsZW5fNGFsaWduID0gKHJsZW4gKyAzKSAvIDQ7CisJZm9yIChpID0gMDsgaSA8IGxlbl80YWxpZ247IGkrKykgeworCQl3YWl0X3dmaWZvX3JlYWR5KGZsY3RsKTsKKwkJd3JpdGVsKGNwdV90b19iZTMyKGRhdGFbaV0pLCBmaWZvX2FkZHIpOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0X2NtZF9yZWdzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50MzJfdCBjbWQsIHVpbnQzMl90IGZsY21jZHJfdmFsKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwl1aW50MzJfdCBmbGNtbmNyX3ZhbCA9IHJlYWRsKEZMQ01OQ1IoZmxjdGwpKTsKKwl1aW50MzJfdCBmbGNtZGNyX3ZhbCwgYWRkcl9sZW5fYnl0ZXMgPSAwOworCisJLyogU2V0IFNOQU5EIGJpdCBpZiBwYWdlIHNpemUgaXMgMjA0OGJ5dGUgKi8KKwlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkKKwkJZmxjbW5jcl92YWwgfD0gU05BTkRfRTsKKwllbHNlCisJCWZsY21uY3JfdmFsICY9IH5TTkFORF9FOworCisJLyogZGVmYXVsdCBGTENNRENSIHZhbCAqLworCWZsY21kY3JfdmFsID0gRE9DTUQxX0UgfCBET0FEUl9FOworCisJLyogU2V0IGZvciBGTENNRENSICovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE5BTkRfQ01EX0VSQVNFMToKKwkJYWRkcl9sZW5fYnl0ZXMgPSBmbGN0bC0+ZXJhc2VfQURSQ05UOworCQlmbGNtZGNyX3ZhbCB8PSBET0NNRDJfRTsKKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKwljYXNlIE5BTkRfQ01EX1JFQURPT0I6CisJCWFkZHJfbGVuX2J5dGVzID0gZmxjdGwtPnJ3X0FEUkNOVDsKKwkJZmxjbWRjcl92YWwgfD0gQ0RTUkNfRTsKKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9TRVFJTjoKKwkJLyogVGhpcyBjYXNlIGlzIHRoYXQgY21kIGlzIFJFQUQwIG9yIFJFQUQxIG9yIFJFQUQwMCAqLworCQlmbGNtZGNyX3ZhbCAmPSB+RE9BRFJfRTsJLyogT05MWSBleGVjdXRlIDFzdCBjbWQgKi8KKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKKwkJYWRkcl9sZW5fYnl0ZXMgPSBmbGN0bC0+cndfQURSQ05UOworCQlmbGNtZGNyX3ZhbCB8PSBET0NNRDJfRSB8IENEU1JDX0UgfCBTRUxSVzsKKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9SRUFESUQ6CisJCWZsY21uY3JfdmFsICY9IH5TTkFORF9FOworCQlhZGRyX2xlbl9ieXRlcyA9IEFEUkNOVF8xOworCQlicmVhazsKKwljYXNlIE5BTkRfQ01EX1NUQVRVUzoKKwljYXNlIE5BTkRfQ01EX1JFU0VUOgorCQlmbGNtbmNyX3ZhbCAmPSB+U05BTkRfRTsKKwkJZmxjbWRjcl92YWwgJj0gfihET0FEUl9FIHwgRE9TUl9FKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IGFkZHJlc3MgYnl0ZXMgcGFyYW1ldGVyICovCisJZmxjbWRjcl92YWwgfD0gYWRkcl9sZW5fYnl0ZXM7CisKKwkvKiBOb3cgYWN0dWFsbHkgd3JpdGUgKi8KKwl3cml0ZWwoZmxjbW5jcl92YWwsIEZMQ01OQ1IoZmxjdGwpKTsKKwl3cml0ZWwoZmxjbWRjcl92YWwsIEZMQ01EQ1IoZmxjdGwpKTsKKwl3cml0ZWwoZmxjbWNkcl92YWwsIEZMQ01DRFIoZmxjdGwpKTsKK30KKworc3RhdGljIGludCBmbGN0bF9yZWFkX3BhZ2VfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICpwID0gYnVmOworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpCisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgcCwgZWNjc2l6ZSk7CisKKwlmb3IgKGkgPSAwOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKSB7CisJCWlmIChmbGN0bC0+aHdlY2NfY2FudF9jb3JyZWN0W2ldKQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCWVsc2UKKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmbGN0bF93cml0ZV9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCSAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZikKK3sKKwlpbnQgaSwgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOworCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsKKwlpbnQgZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJY29uc3QgdWludDhfdCAqcCA9IGJ1ZjsKKworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpCisJCWNoaXAtPndyaXRlX2J1ZihtdGQsIHAsIGVjY3NpemUpOworfQorCitzdGF0aWMgdm9pZCBleGVjbWRfcmVhZF9wYWdlX3NlY3RvcihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2VfYWRkcikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJaW50IHNlY3RvciwgcGFnZV9zZWN0b3JzOworCisJaWYgKGZsY3RsLT5wYWdlX3NpemUpCisJCXBhZ2Vfc2VjdG9ycyA9IDQ7CisJZWxzZQorCQlwYWdlX3NlY3RvcnMgPSAxOworCisJd3JpdGVsKHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSB8IEFDTV9TQUNDRVNfTU9ERSB8IF80RUNDQ09SUkVDVCwKKwkJIEZMQ01OQ1IoZmxjdGwpKTsKKworCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1JFQUQwLAorCQkoTkFORF9DTURfUkVBRFNUQVJUIDw8IDgpIHwgTkFORF9DTURfUkVBRDApOworCisJZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgPCBwYWdlX3NlY3RvcnM7IHNlY3RvcisrKSB7CisJCWludCByZXQ7CisKKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCXdyaXRlbChyZWFkbChGTENNRENSKGZsY3RsKSkgfCAxLCBGTENNRENSKGZsY3RsKSk7CisJCXdyaXRlbChwYWdlX2FkZHIgPDwgMiB8IHNlY3RvciwgRkxBRFIoZmxjdGwpKTsKKworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXJlYWRfZmlmb3JlZyhmbGN0bCwgNTEyLCA1MTIgKiBzZWN0b3IpOworCisJCXJldCA9IHJlYWRfZWNmaWZvcmVnKGZsY3RsLAorCQkJJmZsY3RsLT5kb25lX2J1ZmZbbXRkLT53cml0ZXNpemUgKyAxNiAqIHNlY3Rvcl0pOworCisJCWlmIChyZXQpCisJCQlmbGN0bC0+aHdlY2NfY2FudF9jb3JyZWN0W3NlY3Rvcl0gPSAxOworCisJCXdyaXRlbCgweDAsIEZMNEVDQ0NSKGZsY3RsKSk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfQorCXdyaXRlbChyZWFkbChGTENNTkNSKGZsY3RsKSkgJiB+KEFDTV9TQUNDRVNfTU9ERSB8IF80RUNDQ09SUkVDVCksCisJCQlGTENNTkNSKGZsY3RsKSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNtZF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2VfYWRkcikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisKKwlzZXRfY21kX3JlZ3MobXRkLCBOQU5EX0NNRF9SRUFEMCwKKwkJKE5BTkRfQ01EX1JFQURTVEFSVCA8PCA4KSB8IE5BTkRfQ01EX1JFQUQwKTsKKworCWVtcHR5X2ZpZm8oZmxjdGwpOworCWlmIChmbGN0bC0+cGFnZV9zaXplKSB7CisJCWludCBpOworCQkvKiBJbiBjYXNlIHRoYXQgdGhlIHBhZ2Ugc2l6ZSBpcyAyayAqLworCQlmb3IgKGkgPSAwOyBpIDwgMTYgKiAzOyBpKyspCisJCQlmbGN0bC0+ZG9uZV9idWZmW2ldID0gMHhGRjsKKworCQlzZXRfYWRkcihtdGQsIDMgKiA1MjggKyA1MTIsIHBhZ2VfYWRkcik7CisJCXdyaXRlbCgxNiwgRkxEVENOVFIoZmxjdGwpKTsKKworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXJlYWRfZmlmb3JlZyhmbGN0bCwgMTYsIDE2ICogMyk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfSBlbHNlIHsKKwkJLyogSW4gY2FzZSB0aGF0IHRoZSBwYWdlIHNpemUgaXMgNTEyYiAqLworCQlzZXRfYWRkcihtdGQsIDUxMiwgcGFnZV9hZGRyKTsKKwkJd3JpdGVsKDE2LCBGTERUQ05UUihmbGN0bCkpOworCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJcmVhZF9maWZvcmVnKGZsY3RsLCAxNiwgMCk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBleGVjbWRfd3JpdGVfcGFnZV9zZWN0b3Ioc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCWludCBpLCBwYWdlX2FkZHIgPSBmbGN0bC0+c2VxaW5fcGFnZV9hZGRyOworCWludCBzZWN0b3IsIHBhZ2Vfc2VjdG9yczsKKworCWlmIChmbGN0bC0+cGFnZV9zaXplKQorCQlwYWdlX3NlY3RvcnMgPSA0OworCWVsc2UKKwkJcGFnZV9zZWN0b3JzID0gMTsKKworCXdyaXRlbChyZWFkbChGTENNTkNSKGZsY3RsKSkgfCBBQ01fU0FDQ0VTX01PREUsIEZMQ01OQ1IoZmxjdGwpKTsKKworCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1BBR0VQUk9HLAorCQkJKE5BTkRfQ01EX1BBR0VQUk9HIDw8IDgpIHwgTkFORF9DTURfU0VRSU4pOworCisJZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgPCBwYWdlX3NlY3RvcnM7IHNlY3RvcisrKSB7CisJCWVtcHR5X2ZpZm8oZmxjdGwpOworCQl3cml0ZWwocmVhZGwoRkxDTURDUihmbGN0bCkpIHwgMSwgRkxDTURDUihmbGN0bCkpOworCQl3cml0ZWwocGFnZV9hZGRyIDw8IDIgfCBzZWN0b3IsIEZMQURSKGZsY3RsKSk7CisKKwkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQl3cml0ZV9maWZvcmVnKGZsY3RsLCA1MTIsIDUxMiAqIHNlY3Rvcik7CisKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJd2FpdF93ZWNmaWZvX3JlYWR5KGZsY3RsKTsgLyogd2FpdCBmb3Igd3JpdGUgcmVhZHkgKi8KKwkJCXdyaXRlbCgweEZGRkZGRkZGLCBGTEVDRklGTyhmbGN0bCkpOworCQl9CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfQorCisJd3JpdGVsKHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSAmIH5BQ01fU0FDQ0VTX01PREUsIEZMQ01OQ1IoZmxjdGwpKTsKK30KKworc3RhdGljIHZvaWQgZXhlY21kX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJaW50IHBhZ2VfYWRkciA9IGZsY3RsLT5zZXFpbl9wYWdlX2FkZHI7CisJaW50IHNlY3RvciwgcGFnZV9zZWN0b3JzOworCisJaWYgKGZsY3RsLT5wYWdlX3NpemUpIHsKKwkJc2VjdG9yID0gMzsKKwkJcGFnZV9zZWN0b3JzID0gNDsKKwl9IGVsc2UgeworCQlzZWN0b3IgPSAwOworCQlwYWdlX3NlY3RvcnMgPSAxOworCX0KKworCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1BBR0VQUk9HLAorCQkJKE5BTkRfQ01EX1BBR0VQUk9HIDw8IDgpIHwgTkFORF9DTURfU0VRSU4pOworCisJZm9yICg7IHNlY3RvciA8IHBhZ2Vfc2VjdG9yczsgc2VjdG9yKyspIHsKKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCXNldF9hZGRyKG10ZCwgc2VjdG9yICogNTI4ICsgNTEyLCBwYWdlX2FkZHIpOworCQl3cml0ZWwoMTYsIEZMRFRDTlRSKGZsY3RsKSk7CS8qIHNldCByZWFkIHNpemUgKi8KKworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXdyaXRlX2ZpZm9yZWcoZmxjdGwsIDE2LCAxNiAqIHNlY3Rvcik7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmbGN0bF9jbWRmdW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwKKwkJCWludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCXVpbnQzMl90IHJlYWRfY21kID0gMDsKKworCWZsY3RsLT5yZWFkX2J5dGVzID0gMDsKKwlpZiAoY29tbWFuZCAhPSBOQU5EX0NNRF9QQUdFUFJPRykKKwkJZmxjdGwtPmluZGV4ID0gMDsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgTkFORF9DTURfUkVBRDE6CisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKwkJaWYgKGZsY3RsLT5od2VjYykgeworCQkJLyogcmVhZCBwYWdlIHdpdGggaHdlY2MgKi8KKwkJCWV4ZWNtZF9yZWFkX3BhZ2Vfc2VjdG9yKG10ZCwgcGFnZV9hZGRyKTsKKwkJCWJyZWFrOworCQl9CisJCWVtcHR5X2ZpZm8oZmxjdGwpOworCQlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkKKwkJCXNldF9jbWRfcmVncyhtdGQsIGNvbW1hbmQsIChOQU5EX0NNRF9SRUFEU1RBUlQgPDwgOCkKKwkJCQl8IGNvbW1hbmQpOworCQllbHNlCisJCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCBjb21tYW5kKTsKKworCQlzZXRfYWRkcihtdGQsIDAsIHBhZ2VfYWRkcik7CisKKwkJZmxjdGwtPnJlYWRfYnl0ZXMgPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsKKwkJZmxjdGwtPmluZGV4ICs9IGNvbHVtbjsKKwkJZ290byByZWFkX25vcm1hbF9leGl0OworCisJY2FzZSBOQU5EX0NNRF9SRUFET09COgorCQlpZiAoZmxjdGwtPmh3ZWNjKSB7CisJCQkvKiByZWFkIHBhZ2Ugd2l0aCBod2VjYyAqLworCQkJZXhlY21kX3JlYWRfb29iKG10ZCwgcGFnZV9hZGRyKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCWlmIChmbGN0bC0+cGFnZV9zaXplKSB7CisJCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCAoTkFORF9DTURfUkVBRFNUQVJUIDw8IDgpCisJCQkJfCBOQU5EX0NNRF9SRUFEMCk7CisJCQlzZXRfYWRkcihtdGQsIG10ZC0+d3JpdGVzaXplLCBwYWdlX2FkZHIpOworCQl9IGVsc2UgeworCQkJc2V0X2NtZF9yZWdzKG10ZCwgY29tbWFuZCwgY29tbWFuZCk7CisJCQlzZXRfYWRkcihtdGQsIDAsIHBhZ2VfYWRkcik7CisJCX0KKwkJZmxjdGwtPnJlYWRfYnl0ZXMgPSBtdGQtPm9vYnNpemU7CisJCWdvdG8gcmVhZF9ub3JtYWxfZXhpdDsKKworCWNhc2UgTkFORF9DTURfUkVBRElEOgorCQllbXB0eV9maWZvKGZsY3RsKTsKKwkJc2V0X2NtZF9yZWdzKG10ZCwgY29tbWFuZCwgY29tbWFuZCk7CisJCXNldF9hZGRyKG10ZCwgMCwgMCk7CisKKwkJZmxjdGwtPnJlYWRfYnl0ZXMgPSA0OworCQl3cml0ZWwoZmxjdGwtPnJlYWRfYnl0ZXMsIEZMRFRDTlRSKGZsY3RsKSk7IC8qIHNldCByZWFkIHNpemUgKi8KKwkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQlyZWFkX2RhdGFyZWcoZmxjdGwsIDApOwkvKiByZWFkIGFuZCBlbmQgKi8KKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX0VSQVNFMToKKwkJZmxjdGwtPmVyYXNlMV9wYWdlX2FkZHIgPSBwYWdlX2FkZHI7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9FUkFTRTI6CisJCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX0VSQVNFMSwKKwkJCShjb21tYW5kIDw8IDgpIHwgTkFORF9DTURfRVJBU0UxKTsKKwkJc2V0X2FkZHIobXRkLCAtMSwgZmxjdGwtPmVyYXNlMV9wYWdlX2FkZHIpOworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9TRVFJTjoKKwkJaWYgKCFmbGN0bC0+cGFnZV9zaXplKSB7CisJCQkvKiBvdXRwdXQgcmVhZCBjb21tYW5kICovCisJCQlpZiAoY29sdW1uID49IG10ZC0+d3JpdGVzaXplKSB7CisJCQkJY29sdW1uIC09IG10ZC0+d3JpdGVzaXplOworCQkJCXJlYWRfY21kID0gTkFORF9DTURfUkVBRE9PQjsKKwkJCX0gZWxzZSBpZiAoY29sdW1uIDwgMjU2KSB7CisJCQkJcmVhZF9jbWQgPSBOQU5EX0NNRF9SRUFEMDsKKwkJCX0gZWxzZSB7CisJCQkJY29sdW1uIC09IDI1NjsKKwkJCQlyZWFkX2NtZCA9IE5BTkRfQ01EX1JFQUQxOworCQkJfQorCQl9CisJCWZsY3RsLT5zZXFpbl9jb2x1bW4gPSBjb2x1bW47CisJCWZsY3RsLT5zZXFpbl9wYWdlX2FkZHIgPSBwYWdlX2FkZHI7CisJCWZsY3RsLT5zZXFpbl9yZWFkX2NtZCA9IHJlYWRfY21kOworCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfUEFHRVBST0c6CisJCWVtcHR5X2ZpZm8oZmxjdGwpOworCQlpZiAoIWZsY3RsLT5wYWdlX3NpemUpIHsKKwkJCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1NFUUlOLAorCQkJCQlmbGN0bC0+c2VxaW5fcmVhZF9jbWQpOworCQkJc2V0X2FkZHIobXRkLCAtMSwgLTEpOworCQkJd3JpdGVsKDAsIEZMRFRDTlRSKGZsY3RsKSk7CS8qIHNldCAwIHNpemUgKi8KKwkJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJCX0KKwkJaWYgKGZsY3RsLT5od2VjYykgeworCQkJLyogd3JpdGUgcGFnZSB3aXRoIGh3ZWNjICovCisJCQlpZiAoZmxjdGwtPnNlcWluX2NvbHVtbiA9PSBtdGQtPndyaXRlc2l6ZSkKKwkJCQlleGVjbWRfd3JpdGVfb29iKG10ZCk7CisJCQllbHNlIGlmICghZmxjdGwtPnNlcWluX2NvbHVtbikKKwkJCQlleGVjbWRfd3JpdGVfcGFnZV9zZWN0b3IobXRkKTsKKwkJCWVsc2UKKwkJCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgYWRkcmVzcyAhP1xuIik7CisJCQlicmVhazsKKwkJfQorCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCAoY29tbWFuZCA8PCA4KSB8IE5BTkRfQ01EX1NFUUlOKTsKKwkJc2V0X2FkZHIobXRkLCBmbGN0bC0+c2VxaW5fY29sdW1uLCBmbGN0bC0+c2VxaW5fcGFnZV9hZGRyKTsKKwkJd3JpdGVsKGZsY3RsLT5pbmRleCwgRkxEVENOVFIoZmxjdGwpKTsJLyogc2V0IHdyaXRlIHNpemUgKi8KKwkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQl3cml0ZV9maWZvcmVnKGZsY3RsLCBmbGN0bC0+aW5kZXgsIDApOworCQl3YWl0X2NvbXBsZXRpb24oZmxjdGwpOworCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCBjb21tYW5kKTsKKwkJc2V0X2FkZHIobXRkLCAtMSwgLTEpOworCisJCWZsY3RsLT5yZWFkX2J5dGVzID0gMTsKKwkJd3JpdGVsKGZsY3RsLT5yZWFkX2J5dGVzLCBGTERUQ05UUihmbGN0bCkpOyAvKiBzZXQgcmVhZCBzaXplICovCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJcmVhZF9kYXRhcmVnKGZsY3RsLCAwKTsgLyogcmVhZCBhbmQgZW5kICovCisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9SRVNFVDoKKwkJc2V0X2NtZF9yZWdzKG10ZCwgY29tbWFuZCwgY29tbWFuZCk7CisJCXNldF9hZGRyKG10ZCwgLTEsIC0xKTsKKworCQl3cml0ZWwoMCwgRkxEVENOVFIoZmxjdGwpKTsJLyogc2V0IDAgc2l6ZSAqLworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybjsKKworcmVhZF9ub3JtYWxfZXhpdDoKKwl3cml0ZWwoZmxjdGwtPnJlYWRfYnl0ZXMsIEZMRFRDTlRSKGZsY3RsKSk7CS8qIHNldCByZWFkIHNpemUgKi8KKwlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJcmVhZF9maWZvcmVnKGZsY3RsLCBmbGN0bC0+cmVhZF9ieXRlcywgMCk7CisJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcG5yKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwl1aW50MzJfdCBmbGNtbmNyX3ZhbCA9IHJlYWRsKEZMQ01OQ1IoZmxjdGwpKTsKKworCXN3aXRjaCAoY2hpcG5yKSB7CisJY2FzZSAtMToKKwkJZmxjbW5jcl92YWwgJj0gfkNFMF9FTkFCTEU7CisJCXdyaXRlbChmbGNtbmNyX3ZhbCwgRkxDTU5DUihmbGN0bCkpOworCQlicmVhazsKKwljYXNlIDA6CisJCWZsY21uY3JfdmFsIHw9IENFMF9FTkFCTEU7CisJCXdyaXRlbChmbGNtbmNyX3ZhbCwgRkxDTU5DUihmbGN0bCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwlpbnQgaSwgaW5kZXggPSBmbGN0bC0+aW5kZXg7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWZsY3RsLT5kb25lX2J1ZmZbaW5kZXggKyBpXSA9IGJ1ZltpXTsKKwlmbGN0bC0+aW5kZXggKz0gbGVuOworfQorCitzdGF0aWMgdWludDhfdCBmbGN0bF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCWludCBpbmRleCA9IGZsY3RsLT5pbmRleDsKKwl1aW50OF90IGRhdGE7CisKKwlkYXRhID0gZmxjdGwtPmRvbmVfYnVmZltpbmRleF07CisJZmxjdGwtPmluZGV4Kys7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWJ1ZltpXSA9IGZsY3RsX3JlYWRfYnl0ZShtdGQpOworfQorCitzdGF0aWMgaW50IGZsY3RsX3ZlcmlmeV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAoYnVmW2ldICE9IGZsY3RsX3JlYWRfYnl0ZShtdGQpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3JlZ2lzdGVyX2luaXQoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJd3JpdGVsKHZhbCwgRkxDTU5DUihmbGN0bCkpOworfQorCitzdGF0aWMgaW50IGZsY3RsX2NoaXBfaW5pdF90YWlsKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gJmZsY3RsLT5jaGlwOworCisJaWYgKG10ZC0+d3JpdGVzaXplID09IDUxMikgeworCQlmbGN0bC0+cGFnZV9zaXplID0gMDsKKwkJaWYgKGNoaXAtPmNoaXBzaXplID4gKDMyIDw8IDIwKSkgeworCQkJLyogYmlnIHRoYW4gMzJNQiAqLworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVF80OworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8zOworCQl9IGVsc2UgaWYgKGNoaXAtPmNoaXBzaXplID4gKDIgPDwgMTYpKSB7CisJCQkvKiBiaWcgdGhhbiAxMjhLQiAqLworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVF8zOworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8yOworCQl9IGVsc2UgeworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVF8yOworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8xOworCQl9CisJfSBlbHNlIHsKKwkJZmxjdGwtPnBhZ2Vfc2l6ZSA9IDE7CisJCWlmIChjaGlwLT5jaGlwc2l6ZSA+ICgxMjggPDwgMjApKSB7CisJCQkvKiBiaWcgdGhhbiAxMjhNQiAqLworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVDJfRTsKKwkJCWZsY3RsLT5lcmFzZV9BRFJDTlQgPSBBRFJDTlRfMzsKKwkJfSBlbHNlIGlmIChjaGlwLT5jaGlwc2l6ZSA+ICg4IDw8IDE2KSkgeworCQkJLyogYmlnIHRoYW4gNTEyS0IgKi8KKwkJCWZsY3RsLT5yd19BRFJDTlQgPSBBRFJDTlRfNDsKKwkJCWZsY3RsLT5lcmFzZV9BRFJDTlQgPSBBRFJDTlRfMjsKKwkJfSBlbHNlIHsKKwkJCWZsY3RsLT5yd19BRFJDTlQgPSBBRFJDTlRfMzsKKwkJCWZsY3RsLT5lcmFzZV9BRFJDTlQgPSBBRFJDTlRfMTsKKwkJfQorCX0KKworCWlmIChmbGN0bC0+aHdlY2MpIHsKKwkJaWYgKG10ZC0+d3JpdGVzaXplID09IDUxMikgeworCQkJY2hpcC0+ZWNjLmxheW91dCA9ICZmbGN0bF80c2VjY19vb2JfMTY7CisJCQljaGlwLT5iYWRibG9ja19wYXR0ZXJuID0gJmZsY3RsXzRzZWNjX3NtYWxscGFnZTsKKwkJfSBlbHNlIHsKKwkJCWNoaXAtPmVjYy5sYXlvdXQgPSAmZmxjdGxfNHNlY2Nfb29iXzY0OworCQkJY2hpcC0+YmFkYmxvY2tfcGF0dGVybiA9ICZmbGN0bF80c2VjY19sYXJnZXBhZ2U7CisJCX0KKworCQljaGlwLT5lY2Muc2l6ZSA9IDUxMjsKKwkJY2hpcC0+ZWNjLmJ5dGVzID0gMTA7CisJCWNoaXAtPmVjYy5yZWFkX3BhZ2UgPSBmbGN0bF9yZWFkX3BhZ2VfaHdlY2M7CisJCWNoaXAtPmVjYy53cml0ZV9wYWdlID0gZmxjdGxfd3JpdGVfcGFnZV9od2VjYzsKKwkJY2hpcC0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKKworCQkvKiA0IHN5bWJvbHMgRUNDIGVuYWJsZWQgKi8KKwkJd3JpdGVsKHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSB8IF80RUNDRU4gfCBFQ0NQT1MyIHwgRUNDUE9TXzAyLAorCQkJCUZMQ01OQ1IoZmxjdGwpKTsKKwl9IGVsc2UgeworCQljaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGZsY3RsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bDsKKwlzdHJ1Y3QgbXRkX2luZm8gKmZsY3RsX210ZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kOworCXN0cnVjdCBzaF9mbGN0bF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlpbnQgcmV0OworCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInNoX2ZsY3RsIHBsYXRmb3JtX2RhdGEgbm90IGZvdW5kLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWZsY3RsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNoX2ZsY3RsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmbGN0bCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBOQU5EIE1URCBkZXYgc3RydWN0dXJlLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzb3VyY2Ugbm90IGZvdW5kLlxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycjsKKwl9CisKKwlmbGN0bC0+cmVnID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoZmxjdGwtPnJlZyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlvcmVtYXAgZXJyb3IuXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGZsY3RsKTsKKwlmbGN0bF9tdGQgPSAmZmxjdGwtPm10ZDsKKwluYW5kID0gJmZsY3RsLT5jaGlwOworCWZsY3RsX210ZC0+cHJpdiA9IG5hbmQ7CisJZmxjdGwtPmh3ZWNjID0gcGRhdGEtPmhhc19od2VjYzsKKworCWZsY3RsX3JlZ2lzdGVyX2luaXQoZmxjdGwsIHBkYXRhLT5mbGNtbmNyX3ZhbCk7CisKKwluYW5kLT5vcHRpb25zID0gTkFORF9OT19BVVRPSU5DUjsKKworCS8qIFNldCBhZGRyZXNzIG9mIGhhcmR3YXJlIGNvbnRyb2wgZnVuY3Rpb24gKi8KKwkvKiAyMCB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KKwluYW5kLT5jaGlwX2RlbGF5ID0gMjA7CisKKwluYW5kLT5yZWFkX2J5dGUgPSBmbGN0bF9yZWFkX2J5dGU7CisJbmFuZC0+d3JpdGVfYnVmID0gZmxjdGxfd3JpdGVfYnVmOworCW5hbmQtPnJlYWRfYnVmID0gZmxjdGxfcmVhZF9idWY7CisJbmFuZC0+dmVyaWZ5X2J1ZiA9IGZsY3RsX3ZlcmlmeV9idWY7CisJbmFuZC0+c2VsZWN0X2NoaXAgPSBmbGN0bF9zZWxlY3RfY2hpcDsKKwluYW5kLT5jbWRmdW5jID0gZmxjdGxfY21kZnVuYzsKKworCXJldCA9IG5hbmRfc2Nhbl9pZGVudChmbGN0bF9tdGQsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gZmxjdGxfY2hpcF9pbml0X3RhaWwoZmxjdGxfbXRkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IG5hbmRfc2Nhbl90YWlsKGZsY3RsX210ZCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlhZGRfbXRkX3BhcnRpdGlvbnMoZmxjdGxfbXRkLCBwZGF0YS0+cGFydHMsIHBkYXRhLT5ucl9wYXJ0cyk7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWtmcmVlKGZsY3RsKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZXhpdCBmbGN0bF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwluYW5kX3JlbGVhc2UoJmZsY3RsLT5tdGQpOworCWtmcmVlKGZsY3RsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmbGN0bF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGZsY3RsX3Byb2JlLAorCS5yZW1vdmUJCT0gZmxjdGxfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gInNoX2ZsY3RsIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGZsY3RsX25hbmRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmZsY3RsX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmbGN0bF9uYW5kX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZmxjdGxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZmxjdGxfbmFuZF9pbml0KTsKK21vZHVsZV9leGl0KGZsY3RsX25hbmRfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIllvc2hpaGlybyBTaGltb2RhIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN1cGVySCBGTENUTCBkcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06c2hfZmxjdGwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvdG90by5jIGIvZHJpdmVycy9tdGQvbmFuZC90b3RvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZjQ5MmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC90b3RvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoKLSAqICBkcml2ZXJzL210ZC9uYW5kL3RvdG8uYwotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDMgVGV4YXMgSW5zdHJ1bWVudHMKLSAqCi0gKiAgRGVyaXZlZCBmcm9tIGRyaXZlcnMvbXRkL2F1dGNwdTEyLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAyIFRob21hcyBHbGVpeG5lciA8dGd4bEBsaW51dHJvbml4LmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIE92ZXJ2aWV3OgotICogICBUaGlzIGlzIGEgZGV2aWNlIGRyaXZlciBmb3IgdGhlIE5BTkQgZmxhc2ggZGV2aWNlIGZvdW5kIG9uIHRoZQotICogICBUSSBmaWRvIGJvYXJkLiBJdCBzdXBwb3J0cyAzMk1pQiBhbmQgNjRNaUIgY2FyZHMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC90b3RvLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gtb21hcDE1MTAvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+Ci0KLSNkZWZpbmUgQ09ORklHX05BTkRfV09SS0FST1VORCAxCi0KLS8qCi0gKiBNVEQgc3RydWN0dXJlIGZvciBUT1RPIGJvYXJkCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKnRvdG9fbXRkID0gTlVMTDsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90b19pb19iYXNlID0gT01BUF9GTEFTSF8xX0JBU0U7Ci0KLS8qCi0gKiBEZWZpbmUgcGFydGl0aW9ucyBmb3IgZmxhc2ggZGV2aWNlcwotICovCi0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mbzY0TVtdID0gewotCXsgLm5hbWUgPQkidG90byBrZXJuZWwgcGFydGl0aW9uIDEiLAotCSAgLm9mZnNldCA9CTAsCi0JICAuc2l6ZQk9CTIgKiBTWl8xTSB9LAotCXsgLm5hbWUgPQkidG90byBmaWxlIHN5cyBwYXJ0aXRpb24gMiIsCi0JICAub2Zmc2V0ID0JMiAqIFNaXzFNLAotCSAgLnNpemUgPQkxNCAqIFNaXzFNIH0sCi0JeyAubmFtZSA9CSJ0b3RvIHVzZXIgcGFydGl0aW9uIDMiLAotCSAgLm9mZnNldCA9CTE2ICogU1pfMU0sCi0JICAuc2l6ZSA9CTE2ICogU1pfMU0gfSwKLQl7IC5uYW1lID0JInRvdG8gZGV2Ym9hcmQgZXh0cmEgcGFydGl0aW9uIDQiLAotCSAgLm9mZnNldCA9CTMyICogU1pfMU0sCi0JICAuc2l6ZSA9CTMyICogU1pfMU0gfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mbzMyTVtdID0gewotCXsgLm5hbWUgPQkidG90byBrZXJuZWwgcGFydGl0aW9uIDEiLAotCSAgLm9mZnNldCA9CTAsCi0JICAuc2l6ZSA9CTIgKiBTWl8xTSB9LAotCXsgLm5hbWUgPQkidG90byBmaWxlIHN5cyBwYXJ0aXRpb24gMiIsCi0JICAub2Zmc2V0ID0JMiAqIFNaXzFNLAotCSAgLnNpemUgPQkxNCAqIFNaXzFNIH0sCi0JeyAubmFtZSA9CSJ0b3RvIHVzZXIgcGFydGl0aW9uIDMiLAotCSAgLm9mZnNldCA9CTE2ICogU1pfMU0sCi0JICAuc2l6ZSA9CTE2ICogU1pfMU0gfSwKLX07Ci0KLSNkZWZpbmUgTlVNX1BBUlRJVElPTlMzMk0gMwotI2RlZmluZSBOVU1fUEFSVElUSU9OUzY0TSA0Ci0KLS8qCi0gKgloYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcwotICoKLSAqCWN0cmw6Ci0gKglOQU5EX05DRTogYml0IDAgLT4gYml0IDE0ICgweDQwMDApCi0gKglOQU5EX0NMRTogYml0IDEgLT4gYml0IDEyICgweDEwMDApCi0gKglOQU5EX0FMRTogYml0IDIgLT4gYml0IDEgICgweDAwMDIpCi0gKi8KLXN0YXRpYyB2b2lkIHRvdG9faHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAotCQkJICAgdW5zaWduZWQgaW50IGN0cmwpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKLQotCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgewotCQl1bnNpZ25lZCBsb25nIGJpdHM7Ci0KLQkJLyogaG9wZWZ1bGx5IGVub3VnaCB0aW1lIGZvciB0YyBtYWtlIHByb2NlZGluZyB3cml0ZSB0byBjbGVhciAqLwotCQl1ZGVsYXkoMSk7Ci0KLQkJYml0cyA9ICh+Y3RybCAmIE5BTkRfTkNFKSA8PCAxNDsKLQkJYml0cyB8PSAoY3RybCAmIE5BTkRfQ0xFKSA8PCAxMjsKLQkJYml0cyB8PSAoY3RybCAmIE5BTkRfQUxFKSA+PiAxOwotCi0jd2FybmluZyBXaWxkIGd1ZXNzIGFzIGdwaW9zZXRvdXQoKSBpcyBub3doZXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UgLSB0Z2x4Ci0JCWdwaW9zZXRvdXQoMHg1MDAyLCBiaXRzKTsKLQotI2lmZGVmIENPTkZJR19OQU5EX1dPUktBUk9VTkQKLQkJLyogInNvbWUiIGRldiBib2FyZHMgYnVzdGVkLCBibHVlIHdpcmVkIHRvIHJ0czIgOiggKi8KLQkJcnRzMnNldG91dCgyLCAoY3RybCAmIE5BTkRfQ0xFKSA8PCAxKTsKLSNlbmRpZgotCQkvKiBhbGxvdyB0aW1lIHRvIGVuc3VyZSBncGlvIHN0YXRlIHRvIG92ZXIgdGFrZSBtZW1vcnkgd3JpdGUgKi8KLQkJdWRlbGF5KDEpOwotCX0KLQotCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKLQkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XKTsKLX0KLQotLyoKLSAqIE1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZQotICovCi1zdGF0aWMgaW50IF9faW5pdCB0b3RvX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwotCWludCBlcnIgPSAwOwotCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0JdG90b19tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRvdG9fbXRkKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBhbGxvY2F0ZSB0b3RvIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZ0b3RvX210ZFsxXSk7Ci0KLQkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KLQltZW1zZXQodG90b19tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKLQltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKLQotCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCi0JdG90b19tdGQtPnByaXYgPSB0aGlzOwotCXRvdG9fbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JLyogU2V0IGFkZHJlc3Mgb2YgTkFORCBJTyBsaW5lcyAqLwotCXRoaXMtPklPX0FERFJfUiA9IHRvdG9faW9fYmFzZTsKLQl0aGlzLT5JT19BRERSX1cgPSB0b3RvX2lvX2Jhc2U7Ci0JdGhpcy0+Y21kX2N0cmwgPSB0b3RvX2h3Y29udHJvbDsKLQl0aGlzLT5kZXZfcmVhZHkgPSBOVUxMOwotCS8qIDI1IHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLwotCXRoaXMtPmNoaXBfZGVsYXkgPSAzMDsKLQl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7Ci0KLQkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KLQlpZiAobmFuZF9zY2FuKHRvdG9fbXRkLCAxKSkgewotCQllcnIgPSAtRU5YSU87Ci0JCWdvdG8gb3V0X210ZDsKLQl9Ci0KLQkvKiBSZWdpc3RlciB0aGUgcGFydGl0aW9ucyAqLwotCXN3aXRjaCAodG90b19tdGQtPnNpemUpIHsKLQljYXNlIFNaXzY0TToKLQkJYWRkX210ZF9wYXJ0aXRpb25zKHRvdG9fbXRkLCBwYXJ0aXRpb25faW5mbzY0TSwgTlVNX1BBUlRJVElPTlM2NE0pOwotCQlicmVhazsKLQljYXNlIFNaXzMyTToKLQkJYWRkX210ZF9wYXJ0aXRpb25zKHRvdG9fbXRkLCBwYXJ0aXRpb25faW5mbzMyTSwgTlVNX1BBUlRJVElPTlMzMk0pOwotCQlicmVhazsKLQlkZWZhdWx0OnsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuc3VwcG9ydGVkIE5hbmQgZGV2aWNlXG4iKTsKLQkJCWVyciA9IC1FTlhJTzsKLQkJCWdvdG8gb3V0X2J1ZjsKLQkJfQotCX0KLQotCWdwaW9yZXNlcnZlKE5BTkRfTUFTSyk7CS8qIGNsYWltIG91ciBncGlvcyAqLwotCWFyY2hmbGFzaHdwKDAsIDApOwkvKiBvcGVuIHVwIGZsYXNoIGZvciB3cml0aW5nICovCi0KLQlnb3RvIG91dDsKLQotIG91dF9tdGQ6Ci0Ja2ZyZWUodG90b19tdGQpOwotIG91dDoKLQlyZXR1cm4gZXJyOwotfQotCi1tb2R1bGVfaW5pdCh0b3RvX2luaXQpOwotCi0vKgotICogQ2xlYW4gdXAgcm91dGluZQotICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgdG90b19jbGVhbnVwKHZvaWQpCi17Ci0JLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlKHRvdG9fbXRkKTsKLQotCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCi0Ja2ZyZWUodG90b19tdGQpOwotCi0JLyogc3RvcCBmbGFzaCB3cml0ZXMgKi8KLQlhcmNoZmxhc2h3cCgwLCAxKTsKLQotCS8qIHJlbGVhc2UgZ3Bpb3MgdG8gc3lzdGVtICovCi0JZ3Bpb3JlbGVhc2UoTkFORF9NQVNLKTsKLX0KLQotbW9kdWxlX2V4aXQodG90b19jbGVhbnVwKTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJHbHVlIGxheWVyIGZvciBOQU5EIGZsYXNoIG9uIHRvdG8gYm9hcmQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29mcGFydC5jIGIvZHJpdmVycy9tdGQvb2ZwYXJ0LmMKaW5kZXggNGY4MGMyZi4uOWU0NWIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb2ZwYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvb2ZwYXJ0LmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogCiBpbnQgX19kZXZpbml0IG9mX210ZF9wYXJzZV9wYXJ0aXRpb25zKHN0cnVjdCBkZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG10ZF9pbmZvICptdGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcKaW5kZXggY2I0MWNiYy4uNzlmYTc5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZwpAQCAtMjcsOCArMjcsMTYgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBPbmVOQU5EIGZsYXNoIHZpYSBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyLgogCitjb25maWcgTVREX09ORU5BTkRfT01BUDIKKwl0cmlzdGF0ZSAiT25lTkFORCBvbiBPTUFQMi9PTUFQMyBzdXBwb3J0IgorCWRlcGVuZHMgb24gTVREX09ORU5BTkQgJiYgKEFSQ0hfT01BUDIgfHwgQVJDSF9PTUFQMykKKwloZWxwCisJICBTdXBwb3J0IGZvciBhIE9uZU5BTkQgZmxhc2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhbiBPTUFQMi9PTUFQMyBDUFUKKwkgIHZpYSB0aGUgR1BNQyBtZW1vcnkgY29udHJvbGxlci4KKwogY29uZmlnIE1URF9PTkVOQU5EX09UUAogCWJvb2wgIk9uZU5BTkQgT1RQIFN1cHBvcnQiCisJc2VsZWN0IEhBVkVfTVREX09UUAogCWhlbHAKIAkgIE9uZSBCbG9jayBvZiB0aGUgTkFORCBGbGFzaCBBcnJheSBtZW1vcnkgaXMgcmVzZXJ2ZWQgYXMKIAkgIGEgT25lLVRpbWUgUHJvZ3JhbW1hYmxlIEJsb2NrIG1lbW9yeSBhcmVhLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL29uZW5hbmQvTWFrZWZpbGUKaW5kZXggNGQyZWFjZi4uNjRiNmNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQAogCiAjIEJvYXJkIHNwZWNpZmljLgogb2JqLSQoQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUMpCSs9IGdlbmVyaWMubworb2JqLSQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyKQkJKz0gb21hcDIubwogCiAjIFNpbXVsYXRvcgogb2JqLSQoQ09ORklHX01URF9PTkVOQU5EX1NJTSkJCSs9IG9uZW5hbmRfc2ltLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzg3ZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jCkBAIC0wLDAgKzEsODAyIEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvbXRkL29uZW5hbmQvb21hcDIuYworICoKKyAqICBPbmVOQU5EIGRyaXZlciBmb3IgT01BUDIgLyBPTUFQMworICoKKyAqICBDb3B5cmlnaHQgwqkgMjAwNS0yMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogIEF1dGhvcjogSmFya2tvIExhdmluZW4gPGphcmtrby5sYXZpbmVuQG5va2lhLmNvbT4gYW5kIEp1aGEgWXJqw7Zsw6QKKyAqICBJUlEgYW5kIERNQSBzdXBwb3J0IHdyaXR0ZW4gYnkgVGltbyBUZXJhcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9vbmVuYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncG1jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvb25lbmFuZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncG1jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZG1hLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJvbWFwMi1vbmVuYW5kIgorCisjZGVmaW5lIE9ORU5BTkRfSU9fU0laRQkJU1pfMTI4SworI2RlZmluZSBPTkVOQU5EX0JVRlJBTV9TSVpFCSgxMDI0ICogNSkKKworc3RydWN0IG9tYXAyX29uZW5hbmQgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IGdwbWNfY3M7CisJdW5zaWduZWQgbG9uZyBwaHlzX2Jhc2U7CisJaW50IGdwaW9faXJxOworCXN0cnVjdCBtdGRfaW5mbyBtdGQ7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCXN0cnVjdCBvbmVuYW5kX2NoaXAgb25lbmFuZDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBpcnFfZG9uZTsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkbWFfZG9uZTsKKwlpbnQgZG1hX2NoYW5uZWw7CisJaW50IGZyZXE7CisJaW50ICgqc2V0dXApKHZvaWQgX19pb21lbSAqYmFzZSwgaW50IGZyZXEpOworfTsKKworc3RhdGljIHZvaWQgb21hcDJfb25lbmFuZF9kbWFfY2IoaW50IGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGRhdGE7CisKKwljb21wbGV0ZSgmYy0+ZG1hX2RvbmUpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcDJfb25lbmFuZF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjID0gZGV2X2lkOworCisJY29tcGxldGUoJmMtPmlycV9kb25lKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCByZWFkX3JlZyhzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYywgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVhZHcoYy0+b25lbmFuZC5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3JlZyhzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYywgdW5zaWduZWQgc2hvcnQgdmFsdWUsCisJCQkgICAgIGludCByZWcpCit7CisJd3JpdGV3KHZhbHVlLCBjLT5vbmVuYW5kLmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X2VycihjaGFyICptc2csIGludCBzdGF0ZSwgdW5zaWduZWQgaW50IGN0cmwsIHVuc2lnbmVkIGludCBpbnRyKQoreworCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93YWl0OiAlcyEgc3RhdGUgJWQgY3RybCAweCUwNHggaW50ciAweCUwNHhcbiIsCisJICAgICAgIG1zZywgc3RhdGUsIGN0cmwsIGludHIpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X3dhcm4oY2hhciAqbXNnLCBpbnQgc3RhdGUsIHVuc2lnbmVkIGludCBjdHJsLAorCQkgICAgICB1bnNpZ25lZCBpbnQgaW50cikKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICJvbmVuYW5kX3dhaXQ6ICVzISBzdGF0ZSAlZCBjdHJsIDB4JTA0eCAiCisJICAgICAgICJpbnRyIDB4JTA0eFxuIiwgbXNnLCBzdGF0ZSwgY3RybCwgaW50cik7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfb25lbmFuZF93YWl0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc3RhdGUpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgb21hcDJfb25lbmFuZCwgbXRkKTsKKwl1bnNpZ25lZCBpbnQgaW50ciA9IDA7CisJdW5zaWduZWQgaW50IGN0cmw7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiBzeXNjZmc7CisKKwlpZiAoc3RhdGUgPT0gRkxfUkVTRVRJTkcpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJCXVkZWxheSgxKTsKKwkJCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJaWYgKGludHIgJiBPTkVOQU5EX0lOVF9NQVNURVIpCisJCQkJYnJlYWs7CisJCX0KKwkJY3RybCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKwkJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfRVJST1IpIHsKKwkJCXdhaXRfZXJyKCJjb250cm9sbGVyIGVycm9yIiwgc3RhdGUsIGN0cmwsIGludHIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKCEoaW50ciAmIE9ORU5BTkRfSU5UX1JFU0VUKSkgeworCQkJd2FpdF9lcnIoInRpbWVvdXQiLCBzdGF0ZSwgY3RybCwgaW50cik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RhdGUgIT0gRkxfUkVBRElORykgeworCQlpbnQgcmVzdWx0OworCisJCS8qIFR1cm4gaW50ZXJydXB0cyBvbiAqLworCQlzeXNjZmcgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisJCWlmICghKHN5c2NmZyAmIE9ORU5BTkRfU1lTX0NGRzFfSU9CRSkpIHsKKwkJCXN5c2NmZyB8PSBPTkVOQU5EX1NZU19DRkcxX0lPQkU7CisJCQl3cml0ZV9yZWcoYywgc3lzY2ZnLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisJCQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCQkJLyogQWRkIGEgZGVsYXkgdG8gbGV0IEdQSU8gc2V0dGxlICovCisJCQkJc3lzY2ZnID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfU1lTX0NGRzEpOworCQl9CisKKwkJSU5JVF9DT01QTEVUSU9OKGMtPmlycV9kb25lKTsKKwkJaWYgKGMtPmdwaW9faXJxKSB7CisJCQlyZXN1bHQgPSBvbWFwX2dldF9ncGlvX2RhdGFpbihjLT5ncGlvX2lycSk7CisJCQlpZiAocmVzdWx0ID09IC0xKSB7CisJCQkJY3RybCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKwkJCQlpbnRyID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfSU5URVJSVVBUKTsKKwkJCQl3YWl0X2VycigiZ3BpbyBlcnJvciIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfSBlbHNlCisJCQlyZXN1bHQgPSAwOworCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCWludCByZXRyeV9jbnQgPSAwOworcmV0cnk6CisJCQlyZXN1bHQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmMtPmlycV9kb25lLAorCQkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoMjApKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJCS8qIFRpbWVvdXQgYWZ0ZXIgMjBtcyAqLworCQkJCWN0cmwgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19DVFJMX1NUQVRVUyk7CisJCQkJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfT05HTykgeworCQkJCQkvKgorCQkJCQkgKiBUaGUgb3BlcmF0aW9uIHNlZW1zIHRvIGJlIHN0aWxsIGdvaW5nCisJCQkJCSAqIHNvIGdpdmUgaXQgc29tZSBtb3JlIHRpbWUuCisJCQkJCSAqLworCQkJCQlyZXRyeV9jbnQgKz0gMTsKKwkJCQkJaWYgKHJldHJ5X2NudCA8IDMpCisJCQkJCQlnb3RvIHJldHJ5OworCQkJCQlpbnRyID0gcmVhZF9yZWcoYywKKwkJCQkJCQlPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJCQl3YWl0X2VycigidGltZW91dCIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKwkJCQkJcmV0dXJuIC1FSU87CisJCQkJfQorCQkJCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJCWlmICgoaW50ciAmIE9ORU5BTkRfSU5UX01BU1RFUikgPT0gMCkKKwkJCQkJd2FpdF93YXJuKCJ0aW1lb3V0Iiwgc3RhdGUsIGN0cmwsIGludHIpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaW50IHJldHJ5X2NudCA9IDA7CisKKwkJLyogVHVybiBpbnRlcnJ1cHRzIG9mZiAqLworCQlzeXNjZmcgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisJCXN5c2NmZyAmPSB+T05FTkFORF9TWVNfQ0ZHMV9JT0JFOworCQl3cml0ZV9yZWcoYywgc3lzY2ZnLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisKKwkJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKTsKKwkJd2hpbGUgKDEpIHsKKwkJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJCWlmIChpbnRyICYgT05FTkFORF9JTlRfTUFTVEVSKQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJLyogVGltZW91dCBhZnRlciAyMG1zICovCisJCQkJY3RybCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKwkJCQlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9PTkdPKSB7CisJCQkJCS8qCisJCQkJCSAqIFRoZSBvcGVyYXRpb24gc2VlbXMgdG8gYmUgc3RpbGwgZ29pbmcKKwkJCQkJICogc28gZ2l2ZSBpdCBzb21lIG1vcmUgdGltZS4KKwkJCQkJICovCisJCQkJCXJldHJ5X2NudCArPSAxOworCQkJCQlpZiAocmV0cnlfY250IDwgMykgeworCQkJCQkJdGltZW91dCA9IGppZmZpZXMgKworCQkJCQkJCSAgbXNlY3NfdG9famlmZmllcygyMCk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCWN0cmwgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19DVFJMX1NUQVRVUyk7CisKKwlpZiAoaW50ciAmIE9ORU5BTkRfSU5UX1JFQUQpIHsKKwkJaW50IGVjYyA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0VDQ19TVEFUVVMpOworCisJCWlmIChlY2MpIHsKKwkJCXVuc2lnbmVkIGludCBhZGRyMSwgYWRkcjg7CisKKwkJCWFkZHIxID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzEpOworCQkJYWRkcjggPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTOCk7CisJCQlpZiAoZWNjICYgT05FTkFORF9FQ0NfMkJJVF9BTEwpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfd2FpdDogRUNDIGVycm9yID0gIgorCQkJCSAgICAgICAiMHglMDR4LCBhZGRyMSAlI3gsIGFkZHI4ICUjeFxuIiwKKwkJCQkgICAgICAgZWNjLCBhZGRyMSwgYWRkcjgpOworCQkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOworCQkJCXJldHVybiAtRUJBRE1TRzsKKwkJCX0gZWxzZSBpZiAoZWNjICYgT05FTkFORF9FQ0NfMUJJVF9BTEwpIHsKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm9uZW5hbmRfd2FpdDogY29ycmVjdGFibGUgIgorCQkJCSAgICAgICAiRUNDIGVycm9yID0gMHglMDR4LCBhZGRyMSAlI3gsICIKKwkJCQkgICAgICAgImFkZHI4ICUjeFxuIiwgZWNjLCBhZGRyMSwgYWRkcjgpOworCQkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCsrOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChzdGF0ZSA9PSBGTF9SRUFESU5HKSB7CisJCXdhaXRfZXJyKCJ0aW1lb3V0Iiwgc3RhdGUsIGN0cmwsIGludHIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9FUlJPUikgeworCQl3YWl0X2VycigiY29udHJvbGxlciBlcnJvciIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKwkJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfTE9DSykKKwkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93YWl0OiAiCisJCQkJCSJEZXZpY2UgaXMgd3JpdGUgcHJvdGVjdGVkISEhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGN0cmwgJiAweEZFOUYpCisJCXdhaXRfd2FybigidW5leHBlY3RlZCBjb250cm9sbGVyIHN0YXR1cyIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBvbWFwMl9vbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlpZiAoT05FTkFORF9DVVJSRU5UX0JVRkZFUlJBTSh0aGlzKSkgeworCQlpZiAoYXJlYSA9PSBPTkVOQU5EX0RBVEFSQU0pCisJCQlyZXR1cm4gbXRkLT53cml0ZXNpemU7CisJCWlmIChhcmVhID09IE9ORU5BTkRfU1BBUkVSQU0pCisJCQlyZXR1cm4gbXRkLT5vb2JzaXplOworCX0KKworCXJldHVybiAwOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChNVUxUSV9PTUFQMikKKworc3RhdGljIGludCBvbWFwM19vbmVuYW5kX3JlYWRfYnVmZmVycmFtKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYXJlYSwKKwkJCQkJdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgb2Zmc2V0LAorCQkJCQlzaXplX3QgY291bnQpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgb21hcDJfb25lbmFuZCwgbXRkKTsKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWRtYV9hZGRyX3QgZG1hX3NyYywgZG1hX2RzdDsKKwlpbnQgYnJhbV9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXZvaWQgKmJ1ZiA9ICh2b2lkICopYnVmZmVyOworCXNpemVfdCB4dHJhOworCXZvbGF0aWxlIHVuc2lnbmVkICpkb25lOworCisJYnJhbV9vZmZzZXQgPSBvbWFwMl9vbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQobXRkLCBhcmVhKSArIGFyZWEgKyBvZmZzZXQ7CisJaWYgKGJyYW1fb2Zmc2V0ICYgMyB8fCAoc2l6ZV90KWJ1ZiAmIDMgfHwgY291bnQgPCAzODQpCisJCWdvdG8gb3V0X2NvcHk7CisKKwlpZiAoYnVmID49IGhpZ2hfbWVtb3J5KSB7CisJCXN0cnVjdCBwYWdlICpwMTsKKworCQlpZiAoKChzaXplX3QpYnVmICYgUEFHRV9NQVNLKSAhPQorCQkgICAgKChzaXplX3QpKGJ1ZiArIGNvdW50IC0gMSkgJiBQQUdFX01BU0spKQorCQkJZ290byBvdXRfY29weTsKKwkJcDEgPSB2bWFsbG9jX3RvX3BhZ2UoYnVmKTsKKwkJaWYgKCFwMSkKKwkJCWdvdG8gb3V0X2NvcHk7CisJCWJ1ZiA9IHBhZ2VfYWRkcmVzcyhwMSkgKyAoKHNpemVfdClidWYgJiB+UEFHRV9NQVNLKTsKKwl9CisKKwl4dHJhID0gY291bnQgJiAzOworCWlmICh4dHJhKSB7CisJCWNvdW50IC09IHh0cmE7CisJCW1lbWNweShidWYgKyBjb3VudCwgdGhpcy0+YmFzZSArIGJyYW1fb2Zmc2V0ICsgY291bnQsIHh0cmEpOworCX0KKworCWRtYV9zcmMgPSBjLT5waHlzX2Jhc2UgKyBicmFtX29mZnNldDsKKwlkbWFfZHN0ID0gZG1hX21hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgYnVmLCBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmMtPnBkZXYtPmRldiwgZG1hX2RzdCkpIHsKKwkJZGV2X2VycigmYy0+cGRldi0+ZGV2LAorCQkJIkNvdWxkbid0IERNQSBtYXAgYSAlZCBieXRlIGJ1ZmZlclxuIiwKKwkJCWNvdW50KTsKKwkJZ290byBvdXRfY29weTsKKwl9CisKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyLAorCQkJCSAgICAgY291bnQgPj4gMiwgMSwgMCwgMCwgMCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCWRtYV9zcmMsIDAsIDApOworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJIGRtYV9kc3QsIDAsIDApOworCisJSU5JVF9DT01QTEVUSU9OKGMtPmRtYV9kb25lKTsKKwlvbWFwX3N0YXJ0X2RtYShjLT5kbWFfY2hhbm5lbCk7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCWRvbmUgPSAmYy0+ZG1hX2RvbmUuZG9uZTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCisJCWlmICgqZG9uZSkKKwkJCWJyZWFrOworCisJZG1hX3VubWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBkbWFfZHN0LCBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKKworCWlmICghKmRvbmUpIHsKKwkJZGV2X2VycigmYy0+cGRldi0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBETUFcbiIpOworCQlnb3RvIG91dF9jb3B5OworCX0KKworCXJldHVybiAwOworCitvdXRfY29weToKKwltZW1jcHkoYnVmLCB0aGlzLT5iYXNlICsgYnJhbV9vZmZzZXQsIGNvdW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwM19vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJCSBpbnQgb2Zmc2V0LCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgb21hcDJfb25lbmFuZCwgbXRkKTsKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWRtYV9hZGRyX3QgZG1hX3NyYywgZG1hX2RzdDsKKwlpbnQgYnJhbV9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXZvaWQgKmJ1ZiA9ICh2b2lkICopYnVmZmVyOworCXZvbGF0aWxlIHVuc2lnbmVkICpkb25lOworCisJYnJhbV9vZmZzZXQgPSBvbWFwMl9vbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQobXRkLCBhcmVhKSArIGFyZWEgKyBvZmZzZXQ7CisJaWYgKGJyYW1fb2Zmc2V0ICYgMyB8fCAoc2l6ZV90KWJ1ZiAmIDMgfHwgY291bnQgPCAzODQpCisJCWdvdG8gb3V0X2NvcHk7CisKKwkvKiBwYW5pY193cml0ZSgpIG1heSBiZSBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCAqLworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJZ290byBvdXRfY29weTsKKworCWlmIChidWYgPj0gaGlnaF9tZW1vcnkpIHsKKwkJc3RydWN0IHBhZ2UgKnAxOworCisJCWlmICgoKHNpemVfdClidWYgJiBQQUdFX01BU0spICE9CisJCSAgICAoKHNpemVfdCkoYnVmICsgY291bnQgLSAxKSAmIFBBR0VfTUFTSykpCisJCQlnb3RvIG91dF9jb3B5OworCQlwMSA9IHZtYWxsb2NfdG9fcGFnZShidWYpOworCQlpZiAoIXAxKQorCQkJZ290byBvdXRfY29weTsKKwkJYnVmID0gcGFnZV9hZGRyZXNzKHAxKSArICgoc2l6ZV90KWJ1ZiAmIH5QQUdFX01BU0spOworCX0KKworCWRtYV9zcmMgPSBkbWFfbWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBidWYsIGNvdW50LCBETUFfVE9fREVWSUNFKTsKKwlkbWFfZHN0ID0gYy0+cGh5c19iYXNlICsgYnJhbV9vZmZzZXQ7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZjLT5wZGV2LT5kZXYsIGRtYV9kc3QpKSB7CisJCWRldl9lcnIoJmMtPnBkZXYtPmRldiwKKwkJCSJDb3VsZG4ndCBETUEgbWFwIGEgJWQgYnl0ZSBidWZmZXJcbiIsCisJCQljb3VudCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyLAorCQkJCSAgICAgY291bnQgPj4gMiwgMSwgMCwgMCwgMCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCWRtYV9zcmMsIDAsIDApOworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJIGRtYV9kc3QsIDAsIDApOworCisJSU5JVF9DT01QTEVUSU9OKGMtPmRtYV9kb25lKTsKKwlvbWFwX3N0YXJ0X2RtYShjLT5kbWFfY2hhbm5lbCk7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCWRvbmUgPSAmYy0+ZG1hX2RvbmUuZG9uZTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpCisJCWlmICgqZG9uZSkKKwkJCWJyZWFrOworCisJZG1hX3VubWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBkbWFfZHN0LCBjb3VudCwgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAoISpkb25lKSB7CisJCWRldl9lcnIoJmMtPnBkZXYtPmRldiwgInRpbWVvdXQgd2FpdGluZyBmb3IgRE1BXG4iKTsKKwkJZ290byBvdXRfY29weTsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2NvcHk6CisJbWVtY3B5KHRoaXMtPmJhc2UgKyBicmFtX29mZnNldCwgYnVmLCBjb3VudCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKK2ludCBvbWFwM19vbmVuYW5kX3JlYWRfYnVmZmVycmFtKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYXJlYSwKKwkJCQkgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgb2Zmc2V0LAorCQkJCSBzaXplX3QgY291bnQpOworCitpbnQgb21hcDNfb25lbmFuZF93cml0ZV9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhLAorCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorCQkJCSAgaW50IG9mZnNldCwgc2l6ZV90IGNvdW50KTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKE1VTFRJX09NQVAyKQorCitzdGF0aWMgaW50IG9tYXAyX29uZW5hbmRfcmVhZF9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhLAorCQkJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBvZmZzZXQsCisJCQkJCXNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBvbWFwMl9vbmVuYW5kLCBtdGQpOworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJZG1hX2FkZHJfdCBkbWFfc3JjLCBkbWFfZHN0OworCWludCBicmFtX29mZnNldDsKKworCWJyYW1fb2Zmc2V0ID0gb21hcDJfb25lbmFuZF9idWZmZXJyYW1fb2Zmc2V0KG10ZCwgYXJlYSkgKyBhcmVhICsgb2Zmc2V0OworCS8qIERNQSBpcyBub3QgdXNlZC4gIFJldmlzaXQgUE0gcmVxdWlyZW1lbnRzIGJlZm9yZSBlbmFibGluZyBpdC4gKi8KKwlpZiAoMSB8fCAoYy0+ZG1hX2NoYW5uZWwgPCAwKSB8fAorCSAgICAoKHZvaWQgKikgYnVmZmVyID49ICh2b2lkICopIGhpZ2hfbWVtb3J5KSB8fCAoYnJhbV9vZmZzZXQgJiAzKSB8fAorCSAgICAoKCh1bnNpZ25lZCBpbnQpIGJ1ZmZlcikgJiAzKSB8fCAoY291bnQgPCAxMDI0KSB8fCAoY291bnQgJiAzKSkgeworCQltZW1jcHkoYnVmZmVyLCAoX19mb3JjZSB2b2lkICopKHRoaXMtPmJhc2UgKyBicmFtX29mZnNldCksCisJCSAgICAgICBjb3VudCk7CisJCXJldHVybiAwOworCX0KKworCWRtYV9zcmMgPSBjLT5waHlzX2Jhc2UgKyBicmFtX29mZnNldDsKKwlkbWFfZHN0ID0gZG1hX21hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgYnVmZmVyLCBjb3VudCwKKwkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmMtPnBkZXYtPmRldiwgZG1hX2RzdCkpIHsKKwkJZGV2X2VycigmYy0+cGRldi0+ZGV2LAorCQkJIkNvdWxkbid0IERNQSBtYXAgYSAlZCBieXRlIGJ1ZmZlclxuIiwKKwkJCWNvdW50KTsKKwkJcmV0dXJuIC0xOworCX0KKworCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCisJCQkJICAgICBjb3VudCAvIDQsIDEsIDAsIDAsIDApOworCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKKwkJCQlkbWFfc3JjLCAwLCAwKTsKKwlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCSBkbWFfZHN0LCAwLCAwKTsKKworCUlOSVRfQ09NUExFVElPTihjLT5kbWFfZG9uZSk7CisJb21hcF9zdGFydF9kbWEoYy0+ZG1hX2NoYW5uZWwpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmMtPmRtYV9kb25lKTsKKworCWRtYV91bm1hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgZG1hX2RzdCwgY291bnQsIERNQV9GUk9NX0RFVklDRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwMl9vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJCSBpbnQgb2Zmc2V0LCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgb21hcDJfb25lbmFuZCwgbXRkKTsKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWRtYV9hZGRyX3QgZG1hX3NyYywgZG1hX2RzdDsKKwlpbnQgYnJhbV9vZmZzZXQ7CisKKwlicmFtX29mZnNldCA9IG9tYXAyX29uZW5hbmRfYnVmZmVycmFtX29mZnNldChtdGQsIGFyZWEpICsgYXJlYSArIG9mZnNldDsKKwkvKiBETUEgaXMgbm90IHVzZWQuICBSZXZpc2l0IFBNIHJlcXVpcmVtZW50cyBiZWZvcmUgZW5hYmxpbmcgaXQuICovCisJaWYgKDEgfHwgKGMtPmRtYV9jaGFubmVsIDwgMCkgfHwKKwkgICAgKCh2b2lkICopIGJ1ZmZlciA+PSAodm9pZCAqKSBoaWdoX21lbW9yeSkgfHwgKGJyYW1fb2Zmc2V0ICYgMykgfHwKKwkgICAgKCgodW5zaWduZWQgaW50KSBidWZmZXIpICYgMykgfHwgKGNvdW50IDwgMTAyNCkgfHwgKGNvdW50ICYgMykpIHsKKwkJbWVtY3B5KChfX2ZvcmNlIHZvaWQgKikodGhpcy0+YmFzZSArIGJyYW1fb2Zmc2V0KSwgYnVmZmVyLAorCQkgICAgICAgY291bnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkbWFfc3JjID0gZG1hX21hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgKHZvaWQgKikgYnVmZmVyLCBjb3VudCwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CisJZG1hX2RzdCA9IGMtPnBoeXNfYmFzZSArIGJyYW1fb2Zmc2V0OworCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYy0+cGRldi0+ZGV2LCBkbWFfZHN0KSkgeworCQlkZXZfZXJyKCZjLT5wZGV2LT5kZXYsCisJCQkiQ291bGRuJ3QgRE1BIG1hcCBhICVkIGJ5dGUgYnVmZmVyXG4iLAorCQkJY291bnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgT01BUF9ETUFfREFUQV9UWVBFX1MxNiwKKwkJCQkgICAgIGNvdW50IC8gMiwgMSwgMCwgMCwgMCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCWRtYV9zcmMsIDAsIDApOworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJIGRtYV9kc3QsIDAsIDApOworCisJSU5JVF9DT01QTEVUSU9OKGMtPmRtYV9kb25lKTsKKwlvbWFwX3N0YXJ0X2RtYShjLT5kbWFfY2hhbm5lbCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmYy0+ZG1hX2RvbmUpOworCisJZG1hX3VubWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBkbWFfZHN0LCBjb3VudCwgRE1BX1RPX0RFVklDRSk7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworaW50IG9tYXAyX29uZW5hbmRfcmVhZF9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhLAorCQkJCSB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBvZmZzZXQsCisJCQkJIHNpemVfdCBjb3VudCk7CisKK2ludCBvbWFwMl9vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJICBpbnQgb2Zmc2V0LCBzaXplX3QgY291bnQpOworCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDJfb25lbmFuZF9kcml2ZXI7CisKK3N0YXRpYyBpbnQgX19hZGp1c3RfdGltaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYzsKKworCWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCUJVR19PTihjLT5zZXR1cCA9PSBOVUxMKTsKKworCS8qIERNQSBpcyBub3QgaW4gdXNlIHNvIHRoaXMgaXMgYWxsIHRoYXQgaXMgbmVlZGVkICovCisJLyogUmV2aXNpdCBmb3IgT01BUDMhICovCisJcmV0ID0gYy0+c2V0dXAoYy0+b25lbmFuZC5iYXNlLCBjLT5mcmVxKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBvbWFwMl9vbmVuYW5kX3JlcGhhc2Uodm9pZCkKK3sKKwlyZXR1cm4gZHJpdmVyX2Zvcl9lYWNoX2RldmljZSgmb21hcDJfb25lbmFuZF9kcml2ZXIuZHJpdmVyLCBOVUxMLAorCQkJCSAgICAgIE5VTEwsIF9fYWRqdXN0X3RpbWluZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBvbWFwMl9vbmVuYW5kX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwkvKiBXaXRoIGNlcnRhaW4gY29udGVudCBpbiB0aGUgYnVmZmVyIFJBTSwgdGhlIE9NQVAgYm9vdCBST00gY29kZQorCSAqIGNhbiByZWNvZ25pemUgdGhlIGZsYXNoIGNoaXAgaW5jb3JyZWN0bHkuIFplcm8gaXQgb3V0IGJlZm9yZQorCSAqIHNvZnQgcmVzZXQuCisJICovCisJbWVtc2V0KChfX2ZvcmNlIHZvaWQgKiljLT5vbmVuYW5kLmJhc2UsIDAsIE9ORU5BTkRfQlVGUkFNX1NJWkUpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwMl9vbmVuYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXBfb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYzsKKwlpbnQgcjsKKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKHBkYXRhID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGxhdGZvcm0gZGF0YSBtaXNzaW5nXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwMl9vbmVuYW5kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWluaXRfY29tcGxldGlvbigmYy0+aXJxX2RvbmUpOworCWluaXRfY29tcGxldGlvbigmYy0+ZG1hX2RvbmUpOworCWMtPmdwbWNfY3MgPSBwZGF0YS0+Y3M7CisJYy0+Z3Bpb19pcnEgPSBwZGF0YS0+Z3Bpb19pcnE7CisJYy0+ZG1hX2NoYW5uZWwgPSBwZGF0YS0+ZG1hX2NoYW5uZWw7CisJaWYgKGMtPmRtYV9jaGFubmVsIDwgMCkgeworCQkvKiBpZiAtMSwgZG9uJ3QgdXNlIERNQSAqLworCQljLT5ncGlvX2lycSA9IDA7CisJfQorCisJciA9IGdwbWNfY3NfcmVxdWVzdChjLT5ncG1jX2NzLCBPTkVOQU5EX0lPX1NJWkUsICZjLT5waHlzX2Jhc2UpOworCWlmIChyIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVxdWVzdCBHUE1DIENTXG4iKTsKKwkJZ290byBlcnJfa2ZyZWU7CisJfQorCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihjLT5waHlzX2Jhc2UsIE9ORU5BTkRfSU9fU0laRSwKKwkJCSAgICAgICBwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCByZXNlcnZlIG1lbW9yeSByZWdpb24gYXQgMHglMDhseCwgIgorCQkJInNpemU6IDB4JXhcbiIsCWMtPnBoeXNfYmFzZSwgT05FTkFORF9JT19TSVpFKTsKKwkJciA9IC1FQlVTWTsKKwkJZ290byBlcnJfZnJlZV9jczsKKwl9CisJYy0+b25lbmFuZC5iYXNlID0gaW9yZW1hcChjLT5waHlzX2Jhc2UsIE9ORU5BTkRfSU9fU0laRSk7CisJaWYgKGMtPm9uZW5hbmQuYmFzZSA9PSBOVUxMKSB7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWxlYXNlX21lbV9yZWdpb247CisJfQorCisJaWYgKHBkYXRhLT5vbmVuYW5kX3NldHVwICE9IE5VTEwpIHsKKwkJciA9IHBkYXRhLT5vbmVuYW5kX3NldHVwKGMtPm9uZW5hbmQuYmFzZSwgYy0+ZnJlcSk7CisJCWlmIChyIDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiT25lbmFuZCBwbGF0Zm9ybSBzZXR1cCBmYWlsZWQ6ICIKKwkJCQkiJWRcbiIsIHIpOworCQkJZ290byBlcnJfaW91bm1hcDsKKwkJfQorCQljLT5zZXR1cCA9IHBkYXRhLT5vbmVuYW5kX3NldHVwOworCX0KKworCWlmIChjLT5ncGlvX2lycSkgeworCQlpZiAoKHIgPSBvbWFwX3JlcXVlc3RfZ3BpbyhjLT5ncGlvX2lycSkpIDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8lZCBmb3IgIgorCQkJCSJPbmVOQU5EXG4iLCBjLT5ncGlvX2lycSk7CisJCQlnb3RvIGVycl9pb3VubWFwOworCX0KKwlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihjLT5ncGlvX2lycSwgMSk7CisKKwlpZiAoKHIgPSByZXF1ZXN0X2lycShPTUFQX0dQSU9fSVJRKGMtPmdwaW9faXJxKSwKKwkJCSAgICAgb21hcDJfb25lbmFuZF9pbnRlcnJ1cHQsIElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkgICAgIHBkZXYtPmRldi5kcml2ZXItPm5hbWUsIGMpKSA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2VfZ3BpbzsKKwl9CisKKwlpZiAoYy0+ZG1hX2NoYW5uZWwgPj0gMCkgeworCQlyID0gb21hcF9yZXF1ZXN0X2RtYSgwLCBwZGV2LT5kZXYuZHJpdmVyLT5uYW1lLAorCQkJCSAgICAgb21hcDJfb25lbmFuZF9kbWFfY2IsICh2b2lkICopIGMsCisJCQkJICAgICAmYy0+ZG1hX2NoYW5uZWwpOworCQlpZiAociA9PSAwKSB7CisJCQlvbWFwX3NldF9kbWFfd3JpdGVfbW9kZShjLT5kbWFfY2hhbm5lbCwKKwkJCQkJCU9NQVBfRE1BX1dSSVRFX05PTl9QT1NURUQpOworCQkJb21hcF9zZXRfZG1hX3NyY19kYXRhX3BhY2soYy0+ZG1hX2NoYW5uZWwsIDEpOworCQkJb21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKGMtPmRtYV9jaGFubmVsLAorCQkJCQkJICAgIE9NQVBfRE1BX0RBVEFfQlVSU1RfOCk7CisJCQlvbWFwX3NldF9kbWFfZGVzdF9kYXRhX3BhY2soYy0+ZG1hX2NoYW5uZWwsIDEpOworCQkJb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShjLT5kbWFfY2hhbm5lbCwKKwkJCQkJCSAgICAgT01BUF9ETUFfREFUQV9CVVJTVF84KTsKKwkJfSBlbHNlIHsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCQkJICJmYWlsZWQgdG8gYWxsb2NhdGUgRE1BIGZvciBPbmVOQU5ELCAiCisJCQkJICJ1c2luZyBQSU8gaW5zdGVhZFxuIik7CisJCQljLT5kbWFfY2hhbm5lbCA9IC0xOworCQl9CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgImluaXRpYWxpemluZyBvbiBDUyVkLCBwaHlzIGJhc2UgMHglMDhseCwgdmlydHVhbCAiCisJCSAiYmFzZSAlcFxuIiwgYy0+Z3BtY19jcywgYy0+cGh5c19iYXNlLAorCQkgYy0+b25lbmFuZC5iYXNlKTsKKworCWMtPnBkZXYgPSBwZGV2OworCWMtPm10ZC5uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsKKwljLT5tdGQucHJpdiA9ICZjLT5vbmVuYW5kOworCWMtPm10ZC5vd25lciA9IFRISVNfTU9EVUxFOworCisJaWYgKGMtPmRtYV9jaGFubmVsID49IDApIHsKKwkJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9ICZjLT5vbmVuYW5kOworCisJCXRoaXMtPndhaXQgPSBvbWFwMl9vbmVuYW5kX3dhaXQ7CisJCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQkJdGhpcy0+cmVhZF9idWZmZXJyYW0gPSBvbWFwM19vbmVuYW5kX3JlYWRfYnVmZmVycmFtOworCQkJdGhpcy0+d3JpdGVfYnVmZmVycmFtID0gb21hcDNfb25lbmFuZF93cml0ZV9idWZmZXJyYW07CisJCX0gZWxzZSB7CisJCQl0aGlzLT5yZWFkX2J1ZmZlcnJhbSA9IG9tYXAyX29uZW5hbmRfcmVhZF9idWZmZXJyYW07CisJCQl0aGlzLT53cml0ZV9idWZmZXJyYW0gPSBvbWFwMl9vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbTsKKwkJfQorCX0KKworCWlmICgociA9IG9uZW5hbmRfc2NhbigmYy0+bXRkLCAxKSkgPCAwKQorCQlnb3RvIGVycl9yZWxlYXNlX2RtYTsKKworCXN3aXRjaCAoKGMtPm9uZW5hbmQudmVyc2lvbl9pZCA+PiA0KSAmIDB4ZikgeworCWNhc2UgMDoKKwkJYy0+ZnJlcSA9IDQwOworCQlicmVhazsKKwljYXNlIDE6CisJCWMtPmZyZXEgPSA1NDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljLT5mcmVxID0gNjY7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYy0+ZnJlcSA9IDgzOworCQlicmVhazsKKwl9CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlpZiAocGRhdGEtPnBhcnRzICE9IE5VTEwpCisJCXIgPSBhZGRfbXRkX3BhcnRpdGlvbnMoJmMtPm10ZCwgcGRhdGEtPnBhcnRzLAorCQkJCSAgICAgICBwZGF0YS0+bnJfcGFydHMpOworCWVsc2UKKyNlbmRpZgorCQlyID0gYWRkX210ZF9kZXZpY2UoJmMtPm10ZCk7CisJaWYgKHIgPCAwKQorCQlnb3RvIGVycl9yZWxlYXNlX29uZW5hbmQ7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjKTsKKworCXJldHVybiAwOworCitlcnJfcmVsZWFzZV9vbmVuYW5kOgorCW9uZW5hbmRfcmVsZWFzZSgmYy0+bXRkKTsKK2Vycl9yZWxlYXNlX2RtYToKKwlpZiAoYy0+ZG1hX2NoYW5uZWwgIT0gLTEpCisJCW9tYXBfZnJlZV9kbWEoYy0+ZG1hX2NoYW5uZWwpOworCWlmIChjLT5ncGlvX2lycSkKKwkJZnJlZV9pcnEoT01BUF9HUElPX0lSUShjLT5ncGlvX2lycSksIGMpOworZXJyX3JlbGVhc2VfZ3BpbzoKKwlpZiAoYy0+Z3Bpb19pcnEpCisJCW9tYXBfZnJlZV9ncGlvKGMtPmdwaW9faXJxKTsKK2Vycl9pb3VubWFwOgorCWlvdW5tYXAoYy0+b25lbmFuZC5iYXNlKTsKK2Vycl9yZWxlYXNlX21lbV9yZWdpb246CisJcmVsZWFzZV9tZW1fcmVnaW9uKGMtPnBoeXNfYmFzZSwgT05FTkFORF9JT19TSVpFKTsKK2Vycl9mcmVlX2NzOgorCWdwbWNfY3NfZnJlZShjLT5ncG1jX2NzKTsKK2Vycl9rZnJlZToKKwlrZnJlZShjKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBvbWFwMl9vbmVuYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJQlVHX09OKGMgPT0gTlVMTCk7CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlpZiAoYy0+cGFydHMpCisJCWRlbF9tdGRfcGFydGl0aW9ucygmYy0+bXRkKTsKKwllbHNlCisJCWRlbF9tdGRfZGV2aWNlKCZjLT5tdGQpOworI2Vsc2UKKwlkZWxfbXRkX2RldmljZSgmYy0+bXRkKTsKKyNlbmRpZgorCisJb25lbmFuZF9yZWxlYXNlKCZjLT5tdGQpOworCWlmIChjLT5kbWFfY2hhbm5lbCAhPSAtMSkKKwkJb21hcF9mcmVlX2RtYShjLT5kbWFfY2hhbm5lbCk7CisJb21hcDJfb25lbmFuZF9zaHV0ZG93bihwZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpZiAoYy0+Z3Bpb19pcnEpIHsKKwkJZnJlZV9pcnEoT01BUF9HUElPX0lSUShjLT5ncGlvX2lycSksIGMpOworCQlvbWFwX2ZyZWVfZ3BpbyhjLT5ncGlvX2lycSk7CisJfQorCWlvdW5tYXAoYy0+b25lbmFuZC5iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oYy0+cGh5c19iYXNlLCBPTkVOQU5EX0lPX1NJWkUpOworCWtmcmVlKGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXAyX29uZW5hbmRfZHJpdmVyID0geworCS5wcm9iZQkJPSBvbWFwMl9vbmVuYW5kX3Byb2JlLAorCS5yZW1vdmUJCT0gb21hcDJfb25lbmFuZF9yZW1vdmUsCisJLnNodXRkb3duCT0gb21hcDJfb25lbmFuZF9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9vbmVuYW5kX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJPbmVOQU5EIGRyaXZlciBpbml0aWFsaXppbmdcbiIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXAyX29uZW5hbmRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9tYXAyX29uZW5hbmRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwMl9vbmVuYW5kX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG9tYXAyX29uZW5hbmRfaW5pdCk7Cittb2R1bGVfZXhpdChvbWFwMl9vbmVuYW5kX2V4aXQpOworCitNT0RVTEVfQUxJQVMoRFJJVkVSX05BTUUpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSmFya2tvIExhdmluZW4gPGphcmtrby5sYXZpbmVuQG5va2lhLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR2x1ZSBsYXllciBmb3IgT25lTkFORCBmbGFzaCBvbiBPTUFQMiAvIE9NQVAzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwppbmRleCA5MjZjZjNhLi45MGVkMzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKQEAgLTE3OTQsNyArMTc5NCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWluc3RyLT5mYWlsX2FkZHIgPSAweGZmZmZmZmZmOworCWluc3RyLT5mYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV047CiAKIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KIAlvbmVuYW5kX2dldF9kZXZpY2UobXRkLCBGTF9FUkFTSU5HKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3NzZmRjLmMgYi9kcml2ZXJzL210ZC9zc2ZkYy5jCmluZGV4IGE1ZjNkNjAuLjMzYTVkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3NzZmRjLmMKKysrIGIvZHJpdmVycy9tdGQvc3NmZGMuYwpAQCAtMzIxLDggKzMyMSw3IEBACiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMSwKIAkJIlNTRkRDX1JPOiBjaXNfYmxvY2s9JWQsZXJhc2Vfc2l6ZT0lZCxtYXBfbGVuPSVkLG5fem9uZXM9JWRcbiIsCiAJCXNzZmRjLT5jaXNfYmxvY2ssIHNzZmRjLT5lcmFzZV9zaXplLCBzc2ZkYy0+bWFwX2xlbiwKLQkJKHNzZmRjLT5tYXBfbGVuICsgTUFYX1BIWVNfQkxLX1BFUl9aT05FIC0gMSkgLwotCQlNQVhfUEhZU19CTEtfUEVSX1pPTkUpOworCQlESVZfUk9VTkRfVVAoc3NmZGMtPm1hcF9sZW4sIE1BWF9QSFlTX0JMS19QRVJfWk9ORSkpOwogCiAJLyogU2V0IGdlb21ldHJ5ICovCiAJc3NmZGMtPmhlYWRzID0gMTY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvY2Rldi5jIGIvZHJpdmVycy9tdGQvdWJpL2NkZXYuYwppbmRleCAwM2M3NTliLi5iMzBhMGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvY2Rldi5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9jZGV2LmMKQEAgLTEwNCwxMiArMTA0LDkgQEAKIAlzdHJ1Y3QgdWJpX3ZvbHVtZV9kZXNjICpkZXNjOwogCWludCB2b2xfaWQgPSBpbWlub3IoaW5vZGUpIC0gMSwgbW9kZSwgdWJpX251bTsKIAotCWxvY2tfa2VybmVsKCk7CiAJdWJpX251bSA9IHViaV9tYWpvcjJudW0oaW1ham9yKGlub2RlKSk7Ci0JaWYgKHViaV9udW0gPCAwKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKwlpZiAodWJpX251bSA8IDApCiAJCXJldHVybiB1YmlfbnVtOwotCX0KIAogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKIAkJbW9kZSA9IFVCSV9SRUFEV1JJVEU7CkBAIC0xMTksNyArMTE2LDYgQEAKIAlkYmdfZ2VuKCJvcGVuIHZvbHVtZSAlZCwgbW9kZSAlZCIsIHZvbF9pZCwgbW9kZSk7CiAKIAlkZXNjID0gdWJpX29wZW5fdm9sdW1lKHViaV9udW0sIHZvbF9pZCwgbW9kZSk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCWlmIChJU19FUlIoZGVzYykpCiAJCXJldHVybiBQVFJfRVJSKGRlc2MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwppbmRleCA5NjdiYjQ0Li40ZjJkYWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKQEAgLTM4Nyw3ICszODcsNyBAQAogCQlwbnVtLCB2b2xfaWQsIGxudW0sIGVjLCBzcW51bSwgYml0ZmxpcHMpOwogCiAJc3YgPSBhZGRfdm9sdW1lKHNpLCB2b2xfaWQsIHBudW0sIHZpZF9oZHIpOwotCWlmIChJU19FUlIoc3YpIDwgMCkKKwlpZiAoSVNfRVJSKHN2KSkKIAkJcmV0dXJuIFBUUl9FUlIoc3YpOwogCiAJaWYgKHNpLT5tYXhfc3FudW0gPCBzcW51bSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS92dGJsLmMgYi9kcml2ZXJzL210ZC91YmkvdnRibC5jCmluZGV4IDIxN2QwZTEuLjMzM2M4OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS92dGJsLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3Z0YmwuYwpAQCAtMjQ0LDggKzI0NCw4IEBACiAJCX0KIAogCQlpZiAocmVzZXJ2ZWRfcGVicyA+IHViaS0+Z29vZF9wZWJfY291bnQpIHsKLQkJCWRiZ19lcnIoInRvbyBsYXJnZSByZXNlcnZlZF9wZWJzLCBnb29kIFBFQnMgJWQiLAotCQkJCXViaS0+Z29vZF9wZWJfY291bnQpOworCQkJZGJnX2VycigidG9vIGxhcmdlIHJlc2VydmVkX3BlYnMgJWQsIGdvb2QgUEVCcyAlZCIsCisJCQkJcmVzZXJ2ZWRfcGVicywgdWJpLT5nb29kX3BlYl9jb3VudCk7CiAJCQllcnIgPSA5OwogCQkJZ290byBiYWQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAxLmMgYi9kcml2ZXJzL25ldC8zYzUwMS5jCmluZGV4IDViYTRiYWIuLjdkMTVlN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAxLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDEuYwpAQCAtMTcsNyArMTcsNyBAQAogCUFubmFwb2xpcyBNRCAyMTQwMwogCiAgICAgRml4ZWQgKGFnYWluISkgdGhlIG1pc3NpbmcgaW50ZXJydXB0IGxvY2tpbmcgb24gVFgvUlggc2hpZnRpbmcuCi0JQWxhbiBDb3ggPEFsYW4uQ294QGxpbnV4Lm9yZz4KKwlBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogCiAgICAgUmVtb3ZlZCBjYWxscyB0byBpbml0X2V0aGVyZGV2IHNpbmNlIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQsIGFuZAogICAgIGNsZWFuZWQgdXAgbW9kdWxhcml6YXRpb24ganVzdCBhIGJpdC4gVGhlIGRyaXZlciBzdGlsbCBhbGxvd3Mgb25seQpAQCAtMjksMTYgKzI5LDE2IEBACiAgICAgdGhlIGJvYXJkLiBOb3cgZ2V0dGluZyAxNTBLL3NlY29uZCBGVFAgd2l0aCBhIDNjNTAxIGNhcmQuIFN0aWxsIHBsYXlpbmcKICAgICB3aXRoIGEgVFgtVFggb3B0aW1pc2F0aW9uIHRvIHNlZSBpZiB3ZSBjYW4gdG91Y2ggMTgwLTIwMEsvc2Vjb25kIGFzIHNlZW1zCiAgICAgdGhlb3JldGljYWxseSBtYXhpbXVtLgotCQkxOTk1MDQwMiBBbGFuIENveCA8QWxhbi5Db3hAbGludXgub3JnPgorCQkxOTk1MDQwMiBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogCiAgICAgQ2xlYW5lZCB1cCBmb3IgMi4zLnggYmVjYXVzZSB3ZSBicm9rZSBTTVAgbm93LgotCQkyMDAwMDIwOCBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorCQkyMDAwMDIwOCBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogCiAgICAgQ2hlY2sgdXAgcGFzcyBmb3IgMi41LiBOb3RoaW5nIHNpZ25pZmljYW50IGNoYW5nZWQKLQkJMjAwMjEwMDkgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKwkJMjAwMjEwMDkgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KIAogICAgIEZpeGVkIHplcm8gZmlsbCBjb3JuZXIgY2FzZQotCQkyMDAzMDEwNCBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorCQkyMDAzMDEwNCBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogCiAKICAgIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0IHRoZSAicHJlZmVycmVkIGZvcm0iIG9mIHRoaXMgY29kZSBpcyBvbmUgd2hpY2gKQEAgLTEwNCw3ICsxMDQsNyBAQAogCiAKIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9Ci0JRFJWX05BTUUgIi5jOiAiIERSVl9WRVJTSU9OICIgQWxhbiBDb3ggKGFsYW5AcmVkaGF0LmNvbSkuXG4iOworCURSVl9OQU1FICIuYzogIiBEUlZfVkVSU0lPTiAiIEFsYW4gQ294IChhbGFuQGx4b3JndWsudWt1dS5vcmcudWspLlxuIjsKIAogLyoKICAqCUJyYWluZGFtYWdlIHJlbWFpbmluZzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA5LmMgYi9kcml2ZXJzL25ldC8zYzUwOS5jCmluZGV4IGI5ZDA5N2MuLjNhN2JjNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA5LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDkuYwpAQCAtNDAsNyArNDAsNyBAQAogCQl2MS4xNCAxMC8xNS85NyBBdm9pZGVkIHdhaXRpbmcuLmRpc2NhcmQgbWVzc2FnZSBmb3IgZmFzdCBtYWNoaW5lcyAtZGpiCiAJCXYxLjE1IDEvMzEvOTggRmFzdGVyIHJlY292ZXJ5IGZvciBUeCBlcnJvcnMuIC1kamIKIAkJdjEuMTYgMi8zLzk4IERpZmZlcmVudCBJRCBwb3J0IGhhbmRsaW5nIHRvIGF2b2lkIHNvdW5kIGNhcmRzLiAtZGpiCi0JCXYxLjE4IDEyTWFyMjAwMSBBbmRyZXcgTW9ydG9uIDxhbmRyZXdtQHVvdy5lZHUuYXU+CisJCXYxLjE4IDEyTWFyMjAwMSBBbmRyZXcgTW9ydG9uCiAJCQktIEF2b2lkIGJvZ3VzIGRldGVjdCBvZiAzYzU5MCdzIChBbmRyemVqIEtyenlzenRvZm93aWN6KQogCQkJLSBSZXZpZXdlZCBhZ2FpbnN0IDEuMTggZnJvbSBzY3lsZC5jb20KIAkJdjEuMThhIDE3Tm92MjAwMSBKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUxNS5jIGIvZHJpdmVycy9uZXQvM2M1MTUuYwppbmRleCBlNGUzMjQxLi5hMGY4YjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUxNS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTE1LmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogCTIwMDEvMTEvMTcgLSBBZGRlZCBldGh0b29sIHN1cHBvcnQgKGpnYXJ6aWspCiAKLQkyMDAyLzEwLzI4IC0gTG9ja2luZyB1cGRhdGVzIGZvciAyLjUgKGFsYW5AcmVkaGF0LmNvbSkKKwkyMDAyLzEwLzI4IC0gTG9ja2luZyB1cGRhdGVzIGZvciAyLjUgKGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51aykKIAogKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggNDkxZWUxNi4uOWJhMjk1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC05MCw3ICs5MCw3IEBACiAjaW5jbHVkZSA8bGludXgvZWlzYS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CQkJLyogRm9yIE5SX0lSUVMgb25seS4gKi8KKyNpbmNsdWRlIDxhc20vaXJxLmg+CQkJLyogRm9yIG5yX2lycXMgb25seS4gKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0xMjIxLDcgKzEyMjEsNyBAQAogCWlmIChwcmludF9pbmZvKQogCQlwcmludGsoIiwgSVJRICVkXG4iLCBkZXYtPmlycSk7CiAJLyogVGVsbCB0aGVtIGFib3V0IGFuIGludmFsaWQgSVJRLiAqLwotCWlmIChkZXYtPmlycSA8PSAwIHx8IGRldi0+aXJxID49IE5SX0lSUVMpCisJaWYgKGRldi0+aXJxIDw9IDAgfHwgZGV2LT5pcnEgPj0gbnJfaXJxcykKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiICoqKiBXYXJuaW5nOiBJUlEgJWQgaXMgdW5saWtlbHkgdG8gd29yayEgKioqXG4iLAogCQkJICAgZGV2LT5pcnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCBlOWQ1Mjk0Li5hZDMwMWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTI0MDAsNyArMjQwMCw3IEBACiAJICB3aWxsIGJlIGNhbGxlZCBlaGVhLgogCiBjb25maWcgRU5JQwotCXRyaXN0YXRlICJFLCB0aGUgQ2lzY28gMTBHIEV0aGVybmV0IE5JQyIKKwl0cmlzdGF0ZSAiQ2lzY28gMTBHIEV0aGVybmV0IE5JQyBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJICYmIElORVQKIAlzZWxlY3QgSU5FVF9MUk8KIAloZWxwCkBAIC0yNDEwLDcgKzI0MTAsNiBAQAogCXRyaXN0YXRlICJJbnRlbChSKSAxMEdiRSBQQ0kgRXhwcmVzcyBhZGFwdGVycyBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJICYmIElORVQKIAlzZWxlY3QgSU5FVF9MUk8KLQlzZWxlY3QgSU5URUxfSU9BVERNQQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGZhbWlseSBvZgogCSAgYWRhcHRlcnMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbwpAQCAtMjQyNiw2ICsyNDI1LDExIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpeGdiZS4KIAorY29uZmlnIElYR0JFX0RDQQorCWJvb2wKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIElYR0JFICYmIERDQSAmJiAhKElYR0JFPXkgJiYgRENBPW0pCisKIGNvbmZpZyBJWEdCCiAJdHJpc3RhdGUgIkludGVsKFIpIFBSTy8xMEdiRSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCkBAIC0yNDYyLDcgKzI0NjYsNiBAQAogCXNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgQ1JDMzIKIAlzZWxlY3QgSU5FVF9MUk8KLQlzZWxlY3QgSU5URUxfSU9BVERNQQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE15cmljb20gTXlyaS0xMEcgRHVhbCBQcm90b2NvbCBpbnRlcmZhY2UgaW4KIAkgIEV0aGVybmV0IG1vZGUuIElmIHRoZSBlZXByb20gb24geW91ciBib2FyZCBpcyBub3QgcmVjZW50IGVub3VnaCwKQEAgLTI0NzQsNiArMjQ3NywxMSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgbXlyaTEwZ2UuCiAKK2NvbmZpZyBNWVJJMTBHRV9EQ0EKKwlib29sCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBNWVJJMTBHRSAmJiBEQ0EgJiYgIShNWVJJMTBHRT15ICYmIERDQT1tKQorCiBjb25maWcgTkVUWEVOX05JQwogCXRyaXN0YXRlICJOZXRYZW4gTXVsdGkgcG9ydCAoMS8xMCkgR2lnYWJpdCBFdGhlcm5ldCBOSUMiCiAJZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wcy5jCmluZGV4IGEwYjRjODUuLjczNWZjOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMKKysrIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYwpAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgLSBKYXkgU2NodWxpc3QgPGpzY2hsc3RAc2FtYmEub3JnPgogICoKICAqCVdpdGggbW9yZSB0aGFuIGEgbGl0dGxlIGhlbHAgZnJvbTsKLSAqCS0gQWxhbiBDb3ggPEFsYW4uQ294QGxpbnV4Lm9yZz4gCisgKgktIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICogICAgICBEZXJpdmVkIGZyb206CiAgKiAgICAgIC0gc2tlbGV0b24uYzogQSBuZXR3b3JrIGRyaXZlciBvdXRsaW5lIGZvciBsaW51eC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwppbmRleCA3YjkyMjAxLi4wMTliMTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC05NCw4ICs5NCw4IEBACiBzdGF0aWMgdm9pZCBhdTEwMDBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBhdTEwMDBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGlmcmVxICosIGludCk7Ci1zdGF0aWMgaW50IG1kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIGludCk7Ci1zdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgaW50LCB1MTYpOworc3RhdGljIGludCBhdTEwMDBfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgaW50KTsKK3N0YXRpYyB2b2lkIGF1MTAwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgaW50LCB1MTYpOwogc3RhdGljIHZvaWQgYXUxMDAwX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHZvaWQgZW5hYmxlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQpOwogCkBAIC0xOTEsNyArMTkxLDcgQEAKIC8qCiAgKiBNSUkgb3BlcmF0aW9ucwogICovCi1zdGF0aWMgaW50IG1kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIsIGludCByZWcpCitzdGF0aWMgaW50IGF1MTAwMF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCBpbnQgcmVnKQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CiAJdm9sYXRpbGUgdTMyICpjb25zdCBtaWlfY29udHJvbF9yZWcgPSAmYXVwLT5tYWMtPm1paV9jb250cm9sOwpAQCAtMjI1LDcgKzIyNSw4IEBACiAJcmV0dXJuIChpbnQpKm1paV9kYXRhX3JlZzsKIH0KIAotc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIsIGludCByZWcsIHUxNiB2YWx1ZSkKK3N0YXRpYyB2b2lkIGF1MTAwMF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwKKwkJCSAgICAgIGludCByZWcsIHUxNiB2YWx1ZSkKIHsKIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OwogCXZvbGF0aWxlIHUzMiAqY29uc3QgbWlpX2NvbnRyb2xfcmVnID0gJmF1cC0+bWFjLT5taWlfY29udHJvbDsKQEAgLTI0OSw3ICsyNTAsNyBAQAogCSptaWlfY29udHJvbF9yZWcgPSBtaWlfY29udHJvbDsKIH0KIAotc3RhdGljIGludCBtZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnbnVtKQorc3RhdGljIGludCBhdTEwMDBfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ251bSkKIHsKIAkvKiBXQVJOSU5HOiBidXMtPnBoeV9tYXBbcGh5X2FkZHJdLmF0dGFjaGVkX2RldiA9PSBkZXYgZG9lcwogCSAqIF9OT1RfIGhvbGQgKGUuZy4gd2hlbiBQSFkgaXMgYWNjZXNzZWQgdGhyb3VnaCBvdGhlciBNQUMncyBNSUkgYnVzKSAqLwpAQCAtMjU3LDIxICsyNTgsMjEgQEAKIAogCWVuYWJsZV9tYWMoZGV2LCAwKTsgLyogbWFrZSBzdXJlIHRoZSBNQUMgYXNzb2NpYXRlZCB3aXRoIHRoaXMKIAkJCSAgICAgKiBtaWlfYnVzIGlzIGVuYWJsZWQgKi8KLQlyZXR1cm4gbWRpb19yZWFkKGRldiwgcGh5X2FkZHIsIHJlZ251bSk7CisJcmV0dXJuIGF1MTAwMF9tZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgcmVnbnVtKTsKIH0KIAotc3RhdGljIGludCBtZGlvYnVzX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ251bSwKLQkJCSB1MTYgdmFsdWUpCitzdGF0aWMgaW50IGF1MTAwMF9tZGlvYnVzX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ251bSwKKwkJCQl1MTYgdmFsdWUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmNvbnN0IGRldiA9IGJ1cy0+cHJpdjsKIAogCWVuYWJsZV9tYWMoZGV2LCAwKTsgLyogbWFrZSBzdXJlIHRoZSBNQUMgYXNzb2NpYXRlZCB3aXRoIHRoaXMKIAkJCSAgICAgKiBtaWlfYnVzIGlzIGVuYWJsZWQgKi8KLQltZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIHJlZ251bSwgdmFsdWUpOworCWF1MTAwMF9tZGlvX3dyaXRlKGRldiwgcGh5X2FkZHIsIHJlZ251bSwgdmFsdWUpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1kaW9idXNfcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKK3N0YXRpYyBpbnQgYXUxMDAwX21kaW9idXNfcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqY29uc3QgZGV2ID0gYnVzLT5wcml2OwogCkBAIC03MDMsOSArNzA0LDkgQEAKIAkJZ290byBlcnJfb3V0OwogCiAJYXVwLT5taWlfYnVzLT5wcml2ID0gZGV2OwotCWF1cC0+bWlpX2J1cy0+cmVhZCA9IG1kaW9idXNfcmVhZDsKLQlhdXAtPm1paV9idXMtPndyaXRlID0gbWRpb2J1c193cml0ZTsKLQlhdXAtPm1paV9idXMtPnJlc2V0ID0gbWRpb2J1c19yZXNldDsKKwlhdXAtPm1paV9idXMtPnJlYWQgPSBhdTEwMDBfbWRpb2J1c19yZWFkOworCWF1cC0+bWlpX2J1cy0+d3JpdGUgPSBhdTEwMDBfbWRpb2J1c193cml0ZTsKKwlhdXAtPm1paV9idXMtPnJlc2V0ID0gYXUxMDAwX21kaW9idXNfcmVzZXQ7CiAJYXVwLT5taWlfYnVzLT5uYW1lID0gImF1MTAwMF9ldGhfbWlpIjsKIAlzbnByaW50ZihhdXAtPm1paV9idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIGF1cC0+bWFjX2lkKTsKIAlhdXAtPm1paV9idXMtPmlycSA9IGttYWxsb2Moc2l6ZW9mKGludCkqUEhZX01BWF9BRERSLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMgYi9kcml2ZXJzL25ldC9iZmluX21hYy5jCmluZGV4IGEwZDQxYzUuLmI0NThkNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvYmZpbl9tYWMuYwpAQCAtMjUzLDcgKzI1Myw3IEBACiAgKiBNSUkgb3BlcmF0aW9ucwogICovCiAvKiBXYWl0IHVudGlsIHRoZSBwcmV2aW91cyBNREMvTURJTyB0cmFuc2FjdGlvbiBoYXMgY29tcGxldGVkICovCi1zdGF0aWMgdm9pZCBtZGlvX3BvbGwodm9pZCkKK3N0YXRpYyB2b2lkIGJmaW5fbWRpb19wb2xsKHZvaWQpCiB7CiAJaW50IHRpbWVvdXRfY250ID0gTUFYX1RJTUVPVVRfQ05UOwogCkBAIC0yNjksMjUgKzI2OSwyNSBAQAogfQogCiAvKiBSZWFkIGFuIG9mZi1jaGlwIHJlZ2lzdGVyIGluIGEgUEhZIHRocm91Z2ggdGhlIE1EQy9NRElPIHBvcnQgKi8KLXN0YXRpYyBpbnQgbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ251bSkKK3N0YXRpYyBpbnQgYmZpbl9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnbnVtKQogewotCW1kaW9fcG9sbCgpOworCWJmaW5fbWRpb19wb2xsKCk7CiAKIAkvKiByZWFkIG1vZGUgKi8KIAliZmluX3dyaXRlX0VNQUNfU1RBQUREKFNFVF9QSFlBRCgodTE2KSBwaHlfYWRkcikgfAogCQkJCVNFVF9SRUdBRCgodTE2KSByZWdudW0pIHwKIAkJCQlTVEFCVVNZKTsKIAotCW1kaW9fcG9sbCgpOworCWJmaW5fbWRpb19wb2xsKCk7CiAKIAlyZXR1cm4gKGludCkgYmZpbl9yZWFkX0VNQUNfU1RBREFUKCk7CiB9CiAKIC8qIFdyaXRlIGFuIG9mZi1jaGlwIHJlZ2lzdGVyIGluIGEgUEhZIHRocm91Z2ggdGhlIE1EQy9NRElPIHBvcnQgKi8KLXN0YXRpYyBpbnQgbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdudW0sCi0JCQkgdTE2IHZhbHVlKQorc3RhdGljIGludCBiZmluX21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnbnVtLAorCQkJICAgICAgdTE2IHZhbHVlKQogewotCW1kaW9fcG9sbCgpOworCWJmaW5fbWRpb19wb2xsKCk7CiAKIAliZmluX3dyaXRlX0VNQUNfU1RBREFUKCh1MzIpIHZhbHVlKTsKIApAQCAtMjk3LDEyICsyOTcsMTIgQEAKIAkJCQlTVEFPUCB8CiAJCQkJU1RBQlVTWSk7CiAKLQltZGlvX3BvbGwoKTsKKwliZmluX21kaW9fcG9sbCgpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWRpb2J1c19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQorc3RhdGljIGludCBiZmluX21kaW9idXNfcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTgxOCw3ICs4MTgsNyBAQAogCWJmaW5fd3JpdGVfRE1BMV9DT05GSUcocnhfbGlzdF9oZWFkLT5kZXNjX2EuY29uZmlnKTsKIAogCS8qIFdhaXQgTUlJIGRvbmUgKi8KLQltZGlvX3BvbGwoKTsKKwliZmluX21kaW9fcG9sbCgpOwogCiAJLyogV2UgZW5hYmxlIG9ubHkgUlggaGVyZSAqLwogCS8qIEFTVFAgICA6IEVuYWJsZSBBdXRvbWF0aWMgUGFkIFN0cmlwcGluZwpAQCAtMTA2Myw5ICsxMDYzLDkgQEAKIAkJZ290byBvdXRfZXJyX21kaW9idXNfYWxsb2M7CiAKIAlscC0+bWlpX2J1cy0+cHJpdiA9IG5kZXY7Ci0JbHAtPm1paV9idXMtPnJlYWQgPSBtZGlvYnVzX3JlYWQ7Ci0JbHAtPm1paV9idXMtPndyaXRlID0gbWRpb2J1c193cml0ZTsKLQlscC0+bWlpX2J1cy0+cmVzZXQgPSBtZGlvYnVzX3Jlc2V0OworCWxwLT5taWlfYnVzLT5yZWFkID0gYmZpbl9tZGlvYnVzX3JlYWQ7CisJbHAtPm1paV9idXMtPndyaXRlID0gYmZpbl9tZGlvYnVzX3dyaXRlOworCWxwLT5taWlfYnVzLT5yZXNldCA9IGJmaW5fbWRpb2J1c19yZXNldDsKIAlscC0+bWlpX2J1cy0+bmFtZSA9ICJiZmluX21hY19tZGlvIjsKIAlzbnByaW50ZihscC0+bWlpX2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIjAiKTsKIAlscC0+bWlpX2J1cy0+aXJxID0ga21hbGxvYyhzaXplb2YoaW50KSpQSFlfTUFYX0FERFIsIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3M4OXgwLmMgYi9kcml2ZXJzL25ldC9jczg5eDAuYwppbmRleCBhMjhkZTgxLi43MTA3NjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jczg5eDAuYworKysgYi9kcml2ZXJzL25ldC9jczg5eDAuYwpAQCAtMzYsOCArMzYsNyBAQAogCiAgIEFsYW4gQ294ICAgICAgICAgIDogUmVtb3ZlZCAxLjIgc3VwcG9ydCwgYWRkZWQgMi4xIGV4dHJhIGNvdW50ZXJzLgogCi0gIEFuZHJldyBNb3J0b24gICAgIDogYW5kcmV3bUB1b3cuZWR1LmF1Ci0gICAgICAgICAgICAgICAgICAgIDogS2VybmVsIDIuMy40OAorICBBbmRyZXcgTW9ydG9uICAgICA6IEtlcm5lbCAyLjMuNDgKICAgICAgICAgICAgICAgICAgICAgOiBIYW5kbGUga21hbGxvYygpIGZhaWx1cmVzCiAgICAgICAgICAgICAgICAgICAgIDogT3RoZXIgcmVzb3VyY2UgYWxsb2NhdGlvbiBmaXhlcwogICAgICAgICAgICAgICAgICAgICA6IEFkZCBTTVAgbG9ja3MKQEAgLTQ5LDcgKzQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgOiBGaXhlZCBhbiBvdXQtb2YtbWVtIGJ1ZyBpbiBkbWFfcngoKQogICAgICAgICAgICAgICAgICAgICA6IFVwZGF0ZWQgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NzODl4MC50eHQKIAotICBBbmRyZXcgTW9ydG9uICAgICA6IGFuZHJld21AdW93LmVkdS5hdSAvIEtlcm5lbCAyLjMuOTktcHJlMQorICBBbmRyZXcgTW9ydG9uICAgICA6IEtlcm5lbCAyLjMuOTktcHJlMQogICAgICAgICAgICAgICAgICAgICA6IFVzZSBza2JfcmVzZXJ2ZSB0byBsb25nd29yZCBhbGlnbiBJUCBoZWFkZXIgKHR3byBwbGFjZXMpCiAgICAgICAgICAgICAgICAgICAgIDogUmVtb3ZlIGEgZGVsYXkgbG9vcCBmcm9tIGRtYV9yeCgpCiAgICAgICAgICAgICAgICAgICAgIDogUmVwbGFjZSAnMTAwJyB3aXRoIEhaCkBAIC01NywxMSArNTYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgOiBBZGRlZCAnY3M4OXgwX2RtYT1OJyBrZXJuZWwgYm9vdCBvcHRpb24KICAgICAgICAgICAgICAgICAgICAgOiBDb3JyZWN0bHkgaW5pdGlhbGlzZSBscC0+bG9jayBpbiBub24tbW9kdWxlIGNvbXBpbGUKIAotICBBbmRyZXcgTW9ydG9uICAgICA6IGFuZHJld21AdW93LmVkdS5hdSAvIEtlcm5lbCAyLjMuOTktcHJlNC0xCisgIEFuZHJldyBNb3J0b24gICAgIDogS2VybmVsIDIuMy45OS1wcmU0LTEKICAgICAgICAgICAgICAgICAgICAgOiBNT0RfSU5DL0RFQyByYWNlIGZpeCAoc2VlCiAgICAgICAgICAgICAgICAgICAgIDogaHR0cDovL3d3dy51d3NnLmluZGlhbmEuZWR1L2h5cGVybWFpbC9saW51eC9rZXJuZWwvMDAwMy4zLzE1MzIuaHRtbCkKIAotICBBbmRyZXcgTW9ydG9uICAgICA6IGFuZHJld21AdW93LmVkdS5hdSAvIEtlcm5lbCAyLjQuMC10ZXN0Ny1wcmUyCisgIEFuZHJldyBNb3J0b24gICAgIDogS2VybmVsIDIuNC4wLXRlc3Q3LXByZTIKICAgICAgICAgICAgICAgICAgICAgOiBFbmhhbmNlZCBFRVBST00gc3VwcG9ydCB0byBjb3ZlciBtb3JlIGRldmljZXMsCiAgICAgICAgICAgICAgICAgICAgIDogICBhYnN0cmFjdGVkIElSUSBtYXBwaW5nIHRvIHN1cHBvcnQgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgYXJjaAogICAgICAgICAgICAgICAgICAgICA6ICAgKEphc29uIEd1bnRob3JwZSA8amdnQHVhbGJlcnRhLmNhPikKQEAgLTE1Niw3ICsxNTUsNyBAQAogI2luY2x1ZGUgImNzODl4MC5oIgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9Ci0iY3M4OXgwLmM6IHYyLjQuMy1wcmUxIFJ1c3NlbGwgTmVsc29uIDxuZWxzb25AY3J5bndyLmNvbT4sIEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT5cbiI7CisiY3M4OXgwLmM6IHYyLjQuMy1wcmUxIFJ1c3NlbGwgTmVsc29uIDxuZWxzb25AY3J5bndyLmNvbT4sIEFuZHJldyBNb3J0b25cbiI7CiAKICNkZWZpbmUgRFJWX05BTUUgImNzODl4MCIKIApAQCAtMTg3Nyw3ICsxODc2LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0ModXNlX2RtYSAsICIoaWdub3JlZCkiKTsKICNlbmRpZgogCi1NT0RVTEVfQVVUSE9SKCJNaWtlIENydXNlLCBSdXNzd2xsIE5lbHNvbiA8bmVsc29uQGNyeW53ci5jb20+LCBBbmRyZXcgTW9ydG9uIDxhbmRyZXdtQHVvdy5lZHUuYXU+Iik7CitNT0RVTEVfQVVUSE9SKCJNaWtlIENydXNlLCBSdXNzd2xsIE5lbHNvbiA8bmVsc29uQGNyeW53ci5jb20+LCBBbmRyZXcgTW9ydG9uIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCmluZGV4IDQ1NWVmNTIuLmJjOGUyNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDggQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMKaW5kZXggNzQ0ZmFjMC4uNWMzYzA1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWVsMTAwMi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FlbDEwMDIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKaW5kZXggNTkzZmI2NC4uZTMxMmQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19jdGxfZGVmcy5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfY3RsX2RlZnMuaAppbmRleCA2YWQ5MjQwLi4xZDhkNDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19jdGxfZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2N0bF9kZWZzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDggQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19kZWZzLmggYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19kZWZzLmgKaW5kZXggNDVlOTIxNi4uNDdlNTM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2RlZnMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2lvY3RsLmggYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19pb2N0bC5oCmluZGV4IDNlOGQ1ZmEuLmIxOWU0MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2lvY3RsLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfaW9jdGwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwppbmRleCBmMzE5ODVkLi4xYWNlNDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCmluZGV4IDBmNmZkNjMuLjI2NWFhOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmggYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmgKaW5kZXggN2EzNzkxMy4uZDUxNGU1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2Zpcm13YXJlX2V4cG9ydHMuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2Zpcm13YXJlX2V4cG9ydHMuaAppbmRleCBiNzVkZGQ4Li4wZDliMGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9maXJtd2FyZV9leHBvcnRzLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvZmlybXdhcmVfZXhwb3J0cy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA3IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA4IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvbDJ0LmMgYi9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYwppbmRleCBiMmM1MzE0Li40NDA3YWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2wydC5oIGIvZHJpdmVycy9uZXQvY3hnYjMvbDJ0LmgKaW5kZXggNDJjZTY1Zi4uZmQzZWIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvbDJ0LmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvbDJ0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDggQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9tYzUuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL21jNS5jCmluZGV4IDRjNGQ2ZTguLjNiNTUxN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL21jNS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL21jNS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwppbmRleCA4NzkxOTQxLi5jNjQ4MGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2NwbC5oIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfY3BsLmgKaW5kZXggOTE3OTcwZS4uODUyYzM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfY3BsLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfY3BsLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDggQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYwppbmRleCA0ZGE1YjA5Li45NjhmNjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDggQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy90M2NkZXYuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzY2Rldi5oCmluZGV4IDBhMjFjZmIuLmJlNTVlOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzY2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzY2Rldi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IENoZWxzaW8gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggQ2hlbHNpbyBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3ZlcnNpb24uaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL3ZlcnNpb24uaAppbmRleCAyOWRiNzExLi5iYjg2OThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvdmVyc2lvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMzUsNyArMzUsNyBAQAogI2RlZmluZSBEUlZfREVTQyAiQ2hlbHNpbyBUMyBOZXR3b3JrIERyaXZlciIKICNkZWZpbmUgRFJWX05BTUUgImN4Z2IzIgogLyogRHJpdmVyIHZlcnNpb24gKi8KLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMC1rbyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMS4wLWtvIgogCiAvKiBGaXJtd2FyZSB2ZXJzaW9uICovCiAjZGVmaW5lIEZXX1ZFUlNJT05fTUFKT1IgNwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvdnNjODIxMS5jIGIvZHJpdmVycy9uZXQvY3hnYjMvdnNjODIxMS5jCmluZGV4IDMwNmMyZGMuLjMzZjk1NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3ZzYzgyMTEuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy92c2M4MjExLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jIGIvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYwppbmRleCBmZmRjMGExLi45ZDc3ODY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lZXhwcmVzcy5jIGIvZHJpdmVycy9uZXQvZWV4cHJlc3MuYwppbmRleCA3OTVjNTk0Li5iNzUxYzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lZXhwcmVzcy5jCisrKyBiL2RyaXZlcnMvbmV0L2VleHByZXNzLmMKQEAgLTgsNyArOCw3IEBACiAgKgogICogTWFueSBtb2RpZmljYXRpb25zLCBhbmQgY3VycmVudGx5IG1haW50YWluZWQsIGJ5CiAgKiAgUGhpbGlwIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgotICogQWRkZWQgdGhlIENvbXBhcSBMVEUgIEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CisgKiBBZGRlZCB0aGUgQ29tcGFxIExURSAgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqIEFkZGVkIE1DQSBzdXBwb3J0IEFkYW0gRnJpdHpsZXIKICAqCiAgKiBOb3RlIC0gdGhpcyBkcml2ZXIgaXMgZXhwZXJpbWVudGFsIHN0aWxsIC0gaXQgaGFzIHByb2JsZW1zIG9uIGZhc3RlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKaW5kZXggZjNhNDdhOC4uMTgwZTk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgogCiAjaW5jbHVkZSAiY3FfZW5ldF9kZXNjLmgiCiAjaW5jbHVkZSAidm5pY19kZXYuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2ZkeC5jCmluZGV4IDE3YWM2OTcuLmI2YTgxNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYwpAQCAtNDE2LDEwICs0MTYsMTAgQEAKIAlpZiAoIWRldiB8fCAhYmMpCiAJCXJldHVybiAtRU5YSU87CiAJaWYgKCFkZXYtPmJhc2VfYWRkciB8fCBkZXYtPmJhc2VfYWRkciA+IDB4ZmZmZi1TRVIxMl9FWFRFTlQgfHwKLQkgICAgZGV2LT5pcnEgPCAyIHx8IGRldi0+aXJxID4gTlJfSVJRUykgeworCSAgICBkZXYtPmlycSA8IDIgfHwgZGV2LT5pcnEgPiBucl9pcnFzKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImJheWNvbV9zZXJfZmR4OiBpbnZhbGlkIHBvcnRudW1iZXIgKG1heCAldSkgIgogCQkJCSJvciBpcnEgKDIgPD0gaXJxIDw9ICVkKVxuIiwKLQkJCQkweGZmZmYtU0VSMTJfRVhURU5ULCBOUl9JUlFTKTsKKwkJCQkweGZmZmYtU0VSMTJfRVhURU5ULCBucl9pcnFzKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAJaWYgKGJjLT5iYXVkIDwgMzAwIHx8IGJjLT5iYXVkID4gNDgwMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYwppbmRleCA0NWFlOWQxLi5jMTdlMzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYwpAQCAtMTQ2NSw3ICsxNDY1LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJJbml0IFo4NTMwIGRyaXZlcjogJXUgY2hhbm5lbHMsIElSUSIsIE5jaGlwcyoyKTsKIAkKIAlmbGFnPSIgIjsKLQlmb3IgKGsgPSAwOyBrIDwgTlJfSVJRUzsgaysrKQorCWZvciAoayA9IDA7IGsgPCBucl9pcnFzOyBrKyspCiAJCWlmIChJdmVjW2tdLnVzZWQpIAogCQl7CiAJCQlwcmludGsoIiVzJWQiLCBmbGFnLCBrKTsKQEAgLTE3MjgsNyArMTcyOCw3IEBACiAKIAkJCWlmIChod2NmZy5pcnEgPT0gMikgaHdjZmcuaXJxID0gOTsKIAotCQkJaWYgKGh3Y2ZnLmlycSA8IDAgfHwgaHdjZmcuaXJxID49IE5SX0lSUVMpCisJCQlpZiAoaHdjZmcuaXJxIDwgMCB8fCBod2NmZy5pcnEgPj0gbnJfaXJxcykKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQkKIAkJCWlmICghSXZlY1tod2NmZy5pcnFdLnVzZWQgJiYgaHdjZmcuaXJxKQpAQCAtMjE0OCw3ICsyMTQ4LDcgQEAKIAkJfQogCQkKIAkvKiBUbyB1bmxvYWQgdGhlIHBvcnQgbXVzdCBiZSBjbG9zZWQgc28gbm8gcmVhbCBJUlEgcGVuZGluZyAqLwotCWZvciAoaz0wOyBrIDwgTlJfSVJRUyA7IGsrKykKKwlmb3IgKGsgPSAwOyBrIDwgbnJfaXJxcyA7IGsrKykKIAkJaWYgKEl2ZWNba10udXNlZCkgZnJlZV9pcnEoaywgTlVMTCk7CiAJCQogCWxvY2FsX2lycV9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL0tjb25maWcgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9LY29uZmlnCmluZGV4IGJjZWM3MzIuLjc4YTE2MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvS2NvbmZpZwpAQCAtNjIsMyArNjIsMTUgQEAKIGNvbmZpZyBJQk1fTkVXX0VNQUNfRU1BQzQKIAlib29sCiAJZGVmYXVsdCBuCisKK2NvbmZpZyBJQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMCisJYm9vbAorCWRlZmF1bHQgbgorCitjb25maWcgSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUCisJYm9vbAorCWRlZmF1bHQgbgorCitjb25maWcgSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSCisJYm9vbAorCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCmluZGV4IDU4ZGZkMzIuLmVmY2YyMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKQEAgLTIwMiwxMyArMjAyLDE1IEBACiB7CiAJcmV0dXJuICBwaHlfbW9kZSA9PSBQSFlfTU9ERV9HTUlJIHx8CiAJCXBoeV9tb2RlID09IFBIWV9NT0RFX1JHTUlJIHx8CisJCXBoeV9tb2RlID09IFBIWV9NT0RFX1NHTUlJIHx8CiAJCXBoeV9tb2RlID09IFBIWV9NT0RFX1RCSSB8fAogCQlwaHlfbW9kZSA9PSBQSFlfTU9ERV9SVEJJOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBlbWFjX3BoeV9ncGNzKGludCBwaHlfbW9kZSkKIHsKLQlyZXR1cm4gIHBoeV9tb2RlID09IFBIWV9NT0RFX1RCSSB8fAorCXJldHVybiAgcGh5X21vZGUgPT0gUEhZX01PREVfU0dNSUkgfHwKKwkJcGh5X21vZGUgPT0gUEhZX01PREVfVEJJIHx8CiAJCXBoeV9tb2RlID09IFBIWV9NT0RFX1JUQkk7CiB9CiAKQEAgLTU2Miw4ICs1NjQsOSBAQAogCXN3aXRjaCAoZGV2LT5waHkuc3BlZWQpIHsKIAljYXNlIFNQRUVEXzEwMDA6CiAJCWlmIChlbWFjX3BoeV9ncGNzKGRldi0+cGh5Lm1vZGUpKSB7Ci0JCQltcjEgfD0gRU1BQ19NUjFfTUZfMTAwMEdQQ1MgfAotCQkJCUVNQUNfTVIxX01GX0lQUEEoZGV2LT5waHkuYWRkcmVzcyk7CisJCQltcjEgfD0gRU1BQ19NUjFfTUZfMTAwMEdQQ1MgfCBFTUFDX01SMV9NRl9JUFBBKAorCQkJCShkZXYtPnBoeS5ncGNzX2FkZHJlc3MgIT0gMHhmZmZmZmZmZikgPworCQkJCSBkZXYtPnBoeS5ncGNzX2FkZHJlc3MgOiBkZXYtPnBoeS5hZGRyZXNzKTsKIAogCQkJLyogUHV0IHNvbWUgYXJiaXRyYXJ5IE9VSSwgTWFudWYgJiBSZXYgSURzIHNvIHdlIGNhbgogCQkJICogaWRlbnRpZnkgdGhpcyBHUENTIFBIWSBsYXRlci4KQEAgLTY3NSw4ICs2NzgsMTIgQEAKIAlvdXRfYmUzMigmcC0+aXNlciwgIHIpOwogCiAJLyogV2UgbmVlZCB0byB0YWtlIEdQQ1MgUEhZIG91dCBvZiBpc29sYXRlIG1vZGUgYWZ0ZXIgRU1BQyByZXNldCAqLwotCWlmIChlbWFjX3BoeV9ncGNzKGRldi0+cGh5Lm1vZGUpKQotCQllbWFjX21paV9yZXNldF9waHkoJmRldi0+cGh5KTsKKwlpZiAoZW1hY19waHlfZ3BjcyhkZXYtPnBoeS5tb2RlKSkgeworCQlpZiAoZGV2LT5waHkuZ3Bjc19hZGRyZXNzICE9IDB4ZmZmZmZmZmYpCisJCQllbWFjX21paV9yZXNldF9ncGNzKCZkZXYtPnBoeSk7CisJCWVsc2UKKwkJCWVtYWNfbWlpX3Jlc2V0X3BoeSgmZGV2LT5waHkpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtODgxLDcgKzg4OCw5IEBACiAJc3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCWludCByZXM7CiAKLQlyZXMgPSBfX2VtYWNfbWRpb19yZWFkKGRldi0+bWRpb19pbnN0YW5jZSA/IGRldi0+bWRpb19pbnN0YW5jZSA6IGRldiwKKwlyZXMgPSBfX2VtYWNfbWRpb19yZWFkKChkZXYtPm1kaW9faW5zdGFuY2UgJiYKKwkJCQlkZXYtPnBoeS5ncGNzX2FkZHJlc3MgIT0gaWQpID8KKwkJCQlkZXYtPm1kaW9faW5zdGFuY2UgOiBkZXYsCiAJCQkgICAgICAgKHU4KSBpZCwgKHU4KSByZWcpOwogCXJldHVybiByZXM7CiB9CkBAIC04OTAsNyArODk5LDkgQEAKIHsKIAlzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKLQlfX2VtYWNfbWRpb193cml0ZShkZXYtPm1kaW9faW5zdGFuY2UgPyBkZXYtPm1kaW9faW5zdGFuY2UgOiBkZXYsCisJX19lbWFjX21kaW9fd3JpdGUoKGRldi0+bWRpb19pbnN0YW5jZSAmJgorCQkJICAgZGV2LT5waHkuZ3Bjc19hZGRyZXNzICE9IGlkKSA/CisJCQkgICBkZXYtPm1kaW9faW5zdGFuY2UgOiBkZXYsCiAJCQkgICh1OCkgaWQsICh1OCkgcmVnLCAodTE2KSB2YWwpOwogfQogCkBAIC0yMzgyLDcgKzIzOTMsMTEgQEAKIAkJICogWFhYIEkgcHJvYmFibHkgc2hvdWxkIG1vdmUgdGhlc2Ugc2V0dGluZ3MgdG8gdGhlIGRldiB0cmVlCiAJCSAqLwogCQlkZXYtPnBoeS5hZGRyZXNzID0gLTE7Ci0JCWRldi0+cGh5LmZlYXR1cmVzID0gU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfTUlJOworCQlkZXYtPnBoeS5mZWF0dXJlcyA9IFNVUFBPUlRFRF9NSUk7CisJCWlmIChlbWFjX3BoeV9zdXBwb3J0c19naWdlKGRldi0+cGh5X21vZGUpKQorCQkJZGV2LT5waHkuZmVhdHVyZXMgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsOworCQllbHNlCisJCQlkZXYtPnBoeS5mZWF0dXJlcyB8PSBTVVBQT1JURURfMTAwYmFzZVRfRnVsbDsKIAkJZGV2LT5waHkucGF1c2UgPSAxOwogCiAJCXJldHVybiAwOwpAQCAtMjQyMSw3ICsyNDM2LDkgQEAKIAkJICogTm90ZSB0aGF0IHRoZSBidXN5X3BoeV9tYXAgaXMgY3VycmVudGx5IGdsb2JhbAogCQkgKiB3aGlsZSBpdCBzaG91bGQgcHJvYmFibHkgYmUgcGVyLUFTSUMuLi4KIAkJICovCi0JCWRldi0+cGh5LmFkZHJlc3MgPSBkZXYtPmNlbGxfaW5kZXg7CisJCWRldi0+cGh5LmdwY3NfYWRkcmVzcyA9IGRldi0+Z3Bjc19hZGRyZXNzOworCQlpZiAoZGV2LT5waHkuZ3Bjc19hZGRyZXNzID09IDB4ZmZmZmZmZmYpCisJCQlkZXYtPnBoeS5hZGRyZXNzID0gZGV2LT5jZWxsX2luZGV4OwogCX0KIAogCWVtYWNfY29uZmlndXJlKGRldik7CkBAIC0yNTMxLDYgKzI1NDgsOCBAQAogCQlkZXYtPnBoeV9hZGRyZXNzID0gMHhmZmZmZmZmZjsKIAlpZiAoZW1hY19yZWFkX3VpbnRfcHJvcChucCwgInBoeS1tYXAiLCAmZGV2LT5waHlfbWFwLCAwKSkKIAkJZGV2LT5waHlfbWFwID0gMHhmZmZmZmZmZjsKKwlpZiAoZW1hY19yZWFkX3VpbnRfcHJvcChucCwgImdwY3MtYWRkcmVzcyIsICZkZXYtPmdwY3NfYWRkcmVzcywgMCkpCisJCWRldi0+Z3Bjc19hZGRyZXNzID0gMHhmZmZmZmZmZjsKIAlpZiAoZW1hY19yZWFkX3VpbnRfcHJvcChucC0+cGFyZW50LCAiY2xvY2stZnJlcXVlbmN5IiwgJmRldi0+b3BiX2J1c19mcmVxLCAxKSkKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAoZW1hY19yZWFkX3VpbnRfcHJvcChucCwgInRhaC1kZXZpY2UiLCAmZGV2LT50YWhfcGgsIDApKQpAQCAtMjU4NSw2ICsyNjA0LDggQEAKIAkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLGVtYWMtNDQwZXAiKSB8fAogCQkgICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sZW1hYy00NDBnciIpKQogCQkJZGV2LT5mZWF0dXJlcyB8PSBFTUFDX0ZUUl80NDBFUF9QSFlfQ0xLX0ZJWDsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLGVtYWMtNDA1ZXoiKSkKKwkJCWRldi0+ZmVhdHVyZXMgfD0gRU1BQ19GVFJfTk9fRkxPV19DT05UUk9MXzQweDsKIAl9CiAKIAkvKiBGaXh1cCBzb21lIGZlYXR1cmUgYml0cyBiYXNlZCBvbiB0aGUgZGV2aWNlIHRyZWUgKi8KQEAgLTI4NDIsNiArMjg2Myw5IEBACiAJICAgICAgIG5kZXYtPmRldl9hZGRyWzBdLCBuZGV2LT5kZXZfYWRkclsxXSwgbmRldi0+ZGV2X2FkZHJbMl0sCiAJICAgICAgIG5kZXYtPmRldl9hZGRyWzNdLCBuZGV2LT5kZXZfYWRkcls0XSwgbmRldi0+ZGV2X2FkZHJbNV0pOwogCisJaWYgKGRldi0+cGh5X21vZGUgPT0gUEhZX01PREVfU0dNSUkpCisJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IGluIFNHTUlJIG1vZGVcbiIsIG5kZXYtPm5hbWUpOworCiAJaWYgKGRldi0+cGh5LmFkZHJlc3MgPj0gMCkKIAkJcHJpbnRrKCIlczogZm91bmQgJXMgUEhZICgweCUwMngpXG4iLCBuZGV2LT5uYW1lLAogCQkgICAgICAgZGV2LT5waHkuZGVmLT5uYW1lLCBkZXYtPnBoeS5hZGRyZXNzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuaCBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuaAppbmRleCA1Y2E3MGU1Li4xOGQ1NmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5oCkBAIC0xOTAsNiArMTkwLDkgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCQlsaW5rX3dvcms7CiAJaW50CQkJCWxpbmtfcG9sbGluZzsKIAorCS8qIEdQQ1MgUEhZIGluZm9zICovCisJdTMyCQkJCWdwY3NfYWRkcmVzczsKKwogCS8qIFNoYXJlZCBNRElPIGlmIGFueSAqLwogCXUzMgkJCQltZGlvX3BoOwogCXN0cnVjdCBvZl9kZXZpY2UJCSptZGlvX2RldjsKQEAgLTM0NSw2ICszNDgsOSBAQAogI2lmZGVmIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkKIAkgICAgRU1BQ19GVFJfSEFTX1JHTUlJCXwKICNlbmRpZgorI2lmZGVmIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMCisJICAgIEVNQUNfRlRSX05PX0ZMT1dfQ09OVFJPTF80MHggfAorI2VuZGlmCiAJRU1BQ19GVFJfNDYwRVhfUEhZX0NMS19GSVggfAogCUVNQUNfRlRSXzQ0MEVQX1BIWV9DTEtfRklYLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL21hbC5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvbWFsLmMKaW5kZXggMTBjMjY3Yi4uMTgzOWQzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvbWFsLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvbWFsLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgPGFzbS9kY3ItcmVncy5oPgogCiBzdGF0aWMgaW50IG1hbF9jb3VudDsKIApAQCAtMjc5LDYgKzI4MCwxMCBAQAogCW1hbF9zY2hlZHVsZV9wb2xsKG1hbCk7CiAJc2V0X21hbF9kY3JuKG1hbCwgTUFMX1RYRU9CSVNSLCByKTsKIAorCWlmIChtYWxfaGFzX2ZlYXR1cmUobWFsLCBNQUxfRlRSX0NMRUFSX0lDSU5UU1RBVCkpCisJCW10ZGNyaShTRFIwLCBEQ1JOX1NEUl9JQ0lOVFNUQVQsCisJCQkJKG1mZGNyaShTRFIwLCBEQ1JOX1NEUl9JQ0lOVFNUQVQpIHwgSUNJTlRTVEFUX0lDVFgpKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMjkzLDYgKzI5OCwxMCBAQAogCW1hbF9zY2hlZHVsZV9wb2xsKG1hbCk7CiAJc2V0X21hbF9kY3JuKG1hbCwgTUFMX1JYRU9CSVNSLCByKTsKIAorCWlmIChtYWxfaGFzX2ZlYXR1cmUobWFsLCBNQUxfRlRSX0NMRUFSX0lDSU5UU1RBVCkpCisJCW10ZGNyaShTRFIwLCBEQ1JOX1NEUl9JQ0lOVFNUQVQsCisJCQkJKG1mZGNyaShTRFIwLCBEQ1JOX1NEUl9JQ0lOVFNUQVQpIHwgSUNJTlRTVEFUX0lDUlgpKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMzM2LDYgKzM0NSwyNSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGlycXJldHVybl90IG1hbF9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQoreworCXN0cnVjdCBtYWxfaW5zdGFuY2UgKm1hbCA9IGRldl9pbnN0YW5jZTsKKwl1MzIgZXNyID0gZ2V0X21hbF9kY3JuKG1hbCwgTUFMX0VTUik7CisKKwlpZiAoZXNyICYgTUFMX0VTUl9FVkIpIHsKKwkJLyogZGVzY3JpcHRvciBlcnJvciAqLworCQlpZiAoZXNyICYgTUFMX0VTUl9ERSkgeworCQkJaWYgKGVzciAmIE1BTF9FU1JfQ0lEVCkKKwkJCQlyZXR1cm4gbWFsX3J4ZGUoaXJxLCBkZXZfaW5zdGFuY2UpOworCQkJZWxzZQorCQkJCXJldHVybiBtYWxfdHhkZShpcnEsIGRldl9pbnN0YW5jZSk7CisJCX0gZWxzZSB7IC8qIFNFUlIgKi8KKwkJCXJldHVybiBtYWxfc2VycihpcnEsIGRldl9pbnN0YW5jZSk7CisJCX0KKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCiB2b2lkIG1hbF9wb2xsX2Rpc2FibGUoc3RydWN0IG1hbF9pbnN0YW5jZSAqbWFsLCBzdHJ1Y3QgbWFsX2NvbW1hYyAqY29tbWFjKQogewogCS8qIFNwaW5sb2NrLXR5cGUgc2VtYW50aWNzOiBvbmx5IG9uZSBjYWxsZXIgZGlzYWJsZSBwb2xsIGF0IGEgdGltZSAqLwpAQCAtNDkzLDYgKzUyMSw4IEBACiAJdW5zaWduZWQgaW50IGRjcl9iYXNlOwogCWNvbnN0IHUzMiAqcHJvcDsKIAl1MzIgY2ZnOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJaXJxX2hhbmRsZXJfdCBoZGxyX3NlcnIsIGhkbHJfdHhkZSwgaGRscl9yeGRlOwogCiAJbWFsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1hbF9pbnN0YW5jZSksIEdGUF9LRVJORUwpOwogCWlmICghbWFsKSB7CkBAIC01NDIsMTEgKzU3MiwyMSBAQAogCQlnb3RvIGZhaWw7CiAJfQogCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG9mZGV2LT5ub2RlLCAiaWJtLG1jbWFsLTQwNWV6IikpCisJCW1hbC0+ZmVhdHVyZXMgfD0gKE1BTF9GVFJfQ0xFQVJfSUNJTlRTVEFUIHwKKwkJCQlNQUxfRlRSX0NPTU1PTl9FUlJfSU5UKTsKKwogCW1hbC0+dHhlb2JfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2ZkZXYtPm5vZGUsIDApOwogCW1hbC0+cnhlb2JfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2ZkZXYtPm5vZGUsIDEpOwogCW1hbC0+c2Vycl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgMik7Ci0JbWFsLT50eGRlX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9mZGV2LT5ub2RlLCAzKTsKLQltYWwtPnJ4ZGVfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2ZkZXYtPm5vZGUsIDQpOworCisJaWYgKG1hbF9oYXNfZmVhdHVyZShtYWwsIE1BTF9GVFJfQ09NTU9OX0VSUl9JTlQpKSB7CisJCW1hbC0+dHhkZV9pcnEgPSBtYWwtPnJ4ZGVfaXJxID0gbWFsLT5zZXJyX2lycTsKKwl9IGVsc2UgeworCQltYWwtPnR4ZGVfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2ZkZXYtPm5vZGUsIDMpOworCQltYWwtPnJ4ZGVfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2ZkZXYtPm5vZGUsIDQpOworCX0KKwogCWlmIChtYWwtPnR4ZW9iX2lycSA9PSBOT19JUlEgfHwgbWFsLT5yeGVvYl9pcnEgPT0gTk9fSVJRIHx8CiAJICAgIG1hbC0+c2Vycl9pcnEgPT0gTk9fSVJRIHx8IG1hbC0+dHhkZV9pcnEgPT0gTk9fSVJRIHx8CiAJICAgIG1hbC0+cnhkZV9pcnEgPT0gTk9fSVJRKSB7CkBAIC02MDgsMTYgKzY0OCwyNiBAQAogCQkJICAgICBzaXplb2Yoc3RydWN0IG1hbF9kZXNjcmlwdG9yKSAqCiAJCQkgICAgIG1hbF9yeF9iZF9vZmZzZXQobWFsLCBpKSk7CiAKLQllcnIgPSByZXF1ZXN0X2lycShtYWwtPnNlcnJfaXJxLCBtYWxfc2VyciwgMCwgIk1BTCBTRVJSIiwgbWFsKTsKKwlpZiAobWFsX2hhc19mZWF0dXJlKG1hbCwgTUFMX0ZUUl9DT01NT05fRVJSX0lOVCkpIHsKKwkJaXJxZmxhZ3MgPSBJUlFGX1NIQVJFRDsKKwkJaGRscl9zZXJyID0gaGRscl90eGRlID0gaGRscl9yeGRlID0gbWFsX2ludDsKKwl9IGVsc2UgeworCQlpcnFmbGFncyA9IDA7CisJCWhkbHJfc2VyciA9IG1hbF9zZXJyOworCQloZGxyX3R4ZGUgPSBtYWxfdHhkZTsKKwkJaGRscl9yeGRlID0gbWFsX3J4ZGU7CisJfQorCisJZXJyID0gcmVxdWVzdF9pcnEobWFsLT5zZXJyX2lycSwgaGRscl9zZXJyLCBpcnFmbGFncywgIk1BTCBTRVJSIiwgbWFsKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWwyOwotCWVyciA9IHJlcXVlc3RfaXJxKG1hbC0+dHhkZV9pcnEsIG1hbF90eGRlLCAwLCAiTUFMIFRYIERFIiwgbWFsKTsKKwllcnIgPSByZXF1ZXN0X2lycShtYWwtPnR4ZGVfaXJxLCBoZGxyX3R4ZGUsIGlycWZsYWdzLCAiTUFMIFRYIERFIiwgbWFsKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWwzOwogCWVyciA9IHJlcXVlc3RfaXJxKG1hbC0+dHhlb2JfaXJxLCBtYWxfdHhlb2IsIDAsICJNQUwgVFggRU9CIiwgbWFsKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWw0OwotCWVyciA9IHJlcXVlc3RfaXJxKG1hbC0+cnhkZV9pcnEsIG1hbF9yeGRlLCAwLCAiTUFMIFJYIERFIiwgbWFsKTsKKwllcnIgPSByZXF1ZXN0X2lycShtYWwtPnJ4ZGVfaXJxLCBoZGxyX3J4ZGUsIGlycWZsYWdzLCAiTUFMIFJYIERFIiwgbWFsKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWw1OwogCWVyciA9IHJlcXVlc3RfaXJxKG1hbC0+cnhlb2JfaXJxLCBtYWxfcnhlb2IsIDAsICJNQUwgUlggRU9CIiwgbWFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL21hbC5oIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvbWFsLmgKaW5kZXggNzE3ZGMzOC4uMmYwYTg3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvbWFsLmgKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvbWFsLmgKQEAgLTIxMyw2ICsyMTMsOCBAQAogCXN0cnVjdCBvZl9kZXZpY2UJKm9mZGV2OwogCWludAkJCWluZGV4OwogCXNwaW5sb2NrX3QJCWxvY2s7CisKKwl1bnNpZ25lZCBpbnQgZmVhdHVyZXM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHUzMiBnZXRfbWFsX2Rjcm4oc3RydWN0IG1hbF9pbnN0YW5jZSAqbWFsLCBpbnQgcmVnKQpAQCAtMjI1LDYgKzIyNywzOCBAQAogCWRjcl93cml0ZShtYWwtPmRjcl9ob3N0LCByZWcsIHZhbCk7CiB9CiAKKy8qIEZlYXR1cmVzIG9mIHZhcmlvdXMgTUFMIGltcGxlbWVudGF0aW9ucyAqLworCisvKiBTZXQgaWYgeW91IGhhdmUgaW50ZXJydXB0IGNvYWxlc2NpbmcgYW5kIHlvdSBoYXZlIHRvIGNsZWFyIHRoZSBTRFIKKyAqIHJlZ2lzdGVyIGZvciBUWEVPQiBhbmQgUlhFT0IgaW50ZXJydXB0cyB0byB3b3JrCisgKi8KKyNkZWZpbmUgTUFMX0ZUUl9DTEVBUl9JQ0lOVFNUQVQJMHgwMDAwMDAwMQorCisvKiBTZXQgaWYgeW91ciBNQUwgaGFzIFNFUlIsIFRYREUsIGFuZCBSWERFIE9SJ2QgaW50byBhIHNpbmdsZSBVSUMKKyAqIGludGVycnVwdAorICovCisjZGVmaW5lIE1BTF9GVFJfQ09NTU9OX0VSUl9JTlQJMHgwMDAwMDAwMgorCitlbnVtIHsKKwlNQUxfRlRSU19BTFdBWVMgPSAwLAorCisJTUFMX0ZUUlNfUE9TU0lCTEUgPQorI2lmZGVmIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQKKwkJTUFMX0ZUUl9DTEVBUl9JQ0lOVFNUQVQgfAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUgorCQlNQUxfRlRSX0NPTU1PTl9FUlJfSU5UIHwKKyNlbmRpZgorCQkwLAorfTsKKworc3RhdGljIGlubGluZSBpbnQgbWFsX2hhc19mZWF0dXJlKHN0cnVjdCBtYWxfaW5zdGFuY2UgKmRldiwKKwkJdW5zaWduZWQgbG9uZyBmZWF0dXJlKQoreworCXJldHVybiAoTUFMX0ZUUlNfQUxXQVlTICYgZmVhdHVyZSkgfHwKKwkJKE1BTF9GVFJTX1BPU1NJQkxFICYgZGV2LT5mZWF0dXJlcyAmIGZlYXR1cmUpOworfQorCiAvKiBSZWdpc3RlciBNQUwgZGV2aWNlcyAqLwogaW50IG1hbF9pbml0KHZvaWQpOwogdm9pZCBtYWxfZXhpdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL3BoeS5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvcGh5LmMKaW5kZXggOTE2NGFiYi4uYzQwY2Q4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvcGh5LmMKQEAgLTM4LDYgKzM4LDE2IEBACiAJcGh5LT5tZGlvX3dyaXRlKHBoeS0+ZGV2LCBwaHktPmFkZHJlc3MsIHJlZywgdmFsKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZ3Bjc19waHlfcmVhZChzdHJ1Y3QgbWlpX3BoeSAqcGh5LCBpbnQgcmVnKQoreworCXJldHVybiBwaHktPm1kaW9fcmVhZChwaHktPmRldiwgcGh5LT5ncGNzX2FkZHJlc3MsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGNzX3BoeV93cml0ZShzdHJ1Y3QgbWlpX3BoeSAqcGh5LCBpbnQgcmVnLCBpbnQgdmFsKQoreworCXBoeS0+bWRpb193cml0ZShwaHktPmRldiwgcGh5LT5ncGNzX2FkZHJlc3MsIHJlZywgdmFsKTsKK30KKwogaW50IGVtYWNfbWlpX3Jlc2V0X3BoeShzdHJ1Y3QgbWlpX3BoeSAqcGh5KQogewogCWludCB2YWw7CkBAIC02Miw2ICs3MiwzNyBAQAogCXJldHVybiBsaW1pdCA8PSAwOwogfQogCitpbnQgZW1hY19taWlfcmVzZXRfZ3BjcyhzdHJ1Y3QgbWlpX3BoeSAqcGh5KQoreworCWludCB2YWw7CisJaW50IGxpbWl0ID0gMTAwMDA7CisKKwl2YWwgPSBncGNzX3BoeV9yZWFkKHBoeSwgTUlJX0JNQ1IpOworCXZhbCAmPSB+KEJNQ1JfSVNPTEFURSB8IEJNQ1JfQU5FTkFCTEUpOworCXZhbCB8PSBCTUNSX1JFU0VUOworCWdwY3NfcGh5X3dyaXRlKHBoeSwgTUlJX0JNQ1IsIHZhbCk7CisKKwl1ZGVsYXkoMzAwKTsKKworCXdoaWxlIChsaW1pdC0tKSB7CisJCXZhbCA9IGdwY3NfcGh5X3JlYWQocGh5LCBNSUlfQk1DUik7CisJCWlmICh2YWwgPj0gMCAmJiAodmFsICYgQk1DUl9SRVNFVCkgPT0gMCkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKwlpZiAoKHZhbCAmIEJNQ1JfSVNPTEFURSkgJiYgbGltaXQgPiAwKQorCQlncGNzX3BoeV93cml0ZShwaHksIE1JSV9CTUNSLCB2YWwgJiB+Qk1DUl9JU09MQVRFKTsKKworCWlmIChsaW1pdCA+IDAgJiYgcGh5LT5tb2RlID09IFBIWV9NT0RFX1NHTUlJKSB7CisJCS8qIENvbmZpZ3VyZSBHUENTIGludGVyZmFjZSB0byByZWNvbW1lbmRlZCBzZXR0aW5nIGZvciBTR01JSSAqLworCQlncGNzX3BoeV93cml0ZShwaHksIDB4MDQsIDB4ODEyMCk7IC8qIEFzeW1QYXVzZSwgRkRYICovCisJCWdwY3NfcGh5X3dyaXRlKHBoeSwgMHgwNywgMHgyODAxKTsgLyogbXNnX3BnLCB0b2dnbGUgKi8KKwkJZ3Bjc19waHlfd3JpdGUocGh5LCAweDAwLCAweDAxNDApOyAvKiAxR2JwcywgRkRYICAgICAqLworCX0KKworCXJldHVybiBsaW1pdCA8PSAwOworfQorCiBzdGF0aWMgaW50IGdlbm1paV9zZXR1cF9hbmVnKHN0cnVjdCBtaWlfcGh5ICpwaHksIHUzMiBhZHZlcnRpc2UpCiB7CiAJaW50IGN0bCwgYWR2OwpAQCAtMzMyLDYgKzM3MywzMyBAQAogCXJldHVybiAgMDsKIH0KIAorc3RhdGljIGludCBtODhlMTExMl9pbml0KHN0cnVjdCBtaWlfcGh5ICpwaHkpCit7CisJLyoKKwkgKiBNYXJ2ZWxsIDg4RTExMTIgUEhZIG5lZWRzIHRvIGhhdmUgdGhlIFNHTUlJIE1BQworCSAqIGludGVyYWNlIChwYWdlIDIpIHByb3Blcmx5IGNvbmZpZ3VyZWQgdG8KKwkgKiBjb21tdW5pY2F0ZSB3aXRoIHRoZSA0NjBFWC9HVCBHUENTIGludGVyZmFjZS4KKwkgKi8KKworCXUxNiByZWdfc2hvcnQ7CisKKwlwcl9kZWJ1ZygiJXM6IE1hcnZlbGwgODhFMTExMiBFdGhlcm5ldFxuIiwgX19mdW5jX18pOworCisJLyogU2V0IGFjY2VzcyB0byBQYWdlIDIgKi8KKwlwaHlfd3JpdGUocGh5LCAweDE2LCAweDAwMDIpOworCisJcGh5X3dyaXRlKHBoeSwgMHgwMCwgMHgwMDQwKTsgLyogMUdicHMgKi8KKwlyZWdfc2hvcnQgPSAodTE2KShwaHlfcmVhZChwaHksIDB4MWEpKTsKKwlyZWdfc2hvcnQgfD0gMHg4MDAwOyAvKiBieXBhc3MgQXV0by1OZWdvdGlhdGlvbiAqLworCXBoeV93cml0ZShwaHksIDB4MWEsIHJlZ19zaG9ydCk7CisJZW1hY19taWlfcmVzZXRfcGh5KHBoeSk7IC8qIHJlc2V0IE1BQyBpbnRlcmZhY2UgKi8KKworCS8qIFJlc2V0IGFjY2VzcyB0byBQYWdlIDAgKi8KKwlwaHlfd3JpdGUocGh5LCAweDE2LCAweDAwMDApOworCisJcmV0dXJuICAwOworfQorCiBzdGF0aWMgaW50IGV0MTAxMWNfaW5pdChzdHJ1Y3QgbWlpX3BoeSAqcGh5KQogewogCXUxNiByZWdfc2hvcnQ7CkBAIC0zODQsMTEgKzQ1MiwyNyBAQAogCS5vcHMJCT0gJm04OGUxMTExX3BoeV9vcHMsCiB9OwogCitzdGF0aWMgc3RydWN0IG1paV9waHlfb3BzIG04OGUxMTEyX3BoeV9vcHMgPSB7CisJLmluaXQJCT0gbTg4ZTExMTJfaW5pdCwKKwkuc2V0dXBfYW5lZwk9IGdlbm1paV9zZXR1cF9hbmVnLAorCS5zZXR1cF9mb3JjZWQJPSBnZW5taWlfc2V0dXBfZm9yY2VkLAorCS5wb2xsX2xpbmsJPSBnZW5taWlfcG9sbF9saW5rLAorCS5yZWFkX2xpbmsJPSBnZW5taWlfcmVhZF9saW5rCit9OworCitzdGF0aWMgc3RydWN0IG1paV9waHlfZGVmIG04OGUxMTEyX3BoeV9kZWYgPSB7CisJLnBoeV9pZAkJPSAweDAxNDEwQzkwLAorCS5waHlfaWRfbWFzawk9IDB4MGZmZmZmZjAsCisJLm5hbWUJCT0gIk1hcnZlbGwgODhFMTExMiBFdGhlcm5ldCIsCisJLm9wcwkJPSAmbTg4ZTExMTJfcGh5X29wcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9kZWYgKm1paV9waHlfdGFibGVbXSA9IHsKIAkmZXQxMDExY19waHlfZGVmLAogCSZjaXM4MjAxX3BoeV9kZWYsCiAJJmJjbTUyNDhfcGh5X2RlZiwKIAkmbTg4ZTExMTFfcGh5X2RlZiwKKwkmbTg4ZTExMTJfcGh5X2RlZiwKIAkmZ2VubWlpX3BoeV9kZWYsCiAJTlVMTAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL3BoeS5oIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvcGh5LmgKaW5kZXggMWI2NWM4MS4uNWQyYmY0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvcGh5LmgKQEAgLTU3LDYgKzU3LDcgQEAKIAkJCQkgICBvciBkZXRlcm1pbmVkIGF1dG9tYXRpY2FseSAqLwogCWludCBhZGRyZXNzOwkJLyogUEhZIGFkZHJlc3MgKi8KIAlpbnQgbW9kZTsJCS8qIFBIWSBtb2RlICovCisJaW50IGdwY3NfYWRkcmVzczsJLyogR1BDUyBQSFkgYWRkcmVzcyAqLwogCiAJLyogMTogYXV0b25lZyBlbmFibGVkLCAwOiBkaXNhYmxlZCAqLwogCWludCBhdXRvbmVnOwpAQCAtODEsNSArODIsNiBAQAogICovCiBpbnQgZW1hY19taWlfcGh5X3Byb2JlKHN0cnVjdCBtaWlfcGh5ICpwaHksIGludCBhZGRyZXNzKTsKIGludCBlbWFjX21paV9yZXNldF9waHkoc3RydWN0IG1paV9waHkgKnBoeSk7CitpbnQgZW1hY19taWlfcmVzZXRfZ3BjcyhzdHJ1Y3QgbWlpX3BoeSAqcGh5KTsKIAogI2VuZGlmIC8qIF9fSUJNX05FV0VNQUNfUEhZX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libWxhbmEuYyBiL2RyaXZlcnMvbmV0L2libWxhbmEuYwppbmRleCA5NWUzNDY0Li5mMDI3NjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1sYW5hLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCkBAIC03MSw3ICs3MSw3IEBACiAgIEp1bmUgMXN0LCAyMDAwCiAJY29ycmVjdGVkIHZlcnNpb24gY29kZXMsIGFkZGVkIHN1cHBvcnQgZm9yIHRoZSBsYXRlc3QgMi4zIGNoYW5nZXMKICAgT2N0IDI4dGgsIDIwMDIKLSAgCWNsZWFuZWQgdXAgZm9yIHRoZSAyLjUgdHJlZSA8YWxhbkByZWRoYXQuY29tPgorCWNsZWFuZWQgdXAgZm9yIHRoZSAyLjUgdHJlZSA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCmluZGV4IDczZmU4M2IuLmUxNDI5ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKQEAgLTU0MCw3ICs1NDAsOCBAQAogCWlmIChyZXQgIT0gMCkKIAkJZ290byBmcmVlX21lbTsKIAotCWluZm8oIklyREE6IFJlZ2lzdGVyZWQgS2luZ1N1bi9Eb25TaGluZSBkZXZpY2UgJXMiLCBuZXQtPm5hbWUpOworCWRldl9pbmZvKCZuZXQtPmRldiwgIklyREE6IFJlZ2lzdGVyZWQgS2luZ1N1bi9Eb25TaGluZSBkZXZpY2UgJXNcbiIsCisJCSBuZXQtPm5hbWUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBraW5nc3VuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKaW5kZXggOGMyNTdhNS4uMjQ4MmQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCkBAIC04MDEsNyArODAxLDggQEAKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZnJlZV9tZW07CiAKLQlpbmZvKCJJckRBOiBSZWdpc3RlcmVkIEtpbmdTdW4gS1MtOTU5IGRldmljZSAlcyIsIG5ldC0+bmFtZSk7CisJZGV2X2luZm8oJm5ldC0+ZGV2LCAiSXJEQTogUmVnaXN0ZXJlZCBLaW5nU3VuIEtTLTk1OSBkZXZpY2UgJXNcbiIsCisJCSBuZXQtPm5hbWUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBraW5nc3VuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKaW5kZXggZDAxYTI4NS4uMWUwZGU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCkBAIC03MDUsNyArNzA1LDggQEAKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZnJlZV9tZW07CiAKLQlpbmZvKCJJckRBOiBSZWdpc3RlcmVkIEtpbmdTdW4vRGF6emxlIGRldmljZSAlcyIsIG5ldC0+bmFtZSk7CisJZGV2X2luZm8oJm5ldC0+ZGV2LCAiSXJEQTogUmVnaXN0ZXJlZCBLaW5nU3VuL0RhenpsZSBkZXZpY2UgJXNcbiIsCisJCSBuZXQtPm5hbWUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBraW5nc3VuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaXJfZG9uZ2xlLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kb25nbGUuYwppbmRleCAzNjAzMDI0Li4yYTk5MzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Npcl9kb25nbGUuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kb25nbGUuYwpAQCAtNjcsOSArNjcsNyBAQAogCWNvbnN0IHN0cnVjdCBkb25nbGVfZHJpdmVyICpkcnYgPSBOVUxMOwogCWludCBlcnIgPSAtRUlOVkFMOwogCi0jaWZkZWYgQ09ORklHX0tNT0QKIAlyZXF1ZXN0X21vZHVsZSgiaXJkYS1kb25nbGUtJWQiLCB0eXBlKTsKLSNlbmRpZgogCiAJaWYgKGRldi0+ZG9uZ2xlX2RydiAhPSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCmluZGV4IDA1MTk2MzcuLjM1NzU4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKQEAgLTUwNiw3ICs1MDYsNyBAQAogCQkJZ290byBmb3VuZDsKIAl9CiAKLQl3YXJuKCIlczogaW52YWxpZCBzcGVlZCAlZCIsIHN0aXItPm5ldGRldi0+bmFtZSwgc3BlZWQpOworCWRldl93YXJuKCZzdGlyLT5uZXRkZXYtPmRldiwgImludmFsaWQgc3BlZWQgJWRcbiIsIHNwZWVkKTsKIAlyZXR1cm4gLUVJTlZBTDsKIAogIGZvdW5kOgpAQCAtNTk4LDggKzU5OCw4IEBACiAJCWVyciA9IHJlYWRfcmVnKHN0aXIsIFJFR19GSUZPQ1RMLCBzdGlyLT5maWZvX3N0YXR1cywgCiAJCQkJICAgRklGT19SRUdTX1NJWkUpOwogCQlpZiAodW5saWtlbHkoZXJyICE9IEZJRk9fUkVHU19TSVpFKSkgewotCQkJd2FybigiJXM6IEZJRk8gcmVnaXN0ZXIgcmVhZCBlcnJvcjogJWQiLCAKLQkJCSAgICAgc3Rpci0+bmV0ZGV2LT5uYW1lLCBlcnIpOworCQkJZGV2X3dhcm4oJnN0aXItPm5ldGRldi0+ZGV2LAorCQkJCSAiRklGTyByZWdpc3RlciByZWFkIGVycm9yOiAlZFxuIiwgZXJyKTsKIAogCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtNzgzLDggKzc4Myw5IEBACiAKIAkJCWlmICh1bmxpa2VseShyZWNlaXZlX3N0YXJ0KHN0aXIpKSkgewogCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJCWluZm8oIiVzOiByZWNlaXZlIHVzYiBzdWJtaXQgZmFpbGVkIiwKLQkJCQkJICAgICBzdGlyLT5uZXRkZXYtPm5hbWUpOworCQkJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJCQkgIiVzOiByZWNlaXZlIHVzYiBzdWJtaXQgZmFpbGVkXG4iLAorCQkJCQkJIHN0aXItPm5ldGRldi0+bmFtZSk7CiAJCQkJc3Rpci0+cmVjZWl2aW5nID0gMDsKIAkJCQltc2xlZXAoMTApOwogCQkJCWNvbnRpbnVlOwpAQCAtODM2LDggKzgzNyw4IEBACiAKIAkvKiBpbiBjYXNlIG9mIGVycm9yLCB0aGUga2VybmVsIHRocmVhZCB3aWxsIHJlc3RhcnQgdXMgKi8KIAlpZiAoZXJyKSB7Ci0JCXdhcm4oIiVzOiB1c2IgcmVjZWl2ZSBzdWJtaXQgZXJyb3I6ICVkIiwKLQkJCXN0aXItPm5ldGRldi0+bmFtZSwgZXJyKTsKKwkJZGV2X3dhcm4oJnN0aXItPm5ldGRldi0+ZGV2LCAidXNiIHJlY2VpdmUgc3VibWl0IGVycm9yOiAlZFxuIiwKKwkJCSBlcnIpOwogCQlzdGlyLT5yZWNlaXZpbmcgPSAwOwogCQl3YWtlX3VwX3Byb2Nlc3Moc3Rpci0+dGhyZWFkKTsKIAl9CkBAIC0xMDczLDcgKzEwNzQsOCBAQAogCWlmIChyZXQgIT0gMCkKIAkJZ290byBlcnJfb3V0MjsKIAotCWluZm8oIklyREE6IFJlZ2lzdGVyZWQgU2lnbWFUZWwgZGV2aWNlICVzIiwgbmV0LT5uYW1lKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiSXJEQTogUmVnaXN0ZXJlZCBTaWdtYVRlbCBkZXZpY2UgJXNcbiIsCisJCSBuZXQtPm5hbWUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBzdGlyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKaW5kZXggMjE5OGI3Ny4uZTExNmQzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiaXhnYmVfdHlwZS5oIgogI2luY2x1ZGUgIml4Z2JlX2NvbW1vbi5oIgogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKICNpbmNsdWRlIDxsaW51eC9kY2EuaD4KICNlbmRpZgogCkBAIC0xMzYsNyArMTM2LDcgQEAKIAkJICAgICAgKiBvZmZzZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmluZywgd2hpY2ggaXMgZGlmZmVyZW50CiAJCSAgICAgICogZm9yIERDRSBhbmQgUlNTIG1vZGVzICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCS8qIGNwdSBmb3IgdHggcXVldWUgKi8KIAlpbnQgY3B1OwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggY2ExN2FmNC4uNzU0OGZiNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTgwLDcgKzgwLDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaXhnYmVfcGNpX3RibCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogc3RhdGljIGludCBpeGdiZV9ub3RpZnlfZGNhKHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nIGV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnApOwogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkY2Ffbm90aWZpZXIgPSB7CkBAIC0yOTYsNyArMjk2LDcgQEAKIAlyZXR1cm4gKHRvdGFsX3BhY2tldHMgPyB0cnVlIDogZmFsc2UpOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIHN0YXRpYyB2b2lkIGl4Z2JlX3VwZGF0ZV9yeF9kY2Eoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nKQogewpAQCAtMzgzLDcgKzM4Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfRENBIG9yIENPTkZJR19EQ0FfTU9EVUxFICovCisjZW5kaWYgLyogQ09ORklHX0lYR0JFX0RDQSAqLwogLyoqCiAgKiBpeGdiZV9yZWNlaXZlX3NrYiAtIFNlbmQgYSBjb21wbGV0ZWQgcGFja2V0IHVwIHRoZSBzdGFjawogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC05NDcsNyArOTQ3LDcgQEAKIAlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKIAlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7CiAJCXR4X3JpbmcgPSAmKGFkYXB0ZXItPnR4X3Jpbmdbcl9pZHhdKTsKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKQogCQkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCB0eF9yaW5nKTsKICNlbmRpZgpAQCAtMTAyMiw3ICsxMDIyLDcgQEAKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwogCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpCiAJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcnhfcmluZyk7CiAjZW5kaWYKQEAgLTEwNjYsNyArMTA2Niw3IEBACiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7CiAJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT5yeHJfY291bnQ7IGkrKykgewogCQlyeF9yaW5nID0gJihhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkKIAkJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcnhfcmluZyk7CiAjZW5kaWYKQEAgLTIxNTUsNyArMjE1NSw3IEBACiAKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKSB7CiAJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0RDQV9FTkFCTEVEOwogCQlkY2FfcmVtb3ZlX3JlcXVlc3RlcigmYWRhcHRlci0+cGRldi0+ZGV2KTsKQEAgLTIxNjcsNyArMjE2Nyw3IEBACiAJaXhnYmVfY2xlYW5fYWxsX3R4X3JpbmdzKGFkYXB0ZXIpOwogCWl4Z2JlX2NsZWFuX2FsbF9yeF9yaW5ncyhhZGFwdGVyKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJLyogc2luY2Ugd2UgcmVzZXQgdGhlIGhhcmR3YXJlIERDQSBzZXR0aW5ncyB3ZXJlIGNsZWFyZWQgKi8KIAlpZiAoZGNhX2FkZF9yZXF1ZXN0ZXIoJmFkYXB0ZXItPnBkZXYtPmRldikgPT0gMCkgewogCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEOwpAQCAtMjE5Myw3ICsyMTkzLDcgQEAKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOwogCWludCB0eF9jbGVhbmVkLCB3b3JrX2RvbmUgPSAwOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKSB7CiAJCWl4Z2JlX3VwZGF0ZV90eF9kY2EoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZyk7CiAJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZyk7CkBAIC0zOTIyLDcgKzM5MjIsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlpZiAoZGNhX2FkZF9yZXF1ZXN0ZXIoJnBkZXYtPmRldikgPT0gMCkgewogCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEOwogCQkvKiBhbHdheXMgdXNlIENCMiBtb2RlLCBkaWZmZXJlbmNlIGlzIG1hc2tlZApAQCAtMzk3Miw3ICszOTcyLDcgQEAKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpIHsKIAkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRENBX0VOQUJMRUQ7CiAJCWRjYV9yZW1vdmVfcmVxdWVzdGVyKCZwZGV2LT5kZXYpOwpAQCAtNDEwNSwxMCArNDEwNSwxMCBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzXG4iLCBpeGdiZV9kcml2ZXJfbmFtZSwgaXhnYmVfY29weXJpZ2h0KTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJZGNhX3JlZ2lzdGVyX25vdGlmeSgmZGNhX25vdGlmaWVyKTsKLQogI2VuZGlmCisKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpeGdiZV9kcml2ZXIpOwogCXJldHVybiByZXQ7CiB9CkBAIC00MTIzLDEzICs0MTIzLDEzIEBACiAgKiovCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXhnYmVfZXhpdF9tb2R1bGUodm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWRjYV91bnJlZ2lzdGVyX25vdGlmeSgmZGNhX25vdGlmaWVyKTsKICNlbmRpZgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXhnYmVfZHJpdmVyKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiBzdGF0aWMgaW50IGl4Z2JlX25vdGlmeV9kY2Eoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwKQogewpAQCAtNDE0MCw3ICs0MTQwLDcgQEAKIAogCXJldHVybiByZXRfdmFsID8gTk9USUZZX0JBRCA6IE5PVElGWV9ET05FOwogfQotI2VuZGlmIC8qIENPTkZJR19EQ0Egb3IgQ09ORklHX0RDQV9NT0RVTEUgKi8KKyNlbmRpZiAvKiBDT05GSUdfSVhHQkVfRENBICovCiAKIG1vZHVsZV9leGl0KGl4Z2JlX2V4aXRfbW9kdWxlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvam1lLmMgYi9kcml2ZXJzL25ldC9qbWUuYwppbmRleCA1ZjlhMTMxLi44MWM2Y2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qbWUuYworKysgYi9kcml2ZXJzL25ldC9qbWUuYwpAQCAtMjEsNyArMjEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMzgsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CiAjaW5jbHVkZSAiam1lLmgiCiAKIHN0YXRpYyBpbnQgZm9yY2VfcHNldWRvaHAgPSAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY21hY2UuYyBiL2RyaXZlcnMvbmV0L21hY21hY2UuYwppbmRleCA1MWFkMzc2Li44NTU4N2E2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjbWFjZS5jCisrKyBiL2RyaXZlcnMvbmV0L21hY21hY2UuYwpAQCAtOSw3ICs5LDcgQEAKICAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICoJQ29weXJpZ2h0IChDKSAxOTk2IFBhdWwgTWFja2VycmFzLgotICoJQ29weXJpZ2h0IChDKSAxOTk4IEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CisgKglDb3B5cmlnaHQgKEMpIDE5OTggQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCiAgKglNb2RpZmllZCBoZWF2aWx5IGJ5IEpvc2h1YSBNLiBUaG9tcHNvbiBiYXNlZCBvbiBEYXZlIEh1YW5nJ3MgTmV0QlNEIGRyaXZlcgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCmluZGV4IDZkY2U5MDEuLmE5YWViYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJZG1hX2FkZHJfdCBmd19zdGF0c19idXM7CiAJaW50IHdhdGNoZG9nX3R4X2RvbmU7CiAJaW50IHdhdGNoZG9nX3R4X3JlcTsKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJaW50IGNhY2hlZF9kY2FfdGFnOwogCWludCBjcHU7CiAJX19iZTMyIF9faW9tZW0gKmRjYV90YWc7CkBAIC0yMjAsNyArMjIwLDcgQEAKIAlpbnQgbXNpX2VuYWJsZWQ7CiAJaW50IG1zaXhfZW5hYmxlZDsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF92ZWN0b3JzOwotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlpbnQgZGNhX2VuYWJsZWQ7CiAjZW5kaWYKIAl1MzIgbGlua19zdGF0ZTsKQEAgLTkwMiw3ICs5MDIsNyBAQAogCXN0cnVjdCBteXJpMTBnZV9zbGljZV9zdGF0ZSAqc3M7CiAJaW50IGksIHN0YXR1czsKIAlzaXplX3QgYnl0ZXM7Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCXVuc2lnbmVkIGxvbmcgZGNhX3RhZ19vZmY7CiAjZW5kaWYKIApAQCAtMTAxMiw3ICsxMDEyLDcgQEAKIAl9CiAJcHV0X2JlMzIoaHRvbmwobWdwLT5pbnRyX2NvYWxfZGVsYXkpLCBtZ3AtPmludHJfY29hbF9kZWxheV9wdHIpOwogCi0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9HRVRfRENBX09GRlNFVCwgJmNtZCwgMCk7CiAJZGNhX3RhZ19vZmYgPSBjbWQuZGF0YTA7CiAJZm9yIChpID0gMDsgaSA8IG1ncC0+bnVtX3NsaWNlczsgaSsrKSB7CkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiBzdGF0aWMgdm9pZAogbXlyaTEwZ2Vfd3JpdGVfZGNhKHN0cnVjdCBteXJpMTBnZV9zbGljZV9zdGF0ZSAqc3MsIGludCBjcHUsIGludCB0YWcpCiB7CkBAIC0xNTA1LDcgKzE1MDUsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBzcy0+bWdwLT5kZXY7CiAJaW50IHdvcmtfZG9uZTsKIAotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlpZiAoc3MtPm1ncC0+ZGNhX2VuYWJsZWQpCiAJCW15cmkxMGdlX3VwZGF0ZV9kY2Eoc3MpOwogI2VuZGlmCkBAIC0xNzM2LDcgKzE3MzYsNyBAQAogCSJ0eF9ib3VuZGFyeSIsICJXQyIsICJpcnEiLCAiTVNJIiwgIk1TSVgiLAogCSJyZWFkX2RtYV9id19NQnMiLCAid3JpdGVfZG1hX2J3X01CcyIsICJyZWFkX3dyaXRlX2RtYV9id19NQnMiLAogCSJzZXJpYWxfbnVtYmVyIiwgIndhdGNoZG9nX3Jlc2V0cyIsCi0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCSJkY2FfY2FwYWJsZV9maXJtd2FyZSIsICJkY2FfZGV2aWNlX3ByZXNlbnQiLAogI2VuZGlmCiAJImxpbmtfY2hhbmdlcyIsICJsaW5rX3VwIiwgImRyb3BwZWRfbGlua19vdmVyZmxvdyIsCkBAIC0xODE1LDcgKzE4MTUsNyBAQAogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5yZWFkX3dyaXRlX2RtYTsKIAlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW1ncC0+c2VyaWFsX251bWJlcjsKIAlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW1ncC0+d2F0Y2hkb2dfcmVzZXRzOwotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KShtZ3AtPnNzWzBdLmRjYV90YWcgIT0gTlVMTCk7CiAJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCkobWdwLT5kY2FfZW5hYmxlZCk7CiAjZW5kaWYKQEAgLTM4NDQsNyArMzg0NCw3IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCByZXNldFxuIik7CiAJCWdvdG8gYWJvcnRfd2l0aF9zbGljZXM7CiAJfQotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlteXJpMTBnZV9zZXR1cF9kY2EobWdwKTsKICNlbmRpZgogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBtZ3ApOwpAQCAtMzk0OCw3ICszOTQ4LDcgQEAKIAluZXRkZXYgPSBtZ3AtPmRldjsKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCi0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCW15cmkxMGdlX3RlYXJkb3duX2RjYShtZ3ApOwogI2VuZGlmCiAJbXlyaTEwZ2VfZHVtbXlfcmRtYShtZ3AsIDApOwpAQCAtMzk5Myw3ICszOTkzLDcgQEAKICNlbmRpZgogfTsKIAotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIHN0YXRpYyBpbnQKIG15cmkxMGdlX25vdGlmeV9kY2Eoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcCkKIHsKQEAgLTQwMjQsNyArNDAyNCw3IEBACiAJCSAgICAgICBteXJpMTBnZV9kcml2ZXIubmFtZSwgbXlyaTEwZ2VfcnNzX2hhc2gpOwogCQlteXJpMTBnZV9yc3NfaGFzaCA9IE1YR0VGV19SU1NfSEFTSF9UWVBFX1NSQ19QT1JUOwogCX0KLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJZGNhX3JlZ2lzdGVyX25vdGlmeSgmbXlyaTEwZ2VfZGNhX25vdGlmaWVyKTsKICNlbmRpZgogCWlmIChteXJpMTBnZV9tYXhfc2xpY2VzID4gTVlSSTEwR0VfTUFYX1NMSUNFUykKQEAgLTQwMzcsNyArNDAzNyw3IEBACiAKIHN0YXRpYyBfX2V4aXQgdm9pZCBteXJpMTBnZV9jbGVhbnVwX21vZHVsZSh2b2lkKQogewotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlkY2FfdW5yZWdpc3Rlcl9ub3RpZnkoJm15cmkxMGdlX2RjYV9ub3RpZmllcik7CiAjZW5kaWYKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm15cmkxMGdlX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCmluZGV4IDcxMTJmZDUuLjA4YzRkZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCkBAIC0zNTUsOSArMzU1LDEwIEBACiAJZm9yIChpID0gaiA9IDA7IGogPCAweDQwMDsgaiArPSAweDIwKSB7CiAJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGogXiAweDMwMDsKIAkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCWlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOworCQlpZiAoaSA9PSAwKQorCQkJYnJlYWs7CiAJfQotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KQEAgLTM3Nyw3ICszNzgsNyBAQAogCXR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSAweDg4OwotCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gQ1NfU1VDQ0VTUykgeworCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gMCkgewogCQlwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKIAkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKIAkJCXBoeXNfYWRkcltpXSA9IGh0b25zKGxlMTZfdG9fY3B1KGJ1ZltpXSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwppbmRleCA1NDlhNjQ1Li5jMjM1Y2RiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwpAQCAtMTUsNyArMTUsNyBAQAogICAgIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICAgIERvbmFsZCBCZWNrZXIgbWF5IGJlIHJlYWNoZWQgYXQgYmVja2VyQHNjeWxkLmNvbQogICAgIAotICAgIFVwZGF0ZWQgZm9yIDIuNS54IGJ5IEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CisgICAgVXBkYXRlZCBmb3IgMi41LnggYnkgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKQEAgLTI3OCw5ICsyNzgsMTAgQEAKIAlpZiAobXVsdGkgJiYgKGogJiAweDgwKSkgY29udGludWU7CiAJbGluay0+aW8uQmFzZVBvcnQxID0gaiBeIDB4MzAwOwogCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCWlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOworCWlmIChpID09IDApCisJCWJyZWFrOwogICAgIH0KLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisgICAgaWYgKGkgIT0gMCkgewogCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJZ290byBmYWlsZWQ7CiAgICAgfQpAQCAtMjk1LDcgKzI5Niw3IEBACiAgICAgLyogVGhlIDNjNTg5IGhhcyBhbiBleHRyYSBFRVBST00gZm9yIGNvbmZpZ3VyYXRpb24gaW5mbywgaW5jbHVkaW5nCiAgICAgICAgdGhlIGhhcmR3YXJlIGFkZHJlc3MuICBUaGUgM2M1NjIgcHV0cyB0aGUgYWRkcmVzcyBpbiB0aGUgQ0lTLiAqLwogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IDB4ODg7Ci0gICAgaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSA9PSBDU19TVUNDRVNTKSB7CisgICAgaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSA9PSAwKSB7CiAJcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7CiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKIAkgICAgcGh5c19hZGRyW2ldID0gaHRvbnMobGUxNl90b19jcHUoYnVmW2ldKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9LY29uZmlnCmluZGV4IGU4ZjU1ZDguLjliOGY3OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9LY29uZmlnCkBAIC0xMTEsNyArMTExLDcgQEAKIAogY29uZmlnIFBDTUNJQV9JQk1UUgogCXRyaXN0YXRlICJJQk0gUENNQ0lBIHRva2VucmluZyBhZGFwdGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJQk1UUiE9eSAmJiBUUiAmJiAhNjRCSVQKKwlkZXBlbmRzIG9uIElCTVRSIT15ICYmIFRSCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIGF0dGFjaCB0aGlzIHR5cGUgb2YgVG9rZW4gUmluZyBQQ01DSUEKIAkgIGNhcmQgdG8geW91ciBjb21wdXRlci4gWW91IHRoZW4gYWxzbyBuZWVkIHRvIHNheSBZIHRvICJUb2tlbiBSaW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCmluZGV4IDUyYmYxMWIuLmIzN2E0OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAlpZiAobGluay0+aW8uTnVtUG9ydHMyID4gMCkgewogCSAgICAvKiBmb3IgbWFzdGVyL3NsYXZlIG11bHRpZnVuY3Rpb24gY2FyZHMgKi8KIAkgICAgbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPSAKKwkgICAgbGluay0+aXJxLkF0dHJpYnV0ZXMgPQogCQlJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKIAl9CiAgICAgfSBlbHNlIHsKQEAgLTI3Niw3ICsyNzYsOCBAQAogCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBqIF4gMHgzMDA7CiAJICAgIGxpbmstPmlvLkJhc2VQb3J0MiA9IChqIF4gMHgzMDApICsgMHgxMDsKIAkgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkgICAgaWYgKHJldCA9PSBDU19TVUNDRVNTKSByZXR1cm4gcmV0OworCSAgICBpZiAocmV0ID09IDApCisJCSAgICByZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gcmV0OwogICAgIH0gZWxzZSB7CkBAIC0yODQsNTkgKzI4NSw1MCBAQAogICAgIH0KIH0KIAorc3RhdGljIGludCBheG5ldF9jb25maWdjaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCWludCBpOworCWNpc3RwbF9pb190ICppbyA9ICZjZmctPmlvOworCisJaWYgKGNmZy0+aW5kZXggPT0gMCB8fCBjZmctPmlvLm53aW4gPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwX2Rldi0+Y29uZi5Db25maWdJbmRleCA9IDB4MDU7CisJLyogRm9yIG11bHRpZnVuY3Rpb24gY2FyZHMsIGJ5IGNvbnZlbnRpb24sIHdlIGNvbmZpZ3VyZSB0aGUKKwkgICBuZXR3b3JrIGZ1bmN0aW9uIHdpdGggd2luZG93IDAsIGFuZCBzZXJpYWwgd2l0aCB3aW5kb3cgMSAqLworCWlmIChpby0+bndpbiA+IDEpIHsKKwkJaSA9IChpby0+d2luWzFdLmxlbiA+IGlvLT53aW5bMF0ubGVuKTsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMS1pXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxLWldLmxlbjsKKwl9IGVsc2UgeworCQlpID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJfQorCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luW2ldLmJhc2U7CisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5baV0ubGVuOworCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCWlmIChwX2Rldi0+aW8uTnVtUG9ydHMxICsgcF9kZXYtPmlvLk51bVBvcnRzMiA+PSAzMikKKwkJcmV0dXJuIHRyeV9pb19wb3J0KHBfZGV2KTsKKworCXJldHVybiAtRU5PREVWOworfQorCiBzdGF0aWMgaW50IGF4bmV0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBheG5ldF9kZXZfdCAqaW5mbyA9IFBSSVYoZGV2KTsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIGNpc3BhcnNlX3QgcGFyc2U7CiAgICAgaW50IGksIGosIGxhc3RfcmV0LCBsYXN0X2ZuOwotICAgIHVfc2hvcnQgYnVmWzY0XTsKICAgICBERUNMQVJFX01BQ19CVUYobWFjKTsKIAogICAgIERFQlVHKDAsICJheG5ldF9jb25maWcoMHglcClcbiIsIGxpbmspOwogCi0gICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKLSAgICB0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKLSAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0KICAgICAvKiBkb24ndCB0cnVzdCB0aGUgQ0lTIG9uIHRoaXM7IExpbmtzeXMgZ290IGl0IHdyb25nICovCiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gMHg2MzsKLQotICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0gICAgd2hpbGUgKGxhc3RfcmV0ID09IENTX1NVQ0NFU1MpIHsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwotCWNpc3RwbF9pb190ICppbyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeS5pbyk7Ci0JCi0JaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKLQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwIHx8Ci0JCWNmZy0+aW5kZXggPT0gMCB8fCBjZmctPmlvLm53aW4gPT0gMCkKLQkgICAgZ290byBuZXh0X2VudHJ5OwotCQotCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAweDA1OwotCS8qIEZvciBtdWx0aWZ1bmN0aW9uIGNhcmRzLCBieSBjb252ZW50aW9uLCB3ZSBjb25maWd1cmUgdGhlCi0JICAgbmV0d29yayBmdW5jdGlvbiB3aXRoIHdpbmRvdyAwLCBhbmQgc2VyaWFsIHdpdGggd2luZG93IDEgKi8KLQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JICAgIGkgPSAoaW8tPndpblsxXS5sZW4gPiBpby0+d2luWzBdLmxlbik7Ci0JICAgIGxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMS1pXS5iYXNlOwotCSAgICBsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzEtaV0ubGVuOwotCX0gZWxzZSB7Ci0JICAgIGkgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCX0KLQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luW2ldLmJhc2U7Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpbltpXS5sZW47Ci0JbGluay0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxICsgbGluay0+aW8uTnVtUG9ydHMyID49IDMyKSB7Ci0JICAgIGxhc3RfcmV0ID0gdHJ5X2lvX3BvcnQobGluayk7Ci0JICAgIGlmIChsYXN0X3JldCA9PSBDU19TVUNDRVNTKSBicmVhazsKLQl9Ci0gICAgbmV4dF9lbnRyeToKLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpOwotICAgIH0KLSAgICBpZiAobGFzdF9yZXQgIT0gQ1NfU1VDQ0VTUykgeworICAgIGxhc3RfcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGF4bmV0X2NvbmZpZ2NoZWNrLCBOVUxMKTsKKyAgICBpZiAobGFzdF9yZXQgIT0gMCkgewogCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgbGFzdF9yZXQpOwogCWdvdG8gZmFpbGVkOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9jb20yMDAyMF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMKaW5kZXggZWE5NDE0Yy4uODMxMDkwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMKQEAgLTI2MCwyMSArMjYwLDIxIEBACiAgICAgREVCVUcoMCwgImNvbTIwMDIwX2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAKICAgICBERUJVRygxLCJhcmNuZXQ6IGJhc2Vwb3J0MSBpcyAlWGhcbiIsIGxpbmstPmlvLkJhc2VQb3J0MSk7Ci0gICAgaSA9ICFDU19TVUNDRVNTOworICAgIGkgPSAtRU5PREVWOwogICAgIGlmICghbGluay0+aW8uQmFzZVBvcnQxKQogICAgIHsKIAlmb3IgKGlvYWRkciA9IDB4MTAwOyBpb2FkZHIgPCAweDQwMDsgaW9hZGRyICs9IDB4MTApCiAJewogCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBpb2FkZHI7CiAJICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCSAgICBpZiAoaSA9PSBDU19TVUNDRVNTKQorCSAgICBpZiAoaSA9PSAwKQogCQlicmVhazsKIAl9CiAgICAgfQogICAgIGVsc2UKIAlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKICAgICAKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKQorICAgIGlmIChpICE9IDApCiAgICAgewogCURFQlVHKDEsImFyY25ldDogcmVxdWVzdElPIGZhaWxlZCB0b3RhbGx5IVxuIik7CiAJZ290byBmYWlsZWQ7CkBAIC0yODcsNyArMjg3LDcgQEAKIAkgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEsCiAJICAgbGluay0+aXJxLklSUUluZm8xLCBsaW5rLT5pcnEuSVJRSW5mbzIpOwogICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykKKyAgICBpZiAoaSAhPSAwKQogICAgIHsKIAlERUJVRygxLCJhcmNuZXQ6IHJlcXVlc3RJUlEgZmFpbGVkIHRvdGFsbHkhXG4iKTsKIAlnb3RvIGZhaWxlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCmluZGV4IGE1NTBjOWIuLjY5ZDkxNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwpAQCAtMzA5LDcgKzMwOSw4IEBACiAJICAgIHByaW50ayhLRVJOX05PVElDRSAiZm12ajE4eF9jczogb3V0IG9mIHJlc291cmNlIGZvciBzZXJpYWxcbiIpOwogCX0KIAlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCWlmIChyZXQgPT0gQ1NfU1VDQ0VTUykgcmV0dXJuIHJldDsKKwlpZiAocmV0ID09IDApCisJCXJldHVybiByZXQ7CiAgICAgfQogICAgIHJldHVybiByZXQ7CiB9CkBAIC0zMjUsNyArMzI2LDcgQEAKICAgICBmb3IgKGlvYWRkciA9IDB4MzAwOyBpb2FkZHIgPCAweDNlMDsgaW9hZGRyICs9IDB4MjApIHsKIAlsaW5rLT5pby5CYXNlUG9ydDEgPSBpb2FkZHI7CiAJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQlpZiAocmV0ID09IENTX1NVQ0NFU1MpIHsKKwlpZiAocmV0ID09IDApIHsKIAkgICAgLyogY2FsY3VsYXRlIENvbmZpZ0luZGV4IHZhbHVlICovCiAJICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAKIAkJKChsaW5rLT5pby5CYXNlUG9ydDEgJiAweDBmMCkgPj4gMykgfCAweDIyOwpAQCAtMzU2LDEyICszNTcsMTIgQEAKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0ZVTkNFOwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgICBpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IDApIHsKIAkvKiBZZXMsIEkgaGF2ZSBDSVNUUExfRlVOQ0UuIExldCdzIGNoZWNrIENJU1RQTF9NQU5GSUQgKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKIAlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwotCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSkpOwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmluZGV4OwogCXN3aXRjaCAobGluay0+bWFuZl9pZCkgewogCWNhc2UgTUFORklEX1RESzoKQEAgLTQzMCwxMCArNDMxLDEwIEBACiAgICAgCWxpbmstPmlycS5BdHRyaWJ1dGVzID0KIAkJSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUR8SVJRX0hBTkRMRV9QUkVTRU5UOwogCXJldCA9IG1mY190cnlfaW9fcG9ydChsaW5rKTsKLQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIGdvdG8gY3NfZmFpbGVkOworCWlmIChyZXQgIT0gMCkgZ290byBjc19mYWlsZWQ7CiAgICAgfSBlbHNlIGlmIChjYXJkdHlwZSA9PSBVTkdFUk1BTk4pIHsKIAlyZXQgPSB1bmdlcm1hbm5fdHJ5X2lvX3BvcnQobGluayk7Ci0JaWYgKHJldCAhPSBDU19TVUNDRVNTKSBnb3RvIGNzX2ZhaWxlZDsKKwlpZiAocmV0ICE9IDApIGdvdG8gY3NfZmFpbGVkOwogICAgIH0gZWxzZSB7IAogCUNTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7CiAgICAgfQpAQCAtNTY1LDcgKzU2Niw3IEBACiAgICAgcmVxLkJhc2UgPSAwOyByZXEuU2l6ZSA9IDA7CiAgICAgcmVxLkFjY2Vzc1NwZWVkID0gMDsKICAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisgICAgaWYgKGkgIT0gMCkgewogCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RXaW5kb3csIGkpOwogCXJldHVybiAtMTsKICAgICB9CkBAIC01OTksNyArNjAwLDcgQEAKIAogICAgIGlvdW5tYXAoYmFzZSk7CiAgICAgaiA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotICAgIGlmIChqICE9IENTX1NVQ0NFU1MpCisgICAgaWYgKGogIT0gMCkKIAljc19lcnJvcihsaW5rLCBSZWxlYXNlV2luZG93LCBqKTsKICAgICByZXR1cm4gKGkgIT0gMHgyMDApID8gMCA6IC0xOwogCkBAIC02MjAsNyArNjIxLDcgQEAKICAgICByZXEuQmFzZSA9IDA7IHJlcS5TaXplID0gMDsKICAgICByZXEuQWNjZXNzU3BlZWQgPSAwOwogICAgIGkgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pOwotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAoaSAhPSAwKSB7CiAJY3NfZXJyb3IobGluaywgUmVxdWVzdFdpbmRvdywgaSk7CiAJcmV0dXJuIC0xOwogICAgIH0KQEAgLTY0Miw3ICs2NDMsNyBAQAogCiAgICAgaW91bm1hcChiYXNlKTsKICAgICBqID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7Ci0gICAgaWYgKGogIT0gQ1NfU1VDQ0VTUykKKyAgICBpZiAoaiAhPSAwKQogCWNzX2Vycm9yKGxpbmssIFJlbGVhc2VXaW5kb3csIGopOwogICAgIHJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvaWJtdHJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jCmluZGV4IDRlYWZhNGYuLmNmM2NjYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jCkBAIC0yMzgsNyArMjM4LDcgQEAKICAgICAvKiBUcnkgUFJJTUFSWSBjYXJkIGF0IDB4QTIwLTB4QTIzICovCiAgICAgbGluay0+aW8uQmFzZVBvcnQxID0gMHhBMjA7CiAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGlmIChpICE9IDApIHsKIAkvKiBDb3VsZG4ndCBnZXQgMHhBMjAtMHhBMjMuICBUcnkgQUxURVJOQVRFIGF0IDB4QTI0LTB4QTI3LiAqLwogCWxpbmstPmlvLkJhc2VQb3J0MSA9IDB4QTI0OwogCUNTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKaW5kZXggY2ZjYmVhOS4uNDQ4Y2Q0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwpAQCAtNjksNyArNjksNyBAQAogSGlzdG9yeQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTG9nOiBubWNsYW5fY3MuYyx2Ci0gKiAyLjUuNzUtYWMxIDIwMDMvMDcvMTEgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKyAqIDIuNS43NS1hYzEgMjAwMy8wNy8xMSBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICogRml4ZWQgaGFuZyBvbiBjYXJkIGVqZWN0IGFzIHdlIHByb2JlIGl0CiAgKiBDbGVhbmVkIHVwIHRvIHVzZSBuZXcgc3R5bGUgbG9ja2luZy4KICAqCkBAIC05MjUsNyArOTI1LDcgQEAKICAgcHJpbnRrKEtFUk5fTk9USUNFICIlczogdHJhbnNtaXQgdGltZWQgb3V0IC0tICIsIGRldi0+bmFtZSk7CiAjaWYgUkVTRVRfT05fVElNRU9VVAogICBwcmludGsoInJlc2V0dGluZyBjYXJkXG4iKTsKLSAgcGNtY2lhX3Jlc2V0X2NhcmQobGluaywgTlVMTCk7CisgIHBjbWNpYV9yZXNldF9jYXJkKGxpbmstPnNvY2tldCk7CiAjZWxzZSAvKiAjaWYgUkVTRVRfT05fVElNRU9VVCAqLwogICBwcmludGsoIk5PVCByZXNldHRpbmcgY2FyZFxuIik7CiAjZW5kaWYgLyogI2lmIFJFU0VUX09OX1RJTUVPVVQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKaW5kZXggZWJjMWFlNi4uZTQwZDYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogICAgIHJlcS5CYXNlID0gMDsgcmVxLlNpemUgPSAwOwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IDA7CiAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbik7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGlmIChpICE9IDApIHsKIAljc19lcnJvcihsaW5rLCBSZXF1ZXN0V2luZG93LCBpKTsKIAlyZXR1cm4gTlVMTDsKICAgICB9CkBAIC0zMzMsNyArMzMzLDcgQEAKIAogICAgIGlvdW5tYXAodmlydCk7CiAgICAgaiA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotICAgIGlmIChqICE9IENTX1NVQ0NFU1MpCisgICAgaWYgKGogIT0gMCkKIAljc19lcnJvcihsaW5rLCBSZWxlYXNlV2luZG93LCBqKTsKICAgICByZXR1cm4gKGkgPCBOUl9JTkZPKSA/IGh3X2luZm8raSA6IE5VTEw7CiB9IC8qIGdldF9od2luZm8gKi8KQEAgLTUwNCw3ICs1MDQsOCBAQAogCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBqIF4gMHgzMDA7CiAJICAgIGxpbmstPmlvLkJhc2VQb3J0MiA9IChqIF4gMHgzMDApICsgMHgxMDsKIAkgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkgICAgaWYgKHJldCA9PSBDU19TVUNDRVNTKSByZXR1cm4gcmV0OworCSAgICBpZiAocmV0ID09IDApCisJCSAgICByZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gcmV0OwogICAgIH0gZWxzZSB7CkBAIC01MTIsNTggKzUxMyw1MyBAQAogICAgIH0KIH0KIAorc3RhdGljIGludCBwY25ldF9jb25mY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkgICB2b2lkICpwcml2X2RhdGEpCit7CisJaW50ICpoYXNfc2htZW0gPSBwcml2X2RhdGE7CisJaW50IGk7CisJY2lzdHBsX2lvX3QgKmlvID0gJmNmZy0+aW87CisKKwlpZiAoY2ZnLT5pbmRleCA9PSAwIHx8IGNmZy0+aW8ubndpbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEZvciBtdWx0aWZ1bmN0aW9uIGNhcmRzLCBieSBjb252ZW50aW9uLCB3ZSBjb25maWd1cmUgdGhlCisJICAgbmV0d29yayBmdW5jdGlvbiB3aXRoIHdpbmRvdyAwLCBhbmQgc2VyaWFsIHdpdGggd2luZG93IDEgKi8KKwlpZiAoaW8tPm53aW4gPiAxKSB7CisJCWkgPSAoaW8tPndpblsxXS5sZW4gPiBpby0+d2luWzBdLmxlbik7CisJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzEtaV0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMS1pXS5sZW47CisJfSBlbHNlIHsKKwkJaSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCX0KKworCSpoYXNfc2htZW0gPSAoKGNmZy0+bWVtLm53aW4gPT0gMSkgJiYKKwkJICAgICAgKGNmZy0+bWVtLndpblswXS5sZW4gPj0gMHg0MDAwKSk7CisJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5baV0uYmFzZTsKKwlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpbltpXS5sZW47CisJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJaWYgKHBfZGV2LT5pby5OdW1Qb3J0czEgKyBwX2Rldi0+aW8uTnVtUG9ydHMyID49IDMyKQorCQlyZXR1cm4gdHJ5X2lvX3BvcnQocF9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHBjbmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwotICAgIHR1cGxlX3QgdHVwbGU7Ci0gICAgY2lzcGFyc2VfdCBwYXJzZTsKLSAgICBpbnQgaSwgbGFzdF9yZXQsIGxhc3RfZm4sIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQ7CisgICAgaW50IGxhc3RfcmV0LCBsYXN0X2ZuLCBzdGFydF9wZywgc3RvcF9wZywgY21fb2Zmc2V0OwogICAgIGludCBoYXNfc2htZW0gPSAwOwotICAgIHVfc2hvcnQgYnVmWzY0XTsKICAgICBod19pbmZvX3QgKmxvY2FsX2h3X2luZm87CiAgICAgREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKICAgICBERUJVRygwLCAicGNuZXRfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIHR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7Ci0gICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7Ci0gICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0gICAgd2hpbGUgKGxhc3RfcmV0ID09IENTX1NVQ0NFU1MpIHsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwotCWNpc3RwbF9pb190ICppbyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeS5pbyk7Ci0KLQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAotCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwIHx8Ci0JCQljZmctPmluZGV4ID09IDAgfHwgY2ZnLT5pby5ud2luID09IDApCi0JCWdvdG8gbmV4dF9lbnRyeTsKLQotCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwotCS8qIEZvciBtdWx0aWZ1bmN0aW9uIGNhcmRzLCBieSBjb252ZW50aW9uLCB3ZSBjb25maWd1cmUgdGhlCi0JICAgbmV0d29yayBmdW5jdGlvbiB3aXRoIHdpbmRvdyAwLCBhbmQgc2VyaWFsIHdpdGggd2luZG93IDEgKi8KLQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JICAgIGkgPSAoaW8tPndpblsxXS5sZW4gPiBpby0+d2luWzBdLmxlbik7Ci0JICAgIGxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMS1pXS5iYXNlOwotCSAgICBsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzEtaV0ubGVuOwotCX0gZWxzZSB7Ci0JICAgIGkgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCX0KLQloYXNfc2htZW0gPSAoKGNmZy0+bWVtLm53aW4gPT0gMSkgJiYKLQkJICAgICAoY2ZnLT5tZW0ud2luWzBdLmxlbiA+PSAweDQwMDApKTsKLQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luW2ldLmJhc2U7Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpbltpXS5sZW47Ci0JbGluay0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxICsgbGluay0+aW8uTnVtUG9ydHMyID49IDMyKSB7Ci0JICAgIGxhc3RfcmV0ID0gdHJ5X2lvX3BvcnQobGluayk7Ci0JICAgIGlmIChsYXN0X3JldCA9PSBDU19TVUNDRVNTKSBicmVhazsKLQl9Ci0gICAgbmV4dF9lbnRyeToKLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpOwotICAgIH0KLSAgICBpZiAobGFzdF9yZXQgIT0gQ1NfU1VDQ0VTUykgeworICAgIGxhc3RfcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHBjbmV0X2NvbmZjaGVjaywgJmhhc19zaG1lbSk7CisgICAgaWYgKGxhc3RfcmV0KSB7CiAJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBsYXN0X3JldCk7CiAJZ290byBmYWlsZWQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwppbmRleCAyNTBlYjE5Li5jNzRkNjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwpAQCAtNDA5LDEwICs0MDksMTMgQEAKIHsKIAlpbnQgaTsKIAotCWlmICgoaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSkpICE9IENTX1NVQ0NFU1MgfHwKLQkJCShpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpKSAhPSBDU19TVUNDRVNTKQorCWkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOworCWlmIChpICE9IDApCiAJCXJldHVybiBpOwotCXJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWkgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCB0dXBsZSk7CisJaWYgKGkgIT0gMCkKKwkJcmV0dXJuIGk7CisJcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZSh0dXBsZSwgcGFyc2UpOwogfQogCiBzdGF0aWMgaW50IG5leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCkBAIC00MjAsMTAgKzQyMywxMCBAQAogewogCWludCBpOwogCi0JaWYgKChpID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUpKSAhPSBDU19TVUNDRVNTIHx8Ci0JCQkoaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKSkgIT0gQ1NfU1VDQ0VTUykKKwlpZiAoKGkgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSkpICE9IDAgfHwKKwkJCShpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpKSAhPSAwKQogCQlyZXR1cm4gaTsKLQlyZXR1cm4gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwlyZXR1cm4gcGNtY2lhX3BhcnNlX3R1cGxlKHR1cGxlLCBwYXJzZSk7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDU5LDI3ICs0NjIsMzYgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtaHpfbWZjX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQl1bnNpZ25lZCBpbnQgdmNjLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwlpbnQgazsKKwlwX2Rldi0+aW8uQmFzZVBvcnQyID0gY2YtPmlvLndpblswXS5iYXNlOworCWZvciAoayA9IDA7IGsgPCAweDQwMDsgayArPSAweDEwKSB7CisJCWlmIChrICYgMHg4MCkKKwkJCWNvbnRpbnVlOworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gayBeIDB4MzAwOworCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKK30KKwogc3RhdGljIGludCBtaHpfbWZjX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7CiAgICAgc3RydWN0IHNtY19jZmdfbWVtICpjZmdfbWVtOwotICAgIHR1cGxlX3QgKnR1cGxlOwotICAgIGNpc3BhcnNlX3QgKnBhcnNlOwotICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmOwotICAgIHVfY2hhciAqYnVmOwogICAgIHdpbl9yZXFfdCByZXE7CiAgICAgbWVtcmVxX3QgbWVtOwotICAgIGludCBpLCBrOworICAgIGludCBpOwogCiAgICAgY2ZnX21lbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbWNfY2ZnX21lbSksIEdGUF9LRVJORUwpOwogICAgIGlmICghY2ZnX21lbSkKLSAgICAgICAgcmV0dXJuIENTX09VVF9PRl9SRVNPVVJDRTsKLQotICAgIHR1cGxlID0gJmNmZ19tZW0tPnR1cGxlOwotICAgIHBhcnNlID0gJmNmZ19tZW0tPnBhcnNlOwotICAgIGNmID0gJnBhcnNlLT5jZnRhYmxlX2VudHJ5OwotICAgIGJ1ZiA9IGNmZ19tZW0tPmJ1ZjsKKwkgICAgcmV0dXJuIC1FTk9NRU07CiAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKICAgICBsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwpAQCAtNDg5LDI3ICs1MDEsOSBAQAogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAgICAgbGluay0+aW8uTnVtUG9ydHMyID0gODsKIAotICAgIHR1cGxlLT5BdHRyaWJ1dGVzID0gdHVwbGUtPlR1cGxlT2Zmc2V0ID0gMDsKLSAgICB0dXBsZS0+VHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKLSAgICB0dXBsZS0+VHVwbGVEYXRhTWF4ID0gMjU1OwotICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQotICAgIGkgPSBmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogICAgIC8qIFRoZSBNZWdhaGVydHogY29tYm8gY2FyZHMgaGF2ZSBtb2RlbS1saWtlIENJUyBlbnRyaWVzLCBzbwogICAgICAgIHdlIGhhdmUgdG8gZXhwbGljaXRseSB0cnkgYSBidW5jaCBvZiBwb3J0IGNvbWJpbmF0aW9ucy4gKi8KLSAgICB3aGlsZSAoaSA9PSBDU19TVUNDRVNTKSB7Ci0JbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKLQlsaW5rLT5pby5CYXNlUG9ydDIgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JZm9yIChrID0gMDsgayA8IDB4NDAwOyBrICs9IDB4MTApIHsKLQkgICAgaWYgKGsgJiAweDgwKSBjb250aW51ZTsKLQkgICAgbGluay0+aW8uQmFzZVBvcnQxID0gayBeIDB4MzAwOwotCSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7Ci0JfQotCWlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOwotCWkgPSBuZXh0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7Ci0gICAgfQotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpCisgICAgaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBtaHpfbWZjX2NvbmZpZ19jaGVjaywgTlVMTCkpCiAJZ290byBmcmVlX2NmZ19tZW07CiAgICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CiAKQEAgLTUxOCw3ICs1MTIsNyBAQAogICAgIHJlcS5CYXNlID0gcmVxLlNpemUgPSAwOwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IDA7CiAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbik7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykKKyAgICBpZiAoaSAhPSAwKQogCWdvdG8gZnJlZV9jZmdfbWVtOwogICAgIHNtYy0+YmFzZSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKICAgICBtZW0uQ2FyZE9mZnNldCA9IG1lbS5QYWdlID0gMDsKQEAgLTUyNiwxNCArNTIwLDE0IEBACiAJbWVtLkNhcmRPZmZzZXQgPSBsaW5rLT5jb25mLkNvbmZpZ0Jhc2U7CiAgICAgaSA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKTsKIAotICAgIGlmICgoaSA9PSBDU19TVUNDRVNTKQorICAgIGlmICgoaSA9PSAwKQogCSYmIChzbWMtPm1hbmZpZCA9PSBNQU5GSURfTUVHQUhFUlRaKQogCSYmIChzbWMtPmNhcmRpZCA9PSBQUk9ESURfTUVHQUhFUlRaX0VNMzI4OCkpCiAJbWh6XzMyODhfcG93ZXIobGluayk7CiAKIGZyZWVfY2ZnX21lbToKICAgICBrZnJlZShjZmdfbWVtKTsKLSAgICByZXR1cm4gaTsKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIGludCBtaHpfc2V0dXAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC01NjAsMTIgKzU1NCwxMiBAQAogICAgIC8qIFJlYWQgdGhlIHN0YXRpb24gYWRkcmVzcyBmcm9tIHRoZSBDSVMuICBJdCBpcyBzdG9yZWQgYXMgdGhlIGxhc3QKICAgICAgICAoZm91cnRoKSBzdHJpbmcgaW4gdGhlIFZlcnNpb24gMSBWZXJzaW9uL0lEIHR1cGxlLiAqLwogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfVkVSU18xOwotICAgIGlmIChmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAoZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKSAhPSAwKSB7CiAJcmMgPSAtMTsKIAlnb3RvIGZyZWVfY2ZnX21lbTsKICAgICB9CiAgICAgLyogVWdoIC0tIHRoZSBFTTExNDQgY2FyZCBoYXMgdHdvIFZFUlNfMSB0dXBsZXMhPyEgKi8KLSAgICBpZiAobmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpICE9IENTX1NVQ0NFU1MpCisgICAgaWYgKG5leHRfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKSAhPSAwKQogCWZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7CiAgICAgaWYgKHBhcnNlLT52ZXJzaW9uXzEubnMgPiAzKSB7CiAJc3RhdGlvbl9hZGRyID0gcGFyc2UtPnZlcnNpb25fMS5zdHIgKyBwYXJzZS0+dmVyc2lvbl8xLm9mc1szXTsKQEAgLTU3NywxMSArNTcxLDExIEBACiAKICAgICAvKiBBbm90aGVyIHBvc3NpYmlsaXR5OiBmb3IgdGhlIEVNMzI4OCwgaW4gYSBzcGVjaWFsIHR1cGxlICovCiAgICAgdHVwbGUtPkRlc2lyZWRUdXBsZSA9IDB4ODE7Ci0gICAgaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgdHVwbGUpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCB0dXBsZSkgIT0gMCkgewogCXJjID0gLTE7CiAJZ290byBmcmVlX2NmZ19tZW07CiAgICAgfQotICAgIGlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgdHVwbGUpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssIHR1cGxlKSAhPSAwKSB7CiAJcmMgPSAtMTsKIAlnb3RvIGZyZWVfY2ZnX21lbTsKICAgICB9CkBAIC02NjAsNDYgKzY1NCwyNyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAorc3RhdGljIGludCBzbWNfY29uZmlnY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCQkgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7Cit9CisKIHN0YXRpYyBpbnQgc21jX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLSAgICBzdHJ1Y3Qgc21jX2NmZ19tZW0gKmNmZ19tZW07Ci0gICAgdHVwbGVfdCAqdHVwbGU7Ci0gICAgY2lzcGFyc2VfdCAqcGFyc2U7Ci0gICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2Y7Ci0gICAgdV9jaGFyICpidWY7CiAgICAgaW50IGk7CiAKLSAgICBjZmdfbWVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNtY19jZmdfbWVtKSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKCFjZmdfbWVtKQotCXJldHVybiBDU19PVVRfT0ZfUkVTT1VSQ0U7Ci0KLSAgICB0dXBsZSA9ICZjZmdfbWVtLT50dXBsZTsKLSAgICBwYXJzZSA9ICZjZmdfbWVtLT5wYXJzZTsKLSAgICBjZiA9ICZwYXJzZS0+Y2Z0YWJsZV9lbnRyeTsKLSAgICBidWYgPSBjZmdfbWVtLT5idWY7Ci0KLSAgICB0dXBsZS0+QXR0cmlidXRlcyA9IHR1cGxlLT5UdXBsZU9mZnNldCA9IDA7Ci0gICAgdHVwbGUtPlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7Ci0gICAgdHVwbGUtPlR1cGxlRGF0YU1heCA9IDI1NTsKLSAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0KICAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKLSAgICBpID0gZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKLSAgICB3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7Ci0JaWYgKGkgPT0gQ1NfU1VDQ0VTUykgewotCSAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwotCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCSAgICBpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKLQl9Ci0JaSA9IG5leHRfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKLSAgICB9Ci0gICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykKLQlkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyAgICBpID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHNtY19jb25maWdjaGVjaywgTlVMTCk7CisgICAgaWYgKCFpKQorCSAgICBkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKIAotICAgIGtmcmVlKGNmZ19tZW0pOwogICAgIHJldHVybiBpOwogfQogCkBAIC03MTUsNyArNjkwLDcgQEAKIAogICAgIGNmZ19tZW0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc21jX2NmZ19tZW0pLCBHRlBfS0VSTkVMKTsKICAgICBpZiAoIWNmZ19tZW0pCi0JcmV0dXJuIENTX09VVF9PRl9SRVNPVVJDRTsKKwkgICAgcmV0dXJuIC1FTk9NRU07CiAKICAgICB0dXBsZSA9ICZjZmdfbWVtLT50dXBsZTsKICAgICBwYXJzZSA9ICZjZmdfbWVtLT5wYXJzZTsKQEAgLTcyOCwxMiArNzAzLDEyIEBACiAgICAgLyogQ2hlY2sgZm9yIGEgTEFOIGZ1bmN0aW9uIGV4dGVuc2lvbiB0dXBsZSAqLwogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfRlVOQ0U7CiAgICAgaSA9IGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7Ci0gICAgd2hpbGUgKGkgPT0gQ1NfU1VDQ0VTUykgeworICAgIHdoaWxlIChpID09IDApIHsKIAlpZiAocGFyc2UtPmZ1bmNlLnR5cGUgPT0gQ0lTVFBMX0ZVTkNFX0xBTl9OT0RFX0lEKQogCSAgICBicmVhazsKIAlpID0gbmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogICAgIH0KLSAgICBpZiAoaSA9PSBDU19TVUNDRVNTKSB7CisgICAgaWYgKGkgPT0gMCkgewogCW5vZGVfaWQgPSAoY2lzdHBsX2xhbl9ub2RlX2lkX3QgKilwYXJzZS0+ZnVuY2UuZGF0YTsKIAlpZiAobm9kZV9pZC0+bmIgPT0gNikgewogCSAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQpAQCAtNzgwLDkgKzc1NSwxMCBAQAogICAgIGZvciAoaSA9IGogPSAwOyBqIDwgNDsgaisrKSB7CiAJbGluay0+aW8uQmFzZVBvcnQyID0gY29tW2pdOwogCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCWlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOworCWlmIChpID09IDApCisJCWJyZWFrOwogICAgIH0KLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisgICAgaWYgKGkgIT0gMCkgewogCS8qIEZhbGxiYWNrOiB0dXJuIG9mZiBoYXJkIGRlY29kZSAqLwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAweDAzOwogCWxpbmstPmlvLk51bVBvcnRzMiA9IDA7CkBAIC04MTUsMTMgKzc5MSwxMyBAQAogICAgIC8qIFJlYWQgdGhlIHN0YXRpb24gYWRkcmVzcyBmcm9tIHR1cGxlIDB4OTAsIHN1YnR1cGxlIDB4MDQgKi8KICAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gMHg5MDsKICAgICBpID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCB0dXBsZSk7Ci0gICAgd2hpbGUgKGkgPT0gQ1NfU1VDQ0VTUykgeworICAgIHdoaWxlIChpID09IDApIHsKIAlpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssIHR1cGxlKTsKLQlpZiAoKGkgIT0gQ1NfU1VDQ0VTUykgfHwgKGJ1ZlswXSA9PSAweDA0KSkKKwlpZiAoKGkgIT0gMCkgfHwgKGJ1ZlswXSA9PSAweDA0KSkKIAkgICAgYnJlYWs7CiAJaSA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCB0dXBsZSk7CiAgICAgfQotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAoaSAhPSAwKSB7CiAJcmMgPSAtMTsKIAlnb3RvIGZyZWVfY2ZnX21lbTsKICAgICB9CkBAIC05NTksOCArOTM1LDExIEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIENTX0VYSVRfVEVTVChyZXQsIHN2YywgbGFiZWwpIFwKLWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeyBjc19lcnJvcihsaW5rLCBzdmMsIHJldCk7IGdvdG8gbGFiZWw7IH0KKyNkZWZpbmUgQ1NfRVhJVF9URVNUKHJldCwgc3ZjLCBsYWJlbCkJXAoraWYgKHJldCAhPSAwKSB7CQkJCVwKKwljc19lcnJvcihsaW5rLCBzdmMsIHJldCk7CVwKKwlnb3RvIGxhYmVsOyAJCQlcCit9CiAKIHN0YXRpYyBpbnQgc21jOTFjOTJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKaW5kZXggYzMzYTNkNS4uZTFmZDU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCkBAIC0zNzcsNyArMzc3LDcgQEAKIAogCWlmICgoZXJyID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKSkgPT0gMCAmJgogCQkJKGVyciA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKSkgPT0gMCkKLQkJZXJyID0gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwkJZXJyID0gcGNtY2lhX3BhcnNlX3R1cGxlKHR1cGxlLCBwYXJzZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzg4LDcgKzM4OCw3IEBACiAKIAlpZiAoKGVyciA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKSkgPT0gMCAmJgogCQkJKGVyciA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKSkgPT0gMCkKLQkJZXJyID0gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwkJZXJyID0gcGNtY2lhX3BhcnNlX3R1cGxlKHR1cGxlLCBwYXJzZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzE1LDYgKzcxNSw0NyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50Cit4aXJjMnBzX2NvbmZpZ19tb2RlbShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgaW9hZGRyOworCisJaWYgKGNmLT5pby5ud2luID4gMCAgJiYgIChjZi0+aW8ud2luWzBdLmJhc2UgJiAweGYpID09IDgpIHsKKwkJZm9yIChpb2FkZHIgPSAweDMwMDsgaW9hZGRyIDwgMHg0MDA7IGlvYWRkciArPSAweDEwKSB7CisJCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gY2YtPmlvLndpblswXS5iYXNlOworCQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvYWRkcjsKKwkJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50Cit4aXJjMnBzX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlpbnQgKnBhc3MgPSBwcml2X2RhdGE7CisKKwlpZiAoY2YtPmlvLm53aW4gPiAwICYmIChjZi0+aW8ud2luWzBdLmJhc2UgJiAweGYpID09IDgpIHsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IHBfZGV2LT5pby5CYXNlUG9ydDIKKwkJCSsgKCpwYXNzID8gKGNmLT5pbmRleCAmIDB4MjAgPyAtMjQ6OCkKKwkJCSAgIDogKGNmLT5pbmRleCAmIDB4MjAgPyAgIDg6LTI0KSk7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOworCit9CisKIC8qKioqKioqKioqKioqKioqCiAgKiB4aXJjMnBzX2NvbmZpZygpIGlzIHNjaGVkdWxlZCB0byBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudAogICogaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCkBAIC03MjUsMTMgKzc2NiwxMiBAQAogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGxvY2FsX2luZm9fdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworICAgIHVuc2lnbmVkIGludCBpb2FkZHI7CiAgICAgdHVwbGVfdCB0dXBsZTsKICAgICBjaXNwYXJzZV90IHBhcnNlOwotICAgIHVuc2lnbmVkIGludCBpb2FkZHI7CiAgICAgaW50IGVyciwgaTsKICAgICB1X2NoYXIgYnVmWzY0XTsKICAgICBjaXN0cGxfbGFuX25vZGVfaWRfdCAqbm9kZV9pZCA9IChjaXN0cGxfbGFuX25vZGVfaWRfdCopcGFyc2UuZnVuY2UuZGF0YTsKLSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiA9ICZwYXJzZS5jZnRhYmxlX2VudHJ5OwogICAgIERFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAgICAgbG9jYWwtPmRpbmdvX2NjciA9IE5VTEw7CkBAIC04NDYsMTkgKzg4Niw4IEBACiAJICAgIC8qIFRha2UgdGhlIE1vZGVtIElPIHBvcnQgZnJvbSB0aGUgQ0lTIGFuZCBzY2FuIGZvciBhIGZyZWUKIAkgICAgICogRXRoZXJuZXQgcG9ydCAqLwogCSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsgLyogbm8gTWFrbyBzdHVmZiBhbnltb3JlICovCi0JICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCSAgICBmb3IgKGVyciA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsgIWVycjsKLQkJCQkgZXJyID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpIHsKLQkJaWYgKGNmLT5pby5ud2luID4gMCAgJiYgIChjZi0+aW8ud2luWzBdLmJhc2UgJiAweGYpID09IDgpIHsKLQkJICAgIGZvciAoaW9hZGRyID0gMHgzMDA7IGlvYWRkciA8IDB4NDAwOyBpb2FkZHIgKz0gMHgxMCkgewotCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleCA7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpb2FkZHI7Ci0JCQlpZiAoIShlcnI9cGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkpCi0JCQkgICAgZ290byBwb3J0X2ZvdW5kOwotCQkgICAgfQotCQl9Ci0JICAgIH0KKwkgICAgaWYgKCFwY21jaWFfbG9vcF9jb25maWcobGluaywgeGlyYzJwc19jb25maWdfbW9kZW0sIE5VTEwpKQorCQkgICAgZ290byBwb3J0X2ZvdW5kOwogCX0gZWxzZSB7CiAJICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDE4OwogCSAgICAvKiBXZSBkbyAyIHBhc3NlcyBoZXJlOiBUaGUgZmlyc3Qgb25lIHVzZXMgdGhlIHJlZ3VsYXIgbWFwcGluZyBhbmQKQEAgLTg2NiwyMSArODk1LDkgQEAKIAkgICAgICogbWlycm9yZWQgZXZlcnkgMzIgYnl0ZXMuIEFjdHVhbGx5IHdlIHVzZSBhIG1pcnJvcmVkIHBvcnQgZm9yCiAJICAgICAqIHRoZSBNYWtvIGlmIChvbiB0aGUgZmlyc3QgcGFzcykgdGhlIENPUiBiaXQgNSBpcyBzZXQuCiAJICAgICAqLwotCSAgICBmb3IgKHBhc3M9MDsgcGFzcyA8IDI7IHBhc3MrKykgewotCQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQkJZm9yIChlcnIgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7ICFlcnI7Ci0JCQkJICAgICBlcnIgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSl7Ci0JCSAgICBpZiAoY2YtPmlvLm53aW4gPiAwICAmJiAgKGNmLT5pby53aW5bMF0uYmFzZSAmIDB4ZikgPT0gOCl7Ci0JCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4IDsKLQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGxpbmstPmlvLkJhc2VQb3J0MgotCQkJCSAgICArIChwYXNzID8gKGNmLT5pbmRleCAmIDB4MjAgPyAtMjQ6OCkKLQkJCQkJICAgIDogKGNmLT5pbmRleCAmIDB4MjAgPyAgIDg6LTI0KSk7Ci0JCQlpZiAoIShlcnI9cGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkpCisJICAgIGZvciAocGFzcz0wOyBwYXNzIDwgMjsgcGFzcysrKQorCQkgICAgaWYgKCFwY21jaWFfbG9vcF9jb25maWcobGluaywgeGlyYzJwc19jb25maWdfY2hlY2ssICZwYXNzKSkKIAkJCSAgICBnb3RvIHBvcnRfZm91bmQ7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQogCSAgICAvKiBpZiBzcGVjaWFsIG9wdGlvbjoKIAkgICAgICogdHJ5IHRvIGNvbmZpZ3VyZSBhcyBFdGhlcm5ldCBvbmx5LgogCSAgICAgKiAuLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jCmluZGV4IDY2NzFlMmQuLmQwZWQxZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jCkBAIC01NSw2ICs1NSw3IEBACiAKIC8qKgogICogbWRpb2J1c19yZWxlYXNlIC0gbWlpX2J1cyBkZXZpY2UgcmVsZWFzZSBjYWxsYmFjaworICogQGQ6IHRoZSB0YXJnZXQgc3RydWN0IGRldmljZSB0aGF0IGNvbnRhaW5zIHRoZSBtaWlfYnVzCiAgKgogICogRGVzY3JpcHRpb246IGNhbGxlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBhbiBtaWlfYnVzIGlzCiAgKiBkcm9wcGVkLCB0byBmcmVlIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IDE3MTYyNzQuLmUxMWIwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtMzA5LDExICszMDksNiBAQAogfQogRVhQT1JUX1NZTUJPTChwaHlfZGlzY29ubmVjdCk7CiAKLXN0YXRpYyBpbnQgcGh5X2NvbXBhcmVfaWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCXJldHVybiBzdHJjbXAoKGNoYXIgKilkYXRhLCBkZXYtPmJ1c19pZCkgPyAwIDogMTsKLX0KLQogLyoqCiAgKiBwaHlfYXR0YWNoIC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBwYXJ0aWN1bGFyIFBIWSBkZXZpY2UKICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaApAQCAtMzM3LDggKzMzMiw3IEBACiAKIAkvKiBTZWFyY2ggdGhlIGxpc3Qgb2YgUEhZIGRldmljZXMgb24gdGhlIG1kaW8gYnVzIGZvciB0aGUKIAkgKiBQSFkgd2l0aCB0aGUgcmVxdWVzdGVkIG5hbWUgKi8KLQlkID0gYnVzX2ZpbmRfZGV2aWNlKGJ1cywgTlVMTCwgKHZvaWQgKilidXNfaWQsIHBoeV9jb21wYXJlX2lkKTsKLQorCWQgPSBidXNfZmluZF9kZXZpY2VfYnlfbmFtZShidXMsIE5VTEwsIGJ1c19pZCk7CiAJaWYgKGQpIHsKIAkJcGh5ZGV2ID0gdG9fcGh5X2RldmljZShkKTsKIAl9IGVsc2UgewpAQCAtNTU3LDYgKzU1MSw3IEBACiAKIAlyZXR1cm4gY3RsOwogfQorRVhQT1JUX1NZTUJPTChnZW5waHlfcmVzdGFydF9hbmVnKTsKIAogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCmluZGV4IDBjYTBmY2IuLjdlODU3ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwpAQCAtODY2LDggKzg2Niw4IEBACiAJCQllcnIgPSBQVFJfRVJSKHBwcF9jbGFzcyk7CiAJCQlnb3RvIG91dF9jaHJkZXY7CiAJCX0KLQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHBwcF9jbGFzcywgTlVMTCwgTUtERVYoUFBQX01BSk9SLCAwKSwKLQkJCQkgICAgICBOVUxMLCAicHBwIik7CisJCWRldmljZV9jcmVhdGUocHBwX2NsYXNzLCBOVUxMLCBNS0RFVihQUFBfTUFKT1IsIDApLCBOVUxMLAorCQkJICAgICAgInBwcCIpOwogCX0KIAogb3V0OgpAQCAtMjEyNywxMyArMjEyNyw5IEBACiAJICAgIHx8IGNjcF9vcHRpb25bMV0gPCAyIHx8IGNjcF9vcHRpb25bMV0gPiBkYXRhLmxlbmd0aCkKIAkJZ290byBvdXQ7CiAKLQljcCA9IGZpbmRfY29tcHJlc3NvcihjY3Bfb3B0aW9uWzBdKTsKLSNpZmRlZiBDT05GSUdfS01PRAotCWlmICghY3ApIHsKLQkJcmVxdWVzdF9tb2R1bGUoInBwcC1jb21wcmVzcy0lZCIsIGNjcF9vcHRpb25bMF0pOwotCQljcCA9IGZpbmRfY29tcHJlc3NvcihjY3Bfb3B0aW9uWzBdKTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX0tNT0QgKi8KKwljcCA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKAorCQlmaW5kX2NvbXByZXNzb3IoY2NwX29wdGlvblswXSksCisJCSJwcHAtY29tcHJlc3MtJWQiLCBjY3Bfb3B0aW9uWzBdKTsKIAlpZiAoIWNwKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb3guYyBiL2RyaXZlcnMvbmV0L3BwcG94LmMKaW5kZXggYzY4OThjMS4uMDNhZWNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb3guYworKysgYi9kcml2ZXJzL25ldC9wcHBveC5jCkBAIC0xMTUsMTMgKzExNSw4IEBACiAJCWdvdG8gb3V0OwogCiAJcmMgPSAtRVBST1RPTk9TVVBQT1JUOwotI2lmZGVmIENPTkZJR19LTU9ECi0JaWYgKCFwcHBveF9wcm90b3NbcHJvdG9jb2xdKSB7Ci0JCWNoYXIgYnVmZmVyWzMyXTsKLQkJc3ByaW50ZihidWZmZXIsICJwcHBveC1wcm90by0lZCIsIHByb3RvY29sKTsKLQkJcmVxdWVzdF9tb2R1bGUoYnVmZmVyKTsKLQl9Ci0jZW5kaWYKKwlpZiAoIXBwcG94X3Byb3Rvc1twcm90b2NvbF0pCisJCXJlcXVlc3RfbW9kdWxlKCJwcHBveC1wcm90by0lZCIsIHByb3RvY29sKTsKIAlpZiAoIXBwcG94X3Byb3Rvc1twcm90b2NvbF0gfHwKIAkgICAgIXRyeV9tb2R1bGVfZ2V0KHBwcG94X3Byb3Rvc1twcm90b2NvbF0tPm93bmVyKSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaCBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCmluZGV4IGMzN2VhNDMuLjM4MTE2ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCkBAIC01OCw3ICs1OCw3IEBACiAgKi8KICNpZiAoUEFHRV9TSElGVCA9PSAxMikgfHwgKFBBR0VfU0hJRlQgPT0gMTMpCS8qIDRrICYgOGsgcGFnZXMgKi8KICNkZWZpbmUgVFhfREVTQ19QRVJfT0FMICgoTUFYX1NLQl9GUkFHUyAtIFRYX0RFU0NfUEVSX0lPQ0IpICsgMikKLSNlbGlmIChQQUdFX1NISUZUID09IDE2KQkvKiA2NGsgcGFnZXMgKi8KKyNlbHNlIC8qIGFsbCBvdGhlciBwYWdlIHNpemVzICovCiAjZGVmaW5lIFRYX0RFU0NfUEVSX09BTCAwCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKaW5kZXggNjQ1N2Y4Yy4uYjYyZmJkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKaW5kZXggM2FmODIyYi4uNGIyY2FhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCkBAIC0zNiwxMCArMzYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgogCiAjaW5jbHVkZSAicWxnZS5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCBiZGFlMmM1Li5jODIxZGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTIxNTQsNiArMjE1NCw4IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmdHAtPmxvY2spOwogCisJdHAtPm1taW9fYWRkciA9IGlvYWRkcjsKKwogCXJ0bF9pbml0X21hY19hZGRyZXNzKHRwLCBpb2FkZHIpOwogCiAJLyogR2V0IE1BQyBhZGRyZXNzICovCkBAIC0yMTg2LDcgKzIxODgsNiBAQAogI2VuZGlmCiAKIAl0cC0+aW50cl9tYXNrID0gMHhmZmZmOwotCXRwLT5tbWlvX2FkZHIgPSBpb2FkZHI7CiAJdHAtPmFsaWduID0gY2ZnLT5hbGlnbjsKIAl0cC0+aHdfc3RhcnQgPSBjZmctPmh3X3N0YXJ0OwogCXRwLT5pbnRyX2V2ZW50ID0gY2ZnLT5pbnRyX2V2ZW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2hfZXRoLmMgYi9kcml2ZXJzL25ldC9zaF9ldGguYwppbmRleCBiMzlkMWNjLi5hMjRiYjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaF9ldGguYworKysgYi9kcml2ZXJzL25ldC9zaF9ldGguYwpAQCAtMTIwNSwxMSArMTIwNSwxMiBAQAogCQlkZXZubyA9IDA7CiAKIAluZGV2LT5kbWEgPSAtMTsKLQluZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChuZGV2LT5pcnEgPCAwKSB7CisJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAocmV0IDwgMCkgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dF9yZWxlYXNlOwogCX0KKwluZGV2LT5pcnEgPSByZXQ7CiAKIAlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IDM4MDViOTMuLjM4MTNkMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTMwMzQsNyArMzAzNCw4IEBACiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CiAKLQlpZiAod29sLT53b2xvcHRzICYgfnNreTJfd29sX3N1cHBvcnRlZChza3kyLT5odykpCisJaWYgKCh3b2wtPndvbG9wdHMgJiB+c2t5Ml93b2xfc3VwcG9ydGVkKHNreTItPmh3KSkKKwkgICAgfHwgIWRldmljZV9jYW5fd2FrZXVwKCZody0+cGRldi0+ZGV2KSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJc2t5Mi0+d29sID0gd29sLT53b2xvcHRzOwpAQCAtMzA0NSw2ICszMDQ2LDggQEAKIAkJc2t5Ml93cml0ZTMyKGh3LCBCMF9DVFNULCBza3kyLT53b2wKIAkJCSAgICAgPyBZMl9IV19XT0xfT04gOiBZMl9IV19XT0xfT0ZGKTsKIAorCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmaHctPnBkZXYtPmRldiwgc2t5Mi0+d29sKTsKKwogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlza3kyX3dvbF9pbml0KHNreTIpOwogCXJldHVybiAwOwpAQCAtNDE3OSwxOCArNDE4Miw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgcGNpX3dha2VfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWludCBwbSAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9QTSk7Ci0JdTE2IHZhbHVlOwotCi0JaWYgKCFwbSkKLQkJcmV0dXJuIDA7Ci0JaWYgKHBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG0gKyBQQ0lfUE1fQ1RSTCwgJnZhbHVlKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHZhbHVlICYgUENJX1BNX0NUUkxfUE1FX0VOQUJMRTsKLX0KLQogLyoKICAqIFJlYWQgYW5kIHBhcnNlIHRoZSBmaXJzdCBwYXJ0IG9mIFZpdGFsIFByb2R1Y3QgRGF0YQogICovCkBAIC00MzE0LDcgKzQzMDUsNyBAQAogCQl9CiAJfQogCi0Jd29sX2RlZmF1bHQgPSBwY2lfd2FrZV9lbmFibGVkKHBkZXYpID8gV0FLRV9NQUdJQyA6IDA7CisJd29sX2RlZmF1bHQgPSBkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSA/IFdBS0VfTUFHSUMgOiAwOwogCiAJZXJyID0gLUVOT01FTTsKIAlodyA9IGt6YWxsb2Moc2l6ZW9mKCpodyksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5jIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCmluZGV4IDNkMTlkMDAuLjhhYTc0NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKQEAgLTY4NSw4ICs2ODUsMTAgQEAKIAkgKiBQSFkjMSB0byBQSFkjMzEsIGFuZCB0aGVuIFBIWSMwIGxhc3QuCiAJICovCiAJc3dpdGNoKGxwLT52ZXJzaW9uKSB7Ci0JCWNhc2UgMHgxMTU6Ci0JCWNhc2UgMHgxMTc6CisJCWNhc2UgQ0hJUF85MTE1OgorCQljYXNlIENISVBfOTExNzoKKwkJY2FzZSBDSElQXzkyMTU6CisJCWNhc2UgQ0hJUF85MjE3OgogCQkJY2ZnID0gU01DX0dFVF9IV19DRkcobHApOwogCQkJaWYgKGNmZyAmIEhXX0NGR19FWFRfUEhZX0RFVF8pIHsKIAkJCQljZmcgJj0gfkhXX0NGR19QSFlfQ0xLX1NFTF87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MTF4LmgKaW5kZXggMmFiZmMyOC4uYmY2MjQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguaApAQCAtNjY2LDEwICs2NjYsMTMgQEAKICNkZWZpbmUgTEFOOTExWF9JTlRFUk5BTF9QSFlfSUQJCSgweDAwMDdDMDAwKQogCiAvKiBDaGlwIElEIHZhbHVlcyAqLwotI2RlZmluZSBDSElQXzkxMTUJMHgxMTUKLSNkZWZpbmUgQ0hJUF85MTE2CTB4MTE2Ci0jZGVmaW5lIENISVBfOTExNwkweDExNwotI2RlZmluZSBDSElQXzkxMTgJMHgxMTgKKyNkZWZpbmUgQ0hJUF85MTE1CTB4MDExNQorI2RlZmluZSBDSElQXzkxMTYJMHgwMTE2CisjZGVmaW5lIENISVBfOTExNwkweDAxMTcKKyNkZWZpbmUgQ0hJUF85MTE4CTB4MDExOAorI2RlZmluZSBDSElQXzkyMTUJMHgxMTVBCisjZGVmaW5lIENISVBfOTIxNwkweDExN0EKKyNkZWZpbmUgQ0hJUF85MjE4CTB4MTE4QQogCiBzdHJ1Y3QgY2hpcF9pZCB7CiAJdTE2IGlkOwpAQCAtNjgxLDYgKzY4NCw5IEBACiAJeyBDSElQXzkxMTYsICJMQU45MTE2IiB9LAogCXsgQ0hJUF85MTE3LCAiTEFOOTExNyIgfSwKIAl7IENISVBfOTExOCwgIkxBTjkxMTgiIH0sCisJeyBDSElQXzkyMTUsICJMQU45MjE1IiB9LAorCXsgQ0hJUF85MjE3LCAiTEFOOTIxNyIgfSwKKwl7IENISVBfOTIxOCwgIkxBTjkyMTgiIH0sCiAJeyAwLCBOVUxMIH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YzM1ODE1LmMgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKaW5kZXggNDk4MGIxMi4uZGYyMGNhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jCisrKyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwpAQCAtNzk2LDcgKzc5Niw3IEBACiAJbWRpb2J1c191bnJlZ2lzdGVyKGxwLT5taWlfYnVzKTsKIGVycl9vdXRfZnJlZV9tZGlvX2lycToKIAlrZnJlZShscC0+bWlpX2J1cy0+aXJxKTsKLWVycl9vdXRfZnJlZV9taWlfYnVzOworZXJyX291dF9mcmVlX21paV9idXM6CiAJbWRpb2J1c19mcmVlKGxwLT5taWlfYnVzKTsKIGVycl9vdXQ6CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RsYW4uYyBiL2RyaXZlcnMvbmV0L3RsYW4uYwppbmRleCBlYzg3MWY2Li5jNDFkNjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvdGxhbi5jCkBAIC0yOSw3ICsyOSw4IEBACiAgKgogICoJVGlncmFuIEFpdmF6aWFuIDx0aWdyYW5Ac2NvLmNvbT46CVRMYW5fUGNpUHJvYmUoKSBub3cgdXNlcwogICoJCQkJCQluZXcgUENJIEJJT1MgaW50ZXJmYWNlLgotICoJQWxhbiBDb3gJPGFsYW5AcmVkaGF0LmNvbT46CUZpeGVkIHRoZSBvdXQgb2YgbWVtb3J5CisgKglBbGFuIENveAk8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPjoKKyAqCQkJCQkJRml4ZWQgdGhlIG91dCBvZiBtZW1vcnkKICAqCQkJCQkJaGFuZGxpbmcuCiAgKgogICoJVG9yYmVuIE1hdGhpYXNlbiA8dG9yYmVuLm1hdGhpYXNlbkBjb21wYXEuY29tPiBOZXcgTWFpbnRhaW5lciEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKaW5kZXggZmE3M2U2ZS4uZWQ1MGQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKQEAgLTI1LDcgKzI1LDcgQEAKICAqICBUbyBkbzoKICAqICAgIDEuIE11bHRpY2FzdCBzdXBwb3J0LgogICoKLSAqICBJbml0aWFsIDIuNSBjbGVhbnVwIEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+ICAyMDAyLzEwLzI4CisgKiAgSW5pdGlhbCAyLjUgY2xlYW51cCBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiAgMjAwMi8xMC8yOAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYwppbmRleCBmNTRjNDUwLi4xMjRkNWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCkBAIC0xNjg4LDYgKzE2ODgsNyBAQAogCXVuc2lnbmVkIGk7CiAKIAlkdzMyIChST01DbWQsIDApOwkvKiBSZXNldCB0aGUgcG9pbnRlciB3aXRoIGEgZHVtbXkgd3JpdGUuICovCisJdWRlbGF5KDUpOwogCiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewogCQlpbnQgdmFsdWUsIGJvZ3VzY250ID0gMTAwMDAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCmluZGV4IDY1NjIwMDQuLjhlNDZhNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBNYXJjZWxvIFRvc2F0dGkgPG1hcmNlbG9AY29uZWN0aXZhLmNvbS5icj4gOgogICAgIE1hZGUgaXQgY29tcGlsZSBpbiAyLjMgKGRldmljZSB0byBuZXRfZGV2aWNlKQogCi0gICAgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4gOgorICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+IDoKICAgICBDbGVhbmVkIHVwIGZvciBrZXJuZWwgbWVyZ2UuCiAgICAgUmVtb3ZlZCB0aGUgYmFjayBjb21wYXRpYmlsaXR5IHN1cHBvcnQKICAgICBSZWZvcm1hdHRlZCwgZml4aW5nIHNwZWxsaW5nIGV0YyBhcyBJIHdlbnQKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICBzdXBwb3J0LiAgVXBkYXRlZCBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbi4gIERvIG5vdAogICAgIGZvcmdldCB0byB1bm1hcCBQQ0kgbWFwcGVkIHNrYnMuCiAKLSAgICBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgICAgQWRkZWQgbmV3IFBDSSBpZGVudGlmaWVycyBwcm92aWRlZCBieSBDbGVhciBaaGFuZyBhdCBBTGkKICAgICBmb3IgdGhlaXIgMTU2MyBldGhlcm5ldCBkZXZpY2UuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCmluZGV4IDIyYzE3YmIuLjQ2NmE4OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwpAQCAtNDU2LDcgKzQ1Niw3IEBACiB7CiAJc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0Jd2FybigiVHJhbnNtaXQgdGltZWQgb3V0LiIpOworCWRldl93YXJuKCZuZXRkZXYtPmRldiwgIlRyYW5zbWl0IHRpbWVkIG91dC5cbiIpOwogCXVzYl91bmxpbmtfdXJiKGNhdGMtPnR4X3VyYik7CiB9CiAKQEAgLTg0Nyw3ICs4NDcsOCBAQAogCQkJZGJnKCI2NGsgTWVtb3J5XG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJd2FybigiQ291bGRuJ3QgZGV0ZWN0IG1lbW9yeSBzaXplLCBhc3N1bWluZyAzMmsiKTsKKwkJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkJICJDb3VsZG4ndCBkZXRlY3QgbWVtb3J5IHNpemUsIGFzc3VtaW5nIDMya1xuIik7CiAJCWNhc2UgMHg4NzY1NDMyMToKIAkJCWNhdGNfc2V0X3JlZyhjYXRjLCBUeEJ1ZkNvdW50LCA0KTsKIAkJCWNhdGNfc2V0X3JlZyhjYXRjLCBSeEJ1ZkNvdW50LCAxNik7CkBAIC05NTMsNyArOTU0LDggQEAKIHsKIAlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZjYXRjX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA9PSAwKQotCQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfREVTQyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwppbmRleCBkNjgyOWRiLi5mZGJmM2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCkBAIC04MzIsNyArODMyLDcgQEAKIAogCWlmKChyZXMgPSB1c2Jfc3VibWl0X3VyYihrYXdldGgtPnR4X3VyYiwgR0ZQX0FUT01JQykpKQogCXsKLQkJd2Fybigia2F3ZXRoIGZhaWxlZCB0eF91cmIgJWQiLCByZXMpOworCQlkZXZfd2FybigmbmV0LT5kZXYsICJrYXdldGggZmFpbGVkIHR4X3VyYiAlZFxuIiwgcmVzKTsKIHNraXA6CiAJCWthd2V0aC0+c3RhdHMudHhfZXJyb3JzKys7CiAKQEAgLTkyNCw3ICs5MjQsNyBAQAogewogCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSBuZXRkZXZfcHJpdihuZXQpOwogCi0Jd2FybigiJXM6IFR4IHRpbWVkIG91dC4gUmVzZXR0aW5nLiIsIG5ldC0+bmFtZSk7CisJZGV2X3dhcm4oJm5ldC0+ZGV2LCAiJXM6IFR4IHRpbWVkIG91dC4gUmVzZXR0aW5nLlxuIiwgbmV0LT5uYW1lKTsKIAlrYXdldGgtPnN0YXRzLnR4X2Vycm9ycysrOwogCW5ldC0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCkBAIC0xMDE2LDEwICsxMDE2LDEwIEBACiAJICovCiAKIAlpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgPj4gOCkgewotCQlpbmZvKCJGaXJtd2FyZSBwcmVzZW50IGluIGRldmljZS4iKTsKKwkJZGV2X2luZm8oJmludGYtPmRldiwgIkZpcm13YXJlIHByZXNlbnQgaW4gZGV2aWNlLlxuIik7CiAJfSBlbHNlIHsKIAkJLyogRG93bmxvYWQgdGhlIGZpcm13YXJlICovCi0JCWluZm8oIkRvd25sb2FkaW5nIGZpcm13YXJlLi4uIik7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJEb3dubG9hZGluZyBmaXJtd2FyZS4uLlxuIik7CiAJCWthd2V0aC0+ZmlybXdhcmVfYnVmID0gKF9fdTggKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJCWlmICgocmVzdWx0ID0ga2F3ZXRoX2Rvd25sb2FkX2Zpcm13YXJlKGthd2V0aCwKIAkJCQkJCSAgICAgICJrYXdldGgvbmV3X2NvZGUuYmluIiwKQEAgLTEwNjEsNyArMTA2MSw3IEBACiAJCX0KIAogCQkvKiBEZXZpY2Ugd2lsbCBub3cgZGlzYXBwZWFyIGZvciBhIG1vbWVudC4uLiAgKi8KLQkJaW5mbygiRmlybXdhcmUgbG9hZGVkLiAgSSdsbCBiZSBiYWNrLi4uIik7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJGaXJtd2FyZSBsb2FkZWQuICBJJ2xsIGJlIGJhY2suLi5cbiIpOwogZXJyX2Z3OgogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpa2F3ZXRoLT5maXJtd2FyZV9idWYpOwogCQlmcmVlX25ldGRldihuZXRkZXYpOwpAQCAtMTA3NSwxMCArMTA3NSwxMCBAQAogCQlnb3RvIGVycl9mcmVlX25ldGRldjsKIAl9CiAKLQlpbmZvKCJTdGF0aXN0aWNzIGNvbGxlY3Rpb246ICV4Iiwga2F3ZXRoLT5jb25maWd1cmF0aW9uLnN0YXRpc3RpY3NfbWFzayk7Ci0JaW5mbygiTXVsdGljYXN0IGZpbHRlciBsaW1pdDogJXgiLCBrYXdldGgtPmNvbmZpZ3VyYXRpb24ubWF4X211bHRpY2FzdF9maWx0ZXJzICYgKCgxIDw8IDE1KSAtIDEpKTsKLQlpbmZvKCJNVFU6ICVkIiwgbGUxNl90b19jcHUoa2F3ZXRoLT5jb25maWd1cmF0aW9uLnNlZ21lbnRfc2l6ZSkpOwotCWluZm8oIlJlYWQgTUFDIGFkZHJlc3MgJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMngiLAorCWRldl9pbmZvKCZpbnRmLT5kZXYsICJTdGF0aXN0aWNzIGNvbGxlY3Rpb246ICV4XG4iLCBrYXdldGgtPmNvbmZpZ3VyYXRpb24uc3RhdGlzdGljc19tYXNrKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiTXVsdGljYXN0IGZpbHRlciBsaW1pdDogJXhcbiIsIGthd2V0aC0+Y29uZmlndXJhdGlvbi5tYXhfbXVsdGljYXN0X2ZpbHRlcnMgJiAoKDEgPDwgMTUpIC0gMSkpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJNVFU6ICVkXG4iLCBsZTE2X3RvX2NwdShrYXdldGgtPmNvbmZpZ3VyYXRpb24uc2VnbWVudF9zaXplKSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlJlYWQgTUFDIGFkZHJlc3MgJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnhcbiIsCiAJCSAoaW50KWthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyWzBdLAogCQkgKGludClrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkclsxXSwKIAkJIChpbnQpa2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHJbMl0sCkBAIC0xMTc0LDcgKzExNzQsOCBAQAogCQlnb3RvIGVycl9pbnRmZGF0YTsKIAl9CiAKLQlpbmZvKCJrYXdldGggaW50ZXJmYWNlIGNyZWF0ZWQgYXQgJXMiLCBrYXdldGgtPm5ldC0+bmFtZSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgImthd2V0aCBpbnRlcmZhY2UgY3JlYXRlZCBhdCAlc1xuIiwKKwkJIGthd2V0aC0+bmV0LT5uYW1lKTsKIAogCWRiZygiS2F3ZXRoIHByb2JlIHJldHVybmluZy4iKTsKIApAQCAtMTIwNSwxMSArMTIwNiwxMSBAQAogCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKLQlpbmZvKCJVbnJlZ2lzdGVyaW5nIik7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlVucmVnaXN0ZXJpbmdcbiIpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAlpZiAoIWthd2V0aCkgewotCQl3YXJuKCJ1bnJlZ2lzdGVyaW5nIG5vbi1leGlzdGFudCBkZXZpY2UiKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgInVucmVnaXN0ZXJpbmcgbm9uLWV4aXN0YW50IGRldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiAJbmV0ZGV2ID0ga2F3ZXRoLT5uZXQ7CkBAIC0xMjY5LDcgKzEyNzAsNyBAQAogCiAJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoYXdkLndxaCwgYXdkLmRvbmUsIHRpbWVvdXQpKSB7CiAgICAgICAgICAgICAgICAgLy8gdGltZW91dAotICAgICAgICAgICAgICAgIHdhcm4oInVzYl9jb250cm9sL2J1bGtfbXNnOiB0aW1lb3V0Iik7CisgICAgICAgICAgICAgICAgZGV2X3dhcm4oJnVyYi0+ZGV2LT5kZXYsICJ1c2JfY29udHJvbC9idWxrX21zZzogdGltZW91dFxuIik7CiAgICAgICAgICAgICAgICAgdXNiX2tpbGxfdXJiKHVyYik7ICAvLyByZW1vdmUgdXJiIHNhZmVseQogICAgICAgICAgICAgICAgIHN0YXR1cyA9IC1FVElNRURPVVQ7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmluZGV4IGRmNTZhNTEuLjYxMzM0MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJY2FzZSAtRU5PRU5UOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQl3YXJuKCJjdHJsIHVyYiBzdGF0dXMgJWQiLCB1cmItPnN0YXR1cyk7CisJCWRldl93YXJuKCZ1cmItPmRldi0+ZGV2LCAiY3RybCB1cmIgc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CiAJfQogCWRldiA9IHVyYi0+Y29udGV4dDsKIAljbGVhcl9iaXQoUlhfUkVHX1NFVCwgJmRldi0+ZmxhZ3MpOwpAQCAtNDQxLDEwICs0NDEsMTAgQEAKIAljYXNlIC1FTk9FTlQ6CiAJCXJldHVybjsJLyogdGhlIHVyYiBpcyBpbiB1bmxpbmsgc3RhdGUgKi8KIAljYXNlIC1FVElNRToKLQkJd2FybigibWF5IGJlIHJlc2V0IGlzIG5lZWRlZD8uLiIpOworCQlkZXZfd2FybigmdXJiLT5kZXYtPmRldiwgIm1heSBiZSByZXNldCBpcyBuZWVkZWQ/Li5cbiIpOwogCQlnb3RvIGdvb247CiAJZGVmYXVsdDoKLQkJd2FybigiUnggc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQlkZXZfd2FybigmdXJiLT5kZXYtPmRldiwgIlJ4IHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOwogCQlnb3RvIGdvb247CiAJfQogCkBAIC01MzgsNyArNTM4LDggQEAKIAlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldi0+bmV0ZGV2KSkKIAkJcmV0dXJuOwogCWlmICh1cmItPnN0YXR1cykKLQkJaW5mbygiJXM6IFR4IHN0YXR1cyAlZCIsIGRldi0+bmV0ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiJXM6IFR4IHN0YXR1cyAlZFxuIiwKKwkJCSBkZXYtPm5ldGRldi0+bmFtZSwgdXJiLT5zdGF0dXMpOwogCWRldi0+bmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYtPm5ldGRldik7CiB9CkBAIC01NjEsNyArNTYyLDggQEAKIAkJcmV0dXJuOwogCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLwogCWRlZmF1bHQ6Ci0JCWluZm8oIiVzOiBpbnRyIHN0YXR1cyAlZCIsIGRldi0+bmV0ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiJXM6IGludHIgc3RhdHVzICVkXG4iLAorCQkJIGRldi0+bmV0ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CiAJCWdvdG8gcmVzdWJtaXQ7CiAJfQogCkBAIC02NjUsNyArNjY3LDcgQEAKIAl1OCBjciwgdGNyLCByY3IsIG1zcjsKIAogCWlmICghcnRsODE1MF9yZXNldChkZXYpKSB7Ci0JCXdhcm4oIiVzIC0gZGV2aWNlIHJlc2V0IGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCWRldl93YXJuKCZkZXYtPnVkZXYtPmRldiwgImRldmljZSByZXNldCBmYWlsZWRcbiIpOwogCX0KIAkvKiBSQ1IgYml0Nz0xIGF0dGFjaCBSeCBpbmZvIGF0IHRoZSBlbmQ7ICA9MCBIVyBDUkMgKHdoaWNoIGlzIGJyb2tlbikgKi8KIAlyY3IgPSAweDllOwpAQCAtNjk5LDcgKzcwMSw3IEBACiBzdGF0aWMgdm9pZCBydGw4MTUwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jd2FybigiJXM6IFR4IHRpbWVvdXQuIiwgbmV0ZGV2LT5uYW1lKTsKKwlkZXZfd2FybigmbmV0ZGV2LT5kZXYsICJUeCB0aW1lb3V0LlxuIik7CiAJdXNiX3VubGlua191cmIoZGV2LT50eF91cmIpOwogCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiB9CkBAIC03MTAsMTIgKzcxMiwxMiBAQAogCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCWRldi0+cnhfY3JlZyB8PSBjcHVfdG9fbGUxNigweDAwMDEpOwotCQlpbmZvKCIlczogcHJvbWlzY3VvdXMgbW9kZSIsIG5ldGRldi0+bmFtZSk7CisJCWRldl9pbmZvKCZuZXRkZXYtPmRldiwgIiVzOiBwcm9taXNjdW91cyBtb2RlXG4iLCBuZXRkZXYtPm5hbWUpOwogCX0gZWxzZSBpZiAobmV0ZGV2LT5tY19jb3VudCB8fAogCQkgICAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJZGV2LT5yeF9jcmVnICY9IGNwdV90b19sZTE2KDB4ZmZmZSk7CiAJCWRldi0+cnhfY3JlZyB8PSBjcHVfdG9fbGUxNigweDAwMDIpOwotCQlpbmZvKCIlczogYWxsbXVsdGkgc2V0IiwgbmV0ZGV2LT5uYW1lKTsKKwkJZGV2X2luZm8oJm5ldGRldi0+ZGV2LCAiJXM6IGFsbG11bHRpIHNldFxuIiwgbmV0ZGV2LT5uYW1lKTsKIAl9IGVsc2UgewogCQkvKiB+UlhfTVVMVElDQVNULCB+UlhfUFJPTUlTQ1VPVVMgKi8KIAkJZGV2LT5yeF9jcmVnICY9IGNwdV90b19sZTE2KDB4MDBmYyk7CkBAIC03NDAsNyArNzQyLDcgQEAKIAkJaWYgKHJlcyA9PSAtRU5PREVWKQogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYtPm5ldGRldik7CiAJCWVsc2UgewotCQkJd2FybigiZmFpbGVkIHR4X3VyYiAlZFxuIiwgcmVzKTsKKwkJCWRldl93YXJuKCZuZXRkZXYtPmRldiwgImZhaWxlZCB0eF91cmIgJWRcbiIsIHJlcyk7CiAJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKIAkJfQpAQCAtNzgzLDcgKzc4NSw3IEBACiAJaWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnJ4X3VyYiwgR0ZQX0tFUk5FTCkpKSB7CiAJCWlmIChyZXMgPT0gLUVOT0RFVikKIAkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2LT5uZXRkZXYpOwotCQl3YXJuKCIlczogcnhfdXJiIHN1Ym1pdCBmYWlsZWQ6ICVkIiwgX19GVU5DVElPTl9fLCByZXMpOworCQlkZXZfd2FybigmbmV0ZGV2LT5kZXYsICJyeF91cmIgc3VibWl0IGZhaWxlZDogJWRcbiIsIHJlcyk7CiAJCXJldHVybiByZXM7CiAJfQogCXVzYl9maWxsX2ludF91cmIoZGV2LT5pbnRyX3VyYiwgZGV2LT51ZGV2LCB1c2JfcmN2aW50cGlwZShkZXYtPnVkZXYsIDMpLApAQCAtNzkyLDcgKzc5NCw3IEBACiAJaWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmludHJfdXJiLCBHRlBfS0VSTkVMKSkpIHsKIAkJaWYgKHJlcyA9PSAtRU5PREVWKQogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYtPm5ldGRldik7Ci0JCXdhcm4oIiVzOiBpbnRyX3VyYiBzdWJtaXQgZmFpbGVkOiAlZCIsIF9fRlVOQ1RJT05fXywgcmVzKTsKKwkJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LCAiaW50cl91cmIgc3VibWl0IGZhaWxlZDogJWRcbiIsIHJlcyk7CiAJCXVzYl9raWxsX3VyYihkZXYtPnJ4X3VyYik7CiAJCXJldHVybiByZXM7CiAJfQpAQCAtOTQ3LDcgKzk0OSw3IEBACiAJCWdvdG8gb3V0MjsKIAl9CiAKLQlpbmZvKCIlczogcnRsODE1MCBpcyBkZXRlY3RlZCIsIG5ldGRldi0+bmFtZSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIiVzOiBydGw4MTUwIGlzIGRldGVjdGVkXG4iLCBuZXRkZXYtPm5hbWUpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTk4NCw3ICs5ODYsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB1c2JfcnRsODE1MF9pbml0KHZvaWQpCiB7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIHVzYl9yZWdpc3RlcigmcnRsODE1MF9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCmluZGV4IGFkMjBmOTYuLjJkY2VkMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCkBAIC0xMiw3ICsxMiw3IEBACiAgKglTY2F0dGVyIGdhdGhlcgogICoJTW9yZSB0ZXN0aW5nCiAgKgotICogVGhlIGNoYW5nZXMgYXJlIChjKSBDb3B5cmlnaHQgMjAwNCwgUmVkIEhhdCBJbmMuIDxhbGFuQHJlZGhhdC5jb20+CisgKiBUaGUgY2hhbmdlcyBhcmUgKGMpIENvcHlyaWdodCAyMDA0LCBSZWQgSGF0IEluYy4gPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqIEFkZGl0aW9uYWwgZml4ZXMgYW5kIGNsZWFuIHVwOiBGcmFuY29pcyBSb21pZXUKICAqCiAgKiBUaGlzIHNvdXJjZSBoYXMgbm90IGJlZW4gdmVyaWZpZWQgZm9yIHVzZSBpbiBzYWZldHkgY3JpdGljYWwgc3lzdGVtcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCmluZGV4IGYxNDA1MTUuLjdmOTdmOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwpAQCAtMzg4LDggKzM4OCw4IEBACiAJCWdvdG8gb3V0X2NocmRldjsKIAl9CiAJZm9yIChpID0gMDsgaSA8IG5yX2NhcmRzOyBpKyspCi0JCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShjb3NhX2NsYXNzLCBOVUxMLCBNS0RFVihjb3NhX21ham9yLCBpKSwKLQkJCQkgICAgICBOVUxMLCAiY29zYSVkIiwgaSk7CisJCWRldmljZV9jcmVhdGUoY29zYV9jbGFzcywgTlVMTCwgTUtERVYoY29zYV9tYWpvciwgaSksIE5VTEwsCisJCQkgICAgICAiY29zYSVkIiwgaSk7CiAJZXJyID0gMDsKIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCmluZGV4IGY4MDY0MGYuLmQ3YmI2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKQEAgLTEyMiw3ICsxMjIsNiBAQAogICAgICAqIE1vc3QgZnVuY3Rpb25zIG1lc3Mgd2l0aCB0aGUgc3RydWN0dXJlCiAgICAgICogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWxlIHdlIGRvIHRoZSBwb2xsaW5nCiAgICAgICovCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCiAgICAgc3dpdGNoIChjbWQpIHsKICAgICAgICAgLyoKQEAgLTE1Miw2ICsxNTEsNyBAQAogCQlicmVhazsKIAl9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgIHNjLT5sbWNfbWVkaWEtPnNldF9zdGF0dXMgKHNjLCAmY3RsKTsKIAogICAgICAgICBpZihjdGwuY3JjX2xlbmd0aCAhPSBzYy0+aWN0bC5jcmNfbGVuZ3RoKSB7CkBAIC0xNjEsNiArMTYxLDcgQEAKIAkgICAgZWxzZQogCQlzYy0+VHhEZXNjcmlwdENvbnRyb2xJbml0ICY9IH5MTUNfVERFU19BRERfQ1JDX0RJU0FCTEU7CiAgICAgICAgIH0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICByZXQgPSAwOwogICAgICAgICBicmVhazsKQEAgLTE4NywxNSArMTg4LDE4IEBACiAJCWJyZWFrOwkJCQkvKiBubyBjaGFuZ2UgKi8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorCSAgICBzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICBsbWNfcHJvdG9fY2xvc2Uoc2MpOwogCiAgICAgICAgICAgICBzYy0+aWZfdHlwZSA9IG5ld190eXBlOwogICAgICAgICAgICAgbG1jX3Byb3RvX2F0dGFjaChzYyk7CiAJICAgIHJldCA9IGxtY19wcm90b19vcGVuKHNjKTsKKwkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAJICAgIGJyZWFrOwogCX0KIAogICAgIGNhc2UgTE1DSU9DR0VUWElORk86IC8qZm9sZDAxKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgIHNjLT5sbWNfeGluZm8uTWFnaWMwID0gMHhCRUVGQ0FGRTsKIAogICAgICAgICBzYy0+bG1jX3hpbmZvLlBjaUNhcmRUeXBlID0gc2MtPmxtY19jYXJkdHlwZTsKQEAgLTIwOCw2ICsyMTIsNyBAQAogICAgICAgICBzYy0+bG1jX3hpbmZvLk1heEZyYW1lU2l6ZSA9IExNQ19QS1RfQlVGX1NaOwogICAgICAgICBzYy0+bG1jX3hpbmZvLmxpbmtfc3RhdHVzID0gc2MtPmxtY19tZWRpYS0+Z2V0X2xpbmtfc3RhdHVzIChzYyk7CiAgICAgICAgIHNjLT5sbWNfeGluZm8ubWlpX3JlZzE2ID0gbG1jX21paV9yZWFkcmVnIChzYywgMCwgMTYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCiAgICAgICAgIHNjLT5sbWNfeGluZm8uTWFnaWMxID0gMHhERUFEQkVFRjsKIApAQCAtMjIwLDYgKzIyNSw3IEBACiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBMTUNJT0NHRVRMTUNTVEFUUzoKKwkgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCSAgICBpZiAoc2MtPmxtY19jYXJkdHlwZSA9PSBMTUNfQ0FSRFRZUEVfVDEpIHsKIAkJICAgIGxtY19taWlfd3JpdGVyZWcoc2MsIDAsIDE3LCBUMUZSQU1FUl9GRVJSX0xTQik7CiAJCSAgICBzYy0+ZXh0cmFfc3RhdHMuZnJhbWluZ0JpdEVycm9yQ291bnQgKz0KQEAgLTI0Myw2ICsyNDksNyBAQAogCQkgICAgc2MtPmV4dHJhX3N0YXRzLnNldmVyZWx5RXJyb3JlZEZyYW1lQ291bnQgKz0KIAkJCSAgICByZWdWYWwgJiBUMUZSQU1FUl9TRUZfTUFTSzsKIAkgICAgfQorCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAkgICAgaWYgKGNvcHlfdG9fdXNlcihpZnItPmlmcl9kYXRhLCAmc2MtPmxtY19kZXZpY2UtPnN0YXRzLAogCQkJICAgICBzaXplb2Yoc2MtPmxtY19kZXZpY2UtPnN0YXRzKSkgfHwKIAkJY29weV90b191c2VyKGlmci0+aWZyX2RhdGEgKyBzaXplb2Yoc2MtPmxtY19kZXZpY2UtPnN0YXRzKSwKQEAgLTI1OCwxMiArMjY1LDE0IEBACiAJCSAgICBicmVhazsKIAkgICAgfQogCisJICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAkgICAgbWVtc2V0KCZzYy0+bG1jX2RldmljZS0+c3RhdHMsIDAsIHNpemVvZihzYy0+bG1jX2RldmljZS0+c3RhdHMpKTsKIAkgICAgbWVtc2V0KCZzYy0+ZXh0cmFfc3RhdHMsIDAsIHNpemVvZihzYy0+ZXh0cmFfc3RhdHMpKTsKIAkgICAgc2MtPmV4dHJhX3N0YXRzLmNoZWNrID0gU1RBVENIRUNLOwogCSAgICBzYy0+ZXh0cmFfc3RhdHMudmVyc2lvbl9zaXplID0gKERSSVZFUl9WRVJTSU9OIDw8IDE2KSArCiAJCSAgICBzaXplb2Yoc2MtPmxtY19kZXZpY2UtPnN0YXRzKSArIHNpemVvZihzYy0+ZXh0cmFfc3RhdHMpOwogCSAgICBzYy0+ZXh0cmFfc3RhdHMubG1jX2NhcmR0eXBlID0gc2MtPmxtY19jYXJkdHlwZTsKKwkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAJICAgIHJldCA9IDA7CiAJICAgIGJyZWFrOwogCkBAIC0yODIsOCArMjkxLDEwIEBACiAJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgIHNjLT5sbWNfbWVkaWEtPnNldF9jaXJjdWl0X3R5cGUoc2MsIGN0bC5jaXJjdWl0X3R5cGUpOwogICAgICAgICBzYy0+aWN0bC5jaXJjdWl0X3R5cGUgPSBjdGwuY2lyY3VpdF90eXBlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICByZXQgPSAwOwogCiAgICAgICAgIGJyZWFrOwpAQCAtMjk0LDEyICszMDUsMTQgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgIC8qIFJlc2V0IGRyaXZlciBhbmQgYnJpbmcgYmFjayB0byBjdXJyZW50IHN0YXRlICovCiAgICAgICAgIHByaW50ayAoIiBSRUcxNiBiZWZvcmUgcmVzZXQgKyUwNHhcbiIsIGxtY19taWlfcmVhZHJlZyAoc2MsIDAsIDE2KSk7CiAgICAgICAgIGxtY19ydW5uaW5nX3Jlc2V0IChkZXYpOwogICAgICAgICBwcmludGsgKCIgUkVHMTYgYWZ0ZXIgcmVzZXQgKyUwNHhcbiIsIGxtY19taWlfcmVhZHJlZyAoc2MsIDAsIDE2KSk7CiAKICAgICAgICAgTE1DX0VWRU5UX0xPRyhMTUNfRVZFTlRfRk9SQ0VEUkVTRVQsIExNQ19DU1JfUkVBRCAoc2MsIGNzcl9zdGF0dXMpLCBsbWNfbWlpX3JlYWRyZWcgKHNjLCAwLCAxNikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCiAgICAgICAgIHJldCA9IDA7CiAgICAgICAgIGJyZWFrOwpAQCAtMzM4LDE0ICszNTEsMTUgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ4YywgaWZyLT5pZnJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBsbWNfeGlsaW54X2NvbnRyb2wpKSkgeworCSAgICBpZiAoY29weV9mcm9tX3VzZXIoJnhjLCBpZnItPmlmcl9kYXRhLCBzaXplb2Yoc3RydWN0IGxtY194aWxpbnhfY29udHJvbCkpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwotCX0KKwkgICAgfQogICAgICAgICAgICAgc3dpdGNoKHhjLmNvbW1hbmQpewogICAgICAgICAgICAgY2FzZSBsbWNfeGlsaW54X3Jlc2V0OiAvKmZvbGQwMiovCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1MTYgbWlpOworCQkgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICAgICAgICAgICAgICBtaWkgPSBsbWNfbWlpX3JlYWRyZWcgKHNjLCAwLCAxNik7CiAKICAgICAgICAgICAgICAgICAgICAgLyoKQEAgLTQwNCw2ICs0MTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxtY19sZWRfb2ZmKHNjLCBMTUNfRFMzX0xFRDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CisJCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogCkBAIC00MTYsNiArNDMxLDcgQEAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHUxNiBtaWk7CiAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0ID0gNTAwMDAwOworCQkgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICAgICAgICAgICAgICBtaWkgPSBsbWNfbWlpX3JlYWRyZWcgKHNjLCAwLCAxNik7CiAKICAgICAgICAgICAgICAgICAgICAgLyoKQEAgLTQ1MSwxMyArNDY3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICB3aGlsZSggKExNQ19DU1JfUkVBRChzYywgY3NyX2dwKSAmIExNQ19HRVBfSU5JVCkgPT0gMCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpbWVvdXQtLSA+IDApKQotICAgICAgICAgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JlbGF4KCk7CiAKIAogICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgKiBzdG9wIGRyaXZpbmcgWGlsaW54LXJlbGF0ZWQgc2lnbmFscwogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgbG1jX2dwaW9fbWtpbnB1dChzYywgMHhmZik7CisJCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICAgICAgICAgICAgICByZXQgPSAweDA7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDkzLDYgKzUxMCw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIlczogU3RhcnRpbmcgbG9hZCBvZiBkYXRhIExlbjogJWQgYXQgMHglcCA9PSAweCVwXG4iLCBkZXYtPm5hbWUsIHhjLmxlbiwgeGMuZGF0YSwgZGF0YSk7CiAKKwkJICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKICAgICAgICAgICAgICAgICAgICAgbG1jX2dwaW9fbWtpbnB1dChzYywgMHhmZik7CiAKICAgICAgICAgICAgICAgICAgICAgLyoKQEAgLTU0NSw3ICs1NjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgd2hpbGUoIChMTUNfQ1NSX1JFQUQoc2MsIGNzcl9ncCkgJiBMTUNfR0VQX0lOSVQpID09IDAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aW1lb3V0LS0gPiAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9yZWxheCgpOwogCiAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogV2FpdGVkICVkIGZvciB0aGUgWGlsaW54IHRvIGNsZWFyIGl0J3MgbWVtb3J5XG4iLCBkZXYtPm5hbWUsIDUwMDAwMC10aW1lb3V0KTsKIApAQCAtNTg4LDYgKzYwNiw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgc2MtPmxtY19taWlyZWcxNiAmPSB+TE1DX01JSTE2X0ZJRk9fUkVTRVQ7CiAgICAgICAgICAgICAgICAgICAgIGxtY19taWlfd3JpdGVyZWcoc2MsIDAsIDE2LCBzYy0+bG1jX21paXJlZzE2KTsKKwkJICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCiAgICAgICAgICAgICAgICAgICAgIGtmcmVlKGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTYxMSw4ICs2MzAsNiBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsgLypmb2xkMDEqLwotCiAgICAgbG1jX3RyYWNlKGRldiwgImxtY19pb2N0bCBvdXQiKTsKIAogICAgIHJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2JuaS5jIGIvZHJpdmVycy9uZXQvd2FuL3NibmkuYwppbmRleCBmOTcyZmVmLi5lZTUxYjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2JuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYoIHBjaV9pcnFfbGluZSA8PSAwICB8fCAgcGNpX2lycV9saW5lID49IE5SX0lSUVMgKQorCQlpZiAocGNpX2lycV9saW5lIDw9IDAgfHwgcGNpX2lycV9saW5lID49IG5yX2lycXMpCiAJCQlwcmludGsoIEtFUk5fV0FSTklORyAiICBXQVJOSU5HOiBUaGUgUENJIEJJT1MgYXNzaWduZWQgIgogCQkJCSJ0aGlzIFBDSSBjYXJkIHRvIElSUSAlZCwgd2hpY2ggaXMgdW5saWtlbHkgIgogCQkJCSJ0byB3b3JrIS5cbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYyBiL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYwppbmRleCAyNDNiZDhkLi5jY2Q5Y2QzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vejg1MjMwLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jCkBAIC0xOCw3ICsxOCw4IEBACiAgKglETUEgbm93IHVzZXMgZ2V0X2ZyZWVfcGFnZSBhcyBrbWFsbG9jIGJ1ZmZlcnMgbWF5IHNwYW4gYSA2NEsgCiAgKglib3VuZGFyeS4KICAqCi0gKglNb2RpZmllZCBmb3IgU01QIHNhZmV0eSBhbmQgU01QIGxvY2tpbmcgYnkgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKyAqCU1vZGlmaWVkIGZvciBTTVAgc2FmZXR5IGFuZCBTTVAgbG9ja2luZyBieSBBbGFuIENveAorICoJCQkJCTxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICoJUGVyZm9ybWFuY2UKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vejg1MjMwLmggYi9kcml2ZXJzL25ldC93YW4vejg1MjMwLmgKaW5kZXggNGYzNzIzOS4uODViM2U3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuaApAQCAtMiw3ICsyLDcgQEAKICAqCURlc2NyaXB0aW9uIG9mIFo4NTMwIFo4NUMzMCBhbmQgWjg1MjMwIGNvbW11bmljYXRpb25zIGNoaXBzCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqIENvcHlyaWdodCAoQykgMTk5OCBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKi8KIAogI2lmbmRlZiBfWjg1MzBfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCmluZGV4IGZkNzJlNDIuLjI3Njk2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKQEAgLTIwNiwxMjYgKzIwNiwxMjMgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAorc3RhdGljIGludCBhaXJvX2NzX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJdW5zaWduZWQgaW50IHZjYywKKwkJCQl2b2lkICpwcml2X2RhdGEpCit7CisJd2luX3JlcV90ICpyZXEgPSBwcml2X2RhdGE7CisKKwlpZiAoY2ZnLT5pbmRleCA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLworCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKKwkJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOworCQlwX2Rldi0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKKwl9CisKKwkvKiBVc2UgcG93ZXIgc2V0dGluZ3MgZm9yIFZjYyBhbmQgVnBwIGlmIHByZXNlbnQgKi8KKwkvKiAgTm90ZSB0aGF0IHRoZSBDSVMgdmFsdWVzIG5lZWQgdG8gYmUgcmVzY2FsZWQgKi8KKwlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPSBjZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOworCWVsc2UgaWYgKGRmbHQtPnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBfZGV2LT5jb25mLlZwcCA9IGRmbHQtPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOworCisJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCisJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQtPmlycS5JUlFJbmZvMSkKKwkJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CisKKwkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KKwlwX2Rldi0+aW8uTnVtUG9ydHMxID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CisJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87CisJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7CisJCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQl9CisJfQorCisJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pICE9IDApCisJCXJldHVybiAtRU5PREVWOworCisJLyoKKwkgIE5vdyBzZXQgdXAgYSBjb21tb24gbWVtb3J5IHdpbmRvdywgaWYgbmVlZGVkLiAgVGhlcmUgaXMgcm9vbQorCSAgaW4gdGhlIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSBmb3Igb25lIG1lbW9yeSB3aW5kb3cgaGFuZGxlLAorCSAgYnV0IGlmIHRoZSBiYXNlIGFkZHJlc3NlcyBuZWVkIHRvIGJlIHNhdmVkLCBvciBpZiBtdWx0aXBsZQorCSAgd2luZG93cyBhcmUgbmVlZGVkLCB0aGUgaW5mbyBzaG91bGQgZ28gaW4gdGhlIHByaXZhdGUgZGF0YQorCSAgc3RydWN0dXJlIGZvciB0aGlzIGRldmljZS4KKworCSAgTm90ZSB0aGF0IHRoZSBtZW1vcnkgd2luZG93IGJhc2UgaXMgYSBwaHlzaWNhbCBhZGRyZXNzLCBhbmQKKwkgIG5lZWRzIHRvIGJlIG1hcHBlZCB0byB2aXJ0dWFsIHNwYWNlIHdpdGggaW9yZW1hcCgpIGJlZm9yZSBpdAorCSAgaXMgdXNlZC4KKwkqLworCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0LT5tZW0ubndpbiA+IDApKSB7CisJCWNpc3RwbF9tZW1fdCAqbWVtID0gKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQtPm1lbTsKKwkJbWVtcmVxX3QgbWFwOworCQlyZXEtPkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF8xNnxXSU5fTUVNT1JZX1RZUEVfQ007CisJCXJlcS0+QmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKKwkJcmVxLT5TaXplID0gbWVtLT53aW5bMF0ubGVuOworCQlyZXEtPkFjY2Vzc1NwZWVkID0gMDsKKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmcF9kZXYsIHJlcSwgJnBfZGV2LT53aW4pICE9IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJbWFwLlBhZ2UgPSAwOworCQltYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKKwkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYtPndpbiwgJm1hcCkgIT0gMCkKKwkJCXJldHVybiAtRU5PREVWOworCX0KKwkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJcmV0dXJuIDA7Cit9CisKKwogc3RhdGljIGludCBhaXJvX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQl0dXBsZV90IHR1cGxlOwotCWNpc3BhcnNlX3QgcGFyc2U7CiAJbG9jYWxfaW5mb190ICpkZXY7CisJd2luX3JlcV90ICpyZXE7CiAJaW50IGxhc3RfZm4sIGxhc3RfcmV0OwotCXVfY2hhciBidWZbNjRdOwotCXdpbl9yZXFfdCByZXE7Ci0JbWVtcmVxX3QgbWFwOwogCiAJZGV2ID0gbGluay0+cHJpdjsKIAogCURFQlVHKDAsICJhaXJvX2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAKKwlyZXEgPSBremFsbG9jKHNpemVvZih3aW5fcmVxX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAkvKgotCSAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKLQkgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKLQkgIHZvbHRhZ2UsIElPIHdpbmRvdywgbWVtb3J5IHdpbmRvdywgYW5kIGludGVycnVwdCBzZXR0aW5ncy4KLQkgIAotCSAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY2FyZCB0byBiZSBjb25maWd1cmVkOiB3ZSB1c2UKLQkgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCi0JICB0aGlzIHdvdWxkIHdvcmsgZm9yIGFueSBQQ01DSUEgY2FyZCwgYnV0IGl0IHJlcXVpcmVzIGEgY29tcGxldGUKLQkgIGFuZCBhY2N1cmF0ZSBDSVMuICBJbiBwcmFjdGljZSwgYSBkcml2ZXIgdXN1YWxseSAia25vd3MiIG1vc3Qgb2YKLQkgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKLQkgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KKwkgKiBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZQorCSAqIGVudHJpZXMsIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZAorCSAqIGNvbmZpZ3VyYXRpb24sIGluY2x1ZGluZyB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csCisJICogYW5kIGludGVycnVwdCBzZXR0aW5ncy4KKwkgKgorCSAqIFdlIG1ha2Ugbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNhcmQgdG8gYmUgY29uZmlndXJlZDogd2UKKwkgKiB1c2UganVzdCB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBDSVMuICBJbiBhbiBpZGVhbAorCSAqIHdvcmxkLCB0aGlzIHdvdWxkIHdvcmsgZm9yIGFueSBQQ01DSUEgY2FyZCwgYnV0IGl0IHJlcXVpcmVzCisJICogYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgQ0lTLiAgSW4gcHJhY3RpY2UsIGEgZHJpdmVyIHVzdWFsbHkKKwkgKiAia25vd3MiIG1vc3Qgb2YgdGhlc2UgdGhpbmdzIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgQ0lTLAorCSAqIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluCisJICogaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgorCSAqLworCWxhc3RfcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGFpcm9fY3NfY29uZmlnX2NoZWNrLCByZXEpOworCWlmIChsYXN0X3JldCkKKwkJZ290byBmYWlsZWQ7CisKKwkvKgorCSAgQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQorCSAgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LCB1bmxlc3MgdGhlICdIYW5kbGVyJyBtZW1iZXIgb2YgdGhlCisJICBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgogCSovCi0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCXdoaWxlICgxKSB7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OwotCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAotCQkJCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgZGZsdCA9ICpjZmc7Ci0JCWlmIChjZmctPmluZGV4ID09IDApIGdvdG8gbmV4dF9lbnRyeTsKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0JCQotCQkvKiBEb2VzIHRoaXMgY2FyZCBuZWVkIGF1ZGlvIG91dHB1dD8gKi8KLQkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgewotCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7Ci0JCQlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwotCQl9Ci0JCQotCQkvKiBVc2UgcG93ZXIgc2V0dGluZ3MgZm9yIFZjYyBhbmQgVnBwIGlmIHByZXNlbnQgKi8KLQkJLyogIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCi0JCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcCA9Ci0JCQkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKLQkJZWxzZSBpZiAoZGZsdC52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJbGluay0+Y29uZi5WcHAgPQotCQkJCWRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7Ci0JCQotCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KLQkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQotCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQkJCi0JCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOwotCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCQkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gbGluay0+aW8uQXR0cmlidXRlczE7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOwotCQkJfQotCQl9Ci0JCQotCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCQkKLQkJLyoKLQkJICBOb3cgc2V0IHVwIGEgY29tbW9uIG1lbW9yeSB3aW5kb3csIGlmIG5lZWRlZC4gIFRoZXJlIGlzIHJvb20KLQkJICBpbiB0aGUgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlIGZvciBvbmUgbWVtb3J5IHdpbmRvdyBoYW5kbGUsCi0JCSAgYnV0IGlmIHRoZSBiYXNlIGFkZHJlc3NlcyBuZWVkIHRvIGJlIHNhdmVkLCBvciBpZiBtdWx0aXBsZQotCQkgIHdpbmRvd3MgYXJlIG5lZWRlZCwgdGhlIGluZm8gc2hvdWxkIGdvIGluIHRoZSBwcml2YXRlIGRhdGEKLQkJICBzdHJ1Y3R1cmUgZm9yIHRoaXMgZGV2aWNlLgotCQkgIAotCQkgIE5vdGUgdGhhdCB0aGUgbWVtb3J5IHdpbmRvdyBiYXNlIGlzIGEgcGh5c2ljYWwgYWRkcmVzcywgYW5kCi0JCSAgbmVlZHMgdG8gYmUgbWFwcGVkIHRvIHZpcnR1YWwgc3BhY2Ugd2l0aCBpb3JlbWFwKCkgYmVmb3JlIGl0Ci0JCSAgaXMgdXNlZC4KLQkJKi8KLQkJaWYgKChjZmctPm1lbS5ud2luID4gMCkgfHwgKGRmbHQubWVtLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX21lbV90ICptZW0gPQotCQkJCShjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0Lm1lbTsKLQkJCXJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTZ8V0lOX01FTU9SWV9UWVBFX0NNOwotCQkJcmVxLkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7Ci0JCQlyZXEuU2l6ZSA9IG1lbS0+d2luWzBdLmxlbjsKLQkJCXJlcS5BY2Nlc3NTcGVlZCA9IDA7Ci0JCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSAhPSAwKQotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCW1hcC5QYWdlID0gMDsgbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7Ci0JCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtYXApICE9IDApCi0JCQkJZ290byBuZXh0X2VudHJ5OwotCQl9Ci0JCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KLQkJYnJlYWs7Ci0JCQotCW5leHRfZW50cnk6Ci0JCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCX0KLQkKLSAgICAvKgotICAgICAgQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQotICAgICAgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LCB1bmxlc3MgdGhlICdIYW5kbGVyJyBtZW1iZXIgb2YgdGhlCi0gICAgICBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgotICAgICovCiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKIAkJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKIAkKQEAgLTM2MiwxNCArMzU5LDE3IEBACiAJCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKIAkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MitsaW5rLT5pby5OdW1Qb3J0czItMSk7CiAJaWYgKGxpbmstPndpbikKLQkJcHJpbnRrKCIsIG1lbSAweCUwNmx4LTB4JTA2bHgiLCByZXEuQmFzZSwKLQkJICAgICAgIHJlcS5CYXNlK3JlcS5TaXplLTEpOworCQlwcmludGsoIiwgbWVtIDB4JTA2bHgtMHglMDZseCIsIHJlcS0+QmFzZSwKKwkJICAgICAgIHJlcS0+QmFzZStyZXEtPlNpemUtMSk7CiAJcHJpbnRrKCJcbiIpOworCWtmcmVlKHJlcSk7CiAJcmV0dXJuIDA7CiAKICBjc19mYWlsZWQ6CiAJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOworIGZhaWxlZDoKIAlhaXJvX3JlbGVhc2UobGluayk7CisJa2ZyZWUocmVxKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0gLyogYWlyb19jb25maWcgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jCmluZGV4IDc0NzI2OTkuLmYwNWY1ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWluLmMKQEAgLTE2NDAsNiArMTY0MCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXRoOWtfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKwogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDlrX29wcyA9IHsKIAkudHggCQkgICAgPSBhdGg5a190eCwKIAkuc3RhcnQgCQkgICAgPSBhdGg5a19zdGFydCwKQEAgLTE2NjQsNyArMTY2OSw4IEBACiAJLmdldF90c2YgCSAgICA9IGF0aDlrX2dldF90c2YsCiAJLnJlc2V0X3RzZiAJICAgID0gYXRoOWtfcmVzZXRfdHNmLAogCS50eF9sYXN0X2JlYWNvbiAgICAgPSBOVUxMLAotCS5hbXBkdV9hY3Rpb24gICAgICAgPSBhdGg5a19hbXBkdV9hY3Rpb24KKwkuYW1wZHVfYWN0aW9uICAgICAgID0gYXRoOWtfYW1wZHVfYWN0aW9uLAorCS5zZXRfZnJhZ190aHJlc2hvbGQgPSBhdGg5a19ub19mcmFnbWVudGF0aW9uLAogfTsKIAogc3RhdGljIGludCBhdGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYwppbmRleCBkMjM4OGU4Li43NzQwNjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKQEAgLTIyNCwxMyArMjI0LDU4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYXRtZWxfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCSAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJICAgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCWlmIChjZmctPmluZGV4ID09IDApCisJCXJldHVybiAtRU5PREVWOworCisJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCisJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgeworCQlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CisJCXBfZGV2LT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOworCX0KKworCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLworCS8qICBOb3RlIHRoYXQgdGhlIENJUyB2YWx1ZXMgbmVlZCB0byBiZSByZXNjYWxlZCAqLworCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBfZGV2LT5jb25mLlZwcCA9IGNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7CisJZWxzZSBpZiAoZGZsdC0+dnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKKwkJcF9kZXYtPmNvbmYuVnBwID0gZGZsdC0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7CisKKwkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC0+aXJxLklSUUluZm8xKQorCQlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCX0KKwl9CisKKwkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7Cit9CisKIHN0YXRpYyBpbnQgYXRtZWxfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCXR1cGxlX3QgdHVwbGU7Ci0JY2lzcGFyc2VfdCBwYXJzZTsKIAlsb2NhbF9pbmZvX3QgKmRldjsKIAlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7Ci0JdV9jaGFyIGJ1Zls2NF07CiAJc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgKmRpZDsKIAogCWRldiA9IGxpbmstPnByaXY7CkBAIC0yMzgsMTEgKzI4Myw2IEBACiAKIAlERUJVRygwLCAiYXRtZWxfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0KIAkvKgogCSAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKIAkgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKQEAgLTI1NSw2NiArMjk1LDggQEAKIAkgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKIAkgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KIAkqLwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0Jd2hpbGUgKDEpIHsKLQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7Ci0JCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8Ci0JCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgZGZsdCA9ICpjZmc7Ci0JCWlmIChjZmctPmluZGV4ID09IDApIGdvdG8gbmV4dF9lbnRyeTsKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0KLQkJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKLQkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwotCQkJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKLQkJfQotCi0JCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLwotCQkvKiAgTm90ZSB0aGF0IHRoZSBDSVMgdmFsdWVzIG5lZWQgdG8gYmUgcmVzY2FsZWQgKi8KLQkJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwID0KLQkJCQljZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwotCQllbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcCA9Ci0JCQkJZGZsdC52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKLQotCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KLQkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQotCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQotCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKLQkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKLQkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKLQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKLQkJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOwotCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKLQkJCX0KLQkJfQotCi0JCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0KLQkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwotCQlicmVhazsKLQotCW5leHRfZW50cnk6Ci0JCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCX0KKwlpZiAocGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGF0bWVsX2NvbmZpZ19jaGVjaywgTlVMTCkpCisJCWdvdG8gZmFpbGVkOwogCiAJLyoKIAkgIEFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXNzaWduIGEKQEAgLTM2MCw2ICszNDIsNyBAQAogCiAgY3NfZmFpbGVkOgogCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyBmYWlsZWQ6CiAJYXRtZWxfcmVsZWFzZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9wY21jaWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9wY21jaWEuYwppbmRleCBiOGFhMTYzLi4zY2ZjMzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGNtY2lhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BjbWNpYS5jCkBAIC04MiwxMyArODIsMTMgQEAKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAKIAlyZXMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGRldiwgJnR1cGxlKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpCisJaWYgKHJlcyAhPSAwKQogCQlnb3RvIGVycl9rZnJlZV9zc2I7CiAJcmVzID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGRldiwgJnR1cGxlKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpCisJaWYgKHJlcyAhPSAwKQogCQlnb3RvIGVycl9rZnJlZV9zc2I7Ci0JcmVzID0gcGNtY2lhX3BhcnNlX3R1cGxlKGRldiwgJnR1cGxlLCAmcGFyc2UpOwotCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykKKwlyZXMgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpOworCWlmIChyZXMgIT0gMCkKIAkJZ290byBlcnJfa2ZyZWVfc3NiOwogCiAJZGV2LT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKQEAgLTEwNywxMyArMTA3LDEzIEBACiAJd2luLlNpemUgPSBTU0JfQ09SRV9TSVpFOwogCXdpbi5BY2Nlc3NTcGVlZCA9IDI1MDsKIAlyZXMgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmRldiwgJndpbiwgJmRldi0+d2luKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpCisJaWYgKHJlcyAhPSAwKQogCQlnb3RvIGVycl9rZnJlZV9zc2I7CiAKIAltZW0uQ2FyZE9mZnNldCA9IDA7CiAJbWVtLlBhZ2UgPSAwOwogCXJlcyA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UoZGV2LT53aW4sICZtZW0pOwotCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykKKwlpZiAocmVzICE9IDApCiAJCWdvdG8gZXJyX2Rpc2FibGU7CiAKIAlkZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwpAQCAtMTIxLDExICsxMjEsMTEgQEAKIAlkZXYtPmlycS5IYW5kbGVyID0gTlVMTDsgLyogVGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBsYXRlci4gKi8KIAlkZXYtPmlycS5JbnN0YW5jZSA9IE5VTEw7CiAJcmVzID0gcGNtY2lhX3JlcXVlc3RfaXJxKGRldiwgJmRldi0+aXJxKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpCisJaWYgKHJlcyAhPSAwKQogCQlnb3RvIGVycl9kaXNhYmxlOwogCiAJcmVzID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihkZXYsICZkZXYtPmNvbmYpOwotCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykKKwlpZiAocmVzICE9IDApCiAJCWdvdG8gZXJyX2Rpc2FibGU7CiAKIAllcnIgPSBzc2JfYnVzX3BjbWNpYWJ1c19yZWdpc3Rlcihzc2IsIGRldiwgd2luLkJhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCmluZGV4IDNiNGU1NWMuLjYzMzc0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKQEAgLTIzNCw3ICsyMzQsNyBAQAogCXJlZy5WYWx1ZSA9IGh3X3ByaXYtPmxpbmstPmlvLkJhc2VQb3J0MSAmIDB4MDBmZjsKIAlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwotCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiUHJpc20zIFNhbkRpc2sgLSBmYWlsZWQgdG8gc2V0IEkvTyBiYXNlIDAgLSIKIAkJICAgICAgICIgcmVzPSVkXG4iLCByZXMpOwogCX0KQEAgLTI0Niw3ICsyNDYsNyBAQAogCXJlZy5WYWx1ZSA9IChod19wcml2LT5saW5rLT5pby5CYXNlUG9ydDEgJiAweGZmMDApID4+IDg7CiAJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlByaXNtMyBTYW5EaXNrIC0gZmFpbGVkIHRvIHNldCBJL08gYmFzZSAxIC0iCiAJCSAgICAgICAiIHJlcz0lZFxuIiwgcmVzKTsKIAl9CkBAIC0zMDUsNyArMzA1LDcgQEAKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOwogCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGh3X3ByaXYtPmxpbmssICZ0dXBsZSkgfHwKIAkgICAgcGNtY2lhX2dldF90dXBsZV9kYXRhKGh3X3ByaXYtPmxpbmssICZ0dXBsZSkgfHwKLQkgICAgcGNtY2lhX3BhcnNlX3R1cGxlKGh3X3ByaXYtPmxpbmssICZ0dXBsZSwgcGFyc2UpIHx8CisJICAgIHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsIHBhcnNlKSB8fAogCQlwYXJzZS0+bG9uZ2xpbmtfbWZjLm5mbiA8IDIpIHsKIAkJLyogTm8gbXVsdGktZnVuY3Rpb24gbGlua3MgZm91bmQgKi8KIAkJcmV0ID0gLUVOT0RFVjsKQEAgLTMyMiw3ICszMjIsNyBAQAogCXJlZy5WYWx1ZSA9IENPUl9TT0ZUX1JFU0VUOwogCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAogCQkJCQkJICAgJnJlZyk7Ci0JaWYgKHJlcyAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHJlcyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogU2FuRGlzayAtIENPUiBzcmVzZXQgZmFpbGVkICglZClcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIHJlcyk7CiAJCWdvdG8gZG9uZTsKQEAgLTMzOSw3ICszMzksNyBAQAogCXJlZy5WYWx1ZSA9IENPUl9MRVZFTF9SRVEgfCAweDggfCBDT1JfQUREUl9ERUNPREUgfCBDT1JfRlVOQ19FTkE7CiAJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTYW5EaXNrIC0gQ09SIHNyZXNldCBmYWlsZWQgKCVkKVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgcmVzKTsKIAkJZ290byBkb25lOwpAQCAtMzc0LDcgKzM3NCw3IEBACiAJcmVnLlZhbHVlID0gMDsKIAlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwotCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9jb3Jfc3Jlc2V0IGZhaWxlZCAxICglZClcbiIsCiAJCSAgICAgICByZXMpOwogCQlyZXR1cm47CkBAIC0zODYsNyArMzg2LDcgQEAKIAlyZWcuVmFsdWUgfD0gQ09SX1NPRlRfUkVTRVQ7CiAJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfY29yX3NyZXNldCBmYWlsZWQgMiAoJWQpXG4iLAogCQkgICAgICAgcmVzKTsKIAkJcmV0dXJuOwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJCXJlZy5WYWx1ZSB8PSBDT1JfSVJFUV9FTkE7CiAJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfY29yX3NyZXNldCBmYWlsZWQgMyAoJWQpXG4iLAogCQkgICAgICAgcmVzKTsKIAkJcmV0dXJuOwpAQCAtNDMzLDcgKzQzMyw3IEBACiAJcmVnLlZhbHVlID0gMDsKIAlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwotCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9nZW5lc2lzX3NyZXNldCBmYWlsZWQgMSAiCiAJCSAgICAgICAiKCVkKVxuIiwgcmVzKTsKIAkJcmV0dXJuOwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJcmVnLlZhbHVlIHw9IENPUl9TT0ZUX1JFU0VUOwogCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAogCQkJCQkJICAgJnJlZyk7Ci0JaWYgKHJlcyAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHJlcyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJwcmlzbTJfcGNjYXJkX2dlbmVzaXNfc3Jlc2V0IGZhaWxlZCAyICIKIAkJICAgICAgICIoJWQpXG4iLCByZXMpOwogCQlyZXR1cm47CkBAIC00NjAsNyArNDYwLDcgQEAKIAlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NDU1I7CiAJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfZ2VuZXNpc19zcmVzZXQgZmFpbGVkIDMgIgogCQkgICAgICAgIiglZClcbiIsIHJlcyk7CiAJCXJldHVybjsKQEAgLTQ3Miw3ICs0NzIsNyBAQAogCXJlZy5WYWx1ZSA9IG9sZF9jb3IgJiB+Q09SX1NPRlRfUkVTRVQ7CiAJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfZ2VuZXNpc19zcmVzZXQgZmFpbGVkIDQgIgogCQkgICAgICAgIiglZClcbiIsIHJlcyk7CiAJCXJldHVybjsKQEAgLTUzMiwxNDUgKzUzMiwxMTggQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBDRkdfQ0hFQ0syKGZuLCByZXRmKSBcCi1kbyB7IGludCBfcmV0ID0gKHJldGYpOyBcCi1pZiAoX3JldCAhPSAwKSB7IFwKLQlQREVCVUcoREVCVUdfRVhUUkEsICJDYXJkU2VydmljZXMoIiAjZm4gIikgcmV0dXJuZWQgJWRcbiIsIF9yZXQpOyBcCi0JY3NfZXJyb3IobGluaywgZm4sIF9yZXQpOyBcCi0JZ290byBuZXh0X2VudHJ5OyBcCi19IFwKLX0gd2hpbGUgKDApCi0KIAogLyogcnVuIGFmdGVyIGEgQ0FSRF9JTlNFUlRJT04gZXZlbnQgaXMgcmVjZWl2ZWQgdG8gY29uZmlndXJlIHRoZSBQQ01DSUEKICAqIHNvY2tldCBhbmQgbWFrZSB0aGUgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtICovCisKK3N0YXRpYyBpbnQgcHJpc20yX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlQREVCVUcoREVCVUdfRVhUUkEsICJDaGVja2luZyBDRlRBQkxFX0VOVFJZIDB4JTAyWCAiCisJICAgICAgICIoZGVmYXVsdCAweCUwMlgpXG4iLCBjZmctPmluZGV4LCBkZmx0LT5pbmRleCk7CisKKwkvKiBEb2VzIHRoaXMgY2FyZCBuZWVkIGF1ZGlvIG91dHB1dD8gKi8KKwlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7CisJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKKwkJcF9kZXYtPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CisJfQorCisJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCisJLyogIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCisJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJaWYgKHZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLworCQkgICAgMTAwMDAgJiYgIWlnbm9yZV9jaXNfdmNjKSB7CisJCQlQREVCVUcoREVCVUdfRVhUUkEsICIgIFZjYyBtaXNtYXRjaCAtIHNraXBwaW5nIgorCQkJICAgICAgICIgdGhpcyBlbnRyeVxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0gZWxzZSBpZiAoZGZsdC0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJaWYgKHZjYyAhPSBkZmx0LT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8KKwkJICAgIDEwMDAwICYmICFpZ25vcmVfY2lzX3ZjYykgeworCQkJUERFQlVHKERFQlVHX0VYVFJBLCAiICBWY2MgKGRlZmF1bHQpIG1pc21hdGNoICIKKwkJCSAgICAgICAiLSBza2lwcGluZyB0aGlzIGVudHJ5XG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCisJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPSBjZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisJZWxzZSBpZiAoZGZsdC0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPSBkZmx0LT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCisJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCisJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQtPmlycS5JUlFJbmZvMSkKKwkJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CisJZWxzZSBpZiAoIShwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSkgeworCQkvKiBBdCBsZWFzdCBDb21wYXEgV0wyMDAgZG9lcyBub3QgaGF2ZSBJUlFJbmZvMSBzZXQsCisJCSAqIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIHdpdGhvdXQgaW50ZXJydXB0cy4uICovCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNvbmZpZyBoYXMgbm8gSVJRIGluZm8sIGJ1dCB0cnlpbmcgdG8gIgorCQkgICAgICAgImVuYWJsZSBJUlEgYW55d2F5Li5cbiIpOworCQlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKwl9CisKKwkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KKwlQREVCVUcoREVCVUdfRVhUUkEsICJJTyB3aW5kb3cgc2V0dGluZ3M6IGNmZy0+aW8ubndpbj0lZCAiCisJICAgICAgICJkZmx0LT5pby5ud2luPSVkXG4iLAorCSAgICAgICBjZmctPmlvLm53aW4sIGRmbHQtPmlvLm53aW4pOworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCVBERUJVRyhERUJVR19FWFRSQSwgImlvLT5mbGFncyA9IDB4JTA0WCwgIgorCQkgICAgICAgImlvLmJhc2U9MHglMDR4LCBsZW49JWRcbiIsIGlvLT5mbGFncywKKwkJICAgICAgIGlvLT53aW5bMF0uYmFzZSwgaW8tPndpblswXS5sZW4pOworCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYKKwkJCUNJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCX0KKwl9CisKKwkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7Cit9CisKIHN0YXRpYyBpbnQgcHJpc20yX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwogCWludCByZXQgPSAxOwotCXR1cGxlX3QgdHVwbGU7Ci0JY2lzcGFyc2VfdCAqcGFyc2U7CiAJaW50IGxhc3RfZm4sIGxhc3RfcmV0OwotCXVfY2hhciBidWZbNjRdOwotCWNvbmZpZ19pbmZvX3QgY29uZjsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKIAlzdHJ1Y3QgaG9zdGFwX2NzX3ByaXYgKmh3X3ByaXY7CiAKIAlQREVCVUcoREVCVUdfRkxPVywgInByaXNtMl9jb25maWcoKVxuIik7CiAKLQlwYXJzZSA9IGttYWxsb2Moc2l6ZW9mKGNpc3BhcnNlX3QpLCBHRlBfS0VSTkVMKTsKIAlod19wcml2ID0ga3phbGxvYyhzaXplb2YoKmh3X3ByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAocGFyc2UgPT0gTlVMTCB8fCBod19wcml2ID09IE5VTEwpIHsKKwlpZiAoaHdfcHJpdiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbGVkOwogCX0KIAotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0KLQlDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywKLQkJIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGxpbmssICZjb25mKSk7Ci0KIAkvKiBMb29rIGZvciBhbiBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJ5IGluIHRoZSBDSVMgKi8KLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCWZvciAoOzspIHsKLQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS0+Y2Z0YWJsZV9lbnRyeSk7Ci0JCUNGR19DSEVDSzIoR2V0VHVwbGVEYXRhLAotCQkJICAgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwotCQlDRkdfQ0hFQ0syKFBhcnNlVHVwbGUsCi0JCQkgICBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCBwYXJzZSkpOwotCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKLQkJCWRmbHQgPSAqY2ZnOwotCQlpZiAoY2ZnLT5pbmRleCA9PSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKLQkJUERFQlVHKERFQlVHX0VYVFJBLCAiQ2hlY2tpbmcgQ0ZUQUJMRV9FTlRSWSAweCUwMlggIgotCQkgICAgICAgIihkZWZhdWx0IDB4JTAyWClcbiIsIGNmZy0+aW5kZXgsIGRmbHQuaW5kZXgpOwotCi0JCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLwotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7Ci0JCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKLQkJCWxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7Ci0JCX0KLQotCQkvKiBVc2UgcG93ZXIgc2V0dGluZ3MgZm9yIFZjYyBhbmQgVnBwIGlmIHByZXNlbnQgKi8KLQkJLyogIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCi0JCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JCQlpZiAoY29uZi5WY2MgIT0gY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8KLQkJCSAgICAxMDAwMCAmJiAhaWdub3JlX2Npc192Y2MpIHsKLQkJCQlQREVCVUcoREVCVUdfRVhUUkEsICIgIFZjYyBtaXNtYXRjaCAtIHNraXBwaW5nIgotCQkJCSAgICAgICAiIHRoaXMgZW50cnlcbiIpOwotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCX0KLQkJfSBlbHNlIGlmIChkZmx0LnZjYy5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JCQlpZiAoY29uZi5WY2MgIT0gZGZsdC52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8KLQkJCSAgICAxMDAwMCAmJiAhaWdub3JlX2Npc192Y2MpIHsKLQkJCQlQREVCVUcoREVCVUdfRVhUUkEsICIgIFZjYyAoZGVmYXVsdCkgbWlzbWF0Y2ggIgotCQkJCSAgICAgICAiLSBza2lwcGluZyB0aGlzIGVudHJ5XG4iKTsKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcCA9Ci0JCQkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwotCQllbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwID0KLQkJCQlkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7Ci0KLQkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCi0JCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LmlycS5JUlFJbmZvMSkKLQkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7Ci0JCWVsc2UgaWYgKCEobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSkgewotCQkJLyogQXQgbGVhc3QgQ29tcGFxIFdMMjAwIGRvZXMgbm90IGhhdmUgSVJRSW5mbzEgc2V0LAotCQkJICogYnV0IGl0IGRvZXMgbm90IHdvcmsgd2l0aG91dCBpbnRlcnJ1cHRzLi4gKi8KLQkJCXByaW50aygiQ29uZmlnIGhhcyBubyBJUlEgaW5mbywgYnV0IHRyeWluZyB0byBlbmFibGUgIgotCQkJICAgICAgICJJUlEgYW55d2F5Li5cbiIpOwotCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQkJfQotCi0JCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCQlQREVCVUcoREVCVUdfRVhUUkEsICJJTyB3aW5kb3cgc2V0dGluZ3M6IGNmZy0+aW8ubndpbj0lZCAiCi0JCSAgICAgICAiZGZsdC5pby5ud2luPSVkXG4iLAotCQkgICAgICAgY2ZnLT5pby5ud2luLCBkZmx0LmlvLm53aW4pOwotCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOwotCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJCVBERUJVRyhERUJVR19FWFRSQSwgImlvLT5mbGFncyA9IDB4JTA0WCwgIgotCQkJICAgICAgICJpby5iYXNlPTB4JTA0eCwgbGVuPSVkXG4iLCBpby0+ZmxhZ3MsCi0JCQkgICAgICAgaW8tPndpblswXS5iYXNlLCBpby0+d2luWzBdLmxlbik7Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmCi0JCQkJQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKLQkJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOwotCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKLQkJCX0KLQkJfQotCi0JCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JCUNGR19DSEVDSzIoUmVxdWVzdElPLAotCQkJICAgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7Ci0KLQkJLyogVGhpcyBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJ5IGlzIE9LICovCi0JCWJyZWFrOwotCi0JbmV4dF9lbnRyeToKLQkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLAotCQkJIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKwlsYXN0X3JldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBwcmlzbTJfY29uZmlnX2NoZWNrLCBOVUxMKTsKKwlpZiAobGFzdF9yZXQpIHsKKwkJaWYgKCFpZ25vcmVfY2lzX3ZjYykKKwkJCXByaW50ayhLRVJOX0VSUiAiR2V0TmV4dFR1cGxlKCk6IE5vIG1hdGNoaW5nICIKKwkJCSAgICAgICAiQ0lTIGNvbmZpZ3VyYXRpb24uICBNYXliZSB5b3UgbmVlZCB0aGUgIgorCQkJICAgICAgICJpZ25vcmVfY2lzX3ZjYz0xIHBhcmFtZXRlci5cbiIpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogTmVlZCB0byBhbGxvY2F0ZSBuZXRfZGV2aWNlIGJlZm9yZSByZXF1ZXN0aW5nIElSUSBoYW5kbGVyICovCkBAIC03MzgsMTQgKzcxMSwxMiBAQAogCQlpZiAocmV0ID09IDAgJiYgbG9jYWwtPmRkZXYpCiAJCQlzdHJjcHkoaHdfcHJpdi0+bm9kZS5kZXZfbmFtZSwgbG9jYWwtPmRkZXYtPm5hbWUpOwogCX0KLQlrZnJlZShwYXJzZSk7CiAJcmV0dXJuIHJldDsKIAogIGNzX2ZhaWxlZDoKIAljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAKICBmYWlsZWQ6Ci0Ja2ZyZWUocGFyc2UpOwogCWtmcmVlKGh3X3ByaXYpOwogCXByaXNtMl9yZWxlYXNlKCh1X2xvbmcpbGluayk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCBmNjAwM2U3Li41MTU1YjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC04MzMsMTIgKzgzMywxMiBAQAogCXN3aXRjaCAocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgewogCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxMDA6CiAJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTMwMDoKLQkJLyogNVgwMCB3YW50cyBpbiBDZWxzaXVzICovCisJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTM1MDoKKwkJLyogNVgwMCBhbmQgNTM1MCB3YW50cyBpbiBDZWxzaXVzICovCiAJCXByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCA9IENUX0tJTExfVEhSRVNIT0xEOwogCQlicmVhazsKIAljYXNlIENTUl9IV19SRVZfVFlQRV81MTUwOgotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzNTA6Ci0JCS8qIDVYNTAgd2FudHMgaW4gS2VsdmluICovCisJCS8qIDUxNTAgd2FudHMgaW4gS2VsdmluICovCiAJCXByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCA9CiAJCQkJQ0VMU0lVU19UT19LRUxWSU4oQ1RfS0lMTF9USFJFU0hPTEQpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKaW5kZXggOTM5NDRkZS4uZTJhNThlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKQEAgLTI0MjIsNyArMjQyMiw3IEBACiAJCQl2b2lkICpwcml2X3N0YSkKIHsKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gcHJpdl9zdGE7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gcHJpdl9yOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiBfX21heWJlX3VudXNlZCA9IHByaXZfcjsKIAogCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CiAJa2ZyZWUobHFfc3RhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKaW5kZXggYTkxMmZiNi4uMjk3Njk2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKQEAgLTgyMyw3ICs4MjMsOSBAQAogaW50IGxic19zZXRfY2hhbm5lbChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4IGNoYW5uZWwpCiB7CiAJc3RydWN0IGNtZF9kc184MDJfMTFfcmZfY2hhbm5lbCBjbWQ7CisjaWZkZWYgREVCVUcKIAl1OCBvbGRfY2hhbm5lbCA9IHByaXYtPmN1cmJzc3BhcmFtcy5jaGFubmVsOworI2VuZGlmCiAJaW50IHJldCA9IDA7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCmluZGV4IGUzNTA1YzEuLjg0MmEwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwpAQCAtNzkxLDcgKzc5MSw3IEBACiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CiAJaWYgKChyZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKHBfZGV2LCAmdHVwbGUpKSAhPSAwIHx8CiAJICAgIChyZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEocF9kZXYsICZ0dXBsZSkpICE9IDAgfHwKLQkgICAgKHJldCA9IHBjbWNpYV9wYXJzZV90dXBsZShwX2RldiwgJnR1cGxlLCAmcGFyc2UpKSAhPSAwKQorCSAgICAocmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkgIT0gMCkKIAl7CiAJCWxic19wcl9lcnIoImVycm9yIGluIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUgZXRjXG4iKTsKIAkJZ290byBvdXQxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKaW5kZXggYzllNGE0My4uMWEwMTllOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCkBAIC01MzMsMTEgKzUzMywxMSBAQAogCQlkYXRhID0gaHctPnByaXY7CiAJCWRhdGEtPmh3ID0gaHc7CiAKLQkJZGF0YS0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGh3c2ltX2NsYXNzLCBOVUxMLCAwLCBodywKLQkJCQkJCSJod3NpbSVkIiwgaSk7CisJCWRhdGEtPmRldiA9IGRldmljZV9jcmVhdGUoaHdzaW1fY2xhc3MsIE5VTEwsIDAsIGh3LAorCQkJCQkgICJod3NpbSVkIiwgaSk7CiAJCWlmIChJU19FUlIoZGF0YS0+ZGV2KSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCSAgICAgICAibWFjODAyMTFfaHdzaW06IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSAiCisJCQkgICAgICAgIm1hYzgwMjExX2h3c2ltOiBkZXZpY2VfY3JlYXRlICIKIAkJCSAgICAgICAiZmFpbGVkICglbGQpXG4iLCBQVFJfRVJSKGRhdGEtPmRldikpOwogCQkJZXJyID0gLUVOT01FTTsKIAkJCWdvdG8gZmFpbGVkX2RydmRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKaW5kZXggMjViYWU3OS4uYTY3MGYzNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKQEAgLTc0OSw5ICs3NDksMTAgQEAKICAgICBmb3IgKGkgPSBqID0gMHgwOyBqIDwgMHg0MDA7IGogKz0gMHgyMCkgewogCWxpbmstPmlvLkJhc2VQb3J0MSA9IGogXiAweDMwMDsKIAlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQlpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKKwlpZiAoaSA9PSAwKQorCQlicmVhazsKICAgICB9Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGlmIChpICE9IDApIHsKIAljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwogCWdvdG8gZmFpbGVkOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYwppbmRleCA5ZWFhMjUyLi42ZmNmMmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19jcy5jCkBAIC04MCw3ICs4MCw3IEBACiAJLyogV2UgbmVlZCBhdG9taWMgb3BzIGhlcmUsIGJlY2F1c2Ugd2UncmUgbm90IGhvbGRpbmcgdGhlIGxvY2sgKi8KIAlzZXRfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKTsKIAotCWVyciA9IHBjbWNpYV9yZXNldF9jYXJkKGxpbmssIE5VTEwpOworCWVyciA9IHBjbWNpYV9yZXNldF9jYXJkKGxpbmstPnNvY2tldCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTY1LDYgKzE2NSw3MCBAQAogCQlsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgXAogCX0gd2hpbGUgKDApCiAKK3N0YXRpYyBpbnQgb3Jpbm9jb19jc19jb25maWdfY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCSAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCQkgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJCSAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkJICAgdm9pZCAqcHJpdl9kYXRhKQoreworCWlmIChjZmctPmluZGV4ID09IDApCisJCWdvdG8gbmV4dF9lbnRyeTsKKworCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLworCS8qIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCisJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJaWYgKHZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkgeworCQkJREVCVUcoMiwgInNwZWN0cnVtX2NzX2NvbmZpZzogVmNjIG1pc21hdGNoICh2Y2MgPSAlZCwgQ0lTID0gJWQpXG4iLCAgdmNjLCBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCk7CisJCQlpZiAoIWlnbm9yZV9jaXNfdmNjKQorCQkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJfQorCX0gZWxzZSBpZiAoZGZsdC0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJaWYgKHZjYyAhPSBkZmx0LT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDApIHsKKwkJCURFQlVHKDIsICJzcGVjdHJ1bV9jc19jb25maWc6IFZjYyBtaXNtYXRjaCAodmNjID0gJWQsIENJUyA9ICVkKVxuIiwgIHZjYywgZGZsdC0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKTsKKwkJCWlmICghaWdub3JlX2Npc192Y2MpCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisJfQorCisJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPQorCQkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCWVsc2UgaWYgKGRmbHQtPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKKwkJcF9kZXYtPmNvbmYuVnBwID0KKwkJCWRmbHQtPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisKKwkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7CisJCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQl9CisKKwkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCX0KKwlyZXR1cm4gMDsKKworbmV4dF9lbnRyeToKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UocF9kZXYpOworCXJldHVybiAtRU5PREVWOworfTsKKwogc3RhdGljIGludAogb3Jpbm9jb19jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CkBAIC0xNzMsMTYgKzIzNyw4IEBACiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGxhc3RfZm4sIGxhc3RfcmV0OwotCXVfY2hhciBidWZbNjRdOwotCWNvbmZpZ19pbmZvX3QgY29uZjsKLQl0dXBsZV90IHR1cGxlOwotCWNpc3BhcnNlX3QgcGFyc2U7CiAJdm9pZCBfX2lvbWVtICptZW07CiAKLQkvKiBMb29rIHVwIHRoZSBjdXJyZW50IFZjYyAqLwotCUNTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLAotCQkgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8obGluaywgJmNvbmYpKTsKLQogCS8qCiAJICogSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUKIAkgKiBlbnRyaWVzLCBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQKQEAgLTE5Nyw5NCArMjUzLDE0IEBACiAJICogYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4KIAkgKiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCiAJICovCi0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCXdoaWxlICgxKSB7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgLmluZGV4ID0gMCB9OwotCi0JCWlmICggKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDApCi0JCSAgICB8fCAocGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKSkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCi0JCQlkZmx0ID0gKmNmZzsKLQkJaWYgKGNmZy0+aW5kZXggPT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0KLQkJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCi0JCS8qIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCi0JCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JCQlpZiAoY29uZi5WY2MgIT0gY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDApIHsKLQkJCQlERUJVRygyLCAib3Jpbm9jb19jc19jb25maWc6IFZjYyBtaXNtYXRjaCAoY29uZi5WY2MgPSAlZCwgY2ZnIENJUyA9ICVkKVxuIiwgIGNvbmYuVmNjLCBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCk7Ci0JCQkJaWYgKCFpZ25vcmVfY2lzX3ZjYykKLQkJCQkJZ290byBuZXh0X2VudHJ5OwotCQkJfQotCQl9IGVsc2UgaWYgKGRmbHQudmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJCWlmIChjb25mLlZjYyAhPSBkZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkgewotCQkJCURFQlVHKDIsICJvcmlub2NvX2NzX2NvbmZpZzogVmNjIG1pc21hdGNoIChjb25mLlZjYyA9ICVkLCBkZmx0IENJUyA9ICVkKVxuIiwgIGNvbmYuVmNjLCBkZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCk7Ci0JCQkJaWYoIWlnbm9yZV9jaXNfdmNjKQotCQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcCA9Ci0JCQkgICAgY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwotCQllbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwID0KLQkJCSAgICBkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7Ci0JCQotCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KLQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQotCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKLQkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKLQkJCWNpc3RwbF9pb190ICppbyA9Ci0JCQkgICAgKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOwotCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9Ci0JCQkJICAgIElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQkJbGluay0+aW8uQXR0cmlidXRlczEgPQotCQkJCSAgICBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0KLQkJCSAgICBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCQkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0KLQkJCQkgICAgbGluay0+aW8uQXR0cmlidXRlczE7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOwotCQkJfQotCi0JCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCX0KLQotCi0JCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KLQotCQlicmVhazsKLQkJCi0JbmV4dF9lbnRyeToKLQkJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwotCQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpOwotCQlpZiAobGFzdF9yZXQgID09IENTX05PX01PUkVfSVRFTVMpIHsKKwlsYXN0X3JldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBvcmlub2NvX2NzX2NvbmZpZ19jaGVjaywgTlVMTCk7CisJaWYgKGxhc3RfcmV0KSB7CisJCWlmICghaWdub3JlX2Npc192Y2MpCiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJHZXROZXh0VHVwbGUoKTogTm8gbWF0Y2hpbmcgIgogCQkJICAgICAgICJDSVMgY29uZmlndXJhdGlvbi4gIE1heWJlIHlvdSBuZWVkIHRoZSAiCiAJCQkgICAgICAgImlnbm9yZV9jaXNfdmNjPTEgcGFyYW1ldGVyLlxuIik7Ci0JCQlnb3RvIGNzX2ZhaWxlZDsKLQkJfQorCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyoKQEAgLTMzNSw3ICszMTEsNiBAQAogCSAgICAgICAiMHglMDR4LTB4JTA0eFxuIiwgZGV2LT5uYW1lLCBkZXYtPmRldi5wYXJlbnQtPmJ1c19pZCwKIAkgICAgICAgbGluay0+aXJxLkFzc2lnbmVkSVJRLCBsaW5rLT5pby5CYXNlUG9ydDEsCiAJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOwotCiAJcmV0dXJuIDA7CiAKICBjc19mYWlsZWQ6CkBAIC00MDMsNiArMzc4LDcgQEAKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwogCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoISB0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpIHsKIAkJZXJyID0gb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoZGV2KTsKQEAgLTQxMiw3ICszODgsNyBAQAogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAotCQlzcGluX2xvY2soJnByaXYtPmxvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAkJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKQEAgLTQyNCw3ICs0MDAsNyBAQAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CiAJCX0KIAotCQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCmluZGV4IDE5OTRhYTEuLjExN2M3ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMKQEAgLTQ3OSw3ICs0NzksNiBAQAogCXByaW50ayhLRVJOX0VSUiAicDU0OiBlZXByb20gcGFyc2UgZmFpbGVkIVxuIik7CiAJcmV0dXJuIGVycjsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pOwogCiBzdGF0aWMgaW50IHA1NF9yc3NpX3RvX2RibShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCByc3NpKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCmluZGV4IDE5MTJmNWUuLjc1ZDc0OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKQEAgLTM5LDYgKzM5LDcgQEAKIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NDIwMCl9LAkvKiBOZXRnZWFyIFdHMTIxICovCiAJe1VTQl9ERVZJQ0UoMHgwODQ2LCAweDQyMTApfSwJLyogTmV0Z2VhciBXRzEyMSB0aGUgc2Vjb25kID8gKi8KIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NDIyMCl9LAkvKiBOZXRnZWFyIFdHMTExICovCisJe1VTQl9ERVZJQ0UoMHgwOWFhLCAweDEwMDApfSwJLyogU3Bpbm5ha2VyIFByb3RvIGJvYXJkICovCiAJe1VTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMDYpfSwJLyogTWVkaW9uIDQwOTAwLCBSb3BlciBFdXJvcGUgKi8KIAl7VVNCX0RFVklDRSgweDEyNGEsIDB4NDAyMyl9LAkvKiBTaHV0dGxlIFBOMTUsIEFpcnZhc3QgV00xNjhnLCBJT0dlYXIgR1dVNTEzICovCiAJe1VTQl9ERVZJQ0UoMHgxOTE1LCAweDIyMzQpfSwJLyogTGlua3N5cyBXVVNCNTRHIE9FTSAqLwpAQCAtNjMsOCArNjQsOCBAQAogCXtVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDA2KX0sICAgLyogTWVkaW9uIE1ENDA5MDAgKi8KIAl7VVNCX0RFVklDRSgweDBjZGUsIDB4MDAwOCl9LAkvKiBTYWdlbSBYRzcwM0EgKi8KIAl7VVNCX0RFVklDRSgweDBkOGUsIDB4Mzc2Mil9LAkvKiBETGluayBEV0wtRzEyMCBDb2hpYmEgKi8KLQl7VVNCX0RFVklDRSgweDA5YWEsIDB4MTAwMCl9LAkvKiBTcGlubmFrZXIgUHJvdG8gYm9hcmQgKi8KIAl7VVNCX0RFVklDRSgweDEyNGEsIDB4NDAyNSl9LAkvKiBJT0dlYXIgR1dVNTEzIChHVzM4ODdJSyBjaGlwKSAqLworCXtVU0JfREVWSUNFKDB4MTI2MCwgMHhlZTIyKX0sCS8qIFNNQyAyODYyVy1HIHZlcnNpb24gMiAqLwogCXtVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDBhKX0sCS8qIExpbmtzeXMgV1VTQjU0RyB2ZXIgMiAqLwogCXtVU0JfREVWSUNFKDB4MTNCMSwgMHgwMDBDKX0sCS8qIExpbmtzeXMgV1VTQjU0QUcgKi8KIAl7VVNCX0RFVklDRSgweDE0MzUsIDB4MDQyNyl9LAkvKiBJbnZlbnRlbCBVUjA1NEcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKaW5kZXggNDRkYTBkMS4uMTQwNGE1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKQEAgLTc5OCw5ICs3OTgsOSBAQAogICAgIGlvdW5tYXAobG9jYWwtPmFtZW0pOwogICAgIC8qIERvIGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KICAgICBpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxvY2FsLT5hbWVtX2hhbmRsZSk7Ci0gICAgaWYgKCBpICE9IENTX1NVQ0NFU1MgKSBERUJVRygwLCJSZWxlYXNlV2luZG93KGxvY2FsLT5hbWVtKSByZXQgPSAleFxuIixpKTsKKyAgICBpZiAoIGkgIT0gMCApIERFQlVHKDAsIlJlbGVhc2VXaW5kb3cobG9jYWwtPmFtZW0pIHJldCA9ICV4XG4iLGkpOwogICAgIGkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobG9jYWwtPnJtZW1faGFuZGxlKTsKLSAgICBpZiAoIGkgIT0gQ1NfU1VDQ0VTUyApIERFQlVHKDAsIlJlbGVhc2VXaW5kb3cobG9jYWwtPnJtZW0pIHJldCA9ICV4XG4iLGkpOworICAgIGlmICggaSAhPSAwICkgREVCVUcoMCwiUmVsZWFzZVdpbmRvdyhsb2NhbC0+cm1lbSkgcmV0ID0gJXhcbiIsaSk7CiAgICAgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCiAgICAgREVCVUcoMiwicmF5X3JlbGVhc2UgZW5kaW5nXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKaW5kZXggMTY3NmFjNC4uNDUxZDQxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKQEAgLTM3NCw3ICszNzQsNyBAQAogCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVgpOwogCXN0cnVjdCB0eGVudHJ5X2Rlc2MgdHhkZXNjOwogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYzsKLQl1bnNpZ25lZCBpbnQgaXZfbGVuOworCXVuc2lnbmVkIGludCBpdl9sZW4gPSAwOwogCiAJaWYgKHVubGlrZWx5KHJ0MngwMHF1ZXVlX2Z1bGwocXVldWUpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTUsNiArMzk1LDkgQEAKIAllbnRyeS0+c2tiID0gc2tiOwogCXJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yKGVudHJ5LCAmdHhkZXNjKTsKIAorCWlmIChJRUVFODAyMTFfU0tCX0NCKHNrYiktPmNvbnRyb2wuaHdfa2V5ICE9IE5VTEwpCisJCWl2X2xlbiA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+Y29udHJvbC5od19rZXktPml2X2xlbjsKKwogCS8qCiAJICogQWxsIGluZm9ybWF0aW9uIGlzIHJldHJlaXZlZCBmcm9tIHRoZSBza2ItPmNiIGFycmF5LAogCSAqIG5vdyB3ZSBzaG91bGQgY2xhaW0gb3duZXJzaGlwIG9mIHRoZSBkcml2ZXIgcGFydCBvZiB0aGF0CkBAIC00MTAsOSArNDEzLDcgQEAKIAkgKiB0aGUgZnJhbWUgc28gd2UgY2FuIHByb3ZpZGUgaXQgdG8gdGhlIGRyaXZlciBzZXBlcmF0ZWx5LgogCSAqLwogCWlmICh0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVCwgJnR4ZGVzYy5mbGFncykgJiYKLQkgICAgIXRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBUX0lWLCAmdHhkZXNjLmZsYWdzKSAmJgotCQkoSUVFRTgwMjExX1NLQl9DQihza2IpLT5jb250cm9sLmh3X2tleSAhPSBOVUxMKSkgewotCQlpdl9sZW4gPSBJRUVFODAyMTFfU0tCX0NCKHNrYiktPmNvbnRyb2wuaHdfa2V5LT5pdl9sZW47CisJICAgICF0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVF9JViwgJnR4ZGVzYy5mbGFncykpIHsKIAkJcnQyeDAwY3J5cHRvX3R4X3JlbW92ZV9pdihza2IsIGl2X2xlbik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4N19kZXYuYwppbmRleCBlOTkwMjYxLi40MzFlM2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODdfZGV2LmMKQEAgLTMzLDEwICszMywxMyBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHJ0bDgxODdfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewogCS8qIEFzdXMgKi8KIAl7VVNCX0RFVklDRSgweDBiMDUsIDB4MTcxZCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKKwkvKiBCZWxraW4gKi8KKwl7VVNCX0RFVklDRSgweDA1MGQsIDB4NzA1ZSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCiAJLyogUmVhbHRlayAqLwogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTg3KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTg5KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODdCfSwKIAl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE5NyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCisJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxOTgpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N0J9LAogCS8qIE5ldGdlYXIgKi8KIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NjEwMCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NmEwMCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zcGVjdHJ1bV9jcy5jCmluZGV4IDY3YjI2ZDMuLjg1Mjc4OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3BlY3RydW1fY3MuYwpAQCAtMjM1LDYgKzIzNSw3MCBAQAogICogZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgogICovCiAKK3N0YXRpYyBpbnQgc3BlY3RydW1fY3NfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQkgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJCSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJCSAgICB2b2lkICpwcml2X2RhdGEpCit7CisJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJZ290byBuZXh0X2VudHJ5OworCisJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCisJLyogTm90ZSB0aGF0IHRoZSBDSVMgdmFsdWVzIG5lZWQgdG8gYmUgcmVzY2FsZWQgKi8KKwlpZiAoY2ZnLT52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQlpZiAodmNjICE9IGNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKSB7CisJCQlERUJVRygyLCAic3BlY3RydW1fY3NfY29uZmlnOiBWY2MgbWlzbWF0Y2ggKHZjYyA9ICVkLCBDSVMgPSAlZClcbiIsICB2Y2MsIGNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKTsKKwkJCWlmICghaWdub3JlX2Npc192Y2MpCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisJfSBlbHNlIGlmIChkZmx0LT52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQlpZiAodmNjICE9IGRmbHQtPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkgeworCQkJREVCVUcoMiwgInNwZWN0cnVtX2NzX2NvbmZpZzogVmNjIG1pc21hdGNoICh2Y2MgPSAlZCwgQ0lTID0gJWQpXG4iLCAgdmNjLCBkZmx0LT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDApOworCQkJaWYgKCFpZ25vcmVfY2lzX3ZjYykKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KKwl9CisKKwlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBfZGV2LT5jb25mLlZwcCA9CisJCQljZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisJZWxzZSBpZiAoZGZsdC0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPQorCQkJZGZsdC0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKKworCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJLyogSU8gd2luZG93IHNldHRpbmdzICovCisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgeworCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOworCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCX0KKworCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pICE9IDApCisJCQlnb3RvIG5leHRfZW50cnk7CisJfQorCXJldHVybiAwOworCituZXh0X2VudHJ5OgorCXBjbWNpYV9kaXNhYmxlX2RldmljZShwX2Rldik7CisJcmV0dXJuIC1FTk9ERVY7Cit9OworCiBzdGF0aWMgaW50CiBzcGVjdHJ1bV9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CkBAIC0yNDMsMTYgKzMwNyw4IEBACiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGxhc3RfZm4sIGxhc3RfcmV0OwotCXVfY2hhciBidWZbNjRdOwotCWNvbmZpZ19pbmZvX3QgY29uZjsKLQl0dXBsZV90IHR1cGxlOwotCWNpc3BhcnNlX3QgcGFyc2U7CiAJdm9pZCBfX2lvbWVtICptZW07CiAKLQkvKiBMb29rIHVwIHRoZSBjdXJyZW50IFZjYyAqLwotCUNTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLAotCQkgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8obGluaywgJmNvbmYpKTsKLQogCS8qCiAJICogSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUKIAkgKiBlbnRyaWVzLCBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQKQEAgLTI2Nyw5NCArMzIzLDE0IEBACiAJICogYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4KIAkgKiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCiAJICovCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCXdoaWxlICgxKSB7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgLmluZGV4ID0gMCB9OwotCi0JCWlmICggKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDApCi0JCSAgICB8fCAocGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKSkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCi0JCQlkZmx0ID0gKmNmZzsKLQkJaWYgKGNmZy0+aW5kZXggPT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0KLQkJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCi0JCS8qIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCi0JCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JCQlpZiAoY29uZi5WY2MgIT0gY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDApIHsKLQkJCQlERUJVRygyLCAic3BlY3RydW1fY3NfY29uZmlnOiBWY2MgbWlzbWF0Y2ggKGNvbmYuVmNjID0gJWQsIENJUyA9ICVkKVxuIiwgIGNvbmYuVmNjLCBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCk7Ci0JCQkJaWYgKCFpZ25vcmVfY2lzX3ZjYykKLQkJCQkJZ290byBuZXh0X2VudHJ5OwotCQkJfQotCQl9IGVsc2UgaWYgKGRmbHQudmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJCWlmIChjb25mLlZjYyAhPSBkZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkgewotCQkJCURFQlVHKDIsICJzcGVjdHJ1bV9jc19jb25maWc6IFZjYyBtaXNtYXRjaCAoY29uZi5WY2MgPSAlZCwgQ0lTID0gJWQpXG4iLCAgY29uZi5WY2MsIGRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKTsKLQkJCQlpZighaWdub3JlX2Npc192Y2MpCi0JCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCX0KLQkJfQotCi0JCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwID0KLQkJCSAgICBjZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7Ci0JCWVsc2UgaWYgKGRmbHQudnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJbGluay0+Y29uZi5WcHAgPQotCQkJICAgIGRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKLQkJCi0JCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLwotCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwotCi0JCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX2lvX3QgKmlvID0KLQkJCSAgICAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87Ci0JCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0KLQkJCQkgICAgSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9Ci0JCQkJICAgIElPX0RBVEFfUEFUSF9XSURUSF84OwotCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPQotCQkJICAgIGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0JCQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCQkJbGluay0+aW8uQXR0cmlidXRlczIgPQotCQkJCSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMTsKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47Ci0JCQl9Ci0KLQkJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJfQotCi0KLQkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwotCi0JCWJyZWFrOwotCQkKLQluZXh0X2VudHJ5OgotCQlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Ci0JCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0JCWlmIChsYXN0X3JldCAgPT0gQ1NfTk9fTU9SRV9JVEVNUykgeworCWxhc3RfcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHNwZWN0cnVtX2NzX2NvbmZpZ19jaGVjaywgTlVMTCk7CisJaWYgKGxhc3RfcmV0KSB7CisJCWlmICghaWdub3JlX2Npc192Y2MpCiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJHZXROZXh0VHVwbGUoKTogTm8gbWF0Y2hpbmcgIgogCQkJICAgICAgICJDSVMgY29uZmlndXJhdGlvbi4gIE1heWJlIHlvdSBuZWVkIHRoZSAiCiAJCQkgICAgICAgImlnbm9yZV9jaXNfdmNjPTEgcGFyYW1ldGVyLlxuIik7Ci0JCQlnb3RvIGNzX2ZhaWxlZDsKLQkJfQorCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyoKQEAgLTQ1MCwxMCArNDI2LDExIEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gMDsKIAogCS8qIE1hcmsgdGhlIGRldmljZSBhcyBzdG9wcGVkLCB0byBibG9jayBJTyB1bnRpbCBsYXRlciAqLwotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7CiAJaWYgKGVycikKQEAgLTQ2Myw3ICs0NDAsNyBAQAogCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAlwcml2LT5od191bmF2YWlsYWJsZSsrOwogCi0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKaW5kZXggMTM2MjIwYi4uZTkzOWE3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYwpAQCAtNDM4Nyw3ICs0Mzg3LDcgQEAKICAqCiAgKiBUaGFua3MgZ28gYWxzbyB0bzoKICAqCUphbWVzIEFzaHRvbiAoamFhMTAxQHN5c2VuZy5hbnUuZWR1LmF1KSwKLSAqCUFsYW4gQ294IChhbGFuQHJlZGhhdC5jb20pLAorICoJQWxhbiBDb3ggKGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51ayksCiAgKglBbGxhbiBDcmVpZ2h0b24gKGFsbGFuY0Bjcy51c3lkLmVkdS5hdSksCiAgKglNYXR0aGV3IEdlaWVyIChtYXR0aGV3QGNzLnVzeWQuZWR1LmF1KSwKICAqCVJlbW8gZGkgR2lvdmFubmkgKHJlbW9AY3MudXN5ZC5lZHUuYXUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5wLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLnAuaAppbmRleCBiMzNhYzQ3Li40NGQzMWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLnAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLnAuaApAQCAtMTg2LDcgKzE4Niw3IEBACiAgKgogICogVGhhbmtzIGdvIGFsc28gdG86CiAgKglKYW1lcyBBc2h0b24gPGphYTEwMUBzeXNlbmcuYW51LmVkdS5hdT4sCi0gKglBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPiwKKyAqCUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAogICoJQWxsYW4gQ3JlaWdodG9uIDxhbGxhbmNAY3MudXN5ZC5lZHUuYXU+LAogICoJTWF0dGhldyBHZWllciA8bWF0dGhld0Bjcy51c3lkLmVkdS5hdT4sCiAgKglSZW1vIGRpIEdpb3Zhbm5pIDxyZW1vQGNzLnVzeWQuZWR1LmF1PiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYwppbmRleCBiNWRlMzhhLi5lMTI0YjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCkBAIC0zNzAyLDcgKzM3MDIsNyBAQAogI2VuZGlmCiAKICAgaSA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKLSAgaWYoaSAhPSBDU19TVUNDRVNTKQorICBpZiAoaSAhPSAwKQogICAgIHsKICAgICAgIGNzX2Vycm9yKGxpbmssIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgaSk7CiAgICAgICByZXR1cm4gRkFMU0U7CkBAIC0zNzE2LDcgKzM3MTYsNyBAQAogICByZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAgIHJlZy5WYWx1ZSA9IHJlZy5WYWx1ZSB8IENPUl9TV19SRVNFVDsKICAgaSA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKLSAgaWYoaSAhPSBDU19TVUNDRVNTKQorICBpZiAoaSAhPSAwKQogICAgIHsKICAgICAgIGNzX2Vycm9yKGxpbmssIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgaSk7CiAgICAgICByZXR1cm4gRkFMU0U7CkBAIC0zNzI1LDcgKzM3MjUsNyBAQAogICByZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAgIHJlZy5WYWx1ZSA9IENPUl9MRVZFTF9JUlEgfCBDT1JfQ09ORklHOwogICBpID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwotICBpZihpICE9IENTX1NVQ0NFU1MpCisgIGlmIChpICE9IDApCiAgICAgewogICAgICAgY3NfZXJyb3IobGluaywgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBpKTsKICAgICAgIHJldHVybiBGQUxTRTsKQEAgLTM5MDMsNyArMzkwMyw3IEBACiAgIGRvCiAgICAgewogICAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0gICAgICBpZihpICE9IENTX1NVQ0NFU1MpCisgICAgICBpZiAoaSAhPSAwKQogCXsKIAkgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJICBicmVhazsKQEAgLTM5MTQsNyArMzkxNCw3IEBACiAgICAgICAgKiBhY3R1YWxseSBhc3NpZ24gYSBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQuCiAgICAgICAgKi8KICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7Ci0gICAgICBpZihpICE9IENTX1NVQ0NFU1MpCisgICAgICBpZiAoaSAhPSAwKQogCXsKIAkgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCSAgYnJlYWs7CkBAIC0zOTI2LDcgKzM5MjYsNyBAQAogICAgICAgICovCiAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLSAgICAgIGlmKGkgIT0gQ1NfU1VDQ0VTUykKKyAgICAgIGlmIChpICE9IDApCiAJewogCSAgY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOwogCSAgYnJlYWs7CkBAIC0zOTQyLDcgKzM5NDIsNyBAQAogICAgICAgcmVxLkJhc2UgPSByZXEuU2l6ZSA9IDA7CiAgICAgICByZXEuQWNjZXNzU3BlZWQgPSBtZW1fc3BlZWQ7CiAgICAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKLSAgICAgIGlmKGkgIT0gQ1NfU1VDQ0VTUykKKyAgICAgIGlmIChpICE9IDApCiAJewogCSAgY3NfZXJyb3IobGluaywgUmVxdWVzdFdpbmRvdywgaSk7CiAJICBicmVhazsKQEAgLTM5NTQsNyArMzk1NCw3IEBACiAKICAgICAgIG1lbS5DYXJkT2Zmc2V0ID0gMDsgbWVtLlBhZ2UgPSAwOwogICAgICAgaSA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKTsKLSAgICAgIGlmKGkgIT0gQ1NfU1VDQ0VTUykKKyAgICAgIGlmIChpICE9IDApCiAJewogCSAgY3NfZXJyb3IobGluaywgTWFwTWVtUGFnZSwgaSk7CiAJICBicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKaW5kZXggNzRhNWFkMi4uNjg3ODljNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKQEAgLTE5NzcsMTAgKzE5NzcsMTAgQEAKIAkJbGluay0+aW8uQmFzZVBvcnQxID0gajsKIAkJbGluay0+aW8uQmFzZVBvcnQyID0gbGluay0+aW8uQmFzZVBvcnQxICsgMHgxMDsKIAkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCWlmIChpID09IENTX1NVQ0NFU1MpCisJCWlmIChpID09IDApCiAJCQlicmVhazsKIAl9Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChpICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAkJZ290byBmYWlsZWQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwppbmRleCAzYzNkZDQwLi5jNjk0OGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwpAQCAtMjM5LDExICsyMzksMTQgQEAKIAkgKi8KIAliYXRjaF90YXJnZXQgPSBucC0+cnhfdGFyZ2V0IC0gKHJlcV9wcm9kIC0gbnAtPnJ4LnJzcF9jb25zKTsKIAlmb3IgKGkgPSBza2JfcXVldWVfbGVuKCZucC0+cnhfYmF0Y2gpOyBpIDwgYmF0Y2hfdGFyZ2V0OyBpKyspIHsKLQkJc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKGRldiwgUlhfQ09QWV9USFJFU0hPTEQsCisJCXNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihkZXYsIFJYX0NPUFlfVEhSRVNIT0xEICsgTkVUX0lQX0FMSUdOLAogCQkJCQkgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7CiAJCWlmICh1bmxpa2VseSghc2tiKSkKIAkJCWdvdG8gbm9fc2tiOwogCisJCS8qIEFsaWduIGlwIGhlYWRlciB0byBhIDE2IGJ5dGVzIGJvdW5kYXJ5ICovCisJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKKwogCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTsKIAkJaWYgKCFwYWdlKSB7CiAJCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTQ3MSw3ICs0NzQsNyBAQAogCXVuc2lnbmVkIGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShkYXRhKTsKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAotCWZyYWdzICs9IChvZmZzZXQgKyBsZW4gKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKKwlmcmFncyArPSBESVZfUk9VTkRfVVAob2Zmc2V0ICsgbGVuLCBQQUdFX1NJWkUpOwogCWlmICh1bmxpa2VseShmcmFncyA+IE1BWF9TS0JfRlJBR1MgKyAxKSkgewogCQlwcmludGsoS0VSTl9BTEVSVCAieGVubmV0OiBza2IgcmlkZXMgdGhlIHJvY2tldDogJWQgZnJhZ3NcbiIsCiAJCSAgICAgICBmcmFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL251YnVzL251YnVzLmMgYi9kcml2ZXJzL251YnVzL251YnVzLmMKaW5kZXggMmYwNDdlNS4uZjVmNzU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9udWJ1cy9udWJ1cy5jCisrKyBiL2RyaXZlcnMvbnVidXMvbnVidXMuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJewogCQl3aGlsZShub3RfdXNlZnVsKHAsbWFwKSkKIAkJCXArKzsKLQkJCXArKzsKKwkJcCsrOwogCQlsZW4tLTsKIAl9CiAJKnB0ciA9IHA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2Jhc2UuYyBiL2RyaXZlcnMvb2YvYmFzZS5jCmluZGV4IGFkOGFjMWEuLjdjNzllOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvYmFzZS5jCisrKyBiL2RyaXZlcnMvb2YvYmFzZS5jCkBAIC00MTAsNyArNDEwLDcgQEAKIAljaGFyICptb2RhbGlhczsKIH07CiBzdGF0aWMgc3RydWN0IG9mX21vZGFsaWFzX3RhYmxlIG9mX21vZGFsaWFzX3RhYmxlW10gPSB7Ci0JLyogRW1wdHkgZm9yIG5vdzsgYWRkIGVudHJpZXMgYXMgbmVlZGVkICovCisJeyAiZnNsLG1jdS1tcGM4MzQ5ZW1pdHgiLCAibWN1LW1wYzgzNDllbWl0eCIgfSwKIH07CiAKIC8qKgpAQCAtNDIwLDEzICs0MjAsMTIgQEAKICAqIEBsZW46CUxlbmd0aCBvZiBtb2RhbGlhcyB2YWx1ZQogICoKICAqIEJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgY29tcGF0aWJsZSBwcm9wZXJ0eSwgdGhpcyByb3V0aW5lIHdpbGwgZGV0ZXJtaW5lCi0gKiBhbiBhcHByb3ByaWF0ZSBtb2RhbGlhcyB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIGRldmljZSB0cmVlIG5vZGUuICBUaHJlZQotICogc2VwYXJhdGUgbWV0aG9kcyBhcmUgdXNlZCB0byBkZXJpdmUgYSBtb2RhbGlhcyB2YWx1ZS4KKyAqIGFuIGFwcHJvcHJpYXRlIG1vZGFsaWFzIHZhbHVlIGZvciBhIHBhcnRpY3VsYXIgZGV2aWNlIHRyZWUgbm9kZS4gIFR3bworICogc2VwYXJhdGUgbWV0aG9kcyBhcmUgYXR0ZW1wdGVkIHRvIGRlcml2ZSBhIG1vZGFsaWFzIHZhbHVlLgogICoKICAqIEZpcnN0IG1ldGhvZCBpcyB0byBsb29rdXAgdGhlIGNvbXBhdGlibGUgdmFsdWUgaW4gb2ZfbW9kYWxpYXNfdGFibGUuCi0gKiBTZWNvbmQgaXMgdG8gbG9vayBmb3IgYSAibGludXgsPG1vZGFsaWFzPiIgZW50cnkgaW4gdGhlIGNvbXBhdGlibGUgbGlzdAotICogYW5kIHVzZWQgdGhhdCBmb3IgbW9kYWxpYXMuICBUaGlyZCBpcyB0byBzdHJpcCBvZmYgdGhlIG1hbnVmYWN0dXJlcgotICogcHJlZml4IGZyb20gdGhlIGZpcnN0IGNvbXBhdGlibGUgZW50cnkgYW5kIHVzZSB0aGUgcmVtYWluZGVyIGFzIG1vZGFsaWFzCisgKiBTZWNvbmQgaXMgdG8gc3RyaXAgb2ZmIHRoZSBtYW51ZmFjdHVyZXIgcHJlZml4IGZyb20gdGhlIGZpcnN0CisgKiBjb21wYXRpYmxlIGVudHJ5IGFuZCB1c2UgdGhlIHJlbWFpbmRlciBhcyBtb2RhbGlhcwogICoKICAqIFRoaXMgcm91dGluZSByZXR1cm5zIDAgb24gc3VjY2VzcwogICovCkBAIC00NDksMjEgKzQ0OCw3IEBACiAJaWYgKCFjb21wYXRpYmxlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIDIuIHNlYXJjaCBmb3IgbGludXgsPG1vZGFsaWFzPiBlbnRyeSAqLwotCXAgPSBjb21wYXRpYmxlOwotCXdoaWxlIChjcGxlbiA+IDApIHsKLQkJaWYgKCFzdHJuY21wKHAsICJsaW51eCwiLCA2KSkgewotCQkJcCArPSA2OwotCQkJc3RybGNweShtb2RhbGlhcywgcCwgbGVuKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaSA9IHN0cmxlbihwKSArIDE7Ci0JCXAgKz0gaTsKLQkJY3BsZW4gLT0gaTsKLQl9Ci0KLQkvKiAzLiB0YWtlIGZpcnN0IGNvbXBhdGlibGUgZW50cnkgYW5kIHN0cmlwIG1hbnVmYWN0dXJlciAqLworCS8qIDIuIHRha2UgZmlyc3QgY29tcGF0aWJsZSBlbnRyeSBhbmQgc3RyaXAgbWFudWZhY3R1cmVyICovCiAJcCA9IHN0cmNocihjb21wYXRpYmxlLCAnLCcpOwogCWlmICghcCkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC00NzMsMyArNDU4LDExMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwob2ZfbW9kYWxpYXNfbm9kZSk7CiAKKy8qKgorICogb2ZfcGFyc2VfcGhhbmRsZXNfd2l0aF9hcmdzIC0gRmluZCBhIG5vZGUgcG9pbnRlZCBieSBwaGFuZGxlIGluIGEgbGlzdAorICogQG5wOgkJcG9pbnRlciB0byBhIGRldmljZSB0cmVlIG5vZGUgY29udGFpbmluZyBhIGxpc3QKKyAqIEBsaXN0X25hbWU6CXByb3BlcnR5IG5hbWUgdGhhdCBjb250YWlucyBhIGxpc3QKKyAqIEBjZWxsc19uYW1lOglwcm9wZXJ0eSBuYW1lIHRoYXQgc3BlY2lmaWVzIHBoYW5kbGVzJyBhcmd1bWVudHMgY291bnQKKyAqIEBpbmRleDoJaW5kZXggb2YgYSBwaGFuZGxlIHRvIHBhcnNlIG91dAorICogQG91dF9ub2RlOglwb2ludGVyIHRvIGRldmljZV9ub2RlIHN0cnVjdCBwb2ludGVyICh3aWxsIGJlIGZpbGxlZCkKKyAqIEBvdXRfYXJnczoJcG9pbnRlciB0byBhcmd1bWVudHMgcG9pbnRlciAod2lsbCBiZSBmaWxsZWQpCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgdG8gcGFyc2UgbGlzdHMgb2YgcGhhbmRsZXMgYW5kIHRoZWlyIGFyZ3VtZW50cy4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBmaWxscyBvdXRfbm9kZSBhbmQgb3V0X2FyZ3MsIG9uIGVycm9yIHJldHVybnMKKyAqIGFwcHJvcHJpYXRlIGVycm5vIHZhbHVlLgorICoKKyAqIEV4YW1wbGU6CisgKgorICogcGhhbmRsZTE6IG5vZGUxIHsKKyAqIAkjbGlzdC1jZWxscyA9IDwyPjsKKyAqIH0KKyAqCisgKiBwaGFuZGxlMjogbm9kZTIgeworICogCSNsaXN0LWNlbGxzID0gPDE+OworICogfQorICoKKyAqIG5vZGUzIHsKKyAqIAlsaXN0ID0gPCZwaGFuZGxlMSAxIDIgJnBoYW5kbGUyIDM+OworICogfQorICoKKyAqIFRvIGdldCBhIGRldmljZV9ub2RlIG9mIHRoZSBgbm9kZTInIG5vZGUgeW91IG1heSBjYWxsIHRoaXM6CisgKiBvZl9wYXJzZV9waGFuZGxlc193aXRoX2FyZ3Mobm9kZTMsICJsaXN0IiwgIiNsaXN0LWNlbGxzIiwgMiwgJm5vZGUyLCAmYXJncyk7CisgKi8KK2ludCBvZl9wYXJzZV9waGFuZGxlc193aXRoX2FyZ3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqbGlzdF9uYW1lLAorCQkJCWNvbnN0IGNoYXIgKmNlbGxzX25hbWUsIGludCBpbmRleCwKKwkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKipvdXRfbm9kZSwKKwkJCQljb25zdCB2b2lkICoqb3V0X2FyZ3MpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJY29uc3QgdTMyICpsaXN0OworCWNvbnN0IHUzMiAqbGlzdF9lbmQ7CisJaW50IHNpemU7CisJaW50IGN1cl9pbmRleCA9IDA7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gTlVMTDsKKwljb25zdCB2b2lkICphcmdzOworCisJbGlzdCA9IG9mX2dldF9wcm9wZXJ0eShucCwgbGlzdF9uYW1lLCAmc2l6ZSk7CisJaWYgKCFsaXN0KSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyMDsKKwl9CisJbGlzdF9lbmQgPSBsaXN0ICsgc2l6ZSAvIHNpemVvZigqbGlzdCk7CisKKwl3aGlsZSAobGlzdCA8IGxpc3RfZW5kKSB7CisJCWNvbnN0IHUzMiAqY2VsbHM7CisJCWNvbnN0IHBoYW5kbGUgKnBoYW5kbGU7CisKKwkJcGhhbmRsZSA9IGxpc3Q7CisJCWFyZ3MgPSBsaXN0ICsgMTsKKworCQkvKiBvbmUgY2VsbCBob2xlIGluIHRoZSBsaXN0ID0gPD47ICovCisJCWlmICghKnBoYW5kbGUpIHsKKwkJCWxpc3QrKzsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCisJCW5vZGUgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGhhbmRsZSk7CisJCWlmICghbm9kZSkgeworCQkJcHJfZGVidWcoIiVzOiBjb3VsZCBub3QgZmluZCBwaGFuZGxlXG4iLAorCQkJCSBucC0+ZnVsbF9uYW1lKTsKKwkJCWdvdG8gZXJyMDsKKwkJfQorCisJCWNlbGxzID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsIGNlbGxzX25hbWUsICZzaXplKTsKKwkJaWYgKCFjZWxscyB8fCBzaXplICE9IHNpemVvZigqY2VsbHMpKSB7CisJCQlwcl9kZWJ1ZygiJXM6IGNvdWxkIG5vdCBnZXQgJXMgZm9yICVzXG4iLAorCQkJCSBucC0+ZnVsbF9uYW1lLCBjZWxsc19uYW1lLCBub2RlLT5mdWxsX25hbWUpOworCQkJZ290byBlcnIxOworCQl9CisKKwkJLyogTmV4dCBwaGFuZGxlIGlzIGF0IG9mZnNldCBvZiBvbmUgcGhhbmRsZSBjZWxsICsgI2NlbGxzICovCisJCWxpc3QgKz0gMSArICpjZWxsczsKKwkJaWYgKGxpc3QgPiBsaXN0X2VuZCkgeworCQkJcHJfZGVidWcoIiVzOiBpbnN1ZmZpY2llbnQgYXJndW1lbnRzIGxlbmd0aFxuIiwKKwkJCQkgbnAtPmZ1bGxfbmFtZSk7CisJCQlnb3RvIGVycjE7CisJCX0KK25leHQ6CisJCWlmIChjdXJfaW5kZXggPT0gaW5kZXgpCisJCQlicmVhazsKKworCQlvZl9ub2RlX3B1dChub2RlKTsKKwkJbm9kZSA9IE5VTEw7CisJCWN1cl9pbmRleCsrOworCX0KKworCWlmICghbm9kZSkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycjA7CisJfQorCisJKm91dF9ub2RlID0gbm9kZTsKKwkqb3V0X2FyZ3MgPSBhcmdzOworCisJcmV0dXJuIDA7CitlcnIxOgorCW9mX25vZGVfcHV0KG5vZGUpOworZXJyMDoKKwlwcl9kZWJ1ZygiJXMgZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChvZl9wYXJzZV9waGFuZGxlc193aXRoX2FyZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9ncGlvLmMgYi9kcml2ZXJzL29mL2dwaW8uYwppbmRleCAxYzljYWI4Li43Y2Q3MzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2dwaW8uYworKysgYi9kcml2ZXJzL29mL2dwaW8uYwpAQCAtMjgsNzggKzI4LDM1IEBACiAgKi8KIGludCBvZl9nZXRfZ3BpbyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBpbnQgaW5kZXgpCiB7Ci0JaW50IHJldCA9IC1FSU5WQUw7CisJaW50IHJldDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmdjOwogCXN0cnVjdCBvZl9ncGlvX2NoaXAgKm9mX2djID0gTlVMTDsKIAlpbnQgc2l6ZTsKLQljb25zdCB1MzIgKmdwaW9zOwotCXUzMiBucl9jZWxsczsKLQlpbnQgaTsKIAljb25zdCB2b2lkICpncGlvX3NwZWM7CiAJY29uc3QgdTMyICpncGlvX2NlbGxzOwotCWludCBncGlvX2luZGV4ID0gMDsKIAotCWdwaW9zID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZ3Bpb3MiLCAmc2l6ZSk7Ci0JaWYgKCFncGlvcykgewotCQlyZXQgPSAtRU5PRU5UOworCXJldCA9IG9mX3BhcnNlX3BoYW5kbGVzX3dpdGhfYXJncyhucCwgImdwaW9zIiwgIiNncGlvLWNlbGxzIiwgaW5kZXgsCisJCQkJCSAgJmdjLCAmZ3Bpb19zcGVjKTsKKwlpZiAocmV0KSB7CisJCXByX2RlYnVnKCIlczogY2FuJ3QgcGFyc2UgZ3Bpb3MgcHJvcGVydHlcbiIsIF9fZnVuY19fKTsKIAkJZ290byBlcnIwOwogCX0KLQlucl9jZWxscyA9IHNpemUgLyBzaXplb2YodTMyKTsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9jZWxsczsgZ3Bpb19pbmRleCsrKSB7Ci0JCWNvbnN0IHBoYW5kbGUgKmdwaW9fcGhhbmRsZTsKLQotCQlncGlvX3BoYW5kbGUgPSBncGlvcyArIGk7Ci0JCWdwaW9fc3BlYyA9IGdwaW9fcGhhbmRsZSArIDE7Ci0KLQkJLyogb25lIGNlbGwgaG9sZSBpbiB0aGUgZ3Bpb3MgPSA8PjsgKi8KLQkJaWYgKCEqZ3Bpb19waGFuZGxlKSB7Ci0JCQlpZiAoZ3Bpb19pbmRleCA9PSBpbmRleCkKLQkJCQlyZXR1cm4gLUVOT0VOVDsKLQkJCWkrKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJZ2MgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqZ3Bpb19waGFuZGxlKTsKLQkJaWYgKCFnYykgewotCQkJcHJfZGVidWcoIiVzOiBjb3VsZCBub3QgZmluZCBwaGFuZGxlIGZvciBncGlvc1xuIiwKLQkJCQkgbnAtPmZ1bGxfbmFtZSk7Ci0JCQlnb3RvIGVycjA7Ci0JCX0KLQotCQlvZl9nYyA9IGdjLT5kYXRhOwotCQlpZiAoIW9mX2djKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IGdwaW8gY29udHJvbGxlciAlcyBpc24ndCByZWdpc3RlcmVkXG4iLAotCQkJCSBucC0+ZnVsbF9uYW1lLCBnYy0+ZnVsbF9uYW1lKTsKLQkJCWdvdG8gZXJyMTsKLQkJfQotCi0JCWdwaW9fY2VsbHMgPSBvZl9nZXRfcHJvcGVydHkoZ2MsICIjZ3Bpby1jZWxscyIsICZzaXplKTsKLQkJaWYgKCFncGlvX2NlbGxzIHx8IHNpemUgIT0gc2l6ZW9mKCpncGlvX2NlbGxzKSB8fAotCQkJCSpncGlvX2NlbGxzICE9IG9mX2djLT5ncGlvX2NlbGxzKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IHdyb25nICNncGlvLWNlbGxzIGZvciAlc1xuIiwKLQkJCQkgbnAtPmZ1bGxfbmFtZSwgZ2MtPmZ1bGxfbmFtZSk7Ci0JCQlnb3RvIGVycjE7Ci0JCX0KLQotCQkvKiBOZXh0IHBoYW5kbGUgaXMgYXQgcGhhbmRsZSBjZWxscyArICNncGlvLWNlbGxzICovCi0JCWkgKz0gc2l6ZW9mKCpncGlvX3BoYW5kbGUpIC8gc2l6ZW9mKHUzMikgKyAqZ3Bpb19jZWxsczsKLQkJaWYgKGkgPj0gbnJfY2VsbHMgKyAxKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IGluc3VmZmljaWVudCBncGlvLXNwZWMgbGVuZ3RoXG4iLAotCQkJCSBucC0+ZnVsbF9uYW1lKTsKLQkJCWdvdG8gZXJyMTsKLQkJfQotCi0JCWlmIChncGlvX2luZGV4ID09IGluZGV4KQotCQkJYnJlYWs7Ci0KLQkJb2ZfZ2MgPSBOVUxMOwotCQlvZl9ub2RlX3B1dChnYyk7Ci0JfQotCisJb2ZfZ2MgPSBnYy0+ZGF0YTsKIAlpZiAoIW9mX2djKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXJyMDsKKwkJcHJfZGVidWcoIiVzOiBncGlvIGNvbnRyb2xsZXIgJXMgaXNuJ3QgcmVnaXN0ZXJlZFxuIiwKKwkJCSBucC0+ZnVsbF9uYW1lLCBnYy0+ZnVsbF9uYW1lKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnIxOworCX0KKworCWdwaW9fY2VsbHMgPSBvZl9nZXRfcHJvcGVydHkoZ2MsICIjZ3Bpby1jZWxscyIsICZzaXplKTsKKwlpZiAoIWdwaW9fY2VsbHMgfHwgc2l6ZSAhPSBzaXplb2YoKmdwaW9fY2VsbHMpIHx8CisJCQkqZ3Bpb19jZWxscyAhPSBvZl9nYy0+Z3Bpb19jZWxscykgeworCQlwcl9kZWJ1ZygiJXM6IHdyb25nICNncGlvLWNlbGxzIGZvciAlc1xuIiwKKwkJCSBucC0+ZnVsbF9uYW1lLCBnYy0+ZnVsbF9uYW1lKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnIxOwogCX0KIAogCXJldCA9IG9mX2djLT54bGF0ZShvZl9nYywgbnAsIGdwaW9fc3BlYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9kaW5vLmMgYi9kcml2ZXJzL3BhcmlzYy9kaW5vLmMKaW5kZXggZmQ1NjEyOC4uM2JjNTRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvZGluby5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYwpAQCAtMjk4LDcgKzI5OCw4IEBACiAKIHN0YXRpYyB2b2lkIGRpbm9fZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgZGlub19kZXZpY2UgKmRpbm9fZGV2ID0gaXJxX2Rlc2NbaXJxXS5jaGlwX2RhdGE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlzdHJ1Y3QgZGlub19kZXZpY2UgKmRpbm9fZGV2ID0gZGVzYy0+Y2hpcF9kYXRhOwogCWludCBsb2NhbF9pcnEgPSBnc2NfZmluZF9sb2NhbF9pcnEoaXJxLCBkaW5vX2Rldi0+Z2xvYmFsX2lycSwgRElOT19MT0NBTF9JUlFTKTsKIAogCURCRyhLRVJOX1dBUk5JTkcgIiVzKDB4JXAsICVkKVxuIiwgX19mdW5jX18sIGRpbm9fZGV2LCBpcnEpOwpAQCAtMzEwLDcgKzMxMSw4IEBACiAKIHN0YXRpYyB2b2lkIGRpbm9fZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBkaW5vX2RldmljZSAqZGlub19kZXYgPSBpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCXN0cnVjdCBkaW5vX2RldmljZSAqZGlub19kZXYgPSBkZXNjLT5jaGlwX2RhdGE7CiAJaW50IGxvY2FsX2lycSA9IGdzY19maW5kX2xvY2FsX2lycShpcnEsIGRpbm9fZGV2LT5nbG9iYWxfaXJxLCBESU5PX0xPQ0FMX0lSUVMpOwogCXUzMiB0bXA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYyBiL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYwppbmRleCA3NzFjZWY1Li43ODkxZGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9laXNhLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvZWlzYS5jCkBAIC0zNDYsMTAgKzM0NiwxMCBAQAogCX0KIAkKIAkvKiBSZXNlcnZlIElSUTIgKi8KLQlpcnFfZGVzY1syXS5hY3Rpb24gPSAmaXJxMl9hY3Rpb247CisJaXJxX3RvX2Rlc2MoMiktPmFjdGlvbiA9ICZpcnEyX2FjdGlvbjsKIAkKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlpcnFfZGVzY1tpXS5jaGlwID0gJmVpc2FfaW50ZXJydXB0X3R5cGU7CisJCWlycV90b19kZXNjKGkpLT5jaGlwID0gJmVpc2FfaW50ZXJydXB0X3R5cGU7CiAJfQogCQogCUVJU0FfYnVzID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2dzYy5jIGIvZHJpdmVycy9wYXJpc2MvZ3NjLmMKaW5kZXggZjdkMDg4Yi4uZTc2ZGI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvZ3NjLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvZ3NjLmMKQEAgLTEwOCw3ICsxMDgsOCBAQAogCiBzdGF0aWMgdm9pZCBnc2NfYXNpY19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBnc2NfYXNpYyAqaXJxX2RldiA9IGlycV9kZXNjW2lycV0uY2hpcF9kYXRhOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3RydWN0IGdzY19hc2ljICppcnFfZGV2ID0gZGVzYy0+Y2hpcF9kYXRhOwogCWludCBsb2NhbF9pcnEgPSBnc2NfZmluZF9sb2NhbF9pcnEoaXJxLCBpcnFfZGV2LT5nbG9iYWxfaXJxLCAzMik7CiAJdTMyIGltcjsKIApAQCAtMTIzLDcgKzEyNCw4IEBACiAKIHN0YXRpYyB2b2lkIGdzY19hc2ljX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgZ3NjX2FzaWMgKmlycV9kZXYgPSBpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCXN0cnVjdCBnc2NfYXNpYyAqaXJxX2RldiA9IGRlc2MtPmNoaXBfZGF0YTsKIAlpbnQgbG9jYWxfaXJxID0gZ3NjX2ZpbmRfbG9jYWxfaXJxKGlycSwgaXJxX2Rldi0+Z2xvYmFsX2lycSwgMzIpOwogCXUzMiBpbXI7CiAKQEAgLTE1OSwxMiArMTYxLDE0IEBACiBpbnQgZ3NjX2Fzc2lnbl9pcnEoc3RydWN0IGh3X2ludGVycnVwdF90eXBlICp0eXBlLCB2b2lkICpkYXRhKQogewogCXN0YXRpYyBpbnQgaXJxID0gR1NDX0lSUV9CQVNFOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAogCWlmIChpcnEgPiBHU0NfSVJRX01BWCkKIAkJcmV0dXJuIE5PX0lSUTsKIAotCWlycV9kZXNjW2lycV0uY2hpcCA9IHR5cGU7Ci0JaXJxX2Rlc2NbaXJxXS5jaGlwX2RhdGEgPSBkYXRhOworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWRlc2MtPmNoaXAgPSB0eXBlOworCWRlc2MtPmNoaXBfZGF0YSA9IGRhdGE7CiAJcmV0dXJuIGlycSsrOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMgYi9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMKaW5kZXggNmZiM2Y3OS4uN2JlZmZjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYwpAQCAtNjE5LDcgKzYxOSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdmVjdG9yX2luZm8gKmlvc2FwaWNfZ2V0X3ZlY3Rvcih1bnNpZ25lZCBpbnQgaXJxKQogewotCXJldHVybiBpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJcmV0dXJuIGRlc2MtPmNoaXBfZGF0YTsKIH0KIAogc3RhdGljIHZvaWQgaW9zYXBpY19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jIGIvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jCmluZGV4IDFlOGQyZDEuLjFlOTNjODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL3N1cGVyaW8uYworKysgYi9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMKQEAgLTM2Myw3ICszNjMsOSBAQAogI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlpcnFfZGVzY1tpXS5jaGlwID0gJnN1cGVyaW9faW50ZXJydXB0X3R5cGU7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGkpOworCisJCWRlc2MtPmNoaXAgPSAmc3VwZXJpb19pbnRlcnJ1cHRfdHlwZTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L0NoYW5nZUxvZyBiL2RyaXZlcnMvcGFycG9ydC9DaGFuZ2VMb2cKaW5kZXggZGI3MTdjMS4uODU2NWJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L0NoYW5nZUxvZworKysgYi9kcml2ZXJzL3BhcnBvcnQvQ2hhbmdlTG9nCkBAIC0zMTEsNyArMzExLDcgQEAKIAkqIGllZWUxMjg0X29wcy5jIChwYXJwb3J0X2llZWUxMjg0X3JlYWRfbmliYmxlKTogUmVzZXQgbkF1dG9GZAogCW9uIHRpbWVvdXQuICBNYXRjaGVzIDIuMi54IGJlaGF2aW91ci4KIAotMjAwMS0wMy0wMiAgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorMjAwMS0wMy0wMiAgQW5kcmV3IE1vcnRvbgogCiAJKiBwYXJwb3J0X3BjLmMgKHJlZ2lzdGVyZWRfcGFycG9ydCk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCiAJKHBhcnBvcnRfcGNfZmluZF9wb3J0cyk6IFNldCBpdCB3aGVuIHdlIHJlZ2lzdGVyIFBDSSBkcml2ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvaWVlZTEyODQuYyBiL2RyaXZlcnMvcGFycG9ydC9pZWVlMTI4NC5jCmluZGV4IGU5NzA1OTQuLmFjMmE4MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9pZWVlMTI4NC5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9pZWVlMTI4NC5jCkBAIC0xLDQgKzEsNCBAQAotLyogJElkOiBwYXJwb3J0X2llZWUxMjg0LmMsdiAxLjQgMTk5Ny8xMC8xOSAyMTozNzoyMSBwaGlsaXAgRXhwICQKKy8qCiAgKiBJRUVFLTEyODQgaW1wbGVtZW50YXRpb24gZm9yIHBhcnBvcnQuCiAgKgogICogQXV0aG9yczogUGhpbCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2NzLmMgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9jcy5jCmluZGV4IDAwZTFkOTYuLmIxODk5ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2NzLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfY3MuYwpAQCAtMTQ5LDUyICsxNDksNDQgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAorc3RhdGljIGludCBwYXJwb3J0X2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJdW5zaWduZWQgaW50IHZjYywKKwkJCQl2b2lkICpwcml2X2RhdGEpCit7CisJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CisJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87CisJCWlmIChlcHBfbW9kZSkKKwkJCXBfZGV2LT5jb25mLkNvbmZpZ0luZGV4IHw9IEZPUkNFX0VQUF9NT0RFOworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlpZiAoaW8tPm53aW4gPT0gMikgeworCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJfQorCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pICE9IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOworfQorCiBzdGF0aWMgaW50IHBhcnBvcnRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHBhcnBvcnRfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIHVfc2hvcnQgYnVmWzEyOF07Ci0gICAgY2lzcGFyc2VfdCBwYXJzZTsKLSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmcGFyc2UuY2Z0YWJsZV9lbnRyeTsKLSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKICAgICBzdHJ1Y3QgcGFycG9ydCAqcDsKICAgICBpbnQgbGFzdF9yZXQsIGxhc3RfZm47Ci0gICAgCi0gICAgREVCVUcoMCwgInBhcnBvcnRfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKLSAgICAKLSAgICB0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0gICAgd2hpbGUgKDEpIHsKLQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAotCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDApCi0JICAgIGdvdG8gbmV4dF9lbnRyeTsKIAotCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQuaW8ubndpbiA+IDApKSB7Ci0JICAgIGNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKLQkgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0JICAgIGlmIChlcHBfbW9kZSkKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCB8PSBGT1JDRV9FUFBfTU9ERTsKLQkgICAgbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKLQkgICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkgICAgaWYgKGlvLT5ud2luID09IDIpIHsKLQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKLQkgICAgfQotCSAgICBpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQotCQlnb3RvIG5leHRfZW50cnk7Ci0JICAgIC8qIElmIHdlJ3ZlIGdvdCB0aGlzIGZhciwgd2UncmUgZG9uZSAqLwotCSAgICBicmVhazsKLQl9Ci0JCi0gICAgbmV4dF9lbnRyeToKLQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpIGRmbHQgPSAqY2ZnOwotCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworICAgIERFQlVHKDAsICJwYXJwb3J0X2NvbmZpZygweCVwKVxuIiwgbGluayk7CisKKyAgICBsYXN0X3JldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBwYXJwb3J0X2NvbmZpZ19jaGVjaywgTlVMTCk7CisgICAgaWYgKGxhc3RfcmV0KSB7CisJICAgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgbGFzdF9yZXQpOworCSAgICBnb3RvIGZhaWxlZDsKICAgICB9Ci0gICAgCisKICAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwogICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wcm9iZS5jIGIvZHJpdmVycy9wYXJwb3J0L3Byb2JlLmMKaW5kZXggY2Q1NjViYi4uMGY2NTUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3Byb2JlLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3Byb2JlLmMKQEAgLTEsNCArMSw0IEBACi0vKiAkSWQ6IHBhcnBvcnRfcHJvYmUuYyx2IDEuMSAxOTk5LzA3LzAzIDA4OjU2OjE3IGRhdmVtIEV4cCAkCisvKgogICogUGFyYWxsZWwgcG9ydCBkZXZpY2UgcHJvYmluZyBjb2RlCiAgKgogICogQXV0aG9yczogICAgQ2Fyc3RlbiBHcm9zcywgY2Fyc3RlbkBzb2wud29obmhlaW0udW5pLXVsbS5kZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3NoYXJlLmMgYi9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYwppbmRleCBhOGE2MmJiLi4wZWJjYTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYwpAQCAtMSw0ICsxLDQgQEAKLS8qICRJZDogcGFycG9ydF9zaGFyZS5jLHYgMS4xNSAxOTk4LzAxLzExIDEyOjA2OjE3IHBoaWxpcCBFeHAgJAorLyoKICAqIFBhcmFsbGVsLXBvcnQgcmVzb3VyY2UgbWFuYWdlciBjb2RlLgogICogCiAgKiBBdXRob3JzOiBEYXZpZCBDYW1wYmVsbCA8Y2FtcGJlbGxAdGlyaWFuLmNoZS5jdXJ0aW4uZWR1LmF1PgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvZG1hci5jIGIvZHJpdmVycy9wY2kvZG1hci5jCmluZGV4IGJkMmMwMTYuLjhiMjljMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2RtYXIuYworKysgYi9kcml2ZXJzL3BjaS9kbWFyLmMKQEAgLTI4LDkgKzI4LDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3ZhLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgImlvdmEuaCIKLSNpbmNsdWRlICJpbnRlbC1pb21tdS5oIgogCiAjdW5kZWYgUFJFRklYCiAjZGVmaW5lIFBSRUZJWCAiRE1BUjoiCkBAIC0xOTMsNyArMTkzLDcgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9kbWFyX2hhcmR3YXJlX3VuaXQgKmRyaGQ7CiAJc3RhdGljIGludCBpbmNsdWRlX2FsbDsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJZHJoZCA9IChzdHJ1Y3QgYWNwaV9kbWFyX2hhcmR3YXJlX3VuaXQgKikgZG1hcnUtPmhkcjsKIApAQCAtMjEyLDcgKzIxMiw3IEBACiAJCWluY2x1ZGVfYWxsID0gMTsKIAl9CiAKLQlpZiAocmV0IHx8IChkbWFydS0+ZGV2aWNlc19jbnQgPT0gMCAmJiAhZG1hcnUtPmluY2x1ZGVfYWxsKSkgeworCWlmIChyZXQpIHsKIAkJbGlzdF9kZWwoJmRtYXJ1LT5saXN0KTsKIAkJa2ZyZWUoZG1hcnUpOwogCX0KQEAgLTI4OSw2ICsyODksMjQgQEAKIAl9CiB9CiAKKy8qKgorICogZG1hcl90YWJsZV9kZXRlY3QgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBETUFSIGRldmljZXMKKyAqLworc3RhdGljIGludCBfX2luaXQgZG1hcl90YWJsZV9kZXRlY3Qodm9pZCkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKKworCS8qIGlmIHdlIGNvdWxkIGZpbmQgRE1BUiB0YWJsZSwgdGhlbiB0aGVyZSBhcmUgRE1BUiBkZXZpY2VzICovCisJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfRE1BUiwgMCwKKwkJCQkoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKSZkbWFyX3RibCk7CisKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYgIWRtYXJfdGJsKSB7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HIFBSRUZJWCAiVW5hYmxlIHRvIG1hcCBETUFSXG4iKTsKKwkJc3RhdHVzID0gQUVfTk9UX0ZPVU5EOworCX0KKworCXJldHVybiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgPyAxIDogMCk7Cit9CiAKIC8qKgogICogcGFyc2VfZG1hcl90YWJsZSAtIHBhcnNlcyB0aGUgRE1BIHJlcG9ydGluZyB0YWJsZQpAQCAtMzAwLDYgKzMxOCwxMiBAQAogCXN0cnVjdCBhY3BpX2RtYXJfaGVhZGVyICplbnRyeV9oZWFkZXI7CiAJaW50IHJldCA9IDA7CiAKKwkvKgorCSAqIERvIGl0IGFnYWluLCBlYXJsaWVyIGRtYXJfdGJsIG1hcHBpbmcgY291bGQgYmUgbWFwcGVkIHdpdGgKKwkgKiBmaXhlZCBtYXAuCisJICovCisJZG1hcl90YWJsZV9kZXRlY3QoKTsKKwogCWRtYXIgPSAoc3RydWN0IGFjcGlfdGFibGVfZG1hciAqKWRtYXJfdGJsOwogCWlmICghZG1hcikKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0zNzMsMTAgKzM5NywxMCBAQAogCiBpbnQgX19pbml0IGRtYXJfZGV2X3Njb3BlX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQ7CisJc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkLCAqZHJoZF9uOwogCWludCByZXQgPSAtRU5PREVWOwogCi0JZm9yX2VhY2hfZHJoZF91bml0KGRyaGQpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHJoZCwgZHJoZF9uLCAmZG1hcl9kcmhkX3VuaXRzLCBsaXN0KSB7CiAJCXJldCA9IGRtYXJfcGFyc2VfZGV2KGRyaGQpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKQEAgLTM4NCw4ICs0MDgsOCBAQAogCiAjaWZkZWYgQ09ORklHX0RNQVIKIAl7Ci0JCXN0cnVjdCBkbWFyX3JtcnJfdW5pdCAqcm1ycjsKLQkJZm9yX2VhY2hfcm1ycl91bml0cyhybXJyKSB7CisJCXN0cnVjdCBkbWFyX3JtcnJfdW5pdCAqcm1yciwgKnJtcnJfbjsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtcnIsIHJtcnJfbiwgJmRtYXJfcm1ycl91bml0cywgbGlzdCkgewogCQkJcmV0ID0gcm1ycl9wYXJzZV9kZXYocm1ycik7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CkBAIC00MzAsMzAgKzQ1NCwxMSBAQAogCXJldHVybiAwOwogfQogCi0vKioKLSAqIGVhcmx5X2RtYXJfZGV0ZWN0IC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgRE1BUiBkZXZpY2VzCi0gKi8KLWludCBfX2luaXQgZWFybHlfZG1hcl9kZXRlY3Qodm9pZCkKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQotCS8qIGlmIHdlIGNvdWxkIGZpbmQgRE1BUiB0YWJsZSwgdGhlbiB0aGVyZSBhcmUgRE1BUiBkZXZpY2VzICovCi0Jc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfRE1BUiwgMCwKLQkJCQkoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqKSZkbWFyX3RibCk7Ci0KLQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYgIWRtYXJfdGJsKSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HIFBSRUZJWCAiVW5hYmxlIHRvIG1hcCBETUFSXG4iKTsKLQkJc3RhdHVzID0gQUVfTk9UX0ZPVU5EOwotCX0KLQotCXJldHVybiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgPyAxIDogMCk7Ci19Ci0KIHZvaWQgX19pbml0IGRldGVjdF9pbnRlbF9pb21tdSh2b2lkKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBlYXJseV9kbWFyX2RldGVjdCgpOworCXJldCA9IGRtYXJfdGFibGVfZGV0ZWN0KCk7CiAKICNpZmRlZiBDT05GSUdfRE1BUgogCXsKQEAgLTQ3OSwxNCArNDg0LDE2IEBACiAJCQkgICAgICAgIiB4MmFwaWMgc3VwcG9ydFxuIik7CiAKIAkJCWRtYXJfZGlzYWJsZWQgPSAxOwotCQkJcmV0dXJuOworCQkJZ290byBlbmQ7CiAJCX0KIAogCQlpZiAocmV0ICYmICFub19pb21tdSAmJiAhaW9tbXVfZGV0ZWN0ZWQgJiYgIXN3aW90bGIgJiYKIAkJICAgICFkbWFyX2Rpc2FibGVkKQogCQkJaW9tbXVfZGV0ZWN0ZWQgPSAxOwogCX0KK2VuZDoKICNlbmRpZgorCWRtYXJfdGJsID0gTlVMTDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMKaW5kZXggODQ2N2QwMi4uN2QyNzYzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJaW91bm1hcCAoaW9fbWVtKTsKIAlkZWJ1ZyAoInJldHVybmVkIGViZGEgc2VnbWVudDogJXhcbiIsIGViZGFfc2VnKTsKIAkKLQlpb19tZW0gPSBpb3JlbWFwIChlYmRhX3NlZzw8NCwgNjUwMDApOworCWlvX21lbSA9IGlvcmVtYXAoZWJkYV9zZWc8PDQsIDEwMjQpOwogCWlmICghaW9fbWVtICkKIAkJcmV0dXJuIC1FTk9NRU07CiAJbmV4dF9vZmZzZXQgPSAweDE4MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3Nsb3QuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3Nsb3QuYwppbmRleCA5YjcxNGVhLi41MDg4NDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9zbG90LmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfc2xvdC5jCkBAIC0xNDcsOSArMTQ3LDUgQEAKIAlsaXN0X2FkZCgmc2xvdC0+cnBhcGhwX3Nsb3RfbGlzdCwgJnJwYXBocF9zbG90X2hlYWQpOwogCWluZm8oIlNsb3QgWyVzXSByZWdpc3RlcmVkXG4iLCBzbG90LT5uYW1lKTsKIAlyZXR1cm4gMDsKLQotc3lzZnNfZmFpbDoKLQlwY2lfaHBfZGVyZWdpc3RlcihwaHBfc2xvdCk7Ci0JcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaHRpcnEuYyBiL2RyaXZlcnMvcGNpL2h0aXJxLmMKaW5kZXggMjc5Yzk0MC4uYmY3ZDZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaHRpcnEuYworKysgYi9kcml2ZXJzL3BjaS9odGlycS5jCkBAIC0xMjYsNyArMTI2LDggQEAKIAljZmctPm1zZy5hZGRyZXNzX2hpID0gMHhmZmZmZmZmZjsKIAogCWlycSA9IGNyZWF0ZV9pcnEoKTsKLQlpZiAoaXJxIDwgMCkgeworCisJaWYgKGlycSA8PSAwKSB7CiAJCWtmcmVlKGNmZyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKaW5kZXggMzg5ZmRkNi4uOGI1MWUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlICJpb3ZhLmgiCi0jaW5jbHVkZSAiaW50ZWwtaW9tbXUuaCIKKyNpbmNsdWRlIDxsaW51eC9pb3ZhLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4gLyogZm9yY2VfaW9tbXUgaW4gdGhpcyBoZWFkZXIgaW4geDg2LTY0Ki8KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgpAQCAtMTU2LDcgKzE1Niw3IEBACiAJcmV0dXJuIGlvbW11X2ttZW1fY2FjaGVfYWxsb2MoaW9tbXVfZG9tYWluX2NhY2hlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfZG9tYWluX21lbSh2b2lkICp2YWRkcikKK3N0YXRpYyB2b2lkIGZyZWVfZG9tYWluX21lbSh2b2lkICp2YWRkcikKIHsKIAlrbWVtX2NhY2hlX2ZyZWUoaW9tbXVfZG9tYWluX2NhY2hlLCB2YWRkcik7CiB9CkBAIC01NjMsNyArNTYzLDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKIAotCS8qIGZsdXNoIGNvbnRleHQgZW50cnkgd2lsbCBpbXBsaWN0bHkgZmx1c2ggd3JpdGUgYnVmZmVyICovCisJLyogZmx1c2ggY29udGV4dCBlbnRyeSB3aWxsIGltcGxpY2l0bHkgZmx1c2ggd3JpdGUgYnVmZmVyICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY1Niw3ICs2NTYsNyBAQAogCWlmIChETUFfVExCX0lBSUcodmFsKSAhPSBETUFfVExCX0lJUkcodHlwZSkpCiAJCXByX2RlYnVnKCJJT01NVTogdGxiIGZsdXNoIHJlcXVlc3QgJUx4LCBhY3R1YWwgJUx4XG4iLAogCQkJRE1BX1RMQl9JSVJHKHR5cGUpLCBETUFfVExCX0lBSUcodmFsKSk7Ci0JLyogZmx1c2ggY29udGV4dCBlbnRyeSB3aWxsIGltcGxpY3RseSBmbHVzaCB3cml0ZSBidWZmZXIgKi8KKwkvKiBmbHVzaCBpb3RsYiBlbnRyeSB3aWxsIGltcGxpY2l0bHkgZmx1c2ggd3JpdGUgYnVmZmVyICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNDEsNyArMTM0MSw3IEBACiAgKiBmaW5kX2RvbWFpbgogICogTm90ZTogd2UgdXNlIHN0cnVjdCBwY2lfZGV2LT5kZXYuYXJjaGRhdGEuaW9tbXUgc3RvcmVzIHRoZSBpbmZvCiAgKi8KLXN0cnVjdCBkbWFyX2RvbWFpbiAqCitzdGF0aWMgc3RydWN0IGRtYXJfZG9tYWluICoKIGZpbmRfZG9tYWluKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2VfZG9tYWluX2luZm8gKmluZm87CkBAIC0yMzE4LDMgKzIzMTgsMTExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgaW50ZWxfaW9tbXVfZG9tYWluX2V4aXQoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4pCit7CisJdTY0IGVuZDsKKworCS8qIERvbWFpbiAwIGlzIHJlc2VydmVkLCBzbyBkb250IHByb2Nlc3MgaXQgKi8KKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuOworCisJZW5kID0gRE9NQUlOX01BWF9BRERSKGRvbWFpbi0+Z2F3KTsKKwllbmQgPSBlbmQgJiAoflBBR0VfTUFTS180Syk7CisKKwkvKiBjbGVhciBwdGVzICovCisJZG1hX3B0ZV9jbGVhcl9yYW5nZShkb21haW4sIDAsIGVuZCk7CisKKwkvKiBmcmVlIHBhZ2UgdGFibGVzICovCisJZG1hX3B0ZV9mcmVlX3BhZ2V0YWJsZShkb21haW4sIDAsIGVuZCk7CisKKwlpb21tdV9mcmVlX2RvbWFpbihkb21haW4pOworCWZyZWVfZG9tYWluX21lbShkb21haW4pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW50ZWxfaW9tbXVfZG9tYWluX2V4aXQpOworCitzdHJ1Y3QgZG1hcl9kb21haW4gKmludGVsX2lvbW11X2RvbWFpbl9hbGxvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQ7CisJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47CisJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKKworCWRyaGQgPSBkbWFyX2ZpbmRfbWF0Y2hlZF9kcmhkX3VuaXQocGRldik7CisJaWYgKCFkcmhkKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW50ZWxfaW9tbXVfZG9tYWluX2FsbG9jOiBkcmhkID09IE5VTExcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpb21tdSA9IGRyaGQtPmlvbW11OworCWlmICghaW9tbXUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiaW50ZWxfaW9tbXVfZG9tYWluX2FsbG9jOiBpb21tdSA9PSBOVUxMXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWRvbWFpbiA9IGlvbW11X2FsbG9jX2RvbWFpbihpb21tdSk7CisJaWYgKCFkb21haW4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiaW50ZWxfaW9tbXVfZG9tYWluX2FsbG9jOiBkb21haW4gPT0gTlVMTFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoZG9tYWluX2luaXQoZG9tYWluLCBERUZBVUxUX0RPTUFJTl9BRERSRVNTX1dJRFRIKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJpbnRlbF9pb21tdV9kb21haW5fYWxsb2M6IGRvbWFpbl9pbml0KCkgZmFpbGVkXG4iKTsKKwkJaW50ZWxfaW9tbXVfZG9tYWluX2V4aXQoZG9tYWluKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBkb21haW47Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbnRlbF9pb21tdV9kb21haW5fYWxsb2MpOworCitpbnQgaW50ZWxfaW9tbXVfY29udGV4dF9tYXBwaW5nKAorCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgcmM7CisJcmMgPSBkb21haW5fY29udGV4dF9tYXBwaW5nKGRvbWFpbiwgcGRldik7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW50ZWxfaW9tbXVfY29udGV4dF9tYXBwaW5nKTsKKworaW50IGludGVsX2lvbW11X3BhZ2VfbWFwcGluZygKKwlzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwgZG1hX2FkZHJfdCBpb3ZhLAorCXU2NCBocGEsIHNpemVfdCBzaXplLCBpbnQgcHJvdCkKK3sKKwlpbnQgcmM7CisJcmMgPSBkb21haW5fcGFnZV9tYXBwaW5nKGRvbWFpbiwgaW92YSwgaHBhLCBzaXplLCBwcm90KTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbnRlbF9pb21tdV9wYWdlX21hcHBpbmcpOworCit2b2lkIGludGVsX2lvbW11X2RldGFjaF9kZXYoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sIHU4IGJ1cywgdTggZGV2Zm4pCit7CisJZGV0YWNoX2RvbWFpbl9mb3JfZGV2KGRvbWFpbiwgYnVzLCBkZXZmbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbnRlbF9pb21tdV9kZXRhY2hfZGV2KTsKKworc3RydWN0IGRtYXJfZG9tYWluICoKK2ludGVsX2lvbW11X2ZpbmRfZG9tYWluKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXJldHVybiBmaW5kX2RvbWFpbihwZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGludGVsX2lvbW11X2ZpbmRfZG9tYWluKTsKKworaW50IGludGVsX2lvbW11X2ZvdW5kKHZvaWQpCit7CisJcmV0dXJuIGdfbnVtX29mX2lvbW11czsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGludGVsX2lvbW11X2ZvdW5kKTsKKwordTY0IGludGVsX2lvbW11X2lvdmFfdG9fcGZuKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCB1NjQgaW92YSkKK3sKKwlzdHJ1Y3QgZG1hX3B0ZSAqcHRlOworCXU2NCBwZm47CisKKwlwZm4gPSAwOworCXB0ZSA9IGFkZHJfdG9fZG1hX3B0ZShkb21haW4sIGlvdmEpOworCisJaWYgKHB0ZSkKKwkJcGZuID0gZG1hX3B0ZV9hZGRyKCpwdGUpOworCisJcmV0dXJuIHBmbiA+PiBQQUdFX1NISUZUXzRLOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW50ZWxfaW9tbXVfaW92YV90b19wZm4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuaCBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNDJjMDEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCBJbnRlbCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQotICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KLSAqIEF1dGhvcjogQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgotICogQXV0aG9yOiBBbmlsIFMgS2VzaGF2YW11cnRoeSA8YW5pbC5zLmtlc2hhdmFtdXJ0aHlAaW50ZWwuY29tPgotICovCi0KLSNpZm5kZWYgX0lOVEVMX0lPTU1VX0hfCi0jZGVmaW5lIF9JTlRFTF9JT01NVV9IXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9tc2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlICJpb3ZhLmgiCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgImRtYV9yZW1hcHBpbmcuaCIKLQotLyoKLSAqIEludGVsIElPTU1VIHJlZ2lzdGVyIHNwZWNpZmljYXRpb24gcGVyIHZlcnNpb24gMS4wIHB1YmxpYyBzcGVjLgotICovCi0KLSNkZWZpbmUJRE1BUl9WRVJfUkVHCTB4MAkvKiBBcmNoIHZlcnNpb24gc3VwcG9ydGVkIGJ5IHRoaXMgSU9NTVUgKi8KLSNkZWZpbmUJRE1BUl9DQVBfUkVHCTB4OAkvKiBIYXJkd2FyZSBzdXBwb3J0ZWQgY2FwYWJpbGl0aWVzICovCi0jZGVmaW5lCURNQVJfRUNBUF9SRUcJMHgxMAkvKiBFeHRlbmRlZCBjYXBhYmlsaXRpZXMgc3VwcG9ydGVkICovCi0jZGVmaW5lCURNQVJfR0NNRF9SRUcJMHgxOAkvKiBHbG9iYWwgY29tbWFuZCByZWdpc3RlciAqLwotI2RlZmluZQlETUFSX0dTVFNfUkVHCTB4MWMJLyogR2xvYmFsIHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZQlETUFSX1JUQUREUl9SRUcJMHgyMAkvKiBSb290IGVudHJ5IHRhYmxlICovCi0jZGVmaW5lCURNQVJfQ0NNRF9SRUcJMHgyOAkvKiBDb250ZXh0IGNvbW1hbmQgcmVnICovCi0jZGVmaW5lCURNQVJfRlNUU19SRUcJMHgzNAkvKiBGYXVsdCBTdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BUl9GRUNUTF9SRUcJMHgzOAkvKiBGYXVsdCBjb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lCURNQVJfRkVEQVRBX1JFRwkweDNjCS8qIEZhdWx0IGV2ZW50IGludGVycnVwdCBkYXRhIHJlZ2lzdGVyICovCi0jZGVmaW5lCURNQVJfRkVBRERSX1JFRwkweDQwCS8qIEZhdWx0IGV2ZW50IGludGVycnVwdCBhZGRyIHJlZ2lzdGVyICovCi0jZGVmaW5lCURNQVJfRkVVQUREUl9SRUcgMHg0NAkvKiBVcHBlciBhZGRyZXNzIHJlZ2lzdGVyICovCi0jZGVmaW5lCURNQVJfQUZMT0dfUkVHCTB4NTgJLyogQWR2YW5jZWQgRmF1bHQgY29udHJvbCAqLwotI2RlZmluZQlETUFSX1BNRU5fUkVHCTB4NjQJLyogRW5hYmxlIFByb3RlY3RlZCBNZW1vcnkgUmVnaW9uICovCi0jZGVmaW5lCURNQVJfUExNQkFTRV9SRUcgMHg2OAkvKiBQTVJSIExvdyBhZGRyICovCi0jZGVmaW5lCURNQVJfUExNTElNSVRfUkVHIDB4NmMJLyogUE1SUiBsb3cgbGltaXQgKi8KLSNkZWZpbmUJRE1BUl9QSE1CQVNFX1JFRyAweDcwCS8qIHBtcnIgaGlnaCBiYXNlIGFkZHIgKi8KLSNkZWZpbmUJRE1BUl9QSE1MSU1JVF9SRUcgMHg3OAkvKiBwbXJyIGhpZ2ggbGltaXQgKi8KLSNkZWZpbmUgRE1BUl9JUUhfUkVHCTB4ODAJLyogSW52YWxpZGF0aW9uIHF1ZXVlIGhlYWQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRE1BUl9JUVRfUkVHCTB4ODgJLyogSW52YWxpZGF0aW9uIHF1ZXVlIHRhaWwgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRE1BUl9JUUFfUkVHCTB4OTAJLyogSW52YWxpZGF0aW9uIHF1ZXVlIGFkZHIgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgRE1BUl9JQ1NfUkVHCTB4OTgJLyogSW52YWxpZGF0aW9uIGNvbXBsZXRlIHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSBETUFSX0lSVEFfUkVHCTB4YjggICAgLyogSW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBhZGRyIHJlZ2lzdGVyICovCi0KLSNkZWZpbmUgT0ZGU0VUX1NUUklERQkJKDkpCi0vKgotI2RlZmluZSBkbWFyX3JlYWRsKGRtYXIsIHJlZykgcmVhZGwoZG1hciArIHJlZykKLSNkZWZpbmUgZG1hcl9yZWFkcShkbWFyLCByZWcpICh7IFwKLQkJdTMyIGxvLCBoaTsgXAotCQlsbyA9IHJlYWRsKGRtYXIgKyByZWcpOyBcCi0JCWhpID0gcmVhZGwoZG1hciArIHJlZyArIDQpOyBcCi0JCSgoKHU2NCkgaGkpIDw8IDMyKSArIGxvOyB9KQotKi8KLXN0YXRpYyBpbmxpbmUgdTY0IGRtYXJfcmVhZHEodm9pZCBfX2lvbWVtICphZGRyKQotewotCXUzMiBsbywgaGk7Ci0JbG8gPSByZWFkbChhZGRyKTsKLQloaSA9IHJlYWRsKGFkZHIgKyA0KTsKLQlyZXR1cm4gKCgodTY0KSBoaSkgPDwgMzIpICsgbG87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFyX3dyaXRlcSh2b2lkIF9faW9tZW0gKmFkZHIsIHU2NCB2YWwpCi17Ci0Jd3JpdGVsKCh1MzIpdmFsLCBhZGRyKTsKLQl3cml0ZWwoKHUzMikodmFsID4+IDMyKSwgYWRkciArIDQpOwotfQotCi0jZGVmaW5lIERNQVJfVkVSX01BSk9SKHYpCQkoKCh2KSAmIDB4ZjApID4+IDQpCi0jZGVmaW5lIERNQVJfVkVSX01JTk9SKHYpCQkoKHYpICYgMHgwZikKLQotLyoKLSAqIERlY29kaW5nIENhcGFiaWxpdHkgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBjYXBfcmVhZF9kcmFpbihjKQkoKChjKSA+PiA1NSkgJiAxKQotI2RlZmluZSBjYXBfd3JpdGVfZHJhaW4oYykJKCgoYykgPj4gNTQpICYgMSkKLSNkZWZpbmUgY2FwX21heF9hbWFza192YWwoYykJKCgoYykgPj4gNDgpICYgMHgzZikKLSNkZWZpbmUgY2FwX251bV9mYXVsdF9yZWdzKGMpCSgoKChjKSA+PiA0MCkgJiAweGZmKSArIDEpCi0jZGVmaW5lIGNhcF9wZ3NlbF9pbnYoYykJKCgoYykgPj4gMzkpICYgMSkKLQotI2RlZmluZSBjYXBfc3VwZXJfcGFnZV92YWwoYykJKCgoYykgPj4gMzQpICYgMHhmKQotI2RlZmluZSBjYXBfc3VwZXJfb2Zmc2V0KGMpCSgoKGZpbmRfZmlyc3RfYml0KCZjYXBfc3VwZXJfcGFnZV92YWwoYyksIDQpKSBcCi0JCQkJCSogT0ZGU0VUX1NUUklERSkgKyAyMSkKLQotI2RlZmluZSBjYXBfZmF1bHRfcmVnX29mZnNldChjKQkoKCgoYykgPj4gMjQpICYgMHgzZmYpICogMTYpCi0jZGVmaW5lIGNhcF9tYXhfZmF1bHRfcmVnX29mZnNldChjKSBcCi0JKGNhcF9mYXVsdF9yZWdfb2Zmc2V0KGMpICsgY2FwX251bV9mYXVsdF9yZWdzKGMpICogMTYpCi0KLSNkZWZpbmUgY2FwX3pscihjKQkJKCgoYykgPj4gMjIpICYgMSkKLSNkZWZpbmUgY2FwX2lzb2NoKGMpCQkoKChjKSA+PiAyMykgJiAxKQotI2RlZmluZSBjYXBfbWdhdyhjKQkJKCgoKGMpID4+IDE2KSAmIDB4M2YpICsgMSkKLSNkZWZpbmUgY2FwX3NhZ2F3KGMpCQkoKChjKSA+PiA4KSAmIDB4MWYpCi0jZGVmaW5lIGNhcF9jYWNoaW5nX21vZGUoYykJKCgoYykgPj4gNykgJiAxKQotI2RlZmluZSBjYXBfcGhtcihjKQkJKCgoYykgPj4gNikgJiAxKQotI2RlZmluZSBjYXBfcGxtcihjKQkJKCgoYykgPj4gNSkgJiAxKQotI2RlZmluZSBjYXBfcndiZihjKQkJKCgoYykgPj4gNCkgJiAxKQotI2RlZmluZSBjYXBfYWZsKGMpCQkoKChjKSA+PiAzKSAmIDEpCi0jZGVmaW5lIGNhcF9uZG9tcyhjKQkJKCgodW5zaWduZWQgbG9uZykxKSA8PCAoNCArIDIgKiAoKGMpICYgMHg3KSkpCi0vKgotICogRXh0ZW5kZWQgQ2FwYWJpbGl0eSBSZWdpc3RlcgotICovCi0KLSNkZWZpbmUgZWNhcF9uaW90bGJfaXVuaXRzKGUpCSgoKChlKSA+PiAyNCkgJiAweGZmKSArIDEpCi0jZGVmaW5lIGVjYXBfaW90bGJfb2Zmc2V0KGUpIAkoKCgoZSkgPj4gOCkgJiAweDNmZikgKiAxNikKLSNkZWZpbmUgZWNhcF9tYXhfaW90bGJfb2Zmc2V0KGUpIFwKLQkoZWNhcF9pb3RsYl9vZmZzZXQoZSkgKyBlY2FwX25pb3RsYl9pdW5pdHMoZSkgKiAxNikKLSNkZWZpbmUgZWNhcF9jb2hlcmVudChlKQkoKGUpICYgMHgxKQotI2RlZmluZSBlY2FwX3FpcyhlKQkJKChlKSAmIDB4MikKLSNkZWZpbmUgZWNhcF9laW1fc3VwcG9ydChlKQkoKGUgPj4gNCkgJiAweDEpCi0jZGVmaW5lIGVjYXBfaXJfc3VwcG9ydChlKQkoKGUgPj4gMykgJiAweDEpCi0jZGVmaW5lIGVjYXBfbWF4X2hhbmRsZV9tYXNrKGUpICgoZSA+PiAyMCkgJiAweGYpCi0KLQotLyogSU9UTEJfUkVHICovCi0jZGVmaW5lIERNQV9UTEJfR0xPQkFMX0ZMVVNIICgoKHU2NCkxKSA8PCA2MCkKLSNkZWZpbmUgRE1BX1RMQl9EU0lfRkxVU0ggKCgodTY0KTIpIDw8IDYwKQotI2RlZmluZSBETUFfVExCX1BTSV9GTFVTSCAoKCh1NjQpMykgPDwgNjApCi0jZGVmaW5lIERNQV9UTEJfSUlSRyh0eXBlKSAoKHR5cGUgPj4gNjApICYgNykKLSNkZWZpbmUgRE1BX1RMQl9JQUlHKHZhbCkgKCgodmFsKSA+PiA1NykgJiA3KQotI2RlZmluZSBETUFfVExCX1JFQURfRFJBSU4gKCgodTY0KTEpIDw8IDQ5KQotI2RlZmluZSBETUFfVExCX1dSSVRFX0RSQUlOICgoKHU2NCkxKSA8PCA0OCkKLSNkZWZpbmUgRE1BX1RMQl9ESUQoaWQpCSgoKHU2NCkoKGlkKSAmIDB4ZmZmZikpIDw8IDMyKQotI2RlZmluZSBETUFfVExCX0lWVCAoKCh1NjQpMSkgPDwgNjMpCi0jZGVmaW5lIERNQV9UTEJfSUhfTk9OTEVBRiAoKCh1NjQpMSkgPDwgNikKLSNkZWZpbmUgRE1BX1RMQl9NQVhfU0laRSAoMHgzZikKLQotLyogSU5WQUxJRF9ERVNDICovCi0jZGVmaW5lIERNQV9JRF9UTEJfR0xPQkFMX0ZMVVNICSgoKHU2NCkxKSA8PCAzKQotI2RlZmluZSBETUFfSURfVExCX0RTSV9GTFVTSAkoKCh1NjQpMikgPDwgMykKLSNkZWZpbmUgRE1BX0lEX1RMQl9QU0lfRkxVU0gJKCgodTY0KTMpIDw8IDMpCi0jZGVmaW5lIERNQV9JRF9UTEJfUkVBRF9EUkFJTgkoKCh1NjQpMSkgPDwgNykKLSNkZWZpbmUgRE1BX0lEX1RMQl9XUklURV9EUkFJTgkoKCh1NjQpMSkgPDwgNikKLSNkZWZpbmUgRE1BX0lEX1RMQl9ESUQoaWQpCSgoKHU2NCkoKGlkICYgMHhmZmZmKSA8PCAxNikpKQotI2RlZmluZSBETUFfSURfVExCX0lIX05PTkxFQUYJKCgodTY0KTEpIDw8IDYpCi0jZGVmaW5lIERNQV9JRF9UTEJfQUREUihhZGRyKQkoYWRkcikKLSNkZWZpbmUgRE1BX0lEX1RMQl9BRERSX01BU0sobWFzaykJKG1hc2spCi0KLS8qIFBNRU5fUkVHICovCi0jZGVmaW5lIERNQV9QTUVOX0VQTSAoKCh1MzIpMSk8PDMxKQotI2RlZmluZSBETUFfUE1FTl9QUlMgKCgodTMyKTEpPDwwKQotCi0vKiBHQ01EX1JFRyAqLwotI2RlZmluZSBETUFfR0NNRF9URSAoKCh1MzIpMSkgPDwgMzEpCi0jZGVmaW5lIERNQV9HQ01EX1NSVFAgKCgodTMyKTEpIDw8IDMwKQotI2RlZmluZSBETUFfR0NNRF9TRkwgKCgodTMyKTEpIDw8IDI5KQotI2RlZmluZSBETUFfR0NNRF9FQUZMICgoKHUzMikxKSA8PCAyOCkKLSNkZWZpbmUgRE1BX0dDTURfV0JGICgoKHUzMikxKSA8PCAyNykKLSNkZWZpbmUgRE1BX0dDTURfUUlFICgoKHUzMikxKSA8PCAyNikKLSNkZWZpbmUgRE1BX0dDTURfU0lSVFAgKCgodTMyKTEpIDw8IDI0KQotI2RlZmluZSBETUFfR0NNRF9JUkUgKCgodTMyKSAxKSA8PCAyNSkKLQotLyogR1NUU19SRUcgKi8KLSNkZWZpbmUgRE1BX0dTVFNfVEVTICgoKHUzMikxKSA8PCAzMSkKLSNkZWZpbmUgRE1BX0dTVFNfUlRQUyAoKCh1MzIpMSkgPDwgMzApCi0jZGVmaW5lIERNQV9HU1RTX0ZMUyAoKCh1MzIpMSkgPDwgMjkpCi0jZGVmaW5lIERNQV9HU1RTX0FGTFMgKCgodTMyKTEpIDw8IDI4KQotI2RlZmluZSBETUFfR1NUU19XQkZTICgoKHUzMikxKSA8PCAyNykKLSNkZWZpbmUgRE1BX0dTVFNfUUlFUyAoKCh1MzIpMSkgPDwgMjYpCi0jZGVmaW5lIERNQV9HU1RTX0lSVFBTICgoKHUzMikxKSA8PCAyNCkKLSNkZWZpbmUgRE1BX0dTVFNfSVJFUyAoKCh1MzIpMSkgPDwgMjUpCi0KLS8qIENDTURfUkVHICovCi0jZGVmaW5lIERNQV9DQ01EX0lDQyAoKCh1NjQpMSkgPDwgNjMpCi0jZGVmaW5lIERNQV9DQ01EX0dMT0JBTF9JTlZMICgoKHU2NCkxKSA8PCA2MSkKLSNkZWZpbmUgRE1BX0NDTURfRE9NQUlOX0lOVkwgKCgodTY0KTIpIDw8IDYxKQotI2RlZmluZSBETUFfQ0NNRF9ERVZJQ0VfSU5WTCAoKCh1NjQpMykgPDwgNjEpCi0jZGVmaW5lIERNQV9DQ01EX0ZNKG0pICgoKHU2NCkoKG0pICYgMHgzKSkgPDwgMzIpCi0jZGVmaW5lIERNQV9DQ01EX01BU0tfTk9CSVQgMAotI2RlZmluZSBETUFfQ0NNRF9NQVNLXzFCSVQgMQotI2RlZmluZSBETUFfQ0NNRF9NQVNLXzJCSVQgMgotI2RlZmluZSBETUFfQ0NNRF9NQVNLXzNCSVQgMwotI2RlZmluZSBETUFfQ0NNRF9TSUQocykgKCgodTY0KSgocykgJiAweGZmZmYpKSA8PCAxNikKLSNkZWZpbmUgRE1BX0NDTURfRElEKGQpICgodTY0KSgoZCkgJiAweGZmZmYpKQotCi0vKiBGRUNUTF9SRUcgKi8KLSNkZWZpbmUgRE1BX0ZFQ1RMX0lNICgoKHUzMikxKSA8PCAzMSkKLQotLyogRlNUU19SRUcgKi8KLSNkZWZpbmUgRE1BX0ZTVFNfUFBGICgodTMyKTIpCi0jZGVmaW5lIERNQV9GU1RTX1BGTyAoKHUzMikxKQotI2RlZmluZSBkbWFfZnN0c19mYXVsdF9yZWNvcmRfaW5kZXgocykgKCgocykgPj4gOCkgJiAweGZmKQotCi0vKiBGUkNEX1JFRywgMzIgYml0cyBhY2Nlc3MgKi8KLSNkZWZpbmUgRE1BX0ZSQ0RfRiAoKCh1MzIpMSkgPDwgMzEpCi0jZGVmaW5lIGRtYV9mcmNkX3R5cGUoZCkgKChkID4+IDMwKSAmIDEpCi0jZGVmaW5lIGRtYV9mcmNkX2ZhdWx0X3JlYXNvbihjKSAoYyAmIDB4ZmYpCi0jZGVmaW5lIGRtYV9mcmNkX3NvdXJjZV9pZChjKSAoYyAmIDB4ZmZmZikKLSNkZWZpbmUgZG1hX2ZyY2RfcGFnZV9hZGRyKGQpIChkICYgKCgodTY0KS0xKSA8PCAxMikpIC8qIGxvdyA2NCBiaXQgKi8KLQotI2RlZmluZSBETUFSX09QRVJBVElPTl9USU1FT1VUICgoY3ljbGVzX3QpIHRzY19raHoqMTAqMTAwMCkgLyogMTBzZWMgKi8KLQotI2RlZmluZSBJT01NVV9XQUlUX09QKGlvbW11LCBvZmZzZXQsIG9wLCBjb25kLCBzdHMpIFwKLXtcCi0JY3ljbGVzX3Qgc3RhcnRfdGltZSA9IGdldF9jeWNsZXMoKTtcCi0Jd2hpbGUgKDEpIHtcCi0JCXN0cyA9IG9wIChpb21tdS0+cmVnICsgb2Zmc2V0KTtcCi0JCWlmIChjb25kKVwKLQkJCWJyZWFrO1wKLQkJaWYgKERNQVJfT1BFUkFUSU9OX1RJTUVPVVQgPCAoZ2V0X2N5Y2xlcygpIC0gc3RhcnRfdGltZSkpXAotCQkJcGFuaWMoIkRNQVIgaGFyZHdhcmUgaXMgbWFsZnVuY3Rpb25pbmdcbiIpO1wKLQkJY3B1X3JlbGF4KCk7XAotCX1cCi19Ci0KLSNkZWZpbmUgUUlfTEVOR1RICTI1NgkvKiBxdWV1ZSBsZW5ndGggKi8KLQotZW51bSB7Ci0JUUlfRlJFRSwKLQlRSV9JTl9VU0UsCi0JUUlfRE9ORQotfTsKLQotI2RlZmluZSBRSV9DQ19UWVBFCQkweDEKLSNkZWZpbmUgUUlfSU9UTEJfVFlQRQkJMHgyCi0jZGVmaW5lIFFJX0RJT1RMQl9UWVBFCQkweDMKLSNkZWZpbmUgUUlfSUVDX1RZUEUJCTB4NAotI2RlZmluZSBRSV9JV0RfVFlQRQkJMHg1Ci0KLSNkZWZpbmUgUUlfSUVDX1NFTEVDVElWRQkoKCh1NjQpMSkgPDwgNCkKLSNkZWZpbmUgUUlfSUVDX0lJREVYKGlkeCkJKCgodTY0KShpZHggJiAweGZmZmYpIDw8IDMyKSkKLSNkZWZpbmUgUUlfSUVDX0lNKG0pCQkoKCh1NjQpKG0gJiAweDFmKSA8PCAyNykpCi0KLSNkZWZpbmUgUUlfSVdEX1NUQVRVU19EQVRBKGQpCSgoKHU2NClkKSA8PCAzMikKLSNkZWZpbmUgUUlfSVdEX1NUQVRVU19XUklURQkoKCh1NjQpMSkgPDwgNSkKLQotc3RydWN0IHFpX2Rlc2MgewotCXU2NCBsb3csIGhpZ2g7Ci19OwotCi1zdHJ1Y3QgcV9pbnZhbCB7Ci0Jc3BpbmxvY2tfdCAgICAgIHFfbG9jazsKLQlzdHJ1Y3QgcWlfZGVzYyAgKmRlc2M7ICAgICAgICAgIC8qIGludmFsaWRhdGlvbiBxdWV1ZSAqLwotCWludCAgICAgICAgICAgICAqZGVzY19zdGF0dXM7ICAgLyogZGVzYyBzdGF0dXMgKi8KLQlpbnQgICAgICAgICAgICAgZnJlZV9oZWFkOyAgICAgIC8qIGZpcnN0IGZyZWUgZW50cnkgKi8KLQlpbnQgICAgICAgICAgICAgZnJlZV90YWlsOyAgICAgIC8qIGxhc3QgZnJlZSBlbnRyeSAqLwotCWludCAgICAgICAgICAgICBmcmVlX2NudDsKLX07Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotLyogMU1CIC0gbWF4aW11bSBwb3NzaWJsZSBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIHNpemUgKi8KLSNkZWZpbmUgSU5UUl9SRU1BUF9QQUdFX09SREVSCTgKLSNkZWZpbmUgSU5UUl9SRU1BUF9UQUJMRV9SRUdfU0laRQkweGYKLQotI2RlZmluZSBJTlRSX1JFTUFQX1RBQkxFX0VOVFJJRVMJNjU1MzYKLQotc3RydWN0IGlyX3RhYmxlIHsKLQlzdHJ1Y3QgaXJ0ZSAqYmFzZTsKLX07Ci0jZW5kaWYKLQotc3RydWN0IGludGVsX2lvbW11IHsKLQl2b2lkIF9faW9tZW0JKnJlZzsgLyogUG9pbnRlciB0byBoYXJkd2FyZSByZWdzLCB2aXJ0dWFsIGFkZHIgKi8KLQl1NjQJCWNhcDsKLQl1NjQJCWVjYXA7Ci0JaW50CQlzZWc7Ci0JdTMyCQlnY21kOyAvKiBIb2xkcyBURSwgRUFGTC4gRG9uJ3QgbmVlZCBTUlRQLCBTRkwsIFdCRiAqLwotCXNwaW5sb2NrX3QJcmVnaXN0ZXJfbG9jazsgLyogcHJvdGVjdCByZWdpc3RlciBoYW5kbGluZyAqLwotCWludAkJc2VxX2lkOwkvKiBzZXF1ZW5jZSBpZCBvZiB0aGUgaW9tbXUgKi8KLQotI2lmZGVmIENPTkZJR19ETUFSCi0JdW5zaWduZWQgbG9uZyAJKmRvbWFpbl9pZHM7IC8qIGJpdG1hcCBvZiBkb21haW5zICovCi0Jc3RydWN0IGRtYXJfZG9tYWluICoqZG9tYWluczsgLyogcHRyIHRvIGRvbWFpbnMgKi8KLQlzcGlubG9ja190CWxvY2s7IC8qIHByb3RlY3QgY29udGV4dCwgZG9tYWluIGlkcyAqLwotCXN0cnVjdCByb290X2VudHJ5ICpyb290X2VudHJ5OyAvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KLQotCXVuc2lnbmVkIGludCBpcnE7Ci0JdW5zaWduZWQgY2hhciBuYW1lWzddOyAgICAvKiBEZXZpY2UgTmFtZSAqLwotCXN0cnVjdCBtc2lfbXNnIHNhdmVkX21zZzsKLQlzdHJ1Y3Qgc3lzX2RldmljZSBzeXNkZXY7Ci0jZW5kaWYKLQlzdHJ1Y3QgcV9pbnZhbCAgKnFpOyAgICAgICAgICAgIC8qIFF1ZXVlZCBpbnZhbGlkYXRpb24gaW5mbyAqLwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0Jc3RydWN0IGlyX3RhYmxlICppcl90YWJsZTsJLyogSW50ZXJydXB0IHJlbWFwcGluZyBpbmZvICovCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbW11X2ZsdXNoX2NhY2hlKAotCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHZvaWQgKmFkZHIsIGludCBzaXplKQotewotCWlmICghZWNhcF9jb2hlcmVudChpb21tdS0+ZWNhcCkpCi0JCWNsZmx1c2hfY2FjaGVfcmFuZ2UoYWRkciwgc2l6ZSk7Ci19Ci0KLWV4dGVybiBzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKiBkbWFyX2ZpbmRfbWF0Y2hlZF9kcmhkX3VuaXQoc3RydWN0IHBjaV9kZXYgKmRldik7Ci0KLWV4dGVybiBpbnQgYWxsb2NfaW9tbXUoc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkKTsKLWV4dGVybiB2b2lkIGZyZWVfaW9tbXUoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7Ci1leHRlcm4gaW50IGRtYXJfZW5hYmxlX3FpKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOwotZXh0ZXJuIHZvaWQgcWlfZ2xvYmFsX2llYyhzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKLQotZXh0ZXJuIHZvaWQgcWlfc3VibWl0X3N5bmMoc3RydWN0IHFpX2Rlc2MgKmRlc2MsIHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwppbmRleCBiYjY0MmNjLi4yZGU1YTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKQEAgLTEsNTEgKzEsNzUgQEAKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KLSNpbmNsdWRlICJpbnRlbC1pb21tdS5oIgorI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAjaW5jbHVkZSAiaW50cl9yZW1hcHBpbmcuaCIKIAogc3RhdGljIHN0cnVjdCBpb2FwaWNfc2NvcGUgaXJfaW9hcGljW01BWF9JT19BUElDU107CiBzdGF0aWMgaW50IGlyX2lvYXBpY19udW07CiBpbnQgaW50cl9yZW1hcHBpbmdfZW5hYmxlZDsKIAotc3RhdGljIHN0cnVjdCB7CitzdHJ1Y3QgaXJxXzJfaW9tbXUgewogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CiAJdTE2IGlydGVfaW5kZXg7CiAJdTE2IHN1Yl9oYW5kbGU7CiAJdTggIGlydGVfbWFzazsKLX0gaXJxXzJfaW9tbXVbTlJfSVJRU107Cit9OworCitzdGF0aWMgc3RydWN0IGlycV8yX2lvbW11IGlycV8yX2lvbW11WFtOUl9JUlFTXTsKKworc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqaXJxXzJfaW9tbXUodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gKGlycSA8IG5yX2lycXMpID8gaXJxXzJfaW9tbXVYICsgaXJxIDogTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqaXJxXzJfaW9tbXVfYWxsb2ModW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxXzJfaW9tbXUoaXJxKTsKK30KIAogc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfMl9pcl9sb2NrKTsKIAorc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqdmFsaWRfaXJxXzJfaW9tbXUodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKworCWlycV9pb21tdSA9IGlycV8yX2lvbW11KGlycSk7CisKKwlpZiAoIWlycV9pb21tdSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWlycV9pb21tdS0+aW9tbXUpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGlycV9pb21tdTsKK30KKwogaW50IGlycV9yZW1hcHBlZChpbnQgaXJxKQogewotCWlmIChpcnEgPiBOUl9JUlFTKQotCQlyZXR1cm4gMDsKLQotCWlmICghaXJxXzJfaW9tbXVbaXJxXS5pb21tdSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKKwlyZXR1cm4gdmFsaWRfaXJxXzJfaW9tbXUoaXJxKSAhPSBOVUxMOwogfQogCiBpbnQgZ2V0X2lydGUoaW50IGlycSwgc3RydWN0IGlydGUgKmVudHJ5KQogewogCWludCBpbmRleDsKKwlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKIAotCWlmICghZW50cnkgfHwgaXJxID4gTlJfSVJRUykKKwlpZiAoIWVudHJ5KQogCQlyZXR1cm4gLTE7CiAKIAlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOwotCWlmICghaXJxXzJfaW9tbXVbaXJxXS5pb21tdSkgeworCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CisJaWYgKCFpcnFfaW9tbXUpIHsKIAkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaW5kZXggPSBpcnFfMl9pb21tdVtpcnFdLmlydGVfaW5kZXggKyBpcnFfMl9pb21tdVtpcnFdLnN1Yl9oYW5kbGU7Ci0JKmVudHJ5ID0gKihpcnFfMl9pb21tdVtpcnFdLmlvbW11LT5pcl90YWJsZS0+YmFzZSArIGluZGV4KTsKKwlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKKwkqZW50cnkgPSAqKGlycV9pb21tdS0+aW9tbXUtPmlyX3RhYmxlLT5iYXNlICsgaW5kZXgpOwogCiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCXJldHVybiAwOwpAQCAtNTQsNiArNzgsNyBAQAogaW50IGFsbG9jX2lydGUoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgaW50IGlycSwgdTE2IGNvdW50KQogewogCXN0cnVjdCBpcl90YWJsZSAqdGFibGUgPSBpb21tdS0+aXJfdGFibGU7CisJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CiAJdTE2IGluZGV4LCBzdGFydF9pbmRleDsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CiAJaW50IGk7CkBAIC02MSw2ICs4NiwxMCBAQAogCWlmICghY291bnQpCiAJCXJldHVybiAtMTsKIAorCS8qIHByb3RlY3QgaXJxXzJfaW9tbXVfYWxsb2MgbGF0ZXIgKi8KKwlpZiAoaXJxID49IG5yX2lycXMpCisJCXJldHVybiAtMTsKKwogCS8qCiAJICogc3RhcnQgdGhlIElSVEUgc2VhcmNoIGZyb20gaW5kZXggMC4KIAkgKi8KQEAgLTEwMCwxMCArMTI5LDExIEBACiAJZm9yIChpID0gaW5kZXg7IGkgPCBpbmRleCArIGNvdW50OyBpKyspCiAJCXRhYmxlLT5iYXNlW2ldLnByZXNlbnQgPSAxOwogCi0JaXJxXzJfaW9tbXVbaXJxXS5pb21tdSA9IGlvbW11OwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCA9ICBpbmRleDsKLQlpcnFfMl9pb21tdVtpcnFdLnN1Yl9oYW5kbGUgPSAwOwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9tYXNrID0gbWFzazsKKwlpcnFfaW9tbXUgPSBpcnFfMl9pb21tdV9hbGxvYyhpcnEpOworCWlycV9pb21tdS0+aW9tbXUgPSBpb21tdTsKKwlpcnFfaW9tbXUtPmlydGVfaW5kZXggPSAgaW5kZXg7CisJaXJxX2lvbW11LT5zdWJfaGFuZGxlID0gMDsKKwlpcnFfaW9tbXUtPmlydGVfbWFzayA9IG1hc2s7CiAKIAlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CiAKQEAgLTEyNCwzMSArMTU0LDMzIEBACiBpbnQgbWFwX2lycV90b19pcnRlX2hhbmRsZShpbnQgaXJxLCB1MTYgKnN1Yl9oYW5kbGUpCiB7CiAJaW50IGluZGV4OworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCiAJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKKwlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOworCWlmICghaXJxX2lvbW11KSB7CiAJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCSpzdWJfaGFuZGxlID0gaXJxXzJfaW9tbXVbaXJxXS5zdWJfaGFuZGxlOwotCWluZGV4ID0gaXJxXzJfaW9tbXVbaXJxXS5pcnRlX2luZGV4OworCSpzdWJfaGFuZGxlID0gaXJxX2lvbW11LT5zdWJfaGFuZGxlOworCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4OwogCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAlyZXR1cm4gaW5kZXg7CiB9CiAKIGludCBzZXRfaXJ0ZV9pcnEoaW50IGlycSwgc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgdTE2IGluZGV4LCB1MTYgc3ViaGFuZGxlKQogewotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7Ci0JaWYgKGlycSA+PSBOUl9JUlFTIHx8IGlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwotCQlyZXR1cm4gLTE7Ci0JfQorCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCi0JaXJxXzJfaW9tbXVbaXJxXS5pb21tdSA9IGlvbW11OwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCA9IGluZGV4OwotCWlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZSA9IHN1YmhhbmRsZTsKLQlpcnFfMl9pb21tdVtpcnFdLmlydGVfbWFzayA9IDA7CisJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKworCWlycV9pb21tdSA9IGlycV8yX2lvbW11X2FsbG9jKGlycSk7CisKKwlpcnFfaW9tbXUtPmlvbW11ID0gaW9tbXU7CisJaXJxX2lvbW11LT5pcnRlX2luZGV4ID0gaW5kZXg7CisJaXJxX2lvbW11LT5zdWJfaGFuZGxlID0gc3ViaGFuZGxlOworCWlycV9pb21tdS0+aXJ0ZV9tYXNrID0gMDsKIAogCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIApAQCAtMTU3LDE2ICsxODksMTkgQEAKIAogaW50IGNsZWFyX2lydGVfaXJxKGludCBpcnEsIHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHUxNiBpbmRleCkKIHsKKwlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwogCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7Ci0JaWYgKGlycSA+PSBOUl9JUlFTIHx8ICFpcnFfMl9pb21tdVtpcnFdLmlvbW11KSB7CisJaXJxX2lvbW11ID0gdmFsaWRfaXJxXzJfaW9tbXUoaXJxKTsKKwlpZiAoIWlycV9pb21tdSkgewogCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpcnFfMl9pb21tdVtpcnFdLmlvbW11ID0gTlVMTDsKLQlpcnFfMl9pb21tdVtpcnFdLmlydGVfaW5kZXggPSAwOwotCWlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZSA9IDA7Ci0JaXJxXzJfaW9tbXVbaXJxXS5pcnRlX21hc2sgPSAwOworCWlycV9pb21tdS0+aW9tbXUgPSBOVUxMOworCWlycV9pb21tdS0+aXJ0ZV9pbmRleCA9IDA7CisJaXJxX2lvbW11LT5zdWJfaGFuZGxlID0gMDsKKwlpcnFfMl9pb21tdShpcnEpLT5pcnRlX21hc2sgPSAwOwogCiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCkBAIC0xNzgsMTYgKzIxMywxOCBAQAogCWludCBpbmRleDsKIAlzdHJ1Y3QgaXJ0ZSAqaXJ0ZTsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCiAJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKKwlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOworCWlmICghaXJxX2lvbW11KSB7CiAJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlvbW11ID0gaXJxXzJfaW9tbXVbaXJxXS5pb21tdTsKKwlpb21tdSA9IGlycV9pb21tdS0+aW9tbXU7CiAKLQlpbmRleCA9IGlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCArIGlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZTsKKwlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAlpcnRlID0gJmlvbW11LT5pcl90YWJsZS0+YmFzZVtpbmRleF07CiAKIAlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKilpcnRlLCBpcnRlX21vZGlmaWVkLT5sb3cgfCAoMSA8PCAxKSk7CkBAIC0yMDMsMTggKzI0MCwyMCBAQAogewogCWludCBpbmRleDsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCiAJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKKwlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOworCWlmICghaXJxX2lvbW11KSB7CiAJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlvbW11ID0gaXJxXzJfaW9tbXVbaXJxXS5pb21tdTsKKwlpb21tdSA9IGlycV9pb21tdS0+aW9tbXU7CiAKLQlpbmRleCA9IGlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCArIGlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZTsKKwlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAotCXFpX2ZsdXNoX2llYyhpb21tdSwgaW5kZXgsIGlycV8yX2lvbW11W2lycV0uaXJ0ZV9tYXNrKTsKKwlxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCBpcnFfaW9tbXUtPmlydGVfbWFzayk7CiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0yNDYsMjggKzI4NSwzMCBAQAogCWludCBpbmRleCwgaTsKIAlzdHJ1Y3QgaXJ0ZSAqaXJ0ZTsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCiAJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKKwlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOworCWlmICghaXJxX2lvbW11KSB7CiAJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlvbW11ID0gaXJxXzJfaW9tbXVbaXJxXS5pb21tdTsKKwlpb21tdSA9IGlycV9pb21tdS0+aW9tbXU7CiAKLQlpbmRleCA9IGlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCArIGlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZTsKKwlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAlpcnRlID0gJmlvbW11LT5pcl90YWJsZS0+YmFzZVtpbmRleF07CiAKLQlpZiAoIWlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgaXJxXzJfaW9tbXVbaXJxXS5pcnRlX21hc2spOyBpKyspCisJaWYgKCFpcnFfaW9tbXUtPnN1Yl9oYW5kbGUpIHsKKwkJZm9yIChpID0gMDsgaSA8ICgxIDw8IGlycV9pb21tdS0+aXJ0ZV9tYXNrKTsgaSsrKQogCQkJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nICopaXJ0ZSwgMCk7Ci0JCXFpX2ZsdXNoX2llYyhpb21tdSwgaW5kZXgsIGlycV8yX2lvbW11W2lycV0uaXJ0ZV9tYXNrKTsKKwkJcWlfZmx1c2hfaWVjKGlvbW11LCBpbmRleCwgaXJxX2lvbW11LT5pcnRlX21hc2spOwogCX0KIAotCWlycV8yX2lvbW11W2lycV0uaW9tbXUgPSBOVUxMOwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCA9IDA7Ci0JaXJxXzJfaW9tbXVbaXJxXS5zdWJfaGFuZGxlID0gMDsKLQlpcnFfMl9pb21tdVtpcnFdLmlydGVfbWFzayA9IDA7CisJaXJxX2lvbW11LT5pb21tdSA9IE5VTEw7CisJaXJxX2lvbW11LT5pcnRlX2luZGV4ID0gMDsKKwlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOworCWlycV9pb21tdS0+aXJ0ZV9tYXNrID0gMDsKIAogCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuaCBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmgKaW5kZXggMDVmMjYzNS4uY2E0OGYwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuaAorKysgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5oCkBAIC0xLDQgKzEsNCBAQAotI2luY2x1ZGUgImludGVsLWlvbW11LmgiCisjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KIAogc3RydWN0IGlvYXBpY19zY29wZSB7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2lvdmEuYyBiL2RyaXZlcnMvcGNpL2lvdmEuYwppbmRleCAzZWY0YWMwLi4yMjg3MTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pb3ZhLmMKKysrIGIvZHJpdmVycy9wY2kvaW92YS5jCkBAIC03LDcgKzcsNyBAQAogICogQXV0aG9yOiBBbmlsIFMgS2VzaGF2YW11cnRoeSA8YW5pbC5zLmtlc2hhdmFtdXJ0aHlAaW50ZWwuY29tPgogICovCiAKLSNpbmNsdWRlICJpb3ZhLmgiCisjaW5jbHVkZSA8bGludXgvaW92YS5oPgogCiB2b2lkCiBpbml0X2lvdmFfZG9tYWluKHN0cnVjdCBpb3ZhX2RvbWFpbiAqaW92YWQsIHVuc2lnbmVkIGxvbmcgcGZuXzMyYml0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCBjOTg4NGJiLi5kYmU5ZjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMTM1OCwxMSArMTM1OCwxMCBAQAogCXJldHVybiAwOwogCiBlcnJfb3V0OgotCWRldl93YXJuKCZwZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IHJlc2VydmUgJXMgcmVnaW9uIFslI2xseC0lI2xseF1cbiIsCisJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkJBUiAlZDogY2FuJ3QgcmVzZXJ2ZSAlcyByZWdpb24gJXBSXG4iLAogCQkgYmFyLAogCQkgcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJhcikgJiBJT1JFU09VUkNFX0lPID8gIkkvTyIgOiAibWVtIiwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGJhciksCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9lbmQocGRldiwgYmFyKSk7CisJCSAmcGRldi0+cmVzb3VyY2VbYmFyXSk7CiAJcmV0dXJuIC1FQlVTWTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKaW5kZXggMzY2OThlNS4uZDNkYjhiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuYworKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCkBAIC0zMDQsOSArMzA0LDggQEAKIAkJfSBlbHNlIHsKIAkJCXJlcy0+c3RhcnQgPSBsNjQ7CiAJCQlyZXMtPmVuZCA9IGw2NCArIHN6NjQ7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiAlcyByZWcgJXggNjRiaXQgbW1pbzogWyVsbHgsICVsbHhdXG4iLAotCQkJCXBjaV9uYW1lKGRldiksIHBvcywgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogJXMgcmVnICV4IDY0Yml0IG1taW86ICVwUlxuIiwKKwkJCQlwY2lfbmFtZShkZXYpLCBwb3MsIHJlcyk7CiAJCX0KIAl9IGVsc2UgewogCQlzeiA9IHBjaV9zaXplKGwsIHN6LCBtYXNrKTsKQEAgLTMxNiw5ICszMTUsMTAgQEAKIAogCQlyZXMtPnN0YXJ0ID0gbDsKIAkJcmVzLT5lbmQgPSBsICsgc3o7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6ICVzIHJlZyAleCAlczogWyVsbHgsICVsbHhdXG4iLCBwY2lfbmFtZShkZXYpLAotCQkJcG9zLCAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pID8gImlvIHBvcnQiOiIzMmJpdCBtbWlvIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6ICVzIHJlZyAleCAlczogJXBSXG4iLAorCQkgICAgICAgcGNpX25hbWUoZGV2KSwgcG9zLAorCQkgICAgICAgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSA/ICJpbyBwb3J0IjoiMzJiaXQgbW1pbyIsCisJCSAgICAgICByZXMpOwogCX0KIAogIG91dDoKQEAgLTM4OSw5ICszODksOCBAQAogCQkJcmVzLT5zdGFydCA9IGJhc2U7CiAJCWlmICghcmVzLT5lbmQpCiAJCQlyZXMtPmVuZCA9IGxpbWl0ICsgMHhmZmY7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IGJyaWRnZSAlcyBpbyBwb3J0OiBbJWxseCwgJWxseF1cbiIsCi0JCQlwY2lfbmFtZShkZXYpLCAodW5zaWduZWQgbG9uZyBsb25nKSByZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5lbmQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBicmlkZ2UgJXMgaW8gcG9ydDogJXBSXG4iLAorCQkgICAgICAgcGNpX25hbWUoZGV2KSwgcmVzKTsKIAl9CiAKIAlyZXMgPSBjaGlsZC0+cmVzb3VyY2VbMV07CkBAIC00MDMsOSArNDAyLDggQEAKIAkJcmVzLT5mbGFncyA9IChtZW1fYmFzZV9sbyAmIFBDSV9NRU1PUllfUkFOR0VfVFlQRV9NQVNLKSB8IElPUkVTT1VSQ0VfTUVNOwogCQlyZXMtPnN0YXJ0ID0gYmFzZTsKIAkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmZmY7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IGJyaWRnZSAlcyAzMmJpdCBtbWlvOiBbJWxseCwgJWxseF1cbiIsCi0JCQlwY2lfbmFtZShkZXYpLCAodW5zaWduZWQgbG9uZyBsb25nKSByZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5lbmQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBicmlkZ2UgJXMgMzJiaXQgbW1pbzogJXBSXG4iLAorCQkgICAgICAgcGNpX25hbWUoZGV2KSwgcmVzKTsKIAl9CiAKIAlyZXMgPSBjaGlsZC0+cmVzb3VyY2VbMl07CkBAIC00NDEsOSArNDM5LDkgQEAKIAkJcmVzLT5mbGFncyA9IChtZW1fYmFzZV9sbyAmIFBDSV9NRU1PUllfUkFOR0VfVFlQRV9NQVNLKSB8IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9QUkVGRVRDSDsKIAkJcmVzLT5zdGFydCA9IGJhc2U7CiAJCXJlcy0+ZW5kID0gbGltaXQgKyAweGZmZmZmOwotCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBicmlkZ2UgJXMgJXNiaXQgbW1pbyBwcmVmOiBbJWxseCwgJWxseF1cbiIsCi0JCQlwY2lfbmFtZShkZXYpLCAocmVzLT5mbGFncyAmIFBDSV9QUkVGX1JBTkdFX1RZUEVfNjQpID8gIjY0IiA6ICIzMiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSByZXMtPnN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKSByZXMtPmVuZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IGJyaWRnZSAlcyAlc2JpdCBtbWlvIHByZWY6ICVwUlxuIiwKKwkJICAgICAgIHBjaV9uYW1lKGRldiksCisJCSAgICAgICAocmVzLT5mbGFncyAmIFBDSV9QUkVGX1JBTkdFX1RZUEVfNjQpID8gIjY0IjoiMzIiLCByZXMpOwogCX0KIH0KIApAQCAtMTIzNyw4ICsxMjM1LDExIEBACiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfc2Nhbl9jaGlsZF9idXMpOwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19pbml0IHBjaV9zb3J0X2JmX2NtcChjb25zdCBzdHJ1Y3QgcGNpX2RldiAqYSwgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmIpCitzdGF0aWMgaW50IF9faW5pdCBwY2lfc29ydF9iZl9jbXAoY29uc3Qgc3RydWN0IGRldmljZSAqZF9hLCBjb25zdCBzdHJ1Y3QgZGV2aWNlICpkX2IpCiB7CisJY29uc3Qgc3RydWN0IHBjaV9kZXYgKmEgPSB0b19wY2lfZGV2KGRfYSk7CisJY29uc3Qgc3RydWN0IHBjaV9kZXYgKmIgPSB0b19wY2lfZGV2KGRfYik7CisKIAlpZiAgICAgIChwY2lfZG9tYWluX25yKGEtPmJ1cykgPCBwY2lfZG9tYWluX25yKGItPmJ1cykpIHJldHVybiAtMTsKIAllbHNlIGlmIChwY2lfZG9tYWluX25yKGEtPmJ1cykgPiBwY2lfZG9tYWluX25yKGItPmJ1cykpIHJldHVybiAgMTsKIApAQCAtMTI1MSw1MCArMTI1Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBZZXMsIHRoaXMgZm9yY2FibHkgYnJlYWtzIHRoZSBrbGlzdCBhYnN0cmFjdGlvbiB0ZW1wb3JhcmlseS4gIEl0Ci0gKiBqdXN0IHdhbnRzIHRvIHNvcnQgdGhlIGtsaXN0LCBub3QgY2hhbmdlIHJlZmVyZW5jZSBjb3VudHMgYW5kCi0gKiB0YWtlL2Ryb3AgbG9ja3MgcmFwaWRseSBpbiB0aGUgcHJvY2Vzcy4gIEl0IGRvZXMgYWxsIHRoaXMgd2hpbGUKLSAqIGhvbGRpbmcgdGhlIGxvY2sgZm9yIHRoZSBsaXN0LCBzbyBvYmplY3RzIGNhbid0IG90aGVyd2lzZSBiZQotICogYWRkZWQvcmVtb3ZlZCB3aGlsZSB3ZSdyZSBzd2l6emxpbmcuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBwY2lfaW5zZXJ0aW9uX3NvcnRfa2xpc3Qoc3RydWN0IHBjaV9kZXYgKmEsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOwotCXN0cnVjdCBrbGlzdF9ub2RlICpuOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgcGNpX2RldiAqYjsKLQotCWxpc3RfZm9yX2VhY2gocG9zLCBsaXN0KSB7Ci0JCW4gPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3Qga2xpc3Rfbm9kZSwgbl9ub2RlKTsKLQkJZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7Ci0JCWIgPSB0b19wY2lfZGV2KGRldik7Ci0JCWlmIChwY2lfc29ydF9iZl9jbXAoYSwgYikgPD0gMCkgewotCQkJbGlzdF9tb3ZlX3RhaWwoJmEtPmRldi5rbm9kZV9idXMubl9ub2RlLCAmYi0+ZGV2Lmtub2RlX2J1cy5uX25vZGUpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWxpc3RfbW92ZV90YWlsKCZhLT5kZXYua25vZGVfYnVzLm5fbm9kZSwgbGlzdCk7Ci19Ci0KIHZvaWQgX19pbml0IHBjaV9zb3J0X2JyZWFkdGhmaXJzdCh2b2lkKQogewotCUxJU1RfSEVBRChzb3J0ZWRfZGV2aWNlcyk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wOwotCXN0cnVjdCBrbGlzdF9ub2RlICpuOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQlzdHJ1Y3Qga2xpc3QgKmRldmljZV9rbGlzdDsKLQotCWRldmljZV9rbGlzdCA9IGJ1c19nZXRfZGV2aWNlX2tsaXN0KCZwY2lfYnVzX3R5cGUpOwotCi0Jc3Bpbl9sb2NrKCZkZXZpY2Vfa2xpc3QtPmtfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdG1wLCAmZGV2aWNlX2tsaXN0LT5rX2xpc3QpIHsKLQkJbiA9IGNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBrbGlzdF9ub2RlLCBuX25vZGUpOwotCQlkZXYgPSBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfYnVzKTsKLQkJcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQkJcGNpX2luc2VydGlvbl9zb3J0X2tsaXN0KHBkZXYsICZzb3J0ZWRfZGV2aWNlcyk7Ci0JfQotCWxpc3Rfc3BsaWNlKCZzb3J0ZWRfZGV2aWNlcywgJmRldmljZV9rbGlzdC0+a19saXN0KTsKLQlzcGluX3VubG9jaygmZGV2aWNlX2tsaXN0LT5rX2xvY2spOworCWJ1c19zb3J0X2JyZWFkdGhmaXJzdCgmcGNpX2J1c190eXBlLCAmcGNpX3NvcnRfYmZfY21wKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggOTIzNmU3Zi4uZTg3MmFjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTE1NjEsOCArMTU2MSw3IEBACiAJCWlmICgoZi0+dmVuZG9yID09IGRldi0+dmVuZG9yIHx8IGYtPnZlbmRvciA9PSAodTE2KSBQQ0lfQU5ZX0lEKSAmJgogIAkJICAgIChmLT5kZXZpY2UgPT0gZGV2LT5kZXZpY2UgfHwgZi0+ZGV2aWNlID09ICh1MTYpIFBDSV9BTllfSUQpKSB7CiAjaWZkZWYgREVCVUcKLQkJCWRldl9kYmcoJmRldi0+ZGV2LCAiY2FsbGluZyAiKTsKLQkJCXByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKCIlc1xuIiwgZi0+aG9vayk7CisJCQlkZXZfZGJnKCZkZXYtPmRldiwgImNhbGxpbmcgJXBGXG4iLCBmLT5ob29rKTsKICNlbmRpZgogCQkJZi0+aG9vayhkZXYpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9yb20uYyBiL2RyaXZlcnMvcGNpL3JvbS5jCmluZGV4IGJkNWMwZTAuLjFmNWY2MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3JvbS5jCisrKyBiL2RyaXZlcnMvcGNpL3JvbS5jCkBAIC0yMSw3ICsyMSw3IEBACiAgKiBiZXR3ZWVuIHRoZSBST00gYW5kIG90aGVyIHJlc291cmNlcywgc28gZW5hYmxpbmcgaXQgbWF5IGRpc2FibGUgYWNjZXNzCiAgKiB0byBNTUlPIHJlZ2lzdGVycyBvciBvdGhlciBjYXJkIG1lbW9yeS4KICAqLwotc3RhdGljIGludCBwY2lfZW5hYmxlX3JvbShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK2ludCBwY2lfZW5hYmxlX3JvbShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBkZXYtPnJlc291cmNlICsgUENJX1JPTV9SRVNPVVJDRTsKIAlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gcmVnaW9uOwpAQCAtNDUsNyArNDUsNyBAQAogICogRGlzYWJsZSBST00gZGVjb2Rpbmcgb24gYSBQQ0kgZGV2aWNlIGJ5IHR1cm5pbmcgb2ZmIHRoZSBsYXN0IGJpdCBpbiB0aGUKICAqIFJPTSBCQVIuCiAgKi8KLXN0YXRpYyB2b2lkIHBjaV9kaXNhYmxlX3JvbShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3ZvaWQgcGNpX2Rpc2FibGVfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXUzMiByb21fYWRkcjsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi0+cm9tX2Jhc2VfcmVnLCAmcm9tX2FkZHIpOwpAQCAtMjYwLDMgKzI2MCw1IEBACiAKIEVYUE9SVF9TWU1CT0wocGNpX21hcF9yb20pOwogRVhQT1JUX1NZTUJPTChwY2lfdW5tYXBfcm9tKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9lbmFibGVfcm9tKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9kaXNhYmxlX3JvbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCmluZGV4IDNhYmJmYWQuLjQ3MWE0MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCkBAIC0zNTYsMTAgKzM1Niw3IEBACiAJCQlvcmRlciA9IF9fZmZzKGFsaWduKSAtIDIwOwogCQkJaWYgKG9yZGVyID4gMTEpIHsKIAkJCQlkZXZfd2FybigmZGV2LT5kZXYsICJCQVIgJWQgYmFkIGFsaWdubWVudCAlbGx4OiAiCi0JCQkJICAgICAgICIlIzAxNmxseC0lIzAxNmxseFxuIiwgaSwKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhbGlnbiwKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyLT5zdGFydCwKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyLT5lbmQpOworCQkJCQkgIiVwUlxuIiwgaSwgKHVuc2lnbmVkIGxvbmcgbG9uZylhbGlnbiwgcik7CiAJCQkJci0+ZmxhZ3MgPSAwOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMzc4LDExICszNzUsMTAgQEAKIAlhbGlnbiA9IDA7CiAJbWluX2FsaWduID0gMDsKIAlmb3IgKG9yZGVyID0gMDsgb3JkZXIgPD0gbWF4X29yZGVyOyBvcmRlcisrKSB7Ci0jaWZkZWYgQ09ORklHX1JFU09VUkNFU182NEJJVAotCQlyZXNvdXJjZV9zaXplX3QgYWxpZ24xID0gMVVMTCA8PCAob3JkZXIgKyAyMCk7Ci0jZWxzZQotCQlyZXNvdXJjZV9zaXplX3QgYWxpZ24xID0gMVUgPDwgKG9yZGVyICsgMjApOwotI2VuZGlmCisJCXJlc291cmNlX3NpemVfdCBhbGlnbjEgPSAxOworCisJCWFsaWduMSA8PD0gKG9yZGVyICsgMjApOworCiAJCWlmICghYWxpZ24pCiAJCQltaW5fYWxpZ24gPSBhbGlnbjE7CiAJCWVsc2UgaWYgKEFMSUdOKGFsaWduICsgbWluX2FsaWduLCBtaW5fYWxpZ24pIDwgYWxpZ24xKQpAQCAtNTQwLDExICs1MzYsOSBAQAogICAgICAgICAgICAgICAgIGlmICghcmVzKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYnVzOiAlMDJ4IGluZGV4ICV4ICVzOiBbJWxseCwgJWxseF1cbiIsCi0JCQlidXMtPm51bWJlciwgaSwKLQkJCShyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgPyAiaW8gcG9ydCIgOiAibW1pbyIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSByZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5lbmQpOworCQlwcmludGsoS0VSTl9JTkZPICJidXM6ICUwMnggaW5kZXggJXggJXM6ICVwUlxuIiwKKwkJICAgICAgIGJ1cy0+bnVtYmVyLCBpLAorCQkgICAgICAgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSA/ICJpbyBwb3J0IiA6ICJtbWlvIiwgcmVzKTsKICAgICAgICAgfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCmluZGV4IDFhNWZjODMuLmQ0YjVjNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCkBAIC00OSwxMCArNDksOCBAQAogCiAJcGNpYmlvc19yZXNvdXJjZV90b19idXMoZGV2LCAmcmVnaW9uLCByZXMpOwogCi0JZGV2X2RiZygmZGV2LT5kZXYsICJCQVIgJWQ6IGdvdCByZXMgWyUjbGx4LSUjbGx4XSBidXMgWyUjbGx4LSUjbGx4XSAiCi0JCSJmbGFncyAlI2x4XG4iLCByZXNubywKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQsCisJZGV2X2RiZygmZGV2LT5kZXYsICJCQVIgJWQ6IGdvdCByZXMgJXBSIGJ1cyBbJSNsbHgtJSNsbHhdICIKKwkJImZsYWdzICUjbHhcbiIsIHJlc25vLCByZXMsCiAJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlZ2lvbi5zdGFydCwKIAkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVnaW9uLmVuZCwKIAkJICh1bnNpZ25lZCBsb25nKXJlcy0+ZmxhZ3MpOwpAQCAtMTE0LDEzICsxMTIsMTEgQEAKIAkJZXJyID0gaW5zZXJ0X3Jlc291cmNlKHJvb3QsIHJlcyk7CiAKIAlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiAlcyBvZiAlcyBbJSNsbHgtJSNsbHhdXG4iLAorCQlkZXZfZXJyKCZkZXYtPmRldiwgIkJBUiAlZDogJXMgb2YgJXMgJXBSXG4iLAogCQkJcmVzb3VyY2UsCiAJCQlyb290ID8gImFkZHJlc3Mgc3BhY2UgY29sbGlzaW9uIG9uIiA6CiAJCQkJIm5vIHBhcmVudCBmb3VuZCBmb3IiLAotCQkJZHR5cGUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKwkJCWR0eXBlLCByZXMpOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC0xMzksOSArMTM1LDggQEAKIAlhbGlnbiA9IHJlc291cmNlX2FsaWdubWVudChyZXMpOwogCWlmICghYWxpZ24pIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IGFsbG9jYXRlIHJlc291cmNlIChib2d1cyAiCi0JCQkiYWxpZ25tZW50KSBbJSNsbHgtJSNsbHhdIGZsYWdzICUjbHhcbiIsCi0JCQlyZXNubywgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCwgcmVzLT5mbGFncyk7CisJCQkiYWxpZ25tZW50KSAlcFIgZmxhZ3MgJSNseFxuIiwKKwkJCXJlc25vLCByZXMsIHJlcy0+ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE2MiwxMSArMTU3LDggQEAKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhbGxvY2F0ZSAlcyByZXNvdXJjZSAiCi0JCQkiWyUjbGx4LSUjbGx4XVxuIiwgcmVzbm8sCi0JCQlyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IGFsbG9jYXRlICVzIHJlc291cmNlICVwUlxuIiwKKwkJCXJlc25vLCByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsIHJlcyk7CiAJfSBlbHNlIHsKIAkJcmVzLT5mbGFncyAmPSB+SU9SRVNPVVJDRV9TVEFSVEFMSUdOOwogCQlpZiAocmVzbm8gPCBQQ0lfQlJJREdFX1JFU09VUkNFUykKQEAgLTIwMiwxMSArMTk0LDggQEAKIAl9CiAKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhbGxvY2F0ZSAlcyByZXNvdXJjZSAiCi0JCQkiWyUjbGx4LSUjbGx4XG5dIiwgcmVzbm8sCi0JCQlyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6IGNhbid0IGFsbG9jYXRlICVzIHJlc291cmNlICVwUlxuIiwKKwkJCXJlc25vLCByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJL08iIDogIm1lbSIsIHJlcyk7CiAJfSBlbHNlIGlmIChyZXNubyA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKSB7CiAJCXBjaV91cGRhdGVfcmVzb3VyY2UoZGV2LCByZXMsIHJlc25vKTsKIAl9CkBAIC0yMzcsOSArMjI2LDggQEAKIAkJcl9hbGlnbiA9IHJlc291cmNlX2FsaWdubWVudChyKTsKIAkJaWYgKCFyX2FsaWduKSB7CiAJCQlkZXZfd2FybigmZGV2LT5kZXYsICJCQVIgJWQ6IGJvZ3VzIGFsaWdubWVudCAiCi0JCQkJIlslI2xseC0lI2xseF0gZmxhZ3MgJSNseFxuIiwKLQkJCQlpLCAodW5zaWduZWQgbG9uZyBsb25nKXItPnN0YXJ0LAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpci0+ZW5kLCByLT5mbGFncyk7CisJCQkJIiVwUiBmbGFncyAlI2x4XG4iLAorCQkJCWksIHIsIHItPmZsYWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWZvciAobGlzdCA9IGhlYWQ7IDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKQEAgLTI4Nyw5ICsyNzUsNyBAQAogCiAJCWlmICghci0+cGFyZW50KSB7CiAJCQlkZXZfZXJyKCZkZXYtPmRldiwgImRldmljZSBub3QgYXZhaWxhYmxlIGJlY2F1c2Ugb2YgIgotCQkJCSJCQVIgJWQgWyUjbGx4LSUjbGx4XSBjb2xsaXNpb25zXG4iLCBpLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHItPnN0YXJ0LAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHItPmVuZCk7CisJCQkJIkJBUiAlZCAlcFIgY29sbGlzaW9uc1xuIiwgaSwgcik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCmluZGV4IGE4NzkwMmQuLmI0NmM2MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCkBAIC0yLDEwICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgcGNtY2lhIHN1YnN5c3RlbSAoYy9vIERhdmlkIEhpbmRzKQogIwogCi1pZmVxICgkKENPTkZJR19QQ01DSUFfREVCVUcpLHkpCi1FWFRSQV9DRkxBR1MgKz0gLURERUJVRwotZW5kaWYKLQogcGNtY2lhX2NvcmUteQkJCQkJKz0gY3MubyBjaXN0cGwubyByc3JjX21nci5vIHNvY2tldF9zeXNmcy5vCiBwY21jaWFfY29yZS0kKENPTkZJR19DQVJEQlVTKQkJCSs9IGNhcmRidXMubwogb2JqLSQoQ09ORklHX1BDQ0FSRCkJCQkJKz0gcGNtY2lhX2NvcmUubwpAQCAtNjgsMTAgKzY0LDExIEBACiBzYTExMDBfY3MtJChDT05GSUdfU0ExMTAwX1NJTVBBRCkJCSs9IHNhMTEwMF9zaW1wYWQubwogCiBweGEyeHhfbHViYm9ja19jcy15CQkJCSs9IHB4YTJ4eF9sdWJib2NrLm8gc2ExMTExX2dlbmVyaWMubworcHhhMnh4X2NtX3gyeHhfY3MteQkJCQkrPSBweGEyeHhfY21feDJ4eC5vIHB4YTJ4eF9jbV94MjU1Lm8gcHhhMnh4X2NtX3gyNzAubwogcHhhMnh4LW9iai0kKENPTkZJR19BUkNIX0xVQkJPQ0spCQkrPSBweGEyeHhfbHViYm9ja19jcy5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfTUFJTlNUT05FKQkJKz0gcHhhMnh4X21haW5zdG9uZS5vCiBweGEyeHgtb2JqLSQoQ09ORklHX1BYQV9TSEFSUFNMKQkJKz0gcHhhMnh4X3NoYXJwc2wubwotcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX0FSTUNPUkUpCQkrPSBweGEyeHhfY21feDJ4eC5vIHB4YTJ4eF9jbV94MjU1Lm8gcHhhMnh4X2NtX3gyNzAubworcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX0FSTUNPUkUpCQkrPSBweGEyeHhfY21feDJ4eF9jcy5vCiBweGEyeHgtb2JqLSQoQ09ORklHX0FSQ0hfVklQRVIpCQkJKz0gcHhhMnh4X3ZpcGVyLm8KIHB4YTJ4eC1vYmotJChDT05GSUdfVFJJWkVQU19QQ01DSUEpCQkrPSBweGEyeHhfdHJpemVwcy5vCiBweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRYKQkJKz0gcHhhMnh4X3BhbG10eC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKaW5kZXggYTBmZmI4ZS4uOWUxMTQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwpAQCAtMjczLDcgKzI3Myw3IEBACiAJCQlnb3RvIGZhaWwwZDsKIAkJY2YtPnNvY2tldC5wY2lfaXJxID0gYm9hcmQtPmlycV9waW47CiAJfSBlbHNlCi0JCWNmLT5zb2NrZXQucGNpX2lycSA9IE5SX0lSUVMgKyAxOworCQljZi0+c29ja2V0LnBjaV9pcnEgPSBucl9pcnFzICsgMTsKIAogCS8qIHBjbWNpYSBsYXllciBvbmx5IHJlbWFwcyAicmVhbCIgbWVtb3J5IG5vdCBpb3NwYWNlICovCiAJY2YtPnNvY2tldC5pb19vZmZzZXQgPSAodW5zaWduZWQgbG9uZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCmluZGV4IDc1ZThmODUuLmZjMWRlNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwpAQCAtMjkyLDcgKzI5Miw3IEBACiAJCXNrdC0+c3BkX2lvW21hcC0+bWFwXSA9IHNwZWVkOwogCX0KIAotCW1hcC0+c3RhcnQ9KGlvYWRkcl90KSh1MzIpc2t0LT52aXJ0X2lvOworCW1hcC0+c3RhcnQ9KHVuc2lnbmVkIGludCkodTMyKXNrdC0+dmlydF9pbzsKIAltYXAtPnN0b3A9bWFwLT5zdGFydCtNQVBfU0laRTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaCBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmgKaW5kZXggYTUzZWY1OS4uMTNhNGZiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCkBAIC0xMTYsNyArMTE2LDcgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UJCXJlc19hdHRyOwogCiAJdm9pZCAqICAgICAgICAgICAgICAgICAJdmlydF9pbzsKLQlpb2FkZHJfdCAgICAgICAgICAgICAgCXBoeXNfaW87CisJdW5zaWduZWQgaW50CQlwaHlzX2lvOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgCXBoeXNfYXR0cjsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgIAlwaHlzX21lbTsKIAl1bnNpZ25lZCBzaG9ydCAgICAgICAgCXNwZWVkX2lvLCBzcGVlZF9hdHRyLCBzcGVlZF9tZW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKaW5kZXggYWExY2Q0ZC4uZDZiNGJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYwpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvYnVzX29wcy5oPgotI2luY2x1ZGUgImNzX2ludGVybmFsLmgiCiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYwppbmRleCA4YTliMThjLi45NjI3MzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF94eHMxNTAwLmMKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2J1c19vcHMuaD4KLSNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jIGIvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCmluZGV4IDkxMWNhMGUuLmRiNzdlMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKQEAgLTIzOCw3ICsyMzgsNyBAQAogCXBjaV9idXNfYWRkX2RldmljZXMoYnVzKTsKIAogCXMtPmlycS5Bc3NpZ25lZElSUSA9IHMtPnBjaV9pcnE7Ci0JcmV0dXJuIENTX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgY2JfZnJlZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqIHMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCmluZGV4IDY1MTI5YjUuLmRjY2U5ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCkBAIC05Miw3ICs5Miw4IEBACiAJaWYgKCEocy0+ZmVhdHVyZXMgJiBTU19DQVBfU1RBVElDX01BUCkgJiYgKG1lbS0+cmVzID09IE5VTEwpKSB7CiAJCW1lbS0+cmVzID0gcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbigwLCBzLT5tYXBfc2l6ZSwgcy0+bWFwX3NpemUsIDAsIHMpOwogCQlpZiAobWVtLT5yZXMgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJjczogdW5hYmxlIHRvIG1hcCBjYXJkIG1lbW9yeSFcbiIpOworCQkJZGV2X3ByaW50ayhLRVJOX05PVElDRSwgJnMtPmRldiwKKwkJCQkgICAiY3M6IHVuYWJsZSB0byBtYXAgY2FyZCBtZW1vcnkhXG4iKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJCXMtPmNpc192aXJ0ID0gTlVMTDsKQEAgLTI2NSwxMyArMjY2LDEzIEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgcmVhZF9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBhdHRyLCB1X2ludCBhZGRyLAotCQkJICAgdV9pbnQgbGVuLCB2b2lkICpwdHIpCisJCQkgICBzaXplX3QgbGVuLCB2b2lkICpwdHIpCiB7CiAgICAgc3RydWN0IGNpc19jYWNoZV9lbnRyeSAqY2lzOwogICAgIGludCByZXQ7CiAKICAgICBpZiAocy0+ZmFrZV9jaXMpIHsKLQlpZiAocy0+ZmFrZV9jaXNfbGVuID4gYWRkcitsZW4pCisJaWYgKHMtPmZha2VfY2lzX2xlbiA+PSBhZGRyK2xlbikKIAkgICAgbWVtY3B5KHB0ciwgcy0+ZmFrZV9jaXMrYWRkciwgbGVuKTsKIAllbHNlCiAJICAgIG1lbXNldChwdHIsIDB4ZmYsIGxlbik7CkBAIC0zNTEsNyArMzUyLDkgQEAKIAogCWJ1ZiA9IGttYWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKIAlpZiAoYnVmID09IE5VTEwpCi0JCXJldHVybiAtMTsKKwkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsCisJCQkgICAibm8gbWVtb3J5IGZvciB2ZXJpZnlpbmcgQ0lTXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjaXMsICZzLT5jaXNfY2FjaGUsIG5vZGUpIHsKIAkJaW50IGxlbiA9IGNpcy0+bGVuOwogCkBAIC0zODAsMTggKzM4MywyMiBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLWludCBwY21jaWFfcmVwbGFjZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGNpc2R1bXBfdCAqY2lzKQoraW50IHBjbWNpYV9yZXBsYWNlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJICAgICAgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQogewotICAgIGtmcmVlKHMtPmZha2VfY2lzKTsKLSAgICBzLT5mYWtlX2NpcyA9IE5VTEw7Ci0gICAgaWYgKGNpcy0+TGVuZ3RoID4gQ0lTVFBMX01BWF9DSVNfU0laRSkKLQlyZXR1cm4gQ1NfQkFEX1NJWkU7Ci0gICAgcy0+ZmFrZV9jaXMgPSBrbWFsbG9jKGNpcy0+TGVuZ3RoLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAocy0+ZmFrZV9jaXMgPT0gTlVMTCkKLQlyZXR1cm4gQ1NfT1VUX09GX1JFU09VUkNFOwotICAgIHMtPmZha2VfY2lzX2xlbiA9IGNpcy0+TGVuZ3RoOwotICAgIG1lbWNweShzLT5mYWtlX2NpcywgY2lzLT5EYXRhLCBjaXMtPkxlbmd0aCk7Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisJaWYgKGxlbiA+IENJU1RQTF9NQVhfQ0lTX1NJWkUpIHsKKwkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsICJyZXBsYWNlbWVudCBDSVMgdG9vIGJpZ1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlrZnJlZShzLT5mYWtlX2Npcyk7CisJcy0+ZmFrZV9jaXMgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKHMtPmZha2VfY2lzID09IE5VTEwpIHsKKwkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsICJubyBtZW1vcnkgdG8gcmVwbGFjZSBDSVNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcy0+ZmFrZV9jaXNfbGVuID0gbGVuOworCW1lbWNweShzLT5mYWtlX2NpcywgZGF0YSwgbGVuKTsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcGxhY2VfY2lzKTsKIApAQCAtNDE4LDkgKzQyNSw5IEBACiBpbnQgcGNjYXJkX2dldF9maXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLCB0dXBsZV90ICp0dXBsZSkKIHsKICAgICBpZiAoIXMpCi0JcmV0dXJuIENTX0JBRF9IQU5ETEU7CisJcmV0dXJuIC1FSU5WQUw7CiAgICAgaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JcmV0dXJuIENTX05PX0NBUkQ7CisJcmV0dXJuIC1FTk9ERVY7CiAgICAgdHVwbGUtPlR1cGxlTGluayA9IHR1cGxlLT5GbGFncyA9IDA7CiAjaWZkZWYgQ09ORklHX0NBUkRCVVMKICAgICBpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgewpAQCAtNDQwLDEwICs0NDcsMTAgQEAKIAkhKHR1cGxlLT5BdHRyaWJ1dGVzICYgVFVQTEVfUkVUVVJOX0NPTU1PTikpIHsKIAljaXNkYXRhX3QgcmVxID0gdHVwbGUtPkRlc2lyZWRUdXBsZTsKIAl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0xPTkdMSU5LX01GQzsKLQlpZiAocGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSkgPT0gQ1NfU1VDQ0VTUykgeworCWlmIChwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKSA9PSAwKSB7CiAJICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTElOS1RBUkdFVDsKLQkgICAgaWYgKHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpICE9IENTX1NVQ0NFU1MpCi0JCXJldHVybiBDU19OT19NT1JFX0lURU1TOworCSAgICBpZiAocGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSkgIT0gMCkKKwkJcmV0dXJuIC1FTk9TUEM7CiAJfSBlbHNlCiAJICAgIHR1cGxlLT5DSVNPZmZzZXQgPSB0dXBsZS0+VHVwbGVMaW5rID0gMDsKIAl0dXBsZS0+RGVzaXJlZFR1cGxlID0gcmVxOwpAQCAtNDk4LDkgKzUwNSw5IEBACiAgICAgaW50IG9mcywgaSwgYXR0cjsKIAogICAgIGlmICghcykKLQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKKwlyZXR1cm4gLUVJTlZBTDsKICAgICBpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKLQlyZXR1cm4gQ1NfTk9fQ0FSRDsKKwlyZXR1cm4gLUVOT0RFVjsKIAogICAgIGxpbmtbMV0gPSB0dXBsZS0+VHVwbGVMaW5rOwogICAgIG9mcyA9IHR1cGxlLT5DSVNPZmZzZXQgKyB0dXBsZS0+VHVwbGVMaW5rOwpAQCAtNTE5LDcgKzUyNiw3IEBACiAJLyogRW5kIG9mIGNoYWluPyAgRm9sbG93IGxvbmcgbGluayBpZiBwb3NzaWJsZSAqLwogCWlmIChsaW5rWzBdID09IENJU1RQTF9FTkQpIHsKIAkgICAgaWYgKChvZnMgPSBmb2xsb3dfbGluayhzLCB0dXBsZSkpIDwgMCkKLQkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7CisJCXJldHVybiAtRU5PU1BDOwogCSAgICBhdHRyID0gU1BBQ0UodHVwbGUtPkZsYWdzKTsKIAkgICAgcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzLCAyLCBsaW5rKTsKIAl9CkBAIC01NzcsMTMgKzU4NCwxMyBAQAogICAgIH0KICAgICBpZiAoaSA9PSBNQVhfVFVQTEVTKSB7CiAJY3NfZGJnKHMsIDEsICJjczogb3ZlcnJ1biBpbiBwY21jaWFfZ2V0X25leHRfdHVwbGVcbiIpOwotCXJldHVybiBDU19OT19NT1JFX0lURU1TOworCXJldHVybiAtRU5PU1BDOwogICAgIH0KICAgICAKICAgICB0dXBsZS0+VHVwbGVDb2RlID0gbGlua1swXTsKICAgICB0dXBsZS0+VHVwbGVMaW5rID0gbGlua1sxXTsKICAgICB0dXBsZS0+Q0lTT2Zmc2V0ID0gb2ZzICsgMjsKLSAgICByZXR1cm4gQ1NfU1VDQ0VTUzsKKyAgICByZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocGNjYXJkX2dldF9uZXh0X3R1cGxlKTsKIApAQCAtNTk2LDE4ICs2MDMsMTggQEAKICAgICB1X2ludCBsZW47CiAKICAgICBpZiAoIXMpCi0JcmV0dXJuIENTX0JBRF9IQU5ETEU7CisJcmV0dXJuIC1FSU5WQUw7CiAKICAgICBpZiAodHVwbGUtPlR1cGxlTGluayA8IHR1cGxlLT5UdXBsZU9mZnNldCkKLQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKKwlyZXR1cm4gLUVOT1NQQzsKICAgICBsZW4gPSB0dXBsZS0+VHVwbGVMaW5rIC0gdHVwbGUtPlR1cGxlT2Zmc2V0OwogICAgIHR1cGxlLT5UdXBsZURhdGFMZW4gPSB0dXBsZS0+VHVwbGVMaW5rOwogICAgIGlmIChsZW4gPT0gMCkKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKICAgICByZWFkX2Npc19jYWNoZShzLCBTUEFDRSh0dXBsZS0+RmxhZ3MpLAogCQkgICB0dXBsZS0+Q0lTT2Zmc2V0ICsgdHVwbGUtPlR1cGxlT2Zmc2V0LAogCQkgICBfTUlOKGxlbiwgdHVwbGUtPlR1cGxlRGF0YU1heCksIHR1cGxlLT5UdXBsZURhdGEpOwotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwY2NhcmRfZ2V0X3R1cGxlX2RhdGEpOwogCkBAIC02NDAsMjUgKzY0NywzMSBAQAogCWNhc2UgMzogZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAxNTA7IGJyZWFrOwogCWNhc2UgNDogZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAxMDA7IGJyZWFrOwogCWNhc2UgNzoKLQkgICAgaWYgKCsrcCA9PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCSAgICBpZiAoKytwID09IHEpCisJCSAgICByZXR1cm4gLUVJTlZBTDsKIAkgICAgZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSBTUEVFRF9DVlQoKnApOwogCSAgICB3aGlsZSAoKnAgJiAweDgwKQotCQlpZiAoKytwID09IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisJCWlmICgrK3AgPT0gcSkKKwkJCXJldHVybiAtRUlOVkFMOwogCSAgICBicmVhazsKIAlkZWZhdWx0OgotCSAgICByZXR1cm4gQ1NfQkFEX1RVUExFOworCSAgICByZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoKytwID09IHEpIHJldHVybiBDU19CQURfVFVQTEU7Ci0JaWYgKCpwID09IDB4ZmYpIGJyZWFrOworCWlmICgrK3AgPT0gcSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCpwID09IDB4ZmYpCisJCWJyZWFrOwogCXNjYWxlID0gKnAgJiA3OwotCWlmIChzY2FsZSA9PSA3KSByZXR1cm4gQ1NfQkFEX1RVUExFOworCWlmIChzY2FsZSA9PSA3KQorCQlyZXR1cm4gLUVJTlZBTDsKIAlkZXZpY2UtPmRldltpXS5zaXplID0gKCgqcCA+PiAzKSArIDEpICogKDUxMiA8PCAoc2NhbGUqMikpOwogCWRldmljZS0+bmRldisrOwotCWlmICgrK3AgPT0gcSkgYnJlYWs7CisJaWYgKCsrcCA9PSBxKQorCQlicmVhazsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtNjY3LDEyICs2ODAsMTIgQEAKIHsKICAgICB1X2NoYXIgKnA7CiAgICAgaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCA1KQotCXJldHVybiBDU19CQURfVFVQTEU7CisJcmV0dXJuIC1FSU5WQUw7CiAgICAgcCA9ICh1X2NoYXIgKikgdHVwbGUtPlR1cGxlRGF0YTsKICAgICBjc3VtLT5hZGRyID0gdHVwbGUtPkNJU09mZnNldCArIGdldF91bmFsaWduZWRfbGUxNihwKSAtIDI7CiAgICAgY3N1bS0+bGVuID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHAgKyAyKTsKICAgICBjc3VtLT5zdW0gPSAqKHAgKyA0KTsKLSAgICByZXR1cm4gQ1NfU1VDQ0VTUzsKKyAgICByZXR1cm4gMDsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC02ODAsOSArNjkzLDkgQEAKIHN0YXRpYyBpbnQgcGFyc2VfbG9uZ2xpbmsodHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9sb25nbGlua190ICpsaW5rKQogewogICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgNCkKLQlyZXR1cm4gQ1NfQkFEX1RVUExFOworCXJldHVybiAtRUlOVkFMOwogICAgIGxpbmstPmFkZHIgPSBnZXRfdW5hbGlnbmVkX2xlMzIodHVwbGUtPlR1cGxlRGF0YSk7Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtNjk3LDEzICs3MTAsMTMgQEAKICAgICAKICAgICBsaW5rLT5uZm4gPSAqcDsgcCsrOwogICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDw9IGxpbmstPm5mbio1KQotCXJldHVybiBDU19CQURfVFVQTEU7CisJcmV0dXJuIC1FSU5WQUw7CiAgICAgZm9yIChpID0gMDsgaSA8IGxpbmstPm5mbjsgaSsrKSB7CiAJbGluay0+Zm5baV0uc3BhY2UgPSAqcDsgcCsrOwogCWxpbmstPmZuW2ldLmFkZHIgPSBnZXRfdW5hbGlnbmVkX2xlMzIocCk7CiAJcCArPSA0OwogICAgIH0KLSAgICByZXR1cm4gQ1NfU1VDQ0VTUzsKKyAgICByZXR1cm4gMDsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC03MTMsMjQgKzcyNiwyNyBAQAogewogICAgIGludCBpLCBqLCBuczsKIAotICAgIGlmIChwID09IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisgICAgaWYgKHAgPT0gcSkKKwkgICAgcmV0dXJuIC1FSU5WQUw7CiAgICAgbnMgPSAwOyBqID0gMDsKICAgICBmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKLQlpZiAoKnAgPT0gMHhmZikgYnJlYWs7CisJaWYgKCpwID09IDB4ZmYpCisJCWJyZWFrOwogCW9mc1tpXSA9IGo7CiAJbnMrKzsKIAlmb3IgKDs7KSB7CiAJICAgIHNbaisrXSA9ICgqcCA9PSAweGZmKSA/ICdcMCcgOiAqcDsKIAkgICAgaWYgKCgqcCA9PSAnXDAnKSB8fCAoKnAgPT0gMHhmZikpIGJyZWFrOwotCSAgICBpZiAoKytwID09IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisJICAgIGlmICgrK3AgPT0gcSkKKwkJICAgIHJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoKCpwID09IDB4ZmYpIHx8ICgrK3AgPT0gcSkpIGJyZWFrOwogICAgIH0KICAgICBpZiAoZm91bmQpIHsKIAkqZm91bmQgPSBuczsKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKICAgICB9IGVsc2UgewotCXJldHVybiAobnMgPT0gbWF4KSA/IENTX1NVQ0NFU1MgOiBDU19CQURfVFVQTEU7CisJcmV0dXJuIChucyA9PSBtYXgpID8gMCA6IC1FSU5WQUw7CiAgICAgfQogfQogCkBAIC03NDUsNyArNzYxLDggQEAKICAgICAKICAgICB2ZXJzXzEtPm1ham9yID0gKnA7IHArKzsKICAgICB2ZXJzXzEtPm1pbm9yID0gKnA7IHArKzsKLSAgICBpZiAocCA+PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworICAgIGlmIChwID49IHEpCisJICAgIHJldHVybiAtRUlOVkFMOwogCiAgICAgcmV0dXJuIHBhcnNlX3N0cmluZ3MocCwgcSwgQ0lTVFBMX1ZFUlNfMV9NQVhfUFJPRF9TVFJJTkdTLAogCQkJIHZlcnNfMS0+c3RyLCB2ZXJzXzEtPm9mcywgJnZlcnNfMS0+bnMpOwpAQCAtNzgxLDcgKzc5OCw3IEBACiAJcCArPSAyOwogICAgIH0KICAgICBqZWRlYy0+bmlkID0gbmlkOwotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KQEAgLTc4OSwxMCArODA2LDEwIEBACiBzdGF0aWMgaW50IHBhcnNlX21hbmZpZCh0dXBsZV90ICp0dXBsZSwgY2lzdHBsX21hbmZpZF90ICptKQogewogICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgNCkKLQlyZXR1cm4gQ1NfQkFEX1RVUExFOworCXJldHVybiAtRUlOVkFMOwogICAgIG0tPm1hbmYgPSBnZXRfdW5hbGlnbmVkX2xlMTYodHVwbGUtPlR1cGxlRGF0YSk7CiAgICAgbS0+Y2FyZCA9IGdldF91bmFsaWduZWRfbGUxNih0dXBsZS0+VHVwbGVEYXRhICsgMik7Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtODAxLDExICs4MTgsMTEgQEAKIHsKICAgICB1X2NoYXIgKnA7CiAgICAgaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCAyKQotCXJldHVybiBDU19CQURfVFVQTEU7CisJcmV0dXJuIC1FSU5WQUw7CiAgICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwogICAgIGYtPmZ1bmMgPSBwWzBdOwogICAgIGYtPnN5c2luaXQgPSBwWzFdOwotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KQEAgLTgxNSwxMiArODMyLDEyIEBACiAgICAgdV9jaGFyICpwOwogICAgIGludCBpOwogICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgMSkKLQlyZXR1cm4gQ1NfQkFEX1RVUExFOworCXJldHVybiAtRUlOVkFMOwogICAgIHAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKICAgICBmLT50eXBlID0gcFswXTsKICAgICBmb3IgKGkgPSAxOyBpIDwgdHVwbGUtPlR1cGxlRGF0YUxlbjsgaSsrKQogCWYtPmRhdGFbaS0xXSA9IHBbaV07Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtODM0LDcgKzg1MSw3IEBACiAgICAgcmFzeiA9ICpwICYgMHgwMzsKICAgICBybXN6ID0gKCpwICYgMHgzYykgPj4gMjsKICAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IHJhc3orcm1zeis0KQotCXJldHVybiBDU19CQURfVFVQTEU7CisJcmV0dXJuIC1FSU5WQUw7CiAgICAgY29uZmlnLT5sYXN0X2lkeCA9ICooKytwKTsKICAgICBwKys7CiAgICAgY29uZmlnLT5iYXNlID0gMDsKQEAgLTg0Niw3ICs4NjMsNyBAQAogICAgIGZvciAoaSA9IDA7IGkgPD0gcm1zejsgaSsrKQogCWNvbmZpZy0+cm1hc2tbaT4+Ml0gKz0gcFtpXSA8PCAoOCooaSU0KSk7CiAgICAgY29uZmlnLT5zdWJ0dXBsZXMgPSB0dXBsZS0+VHVwbGVEYXRhTGVuIC0gKHJhc3orcm1zeis0KTsKLSAgICByZXR1cm4gQ1NfU1VDQ0VTUzsKKyAgICByZXR1cm4gMDsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMDAyLDEwICsxMDE5LDEyIEBACiAKIHN0YXRpYyB1X2NoYXIgKnBhcnNlX2lycSh1X2NoYXIgKnAsIHVfY2hhciAqcSwgY2lzdHBsX2lycV90ICppcnEpCiB7Ci0gICAgaWYgKHAgPT0gcSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKHAgPT0gcSkKKwkgICAgcmV0dXJuIE5VTEw7CiAgICAgaXJxLT5JUlFJbmZvMSA9ICpwOyBwKys7CiAgICAgaWYgKGlycS0+SVJRSW5mbzEgJiBJUlFfSU5GTzJfVkFMSUQpIHsKLQlpZiAocCsyID4gcSkgcmV0dXJuIE5VTEw7CisJaWYgKHArMiA+IHEpCisJCXJldHVybiBOVUxMOwogCWlycS0+SVJRSW5mbzIgPSAocFsxXTw8OCkgKyBwWzBdOwogCXAgKz0gMjsKICAgICB9CkBAIC0xMDI2LDcgKzEwNDUsOCBAQAogICAgIGlmICgqcCAmIDB4NDApCiAJZW50cnktPmZsYWdzIHw9IENJU1RQTF9DRlRBQkxFX0RFRkFVTFQ7CiAgICAgaWYgKCpwICYgMHg4MCkgewotCWlmICgrK3AgPT0gcSkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAoKytwID09IHEpCisJCXJldHVybiAtRUlOVkFMOwogCWlmICgqcCAmIDB4MTApCiAJICAgIGVudHJ5LT5mbGFncyB8PSBDSVNUUExfQ0ZUQUJMRV9CVkRTOwogCWlmICgqcCAmIDB4MjApCkBAIC0xMDQwLDMwICsxMDYwLDM1IEBACiAJZW50cnktPmludGVyZmFjZSA9IDA7CiAKICAgICAvKiBQcm9jZXNzIG9wdGlvbmFsIGZlYXR1cmVzICovCi0gICAgaWYgKCsrcCA9PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworICAgIGlmICgrK3AgPT0gcSkKKwkgICAgcmV0dXJuIC1FSU5WQUw7CiAgICAgZmVhdHVyZXMgPSAqcDsgcCsrOwogCiAgICAgLyogUG93ZXIgb3B0aW9ucyAqLwogICAgIGlmICgoZmVhdHVyZXMgJiAzKSA+IDApIHsKIAlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52Y2MpOwotCWlmIChwID09IE5VTEwpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAgICAgfSBlbHNlCiAJZW50cnktPnZjYy5wcmVzZW50ID0gMDsKICAgICBpZiAoKGZlYXR1cmVzICYgMykgPiAxKSB7CiAJcCA9IHBhcnNlX3Bvd2VyKHAsIHEsICZlbnRyeS0+dnBwMSk7Ci0JaWYgKHAgPT0gTlVMTCkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKICAgICB9IGVsc2UKIAllbnRyeS0+dnBwMS5wcmVzZW50ID0gMDsKICAgICBpZiAoKGZlYXR1cmVzICYgMykgPiAyKSB7CiAJcCA9IHBhcnNlX3Bvd2VyKHAsIHEsICZlbnRyeS0+dnBwMik7Ci0JaWYgKHAgPT0gTlVMTCkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKICAgICB9IGVsc2UKIAllbnRyeS0+dnBwMi5wcmVzZW50ID0gMDsKIAogICAgIC8qIFRpbWluZyBvcHRpb25zICovCiAgICAgaWYgKGZlYXR1cmVzICYgMHgwNCkgewogCXAgPSBwYXJzZV90aW1pbmcocCwgcSwgJmVudHJ5LT50aW1pbmcpOwotCWlmIChwID09IE5VTEwpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAgICAgfSBlbHNlIHsKIAllbnRyeS0+dGltaW5nLndhaXQgPSAwOwogCWVudHJ5LT50aW1pbmcucmVhZHkgPSAwOwpAQCAtMTA3MywxNCArMTA5OCwxNiBAQAogICAgIC8qIEkvTyB3aW5kb3cgb3B0aW9ucyAqLwogICAgIGlmIChmZWF0dXJlcyAmIDB4MDgpIHsKIAlwID0gcGFyc2VfaW8ocCwgcSwgJmVudHJ5LT5pbyk7Ci0JaWYgKHAgPT0gTlVMTCkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKICAgICB9IGVsc2UKIAllbnRyeS0+aW8ubndpbiA9IDA7CiAgICAgCiAgICAgLyogSW50ZXJydXB0IG9wdGlvbnMgKi8KICAgICBpZiAoZmVhdHVyZXMgJiAweDEwKSB7CiAJcCA9IHBhcnNlX2lycShwLCBxLCAmZW50cnktPmlycSk7Ci0JaWYgKHAgPT0gTlVMTCkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKICAgICB9IGVsc2UKIAllbnRyeS0+aXJxLklSUUluZm8xID0gMDsKIApAQCAtMTA5NCw3ICsxMTIxLDggQEAKIAllbnRyeS0+bWVtLndpblswXS5jYXJkX2FkZHIgPSAwOwogCWVudHJ5LT5tZW0ud2luWzBdLmhvc3RfYWRkciA9IDA7CiAJcCArPSAyOwotCWlmIChwID4gcSkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAocCA+IHEpCisJCXJldHVybiAtRUlOVkFMOwogCWJyZWFrOwogICAgIGNhc2UgMHg0MDoKIAllbnRyeS0+bWVtLm53aW4gPSAxOwpAQCAtMTEwMiwyNiArMTEzMCwzMCBAQAogCWVudHJ5LT5tZW0ud2luWzBdLmNhcmRfYWRkciA9IGdldF91bmFsaWduZWRfbGUxNihwICsgMikgPDwgODsKIAllbnRyeS0+bWVtLndpblswXS5ob3N0X2FkZHIgPSAwOwogCXAgKz0gNDsKLQlpZiAocCA+IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPiBxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlicmVhazsKICAgICBjYXNlIDB4NjA6CiAJcCA9IHBhcnNlX21lbShwLCBxLCAmZW50cnktPm1lbSk7Ci0JaWYgKHAgPT0gTlVMTCkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlicmVhazsKICAgICB9CiAKICAgICAvKiBNaXNjIGZlYXR1cmVzICovCiAgICAgaWYgKGZlYXR1cmVzICYgMHg4MCkgewotCWlmIChwID09IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPT0gcSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJZW50cnktPmZsYWdzIHw9ICgqcCA8PCA4KTsKIAl3aGlsZSAoKnAgJiAweDgwKQotCSAgICBpZiAoKytwID09IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisJICAgIGlmICgrK3AgPT0gcSkKKwkJICAgIHJldHVybiAtRUlOVkFMOwogCXArKzsKICAgICB9CiAKICAgICBlbnRyeS0+c3VidHVwbGVzID0gcS1wOwogICAgIAotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KQEAgLTExMzIsMTIgKzExNjQsMTIgQEAKIHsKICAgICB1X2NoYXIgKnA7CiAgICAgaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCA2KQotCXJldHVybiBDU19CQURfVFVQTEU7CisJcmV0dXJuIC1FSU5WQUw7CiAgICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwogICAgIGJhci0+YXR0ciA9ICpwOwogICAgIHAgKz0gMjsKICAgICBiYXItPnNpemUgPSBnZXRfdW5hbGlnbmVkX2xlMzIocCk7Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGFyc2VfY29uZmlnX2NiKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfY29uZmlnX3QgKmNvbmZpZykKQEAgLTExNDYsMTIgKzExNzgsMTIgQEAKICAgICAKICAgICBwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7CiAgICAgaWYgKCgqcCAhPSAzKSB8fCAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDYpKQotCXJldHVybiBDU19CQURfVFVQTEU7CisJcmV0dXJuIC1FSU5WQUw7CiAgICAgY29uZmlnLT5sYXN0X2lkeCA9ICooKytwKTsKICAgICBwKys7CiAgICAgY29uZmlnLT5iYXNlID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHApOwogICAgIGNvbmZpZy0+c3VidHVwbGVzID0gdHVwbGUtPlR1cGxlRGF0YUxlbiAtIDY7Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGFyc2VfY2Z0YWJsZV9lbnRyeV9jYih0dXBsZV90ICp0dXBsZSwKQEAgLTExNjcsMjkgKzExOTksMzQgQEAKIAllbnRyeS0+ZmxhZ3MgfD0gQ0lTVFBMX0NGVEFCTEVfREVGQVVMVDsKIAogICAgIC8qIFByb2Nlc3Mgb3B0aW9uYWwgZmVhdHVyZXMgKi8KLSAgICBpZiAoKytwID09IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisgICAgaWYgKCsrcCA9PSBxKQorCSAgICByZXR1cm4gLUVJTlZBTDsKICAgICBmZWF0dXJlcyA9ICpwOyBwKys7CiAKICAgICAvKiBQb3dlciBvcHRpb25zICovCiAgICAgaWYgKChmZWF0dXJlcyAmIDMpID4gMCkgewogCXAgPSBwYXJzZV9wb3dlcihwLCBxLCAmZW50cnktPnZjYyk7Ci0JaWYgKHAgPT0gTlVMTCkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKICAgICB9IGVsc2UKIAllbnRyeS0+dmNjLnByZXNlbnQgPSAwOwogICAgIGlmICgoZmVhdHVyZXMgJiAzKSA+IDEpIHsKIAlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52cHAxKTsKLQlpZiAocCA9PSBOVUxMKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCWlmIChwID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOwogICAgIH0gZWxzZQogCWVudHJ5LT52cHAxLnByZXNlbnQgPSAwOwogICAgIGlmICgoZmVhdHVyZXMgJiAzKSA+IDIpIHsKIAlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52cHAyKTsKLQlpZiAocCA9PSBOVUxMKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCWlmIChwID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOwogICAgIH0gZWxzZQogCWVudHJ5LT52cHAyLnByZXNlbnQgPSAwOwogCiAgICAgLyogSS9PIHdpbmRvdyBvcHRpb25zICovCiAgICAgaWYgKGZlYXR1cmVzICYgMHgwOCkgewotCWlmIChwID09IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPT0gcSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJZW50cnktPmlvID0gKnA7IHArKzsKICAgICB9IGVsc2UKIAllbnRyeS0+aW8gPSAwOwpAQCAtMTE5NywzMiArMTIzNCwzNyBAQAogICAgIC8qIEludGVycnVwdCBvcHRpb25zICovCiAgICAgaWYgKGZlYXR1cmVzICYgMHgxMCkgewogCXAgPSBwYXJzZV9pcnEocCwgcSwgJmVudHJ5LT5pcnEpOwotCWlmIChwID09IE5VTEwpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAgICAgfSBlbHNlCiAJZW50cnktPmlycS5JUlFJbmZvMSA9IDA7CiAKICAgICBpZiAoZmVhdHVyZXMgJiAweDIwKSB7Ci0JaWYgKHAgPT0gcSkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAocCA9PSBxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAllbnRyeS0+bWVtID0gKnA7IHArKzsKICAgICB9IGVsc2UKIAllbnRyeS0+bWVtID0gMDsKIAogICAgIC8qIE1pc2MgZmVhdHVyZXMgKi8KICAgICBpZiAoZmVhdHVyZXMgJiAweDgwKSB7Ci0JaWYgKHAgPT0gcSkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAocCA9PSBxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAllbnRyeS0+ZmxhZ3MgfD0gKCpwIDw8IDgpOwogCWlmICgqcCAmIDB4ODApIHsKLQkgICAgaWYgKCsrcCA9PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCSAgICBpZiAoKytwID09IHEpCisJCSAgICByZXR1cm4gLUVJTlZBTDsKIAkgICAgZW50cnktPmZsYWdzIHw9ICgqcCA8PCAxNik7CiAJfQogCXdoaWxlICgqcCAmIDB4ODApCi0JICAgIGlmICgrK3AgPT0gcSkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwkgICAgaWYgKCsrcCA9PSBxKQorCQkgICAgcmV0dXJuIC1FSU5WQUw7CiAJcCsrOwogICAgIH0KIAogICAgIGVudHJ5LT5zdWJ0dXBsZXMgPSBxLXA7CiAgICAgCi0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiAKICNlbmRpZgpAQCAtMTI0OCw3ICsxMjkwLDcgQEAKIAlwICs9IDY7CiAgICAgfQogICAgIGdlby0+bmdlbyA9IG47Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtMTI1OCw3ICsxMzAwLDcgQEAKICAgICB1X2NoYXIgKnAsICpxOwogCiAgICAgaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCAxMCkKLQlyZXR1cm4gQ1NfQkFEX1RVUExFOworCXJldHVybiAtRUlOVkFMOwogICAgIAogICAgIHAgPSB0dXBsZS0+VHVwbGVEYXRhOwogICAgIHEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKQEAgLTEyODIsMTUgKzEzMjQsMTggQEAKICAgICAKICAgICBwID0gdHVwbGUtPlR1cGxlRGF0YTsKICAgICBxID0gcCArIHR1cGxlLT5UdXBsZURhdGFMZW47Ci0gICAgaWYgKHAgPT0gcSkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKyAgICBpZiAocCA9PSBxKQorCSAgICByZXR1cm4gLUVJTlZBTDsKICAgICBvcmctPmRhdGFfb3JnID0gKnA7Ci0gICAgaWYgKCsrcCA9PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworICAgIGlmICgrK3AgPT0gcSkKKwkgICAgcmV0dXJuIC1FSU5WQUw7CiAgICAgZm9yIChpID0gMDsgaSA8IDMwOyBpKyspIHsKIAlvcmctPmRlc2NbaV0gPSAqcDsKIAlpZiAoKnAgPT0gJ1wwJykgYnJlYWs7Ci0JaWYgKCsrcCA9PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCWlmICgrK3AgPT0gcSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAgICAgfQotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KQEAgLTEzMDAsNyArMTM0NSw3IEBACiAgICAgdV9jaGFyICpwOwogCiAgICAgaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCAxMCkKLQlyZXR1cm4gQ1NfQkFEX1RVUExFOworCXJldHVybiAtRUlOVkFMOwogCiAgICAgcCA9IHR1cGxlLT5UdXBsZURhdGE7CiAKQEAgLTEzMDksMTcgKzEzNTQsMTcgQEAKICAgICBmbXQtPm9mZnNldCA9IGdldF91bmFsaWduZWRfbGUzMihwICsgMik7CiAgICAgZm10LT5sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2xlMzIocCArIDYpOwogCi0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1pbnQgcGNjYXJkX3BhcnNlX3R1cGxlKHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKK2ludCBwY21jaWFfcGFyc2VfdHVwbGUodHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQogewotICAgIGludCByZXQgPSBDU19TVUNDRVNTOworICAgIGludCByZXQgPSAwOwogICAgIAogICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuID4gdHVwbGUtPlR1cGxlRGF0YU1heCkKLQlyZXR1cm4gQ1NfQkFEX1RVUExFOworCXJldHVybiAtRUlOVkFMOwogICAgIHN3aXRjaCAodHVwbGUtPlR1cGxlQ29kZSkgewogICAgIGNhc2UgQ0lTVFBMX0RFVklDRToKICAgICBjYXNlIENJU1RQTF9ERVZJQ0VfQToKQEAgLTEzODcsMTUgKzE0MzIsMTcgQEAKIAlicmVhazsKICAgICBjYXNlIENJU1RQTF9OT19MSU5LOgogICAgIGNhc2UgQ0lTVFBMX0xJTktUQVJHRVQ6Ci0JcmV0ID0gQ1NfU1VDQ0VTUzsKKwlyZXQgPSAwOwogCWJyZWFrOwogICAgIGRlZmF1bHQ6Ci0JcmV0ID0gQ1NfVU5TVVBQT1JURURfRlVOQ1RJT047CisJcmV0ID0gLUVJTlZBTDsKIAlicmVhazsKICAgICB9CisgICAgaWYgKHJldCkKKwkgICAgX19jc19kYmcoMCwgInBhcnNlX3R1cGxlIGZhaWxlZCAlZFxuIiwgcmV0KTsKICAgICByZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChwY2NhcmRfcGFyc2VfdHVwbGUpOworRVhQT1JUX1NZTUJPTChwY21jaWFfcGFyc2VfdHVwbGUpOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMTQxMCwxOCArMTQ1NywyMiBAQAogICAgIGludCByZXQ7CiAKICAgICBidWYgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKGJ1ZiA9PSBOVUxMKQotCXJldHVybiBDU19PVVRfT0ZfUkVTT1VSQ0U7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisJICAgIGRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHJlYWQgdHVwbGVcbiIpOworCSAgICByZXR1cm4gLUVOT01FTTsKKyAgICB9CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gY29kZTsKICAgICB0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKICAgICByZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIGZ1bmN0aW9uLCAmdHVwbGUpOwotICAgIGlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgZ290byBkb25lOworICAgIGlmIChyZXQgIT0gMCkKKwkgICAgZ290byBkb25lOwogICAgIHR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAgICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwogICAgIHJldCA9IHBjY2FyZF9nZXRfdHVwbGVfZGF0YShzLCAmdHVwbGUpOwotICAgIGlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgZ290byBkb25lOwotICAgIHJldCA9IHBjY2FyZF9wYXJzZV90dXBsZSgmdHVwbGUsIHBhcnNlKTsKKyAgICBpZiAocmV0ICE9IDApCisJICAgIGdvdG8gZG9uZTsKKyAgICByZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCBwYXJzZSk7CiBkb25lOgogICAgIGtmcmVlKGJ1Zik7CiAgICAgcmV0dXJuIHJldDsKQEAgLTE0NDYsMzcgKzE0OTcsNDAgQEAKICAgICBpbnQgcmV0LCByZXNlcnZlZCwgZGV2X29rID0gMCwgaWRlbnRfb2sgPSAwOwogCiAgICAgaWYgKCFzKQotCXJldHVybiBDU19CQURfSEFORExFOworCXJldHVybiAtRUlOVkFMOwogCiAgICAgdHVwbGUgPSBrbWFsbG9jKHNpemVvZigqdHVwbGUpLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAodHVwbGUgPT0gTlVMTCkKLQlyZXR1cm4gQ1NfT1VUX09GX1JFU09VUkNFOworICAgIGlmICh0dXBsZSA9PSBOVUxMKSB7CisJICAgIGRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHZhbGlkYXRlIENJU1xuIik7CisJICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KICAgICBwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKICAgICBpZiAocCA9PSBOVUxMKSB7Ci0Ja2ZyZWUodHVwbGUpOwotCXJldHVybiBDU19PVVRfT0ZfUkVTT1VSQ0U7CisJICAgIGtmcmVlKHR1cGxlKTsKKwkgICAgZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsICJubyBtZW1vcnkgdG8gdmFsaWRhdGUgQ0lTXG4iKTsKKwkgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgfQogCiAgICAgY291bnQgPSByZXNlcnZlZCA9IDA7CiAgICAgdHVwbGUtPkRlc2lyZWRUdXBsZSA9IFJFVFVSTl9GSVJTVF9UVVBMRTsKICAgICB0dXBsZS0+QXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047CiAgICAgcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpOwotICAgIGlmIChyZXQgIT0gQ1NfU1VDQ0VTUykKKyAgICBpZiAocmV0ICE9IDApCiAJZ290byBkb25lOwogCiAgICAgLyogRmlyc3QgdHVwbGUgc2hvdWxkIGJlIERFVklDRTsgd2Ugc2hvdWxkIHJlYWxseSBoYXZlIGVpdGhlciB0aGF0CiAgICAgICAgb3IgYSBDRlRBQkxFX0VOVFJZIG9mIHNvbWUgc29ydCAqLwogICAgIGlmICgodHVwbGUtPlR1cGxlQ29kZSA9PSBDSVNUUExfREVWSUNFKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX0NGVEFCTEVfRU5UUlksIHApID09IENTX1NVQ0NFU1MpIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWV9DQiwgcCkgPT0gQ1NfU1VDQ0VTUykpCisJKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWSwgcCkgPT0gMCkgfHwKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9DRlRBQkxFX0VOVFJZX0NCLCBwKSA9PSAwKSkKIAlkZXZfb2srKzsKIAogICAgIC8qIEFsbCBjYXJkcyBzaG91bGQgaGF2ZSBhIE1BTkZJRCB0dXBsZSwgYW5kL29yIGEgVkVSU18xIG9yIFZFUlNfMgogICAgICAgIHR1cGxlLCBmb3IgY2FyZCBpZGVudGlmaWNhdGlvbi4gIENlcnRhaW4gb2xkIEQtTGluayBhbmQgTGlua3N5cwogICAgICAgIGNhcmRzIGhhdmUgb25seSBhIGJyb2tlbiBWRVJTXzIgdHVwbGU7IGhlbmNlIHRoZSBib2d1cyB0ZXN0LiAqLwotICAgIGlmICgocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9NQU5GSUQsIHApID09IENTX1NVQ0NFU1MpIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfVkVSU18xLCBwKSA9PSBDU19TVUNDRVNTKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX1ZFUlNfMiwgcCkgIT0gQ1NfTk9fTU9SRV9JVEVNUykpCisgICAgaWYgKChwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX01BTkZJRCwgcCkgPT0gMCkgfHwKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9WRVJTXzEsIHApID09IDApIHx8CisJKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfVkVSU18yLCBwKSAhPSAtRU5PU1BDKSkKIAlpZGVudF9vaysrOwogCiAgICAgaWYgKCFkZXZfb2sgJiYgIWlkZW50X29rKQpAQCAtMTQ4NCw3ICsxNTM4LDggQEAKIAogICAgIGZvciAoY291bnQgPSAxOyBjb3VudCA8IE1BWF9UVVBMRVM7IGNvdW50KyspIHsKIAlyZXQgPSBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKTsKLQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIGJyZWFrOworCWlmIChyZXQgIT0gMCkKKwkJYnJlYWs7CiAJaWYgKCgodHVwbGUtPlR1cGxlQ29kZSA+IDB4MjMpICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHg0MCkpIHx8CiAJICAgICgodHVwbGUtPlR1cGxlQ29kZSA+IDB4NDcpICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHg4MCkpIHx8CiAJICAgICgodHVwbGUtPlR1cGxlQ29kZSA+IDB4OTApICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHhmZikpKQpAQCAtMTQ5OSw2ICsxNTU0LDYgQEAKIAkgICAgKmluZm8gPSBjb3VudDsKICAgICBrZnJlZSh0dXBsZSk7CiAgICAga2ZyZWUocCk7Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHBjY2FyZF92YWxpZGF0ZV9jaXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY3MuYyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKaW5kZXggZDEyMDczOS4uYzY4YzVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY3MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCkBAIC02MSw3ICs2MSw3IEBACiAvKiBBY2Nlc3Mgc3BlZWQgZm9yIGF0dHJpYnV0ZSBtZW1vcnkgd2luZG93cyAqLwogSU5UX01PRFVMRV9QQVJNKGNpc19zcGVlZCwJMzAwKTsJCS8qIG5zICovCiAKLSNpZmRlZiBERUJVRworI2lmZGVmIENPTkZJR19QQ01DSUFfREVCVUcKIHN0YXRpYyBpbnQgcGNfZGVidWc7CiAKIG1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjQ0KTsKQEAgLTI0Nyw3ICsyNDcsOCBAQAogCiAJd2FpdF9mb3JfY29tcGxldGlvbigmc29ja2V0LT50aHJlYWRfZG9uZSk7CiAJaWYgKCFzb2NrZXQtPnRocmVhZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ01DSUE6IHdhcm5pbmc6IHNvY2tldCB0aHJlYWQgZm9yIHNvY2tldCAlcCBkaWQgbm90IHN0YXJ0XG4iLCBzb2NrZXQpOworCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnNvY2tldC0+ZGV2LAorCQkJICAgIlBDTUNJQTogd2FybmluZzogc29ja2V0IHRocmVhZCBkaWQgbm90IHN0YXJ0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0zNjYsMTYgKzM2NywxNiBAQAogCQlza3QtPm9wcy0+Z2V0X3N0YXR1cyhza3QsICZzdGF0dXMpOwogCiAJCWlmICghKHN0YXR1cyAmIFNTX0RFVEVDVCkpCi0JCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKKwkJCXJldHVybiAtRU5PREVWOwogCiAJCWlmIChzdGF0dXMgJiBTU19SRUFEWSkKLQkJCXJldHVybiBDU19TVUNDRVNTOworCQkJcmV0dXJuIDA7CiAKIAkJbXNsZWVwKHVucmVzZXRfY2hlY2sgKiAxMCk7CiAJfQogCiAJY3NfZXJyKHNrdCwgInRpbWUgb3V0IGFmdGVyIHJlc2V0LlxuIik7Ci0JcmV0dXJuIENTX0dFTkVSQUxfRkFJTFVSRTsKKwlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KIAogLyoKQEAgLTQxMiw3ICs0MTMsOCBAQAogCiAJcy0+b3BzLT5nZXRfc3RhdHVzKHMsICZzdGF0dXMpOwogCWlmIChzdGF0dXMgJiBTU19QT1dFUk9OKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUENNQ0lBOiBzb2NrZXQgJXA6ICoqKiBEQU5HRVIgKioqIHVuYWJsZSB0byByZW1vdmUgc29ja2V0IHBvd2VyXG4iLCBzKTsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnMtPmRldiwKKwkJCSAgICIqKiogREFOR0VSICoqKiB1bmFibGUgdG8gcmVtb3ZlIHNvY2tldCBwb3dlclxuIik7CiAJfQogCiAJY3Nfc29ja2V0X3B1dChzKTsKQEAgLTQyNiwxNCArNDI4LDE0IEBACiAKIAlza3QtPm9wcy0+Z2V0X3N0YXR1cyhza3QsICZzdGF0dXMpOwogCWlmICghKHN0YXR1cyAmIFNTX0RFVEVDVCkpCi0JCXJldHVybiBDU19OT19DQVJEOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCW1zbGVlcChpbml0aWFsX2RlbGF5ICogMTApOwogCiAJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CiAJCXNrdC0+b3BzLT5nZXRfc3RhdHVzKHNrdCwgJnN0YXR1cyk7CiAJCWlmICghKHN0YXR1cyAmIFNTX0RFVEVDVCkpCi0JCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKKwkJCXJldHVybiAtRU5PREVWOwogCiAJCWlmICghKHN0YXR1cyAmIFNTX1BFTkRJTkcpKQogCQkJYnJlYWs7CkBAIC00NDMsMTMgKzQ0NSwxMyBAQAogCiAJaWYgKHN0YXR1cyAmIFNTX1BFTkRJTkcpIHsKIAkJY3NfZXJyKHNrdCwgInZvbHRhZ2UgaW50ZXJyb2dhdGlvbiB0aW1lZCBvdXQuXG4iKTsKLQkJcmV0dXJuIENTX0dFTkVSQUxfRkFJTFVSRTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCiAJaWYgKHN0YXR1cyAmIFNTX0NBUkRCVVMpIHsKIAkJaWYgKCEoc2t0LT5mZWF0dXJlcyAmIFNTX0NBUF9DQVJEQlVTKSkgewogCQkJY3NfZXJyKHNrdCwgImNhcmRidXMgY2FyZHMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4iKTsKLQkJCXJldHVybiBDU19CQURfVFlQRTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXNrdC0+c3RhdGUgfD0gU09DS0VUX0NBUkRCVVM7CiAJfQpAQCAtNDYzLDcgKzQ2NSw3IEBACiAJCXNrdC0+c29ja2V0LlZjYyA9IHNrdC0+c29ja2V0LlZwcCA9IDUwOwogCWVsc2UgewogCQljc19lcnIoc2t0LCAidW5zdXBwb3J0ZWQgdm9sdGFnZSBrZXkuXG4iKTsKLQkJcmV0dXJuIENTX0JBRF9UWVBFOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAoc2t0LT5wb3dlcl9ob29rKQpAQCAtNDgwLDcgKzQ4Miw3IEBACiAJc2t0LT5vcHMtPmdldF9zdGF0dXMoc2t0LCAmc3RhdHVzKTsKIAlpZiAoIShzdGF0dXMgJiBTU19QT1dFUk9OKSkgewogCQljc19lcnIoc2t0LCAidW5hYmxlIHRvIGFwcGx5IHBvd2VyLlxuIik7Ci0JCXJldHVybiBDU19CQURfVFlQRTsKKwkJcmV0dXJuIC1FSU87CiAJfQogCiAJc3RhdHVzID0gc29ja2V0X3Jlc2V0KHNrdCk7CkBAIC01MDIsMTUgKzUwNCwxNiBAQAogCWNzX2RiZyhza3QsIDQsICJpbnNlcnRcbiIpOwogCiAJaWYgKCFjc19zb2NrZXRfZ2V0KHNrdCkpCi0JCXJldHVybiBDU19OT19DQVJEOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldCA9IHNvY2tldF9zZXR1cChza3QsIHNldHVwX2RlbGF5KTsKLQlpZiAocmV0ID09IENTX1NVQ0NFU1MpIHsKKwlpZiAocmV0ID09IDApIHsKIAkJc2t0LT5zdGF0ZSB8PSBTT0NLRVRfUFJFU0VOVDsKIAotCQlwcmludGsoS0VSTl9OT1RJQ0UgInBjY2FyZDogJXMgY2FyZCBpbnNlcnRlZCBpbnRvIHNsb3QgJWRcbiIsCi0JCSAgICAgICAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSA/ICJDYXJkQnVzIiA6ICJQQ01DSUEiLAotCQkgICAgICAgc2t0LT5zb2NrKTsKKwkJZGV2X3ByaW50ayhLRVJOX05PVElDRSwgJnNrdC0+ZGV2LAorCQkJICAgInBjY2FyZDogJXMgY2FyZCBpbnNlcnRlZCBpbnRvIHNsb3QgJWRcbiIsCisJCQkgICAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSA/ICJDYXJkQnVzIiA6ICJQQ01DSUEiLAorCQkJICAgc2t0LT5zb2NrKTsKIAogI2lmZGVmIENPTkZJR19DQVJEQlVTCiAJCWlmIChza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpIHsKQEAgLTUzMSw3ICs1MzQsNyBAQAogc3RhdGljIGludCBzb2NrZXRfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewogCWlmIChza3QtPnN0YXRlICYgU09DS0VUX1NVU1BFTkQpCi0JCXJldHVybiBDU19JTl9VU0U7CisJCXJldHVybiAtRUJVU1k7CiAKIAlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfUE1fU1VTUEVORCwgQ1NfRVZFTlRfUFJJX0xPVyk7CiAJc2t0LT5zb2NrZXQgPSBkZWFkX3NvY2tldDsKQEAgLTU0MCw3ICs1NDMsNyBAQAogCQlza3QtPm9wcy0+c3VzcGVuZChza3QpOwogCXNrdC0+c3RhdGUgfD0gU09DS0VUX1NVU1BFTkQ7CiAKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTU1Myw3ICs1NTYsNyBAQAogCWludCByZXQ7CiAKIAlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1NVU1BFTkQpKQotCQlyZXR1cm4gQ1NfSU5fVVNFOworCQlyZXR1cm4gLUVCVVNZOwogCiAJc2t0LT5zb2NrZXQgPSBkZWFkX3NvY2tldDsKIAlza3QtPm9wcy0+aW5pdChza3QpOwpAQCAtNTY1LDcgKzU2OCw3IEBACiAJfQogCiAJcmV0ID0gc29ja2V0X3NldHVwKHNrdCwgcmVzdW1lX2RlbGF5KTsKLQlpZiAocmV0ID09IENTX1NVQ0NFU1MpIHsKKwlpZiAocmV0ID09IDApIHsKIAkJLyoKIAkJICogRklYTUU6IG5lZWQgYSBiZXR0ZXIgY2hlY2sgaGVyZSBmb3IgY2FyZGJ1cyBjYXJkcy4KIAkJICovCkBAIC01OTAsMTIgKzU5MywxMyBAQAogCiAJc2t0LT5zdGF0ZSAmPSB+U09DS0VUX1NVU1BFTkQ7CiAKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc29ja2V0X3JlbW92ZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewotCXByaW50ayhLRVJOX05PVElDRSAicGNjYXJkOiBjYXJkIGVqZWN0ZWQgZnJvbSBzbG90ICVkXG4iLCBza3QtPnNvY2spOworCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZza3QtPmRldiwKKwkJICAgInBjY2FyZDogY2FyZCBlamVjdGVkIGZyb20gc2xvdCAlZFxuIiwgc2t0LT5zb2NrKTsKIAlzb2NrZXRfc2h1dGRvd24oc2t0KTsKIH0KIApAQCAtNjQxLDggKzY0NSw4IEBACiAJLyogcmVnaXN0ZXIgd2l0aCB0aGUgZGV2aWNlIGNvcmUgKi8KIAlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJnNrdC0+ZGV2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDTUNJQTogdW5hYmxlIHRvIHJlZ2lzdGVyIHNvY2tldCAweCVwXG4iLAotCQkJc2t0KTsKKwkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZza3QtPmRldiwKKwkJCSAgICJQQ01DSUE6IHVuYWJsZSB0byByZWdpc3RlciBzb2NrZXRcbiIpOwogCQlza3QtPnRocmVhZCA9IE5VTEw7CiAJCWNvbXBsZXRlKCZza3QtPnRocmVhZF9kb25lKTsKIAkJcmV0dXJuIDA7CkBAIC03NDgsNyArNzUyLDcgQEAKICAqIENJUyByZWdpc3Rlci4KICAqLwogCi1pbnQgcGNjYXJkX3Jlc2V0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK2ludCBwY21jaWFfcmVzZXRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewogCWludCByZXQ7CiAKQEAgLTc1NywxNSArNzYxLDE1IEBACiAJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwogCWRvIHsKIAkJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewotCQkJcmV0ID0gQ1NfTk9fQ0FSRDsKKwkJCXJldCA9IC1FTk9ERVY7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSB7Ci0JCQlyZXQgPSBDU19JTl9VU0U7CisJCQlyZXQgPSAtRUJVU1k7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSB7Ci0JCQlyZXQgPSBDU19VTlNVUFBPUlRFRF9GVU5DVElPTjsKKwkJCXJldCA9IC1FUEVSTTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTc3NCwyMCArNzc4LDIwIEBACiAJCQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwsIENTX0VWRU5UX1BSSV9MT1cpOwogCQkJaWYgKHNrdC0+Y2FsbGJhY2spCiAJCQkJc2t0LT5jYWxsYmFjay0+c3VzcGVuZChza3QpOwotCQkJaWYgKHNvY2tldF9yZXNldChza3QpID09IENTX1NVQ0NFU1MpIHsKKwkJCWlmIChzb2NrZXRfcmVzZXQoc2t0KSA9PSAwKSB7CiAJCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfUkVTRVQsIENTX0VWRU5UX1BSSV9MT1cpOwogCQkJCWlmIChza3QtPmNhbGxiYWNrKQogCQkJCQlza3QtPmNhbGxiYWNrLT5yZXN1bWUoc2t0KTsKIAkJCX0KIAkJfQogCi0JCXJldCA9IENTX1NVQ0NFU1M7CisJCXJldCA9IDA7CiAJfSB3aGlsZSAoMCk7CiAJbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfSAvKiByZXNldF9jYXJkICovCi1FWFBPUlRfU1lNQk9MKHBjY2FyZF9yZXNldF9jYXJkKTsKK0VYUE9SVF9TWU1CT0wocGNtY2lhX3Jlc2V0X2NhcmQpOwogCiAKIC8qIFRoZXNlIHNodXQgZG93biBvciB3YWtlIHVwIGEgc29ja2V0LiAgVGhleSBhcmUgc29ydCBvZiB1c2VyCkBAIC04MDIsMTEgKzgwNiwxMSBAQAogCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKIAlkbyB7CiAJCWlmICghKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKLQkJCXJldCA9IENTX05PX0NBUkQ7CisJCQlyZXQgPSAtRU5PREVWOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgewotCQkJcmV0ID0gQ1NfVU5TVVBQT1JURURfRlVOQ1RJT047CisJCQlyZXQgPSAtRVBFUk07CiAJCQlicmVhazsKIAkJfQogCQlpZiAoc2t0LT5jYWxsYmFjaykgewpAQCAtODMyLDExICs4MzYsMTEgQEAKIAltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAJZG8gewogCQlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7Ci0JCQlyZXQgPSBDU19OT19DQVJEOworCQkJcmV0ID0gLUVOT0RFVjsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpIHsKLQkJCXJldCA9IENTX1VOU1VQUE9SVEVEX0ZVTkNUSU9OOworCQkJcmV0ID0gLUVQRVJNOwogCQkJYnJlYWs7CiAJCX0KIAkJcmV0ID0gc29ja2V0X3Jlc3VtZShza3QpOwpAQCAtODkyLDcgKzg5Niw3IEBACiAJCQlyZXQgPSAtRUJVU1k7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoc29ja2V0X2luc2VydChza3QpID09IENTX05PX0NBUkQpIHsKKwkJaWYgKHNvY2tldF9pbnNlcnQoc2t0KSA9PSAtRU5PREVWKSB7CiAJCQlyZXQgPSAtRU5PREVWOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmggYi9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCmluZGV4IDYzZGMxYTIuLjc5NjE1ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBjc19pbnRlcm5hbC5oCisgKiBjc19pbnRlcm5hbC5oIC0tIGRlZmluaXRpb25zIGludGVybmFsIHRvIHRoZSBQQ01DSUEgY29yZSBtb2R1bGVzCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMCw2ICsxMCwxMiBAQAogICogYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogKEMpIDE5OTkJCURhdmlkIEEuIEhpbmRzCisgKiAoQykgMjAwMyAtIDIwMDgJRG9taW5payBCcm9kb3dza2kKKyAqCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIF9vbmx5XyBuZWVkZWQgYnkgdGhlIFBDTUNJQSBjb3JlIG1vZHVsZXMuCisgKiBJdCBtdXN0IG5vdCBiZSBpbmNsdWRlZCBieSBQQ01DSUEgc29ja2V0IGRyaXZlcnMgb3IgYnkgUENNQ0lBIGRldmljZQorICogZHJpdmVycy4KICAqLwogCiAjaWZuZGVmIF9MSU5VWF9DU19JTlRFUk5BTF9ICkBAIC0xOCwyOSArMjQsMjQgQEAKICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAKIC8qIEZsYWdzIGluIGNsaWVudCBzdGF0ZSAqLwotI2RlZmluZSBDTElFTlRfQ09ORklHX0xPQ0tFRAkweDAwMDEKLSNkZWZpbmUgQ0xJRU5UX0lSUV9SRVEJCTB4MDAwMgotI2RlZmluZSBDTElFTlRfSU9fUkVRCQkweDAwMDQKLSNkZWZpbmUgQ0xJRU5UX1VOQk9VTkQJCTB4MDAwOAotI2RlZmluZSBDTElFTlRfU1RBTEUJCTB4MDAxMAogI2RlZmluZSBDTElFTlRfV0lOX1JFUShpKQkoMHgxPDwoaSkpCi0jZGVmaW5lIENMSUVOVF9DQVJEQlVTCQkweDgwMDAKIAogLyogRWFjaCBjYXJkIGZ1bmN0aW9uIGdldHMgb25lIG9mIHRoZXNlIGd1eXMgKi8KIHR5cGVkZWYgc3RydWN0IGNvbmZpZ190IHsKIAlzdHJ1Y3Qga3JlZglyZWY7Ci0gICAgdV9pbnQJCXN0YXRlOwotICAgIHVfaW50CQlBdHRyaWJ1dGVzOwotICAgIHVfaW50CQlJbnRUeXBlOwotICAgIHVfaW50CQlDb25maWdCYXNlOwotICAgIHVfY2hhcgkJU3RhdHVzLCBQaW4sIENvcHksIE9wdGlvbiwgRXh0U3RhdHVzOwotICAgIHVfaW50CQlDYXJkVmFsdWVzOwotICAgIGlvX3JlcV90CQlpbzsKLSAgICBzdHJ1Y3QgewotCXVfaW50CQlBdHRyaWJ1dGVzOwotICAgIH0gaXJxOworCXVuc2lnbmVkIGludAlzdGF0ZTsKKwl1bnNpZ25lZCBpbnQJQXR0cmlidXRlczsKKwl1bnNpZ25lZCBpbnQJSW50VHlwZTsKKwl1bnNpZ25lZCBpbnQJQ29uZmlnQmFzZTsKKwl1bnNpZ25lZCBjaGFyCVN0YXR1cywgUGluLCBDb3B5LCBPcHRpb24sIEV4dFN0YXR1czsKKwl1bnNpZ25lZCBpbnQJQ2FyZFZhbHVlczsKKwlpb19yZXFfdAlpbzsKKwlzdHJ1Y3QgeworCQl1X2ludAlBdHRyaWJ1dGVzOworCX0gaXJxOwogfSBjb25maWdfdDsKIAorCiBzdHJ1Y3QgY2lzX2NhY2hlX2VudHJ5IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CiAJdW5zaWduZWQgaW50CQlhZGRyOwpAQCAtNDksNiArNTAsMzAgQEAKIAl1bnNpZ25lZCBjaGFyCQljYWNoZVswXTsKIH07CiAKK3N0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHsKKwlpbnQJKCp2YWxpZGF0ZV9tZW0pCQkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworCWludAkoKmFkanVzdF9pb19yZWdpb24pCShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQkJIHVuc2lnbmVkIGxvbmcgcl9zdGFydCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgcl9lbmQsCisJCQkJCSBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CisJc3RydWN0IHJlc291cmNlKiAoKmZpbmRfaW8pCSh1bnNpZ25lZCBsb25nIGJhc2UsIGludCBudW0sCisJCQkJCSB1bnNpZ25lZCBsb25nIGFsaWduLAorCQkJCQkgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworCXN0cnVjdCByZXNvdXJjZSogKCpmaW5kX21lbSkJKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBudW0sCisJCQkJCSB1bnNpZ25lZCBsb25nIGFsaWduLCBpbnQgbG93LAorCQkJCQkgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworCWludAkoKmFkZF9pbykJCShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCQkJIHVuc2lnbmVkIGludCBhY3Rpb24sCisJCQkJCSB1bnNpZ25lZCBsb25nIHJfc3RhcnQsCisJCQkJCSB1bnNpZ25lZCBsb25nIHJfZW5kKTsKKwlpbnQJKCphZGRfbWVtKQkJKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkJCQkgdW5zaWduZWQgaW50IGFjdGlvbiwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgcl9zdGFydCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgcl9lbmQpOworCWludAkoKmluaXQpCQkJKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKKwl2b2lkCSgqZXhpdCkJCQkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworfTsKKwogLyogRmxhZ3MgaW4gY29uZmlnIHN0YXRlICovCiAjZGVmaW5lIENPTkZJR19MT0NLRUQJCTB4MDEKICNkZWZpbmUgQ09ORklHX0lSUV9SRVEJCTB4MDIKQEAgLTU5LDcgKzg0LDYgQEAKICNkZWZpbmUgU09DS0VUX0lOVVNFCQkweDAwMTAKICNkZWZpbmUgU09DS0VUX1NVU1BFTkQJCTB4MDA4MAogI2RlZmluZSBTT0NLRVRfV0lOX1JFUShpKQkoMHgwMTAwPDwoaSkpCi0jZGVmaW5lIFNPQ0tFVF9SRUdJT05fSU5GTwkweDQwMDAKICNkZWZpbmUgU09DS0VUX0NBUkRCVVMJCTB4ODAwMAogI2RlZmluZSBTT0NLRVRfQ0FSREJVU19DT05GSUcJMHgxMDAwMAogCkBAIC04Myw2OSArMTA3LDE1MyBAQAogCX0KIH0KIAotLyogSW4gY2FyZGJ1cy5jICovCi1pbnQgY2JfYWxsb2Moc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotdm9pZCBjYl9mcmVlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLWludCByZWFkX2NiX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IHNwYWNlLCB1X2ludCBhZGRyLCB1X2ludCBsZW4sIHZvaWQgKnB0cik7CisjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRworZXh0ZXJuIGludCBjc19kZWJ1Z19sZXZlbChpbnQpOwogCi0vKiBJbiBjaXN0cGwuYyAqLwotaW50IHBjbWNpYV9yZWFkX2Npc19tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBhdHRyLAotCQkgdV9pbnQgYWRkciwgdV9pbnQgbGVuLCB2b2lkICpwdHIpOwotdm9pZCBwY21jaWFfd3JpdGVfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsCi0JCSAgIHVfaW50IGFkZHIsIHVfaW50IGxlbiwgdm9pZCAqcHRyKTsKLXZvaWQgcmVsZWFzZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLXZvaWQgZGVzdHJveV9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworI2RlZmluZSBjc19kYmcoc2t0LCBsdmwsIGZtdCwgYXJnLi4uKSBkbyB7CQlcCisJaWYgKGNzX2RlYnVnX2xldmVsKGx2bCkpCQkJXAorCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZza3QtPmRldiwJXAorCQkgImNzOiAiIGZtdCwgIyMgYXJnKTsJCQlcCit9IHdoaWxlICgwKQorI2RlZmluZSBfX2NzX2RiZyhsdmwsIGZtdCwgYXJnLi4uKSBkbyB7CQkJXAorCWlmIChjc19kZWJ1Z19sZXZlbChsdmwpKQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgCQkJXAorCQkgImNzOiAiIGZtdCwgIyMgYXJnKTsJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZQorI2RlZmluZSBjc19kYmcoc2t0LCBsdmwsIGZtdCwgYXJnLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fY3NfZGJnKGx2bCwgZm10LCBhcmcuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIGNzX2Vycihza3QsIGZtdCwgYXJnLi4uKSBcCisJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnNrdC0+ZGV2LCAiY3M6ICIgZm10LCAjIyBhcmcpCisKKworLyoKKyAqIFN0dWZmIGludGVybmFsIHRvIG1vZHVsZSAicGNtY2lhX2NvcmUiOgorICovCisKKy8qIGNpc3RwbC5jICovCiBpbnQgdmVyaWZ5X2Npc19jYWNoZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci1pbnQgcGNjYXJkX3JlYWRfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwgY2lzZGF0YV90IGNvZGUsIHZvaWQgKnBhcnNlKTsKIAotLyogSW4gcnNyY19tZ3IgKi8KLWludCBwY21jaWFfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLXN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfaW9fcmVnaW9uKHVuc2lnbmVkIGxvbmcgYmFzZSwgaW50IG51bSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKLQkJICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotaW50IHBjbWNpYV9hZGp1c3RfaW9fcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIHJfc3RhcnQsCi0JCSAgICAgdW5zaWduZWQgbG9uZyByX2VuZCwgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotc3RydWN0IHJlc291cmNlICpwY21jaWFfZmluZF9tZW1fcmVnaW9uKHVfbG9uZyBiYXNlLCB1X2xvbmcgbnVtLCB1X2xvbmcgYWxpZ24sCi0JCSAgICBpbnQgbG93LCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CisvKiByc3JjX21nci5jICovCiB2b2lkIHJlbGVhc2VfcmVzb3VyY2VfZGIoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogCi0vKiBJbiBzb2NrZXRfc3lzZnMuYyAqLworLyogc29ja2V0X3N5c2ZzLmMgKi8KIGV4dGVybiBpbnQgcGNjYXJkX3N5c2ZzX2FkZF9zb2NrZXQoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHBjY2FyZF9zeXNmc19yZW1vdmVfc29ja2V0KHN0cnVjdCBkZXZpY2UgKmRldik7CiAKLS8qIEluIGNzLmMgKi8KLWV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIHBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbTsKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHBjbWNpYV9zb2NrZXRfbGlzdDsKLWludCBwY21jaWFfZ2V0X3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgd2luZG93X2hhbmRsZV90ICpoYW5kbGUsIGludCBpZHgsIHdpbl9yZXFfdCAqcmVxKTsKLWludCBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBjb25maWdfaW5mb190ICpjb25maWcpOwotaW50IHBjY2FyZF9yZXNldF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOworLyogY2FyZGJ1cy5jICovCitpbnQgY2JfYWxsb2Moc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwordm9pZCBjYl9mcmVlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKK2ludCByZWFkX2NiX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IHNwYWNlLCB1X2ludCBhZGRyLCB1X2ludCBsZW4sCisJCXZvaWQgKnB0cik7CiAKIAorCisvKgorICogU3R1ZmYgZXhwb3J0ZWQgYnkgbW9kdWxlICJwY21jaWFfY29yZSIgdG8gbW9kdWxlICJwY21jaWEiCisgKi8KKwogc3RydWN0IHBjbWNpYV9jYWxsYmFja3sKIAlzdHJ1Y3QgbW9kdWxlCSpvd25lcjsKLQlpbnQJCSgqZXZlbnQpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5KTsKKwlpbnQJCSgqZXZlbnQpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCQkgIGV2ZW50X3QgZXZlbnQsIGludCBwcmlvcml0eSk7CiAJdm9pZAkJKCpyZXF1ZXJ5KSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBuZXdfY2lzKTsKIAlpbnQJCSgqc3VzcGVuZCkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIAlpbnQJCSgqcmVzdW1lKSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogfTsKIAorLyogY3MuYyAqLworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgcGNtY2lhX3NvY2tldF9saXN0OworZXh0ZXJuIHN0cnVjdCBjbGFzcyBwY21jaWFfc29ja2V0X2NsYXNzOworCitpbnQgcGNtY2lhX2dldF93aW5kb3coc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCSAgICAgIHdpbmRvd19oYW5kbGVfdCAqaGFuZGxlLAorCQkgICAgICBpbnQgaWR4LAorCQkgICAgICB3aW5fcmVxX3QgKnJlcSk7CiBpbnQgcGNjYXJkX3JlZ2lzdGVyX3BjbWNpYShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHBjbWNpYV9jYWxsYmFjayAqYyk7CitzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcGNtY2lhX2dldF9zb2NrZXRfYnlfbnIodW5zaWduZWQgaW50IG5yKTsKIAotI2RlZmluZSBjc19zb2NrZXRfbmFtZShza3QpCSgoc2t0KS0+ZGV2LmJ1c19pZCkKK2ludCBwY21jaWFfc3VzcGVuZF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOworaW50IHBjbWNpYV9yZXN1bWVfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIAotI2lmZGVmIERFQlVHCi1leHRlcm4gaW50IGNzX2RlYnVnX2xldmVsKGludCk7CitpbnQgcGNtY2lhX2VqZWN0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CitpbnQgcGNtY2lhX2luc2VydF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogCi0jZGVmaW5lIGNzX2RiZyhza3QsIGx2bCwgZm10LCBhcmcuLi4pIGRvIHsJCVwKLQlpZiAoY3NfZGVidWdfbGV2ZWwobHZsKSkJCQlcCi0JCXByaW50ayhLRVJOX0RFQlVHICJjczogJXM6ICIgZm10LCAJXAotCQkgICAgICAgY3Nfc29ja2V0X25hbWUoc2t0KSAsICMjIGFyZyk7CVwKLX0gd2hpbGUgKDApCitzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcGNtY2lhX2dldF9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7Cit2b2lkIHBjbWNpYV9wdXRfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogCi0jZWxzZQotI2RlZmluZSBjc19kYmcoc2t0LCBsdmwsIGZtdCwgYXJnLi4uKSBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKKy8qIGNpc3RwbC5jICovCitpbnQgcGNtY2lhX3JlYWRfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsCisJCQl1X2ludCBhZGRyLCB1X2ludCBsZW4sIHZvaWQgKnB0cik7Cit2b2lkIHBjbWNpYV93cml0ZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwKKwkJCSAgdV9pbnQgYWRkciwgdV9pbnQgbGVuLCB2b2lkICpwdHIpOwordm9pZCByZWxlYXNlX2Npc19tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwordm9pZCBkZXN0cm95X2Npc19jYWNoZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CitpbnQgcGNjYXJkX3JlYWRfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKKwkJICAgICAgY2lzZGF0YV90IGNvZGUsIHZvaWQgKnBhcnNlKTsKK2ludCBwY21jaWFfcmVwbGFjZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCSAgICAgICBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbik7CitpbnQgcGNjYXJkX3ZhbGlkYXRlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLAorCQkJdW5zaWduZWQgaW50ICpjb3VudCk7CiAKLSNkZWZpbmUgY3NfZXJyKHNrdCwgZm10LCBhcmcuLi4pIFwKLQlwcmludGsoS0VSTl9FUlIgImNzOiAlczogIiBmbXQsIChza3QpLT5kZXYuYnVzX2lkICwgIyMgYXJnKQorLyogcnNyY19tZ3IuYyAqLworaW50IHBjbWNpYV92YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworc3RydWN0IHJlc291cmNlICpwY21jaWFfZmluZF9pb19yZWdpb24odW5zaWduZWQgbG9uZyBiYXNlLAorCQkJCSAgICAgICBpbnQgbnVtLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFsaWduLAorCQkJCSAgICAgICBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CitpbnQgcGNtY2lhX2FkanVzdF9pb19yZWdpb24oc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkgICAgdW5zaWduZWQgbG9uZyByX3N0YXJ0LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgcl9lbmQsCisJCQkgICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworc3RydWN0IHJlc291cmNlICpwY21jaWFfZmluZF9tZW1fcmVnaW9uKHVfbG9uZyBiYXNlLAorCQkJCQl1X2xvbmcgbnVtLAorCQkJCQl1X2xvbmcgYWxpZ24sCisJCQkJCWludCBsb3csCisJCQkJCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKKworLyoKKyAqIFN0dWZmIGludGVybmFsIHRvIG1vZHVsZSAicGNtY2lhIi4KKyAqLworLyogZHMuYyAqLworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBwY21jaWFfYnVzX3R5cGU7CisKKy8qIHBjbWNpYV9yZXNvdXJjZS5jICovCitleHRlcm4gaW50IHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKworI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKKy8qIGRzLmMgKi8KK2V4dGVybiBzcGlubG9ja190IHBjbWNpYV9kZXZfbGlzdF9sb2NrOworCitleHRlcm4gc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9nZXRfZGV2KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CitleHRlcm4gdm9pZCBwY21jaWFfcHV0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworCitzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2RldmljZV9hZGQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCQkJCXVuc2lnbmVkIGludCBmdW5jdGlvbik7CisKKy8qIHBjbWNpYV9pb2N0bC5jICovCitleHRlcm4gdm9pZCBfX2luaXQgcGNtY2lhX3NldHVwX2lvY3RsKHZvaWQpOworZXh0ZXJuIHZvaWQgX19leGl0IHBjbWNpYV9jbGVhbnVwX2lvY3RsKHZvaWQpOworZXh0ZXJuIHZvaWQgaGFuZGxlX2V2ZW50KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBldmVudF90IGV2ZW50KTsKK2V4dGVybiBpbnQgaGFuZGxlX3JlcXVlc3Qoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGV2ZW50X3QgZXZlbnQpOworCisjZWxzZSAvKiBDT05GSUdfUENNQ0lBX0lPQ1RMICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGNtY2lhX3NldHVwX2lvY3RsKHZvaWQpIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgX19leGl0IHBjbWNpYV9jbGVhbnVwX2lvY3RsKHZvaWQpIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2V2ZW50KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBldmVudF90IGV2ZW50KQoreworCXJldHVybjsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGhhbmRsZV9yZXF1ZXN0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBldmVudF90IGV2ZW50KQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX1BDTUNJQV9JT0NUTCAqLwogCiAjZW5kaWYgLyogX0xJTlVYX0NTX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2RzLmMgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCmluZGV4IDM0YzgzZDMuLjc5NTY2MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2RzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvZHMuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogCiAjaW5jbHVkZSAiY3NfaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJkc19pbnRlcm5hbC5oIgogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApAQCAtNDIsMTcgKzQxLDIyIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlBDTUNJQSBEcml2ZXIgU2VydmljZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2lmZGVmIERFQlVHCisjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwogaW50IGRzX3BjX2RlYnVnOwogCiBtb2R1bGVfcGFyYW1fbmFtZWQocGNfZGVidWcsIGRzX3BjX2RlYnVnLCBpbnQsIDA2NDQpOwogCiAjZGVmaW5lIGRzX2RiZyhsdmwsIGZtdCwgYXJnLi4uKSBkbyB7CQkJCVwKLQlpZiAoZHNfcGNfZGVidWcgPiAobHZsKSkJCQkJCVwKKwlpZiAoZHNfcGNfZGVidWcgPiAobHZsKSkJCQkJXAogCQlwcmludGsoS0VSTl9ERUJVRyAiZHM6ICIgZm10ICwgIyMgYXJnKTsJCVwKIH0gd2hpbGUgKDApCisjZGVmaW5lIGRzX2Rldl9kYmcobHZsLCBkZXYsIGZtdCwgYXJnLi4uKSBkbyB7CQkJCVwKKwlpZiAoZHNfcGNfZGVidWcgPiAobHZsKSkJCQkJCVwKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJkczogIiBmbXQgLCAjIyBhcmcpOwlcCit9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgZHNfZGJnKGx2bCwgZm10LCBhcmcuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZHNfZGV2X2RiZyhsdmwsIGRldiwgZm10LCBhcmcuLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiBzcGlubG9ja190IHBjbWNpYV9kZXZfbGlzdF9sb2NrOwpAQCAtNjQsNDIgKzY4LDE5IEBACiAvKiBTdHJpbmcgdGFibGVzIGZvciBlcnJvciBtZXNzYWdlcyAqLwogCiB0eXBlZGVmIHN0cnVjdCBsb29rdXBfdCB7Ci0gICAgaW50IGtleTsKLSAgICBjaGFyICptc2c7CisgICAgY29uc3QgaW50IGtleTsKKyAgICBjb25zdCBjaGFyICptc2c7CiB9IGxvb2t1cF90OwogCiBzdGF0aWMgY29uc3QgbG9va3VwX3QgZXJyb3JfdGFibGVbXSA9IHsKLSAgICB7IENTX1NVQ0NFU1MsCQkiT3BlcmF0aW9uIHN1Y2NlZWRlZCIgfSwKLSAgICB7IENTX0JBRF9BREFQVEVSLAkJIkJhZCBhZGFwdGVyIiB9LAotICAgIHsgQ1NfQkFEX0FUVFJJQlVURSwgCSJCYWQgYXR0cmlidXRlIiwgfSwKLSAgICB7IENTX0JBRF9CQVNFLAkJIkJhZCBiYXNlIGFkZHJlc3MiIH0sCi0gICAgeyBDU19CQURfRURDLAkJIkJhZCBFREMiIH0sCi0gICAgeyBDU19CQURfSVJRLAkJIkJhZCBJUlEiIH0sCi0gICAgeyBDU19CQURfT0ZGU0VULAkJIkJhZCBvZmZzZXQiIH0sCi0gICAgeyBDU19CQURfUEFHRSwJCSJCYWQgcGFnZSBudW1iZXIiIH0sCi0gICAgeyBDU19SRUFEX0ZBSUxVUkUsCQkiUmVhZCBmYWlsdXJlIiB9LAotICAgIHsgQ1NfQkFEX1NJWkUsCQkiQmFkIHNpemUiIH0sCi0gICAgeyBDU19CQURfU09DS0VULAkJIkJhZCBzb2NrZXQiIH0sCi0gICAgeyBDU19CQURfVFlQRSwJCSJCYWQgdHlwZSIgfSwKLSAgICB7IENTX0JBRF9WQ0MsCQkiQmFkIFZjYyIgfSwKLSAgICB7IENTX0JBRF9WUFAsCQkiQmFkIFZwcCIgfSwKLSAgICB7IENTX0JBRF9XSU5ET1csCQkiQmFkIHdpbmRvdyIgfSwKLSAgICB7IENTX1dSSVRFX0ZBSUxVUkUsCQkiV3JpdGUgZmFpbHVyZSIgfSwKLSAgICB7IENTX05PX0NBUkQsCQkiTm8gY2FyZCBwcmVzZW50IiB9LAotICAgIHsgQ1NfVU5TVVBQT1JURURfRlVOQ1RJT04sCSJVc3VwcG9ydGVkIGZ1bmN0aW9uIiB9LAotICAgIHsgQ1NfVU5TVVBQT1JURURfTU9ERSwJIlVuc3VwcG9ydGVkIG1vZGUiIH0sCi0gICAgeyBDU19CQURfU1BFRUQsCQkiQmFkIHNwZWVkIiB9LAotICAgIHsgQ1NfQlVTWSwJCQkiUmVzb3VyY2UgYnVzeSIgfSwKLSAgICB7IENTX0dFTkVSQUxfRkFJTFVSRSwJIkdlbmVyYWwgZmFpbHVyZSIgfSwKLSAgICB7IENTX1dSSVRFX1BST1RFQ1RFRCwJIldyaXRlIHByb3RlY3RlZCIgfSwKLSAgICB7IENTX0JBRF9BUkdfTEVOR1RILAkiQmFkIGFyZ3VtZW50IGxlbmd0aCIgfSwKLSAgICB7IENTX0JBRF9BUkdTLAkJIkJhZCBhcmd1bWVudHMiIH0sCi0gICAgeyBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRCwJIkNvbmZpZ3VyYXRpb24gbG9ja2VkIiB9LAotICAgIHsgQ1NfSU5fVVNFLAkJIlJlc291cmNlIGluIHVzZSIgfSwKLSAgICB7IENTX05PX01PUkVfSVRFTVMsCQkiTm8gbW9yZSBpdGVtcyIgfSwKLSAgICB7IENTX09VVF9PRl9SRVNPVVJDRSwJIk91dCBvZiByZXNvdXJjZSIgfSwKLSAgICB7IENTX0JBRF9IQU5ETEUsCQkiQmFkIGhhbmRsZSIgfSwKLSAgICB7IENTX0JBRF9UVVBMRSwJCSJCYWQgQ0lTIHR1cGxlIiB9CisgICAgeyAwLAkJCSJPcGVyYXRpb24gc3VjY2VlZGVkIiB9LAorICAgIHsgLUVJTywJCQkiSW5wdXQvT3V0cHV0IGVycm9yIiB9LAorICAgIHsgLUVOT0RFViwJCQkiTm8gY2FyZCBwcmVzZW50IiB9LAorICAgIHsgLUVJTlZBTCwJCQkiQmFkIHBhcmFtZXRlciIgfSwKKyAgICB7IC1FQUNDRVMsCQkJIkNvbmZpZ3VyYXRpb24gbG9ja2VkIiB9LAorICAgIHsgLUVCVVNZLAkJCSJSZXNvdXJjZSBpbiB1c2UiIH0sCisgICAgeyAtRU5PU1BDLAkJCSJObyBtb3JlIGl0ZW1zIiB9LAorICAgIHsgLUVOT01FTSwJCQkiT3V0IG9mIHJlc291cmNlIiB9LAogfTsKIAogCkBAIC0xNTUsNDYgKzEzNiwzMiBAQAogICAgIHsgUmVwbGFjZUNJUywJCQkiUmVwbGFjZUNJUyIgfQogfTsKIAotCi1zdGF0aWMgaW50IHBjbWNpYV9yZXBvcnRfZXJyb3Ioc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBlcnJvcl9pbmZvX3QgKmVycikKK2NvbnN0IGNoYXIgKnBjbWNpYV9lcnJvcl9mdW5jKGludCBmdW5jKQogewogCWludCBpOwotCWNoYXIgKnNlcnY7Ci0KLQlpZiAoIXBfZGV2KQotCQlwcmludGsoS0VSTl9OT1RJQ0UpOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogIiwgcF9kZXYtPmRldi5idXNfaWQpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2VydmljZV90YWJsZSk7IGkrKykKLQkJaWYgKHNlcnZpY2VfdGFibGVbaV0ua2V5ID09IGVyci0+ZnVuYykKLQkJCWJyZWFrOwotCWlmIChpIDwgQVJSQVlfU0laRShzZXJ2aWNlX3RhYmxlKSkKLQkJc2VydiA9IHNlcnZpY2VfdGFibGVbaV0ubXNnOwotCWVsc2UKLQkJc2VydiA9ICJVbmtub3duIHNlcnZpY2UgbnVtYmVyIjsKKwkJaWYgKHNlcnZpY2VfdGFibGVbaV0ua2V5ID09IGZ1bmMpCisJCQlyZXR1cm4gc2VydmljZV90YWJsZVtpXS5tc2c7CisKKwlyZXR1cm4gIlVua25vd24gc2VydmljZSBudW1iZXIiOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfZXJyb3JfZnVuYyk7CisKK2NvbnN0IGNoYXIgKnBjbWNpYV9lcnJvcl9yZXQoaW50IHJldCkKK3sKKwlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVycm9yX3RhYmxlKTsgaSsrKQotCQlpZiAoZXJyb3JfdGFibGVbaV0ua2V5ID09IGVyci0+cmV0Y29kZSkKLQkJCWJyZWFrOwotCWlmIChpIDwgQVJSQVlfU0laRShlcnJvcl90YWJsZSkpCi0JCXByaW50aygiJXM6ICVzXG4iLCBzZXJ2LCBlcnJvcl90YWJsZVtpXS5tc2cpOwotCWVsc2UKLQkJcHJpbnRrKCIlczogVW5rbm93biBlcnJvciBjb2RlICUjeFxuIiwgc2VydiwgZXJyLT5yZXRjb2RlKTsKKwkJaWYgKGVycm9yX3RhYmxlW2ldLmtleSA9PSByZXQpCisJCQlyZXR1cm4gZXJyb3JfdGFibGVbaV0ubXNnOwogCi0JcmV0dXJuIENTX1NVQ0NFU1M7Ci19IC8qIHJlcG9ydF9lcnJvciAqLwotCi0vKiBlbmQgb2YgY29kZSB3aGljaCB3YXMgaW4gY3MuYyBiZWZvcmUgKi8KKwlyZXR1cm4gInVua25vd24iOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfZXJyb3JfcmV0KTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotdm9pZCBjc19lcnJvcihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGludCBmdW5jLCBpbnQgcmV0KQotewotCWVycm9yX2luZm9fdCBlcnIgPSB7IGZ1bmMsIHJldCB9OwotCXBjbWNpYV9yZXBvcnRfZXJyb3IocF9kZXYsICZlcnIpOwotfQotRVhQT1JUX1NZTUJPTChjc19lcnJvcik7CiAKIAogc3RhdGljIHZvaWQgcGNtY2lhX2NoZWNrX2RyaXZlcihzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnYpCkBAIC0zOTEsNyArMzU4LDcgQEAKIHN0YXRpYyB2b2lkIHBjbWNpYV9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOwotCWRzX2RiZygxLCAicmVsZWFzaW5nIGRldmljZSAlc1xuIiwgcF9kZXYtPmRldi5idXNfaWQpOworCWRzX2Rldl9kYmcoMSwgZGV2LCAicmVsZWFzaW5nIGRldmljZVxuIik7CiAJcGNtY2lhX3B1dF9zb2NrZXQocF9kZXYtPnNvY2tldCk7CiAJa2ZyZWUocF9kZXYtPmRldm5hbWUpOwogCWtyZWZfcHV0KCZwX2Rldi0+ZnVuY3Rpb25fY29uZmlnLT5yZWYsIHBjbWNpYV9yZWxlYXNlX2Z1bmN0aW9uKTsKQEAgLTQwMSw3ICszNjgsNyBAQAogc3RhdGljIHZvaWQgcGNtY2lhX2FkZF9kZXZpY2VfbGF0ZXIoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBtZmMpCiB7CiAJaWYgKCFzLT5wY21jaWFfc3RhdGUuZGV2aWNlX2FkZF9wZW5kaW5nKSB7Ci0JCWRzX2RiZygxLCAic2NoZWR1bGluZyB0byBhZGQgJXMgc2Vjb25kYXJ5IgorCQlkc19kZXZfZGJnKDEsICZzLT5kZXYsICJzY2hlZHVsaW5nIHRvIGFkZCAlcyBzZWNvbmRhcnkiCiAJCSAgICAgICAiIGRldmljZSB0byAlZFxuIiwgbWZjID8gIm1mYyIgOiAicGZjIiwgcy0+c29jayk7CiAJCXMtPnBjbWNpYV9zdGF0ZS5kZXZpY2VfYWRkX3BlbmRpbmcgPSAxOwogCQlzLT5wY21jaWFfc3RhdGUubWZjX3BmYyA9IG1mYzsKQEAgLTQzOSw4ICs0MDYsNyBAQAogCSAqLwogCWRpZCA9IHBfZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAKLQlkc19kYmcoMSwgInRyeWluZyB0byBiaW5kICVzIHRvICVzXG4iLCBwX2Rldi0+ZGV2LmJ1c19pZCwKLQkgICAgICAgcF9kcnYtPmRydi5uYW1lKTsKKwlkc19kZXZfZGJnKDEsIGRldiwgInRyeWluZyB0byBiaW5kIHRvICVzXG4iLCBwX2Rydi0+ZHJ2Lm5hbWUpOwogCiAJaWYgKCghcF9kcnYtPnByb2JlKSB8fCAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpIHx8CiAJICAgICghdHJ5X21vZHVsZV9nZXQocF9kcnYtPm93bmVyKSkpIHsKQEAgLTQ1NSwxNSArNDIxLDE2IEBACiAJCXBfZGV2LT5jb25mLkNvbmZpZ0Jhc2UgPSBjaXNfY29uZmlnLmJhc2U7CiAJCXBfZGV2LT5jb25mLlByZXNlbnQgPSBjaXNfY29uZmlnLnJtYXNrWzBdOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gInBjbWNpYTogY291bGQgbm90IHBhcnNlIGJhc2UgYW5kIHJtYXNrMCBvZiBDSVNcbiIpOworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgZGV2LAorCQkJICAgInBjbWNpYTogY291bGQgbm90IHBhcnNlIGJhc2UgYW5kIHJtYXNrMCBvZiBDSVNcbiIpOwogCQlwX2Rldi0+Y29uZi5Db25maWdCYXNlID0gMDsKIAkJcF9kZXYtPmNvbmYuUHJlc2VudCA9IDA7CiAJfQogCiAJcmV0ID0gcF9kcnYtPnByb2JlKHBfZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWRzX2RiZygxLCAiYmluZGluZyAlcyB0byAlcyBmYWlsZWQgd2l0aCAlZFxuIiwKLQkJICAgICAgIHBfZGV2LT5kZXYuYnVzX2lkLCBwX2Rydi0+ZHJ2Lm5hbWUsIHJldCk7CisJCWRzX2Rldl9kYmcoMSwgZGV2LCAiYmluZGluZyB0byAlcyBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJCSAgIHBfZHJ2LT5kcnYubmFtZSwgcmV0KTsKIAkJZ290byBwdXRfbW9kdWxlOwogCX0KIApAQCAtNDkwLDggKzQ1Nyw5IEBACiAJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnRtcDsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAotCWRzX2RiZygyLCAicGNtY2lhX2NhcmRfcmVtb3ZlKCVkKSAlc1xuIiwgcy0+c29jaywKLQkgICAgICAgbGVmdG92ZXIgPyBsZWZ0b3Zlci0+ZGV2bmFtZSA6ICIiKTsKKwlkc19kZXZfZGJnKDIsIGxlZnRvdmVyID8gJmxlZnRvdmVyLT5kZXYgOiAmcy0+ZGV2LAorCQkgICAicGNtY2lhX2NhcmRfcmVtb3ZlKCVkKSAlc1xuIiwgcy0+c29jaywKKwkJICAgbGVmdG92ZXIgPyBsZWZ0b3Zlci0+ZGV2bmFtZSA6ICIiKTsKIAogCWlmICghbGVmdG92ZXIpCiAJCXMtPmRldmljZV9jb3VudCA9IDA7CkBAIC01MDgsNyArNDc2LDcgQEAKIAkJcF9kZXYtPl9yZW1vdmVkPTE7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CiAKLQkJZHNfZGJnKDIsICJ1bnJlZ2lzdGVyaW5nIGRldmljZSAlc1xuIiwgcF9kZXYtPmRldi5idXNfaWQpOworCQlkc19kZXZfZGJnKDIsICZwX2Rldi0+ZGV2LCAidW5yZWdpc3RlcmluZyBkZXZpY2VcbiIpOwogCQlkZXZpY2VfdW5yZWdpc3RlcigmcF9kZXYtPmRldik7CiAJfQogCkBAIC01MjUsNyArNDkzLDcgQEAKIAlwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKIAlwX2RydiA9IHRvX3BjbWNpYV9kcnYoZGV2LT5kcml2ZXIpOwogCi0JZHNfZGJnKDEsICJyZW1vdmluZyBkZXZpY2UgJXNcbiIsIHBfZGV2LT5kZXYuYnVzX2lkKTsKKwlkc19kZXZfZGJnKDEsIGRldiwgInJlbW92aW5nIGRldmljZVxuIik7CiAKIAkvKiBJZiB3ZSdyZSByZW1vdmluZyB0aGUgcHJpbWFyeSBtb2R1bGUgZHJpdmluZyBhCiAJICogcHNldWRvIG11bHRpLWZ1bmN0aW9uIGNhcmQsIHdlIG5lZWQgdG8gdW5iaW5kCkBAIC01NDgsMTMgKzUxNiwxNSBAQAogCiAJLyogY2hlY2sgZm9yIHByb3BlciB1bmxvYWRpbmcgKi8KIAlpZiAocF9kZXYtPl9pcnEgfHwgcF9kZXYtPl9pbyB8fCBwX2Rldi0+X2xvY2tlZCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBkcml2ZXIgJXMgZGlkIG5vdCByZWxlYXNlIGNvbmZpZyBwcm9wZXJseVxuIiwKLQkJICAgICAgIHBfZHJ2LT5kcnYubmFtZSk7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCBkZXYsCisJCQkicGNtY2lhOiBkcml2ZXIgJXMgZGlkIG5vdCByZWxlYXNlIGNvbmZpZyBwcm9wZXJseVxuIiwKKwkJCXBfZHJ2LT5kcnYubmFtZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1dJTjsgaSsrKQogCQlpZiAocF9kZXYtPl93aW4gJiBDTElFTlRfV0lOX1JFUShpKSkKLQkJCXByaW50ayhLRVJOX0lORk8gInBjbWNpYTogZHJpdmVyICVzIGRpZCBub3QgcmVsZWFzZSB3aW5kb3dzIHByb3Blcmx5XG4iLAotCQkJICAgICAgIHBfZHJ2LT5kcnYubmFtZSk7CisJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgZGV2LAorCQkJICAicGNtY2lhOiBkcml2ZXIgJXMgZGlkIG5vdCByZWxlYXNlIHdpbmRvdyBwcm9wZXJseVxuIiwKKwkJCSAgIHBfZHJ2LT5kcnYubmFtZSk7CiAKIAkvKiByZWZlcmVuY2VzIGZyb20gcGNtY2lhX3Byb2JlX2RldmljZSAqLwogCXBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKQEAgLTYwMyw4ICs1NzMsOSBAQAogCQl9CiAJCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsCiAJCQkJICAgICAgQ0lTVFBMX0RFVklDRV9HRU8sIGRldmdlbykpIHsKLQkJCWRzX2RiZygwLCAibWVtIGRldmljZSBnZW9tZXRyeSBwcm9iYWJseSBtZWFucyAiCi0JCQkgICAgICAgIkZVTkNJRF9NRU1PUllcbiIpOworCQkJZHNfZGV2X2RiZygwLCAmcF9kZXYtPmRldiwKKwkJCQkgICAibWVtIGRldmljZSBnZW9tZXRyeSBwcm9iYWJseSBtZWFucyAiCisJCQkJICAgIkZVTkNJRF9NRU1PUllcbiIpOwogCQkJcF9kZXYtPmZ1bmNfaWQgPSBDSVNUUExfRlVOQ0lEX01FTU9SWTsKIAkJCXBfZGV2LT5oYXNfZnVuY19pZCA9IDE7CiAJCX0KQEAgLTY4NSw3ICs2NTYsNyBAQAogCWlmICghcF9kZXYtPmRldm5hbWUpCiAJCWdvdG8gZXJyX2ZyZWU7CiAJc3ByaW50ZiAocF9kZXYtPmRldm5hbWUsICJwY21jaWElcyIsIHBfZGV2LT5kZXYuYnVzX2lkKTsKLQlkc19kYmcoMywgImRldm5hbWUgaXMgJXNcbiIsIHBfZGV2LT5kZXZuYW1lKTsKKwlkc19kZXZfZGJnKDMsICZwX2Rldi0+ZGV2LCAiZGV2bmFtZSBpcyAlc1xuIiwgcF9kZXYtPmRldm5hbWUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CiAKQEAgLTcwNiw3ICs2NzcsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpIHsKLQkJZHNfZGJnKDMsICJjcmVhdGluZyBjb25maWdfdCBmb3IgJXNcbiIsIHBfZGV2LT5kZXYuYnVzX2lkKTsKKwkJZHNfZGV2X2RiZygzLCAmcF9kZXYtPmRldiwgImNyZWF0aW5nIGNvbmZpZ190XG4iKTsKIAkJcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb25maWdfdCksCiAJCQkJCQkgR0ZQX0tFUk5FTCk7CiAJCWlmICghcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZykKQEAgLTcxNCw4ICs2ODUsOSBAQAogCQlrcmVmX2luaXQoJnBfZGV2LT5mdW5jdGlvbl9jb25maWctPnJlZik7CiAJfQogCi0JcHJpbnRrKEtFUk5fTk9USUNFICJwY21jaWE6IHJlZ2lzdGVyaW5nIG5ldyBkZXZpY2UgJXNcbiIsCi0JICAgICAgIHBfZGV2LT5kZXZuYW1lKTsKKwlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmcF9kZXYtPmRldiwKKwkJICAgInBjbWNpYTogcmVnaXN0ZXJpbmcgbmV3IGRldmljZSAlc1xuIiwKKwkJICAgcF9kZXYtPmRldm5hbWUpOwogCiAJcGNtY2lhX2RldmljZV9xdWVyeShwX2Rldik7CiAKQEAgLTc1MCwxOSArNzIyLDIwIEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIShzLT5yZXNvdXJjZV9zZXR1cF9kb25lKSkgewotCQlkc19kYmcoMywgIm5vIHJlc291cmNlcyBhdmFpbGFibGUsIGRlbGF5aW5nIGNhcmRfYWRkXG4iKTsKKwkJZHNfZGV2X2RiZygzLCAmcy0+ZGV2LAorCQkJICAgIm5vIHJlc291cmNlcyBhdmFpbGFibGUsIGRlbGF5aW5nIGNhcmRfYWRkXG4iKTsKIAkJcmV0dXJuIC1FQUdBSU47IC8qIHRyeSBhZ2FpbiwgYnV0IGxhdGVyLi4uICovCiAJfQogCiAJaWYgKHBjbWNpYV92YWxpZGF0ZV9tZW0ocykpIHsKLQkJZHNfZGJnKDMsICJ2YWxpZGF0aW5nIG1lbSByZXNvdXJjZXMgZmFpbGVkLCAiCisJCWRzX2Rldl9kYmcoMywgJnMtPmRldiwgInZhbGlkYXRpbmcgbWVtIHJlc291cmNlcyBmYWlsZWQsICIKIAkJICAgICAgICJkZWxheWluZyBjYXJkX2FkZFxuIik7CiAJCXJldHVybiAtRUFHQUlOOyAvKiB0cnkgYWdhaW4sIGJ1dCBsYXRlci4uLiAqLwogCX0KIAogCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsICZub19jaGFpbnMpOwogCWlmIChyZXQgfHwgIW5vX2NoYWlucykgewotCQlkc19kYmcoMCwgImludmFsaWQgQ0lTIG9yIGludmFsaWQgcmVzb3VyY2VzXG4iKTsKKwkJZHNfZGV2X2RiZygwLCAmcy0+ZGV2LCAiaW52YWxpZCBDSVMgb3IgaW52YWxpZCByZXNvdXJjZXNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTc4Myw3ICs3NTYsNyBAQAogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwY21jaWFfc29ja2V0LCBkZXZpY2VfYWRkKTsKLQlkc19kYmcoMSwgImFkZGluZyBhZGRpdGlvbmFsIGRldmljZSB0byAlZFxuIiwgcy0+c29jayk7CisJZHNfZGV2X2RiZygxLCAmcy0+ZGV2LCAiYWRkaW5nIGFkZGl0aW9uYWwgZGV2aWNlIHRvICVkXG4iLCBzLT5zb2NrKTsKIAlwY21jaWFfZGV2aWNlX2FkZChzLCBzLT5wY21jaWFfc3RhdGUubWZjX3BmYyk7CiAJcy0+cGNtY2lhX3N0YXRlLmRldmljZV9hZGRfcGVuZGluZyA9IDA7CiAJcy0+cGNtY2lhX3N0YXRlLm1mY19wZmMgPSAwOwpAQCAtNzkzLDggKzc2Niw3IEBACiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOwogCWlmICghcF9kZXYtPmRldi5kcml2ZXIpIHsKLQkJZHNfZGJnKDEsICJ1cGRhdGUgZGV2aWNlIGluZm9ybWF0aW9uIGZvciAlc1xuIiwKLQkJICAgICAgIHBfZGV2LT5kZXYuYnVzX2lkKTsKKwkJZHNfZGV2X2RiZygxLCBkZXYsICJ1cGRhdGUgZGV2aWNlIGluZm9ybWF0aW9uXG4iKTsKIAkJcGNtY2lhX2RldmljZV9xdWVyeShwX2Rldik7CiAJfQogCkBAIC04MDgsNyArNzgwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBza3RfbXV0ZXggaGVsZCAqLwotCWRzX2RiZygwLCAicmUtc2Nhbm5pbmcgc29ja2V0ICVkXG4iLCBza3QtPnNvY2spOworCWRzX2Rldl9kYmcoMCwgJnNrdC0+ZGV2LCAicmUtc2Nhbm5pbmcgc29ja2V0ICVkXG4iLCBza3QtPnNvY2spOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CiAJaWYgKGxpc3RfZW1wdHkoJnNrdC0+ZGV2aWNlc19saXN0KSkKQEAgLTg1OSwxNyArODMxLDE3IEBACiAJaW50IHJldCA9IC1FTk9NRU07CiAJaW50IG5vX2Z1bmNzOwogCWludCBvbGRfZnVuY3M7Ci0JY2lzZHVtcF90ICpjaXM7CiAJY2lzdHBsX2xvbmdsaW5rX21mY190IG1mYzsKIAogCWlmICghZmlsZW5hbWUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZHNfZGJnKDEsICJ0cnlpbmcgdG8gbG9hZCBDSVMgZmlsZSAlc1xuIiwgZmlsZW5hbWUpOworCWRzX2Rldl9kYmcoMSwgJmRldi0+ZGV2LCAidHJ5aW5nIHRvIGxvYWQgQ0lTIGZpbGUgJXNcbiIsIGZpbGVuYW1lKTsKIAogCWlmIChzdHJsZW4oZmlsZW5hbWUpID4gKEZJUk1XQVJFX05BTUVfTUFYIC0gMSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicGNtY2lhOiBDSVMgZmlsZW5hbWUgaXMgdG9vIGxvbmcgWyVzXVxuIiwKLQkJCWZpbGVuYW1lKTsKKwkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZkZXYtPmRldiwKKwkJCSAgICJwY21jaWE6IENJUyBmaWxlbmFtZSBpcyB0b28gbG9uZyBbJXNdXG4iLAorCQkJICAgZmlsZW5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTg3OCwyMyArODUwLDE2IEBACiAJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBwYXRoLCAmZGV2LT5kZXYpID09IDApIHsKIAkJaWYgKGZ3LT5zaXplID49IENJU1RQTF9NQVhfQ0lTX1NJWkUpIHsKIAkJCXJldCA9IC1FSU5WQUw7Ci0JCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYTogQ0lTIG92ZXJyaWRlIGlzIHRvbyBiaWdcbiIpOworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmRldi0+ZGV2LAorCQkJCSAgICJwY21jaWE6IENJUyBvdmVycmlkZSBpcyB0b28gYmlnXG4iKTsKIAkJCWdvdG8gcmVsZWFzZTsKIAkJfQogCi0JCWNpcyA9IGt6YWxsb2Moc2l6ZW9mKGNpc2R1bXBfdCksIEdGUF9LRVJORUwpOwotCQlpZiAoIWNpcykgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gcmVsZWFzZTsKLQkJfQotCi0JCWNpcy0+TGVuZ3RoID0gZnctPnNpemUgKyAxOwotCQltZW1jcHkoY2lzLT5EYXRhLCBmdy0+ZGF0YSwgZnctPnNpemUpOwotCi0JCWlmICghcGNtY2lhX3JlcGxhY2VfY2lzKHMsIGNpcykpCisJCWlmICghcGNtY2lhX3JlcGxhY2VfY2lzKHMsIGZ3LT5kYXRhLCBmdy0+c2l6ZSkpCiAJCQlyZXQgPSAwOwogCQllbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicGNtY2lhOiBDSVMgb3ZlcnJpZGUgZmFpbGVkXG4iKTsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZkZXYtPmRldiwKKwkJCQkgICAicGNtY2lhOiBDSVMgb3ZlcnJpZGUgZmFpbGVkXG4iKTsKIAkJCWdvdG8gcmVsZWFzZTsKIAkJfQogCkBAIC05OTgsMTQgKzk2MywxNCBAQAogCQkgKiBhZnRlciBpdCBoYXMgcmUtY2hlY2tlZCB0aGF0IHRoZXJlIGlzIG5vIHBvc3NpYmxlIG1vZHVsZQogCQkgKiB3aXRoIGEgcHJvZF9pZC9tYW5mX2lkL2NhcmRfaWQgbWF0Y2guCiAJCSAqLwotCQlkc19kYmcoMCwgInNraXBwaW5nIEZVTkNfSUQgbWF0Y2ggZm9yICVzIHVudGlsIHVzZXJzcGFjZSAiCi0JCSAgICAgICAiaW50ZXJhY3Rpb25cbiIsIGRldi0+ZGV2LmJ1c19pZCk7CisJCWRzX2Rldl9kYmcoMCwgJmRldi0+ZGV2LAorCQkJInNraXBwaW5nIEZVTkNfSUQgbWF0Y2ggdW50aWwgdXNlcnNwYWNlIGludGVyYWN0aW9uXG4iKTsKIAkJaWYgKCFkZXYtPmFsbG93X2Z1bmNfaWRfbWF0Y2gpCiAJCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfRkFLRV9DSVMpIHsKLQkJZHNfZGJnKDAsICJkZXZpY2UgJXMgbmVlZHMgYSBmYWtlIENJU1xuIiwgZGV2LT5kZXYuYnVzX2lkKTsKKwkJZHNfZGV2X2RiZygwLCAmZGV2LT5kZXYsICJkZXZpY2UgbmVlZHMgYSBmYWtlIENJU1xuIik7CiAJCWlmICghZGV2LT5zb2NrZXQtPmZha2VfY2lzKQogCQkJcGNtY2lhX2xvYWRfZmlybXdhcmUoZGV2LCBkaWQtPmNpc2ZpbGUpOwogCkBAIC0xMDM3LDExICsxMDAyLDkgQEAKIAkvKiBtYXRjaCBkeW5hbWljIGRldmljZXMgZmlyc3QgKi8KIAlzcGluX2xvY2soJnBfZHJ2LT5keW5pZHMubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgJnBfZHJ2LT5keW5pZHMubGlzdCwgbm9kZSkgewotCQlkc19kYmcoMywgInRyeWluZyB0byBtYXRjaCAlcyB0byAlc1xuIiwgZGV2LT5idXNfaWQsCi0JCSAgICAgICBkcnYtPm5hbWUpOworCQlkc19kZXZfZGJnKDMsIGRldiwgInRyeWluZyB0byBtYXRjaCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKIAkJaWYgKHBjbWNpYV9kZXZtYXRjaChwX2RldiwgJmR5bmlkLT5pZCkpIHsKLQkJCWRzX2RiZygwLCAibWF0Y2hlZCAlcyB0byAlc1xuIiwgZGV2LT5idXNfaWQsCi0JCQkgICAgICAgZHJ2LT5uYW1lKTsKKwkJCWRzX2Rldl9kYmcoMCwgZGV2LCAibWF0Y2hlZCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKIAkJCXNwaW5fdW5sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOwogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTEwNTEsMTggKzEwMTQsMTUgQEAKICNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCiAJLyogbWF0Y2hpbmcgYnkgY2FyZG1nciAqLwogCWlmIChwX2Rldi0+Y2FyZG1nciA9PSBwX2RydikgewotCQlkc19kYmcoMCwgImNhcmRtZ3IgbWF0Y2hlZCAlcyB0byAlc1xuIiwgZGV2LT5idXNfaWQsCi0JCSAgICAgICBkcnYtPm5hbWUpOworCQlkc19kZXZfZGJnKDAsIGRldiwgImNhcmRtZ3IgbWF0Y2hlZCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKIAkJcmV0dXJuIDE7CiAJfQogI2VuZGlmCiAKIAl3aGlsZSAoZGlkICYmIGRpZC0+bWF0Y2hfZmxhZ3MpIHsKLQkJZHNfZGJnKDMsICJ0cnlpbmcgdG8gbWF0Y2ggJXMgdG8gJXNcbiIsIGRldi0+YnVzX2lkLAotCQkgICAgICAgZHJ2LT5uYW1lKTsKKwkJZHNfZGV2X2RiZygzLCBkZXYsICJ0cnlpbmcgdG8gbWF0Y2ggdG8gJXNcbiIsIGRydi0+bmFtZSk7CiAJCWlmIChwY21jaWFfZGV2bWF0Y2gocF9kZXYsIGRpZCkpIHsKLQkJCWRzX2RiZygwLCAibWF0Y2hlZCAlcyB0byAlc1xuIiwgZGV2LT5idXNfaWQsCi0JCQkgICAgICAgZHJ2LT5uYW1lKTsKKwkJCWRzX2Rldl9kYmcoMCwgZGV2LCAibWF0Y2hlZCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWRpZCsrOwpAQCAtMTI2OCw3ICsxMjI4LDcgQEAKIAlpZiAocF9kZXYtPnN1c3BlbmRlZCkKIAkJcmV0dXJuIDA7CiAKLQlkc19kYmcoMiwgInN1c3BlbmRpbmcgJXNcbiIsIGRldi0+YnVzX2lkKTsKKwlkc19kZXZfZGJnKDIsIGRldiwgInN1c3BlbmRpbmdcbiIpOwogCiAJaWYgKGRldi0+ZHJpdmVyKQogCQlwX2RydiA9IHRvX3BjbWNpYV9kcnYoZGV2LT5kcml2ZXIpOwpAQCAtMTI3OSwxNSArMTIzOSwxNiBAQAogCWlmIChwX2Rydi0+c3VzcGVuZCkgewogCQlyZXQgPSBwX2Rydi0+c3VzcGVuZChwX2Rldik7CiAJCWlmIChyZXQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicGNtY2lhOiBkZXZpY2UgJXMgKGRyaXZlciAlcykgZGlkICIKLQkJCSAgICAgICAibm90IHdhbnQgdG8gZ28gdG8gc2xlZXAgKCVkKVxuIiwKLQkJCSAgICAgICBwX2Rldi0+ZGV2bmFtZSwgcF9kcnYtPmRydi5uYW1lLCByZXQpOworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgZGV2LAorCQkJCSAgICJwY21jaWE6IGRldmljZSAlcyAoZHJpdmVyICVzKSBkaWQgIgorCQkJCSAgICJub3Qgd2FudCB0byBnbyB0byBzbGVlcCAoJWQpXG4iLAorCQkJCSAgIHBfZGV2LT5kZXZuYW1lLCBwX2Rydi0+ZHJ2Lm5hbWUsIHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAogCWlmIChwX2Rldi0+ZGV2aWNlX25vID09IHBfZGV2LT5mdW5jKSB7Ci0JCWRzX2RiZygyLCAicmVsZWFzaW5nIGNvbmZpZ3VyYXRpb24gZm9yICVzXG4iLCBkZXYtPmJ1c19pZCk7CisJCWRzX2Rldl9kYmcoMiwgZGV2LCAicmVsZWFzaW5nIGNvbmZpZ3VyYXRpb25cbiIpOwogCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKHBfZGV2KTsKIAl9CiAKQEAgLTEzMDcsNyArMTI2OCw3IEBACiAJaWYgKCFwX2Rldi0+c3VzcGVuZGVkKQogCQlyZXR1cm4gMDsKIAotCWRzX2RiZygyLCAicmVzdW1pbmcgJXNcbiIsIGRldi0+YnVzX2lkKTsKKwlkc19kZXZfZGJnKDIsIGRldiwgInJlc3VtaW5nXG4iKTsKIAogCWlmIChkZXYtPmRyaXZlcikKIAkJcF9kcnYgPSB0b19wY21jaWFfZHJ2KGRldi0+ZHJpdmVyKTsKQEAgLTEzMTYsNyArMTI3Nyw3IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKHBfZGV2LT5kZXZpY2Vfbm8gPT0gcF9kZXYtPmZ1bmMpIHsKLQkJZHNfZGJnKDIsICJyZXF1ZXN0aW5nIGNvbmZpZ3VyYXRpb24gZm9yICVzXG4iLCBkZXYtPmJ1c19pZCk7CisJCWRzX2Rldl9kYmcoMiwgZGV2LCAicmVxdWVzdGluZyBjb25maWd1cmF0aW9uXG4iKTsKIAkJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihwX2RldiwgJnBfZGV2LT5jb25mKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwpAQCAtMTM1OCwxNCArMTMxOSwxNCBAQAogCiBzdGF0aWMgaW50IHBjbWNpYV9idXNfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCiB7Ci0JZHNfZGJnKDIsICJyZXN1bWluZyBzb2NrZXQgJWRcbiIsIHNrdC0+c29jayk7CisJZHNfZGV2X2RiZygyLCAmc2t0LT5kZXYsICJyZXN1bWluZyBzb2NrZXQgJWRcbiIsIHNrdC0+c29jayk7CiAJYnVzX2Zvcl9lYWNoX2RldigmcGNtY2lhX2J1c190eXBlLCBOVUxMLCBza3QsIHBjbWNpYV9idXNfcmVzdW1lX2NhbGxiYWNrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY21jaWFfYnVzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlkc19kYmcoMiwgInN1c3BlbmRpbmcgc29ja2V0ICVkXG4iLCBza3QtPnNvY2spOworCWRzX2Rldl9kYmcoMiwgJnNrdC0+ZGV2LCAic3VzcGVuZGluZyBzb2NrZXQgJWRcbiIsIHNrdC0+c29jayk7CiAJaWYgKGJ1c19mb3JfZWFjaF9kZXYoJnBjbWNpYV9idXNfdHlwZSwgTlVMTCwgc2t0LAogCQkJICAgICBwY21jaWFfYnVzX3N1c3BlbmRfY2FsbGJhY2spKSB7CiAJCXBjbWNpYV9idXNfcmVzdW1lKHNrdCk7CkBAIC0xMzkxLDEzICsxMzUyLDE0IEBACiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwY21jaWFfZ2V0X3NvY2tldChza3QpOwogCiAJaWYgKCFzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUENNQ0lBIG9idGFpbmluZyByZWZlcmVuY2UgdG8gc29ja2V0ICVwICIgXAotCQkJImZhaWxlZCwgZXZlbnQgMHgleCBsb3N0IVxuIiwgc2t0LCBldmVudCk7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZza3QtPmRldiwKKwkJCSAgICJQQ01DSUEgb2J0YWluaW5nIHJlZmVyZW5jZSB0byBzb2NrZXQgIglcCisJCQkgICAiZmFpbGVkLCBldmVudCAweCV4IGxvc3QhXG4iLCBldmVudCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRzX2RiZygxLCAiZHNfZXZlbnQoMHglMDZ4LCAlZCwgMHglcClcbiIsCi0JICAgICAgIGV2ZW50LCBwcmlvcml0eSwgc2t0KTsKKwlkc19kZXZfZGJnKDEsICZza3QtPmRldiwgImRzX2V2ZW50KDB4JTA2eCwgJWQsIDB4JXApXG4iLAorCQkgICBldmVudCwgcHJpb3JpdHksIHNrdCk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBDU19FVkVOVF9DQVJEX1JFTU9WQUw6CkBAIC0xNDcyLDcgKzE0MzQsOCBAQAogCiAJc29ja2V0ID0gcGNtY2lhX2dldF9zb2NrZXQoc29ja2V0KTsKIAlpZiAoIXNvY2tldCkgewotCQlwcmludGsoS0VSTl9FUlIgIlBDTUNJQSBvYnRhaW5pbmcgcmVmZXJlbmNlIHRvIHNvY2tldCAlcCBmYWlsZWRcbiIsIHNvY2tldCk7CisJCWRldl9wcmludGsoS0VSTl9FUlIsIGRldiwKKwkJCSAgICJQQ01DSUEgb2J0YWluaW5nIHJlZmVyZW5jZSB0byBzb2NrZXQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xNDkyLDcgKzE0NTUsNyBAQAogCiAJcmV0ID0gcGNjYXJkX3JlZ2lzdGVyX3BjbWNpYShzb2NrZXQsICZwY21jaWFfYnVzX2NhbGxiYWNrKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUENNQ0lBIHJlZ2lzdHJhdGlvbiBQQ0NhcmQgY29yZSBmYWlsZWQgZm9yIHNvY2tldCAlcFxuIiwgc29ja2V0KTsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgZGV2LCAiUENNQ0lBIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCQlwY21jaWFfcHV0X3NvY2tldChzb2NrZXQpOwogCQlyZXR1cm4gKHJldCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZHNfaW50ZXJuYWwuaCBiL2RyaXZlcnMvcGNtY2lhL2RzX2ludGVybmFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMmIyNWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9wY21jaWEvZHNfaW50ZXJuYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qIGRzX2ludGVybmFsLmggLSBpbnRlcm5hbCBoZWFkZXIgZm9yIDE2LWJpdCBQQ01DSUEgZGV2aWNlcyBtYW5hZ2VtZW50ICovCi0KLWV4dGVybiBzcGlubG9ja190IHBjbWNpYV9kZXZfbGlzdF9sb2NrOwotZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBwY21jaWFfYnVzX3R5cGU7Ci0KLWV4dGVybiBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqIHBjbWNpYV9nZXRfZGV2KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7Ci1leHRlcm4gdm9pZCBwY21jaWFfcHV0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotCi1zdHJ1Y3QgcGNtY2lhX2RldmljZSAqIHBjbWNpYV9kZXZpY2VfYWRkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24pOwotCi1leHRlcm4gaW50IHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKLQotI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKLWV4dGVybiB2b2lkIF9faW5pdCBwY21jaWFfc2V0dXBfaW9jdGwodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2V4aXQgcGNtY2lhX2NsZWFudXBfaW9jdGwodm9pZCk7Ci1leHRlcm4gdm9pZCBoYW5kbGVfZXZlbnQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGV2ZW50X3QgZXZlbnQpOwotZXh0ZXJuIGludCBoYW5kbGVfcmVxdWVzdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwY21jaWFfc2V0dXBfaW9jdGwodm9pZCkgeyByZXR1cm47IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2V4aXQgcGNtY2lhX2NsZWFudXBfaW9jdGwodm9pZCkgeyByZXR1cm47IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZXZlbnQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGV2ZW50X3QgZXZlbnQpIHsgcmV0dXJuOyB9Ci1zdGF0aWMgaW5saW5lIGludCBoYW5kbGVfcmVxdWVzdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCkgeyByZXR1cm4gQ1NfU1VDQ0VTUzsgfQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9oZDY0NDY1X3NzLmMgYi9kcml2ZXJzL3BjbWNpYS9oZDY0NDY1X3NzLmMKaW5kZXggZmIyYmMxZi4uOWVmNjljZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaGQ2NDQ2NV9zcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2hkNjQ0NjVfc3MuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KLSNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgogCiAjZGVmaW5lIE1PRE5BTUUgImhkNjQ0NjVfc3MiCiAKQEAgLTIzNCwxNSArMjMzLDE4IEBACiAgKi8KIHN0YXRpYyB2b2lkIGhzX21hcF9pcnEoaHNfc29ja2V0X3QgKnNwLCB1bnNpZ25lZCBpbnQgaXJxKQogeworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwogICAgIAlEUFJJTlRLKCJoc19tYXBfaXJxKHNvY2s9JWQgaXJxPSVkKVxuIiwgc3AtPm51bWJlciwgaXJxKTsKIAkKIAlpZiAoaXJxID49IEhTX05VTV9NQVBQRURfSVJRUykKIAkgICAgcmV0dXJuOwogCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAgICAgCWhzX21hcHBlZF9pcnFbaXJxXS5zb2NrID0gc3A7CiAJLyogaW5zZXJ0IG91cnNlbHZlcyBhcyB0aGUgaXJxIGNvbnRyb2xsZXIgKi8KLQloc19tYXBwZWRfaXJxW2lycV0ub2xkX2hhbmRsZXIgPSBpcnFfZGVzY1tpcnFdLmNoaXA7Ci0JaXJxX2Rlc2NbaXJxXS5jaGlwID0gJmhkNjQ0NjVfc3NfaXJxX3R5cGU7CisJaHNfbWFwcGVkX2lycVtpcnFdLm9sZF9oYW5kbGVyID0gZGVzYy0+Y2hpcDsKKwlkZXNjLT5jaGlwID0gJmhkNjQ0NjVfc3NfaXJxX3R5cGU7CiB9CiAKIApAQCAtMjUxLDEzICsyNTMsMTYgQEAKICAqLwogc3RhdGljIHZvaWQgaHNfdW5tYXBfaXJxKGhzX3NvY2tldF90ICpzcCwgdW5zaWduZWQgaW50IGlycSkKIHsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKICAgICAJRFBSSU5USygiaHNfdW5tYXBfaXJxKHNvY2s9JWQgaXJxPSVkKVxuIiwgc3AtPm51bWJlciwgaXJxKTsKIAkKIAlpZiAoaXJxID49IEhTX05VTV9NQVBQRURfSVJRUykKIAkgICAgcmV0dXJuOwogCQkKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAkvKiByZXN0b3JlIHRoZSBvcmlnaW5hbCBpcnEgY29udHJvbGxlciAqLwotCWlycV9kZXNjW2lycV0uY2hpcCA9IGhzX21hcHBlZF9pcnFbaXJxXS5vbGRfaGFuZGxlcjsKKwlkZXNjLT5jaGlwID0gaHNfbWFwcGVkX2lycVtpcnFdLm9sZF9oYW5kbGVyOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCmluZGV4IDY4ZjZiMjcuLjcxNjUzYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCkBAIC02Myw3ICs2Myw3IEBACiAjaW5jbHVkZSAidmc0NjguaCIKICNpbmNsdWRlICJyaWNvaC5oIgogCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCiBzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPQogImk4MjM2NS5jIDEuMjY1IDE5OTkvMTEvMTAgMTg6MzY6MjEgKERhdmlkIEhpbmRzKSI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCmluZGV4IDM2MTZkYTIuLjJhYjRmMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwpAQCAtMzgsNyArMzgsNyBAQAogCiAjaW5jbHVkZSAibTMycl9jZmMuaCIKIAotI2lmZGVmIERFQlVHCisjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwogc3RhdGljIGludCBtMzJyX2NmY19kZWJ1ZzsKIG1vZHVsZV9wYXJhbShtMzJyX2NmY19kZWJ1ZywgaW50LCAwNjQ0KTsKICNkZWZpbmUgZGVidWcobHZsLCBmbXQsIGFyZy4uLikgZG8gewkJCQlcCkBAIC01MDUsNyArNTA1LDcgQEAKIAkJcGNjX3NldChzb2NrLCh1bnNpZ25lZCBpbnQpUExEX0NGQlVGQ1IsMSk7CiAJfQogCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCiAJaWYoc3RhdGUtPmZsYWdzICYgU1NfSU9DQVJEKXsKIAkJZGVidWcoMywgIjpJT0NBUkQiKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYwppbmRleCAyYjQyYjcxLi4yZjEwOGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogI2RlZmluZSBQQ0NfREVCVUdfREJFWAogCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCiBzdGF0aWMgaW50IG0zMnJfcGNjX2RlYnVnOwogbW9kdWxlX3BhcmFtKG0zMnJfcGNjX2RlYnVnLCBpbnQsIDA2NDQpOwogI2RlZmluZSBkZWJ1ZyhsdmwsIGZtdCwgYXJnLi4uKSBkbyB7CQkJCVwKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCiAJcGNjX3NldChzb2NrLFBDQ1NJR0NSLHJlZyk7CiAKLSNpZmRlZiBERUJVRworI2lmZGVmIENPTkZJR19QQ01DSUFfREVCVUcKIAlpZihzdGF0ZS0+ZmxhZ3MgJiBTU19JT0NBUkQpewogCQlkZWJ1ZygzLCAiOklPQ0FSRCIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMgYi9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCmluZGV4IGZmNjY2MDQuLmQxYWQwOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwpAQCAtNjQsOCArNjQsOCBAQAogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogCi0jaWZkZWYgUENNQ0lBX0RFQlVHCi1zdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOworI2lmZGVmIENPTkZJR19QQ01DSUFfREVCVUcKK3N0YXRpYyBpbnQgcGNfZGVidWc7CiBtb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMCk7CiAjZGVmaW5lIGRwcmludGsoYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIm04eHhfcGNtY2lhOiAiIGFyZ3MpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL28ybWljcm8uaCBiL2RyaXZlcnMvcGNtY2lhL28ybWljcm8uaAppbmRleCBhMjM0Y2UxLi41NTU0MDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9vMm1pY3JvLmgKKysrIGIvZHJpdmVycy9wY21jaWEvbzJtaWNyby5oCkBAIC0xNDAsNyArMTQwLDggQEAKIAkJYSA9IGNvbmZpZ19yZWFkYihzb2NrZXQsIE8yX1JFU0VSVkVEMSk7CiAJCWIgPSBjb25maWdfcmVhZGIoc29ja2V0LCBPMl9SRVNFUlZFRDIpOwogCi0JCXByaW50ayhLRVJOX0lORk8gIlllbnRhIE8yOiByZXMgYXQgMHg5NC8weEQ0OiAlMDJ4LyUwMnhcbiIsIGEsIGIpOworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkgICAiTzI6IHJlcyBhdCAweDk0LzB4RDQ6ICUwMngvJTAyeFxuIiwgYSwgYik7CiAKIAkJc3dpdGNoIChzb2NrZXQtPmRldi0+ZGV2aWNlKSB7CiAJCS8qCkBAIC0xNTMsNyArMTU0LDkgQEAKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzY4MTI6CiAJCWNhc2UgUENJX0RFVklDRV9JRF9PMl82ODMyOgogCQljYXNlIFBDSV9ERVZJQ0VfSURfTzJfNjgzNjoKLQkJCXByaW50ayhLRVJOX0lORk8gIlllbnRhIE8yOiBvbGQgYnJpZGdlLCBkaXNhYmxpbmcgcmVhZCBwcmVmZXRjaC93cml0ZSBidXJzdFxuIik7CisJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkJICAgIlllbnRhIE8yOiBvbGQgYnJpZGdlLCBkaXNhYmxpbmcgcmVhZCAiCisJCQkJICAgInByZWZldGNoL3dyaXRlIGJ1cnN0XG4iKTsKIAkJCWNvbmZpZ193cml0ZWIoc29ja2V0LCBPMl9SRVNFUlZFRDEsCiAJCQkgICAgICAgICAgICAgIGEgJiB+KE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKSk7CiAJCQljb25maWdfd3JpdGViKHNvY2tldCwgTzJfUkVTRVJWRUQyLApAQCAtMTYxLDcgKzE2NCw4IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGEgTzI6IGVuYWJsaW5nIHJlYWQgcHJlZmV0Y2gvd3JpdGUgYnVyc3RcbiIpOworCQkJZGV2X3ByaW50ayhLRVJOX0lORk8gLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCQkgICAiTzI6IGVuYWJsaW5nIHJlYWQgcHJlZmV0Y2gvd3JpdGUgYnVyc3RcbiIpOwogCQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIE8yX1JFU0VSVkVEMSwKIAkJCSAgICAgICAgICAgICAgYSB8IE8yX1JFU19SRUFEX1BSRUZFVENIIHwgTzJfUkVTX1dSSVRFX0JVUlNUKTsKIAkJCWNvbmZpZ193cml0ZWIoc29ja2V0LCBPMl9SRVNFUlZFRDIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCmluZGV4IDQxOWY5N2YuLjE3MDNiMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAKICNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgotI2luY2x1ZGUgImRzX2ludGVybmFsLmgiCiAKIHN0YXRpYyBpbnQgbWFqb3JfZGV2ID0gLTE7CiAKQEAgLTU4LDcgKzU3LDcgQEAKIH0gdXNlcl9pbmZvX3Q7CiAKIAotI2lmZGVmIERFQlVHCisjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwogZXh0ZXJuIGludCBkc19wY19kZWJ1ZzsKIAogI2RlZmluZSBkc19kYmcobHZsLCBmbXQsIGFyZy4uLikgZG8gewkJXApAQCAtMTQ5LDcgKzE0OCw3IEBACiAKIAlpcnEgPSBhZGotPnJlc291cmNlLmlycS5JUlE7CiAJaWYgKChpcnEgPCAwKSB8fCAoaXJxID4gMTUpKQotCQlyZXR1cm4gQ1NfQkFEX0lSUTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYWRqLT5BY3Rpb24gIT0gUkVNT1ZFX01BTkFHRURfUkVTT1VSQ0UpCiAJCXJldHVybiAwOwpAQCAtMTY3LDcgKzE2Niw3IEBACiAjZWxzZQogCiBzdGF0aWMgaW5saW5lIGludCBhZGp1c3RfaXJxKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBhZGp1c3RfdCAqYWRqKSB7Ci0JcmV0dXJuIENTX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9CiAKICNlbmRpZgpAQCAtMTc1LDcgKzE3NCw3IEBACiBzdGF0aWMgaW50IHBjbWNpYV9hZGp1c3RfcmVzb3VyY2VfaW5mbyhhZGp1c3RfdCAqYWRqKQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwotCWludCByZXQgPSBDU19VTlNVUFBPUlRFRF9GVU5DVElPTjsKKwlpbnQgcmV0ID0gLUVOT1NZUzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZG93bl9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwpAQCAtMjQ4LDcgKzI0Nyw3IEBACiAJaWYgKHMtPnN0YXRlICYgU09DS0VUX1NVU1BFTkQpCiAJCXN0YXR1cy0+Q2FyZFN0YXRlIHw9IENTX0VWRU5UX1BNX1NVU1BFTkQ7CiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JCXJldHVybiBDU19OT19DQVJEOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWMgPSAocF9kZXYpID8gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZyA6IE5VTEw7CiAKQEAgLTI3NCw3ICsyNzMsNyBAQAogCQkJc3RhdHVzLT5DYXJkU3RhdGUgfD0KIAkJCQkocmVnICYgRVNSX1JFUV9BVFROKSA/IENTX0VWRU5UX1JFUVVFU1RfQVRURU5USU9OIDogMDsKIAkJfQotCQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwkJcmV0dXJuIDA7CiAJfQogCXN0YXR1cy0+Q2FyZFN0YXRlIHw9CiAJCSh2YWwgJiBTU19XUlBST1QpID8gQ1NfRVZFTlRfV1JJVEVfUFJPVEVDVCA6IDA7CkBAIC0yODQsOSArMjgzLDgxIEBACiAJCSh2YWwgJiBTU19CQVRXQVJOKSA/IENTX0VWRU5UX0JBVFRFUllfTE9XIDogMDsKIAlzdGF0dXMtPkNhcmRTdGF0ZSB8PQogCQkodmFsICYgU1NfUkVBRFkpID8gQ1NfRVZFTlRfUkVBRFlfQ0hBTkdFIDogMDsKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0gLyogcGNjYXJkX2dldF9zdGF0dXMgKi8KIAoraW50IHBjY2FyZF9nZXRfY29uZmlndXJhdGlvbl9pbmZvKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkJCSAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCSAgY29uZmlnX2luZm9fdCAqY29uZmlnKQoreworCWNvbmZpZ190ICpjOworCisJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCisJCXJldHVybiAtRU5PREVWOworCisKKyNpZmRlZiBDT05GSUdfQ0FSREJVUworCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSB7CisJCW1lbXNldChjb25maWcsIDAsIHNpemVvZihjb25maWdfaW5mb190KSk7CisJCWNvbmZpZy0+VmNjID0gcy0+c29ja2V0LlZjYzsKKwkJY29uZmlnLT5WcHAxID0gY29uZmlnLT5WcHAyID0gcy0+c29ja2V0LlZwcDsKKwkJY29uZmlnLT5PcHRpb24gPSBzLT5jYl9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXI7CisJCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTX0NPTkZJRykgeworCQkJY29uZmlnLT5BdHRyaWJ1dGVzID0gQ09ORl9WQUxJRF9DTElFTlQ7CisJCQljb25maWctPkludFR5cGUgPSBJTlRfQ0FSREJVUzsKKwkJCWNvbmZpZy0+QXNzaWduZWRJUlEgPSBzLT5pcnEuQXNzaWduZWRJUlE7CisJCQlpZiAoY29uZmlnLT5Bc3NpZ25lZElSUSkKKwkJCQljb25maWctPkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCQkJaWYgKHMtPmlvWzBdLnJlcykgeworCQkJCWNvbmZpZy0+QmFzZVBvcnQxID0gcy0+aW9bMF0ucmVzLT5zdGFydDsKKwkJCQljb25maWctPk51bVBvcnRzMSA9IHMtPmlvWzBdLnJlcy0+ZW5kIC0KKwkJCQkJY29uZmlnLT5CYXNlUG9ydDEgKyAxOworCQkJfQorCQl9CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJaWYgKHBfZGV2KSB7CisJCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOworCQljb25maWctPkZ1bmN0aW9uID0gcF9kZXYtPmZ1bmM7CisJfSBlbHNlIHsKKwkJYyA9IE5VTEw7CisJCWNvbmZpZy0+RnVuY3Rpb24gPSAwOworCX0KKworCWlmICgoYyA9PSBOVUxMKSB8fCAhKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkpIHsKKwkJY29uZmlnLT5BdHRyaWJ1dGVzID0gMDsKKwkJY29uZmlnLT5WY2MgPSBzLT5zb2NrZXQuVmNjOworCQljb25maWctPlZwcDEgPSBjb25maWctPlZwcDIgPSBzLT5zb2NrZXQuVnBwOworCQlyZXR1cm4gMDsKKwl9CisKKwljb25maWctPkF0dHJpYnV0ZXMgPSBjLT5BdHRyaWJ1dGVzIHwgQ09ORl9WQUxJRF9DTElFTlQ7CisJY29uZmlnLT5WY2MgPSBzLT5zb2NrZXQuVmNjOworCWNvbmZpZy0+VnBwMSA9IGNvbmZpZy0+VnBwMiA9IHMtPnNvY2tldC5WcHA7CisJY29uZmlnLT5JbnRUeXBlID0gYy0+SW50VHlwZTsKKwljb25maWctPkNvbmZpZ0Jhc2UgPSBjLT5Db25maWdCYXNlOworCWNvbmZpZy0+U3RhdHVzID0gYy0+U3RhdHVzOworCWNvbmZpZy0+UGluID0gYy0+UGluOworCWNvbmZpZy0+Q29weSA9IGMtPkNvcHk7CisJY29uZmlnLT5PcHRpb24gPSBjLT5PcHRpb247CisJY29uZmlnLT5FeHRTdGF0dXMgPSBjLT5FeHRTdGF0dXM7CisJY29uZmlnLT5QcmVzZW50ID0gY29uZmlnLT5DYXJkVmFsdWVzID0gYy0+Q2FyZFZhbHVlczsKKwljb25maWctPklSUUF0dHJpYnV0ZXMgPSBjLT5pcnEuQXR0cmlidXRlczsKKwljb25maWctPkFzc2lnbmVkSVJRID0gcy0+aXJxLkFzc2lnbmVkSVJROworCWNvbmZpZy0+QmFzZVBvcnQxID0gYy0+aW8uQmFzZVBvcnQxOworCWNvbmZpZy0+TnVtUG9ydHMxID0gYy0+aW8uTnVtUG9ydHMxOworCWNvbmZpZy0+QXR0cmlidXRlczEgPSBjLT5pby5BdHRyaWJ1dGVzMTsKKwljb25maWctPkJhc2VQb3J0MiA9IGMtPmlvLkJhc2VQb3J0MjsKKwljb25maWctPk51bVBvcnRzMiA9IGMtPmlvLk51bVBvcnRzMjsKKwljb25maWctPkF0dHJpYnV0ZXMyID0gYy0+aW8uQXR0cmlidXRlczI7CisJY29uZmlnLT5JT0FkZHJMaW5lcyA9IGMtPmlvLklPQWRkckxpbmVzOworCisJcmV0dXJuIDA7Cit9IC8qIHBjY2FyZF9nZXRfY29uZmlndXJhdGlvbl9pbmZvICovCisKKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBUaGVzZSBtYW5hZ2UgYSByaW5nIGJ1ZmZlciBvZiBldmVudHMgcGVuZGluZyBmb3Igb25lIHVzZXIgcHJvY2VzcwpAQCAtNzY0LDcgKzgzNSw3IEBACiAgICAgY2FzZSBEU19HRVRfQ09ORklHVVJBVElPTl9JTkZPOgogCWlmIChidWYtPmNvbmZpZy5GdW5jdGlvbiAmJgogCSAgIChidWYtPmNvbmZpZy5GdW5jdGlvbiA+PSBzLT5mdW5jdGlvbnMpKQotCSAgICByZXQgPSBDU19CQURfQVJHUzsKKwkgICAgcmV0ID0gLUVJTlZBTDsKIAllbHNlIHsKIAkgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gZ2V0X3BjbWNpYV9kZXZpY2UocywgYnVmLT5jb25maWcuRnVuY3Rpb24pOwogCSAgICByZXQgPSBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhzLCBwX2RldiwgJmJ1Zi0+Y29uZmlnKTsKQEAgLTc4NywxNSArODU4LDE1IEBACiAJYnJlYWs7CiAgICAgY2FzZSBEU19QQVJTRV9UVVBMRToKIAlidWYtPnR1cGxlLlR1cGxlRGF0YSA9IGJ1Zi0+dHVwbGVfcGFyc2UuZGF0YTsKLQlyZXQgPSBwY2NhcmRfcGFyc2VfdHVwbGUoJmJ1Zi0+dHVwbGUsICZidWYtPnR1cGxlX3BhcnNlLnBhcnNlKTsKKwlyZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJmJ1Zi0+dHVwbGUsICZidWYtPnR1cGxlX3BhcnNlLnBhcnNlKTsKIAlicmVhazsKICAgICBjYXNlIERTX1JFU0VUX0NBUkQ6Ci0JcmV0ID0gcGNjYXJkX3Jlc2V0X2NhcmQocyk7CisJcmV0ID0gcGNtY2lhX3Jlc2V0X2NhcmQocyk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19HRVRfU1RBVFVTOgogCSAgICBpZiAoYnVmLT5zdGF0dXMuRnVuY3Rpb24gJiYKIAkJKGJ1Zi0+c3RhdHVzLkZ1bmN0aW9uID49IHMtPmZ1bmN0aW9ucykpCi0JCSAgICByZXQgPSBDU19CQURfQVJHUzsKKwkJICAgIHJldCA9IC1FSU5WQUw7CiAJICAgIGVsc2UgewogCQkgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gZ2V0X3BjbWNpYV9kZXZpY2UocywgYnVmLT5zdGF0dXMuRnVuY3Rpb24pOwogCQkgICAgcmV0ID0gcGNjYXJkX2dldF9zdGF0dXMocywgcF9kZXYsICZidWYtPnN0YXR1cyk7CkBAIC04MjYsNyArODk3LDcgQEAKIAkgICAgZ290byBmcmVlX291dDsKIAl9CiAKLQlyZXQgPSBDU19CQURfQVJHUzsKKwlyZXQgPSAtRUlOVkFMOwogCiAJaWYgKCEoYnVmLT5jb25mX3JlZy5GdW5jdGlvbiAmJgogCSAgICAgKGJ1Zi0+Y29uZl9yZWcuRnVuY3Rpb24gPj0gcy0+ZnVuY3Rpb25zKSkpIHsKQEAgLTg2Nyw3ICs5MzgsNyBAQAogCQkJICAgJmJ1Zi0+d2luX2luZm8ubWFwKTsKIAlicmVhazsKICAgICBjYXNlIERTX1JFUExBQ0VfQ0lTOgotCXJldCA9IHBjbWNpYV9yZXBsYWNlX2NpcyhzLCAmYnVmLT5jaXNkdW1wKTsKKwlyZXQgPSBwY21jaWFfcmVwbGFjZV9jaXMocywgYnVmLT5jaXNkdW1wLkRhdGEsIGJ1Zi0+Y2lzZHVtcC5MZW5ndGgpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfQklORF9SRVFVRVNUOgogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewpAQCAtODg5LDIyICs5NjAsMTkgQEAKIAllcnIgPSAtRUlOVkFMOwogICAgIH0KIAotICAgIGlmICgoZXJyID09IDApICYmIChyZXQgIT0gQ1NfU1VDQ0VTUykpIHsKKyAgICBpZiAoKGVyciA9PSAwKSAmJiAocmV0ICE9IDApKSB7CiAJZHNfZGJnKDIsICJkc19pb2N0bDogcmV0ID0gJWRcbiIsIHJldCk7CiAJc3dpdGNoIChyZXQpIHsKLQljYXNlIENTX0JBRF9TT0NLRVQ6IGNhc2UgQ1NfTk9fQ0FSRDoKLQkgICAgZXJyID0gLUVOT0RFVjsgYnJlYWs7Ci0JY2FzZSBDU19CQURfQVJHUzogY2FzZSBDU19CQURfQVRUUklCVVRFOiBjYXNlIENTX0JBRF9JUlE6Ci0JY2FzZSBDU19CQURfVFVQTEU6Ci0JICAgIGVyciA9IC1FSU5WQUw7IGJyZWFrOwotCWNhc2UgQ1NfSU5fVVNFOgotCSAgICBlcnIgPSAtRUJVU1k7IGJyZWFrOwotCWNhc2UgQ1NfT1VUX09GX1JFU09VUkNFOgorCWNhc2UgLUVOT0RFVjoKKwljYXNlIC1FSU5WQUw6CisJY2FzZSAtRUJVU1k6CisJY2FzZSAtRU5PU1lTOgorCSAgICBlcnIgPSByZXQ7CisJICAgIGJyZWFrOworCWNhc2UgLUVOT01FTToKIAkgICAgZXJyID0gLUVOT1NQQzsgYnJlYWs7Ci0JY2FzZSBDU19OT19NT1JFX0lURU1TOgorCWNhc2UgLUVOT1NQQzoKIAkgICAgZXJyID0gLUVOT0RBVEE7IGJyZWFrOwotCWNhc2UgQ1NfVU5TVVBQT1JURURfRlVOQ1RJT046Ci0JICAgIGVyciA9IC1FTk9TWVM7IGJyZWFrOwogCWRlZmF1bHQ6CiAJICAgIGVyciA9IC1FSU87IGJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKaW5kZXggNDg4NGExOC4uYWZlYTJiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KIAogI2luY2x1ZGUgImNzX2ludGVybmFsLmgiCi0jaW5jbHVkZSAiZHNfaW50ZXJuYWwuaCIKIAogCiAvKiBBY2Nlc3Mgc3BlZWQgZm9yIElPIHdpbmRvd3MgKi8KQEAgLTQ0LDE2ICs0MywxNyBAQAogI2VuZGlmCiAKIAotI2lmZGVmIERFQlVHCisjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwogZXh0ZXJuIGludCBkc19wY19kZWJ1ZzsKIAogI2RlZmluZSBkc19kYmcoc2t0LCBsdmwsIGZtdCwgYXJnLi4uKSBkbyB7CQkJXAogCWlmIChkc19wY19kZWJ1ZyA+PSBsdmwpCQkJCQlcCi0JCXByaW50ayhLRVJOX0RFQlVHICJwY21jaWFfcmVzb3VyY2U6ICVzOiAiIGZtdCwJXAotCQkJY3Nfc29ja2V0X25hbWUoc2t0KSAsICMjIGFyZyk7CQlcCisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnNrdC0+ZGV2LAkJXAorCQkJICAgInBjbWNpYV9yZXNvdXJjZTogIiBmbXQsCQlcCisJCQkgICAjIyBhcmcpOwkJCQlcCiB9IHdoaWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgZHNfZGJnKGx2bCwgZm10LCBhcmcuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZHNfZGJnKHNrdCwgbHZsLCBmbXQsIGFyZy4uLikgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKIApAQCAtMTY4LDEzICsxNjgsMTMgQEAKIAl1X2NoYXIgdmFsOwogCiAJaWYgKCFwX2RldiB8fCAhcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZykKLQkJcmV0dXJuIENTX05PX0NBUkQ7CisJCXJldHVybiAtRUlOVkFMOwogCiAJcyA9IHBfZGV2LT5zb2NrZXQ7CiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKIAlpZiAoIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKQotCQlyZXR1cm4gQ1NfQ09ORklHVVJBVElPTl9MT0NLRUQ7CisJCXJldHVybiAtRUFDQ0VTOwogCiAJYWRkciA9IChjLT5Db25maWdCYXNlICsgcmVnLT5PZmZzZXQpID4+IDE7CiAKQEAgLTE4OCw5MyArMTg4LDE0IEBACiAJCXBjbWNpYV93cml0ZV9jaXNfbWVtKHMsIDEsIGFkZHIsIDEsICZ2YWwpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gQ1NfQkFEX0FSR1M7CisJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIENTX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9IC8qIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlciAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIpOwogCiAKLWludCBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKLQkJCQkgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKLQkJCQkgIGNvbmZpZ19pbmZvX3QgKmNvbmZpZykKLXsKLQljb25maWdfdCAqYzsKLQotCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQotCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKLQotCi0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLQlpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgewotCQltZW1zZXQoY29uZmlnLCAwLCBzaXplb2YoY29uZmlnX2luZm9fdCkpOwotCQljb25maWctPlZjYyA9IHMtPnNvY2tldC5WY2M7Ci0JCWNvbmZpZy0+VnBwMSA9IGNvbmZpZy0+VnBwMiA9IHMtPnNvY2tldC5WcHA7Ci0JCWNvbmZpZy0+T3B0aW9uID0gcy0+Y2JfZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyOwotCQlpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVU19DT05GSUcpIHsKLQkJCWNvbmZpZy0+QXR0cmlidXRlcyA9IENPTkZfVkFMSURfQ0xJRU5UOwotCQkJY29uZmlnLT5JbnRUeXBlID0gSU5UX0NBUkRCVVM7Ci0JCQljb25maWctPkFzc2lnbmVkSVJRID0gcy0+aXJxLkFzc2lnbmVkSVJROwotCQkJaWYgKGNvbmZpZy0+QXNzaWduZWRJUlEpCi0JCQkJY29uZmlnLT5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQkJCWlmIChzLT5pb1swXS5yZXMpIHsKLQkJCQljb25maWctPkJhc2VQb3J0MSA9IHMtPmlvWzBdLnJlcy0+c3RhcnQ7Ci0JCQkJY29uZmlnLT5OdW1Qb3J0czEgPSBzLT5pb1swXS5yZXMtPmVuZCAtIGNvbmZpZy0+QmFzZVBvcnQxICsgMTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gQ1NfU1VDQ0VTUzsKLQl9Ci0jZW5kaWYKLQotCWlmIChwX2RldikgewotCQljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKLQkJY29uZmlnLT5GdW5jdGlvbiA9IHBfZGV2LT5mdW5jOwotCX0gZWxzZSB7Ci0JCWMgPSBOVUxMOwotCQljb25maWctPkZ1bmN0aW9uID0gMDsKLQl9Ci0KLQlpZiAoKGMgPT0gTlVMTCkgfHwgIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKSB7Ci0JCWNvbmZpZy0+QXR0cmlidXRlcyA9IDA7Ci0JCWNvbmZpZy0+VmNjID0gcy0+c29ja2V0LlZjYzsKLQkJY29uZmlnLT5WcHAxID0gY29uZmlnLT5WcHAyID0gcy0+c29ja2V0LlZwcDsKLQkJcmV0dXJuIENTX1NVQ0NFU1M7Ci0JfQotCi0JY29uZmlnLT5BdHRyaWJ1dGVzID0gYy0+QXR0cmlidXRlcyB8IENPTkZfVkFMSURfQ0xJRU5UOwotCWNvbmZpZy0+VmNjID0gcy0+c29ja2V0LlZjYzsKLQljb25maWctPlZwcDEgPSBjb25maWctPlZwcDIgPSBzLT5zb2NrZXQuVnBwOwotCWNvbmZpZy0+SW50VHlwZSA9IGMtPkludFR5cGU7Ci0JY29uZmlnLT5Db25maWdCYXNlID0gYy0+Q29uZmlnQmFzZTsKLQljb25maWctPlN0YXR1cyA9IGMtPlN0YXR1czsKLQljb25maWctPlBpbiA9IGMtPlBpbjsKLQljb25maWctPkNvcHkgPSBjLT5Db3B5OwotCWNvbmZpZy0+T3B0aW9uID0gYy0+T3B0aW9uOwotCWNvbmZpZy0+RXh0U3RhdHVzID0gYy0+RXh0U3RhdHVzOwotCWNvbmZpZy0+UHJlc2VudCA9IGNvbmZpZy0+Q2FyZFZhbHVlcyA9IGMtPkNhcmRWYWx1ZXM7Ci0JY29uZmlnLT5JUlFBdHRyaWJ1dGVzID0gYy0+aXJxLkF0dHJpYnV0ZXM7Ci0JY29uZmlnLT5Bc3NpZ25lZElSUSA9IHMtPmlycS5Bc3NpZ25lZElSUTsKLQljb25maWctPkJhc2VQb3J0MSA9IGMtPmlvLkJhc2VQb3J0MTsKLQljb25maWctPk51bVBvcnRzMSA9IGMtPmlvLk51bVBvcnRzMTsKLQljb25maWctPkF0dHJpYnV0ZXMxID0gYy0+aW8uQXR0cmlidXRlczE7Ci0JY29uZmlnLT5CYXNlUG9ydDIgPSBjLT5pby5CYXNlUG9ydDI7Ci0JY29uZmlnLT5OdW1Qb3J0czIgPSBjLT5pby5OdW1Qb3J0czI7Ci0JY29uZmlnLT5BdHRyaWJ1dGVzMiA9IGMtPmlvLkF0dHJpYnV0ZXMyOwotCWNvbmZpZy0+SU9BZGRyTGluZXMgPSBjLT5pby5JT0FkZHJMaW5lczsKLQotCXJldHVybiBDU19TVUNDRVNTOwotfSAvKiBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyAqLwotCi1pbnQgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAotCQkJCSAgY29uZmlnX2luZm9fdCAqY29uZmlnKQotewotCXJldHVybiBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhwX2Rldi0+c29ja2V0LCBwX2RldiwKLQkJCQkJICAgICBjb25maWcpOwotfQotRVhQT1JUX1NZTUJPTChwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyk7Ci0KLQogLyoqIHBjbWNpYV9nZXRfd2luZG93CiAgKi8KIGludCBwY21jaWFfZ2V0X3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgd2luZG93X2hhbmRsZV90ICpoYW5kbGUsCkBAIC0yODQsMTIgKzIwNSwxMiBAQAogCWludCB3OwogCiAJaWYgKCFzIHx8ICEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JCXJldHVybiBDU19OT19DQVJEOworCQlyZXR1cm4gLUVOT0RFVjsKIAlmb3IgKHcgPSBpZHg7IHcgPCBNQVhfV0lOOyB3KyspCiAJCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9XSU5fUkVRKHcpKQogCQkJYnJlYWs7CiAJaWYgKHcgPT0gTUFYX1dJTikKLQkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7CisJCXJldHVybiAtRUlOVkFMOwogCXdpbiA9ICZzLT53aW5bd107CiAJcmVxLT5CYXNlID0gd2luLT5jdGwucmVzLT5zdGFydDsKIAlyZXEtPlNpemUgPSB3aW4tPmN0bC5yZXMtPmVuZCAtIHdpbi0+Y3RsLnJlcy0+c3RhcnQgKyAxOwpAQCAtMzA0LDcgKzIyNSw3IEBACiAJaWYgKHdpbi0+Y3RsLmZsYWdzICYgTUFQX1VTRV9XQUlUKQogCQlyZXEtPkF0dHJpYnV0ZXMgfD0gV0lOX1VTRV9XQUlUOwogCSpoYW5kbGUgPSB3aW47Ci0JcmV0dXJuIENTX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9IC8qIHBjbWNpYV9nZXRfd2luZG93ICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9nZXRfd2luZG93KTsKIApAQCAtMzE2LDEwICsyMzcsMTAgQEAKIGludCBwY21jaWFfZ2V0X21lbV9wYWdlKHdpbmRvd19oYW5kbGVfdCB3aW4sIG1lbXJlcV90ICpyZXEpCiB7CiAJaWYgKCh3aW4gPT0gTlVMTCkgfHwgKHdpbi0+bWFnaWMgIT0gV0lORE9XX01BR0lDKSkKLQkJcmV0dXJuIENTX0JBRF9IQU5ETEU7CisJCXJldHVybiAtRUlOVkFMOwogCXJlcS0+UGFnZSA9IDA7CiAJcmVxLT5DYXJkT2Zmc2V0ID0gd2luLT5jdGwuY2FyZF9zdGFydDsKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0gLyogcGNtY2lhX2dldF9tZW1fcGFnZSAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfZ2V0X21lbV9wYWdlKTsKIApAQCAtMzI4LDE0ICsyNDksMTggQEAKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKIAlpZiAoKHdpbiA9PSBOVUxMKSB8fCAod2luLT5tYWdpYyAhPSBXSU5ET1dfTUFHSUMpKQotCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKLQlpZiAocmVxLT5QYWdlICE9IDApCi0JCXJldHVybiBDU19CQURfUEFHRTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJcyA9IHdpbi0+c29jazsKKwlpZiAocmVxLT5QYWdlICE9IDApIHsKKwkJZHNfZGJnKHMsIDAsICJmYWlsdXJlOiByZXF1ZXN0ZWQgcGFnZSBpcyB6ZXJvXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXdpbi0+Y3RsLmNhcmRfc3RhcnQgPSByZXEtPkNhcmRPZmZzZXQ7Ci0JaWYgKHMtPm9wcy0+c2V0X21lbV9tYXAocywgJndpbi0+Y3RsKSAhPSAwKQotCQlyZXR1cm4gQ1NfQkFEX09GRlNFVDsKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlpZiAocy0+b3BzLT5zZXRfbWVtX21hcChzLCAmd2luLT5jdGwpICE9IDApIHsKKwkJZHNfZGJnKHMsIDAsICJmYWlsZWQgdG8gc2V0X21lbV9tYXBcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7CiB9IC8qIHBjbWNpYV9tYXBfbWVtX3BhZ2UgKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX21hcF9tZW1fcGFnZSk7CiAKQEAgLTM1NCw5ICsyNzksOSBAQAogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JCXJldHVybiBDU19OT19DQVJEOworCQlyZXR1cm4gLUVOT0RFVjsKIAlpZiAoIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKQotCQlyZXR1cm4gQ1NfQ09ORklHVVJBVElPTl9MT0NLRUQ7CisJCXJldHVybiAtRUFDQ0VTOwogCiAJaWYgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfSVJRX0NIQU5HRV9WQUxJRCkgewogCQlpZiAobW9kLT5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7CkBAIC0zNjksMjAgKzI5NCwyOCBAQAogCQlzLT5vcHMtPnNldF9zb2NrZXQocywgJnMtPnNvY2tldCk7CiAJfQogCi0JaWYgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVkNDX0NIQU5HRV9WQUxJRCkKLQkJcmV0dXJuIENTX0JBRF9WQ0M7CisJaWYgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVkNDX0NIQU5HRV9WQUxJRCkgeworCQlkc19kYmcocywgMCwgImNoYW5naW5nIFZjYyBpcyBub3QgYWxsb3dlZCBhdCB0aGlzIHRpbWVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAkvKiBXZSBvbmx5IGFsbG93IGNoYW5naW5nIFZwcDEgYW5kIFZwcDIgdG8gdGhlIHNhbWUgdmFsdWUgKi8KIAlpZiAoKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVlBQMV9DSEFOR0VfVkFMSUQpICYmCiAJICAgIChtb2QtPkF0dHJpYnV0ZXMgJiBDT05GX1ZQUDJfQ0hBTkdFX1ZBTElEKSkgewogCQlpZiAobW9kLT5WcHAxICE9IG1vZC0+VnBwMikKLQkJCXJldHVybiBDU19CQURfVlBQOworCQkJZHNfZGJnKHMsIDAsICJWcHAxIGFuZCBWcHAyIG11c3QgYmUgdGhlIHNhbWVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXMtPnNvY2tldC5WcHAgPSBtb2QtPlZwcDE7Ci0JCWlmIChzLT5vcHMtPnNldF9zb2NrZXQocywgJnMtPnNvY2tldCkpCi0JCQlyZXR1cm4gQ1NfQkFEX1ZQUDsKKwkJaWYgKHMtPm9wcy0+c2V0X3NvY2tldChzLCAmcy0+c29ja2V0KSkgeworCQkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsCisJCQkJICAgIlVuYWJsZSB0byBzZXQgVlBQXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAJfSBlbHNlIGlmICgobW9kLT5BdHRyaWJ1dGVzICYgQ09ORl9WUFAxX0NIQU5HRV9WQUxJRCkgfHwKLQkJICAgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVlBQMl9DSEFOR0VfVkFMSUQpKQotCQlyZXR1cm4gQ1NfQkFEX1ZQUDsKKwkJICAgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVlBQMl9DSEFOR0VfVkFMSUQpKSB7CisJCWRzX2RiZyhzLCAwLCAiY2hhbmdpbmcgVmNjIGlzIG5vdCBhbGxvd2VkIGF0IHRoaXMgdGltZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWlmIChtb2QtPkF0dHJpYnV0ZXMgJiBDT05GX0lPX0NIQU5HRV9XSURUSCkgewogCQlwY2NhcmRfaW9fbWFwIGlvX29mZiA9IHsgMCwgMCwgMCwgMCwgMSB9OwpAQCAtNDA2LDcgKzMzOSw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0gLyogbW9kaWZ5X2NvbmZpZ3VyYXRpb24gKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX21vZGlmeV9jb25maWd1cmF0aW9uKTsKIApAQCAtNDQxLDcgKzM3NCw3IEBACiAJCQl9CiAJfQogCi0JcmV0dXJuIENTX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9IC8qIHBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24gKi8KIAogCkBAIC00NTksNyArMzkyLDcgQEAKIAljb25maWdfdCAqYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKIAlpZiAoIXBfZGV2LT5faW8gKQotCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwX2Rldi0+X2lvID0gMDsKIApAQCAtNDY3LDcgKzQwMCw3IEBACiAJICAgIChjLT5pby5OdW1Qb3J0czEgIT0gcmVxLT5OdW1Qb3J0czEpIHx8CiAJICAgIChjLT5pby5CYXNlUG9ydDIgIT0gcmVxLT5CYXNlUG9ydDIpIHx8CiAJICAgIChjLT5pby5OdW1Qb3J0czIgIT0gcmVxLT5OdW1Qb3J0czIpKQotCQlyZXR1cm4gQ1NfQkFEX0FSR1M7CisJCXJldHVybiAtRUlOVkFMOwogCiAJYy0+c3RhdGUgJj0gfkNPTkZJR19JT19SRVE7CiAKQEAgLTQ3NSw3ICs0MDgsNyBAQAogCWlmIChyZXEtPk51bVBvcnRzMikKIAkJcmVsZWFzZV9pb19zcGFjZShzLCByZXEtPkJhc2VQb3J0MiwgcmVxLT5OdW1Qb3J0czIpOwogCi0JcmV0dXJuIENTX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9IC8qIHBjbWNpYV9yZWxlYXNlX2lvICovCiAKIApAQCAtNDg1LDE1ICs0MTgsMTkgQEAKIAljb25maWdfdCAqYz0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAogCWlmICghcF9kZXYtPl9pcnEpCi0JCXJldHVybiBDU19CQURfSEFORExFOworCQlyZXR1cm4gLUVJTlZBTDsKIAlwX2Rldi0+X2lycSA9IDA7CiAKIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKQotCQlyZXR1cm4gQ1NfQ09ORklHVVJBVElPTl9MT0NLRUQ7Ci0JaWYgKGMtPmlycS5BdHRyaWJ1dGVzICE9IHJlcS0+QXR0cmlidXRlcykKLQkJcmV0dXJuIENTX0JBRF9BVFRSSUJVVEU7Ci0JaWYgKHMtPmlycS5Bc3NpZ25lZElSUSAhPSByZXEtPkFzc2lnbmVkSVJRKQotCQlyZXR1cm4gQ1NfQkFEX0lSUTsKKwkJcmV0dXJuIC1FQUNDRVM7CisJaWYgKGMtPmlycS5BdHRyaWJ1dGVzICE9IHJlcS0+QXR0cmlidXRlcykgeworCQlkc19kYmcocywgMCwgIklSUSBhdHRyaWJ1dGVzIG11c3QgbWF0Y2ggYXNzaWduZWQgb25lc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocy0+aXJxLkFzc2lnbmVkSVJRICE9IHJlcS0+QXNzaWduZWRJUlEpIHsKKwkJZHNfZGJnKHMsIDAsICJJUlEgbXVzdCBtYXRjaCBhc3NpZ25lZCBvbmVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJaWYgKC0tcy0+aXJxLkNvbmZpZyA9PSAwKSB7CiAJCWMtPnN0YXRlICY9IH5DT05GSUdfSVJRX1JFUTsKIAkJcy0+aXJxLkFzc2lnbmVkSVJRID0gMDsKQEAgLTUwNyw3ICs0NDQsNyBAQAogCXBjbWNpYV91c2VkX2lycVtyZXEtPkFzc2lnbmVkSVJRXS0tOwogI2VuZGlmCiAKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0gLyogcGNtY2lhX3JlbGVhc2VfaXJxICovCiAKIApAQCAtNTE2LDEwICs0NTMsMTAgQEAKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKIAogCWlmICgod2luID09IE5VTEwpIHx8ICh3aW4tPm1hZ2ljICE9IFdJTkRPV19NQUdJQykpCi0JCXJldHVybiBDU19CQURfSEFORExFOworCQlyZXR1cm4gLUVJTlZBTDsKIAlzID0gd2luLT5zb2NrOwogCWlmICghKHdpbi0+aGFuZGxlLT5fd2luICYgQ0xJRU5UX1dJTl9SRVEod2luLT5pbmRleCkpKQotCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBTaHV0IGRvd24gbWVtb3J5IHdpbmRvdyAqLwogCXdpbi0+Y3RsLmZsYWdzICY9IH5NQVBfQUNUSVZFOwpAQCAtNTM2LDcgKzQ3Myw3IEBACiAKIAl3aW4tPm1hZ2ljID0gMDsKIAotCXJldHVybiBDU19TVUNDRVNTOworCXJldHVybiAwOwogfSAvKiBwY21jaWFfcmVsZWFzZV93aW5kb3cgKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3JlbGVhc2Vfd2luZG93KTsKIApAQCAtNTUxLDE4ICs0ODgsMjMgQEAKIAlwY2NhcmRfaW9fbWFwIGlvbWFwOwogCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JCXJldHVybiBDU19OT19DQVJEOworCQlyZXR1cm4gLUVOT0RFVjs7CiAKLQlpZiAocmVxLT5JbnRUeXBlICYgSU5UX0NBUkRCVVMpCi0JCXJldHVybiBDU19VTlNVUFBPUlRFRF9NT0RFOworCWlmIChyZXEtPkludFR5cGUgJiBJTlRfQ0FSREJVUykgeworCQlkc19kYmcocF9kZXYtPnNvY2tldCwgMCwgIkludFR5cGUgbWF5IG5vdCBiZSBJTlRfQ0FSREJVU1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAlpZiAoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKQotCQlyZXR1cm4gQ1NfQ09ORklHVVJBVElPTl9MT0NLRUQ7CisJCXJldHVybiAtRUFDQ0VTOwogCiAJLyogRG8gcG93ZXIgY29udHJvbC4gIFdlIGRvbid0IGFsbG93IGNoYW5nZXMgaW4gVmNjLiAqLwogCXMtPnNvY2tldC5WcHAgPSByZXEtPlZwcDsKLQlpZiAocy0+b3BzLT5zZXRfc29ja2V0KHMsICZzLT5zb2NrZXQpKQotCQlyZXR1cm4gQ1NfQkFEX1ZQUDsKKwlpZiAocy0+b3BzLT5zZXRfc29ja2V0KHMsICZzLT5zb2NrZXQpKSB7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LAorCQkJICAgIlVuYWJsZSB0byBzZXQgc29ja2V0IHN0YXRlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJLyogUGljayBtZW1vcnkgb3IgSS9PIGNhcmQsIERNQSBtb2RlLCBpbnRlcnJ1cHQgKi8KIAljLT5JbnRUeXBlID0gcmVxLT5JbnRUeXBlOwpAQCAtNjUxLDcgKzU5Myw3IEBACiAKIAljLT5zdGF0ZSB8PSBDT05GSUdfTE9DS0VEOwogCXBfZGV2LT5fbG9ja2VkID0gMTsKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0gLyogcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbiAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKTsKIApAQCAtNjY3LDM3ICs2MDksNDggQEAKIAljb25maWdfdCAqYzsKIAogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQotCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIXJlcSkKLQkJcmV0dXJuIENTX1VOU1VQUE9SVEVEX01PREU7CisJCXJldHVybiAtRUlOVkFMOwogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpCi0JCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKLQlpZiAoYy0+c3RhdGUgJiBDT05GSUdfSU9fUkVRKQotCQlyZXR1cm4gQ1NfSU5fVVNFOwotCWlmIChyZXEtPkF0dHJpYnV0ZXMxICYgKElPX1NIQVJFRCB8IElPX0ZPUkNFX0FMSUFTX0FDQ0VTUykpCi0JCXJldHVybiBDU19CQURfQVRUUklCVVRFOworCQlyZXR1cm4gLUVBQ0NFUzsKKwlpZiAoYy0+c3RhdGUgJiBDT05GSUdfSU9fUkVRKSB7CisJCWRzX2RiZyhzLCAwLCAiSU8gYWxyZWFkeSBjb25maWd1cmVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKHJlcS0+QXR0cmlidXRlczEgJiAoSU9fU0hBUkVEIHwgSU9fRk9SQ0VfQUxJQVNfQUNDRVNTKSkgeworCQlkc19kYmcocywgMCwgImJhZCBhdHRyaWJ1dGUgc2V0dGluZyBmb3IgSU8gcmVnaW9uIDFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJaWYgKChyZXEtPk51bVBvcnRzMiA+IDApICYmCi0JICAgIChyZXEtPkF0dHJpYnV0ZXMyICYgKElPX1NIQVJFRCB8IElPX0ZPUkNFX0FMSUFTX0FDQ0VTUykpKQotCQlyZXR1cm4gQ1NfQkFEX0FUVFJJQlVURTsKKwkgICAgKHJlcS0+QXR0cmlidXRlczIgJiAoSU9fU0hBUkVEIHwgSU9fRk9SQ0VfQUxJQVNfQUNDRVNTKSkpIHsKKwkJZHNfZGJnKHMsIDAsICJiYWQgYXR0cmlidXRlIHNldHRpbmcgZm9yIElPIHJlZ2lvbiAyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCisJZHNfZGJnKHMsIDEsICJ0cnlpbmcgdG8gYWxsb2NhdGUgcmVzb3VyY2UgMVxuIik7CiAJaWYgKGFsbG9jX2lvX3NwYWNlKHMsIHJlcS0+QXR0cmlidXRlczEsICZyZXEtPkJhc2VQb3J0MSwKLQkJCSAgIHJlcS0+TnVtUG9ydHMxLCByZXEtPklPQWRkckxpbmVzKSkKLQkJcmV0dXJuIENTX0lOX1VTRTsKKwkJCSAgIHJlcS0+TnVtUG9ydHMxLCByZXEtPklPQWRkckxpbmVzKSkgeworCQlkc19kYmcocywgMCwgImFsbG9jYXRpb24gb2YgcmVzb3VyY2UgMSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KIAogCWlmIChyZXEtPk51bVBvcnRzMikgeworCQlkc19kYmcocywgMSwgInRyeWluZyB0byBhbGxvY2F0ZSByZXNvdXJjZSAyXG4iKTsKIAkJaWYgKGFsbG9jX2lvX3NwYWNlKHMsIHJlcS0+QXR0cmlidXRlczIsICZyZXEtPkJhc2VQb3J0MiwKIAkJCQkgICByZXEtPk51bVBvcnRzMiwgcmVxLT5JT0FkZHJMaW5lcykpIHsKKwkJCWRzX2RiZyhzLCAwLCAiYWxsb2NhdGlvbiBvZiByZXNvdXJjZSAyIGZhaWxlZFxuIik7CiAJCQlyZWxlYXNlX2lvX3NwYWNlKHMsIHJlcS0+QmFzZVBvcnQxLCByZXEtPk51bVBvcnRzMSk7Ci0JCQlyZXR1cm4gQ1NfSU5fVVNFOworCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCX0KIAogCWMtPmlvID0gKnJlcTsKIAljLT5zdGF0ZSB8PSBDT05GSUdfSU9fUkVROwogCXBfZGV2LT5faW8gPSAxOwotCXJldHVybiBDU19TVUNDRVNTOworCXJldHVybiAwOwogfSAvKiBwY21jaWFfcmVxdWVzdF9pbyAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfcmVxdWVzdF9pbyk7CiAKQEAgLTcyMywxNiArNjc2LDE4IEBACiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OwogCWNvbmZpZ190ICpjOwotCWludCByZXQgPSBDU19JTl9VU0UsIGlycSA9IDA7CisJaW50IHJldCA9IC1FSU5WQUwsIGlycSA9IDA7CiAJaW50IHR5cGU7CiAKIAlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKLQkJcmV0dXJuIENTX05PX0NBUkQ7CisJCXJldHVybiAtRU5PREVWOwogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpCi0JCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKLQlpZiAoYy0+c3RhdGUgJiBDT05GSUdfSVJRX1JFUSkKLQkJcmV0dXJuIENTX0lOX1VTRTsKKwkJcmV0dXJuIC1FQUNDRVM7CisJaWYgKGMtPnN0YXRlICYgQ09ORklHX0lSUV9SRVEpIHsKKwkJZHNfZGJnKHMsIDAsICJJUlEgYWxyZWFkeSBjb25maWd1cmVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CiAKIAkvKiBEZWNpZGUgd2hhdCB0eXBlIG9mIGludGVycnVwdCB3ZSBhcmUgcmVnaXN0ZXJpbmcgKi8KIAl0eXBlID0gMDsKQEAgLTc5NSwxNSArNzUwLDE5IEBACiAJfQogCiAJaWYgKHJldCAmJiAocmVxLT5BdHRyaWJ1dGVzICYgSVJRX0hBTkRMRV9QUkVTRU5UKSkgewotCQlpZiAocmVxdWVzdF9pcnEoaXJxLCByZXEtPkhhbmRsZXIsIHR5cGUsICBwX2Rldi0+ZGV2bmFtZSwgcmVxLT5JbnN0YW5jZSkpCi0JCQlyZXR1cm4gQ1NfSU5fVVNFOworCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHJlcS0+SGFuZGxlciwgdHlwZSwKKwkJCQkgIHBfZGV2LT5kZXZuYW1lLCByZXEtPkluc3RhbmNlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CiAJfQogCiAJLyogTWFrZSBzdXJlIHRoZSBmYWN0IHRoZSByZXF1ZXN0IHR5cGUgd2FzIG92ZXJyaWRkZW4gaXMgcGFzc2VkIGJhY2sgKi8KIAlpZiAodHlwZSA9PSBJUlFGX1NIQVJFRCAmJiAhKHJlcS0+QXR0cmlidXRlcyAmIElSUV9UWVBFX0RZTkFNSUNfU0hBUklORykpIHsKIAkJcmVxLT5BdHRyaWJ1dGVzIHw9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicGNtY2lhOiByZXF1ZXN0IGZvciBleGNsdXNpdmUgSVJRIGNvdWxkIG5vdCBiZSBmdWxmaWxsZWQuXG4iKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAicGNtY2lhOiB0aGUgZHJpdmVyIG5lZWRzIHVwZGF0aW5nIHRvIHN1cHBvcnRlZCBzaGFyZWQgSVJRIGxpbmVzLlxuIik7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcF9kZXYtPmRldiwgInBjbWNpYTogIgorCQkJInJlcXVlc3QgZm9yIGV4Y2x1c2l2ZSBJUlEgY291bGQgbm90IGJlIGZ1bGZpbGxlZC5cbiIpOworCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBfZGV2LT5kZXYsICJwY21jaWE6IHRoZSBkcml2ZXIgIgorCQkJIm5lZWRzIHVwZGF0aW5nIHRvIHN1cHBvcnRlZCBzaGFyZWQgSVJRIGxpbmVzLlxuIik7CiAJfQogCWMtPmlycS5BdHRyaWJ1dGVzID0gcmVxLT5BdHRyaWJ1dGVzOwogCXMtPmlycS5Bc3NpZ25lZElSUSA9IHJlcS0+QXNzaWduZWRJUlEgPSBpcnE7CkBAIC04MTYsNyArNzc1LDcgQEAKIAlwY21jaWFfdXNlZF9pcnFbaXJxXSsrOwogI2VuZGlmCiAKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0gLyogcGNtY2lhX3JlcXVlc3RfaXJxICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXF1ZXN0X2lycSk7CiAKQEAgLTgzNCw5ICs3OTMsMTEgQEAKIAlpbnQgdzsKIAogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQotCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKLQlpZiAocmVxLT5BdHRyaWJ1dGVzICYgKFdJTl9QQUdFRCB8IFdJTl9TSEFSRUQpKQotCQlyZXR1cm4gQ1NfQkFEX0FUVFJJQlVURTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKHJlcS0+QXR0cmlidXRlcyAmIChXSU5fUEFHRUQgfCBXSU5fU0hBUkVEKSkgeworCQlkc19kYmcocywgMCwgImJhZCBhdHRyaWJ1dGUgc2V0dGluZyBmb3IgaW9tZW0gcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJLyogV2luZG93IHNpemUgZGVmYXVsdHMgdG8gc21hbGxlc3QgYXZhaWxhYmxlICovCiAJaWYgKHJlcS0+U2l6ZSA9PSAwKQpAQCAtODQ0LDE5ICs4MDUsMjUgQEAKIAlhbGlnbiA9ICgoKHMtPmZlYXR1cmVzICYgU1NfQ0FQX01FTV9BTElHTikgfHwKIAkJICAocmVxLT5BdHRyaWJ1dGVzICYgV0lOX1NUUklDVF9BTElHTikpID8KIAkJIHJlcS0+U2l6ZSA6IHMtPm1hcF9zaXplKTsKLQlpZiAocmVxLT5TaXplICYgKHMtPm1hcF9zaXplLTEpKQotCQlyZXR1cm4gQ1NfQkFEX1NJWkU7CisJaWYgKHJlcS0+U2l6ZSAmIChzLT5tYXBfc2l6ZS0xKSkgeworCQlkc19kYmcocywgMCwgImludmFsaWQgbWFwIHNpemVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJaWYgKChyZXEtPkJhc2UgJiYgKHMtPmZlYXR1cmVzICYgU1NfQ0FQX1NUQVRJQ19NQVApKSB8fAotCSAgICAocmVxLT5CYXNlICYgKGFsaWduLTEpKSkKLQkJcmV0dXJuIENTX0JBRF9CQVNFOworCSAgICAocmVxLT5CYXNlICYgKGFsaWduLTEpKSkgeworCQlkc19kYmcocywgMCwgImludmFsaWQgYmFzZSBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCWlmIChyZXEtPkJhc2UpCiAJCWFsaWduID0gMDsKIAogCS8qIEFsbG9jYXRlIHN5c3RlbSBtZW1vcnkgd2luZG93ICovCiAJZm9yICh3ID0gMDsgdyA8IE1BWF9XSU47IHcrKykKIAkJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfV0lOX1JFUSh3KSkpIGJyZWFrOwotCWlmICh3ID09IE1BWF9XSU4pCi0JCXJldHVybiBDU19PVVRfT0ZfUkVTT1VSQ0U7CisJaWYgKHcgPT0gTUFYX1dJTikgeworCQlkc19kYmcocywgMCwgImFsbCB3aW5kb3dzIGFyZSB1c2VkIGFscmVhZHlcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAl3aW4gPSAmcy0+d2luW3ddOwogCXdpbi0+bWFnaWMgPSBXSU5ET1dfTUFHSUM7CkBAIC04NjcsOCArODM0LDEwIEBACiAJaWYgKCEocy0+ZmVhdHVyZXMgJiBTU19DQVBfU1RBVElDX01BUCkpIHsKIAkJd2luLT5jdGwucmVzID0gcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbihyZXEtPkJhc2UsIHJlcS0+U2l6ZSwgYWxpZ24sCiAJCQkJCQkgICAgICAocmVxLT5BdHRyaWJ1dGVzICYgV0lOX01BUF9CRUxPV18xTUIpLCBzKTsKLQkJaWYgKCF3aW4tPmN0bC5yZXMpCi0JCQlyZXR1cm4gQ1NfSU5fVVNFOworCQlpZiAoIXdpbi0+Y3RsLnJlcykgeworCQkJZHNfZGJnKHMsIDAsICJhbGxvY2F0aW5nIG1lbSByZWdpb24gZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCSgqcF9kZXYpLT5fd2luIHw9IENMSUVOVF9XSU5fUkVRKHcpOwogCkBAIC04ODUsOCArODU0LDEwIEBACiAJaWYgKHJlcS0+QXR0cmlidXRlcyAmIFdJTl9VU0VfV0FJVCkKIAkJd2luLT5jdGwuZmxhZ3MgfD0gTUFQX1VTRV9XQUlUOwogCXdpbi0+Y3RsLmNhcmRfc3RhcnQgPSAwOwotCWlmIChzLT5vcHMtPnNldF9tZW1fbWFwKHMsICZ3aW4tPmN0bCkgIT0gMCkKLQkJcmV0dXJuIENTX0JBRF9BUkdTOworCWlmIChzLT5vcHMtPnNldF9tZW1fbWFwKHMsICZ3aW4tPmN0bCkgIT0gMCkgeworCQlkc19kYmcocywgMCwgImZhaWxlZCB0byBzZXQgbWVtb3J5IG1hcHBpbmdcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAJcy0+c3RhdGUgfD0gU09DS0VUX1dJTl9SRVEodyk7CiAKIAkvKiBSZXR1cm4gd2luZG93IGhhbmRsZSAqLwpAQCAtODk3LDcgKzg2OCw3IEBACiAJfQogCSp3aCA9IHdpbjsKIAotCXJldHVybiBDU19TVUNDRVNTOworCXJldHVybiAwOwogfSAvKiBwY21jaWFfcmVxdWVzdF93aW5kb3cgKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcXVlc3Rfd2luZG93KTsKIApAQCAtOTA5LDMgKzg4MCw3OSBAQAogCQlwY21jaWFfcmVsZWFzZV93aW5kb3cocF9kZXYtPndpbik7CiB9CiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9kaXNhYmxlX2RldmljZSk7CisKKworc3RydWN0IHBjbWNpYV9jZmdfbWVtIHsKKwl0dXBsZV90IHR1cGxlOworCWNpc3BhcnNlX3QgcGFyc2U7CisJdTggYnVmWzI1Nl07CisJY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0OworfTsKKworLyoqCisgKiBwY21jaWFfbG9vcF9jb25maWcoKSAtIGxvb3Agb3ZlciBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyAqIEBwX2RldjoJdGhlIHN0cnVjdCBwY21jaWFfZGV2aWNlIHdoaWNoIHdlIG5lZWQgdG8gbG9vcCBmb3IuCisgKiBAY29uZl9jaGVjazoJZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbi4KKyAqCQlJdCBnZXRzIHBhc3NlZCB0aGUgc3RydWN0IHBjbWNpYV9kZXZpY2UsIHRoZSBDSVMgZGF0YQorICoJCWRlc2NyaWJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgcHJpdmF0ZSBkYXRhCisgKgkJYmVpbmcgcGFzc2VkIHRvIHBjbWNpYV9sb29wX2NvbmZpZygpCisgKiBAcHJpdl9kYXRhOglwcml2YXRlIGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBjb25mX2NoZWNrIGZ1bmN0aW9uLgorICoKKyAqIHBjbWNpYV9sb29wX2NvbmZpZygpIGxvb3BzIG92ZXIgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIGNhbGxzCisgKiB0aGUgZHJpdmVyLXNwZWNpZmljIGNvbmZfY2hlY2soKSBmb3IgZWFjaCBvbmUsIGNoZWNraW5nIHdoZXRoZXIKKyAqIGl0IGlzIGEgdmFsaWQgb25lLgorICovCitpbnQgcGNtY2lhX2xvb3BfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJICAgICAgIGludAkoKmNvbmZfY2hlY2spCShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJCQkgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJCQkJIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJCQkgdW5zaWduZWQgaW50IHZjYywKKwkJCQkJCSB2b2lkICpwcml2X2RhdGEpLAorCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBwY21jaWFfY2ZnX21lbSAqY2ZnX21lbTsKKworCXR1cGxlX3QgKnR1cGxlOworCWludCByZXQgPSAtRU5PREVWOworCXVuc2lnbmVkIGludCB2Y2M7CisKKwljZmdfbWVtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjbWNpYV9jZmdfbWVtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNmZ19tZW0gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBnZXQgdGhlIGN1cnJlbnQgVmNjIHNldHRpbmcgKi8KKwl2Y2MgPSBwX2Rldi0+c29ja2V0LT5zb2NrZXQuVmNjOworCisJdHVwbGUgPSAmY2ZnX21lbS0+dHVwbGU7CisJdHVwbGUtPlR1cGxlRGF0YSA9IGNmZ19tZW0tPmJ1ZjsKKwl0dXBsZS0+VHVwbGVEYXRhTWF4ID0gMjU1OworCXR1cGxlLT5UdXBsZU9mZnNldCA9IDA7CisJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOworCXR1cGxlLT5BdHRyaWJ1dGVzID0gMDsKKworCXJldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUocF9kZXYsIHR1cGxlKTsKKwl3aGlsZSAoIXJldCkgeworCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmY2ZnX21lbS0+cGFyc2UuY2Z0YWJsZV9lbnRyeTsKKworCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKHBfZGV2LCB0dXBsZSkpCisJCQlnb3RvIG5leHRfZW50cnk7CisKKwkJaWYgKHBjbWNpYV9wYXJzZV90dXBsZSh0dXBsZSwgJmNmZ19tZW0tPnBhcnNlKSkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKworCQkvKiBkZWZhdWx0IHZhbHVlcyAqLworCQlwX2Rldi0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CisJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKKwkJCWNmZ19tZW0tPmRmbHQgPSAqY2ZnOworCisJCXJldCA9IGNvbmZfY2hlY2socF9kZXYsIGNmZywgJmNmZ19tZW0tPmRmbHQsIHZjYywgcHJpdl9kYXRhKTsKKwkJaWYgKCFyZXQpCisJCQlicmVhazsKKworbmV4dF9lbnRyeToKKwkJcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKHBfZGV2LCB0dXBsZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocGNtY2lhX2xvb3BfY29uZmlnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCmluZGV4IDEzZjFlMGYuLmJiOWRkYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KIAotI2luY2x1ZGUgImNzX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic29jX2NvbW1vbi5oIgogI2luY2x1ZGUgInB4YTJ4eF9iYXNlLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCmluZGV4IDIwM2U1NzkuLjE3ZjRlY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwpAQCAtMTIyLDE5ICsxMjIsMjIgQEAKIAogc3RhdGljIGludCBhZGRfaW50ZXJ2YWwoc3RydWN0IHJlc291cmNlX21hcCAqbWFwLCB1X2xvbmcgYmFzZSwgdV9sb25nIG51bSkKIHsKLSAgICBzdHJ1Y3QgcmVzb3VyY2VfbWFwICpwLCAqcTsKKwlzdHJ1Y3QgcmVzb3VyY2VfbWFwICpwLCAqcTsKIAotICAgIGZvciAocCA9IG1hcDsgOyBwID0gcC0+bmV4dCkgewotCWlmICgocCAhPSBtYXApICYmIChwLT5iYXNlK3AtPm51bS0xID49IGJhc2UpKQotCSAgICByZXR1cm4gLTE7Ci0JaWYgKChwLT5uZXh0ID09IG1hcCkgfHwgKHAtPm5leHQtPmJhc2UgPiBiYXNlK251bS0xKSkKLQkgICAgYnJlYWs7Ci0gICAgfQotICAgIHEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2VfbWFwKSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKCFxKSByZXR1cm4gQ1NfT1VUX09GX1JFU09VUkNFOwotICAgIHEtPmJhc2UgPSBiYXNlOyBxLT5udW0gPSBudW07Ci0gICAgcS0+bmV4dCA9IHAtPm5leHQ7IHAtPm5leHQgPSBxOwotICAgIHJldHVybiBDU19TVUNDRVNTOworCWZvciAocCA9IG1hcDsgOyBwID0gcC0+bmV4dCkgeworCQlpZiAoKHAgIT0gbWFwKSAmJiAocC0+YmFzZStwLT5udW0tMSA+PSBiYXNlKSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKChwLT5uZXh0ID09IG1hcCkgfHwgKHAtPm5leHQtPmJhc2UgPiBiYXNlK251bS0xKSkKKwkJCWJyZWFrOworCX0KKwlxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlX21hcCksIEdGUF9LRVJORUwpOworCWlmICghcSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJvdXQgb2YgbWVtb3J5IHRvIHVwZGF0ZSByZXNvdXJjZXNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcS0+YmFzZSA9IGJhc2U7IHEtPm51bSA9IG51bTsKKwlxLT5uZXh0ID0gcC0+bmV4dDsgcC0+bmV4dCA9IHE7CisJcmV0dXJuIDA7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtMTY2LDcgKzE2OSwxMCBAQAogCSAgICB9IGVsc2UgewogCQkvKiBTcGxpdCB0aGUgYmxvY2sgaW50byB0d28gcGllY2VzICovCiAJCXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2VfbWFwKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcCkgcmV0dXJuIENTX09VVF9PRl9SRVNPVVJDRTsKKwkJaWYgKCFwKSB7CisJCSAgICBwcmludGsoS0VSTl9XQVJOSU5HICJvdXQgb2YgbWVtb3J5IHRvIHVwZGF0ZSByZXNvdXJjZXNcbiIpOworCQkgICAgcmV0dXJuIC1FTk9NRU07CisJCX0KIAkJcC0+YmFzZSA9IGJhc2UrbnVtOwogCQlwLT5udW0gPSBxLT5iYXNlK3EtPm51bSAtIHAtPmJhc2U7CiAJCXEtPm51bSA9IGJhc2UgLSBxLT5iYXNlOwpAQCAtMTc0LDcgKzE4MCw3IEBACiAJICAgIH0KIAl9CiAgICAgfQotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE5NCwxMyArMjAwLDE0IEBACiAgICAgaW50IGFueTsKICAgICB1X2NoYXIgKmIsIGhvbGUsIG1vc3Q7CiAKLSAgICBwcmludGsoS0VSTl9JTkZPICJjczogSU8gcG9ydCBwcm9iZSAlI3gtJSN4OiIsCi0JICAgYmFzZSwgYmFzZStudW0tMSk7CisgICAgZGV2X3ByaW50ayhLRVJOX0lORk8sICZzLT5kZXYsICJjczogSU8gcG9ydCBwcm9iZSAlI3gtJSN4OiIsCisJICAgICAgIGJhc2UsIGJhc2UrbnVtLTEpOwogCiAgICAgLyogRmlyc3QsIHdoYXQgZG9lcyBhIGZsb2F0aW5nIHBvcnQgbG9vayBsaWtlPyAqLwogICAgIGIgPSBremFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKCFiKSB7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImRvX2lvX3Byb2JlOiB1bmFibGUgdG8ga21hbGxvYyAyNTYgYnl0ZXMiKTsKKwkgICAgZGV2X3ByaW50ayhLRVJOX0VSUiwgJnMtPmRldiwKKwkJICAgImRvX2lvX3Byb2JlOiB1bmFibGUgdG8ga21hbGxvYyAyNTYgYnl0ZXMiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZm9yIChpID0gYmFzZSwgbW9zdCA9IDA7IGkgPCBiYXNlK251bTsgaSArPSA4KSB7CkBAIC0zNjYsOCArMzczLDggQEAKICAgICBzdHJ1Y3Qgc29ja2V0X2RhdGEgKnNfZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAgICAgdV9sb25nIGksIGosIGJhZCwgZmFpbCwgc3RlcDsKIAotICAgIHByaW50ayhLRVJOX0lORk8gImNzOiBtZW1vcnkgcHJvYmUgMHglMDZseC0weCUwNmx4OiIsCi0JICAgYmFzZSwgYmFzZStudW0tMSk7CisgICAgZGV2X3ByaW50ayhLRVJOX0lORk8sICZzLT5kZXYsICJjczogbWVtb3J5IHByb2JlIDB4JTA2bHgtMHglMDZseDoiLAorCSAgICAgICBiYXNlLCBiYXNlK251bS0xKTsKICAgICBiYWQgPSBmYWlsID0gMDsKICAgICBzdGVwID0gKG51bSA8IDB4MjAwMDApID8gMHgyMDAwIDogKChudW0+PjQpICYgfjB4MWZmZik7CiAgICAgLyogZG9uJ3QgYWxsb3cgdG9vIGxhcmdlIHN0ZXBzICovCkBAIC00MzEsOCArNDM4LDggQEAKIAlpZiAocHJvYmVfbWFzayAmIE1FTV9QUk9CRV9ISUdIKSB7CiAJCWlmIChpbnZfcHJvYmUoc19kYXRhLT5tZW1fZGIubmV4dCwgcykgPiAwKQogCQkJcmV0dXJuIDA7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiY3M6IHdhcm5pbmc6IG5vIGhpZ2ggbWVtb3J5IHNwYWNlICIKLQkJICAgICAgICJhdmFpbGFibGUhXG4iKTsKKwkJZGV2X3ByaW50ayhLRVJOX05PVElDRSwgJnMtPmRldiwKKwkJCSAgICJjczogd2FybmluZzogbm8gaGlnaCBtZW1vcnkgc3BhY2UgYXZhaWxhYmxlIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNzk0LDEwICs4MDEsMTEgQEAKIAkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7CiAJCQlpZiAocmVzID09ICZpb3BvcnRfcmVzb3VyY2UpCiAJCQkJY29udGludWU7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IHBhcmVudCBQQ0kgYnJpZGdlIEkvTyAiCi0JCQkJIndpbmRvdzogMHglbGx4IC0gMHglbGx4XG4iLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKwkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcy0+Y2JfZGV2LT5kZXYsCisJCQkJICAgInBjbWNpYTogcGFyZW50IFBDSSBicmlkZ2UgSS9PICIKKwkJCQkgICAid2luZG93OiAweCVsbHggLSAweCVsbHhcbiIsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOwogCQkJaWYgKCFhZGp1c3RfaW8ocywgQUREX01BTkFHRURfUkVTT1VSQ0UsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKSkKIAkJCQlkb25lIHw9IElPUkVTT1VSQ0VfSU87CiAKQEAgLTgwNiwxMCArODE0LDExIEBACiAJCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKIAkJCWlmIChyZXMgPT0gJmlvbWVtX3Jlc291cmNlKQogCQkJCWNvbnRpbnVlOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBwYXJlbnQgUENJIGJyaWRnZSBNZW1vcnkgIgotCQkJCSJ3aW5kb3c6IDB4JWxseCAtIDB4JWxseFxuIiwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CisJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnMtPmNiX2Rldi0+ZGV2LAorCQkJCSAgICJwY21jaWE6IHBhcmVudCBQQ0kgYnJpZGdlIE1lbW9yeSAiCisJCQkJICAgIndpbmRvdzogMHglbGx4IC0gMHglbGx4XG4iLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKIAkJCWlmICghYWRqdXN0X21lbW9yeShzLCBBRERfTUFOQUdFRF9SRVNPVVJDRSwgcmVzLT5zdGFydCwgcmVzLT5lbmQpKQogCQkJCWRvbmUgfD0gSU9SRVNPVVJDRV9NRU07CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYwppbmRleCBkYTM5NzIxLi5mNDlhYzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCkBAIC01NCw3ICs1NCw3IEBACiAjaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2VuZGlmCiAKLSNpZmRlZiBERUJVRworI2lmZGVmIENPTkZJR19QQ01DSUFfREVCVUcKIAogc3RhdGljIGludCBwY19kZWJ1ZzsKIG1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjQ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaCBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaAppbmRleCA5MWVmNmEwLi4zOGM2NzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmgKKysrIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgotI2luY2x1ZGUgImNzX2ludGVybmFsLmgiCiAKIAogc3RydWN0IGRldmljZTsKQEAgLTEzNyw3ICsxMzYsNyBAQAogZXh0ZXJuIGludCBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIAotI2lmZGVmIERFQlVHCisjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwogCiBleHRlcm4gdm9pZCBzb2NfcGNtY2lhX2RlYnVnKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LCBjb25zdCBjaGFyICpmdW5jLAogCQkJICAgICBpbnQgbHZsLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYyBiL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCmluZGV4IDAwNmEyOWUuLmZmOWEzYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCkBAIC0zMTYsMjcgKzMxNiwxOCBAQAogCQkJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gdG9fc29ja2V0KGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7Ci0JY2lzZHVtcF90ICpjaXM7CiAJaW50IGVycm9yOwogCiAJaWYgKG9mZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoY291bnQgPj0gMHgyMDApCisJaWYgKGNvdW50ID49IENJU1RQTF9NQVhfQ0lTX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2lzID0ga3phbGxvYyhzaXplb2YoY2lzZHVtcF90KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjaXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY2lzLT5MZW5ndGggPSBjb3VudCArIDE7Ci0JbWVtY3B5KGNpcy0+RGF0YSwgYnVmLCBjb3VudCk7Ci0KLQllcnJvciA9IHBjbWNpYV9yZXBsYWNlX2NpcyhzLCBjaXMpOwotCWtmcmVlKGNpcyk7CisJZXJyb3IgPSBwY21jaWFfcmVwbGFjZV9jaXMocywgYnVmLCBjb3VudCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gLUVJTzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdGNpYy5jIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCmluZGV4IDU3OTJiZDUuLjJhNjEzZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKQEAgLTU1LDcgKzU1LDcgQEAKICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlICJ0Y2ljLmgiCiAKLSNpZmRlZiBERUJVRworI2lmZGVmIENPTkZJR19QQ01DSUFfREVCVUcKIHN0YXRpYyBpbnQgcGNfZGVidWc7CiAKIG1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjQ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3RpMTEzeC5oIGIvZHJpdmVycy9wY21jaWEvdGkxMTN4LmgKaW5kZXggMTI5ZGI3Yi4uYWFhNzAyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdGkxMTN4LmgKKysrIGIvZHJpdmVycy9wY21jaWEvdGkxMTN4LmgKQEAgLTMzOSw4ICszMzksOCBAQAogCiAJbWZ1bmMgPSBtZnVuY19vbGQgPSBjb25maWdfcmVhZGwoc29ja2V0LCBUSTEyMlhfTUZVTkMpOwogCWRldmN0bCA9IGNvbmZpZ19yZWFkYihzb2NrZXQsIFRJMTEzWF9ERVZJQ0VfQ09OVFJPTCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiWWVudGEgVEk6IHNvY2tldCAlcywgbWZ1bmMgMHglMDh4LCBkZXZjdGwgMHglMDJ4XG4iLAotCSAgICAgICBwY2lfbmFtZShzb2NrZXQtPmRldiksIG1mdW5jLCBkZXZjdGwpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJICAgIlRJOiBtZnVuYyAweCUwOHgsIGRldmN0bCAweCUwMnhcbiIsIG1mdW5jLCBkZXZjdGwpOwogCiAJLyogbWFrZSBzdXJlIFBDSSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGJlZm9yZSBwcm9iaW5nICovCiAJdGlfaW5pdChzb2NrZXQpOwpAQCAtMzU0LDggKzM1NCw4IEBACiAJICogV2UncmUgaGVyZSB3aGljaCBtZWFucyBQQ0kgaW50ZXJydXB0cyBhcmUgX25vdF8gZGVsaXZlcmVkLiB0cnkgdG8KIAkgKiBmaW5kIHRoZSByaWdodCBzZXR0aW5nIChhbGwgc2VyaWFsIG9yIHBhcmFsbGVsKQogCSAqLwotCXByaW50ayhLRVJOX0lORk8gIlllbnRhIFRJOiBzb2NrZXQgJXMgcHJvYmluZyBQQ0kgaW50ZXJydXB0IGZhaWxlZCwgdHJ5aW5nIHRvIGZpeFxuIiwKLQkgICAgICAgcGNpX25hbWUoc29ja2V0LT5kZXYpKTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCSAgICJUSTogcHJvYmluZyBQQ0kgaW50ZXJydXB0IGZhaWxlZCwgdHJ5aW5nIHRvIGZpeFxuIik7CiAKIAkvKiBmb3Igc2VyaWFsIFBDSSBtYWtlIHN1cmUgTUZVTkMzIGlzIHNldCB0byBJUlFTRVIgKi8KIAlpZiAoKGRldmN0bCAmIFRJMTEzWF9EQ1JfSU1PREVfTUFTSykgPT0gVEkxMlhYX0RDUl9JTU9ERV9BTExfU0VSSUFMKSB7CkBAIC0zNzksOCArMzc5LDggQEAKIAogCQkJCXBjaV9pcnFfc3RhdHVzID0geWVudGFfcHJvYmVfY2JfaXJxKHNvY2tldCk7CiAJCQkJaWYgKHBjaV9pcnFfc3RhdHVzID09IDEpIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGEgVEk6IHNvY2tldCAlcyBhbGwtc2VyaWFsIGludGVycnVwdHMgb2tcbiIsCi0JCQkJCSAgICAgICBwY2lfbmFtZShzb2NrZXQtPmRldikpOworCQkJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkJCSAgICAiVEk6IGFsbC1zZXJpYWwgaW50ZXJydXB0cyBva1xuIik7CiAJCQkJCW1mdW5jX29sZCA9IG1mdW5jOwogCQkJCQlnb3RvIG91dDsKIAkJCQl9CkBAIC0zOTUsOCArMzk1LDggQEAKIAkJfQogCiAJCS8qIHNlcmlhbCBQQ0kgaW50ZXJydXB0cyBub3Qgd29ya2luZyBmYWxsIGJhY2sgdG8gcGFyYWxsZWwgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGEgVEk6IHNvY2tldCAlcyBmYWxsaW5nIGJhY2sgdG8gcGFyYWxsZWwgUENJIGludGVycnVwdHNcbiIsCi0JCSAgICAgICBwY2lfbmFtZShzb2NrZXQtPmRldikpOworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkgICAiVEk6IGZhbGxpbmcgYmFjayB0byBwYXJhbGxlbCBQQ0kgaW50ZXJydXB0c1xuIik7CiAJCWRldmN0bCAmPSB+VEkxMTNYX0RDUl9JTU9ERV9NQVNLOwogCQlkZXZjdGwgfD0gVEkxMTNYX0RDUl9JTU9ERV9TRVJJQUw7IC8qIHNlcmlhbCBJU0EgY291bGQgYmUgcmlnaHQgKi8KIAkJY29uZmlnX3dyaXRlYihzb2NrZXQsIFRJMTEzWF9ERVZJQ0VfQ09OVFJPTCwgZGV2Y3RsKTsKQEAgLTQyNyw4ICs0MjcsOCBAQAogCXBjaV9pcnFfc3RhdHVzID0geWVudGFfcHJvYmVfY2JfaXJxKHNvY2tldCk7CiAJaWYgKHBjaV9pcnFfc3RhdHVzID09IDEpIHsKIAkJbWZ1bmNfb2xkID0gbWZ1bmM7Ci0JCXByaW50ayhLRVJOX0lORk8gIlllbnRhIFRJOiBzb2NrZXQgJXMgcGFyYWxsZWwgUENJIGludGVycnVwdHMgb2tcbiIsCi0JCSAgICAgICBwY2lfbmFtZShzb2NrZXQtPmRldikpOworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkgICAiVEk6IHBhcmFsbGVsIFBDSSBpbnRlcnJ1cHRzIG9rXG4iKTsKIAl9IGVsc2UgewogCQkvKiBub3Qgd29ya2luZywgYmFjayB0byBvbGQgdmFsdWUgKi8KIAkJbWZ1bmMgPSBtZnVuY19vbGQ7CkBAIC00NDAsOCArNDQwLDkgQEAKIG91dDoKIAlpZiAocGNpX2lycV9zdGF0dXMgPCAxKSB7CiAJCXNvY2tldC0+Y2JfaXJxID0gMDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGEgVEk6IHNvY2tldCAlcyBubyBQQ0kgaW50ZXJydXB0cy4gRmlzaC4gUGxlYXNlIHJlcG9ydC5cbiIsCi0JCSAgICAgICBwY2lfbmFtZShzb2NrZXQtPmRldikpOworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkgICAiWWVudGEgVEk6IG5vIFBDSSBpbnRlcnJ1cHRzLiBGaXNoLiAiCisJCQkgICAiUGxlYXNlIHJlcG9ydC5cbiIpOwogCX0KIH0KIApAQCAtNTEzLDggKzUxNCw5IEBACiAKIAltZnVuYyA9IG1mdW5jX29sZCA9IGNvbmZpZ19yZWFkbChzb2NrZXQsIFRJMTIyWF9NRlVOQyk7CiAJZGV2Y3RsID0gY29uZmlnX3JlYWRiKHNvY2tldCwgVEkxMTNYX0RFVklDRV9DT05UUk9MKTsKLQlwcmludGsoS0VSTl9JTkZPICJZZW50YSBUSTogc29ja2V0ICVzLCBtZnVuYyAweCUwOHgsIGRldmN0bCAweCUwMnhcbiIsCi0JICAgICAgIHBjaV9uYW1lKHNvY2tldC0+ZGV2KSwgbWZ1bmMsIGRldmN0bCk7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzb2NrZXQtPmRldi0+ZGV2LAorCQkgICAiVEk6IG1mdW5jIDB4JTA4eCwgZGV2Y3RsIDB4JTAyeFxuIiwKKwkJICAgbWZ1bmMsIGRldmN0bCk7CiAKIAkvKiBpZiBJUlFzIGFyZSBjb25maWd1cmVkIGFzIHRpZWQsIGFsaWduIGlycSBvZiBmdW5jMSB3aXRoIGZ1bmMwICovCiAJc3lzY3RsID0gY29uZmlnX3JlYWRsKHNvY2tldCwgVEkxMTNYX1NZU1RFTV9DT05UUk9MKTsKQEAgLTUzMyw5ICs1MzUsOCBAQAogCSAqIFdlJ3JlIGhlcmUgd2hpY2ggbWVhbnMgUENJIGludGVycnVwdHMgYXJlIF9ub3RfIGRlbGl2ZXJlZC4gdHJ5IHRvCiAJICogZmluZCB0aGUgcmlnaHQgc2V0dGluZwogCSAqLwotCXByaW50ayhLRVJOX0lORk8gIlllbnRhIFRJOiBzb2NrZXQgJXMgcHJvYmluZyBQQ0kgaW50ZXJydXB0IGZhaWxlZCwgdHJ5aW5nIHRvIGZpeFxuIiwKLQkgICAgICAgcGNpX25hbWUoc29ja2V0LT5kZXYpKTsKLQorCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJICAgIlRJOiBwcm9iaW5nIFBDSSBpbnRlcnJ1cHQgZmFpbGVkLCB0cnlpbmcgdG8gZml4XG4iKTsKIAogCS8qIGlmIGFsbCBzZXJpYWw6IHNldCBJTlRSVElFLCBwcm9iZSBhZ2FpbiAqLwogCWlmICgoZGV2Y3RsICYgVEkxMTNYX0RDUl9JTU9ERV9NQVNLKSA9PSBUSTEyWFhfRENSX0lNT0RFX0FMTF9TRVJJQUwpIHsKQEAgLTU0NCw4ICs1NDUsOCBAQAogCQlpZiAodGkxMnh4X3RpZV9pbnRlcnJ1cHRzKHNvY2tldCwgJm9sZF9pcnEpKSB7CiAJCQlwY2lfaXJxX3N0YXR1cyA9IHllbnRhX3Byb2JlX2NiX2lycShzb2NrZXQpOwogCQkJaWYgKHBjaV9pcnFfc3RhdHVzID09IDEpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJZZW50YSBUSTogc29ja2V0ICVzIGFsbC1zZXJpYWwgaW50ZXJydXB0cywgdGllZCBva1xuIiwKLQkJCQkgICAgICAgcGNpX25hbWUoc29ja2V0LT5kZXYpKTsKKwkJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkJCSJUSTogYWxsLXNlcmlhbCBpbnRlcnJ1cHRzLCB0aWVkIG9rXG4iKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIApAQCAtNTgyLDggKzU4Myw4IEBACiAKIAkJCXBjaV9pcnFfc3RhdHVzID0geWVudGFfcHJvYmVfY2JfaXJxKHNvY2tldCk7CiAJCQlpZiAocGNpX2lycV9zdGF0dXMgPT0gMSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIlllbnRhIFRJOiBzb2NrZXQgJXMgcGFyYWxsZWwgUENJIGludGVycnVwdHMgb2tcbiIsCi0JCQkJICAgICAgIHBjaV9uYW1lKHNvY2tldC0+ZGV2KSk7CisJCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzb2NrZXQtPmRldi0+ZGV2LAorCQkJCQkgICAiVEk6IHBhcmFsbGVsIFBDSSBpbnRlcnJ1cHRzIG9rXG4iKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIApAQCAtNTkzLDEzICs1OTQsMTMgQEAKIAkJCWlmIChwY2lfaXJxX3N0YXR1cyA9PSAtMSkKIAkJCQlnb3RvIG91dDsKIAkJfQotCQkKKwogCQkvKiBzdGlsbCBub3RoaW5nOiBzZXQgSU5UUlRJRSAqLwogCQlpZiAodGkxMnh4X3RpZV9pbnRlcnJ1cHRzKHNvY2tldCwgJm9sZF9pcnEpKSB7CiAJCQlwY2lfaXJxX3N0YXR1cyA9IHllbnRhX3Byb2JlX2NiX2lycShzb2NrZXQpOwogCQkJaWYgKHBjaV9pcnFfc3RhdHVzID09IDEpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJZZW50YSBUSTogc29ja2V0ICVzIHBhcmFsbGVsIFBDSSBpbnRlcnJ1cHRzLCB0aWVkIG9rXG4iLAotCQkJCSAgICAgICBwY2lfbmFtZShzb2NrZXQtPmRldikpOworCQkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCQkgICAgIlRJOiBwYXJhbGxlbCBQQ0kgaW50ZXJydXB0cywgdGllZCBva1xuIik7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKQEAgLTYxMCw4ICs2MTEsOCBAQAogb3V0OgogCWlmIChwY2lfaXJxX3N0YXR1cyA8IDEpIHsKIAkJc29ja2V0LT5jYl9pcnEgPSAwOwotCQlwcmludGsoS0VSTl9JTkZPICJZZW50YSBUSTogc29ja2V0ICVzIG5vIFBDSSBpbnRlcnJ1cHRzLiBGaXNoLiBQbGVhc2UgcmVwb3J0LlxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHNvY2tldC0+ZGV2KSk7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCSAgICJUSTogbm8gUENJIGludGVycnVwdHMuIEZpc2guIFBsZWFzZSByZXBvcnQuXG4iKTsKIAl9CiB9CiAKQEAgLTgxNSwxMSArODE2LDEzIEBACiAJLyogbWFrZSBzdXJlIHRoYXQgbWVtb3J5IGJ1cnN0IGlzIGFjdGl2ZSAqLwogCXZhbF9vcmlnID0gdmFsID0gY29uZmlnX3JlYWRsKHNvY2tldCwgVEkxMTNYX1NZU1RFTV9DT05UUk9MKTsKIAlpZiAoZGlzYWJsZV9jbGtydW4gJiYgUENJX0ZVTkMoc29ja2V0LT5kZXYtPmRldmZuKSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlllbnRhOiBEaXNhYmxpbmcgQ0xLUlVOIGZlYXR1cmVcbiIpOworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkgICAiRGlzYWJsaW5nIENMS1JVTiBmZWF0dXJlXG4iKTsKIAkJdmFsIHw9IFRJMTEzWF9TQ1JfS0VFUENMSzsKIAl9CiAJaWYgKCEodmFsICYgVEkxMjJYX1NDUl9NUkJVUlNUVVApKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlllbnRhOiBFbmFibGluZyBidXJzdCBtZW1vcnkgcmVhZCB0cmFuc2FjdGlvbnNcbiIpOworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkgICAiRW5hYmxpbmcgYnVyc3QgbWVtb3J5IHJlYWQgdHJhbnNhY3Rpb25zXG4iKTsKIAkJdmFsIHw9IFRJMTIyWF9TQ1JfTVJCVVJTVFVQOwogCX0KIAlpZiAodmFsX29yaWcgIT0gdmFsKQpAQCAtODMwLDEwICs4MzMsMTIgQEAKIAkgKiBDU0MgaW50ZXJydXB0cyB0byBQQ0kgcmF0aGVyIHRoYW4gSU5UVkFMLgogCSAqLwogCXZhbCA9IGNvbmZpZ19yZWFkYihzb2NrZXQsIFRJMTI1MF9ESUFHTk9TVElDKTsKLQlwcmludGsoS0VSTl9JTkZPICJZZW50YTogVXNpbmcgJXMgdG8gcm91dGUgQ1NDIGludGVycnVwdHMgdG8gUENJXG4iLAotCQkodmFsICYgVEkxMjUwX0RJQUdfUENJX0NTQykgPyAiQ1NDSU5UIiA6ICJJTlRWQUwiKTsKLQlwcmludGsoS0VSTl9JTkZPICJZZW50YTogUm91dGluZyBDYXJkQnVzIGludGVycnVwdHMgdG8gJXNcbiIsCi0JCSh2YWwgJiBUSTEyNTBfRElBR19QQ0lfSVJFUSkgPyAiUENJIiA6ICJJU0EiKTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCSAgICJVc2luZyAlcyB0byByb3V0ZSBDU0MgaW50ZXJydXB0cyB0byBQQ0lcbiIsCisJCSAgICh2YWwgJiBUSTEyNTBfRElBR19QQ0lfQ1NDKSA/ICJDU0NJTlQiIDogIklOVFZBTCIpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJICAgIlJvdXRpbmcgQ2FyZEJ1cyBpbnRlcnJ1cHRzIHRvICVzXG4iLAorCQkgICAodmFsICYgVEkxMjUwX0RJQUdfUENJX0lSRVEpID8gIlBDSSIgOiAiSVNBIik7CiAKIAkvKiBkbyBpcnFyb3V0aW5nLCBkZXBlbmRpbmcgb24gZnVuY3Rpb24gKi8KIAlpZiAoUENJX0ZVTkMoc29ja2V0LT5kZXYtPmRldmZuKSA9PSAwKQpAQCAtODU4LDggKzg2Myw5IEBACiAJCWRpYWcgfD0gVEkxMjUwX0RJQUdfUENJX0NTQyB8IFRJMTI1MF9ESUFHX1BDSV9JUkVROwogCiAJaWYgKGRpYWcgIT0gb2xkKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlllbnRhOiBhZGp1c3RpbmcgZGlhZ25vc3RpYzogJTAyeCAtPiAlMDJ4XG4iLAotCQkJb2xkLCBkaWFnKTsKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzb2NrZXQtPmRldi0+ZGV2LAorCQkJICAgImFkanVzdGluZyBkaWFnbm9zdGljOiAlMDJ4IC0+ICUwMnhcbiIsCisJCQkgICBvbGQsIGRpYWcpOwogCQljb25maWdfd3JpdGViKHNvY2tldCwgVEkxMjUwX0RJQUdOT1NUSUMsIGRpYWcpOwogCX0KIApAQCAtOTI0LDcgKzkzMCw5IEBACiAJCS8qIGRlZmF1bHQgdG8gY2xlYXIgVExURW5hYmxlIGJpdCwgb2xkIGJlaGF2aW91ciAqLwogCQl0ZXN0X2M5ICY9IH5FTkVfVEVTVF9DOV9UTFRFTkFCTEU7CiAKLQlwcmludGsoS0VSTl9JTkZPICJ5ZW50YSBFbkU6IGNoYW5pbmcgdGVzdHJlZ2lzdGVyIDB4QzksICUwMnggLT4gJTAyeFxuIiwgb2xkX2M5LCB0ZXN0X2M5KTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCSAgICJFbkU6IGNoYW5pbmcgdGVzdHJlZ2lzdGVyIDB4QzksICUwMnggLT4gJTAyeFxuIiwKKwkJICAgb2xkX2M5LCB0ZXN0X2M5KTsKIAljb25maWdfd3JpdGViKHNvY2tldCwgRU5FX1RFU1RfQzksIHRlc3RfYzkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYyBiL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCmluZGV4IGVlZTJmMWMuLmIyYzQxMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCkBAIC02MzksNyArNjM5LDcgQEAKIAkJaW50IGlycTsKIAkJb3B0aW9ucyArPSA0OwogCQlpcnEgPSBzaW1wbGVfc3RydG91bChvcHRpb25zLCAmb3B0aW9ucywgMCk7Ci0JCWlmIChpcnEgPj0gMCAmJiBpcnEgPCBOUl9JUlFTKQorCQlpZiAoaXJxID49IDAgJiYgaXJxIDwgbnJfaXJxcykKIAkJCXZyYzQxNzFfaXJxID0gaXJxOwogCiAJCWlmICgqb3B0aW9ucyAhPSAnLCcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCmluZGV4IDBhYjFmYjYuLjNlY2Q3YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCkBAIC0zOCwxMSArMzgsNyBAQAogbW9kdWxlX3BhcmFtKHB3cl9pcnFzX29mZiwgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHB3cl9pcnFzX29mZiwgIkZvcmNlIElSUXMgb2ZmIGR1cmluZyBwb3dlci1vbiBvZiBzbG90LiBVc2Ugb25seSB3aGVuIHNlZWluZyBJUlEgc3Rvcm1zISIpOwogCi0jaWYgMAotI2RlZmluZSBkZWJ1Zyh4LGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHICIlczogIiB4LCBfX2Z1bmNfXyAsICMjYXJncykKLSNlbHNlCi0jZGVmaW5lIGRlYnVnKHgsYXJncy4uLikKLSNlbmRpZgorI2RlZmluZSBkZWJ1Zyh4LCBzLCBhcmdzLi4uKSBkZXZfZGJnKCZzLT5kZXYtPmRldiwgeCwgIyNhcmdzKQogCiAvKiBEb24ndCBhc2suLiAqLwogI2RlZmluZSB0b19jeWNsZXMobnMpCSgobnMpLzEyMCkKQEAgLTY5LDEzICs2NSwxMyBAQAogc3RhdGljIGlubGluZSB1MzIgY2JfcmVhZGwoc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0LCB1bnNpZ25lZCByZWcpCiB7CiAJdTMyIHZhbCA9IHJlYWRsKHNvY2tldC0+YmFzZSArIHJlZyk7Ci0JZGVidWcoIiVwICUwNHggJTA4eFxuIiwgc29ja2V0LCByZWcsIHZhbCk7CisJZGVidWcoIiUwNHggJTA4eFxuIiwgc29ja2V0LCByZWcsIHZhbCk7CiAJcmV0dXJuIHZhbDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNiX3dyaXRlbChzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQsIHVuc2lnbmVkIHJlZywgdTMyIHZhbCkKIHsKLQlkZWJ1ZygiJXAgJTA0eCAlMDh4XG4iLCBzb2NrZXQsIHJlZywgdmFsKTsKKwlkZWJ1ZygiJTA0eCAlMDh4XG4iLCBzb2NrZXQsIHJlZywgdmFsKTsKIAl3cml0ZWwodmFsLCBzb2NrZXQtPmJhc2UgKyByZWcpOwogCXJlYWRsKHNvY2tldC0+YmFzZSArIHJlZyk7IC8qIGF2b2lkIHByb2JsZW1zIHdpdGggUENJIHdyaXRlIHBvc3RpbmcgKi8KIH0KQEAgLTg0LDcgKzgwLDcgQEAKIHsKIAl1OCB2YWw7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoc29ja2V0LT5kZXYsIG9mZnNldCwgJnZhbCk7Ci0JZGVidWcoIiVwICUwNHggJTAyeFxuIiwgc29ja2V0LCBvZmZzZXQsIHZhbCk7CisJZGVidWcoIiUwNHggJTAyeFxuIiwgc29ja2V0LCBvZmZzZXQsIHZhbCk7CiAJcmV0dXJuIHZhbDsKIH0KIApAQCAtOTIsNyArODgsNyBAQAogewogCXUxNiB2YWw7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoc29ja2V0LT5kZXYsIG9mZnNldCwgJnZhbCk7Ci0JZGVidWcoIiVwICUwNHggJTA0eFxuIiwgc29ja2V0LCBvZmZzZXQsIHZhbCk7CisJZGVidWcoIiUwNHggJTA0eFxuIiwgc29ja2V0LCBvZmZzZXQsIHZhbCk7CiAJcmV0dXJuIHZhbDsKIH0KIApAQCAtMTAwLDMyICs5NiwzMiBAQAogewogCXUzMiB2YWw7CiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHNvY2tldC0+ZGV2LCBvZmZzZXQsICZ2YWwpOwotCWRlYnVnKCIlcCAlMDR4ICUwOHhcbiIsIHNvY2tldCwgb2Zmc2V0LCB2YWwpOworCWRlYnVnKCIlMDR4ICUwOHhcbiIsIHNvY2tldCwgb2Zmc2V0LCB2YWwpOwogCXJldHVybiB2YWw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWdfd3JpdGViKHN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCwgdW5zaWduZWQgb2Zmc2V0LCB1OCB2YWwpCiB7Ci0JZGVidWcoIiVwICUwNHggJTAyeFxuIiwgc29ja2V0LCBvZmZzZXQsIHZhbCk7CisJZGVidWcoIiUwNHggJTAyeFxuIiwgc29ja2V0LCBvZmZzZXQsIHZhbCk7CiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHNvY2tldC0+ZGV2LCBvZmZzZXQsIHZhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWdfd3JpdGV3KHN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCwgdW5zaWduZWQgb2Zmc2V0LCB1MTYgdmFsKQogewotCWRlYnVnKCIlcCAlMDR4ICUwNHhcbiIsIHNvY2tldCwgb2Zmc2V0LCB2YWwpOworCWRlYnVnKCIlMDR4ICUwNHhcbiIsIHNvY2tldCwgb2Zmc2V0LCB2YWwpOwogCXBjaV93cml0ZV9jb25maWdfd29yZChzb2NrZXQtPmRldiwgb2Zmc2V0LCB2YWwpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlnX3dyaXRlbChzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQsIHVuc2lnbmVkIG9mZnNldCwgdTMyIHZhbCkKIHsKLQlkZWJ1ZygiJXAgJTA0eCAlMDh4XG4iLCBzb2NrZXQsIG9mZnNldCwgdmFsKTsKKwlkZWJ1ZygiJTA0eCAlMDh4XG4iLCBzb2NrZXQsIG9mZnNldCwgdmFsKTsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHNvY2tldC0+ZGV2LCBvZmZzZXQsIHZhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTggZXhjYV9yZWFkYihzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQsIHVuc2lnbmVkIHJlZykKIHsKIAl1OCB2YWwgPSByZWFkYihzb2NrZXQtPmJhc2UgKyAweDgwMCArIHJlZyk7Ci0JZGVidWcoIiVwICUwNHggJTAyeFxuIiwgc29ja2V0LCByZWcsIHZhbCk7CisJZGVidWcoIiUwNHggJTAyeFxuIiwgc29ja2V0LCByZWcsIHZhbCk7CiAJcmV0dXJuIHZhbDsKIH0KIApAQCAtMTM0LDIwICsxMzAsMjAgQEAKIAl1MTYgdmFsOwogCXZhbCA9IHJlYWRiKHNvY2tldC0+YmFzZSArIDB4ODAwICsgcmVnKTsKIAl2YWwgfD0gcmVhZGIoc29ja2V0LT5iYXNlICsgMHg4MDAgKyByZWcgKyAxKSA8PCA4OwotCWRlYnVnKCIlcCAlMDR4ICUwNHhcbiIsIHNvY2tldCwgcmVnLCB2YWwpOworCWRlYnVnKCIlMDR4ICUwNHhcbiIsIHNvY2tldCwgcmVnLCB2YWwpOwogCXJldHVybiB2YWw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBleGNhX3dyaXRlYihzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQsIHVuc2lnbmVkIHJlZywgdTggdmFsKQogewotCWRlYnVnKCIlcCAlMDR4ICUwMnhcbiIsIHNvY2tldCwgcmVnLCB2YWwpOworCWRlYnVnKCIlMDR4ICUwMnhcbiIsIHNvY2tldCwgcmVnLCB2YWwpOwogCXdyaXRlYih2YWwsIHNvY2tldC0+YmFzZSArIDB4ODAwICsgcmVnKTsKIAlyZWFkYihzb2NrZXQtPmJhc2UgKyAweDgwMCArIHJlZyk7IC8qIFBDSSB3cml0ZSBwb3N0aW5nLi4uICovCiB9CiAKIHN0YXRpYyB2b2lkIGV4Y2Ffd3JpdGV3KHN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCwgdW5zaWduZWQgcmVnLCB1MTYgdmFsKQogewotCWRlYnVnKCIlcCAlMDR4ICUwNHhcbiIsIHNvY2tldCwgcmVnLCB2YWwpOworCWRlYnVnKCIlMDR4ICUwNHhcbiIsIHNvY2tldCwgcmVnLCB2YWwpOwogCXdyaXRlYih2YWwsIHNvY2tldC0+YmFzZSArIDB4ODAwICsgcmVnKTsKIAl3cml0ZWIodmFsID4+IDgsIHNvY2tldC0+YmFzZSArIDB4ODAwICsgcmVnICsgMSk7CiAKQEAgLTIwNyw3ICsyMDMsNyBAQAogCiAKIAlpZiAoc3RhdGUgJiBDQl9DQkNBUkQpIHsKLQkJdmFsIHw9IFNTX0NBUkRCVVM7CQorCQl2YWwgfD0gU1NfQ0FSREJVUzsKIAkJdmFsIHw9IChzdGF0ZSAmIENCX0NBUkRTVFMpID8gU1NfU1RTQ0hHIDogMDsKIAkJdmFsIHw9IChzdGF0ZSAmIChDQl9DREVURUNUMSB8IENCX0NERVRFQ1QyKSkgPyAwIDogU1NfREVURUNUOwogCQl2YWwgfD0gKHN0YXRlICYgQ0JfUFdSQ1lDTEUpID8gU1NfUE9XRVJPTiB8IFNTX1JFQURZIDogMDsKQEAgLTY1MCw4ICs2NDYsMTAgQEAKIAkJcm9vdCA9IHBjaV9maW5kX3BhcmVudF9yZXNvdXJjZShzb2NrZXQtPmRldiwgcmVzKTsKIAkJaWYgKHJvb3QgJiYgKHJlcXVlc3RfcmVzb3VyY2Uocm9vdCwgcmVzKSA9PSAwKSkKIAkJCXJldHVybiAwOwotCQlwcmludGsoS0VSTl9JTkZPICJ5ZW50YSAlczogUHJlYXNzaWduZWQgcmVzb3VyY2UgJWQgYnVzeSBvciBub3QgYXZhaWxhYmxlLCByZWNvbmZpZ3VyaW5nLi4uXG4iLAotCQkJCXBjaV9uYW1lKHNvY2tldC0+ZGV2KSwgbnIpOworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkgICAiUHJlYXNzaWduZWQgcmVzb3VyY2UgJWQgYnVzeSBvciBub3QgYXZhaWxhYmxlLCAiCisJCQkgICAicmVjb25maWd1cmluZy4uLlxuIiwKKwkJCSAgIG5yKTsKIAl9CiAKIAlpZiAodHlwZSAmIElPUkVTT1VSQ0VfSU8pIHsKQEAgLTY3NCw4ICs2NzIsOSBAQAogCQkJcmV0dXJuIDE7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAieWVudGEgJXM6IG5vIHJlc291cmNlIG9mIHR5cGUgJXggYXZhaWxhYmxlLCB0cnlpbmcgdG8gY29udGludWUuLi5cbiIsCi0JICAgICAgIHBjaV9uYW1lKHNvY2tldC0+ZGV2KSwgdHlwZSk7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzb2NrZXQtPmRldi0+ZGV2LAorCQkgICAibm8gcmVzb3VyY2Ugb2YgdHlwZSAleCBhdmFpbGFibGUsIHRyeWluZyB0byBjb250aW51ZS4uLlxuIiwKKwkJICAgdHlwZSk7CiAJcmVzLT5zdGFydCA9IHJlcy0+ZW5kID0gcmVzLT5mbGFncyA9IDA7CiAJcmV0dXJuIDA7CiB9CkBAIC05MjMsNyArOTIyLDggQEAKIAlzb2NrZXQtPnByb2JlX3N0YXR1cyA9IDA7CiAKIAlpZiAocmVxdWVzdF9pcnEoc29ja2V0LT5jYl9pcnEsIHllbnRhX3Byb2JlX2hhbmRsZXIsIElSUUZfU0hBUkVELCAieWVudGEiLCBzb2NrZXQpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlllbnRhOiByZXF1ZXN0X2lycSgpIGluIHllbnRhX3Byb2JlX2NiX2lycSgpIGZhaWxlZCFcbiIpOworCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkgICAicmVxdWVzdF9pcnEoKSBpbiB5ZW50YV9wcm9iZV9jYl9pcnEoKSBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtOTYwLDggKzk2MCw5IEBACiAJZWxzZQogCQlzb2NrZXQtPnNvY2tldC5pcnFfbWFzayA9IDA7CiAKLQlwcmludGsoS0VSTl9JTkZPICJZZW50YTogSVNBIElSUSBtYXNrIDB4JTA0eCwgUENJIGlycSAlZFxuIiwKLQkgICAgICAgc29ja2V0LT5zb2NrZXQuaXJxX21hc2ssIHNvY2tldC0+Y2JfaXJxKTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCSAgICJJU0EgSVJRIG1hc2sgMHglMDR4LCBQQ0kgaXJxICVkXG4iLAorCQkgICBzb2NrZXQtPnNvY2tldC5pcnFfbWFzaywgc29ja2V0LT5jYl9pcnEpOwogfQogCiAvKgpAQCAtMTA1MSw4ICsxMDUyLDkgQEAKIAogCS8qIFNob3cgdGhhdCB0aGUgd2FudGVkIHN1Ym9yZGluYXRlIG51bWJlciBpcyBub3QgcG9zc2libGU6ICovCiAJaWYgKGNhcmRidXNfYnJpZGdlLT5zdWJvcmRpbmF0ZSA+IHVwcGVyX2xpbWl0KQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJZZW50YTogVXBwZXIgbGltaXQgZm9yIGZpeGluZyB0aGlzICIKLQkJCSJicmlkZ2UncyBwYXJlbnQgYnJpZGdlOiAjJTAyeFxuIiwgdXBwZXJfbGltaXQpOworCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJmNhcmRidXNfYnJpZGdlLT5kZXYsCisJCQkgICAiVXBwZXIgbGltaXQgZm9yIGZpeGluZyB0aGlzICIKKwkJCSAgICJicmlkZ2UncyBwYXJlbnQgYnJpZGdlOiAjJTAyeFxuIiwgdXBwZXJfbGltaXQpOwogCiAJLyogSWYgd2UgaGF2ZSByb29tIHRvIGluY3JlYXNlIHRoZSBicmlkZ2UncyBzdWJvcmRpbmF0ZSBudW1iZXIsICovCiAJaWYgKGJyaWRnZV90b19maXgtPnN1Ym9yZGluYXRlIDwgdXBwZXJfbGltaXQpIHsKQEAgLTEwNjEsMTAgKzEwNjMsMTEgQEAKIAkJdW5zaWduZWQgY2hhciBzdWJvcmRpbmF0ZV90b19hc3NpZ24gPQogCQkJbWluKGNhcmRidXNfYnJpZGdlLT5zdWJvcmRpbmF0ZSwgdXBwZXJfbGltaXQpOwogCi0JCXByaW50ayhLRVJOX0lORk8gIlllbnRhOiBSYWlzaW5nIHN1Ym9yZGluYXRlIGJ1cyMgb2YgcGFyZW50ICIKLQkJCSJidXMgKCMlMDJ4KSBmcm9tICMlMDJ4IHRvICMlMDJ4XG4iLAotCQkJYnJpZGdlX3RvX2ZpeC0+bnVtYmVyLAotCQkJYnJpZGdlX3RvX2ZpeC0+c3Vib3JkaW5hdGUsIHN1Ym9yZGluYXRlX3RvX2Fzc2lnbik7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmYnJpZGdlX3RvX2ZpeC0+ZGV2LAorCQkJICAgIlJhaXNpbmcgc3Vib3JkaW5hdGUgYnVzIyBvZiBwYXJlbnQgIgorCQkJICAgImJ1cyAoIyUwMngpIGZyb20gIyUwMnggdG8gIyUwMnhcbiIsCisJCQkgICBicmlkZ2VfdG9fZml4LT5udW1iZXIsCisJCQkgICBicmlkZ2VfdG9fZml4LT5zdWJvcmRpbmF0ZSwgc3Vib3JkaW5hdGVfdG9fYXNzaWduKTsKIAogCQkvKiBTYXZlIHRoZSBuZXcgc3Vib3JkaW5hdGUgaW4gdGhlIGJ1cyBzdHJ1Y3Qgb2YgdGhlIGJyaWRnZSAqLwogCQlicmlkZ2VfdG9fZml4LT5zdWJvcmRpbmF0ZSA9IHN1Ym9yZGluYXRlX3RvX2Fzc2lnbjsKQEAgLTEwOTEsOCArMTA5NCw4IEBACiAJICogQmFpbCBvdXQgaWYgc28uCiAJICovCiAJaWYgKCFkZXYtPnN1Ym9yZGluYXRlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiWWVudGE6IG5vIGJ1cyBhc3NvY2lhdGVkIHdpdGggJXMhICIKLQkJCSIodHJ5ICdwY2k9YXNzaWduLWJ1c3NlcycpXG4iLCBwY2lfbmFtZShkZXYpKTsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmRldi0+ZGV2LCAibm8gYnVzIGFzc29jaWF0ZWQhICIKKwkJCSAgICIodHJ5ICdwY2k9YXNzaWduLWJ1c3NlcycpXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xMTI3LDcgKzExMzAsNyBAQAogCQlnb3RvIGRpc2FibGU7CiAKIAlpZiAoIXBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTm8gY2FyZGJ1cyByZXNvdXJjZSFcbiIpOworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmZGV2LT5kZXYsICJObyBjYXJkYnVzIHJlc291cmNlIVxuIik7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gcmVsZWFzZTsKIAl9CkBAIC0xMTQ2LDggKzExNDksOCBAQAogCSAqIHJlcG9ydCB0aGUgc3Vic3lzdGVtIHZlbmRvciBhbmQgZGV2aWNlIGZvciBoZWxwIGRlYnVnZ2luZwogCSAqIHRoZSBpcnEgc3R1ZmYuLi4KIAkgKi8KLQlwcmludGsoS0VSTl9JTkZPICJZZW50YTogQ2FyZEJ1cyBicmlkZ2UgZm91bmQgYXQgJXMgWyUwNHg6JTA0eF1cbiIsCi0JCXBjaV9uYW1lKGRldiksIGRldi0+c3Vic3lzdGVtX3ZlbmRvciwgZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJmRldi0+ZGV2LCAiQ2FyZEJ1cyBicmlkZ2UgZm91bmQgWyUwNHg6JTA0eF1cbiIsCisJCSAgIGRldi0+c3Vic3lzdGVtX3ZlbmRvciwgZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAogCXllbnRhX2NvbmZpZ19pbml0KHNvY2tldCk7CiAKQEAgLTExNzksOCArMTE4MiwxMiBAQAogCQlzb2NrZXQtPnBvbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXNvY2tldDsKIAkJc29ja2V0LT5wb2xsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFo7CiAJCWFkZF90aW1lcigmc29ja2V0LT5wb2xsX3RpbWVyKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGE6IG5vIFBDSSBJUlEsIENhcmRCdXMgc3VwcG9ydCBkaXNhYmxlZCBmb3IgdGhpcyBzb2NrZXQuXG4iCi0JCSAgICAgICBLRVJOX0lORk8gIlllbnRhOiBjaGVjayB5b3VyIEJJT1MgQ2FyZEJ1cywgQklPUyBJUlEgb3IgQUNQSSBzZXR0aW5ncy5cbiIpOworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJmRldi0+ZGV2LAorCQkJICAgIm5vIFBDSSBJUlEsIENhcmRCdXMgc3VwcG9ydCBkaXNhYmxlZCBmb3IgdGhpcyAiCisJCQkgICAic29ja2V0LlxuIik7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmZGV2LT5kZXYsCisJCQkgICAiY2hlY2sgeW91ciBCSU9TIENhcmRCdXMsIEJJT1MgSVJRIG9yIEFDUEkgIgorCQkJICAgInNldHRpbmdzLlxuIik7CiAJfSBlbHNlIHsKIAkJc29ja2V0LT5zb2NrZXQuZmVhdHVyZXMgfD0gU1NfQ0FQX0NBUkRCVVM7CiAJfQpAQCAtMTE4OCw3ICsxMTk1LDggQEAKIAkvKiBGaWd1cmUgb3V0IHdoYXQgdGhlIGRhbmcgdGhpbmcgY2FuIGRvIGZvciB0aGUgUENNQ0lBIGxheWVyLi4uICovCiAJeWVudGFfaW50ZXJyb2dhdGUoc29ja2V0KTsKIAl5ZW50YV9nZXRfc29ja2V0X2NhcGFiaWxpdGllcyhzb2NrZXQsIGlzYV9pbnRlcnJ1cHRzKTsKLQlwcmludGsoS0VSTl9JTkZPICJTb2NrZXQgc3RhdHVzOiAlMDh4XG4iLCBjYl9yZWFkbChzb2NrZXQsIENCX1NPQ0tFVF9TVEFURSkpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmZGV2LT5kZXYsCisJCSAgICJTb2NrZXQgc3RhdHVzOiAlMDh4XG4iLCBjYl9yZWFkbChzb2NrZXQsIENCX1NPQ0tFVF9TVEFURSkpOwogCiAJeWVudGFfZml4dXBfcGFyZW50X2JyaWRnZShkZXYtPnN1Ym9yZGluYXRlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvYmFzZS5oIGIvZHJpdmVycy9wbnAvYmFzZS5oCmluZGV4IDlmZDdiYjkuLjNiOGI5ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2Jhc2UuaAorKysgYi9kcml2ZXJzL3BucC9iYXNlLmgKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogZXh0ZXJuIHNwaW5sb2NrX3QgcG5wX2xvY2s7CitleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcG5wX2ludGVyZmFjZV9hdHRyc1tdOwogdm9pZCAqcG5wX2FsbG9jKGxvbmcgc2l6ZSk7CiAKIGludCBwbnBfcmVnaXN0ZXJfcHJvdG9jb2woc3RydWN0IHBucF9wcm90b2NvbCAqcHJvdG9jb2wpOwpAQCAtMTYsNyArMTcsNiBAQAogCiBpbnQgcG5wX2FkZF9kZXZpY2Uoc3RydWN0IHBucF9kZXYgKmRldik7CiBzdHJ1Y3QgcG5wX2lkICpwbnBfYWRkX2lkKHN0cnVjdCBwbnBfZGV2ICpkZXYsIGNoYXIgKmlkKTsKLWludCBwbnBfaW50ZXJmYWNlX2F0dGFjaF9kZXZpY2Uoc3RydWN0IHBucF9kZXYgKmRldik7CiAKIGludCBwbnBfYWRkX2NhcmQoc3RydWN0IHBucF9jYXJkICpjYXJkKTsKIHZvaWQgcG5wX3JlbW92ZV9jYXJkKHN0cnVjdCBwbnBfY2FyZCAqY2FyZCk7CkBAIC0xNDcsNyArMTQ3LDcgQEAKIHZvaWQgZGJnX3BucF9zaG93X3Jlc291cmNlcyhzdHJ1Y3QgcG5wX2RldiAqZGV2LCBjaGFyICpkZXNjKTsKIAogdm9pZCBwbnBfZnJlZV9yZXNvdXJjZXMoc3RydWN0IHBucF9kZXYgKmRldik7Ci1pbnQgcG5wX3Jlc291cmNlX3R5cGUoc3RydWN0IHJlc291cmNlICpyZXMpOwordW5zaWduZWQgbG9uZyBwbnBfcmVzb3VyY2VfdHlwZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CiAKIHN0cnVjdCBwbnBfcmVzb3VyY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL2NvcmUuYyBiL2RyaXZlcnMvcG5wL2NvcmUuYwppbmRleCBhNDExNTgyLi44MTdmZTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9jb3JlLmMKKysrIGIvZHJpdmVycy9wbnAvY29yZS5jCkBAIC0xNTksMjEgKzE1OSwxMyBAQAogCiBpbnQgX19wbnBfYWRkX2RldmljZShzdHJ1Y3QgcG5wX2RldiAqZGV2KQogewotCWludCByZXQ7Ci0KIAlwbnBfZml4dXBfZGV2aWNlKGRldik7CiAJZGV2LT5zdGF0dXMgPSBQTlBfUkVBRFk7CiAJc3Bpbl9sb2NrKCZwbnBfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmZGV2LT5nbG9iYWxfbGlzdCwgJnBucF9nbG9iYWwpOwogCWxpc3RfYWRkX3RhaWwoJmRldi0+cHJvdG9jb2xfbGlzdCwgJmRldi0+cHJvdG9jb2wtPmRldmljZXMpOwogCXNwaW5fdW5sb2NrKCZwbnBfbG9jayk7Ci0KLQlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJmRldi0+ZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcG5wX2ludGVyZmFjZV9hdHRhY2hfZGV2aWNlKGRldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGRldmljZV9yZWdpc3RlcigmZGV2LT5kZXYpOwogfQogCiAvKgpAQCAtMjE4LDcgKzIxMCw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBucF9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiTGludXggUGx1ZyBhbmQgUGxheSBTdXBwb3J0IHYwLjk3IChjKSBBZGFtIEJlbGF5XG4iKTsKIAlyZXR1cm4gYnVzX3JlZ2lzdGVyKCZwbnBfYnVzX3R5cGUpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9kcml2ZXIuYyBiL2RyaXZlcnMvcG5wL2RyaXZlci5jCmluZGV4IGQzZjg2OWUuLmUzZjdlODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvcG5wL2RyaXZlci5jCkBAIC0yMDYsNiArMjA2LDcgQEAKIAkucmVtb3ZlICA9IHBucF9kZXZpY2VfcmVtb3ZlLAogCS5zdXNwZW5kID0gcG5wX2J1c19zdXNwZW5kLAogCS5yZXN1bWUgID0gcG5wX2J1c19yZXN1bWUsCisJLmRldl9hdHRycyA9IHBucF9pbnRlcmZhY2VfYXR0cnMsCiB9OwogCiBpbnQgcG5wX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcG5wX2RyaXZlciAqZHJ2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3BucC9pbnRlcmZhY2UuYwppbmRleCBhODc2ZWNmLi40NzhhNGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3BucC9pbnRlcmZhY2UuYwpAQCAtMjQzLDggKzI0Myw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKG9wdGlvbnMsIFNfSVJVR08sIHBucF9zaG93X29wdGlvbnMsIE5VTEwpOwotCiBzdGF0aWMgc3NpemVfdCBwbnBfc2hvd19jdXJyZW50X3Jlc291cmNlcyhzdHJ1Y3QgZGV2aWNlICpkbWRldiwKIAkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJICBjaGFyICpidWYpCkBAIC00MjAsOSArNDE4LDYgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihyZXNvdXJjZXMsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICBwbnBfc2hvd19jdXJyZW50X3Jlc291cmNlcywgcG5wX3NldF9jdXJyZW50X3Jlc291cmNlcyk7Ci0KIHN0YXRpYyBzc2l6ZV90IHBucF9zaG93X2N1cnJlbnRfaWRzKHN0cnVjdCBkZXZpY2UgKmRtZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNDM3LDI3ICs0MzIsMTEgQEAKIAlyZXR1cm4gKHN0ciAtIGJ1Zik7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihpZCwgU19JUlVHTywgcG5wX3Nob3dfY3VycmVudF9pZHMsIE5VTEwpOwotCi1pbnQgcG5wX2ludGVyZmFjZV9hdHRhY2hfZGV2aWNlKHN0cnVjdCBwbnBfZGV2ICpkZXYpCi17Ci0JaW50IHJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX29wdGlvbnMpOwotCi0JaWYgKHJjKQotCQlnb3RvIGVycjsKLQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9yZXNvdXJjZXMpOwotCWlmIChyYykKLQkJZ290byBlcnJfb3B0OwotCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2lkKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX3JlczsKLQotCXJldHVybiAwOwotCi1lcnJfcmVzOgotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9yZXNvdXJjZXMpOwotZXJyX29wdDoKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfb3B0aW9ucyk7Ci1lcnI6Ci0JcmV0dXJuIHJjOwotfQorc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcG5wX2ludGVyZmFjZV9hdHRyc1tdID0geworCV9fQVRUUihyZXNvdXJjZXMsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBwbnBfc2hvd19jdXJyZW50X3Jlc291cmNlcywKKwkJICAgcG5wX3NldF9jdXJyZW50X3Jlc291cmNlcyksCisJX19BVFRSKG9wdGlvbnMsIFNfSVJVR08sIHBucF9zaG93X29wdGlvbnMsIE5VTEwpLAorCV9fQVRUUihpZCwgU19JUlVHTywgcG5wX3Nob3dfY3VycmVudF9pZHMsIE5VTEwpLAorCV9fQVRUUl9OVUxMLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMgYi9kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jCmluZGV4IDEwMWE4MzUuLjQ2NDU1ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMKKysrIGIvZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYwpAQCAtMTAxMiw3ICsxMDEyLDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaXNhcG5wOiBJU0EgUGx1ZyAmIFBsYXkgc3VwcG9ydCBkaXNhYmxlZFxuIik7CiAJCXJldHVybiAwOwogCX0KLSNpZmRlZiBDT05GSUdfUFBDX01FUkdFCisjaWZkZWYgQ09ORklHX1BQQwogCWlmIChjaGVja19sZWdhY3lfaW9wb3J0KF9QSURYUikgfHwgY2hlY2tfbGVnYWN5X2lvcG9ydChfUE5QV1JQKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMKaW5kZXggNjYyZGZjZGQuLjJiZmUxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCkBAIC01MTksNyArNTE5LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorI2lmIGRlZmluZWQoQ09ORklHX1BQQykKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChQTlBCSU9TX0JBU0UpKQogCQlyZXR1cm4gLUVOT0RFVjsKICNlbmRpZgpAQCAtNTc3LDcgKzU3Nyw3IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorI2lmIGRlZmluZWQoQ09ORklHX1BQQykKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChQTlBCSU9TX0JBU0UpKQogCQlyZXR1cm4gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcXVpcmtzLmMgYi9kcml2ZXJzL3BucC9xdWlya3MuYwppbmRleCAwYmRmOWI4Li5jMTQ0YmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9xdWlya3MuYworKysgYi9kcml2ZXJzL3BucC9xdWlya3MuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJICovCiAJZm9yX2VhY2hfcGNpX2RldihwZGV2KSB7CiAJCWZvciAoaSA9IDA7IGkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykgewotCQkJdW5zaWduZWQgaW50IHR5cGU7CisJCQl1bnNpZ25lZCBsb25nIHR5cGU7CiAKIAkJCXR5cGUgPSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgJgogCQkJCQkoSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNKTsKQEAgLTMzOCw4ICszMzgsNyBAQAogCQlpZiAoIWNvbXBhcmVfcG5wX2lkKGRldi0+aWQsIGYtPmlkKSkKIAkJCWNvbnRpbnVlOwogI2lmZGVmIERFQlVHCi0JCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6IGNhbGxpbmcgIiwgZi0+aWQpOwotCQlwcmludF9mbl9kZXNjcmlwdG9yX3N5bWJvbCgiJXNcbiIsIGYtPnF1aXJrX2Z1bmN0aW9uKTsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICIlczogY2FsbGluZyAlcEZcbiIsIGYtPmlkLCBmLT5xdWlya19mdW5jdGlvbik7CiAjZW5kaWYKIAkJZi0+cXVpcmtfZnVuY3Rpb24oZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9yZXNvdXJjZS5jIGIvZHJpdmVycy9wbnAvcmVzb3VyY2UuYwppbmRleCA0Y2ZlM2ExLi5kYmFlMjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvcG5wL3Jlc291cmNlLmMKQEAgLTQ2NywxNCArNDY3LDE0IEBACiAjZW5kaWYKIH0KIAotaW50IHBucF9yZXNvdXJjZV90eXBlKHN0cnVjdCByZXNvdXJjZSAqcmVzKQordW5zaWduZWQgbG9uZyBwbnBfcmVzb3VyY2VfdHlwZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKIHsKIAlyZXR1cm4gcmVzLT5mbGFncyAmIChJT1JFU09VUkNFX0lPICB8IElPUkVTT1VSQ0VfTUVNIHwKIAkJCSAgICAgSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0RNQSk7CiB9CiAKIHN0cnVjdCByZXNvdXJjZSAqcG5wX2dldF9yZXNvdXJjZShzdHJ1Y3QgcG5wX2RldiAqZGV2LAotCQkJCSAgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBudW0pCisJCQkJICB1bnNpZ25lZCBsb25nIHR5cGUsIHVuc2lnbmVkIGludCBudW0pCiB7CiAJc3RydWN0IHBucF9yZXNvdXJjZSAqcG5wX3JlczsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvS2NvbmZpZyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwppbmRleCA2M2JiNTc5Li44ZTBjMmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcKKysrIGIvZHJpdmVycy9wb3dlci9LY29uZmlnCkBAIC01MSw3ICs1MSw3IEBACiAKIGNvbmZpZyBCQVRURVJZX1RPU0EKIAl0cmlzdGF0ZSAiU2hhcnAgU0wtNjAwMCAodG9zYSkgYmF0dGVyeSIKLQlkZXBlbmRzIG9uIE1BQ0hfVE9TQSAmJiBNRkRfVEM2MzkzWEIKKwlkZXBlbmRzIG9uIE1BQ0hfVE9TQSAmJiBNRkRfVEM2MzkzWEIgJiYgVE9VQ0hTQ1JFRU5fV005N1hYCiAJaGVscAogCSAgU2F5IFkgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBiYXR0ZXJ5IG9uIHRoZSBTaGFycCBaYXVydXMKIAkgIFNMLTYwMDAgKHRvc2EpIG1vZGVscy4KQEAgLTYyLDQgKzYyLDEwIEBACiAJaGVscAogCSAgU2F5IFkgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGJhdHRlcnkgbWVhc3VyZWQgYnkgV005N3h4IGF1eCBwb3J0LgogCitjb25maWcgQkFUVEVSWV9CUTI3eDAwCisJdHJpc3RhdGUgIkJRMjcyMDAgYmF0dGVyeSBkcml2ZXIiCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBiYXR0ZXJpZXMgd2l0aCBCUTI3MjAwKEkyQykgY2hpcC4KKwogZW5kaWYgIyBQT1dFUl9TVVBQTFkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUgYi9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlCmluZGV4IDRlMjAwMjYuLmU4ZjFlY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wb3dlci9NYWtlZmlsZQpAQCAtMjEsNCArMjEsNSBAQAogb2JqLSQoQ09ORklHX0JBVFRFUllfUE1VKQkrPSBwbXVfYmF0dGVyeS5vCiBvYmotJChDT05GSUdfQkFUVEVSWV9PTFBDKQkrPSBvbHBjX2JhdHRlcnkubwogb2JqLSQoQ09ORklHX0JBVFRFUllfVE9TQSkJKz0gdG9zYV9iYXR0ZXJ5Lm8KLW9iai0kKENPTkZJR19CQVRURVJZX1dNOTdYWCkJKz0gd205N3h4X2JhdHRlcnkubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK29iai0kKENPTkZJR19CQVRURVJZX1dNOTdYWCkJKz0gd205N3h4X2JhdHRlcnkubworb2JqLSQoQ09ORklHX0JBVFRFUllfQlEyN3gwMCkJKz0gYnEyN3gwMF9iYXR0ZXJ5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvYnEyN3gwMF9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDU2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogQlEyN3gwMCBiYXR0ZXJ5IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSb2RvbGZvIEdpb21ldHRpIDxnaW9tZXR0aUBsaW51eC5pdD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFdXJvdGVjaCBTLnAuQS4gPGluZm9AZXVyb3RlY2guaXQ+CisgKgorICogQmFzZWQgb24gYSBwcmV2aW91cyB3b3JrIGJ5IENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJCSIxLjAuMCIKKworI2RlZmluZSBCUTI3eDAwX1JFR19URU1QCQkweDA2CisjZGVmaW5lIEJRMjd4MDBfUkVHX1ZPTFQJCTB4MDgKKyNkZWZpbmUgQlEyN3gwMF9SRUdfUlNPQwkJMHgwQiAvKiBSZWxhdGl2ZSBTdGF0ZS1vZi1DaGFyZ2UgKi8KKyNkZWZpbmUgQlEyN3gwMF9SRUdfQUkJCQkweDE0CisjZGVmaW5lIEJRMjd4MDBfUkVHX0ZMQUdTCQkweDBBCisKKy8qIElmIHRoZSBzeXN0ZW0gaGFzIHNldmVyYWwgYmF0dGVyaWVzIHdlIG5lZWQgYSBkaWZmZXJlbnQgbmFtZSBmb3IgZWFjaAorICogb2YgdGhlbS4uLgorICovCitzdGF0aWMgREVGSU5FX0lEUihiYXR0ZXJ5X2lkKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYmF0dGVyeV9tdXRleCk7CisKK3N0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvOworc3RydWN0IGJxMjd4MDBfYWNjZXNzX21ldGhvZHMgeworCWludCAoKnJlYWQpKHU4IHJlZywgaW50ICpydF92YWx1ZSwgaW50IGJfc2luZ2xlLAorCQlzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpOworfTsKKworc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8geworCXN0cnVjdCBkZXZpY2UgCQkqZGV2OworCWludAkJCWlkOworCWludAkJCXZvbHRhZ2VfdVY7CisJaW50CQkJY3VycmVudF91QTsKKwlpbnQJCQl0ZW1wX0M7CisJaW50CQkJY2hhcmdlX3Jzb2M7CisJc3RydWN0IGJxMjd4MDBfYWNjZXNzX21ldGhvZHMJKmJ1czsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5CWJhdDsKKworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7Cit9OworCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgYnEyN3gwMF9iYXR0ZXJ5X3Byb3BzW10gPSB7CisJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9URU1QLAorfTsKKworLyoKKyAqIENvbW1vbiBjb2RlIGZvciBCUTI3eDAwIGRldmljZXMKKyAqLworCitzdGF0aWMgaW50IGJxMjd4MDBfcmVhZCh1OCByZWcsIGludCAqcnRfdmFsdWUsIGludCBiX3NpbmdsZSwKKwkJCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZGktPmJ1cy0+cmVhZChyZWcsIHJ0X3ZhbHVlLCBiX3NpbmdsZSwgZGkpOworCSpydF92YWx1ZSA9IGJlMTZfdG9fY3B1KCpydF92YWx1ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJuIHRoZSBiYXR0ZXJ5IHRlbXBlcmF0dXJlIGluIENlbGNpdXMgZGVncmVlcworICogT3IgPCAwIGlmIHNvbWV0aGluZyBmYWlscy4KKyAqLworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfdGVtcGVyYXR1cmUoc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCWludCByZXQ7CisJaW50IHRlbXAgPSAwOworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX1RFTVAsICZ0ZW1wLCAwLCBkaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHRlbXBlcmF0dXJlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gKHRlbXAgPj4gMikgLSAyNzM7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGJhdHRlcnkgVm9sdGFnZSBpbiBtaWxpdm9sdHMKKyAqIE9yIDwgMCBpZiBzb21ldGhpbmcgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgYnEyN3gwMF9iYXR0ZXJ5X3ZvbHRhZ2Uoc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCWludCByZXQ7CisJaW50IHZvbHQgPSAwOworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX1ZPTFQsICZ2b2x0LCAwLCBkaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHZvbHRhZ2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiB2b2x0OworfQorCisvKgorICogUmV0dXJuIHRoZSBiYXR0ZXJ5IGF2ZXJhZ2UgY3VycmVudAorICogTm90ZSB0aGF0IGN1cnJlbnQgY2FuIGJlIG5lZ2F0aXZlIHNpZ25lZCBhcyB3ZWxsCisgKiBPciAwIGlmIHNvbWV0aGluZyBmYWlscy4KKyAqLworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfY3VycmVudChzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCit7CisJaW50IHJldDsKKwlpbnQgY3VyciA9IDA7CisJaW50IGZsYWdzID0gMDsKKworCXJldCA9IGJxMjd4MDBfcmVhZChCUTI3eDAwX1JFR19BSSwgJmN1cnIsIDAsIGRpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgY3VycmVudFxuIik7CisJCXJldHVybiAwOworCX0KKwlyZXQgPSBicTI3eDAwX3JlYWQoQlEyN3gwMF9SRUdfRkxBR1MsICZmbGFncywgMCwgZGkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgZmxhZ3NcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKChmbGFncyAmICgxIDw8IDcpKSAhPSAwKSB7CisJCWRldl9kYmcoZGktPmRldiwgIm5lZ2F0aXZlIGN1cnJlbnQhXG4iKTsKKwkJcmV0dXJuIC1jdXJyOworCX0KKwlyZXR1cm4gY3VycjsKK30KKworLyoKKyAqIFJldHVybiB0aGUgYmF0dGVyeSBSZWxhdGl2ZSBTdGF0ZS1vZi1DaGFyZ2UKKyAqIE9yIDwgMCBpZiBzb21ldGhpbmcgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgYnEyN3gwMF9iYXR0ZXJ5X3Jzb2Moc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCWludCByZXQ7CisJaW50IHJzb2MgPSAwOworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX1JTT0MsICZyc29jLCAxLCBkaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHJlbGF0aXZlIFN0YXRlLW9mLUNoYXJnZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJzb2MgPj4gODsKK30KKworI2RlZmluZSB0b19icTI3eDAwX2RldmljZV9pbmZvKHgpIGNvbnRhaW5lcl9vZigoeCksIFwKKwkJCQlzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbywgYmF0KTsKKworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfZ2V0X3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCQkJZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCQkJCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSA9IHRvX2JxMjd4MDBfZGV2aWNlX2luZm8ocHN5KTsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6CisJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3ZvbHRhZ2UoZGkpOworCQlpZiAocHNwID09IFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQpCisJCQl2YWwtPmludHZhbCA9IHZhbC0+aW50dmFsIDw9IDAgPyAwIDogMTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVzoKKwkJdmFsLT5pbnR2YWwgPSBicTI3eDAwX2JhdHRlcnlfY3VycmVudChkaSk7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFk6CisJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3Jzb2MoZGkpOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFTVA6CisJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3RlbXBlcmF0dXJlKGRpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJxMjd4MDBfcG93ZXJzdXBwbHlfaW5pdChzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCit7CisJZGktPmJhdC50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfQkFUVEVSWTsKKwlkaS0+YmF0LnByb3BlcnRpZXMgPSBicTI3eDAwX2JhdHRlcnlfcHJvcHM7CisJZGktPmJhdC5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUoYnEyN3gwMF9iYXR0ZXJ5X3Byb3BzKTsKKwlkaS0+YmF0LmdldF9wcm9wZXJ0eSA9IGJxMjd4MDBfYmF0dGVyeV9nZXRfcHJvcGVydHk7CisJZGktPmJhdC5leHRlcm5hbF9wb3dlcl9jaGFuZ2VkID0gTlVMTDsKK30KKworLyoKKyAqIEJRMjcyMDAgc3BlY2lmaWMgY29kZQorICovCisKK3N0YXRpYyBpbnQgYnEyNzIwMF9yZWFkKHU4IHJlZywgaW50ICpydF92YWx1ZSwgaW50IGJfc2luZ2xlLAorCQkJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkaS0+Y2xpZW50OworCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMl07CisJaW50IGVycjsKKworCWlmICghY2xpZW50LT5hZGFwdGVyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1zZy0+YWRkciA9IGNsaWVudC0+YWRkcjsKKwltc2ctPmZsYWdzID0gMDsKKwltc2ctPmxlbiA9IDE7CisJbXNnLT5idWYgPSBkYXRhOworCisJZGF0YVswXSA9IHJlZzsKKwllcnIgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2csIDEpOworCisJaWYgKGVyciA+PSAwKSB7CisJCWlmICghYl9zaW5nbGUpCisJCQltc2ctPmxlbiA9IDI7CisJCWVsc2UKKwkJCW1zZy0+bGVuID0gMTsKKworCQltc2ctPmZsYWdzID0gSTJDX01fUkQ7CisJCWVyciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMSk7CisJCWlmIChlcnIgPj0gMCkgeworCQkJaWYgKCFiX3NpbmdsZSkKKwkJCQkqcnRfdmFsdWUgPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7CisJCQllbHNlCisJCQkJKnJ0X3ZhbHVlID0gZGF0YVswXTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBicTI3MjAwX2JhdHRlcnlfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWNoYXIgKm5hbWU7CisJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpOworCXN0cnVjdCBicTI3eDAwX2FjY2Vzc19tZXRob2RzICpidXM7CisJaW50IG51bTsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qIEdldCBuZXcgSUQgZm9yIHRoZSBuZXcgYmF0dGVyeSBkZXZpY2UgKi8KKwlyZXR2YWwgPSBpZHJfcHJlX2dldCgmYmF0dGVyeV9pZCwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwltdXRleF9sb2NrKCZiYXR0ZXJ5X211dGV4KTsKKwlyZXR2YWwgPSBpZHJfZ2V0X25ldygmYmF0dGVyeV9pZCwgY2xpZW50LCAmbnVtKTsKKwltdXRleF91bmxvY2soJmJhdHRlcnlfbXV0ZXgpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiYnEyNzIwMC0lZCIsIG51bSk7CisJaWYgKCFuYW1lKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZSBuYW1lXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBiYXR0X2ZhaWxlZF8xOworCX0KKworCWRpID0ga3phbGxvYyhzaXplb2YoKmRpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkaSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkZXZpY2UgaW5mbyBkYXRhXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBiYXR0X2ZhaWxlZF8yOworCX0KKwlkaS0+aWQgPSBudW07CisKKwlidXMgPSBremFsbG9jKHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidXMpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgYWNjZXNzIG1ldGhvZCAiCisJCQkJCSJkYXRhXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBiYXR0X2ZhaWxlZF8zOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRpKTsKKwlkaS0+ZGV2ID0gJmNsaWVudC0+ZGV2OworCWRpLT5iYXQubmFtZSA9IG5hbWU7CisJYnVzLT5yZWFkID0gJmJxMjcyMDBfcmVhZDsKKwlkaS0+YnVzID0gYnVzOworCWRpLT5jbGllbnQgPSBjbGllbnQ7CisKKwlicTI3eDAwX3Bvd2Vyc3VwcGx5X2luaXQoZGkpOworCisJcmV0dmFsID0gcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKCZjbGllbnQtPmRldiwgJmRpLT5iYXQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgYmF0dGVyeVxuIik7CisJCWdvdG8gYmF0dF9mYWlsZWRfNDsKKwl9CisKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJzdXBwb3J0IHZlci4gJXMgZW5hYmxlZFxuIiwgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIDA7CisKK2JhdHRfZmFpbGVkXzQ6CisJa2ZyZWUoYnVzKTsKK2JhdHRfZmFpbGVkXzM6CisJa2ZyZWUoZGkpOworYmF0dF9mYWlsZWRfMjoKKwlrZnJlZShuYW1lKTsKK2JhdHRfZmFpbGVkXzE6CisJbXV0ZXhfbG9jaygmYmF0dGVyeV9tdXRleCk7CisJaWRyX3JlbW92ZSgmYmF0dGVyeV9pZCwgbnVtKTsKKwltdXRleF91bmxvY2soJmJhdHRlcnlfbXV0ZXgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBicTI3MjAwX2JhdHRlcnlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmZGktPmJhdCk7CisKKwlrZnJlZShkaS0+YmF0Lm5hbWUpOworCisJbXV0ZXhfbG9jaygmYmF0dGVyeV9tdXRleCk7CisJaWRyX3JlbW92ZSgmYmF0dGVyeV9pZCwgZGktPmlkKTsKKwltdXRleF91bmxvY2soJmJhdHRlcnlfbXV0ZXgpOworCisJa2ZyZWUoZGkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNb2R1bGUgc3R1ZmYKKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYnEyNzIwMF9pZFtdID0geworCXsgImJxMjcyMDAiLCAwIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYnEyNzIwMF9iYXR0ZXJ5X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJicTI3MjAwLWJhdHRlcnkiLAorCX0sCisJLnByb2JlID0gYnEyNzIwMF9iYXR0ZXJ5X3Byb2JlLAorCS5yZW1vdmUgPSBicTI3MjAwX2JhdHRlcnlfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGJxMjcyMDBfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBicTI3eDAwX2JhdHRlcnlfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmYnEyNzIwMF9iYXR0ZXJ5X2RyaXZlcik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgQlEyNzIwMCBkcml2ZXJcbiIpOworCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KGJxMjd4MDBfYmF0dGVyeV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGJxMjd4MDBfYmF0dGVyeV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmJxMjcyMDBfYmF0dGVyeV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYnEyN3gwMF9iYXR0ZXJ5X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJSb2RvbGZvIEdpb21ldHRpIDxnaW9tZXR0aUBsaW51eC5pdD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQlEyN3gwMCBiYXR0ZXJ5IG1vbml0b3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL29scGNfYmF0dGVyeS5jIGIvZHJpdmVycy9wb3dlci9vbHBjX2JhdHRlcnkuYwppbmRleCAzMjU3MGFmLi41ZmJjYTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL29scGNfYmF0dGVyeS5jCisrKyBiL2RyaXZlcnMvcG93ZXIvb2xwY19iYXR0ZXJ5LmMKQEAgLTIwNSw5ICsyMDUsOSBAQAogCQkJCSB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQogewogCWludCByZXQgPSAwOwotCWludDE2X3QgZWNfd29yZDsKKwlfX2JlMTYgZWNfd29yZDsKIAl1aW50OF90IGVjX2J5dGU7Ci0JdWludDY0X3Qgc2VyX2J1ZjsKKwlfX2JlNjQgc2VyX2J1ZjsKIAogCXJldCA9IG9scGNfZWNfY21kKEVDX0JBVF9TVEFUVVMsIE5VTEwsIDAsICZlY19ieXRlLCAxKTsKIAlpZiAocmV0KQpAQCAtMjU3LDE2ICsyNTcsMTQgQEAKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJZWNfd29yZCA9IGJlMTZfdG9fY3B1KGVjX3dvcmQpOwotCQl2YWwtPmludHZhbCA9IGVjX3dvcmQgKiA5NzYwTCAvIDMyOworCQl2YWwtPmludHZhbCA9IChpbnQpYmUxNl90b19jcHUoZWNfd29yZCkgKiA5NzYwTCAvIDMyOwogCQlicmVhazsKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfQVZHOgogCQlyZXQgPSBvbHBjX2VjX2NtZChFQ19CQVRfQ1VSUkVOVCwgTlVMTCwgMCwgKHZvaWQgKikmZWNfd29yZCwgMik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCi0JCWVjX3dvcmQgPSBiZTE2X3RvX2NwdShlY193b3JkKTsKLQkJdmFsLT5pbnR2YWwgPSBlY193b3JkICogMTU2MjVMIC8gMTIwOworCQl2YWwtPmludHZhbCA9IChpbnQpYmUxNl90b19jcHUoZWNfd29yZCkgKiAxNTYyNUwgLyAxMjA7CiAJCWJyZWFrOwogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFk6CiAJCXJldCA9IG9scGNfZWNfY21kKEVDX0JBVF9TT0MsIE5VTEwsIDAsICZlY19ieXRlLCAxKTsKQEAgLTI3OCwyNCArMjc2LDIyIEBACiAJCXJldCA9IG9scGNfZWNfY21kKEVDX0JBVF9URU1QLCBOVUxMLCAwLCAodm9pZCAqKSZlY193b3JkLCAyKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCWVjX3dvcmQgPSBiZTE2X3RvX2NwdShlY193b3JkKTsKLQkJdmFsLT5pbnR2YWwgPSBlY193b3JkICogMTAwIC8gMjU2OworCisJCXZhbC0+aW50dmFsID0gKGludCliZTE2X3RvX2NwdShlY193b3JkKSAqIDEwMCAvIDI1NjsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9URU1QX0FNQklFTlQ6CiAJCXJldCA9IG9scGNfZWNfY21kKEVDX0FNQl9URU1QLCBOVUxMLCAwLCAodm9pZCAqKSZlY193b3JkLCAyKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJZWNfd29yZCA9IGJlMTZfdG9fY3B1KGVjX3dvcmQpOwotCQl2YWwtPmludHZhbCA9IGVjX3dvcmQgKiAxMDAgLyAyNTY7CisJCXZhbC0+aW50dmFsID0gKGludCliZTE2X3RvX2NwdShlY193b3JkKSAqIDEwMCAvIDI1NjsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfQ09VTlRFUjoKIAkJcmV0ID0gb2xwY19lY19jbWQoRUNfQkFUX0FDUiwgTlVMTCwgMCwgKHZvaWQgKikmZWNfd29yZCwgMik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCi0JCWVjX3dvcmQgPSBiZTE2X3RvX2NwdShlY193b3JkKTsKLQkJdmFsLT5pbnR2YWwgPSBlY193b3JkICogNjI1MCAvIDE1OworCQl2YWwtPmludHZhbCA9IChpbnQpYmUxNl90b19jcHUoZWNfd29yZCkgKiA2MjUwIC8gMTU7CiAJCWJyZWFrOwogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfU0VSSUFMX05VTUJFUjoKIAkJcmV0ID0gb2xwY19lY19jbWQoRUNfQkFUX1NFUklBTCwgTlVMTCwgMCwgKHZvaWQgKikmc2VyX2J1ZiwgOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3BkYV9wb3dlci5jIGIvZHJpdmVycy9wb3dlci9wZGFfcG93ZXIuYwppbmRleCAwNDcxZWM3Li5kMzBiYjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3BkYV9wb3dlci5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcGRhX3Bvd2VyLmMKQEAgLTMzNCwxMyArMzM0LDE2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWNfd2FrZXVwX2VuYWJsZWQ7CitzdGF0aWMgaW50IHVzYl93YWtldXBfZW5hYmxlZDsKKwogc3RhdGljIGludCBwZGFfcG93ZXJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKSB7CiAJCWlmIChhY19pcnEpCi0JCQllbmFibGVfaXJxX3dha2UoYWNfaXJxLT5zdGFydCk7CisJCQlhY193YWtldXBfZW5hYmxlZCA9ICFlbmFibGVfaXJxX3dha2UoYWNfaXJxLT5zdGFydCk7CiAJCWlmICh1c2JfaXJxKQotCQkJZW5hYmxlX2lycV93YWtlKHVzYl9pcnEtPnN0YXJ0KTsKKwkJCXVzYl93YWtldXBfZW5hYmxlZCA9ICFlbmFibGVfaXJxX3dha2UodXNiX2lycS0+c3RhcnQpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzQ5LDkgKzM1Miw5IEBACiBzdGF0aWMgaW50IHBkYV9wb3dlcl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKLQkJaWYgKHVzYl9pcnEpCisJCWlmICh1c2JfaXJxICYmIHVzYl93YWtldXBfZW5hYmxlZCkKIAkJCWRpc2FibGVfaXJxX3dha2UodXNiX2lycS0+c3RhcnQpOwotCQlpZiAoYWNfaXJxKQorCQlpZiAoYWNfaXJxICYmIGFjX3dha2V1cF9lbmFibGVkKQogCQkJZGlzYWJsZV9pcnFfd2FrZShhY19pcnEtPnN0YXJ0KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X2NvcmUuYwppbmRleCBjYjFjY2I0Li41NTIwMDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9jb3JlLmMKKysrIGIvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfY29yZS5jCkBAIC04NywxMiArODcsMzYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBpbnQgX19wb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCByZXQgPSB7MCx9OworCXN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKHBzeS0+dHlwZSAhPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZKSB7CisJCWlmIChwc3ktPmdldF9wcm9wZXJ0eShwc3ksIFBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwgJnJldCkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHJldC5pbnR2YWwpCisJCQlyZXR1cm4gcmV0LmludHZhbDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBwb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKHZvaWQpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBjbGFzc19mb3JfZWFjaF9kZXZpY2UocG93ZXJfc3VwcGx5X2NsYXNzLCBOVUxMLCBOVUxMLAorCQkJCSAgICAgIF9fcG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIGludCBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpCiB7CiAJaW50IHJjID0gMDsKIAotCXBzeS0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHBvd2VyX3N1cHBseV9jbGFzcywgcGFyZW50LCAwLAotCQkJCQkgcHN5LCAiJXMiLCBwc3ktPm5hbWUpOworCXBzeS0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwb3dlcl9zdXBwbHlfY2xhc3MsIHBhcmVudCwgMCwgcHN5LAorCQkJCSAiJXMiLCBwc3ktPm5hbWUpOwogCWlmIChJU19FUlIocHN5LT5kZXYpKSB7CiAJCXJjID0gUFRSX0VSUihwc3ktPmRldik7CiAJCWdvdG8gZGV2X2NyZWF0ZV9mYWlsZWQ7CkBAIC0xNDgsNiArMTcyLDcgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X2NoYW5nZWQpOwogRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X2FtX2lfc3VwcGxpZWQpOworRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCk7CiBFWFBPUlRfU1lNQk9MX0dQTChwb3dlcl9zdXBwbHlfcmVnaXN0ZXIpOwogRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9zeXNmcy5jIGIvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfc3lzZnMuYwppbmRleCBmZTJhZWIxLi4yM2FlODQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X3N5c2ZzLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2RlZmluZSBQT1dFUl9TVVBQTFlfQVRUUihfbmFtZSkJCQkJCVwKIHsJCQkJCQkJCQlcCi0JLmF0dHIgPSB7IC5uYW1lID0gI19uYW1lLCAubW9kZSA9IDA0NDQsIC5vd25lciA9IFRISVNfTU9EVUxFIH0sCVwKKwkuYXR0ciA9IHsgLm5hbWUgPSAjX25hbWUsIC5tb2RlID0gMDQ0NCB9LAlcCiAJLnNob3cgPSBwb3dlcl9zdXBwbHlfc2hvd19wcm9wZXJ0eSwJCQkJXAogCS5zdG9yZSA9IE5VTEwsCQkJCQkJCVwKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL3BzM2F2LmMgYi9kcml2ZXJzL3BzMy9wczNhdi5jCmluZGV4IDZmMmY5MGUuLjA2ODQ4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHMzL3BzM2F2LmMKKysrIGIvZHJpdmVycy9wczMvcHMzYXYuYwpAQCAtOTE1LDYgKzkxNSwyMiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChwczNhdl92aWRlb19tdXRlKTsKIAorLyogbXV0ZSBhbmFsb2cgb3V0cHV0IG9ubHkgKi8KK2ludCBwczNhdl9hdWRpb19tdXRlX2FuYWxvZyhpbnQgbXV0ZSkKK3sKKwlpbnQgaSwgcmVzOworCisJZm9yIChpID0gMDsgaSA8IHBzM2F2LT5hdl9od19jb25mLm51bV9vZl9hdm11bHRpOyBpKyspIHsKKwkJcmVzID0gcHMzYXZfY21kX2F2X2F1ZGlvX211dGUoMSwKKwkJCSZwczNhdi0+YXZfcG9ydFtpICsgcHMzYXYtPmF2X2h3X2NvbmYubnVtX29mX2hkbWldLAorCQkJbXV0ZSk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBzM2F2X2F1ZGlvX211dGVfYW5hbG9nKTsKKwogaW50IHBzM2F2X2F1ZGlvX211dGUoaW50IG11dGUpCiB7CiAJcmV0dXJuIHBzM2F2X3NldF9hdWRpb19tdXRlKG11dGUgPyBQUzNBVl9DTURfTVVURV9PTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvcHMzYXZfY21kLmMgYi9kcml2ZXJzL3BzMy9wczNhdl9jbWQuYwppbmRleCA3Zjg4MGMyLi4xMWViNTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BzMy9wczNhdl9jbWQuYworKysgYi9kcml2ZXJzL3BzMy9wczNhdl9jbWQuYwpAQCAtNjYwLDkgKzY2MCwxMCBAQAogfQogCiAvKiBkZWZhdWx0IGNzIHZhbCAqLwotc3RhdGljIGNvbnN0IHU4IHBzM2F2X21vZGVfY3NfaW5mb1tdID0gewordTggcHMzYXZfbW9kZV9jc19pbmZvW10gPSB7CiAJMHgwMCwgMHgwOSwgMHgwMCwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMAogfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBzM2F2X21vZGVfY3NfaW5mbyk7CiAKICNkZWZpbmUgQ1NfNDQJMHgwMAogI2RlZmluZSBDU180OAkweDAyCkBAIC02NzcsNyArNjc4LDcgQEAKIAkJCSAgICAgIHUzMiBjaCwgdTMyIGZzLCB1MzIgd29yZF9iaXRzLCB1MzIgZm9ybWF0LAogCQkJICAgICAgdTMyIHNvdXJjZSkKIHsKLQlpbnQgc3BkaWZfdGhyb3VnaCwgc3BkaWZfYml0c3RyZWFtOworCWludCBzcGRpZl90aHJvdWdoOwogCWludCBpOwogCiAJaWYgKCEoY2ggfCBmcyB8IGZvcm1hdCB8IHdvcmRfYml0cyB8IHNvdXJjZSkpIHsKQEAgLTY4Nyw3ICs2ODgsNiBAQAogCQlmb3JtYXQgPSBQUzNBVl9DTURfQVVESU9fRk9STUFUX1BDTTsKIAkJc291cmNlID0gUFMzQVZfQ01EX0FVRElPX1NPVVJDRV9TRVJJQUw7CiAJfQotCXNwZGlmX3Rocm91Z2ggPSBzcGRpZl9iaXRzdHJlYW0gPSAwOwkvKiBYWFggbm90IHN1cHBvcnRlZCAqLwogCiAJLyogYXVkaW8gbW9kZSAqLwogCW1lbXNldChhdWRpbywgMCwgc2l6ZW9mKCphdWRpbykpOwpAQCAtNzc3LDE2ICs3NzcsMTcgQEAKIAkJYnJlYWs7CiAJfQogCisJLyogbm9uLWF1ZGlvIGJpdCAqLworCXNwZGlmX3Rocm91Z2ggPSBhdWRpby0+YXVkaW9fY3NfaW5mb1swXSAmIDB4MDI7CisKIAkvKiBwYXNzIHRocm91Z2ggc2V0dGluZyAqLwogCWlmIChzcGRpZl90aHJvdWdoICYmCiAJICAgIChhdnBvcnQgPT0gUFMzQVZfQ01EX0FWUE9SVF9TUERJRl8wIHx8Ci0JICAgICBhdnBvcnQgPT0gUFMzQVZfQ01EX0FWUE9SVF9TUERJRl8xKSkgeworCSAgICAgYXZwb3J0ID09IFBTM0FWX0NNRF9BVlBPUlRfU1BESUZfMSB8fAorCSAgICAgYXZwb3J0ID09IFBTM0FWX0NNRF9BVlBPUlRfSERNSV8wIHx8CisJICAgICBhdnBvcnQgPT0gUFMzQVZfQ01EX0FWUE9SVF9IRE1JXzEpKSB7CiAJCWF1ZGlvLT5hdWRpb193b3JkX2JpdHMgPSBQUzNBVl9DTURfQVVESU9fV09SRF9CSVRTXzE2OwotCQlhdWRpby0+YXVkaW9fc291cmNlID0gUFMzQVZfQ01EX0FVRElPX1NPVVJDRV9TUERJRjsKLQkJaWYgKHNwZGlmX2JpdHN0cmVhbSkgewotCQkJYXVkaW8tPmF1ZGlvX2Zvcm1hdCA9IFBTM0FWX0NNRF9BVURJT19GT1JNQVRfQklUU1RSRUFNOwotCQkJYXVkaW8tPmF1ZGlvX2NzX2luZm9bMF0gfD0gQ1NfQklUOwotCQl9CisJCWF1ZGlvLT5hdWRpb19mb3JtYXQgPSBQUzNBVl9DTURfQVVESU9fRk9STUFUX0JJVFNUUkVBTTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcgYi9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCmluZGV4IGE2NTYxMjguLjRkYWRhNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZwpAQCAtNTYsNCArNTYsMjggQEAKIAkgIGNoYXJnaW5nIHNlbGVjdCBiZXR3ZWVuIDEwMCBtQSBhbmQgNTAwIG1BIGNoYXJnaW5nIGN1cnJlbnQKIAkgIGxpbWl0LgogCitjb25maWcgUkVHVUxBVE9SX1dNODM1MAorCXRyaXN0YXRlICJXb2xmc29uIE1pY3JvZWxlY3Ryb25jaXMgV004MzUwIEF1ZGlvUGx1cyBQTUlDIgorCWRlcGVuZHMgb24gTUZEX1dNODM1MAorCXNlbGVjdCBSRUdVTEFUT1IKKwloZWxwCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgdm9sdGFnZSBhbmQgY3VycmVudCByZWd1bGF0b3JzCisgICAgICAgICAgb2YgdGhlIFdNODM1MCBBdWRpb1BsdXMgUE1JQy4KKworY29uZmlnIFJFR1VMQVRPUl9XTTg0MDAKKwl0cmlzdGF0ZSAiV29sZnNvbiBNaWNyb2VsZWN0cm9uY2lzIFdNODQwMCBBdWRpb1BsdXMgUE1JQyIKKwlkZXBlbmRzIG9uIE1GRF9XTTg0MDAKKwlzZWxlY3QgUkVHVUxBVE9SCisJaGVscAorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHZvbHRhZ2UgcmVndWxhdG9ycyBvZiB0aGUKKwkgIFdNODQwMCBBdWRpb1BsdXMgUE1JQy4KKworY29uZmlnIFJFR1VMQVRPUl9EQTkwM1gKKwl0cmlzdGF0ZSAiU3VwcG9ydCByZWd1bGF0b3JzIG9uIERpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzMC9EQTkwMzQgUE1JQyIKKwlkZXBlbmRzIG9uIFBNSUNfREE5MDNYCisJc2VsZWN0IFJFR1VMQVRPUgorCWhlbHAKKwkgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgQlVDS3MgYW5kIExET3MgcmVndWxhdG9ycyBmb3VuZCBvbgorCSAgRGlhbG9nIFNlbWljb25kdWN0b3IgREE5MDMwL0RBOTAzNCBQTUlDLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9NYWtlZmlsZSBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCmluZGV4IGFjMmM2NGUuLjI1NGQ0MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCkBAIC04LDUgKzgsOCBAQAogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSKSArPSB2aXJ0dWFsLm8KIAogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyKSArPSBicTI0MDIyLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfV004MzUwKSArPSB3bTgzNTAtcmVndWxhdG9yLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfV004NDAwKSArPSB3bTg0MDAtcmVndWxhdG9yLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfREE5MDNYKQkrPSBkYTkwM3gubwogCiBjY2ZsYWdzLSQoQ09ORklHX1JFR1VMQVRPUl9ERUJVRykgKz0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvYnEyNDAyMi5jIGIvZHJpdmVycy9yZWd1bGF0b3IvYnEyNDAyMi5jCmluZGV4IDI2MzY5OWQuLjM2NjU2NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2JxMjQwMjIuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9icTI0MDIyLmMKQEAgLTE4LDEzICsxOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9icTI0MDIyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgogCisKIHN0YXRpYyBpbnQgYnEyNDAyMl9zZXRfY3VycmVudF9saW1pdChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKIAkJCQkJaW50IG1pbl91QSwgaW50IG1heF91QSkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQlzdHJ1Y3QgYnEyNDAyMl9tYWNoX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGJxMjQwMjJfbWFjaF9pbmZvICpwZGF0YSA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJzZXR0aW5nIGN1cnJlbnQgbGltaXQgdG8gJXMgbUFcbiIsCisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICJzZXR0aW5nIGN1cnJlbnQgbGltaXQgdG8gJXMgbUFcbiIsCiAJCW1heF91QSA+PSA1MDAwMDAgPyAiNTAwIiA6ICIxMDAiKTsKIAogCS8qIFJFVklTSVQ6IG1heWJlIHJldHVybiBlcnJvciBpZiBtaW5fdUEgIT0gMCA/ICovCkBAIC0zNCwxOCArMzQsMTYgQEAKIAogc3RhdGljIGludCBicTI0MDIyX2dldF9jdXJyZW50X2xpbWl0KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCXN0cnVjdCBicTI0MDIyX21hY2hfaW5mbyAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYnEyNDAyMl9tYWNoX2luZm8gKnBkYXRhID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAogCXJldHVybiBncGlvX2dldF92YWx1ZShwZGF0YS0+Z3Bpb19pc2V0MikgPyA1MDAwMDAgOiAxMDAwMDA7CiB9CiAKIHN0YXRpYyBpbnQgYnEyNDAyMl9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0Jc3RydWN0IGJxMjQwMjJfbWFjaF9pbmZvICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBicTI0MDIyX21hY2hfaW5mbyAqcGRhdGEgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCi0JZGV2X2RiZygmcGRldi0+ZGV2LCAiZW5hYmxpbmcgY2hhcmdlclxuIik7CisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICJlbmFibGluZyBjaGFyZ2VyXG4iKTsKIAogCWdwaW9fc2V0X3ZhbHVlKHBkYXRhLT5ncGlvX25jZSwgMCk7CiAJcmV0dXJuIDA7CkBAIC01MywxMCArNTEsOSBAQAogCiBzdGF0aWMgaW50IGJxMjQwMjJfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQlzdHJ1Y3QgYnEyNDAyMl9tYWNoX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGJxMjQwMjJfbWFjaF9pbmZvICpwZGF0YSA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJkaXNhYmxpbmcgY2hhcmdlclxuIik7CisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICJkaXNhYmxpbmcgY2hhcmdlclxuIik7CiAKIAlncGlvX3NldF92YWx1ZShwZGF0YS0+Z3Bpb19uY2UsIDEpOwogCXJldHVybiAwOwpAQCAtMTA4LDcgKzEwNSw3IEBACiAJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX2lzZXQyLCAwKTsKIAlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQocGRhdGEtPmdwaW9fbmNlLCAxKTsKIAotCWJxMjQwMjIgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmJxMjQwMjJfZGVzYywgcGRldik7CisJYnEyNDAyMiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmYnEyNDAyMl9kZXNjLCAmcGRldi0+ZGV2LCBwZGF0YSk7CiAJaWYgKElTX0VSUihicTI0MDIyKSkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZG4ndCByZWdpc3RlciByZWd1bGF0b3JcbiIpOwogCQlyZXQgPSBQVFJfRVJSKGJxMjQwMjIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCmluZGV4IDljNzk4NjIuLjAyYTc3NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKQEAgLTIsOCArMiw5IEBACiAgKiBjb3JlLmMgIC0tICBWb2x0YWdlL0N1cnJlbnQgUmVndWxhdG9yIGZyYW1ld29yay4KICAqCiAgKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQ29weXJpZ2h0IDIwMDggU2xpbUxvZ2ljIEx0ZC4KICAqCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbT4KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC02NCwxNCArNjUsOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJY29uc3QgY2hhciAqc3VwcGx5OwotCWNvbnN0IGNoYXIgKnJlZ3VsYXRvcjsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVndWxhdG9yX2RldiAqdG9fcmRldihzdHJ1Y3QgZGV2aWNlICpkKQotewotCXJldHVybiBjb250YWluZXJfb2YoZCwgc3RydWN0IHJlZ3VsYXRvcl9kZXYsIGRldik7Ci19Ci0KIC8qCiAgKiBzdHJ1Y3QgcmVndWxhdG9yCiAgKgpAQCAtMjI3LDcgKzIyMyw3IEBACiBzdGF0aWMgc3NpemVfdCByZWd1bGF0b3JfdVZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHRvX3JkZXYoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXNzaXplX3QgcmV0OwogCiAJbXV0ZXhfbG9jaygmcmRldi0+bXV0ZXgpOwpAQCAtMjQwLDE1ICsyMzYsMzEgQEAKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl91QV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgX3JlZ3VsYXRvcl9nZXRfY3VycmVudF9saW1pdChyZGV2KSk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl9uYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY29uc3QgY2hhciAqbmFtZTsKKworCWlmIChyZGV2LT5jb25zdHJhaW50cy0+bmFtZSkKKwkJbmFtZSA9IHJkZXYtPmNvbnN0cmFpbnRzLT5uYW1lOworCWVsc2UgaWYgKHJkZXYtPmRlc2MtPm5hbWUpCisJCW5hbWUgPSByZGV2LT5kZXNjLT5uYW1lOworCWVsc2UKKwkJbmFtZSA9ICIiOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG5hbWUpOworfQorCiBzdGF0aWMgc3NpemVfdCByZWd1bGF0b3Jfb3Btb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IG1vZGUgPSBfcmVndWxhdG9yX2dldF9tb2RlKHJkZXYpOwogCiAJc3dpdGNoIChtb2RlKSB7CkBAIC0yNjcsNyArMjc5LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHN0YXRlID0gX3JlZ3VsYXRvcl9pc19lbmFibGVkKHJkZXYpOwogCiAJaWYgKHN0YXRlID4gMCkKQEAgLTI4MSw3ICsyOTMsNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX21pbl91QV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHRvX3JkZXYoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFyZGV2LT5jb25zdHJhaW50cykKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiY29uc3RyYWludCBub3QgZGVmaW5lZFxuIik7CkBAIC0yOTIsNyArMzA0LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl9tYXhfdUFfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgImNvbnN0cmFpbnQgbm90IGRlZmluZWRcbiIpOwpAQCAtMzAzLDcgKzMxNSw3IEBACiBzdGF0aWMgc3NpemVfdCByZWd1bGF0b3JfbWluX3VWX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoIXJkZXYtPmNvbnN0cmFpbnRzKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJjb25zdHJhaW50IG5vdCBkZWZpbmVkXG4iKTsKQEAgLTMxNCw3ICszMjYsNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX21heF91Vl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHRvX3JkZXYoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFyZGV2LT5jb25zdHJhaW50cykKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiY29uc3RyYWludCBub3QgZGVmaW5lZFxuIik7CkBAIC0zMjUsNyArMzM3LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl90b3RhbF91QV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yOwogCWludCB1QSA9IDA7CiAKQEAgLTMzOSwxNCArMzUxLDE0IEBACiBzdGF0aWMgc3NpemVfdCByZWd1bGF0b3JfbnVtX3VzZXJzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcmRldi0+dXNlX2NvdW50KTsKIH0KIAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3R5cGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlzd2l0Y2ggKHJkZXYtPmRlc2MtPnR5cGUpIHsKIAljYXNlIFJFR1VMQVRPUl9WT0xUQUdFOgpAQCAtMzYwLDcgKzM3Miw3IEBACiBzdGF0aWMgc3NpemVfdCByZWd1bGF0b3Jfc3VzcGVuZF9tZW1fdVZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHRvX3JkZXYoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFyZGV2LT5jb25zdHJhaW50cykKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAibm90IGRlZmluZWRcbiIpOwpAQCAtMzcwLDcgKzM4Miw3IEBACiBzdGF0aWMgc3NpemVfdCByZWd1bGF0b3Jfc3VzcGVuZF9kaXNrX3VWX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm5vdCBkZWZpbmVkXG4iKTsKQEAgLTM4MCw3ICszOTIsNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3N1c3BlbmRfc3RhbmRieV91Vl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoIXJkZXYtPmNvbnN0cmFpbnRzKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJub3QgZGVmaW5lZFxuIik7CkBAIC00MDYsNyArNDE4LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl9zdXNwZW5kX21lbV9tb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm5vdCBkZWZpbmVkXG4iKTsKQEAgLTQxNyw3ICs0MjksNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3N1c3BlbmRfZGlza19tb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm5vdCBkZWZpbmVkXG4iKTsKQEAgLTQyOCw3ICs0NDAsNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3N1c3BlbmRfc3RhbmRieV9tb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm5vdCBkZWZpbmVkXG4iKTsKQEAgLTQzOSw3ICs0NTEsNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3N1c3BlbmRfbWVtX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm5vdCBkZWZpbmVkXG4iKTsKQEAgLTQ1Myw3ICs0NjUsNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3N1c3BlbmRfZGlza19zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoIXJkZXYtPmNvbnN0cmFpbnRzKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJub3QgZGVmaW5lZFxuIik7CkBAIC00NjcsNyArNDc5LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl9zdXNwZW5kX3N0YW5kYnlfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHRvX3JkZXYoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFyZGV2LT5jb25zdHJhaW50cykKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAibm90IGRlZmluZWRcbiIpOwpAQCAtNDc3LDcgKzQ4OSw5IEBACiAJZWxzZQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJkaXNhYmxlZFxuIik7CiB9CisKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSByZWd1bGF0b3JfZGV2X2F0dHJzW10gPSB7CisJX19BVFRSKG5hbWUsIDA0NDQsIHJlZ3VsYXRvcl9uYW1lX3Nob3csIE5VTEwpLAogCV9fQVRUUihtaWNyb3ZvbHRzLCAwNDQ0LCByZWd1bGF0b3JfdVZfc2hvdywgTlVMTCksCiAJX19BVFRSKG1pY3JvYW1wcywgMDQ0NCwgcmVndWxhdG9yX3VBX3Nob3csIE5VTEwpLAogCV9fQVRUUihvcG1vZGUsIDA0NDQsIHJlZ3VsYXRvcl9vcG1vZGVfc2hvdywgTlVMTCksCkBAIC01MTIsNyArNTI2LDcgQEAKIAogc3RhdGljIHZvaWQgcmVndWxhdG9yX2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHRvX3JkZXYoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWtmcmVlKHJkZXYpOwogfQogCkBAIC01NjksOCArNTgzLDExIEBACiAKIAkvKiBlbmFibGUgJiBkaXNhYmxlIGFyZSBtYW5kYXRvcnkgZm9yIHN1c3BlbmQgY29udHJvbCAqLwogCWlmICghcmRldi0+ZGVzYy0+b3BzLT5zZXRfc3VzcGVuZF9lbmFibGUgfHwKLQkJIXJkZXYtPmRlc2MtPm9wcy0+c2V0X3N1c3BlbmRfZGlzYWJsZSkKKwkJIXJkZXYtPmRlc2MtPm9wcy0+c2V0X3N1c3BlbmRfZGlzYWJsZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyB3YXkgdG8gc2V0IHN1c3BlbmQgc3RhdGVcbiIsCisJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWlmIChyc3RhdGUtPmVuYWJsZWQpCiAJCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+c2V0X3N1c3BlbmRfZW5hYmxlKHJkZXYpOwpAQCAtNjU2LDYgKzY3MywxNTUgQEAKIAlwcmludGsoS0VSTl9JTkZPICJyZWd1bGF0b3I6ICVzOiAlc1xuIiwgcmRldi0+ZGVzYy0+bmFtZSwgYnVmKTsKIH0KIAorLyoqCisgKiBzZXRfbWFjaGluZV9jb25zdHJhaW50cyAtIHNldHMgcmVndWxhdG9yIGNvbnN0cmFpbnRzCisgKiBAcmVndWxhdG9yOiByZWd1bGF0b3Igc291cmNlCisgKgorICogQWxsb3dzIHBsYXRmb3JtIGluaXRpYWxpc2F0aW9uIGNvZGUgdG8gZGVmaW5lIGFuZCBjb25zdHJhaW4KKyAqIHJlZ3VsYXRvciBjaXJjdWl0cyBlLmcuIHZhbGlkIHZvbHRhZ2UvY3VycmVudCByYW5nZXMsIGV0Yy4gIE5PVEU6CisgKiBDb25zdHJhaW50cyAqbXVzdCogYmUgc2V0IGJ5IHBsYXRmb3JtIGNvZGUgaW4gb3JkZXIgZm9yIHNvbWUKKyAqIHJlZ3VsYXRvciBvcGVyYXRpb25zIHRvIHByb2NlZWQgaS5lLiBzZXRfdm9sdGFnZSwgc2V0X2N1cnJlbnRfbGltaXQsCisgKiBzZXRfbW9kZS4KKyAqLworc3RhdGljIGludCBzZXRfbWFjaGluZV9jb25zdHJhaW50cyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHMpCit7CisJaW50IHJldCA9IDA7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgcmVndWxhdG9yX29wcyAqb3BzID0gcmRldi0+ZGVzYy0+b3BzOworCisJaWYgKGNvbnN0cmFpbnRzLT5uYW1lKQorCQluYW1lID0gY29uc3RyYWludHMtPm5hbWU7CisJZWxzZSBpZiAocmRldi0+ZGVzYy0+bmFtZSkKKwkJbmFtZSA9IHJkZXYtPmRlc2MtPm5hbWU7CisJZWxzZQorCQluYW1lID0gInJlZ3VsYXRvciI7CisKKwlyZGV2LT5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzOworCisJLyogZG8gd2UgbmVlZCB0byBhcHBseSB0aGUgY29uc3RyYWludCB2b2x0YWdlICovCisJaWYgKHJkZXYtPmNvbnN0cmFpbnRzLT5hcHBseV91ViAmJgorCQlyZGV2LT5jb25zdHJhaW50cy0+bWluX3VWID09IHJkZXYtPmNvbnN0cmFpbnRzLT5tYXhfdVYgJiYKKwkJb3BzLT5zZXRfdm9sdGFnZSkgeworCQlyZXQgPSBvcHMtPnNldF92b2x0YWdlKHJkZXYsCisJCQlyZGV2LT5jb25zdHJhaW50cy0+bWluX3VWLCByZGV2LT5jb25zdHJhaW50cy0+bWF4X3VWKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFwcGx5ICVkdVYgY29uc3RyYWludCB0byAlc1xuIiwKKwkJCQkgICAgICAgX19mdW5jX18sCisJCQkJICAgICAgIHJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdVYsIG5hbWUpOworCQkJCXJkZXYtPmNvbnN0cmFpbnRzID0gTlVMTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwl9CisKKwkvKiBhcmUgd2UgZW5hYmxlZCBhdCBib290IHRpbWUgYnkgZmlybXdhcmUgLyBib290bG9hZGVyICovCisJaWYgKHJkZXYtPmNvbnN0cmFpbnRzLT5ib290X29uKQorCQlyZGV2LT51c2VfY291bnQgPSAxOworCisJLyogZG8gd2UgbmVlZCB0byBzZXR1cCBvdXIgc3VzcGVuZCBzdGF0ZSAqLworCWlmIChjb25zdHJhaW50cy0+aW5pdGlhbF9zdGF0ZSkgeworCQlyZXQgPSBzdXNwZW5kX3ByZXBhcmUocmRldiwgY29uc3RyYWludHMtPmluaXRpYWxfc3RhdGUpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHNldCBzdXNwZW5kIHN0YXRlIGZvciAlc1xuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgbmFtZSk7CisJCQlyZGV2LT5jb25zdHJhaW50cyA9IE5VTEw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIGlmIGFsd2F5c19vbiBpcyBzZXQgdGhlbiB0dXJuIHRoZSByZWd1bGF0b3Igb24gaWYgaXQncyBub3QKKwkgKiBhbHJlYWR5IG9uLiAqLworCWlmIChjb25zdHJhaW50cy0+YWx3YXlzX29uICYmIG9wcy0+ZW5hYmxlICYmCisJICAgICgob3BzLT5pc19lbmFibGVkICYmICFvcHMtPmlzX2VuYWJsZWQocmRldikpIHx8CisJICAgICAoIW9wcy0+aXNfZW5hYmxlZCAmJiAhY29uc3RyYWludHMtPmJvb3Rfb24pKSkgeworCQlyZXQgPSBvcHMtPmVuYWJsZShyZGV2KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBlbmFibGUgJXNcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG5hbWUpOworCQkJcmRldi0+Y29uc3RyYWludHMgPSBOVUxMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlwcmludF9jb25zdHJhaW50cyhyZGV2KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHNldF9zdXBwbHkgLSBzZXQgcmVndWxhdG9yIHN1cHBseSByZWd1bGF0b3IKKyAqIEByZWd1bGF0b3I6IHJlZ3VsYXRvciBuYW1lCisgKiBAc3VwcGx5OiBzdXBwbHkgcmVndWxhdG9yIG5hbWUKKyAqCisgKiBDYWxsZWQgYnkgcGxhdGZvcm0gaW5pdGlhbGlzYXRpb24gY29kZSB0byBzZXQgdGhlIHN1cHBseSByZWd1bGF0b3IgZm9yIHRoaXMKKyAqIHJlZ3VsYXRvci4gVGhpcyBlbnN1cmVzIHRoYXQgYSByZWd1bGF0b3JzIHN1cHBseSB3aWxsIGFsc28gYmUgZW5hYmxlZCBieSB0aGUKKyAqIGNvcmUgaWYgaXQncyBjaGlsZCBpcyBlbmFibGVkLgorICovCitzdGF0aWMgaW50IHNldF9zdXBwbHkoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnN1cHBseV9yZGV2KQoreworCWludCBlcnI7CisKKwllcnIgPSBzeXNmc19jcmVhdGVfbGluaygmcmRldi0+ZGV2LmtvYmosICZzdXBwbHlfcmRldi0+ZGV2LmtvYmosCisJCQkJInN1cHBseSIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IGNvdWxkIG5vdCBhZGQgZGV2aWNlIGxpbmsgJXMgZXJyICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIHN1cHBseV9yZGV2LT5kZXYua29iai5uYW1lLCBlcnIpOworCQkgICAgICAgZ290byBvdXQ7CisJfQorCXJkZXYtPnN1cHBseSA9IHN1cHBseV9yZGV2OworCWxpc3RfYWRkKCZyZGV2LT5zbGlzdCwgJnN1cHBseV9yZGV2LT5zdXBwbHlfbGlzdCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBzZXRfY29uc3VtZXJfZGV2aWNlX3N1cHBseTogQmluZCBhIHJlZ3VsYXRvciB0byBhIHN5bWJvbGljIHN1cHBseQorICogQHJlZ3VsYXRvcjogcmVndWxhdG9yIHNvdXJjZQorICogQGRldjogICAgICAgZGV2aWNlIHRoZSBzdXBwbHkgYXBwbGllcyB0bworICogQHN1cHBseTogICAgc3ltYm9saWMgbmFtZSBmb3Igc3VwcGx5CisgKgorICogQWxsb3dzIHBsYXRmb3JtIGluaXRpYWxpc2F0aW9uIGNvZGUgdG8gbWFwIHBoeXNpY2FsIHJlZ3VsYXRvcgorICogc291cmNlcyB0byBzeW1ib2xpYyBuYW1lcyBmb3Igc3VwcGxpZXMgZm9yIHVzZSBieSBkZXZpY2VzLiAgRGV2aWNlcworICogc2hvdWxkIHVzZSB0aGVzZSBzeW1ib2xpYyBuYW1lcyB0byByZXF1ZXN0IHJlZ3VsYXRvcnMsIGF2b2lkaW5nIHRoZQorICogbmVlZCB0byBwcm92aWRlIGJvYXJkLXNwZWNpZmljIHJlZ3VsYXRvciBuYW1lcyBhcyBwbGF0Zm9ybSBkYXRhLgorICovCitzdGF0aWMgaW50IHNldF9jb25zdW1lcl9kZXZpY2Vfc3VwcGx5KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCXN0cnVjdCBkZXZpY2UgKmNvbnN1bWVyX2RldiwgY29uc3QgY2hhciAqc3VwcGx5KQoreworCXN0cnVjdCByZWd1bGF0b3JfbWFwICpub2RlOworCisJaWYgKHN1cHBseSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yX21hcCksIEdGUF9LRVJORUwpOworCWlmIChub2RlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbm9kZS0+cmVndWxhdG9yID0gcmRldjsKKwlub2RlLT5kZXYgPSBjb25zdW1lcl9kZXY7CisJbm9kZS0+c3VwcGx5ID0gc3VwcGx5OworCisJbGlzdF9hZGQoJm5vZGUtPmxpc3QsICZyZWd1bGF0b3JfbWFwX2xpc3QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1bnNldF9jb25zdW1lcl9kZXZpY2Vfc3VwcGx5KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCXN0cnVjdCBkZXZpY2UgKmNvbnN1bWVyX2RldikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yX21hcCAqbm9kZSwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbiwgJnJlZ3VsYXRvcl9tYXBfbGlzdCwgbGlzdCkgeworCQlpZiAocmRldiA9PSBub2RlLT5yZWd1bGF0b3IgJiYKKwkJCWNvbnN1bWVyX2RldiA9PSBub2RlLT5kZXYpIHsKKwkJCWxpc3RfZGVsKCZub2RlLT5saXN0KTsKKwkJCWtmcmVlKG5vZGUpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCiAjZGVmaW5lIFJFR19TVFJfU0laRQkzMgogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqY3JlYXRlX3JlZ3VsYXRvcihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKQEAgLTc0Niw3ICs5MTIsNiBAQAogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OwogCXN0cnVjdCByZWd1bGF0b3JfbWFwICptYXA7CiAJc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yID0gRVJSX1BUUigtRU5PREVWKTsKLQljb25zdCBjaGFyICpzdXBwbHkgPSBpZDsKIAogCWlmIChpZCA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicmVndWxhdG9yOiBnZXQoKSB3aXRoIG5vIGlkZW50aWZpZXJcbiIpOwpAQCAtNzU4LDE1ICs5MjMsOSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkobWFwLCAmcmVndWxhdG9yX21hcF9saXN0LCBsaXN0KSB7CiAJCWlmIChkZXYgPT0gbWFwLT5kZXYgJiYKIAkJICAgIHN0cmNtcChtYXAtPnN1cHBseSwgaWQpID09IDApIHsKLQkJCXN1cHBseSA9IG1hcC0+cmVndWxhdG9yOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZyZWd1bGF0b3JfbGlzdCwgbGlzdCkgewotCQlpZiAoc3RyY21wKHN1cHBseSwgcmRldi0+ZGVzYy0+bmFtZSkgPT0gMCAmJgotCQkgICAgdHJ5X21vZHVsZV9nZXQocmRldi0+b3duZXIpKQorCQkJcmRldiA9IG1hcC0+cmVndWxhdG9yOwogCQkJZ290byBmb3VuZDsKKwkJfQogCX0KIAlwcmludGsoS0VSTl9FUlIgInJlZ3VsYXRvcjogVW5hYmxlIHRvIGdldCByZXF1ZXN0ZWQgcmVndWxhdG9yOiAlc1xuIiwKIAkgICAgICAgaWQpOwpAQCAtNzc0LDEyICs5MzMsMTYgQEAKIAlyZXR1cm4gcmVndWxhdG9yOwogCiBmb3VuZDoKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHJkZXYtPm93bmVyKSkKKwkJZ290byBvdXQ7CisKIAlyZWd1bGF0b3IgPSBjcmVhdGVfcmVndWxhdG9yKHJkZXYsIGRldiwgaWQpOwogCWlmIChyZWd1bGF0b3IgPT0gTlVMTCkgewogCQlyZWd1bGF0b3IgPSBFUlJfUFRSKC1FTk9NRU0pOwogCQltb2R1bGVfcHV0KHJkZXYtPm93bmVyKTsKIAl9CiAKK291dDoKIAltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKIAlyZXR1cm4gcmVndWxhdG9yOwogfQpAQCAtMTU1OSwxMSArMTcyMiwxMiBAQAogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCiAgKi8KIHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZWd1bGF0b3JfcmVnaXN0ZXIoc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpyZWd1bGF0b3JfZGVzYywKLQkJCQkJICB2b2lkICpyZWdfZGF0YSkKKwlzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRyaXZlcl9kYXRhKQogewogCXN0YXRpYyBhdG9taWNfdCByZWd1bGF0b3Jfbm8gPSBBVE9NSUNfSU5JVCgwKTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKLQlpbnQgcmV0OworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaW50IHJldCwgaTsKIAogCWlmIChyZWd1bGF0b3JfZGVzYyA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTE1NzUsNiArMTczOSw5IEBACiAJICAgICFyZWd1bGF0b3JfZGVzYy0+dHlwZSA9PSBSRUdVTEFUT1JfQ1VSUkVOVCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKKwlpZiAoIWluaXRfZGF0YSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKIAlyZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcl9kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAocmRldiA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTE1ODIsNyArMTc0OSw3IEBACiAJbXV0ZXhfbG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwogCiAJbXV0ZXhfaW5pdCgmcmRldi0+bXV0ZXgpOwotCXJkZXYtPnJlZ19kYXRhID0gcmVnX2RhdGE7CisJcmRldi0+cmVnX2RhdGEgPSBkcml2ZXJfZGF0YTsKIAlyZGV2LT5vd25lciA9IHJlZ3VsYXRvcl9kZXNjLT5vd25lcjsKIAlyZGV2LT5kZXNjID0gcmVndWxhdG9yX2Rlc2M7CiAJSU5JVF9MSVNUX0hFQUQoJnJkZXYtPmNvbnN1bWVyX2xpc3QpOwpAQCAtMTU5MSwyMCArMTc1OCw2OCBAQAogCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5zbGlzdCk7CiAJQkxPQ0tJTkdfSU5JVF9OT1RJRklFUl9IRUFEKCZyZGV2LT5ub3RpZmllcik7CiAKLQlyZGV2LT5kZXYuY2xhc3MgPSAmcmVndWxhdG9yX2NsYXNzOwotCWRldmljZV9pbml0aWFsaXplKCZyZGV2LT5kZXYpOwotCXNucHJpbnRmKHJkZXYtPmRldi5idXNfaWQsIHNpemVvZihyZGV2LT5kZXYuYnVzX2lkKSwKLQkJICJyZWd1bGF0b3JfJWxkXyVzIiwKLQkJICh1bnNpZ25lZCBsb25nKWF0b21pY19pbmNfcmV0dXJuKCZyZWd1bGF0b3Jfbm8pIC0gMSwKLQkJIHJlZ3VsYXRvcl9kZXNjLT5uYW1lKTsKKwkvKiBwcmVmb3JtIGFueSByZWd1bGF0b3Igc3BlY2lmaWMgaW5pdCAqLworCWlmIChpbml0X2RhdGEtPnJlZ3VsYXRvcl9pbml0KSB7CisJCXJldCA9IGluaXRfZGF0YS0+cmVndWxhdG9yX2luaXQocmRldi0+cmVnX2RhdGEpOworCQlpZiAocmV0IDwgMCkgeworCQkJa2ZyZWUocmRldik7CisJCQlyZGV2ID0gRVJSX1BUUihyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CiAKLQlyZXQgPSBkZXZpY2VfYWRkKCZyZGV2LT5kZXYpOwotCWlmIChyZXQgPT0gMCkKLQkJbGlzdF9hZGQoJnJkZXYtPmxpc3QsICZyZWd1bGF0b3JfbGlzdCk7Ci0JZWxzZSB7CisJLyogc2V0IHJlZ3VsYXRvciBjb25zdHJhaW50cyAqLworCXJldCA9IHNldF9tYWNoaW5lX2NvbnN0cmFpbnRzKHJkZXYsICZpbml0X2RhdGEtPmNvbnN0cmFpbnRzKTsKKwlpZiAocmV0IDwgMCkgewogCQlrZnJlZShyZGV2KTsKIAkJcmRldiA9IEVSUl9QVFIocmV0KTsKKwkJZ290byBvdXQ7CiAJfQorCisJLyogcmVnaXN0ZXIgd2l0aCBzeXNmcyAqLworCXJkZXYtPmRldi5jbGFzcyA9ICZyZWd1bGF0b3JfY2xhc3M7CisJcmRldi0+ZGV2LnBhcmVudCA9IGRldjsKKwlzbnByaW50ZihyZGV2LT5kZXYuYnVzX2lkLCBzaXplb2YocmRldi0+ZGV2LmJ1c19pZCksCisJCSAicmVndWxhdG9yLiVkIiwgYXRvbWljX2luY19yZXR1cm4oJnJlZ3VsYXRvcl9ubykgLSAxKTsKKwlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJnJkZXYtPmRldik7CisJaWYgKHJldCAhPSAwKSB7CisJCWtmcmVlKHJkZXYpOworCQlyZGV2ID0gRVJSX1BUUihyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoJnJkZXYtPmRldiwgcmRldik7CisKKwkvKiBzZXQgc3VwcGx5IHJlZ3VsYXRvciBpZiBpdCBleGlzdHMgKi8KKwlpZiAoaW5pdF9kYXRhLT5zdXBwbHlfcmVndWxhdG9yX2RldikgeworCQlyZXQgPSBzZXRfc3VwcGx5KHJkZXYsCisJCQlkZXZfZ2V0X2RydmRhdGEoaW5pdF9kYXRhLT5zdXBwbHlfcmVndWxhdG9yX2RldikpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2aWNlX3VucmVnaXN0ZXIoJnJkZXYtPmRldik7CisJCQlrZnJlZShyZGV2KTsKKwkJCXJkZXYgPSBFUlJfUFRSKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIGFkZCBjb25zdW1lcnMgZGV2aWNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBpbml0X2RhdGEtPm51bV9jb25zdW1lcl9zdXBwbGllczsgaSsrKSB7CisJCXJldCA9IHNldF9jb25zdW1lcl9kZXZpY2Vfc3VwcGx5KHJkZXYsCisJCQlpbml0X2RhdGEtPmNvbnN1bWVyX3N1cHBsaWVzW2ldLmRldiwKKwkJCWluaXRfZGF0YS0+Y29uc3VtZXJfc3VwcGxpZXNbaV0uc3VwcGx5KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWZvciAoLS1pOyBpID49IDA7IGktLSkKKwkJCQl1bnNldF9jb25zdW1lcl9kZXZpY2Vfc3VwcGx5KHJkZXYsCisJCQkJCWluaXRfZGF0YS0+Y29uc3VtZXJfc3VwcGxpZXNbaV0uZGV2KTsKKwkJCWRldmljZV91bnJlZ2lzdGVyKCZyZGV2LT5kZXYpOworCQkJa2ZyZWUocmRldik7CisJCQlyZGV2ID0gRVJSX1BUUihyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlsaXN0X2FkZCgmcmRldi0+bGlzdCwgJnJlZ3VsYXRvcl9saXN0KTsKK291dDoKIAltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKIAlyZXR1cm4gcmRldjsKIH0KQEAgLTE2MzEsMTg3ICsxODQ2LDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl91bnJlZ2lzdGVyKTsKIAogLyoqCi0gKiByZWd1bGF0b3Jfc2V0X3N1cHBseSAtIHNldCByZWd1bGF0b3Igc3VwcGx5IHJlZ3VsYXRvcgotICogQHJlZ3VsYXRvcjogcmVndWxhdG9yIG5hbWUKLSAqIEBzdXBwbHk6IHN1cHBseSByZWd1bGF0b3IgbmFtZQotICoKLSAqIENhbGxlZCBieSBwbGF0Zm9ybSBpbml0aWFsaXNhdGlvbiBjb2RlIHRvIHNldCB0aGUgc3VwcGx5IHJlZ3VsYXRvciBmb3IgdGhpcwotICogcmVndWxhdG9yLiBUaGlzIGVuc3VyZXMgdGhhdCBhIHJlZ3VsYXRvcnMgc3VwcGx5IHdpbGwgYWxzbyBiZSBlbmFibGVkIGJ5IHRoZQotICogY29yZSBpZiBpdCdzIGNoaWxkIGlzIGVuYWJsZWQuCi0gKi8KLWludCByZWd1bGF0b3Jfc2V0X3N1cHBseShjb25zdCBjaGFyICpyZWd1bGF0b3IsIGNvbnN0IGNoYXIgKnN1cHBseSkKLXsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgKnN1cHBseV9yZGV2OwotCWludCBlcnI7Ci0KLQlpZiAocmVndWxhdG9yID09IE5VTEwgfHwgc3VwcGx5ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbXV0ZXhfbG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmcmVndWxhdG9yX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFzdHJjbXAocmRldi0+ZGVzYy0+bmFtZSwgcmVndWxhdG9yKSkKLQkJCWdvdG8gZm91bmRfcmVndWxhdG9yOwotCX0KLQltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKLQlyZXR1cm4gLUVOT0RFVjsKLQotZm91bmRfcmVndWxhdG9yOgotCWxpc3RfZm9yX2VhY2hfZW50cnkoc3VwcGx5X3JkZXYsICZyZWd1bGF0b3JfbGlzdCwgbGlzdCkgewotCQlpZiAoIXN0cmNtcChzdXBwbHlfcmRldi0+ZGVzYy0+bmFtZSwgc3VwcGx5KSkKLQkJCWdvdG8gZm91bmRfc3VwcGx5OwotCX0KLQltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKLQlyZXR1cm4gLUVOT0RFVjsKLQotZm91bmRfc3VwcGx5OgotCWVyciA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZyZGV2LT5kZXYua29iaiwgJnN1cHBseV9yZGV2LT5kZXYua29iaiwKLQkJCQkic3VwcGx5Iik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICIlczogY291bGQgbm90IGFkZCBkZXZpY2UgbGluayAlcyBlcnIgJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgc3VwcGx5X3JkZXYtPmRldi5rb2JqLm5hbWUsIGVycik7Ci0JCSAgICAgICBnb3RvIG91dDsKLQl9Ci0JcmRldi0+c3VwcGx5ID0gc3VwcGx5X3JkZXY7Ci0JbGlzdF9hZGQoJnJkZXYtPnNsaXN0LCAmc3VwcGx5X3JkZXYtPnN1cHBseV9saXN0KTsKLW91dDoKLQltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX3NldF9zdXBwbHkpOwotCi0vKioKLSAqIHJlZ3VsYXRvcl9nZXRfc3VwcGx5IC0gZ2V0IHJlZ3VsYXRvciBzdXBwbHkgcmVndWxhdG9yCi0gKiBAcmVndWxhdG9yOiByZWd1bGF0b3IgbmFtZQotICoKLSAqIFJldHVybnMgdGhlIHN1cHBseSBzdXBwbHkgcmVndWxhdG9yIG5hbWUgb3IgTlVMTCBpZiBubyBzdXBwbHkgcmVndWxhdG9yCi0gKiBleGlzdHMgKGkuZSB0aGUgcmVndWxhdG9yIGlzIHN1cHBsaWVkIGRpcmVjdGx5IGZyb20gVVNCLCBMaW5lLCBCYXR0ZXJ5LCBldGMpCi0gKi8KLWNvbnN0IGNoYXIgKnJlZ3VsYXRvcl9nZXRfc3VwcGx5KGNvbnN0IGNoYXIgKnJlZ3VsYXRvcikKLXsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKLQotCWlmIChyZWd1bGF0b3IgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQltdXRleF9sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmcmVndWxhdG9yX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFzdHJjbXAocmRldi0+ZGVzYy0+bmFtZSwgcmVndWxhdG9yKSkKLQkJCWdvdG8gZm91bmQ7Ci0JfQotCW11dGV4X3VubG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwotCXJldHVybiBOVUxMOwotCi1mb3VuZDoKLQltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKLQlpZiAocmRldi0+c3VwcGx5KQotCQlyZXR1cm4gcmRldi0+c3VwcGx5LT5kZXNjLT5uYW1lOwotCWVsc2UKLQkJcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3JfZ2V0X3N1cHBseSk7Ci0KLS8qKgotICogcmVndWxhdG9yX3NldF9tYWNoaW5lX2NvbnN0cmFpbnRzIC0gc2V0cyByZWd1bGF0b3IgY29uc3RyYWludHMKLSAqIEByZWd1bGF0b3I6IHJlZ3VsYXRvciBzb3VyY2UKLSAqCi0gKiBBbGxvd3MgcGxhdGZvcm0gaW5pdGlhbGlzYXRpb24gY29kZSB0byBkZWZpbmUgYW5kIGNvbnN0cmFpbgotICogcmVndWxhdG9yIGNpcmN1aXRzIGUuZy4gdmFsaWQgdm9sdGFnZS9jdXJyZW50IHJhbmdlcywgZXRjLiAgTk9URToKLSAqIENvbnN0cmFpbnRzICptdXN0KiBiZSBzZXQgYnkgcGxhdGZvcm0gY29kZSBpbiBvcmRlciBmb3Igc29tZQotICogcmVndWxhdG9yIG9wZXJhdGlvbnMgdG8gcHJvY2VlZCBpLmUuIHNldF92b2x0YWdlLCBzZXRfY3VycmVudF9saW1pdCwKLSAqIHNldF9tb2RlLgotICovCi1pbnQgcmVndWxhdG9yX3NldF9tYWNoaW5lX2NvbnN0cmFpbnRzKGNvbnN0IGNoYXIgKnJlZ3VsYXRvcl9uYW1lLAotCXN0cnVjdCByZWd1bGF0aW9uX2NvbnN0cmFpbnRzICpjb25zdHJhaW50cykKLXsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChyZWd1bGF0b3JfbmFtZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJnJlZ3VsYXRvcl9saXN0LCBsaXN0KSB7Ci0JCWlmICghc3RyY21wKHJlZ3VsYXRvcl9uYW1lLCByZGV2LT5kZXNjLT5uYW1lKSkKLQkJCWdvdG8gZm91bmQ7Ci0JfQotCXJldCA9IC1FTk9ERVY7Ci0JZ290byBvdXQ7Ci0KLWZvdW5kOgotCW11dGV4X2xvY2soJnJkZXYtPm11dGV4KTsKLQlyZGV2LT5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzOwotCi0JLyogZG8gd2UgbmVlZCB0byBhcHBseSB0aGUgY29uc3RyYWludCB2b2x0YWdlICovCi0JaWYgKHJkZXYtPmNvbnN0cmFpbnRzLT5hcHBseV91ViAmJgotCQlyZGV2LT5jb25zdHJhaW50cy0+bWluX3VWID09IHJkZXYtPmNvbnN0cmFpbnRzLT5tYXhfdVYgJiYKLQkJcmRldi0+ZGVzYy0+b3BzLT5zZXRfdm9sdGFnZSkgewotCQlyZXQgPSByZGV2LT5kZXNjLT5vcHMtPnNldF92b2x0YWdlKHJkZXYsCi0JCQlyZGV2LT5jb25zdHJhaW50cy0+bWluX3VWLCByZGV2LT5jb25zdHJhaW50cy0+bWF4X3VWKTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFwcGx5ICVkdVYiCi0JCQkJCSIgY29uc3RyYWludFxuIiwgX19mdW5jX18sCi0JCQkJCXJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdVYpOwotCQkJCXJkZXYtPmNvbnN0cmFpbnRzID0gTlVMTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQl9Ci0KLQkvKiBhcmUgd2UgZW5hYmxlZCBhdCBib290IHRpbWUgYnkgZmlybXdhcmUgLyBib290bG9hZGVyICovCi0JaWYgKHJkZXYtPmNvbnN0cmFpbnRzLT5ib290X29uKQotCQlyZGV2LT51c2VfY291bnQgPSAxOwotCi0JLyogZG8gd2UgbmVlZCB0byBzZXR1cCBvdXIgc3VzcGVuZCBzdGF0ZSAqLwotCWlmIChjb25zdHJhaW50cy0+aW5pdGlhbF9zdGF0ZSkKLQkJcmV0ID0gc3VzcGVuZF9wcmVwYXJlKHJkZXYsIGNvbnN0cmFpbnRzLT5pbml0aWFsX3N0YXRlKTsKLQotCXByaW50X2NvbnN0cmFpbnRzKHJkZXYpOwotCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9zZXRfbWFjaGluZV9jb25zdHJhaW50cyk7Ci0KLQotLyoqCi0gKiByZWd1bGF0b3Jfc2V0X2RldmljZV9zdXBwbHk6IEJpbmQgYSByZWd1bGF0b3IgdG8gYSBzeW1ib2xpYyBzdXBwbHkKLSAqIEByZWd1bGF0b3I6IHJlZ3VsYXRvciBzb3VyY2UKLSAqIEBkZXY6ICAgICAgIGRldmljZSB0aGUgc3VwcGx5IGFwcGxpZXMgdG8KLSAqIEBzdXBwbHk6ICAgIHN5bWJvbGljIG5hbWUgZm9yIHN1cHBseQotICoKLSAqIEFsbG93cyBwbGF0Zm9ybSBpbml0aWFsaXNhdGlvbiBjb2RlIHRvIG1hcCBwaHlzaWNhbCByZWd1bGF0b3IKLSAqIHNvdXJjZXMgdG8gc3ltYm9saWMgbmFtZXMgZm9yIHN1cHBsaWVzIGZvciB1c2UgYnkgZGV2aWNlcy4gIERldmljZXMKLSAqIHNob3VsZCB1c2UgdGhlc2Ugc3ltYm9saWMgbmFtZXMgdG8gcmVxdWVzdCByZWd1bGF0b3JzLCBhdm9pZGluZyB0aGUKLSAqIG5lZWQgdG8gcHJvdmlkZSBib2FyZC1zcGVjaWZpYyByZWd1bGF0b3IgbmFtZXMgYXMgcGxhdGZvcm0gZGF0YS4KLSAqLwotaW50IHJlZ3VsYXRvcl9zZXRfZGV2aWNlX3N1cHBseShjb25zdCBjaGFyICpyZWd1bGF0b3IsIHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQljb25zdCBjaGFyICpzdXBwbHkpCi17Ci0Jc3RydWN0IHJlZ3VsYXRvcl9tYXAgKm5vZGU7Ci0KLQlpZiAocmVndWxhdG9yID09IE5VTEwgfHwgc3VwcGx5ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3JfbWFwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG5vZGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlub2RlLT5yZWd1bGF0b3IgPSByZWd1bGF0b3I7Ci0Jbm9kZS0+ZGV2ID0gZGV2OwotCW5vZGUtPnN1cHBseSA9IHN1cHBseTsKLQotCW11dGV4X2xvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKLQlsaXN0X2FkZCgmbm9kZS0+bGlzdCwgJnJlZ3VsYXRvcl9tYXBfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3Jfc2V0X2RldmljZV9zdXBwbHkpOwotCi0vKioKICAqIHJlZ3VsYXRvcl9zdXNwZW5kX3ByZXBhcmU6IHByZXBhcmUgcmVndWxhdG9ycyBmb3Igc3lzdGVtIHdpZGUgc3VzcGVuZAogICogQHN0YXRlOiBzeXN0ZW0gc3VzcGVuZCBzdGF0ZQogICoKQEAgLTE4OTMsNiArMTkyNywxOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmRldl9nZXRfaWQpOwogCitzdHJ1Y3QgZGV2aWNlICpyZGV2X2dldF9kZXYoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJcmV0dXJuICZyZGV2LT5kZXY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZGV2X2dldF9kZXYpOworCit2b2lkICpyZWd1bGF0b3JfZ2V0X2luaXRfZHJ2ZGF0YShzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqcmVnX2luaXRfZGF0YSkKK3sKKwlyZXR1cm4gcmVnX2luaXRfZGF0YS0+ZHJpdmVyX2RhdGE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3JfZ2V0X2luaXRfZHJ2ZGF0YSk7CisKIHN0YXRpYyBpbnQgX19pbml0IHJlZ3VsYXRvcl9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAicmVndWxhdG9yOiBjb3JlIHZlcnNpb24gJXNcbiIsIFJFR1VMQVRPUl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDN4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY4OGUzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCkBAIC0wLDAgKzEsNTEzIEBACisvKgorICogUmVndWxhdG9ycyBkcml2ZXIgZm9yIERpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzeAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29tcHVsYWIgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGE5MDN4Lmg+CisKKy8qIERBOTAzMCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgREE5MDMwX0lOVkFMCQkoLTEpCisjZGVmaW5lIERBOTAzMF9MRE8xMDExCQkoMHgxMCkKKyNkZWZpbmUgREE5MDMwX0xETzE1CQkoMHgxMSkKKyNkZWZpbmUgREE5MDMwX0xETzE0MTYJCSgweDEyKQorI2RlZmluZSBEQTkwMzBfTERPMTgxOQkJKDB4MTMpCisjZGVmaW5lIERBOTAzMF9MRE8xNwkJKDB4MTQpCisjZGVmaW5lIERBOTAzMF9CVUNLMkRWTTEJKDB4MTUpCisjZGVmaW5lIERBOTAzMF9CVUNLMkRWTTIJKDB4MTYpCisjZGVmaW5lIERBOTAzMF9SQ1RMMTEJCSgweDE3KQorI2RlZmluZSBEQTkwMzBfUkNUTDIxCQkoMHgxOCkKKyNkZWZpbmUgREE5MDMwX0xETzEJCSgweDkwKQorI2RlZmluZSBEQTkwMzBfTERPMjMJCSgweDkxKQorI2RlZmluZSBEQTkwMzBfTERPNDUJCSgweDkyKQorI2RlZmluZSBEQTkwMzBfTERPNgkJKDB4OTMpCisjZGVmaW5lIERBOTAzMF9MRE83OAkJKDB4OTQpCisjZGVmaW5lIERBOTAzMF9MRE85MTIJCSgweDk1KQorI2RlZmluZSBEQTkwMzBfQlVDSwkJKDB4OTYpCisjZGVmaW5lIERBOTAzMF9SQ1RMMTIJCSgweDk3KQorI2RlZmluZSBEQTkwMzBfUkNUTDIyCQkoMHg5OCkKKyNkZWZpbmUgREE5MDMwX0xET19VTkxPQ0sJKDB4YTApCisjZGVmaW5lIERBOTAzMF9MRE9fVU5MT0NLX01BU0sJKDB4ZTApCisjZGVmaW5lIERBOTAzNF9PVkVSMQkJKDB4MTApCisKKy8qIERBOTAzNCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgREE5MDM0X0lOVkFMCQkoLTEpCisjZGVmaW5lIERBOTAzNF9PVkVSMgkJKDB4MTEpCisjZGVmaW5lIERBOTAzNF9PVkVSMwkJKDB4MTIpCisjZGVmaW5lIERBOTAzNF9MRE82NDMJCSgweDEzKQorI2RlZmluZSBEQTkwMzRfTERPOTg3CQkoMHgxNCkKKyNkZWZpbmUgREE5MDM0X0xETzExMTAJCSgweDE1KQorI2RlZmluZSBEQTkwMzRfTERPMTMxMgkJKDB4MTYpCisjZGVmaW5lIERBOTAzNF9MRE8xNTE0CQkoMHgxNykKKyNkZWZpbmUgREE5MDM0X1ZDQzEJCSgweDIwKQorI2RlZmluZSBEQTkwMzRfQURUVjEJCSgweDIzKQorI2RlZmluZSBEQTkwMzRfQURUVjIJCSgweDI0KQorI2RlZmluZSBEQTkwMzRfQVZSQwkJKDB4MjUpCisjZGVmaW5lIERBOTAzNF9DRFRWMQkJKDB4MjYpCisjZGVmaW5lIERBOTAzNF9DRFRWMgkJKDB4MjcpCisjZGVmaW5lIERBOTAzNF9DVlJDCQkoMHgyOCkKKyNkZWZpbmUgREE5MDM0X1NEVFYxCQkoMHgyOSkKKyNkZWZpbmUgREE5MDM0X1NEVFYyCQkoMHgyYSkKKyNkZWZpbmUgREE5MDM0X1NWUkMJCSgweDJiKQorI2RlZmluZSBEQTkwMzRfTURUVjEJCSgweDMyKQorI2RlZmluZSBEQTkwMzRfTURUVjIJCSgweDMzKQorI2RlZmluZSBEQTkwMzRfTVZSQwkJKDB4MzQpCisKK3N0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8geworCXN0cnVjdCByZWd1bGF0b3JfZGVzYyBkZXNjOworCisJaW50CW1pbl91VjsKKwlpbnQJbWF4X3VWOworCWludAlzdGVwX3VWOworCWludAl2b2xfcmVnOworCWludAl2b2xfc2hpZnQ7CisJaW50CXZvbF9uYml0czsKKwlpbnQJdXBkYXRlX3JlZzsKKwlpbnQJdXBkYXRlX2JpdDsKKwlpbnQJZW5hYmxlX3JlZzsKKwlpbnQJZW5hYmxlX2JpdDsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3JhbmdlKHN0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8gKmluZm8sCisJCQkJaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlpZiAobWluX3VWIDwgaW5mby0+bWluX3VWIHx8IG1pbl91ViA+IGluZm8tPm1heF91VikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyogREE5MDMwL0RBOTAzNCBjb21tb24gb3BlcmF0aW9ucyAqLworc3RhdGljIGludCBkYTkwM3hfc2V0X2xkb192b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCSAgaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlzdHJ1Y3QgZGE5MDN4X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkYTkwMzRfZGV2ID0gcmRldl9nZXRfZGV2KHJkZXYpLT5wYXJlbnQ7CisJdWludDhfdCB2YWwsIG1hc2s7CisKKwlpZiAoY2hlY2tfcmFuZ2UoaW5mbywgbWluX3VWLCBtYXhfdVYpKSB7CisJCXByX2VycigiaW52YWxpZCB2b2x0YWdlIHJhbmdlICglZCwgJWQpIHVWIiwgbWluX3VWLCBtYXhfdVYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2YWwgPSAobWluX3VWIC0gaW5mby0+bWluX3VWICsgaW5mby0+c3RlcF91ViAtIDEpIC8gaW5mby0+c3RlcF91VjsKKwl2YWwgPDw9IGluZm8tPnZvbF9zaGlmdDsKKwltYXNrID0gKCgxIDw8IGluZm8tPnZvbF9uYml0cykgLSAxKSAgPDwgaW5mby0+dm9sX3NoaWZ0OworCisJcmV0dXJuIGRhOTAzeF91cGRhdGUoZGE5MDM0X2RldiwgaW5mby0+dm9sX3JlZywgdmFsLCBtYXNrKTsKK30KKworc3RhdGljIGludCBkYTkwM3hfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IGRldmljZSAqZGE5MDM0X2RldiA9IHJkZXZfZ2V0X2RldihyZGV2KS0+cGFyZW50OworCXVpbnQ4X3QgdmFsLCBtYXNrOworCWludCByZXQ7CisKKwlyZXQgPSBkYTkwM3hfcmVhZChkYTkwMzRfZGV2LCBpbmZvLT52b2xfcmVnLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbWFzayA9ICgoMSA8PCBpbmZvLT52b2xfbmJpdHMpIC0gMSkgIDw8IGluZm8tPnZvbF9zaGlmdDsKKwl2YWwgPSAodmFsICYgbWFzaykgPj4gaW5mby0+dm9sX3NoaWZ0OworCisJcmV0dXJuIGluZm8tPm1pbl91ViArIGluZm8tPnN0ZXBfdVYgKiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDN4X2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgZGE5MDN4X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkYTkwMzRfZGV2ID0gcmRldl9nZXRfZGV2KHJkZXYpLT5wYXJlbnQ7CisKKwlyZXR1cm4gZGE5MDN4X3NldF9iaXRzKGRhOTAzNF9kZXYsIGluZm8tPmVuYWJsZV9yZWcsCisJCQkJCTEgPDwgaW5mby0+ZW5hYmxlX2JpdCk7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDN4X2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IGRldmljZSAqZGE5MDM0X2RldiA9IHJkZXZfZ2V0X2RldihyZGV2KS0+cGFyZW50OworCisJcmV0dXJuIGRhOTAzeF9jbHJfYml0cyhkYTkwMzRfZGV2LCBpbmZvLT5lbmFibGVfcmVnLAorCQkJCQkxIDw8IGluZm8tPmVuYWJsZV9iaXQpOworfQorCitzdGF0aWMgaW50IGRhOTAzeF9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRhOTAzNF9kZXYgPSByZGV2X2dldF9kZXYocmRldiktPnBhcmVudDsKKwl1aW50OF90IHJlZ192YWw7CisJaW50IHJldDsKKworCXJldCA9IGRhOTAzeF9yZWFkKGRhOTAzNF9kZXYsIGluZm8tPmVuYWJsZV9yZWcsICZyZWdfdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHJlZ192YWwgJiAoMSA8PCBpbmZvLT5lbmFibGVfYml0KTsKK30KKworLyogREE5MDMwIHNwZWNpZmljIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBpbnQgZGE5MDMwX3NldF9sZG8xXzE1X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IGRldmljZSAqZGE5MDN4X2RldiA9IHJkZXZfZ2V0X2RldihyZGV2KS0+cGFyZW50OworCXVpbnQ4X3QgdmFsLCBtYXNrOworCWludCByZXQ7CisKKwlpZiAoY2hlY2tfcmFuZ2UoaW5mbywgbWluX3VWLCBtYXhfdVYpKSB7CisJCXByX2VycigiaW52YWxpZCB2b2x0YWdlIHJhbmdlICglZCwgJWQpIHVWIiwgbWluX3VWLCBtYXhfdVYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2YWwgPSAobWluX3VWIC0gaW5mby0+bWluX3VWICsgaW5mby0+c3RlcF91ViAtIDEpIC8gaW5mby0+c3RlcF91VjsKKwl2YWwgPDw9IGluZm8tPnZvbF9zaGlmdDsKKwltYXNrID0gKCgxIDw8IGluZm8tPnZvbF9uYml0cykgLSAxKSAgPDwgaW5mby0+dm9sX3NoaWZ0OworCXZhbCB8PSBEQTkwMzBfTERPX1VOTE9DSzsgLyogaGF2ZSB0byBzZXQgVU5MT0NLIGJpdHMgKi8KKwltYXNrIHw9IERBOTAzMF9MRE9fVU5MT0NLX01BU0s7CisKKwkvKiB3cml0ZSB0d2ljZSAqLworCXJldCA9IGRhOTAzeF91cGRhdGUoZGE5MDN4X2RldiwgaW5mby0+dm9sX3JlZywgdmFsLCBtYXNrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGRhOTAzeF91cGRhdGUoZGE5MDN4X2RldiwgaW5mby0+dm9sX3JlZywgdmFsLCBtYXNrKTsKK30KKworc3RhdGljIGludCBkYTkwMzBfc2V0X2xkbzE0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRhOTAzeF9kZXYgPSByZGV2X2dldF9kZXYocmRldiktPnBhcmVudDsKKwl1aW50OF90IHZhbCwgbWFzazsKKwlpbnQgdGhyZXNoOworCisJaWYgKGNoZWNrX3JhbmdlKGluZm8sIG1pbl91ViwgbWF4X3VWKSkgeworCQlwcl9lcnIoImludmFsaWQgdm9sdGFnZSByYW5nZSAoJWQsICVkKSB1ViIsIG1pbl91ViwgbWF4X3VWKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdGhyZXNoID0gKGluZm8tPm1heF91ViArIGluZm8tPm1pbl91VikgLyAyOworCWlmIChtaW5fdVYgPCB0aHJlc2gpIHsKKwkJdmFsID0gKHRocmVzaCAtIG1pbl91ViArIGluZm8tPnN0ZXBfdVYgLSAxKSAvIGluZm8tPnN0ZXBfdVY7CisJCXZhbCB8PSAweDQ7CisJfSBlbHNlIHsKKwkJdmFsID0gKG1pbl91ViAtIHRocmVzaCArIGluZm8tPnN0ZXBfdVYgLSAxKSAvIGluZm8tPnN0ZXBfdVY7CisJfQorCisJdmFsIDw8PSBpbmZvLT52b2xfc2hpZnQ7CisJbWFzayA9ICgoMSA8PCBpbmZvLT52b2xfbmJpdHMpIC0gMSkgIDw8IGluZm8tPnZvbF9zaGlmdDsKKworCXJldHVybiBkYTkwM3hfdXBkYXRlKGRhOTAzeF9kZXYsIGluZm8tPnZvbF9yZWcsIHZhbCwgbWFzayk7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDMwX2dldF9sZG8xNF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRhOTAzeF9kZXYgPSByZGV2X2dldF9kZXYocmRldiktPnBhcmVudDsKKwl1aW50OF90IHZhbCwgbWFzazsKKwlpbnQgcmV0OworCisJcmV0ID0gZGE5MDN4X3JlYWQoZGE5MDN4X2RldiwgaW5mby0+dm9sX3JlZywgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1hc2sgPSAoKDEgPDwgaW5mby0+dm9sX25iaXRzKSAtIDEpICA8PCBpbmZvLT52b2xfc2hpZnQ7CisJdmFsID0gKHZhbCAmIG1hc2spID4+IGluZm8tPnZvbF9zaGlmdDsKKworCWlmICh2YWwgJiAweDQpCisJCXJldHVybiBpbmZvLT5taW5fdVYgKyBpbmZvLT5zdGVwX3VWICogKDMgLSAodmFsICYgfjB4NCkpOworCWVsc2UKKwkJcmV0dXJuIChpbmZvLT5tYXhfdVYgKyBpbmZvLT5taW5fdVYpIC8gMiArCisJCQlpbmZvLT5zdGVwX3VWICogKHZhbCAmIH4weDQpOworfQorCisvKiBEQTkwMzQgc3BlY2lmaWMgb3BlcmF0aW9ucyAqLworc3RhdGljIGludCBkYTkwMzRfc2V0X2R2Y192b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCSAgaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlzdHJ1Y3QgZGE5MDN4X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkYTkwMzRfZGV2ID0gcmRldl9nZXRfZGV2KHJkZXYpLT5wYXJlbnQ7CisJdWludDhfdCB2YWwsIG1hc2s7CisJaW50IHJldDsKKworCWlmIChjaGVja19yYW5nZShpbmZvLCBtaW5fdVYsIG1heF91VikpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHZvbHRhZ2UgcmFuZ2UgKCVkLCAlZCkgdVYiLCBtaW5fdVYsIG1heF91Vik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZhbCA9IChtaW5fdVYgLSBpbmZvLT5taW5fdVYgKyBpbmZvLT5zdGVwX3VWIC0gMSkgLyBpbmZvLT5zdGVwX3VWOworCXZhbCA8PD0gaW5mby0+dm9sX3NoaWZ0OworCW1hc2sgPSAoKDEgPDwgaW5mby0+dm9sX25iaXRzKSAtIDEpICA8PCBpbmZvLT52b2xfc2hpZnQ7CisKKwlyZXQgPSBkYTkwM3hfdXBkYXRlKGRhOTAzNF9kZXYsIGluZm8tPnZvbF9yZWcsIHZhbCwgbWFzayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGRhOTAzeF9zZXRfYml0cyhkYTkwMzRfZGV2LCBpbmZvLT51cGRhdGVfcmVnLAorCQkJCQkxIDw8IGluZm8tPnVwZGF0ZV9iaXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDM0X3NldF9sZG8xMl92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCSAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRhOTAzNF9kZXYgPSByZGV2X2dldF9kZXYocmRldiktPnBhcmVudDsKKwl1aW50OF90IHZhbCwgbWFzazsKKworCWlmIChjaGVja19yYW5nZShpbmZvLCBtaW5fdVYsIG1heF91VikpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHZvbHRhZ2UgcmFuZ2UgKCVkLCAlZCkgdVYiLCBtaW5fdVYsIG1heF91Vik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZhbCA9IChtaW5fdVYgLSBpbmZvLT5taW5fdVYgKyBpbmZvLT5zdGVwX3VWIC0gMSkgLyBpbmZvLT5zdGVwX3VWOworCXZhbCA9ICh2YWwgPiA3IHx8IHZhbCA8IDIwKSA/IDggOiB2YWwgLSAxMjsKKwl2YWwgPDw9IGluZm8tPnZvbF9zaGlmdDsKKwltYXNrID0gKCgxIDw8IGluZm8tPnZvbF9uYml0cykgLSAxKSAgPDwgaW5mby0+dm9sX3NoaWZ0OworCisJcmV0dXJuIGRhOTAzeF91cGRhdGUoZGE5MDM0X2RldiwgaW5mby0+dm9sX3JlZywgdmFsLCBtYXNrKTsKK30KKworc3RhdGljIGludCBkYTkwMzRfZ2V0X2xkbzEyX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IGRldmljZSAqZGE5MDM0X2RldiA9IHJkZXZfZ2V0X2RldihyZGV2KS0+cGFyZW50OworCXVpbnQ4X3QgdmFsLCBtYXNrOworCWludCByZXQ7CisKKwlyZXQgPSBkYTkwM3hfcmVhZChkYTkwMzRfZGV2LCBpbmZvLT52b2xfcmVnLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbWFzayA9ICgoMSA8PCBpbmZvLT52b2xfbmJpdHMpIC0gMSkgIDw8IGluZm8tPnZvbF9zaGlmdDsKKwl2YWwgPSAodmFsICYgbWFzaykgPj4gaW5mby0+dm9sX3NoaWZ0OworCisJaWYgKHZhbCA+PSA4KQorCQlyZXR1cm4gMjcwMDAwMCArIGluZm8tPnN0ZXBfdVYgKiAodmFsIC0gOCk7CisKKwlyZXR1cm4gaW5mby0+bWluX3VWICsgaW5mby0+c3RlcF91ViAqIHZhbDsKK30KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGRhOTAzeF9yZWd1bGF0b3JfbGRvX29wcyA9IHsKKwkuc2V0X3ZvbHRhZ2UJPSBkYTkwM3hfc2V0X2xkb192b2x0YWdlLAorCS5nZXRfdm9sdGFnZQk9IGRhOTAzeF9nZXRfdm9sdGFnZSwKKwkuZW5hYmxlCQk9IGRhOTAzeF9lbmFibGUsCisJLmRpc2FibGUJPSBkYTkwM3hfZGlzYWJsZSwKKwkuaXNfZW5hYmxlZAk9IGRhOTAzeF9pc19lbmFibGVkLAorfTsKKworLyogTk9URTogdGhpcyBpcyBkZWRpY2F0ZWQgZm9yIHRoZSBpbnNhbmUgREE5MDMwIExETzE0ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgZGE5MDMwX3JlZ3VsYXRvcl9sZG8xNF9vcHMgPSB7CisJLnNldF92b2x0YWdlCT0gZGE5MDMwX3NldF9sZG8xNF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZQk9IGRhOTAzMF9nZXRfbGRvMTRfdm9sdGFnZSwKKwkuZW5hYmxlCQk9IGRhOTAzeF9lbmFibGUsCisJLmRpc2FibGUJPSBkYTkwM3hfZGlzYWJsZSwKKwkuaXNfZW5hYmxlZAk9IGRhOTAzeF9pc19lbmFibGVkLAorfTsKKworLyogTk9URTogdGhpcyBpcyBkZWRpY2F0ZWQgZm9yIHRoZSBEQTkwMzAgTERPMSBhbmQgTERPMTUgdGhhdCBoYXZlIGxvY2tzICAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGRhOTAzMF9yZWd1bGF0b3JfbGRvMV8xNV9vcHMgPSB7CisJLnNldF92b2x0YWdlCT0gZGE5MDMwX3NldF9sZG8xXzE1X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlCT0gZGE5MDN4X2dldF92b2x0YWdlLAorCS5lbmFibGUJCT0gZGE5MDN4X2VuYWJsZSwKKwkuZGlzYWJsZQk9IGRhOTAzeF9kaXNhYmxlLAorCS5pc19lbmFibGVkCT0gZGE5MDN4X2lzX2VuYWJsZWQsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgZGE5MDM0X3JlZ3VsYXRvcl9kdmNfb3BzID0geworCS5zZXRfdm9sdGFnZQk9IGRhOTAzNF9zZXRfZHZjX3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlCT0gZGE5MDN4X2dldF92b2x0YWdlLAorCS5lbmFibGUJCT0gZGE5MDN4X2VuYWJsZSwKKwkuZGlzYWJsZQk9IGRhOTAzeF9kaXNhYmxlLAorCS5pc19lbmFibGVkCT0gZGE5MDN4X2lzX2VuYWJsZWQsCit9OworCisvKiBOT1RFOiB0aGlzIGlzIGRlZGljYXRlZCBmb3IgdGhlIGluc2FuZSBMRE8xMiAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGRhOTAzNF9yZWd1bGF0b3JfbGRvMTJfb3BzID0geworCS5zZXRfdm9sdGFnZQk9IGRhOTAzNF9zZXRfbGRvMTJfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2UJPSBkYTkwMzRfZ2V0X2xkbzEyX3ZvbHRhZ2UsCisJLmVuYWJsZQkJPSBkYTkwM3hfZW5hYmxlLAorCS5kaXNhYmxlCT0gZGE5MDN4X2Rpc2FibGUsCisJLmlzX2VuYWJsZWQJPSBkYTkwM3hfaXNfZW5hYmxlZCwKK307CisKKyNkZWZpbmUgREE5MDN4X0xETyhfcG1pYywgX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgc2hpZnQsIG5iaXRzLCBlcmVnLCBlYml0KQlcCit7CQkJCQkJCQkJXAorCS5kZXNjCT0gewkJCQkJCQlcCisJCS5uYW1lCT0gIkxETyIgI19pZCwJCQkJCVwKKwkJLm9wcwk9ICZkYTkwM3hfcmVndWxhdG9yX2xkb19vcHMsCQkJXAorCQkudHlwZQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCisJCS5pZAk9IF9wbWljIyNfSURfTERPIyNfaWQsCQkJCVwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCQkJCQlcCisJfSwJCQkJCQkJCVwKKwkubWluX3VWCQk9IChtaW4pICogMTAwMCwJCQkJCVwKKwkubWF4X3VWCQk9IChtYXgpICogMTAwMCwJCQkJCVwKKwkuc3RlcF91Vgk9IChzdGVwKSAqIDEwMDAsCQkJCVwKKwkudm9sX3JlZwk9IF9wbWljIyNfIyN2cmVnLAkJCQlcCisJLnZvbF9zaGlmdAk9IChzaGlmdCksCQkJCQlcCisJLnZvbF9uYml0cwk9IChuYml0cyksCQkJCQlcCisJLmVuYWJsZV9yZWcJPSBfcG1pYyMjXyMjZXJlZywJCQkJXAorCS5lbmFibGVfYml0CT0gKGViaXQpLAkJCQkJXAorfQorCisjZGVmaW5lIERBOTAzNF9EVkMoX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgbmJpdHMsIHVyZWcsIHViaXQsIGVyZWcsIGViaXQpIFwKK3sJCQkJCQkJCQlcCisJLmRlc2MJPSB7CQkJCQkJCVwKKwkJLm5hbWUJPSAjX2lkLAkJCQkJCVwKKwkJLm9wcwk9ICZkYTkwMzRfcmVndWxhdG9yX2R2Y19vcHMsCQkJXAorCQkudHlwZQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCisJCS5pZAk9IERBOTAzNF9JRF8jI19pZCwJCQkJXAorCQkub3duZXIJPSBUSElTX01PRFVMRSwJCQkJCVwKKwl9LAkJCQkJCQkJXAorCS5taW5fdVYJCT0gKG1pbikgKiAxMDAwLAkJCQkJXAorCS5tYXhfdVYJCT0gKG1heCkgKiAxMDAwLAkJCQkJXAorCS5zdGVwX3VWCT0gKHN0ZXApICogMTAwMCwJCQkJXAorCS52b2xfcmVnCT0gREE5MDM0XyMjdnJlZywJCQkJXAorCS52b2xfc2hpZnQJPSAoMCksCQkJCQkJXAorCS52b2xfbmJpdHMJPSAobmJpdHMpLAkJCQkJXAorCS51cGRhdGVfcmVnCT0gREE5MDM0XyMjdXJlZywJCQkJXAorCS51cGRhdGVfYml0CT0gKHViaXQpLAkJCQkJXAorCS5lbmFibGVfcmVnCT0gREE5MDM0XyMjZXJlZywJCQkJXAorCS5lbmFibGVfYml0CT0gKGViaXQpLAkJCQkJXAorfQorCisjZGVmaW5lIERBOTAzNF9MRE8oX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgc2hpZnQsIG5iaXRzLCBlcmVnLCBlYml0KQlcCisJREE5MDN4X0xETyhEQTkwMzQsIF9pZCwgbWluLCBtYXgsIHN0ZXAsIHZyZWcsIHNoaWZ0LCBuYml0cywgZXJlZywgZWJpdCkKKworI2RlZmluZSBEQTkwMzBfTERPKF9pZCwgbWluLCBtYXgsIHN0ZXAsIHZyZWcsIHNoaWZ0LCBuYml0cywgZXJlZywgZWJpdCkJXAorCURBOTAzeF9MRE8oREE5MDMwLCBfaWQsIG1pbiwgbWF4LCBzdGVwLCB2cmVnLCBzaGlmdCwgbmJpdHMsIGVyZWcsIGViaXQpCisKK3N0YXRpYyBzdHJ1Y3QgZGE5MDN4X3JlZ3VsYXRvcl9pbmZvIGRhOTAzeF9yZWd1bGF0b3JfaW5mb1tdID0geworCS8qIERBOTAzMCAqLworCURBOTAzMF9MRE8oIDEsIDEyMDAsIDMyMDAsIDEwMCwgICAgTERPMSwgMCwgNSwgUkNUTDEyLCAxKSwKKwlEQTkwMzBfTERPKCAyLCAxODAwLCAzMjAwLCAxMDAsICAgTERPMjMsIDAsIDQsIFJDVEwxMiwgMiksCisJREE5MDMwX0xETyggMywgMTgwMCwgMzIwMCwgMTAwLCAgIExETzIzLCA0LCA0LCBSQ1RMMTIsIDMpLAorCURBOTAzMF9MRE8oIDQsIDE4MDAsIDMyMDAsIDEwMCwgICBMRE80NSwgMCwgNCwgUkNUTDEyLCA0KSwKKwlEQTkwMzBfTERPKCA1LCAxODAwLCAzMjAwLCAxMDAsICAgTERPNDUsIDQsIDQsIFJDVEwxMiwgNSksCisJREE5MDMwX0xETyggNiwgMTgwMCwgMzIwMCwgMTAwLCAgICBMRE82LCAwLCA0LCBSQ1RMMTIsIDYpLAorCURBOTAzMF9MRE8oIDcsIDE4MDAsIDMyMDAsIDEwMCwgICBMRE83OCwgMCwgNCwgUkNUTDEyLCA3KSwKKwlEQTkwMzBfTERPKCA4LCAxODAwLCAzMjAwLCAxMDAsICAgTERPNzgsIDQsIDQsIFJDVEwyMiwgMCksCisJREE5MDMwX0xETyggOSwgMTgwMCwgMzIwMCwgMTAwLCAgTERPOTEyLCAwLCA0LCBSQ1RMMjIsIDEpLAorCURBOTAzMF9MRE8oMTAsIDE4MDAsIDMyMDAsIDEwMCwgTERPMTAxMSwgMCwgNCwgUkNUTDIyLCAyKSwKKwlEQTkwMzBfTERPKDExLCAxODAwLCAzMjAwLCAxMDAsIExETzEwMTEsIDQsIDQsIFJDVEwyMiwgMyksCisJREE5MDMwX0xETygxMiwgMTgwMCwgMzIwMCwgMTAwLCAgTERPOTEyLCA0LCA0LCBSQ1RMMjIsIDQpLAorCURBOTAzMF9MRE8oMTQsIDI3NjAsIDI5NDAsICAzMCwgTERPMTQxNiwgMCwgMywgUkNUTDExLCA0KSwKKwlEQTkwMzBfTERPKDE1LCAxMTAwLCAyNjUwLCAgNTAsCSAgTERPMTUsIDAsIDUsIFJDVEwxMSwgNSksCisJREE5MDMwX0xETygxNiwgMTEwMCwgMjY1MCwgIDUwLCBMRE8xNDE2LCAzLCA1LCBSQ1RMMTEsIDYpLAorCURBOTAzMF9MRE8oMTcsIDE4MDAsIDMyMDAsIDEwMCwgICBMRE8xNywgMCwgNCwgUkNUTDExLCA3KSwKKwlEQTkwMzBfTERPKDE4LCAxODAwLCAzMjAwLCAxMDAsIExETzE4MTksIDAsIDQsIFJDVEwyMSwgMiksCisJREE5MDMwX0xETygxOSwgMTgwMCwgMzIwMCwgMTAwLCBMRE8xODE5LCA0LCA0LCBSQ1RMMjEsIDEpLAorCURBOTAzMF9MRE8oMTMsIDIxMDAsIDIxMDAsIDAsIElOVkFMLCAwLCAwLCBSQ1RMMTEsIDMpLCAvKiBmaXhlZCBAMi4xViAqLworCisJLyogREE5MDM0ICovCisJREE5MDM0X0RWQyhCVUNLMSwgNzI1LCAxNTAwLCAyNSwgQURUVjEsIDUsIFZDQzEsIDAsIE9WRVIxLCAwKSwKKwlEQTkwMzRfRFZDKEJVQ0syLCA3MjUsIDE1MDAsIDI1LCBDRFRWMSwgNSwgVkNDMSwgMiwgT1ZFUjEsIDEpLAorCURBOTAzNF9EVkMoTERPMiwgIDcyNSwgMTUwMCwgMjUsIFNEVFYxLCA1LCBWQ0MxLCA0LCBPVkVSMSwgMiksCisJREE5MDM0X0RWQyhMRE8xLCAxNzAwLCAyMDc1LCAyNSwgTURUVjEsIDQsIFZDQzEsIDYsIE9WRVIzLCA0KSwKKworCURBOTAzNF9MRE8oIDMsIDE4MDAsIDMzMDAsIDEwMCwgIExETzY0MywgMCwgNCwgT1ZFUjMsIDUpLAorCURBOTAzNF9MRE8oIDQsIDE4MDAsIDI5MDAsMTEwMCwgIExETzY0MywgNCwgMSwgT1ZFUjMsIDYpLAorCURBOTAzNF9MRE8oIDYsIDI1MDAsIDI4NTAsICA1MCwgIExETzY0MywgNSwgMywgT1ZFUjIsIDApLAorCURBOTAzNF9MRE8oIDcsIDI3MDAsIDMwNTAsICA1MCwgIExETzk4NywgMCwgMywgT1ZFUjIsIDEpLAorCURBOTAzNF9MRE8oIDgsIDI3MDAsIDI4NTAsICA1MCwgIExETzk4NywgMywgMiwgT1ZFUjIsIDIpLAorCURBOTAzNF9MRE8oIDksIDI3MDAsIDMwNTAsICA1MCwgIExETzk4NywgNSwgMywgT1ZFUjIsIDMpLAorCURBOTAzNF9MRE8oMTAsIDI3MDAsIDMwNTAsICA1MCwgTERPMTExMCwgMCwgMywgT1ZFUjIsIDQpLAorCURBOTAzNF9MRE8oMTEsIDE4MDAsIDMzMDAsIDEwMCwgTERPMTExMCwgNCwgNCwgT1ZFUjIsIDUpLAorCURBOTAzNF9MRE8oMTIsIDE3MDAsIDMwNTAsICA1MCwgTERPMTMxMiwgMCwgNCwgT1ZFUjMsIDYpLAorCURBOTAzNF9MRE8oMTMsIDE4MDAsIDMzMDAsIDEwMCwgTERPMTMxMiwgNCwgNCwgT1ZFUjIsIDcpLAorCURBOTAzNF9MRE8oMTQsIDE4MDAsIDMzMDAsIDEwMCwgTERPMTUxNCwgMCwgNCwgT1ZFUjMsIDApLAorCURBOTAzNF9MRE8oMTUsIDE4MDAsIDMzMDAsIDEwMCwgTERPMTUxNCwgNCwgNCwgT1ZFUjMsIDEpLAorCURBOTAzNF9MRE8oNSwgMzEwMCwgMzEwMCwgMCwgSU5WQUwsIDAsIDAsIE9WRVIzLCA3KSwgLyogZml4ZWQgQDMuMVYgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqZmluZF9yZWd1bGF0b3JfaW5mbyhpbnQgaWQpCit7CisJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqcmk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYTkwM3hfcmVndWxhdG9yX2luZm8pOyBpKyspIHsKKwkJcmkgPSAmZGE5MDN4X3JlZ3VsYXRvcl9pbmZvW2ldOworCQlpZiAocmktPmRlc2MuaWQgPT0gaWQpCisJCQlyZXR1cm4gcmk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkYTkwM3hfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqcmkgPSBOVUxMOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OworCisJcmkgPSBmaW5kX3JlZ3VsYXRvcl9pbmZvKHBkZXYtPmlkKTsKKwlpZiAocmkgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIHJlZ3VsYXRvciBJRCBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBXb3JrYXJvdW5kIGZvciB0aGUgd2VpcmQgTERPMTIgdm9sdGFnZSBzZXR0aW5nICovCisJaWYgKHJpLT5kZXNjLmlkID09IERBOTAzNF9JRF9MRE8xMikKKwkJcmktPmRlc2Mub3BzID0gJmRhOTAzNF9yZWd1bGF0b3JfbGRvMTJfb3BzOworCisJaWYgKHJpLT5kZXNjLmlkID09IERBOTAzMF9JRF9MRE8xNCkKKwkJcmktPmRlc2Mub3BzID0gJmRhOTAzMF9yZWd1bGF0b3JfbGRvMTRfb3BzOworCisJaWYgKHJpLT5kZXNjLmlkID09IERBOTAzMF9JRF9MRE8xIHx8IHJpLT5kZXNjLmlkID09IERBOTAzMF9JRF9MRE8xNSkKKwkJcmktPmRlc2Mub3BzID0gJmRhOTAzMF9yZWd1bGF0b3JfbGRvMV8xNV9vcHM7CisKKwlyZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZyaS0+ZGVzYywgcGRldi0+ZGV2LnBhcmVudCwgcmkpOworCWlmIChJU19FUlIocmRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciAlc1xuIiwKKwkJCQlyaS0+ZGVzYy5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIocmRldik7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRhOTAzeF9yZWd1bGF0b3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHJkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkYTkwM3hfcmVndWxhdG9yX2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJkYTkwM3gtcmVndWxhdG9yIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gZGE5MDN4X3JlZ3VsYXRvcl9wcm9iZSwKKwkucmVtb3ZlCQk9IGRhOTAzeF9yZWd1bGF0b3JfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGE5MDN4X3JlZ3VsYXRvcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZGE5MDN4X3JlZ3VsYXRvcl9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoZGE5MDN4X3JlZ3VsYXRvcl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGRhOTAzeF9yZWd1bGF0b3JfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkYTkwM3hfcmVndWxhdG9yX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChkYTkwM3hfcmVndWxhdG9yX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJFcmljIE1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4iCisJICAgICAgIk1pa2UgUmFwb3BvcnQgPG1pa2VAY29tcHVsYWIuY28uaWw+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJlZ3VsYXRvciBEcml2ZXIgZm9yIERpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzWCBQTUlDIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmRhOTAzeC1yZWd1bGF0b3IiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQ0YjE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCkBAIC0wLDAgKzEsMTQzMSBAQAorLyoKKyAqIHdtODM1MC5jICAtLSAgVm9sdGFnZSBhbmQgY3VycmVudCByZWd1bGF0aW9uIGZvciB0aGUgV29sZnNvbiBXTTgzNTAgUE1JQworICoKKyAqIENvcHlyaWdodCAyMDA3LCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCisgKiAgICAgICAgIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9wbWljLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisKKy8qIE1pY3JvYW1wcyAqLworc3RhdGljIGNvbnN0IGludCBpc2lua19jdXJbXSA9IHsKKwk0LAorCTUsCisJNiwKKwk3LAorCTgsCisJMTAsCisJMTEsCisJMTQsCisJMTYsCisJMTksCisJMjMsCisJMjcsCisJMzIsCisJMzksCisJNDYsCisJNTQsCisJNjUsCisJNzcsCisJOTIsCisJMTA5LAorCTEzMCwKKwkxNTQsCisJMTgzLAorCTIxOCwKKwkyNTksCisJMzA4LAorCTM2NywKKwk0MzYsCisJNTE4LAorCTYxNiwKKwk3MzMsCisJODcyLAorCTEwMzcsCisJMTIzMywKKwkxNDY2LAorCTE3NDQsCisJMjA3MywKKwkyNDY2LAorCTI5MzMsCisJMzQ4NywKKwk0MTQ3LAorCTQ5MzIsCisJNTg2NSwKKwk2OTc1LAorCTgyOTQsCisJOTg2NCwKKwkxMTczMCwKKwkxMzk0OSwKKwkxNjU4OSwKKwkxOTcyOCwKKwkyMzQ2MCwKKwkyNzg5OSwKKwkzMzE3OCwKKwkzOTQ1NSwKKwk0NjkyMCwKKwk1NTc5OCwKKwk2NjM1NSwKKwk3ODkxMCwKKwk5Mzg0MCwKKwkxMTE1OTYsCisJMTMyNzEwLAorCTE1NzgyMCwKKwkxODc2ODEsCisJMjIzMTkxCit9OworCitzdGF0aWMgaW50IGdldF9pc2lua192YWwoaW50IG1pbl91QSwgaW50IG1heF91QSwgdTE2ICpzZXR0aW5nKQoreworCWludCBpOworCisJZm9yIChpID0gQVJSQVlfU0laRShpc2lua19jdXIpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKG1pbl91QSA8PSBpc2lua19jdXJbaV0gJiYgbWF4X3VBID49IGlzaW5rX2N1cltpXSkgeworCQkJKnNldHRpbmcgPSBpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdtODM1MF9sZG9fdmFsX3RvX212b2x0cyh1bnNpZ25lZCBpbnQgdmFsKQoreworCWlmICh2YWwgPCAxNikKKwkJcmV0dXJuICh2YWwgKiA1MCkgKyA5MDA7CisJZWxzZQorCQlyZXR1cm4gKCh2YWwgLSAxNikgKiAxMDApICsgMTgwMDsKKworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB3bTgzNTBfbGRvX212b2x0c190b192YWwoaW50IG1WKQoreworCWlmIChtViA8IDE4MDApCisJCXJldHVybiAobVYgLSA5MDApIC8gNTA7CisJZWxzZQorCQlyZXR1cm4gKChtViAtIDE4MDApIC8gMTAwKSArIDE2OworfQorCitzdGF0aWMgaW5saW5lIGludCB3bTgzNTBfZGNkY192YWxfdG9fbXZvbHRzKHVuc2lnbmVkIGludCB2YWwpCit7CisJcmV0dXJuICh2YWwgKiAyNSkgKyA4NTA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdtODM1MF9kY2RjX212b2x0c190b192YWwoaW50IG1WKQoreworCXJldHVybiAobVYgLSA4NTApIC8gMjU7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2lzaW5rX3NldF9jdXJyZW50KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgbWluX3VBLAorCWludCBtYXhfdUEpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgaXNpbmsgPSByZGV2X2dldF9pZChyZGV2KTsKKwl1MTYgdmFsLCBzZXR0aW5nOworCWludCByZXQ7CisKKwlyZXQgPSBnZXRfaXNpbmtfdmFsKG1pbl91QSwgbWF4X3VBLCAmc2V0dGluZyk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoIChpc2luaykgeworCWNhc2UgV004MzUwX0lTSU5LX0E6CisJCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9DVVJSRU5UX1NJTktfRFJJVkVSX0EpICYKKwkJICAgIH5XTTgzNTBfQ1MxX0lTRUxfTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9DVVJSRU5UX1NJTktfRFJJVkVSX0EsCisJCQkJIHZhbCB8IHNldHRpbmcpOworCQlicmVhazsKKwljYXNlIFdNODM1MF9JU0lOS19COgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfQ1VSUkVOVF9TSU5LX0RSSVZFUl9CKSAmCisJCSAgICB+V004MzUwX0NTMV9JU0VMX01BU0s7CisJCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfQ1VSUkVOVF9TSU5LX0RSSVZFUl9CLAorCQkJCSB2YWwgfCBzZXR0aW5nKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2lzaW5rX2dldF9jdXJyZW50KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IGlzaW5rID0gcmRldl9nZXRfaWQocmRldik7CisJdTE2IHZhbDsKKworCXN3aXRjaCAoaXNpbmspIHsKKwljYXNlIFdNODM1MF9JU0lOS19BOgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfQ1VSUkVOVF9TSU5LX0RSSVZFUl9BKSAmCisJCSAgICBXTTgzNTBfQ1MxX0lTRUxfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfSVNJTktfQjoKKwkJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0NVUlJFTlRfU0lOS19EUklWRVJfQikgJgorCQkgICAgV004MzUwX0NTMV9JU0VMX01BU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAoaXNpbmtfY3VyW3ZhbF0gKyA1MCkgLyAxMDA7Cit9CisKKy8qIHR1cm4gb24gSVNJTksgZm9sbG93ZWQgYnkgRENEQyAqLworc3RhdGljIGludCB3bTgzNTBfaXNpbmtfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IGlzaW5rID0gcmRldl9nZXRfaWQocmRldik7CisKKwlzd2l0Y2ggKGlzaW5rKSB7CisJY2FzZSBXTTgzNTBfSVNJTktfQToKKwkJc3dpdGNoICh3bTgzNTAtPnBtaWMuaXNpbmtfQV9kY2RjKSB7CisJCWNhc2UgV004MzUwX0RDRENfMjoKKwkJY2FzZSBXTTgzNTBfRENEQ181OgorCQkJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX1BPV0VSX01HTVRfNywKKwkJCQkJV004MzUwX0NTMV9FTkEpOworCQkJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0NTQV9GTEFTSF9DT05UUk9MLAorCQkJCQlXTTgzNTBfQ1MxX0RSSVZFKTsKKwkJCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX0xET19SRVFVRVNURUQsCisJCQkJCTEgPDwgKHdtODM1MC0+cG1pYy5pc2lua19BX2RjZGMgLQorCQkJCQkgICAgICBXTTgzNTBfRENEQ18xKSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgV004MzUwX0lTSU5LX0I6CisJCXN3aXRjaCAod204MzUwLT5wbWljLmlzaW5rX0JfZGNkYykgeworCQljYXNlIFdNODM1MF9EQ0RDXzI6CisJCWNhc2UgV004MzUwX0RDRENfNToKKwkJCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9QT1dFUl9NR01UXzcsCisJCQkJCVdNODM1MF9DUzJfRU5BKTsKKwkJCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9DU0JfRkxBU0hfQ09OVFJPTCwKKwkJCQkJV004MzUwX0NTMl9EUklWRSk7CisJCQl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfRENEQ19MRE9fUkVRVUVTVEVELAorCQkJCQkxIDw8ICh3bTgzNTAtPnBtaWMuaXNpbmtfQl9kY2RjIC0KKwkJCQkJICAgICAgV004MzUwX0RDRENfMSkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2lzaW5rX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgaXNpbmsgPSByZGV2X2dldF9pZChyZGV2KTsKKworCXN3aXRjaCAoaXNpbmspIHsKKwljYXNlIFdNODM1MF9JU0lOS19BOgorCQlzd2l0Y2ggKHdtODM1MC0+cG1pYy5pc2lua19BX2RjZGMpIHsKKwkJY2FzZSBXTTgzNTBfRENEQ18yOgorCQljYXNlIFdNODM1MF9EQ0RDXzU6CisJCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX0xET19SRVFVRVNURUQsCisJCQkJCSAgMSA8PCAod204MzUwLT5wbWljLmlzaW5rX0FfZGNkYyAtCisJCQkJCQlXTTgzNTBfRENEQ18xKSk7CisJCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9QT1dFUl9NR01UXzcsCisJCQkJCSAgV004MzUwX0NTMV9FTkEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFdNODM1MF9JU0lOS19COgorCQlzd2l0Y2ggKHdtODM1MC0+cG1pYy5pc2lua19CX2RjZGMpIHsKKwkJY2FzZSBXTTgzNTBfRENEQ18yOgorCQljYXNlIFdNODM1MF9EQ0RDXzU6CisJCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX0xET19SRVFVRVNURUQsCisJCQkJCSAgMSA8PCAod204MzUwLT5wbWljLmlzaW5rX0JfZGNkYyAtCisJCQkJCQlXTTgzNTBfRENEQ18xKSk7CisJCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9QT1dFUl9NR01UXzcsCisJCQkJCSAgV004MzUwX0NTMl9FTkEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2lzaW5rX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgaXNpbmsgPSByZGV2X2dldF9pZChyZGV2KTsKKworCXN3aXRjaCAoaXNpbmspIHsKKwljYXNlIFdNODM1MF9JU0lOS19BOgorCQlyZXR1cm4gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0NVUlJFTlRfU0lOS19EUklWRVJfQSkgJgorCQkgICAgMHg4MDAwOworCWNhc2UgV004MzUwX0lTSU5LX0I6CisJCXJldHVybiB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfQ1VSUkVOVF9TSU5LX0RSSVZFUl9CKSAmCisJCSAgICAweDgwMDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgd204MzUwX2lzaW5rX3NldF9mbGFzaChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpc2luaywgdTE2IG1vZGUsCisJCQkgICB1MTYgdHJpZ2dlciwgdTE2IGR1cmF0aW9uLCB1MTYgb25fcmFtcCwgdTE2IG9mZl9yYW1wLAorCQkJICAgdTE2IGRyaXZlKQoreworCXN3aXRjaCAoaXNpbmspIHsKKwljYXNlIFdNODM1MF9JU0lOS19BOgorCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0NTQV9GTEFTSF9DT05UUk9MLAorCQkJCSAobW9kZSA/IFdNODM1MF9DUzFfRkxBU0hfTU9ERSA6IDApIHwKKwkJCQkgKHRyaWdnZXIgPyBXTTgzNTBfQ1MxX1RSSUdTUkMgOiAwKSB8CisJCQkJIGR1cmF0aW9uIHwgb25fcmFtcCB8IG9mZl9yYW1wIHwgZHJpdmUpOworCQlicmVhazsKKwljYXNlIFdNODM1MF9JU0lOS19COgorCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0NTQl9GTEFTSF9DT05UUk9MLAorCQkJCSAobW9kZSA/IFdNODM1MF9DUzJfRkxBU0hfTU9ERSA6IDApIHwKKwkJCQkgKHRyaWdnZXIgPyBXTTgzNTBfQ1MyX1RSSUdTUkMgOiAwKSB8CisJCQkJIGR1cmF0aW9uIHwgb25fcmFtcCB8IG9mZl9yYW1wIHwgZHJpdmUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfaXNpbmtfc2V0X2ZsYXNoKTsKKworc3RhdGljIGludCB3bTgzNTBfZGNkY19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwKKwlpbnQgbWF4X3VWKQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHZvbHRfcmVnLCBkY2RjID0gcmRldl9nZXRfaWQocmRldiksIG1WLAorCQltaW5fbVYgPSBtaW5fdVYgLyAxMDAwLCBtYXhfbVYgPSBtYXhfdVYgLyAxMDAwOworCXUxNiB2YWw7CisKKwlpZiAobWluX21WIDwgODUwIHx8IG1pbl9tViA+IDQwMjUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChtYXhfbVYgPCA4NTAgfHwgbWF4X21WID4gNDAyNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzdGVwIHNpemUgaXMgMjVtViAqLworCW1WID0gKG1pbl9tViAtIDgyNikgLyAyNTsKKwlpZiAod204MzUwX2RjZGNfdmFsX3RvX212b2x0cyhtVikgPiBtYXhfbVYpCisJCXJldHVybiAtRUlOVkFMOworCUJVR19PTih3bTgzNTBfZGNkY192YWxfdG9fbXZvbHRzKG1WKSA8IG1pbl9tVik7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzE6CisJCXZvbHRfcmVnID0gV004MzUwX0RDREMxX0NPTlRST0w7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMzoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfRENEQzNfQ09OVFJPTDsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ180OgorCQl2b2x0X3JlZyA9IFdNODM1MF9EQ0RDNF9DT05UUk9MOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzY6CisJCXZvbHRfcmVnID0gV004MzUwX0RDREM2X0NPTlRST0w7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMjoKKwljYXNlIFdNODM1MF9EQ0RDXzU6CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogYWxsIERDRENzIGhhdmUgc2FtZSBtViBiaXRzICovCisJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgdm9sdF9yZWcpICYgfldNODM1MF9EQzFfVlNFTF9NQVNLOworCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCB2b2x0X3JlZywgdmFsIHwgbVYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9kY2RjX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHZvbHRfcmVnLCBkY2RjID0gcmRldl9nZXRfaWQocmRldik7CisJdTE2IHZhbDsKKworCXN3aXRjaCAoZGNkYykgeworCWNhc2UgV004MzUwX0RDRENfMToKKwkJdm9sdF9yZWcgPSBXTTgzNTBfRENEQzFfQ09OVFJPTDsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18zOgorCQl2b2x0X3JlZyA9IFdNODM1MF9EQ0RDM19DT05UUk9MOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzQ6CisJCXZvbHRfcmVnID0gV004MzUwX0RDREM0X0NPTlRST0w7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfNjoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfRENEQzZfQ09OVFJPTDsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18yOgorCWNhc2UgV004MzUwX0RDRENfNToKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBhbGwgRENEQ3MgaGF2ZSBzYW1lIG1WIGJpdHMgKi8KKwl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCB2b2x0X3JlZykgJiBXTTgzNTBfREMxX1ZTRUxfTUFTSzsKKwlyZXR1cm4gd204MzUwX2RjZGNfdmFsX3RvX212b2x0cyh2YWwpICogMTAwMDsKK30KKworc3RhdGljIGludCB3bTgzNTBfZGNkY19zZXRfc3VzcGVuZF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgdVYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgdm9sdF9yZWcsIG1WID0gdVYgLyAxMDAwLCBkY2RjID0gcmRldl9nZXRfaWQocmRldik7CisJdTE2IHZhbDsKKworCWRldl9kYmcod204MzUwLT5kZXYsICIlcyAlZCBtViAlZFxuIiwgX19mdW5jX18sIGRjZGMsIG1WKTsKKworCWlmIChtViAmJiAobVYgPCA4NTAgfHwgbVYgPiA0MDI1KSkgeworCQlkZXZfZXJyKHdtODM1MC0+ZGV2LAorCQkJIkRDREMlZCBzdXNwZW5kIHZvbHRhZ2UgJWQgbVYgb3V0IG9mIHJhbmdlXG4iLAorCQkJZGNkYywgbVYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKG1WID09IDApCisJCW1WID0gODUwOworCisJc3dpdGNoIChkY2RjKSB7CisJY2FzZSBXTTgzNTBfRENEQ18xOgorCQl2b2x0X3JlZyA9IFdNODM1MF9EQ0RDMV9MT1dfUE9XRVI7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMzoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfRENEQzNfTE9XX1BPV0VSOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzQ6CisJCXZvbHRfcmVnID0gV004MzUwX0RDREM0X0xPV19QT1dFUjsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ182OgorCQl2b2x0X3JlZyA9IFdNODM1MF9EQ0RDNl9MT1dfUE9XRVI7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMjoKKwljYXNlIFdNODM1MF9EQ0RDXzU6CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogYWxsIERDRENzIGhhdmUgc2FtZSBtViBiaXRzICovCisJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgdm9sdF9yZWcpICYgfldNODM1MF9EQzFfVlNFTF9NQVNLOworCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCB2b2x0X3JlZywKKwkJCSB2YWwgfCB3bTgzNTBfZGNkY19tdm9sdHNfdG9fdmFsKG1WKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2RjZGNfc2V0X3N1c3BlbmRfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IGRjZGMgPSByZGV2X2dldF9pZChyZGV2KTsKKwl1MTYgdmFsOworCisJc3dpdGNoIChkY2RjKSB7CisJY2FzZSBXTTgzNTBfRENEQ18xOgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzFfTE9XX1BPV0VSKQorCQkJJiB+V004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9EQ0RDMV9MT1dfUE9XRVIsCisJCQl3bTgzNTAtPnBtaWMuZGNkYzFfaGliX21vZGUpOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzM6CisJCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDM19MT1dfUE9XRVIpCisJCQkmIH5XTTgzNTBfRENEQ19ISUJfTU9ERV9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREMzX0xPV19QT1dFUiwKKwkJCXdtODM1MC0+cG1pYy5kY2RjM19oaWJfbW9kZSk7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfNDoKKwkJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RDREM0X0xPV19QT1dFUikKKwkJCSYgfldNODM1MF9EQ0RDX0hJQl9NT0RFX01BU0s7CisJCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfRENEQzRfTE9XX1BPV0VSLAorCQkJd204MzUwLT5wbWljLmRjZGM0X2hpYl9tb2RlKTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ182OgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzZfTE9XX1BPV0VSKQorCQkJJiB+V004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9EQ0RDNl9MT1dfUE9XRVIsCisJCQl3bTgzNTAtPnBtaWMuZGNkYzZfaGliX21vZGUpOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzI6CisJY2FzZSBXTTgzNTBfRENEQ181OgorCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9kY2RjX3NldF9zdXNwZW5kX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiB2YWw7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzE6CisJCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDMV9MT1dfUE9XRVIpOworCQl3bTgzNTAtPnBtaWMuZGNkYzFfaGliX21vZGUgPSB2YWwgJiBXTTgzNTBfRENEQ19ISUJfTU9ERV9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREMxX0xPV19QT1dFUiwKKwkJCVdNODM1MF9EQ0RDX0hJQl9NT0RFX0RJUyk7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMzoKKwkJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RDREMzX0xPV19QT1dFUik7CisJCXdtODM1MC0+cG1pYy5kY2RjM19oaWJfbW9kZSA9IHZhbCAmIFdNODM1MF9EQ0RDX0hJQl9NT0RFX01BU0s7CisJCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfRENEQzNfTE9XX1BPV0VSLAorCQkJV004MzUwX0RDRENfSElCX01PREVfRElTKTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ180OgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzRfTE9XX1BPV0VSKTsKKwkJd204MzUwLT5wbWljLmRjZGM0X2hpYl9tb2RlID0gdmFsICYgV004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9EQ0RDNF9MT1dfUE9XRVIsCisJCQlXTTgzNTBfRENEQ19ISUJfTU9ERV9ESVMpOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzY6CisJCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDNl9MT1dfUE9XRVIpOworCQl3bTgzNTAtPnBtaWMuZGNkYzZfaGliX21vZGUgPSB2YWwgJiBXTTgzNTBfRENEQ19ISUJfTU9ERV9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREM2X0xPV19QT1dFUiwKKwkJCVdNODM1MF9EQ0RDX0hJQl9NT0RFX0RJUyk7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMjoKKwljYXNlIFdNODM1MF9EQ0RDXzU6CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2RjZGMyNV9zZXRfc3VzcGVuZF9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiB2YWw7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzI6CisJCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDMl9DT05UUk9MKQorCQkgICAgJiB+V004MzUwX0RDMl9ISUJfTU9ERV9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREMyX0NPTlRST0wsIHZhbCB8CisJCQkJIFdNODM1MF9EQzJfSElCX01PREVfQUNUSVZFKTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ181OgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzVfQ09OVFJPTCkKKwkJICAgICYgfldNODM1MF9EQzJfSElCX01PREVfTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9EQ0RDNV9DT05UUk9MLCB2YWwgfAorCQkJCSBXTTgzNTBfREM1X0hJQl9NT0RFX0FDVElWRSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTgzNTBfZGNkYzI1X3NldF9zdXNwZW5kX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiB2YWw7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzI6CisJCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDMl9DT05UUk9MKQorCQkgICAgJiB+V004MzUwX0RDMl9ISUJfTU9ERV9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREMyX0NPTlRST0wsIHZhbCB8CisJCQkJIFdNODM1MF9EQzJfSElCX01PREVfRElTQUJMRSk7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfNToKKwkJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RDREM1X0NPTlRST0wpCisJCSAgICAmIH5XTTgzNTBfREMyX0hJQl9NT0RFX01BU0s7CisJCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfRENEQzVfQ09OVFJPTCwgdmFsIHwKKwkJCQkgV004MzUwX0RDMl9ISUJfTU9ERV9ESVNBQkxFKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9kY2RjX3NldF9zdXNwZW5kX21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJdW5zaWduZWQgaW50IG1vZGUpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiAqaGliX21vZGU7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzE6CisJCWhpYl9tb2RlID0gJndtODM1MC0+cG1pYy5kY2RjMV9oaWJfbW9kZTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18zOgorCQloaWJfbW9kZSA9ICZ3bTgzNTAtPnBtaWMuZGNkYzNfaGliX21vZGU7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfNDoKKwkJaGliX21vZGUgPSAmd204MzUwLT5wbWljLmRjZGM0X2hpYl9tb2RlOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzY6CisJCWhpYl9tb2RlID0gJndtODM1MC0+cG1pYy5kY2RjNl9oaWJfbW9kZTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18yOgorCWNhc2UgV004MzUwX0RDRENfNToKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX05PUk1BTDoKKwkJKmhpYl9tb2RlID0gV004MzUwX0RDRENfSElCX01PREVfSU1BR0U7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX01PREVfSURMRToKKwkJKmhpYl9tb2RlID0gV004MzUwX0RDRENfSElCX01PREVfU1RBTkRCWTsKKwkJYnJlYWs7CisJY2FzZSBSRUdVTEFUT1JfTU9ERV9TVEFOREJZOgorCQkqaGliX21vZGUgPSBXTTgzNTBfRENEQ19ISUJfTU9ERV9MRE9fSU07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9sZG9fc2V0X3N1c3BlbmRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IHVWKQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHZvbHRfcmVnLCBtViA9IHVWIC8gMTAwMCwgbGRvID0gcmRldl9nZXRfaWQocmRldik7CisJdTE2IHZhbDsKKworCWRldl9kYmcod204MzUwLT5kZXYsICIlcyAlZCBtViAlZFxuIiwgX19mdW5jX18sIGxkbywgbVYpOworCisJaWYgKG1WIDwgOTAwIHx8IG1WID4gMzMwMCkgeworCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiTERPJWQgdm9sdGFnZSAlZCBtViBvdXQgb2YgcmFuZ2VcbiIsCisJCQlsZG8sIG1WKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChsZG8pIHsKKwljYXNlIFdNODM1MF9MRE9fMToKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPMV9MT1dfUE9XRVI7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0xET18yOgorCQl2b2x0X3JlZyA9IFdNODM1MF9MRE8yX0xPV19QT1dFUjsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzM6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzNfTE9XX1BPV0VSOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fNDoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPNF9MT1dfUE9XRVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGFsbCBMRE9zIGhhdmUgc2FtZSBtViBiaXRzICovCisJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgdm9sdF9yZWcpICYgfldNODM1MF9MRE8xX1ZTRUxfTUFTSzsKKwl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgdm9sdF9yZWcsCisJCQkgdmFsIHwgd204MzUwX2xkb19tdm9sdHNfdG9fdmFsKG1WKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2xkb19zZXRfc3VzcGVuZF9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgdm9sdF9yZWcsIGxkbyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiB2YWw7CisKKwlzd2l0Y2ggKGxkbykgeworCWNhc2UgV004MzUwX0xET18xOgorCQl2b2x0X3JlZyA9IFdNODM1MF9MRE8xX0xPV19QT1dFUjsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzI6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzJfTE9XX1BPV0VSOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fMzoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPM19MT1dfUE9XRVI7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0xET180OgorCQl2b2x0X3JlZyA9IFdNODM1MF9MRE80X0xPV19QT1dFUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogYWxsIExET3MgaGF2ZSBzYW1lIG1WIGJpdHMgKi8KKwl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCB2b2x0X3JlZykgJiB+V004MzUwX0xETzFfSElCX01PREVfTUFTSzsKKwl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgdm9sdF9yZWcsIHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2xkb19zZXRfc3VzcGVuZF9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHZvbHRfcmVnLCBsZG8gPSByZGV2X2dldF9pZChyZGV2KTsKKwl1MTYgdmFsOworCisJc3dpdGNoIChsZG8pIHsKKwljYXNlIFdNODM1MF9MRE9fMToKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPMV9MT1dfUE9XRVI7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0xET18yOgorCQl2b2x0X3JlZyA9IFdNODM1MF9MRE8yX0xPV19QT1dFUjsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzM6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzNfTE9XX1BPV0VSOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fNDoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPNF9MT1dfUE9XRVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGFsbCBMRE9zIGhhdmUgc2FtZSBtViBiaXRzICovCisJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgdm9sdF9yZWcpICYgfldNODM1MF9MRE8xX0hJQl9NT0RFX01BU0s7CisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIHZvbHRfcmVnLCBXTTgzNTBfTERPMV9ISUJfTU9ERV9ESVMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9sZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCBtaW5fdVYsCisJaW50IG1heF91VikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCB2b2x0X3JlZywgbGRvID0gcmRldl9nZXRfaWQocmRldiksIG1WLCBtaW5fbVYgPSBtaW5fdVYgLyAxMDAwLAorCQltYXhfbVYgPSBtYXhfdVYgLyAxMDAwOworCXUxNiB2YWw7CisKKwlpZiAobWluX21WIDwgOTAwIHx8IG1pbl9tViA+IDMzMDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChtYXhfbVYgPCA5MDAgfHwgbWF4X21WID4gMzMwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWluX21WIDwgMTgwMCkgeworCQkvKiBzdGVwIHNpemUgaXMgNTBtViA8IDE4MDBtViAqLworCQltViA9IChtaW5fbVYgLSA4NTEpIC8gNTA7CisJCWlmICh3bTgzNTBfbGRvX3ZhbF90b19tdm9sdHMobVYpID4gbWF4X21WKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCUJVR19PTih3bTgzNTBfbGRvX3ZhbF90b19tdm9sdHMobVYpIDwgbWluX21WKTsKKwl9IGVsc2UgeworCQkvKiBzdGVwIHNpemUgaXMgMTAwbVYgPiAxODAwbVYgKi8KKwkJbVYgPSAoKG1pbl9tViAtIDE3MDEpIC8gMTAwKSArIDE2OworCQlpZiAod204MzUwX2xkb192YWxfdG9fbXZvbHRzKG1WKSA+IG1heF9tVikKKwkJCXJldHVybiAtRUlOVkFMOworCQlCVUdfT04od204MzUwX2xkb192YWxfdG9fbXZvbHRzKG1WKSA8IG1pbl9tVik7CisJfQorCisJc3dpdGNoIChsZG8pIHsKKwljYXNlIFdNODM1MF9MRE9fMToKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPMV9DT05UUk9MOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fMjoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPMl9DT05UUk9MOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fMzoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPM19DT05UUk9MOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fNDoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPNF9DT05UUk9MOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBhbGwgTERPcyBoYXZlIHNhbWUgbVYgYml0cyAqLworCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIHZvbHRfcmVnKSAmIH5XTTgzNTBfTERPMV9WU0VMX01BU0s7CisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIHZvbHRfcmVnLCB2YWwgfCBtVik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2xkb19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCB2b2x0X3JlZywgbGRvID0gcmRldl9nZXRfaWQocmRldik7CisJdTE2IHZhbDsKKworCXN3aXRjaCAobGRvKSB7CisJY2FzZSBXTTgzNTBfTERPXzE6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzFfQ09OVFJPTDsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzI6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzJfQ09OVFJPTDsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzM6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzNfQ09OVFJPTDsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzQ6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzRfQ09OVFJPTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogYWxsIExET3MgaGF2ZSBzYW1lIG1WIGJpdHMgKi8KKwl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCB2b2x0X3JlZykgJiBXTTgzNTBfTERPMV9WU0VMX01BU0s7CisJcmV0dXJuIHdtODM1MF9sZG9fdmFsX3RvX212b2x0cyh2YWwpICogMTAwMDsKK30KKworaW50IHdtODM1MF9kY2RjX3NldF9zbG90KHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGRjZGMsIHUxNiBzdGFydCwKKwkJCSB1MTYgc3RvcCwgdTE2IGZhdWx0KQoreworCWludCBzbG90X3JlZzsKKwl1MTYgdmFsOworCisJZGV2X2RiZyh3bTgzNTAtPmRldiwgIiVzICVkIHN0YXJ0ICVkIHN0b3AgJWRcbiIsCisJCV9fZnVuY19fLCBkY2RjLCBzdGFydCwgc3RvcCk7CisKKwkvKiBzbG90IHZhbGlkID8gKi8KKwlpZiAoc3RhcnQgPiAxNSB8fCBzdG9wID4gMTUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChkY2RjKSB7CisJY2FzZSBXTTgzNTBfRENEQ18xOgorCQlzbG90X3JlZyA9IFdNODM1MF9EQ0RDMV9USU1FT1VUUzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18yOgorCQlzbG90X3JlZyA9IFdNODM1MF9EQ0RDMl9USU1FT1VUUzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18zOgorCQlzbG90X3JlZyA9IFdNODM1MF9EQ0RDM19USU1FT1VUUzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ180OgorCQlzbG90X3JlZyA9IFdNODM1MF9EQ0RDNF9USU1FT1VUUzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ181OgorCQlzbG90X3JlZyA9IFdNODM1MF9EQ0RDNV9USU1FT1VUUzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ182OgorCQlzbG90X3JlZyA9IFdNODM1MF9EQ0RDNl9USU1FT1VUUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgc2xvdF9yZWcpICYKKwkgICAgfihXTTgzNTBfREMxX0VOU0xPVF9NQVNLIHwgV004MzUwX0RDMV9TRFNMT1RfTUFTSyB8CisJICAgICAgV004MzUwX0RDMV9FUlJBQ1RfTUFTSyk7CisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIHNsb3RfcmVnLAorCQkJIHZhbCB8IChzdGFydCA8PCBXTTgzNTBfREMxX0VOU0xPVF9TSElGVCkgfAorCQkJIChzdG9wIDw8IFdNODM1MF9EQzFfU0RTTE9UX1NISUZUKSB8CisJCQkgKGZhdWx0IDw8IFdNODM1MF9EQzFfRVJSQUNUX1NISUZUKSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9kY2RjX3NldF9zbG90KTsKKworaW50IHdtODM1MF9sZG9fc2V0X3Nsb3Qoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgbGRvLCB1MTYgc3RhcnQsIHUxNiBzdG9wKQoreworCWludCBzbG90X3JlZzsKKwl1MTYgdmFsOworCisJZGV2X2RiZyh3bTgzNTAtPmRldiwgIiVzICVkIHN0YXJ0ICVkIHN0b3AgJWRcbiIsCisJCV9fZnVuY19fLCBsZG8sIHN0YXJ0LCBzdG9wKTsKKworCS8qIHNsb3QgdmFsaWQgPyAqLworCWlmIChzdGFydCA+IDE1IHx8IHN0b3AgPiAxNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGxkbykgeworCWNhc2UgV004MzUwX0xET18xOgorCQlzbG90X3JlZyA9IFdNODM1MF9MRE8xX1RJTUVPVVRTOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fMjoKKwkJc2xvdF9yZWcgPSBXTTgzNTBfTERPMl9USU1FT1VUUzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzM6CisJCXNsb3RfcmVnID0gV004MzUwX0xETzNfVElNRU9VVFM7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0xET180OgorCQlzbG90X3JlZyA9IFdNODM1MF9MRE80X1RJTUVPVVRTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBzbG90X3JlZykgJiB+V004MzUwX0xETzFfU0RTTE9UX01BU0s7CisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIHNsb3RfcmVnLCB2YWwgfCAoKHN0YXJ0IDw8IDEwKSB8IChzdG9wIDw8IDYpKSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfbGRvX3NldF9zbG90KTsKKworaW50IHdtODM1MF9kY2RjMjVfc2V0X21vZGUoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgZGNkYywgdTE2IG1vZGUsCisJCQkgICB1MTYgaWxpbSwgdTE2IHJhbXAsIHUxNiBmZWVkYmFjaykKK3sKKwl1MTYgdmFsOworCisJZGV2X2RiZyh3bTgzNTAtPmRldiwgIiVzICVkIG1vZGU6ICVzICVzXG4iLCBfX2Z1bmNfXywgZGNkYywKKwkJbW9kZSA/ICJub3JtYWwiIDogImJvb3N0IiwgaWxpbSA/ICJsb3ciIDogIm5vcm1hbCIpOworCisJc3dpdGNoIChkY2RjKSB7CisJY2FzZSBXTTgzNTBfRENEQ18yOgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzJfQ09OVFJPTCkKKwkJICAgICYgfihXTTgzNTBfREMyX01PREVfTUFTSyB8IFdNODM1MF9EQzJfSUxJTV9NQVNLIHwKKwkJCVdNODM1MF9EQzJfUk1QX01BU0sgfCBXTTgzNTBfREMyX0ZCU1JDX01BU0spOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREMyX0NPTlRST0wsIHZhbCB8CisJCQkJIChtb2RlIDw8IFdNODM1MF9EQzJfTU9ERV9TSElGVCkgfAorCQkJCSAoaWxpbSA8PCBXTTgzNTBfREMyX0lMSU1fU0hJRlQpIHwKKwkJCQkgKHJhbXAgPDwgV004MzUwX0RDMl9STVBfU0hJRlQpIHwKKwkJCQkgKGZlZWRiYWNrIDw8IFdNODM1MF9EQzJfRkJTUkNfU0hJRlQpKTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ181OgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzVfQ09OVFJPTCkKKwkJICAgICYgfihXTTgzNTBfREM1X01PREVfTUFTSyB8IFdNODM1MF9EQzVfSUxJTV9NQVNLIHwKKwkJCVdNODM1MF9EQzVfUk1QX01BU0sgfCBXTTgzNTBfREM1X0ZCU1JDX01BU0spOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREM1X0NPTlRST0wsIHZhbCB8CisJCQkJIChtb2RlIDw8IFdNODM1MF9EQzVfTU9ERV9TSElGVCkgfAorCQkJCSAoaWxpbSA8PCBXTTgzNTBfREM1X0lMSU1fU0hJRlQpIHwKKwkJCQkgKHJhbXAgPDwgV004MzUwX0RDNV9STVBfU0hJRlQpIHwKKwkJCQkgKGZlZWRiYWNrIDw8IFdNODM1MF9EQzVfRkJTUkNfU0hJRlQpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfZGNkYzI1X3NldF9tb2RlKTsKKworc3RhdGljIGludCB3bTgzNTBfZGNkY19lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiBzaGlmdDsKKworCWlmIChkY2RjIDwgV004MzUwX0RDRENfMSB8fCBkY2RjID4gV004MzUwX0RDRENfNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IGRjZGMgLSBXTTgzNTBfRENEQ18xOworCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX0xET19SRVFVRVNURUQsIDEgPDwgc2hpZnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9kY2RjX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiBzaGlmdDsKKworCWlmIChkY2RjIDwgV004MzUwX0RDRENfMSB8fCBkY2RjID4gV004MzUwX0RDRENfNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IGRjZGMgLSBXTTgzNTBfRENEQ18xOworCXdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0RDRENfTERPX1JFUVVFU1RFRCwgMSA8PCBzaGlmdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTgzNTBfbGRvX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBsZG8gPSByZGV2X2dldF9pZChyZGV2KTsKKwl1MTYgc2hpZnQ7CisKKwlpZiAobGRvIDwgV004MzUwX0xET18xIHx8IGxkbyA+IFdNODM1MF9MRE9fNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IChsZG8gLSBXTTgzNTBfTERPXzEpICsgODsKKwl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfRENEQ19MRE9fUkVRVUVTVEVELCAxIDw8IHNoaWZ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTgzNTBfbGRvX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgbGRvID0gcmRldl9nZXRfaWQocmRldik7CisJdTE2IHNoaWZ0OworCisJaWYgKGxkbyA8IFdNODM1MF9MRE9fMSB8fCBsZG8gPiBXTTgzNTBfTERPXzQpCisJCXJldHVybiAtRUlOVkFMOworCisJc2hpZnQgPSAobGRvIC0gV004MzUwX0xET18xKSArIDg7CisJd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfRENEQ19MRE9fUkVRVUVTVEVELCAxIDw8IHNoaWZ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmb3JjZV9jb250aW51b3VzX2VuYWJsZShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBkY2RjLCBpbnQgZW5hYmxlKQoreworCWludCByZWcgPSAwLCByZXQ7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzE6CisJCXJlZyA9IFdNODM1MF9EQ0RDMV9GT1JDRV9QV007CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMzoKKwkJcmVnID0gV004MzUwX0RDREMzX0ZPUkNFX1BXTTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ180OgorCQlyZWcgPSBXTTgzNTBfRENEQzRfRk9SQ0VfUFdNOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzY6CisJCXJlZyA9IFdNODM1MF9EQ0RDNl9GT1JDRV9QV007CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChlbmFibGUpCisJCXJldCA9IHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIHJlZywKKwkJCVdNODM1MF9EQ0RDMV9GT1JDRV9QV01fRU5BKTsKKwllbHNlCisJCXJldCA9IHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgcmVnLAorCQkJV004MzUwX0RDREMxX0ZPUkNFX1BXTV9FTkEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2RjZGNfc2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIHVuc2lnbmVkIGludCBtb2RlKQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IGRjZGMgPSByZGV2X2dldF9pZChyZGV2KTsKKwl1MTYgdmFsOworCisJaWYgKGRjZGMgPCBXTTgzNTBfRENEQ18xIHx8IGRjZGMgPiBXTTgzNTBfRENEQ182KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkY2RjID09IFdNODM1MF9EQ0RDXzIgfHwgZGNkYyA9PSBXTTgzNTBfRENEQ181KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9IDEgPDwgKGRjZGMgLSBXTTgzNTBfRENEQ18xKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgUkVHVUxBVE9SX01PREVfRkFTVDoKKwkJLyogZm9yY2UgY29udGludW91cyBtb2RlICovCisJCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX0FDVElWRV9PUFRJT05TLCB2YWwpOworCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX1NMRUVQX09QVElPTlMsIHZhbCk7CisJCWZvcmNlX2NvbnRpbnVvdXNfZW5hYmxlKHdtODM1MCwgZGNkYywgMSk7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgorCQkvKiBhY3RpdmUgLyBwdWxzZSBza2lwcGluZyAqLworCQl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfRENEQ19BQ1RJVkVfT1BUSU9OUywgdmFsKTsKKwkJd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfRENEQ19TTEVFUF9PUFRJT05TLCB2YWwpOworCQlmb3JjZV9jb250aW51b3VzX2VuYWJsZSh3bTgzNTAsIGRjZGMsIDApOworCQlicmVhazsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX0lETEU6CisJCS8qIHN0YW5kYnkgbW9kZSAqLworCQlmb3JjZV9jb250aW51b3VzX2VuYWJsZSh3bTgzNTAsIGRjZGMsIDApOworCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX1NMRUVQX09QVElPTlMsIHZhbCk7CisJCXdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0RDRENfQUNUSVZFX09QVElPTlMsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX01PREVfU1RBTkRCWToKKwkJLyogTERPIG1vZGUgKi8KKwkJZm9yY2VfY29udGludW91c19lbmFibGUod204MzUwLCBkY2RjLCAwKTsKKwkJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0RDRENfU0xFRVBfT1BUSU9OUywgdmFsKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd204MzUwX2RjZGNfZ2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiBtYXNrLCBzbGVlcCwgYWN0aXZlLCBmb3JjZTsKKwlpbnQgbW9kZSA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKKworCWlmIChkY2RjIDwgV004MzUwX0RDRENfMSB8fCBkY2RjID4gV004MzUwX0RDRENfNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGNkYyA9PSBXTTgzNTBfRENEQ18yIHx8IGRjZGMgPT0gV004MzUwX0RDRENfNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYXNrID0gMSA8PCAoZGNkYyAtIFdNODM1MF9EQ0RDXzEpOworCWFjdGl2ZSA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDX0FDVElWRV9PUFRJT05TKSAmIG1hc2s7CisJc2xlZXAgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQ19TTEVFUF9PUFRJT05TKSAmIG1hc2s7CisJZm9yY2UgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzFfRk9SQ0VfUFdNKQorCSAgICAmIFdNODM1MF9EQ0RDMV9GT1JDRV9QV01fRU5BOworCWRldl9kYmcod204MzUwLT5kZXYsICJtYXNrICV4IGFjdGl2ZSAleCBzbGVlcCAleCBmb3JjZSAleCIsCisJCW1hc2ssIGFjdGl2ZSwgc2xlZXAsIGZvcmNlKTsKKworCWlmIChhY3RpdmUgJiYgIXNsZWVwKSB7CisJCWlmIChmb3JjZSkKKwkJCW1vZGUgPSBSRUdVTEFUT1JfTU9ERV9GQVNUOworCQllbHNlCisJCQltb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMOworCX0gZWxzZSBpZiAoIWFjdGl2ZSAmJiAhc2xlZXApCisJCW1vZGUgPSBSRUdVTEFUT1JfTU9ERV9JRExFOworCWVsc2UgaWYgKCFzbGVlcCkKKwkJbW9kZSA9IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlk7CisKKwlyZXR1cm4gbW9kZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB3bTgzNTBfbGRvX2dldF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXJldHVybiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7Cit9CisKK3N0cnVjdCB3bTgzNTBfZGNkY19lZmZpY2llbmN5IHsKKwlpbnQgdUFfbG9hZF9taW47CisJaW50IHVBX2xvYWRfbWF4OworCXVuc2lnbmVkIGludCBtb2RlOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB3bTgzNTBfZGNkY19lZmZpY2llbmN5IGRjZGMxXzZfZWZmaWNpZW5jeVtdID0geworCXswLCAxMDAwMCwgUkVHVUxBVE9SX01PREVfU1RBTkRCWX0sICAgICAgIC8qIDAgLSAxMG1BIC0gTERPICovCisJezEwMDAwLCAxMDAwMDAsIFJFR1VMQVRPUl9NT0RFX0lETEV9LCAgICAgLyogMTBtQSAtIDEwMG1BIC0gU3RhbmRieSAqLworCXsxMDAwMDAsIDEwMDAwMDAsIFJFR1VMQVRPUl9NT0RFX05PUk1BTH0sIC8qID4gMTAwbUEgLSBBY3RpdmUgKi8KKwl7LTEsIC0xLCBSRUdVTEFUT1JfTU9ERV9OT1JNQUx9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB3bTgzNTBfZGNkY19lZmZpY2llbmN5IGRjZGMzXzRfZWZmaWNpZW5jeVtdID0geworCXswLCAxMDAwMCwgUkVHVUxBVE9SX01PREVfU1RBTkRCWX0sICAgICAgLyogMCAtIDEwbUEgLSBMRE8gKi8KKwl7MTAwMDAsIDEwMDAwMCwgUkVHVUxBVE9SX01PREVfSURMRX0sICAgIC8qIDEwbUEgLSAxMDBtQSAtIFN0YW5kYnkgKi8KKwl7MTAwMDAwLCA4MDAwMDAsIFJFR1VMQVRPUl9NT0RFX05PUk1BTH0sIC8qID4gMTAwbUEgLSBBY3RpdmUgKi8KKwl7LTEsIC0xLCBSRUdVTEFUT1JfTU9ERV9OT1JNQUx9LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfbW9kZShpbnQgdUEsIGNvbnN0IHN0cnVjdCB3bTgzNTBfZGNkY19lZmZpY2llbmN5ICplZmYpCit7CisJaW50IGkgPSAwOworCisJd2hpbGUgKGVmZltpXS51QV9sb2FkX21pbiAhPSAtMSkgeworCQlpZiAodUEgPj0gZWZmW2ldLnVBX2xvYWRfbWluICYmIHVBIDw9IGVmZltpXS51QV9sb2FkX21heCkKKwkJCXJldHVybiBlZmZbaV0ubW9kZTsKKwl9CisJcmV0dXJuIFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKK30KKworLyogUXVlcnkgdGhlIHJlZ3VsYXRvciBmb3IgaXQncyBtb3N0IGVmZmljaWVudCBtb2RlIEAgdVYsdUEKKyAqIFdNODM1MCByZWd1bGF0b3IgZWZmaWNpZW5jeSBpcyBwcmV0dHkgc2ltaWxhciBvdmVyCisgKiBkaWZmZXJlbnQgaW5wdXQgYW5kIG91dHB1dCB1Vi4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB3bTgzNTBfZGNkY19nZXRfb3B0aW11bV9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCQkJIGludCBpbnB1dF91ViwgaW50IG91dHB1dF91ViwKKwkJCQkJCSBpbnQgb3V0cHV0X3VBKQoreworCWludCBkY2RjID0gcmRldl9nZXRfaWQocmRldiksIG1vZGU7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzE6CisJY2FzZSBXTTgzNTBfRENEQ182OgorCQltb2RlID0gZ2V0X21vZGUob3V0cHV0X3VBLCBkY2RjMV82X2VmZmljaWVuY3kpOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzM6CisJY2FzZSBXTTgzNTBfRENEQ180OgorCQltb2RlID0gZ2V0X21vZGUob3V0cHV0X3VBLCBkY2RjM180X2VmZmljaWVuY3kpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIG1vZGU7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2RjZGNfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBkY2RjID0gcmRldl9nZXRfaWQocmRldiksIHNoaWZ0OworCisJaWYgKGRjZGMgPCBXTTgzNTBfRENEQ18xIHx8IGRjZGMgPiBXTTgzNTBfRENEQ182KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gZGNkYyAtIFdNODM1MF9EQ0RDXzE7CisJcmV0dXJuIHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDX0xET19SRVFVRVNURUQpCisJICAgICYgKDEgPDwgc2hpZnQpOworfQorCitzdGF0aWMgaW50IHdtODM1MF9sZG9faXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBsZG8gPSByZGV2X2dldF9pZChyZGV2KSwgc2hpZnQ7CisKKwlpZiAobGRvIDwgV004MzUwX0xET18xIHx8IGxkbyA+IFdNODM1MF9MRE9fNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IChsZG8gLSBXTTgzNTBfTERPXzEpICsgODsKKwlyZXR1cm4gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RDRENfTERPX1JFUVVFU1RFRCkKKwkgICAgJiAoMSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB3bTgzNTBfZGNkY19vcHMgPSB7CisJLnNldF92b2x0YWdlID0gd204MzUwX2RjZGNfc2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlID0gd204MzUwX2RjZGNfZ2V0X3ZvbHRhZ2UsCisJLmVuYWJsZSA9IHdtODM1MF9kY2RjX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHdtODM1MF9kY2RjX2Rpc2FibGUsCisJLmdldF9tb2RlID0gd204MzUwX2RjZGNfZ2V0X21vZGUsCisJLnNldF9tb2RlID0gd204MzUwX2RjZGNfc2V0X21vZGUsCisJLmdldF9vcHRpbXVtX21vZGUgPSB3bTgzNTBfZGNkY19nZXRfb3B0aW11bV9tb2RlLAorCS5pc19lbmFibGVkID0gd204MzUwX2RjZGNfaXNfZW5hYmxlZCwKKwkuc2V0X3N1c3BlbmRfdm9sdGFnZSA9IHdtODM1MF9kY2RjX3NldF9zdXNwZW5kX3ZvbHRhZ2UsCisJLnNldF9zdXNwZW5kX2VuYWJsZSA9IHdtODM1MF9kY2RjX3NldF9zdXNwZW5kX2VuYWJsZSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZSA9IHdtODM1MF9kY2RjX3NldF9zdXNwZW5kX2Rpc2FibGUsCisJLnNldF9zdXNwZW5kX21vZGUgPSB3bTgzNTBfZGNkY19zZXRfc3VzcGVuZF9tb2RlLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHdtODM1MF9kY2RjMl81X29wcyA9IHsKKwkuZW5hYmxlID0gd204MzUwX2RjZGNfZW5hYmxlLAorCS5kaXNhYmxlID0gd204MzUwX2RjZGNfZGlzYWJsZSwKKwkuaXNfZW5hYmxlZCA9IHdtODM1MF9kY2RjX2lzX2VuYWJsZWQsCisJLnNldF9zdXNwZW5kX2VuYWJsZSA9IHdtODM1MF9kY2RjMjVfc2V0X3N1c3BlbmRfZW5hYmxlLAorCS5zZXRfc3VzcGVuZF9kaXNhYmxlID0gd204MzUwX2RjZGMyNV9zZXRfc3VzcGVuZF9kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHdtODM1MF9sZG9fb3BzID0geworCS5zZXRfdm9sdGFnZSA9IHdtODM1MF9sZG9fc2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlID0gd204MzUwX2xkb19nZXRfdm9sdGFnZSwKKwkuZW5hYmxlID0gd204MzUwX2xkb19lbmFibGUsCisJLmRpc2FibGUgPSB3bTgzNTBfbGRvX2Rpc2FibGUsCisJLmlzX2VuYWJsZWQgPSB3bTgzNTBfbGRvX2lzX2VuYWJsZWQsCisJLmdldF9tb2RlID0gd204MzUwX2xkb19nZXRfbW9kZSwKKwkuc2V0X3N1c3BlbmRfdm9sdGFnZSA9IHdtODM1MF9sZG9fc2V0X3N1c3BlbmRfdm9sdGFnZSwKKwkuc2V0X3N1c3BlbmRfZW5hYmxlID0gd204MzUwX2xkb19zZXRfc3VzcGVuZF9lbmFibGUsCisJLnNldF9zdXNwZW5kX2Rpc2FibGUgPSB3bTgzNTBfbGRvX3NldF9zdXNwZW5kX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgd204MzUwX2lzaW5rX29wcyA9IHsKKwkuc2V0X2N1cnJlbnRfbGltaXQgPSB3bTgzNTBfaXNpbmtfc2V0X2N1cnJlbnQsCisJLmdldF9jdXJyZW50X2xpbWl0ID0gd204MzUwX2lzaW5rX2dldF9jdXJyZW50LAorCS5lbmFibGUgPSB3bTgzNTBfaXNpbmtfZW5hYmxlLAorCS5kaXNhYmxlID0gd204MzUwX2lzaW5rX2Rpc2FibGUsCisJLmlzX2VuYWJsZWQgPSB3bTgzNTBfaXNpbmtfaXNfZW5hYmxlZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2Mgd204MzUwX3JlZ1tOVU1fV004MzUwX1JFR1VMQVRPUlNdID0geworCXsKKwkJLm5hbWUgPSAiRENEQzEiLAorCQkuaWQgPSBXTTgzNTBfRENEQ18xLAorCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfVVZfREMxLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRENEQzIiLAorCQkuaWQgPSBXTTgzNTBfRENEQ18yLAorCQkub3BzID0gJndtODM1MF9kY2RjMl81X29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfVVZfREMyLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRENEQzMiLAorCQkuaWQgPSBXTTgzNTBfRENEQ18zLAorCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfVVZfREMzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRENEQzQiLAorCQkuaWQgPSBXTTgzNTBfRENEQ180LAorCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfVVZfREM0LAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRENEQzUiLAorCQkuaWQgPSBXTTgzNTBfRENEQ181LAorCQkub3BzID0gJndtODM1MF9kY2RjMl81X29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfVVZfREM1LAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkgfSwKKwl7CisJCS5uYW1lID0gIkRDREM2IiwKKwkJLmlkID0gV004MzUwX0RDRENfNiwKKwkJLm9wcyA9ICZ3bTgzNTBfZGNkY19vcHMsCisJCS5pcnEgPSBXTTgzNTBfSVJRX1VWX0RDNiwKKwkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwl7CisJCS5uYW1lID0gIkxETzEiLAorCQkuaWQgPSBXTTgzNTBfTERPXzEsCisJCS5vcHMgPSAmd204MzUwX2xkb19vcHMsCisJCS5pcnEgPSBXTTgzNTBfSVJRX1VWX0xETzEsCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJeworCQkubmFtZSA9ICJMRE8yIiwKKwkJLmlkID0gV004MzUwX0xET18yLAorCQkub3BzID0gJndtODM1MF9sZG9fb3BzLAorCQkuaXJxID0gV004MzUwX0lSUV9VVl9MRE8yLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPMyIsCisJCS5pZCA9IFdNODM1MF9MRE9fMywKKwkJLm9wcyA9ICZ3bTgzNTBfbGRvX29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfVVZfTERPMywKKwkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwl7CisJCS5uYW1lID0gIkxETzQiLAorCQkuaWQgPSBXTTgzNTBfTERPXzQsCisJCS5vcHMgPSAmd204MzUwX2xkb19vcHMsCisJCS5pcnEgPSBXTTgzNTBfSVJRX1VWX0xETzQsCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJeworCQkubmFtZSA9ICJJU0lOS0EiLAorCQkuaWQgPSBXTTgzNTBfSVNJTktfQSwKKwkJLm9wcyA9ICZ3bTgzNTBfaXNpbmtfb3BzLAorCQkuaXJxID0gV004MzUwX0lSUV9DUzEsCisJCS50eXBlID0gUkVHVUxBVE9SX0NVUlJFTlQsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCSB9LAorCXsKKwkJLm5hbWUgPSAiSVNJTktCIiwKKwkJLmlkID0gV004MzUwX0lTSU5LX0IsCisJCS5vcHMgPSAmd204MzUwX2lzaW5rX29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfQ1MyLAorCQkudHlwZSA9IFJFR1VMQVRPUl9DVVJSRU5ULAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkgfSwKK307CisKK3N0YXRpYyB2b2lkIHBtaWNfdXZfaGFuZGxlcihzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKilkYXRhOworCisJaWYgKGlycSA9PSBXTTgzNTBfSVJRX0NTMSB8fCBpcnEgPT0gV004MzUwX0lSUV9DUzIpCisJCXJlZ3VsYXRvcl9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsCisJCQkJCSAgICAgIFJFR1VMQVRPUl9FVkVOVF9SRUdVTEFUSU9OX09VVCwKKwkJCQkJICAgICAgd204MzUwKTsKKwllbHNlCisJCXJlZ3VsYXRvcl9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsCisJCQkJCSAgICAgIFJFR1VMQVRPUl9FVkVOVF9VTkRFUl9WT0xUQUdFLAorCQkJCQkgICAgICB3bTgzNTApOworfQorCitzdGF0aWMgaW50IHdtODM1MF9yZWd1bGF0b3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CisJaW50IHJldDsKKwl1MTYgdmFsOworCisJaWYgKHBkZXYtPmlkIDwgV004MzUwX0RDRENfMSB8fCBwZGV2LT5pZCA+IFdNODM1MF9JU0lOS19CKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGRvIGFueSByZWd1bGF0aW9yIHNwZWNpZmljIGluaXQgKi8KKwlzd2l0Y2ggKHBkZXYtPmlkKSB7CisJY2FzZSBXTTgzNTBfRENEQ18xOgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzFfTE9XX1BPV0VSKTsKKwkJd204MzUwLT5wbWljLmRjZGMxX2hpYl9tb2RlID0gdmFsICYgV004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18zOgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzNfTE9XX1BPV0VSKTsKKwkJd204MzUwLT5wbWljLmRjZGMzX2hpYl9tb2RlID0gdmFsICYgV004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ180OgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzRfTE9XX1BPV0VSKTsKKwkJd204MzUwLT5wbWljLmRjZGM0X2hpYl9tb2RlID0gdmFsICYgV004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ182OgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzZfTE9XX1BPV0VSKTsKKwkJd204MzUwLT5wbWljLmRjZGM2X2hpYl9tb2RlID0gdmFsICYgV004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJYnJlYWs7CisJfQorCisKKwkvKiByZWdpc3RlciByZWd1bGF0b3IgKi8KKwlyZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZ3bTgzNTBfcmVnW3BkZXYtPmlkXSwgJnBkZXYtPmRldiwKKwkJCQkgIGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KSk7CisJaWYgKElTX0VSUihyZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsCisJCQl3bTgzNTBfcmVnW3BkZXYtPmlkXS5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIocmRldik7CisJfQorCisJLyogcmVnaXN0ZXIgcmVndWxhdG9yIElSUSAqLworCXJldCA9IHdtODM1MF9yZWdpc3Rlcl9pcnEod204MzUwLCB3bTgzNTBfcmVnW3BkZXYtPmlkXS5pcnEsCisJCQkJICBwbWljX3V2X2hhbmRsZXIsIHJkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHJkZXYpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgcmVndWxhdG9yICVzIElSUVxuIiwKKwkJCXdtODM1MF9yZWdbcGRldi0+aWRdLm5hbWUpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdtODM1MF91bm1hc2tfaXJxKHdtODM1MCwgd204MzUwX3JlZ1twZGV2LT5pZF0uaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9yZWd1bGF0b3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCisJd204MzUwX21hc2tfaXJxKHdtODM1MCwgd204MzUwX3JlZ1twZGV2LT5pZF0uaXJxKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCB3bTgzNTBfcmVnW3BkZXYtPmlkXS5pcnEpOworCisJcmVndWxhdG9yX3VucmVnaXN0ZXIocmRldik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Ioc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgcmVnLAorCQkJICAgICAgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IHJldDsKKworCWlmICh3bTgzNTAtPnBtaWMucGRldltyZWddKQorCQlyZXR1cm4gLUVCVVNZOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygid204MzUwLXJlZ3VsYXRvciIsIHJlZyk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdtODM1MC0+cG1pYy5wZGV2W3JlZ10gPSBwZGV2OworCisJaW5pdGRhdGEtPmRyaXZlcl9kYXRhID0gd204MzUwOworCisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBpbml0ZGF0YTsKKwlwZGV2LT5kZXYucGFyZW50ID0gd204MzUwLT5kZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgd204MzUwKTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycih3bTgzNTAtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciByZWd1bGF0b3IgJWQ6ICVkXG4iLAorCQkJcmVnLCByZXQpOworCQlwbGF0Zm9ybV9kZXZpY2VfZGVsKHBkZXYpOworCQl3bTgzNTAtPnBtaWMucGRldltyZWddID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHdtODM1MF9yZWd1bGF0b3JfZHJpdmVyID0geworCS5wcm9iZSA9IHdtODM1MF9yZWd1bGF0b3JfcHJvYmUsCisJLnJlbW92ZSA9IHdtODM1MF9yZWd1bGF0b3JfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJ3bTgzNTAtcmVndWxhdG9yIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204MzUwX3JlZ3VsYXRvcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd204MzUwX3JlZ3VsYXRvcl9kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKHdtODM1MF9yZWd1bGF0b3JfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTgzNTBfcmVndWxhdG9yX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd204MzUwX3JlZ3VsYXRvcl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204MzUwX3JlZ3VsYXRvcl9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldNODM1MCB2b2x0YWdlIGFuZCBjdXJyZW50IHJlZ3VsYXRvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODQwMC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODQwMC1yZWd1bGF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGIzNzJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204NDAwLXJlZ3VsYXRvci5jCkBAIC0wLDAgKzEsMzY4IEBACisvKgorICogUmVndWxhdG9yIHN1cHBvcnQgZm9yIFdNODQwMAorICoKKyAqIENvcHlyaWdodCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg0MDAtcHJpdmF0ZS5oPgorCitzdGF0aWMgaW50IHdtODQwMF9sZG9faXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB3bTg0MDAgKndtODQwMCA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MTYgdmFsOworCisJdmFsID0gd204NDAwX3JlZ19yZWFkKHdtODQwMCwgV004NDAwX0xETzFfQ09OVFJPTCArIHJkZXZfZ2V0X2lkKGRldikpOworCXJldHVybiAodmFsICYgV004NDAwX0xETzFfRU5BKSAhPSAwOworfQorCitzdGF0aWMgaW50IHdtODQwMF9sZG9fZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IHdtODQwMCAqd204NDAwID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHdtODQwMF9zZXRfYml0cyh3bTg0MDAsIFdNODQwMF9MRE8xX0NPTlRST0wgKyByZGV2X2dldF9pZChkZXYpLAorCQkJICAgICAgIFdNODQwMF9MRE8xX0VOQSwgV004NDAwX0xETzFfRU5BKTsKK30KKworc3RhdGljIGludCB3bTg0MDBfbGRvX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDAgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gd204NDAwX3NldF9iaXRzKHdtODQwMCwgV004NDAwX0xETzFfQ09OVFJPTCArIHJkZXZfZ2V0X2lkKGRldiksCisJCQkgICAgICAgV004NDAwX0xETzFfRU5BLCAwKTsKK30KKworc3RhdGljIGludCB3bTg0MDBfbGRvX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IHdtODQwMCAqd204NDAwID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXUxNiB2YWw7CisKKwl2YWwgPSB3bTg0MDBfcmVnX3JlYWQod204NDAwLCBXTTg0MDBfTERPMV9DT05UUk9MICsgcmRldl9nZXRfaWQoZGV2KSk7CisJdmFsICY9IFdNODQwMF9MRE8xX1ZTRUxfTUFTSzsKKworCWlmICh2YWwgPCAxNSkKKwkJcmV0dXJuIDkwMDAwMCArICh2YWwgKiA1MDAwMCk7CisJZWxzZQorCQlyZXR1cm4gMTYwMDAwMCArICgodmFsIC0gMTQpICogMTAwMDAwKTsKK30KKworc3RhdGljIGludCB3bTg0MDBfbGRvX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCB3bTg0MDAgKndtODQwMCA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MTYgdmFsOworCisJaWYgKG1pbl91ViA8IDkwMDAwMCB8fCBtaW5fdVYgPiAzMzAwMDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtaW5fdVYgPCAxNzAwMDAwKSB7CisJCS8qIFN0ZXBzIG9mIDUwbVYgZnJvbSA5MDBtVjsgICovCisJCXZhbCA9IChtaW5fdVYgLSA4NTAwMDEpIC8gNTAwMDA7CisKKwkJaWYgKCh2YWwgKiA1MDAwMCkgKyA5MDAwMDAgPiBtYXhfdVYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJQlVHX09OKCh2YWwgKiA1MDAwMCkgKyA5MDAwMDAgPCBtaW5fdVYpOworCX0gZWxzZSB7CisJCS8qIFN0ZXBzIG9mIDEwMG1WIGZyb20gMTcwMG1WICovCisJCXZhbCA9ICgobWluX3VWIC0gMTYwMDAwMSkgLyAxMDAwMDApOworCisJCWlmICgodmFsICogMTAwMDAwKSArIDE3MDAwMDAgPiBtYXhfdVYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJQlVHX09OKCh2YWwgKiAxMDAwMDApICsgMTcwMDAwMCA8IG1pbl91Vik7CisKKwkJdmFsICs9IDB4ZjsKKwl9CisKKwlyZXR1cm4gd204NDAwX3NldF9iaXRzKHdtODQwMCwgV004NDAwX0xETzFfQ09OVFJPTCArIHJkZXZfZ2V0X2lkKGRldiksCisJCQkgICAgICAgV004NDAwX0xETzFfVlNFTF9NQVNLLCB2YWwpOworfQorCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgd204NDAwX2xkb19vcHMgPSB7CisJLmlzX2VuYWJsZWQgPSB3bTg0MDBfbGRvX2lzX2VuYWJsZWQsCisJLmVuYWJsZSA9IHdtODQwMF9sZG9fZW5hYmxlLAorCS5kaXNhYmxlID0gd204NDAwX2xkb19kaXNhYmxlLAorCS5nZXRfdm9sdGFnZSA9IHdtODQwMF9sZG9fZ2V0X3ZvbHRhZ2UsCisJLnNldF92b2x0YWdlID0gd204NDAwX2xkb19zZXRfdm9sdGFnZSwKK307CisKK3N0YXRpYyBpbnQgd204NDAwX2RjZGNfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB3bTg0MDAgKndtODQwMCA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgb2Zmc2V0ID0gKHJkZXZfZ2V0X2lkKGRldikgLSBXTTg0MDBfRENEQzEpICogMjsKKwl1MTYgdmFsOworCisJdmFsID0gd204NDAwX3JlZ19yZWFkKHdtODQwMCwgV004NDAwX0RDREMxX0NPTlRST0xfMSArIG9mZnNldCk7CisJcmV0dXJuICh2YWwgJiBXTTg0MDBfREMxX0VOQSkgIT0gMDsKK30KKworc3RhdGljIGludCB3bTg0MDBfZGNkY19lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDAgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IG9mZnNldCA9IChyZGV2X2dldF9pZChkZXYpIC0gV004NDAwX0RDREMxKSAqIDI7CisKKwlyZXR1cm4gd204NDAwX3NldF9iaXRzKHdtODQwMCwgV004NDAwX0RDREMxX0NPTlRST0xfMSArIG9mZnNldCwKKwkJCSAgICAgICBXTTg0MDBfREMxX0VOQSwgV004NDAwX0RDMV9FTkEpOworfQorCitzdGF0aWMgaW50IHdtODQwMF9kY2RjX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDAgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IG9mZnNldCA9IChyZGV2X2dldF9pZChkZXYpIC0gV004NDAwX0RDREMxKSAqIDI7CisKKwlyZXR1cm4gd204NDAwX3NldF9iaXRzKHdtODQwMCwgV004NDAwX0RDREMxX0NPTlRST0xfMSArIG9mZnNldCwKKwkJCSAgICAgICBXTTg0MDBfREMxX0VOQSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX2RjZGNfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDAgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTE2IHZhbDsKKwlpbnQgb2Zmc2V0ID0gKHJkZXZfZ2V0X2lkKGRldikgLSBXTTg0MDBfRENEQzEpICogMjsKKworCXZhbCA9IHdtODQwMF9yZWdfcmVhZCh3bTg0MDAsIFdNODQwMF9EQ0RDMV9DT05UUk9MXzEgKyBvZmZzZXQpOworCXZhbCAmPSBXTTg0MDBfREMxX1ZTRUxfTUFTSzsKKworCXJldHVybiA4NTAwMDAgKyAoMjUwMDAgKiB2YWwpOworfQorCitzdGF0aWMgaW50IHdtODQwMF9kY2RjX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCB3bTg0MDAgKndtODQwMCA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MTYgdmFsOworCWludCBvZmZzZXQgPSAocmRldl9nZXRfaWQoZGV2KSAtIFdNODQwMF9EQ0RDMSkgKiAyOworCisJaWYgKG1pbl91ViA8IDg1MDAwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWwgPSAobWluX3VWIC0gODI1MDAxKSAvIDI1MDAwOworCisJaWYgKDg1MDAwMCArICgyNTAwMCAqIHZhbCkgPiBtYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCUJVR19PTig4NTAwMDAgKyAoMjUwMDAgKiB2YWwpIDwgbWluX3VWKTsKKworCXJldHVybiB3bTg0MDBfc2V0X2JpdHMod204NDAwLCBXTTg0MDBfRENEQzFfQ09OVFJPTF8xICsgb2Zmc2V0LAorCQkJICAgICAgIFdNODQwMF9EQzFfVlNFTF9NQVNLLCB2YWwpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHdtODQwMF9kY2RjX2dldF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IHdtODQwMCAqd204NDAwID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBvZmZzZXQgPSAocmRldl9nZXRfaWQoZGV2KSAtIFdNODQwMF9EQ0RDMSkgKiAyOworCXUxNiBkYXRhWzJdOworCWludCByZXQ7CisKKwlyZXQgPSB3bTg0MDBfYmxvY2tfcmVhZCh3bTg0MDAsIFdNODQwMF9EQ0RDMV9DT05UUk9MXzEgKyBvZmZzZXQsIDIsCisJCQkJZGF0YSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gMDsKKworCS8qIERhdGFzaGVldDogaGliZXJuYXRlICovCisJaWYgKGRhdGFbMF0gJiBXTTg0MDBfREMxX1NMRUVQKQorCQlyZXR1cm4gUkVHVUxBVE9SX01PREVfU1RBTkRCWTsKKworCS8qIERhdGFzaGVldDogc3RhbmRieSAqLworCWlmICghKGRhdGFbMF0gJiBXTTg0MDBfREMxX0FDVElWRSkpCisJCXJldHVybiBSRUdVTEFUT1JfTU9ERV9JRExFOworCisJLyogRGF0YXNoZWV0OiBhY3RpdmUgd2l0aCBvciB3aXRob3V0IGZvcmNlIFBXTSAqLworCWlmIChkYXRhWzFdICYgV004NDAwX0RDMV9GUkNfUFdNKQorCQlyZXR1cm4gUkVHVUxBVE9SX01PREVfRkFTVDsKKwllbHNlCisJCXJldHVybiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX2RjZGNfc2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJc3RydWN0IHdtODQwMCAqd204NDAwID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBvZmZzZXQgPSAocmRldl9nZXRfaWQoZGV2KSAtIFdNODQwMF9EQ0RDMSkgKiAyOworCWludCByZXQ7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX0ZBU1Q6CisJCS8qIERhdGFzaGVldDogYWN0aXZlIHdpdGggZm9yY2UgUFdNICovCisJCXJldCA9IHdtODQwMF9zZXRfYml0cyh3bTg0MDAsIFdNODQwMF9EQ0RDMV9DT05UUk9MXzIgKyBvZmZzZXQsCisJCQkJICAgICAgV004NDAwX0RDMV9GUkNfUFdNLCBXTTg0MDBfREMxX0ZSQ19QV00pOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldHVybiB3bTg0MDBfc2V0X2JpdHMod204NDAwLCBXTTg0MDBfRENEQzFfQ09OVFJPTF8xICsgb2Zmc2V0LAorCQkJCSAgICAgICBXTTg0MDBfREMxX0FDVElWRSB8IFdNODQwMF9EQzFfU0xFRVAsCisJCQkJICAgICAgIFdNODQwMF9EQzFfQUNUSVZFKTsKKworCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgorCQkvKiBEYXRhc2hlZXQ6IGFjdGl2ZSAqLworCQlyZXQgPSB3bTg0MDBfc2V0X2JpdHMod204NDAwLCBXTTg0MDBfRENEQzFfQ09OVFJPTF8yICsgb2Zmc2V0LAorCQkJCSAgICAgIFdNODQwMF9EQzFfRlJDX1BXTSwgMCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0dXJuIHdtODQwMF9zZXRfYml0cyh3bTg0MDAsIFdNODQwMF9EQ0RDMV9DT05UUk9MXzEgKyBvZmZzZXQsCisJCQkJICAgICAgIFdNODQwMF9EQzFfQUNUSVZFIHwgV004NDAwX0RDMV9TTEVFUCwKKwkJCQkgICAgICAgV004NDAwX0RDMV9BQ1RJVkUpOworCisJY2FzZSBSRUdVTEFUT1JfTU9ERV9JRExFOgorCQkvKiBEYXRhc2hlZXQ6IHN0YW5kYnkgKi8KKwkJcmV0ID0gd204NDAwX3NldF9iaXRzKHdtODQwMCwgV004NDAwX0RDREMxX0NPTlRST0xfMSArIG9mZnNldCwKKwkJCQkgICAgICBXTTg0MDBfREMxX0FDVElWRSwgMCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJCXJldHVybiB3bTg0MDBfc2V0X2JpdHMod204NDAwLCBXTTg0MDBfRENEQzFfQ09OVFJPTF8xICsgb2Zmc2V0LAorCQkJCSAgICAgICBXTTg0MDBfREMxX1NMRUVQLCAwKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCB3bTg0MDBfZGNkY19nZXRfb3B0aW11bV9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJCQkgaW50IGlucHV0X3VWLCBpbnQgb3V0cHV0X3VWLAorCQkJCQkJIGludCBsb2FkX3VBKQoreworCXJldHVybiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB3bTg0MDBfZGNkY19vcHMgPSB7CisJLmlzX2VuYWJsZWQgPSB3bTg0MDBfZGNkY19pc19lbmFibGVkLAorCS5lbmFibGUgPSB3bTg0MDBfZGNkY19lbmFibGUsCisJLmRpc2FibGUgPSB3bTg0MDBfZGNkY19kaXNhYmxlLAorCS5nZXRfdm9sdGFnZSA9IHdtODQwMF9kY2RjX2dldF92b2x0YWdlLAorCS5zZXRfdm9sdGFnZSA9IHdtODQwMF9kY2RjX3NldF92b2x0YWdlLAorCS5nZXRfbW9kZSA9IHdtODQwMF9kY2RjX2dldF9tb2RlLAorCS5zZXRfbW9kZSA9IHdtODQwMF9kY2RjX3NldF9tb2RlLAorCS5nZXRfb3B0aW11bV9tb2RlID0gd204NDAwX2RjZGNfZ2V0X29wdGltdW1fbW9kZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgcmVndWxhdG9yc1tdID0geworCXsKKwkJLm5hbWUgPSAiTERPMSIsCisJCS5pZCA9IFdNODQwMF9MRE8xLAorCQkub3BzID0gJndtODQwMF9sZG9fb3BzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPMiIsCisJCS5pZCA9IFdNODQwMF9MRE8yLAorCQkub3BzID0gJndtODQwMF9sZG9fb3BzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPMyIsCisJCS5pZCA9IFdNODQwMF9MRE8zLAorCQkub3BzID0gJndtODQwMF9sZG9fb3BzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPNCIsCisJCS5pZCA9IFdNODQwMF9MRE80LAorCQkub3BzID0gJndtODQwMF9sZG9fb3BzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRENEQzEiLAorCQkuaWQgPSBXTTg0MDBfRENEQzEsCisJCS5vcHMgPSAmd204NDAwX2RjZGNfb3BzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRENEQzIiLAorCQkuaWQgPSBXTTg0MDBfRENEQzIsCisJCS5vcHMgPSAmd204NDAwX2RjZGNfb3BzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204NDAwX3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OworCisJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcmVndWxhdG9yc1twZGV2LT5pZF0sICZwZGV2LT5kZXYsCisJCXBkZXYtPmRldi5kcml2ZXJfZGF0YSk7CisKKwlpZiAoSVNfRVJSKHJkZXYpKQorCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg0MDBfcmVndWxhdG9yX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlyZWd1bGF0b3JfdW5yZWdpc3RlcihyZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTg0MDBfcmVndWxhdG9yX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ3bTg0MDAtcmVndWxhdG9yIiwKKwl9LAorCS5wcm9iZSA9IHdtODQwMF9yZWd1bGF0b3JfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtODQwMF9yZWd1bGF0b3JfcmVtb3ZlKSwKK307CisKKy8qKgorICogd204NDAwX3JlZ2lzdGVyX3JlZ3VsYXRvciAtIGVuYWJsZSBzb2Z0d2FyZSBjb250cm9sIG9mIGEgV004NDAwIHJlZ3VsYXRvcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBzb2Z0d2FyZSBjb250cm9sIG9mIGEgV004NDAwIHJlZ3VsYXRvciB2aWEKKyAqIHRoZSByZWd1bGF0b3IgQVBJLiAgSXQgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gdGhlCisgKiBwbGF0Zm9ybV9pbml0KCkgY2FsbGJhY2sgb2YgdGhlIFdNODQwMCBNRkQgZHJpdmVyLgorICoKKyAqIEBwYXJhbSBkZXYgICAgICBUaGUgV004NDAwIGRldmljZSB0byBvcGVyYXRlIG9uLgorICogQHBhcmFtIHJlZyAgICAgIFRoZSByZWd1bGF0b3IgdG8gY29udHJvbC4KKyAqIEBwYXJhbSBpbml0ZGF0YSBSZWd1bGF0b3IgaW5pdGRhdGEgZm9yIHRoZSByZWd1bGF0b3IuCisgKi8KK2ludCB3bTg0MDBfcmVnaXN0ZXJfcmVndWxhdG9yKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywKKwkJCSAgICAgIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0ZGF0YSkKK3sKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDAgPSBkZXYtPmRyaXZlcl9kYXRhOworCisJaWYgKHdtODQwMC0+cmVndWxhdG9yc1tyZWddLm5hbWUpCisJCXJldHVybiAtRUJVU1k7CisKKwlpbml0ZGF0YS0+ZHJpdmVyX2RhdGEgPSB3bTg0MDA7CisKKwl3bTg0MDAtPnJlZ3VsYXRvcnNbcmVnXS5uYW1lID0gIndtODQwMC1yZWd1bGF0b3IiOworCXdtODQwMC0+cmVndWxhdG9yc1tyZWddLmlkID0gcmVnOworCXdtODQwMC0+cmVndWxhdG9yc1tyZWddLmRldi5wYXJlbnQgPSBkZXY7CisJd204NDAwLT5yZWd1bGF0b3JzW3JlZ10uZGV2LmRyaXZlcl9kYXRhID0gd204NDAwOworCXdtODQwMC0+cmVndWxhdG9yc1tyZWddLmRldi5wbGF0Zm9ybV9kYXRhID0gaW5pdGRhdGE7CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3bTg0MDAtPnJlZ3VsYXRvcnNbcmVnXSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg0MDBfcmVnaXN0ZXJfcmVndWxhdG9yKTsKKworc3RhdGljIGludCBfX2luaXQgd204NDAwX3JlZ3VsYXRvcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd204NDAwX3JlZ3VsYXRvcl9kcml2ZXIpOworfQorbW9kdWxlX2luaXQod204NDAwX3JlZ3VsYXRvcl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODQwMF9yZWd1bGF0b3JfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bTg0MDBfcmVndWxhdG9yX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTg0MDBfcmVndWxhdG9yX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiV004NDAwIHJlZ3VsYXRvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06d204NDAwLXJlZ3VsYXRvciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggYjU3ZmJhNS4uZjY2MGVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0yMjAsMjIgKzIyMCwyMiBAQAogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXBjZjg1ODMuCiAKIGNvbmZpZyBSVENfRFJWX000MVQ4MAotCXRyaXN0YXRlICJTVCBNNDFUODAvODEvODIvODMvODQvODUvODciCisJdHJpc3RhdGUgIlNUIE00MVQ2NS9NNDFUODAvODEvODIvODMvODQvODUvODciCiAJaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIHRoZQotCSAgU1QgTTQxVDgwIFJUQyBjaGlwcyBzZXJpZXMuIEN1cnJlbnRseSBmb2xsb3dpbmcgY2hpcHMgYXJlCi0JICBzdXBwb3J0ZWQ6IE00MVQ4MCwgTTQxVDgxLCBNNDFUODIsIE00MVQ4MywgTTQxU1Q4NCwgTTQxU1Q4NQotCSAgYW5kIE00MVNUODcuCisJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlIFNUIE00MVQ2MAorCSAgYW5kIE00MVQ4MCBSVEMgY2hpcHMgc2VyaWVzLiBDdXJyZW50bHksIHRoZSBmb2xsb3dpbmcgY2hpcHMgYXJlCisJICBzdXBwb3J0ZWQ6IE00MVQ2NSwgTTQxVDgwLCBNNDFUODEsIE00MVQ4MiwgTTQxVDgzLCBNNDFTVDg0LAorCSAgTTQxU1Q4NSwgYW5kIE00MVNUODcuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLW00MXQ4MC4KIAogY29uZmlnIFJUQ19EUlZfTTQxVDgwX1dEVAotCWJvb2wgIlNUIE00MVQ4MCBzZXJpZXMgUlRDIHdhdGNoZG9nIHRpbWVyIgorCWJvb2wgIlNUIE00MVQ2NS9NNDFUODAgc2VyaWVzIFJUQyB3YXRjaGRvZyB0aW1lciIKIAlkZXBlbmRzIG9uIFJUQ19EUlZfTTQxVDgwCiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIHRoZQotCSAgd2F0Y2hkb2cgdGltZXIgaW4gU1QgTTQxVDgwIFJUQyBjaGlwcyBzZXJpZXMuCisJICB3YXRjaGRvZyB0aW1lciBpbiB0aGUgU1QgTTQxVDYwIGFuZCBNNDFUODAgUlRDIGNoaXBzIHNlcmllcy4KIAogY29uZmlnIFJUQ19EUlZfVFdMOTIzMzAKIAlib29sZWFuICJUSSBUV0w5MjMzMC9NZW5lbGF1cyIKQEAgLTMxOSw2ICszMTksMTUgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXJzNWMzNDguCiAKK2NvbmZpZyBSVENfRFJWX0RTMzIzNAorCXRyaXN0YXRlICJNYXhpbS9EYWxsYXMgRFMzMjM0IgorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUKKwkgIE1heGltL0RhbGxhcyBEUzMyMzQgU1BJIFJUQyBjaGlwLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1kczMyMzQuCisKIGVuZGlmICMgU1BJX01BU1RFUgogCiBjb21tZW50ICJQbGF0Zm9ybSBSVEMgZHJpdmVycyIKQEAgLTM1Miw2ICszNjEsMTEgQEAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIERhbGxhcyBEUzEyMTYgUlRDIGNoaXBzLgogCitjb25maWcgUlRDX0RSVl9EUzEyODYKKwl0cmlzdGF0ZSAiRGFsbGFzIERTMTI4NiIKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIERhbGxhcyBEUzEyODYgUlRDIGNoaXBzLgorCiBjb25maWcgUlRDX0RSVl9EUzEzMDIKIAl0cmlzdGF0ZSAiRGFsbGFzIERTMTMwMiIKIAlkZXBlbmRzIG9uIFNIX1NFQ1VSRUVER0U1NDEwCkBAIC00MDUsNiArNDE5LDE1IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1tNDh0ODYuCiAKK2NvbmZpZyBSVENfRFJWX000OFQzNQorCXRyaXN0YXRlICJTVCBNNDhUMzUiCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIHRoZQorCSAgU1QgTTQ4VDM1IFJUQyBjaGlwLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZSwgaWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkICJydGMtbTQ4dDM1Ii4KKwogY29uZmlnIFJUQ19EUlZfTTQ4VDU5CiAJdHJpc3RhdGUgIlNUIE00OFQ1OS9NNDhUMDgvTTQ4VDAyIgogCWhlbHAKQEAgLTU4OSw3ICs2MTIsNyBAQAogCiBjb25maWcgUlRDX0RSVl9QUEMKICAgICAgICB0cmlzdGF0ZSAiUG93ZXJQQyBtYWNoaW5lIGRlcGVuZGVudCBSVEMgc3VwcG9ydCIKLSAgICAgICBkZXBlbmRzIG9uIFBQQ19NRVJHRQorICAgICAgIGRlcGVuZHMgb24gUFBDCiAgICAgICAgaGVscAogCSBUaGUgUG93ZXJQQyBrZXJuZWwgaGFzIG1hY2hpbmUtc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcKIAkgdGhlIFJUQy4gVGhpcyBleHBvc2VzIHRoYXQgZnVuY3Rpb25hbGl0eSB0aHJvdWdoIHRoZSBnZW5lcmljIFJUQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvTWFrZWZpbGUgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQppbmRleCAxMGY0MWY4Li5kMDU5MjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQpAQCAtMjMsNiArMjMsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfQkZJTikJKz0gcnRjLWJmaW4ubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfQ01PUykJKz0gcnRjLWNtb3Mubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxMjE2KQkrPSBydGMtZHMxMjE2Lm8KK29iai0kKENPTkZJR19SVENfRFJWX0RTMTI4NikJKz0gcnRjLWRzMTI4Ni5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzEzMDIpCSs9IHJ0Yy1kczEzMDIubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxMzA1KQkrPSBydGMtZHMxMzA1Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX0RTMTMwNykJKz0gcnRjLWRzMTMwNy5vCkBAIC0zMSwxMSArMzIsMTMgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX0RTMTU1MykJKz0gcnRjLWRzMTU1My5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzE2NzIpCSs9IHJ0Yy1kczE2NzIubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxNzQyKQkrPSBydGMtZHMxNzQyLm8KK29iai0kKENPTkZJR19SVENfRFJWX0RTMzIzNCkJKz0gcnRjLWRzMzIzNC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9FUDkzWFgpCSs9IHJ0Yy1lcDkzeHgubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRk0zMTMwKQkrPSBydGMtZm0zMTMwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0lTTDEyMDgpCSs9IHJ0Yy1pc2wxMjA4Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX000MVQ4MCkJKz0gcnRjLW00MXQ4MC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NNDFUOTQpCSs9IHJ0Yy1tNDF0OTQubworb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQ4VDM1KQkrPSBydGMtbTQ4dDM1Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX000OFQ1OSkJKz0gcnRjLW00OHQ1OS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NNDhUODYpCSs9IHJ0Yy1tNDh0ODYubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfQlE0ODAyKQkrPSBydGMtYnE0ODAyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCmluZGV4IDRlODg4Y2MuLmI1YmY5MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYwpAQCAtMjksMTAgKzI5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKwogI2luY2x1ZGUgPG1hY2gvYXQ5MV9ydGMuaD4KIAogCi0jZGVmaW5lIEFUOTFfUlRDX0ZSRVEJCTEKICNkZWZpbmUgQVQ5MV9SVENfRVBPQ0gJCTE5MDBVTAkvKiBqdXN0IGxpa2UgYXJjaC9hcm0vY29tbW9uL3J0Y3RpbWUuYyAqLwogCiBzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGF0OTFfcnRjX3VwZGF0ZWQpOwpAQCAtNTMsMjEgKzUzLDIxIEBACiAJfSB3aGlsZSAoKHRpbWUgIT0gYXQ5MV9zeXNfcmVhZCh0aW1lcmVnKSkgfHwKIAkJCShkYXRlICE9IGF0OTFfc3lzX3JlYWQoY2FscmVnKSkpOwogCi0JdG0tPnRtX3NlYyAgPSBCQ0QyQklOKCh0aW1lICYgQVQ5MV9SVENfU0VDKSA+PiAwKTsKLQl0bS0+dG1fbWluICA9IEJDRDJCSU4oKHRpbWUgJiBBVDkxX1JUQ19NSU4pID4+IDgpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTigodGltZSAmIEFUOTFfUlRDX0hPVVIpID4+IDE2KTsKKwl0bS0+dG1fc2VjICA9IGJjZDJiaW4oKHRpbWUgJiBBVDkxX1JUQ19TRUMpID4+IDApOworCXRtLT50bV9taW4gID0gYmNkMmJpbigodGltZSAmIEFUOTFfUlRDX01JTikgPj4gOCk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKCh0aW1lICYgQVQ5MV9SVENfSE9VUikgPj4gMTYpOwogCiAJLyoKIAkgKiBUaGUgQ2FsZW5kYXIgQWxhcm0gcmVnaXN0ZXIgZG9lcyBub3QgaGF2ZSBhIGZpZWxkIGZvcgogCSAqIHRoZSB5ZWFyIC0gc28gdGhlc2Ugd2lsbCByZXR1cm4gYW4gaW52YWxpZCB2YWx1ZS4gIFdoZW4gYW4KIAkgKiBhbGFybSBpcyBzZXQsIGF0OTFfYWxhcm1feWVhciB3aWxsZSBzdG9yZSB0aGUgY3VycmVudCB5ZWFyLgogCSAqLwotCXRtLT50bV95ZWFyICA9IEJDRDJCSU4oZGF0ZSAmIEFUOTFfUlRDX0NFTlQpICogMTAwOwkvKiBjZW50dXJ5ICovCi0JdG0tPnRtX3llYXIgKz0gQkNEMkJJTigoZGF0ZSAmIEFUOTFfUlRDX1lFQVIpID4+IDgpOwkvKiB5ZWFyICovCisJdG0tPnRtX3llYXIgID0gYmNkMmJpbihkYXRlICYgQVQ5MV9SVENfQ0VOVCkgKiAxMDA7CS8qIGNlbnR1cnkgKi8KKwl0bS0+dG1feWVhciArPSBiY2QyYmluKChkYXRlICYgQVQ5MV9SVENfWUVBUikgPj4gOCk7CS8qIHllYXIgKi8KIAotCXRtLT50bV93ZGF5ID0gQkNEMkJJTigoZGF0ZSAmIEFUOTFfUlRDX0RBWSkgPj4gMjEpIC0gMTsJLyogZGF5IG9mIHRoZSB3ZWVrIFswLTZdLCBTdW5kYXk9MCAqLwotCXRtLT50bV9tb24gID0gQkNEMkJJTigoZGF0ZSAmIEFUOTFfUlRDX01PTlRIKSA+PiAxNikgLSAxOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTigoZGF0ZSAmIEFUOTFfUlRDX0RBVEUpID4+IDI0KTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4oKGRhdGUgJiBBVDkxX1JUQ19EQVkpID4+IDIxKSAtIDE7CS8qIGRheSBvZiB0aGUgd2VlayBbMC02XSwgU3VuZGF5PTAgKi8KKwl0bS0+dG1fbW9uICA9IGJjZDJiaW4oKGRhdGUgJiBBVDkxX1JUQ19NT05USCkgPj4gMTYpIC0gMTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oKGRhdGUgJiBBVDkxX1JUQ19EQVRFKSA+PiAyNCk7CiB9CiAKIC8qCkBAIC0xMDYsMTYgKzEwNiwxNiBAQAogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0lEUiwgQVQ5MV9SVENfQUNLVVBEKTsKIAogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX1RJTVIsCi0JCQkgIEJJTjJCQ0QodG0tPnRtX3NlYykgPDwgMAotCQkJfCBCSU4yQkNEKHRtLT50bV9taW4pIDw8IDgKLQkJCXwgQklOMkJDRCh0bS0+dG1faG91cikgPDwgMTYpOworCQkJICBiaW4yYmNkKHRtLT50bV9zZWMpIDw8IDAKKwkJCXwgYmluMmJjZCh0bS0+dG1fbWluKSA8PCA4CisJCQl8IGJpbjJiY2QodG0tPnRtX2hvdXIpIDw8IDE2KTsKIAogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0NBTFIsCi0JCQkgIEJJTjJCQ0QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApCS8qIGNlbnR1cnkgKi8KLQkJCXwgQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCkgPDwgOAkvKiB5ZWFyICovCi0JCQl8IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpIDw8IDE2CQkvKiB0bV9tb24gc3RhcnRzIGF0IHplcm8gKi8KLQkJCXwgQklOMkJDRCh0bS0+dG1fd2RheSArIDEpIDw8IDIxCS8qIGRheSBvZiB0aGUgd2VlayBbMC02XSwgU3VuZGF5PTAgKi8KLQkJCXwgQklOMkJDRCh0bS0+dG1fbWRheSkgPDwgMjQpOworCQkJICBiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKQkvKiBjZW50dXJ5ICovCisJCQl8IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApIDw8IDgJLyogeWVhciAqLworCQkJfCBiaW4yYmNkKHRtLT50bV9tb24gKyAxKSA8PCAxNgkJLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCisJCQl8IGJpbjJiY2QodG0tPnRtX3dkYXkgKyAxKSA8PCAyMQkvKiBkYXkgb2YgdGhlIHdlZWsgWzAtNl0sIFN1bmRheT0wICovCisJCQl8IGJpbjJiY2QodG0tPnRtX21kYXkpIDw8IDI0KTsKIAogCS8qIFJlc3RhcnQgVGltZS9DYWxlbmRhciAqLwogCWNyID0gYXQ5MV9zeXNfcmVhZChBVDkxX1JUQ19DUik7CkBAIC0xNjIsMTMgKzE2MiwxMyBAQAogCiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBBVDkxX1JUQ19BTEFSTSk7CiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfVElNQUxSLAotCQkgIEJJTjJCQ0QodG0udG1fc2VjKSA8PCAwCi0JCXwgQklOMkJDRCh0bS50bV9taW4pIDw8IDgKLQkJfCBCSU4yQkNEKHRtLnRtX2hvdXIpIDw8IDE2CisJCSAgYmluMmJjZCh0bS50bV9zZWMpIDw8IDAKKwkJfCBiaW4yYmNkKHRtLnRtX21pbikgPDwgOAorCQl8IGJpbjJiY2QodG0udG1faG91cikgPDwgMTYKIAkJfCBBVDkxX1JUQ19IT1VSRU4gfCBBVDkxX1JUQ19NSU5FTiB8IEFUOTFfUlRDX1NFQ0VOKTsKIAlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19DQUxBTFIsCi0JCSAgQklOMkJDRCh0bS50bV9tb24gKyAxKSA8PCAxNgkJLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCi0JCXwgQklOMkJDRCh0bS50bV9tZGF5KSA8PCAyNAorCQkgIGJpbjJiY2QodG0udG1fbW9uICsgMSkgPDwgMTYJCS8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLworCQl8IGJpbjJiY2QodG0udG1fbWRheSkgPDwgMjQKIAkJfCBBVDkxX1JUQ19EQVRFRU4gfCBBVDkxX1JUQ19NVEhFTik7CiAKIAlpZiAoYWxybS0+ZW5hYmxlZCkgewpAQCAtMjI4LDggKzIyOCw2IEBACiAJCQkoaW1yICYgQVQ5MV9SVENfQUNLVVBEKSA/ICJ5ZXMiIDogIm5vIik7CiAJc2VxX3ByaW50ZihzZXEsICJwZXJpb2RpY19JUlFcdDogJXNcbiIsCiAJCQkoaW1yICYgQVQ5MV9SVENfU0VDRVYpID8gInllcyIgOiAibm8iKTsKLQlzZXFfcHJpbnRmKHNlcSwgInBlcmlvZGljX2ZyZXFcdDogJWxkXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcpIEFUOTFfUlRDX0ZSRVEpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYnE0ODAyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYnE0ODAyLmMKaW5kZXggMTg5YTAxOC4uZDAwYTI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWJxNDgwMi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1icTQ4MDIuYwpAQCAtNzEsMTQgKzcxLDE0IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CiAKLQlCQ0RfVE9fQklOKHRtLT50bV9zZWMpOwotCUJDRF9UT19CSU4odG0tPnRtX21pbik7Ci0JQkNEX1RPX0JJTih0bS0+dG1faG91cik7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbWRheSk7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbW9uKTsKLQlCQ0RfVE9fQklOKHRtLT50bV95ZWFyKTsKLQlCQ0RfVE9fQklOKHRtLT50bV93ZGF5KTsKLQlCQ0RfVE9fQklOKGNlbnR1cnkpOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHRtLT50bV9taW4pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbih0bS0+dG1faG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbih0bS0+dG1fbW9uKTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4odG0tPnRtX3llYXIpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbih0bS0+dG1fd2RheSk7CisJY2VudHVyeSA9IGJjZDJiaW4oY2VudHVyeSk7CiAKIAl0bS0+dG1feWVhciArPSAoY2VudHVyeSAqIDEwMCk7CiAJdG0tPnRtX3llYXIgLT0gMTkwMDsKQEAgLTEwNiwxMyArMTA2LDEzIEBACiAJbWluID0gdG0tPnRtX21pbjsKIAlzZWMgPSB0bS0+dG1fc2VjOwogCi0JQklOX1RPX0JDRChzZWMpOwotCUJJTl9UT19CQ0QobWluKTsKLQlCSU5fVE9fQkNEKGhycyk7Ci0JQklOX1RPX0JDRChkYXkpOwotCUJJTl9UT19CQ0QobW9uKTsKLQlCSU5fVE9fQkNEKHlycyk7Ci0JQklOX1RPX0JDRChjZW50dXJ5KTsKKwlzZWMgPSBiaW4yYmNkKHNlYyk7CisJbWluID0gYmluMmJjZChtaW4pOworCWhycyA9IGJpbjJiY2QoaHJzKTsKKwlkYXkgPSBiaW4yYmNkKGRheSk7CisJbW9uID0gYmluMmJjZChtb24pOworCXlycyA9IGJpbjJiY2QoeXJzKTsKKwljZW50dXJ5ID0gYmluMmJjZChjZW50dXJ5KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMgYi9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jCmluZGV4IGIyM2FmMGMuLjU1NDkyMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWNtb3MuYwpAQCAtMTQzLDYgKzE0Myw0MyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjaWZkZWYgUlRDX1BPUlQKKworLyogTW9zdCBuZXdlciB4ODYgc3lzdGVtcyBoYXZlIHR3byByZWdpc3RlciBiYW5rcywgdGhlIGZpcnN0IHVzZWQKKyAqIGZvciBSVEMgYW5kIE5WUkFNIGFuZCB0aGUgc2Vjb25kIG9ubHkgZm9yIE5WUkFNLiAgQ2FsbGVyIG11c3QKKyAqIG93biBydGNfbG9jayAuLi4gYW5kIHdlIHdvbid0IHdvcnJ5IGFib3V0IGFjY2VzcyBkdXJpbmcgTk1JLgorICovCisjZGVmaW5lIGNhbl9iYW5rMgl0cnVlCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjbW9zX3JlYWRfYmFuazIodW5zaWduZWQgY2hhciBhZGRyKQoreworCW91dGIoYWRkciwgUlRDX1BPUlQoMikpOworCXJldHVybiBpbmIoUlRDX1BPUlQoMykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY21vc193cml0ZV9iYW5rMih1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgY2hhciBhZGRyKQoreworCW91dGIoYWRkciwgUlRDX1BPUlQoMikpOworCW91dGIodmFsLCBSVENfUE9SVCgyKSk7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgY2FuX2JhbmsyCWZhbHNlCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjbW9zX3JlYWRfYmFuazIodW5zaWduZWQgY2hhciBhZGRyKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY21vc193cml0ZV9iYW5rMih1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgY2hhciBhZGRyKQoreworfQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogc3RhdGljIGludCBjbW9zX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdCkKIHsKIAkvKiBSRVZJU0lUOiAgaWYgdGhlIGNsb2NrIGhhcyBhICJjZW50dXJ5IiByZWdpc3RlciwgdXNlCkBAIC0yMDMsMjYgKzI0MCwyNiBAQAogCS8qIFJFVklTSVQgdGhpcyBhc3N1bWVzIFBDIHN0eWxlIHVzYWdlOiAgYWx3YXlzIEJDRCAqLwogCiAJaWYgKCgodW5zaWduZWQpdC0+dGltZS50bV9zZWMpIDwgMHg2MCkKLQkJdC0+dGltZS50bV9zZWMgPSBCQ0QyQklOKHQtPnRpbWUudG1fc2VjKTsKKwkJdC0+dGltZS50bV9zZWMgPSBiY2QyYmluKHQtPnRpbWUudG1fc2VjKTsKIAllbHNlCiAJCXQtPnRpbWUudG1fc2VjID0gLTE7CiAJaWYgKCgodW5zaWduZWQpdC0+dGltZS50bV9taW4pIDwgMHg2MCkKLQkJdC0+dGltZS50bV9taW4gPSBCQ0QyQklOKHQtPnRpbWUudG1fbWluKTsKKwkJdC0+dGltZS50bV9taW4gPSBiY2QyYmluKHQtPnRpbWUudG1fbWluKTsKIAllbHNlCiAJCXQtPnRpbWUudG1fbWluID0gLTE7CiAJaWYgKCgodW5zaWduZWQpdC0+dGltZS50bV9ob3VyKSA8IDB4MjQpCi0JCXQtPnRpbWUudG1faG91ciA9IEJDRDJCSU4odC0+dGltZS50bV9ob3VyKTsKKwkJdC0+dGltZS50bV9ob3VyID0gYmNkMmJpbih0LT50aW1lLnRtX2hvdXIpOwogCWVsc2UKIAkJdC0+dGltZS50bV9ob3VyID0gLTE7CiAKIAlpZiAoY21vcy0+ZGF5X2Fscm0pIHsKIAkJaWYgKCgodW5zaWduZWQpdC0+dGltZS50bV9tZGF5KSA8PSAweDMxKQotCQkJdC0+dGltZS50bV9tZGF5ID0gQkNEMkJJTih0LT50aW1lLnRtX21kYXkpOworCQkJdC0+dGltZS50bV9tZGF5ID0gYmNkMmJpbih0LT50aW1lLnRtX21kYXkpOwogCQllbHNlCiAJCQl0LT50aW1lLnRtX21kYXkgPSAtMTsKIAkJaWYgKGNtb3MtPm1vbl9hbHJtKSB7CiAJCQlpZiAoKCh1bnNpZ25lZCl0LT50aW1lLnRtX21vbikgPD0gMHgxMikKLQkJCQl0LT50aW1lLnRtX21vbiA9IEJDRDJCSU4odC0+dGltZS50bV9tb24pIC0gMTsKKwkJCQl0LT50aW1lLnRtX21vbiA9IGJjZDJiaW4odC0+dGltZS50bV9tb24pIC0gMTsKIAkJCWVsc2UKIAkJCQl0LT50aW1lLnRtX21vbiA9IC0xOwogCQl9CkBAIC0yOTQsMTkgKzMzMSwxOSBAQAogCS8qIFdyaXRpbmcgMHhmZiBtZWFucyAiZG9uJ3QgY2FyZSIgb3IgIm1hdGNoIGFsbCIuICAqLwogCiAJbW9uID0gdC0+dGltZS50bV9tb24gKyAxOwotCW1vbiA9IChtb24gPD0gMTIpID8gQklOMkJDRChtb24pIDogMHhmZjsKKwltb24gPSAobW9uIDw9IDEyKSA/IGJpbjJiY2QobW9uKSA6IDB4ZmY7CiAKIAltZGF5ID0gdC0+dGltZS50bV9tZGF5OwotCW1kYXkgPSAobWRheSA+PSAxICYmIG1kYXkgPD0gMzEpID8gQklOMkJDRChtZGF5KSA6IDB4ZmY7CisJbWRheSA9IChtZGF5ID49IDEgJiYgbWRheSA8PSAzMSkgPyBiaW4yYmNkKG1kYXkpIDogMHhmZjsKIAogCWhycyA9IHQtPnRpbWUudG1faG91cjsKLQlocnMgPSAoaHJzIDwgMjQpID8gQklOMkJDRChocnMpIDogMHhmZjsKKwlocnMgPSAoaHJzIDwgMjQpID8gYmluMmJjZChocnMpIDogMHhmZjsKIAogCW1pbiA9IHQtPnRpbWUudG1fbWluOwotCW1pbiA9IChtaW4gPCA2MCkgPyBCSU4yQkNEKG1pbikgOiAweGZmOworCW1pbiA9IChtaW4gPCA2MCkgPyBiaW4yYmNkKG1pbikgOiAweGZmOwogCiAJc2VjID0gdC0+dGltZS50bV9zZWM7Ci0Jc2VjID0gKHNlYyA8IDYwKSA/IEJJTjJCQ0Qoc2VjKSA6IDB4ZmY7CisJc2VjID0gKHNlYyA8IDYwKSA/IGJpbjJiY2Qoc2VjKSA6IDB4ZmY7CiAKIAlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CiAKQEAgLTQ5MSwxMiArNTI4LDIxIEBACiAKIAlpZiAodW5saWtlbHkob2ZmID49IGF0dHItPnNpemUpKQogCQlyZXR1cm4gMDsKKwlpZiAodW5saWtlbHkob2ZmIDwgMCkpCisJCXJldHVybiAtRUlOVkFMOwogCWlmICgob2ZmICsgY291bnQpID4gYXR0ci0+c2l6ZSkKIAkJY291bnQgPSBhdHRyLT5zaXplIC0gb2ZmOwogCisJb2ZmICs9IE5WUkFNX09GRlNFVDsKIAlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0JZm9yIChyZXR2YWwgPSAwLCBvZmYgKz0gTlZSQU1fT0ZGU0VUOyBjb3VudC0tOyByZXR2YWwrKywgb2ZmKyspCi0JCSpidWYrKyA9IENNT1NfUkVBRChvZmYpOworCWZvciAocmV0dmFsID0gMDsgY291bnQ7IGNvdW50LS0sIG9mZisrLCByZXR2YWwrKykgeworCQlpZiAob2ZmIDwgMTI4KQorCQkJKmJ1ZisrID0gQ01PU19SRUFEKG9mZik7CisJCWVsc2UgaWYgKGNhbl9iYW5rMikKKwkJCSpidWYrKyA9IGNtb3NfcmVhZF9iYW5rMihvZmYpOworCQllbHNlCisJCQlicmVhazsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNTEyLDYgKzU1OCw4IEBACiAJY21vcyA9IGRldl9nZXRfZHJ2ZGF0YShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOwogCWlmICh1bmxpa2VseShvZmYgPj0gYXR0ci0+c2l6ZSkpCiAJCXJldHVybiAtRUZCSUc7CisJaWYgKHVubGlrZWx5KG9mZiA8IDApKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoKG9mZiArIGNvdW50KSA+IGF0dHItPnNpemUpCiAJCWNvdW50ID0gYXR0ci0+c2l6ZSAtIG9mZjsKIApAQCAtNTIwLDE1ICs1NjgsMjAgQEAKIAkgKiBoZXJlLiAgSWYgdXNlcnNwYWNlIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHdoYXQgZmllbGRzIG9mCiAJICogTlZSQU0gdG8gdXBkYXRlLCB1cGRhdGluZyBjaGVja3N1bXMgaXMgYWxzbyBwYXJ0IG9mIGl0cyBqb2IuCiAJICovCisJb2ZmICs9IE5WUkFNX09GRlNFVDsKIAlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0JZm9yIChyZXR2YWwgPSAwLCBvZmYgKz0gTlZSQU1fT0ZGU0VUOyBjb3VudC0tOyByZXR2YWwrKywgb2ZmKyspIHsKKwlmb3IgKHJldHZhbCA9IDA7IGNvdW50OyBjb3VudC0tLCBvZmYrKywgcmV0dmFsKyspIHsKIAkJLyogZG9uJ3QgdHJhc2ggUlRDIHJlZ2lzdGVycyAqLwogCQlpZiAob2ZmID09IGNtb3MtPmRheV9hbHJtCiAJCQkJfHwgb2ZmID09IGNtb3MtPm1vbl9hbHJtCiAJCQkJfHwgb2ZmID09IGNtb3MtPmNlbnR1cnkpCiAJCQlidWYrKzsKLQkJZWxzZQorCQllbHNlIGlmIChvZmYgPCAxMjgpCiAJCQlDTU9TX1dSSVRFKCpidWYrKywgb2ZmKTsKKwkJZWxzZSBpZiAoY2FuX2JhbmsyKQorCQkJY21vc193cml0ZV9iYW5rMigqYnVmKyssIG9mZik7CisJCWVsc2UKKwkJCWJyZWFrOwogCX0KIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIApAQCAtNTM5LDcgKzU5Miw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lCT0gIm52cmFtIiwKIAkJLm1vZGUJPSBTX0lSVUdPIHwgU19JV1VTUiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIAogCS5yZWFkCT0gY21vc19udnJhbV9yZWFkLApAQCAtNjMxLDggKzY4Myw4IEBACiAKIAkvKiBIZXVyaXN0aWMgdG8gZGVkdWNlIE5WUkFNIHNpemUgLi4uIGRvIHdoYXQgdGhlIGxlZ2FjeSBOVlJBTQogCSAqIGRyaXZlciBkaWQsIGJ1dCBkb24ndCByZWplY3QgdW5rbm93biBjb25maWdzLiAgIE9sZCBoYXJkd2FyZQotCSAqIHdvbid0IGFkZHJlc3MgMTI4IGJ5dGVzLCBhbmQgZm9yIG5vdyB3ZSBpZ25vcmUgdGhlIHdheSBuZXdlcgotCSAqIGNoaXBzIGNhbiBhZGRyZXNzIDI1NiBieXRlcyAodXNpbmcgdHdvIG1vcmUgaS9vIHBvcnRzKS4KKwkgKiB3b24ndCBhZGRyZXNzIDEyOCBieXRlcy4gIE5ld2VyIGNoaXBzIGhhdmUgbXVsdGlwbGUgYmFua3MsCisJICogdGhvdWdoIHRoZXkgbWF5IG5vdCBiZSBsaXN0ZWQgaW4gb25lIEkvTyByZXNvdXJjZS4KIAkgKi8KICNpZglkZWZpbmVkKENPTkZJR19BVEFSSSkKIAlhZGRyZXNzX3NwYWNlID0gNjQ7CkBAIC02NDIsNiArNjk0LDggQEAKICN3YXJuaW5nIEFzc3VtaW5nIDEyOCBieXRlcyBvZiBSVEMrTlZSQU0gYWRkcmVzcyBzcGFjZSwgbm90IDY0IGJ5dGVzLgogCWFkZHJlc3Nfc3BhY2UgPSAxMjg7CiAjZW5kaWYKKwlpZiAoY2FuX2JhbmsyICYmIHBvcnRzLT5lbmQgPiAocG9ydHMtPnN0YXJ0ICsgMSkpCisJCWFkZHJlc3Nfc3BhY2UgPSAyNTY7CiAKIAkvKiBGb3IgQUNQSSBzeXN0ZW1zIGV4dGVuc2lvbiBpbmZvIGNvbWVzIGZyb20gdGhlIEZBRFQuICBPbiBvdGhlcnMsCiAJICogYm9hcmQgc3BlY2lmaWMgc2V0dXAgcHJvdmlkZXMgaXQgYXMgYXBwcm9wcmlhdGUuICBTeXN0ZW1zIHdoZXJlCkBAIC03NDAsNyArNzk0LDcgQEAKIAkJZ290byBjbGVhbnVwMjsKIAl9CiAKLQlwcl9pbmZvKCIlczogYWxhcm1zIHVwIHRvIG9uZSAlcyVzJXNcbiIsCisJcHJfaW5mbygiJXM6IGFsYXJtcyB1cCB0byBvbmUgJXMlcywgJXpkIGJ5dGVzIG52cmFtLCAlcyBpcnFzXG4iLAogCQkJY21vc19ydGMucnRjLT5kZXYuYnVzX2lkLAogCQkJaXNfdmFsaWRfaXJxKHJ0Y19pcnEpCiAJCQkJPyAgKGNtb3NfcnRjLm1vbl9hbHJtCkBAIC03NDksNiArODAzLDcgQEAKIAkJCQkJCT8gIm1vbnRoIiA6ICJkYXkiKSkKIAkJCQk6ICJubyIsCiAJCQljbW9zX3J0Yy5jZW50dXJ5ID8gIiwgeTNrIiA6ICIiLAorCQkJbnZyYW0uc2l6ZSwKIAkJCWlzX2hwZXRfZW5hYmxlZCgpID8gIiwgaHBldCBpcnFzIiA6ICIiKTsKIAogCXJldHVybiAwOwpAQCAtOTEzLDYgKzk2OCw5MiBAQAogICogcHJlZGF0ZSBldmVuIFBOUEJJT1Mgc2hvdWxkIHNldCB1cCBwbGF0Zm9ybV9idXMgZGV2aWNlcy4KICAqLwogCisjaWZkZWYJQ09ORklHX0FDUEkKKworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKworI2lmZGVmCUNPTkZJR19QTQorc3RhdGljIHUzMiBydGNfaGFuZGxlcih2b2lkICpjb250ZXh0KQoreworCWFjcGlfY2xlYXJfZXZlbnQoQUNQSV9FVkVOVF9SVEMpOworCWFjcGlfZGlzYWJsZV9ldmVudChBQ1BJX0VWRU5UX1JUQywgMCk7CisJcmV0dXJuIEFDUElfSU5URVJSVVBUX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGNfd2FrZV9zZXR1cCh2b2lkKQoreworCWFjcGlfaW5zdGFsbF9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfUlRDLCBydGNfaGFuZGxlciwgTlVMTCk7CisJLyoKKwkgKiBBZnRlciB0aGUgUlRDIGhhbmRsZXIgaXMgaW5zdGFsbGVkLCB0aGUgRml4ZWRfUlRDIGV2ZW50IHNob3VsZAorCSAqIGJlIGRpc2FibGVkLiBPbmx5IHdoZW4gdGhlIFJUQyBhbGFybSBpcyBzZXQgd2lsbCBpdCBiZSBlbmFibGVkLgorCSAqLworCWFjcGlfY2xlYXJfZXZlbnQoQUNQSV9FVkVOVF9SVEMpOworCWFjcGlfZGlzYWJsZV9ldmVudChBQ1BJX0VWRU5UX1JUQywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0Y193YWtlX29uKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlhY3BpX2NsZWFyX2V2ZW50KEFDUElfRVZFTlRfUlRDKTsKKwlhY3BpX2VuYWJsZV9ldmVudChBQ1BJX0VWRU5UX1JUQywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0Y193YWtlX29mZihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJYWNwaV9kaXNhYmxlX2V2ZW50KEFDUElfRVZFTlRfUlRDLCAwKTsKK30KKyNlbHNlCisjZGVmaW5lIHJ0Y193YWtlX3NldHVwKCkJZG97fXdoaWxlKDApCisjZGVmaW5lIHJ0Y193YWtlX29uCQlOVUxMCisjZGVmaW5lIHJ0Y193YWtlX29mZgkJTlVMTAorI2VuZGlmCisKKy8qIEV2ZXJ5IEFDUEkgcGxhdGZvcm0gaGFzIGEgbWMxNDY4MTggY29tcGF0aWJsZSAiY21vcyBydGMiLiAgSGVyZSB3ZSBmaW5kCisgKiBpdHMgZGV2aWNlIG5vZGUgYW5kIHBhc3MgZXh0cmEgY29uZmlnIGRhdGEuICBUaGlzIGhlbHBzIGl0cyBkcml2ZXIgdXNlCisgKiBjYXBhYmlsaXRpZXMgdGhhdCB0aGUgbm93LW9ic29sZXRlIG1jMTQ2ODE4IGRpZG4ndCBoYXZlLCBhbmQgaW5mb3JtcyBpdAorICogdGhhdCB0aGlzIGJvYXJkJ3MgUlRDIGlzIHdha2V1cC1jYXBhYmxlIChwZXIgQUNQSSBzcGVjKS4KKyAqLworc3RhdGljIHN0cnVjdCBjbW9zX3J0Y19ib2FyZF9pbmZvIGFjcGlfcnRjX2luZm87CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdAorY21vc193YWtlX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoYWNwaV9kaXNhYmxlZCkKKwkJcmV0dXJuOworCisJcnRjX3dha2Vfc2V0dXAoKTsKKwlhY3BpX3J0Y19pbmZvLndha2Vfb24gPSBydGNfd2FrZV9vbjsKKwlhY3BpX3J0Y19pbmZvLndha2Vfb2ZmID0gcnRjX3dha2Vfb2ZmOworCisJLyogd29ya2Fyb3VuZCBidWcgaW4gc29tZSBBQ1BJIHRhYmxlcyAqLworCWlmIChhY3BpX2dibF9GQURULm1vbnRoX2FsYXJtICYmICFhY3BpX2dibF9GQURULmRheV9hbGFybSkgeworCQlkZXZfZGJnKGRldiwgImJvZ3VzIEZBRFQgbW9udGhfYWxhcm0gKCVkKVxuIiwKKwkJCWFjcGlfZ2JsX0ZBRFQubW9udGhfYWxhcm0pOworCQlhY3BpX2dibF9GQURULm1vbnRoX2FsYXJtID0gMDsKKwl9CisKKwlhY3BpX3J0Y19pbmZvLnJ0Y19kYXlfYWxhcm0gPSBhY3BpX2dibF9GQURULmRheV9hbGFybTsKKwlhY3BpX3J0Y19pbmZvLnJ0Y19tb25fYWxhcm0gPSBhY3BpX2dibF9GQURULm1vbnRoX2FsYXJtOworCWFjcGlfcnRjX2luZm8ucnRjX2NlbnR1cnkgPSBhY3BpX2dibF9GQURULmNlbnR1cnk7CisKKwkvKiBOT1RFOiAgUzRfUlRDX1dBS0UgaXMgTk9UIGN1cnJlbnRseSB1c2VmdWwgdG8gTGludXggKi8KKwlpZiAoYWNwaV9nYmxfRkFEVC5mbGFncyAmIEFDUElfRkFEVF9TNF9SVENfV0FLRSkKKwkJZGV2X2luZm8oZGV2LCAiUlRDIGNhbiB3YWtlIGZyb20gUzRcbiIpOworCisJZGV2LT5wbGF0Zm9ybV9kYXRhID0gJmFjcGlfcnRjX2luZm87CisKKwkvKiBSVEMgYWx3YXlzIHdha2VzIGZyb20gUzEvUzIvUzMsIGFuZCBvZnRlbiBTNC9TVEQgKi8KKwlkZXZpY2VfaW5pdF93YWtldXAoZGV2LCAxKTsKK30KKworI2Vsc2UKKworc3RhdGljIHZvaWQgX19kZXZpbml0CitjbW9zX3dha2Vfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2KQoreworfQorCisjZW5kaWYKKwogI2lmZGVmCUNPTkZJR19QTlAKIAogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgpAQCAtOTIwLDYgKzEwNjEsOCBAQAogc3RhdGljIGludCBfX2RldmluaXQKIGNtb3NfcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpwbnAsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICppZCkKIHsKKwljbW9zX3dha2Vfc2V0dXAoJnBucC0+ZGV2KTsKKwogCWlmIChwbnBfcG9ydF9zdGFydChwbnAsMCkgPT0gMHg3MCAmJiAhcG5wX2lycV92YWxpZChwbnAsMCkpCiAJCS8qIFNvbWUgbWFjaGluZXMgY29udGFpbiBhIFBOUCBlbnRyeSBmb3IgdGhlIFJUQywgYnV0CiAJCSAqIGRvbid0IGRlZmluZSB0aGUgSVJRLiBJdCBzaG91bGQgYWx3YXlzIGJlIHNhZmUgdG8KQEAgLTk5Nyw2ICsxMTQwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgY21vc19wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCWNtb3Nfd2FrZV9zZXR1cCgmcGRldi0+ZGV2KTsKIAlyZXR1cm4gY21vc19kb19wcm9iZSgmcGRldi0+ZGV2LAogCQkJcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApLAogCQkJcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSk7CkBAIC0xMDMxLDI5ICsxMTc1LDMyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNtb3NfaW5pdCh2b2lkKQogeworCWludCByZXR2YWwgPSAwOworCiAjaWZkZWYJQ09ORklHX1BOUAotCWlmIChwbnBfcGxhdGZvcm1fZGV2aWNlcykKLQkJcmV0dXJuIHBucF9yZWdpc3Rlcl9kcml2ZXIoJmNtb3NfcG5wX2RyaXZlcik7Ci0JZWxzZQotCQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZjbW9zX3BsYXRmb3JtX2RyaXZlciwKLQkJCWNtb3NfcGxhdGZvcm1fcHJvYmUpOwotI2Vsc2UKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZjbW9zX3BsYXRmb3JtX2RyaXZlciwKLQkJCWNtb3NfcGxhdGZvcm1fcHJvYmUpOwotI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KKwlwbnBfcmVnaXN0ZXJfZHJpdmVyKCZjbW9zX3BucF9kcml2ZXIpOworI2VuZGlmCisKKwlpZiAoIWNtb3NfcnRjLmRldikKKwkJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZjbW9zX3BsYXRmb3JtX2RyaXZlciwKKwkJCQkJICAgICAgIGNtb3NfcGxhdGZvcm1fcHJvYmUpOworCisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gMDsKKworI2lmZGVmCUNPTkZJR19QTlAKKwlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmNtb3NfcG5wX2RyaXZlcik7CisjZW5kaWYKKwlyZXR1cm4gcmV0dmFsOwogfQogbW9kdWxlX2luaXQoY21vc19pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IGNtb3NfZXhpdCh2b2lkKQogewogI2lmZGVmCUNPTkZJR19QTlAKLQlpZiAocG5wX3BsYXRmb3JtX2RldmljZXMpCi0JCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmY21vc19wbnBfZHJpdmVyKTsKLQllbHNlCi0JCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjbW9zX3BsYXRmb3JtX2RyaXZlcik7Ci0jZWxzZQorCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmY21vc19wbnBfZHJpdmVyKTsKKyNlbmRpZgogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjbW9zX3BsYXRmb3JtX2RyaXZlcik7Ci0jZW5kaWYgLyogQ09ORklHX1BOUCAqLwogfQogbW9kdWxlX2V4aXQoY21vc19leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRldi5jIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCmluZGV4IDUyZTI3NDMuLjA3OWU5ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKQEAgLTQzMiw5ICs0MzIsMTUgQEAKIHsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0jaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTAotCWNsZWFyX3VpZShydGMpOwotI2VuZGlmCisJLyogV2Ugc2h1dCBkb3duIHRoZSByZXBlYXRpbmcgSVJRcyB0aGF0IHVzZXJzcGFjZSBlbmFibGVkLAorCSAqIHNpbmNlIG5vdGhpbmcgaXMgbGlzdGVuaW5nIHRvIHRoZW0uCisJICogIC0gVXBkYXRlIChVSUUpIC4uLiBjdXJyZW50bHkgb25seSBtYW5hZ2VkIHRocm91Z2ggaW9jdGxzCisJICogIC0gUGVyaW9kaWMgKFBJRSkgLi4uIGFsc28gdXNlZCB0aHJvdWdoIHJ0Y18qKCkgaW50ZXJmYWNlIGNhbGxzCisJICoKKwkgKiBMZWF2ZSB0aGUgYWxhcm0gYWxvbmU7IGl0IG1heSBiZSBzZXQgdG8gdHJpZ2dlciBhIHN5c3RlbSB3YWtldXAKKwkgKiBsYXRlciwgb3IgYmUgdXNlZCBieSBrZXJuZWwgY29kZSwgYW5kIGlzIGEgb25lLXNob3QgZXZlbnQgYW55d2F5LgorCSAqLworCXJ0Y19kZXZfaW9jdGwoZmlsZSwgUlRDX1VJRV9PRkYsIDApOwogCXJ0Y19pcnFfc2V0X3N0YXRlKHJ0YywgTlVMTCwgMCk7CiAKIAlpZiAocnRjLT5vcHMtPnJlbGVhc2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMjE2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjE2LmMKaW5kZXggMGIxNzc3MC4uOWEyMzRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTIxNi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEyMTYuYwpAQCAtODYsMTkgKzg2LDE5IEBACiAJZHMxMjE2X3N3aXRjaF9kc190b19jbG9jayhwcml2LT5pb2FkZHIpOwogCWRzMTIxNl9yZWFkKHByaXYtPmlvYWRkciwgKHU4ICopJnJlZ3MpOwogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4ocmVncy5zZWMpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHJlZ3MubWluKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihyZWdzLnNlYyk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocmVncy5taW4pOwogCWlmIChyZWdzLmhvdXIgJiBEUzEyMTZfSE9VUl8xMjI0KSB7CiAJCS8qIEFNL1BNIG1vZGUgKi8KLQkJdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJlZ3MuaG91ciAmIDB4MWYpOworCQl0bS0+dG1faG91ciA9IGJjZDJiaW4ocmVncy5ob3VyICYgMHgxZik7CiAJCWlmIChyZWdzLmhvdXIgJiBEUzEyMTZfSE9VUl9BTVBNKQogCQkJdG0tPnRtX2hvdXIgKz0gMTI7CiAJfSBlbHNlCi0JCXRtLT50bV9ob3VyID0gQkNEMkJJTihyZWdzLmhvdXIgJiAweDNmKTsKKwkJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJlZ3MuaG91ciAmIDB4M2YpOwogCXRtLT50bV93ZGF5ID0gKHJlZ3Mud2RheSAmIDcpIC0gMTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4ocmVncy5tZGF5ICYgMHgzZik7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4ocmVncy5tb250aCAmIDB4MWYpOwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihyZWdzLnllYXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihyZWdzLm1kYXkgJiAweDNmKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihyZWdzLm1vbnRoICYgMHgxZik7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHJlZ3MueWVhcik7CiAJaWYgKHRtLT50bV95ZWFyIDwgNzApCiAJCXRtLT50bV95ZWFyICs9IDEwMDsKIAlyZXR1cm4gMDsKQEAgLTExNCwxOSArMTE0LDE5IEBACiAJZHMxMjE2X3JlYWQocHJpdi0+aW9hZGRyLCAodTggKikmcmVncyk7CiAKIAlyZWdzLnRzZWMgPSAwOyAvKiBjbGVhciAwLjEgYW5kIDAuMDEgc2Vjb25kcyAqLwotCXJlZ3Muc2VjID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQlyZWdzLm1pbiA9IEJJTjJCQ0QodG0tPnRtX21pbik7CisJcmVncy5zZWMgPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCXJlZ3MubWluID0gYmluMmJjZCh0bS0+dG1fbWluKTsKIAlyZWdzLmhvdXIgJj0gRFMxMjE2X0hPVVJfMTIyNDsKIAlpZiAocmVncy5ob3VyICYmIHRtLT50bV9ob3VyID4gMTIpIHsKIAkJcmVncy5ob3VyIHw9IERTMTIxNl9IT1VSX0FNUE07CiAJCXRtLT50bV9ob3VyIC09IDEyOwogCX0KLQlyZWdzLmhvdXIgfD0gQklOMkJDRCh0bS0+dG1faG91cik7CisJcmVncy5ob3VyIHw9IGJpbjJiY2QodG0tPnRtX2hvdXIpOwogCXJlZ3Mud2RheSAmPSB+NzsKIAlyZWdzLndkYXkgfD0gdG0tPnRtX3dkYXk7Ci0JcmVncy5tZGF5ID0gQklOMkJDRCh0bS0+dG1fbWRheSk7Ci0JcmVncy5tb250aCA9IEJJTjJCQ0QodG0tPnRtX21vbik7Ci0JcmVncy55ZWFyID0gQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCk7CisJcmVncy5tZGF5ID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJcmVncy5tb250aCA9IGJpbjJiY2QodG0tPnRtX21vbik7CisJcmVncy55ZWFyID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CiAKIAlkczEyMTZfc3dpdGNoX2RzX3RvX2Nsb2NrKHByaXYtPmlvYWRkcik7CiAJZHMxMjE2X3dyaXRlKHByaXYtPmlvYWRkciwgKHU4ICopJnJlZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmY2IxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMKQEAgLTAsMCArMSw0MTAgQEAKKy8qCisgKiBEUzEyODYgUmVhbCBUaW1lIENsb2NrIGludGVyZmFjZSBmb3IgTGludXgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhvbWFzIEJvZ2VuZG9lcmZlcgorICoKKyAqIEJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieSBQYXVsIEdvcnRtYWtlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9kczEyODYuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4wIgorCitzdHJ1Y3QgZHMxMjg2X3ByaXYgeworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJdTMyIF9faW9tZW0gKnJ0Y3JlZ3M7CisJc2l6ZV90IHNpemU7CisJdW5zaWduZWQgbG9uZyBiYXNlYWRkcjsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdGF0aWMgaW5saW5lIHU4IGRzMTI4Nl9ydGNfcmVhZChzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYsIGludCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKCZwcml2LT5ydGNyZWdzW3JlZ10pICYgMHhmZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzMTI4Nl9ydGNfd3JpdGUoc3RydWN0IGRzMTI4Nl9wcml2ICpwcml2LCB1OCBkYXRhLCBpbnQgcmVnKQoreworCV9fcmF3X3dyaXRlbChkYXRhLCAmcHJpdi0+cnRjcmVnc1tyZWddKTsKK30KKworI2lmZGVmIENPTkZJR19SVENfSU5URl9ERVYKKworc3RhdGljIGludCBkczEyODZfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgdmFsOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFJUQ19BSUVfT0ZGOgorCQkvKiBNYXNrIGFsYXJtIGludC4gZW5hYi4gYml0CSovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXZhbCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfQ01EKTsKKwkJdmFsIHw9ICBSVENfVERNOworCQlkczEyODZfcnRjX3dyaXRlKHByaXYsIHZhbCwgUlRDX0NNRCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBSVENfQUlFX09OOgorCQkvKiBBbGxvdyBhbGFybSBpbnRlcnJ1cHRzLgkqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQl2YWwgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7CisJCXZhbCAmPSAgflJUQ19URE07CisJCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgdmFsLCBSVENfQ01EKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIFJUQ19XSUVfT0ZGOgorCQkvKiBNYXNrIHdhdGNoZG9nIGludC4gZW5hYi4gYml0CSovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXZhbCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfQ01EKTsKKwkJdmFsIHw9IFJUQ19XQU07CisJCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgdmFsLCBSVENfQ01EKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIFJUQ19XSUVfT046CisJCS8qIEFsbG93IHdhdGNoZG9nIGludGVycnVwdHMuCSovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXZhbCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfQ01EKTsKKwkJdmFsICY9IH5SVENfV0FNOworCQlkczEyODZfcnRjX3dyaXRlKHByaXYsIHZhbCwgUlRDX0NNRCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIGRzMTI4Nl9pb2N0bCAgICBOVUxMCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisKK3N0YXRpYyBpbnQgZHMxMjg2X3Byb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKK3sKKwlzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIG1vbnRoLCBjbWQsIGFtb2RlOworCWNvbnN0IGNoYXIgKnM7CisKKwltb250aCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfTU9OVEgpOworCXNlcV9wcmludGYoc2VxLAorCQkgICAib3NjaWxsYXRvclx0OiAlc1xuIgorCQkgICAic3F1YXJlX3dhdmVcdDogJXNcbiIsCisJCSAgIChtb250aCAmIFJUQ19FT1NDKSA/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIsCisJCSAgIChtb250aCAmIFJUQ19FU1FXKSA/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIpOworCisJYW1vZGUgPSAoKGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfTUlOVVRFU19BTEFSTSkgJiAweDgwKSA+PiA1KSB8CisJCSgoZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19IT1VSU19BTEFSTSkgJiAweDgwKSA+PiA2KSB8CisJCSgoZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19EQVlfQUxBUk0pICYgMHg4MCkgPj4gNyk7CisJc3dpdGNoIChhbW9kZSkgeworCWNhc2UgNzoKKwkJcyA9ICJlYWNoIG1pbnV0ZSI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcyA9ICJtaW51dGVzIG1hdGNoIjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzID0gImhvdXJzIGFuZCBtaW51dGVzIG1hdGNoIjsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlzID0gImRheXMsIGhvdXJzIGFuZCBtaW51dGVzIG1hdGNoIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcyA9ICJpbnZhbGlkIjsKKwkJYnJlYWs7CisJfQorCXNlcV9wcmludGYoc2VxLCAiYWxhcm1fbW9kZVx0OiAlc1xuIiwgcyk7CisKKwljbWQgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7CisJc2VxX3ByaW50ZihzZXEsCisJCSAgICJhbGFybV9lbmFibGVcdDogJXNcbiIKKwkJICAgIndkb2dfYWxhcm1cdDogJXNcbiIKKwkJICAgImFsYXJtX21hc2tcdDogJXNcbiIKKwkJICAgIndkb2dfYWxhcm1fbWFza1x0OiAlc1xuIgorCQkgICAiaW50ZXJydXB0X21vZGVcdDogJXNcbiIKKwkJICAgIklOVEJfbW9kZVx0OiAlc19hY3RpdmVcbiIKKwkJICAgImludGVycnVwdF9waW5zXHQ6ICVzXG4iLAorCQkgICAoY21kICYgUlRDX1RERikgPyAieWVzIiA6ICJubyIsCisJCSAgIChjbWQgJiBSVENfV0FGKSA/ICJ5ZXMiIDogIm5vIiwKKwkJICAgKGNtZCAmIFJUQ19URE0pID8gImRpc2FibGVkIiA6ICJlbmFibGVkIiwKKwkJICAgKGNtZCAmIFJUQ19XQU0pID8gImRpc2FibGVkIiA6ICJlbmFibGVkIiwKKwkJICAgKGNtZCAmIFJUQ19QVV9MVkwpID8gInB1bHNlIiA6ICJsZXZlbCIsCisJCSAgIChjbWQgJiBSVENfSUJIX0xPKSA/ICJsb3ciIDogImhpZ2giLAorCQkgICAoY21kICYgUlRDX0lQU1cpID8gInVuc3dhcHBlZCIgOiAic3dhcHBlZCIpOworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBkczEyODZfcHJvYyAgICAgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgZHMxMjg2X3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJc3RydWN0IGRzMTI4Nl9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2w7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHVpcF93YXRjaGRvZyA9IGppZmZpZXM7CisKKwkvKgorCSAqIHJlYWQgUlRDIG9uY2UgYW55IHVwZGF0ZSBpbiBwcm9ncmVzcyBpcyBkb25lLiBUaGUgdXBkYXRlCisJICogY2FuIHRha2UganVzdCBvdmVyIDJtcy4gV2Ugd2FpdCAxMCB0byAyMG1zLiBUaGVyZSBpcyBubyBuZWVkIHRvCisJICogdG8gcG9sbC13YWl0ICh1cCB0byAxcyAtIGVlY2NjaCkgZm9yIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgUlRDX1VJUC4KKwkgKiBJZiB5b3UgbmVlZCB0byBrbm93ICpleGFjdGx5KiB3aGVuIGEgc2Vjb25kIGhhcyBzdGFydGVkLCBlbmFibGUKKwkgKiBwZXJpb2RpYyB1cGRhdGUgY29tcGxldGUgaW50ZXJydXB0cywgKHZpYSBpb2N0bCkgYW5kIHRoZW4KKwkgKiBpbW1lZGlhdGVseSByZWFkIC9kZXYvcnRjIHdoaWNoIHdpbGwgYmxvY2sgdW50aWwgeW91IGdldCB0aGUgSVJRLgorCSAqIE9uY2UgdGhlIHJlYWQgY2xlYXJzLCByZWFkIHRoZSBSVEMgdGltZSAoYWdhaW4gdmlhIGlvY3RsKS4gRWFzeS4KKwkgKi8KKworCWlmIChkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCkgJiBSVENfVEUpCisJCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB1aXBfd2F0Y2hkb2cgKyAyKkhaLzEwMCkpCisJCQliYXJyaWVyKCk7CisKKwkvKgorCSAqIE9ubHkgdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZnJvbSB0aGUgUlRDIGFyZSBzZXQuIFdlIGxlYXZlCisJICogdG1fd2RheSwgdG1feWRheSBhbmQgdG1faXNkc3QgdW50b3VjaGVkLiBFdmVuIHRob3VnaCB0aGUKKwkgKiBSVEMgaGFzIFJUQ19EQVlfT0ZfV0VFSywgd2UgaWdub3JlIGl0LCBhcyBpdCBpcyBvbmx5IHVwZGF0ZWQKKwkgKiBieSB0aGUgUlRDIHdoZW4gaW5pdGlhbGx5IHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc2F2ZV9jb250cm9sID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19DTUQpOworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgKHNhdmVfY29udHJvbHxSVENfVEUpLCBSVENfQ01EKTsKKworCXRtLT50bV9zZWMgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX1NFQ09ORFMpOworCXRtLT50bV9taW4gPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX01JTlVURVMpOworCXRtLT50bV9ob3VyID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19IT1VSUykgJiAweDNmOworCXRtLT50bV9tZGF5ID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19EQVRFKTsKKwl0bS0+dG1fbW9uID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19NT05USCkgJiAweDFmOworCXRtLT50bV95ZWFyID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19ZRUFSKTsKKworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgc2F2ZV9jb250cm9sLCBSVENfQ01EKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwl0bS0+dG1fc2VjID0gYmNkMmJpbih0bS0+dG1fc2VjKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbih0bS0+dG1fbWluKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4odG0tPnRtX2hvdXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbih0bS0+dG1fbWRheSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4odG0tPnRtX21vbik7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHRtLT50bV95ZWFyKTsKKworCS8qCisJICogQWNjb3VudCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBob3cgdGhlIFJUQyB1c2VzIHRoZSB2YWx1ZXMKKwkgKiBhbmQgaG93IHRoZXkgYXJlIGRlZmluZWQgaW4gYSBzdHJ1Y3QgcnRjX3RpbWU7CisJICovCisJaWYgKHRtLT50bV95ZWFyIDwgNDUpCisJCXRtLT50bV95ZWFyICs9IDMwOworCXRtLT50bV95ZWFyICs9IDQwOworCWlmICh0bS0+dG1feWVhciA8IDcwKQorCQl0bS0+dG1feWVhciArPSAxMDA7CisKKwl0bS0+dG1fbW9uLS07CisKKwlyZXR1cm4gcnRjX3ZhbGlkX3RtKHRtKTsKK30KKworc3RhdGljIGludCBkczEyODZfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBkczEyODZfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGNoYXIgbW9uLCBkYXksIGhycywgbWluLCBzZWM7CisJdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2w7CisJdW5zaWduZWQgaW50IHlyczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJeXJzID0gdG0tPnRtX3llYXIgKyAxOTAwOworCW1vbiA9IHRtLT50bV9tb24gKyAxOyAgIC8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLworCWRheSA9IHRtLT50bV9tZGF5OworCWhycyA9IHRtLT50bV9ob3VyOworCW1pbiA9IHRtLT50bV9taW47CisJc2VjID0gdG0tPnRtX3NlYzsKKworCWlmICh5cnMgPCAxOTcwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXlycyAtPSAxOTQwOworCWlmICh5cnMgPiAyNTUpICAgIC8qIFRoZXkgYXJlIHVuc2lnbmVkICovCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHlycyA+PSAxMDApCisJCXlycyAtPSAxMDA7CisKKwlzZWMgPSBiaW4yYmNkKHNlYyk7CisJbWluID0gYmluMmJjZChtaW4pOworCWhycyA9IGJpbjJiY2QoaHJzKTsKKwlkYXkgPSBiaW4yYmNkKGRheSk7CisJbW9uID0gYmluMmJjZChtb24pOworCXlycyA9IGJpbjJiY2QoeXJzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc2F2ZV9jb250cm9sID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19DTUQpOworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgKHNhdmVfY29udHJvbHxSVENfVEUpLCBSVENfQ01EKTsKKworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgeXJzLCBSVENfWUVBUik7CisJZHMxMjg2X3J0Y193cml0ZShwcml2LCBtb24sIFJUQ19NT05USCk7CisJZHMxMjg2X3J0Y193cml0ZShwcml2LCBkYXksIFJUQ19EQVRFKTsKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIGhycywgUlRDX0hPVVJTKTsKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIG1pbiwgUlRDX01JTlVURVMpOworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgc2VjLCBSVENfU0VDT05EUyk7CisJZHMxMjg2X3J0Y193cml0ZShwcml2LCAwLCBSVENfSFVORFJFRFRIX1NFQ09ORCk7CisKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIHNhdmVfY29udHJvbCwgUlRDX0NNRCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzMTI4Nl9yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsbSkKK3sKKwlzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIGNtZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBPbmx5IHRoZSB2YWx1ZXMgdGhhdCB3ZSByZWFkIGZyb20gdGhlIFJUQyBhcmUgc2V0LiBUaGF0CisJICogbWVhbnMgb25seSB0bV93ZGF5LCB0bV9ob3VyLCB0bV9taW4uCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlhbG0tPnRpbWUudG1fbWluID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19NSU5VVEVTX0FMQVJNKSAmIDB4N2Y7CisJYWxtLT50aW1lLnRtX2hvdXIgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0hPVVJTX0FMQVJNKSAgJiAweDFmOworCWFsbS0+dGltZS50bV93ZGF5ID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19EQVlfQUxBUk0pICAgICYgMHgwNzsKKwljbWQgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJYWxtLT50aW1lLnRtX21pbiA9IGJjZDJiaW4oYWxtLT50aW1lLnRtX21pbik7CisJYWxtLT50aW1lLnRtX2hvdXIgPSBiY2QyYmluKGFsbS0+dGltZS50bV9ob3VyKTsKKwlhbG0tPnRpbWUudG1fc2VjID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkczEyODZfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsbSkKK3sKKwlzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIGhycywgbWluLCBzZWM7CisKKwlocnMgPSBhbG0tPnRpbWUudG1faG91cjsKKwltaW4gPSBhbG0tPnRpbWUudG1fbWluOworCXNlYyA9IGFsbS0+dGltZS50bV9zZWM7CisKKwlpZiAoaHJzID49IDI0KQorCQlocnMgPSAweGZmOworCisJaWYgKG1pbiA+PSA2MCkKKwkJbWluID0gMHhmZjsKKworCWlmIChzZWMgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltaW4gPSBiaW4yYmNkKG1pbik7CisJaHJzID0gYmluMmJjZChocnMpOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIGhycywgUlRDX0hPVVJTX0FMQVJNKTsKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIG1pbiwgUlRDX01JTlVURVNfQUxBUk0pOworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgZHMxMjg2X29wcyA9IHsKKwkuaW9jdGwgICAJPSBkczEyODZfaW9jdGwsCisJLnByb2MgICAJPSBkczEyODZfcHJvYywKKwkucmVhZF90aW1lCT0gZHMxMjg2X3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSBkczEyODZfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0JPSBkczEyODZfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtCT0gZHMxMjg2X3NldF9hbGFybSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRzMTI4Nl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGRzMTI4Nl9wcml2ICpwcml2OworCWludCByZXQgPSAwOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkczEyODZfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5zaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBwcml2LT5zaXplLCBwZGV2LT5uYW1lKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKwlwcml2LT5iYXNlYWRkciA9IHJlcy0+c3RhcnQ7CisJcHJpdi0+cnRjcmVncyA9IGlvcmVtYXAocHJpdi0+YmFzZWFkZHIsIHByaXYtPnNpemUpOworCWlmICghcHJpdi0+cnRjcmVncykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoImRzMTI4NiIsICZwZGV2LT5kZXYsCisJCQkJICAmZHMxMjg2X29wcywgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkgeworCQlyZXQgPSBQVFJfRVJSKHJ0Yyk7CisJCWdvdG8gb3V0OworCX0KKwlwcml2LT5ydGMgPSBydGM7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisJcmV0dXJuIDA7CisKK291dDoKKwlpZiAocHJpdi0+cnRjKQorCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocHJpdi0+cnRjKTsKKwlpZiAocHJpdi0+cnRjcmVncykKKwkJaW91bm1hcChwcml2LT5ydGNyZWdzKTsKKwlpZiAocHJpdi0+YmFzZWFkZHIpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihwcml2LT5iYXNlYWRkciwgcHJpdi0+c2l6ZSk7CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZHMxMjg2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkczEyODZfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHByaXYtPnJ0Yyk7CisJaW91bm1hcChwcml2LT5ydGNyZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocHJpdi0+YmFzZWFkZHIsIHByaXYtPnNpemUpOworCWtmcmVlKHByaXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkczEyODZfcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJydGMtZHMxMjg2IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gZHMxMjg2X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZHMxMjg2X3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkczEyODZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRzMTI4Nl9wbGF0Zm9ybV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHMxMjg2X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHMxMjg2X3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIlRob21hcyBCb2dlbmRvZXJmZXIgPHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRTMTI4NiBSVEMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnJ0Yy1kczEyODYiKTsKKworbW9kdWxlX2luaXQoZHMxMjg2X2luaXQpOworbW9kdWxlX2V4aXQoZHMxMjg2X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwMi5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwMi5jCmluZGV4IGI5Mzk3ODEuLjE4NDU1NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzAyLmMKQEAgLTQwLDcgKzQwLDcgQEAKICNkZWZpbmUJUlRDX1NDTEsJMHgwNDAwCiAKICNpZmRlZiBDT05GSUdfU0hfU0VDVVJFRURHRTU0MTAKLSNpbmNsdWRlIDxhc20vc25hcGdlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL3NuYXBnZWFyLmg+CiAjZGVmaW5lIHNldF9kcCh4KQlTRUNVUkVFREdFX1dSSVRFX0lPUE9SVCh4LCAweDFjMDApCiAjZGVmaW5lIGdldF9kcCgpCVNFQ1VSRUVER0VfUkVBRF9JT1BPUlQoKQogI2Vsc2UKQEAgLTEwNywxMyArMTA3LDEzIEBACiAKIAlzcGluX2xvY2tfaXJxKCZydGMtPmxvY2spOwogCi0JdG0tPnRtX3NlYwk9IEJDRDJCSU4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX1NFQykpOwotCXRtLT50bV9taW4JPSBCQ0QyQklOKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9NSU4pKTsKLQl0bS0+dG1faG91cgk9IEJDRDJCSU4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX0hPVVIpKTsKLQl0bS0+dG1fd2RheQk9IEJDRDJCSU4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX0RBWSkpOwotCXRtLT50bV9tZGF5CT0gQkNEMkJJTihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfREFURSkpOwotCXRtLT50bV9tb24JPSBCQ0QyQklOKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9NT04pKSAtIDE7Ci0JdG0tPnRtX3llYXIJPSBCQ0QyQklOKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9ZRUFSKSk7CisJdG0tPnRtX3NlYwk9IGJjZDJiaW4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX1NFQykpOworCXRtLT50bV9taW4JPSBiY2QyYmluKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9NSU4pKTsKKwl0bS0+dG1faG91cgk9IGJjZDJiaW4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX0hPVVIpKTsKKwl0bS0+dG1fd2RheQk9IGJjZDJiaW4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX0RBWSkpOworCXRtLT50bV9tZGF5CT0gYmNkMmJpbihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfREFURSkpOworCXRtLT50bV9tb24JPSBiY2QyYmluKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9NT04pKSAtIDE7CisJdG0tPnRtX3llYXIJPSBiY2QyYmluKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9ZRUFSKSk7CiAKIAlpZiAodG0tPnRtX3llYXIgPCA3MCkKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwpAQCAtMTQxLDEzICsxNDEsMTMgQEAKIAkvKiBTdG9wIFJUQyAqLwogCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfU0VDLCBkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfU0VDKSB8IDB4ODApOwogCi0JZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9TRUMsIEJJTjJCQ0QodG0tPnRtX3NlYykpOwotCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfTUlOLCBCSU4yQkNEKHRtLT50bV9taW4pKTsKLQlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX0hPVVIsIEJJTjJCQ0QodG0tPnRtX2hvdXIpKTsKLQlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX0RBWSwgQklOMkJDRCh0bS0+dG1fd2RheSkpOwotCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfREFURSwgQklOMkJDRCh0bS0+dG1fbWRheSkpOwotCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfTU9OLCBCSU4yQkNEKHRtLT50bV9tb24gKyAxKSk7Ci0JZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9ZRUFSLCBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSk7CisJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9TRUMsIGJpbjJiY2QodG0tPnRtX3NlYykpOworCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfTUlOLCBiaW4yYmNkKHRtLT50bV9taW4pKTsKKwlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX0hPVVIsIGJpbjJiY2QodG0tPnRtX2hvdXIpKTsKKwlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX0RBWSwgYmluMmJjZCh0bS0+dG1fd2RheSkpOworCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfREFURSwgYmluMmJjZCh0bS0+dG1fbWRheSkpOworCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfTU9OLCBiaW4yYmNkKHRtLT50bV9tb24gKyAxKSk7CisJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9ZRUFSLCBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKSk7CiAKIAkvKiBTdGFydCBSVEMgKi8KIAlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX1NFQywgZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX1NFQykgJiB+MHg4MCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKaW5kZXggYjkxZDAyYS4uZmMzNzJkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYwpAQCAtMTE0LDEwICsxMTQsMTAgQEAKIAkJCWhvdXIgPSAxMjsKIAkJCWJjZCAmPSB+RFMxMzA1X0hSX1BNOwogCQl9Ci0JCWhvdXIgKz0gQkNEMkJJTihiY2QpOworCQlob3VyICs9IGJjZDJiaW4oYmNkKTsKIAkJcmV0dXJuIGhvdXIgLSAxOwogCX0KLQlyZXR1cm4gQkNEMkJJTihiY2QpOworCXJldHVybiBiY2QyYmluKGJjZCk7CiB9CiAKIHN0YXRpYyB1OCBob3VyMmJjZChib29sIGhyMTIsIGludCBob3VyKQpAQCAtMTI1LDExICsxMjUsMTEgQEAKIAlpZiAoaHIxMikgewogCQlob3VyKys7CiAJCWlmIChob3VyIDw9IDEyKQotCQkJcmV0dXJuIERTMTMwNV9IUl8xMiB8IEJJTjJCQ0QoaG91cik7CisJCQlyZXR1cm4gRFMxMzA1X0hSXzEyIHwgYmluMmJjZChob3VyKTsKIAkJaG91ciAtPSAxMjsKLQkJcmV0dXJuIERTMTMwNV9IUl8xMiB8IERTMTMwNV9IUl9QTSB8IEJJTjJCQ0QoaG91cik7CisJCXJldHVybiBEUzEzMDVfSFJfMTIgfCBEUzEzMDVfSFJfUE0gfCBiaW4yYmNkKGhvdXIpOwogCX0KLQlyZXR1cm4gQklOMkJDRChob3VyKTsKKwlyZXR1cm4gYmluMmJjZChob3VyKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTIwNiwxMyArMjA2LDEzIEBACiAJCWJ1Zls0XSwgYnVmWzVdLCBidWZbNl0pOwogCiAJLyogRGVjb2RlIHRoZSByZWdpc3RlcnMgKi8KLQl0aW1lLT50bV9zZWMgPSBCQ0QyQklOKGJ1ZltEUzEzMDVfU0VDXSk7Ci0JdGltZS0+dG1fbWluID0gQkNEMkJJTihidWZbRFMxMzA1X01JTl0pOworCXRpbWUtPnRtX3NlYyA9IGJjZDJiaW4oYnVmW0RTMTMwNV9TRUNdKTsKKwl0aW1lLT50bV9taW4gPSBiY2QyYmluKGJ1ZltEUzEzMDVfTUlOXSk7CiAJdGltZS0+dG1faG91ciA9IGJjZDJob3VyKGJ1ZltEUzEzMDVfSE9VUl0pOwogCXRpbWUtPnRtX3dkYXkgPSBidWZbRFMxMzA1X1dEQVldIC0gMTsKLQl0aW1lLT50bV9tZGF5ID0gQkNEMkJJTihidWZbRFMxMzA1X01EQVldKTsKLQl0aW1lLT50bV9tb24gPSBCQ0QyQklOKGJ1ZltEUzEzMDVfTU9OXSkgLSAxOwotCXRpbWUtPnRtX3llYXIgPSBCQ0QyQklOKGJ1ZltEUzEzMDVfWUVBUl0pICsgMTAwOworCXRpbWUtPnRtX21kYXkgPSBiY2QyYmluKGJ1ZltEUzEzMDVfTURBWV0pOworCXRpbWUtPnRtX21vbiA9IGJjZDJiaW4oYnVmW0RTMTMwNV9NT05dKSAtIDE7CisJdGltZS0+dG1feWVhciA9IGJjZDJiaW4oYnVmW0RTMTMwNV9ZRUFSXSkgKyAxMDA7CiAKIAlkZXZfdmRiZyhkZXYsICIlcyBzZWNzPSVkLCBtaW5zPSVkLCAiCiAJCSJob3Vycz0lZCwgbWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLApAQCAtMjM5LDEzICsyMzksMTMgQEAKIAkvKiBXcml0ZSByZWdpc3RlcnMgc3RhcnRpbmcgYXQgdGhlIGZpcnN0IHRpbWUvZGF0ZSBhZGRyZXNzLiAqLwogCSpicCsrID0gRFMxMzA1X1dSSVRFIHwgRFMxMzA1X1NFQzsKIAotCSpicCsrID0gQklOMkJDRCh0aW1lLT50bV9zZWMpOwotCSpicCsrID0gQklOMkJDRCh0aW1lLT50bV9taW4pOworCSpicCsrID0gYmluMmJjZCh0aW1lLT50bV9zZWMpOworCSpicCsrID0gYmluMmJjZCh0aW1lLT50bV9taW4pOwogCSpicCsrID0gaG91cjJiY2QoZHMxMzA1LT5ocjEyLCB0aW1lLT50bV9ob3VyKTsKIAkqYnArKyA9ICh0aW1lLT50bV93ZGF5IDwgNykgPyAodGltZS0+dG1fd2RheSArIDEpIDogMTsKLQkqYnArKyA9IEJJTjJCQ0QodGltZS0+dG1fbWRheSk7Ci0JKmJwKysgPSBCSU4yQkNEKHRpbWUtPnRtX21vbiArIDEpOwotCSpicCsrID0gQklOMkJDRCh0aW1lLT50bV95ZWFyIC0gMTAwKTsKKwkqYnArKyA9IGJpbjJiY2QodGltZS0+dG1fbWRheSk7CisJKmJwKysgPSBiaW4yYmNkKHRpbWUtPnRtX21vbiArIDEpOworCSpicCsrID0gYmluMmJjZCh0aW1lLT50bV95ZWFyIC0gMTAwKTsKIAogCWRldl9kYmcoZGV2LCAiJXM6ICUwMnggJTAyeCAlMDJ4LCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAogCQkid3JpdGUiLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLApAQCAtMzI5LDggKzMyOSw4IEBACiAJICogZmlsbCBpbiB0aGUgcmVzdCAuLi4gYW5kIGFsc28gaGFuZGxlIHJvbGxvdmVyIHRvIHRvbW9ycm93IHdoZW4KIAkgKiB0aGF0J3MgbmVlZGVkLgogCSAqLwotCWFsbS0+dGltZS50bV9zZWMgPSBCQ0QyQklOKGJ1ZltEUzEzMDVfU0VDXSk7Ci0JYWxtLT50aW1lLnRtX21pbiA9IEJDRDJCSU4oYnVmW0RTMTMwNV9NSU5dKTsKKwlhbG0tPnRpbWUudG1fc2VjID0gYmNkMmJpbihidWZbRFMxMzA1X1NFQ10pOworCWFsbS0+dGltZS50bV9taW4gPSBiY2QyYmluKGJ1ZltEUzEzMDVfTUlOXSk7CiAJYWxtLT50aW1lLnRtX2hvdXIgPSBiY2QyaG91cihidWZbRFMxMzA1X0hPVVJdKTsKIAlhbG0tPnRpbWUudG1fbWRheSA9IC0xOwogCWFsbS0+dGltZS50bV9tb24gPSAtMTsKQEAgLTM4Nyw4ICszODcsOCBAQAogCiAJLyogd3JpdGUgYWxhcm0gKi8KIAlidWZbMF0gPSBEUzEzMDVfV1JJVEUgfCBEUzEzMDVfQUxNMChEUzEzMDVfU0VDKTsKLQlidWZbMSArIERTMTMwNV9TRUNdID0gQklOMkJDRChhbG0tPnRpbWUudG1fc2VjKTsKLQlidWZbMSArIERTMTMwNV9NSU5dID0gQklOMkJDRChhbG0tPnRpbWUudG1fbWluKTsKKwlidWZbMSArIERTMTMwNV9TRUNdID0gYmluMmJjZChhbG0tPnRpbWUudG1fc2VjKTsKKwlidWZbMSArIERTMTMwNV9NSU5dID0gYmluMmJjZChhbG0tPnRpbWUudG1fbWluKTsKIAlidWZbMSArIERTMTMwNV9IT1VSXSA9IGhvdXIyYmNkKGRzMTMwNS0+aHIxMiwgYWxtLT50aW1lLnRtX2hvdXIpOwogCWJ1ZlsxICsgRFMxMzA1X1dEQVldID0gRFMxMzA1X0FMTV9ESVNBQkxFOwogCkBAIC02MDYsNyArNjA2LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBudnJhbSA9IHsKIAkuYXR0ci5uYW1lCT0gIm52cmFtIiwKIAkuYXR0ci5tb2RlCT0gU19JUlVHTyB8IFNfSVdVU1IsCi0JLmF0dHIub3duZXIJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSBkczEzMDVfbnZyYW1fcmVhZCwKIAkud3JpdGUJCT0gZHMxMzA1X252cmFtX3dyaXRlLAogCS5zaXplCQk9IERTMTMwNV9OVlJBTV9MRU4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKaW5kZXggYmJmOTdlNi4uMTYyMzMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYwpAQCAtMjMsMTAgKzIzLDYgQEAKICAqIHRvIGhhdmUgc2V0IHRoZSBjaGlwIHVwIGFzIGEgY2xvY2sgKHR1cm5pbmcgb24gdGhlIG9zY2lsbGF0b3IgYW5kCiAgKiBzZXR0aW5nIHRoZSBkYXRlIGFuZCB0aW1lKSwgTGludXggY2FuIGlnbm9yZSB0aGUgbm9uLWNsb2NrIGZlYXR1cmVzLgogICogVGhhdCdzIGEgbmF0dXJhbCBqb2IgZm9yIGEgZmFjdG9yeSBvciByZXBhaXIgYmVuY2guCi0gKgotICogVGhpcyBpcyBjdXJyZW50bHkgYSBzaW1wbGUgbm8tYWxhcm1zIGRyaXZlci4gIElmIHlvdXIgYm9hcmQgaGFzIHRoZQotICogYWxhcm0gaXJxIHdpcmVkIHVwIG9uIGEgZHMxMzM3IG9yIGRzMTMzOSwgYW5kIHlvdSB3YW50IHRvIHVzZSB0aGF0LAotICogdGhlbiBsb29rIGF0IHRoZSBydGMtcnM1YzM3MiBkcml2ZXIgZm9yIGNvZGUgdG8gc3RlYWwuLi4KICAqLwogZW51bSBkc190eXBlIHsKIAlkc18xMzA3LApAQCAtNjcsNiArNjMsNyBAQAogIwlkZWZpbmUgRFMxMzA3X0JJVF9SUzAJCTB4MDEKICNkZWZpbmUgRFMxMzM3X1JFR19DT05UUk9MCTB4MGUKICMJZGVmaW5lIERTMTMzN19CSVRfbkVPU0MJCTB4ODAKKyMJZGVmaW5lIERTMTMzOV9CSVRfQkJTUUkJCTB4MjAKICMJZGVmaW5lIERTMTMzN19CSVRfUlMyCQkweDEwCiAjCWRlZmluZSBEUzEzMzdfQklUX1JTMQkJMHgwOAogIwlkZWZpbmUgRFMxMzM3X0JJVF9JTlRDTgkJMHgwNApAQCAtODMsMTkgKzgwLDIyIEBACiAjCWRlZmluZSBEUzEzMzdfQklUX09TRgkJMHg4MAogIwlkZWZpbmUgRFMxMzM3X0JJVF9BMkkJCTB4MDIKICMJZGVmaW5lIERTMTMzN19CSVRfQTFJCQkweDAxCisjZGVmaW5lIERTMTMzOV9SRUdfQUxBUk0xX1NFQ1MJMHgwNwogI2RlZmluZSBEUzEzMzlfUkVHX1RSSUNLTEUJMHgxMAogCiAKIAogc3RydWN0IGRzMTMwNyB7CiAJdTgJCQlyZWdfYWRkcjsKLQlib29sCQkJaGFzX252cmFtOwotCXU4CQkJcmVnc1s4XTsKKwl1OAkJCXJlZ3NbMTFdOwogCWVudW0gZHNfdHlwZQkJdHlwZTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKyNkZWZpbmUgSEFTX05WUkFNCTAJCS8qIGJpdCAwID09IHN5c2ZzIGZpbGUgYWN0aXZlICovCisjZGVmaW5lIEhBU19BTEFSTQkxCQkvKiBiaXQgMSA9PSBpcnEgY2xhaW1lZCAqLwogCXN0cnVjdCBpMmNfbXNnCQltc2dbMl07CiAJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKLQlzdHJ1Y3QgaTJjX2NsaWVudAlkZXY7CiAJc3RydWN0IHJ0Y19kZXZpY2UJKnJ0YzsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIH07CiAKIHN0cnVjdCBjaGlwX2Rlc2MgewpAQCAtMTMyLDEyICsxMzIsNzkgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgZHMxMzA3X2lkKTsKIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFRoZSBJUlEgbG9naWMgaW5jbHVkZXMgYSAicmVhbCIgaGFuZGxlciBydW5uaW5nIGluIElSUSBjb250ZXh0IGp1c3QKKyAqIGxvbmcgZW5vdWdoIHRvIHNjaGVkdWxlIHRoaXMgd29ya3F1ZXVlIGVudHJ5LiAgIFdlIG5lZWQgYSB0YXNrIGNvbnRleHQKKyAqIHRvIHRhbGsgdG8gdGhlIFJUQywgc2luY2UgSTJDIEkvTyBjYWxscyByZXF1aXJlIHRoYXQ7IGFuZCBkaXNhYmxlIHRoZQorICogSVJRIHVudGlsIHdlIGNsZWFyIGl0cyBzdGF0dXMgb24gdGhlIGNoaXAsIHNvIHRoYXQgdGhpcyBoYW5kbGVyIGNhbgorICogd29yayB3aXRoIGFueSB0eXBlIG9mIHRyaWdnZXJpbmcgKG5vdCBqdXN0IGZhbGxpbmcgZWRnZSkuCisgKgorICogVGhlIGRzMTMzNyBhbmQgZHMxMzM5IGJvdGggaGF2ZSB0d28gYWxhcm1zLCBidXQgd2Ugb25seSB1c2UgdGhlIGZpcnN0CisgKiBvbmUgKHdpdGggYSAic2Vjb25kcyIgZmllbGQpLiAgRm9yIGRzMTMzNyB3ZSBleHBlY3QgbklOVEEgaXMgb3VyIGFsYXJtCisgKiBzaWduYWw7IGRzMTMzOSBjaGlwcyBoYXZlIG9ubHkgb25lIGFsYXJtIHNpZ25hbC4KKyAqLworc3RhdGljIHZvaWQgZHMxMzA3X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkczEzMDcJCSpkczEzMDc7CisJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKKwlzdHJ1Y3QgbXV0ZXgJCSpsb2NrOworCWludAkJCXN0YXQsIGNvbnRyb2w7CisKKwlkczEzMDcgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRzMTMwNywgd29yayk7CisJY2xpZW50ID0gZHMxMzA3LT5jbGllbnQ7CisJbG9jayA9ICZkczEzMDctPnJ0Yy0+b3BzX2xvY2s7CisKKwltdXRleF9sb2NrKGxvY2spOworCXN0YXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX1NUQVRVUyk7CisJaWYgKHN0YXQgPCAwKQorCQlnb3RvIG91dDsKKworCWlmIChzdGF0ICYgRFMxMzM3X0JJVF9BMUkpIHsKKwkJc3RhdCAmPSB+RFMxMzM3X0JJVF9BMUk7CisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX1NUQVRVUywgc3RhdCk7CisKKwkJY29udHJvbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCk7CisJCWlmIChjb250cm9sIDwgMCkKKwkJCWdvdG8gb3V0OworCisJCWNvbnRyb2wgJj0gfkRTMTMzN19CSVRfQTFJRTsKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCwgY29udHJvbCk7CisKKwkJLyogcnRjX3VwZGF0ZV9pcnEoKSBhc3N1bWVzIHRoYXQgaXQgaXMgY2FsbGVkCisJCSAqIGZyb20gSVJRLWRpc2FibGVkIGNvbnRleHQuCisJCSAqLworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlydGNfdXBkYXRlX2lycShkczEzMDctPnJ0YywgMSwgUlRDX0FGIHwgUlRDX0lSUUYpOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJfQorCitvdXQ6CisJaWYgKHRlc3RfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpKQorCQllbmFibGVfaXJxKGNsaWVudC0+aXJxKTsKKwltdXRleF91bmxvY2sobG9jayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkczEzMDdfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gZGV2X2lkOworCXN0cnVjdCBkczEzMDcJCSpkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCXNjaGVkdWxlX3dvcmsoJmRzMTMwNy0+d29yayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBzdGF0aWMgaW50IGRzMTMwN19nZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdCkKIHsKIAlzdHJ1Y3QgZHMxMzA3CSpkczEzMDcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQJCXRtcDsKIAogCS8qIHJlYWQgdGhlIFJUQyBkYXRlIGFuZCB0aW1lIHJlZ2lzdGVycyBhbGwgYXQgb25jZSAqLworCWRzMTMwNy0+cmVnX2FkZHIgPSAwOwogCWRzMTMwNy0+bXNnWzFdLmZsYWdzID0gSTJDX01fUkQ7CiAJZHMxMzA3LT5tc2dbMV0ubGVuID0gNzsKIApAQCAtMTU1LDE3ICsyMjIsMTcgQEAKIAkJCWRzMTMwNy0+cmVnc1s0XSwgZHMxMzA3LT5yZWdzWzVdLAogCQkJZHMxMzA3LT5yZWdzWzZdKTsKIAotCXQtPnRtX3NlYyA9IEJDRDJCSU4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfU0VDU10gJiAweDdmKTsKLQl0LT50bV9taW4gPSBCQ0QyQklOKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01JTl0gJiAweDdmKTsKKwl0LT50bV9zZWMgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1NFQ1NdICYgMHg3Zik7CisJdC0+dG1fbWluID0gYmNkMmJpbihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NSU5dICYgMHg3Zik7CiAJdG1wID0gZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfSE9VUl0gJiAweDNmOwotCXQtPnRtX2hvdXIgPSBCQ0QyQklOKHRtcCk7Ci0JdC0+dG1fd2RheSA9IEJDRDJCSU4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfV0RBWV0gJiAweDA3KSAtIDE7Ci0JdC0+dG1fbWRheSA9IEJDRDJCSU4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTURBWV0gJiAweDNmKTsKKwl0LT50bV9ob3VyID0gYmNkMmJpbih0bXApOworCXQtPnRtX3dkYXkgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1dEQVldICYgMHgwNykgLSAxOworCXQtPnRtX21kYXkgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01EQVldICYgMHgzZik7CiAJdG1wID0gZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTU9OVEhdICYgMHgxZjsKLQl0LT50bV9tb24gPSBCQ0QyQklOKHRtcCkgLSAxOworCXQtPnRtX21vbiA9IGJjZDJiaW4odG1wKSAtIDE7CiAKIAkvKiBhc3N1bWUgMjBZWSBub3QgMTlZWSwgYW5kIGlnbm9yZSBEUzEzMzdfQklUX0NFTlRVUlkgKi8KLQl0LT50bV95ZWFyID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19ZRUFSXSkgKyAxMDA7CisJdC0+dG1feWVhciA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfWUVBUl0pICsgMTAwOwogCiAJZGV2X2RiZyhkZXYsICIlcyBzZWNzPSVkLCBtaW5zPSVkLCAiCiAJCSJob3Vycz0lZCwgbWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLApAQCAtMTkxLDE2ICsyNTgsMTYgQEAKIAkJdC0+dG1fbW9uLCB0LT50bV95ZWFyLCB0LT50bV93ZGF5KTsKIAogCSpidWYrKyA9IDA7CQkvKiBmaXJzdCByZWdpc3RlciBhZGRyICovCi0JYnVmW0RTMTMwN19SRUdfU0VDU10gPSBCSU4yQkNEKHQtPnRtX3NlYyk7Ci0JYnVmW0RTMTMwN19SRUdfTUlOXSA9IEJJTjJCQ0QodC0+dG1fbWluKTsKLQlidWZbRFMxMzA3X1JFR19IT1VSXSA9IEJJTjJCQ0QodC0+dG1faG91cik7Ci0JYnVmW0RTMTMwN19SRUdfV0RBWV0gPSBCSU4yQkNEKHQtPnRtX3dkYXkgKyAxKTsKLQlidWZbRFMxMzA3X1JFR19NREFZXSA9IEJJTjJCQ0QodC0+dG1fbWRheSk7Ci0JYnVmW0RTMTMwN19SRUdfTU9OVEhdID0gQklOMkJDRCh0LT50bV9tb24gKyAxKTsKKwlidWZbRFMxMzA3X1JFR19TRUNTXSA9IGJpbjJiY2QodC0+dG1fc2VjKTsKKwlidWZbRFMxMzA3X1JFR19NSU5dID0gYmluMmJjZCh0LT50bV9taW4pOworCWJ1ZltEUzEzMDdfUkVHX0hPVVJdID0gYmluMmJjZCh0LT50bV9ob3VyKTsKKwlidWZbRFMxMzA3X1JFR19XREFZXSA9IGJpbjJiY2QodC0+dG1fd2RheSArIDEpOworCWJ1ZltEUzEzMDdfUkVHX01EQVldID0gYmluMmJjZCh0LT50bV9tZGF5KTsKKwlidWZbRFMxMzA3X1JFR19NT05USF0gPSBiaW4yYmNkKHQtPnRtX21vbiArIDEpOwogCiAJLyogYXNzdW1lIDIwWVkgbm90IDE5WVkgKi8KIAl0bXAgPSB0LT50bV95ZWFyIC0gMTAwOwotCWJ1ZltEUzEzMDdfUkVHX1lFQVJdID0gQklOMkJDRCh0bXApOworCWJ1ZltEUzEzMDdfUkVHX1lFQVJdID0gYmluMmJjZCh0bXApOwogCiAJc3dpdGNoIChkczEzMDctPnR5cGUpIHsKIAljYXNlIGRzXzEzMzc6CkBAIC0yMzEsOSArMjk4LDE4NiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRzMTMwN19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgICAgICAgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgZHMxMzA3CQkqZHMxMzA3ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50CQkJcmV0OworCisJaWYgKCF0ZXN0X2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiByZWFkIGFsbCBBTEFSTTEsIEFMQVJNMiwgYW5kIHN0YXR1cyByZWdpc3RlcnMgYXQgb25jZSAqLworCWRzMTMwNy0+cmVnX2FkZHIgPSBEUzEzMzlfUkVHX0FMQVJNMV9TRUNTOworCWRzMTMwNy0+bXNnWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJZHMxMzA3LT5tc2dbMV0ubGVuID0gOTsKKworCXJldCA9IGkyY190cmFuc2Zlcih0b19pMmNfYWRhcHRlcihjbGllbnQtPmRldi5wYXJlbnQpLAorCQkJZHMxMzA3LT5tc2csIDIpOworCWlmIChyZXQgIT0gMikgeworCQlkZXZfZXJyKGRldiwgIiVzIGVycm9yICVkXG4iLCAiYWxhcm0gcmVhZCIsIHJldCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldl9kYmcoZGV2LCAiJXM6ICUwMnggJTAyeCAlMDJ4ICUwMngsICUwMnggJTAyeCAlMDJ4LCAlMDJ4ICUwMnhcbiIsCisJCQkiYWxhcm0gcmVhZCIsCisJCQlkczEzMDctPnJlZ3NbMF0sIGRzMTMwNy0+cmVnc1sxXSwKKwkJCWRzMTMwNy0+cmVnc1syXSwgZHMxMzA3LT5yZWdzWzNdLAorCQkJZHMxMzA3LT5yZWdzWzRdLCBkczEzMDctPnJlZ3NbNV0sCisJCQlkczEzMDctPnJlZ3NbNl0sIGRzMTMwNy0+cmVnc1s3XSwKKwkJCWRzMTMwNy0+cmVnc1s4XSk7CisKKwkvKiByZXBvcnQgYWxhcm0gdGltZSAoQUxBUk0xKTsgYXNzdW1lIDI0IGhvdXIgYW5kIGRheS1vZi1tb250aCBtb2RlcywKKwkgKiBhbmQgdGhhdCBhbGwgZm91ciBmaWVsZHMgYXJlIGNoZWNrZWQgbWF0Y2hlcworCSAqLworCXQtPnRpbWUudG1fc2VjID0gYmNkMmJpbihkczEzMDctPnJlZ3NbMF0gJiAweDdmKTsKKwl0LT50aW1lLnRtX21pbiA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzWzFdICYgMHg3Zik7CisJdC0+dGltZS50bV9ob3VyID0gYmNkMmJpbihkczEzMDctPnJlZ3NbMl0gJiAweDNmKTsKKwl0LT50aW1lLnRtX21kYXkgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1szXSAmIDB4M2YpOworCXQtPnRpbWUudG1fbW9uID0gLTE7CisJdC0+dGltZS50bV95ZWFyID0gLTE7CisJdC0+dGltZS50bV93ZGF5ID0gLTE7CisJdC0+dGltZS50bV95ZGF5ID0gLTE7CisJdC0+dGltZS50bV9pc2RzdCA9IC0xOworCisJLyogLi4uIGFuZCBzdGF0dXMgKi8KKwl0LT5lbmFibGVkID0gISEoZHMxMzA3LT5yZWdzWzddICYgRFMxMzM3X0JJVF9BMUlFKTsKKwl0LT5wZW5kaW5nID0gISEoZHMxMzA3LT5yZWdzWzhdICYgRFMxMzM3X0JJVF9BMUkpOworCisJZGV2X2RiZyhkZXYsICIlcyBzZWNzPSVkLCBtaW5zPSVkLCAiCisJCSJob3Vycz0lZCwgbWRheT0lZCwgZW5hYmxlZD0lZCwgcGVuZGluZz0lZFxuIiwKKwkJImFsYXJtIHJlYWQiLCB0LT50aW1lLnRtX3NlYywgdC0+dGltZS50bV9taW4sCisJCXQtPnRpbWUudG1faG91ciwgdC0+dGltZS50bV9tZGF5LAorCQl0LT5lbmFibGVkLCB0LT5wZW5kaW5nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzMTMwN19zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqdCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAgICAgICAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBkczEzMDcJCSpkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1bnNpZ25lZCBjaGFyCQkqYnVmID0gZHMxMzA3LT5yZWdzOworCXU4CQkJY29udHJvbCwgc3RhdHVzOworCWludAkJCXJldDsKKworCWlmICghdGVzdF9iaXQoSEFTX0FMQVJNLCAmZHMxMzA3LT5mbGFncykpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2X2RiZyhkZXYsICIlcyBzZWNzPSVkLCBtaW5zPSVkLCAiCisJCSJob3Vycz0lZCwgbWRheT0lZCwgZW5hYmxlZD0lZCwgcGVuZGluZz0lZFxuIiwKKwkJImFsYXJtIHNldCIsIHQtPnRpbWUudG1fc2VjLCB0LT50aW1lLnRtX21pbiwKKwkJdC0+dGltZS50bV9ob3VyLCB0LT50aW1lLnRtX21kYXksCisJCXQtPmVuYWJsZWQsIHQtPnBlbmRpbmcpOworCisJLyogcmVhZCBjdXJyZW50IHN0YXR1cyBvZiBib3RoIGFsYXJtcyBhbmQgdGhlIGNoaXAgKi8KKwlkczEzMDctPnJlZ19hZGRyID0gRFMxMzM5X1JFR19BTEFSTTFfU0VDUzsKKwlkczEzMDctPm1zZ1sxXS5mbGFncyA9IEkyQ19NX1JEOworCWRzMTMwNy0+bXNnWzFdLmxlbiA9IDk7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIodG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KSwKKwkJCWRzMTMwNy0+bXNnLCAyKTsKKwlpZiAocmV0ICE9IDIpIHsKKwkJZGV2X2VycihkZXYsICIlcyBlcnJvciAlZFxuIiwgImFsYXJtIHdyaXRlIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWNvbnRyb2wgPSBkczEzMDctPnJlZ3NbN107CisJc3RhdHVzID0gZHMxMzA3LT5yZWdzWzhdOworCisJZGV2X2RiZyhkZXYsICIlczogJTAyeCAlMDJ4ICUwMnggJTAyeCwgJTAyeCAlMDJ4ICUwMngsICUwMnggJTAyeFxuIiwKKwkJCSJhbGFybSBzZXQgKG9sZCBzdGF0dXMpIiwKKwkJCWRzMTMwNy0+cmVnc1swXSwgZHMxMzA3LT5yZWdzWzFdLAorCQkJZHMxMzA3LT5yZWdzWzJdLCBkczEzMDctPnJlZ3NbM10sCisJCQlkczEzMDctPnJlZ3NbNF0sIGRzMTMwNy0+cmVnc1s1XSwKKwkJCWRzMTMwNy0+cmVnc1s2XSwgY29udHJvbCwgc3RhdHVzKTsKKworCS8qIHNldCBBTEFSTTEsIHVzaW5nIDI0IGhvdXIgYW5kIGRheS1vZi1tb250aCBtb2RlcyAqLworCSpidWYrKyA9IERTMTMzOV9SRUdfQUxBUk0xX1NFQ1M7CS8qIGZpcnN0IHJlZ2lzdGVyIGFkZHIgKi8KKwlidWZbMF0gPSBiaW4yYmNkKHQtPnRpbWUudG1fc2VjKTsKKwlidWZbMV0gPSBiaW4yYmNkKHQtPnRpbWUudG1fbWluKTsKKwlidWZbMl0gPSBiaW4yYmNkKHQtPnRpbWUudG1faG91cik7CisJYnVmWzNdID0gYmluMmJjZCh0LT50aW1lLnRtX21kYXkpOworCisJLyogc2V0IEFMQVJNMiB0byBub24tZ2FyYmFnZSAqLworCWJ1Zls0XSA9IDA7CisJYnVmWzVdID0gMDsKKwlidWZbNl0gPSAwOworCisJLyogb3B0aW9uYWxseSBlbmFibGUgQUxBUk0xICovCisJYnVmWzddID0gY29udHJvbCAmIH4oRFMxMzM3X0JJVF9BMUlFIHwgRFMxMzM3X0JJVF9BMklFKTsKKwlpZiAodC0+ZW5hYmxlZCkgeworCQlkZXZfZGJnKGRldiwgImFsYXJtIElSUSBhcm1lZFxuIik7CisJCWJ1Zls3XSB8PSBEUzEzMzdfQklUX0ExSUU7CS8qIG9ubHkgQUxBUk0xIGlzIHVzZWQgKi8KKwl9CisJYnVmWzhdID0gc3RhdHVzICYgfihEUzEzMzdfQklUX0ExSSB8IERTMTMzN19CSVRfQTJJKTsKKworCWRzMTMwNy0+bXNnWzFdLmZsYWdzID0gMDsKKwlkczEzMDctPm1zZ1sxXS5sZW4gPSAxMDsKKworCXJldCA9IGkyY190cmFuc2Zlcih0b19pMmNfYWRhcHRlcihjbGllbnQtPmRldi5wYXJlbnQpLAorCQkJJmRzMTMwNy0+bXNnWzFdLCAxKTsKKwlpZiAocmV0ICE9IDEpIHsKKwkJZGV2X2VycihkZXYsICJjYW4ndCBzZXQgYWxhcm0gdGltZVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzMTMwN19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGRzMTMwNwkJKmRzMTMwNyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludAkJCXJldDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSVENfQUlFX09GRjoKKwkJaWYgKCF0ZXN0X2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKSkKKwkJCXJldHVybiAtRU5PVFRZOworCisJCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgJj0gfkRTMTMzN19CSVRfQTFJRTsKKworCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCURTMTMzN19SRUdfQ09OVFJPTCwgcmV0KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWJyZWFrOworCisJY2FzZSBSVENfQUlFX09OOgorCQlpZiAoIXRlc3RfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpKQorCQkJcmV0dXJuIC1FTk9UVFk7CisKKwkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzM3X1JFR19DT05UUk9MKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldCB8PSBEUzEzMzdfQklUX0ExSUU7CisKKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlEUzEzMzdfUkVHX0NPTlRST0wsIHJldCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczEzeHhfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lCT0gZHMxMzA3X2dldF90aW1lLAogCS5zZXRfdGltZQk9IGRzMTMwN19zZXRfdGltZSwKKwkucmVhZF9hbGFybQk9IGRzMTMwN19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0JPSBkczEzMDdfc2V0X2FsYXJtLAorCS5pb2N0bAkJPSBkczEzMDdfaW9jdGwsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzA3LDcgKzU1MSw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lCT0gIm52cmFtIiwKIAkJLm1vZGUJPSBTX0lSVUdPIHwgU19JV1VTUiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIAogCS5yZWFkCT0gZHMxMzA3X252cmFtX3JlYWQsCkBAIC0zMjcsNiArNTcwLDcgQEAKIAlpbnQJCQl0bXA7CiAJY29uc3Qgc3RydWN0IGNoaXBfZGVzYwkqY2hpcCA9ICZjaGlwc1tpZC0+ZHJpdmVyX2RhdGFdOwogCXN0cnVjdCBpMmNfYWRhcHRlcgkqYWRhcHRlciA9IHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCk7CisJaW50CQkJd2FudF9pcnEgPSBmYWxzZTsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwKIAkJCUkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSkpCkBAIC0zNTMsNiArNTk3LDEyIEBACiAJc3dpdGNoIChkczEzMDctPnR5cGUpIHsKIAljYXNlIGRzXzEzMzc6CiAJY2FzZSBkc18xMzM5OgorCQkvKiBoYXMgSVJRPyAqLworCQlpZiAoZHMxMzA3LT5jbGllbnQtPmlycSA+IDAgJiYgY2hpcC0+YWxhcm0pIHsKKwkJCUlOSVRfV09SSygmZHMxMzA3LT53b3JrLCBkczEzMDdfd29yayk7CisJCQl3YW50X2lycSA9IHRydWU7CisJCX0KKwogCQlkczEzMDctPnJlZ19hZGRyID0gRFMxMzM3X1JFR19DT05UUk9MOwogCQlkczEzMDctPm1zZ1sxXS5sZW4gPSAyOwogCkBAIC0zNjksOCArNjE5LDIwIEBACiAKIAkJLyogb3NjaWxsYXRvciBvZmY/ICB0dXJuIGl0IG9uLCBzbyBjbG9jayBjYW4gdGljay4gKi8KIAkJaWYgKGRzMTMwNy0+cmVnc1swXSAmIERTMTMzN19CSVRfbkVPU0MpCi0JCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzM3X1JFR19DT05UUk9MLAotCQkJCWRzMTMwNy0+cmVnc1swXSAmIH5EUzEzMzdfQklUX25FT1NDKTsKKwkJCWRzMTMwNy0+cmVnc1swXSAmPSB+RFMxMzM3X0JJVF9uRU9TQzsKKworCQkvKiBVc2luZyBJUlE/ICBEaXNhYmxlIHRoZSBzcXVhcmUgd2F2ZSBhbmQgYm90aCBhbGFybXMuCisJCSAqIEZvciBkczEzMzksIGJlIHN1cmUgYWxhcm1zIGNhbiB0cmlnZ2VyIHdoZW4gd2UncmUKKwkJICogcnVubmluZyBvbiBWYmFja3VwIChCQlNRSSk7IHdlIGFzc3VtZSBkczEzMzcgd2lsbAorCQkgKiBpZ25vcmUgdGhhdCBiaXQKKwkJICovCisJCWlmICh3YW50X2lycSkgeworCQkJZHMxMzA3LT5yZWdzWzBdIHw9IERTMTMzN19CSVRfSU5UQ04gfCBEUzEzMzlfQklUX0JCU1FJOworCQkJZHMxMzA3LT5yZWdzWzBdICY9IH4oRFMxMzM3X0JJVF9BMklFIHwgRFMxMzM3X0JJVF9BMUlFKTsKKwkJfQorCisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX0NPTlRST0wsCisJCQkJCQkJZHMxMzA3LT5yZWdzWzBdKTsKIAogCQkvKiBvc2NpbGxhdG9yIGZhdWx0PyAgY2xlYXIgZmxhZywgYW5kIHdhcm4gKi8KIAkJaWYgKGRzMTMwNy0+cmVnc1sxXSAmIERTMTMzN19CSVRfT1NGKSB7CkBAIC00NDYsMTggKzcwOCwxOCBAQAogCX0KIAogCXRtcCA9IGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1NFQ1NdOwotCXRtcCA9IEJDRDJCSU4odG1wICYgMHg3Zik7CisJdG1wID0gYmNkMmJpbih0bXAgJiAweDdmKTsKIAlpZiAodG1wID4gNjApCiAJCWdvdG8gZXhpdF9iYWQ7Ci0JdG1wID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NSU5dICYgMHg3Zik7CisJdG1wID0gYmNkMmJpbihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NSU5dICYgMHg3Zik7CiAJaWYgKHRtcCA+IDYwKQogCQlnb3RvIGV4aXRfYmFkOwogCi0JdG1wID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NREFZXSAmIDB4M2YpOworCXRtcCA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTURBWV0gJiAweDNmKTsKIAlpZiAodG1wID09IDAgfHwgdG1wID4gMzEpCiAJCWdvdG8gZXhpdF9iYWQ7CiAKLQl0bXAgPSBCQ0QyQklOKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01PTlRIXSAmIDB4MWYpOworCXRtcCA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTU9OVEhdICYgMHgxZik7CiAJaWYgKHRtcCA9PSAwIHx8IHRtcCA+IDEyKQogCQlnb3RvIGV4aXRfYmFkOwogCkBAIC00NzYsMTQgKzczOCwxNCBAQAogCQkvKiBCZSBzdXJlIHdlJ3JlIGluIDI0IGhvdXIgbW9kZS4gIE11bHRpLW1hc3RlciBzeXN0ZW1zCiAJCSAqIHRha2Ugbm90ZS4uLgogCQkgKi8KLQkJdG1wID0gQkNEMkJJTih0bXAgJiAweDFmKTsKKwkJdG1wID0gYmNkMmJpbih0bXAgJiAweDFmKTsKIAkJaWYgKHRtcCA9PSAxMikKIAkJCXRtcCA9IDA7CiAJCWlmIChkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19IT1VSXSAmIERTMTMwN19CSVRfUE0pCiAJCQl0bXAgKz0gMTI7CiAJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAogCQkJCURTMTMwN19SRUdfSE9VUiwKLQkJCQlCSU4yQkNEKHRtcCkpOworCQkJCWJpbjJiY2QodG1wKSk7CiAJfQogCiAJZHMxMzA3LT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKGNsaWVudC0+bmFtZSwgJmNsaWVudC0+ZGV2LApAQCAtNDk1LDEwICs3NTcsMjIgQEAKIAkJZ290byBleGl0X2ZyZWU7CiAJfQogCisJaWYgKHdhbnRfaXJxKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKGNsaWVudC0+aXJxLCBkczEzMDdfaXJxLCAwLAorCQkJICBkczEzMDctPnJ0Yy0+bmFtZSwgY2xpZW50KTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkJInVuYWJsZSB0byByZXF1ZXN0IElSUSFcbiIpOworCQkJZ290byBleGl0X2lycTsKKwkJfQorCQlzZXRfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpOworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImdvdCBJUlEgJWRcbiIsIGNsaWVudC0+aXJxKTsKKwl9CisKIAlpZiAoY2hpcC0+bnZyYW01NikgewogCQllcnIgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmNsaWVudC0+ZGV2LmtvYmosICZudnJhbSk7CiAJCWlmIChlcnIgPT0gMCkgewotCQkJZHMxMzA3LT5oYXNfbnZyYW0gPSB0cnVlOworCQkJc2V0X2JpdChIQVNfTlZSQU0sICZkczEzMDctPmZsYWdzKTsKIAkJCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIjU2IGJ5dGVzIG52cmFtXG4iKTsKIAkJfQogCX0KQEAgLTUxMiw3ICs3ODYsOSBAQAogCQkJZHMxMzA3LT5yZWdzWzJdLCBkczEzMDctPnJlZ3NbM10sCiAJCQlkczEzMDctPnJlZ3NbNF0sIGRzMTMwNy0+cmVnc1s1XSwKIAkJCWRzMTMwNy0+cmVnc1s2XSk7Ci0KK2V4aXRfaXJxOgorCWlmIChkczEzMDctPnJ0YykKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKGRzMTMwNy0+cnRjKTsKIGV4aXRfZnJlZToKIAlrZnJlZShkczEzMDcpOwogCXJldHVybiBlcnI7CkBAIC01MjAsOSArNzk2LDE0IEBACiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGRzMTMwN19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgZHMxMzA3CSpkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgZHMxMzA3CQkqZHMxMzA3ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlpZiAoZHMxMzA3LT5oYXNfbnZyYW0pCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKSkgeworCQlmcmVlX2lycShjbGllbnQtPmlycSwgY2xpZW50KTsKKwkJY2FuY2VsX3dvcmtfc3luYygmZHMxMzA3LT53b3JrKTsKKwl9CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhBU19OVlJBTSwgJmRzMTMwNy0+ZmxhZ3MpKQogCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmNsaWVudC0+ZGV2LmtvYmosICZudnJhbSk7CiAKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIoZHMxMzA3LT5ydGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCmluZGV4IGExNTA0MTguLmE1YjBmYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKQEAgLTQyOSwxMiArNDI5LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZHMxMzc0X3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWlmIChjbGllbnQtPmlycSA+PSAwICYmIGRldmljZV9tYXlfd2FrZXVwKCZjbGllbnQtPmRldikpCisJCWVuYWJsZV9pcnFfd2FrZShjbGllbnQtPmlycSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHMxMzc0X3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWlmIChjbGllbnQtPmlycSA+PSAwICYmIGRldmljZV9tYXlfd2FrZXVwKCZjbGllbnQtPmRldikpCisJCWRpc2FibGVfaXJxX3dha2UoY2xpZW50LT5pcnEpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgZHMxMzc0X3N1c3BlbmQJTlVMTAorI2RlZmluZSBkczEzNzRfcmVzdW1lCU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHMxMzc0X2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJydGMtZHMxMzc0IiwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgPSBkczEzNzRfcHJvYmUsCisJLnN1c3BlbmQgPSBkczEzNzRfc3VzcGVuZCwKKwkucmVzdW1lID0gZHMxMzc0X3Jlc3VtZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AoZHMxMzc0X3JlbW92ZSksCiAJLmlkX3RhYmxlID0gZHMxMzc0X2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczE1MTEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE1MTEuYwppbmRleCAwZjBkMjdkLi4yNWNhYWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNTExLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTUxMS5jCkBAIC0xNTMsOCArMTUzLDggQEAKIAkvKgogCSAqIHNldCB0aGUgd2RvZyB2YWx1ZXMgaW4gdGhlIHdkb2cgcmVnaXN0ZXJzCiAJICovCi0JcnRjX3dyaXRlKEJJTjJCQ0QoZGVjaXNlY29uZHMgJSAxMDApLCBEUzE1MTFfV0RfTVNFQyk7Ci0JcnRjX3dyaXRlKEJJTjJCQ0QoZGVjaXNlY29uZHMgLyAxMDApLCBEUzE1MTFfV0RfU0VDKTsKKwlydGNfd3JpdGUoYmluMmJjZChkZWNpc2Vjb25kcyAlIDEwMCksIERTMTUxMV9XRF9NU0VDKTsKKwlydGNfd3JpdGUoYmluMmJjZChkZWNpc2Vjb25kcyAvIDEwMCksIERTMTUxMV9XRF9TRUMpOwogCS8qCiAJICogc2V0IHdkb2cgZW5hYmxlIGFuZCB3ZG9nICdzdGVlcmluZycgYml0IHRvIGlzc3VlIGEgcmVzZXQKIAkgKi8KQEAgLTIyMCwxMyArMjIwLDEzIEBACiAJLyoKIAkgKiBlYWNoIHJlZ2lzdGVyIGlzIGEgZGlmZmVyZW50IG51bWJlciBvZiB2YWxpZCBiaXRzCiAJICovCi0Jc2VjID0gQklOMkJDRChzZWMpICYgMHg3ZjsKLQltaW4gPSBCSU4yQkNEKG1pbikgJiAweDdmOwotCWhycyA9IEJJTjJCQ0QoaHJzKSAmIDB4M2Y7Ci0JZGF5ID0gQklOMkJDRChkYXkpICYgMHgzZjsKLQltb24gPSBCSU4yQkNEKG1vbikgJiAweDFmOwotCXlycyA9IEJJTjJCQ0QoeXJzKSAmIDB4ZmY7Ci0JY2VuID0gQklOMkJDRChjZW4pICYgMHhmZjsKKwlzZWMgPSBiaW4yYmNkKHNlYykgJiAweDdmOworCW1pbiA9IGJpbjJiY2QobWluKSAmIDB4N2Y7CisJaHJzID0gYmluMmJjZChocnMpICYgMHgzZjsKKwlkYXkgPSBiaW4yYmNkKGRheSkgJiAweDNmOworCW1vbiA9IGJpbjJiY2QobW9uKSAmIDB4MWY7CisJeXJzID0gYmluMmJjZCh5cnMpICYgMHhmZjsKKwljZW4gPSBiaW4yYmNkKGNlbikgJiAweGZmOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRzMTUxMV9sb2NrLCBmbGFncyk7CiAJcnRjX2Rpc2FibGVfdXBkYXRlKCk7CkBAIC0yNjQsMTQgKzI2NCwxNCBAQAogCXJ0Y19lbmFibGVfdXBkYXRlKCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHMxNTExX2xvY2ssIGZsYWdzKTsKIAotCXJ0Y190bS0+dG1fc2VjID0gQkNEMkJJTihydGNfdG0tPnRtX3NlYyk7Ci0JcnRjX3RtLT50bV9taW4gPSBCQ0QyQklOKHJ0Y190bS0+dG1fbWluKTsKLQlydGNfdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJ0Y190bS0+dG1faG91cik7Ci0JcnRjX3RtLT50bV9tZGF5ID0gQkNEMkJJTihydGNfdG0tPnRtX21kYXkpOwotCXJ0Y190bS0+dG1fd2RheSA9IEJDRDJCSU4ocnRjX3RtLT50bV93ZGF5KTsKLQlydGNfdG0tPnRtX21vbiA9IEJDRDJCSU4ocnRjX3RtLT50bV9tb24pOwotCXJ0Y190bS0+dG1feWVhciA9IEJDRDJCSU4ocnRjX3RtLT50bV95ZWFyKTsKLQljZW50dXJ5ID0gQkNEMkJJTihjZW50dXJ5KSAqIDEwMDsKKwlydGNfdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnRjX3RtLT50bV9zZWMpOworCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJcnRjX3RtLT50bV9ob3VyID0gYmNkMmJpbihydGNfdG0tPnRtX2hvdXIpOworCXJ0Y190bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX3RtLT50bV9tZGF5KTsKKwlydGNfdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJ0Y190bS0+dG1fd2RheSk7CisJcnRjX3RtLT50bV9tb24gPSBiY2QyYmluKHJ0Y190bS0+dG1fbW9uKTsKKwlydGNfdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ0Y190bS0+dG1feWVhcik7CisJY2VudHVyeSA9IGJjZDJiaW4oY2VudHVyeSkgKiAxMDA7CiAKIAkvKgogCSAqIEFjY291bnQgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gaG93IHRoZSBSVEMgdXNlcyB0aGUgdmFsdWVzCkBAIC0zMDQsMTYgKzMwNCwxNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5ydGMtPmlycV9sb2NrLCBmbGFncyk7CiAJcnRjX3dyaXRlKHBkYXRhLT5hbHJtX21kYXkgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWRheSkgJiAweDNmLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9tZGF5KSAmIDB4M2YsCiAJICAgICAgIFJUQ19BTEFSTV9EQVRFKTsKIAlydGNfd3JpdGUocGRhdGEtPmFscm1faG91ciA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9ob3VyKSAmIDB4M2YsCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX2hvdXIpICYgMHgzZiwKIAkgICAgICAgUlRDX0FMQVJNX0hPVVIpOwogCXJ0Y193cml0ZShwZGF0YS0+YWxybV9taW4gPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWluKSAmIDB4N2YsCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX21pbikgJiAweDdmLAogCSAgICAgICBSVENfQUxBUk1fTUlOKTsKIAlydGNfd3JpdGUocGRhdGEtPmFscm1fc2VjIDwgMCB8fCAocGRhdGEtPmlycWVuICYgUlRDX1VGKSA/Ci0JICAgICAgIDB4ODAgOiBCSU4yQkNEKHBkYXRhLT5hbHJtX3NlYykgJiAweDdmLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9zZWMpICYgMHg3ZiwKIAkgICAgICAgUlRDX0FMQVJNX1NFQyk7CiAJcnRjX3dyaXRlKHJ0Y19yZWFkKFJUQ19DTUQpIHwgKHBkYXRhLT5pcnFlbiA/IFJUQ19USUUgOiAwKSwgUlRDX0NNRCk7CiAJcnRjX3JlYWQoUlRDX0NNRDEpOwkvKiBjbGVhciBpbnRlcnJ1cHRzICovCkBAIC0zNzksMTggKzM3OSw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0gc3RhdGljIHZvaWQKLWRzMTUxMV9ydGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JaWYgKHBkYXRhLT5pcnEgPj0gMCkgewotCQlwZGF0YS0+aXJxZW4gPSAwOwotCQlkczE1MTFfcnRjX3VwZGF0ZV9hbGFybShwZGF0YSk7Ci0JfQotfQotCiAgc3RhdGljIGludAogZHMxNTExX3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtNDI4LDcgKzQxNiw2IEBACiAJLnNldF90aW1lCT0gZHMxNTExX3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IGRzMTUxMV9ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gZHMxNTExX3J0Y19zZXRfYWxhcm0sCi0JLnJlbGVhc2UJPSBkczE1MTFfcnRjX3JlbGVhc2UsCiAJLmlvY3RsCQk9IGRzMTUxMV9ydGNfaW9jdGwsCiB9OwogCkBAIC00OTQsNyArNDgxLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibnZyYW0iLAogCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVUdPLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gRFMxNTExX1JBTV9NQVgsCiAJLnJlYWQgPSBkczE1MTFfbnZyYW1fcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYwppbmRleCBhMTlmMTE0Li5iOTQ3NWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jCkBAIC03OCwxNyArNzgsMTcgQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHBkYXRhLT5pb2FkZHI7CiAJdTggY2VudHVyeTsKIAotCWNlbnR1cnkgPSBCSU4yQkNEKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKTsKKwljZW50dXJ5ID0gYmluMmJjZCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCk7CiAKIAl3cml0ZWIoUlRDX1dSSVRFLCBwZGF0YS0+aW9hZGRyICsgUlRDX0NPTlRST0wpOwogCi0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApLCBpb2FkZHIgKyBSVENfWUVBUik7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpLCBpb2FkZHIgKyBSVENfTU9OVEgpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV93ZGF5KSAmIFJUQ19EQVlfTUFTSywgaW9hZGRyICsgUlRDX0RBWSk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21kYXkpLCBpb2FkZHIgKyBSVENfREFURSk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBpb2FkZHIgKyBSVENfSE9VUlMpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9taW4pLCBpb2FkZHIgKyBSVENfTUlOVVRFUyk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3NlYykgJiBSVENfU0VDT05EU19NQVNLLCBpb2FkZHIgKyBSVENfU0VDT05EUyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApLCBpb2FkZHIgKyBSVENfWUVBUik7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21vbiArIDEpLCBpb2FkZHIgKyBSVENfTU9OVEgpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV93ZGF5KSAmIFJUQ19EQVlfTUFTSywgaW9hZGRyICsgUlRDX0RBWSk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21kYXkpLCBpb2FkZHIgKyBSVENfREFURSk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX2hvdXIpLCBpb2FkZHIgKyBSVENfSE9VUlMpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9taW4pLCBpb2FkZHIgKyBSVENfTUlOVVRFUyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3NlYykgJiBSVENfU0VDT05EU19NQVNLLCBpb2FkZHIgKyBSVENfU0VDT05EUyk7CiAKIAkvKiBSVENfQ0VOVFVSWSBhbmQgUlRDX0NPTlRST0wgc2hhcmUgc2FtZSByZWdpc3RlciAqLwogCXdyaXRlYihSVENfV1JJVEUgfCAoY2VudHVyeSAmIFJUQ19DRU5UVVJZX01BU0spLCBpb2FkZHIgKyBSVENfQ0VOVFVSWSk7CkBAIC0xMTgsMTQgKzExOCwxNCBAQAogCXllYXIgPSByZWFkYihpb2FkZHIgKyBSVENfWUVBUik7CiAJY2VudHVyeSA9IHJlYWRiKGlvYWRkciArIFJUQ19DRU5UVVJZKSAmIFJUQ19DRU5UVVJZX01BU0s7CiAJd3JpdGViKDAsIGlvYWRkciArIFJUQ19DT05UUk9MKTsKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihzZWNvbmQpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKG1pbnV0ZSk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKGhvdXIpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihkYXkpOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTih3ZWVrKTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihtb250aCkgLSAxOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHNlY29uZCk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4obWludXRlKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oaG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKGRheSk7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHdlZWspOworCXRtLT50bV9tb24gPSBiY2QyYmluKG1vbnRoKSAtIDE7CiAJLyogeWVhciBpcyAxOTAwICsgdG0tPnRtX3llYXIgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oeWVhcikgKyBCQ0QyQklOKGNlbnR1cnkpICogMTAwIC0gMTkwMDsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oeWVhcikgKyBiY2QyYmluKGNlbnR1cnkpICogMTAwIC0gMTkwMDsKIAogCWlmIChydGNfdmFsaWRfdG0odG0pIDwgMCkgewogCQlkZXZfZXJyKGRldiwgInJldHJpZXZlZCBkYXRlL3RpbWUgaXMgbm90IHZhbGlkLlxuIik7CkBAIC0xNDEsMTYgKzE0MSwxNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5ydGMtPmlycV9sb2NrLCBmbGFncyk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX21kYXkgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWRheSksCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX21kYXkpLAogCSAgICAgICBpb2FkZHIgKyBSVENfREFURV9BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX2hvdXIgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1faG91ciksCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX2hvdXIpLAogCSAgICAgICBpb2FkZHIgKyBSVENfSE9VUlNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+YWxybV9taW4gPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWluKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fbWluKSwKIAkgICAgICAgaW9hZGRyICsgUlRDX01JTlVURVNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+YWxybV9zZWMgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fc2VjKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fc2VjKSwKIAkgICAgICAgaW9hZGRyICsgUlRDX1NFQ09ORFNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+aXJxZW4gPyBSVENfSU5UU19BRSA6IDAsIGlvYWRkciArIFJUQ19JTlRFUlJVUFRTKTsKIAlyZWFkYihpb2FkZHIgKyBSVENfRkxBR1MpOwkvKiBjbGVhciBpbnRlcnJ1cHRzICovCkBAIC0yMDcsMTcgKzIwNyw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgdm9pZCBkczE1NTNfcnRjX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCWlmIChwZGF0YS0+aXJxID49IDApIHsKLQkJcGRhdGEtPmlycWVuID0gMDsKLQkJZHMxNTUzX3J0Y191cGRhdGVfYWxhcm0ocGRhdGEpOwotCX0KLX0KLQogc3RhdGljIGludCBkczE1NTNfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTI1NCw3ICsyNDMsNiBAQAogCS5zZXRfdGltZQk9IGRzMTU1M19ydGNfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSBkczE1NTNfcnRjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybQk9IGRzMTU1M19ydGNfc2V0X2FsYXJtLAotCS5yZWxlYXNlCT0gZHMxNTUzX3J0Y19yZWxlYXNlLAogCS5pb2N0bAkJPSBkczE1NTNfcnRjX2lvY3RsLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTY3Mi5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTY3Mi5jCmluZGV4IDZmYTQ1NTYuLjM0MWQ3YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczE2NzIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMKQEAgLTksMTcgKzksMTAgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zIgotCi0vKiBBZGRyZXNzZXMgdG8gc2Nhbjogbm9uZS4gVGhpcyBjaGlwIGNhbm5vdCBiZSBkZXRlY3RlZC4gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRDsKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuNCIKIAogLyogUmVnaXN0ZXJzICovCiAKQEAgLTI5LDggKzIyLDcgQEAKIAogI2RlZmluZSBEUzE2NzJfUkVHX0NPTlRST0xfRU9TQwkweDgwCiAKLS8qIFByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgZHMxNjcyX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKTsKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkczE2NzJfZHJpdmVyOwogCiAvKgogICogSW4gdGhlIHJvdXRpbmVzIHRoYXQgZGVhbCBkaXJlY3RseSB3aXRoIHRoZSBkczE2NzIgaGFyZHdhcmUsIHdlIHVzZQpAQCAtNDQsOCArMzYsOCBAQAogCXVuc2lnbmVkIGNoYXIgYnVmWzRdOwogCiAJc3RydWN0IGkyY19tc2cgbXNnc1tdID0gewotCQl7IGNsaWVudC0+YWRkciwgMCwgMSwgJmFkZHIgfSwJCS8qIHNldHVwIHJlYWQgcHRyICovCi0JCXsgY2xpZW50LT5hZGRyLCBJMkNfTV9SRCwgNCwgYnVmIH0sCS8qIHJlYWQgZGF0ZSAqLworCQl7Y2xpZW50LT5hZGRyLCAwLCAxLCAmYWRkcn0sCS8qIHNldHVwIHJlYWQgcHRyICovCisJCXtjbGllbnQtPmFkZHIsIEkyQ19NX1JELCA0LCBidWZ9LAkvKiByZWFkIGRhdGUgKi8KIAl9OwogCiAJLyogcmVhZCBkYXRlIHJlZ2lzdGVycyAqLwpAQCAtODAsNyArNzIsNyBAQAogCWJ1ZlsyXSA9IChzZWNzICYgMHgwMDAwRkYwMCkgPj4gODsKIAlidWZbM10gPSAoc2VjcyAmIDB4MDBGRjAwMDApID4+IDE2OwogCWJ1Zls0XSA9IChzZWNzICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0JYnVmWzVdID0gMDsJLyogc2V0IGNvbnRyb2wgcmVnIHRvIGVuYWJsZSBjb3VudGluZyAqLworCWJ1Zls1XSA9IDA7CQkvKiBzZXQgY29udHJvbCByZWcgdG8gZW5hYmxlIGNvdW50aW5nICovCiAKIAl4ZmVyID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCA2KTsKIAlpZiAoeGZlciAhPSA2KSB7CkBAIC0xMjcsOCArMTE5LDggQEAKIAl1bnNpZ25lZCBjaGFyIGFkZHIgPSBEUzE2NzJfUkVHX0NPTlRST0w7CiAKIAlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7Ci0JCXsgY2xpZW50LT5hZGRyLCAwLCAxLCAmYWRkciB9LAkJLyogc2V0dXAgcmVhZCBwdHIgKi8KLQkJeyBjbGllbnQtPmFkZHIsIEkyQ19NX1JELCAxLCBzdGF0dXMgfSwJLyogcmVhZCBjb250cm9sICovCisJCXtjbGllbnQtPmFkZHIsIDAsIDEsICZhZGRyfSwJLyogc2V0dXAgcmVhZCBwdHIgKi8KKwkJe2NsaWVudC0+YWRkciwgSTJDX01fUkQsIDEsIHN0YXR1c30sCS8qIHJlYWQgY29udHJvbCAqLwogCX07CiAKIAkvKiByZWFkIGNvbnRyb2wgcmVnaXN0ZXIgKi8KQEAgLTE0MSw3ICsxMzMsOCBAQAogfQogCiAvKiBmb2xsb3dpbmcgYXJlIHRoZSBzeXNmcyBjYWxsYmFjayBmdW5jdGlvbnMgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfY29udHJvbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2NvbnRyb2woc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAl1OCBjb250cm9sOwpAQCAtMTUyLDg1ICsxNDUsNDYgQEAKIAkJcmV0dXJuIGVycjsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAoY29udHJvbCAmIERTMTY3Ml9SRUdfQ09OVFJPTF9FT1NDKQotCQkJCQk/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIpOworCQkgICAgICAgPyAiZGlzYWJsZWQiIDogImVuYWJsZWQiKTsKIH0KKwogc3RhdGljIERFVklDRV9BVFRSKGNvbnRyb2wsIFNfSVJVR08sIHNob3dfY29udHJvbCwgTlVMTCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczE2NzJfcnRjX29wcyA9IHsKLQkucmVhZF90aW1lCT0gZHMxNjcyX3J0Y19yZWFkX3RpbWUsCi0JLnNldF90aW1lCT0gZHMxNjcyX3J0Y19zZXRfdGltZSwKLQkuc2V0X21tc3MJPSBkczE2NzJfcnRjX3NldF9tbXNzLAorCS5yZWFkX3RpbWUgPSBkczE2NzJfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUgPSBkczE2NzJfcnRjX3NldF90aW1lLAorCS5zZXRfbW1zcyA9IGRzMTY3Ml9ydGNfc2V0X21tc3MsCiB9OwogCi1zdGF0aWMgaW50IGRzMTY3Ml9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBkczE2NzJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBkczE2NzJfcHJvYmUpOwotfQotCi1zdGF0aWMgaW50IGRzMTY3Ml9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlpbnQgZXJyOwogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotIAlpZiAocnRjKQorCWlmIChydGMpCiAJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogCi0JaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKLQkJcmV0dXJuIGVycjsKLQotCWtmcmVlKGNsaWVudCk7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRzMTY3Ml9kcml2ZXIgPSB7Ci0JLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gImRzMTY3MiIsCi0JfSwKLQkuaWQJCT0gSTJDX0RSSVZFUklEX0RTMTY3MiwKLQkuYXR0YWNoX2FkYXB0ZXIgPSAmZHMxNjcyX2F0dGFjaCwKLQkuZGV0YWNoX2NsaWVudAk9ICZkczE2NzJfZGV0YWNoLAotfTsKLQotc3RhdGljIGludCBkczE2NzJfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCitzdGF0aWMgaW50IGRzMTY3Ml9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBlcnIgPSAwOwogCXU4IGNvbnRyb2w7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwogCi0JZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBleGl0OwotCX0KLQotCWlmICghKGNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQkvKiBJMkMgY2xpZW50ICovCi0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmRyaXZlciA9ICZkczE2NzJfZHJpdmVyOwotCWNsaWVudC0+YWRhcHRlcgk9IGFkYXB0ZXI7Ci0KLQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgZHMxNjcyX2RyaXZlci5kcml2ZXIubmFtZSwgSTJDX05BTUVfU0laRSk7Ci0KLQkvKiBJbmZvcm0gdGhlIGkyYyBsYXllciAqLwotCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkpCi0JCWdvdG8gZXhpdF9rZnJlZTsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJjaGlwIGZvdW5kLCBkcml2ZXIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihkczE2NzJfZHJpdmVyLmRyaXZlci5uYW1lLCAmY2xpZW50LT5kZXYsCi0JCQkJJmRzMTY3Ml9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJCQkJICAmZHMxNjcyX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAotCWlmIChJU19FUlIocnRjKSkgewotCQllcnIgPSBQVFJfRVJSKHJ0Yyk7Ci0JCWdvdG8gZXhpdF9kZXRhY2g7Ci0JfQorCWlmIChJU19FUlIocnRjKSkKKwkJcmV0dXJuIFBUUl9FUlIocnRjKTsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHJ0Yyk7CiAKQEAgLTI0MSw3ICsxOTUsNyBAQAogCiAJaWYgKGNvbnRyb2wgJiBEUzE2NzJfUkVHX0NPTlRST0xfRU9TQykKIAkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiT3NjaWxsYXRvciBub3QgZW5hYmxlZC4gIgotCQkJCQkiU2V0IHRpbWUgdG8gZW5hYmxlLlxuIik7CisJCQkgIlNldCB0aW1lIHRvIGVuYWJsZS5cbiIpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KIAllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfY29udHJvbCk7CkBAIC0yNTAsMTkgKzIwNCwxOSBAQAogCiAJcmV0dXJuIDA7CiAKLWV4aXRfZGV2cmVnOgorIGV4aXRfZGV2cmVnOgogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwotCi1leGl0X2RldGFjaDoKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCi1leGl0X2tmcmVlOgotCWtmcmVlKGNsaWVudCk7Ci0KLWV4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRzMTY3Ml9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAicnRjLWRzMTY3MiIsCisJCSAgIH0sCisJLnByb2JlID0gJmRzMTY3Ml9wcm9iZSwKKwkucmVtb3ZlID0gJmRzMTY3Ml9yZW1vdmUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBkczE2NzJfaW5pdCh2b2lkKQogewogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZHMxNjcyX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNzQyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNzQyLmMKaW5kZXggMjRkMzVlZC4uOGJjODUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTc0Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE3NDIuYwpAQCAtNjYsMTcgKzY2LDE3IEBACiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBwZGF0YS0+aW9hZGRyX3J0YzsKIAl1OCBjZW50dXJ5OwogCi0JY2VudHVyeSA9IEJJTjJCQ0QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApOworCWNlbnR1cnkgPSBiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKTsKIAogCXdyaXRlYihSVENfV1JJVEUsIGlvYWRkciArIFJUQ19DT05UUk9MKTsKIAotCXdyaXRlYihCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSwgaW9hZGRyICsgUlRDX1lFQVIpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tb24gKyAxKSwgaW9hZGRyICsgUlRDX01PTlRIKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fd2RheSkgJiBSVENfREFZX01BU0ssIGlvYWRkciArIFJUQ19EQVkpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tZGF5KSwgaW9hZGRyICsgUlRDX0RBVEUpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9ob3VyKSwgaW9hZGRyICsgUlRDX0hPVVJTKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWluKSwgaW9hZGRyICsgUlRDX01JTlVURVMpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpICYgUlRDX1NFQ09ORFNfTUFTSywgaW9hZGRyICsgUlRDX1NFQ09ORFMpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKSwgaW9hZGRyICsgUlRDX1lFQVIpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tb24gKyAxKSwgaW9hZGRyICsgUlRDX01PTlRIKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fd2RheSkgJiBSVENfREFZX01BU0ssIGlvYWRkciArIFJUQ19EQVkpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tZGF5KSwgaW9hZGRyICsgUlRDX0RBVEUpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9ob3VyKSwgaW9hZGRyICsgUlRDX0hPVVJTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWluKSwgaW9hZGRyICsgUlRDX01JTlVURVMpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9zZWMpICYgUlRDX1NFQ09ORFNfTUFTSywgaW9hZGRyICsgUlRDX1NFQ09ORFMpOwogCiAJLyogUlRDX0NFTlRVUlkgYW5kIFJUQ19DT05UUk9MIHNoYXJlIHNhbWUgcmVnaXN0ZXIgKi8KIAl3cml0ZWIoUlRDX1dSSVRFIHwgKGNlbnR1cnkgJiBSVENfQ0VOVFVSWV9NQVNLKSwgaW9hZGRyICsgUlRDX0NFTlRVUlkpOwpAQCAtMTA2LDE0ICsxMDYsMTQgQEAKIAl5ZWFyID0gcmVhZGIoaW9hZGRyICsgUlRDX1lFQVIpOwogCWNlbnR1cnkgPSByZWFkYihpb2FkZHIgKyBSVENfQ0VOVFVSWSkgJiBSVENfQ0VOVFVSWV9NQVNLOwogCXdyaXRlYigwLCBpb2FkZHIgKyBSVENfQ09OVFJPTCk7Ci0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oc2Vjb25kKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihtaW51dGUpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihob3VyKTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4oZGF5KTsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4od2Vlayk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4obW9udGgpIC0gMTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihzZWNvbmQpOworCXRtLT50bV9taW4gPSBiY2QyYmluKG1pbnV0ZSk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKGhvdXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihkYXkpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbih3ZWVrKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihtb250aCkgLSAxOwogCS8qIHllYXIgaXMgMTkwMCArIHRtLT50bV95ZWFyICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHllYXIpICsgQkNEMkJJTihjZW50dXJ5KSAqIDEwMCAtIDE5MDA7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHllYXIpICsgYmNkMmJpbihjZW50dXJ5KSAqIDEwMCAtIDE5MDA7CiAKIAlpZiAocnRjX3ZhbGlkX3RtKHRtKSA8IDApIHsKIAkJZGV2X2VycihkZXYsICJyZXRyaWV2ZWQgZGF0ZS90aW1lIGlzIG5vdCB2YWxpZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMzIzNC5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMzIzNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZDEzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMzMjM0LmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qIGRyaXZlcnMvcnRjL3J0Yy1kczMyMzQuYworICoKKyAqIERyaXZlciBmb3IgRGFsbGFzIFNlbWljb25kdWN0b3IgKERTMzIzNCkgU1BJIFJUQyB3aXRoIEludGVncmF0ZWQgQ3J5c3RhbAorICogYW5kIFNSQU0uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1JTU9NYXggV2lyZWxlc3MgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hhbmdlbG9nOgorICoKKyAqIDA3LU1heS0yMDA4OiBEZW5uaXMgQWJlcmlsbGEgPGRlbnp6emhvbWVAeWFob28uY29tPgorICoJCS0gQ3JlYXRlZCBiYXNlZCBvbiB0aGUgbWF4NjkwMiBjb2RlLiBPbmx5IGltcGxlbWVudHMgdGhlCisgKgkJICBkYXRlL3RpbWUga2VlcGluZyBmdW5jdGlvbnM7IG5vIFNSQU0geWV0LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisKKyNkZWZpbmUgRFMzMjM0X1JFR19TRUNPTkRTCTB4MDAKKyNkZWZpbmUgRFMzMjM0X1JFR19NSU5VVEVTCTB4MDEKKyNkZWZpbmUgRFMzMjM0X1JFR19IT1VSUwkweDAyCisjZGVmaW5lIERTMzIzNF9SRUdfREFZCQkweDAzCisjZGVmaW5lIERTMzIzNF9SRUdfREFURQkJMHgwNAorI2RlZmluZSBEUzMyMzRfUkVHX01PTlRICTB4MDUKKyNkZWZpbmUgRFMzMjM0X1JFR19ZRUFSCQkweDA2CisjZGVmaW5lIERTMzIzNF9SRUdfQ0VOVFVSWQkoMSA8PCA3KSAvKiBCaXQgNyBvZiB0aGUgTW9udGggcmVnaXN0ZXIgKi8KKworI2RlZmluZSBEUzMyMzRfUkVHX0NPTlRST0wJMHgwRQorI2RlZmluZSBEUzMyMzRfUkVHX0NPTlRfU1RBVAkweDBGCisKKyN1bmRlZiBEUzMyMzRfREVCVUcKKworc3RydWN0IGRzMzIzNCB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwl1OCBidWZbOF07IC8qIEJ1cnN0IHJlYWQ6IGFkZHIgKyA3IHJlZ3MgKi8KKwl1OCB0eF9idWZbMl07CisJdTggcnhfYnVmWzJdOworfTsKKworc3RhdGljIHZvaWQgZHMzMjM0X3NldF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHJlc3MsCisJCQkJdW5zaWduZWQgY2hhciBkYXRhKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisKKwkvKiBNU0IgbXVzdCBiZSAnMScgdG8gaW5kaWNhdGUgd3JpdGUgKi8KKwlidWZbMF0gPSBhZGRyZXNzIHwgMHg4MDsKKwlidWZbMV0gPSBkYXRhOworCisJc3BpX3dyaXRlKHNwaSwgYnVmLCAyKTsKK30KKworc3RhdGljIGludCBkczMyMzRfZ2V0X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgYWRkcmVzcywKKwkJCQl1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJc3RydWN0IGRzMzIzNCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtZXNzYWdlOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcjsKKwlpbnQgc3RhdHVzOworCisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEJ1aWxkIG91ciBzcGkgbWVzc2FnZSAqLworCXNwaV9tZXNzYWdlX2luaXQoJm1lc3NhZ2UpOworCW1lbXNldCgmeGZlciwgMCwgc2l6ZW9mKHhmZXIpKTsKKworCS8qIEFkZHJlc3MgKyBkdW1teSB0eCBieXRlICovCisJeGZlci5sZW4gPSAyOworCXhmZXIudHhfYnVmID0gY2hpcC0+dHhfYnVmOworCXhmZXIucnhfYnVmID0gY2hpcC0+cnhfYnVmOworCisJY2hpcC0+dHhfYnVmWzBdID0gYWRkcmVzczsKKwljaGlwLT50eF9idWZbMV0gPSAweGZmOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXIsICZtZXNzYWdlKTsKKworCS8qIGRvIHRoZSBpL28gKi8KKwlzdGF0dXMgPSBzcGlfc3luYyhzcGksICZtZXNzYWdlKTsKKwlpZiAoc3RhdHVzID09IDApCisJCXN0YXR1cyA9IG1lc3NhZ2Uuc3RhdHVzOworCWVsc2UKKwkJcmV0dXJuIHN0YXR1czsKKworCSpkYXRhID0gY2hpcC0+cnhfYnVmWzFdOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkczMyMzRfZ2V0X2RhdGV0aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICpkdCkKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXN0cnVjdCBkczMyMzQgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbWVzc2FnZTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXI7CisJaW50IHN0YXR1czsKKworCS8qIGJ1aWxkIHRoZSBtZXNzYWdlICovCisJc3BpX21lc3NhZ2VfaW5pdCgmbWVzc2FnZSk7CisJbWVtc2V0KCZ4ZmVyLCAwLCBzaXplb2YoeGZlcikpOworCXhmZXIubGVuID0gMSArIDc7CS8qIEFkZHIgKyA3IHJlZ2lzdGVycyAqLworCXhmZXIudHhfYnVmID0gY2hpcC0+YnVmOworCXhmZXIucnhfYnVmID0gY2hpcC0+YnVmOworCWNoaXAtPmJ1ZlswXSA9IDB4MDA7CS8qIFN0YXJ0IGFkZHJlc3MgKi8KKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlciwgJm1lc3NhZ2UpOworCisJLyogZG8gdGhlIGkvbyAqLworCXN0YXR1cyA9IHNwaV9zeW5jKHNwaSwgJm1lc3NhZ2UpOworCWlmIChzdGF0dXMgPT0gMCkKKwkJc3RhdHVzID0gbWVzc2FnZS5zdGF0dXM7CisJZWxzZQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogU2Vjb25kcywgTWludXRlcywgSG91cnMsIERheSwgRGF0ZSwgTW9udGgsIFllYXIgKi8KKwlkdC0+dG1fc2VjCT0gYmNkMmJpbihjaGlwLT5idWZbMV0pOworCWR0LT50bV9taW4JPSBiY2QyYmluKGNoaXAtPmJ1ZlsyXSk7CisJZHQtPnRtX2hvdXIJPSBiY2QyYmluKGNoaXAtPmJ1ZlszXSAmIDB4M2YpOworCWR0LT50bV93ZGF5CT0gYmNkMmJpbihjaGlwLT5idWZbNF0pIC0gMTsgLyogMCA9IFN1biAqLworCWR0LT50bV9tZGF5CT0gYmNkMmJpbihjaGlwLT5idWZbNV0pOworCWR0LT50bV9tb24JPSBiY2QyYmluKGNoaXAtPmJ1Zls2XSAmIDB4MWYpIC0gMTsgLyogMCA9IEphbiAqLworCWR0LT50bV95ZWFyIAk9IGJjZDJiaW4oY2hpcC0+YnVmWzddICYgMHhmZikgKyAxMDA7IC8qIEFzc3VtZSAyMFlZICovCisKKyNpZmRlZiBEUzMyMzRfREVCVUcKKwlkZXZfZGJnKGRldiwgIlxuJXMgOiBSZWFkIFJUQyB2YWx1ZXNcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKGRldiwgInRtX2hvdXI6ICVpXG4iLCBkdC0+dG1faG91cik7CisJZGV2X2RiZyhkZXYsICJ0bV9taW4gOiAlaVxuIiwgZHQtPnRtX21pbik7CisJZGV2X2RiZyhkZXYsICJ0bV9zZWMgOiAlaVxuIiwgZHQtPnRtX3NlYyk7CisJZGV2X2RiZyhkZXYsICJ0bV93ZGF5OiAlaVxuIiwgZHQtPnRtX3dkYXkpOworCWRldl9kYmcoZGV2LCAidG1fbWRheTogJWlcbiIsIGR0LT50bV9tZGF5KTsKKwlkZXZfZGJnKGRldiwgInRtX21vbiA6ICVpXG4iLCBkdC0+dG1fbW9uKTsKKwlkZXZfZGJnKGRldiwgInRtX3llYXI6ICVpXG4iLCBkdC0+dG1feWVhcik7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzMzIzNF9zZXRfZGF0ZXRpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKmR0KQoreworI2lmZGVmIERTMzIzNF9ERUJVRworCWRldl9kYmcoZGV2LCAiXG4lcyA6IFNldHRpbmcgUlRDIHZhbHVlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcoZGV2LCAidG1fc2VjIDogJWlcbiIsIGR0LT50bV9zZWMpOworCWRldl9kYmcoZGV2LCAidG1fbWluIDogJWlcbiIsIGR0LT50bV9taW4pOworCWRldl9kYmcoZGV2LCAidG1faG91cjogJWlcbiIsIGR0LT50bV9ob3VyKTsKKwlkZXZfZGJnKGRldiwgInRtX3dkYXk6ICVpXG4iLCBkdC0+dG1fd2RheSk7CisJZGV2X2RiZyhkZXYsICJ0bV9tZGF5OiAlaVxuIiwgZHQtPnRtX21kYXkpOworCWRldl9kYmcoZGV2LCAidG1fbW9uIDogJWlcbiIsIGR0LT50bV9tb24pOworCWRldl9kYmcoZGV2LCAidG1feWVhcjogJWlcbiIsIGR0LT50bV95ZWFyKTsKKyNlbmRpZgorCisJZHMzMjM0X3NldF9yZWcoZGV2LCBEUzMyMzRfUkVHX1NFQ09ORFMsIGJpbjJiY2QoZHQtPnRtX3NlYykpOworCWRzMzIzNF9zZXRfcmVnKGRldiwgRFMzMjM0X1JFR19NSU5VVEVTLCBiaW4yYmNkKGR0LT50bV9taW4pKTsKKwlkczMyMzRfc2V0X3JlZyhkZXYsIERTMzIzNF9SRUdfSE9VUlMsIGJpbjJiY2QoZHQtPnRtX2hvdXIpICYgMHgzZik7CisKKwkvKiAwID0gU3VuICovCisJZHMzMjM0X3NldF9yZWcoZGV2LCBEUzMyMzRfUkVHX0RBWSwgYmluMmJjZChkdC0+dG1fd2RheSArIDEpKTsKKwlkczMyMzRfc2V0X3JlZyhkZXYsIERTMzIzNF9SRUdfREFURSwgYmluMmJjZChkdC0+dG1fbWRheSkpOworCisJLyogMCA9IEphbiAqLworCWRzMzIzNF9zZXRfcmVnKGRldiwgRFMzMjM0X1JFR19NT05USCwgYmluMmJjZChkdC0+dG1fbW9uICsgMSkpOworCisJLyogQXNzdW1lIDIwWVkgYWx0aG91Z2ggd2UganVzdCB3YW50IHRvIG1ha2Ugc3VyZSBub3QgdG8gZ28gbmVnYXRpdmUuICovCisJaWYgKGR0LT50bV95ZWFyID4gMTAwKQorCQlkdC0+dG1feWVhciAtPSAxMDA7CisKKwlkczMyMzRfc2V0X3JlZyhkZXYsIERTMzIzNF9SRUdfWUVBUiwgYmluMmJjZChkdC0+dG1feWVhcikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHMzMjM0X3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJcmV0dXJuIGRzMzIzNF9nZXRfZGF0ZXRpbWUoZGV2LCB0bSk7Cit9CisKK3N0YXRpYyBpbnQgZHMzMjM0X3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlyZXR1cm4gZHMzMjM0X3NldF9kYXRldGltZShkZXYsIHRtKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGRzMzIzNF9ydGNfb3BzID0geworCS5yZWFkX3RpbWUJPSBkczMyMzRfcmVhZF90aW1lLAorCS5zZXRfdGltZQk9IGRzMzIzNF9zZXRfdGltZSwKK307CisKK3N0YXRpYyBpbnQgZHMzMjM0X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwl1bnNpZ25lZCBjaGFyIHRtcDsKKwlzdHJ1Y3QgZHMzMjM0ICpjaGlwOworCWludCByZXM7CisKKwlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJkczMyMzQiLAorCQkJCSZzcGktPmRldiwgJmRzMzIzNF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKQorCQlyZXR1cm4gUFRSX0VSUihydGMpOworCisJc3BpLT5tb2RlID0gU1BJX01PREVfMzsKKwlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCXNwaV9zZXR1cChzcGkpOworCisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkczMyMzQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoaXApIHsKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwljaGlwLT5ydGMgPSBydGM7CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgY2hpcCk7CisKKwlyZXMgPSBkczMyMzRfZ2V0X3JlZygmc3BpLT5kZXYsIERTMzIzNF9SRUdfU0VDT05EUywgJnRtcCk7CisJaWYgKHJlcykgeworCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwkvKiBDb250cm9sIHNldHRpbmdzCisJICoKKwkgKiBDT05UUk9MX1JFRworCSAqIEJJVCA3CTYJNQk0CTMJMgkxCTAKKwkgKiAgICAgRU9TQwlCQlNRVwlDT05WCVJTMglSUzEJSU5UQ04JQTJJRQlBMUlFCisJICoKKwkgKiAgICAgMAkwCTAJMQkxCTEJMAkwCisJICoKKwkgKiBDT05UUk9MX1NUQVRfUkVHCisJICogQklUIDcJNgk1CTQJMwkyCTEJMAorCSAqICAgICBPU0YJQkIzMmtIeglDUkFURTEJQ1JBVEUwCUVOMzJrSHoJQlNZCUEyRglBMUYKKwkgKgorCSAqICAgICAxCTAJMAkwCTEJMAkwCTAKKwkgKi8KKwlkczMyMzRfZ2V0X3JlZygmc3BpLT5kZXYsIERTMzIzNF9SRUdfQ09OVFJPTCwgJnRtcCk7CisJZHMzMjM0X3NldF9yZWcoJnNwaS0+ZGV2LCBEUzMyMzRfUkVHX0NPTlRST0wsIHRtcCAmIDB4MWMpOworCisJZHMzMjM0X2dldF9yZWcoJnNwaS0+ZGV2LCBEUzMyMzRfUkVHX0NPTlRfU1RBVCwgJnRtcCk7CisJZHMzMjM0X3NldF9yZWcoJnNwaS0+ZGV2LCBEUzMyMzRfUkVHX0NPTlRfU1RBVCwgdG1wICYgMHg4OCk7CisKKwkvKiBQcmludCBvdXIgc2V0dGluZ3MgKi8KKwlkczMyMzRfZ2V0X3JlZygmc3BpLT5kZXYsIERTMzIzNF9SRUdfQ09OVFJPTCwgJnRtcCk7CisJZGV2X2luZm8oJnNwaS0+ZGV2LCAiQ29udHJvbCBSZWc6IDB4JTAyeFxuIiwgdG1wKTsKKworCWRzMzIzNF9nZXRfcmVnKCZzcGktPmRldiwgRFMzMjM0X1JFR19DT05UX1NUQVQsICZ0bXApOworCWRldl9pbmZvKCZzcGktPmRldiwgIkN0cmwvU3RhdCBSZWc6IDB4JTAyeFxuIiwgdG1wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBkczMyMzRfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGRzMzIzNCAqY2hpcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHNwaSk7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IGNoaXAtPnJ0YzsKKworCWlmIChydGMpCisJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCisJa2ZyZWUoY2hpcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGRzMzIzNF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJID0gImRzMzIzNCIsCisJCS5idXMJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkgPSBkczMyMzRfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGRzMzIzNF9yZW1vdmUpLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgZHMzMjM0X2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJEUzMyMzQgU1BJIFJUQyBEcml2ZXJcbiIpOworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZkczMyMzRfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGRzMzIzNF9pbml0KTsKKworc3RhdGljIF9fZXhpdCB2b2lkIGRzMzIzNF9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZkczMyMzRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGRzMzIzNF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEUzMyMzQgU1BJIFJUQyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkRlbm5pcyBBYmVyaWxsYSA8ZGVuenp6aG9tZUB5YWhvby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZm0zMTMwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZm0zMTMwLmMKaW5kZXggYWJmZGZjYi4uM2E3YmUxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWZtMzEzMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1mbTMxMzAuYwpAQCAtMTMxLDE3ICsxMzEsMTcgQEAKIAkJCWZtMzEzMC0+cmVnc1sweGNdLCBmbTMxMzAtPnJlZ3NbMHhkXSwKIAkJCWZtMzEzMC0+cmVnc1sweGVdKTsKIAotCXQtPnRtX3NlYyA9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfU0VDT05EU10gJiAweDdmKTsKLQl0LT50bV9taW4gPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX01JTlVURVNdICYgMHg3Zik7CisJdC0+dG1fc2VjID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19TRUNPTkRTXSAmIDB4N2YpOworCXQtPnRtX21pbiA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfTUlOVVRFU10gJiAweDdmKTsKIAl0bXAgPSBmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19IT1VSU10gJiAweDNmOwotCXQtPnRtX2hvdXIgPSBCQ0QyQklOKHRtcCk7Ci0JdC0+dG1fd2RheSA9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfREFZXSAmIDB4MDcpIC0gMTsKLQl0LT50bV9tZGF5ID0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19EQVRFXSAmIDB4M2YpOworCXQtPnRtX2hvdXIgPSBiY2QyYmluKHRtcCk7CisJdC0+dG1fd2RheSA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfREFZXSAmIDB4MDcpIC0gMTsKKwl0LT50bV9tZGF5ID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19EQVRFXSAmIDB4M2YpOwogCXRtcCA9IGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX01PTlRIU10gJiAweDFmOwotCXQtPnRtX21vbiA9IEJDRDJCSU4odG1wKSAtIDE7CisJdC0+dG1fbW9uID0gYmNkMmJpbih0bXApIC0gMTsKIAogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZLCBhbmQgaWdub3JlIENGIGJpdCAqLwotCXQtPnRtX3llYXIgPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX1lFQVJTXSkgKyAxMDA7CisJdC0+dG1feWVhciA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfWUVBUlNdKSArIDEwMDsKIAogCWRldl9kYmcoZGV2LCAiJXMgc2Vjcz0lZCwgbWlucz0lZCwgIgogCQkiaG91cnM9JWQsIG1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKQEAgLTE2NywxNiArMTY3LDE2IEBACiAJCXQtPnRtX21vbiwgdC0+dG1feWVhciwgdC0+dG1fd2RheSk7CiAKIAkvKiBmaXJzdCByZWdpc3RlciBhZGRyICovCi0JYnVmW0ZNMzEzMF9SVENfU0VDT05EU10gPSBCSU4yQkNEKHQtPnRtX3NlYyk7Ci0JYnVmW0ZNMzEzMF9SVENfTUlOVVRFU10gPSBCSU4yQkNEKHQtPnRtX21pbik7Ci0JYnVmW0ZNMzEzMF9SVENfSE9VUlNdID0gQklOMkJDRCh0LT50bV9ob3VyKTsKLQlidWZbRk0zMTMwX1JUQ19EQVldID0gQklOMkJDRCh0LT50bV93ZGF5ICsgMSk7Ci0JYnVmW0ZNMzEzMF9SVENfREFURV0gPSBCSU4yQkNEKHQtPnRtX21kYXkpOwotCWJ1ZltGTTMxMzBfUlRDX01PTlRIU10gPSBCSU4yQkNEKHQtPnRtX21vbiArIDEpOworCWJ1ZltGTTMxMzBfUlRDX1NFQ09ORFNdID0gYmluMmJjZCh0LT50bV9zZWMpOworCWJ1ZltGTTMxMzBfUlRDX01JTlVURVNdID0gYmluMmJjZCh0LT50bV9taW4pOworCWJ1ZltGTTMxMzBfUlRDX0hPVVJTXSA9IGJpbjJiY2QodC0+dG1faG91cik7CisJYnVmW0ZNMzEzMF9SVENfREFZXSA9IGJpbjJiY2QodC0+dG1fd2RheSArIDEpOworCWJ1ZltGTTMxMzBfUlRDX0RBVEVdID0gYmluMmJjZCh0LT50bV9tZGF5KTsKKwlidWZbRk0zMTMwX1JUQ19NT05USFNdID0gYmluMmJjZCh0LT50bV9tb24gKyAxKTsKIAogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZICovCiAJdG1wID0gdC0+dG1feWVhciAtIDEwMDsKLQlidWZbRk0zMTMwX1JUQ19ZRUFSU10gPSBCSU4yQkNEKHRtcCk7CisJYnVmW0ZNMzEzMF9SVENfWUVBUlNdID0gYmluMmJjZCh0bXApOwogCiAJZGV2X2RiZyhkZXYsICIlczogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIKIAkJIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKQEAgLTIyMiwxMSArMjIyLDExIEBACiAJCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX01PTlRIU10pOwogCiAKLQl0bS0+dG1fc2VjCT0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX1NFQ09ORFNdICYgMHg3Rik7Ci0JdG0tPnRtX21pbgk9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9NSU5VVEVTXSAmIDB4N0YpOwotCXRtLT50bV9ob3VyCT0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX0hPVVJTXSAmIDB4M0YpOwotCXRtLT50bV9tZGF5CT0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX0RBVEVdICYgMHgzRik7Ci0JdG0tPnRtX21vbgk9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9NT05USFNdICYgMHgxRik7CisJdG0tPnRtX3NlYwk9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9TRUNPTkRTXSAmIDB4N0YpOworCXRtLT50bV9taW4JPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fTUlOVVRFU10gJiAweDdGKTsKKwl0bS0+dG1faG91cgk9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9IT1VSU10gJiAweDNGKTsKKwl0bS0+dG1fbWRheQk9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9EQVRFXSAmIDB4M0YpOworCXRtLT50bV9tb24JPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fTU9OVEhTXSAmIDB4MUYpOwogCWlmICh0bS0+dG1fbW9uID4gMCkKIAkJdG0tPnRtX21vbiAtPSAxOyAvKiBSVEMgaXMgMS0xMiwgdG1fbW9uIGlzIDAtMTEgKi8KIAlkZXZfZGJnKGRldiwgIiVzIHNlY3M9JWQsIG1pbnM9JWQsICIKQEAgLTI1MiwyMyArMjUyLDIzIEBACiAKIAlpZiAodG0tPnRtX3NlYyAhPSAtMSkKIAkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9TRUNPTkRTXSA9Ci0JCQlCSU4yQkNEKHRtLT50bV9zZWMpIHwgMHg4MDsKKwkJCWJpbjJiY2QodG0tPnRtX3NlYykgfCAweDgwOwogCiAJaWYgKHRtLT50bV9taW4gIT0gLTEpCiAJCWZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fTUlOVVRFU10gPQotCQkJQklOMkJDRCh0bS0+dG1fbWluKSB8IDB4ODA7CisJCQliaW4yYmNkKHRtLT50bV9taW4pIHwgMHg4MDsKIAogCWlmICh0bS0+dG1faG91ciAhPSAtMSkKIAkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9IT1VSU10gPQotCQkJQklOMkJDRCh0bS0+dG1faG91cikgfCAweDgwOworCQkJYmluMmJjZCh0bS0+dG1faG91cikgfCAweDgwOwogCiAJaWYgKHRtLT50bV9tZGF5ICE9IC0xKQogCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX0RBVEVdID0KLQkJCUJJTjJCQ0QodG0tPnRtX21kYXkpIHwgMHg4MDsKKwkJCWJpbjJiY2QodG0tPnRtX21kYXkpIHwgMHg4MDsKIAogCWlmICh0bS0+dG1fbW9uICE9IC0xKQogCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX01PTlRIU10gPQotCQkJQklOMkJDRCh0bS0+dG1fbW9uICsgMSkgfCAweDgwOworCQkJYmluMmJjZCh0bS0+dG1fbW9uICsgMSkgfCAweDgwOwogCiAJZGV2X2RiZyhkZXYsICJhbGFybSB3cml0ZSAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCiAJCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX1NFQ09ORFNdLApAQCAtNDE0LDE4ICs0MTQsMTggQEAKIAkvKiBUT0RPICovCiAJLyogVE9ETyBuZWVkIHRvIHNhbml0eSBjaGVjayBhbGFybSAqLwogCXRtcCA9IGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX1NFQ09ORFNdOwotCXRtcCA9IEJDRDJCSU4odG1wICYgMHg3Zik7CisJdG1wID0gYmNkMmJpbih0bXAgJiAweDdmKTsKIAlpZiAodG1wID4gNjApCiAJCWdvdG8gZXhpdF9iYWQ7Ci0JdG1wID0gQkNEMkJJTihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19NSU5VVEVTXSAmIDB4N2YpOworCXRtcCA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfTUlOVVRFU10gJiAweDdmKTsKIAlpZiAodG1wID4gNjApCiAJCWdvdG8gZXhpdF9iYWQ7CiAKLQl0bXAgPSBCQ0QyQklOKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0RBVEVdICYgMHgzZik7CisJdG1wID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19EQVRFXSAmIDB4M2YpOwogCWlmICh0bXAgPT0gMCB8fCB0bXAgPiAzMSkKIAkJZ290byBleGl0X2JhZDsKIAotCXRtcCA9IEJDRDJCSU4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfTU9OVEhTXSAmIDB4MWYpOworCXRtcCA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfTU9OVEhTXSAmIDB4MWYpOwogCWlmICh0bXAgPT0gMCB8fCB0bXAgPiAxMikKIAkJZ290byBleGl0X2JhZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDguYyBiL2RyaXZlcnMvcnRjL3J0Yy1pc2wxMjA4LmMKaW5kZXggYTgxYWRhYi4uMmNkNzdhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtaXNsMTIwOC5jCkBAIC0yNTksMjYgKzI1OSwyNiBAQAogCQlyZXR1cm4gc3I7CiAJfQogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19TQ10pOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfTU5dKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX1NDXSk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19NTl0pOwogCiAJLyogSFIgZmllbGQgaGFzIGEgbW9yZSBjb21wbGV4IGludGVycHJldGF0aW9uICovCiAJewogCQljb25zdCB1OCBfaHIgPSByZWdzW0lTTDEyMDhfUkVHX0hSXTsKIAkJaWYgKF9ociAmIElTTDEyMDhfUkVHX0hSX01JTCkJLyogMjRoIGZvcm1hdCAqLwotCQkJdG0tPnRtX2hvdXIgPSBCQ0QyQklOKF9ociAmIDB4M2YpOworCQkJdG0tPnRtX2hvdXIgPSBiY2QyYmluKF9ociAmIDB4M2YpOwogCQllbHNlIHsKIAkJCS8qIDEyaCBmb3JtYXQgKi8KLQkJCXRtLT50bV9ob3VyID0gQkNEMkJJTihfaHIgJiAweDFmKTsKKwkJCXRtLT50bV9ob3VyID0gYmNkMmJpbihfaHIgJiAweDFmKTsKIAkJCWlmIChfaHIgJiBJU0wxMjA4X1JFR19IUl9QTSkJLyogUE0gZmxhZyBzZXQgKi8KIAkJCQl0bS0+dG1faG91ciArPSAxMjsKIAkJfQogCX0KIAotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX0RUXSk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19NT10pIC0gMTsJLyogcnRjIHN0YXJ0cyBhdCAxICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfWVJdKSArIDEwMDsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19EV10pOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX0RUXSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19NT10pIC0gMTsJLyogcnRjIHN0YXJ0cyBhdCAxICovCisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfWVJdKSArIDEwMDsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19EV10pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDUsMTMgKzMwNSwxMyBAQAogCX0KIAogCS8qIE1TQiBvZiBlYWNoIGFsYXJtIHJlZ2lzdGVyIGlzIGFuIGVuYWJsZSBiaXQgKi8KLQl0bS0+dG1fc2VjID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX1NDQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDdmKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX01OQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDdmKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19IUkEgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHgzZik7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKHJlZ3NbSVNMMTIwOF9SRUdfRFRBIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4M2YpOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfU0NBIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4N2YpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfTU5BIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4N2YpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX0hSQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDNmKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocmVnc1tJU0wxMjA4X1JFR19EVEEgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHgzZik7CiAJdG0tPnRtX21vbiA9Ci0JCUJDRDJCSU4ocmVnc1tJU0wxMjA4X1JFR19NT0EgLSBJU0wxMjA4X1JFR19TQ0FdICYgMHgxZikgLSAxOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTihyZWdzW0lTTDEyMDhfUkVHX0RXQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDAzKTsKKwkJYmNkMmJpbihyZWdzW0lTTDEyMDhfUkVHX01PQSAtIElTTDEyMDhfUkVHX1NDQV0gJiAweDFmKSAtIDE7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJlZ3NbSVNMMTIwOF9SRUdfRFdBIC0gSVNMMTIwOF9SRUdfU0NBXSAmIDB4MDMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMjgsMTUgKzMyOCwxNSBAQAogCWludCBzcjsKIAl1OCByZWdzW0lTTDEyMDhfUlRDX1NFQ1RJT05fTEVOXSA9IHsgMCwgfTsKIAotCXJlZ3NbSVNMMTIwOF9SRUdfU0NdID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQlyZWdzW0lTTDEyMDhfUkVHX01OXSA9IEJJTjJCQ0QodG0tPnRtX21pbik7Ci0JcmVnc1tJU0wxMjA4X1JFR19IUl0gPSBCSU4yQkNEKHRtLT50bV9ob3VyKSB8IElTTDEyMDhfUkVHX0hSX01JTDsKKwlyZWdzW0lTTDEyMDhfUkVHX1NDXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJcmVnc1tJU0wxMjA4X1JFR19NTl0gPSBiaW4yYmNkKHRtLT50bV9taW4pOworCXJlZ3NbSVNMMTIwOF9SRUdfSFJdID0gYmluMmJjZCh0bS0+dG1faG91cikgfCBJU0wxMjA4X1JFR19IUl9NSUw7CiAKLQlyZWdzW0lTTDEyMDhfUkVHX0RUXSA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOwotCXJlZ3NbSVNMMTIwOF9SRUdfTU9dID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSk7Ci0JcmVnc1tJU0wxMjA4X1JFR19ZUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyIC0gMTAwKTsKKwlyZWdzW0lTTDEyMDhfUkVHX0RUXSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOworCXJlZ3NbSVNMMTIwOF9SRUdfTU9dID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CisJcmVnc1tJU0wxMjA4X1JFR19ZUl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyIC0gMTAwKTsKIAotCXJlZ3NbSVNMMTIwOF9SRUdfRFddID0gQklOMkJDRCh0bS0+dG1fd2RheSAmIDcpOworCXJlZ3NbSVNMMTIwOF9SRUdfRFddID0gYmluMmJjZCh0bS0+dG1fd2RheSAmIDcpOwogCiAJc3IgPSBpc2wxMjA4X2kyY19nZXRfc3IoY2xpZW50KTsKIAlpZiAoc3IgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKaW5kZXggMjRiYzE2OC4uODkzZjdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwpAQCAtNTYsMjEgKzU2LDI3IEBACiAjZGVmaW5lIE00MVQ4MF9BTEhPVVJfSFQJKDEgPDwgNikJLyogSFQ6IEhhbHQgVXBkYXRlIEJpdCAqLwogI2RlZmluZSBNNDFUODBfRkxBR1NfQUYJCSgxIDw8IDYpCS8qIEFGOiBBbGFybSBGbGFnIEJpdCAqLwogI2RlZmluZSBNNDFUODBfRkxBR1NfQkFUVF9MT1cJKDEgPDwgNCkJLyogQkw6IEJhdHRlcnkgTG93IEJpdCAqLworI2RlZmluZSBNNDFUODBfV0FUQ0hET0dfUkIyCSgxIDw8IDcpCS8qIFJCOiBXYXRjaGRvZyByZXNvbHV0aW9uICovCisjZGVmaW5lIE00MVQ4MF9XQVRDSERPR19SQjEJKDEgPDwgMSkJLyogUkI6IFdhdGNoZG9nIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgTTQxVDgwX1dBVENIRE9HX1JCMAkoMSA8PCAwKQkvKiBSQjogV2F0Y2hkb2cgcmVzb2x1dGlvbiAqLwogCi0jZGVmaW5lIE00MVQ4MF9GRUFUVVJFX0hUCSgxIDw8IDApCi0jZGVmaW5lIE00MVQ4MF9GRUFUVVJFX0JMCSgxIDw8IDEpCisjZGVmaW5lIE00MVQ4MF9GRUFUVVJFX0hUCSgxIDw8IDApCS8qIEhhbHQgZmVhdHVyZSAqLworI2RlZmluZSBNNDFUODBfRkVBVFVSRV9CTAkoMSA8PCAxKQkvKiBCYXR0ZXJ5IGxvdyBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgTTQxVDgwX0ZFQVRVUkVfU1EJKDEgPDwgMikJLyogU3F1YXJld2F2ZSBmZWF0dXJlICovCisjZGVmaW5lIE00MVQ4MF9GRUFUVVJFX1dECSgxIDw8IDMpCS8qIEV4dHJhIHdhdGNoZG9nIHJlc29sdXRpb24gKi8KIAogI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4wNSIKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG00MXQ4MF9pZFtdID0gewotCXsgIm00MXQ4MCIsIDAgfSwKLQl7ICJtNDF0ODEiLCBNNDFUODBfRkVBVFVSRV9IVCB9LAotCXsgIm00MXQ4MXMiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX0JMIH0sCi0JeyAibTQxdDgyIiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB9LAotCXsgIm00MXQ4MyIsIE00MVQ4MF9GRUFUVVJFX0hUIHwgTTQxVDgwX0ZFQVRVUkVfQkwgfSwKLQl7ICJtNDFzdDg0IiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB9LAotCXsgIm00MXN0ODUiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX0JMIH0sCi0JeyAibTQxc3Q4NyIsIE00MVQ4MF9GRUFUVVJFX0hUIHwgTTQxVDgwX0ZFQVRVUkVfQkwgfSwKKwl7ICJtNDF0NjUiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX1dEIH0sCisJeyAibTQxdDgwIiwgTTQxVDgwX0ZFQVRVUkVfU1EgfSwKKwl7ICJtNDF0ODEiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX1NRfSwKKwl7ICJtNDF0ODFzIiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB8IE00MVQ4MF9GRUFUVVJFX1NRIH0sCisJeyAibTQxdDgyIiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB8IE00MVQ4MF9GRUFUVVJFX1NRIH0sCisJeyAibTQxdDgzIiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB8IE00MVQ4MF9GRUFUVVJFX1NRIH0sCisJeyAibTQxc3Q4NCIsIE00MVQ4MF9GRUFUVVJFX0hUIHwgTTQxVDgwX0ZFQVRVUkVfQkwgfCBNNDFUODBfRkVBVFVSRV9TUSB9LAorCXsgIm00MXN0ODUiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX0JMIHwgTTQxVDgwX0ZFQVRVUkVfU1EgfSwKKwl7ICJtNDFzdDg3IiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB8IE00MVQ4MF9GRUFUVVJFX1NRIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG00MXQ4MF9pZCk7CkBAIC0xMDQsMTUgKzExMCwxNSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19TRUNdICYgMHg3Zik7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4oYnVmW000MVQ4MF9SRUdfTUlOXSAmIDB4N2YpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19IT1VSXSAmIDB4M2YpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19EQVldICYgMHgzZik7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfU0VDXSAmIDB4N2YpOworCXRtLT50bV9taW4gPSBiY2QyYmluKGJ1ZltNNDFUODBfUkVHX01JTl0gJiAweDdmKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfSE9VUl0gJiAweDNmKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfREFZXSAmIDB4M2YpOwogCXRtLT50bV93ZGF5ID0gYnVmW000MVQ4MF9SRUdfV0RBWV0gJiAweDA3OwotCXRtLT50bV9tb24gPSBCQ0QyQklOKGJ1ZltNNDFUODBfUkVHX01PTl0gJiAweDFmKSAtIDE7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4oYnVmW000MVQ4MF9SRUdfTU9OXSAmIDB4MWYpIC0gMTsKIAogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZLCBhbmQgaWdub3JlIHRoZSBDZW50dXJ5IEJpdCAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19ZRUFSXSkgKyAxMDA7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKGJ1ZltNNDFUODBfUkVHX1lFQVJdKSArIDEwMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU1LDE5ICsxNjEsMTkgQEAKIAkvKiBNZXJnZSB0aW1lLWRhdGEgYW5kIHJlZ2lzdGVyIGZsYWdzIGludG8gYnVmWzAuLjddICovCiAJYnVmW000MVQ4MF9SRUdfU1NFQ10gPSAwOwogCWJ1ZltNNDFUODBfUkVHX1NFQ10gPQotCQlCSU4yQkNEKHRtLT50bV9zZWMpIHwgKGJ1ZltNNDFUODBfUkVHX1NFQ10gJiB+MHg3Zik7CisJCWJpbjJiY2QodG0tPnRtX3NlYykgfCAoYnVmW000MVQ4MF9SRUdfU0VDXSAmIH4weDdmKTsKIAlidWZbTTQxVDgwX1JFR19NSU5dID0KLQkJQklOMkJDRCh0bS0+dG1fbWluKSB8IChidWZbTTQxVDgwX1JFR19NSU5dICYgfjB4N2YpOworCQliaW4yYmNkKHRtLT50bV9taW4pIHwgKGJ1ZltNNDFUODBfUkVHX01JTl0gJiB+MHg3Zik7CiAJYnVmW000MVQ4MF9SRUdfSE9VUl0gPQotCQlCSU4yQkNEKHRtLT50bV9ob3VyKSB8IChidWZbTTQxVDgwX1JFR19IT1VSXSAmIH4weDNmKSA7CisJCWJpbjJiY2QodG0tPnRtX2hvdXIpIHwgKGJ1ZltNNDFUODBfUkVHX0hPVVJdICYgfjB4M2YpIDsKIAlidWZbTTQxVDgwX1JFR19XREFZXSA9CiAJCSh0bS0+dG1fd2RheSAmIDB4MDcpIHwgKGJ1ZltNNDFUODBfUkVHX1dEQVldICYgfjB4MDcpOwogCWJ1ZltNNDFUODBfUkVHX0RBWV0gPQotCQlCSU4yQkNEKHRtLT50bV9tZGF5KSB8IChidWZbTTQxVDgwX1JFR19EQVldICYgfjB4M2YpOworCQliaW4yYmNkKHRtLT50bV9tZGF5KSB8IChidWZbTTQxVDgwX1JFR19EQVldICYgfjB4M2YpOwogCWJ1ZltNNDFUODBfUkVHX01PTl0gPQotCQlCSU4yQkNEKHRtLT50bV9tb24gKyAxKSB8IChidWZbTTQxVDgwX1JFR19NT05dICYgfjB4MWYpOworCQliaW4yYmNkKHRtLT50bV9tb24gKyAxKSB8IChidWZbTTQxVDgwX1JFR19NT05dICYgfjB4MWYpOwogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZICovCi0JYnVmW000MVQ4MF9SRUdfWUVBUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwlidWZbTTQxVDgwX1JFR19ZRUFSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCiAJaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDEpICE9IDEpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ3cml0ZSBlcnJvclxuIik7CkBAIC0yODIsMTUgKzI4OCwxNSBAQAogCiAJd2J1ZlswXSA9IE00MVQ4MF9SRUdfQUxBUk1fTU9OOyAvKiBvZmZzZXQgaW50byBydGMncyByZWdzICovCiAJcmVnW000MVQ4MF9SRUdfQUxBUk1fU0VDXSB8PSB0LT50aW1lLnRtX3NlYyA+PSAwID8KLQkJQklOMkJDRCh0LT50aW1lLnRtX3NlYykgOiAweDgwOworCQliaW4yYmNkKHQtPnRpbWUudG1fc2VjKSA6IDB4ODA7CiAJcmVnW000MVQ4MF9SRUdfQUxBUk1fTUlOXSB8PSB0LT50aW1lLnRtX21pbiA+PSAwID8KLQkJQklOMkJDRCh0LT50aW1lLnRtX21pbikgOiAweDgwOworCQliaW4yYmNkKHQtPnRpbWUudG1fbWluKSA6IDB4ODA7CiAJcmVnW000MVQ4MF9SRUdfQUxBUk1fSE9VUl0gfD0gdC0+dGltZS50bV9ob3VyID49IDAgPwotCQlCSU4yQkNEKHQtPnRpbWUudG1faG91cikgOiAweDgwOworCQliaW4yYmNkKHQtPnRpbWUudG1faG91cikgOiAweDgwOwogCXJlZ1tNNDFUODBfUkVHX0FMQVJNX0RBWV0gfD0gdC0+dGltZS50bV9tZGF5ID49IDAgPwotCQlCSU4yQkNEKHQtPnRpbWUudG1fbWRheSkgOiAweDgwOworCQliaW4yYmNkKHQtPnRpbWUudG1fbWRheSkgOiAweDgwOwogCWlmICh0LT50aW1lLnRtX21vbiA+PSAwKQotCQlyZWdbTTQxVDgwX1JFR19BTEFSTV9NT05dIHw9IEJJTjJCQ0QodC0+dGltZS50bV9tb24gKyAxKTsKKwkJcmVnW000MVQ4MF9SRUdfQUxBUk1fTU9OXSB8PSBiaW4yYmNkKHQtPnRpbWUudG1fbW9uICsgMSk7CiAJZWxzZQogCQlyZWdbTTQxVDgwX1JFR19BTEFSTV9EQVldIHw9IDB4NDA7CiAKQEAgLTM0MSwxNSArMzQ3LDE1IEBACiAJdC0+dGltZS50bV9tZGF5ID0gLTE7CiAJdC0+dGltZS50bV9tb24gPSAtMTsKIAlpZiAoIShyZWdbTTQxVDgwX1JFR19BTEFSTV9TRUNdICYgMHg4MCkpCi0JCXQtPnRpbWUudG1fc2VjID0gQkNEMkJJTihyZWdbTTQxVDgwX1JFR19BTEFSTV9TRUNdICYgMHg3Zik7CisJCXQtPnRpbWUudG1fc2VjID0gYmNkMmJpbihyZWdbTTQxVDgwX1JFR19BTEFSTV9TRUNdICYgMHg3Zik7CiAJaWYgKCEocmVnW000MVQ4MF9SRUdfQUxBUk1fTUlOXSAmIDB4ODApKQotCQl0LT50aW1lLnRtX21pbiA9IEJDRDJCSU4ocmVnW000MVQ4MF9SRUdfQUxBUk1fTUlOXSAmIDB4N2YpOworCQl0LT50aW1lLnRtX21pbiA9IGJjZDJiaW4ocmVnW000MVQ4MF9SRUdfQUxBUk1fTUlOXSAmIDB4N2YpOwogCWlmICghKHJlZ1tNNDFUODBfUkVHX0FMQVJNX0hPVVJdICYgMHg4MCkpCi0JCXQtPnRpbWUudG1faG91ciA9IEJDRDJCSU4ocmVnW000MVQ4MF9SRUdfQUxBUk1fSE9VUl0gJiAweDNmKTsKKwkJdC0+dGltZS50bV9ob3VyID0gYmNkMmJpbihyZWdbTTQxVDgwX1JFR19BTEFSTV9IT1VSXSAmIDB4M2YpOwogCWlmICghKHJlZ1tNNDFUODBfUkVHX0FMQVJNX0RBWV0gJiAweDgwKSkKLQkJdC0+dGltZS50bV9tZGF5ID0gQkNEMkJJTihyZWdbTTQxVDgwX1JFR19BTEFSTV9EQVldICYgMHgzZik7CisJCXQtPnRpbWUudG1fbWRheSA9IGJjZDJiaW4ocmVnW000MVQ4MF9SRUdfQUxBUk1fREFZXSAmIDB4M2YpOwogCWlmICghKHJlZ1tNNDFUODBfUkVHX0FMQVJNX0RBWV0gJiAweDQwKSkKLQkJdC0+dGltZS50bV9tb24gPSBCQ0QyQklOKHJlZ1tNNDFUODBfUkVHX0FMQVJNX01PTl0gJiAweDFmKSAtIDE7CisJCXQtPnRpbWUudG1fbW9uID0gYmNkMmJpbihyZWdbTTQxVDgwX1JFR19BTEFSTV9NT05dICYgMHgxZikgLSAxOwogCXQtPnRpbWUudG1feWVhciA9IC0xOwogCXQtPnRpbWUudG1fd2RheSA9IC0xOwogCXQtPnRpbWUudG1feWRheSA9IC0xOwpAQCAtMzg2LDggKzM5MiwxMiBAQAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbTQxdDgwX2RhdGEgKmNsaWVudGRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsOwogCisJaWYgKCEoY2xpZW50ZGF0YS0+ZmVhdHVyZXMgJiBNNDFUODBfRkVBVFVSRV9TUSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19TUVcpOwogCWlmICh2YWwgPCAwKQogCQlyZXR1cm4gLUVJTzsKQEAgLTQwOCw5ICs0MTgsMTMgQEAKIAkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBtNDF0ODBfZGF0YSAqY2xpZW50ZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBhbG1vbiwgc3F3OwogCWludCB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCisJaWYgKCEoY2xpZW50ZGF0YS0+ZmVhdHVyZXMgJiBNNDFUODBfRkVBVFVSRV9TUSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKHZhbCkgewogCQlpZiAoIWlzX3Bvd2VyX29mXzIodmFsKSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNDk5LDYgKzUxMyw4IEBACiAJCQkuYnVmCT0gaTJjX2RhdGEsCiAJCX0sCiAJfTsKKwlzdHJ1Y3QgbTQxdDgwX2RhdGEgKmNsaWVudGRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoc2F2ZV9jbGllbnQpOworCiAJaTJjX2RhdGFbMF0gPSAweDA5OwkJLyogd2F0Y2hkb2cgcmVnaXN0ZXIgKi8KIAogCWlmICh3ZHRfbWFyZ2luID4gMzEpCkBAIC01MDksNiArNTI1LDEzIEBACiAJCSAqLwogCQlpMmNfZGF0YVsxXSA9IHdkdF9tYXJnaW48PDIgfCAweDgyOwogCisJLyoKKwkgKiBNNDFUNjUgaGFzIHRocmVlIGJpdHMgZm9yIHdhdGNoZG9nIHJlc29sdXRpb24uICBEb24ndCBzZXQgYml0IDcsIGFzCisJICogdGhhdCB3b3VsZCBiZSBhbiBpbnZhbGlkIHJlc29sdXRpb24uCisJICovCisJaWYgKGNsaWVudGRhdGEtPmZlYXR1cmVzICYgTTQxVDgwX0ZFQVRVUkVfV0QpCisJCWkyY19kYXRhWzFdICY9IH5NNDFUODBfV0FUQ0hET0dfUkIyOworCiAJaTJjX3RyYW5zZmVyKHNhdmVfY2xpZW50LT5hZGFwdGVyLCBtc2dzMSwgMSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTQuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTQuYwppbmRleCA5YjE5NDk5Li5jM2ExOGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDk0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ5NC5jCkBAIC00MSwxNyArNDEsMTcgQEAKIAkJdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKIAogCWJ1ZlswXSA9IDB4ODAgfCBNNDFUOTRfUkVHX1NFQ09ORFM7IC8qIHdyaXRlIHRpbWUgKyBkYXRlICovCi0JYnVmW000MVQ5NF9SRUdfU0VDT05EU10gPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCWJ1ZltNNDFUOTRfUkVHX01JTlVURVNdID0gQklOMkJDRCh0bS0+dG1fbWluKTsKLQlidWZbTTQxVDk0X1JFR19IT1VSU10gICA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpOwotCWJ1ZltNNDFUOTRfUkVHX1dEQVldICAgID0gQklOMkJDRCh0bS0+dG1fd2RheSArIDEpOwotCWJ1ZltNNDFUOTRfUkVHX0RBWV0gICAgID0gQklOMkJDRCh0bS0+dG1fbWRheSk7Ci0JYnVmW000MVQ5NF9SRUdfTU9OVEhdICAgPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKKwlidWZbTTQxVDk0X1JFR19TRUNPTkRTXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJYnVmW000MVQ5NF9SRUdfTUlOVVRFU10gPSBiaW4yYmNkKHRtLT50bV9taW4pOworCWJ1ZltNNDFUOTRfUkVHX0hPVVJTXSAgID0gYmluMmJjZCh0bS0+dG1faG91cik7CisJYnVmW000MVQ5NF9SRUdfV0RBWV0gICAgPSBiaW4yYmNkKHRtLT50bV93ZGF5ICsgMSk7CisJYnVmW000MVQ5NF9SRUdfREFZXSAgICAgPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKKwlidWZbTTQxVDk0X1JFR19NT05USF0gICA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOwogCiAJYnVmW000MVQ5NF9SRUdfSE9VUlNdIHw9IE00MVQ5NF9CSVRfQ0VCOwogCWlmICh0bS0+dG1feWVhciA+PSAxMDApCiAJCWJ1ZltNNDFUOTRfUkVHX0hPVVJTXSB8PSBNNDFUOTRfQklUX0NCOwotCWJ1ZltNNDFUOTRfUkVHX1lFQVJdID0gQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCk7CisJYnVmW000MVQ5NF9SRUdfWUVBUl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAogCXJldHVybiBzcGlfd3JpdGUoc3BpLCBidWYsIDgpOwogfQpAQCAtODIsMTQgKzgyLDE0IEBACiAJCXNwaV93cml0ZShzcGksIGJ1ZiwgMik7CiAJfQogCi0JdG0tPnRtX3NlYyAgPSBCQ0QyQklOKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19TRUNPTkRTKSk7Ci0JdG0tPnRtX21pbiAgPSBCQ0QyQklOKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19NSU5VVEVTKSk7CisJdG0tPnRtX3NlYyAgPSBiY2QyYmluKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19TRUNPTkRTKSk7CisJdG0tPnRtX21pbiAgPSBiY2QyYmluKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19NSU5VVEVTKSk7CiAJaG91ciA9IHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19IT1VSUyk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKGhvdXIgJiAweDNmKTsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX1dEQVkpKSAtIDE7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19EQVkpKTsKLQl0bS0+dG1fbW9uICA9IEJDRDJCSU4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX01PTlRIKSkgLSAxOwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfWUVBUikpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihob3VyICYgMHgzZik7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19XREFZKSkgLSAxOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfREFZKSk7CisJdG0tPnRtX21vbiAgPSBiY2QyYmluKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19NT05USCkpIC0gMTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX1lFQVIpKTsKIAlpZiAoKGhvdXIgJiBNNDFUOTRfQklUX0NCKSB8fCAhKGhvdXIgJiBNNDFUOTRfQklUX0NFQikpCiAJCXRtLT50bV95ZWFyICs9IDEwMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00OHQzNS5jIGIvZHJpdmVycy9ydGMvcnRjLW00OHQzNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMjE5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDM1LmMKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBTR1MtVGhvbXNvbiBNNDhUMzUgVGltZWtlZXBlciBSQU0gY2hpcAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiBXcml0dGVuIGJ5IFVsZiBDYXJsc3NvbiAodWxmY0BlbmdyLnNnaS5jb20pCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRob21hcyBCb2dlbmRvZXJmZXIKKyAqCisgKiBCYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnkgUGF1bCBHb3J0bWFrZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMCIKKworc3RydWN0IG00OHQzNV9ydGMgeworCXU4CXBhZFsweDdmZjhdOyAgICAvKiBzdGFydHMgYXQgMHg3ZmY4ICovCisJdTgJY29udHJvbDsKKwl1OAlzZWM7CisJdTgJbWluOworCXU4CWhvdXI7CisJdTgJZGF5OworCXU4CWRhdGU7CisJdTgJbW9udGg7CisJdTgJeWVhcjsKK307CisKKyNkZWZpbmUgTTQ4VDM1X1JUQ19TRVQJCTB4ODAKKyNkZWZpbmUgTTQ4VDM1X1JUQ19SRUFECQkweDQwCisKK3N0cnVjdCBtNDh0MzVfcHJpdiB7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlzdHJ1Y3QgbTQ4dDM1X3J0YyBfX2lvbWVtICpyZWc7CisJc2l6ZV90IHNpemU7CisJdW5zaWduZWQgbG9uZyBiYXNlYWRkcjsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdGF0aWMgaW50IG00OHQzNV9yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBtNDh0MzVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXU4IGNvbnRyb2w7CisKKwkvKgorCSAqIE9ubHkgdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZnJvbSB0aGUgUlRDIGFyZSBzZXQuIFdlIGxlYXZlCisJICogdG1fd2RheSwgdG1feWRheSBhbmQgdG1faXNkc3QgdW50b3VjaGVkLiBFdmVuIHRob3VnaCB0aGUKKwkgKiBSVEMgaGFzIFJUQ19EQVlfT0ZfV0VFSywgd2UgaWdub3JlIGl0LCBhcyBpdCBpcyBvbmx5IHVwZGF0ZWQKKwkgKiBieSB0aGUgUlRDIHdoZW4gaW5pdGlhbGx5IHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLgorCSAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCWNvbnRyb2wgPSByZWFkYigmcHJpdi0+cmVnLT5jb250cm9sKTsKKwl3cml0ZWIoY29udHJvbCB8IE00OFQzNV9SVENfUkVBRCwgJnByaXYtPnJlZy0+Y29udHJvbCk7CisJdG0tPnRtX3NlYyA9IHJlYWRiKCZwcml2LT5yZWctPnNlYyk7CisJdG0tPnRtX21pbiA9IHJlYWRiKCZwcml2LT5yZWctPm1pbik7CisJdG0tPnRtX2hvdXIgPSByZWFkYigmcHJpdi0+cmVnLT5ob3VyKTsKKwl0bS0+dG1fbWRheSA9IHJlYWRiKCZwcml2LT5yZWctPmRhdGUpOworCXRtLT50bV9tb24gPSByZWFkYigmcHJpdi0+cmVnLT5tb250aCk7CisJdG0tPnRtX3llYXIgPSByZWFkYigmcHJpdi0+cmVnLT55ZWFyKTsKKwl3cml0ZWIoY29udHJvbCwgJnByaXYtPnJlZy0+Y29udHJvbCk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHRtLT50bV9taW4pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbih0bS0+dG1faG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbih0bS0+dG1fbW9uKTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4odG0tPnRtX3llYXIpOworCisJLyoKKwkgKiBBY2NvdW50IGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIGhvdyB0aGUgUlRDIHVzZXMgdGhlIHZhbHVlcworCSAqIGFuZCBob3cgdGhleSBhcmUgZGVmaW5lZCBpbiBhIHN0cnVjdCBydGNfdGltZTsKKwkgKi8KKwl0bS0+dG1feWVhciArPSA3MDsKKwlpZiAodG0tPnRtX3llYXIgPD0gNjkpCisJCXRtLT50bV95ZWFyICs9IDEwMDsKKworCXRtLT50bV9tb24tLTsKKwlyZXR1cm4gcnRjX3ZhbGlkX3RtKHRtKTsKK30KKworc3RhdGljIGludCBtNDh0MzVfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBtNDh0MzVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGNoYXIgbW9uLCBkYXksIGhycywgbWluLCBzZWM7CisJdW5zaWduZWQgaW50IHlyczsKKwl1OCBjb250cm9sOworCisJeXJzID0gdG0tPnRtX3llYXIgKyAxOTAwOworCW1vbiA9IHRtLT50bV9tb24gKyAxOyAgIC8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLworCWRheSA9IHRtLT50bV9tZGF5OworCWhycyA9IHRtLT50bV9ob3VyOworCW1pbiA9IHRtLT50bV9taW47CisJc2VjID0gdG0tPnRtX3NlYzsKKworCWlmICh5cnMgPCAxOTcwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXlycyAtPSAxOTcwOworCWlmICh5cnMgPiAyNTUpICAgIC8qIFRoZXkgYXJlIHVuc2lnbmVkICovCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHlycyA+IDE2OSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoeXJzID49IDEwMCkKKwkJeXJzIC09IDEwMDsKKworCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwltaW4gPSBiaW4yYmNkKG1pbik7CisJaHJzID0gYmluMmJjZChocnMpOworCWRheSA9IGJpbjJiY2QoZGF5KTsKKwltb24gPSBiaW4yYmNkKG1vbik7CisJeXJzID0gYmluMmJjZCh5cnMpOworCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJY29udHJvbCA9IHJlYWRiKCZwcml2LT5yZWctPmNvbnRyb2wpOworCXdyaXRlYihjb250cm9sIHwgTTQ4VDM1X1JUQ19TRVQsICZwcml2LT5yZWctPmNvbnRyb2wpOworCXdyaXRlYih5cnMsICZwcml2LT5yZWctPnllYXIpOworCXdyaXRlYihtb24sICZwcml2LT5yZWctPm1vbnRoKTsKKwl3cml0ZWIoZGF5LCAmcHJpdi0+cmVnLT5kYXRlKTsKKwl3cml0ZWIoaHJzLCAmcHJpdi0+cmVnLT5ob3VyKTsKKwl3cml0ZWIobWluLCAmcHJpdi0+cmVnLT5taW4pOworCXdyaXRlYihzZWMsICZwcml2LT5yZWctPnNlYyk7CisJd3JpdGViKGNvbnRyb2wsICZwcml2LT5yZWctPmNvbnRyb2wpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtNDh0MzVfb3BzID0geworCS5yZWFkX3RpbWUJPSBtNDh0MzVfcmVhZF90aW1lLAorCS5zZXRfdGltZQk9IG00OHQzNV9zZXRfdGltZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG00OHQzNV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IG00OHQzNV9wcml2ICpwcml2OworCWludCByZXQgPSAwOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtNDh0MzVfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5zaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKwkvKgorCSAqIGtsdWRnZTogcmVtb3ZlIHRoZSAjaWZuZGVmIGFmdGVyIGlvYzMgcmVzb3VyY2UKKwkgKiBjb25mbGljdHMgYXJlIHJlc29sdmVkCisJICovCisjaWZuZGVmIENPTkZJR19TR0lfSVAyNworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHByaXYtPnNpemUsIHBkZXYtPm5hbWUpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCisJcHJpdi0+YmFzZWFkZHIgPSByZXMtPnN0YXJ0OworCXByaXYtPnJlZyA9IGlvcmVtYXAocHJpdi0+YmFzZWFkZHIsIHByaXYtPnNpemUpOworCWlmICghcHJpdi0+cmVnKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigibTQ4dDM1IiwgJnBkZXYtPmRldiwKKwkJCQkgICZtNDh0MzVfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKSB7CisJCXJldCA9IFBUUl9FUlIocnRjKTsKKwkJZ290byBvdXQ7CisJfQorCXByaXYtPnJ0YyA9IHJ0YzsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKKwlyZXR1cm4gMDsKKworb3V0OgorCWlmIChwcml2LT5ydGMpCisJCXJ0Y19kZXZpY2VfdW5yZWdpc3Rlcihwcml2LT5ydGMpOworCWlmIChwcml2LT5yZWcpCisJCWlvdW5tYXAocHJpdi0+cmVnKTsKKwlpZiAocHJpdi0+YmFzZWFkZHIpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihwcml2LT5iYXNlYWRkciwgcHJpdi0+c2l6ZSk7CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbTQ4dDM1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtNDh0MzVfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHByaXYtPnJ0Yyk7CisJaW91bm1hcChwcml2LT5yZWcpOworI2lmbmRlZiBDT05GSUdfU0dJX0lQMjcKKwlyZWxlYXNlX21lbV9yZWdpb24ocHJpdi0+YmFzZWFkZHIsIHByaXYtPnNpemUpOworI2VuZGlmCisJa2ZyZWUocHJpdik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG00OHQzNV9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInJ0Yy1tNDh0MzUiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBtNDh0MzVfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtNDh0MzVfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG00OHQzNV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbTQ4dDM1X3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtNDh0MzVfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtNDh0MzVfcGxhdGZvcm1fZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiVGhvbWFzIEJvZ2VuZG9lcmZlciA8dHNib2dlbmRAYWxwaGEuZnJhbmtlbi5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTTQ4VDM1IFJUQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06cnRjLW00OHQzNSIpOworCittb2R1bGVfaW5pdChtNDh0MzVfaW5pdCk7Cittb2R1bGVfZXhpdChtNDh0MzVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMKaW5kZXggY2U0ZWZmNi4uMDRiNjNkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYwpAQCAtNzYsMTAgKzc2LDEwIEBACiAJLyogSXNzdWUgdGhlIFJFQUQgY29tbWFuZCAqLwogCU00OFQ1OV9TRVRfQklUUyhNNDhUNTlfQ05UTF9SRUFELCBNNDhUNTlfQ05UTCk7CiAKLQl0bS0+dG1feWVhcgk9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X1lFQVIpKTsKKwl0bS0+dG1feWVhcgk9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X1lFQVIpKTsKIAkvKiB0bV9tb24gaXMgMC0xMSAqLwotCXRtLT50bV9tb24JPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9NT05USCkpIC0gMTsKLQl0bS0+dG1fbWRheQk9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X01EQVkpKTsKKwl0bS0+dG1fbW9uCT0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfTU9OVEgpKSAtIDE7CisJdG0tPnRtX21kYXkJPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9NREFZKSk7CiAKIAl2YWwgPSBNNDhUNTlfUkVBRChNNDhUNTlfV0RBWSk7CiAJaWYgKChwZGF0YS0+dHlwZSA9PSBNNDhUNTlSVENfVFlQRV9NNDhUNTkpICYmCkBAIC04OCwxMCArODgsMTAgQEAKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwkvKiBvbmUgY2VudHVyeSAqLwogCX0KIAotCXRtLT50bV93ZGF5CT0gQkNEMkJJTih2YWwgJiAweDA3KTsKLQl0bS0+dG1faG91cgk9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X0hPVVIpICYgMHgzRik7Ci0JdG0tPnRtX21pbgk9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X01JTikgJiAweDdGKTsKLQl0bS0+dG1fc2VjCT0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfU0VDKSAmIDB4N0YpOworCXRtLT50bV93ZGF5CT0gYmNkMmJpbih2YWwgJiAweDA3KTsKKwl0bS0+dG1faG91cgk9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X0hPVVIpICYgMHgzRik7CisJdG0tPnRtX21pbgk9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X01JTikgJiAweDdGKTsKKwl0bS0+dG1fc2VjCT0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfU0VDKSAmIDB4N0YpOwogCiAJLyogQ2xlYXIgdGhlIFJFQUQgYml0ICovCiAJTTQ4VDU5X0NMRUFSX0JJVFMoTTQ4VDU5X0NOVExfUkVBRCwgTTQ4VDU5X0NOVEwpOwpAQCAtMTE5LDE3ICsxMTksMTcgQEAKIAkvKiBJc3N1ZSB0aGUgV1JJVEUgY29tbWFuZCAqLwogCU00OFQ1OV9TRVRfQklUUyhNNDhUNTlfQ05UTF9XUklURSwgTTQ4VDU5X0NOVEwpOwogCi0JTTQ4VDU5X1dSSVRFKChCSU4yQkNEKHRtLT50bV9zZWMpICYgMHg3RiksIE00OFQ1OV9TRUMpOwotCU00OFQ1OV9XUklURSgoQklOMkJDRCh0bS0+dG1fbWluKSAmIDB4N0YpLCBNNDhUNTlfTUlOKTsKLQlNNDhUNTlfV1JJVEUoKEJJTjJCQ0QodG0tPnRtX2hvdXIpICYgMHgzRiksIE00OFQ1OV9IT1VSKTsKLQlNNDhUNTlfV1JJVEUoKEJJTjJCQ0QodG0tPnRtX21kYXkpICYgMHgzRiksIE00OFQ1OV9NREFZKTsKKwlNNDhUNTlfV1JJVEUoKGJpbjJiY2QodG0tPnRtX3NlYykgJiAweDdGKSwgTTQ4VDU5X1NFQyk7CisJTTQ4VDU5X1dSSVRFKChiaW4yYmNkKHRtLT50bV9taW4pICYgMHg3RiksIE00OFQ1OV9NSU4pOworCU00OFQ1OV9XUklURSgoYmluMmJjZCh0bS0+dG1faG91cikgJiAweDNGKSwgTTQ4VDU5X0hPVVIpOworCU00OFQ1OV9XUklURSgoYmluMmJjZCh0bS0+dG1fbWRheSkgJiAweDNGKSwgTTQ4VDU5X01EQVkpOwogCS8qIHRtX21vbiBpcyAwLTExICovCi0JTTQ4VDU5X1dSSVRFKChCSU4yQkNEKHRtLT50bV9tb24gKyAxKSAmIDB4MUYpLCBNNDhUNTlfTU9OVEgpOwotCU00OFQ1OV9XUklURShCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSwgTTQ4VDU5X1lFQVIpOworCU00OFQ1OV9XUklURSgoYmluMmJjZCh0bS0+dG1fbW9uICsgMSkgJiAweDFGKSwgTTQ4VDU5X01PTlRIKTsKKwlNNDhUNTlfV1JJVEUoYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCksIE00OFQ1OV9ZRUFSKTsKIAogCWlmIChwZGF0YS0+dHlwZSA9PSBNNDhUNTlSVENfVFlQRV9NNDhUNTkgJiYgKHRtLT50bV95ZWFyIC8gMTAwKSkKIAkJdmFsID0gKE00OFQ1OV9XREFZX0NFQiB8IE00OFQ1OV9XREFZX0NCKTsKLQl2YWwgfD0gKEJJTjJCQ0QodG0tPnRtX3dkYXkpICYgMHgwNyk7CisJdmFsIHw9IChiaW4yYmNkKHRtLT50bV93ZGF5KSAmIDB4MDcpOwogCU00OFQ1OV9XUklURSh2YWwsIE00OFQ1OV9XREFZKTsKIAogCS8qIENsZWFyIHRoZSBXUklURSBiaXQgKi8KQEAgLTE1OCwxOCArMTU4LDE4IEBACiAJLyogSXNzdWUgdGhlIFJFQUQgY29tbWFuZCAqLwogCU00OFQ1OV9TRVRfQklUUyhNNDhUNTlfQ05UTF9SRUFELCBNNDhUNTlfQ05UTCk7CiAKLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X1lFQVIpKTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X1lFQVIpKTsKIAkvKiB0bV9tb24gaXMgMC0xMSAqLwotCXRtLT50bV9tb24gPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9NT05USCkpIC0gMTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfTU9OVEgpKSAtIDE7CiAKIAl2YWwgPSBNNDhUNTlfUkVBRChNNDhUNTlfV0RBWSk7CiAJaWYgKCh2YWwgJiBNNDhUNTlfV0RBWV9DRUIpICYmICh2YWwgJiBNNDhUNTlfV0RBWV9DQikpCiAJCXRtLT50bV95ZWFyICs9IDEwMDsJLyogb25lIGNlbnR1cnkgKi8KIAotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfQUxBUk1fREFURSkpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfQUxBUk1fSE9VUikpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9BTEFSTV9NSU4pKTsKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfQUxBUk1fU0VDKSk7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9BTEFSTV9EQVRFKSk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9BTEFSTV9IT1VSKSk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X0FMQVJNX01JTikpOworCXRtLT50bV9zZWMgPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9BTEFSTV9TRUMpKTsKIAogCS8qIENsZWFyIHRoZSBSRUFEIGJpdCAqLwogCU00OFQ1OV9DTEVBUl9CSVRTKE00OFQ1OV9DTlRMX1JFQUQsIE00OFQ1OV9DTlRMKTsKQEAgLTIwMSwxOCArMjAxLDE4IEBACiAJICogMHhmZiBtZWFucyAiYWx3YXlzIG1hdGNoIgogCSAqLwogCW1kYXkgPSB0bS0+dG1fbWRheTsKLQltZGF5ID0gKG1kYXkgPj0gMSAmJiBtZGF5IDw9IDMxKSA/IEJJTjJCQ0QobWRheSkgOiAweGZmOworCW1kYXkgPSAobWRheSA+PSAxICYmIG1kYXkgPD0gMzEpID8gYmluMmJjZChtZGF5KSA6IDB4ZmY7CiAJaWYgKG1kYXkgPT0gMHhmZikKIAkJbWRheSA9IE00OFQ1OV9SRUFEKE00OFQ1OV9NREFZKTsKIAogCWhvdXIgPSB0bS0+dG1faG91cjsKLQlob3VyID0gKGhvdXIgPCAyNCkgPyBCSU4yQkNEKGhvdXIpIDogMHgwMDsKKwlob3VyID0gKGhvdXIgPCAyNCkgPyBiaW4yYmNkKGhvdXIpIDogMHgwMDsKIAogCW1pbiA9IHRtLT50bV9taW47Ci0JbWluID0gKG1pbiA8IDYwKSA/IEJJTjJCQ0QobWluKSA6IDB4MDA7CisJbWluID0gKG1pbiA8IDYwKSA/IGJpbjJiY2QobWluKSA6IDB4MDA7CiAKIAlzZWMgPSB0bS0+dG1fc2VjOwotCXNlYyA9IChzZWMgPCA2MCkgPyBCSU4yQkNEKHNlYykgOiAweDAwOworCXNlYyA9IChzZWMgPCA2MCkgPyBiaW4yYmNkKHNlYykgOiAweDAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm00OHQ1OS0+bG9jaywgZmxhZ3MpOwogCS8qIElzc3VlIHRoZSBXUklURSBjb21tYW5kICovCkBAIC0zNjAsNyArMzYwLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibnZyYW0iLAogCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5yZWFkID0gbTQ4dDU5X252cmFtX3JlYWQsCiAJLndyaXRlID0gbTQ4dDU5X252cmFtX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jCmluZGV4IDNmN2Y5OWEuLjdjMDQ1Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMKQEAgLTYyLDE0ICs2MiwxNCBAQAogCQl0bS0+dG1fd2RheQk9IG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ET1cpOwogCX0gZWxzZSB7CiAJCS8qIGJjZCBtb2RlICovCi0JCXRtLT50bV9zZWMJPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19TRUMpKTsKLQkJdG0tPnRtX21pbgk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX01JTikpOwotCQl0bS0+dG1faG91cgk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0hPVVIpICYgMHgzRik7Ci0JCXRtLT50bV9tZGF5CT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9NKSk7CisJCXRtLT50bV9zZWMJPSBiY2QyYmluKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19TRUMpKTsKKwkJdG0tPnRtX21pbgk9IGJjZDJiaW4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX01JTikpOworCQl0bS0+dG1faG91cgk9IGJjZDJiaW4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0hPVVIpICYgMHgzRik7CisJCXRtLT50bV9tZGF5CT0gYmNkMmJpbihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9NKSk7CiAJCS8qIHRtX21vbiBpcyAwLTExICovCi0JCXRtLT50bV9tb24JPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19NT05USCkpIC0gMTsKLQkJdG0tPnRtX3llYXIJPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ZRUFSKSkgKyAxMDA7Ci0JCXRtLT50bV93ZGF5CT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9XKSk7CisJCXRtLT50bV9tb24JPSBiY2QyYmluKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19NT05USCkpIC0gMTsKKwkJdG0tPnRtX3llYXIJPSBiY2QyYmluKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19ZRUFSKSkgKyAxMDA7CisJCXRtLT50bV93ZGF5CT0gYmNkMmJpbihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9XKSk7CiAJfQogCiAJLyogY29ycmVjdCB0aGUgaG91ciBpZiB0aGUgY2xvY2sgaXMgaW4gMTJoIG1vZGUgKi8KQEAgLTEwMywxMyArMTAzLDEzIEBACiAJCW9wcy0+d3JpdGVieXRlKHRtLT50bV93ZGF5LCBNNDhUODZfUkVHX0RPVyk7CiAJfSBlbHNlIHsKIAkJLyogYmNkIG1vZGUgKi8KLQkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fc2VjKSwgTTQ4VDg2X1JFR19TRUMpOwotCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV9taW4pLCBNNDhUODZfUkVHX01JTik7Ci0JCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBNNDhUODZfUkVHX0hPVVIpOwotCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV9tZGF5KSwgTTQ4VDg2X1JFR19ET00pOwotCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV9tb24gKyAxKSwgTTQ4VDg2X1JFR19NT05USCk7Ci0JCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApLCBNNDhUODZfUkVHX1lFQVIpOwotCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV93ZGF5KSwgTTQ4VDg2X1JFR19ET1cpOworCQlvcHMtPndyaXRlYnl0ZShiaW4yYmNkKHRtLT50bV9zZWMpLCBNNDhUODZfUkVHX1NFQyk7CisJCW9wcy0+d3JpdGVieXRlKGJpbjJiY2QodG0tPnRtX21pbiksIE00OFQ4Nl9SRUdfTUlOKTsKKwkJb3BzLT53cml0ZWJ5dGUoYmluMmJjZCh0bS0+dG1faG91ciksIE00OFQ4Nl9SRUdfSE9VUik7CisJCW9wcy0+d3JpdGVieXRlKGJpbjJiY2QodG0tPnRtX21kYXkpLCBNNDhUODZfUkVHX0RPTSk7CisJCW9wcy0+d3JpdGVieXRlKGJpbjJiY2QodG0tPnRtX21vbiArIDEpLCBNNDhUODZfUkVHX01PTlRIKTsKKwkJb3BzLT53cml0ZWJ5dGUoYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCksIE00OFQ4Nl9SRUdfWUVBUik7CisJCW9wcy0+d3JpdGVieXRlKGJpbjJiY2QodG0tPnRtX3dkYXkpLCBNNDhUODZfUkVHX0RPVyk7CiAJfQogCiAJLyogdXBkYXRlIGVuZGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMC5jIGIvZHJpdmVycy9ydGMvcnRjLW1heDY5MDAuYwppbmRleCBkZWQzYzBhLi44MDc4Mjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAwLmMKQEAgLTE3LDE5ICsxNywxOCBAQAogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKLSNkZWZpbmUgRFJWX05BTUUgIm1heDY5MDAiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjIiCiAKIC8qCiAgKiByZWdpc3RlciBpbmRpY2VzCiAgKi8KLSNkZWZpbmUgTUFYNjkwMF9SRUdfU0MJCQkwCS8qIHNlY29uZHMJMDAtNTkgKi8KLSNkZWZpbmUgTUFYNjkwMF9SRUdfTU4JCQkxCS8qIG1pbnV0ZXMJMDAtNTkgKi8KLSNkZWZpbmUgTUFYNjkwMF9SRUdfSFIJCQkyCS8qIGhvdXJzCTAwLTIzICovCi0jZGVmaW5lIE1BWDY5MDBfUkVHX0RUCQkJMwkvKiBkYXkgb2YgbW9udGgJMDAtMzEgKi8KLSNkZWZpbmUgTUFYNjkwMF9SRUdfTU8JCQk0CS8qIG1vbnRoCTAxLTEyICovCi0jZGVmaW5lIE1BWDY5MDBfUkVHX0RXCQkJNQkvKiBkYXkgb2Ygd2VlawkgMS03ICAqLwotI2RlZmluZSBNQVg2OTAwX1JFR19ZUgkJCTYJLyogeWVhcgkJMDAtOTkgKi8KKyNkZWZpbmUgTUFYNjkwMF9SRUdfU0MJCQkwCS8qIHNlY29uZHMgICAgICAwMC01OSAqLworI2RlZmluZSBNQVg2OTAwX1JFR19NTgkJCTEJLyogbWludXRlcyAgICAgIDAwLTU5ICovCisjZGVmaW5lIE1BWDY5MDBfUkVHX0hSCQkJMgkvKiBob3VycyAgICAgICAgMDAtMjMgKi8KKyNkZWZpbmUgTUFYNjkwMF9SRUdfRFQJCQkzCS8qIGRheSBvZiBtb250aCAwMC0zMSAqLworI2RlZmluZSBNQVg2OTAwX1JFR19NTwkJCTQJLyogbW9udGggICAgICAgIDAxLTEyICovCisjZGVmaW5lIE1BWDY5MDBfUkVHX0RXCQkJNQkvKiBkYXkgb2Ygd2VlayAgIDEtNyAgKi8KKyNkZWZpbmUgTUFYNjkwMF9SRUdfWVIJCQk2CS8qIHllYXIgICAgICAgICAwMC05OSAqLwogI2RlZmluZSBNQVg2OTAwX1JFR19DVAkJCTcJLyogY29udHJvbCAqLwogCQkJCQkJLyogcmVnaXN0ZXIgOCBpcyB1bmRvY3VtZW50ZWQgKi8KICNkZWZpbmUgTUFYNjkwMF9SRUdfQ0VOVFVSWQkJOQkvKiBjZW50dXJ5ICovCkBAIC0zOSw3ICszOCw2IEBACiAKICNkZWZpbmUgTUFYNjkwMF9SRUdfQ1RfV1AJCSgxIDw8IDcpCS8qIFdyaXRlIFByb3RlY3QgKi8KIAotCiAvKgogICogcmVnaXN0ZXIgcmVhZC93cml0ZSBjb21tYW5kcwogICovCkBAIC01MiwxNiArNTAsNyBAQAogCiAjZGVmaW5lIE1BWDY5MDBfSURMRV9USU1FX0FGVEVSX1dSSVRFCTMJLyogc3BlY2lmaWNhdGlvbiBzYXlzIDIuNSBtUyAqLwogCi0jZGVmaW5lIE1BWDY5MDBfSTJDX0FERFIJCTB4YTAKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQlNQVg2OTAwX0kyQ19BRERSID4+IDEsCi0JSTJDX0NMSUVOVF9FTkQKLX07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwkJCS8qIGRlZmluZXMgYWRkcl9kYXRhICovCi0KLXN0YXRpYyBpbnQgbWF4NjkwMF9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCk7CitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWF4NjkwMF9kcml2ZXI7CiAKIHN0YXRpYyBpbnQgbWF4NjkwMF9pMmNfcmVhZF9yZWdzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICpidWYpCiB7CkBAIC02OSwzNiArNTgsMzUgQEAKIAl1OCByZWdfY2VudHVyeV9yZWFkWzFdID0geyBNQVg2OTAwX1JFR19DRU5UVVJZX1JFQUQgfTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2dzWzRdID0gewogCQl7Ci0JCQkuYWRkcgk9IGNsaWVudC0+YWRkciwKLQkJCS5mbGFncwk9IDAsIC8qIHdyaXRlICovCi0JCQkubGVuCT0gc2l6ZW9mKHJlZ19idXJzdF9yZWFkKSwKLQkJCS5idWYJPSByZWdfYnVyc3RfcmVhZAotCQl9LAorCQkgLmFkZHIgPSBjbGllbnQtPmFkZHIsCisJCSAuZmxhZ3MgPSAwLAkvKiB3cml0ZSAqLworCQkgLmxlbiA9IHNpemVvZihyZWdfYnVyc3RfcmVhZCksCisJCSAuYnVmID0gcmVnX2J1cnN0X3JlYWR9CisJCSwKIAkJewotCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCi0JCQkuZmxhZ3MJPSBJMkNfTV9SRCwKLQkJCS5sZW4JPSBNQVg2OTAwX0JVUlNUX0xFTiwKLQkJCS5idWYJPSBidWYKLQkJfSwKKwkJIC5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkgLmZsYWdzID0gSTJDX01fUkQsCisJCSAubGVuID0gTUFYNjkwMF9CVVJTVF9MRU4sCisJCSAuYnVmID0gYnVmfQorCQksCiAJCXsKLQkJCS5hZGRyCT0gY2xpZW50LT5hZGRyLAotCQkJLmZsYWdzCT0gMCwgLyogd3JpdGUgKi8KLQkJCS5sZW4JPSBzaXplb2YocmVnX2NlbnR1cnlfcmVhZCksCi0JCQkuYnVmCT0gcmVnX2NlbnR1cnlfcmVhZAotCQl9LAorCQkgLmFkZHIgPSBjbGllbnQtPmFkZHIsCisJCSAuZmxhZ3MgPSAwLAkvKiB3cml0ZSAqLworCQkgLmxlbiA9IHNpemVvZihyZWdfY2VudHVyeV9yZWFkKSwKKwkJIC5idWYgPSByZWdfY2VudHVyeV9yZWFkfQorCQksCiAJCXsKLQkJCS5hZGRyCT0gY2xpZW50LT5hZGRyLAotCQkJLmZsYWdzCT0gSTJDX01fUkQsCi0JCQkubGVuCT0gc2l6ZW9mKGJ1ZltNQVg2OTAwX1JFR19DRU5UVVJZXSksCi0JCQkuYnVmCT0gJmJ1ZltNQVg2OTAwX1JFR19DRU5UVVJZXQotCQl9CisJCSAuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJIC5mbGFncyA9IEkyQ19NX1JELAorCQkgLmxlbiA9IHNpemVvZihidWZbTUFYNjkwMF9SRUdfQ0VOVFVSWV0pLAorCQkgLmJ1ZiA9ICZidWZbTUFYNjkwMF9SRUdfQ0VOVFVSWV0KKwkJIH0KIAl9OwogCWludCByYzsKIAogCXJjID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7CiAJaWYgKHJjICE9IEFSUkFZX1NJWkUobXNncykpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogcmVnaXN0ZXIgcmVhZCBmYWlsZWRcbiIsCi0JCQlfX2Z1bmNfXyk7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHJlZ2lzdGVyIHJlYWQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwOSwyMCArOTcsMTggQEAKIAl1OCBpMmNfY2VudHVyeV9idWZbMSArIDFdID0geyBNQVg2OTAwX1JFR19DRU5UVVJZX1dSSVRFIH07CiAJc3RydWN0IGkyY19tc2cgY2VudHVyeV9tc2dzWzFdID0gewogCQl7Ci0JCQkuYWRkcgk9IGNsaWVudC0+YWRkciwKLQkJCS5mbGFncwk9IDAsIC8qIHdyaXRlICovCi0JCQkubGVuCT0gc2l6ZW9mKGkyY19jZW50dXJ5X2J1ZiksCi0JCQkuYnVmCT0gaTJjX2NlbnR1cnlfYnVmCi0JCX0KKwkJIC5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkgLmZsYWdzID0gMCwJLyogd3JpdGUgKi8KKwkJIC5sZW4gPSBzaXplb2YoaTJjX2NlbnR1cnlfYnVmKSwKKwkJIC5idWYgPSBpMmNfY2VudHVyeV9idWZ9CiAJfTsKIAl1OCBpMmNfYnVyc3RfYnVmW01BWDY5MDBfQlVSU1RfTEVOICsgMV0gPSB7IE1BWDY5MDBfUkVHX0JVUlNUX1dSSVRFIH07CiAJc3RydWN0IGkyY19tc2cgYnVyc3RfbXNnc1sxXSA9IHsKIAkJewotCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCi0JCQkuZmxhZ3MJPSAwLCAvKiB3cml0ZSAqLwotCQkJLmxlbgk9IHNpemVvZihpMmNfYnVyc3RfYnVmKSwKLQkJCS5idWYJPSBpMmNfYnVyc3RfYnVmCi0JCX0KKwkJIC5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkgLmZsYWdzID0gMCwJLyogd3JpdGUgKi8KKwkJIC5sZW4gPSBzaXplb2YoaTJjX2J1cnN0X2J1ZiksCisJCSAuYnVmID0gaTJjX2J1cnN0X2J1Zn0KIAl9OwogCWludCByYzsKIApAQCAtMTMzLDEwICsxMTksMTIgQEAKIAkgKiBiaXQgYXMgcGFydCBvZiB0aGUgYnVyc3Qgd3JpdGUuCiAJICovCiAJaTJjX2NlbnR1cnlfYnVmWzFdID0gYnVmW01BWDY5MDBfUkVHX0NFTlRVUlldOworCiAJcmMgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBjZW50dXJ5X21zZ3MsCiAJCQkgIEFSUkFZX1NJWkUoY2VudHVyeV9tc2dzKSk7CiAJaWYgKHJjICE9IEFSUkFZX1NJWkUoY2VudHVyeV9tc2dzKSkKIAkJZ290byB3cml0ZV9mYWlsZWQ7CisKIAltc2xlZXAoTUFYNjkwMF9JRExFX1RJTUVfQUZURVJfV1JJVEUpOwogCiAJbWVtY3B5KCZpMmNfYnVyc3RfYnVmWzFdLCBidWYsIE1BWDY5MDBfQlVSU1RfTEVOKTsKQEAgLTE0OCw0NSArMTM2LDExIEBACiAKIAlyZXR1cm4gMDsKIAotd3JpdGVfZmFpbGVkOgotCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHJlZ2lzdGVyIHdyaXRlIGZhaWxlZFxuIiwKLQkJX19mdW5jX18pOworIHdyaXRlX2ZhaWxlZDoKKwlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiByZWdpc3RlciB3cml0ZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gLUVJTzsKIH0KIAotc3RhdGljIGludCBtYXg2OTAwX2kyY192YWxpZGF0ZV9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQl1OCByZWdzW01BWDY5MDBfUkVHX0xFTl07Ci0JdTggemVyb19tYXNrW10gPSB7Ci0JCTB4ODAsCS8qIHNlY29uZHMgKi8KLQkJMHg4MCwJLyogbWludXRlcyAqLwotCQkweDQwLAkvKiBob3VycyAqLwotCQkweGMwLAkvKiBkYXkgb2YgbW9udGggKi8KLQkJMHhlMCwJLyogbW9udGggKi8KLQkJMHhmOCwJLyogZGF5IG9mIHdlZWsgKi8KLQkJMHgwMCwJLyogeWVhciAqLwotCQkweDdmLAkvKiBjb250cm9sICovCi0JfTsKLQlpbnQgaTsKLQlpbnQgcmM7Ci0JaW50IHJlc2VydmVkOwotCi0JcmVzZXJ2ZWQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNQVg2OTAwX1JFR19SRVNFUlZFRF9SRUFEKTsKLQlpZiAocmVzZXJ2ZWQgIT0gMHgwNykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlyYyA9IG1heDY5MDBfaTJjX3JlYWRfcmVncyhjbGllbnQsIHJlZ3MpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHplcm9fbWFzayk7ICsraSkgewotCQlpZiAocmVnc1tpXSAmIHplcm9fbWFza1tpXSkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG1heDY5MDBfaTJjX3JlYWRfdGltZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCWludCByYzsKQEAgLTE5NiwxNCArMTUwLDE0IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19TQ10pOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfTU5dKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19IUl0gJiAweDNmKTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19EVF0pOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfTU9dKSAtIDE7Ci0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfWVJdKSArCi0JCSAgICAgIEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19DRU5UVVJZXSkgKiAxMDAgLSAxOTAwOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX0RXXSk7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19TQ10pOworCXRtLT50bV9taW4gPSBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfTU5dKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19IUl0gJiAweDNmKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19EVF0pOworCXRtLT50bV9tb24gPSBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfTU9dKSAtIDE7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfWVJdKSArCisJCSAgICAgIGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19DRU5UVVJZXSkgKiAxMDAgLSAxOTAwOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbihyZWdzW01BWDY5MDBfUkVHX0RXXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMSw3ICsxNjUsNyBAQAogc3RhdGljIGludCBtYXg2OTAwX2kyY19jbGVhcl93cml0ZV9wcm90ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJaW50IHJjOwotCXJjID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YSAoY2xpZW50LCBNQVg2OTAwX1JFR19DT05UUk9MX1dSSVRFLCAwKTsKKwlyYyA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBNQVg2OTAwX1JFR19DT05UUk9MX1dSSVRFLCAwKTsKIAlpZiAocmMgPCAwKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IGNvbnRyb2wgcmVnaXN0ZXIgd3JpdGUgZmFpbGVkXG4iLAogCQkJX19mdW5jX18pOwpAQCAtMjIwLDggKzE3NCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWF4NjkwMF9pMmNfc2V0X3RpbWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCQlzdHJ1Y3QgcnRjX3RpbWUgY29uc3QgKnRtKQorc3RhdGljIGludAorbWF4NjkwMF9pMmNfc2V0X3RpbWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHJ0Y190aW1lIGNvbnN0ICp0bSkKIHsKIAl1OCByZWdzW01BWDY5MDBfUkVHX0xFTl07CiAJaW50IHJjOwpAQCAtMjMwLDE0ICsxODQsMTQgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZWdzW01BWDY5MDBfUkVHX1NDXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JcmVnc1tNQVg2OTAwX1JFR19NTl0gPSBCSU4yQkNEKHRtLT50bV9taW4pOwotCXJlZ3NbTUFYNjkwMF9SRUdfSFJdID0gQklOMkJDRCh0bS0+dG1faG91cik7Ci0JcmVnc1tNQVg2OTAwX1JFR19EVF0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKLQlyZWdzW01BWDY5MDBfUkVHX01PXSA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOwotCXJlZ3NbTUFYNjkwMF9SRUdfRFddID0gQklOMkJDRCh0bS0+dG1fd2RheSk7Ci0JcmVnc1tNQVg2OTAwX1JFR19ZUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKLQlyZWdzW01BWDY5MDBfUkVHX0NFTlRVUlldID0gQklOMkJDRCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCk7CisJcmVnc1tNQVg2OTAwX1JFR19TQ10gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCXJlZ3NbTUFYNjkwMF9SRUdfTU5dID0gYmluMmJjZCh0bS0+dG1fbWluKTsKKwlyZWdzW01BWDY5MDBfUkVHX0hSXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOworCXJlZ3NbTUFYNjkwMF9SRUdfRFRdID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJcmVnc1tNQVg2OTAwX1JFR19NT10gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKKwlyZWdzW01BWDY5MDBfUkVHX0RXXSA9IGJpbjJiY2QodG0tPnRtX3dkYXkpOworCXJlZ3NbTUFYNjkwMF9SRUdfWVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CisJcmVnc1tNQVg2OTAwX1JFR19DRU5UVVJZXSA9IGJpbjJiY2QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApOwogCS8qIHNldCB3cml0ZSBwcm90ZWN0ICovCiAJcmVnc1tNQVg2OTAwX1JFR19DVF0gPSBNQVg2OTAwX1JFR19DVF9XUDsKIApAQCAtMjU4LDg5ICsyMTIsNDkgQEAKIAlyZXR1cm4gbWF4NjkwMF9pMmNfc2V0X3RpbWUodG9faTJjX2NsaWVudChkZXYpLCB0bSk7CiB9CiAKLXN0YXRpYyBpbnQgbWF4NjkwMF9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IG1heDY5MDBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBtYXg2OTAwX3Byb2JlKTsKLX0KLQotc3RhdGljIGludCBtYXg2OTAwX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgcnRjX2RldmljZSAqY29uc3QgcnRjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJaWYgKHJ0YykKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAKLQlyZXR1cm4gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDY5MDBfZHJpdmVyID0gewotCS5kcml2ZXIJCT0gewotCQkubmFtZQk9IERSVl9OQU1FLAotCX0sCi0JLmlkCQk9IEkyQ19EUklWRVJJRF9NQVg2OTAwLAotCS5hdHRhY2hfYWRhcHRlciA9IG1heDY5MDBfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQJPSBtYXg2OTAwX2RldGFjaF9jbGllbnQsCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbWF4NjkwMF9ydGNfb3BzID0gewotCS5yZWFkX3RpbWUJPSBtYXg2OTAwX3J0Y19yZWFkX3RpbWUsCi0JLnNldF90aW1lCT0gbWF4NjkwMF9ydGNfc2V0X3RpbWUsCisJLnJlYWRfdGltZSA9IG1heDY5MDBfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUgPSBtYXg2OTAwX3J0Y19zZXRfdGltZSwKIH07CiAKLXN0YXRpYyBpbnQgbWF4NjkwMF9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3N0YXRpYyBpbnQKK21heDY5MDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IE5VTEw7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IE5VTEw7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIAotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gZmFpbG91dDsKLQl9CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpCisJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2xpZW50ID09IE5VTEwpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxvdXQ7Ci0JfQotCi0JY2xpZW50LT5hZGRyID0gYWRkcjsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJm1heDY5MDBfZHJpdmVyOwotCXN0cmxjcHkoY2xpZW50LT5uYW1lLCBEUlZfTkFNRSwgSTJDX05BTUVfU0laRSk7Ci0KLQlpZiAoa2luZCA8IDApIHsKLQkJcmMgPSBtYXg2OTAwX2kyY192YWxpZGF0ZV9jbGllbnQoY2xpZW50KTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gZmFpbG91dDsKLQl9Ci0KLQlyYyA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKHJjIDwgMCkKLQkJZ290byBmYWlsb3V0OwotCi0JZGV2X2luZm8oJmNsaWVudC0+ZGV2LAotCQkgImNoaXAgZm91bmQsIGRyaXZlciB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiY2hpcCBmb3VuZCwgZHJpdmVyIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKIAogCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIobWF4NjkwMF9kcml2ZXIuZHJpdmVyLm5hbWUsCi0JCQkJICAmY2xpZW50LT5kZXYsCi0JCQkJICAmbWF4NjkwMF9ydGNfb3BzLCBUSElTX01PRFVMRSk7Ci0JaWYgKElTX0VSUihydGMpKSB7Ci0JCXJjID0gUFRSX0VSUihydGMpOwotCQlnb3RvIGZhaWxvdXRfZGV0YWNoOwotCX0KKwkJCQkgICZjbGllbnQtPmRldiwgJm1heDY5MDBfcnRjX29wcywgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkKKwkJcmV0dXJuIFBUUl9FUlIocnRjKTsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHJ0Yyk7CiAKIAlyZXR1cm4gMDsKLQotZmFpbG91dF9kZXRhY2g6Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLWZhaWxvdXQ6Ci0Ja2ZyZWUoY2xpZW50KTsKLQlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg2OTAwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJydGMtbWF4NjkwMCIsCisJCSAgIH0sCisJLnByb2JlID0gbWF4NjkwMF9wcm9iZSwKKwkucmVtb3ZlID0gbWF4NjkwMF9yZW1vdmUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBtYXg2OTAwX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm1heDY5MDBfZHJpdmVyKTsKQEAgLTM1Miw2ICsyNjYsNyBAQAogfQogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk1heGltIE1BWDY5MDAgUlRDIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiRGFsZSBGYXJuc3dvcnRoIDxkYWxlQGZhcm5zd29ydGgub3JnPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMi5jIGIvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYwppbmRleCA3OGIyNTUxLi4yZjY1MDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAyLmMKQEAgLTEyNCwxNSArMTI0LDE1IEBACiAKIAkvKiBUaGUgY2hpcCBzZW5kcyBkYXRhIGluIHRoaXMgb3JkZXI6CiAJICogU2Vjb25kcywgTWludXRlcywgSG91cnMsIERhdGUsIE1vbnRoLCBEYXksIFllYXIgKi8KLQlkdC0+dG1fc2VjCT0gQkNEMkJJTihjaGlwLT5idWZbMV0pOwotCWR0LT50bV9taW4JPSBCQ0QyQklOKGNoaXAtPmJ1ZlsyXSk7Ci0JZHQtPnRtX2hvdXIJPSBCQ0QyQklOKGNoaXAtPmJ1ZlszXSk7Ci0JZHQtPnRtX21kYXkJPSBCQ0QyQklOKGNoaXAtPmJ1Zls0XSk7Ci0JZHQtPnRtX21vbgk9IEJDRDJCSU4oY2hpcC0+YnVmWzVdKSAtIDE7Ci0JZHQtPnRtX3dkYXkJPSBCQ0QyQklOKGNoaXAtPmJ1Zls2XSk7Ci0JZHQtPnRtX3llYXIgPSBCQ0QyQklOKGNoaXAtPmJ1Zls3XSk7CisJZHQtPnRtX3NlYwk9IGJjZDJiaW4oY2hpcC0+YnVmWzFdKTsKKwlkdC0+dG1fbWluCT0gYmNkMmJpbihjaGlwLT5idWZbMl0pOworCWR0LT50bV9ob3VyCT0gYmNkMmJpbihjaGlwLT5idWZbM10pOworCWR0LT50bV9tZGF5CT0gYmNkMmJpbihjaGlwLT5idWZbNF0pOworCWR0LT50bV9tb24JPSBiY2QyYmluKGNoaXAtPmJ1Zls1XSkgLSAxOworCWR0LT50bV93ZGF5CT0gYmNkMmJpbihjaGlwLT5idWZbNl0pOworCWR0LT50bV95ZWFyID0gYmNkMmJpbihjaGlwLT5idWZbN10pOwogCi0JY2VudHVyeSA9IEJDRDJCSU4odG1wKSAqIDEwMDsKKwljZW50dXJ5ID0gYmNkMmJpbih0bXApICogMTAwOwogCiAJZHQtPnRtX3llYXIgKz0gY2VudHVyeTsKIAlkdC0+dG1feWVhciAtPSAxOTAwOwpAQCAtMTY4LDE1ICsxNjgsMTUgQEAKIAkvKiBSZW1vdmUgd3JpdGUgcHJvdGVjdGlvbiAqLwogCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4RiwgMCk7CiAKLQltYXg2OTAyX3NldF9yZWcoZGV2LCAweDAxLCBCSU4yQkNEKGR0LT50bV9zZWMpKTsKLQltYXg2OTAyX3NldF9yZWcoZGV2LCAweDAzLCBCSU4yQkNEKGR0LT50bV9taW4pKTsKLQltYXg2OTAyX3NldF9yZWcoZGV2LCAweDA1LCBCSU4yQkNEKGR0LT50bV9ob3VyKSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwMSwgYmluMmJjZChkdC0+dG1fc2VjKSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwMywgYmluMmJjZChkdC0+dG1fbWluKSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwNSwgYmluMmJjZChkdC0+dG1faG91cikpOwogCi0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwNywgQklOMkJDRChkdC0+dG1fbWRheSkpOwotCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDksIEJJTjJCQ0QoZHQtPnRtX21vbisxKSk7Ci0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwQiwgQklOMkJDRChkdC0+dG1fd2RheSkpOwotCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MEQsIEJJTjJCQ0QoZHQtPnRtX3llYXIlMTAwKSk7Ci0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgxMywgQklOMkJDRChkdC0+dG1feWVhci8xMDApKTsKKwltYXg2OTAyX3NldF9yZWcoZGV2LCAweDA3LCBiaW4yYmNkKGR0LT50bV9tZGF5KSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwOSwgYmluMmJjZChkdC0+dG1fbW9uKzEpKTsKKwltYXg2OTAyX3NldF9yZWcoZGV2LCAweDBCLCBiaW4yYmNkKGR0LT50bV93ZGF5KSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwRCwgYmluMmJjZChkdC0+dG1feWVhciUxMDApKTsKKwltYXg2OTAyX3NldF9yZWcoZGV2LCAweDEzLCBiaW4yYmNkKGR0LT50bV95ZWFyLzEwMCkpOwogCiAJLyogQ29tcHVsYWIgdXNlZCBhIGRlbGF5IGhlcmUuIEhvd2V2ZXIsIHRoZSBkYXRhc2hlZXQKIAkgKiBkb2VzIG5vdCBtZW50aW9uIGEgZGVsYXkgYmVpbmcgcmVxdWlyZWQgYW55d2hlcmUuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCmluZGV4IDg4NzY2MDUuLjJjYmViMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwpAQCAtMTg2LDMwICsxODYsMzAgQEAKIAlpZiAocnRjX3ZhbGlkX3RtKHRtKSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXRtLT50bV9zZWMgPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCXRtLT50bV9taW4gPSBCSU4yQkNEKHRtLT50bV9taW4pOwotCXRtLT50bV9ob3VyID0gQklOMkJDRCh0bS0+dG1faG91cik7Ci0JdG0tPnRtX21kYXkgPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fc2VjID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwl0bS0+dG1fbWluID0gYmluMmJjZCh0bS0+dG1fbWluKTsKKwl0bS0+dG1faG91ciA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOworCXRtLT50bV9tZGF5ID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CiAKLQl0bS0+dG1fbW9uID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSk7CisJdG0tPnRtX21vbiA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOwogCiAJLyogZXBvY2ggPT0gMTkwMCAqLwogCWlmICh0bS0+dG1feWVhciA8IDEwMCB8fCB0bS0+dG1feWVhciA+IDE5OSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JdG0tPnRtX3llYXIgPSBCSU4yQkNEKHRtLT50bV95ZWFyIC0gMTAwKTsKKwl0bS0+dG1feWVhciA9IGJpbjJiY2QodG0tPnRtX3llYXIgLSAxMDApOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGJjZDJ0bShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHRtLT50bV9zZWMpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHRtLT50bV9taW4pOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTih0bS0+dG1faG91cik7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKHRtLT50bV9tZGF5KTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTih0bS0+dG1fbW9uKSAtIDE7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4odG0tPnRtX3NlYyk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4odG0tPnRtX21pbik7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHRtLT50bV9ob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4odG0tPnRtX21kYXkpOworCXRtLT50bV9tb24gPSBiY2QyYmluKHRtLT50bV9tb24pIC0gMTsKIAkvKiBlcG9jaCA9PSAxOTAwICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHRtLT50bV95ZWFyKSArIDEwMDsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4odG0tPnRtX3llYXIpICsgMTAwOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCmluZGV4IDc0OGE1MDIuLmI3MjU5MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYwpAQCAtOTcsMTMgKzk3LDEzIEBACiAJCWJ1Zls4XSk7CiAKIAotCXRtLT50bV9zZWMgPSBCQ0QyQklOKGJ1ZltQQ0Y4NTYzX1JFR19TQ10gJiAweDdGKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihidWZbUENGODU2M19SRUdfTU5dICYgMHg3Rik7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKGJ1ZltQQ0Y4NTYzX1JFR19IUl0gJiAweDNGKTsgLyogcnRjIGhyIDAtMjMgKi8KLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4oYnVmW1BDRjg1NjNfUkVHX0RNXSAmIDB4M0YpOworCXRtLT50bV9zZWMgPSBiY2QyYmluKGJ1ZltQQ0Y4NTYzX1JFR19TQ10gJiAweDdGKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihidWZbUENGODU2M19SRUdfTU5dICYgMHg3Rik7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKGJ1ZltQQ0Y4NTYzX1JFR19IUl0gJiAweDNGKTsgLyogcnRjIGhyIDAtMjMgKi8KKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oYnVmW1BDRjg1NjNfUkVHX0RNXSAmIDB4M0YpOwogCXRtLT50bV93ZGF5ID0gYnVmW1BDRjg1NjNfUkVHX0RXXSAmIDB4MDc7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4oYnVmW1BDRjg1NjNfUkVHX01PXSAmIDB4MUYpIC0gMTsgLyogcnRjIG1uIDEtMTIgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oYnVmW1BDRjg1NjNfUkVHX1lSXSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4oYnVmW1BDRjg1NjNfUkVHX01PXSAmIDB4MUYpIC0gMTsgLyogcnRjIG1uIDEtMTIgKi8KKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oYnVmW1BDRjg1NjNfUkVHX1lSXSk7CiAJaWYgKHRtLT50bV95ZWFyIDwgNzApCiAJCXRtLT50bV95ZWFyICs9IDEwMDsJLyogYXNzdW1lIHdlIGFyZSBpbiAxOTcwLi4uMjA2OSAqLwogCS8qIGRldGVjdCB0aGUgcG9sYXJpdHkgaGV1cmlzdGljYWxseS4gc2VlIG5vdGUgYWJvdmUuICovCkBAIC0xMzgsMTcgKzEzOCwxNyBAQAogCQl0bS0+dG1fbWRheSwgdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKIAogCS8qIGhvdXJzLCBtaW51dGVzIGFuZCBzZWNvbmRzICovCi0JYnVmW1BDRjg1NjNfUkVHX1NDXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JYnVmW1BDRjg1NjNfUkVHX01OXSA9IEJJTjJCQ0QodG0tPnRtX21pbik7Ci0JYnVmW1BDRjg1NjNfUkVHX0hSXSA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpOworCWJ1ZltQQ0Y4NTYzX1JFR19TQ10gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCWJ1ZltQQ0Y4NTYzX1JFR19NTl0gPSBiaW4yYmNkKHRtLT50bV9taW4pOworCWJ1ZltQQ0Y4NTYzX1JFR19IUl0gPSBiaW4yYmNkKHRtLT50bV9ob3VyKTsKIAotCWJ1ZltQQ0Y4NTYzX1JFR19ETV0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKKwlidWZbUENGODU2M19SRUdfRE1dID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CiAKIAkvKiBtb250aCwgMSAtIDEyICovCi0JYnVmW1BDRjg1NjNfUkVHX01PXSA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOworCWJ1ZltQQ0Y4NTYzX1JFR19NT10gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKIAogCS8qIHllYXIgYW5kIGNlbnR1cnkgKi8KLQlidWZbUENGODU2M19SRUdfWVJdID0gQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCk7CisJYnVmW1BDRjg1NjNfUkVHX1lSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCWlmIChwY2Y4NTYzLT5jX3BvbGFyaXR5ID8gKHRtLT50bV95ZWFyID49IDEwMCkgOiAodG0tPnRtX3llYXIgPCAxMDApKQogCQlidWZbUENGODU2M19SRUdfTU9dIHw9IFBDRjg1NjNfTU9fQzsKIApAQCAtMTc5LDU4ICsxNzksNiBAQAogCXVuc2lnbmVkIGNoYXIgbWF4OwogfTsKIAotc3RhdGljIGludCBwY2Y4NTYzX3ZhbGlkYXRlX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWludCBpOwotCi0Jc3RhdGljIGNvbnN0IHN0cnVjdCBwY2Y4NTYzX2xpbWl0IHBhdHRlcm5bXSA9IHsKLQkJLyogcmVnaXN0ZXIsIG1hc2ssIG1pbiwgbWF4ICovCi0JCXsgUENGODU2M19SRUdfU0MsCTB4N0YsCTAsCTU5CX0sCi0JCXsgUENGODU2M19SRUdfTU4sCTB4N0YsCTAsCTU5CX0sCi0JCXsgUENGODU2M19SRUdfSFIsCTB4M0YsCTAsCTIzCX0sCi0JCXsgUENGODU2M19SRUdfRE0sCTB4M0YsCTAsCTMxCX0sCi0JCXsgUENGODU2M19SRUdfTU8sCTB4MUYsCTAsCTEyCX0sCi0JfTsKLQotCS8qIGNoZWNrIGxpbWl0cyAob25seSByZWdpc3RlcnMgd2l0aCBiY2QgdmFsdWVzKSAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBhdHRlcm4pOyBpKyspIHsKLQkJaW50IHhmZXI7Ci0JCXVuc2lnbmVkIGNoYXIgdmFsdWU7Ci0JCXVuc2lnbmVkIGNoYXIgYnVmID0gcGF0dGVybltpXS5yZWc7Ci0KLQkJc3RydWN0IGkyY19tc2cgbXNnc1tdID0gewotCQkJeyBjbGllbnQtPmFkZHIsIDAsIDEsICZidWYgfSwKLQkJCXsgY2xpZW50LT5hZGRyLCBJMkNfTV9SRCwgMSwgJmJ1ZiB9LAotCQl9OwotCi0JCXhmZXIgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKLQotCQlpZiAoeGZlciAhPSBBUlJBWV9TSVpFKG1zZ3MpKSB7Ci0JCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKLQkJCQkiJXM6IGNvdWxkIG5vdCByZWFkIHJlZ2lzdGVyIDB4JTAyWFxuIiwKLQkJCQlfX2Z1bmNfXywgcGF0dGVybltpXS5yZWcpOwotCi0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCXZhbHVlID0gQkNEMkJJTihidWYgJiBwYXR0ZXJuW2ldLm1hc2spOwotCi0JCWlmICh2YWx1ZSA+IHBhdHRlcm5baV0ubWF4IHx8Ci0JCQl2YWx1ZSA8IHBhdHRlcm5baV0ubWluKSB7Ci0JCQlkZXZfZGJnKCZjbGllbnQtPmRldiwKLQkJCQkiJXM6IHBhdHRlcm49JWQsIHJlZz0leCwgbWFzaz0weCUwMngsIG1pbj0lZCwgIgotCQkJCSJtYXg9JWQsIHZhbHVlPSVkLCByYXc9MHglMDJYXG4iLAotCQkJCV9fZnVuY19fLCBpLCBwYXR0ZXJuW2ldLnJlZywgcGF0dGVybltpXS5tYXNrLAotCQkJCXBhdHRlcm5baV0ubWluLCBwYXR0ZXJuW2ldLm1heCwKLQkJCQl2YWx1ZSwgYnVmKTsKLQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBwY2Y4NTYzX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXJldHVybiBwY2Y4NTYzX2dldF9kYXRldGltZSh0b19pMmNfY2xpZW50KGRldiksIHRtKTsKQEAgLTI2MiwxMiArMjEwLDYgQEAKIAlpZiAoIXBjZjg1NjMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogVmVyaWZ5IHRoZSBjaGlwIGlzIHJlYWxseSBhbiBQQ0Y4NTYzICovCi0JaWYgKHBjZjg1NjNfdmFsaWRhdGVfY2xpZW50KGNsaWVudCkgPCAwKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdF9rZnJlZTsKLQl9Ci0KIAlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJjaGlwIGZvdW5kLCBkcml2ZXIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCiAJcGNmODU2My0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwY2Y4NTYzX2RyaXZlci5kcml2ZXIubmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTgzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmODU4My5jCmluZGV4IGQzODhjNjYuLjdkMzNjZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTgzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1ODMuYwpAQCAtNzYsMTEgKzc2LDExIEBACiAJCWJ1Zls0XSAmPSAweDNmOwogCQlidWZbNV0gJj0gMHgxZjsKIAotCQlkdC0+dG1fc2VjID0gQkNEMkJJTihidWZbMV0pOwotCQlkdC0+dG1fbWluID0gQkNEMkJJTihidWZbMl0pOwotCQlkdC0+dG1faG91ciA9IEJDRDJCSU4oYnVmWzNdKTsKLQkJZHQtPnRtX21kYXkgPSBCQ0QyQklOKGJ1Zls0XSk7Ci0JCWR0LT50bV9tb24gPSBCQ0QyQklOKGJ1Zls1XSkgLSAxOworCQlkdC0+dG1fc2VjID0gYmNkMmJpbihidWZbMV0pOworCQlkdC0+dG1fbWluID0gYmNkMmJpbihidWZbMl0pOworCQlkdC0+dG1faG91ciA9IGJjZDJiaW4oYnVmWzNdKTsKKwkJZHQtPnRtX21kYXkgPSBiY2QyYmluKGJ1Zls0XSk7CisJCWR0LT50bV9tb24gPSBiY2QyYmluKGJ1Zls1XSkgLSAxOwogCX0KIAogCXJldHVybiByZXQgPT0gMiA/IDAgOiAtRUlPOwpAQCAtOTQsMTQgKzk0LDE0IEBACiAJYnVmWzBdID0gMDsKIAlidWZbMV0gPSBnZXRfY3RybChjbGllbnQpIHwgMHg4MDsKIAlidWZbMl0gPSAwOwotCWJ1ZlszXSA9IEJJTjJCQ0QoZHQtPnRtX3NlYyk7Ci0JYnVmWzRdID0gQklOMkJDRChkdC0+dG1fbWluKTsKLQlidWZbNV0gPSBCSU4yQkNEKGR0LT50bV9ob3VyKTsKKwlidWZbM10gPSBiaW4yYmNkKGR0LT50bV9zZWMpOworCWJ1Zls0XSA9IGJpbjJiY2QoZHQtPnRtX21pbik7CisJYnVmWzVdID0gYmluMmJjZChkdC0+dG1faG91cik7CiAKIAlpZiAoZGF0ZXRvbykgewogCQlsZW4gPSA4OwotCQlidWZbNl0gPSBCSU4yQkNEKGR0LT50bV9tZGF5KSB8IChkdC0+dG1feWVhciA8PCA2KTsKLQkJYnVmWzddID0gQklOMkJDRChkdC0+dG1fbW9uICsgMSkgIHwgKGR0LT50bV93ZGF5IDw8IDUpOworCQlidWZbNl0gPSBiaW4yYmNkKGR0LT50bV9tZGF5KSB8IChkdC0+dG1feWVhciA8PCA2KTsKKwkJYnVmWzddID0gYmluMmJjZChkdC0+dG1fbW9uICsgMSkgIHwgKGR0LT50bV93ZGF5IDw8IDUpOwogCX0KIAogCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIChjaGFyICopYnVmLCBsZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBsMDMwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzAuYwppbmRleCA4NDQ4ZWViLi44MjYxNTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGwwMzAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzAuYwpAQCAtMzQsMTUgKzM0LDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcGwwMzBfb3BlbihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHBsMDMwX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotfQotCiBzdGF0aWMgaW50IHBsMDMwX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKQEAgLTEwNCw4ICs5NSw2IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwbDAzMF9vcHMgPSB7Ci0JLm9wZW4JCT0gcGwwMzBfb3BlbiwKLQkucmVsZWFzZQk9IHBsMDMwX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHBsMDMwX2lvY3RsLAogCS5yZWFkX3RpbWUJPSBwbDAzMF9yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gcGwwMzBfc2V0X3RpbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMS5jCmluZGV4IDA4YjQ2MTAuLjMzM2VlYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMS5jCkBAIC00NSwxOCArNDUsNiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBwbDAzMV9vcGVuKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQkvKgotCSAqIFdlIHJlcXVlc3QgSVJRIGluIHBsMDMxX3Byb2JlLCBzbyBub3RoaW5nIHRvIGRvIGhlcmUuLi4KLQkgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcGwwMzFfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci19Ci0KIHN0YXRpYyBpbnQgcGwwMzFfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC0xMTgsOCArMTA2LDYgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHBsMDMxX29wcyA9IHsKLQkub3BlbiA9IHBsMDMxX29wZW4sCi0JLnJlbGVhc2UgPSBwbDAzMV9yZWxlYXNlLAogCS5pb2N0bCA9IHBsMDMxX2lvY3RsLAogCS5yZWFkX3RpbWUgPSBwbDAzMV9yZWFkX3RpbWUsCiAJLnNldF90aW1lID0gcGwwMzFfc2V0X3RpbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcjk3MDEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1yOTcwMS5jCmluZGV4IDM5NTk4NWIuLjQyMDI4ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1yOTcwMS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yOTcwMS5jCkBAIC04MCwxMyArODAsMTMgQEAKIAogCW1lbXNldChkdCwgMCwgc2l6ZW9mKCpkdCkpOwogCi0JZHQtPnRtX3NlYyA9IEJDRDJCSU4oYnVmWzBdKTsgLyogUlNFQ0NOVCAqLwotCWR0LT50bV9taW4gPSBCQ0QyQklOKGJ1ZlsxXSk7IC8qIFJNSU5DTlQgKi8KLQlkdC0+dG1faG91ciA9IEJDRDJCSU4oYnVmWzJdKTsgLyogUkhSQ05UICovCisJZHQtPnRtX3NlYyA9IGJjZDJiaW4oYnVmWzBdKTsgLyogUlNFQ0NOVCAqLworCWR0LT50bV9taW4gPSBiY2QyYmluKGJ1ZlsxXSk7IC8qIFJNSU5DTlQgKi8KKwlkdC0+dG1faG91ciA9IGJjZDJiaW4oYnVmWzJdKTsgLyogUkhSQ05UICovCiAKLQlkdC0+dG1fbWRheSA9IEJDRDJCSU4oYnVmWzNdKTsgLyogUkRBWUNOVCAqLwotCWR0LT50bV9tb24gPSBCQ0QyQklOKGJ1Zls0XSkgLSAxOyAvKiBSTU9OQ05UICovCi0JZHQtPnRtX3llYXIgPSBCQ0QyQklOKGJ1Zls1XSkgKyAxMDA7IC8qIFJZUkNOVCAqLworCWR0LT50bV9tZGF5ID0gYmNkMmJpbihidWZbM10pOyAvKiBSREFZQ05UICovCisJZHQtPnRtX21vbiA9IGJjZDJiaW4oYnVmWzRdKSAtIDE7IC8qIFJNT05DTlQgKi8KKwlkdC0+dG1feWVhciA9IGJjZDJiaW4oYnVmWzVdKSArIDEwMDsgLyogUllSQ05UICovCiAKIAkvKiB0aGUgcnRjIGRldmljZSBtYXkgY29udGFpbiBpbGxlZ2FsIHZhbHVlcyBvbiBwb3dlciB1cAogCSAqIGFjY29yZGluZyB0byB0aGUgZGF0YSBzaGVldC4gbWFrZSBzdXJlIHRoZXkgYXJlIHZhbGlkLgpAQCAtMTAzLDEyICsxMDMsMTIgQEAKIAlpZiAoeWVhciA+PSAyMTAwIHx8IHllYXIgPCAyMDAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IHdyaXRlX3JlZyhkZXYsIFJIUkNOVCwgQklOMkJDRChkdC0+dG1faG91cikpOwotCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJNSU5DTlQsIEJJTjJCQ0QoZHQtPnRtX21pbikpOwotCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJTRUNDTlQsIEJJTjJCQ0QoZHQtPnRtX3NlYykpOwotCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJEQVlDTlQsIEJJTjJCQ0QoZHQtPnRtX21kYXkpKTsKLQlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSTU9OQ05ULCBCSU4yQkNEKGR0LT50bV9tb24gKyAxKSk7Ci0JcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUllSQ05ULCBCSU4yQkNEKGR0LT50bV95ZWFyIC0gMTAwKSk7CisJcmV0ID0gd3JpdGVfcmVnKGRldiwgUkhSQ05ULCBiaW4yYmNkKGR0LT50bV9ob3VyKSk7CisJcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUk1JTkNOVCwgYmluMmJjZChkdC0+dG1fbWluKSk7CisJcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUlNFQ0NOVCwgYmluMmJjZChkdC0+dG1fc2VjKSk7CisJcmV0ID0gcmV0ID8gcmV0IDogd3JpdGVfcmVnKGRldiwgUkRBWUNOVCwgYmluMmJjZChkdC0+dG1fbWRheSkpOworCXJldCA9IHJldCA/IHJldCA6IHdyaXRlX3JlZyhkZXYsIFJNT05DTlQsIGJpbjJiY2QoZHQtPnRtX21vbiArIDEpKTsKKwlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSWVJDTlQsIGJpbjJiY2QoZHQtPnRtX3llYXIgLSAxMDApKTsKIAlyZXQgPSByZXQgPyByZXQgOiB3cml0ZV9yZWcoZGV2LCBSV0tDTlQsIDEgPDwgZHQtPnRtX3dkYXkpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzEzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzMxMy5jCmluZGV4IDFjMTRkNDQuLmU2ZWEzZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzEzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzMTMuYwpAQCAtMjM1LDMzICsyMzUsMzMgQEAKIAogCWRhdGEgPSByczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9TRUMpOwogCWRhdGEgfD0gKHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX1NFQzEwKSA8PCA0KTsKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihkYXRhKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihkYXRhKTsKIAogCWRhdGEgPSByczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9NSU4pOwogCWRhdGEgfD0gKHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX01JTjEwKSA8PCA0KTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihkYXRhKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihkYXRhKTsKIAogCWRhdGEgPSByczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9IT1VSKTsKIAlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9IT1VSMTApIDw8IDQpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihkYXRhKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oZGF0YSk7CiAKIAlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfREFZKTsKIAlkYXRhIHw9IChyczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9EQVkxMCkgPDwgNCk7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGRhdGEpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihkYXRhKTsKIAogCWRhdGEgPSByczVjMzEzX3JlYWRfcmVnKFJTNUMzMTNfQUREUl9NT04pOwogCWRhdGEgfD0gKHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX01PTjEwKSA8PCA0KTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihkYXRhKSAtIDE7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4oZGF0YSkgLSAxOwogCiAJZGF0YSA9IHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX1lFQVIpOwogCWRhdGEgfD0gKHJzNWMzMTNfcmVhZF9yZWcoUlM1QzMxM19BRERSX1lFQVIxMCkgPDwgNCk7Ci0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKGRhdGEpOworCXRtLT50bV95ZWFyID0gYmNkMmJpbihkYXRhKTsKIAogCWlmICh0bS0+dG1feWVhciA8IDcwKQogCQl0bS0+dG1feWVhciArPSAxMDA7CiAKIAlkYXRhID0gcnM1YzMxM19yZWFkX3JlZyhSUzVDMzEzX0FERFJfV0VFSyk7Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKGRhdGEpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbihkYXRhKTsKIAogCVJTNUMzMTNfQ0VESVNBQkxFOwogCW5kZWxheSg3MDApOwkJLyogQ0U6TCAqLwpAQCAtMjk0LDMxICsyOTQsMzEgQEAKIAkJfQogCX0KIAotCWRhdGEgPSBCSU4yQkNEKHRtLT50bV9zZWMpOworCWRhdGEgPSBiaW4yYmNkKHRtLT50bV9zZWMpOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9TRUMsIGRhdGEpOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9TRUMxMCwgKGRhdGEgPj4gNCkpOwogCi0JZGF0YSA9IEJJTjJCQ0QodG0tPnRtX21pbik7CisJZGF0YSA9IGJpbjJiY2QodG0tPnRtX21pbik7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX01JTiwgZGF0YSApOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9NSU4xMCwgKGRhdGEgPj4gNCkpOwogCi0JZGF0YSA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpOworCWRhdGEgPSBiaW4yYmNkKHRtLT50bV9ob3VyKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfSE9VUiwgZGF0YSk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX0hPVVIxMCwgKGRhdGEgPj4gNCkpOwogCi0JZGF0YSA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOworCWRhdGEgPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfREFZLCBkYXRhKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfREFZMTAsIChkYXRhPj4gNCkpOwogCi0JZGF0YSA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOworCWRhdGEgPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfTU9OLCBkYXRhKTsKIAlyczVjMzEzX3dyaXRlX3JlZyhSUzVDMzEzX0FERFJfTU9OMTAsIChkYXRhID4+IDQpKTsKIAotCWRhdGEgPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwlkYXRhID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX1lFQVIsIGRhdGEpOwogCXJzNWMzMTNfd3JpdGVfcmVnKFJTNUMzMTNfQUREUl9ZRUFSMTAsIChkYXRhID4+IDQpKTsKIAotCWRhdGEgPSBCSU4yQkNEKHRtLT50bV93ZGF5KTsKKwlkYXRhID0gYmluMmJjZCh0bS0+dG1fd2RheSk7CiAJcnM1YzMxM193cml0ZV9yZWcoUlM1QzMxM19BRERSX1dFRUssIGRhdGEpOwogCiAJUlM1QzMxM19DRURJU0FCTEU7CS8qIENFOkggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzQ4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM0OC5jCmluZGV4IDgzOTQ2MjYuLmRkMWUyYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzQ4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNDguYwpAQCAtNzQsMjAgKzc0LDIwIEBACiAJdHhidWZbM10gPSAwOwkvKiBkdW1teSAqLwogCXR4YnVmWzRdID0gUlM1QzM0OF9DTURfTVcoUlM1QzM0OF9SRUdfU0VDUyk7IC8qIGNtZCwgc2VjLCAuLi4gKi8KIAl0eHAgPSAmdHhidWZbNV07Ci0JdHhwW1JTNUMzNDhfUkVHX1NFQ1NdID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQl0eHBbUlM1QzM0OF9SRUdfTUlOU10gPSBCSU4yQkNEKHRtLT50bV9taW4pOworCXR4cFtSUzVDMzQ4X1JFR19TRUNTXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJdHhwW1JTNUMzNDhfUkVHX01JTlNdID0gYmluMmJjZCh0bS0+dG1fbWluKTsKIAlpZiAocGRhdGEtPnJ0Y18yNGgpIHsKLQkJdHhwW1JTNUMzNDhfUkVHX0hPVVJTXSA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpOworCQl0eHBbUlM1QzM0OF9SRUdfSE9VUlNdID0gYmluMmJjZCh0bS0+dG1faG91cik7CiAJfSBlbHNlIHsKIAkJLyogaG91ciAwIGlzIEFNMTIsIG5vb24gaXMgUE0xMiAqLwotCQl0eHBbUlM1QzM0OF9SRUdfSE9VUlNdID0gQklOMkJDRCgodG0tPnRtX2hvdXIgKyAxMSkgJSAxMiArIDEpIHwKKwkJdHhwW1JTNUMzNDhfUkVHX0hPVVJTXSA9IGJpbjJiY2QoKHRtLT50bV9ob3VyICsgMTEpICUgMTIgKyAxKSB8CiAJCQkodG0tPnRtX2hvdXIgPj0gMTIgPyBSUzVDMzQ4X0JJVF9QTSA6IDApOwogCX0KLQl0eHBbUlM1QzM0OF9SRUdfV0RBWV0gPSBCSU4yQkNEKHRtLT50bV93ZGF5KTsKLQl0eHBbUlM1QzM0OF9SRUdfREFZXSA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOwotCXR4cFtSUzVDMzQ4X1JFR19NT05USF0gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKSB8CisJdHhwW1JTNUMzNDhfUkVHX1dEQVldID0gYmluMmJjZCh0bS0+dG1fd2RheSk7CisJdHhwW1JTNUMzNDhfUkVHX0RBWV0gPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKKwl0eHBbUlM1QzM0OF9SRUdfTU9OVEhdID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSkgfAogCQkodG0tPnRtX3llYXIgPj0gMTAwID8gUlM1QzM0OF9CSVRfWTJLIDogMCk7Ci0JdHhwW1JTNUMzNDhfUkVHX1lFQVJdID0gQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCk7CisJdHhwW1JTNUMzNDhfUkVHX1lFQVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CiAJLyogd3JpdGUgaW4gb25lIHRyYW5zZmVyIHRvIGF2b2lkIGRhdGEgaW5jb25zaXN0ZW5jeSAqLwogCXJldCA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCB0eGJ1Ziwgc2l6ZW9mKHR4YnVmKSwgTlVMTCwgMCk7CiAJdWRlbGF5KDYyKTsJLyogVGNzciA2MnVzICovCkBAIC0xMTYsMjAgKzExNiwyMCBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4ocnhidWZbUlM1QzM0OF9SRUdfU0VDU10gJiBSUzVDMzQ4X1NFQ1NfTUFTSyk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4ocnhidWZbUlM1QzM0OF9SRUdfTUlOU10gJiBSUzVDMzQ4X01JTlNfTUFTSyk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJ4YnVmW1JTNUMzNDhfUkVHX0hPVVJTXSAmIFJTNUMzNDhfSE9VUlNfTUFTSyk7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnhidWZbUlM1QzM0OF9SRUdfU0VDU10gJiBSUzVDMzQ4X1NFQ1NfTUFTSyk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocnhidWZbUlM1QzM0OF9SRUdfTUlOU10gJiBSUzVDMzQ4X01JTlNfTUFTSyk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJ4YnVmW1JTNUMzNDhfUkVHX0hPVVJTXSAmIFJTNUMzNDhfSE9VUlNfTUFTSyk7CiAJaWYgKCFwZGF0YS0+cnRjXzI0aCkgewogCQl0bS0+dG1faG91ciAlPSAxMjsKIAkJaWYgKHJ4YnVmW1JTNUMzNDhfUkVHX0hPVVJTXSAmIFJTNUMzNDhfQklUX1BNKQogCQkJdG0tPnRtX2hvdXIgKz0gMTI7CiAJfQotCXRtLT50bV93ZGF5ID0gQkNEMkJJTihyeGJ1ZltSUzVDMzQ4X1JFR19XREFZXSAmIFJTNUMzNDhfV0RBWV9NQVNLKTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4ocnhidWZbUlM1QzM0OF9SRUdfREFZXSAmIFJTNUMzNDhfREFZX01BU0spOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbihyeGJ1ZltSUzVDMzQ4X1JFR19XREFZXSAmIFJTNUMzNDhfV0RBWV9NQVNLKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocnhidWZbUlM1QzM0OF9SRUdfREFZXSAmIFJTNUMzNDhfREFZX01BU0spOwogCXRtLT50bV9tb24gPQotCQlCQ0QyQklOKHJ4YnVmW1JTNUMzNDhfUkVHX01PTlRIXSAmIFJTNUMzNDhfTU9OVEhfTUFTSykgLSAxOworCQliY2QyYmluKHJ4YnVmW1JTNUMzNDhfUkVHX01PTlRIXSAmIFJTNUMzNDhfTU9OVEhfTUFTSykgLSAxOwogCS8qIHllYXIgaXMgMTkwMCArIHRtLT50bV95ZWFyICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHJ4YnVmW1JTNUMzNDhfUkVHX1lFQVJdKSArCisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ4YnVmW1JTNUMzNDhfUkVHX1lFQVJdKSArCiAJCSgocnhidWZbUlM1QzM0OF9SRUdfTU9OVEhdICYgUlM1QzM0OF9CSVRfWTJLKSA/IDEwMCA6IDApOwogCiAJaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYwppbmRleCA1NmNhZjZiLi4yZjJjNjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKQEAgLTEsOCArMSw5IEBACiAvKgotICogQW4gSTJDIGRyaXZlciBmb3IgUmljb2ggUlM1QzM3MiBhbmQgUlY1QzM4WzY3XSBSVENzCisgKiBBbiBJMkMgZHJpdmVyIGZvciBSaWNvaCBSUzVDMzcyLCBSMjAyNVMvRCBhbmQgUlY1QzM4WzY3XSBSVENzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IFBhdmVsIE1pcm9uY2hpayA8cG1pcm9uY2hpa0BvcHRpZmFjaW8ubmV0PgogICogQ29weXJpZ2h0IChDKSAyMDA2IFRvd2VyIFRlY2hub2xvZ2llcworICogQ29weXJpZ2h0IChDKSAyMDA4IFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTEzLDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KICNpbmNsdWRlIDxsaW51eC9iY2QuaD4KIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC41IgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC42IgogCiAKIC8qCkBAIC01MSw3ICs1Miw4IEBACiAjCWRlZmluZSBSUzVDX0NUUkwxX0NUNAkJKDQgPDwgMCkJLyogMSBIeiBsZXZlbCBpcnEgKi8KICNkZWZpbmUgUlM1Q19SRUdfQ1RSTDIJCTE1CiAjCWRlZmluZSBSUzVDMzcyX0NUUkwyXzI0CQkoMSA8PCA1KQotIwlkZWZpbmUgUlM1Q19DVFJMMl9YU1RQCQkoMSA8PCA0KQorIwlkZWZpbmUgUjIwMjVfQ1RSTDJfWFNUCQkoMSA8PCA1KQorIwlkZWZpbmUgUlM1Q19DVFJMMl9YU1RQCQkoMSA8PCA0KQkvKiBvbmx5IGlmICFSMjAyNVMvRCAqLwogIwlkZWZpbmUgUlM1Q19DVFJMMl9DVEZHCQkoMSA8PCAyKQogIwlkZWZpbmUgUlM1Q19DVFJMMl9BQUZHCQkoMSA8PCAxKQkvKiBvciBXQUZHICovCiAjCWRlZmluZSBSUzVDX0NUUkwyX0JBRkcJCSgxIDw8IDApCS8qIG9yIERBRkcgKi8KQEAgLTYzLDYgKzY1LDcgQEAKIAogZW51bSBydGNfdHlwZSB7CiAJcnRjX3VuZGVmID0gMCwKKwlydGNfcjIwMjVzZCwKIAlydGNfcnM1YzM3MmEsCiAJcnRjX3JzNWMzNzJiLAogCXJ0Y19ydjVjMzg2LApAQCAtNzAsNiArNzMsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHJzNWMzNzJfaWRbXSA9IHsKKwl7ICJyMjAyNXNkIiwgcnRjX3IyMDI1c2QgfSwKIAl7ICJyczVjMzcyYSIsIHJ0Y19yczVjMzcyYSB9LAogCXsgInJzNWMzNzJiIiwgcnRjX3JzNWMzNzJiIH0sCiAJeyAicnY1YzM4NiIsIHJ0Y19ydjVjMzg2IH0sCkBAIC04OSw2ICs5Myw3IEBACiAJZW51bSBydGNfdHlwZQkJdHlwZTsKIAl1bnNpZ25lZAkJdGltZTI0OjE7CiAJdW5zaWduZWQJCWhhc19pcnE6MTsKKwl1bnNpZ25lZAkJc21idXM6MTsKIAljaGFyCQkJYnVmWzE3XTsKIAljaGFyCQkJKnJlZ3M7CiB9OwpAQCAtMTA2LDEwICsxMTEsMjUgQEAKIAkgKgogCSAqIFRoZSBmaXJzdCBtZXRob2QgZG9lc24ndCB3b3JrIHdpdGggdGhlIGlvcDN4eCBhZGFwdGVyIGRyaXZlciwgb24gYXQKIAkgKiBsZWFzdCA4MDIxOSBjaGlwczsgdGhpcyB3b3JrcyBhcm91bmQgdGhhdCBidWcuCisJICoKKwkgKiBUaGUgdGhpcmQgbWV0aG9kIG9uIHRoZSBvdGhlciBoYW5kIGRvZXNuJ3Qgd29yayBmb3IgdGhlIFNNQnVzLW9ubHkKKwkgKiBjb25maWd1cmF0aW9ucywgc28gd2UgdXNlIHRoZSB0aGUgZmlyc3QgbWV0aG9kIHRoZXJlLCBzdHJpcHBpbmcgb2ZmCisJICogdGhlIGV4dHJhIHJlZ2lzdGVyIGluIHRoZSBwcm9jZXNzLgogCSAqLwotCWlmICgoaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgMSkpICE9IDEpIHsKLQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiY2FuJ3QgcmVhZCByZWdpc3RlcnNcbiIpOwotCQlyZXR1cm4gLUVJTzsKKwlpZiAocnM1Yy0+c21idXMpIHsKKwkJaW50IGFkZHIgPSBSUzVDX0FERFIoUlM1QzM3Ml9SRUdfU0VDUyk7CisJCWludCBzaXplID0gc2l6ZW9mKHJzNWMtPmJ1ZikgLSAxOworCisJCWlmIChpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIGFkZHIsIHNpemUsCisJCQkJCQkgIHJzNWMtPmJ1ZiArIDEpICE9IHNpemUpIHsKKwkJCWRldl93YXJuKCZjbGllbnQtPmRldiwgImNhbid0IHJlYWQgcmVnaXN0ZXJzXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCAxKSkgIT0gMSkgeworCQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiY2FuJ3QgcmVhZCByZWdpc3RlcnNcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KIAl9CiAKIAlkZXZfZGJnKCZjbGllbnQtPmRldiwKQEAgLTEyOCw5ICsxNDgsOSBAQAogCXVuc2lnbmVkCWhvdXI7CiAKIAlpZiAocnM1Yy0+dGltZTI0KQotCQlyZXR1cm4gQkNEMkJJTihyZWcgJiAweDNmKTsKKwkJcmV0dXJuIGJjZDJiaW4ocmVnICYgMHgzZik7CiAKLQlob3VyID0gQkNEMkJJTihyZWcgJiAweDFmKTsKKwlob3VyID0gYmNkMmJpbihyZWcgJiAweDFmKTsKIAlpZiAoaG91ciA9PSAxMikKIAkJaG91ciA9IDA7CiAJaWYgKHJlZyAmIDB4MjApCkBAIC0xNDEsMTUgKzE2MSwxNSBAQAogc3RhdGljIHVuc2lnbmVkIHJzNWNfaHIycmVnKHN0cnVjdCByczVjMzcyICpyczVjLCB1bnNpZ25lZCBob3VyKQogewogCWlmIChyczVjLT50aW1lMjQpCi0JCXJldHVybiBCSU4yQkNEKGhvdXIpOworCQlyZXR1cm4gYmluMmJjZChob3VyKTsKIAogCWlmIChob3VyID4gMTIpCi0JCXJldHVybiAweDIwIHwgQklOMkJDRChob3VyIC0gMTIpOworCQlyZXR1cm4gMHgyMCB8IGJpbjJiY2QoaG91ciAtIDEyKTsKIAlpZiAoaG91ciA9PSAxMikKLQkJcmV0dXJuIDB4MjAgfCBCSU4yQkNEKDEyKTsKKwkJcmV0dXJuIDB4MjAgfCBiaW4yYmNkKDEyKTsKIAlpZiAoaG91ciA9PSAwKQotCQlyZXR1cm4gQklOMkJDRCgxMik7Ci0JcmV0dXJuIEJJTjJCQ0QoaG91cik7CisJCXJldHVybiBiaW4yYmNkKDEyKTsKKwlyZXR1cm4gYmluMmJjZChob3VyKTsKIH0KIAogc3RhdGljIGludCByczVjMzcyX2dldF9kYXRldGltZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpAQCAtMTYwLDE4ICsxODAsMTggQEAKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuIHN0YXR1czsKIAotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfU0VDU10gJiAweDdmKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX01JTlNdICYgMHg3Zik7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19TRUNTXSAmIDB4N2YpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfTUlOU10gJiAweDdmKTsKIAl0bS0+dG1faG91ciA9IHJzNWNfcmVnMmhyKHJzNWMsIHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfSE9VUlNdKTsKIAotCXRtLT50bV93ZGF5ID0gQkNEMkJJTihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX1dEQVldICYgMHgwNyk7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfREFZXSAmIDB4M2YpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX1dEQVldICYgMHgwNyk7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfREFZXSAmIDB4M2YpOwogCiAJLyogdG0tPnRtX21vbiBpcyB6ZXJvLWJhc2VkICovCi0JdG0tPnRtX21vbiA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19NT05USF0gJiAweDFmKSAtIDE7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19NT05USF0gJiAweDFmKSAtIDE7CiAKIAkvKiB5ZWFyIGlzIDE5MDAgKyB0bS0+dG1feWVhciAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX1lFQVJdKSArIDEwMDsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19ZRUFSXSkgKyAxMDA7CiAKIAlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiB0bSBpcyBzZWNzPSVkLCBtaW5zPSVkLCBob3Vycz0lZCwgIgogCQkibWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLApAQCAtMTg3LDYgKzIwNyw3IEBACiB7CiAJc3RydWN0IHJzNWMzNzIJKnJzNWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAl1bnNpZ25lZCBjaGFyCWJ1Zls4XTsKKwlpbnQJCWFkZHI7CiAKIAlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiB0bSBpcyBzZWNzPSVkLCBtaW5zPSVkLCBob3Vycz0lZCAiCiAJCSJtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCkBAIC0xOTQsMTYgKzIxNSwxNiBAQAogCQl0bS0+dG1fc2VjLCB0bS0+dG1fbWluLCB0bS0+dG1faG91ciwKIAkJdG0tPnRtX21kYXksIHRtLT50bV9tb24sIHRtLT50bV95ZWFyLCB0bS0+dG1fd2RheSk7CiAKLQlidWZbMF0gPSBSUzVDX0FERFIoUlM1QzM3Ml9SRUdfU0VDUyk7Ci0JYnVmWzFdID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQlidWZbMl0gPSBCSU4yQkNEKHRtLT50bV9taW4pOwotCWJ1ZlszXSA9IHJzNWNfaHIycmVnKHJzNWMsIHRtLT50bV9ob3VyKTsKLQlidWZbNF0gPSBCSU4yQkNEKHRtLT50bV93ZGF5KTsKLQlidWZbNV0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKLQlidWZbNl0gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKLQlidWZbN10gPSBCSU4yQkNEKHRtLT50bV95ZWFyIC0gMTAwKTsKKwlhZGRyICAgPSBSUzVDX0FERFIoUlM1QzM3Ml9SRUdfU0VDUyk7CisJYnVmWzBdID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwlidWZbMV0gPSBiaW4yYmNkKHRtLT50bV9taW4pOworCWJ1ZlsyXSA9IHJzNWNfaHIycmVnKHJzNWMsIHRtLT50bV9ob3VyKTsKKwlidWZbM10gPSBiaW4yYmNkKHRtLT50bV93ZGF5KTsKKwlidWZbNF0gPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKKwlidWZbNV0gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKKwlidWZbNl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyIC0gMTAwKTsKIAotCWlmICgoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCA4KSkgIT0gOCkgeworCWlmIChpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCBhZGRyLCBzaXplb2YoYnVmKSwgYnVmKSA8IDApIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogd3JpdGUgZXJyb3JcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMjY2LDE2ICsyODcsMTYgQEAKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCByczVjMzcyCQkqcnM1YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXVuc2lnbmVkIGNoYXIJCWJ1ZlsyXTsKLQlpbnQJCQlzdGF0dXM7CisJdW5zaWduZWQgY2hhcgkJYnVmOworCWludAkJCXN0YXR1cywgYWRkcjsKIAotCWJ1ZlsxXSA9IHJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdOworCWJ1ZiA9IHJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBSVENfVUlFX09GRjoKIAljYXNlIFJUQ19VSUVfT046CiAJCS8qIHNvbWUgMzI3YSBtb2RlcyB1c2UgYSBkaWZmZXJlbnQgSVJRIHBpbiBmb3IgMUh6IGlycXMgKi8KIAkJaWYgKHJzNWMtPnR5cGUgPT0gcnRjX3JzNWMzNzJhCi0JCQkJJiYgKGJ1ZlsxXSAmIFJTNUMzNzJBX0NUUkwxX1NMMSkpCisJCQkJJiYgKGJ1ZiAmIFJTNUMzNzJBX0NUUkwxX1NMMSkpCiAJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCWNhc2UgUlRDX0FJRV9PRkY6CiAJY2FzZSBSVENfQUlFX09OOgpAQCAtMjkzLDI4ICszMTQsMzAgQEAKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuIHN0YXR1czsKIAotCWJ1ZlswXSA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSk7CisJYWRkciA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFJUQ19BSUVfT0ZGOgkvKiBhbGFybSBvZmYgKi8KLQkJYnVmWzFdICY9IH5SUzVDX0NUUkwxX0FBTEU7CisJCWJ1ZiAmPSB+UlM1Q19DVFJMMV9BQUxFOwogCQlicmVhazsKIAljYXNlIFJUQ19BSUVfT046CS8qIGFsYXJtIG9uICovCi0JCWJ1ZlsxXSB8PSBSUzVDX0NUUkwxX0FBTEU7CisJCWJ1ZiB8PSBSUzVDX0NUUkwxX0FBTEU7CiAJCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PRkY6CS8qIHVwZGF0ZSBvZmYgKi8KLQkJYnVmWzFdICY9IH5SUzVDX0NUUkwxX0NUX01BU0s7CisJCWJ1ZiAmPSB+UlM1Q19DVFJMMV9DVF9NQVNLOwogCQlicmVhazsKIAljYXNlIFJUQ19VSUVfT046CS8qIHVwZGF0ZSBvbiAqLwotCQlidWZbMV0gJj0gflJTNUNfQ1RSTDFfQ1RfTUFTSzsKLQkJYnVmWzFdIHw9IFJTNUNfQ1RSTDFfQ1Q0OworCQlidWYgJj0gflJTNUNfQ1RSTDFfQ1RfTUFTSzsKKwkJYnVmIHw9IFJTNUNfQ1RSTDFfQ1Q0OwogCQlicmVhazsKIAl9Ci0JaWYgKChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDIpKSAhPSAyKSB7CisKKwlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIGFkZHIsIGJ1ZikgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW4ndCB1cGRhdGUgYWxhcm1cbiIsCiAJCQlyczVjLT5ydGMtPm5hbWUpOwogCQlzdGF0dXMgPSAtRUlPOwogCX0gZWxzZQotCQlyczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSA9IGJ1ZlsxXTsKKwkJcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gPSBidWY7CisKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0zNDQsNyArMzY3LDcgQEAKIAogCS8qIHJlcG9ydCBhbGFybSB0aW1lICovCiAJdC0+dGltZS50bV9zZWMgPSAwOwotCXQtPnRpbWUudG1fbWluID0gQkNEMkJJTihyczVjLT5yZWdzW1JTNUNfUkVHX0FMQVJNX0FfTUlOXSAmIDB4N2YpOworCXQtPnRpbWUudG1fbWluID0gYmNkMmJpbihyczVjLT5yZWdzW1JTNUNfUkVHX0FMQVJNX0FfTUlOXSAmIDB4N2YpOwogCXQtPnRpbWUudG1faG91ciA9IHJzNWNfcmVnMmhyKHJzNWMsIHJzNWMtPnJlZ3NbUlM1Q19SRUdfQUxBUk1fQV9IT1VSU10pOwogCXQtPnRpbWUudG1fbWRheSA9IC0xOwogCXQtPnRpbWUudG1fbW9uID0gLTE7CkBAIC0zNjQsOCArMzg3LDggQEAKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCByczVjMzcyCQkqcnM1YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludAkJCXN0YXR1czsKLQl1bnNpZ25lZCBjaGFyCQlidWZbNF07CisJaW50CQkJc3RhdHVzLCBhZGRyLCBpOworCXVuc2lnbmVkIGNoYXIJCWJ1ZlszXTsKIAogCS8qIG9ubHkgaGFuZGxlIHVwIHRvIDI0IGhvdXJzIGluIHRoZSBmdXR1cmUsIGxpa2UgUlRDX0FMTV9TRVQgKi8KIAlpZiAodC0+dGltZS50bV9tZGF5ICE9IC0xCkBAIC0zODAsMzMgKzQwMywzNiBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwogCWlmIChyczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSAmIFJTNUNfQ1RSTDFfQUFMRSkgewotCQlidWZbMF0gPSBSUzVDX0FERFIoUlM1Q19SRUdfQ1RSTDEpOwotCQlidWZbMV0gPSByczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSAmIH5SUzVDX0NUUkwxX0FBTEU7Ci0JCWlmIChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDIpICE9IDIpIHsKKwkJYWRkciA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSk7CisJCWJ1ZlswXSA9IHJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdICYgflJTNUNfQ1RSTDFfQUFMRTsKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBhZGRyLCBidWZbMF0pIDwgMCkgewogCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBkaXNhYmxlIGFsYXJtXG4iLCByczVjLT5ydGMtPm5hbWUpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KLQkJcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gPSBidWZbMV07CisJCXJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdID0gYnVmWzBdOwogCX0KIAogCS8qIHNldCBhbGFybSAqLwotCWJ1ZlswXSA9IFJTNUNfQUREUihSUzVDX1JFR19BTEFSTV9BX01JTik7Ci0JYnVmWzFdID0gQklOMkJDRCh0LT50aW1lLnRtX21pbik7Ci0JYnVmWzJdID0gcnM1Y19ocjJyZWcocnM1YywgdC0+dGltZS50bV9ob3VyKTsKLQlidWZbM10gPSAweDdmOwkvKiBhbnkvYWxsIGRheXMgKi8KLQlpZiAoKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgNCkpICE9IDQpIHsKLQkJcHJfZGVidWcoIiVzOiBjYW4ndCBzZXQgYWxhcm0gdGltZVxuIiwgcnM1Yy0+cnRjLT5uYW1lKTsKLQkJcmV0dXJuIC1FSU87CisJYnVmWzBdID0gYmluMmJjZCh0LT50aW1lLnRtX21pbik7CisJYnVmWzFdID0gcnM1Y19ocjJyZWcocnM1YywgdC0+dGltZS50bV9ob3VyKTsKKwlidWZbMl0gPSAweDdmOwkvKiBhbnkvYWxsIGRheXMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoYnVmKTsgaSsrKSB7CisJCWFkZHIgPSBSUzVDX0FERFIoUlM1Q19SRUdfQUxBUk1fQV9NSU4gKyBpKTsKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBhZGRyLCBidWZbaV0pIDwgMCkgeworCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBzZXQgYWxhcm0gdGltZVxuIiwgcnM1Yy0+cnRjLT5uYW1lKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAJfQogCiAJLyogLi4uIGFuZCBtYXliZSBlbmFibGUgaXRzIGlycSAqLwogCWlmICh0LT5lbmFibGVkKSB7Ci0JCWJ1ZlswXSA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSk7Ci0JCWJ1ZlsxXSA9IHJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdIHwgUlM1Q19DVFJMMV9BQUxFOwotCQlpZiAoKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMikpICE9IDIpCisJCWFkZHIgPSBSUzVDX0FERFIoUlM1Q19SRUdfQ1RSTDEpOworCQlidWZbMF0gPSByczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSB8IFJTNUNfQ1RSTDFfQUFMRTsKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBhZGRyLCBidWZbMF0pIDwgMCkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW4ndCBlbmFibGUgYWxhcm1cbiIsCiAJCQkJcnM1Yy0+cnRjLT5uYW1lKTsKLQkJcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gPSBidWZbMV07CisJCXJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdID0gYnVmWzBdOwogCX0KIAogCXJldHVybiAwOwpAQCAtNTAzLDE4ICs1MjksODEgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHJzNWMzNzJfZHJpdmVyOwogCitzdGF0aWMgaW50IHJzNWNfb3NjaWxsYXRvcl9zZXR1cChzdHJ1Y3QgcnM1YzM3MiAqcnM1YzM3MikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKKwlpbnQgYWRkciwgaSwgcmV0ID0gMDsKKworCWlmIChyczVjMzcyLT50eXBlID09IHJ0Y19yMjAyNXNkKSB7CisJCWlmICghKHJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDJdICYgUjIwMjVfQ1RSTDJfWFNUKSkKKwkJCXJldHVybiByZXQ7CisJCXJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDJdICY9IH5SMjAyNV9DVFJMMl9YU1Q7CisJfSBlbHNlIHsKKwkJaWYgKCEocnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl0gJiBSUzVDX0NUUkwyX1hTVFApKQorCQkJcmV0dXJuIHJldDsKKwkJcnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl0gJj0gflJTNUNfQ1RSTDJfWFNUUDsKKwl9CisKKwlhZGRyICAgPSBSUzVDX0FERFIoUlM1Q19SRUdfQ1RSTDEpOworCWJ1ZlswXSA9IHJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdOworCWJ1ZlsxXSA9IHJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDJdOworCisJLyogdXNlIDI0aHIgbW9kZSAqLworCXN3aXRjaCAocnM1YzM3Mi0+dHlwZSkgeworCWNhc2UgcnRjX3JzNWMzNzJhOgorCWNhc2UgcnRjX3JzNWMzNzJiOgorCQlidWZbMV0gfD0gUlM1QzM3Ml9DVFJMMl8yNDsKKwkJcnM1YzM3Mi0+dGltZTI0ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBydGNfcjIwMjVzZDoKKwljYXNlIHJ0Y19ydjVjMzg2OgorCWNhc2UgcnRjX3J2NWMzODdhOgorCQlidWZbMF0gfD0gUlY1QzM4N19DVFJMMV8yNDsKKwkJcnM1YzM3Mi0+dGltZTI0ID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogaW1wb3NzaWJsZSAqLworCQlicmVhazsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1Zik7IGkrKykgeworCQlhZGRyID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxICsgaSk7CisJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEocnM1YzM3Mi0+Y2xpZW50LCBhZGRyLCBidWZbaV0pOworCQlpZiAodW5saWtlbHkocmV0IDwgMCkpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdID0gYnVmWzBdOworCXJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDJdID0gYnVmWzFdOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcnM1YzM3Ml9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgZXJyID0gMDsKKwlpbnQgc21idXNfbW9kZSA9IDA7CiAJc3RydWN0IHJzNWMzNzIgKnJzNWMzNzI7CiAJc3RydWN0IHJ0Y190aW1lIHRtOwogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwogCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBleGl0OworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMgfAorCQkJSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLKSkgeworCQkvKgorCQkgKiBJZiB3ZSBkb24ndCBoYXZlIGFueSBtYXN0ZXIgbW9kZSBhZGFwdGVyLCB0cnkgYnJlYWtpbmcKKwkJICogaXQgZG93biBpbiB0byB0aGUgYmFyZXN0IG9mIGNhcGFiaWxpdGllcy4KKwkJICovCisJCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCQkJSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwKKwkJCQlJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0spKQorCQkJc21idXNfbW9kZSA9IDE7CisJCWVsc2UgeworCQkJLyogU3RpbGwgbm8gZ29vZCwgZ2l2ZSB1cCAqLworCQkJZXJyID0gLUVOT0RFVjsKKwkJCWdvdG8gZXhpdDsKKwkJfQogCX0KIAogCWlmICghKHJzNWMzNzIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcnM1YzM3MiksIEdGUF9LRVJORUwpKSkgewpAQCAtNTI4LDYgKzYxNyw3IEBACiAKIAkvKiB3ZSByZWFkIHJlZ2lzdGVycyAweDBmIHRoZW4gMHgwMC0weDBmOyBza2lwIHRoZSBmaXJzdCBvbmUgKi8KIAlyczVjMzcyLT5yZWdzID0gJnJzNWMzNzItPmJ1ZlsxXTsKKwlyczVjMzcyLT5zbWJ1cyA9IHNtYnVzX21vZGU7CiAKIAllcnIgPSByczVjX2dldF9yZWdzKHJzNWMzNzIpOwogCWlmIChlcnIgPCAwKQpAQCAtNTQzLDYgKzYzMyw3IEBACiAJCWlmIChyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwyXSAmIFJTNUMzNzJfQ1RSTDJfMjQpCiAJCQlyczVjMzcyLT50aW1lMjQgPSAxOwogCQlicmVhazsKKwljYXNlIHJ0Y19yMjAyNXNkOgogCWNhc2UgcnRjX3J2NWMzODY6CiAJY2FzZSBydGNfcnY1YzM4N2E6CiAJCWlmIChyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSAmIFJWNUMzODdfQ1RSTDFfMjQpCkBAIC01NTgsMzkgKzY0OSwxNCBAQAogCiAJLyogaWYgdGhlIG9zY2lsbGF0b3IgbG9zdCBwb3dlciBhbmQgbm8gb3RoZXIgc29mdHdhcmUgKGxpa2UKIAkgKiB0aGUgYm9vdGxvYWRlcikgc2V0IGl0IHVwLCBkbyBpdCBoZXJlLgorCSAqCisJICogVGhlIFIyMDI1Uy9EIGRvZXMgdGhpcyBhIGxpdHRsZSBkaWZmZXJlbnRseSB0aGFuIHRoZSBvdGhlcgorCSAqIHBhcnRzLCBzbyB3ZSBzcGVjaWFsIGNhc2UgdGhhdC4uCiAJICovCi0JaWYgKHJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDJdICYgUlM1Q19DVFJMMl9YU1RQKSB7Ci0JCXVuc2lnbmVkIGNoYXIgYnVmWzNdOwotCi0JCXJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDJdICY9IH5SUzVDX0NUUkwyX1hTVFA7Ci0KLQkJYnVmWzBdID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxKTsKLQkJYnVmWzFdID0gcnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMV07Ci0JCWJ1ZlsyXSA9IHJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDJdOwotCi0JCS8qIHVzZSAyNGhyIG1vZGUgKi8KLQkJc3dpdGNoIChyczVjMzcyLT50eXBlKSB7Ci0JCWNhc2UgcnRjX3JzNWMzNzJhOgotCQljYXNlIHJ0Y19yczVjMzcyYjoKLQkJCWJ1ZlsyXSB8PSBSUzVDMzcyX0NUUkwyXzI0OwotCQkJcnM1YzM3Mi0+dGltZTI0ID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIHJ0Y19ydjVjMzg2OgotCQljYXNlIHJ0Y19ydjVjMzg3YToKLQkJCWJ1ZlsxXSB8PSBSVjVDMzg3X0NUUkwxXzI0OwotCQkJcnM1YzM3Mi0+dGltZTI0ID0gMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJLyogaW1wb3NzaWJsZSAqLwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMykpICE9IDMpIHsKLQkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAic2V0dXAgZXJyb3JcbiIpOwotCQkJZ290byBleGl0X2tmcmVlOwotCQl9Ci0JCXJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdID0gYnVmWzFdOwotCQlyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwyXSA9IGJ1ZlsyXTsKKwllcnIgPSByczVjX29zY2lsbGF0b3Jfc2V0dXAocnM1YzM3Mik7CisJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAic2V0dXAgZXJyb3JcbiIpOworCQlnb3RvIGV4aXRfa2ZyZWU7CiAJfQogCiAJaWYgKHJzNWMzNzJfZ2V0X2RhdGV0aW1lKGNsaWVudCwgJnRtKSA8IDApCkBAIC01OTgsNiArNjY0LDcgQEAKIAogCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIiVzIGZvdW5kLCAlcywgZHJpdmVyIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iLAogCQkJKHsgY2hhciAqczsgc3dpdGNoIChyczVjMzcyLT50eXBlKSB7CisJCQljYXNlIHJ0Y19yMjAyNXNkOglzID0gInIyMDI1c2QiOyBicmVhazsKIAkJCWNhc2UgcnRjX3JzNWMzNzJhOglzID0gInJzNWMzNzJhIjsgYnJlYWs7CiAJCQljYXNlIHJ0Y19yczVjMzcyYjoJcyA9ICJyczVjMzcyYiI7IGJyZWFrOwogCQkJY2FzZSBydGNfcnY1YzM4NjoJcyA9ICJydjVjMzg2IjsgYnJlYWs7CkBAIC02NjcsNyArNzM0LDggQEAKIAogTU9EVUxFX0FVVEhPUigKIAkJIlBhdmVsIE1pcm9uY2hpayA8cG1pcm9uY2hpa0BvcHRpZmFjaW8ubmV0PiwgIgotCQkiQWxlc3NhbmRybyBadW1tbyA8YS56dW1tb0B0b3dlcnRlY2guaXQ+Iik7CisJCSJBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4sICIKKwkJIlBhdWwgTXVuZHQgPGxldGhhbEBsaW51eC1zaC5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlJpY29oIFJTNUMzNzIgUlRDIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXMzNTM5MGEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zMzUzOTBhLmMKaW5kZXggYTZmYTFmMi4uZGVmNGQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXMzNTM5MGEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtczM1MzkwYS5jCkBAIC0xMDQsMTIgKzEwNCwxMiBAQAogc3RhdGljIGNoYXIgczM1MzkwYV9ocjJyZWcoc3RydWN0IHMzNTM5MGEgKnMzNTM5MGEsIGludCBob3VyKQogewogCWlmIChzMzUzOTBhLT50d2VudHlmb3VyaG91cikKLQkJcmV0dXJuIEJJTjJCQ0QoaG91cik7CisJCXJldHVybiBiaW4yYmNkKGhvdXIpOwogCiAJaWYgKGhvdXIgPCAxMikKLQkJcmV0dXJuIEJJTjJCQ0QoaG91cik7CisJCXJldHVybiBiaW4yYmNkKGhvdXIpOwogCi0JcmV0dXJuIDB4NDAgfCBCSU4yQkNEKGhvdXIgLSAxMik7CisJcmV0dXJuIDB4NDAgfCBiaW4yYmNkKGhvdXIgLSAxMik7CiB9CiAKIHN0YXRpYyBpbnQgczM1MzkwYV9yZWcyaHIoc3RydWN0IHMzNTM5MGEgKnMzNTM5MGEsIGNoYXIgcmVnKQpAQCAtMTE3LDkgKzExNyw5IEBACiAJdW5zaWduZWQgaG91cjsKIAogCWlmIChzMzUzOTBhLT50d2VudHlmb3VyaG91cikKLQkJcmV0dXJuIEJDRDJCSU4ocmVnICYgMHgzZik7CisJCXJldHVybiBiY2QyYmluKHJlZyAmIDB4M2YpOwogCi0JaG91ciA9IEJDRDJCSU4ocmVnICYgMHgzZik7CisJaG91ciA9IGJjZDJiaW4ocmVnICYgMHgzZik7CiAJaWYgKHJlZyAmIDB4NDApCiAJCWhvdXIgKz0gMTI7CiAKQEAgLTEzNywxMyArMTM3LDEzIEBACiAJCXRtLT50bV9taW4sIHRtLT50bV9ob3VyLCB0bS0+dG1fbWRheSwgdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsCiAJCXRtLT50bV93ZGF5KTsKIAotCWJ1ZltTMzUzOTBBX0JZVEVfWUVBUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyIC0gMTAwKTsKLQlidWZbUzM1MzkwQV9CWVRFX01PTlRIXSA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOwotCWJ1ZltTMzUzOTBBX0JZVEVfREFZXSA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOwotCWJ1ZltTMzUzOTBBX0JZVEVfV0RBWV0gPSBCSU4yQkNEKHRtLT50bV93ZGF5KTsKKwlidWZbUzM1MzkwQV9CWVRFX1lFQVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAtIDEwMCk7CisJYnVmW1MzNTM5MEFfQllURV9NT05USF0gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKKwlidWZbUzM1MzkwQV9CWVRFX0RBWV0gPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKKwlidWZbUzM1MzkwQV9CWVRFX1dEQVldID0gYmluMmJjZCh0bS0+dG1fd2RheSk7CiAJYnVmW1MzNTM5MEFfQllURV9IT1VSU10gPSBzMzUzOTBhX2hyMnJlZyhzMzUzOTBhLCB0bS0+dG1faG91cik7Ci0JYnVmW1MzNTM5MEFfQllURV9NSU5TXSA9IEJJTjJCQ0QodG0tPnRtX21pbik7Ci0JYnVmW1MzNTM5MEFfQllURV9TRUNTXSA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7CisJYnVmW1MzNTM5MEFfQllURV9NSU5TXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CisJYnVmW1MzNTM5MEFfQllURV9TRUNTXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CiAKIAkvKiBUaGlzIGNoaXAgZXhwZWN0cyB0aGUgYml0cyBvZiBlYWNoIGJ5dGUgdG8gYmUgaW4gcmV2ZXJzZSBvcmRlciAqLwogCWZvciAoaSA9IDA7IGkgPCA3OyArK2kpCkBAIC0xNjgsMTMgKzE2OCwxMyBAQAogCWZvciAoaSA9IDA7IGkgPCA3OyArK2kpCiAJCWJ1ZltpXSA9IGJpdHJldjgoYnVmW2ldKTsKIAotCXRtLT50bV9zZWMgPSBCQ0QyQklOKGJ1ZltTMzUzOTBBX0JZVEVfU0VDU10pOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKGJ1ZltTMzUzOTBBX0JZVEVfTUlOU10pOworCXRtLT50bV9zZWMgPSBiY2QyYmluKGJ1ZltTMzUzOTBBX0JZVEVfU0VDU10pOworCXRtLT50bV9taW4gPSBiY2QyYmluKGJ1ZltTMzUzOTBBX0JZVEVfTUlOU10pOwogCXRtLT50bV9ob3VyID0gczM1MzkwYV9yZWcyaHIoczM1MzkwYSwgYnVmW1MzNTM5MEFfQllURV9IT1VSU10pOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTihidWZbUzM1MzkwQV9CWVRFX1dEQVldKTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4oYnVmW1MzNTM5MEFfQllURV9EQVldKTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihidWZbUzM1MzkwQV9CWVRFX01PTlRIXSkgLSAxOwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihidWZbUzM1MzkwQV9CWVRFX1lFQVJdKSArIDEwMDsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4oYnVmW1MzNTM5MEFfQllURV9XREFZXSk7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKGJ1ZltTMzUzOTBBX0JZVEVfREFZXSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4oYnVmW1MzNTM5MEFfQllURV9NT05USF0pIC0gMTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oYnVmW1MzNTM5MEFfQllURV9ZRUFSXSkgKyAxMDA7CiAKIAlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiB0bSBpcyBzZWNzPSVkLCBtaW5zPSVkLCBob3Vycz0lZCwgbWRheT0lZCwgIgogCQkibW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLCBfX2Z1bmNfXywgdG0tPnRtX3NlYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwppbmRleCBlN2QxOWI2Li45MTBiYzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXMzYy5jCkBAIC0xMzQsMTIgKzEzNCwxMiBAQAogCQkgcnRjX3RtLT50bV95ZWFyLCBydGNfdG0tPnRtX21vbiwgcnRjX3RtLT50bV9tZGF5LAogCQkgcnRjX3RtLT50bV9ob3VyLCBydGNfdG0tPnRtX21pbiwgcnRjX3RtLT50bV9zZWMpOwogCi0JQkNEX1RPX0JJTihydGNfdG0tPnRtX3NlYyk7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21pbik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX2hvdXIpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tZGF5KTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbW9uKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1feWVhcik7CisJcnRjX3RtLT50bV9zZWMgPSBiY2QyYmluKHJ0Y190bS0+dG1fc2VjKTsKKwlydGNfdG0tPnRtX21pbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9taW4pOworCXJ0Y190bS0+dG1faG91ciA9IGJjZDJiaW4ocnRjX3RtLT50bV9ob3VyKTsKKwlydGNfdG0tPnRtX21kYXkgPSBiY2QyYmluKHJ0Y190bS0+dG1fbWRheSk7CisJcnRjX3RtLT50bV9tb24gPSBiY2QyYmluKHJ0Y190bS0+dG1fbW9uKTsKKwlydGNfdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ0Y190bS0+dG1feWVhcik7CiAKIAlydGNfdG0tPnRtX3llYXIgKz0gMTAwOwogCXJ0Y190bS0+dG1fbW9uIC09IDE7CkBAIC0xNjMsMTIgKzE2MywxMiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fc2VjKSwgIGJhc2UgKyBTM0MyNDEwX1JUQ1NFQyk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksICBiYXNlICsgUzNDMjQxMF9SVENNSU4pOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9ob3VyKSwgYmFzZSArIFMzQzI0MTBfUlRDSE9VUik7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21kYXkpLCBiYXNlICsgUzNDMjQxMF9SVENEQVRFKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbW9uICsgMSksIGJhc2UgKyBTM0MyNDEwX1JUQ01PTik7Ci0Jd3JpdGViKEJJTjJCQ0QoeWVhciksIGJhc2UgKyBTM0MyNDEwX1JUQ1lFQVIpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9zZWMpLCAgYmFzZSArIFMzQzI0MTBfUlRDU0VDKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWluKSwgIGJhc2UgKyBTM0MyNDEwX1JUQ01JTik7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX2hvdXIpLCBiYXNlICsgUzNDMjQxMF9SVENIT1VSKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWRheSksIGJhc2UgKyBTM0MyNDEwX1JUQ0RBVEUpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tb24gKyAxKSwgYmFzZSArIFMzQzI0MTBfUlRDTU9OKTsKKwl3cml0ZWIoYmluMmJjZCh5ZWFyKSwgYmFzZSArIFMzQzI0MTBfUlRDWUVBUik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE5OSwzNCArMTk5LDM0IEBACiAJLyogZGVjb2RlIHRoZSBhbGFybSBlbmFibGUgZmllbGQgKi8KIAogCWlmIChhbG1fZW4gJiBTM0MyNDEwX1JUQ0FMTV9TRUNFTikKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX3NlYyk7CisJCWFsbV90bS0+dG1fc2VjID0gYmNkMmJpbihhbG1fdG0tPnRtX3NlYyk7CiAJZWxzZQogCQlhbG1fdG0tPnRtX3NlYyA9IDB4ZmY7CiAKIAlpZiAoYWxtX2VuICYgUzNDMjQxMF9SVENBTE1fTUlORU4pCi0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9taW4pOworCQlhbG1fdG0tPnRtX21pbiA9IGJjZDJiaW4oYWxtX3RtLT50bV9taW4pOwogCWVsc2UKIAkJYWxtX3RtLT50bV9taW4gPSAweGZmOwogCiAJaWYgKGFsbV9lbiAmIFMzQzI0MTBfUlRDQUxNX0hPVVJFTikKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX2hvdXIpOworCQlhbG1fdG0tPnRtX2hvdXIgPSBiY2QyYmluKGFsbV90bS0+dG1faG91cik7CiAJZWxzZQogCQlhbG1fdG0tPnRtX2hvdXIgPSAweGZmOwogCiAJaWYgKGFsbV9lbiAmIFMzQzI0MTBfUlRDQUxNX0RBWUVOKQotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fbWRheSk7CisJCWFsbV90bS0+dG1fbWRheSA9IGJjZDJiaW4oYWxtX3RtLT50bV9tZGF5KTsKIAllbHNlCiAJCWFsbV90bS0+dG1fbWRheSA9IDB4ZmY7CiAKIAlpZiAoYWxtX2VuICYgUzNDMjQxMF9SVENBTE1fTU9ORU4pIHsKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX21vbik7CisJCWFsbV90bS0+dG1fbW9uID0gYmNkMmJpbihhbG1fdG0tPnRtX21vbik7CiAJCWFsbV90bS0+dG1fbW9uIC09IDE7CiAJfSBlbHNlIHsKIAkJYWxtX3RtLT50bV9tb24gPSAweGZmOwogCX0KIAogCWlmIChhbG1fZW4gJiBTM0MyNDEwX1JUQ0FMTV9ZRUFSRU4pCi0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV95ZWFyKTsKKwkJYWxtX3RtLT50bV95ZWFyID0gYmNkMmJpbihhbG1fdG0tPnRtX3llYXIpOwogCWVsc2UKIAkJYWxtX3RtLT50bV95ZWFyID0gMHhmZmZmOwogCkBAIC0yNTAsMTcgKzI1MCwxNyBAQAogCiAJaWYgKHRtLT50bV9zZWMgPCA2MCAmJiB0bS0+dG1fc2VjID49IDApIHsKIAkJYWxybV9lbiB8PSBTM0MyNDEwX1JUQ0FMTV9TRUNFTjsKLQkJd3JpdGViKEJJTjJCQ0QodG0tPnRtX3NlYyksIGJhc2UgKyBTM0MyNDEwX0FMTVNFQyk7CisJCXdyaXRlYihiaW4yYmNkKHRtLT50bV9zZWMpLCBiYXNlICsgUzNDMjQxMF9BTE1TRUMpOwogCX0KIAogCWlmICh0bS0+dG1fbWluIDwgNjAgJiYgdG0tPnRtX21pbiA+PSAwKSB7CiAJCWFscm1fZW4gfD0gUzNDMjQxMF9SVENBTE1fTUlORU47Ci0JCXdyaXRlYihCSU4yQkNEKHRtLT50bV9taW4pLCBiYXNlICsgUzNDMjQxMF9BTE1NSU4pOworCQl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWluKSwgYmFzZSArIFMzQzI0MTBfQUxNTUlOKTsKIAl9CiAKIAlpZiAodG0tPnRtX2hvdXIgPCAyNCAmJiB0bS0+dG1faG91ciA+PSAwKSB7CiAJCWFscm1fZW4gfD0gUzNDMjQxMF9SVENBTE1fSE9VUkVOOwotCQl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIGJhc2UgKyBTM0MyNDEwX0FMTUhPVVIpOworCQl3cml0ZWIoYmluMmJjZCh0bS0+dG1faG91ciksIGJhc2UgKyBTM0MyNDEwX0FMTUhPVVIpOwogCX0KIAogCXByX2RlYnVnKCJzZXR0aW5nIFMzQzI0MTBfUlRDQUxNIHRvICUwOHhcbiIsIGFscm1fZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNoLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwppbmRleCAxZjg4ZTllLi5hYWY5ZDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2guYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwpAQCAtMjU3LDEyICsyNTcsNiBAQAogCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgc2hfcnRjX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCXNoX3J0Y19zZXRwaWUoZGV2LCAwKTsKLQlzaF9ydGNfc2V0YWllKGRldiwgMCk7Ci19Ci0KIHN0YXRpYyBpbnQgc2hfcnRjX3Byb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKIAlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTMzMCwyMyArMzI0LDIzIEBACiAKIAkJc2VjMTI4ID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUjY0Q05UKTsKIAotCQl0bS0+dG1fc2VjCT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSU0VDQ05UKSk7Ci0JCXRtLT50bV9taW4JPSBCQ0QyQklOKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJNSU5DTlQpKTsKLQkJdG0tPnRtX2hvdXIJPSBCQ0QyQklOKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJIUkNOVCkpOwotCQl0bS0+dG1fd2RheQk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUldLQ05UKSk7Ci0JCXRtLT50bV9tZGF5CT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSREFZQ05UKSk7Ci0JCXRtLT50bV9tb24JPSBCQ0QyQklOKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJNT05DTlQpKSAtIDE7CisJCXRtLT50bV9zZWMJPSBiY2QyYmluKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJTRUNDTlQpKTsKKwkJdG0tPnRtX21pbgk9IGJjZDJiaW4ocmVhZGIocnRjLT5yZWdiYXNlICsgUk1JTkNOVCkpOworCQl0bS0+dG1faG91cgk9IGJjZDJiaW4ocmVhZGIocnRjLT5yZWdiYXNlICsgUkhSQ05UKSk7CisJCXRtLT50bV93ZGF5CT0gYmNkMmJpbihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSV0tDTlQpKTsKKwkJdG0tPnRtX21kYXkJPSBiY2QyYmluKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJEQVlDTlQpKTsKKwkJdG0tPnRtX21vbgk9IGJjZDJiaW4ocmVhZGIocnRjLT5yZWdiYXNlICsgUk1PTkNOVCkpIC0gMTsKIAogCQlpZiAocnRjLT5jYXBhYmlsaXRpZXMgJiBSVENfQ0FQXzRfRElHSVRfWUVBUikgewogCQkJeXIgID0gcmVhZHcocnRjLT5yZWdiYXNlICsgUllSQ05UKTsKLQkJCXlyMTAwID0gQkNEMkJJTih5ciA+PiA4KTsKKwkJCXlyMTAwID0gYmNkMmJpbih5ciA+PiA4KTsKIAkJCXlyICY9IDB4ZmY7CiAJCX0gZWxzZSB7CiAJCQl5ciAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSWVJDTlQpOwotCQkJeXIxMDAgPSBCQ0QyQklOKCh5ciA9PSAweDk5KSA/IDB4MTkgOiAweDIwKTsKKwkJCXlyMTAwID0gYmNkMmJpbigoeXIgPT0gMHg5OSkgPyAweDE5IDogMHgyMCk7CiAJCX0KIAotCQl0bS0+dG1feWVhciA9ICh5cjEwMCAqIDEwMCArIEJDRDJCSU4oeXIpKSAtIDE5MDA7CisJCXRtLT50bV95ZWFyID0gKHlyMTAwICogMTAwICsgYmNkMmJpbih5cikpIC0gMTkwMDsKIAogCQlzZWMyID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUjY0Q05UKTsKIAkJY2ZfYml0ID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSkgJiBSQ1IxX0NGOwpAQCAtMzg4LDIwICszODIsMjAgQEAKIAl0bXAgJj0gflJDUjJfU1RBUlQ7CiAJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMik7CiAKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fc2VjKSwgIHJ0Yy0+cmVnYmFzZSArIFJTRUNDTlQpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9taW4pLCAgcnRjLT5yZWdiYXNlICsgUk1JTkNOVCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBydGMtPnJlZ2Jhc2UgKyBSSFJDTlQpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV93ZGF5KSwgcnRjLT5yZWdiYXNlICsgUldLQ05UKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWRheSksIHJ0Yy0+cmVnYmFzZSArIFJEQVlDTlQpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tb24gKyAxKSwgcnRjLT5yZWdiYXNlICsgUk1PTkNOVCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3NlYyksICBydGMtPnJlZ2Jhc2UgKyBSU0VDQ05UKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWluKSwgIHJ0Yy0+cmVnYmFzZSArIFJNSU5DTlQpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9ob3VyKSwgcnRjLT5yZWdiYXNlICsgUkhSQ05UKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fd2RheSksIHJ0Yy0+cmVnYmFzZSArIFJXS0NOVCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21kYXkpLCBydGMtPnJlZ2Jhc2UgKyBSREFZQ05UKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbW9uICsgMSksIHJ0Yy0+cmVnYmFzZSArIFJNT05DTlQpOwogCiAJaWYgKHJ0Yy0+Y2FwYWJpbGl0aWVzICYgUlRDX0NBUF80X0RJR0lUX1lFQVIpIHsKLQkJeWVhciA9IChCSU4yQkNEKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKSA8PCA4KSB8Ci0JCQlCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwkJeWVhciA9IChiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKSA8PCA4KSB8CisJCQliaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAkJd3JpdGV3KHllYXIsIHJ0Yy0+cmVnYmFzZSArIFJZUkNOVCk7CiAJfSBlbHNlIHsKIAkJeWVhciA9IHRtLT50bV95ZWFyICUgMTAwOwotCQl3cml0ZWIoQklOMkJDRCh5ZWFyKSwgcnRjLT5yZWdiYXNlICsgUllSQ05UKTsKKwkJd3JpdGViKGJpbjJiY2QoeWVhciksIHJ0Yy0+cmVnYmFzZSArIFJZUkNOVCk7CiAJfQogCiAJLyogU3RhcnQgUlRDICovCkBAIC00MjMsNyArNDE3LDcgQEAKIAlieXRlID0gcmVhZGIocnRjLT5yZWdiYXNlICsgcmVnX29mZik7CiAJaWYgKGJ5dGUgJiBBUl9FTkIpIHsKIAkJYnl0ZSAmPSB+QVJfRU5COwkvKiBzdHJpcCB0aGUgZW5hYmxlIGJpdCAqLwotCQl2YWx1ZSA9IEJDRDJCSU4oYnl0ZSk7CisJCXZhbHVlID0gYmNkMmJpbihieXRlKTsKIAl9CiAKIAlyZXR1cm4gdmFsdWU7CkBAIC00NjEsNyArNDU1LDcgQEAKIAlpZiAodmFsdWUgPCAwKQogCQl3cml0ZWIoMCwgcnRjLT5yZWdiYXNlICsgcmVnX29mZik7CiAJZWxzZQotCQl3cml0ZWIoQklOMkJDRCh2YWx1ZSkgfCBBUl9FTkIsICBydGMtPnJlZ2Jhc2UgKyByZWdfb2ZmKTsKKwkJd3JpdGViKGJpbjJiY2QodmFsdWUpIHwgQVJfRU5CLCAgcnRjLT5yZWdiYXNlICsgcmVnX29mZik7CiB9CiAKIHN0YXRpYyBpbnQgc2hfcnRjX2NoZWNrX2FsYXJtKHN0cnVjdCBydGNfdGltZSAqdG0pCkBAIC01NTksNyArNTUzLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHNoX3J0Y19vcHMgPSB7Ci0JLnJlbGVhc2UJPSBzaF9ydGNfcmVsZWFzZSwKIAkuaW9jdGwJCT0gc2hfcnRjX2lvY3RsLAogCS5yZWFkX3RpbWUJPSBzaF9ydGNfcmVhZF90aW1lLAogCS5zZXRfdGltZQk9IHNoX3J0Y19zZXRfdGltZSwKQEAgLTU3NSw3ICs1NjgsNyBAQAogCXN0cnVjdCBzaF9ydGMgKnJ0YzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl1bnNpZ25lZCBpbnQgdG1wOwotCWludCByZXQgPSAtRU5PRU5UOworCWludCByZXQ7CiAKIAlydGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2hfcnRjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KCFydGMpKQpAQCAtNTg0LDI2ICs1NzcsMzMgQEAKIAlzcGluX2xvY2tfaW5pdCgmcnRjLT5sb2NrKTsKIAogCS8qIGdldCBwZXJpb2RpYy9jYXJyeS9hbGFybSBpcnFzICovCi0JcnRjLT5wZXJpb2RpY19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICh1bmxpa2VseShydGMtPnBlcmlvZGljX2lycSA8IDApKSB7CisJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwkJcmV0ID0gLUVOT0VOVDsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBwZXJpb2RcbiIpOwogCQlnb3RvIGVycl9iYWRyZXM7CiAJfQorCXJ0Yy0+cGVyaW9kaWNfaXJxID0gcmV0OwogCi0JcnRjLT5jYXJyeV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOwotCWlmICh1bmxpa2VseShydGMtPmNhcnJ5X2lycSA8IDApKSB7CisJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwkJcmV0ID0gLUVOT0VOVDsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBjYXJyeVxuIik7CiAJCWdvdG8gZXJyX2JhZHJlczsKIAl9CisJcnRjLT5jYXJyeV9pcnEgPSByZXQ7CiAKLQlydGMtPmFsYXJtX2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMik7Ci0JaWYgKHVubGlrZWx5KHJ0Yy0+YWxhcm1faXJxIDwgMCkpIHsKKwlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDIpOworCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCQlyZXQgPSAtRU5PRU5UOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgZm9yIGFsYXJtXG4iKTsKIAkJZ290byBlcnJfYmFkcmVzOwogCX0KKwlydGMtPmFsYXJtX2lycSA9IHJldDsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKIAlpZiAodW5saWtlbHkocmVzID09IE5VTEwpKSB7CisJCXJldCA9IC1FTk9FTlQ7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElPIHJlc291cmNlXG4iKTsKIAkJZ290byBlcnJfYmFkcmVzOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zdGsxN3RhOC5jIGIvZHJpdmVycy9ydGMvcnRjLXN0azE3dGE4LmMKaW5kZXggMzFkM2M4Yy4uZjRjZDQ2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXN0azE3dGE4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXN0azE3dGE4LmMKQEAgLTgyLDE0ICs4MiwxNCBAQAogCWZsYWdzID0gcmVhZGIocGRhdGEtPmlvYWRkciArIFJUQ19GTEFHUyk7CiAJd3JpdGViKGZsYWdzIHwgUlRDX1dSSVRFLCBwZGF0YS0+aW9hZGRyICsgUlRDX0ZMQUdTKTsKIAotCXdyaXRlYihCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSwgaW9hZGRyICsgUlRDX1lFQVIpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tb24gKyAxKSwgaW9hZGRyICsgUlRDX01PTlRIKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fd2RheSkgJiBSVENfREFZX01BU0ssIGlvYWRkciArIFJUQ19EQVkpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tZGF5KSwgaW9hZGRyICsgUlRDX0RBVEUpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9ob3VyKSwgaW9hZGRyICsgUlRDX0hPVVJTKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWluKSwgaW9hZGRyICsgUlRDX01JTlVURVMpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpICYgUlRDX1NFQ09ORFNfTUFTSywgaW9hZGRyICsgUlRDX1NFQ09ORFMpOwotCXdyaXRlYihCSU4yQkNEKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKSwgaW9hZGRyICsgUlRDX0NFTlRVUlkpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKSwgaW9hZGRyICsgUlRDX1lFQVIpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tb24gKyAxKSwgaW9hZGRyICsgUlRDX01PTlRIKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fd2RheSkgJiBSVENfREFZX01BU0ssIGlvYWRkciArIFJUQ19EQVkpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tZGF5KSwgaW9hZGRyICsgUlRDX0RBVEUpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9ob3VyKSwgaW9hZGRyICsgUlRDX0hPVVJTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWluKSwgaW9hZGRyICsgUlRDX01JTlVURVMpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9zZWMpICYgUlRDX1NFQ09ORFNfTUFTSywgaW9hZGRyICsgUlRDX1NFQ09ORFMpOworCXdyaXRlYihiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKSwgaW9hZGRyICsgUlRDX0NFTlRVUlkpOwogCiAJd3JpdGViKGZsYWdzICYgflJUQ19XUklURSwgcGRhdGEtPmlvYWRkciArIFJUQ19GTEFHUyk7CiAJcmV0dXJuIDA7CkBAIC0xMjAsMTQgKzEyMCwxNCBAQAogCXllYXIgPSByZWFkYihpb2FkZHIgKyBSVENfWUVBUik7CiAJY2VudHVyeSA9IHJlYWRiKGlvYWRkciArIFJUQ19DRU5UVVJZKTsKIAl3cml0ZWIoZmxhZ3MgJiB+UlRDX1JFQUQsIGlvYWRkciArIFJUQ19GTEFHUyk7Ci0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oc2Vjb25kKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihtaW51dGUpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihob3VyKTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4oZGF5KTsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4od2Vlayk7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4obW9udGgpIC0gMTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihzZWNvbmQpOworCXRtLT50bV9taW4gPSBiY2QyYmluKG1pbnV0ZSk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKGhvdXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihkYXkpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbih3ZWVrKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihtb250aCkgLSAxOwogCS8qIHllYXIgaXMgMTkwMCArIHRtLT50bV95ZWFyICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHllYXIpICsgQkNEMkJJTihjZW50dXJ5KSAqIDEwMCAtIDE5MDA7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHllYXIpICsgYmNkMmJpbihjZW50dXJ5KSAqIDEwMCAtIDE5MDA7CiAKIAlpZiAocnRjX3ZhbGlkX3RtKHRtKSA8IDApIHsKIAkJZGV2X2VycihkZXYsICJyZXRyaWV2ZWQgZGF0ZS90aW1lIGlzIG5vdCB2YWxpZC5cbiIpOwpAQCAtMTQ4LDE2ICsxNDgsMTYgQEAKIAl3cml0ZWIoZmxhZ3MgfCBSVENfV1JJVEUsIGlvYWRkciArIFJUQ19GTEFHUyk7CiAKIAl3cml0ZWIocGRhdGEtPmFscm1fbWRheSA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9tZGF5KSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fbWRheSksCiAJICAgICAgIGlvYWRkciArIFJUQ19EQVRFX0FMQVJNKTsKIAl3cml0ZWIocGRhdGEtPmFscm1faG91ciA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9ob3VyKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1faG91ciksCiAJICAgICAgIGlvYWRkciArIFJUQ19IT1VSU19BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX21pbiA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9taW4pLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9taW4pLAogCSAgICAgICBpb2FkZHIgKyBSVENfTUlOVVRFU19BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX3NlYyA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9zZWMpLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9zZWMpLAogCSAgICAgICBpb2FkZHIgKyBSVENfU0VDT05EU19BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5pcnFlbiA/IFJUQ19JTlRTX0FJRSA6IDAsIGlvYWRkciArIFJUQ19JTlRFUlJVUFRTKTsKIAlyZWFkYihpb2FkZHIgKyBSVENfRkxBR1MpOwkvKiBjbGVhciBpbnRlcnJ1cHRzICovCkBAIC0yMTUsMTcgKzIxNSw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgdm9pZCBzdGsxN3RhOF9ydGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JaWYgKHBkYXRhLT5pcnEgPj0gMCkgewotCQlwZGF0YS0+aXJxZW4gPSAwOwotCQlzdGsxN3RhOF9ydGNfdXBkYXRlX2FsYXJtKHBkYXRhKTsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgc3RrMTd0YThfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTI1NCw3ICsyNDMsNiBAQAogCS5zZXRfdGltZQk9IHN0azE3dGE4X3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IHN0azE3dGE4X3J0Y19yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBzdGsxN3RhOF9ydGNfc2V0X2FsYXJtLAotCS5yZWxlYXNlCT0gc3RrMTd0YThfcnRjX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHN0azE3dGE4X3J0Y19pb2N0bCwKIH07CiAKQEAgLTI5Miw3ICsyODAsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJudnJhbSIsCiAJCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSBSVENfT0ZGU0VULAogCS5yZWFkID0gc3RrMTd0YThfbnZyYW1fcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jIGIvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKaW5kZXggMTAwMjVkOC4uMTRkNGYwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKQEAgLTkyLDE5ICs5MiwxOSBAQAogCiAJLyogLi4uYW5kIHRoZW4gcmVhZCBjb25zdGFudCB2YWx1ZXMuICovCiAJdG1wID0gdjMwMjBfZ2V0X3JlZyhjaGlwLCBWMzAyMF9TRUNPTkRTKTsKLQlkdC0+dG1fc2VjCT0gQkNEMkJJTih0bXApOworCWR0LT50bV9zZWMJPSBiY2QyYmluKHRtcCk7CiAJdG1wID0gdjMwMjBfZ2V0X3JlZyhjaGlwLCBWMzAyMF9NSU5VVEVTKTsKLQlkdC0+dG1fbWluCT0gQkNEMkJJTih0bXApOworCWR0LT50bV9taW4JPSBiY2QyYmluKHRtcCk7CiAJdG1wID0gdjMwMjBfZ2V0X3JlZyhjaGlwLCBWMzAyMF9IT1VSUyk7Ci0JZHQtPnRtX2hvdXIJPSBCQ0QyQklOKHRtcCk7CisJZHQtPnRtX2hvdXIJPSBiY2QyYmluKHRtcCk7CiAJdG1wID0gdjMwMjBfZ2V0X3JlZyhjaGlwLCBWMzAyMF9NT05USF9EQVkpOwotCWR0LT50bV9tZGF5CT0gQkNEMkJJTih0bXApOworCWR0LT50bV9tZGF5CT0gYmNkMmJpbih0bXApOwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfTU9OVEgpOwotCWR0LT50bV9tb24gICAgPSBCQ0QyQklOKHRtcCkgLSAxOworCWR0LT50bV9tb24gICAgPSBiY2QyYmluKHRtcCkgLSAxOwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfV0VFS19EQVkpOwotCWR0LT50bV93ZGF5CT0gQkNEMkJJTih0bXApOworCWR0LT50bV93ZGF5CT0gYmNkMmJpbih0bXApOwogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfWUVBUik7Ci0JZHQtPnRtX3llYXIgPSBCQ0QyQklOKHRtcCkrMTAwOworCWR0LT50bV95ZWFyID0gYmNkMmJpbih0bXApKzEwMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJcbiVzIDogUmVhZCBSVEMgdmFsdWVzXG4iLF9fZnVuY19fKTsKQEAgLTEzNiwxMyArMTM2LDEzIEBACiAjZW5kaWYKIAogCS8qIFdyaXRlIGFsbCB0aGUgdmFsdWVzIHRvIHJhbS4uLiAqLwotCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfU0VDT05EUywgCUJJTjJCQ0QoZHQtPnRtX3NlYykpOwotCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfTUlOVVRFUywgCUJJTjJCQ0QoZHQtPnRtX21pbikpOwotCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfSE9VUlMsIAlCSU4yQkNEKGR0LT50bV9ob3VyKSk7Ci0JdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9NT05USF9EQVksCUJJTjJCQ0QoZHQtPnRtX21kYXkpKTsKLQl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX01PTlRILCAgICAgQklOMkJDRChkdC0+dG1fbW9uICsgMSkpOwotCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfV0VFS19EQVksIAlCSU4yQkNEKGR0LT50bV93ZGF5KSk7Ci0JdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9ZRUFSLCAJQklOMkJDRChkdC0+dG1feWVhciAlIDEwMCkpOworCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfU0VDT05EUywgCWJpbjJiY2QoZHQtPnRtX3NlYykpOworCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfTUlOVVRFUywgCWJpbjJiY2QoZHQtPnRtX21pbikpOworCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfSE9VUlMsIAliaW4yYmNkKGR0LT50bV9ob3VyKSk7CisJdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9NT05USF9EQVksCWJpbjJiY2QoZHQtPnRtX21kYXkpKTsKKwl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX01PTlRILCAgICAgYmluMmJjZChkdC0+dG1fbW9uICsgMSkpOworCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfV0VFS19EQVksIAliaW4yYmNkKGR0LT50bV93ZGF5KSk7CisJdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9ZRUFSLCAJYmluMmJjZChkdC0+dG1feWVhciAlIDEwMCkpOwogCiAJLyogLi4uYW5kIHNldCB0aGUgY2xvY2suICovCiAJdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9DTURfUkFNMkNMT0NLLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwppbmRleCA4ODRiNjM1Li44MzRkY2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCkBAIC0zNjAsNyArMzYwLDcgQEAKIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIAogCWFpZV9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChhaWVfaXJxIDwgMCB8fCBhaWVfaXJxID49IE5SX0lSUVMpIHsKKwlpZiAoYWllX2lycSA8IDAgfHwgYWllX2lycSA+PSBucl9pcnFzKSB7CiAJCXJldHZhbCA9IC1FQlVTWTsKIAkJZ290byBlcnJfZGV2aWNlX3VucmVnaXN0ZXI7CiAJfQpAQCAtMzcxLDcgKzM3MSw3IEBACiAJCWdvdG8gZXJyX2RldmljZV91bnJlZ2lzdGVyOwogCiAJcGllX2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7Ci0JaWYgKHBpZV9pcnEgPCAwIHx8IHBpZV9pcnEgPj0gTlJfSVJRUykKKwlpZiAocGllX2lycSA8IDAgfHwgcGllX2lycSA+PSBucl9pcnFzKQogCQlnb3RvIGVycl9mcmVlX2lycTsKIAogCXJldHZhbCA9IHJlcXVlc3RfaXJxKHBpZV9pcnEsIHJ0Y2xvbmcxX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy14MTIwNS5jIGIvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKaW5kZXggN2RjZmJhMS4uMzEwYzEwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMKQEAgLTExOCwxMyArMTE4LDEzIEBACiAJCWZvciAoaSA9IDA7IGkgPD0gNDsgaSsrKQogCQkJYnVmW2ldICY9IDB4N0Y7CiAKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihidWZbQ0NSX1NFQ10pOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKGJ1ZltDQ1JfTUlOXSk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKGJ1ZltDQ1JfSE9VUl0gJiAweDNGKTsgLyogaHIgaXMgMC0yMyAqLwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihidWZbQ0NSX01EQVldKTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihidWZbQ0NSX01PTlRIXSkgLSAxOyAvKiBtb24gaXMgMC0xMSAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihidWZbQ0NSX1lFQVJdKQotCQkJKyAoQkNEMkJJTihidWZbQ0NSX1kyS10pICogMTAwKSAtIDE5MDA7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oYnVmW0NDUl9TRUNdKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihidWZbQ0NSX01JTl0pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihidWZbQ0NSX0hPVVJdICYgMHgzRik7IC8qIGhyIGlzIDAtMjMgKi8KKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oYnVmW0NDUl9NREFZXSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4oYnVmW0NDUl9NT05USF0pIC0gMTsgLyogbW9uIGlzIDAtMTEgKi8KKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oYnVmW0NDUl9ZRUFSXSkKKwkJCSsgKGJjZDJiaW4oYnVmW0NDUl9ZMktdKSAqIDEwMCkgLSAxOTAwOwogCXRtLT50bV93ZGF5ID0gYnVmW0NDUl9XREFZXTsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCAiCkBAIC0xNzQsMTEgKzE3NCwxMSBAQAogCQlfX2Z1bmNfXywKIAkJdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIpOwogCi0JYnVmW0NDUl9TRUNdID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQlidWZbQ0NSX01JTl0gPSBCSU4yQkNEKHRtLT50bV9taW4pOworCWJ1ZltDQ1JfU0VDXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJYnVmW0NDUl9NSU5dID0gYmluMmJjZCh0bS0+dG1fbWluKTsKIAogCS8qIHNldCBob3VyIGFuZCAyNGhyIGJpdCAqLwotCWJ1ZltDQ1JfSE9VUl0gPSBCSU4yQkNEKHRtLT50bV9ob3VyKSB8IFgxMjA1X0hSX01JTDsKKwlidWZbQ0NSX0hPVVJdID0gYmluMmJjZCh0bS0+dG1faG91cikgfCBYMTIwNV9IUl9NSUw7CiAKIAkvKiBzaG91bGQgd2UgYWxzbyBzZXQgdGhlIGRhdGU/ICovCiAJaWYgKGRhdGV0b28pIHsKQEAgLTE4NywxNSArMTg3LDE1IEBACiAJCQlfX2Z1bmNfXywKIAkJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCi0JCWJ1ZltDQ1JfTURBWV0gPSBCSU4yQkNEKHRtLT50bV9tZGF5KTsKKwkJYnVmW0NDUl9NREFZXSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOwogCiAJCS8qIG1vbnRoLCAxIC0gMTIgKi8KLQkJYnVmW0NDUl9NT05USF0gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKKwkJYnVmW0NDUl9NT05USF0gPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKIAogCQkvKiB5ZWFyLCBzaW5jZSB0aGUgcnRjIGVwb2NoKi8KLQkJYnVmW0NDUl9ZRUFSXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCQlidWZbQ0NSX1lFQVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CiAJCWJ1ZltDQ1JfV0RBWV0gPSB0bS0+dG1fd2RheSAmIDB4MDc7Ci0JCWJ1ZltDQ1JfWTJLXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgLyAxMDApOworCQlidWZbQ0NSX1kyS10gPSBiaW4yYmNkKHRtLT50bV95ZWFyIC8gMTAwKTsKIAl9CiAKIAkvKiBJZiB3cml0aW5nIGFsYXJtIHJlZ2lzdGVycywgc2V0IGNvbXBhcmUgYml0cyBvbiByZWdpc3RlcnMgMC00ICovCkBAIC00MzcsNyArNDM3LDcgQEAKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKLQkJdmFsdWUgPSBCQ0QyQklOKHJlZyAmIHByb2JlX2xpbWl0c19wYXR0ZXJuW2ldLm1hc2spOworCQl2YWx1ZSA9IGJjZDJiaW4ocmVnICYgcHJvYmVfbGltaXRzX3BhdHRlcm5baV0ubWFzayk7CiAKIAkJaWYgKHZhbHVlID4gcHJvYmVfbGltaXRzX3BhdHRlcm5baV0ubWF4IHx8CiAJCQl2YWx1ZSA8IHByb2JlX2xpbWl0c19wYXR0ZXJuW2ldLm1pbikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCmluZGV4IDg1ZmNiNDMuLjc4NDQ0NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKQEAgLTU0NCw3ICs1NDQsNyBAQAogCX0KIAljcXItPnJldHJpZXMgPSBESUFHX01BWF9SRVRSSUVTOwogCWNxci0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKLQlpZiAocmVxLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1QpCisJaWYgKGJsa19ub3JldHJ5X3JlcXVlc3QocmVxKSkKIAkJc2V0X2JpdChEQVNEX0NRUl9GTEFHU19GQUlMRkFTVCwgJmNxci0+ZmxhZ3MpOwogCWNxci0+c3RhcnRkZXYgPSBtZW1kZXY7CiAJY3FyLT5tZW1kZXYgPSBtZW1kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggNDlmOWQyMi4uMmU2MGQ1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtMTcwMCw3ICsxNzAwLDcgQEAKIAkJCXJlY2lkKys7CiAJCX0KIAl9Ci0JaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUKQorCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJlcSkpCiAJCXNldF9iaXQoREFTRF9DUVJfRkxBR1NfRkFJTEZBU1QsICZjcXItPmZsYWdzKTsKIAljcXItPnN0YXJ0ZGV2ID0gc3RhcnRkZXY7CiAJY3FyLT5tZW1kZXYgPSBzdGFydGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKaW5kZXggOTNkOWI2NC4uN2Q0NDJhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKQEAgLTM1NSw3ICszNTUsNyBAQAogCQkJcmVjaWQrKzsKIAkJfQogCX0KLQlpZiAocmVxLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1QpCisJaWYgKGJsa19ub3JldHJ5X3JlcXVlc3QocmVxKSkKIAkJc2V0X2JpdChEQVNEX0NRUl9GTEFHU19GQUlMRkFTVCwgJmNxci0+ZmxhZ3MpOwogCWNxci0+c3RhcnRkZXYgPSBtZW1kZXY7CiAJY3FyLT5tZW1kZXYgPSBtZW1kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKaW5kZXggMTc5MmIyYy4uMGIxNWNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYwpAQCAtMTE2OCwxOSArMTE2OCwxNyBAQAogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKLQlycC0+Y2x0dHlkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoY2xhc3MzMjcwLCAmcnAtPmNkZXYtPmRldiwKLQkJCQkJICAgICBNS0RFVihJQk1fVFRZMzI3MF9NQUpPUiwgcnAtPm1pbm9yKSwKLQkJCQkJICAgICBOVUxMLAotCQkJCQkgICAgICJ0dHklcyIsIGRldl9uYW1lKCZycC0+Y2Rldi0+ZGV2KSk7CisJcnAtPmNsdHR5ZGV2ID0gZGV2aWNlX2NyZWF0ZShjbGFzczMyNzAsICZycC0+Y2Rldi0+ZGV2LAorCQkJCSAgICAgTUtERVYoSUJNX1RUWTMyNzBfTUFKT1IsIHJwLT5taW5vciksIE5VTEwsCisJCQkJICAgICAidHR5JXMiLCBkZXZfbmFtZSgmcnAtPmNkZXYtPmRldikpOwogCWlmIChJU19FUlIocnAtPmNsdHR5ZGV2KSkgewogCQlyYyA9IFBUUl9FUlIocnAtPmNsdHR5ZGV2KTsKIAkJZ290byBvdXRfdHR5ZGV2OwogCX0KIAotCXJwLT5jbHR1YmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShjbGFzczMyNzAsICZycC0+Y2Rldi0+ZGV2LAotCQkJCQkgICAgIE1LREVWKElCTV9GUzMyNzBfTUFKT1IsIHJwLT5taW5vciksCi0JCQkJCSAgICAgTlVMTCwKLQkJCQkJICAgICAidHViJXMiLCBkZXZfbmFtZSgmcnAtPmNkZXYtPmRldikpOworCXJwLT5jbHR1YmRldiA9IGRldmljZV9jcmVhdGUoY2xhc3MzMjcwLCAmcnAtPmNkZXYtPmRldiwKKwkJCQkgICAgIE1LREVWKElCTV9GUzMyNzBfTUFKT1IsIHJwLT5taW5vciksIE5VTEwsCisJCQkJICAgICAidHViJXMiLCBkZXZfbmFtZSgmcnAtPmNkZXYtPmRldikpOwogCWlmICghSVNfRVJSKHJwLT5jbHR1YmRldikpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKaW5kZXggMTJjMmE1YS4uZGRjOTE0Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2xhc3MuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKQEAgLTY5LDkgKzY5LDkgQEAKIAlpZiAocmMpCiAJCWdvdG8gZmFpbF93aXRoX2NkZXY7CiAKLQl0Y2QtPmNsYXNzX2RldmljZSA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh0YXBlX2NsYXNzLCBkZXZpY2UsCi0JCQkJCQkgIHRjZC0+Y2hhcl9kZXZpY2UtPmRldiwKLQkJCQkJCSAgTlVMTCwgIiVzIiwgdGNkLT5kZXZpY2VfbmFtZSk7CisJdGNkLT5jbGFzc19kZXZpY2UgPSBkZXZpY2VfY3JlYXRlKHRhcGVfY2xhc3MsIGRldmljZSwKKwkJCQkJICB0Y2QtPmNoYXJfZGV2aWNlLT5kZXYsIE5VTEwsCisJCQkJCSAgIiVzIiwgdGNkLT5kZXZpY2VfbmFtZSk7CiAJcmMgPSBJU19FUlIodGNkLT5jbGFzc19kZXZpY2UpID8gUFRSX0VSUih0Y2QtPmNsYXNzX2RldmljZSkgOiAwOwogCWlmIChyYykKIAkJZ290byBmYWlsX3dpdGhfY2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jCmluZGV4IDQyMTczY2MuLjI0NzYyNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdm1sb2dyZHIuYwpAQCAtNzQ3LDEwICs3NDcsMTAgQEAKIAkJZGV2aWNlX3VucmVnaXN0ZXIoZGV2KTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JcHJpdi0+Y2xhc3NfZGV2aWNlID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHZtbG9ncmRyX2NsYXNzLCBkZXYsCi0JCQkJCQkgICBNS0RFVih2bWxvZ3Jkcl9tYWpvciwKLQkJCQkJCQkgcHJpdi0+bWlub3JfbnVtKSwKLQkJCQkJCSAgIHByaXYsICIlcyIsIGRldl9uYW1lKGRldikpOworCXByaXYtPmNsYXNzX2RldmljZSA9IGRldmljZV9jcmVhdGUodm1sb2dyZHJfY2xhc3MsIGRldiwKKwkJCQkJICAgTUtERVYodm1sb2dyZHJfbWFqb3IsCisJCQkJCQkgcHJpdi0+bWlub3JfbnVtKSwKKwkJCQkJICAgcHJpdiwgIiVzIiwgZGV2X25hbWUoZGV2KSk7CiAJaWYgKElTX0VSUihwcml2LT5jbGFzc19kZXZpY2UpKSB7CiAJCXJldCA9IFBUUl9FUlIocHJpdi0+Y2xhc3NfZGV2aWNlKTsKIAkJcHJpdi0+Y2xhc3NfZGV2aWNlPU5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMKaW5kZXggNmZkZmE1ZC4uOTAyMGViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYwpAQCAtODk2LDkgKzg5Niw4IEBACiAJCWdvdG8gZmFpbF9mcmVlX2NkZXY7CiAJfQogCi0JdXJkLT5kZXZpY2UgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodm11cl9jbGFzcywgTlVMTCwKLQkJCQkJICAgIHVyZC0+Y2hhcl9kZXZpY2UtPmRldiwgTlVMTCwKLQkJCQkJICAgICIlcyIsIG5vZGVfaWQpOworCXVyZC0+ZGV2aWNlID0gZGV2aWNlX2NyZWF0ZSh2bXVyX2NsYXNzLCBOVUxMLCB1cmQtPmNoYXJfZGV2aWNlLT5kZXYsCisJCQkJICAgIE5VTEwsICIlcyIsIG5vZGVfaWQpOwogCWlmIChJU19FUlIodXJkLT5kZXZpY2UpKSB7CiAJCXJjID0gUFRSX0VSUih1cmQtPmRldmljZSk7CiAJCVRSQUNFKCJ1cl9zZXRfb25saW5lOiBkZXZpY2VfY3JlYXRlIHJjPSVkXG4iLCByYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCmluZGV4IDhmODNmYzkuLmY1ZTYxODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCkBAIC0yOTEzLDcgKzI5MTMsNyBAQAogCWlmIChyZXQgIT0gMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiY2xhdzogY2N3X2RldmljZV9zZXRfb25saW5lICVzIFdSSVRFIGZhaWxlZCAiCi0JCSAgICAgICAid2l0aCByZXQgPSAlZFxuIiwgZGV2X25hbWUoJmNnZGV2LT5jZGV2W1dSSVRFXS0+ZGV2KQorCQkgICAgICAgIndpdGggcmV0ID0gJWRcbiIsIGRldl9uYW1lKCZjZ2Rldi0+Y2RldltXUklURV0tPmRldiksCiAJCSAgICAgICByZXQpOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMKaW5kZXggY2JlNDcwNC4uMTlmNWQ1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYwpAQCAtMTY3Myw3ICsxNjczLDcgQEAKIAogZG9uZToKIAlpZiAocmMpIHsKLQkJY3RjbV9wcl9pbmZvKCJjdGNtcGMJICAgOiAgJXMoKSBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWN0Y21fcHJfaW5mbygiY3RjbXBjCSAgIDogICVzKCkgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXByaXYtPnhpZC0+eGlkMl9mbGFnMiA9IDB4NDA7CiAJCWdycC0+c2F2ZWRfeGlkMi0+eGlkMl9mbGFnMiA9IDB4NDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKaW5kZXggOGExMzA3MS4uOWNlNGM3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCkBAIC01ODMsNiArNTgzLDggQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgICAgIGlzc3VlZDsgICAgICAgICAvKiByZXF1ZXN0IHNlbnQgdGltZSAoU1RDSykgKi8KIAlzdHJ1Y3QgemZjcF91bml0ICAgICAgICp1bml0OwogCXZvaWQJCQkoKmhhbmRsZXIpKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CisJdTE2CQkJcWRpb19vdXRiX3VzYWdlOy8qIHVzYWdlIG9mIG91dGJvdW5kIHF1ZXVlICovCisJdTE2CQkJcWRpb19pbmJfdXNhZ2U7CS8qIHVzYWdlIG9mIGluYm91bmQgcXVldWUgKi8KIH07CiAKIC8qIGRyaXZlciBkYXRhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCA3MzkzNTZhLi41YWUxZDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTYsNiArNiw3IEBACiAgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDgKICAqLwogCisjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+CiAjaW5jbHVkZSAiemZjcF9leHQuaCIKIAogc3RhdGljIHZvaWQgemZjcF9mc2ZfcmVxdWVzdF90aW1lb3V0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtNzc3LDYgKzc3OCw3IEBACiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmYWRhcHRlci0+cmVxX2xpc3RbaWR4XSk7CiAJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOwogCisJcmVxLT5xZGlvX291dGJfdXNhZ2UgPSBhdG9taWNfcmVhZCgmcmVxX3EtPmNvdW50KTsKIAlyZXEtPmlzc3VlZCA9IGdldF9jbG9jaygpOwogCWlmICh6ZmNwX3FkaW9fc2VuZChyZXEpKSB7CiAJCS8qIFF1ZXVlcyBhcmUgZG93bi4uLi4uICovCkBAIC0yMDgyLDYgKzIwODQsMzYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1bml0LT5sYXRlbmNpZXMubG9jaywgZmxhZ3MpOwogfQogCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UKK3N0YXRpYyB2b2lkIHpmY3BfZnNmX3RyYWNlX2xhdGVuY3koc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3sKKwlzdHJ1Y3QgZnNmX3F1YWxfbGF0ZW5jeV9pbmZvICpsYXRfaW5mOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZnNmX3JlcS0+ZGF0YTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxID0gc2NzaV9jbW5kLT5yZXF1ZXN0OworCXN0cnVjdCB6ZmNwX2Jsa19kcnZfZGF0YSB0cmFjZTsKKwlpbnQgdGlja3MgPSBmc2ZfcmVxLT5hZGFwdGVyLT50aW1lcl90aWNrczsKKworCXRyYWNlLmZsYWdzID0gMDsKKwl0cmFjZS5tYWdpYyA9IFpGQ1BfQkxLX0RSVl9EQVRBX01BR0lDOworCWlmIChmc2ZfcmVxLT5hZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfTUVBU1VSRU1FTlRfREFUQSkgeworCQl0cmFjZS5mbGFncyB8PSBaRkNQX0JMS19MQVRfVkFMSUQ7CisJCWxhdF9pbmYgPSAmZnNmX3JlcS0+cXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzX3F1YWwubGF0ZW5jeV9pbmZvOworCQl0cmFjZS5jaGFubmVsX2xhdCA9IGxhdF9pbmYtPmNoYW5uZWxfbGF0ICogdGlja3M7CisJCXRyYWNlLmZhYnJpY19sYXQgPSBsYXRfaW5mLT5mYWJyaWNfbGF0ICogdGlja3M7CisJfQorCWlmIChmc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1IpCisJCXRyYWNlLmZsYWdzIHw9IFpGQ1BfQkxLX1JFUV9FUlJPUjsKKwl0cmFjZS5pbmJfdXNhZ2UgPSBmc2ZfcmVxLT5xZGlvX2luYl91c2FnZTsKKwl0cmFjZS5vdXRiX3VzYWdlID0gZnNmX3JlcS0+cWRpb19vdXRiX3VzYWdlOworCisJYmxrX2FkZF9kcml2ZXJfZGF0YShyZXEtPnEsIHJlcSwgJnRyYWNlLCBzaXplb2YodHJhY2UpKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgemZjcF9mc2ZfdHJhY2VfbGF0ZW5jeShzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQoreworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFza19oYW5kbGVyKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCA9IHJlcS0+ZGF0YTsKQEAgLTIxMTQsNiArMjE0Niw4IEBACiAJaWYgKHJlcS0+YWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX01FQVNVUkVNRU5UX0RBVEEpCiAJCXpmY3BfZnNmX3JlcV9sYXRlbmN5KHJlcSk7CiAKKwl6ZmNwX2ZzZl90cmFjZV9sYXRlbmN5KHJlcSk7CisKIAlpZiAodW5saWtlbHkoZmNwX3JzcF9pdS0+dmFsaWRpdHkuYml0cy5mY3BfcnNwX2xlbl92YWxpZCkpIHsKIAkJaWYgKGZjcF9yc3BfaW5mb1szXSA9PSBSU1BfQ09ERV9HT09EKQogCQkJc2V0X2hvc3RfYnl0ZShzY3BudCwgRElEX09LKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oCmluZGV4IGZkM2E4ODcuLmZhMmEzMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaApAQCAtNDM5LDQgKzQzOSwxNiBAQAogCXU4IGxvZ1tGU0ZfUVRDQl9MT0dfU0laRV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IHpmY3BfYmxrX2Rydl9kYXRhIHsKKyNkZWZpbmUgWkZDUF9CTEtfRFJWX0RBVEFfTUFHSUMJCQkweDEKKwl1MzIgbWFnaWM7CisjZGVmaW5lIFpGQ1BfQkxLX0xBVF9WQUxJRAkJCTB4MQorI2RlZmluZSBaRkNQX0JMS19SRVFfRVJST1IJCQkweDIKKwl1MTYgZmxhZ3M7CisJdTggaW5iX3VzYWdlOworCXU4IG91dGJfdXNhZ2U7CisJdTY0IGNoYW5uZWxfbGF0OworCXU2NCBmYWJyaWNfbGF0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKICNlbmRpZgkJCQkvKiBGU0ZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwppbmRleCAzZTA1MDgwLi42NjQ3NTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwpAQCAtMTE1LDYgKzExNSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJZnNmX3JlcS0+c2JhbF9yZXNwb25zZSA9IHNiYWxfaWR4OworCWZzZl9yZXEtPnFkaW9faW5iX3VzYWdlID0gYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJlc3BfcS5jb3VudCk7CiAJemZjcF9mc2ZfcmVxX2NvbXBsZXRlKGZzZl9yZXEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCmluZGV4IGQzYjIxMWEuLjQwM2VjYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCkBAIC0xNjQwLDYgKzE2NDAsNyBAQAogCXRyaXN0YXRlICJBdGFyaSBuYXRpdmUgU0NTSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVRBUkkgJiYgU0NTSQogCXNlbGVjdCBTQ1NJX1NQSV9BVFRSUworCXNlbGVjdCBOVlJBTQogCS0tLWhlbHAtLS0KIAkgIElmIHlvdSBoYXZlIGFuIEF0YXJpIHdpdGggYnVpbHQtaW4gTkNSNTM4MCBTQ1NJIGNvbnRyb2xsZXIgKFRULAogCSAgRmFsY29uLCAuLi4pIHNheSBZIHRvIGdldCBpdCBzdXBwb3J0ZWQuIE9mIGNvdXJzZSBhbHNvLCBpZiB5b3UgaGF2ZQpAQCAtMTY3MCwxNCArMTY3MSw2IEBACiAJICBib290IHByb2Nlc3MgZnJhY3Rpb25hbGx5IGxvbmdlciBidXQgbWF5IGFzc2lzdCByZWNvdmVyeSBmcm9tIGVycm9ycwogCSAgdGhhdCBsZWF2ZSB0aGUgZGV2aWNlcyB3aXRoIFNDU0kgb3BlcmF0aW9ucyBwYXJ0d2F5IGNvbXBsZXRlZC4KIAotY29uZmlnIFRUX0RNQV9FTVVMCi0JYm9vbCAiSGFkZXMgU0NTSSBETUEgZW11bGF0b3IiCi0JZGVwZW5kcyBvbiBBVEFSSV9TQ1NJICYmIEhBREVTCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBjb2RlIHdoaWNoIGVtdWxhdGVzIHRoZSBUVCBTQ1NJIERNQSBjaGlwIG9uIHRoZQotCSAgSGFkZXMuIFRoaXMgaW5jcmVhc2VzIHRoZSBTQ1NJIHRyYW5zZmVyIHJhdGVzIGF0IGxlYXN0IHRlbiB0aW1lcwotCSAgY29tcGFyZWQgdG8gUElPIHRyYW5zZmVycy4KLQogY29uZmlnIE1BQ19TQ1NJCiAJYm9vbCAiTWFjaW50b3NoIE5DUjUzODAgU0NTSSIKIAlkZXBlbmRzIG9uIE1BQyAmJiBTQ1NJPXkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMgYi9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCmluZGV4IGI1YTg2OGQuLjFlNTQ3OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL2FoYTE1MnguYwpAQCAtMzM3LDcgKzMzNyw3IEBACiAjZWxzZQogI2RlZmluZSBJUlFfTUlOIDkKICNpZiBkZWZpbmVkKF9fUFBDKQotI2RlZmluZSBJUlFfTUFYIChOUl9JUlFTLTEpCisjZGVmaW5lIElSUV9NQVggKG5yX2lycXMtMSkKICNlbHNlCiAjZGVmaW5lIElSUV9NQVggMTIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jCmluZGV4IDY5ZjgzNDYuLjU4NzdmMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMKQEAgLTE4OSw3ICsxODksNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJtdV9yZWFkIiwKIAkJLm1vZGUgPSBTX0lSVVNSICwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkuc2l6ZSA9IDEwMzIsCiAJLnJlYWQgPSBhcmNtc3Jfc3lzZnNfaW9wX21lc3NhZ2VfcmVhZCwKQEAgLTE5OSw3ICsxOTgsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJtdV93cml0ZSIsCiAJCS5tb2RlID0gU19JV1VTUiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkuc2l6ZSA9IDEwMzIsCiAJLndyaXRlID0gYXJjbXNyX3N5c2ZzX2lvcF9tZXNzYWdlX3dyaXRlLApAQCAtMjA5LDcgKzIwNyw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gIm11X2NsZWFyIiwKIAkJLm1vZGUgPSBTX0lXVVNSLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gMSwKIAkud3JpdGUgPSBhcmNtc3Jfc3lzZnNfaW9wX21lc3NhZ2VfY2xlYXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfZG1hX2VtdWwuYyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9kbWFfZW11bC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGM3MTBlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9kbWFfZW11bC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDY4ICswLDAgQEAKLS8qCi0gKiBhdGFyaV9kbWFfZW11bC5jIC0tIFRUIFNDU0kgRE1BIGVtdWxhdG9yIGZvciB0aGUgSGFkZXMuCi0gKgotICogQ29weXJpZ2h0IDE5OTcgV291dCBLbGFyZW4gPFcuS2xhcmVuQGludGVyLm5sLm5ldD4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogVGhpcyBjb2RlIHdhcyB3cml0dGVuIHVzaW5nIHRoZSBIYWRlcyBUT1Mgc291cmNlIGNvZGUgYXMgYQotICogcmVmZXJlbmNlLiBUaGlzIHNvdXJjZSBjb2RlIGNhbiBiZSBmb3VuZCBvbiB0aGUgaG9tZSBwYWdlCi0gKiBvZiBNZWR1c2EgQ29tcHV0ZXIgU3lzdGVtcy4KLSAqCi0gKiBWZXJzaW9uIDAuMSwgMTk5Ny0wOS0yNC4KLSAqIAotICogVGhpcyBjb2RlIHNob3VsZCBiZSBjb25zaWRlcmVkIGV4cGVyaW1lbnRhbC4gSXQgaGFzIG9ubHkgYmVlbgotICogdGVzdGVkIG9uIGEgSGFkZXMgd2l0aCBhIDY4MDYwLiBJdCBtaWdodCBub3Qgd29yayBvbiBhIEhhZGVzCi0gKiB3aXRoIGEgNjgwNDAuIE1ha2UgYmFja3VwcyBvZiB5b3VyIGhhcmQgZHJpdmVzIGJlZm9yZSB1c2luZwotICogdGhpcyBjb2RlLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNkZWZpbmUgaGFkZXNfZG1hX2N0cmwJCSgqKHVuc2lnbmVkIGNoYXIgKikgMHhmZmZmODcxNykKLSNkZWZpbmUgaGFkZXNfcHNkbV9yZWcJCSgqKHVuc2lnbmVkIGNoYXIgKikgMHhmZmZmODc0MSkKLQotI2RlZmluZSBUUkFOU0ZFUl9TSVpFCQkxNgotCi1zdHJ1Y3QgbTY4MDQwX2ZyYW1lIHsKLQl1bnNpZ25lZCBsb25nICBlZmZhZGRyOyAgLyogZWZmZWN0aXZlIGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBzc3c7ICAgICAgLyogc3BlY2lhbCBzdGF0dXMgd29yZCAqLwotCXVuc2lnbmVkIHNob3J0IHdiM3M7ICAgICAvKiB3cml0ZSBiYWNrIDMgc3RhdHVzICovCi0JdW5zaWduZWQgc2hvcnQgd2IyczsgICAgIC8qIHdyaXRlIGJhY2sgMiBzdGF0dXMgKi8KLQl1bnNpZ25lZCBzaG9ydCB3YjFzOyAgICAgLyogd3JpdGUgYmFjayAxIHN0YXR1cyAqLwotCXVuc2lnbmVkIGxvbmcgIGZhZGRyOyAgICAvKiBmYXVsdCBhZGRyZXNzICovCi0JdW5zaWduZWQgbG9uZyAgd2IzYTsgICAgIC8qIHdyaXRlIGJhY2sgMyBhZGRyZXNzICovCi0JdW5zaWduZWQgbG9uZyAgd2IzZDsgICAgIC8qIHdyaXRlIGJhY2sgMyBkYXRhICovCi0JdW5zaWduZWQgbG9uZyAgd2IyYTsgICAgIC8qIHdyaXRlIGJhY2sgMiBhZGRyZXNzICovCi0JdW5zaWduZWQgbG9uZyAgd2IyZDsgICAgIC8qIHdyaXRlIGJhY2sgMiBkYXRhICovCi0JdW5zaWduZWQgbG9uZyAgd2IxYTsgICAgIC8qIHdyaXRlIGJhY2sgMSBhZGRyZXNzICovCi0JdW5zaWduZWQgbG9uZyAgd2IxZHBkMDsgIC8qIHdyaXRlIGJhY2sgMSBkYXRhL3B1c2ggZGF0YSAwKi8KLQl1bnNpZ25lZCBsb25nICBwZDE7ICAgICAgLyogcHVzaCBkYXRhIDEqLwotCXVuc2lnbmVkIGxvbmcgIHBkMjsgICAgICAvKiBwdXNoIGRhdGEgMiovCi0JdW5zaWduZWQgbG9uZyAgcGQzOyAgICAgIC8qIHB1c2ggZGF0YSAzKi8KLX07Ci0KLXN0YXRpYyB2b2lkIHdyaXRlYmFjayAodW5zaWduZWQgc2hvcnQgd2JzLCB1bnNpZ25lZCBsb25nIHdiYSwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgd2JkLCB2b2lkICpvbGRfYnVzZXJyKQotewotCW1tX3NlZ21lbnRfdCBmcyA9IGdldF9mcygpOwotCXN0YXRpYyB2b2lkICpzYXZlX2J1c2VycjsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92ZWMubAklJXZiciwlJWEwXG5cdCIKLQkJCSAgICAgICJtb3ZlLmwJJTAsOCglJWEwKVxuXHQiCi0JCQkgICAgICA6Ci0JCQkgICAgICA6ICJyIiAoJiZidXNfZXJyb3IpCi0JCQkgICAgICA6ICJhMCIgKTsKLQotCXNhdmVfYnVzZXJyID0gb2xkX2J1c2VycjsKLQotCXNldF9mcyAoTUFLRV9NTV9TRUcod2JzICYgV0JUTV8wNDApKTsKLQotCXN3aXRjaCAod2JzICYgV0JTSVpfMDQwKSB7Ci0JICAgIGNhc2UgQkFfU0laRV9CWVRFOgotCQlwdXRfdXNlciAod2JkICYgMHhmZiwgKGNoYXIgKil3YmEpOwotCQlicmVhazsKLQkgICAgY2FzZSBCQV9TSVpFX1dPUkQ6Ci0JCXB1dF91c2VyICh3YmQgJiAweGZmZmYsIChzaG9ydCAqKXdiYSk7Ci0JCWJyZWFrOwotCSAgICBjYXNlIEJBX1NJWkVfTE9ORzoKLQkJcHV0X3VzZXIgKHdiZCwgKGludCAqKXdiYSk7Ci0JCWJyZWFrOwotCX0KLQotCXNldF9mcyAoZnMpOwotCXJldHVybjsKLQotYnVzX2Vycm9yOgotCV9fYXNtX18gX192b2xhdGlsZV9fICgiY21wLmwJJTAsMiglJXNwKVxuXHQiCi0JCQkgICAgICAiYmNzLnMJLmp1bXBfb2xkXG5cdCIKLQkJCSAgICAgICJjbXAubAklMSwyKCUlc3ApXG5cdCIKLQkJCSAgICAgICJibHMucwkucmVzdG9yZV9vbGRcbiIKLQkJCSIuanVtcF9vbGQ6XG5cdCIKLQkJCSAgICAgICJtb3ZlLmwJJTIsLSglJXNwKVxuXHQiCi0JCQkgICAgICAicnRzXG4iCi0JCQkiLnJlc3RvcmVfb2xkOlxuXHQiCi0JCQkgICAgICAibW92ZS5sCSUlYTAsLSglJXNwKVxuXHQiCi0JCQkgICAgICAibW92ZWMubAklJXZiciwlJWEwXG5cdCIKLQkJCSAgICAgICJtb3ZlLmwJJTIsOCglJWEwKVxuXHQiCi0JCQkgICAgICAibW92ZS5sCSglJXNwKSssJSVhMFxuXHQiCi0JCQkgICAgICAicnRlXG5cdCIKLQkJCSAgICAgIDoKLQkJCSAgICAgIDogImkiICh3cml0ZWJhY2spLCAiaSIgKCYmYnVzX2Vycm9yKSwKLQkJCSAgICAgICAgIm0iIChzYXZlX2J1c2VycikgKTsKLX0KLQotLyoKLSAqIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcmVzdGRhdGFfcmVnKHVuc2lnbmVkIGNoYXIgKmN1cl9hZGRyKQotICoKLSAqIFNldCB0aGUgcmVzdCBkYXRhIHJlZ2lzdGVyIGlmIG5lY2Vzc2FyeS4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Jlc3RkYXRhX3JlZyh1bnNpZ25lZCBjaGFyICpjdXJfYWRkcikKLXsKLQlpZiAoKChsb25nKSBjdXJfYWRkciAmIH4zKSAhPSAwKQotCQl0dF9zY3NpX2RtYS5kbWFfcmVzdGRhdGEgPQotCQkJKigodW5zaWduZWQgbG9uZyAqKSAoKGxvbmcpIGN1cl9hZGRyICYgfjMpKTsKLX0KLQotLyoKLSAqIHZvaWQgaGFkZXNfZG1hX2VtdWxhdG9yKGludCBpcnEsIHZvaWQgKmR1bW15KQotICogCi0gKiBUaGlzIGNvZGUgZW11bGF0ZXMgVFQgU0NTSSBETUEgb24gdGhlIEhhZGVzLgotICogCi0gKiBOb3RlIHRoZSBmb2xsb3dpbmc6Ci0gKiAKLSAqIDEuIFdoZW4gdGhlcmUgaXMgbm8gYnl0ZSBhdmFpbGFibGUgdG8gcmVhZCBmcm9tIHRoZSBTQ1NJIGJ1cywgb3IKLSAqICAgIHdoZW4gYSBieXRlIGNhbm5vdCB5ZXQgYmV0IHdyaXR0ZW4gdG8gdGhlIFNDU0kgYnVzLCBhIGJ1cwotICogICAgZXJyb3Igb2NjdXJzIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIHRoZSBwc2V1ZG8gRE1BIGRhdGEKLSAqICAgIHJlZ2lzdGVyIChoYWRlc19wc2RtX3JlZykuIFdlIGhhdmUgdG8gY2F0Y2ggdGhpcyBidXMgZXJyb3IKLSAqICAgIGFuZCB0cnkgYWdhaW4gdG8gcmVhZCBvciB3cml0ZSB0aGUgYnl0ZS4gSWYgYWZ0ZXIgc2V2ZXJhbCB0cmllcwotICogICAgd2Ugc3RpbGwgZ2V0IGEgYnVzIGVycm9yLCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXMgbGVmdC4gV2hlbgotICogICAgdGhlIGJ5dGUgY2FuIGJlIHJlYWQgb3Igd3JpdHRlbiwgdGhlIGludGVycnVwdCBoYW5kbGVyIGlzCi0gKiAgICBjYWxsZWQgYWdhaW4uCi0gKiAKLSAqIDIuIFRoZSBTQ1NJIGludGVycnVwdCBtdXN0IGJlIGRpc2FibGVkIGluIHRoaXMgaW50ZXJydXB0IGhhbmRsZXIuCi0gKiAKLSAqIDMuIElmIHdlIHNldCB0aGUgRU9QIHNpZ25hbCwgdGhlIFNDU0kgY29udHJvbGxlciBzdGlsbCBleHBlY3RzIG9uZQotICogICAgYnl0ZSB0byBiZSByZWFkIG9yIHdyaXR0ZW4uIFRoZXJlZm9yZSB0aGUgbGFzdCBieXRlIGlzIHRyYW5zZmVycmVkCi0gKiAgICBzZXBhcmF0ZWx5LCBhZnRlciBzZXR0aW5nIHRoZSBFT1Agc2lnbmFsLgotICogCi0gKiA0LiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgbGVmdCwgdGhlIGFkZHJlc3MgcG9pbnRlciAoc3RhcnRfYWRkcikgaXMKLSAqICAgIGNvbnZlcnRlZCB0byBhIHBoeXNpY2FsIGFkZHJlc3MuIEJlY2F1c2UgaXQgcG9pbnRzIG9uZSBieXRlCi0gKiAgICBmdXJ0aGVyIHRoYW4gdGhlIGxhc3QgdHJhbnNmZXJyZWQgYnl0ZSwgaXQgY2FuIHBvaW50IG91dHNpZGUgdGhlCi0gKiAgICBjdXJyZW50IHBhZ2UuIElmIHZpcnRfdG9fcGh5cygpIGlzIGNhbGxlZCB3aXRoIHRoaXMgYWRkcmVzcyB3ZQotICogICAgbWlnaHQgZ2V0IGFuIGFjY2VzcyBlcnJvci4gVGhlcmVmb3JlIHZpcnRfdG9fcGh5cygpIGlzIGNhbGxlZCB3aXRoCi0gKiAgICBzdGFydF9hZGRyIC0gMSBpZiB0aGUgY291bnQgaGFzIHJlYWNoZWQgemVyby4gVGhlIHJlc3VsdCBpcwotICogICAgaW5jcmVhc2VkIHdpdGggb25lLgotICovCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCBoYWRlc19kbWFfZW11bGF0b3IoaW50IGlycSwgdm9pZCAqZHVtbXkpCi17Ci0JdW5zaWduZWQgbG9uZyBkbWFfYmFzZTsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGRtYV9jbnQgYXNtICgiZDMiKTsKLQlzdGF0aWMgbG9uZyBzYXZlX2J1c2VycjsKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHNhdmVfc3AgYXNtICgiZDQiKTsKLQlyZWdpc3RlciBpbnQgdHJpZXMgYXNtICgiZDUiKTsKLQlyZWdpc3RlciB1bnNpZ25lZCBjaGFyICpzdGFydF9hZGRyIGFzbSAoImEzIiksICplbmRfYWRkciBhc20gKCJhNCIpOwotCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKmVmZl9hZGRyOwotCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKnBzZG1fcmVnOwotCXVuc2lnbmVkIGxvbmcgcmVtOwotCi0JYXRhcmlfZGlzYWJsZV9pcnEoSVJRX1RUX01GUF9TQ1NJKTsKLQotCS8qCi0JICogUmVhZCB0aGUgZG1hIGFkZHJlc3MgYW5kIGNvdW50IHJlZ2lzdGVycy4KLQkgKi8KLQotCWRtYV9iYXNlID0gU0NTSV9ETUFfUkVBRF9QKGRtYV9hZGRyKTsKLQlkbWFfY250ID0gU0NTSV9ETUFfUkVBRF9QKGRtYV9jbnQpOwotCi0JLyoKLQkgKiBDaGVjayBpZiBETUEgaXMgc3RpbGwgZW5hYmxlZC4KLQkgKi8KLQotCWlmICgodHRfc2NzaV9kbWEuZG1hX2N0cmwgJiAyKSA9PSAwKQotCXsKLQkJYXRhcmlfZW5hYmxlX2lycShJUlFfVFRfTUZQX1NDU0kpOwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotCi0JaWYgKGRtYV9jbnQgPT0gMCkKLQl7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiRE1BIGVtdWxhdGlvbjogY291bnQgaXMgemVyby5cbiIpOwotCQl0dF9zY3NpX2RtYS5kbWFfY3RybCAmPSAweGZkOwkvKiBETUEgcmVhZHkuICovCi0JCWF0YXJpX2VuYWJsZV9pcnEoSVJRX1RUX01GUF9TQ1NJKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCS8qCi0JICogSW5zdGFsbCBuZXcgYnVzIGVycm9yIHJvdXRpbmUuCi0JICovCi0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmVjLmwJJSV2YnIsJSVhMFxuXHQiCi0JCQkgICAgICAibW92ZS5sCTgoJSVhMCksJTBcblx0IgotCQkJICAgICAgIm1vdmUubAklMSw4KCUlYTApXG5cdCIKLQkJCSAgICAgIDogIj0mciIgKHNhdmVfYnVzZXJyKQotCQkJICAgICAgOiAiciIgKCYmc2NzaV9idXNfZXJyb3IpCi0JCQkgICAgICA6ICJhMCIgKTsKLQotCWhhZGVzX2RtYV9jdHJsICY9IDB4ZmM7CQkvKiBCdXMgZXJyb3IgYW5kIEVPUCBvZmYuICovCi0KLQkvKgotCSAqIFNhdmUgdGhlIHN0YWNrIHBvaW50ZXIuCi0JICovCi0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmUubAklJXNwLCUwXG5cdCIKLQkJCSAgICAgIDogIj0mciIgKHNhdmVfc3ApICk7Ci0KLQl0cmllcyA9IDEwMDsJCQkvKiBNYXhpbXVtIG51bWJlciBvZiBidXMgZXJyb3JzLiAqLwotCXN0YXJ0X2FkZHIgPSBwaHlzX3RvX3ZpcnQoZG1hX2Jhc2UpOwotCWVuZF9hZGRyID0gc3RhcnRfYWRkciArIGRtYV9jbnQ7Ci0KLXNjc2lfbG9vcDoKLQlkbWFfY250LS07Ci0JcmVtID0gZG1hX2NudCAmIChUUkFOU0ZFUl9TSVpFIC0gMSk7Ci0JZG1hX2NudCAmPSB+KFRSQU5TRkVSX1NJWkUgLSAxKTsKLQlwc2RtX3JlZyA9ICZoYWRlc19wc2RtX3JlZzsKLQotCWlmICh0dF9zY3NpX2RtYS5kbWFfY3RybCAmIDEpCS8qIFJlYWQgb3Igd3JpdGU/ICovCi0JewotCQkvKgotCQkgKiBTQ1NJIHdyaXRlLiBBYm9ydCB3aGVuIGNvdW50IGlzIHplcm8uCi0JCSAqLwotCi0JCXN3aXRjaCAocmVtKQotCQl7Ci0JCWNhc2UgMDoKLQkJCXdoaWxlIChkbWFfY250ID4gMCkKLQkJCXsKLQkJCQlkbWFfY250IC09IFRSQU5TRkVSX1NJWkU7Ci0KLQkJCQkqcHNkbV9yZWcgPSAqc3RhcnRfYWRkcisrOwotCQljYXNlIDE1OgotCQkJCSpwc2RtX3JlZyA9ICpzdGFydF9hZGRyKys7Ci0JCWNhc2UgMTQ6Ci0JCQkJKnBzZG1fcmVnID0gKnN0YXJ0X2FkZHIrKzsKLQkJY2FzZSAxMzoKLQkJCQkqcHNkbV9yZWcgPSAqc3RhcnRfYWRkcisrOwotCQljYXNlIDEyOgotCQkJCSpwc2RtX3JlZyA9ICpzdGFydF9hZGRyKys7Ci0JCWNhc2UgMTE6Ci0JCQkJKnBzZG1fcmVnID0gKnN0YXJ0X2FkZHIrKzsKLQkJY2FzZSAxMDoKLQkJCQkqcHNkbV9yZWcgPSAqc3RhcnRfYWRkcisrOwotCQljYXNlIDk6Ci0JCQkJKnBzZG1fcmVnID0gKnN0YXJ0X2FkZHIrKzsKLQkJY2FzZSA4OgotCQkJCSpwc2RtX3JlZyA9ICpzdGFydF9hZGRyKys7Ci0JCWNhc2UgNzoKLQkJCQkqcHNkbV9yZWcgPSAqc3RhcnRfYWRkcisrOwotCQljYXNlIDY6Ci0JCQkJKnBzZG1fcmVnID0gKnN0YXJ0X2FkZHIrKzsKLQkJY2FzZSA1OgotCQkJCSpwc2RtX3JlZyA9ICpzdGFydF9hZGRyKys7Ci0JCWNhc2UgNDoKLQkJCQkqcHNkbV9yZWcgPSAqc3RhcnRfYWRkcisrOwotCQljYXNlIDM6Ci0JCQkJKnBzZG1fcmVnID0gKnN0YXJ0X2FkZHIrKzsKLQkJY2FzZSAyOgotCQkJCSpwc2RtX3JlZyA9ICpzdGFydF9hZGRyKys7Ci0JCWNhc2UgMToKLQkJCQkqcHNkbV9yZWcgPSAqc3RhcnRfYWRkcisrOwotCQkJfQotCQl9Ci0KLQkJaGFkZXNfZG1hX2N0cmwgfD0gMTsJLyogU2V0IEVPUC4gKi8KLQkJdWRlbGF5KDEwKTsKLQkJKnBzZG1fcmVnID0gKnN0YXJ0X2FkZHIrKzsJLyogRHVtbXkgYnl0ZS4gKi8KLQkJdHRfc2NzaV9kbWEuZG1hX2N0cmwgJj0gMHhmZDsJLyogRE1BIHJlYWR5LiAqLwotCX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBTQ1NJIHJlYWQuIEFib3J0IHdoZW4gY291bnQgaXMgemVyby4KLQkJICovCi0KLQkJc3dpdGNoIChyZW0pCi0JCXsKLQkJY2FzZSAwOgotCQkJd2hpbGUgKGRtYV9jbnQgPiAwKQotCQkJewotCQkJCWRtYV9jbnQgLT0gVFJBTlNGRVJfU0laRTsKLQotCQkJCSpzdGFydF9hZGRyKysgPSAqcHNkbV9yZWc7Ci0JCWNhc2UgMTU6Ci0JCQkJKnN0YXJ0X2FkZHIrKyA9ICpwc2RtX3JlZzsKLQkJY2FzZSAxNDoKLQkJCQkqc3RhcnRfYWRkcisrID0gKnBzZG1fcmVnOwotCQljYXNlIDEzOgotCQkJCSpzdGFydF9hZGRyKysgPSAqcHNkbV9yZWc7Ci0JCWNhc2UgMTI6Ci0JCQkJKnN0YXJ0X2FkZHIrKyA9ICpwc2RtX3JlZzsKLQkJY2FzZSAxMToKLQkJCQkqc3RhcnRfYWRkcisrID0gKnBzZG1fcmVnOwotCQljYXNlIDEwOgotCQkJCSpzdGFydF9hZGRyKysgPSAqcHNkbV9yZWc7Ci0JCWNhc2UgOToKLQkJCQkqc3RhcnRfYWRkcisrID0gKnBzZG1fcmVnOwotCQljYXNlIDg6Ci0JCQkJKnN0YXJ0X2FkZHIrKyA9ICpwc2RtX3JlZzsKLQkJY2FzZSA3OgotCQkJCSpzdGFydF9hZGRyKysgPSAqcHNkbV9yZWc7Ci0JCWNhc2UgNjoKLQkJCQkqc3RhcnRfYWRkcisrID0gKnBzZG1fcmVnOwotCQljYXNlIDU6Ci0JCQkJKnN0YXJ0X2FkZHIrKyA9ICpwc2RtX3JlZzsKLQkJY2FzZSA0OgotCQkJCSpzdGFydF9hZGRyKysgPSAqcHNkbV9yZWc7Ci0JCWNhc2UgMzoKLQkJCQkqc3RhcnRfYWRkcisrID0gKnBzZG1fcmVnOwotCQljYXNlIDI6Ci0JCQkJKnN0YXJ0X2FkZHIrKyA9ICpwc2RtX3JlZzsKLQkJY2FzZSAxOgotCQkJCSpzdGFydF9hZGRyKysgPSAqcHNkbV9yZWc7Ci0JCQl9Ci0JCX0KLQotCQloYWRlc19kbWFfY3RybCB8PSAxOwkvKiBTZXQgRU9QLiAqLwotCQl1ZGVsYXkoMTApOwotCQkqc3RhcnRfYWRkcisrID0gKnBzZG1fcmVnOwotCQl0dF9zY3NpX2RtYS5kbWFfY3RybCAmPSAweGZkOwkvKiBETUEgcmVhZHkuICovCi0KLQkJc2V0X3Jlc3RkYXRhX3JlZyhzdGFydF9hZGRyKTsKLQl9Ci0KLQlpZiAoc3RhcnRfYWRkciAhPSBlbmRfYWRkcikKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiRE1BIGVtdWxhdGlvbjogRkFUQUw6IENvdW50IGlzIG5vdCB6ZXJvIGF0IGVuZCBvZiB0cmFuc2Zlci5cbiIpOwotCi0JZG1hX2NudCA9IGVuZF9hZGRyIC0gc3RhcnRfYWRkcjsKLQotc2NzaV9lbmQ6Ci0JZG1hX2Jhc2UgPSAoZG1hX2NudCA9PSAwKSA/IHZpcnRfdG9fcGh5cyhzdGFydF9hZGRyIC0gMSkgKyAxIDogIAotCQkJCSAgICB2aXJ0X3RvX3BoeXMoc3RhcnRfYWRkcik7Ci0KLQlTQ1NJX0RNQV9XUklURV9QKGRtYV9hZGRyLCBkbWFfYmFzZSk7Ci0JU0NTSV9ETUFfV1JJVEVfUChkbWFfY250LCBkbWFfY250KTsKLQotCS8qCi0JICogUmVzdG9yZSBvbGQgYnVzIGVycm9yIHJvdXRpbmUuCi0JICovCi0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmVjLmwJJSV2YnIsJSVhMFxuXHQiCi0JCQkgICAgICAibW92ZS5sCSUwLDgoJSVhMClcblx0IgotCQkJICAgICAgOgotCQkJICAgICAgOiAiciIgKHNhdmVfYnVzZXJyKQotCQkJICAgICAgOiAiYTAiICk7Ci0KLQlhdGFyaV9lbmFibGVfaXJxKElSUV9UVF9NRlBfU0NTSSk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLXNjc2lfYnVzX2Vycm9yOgotCS8qCi0JICogRmlyc3QgY2hlY2sgaWYgdGhlIGJ1cyBlcnJvciBpcyBjYXVzZWQgYnkgb3VyIGNvZGUuCi0JICogSWYgbm90LCBjYWxsIHRoZSBvcmlnaW5hbCBoYW5kbGVyLgotCSAqLwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJjbXAubAklMCwyKCUlc3ApXG5cdCIKLQkJCSAgICAgICJiY3Mucwkub2xkX3ZlY3RvclxuXHQiCi0JCQkgICAgICAiY21wLmwJJTEsMiglJXNwKVxuXHQiCi0JCQkgICAgICAiYmxzLnMJLnNjc2lfYnVzZXJyXG4iCi0JCQkiLm9sZF92ZWN0b3I6XG5cdCIKLQkJCSAgICAgICJtb3ZlLmwJJTIsLSglJXNwKVxuXHQiCi0JCQkgICAgICAicnRzXG4iCi0JCQkiLnNjc2lfYnVzZXJyOlxuXHQiCi0JCQkgICAgICA6Ci0JCQkgICAgICA6ICJpIiAoJiZzY3NpX2xvb3ApLCAiaSIgKCYmc2NzaV9lbmQpLAotCQkJICAgICAgICAibSIgKHNhdmVfYnVzZXJyKSApOwotCi0JaWYgKENQVV9JU18wNjApCi0JewotCQkvKgotCQkgKiBHZXQgZWZmZWN0aXZlIGFkZHJlc3MgYW5kIHJlc3RvcmUgdGhlIHN0YWNrLgotCQkgKi8KLQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmUubAk4KCUlc3ApLCUwXG5cdCIKLQkJCQkgICAgICAibW92ZS5sCSUxLCUlc3Bcblx0IgotCQkJCSAgICAgIDogIj1hJiIgKGVmZl9hZGRyKQotCQkJCSAgICAgIDogInIiIChzYXZlX3NwKSApOwotCX0KLQllbHNlCi0JewotCQlyZWdpc3RlciBzdHJ1Y3QgbTY4MDQwX2ZyYW1lICpmcmFtZTsKLQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxlYQk4KCUlc3ApLCUwXG5cdCIKLQkJCQkgICAgICA6ICI9YSYiIChmcmFtZSkgKTsKLQotCQlpZiAodHRfc2NzaV9kbWEuZG1hX2N0cmwgJiAxKQotCQl7Ci0JCQkvKgotCQkJICogQnVzIGVycm9yIHdoaWxlIHdyaXRpbmcuCi0JCQkgKi8KLQotCQkJaWYgKGZyYW1lLT53YjNzICYgV0JWXzA0MCkKLQkJCXsKLQkJCQlpZiAoZnJhbWUtPndiM2EgPT0gKGxvbmcpICZoYWRlc19wc2RtX3JlZykKLQkJCQkJc3RhcnRfYWRkci0tOwotCQkJCWVsc2UKLQkJCQkJd3JpdGViYWNrKGZyYW1lLT53YjNzLCBmcmFtZS0+d2IzYSwKLQkJCQkJCSAgZnJhbWUtPndiM2QsICYmc2NzaV9idXNfZXJyb3IpOwotCQkJfQotCi0JCQlpZiAoZnJhbWUtPndiMnMgJiBXQlZfMDQwKQotCQkJewotCQkJCWlmIChmcmFtZS0+d2IyYSA9PSAobG9uZykgJmhhZGVzX3BzZG1fcmVnKQotCQkJCQlzdGFydF9hZGRyLS07Ci0JCQkJZWxzZQotCQkJCQl3cml0ZWJhY2soZnJhbWUtPndiMnMsIGZyYW1lLT53YjJhLAotCQkJCQkJICBmcmFtZS0+d2IyZCwgJiZzY3NpX2J1c19lcnJvcik7Ci0JCQl9Ci0KLQkJCWlmIChmcmFtZS0+d2IxcyAmIFdCVl8wNDApCi0JCQl7Ci0JCQkJaWYgKGZyYW1lLT53YjFhID09IChsb25nKSAmaGFkZXNfcHNkbV9yZWcpCi0JCQkJCXN0YXJ0X2FkZHItLTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBCdXMgZXJyb3Igd2hpbGUgcmVhZGluZy4KLQkJCSAqLwotCi0JCQlpZiAoZnJhbWUtPndiM3MgJiBXQlZfMDQwKQotCQkJCXdyaXRlYmFjayhmcmFtZS0+d2IzcywgZnJhbWUtPndiM2EsCi0JCQkJCSAgZnJhbWUtPndiM2QsICYmc2NzaV9idXNfZXJyb3IpOwotCQl9Ci0KLQkJZWZmX2FkZHIgPSAodW5zaWduZWQgY2hhciAqKSBmcmFtZS0+ZmFkZHI7Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZlLmwJJTAsJSVzcFxuXHQiCi0JCQkJICAgICAgOgotCQkJCSAgICAgIDogInIiIChzYXZlX3NwKSApOwotCX0KLQotCWRtYV9jbnQgPSBlbmRfYWRkciAtIHN0YXJ0X2FkZHI7Ci0KLQlpZiAoZWZmX2FkZHIgPT0gJmhhZGVzX3BzZG1fcmVnKQotCXsKLQkJLyoKLQkJICogQnVzIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIHBzZXVkbwotCQkgKiBETUEgcmVnaXN0ZXIuIFRpbWUgb3V0LgotCQkgKi8KLQotCQl0cmllcy0tOwotCi0JCWlmICh0cmllcyA8PSAwKQotCQl7Ci0JCQlpZiAoKHR0X3Njc2lfZG1hLmRtYV9jdHJsICYgMSkgPT0gMCkJLyogUmVhZCBvciB3cml0ZT8gKi8KLQkJCQlzZXRfcmVzdGRhdGFfcmVnKHN0YXJ0X2FkZHIpOwotCi0JCQlpZiAoZG1hX2NudCA8PSAxKQotCQkJCXByaW50ayhLRVJOX0NSSVQgIkRNQSBlbXVsYXRpb246IEZhdGFsICIKLQkJCQkgICAgICAgImVycm9yIHdoaWxlICVzIHRoZSBsYXN0IGJ5dGUuXG4iLAotCQkJCSAgICAgICAodHRfc2NzaV9kbWEuZG1hX2N0cmwgJiAxKQotCQkJCSAgICAgICA/ICJ3cml0aW5nIiA6ICJyZWFkaW5nIik7Ci0KLQkJCWdvdG8gc2NzaV9lbmQ7Ci0JCX0KLQkJZWxzZQotCQkJZ290byBzY3NpX2xvb3A7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIEJ1cyBlcnJvciBkdXJpbmcgcHNldWRvIERNQSB0cmFuc2Zlci4KLQkJICogVGVybWluYXRlIHRoZSBETUEgdHJhbnNmZXIuCi0JCSAqLwotCi0JCWhhZGVzX2RtYV9jdHJsIHw9IDM7CS8qIFNldCBFT1AgYW5kIGJ1cyBlcnJvci4gKi8KLQkJaWYgKCh0dF9zY3NpX2RtYS5kbWFfY3RybCAmIDEpID09IDApCS8qIFJlYWQgb3Igd3JpdGU/ICovCi0JCQlzZXRfcmVzdGRhdGFfcmVnKHN0YXJ0X2FkZHIpOwotCQlnb3RvIHNjc2lfZW5kOwotCX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCmluZGV4IGY1NzMyZDguLjIxZmUwN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwpAQCAtMjQ5LDEwICsyNDksNiBAQAogbW9kdWxlX3BhcmFtKHNldHVwX2hvc3RpZCwgaW50LCAwKTsKIAogCi0jaWYgZGVmaW5lZChDT05GSUdfVFRfRE1BX0VNVUwpCi0jaW5jbHVkZSAiYXRhcmlfZG1hX2VtdWwuYyIKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChSRUFMX0RNQSkKIAogc3RhdGljIGludCBzY3NpX2RtYV9pc19pZ25vcmVkX2J1c2Vycih1bnNpZ25lZCBjaGFyIGRtYV9zdGF0KQpAQCAtNjk1LDIxICs2OTEsOCBAQAogI2lmZGVmIFJFQUxfRE1BCiAJCXR0X3Njc2lfZG1hLmRtYV9jdHJsID0gMDsKIAkJYXRhcmlfZG1hX3Jlc2lkdWFsID0gMDsKLSNpZmRlZiBDT05GSUdfVFRfRE1BX0VNVUwKLQkJaWYgKE1BQ0hfSVNfSEFERVMpIHsKLQkJCWlmIChyZXF1ZXN0X2lycShJUlFfQVVUT18yLCBoYWRlc19kbWFfZW11bGF0b3IsCi0JCQkJCSBJUlFfVFlQRV9QUklPLCAiSGFkZXMgRE1BIGVtdWxhdG9yIiwKLQkJCQkJIGhhZGVzX2RtYV9lbXVsYXRvcikpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgImF0YXJpX3Njc2lfZGV0ZWN0OiBjYW5ub3QgYWxsb2NhdGUgaXJxICVkLCBhYm9ydGluZyAoTUFDSF9JU19IQURFUykiLElSUV9BVVRPXzIpOwotCQkJCWZyZWVfaXJxKElSUV9UVF9NRlBfU0NTSSwgaW5zdGFuY2UpOwotCQkJCXNjc2lfdW5yZWdpc3RlcihhdGFyaV9zY3NpX2hvc3QpOwotCQkJCWF0YXJpX3N0cmFtX2ZyZWUoYXRhcmlfZG1hX2J1ZmZlcik7Ci0JCQkJYXRhcmlfZG1hX2J1ZmZlciA9IDA7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQlpZiAoTUFDSF9JU19NRURVU0EgfHwgTUFDSF9JU19IQURFUykgeworCisJCWlmIChNQUNIX0lTX01FRFVTQSkgewogCQkJLyogV2hpbGUgdGhlIHJlYWQgb3ZlcnJ1bnMgKGRlc2NyaWJlZCBieSBEcmV3IEVja2hhcmR0IGluCiAJCQkgKiBOQ1I1MzgwLmMpIG5ldmVyIGhhcHBlbmVkIG9uIFRUcywgdGhleSBkbyBpbiBmYWN0IG9uIHRoZSBNZWR1c2EKIAkJCSAqIChUaGlzIHdhcyB0aGUgY2F1c2Ugd2h5IFNDU0kgZGlkbid0IHdvcmsgcmlnaHQgZm9yIHNvIGxvbmcKQEAgLTEwMDcsMTEgKzk5MCw3IEBACiAJCQkJCVNjc2lfQ21uZCAqY21kLCBpbnQgd3JpdGVfZmxhZykKIHsKIAl1bnNpZ25lZCBsb25nCXBvc3NpYmxlX2xlbiwgbGltaXQ7Ci0jaWZuZGVmIENPTkZJR19UVF9ETUFfRU1VTAotCWlmIChNQUNIX0lTX0hBREVTKQotCQkvKiBIYWRlcyBoYXMgbm8gU0NTSSBETUEgYXQgYWxsIDotKCBBbHdheXMgZm9yY2UgdXNlIG9mIFBJTyAqLwotCQlyZXR1cm4gMDsKLSNlbmRpZgorCiAJaWYgKElTX0FfVFQoKSkKIAkJLyogVFQgU0NTSSBETUEgY2FuIHRyYW5zZmVyIGFyYml0cmFyeSAjYnl0ZXMgKi8KIAkJcmV0dXJuIHdhbnRlZF9sZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY2guYyBiL2RyaXZlcnMvc2NzaS9jaC5jCmluZGV4IDNjMjU3ZmUuLjg4ZWNmOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jaC5jCkBAIC05MTQsOSArOTE0LDkgQEAKIAljaC0+bWlub3IgPSBtaW5vcjsKIAlzcHJpbnRmKGNoLT5uYW1lLCJjaCVkIixjaC0+bWlub3IpOwogCi0JY2xhc3NfZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGNoX3N5c2ZzX2NsYXNzLCBkZXYsCi0JCQkJCSAgTUtERVYoU0NTSV9DSEFOR0VSX01BSk9SLCBjaC0+bWlub3IpLAotCQkJCQkgIGNoLCAicyVzIiwgY2gtPm5hbWUpOworCWNsYXNzX2RldiA9IGRldmljZV9jcmVhdGUoY2hfc3lzZnNfY2xhc3MsIGRldiwKKwkJCQkgIE1LREVWKFNDU0lfQ0hBTkdFUl9NQUpPUiwgY2gtPm1pbm9yKSwgY2gsCisJCQkJICAicyVzIiwgY2gtPm5hbWUpOwogCWlmIChJU19FUlIoY2xhc3NfZGV2KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjaCVkOiBkZXZpY2VfY3JlYXRlIGZhaWxlZFxuIiwKIAkJICAgICAgIGNoLT5taW5vcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKaW5kZXggOTc4NWQ3My4uNDAwM2RlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYwpAQCAtMTM2NCw3ICsxMzY0LDggQEAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaG9zdGJ5dGVfdGFibGVbXT17CiAiRElEX09LIiwgIkRJRF9OT19DT05ORUNUIiwgIkRJRF9CVVNfQlVTWSIsICJESURfVElNRV9PVVQiLCAiRElEX0JBRF9UQVJHRVQiLAogIkRJRF9BQk9SVCIsICJESURfUEFSSVRZIiwgIkRJRF9FUlJPUiIsICJESURfUkVTRVQiLCAiRElEX0JBRF9JTlRSIiwKLSJESURfUEFTU1RIUk9VR0giLCAiRElEX1NPRlRfRVJST1IiLCAiRElEX0lNTV9SRVRSWSIsICJESURfUkVRVUVVRSJ9OworIkRJRF9QQVNTVEhST1VHSCIsICJESURfU09GVF9FUlJPUiIsICJESURfSU1NX1JFVFJZIiwgIkRJRF9SRVFVRVVFIiwKKyJESURfVFJBTlNQT1JUX0RJU1JVUFRFRCIsICJESURfVFJBTlNQT1JUX0ZBSUxGQVNUIiB9OwogI2RlZmluZSBOVU1fSE9TVEJZVEVfU1RSUyBBUlJBWV9TSVpFKGhvc3RieXRlX3RhYmxlKQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRyaXZlcmJ5dGVfdGFibGVbXT17CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKaW5kZXggNzA4ZTQ3NS4uZTM1NmI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYwpAQCAtMTA5LDcgKzEwOSw4IEBACiAJfQogCiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7Ci0JcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1QgfCBSRVFfTk9NRVJHRTsKKwlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9ERVYgfCBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUIHwKKwkJCSBSRVFfRkFJTEZBU1RfRFJJVkVSOwogCXJxLT5yZXRyaWVzID0gQUxVQV9GQUlMT1ZFUl9SRVRSSUVTOwogCXJxLT50aW1lb3V0ID0gQUxVQV9GQUlMT1ZFUl9USU1FT1VUOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2VtYy5jCmluZGV4IDhmNDU1NzAuLjBlNTcyZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2VtYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2VtYy5jCkBAIC0zMDMsNyArMzAzLDggQEAKIAogCXJxLT5jbWRbNF0gPSBsZW47CiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7Ci0JcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1Q7CisJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkgUkVRX0ZBSUxGQVNUX0RSSVZFUjsKIAlycS0+dGltZW91dCA9IENMQVJJSU9OX1RJTUVPVVQ7CiAJcnEtPnJldHJpZXMgPSBDTEFSSUlPTl9SRVRSSUVTOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9ocF9zdy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfaHBfc3cuYwppbmRleCA1ZTkzYzg4Li45YWVjNGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9ocF9zdy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2hwX3N3LmMKQEAgLTExMiw3ICsxMTIsOCBAQAogCQlyZXR1cm4gU0NTSV9ESF9SRVNfVEVNUF9VTkFWQUlMOwogCiAJcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwotCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVDsKKwlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkgIFJFUV9GQUlMRkFTVF9EUklWRVI7CiAJcmVxLT5jbWRfbGVuID0gQ09NTUFORF9TSVpFKFRFU1RfVU5JVF9SRUFEWSk7CiAJcmVxLT5jbWRbMF0gPSBURVNUX1VOSVRfUkVBRFk7CiAJcmVxLT50aW1lb3V0ID0gSFBfU1dfVElNRU9VVDsKQEAgLTIwNCw3ICsyMDUsOCBAQAogCQlyZXR1cm4gU0NTSV9ESF9SRVNfVEVNUF9VTkFWQUlMOwogCiAJcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwotCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVDsKKwlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkgIFJFUV9GQUlMRkFTVF9EUklWRVI7CiAJcmVxLT5jbWRfbGVuID0gQ09NTUFORF9TSVpFKFNUQVJUX1NUT1ApOwogCXJlcS0+Y21kWzBdID0gU1RBUlRfU1RPUDsKIAlyZXEtPmNtZFs0XSA9IDE7CS8qIFN0YXJ0IHNwaW4gY3ljbGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwppbmRleCA1MGJmOTVmLi5hNDNjM2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCkBAIC0yMjYsNyArMjI2LDggQEAKIAl9CiAKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKLQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVCB8IFJFUV9OT01FUkdFOworCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfAorCQkJIFJFUV9GQUlMRkFTVF9EUklWRVI7CiAJcnEtPnJldHJpZXMgPSBSREFDX1JFVFJJRVM7CiAJcnEtPnRpbWVvdXQgPSBSREFDX1RJTUVPVVQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCmluZGV4IDFmZTA5MDEuLjhhYmE0ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKKysrIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwpAQCAtMjcxLDcgKzI3MSw3IEBACiAJCXBIYmEtPmluaXRpYWxpemVkID0gVFJVRTsKIAkJcEhiYS0+c3RhdGUgJj0gfkRQVElfU1RBVEVfUkVTRVQ7CiAJCWlmIChhZHB0X3N5c2ZzX2NsYXNzKSB7Ci0JCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoYWRwdF9zeXNmc19jbGFzcywKKwkJCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRldmljZV9jcmVhdGUoYWRwdF9zeXNmc19jbGFzcywKIAkJCQlOVUxMLCBNS0RFVihEUFRJX0kyT19NQUpPUiwgcEhiYS0+dW5pdCksIE5VTEwsCiAJCQkJImRwdGklZCIsIHBIYmEtPnVuaXQpOwogCQkJaWYgKElTX0VSUihkZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKaW5kZXggNGUwYjdjOC4uNzY1MDcwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYwpAQCAtMjAzMSw4ICsyMDMxLDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJfSBlbHNlCiAJCWlibXZmY19pc3N1ZV9mY19ob3N0X2xpcChzaG9zdCk7Ci0KLQlzY3NpX3RhcmdldF91bmJsb2NrKCZycG9ydC0+ZGV2KTsKIAlMRUFWRTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwppbmRleCA5MDIxMmFjLi5hZmM5NmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwpAQCAtODIsNyArODIsNiBAQAogCXN0cnVjdCBnZW5kaXNrCQkqZGlzazsKIAlzdHJ1Y3QgU2NzaV9Ib3N0CSpob3N0OwogCi0Jc3RydWN0IGlkZV9hdGFwaV9wYyAqcGM7CQkvKiBDdXJyZW50IHBhY2tldCBjb21tYW5kICovCiAJdW5zaWduZWQgbG9uZyB0cmFuc2Zvcm07CQkvKiBTQ1NJIGNtZCB0cmFuc2xhdGlvbiBsYXllciAqLwogCXVuc2lnbmVkIGxvbmcgbG9nOwkJCS8qIGxvZyBmbGFncyAqLwogfSBpZGVzY3NpX3Njc2lfdDsKQEAgLTEzNywxMCArMTM2LDEwIEBACiAKIHN0YXRpYyBpbnQgaWRlc2NzaV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqLCBpbnQsIGludCk7CiAKLXN0YXRpYyB2b2lkIGlkZV9zY3NpX2NhbGxiYWNrKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGlkZV9zY3NpX2NhbGxiYWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRzYykKIHsKIAlpZGVzY3NpX3Njc2lfdCAqc2NzaSA9IGRyaXZlX3RvX2lkZXNjc2koZHJpdmUpOwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gc2NzaS0+cGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBkcml2ZS0+cGM7CiAKIAlpZiAocGMtPmZsYWdzICYgUENfRkxBR19USU1FRE9VVCkKIAkJZGVidWdfbG9nKCIlczogZ290IHRpbWVkIG91dCBwYWNrZXQgJWx1IGF0ICVsdVxuIiwgX19mdW5jX18sCkBAIC0yNjcsNDkgKzI2NiwxMCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJa2ZyZWUocGMpOwogCWJsa19wdXRfcmVxdWVzdChycSk7Ci0Jc2NzaS0+cGMgPSBOVUxMOworCWRyaXZlLT5wYyA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfdGltZW91dChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKLXsKLQlyZXR1cm4gbWF4X3QodW5zaWduZWQgbG9uZywgV0FJVF9DTUQsIHBjLT50aW1lb3V0IC0gamlmZmllcyk7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlc2NzaV9leHBpcnkoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZXNjc2lfc2NzaV90ICpzY3NpID0gZHJpdmVfdG9faWRlc2NzaShkcml2ZSk7Ci0Jc3RydWN0IGlkZV9hdGFwaV9wYyAgICpwYyAgID0gc2NzaS0+cGM7Ci0KLQlkZWJ1Z19sb2coIiVzIGNhbGxlZCBmb3IgJWx1IGF0ICVsdVxuIiwgX19mdW5jX18sCi0JCSAgcGMtPnNjc2lfY21kLT5zZXJpYWxfbnVtYmVyLCBqaWZmaWVzKTsKLQotCXBjLT5mbGFncyB8PSBQQ19GTEFHX1RJTUVET1VUOwotCi0JcmV0dXJuIDA7CQkJCQkvKiB3ZSBkbyBub3Qgd2FudCB0aGUgaWRlIHN1YnN5c3RlbSB0byByZXRyeSAqLwotfQotCi0vKgotICoJT3VyIGludGVycnVwdCBoYW5kbGVyLgotICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZXNjc2lfcGNfaW50ciAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZXNjc2lfc2NzaV90ICpzY3NpID0gZHJpdmVfdG9faWRlc2NzaShkcml2ZSk7Ci0Jc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBzY3NpLT5wYzsKLQotCXJldHVybiBpZGVfcGNfaW50cihkcml2ZSwgcGMsIGlkZXNjc2lfcGNfaW50ciwgZ2V0X3RpbWVvdXQocGMpLAotCQkJICAgaWRlc2NzaV9leHBpcnksIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkgICBpZGVfaW9fYnVmZmVycyk7Ci19Ci0KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlc2NzaV90cmFuc2Zlcl9wYyhpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlc2NzaV9zY3NpX3QgKnNjc2kgPSBkcml2ZV90b19pZGVzY3NpKGRyaXZlKTsKLQotCXJldHVybiBpZGVfdHJhbnNmZXJfcGMoZHJpdmUsIHNjc2ktPnBjLCBpZGVzY3NpX3BjX2ludHIsCi0JCQkgICAgICAgZ2V0X3RpbWVvdXQoc2NzaS0+cGMpLCBpZGVzY3NpX2V4cGlyeSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGlkZXNjc2lfc2V0X2RpcmVjdGlvbihzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAlzd2l0Y2ggKHBjLT5jWzBdKSB7CkBAIC0zNTIsMTMgKzMxMiwxMCBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVzY3NpX2lzc3VlX3BjKGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7Ci0JaWRlc2NzaV9zY3NpX3QgKnNjc2kgPSBkcml2ZV90b19pZGVzY3NpKGRyaXZlKTsKLQogCS8qIFNldCB0aGUgY3VycmVudCBwYWNrZXQgY29tbWFuZCAqLwotCXNjc2ktPnBjID0gcGM7CisJZHJpdmUtPnBjID0gcGM7CiAKLQlyZXR1cm4gaWRlX2lzc3VlX3BjKGRyaXZlLCBwYywgaWRlc2NzaV90cmFuc2Zlcl9wYywKLQkJCSAgICBnZXRfdGltZW91dChwYyksIGlkZXNjc2lfZXhwaXJ5KTsKKwlyZXR1cm4gaWRlX2lzc3VlX3BjKGRyaXZlLCBpZGVfc2NzaV9nZXRfdGltZW91dChwYyksIGlkZV9zY3NpX2V4cGlyeSk7CiB9CiAKIC8qCkBAIC0zNzQsNyArMzMxLDggQEAKIAlpZiAoYmxrX3NlbnNlX3JlcXVlc3QocnEpIHx8IGJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7CiAJCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gKHN0cnVjdCBpZGVfYXRhcGlfcGMgKilycS0+c3BlY2lhbDsKIAotCQlpZiAoZHJpdmUtPnVzaW5nX2RtYSAmJiAhaWRlc2NzaV9tYXBfc2coZHJpdmUsIHBjKSkKKwkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgJiYKKwkJICAgIGlkZXNjc2lfbWFwX3NnKGRyaXZlLCBwYykgPT0gMCkKIAkJCXBjLT5mbGFncyB8PSBQQ19GTEFHX0RNQV9PSzsKIAogCQlyZXR1cm4gaWRlc2NzaV9pc3N1ZV9wYyhkcml2ZSwgcGMpOwpAQCAtMzg1LDYgKzM0MywxMSBAQAogfQogCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCitzdGF0aWMgaWRlX3Byb2NfZW50cnlfdCBpZGVzY3NpX3Byb2NbXSA9IHsKKwl7ICJjYXBhY2l0eSIsIFNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVfcmVhZF9jYXBhY2l0eSwgTlVMTCB9LAorCXsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9Cit9OworCiAjZGVmaW5lIGlkZV9zY3NpX2RldnNldF9nZXQobmFtZSwgZmllbGQpIFwKIHN0YXRpYyBpbnQgZ2V0XyMjbmFtZShpZGVfZHJpdmVfdCAqZHJpdmUpIFwKIHsgXApAQCAtNDIwLDYgKzM4MywxNiBAQAogCUlERV9QUk9DX0RFVlNFVCh0cmFuc2Zvcm0sIDAsCSAzKSwKIAl7IDAgfSwKIH07CisKK3N0YXRpYyBpZGVfcHJvY19lbnRyeV90ICppZGVfc2NzaV9wcm9jX2VudHJpZXMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGVzY3NpX3Byb2M7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0ICppZGVfc2NzaV9wcm9jX2RldnNldHMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGVzY3NpX3NldHRpbmdzOworfQogI2VuZGlmCiAKIC8qCkBAIC00MjcsMTQgKzQwMCwxNCBAQAogICovCiBzdGF0aWMgdm9pZCBpZGVzY3NpX3NldHVwIChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZXNjc2lfc2NzaV90ICpzY3NpKQogewotCWlmICgoZHJpdmUtPmlkW0FUQV9JRF9DT05GSUddICYgMHgwMDYwKSA9PSAweDIwKQotCQlzZXRfYml0KElERV9BRkxBR19EUlFfSU5URVJSVVBULCAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKIAljbGVhcl9iaXQoSURFU0NTSV9TR19UUkFOU0ZPUk0sICZzY3NpLT50cmFuc2Zvcm0pOwogI2lmIElERVNDU0lfREVCVUdfTE9HCiAJc2V0X2JpdChJREVTQ1NJX0xPR19DTUQsICZzY3NpLT5sb2cpOwogI2VuZGlmIC8qIElERVNDU0lfREVCVUdfTE9HICovCiAKLQlkcml2ZS0+cGNfY2FsbGJhY2sgPSBpZGVfc2NzaV9jYWxsYmFjazsKKwlkcml2ZS0+cGNfY2FsbGJhY2sJID0gaWRlX3Njc2lfY2FsbGJhY2s7CisJZHJpdmUtPnBjX3VwZGF0ZV9idWZmZXJzID0gTlVMTDsKKwlkcml2ZS0+cGNfaW9fYnVmZmVycwkgPSBpZGVfaW9fYnVmZmVyczsKIAogCWlkZV9wcm9jX3JlZ2lzdGVyX2RyaXZlcihkcml2ZSwgc2NzaS0+ZHJpdmVyKTsKIH0KQEAgLTQ1NiwxOCArNDI5LDExIEBACiAKIAlpZGVfc2NzaV9wdXQoc2NzaSk7CiAKLQlkcml2ZS0+c2NzaSA9IDA7CisJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1NDU0k7CiB9CiAKIHN0YXRpYyBpbnQgaWRlX3Njc2lfcHJvYmUoaWRlX2RyaXZlX3QgKik7CiAKLSNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLXN0YXRpYyBpZGVfcHJvY19lbnRyeV90IGlkZXNjc2lfcHJvY1tdID0gewotCXsgImNhcGFjaXR5IiwgU19JRlJFR3xTX0lSVUdPLCBwcm9jX2lkZV9yZWFkX2NhcGFjaXR5LCBOVUxMIH0sCi0JeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0KLX07Ci0jZW5kaWYKLQogc3RhdGljIGlkZV9kcml2ZXJfdCBpZGVzY3NpX2RyaXZlciA9IHsKIAkuZ2VuX2RyaXZlciA9IHsKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLApAQCAtNDc3LDEzICs0NDMsMTIgQEAKIAkucHJvYmUJCQk9IGlkZV9zY3NpX3Byb2JlLAogCS5yZW1vdmUJCQk9IGlkZV9zY3NpX3JlbW92ZSwKIAkudmVyc2lvbgkJPSBJREVTQ1NJX1ZFUlNJT04sCi0JLm1lZGlhCQkJPSBpZGVfc2NzaSwKIAkuZG9fcmVxdWVzdAkJPSBpZGVzY3NpX2RvX3JlcXVlc3QsCiAJLmVuZF9yZXF1ZXN0CQk9IGlkZXNjc2lfZW5kX3JlcXVlc3QsCiAJLmVycm9yICAgICAgICAgICAgICAgICAgPSBpZGVzY3NpX2F0YXBpX2Vycm9yLAogI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwotCS5wcm9jCQkJPSBpZGVzY3NpX3Byb2MsCi0JLnNldHRpbmdzCQk9IGlkZXNjc2lfc2V0dGluZ3MsCisJLnByb2NfZW50cmllcwkJPSBpZGVfc2NzaV9wcm9jX2VudHJpZXMsCisJLnByb2NfZGV2c2V0cwkJPSBpZGVfc2NzaV9wcm9jX2RldnNldHMsCiAjZW5kaWYKIH07CiAKQEAgLTYyMiw2ICs1ODcsOCBAQAogCWludAkJYnVzeTsKIAlpbnQgICAgICAgICAgICAgcmV0ICAgPSBGQUlMRUQ7CiAKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYzsKKwogCS8qIEluIGlkZXNjc2lfZWhfYWJvcnQgd2UgdHJ5IHRvIGdlbnRseSBwcnkgb3VyIGNvbW1hbmQgZnJvbSB0aGUgaWRlIHN1YnN5c3RlbSAqLwogCiAJaWYgKHRlc3RfYml0KElERVNDU0lfTE9HX0NNRCwgJnNjc2ktPmxvZykpCkBAIC02NDIsMjYgKzYwOSwyNyBAQAogCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKIAogCS8qIElmIHRoZXJlIGlzIG5vIHBjIHJ1bm5pbmcgd2UncmUgZG9uZSAob3VyIGludGVycnVwdCB0b29rIGNhcmUgb2YgaXQpICovCi0JaWYgKCFzY3NpLT5wYykgeworCXBjID0gZHJpdmUtPnBjOworCWlmIChwYyA9PSBOVUxMKSB7CiAJCXJldCA9IFNVQ0NFU1M7CiAJCWdvdG8gaWRlX3VubG9jazsKIAl9CiAKIAkvKiBJdCdzIHNvbWV3aGVyZSBpbiBmbGlnaHQuIERvZXMgaWRlIHN1YnN5c3RlbSBhZ3JlZT8gKi8KLQlpZiAoc2NzaS0+cGMtPnNjc2lfY21kLT5zZXJpYWxfbnVtYmVyID09IGNtZC0+c2VyaWFsX251bWJlciAmJiAhYnVzeSAmJgotCSAgICBlbHZfcXVldWVfZW1wdHkoZHJpdmUtPnF1ZXVlKSAmJiBIV0dST1VQKGRyaXZlKS0+cnEgIT0gc2NzaS0+cGMtPnJxKSB7CisJaWYgKHBjLT5zY3NpX2NtZC0+c2VyaWFsX251bWJlciA9PSBjbWQtPnNlcmlhbF9udW1iZXIgJiYgIWJ1c3kgJiYKKwkgICAgZWx2X3F1ZXVlX2VtcHR5KGRyaXZlLT5xdWV1ZSkgJiYgSFdHUk9VUChkcml2ZSktPnJxICE9IHBjLT5ycSkgewogCQkvKgogCQkgKiBGSVhNRSAtIG5vdCBzdXJlIHRoaXMgY29uZGl0aW9uIGNhbiBldmVyIG9jY3VyCiAJCSAqLwogCQlwcmludGsgKEtFUk5fRVJSICJpZGUtc2NzaTogY21kIGFib3J0ZWQhXG4iKTsKIAotCQlpZiAoYmxrX3NlbnNlX3JlcXVlc3Qoc2NzaS0+cGMtPnJxKSkKLQkJCWtmcmVlKHNjc2ktPnBjLT5idWYpOworCQlpZiAoYmxrX3NlbnNlX3JlcXVlc3QocGMtPnJxKSkKKwkJCWtmcmVlKHBjLT5idWYpOwogCQkvKiB3ZSBuZWVkIHRvIGNhbGwgYmxrX3B1dF9yZXF1ZXN0IHR3aWNlLiAqLwotCQlibGtfcHV0X3JlcXVlc3Qoc2NzaS0+cGMtPnJxKTsKLQkJYmxrX3B1dF9yZXF1ZXN0KHNjc2ktPnBjLT5ycSk7Ci0JCWtmcmVlKHNjc2ktPnBjKTsKLQkJc2NzaS0+cGMgPSBOVUxMOworCQlibGtfcHV0X3JlcXVlc3QocGMtPnJxKTsKKwkJYmxrX3B1dF9yZXF1ZXN0KHBjLT5ycSk7CisJCWtmcmVlKHBjKTsKKwkJZHJpdmUtPnBjID0gTlVMTDsKIAogCQlyZXQgPSBTVUNDRVNTOwogCX0KQEAgLTY4Myw2ICs2NTEsOCBAQAogCWludCAgICAgICAgICAgICByZWFkeSA9IDA7CiAJaW50ICAgICAgICAgICAgIHJldCAgID0gU1VDQ0VTUzsKIAorCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOworCiAJLyogSW4gaWRlc2NzaV9laF9yZXNldCB3ZSBmb3JjZWZ1bGx5IHJlbW92ZSB0aGUgY29tbWFuZCBmcm9tIHRoZSBpZGUgc3Vic3lzdGVtIGFuZCByZXNldCB0aGUgZGV2aWNlLiAqLwogCiAJaWYgKHRlc3RfYml0KElERVNDU0lfTE9HX0NNRCwgJnNjc2ktPmxvZykpCkBAIC02OTcsNyArNjY3LDkgQEAKIAlzcGluX2xvY2tfaXJxKGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X2xvY2spOwogCXNwaW5fbG9jaygmaWRlX2xvY2spOwogCi0JaWYgKCFzY3NpLT5wYyB8fCAocmVxID0gc2NzaS0+cGMtPnJxKSAhPSBIV0dST1VQKGRyaXZlKS0+cnEgfHwgIUhXR1JPVVAoZHJpdmUpLT5oYW5kbGVyKSB7CisJcGMgPSBkcml2ZS0+cGM7CisKKwlpZiAocGMgPT0gTlVMTCB8fCAocmVxID0gcGMtPnJxKSAhPSBIV0dST1VQKGRyaXZlKS0+cnEgfHwgIUhXR1JPVVAoZHJpdmUpLT5oYW5kbGVyKSB7CiAJCXByaW50ayAoS0VSTl9XQVJOSU5HICJpZGUtc2NzaTogTm8gYWN0aXZlIHJlcXVlc3QgaW4gaWRlc2NzaV9laF9yZXNldFxuIik7CiAJCXNwaW5fdW5sb2NrKCZpZGVfbG9jayk7CiAJCXNwaW5fdW5sb2NrX2lycShjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKQEAgLTcwOCw5ICs2ODAsOSBAQAogCWlmIChfX2Jsa19lbmRfcmVxdWVzdChyZXEsIC1FSU8sIDApKQogCQlCVUcoKTsKIAlpZiAoYmxrX3NlbnNlX3JlcXVlc3QocmVxKSkKLQkJa2ZyZWUoc2NzaS0+cGMtPmJ1Zik7Ci0Ja2ZyZWUoc2NzaS0+cGMpOwotCXNjc2ktPnBjID0gTlVMTDsKKwkJa2ZyZWUocGMtPmJ1Zik7CisJa2ZyZWUocGMpOworCWRyaXZlLT5wYyA9IE5VTEw7CiAJYmxrX3B1dF9yZXF1ZXN0KHJlcSk7CiAKIAkvKiBub3cgbnVrZSB0aGUgZHJpdmUgcXVldWUgKi8KQEAgLTgwMSw3ICs3NzMsNyBAQAogCSAgICAhKGhvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJmlkZXNjc2lfdGVtcGxhdGUsc2l6ZW9mKGlkZXNjc2lfc2NzaV90KSkpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRyaXZlLT5zY3NpID0gMTsKKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19TQ1NJOwogCiAJZyA9IGFsbG9jX2Rpc2soMSA8PCBQQVJUTl9CSVRTKTsKIAlpZiAoIWcpCkBAIC04NDIsNyArODE0LDcgQEAKIAogCXB1dF9kaXNrKGcpOwogb3V0X2hvc3RfcHV0OgotCWRyaXZlLT5zY3NpID0gMDsKKwlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfU0NTSTsKIAlzY3NpX2hvc3RfcHV0KGhvc3QpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKaW5kZXggMmEyZjAwOS4uZWQ2YzU0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwpAQCAtNTIzLDIyICs1MjMsMjAgQEAKIH0KIAogLyoqCi0gKiBpc2NzaV9kYXRhX3JzcCAtIFNDU0kgRGF0YS1JbiBSZXNwb25zZSBwcm9jZXNzaW5nCisgKiBpc2NzaV9kYXRhX2luIC0gU0NTSSBEYXRhLUluIFJlc3BvbnNlIHByb2Nlc3NpbmcKICAqIEBjb25uOiBpc2NzaSBjb25uZWN0aW9uCiAgKiBAdGFzazogc2NzaSBjb21tYW5kIHRhc2sKICAqKi8KIHN0YXRpYyBpbnQKLWlzY3NpX2RhdGFfcnNwKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKK2lzY3NpX2RhdGFfaW4oc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQogewogCXN0cnVjdCBpc2NzaV90Y3BfY29ubiAqdGNwX2Nvbm4gPSBjb25uLT5kZF9kYXRhOwogCXN0cnVjdCBpc2NzaV90Y3BfdGFzayAqdGNwX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwogCXN0cnVjdCBpc2NzaV9kYXRhX3JzcCAqcmhkciA9IChzdHJ1Y3QgaXNjc2lfZGF0YV9yc3AgKil0Y3BfY29ubi0+aW4uaGRyOwotCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzYyA9IHRhc2stPnNjOwogCWludCBkYXRhc24gPSBiZTMyX3RvX2NwdShyaGRyLT5kYXRhc24pOwotCXVuc2lnbmVkIHRvdGFsX2luX2xlbmd0aCA9IHNjc2lfaW4oc2MpLT5sZW5ndGg7CisJdW5zaWduZWQgdG90YWxfaW5fbGVuZ3RoID0gc2NzaV9pbih0YXNrLT5zYyktPmxlbmd0aDsKIAotCWlzY3NpX3VwZGF0ZV9jbWRzbihzZXNzaW9uLCAoc3RydWN0IGlzY3NpX25vcGluKilyaGRyKTsKKwlpc2NzaV91cGRhdGVfY21kc24oY29ubi0+c2Vzc2lvbiwgKHN0cnVjdCBpc2NzaV9ub3Bpbiopcmhkcik7CiAJaWYgKHRjcF9jb25uLT5pbi5kYXRhbGVuID09IDApCiAJCXJldHVybiAwOwogCkBAIC01NTgsMjMgKzU1Niw2IEBACiAJCXJldHVybiBJU0NTSV9FUlJfREFUQV9PRkZTRVQ7CiAJfQogCi0JaWYgKHJoZHItPmZsYWdzICYgSVNDU0lfRkxBR19EQVRBX1NUQVRVUykgewotCQlzYy0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNikgfCByaGRyLT5jbWRfc3RhdHVzOwotCQljb25uLT5leHBfc3RhdHNuID0gYmUzMl90b19jcHUocmhkci0+c3RhdHNuKSArIDE7Ci0JCWlmIChyaGRyLT5mbGFncyAmIChJU0NTSV9GTEFHX0RBVEFfVU5ERVJGTE9XIHwKLQkJICAgICAgICAgICAgICAgICAgIElTQ1NJX0ZMQUdfREFUQV9PVkVSRkxPVykpIHsKLQkJCWludCByZXNfY291bnQgPSBiZTMyX3RvX2NwdShyaGRyLT5yZXNpZHVhbF9jb3VudCk7Ci0KLQkJCWlmIChyZXNfY291bnQgPiAwICYmCi0JCQkgICAgKHJoZHItPmZsYWdzICYgSVNDU0lfRkxBR19DTURfT1ZFUkZMT1cgfHwKLQkJCSAgICAgcmVzX2NvdW50IDw9IHRvdGFsX2luX2xlbmd0aCkpCi0JCQkJc2NzaV9pbihzYyktPnJlc2lkID0gcmVzX2NvdW50OwotCQkJZWxzZQotCQkJCXNjLT5yZXN1bHQgPSAoRElEX0JBRF9UQVJHRVQgPDwgMTYpIHwKLQkJCQkJcmhkci0+Y21kX3N0YXR1czsKLQkJfQotCX0KLQogCWNvbm4tPmRhdGFpbl9wZHVzX2NudCsrOwogCXJldHVybiAwOwogfQpAQCAtNzc0LDcgKzc1NSw3IEBACiAJCWlmICghdGFzaykKIAkJCXJjID0gSVNDU0lfRVJSX0JBRF9JVFQ7CiAJCWVsc2UKLQkJCXJjID0gaXNjc2lfZGF0YV9yc3AoY29ubiwgdGFzayk7CisJCQlyYyA9IGlzY3NpX2RhdGFfaW4oY29ubiwgdGFzayk7CiAJCWlmIChyYykgewogCQkJc3Bpbl91bmxvY2soJmNvbm4tPnNlc3Npb24tPmxvY2spOwogCQkJYnJlYWs7CkBAIC05OTgsNyArOTc5LDcgQEAKIAogZXJyb3I6CiAJZGVidWdfdGNwKCJFcnJvciByZWNlaXZpbmcgUERVLCBlcnJubz0lZFxuIiwgcmMpOwotCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOworCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCByYyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMTcsOCArMTA5OCwxMCBAQAogCiAJd2hpbGUgKDEpIHsKIAkJcmMgPSBpc2NzaV90Y3BfeG1pdF9zZWdtZW50KHRjcF9jb25uLCBzZWdtZW50KTsKLQkJaWYgKHJjIDwgMCkKKwkJaWYgKHJjIDwgMCkgeworCQkJcmMgPSBJU0NTSV9FUlJfWE1JVF9GQUlMRUQ7CiAJCQlnb3RvIGVycm9yOworCQl9CiAJCWlmIChyYyA9PSAwKQogCQkJYnJlYWs7CiAKQEAgLTExMjcsNyArMTExMCw3IEBACiAJCWlmIChzZWdtZW50LT50b3RhbF9jb3BpZWQgPj0gc2VnbWVudC0+dG90YWxfc2l6ZSkgewogCQkJaWYgKHNlZ21lbnQtPmRvbmUgIT0gTlVMTCkgewogCQkJCXJjID0gc2VnbWVudC0+ZG9uZSh0Y3BfY29ubiwgc2VnbWVudCk7Ci0JCQkJaWYgKHJjIDwgMCkKKwkJCQlpZiAocmMgIT0gMCkKIAkJCQkJZ290byBlcnJvcjsKIAkJCX0KIAkJfQpAQCAtMTE0Miw4ICsxMTI1LDggQEAKIAkvKiBUcmFuc21pdCBlcnJvci4gV2UgY291bGQgaW5pdGlhdGUgZXJyb3IgcmVjb3ZlcnkKIAkgKiBoZXJlLiAqLwogCWRlYnVnX3RjcCgiRXJyb3Igc2VuZGluZyBQRFUsIGVycm5vPSVkXG4iLCByYyk7Ci0JaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7Ci0JcmV0dXJuIHJjOworCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCByYyk7CisJcmV0dXJuIC1FSU87CiB9CiAKIC8qKgpAQCAtMTkwNCw2ICsxODg3LDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3QoY2xzX3Nlc3Npb24pOwogCiAJaXNjc2lfcjJ0cG9vbF9mcmVlKGNsc19zZXNzaW9uLT5kZF9kYXRhKTsKKwlpc2NzaV9zZXNzaW9uX3RlYXJkb3duKGNsc19zZXNzaW9uKTsKIAogCWlzY3NpX2hvc3RfcmVtb3ZlKHNob3N0KTsKIAlpc2NzaV9ob3N0X2ZyZWUoc2hvc3QpOwpAQCAtMTkyNyw3ICsxOTExLDcgQEAKIAkuY21kX3Blcl9sdW4JCT0gSVNDU0lfREVGX0NNRF9QRVJfTFVOLAogCS5laF9hYm9ydF9oYW5kbGVyICAgICAgID0gaXNjc2lfZWhfYWJvcnQsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyPSBpc2NzaV9laF9kZXZpY2VfcmVzZXQsCi0JLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IGlzY3NpX2VoX2hvc3RfcmVzZXQsCisJLmVoX3RhcmdldF9yZXNldF9oYW5kbGVyPSBpc2NzaV9laF90YXJnZXRfcmVzZXQsCiAJLnVzZV9jbHVzdGVyaW5nICAgICAgICAgPSBESVNBQkxFX0NMVVNURVJJTkcsCiAJLnNsYXZlX2NvbmZpZ3VyZSAgICAgICAgPSBpc2NzaV90Y3Bfc2xhdmVfY29uZmlndXJlLAogCS5wcm9jX25hbWUJCT0gImlzY3NpX3RjcCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCmluZGV4IGRhN2I2N2QuLjgwMWM3Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jCkBAIC00MDQsMTEgKzQwNCw2IEBACiAJCWNvbm4tPnNlc3Npb24tPnF1ZXVlZF9jbWRzbi0tOwogCWVsc2UKIAkJY29ubi0+c2Vzc2lvbi0+dHQtPmNsZWFudXBfdGFzayhjb25uLCB0YXNrKTsKLQkvKgotCSAqIENoZWNrIGlmIGNsZWFudXBfdGFzayBkcm9wcGVkIHRoZSBsb2NrIGFuZCB0aGUgY29tbWFuZCBjb21wbGV0ZWQsCi0JICovCi0JaWYgKCF0YXNrLT5zYykKLQkJcmV0dXJuOwogCiAJc2MtPnJlc3VsdCA9IGVycjsKIAlpZiAoIXNjc2lfYmlkaV9jbW5kKHNjKSkKQEAgLTYzMyw2ICs2MjgsNDAgQEAKIAlfX2lzY3NpX3B1dF90YXNrKHRhc2spOwogfQogCisvKioKKyAqIGlzY3NpX2RhdGFfaW5fcnNwIC0gU0NTSSBEYXRhLUluIFJlc3BvbnNlIHByb2Nlc3NpbmcKKyAqIEBjb25uOiBpc2NzaSBjb25uZWN0aW9uCisgKiBAaGRyOiAgaXNjc2kgcGR1CisgKiBAdGFzazogc2NzaSBjb21tYW5kIHRhc2sKKyAqKi8KK3N0YXRpYyB2b2lkCitpc2NzaV9kYXRhX2luX3JzcChzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwgc3RydWN0IGlzY3NpX2hkciAqaGRyLAorCQkgIHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQoreworCXN0cnVjdCBpc2NzaV9kYXRhX3JzcCAqcmhkciA9IChzdHJ1Y3QgaXNjc2lfZGF0YV9yc3AgKiloZHI7CisJc3RydWN0IHNjc2lfY21uZCAqc2MgPSB0YXNrLT5zYzsKKworCWlmICghKHJoZHItPmZsYWdzICYgSVNDU0lfRkxBR19EQVRBX1NUQVRVUykpCisJCXJldHVybjsKKworCXNjLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KSB8IHJoZHItPmNtZF9zdGF0dXM7CisJY29ubi0+ZXhwX3N0YXRzbiA9IGJlMzJfdG9fY3B1KHJoZHItPnN0YXRzbikgKyAxOworCWlmIChyaGRyLT5mbGFncyAmIChJU0NTSV9GTEFHX0RBVEFfVU5ERVJGTE9XIHwKKwkgICAgICAgICAgICAgICAgICAgSVNDU0lfRkxBR19EQVRBX09WRVJGTE9XKSkgeworCQlpbnQgcmVzX2NvdW50ID0gYmUzMl90b19jcHUocmhkci0+cmVzaWR1YWxfY291bnQpOworCisJCWlmIChyZXNfY291bnQgPiAwICYmCisJCSAgICAocmhkci0+ZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9PVkVSRkxPVyB8fAorCQkgICAgIHJlc19jb3VudCA8PSBzY3NpX2luKHNjKS0+bGVuZ3RoKSkKKwkJCXNjc2lfaW4oc2MpLT5yZXNpZCA9IHJlc19jb3VudDsKKwkJZWxzZQorCQkJc2MtPnJlc3VsdCA9IChESURfQkFEX1RBUkdFVCA8PCAxNikgfCByaGRyLT5jbWRfc3RhdHVzOworCX0KKworCWNvbm4tPnNjc2lyc3BfcGR1c19jbnQrKzsKKwlfX2lzY3NpX3B1dF90YXNrKHRhc2spOworfQorCiBzdGF0aWMgdm9pZCBpc2NzaV90bWZfcnNwKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIpCiB7CiAJc3RydWN0IGlzY3NpX3RtX3JzcCAqdG1mID0gKHN0cnVjdCBpc2NzaV90bV9yc3AgKiloZHI7CkBAIC04MTgsMTIgKzg0Nyw3IEBACiAJCWlzY3NpX3Njc2lfY21kX3JzcChjb25uLCBoZHIsIHRhc2ssIGRhdGEsIGRhdGFsZW4pOwogCQlicmVhazsKIAljYXNlIElTQ1NJX09QX1NDU0lfREFUQV9JTjoKLQkJaWYgKGhkci0+ZmxhZ3MgJiBJU0NTSV9GTEFHX0RBVEFfU1RBVFVTKSB7Ci0JCQljb25uLT5zY3NpcnNwX3BkdXNfY250Kys7Ci0JCQlpc2NzaV91cGRhdGVfY21kc24oc2Vzc2lvbiwKLQkJCQkJICAgKHN0cnVjdCBpc2NzaV9ub3BpbiopIGhkcik7Ci0JCQlfX2lzY3NpX3B1dF90YXNrKHRhc2spOwotCQl9CisJCWlzY3NpX2RhdGFfaW5fcnNwKGNvbm4sIGhkciwgdGFzayk7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfT1BfTE9HT1VUX1JTUDoKIAkJaXNjc2lfdXBkYXRlX2NtZHNuKHNlc3Npb24sIChzdHJ1Y3QgaXNjc2lfbm9waW4qKWhkcik7CkBAIC05NTQsNiArOTc4LDM4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9pdHRfdG9fY3Rhc2spOwogCit2b2lkIGlzY3NpX3Nlc3Npb25fZmFpbHVyZShzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uLAorCQkJICAgZW51bSBpc2NzaV9lcnIgZXJyKQoreworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm47CisJc3RydWN0IGRldmljZSAqZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOworCWNvbm4gPSBzZXNzaW9uLT5sZWFkY29ubjsKKwlpZiAoc2Vzc2lvbi0+c3RhdGUgPT0gSVNDU0lfU1RBVEVfVEVSTUlOQVRFIHx8ICFjb25uKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlc3Npb24tPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWRldiA9IGdldF9kZXZpY2UoJmNvbm4tPmNsc19jb25uLT5kZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlc3Npb24tPmxvY2ssIGZsYWdzKTsKKwlpZiAoIWRldikKKwkgICAgICAgIHJldHVybjsKKwkvKgorCSAqIGlmIHRoZSBob3N0IGlzIGJlaW5nIHJlbW92ZWQgYnlwYXNzIHRoZSBjb25uZWN0aW9uCisJICogcmVjb3ZlcnkgaW5pdGlhbGl6YXRpb24gYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8ga2lsbAorCSAqIHRoZSBzZXNzaW9uLgorCSAqLworCWlmIChlcnIgPT0gSVNDU0lfRVJSX0lOVkFMSURfSE9TVCkKKwkJaXNjc2lfY29ubl9lcnJvcl9ldmVudChjb25uLT5jbHNfY29ubiwgZXJyKTsKKwllbHNlCisJCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCBlcnIpOworCXB1dF9kZXZpY2UoZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3Nlc3Npb25fZmFpbHVyZSk7CisKIHZvaWQgaXNjc2lfY29ubl9mYWlsdXJlKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBlbnVtIGlzY3NpX2VyciBlcnIpCiB7CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwpAQCAtOTY4LDkgKzEwMjQsMTAgQEAKIAlpZiAoY29ubi0+c3RvcF9zdGFnZSA9PSAwKQogCQlzZXNzaW9uLT5zdGF0ZSA9IElTQ1NJX1NUQVRFX0ZBSUxFRDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7CisKIAlzZXRfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF90eCk7CiAJc2V0X2JpdChJU0NTSV9TVVNQRU5EX0JJVCwgJmNvbm4tPnN1c3BlbmRfcngpOwotCWlzY3NpX2Nvbm5fZXJyb3IoY29ubi0+Y2xzX2Nvbm4sIGVycik7CisJaXNjc2lfY29ubl9lcnJvcl9ldmVudChjb25uLT5jbHNfY29ubiwgZXJyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2Nvbm5fZmFpbHVyZSk7CiAKQEAgLTExOTQsMTUgKzEyNTEsMTMgQEAKIAkJc3dpdGNoIChzZXNzaW9uLT5zdGF0ZSkgewogCQljYXNlIElTQ1NJX1NUQVRFX0lOX1JFQ09WRVJZOgogCQkJcmVhc29uID0gRkFJTFVSRV9TRVNTSU9OX0lOX1JFQ09WRVJZOwotCQkJc2MtPnJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7Ci0JCQlicmVhazsKKwkJCWdvdG8gcmVqZWN0OwogCQljYXNlIElTQ1NJX1NUQVRFX0xPR0dJTkdfT1VUOgogCQkJcmVhc29uID0gRkFJTFVSRV9TRVNTSU9OX0xPR0dJTkdfT1VUOwotCQkJc2MtPnJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7Ci0JCQlicmVhazsKKwkJCWdvdG8gcmVqZWN0OwogCQljYXNlIElTQ1NJX1NUQVRFX1JFQ09WRVJZX0ZBSUxFRDoKIAkJCXJlYXNvbiA9IEZBSUxVUkVfU0VTU0lPTl9SRUNPVkVSWV9USU1FT1VUOwotCQkJc2MtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQkJc2MtPnJlc3VsdCA9IERJRF9UUkFOU1BPUlRfRkFJTEZBU1QgPDwgMTY7CiAJCQlicmVhazsKIAkJY2FzZSBJU0NTSV9TVEFURV9URVJNSU5BVEU6CiAJCQlyZWFzb24gPSBGQUlMVVJFX1NFU1NJT05fVEVSTUlOQVRFOwpAQCAtMTI2Nyw3ICsxMzIyLDcgQEAKIAlzcGluX3VubG9jaygmc2Vzc2lvbi0+bG9jayk7CiAJZGVidWdfc2NzaSgiY21kIDB4JXggcmVqZWN0ZWQgKCVkKVxuIiwgc2MtPmNtbmRbMF0sIHJlYXNvbik7CiAJc3Bpbl9sb2NrKGhvc3QtPmhvc3RfbG9jayk7Ci0JcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisJcmV0dXJuIFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWTsKIAogZmF1bHQ6CiAJc3Bpbl91bmxvY2soJnNlc3Npb24tPmxvY2spOwpAQCAtMTMwNyw3ICsxMzYyLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3Nlc3Npb25fcmVjb3ZlcnlfdGltZWRvdXQpOwogCi1pbnQgaXNjc2lfZWhfaG9zdF9yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpzYykKK2ludCBpc2NzaV9laF90YXJnZXRfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2MpCiB7CiAJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbjsKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbjsKQEAgLTEzMjEsNyArMTM3Niw3IEBACiAJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAlpZiAoc2Vzc2lvbi0+c3RhdGUgPT0gSVNDU0lfU1RBVEVfVEVSTUlOQVRFKSB7CiBmYWlsZWQ6Ci0JCWRlYnVnX3Njc2koImZhaWxpbmcgaG9zdCByZXNldDogc2Vzc2lvbiB0ZXJtaW5hdGVkICIKKwkJZGVidWdfc2NzaSgiZmFpbGluZyB0YXJnZXQgcmVzZXQ6IHNlc3Npb24gdGVybWluYXRlZCAiCiAJCQkgICAiW0NJRCAlZCBhZ2UgJWRdXG4iLCBjb25uLT5pZCwgc2Vzc2lvbi0+YWdlKTsKIAkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCQltdXRleF91bmxvY2soJnNlc3Npb24tPmVoX211dGV4KTsKQEAgLTEzMzYsNyArMTM5MSw3IEBACiAJICovCiAJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAKLQlkZWJ1Z19zY3NpKCJpc2NzaV9laF9ob3N0X3Jlc2V0IHdhaXQgZm9yIHJlbG9naW5cbiIpOworCWRlYnVnX3Njc2koImlzY3NpX2VoX3RhcmdldF9yZXNldCB3YWl0IGZvciByZWxvZ2luXG4iKTsKIAl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY29ubi0+ZWh3YWl0LAogCQkJCSBzZXNzaW9uLT5zdGF0ZSA9PSBJU0NTSV9TVEFURV9URVJNSU5BVEUgfHwKIAkJCQkgc2Vzc2lvbi0+c3RhdGUgPT0gSVNDU0lfU1RBVEVfTE9HR0VEX0lOIHx8CkBAIC0xMzQ4LDE0ICsxNDAzLDE0IEBACiAJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAlpZiAoc2Vzc2lvbi0+c3RhdGUgPT0gSVNDU0lfU1RBVEVfTE9HR0VEX0lOKQogCQlpc2NzaV9zZXNzaW9uX3ByaW50ayhLRVJOX0lORk8sIHNlc3Npb24sCi0JCQkJICAgICAiaG9zdCByZXNldCBzdWNjZWVkZWRcbiIpOworCQkJCSAgICAgInRhcmdldCByZXNldCBzdWNjZWVkZWRcbiIpOwogCWVsc2UKIAkJZ290byBmYWlsZWQ7CiAJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCW11dGV4X3VubG9jaygmc2Vzc2lvbi0+ZWhfbXV0ZXgpOwogCXJldHVybiBTVUNDRVNTOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfZWhfaG9zdF9yZXNldCk7CitFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9laF90YXJnZXRfcmVzZXQpOwogCiBzdGF0aWMgdm9pZCBpc2NzaV90bWZfdGltZWRvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewpAQCAtMTc2OSwxMCArMTgyNCwxMCBAQAogCiAJaXNjc2lfc3VzcGVuZF90eChjb25uKTsKIAotCXNwaW5fbG9jaygmc2Vzc2lvbi0+bG9jayk7CisJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAlmYWlsX2FsbF9jb21tYW5kcyhjb25uLCBzYy0+ZGV2aWNlLT5sdW4sIERJRF9FUlJPUik7CiAJY29ubi0+dG1mX3N0YXRlID0gVE1GX0lOSVRJQUw7Ci0Jc3Bpbl91bmxvY2soJnNlc3Npb24tPmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAogCWlzY3NpX3N0YXJ0X3R4KGNvbm4pOwogCWdvdG8gZG9uZTsKQEAgLTE4NzgsNiArMTkzMyw3IEBACiAJCQkJICAgaW50IGRkX2RhdGFfc2l6ZSwgdWludDE2X3QgcWRlcHRoKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBpc2NzaV9ob3N0ICppaG9zdDsKIAogCXNob3N0ID0gc2NzaV9ob3N0X2FsbG9jKHNodCwgc2l6ZW9mKHN0cnVjdCBpc2NzaV9ob3N0KSArIGRkX2RhdGFfc2l6ZSk7CiAJaWYgKCFzaG9zdCkKQEAgLTE4OTIsMjIgKzE5NDgsNDMgQEAKIAkJcWRlcHRoID0gSVNDU0lfREVGX0NNRF9QRVJfTFVOOwogCX0KIAlzaG9zdC0+Y21kX3Blcl9sdW4gPSBxZGVwdGg7CisKKwlpaG9zdCA9IHNob3N0X3ByaXYoc2hvc3QpOworCXNwaW5fbG9ja19pbml0KCZpaG9zdC0+bG9jayk7CisJaWhvc3QtPnN0YXRlID0gSVNDU0lfSE9TVF9TRVRVUDsKKwlpaG9zdC0+bnVtX3Nlc3Npb25zID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpaG9zdC0+c2Vzc2lvbl9yZW1vdmFsX3dxKTsKIAlyZXR1cm4gc2hvc3Q7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9ob3N0X2FsbG9jKTsKIAorc3RhdGljIHZvaWQgaXNjc2lfbm90aWZ5X2hvc3RfcmVtb3ZlZChzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uKQoreworCWlzY3NpX3Nlc3Npb25fZmFpbHVyZShjbHNfc2Vzc2lvbiwgSVNDU0lfRVJSX0lOVkFMSURfSE9TVCk7Cit9CisKIC8qKgogICogaXNjc2lfaG9zdF9yZW1vdmUgLSByZW1vdmUgaG9zdCBhbmQgc2Vzc2lvbnMKICAqIEBzaG9zdDogc2NzaSBob3N0CiAgKgotICogVGhpcyB3aWxsIGFsc28gcmVtb3ZlIGFueSBzZXNzaW9ucyBhdHRhY2hlZCB0byB0aGUgaG9zdCwgYnV0IGlmIHVzZXJzcGFjZQotICogaXMgbWFuYWdpbmcgdGhlIHNlc3Npb24gYXQgdGhlIHNhbWUgdGltZSB0aGlzIHdpbGwgYnJlYWsuIFRPRE86IGFkZAotICogcmVmY291bnRpbmcgdG8gdGhlIG5ldGxpbmsgaXNjc2kgaW50ZXJmYWNlIHNvIGEgcm1tb2Qgb3IgaG9zdCBob3QgdW5wbHVnCi0gKiBkb2VzIG5vdCByZW1vdmUgdGhlIG1lbW9yeSBmcm9tIHVuZGVyIHVzLgorICogSWYgdGhlcmUgYXJlIGFueSBzZXNzaW9ucyBsZWZ0LCB0aGlzIHdpbGwgaW5pdGlhdGUgdGhlIHJlbW92YWwgYW5kIHdhaXQKKyAqIGZvciB0aGUgY29tcGxldGlvbi4KICAqLwogdm9pZCBpc2NzaV9ob3N0X3JlbW92ZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKLQlpc2NzaV9ob3N0X2Zvcl9lYWNoX3Nlc3Npb24oc2hvc3QsIGlzY3NpX3Nlc3Npb25fdGVhcmRvd24pOworCXN0cnVjdCBpc2NzaV9ob3N0ICppaG9zdCA9IHNob3N0X3ByaXYoc2hvc3QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWhvc3QtPmxvY2ssIGZsYWdzKTsKKwlpaG9zdC0+c3RhdGUgPSBJU0NTSV9IT1NUX1JFTU9WRUQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWhvc3QtPmxvY2ssIGZsYWdzKTsKKworCWlzY3NpX2hvc3RfZm9yX2VhY2hfc2Vzc2lvbihzaG9zdCwgaXNjc2lfbm90aWZ5X2hvc3RfcmVtb3ZlZCk7CisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGlob3N0LT5zZXNzaW9uX3JlbW92YWxfd3EsCisJCQkJIGlob3N0LT5udW1fc2Vzc2lvbnMgPT0gMCk7CisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOworCiAJc2NzaV9yZW1vdmVfaG9zdChzaG9zdCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9ob3N0X3JlbW92ZSk7CkBAIC0xOTIzLDYgKzIwMDAsMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2hvc3RfZnJlZSk7CiAKK3N0YXRpYyB2b2lkIGlzY3NpX2hvc3RfZGVjX3Nlc3Npb25fY250KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBpc2NzaV9ob3N0ICppaG9zdCA9IHNob3N0X3ByaXYoc2hvc3QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzaG9zdCA9IHNjc2lfaG9zdF9nZXQoc2hvc3QpOworCWlmICghc2hvc3QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIHN0YXRlLiBDYW5ub3Qgbm90aWZ5IGhvc3QgcmVtb3ZhbCAiCisJCSAgICAgICJvZiBzZXNzaW9uIHRlYXJkb3duIGV2ZW50IGJlY2F1c2UgaG9zdCBhbHJlYWR5ICIKKwkJICAgICAgInJlbW92ZWQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZpaG9zdC0+bG9jaywgZmxhZ3MpOworCWlob3N0LT5udW1fc2Vzc2lvbnMtLTsKKwlpZiAoaWhvc3QtPm51bV9zZXNzaW9ucyA9PSAwKQorCQl3YWtlX3VwKCZpaG9zdC0+c2Vzc2lvbl9yZW1vdmFsX3dxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpaG9zdC0+bG9jaywgZmxhZ3MpOworCXNjc2lfaG9zdF9wdXQoc2hvc3QpOworfQorCiAvKioKICAqIGlzY3NpX3Nlc3Npb25fc2V0dXAgLSBjcmVhdGUgaXNjc2kgY2xzIHNlc3Npb24gYW5kIGhvc3QgYW5kIHNlc3Npb24KICAqIEBpc2NzaXQ6IGlzY3NpIHRyYW5zcG9ydCB0ZW1wbGF0ZQpAQCAtMTk0Myw5ICsyMDQxLDE5IEBACiAJCSAgICB1aW50MTZfdCBjbWRzX21heCwgaW50IGNtZF90YXNrX3NpemUsCiAJCSAgICB1aW50MzJfdCBpbml0aWFsX2NtZHNuLCB1bnNpZ25lZCBpbnQgaWQpCiB7CisJc3RydWN0IGlzY3NpX2hvc3QgKmlob3N0ID0gc2hvc3RfcHJpdihzaG9zdCk7CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb247CiAJc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbjsKIAlpbnQgY21kX2ksIHNjc2lfY21kcywgdG90YWxfY21kcyA9IGNtZHNfbWF4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWhvc3QtPmxvY2ssIGZsYWdzKTsKKwlpZiAoaWhvc3QtPnN0YXRlID09IElTQ1NJX0hPU1RfUkVNT1ZFRCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpaG9zdC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWhvc3QtPm51bV9zZXNzaW9ucysrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlob3N0LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXRvdGFsX2NtZHMpCiAJCXRvdGFsX2NtZHMgPSBJU0NTSV9ERUZfWE1JVF9DTURTX01BWDsKQEAgLTE5NTgsNyArMjA2Niw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiaXNjc2k6IGludmFsaWQgY2FuX3F1ZXVlIG9mICVkLiBjYW5fcXVldWUgIgogCQkgICAgICAgIm11c3QgYmUgYSBwb3dlciBvZiB0d28gdGhhdCBpcyBhdCBsZWFzdCAlZC5cbiIsCiAJCSAgICAgICB0b3RhbF9jbWRzLCBJU0NTSV9UT1RBTF9DTURTX01JTik7Ci0JCXJldHVybiBOVUxMOworCQlnb3RvIGRlY19zZXNzaW9uX2NvdW50OwogCX0KIAogCWlmICh0b3RhbF9jbWRzID4gSVNDU0lfVE9UQUxfQ01EU19NQVgpIHsKQEAgLTE5ODIsNyArMjA5MCw3IEBACiAJY2xzX3Nlc3Npb24gPSBpc2NzaV9hbGxvY19zZXNzaW9uKHNob3N0LCBpc2NzaXQsCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpc2NzaV9zZXNzaW9uKSk7CiAJaWYgKCFjbHNfc2Vzc2lvbikKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZGVjX3Nlc3Npb25fY291bnQ7CiAJc2Vzc2lvbiA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOwogCXNlc3Npb24tPmNsc19zZXNzaW9uID0gY2xzX3Nlc3Npb247CiAJc2Vzc2lvbi0+aG9zdCA9IHNob3N0OwpAQCAtMjAyMSw2ICsyMTI5LDcgQEAKIAogCWlmIChpc2NzaV9hZGRfc2Vzc2lvbihjbHNfc2Vzc2lvbiwgaWQpKQogCQlnb3RvIGNsc19zZXNzaW9uX2ZhaWw7CisKIAlyZXR1cm4gY2xzX3Nlc3Npb247CiAKIGNsc19zZXNzaW9uX2ZhaWw6CkBAIC0yMDI5LDYgKzIxMzgsOCBAQAogCWlzY3NpX3Bvb2xfZnJlZSgmc2Vzc2lvbi0+Y21kcG9vbCk7CiBjbWRwb29sX2FsbG9jX2ZhaWw6CiAJaXNjc2lfZnJlZV9zZXNzaW9uKGNsc19zZXNzaW9uKTsKK2RlY19zZXNzaW9uX2NvdW50OgorCWlzY3NpX2hvc3RfZGVjX3Nlc3Npb25fY250KHNob3N0KTsKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3Nlc3Npb25fc2V0dXApOwpAQCAtMjA0NCw2ICsyMTU1LDcgQEAKIHsKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOwogCXN0cnVjdCBtb2R1bGUgKm93bmVyID0gY2xzX3Nlc3Npb24tPnRyYW5zcG9ydC0+b3duZXI7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZXNzaW9uLT5ob3N0OwogCiAJaXNjc2lfcG9vbF9mcmVlKCZzZXNzaW9uLT5jbWRwb29sKTsKIApAQCAtMjA1Niw2ICsyMTY4LDcgQEAKIAlrZnJlZShzZXNzaW9uLT5pZmFjZW5hbWUpOwogCiAJaXNjc2lfZGVzdHJveV9zZXNzaW9uKGNsc19zZXNzaW9uKTsKKwlpc2NzaV9ob3N0X2RlY19zZXNzaW9uX2NudChzaG9zdCk7CiAJbW9kdWxlX3B1dChvd25lcik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9zZXNzaW9uX3RlYXJkb3duKTsKQEAgLTIzMzUsOCArMjQ0OCwxMCBAQAogCSAqIGZsdXNoIHF1ZXVlcy4KIAkgKi8KIAlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOwotCWZhaWxfYWxsX2NvbW1hbmRzKGNvbm4sIC0xLAotCQkJU1RPUF9DT05OX1JFQ09WRVIgPyBESURfQlVTX0JVU1kgOiBESURfRVJST1IpOworCWlmIChmbGFnID09IFNUT1BfQ09OTl9SRUNPVkVSKQorCQlmYWlsX2FsbF9jb21tYW5kcyhjb25uLCAtMSwgRElEX1RSQU5TUE9SVF9ESVNSVVBURUQpOworCWVsc2UKKwkJZmFpbF9hbGxfY29tbWFuZHMoY29ubiwgLTEsIERJRF9FUlJPUik7CiAJZmx1c2hfY29udHJvbF9xdWV1ZXMoc2Vzc2lvbiwgY29ubik7CiAJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCW11dGV4X3VubG9jaygmc2Vzc2lvbi0+ZWhfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCmluZGV4IGUwZTAxOGQuLjYwYTllNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKQEAgLTM0LDcgKzM0LDE0IEBACiAjZGVmaW5lIExQRkNfSU9DQl9MSVNUX0NOVAkyMjUwCS8qIGxpc3Qgb2YgSU9DQnMgZm9yIGZhc3QtcGF0aCB1c2FnZS4gKi8KICNkZWZpbmUgTFBGQ19RX1JBTVBfVVBfSU5URVJWQUwgMTIwICAgICAvKiBsdW4gcV9kZXB0aCByYW1wIHVwIGludGVydmFsICovCiAjZGVmaW5lIExQRkNfVk5BTUVfTEVOCQkxMDAJLyogdnBvcnQgc3ltYm9saWMgbmFtZSBsZW5ndGggKi8KKyNkZWZpbmUgTFBGQ19UR1RRX0lOVEVSVkFMCTQwMDAwCS8qIE1pbiBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHRndAorCQkJCQkgICBxdWV1ZSBkZXB0aCBjaGFuZ2UgaW4gbWlsbGlzZWNzICovCisjZGVmaW5lIExQRkNfVEdUUV9SQU1QVVBfUENFTlQJNQkvKiBUYXJnZXQgcXVldWUgcmFtcHVwIGluIHBlcmNlbnRhZ2UgKi8KKyNkZWZpbmUgTFBGQ19NSU5fVEdUX1FERVBUSAkxMDAKKyNkZWZpbmUgTFBGQ19NQVhfVEdUX1FERVBUSAkweEZGRkYKIAorI2RlZmluZSAgTFBGQ19NQVhfQlVDS0VUX0NPVU5UIDIwCS8qIE1heGltdW0gbm8uIG9mIGJ1Y2tldHMgZm9yIHN0YXQgZGF0YQorCQkJCQkgICBjb2xsZWN0aW9uLiAqLwogLyoKICAqIEZvbGxvd2luZyB0aW1lIGludGVydmFscyBhcmUgdXNlZCBvZiBhZGp1c3RpbmcgU0NTSSBkZXZpY2UKICAqIHF1ZXVlIGRlcHRocyB3aGVuIHRoZXJlIGFyZSBkcml2ZXIgcmVzb3VyY2UgZXJyb3Igb3IgRmlybXdhcmUKQEAgLTQ5LDYgKzU2LDkgQEAKICNkZWZpbmUgTFBGQ19IQl9NQk9YX0lOVEVSVkFMICAgNQkvKiBIZWFydCBiZWF0IGludGVydmFsIGluIHNlY29uZHMuICovCiAjZGVmaW5lIExQRkNfSEJfTUJPWF9USU1FT1VUICAgIDMwCS8qIEhlYXJ0IGJlYXQgdGltZW91dCAgaW4gc2Vjb25kcy4gKi8KIAorLyogRXJyb3IgQXR0ZW50aW9uIGV2ZW50IHBvbGxpbmcgaW50ZXJ2YWwgKi8KKyNkZWZpbmUgTFBGQ19FUkFUVF9QT0xMX0lOVEVSVkFMCTUgLyogRUFUVCBwb2xsIGludGVydmFsIGluIHNlY29uZHMgKi8KKwogLyogRGVmaW5lIG1hY3JvcyBmb3IgNjQgYml0IHN1cHBvcnQgKi8KICNkZWZpbmUgcHV0UGFkZHJMb3coYWRkcikgICAgKCh1aW50MzJfdCkgKDB4ZmZmZmZmZmYgJiAodTY0KShhZGRyKSkpCiAjZGVmaW5lIHB1dFBhZGRySGlnaChhZGRyKSAgICgodWludDMyX3QpICgweGZmZmZmZmZmICYgKCgodTY0KShhZGRyKSk+PjMyKSkpCkBAIC02MCw2ICs3MCw5IEBACiAKICNkZWZpbmUgTUFYX0hCQUVWVAkzMgogCisvKiBOdW1iZXIgb2YgTVNJLVggdmVjdG9ycyB0aGUgZHJpdmVyIHVzZXMgKi8KKyNkZWZpbmUgTFBGQ19NU0lYX1ZFQ1RPUlMJMgorCiAvKiBscGZjIHdhaXQgZXZlbnQgZGF0YSByZWFkeSBmbGFnICovCiAjZGVmaW5lIExQRkNfREFUQV9SRUFEWQkJKDE8PDApCiAKQEAgLTM1Nyw2ICszNzAsNyBAQAogCXVpbnQzMl90IGNmZ19sb2dfdmVyYm9zZTsKIAl1aW50MzJfdCBjZmdfbWF4X2x1bnM7CiAJdWludDMyX3QgY2ZnX2VuYWJsZV9kYV9pZDsKKwl1aW50MzJfdCBjZmdfbWF4X3Njc2ljbXBsX3RpbWU7CiAKIAl1aW50MzJfdCBkZXZfbG9zc190bW9fY2hhbmdlZDsKIApAQCAtMzY5LDYgKzM4Myw4IEBACiAJc3RydWN0IGxwZmNfZGVidWdmc190cmMgKmRpc2NfdHJjOwogCWF0b21pY190IGRpc2NfdHJjX2NudDsKICNlbmRpZgorCXVpbnQ4X3Qgc3RhdF9kYXRhX2VuYWJsZWQ7CisJdWludDhfdCBzdGF0X2RhdGFfYmxvY2tlZDsKIH07CiAKIHN0cnVjdCBoYnFfcyB7CkBAIC00MDcsMTAgKzQyMywxMSBAQAogCXN0cnVjdCBscGZjX3NsaSBzbGk7CiAJdWludDMyX3Qgc2xpX3JldjsJCS8qIFNMSTIgb3IgU0xJMyAqLwogCXVpbnQzMl90IHNsaTNfb3B0aW9uczsJCS8qIE1hc2sgb2YgZW5hYmxlZCBTTEkzIG9wdGlvbnMgKi8KLSNkZWZpbmUgTFBGQ19TTEkzX0VOQUJMRUQJIDB4MDEKLSNkZWZpbmUgTFBGQ19TTEkzX0hCUV9FTkFCTEVECSAweDAyCi0jZGVmaW5lIExQRkNfU0xJM19OUElWX0VOQUJMRUQJIDB4MDQKLSNkZWZpbmUgTFBGQ19TTEkzX1ZQT1JUX1RFQVJET1dOIDB4MDgKKyNkZWZpbmUgTFBGQ19TTEkzX0hCUV9FTkFCTEVECQkweDAxCisjZGVmaW5lIExQRkNfU0xJM19OUElWX0VOQUJMRUQJCTB4MDIKKyNkZWZpbmUgTFBGQ19TTEkzX1ZQT1JUX1RFQVJET1dOCTB4MDQKKyNkZWZpbmUgTFBGQ19TTEkzX0NSUF9FTkFCTEVECQkweDA4CisjZGVmaW5lIExQRkNfU0xJM19JTkJfRU5BQkxFRAkJMHgxMAogCXVpbnQzMl90IGlvY2JfY21kX3NpemU7CiAJdWludDMyX3QgaW9jYl9yc3Bfc2l6ZTsKIApAQCAtNDIyLDEwICs0MzksMjAgQEAKICNkZWZpbmUgTFNfTlBJVl9GQUJfU1VQUE9SVEVEIDB4MgkvKiBGYWJyaWMgc3VwcG9ydHMgTlBJViAqLwogI2RlZmluZSBMU19JR05PUkVfRVJBVFQgICAgICAgMHg0CS8qIGludHIgaGFuZGxlciBzaG91bGQgaWdub3JlIEVSQVRUICovCiAKLQlzdHJ1Y3QgbHBmY19zbGkyX3NsaW0gKnNsaW0ycDsKLQlzdHJ1Y3QgbHBmY19kbWFidWYgaGJxc2xpbXA7CisJdWludDMyX3QgaGJhX2ZsYWc7CS8qIGhiYSBnZW5lcmljIGZsYWdzICovCisjZGVmaW5lIEhCQV9FUkFUVF9IQU5ETEVECTB4MSAvKiBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gZXJhdHQgaGFuZGxlZCAqLwogCi0JZG1hX2FkZHJfdCBzbGltMnBfbWFwcGluZzsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgc2xpbTJwOworCisJTUFJTEJPWF90ICptYm94OworCXVpbnQzMl90ICppbmJfaGFfY29weTsKKwl1aW50MzJfdCAqaW5iX2NvdW50ZXI7CisJdWludDMyX3QgaW5iX2xhc3RfY291bnRlcjsKKwl1aW50MzJfdCBoYV9jb3B5OworCXN0cnVjdCBfUENCICpwY2I7CisJc3RydWN0IF9JT0NCICpJT0NCczsKKworCXN0cnVjdCBscGZjX2RtYWJ1ZiBoYnFzbGltcDsKIAogCXVpbnQxNl90IHBjaV9jZmdfdmFsdWU7CiAKQEAgLTQ5Miw3ICs1MTksNyBAQAogCiAJd2FpdF9xdWV1ZV9oZWFkX3QgICAgd29ya193YWl0cTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgICAqd29ya2VyX3RocmVhZDsKLQlsb25nIGRhdGFfZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBkYXRhX2ZsYWdzOwogCiAJdWludDMyX3QgaGJxX2luX3VzZTsJCS8qIEhCUXMgaW4gdXNlIGZsYWcgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGhicWJ1Zl9pbl9saXN0OyAgLyogaW4tZmx5IGhicSBidWZmZXIgbGlzdCAqLwpAQCAtNTE0LDYgKzU0MSw3IEBACiAJdm9pZCBfX2lvbWVtICpIQ3JlZ2FkZHI7CS8qIHZpcnR1YWwgYWRkcmVzcyBmb3IgaG9zdCBjdGwgcmVnICovCiAKIAlzdHJ1Y3QgbHBmY19oZ3AgX19pb21lbSAqaG9zdF9ncDsgLyogSG9zdCBzaWRlIGdldC9wdXQgcG9pbnRlcnMgKi8KKwlzdHJ1Y3QgbHBmY19wZ3AgICAqcG9ydF9ncDsKIAl1aW50MzJfdCBfX2lvbWVtICAqaGJxX3B1dDsgICAgIC8qIEFkZHJlc3MgaW4gU0xJTSB0byBIQlEgcHV0IHB0cnMgKi8KIAl1aW50MzJfdCAgICAgICAgICAqaGJxX2dldDsgICAgIC8qIEhvc3QgbWVtIGFkZHJlc3Mgb2YgSEJRIGdldCBwdHJzICovCiAKQEAgLTUzNiw2ICs1NjQsNyBAQAogCXVpbnQ4X3Qgc29mdF93d25fZW5hYmxlOwogCiAJc3RydWN0IHRpbWVyX2xpc3QgZmNwX3BvbGxfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgZXJhdHRfcG9sbDsKIAogCS8qCiAJICogc3RhdCAgY291bnRlcnMKQEAgLTU2NSw3ICs1OTQsNyBAQAogCiAJc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyBsaW5rX3N0YXRzOwogCWVudW0gaW50cl90eXBlX3QgaW50cl90eXBlOwotCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1sxXTsKKwlzdHJ1Y3QgbXNpeF9lbnRyeSBtc2l4X2VudHJpZXNbTFBGQ19NU0lYX1ZFQ1RPUlNdOwogCiAJc3RydWN0IGxpc3RfaGVhZCBwb3J0X2xpc3Q7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnBwb3J0OwkvKiBwaHlzaWNhbCBscGZjX3Zwb3J0IHBvaW50ZXIgKi8KQEAgLTYwNSw2ICs2MzQsNyBAQAogCXVuc2lnbmVkIGxvbmcgbGFzdF9jb21wbGV0aW9uX3RpbWU7CiAJc3RydWN0IHRpbWVyX2xpc3QgaGJfdG1vZnVuYzsKIAl1aW50OF90IGhiX291dHN0YW5kaW5nOworCWVudW0gaGJhX3RlbXBfc3RhdGUgb3Zlcl90ZW1wX3N0YXRlOwogCS8qIG5kbHAgcmVmZXJlbmNlIG1hbmFnZW1lbnQgKi8KIAlzcGlubG9ja190IG5kbHBfbG9jazsKIAkvKgpAQCAtNjEzLDcgKzY0MywxOSBAQAogCSAqLwogI2RlZmluZSBRVUVfQlVGVEFHX0JJVCAgKDE8PDMxKQogCXVpbnQzMl90IGJ1ZmZlcl90YWdfY291bnQ7Ci0JZW51bSBoYmFfdGVtcF9zdGF0ZSBvdmVyX3RlbXBfc3RhdGU7CisJaW50IHdhaXRfNF9tbG9fbWFpbnRfZmxnOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfNF9tbG9fbV9xOworCS8qIGRhdGEgc3RydWN0dXJlIHVzZWQgZm9yIGxhdGVuY3kgZGF0YSBjb2xsZWN0aW9uICovCisjZGVmaW5lIExQRkNfTk9fQlVDS0VUCSAgIDAKKyNkZWZpbmUgTFBGQ19MSU5FQVJfQlVDS0VUIDEKKyNkZWZpbmUgTFBGQ19QT1dFUjJfQlVDS0VUIDIKKwl1aW50OF90ICBidWNrZXRfdHlwZTsKKwl1aW50MzJfdCBidWNrZXRfYmFzZTsKKwl1aW50MzJfdCBidWNrZXRfc3RlcDsKKworLyogTWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgY2FuIGJlIG91dHN0YW5kaW5nIGF0IGFueSB0aW1lKi8KKyNkZWZpbmUgTFBGQ19NQVhfRVZUX0NPVU5UIDUxMgorCWF0b21pY190IGZhc3RfZXZlbnRfY291bnQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBTY3NpX0hvc3QgKgpAQCAtNjUwLDE1ICs2OTIsMjUgQEAKIAlyZXR1cm47CiB9CiAKLSNkZWZpbmUgRkNfUkVHX0RVTVBfRVZFTlQJCTB4MTAJLyogUmVnaXN0ZXIgZm9yIER1bXAgZXZlbnRzICovCi0jZGVmaW5lIEZDX1JFR19URU1QRVJBVFVSRV9FVkVOVAkweDIwICAgIC8qIFJlZ2lzdGVyIGZvciB0ZW1wZXJhdHVyZQotCQkJCQkJICAgZXZlbnQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorbHBmY19zbGlfcmVhZF9ocyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJLyoKKwkgKiBUaGVyZSB3YXMgYSBsaW5rL2JvYXJkIGVycm9yLiBSZWFkIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdG8gcmV0cmlldmUKKwkgKiB0aGUgZXJyb3IgZXZlbnQgYW5kIHByb2Nlc3MgaXQuCisJICovCisJcGhiYS0+c2xpLnNsaXN0YXQuZXJyX2F0dG5fZXZlbnQrKzsKIAotc3RydWN0IHRlbXBfZXZlbnQgewotCXVpbnQzMl90IGV2ZW50X3R5cGU7Ci0JdWludDMyX3QgZXZlbnRfY29kZTsKLQl1aW50MzJfdCBkYXRhOwotfTsKLSNkZWZpbmUgTFBGQ19DUklUX1RFTVAJCTB4MQotI2RlZmluZSBMUEZDX1RIUkVTSE9MRF9URU1QCTB4MgotI2RlZmluZSBMUEZDX05PUk1BTF9URU1QCTB4MworCS8qIFNhdmUgc3RhdHVzIGluZm8gKi8KKwlwaGJhLT53b3JrX2hzID0gcmVhZGwocGhiYS0+SFNyZWdhZGRyKTsKKwlwaGJhLT53b3JrX3N0YXR1c1swXSA9IHJlYWRsKHBoYmEtPk1Cc2xpbWFkZHIgKyAweGE4KTsKKwlwaGJhLT53b3JrX3N0YXR1c1sxXSA9IHJlYWRsKHBoYmEtPk1Cc2xpbWFkZHIgKyAweGFjKTsKKworCS8qIENsZWFyIGNoaXAgSG9zdCBBdHRlbnRpb24gZXJyb3IgYml0ICovCisJd3JpdGVsKEhBX0VSQVRULCBwaGJhLT5IQXJlZ2FkZHIpOworCXJlYWRsKHBoYmEtPkhBcmVnYWRkcik7IC8qIGZsdXNoICovCisJcGhiYS0+cHBvcnQtPnN0b3BwZWQgPSAxOworCisJcmV0dXJuOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCmluZGV4IDM3YmZhMGIuLmFhM2Q2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJscGZjX2h3LmgiCiAjaW5jbHVkZSAibHBmY19zbGkuaCIKKyNpbmNsdWRlICJscGZjX25sLmgiCiAjaW5jbHVkZSAibHBmY19kaXNjLmgiCiAjaW5jbHVkZSAibHBmY19zY3NpLmgiCiAjaW5jbHVkZSAibHBmYy5oIgpAQCAtNDksNiArNTAsMjEgQEAKICNkZWZpbmUgTFBGQ19MSU5LX1NQRUVEX0JJVE1BUCAweDAwMDAwMTE3CiAjZGVmaW5lIExQRkNfTElOS19TUEVFRF9TVFJJTkcgIjAsIDEsIDIsIDQsIDgiCiAKKy8qKgorICogbHBmY19qZWRlY190b19hc2NpaTogSGV4IHRvIGFzY2lpIGNvbnZlcnRvciBhY2NvcmRpbmcgdG8gSkVERUMgcnVsZXMuCisgKiBAaW5jcjogaW50ZWdlciB0byBjb252ZXJ0LgorICogQGhkdzogYXNjaWkgc3RyaW5nIGhvbGRpbmcgY29udmVydGVkIGludGVnZXIgcGx1cyBhIHN0cmluZyB0ZXJtaW5hdG9yLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSkVERUMgSm9pbnQgRWxlY3Ryb24gRGV2aWNlIEVuZ2luZWVyaW5nIENvdW5jaWwuCisgKiBDb252ZXJ0IGEgMzIgYml0IGludGVnZXIgY29tcG9zZWQgb2YgOCBuaWJibGVzIGludG8gYW4gOCBieXRlIGFzY2lpCisgKiBjaGFyYWN0ZXIgc3RyaW5nLiBUaGUgc3RyaW5nIGlzIHRoZW4gdGVybWluYXRlZCB3aXRoIGEgTlVMTCBpbiBieXRlIDkuCisgKiBIZXggMC05IGJlY29tZXMgYXNjaWkgJzAnIHRvICc5Jy4KKyAqIEhleCBhLWYgYmVjb21lcyBhc2NpaSAnPScgdG8gJ0InIGNhcGl0YWwgQi4KKyAqCisgKiBOb3RlczoKKyAqIENvZGVkIGZvciAzMiBiaXQgaW50ZWdlcnMgb25seS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2plZGVjX3RvX2FzY2lpKGludCBpbmNyLCBjaGFyIGhkd1tdKQogewpAQCAtNjUsNiArODEsMTQgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19kcnZyX3ZlcnNpb25fc2hvdzogUmV0dXJuIHRoZSBFbXVsZXggZHJpdmVyIHN0cmluZyB3aXRoIHZlcnNpb24gbnVtYmVyLgorICogQGRldjogY2xhc3MgdW51c2VkIHZhcmlhYmxlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBtb2R1bGUgZGVzY3JpcHRpb24gdGV4dC4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19kcnZyX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICAgY2hhciAqYnVmKQpAQCAtNzIsNiArOTYsMTQgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsIExQRkNfTU9EVUxFX0RFU0MgIlxuIik7CiB9CiAKKy8qKgorICogbHBmY19pbmZvX3Nob3c6IFJldHVybiBzb21lIHBjaSBpbmZvIGFib3V0IHRoZSBob3N0IGluIGFzY2lpLgorICogQGRldjogY2xhc3MgY29udmVydGVkIHRvIGEgU2NzaV9ob3N0IHN0cnVjdHVyZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgZm9ybWF0dGVkIHRleHQgZnJvbSBscGZjX2luZm8oKS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19pbmZvX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkgICAgICAgY2hhciAqYnVmKQpAQCAtODEsNiArMTEzLDE0IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsbHBmY19pbmZvKGhvc3QpKTsKIH0KIAorLyoqCisgKiBscGZjX3NlcmlhbG51bV9zaG93OiBSZXR1cm4gdGhlIGhiYSBzZXJpYWwgbnVtYmVyIGluIGFzY2lpLgorICogQGRldjogY2xhc3MgY29udmVydGVkIHRvIGEgU2NzaV9ob3N0IHN0cnVjdHVyZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgZm9ybWF0dGVkIHRleHQgc2VyaWFsIG51bWJlci4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19zZXJpYWxudW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgY2hhciAqYnVmKQpAQCAtOTIsNiArMTMyLDE4IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIscGhiYS0+U2VyaWFsTnVtYmVyKTsKIH0KIAorLyoqCisgKiBscGZjX3RlbXBfc2Vuc29yX3Nob3c6IFJldHVybiB0aGUgdGVtcGVyYXR1cmUgc2Vuc29yIGxldmVsLgorICogQGRldjogY2xhc3MgY29udmVydGVkIHRvIGEgU2NzaV9ob3N0IHN0cnVjdHVyZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgZm9ybWF0dGVkIHN1cHBvcnQgbGV2ZWwuCisgKgorICogRGVzY3JpcHRpb246CisgKiBSZXR1cm5zIGEgbnVtYmVyIGluZGljYXRpbmcgdGhlIHRlbXBlcmF0dXJlIHNlbnNvciBsZXZlbCBjdXJyZW50bHkKKyAqIHN1cHBvcnRlZCwgemVybyBvciBvbmUgaW4gYXNjaWkuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfdGVtcF9zZW5zb3Jfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgICBjaGFyICpidWYpCkBAIC0xMDIsNiArMTU0LDE0IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIscGhiYS0+dGVtcF9zZW5zb3Jfc3VwcG9ydCk7CiB9CiAKKy8qKgorICogbHBmY19tb2RlbGRlc2Nfc2hvdzogUmV0dXJuIHRoZSBtb2RlbCBkZXNjcmlwdGlvbiBvZiB0aGUgaGJhLgorICogQGRldjogY2xhc3MgY29udmVydGVkIHRvIGEgU2NzaV9ob3N0IHN0cnVjdHVyZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgc2NzaSB2cGQgbW9kZWwgZGVzY3JpcHRpb24uCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfbW9kZWxkZXNjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgIGNoYXIgKmJ1ZikKQEAgLTExMyw2ICsxNzMsMTQgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIixwaGJhLT5Nb2RlbERlc2MpOwogfQogCisvKioKKyAqIGxwZmNfbW9kZWxuYW1lX3Nob3c6IFJldHVybiB0aGUgbW9kZWwgbmFtZSBvZiB0aGUgaGJhLgorICogQGRldjogY2xhc3MgY29udmVydGVkIHRvIGEgU2NzaV9ob3N0IHN0cnVjdHVyZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgc2NzaSB2cGQgbW9kZWwgbmFtZS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19tb2RlbG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgY2hhciAqYnVmKQpAQCAtMTI0LDYgKzE5MiwxNCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLHBoYmEtPk1vZGVsTmFtZSk7CiB9CiAKKy8qKgorICogbHBmY19wcm9ncmFtdHlwZV9zaG93OiBSZXR1cm4gdGhlIHByb2dyYW0gdHlwZSBvZiB0aGUgaGJhLgorICogQGRldjogY2xhc3MgY29udmVydGVkIHRvIGEgU2NzaV9ob3N0IHN0cnVjdHVyZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgc2NzaSB2cGQgcHJvZ3JhbSB0eXBlLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3Byb2dyYW10eXBlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICAgY2hhciAqYnVmKQpAQCAtMTM1LDYgKzIxMSwzMyBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLHBoYmEtPlByb2dyYW1UeXBlKTsKIH0KIAorLyoqCisgKiBscGZjX21sb21nbXRfc2hvdzogUmV0dXJuIHRoZSBNZW5sbyBNYWludGVuYW5jZSBzbGkgZmxhZy4KKyAqIEBkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhIFNjc2lfaG9zdCBzdHJ1Y3R1cmUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIE1lbmxvIE1haW50ZW5hbmNlIHNsaSBmbGFnLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KK3N0YXRpYyBzc2l6ZV90CitscGZjX21sb21nbXRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilzaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAorCQkocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19NRU5MT19NQUlOVCkpOworfQorCisvKioKKyAqIGxwZmNfdnBvcnRudW1fc2hvdzogUmV0dXJuIHRoZSBwb3J0IG51bWJlciBpbiBhc2NpaSBvZiB0aGUgaGJhLgorICogQGRldjogY2xhc3MgY29udmVydGVkIHRvIGEgU2NzaV9ob3N0IHN0cnVjdHVyZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyBzY3NpIHZwZCBwcm9ncmFtIHR5cGUuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfdnBvcnRudW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICBjaGFyICpidWYpCkBAIC0xNDYsNiArMjQ5LDE0IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIscGhiYS0+UG9ydCk7CiB9CiAKKy8qKgorICogbHBmY19md3Jldl9zaG93OiBSZXR1cm4gdGhlIGZpcm13YXJlIHJldiBydW5uaW5nIGluIHRoZSBoYmEuCisgKiBAZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYSBTY3NpX2hvc3Qgc3RydWN0dXJlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBzY3NpIHZwZCBwcm9ncmFtIHR5cGUuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfZndyZXZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYpCkBAIC0xNTksNiArMjcwLDE0IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXMsIHNsaS0lZFxuIiwgZndyZXYsIHBoYmEtPnNsaV9yZXYpOwogfQogCisvKioKKyAqIGxwZmNfaGR3X3Nob3c6IFJldHVybiB0aGUgamVkZWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhiYS4KKyAqIEBkZXY6IGNsYXNzIGNvbnZlcnRlZCB0byBhIFNjc2lfaG9zdCBzdHJ1Y3R1cmUuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIHNjc2kgdnBkIHByb2dyYW0gdHlwZS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19oZHdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0xNzEsNiArMjkwLDE1IEBACiAJbHBmY19qZWRlY190b19hc2NpaSh2cC0+cmV2LmJpdVJldiwgaGR3KTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgaGR3KTsKIH0KKworLyoqCisgKiBscGZjX29wdGlvbl9yb21fdmVyc2lvbl9zaG93OiBSZXR1cm4gdGhlIGFkYXB0ZXIgUk9NIEZDb2RlIHZlcnNpb24uCisgKiBAZGV2OiBjbGFzcyBjb252ZXJ0ZWQgdG8gYSBTY3NpX2hvc3Qgc3RydWN0dXJlLgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBST00gYW5kIEZDb2RlIGFzY2lpIHN0cmluZ3MuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfb3B0aW9uX3JvbV92ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgY2hhciAqYnVmKQpAQCAtMTgxLDYgKzMwOSwxOCBAQAogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHBoYmEtPk9wdGlvblJPTVZlcnNpb24pOwogfQorCisvKioKKyAqIGxwZmNfc3RhdGVfc2hvdzogUmV0dXJuIHRoZSBsaW5rIHN0YXRlIG9mIHRoZSBwb3J0LgorICogQGRldjogY2xhc3MgY29udmVydGVkIHRvIGEgU2NzaV9ob3N0IHN0cnVjdHVyZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0ZXh0IGRlc2NyaWJpbmcgdGhlIHN0YXRlIG9mIHRoZSBsaW5rLgorICoKKyAqIE5vdGVzOgorICogVGhlIHN3aXRjaCBzdGF0ZW1lbnQgaGFzIG5vIGRlZmF1bHQgc28gemVybyB3aWxsIGJlIHJldHVybmVkLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX2xpbmtfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgIGNoYXIgKmJ1ZikKQEAgLTIzMiw4ICszNzIsMTAgQEAKIAkJCQkJIlVua25vd25cbiIpOwogCQkJYnJlYWs7CiAJCX0KLQotCQlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkgeworCQlpZiAocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19NRU5MT19NQUlOVCkKKwkJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRS1sZW4sCisJCQkJCSIgICBNZW5sbyBNYWludCBNb2RlXG4iKTsKKwkJZWxzZSBpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkgewogCQkJaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfUFVCTElDX0xPT1ApCiAJCQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFLWxlbiwKIAkJCQkJCSIgICBQdWJsaWMgTG9vcFxuIik7CkBAIC0yNTMsNiArMzk1LDE4IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorLyoqCisgKiBscGZjX251bV9kaXNjb3ZlcmVkX3BvcnRzX3Nob3c6IFJldHVybiBzdW0gb2YgbWFwcGVkIGFuZCB1bm1hcHBlZCB2cG9ydHMuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgc3VtIG9mIGZjIG1hcHBlZCBhbmQgdW5tYXBwZWQuCisgKgorICogRGVzY3JpcHRpb246CisgKiBSZXR1cm5zIHRoZSBhc2NpaSB0ZXh0IG51bWJlciBvZiB0aGUgc3VtIG9mIHRoZSBmYyBtYXBwZWQgYW5kIHVubWFwcGVkCisgKiB2cG9ydCBjb3VudHMuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfbnVtX2Rpc2NvdmVyZWRfcG9ydHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTI2NCw3ICs0MTgsMjAgQEAKIAkJCXZwb3J0LT5mY19tYXBfY250ICsgdnBvcnQtPmZjX3VubWFwX2NudCk7CiB9CiAKLQorLyoqCisgKiBscGZjX2lzc3VlX2xpcDogTWlzbm9tZXIsIG5hbWUgY2FycmllZCBvdmVyIGZyb20gbG9uZyBhZ28uCisgKiBAc2hvc3Q6IFNjc2lfSG9zdCBwb2ludGVyLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQnJpbmcgdGhlIGxpbmsgZG93biBncmFjZWZ1bGx5IHRoZW4gcmUtaW5pdCB0aGUgbGluay4gVGhlIGZpcm13YXJlIHdpbGwKKyAqIHJlLWluaXQgdGhlIGZpYmVyIGNoYW5uZWwgaW50ZXJmYWNlIGFzIHJlcXVpcmVkLiBEb2VzIG5vdCBpc3N1ZSBhIExJUC4KKyAqCisgKiBSZXR1cm5zOgorICogLUVQRVJNIHBvcnQgb2ZmbGluZSBvciBtYW5hZ2VtZW50IGNvbW1hbmRzIGFyZSBiZWluZyBibG9ja2VkCisgKiAtRU5PTUVNIGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBtYWlsYm94IGNvbW1hbmQKKyAqIC1FSU8gZXJyb3Igc2VuZGluZyB0aGUgbWFpbGJveCBjb21tYW5kCisgKiB6ZXJvIGZvciBzdWNjZXNzCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2lzc3VlX2xpcChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKQEAgLTMwNiw2ICs0NzMsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2RvX29mZmxpbmU6IElzc3VlcyBhIG1haWxib3ggY29tbWFuZCB0byBicmluZyB0aGUgbGluayBkb3duLgorICogQHBoYmE6IGxwZmNfaGJhIHBvaW50ZXIuCisgKiBAdHlwZTogTFBGQ19FVlRfT0ZGTElORSwgTFBGQ19FVlRfV0FSTV9TVEFSVCwgTFBGQ19FVlRfS0lMTC4KKyAqCisgKiBOb3RlczoKKyAqIEFzc3VtZXMgYW55IGVycm9yIGZyb20gbHBmY19kb19vZmZsaW5lKCkgd2lsbCBiZSBuZWdhdGl2ZS4KKyAqIENhbiB3YWl0IHVwIHRvIDUgc2Vjb25kcyBmb3IgdGhlIHBvcnQgcmluZyBidWZmZXJzIGNvdW50CisgKiB0byByZWFjaCB6ZXJvLCBwcmludHMgYSB3YXJuaW5nIGlmIGl0IGlzIG5vdCB6ZXJvIGFuZCBjb250aW51ZXMuCisgKiBscGZjX3dvcmtxX3Bvc3RfZXZlbnQoKSByZXR1cm5zIGEgbm9uLXplcm8gcmV0dXJuIGNvY2UgaWYgY2FsbCBmYWlscy4KKyAqCisgKiBSZXR1cm5zOgorICogLUVJTyBlcnJvciBwb3N0aW5nIHRoZSBldmVudAorICogemVybyBmb3Igc3VjY2VzcworICoqLwogc3RhdGljIGludAogbHBmY19kb19vZmZsaW5lKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgdHlwZSkKIHsKQEAgLTM1Myw2ICs1MzUsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3NlbGVjdGl2ZV9yZXNldDogT2ZmbGluZSB0aGVuIG9ubGluZXMgdGhlIHBvcnQuCisgKiBAcGhiYTogbHBmY19oYmEgcG9pbnRlci4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIElmIHRoZSBwb3J0IGlzIGNvbmZpZ3VyZWQgdG8gYWxsb3cgYSByZXNldCB0aGVuIHRoZSBoYmEgaXMgYnJvdWdodAorICogb2ZmbGluZSB0aGVuIG9ubGluZS4KKyAqCisgKiBOb3RlczoKKyAqIEFzc3VtZXMgYW55IGVycm9yIGZyb20gbHBmY19kb19vZmZsaW5lKCkgd2lsbCBiZSBuZWdhdGl2ZS4KKyAqCisgKiBSZXR1cm5zOgorICogbHBmY19kb19vZmZsaW5lKCkgcmV0dXJuIGNvZGUgaWYgbm90IHplcm8KKyAqIC1FSU8gcmVzZXQgbm90IGNvbmZpZ3VyZWQgb3IgZXJyb3IgcG9zdGluZyB0aGUgZXZlbnQKKyAqIHplcm8gZm9yIHN1Y2Nlc3MKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2VsZWN0aXZlX3Jlc2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTM3OCw2ICs1NzYsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2lzc3VlX3Jlc2V0OiBTZWxlY3RpdmVseSByZXNldHMgYW4gYWRhcHRlci4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1ZjogY29udGFpbmluZyB0aGUgc3RyaW5nICJzZWxlY3RpdmUiLgorICogQGNvdW50OiB1bnVzZWQgdmFyaWFibGUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBJZiB0aGUgYnVmIGNvbnRhaW5zIHRoZSBzdHJpbmcgInNlbGVjdGl2ZSIgdGhlbiBscGZjX3NlbGVjdGl2ZV9yZXNldCgpCisgKiBpcyBjYWxsZWQgdG8gcGVyZm9ybSB0aGUgcmVzZXQuCisgKgorICogTm90ZXM6CisgKiBBc3N1bWVzIGFueSBlcnJvciBmcm9tIGxwZmNfc2VsZWN0aXZlX3Jlc2V0KCkgd2lsbCBiZSBuZWdhdGl2ZS4KKyAqIElmIGxwZmNfc2VsZWN0aXZlX3Jlc2V0KCkgcmV0dXJucyB6ZXJvIHRoZW4gdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyCisgKiBpcyByZXR1cm5lZCB3aGljaCBpbmRpY2F0ZXMgc3VjY2Nlc3MKKyAqCisgKiBSZXR1cm5zOgorICogLUVJTlZBTCBpZiB0aGUgYnVmZmVyIGRvZXMgbm90IGNvbnRhaW4gdGhlIHN0cmluZyAic2VsZWN0aXZlIgorICogbGVuZ3RoIG9mIGJ1ZiBpZiBscGZjLXNlbGVjdGl2ZV9yZXNldCgpIGlmIHRoZSBjYWxsIHN1Y2NlZWRzCisgKiByZXR1cm4gdmFsdWUgb2YgbHBmY19zZWxlY3RpdmVfcmVzZXQoKSBpZiB0aGUgY2FsbCBmYWlscworKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19pc3N1ZV9yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0zOTcsNiArNjE2LDE0IEBACiAJCXJldHVybiBzdGF0dXM7CiB9CiAKKy8qKgorICogbHBmY19ucG9ydF9ldnRfY250X3Nob3c6IFJldHVybiB0aGUgbnVtYmVyIG9mIG5wb3J0IGV2ZW50cy4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBhc2NpaSBudW1iZXIgb2YgbnBvcnQgZXZlbnRzLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX25wb3J0X2V2dF9jbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJY2hhciAqYnVmKQpAQCAtNDA4LDYgKzYzNSwxNCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBwaGJhLT5ucG9ydF9ldmVudF9jbnQpOwogfQogCisvKioKKyAqIGxwZmNfYm9hcmRfbW9kZV9zaG93OiBSZXR1cm4gdGhlIHN0YXRlIG9mIHRoZSBib2FyZC4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBzdGF0ZSBvZiB0aGUgYWRhcHRlci4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19ib2FyZF9tb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICBjaGFyICpidWYpCkBAIC00MjksNiArNjY0LDE5IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHN0YXRlKTsKIH0KIAorLyoqCisgKiBscGZjX2JvYXJkX21vZGVfc3RvcmU6IFB1dHMgdGhlIGhiYSBpbiBvbmxpbmUsIG9mZmxpbmUsIHdhcm0gb3IgZXJyb3Igc3RhdGUuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IGNvbnRhaW5pbmcgb25lIG9mIHRoZSBzdHJpbmdzICJvbmxpbmUiLCAib2ZmbGluZSIsICJ3YXJtIiBvciAiZXJyb3IiLgorICogQGNvdW50OiB1bnVzZWQgdmFyaWFibGUuCisgKgorICogUmV0dXJuczoKKyAqIC1FQUNDRVMgaWYgZW5hYmxlIGhiYSByZXNldCBub3QgZW5hYmxlZAorICogLUVJTlZBTCBpZiB0aGUgYnVmZmVyIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBzdHJpbmcgKHNlZSBhYm92ZSkKKyAqIC1FSU8gaWYgbHBmY193b3JrcV9wb3N0X2V2ZW50KCkgb3IgbHBmY19kb19vZmZsaW5lKCkgZmFpbHMKKyAqIGJ1ZiBsZW5ndGggZ3JlYXRlciB0aGFuIHplcm8gaW5kaWNhdGVzIHN1Y2Nlc3MKKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX2JvYXJkX21vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC00NjIsNiArNzEwLDI0IEBACiAJCXJldHVybiAtRUlPOwogfQogCisvKioKKyAqIGxwZmNfZ2V0X2hiYV9pbmZvOiBSZXR1cm4gdmFyaW91cyBiaXRzIG9mIGluZm9ybWF0b24gYWJvdXQgdGhlIGFkYXB0ZXIuCisgKiBAcGhiYTogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUuCisgKiBAbXhyaSBtYXggeHJpIGNvdW50LgorICogQGF4cmkgYXZhaWxhYmxlIHhyaSBjb3VudC4KKyAqIEBtcnBpIG1heCBycGkgY291bnQuCisgKiBAYXJwaSBhdmFpbGFibGUgcnBpIGNvdW50LgorICogQG12cGkgbWF4IHZwaSBjb3VudC4KKyAqIEBhdnBpIGF2YWlsYWJsZSB2cGkgY291bnQuCisgKgorICogRGVzY3JpcHRpb246CisgKiBJZiBhbiBpbnRlZ2VyIHBvaW50ZXIgZm9yIGFuIGNvdW50IGlzIG5vdCBudWxsIHRoZW4gdGhlIHZhbHVlIGZvciB0aGUKKyAqIGNvdW50IGlzIHJldHVybmVkLgorICoKKyAqIFJldHVybnM6CisgKiB6ZXJvIG9uIGVycm9yCisgKiBvbmUgZm9yIHN1Y2Nlc3MKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZ2V0X2hiYV9pbmZvKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKIAkJICB1aW50MzJfdCAqbXhyaSwgdWludDMyX3QgKmF4cmksCkBAIC01MjQsNiArNzkwLDIwIEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qKgorICogbHBmY19tYXhfcnBpX3Nob3c6IFJldHVybiBtYXhpbXVtIHJwaS4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBtYXhpbXVtIHJwaSBjb3VudCBpbiBkZWNpbWFsIG9yICJVbmtub3duIi4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIENhbGxzIGxwZmNfZ2V0X2hiYV9pbmZvKCkgYXNraW5nIGZvciBqdXN0IHRoZSBtcnBpIGNvdW50LgorICogSWYgbHBmY19nZXRfaGJhX2luZm8oKSByZXR1cm5zIHplcm8gKGZhaWx1cmUpIHRoZSBidWZmZXIgdGV4dCBpcyBzZXQKKyAqIHRvICJVbmtub3duIiBhbmQgdGhlIGJ1ZmZlciBsZW5ndGggaXMgcmV0dXJuZWQsIHRoZXJlZm9yZSB0aGUgY2FsbGVyCisgKiBtdXN0IGNoZWNrIGZvciAiVW5rbm93biIgaW4gdGhlIGJ1ZmZlciB0byBkZXRlY3QgYSBmYWlsdXJlLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX21heF9ycGlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgIGNoYXIgKmJ1ZikKQEAgLTUzOCw2ICs4MTgsMjAgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJVbmtub3duXG4iKTsKIH0KIAorLyoqCisgKiBscGZjX3VzZWRfcnBpX3Nob3c6IFJldHVybiBtYXhpbXVtIHJwaSBtaW51cyBhdmFpbGFibGUgcnBpLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBjb250YWluaW5nIHRoZSB1c2VkIHJwaSBjb3VudCBpbiBkZWNpbWFsIG9yICJVbmtub3duIi4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIENhbGxzIGxwZmNfZ2V0X2hiYV9pbmZvKCkgYXNraW5nIGZvciBqdXN0IHRoZSBtcnBpIGFuZCBhcnBpIGNvdW50cy4KKyAqIElmIGxwZmNfZ2V0X2hiYV9pbmZvKCkgcmV0dXJucyB6ZXJvIChmYWlsdXJlKSB0aGUgYnVmZmVyIHRleHQgaXMgc2V0CisgKiB0byAiVW5rbm93biIgYW5kIHRoZSBidWZmZXIgbGVuZ3RoIGlzIHJldHVybmVkLCB0aGVyZWZvcmUgdGhlIGNhbGxlcgorICogbXVzdCBjaGVjayBmb3IgIlVua25vd24iIGluIHRoZSBidWZmZXIgdG8gZGV0ZWN0IGEgZmFpbHVyZS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY191c2VkX3JwaV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgIGNoYXIgKmJ1ZikKQEAgLTU1Miw2ICs4NDYsMjAgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJVbmtub3duXG4iKTsKIH0KIAorLyoqCisgKiBscGZjX21heF94cmlfc2hvdzogUmV0dXJuIG1heGltdW0geHJpLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIG1heGltdW0geHJpIGNvdW50IGluIGRlY2ltYWwgb3IgIlVua25vd24iLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQ2FsbHMgbHBmY19nZXRfaGJhX2luZm8oKSBhc2tpbmcgZm9yIGp1c3QgdGhlIG1ycGkgY291bnQuCisgKiBJZiBscGZjX2dldF9oYmFfaW5mbygpIHJldHVybnMgemVybyAoZmFpbHVyZSkgdGhlIGJ1ZmZlciB0ZXh0IGlzIHNldAorICogdG8gIlVua25vd24iIGFuZCB0aGUgYnVmZmVyIGxlbmd0aCBpcyByZXR1cm5lZCwgdGhlcmVmb3JlIHRoZSBjYWxsZXIKKyAqIG11c3QgY2hlY2sgZm9yICJVbmtub3duIiBpbiB0aGUgYnVmZmVyIHRvIGRldGVjdCBhIGZhaWx1cmUuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfbWF4X3hyaV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgY2hhciAqYnVmKQpAQCAtNTY2LDYgKzg3NCwyMCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlVua25vd25cbiIpOwogfQogCisvKioKKyAqIGxwZmNfdXNlZF94cmlfc2hvdzogUmV0dXJuIG1heGltdW0geHBpIG1pbnVzIHRoZSBhdmFpbGFibGUgeHBpLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIHVzZWQgeHJpIGNvdW50IGluIGRlY2ltYWwgb3IgIlVua25vd24iLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQ2FsbHMgbHBmY19nZXRfaGJhX2luZm8oKSBhc2tpbmcgZm9yIGp1c3QgdGhlIG14cmkgYW5kIGF4cmkgY291bnRzLgorICogSWYgbHBmY19nZXRfaGJhX2luZm8oKSByZXR1cm5zIHplcm8gKGZhaWx1cmUpIHRoZSBidWZmZXIgdGV4dCBpcyBzZXQKKyAqIHRvICJVbmtub3duIiBhbmQgdGhlIGJ1ZmZlciBsZW5ndGggaXMgcmV0dXJuZWQsIHRoZXJlZm9yZSB0aGUgY2FsbGVyCisgKiBtdXN0IGNoZWNrIGZvciAiVW5rbm93biIgaW4gdGhlIGJ1ZmZlciB0byBkZXRlY3QgYSBmYWlsdXJlLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3VzZWRfeHJpX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgY2hhciAqYnVmKQpAQCAtNTgwLDYgKzkwMiwyMCBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlVua25vd25cbiIpOwogfQogCisvKioKKyAqIGxwZmNfbWF4X3ZwaV9zaG93OiBSZXR1cm4gbWF4aW11bSB2cGkuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgbWF4aW11bSB2cGkgY291bnQgaW4gZGVjaW1hbCBvciAiVW5rbm93biIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBDYWxscyBscGZjX2dldF9oYmFfaW5mbygpIGFza2luZyBmb3IganVzdCB0aGUgbXZwaSBjb3VudC4KKyAqIElmIGxwZmNfZ2V0X2hiYV9pbmZvKCkgcmV0dXJucyB6ZXJvIChmYWlsdXJlKSB0aGUgYnVmZmVyIHRleHQgaXMgc2V0CisgKiB0byAiVW5rbm93biIgYW5kIHRoZSBidWZmZXIgbGVuZ3RoIGlzIHJldHVybmVkLCB0aGVyZWZvcmUgdGhlIGNhbGxlcgorICogbXVzdCBjaGVjayBmb3IgIlVua25vd24iIGluIHRoZSBidWZmZXIgdG8gZGV0ZWN0IGEgZmFpbHVyZS4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19tYXhfdnBpX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICBjaGFyICpidWYpCkBAIC01OTQsNiArOTMwLDIwIEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiVW5rbm93blxuIik7CiB9CiAKKy8qKgorICogbHBmY191c2VkX3ZwaV9zaG93OiBSZXR1cm4gbWF4aW11bSB2cGkgbWludXMgdGhlIGF2YWlsYWJsZSB2cGkuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgdXNlZCB2cGkgY291bnQgaW4gZGVjaW1hbCBvciAiVW5rbm93biIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBDYWxscyBscGZjX2dldF9oYmFfaW5mbygpIGFza2luZyBmb3IganVzdCB0aGUgbXZwaSBhbmQgYXZwaSBjb3VudHMuCisgKiBJZiBscGZjX2dldF9oYmFfaW5mbygpIHJldHVybnMgemVybyAoZmFpbHVyZSkgdGhlIGJ1ZmZlciB0ZXh0IGlzIHNldAorICogdG8gIlVua25vd24iIGFuZCB0aGUgYnVmZmVyIGxlbmd0aCBpcyByZXR1cm5lZCwgdGhlcmVmb3JlIHRoZSBjYWxsZXIKKyAqIG11c3QgY2hlY2sgZm9yICJVbmtub3duIiBpbiB0aGUgYnVmZmVyIHRvIGRldGVjdCBhIGZhaWx1cmUuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfdXNlZF92cGlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICBjaGFyICpidWYpCkBAIC02MDgsNiArOTU4LDE5IEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiVW5rbm93blxuIik7CiB9CiAKKy8qKgorICogbHBmY19ucGl2X2luZm9fc2hvdzogUmV0dXJuIHRleHQgYWJvdXQgTlBJViBzdXBwb3J0IGZvciB0aGUgYWRhcHRlci4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1ZjogdGV4dCB0aGF0IG11c3QgYmUgaW50ZXJwcmV0ZWQgdG8gZGV0ZXJtaW5lIGlmIG5waXYgaXMgc3VwcG9ydGVkLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogQnVmZmVyIHdpbGwgY29udGFpbiB0ZXh0IGluZGljYXRpbmcgbnBpdiBpcyBub3Qgc3VwcG9lcnRlZCBvbiB0aGUgcG9ydCwKKyAqIHRoZSBwb3J0IGlzIGFuIE5QSVYgcGh5c2ljYWwgcG9ydCwgb3IgaXQgaXMgYW4gbnBpdiB2aXJ0dWFsIHBvcnQgd2l0aAorICogdGhlIGlkIG9mIHRoZSB2cG9ydC4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19ucGl2X2luZm9fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgY2hhciAqYnVmKQpAQCAtNjIzLDYgKzk4NiwxNyBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIk5QSVYgVmlydHVhbCAoVlBJICVkKVxuIiwgdnBvcnQtPnZwaSk7CiB9CiAKKy8qKgorICogbHBmY19wb2xsX3Nob3c6IFJldHVybiB0ZXh0IGFib3V0IHBvbGwgc3VwcG9ydCBmb3IgdGhlIGFkYXB0ZXIuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgY2ZnX3BvbGwgaW4gaGV4LgorICoKKyAqIE5vdGVzOgorICogY2ZnX3BvbGwgc2hvdWxkIGJlIGEgbHBmY19wb2xsaW5nX2ZsYWdzIHR5cGUuCisgKgorICogUmV0dXJuczogc2l6ZSBvZiBmb3JtYXR0ZWQgc3RyaW5nLgorICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfcG9sbF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJICAgICAgIGNoYXIgKmJ1ZikKQEAgLTYzNCw2ICsxMDA4LDIwIEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJSN4XG4iLCBwaGJhLT5jZmdfcG9sbCk7CiB9CiAKKy8qKgorICogbHBmY19wb2xsX3N0b3JlOiBTZXQgdGhlIHZhbHVlIG9mIGNmZ19wb2xsIGZvciB0aGUgYWRhcHRlci4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb25lIG9yIG1vcmUgbHBmY19wb2xsaW5nX2ZsYWdzIHZhbHVlcy4KKyAqIEBjb3VudDogbm90IHVzZWQuCisgKgorICogTm90ZXM6CisgKiBidWYgY29udGVudHMgY29udmVydGVkIHRvIGludGVnZXIgYW5kIGNoZWNrZWQgZm9yIGEgdmFsaWQgdmFsdWUuCisgKgorICogUmV0dXJuczoKKyAqIC1FSU5WQUwgaWYgdGhlIGJ1ZmZlciBjb25ub3QgYmUgY29udmVydGVkIG9yIGlzIG91dCBvZiByYW5nZQorICogbGVuZ3RoIG9mIHRoZSBidWYgb24gc3VjY2VzcworICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfcG9sbF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTY5Miw2ICsxMDgwLDIwIEBACiAJcmV0dXJuIHN0cmxlbihidWYpOwogfQogCisvKioKKyAqIGxwZmNfcGFyYW1fc2hvdzogUmV0dXJuIGEgY2ZnIGF0dHJpYnV0ZSB2YWx1ZSBpbiBkZWNpbWFsLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogTWFjcm8gdGhhdCBnaXZlbiBhbiBhdHRyIGUuZy4gaGJhX3F1ZXVlX2RlcHRoIGV4cGFuZHMKKyAqIGludG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBuYW1lIGxwZmNfaGJhX3F1ZXVlX2RlcHRoX3Nob3cuCisgKgorICogbHBmY18jI2F0dHIjI19zaG93OiBSZXR1cm4gdGhlIGRlY2ltYWwgdmFsdWUgb2YgYW4gYWRhcHRlcnMgY2ZnX3h4eCBmaWVsZC4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaW4gZGVjaW1hbC4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiAjZGVmaW5lIGxwZmNfcGFyYW1fc2hvdyhhdHRyKQlcCiBzdGF0aWMgc3NpemVfdCBcCiBscGZjXyMjYXR0ciMjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXApAQCAtNzA2LDYgKzExMDgsMjAgQEAKIAkJCXBoYmEtPmNmZ18jI2F0dHIpO1wKIH0KIAorLyoqCisgKiBscGZjX3BhcmFtX2hleF9zaG93OiBSZXR1cm4gYSBjZmcgYXR0cmlidXRlIHZhbHVlIGluIGhleC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE1hY3JvIHRoYXQgZ2l2ZW4gYW4gYXR0ciBlLmcuIGhiYV9xdWV1ZV9kZXB0aCBleHBhbmRzCisgKiBpbnRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgbmFtZSBscGZjX2hiYV9xdWV1ZV9kZXB0aF9zaG93CisgKgorICogbHBmY18jI2F0dHIjI19zaG93OiBSZXR1cm4gdGhlIGhleCB2YWx1ZSBvZiBhbiBhZGFwdGVycyBjZmdfeHh4IGZpZWxkLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpbiBoZXhpZGVjaW1hbC4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiAjZGVmaW5lIGxwZmNfcGFyYW1faGV4X3Nob3coYXR0cikJXAogc3RhdGljIHNzaXplX3QgXAogbHBmY18jI2F0dHIjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKQEAgLTcyMCw2ICsxMTM2LDI1IEBACiAJCQlwaGJhLT5jZmdfIyNhdHRyKTtcCiB9CiAKKy8qKgorICogbHBmY19wYXJhbV9pbml0OiBJbnRpYWxpemVzIGEgY2ZnIGF0dHJpYnV0ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE1hY3JvIHRoYXQgZ2l2ZW4gYW4gYXR0ciBlLmcuIGhiYV9xdWV1ZV9kZXB0aCBleHBhbmRzCisgKiBpbnRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgbmFtZSBscGZjX2hiYV9xdWV1ZV9kZXB0aF9pbml0LiBUaGUgbWFjcm8gYWxzbworICogdGFrZXMgYSBkZWZhdWx0IGFyZ3VtZW50LCBhIG1pbmltdW0gYW5kIG1heGltdW0gYXJndW1lbnQuCisgKgorICogbHBmY18jI2F0dHIjI19pbml0OiBJbml0aWFsaXplcyBhbiBhdHRyaWJ1dGUuCisgKiBAcGhiYTogcG9pbnRlciB0aGUgdGhlIGFkYXB0ZXIgc3RydWN0dXJlLgorICogQHZhbDogaW50ZWdlciBhdHRyaWJ1dGUgdmFsdWUuCisgKgorICogVmFsaWRhdGVzIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgdGhlbiBzZXRzIHRoZSBhZGFwdGVyIGNvbmZpZyBmaWVsZAorICogYWNjb3JkaW5nbHksIG9yIHVzZXMgdGhlIGRlZmF1bHQgaWYgb3V0IG9mIHJhbmdlIGFuZCBwcmludHMgYW4gZXJyb3IgbWVzc2FnZS4KKyAqCisgKiBSZXR1cm5zOgorICogemVybyBvbiBzdWNjZXNzCisgKiAtRUlOVkFMIGlmIGRlZmF1bHQgdXNlZAorICoqLwogI2RlZmluZSBscGZjX3BhcmFtX2luaXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAogbHBmY18jI2F0dHIjI19pbml0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHZhbCkgXApAQCAtNzM1LDYgKzExNzAsMjYgQEAKIAlyZXR1cm4gLUVJTlZBTDtcCiB9CiAKKy8qKgorICogbHBmY19wYXJhbV9zZXQ6IFNldCBhIGNmZyBhdHRyaWJ1dGUgdmFsdWUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBNYWNybyB0aGF0IGdpdmVuIGFuIGF0dHIgZS5nLiBoYmFfcXVldWVfZGVwdGggZXhwYW5kcworICogaW50byBhIGZ1bmN0aW9uIHdpdGggdGhlIG5hbWUgbHBmY19oYmFfcXVldWVfZGVwdGhfc2V0CisgKgorICogbHBmY18jI2F0dHIjI19zZXQ6IFNldHMgYW4gYXR0cmlidXRlIHZhbHVlLgorICogQHBoYmE6IHBvaW50ZXIgdGhlIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS4KKyAqIEB2YWw6IGludGVnZXIgYXR0cmlidXRlIHZhbHVlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVmFsaWRhdGVzIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgdGhlbiBzZXRzIHRoZQorICogYWRhcHRlciBjb25maWcgZmllbGQgaWYgaW4gdGhlIHZhbGlkIHJhbmdlLiBwcmludHMgZXJyb3IgbWVzc2FnZQorICogYW5kIGRvZXMgbm90IHNldCB0aGUgcGFyYW1ldGVyIGlmIGludmFsaWQuCisgKgorICogUmV0dXJuczoKKyAqIHplcm8gb24gc3VjY2VzcworICogLUVJTlZBTCBpZiB2YWwgaXMgaW52YWxpZAorICoqLwogI2RlZmluZSBscGZjX3BhcmFtX3NldChhdHRyLCBkZWZhdWx0LCBtaW52YWwsIG1heHZhbCkJXAogc3RhdGljIGludCBcCiBscGZjXyMjYXR0ciMjX3NldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGludCB2YWwpIFwKQEAgLTc0OSw2ICsxMjA0LDI3IEBACiAJcmV0dXJuIC1FSU5WQUw7XAogfQogCisvKioKKyAqIGxwZmNfcGFyYW1fc3RvcmU6IFNldCBhIHZwb3J0IGF0dHJpYnV0ZSB2YWx1ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE1hY3JvIHRoYXQgZ2l2ZW4gYW4gYXR0ciBlLmcuIGhiYV9xdWV1ZV9kZXB0aCBleHBhbmRzCisgKiBpbnRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgbmFtZSBscGZjX2hiYV9xdWV1ZV9kZXB0aF9zdG9yZS4KKyAqCisgKiBscGZjXyMjYXR0ciMjX3N0b3JlOiBTZXQgYW4gc3R0cmlidXRlIHZhbHVlLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBjb250YWlucyB0aGUgYXR0cmlidXRlIHZhbHVlIGluIGFzY2lpLgorICogQGNvdW50OiBub3QgdXNlZC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIENvbnZlcnQgdGhlIGFzY2lpIHRleHQgbnVtYmVyIHRvIGFuIGludGVnZXIsIHRoZW4KKyAqIHVzZSB0aGUgbHBmY18jI2F0dHIjI19zZXQgZnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOgorICogLUVJTlZBTCBpZiB2YWwgaXMgaW52YWxpZCBvciBscGZjXyMjYXR0ciMjX3NldCgpIGZhaWxzCisgKiBsZW5ndGggb2YgYnVmZmVyIHVwb24gc3VjY2Vzcy4KKyAqKi8KICNkZWZpbmUgbHBmY19wYXJhbV9zdG9yZShhdHRyKQlcCiBzdGF0aWMgc3NpemVfdCBcCiBscGZjXyMjYXR0ciMjX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKQEAgLTc2OCw2ICsxMjQ0LDIwIEBACiAJCXJldHVybiAtRUlOVkFMO1wKIH0KIAorLyoqCisgKiBscGZjX3Zwb3J0X3BhcmFtX3Nob3c6IFJldHVybiBkZWNpbWFsIGZvcm1hdHRlZCBjZmcgYXR0cmlidXRlIHZhbHVlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogTWFjcm8gdGhhdCBnaXZlbiBhbiBhdHRyIGUuZy4gaGJhX3F1ZXVlX2RlcHRoIGV4cGFuZHMKKyAqIGludG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBuYW1lIGxwZmNfaGJhX3F1ZXVlX2RlcHRoX3Nob3cKKyAqCisgKiBscGZjXyMjYXR0ciMjX3Nob3c6IHByaW50cyB0aGUgYXR0cmlidXRlIHZhbHVlIGluIGRlY2ltYWwuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgYXR0cmlidXRlIHZhbHVlIGluIGRlY2ltYWwuCisgKgorICogUmV0dXJuczogbGVuZ3RoIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiAjZGVmaW5lIGxwZmNfdnBvcnRfcGFyYW1fc2hvdyhhdHRyKQlcCiBzdGF0aWMgc3NpemVfdCBcCiBscGZjXyMjYXR0ciMjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXApAQCAtNzgwLDYgKzEyNzAsMjEgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgdnBvcnQtPmNmZ18jI2F0dHIpO1wKIH0KIAorLyoqCisgKiBscGZjX3Zwb3J0X3BhcmFtX2hleF9zaG93OiBSZXR1cm4gaGV4IGZvcm1hdHRlZCBhdHRyaWJ1dGUgdmFsdWUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBNYWNybyB0aGF0IGdpdmVuIGFuIGF0dHIgZS5nLgorICogaGJhX3F1ZXVlX2RlcHRoIGV4cGFuZHMgaW50byBhIGZ1bmN0aW9uIHdpdGggdGhlIG5hbWUKKyAqIGxwZmNfaGJhX3F1ZXVlX2RlcHRoX3Nob3cKKyAqCisgKiBscGZjXyMjYXR0ciMjX3Nob3c6IHByaW50cyB0aGUgYXR0cmlidXRlIHZhbHVlIGluIGhleGlkZWNpbWFsLgorICogQGRldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZSwgbm90IHVzZWQuCisgKiBAYnVmOiBvbiByZXR1cm4gY29udGFpbnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpbiBoZXhpZGVjaW1hbC4KKyAqCisgKiBSZXR1cm5zOiBsZW5ndGggb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KICNkZWZpbmUgbHBmY192cG9ydF9wYXJhbV9oZXhfc2hvdyhhdHRyKQlcCiBzdGF0aWMgc3NpemVfdCBcCiBscGZjXyMjYXR0ciMjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXApAQCAtNzkyLDYgKzEyOTcsMjQgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlI3hcbiIsIHZwb3J0LT5jZmdfIyNhdHRyKTtcCiB9CiAKKy8qKgorICogbHBmY192cG9ydF9wYXJhbV9pbml0OiBJbml0aWFsaXplIGEgdnBvcnQgY2ZnIGF0dHJpYnV0ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE1hY3JvIHRoYXQgZ2l2ZW4gYW4gYXR0ciBlLmcuIGhiYV9xdWV1ZV9kZXB0aCBleHBhbmRzCisgKiBpbnRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgbmFtZSBscGZjX2hiYV9xdWV1ZV9kZXB0aF9pbml0LiBUaGUgbWFjcm8gYWxzbworICogdGFrZXMgYSBkZWZhdWx0IGFyZ3VtZW50LCBhIG1pbmltdW0gYW5kIG1heGltdW0gYXJndW1lbnQuCisgKgorICogbHBmY18jI2F0dHIjI19pbml0OiB2YWxpZGF0ZXMgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyB0aGVuIHNldHMgdGhlCisgKiBhZGFwdGVyIGNvbmZpZyBmaWVsZCBhY2NvcmRpbmdseSwgb3IgdXNlcyB0aGUgZGVmYXVsdCBpZiBvdXQgb2YgcmFuZ2UKKyAqIGFuZCBwcmludHMgYW4gZXJyb3IgbWVzc2FnZS4KKyAqIEBwaGJhOiBwb2ludGVyIHRoZSB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUuCisgKiBAdmFsOiBpbnRlZ2VyIGF0dHJpYnV0ZSB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOgorICogemVybyBvbiBzdWNjZXNzCisgKiAtRUlOVkFMIGlmIGRlZmF1bHQgdXNlZAorICoqLwogI2RlZmluZSBscGZjX3Zwb3J0X3BhcmFtX2luaXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAogbHBmY18jI2F0dHIjI19pbml0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IHZhbCkgXApAQCAtODAxLDEyICsxMzI0LDI5IEBACiAJCXJldHVybiAwO1wKIAl9XAogCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwgXAotCQkJICIwNDQ5IGxwZmNfIiNhdHRyIiBhdHRyaWJ1dGUgY2Fubm90IGJlIHNldCB0byAlZCwgIlwKKwkJCSAiMDQyMyBscGZjXyIjYXR0ciIgYXR0cmlidXRlIGNhbm5vdCBiZSBzZXQgdG8gJWQsICJcCiAJCQkgImFsbG93ZWQgcmFuZ2UgaXMgWyIjbWludmFsIiwgIiNtYXh2YWwiXVxuIiwgdmFsKTsgXAogCXZwb3J0LT5jZmdfIyNhdHRyID0gZGVmYXVsdDtcCiAJcmV0dXJuIC1FSU5WQUw7XAogfQogCisvKioKKyAqIGxwZmNfdnBvcnRfcGFyYW1fc2V0OiBTZXQgYSB2cG9ydCBjZmcgYXR0cmlidXRlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogTWFjcm8gdGhhdCBnaXZlbiBhbiBhdHRyIGUuZy4gaGJhX3F1ZXVlX2RlcHRoIGV4cGFuZHMKKyAqIGludG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBuYW1lIGxwZmNfaGJhX3F1ZXVlX2RlcHRoX3NldAorICoKKyAqIGxwZmNfIyNhdHRyIyNfc2V0OiB2YWxpZGF0ZXMgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyB0aGVuIHNldHMgdGhlCisgKiBhZGFwdGVyIGNvbmZpZyBmaWVsZCBpZiBpbiB0aGUgdmFsaWQgcmFuZ2UuIHByaW50cyBlcnJvciBtZXNzYWdlCisgKiBhbmQgZG9lcyBub3Qgc2V0IHRoZSBwYXJhbWV0ZXIgaWYgaW52YWxpZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRoZSB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUuCisgKiBAdmFsOglpbnRlZ2VyIGF0dHJpYnV0ZSB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOgorICogemVybyBvbiBzdWNjZXNzCisgKiAtRUlOVkFMIGlmIHZhbCBpcyBpbnZhbGlkCisgKiovCiAjZGVmaW5lIGxwZmNfdnBvcnRfcGFyYW1fc2V0KGF0dHIsIGRlZmF1bHQsIG1pbnZhbCwgbWF4dmFsKQlcCiBzdGF0aWMgaW50IFwKIGxwZmNfIyNhdHRyIyNfc2V0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IHZhbCkgXApAQCAtODE2LDExICsxMzU2LDI4IEBACiAJCXJldHVybiAwO1wKIAl9XAogCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwgXAotCQkJICIwNDUwIGxwZmNfIiNhdHRyIiBhdHRyaWJ1dGUgY2Fubm90IGJlIHNldCB0byAlZCwgIlwKKwkJCSAiMDQyNCBscGZjXyIjYXR0ciIgYXR0cmlidXRlIGNhbm5vdCBiZSBzZXQgdG8gJWQsICJcCiAJCQkgImFsbG93ZWQgcmFuZ2UgaXMgWyIjbWludmFsIiwgIiNtYXh2YWwiXVxuIiwgdmFsKTsgXAogCXJldHVybiAtRUlOVkFMO1wKIH0KIAorLyoqCisgKiBscGZjX3Zwb3J0X3BhcmFtX3N0b3JlOiBTZXQgYSB2cG9ydCBhdHRyaWJ1dGUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBNYWNybyB0aGF0IGdpdmVuIGFuIGF0dHIgZS5nLiBoYmFfcXVldWVfZGVwdGgKKyAqIGV4cGFuZHMgaW50byBhIGZ1bmN0aW9uIHdpdGggdGhlIG5hbWUgbHBmY19oYmFfcXVldWVfZGVwdGhfc3RvcmUKKyAqCisgKiBscGZjXyMjYXR0ciMjX3N0b3JlOiBjb252ZXJ0IHRoZSBhc2NpaSB0ZXh0IG51bWJlciB0byBhbiBpbnRlZ2VyLCB0aGVuCisgKiB1c2UgdGhlIGxwZmNfIyNhdHRyIyNfc2V0IGZ1bmN0aW9uIHRvIHNldCB0aGUgdmFsdWUuCisgKiBAY2RldjogY2xhc3MgZGV2aWNlIHRoYXQgaXMgY29udmVydGVkIGludG8gYSBTY3NpX2hvc3QuCisgKiBAYnVmOgljb250YWlucyB0aGUgYXR0cmlidXRlIHZhbHVlIGluIGRlY2ltYWwuCisgKiBAY291bnQ6IG5vdCB1c2VkLgorICoKKyAqIFJldHVybnM6CisgKiAtRUlOVkFMIGlmIHZhbCBpcyBpbnZhbGlkIG9yIGxwZmNfIyNhdHRyIyNfc2V0KCkgZmFpbHMKKyAqIGxlbmd0aCBvZiBidWZmZXIgdXBvbiBzdWNjZXNzLgorICoqLwogI2RlZmluZSBscGZjX3Zwb3J0X3BhcmFtX3N0b3JlKGF0dHIpCVwKIHN0YXRpYyBzc2l6ZV90IFwKIGxwZmNfIyNhdHRyIyNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXApAQCAtOTQxLDYgKzE0OTgsNyBAQAogCQkgICBscGZjX29wdGlvbl9yb21fdmVyc2lvbl9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihudW1fZGlzY292ZXJlZF9wb3J0cywgU19JUlVHTywKIAkJICAgbHBmY19udW1fZGlzY292ZXJlZF9wb3J0c19zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtZW5sb19tZ210X21vZGUsIFNfSVJVR08sIGxwZmNfbWxvbWdtdF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihucG9ydF9ldnRfY250LCBTX0lSVUdPLCBscGZjX25wb3J0X2V2dF9jbnRfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobHBmY19kcnZyX3ZlcnNpb24sIFNfSVJVR08sIGxwZmNfZHJ2cl92ZXJzaW9uX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGJvYXJkX21vZGUsIFNfSVJVR08gfCBTX0lXVVNSLApAQCAtOTU4LDYgKzE1MTYsMTcgQEAKIAogc3RhdGljIGNoYXIgKmxwZmNfc29mdF93d25fa2V5ID0gIkM5OUc3MVNMODAzMkEiOwogCisvKioKKyAqIGxwZmNfc29mdF93d25fZW5hYmxlX3N0b3JlOiBBbGxvd3Mgc2V0dGluZyBvZiB0aGUgd3duIGlmIHRoZSBrZXkgaXMgdmFsaWQuCisgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IGNvbnRhaW5pbmcgdGhlIHN0cmluZyBscGZjX3NvZnRfd3duX2tleS4KKyAqIEBjb3VudDogbXVzdCBiZSBzaXplIG9mIGxwZmNfc29mdF93d25fa2V5LgorICoKKyAqIFJldHVybnM6CisgKiAtRUlOVkFMIGlmIHRoZSBidWZmZXIgZG9lcyBub3QgY29udGFpbiBscGZjX3NvZnRfd3duX2tleQorICogbGVuZ3RoIG9mIGJ1ZiBpbmRpY2F0ZXMgc3VjY2VzcworICoqLwogc3RhdGljIHNzaXplX3QKIGxwZmNfc29mdF93d25fZW5hYmxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTk5NCw2ICsxNTYzLDE0IEBACiBzdGF0aWMgREVWSUNFX0FUVFIobHBmY19zb2Z0X3d3bl9lbmFibGUsIFNfSVdVU1IsIE5VTEwsCiAJCSAgIGxwZmNfc29mdF93d25fZW5hYmxlX3N0b3JlKTsKIAorLyoqCisgKiBscGZjX3NvZnRfd3dwbl9zaG93OiBSZXR1cm4gdGhlIGNmZyBzb2Z0IHd3IHBvcnQgbmFtZSBvZiB0aGUgYWRhcHRlci4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSB3d3BuIGluIGhleGlkZWNpbWFsLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3NvZnRfd3dwbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICBjaGFyICpidWYpCkBAIC0xMDA2LDcgKzE1ODMsMTkgQEAKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGhiYS0+Y2ZnX3NvZnRfd3dwbik7CiB9CiAKLQorLyoqCisgKiBscGZjX3NvZnRfd3dwbl9zdG9yZTogU2V0IHRoZSB3dyBwb3J0IG5hbWUgb2YgdGhlIGFkYXB0ZXIuCisgKiBAZGV2IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1ZjogY29udGFpbnMgdGhlIHd3cG4gaW4gaGV4aWRlY2ltYWwuCisgKiBAY291bnQ6IG51bWJlciBvZiB3d3BuIGJ5dGVzIGluIGJ1ZgorICoKKyAqIFJldHVybnM6CisgKiAtRUFDQ0VTIGhiYSByZXNldCBub3QgZW5hYmxlZCwgYWRhcHRlciBvdmVyIHRlbXAKKyAqIC1FSU5WQUwgc29mdCB3d24gbm90IGVuYWJsZWQsIGNvdW50IGlzIGludmFsaWQsIGludmFsaWQgd3dwbiBieXRlIGludmFsaWQKKyAqIC1FSU8gZXJyb3IgdGFraW5nIGFkYXB0ZXIgb2ZmbGluZSBvciBvbmxpbmUKKyAqIHZhbHVlIG9mIGNvdW50IG9uIHN1Y2Nlc3MKKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3NvZnRfd3dwbl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtMTA4MCw2ICsxNjY5LDE0IEBACiBzdGF0aWMgREVWSUNFX0FUVFIobHBmY19zb2Z0X3d3cG4sIFNfSVJVR08gfCBTX0lXVVNSLFwKIAkJICAgbHBmY19zb2Z0X3d3cG5fc2hvdywgbHBmY19zb2Z0X3d3cG5fc3RvcmUpOwogCisvKioKKyAqIGxwZmNfc29mdF93d25uX3Nob3c6IFJldHVybiB0aGUgY2ZnIHNvZnQgd3cgbm9kZSBuYW1lIGZvciB0aGUgYWRhcHRlci4KKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSB3d25uIGluIGhleGlkZWNpbWFsLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX3NvZnRfd3dubl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICBjaGFyICpidWYpCkBAIC0xMDkwLDcgKzE2ODcsMTYgQEAKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGhiYS0+Y2ZnX3NvZnRfd3dubik7CiB9CiAKLQorLyoqCisgKiBscGZjX3NvZnRfd3dubl9zdG9yZTogc2V0cyB0aGUgd3cgbm9kZSBuYW1lIG9mIHRoZSBhZGFwdGVyLgorICogQGNkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGJ1ZjogY29udGFpbnMgdGhlIHd3IG5vZGUgbmFtZSBpbiBoZXhpZGVjaW1hbC4KKyAqIEBjb3VudDogbnVtYmVyIG9mIHd3bm4gYnl0ZXMgaW4gYnVmLgorICoKKyAqIFJldHVybnM6CisgKiAtRUlOVkFMIHNvZnQgd3duIG5vdCBlbmFibGVkLCBjb3VudCBpcyBpbnZhbGlkLCBpbnZhbGlkIHd3bm4gYnl0ZSBpbnZhbGlkCisgKiB2YWx1ZSBvZiBjb3VudCBvbiBzdWNjZXNzCisgKiovCiBzdGF0aWMgc3NpemVfdAogbHBmY19zb2Z0X3d3bm5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTExNzgsNiArMTc4NCwxNSBAQAogTU9EVUxFX1BBUk1fREVTQyhscGZjX25vZGV2X3RtbywKIAkJICJTZWNvbmRzIGRyaXZlciB3aWxsIGhvbGQgSS9PIHdhaXRpbmcgIgogCQkgImZvciBhIGRldmljZSB0byBjb21lIGJhY2siKTsKKworLyoqCisgKiBscGZjX25vZGV2X3Rtb19zaG93OiBSZXR1cm4gdGhlIGhiYSBkZXYgbG9zcyB0aW1lb3V0IHZhbHVlLgorICogQGRldjogY2xhc3MgY29udmVydGVkIHRvIGEgU2NzaV9ob3N0IHN0cnVjdHVyZS4KKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KKyAqIEBidWY6IG9uIHJldHVybiBjb250YWlucyB0aGUgZGV2IGxvc3MgdGltZW91dCBpbiBkZWNpbWFsLgorICoKKyAqIFJldHVybnM6IHNpemUgb2YgZm9ybWF0dGVkIHN0cmluZy4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX25vZGV2X3Rtb19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICBjaGFyICpidWYpCkBAIC0xMTg5LDYgKzE4MDQsMjEgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwJdnBvcnQtPmNmZ19kZXZsb3NzX3Rtbyk7CiB9CiAKKy8qKgorICogbHBmY19ub2Rldl90bW9faW5pdDogU2V0IHRoZSBoYmEgbm9kZXYgdGltZW91dCB2YWx1ZS4KKyAqIEB2cG9ydDogbHBmYyB2cG9ydCBzdHJ1Y3R1cmUgcG9pbnRlci4KKyAqIEB2YWw6IGNvbnRhaW5zIHRoZSBub2RldiB0aW1lb3V0IHZhbHVlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSWYgdGhlIGRldmxvc3MgdG1vIGlzIGFscmVhZHkgc2V0IHRoZW4gbm9kZXYgdG1vIGlzIHNldCB0byBkZXZsb3NzIHRtbywKKyAqIGEga2VybmVsIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCBhbmQgemVybyBpcyByZXR1cm5lZC4KKyAqIEVsc2UgaWYgdmFsIGlzIGluIHJhbmdlIHRoZW4gbm9kZXYgdG1vIGFuZCBkZXZsb3NzIHRtbyBhcmUgc2V0IHRvIHZhbC4KKyAqIE90aGVyd2lzZSBub2RldiB0bW8gaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLgorICoKKyAqIFJldHVybnM6CisgKiB6ZXJvIGlmIGFscmVhZHkgc2V0IG9yIGlmIHZhbCBpcyBpbiByYW5nZQorICogLUVJTlZBTCB2YWwgb3V0IG9mIHJhbmdlCisgKiovCiBzdGF0aWMgaW50CiBscGZjX25vZGV2X3Rtb19pbml0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IHZhbCkKIHsKQEAgLTExOTYsNyArMTgyNiw3IEBACiAJCXZwb3J0LT5jZmdfbm9kZXZfdG1vID0gdnBvcnQtPmNmZ19kZXZsb3NzX3RtbzsKIAkJaWYgKHZhbCAhPSBMUEZDX0RFRl9ERVZMT1NTX1RNTykKIAkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkJICIwNDAyIElnbm9yaW5nIG5vZGV2X3RtbyBtb2R1bGUgIgorCQkJCQkgIjA0MDcgSWdub3Jpbmcgbm9kZXZfdG1vIG1vZHVsZSAiCiAJCQkJCSAicGFyYW1ldGVyIGJlY2F1c2UgZGV2bG9zc190bW8gaXMgIgogCQkJCQkgInNldC5cbiIpOwogCQlyZXR1cm4gMDsKQEAgLTEyMTUsNiArMTg0NSwxMyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCisvKioKKyAqIGxwZmNfdXBkYXRlX3Jwb3J0X2Rldmxvc3NfdG1vOiBVcGRhdGUgZGV2IGxvc3MgdG1vIHZhbHVlLgorICogQHZwb3J0OiBscGZjIHZwb3J0IHN0cnVjdHVyZSBwb2ludGVyLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVXBkYXRlIGFsbCB0aGUgbmRscCdzIGRldiBsb3NzIHRtbyB3aXRoIHRoZSB2cG9ydCBkZXZsb3NzIHRtbyB2YWx1ZS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3VwZGF0ZV9ycG9ydF9kZXZsb3NzX3RtbyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0xMjI5LDYgKzE4NjYsMjEgQEAKIAlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiB9CiAKKy8qKgorICogbHBmY19ub2Rldl90bW9fc2V0OiBTZXQgdGhlIHZwb3J0IG5vZGV2IHRtbyBhbmQgZGV2bG9zcyB0bW8gdmFsdWVzLgorICogQHZwb3J0OiBscGZjIHZwb3J0IHN0cnVjdHVyZSBwb2ludGVyLgorICogQHZhbDogY29udGFpbnMgdGhlIHRtbyB2YWx1ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIElmIHRoZSBkZXZsb3NzIHRtbyBpcyBhbHJlYWR5IHNldCBvciB0aGUgdnBvcnQgZGV2IGxvc3MgdG1vIGhhcyBjaGFuZ2VkCisgKiB0aGVuIGEga2VybmVsIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCBhbmQgemVybyBpcyByZXR1cm5lZC4KKyAqIEVsc2UgaWYgdmFsIGlzIGluIHJhbmdlIHRoZW4gbm9kZXYgdG1vIGFuZCBkZXZsb3NzIHRtbyBhcmUgc2V0IHRvIHZhbC4KKyAqIE90aGVyd2lzZSBub2RldiB0bW8gaXMgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLgorICoKKyAqIFJldHVybnM6CisgKiB6ZXJvIGlmIGFscmVhZHkgc2V0IG9yIGlmIHZhbCBpcyBpbiByYW5nZQorICogLUVJTlZBTCB2YWwgb3V0IG9mIHJhbmdlCisgKiovCiBzdGF0aWMgaW50CiBscGZjX25vZGV2X3Rtb19zZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKQogewpAQCAtMTI2OSw2ICsxOTIxLDIxIEBACiBscGZjX3Zwb3J0X3BhcmFtX2luaXQoZGV2bG9zc190bW8sIExQRkNfREVGX0RFVkxPU1NfVE1PLAogCQkgICAgICBMUEZDX01JTl9ERVZMT1NTX1RNTywgTFBGQ19NQVhfREVWTE9TU19UTU8pCiBscGZjX3Zwb3J0X3BhcmFtX3Nob3coZGV2bG9zc190bW8pCisKKy8qKgorICogbHBmY19kZXZsb3NzX3Rtb19zZXQ6IFNldHMgdnBvcnQgbm9kZXYgdG1vLCBkZXZsb3NzIHRtbyB2YWx1ZXMsIGNoYW5nZWQgYml0LgorICogQHZwb3J0OiBscGZjIHZwb3J0IHN0cnVjdHVyZSBwb2ludGVyLgorICogQHZhbDogY29udGFpbnMgdGhlIHRtbyB2YWx1ZS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIElmIHZhbCBpcyBpbiBhIHZhbGlkIHJhbmdlIHRoZW4gc2V0IHRoZSB2cG9ydCBub2RldiB0bW8sCisgKiBkZXZsb3NzIHRtbywgYWxzbyBzZXQgdGhlIHZwb3J0IGRldiBsb3NzIHRtbyBjaGFuZ2VkIGZsYWcuCisgKiBFbHNlIGEga2VybmVsIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZC4KKyAqCisgKiBSZXR1cm5zOgorICogemVybyBpZiB2YWwgaXMgaW4gcmFuZ2UKKyAqIC1FSU5WQUwgdmFsIG91dCBvZiByYW5nZQorICoqLwogc3RhdGljIGludAogbHBmY19kZXZsb3NzX3Rtb19zZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKQogewpAQCAtMTM2NiwxMiArMjAzMywyNyBAQAogCQkgIlJlc3RyaWN0IHZpcnR1YWwgcG9ydHMgbG9naW4gdG8gcmVtb3RlIGluaXRpYXRvcnMuIik7CiBscGZjX3Zwb3J0X3BhcmFtX3Nob3cocmVzdHJpY3RfbG9naW4pOwogCisvKioKKyAqIGxwZmNfcmVzdHJpY3RfbG9naW5faW5pdDogU2V0IHRoZSB2cG9ydCByZXN0cmljdCBsb2dpbiBmbGFnLgorICogQHZwb3J0OiBscGZjIHZwb3J0IHN0cnVjdHVyZSBwb2ludGVyLgorICogQHZhbDogY29udGFpbnMgdGhlIHJlc3RyaWN0IGxvZ2luIHZhbHVlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSWYgdmFsIGlzIG5vdCBpbiBhIHZhbGlkIHJhbmdlIHRoZW4gbG9nIGEga2VybmVsIGVycm9yIG1lc3NhZ2UgYW5kIHNldAorICogdGhlIHZwb3J0IHJlc3RyaWN0IGxvZ2luIHRvIG9uZS4KKyAqIElmIHRoZSBwb3J0IHR5cGUgaXMgcGh5c2ljYWwgY2xlYXIgdGhlIHJlc3RyaWN0IGxvZ2luIGZsYWcgYW5kIHJldHVybi4KKyAqIEVsc2Ugc2V0IHRoZSByZXN0cmljdCBsb2dpbiBmbGFnIHRvIHZhbC4KKyAqCisgKiBSZXR1cm5zOgorICogemVybyBpZiB2YWwgaXMgaW4gcmFuZ2UKKyAqIC1FSU5WQUwgdmFsIG91dCBvZiByYW5nZQorICoqLwogc3RhdGljIGludAogbHBmY19yZXN0cmljdF9sb2dpbl9pbml0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IHZhbCkKIHsKIAlpZiAodmFsIDwgMCB8fCB2YWwgPiAxKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkgIjA0NDkgbHBmY19yZXN0cmljdF9sb2dpbiBhdHRyaWJ1dGUgY2Fubm90ICIKKwkJCQkgIjA0MjIgbHBmY19yZXN0cmljdF9sb2dpbiBhdHRyaWJ1dGUgY2Fubm90ICIKIAkJCQkgImJlIHNldCB0byAlZCwgYWxsb3dlZCByYW5nZSBpcyBbMCwgMV1cbiIsCiAJCQkJIHZhbCk7CiAJCXZwb3J0LT5jZmdfcmVzdHJpY3RfbG9naW4gPSAxOwpAQCAtMTM4NSwxMiArMjA2NywyOCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfcmVzdHJpY3RfbG9naW5fc2V0OiBTZXQgdGhlIHZwb3J0IHJlc3RyaWN0IGxvZ2luIGZsYWcuCisgKiBAdnBvcnQ6IGxwZmMgdnBvcnQgc3RydWN0dXJlIHBvaW50ZXIuCisgKiBAdmFsOiBjb250YWlucyB0aGUgcmVzdHJpY3QgbG9naW4gdmFsdWUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBJZiB2YWwgaXMgbm90IGluIGEgdmFsaWQgcmFuZ2UgdGhlbiBsb2cgYSBrZXJuZWwgZXJyb3IgbWVzc2FnZSBhbmQgc2V0CisgKiB0aGUgdnBvcnQgcmVzdHJpY3QgbG9naW4gdG8gb25lLgorICogSWYgdGhlIHBvcnQgdHlwZSBpcyBwaHlzaWNhbCBhbmQgdGhlIHZhbCBpcyBub3QgemVybyBsb2cgYSBrZXJuZWwKKyAqIGVycm9yIG1lc3NhZ2UsIGNsZWFyIHRoZSByZXN0cmljdCBsb2dpbiBmbGFnIGFuZCByZXR1cm4gemVyby4KKyAqIEVsc2Ugc2V0IHRoZSByZXN0cmljdCBsb2dpbiBmbGFnIHRvIHZhbC4KKyAqCisgKiBSZXR1cm5zOgorICogemVybyBpZiB2YWwgaXMgaW4gcmFuZ2UKKyAqIC1FSU5WQUwgdmFsIG91dCBvZiByYW5nZQorICoqLwogc3RhdGljIGludAogbHBmY19yZXN0cmljdF9sb2dpbl9zZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgdmFsKQogewogCWlmICh2YWwgPCAwIHx8IHZhbCA+IDEpIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSAiMDQ1MCBscGZjX3Jlc3RyaWN0X2xvZ2luIGF0dHJpYnV0ZSBjYW5ub3QgIgorCQkJCSAiMDQyNSBscGZjX3Jlc3RyaWN0X2xvZ2luIGF0dHJpYnV0ZSBjYW5ub3QgIgogCQkJCSAiYmUgc2V0IHRvICVkLCBhbGxvd2VkIHJhbmdlIGlzIFswLCAxXVxuIiwKIAkJCQkgdmFsKTsKIAkJdnBvcnQtPmNmZ19yZXN0cmljdF9sb2dpbiA9IDE7CkBAIC0xNDQxLDYgKzIxMzksMjMgQEAKICMgU2V0IGxvb3AgbW9kZSBpZiB5b3Ugd2FudCB0byBydW4gYXMgYW4gTkxfUG9ydC4gVmFsdWUgcmFuZ2UgaXMgWzAsMHg2XS4KICMgRGVmYXVsdCB2YWx1ZSBpcyAwLgogKi8KKworLyoqCisgKiBscGZjX3RvcG9sb2d5X3NldDogU2V0IHRoZSBhZGFwdGVycyB0b3BvbG9neSBmaWVsZC4KKyAqIEBwaGJhOiBscGZjX2hiYSBwb2ludGVyLgorICogQHZhbDogdG9wb2xvZ3kgdmFsdWUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBJZiB2YWwgaXMgaW4gYSB2YWxpZCByYW5nZSB0aGVuIHNldCB0aGUgYWRhcHRlcidzIHRvcG9sb2d5IGZpZWxkIGFuZAorICogaXNzdWUgYSBsaXA7IGlmIHRoZSBsaXAgZmFpbHMgcmVzZXQgdGhlIHRvcG9sb2d5IHRvIHRoZSBvbGQgdmFsdWUuCisgKgorICogSWYgdGhlIHZhbHVlIGlzIG5vdCBpbiByYW5nZSBsb2cgYSBrZXJuZWwgZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuIGFuIGVycm9yLgorICoKKyAqIFJldHVybnM6CisgKiB6ZXJvIGlmIHZhbCBpcyBpbiByYW5nZSBhbmQgbGlwIG9rYXkKKyAqIG5vbi16ZXJvIHJldHVybiB2YWx1ZSBmcm9tIGxwZmNfaXNzdWVfbGlwKCkKKyAqIC1FSU5WQUwgdmFsIG91dCBvZiByYW5nZQorICoqLwogc3RhdGljIGludAogbHBmY190b3BvbG9neV9zZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgdmFsKQogewpAQCAtMTQ2OSw2ICsyMTg0LDMzNSBAQAogc3RhdGljIERFVklDRV9BVFRSKGxwZmNfdG9wb2xvZ3ksIFNfSVJVR08gfCBTX0lXVVNSLAogCQlscGZjX3RvcG9sb2d5X3Nob3csIGxwZmNfdG9wb2xvZ3lfc3RvcmUpOwogCisKKy8qKgorICogbHBmY19zdGF0X2RhdGFfY3RybF9zdG9yZTogd3JpdGUgY2FsbCBiYWNrIGZvciBscGZjX3N0YXRfZGF0YV9jdHJsCisgKiAgc3lzZnMgZmlsZS4KKyAqIEBkZXY6IFBvaW50ZXIgdG8gY2xhc3MgZGV2aWNlLgorICogQGJ1ZjogRGF0YSBidWZmZXIuCisgKiBAY291bnQ6IFNpemUgb2YgdGhlIGRhdGEgYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0IGNhbGxlZCB3aGVuIGFuIHVzZXIgd3JpdGUgdG8gdGhlIGxwZmNfc3RhdF9kYXRhX2N0cmwKKyAqIHN5c2ZzIGZpbGUuIFRoaXMgZnVuY3Rpb24gcGFyc2UgdGhlIGNvbW1hbmQgd3JpdHRlbiB0byB0aGUgc3lzZnMgZmlsZQorICogYW5kIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uLiBUaGVzZSBjb21tYW5kcyBhcmUgdXNlZCBmb3IgY29udHJvbGxpbmcKKyAqIGRyaXZlciBzdGF0aXN0aWNhbCBkYXRhIGNvbGxlY3Rpb24uCisgKiBGb2xsb3dpbmcgYXJlIHRoZSBjb21tYW5kIHRoaXMgZnVuY3Rpb24gaGFuZGxlcy4KKyAqCisgKiAgICBzZXRidWNrZXQgPGJ1Y2tldF90eXBlPiA8YmFzZT4gPHN0ZXA+CisgKgkJCSAgICAgICA9IFNldCB0aGUgbGF0ZW5jeSBidWNrZXRzLgorICogICAgZGVzdHJveWJ1Y2tldCAgICAgICAgICAgID0gZGVzdHJveSBhbGwgdGhlIGJ1Y2tldHMuCisgKiAgICBzdGFydCAgICAgICAgICAgICAgICAgICAgPSBzdGFydCBkYXRhIGNvbGxlY3Rpb24KKyAqICAgIHN0b3AgICAgICAgICAgICAgICAgICAgICA9IHN0b3AgZGF0YSBjb2xsZWN0aW9uCisgKiAgICByZXNldCAgICAgICAgICAgICAgICAgICAgPSByZXNldCB0aGUgY29sbGVjdGVkIGRhdGEKKyAqKi8KK3N0YXRpYyBzc2l6ZV90CitscGZjX3N0YXRfZGF0YV9jdHJsX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOworI2RlZmluZSBMUEZDX01BWF9EQVRBX0NUUkxfTEVOIDEwMjQKKwlzdGF0aWMgY2hhciBidWNrZXRfZGF0YVtMUEZDX01BWF9EQVRBX0NUUkxfTEVOXTsKKwl1bnNpZ25lZCBsb25nIGk7CisJY2hhciAqc3RyX3B0ciwgKnRva2VuOworCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOworCXN0cnVjdCBTY3NpX0hvc3QgKnZfc2hvc3Q7CisJY2hhciAqYnVja2V0X3R5cGVfc3RyLCAqYmFzZV9zdHIsICpzdGVwX3N0cjsKKwl1bnNpZ25lZCBsb25nIGJhc2UsIHN0ZXAsIGJ1Y2tldF90eXBlOworCisJaWYgKCFzdHJuY21wKGJ1ZiwgInNldGJ1Y2tldCIsIHN0cmxlbigic2V0YnVja2V0IikpKSB7CisJCWlmIChzdHJsZW4oYnVmKSA+IExQRkNfTUFYX0RBVEFfQ1RSTF9MRU4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlzdHJjcHkoYnVja2V0X2RhdGEsIGJ1Zik7CisJCXN0cl9wdHIgPSAmYnVja2V0X2RhdGFbMF07CisJCS8qIElnbm9yZSB0aGlzIHRva2VuIC0gdGhpcyBpcyBjb21tYW5kIHRva2VuICovCisJCXRva2VuID0gc3Ryc2VwKCZzdHJfcHRyLCAiXHQgIik7CisJCWlmICghdG9rZW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlidWNrZXRfdHlwZV9zdHIgPSBzdHJzZXAoJnN0cl9wdHIsICJcdCAiKTsKKwkJaWYgKCFidWNrZXRfdHlwZV9zdHIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoIXN0cm5jbXAoYnVja2V0X3R5cGVfc3RyLCAibGluZWFyIiwgc3RybGVuKCJsaW5lYXIiKSkpCisJCQlidWNrZXRfdHlwZSA9IExQRkNfTElORUFSX0JVQ0tFVDsKKwkJZWxzZSBpZiAoIXN0cm5jbXAoYnVja2V0X3R5cGVfc3RyLCAicG93ZXIyIiwgc3RybGVuKCJwb3dlcjIiKSkpCisJCQlidWNrZXRfdHlwZSA9IExQRkNfUE9XRVIyX0JVQ0tFVDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYmFzZV9zdHIgPSBzdHJzZXAoJnN0cl9wdHIsICJcdCAiKTsKKwkJaWYgKCFiYXNlX3N0cikKKwkJCXJldHVybiAtRUlOVkFMOworCQliYXNlID0gc2ltcGxlX3N0cnRvdWwoYmFzZV9zdHIsIE5VTEwsIDApOworCisJCXN0ZXBfc3RyID0gc3Ryc2VwKCZzdHJfcHRyLCAiXHQgIik7CisJCWlmICghc3RlcF9zdHIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3RlcCA9IHNpbXBsZV9zdHJ0b3VsKHN0ZXBfc3RyLCBOVUxMLCAwKTsKKwkJaWYgKCFzdGVwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJLyogQmxvY2sgdGhlIGRhdGEgY29sbGVjdGlvbiBmb3IgZXZlcnkgdnBvcnQgKi8KKwkJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKKwkJaWYgKHZwb3J0cyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBpICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJCXZfc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKKwkJCXNwaW5fbG9ja19pcnEodl9zaG9zdC0+aG9zdF9sb2NrKTsKKwkJCS8qIEJsb2NrIGFuZCByZXNldCBkYXRhIGNvbGxlY3Rpb24gKi8KKwkJCXZwb3J0c1tpXS0+c3RhdF9kYXRhX2Jsb2NrZWQgPSAxOworCQkJaWYgKHZwb3J0c1tpXS0+c3RhdF9kYXRhX2VuYWJsZWQpCisJCQkJbHBmY192cG9ydF9yZXNldF9zdGF0X2RhdGEodnBvcnRzW2ldKTsKKwkJCXNwaW5fdW5sb2NrX2lycSh2X3Nob3N0LT5ob3N0X2xvY2spOworCQl9CisKKwkJLyogU2V0IHRoZSBidWNrZXQgYXR0cmlidXRlcyAqLworCQlwaGJhLT5idWNrZXRfdHlwZSA9IGJ1Y2tldF90eXBlOworCQlwaGJhLT5idWNrZXRfYmFzZSA9IGJhc2U7CisJCXBoYmEtPmJ1Y2tldF9zdGVwID0gc3RlcDsKKworCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cGkgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQkJdl9zaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCisJCQkvKiBVbmJsb2NrIGRhdGEgY29sbGVjdGlvbiAqLworCQkJc3Bpbl9sb2NrX2lycSh2X3Nob3N0LT5ob3N0X2xvY2spOworCQkJdnBvcnRzW2ldLT5zdGF0X2RhdGFfYmxvY2tlZCA9IDA7CisJCQlzcGluX3VubG9ja19pcnEodl9zaG9zdC0+aG9zdF9sb2NrKTsKKwkJfQorCQlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOworCQlyZXR1cm4gc3RybGVuKGJ1Zik7CisJfQorCisJaWYgKCFzdHJuY21wKGJ1ZiwgImRlc3Ryb3lidWNrZXQiLCBzdHJsZW4oImRlc3Ryb3lidWNrZXQiKSkpIHsKKwkJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKKwkJaWYgKHZwb3J0cyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBpICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJCXZfc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKKwkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQl2cG9ydHNbaV0tPnN0YXRfZGF0YV9ibG9ja2VkID0gMTsKKwkJCWxwZmNfZnJlZV9idWNrZXQodnBvcnQpOworCQkJdnBvcnQtPnN0YXRfZGF0YV9lbmFibGVkID0gMDsKKwkJCXZwb3J0c1tpXS0+c3RhdF9kYXRhX2Jsb2NrZWQgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQl9CisJCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CisJCXBoYmEtPmJ1Y2tldF90eXBlID0gTFBGQ19OT19CVUNLRVQ7CisJCXBoYmEtPmJ1Y2tldF9iYXNlID0gMDsKKwkJcGhiYS0+YnVja2V0X3N0ZXAgPSAwOworCQlyZXR1cm4gc3RybGVuKGJ1Zik7CisJfQorCisJaWYgKCFzdHJuY21wKGJ1ZiwgInN0YXJ0Iiwgc3RybGVuKCJzdGFydCIpKSkgeworCQkvKiBJZiBubyBidWNrZXRzIGNvbmZpZ3VyZWQgcmV0dXJuIGVycm9yICovCisJCWlmIChwaGJhLT5idWNrZXRfdHlwZSA9PSBMUEZDX05PX0JVQ0tFVCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQlpZiAodnBvcnQtPnN0YXRfZGF0YV9lbmFibGVkKSB7CisJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQlyZXR1cm4gc3RybGVuKGJ1Zik7CisJCX0KKwkJbHBmY19hbGxvY19idWNrZXQodnBvcnQpOworCQl2cG9ydC0+c3RhdF9kYXRhX2VuYWJsZWQgPSAxOworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCXJldHVybiBzdHJsZW4oYnVmKTsKKwl9CisKKwlpZiAoIXN0cm5jbXAoYnVmLCAic3RvcCIsIHN0cmxlbigic3RvcCIpKSkgeworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQlpZiAodnBvcnQtPnN0YXRfZGF0YV9lbmFibGVkID09IDApIHsKKwkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCXJldHVybiBzdHJsZW4oYnVmKTsKKwkJfQorCQlscGZjX2ZyZWVfYnVja2V0KHZwb3J0KTsKKwkJdnBvcnQtPnN0YXRfZGF0YV9lbmFibGVkID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQlyZXR1cm4gc3RybGVuKGJ1Zik7CisJfQorCisJaWYgKCFzdHJuY21wKGJ1ZiwgInJlc2V0Iiwgc3RybGVuKCJyZXNldCIpKSkgeworCQlpZiAoKHBoYmEtPmJ1Y2tldF90eXBlID09IExQRkNfTk9fQlVDS0VUKQorCQkJfHwgIXZwb3J0LT5zdGF0X2RhdGFfZW5hYmxlZCkKKwkJCXJldHVybiBzdHJsZW4oYnVmKTsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJdnBvcnQtPnN0YXRfZGF0YV9ibG9ja2VkID0gMTsKKwkJbHBmY192cG9ydF9yZXNldF9zdGF0X2RhdGEodnBvcnQpOworCQl2cG9ydC0+c3RhdF9kYXRhX2Jsb2NrZWQgPSAwOworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCXJldHVybiBzdHJsZW4oYnVmKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworLyoqCisgKiBscGZjX3N0YXRfZGF0YV9jdHJsX3Nob3c6IFJlYWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yCisgKiAgIGxwZmNfc3RhdF9kYXRhX2N0cmwgc3lzZnMgZmlsZS4KKyAqIEBkZXY6IFBvaW50ZXIgdG8gY2xhc3MgZGV2aWNlIG9iamVjdC4KKyAqIEBidWY6IERhdGEgYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIHJlYWQgY2FsbCBiYWNrIGZ1bmN0aW9uIGZvcgorICogbHBmY19zdGF0X2RhdGFfY3RybCBzeXNmcyBmaWxlLiBUaGlzIGZ1bmN0aW9uIHJlcG9ydCB0aGUKKyAqIGN1cnJlbnQgc3RhdGlzdGljYWwgZGF0YSBjb2xsZWN0aW9uIHN0YXRlLgorICoqLworc3RhdGljIHNzaXplX3QKK2xwZmNfc3RhdF9kYXRhX2N0cmxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKwlpbnQgaW5kZXggPSAwOworCWludCBpOworCWNoYXIgKmJ1Y2tldF90eXBlOworCXVuc2lnbmVkIGxvbmcgYnVja2V0X3ZhbHVlOworCisJc3dpdGNoIChwaGJhLT5idWNrZXRfdHlwZSkgeworCWNhc2UgTFBGQ19MSU5FQVJfQlVDS0VUOgorCQlidWNrZXRfdHlwZSA9ICJsaW5lYXIiOworCQlicmVhazsKKwljYXNlIExQRkNfUE9XRVIyX0JVQ0tFVDoKKwkJYnVja2V0X3R5cGUgPSAicG93ZXIyIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnVja2V0X3R5cGUgPSAiTm8gQnVja2V0IjsKKwkJYnJlYWs7CisJfQorCisJc3ByaW50ZigmYnVmW2luZGV4XSwgIlN0YXRpc3RpY2FsIERhdGEgZW5hYmxlZCA6JWQsICIKKwkJImJsb2NrZWQgOiVkLCBCdWNrZXQgdHlwZSA6JXMsIEJ1Y2tldCBiYXNlIDolZCwiCisJCSIgQnVja2V0IHN0ZXAgOiVkXG5MYXRlbmN5IFJhbmdlcyA6IiwKKwkJdnBvcnQtPnN0YXRfZGF0YV9lbmFibGVkLCB2cG9ydC0+c3RhdF9kYXRhX2Jsb2NrZWQsCisJCWJ1Y2tldF90eXBlLCBwaGJhLT5idWNrZXRfYmFzZSwgcGhiYS0+YnVja2V0X3N0ZXApOworCWluZGV4ID0gc3RybGVuKGJ1Zik7CisJaWYgKHBoYmEtPmJ1Y2tldF90eXBlICE9IExQRkNfTk9fQlVDS0VUKSB7CisJCWZvciAoaSA9IDA7IGkgPCBMUEZDX01BWF9CVUNLRVRfQ09VTlQ7IGkrKykgeworCQkJaWYgKHBoYmEtPmJ1Y2tldF90eXBlID09IExQRkNfTElORUFSX0JVQ0tFVCkKKwkJCQlidWNrZXRfdmFsdWUgPSBwaGJhLT5idWNrZXRfYmFzZSArCisJCQkJCXBoYmEtPmJ1Y2tldF9zdGVwICogaTsKKwkJCWVsc2UKKwkJCQlidWNrZXRfdmFsdWUgPSBwaGJhLT5idWNrZXRfYmFzZSArCisJCQkJKDEgPDwgaSkgKiBwaGJhLT5idWNrZXRfc3RlcDsKKworCQkJaWYgKGluZGV4ICsgMTAgPiBQQUdFX1NJWkUpCisJCQkJYnJlYWs7CisJCQlzcHJpbnRmKCZidWZbaW5kZXhdLCAiJTA4bGQgIiwgYnVja2V0X3ZhbHVlKTsKKwkJCWluZGV4ID0gc3RybGVuKGJ1Zik7CisJCX0KKwl9CisJc3ByaW50ZigmYnVmW2luZGV4XSwgIlxuIik7CisJcmV0dXJuIHN0cmxlbihidWYpOworfQorCisvKgorICogU3lzZnMgYXR0cmlidXRlIHRvIGNvbnRyb2wgdGhlIHN0YXRpc3RpY2FsIGRhdGEgY29sbGVjdGlvbi4KKyAqLworc3RhdGljIERFVklDRV9BVFRSKGxwZmNfc3RhdF9kYXRhX2N0cmwsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBscGZjX3N0YXRfZGF0YV9jdHJsX3Nob3csIGxwZmNfc3RhdF9kYXRhX2N0cmxfc3RvcmUpOworCisvKgorICogbHBmY19kcnZyX3N0YXRfZGF0YTogc3lzZnMgYXR0ciB0byBnZXQgZHJpdmVyIHN0YXRpc3RpY2FsIGRhdGEuCisgKi8KKworLyoKKyAqIEVhY2ggQnVja2V0IHRha2VzIDExIGNoYXJhY3RlcnMgYW5kIDEgbmV3IGxpbmUgKyAxNyBieXRlcyBXV04KKyAqIGZvciBlYWNoIHRhcmdldC4KKyAqLworI2RlZmluZSBTVEFUX0RBVEFfU0laRV9QRVJfVEFSR0VUKE5VTV9CVUNLRVRTKSAoKE5VTV9CVUNLRVRTKSAqIDExICsgMTgpCisjZGVmaW5lIE1BWF9TVEFUX0RBVEFfU0laRV9QRVJfVEFSR0VUIFwKKwlTVEFUX0RBVEFfU0laRV9QRVJfVEFSR0VUKExQRkNfTUFYX0JVQ0tFVF9DT1VOVCkKKworCisvKioKKyAqIHN5c2ZzX2RydnJfc3RhdF9kYXRhX3JlYWQ6IFJlYWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGxwZmNfZHJ2cl9zdGF0X2RhdGEKKyAqICBzeXNmcyBhdHRyaWJ1dGUuCisgKiBAa29iajogUG9pbnRlciB0byB0aGUga2VybmVsIG9iamVjdAorICogQGJpbl9hdHRyOiBBdHRyaWJ1dGUgb2JqZWN0CisgKiBAYnVmZjogQnVmZmVyIHBvaW50ZXIKKyAqIEBvZmY6IEZpbGUgb2Zmc2V0CisgKiBAY291bnQ6IEJ1ZmZlciBzaXplCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgcmVhZCBjYWxsIGJhY2sgZnVuY3Rpb24gZm9yIGxwZmNfZHJ2cl9zdGF0X2RhdGEKKyAqIHN5c2ZzIGZpbGUuIFRoaXMgZnVuY3Rpb24gZXhwb3J0IHRoZSBzdGF0aXN0aWNhbCBkYXRhIHRvIHVzZXIKKyAqIGFwcGxpY2F0aW9ucy4KKyAqKi8KK3N0YXRpYyBzc2l6ZV90CitzeXNmc19kcnZyX3N0YXRfZGF0YV9yZWFkKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCisJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLAorCQlrb2JqKTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKwlpbnQgaSA9IDAsIGluZGV4ID0gMDsKKwl1bnNpZ25lZCBsb25nIG5wb3J0X2luZGV4OworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTDsKKwlucG9ydF9pbmRleCA9ICh1bnNpZ25lZCBsb25nKW9mZiAvCisJCU1BWF9TVEFUX0RBVEFfU0laRV9QRVJfVEFSR0VUOworCisJaWYgKCF2cG9ydC0+c3RhdF9kYXRhX2VuYWJsZWQgfHwgdnBvcnQtPnN0YXRfZGF0YV9ibG9ja2VkCisJCXx8IChwaGJhLT5idWNrZXRfdHlwZSA9PSBMUEZDX05PX0JVQ0tFVCkpCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5kbHAsICZ2cG9ydC0+ZmNfbm9kZXMsIG5scF9saXN0cCkgeworCQlpZiAoIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkgfHwgIW5kbHAtPmxhdF9kYXRhKQorCQkJY29udGludWU7CisKKwkJaWYgKG5wb3J0X2luZGV4ID4gMCkgeworCQkJbnBvcnRfaW5kZXgtLTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChpbmRleCArIE1BWF9TVEFUX0RBVEFfU0laRV9QRVJfVEFSR0VUKQorCQkJPiBjb3VudCkKKwkJCWJyZWFrOworCisJCWlmICghbmRscC0+bGF0X2RhdGEpCisJCQljb250aW51ZTsKKworCQkvKiBQcmludCB0aGUgV1dOICovCisJCXNwcmludGYoJmJ1ZltpbmRleF0sICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeDoiLAorCQkJbmRscC0+bmxwX3BvcnRuYW1lLnUud3duWzBdLAorCQkJbmRscC0+bmxwX3BvcnRuYW1lLnUud3duWzFdLAorCQkJbmRscC0+bmxwX3BvcnRuYW1lLnUud3duWzJdLAorCQkJbmRscC0+bmxwX3BvcnRuYW1lLnUud3duWzNdLAorCQkJbmRscC0+bmxwX3BvcnRuYW1lLnUud3duWzRdLAorCQkJbmRscC0+bmxwX3BvcnRuYW1lLnUud3duWzVdLAorCQkJbmRscC0+bmxwX3BvcnRuYW1lLnUud3duWzZdLAorCQkJbmRscC0+bmxwX3BvcnRuYW1lLnUud3duWzddKTsKKworCQlpbmRleCA9IHN0cmxlbihidWYpOworCisJCWZvciAoaSA9IDA7IGkgPCBMUEZDX01BWF9CVUNLRVRfQ09VTlQ7IGkrKykgeworCQkJc3ByaW50ZigmYnVmW2luZGV4XSwgIiUwMTB1LCIsCisJCQkJbmRscC0+bGF0X2RhdGFbaV0uY21kX2NvdW50KTsKKwkJCWluZGV4ID0gc3RybGVuKGJ1Zik7CisJCX0KKwkJc3ByaW50ZigmYnVmW2luZGV4XSwgIlxuIik7CisJCWluZGV4ID0gc3RybGVuKGJ1Zik7CisJfQorCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwlyZXR1cm4gaW5kZXg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBzeXNmc19kcnZyX3N0YXRfZGF0YV9hdHRyID0geworCS5hdHRyID0geworCQkubmFtZSA9ICJscGZjX2RydnJfc3RhdF9kYXRhIiwKKwkJLm1vZGUgPSBTX0lSVVNSLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5zaXplID0gTFBGQ19NQVhfVEFSR0VUICogTUFYX1NUQVRfREFUQV9TSVpFX1BFUl9UQVJHRVQsCisJLnJlYWQgPSBzeXNmc19kcnZyX3N0YXRfZGF0YV9yZWFkLAorCS53cml0ZSA9IE5VTEwsCit9OworCiAvKgogIyBscGZjX2xpbmtfc3BlZWQ6IExpbmsgc3BlZWQgc2VsZWN0aW9uIGZvciBpbml0aWFsaXppbmcgdGhlIEZpYnJlIENoYW5uZWwKICMgY29ubmVjdGlvbi4KQEAgLTE0NzksNiArMjUyMywyNCBAQAogIyAgICAgICA4ICA9IDggR2lnYWJhdWQKICMgVmFsdWUgcmFuZ2UgaXMgWzAsOF0uIERlZmF1bHQgdmFsdWUgaXMgMC4KICovCisKKy8qKgorICogbHBmY19saW5rX3NwZWVkX3NldDogU2V0IHRoZSBhZGFwdGVycyBsaW5rIHNwZWVkLgorICogQHBoYmE6IGxwZmNfaGJhIHBvaW50ZXIuCisgKiBAdmFsOiBsaW5rIHNwZWVkIHZhbHVlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSWYgdmFsIGlzIGluIGEgdmFsaWQgcmFuZ2UgdGhlbiBzZXQgdGhlIGFkYXB0ZXIncyBsaW5rIHNwZWVkIGZpZWxkIGFuZAorICogaXNzdWUgYSBsaXA7IGlmIHRoZSBsaXAgZmFpbHMgcmVzZXQgdGhlIGxpbmsgc3BlZWQgdG8gdGhlIG9sZCB2YWx1ZS4KKyAqCisgKiBOb3RlczoKKyAqIElmIHRoZSB2YWx1ZSBpcyBub3QgaW4gcmFuZ2UgbG9nIGEga2VybmVsIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBhbiBlcnJvci4KKyAqCisgKiBSZXR1cm5zOgorICogemVybyBpZiB2YWwgaXMgaW4gcmFuZ2UgYW5kIGxpcCBva2F5LgorICogbm9uLXplcm8gcmV0dXJuIHZhbHVlIGZyb20gbHBmY19pc3N1ZV9saXAoKQorICogLUVJTlZBTCB2YWwgb3V0IG9mIHJhbmdlCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2xpbmtfc3BlZWRfc2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHZhbCkKIHsKQEAgLTE1MTMsNiArMjU3NSwyMyBAQAogbW9kdWxlX3BhcmFtKGxwZmNfbGlua19zcGVlZCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobHBmY19saW5rX3NwZWVkLCAiU2VsZWN0IGxpbmsgc3BlZWQiKTsKIGxwZmNfcGFyYW1fc2hvdyhsaW5rX3NwZWVkKQorCisvKioKKyAqIGxwZmNfbGlua19zcGVlZF9pbml0OiBTZXQgdGhlIGFkYXB0ZXJzIGxpbmsgc3BlZWQuCisgKiBAcGhiYTogbHBmY19oYmEgcG9pbnRlci4KKyAqIEB2YWw6IGxpbmsgc3BlZWQgdmFsdWUuCisgKgorICogRGVzY3JpcHRpb246CisgKiBJZiB2YWwgaXMgaW4gYSB2YWxpZCByYW5nZSB0aGVuIHNldCB0aGUgYWRhcHRlcidzIGxpbmsgc3BlZWQgZmllbGQuCisgKgorICogTm90ZXM6CisgKiBJZiB0aGUgdmFsdWUgaXMgbm90IGluIHJhbmdlIGxvZyBhIGtlcm5lbCBlcnJvciBtZXNzYWdlLCBjbGVhciB0aGUgbGluaworICogc3BlZWQgYW5kIHJldHVybiBhbiBlcnJvci4KKyAqCisgKiBSZXR1cm5zOgorICogemVybyBpZiB2YWwgc2F2ZWQuCisgKiAtRUlOVkFMIHZhbCBvdXQgb2YgcmFuZ2UKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfbGlua19zcGVlZF9pbml0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHZhbCkKIHsKQEAgLTE1MjIsNyArMjYwMSw3IEBACiAJCXJldHVybiAwOwogCX0KIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAotCQkJIjA0NTQgbHBmY19saW5rX3NwZWVkIGF0dHJpYnV0ZSBjYW5ub3QgIgorCQkJIjA0MDUgbHBmY19saW5rX3NwZWVkIGF0dHJpYnV0ZSBjYW5ub3QgIgogCQkJImJlIHNldCB0byAlZCwgYWxsb3dlZCB2YWx1ZXMgYXJlICIKIAkJCSJbIkxQRkNfTElOS19TUEVFRF9TVFJJTkciXVxuIiwgdmFsKTsKIAlwaGJhLT5jZmdfbGlua19zcGVlZCA9IDA7CkBAIC0xNTQ4LDYgKzI2MjcsNDggQEAKIAkJICAgIlVzZSBBRElTQyBvbiByZWRpc2NvdmVyeSB0byBhdXRoZW50aWNhdGUgRkNQIGRldmljZXMiKTsKIAogLyoKKyMgbHBmY19tYXhfc2NzaWNtcGxfdGltZTogVXNlIHNjc2kgY29tbWFuZCBjb21wbGV0aW9uIHRpbWUgdG8gY29udHJvbCBJL08gcXVldWUKKyMgZGVwdGguIERlZmF1bHQgdmFsdWUgaXMgMC4gV2hlbiB0aGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgemVybyB0aGUKKyMgU0NTSSBjb21tYW5kIGNvbXBsZXRpb24gdGltZSBpcyBub3QgdXNlZCBmb3IgY29udHJvbGxpbmcgSS9PIHF1ZXVlIGRlcHRoLiBXaGVuCisjIHRoZSBwYXJhbWV0ZXIgaXMgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUsIHRoZSBJL08gcXVldWUgZGVwdGggaXMgY29udHJvbGxlZAorIyB0byBsaW1pdCB0aGUgSS9PIGNvbXBsZXRpb24gdGltZSB0byB0aGUgcGFyYW1ldGVyIHZhbHVlLgorIyBUaGUgdmFsdWUgaXMgc2V0IGluIG1pbGxpc2Vjb25kcy4KKyovCitzdGF0aWMgaW50IGxwZmNfbWF4X3Njc2ljbXBsX3RpbWU7Cittb2R1bGVfcGFyYW0obHBmY19tYXhfc2NzaWNtcGxfdGltZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobHBmY19tYXhfc2NzaWNtcGxfdGltZSwKKwkiVXNlIGNvbW1hbmQgY29tcGxldGlvbiB0aW1lIHRvIGNvbnRyb2wgcXVldWUgZGVwdGgiKTsKK2xwZmNfdnBvcnRfcGFyYW1fc2hvdyhtYXhfc2NzaWNtcGxfdGltZSk7CitscGZjX3Zwb3J0X3BhcmFtX2luaXQobWF4X3Njc2ljbXBsX3RpbWUsIDAsIDAsIDYwMDAwKTsKK3N0YXRpYyBpbnQKK2xwZmNfbWF4X3Njc2ljbXBsX3RpbWVfc2V0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsICpuZXh0X25kbHA7CisKKwlpZiAodmFsID09IHZwb3J0LT5jZmdfbWF4X3Njc2ljbXBsX3RpbWUpCisJCXJldHVybiAwOworCWlmICgodmFsIDwgMCkgfHwgKHZhbCA+IDYwMDAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJdnBvcnQtPmNmZ19tYXhfc2NzaWNtcGxfdGltZSA9IHZhbDsKKworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgJnZwb3J0LT5mY19ub2RlcywgbmxwX2xpc3RwKSB7CisJCWlmICghTkxQX0NIS19OT0RFX0FDVChuZGxwKSkKKwkJCWNvbnRpbnVlOworCQlpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfVU5VU0VEX05PREUpCisJCQljb250aW51ZTsKKwkJbmRscC0+Y21kX3FkZXB0aCA9IExQRkNfTUFYX1RHVF9RREVQVEg7CisJfQorCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KK2xwZmNfdnBvcnRfcGFyYW1fc3RvcmUobWF4X3Njc2ljbXBsX3RpbWUpOworc3RhdGljIERFVklDRV9BVFRSKGxwZmNfbWF4X3Njc2ljbXBsX3RpbWUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBscGZjX21heF9zY3NpY21wbF90aW1lX3Nob3csCisJCSAgIGxwZmNfbWF4X3Njc2ljbXBsX3RpbWVfc3RvcmUpOworCisvKgogIyBscGZjX2FjazA6IFVzZSBBQ0swLCBpbnN0ZWFkIG9mIEFDSzEgZm9yIGNsYXNzIDIgYWNrbm93bGVkZ2VtZW50LiBWYWx1ZQogIyByYW5nZSBpcyBbMCwxXS4gRGVmYXVsdCB2YWx1ZSBpcyAwLgogKi8KQEAgLTE2MjMsMTIgKzI3NDQsMTIgQEAKIC8qCiAjIGxwZmNfdXNlX21zaTogVXNlIE1TSSAoTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzKSBpbiBzeXN0ZW1zIHRoYXQKICMJCXN1cHBvcnQgdGhpcyBmZWF0dXJlCi0jICAgICAgIDAgID0gTVNJIGRpc2FibGVkIChkZWZhdWx0KQorIyAgICAgICAwICA9IE1TSSBkaXNhYmxlZAogIyAgICAgICAxICA9IE1TSSBlbmFibGVkCi0jCTIgID0gTVNJLVggZW5hYmxlZAotIyBWYWx1ZSByYW5nZSBpcyBbMCwyXS4gRGVmYXVsdCB2YWx1ZSBpcyAwLgorIyAgICAgICAyICA9IE1TSS1YIGVuYWJsZWQgKGRlZmF1bHQpCisjIFZhbHVlIHJhbmdlIGlzIFswLDJdLiBEZWZhdWx0IHZhbHVlIGlzIDIuCiAqLwotTFBGQ19BVFRSX1IodXNlX21zaSwgMCwgMCwgMiwgIlVzZSBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKDEpIG9yICIKK0xQRkNfQVRUUl9SKHVzZV9tc2ksIDIsIDAsIDIsICJVc2UgTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzICgxKSBvciAiCiAJICAgICJNU0ktWCAoMiksIGlmIHBvc3NpYmxlIik7CiAKIC8qCkBAIC0xNjY4LDYgKzI3ODksNyBAQAogCSZkZXZfYXR0cl9vcHRpb25fcm9tX3ZlcnNpb24sCiAJJmRldl9hdHRyX2xpbmtfc3RhdGUsCiAJJmRldl9hdHRyX251bV9kaXNjb3ZlcmVkX3BvcnRzLAorCSZkZXZfYXR0cl9tZW5sb19tZ210X21vZGUsCiAJJmRldl9hdHRyX2xwZmNfZHJ2cl92ZXJzaW9uLAogCSZkZXZfYXR0cl9scGZjX3RlbXBfc2Vuc29yLAogCSZkZXZfYXR0cl9scGZjX2xvZ192ZXJib3NlLApAQCAtMTcwOSw2ICsyODMxLDggQEAKIAkmZGV2X2F0dHJfbHBmY19lbmFibGVfaGJhX3Jlc2V0LAogCSZkZXZfYXR0cl9scGZjX2VuYWJsZV9oYmFfaGVhcnRiZWF0LAogCSZkZXZfYXR0cl9scGZjX3NnX3NlZ19jbnQsCisJJmRldl9hdHRyX2xwZmNfbWF4X3Njc2ljbXBsX3RpbWUsCisJJmRldl9hdHRyX2xwZmNfc3RhdF9kYXRhX2N0cmwsCiAJTlVMTCwKIH07CiAKQEAgLTE3MzEsOSArMjg1NSwyOSBAQAogCSZkZXZfYXR0cl9ucG9ydF9ldnRfY250LAogCSZkZXZfYXR0cl9ucGl2X2luZm8sCiAJJmRldl9hdHRyX2xwZmNfZW5hYmxlX2RhX2lkLAorCSZkZXZfYXR0cl9scGZjX21heF9zY3NpY21wbF90aW1lLAorCSZkZXZfYXR0cl9scGZjX3N0YXRfZGF0YV9jdHJsLAogCU5VTEwsCiB9OwogCisvKioKKyAqIHN5c2ZzX2N0bHJlZ193cml0ZTogV3JpdGUgbWV0aG9kIGZvciB3cml0aW5nIHRvIGN0bHJlZy4KKyAqIEBrb2JqOiBrZXJuZWwga29iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBrZXJuZWwgY2xhc3MgZGV2aWNlLgorICogQGJpbl9hdHRyOiBrZXJuZWwgYXR0cmlidXRlcyBwYXNzZWQgdG8gdXMuCisgKiBAYnVmOiBjb250YWlucyB0aGUgZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBhZGFwdGVyIElPUkVHIHNwYWNlLgorICogQG9mZjogb2Zmc2V0IGludG8gYnVmZmVyIHRvIGJlZ2lubmluZyBvZiBkYXRhLgorICogQGNvdW50OiBieXRlcyB0byB0cmFuc2Zlci4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEFjY2Vzc2VkIHZpYSAvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0eHh4L2N0bHJlZy4KKyAqIFVzZXMgdGhlIGFkYXB0ZXIgaW8gY29udHJvbCByZWdpc3RlcnMgdG8gc2VuZCBidWYgY29udGVudHMgdG8gdGhlIGFkYXB0ZXIuCisgKgorICogUmV0dXJuczoKKyAqIC1FUkFOR0Ugb2ZmIGFuZCBjb3VudCBjb21ibyBvdXQgb2YgcmFuZ2UKKyAqIC1FSU5WQUwgb2ZmLCBjb3VudCBvciBidWZmIGFkZHJlc3MgaW52YWxpZAorICogLUVQRVJNIGFkYXB0ZXIgaXMgb2ZmbGluZQorICogdmFsdWUgb2YgY291bnQsIGJ1ZiBjb250ZW50cyB3cml0dGVuCisgKiovCiBzdGF0aWMgc3NpemVfdAogc3lzZnNfY3RscmVnX3dyaXRlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCiAJCSAgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQpAQCAtMTc2Niw2ICsyOTEwLDIzIEBACiAJcmV0dXJuIGNvdW50OwogfQogCisvKioKKyAqIHN5c2ZzX2N0bHJlZ19yZWFkOiBSZWFkIG1ldGhvZCBmb3IgcmVhZGluZyBmcm9tIGN0bHJlZy4KKyAqIEBrb2JqOiBrZXJuZWwga29iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBrZXJuZWwgY2xhc3MgZGV2aWNlLgorICogQGJpbl9hdHRyOiBrZXJuZWwgYXR0cmlidXRlcyBwYXNzZWQgdG8gdXMuCisgKiBAYnVmOiBpZiBzdWNjZXNmdWwgY29udGFpbnMgdGhlIGRhdGEgZnJvbSB0aGUgYWRhcHRlciBJT1JFRyBzcGFjZS4KKyAqIEBvZmY6IG9mZnNldCBpbnRvIGJ1ZmZlciB0byBiZWdpbm5pbmcgb2YgZGF0YS4KKyAqIEBjb3VudDogYnl0ZXMgdG8gdHJhbnNmZXIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBBY2Nlc3NlZCB2aWEgL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdHh4eC9jdGxyZWcuCisgKiBVc2VzIHRoZSBhZGFwdGVyIGlvIGNvbnRyb2wgcmVnaXN0ZXJzIHRvIHJlYWQgZGF0YSBpbnRvIGJ1Zi4KKyAqCisgKiBSZXR1cm5zOgorICogLUVSQU5HRSBvZmYgYW5kIGNvdW50IGNvbWJvIG91dCBvZiByYW5nZQorICogLUVJTlZBTCBvZmYsIGNvdW50IG9yIGJ1ZmYgYWRkcmVzcyBpbnZhbGlkCisgKiB2YWx1ZSBvZiBjb3VudCwgYnVmIGNvbnRlbnRzIHJlYWQKKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBzeXNmc19jdGxyZWdfcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAogCQkgIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQpAQCAtMTgxMCw3ICsyOTcxLDEwIEBACiAJLndyaXRlID0gc3lzZnNfY3RscmVnX3dyaXRlLAogfTsKIAotCisvKioKKyAqIHN5c2ZzX21ib3hfaWRsZTogZnJlZXMgdGhlIHN5c2ZzIG1haWxib3guCisgKiBAcGhiYTogbHBmY19oYmEgcG9pbnRlcgorICoqLwogc3RhdGljIHZvaWQKIHN5c2ZzX21ib3hfaWRsZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0xODI0LDYgKzI5ODgsMjcgQEAKIAl9CiB9CiAKKy8qKgorICogc3lzZnNfbWJveF93cml0ZTogV3JpdGUgbWV0aG9kIGZvciB3cml0aW5nIGluZm9ybWF0aW9uIHZpYSBtYm94LgorICogQGtvYmo6IGtlcm5lbCBrb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGtlcm5lbCBjbGFzcyBkZXZpY2UuCisgKiBAYmluX2F0dHI6IGtlcm5lbCBhdHRyaWJ1dGVzIHBhc3NlZCB0byB1cy4KKyAqIEBidWY6IGNvbnRhaW5zIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gdG8gc3lzZnMgbWJveC4KKyAqIEBvZmY6IG9mZnNldCBpbnRvIGJ1ZmZlciB0byBiZWdpbm5pbmcgb2YgZGF0YS4KKyAqIEBjb3VudDogYnl0ZXMgdG8gdHJhbnNmZXIuCisgKgorICogRGVzY3JpcHRpb246CisgKiBBY2Nlc3NlZCB2aWEgL3N5cy9jbGFzcy9zY3NpX2hvc3QvaG9zdHh4eC9tYm94LgorICogVXNlcyB0aGUgc3lzZnMgbWJveCB0byBzZW5kIGJ1ZiBjb250ZW50cyB0byB0aGUgYWRhcHRlci4KKyAqCisgKiBSZXR1cm5zOgorICogLUVSQU5HRSBvZmYgYW5kIGNvdW50IGNvbWJvIG91dCBvZiByYW5nZQorICogLUVJTlZBTCBvZmYsIGNvdW50IG9yIGJ1ZmYgYWRkcmVzcyBpbnZhbGlkCisgKiB6ZXJvIGlmIGNvdW50IGlzIHplcm8KKyAqIC1FUEVSTSBhZGFwdGVyIGlzIG9mZmxpbmUKKyAqIC1FTk9NRU0gZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG1haWwgYm94CisgKiAtRUFHQUlOIG9mZnNldCwgc3RhdGUgb3IgbWJveCBpcyBOVUxMCisgKiBjb3VudCBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQKKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBzeXNmc19tYm94X3dyaXRlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCiAJCSBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKQEAgLTE4NzgsNiArMzA2MywyOSBAQAogCXJldHVybiBjb3VudDsKIH0KIAorLyoqCisgKiBzeXNmc19tYm94X3JlYWQ6IFJlYWQgbWV0aG9kIGZvciByZWFkaW5nIGluZm9ybWF0aW9uIHZpYSBtYm94LgorICogQGtvYmo6IGtlcm5lbCBrb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGtlcm5lbCBjbGFzcyBkZXZpY2UuCisgKiBAYmluX2F0dHI6IGtlcm5lbCBhdHRyaWJ1dGVzIHBhc3NlZCB0byB1cy4KKyAqIEBidWY6IGNvbnRhaW5zIHRoZSBkYXRhIHRvIGJlIHJlYWQgZnJvbSBzeXNmcyBtYm94LgorICogQG9mZjogb2Zmc2V0IGludG8gYnVmZmVyIHRvIGJlZ2lubmluZyBvZiBkYXRhLgorICogQGNvdW50OiBieXRlcyB0byB0cmFuc2Zlci4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEFjY2Vzc2VkIHZpYSAvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0eHh4L21ib3guCisgKiBVc2VzIHRoZSBzeXNmcyBtYm94IHRvIHJlY2VpdmUgZGF0YSBmcm9tIHRvIHRoZSBhZGFwdGVyLgorICoKKyAqIFJldHVybnM6CisgKiAtRVJBTkdFIG9mZiBncmVhdGVyIHRoYW4gbWFpbGJveCBjb21tYW5kIHNpemUKKyAqIC1FSU5WQUwgb2ZmLCBjb3VudCBvciBidWZmIGFkZHJlc3MgaW52YWxpZAorICogemVybyBpZiBvZmYgYW5kIGNvdW50IGFyZSB6ZXJvCisgKiAtRUFDQ0VTIGFkYXB0ZXIgb3ZlciB0ZW1wCisgKiAtRVBFUk0gZ2FyYmFnZSBjYW4gdmFsdWUgdG8gY2F0Y2ggYSBtdWx0aXR1ZGUgb2YgZXJyb3JzCisgKiAtRUFHQUlOIG1hbmFnZW1lbnQgSU8gbm90IHBlcm1pdHRlZCwgc3RhdGUgb3Igb2ZmIGVycm9yCisgKiAtRVRJTUUgbWFpbGJveCB0aW1lb3V0CisgKiAtRU5PREVWIG1haWxib3ggZXJyb3IKKyAqIGNvdW50IG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZAorICoqLwogc3RhdGljIHNzaXplX3QKIHN5c2ZzX21ib3hfcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAogCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKQEAgLTE5NTQsNiArMzE2Miw4IEBACiAJCWNhc2UgTUJYX0RFTF9MRF9FTlRSWToKIAkJY2FzZSBNQlhfU0VUX1ZBUklBQkxFOgogCQljYXNlIE1CWF9XUklURV9XV046CisJCWNhc2UgTUJYX1BPUlRfQ0FQQUJJTElUSUVTOgorCQljYXNlIE1CWF9QT1JUX0lPVl9DT05UUk9MOgogCQkJYnJlYWs7CiAJCWNhc2UgTUJYX1JFQURfU1BBUk02NDoKIAkJY2FzZSBNQlhfUkVBRF9MQToKQEAgLTE5NzgsMTcgKzMxODgsMTUgQEAKIAkJLyogSWYgSEJBIGVuY291bnRlcmVkIGFuIGVycm9yIGF0dGVudGlvbiwgYWxsb3cgb25seSBEVU1QCiAJCSAqIG9yIFJFU1RBUlQgbWFpbGJveCBjb21tYW5kcyB1bnRpbCB0aGUgSEJBIGlzIHJlc3RhcnRlZC4KIAkJICovCi0JCWlmICgocGhiYS0+cHBvcnQtPnN0b3BwZWQpICYmCi0JCQkocGhiYS0+c3lzZnNfbWJveC5tYm94LT5tYi5tYnhDb21tYW5kICE9Ci0JCQkJTUJYX0RVTVBfTUVNT1JZICYmCi0JCQkgcGhiYS0+c3lzZnNfbWJveC5tYm94LT5tYi5tYnhDb21tYW5kICE9Ci0JCQkJTUJYX1JFU1RBUlQgJiYKLQkJCSBwaGJhLT5zeXNmc19tYm94Lm1ib3gtPm1iLm1ieENvbW1hbmQgIT0KLQkJCQlNQlhfV1JJVEVfVlBBUk1TKSkgewotCQkJc3lzZnNfbWJveF9pZGxlKHBoYmEpOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJCXJldHVybiAtRVBFUk07Ci0JCX0KKwkJaWYgKHBoYmEtPnBwb3J0LT5zdG9wcGVkICYmCisJCSAgICBwaGJhLT5zeXNmc19tYm94Lm1ib3gtPm1iLm1ieENvbW1hbmQgIT0gTUJYX0RVTVBfTUVNT1JZICYmCisJCSAgICBwaGJhLT5zeXNmc19tYm94Lm1ib3gtPm1iLm1ieENvbW1hbmQgIT0gTUJYX1JFU1RBUlQgJiYKKwkJICAgIHBoYmEtPnN5c2ZzX21ib3gubWJveC0+bWIubWJ4Q29tbWFuZCAhPSBNQlhfV1JJVEVfVlBBUk1TICYmCisJCSAgICBwaGJhLT5zeXNmc19tYm94Lm1ib3gtPm1iLm1ieENvbW1hbmQgIT0gTUJYX1dSSVRFX1dXTikKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19NQk9YLAorCQkJCQkiMTI1OSBtYm94OiBJc3N1ZWQgbWFpbGJveCBjbWQgIgorCQkJCQkiMHgleCB3aGlsZSBpbiBzdG9wcGVkIHN0YXRlLlxuIiwKKwkJCQkJcGhiYS0+c3lzZnNfbWJveC5tYm94LT5tYi5tYnhDb21tYW5kKTsKIAogCQlwaGJhLT5zeXNmc19tYm94Lm1ib3gtPnZwb3J0ID0gdnBvcnQ7CiAKQEAgLTIwNTksNiArMzI2NywxNCBAQAogCS53cml0ZSA9IHN5c2ZzX21ib3hfd3JpdGUsCiB9OwogCisvKioKKyAqIGxwZmNfYWxsb2Nfc3lzZnNfYXR0cjogQ3JlYXRlcyB0aGUgY3RscmVnIGFuZCBtYm94IGVudHJpZXMuCisgKiBAdnBvcnQ6IGFkZHJlc3Mgb2YgbHBmYyB2cG9ydCBzdHJ1Y3R1cmUuCisgKgorICogUmV0dXJuIGNvZGVzOgorICogemVybyBvbiBzdWNjZXNzCisgKiBlcnJvciByZXR1cm4gY29kZSBmcm9tIHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgpCisgKiovCiBpbnQKIGxwZmNfYWxsb2Nfc3lzZnNfYXR0cihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0yMDc1LDE4ICszMjkxLDMwIEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9yZW1vdmVfY3RscmVnX2F0dHI7CiAKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmc2hvc3QtPnNob3N0X2Rldi5rb2JqLAorCQkJCSAgICAgICZzeXNmc19kcnZyX3N0YXRfZGF0YV9hdHRyKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3JlbW92ZV9tYm94X2F0dHI7CisKIAlyZXR1cm4gMDsKK291dF9yZW1vdmVfbWJveF9hdHRyOgorCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmc2hvc3QtPnNob3N0X2Rldi5rb2JqLCAmc3lzZnNfbWJveF9hdHRyKTsKIG91dF9yZW1vdmVfY3RscmVnX2F0dHI6CiAJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZzaG9zdC0+c2hvc3RfZGV2LmtvYmosICZzeXNmc19jdGxyZWdfYXR0cik7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQogCisvKioKKyAqIGxwZmNfZnJlZV9zeXNmc19hdHRyOiBSZW1vdmVzIHRoZSBjdGxyZWcgYW5kIG1ib3ggZW50cmllcy4KKyAqIEB2cG9ydDogYWRkcmVzcyBvZiBscGZjIHZwb3J0IHN0cnVjdHVyZS4KKyAqKi8KIHZvaWQKIGxwZmNfZnJlZV9zeXNmc19hdHRyKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7Ci0KKwlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnNob3N0LT5zaG9zdF9kZXYua29iaiwKKwkJJnN5c2ZzX2RydnJfc3RhdF9kYXRhX2F0dHIpOwogCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmc2hvc3QtPnNob3N0X2Rldi5rb2JqLCAmc3lzZnNfbWJveF9hdHRyKTsKIAlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnNob3N0LT5zaG9zdF9kZXYua29iaiwgJnN5c2ZzX2N0bHJlZ19hdHRyKTsKIH0KQEAgLTIwOTYsNiArMzMyNCwxMCBAQAogICogRHluYW1pYyBGQyBIb3N0IEF0dHJpYnV0ZXMgU3VwcG9ydAogICovCiAKKy8qKgorICogbHBmY19nZXRfaG9zdF9wb3J0X2lkOiBDb3B5IHRoZSB2cG9ydCBESUQgaW50byB0aGUgc2NzaSBob3N0IHBvcnQgaWQuCisgKiBAc2hvc3Q6IGtlcm5lbCBzY3NpIGhvc3QgcG9pbnRlci4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2dldF9ob3N0X3BvcnRfaWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CkBAIC0yMTA1LDYgKzMzMzcsMTAgQEAKIAlmY19ob3N0X3BvcnRfaWQoc2hvc3QpID0gdnBvcnQtPmZjX215RElEOwogfQogCisvKioKKyAqIGxwZmNfZ2V0X2hvc3RfcG9ydF90eXBlOiBTZXQgdGhlIHZhbHVlIG9mIHRoZSBzY3NpIGhvc3QgcG9ydCB0eXBlLgorICogQHNob3N0OiBrZXJuZWwgc2NzaSBob3N0IHBvaW50ZXIuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19nZXRfaG9zdF9wb3J0X3R5cGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CkBAIC0yMTMzLDYgKzMzNjksMTAgQEAKIAlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiB9CiAKKy8qKgorICogbHBmY19nZXRfaG9zdF9wb3J0X3N0YXRlOiBTZXQgdGhlIHZhbHVlIG9mIHRoZSBzY3NpIGhvc3QgcG9ydCBzdGF0ZS4KKyAqIEBzaG9zdDoga2VybmVsIHNjc2kgaG9zdCBwb2ludGVyLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfZ2V0X2hvc3RfcG9ydF9zdGF0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKQEAgLTIxNjcsNiArMzQwNywxMCBAQAogCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIH0KIAorLyoqCisgKiBscGZjX2dldF9ob3N0X3NwZWVkOiBTZXQgdGhlIHZhbHVlIG9mIHRoZSBzY3NpIGhvc3Qgc3BlZWQuCisgKiBAc2hvc3Q6IGtlcm5lbCBzY3NpIGhvc3QgcG9pbnRlci4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2dldF9ob3N0X3NwZWVkKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewpAQCAtMjE5OSw2ICszNDQzLDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogfQogCisvKioKKyAqIGxwZmNfZ2V0X2hvc3RfZmFicmljX25hbWU6IFNldCB0aGUgdmFsdWUgb2YgdGhlIHNjc2kgaG9zdCBmYWJyaWMgbmFtZS4KKyAqIEBzaG9zdDoga2VybmVsIHNjc2kgaG9zdCBwb2ludGVyLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfZ2V0X2hvc3RfZmFicmljX25hbWUgKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewpAQCAtMjIyMSw2ICszNDY5LDE4IEBACiAJZmNfaG9zdF9mYWJyaWNfbmFtZShzaG9zdCkgPSBub2RlX25hbWU7CiB9CiAKKy8qKgorICogbHBmY19nZXRfc3RhdHM6IFJldHVybiBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWRhcHRlci4KKyAqIEBzaG9zdDoga2VybmVsIHNjc2kgaG9zdCBwb2ludGVyLgorICoKKyAqIE5vdGVzOgorICogTlVMTCBvbiBlcnJvciBmb3IgbGluayBkb3duLCBubyBtYm94IHBvb2wsIHNsaTIgYWN0aXZlLAorICogbWFuYWdlbWVudCBub3QgYWxsb3dlZCwgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IsIG9yIG1ib3ggZXJyb3IuCisgKgorICogUmV0dXJuczoKKyAqIE5VTEwgZm9yIGVycm9yCisgKiBhZGRyZXNzIG9mIHRoZSBhZGFwdGVyIGhvc3Qgc3RhdGlzdGljcworICoqLwogc3RhdGljIHN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgKgogbHBmY19nZXRfc3RhdHMoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CkBAIC0yMzM0LDYgKzM1OTQsMTAgQEAKIAlyZXR1cm4gaHM7CiB9CiAKKy8qKgorICogbHBmY19yZXNldF9zdGF0czogQ29weSB0aGUgYWRhcHRlciBsaW5rIHN0YXRzIGluZm9ybWF0aW9uLgorICogQHNob3N0OiBrZXJuZWwgc2NzaSBob3N0IHBvaW50ZXIuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19yZXNldF9zdGF0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKQEAgLTI0MTEsNiArMzY3NSwxNCBAQAogICogYXJlIG5vIHN5c2ZzIGhhbmRsZXJzIGZvciBsaW5rX2Rvd25fdG1vLgogICovCiAKKy8qKgorICogbHBmY19nZXRfbm9kZV9ieV90YXJnZXQ6IFJldHVybiB0aGUgbm9kZWxpc3QgZm9yIGEgdGFyZ2V0LgorICogQHN0YXJnZXQ6IGtlcm5lbCBzY3NpIHRhcmdldCBwb2ludGVyLgorICoKKyAqIFJldHVybnM6CisgKiBhZGRyZXNzIG9mIHRoZSBub2RlIGxpc3QgaWYgZm91bmQKKyAqIE5VTEwgdGFyZ2V0IG5vdCBmb3VuZAorICoqLwogc3RhdGljIHN0cnVjdCBscGZjX25vZGVsaXN0ICoKIGxwZmNfZ2V0X25vZGVfYnlfdGFyZ2V0KHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKIHsKQEAgLTI0MzIsNiArMzcwNCwxMCBAQAogCXJldHVybiBOVUxMOwogfQogCisvKioKKyAqIGxwZmNfZ2V0X3N0YXJnZXRfcG9ydF9pZDogU2V0IHRoZSB0YXJnZXQgcG9ydCBpZCB0byB0aGUgbmRscCBESUQgb3IgLTEuCisgKiBAc3RhcmdldDoga2VybmVsIHNjc2kgdGFyZ2V0IHBvaW50ZXIuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19nZXRfc3RhcmdldF9wb3J0X2lkKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKIHsKQEAgLTI0NDAsNiArMzcxNiwxMiBAQAogCWZjX3N0YXJnZXRfcG9ydF9pZChzdGFyZ2V0KSA9IG5kbHAgPyBuZGxwLT5ubHBfRElEIDogLTE7CiB9CiAKKy8qKgorICogbHBmY19nZXRfc3RhcmdldF9ub2RlX25hbWU6IFNldCB0aGUgdGFyZ2V0IG5vZGUgbmFtZS4KKyAqIEBzdGFyZ2V0OiBrZXJuZWwgc2NzaSB0YXJnZXQgcG9pbnRlci4KKyAqCisgKiBEZXNjcmlwdGlvbjogU2V0IHRoZSB0YXJnZXQgbm9kZSBuYW1lIHRvIHRoZSBuZGxwIG5vZGUgbmFtZSB3d24gb3IgemVyby4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2dldF9zdGFyZ2V0X25vZGVfbmFtZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCiB7CkBAIC0yNDQ5LDYgKzM3MzEsMTIgQEAKIAkJbmRscCA/IHd3bl90b191NjQobmRscC0+bmxwX25vZGVuYW1lLnUud3duKSA6IDA7CiB9CiAKKy8qKgorICogbHBmY19nZXRfc3RhcmdldF9wb3J0X25hbWU6IFNldCB0aGUgdGFyZ2V0IHBvcnQgbmFtZS4KKyAqIEBzdGFyZ2V0OiBrZXJuZWwgc2NzaSB0YXJnZXQgcG9pbnRlci4KKyAqCisgKiBEZXNjcmlwdGlvbjogIHNldCB0aGUgdGFyZ2V0IHBvcnQgbmFtZSB0byB0aGUgbmRscCBwb3J0IG5hbWUgd3duIG9yIHplcm8uCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19nZXRfc3RhcmdldF9wb3J0X25hbWUoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQogewpAQCAtMjQ1OCw2ICszNzQ2LDE1IEBACiAJCW5kbHAgPyB3d25fdG9fdTY0KG5kbHAtPm5scF9wb3J0bmFtZS51Lnd3bikgOiAwOwogfQogCisvKioKKyAqIGxwZmNfc2V0X3Jwb3J0X2xvc3NfdG1vOiBTZXQgdGhlIHJwb3J0IGRldiBsb3NzIHRtby4KKyAqIEBycG9ydDogZmMgcnBvcnQgYWRkcmVzcy4KKyAqIEB0aW1lb3V0OiBuZXcgdmFsdWUgZm9yIGRldiBsb3NzIHRtby4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIElmIHRpbWVvdXQgaXMgbm9uIHplcm8gc2V0IHRoZSBkZXZfbG9zc190bW8gdG8gdGltZW91dCwgZWxzZSBzZXQKKyAqIGRldl9sb3NzX3RtbyB0byBvbmUuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19zZXRfcnBvcnRfbG9zc190bW8oc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgdWludDMyX3QgdGltZW91dCkKIHsKQEAgLTI0NjcsNyArMzc2NCwxOCBAQAogCQlycG9ydC0+ZGV2X2xvc3NfdG1vID0gMTsKIH0KIAotCisvKioKKyAqIGxwZmNfcnBvcnRfc2hvd19mdW5jdGlvbjogUmV0dXJuIHJwb3J0IHRhcmdldCBpbmZvcm1hdGlvbi4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE1hY3JvIHRoYXQgdXNlcyBmaWVsZCB0byBnZW5lcmF0ZSBhIGZ1bmN0aW9uIHdpdGggdGhlIG5hbWUgbHBmY19zaG93X3Jwb3J0XworICoKKyAqIGxwZmNfc2hvd19ycG9ydF8jI2ZpZWxkOiByZXR1cm5zIHRoZSBieXRlcyBmb3JtYXR0ZWQgaW4gYnVmCisgKiBAY2RldjogY2xhc3MgY29udmVydGVkIHRvIGFuIGZjX3Jwb3J0LgorICogQGJ1Zjogb24gcmV0dXJuIGNvbnRhaW5zIHRoZSB0YXJnZXRfZmllbGQgb3IgemVyby4KKyAqCisgKiBSZXR1cm5zOiBzaXplIG9mIGZvcm1hdHRlZCBzdHJpbmcuCisgKiovCiAjZGVmaW5lIGxwZmNfcnBvcnRfc2hvd19mdW5jdGlvbihmaWVsZCwgZm9ybWF0X3N0cmluZywgc3osIGNhc3QpCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCiBscGZjX3Nob3dfcnBvcnRfIyNmaWVsZCAoc3RydWN0IGRldmljZSAqZGV2LAkJCQlcCkBAIC0yNjAyLDYgKzM5MTAsMTAgQEAKIAkudnBvcnRfZGlzYWJsZSA9IGxwZmNfdnBvcnRfZGlzYWJsZSwKIH07CiAKKy8qKgorICogbHBmY19nZXRfY2ZncGFyYW06IFVzZWQgZHVyaW5nIHByb2JlX29uZSB0byBpbml0IHRoZSBhZGFwdGVyIHN0cnVjdHVyZS4KKyAqIEBwaGJhOiBscGZjX2hiYSBwb2ludGVyLgorICoqLwogdm9pZAogbHBmY19nZXRfY2ZncGFyYW0oc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMjYzNyw2ICszOTQ5LDEwIEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfZ2V0X3Zwb3J0X2NmZ3BhcmFtOiBVc2VkIGR1cmluZyBwb3J0IGNyZWF0ZSwgaW5pdCB0aGUgdnBvcnQgc3RydWN0dXJlLgorICogQHZwb3J0OiBscGZjX3Zwb3J0IHBvaW50ZXIuCisgKiovCiB2b2lkCiBscGZjX2dldF92cG9ydF9jZmdwYXJhbShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0yNjQ4LDYgKzM5NjQsNyBAQAogCWxwZmNfcmVzdHJpY3RfbG9naW5faW5pdCh2cG9ydCwgbHBmY19yZXN0cmljdF9sb2dpbik7CiAJbHBmY19mY3BfY2xhc3NfaW5pdCh2cG9ydCwgbHBmY19mY3BfY2xhc3MpOwogCWxwZmNfdXNlX2FkaXNjX2luaXQodnBvcnQsIGxwZmNfdXNlX2FkaXNjKTsKKwlscGZjX21heF9zY3NpY21wbF90aW1lX2luaXQodnBvcnQsIGxwZmNfbWF4X3Njc2ljbXBsX3RpbWUpOwogCWxwZmNfZmRtaV9vbl9pbml0KHZwb3J0LCBscGZjX2ZkbWlfb24pOwogCWxwZmNfZGlzY292ZXJ5X3RocmVhZHNfaW5pdCh2cG9ydCwgbHBmY19kaXNjb3ZlcnlfdGhyZWFkcyk7CiAJbHBmY19tYXhfbHVuc19pbml0KHZwb3J0LCBscGZjX21heF9sdW5zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKaW5kZXggMWI4MjQ1Mi4uMDQ0ZWY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKQEAgLTE4LDcgKzE4LDcgQEAKICAqIGluY2x1ZGVkIHdpdGggdGhpcyBwYWNrYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdHlwZWRlZiBpbnQgKCpub2RlX2ZpbHRlcikoc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsIHZvaWQgKnBhcmFtKTsKK3R5cGVkZWYgaW50ICgqbm9kZV9maWx0ZXIpKHN0cnVjdCBscGZjX25vZGVsaXN0ICosIHZvaWQgKik7CiAKIHN0cnVjdCBmY19ycG9ydDsKIHZvaWQgbHBmY19kdW1wX21lbShzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICosIHVpbnQxNl90KTsKQEAgLTI2LDExICsyNiwxMSBAQAogdm9pZCBscGZjX2NvbmZpZ19hc3luYyhzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICosIHVpbnQzMl90KTsKIAogdm9pZCBscGZjX2hlYXJ0X2JlYXQoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKLWludCBscGZjX3JlYWRfbGEoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iLAotCQkgc3RydWN0IGxwZmNfZG1hYnVmICptcCk7CitpbnQgbHBmY19yZWFkX2xhKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgc3RydWN0IGxwZmNfZG1hYnVmICopOwogdm9pZCBscGZjX2NsZWFyX2xhKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7Ci12b2lkIGxwZmNfaXNzdWVfY2xlYXJfbGEoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpOwordm9pZCBscGZjX2lzc3VlX2NsZWFyX2xhKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHZvaWQgbHBmY19jb25maWdfbGluayhzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOworaW50IGxwZmNfY29uZmlnX21zaShzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogaW50IGxwZmNfcmVhZF9zcGFyYW0oc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCBpbnQpOwogdm9pZCBscGZjX3JlYWRfY29uZmlnKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfcmVhZF9sbmtfc3RhdChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwpAQCAtNDMsNyArNDMsNyBAQAogdm9pZCBscGZjX2luaXRfbGluayhzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICosIHVpbnQzMl90LCB1aW50MzJfdCk7CiAKIHN0cnVjdCBscGZjX3Zwb3J0ICpscGZjX2ZpbmRfdnBvcnRfYnlfZGlkKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCk7Ci12b2lkIGxwZmNfY2xlYW51cF9ycGlzKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IHJlbW92ZSk7Cit2b2lkIGxwZmNfY2xlYW51cF9ycGlzKHN0cnVjdCBscGZjX3Zwb3J0ICosIGludCk7CiBpbnQgbHBmY19saW5rZG93bihzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfcG9ydF9saW5rX2ZhaWx1cmUoc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfbWJ4X2NtcGxfcmVhZF9sYShzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwpAQCAtMTM1LDcgKzEzNSw3IEBACiBpbnQgbHBmY19uc19jbWQoc3RydWN0IGxwZmNfdnBvcnQgKiwgaW50LCB1aW50OF90LCB1aW50MzJfdCk7CiBpbnQgbHBmY19mZG1pX2NtZChzdHJ1Y3QgbHBmY192cG9ydCAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqLCBpbnQpOwogdm9pZCBscGZjX2ZkbWlfdG1vKHVuc2lnbmVkIGxvbmcpOwotdm9pZCBscGZjX2ZkbWlfdGltZW91dF9oYW5kbGVyKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCk7Cit2b2lkIGxwZmNfZmRtaV90aW1lb3V0X2hhbmRsZXIoc3RydWN0IGxwZmNfdnBvcnQgKik7CiAKIGludCBscGZjX2NvbmZpZ19wb3J0X3ByZXAoc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfY29uZmlnX3BvcnRfcG9zdChzdHJ1Y3QgbHBmY19oYmEgKik7CkBAIC0xNTUsNiArMTU1LDggQEAKIHZvaWQgbHBmY19oYW5kbGVfZXJhdHQoc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX2hhbmRsZV9sYXR0KHN0cnVjdCBscGZjX2hiYSAqKTsKIGlycXJldHVybl90IGxwZmNfaW50cl9oYW5kbGVyKGludCwgdm9pZCAqKTsKK2lycXJldHVybl90IGxwZmNfc3BfaW50cl9oYW5kbGVyKGludCwgdm9pZCAqKTsKK2lycXJldHVybl90IGxwZmNfZnBfaW50cl9oYW5kbGVyKGludCwgdm9pZCAqKTsKIAogdm9pZCBscGZjX3JlYWRfcmV2KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfY29uZmlnX3Jpbmcoc3RydWN0IGxwZmNfaGJhICosIGludCwgTFBGQ19NQk9YUV90ICopOwpAQCAtMTc1LDExICsxNzcsMTIgQEAKIHZvaWQgbHBmY19zdG9wX3Zwb3J0X3RpbWVycyhzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIAogdm9pZCBscGZjX3BvbGxfdGltZW91dCh1bnNpZ25lZCBsb25nIHB0cik7Ci12b2lkIGxwZmNfcG9sbF9zdGFydF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKTsKLXZvaWQgbHBmY19zbGlfcG9sbF9mY3BfcmluZyhzdHJ1Y3QgbHBmY19oYmEgKiBoYmEpOwordm9pZCBscGZjX3BvbGxfc3RhcnRfdGltZXIoc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBscGZjX3BvbGxfZXJhdHQodW5zaWduZWQgbG9uZyk7Cit2b2lkIGxwZmNfc2xpX3BvbGxfZmNwX3Jpbmcoc3RydWN0IGxwZmNfaGJhICopOwogc3RydWN0IGxwZmNfaW9jYnEgKiBscGZjX3NsaV9nZXRfaW9jYnEoc3RydWN0IGxwZmNfaGJhICopOwotdm9pZCBscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICogaW9jYik7Ci11aW50MTZfdCBscGZjX3NsaV9uZXh0X2lvdGFnKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICogaW9jYik7Cit2b2lkIGxwZmNfc2xpX3JlbGVhc2VfaW9jYnEoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX2lvY2JxICopOwordWludDE2X3QgbHBmY19zbGlfbmV4dF9pb3RhZyhzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfaW9jYnEgKik7CiAKIHZvaWQgbHBmY19yZXNldF9iYXJyaWVyKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpOwogaW50IGxwZmNfc2xpX2JyZHJlYWR5KHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCk7CkBAIC0xODcsMTEgKzE5MCwxMyBAQAogaW50IGxwZmNfc2xpX2JyZHJlc2V0KHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX3NsaV9icmRyZXN0YXJ0KHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX3NsaV9oYmFfc2V0dXAoc3RydWN0IGxwZmNfaGJhICopOworaW50IGxwZmNfc2xpX2NvbmZpZ19wb3J0KHN0cnVjdCBscGZjX2hiYSAqLCBpbnQpOwogaW50IGxwZmNfc2xpX2hvc3RfZG93bihzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIGludCBscGZjX3NsaV9oYmFfZG93bihzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19zbGlfaXNzdWVfbWJveChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICosIHVpbnQzMl90KTsKIGludCBscGZjX3NsaV9oYW5kbGVfbWJfZXZlbnQoc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfc2xpX2ZsdXNoX21ib3hfcXVldWUoc3RydWN0IGxwZmNfaGJhICopOworaW50IGxwZmNfc2xpX2NoZWNrX2VyYXR0KHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX3NsaV9oYW5kbGVfc2xvd19yaW5nX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqLAogCQkJCSAgICBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqLCB1aW50MzJfdCk7CiB2b2lkIGxwZmNfc2xpX2RlZl9tYm94X2NtcGwoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKQEAgLTE5OSw2ICsyMDQsNyBAQAogCQkJc3RydWN0IGxwZmNfaW9jYnEgKiwgdWludDMyX3QpOwogdm9pZCBscGZjX3NsaV9wY2ltZW1fYmNvcHkodm9pZCAqLCB2b2lkICosIHVpbnQzMl90KTsKIHZvaWQgbHBmY19zbGlfYWJvcnRfaW9jYl9yaW5nKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqKTsKK3ZvaWQgbHBmY19zbGlfZmx1c2hfZmNwX3JpbmdzKHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX3NsaV9yaW5ncG9zdGJ1Zl9wdXQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3NsaV9yaW5nICosCiAJCQkgICAgIHN0cnVjdCBscGZjX2RtYWJ1ZiAqKTsKIHN0cnVjdCBscGZjX2RtYWJ1ZiAqbHBmY19zbGlfcmluZ3Bvc3RidWZfZ2V0KHN0cnVjdCBscGZjX2hiYSAqLApAQCAtMjI2LDE3ICsyMzIsMTMgQEAKIHN0cnVjdCBscGZjX25vZGVsaXN0ICpscGZjX2ZpbmRub2RlX3d3cG4oc3RydWN0IGxwZmNfdnBvcnQgKiwKIAkJCQkJIHN0cnVjdCBscGZjX25hbWUgKik7CiAKLWludCBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1ib3hxLAotCQkJICAgICB1aW50MzJfdCB0aW1lb3V0KTsKK2ludCBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MzJfdCk7CiAKLWludCBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwKLQkJCSAgICAgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiBwcmluZywKLQkJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKiBwaW9jYiwKLQkJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKiBwcnNwaW9jYnEsCi0JCQkgICAgIHVpbnQzMl90IHRpbWVvdXQpOwotdm9pZCBscGZjX3NsaV9hYm9ydF9mY3BfY21wbChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLAotCQkJICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqIGNtZGlvY2IsCi0JCQkgICAgIHN0cnVjdCBscGZjX2lvY2JxICogcnNwaW9jYik7CitpbnQgbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0KHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqLAorCQkJICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqLCBzdHJ1Y3QgbHBmY19pb2NicSAqLAorCQkJICAgICB1aW50MzJfdCk7Cit2b2lkIGxwZmNfc2xpX2Fib3J0X2ZjcF9jbXBsKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19pb2NicSAqLAorCQkJICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqKTsKIAogdm9pZCBscGZjX3NsaV9mcmVlX2hicShzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGhicV9kbWFidWYgKik7CiAKQEAgLTI2OSw3ICsyNzEsNyBAQAogCiBzdHJ1Y3QgbHBmY192cG9ydCAqbHBmY19jcmVhdGVfcG9ydChzdHJ1Y3QgbHBmY19oYmEgKiwgaW50LCBzdHJ1Y3QgZGV2aWNlICopOwogaW50ICBscGZjX3Zwb3J0X2Rpc2FibGUoc3RydWN0IGZjX3Zwb3J0ICpmY192cG9ydCwgYm9vbCBkaXNhYmxlKTsKLXZvaWQgbHBmY19tYnhfdW5yZWdfdnBpKHN0cnVjdCBscGZjX3Zwb3J0ICopOworaW50IGxwZmNfbWJ4X3VucmVnX3ZwaShzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHZvaWQgZGVzdHJveV9wb3J0KHN0cnVjdCBscGZjX3Zwb3J0ICopOwogaW50IGxwZmNfZ2V0X2luc3RhbmNlKHZvaWQpOwogdm9pZCBscGZjX2hvc3RfYXR0cmliX2luaXQoc3RydWN0IFNjc2lfSG9zdCAqKTsKQEAgLTI5MCw2ICsyOTIsMTMgQEAKIHZvaWQgbHBmY19hZGp1c3RfcXVldWVfZGVwdGgoc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX3JhbXBfZG93bl9xdWV1ZV9oYW5kbGVyKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19yYW1wX3VwX3F1ZXVlX2hhbmRsZXIoc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBscGZjX3Njc2lfZGV2X2Jsb2NrKHN0cnVjdCBscGZjX2hiYSAqKTsKKwordm9pZAorbHBmY19zZW5kX2Vsc19mYWlsdXJlX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19pb2NicSAqLAorCQkJCXN0cnVjdCBscGZjX2lvY2JxICopOworc3RydWN0IGxwZmNfZmFzdF9wYXRoX2V2ZW50ICpscGZjX2FsbG9jX2Zhc3RfZXZ0KHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY19mcmVlX2Zhc3RfZXZ0KHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgKik7CiAKICNkZWZpbmUgU2NzaVJlc3VsdChob3N0X2NvZGUsIHNjc2lfY29kZSkgKCgoaG9zdF9jb2RlKSA8PCAxNikgfCBzY3NpX2NvZGUpCiAjZGVmaW5lIEhCQV9FVkVOVF9SU0NOICAgICAgICAgICAgICAgICAgIDUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYwppbmRleCA3ZmM3NGNmLi4yNmRhZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJscGZjX2h3LmgiCiAjaW5jbHVkZSAibHBmY19zbGkuaCIKKyNpbmNsdWRlICJscGZjX25sLmgiCiAjaW5jbHVkZSAibHBmY19kaXNjLmgiCiAjaW5jbHVkZSAibHBmY19zY3NpLmgiCiAjaW5jbHVkZSAibHBmYy5oIgpAQCAtMTM0LDI1ICsxMzUsMjQgQEAKIAkJfQogCQlsaXN0X2RlbCgmaGVhZCk7CiAJfSBlbHNlIHsKLQkJc3RydWN0IGxwZmNfaW9jYnEgICpuZXh0OwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpb2NicSwgbmV4dCwgJnBpb2NicS0+bGlzdCwgbGlzdCkgeworCQlJTklUX0xJU1RfSEVBRCgmaGVhZCk7CisJCWxpc3RfYWRkX3RhaWwoJmhlYWQsICZwaW9jYnEtPmxpc3QpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvY2JxLCAmaGVhZCwgbGlzdCkgewogCQkJaWNtZCA9ICZpb2NicS0+aW9jYjsKIAkJCWlmIChpY21kLT51bHBCZGVDb3VudCA9PSAwKQotCQkJCWxwZmNfY3RfdW5zb2xfYnVmZmVyKHBoYmEsIHBpb2NicSwgTlVMTCwgMCk7CisJCQkJbHBmY19jdF91bnNvbF9idWZmZXIocGhiYSwgaW9jYnEsIE5VTEwsIDApOwogCQkJZm9yIChpID0gMDsgaSA8IGljbWQtPnVscEJkZUNvdW50OyBpKyspIHsKIAkJCQlwYWRkciA9IGdldFBhZGRyKGljbWQtPnVuLmNvbnQ2NFtpXS5hZGRySGlnaCwKIAkJCQkJCSBpY21kLT51bi5jb250NjRbaV0uYWRkckxvdyk7CiAJCQkJbXAgPSBscGZjX3NsaV9yaW5ncG9zdGJ1Zl9nZXQocGhiYSwgcHJpbmcsCiAJCQkJCQkJICAgICAgcGFkZHIpOwogCQkJCXNpemUgPSBpY21kLT51bi5jb250NjRbaV0udHVzLmYuYmRlU2l6ZTsKLQkJCQlscGZjX2N0X3Vuc29sX2J1ZmZlcihwaGJhLCBwaW9jYnEsIG1wLCBzaXplKTsKKwkJCQlscGZjX2N0X3Vuc29sX2J1ZmZlcihwaGJhLCBpb2NicSwgbXAsIHNpemUpOwogCQkJCWxwZmNfaW5fYnVmX2ZyZWUocGhiYSwgbXApOwogCQkJfQotCQkJbGlzdF9kZWwoJmlvY2JxLT5saXN0KTsKLQkJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgaW9jYnEpOwogCQkJbHBmY19wb3N0X2J1ZmZlcihwaGJhLCBwcmluZywgaSk7CiAJCX0KKwkJbGlzdF9kZWwoJmhlYWQpOwogCX0KIH0KIApAQCAtMjEyLDcgKzIxMiw3IEBACiAJCWVsc2UKIAkJCWxpc3RfYWRkX3RhaWwoJm1wLT5saXN0LCAmbWxpc3QtPmxpc3QpOwogCi0JCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1VTRV9SQ1Y7CisJCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRFXzY0STsKIAkJLyogYnVpbGQgYnVmZmVyIHB0ciBsaXN0IGZvciBJT0NCICovCiAJCWJwbC0+YWRkckxvdyA9IGxlMzJfdG9fY3B1KHB1dFBhZGRyTG93KG1wLT5waHlzKSApOwogCQlicGwtPmFkZHJIaWdoID0gbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKG1wLT5waHlzKSApOwpAQCAtMjgzLDcgKzI4Myw3IEBACiAJaWNtZC0+dW4uZ2VucmVxNjQuYmRsLnVscElvVGFnMzIgPSAwOwogCWljbWQtPnVuLmdlbnJlcTY0LmJkbC5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChibXAtPnBoeXMpOwogCWljbWQtPnVuLmdlbnJlcTY0LmJkbC5hZGRyTG93ID0gcHV0UGFkZHJMb3coYm1wLT5waHlzKTsKLQlpY21kLT51bi5nZW5yZXE2NC5iZGwuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRMOworCWljbWQtPnVuLmdlbnJlcTY0LmJkbC5iZGVGbGFncyA9IEJVRkZfVFlQRV9CTFBfNjQ7CiAJaWNtZC0+dW4uZ2VucmVxNjQuYmRsLmJkZVNpemUgPSAobnVtX2VudHJ5ICogc2l6ZW9mIChzdHJ1Y3QgdWxwX2JkZTY0KSk7CiAKIAlpZiAodXNyX2ZsZykKQEAgLTg2MSw3ICs4NjEsNyBAQAogCiAJCXJldHJ5Kys7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fSU5GTywgTE9HX0RJU0NPVkVSWSwKLQkJCQkgIjAyMTYgUmV0cnlpbmcgTlMgY21kICV4XG4iLCBjbWRjb2RlKTsKKwkJCQkgIjAyNTAgUmV0cnlpbmcgTlMgY21kICV4XG4iLCBjbWRjb2RlKTsKIAkJcmMgPSBscGZjX25zX2NtZCh2cG9ydCwgY21kY29kZSwgcmV0cnksIDApOwogCQlpZiAocmMgPT0gMCkKIAkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYwppbmRleCAwOTRiNDdlLi43NzE5MjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSAibHBmY19ody5oIgogI2luY2x1ZGUgImxwZmNfc2xpLmgiCisjaW5jbHVkZSAibHBmY19ubC5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTQ2LDEzICs0NywxNCBAQAogI2luY2x1ZGUgImxwZmNfZGVidWdmcy5oIgogCiAjaWZkZWYgQ09ORklHX0xQRkNfREVCVUdfRlMKLS8qIGRlYnVnZnMgaW50ZXJmYWNlCisvKioKKyAqIGRlYnVnZnMgaW50ZXJmYWNlCiAgKgogICogVG8gYWNjZXNzIHRoaXMgaW50ZXJmYWNlIHRoZSB1c2VyIHNob3VsZDoKICAqICMgbWtkaXIgL2RlYnVnCiAgKiAjIG1vdW50IC10IGRlYnVnZnMgbm9uZSAvZGVidWcKICAqCi0gKiBUaGUgbHBmYyBkZWJ1Z2ZzIGRpcmVjdG9yeSBoaWVyYWNoeSBpczoKKyAqIFRoZSBscGZjIGRlYnVnZnMgZGlyZWN0b3J5IGhpZXJhcmNoeSBpczoKICAqIGxwZmMvbHBmY1gvdnBvcnRZCiAgKiB3aGVyZSBYIGlzIHRoZSBscGZjIGhiYSB1bmlxdWVfaWQKICAqIHdoZXJlIFkgaXMgdGhlIHZwb3J0IFZQSSBvbiB0aGF0IGhiYQpAQCAtNjEsMTQgKzYzLDIxIEBACiAgKiBkaXNjb3ZlcnlfdHJhY2UKICAqIFRoaXMgaXMgYW4gQUNTSUkgcmVhZGFibGUgZmlsZSB0aGF0IGNvbnRhaW5zIGEgdHJhY2Ugb2YgdGhlIGxhc3QKICAqIGxwZmNfZGVidWdmc19tYXhfZGlzY190cmMgZXZlbnRzIHRoYXQgaGFwcGVuZWQgb24gYSBzcGVjaWZpYyB2cG9ydC4KLSAqIFNlZSBscGZjX2RlYnVnZnMuaCBmb3IgZGlmZmVyZW50IGNhdGVnb3JpZXMgb2YKLSAqIGRpc2NvdmVyeSBldmVudHMuIFRvIGVuYWJsZSB0aGUgZGlzY292ZXJ5IHRyYWNlLCB0aGUgZm9sbG93aW5nCi0gKiBtb2R1bGUgcGFyYW1ldGVycyBtdXN0IGJlIHNldDoKKyAqIFNlZSBscGZjX2RlYnVnZnMuaCBmb3IgZGlmZmVyZW50IGNhdGVnb3JpZXMgb2YgIGRpc2NvdmVyeSBldmVudHMuCisgKiBUbyBlbmFibGUgdGhlIGRpc2NvdmVyeSB0cmFjZSwgdGhlIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVycyBtdXN0IGJlIHNldDoKICAqIGxwZmNfZGVidWdmc19lbmFibGU9MSAgICAgICAgIFR1cm5zIG9uIGxwZmMgZGVidWdmcyBmaWxlc3lzdGVtIHN1cHBvcnQKICAqIGxwZmNfZGVidWdmc19tYXhfZGlzY190cmM9WCAgIFdoZXJlIFggaXMgdGhlIGV2ZW50IHRyYWNlIGRlcHRoIGZvcgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUFDSCB2cG9ydC4gWCBNVVNUIGFsc28gYmUgYSBwb3dlciBvZiAyLgogICogbHBmY19kZWJ1Z2ZzX21hc2tfZGlzY190cmM9WSAgV2hlcmUgWSBpcyBhbiBldmVudCBtYXNrIGFzIGRlZmluZWQgaW4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwZmNfZGVidWdmcy5oIC4KKyAqCisgKiBzbG93X3JpbmdfdHJhY2UKKyAqIFRoaXMgaXMgYW4gQUNTSUkgcmVhZGFibGUgZmlsZSB0aGF0IGNvbnRhaW5zIGEgdHJhY2Ugb2YgdGhlIGxhc3QKKyAqIGxwZmNfZGVidWdmc19tYXhfc2xvd19yaW5nX3RyYyBldmVudHMgdGhhdCBoYXBwZW5lZCBvbiBhIHNwZWNpZmljIEhCQS4KKyAqIFRvIGVuYWJsZSB0aGUgc2xvdyByaW5nIHRyYWNlLCB0aGUgZm9sbG93aW5nIG1vZHVsZSBwYXJhbWV0ZXJzIG11c3QgYmUgc2V0OgorICogbHBmY19kZWJ1Z2ZzX2VuYWJsZT0xICAgICAgICAgVHVybnMgb24gbHBmYyBkZWJ1Z2ZzIGZpbGVzeXN0ZW0gc3VwcG9ydAorICogbHBmY19kZWJ1Z2ZzX21heF9zbG93X3JpbmdfdHJjPVggICBXaGVyZSBYIGlzIHRoZSBldmVudCB0cmFjZSBkZXB0aCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBIQkEuIFggTVVTVCBhbHNvIGJlIGEgcG93ZXIgb2YgMi4KICAqLwogc3RhdGljIGludCBscGZjX2RlYnVnZnNfZW5hYmxlID0gMTsKIG1vZHVsZV9wYXJhbShscGZjX2RlYnVnZnNfZW5hYmxlLCBpbnQsIDApOwpAQCAtMTE3LDYgKzEyNiwyNSBAQAogc3RhdGljIGF0b21pY190IGxwZmNfZGVidWdmc19zZXFfdHJjX2NudCA9IEFUT01JQ19JTklUKDApOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbHBmY19kZWJ1Z2ZzX3N0YXJ0X3RpbWUgPSAwTDsKIAorLyoqCisgKiBscGZjX2RlYnVnZnNfZGlzY190cmNfZGF0YSAtIER1bXAgZGlzY292ZXJ5IGxvZ2dpbmcgdG8gYSBidWZmZXIuCisgKiBAdnBvcnQ6IFRoZSB2cG9ydCB0byBnYXRoZXIgdGhlIGxvZyBpbmZvIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGR1bXAgbG9nIGludG8uCisgKiBAc2l6ZTogVGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gcHJvY2Vzcy4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBnYXRoZXJzIHRoZSBscGZjIGRpc2NvdmVyeSBkZWJ1Z2ZzIGRhdGEgZnJvbSB0aGUgQHZwb3J0IGFuZAorICogZHVtcHMgaXQgdG8gQGJ1ZiB1cCB0byBAc2l6ZSBudW1iZXIgb2YgYnl0ZXMuIEl0IHdpbGwgc3RhcnQgYXQgdGhlIG5leHQgZW50cnkKKyAqIGluIHRoZSBsb2cgYW5kIHByb2Nlc3MgdGhlIGxvZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuIFRoZW4gaXQgd2lsbAorICogZ2F0aGVyIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9nIGFuZCBwcm9jZXNzIHVudGlsIHRoZSBjdXJyZW50IGVudHJ5LgorICoKKyAqIE5vdGVzOgorICogRGlzY292ZXJ5IGxvZ2dpbmcgd2lsbCBiZSBkaXNhYmxlZCB3aGlsZSB3aGlsZSB0aGlzIHJvdXRpbmUgZHVtcHMgdGhlIGxvZy4KKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgYW1vdW50IG9mIGJ5dGVzIHRoYXQgd2VyZSBkdW1wZWQgaW50byBAYnVmIGFuZCB3aWxsCisgKiBub3QgZXhjZWVkIEBzaXplLgorICoqLwogc3RhdGljIGludAogbHBmY19kZWJ1Z2ZzX2Rpc2NfdHJjX2RhdGEoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBjaGFyICpidWYsIGludCBzaXplKQogewpAQCAtMTI1LDcgKzE1Myw2IEBACiAJc3RydWN0IGxwZmNfZGVidWdmc190cmMgKmR0cDsKIAljaGFyIGJ1ZmZlcltMUEZDX0RFQlVHX1RSQ19FTlRSWV9TSVpFXTsKIAotCiAJZW5hYmxlID0gbHBmY19kZWJ1Z2ZzX2VuYWJsZTsKIAlscGZjX2RlYnVnZnNfZW5hYmxlID0gMDsKIApAQCAtMTU5LDYgKzE4NiwyNSBAQAogCXJldHVybiBsZW47CiB9CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX3Nsb3dfcmluZ190cmNfZGF0YSAtIER1bXAgc2xvdyByaW5nIGxvZ2dpbmcgdG8gYSBidWZmZXIuCisgKiBAcGhiYTogVGhlIEhCQSB0byBnYXRoZXIgdGhlIGxvZyBpbmZvIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGR1bXAgbG9nIGludG8uCisgKiBAc2l6ZTogVGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gcHJvY2Vzcy4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBnYXRoZXJzIHRoZSBscGZjIHNsb3cgcmluZyBkZWJ1Z2ZzIGRhdGEgZnJvbSB0aGUgQHBoYmEgYW5kCisgKiBkdW1wcyBpdCB0byBAYnVmIHVwIHRvIEBzaXplIG51bWJlciBvZiBieXRlcy4gSXQgd2lsbCBzdGFydCBhdCB0aGUgbmV4dCBlbnRyeQorICogaW4gdGhlIGxvZyBhbmQgcHJvY2VzcyB0aGUgbG9nIHVudGlsIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gVGhlbiBpdCB3aWxsCisgKiBnYXRoZXIgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb2cgYW5kIHByb2Nlc3MgdW50aWwgdGhlIGN1cnJlbnQgZW50cnkuCisgKgorICogTm90ZXM6CisgKiBTbG93IHJpbmcgbG9nZ2luZyB3aWxsIGJlIGRpc2FibGVkIHdoaWxlIHdoaWxlIHRoaXMgcm91dGluZSBkdW1wcyB0aGUgbG9nLgorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBhbW91bnQgb2YgYnl0ZXMgdGhhdCB3ZXJlIGR1bXBlZCBpbnRvIEBidWYgYW5kIHdpbGwKKyAqIG5vdCBleGNlZWQgQHNpemUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RlYnVnZnNfc2xvd19yaW5nX3RyY19kYXRhKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgY2hhciAqYnVmLCBpbnQgc2l6ZSkKIHsKQEAgLTIwMyw2ICsyNDksMjUgQEAKIAogc3RhdGljIGludCBscGZjX2RlYnVnZnNfbGFzdF9oYnEgPSAtMTsKIAorLyoqCisgKiBscGZjX2RlYnVnZnNfaGJxaW5mb19kYXRhIC0gRHVtcCBob3N0IGJ1ZmZlciBxdWV1ZSBpbmZvIHRvIGEgYnVmZmVyLgorICogQHBoYmE6IFRoZSBIQkEgdG8gZ2F0aGVyIGhvc3QgYnVmZmVyIGluZm8gZnJvbS4KKyAqIEBidWY6IFRoZSBidWZmZXIgdG8gZHVtcCBsb2cgaW50by4KKyAqIEBzaXplOiBUaGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSB0byBwcm9jZXNzLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGR1bXBzIHRoZSBob3N0IGJ1ZmZlciBxdWV1ZSBpbmZvIGZyb20gdGhlIEBwaGJhIHRvIEBidWYgdXAgdG8KKyAqIEBzaXplIG51bWJlciBvZiBieXRlcy4gQSBoZWFkZXIgdGhhdCBkZXNjcmliZXMgdGhlIGN1cnJlbnQgaGJxIHN0YXRlIHdpbGwgYmUKKyAqIGR1bXBlZCB0byBAYnVmIGZpcnN0IGFuZCB0aGVuIGluZm8gb24gZWFjaCBoYnEgZW50cnkgd2lsbCBiZSBkdW1wZWQgdG8gQGJ1ZgorICogdW50aWwgQHNpemUgYnl0ZXMgaGF2ZSBiZWVuIGR1bXBlZCBvciBhbGwgdGhlIGhicSBpbmZvIGhhcyBiZWVuIGR1bXBlZC4KKyAqCisgKiBOb3RlczoKKyAqIFRoaXMgcm91dGluZSB3aWxsIHJvdGF0ZSB0aHJvdWdoIGVhY2ggY29uZmlndXJlZCBIQlEgZWFjaCB0aW1lIGNhbGxlZC4KKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgYW1vdW50IG9mIGJ5dGVzIHRoYXQgd2VyZSBkdW1wZWQgaW50byBAYnVmIGFuZCB3aWxsCisgKiBub3QgZXhjZWVkIEBzaXplLgorICoqLwogc3RhdGljIGludAogbHBmY19kZWJ1Z2ZzX2hicWluZm9fZGF0YShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGNoYXIgKmJ1ZiwgaW50IHNpemUpCiB7CkBAIC0zMDMsNiArMzY4LDI0IEBACiAKIHN0YXRpYyBpbnQgbHBmY19kZWJ1Z2ZzX2xhc3RfaGJhX3NsaW1fb2ZmOwogCisvKioKKyAqIGxwZmNfZGVidWdmc19kdW1wSEJBU2xpbV9kYXRhIC0gRHVtcCBIQkEgU0xJTSBpbmZvIHRvIGEgYnVmZmVyLgorICogQHBoYmE6IFRoZSBIQkEgdG8gZ2F0aGVyIFNMSU0gaW5mbyBmcm9tLgorICogQGJ1ZjogVGhlIGJ1ZmZlciB0byBkdW1wIGxvZyBpbnRvLgorICogQHNpemU6IFRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHRvIHByb2Nlc3MuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgZHVtcHMgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgSEJBIFNMSU0gZm9yIHRoZSBIQkEgYXNzb2NpYXRlZAorICogd2l0aCBAcGhiYSB0byBAYnVmIHVwIHRvIEBzaXplIGJ5dGVzIG9mIGRhdGEuIFRoaXMgaXMgdGhlIHJhdyBIQkEgU0xJTSBkYXRhLgorICoKKyAqIE5vdGVzOgorICogVGhpcyByb3V0aW5lIHdpbGwgb25seSBkdW1wIHVwIHRvIDEwMjQgYnl0ZXMgb2YgZGF0YSBlYWNoIHRpbWUgY2FsbGVkIGFuZAorICogc2hvdWxkIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byBkdW1wIHRoZSBlbnRpcmUgSEJBIFNMSU0uCisgKgorICogUmV0dXJuIFZhbHVlOgorICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGFtb3VudCBvZiBieXRlcyB0aGF0IHdlcmUgZHVtcGVkIGludG8gQGJ1ZiBhbmQgd2lsbAorICogbm90IGV4Y2VlZCBAc2l6ZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZGVidWdmc19kdW1wSEJBU2xpbV9kYXRhKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgY2hhciAqYnVmLCBpbnQgc2l6ZSkKIHsKQEAgLTM0Miw2ICs0MjUsMjEgQEAKIAlyZXR1cm4gbGVuOwogfQogCisvKioKKyAqIGxwZmNfZGVidWdmc19kdW1wSG9zdFNsaW1fZGF0YSAtIER1bXAgaG9zdCBTTElNIGluZm8gdG8gYSBidWZmZXIuCisgKiBAcGhiYTogVGhlIEhCQSB0byBnYXRoZXIgSG9zdCBTTElNIGluZm8gZnJvbS4KKyAqIEBidWY6IFRoZSBidWZmZXIgdG8gZHVtcCBsb2cgaW50by4KKyAqIEBzaXplOiBUaGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSB0byBwcm9jZXNzLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGR1bXBzIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIGhvc3QgU0xJTSBmb3IgdGhlIGhvc3QgYXNzb2NpYXRlZAorICogd2l0aCBAcGhiYSB0byBAYnVmIHVwIHRvIEBzaXplIGJ5dGVzIG9mIGRhdGEuIFRoZSBkdW1wIHdpbGwgY29udGFpbiB0aGUKKyAqIE1haWxib3gsIFBDQiwgUmluZ3MsIGFuZCBSZWdpc3RlcnMgdGhhdCBhcmUgbG9jYXRlZCBpbiBob3N0IG1lbW9yeS4KKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgYW1vdW50IG9mIGJ5dGVzIHRoYXQgd2VyZSBkdW1wZWQgaW50byBAYnVmIGFuZCB3aWxsCisgKiBub3QgZXhjZWVkIEBzaXplLgorICoqLwogc3RhdGljIGludAogbHBmY19kZWJ1Z2ZzX2R1bXBIb3N0U2xpbV9kYXRhKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgY2hhciAqYnVmLCBpbnQgc2l6ZSkKIHsKQEAgLTM1Nyw3ICs0NTUsNyBAQAogCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCiAJbGVuICs9ICBzbnByaW50ZihidWYrbGVuLCBzaXplLWxlbiwgIlNMSU0gTWFpbGJveFxuIik7Ci0JcHRyID0gKHVpbnQzMl90ICopcGhiYS0+c2xpbTJwOworCXB0ciA9ICh1aW50MzJfdCAqKXBoYmEtPnNsaW0ycC52aXJ0OwogCWkgPSBzaXplb2YoTUFJTEJPWF90KTsKIAl3aGlsZSAoaSA+IDApIHsKIAkJbGVuICs9ICBzbnByaW50ZihidWYrbGVuLCBzaXplLWxlbiwKQEAgLTM3MCw3ICs0NjgsNyBAQAogCX0KIAogCWxlbiArPSAgc25wcmludGYoYnVmK2xlbiwgc2l6ZS1sZW4sICJTTElNIFBDQlxuIik7Ci0JcHRyID0gKHVpbnQzMl90ICopJnBoYmEtPnNsaW0ycC0+cGNiOworCXB0ciA9ICh1aW50MzJfdCAqKXBoYmEtPnBjYjsKIAlpID0gc2l6ZW9mKFBDQl90KTsKIAl3aGlsZSAoaSA+IDApIHsKIAkJbGVuICs9ICBzbnByaW50ZihidWYrbGVuLCBzaXplLWxlbiwKQEAgLTM4Miw0NCArNDgwLDE2IEBACiAJCW9mZiArPSAoOCAqIHNpemVvZih1aW50MzJfdCkpOwogCX0KIAotCXBncHAgPSAoc3RydWN0IGxwZmNfcGdwICopJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMzX3BncC5wb3J0OwotCXByaW5nID0gJnBzbGktPnJpbmdbMF07Ci0JbGVuICs9ICBzbnByaW50ZihidWYrbGVuLCBzaXplLWxlbiwKLQkJIlJpbmcgMDogQ01EIEdldElueDolZCAoTWF4OiVkIE5leHQ6JWQgTG9jYWw6JWQgZmxnOngleCkgICIKLQkJIlJTUCBQdXRJbng6JWQgTWF4OiVkXG4iLAotCQlwZ3BwLT5jbWRHZXRJbngsIHByaW5nLT5udW1DaW9jYiwKLQkJcHJpbmctPm5leHRfY21kaWR4LCBwcmluZy0+bG9jYWxfZ2V0aWR4LCBwcmluZy0+ZmxhZywKLQkJcGdwcC0+cnNwUHV0SW54LCBwcmluZy0+bnVtUmlvY2IpOwotCXBncHArKzsKLQotCXByaW5nID0gJnBzbGktPnJpbmdbMV07Ci0JbGVuICs9ICBzbnByaW50ZihidWYrbGVuLCBzaXplLWxlbiwKLQkJIlJpbmcgMTogQ01EIEdldElueDolZCAoTWF4OiVkIE5leHQ6JWQgTG9jYWw6JWQgZmxnOngleCkgICIKLQkJIlJTUCBQdXRJbng6JWQgTWF4OiVkXG4iLAotCQlwZ3BwLT5jbWRHZXRJbngsIHByaW5nLT5udW1DaW9jYiwKLQkJcHJpbmctPm5leHRfY21kaWR4LCBwcmluZy0+bG9jYWxfZ2V0aWR4LCBwcmluZy0+ZmxhZywKLQkJcGdwcC0+cnNwUHV0SW54LCBwcmluZy0+bnVtUmlvY2IpOwotCXBncHArKzsKLQotCXByaW5nID0gJnBzbGktPnJpbmdbMl07Ci0JbGVuICs9ICBzbnByaW50ZihidWYrbGVuLCBzaXplLWxlbiwKLQkJIlJpbmcgMjogQ01EIEdldElueDolZCAoTWF4OiVkIE5leHQ6JWQgTG9jYWw6JWQgZmxnOngleCkgICIKLQkJIlJTUCBQdXRJbng6JWQgTWF4OiVkXG4iLAotCQlwZ3BwLT5jbWRHZXRJbngsIHByaW5nLT5udW1DaW9jYiwKLQkJcHJpbmctPm5leHRfY21kaWR4LCBwcmluZy0+bG9jYWxfZ2V0aWR4LCBwcmluZy0+ZmxhZywKLQkJcGdwcC0+cnNwUHV0SW54LCBwcmluZy0+bnVtUmlvY2IpOwotCXBncHArKzsKLQotCXByaW5nID0gJnBzbGktPnJpbmdbM107Ci0JbGVuICs9ICBzbnByaW50ZihidWYrbGVuLCBzaXplLWxlbiwKLQkJIlJpbmcgMzogQ01EIEdldElueDolZCAoTWF4OiVkIE5leHQ6JWQgTG9jYWw6JWQgZmxnOngleCkgICIKLQkJIlJTUCBQdXRJbng6JWQgTWF4OiVkXG4iLAotCQlwZ3BwLT5jbWRHZXRJbngsIHByaW5nLT5udW1DaW9jYiwKLQkJcHJpbmctPm5leHRfY21kaWR4LCBwcmluZy0+bG9jYWxfZ2V0aWR4LCBwcmluZy0+ZmxhZywKLQkJcGdwcC0+cnNwUHV0SW54LCBwcmluZy0+bnVtUmlvY2IpOwotCi0KLQlwdHIgPSAodWludDMyX3QgKikmcGhiYS0+c2xpbTJwLT5tYngudXMuczNfcGdwLmhicV9nZXQ7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlwZ3BwID0gJnBoYmEtPnBvcnRfZ3BbaV07CisJCXByaW5nID0gJnBzbGktPnJpbmdbaV07CisJCWxlbiArPSAgc25wcmludGYoYnVmK2xlbiwgc2l6ZS1sZW4sCisJCQkJICJSaW5nICVkOiBDTUQgR2V0SW54OiVkIChNYXg6JWQgTmV4dDolZCAiCisJCQkJICJMb2NhbDolZCBmbGc6eCV4KSAgUlNQIFB1dElueDolZCBNYXg6JWRcbiIsCisJCQkJIGksIHBncHAtPmNtZEdldElueCwgcHJpbmctPm51bUNpb2NiLAorCQkJCSBwcmluZy0+bmV4dF9jbWRpZHgsIHByaW5nLT5sb2NhbF9nZXRpZHgsCisJCQkJIHByaW5nLT5mbGFnLCBwZ3BwLT5yc3BQdXRJbngsIHByaW5nLT5udW1SaW9jYik7CisJfQogCXdvcmQwID0gcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsKIAl3b3JkMSA9IHJlYWRsKHBoYmEtPkNBcmVnYWRkcik7CiAJd29yZDIgPSByZWFkbChwaGJhLT5IU3JlZ2FkZHIpOwpAQCAtNDMwLDYgKzUwMCwyMSBAQAogCXJldHVybiBsZW47CiB9CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX25vZGVsaXN0X2RhdGEgLSBEdW1wIHRhcmdldCBub2RlIGxpc3QgdG8gYSBidWZmZXIuCisgKiBAdnBvcnQ6IFRoZSB2cG9ydCB0byBnYXRoZXIgdGFyZ2V0IG5vZGUgaW5mbyBmcm9tLgorICogQGJ1ZjogVGhlIGJ1ZmZlciB0byBkdW1wIGxvZyBpbnRvLgorICogQHNpemU6IFRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHRvIHByb2Nlc3MuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgZHVtcHMgdGhlIGN1cnJlbnQgdGFyZ2V0IG5vZGUgbGlzdCBhc3NvY2lhdGVkIHdpdGggQHZwb3J0IHRvCisgKiBAYnVmIHVwIHRvIEBzaXplIGJ5dGVzIG9mIGRhdGEuIEVhY2ggbm9kZSBlbnRyeSBpbiB0aGUgZHVtcCB3aWxsIGNvbnRhaW4gYQorICogbm9kZSBzdGF0ZSwgRElELCBXV1BOLCBXV05OLCBSUEksIGZsYWdzLCB0eXBlLCBhbmQgb3RoZXIgdXNlZnVsIGZpZWxkcy4KKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgYW1vdW50IG9mIGJ5dGVzIHRoYXQgd2VyZSBkdW1wZWQgaW50byBAYnVmIGFuZCB3aWxsCisgKiBub3QgZXhjZWVkIEBzaXplLgorICoqLwogc3RhdGljIGludAogbHBmY19kZWJ1Z2ZzX25vZGVsaXN0X2RhdGEoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBjaGFyICpidWYsIGludCBzaXplKQogewpAQCAtNTEzLDcgKzU5OCwyMiBAQAogfQogI2VuZGlmCiAKLQorLyoqCisgKiBscGZjX2RlYnVnZnNfZGlzY190cmMgLSBTdG9yZSBkaXNjb3ZlcnkgdHJhY2UgbG9nLgorICogQHZwb3J0OiBUaGUgdnBvcnQgdG8gYXNzb2NpYXRlIHRoaXMgdHJhY2Ugc3RyaW5nIHdpdGggZm9yIHJldHJpZXZhbC4KKyAqIEBtYXNrOiBMb2cgZW50cnkgY2xhc3NpZmljYXRpb24uCisgKiBAZm10OiBGb3JtYXQgc3RyaW5nIHRvIGJlIGRpc3BsYXllZCB3aGVuIGR1bXBpbmcgdGhlIGxvZy4KKyAqIEBkYXRhMTogMXN0IGRhdGEgcGFyYW1ldGVyIHRvIGJlIGFwcGxpZWQgdG8gQGZtdC4KKyAqIEBkYXRhMjogMm5kIGRhdGEgcGFyYW1ldGVyIHRvIGJlIGFwcGxpZWQgdG8gQGZtdC4KKyAqIEBkYXRhMzogM3JkIGRhdGEgcGFyYW1ldGVyIHRvIGJlIGFwcGxpZWQgdG8gQGZtdC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGJ5IHRoZSBkcml2ZXIgY29kZSB0byBhZGQgYSBkZWJ1Z2ZzIGxvZyBlbnRyeSB0byB0aGUKKyAqIGRpc2NvdmVyeSB0cmFjZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIEB2cG9ydC4gT25seSBlbnRyaWVzIHdpdGggYSBAbWFzayB0aGF0CisgKiBtYXRjaCB0aGUgY3VycmVudCBkZWJ1Z2ZzIGRpc2NvdmVyeSBtYXNrIHdpbGwgYmUgc2F2ZWQuIEVudHJpZXMgdGhhdCBkbyBub3QKKyAqIG1hdGNoIHdpbGwgYmUgdGhyb3duIGF3YXkuIEBmbXQsIEBkYXRhMSwgQGRhdGEyLCBhbmQgQGRhdGEzIGFyZSB1c2VkIGxpa2UKKyAqIHByaW50ZiB3aGVuIGRpc3BsYXlpbmcgdGhlIGxvZy4KKyAqKi8KIGlubGluZSB2b2lkCiBscGZjX2RlYnVnZnNfZGlzY190cmMoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBpbnQgbWFzaywgY2hhciAqZm10LAogCXVpbnQzMl90IGRhdGExLCB1aW50MzJfdCBkYXRhMiwgdWludDMyX3QgZGF0YTMpCkBAIC01NDIsNiArNjQyLDE5IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfZGVidWdmc19zbG93X3JpbmdfdHJjIC0gU3RvcmUgc2xvdyByaW5nIHRyYWNlIGxvZy4KKyAqIEBwaGJhOiBUaGUgcGhiYSB0byBhc3NvY2lhdGUgdGhpcyB0cmFjZSBzdHJpbmcgd2l0aCBmb3IgcmV0cmlldmFsLgorICogQGZtdDogRm9ybWF0IHN0cmluZyB0byBiZSBkaXNwbGF5ZWQgd2hlbiBkdW1waW5nIHRoZSBsb2cuCisgKiBAZGF0YTE6IDFzdCBkYXRhIHBhcmFtZXRlciB0byBiZSBhcHBsaWVkIHRvIEBmbXQuCisgKiBAZGF0YTI6IDJuZCBkYXRhIHBhcmFtZXRlciB0byBiZSBhcHBsaWVkIHRvIEBmbXQuCisgKiBAZGF0YTM6IDNyZCBkYXRhIHBhcmFtZXRlciB0byBiZSBhcHBsaWVkIHRvIEBmbXQuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCBieSB0aGUgZHJpdmVyIGNvZGUgdG8gYWRkIGEgZGVidWdmcyBsb2cgZW50cnkgdG8gdGhlCisgKiBkaXNjb3ZlcnkgdHJhY2UgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCBAdnBvcnQuIEBmbXQsIEBkYXRhMSwgQGRhdGEyLCBhbmQKKyAqIEBkYXRhMyBhcmUgdXNlZCBsaWtlIHByaW50ZiB3aGVuIGRpc3BsYXlpbmcgdGhlIGxvZy4KKyAqKi8KIGlubGluZSB2b2lkCiBscGZjX2RlYnVnZnNfc2xvd19yaW5nX3RyYyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGNoYXIgKmZtdCwKIAl1aW50MzJfdCBkYXRhMSwgdWludDMyX3QgZGF0YTIsIHVpbnQzMl90IGRhdGEzKQpAQCAtNTY4LDYgKzY4MSwyMSBAQAogfQogCiAjaWZkZWYgQ09ORklHX0xQRkNfREVCVUdfRlMKKy8qKgorICogbHBmY19kZWJ1Z2ZzX2Rpc2NfdHJjX29wZW4gLSBPcGVuIHRoZSBkaXNjb3ZlcnkgdHJhY2UgbG9nLgorICogQGlub2RlOiBUaGUgaW5vZGUgcG9pbnRlciB0aGF0IGNvbnRhaW5zIGEgdnBvcnQgcG9pbnRlci4KKyAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRvIGF0dGFjaCB0aGUgbG9nIG91dHB1dC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBkZWJ1Z2ZzIG9wZW4gZmlsZSBvcGVyYXRpb24uIEl0IGdldHMKKyAqIHRoZSB2cG9ydCBmcm9tIHRoZSBpX3ByaXZhdGUgZmllbGQgaW4gQGlub2RlLCBhbGxvY2F0ZXMgdGhlIG5lY2Vzc2FyeSBidWZmZXIKKyAqIGZvciB0aGUgbG9nLCBmaWxscyB0aGUgYnVmZmVyIGZyb20gdGhlIGluLW1lbW9yeSBsb2cgZm9yIHRoaXMgdnBvcnQsIGFuZCB0aGVuCisgKiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGF0IGxvZyBpbiB0aGUgcHJpdmF0ZV9kYXRhIGZpZWxkIGluIEBmaWxlLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLiBPbiBlcnJvciBpdCB3aWxsIHJldHVybiBhbiBuZWdhdGl2ZQorICogZXJyb3IgdmFsdWUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RlYnVnZnNfZGlzY190cmNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTU4NSw3ICs3MTMsNyBAQAogCWlmICghZGVidWcpCiAJCWdvdG8gb3V0OwogCi0JLyogUm91bmQgdG8gcGFnZSBib3VuZHJ5ICovCisJLyogUm91bmQgdG8gcGFnZSBib3VuZGFyeSAqLwogCXNpemUgPSAgKGxwZmNfZGVidWdmc19tYXhfZGlzY190cmMgKiBMUEZDX0RFQlVHX1RSQ19FTlRSWV9TSVpFKTsKIAlzaXplID0gUEFHRV9BTElHTihzaXplKTsKIApAQCAtNjAzLDYgKzczMSwyMSBAQAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBscGZjX2RlYnVnZnNfc2xvd19yaW5nX3RyY19vcGVuIC0gT3BlbiB0aGUgU2xvdyBSaW5nIHRyYWNlIGxvZy4KKyAqIEBpbm9kZTogVGhlIGlub2RlIHBvaW50ZXIgdGhhdCBjb250YWlucyBhIHZwb3J0IHBvaW50ZXIuCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byBhdHRhY2ggdGhlIGxvZyBvdXRwdXQuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZGVidWdmcyBvcGVuIGZpbGUgb3BlcmF0aW9uLiBJdCBnZXRzCisgKiB0aGUgdnBvcnQgZnJvbSB0aGUgaV9wcml2YXRlIGZpZWxkIGluIEBpbm9kZSwgYWxsb2NhdGVzIHRoZSBuZWNlc3NhcnkgYnVmZmVyCisgKiBmb3IgdGhlIGxvZywgZmlsbHMgdGhlIGJ1ZmZlciBmcm9tIHRoZSBpbi1tZW1vcnkgbG9nIGZvciB0aGlzIHZwb3J0LCBhbmQgdGhlbgorICogcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhhdCBsb2cgaW4gdGhlIHByaXZhdGVfZGF0YSBmaWVsZCBpbiBAZmlsZS4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bC4gT24gZXJyb3IgaXQgd2lsbCByZXR1cm4gYW4gbmVnYXRpdmUKKyAqIGVycm9yIHZhbHVlLgorICoqLwogc3RhdGljIGludAogbHBmY19kZWJ1Z2ZzX3Nsb3dfcmluZ190cmNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTYyMCw3ICs3NjMsNyBAQAogCWlmICghZGVidWcpCiAJCWdvdG8gb3V0OwogCi0JLyogUm91bmQgdG8gcGFnZSBib3VuZHJ5ICovCisJLyogUm91bmQgdG8gcGFnZSBib3VuZGFyeSAqLwogCXNpemUgPSAgKGxwZmNfZGVidWdmc19tYXhfc2xvd19yaW5nX3RyYyAqIExQRkNfREVCVUdfVFJDX0VOVFJZX1NJWkUpOwogCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwogCkBAIC02MzgsNiArNzgxLDIxIEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIGxwZmNfZGVidWdmc19oYnFpbmZvX29wZW4gLSBPcGVuIHRoZSBoYnFpbmZvIGRlYnVnZnMgYnVmZmVyLgorICogQGlub2RlOiBUaGUgaW5vZGUgcG9pbnRlciB0aGF0IGNvbnRhaW5zIGEgdnBvcnQgcG9pbnRlci4KKyAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRvIGF0dGFjaCB0aGUgbG9nIG91dHB1dC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBkZWJ1Z2ZzIG9wZW4gZmlsZSBvcGVyYXRpb24uIEl0IGdldHMKKyAqIHRoZSB2cG9ydCBmcm9tIHRoZSBpX3ByaXZhdGUgZmllbGQgaW4gQGlub2RlLCBhbGxvY2F0ZXMgdGhlIG5lY2Vzc2FyeSBidWZmZXIKKyAqIGZvciB0aGUgbG9nLCBmaWxscyB0aGUgYnVmZmVyIGZyb20gdGhlIGluLW1lbW9yeSBsb2cgZm9yIHRoaXMgdnBvcnQsIGFuZCB0aGVuCisgKiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGF0IGxvZyBpbiB0aGUgcHJpdmF0ZV9kYXRhIGZpZWxkIGluIEBmaWxlLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLiBPbiBlcnJvciBpdCB3aWxsIHJldHVybiBhbiBuZWdhdGl2ZQorICogZXJyb3IgdmFsdWUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RlYnVnZnNfaGJxaW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtNjQ5LDcgKzgwNyw3IEBACiAJaWYgKCFkZWJ1ZykKIAkJZ290byBvdXQ7CiAKLQkvKiBSb3VuZCB0byBwYWdlIGJvdW5kcnkgKi8KKwkvKiBSb3VuZCB0byBwYWdlIGJvdW5kYXJ5ICovCiAJZGVidWctPmJ1ZmZlciA9IGttYWxsb2MoTFBGQ19IQlFJTkZPX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghZGVidWctPmJ1ZmZlcikgewogCQlrZnJlZShkZWJ1Zyk7CkBAIC02NjUsNiArODIzLDIxIEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIGxwZmNfZGVidWdmc19kdW1wSEJBU2xpbV9vcGVuIC0gT3BlbiB0aGUgRHVtcCBIQkEgU0xJTSBkZWJ1Z2ZzIGJ1ZmZlci4KKyAqIEBpbm9kZTogVGhlIGlub2RlIHBvaW50ZXIgdGhhdCBjb250YWlucyBhIHZwb3J0IHBvaW50ZXIuCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byBhdHRhY2ggdGhlIGxvZyBvdXRwdXQuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZGVidWdmcyBvcGVuIGZpbGUgb3BlcmF0aW9uLiBJdCBnZXRzCisgKiB0aGUgdnBvcnQgZnJvbSB0aGUgaV9wcml2YXRlIGZpZWxkIGluIEBpbm9kZSwgYWxsb2NhdGVzIHRoZSBuZWNlc3NhcnkgYnVmZmVyCisgKiBmb3IgdGhlIGxvZywgZmlsbHMgdGhlIGJ1ZmZlciBmcm9tIHRoZSBpbi1tZW1vcnkgbG9nIGZvciB0aGlzIHZwb3J0LCBhbmQgdGhlbgorICogcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhhdCBsb2cgaW4gdGhlIHByaXZhdGVfZGF0YSBmaWVsZCBpbiBAZmlsZS4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bC4gT24gZXJyb3IgaXQgd2lsbCByZXR1cm4gYW4gbmVnYXRpdmUKKyAqIGVycm9yIHZhbHVlLgorICoqLwogc3RhdGljIGludAogbHBmY19kZWJ1Z2ZzX2R1bXBIQkFTbGltX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC02NzYsNyArODQ5LDcgQEAKIAlpZiAoIWRlYnVnKQogCQlnb3RvIG91dDsKIAotCS8qIFJvdW5kIHRvIHBhZ2UgYm91bmRyeSAqLworCS8qIFJvdW5kIHRvIHBhZ2UgYm91bmRhcnkgKi8KIAlkZWJ1Zy0+YnVmZmVyID0ga21hbGxvYyhMUEZDX0RVTVBIQkFTTElNX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghZGVidWctPmJ1ZmZlcikgewogCQlrZnJlZShkZWJ1Zyk7CkBAIC02OTIsNiArODY1LDIxIEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIGxwZmNfZGVidWdmc19kdW1wSG9zdFNsaW1fb3BlbiAtIE9wZW4gdGhlIER1bXAgSG9zdCBTTElNIGRlYnVnZnMgYnVmZmVyLgorICogQGlub2RlOiBUaGUgaW5vZGUgcG9pbnRlciB0aGF0IGNvbnRhaW5zIGEgdnBvcnQgcG9pbnRlci4KKyAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRvIGF0dGFjaCB0aGUgbG9nIG91dHB1dC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBkZWJ1Z2ZzIG9wZW4gZmlsZSBvcGVyYXRpb24uIEl0IGdldHMKKyAqIHRoZSB2cG9ydCBmcm9tIHRoZSBpX3ByaXZhdGUgZmllbGQgaW4gQGlub2RlLCBhbGxvY2F0ZXMgdGhlIG5lY2Vzc2FyeSBidWZmZXIKKyAqIGZvciB0aGUgbG9nLCBmaWxscyB0aGUgYnVmZmVyIGZyb20gdGhlIGluLW1lbW9yeSBsb2cgZm9yIHRoaXMgdnBvcnQsIGFuZCB0aGVuCisgKiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGF0IGxvZyBpbiB0aGUgcHJpdmF0ZV9kYXRhIGZpZWxkIGluIEBmaWxlLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLiBPbiBlcnJvciBpdCB3aWxsIHJldHVybiBhbiBuZWdhdGl2ZQorICogZXJyb3IgdmFsdWUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RlYnVnZnNfZHVtcEhvc3RTbGltX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC03MDMsNyArODkxLDcgQEAKIAlpZiAoIWRlYnVnKQogCQlnb3RvIG91dDsKIAotCS8qIFJvdW5kIHRvIHBhZ2UgYm91bmRyeSAqLworCS8qIFJvdW5kIHRvIHBhZ2UgYm91bmRhcnkgKi8KIAlkZWJ1Zy0+YnVmZmVyID0ga21hbGxvYyhMUEZDX0RVTVBIT1NUU0xJTV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRlYnVnLT5idWZmZXIpIHsKIAkJa2ZyZWUoZGVidWcpOwpAQCAtNzE5LDYgKzkwNywyMSBAQAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBscGZjX2RlYnVnZnNfbm9kZWxpc3Rfb3BlbiAtIE9wZW4gdGhlIG5vZGVsaXN0IGRlYnVnZnMgZmlsZS4KKyAqIEBpbm9kZTogVGhlIGlub2RlIHBvaW50ZXIgdGhhdCBjb250YWlucyBhIHZwb3J0IHBvaW50ZXIuCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byBhdHRhY2ggdGhlIGxvZyBvdXRwdXQuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZGVidWdmcyBvcGVuIGZpbGUgb3BlcmF0aW9uLiBJdCBnZXRzCisgKiB0aGUgdnBvcnQgZnJvbSB0aGUgaV9wcml2YXRlIGZpZWxkIGluIEBpbm9kZSwgYWxsb2NhdGVzIHRoZSBuZWNlc3NhcnkgYnVmZmVyCisgKiBmb3IgdGhlIGxvZywgZmlsbHMgdGhlIGJ1ZmZlciBmcm9tIHRoZSBpbi1tZW1vcnkgbG9nIGZvciB0aGlzIHZwb3J0LCBhbmQgdGhlbgorICogcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhhdCBsb2cgaW4gdGhlIHByaXZhdGVfZGF0YSBmaWVsZCBpbiBAZmlsZS4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bC4gT24gZXJyb3IgaXQgd2lsbCByZXR1cm4gYW4gbmVnYXRpdmUKKyAqIGVycm9yIHZhbHVlLgorICoqLwogc3RhdGljIGludAogbHBmY19kZWJ1Z2ZzX25vZGVsaXN0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC03MzAsNyArOTMzLDcgQEAKIAlpZiAoIWRlYnVnKQogCQlnb3RvIG91dDsKIAotCS8qIFJvdW5kIHRvIHBhZ2UgYm91bmRyeSAqLworCS8qIFJvdW5kIHRvIHBhZ2UgYm91bmRhcnkgKi8KIAlkZWJ1Zy0+YnVmZmVyID0ga21hbGxvYyhMUEZDX05PREVMSVNUX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghZGVidWctPmJ1ZmZlcikgewogCQlrZnJlZShkZWJ1Zyk7CkBAIC03NDYsNiArOTQ5LDIzIEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIGxwZmNfZGVidWdmc19sc2VlayAtIFNlZWsgdGhyb3VnaCBhIGRlYnVnZnMgZmlsZS4KKyAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRvIHNlZWsgdGhyb3VnaC4KKyAqIEBvZmY6IFRoZSBvZmZzZXQgdG8gc2VlayB0byBvciB0aGUgYW1vdW50IHRvIHNlZWsgYnkuCisgKiBAd2hlbmNlOiBJbmRpY2F0ZXMgaG93IHRvIHNlZWsuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgZGVidWdmcyBsc2VlayBmaWxlIG9wZXJhdGlvbi4gVGhlCisgKiBAd2hlbmNlIHBhcmFtZXRlciBpbmRpY2F0ZXMgd2hldGhlciBAb2ZmIGlzIHRoZSBvZmZzZXQgdG8gZGlyZWN0bHkgc2VlayB0bywKKyAqIG9yIGlmIGl0IGlzIGEgdmFsdWUgdG8gc2VlayBmb3J3YXJkIG9yIHJldmVyc2UgYnkuIFRoaXMgZnVuY3Rpb24gZmlndXJlcyBvdXQKKyAqIHdoYXQgdGhlIG5ldyBvZmZzZXQgb2YgdGhlIGRlYnVnZnMgZmlsZSB3aWxsIGJlIGFuZCBhc3NpZ25zIHRoYXQgdmFsdWUgdG8gdGhlCisgKiBmX3BvcyBmaWVsZCBvZiBAZmlsZS4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZXcgb2Zmc2V0IGlmIHN1Y2Nlc3NmdWwgYW5kIHJldHVybnMgYSBuZWdhdGl2ZQorICogZXJyb3IgaWYgdW5hYmxlIHRvIHByb2Nlc3MgdGhlIHNlZWsuCisgKiovCiBzdGF0aWMgbG9mZl90CiBscGZjX2RlYnVnZnNfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmYsIGludCB3aGVuY2UpCiB7CkBAIC03NjcsNiArOTg3LDIyIEBACiAJcmV0dXJuIChwb3MgPCAwIHx8IHBvcyA+IGRlYnVnLT5sZW4pID8gLUVJTlZBTCA6IChmaWxlLT5mX3BvcyA9IHBvcyk7CiB9CiAKKy8qKgorICogbHBmY19kZWJ1Z2ZzX3JlYWQgLSBSZWFkIGEgZGVidWdmcyBmaWxlLgorICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdG8gcmVhZCBmcm9tLgorICogQGJ1ZjogVGhlIGJ1ZmZlciB0byBjb3B5IHRoZSBkYXRhIHRvLgorICogQG5ieXRlczogVGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkLgorICogQHBwb3M6IFRoZSBwb3NpdGlvbiBpbiB0aGUgZmlsZSB0byBzdGFydCByZWFkaW5nIGZyb20uCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgZGF0YSBmcm9tIGZyb20gdGhlIGJ1ZmZlciBpbmRpY2F0ZWQgaW4gdGhlIHByaXZhdGVfZGF0YQorICogZmllbGQgb2YgQGZpbGUuIEl0IHdpbGwgc3RhcnQgcmVhZGluZyBhdCBAcHBvcyBhbmQgY29weSB1cCB0byBAbmJ5dGVzIG9mCisgKiBkYXRhIHRvIEBidWYuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCB3YXMgcmVhZCAodGhpcyBjb3VsZCBiZSBsZXNzCisgKiB0aGFuIEBuYnl0ZXMgaWYgdGhlIGVuZCBvZiB0aGUgZmlsZSB3YXMgcmVhY2hlZCkgb3IgYSBuZWdhdGl2ZSBlcnJvciB2YWx1ZS4KKyAqKi8KIHN0YXRpYyBzc2l6ZV90CiBscGZjX2RlYnVnZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCkBAIC03NzYsNiArMTAxMiwxOCBAQAogCQkJCSAgICAgICBkZWJ1Zy0+bGVuKTsKIH0KIAorLyoqCisgKiBscGZjX2RlYnVnZnNfcmVsZWFzZSAtIFJlbGVhc2UgdGhlIGJ1ZmZlciB1c2VkIHRvIHN0b3JlIGRlYnVnZnMgZmlsZSBkYXRhLgorICogQGlub2RlOiBUaGUgaW5vZGUgcG9pbnRlciB0aGF0IGNvbnRhaW5zIGEgdnBvcnQgcG9pbnRlci4gKHVudXNlZCkKKyAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRoYXQgY29udGFpbnMgdGhlIGJ1ZmZlciB0byByZWxlYXNlLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyByb3V0aW5lIGZyZWVzIHRoZSBidWZmZXIgdGhhdCB3YXMgYWxsb2NhdGVkIHdoZW4gdGhlIGRlYnVnZnMgZmlsZSB3YXMKKyAqIG9wZW5lZC4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8uCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2RlYnVnZnNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTg0NSw2ICsxMDkzLDE2IEBACiBzdGF0aWMgYXRvbWljX3QgbHBmY19kZWJ1Z2ZzX2hiYV9jb3VudDsKICNlbmRpZgogCisvKioKKyAqIGxwZmNfZGVidWdmc19pbml0aWFsaXplIC0gSW5pdGlhbGl6ZSBkZWJ1Z2ZzIGZvciBhIHZwb3J0LgorICogQHZwb3J0OiBUaGUgdnBvcnQgcG9pbnRlciB0byBpbml0aWFsaXplLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogV2hlbiBEZWJ1Z2ZzIGlzIGNvbmZpZ3VyZWQgdGhpcyByb3V0aW5lIHNldHMgdXAgdGhlIGxwZmMgZGVidWdmcyBmaWxlIHN5c3RlbS4KKyAqIElmIG5vdCBhbHJlYWR5IGNyZWF0ZWQsIHRoaXMgcm91dGluZSB3aWxsIGNyZWF0ZSB0aGUgbHBmYyBkaXJlY3RvcnksIGFuZAorICogbHBmY1ggZGlyZWN0b3J5IChmb3IgdGhpcyBIQkEpLCBhbmQgdnBvcnRYIGRpcmVjdG9yeSBmb3IgdGhpcyB2cG9ydC4gSXQgd2lsbAorICogYWxzbyBjcmVhdGUgZWFjaCBmaWxlIHVzZWQgdG8gYWNjZXNzIGxwZmMgc3BlY2lmaWMgZGVidWdmcyBpbmZvcm1hdGlvbi4KKyAqKi8KIGlubGluZSB2b2lkCiBscGZjX2RlYnVnZnNfaW5pdGlhbGl6ZShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC04NjIsNyArMTEyMCw3IEBACiAJCWF0b21pY19zZXQoJmxwZmNfZGVidWdmc19oYmFfY291bnQsIDApOwogCQlpZiAoIWxwZmNfZGVidWdmc19yb290KSB7CiAJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJCSAiMDQwOSBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgcm9vdFxuIik7CisJCQkJCSAiMDQwOCBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgcm9vdFxuIik7CiAJCQlnb3RvIGRlYnVnX2ZhaWxlZDsKIAkJfQogCX0KQEAgLTg3Niw3ICsxMTM0LDcgQEAKIAkJCWRlYnVnZnNfY3JlYXRlX2RpcihuYW1lLCBscGZjX2RlYnVnZnNfcm9vdCk7CiAJCWlmICghcGhiYS0+aGJhX2RlYnVnZnNfcm9vdCkgewogCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCQkgIjA0MDkgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzIGhiYVxuIik7CisJCQkJCSAiMDQxMiBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgaGJhXG4iKTsKIAkJCWdvdG8gZGVidWdfZmFpbGVkOwogCQl9CiAJCWF0b21pY19pbmMoJmxwZmNfZGVidWdmc19oYmFfY291bnQpOwpAQCAtODkwLDcgKzExNDgsNyBAQAogCQkJCSBwaGJhLCAmbHBmY19kZWJ1Z2ZzX29wX2hicWluZm8pOwogCQlpZiAoIXBoYmEtPmRlYnVnX2hicWluZm8pIHsKIAkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkiMDQwOSBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgaGJxaW5mb1xuIik7CisJCQkJIjA0MTEgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzIGhicWluZm9cbiIpOwogCQkJZ290byBkZWJ1Z19mYWlsZWQ7CiAJCX0KIApAQCAtOTAyLDcgKzExNjAsNyBAQAogCQkJCSBwaGJhLCAmbHBmY19kZWJ1Z2ZzX29wX2R1bXBIQkFTbGltKTsKIAkJaWYgKCFwaGJhLT5kZWJ1Z19kdW1wSEJBU2xpbSkgewogCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSIwNDA5IENhbm5vdCBjcmVhdGUgZGVidWdmcyBkdW1wSEJBU2xpbVxuIik7CisJCQkJIjA0MTMgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzIGR1bXBIQkFTbGltXG4iKTsKIAkJCWdvdG8gZGVidWdfZmFpbGVkOwogCQl9CiAKQEAgLTkxNCw3ICsxMTcyLDcgQEAKIAkJCQkgcGhiYSwgJmxwZmNfZGVidWdmc19vcF9kdW1wSG9zdFNsaW0pOwogCQlpZiAoIXBoYmEtPmRlYnVnX2R1bXBIb3N0U2xpbSkgewogCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSIwNDA5IENhbm5vdCBjcmVhdGUgZGVidWdmcyBkdW1wSG9zdFNsaW1cbiIpOworCQkJCSIwNDE0IENhbm5vdCBjcmVhdGUgZGVidWdmcyBkdW1wSG9zdFNsaW1cbiIpOwogCQkJZ290byBkZWJ1Z19mYWlsZWQ7CiAJCX0KIApAQCAtOTQ0LDcgKzEyMDIsNyBAQAogCQkJCSBwaGJhLCAmbHBmY19kZWJ1Z2ZzX29wX3Nsb3dfcmluZ190cmMpOwogCQlpZiAoIXBoYmEtPmRlYnVnX3Nsb3dfcmluZ190cmMpIHsKIAkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKLQkJCQkJICIwNDA5IENhbm5vdCBjcmVhdGUgZGVidWdmcyAiCisJCQkJCSAiMDQxNSBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgIgogCQkJCQkgInNsb3dfcmluZ190cmFjZVxuIik7CiAJCQlnb3RvIGRlYnVnX2ZhaWxlZDsKIAkJfQpAQCAtOTU1LDcgKzEyMTMsNyBAQAogCQkJCUdGUF9LRVJORUwpOwogCQkJaWYgKCFwaGJhLT5zbG93X3JpbmdfdHJjKSB7CiAJCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCQkJICIwNDA5IENhbm5vdCBjcmVhdGUgZGVidWdmcyAiCisJCQkJCQkgIjA0MTYgQ2Fubm90IGNyZWF0ZSBkZWJ1Z2ZzICIKIAkJCQkJCSAic2xvd19yaW5nIGJ1ZmZlclxuIik7CiAJCQkJZ290byBkZWJ1Z19mYWlsZWQ7CiAJCQl9CkBAIC05NzIsNyArMTIzMCw3IEBACiAJCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgcGhiYS0+aGJhX2RlYnVnZnNfcm9vdCk7CiAJCWlmICghdnBvcnQtPnZwb3J0X2RlYnVnZnNfcm9vdCkgewogCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCQkgIjA0MDkgQ2FudCBjcmVhdGUgZGVidWdmcyIpOworCQkJCQkgIjA0MTcgQ2FudCBjcmVhdGUgZGVidWdmcyIpOwogCQkJZ290byBkZWJ1Z19mYWlsZWQ7CiAJCX0KIAkJYXRvbWljX2luYygmcGhiYS0+ZGVidWdmc192cG9ydF9jb3VudCk7CkBAIC0xMDAxLDcgKzEyNTksNyBAQAogCiAJaWYgKCF2cG9ydC0+ZGlzY190cmMpIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSAiMDQwOSBDYW5ub3QgY3JlYXRlIGRlYnVnZnMgZGlzYyB0cmFjZSAiCisJCQkJICIwNDE4IENhbm5vdCBjcmVhdGUgZGVidWdmcyBkaXNjIHRyYWNlICIKIAkJCQkgImJ1ZmZlclxuIik7CiAJCWdvdG8gZGVidWdfZmFpbGVkOwogCX0KQEAgLTEwMTQsNyArMTI3Miw3IEBACiAJCQkJIHZwb3J0LCAmbHBmY19kZWJ1Z2ZzX29wX2Rpc2NfdHJjKTsKIAlpZiAoIXZwb3J0LT5kZWJ1Z19kaXNjX3RyYykgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJICIwNDA5IENhbm5vdCBjcmVhdGUgZGVidWdmcyAiCisJCQkJICIwNDE5IENhbm5vdCBjcmVhdGUgZGVidWdmcyAiCiAJCQkJICJkaXNjb3ZlcnlfdHJhY2VcbiIpOwogCQlnb3RvIGRlYnVnX2ZhaWxlZDsKIAl9CkBAIC0xMDMzLDcgKzEyOTEsMTcgQEAKICNlbmRpZgogfQogCi0KKy8qKgorICogbHBmY19kZWJ1Z2ZzX3Rlcm1pbmF0ZSAtICBUZWFyIGRvd24gZGVidWdmcyBpbmZyYXN0cnVjdHVyZSBmb3IgdGhpcyB2cG9ydC4KKyAqIEB2cG9ydDogVGhlIHZwb3J0IHBvaW50ZXIgdG8gcmVtb3ZlIGZyb20gZGVidWdmcy4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFdoZW4gRGVidWdmcyBpcyBjb25maWd1cmVkIHRoaXMgcm91dGluZSByZW1vdmVzIGRlYnVnZnMgZmlsZSBzeXN0ZW0gZWxlbWVudHMKKyAqIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoaXMgdnBvcnQuIEl0IGFsc28gY2hlY2tzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55CisgKiB1c2VycyBsZWZ0IGZvciB0aGUgZGVidWdmcyBkaXJlY3RvcmllcyBhc3NvY2lhdGVkIHdpdGggdGhlIEhCQSBhbmQgZHJpdmVyLiBJZgorICogdGhpcyBpcyB0aGUgbGFzdCB1c2VyIG9mIHRoZSBIQkEgZGlyZWN0b3J5IG9yIGRyaXZlciBkaXJlY3RvcnkgdGhlbiBpdCB3aWxsCisgKiByZW1vdmUgdGhvc2UgZnJvbSB0aGUgZGVidWdmcyBpbmZyYXN0cnVjdHVyZSBhcyB3ZWxsLgorICoqLwogaW5saW5lIHZvaWQKIGxwZmNfZGVidWdmc190ZXJtaW5hdGUoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMTA5Niw1ICsxMzY0LDMgQEAKICNlbmRpZgogCXJldHVybjsKIH0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGlzYy5oCmluZGV4IDJkYjBiNzQuLmYyOWU1NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGlzYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGlzYy5oCkBAIC0zNyw2ICszNyw3IEBACiAJTFBGQ19FVlRfS0lMTCwKIAlMUEZDX0VWVF9FTFNfUkVUUlksCiAJTFBGQ19FVlRfREVWX0xPU1MsCisJTFBGQ19FVlRfRkFTVFBBVEhfTUdNVF9FVlQsCiB9OwogCiAvKiBzdHJ1Y3R1cmUgdXNlZCB0byBxdWV1ZSBldmVudCB0byB0aGUgZGlzY292ZXJ5IHRhc2tsZXQgKi8KQEAgLTQ3LDYgKzQ4LDI0IEBACiAJZW51bSBscGZjX3dvcmtfdHlwZSAgIGV2dDsKIH07CiAKK3N0cnVjdCBscGZjX3Njc2lfY2hlY2tfY29uZGl0aW9uX2V2ZW50Oworc3RydWN0IGxwZmNfc2NzaV92YXJxdWV1ZWRlcHRoX2V2ZW50Oworc3RydWN0IGxwZmNfc2NzaV9ldmVudF9oZWFkZXI7CitzdHJ1Y3QgbHBmY19mYWJyaWNfZXZlbnRfaGVhZGVyOworc3RydWN0IGxwZmNfZmNwcmRjaGtlcnJfZXZlbnQ7CisKKy8qIHN0cnVjdHVyZSB1c2VkIGZvciBzZW5kaW5nIGV2ZW50cyBmcm9tIGZhc3QgcGF0aCAqLworc3RydWN0IGxwZmNfZmFzdF9wYXRoX2V2ZW50IHsKKwlzdHJ1Y3QgbHBmY193b3JrX2V2dCB3b3JrX2V2dDsKKwlzdHJ1Y3QgbHBmY192cG9ydCAgICAgKnZwb3J0OworCXVuaW9uIHsKKwkJc3RydWN0IGxwZmNfc2NzaV9jaGVja19jb25kaXRpb25fZXZlbnQgY2hlY2tfY29uZF9ldnQ7CisJCXN0cnVjdCBscGZjX3Njc2lfdmFycXVldWVkZXB0aF9ldmVudCBxdWV1ZV9kZXB0aF9ldnQ7CisJCXN0cnVjdCBscGZjX3Njc2lfZXZlbnRfaGVhZGVyIHNjc2lfZXZ0OworCQlzdHJ1Y3QgbHBmY19mYWJyaWNfZXZlbnRfaGVhZGVyIGZhYnJpY19ldnQ7CisJCXN0cnVjdCBscGZjX2ZjcHJkY2hrZXJyX2V2ZW50IHJlYWRfY2hlY2tfZXJyb3I7CisJfSB1bjsKK307CiAKIHN0cnVjdCBscGZjX25vZGVsaXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5scF9saXN0cDsKQEAgLTg4LDYgKzEwNywxMCBAQAogCXVuc2lnbmVkIGxvbmcgbGFzdF9yYW1wX3VwX3RpbWU7ICAgICAgICAvKiBqaWZmeSBvZiBsYXN0IHJhbXAgdXAgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfcV9mdWxsX3RpbWU7CQkvKiBqaWZmeSBvZiBsYXN0IHF1ZXVlIGZ1bGwgKi8KIAlzdHJ1Y3Qga3JlZiAgICAga3JlZjsKKwlhdG9taWNfdCBjbWRfcGVuZGluZzsKKwl1aW50MzJfdCBjbWRfcWRlcHRoOworCXVuc2lnbmVkIGxvbmcgbGFzdF9jaGFuZ2VfdGltZTsKKwlzdHJ1Y3QgbHBmY19zY3NpY21kX2JrdCAqbGF0X2RhdGE7CS8qIExhdGVuY3kgZGF0YSAqLwogfTsKIAogLyogRGVmaW5lcyBmb3IgbmxwX2ZsYWcgKHVpbnQzMikgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCmluZGV4IGY1NGUwZjcuLjYzMGJkMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAibHBmY19ody5oIgogI2luY2x1ZGUgImxwZmNfc2xpLmgiCisjaW5jbHVkZSAibHBmY19ubC5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTUzLDYgKzU0LDI4IEBACiAKIHN0YXRpYyBpbnQgbHBmY19tYXhfZWxzX3RyaWVzID0gMzsKIAorLyoqCisgKiBscGZjX2Vsc19jaGtfbGF0dDogQ2hlY2sgaG9zdCBsaW5rIGF0dGVudGlvbiBldmVudCBmb3IgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGNoZWNrcyB3aGV0aGVyIHRoZXJlIGlzIGFuIG91dHN0YW5kaW5nIGhvc3QgbGluaworICogYXR0ZW50aW9uIGV2ZW50IGR1cmluZyB0aGUgZGlzY292ZXJ5IHByb2Nlc3Mgd2l0aCB0aGUgQHZwb3J0LiBJdCBpcyBkb25lCisgKiBieSByZWFkaW5nIHRoZSBIQkEncyBIb3N0IEF0dGVudGlvbiAoSEEpIHJlZ2lzdGVyLiBJZiB0aGVyZSBpcyBhbnkgaG9zdAorICogbGluayBhdHRlbnRpb24gZXZlbnRzIGR1cmluZyB0aGlzIEB2cG9ydCdzIGRpc2NvdmVyeSBwcm9jZXNzLCB0aGUgQHZwb3J0CisgKiBzaGFsbCBiZSBtYXJrZWQgYXMgRkNfQUJPUlRfRElTQ09WRVJZLCBhIGhvc3QgbGluayBhdHRlbnRpb24gY2xlYXIgc2hhbGwKKyAqIGJlIGlzc3VlZCBpZiB0aGUgbGluayBzdGF0ZSBpcyBub3QgYWxyZWFkeSBpbiBob3N0IGxpbmsgY2xlYXJlZCBzdGF0ZSwKKyAqIGFuZCBhIHJldHVybiBjb2RlIHNoYWxsIGluZGljYXRlIHdoZXRoZXIgdGhlIGhvc3QgbGluayBhdHRlbnRpb24gZXZlbnQKKyAqIGhhZCBoYXBwZW5lZC4KKyAqCisgKiBOb3RlIHRoYXQsIGlmIGVpdGhlciB0aGUgaG9zdCBsaW5rIGlzIGluIHN0YXRlIExQRkNfTElOS19ET1dOIG9yIEB2cG9ydAorICogc3RhdGUgaW4gTFBGQ19WUE9SVF9SRUFEWSwgdGhlIHJlcXVlc3QgZm9yIGNoZWNraW5nIGhvc3QgbGluayBhdHRlbnRpb24KKyAqIGV2ZW50IHdpbGwgYmUgaWdub3JlZCBhbmQgYSByZXR1cm4gY29kZSBzaGFsbCBpbmRpY2F0ZSBubyBob3N0IGxpbmsKKyAqIGF0dGVudGlvbiBldmVudCBoYWQgaGFwcGVuZWQuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBubyBob3N0IGxpbmsgYXR0ZW50aW9uIGV2ZW50IGhhcHBlbmVkCisgKiAgIDEgLSBob3N0IGxpbmsgYXR0ZW50aW9uIGV2ZW50IGhhcHBlbmVkCisgKiovCiBpbnQKIGxwZmNfZWxzX2Noa19sYXR0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTkyLDYgKzExNSwzNCBAQAogCXJldHVybiAxOwogfQogCisvKioKKyAqIGxwZmNfcHJlcF9lbHNfaW9jYjogQWxsb2NhdGUgYW5kIHByZXBhcmUgYSBscGZjIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGV4cGVjdFJzcDogZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgcmVzcG9uc2UgaXMgZXhwZWN0ZWQuCisgKiBAY21kU2l6ZTogc2l6ZSBvZiB0aGUgRUxTIGNvbW1hbmQuCisgKiBAcmV0cnk6IG51bWJlciBvZiByZXRyaWVzIHRvIHRoZSBjb21tYW5kIElPQ0Igd2hlbiBpdCBmYWlscy4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICogQGRpZDogZGVzdGluYXRpb24gaWRlbnRpZmllci4KKyAqIEBlbHNjbWQ6IHRoZSBFTFMgY29tbWFuZCBjb2RlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIGEgbHBmYy1JT0NCIGRhdGEgc3RydWN0dXJlIGZyb20KKyAqIHRoZSBkcml2ZXIgbHBmYy1JT0NCIGZyZWUtbGlzdCBhbmQgcHJlcGFyZSB0aGUgSU9DQiB3aXRoIHRoZSBwYXJhbWV0ZXJzCisgKiBwYXNzZWQgaW50byB0aGUgcm91dGluZSBmb3IgZGlzY292ZXJ5IHN0YXRlIG1hY2hpbmUgdG8gaXNzdWUgYW4gRXh0ZW5kZWQKKyAqIExpbmsgU2VydmljZSAoRUxTKSBjb21tYW5kcy4gSXQgaXMgYSBnZW5lcmljIGxwZmMtSU9DQiBhbGxvY2F0aW9uCisgKiBhbmQgcHJlcGFyYXRpb24gcm91dGluZSB0aGF0IGlzIHVzZWQgYnkgYWxsIHRoZSBkaXNjb3Zlcnkgc3RhdGUgbWFjaGluZQorICogcm91dGluZXMgYW5kIHRoZSBFTFMgY29tbWFuZC1zcGVjaWZpYyBmaWVsZHMgd2lsbCBiZSBsYXRlciBzZXQgdXAgYnkKKyAqIHRoZSBpbmRpdmlkdWFsIGRpc2NvdmVyeSBtYWNoaW5lIHJvdXRpbmVzIGFmdGVyIGNhbGxpbmcgdGhpcyByb3V0aW5lCisgKiBhbGxvY2F0aW5nIGFuZCBwcmVwYXJpbmcgYSBnZW5lcmljIElPQ0IgZGF0YSBzdHJ1Y3R1cmUuIEl0IGZpbGxzIGluIHRoZQorICogQnVmZmVyIERlc2NyaXB0b3IgRW50cmllcyAoQkRFcyksIGFsbG9jYXRlcyBidWZmZXJzIGZvciBib3RoIGNvbW1hbmQKKyAqIHBheWxvYWQgYW5kIHJlc3BvbnNlIHBheWxvYWQgKGlmIGV4cGVjdGVkKS4gVGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUKKyAqIG5kbHAgaXMgaW5jcmVtZW50ZWQgYnkgMSBhbmQgdGhlIHJlZmVyZW5jZSB0byB0aGUgbmRscCBpcyBwdXQgaW50bworICogY29udGV4dDEgb2YgdGhlIElPQ0IgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoaXMgSU9DQiB0byBob2xkIHRoZSBuZGxwCisgKiByZWZlcmVuY2UgZm9yIHRoZSBjb21tYW5kJ3MgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYWNjZXNzIGxhdGVyLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIFBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZC9wcmVwYXJlZCBlbHMgaW9jYiBkYXRhIHN0cnVjdHVyZQorICogICBOVUxMIC0gd2hlbiBlbHMgaW9jYiBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uL3ByZXBhcmF0aW9uIGZhaWxlZAorICoqLwogc3RhdGljIHN0cnVjdCBscGZjX2lvY2JxICoKIGxwZmNfcHJlcF9lbHNfaW9jYihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQ4X3QgZXhwZWN0UnNwLAogCQkgICB1aW50MTZfdCBjbWRTaXplLCB1aW50OF90IHJldHJ5LApAQCAtMTUwLDcgKzIwMSw3IEBACiAKIAlpY21kLT51bi5lbHNyZXE2NC5iZGwuYWRkckhpZ2ggPSBwdXRQYWRkckhpZ2gocGJ1Zmxpc3QtPnBoeXMpOwogCWljbWQtPnVuLmVsc3JlcTY0LmJkbC5hZGRyTG93ID0gcHV0UGFkZHJMb3cocGJ1Zmxpc3QtPnBoeXMpOwotCWljbWQtPnVuLmVsc3JlcTY0LmJkbC5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREw7CisJaWNtZC0+dW4uZWxzcmVxNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JMUF82NDsKIAlpY21kLT51bi5lbHNyZXE2NC5yZW1vdGVJRCA9IGRpZDsJLyogRElEICovCiAJaWYgKGV4cGVjdFJzcCkgewogCQlpY21kLT51bi5lbHNyZXE2NC5iZGwuYmRlU2l6ZSA9ICgyICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpKTsKQEAgLTE4NSw3ICsyMzYsNyBAQAogCQlicGwtPmFkZHJMb3cgPSBsZTMyX3RvX2NwdShwdXRQYWRkckxvdyhwcnNwLT5waHlzKSk7CiAJCWJwbC0+YWRkckhpZ2ggPSBsZTMyX3RvX2NwdShwdXRQYWRkckhpZ2gocHJzcC0+cGh5cykpOwogCQlicGwtPnR1cy5mLmJkZVNpemUgPSBGQ0VMU1NJWkU7Ci0JCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1VTRV9SQ1Y7CisJCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRFXzY0OwogCQlicGwtPnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7CiAJfQogCkBAIC0yMzMsNiArMjg0LDIyIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qKgorICogbHBmY19pc3N1ZV9mYWJyaWNfcmVnbG9naW46IElzc3VlIGZhYnJpYyByZWdpc3RyYXRpb24gbG9naW4gZm9yIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgYSBmYWJyaWMgcmVnaXN0cmF0aW9uIGxvZ2luIGZvciBhIEB2cG9ydC4gQW4KKyAqIGFjdGl2ZSBuZGxwIG5vZGUgd2l0aCBGYWJyaWNfRElEIG11c3QgYWxyZWFkeSBleGlzdCBmb3IgdGhpcyBAdnBvcnQuCisgKiBUaGUgcm91dGluZSBpbnZva2VzIHR3byBtYWlsYm94IGNvbW1hbmRzIHRvIGNhcnJ5IG91dCBmYWJyaWMgcmVnaXN0cmF0aW9uCisgKiBsb2dpbiB0aHJvdWdoIHRoZSBIQkEgZmlybXdhcmU6IHRoZSBmaXJzdCBtYWlsYm94IGNvbW1hbmQgcmVxdWVzdHMgdGhlCisgKiBIQkEgdG8gcGVyZm9ybSBsaW5rIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBAdnBvcnQ7IGFuZCB0aGUgc2Vjb25kIG1haWxib3gKKyAqIGNvbW1hbmQgcmVxdWVzdHMgdGhlIEhCQSB0byBwZXJmb3JtIHRoZSBhY3R1YWwgZmFicmljIHJlZ2lzdHJhdGlvbiBsb2dpbgorICogd2l0aCB0aGUgQHZwb3J0LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBzdWNjZXNzZnVsbHkgaXNzdWVkIGZhYnJpYyByZWdpc3RyYXRpb24gbG9naW4gZm9yIEB2cG9ydAorICogICAtRU5YSU8gLS0gZmFpbGVkIHRvIGlzc3VlIGZhYnJpYyByZWdpc3RyYXRpb24gbG9naW4gZm9yIEB2cG9ydAorICoqLwogc3RhdGljIGludAogbHBmY19pc3N1ZV9mYWJyaWNfcmVnbG9naW4oc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMzEzLDYgKzM4MCwyNiBAQAogCXJldHVybiAtRU5YSU87CiB9CiAKKy8qKgorICogbHBmY19jbXBsX2Vsc19mbG9naV9mYWJyaWM6IENvbXBsZXRpb24gZnVuY3Rpb24gZm9yIGZsb2dpIHRvIGEgZmFicmljIHBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAc3A6IHBvaW50ZXIgdG8gc2VydmljZSBwYXJhbWV0ZXIgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAaXJzcDogcG9pbnRlciB0byB0aGUgSU9DQiB3aXRoaW4gdGhlIGxwZmMgcmVzcG9uc2UgSU9DQi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCBieSB0aGUgbHBmY19jbXBsX2Vsc19mbG9naSgpIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAqIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgY29tcGxldGlvbiBvZiBhIEZhYnJpYyBMb2dpbiAoRkxPR0kpIGludG8gYSBmYWJyaWMKKyAqIHBvcnQgaW4gYSBmYWJyaWMgdG9wb2xvZ3kuIEl0IHByb3Blcmx5IHNldHMgdXAgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIEBuZGxwCisgKiBmcm9tIHRoZSBJT0NCIHJlc3BvbnNlLiBJdCBhbHNvIGNoZWNrIHRoZSBuZXdseSBhc3NpZ25lZCBOX1BvcnQgSUQgdG8gdGhlCisgKiBAdnBvcnQgYWdhaW5zdCB0aGUgcHJldmlvdXNseSBhc3NpZ25lZCBOX1BvcnQgSUQuIElmIGl0IGlzIGRpZmZlcmVudCBmcm9tCisgKiB0aGUgcHJldmlvdXNseSBhc3NpZ25lZCBEZXN0aW5hdGlvbiBJRCAoRElEKSwgdGhlIGxwZmNfdW5yZWdfcnBpKCkgcm91dGluZQorICogaXMgaW52b2tlZCBvbiBhbGwgdGhlIHJlbWFpbmluZyBub2RlcyB3aXRoIHRoZSBAdnBvcnQgdG8gdW5yZWdpc3RlciB0aGUKKyAqIFJlbW90ZSBQb3J0IEluZGljYXRvcnMgKFJQSXMpLiBGaW5hbGx5LCB0aGUgbHBmY19pc3N1ZV9mYWJyaWNfcmVnbG9naW4oKQorICogaXMgaW52b2tlZCB0byByZWdpc3RlciBsb2dpbiB0byB0aGUgZmFicmljLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzIChjdXJyZW50bHksIGFsd2F5cyByZXR1cm4gMCkKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfY21wbF9lbHNfZmxvZ2lfZmFicmljKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCiAJCQkgICBzdHJ1Y3Qgc2Vydl9wYXJtICpzcCwgSU9DQl90ICppcnNwKQpAQCAtMzg3LDcgKzQ3NCw3IEBACiAJCSAqLwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobnAsIG5leHRfbnAsCiAJCQkJCSZ2cG9ydC0+ZmNfbm9kZXMsIG5scF9saXN0cCkgewotCQkJaWYgKCFOTFBfQ0hLX05PREVfQUNUKG5kbHApKQorCQkJaWYgKCFOTFBfQ0hLX05PREVfQUNUKG5wKSkKIAkJCQljb250aW51ZTsKIAkJCWlmICgobnAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX05QUl9OT0RFKSB8fAogCQkJCSAgICEobnAtPm5scF9mbGFnICYgTkxQX05QUl9BRElTQykpCkBAIC00MTYsOSArNTAzLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBXZSBGTE9HSWVkIGludG8gYW4gTlBvcnQsIGluaXRpYXRlIHB0MnB0IHByb3RvY29sCi0gKi8KKy8qKgorICogbHBmY19jbXBsX2Vsc19mbG9naV9ucG9ydDogQ29tcGxldGlvbiBmdW5jdGlvbiBmb3IgZmxvZ2kgdG8gYW4gTl9Qb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICogQHNwOiBwb2ludGVyIHRvIHNlcnZpY2UgcGFyYW1ldGVyIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIGJ5IHRoZSBscGZjX2NtcGxfZWxzX2Zsb2dpKCkgY29tcGxldGlvbiBjYWxsYmFjaworICogZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjb21wbGV0aW9uIG9mIGEgRmFicmljIExvZ2luIChGTE9HSSkgaW50byBhbiBOX1BvcnQKKyAqIGluIGEgcG9pbnQtdG8tcG9pbnQgdG9wb2xvZ3kuIEZpcnN0LCB0aGUgQHZwb3J0J3MgTl9Qb3J0IE5hbWUgaXMgY29tcGFyZWQKKyAqIHdpdGggdGhlIHJlY2VpdmVkIE5fUG9ydCBOYW1lOiBpZiB0aGUgQHZwb3J0J3MgTl9Qb3J0IE5hbWUgaXMgZ3JlYXRlciB0aGFuCisgKiB0aGUgcmVjZWl2ZWQgTl9Qb3J0IE5hbWUgbGV4aWNvZ3JhcGhpY2FsbHksIHRoaXMgbm9kZSBzaGFsbCBhc3NpZ24gbG9jYWwKKyAqIE5fUG9ydCBJRCAoUFQyUFRfTG9jYWxJRDogMSkgYW5kIHJlbW90ZSBOX1BvcnQgSUQgKFBUMlBUX1JlbW90ZUlEOiAyKSBhbmQKKyAqIHdpbGwgc2VuZCBvdXQgUG9ydCBMb2dpbiAoUExPR0kpIHdpdGggdGhlIE5fUG9ydCBJRHMgYXNzaWduZWQuIE90aGVyd2lzZSwKKyAqIHRoaXMgbm9kZSBzaGFsbCBqdXN0IHdhaXQgZm9yIHRoZSByZW1vdGUgbm9kZSB0byBpc3N1ZSBQTE9HSSBhbmQgYXNzaWduCisgKiBOX1BvcnQgSURzLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzCisgKiAgIC1FTlhJTyAtIEZhaWwKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfY21wbF9lbHNfZmxvZ2lfbnBvcnQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKIAkJCSAgc3RydWN0IHNlcnZfcGFybSAqc3ApCkBAIC01MTYsNiArNjIwLDI5IEBACiAJcmV0dXJuIC1FTlhJTzsKIH0KIAorLyoqCisgKiBscGZjX2NtcGxfZWxzX2Zsb2dpOiBDb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBmbG9naS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBscGZjIHJlc3BvbnNlIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSB0b3AtbGV2ZWwgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgaXNzdWluZworICogYSBGYWJyaWMgTG9naW4gKEZMT0dJKSBjb21tYW5kLiBJZiB0aGUgcmVzcG9uc2UgSU9DQiByZXBvcnRlZCBlcnJvciwKKyAqIHRoZSBscGZjX2Vsc19yZXRyeSgpIHJvdXRpbmUgc2hhbGwgYmUgaW52b2tlZCB0byByZXRyeSB0aGUgRkxPR0kuIElmCisgKiByZXRyeSBoYXMgYmVlbiBtYWRlIChlaXRoZXIgaW1tZWRpYXRlbHkgb3IgZGVsYXllZCB3aXRoIGxwZmNfZWxzX3JldHJ5KCkKKyAqIHJldHVybmluZyAxKSwgdGhlIGNvbW1hbmQgSU9DQiB3aWxsIGJlIHJlbGVhc2VkIGFuZCBmdW5jdGlvbiByZXR1cm5lZC4KKyAqIElmIHRoZSByZXRyeSBhdHRlbXB0IGhhcyBiZWVuIGdpdmVuIHVwIChwb3NzaWJseSByZWFjaCB0aGUgbWF4aW11bQorICogbnVtYmVyIG9mIHJldHJpZXMpLCBvbmUgYWRkaXRpb25hbCBkZWNyZW1lbnQgb2YgbmRscCByZWZlcmVuY2Ugc2hhbGwgYmUKKyAqIGludm9rZWQgYmVmb3JlIGdvaW5nIG91dCBhZnRlciByZWxlYXNpbmcgdGhlIGNvbW1hbmQgSU9DQi4gVGhpcyB3aWxsCisgKiBhY3R1YWxseSByZWxlYXNlIHRoZSByZW1vdGUgbm9kZSAoTm90ZSwgbHBmY19lbHNfZnJlZV9pb2NiKCkgd2lsbCBhbHNvCisgKiBpbnZva2Ugb25lIGRlY3JlbWVudCBvZiBuZGxwIHJlZmVyZW5jZSBjb3VudCkuIElmIG5vIGVycm9yIHJlcG9ydGVkIGluCisgKiB0aGUgSU9DQiBzdGF0dXMsIHRoZSBjb21tYW5kIFBvcnQgSUQgZmllbGQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlcgorICogdGhpcyBpcyBhIHBvaW50LXRvLXBvaW50IHRvcG9sb2d5IG9yIGEgZmFicmljIHRvcG9sb2d5OiBpZiB0aGUgUG9ydCBJRAorICogZmllbGQgaXMgYXNzaWduZWQsIGl0IGlzIGEgZmFicmljIHRvcG9sb2d5OyBvdGhlcndpc2UsIGl0IGlzIGEKKyAqIHBvaW50LXRvLXBvaW50IHRvcG9sb2d5LiBUaGUgcm91dGluZSBscGZjX2NtcGxfZWxzX2Zsb2dpX2ZhYnJpYygpIG9yCisgKiBscGZjX2NtcGxfZWxzX2Zsb2dpX25wb3J0KCkgc2hhbGwgYmUgaW52b2tlZCBhY2NvcmRpbmdseSB0byBoYW5kbGUgdGhlCisgKiBzcGVjaWZpYyB0b3BvbG9neSBjb21wbGV0aW9uIGNvbmRpdGlvbnMuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jbXBsX2Vsc19mbG9naShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgICAgc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC02MTgsNiArNzQ1LDI4IEBACiAJbHBmY19lbHNfZnJlZV9pb2NiKHBoYmEsIGNtZGlvY2IpOwogfQogCisvKioKKyAqIGxwZmNfaXNzdWVfZWxzX2Zsb2dpOiBJc3N1ZSBhbiBmbG9naSBpb2NiIGNvbW1hbmQgZm9yIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcmV0cnk6IG51bWJlciBvZiByZXRyaWVzIHRvIHRoZSBjb21tYW5kIElPQ0IuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBhIEZhYnJpYyBMb2dpbiAoRkxPR0kpIFJlcXVlc3QgRUxTIGNvbW1hbmQKKyAqIGZvciBhIEB2cG9ydC4gVGhlIGluaXRpYXRvciBzZXJ2aWNlIHBhcmFtZXRlcnMgYXJlIHB1dCBpbnRvIHRoZSBwYXlsb2FkCisgKiBvZiB0aGUgRkxPR0kgUmVxdWVzdCBJT0NCIGFuZCB0aGUgdG9wLWxldmVsIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIKKyAqIHRvIGxwZmNfY21wbF9lbHNfZmxvZ2koKSByb3V0aW5lIGlzIHB1dCB0byB0aGUgSU9DQiBjb21wbGV0aW9uIGNhbGxiYWNrCisgKiBmdW5jdGlvbiBmaWVsZC4gVGhlIGxwZmNfaXNzdWVfZmFicmljX2lvY2Igcm91dGluZSBpcyBpbnZva2VkIHRvIHNlbmQKKyAqIG91dCBGTE9HSSBFTFMgY29tbWFuZCB3aXRoIG9uZSBvdXRzdGFuZGluZyBmYWJyaWMgSU9DQiBhdCBhIHRpbWUuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBGTE9HSSBFTFMgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gc3VjY2Vzc2Z1bGx5IGlzc3VlZCBmbG9naSBpb2NiIGZvciBAdnBvcnQKKyAqICAgMSAtIGZhaWxlZCB0byBpc3N1ZSBmbG9naSBpb2NiIGZvciBAdnBvcnQKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfaXNzdWVfZWxzX2Zsb2dpKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCiAJCSAgICAgdWludDhfdCByZXRyeSkKQEAgLTY5NCw2ICs4NDMsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19hYm9ydF9mbG9naTogQWJvcnQgYWxsIG91dHN0YW5kaW5nIGZsb2dpIGlvY2JzLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGFib3J0cyBhbGwgdGhlIG91dHN0YW5kaW5nIEZhYnJpYyBMb2dpbiAoRkxPR0kpIElPQ0JzCisgKiB3aXRoIGEgQHBoYmEuIFRoaXMgcm91dGluZSB3YWxrcyBhbGwgdGhlIG91dHN0YW5kaW5nIElPQ0JzIG9uIHRoZSB0eGNtcGxxCisgKiBsaXN0IGFuZCBpc3N1ZXMgYW4gYWJvcnQgSU9DQiBjb21tb25kIG9uIGVhY2ggb3V0c3RhbmRpbmcgSU9DQiB0aGF0CisgKiBjb250YWlucyBhIGFjdGl2ZSBGYWJyaWNfRElEIG5kbHAuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHRvIGlzc3VlCisgKiB0aGUgYWJvcnQgSU9DQiBjb21tYW5kIG9uIGFsbCB0aGUgb3V0c3RhbmRpbmcgSU9DQnMsIHRodXMgd2hlbiB0aGlzCisgKiBmdW5jdGlvbiByZXR1cm5zLCBpdCBkb2VzIG5vdCBndWFyYW50ZWUgYWxsIHRoZSBJT0NCcyBhcmUgYWN0dWFsbHkgYWJvcnRlZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjZXNzZnVsbHkgaXNzdWVkIGFib3J0IGlvY2Igb24gYWxsIG91dHN0YW5kaW5nIGZsb2dpcyAoQWx3YXlzIDApCisgKiovCiBpbnQKIGxwZmNfZWxzX2Fib3J0X2Zsb2dpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTcyOSw2ICs4OTIsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2luaXRpYWxfZmxvZ2k6IElzc3VlIGFuIGluaXRpYWwgZmFicmljIGxvZ2luIGZvciBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIGFuIGluaXRpYWwgRmFicmljIExvZ2luIChGTE9HSSkgZm9yIHRoZSBAdnBvcnQKKyAqIHNwZWNpZmllZC4gSXQgZmlyc3Qgc2VhcmNoZXMgdGhlIG5kbHAgd2l0aCB0aGUgRmFicmljX0RJRCAoMHhmZmZmZmUpIGZyb20KKyAqIHRoZSBAdnBvcnQncyBuZGxwIGxpc3QuIElmIG5vIHN1Y2ggbmRscCBmb3VuZCwgaXQgd2lsbCBjcmVhdGUgYW4gbmRscCBhbmQKKyAqIHB1dCBpdCBpbnRvIHRoZSBAdnBvcnQncyBuZGxwIGxpc3QuIElmIGFuIGluYWN0aXZlIG5kbHAgZm91bmQgb24gdGhlIGxpc3QsCisgKiBpdCB3aWxsIGp1c3QgYmUgZW5hYmxlZCBhbmQgbWFkZSBhY3RpdmUuIFRoZSBscGZjX2lzc3VlX2Vsc19mbG9naSgpIHJvdXRpbmUKKyAqIGlzIHRoZW4gaW52b2tlZCB3aXRoIHRoZSBAdnBvcnQgYW5kIHRoZSBuZGxwIHRvIHBlcmZvcm0gdGhlIEZMT0dJIGZvciB0aGUKKyAqIEB2cG9ydC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gZmFpbGVkIHRvIGlzc3VlIGluaXRpYWwgZmxvZ2kgZm9yIEB2cG9ydAorICogICAxIC0gc3VjY2Vzc2Z1bGx5IGlzc3VlZCBpbml0aWFsIGZsb2dpIGZvciBAdnBvcnQKKyAqKi8KIGludAogbHBmY19pbml0aWFsX2Zsb2dpKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTc2NCw2ICs5NDMsMjIgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoqCisgKiBscGZjX2luaXRpYWxfZmRpc2M6IElzc3VlIGFuIGluaXRpYWwgZmFicmljIGRpc2NvdmVyeSBmb3IgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBhbiBpbml0aWFsIEZhYnJpYyBEaXNjb3ZlciAoRkRJU0MpIGZvciB0aGUgQHZwb3J0CisgKiBzcGVjaWZpZWQuIEl0IGZpcnN0IHNlYXJjaGVzIHRoZSBuZGxwIHdpdGggdGhlIEZhYnJpY19ESUQgKDB4ZmZmZmZlKSBmcm9tCisgKiB0aGUgQHZwb3J0J3MgbmRscCBsaXN0LiBJZiBubyBzdWNoIG5kbHAgZm91bmQsIGl0IHdpbGwgY3JlYXRlIGFuIG5kbHAgYW5kCisgKiBwdXQgaXQgaW50byB0aGUgQHZwb3J0J3MgbmRscCBsaXN0LiBJZiBhbiBpbmFjdGl2ZSBuZGxwIGZvdW5kIG9uIHRoZSBsaXN0LAorICogaXQgd2lsbCBqdXN0IGJlIGVuYWJsZWQgYW5kIG1hZGUgYWN0aXZlLiBUaGUgbHBmY19pc3N1ZV9lbHNfZmRpc2MoKSByb3V0aW5lCisgKiBpcyB0aGVuIGludm9rZWQgd2l0aCB0aGUgQHZwb3J0IGFuZCB0aGUgbmRscCB0byBwZXJmb3JtIHRoZSBGRElTQyBmb3IgdGhlCisgKiBAdnBvcnQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIGZhaWxlZCB0byBpc3N1ZSBpbml0aWFsIGZkaXNjIGZvciBAdnBvcnQKKyAqICAgMSAtIHN1Y2Nlc3NmdWxseSBpc3N1ZWQgaW5pdGlhbCBmZGlzYyBmb3IgQHZwb3J0CisgKiovCiBpbnQKIGxwZmNfaW5pdGlhbF9mZGlzYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC03OTcsNiArOTkyLDE3IEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qKgorICogbHBmY19tb3JlX3Bsb2dpOiBDaGVjayBhbmQgaXNzdWUgcmVtYWluaW5nIHBsb2dpcyBmb3IgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGNoZWNrcyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlIHJlbWFpbmluZyBQb3J0IExvZ2lucworICogKFBMT0dJKSB0byBiZSBpc3N1ZWQgZm9yIHRoZSBAdnBvcnQuIElmIHNvLCBpdCB3aWxsIGludm9rZSB0aGUgcm91dGluZQorICogbHBmY19lbHNfZGlzY19wbG9naSgpIHRvIGdvIHRocm91Z2ggdGhlIE5vZGUgUG9ydCBSZWNvdmVyeSAoTlBSKSBub2RlcworICogdG8gaXNzdWUgRUxTIFBMT0dJcyB1cCB0byB0aGUgY29uZmlndXJlZCBkaXNjb3ZlciB0aHJlYWRzIHdpdGggdGhlCisgKiBAdnBvcnQgKEB2cG9ydC0+Y2ZnX2Rpc2NvdmVyeV90aHJlYWRzKS4gVGhlIGZ1bmN0aW9uIGFsc28gZGVjcmVtZW50CisgKiB0aGUgQHZwb3J0J3MgbnVtX2Rpc2Nfbm9kZSBieSAxIGlmIGl0IGlzIG5vdCBhbHJlYWR5IDAuCisgKiovCiB2b2lkCiBscGZjX21vcmVfcGxvZ2koc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtODE5LDYgKzEwMjUsMzcgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19wbG9naV9jb25maXJtX25wb3J0OiBDb25maXJtIHBvbG9naSB3d3BuIG1hdGNoZXMgc3RvcmVkIG5kbHAuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwcnNwOiBwb2ludGVyIHRvIHJlc3BvbnNlIElPQ0IgcGF5bG9hZC4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBjaGVja3MgYW5kIGluZGljYXRlcyB3aGV0aGVyIHRoZSBXV1BOIG9mIGFuIE5fUG9ydCwgcmV0cmlldmVkCisgKiBmcm9tIGEgUExPR0ksIG1hdGNoZXMgdGhlIFdXUE4gdGhhdCBpcyBzdG9yZWQgaW4gdGhlIEBuZGxwIGZvciB0aGF0IE5fUE9ydC4KKyAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgYXJlIGNvbnNpZGVyZWQgTl9Qb3J0IGNvbmZpcm1lZDoKKyAqIDEpIFRoZSBOX1BvcnQgaXMgYSBGYWJyaWMgbmRscDsgMikgVGhlIEBuZGxwIGlzIG9uIHZwb3J0IGxpc3QgYW5kIG1hdGNoZXMKKyAqIHRoZSBXV1BOIG9mIHRoZSBOX1BvcnQgbG9nZ2VkIGludG87IDMpIFRoZSBAbmRscCBpcyBub3Qgb24gdnBvcnQgbGlzdCBidXQKKyAqIGl0IGRvZXMgbm90IGhhdmUgV1dQTiBhc3NpZ25lZCBlaXRoZXIuIElmIHRoZSBXV1BOIGlzIGNvbmZpcm1lZCwgdGhlCisgKiBwb2ludGVyIHRvIHRoZSBAbmRscCB3aWxsIGJlIHJldHVybmVkLiBJZiB0aGUgV1dQTiBpcyBub3QgY29uZmlybWVkOgorICogMSkgaWYgdGhlcmUgaXMgYSBub2RlIG9uIHZwb3J0IGxpc3Qgb3RoZXIgdGhhbiB0aGUgQG5kbHAgd2l0aCB0aGUgc2FtZQorICogV1dQTiBvZiB0aGUgTl9Qb3J0IFBMT0dJIGxvZ2dlZCBpbnRvLCB0aGUgbHBmY191bnJlZ19ycGkoKSB3aWxsIGJlIGludm9rZWQKKyAqIG9uIHRoYXQgbm9kZSB0byByZWxlYXNlIHRoZSBSUEkgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlOyAyKSBpZiB0aGVyZSBpcworICogbm8gbm9kZSBmb3VuZCBvbiB2cG9ydCBsaXN0IHdpdGggdGhlIHNhbWUgV1dQTiBvZiB0aGUgTl9Qb3J0IFBMT0dJIGxvZ2dlZAorICogaW50bywgYSBuZXcgbm9kZSBzaGFsbCBiZSBhbGxvY2F0ZWQgKG9yIGFjdGl2YXRlZCkuIEluIGVpdGhlciBjYXNlLCB0aGUKKyAqIHBhcmFtZXRlcnMgb2YgdGhlIEBuZGxwIHNoYWxsIGJlIGNvcGllZCB0byB0aGUgbmV3X25kbHAsIHRoZSBAbmRscCBzaGFsbAorICogYmUgcmVsZWFzZWQgYW5kIHRoZSBuZXdfbmRscCBzaGFsbCBiZSBwdXQgb24gdG8gdGhlIHZwb3J0IG5vZGUgbGlzdCBhbmQKKyAqIGl0cyBwb2ludGVyIHJldHVybmVkIGFzIHRoZSBjb25maXJtZWQgbm9kZS4KKyAqCisgKiBOb3RlIHRoYXQgYmVmb3JlIHRoZSBAbmRscCBnb3QgInJlbGVhc2VkIiwgdGhlIGtlZXBESUQgZnJvbSBub3QtbWF0Y2hpbmcKKyAqIG9yIGluYWN0aXZlICJuZXdfbmRscCIgb24gdGhlIHZwb3J0IG5vZGUgbGlzdCBpcyBhc3NpZ25lZCB0byB0aGUgbmxwX0RJRAorICogb2YgdGhlIEBuZGxwLiBUaGlzIGlzIGJlY2F1c2UgdGhlIHJlbGVhc2Ugb2YgQG5kbHAgaXMgYWN0dWFsbHkgdG8gcHV0IGl0CisgKiBpbnRvIGFuIGluYWN0aXZlIHN0YXRlIG9uIHRoZSB2cG9ydCBub2RlIGxpc3QgYW5kIHRoZSB2cG9ydCBub2RlIGxpc3QKKyAqIG1hbmFnZW1lbnQgYWxnb3JpdGhtIGRvZXMgbm90IGFsbG93IHR3byBub2RlIHdpdGggYSBzYW1lIERJRC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICBwb2ludGVyIHRvIHRoZSBQTE9HSSBOX1BvcnQgQG5kbHAKKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqCiBscGZjX3Bsb2dpX2NvbmZpcm1fbnBvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MzJfdCAqcHJzcCwKIAkJCSBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKQEAgLTkyMiw2ICsxMTU5LDE3IEBACiAJcmV0dXJuIG5ld19uZGxwOwogfQogCisvKioKKyAqIGxwZmNfZW5kX3JzY246IENoZWNrIGFuZCBoYW5kbGUgbW9yZSByc2NuIGZvciBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIHdoZXRoZXIgbW9yZSBSZWdpc3RyYXRpb24gU3RhdGUgQ2hhbmdlCisgKiBOb3RpZmljYXRpb25zIChSU0NOcykgY2FtZSBpbiB3aGlsZSB0aGUgZGlzY292ZXJ5IHN0YXRlIG1hY2hpbmUgd2FzIGluCisgKiB0aGUgRkNfUlNDTl9NT0RFLiBJZiBzbywgdGhlIGxwZmNfZWxzX2hhbmRsZV9yc2NuKCkgcm91dGluZSB3aWxsIGJlCisgKiBpbnZva2VkIHRvIGhhbmRsZSB0aGUgYWRkaXRpb25hbCBSU0NOcyBmb3IgdGhlIEB2cG9ydC4gT3RoZXJ3aXNlLCB0aGUKKyAqIEZDX1JTQ05fTU9ERSBiaXQgd2lsbCBiZSBjbGVhcmVkIHdpdGggdGhlIEB2cG9ydCB0byBtYXJrIGFzIHRoZSBlbmQgb2YKKyAqIGhhbmRsaW5nIHRoZSBSU0NOcy4KKyAqKi8KIHZvaWQKIGxwZmNfZW5kX3JzY24oc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtOTQzLDYgKzExOTEsMjYgQEAKIAl9CiB9CiAKKy8qKgorICogbHBmY19jbXBsX2Vsc19wbG9naTogQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgcGxvZ2kuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gbHBmYyByZXNwb25zZSBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgaXNzdWluZyB0aGUgUG9ydAorICogTG9naW4gKFBMT0dJKSBjb21tYW5kLiBGb3IgUExPR0kgY29tcGxldGlvbiwgdGhlcmUgbXVzdCBiZSBhbiBhY3RpdmUKKyAqIG5kbHAgb24gdGhlIHZwb3J0IG5vZGUgbGlzdCB0aGF0IG1hdGNoZXMgdGhlIHJlbW90ZSBub2RlIElEIGZyb20gdGhlCisgKiBQTE9HSSByZXBvbnNlIElPQ0IuIElmIHN1Y2ggbmRscCBkb2VzIG5vdCBleGlzdCwgdGhlIFBMT0dJIGlzIHNpbXBseQorICogaWdub3JlZCBhbmQgY29tbWFuZCBJT0NCIHJlbGVhc2VkLiBUaGUgUExPR0kgcmVzcG9uc2UgSU9DQiBzdGF0dXMgaXMKKyAqIGNoZWNrZWQgZm9yIGVycm9yIGNvbmRpdG9ucy4gSWYgdGhlcmUgaXMgZXJyb3Igc3RhdHVzIHJlcG9ydGVkLCBQTE9HSQorICogcmV0cnkgc2hhbGwgYmUgYXR0ZW1wdGVkIGJ5IGludm9raW5nIHRoZSBscGZjX2Vsc19yZXRyeSgpIHJvdXRpbmUuCisgKiBPdGhlcndpc2UsIHRoZSBscGZjX3Bsb2dpX2NvbmZpcm1fbnBvcnQoKSByb3V0aW5lIHNoYWxsIGJlIGludm9rZWQgb24KKyAqIHRoZSBuZGxwIGFuZCB0aGUgTkxQX0VWVF9DTVBMX1BMT0dJIHN0YXRlIHRvIHRoZSBEaXNjb3ZlciBTdGF0ZSBNYWNoaW5lCisgKiAoRFNNKSBpcyBzZXQgZm9yIHRoaXMgUExPR0kgY29tcGxldGlvbi4gRmluYWxseSwgaXQgY2hlY2tzIHdoZXRoZXIKKyAqIHRoZXJlIGFyZSBhZGRpdGlvbmFsIE5fUG9ydCBub2RlcyB3aXRoIHRoZSB2cG9ydCB0aGF0IG5lZWQgdG8gcGVyZm9ybQorICogUExPR0kuIElmIHNvLCB0aGUgbHBmY19tb3JlX3Bsb2dpKCkgcm91dGluZSBpcyBpbnZva2VkIHRvIGlzc3VlIGFkZGl0aW9uCisgKiBQTE9HSXMuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jbXBsX2Vsc19wbG9naShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgICAgc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC0xMDQ4LDYgKzEzMTYsMjcgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19pc3N1ZV9lbHNfcGxvZ2k6IElzc3VlIGFuIHBsb2dpIGlvY2IgY29tbWFuZCBmb3IgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZGlkOiBkZXN0aW5hdGlvbiBwb3J0IGlkZW50aWZpZXIuCisgKiBAcmV0cnk6IG51bWJlciBvZiByZXRyaWVzIHRvIHRoZSBjb21tYW5kIElPQ0IuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBhIFBvcnQgTG9naW4gKFBMT0dJKSBjb21tYW5kIHRvIGEgcmVtb3RlIE5fUG9ydAorICogKHdpdGggdGhlIEBkaWQpIGZvciBhIEB2cG9ydC4gQmVmb3JlIGlzc3VpbmcgYSBQTE9HSSB0byBhIHJlbW90ZSBOX1BvcnQsCisgKiB0aGUgbmRscCB3aXRoIHRoZSByZW1vdGUgTl9Qb3J0IERJRCBtdXN0IGV4aXN0IG9uIHRoZSBAdnBvcnQncyBuZGxwIGxpc3QuCisgKiBUaGlzIHJvdXRpbmUgY29uc3RydWN0cyB0aGUgcHJvcGVyIGZlaWxkcyBvZiB0aGUgUExPR0kgSU9DQiBhbmQgaW52b2tlcworICogdGhlIGxwZmNfc2xpX2lzc3VlX2lvY2IoKSByb3V0aW5lIHRvIHNlbmQgb3V0IFBMT0dJIEVMUyBjb21tYW5kLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgUExPR0kgRUxTIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBpc3N1ZWQgYSBwbG9naSBmb3IgQHZwb3J0CisgKiAgIDEgLSBmYWlsZWQgdG8gaXNzdWUgYSBwbG9naSBmb3IgQHZwb3J0CisgKiovCiBpbnQKIGxwZmNfaXNzdWVfZWxzX3Bsb2dpKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludDMyX3QgZGlkLCB1aW50OF90IHJldHJ5KQogewpAQCAtMTEwNiw2ICsxMzk1LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19jbXBsX2Vsc19wcmxpOiBDb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBwcmxpLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEByc3Bpb2NiOiBwb2ludGVyIHRvIGxwZmMgcmVzcG9uc2UgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGEgUHJvY2VzcyBMb2dpbgorICogKFBSTEkpIEVMUyBjb21tYW5kLiBUaGUgUFJMSSByZXNwb25zZSBJT0NCIHN0YXR1cyBpcyBjaGVja2VkIGZvciBlcnJvcgorICogc3RhdHVzLiBJZiB0aGVyZSBpcyBlcnJvciBzdGF0dXMgcmVwb3J0ZWQsIFBSTEkgcmV0cnkgc2hhbGwgYmUgYXR0ZW1wdGVkCisgKiBieSBpbnZva2luZyB0aGUgbHBmY19lbHNfcmV0cnkoKSByb3V0aW5lLiBPdGhlcndpc2UsIHRoZSBzdGF0ZQorICogTkxQX0VWVF9DTVBMX1BSTEkgaXMgc2VudCB0byB0aGUgRGlzY292ZXIgU3RhdGUgTWFjaGluZSAoRFNNKSBmb3IgdGhpcworICogbmRscCB0byBtYXJrIHRoZSBQUkxJIGNvbXBsZXRpb24uCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jbXBsX2Vsc19wcmxpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgIHN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtMTE2NCw2ICsxNDY2LDI3IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfaXNzdWVfZWxzX3BybGk6IElzc3VlIGEgcHJsaSBpb2NiIGNvbW1hbmQgZm9yIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcmV0cnk6IG51bWJlciBvZiByZXRyaWVzIHRvIHRoZSBjb21tYW5kIElPQ0IuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBhIFByb2Nlc3MgTG9naW4gKFBSTEkpIEVMUyBjb21tYW5kIGZvciB0aGUKKyAqIEB2cG9ydC4gVGhlIFBSTEkgc2VydmljZSBwYXJhbWV0ZXJzIGFyZSBzZXQgdXAgaW4gdGhlIHBheWxvYWQgb2YgdGhlCisgKiBQUkxJIFJlcXVlc3QgY29tbWFuZCBhbmQgdGhlIHBvaW50ZXIgdG8gbHBmY19jbXBsX2Vsc19wcmxpKCkgcm91dGluZQorICogaXMgcHV0IHRvIHRoZSBJT0NCIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuYyBmaWVsZCBiZWZvcmUgaW52b2tpbmcgdGhlCisgKiByb3V0aW5lIGxwZmNfc2xpX2lzc3VlX2lvY2IoKSB0byBzZW5kIG91dCBQUkxJIGNvbW1hbmQuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBQUkxJIEVMUyBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBzdWNjZXNzZnVsbHkgaXNzdWVkIHBybGkgaW9jYiBjb21tYW5kIGZvciBAdnBvcnQKKyAqICAgMSAtIGZhaWxlZCB0byBpc3N1ZSBwcmxpIGlvY2IgY29tbWFuZCBmb3IgQHZwb3J0CisgKiovCiBpbnQKIGxwZmNfaXNzdWVfZWxzX3BybGkoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKIAkJICAgIHVpbnQ4X3QgcmV0cnkpCkBAIC0xMjMzLDYgKzE1NTYsOTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3JzY25fZGlzYzogUGVyZm9ybSByc2NuIGRpc2NvdmVyeSBmb3IgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHBlcmZvcm1zIFJlZ2lzdHJhdGlvbiBTdGF0ZSBDaGFuZ2UgTm90aWZpY2F0aW9uIChSU0NOKQorICogZGlzY292ZXJ5IGZvciBhIEB2cG9ydC4gSWYgdGhlIEB2cG9ydCdzIG5vZGUgcG9ydCByZWNvdmVyeSBjb3VudCBpcyBub3QKKyAqIHplcm8sIGl0IHdpbGwgaW52b2tlIHRoZSBscGZjX2Vsc19kaXNjX3Bsb2dpKCkgdG8gcGVyZm9ybSBQTE9HSSBmb3IgYWxsCisgKiB0aGUgbm9kZXMgdGhhdCBuZWVkIHJlY292ZXJ5LiBJZiBub25lIG9mIHRoZSBQTE9HSSB3ZXJlIG5lZWRlZCB0aHJvdWdoCisgKiB0aGUgbHBmY19lbHNfZGlzY19wbG9naSgpIHJvdXRpbmUsIHRoZSBscGZjX2VuZF9yc2NuKCkgcm91dGluZSBzaGFsbCBiZQorICogaW52b2tlZCB0byBjaGVjayBhbmQgaGFuZGxlIHBvc3NpYmxlIG1vcmUgUlNDTiBjYW1lIGluIGR1cmluZyB0aGUgcGVyaW9kCisgKiBvZiBwcm9jZXNzaW5nIHRoZSBjdXJyZW50IG9uZXMuCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19yc2NuX2Rpc2Moc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCWxwZmNfY2FuX2Rpc2N0bW8odnBvcnQpOworCisJLyogUlNDTiBkaXNjb3ZlcnkgKi8KKwkvKiBnbyB0aHJ1IE5QUiBub2RlcyBhbmQgaXNzdWUgRUxTIFBMT0dJcyAqLworCWlmICh2cG9ydC0+ZmNfbnByX2NudCkKKwkJaWYgKGxwZmNfZWxzX2Rpc2NfcGxvZ2kodnBvcnQpKQorCQkJcmV0dXJuOworCisJbHBmY19lbmRfcnNjbih2cG9ydCk7Cit9CisKKy8qKgorICogbHBmY19hZGlzY19kb25lOiBDb21wbGV0ZSB0aGUgYWRpc2MgcGhhc2Ugb2YgZGlzY292ZXJ5LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGxwZmNfdnBvcnQgaGJhIGRhdGEgc3RydWN0dXJlIHRoYXQgZmluaXNoZWQgYWxsIEFESVNDcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBmaW5hbCBBRElTQyBpcyBjb21wbGV0ZWQgZHVyaW5nIGRpc2NvdmVyeS4KKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBjbGVhcmluZyBsaW5rIGF0dGVudGlvbiBvciBpc3N1aW5nIHJlZ192cGkgZGVwZW5kaW5nCisgKiBvbiB3aGV0aGVyIG5waXYgaXMgZW5hYmxlZC4gVGhpcyBmdW5jdGlvbiBhbHNvIGtpY2tzIG9mZiB0aGUgUExPR0kgcGhhc2Ugb2YKKyAqIGRpc2NvdmVyeS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9ja3MgaGVsZC4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX2FkaXNjX2RvbmUoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCXN0cnVjdCBTY3NpX0hvc3QgICAqc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnQpOworCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7CisKKwkvKgorCSAqIEZvciBOUElWLCBjbXBsX3JlZ192cGkgd2lsbCBzZXQgcG9ydF9zdGF0ZSB0byBSRUFEWSwKKwkgKiBhbmQgY29udGludWUgZGlzY292ZXJ5LgorCSAqLworCWlmICgocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX05QSVZfRU5BQkxFRCkgJiYKKwkgICAgISh2cG9ydC0+ZmNfZmxhZyAmIEZDX1JTQ05fTU9ERSkpIHsKKwkJbHBmY19pc3N1ZV9yZWdfdnBpKHBoYmEsIHZwb3J0KTsKKwkJcmV0dXJuOworCX0KKwkvKgorCSogRm9yIFNMSTIsIHdlIG5lZWQgdG8gc2V0IHBvcnRfc3RhdGUgdG8gUkVBRFkKKwkqIGFuZCBjb250aW51ZSBkaXNjb3ZlcnkuCisJKi8KKwlpZiAodnBvcnQtPnBvcnRfc3RhdGUgPCBMUEZDX1ZQT1JUX1JFQURZKSB7CisJCS8qIElmIHdlIGdldCBoZXJlLCB0aGVyZSBpcyBub3RoaW5nIHRvIEFESVNDICovCisJCWlmICh2cG9ydC0+cG9ydF90eXBlID09IExQRkNfUEhZU0lDQUxfUE9SVCkKKwkJCWxwZmNfaXNzdWVfY2xlYXJfbGEocGhiYSwgdnBvcnQpOworCQlpZiAoISh2cG9ydC0+ZmNfZmxhZyAmIEZDX0FCT1JUX0RJU0NPVkVSWSkpIHsKKwkJCXZwb3J0LT5udW1fZGlzY19ub2RlcyA9IDA7CisJCQkvKiBnbyB0aHJ1IE5QUiBsaXN0LCBpc3N1ZSBFTFMgUExPR0lzICovCisJCQlpZiAodnBvcnQtPmZjX25wcl9jbnQpCisJCQkJbHBmY19lbHNfZGlzY19wbG9naSh2cG9ydCk7CisJCQlpZiAoIXZwb3J0LT5udW1fZGlzY19ub2RlcykgeworCQkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQkJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX05ESVNDX0FDVElWRTsKKwkJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQkJbHBmY19jYW5fZGlzY3Rtbyh2cG9ydCk7CisJCQkJbHBmY19lbmRfcnNjbih2cG9ydCk7CisJCQl9CisJCX0KKwkJdnBvcnQtPnBvcnRfc3RhdGUgPSBMUEZDX1ZQT1JUX1JFQURZOworCX0gZWxzZQorCQlscGZjX3JzY25fZGlzYyh2cG9ydCk7Cit9CisKKy8qKgorICogbHBmY19tb3JlX2FkaXNjOiBJc3N1ZSBtb3JlIGFkaXNjIGFzIG5lZWRlZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGRldGVybWluZXMgd2hldGhlciB0aGVyZSBhcmUgbW9yZSBuZGxwcyBvbiBhIEB2cG9ydAorICogbm9kZSBsaXN0IG5lZWQgdG8gaGF2ZSBBZGRyZXNzIERpc2NvdmVyIChBRElTQykgaXNzdWVkLiBJZiBzbywgaXQgd2lsbAorICogaW52b2tlIHRoZSBscGZjX2Vsc19kaXNjX2FkaXNjKCkgcm91dGluZSB0byBpc3N1ZSBBRElTQyBvbiB0aGUgQHZwb3J0J3MKKyAqIHJlbWFpbmluZyBub2RlcyB3aGljaCBuZWVkIHRvIGhhdmUgQURJU0Mgc2VudC4KKyAqKi8KIHZvaWQKIGxwZmNfbW9yZV9hZGlzYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0xMjUyLDIzICsxNjYxLDI3IEBACiAJCS8qIGdvIHRocnUgTlBSIG5vZGVzIGFuZCBpc3N1ZSBhbnkgcmVtYWluaW5nIEVMUyBBRElTQ3MgKi8KIAkJc2VudGFkaXNjID0gbHBmY19lbHNfZGlzY19hZGlzYyh2cG9ydCk7CiAJfQorCWlmICghdnBvcnQtPm51bV9kaXNjX25vZGVzKQorCQlscGZjX2FkaXNjX2RvbmUodnBvcnQpOwogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQKLWxwZmNfcnNjbl9kaXNjKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKLXsKLQlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKLQotCS8qIFJTQ04gZGlzY292ZXJ5ICovCi0JLyogZ28gdGhydSBOUFIgbm9kZXMgYW5kIGlzc3VlIEVMUyBQTE9HSXMgKi8KLQlpZiAodnBvcnQtPmZjX25wcl9jbnQpCi0JCWlmIChscGZjX2Vsc19kaXNjX3Bsb2dpKHZwb3J0KSkKLQkJCXJldHVybjsKLQotCWxwZmNfZW5kX3JzY24odnBvcnQpOwotfQotCisvKioKKyAqIGxwZmNfY21wbF9lbHNfYWRpc2M6IENvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGFkaXNjLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEByc3Bpb2NiOiBwb2ludGVyIHRvIGxwZmMgcmVzcG9uc2UgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24gZm9yIGlzc3VpbmcgdGhlIEFkZHJlc3MgRGlzY292ZXIKKyAqIChBRElTQykgY29tbWFuZC4gSXQgZmlyc3QgY2hlY2tzIHRvIHNlZSB3aGV0aGVyIGxpbmsgd2VudCBkb3duIGR1cmluZworICogdGhlIGRpc2NvdmVyeSBwcm9jZXNzLiBJZiBzbywgdGhlIG5vZGUgd2lsbCBiZSBtYXJrZWQgYXMgbm9kZSBwb3J0CisgKiByZWNvdmVyeSBmb3IgaXNzdWluZyBkaXNjb3ZlciBJT0NCIGJ5IHRoZSBsaW5rIGF0dGVudGlvbiBoYW5kbGVyIGFuZAorICogZXhpdC4gT3RoZXJ3aXNlLCB0aGUgcmVzcG9uc2Ugc3RhdHVzIGlzIGNoZWNrZWQuIElmIGVycm9yIHdhcyByZXBvcnRlZAorICogaW4gdGhlIHJlc3BvbnNlIHN0YXR1cywgdGhlIEFESVNDIGNvbW1hbmQgc2hhbGwgYmUgcmV0cmllZCBieSBpbnZva2luZworICogdGhlIGxwZmNfZWxzX3JldHJ5KCkgcm91dGluZS4gT3RoZXJ3aXNlLCBpZiBubyBlcnJvciB3YXMgcmVwb3J0ZWQgaW4KKyAqIHRoZSByZXNwb25zZSBzdGF0dXMsIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIGludm9rZWQgdG8gc2V0IHRyYW5zaXRpb24KKyAqIHdpdGggcmVzcGVjdCB0byBOTFBfRVZUX0NNUExfQURJU0MgZXZlbnQuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jbXBsX2Vsc19hZGlzYyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgICAgc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC0xMzMzLDU3ICsxNzQ2LDM0IEBACiAJCWxwZmNfZGlzY19zdGF0ZV9tYWNoaW5lKHZwb3J0LCBuZGxwLCBjbWRpb2NiLAogCQkJCQlOTFBfRVZUX0NNUExfQURJU0MpOwogCi0JaWYgKGRpc2MgJiYgdnBvcnQtPm51bV9kaXNjX25vZGVzKSB7Ci0JCS8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgbW9yZSBBRElTQ3MgdG8gYmUgc2VudCAqLworCS8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgbW9yZSBBRElTQ3MgdG8gYmUgc2VudCAqLworCWlmIChkaXNjICYmIHZwb3J0LT5udW1fZGlzY19ub2RlcykKIAkJbHBmY19tb3JlX2FkaXNjKHZwb3J0KTsKLQotCQkvKiBDaGVjayB0byBzZWUgaWYgd2UgYXJlIGRvbmUgd2l0aCBBRElTQyBhdXRoZW50aWNhdGlvbiAqLwotCQlpZiAodnBvcnQtPm51bV9kaXNjX25vZGVzID09IDApIHsKLQkJCS8qIElmIHdlIGdldCBoZXJlLCB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gQURJU0MgKi8KLQkJCS8qCi0JCQkgKiBGb3IgTlBJViwgY21wbF9yZWdfdnBpIHdpbGwgc2V0IHBvcnRfc3RhdGUgdG8gUkVBRFksCi0JCQkgKiBhbmQgY29udGludWUgZGlzY292ZXJ5LgotCQkJICovCi0JCQlpZiAoKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19OUElWX0VOQUJMRUQpICYmCi0JCQkgICAhKHZwb3J0LT5mY19mbGFnICYgRkNfUlNDTl9NT0RFKSkgewotCQkJCWxwZmNfaXNzdWVfcmVnX3ZwaShwaGJhLCB2cG9ydCk7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQkvKgotCQkJICogRm9yIFNMSTIsIHdlIG5lZWQgdG8gc2V0IHBvcnRfc3RhdGUgdG8gUkVBRFkKLQkJCSAqIGFuZCBjb250aW51ZSBkaXNjb3ZlcnkuCi0JCQkgKi8KLQkJCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8IExQRkNfVlBPUlRfUkVBRFkpIHsKLQkJCQkvKiBJZiB3ZSBnZXQgaGVyZSwgdGhlcmUgaXMgbm90aGluZyB0byBBRElTQyAqLwotCQkJCWlmICh2cG9ydC0+cG9ydF90eXBlID09IExQRkNfUEhZU0lDQUxfUE9SVCkKLQkJCQkJbHBmY19pc3N1ZV9jbGVhcl9sYShwaGJhLCB2cG9ydCk7Ci0KLQkJCQlpZiAoISh2cG9ydC0+ZmNfZmxhZyAmIEZDX0FCT1JUX0RJU0NPVkVSWSkpIHsKLQkJCQkJdnBvcnQtPm51bV9kaXNjX25vZGVzID0gMDsKLQkJCQkJLyogZ28gdGhydSBOUFIgbGlzdCwgaXNzdWUgRUxTIFBMT0dJcyAqLwotCQkJCQlpZiAodnBvcnQtPmZjX25wcl9jbnQpCi0JCQkJCQlscGZjX2Vsc19kaXNjX3Bsb2dpKHZwb3J0KTsKLQotCQkJCQlpZiAoIXZwb3J0LT5udW1fZGlzY19ub2RlcykgewotCQkJCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCQkJCXZwb3J0LT5mY19mbGFnICY9Ci0JCQkJCQkJfkZDX05ESVNDX0FDVElWRTsKLQkJCQkJCXNwaW5fdW5sb2NrX2lycSgKLQkJCQkJCQlzaG9zdC0+aG9zdF9sb2NrKTsKLQkJCQkJCWxwZmNfY2FuX2Rpc2N0bW8odnBvcnQpOwotCQkJCQl9Ci0JCQkJfQotCQkJCXZwb3J0LT5wb3J0X3N0YXRlID0gTFBGQ19WUE9SVF9SRUFEWTsKLQkJCX0gZWxzZSB7Ci0JCQkJbHBmY19yc2NuX2Rpc2ModnBvcnQpOwotCQkJfQotCQl9Ci0JfQogb3V0OgogCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBjbWRpb2NiKTsKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19pc3N1ZV9lbHNfYWRpc2M6IElzc3VlIGFuIGFkZHJlc3MgZGlzY292ZXIgaW9jYiB0byBhbiBub2RlIG9uIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICogQHJldHJ5OiBudW1iZXIgb2YgcmV0cmllcyB0byB0aGUgY29tbWFuZCBJT0NCLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgYW4gQWRkcmVzcyBEaXNjb3ZlciAoQURJU0MpIGZvciBhbiBAbmRscCBvbiBhCisgKiBAdnBvcnQuIEl0IHByZXBhcmVzIHRoZSBwYXlsb2FkIG9mIHRoZSBBRElTQyBFTFMgY29tbWFuZCwgdXBkYXRlcyB0aGUKKyAqIGFuZCBzdGF0ZXMgb2YgdGhlIG5kbHAsIGFuZCBpbnZva2VzIHRoZSBscGZjX3NsaV9pc3N1ZV9pb2NiKCkgcm91dGluZQorICogdG8gaXNzdWUgdGhlIEFESVNDIEVMUyBjb21tYW5kLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQURJU0MgRUxTIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIHN1Y2Nlc3NmdWxseSBpc3N1ZWQgYWRpc2MKKyAqICAgMSAtIGZhaWxlZCB0byBpc3N1ZSBhZGlzYworICoqLwogaW50CiBscGZjX2lzc3VlX2Vsc19hZGlzYyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAogCQkgICAgIHVpbnQ4X3QgcmV0cnkpCkBAIC0xNDM3LDYgKzE4MjcsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2NtcGxfZWxzX2xvZ286IENvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGxvZ28uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gbHBmYyByZXNwb25zZSBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiBmb3IgaXNzdWluZyB0aGUgRUxTIExvZ291dCAoTE9HTykKKyAqIGNvbW1hbmQuIElmIG5vIGVycm9yIHN0YXR1cyB3YXMgcmVwb3J0ZWQgZnJvbSB0aGUgTE9HTyByZXNwb25zZSwgdGhlCisgKiBzdGF0ZSBtYWNoaW5lIG9mIHRoZSBhc3NvY2lhdGVkIG5kbHAgc2hhbGwgYmUgaW52b2tlZCBmb3IgdHJhbnNpdGlvbiB3aXRoCisgKiByZXNwZWN0IHRvIE5MUF9FVlRfQ01QTF9MT0dPIGV2ZW50LiBPdGhlcndpc2UsIGlmIGVycm9yIHN0YXR1cyB3YXMgcmVwb3J0ZWQsCisgKiB0aGUgbHBmY19lbHNfcmV0cnkoKSByb3V0aW5lIHdpbGwgYmUgaW52b2tlZCB0byByZXRyeSB0aGUgTE9HTyBjb21tYW5kLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY21wbF9lbHNfbG9nbyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgICBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTE1MDIsNiArMTkwNCwyNiBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2lzc3VlX2Vsc19sb2dvOiBJc3N1ZSBhIGxvZ28gdG8gYW4gbm9kZSBvbiBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqIEByZXRyeTogbnVtYmVyIG9mIHJldHJpZXMgdG8gdGhlIGNvbW1hbmQgSU9DQi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY29uc3RydWN0cyBhbmQgaXNzdWVzIGFuIEVMUyBMb2dvdXQgKExPR08pIGlvY2IgY29tbWFuZAorICogdG8gYSByZW1vdGUgbm9kZSwgcmVmZXJyZWQgYnkgYW4gQG5kbHAgb24gYSBAdnBvcnQuIEl0IGNvbnN0cnVjdHMgdGhlCisgKiBwYXlsb2FkIG9mIHRoZSBJT0NCLCBwcm9wZXJseSBzZXRzIHVwIHRoZSBAbmRscCBzdGF0ZSwgYW5kIGludm9rZXMgdGhlCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiKCkgcm91dGluZSB0byBzZW5kIG91dCB0aGUgTE9HTyBFTFMgY29tbWFuZC4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIExPR08gRUxTIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIHN1Y2Nlc3NmdWxseSBpc3N1ZWQgbG9nbworICogICAxIC0gZmFpbGVkIHRvIGlzc3VlIGxvZ28KKyAqKi8KIGludAogbHBmY19pc3N1ZV9lbHNfbG9nbyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAogCQkgICAgdWludDhfdCByZXRyeSkKQEAgLTE1NjMsNiArMTk4NSwyMiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfY21wbF9lbHNfY21kOiBDb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBnZW5lcmljIGVscyBjb21tYW5kLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEByc3Bpb2NiOiBwb2ludGVyIHRvIGxwZmMgcmVzcG9uc2UgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgYSBnZW5lcmljIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIEVMUyBjb21tYW5kcy4KKyAqIFNwZWNpZmljYWxseSwgaXQgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGRvZXMgbm90IG5lZWQgdG8gcGVyZm9ybQorICogYW55IGNvbW1hbmQgc3BlY2lmaWMgb3BlcmF0aW9ucy4gSXQgaXMgY3VycmVudGx5IHVzZWQgYnkgdGhlIEVMUyBjb21tYW5kCisgKiBpc3N1aW5nIHJvdXRpbmVzIGZvciB0aGUgRUxTIFN0YXRlIENoYW5nZSAgUmVxdWVzdCAoU0NSKSwKKyAqIGxwZmNfaXNzdWVfZWxzX3NjcigpLCBhbmQgdGhlIEVMUyBGaWJyZSBDaGFubmVsIEFkZHJlc3MgUmVzb2x1dGlvbgorICogUHJvdG9jb2wgUmVzcG9uc2UgKEZBUlBSKSByb3V0aW5lLCBscGZjX2lzc3VlX2Vsc19mYXJwcigpLiBPdGhlciB0aGFuCisgKiBjZXJ0YWluIGRlYnVnIGxvZ2dpbmdzLCB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHNpbXBseSBpbnZva2VzIHRoZQorICogbHBmY19lbHNfY2hrX2xhdHQoKSByb3V0aW5lIHRvIGNoZWNrIHdoZXRoZXIgbGluayB3ZW50IGRvd24gZHVyaW5nIHRoZQorICogZGlzY292ZXJ5IHByb2Nlc3MuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jbXBsX2Vsc19jbWQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTE1ODcsNiArMjAyNSwyOCBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2lzc3VlX2Vsc19zY3I6IElzc3VlIGEgc2NyIHRvIGFuIG5vZGUgb24gYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbnBvcnRpZDogTl9Qb3J0IGlkZW50aWZpZXIgdG8gdGhlIHJlbW90ZSBub2RlLgorICogQHJldHJ5OiBudW1iZXIgb2YgcmV0cmllcyB0byB0aGUgY29tbWFuZCBJT0NCLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgYSBTdGF0ZSBDaGFuZ2UgUmVxdWVzdCAoU0NSKSB0byBhIGZhYnJpYyBub2RlCisgKiBvbiBhIEB2cG9ydC4gVGhlIHJlbW90ZSBub2RlIEBucG9ydGlkIGlzIHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvbi4gSXQKKyAqIGZpcnN0IHNlYXJjaCB0aGUgQHZwb3J0IG5vZGUgbGlzdCB0byBmaW5kIHRoZSBtYXRjaGluZyBuZGxwLiBJZiBubyBzdWNoCisgKiBuZGxwIGlzIGZvdW5kLCBhIG5ldyBuZGxwIHNoYWxsIGJlIGNyZWF0ZWQgZm9yIHRoaXMgKFNDUikgcHVycG9zZS4gQW4KKyAqIElPQ0IgaXMgYWxsb2NhdGVkLCBwYXlsb2FkIHByZXBhcmVkLCBhbmQgdGhlIGxwZmNfc2xpX2lzc3VlX2lvY2IoKQorICogcm91dGluZSBpcyBpbnZva2VkIHRvIHNlbmQgdGhlIFNDUiBJT0NCLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgU0NSIEVMUyBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgaXNzdWVkIHNjciBjb21tYW5kCisgKiAgIDEgLSBGYWlsZWQgdG8gaXNzdWUgc2NyIGNvbW1hbmQKKyAqKi8KIGludAogbHBmY19pc3N1ZV9lbHNfc2NyKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludDMyX3QgbnBvcnRpZCwgdWludDhfdCByZXRyeSkKIHsKQEAgLTE2NTksNiArMjExOSwyOCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfaXNzdWVfZWxzX2ZhcnByOiBJc3N1ZSBhIGZhcnAgdG8gYW4gbm9kZSBvbiBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBucG9ydGlkOiBOX1BvcnQgaWRlbnRpZmllciB0byB0aGUgcmVtb3RlIG5vZGUuCisgKiBAcmV0cnk6IG51bWJlciBvZiByZXRyaWVzIHRvIHRoZSBjb21tYW5kIElPQ0IuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlcyBhIEZpYnJlIENoYW5uZWwgQWRkcmVzcyBSZXNvbHV0aW9uIFJlc3BvbnNlCisgKiAoRkFSUFIpIHRvIGEgbm9kZSBvbiBhIHZwb3J0LiBUaGUgcmVtb3RlIG5vZGUgTl9Qb3J0IGlkZW50aWZpZXIgKEBucG9ydGlkKQorICogaXMgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLiBJdCBmaXJzdCBzZWFyY2ggdGhlIEB2cG9ydCBub2RlIGxpc3QgdG8gZmluZAorICogdGhlIG1hdGNoaW5nIG5kbHAuIElmIG5vIHN1Y2ggbmRscCBpcyBmb3VuZCwgYSBuZXcgbmRscCBzaGFsbCBiZSBjcmVhdGVkCisgKiBmb3IgdGhpcyAoRkFSUFIpIHB1cnBvc2UuIEFuIElPQ0IgaXMgYWxsb2NhdGVkLCBwYXlsb2FkIHByZXBhcmVkLCBhbmQgdGhlCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiKCkgcm91dGluZSBpcyBpbnZva2VkIHRvIHNlbmQgdGhlIEZBUlBSIEVMUyBjb21tYW5kLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgUEFSUFIgRUxTIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBpc3N1ZWQgZmFycHIgY29tbWFuZAorICogICAxIC0gRmFpbGVkIHRvIGlzc3VlIGZhcnByIGNvbW1hbmQKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfaXNzdWVfZWxzX2ZhcnByKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludDMyX3QgbnBvcnRpZCwgdWludDhfdCByZXRyeSkKIHsKQEAgLTE3NDgsNiArMjIzMCwxOCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3RtbzogQ2FuY2VsIHRoZSB0aW1lciB3aXRoIGRlbGF5ZWQgaW9jYi1jbWQgcmV0cnkuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG5scDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuY2VscyB0aGUgdGltZXIgd2l0aCBhIGRlbGF5ZWQgSU9DQi1jb21tYW5kIHJldHJ5IGZvcgorICogYSBAdnBvcnQncyBAbmRscC4gSXQgc3RvcHMgdGhlIHRpbWVyIGZvciB0aGUgZGVsYXllZCBmdW5jdGlvbiByZXRyaWFsIGFuZAorICogcmVtb3ZlcyB0aGUgRUxTIHJldHJ5IGV2ZW50IGlmIGl0IHByZXNlbnRzLiBJbiBhZGRpdGlvbiwgaWYgdGhlCisgKiBOTFBfTlBSXzJCX0RJU0MgYml0IGlzIHNldCBpbiB0aGUgQG5scCdzIG5scF9mbGFnIGJpdG1hcCwgQURJU0MgSU9DQgorICogY29tbWFuZHMgYXJlIHNlbnQgZm9yIHRoZSBAdnBvcnQncyBub2RlcyB0aGF0IHJlcXVpcmUgaXNzdWluZyBkaXNjb3ZlcnkKKyAqIEFESVNDLgorICoqLwogdm9pZAogbHBmY19jYW5jZWxfcmV0cnlfZGVsYXlfdG1vKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5scCkKIHsKQEAgLTE3NzUsMjUgKzIyNjksMzYgQEAKIAkJCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8IExQRkNfVlBPUlRfUkVBRFkpIHsKIAkJCQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgbW9yZSBBRElTQ3MgdG8gYmUgc2VudCAqLwogCQkJCWxwZmNfbW9yZV9hZGlzYyh2cG9ydCk7Ci0JCQkJaWYgKCh2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMgPT0gMCkgJiYKLQkJCQkgICAgKHZwb3J0LT5mY19ucHJfY250KSkKLQkJCQkJbHBmY19lbHNfZGlzY19wbG9naSh2cG9ydCk7CiAJCQl9IGVsc2UgewogCQkJCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBtb3JlIFBMT0dJcyB0byBiZSBzZW50ICovCiAJCQkJbHBmY19tb3JlX3Bsb2dpKHZwb3J0KTsKLQkJCX0KLQkJCWlmICh2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMgPT0gMCkgewotCQkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JCQkJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX05ESVNDX0FDVElWRTsKLQkJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JCQkJbHBmY19jYW5fZGlzY3Rtbyh2cG9ydCk7Ci0JCQkJbHBmY19lbmRfcnNjbih2cG9ydCk7CisJCQkJaWYgKHZwb3J0LT5udW1fZGlzY19ub2RlcyA9PSAwKSB7CisJCQkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQkJCXZwb3J0LT5mY19mbGFnICY9IH5GQ19ORElTQ19BQ1RJVkU7CisJCQkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCQkJbHBmY19jYW5fZGlzY3Rtbyh2cG9ydCk7CisJCQkJCWxwZmNfZW5kX3JzY24odnBvcnQpOworCQkJCX0KIAkJCX0KIAkJfQogCX0KIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19lbHNfcmV0cnlfZGVsYXk6IFRpbWVyIGZ1bmN0aW9uIHdpdGggYSBuZGxwIGRlbGF5ZWQgZnVuY3Rpb24gdGltZXIuCisgKiBAcHRyOiBob2xkZXIgZm9yIHRoZSBwb2ludGVyIHRvIHRoZSB0aW1lciBmdW5jdGlvbiBhc3NvY2lhdGVkIGRhdGEgKG5kbHApLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIGJ5IHRoZSBuZGxwIGRlbGF5ZWQtZnVuY3Rpb24gdGltZXIgdG8gY2hlY2sKKyAqIHdoZXRoZXIgdGhlcmUgaXMgYW55IHBlbmRpbmcgRUxTIHJldHJ5IGV2ZW50KHMpIHdpdGggdGhlIG5vZGUuIElmIG5vdCwgaXQKKyAqIHNpbXBseSByZXR1cm5zLiBPdGhlcndpc2UsIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBFTFMgZGVsYXllZCBldmVudCwgaXQKKyAqIGFkZHMgdGhlIGRlbGF5ZWQgZXZlbnRzIHRvIHRoZSBIQkEgd29yayBsaXN0IGFuZCBpbnZva2VzIHRoZQorICogbHBmY193b3JrZXJfd2FrZV91cCgpIHJvdXRpbmUgdG8gd2FrZSB1cCB3b3JrZXIgdGhyZWFkIHRvIHByb2Nlc3MgdGhlCisgKiBldmVudC4gTm90ZSB0aGF0IGxwZmNfbmxwX2dldCgpIGlzIGNhbGxlZCBiZWZvcmUgcG9zdGluZyB0aGUgZXZlbnQgdG8KKyAqIHRoZSB3b3JrIGxpc3QgdG8gaG9sZCByZWZlcmVuY2UgY291bnQgb2YgbmRscCBzbyB0aGF0IGl0IGd1YXJhbnRlZXMgdGhlCisgKiByZWZlcmVuY2UgdG8gbmRscCB3aWxsIHN0aWxsIGJlIGF2YWlsYWJsZSB3aGVuIHRoZSB3b3JrZXIgdGhyZWFkIGdldHMKKyAqIHRvIHRoZSBldmVudCBhc3NvY2lhdGVkIHdpdGggdGhlIG5kbHAuCisgKiovCiB2b2lkCiBscGZjX2Vsc19yZXRyeV9kZWxheSh1bnNpZ25lZCBsb25nIHB0cikKIHsKQEAgLTE4MjIsNiArMjMyNywxNSBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yZXRyeV9kZWxheV9oYW5kbGVyOiBXb3JrIHRocmVhZCBoYW5kbGVyIGZvciBuZGxwIGRlbGF5ZWQgZnVuY3Rpb24uCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIHdvcmtlci10aHJlYWQgaGFuZGxlciBmb3IgcHJvY2Vzc2luZyB0aGUgQG5kbHAgZGVsYXllZAorICogZXZlbnQocyksIHBvc3RlZCBieSB0aGUgbHBmY19lbHNfcmV0cnlfZGVsYXkoKSByb3V0aW5lLiBJdCBzaW1wbHkgcmV0cmlldmVzCisgKiB0aGUgbGFzdCBFTFMgY29tbWFuZCBmcm9tIHRoZSBhc3NvY2lhdGVkIG5kbHAgYW5kIGludm9rZXMgdGhlIHByb3BlciBFTFMKKyAqIGZ1bmN0aW9uIGFjY29yZGluZyB0byB0aGUgZGVsYXllZCBFTFMgY29tbWFuZCB0byByZXRyeSB0aGUgY29tbWFuZC4KKyAqKi8KIHZvaWQKIGxwZmNfZWxzX3JldHJ5X2RlbGF5X2hhbmRsZXIoc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCiB7CkBAIC0xODg0LDYgKzIzOTgsMjcgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19lbHNfcmV0cnk6IE1ha2UgcmV0cnkgZGVjaXNpb24gb24gYW4gZWxzIGNvbW1hbmQgaW9jYi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBscGZjIHJlc3BvbnNlIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIG1ha2VzIGEgcmV0cnkgZGVjaXNpb24gb24gYW4gRUxTIGNvbW1hbmQgSU9DQiwgd2hpY2ggaGFzCisgKiBmYWlsZWQuIFRoZSBmb2xsb3dpbmcgRUxTIElPQ0JzIHVzZSB0aGlzIGZ1bmN0aW9uIGZvciByZXRyeWluZyB0aGUgY29tbWFuZAorICogd2hlbiBwcmV2aW91c2x5IGlzc3VlZCBjb21tYW5kIHJlc3BvbnNlZCB3aXRoIGVycm9yIHN0YXR1czogRkxPR0ksIFBMT0dJLAorICogUFJMSSwgQURJU0MsIExPR08sIGFuZCBGRElTQy4gQmFzZWQgb24gdGhlIEVMUyBjb21tYW5kIHR5cGUgYW5kIHRoZQorICogcmV0dXJuZWQgZXJyb3Igc3RhdHVzLCBpdCBtYWtlcyB0aGUgZGVjaXNpb24gd2hldGhlciBhIHJldHJ5IHNoYWxsIGJlCisgKiBpc3N1ZWQgZm9yIHRoZSBjb21tYW5kLCBhbmQgd2hldGhlciBhIHJldHJ5IHNoYWxsIGJlIG1hZGUgaW1tZWRpYXRlbHkgb3IKKyAqIGRlbGF5ZWQuIEluIHRoZSBmb3JtZXIgY2FzZSwgdGhlIGNvcnJlc3BvbmRpbmcgRUxTIGNvbW1hbmQgaXNzdWluZy1mdW5jdGlvbgorICogaXMgY2FsbGVkIHRvIHJldHJ5IHRoZSBjb21tYW5kLiBJbiB0aGUgbGF0ZXIgY2FzZSwgdGhlIEVMUyBjb21tYW5kIHNoYWxsCisgKiBiZSBwb3N0ZWQgdG8gdGhlIG5kbHAgZGVsYXllZCBldmVudCBhbmQgZGVsYXllZCBmdW5jdGlvbiB0aW1lciBzZXQgdG8gdGhlCisgKiBuZGxwIGZvciB0aGUgZGVsYXllZCBjb21tYW5kIGlzc3VzaW5nLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBObyByZXRyeSBvZiBlbHMgY29tbWFuZCBpcyBtYWRlCisgKiAgIDEgLSBJbW1lZGlhdGUgb3IgZGVsYXllZCByZXRyeSBvZiBlbHMgY29tbWFuZCBpcyBtYWRlCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19yZXRyeShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCSAgICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTIwNTEsNyArMjU4Niw3IEBACiAJCQkgIChzdGF0LnVuLmIubHNSanRSc25Db2RlRXhwID09IExTRVhQX0lOVkFMSURfTlBPUlRfSUQpKQogCQkJICApIHsKIAkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0VMUywKLQkJCQkJCSAiMDEyMyBGRElTQyBGYWlsZWQgKHgleCkuICIKKwkJCQkJCSAiMDEyMiBGRElTQyBGYWlsZWQgKHgleCkuICIKIAkJCQkJCSAiRmFicmljIERldGVjdGVkIEJhZCBXV05cbiIsCiAJCQkJCQkgc3RhdC51bi5sc1JqdEVycm9yKTsKIAkJCQlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwKQEAgLTIxODIsMTIgKzI3MTcsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19mcmVlX2RhdGE6IEZyZWUgbHBmYyBkbWEgYnVmZmVyIGFuZCBkYXRhIHN0cnVjdHVyZSB3aXRoIGFuIGlvY2IuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBidWZfcHRyMTogcG9pbnRlciB0byB0aGUgbHBmYyBETUEgYnVmZmVyIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSByZWxlYXNlcyB0aGUgbHBmYyBETUEgKERpcmVjdCBNZW1vcnkgQWNjZXNzKSBidWZmZXIocykKKyAqIGFzc29jaWF0ZWQgd2l0aCBhIGNvbW1hbmQgSU9DQiBiYWNrIHRvIHRoZSBscGZjIERNQSBidWZmZXIgcG9vbC4gSXQgZmlyc3QKKyAqIGNoZWNrcyB0byBzZWUgd2hldGhlciB0aGVyZSBpcyBhIGxwZmMgRE1BIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlCisgKiByZXNwb25zZSBvZiB0aGUgY29tbWFuZCBJT0NCLiBJZiBzbywgaXQgd2lsbCBiZSByZWxlYXNlZCBiZWZvcmUgcmVsZWFzaW5nCisgKiB0aGUgbHBmYyBETUEgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgSU9DQiBpdHNlbGYuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSByZWxlYXNlZCBscGZjIERNQSBidWZmZXIgKGN1cnJlbnRseSwgYWx3YXlzIHJldHVybiAwKQorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfZnJlZV9kYXRhKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfZG1hYnVmICpidWZfcHRyMSkKIHsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmJ1Zl9wdHI7CiAKLQkvKiBGcmVlIHRoZSByZXNwb25zZSBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC4gICovCisJLyogRnJlZSB0aGUgcmVzcG9uc2UgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIGNvbW1hbmQuICovCiAJaWYgKCFsaXN0X2VtcHR5KCZidWZfcHRyMS0+bGlzdCkpIHsKIAkJbGlzdF9yZW1vdmVfaGVhZCgmYnVmX3B0cjEtPmxpc3QsIGJ1Zl9wdHIsCiAJCQkJIHN0cnVjdCBscGZjX2RtYWJ1ZiwKQEAgLTIyMDAsNiArMjc0OSwxOCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX2ZyZWVfYnBsOiBGcmVlIGxwZmMgZG1hIGJ1ZmZlciBhbmQgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBicGwuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBidWZfcHRyOiBwb2ludGVyIHRvIHRoZSBscGZjIGRtYSBidWZmZXIgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHJlbGVhc2VzIHRoZSBscGZjIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIGJ1ZmZlcgorICogYXNzb2NpYXRlZCB3aXRoIGEgQnVmZmVyIFBvaW50ZXIgTGlzdCAoQlBMKSBiYWNrIHRvIHRoZSBscGZjIERNQSBidWZmZXIKKyAqIHBvb2wuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSByZWxlYXNlZCBscGZjIERNQSBidWZmZXIgKGN1cnJlbnRseSwgYWx3YXlzIHJldHVybiAwKQorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfZnJlZV9icGwoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19kbWFidWYgKmJ1Zl9wdHIpCiB7CkBAIC0yMjA4LDYgKzI3NjksMzMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19mcmVlX2lvY2I6IEZyZWUgYSBjb21tYW5kIGlvY2IgYW5kIGl0cyBhc3NvY2lhdGVkIHJlc291cmNlcy4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGVsc2lvY2I6IHBvaW50ZXIgdG8gbHBmYyBlbHMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBmcmVlcyBhIGNvbW1hbmQgSU9DQiBhbmQgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBUaGUKKyAqIGNvbW1hbmQgSU9DQiBkYXRhIHN0cnVjdHVyZSBjb250YWlucyB0aGUgcmVmZXJlbmNlIHRvIHZhcmlvdXMgYXNzb2NpYXRlZAorICogcmVzb3VyY2VzLCB0aGVzZSBmaWVsZHMgbXVzdCBiZSBzZXQgdG8gTlVMTCBpZiB0aGUgYXNzb2NpYXRlZCByZWZlcmVuY2UKKyAqIG5vdCBwcmVzZW50OgorICogICBjb250ZXh0MSAtIHJlZmVyZW5jZSB0byBuZGxwCisgKiAgIGNvbnRleHQyIC0gcmVmZXJlbmNlIHRvIGNtZAorICogICBjb250ZXh0Mi0+bmV4dCAtIHJlZmVyZW5jZSB0byByc3AKKyAqICAgY29udGV4dDMgLSByZWZlcmVuY2UgdG8gYnBsCisgKgorICogSXQgZmlyc3QgcHJvcGVybHkgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGhlbGQgb24gbmRscCBmb3IgdGhlCisgKiBJT0NCIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24uIElmIExQRkNfREVMQVlfTUVNX0ZSRUUgZmxhZyBpcyBub3QKKyAqIHNldCwgaXQgaW52b2tlcyB0aGUgbHBmY19lbHNfZnJlZV9kYXRhKCkgcm91dGluZSB0byByZWxlYXNlIHRoZSBEaXJlY3QKKyAqIE1lbW9yeSBBY2Nlc3MgKERNQSkgYnVmZmVycyBhc3NvY2lhdGVkIHdpdGggdGhlIElPQ0IuIE90aGVyd2lzZSwgaXQKKyAqIGFkZHMgdGhlIERNQSBidWZmZXIgdGhlIEBwaGJhIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgZGVsYXllZCByZWxlYXNlLgorICogSWYgcmVmZXJlbmNlIHRvIHRoZSBCdWZmZXIgUG9pbnRlciBMaXN0IChCUEwpIGlzIHByZXNlbnQsIHRoZQorICogbHBmY19lbHNfZnJlZV9icGwoKSByb3V0aW5lIGlzIGludm9rZWQgdG8gcmVsZWFzZSB0aGUgRE1BIG1lbW9yeQorICogYXNzb2NpYXRlZCB3aXRoIEJQTC4gRmluYWxseSwgdGhlIGxwZmNfc2xpX3JlbGVhc2VfaW9jYnEoKSByb3V0aW5lIGlzCisgKiBpbnZva2VkIHRvIHJlbGVhc2UgdGhlIElPQ0IgZGF0YSBzdHJ1Y3R1cmUgYmFjayB0byBAcGhiYSBJT0NCUSBsaXN0LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzIChjdXJyZW50bHksIGFsd2F5cyByZXR1cm4gMCkKKyAqKi8KIGludAogbHBmY19lbHNfZnJlZV9pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmVsc2lvY2IpCiB7CkBAIC0yMjc0LDYgKzI4NjIsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2NtcGxfZWxzX2xvZ29fYWNjOiBDb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGxvZ28gYWNjIHJlc3BvbnNlLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEByc3Bpb2NiOiBwb2ludGVyIHRvIGxwZmMgcmVzcG9uc2UgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIExvZ291dCAoTE9HTykKKyAqIEFjY2VwdCAoQUNDKSBSZXNwb25zZSBFTFMgY29tbWFuZC4gVGhpcyByb3V0aW5lIGlzIGludm9rZWQgdG8gaW5kaWNhdGUKKyAqIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBMT0dPIHByb2Nlc3MuIEl0IGludm9rZXMgdGhlIGxwZmNfbmxwX25vdF91c2VkKCkgdG8KKyAqIHJlbGVhc2UgdGhlIG5kbHAgaWYgaXQgaGFzIHRoZSBsYXN0IHJlZmVyZW5jZSByZW1haW5pbmcgKHJlZmVyZW5jZSBjb3VudAorICogaXMgMSkuIElmIHN1Y2NlZWRlZCAobWVhbmluZyBuZGxwIHJlbGVhc2VkKSwgaXQgc2V0cyB0aGUgSU9DQiBjb250ZXh0MQorICogZmllbGQgdG8gTlVMTCB0byBpbmZvcm0gdGhlIGZvbGxvd2luZyBscGZjX2Vsc19mcmVlX2lvY2IoKSByb3V0aW5lIG5vCisgKiBuZGxwIHJlZmVyZW5jZSBjb3VudCBuZWVkcyB0byBiZSBkZWNyZW1lbnRlZC4gT3RoZXJ3aXNlLCB0aGUgbmRscAorICogcmVmZXJlbmNlIHVzZS1jb3VudCBzaGFsbCBiZSBkZWNyZW1lbnRlZCBieSB0aGUgbHBmY19lbHNfZnJlZV9pb2NiKCkKKyAqIHJvdXRpbmUuIEZpbmFsbHksIHRoZSBscGZjX2Vsc19mcmVlX2lvY2IoKSBpcyBpbnZva2VkIHRvIHJlbGVhc2UgdGhlCisgKiBJT0NCIGRhdGEgc3RydWN0dXJlLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfY21wbF9lbHNfbG9nb19hY2Moc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICAgICAgIHN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtMjMxMSw2ICsyOTE2LDE5IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfbWJ4X2NtcGxfZGZsdF9ycGk6IENvbXBsZXRpb24gY2FsbGJrIGZ1bmMgZm9yIHVucmVnIGRmbHQgcnBpIG1ib3ggY21kLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdW5yZWdpc3RlciBkZWZhdWx0CisgKiBSUEkgKFJlbW90ZSBQb3J0IEluZGV4KSBtYWlsYm94IGNvbW1hbmQgdG8gdGhlIEBwaGJhLiBJdCBzaW1wbHkgcmVsZWFzZXMKKyAqIHRoZSBhc3NvY2lhdGVkIGxwZmMgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgYnVmZmVyIGJhY2sgdG8gdGhlIHBvb2wgYW5kCisgKiBkZWNyZW1lbnRzIHRoZSBuZGxwIHJlZmVyZW5jZSBjb3VudCBoZWxkIGZvciB0aGlzIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAqIGZ1bmN0aW9uLiBBZnRlciB0aGF0LCBpdCBpbnZva2VzIHRoZSBscGZjX25scF9ub3RfdXNlZCgpIHRvIGNoZWNrCisgKiB3aGV0aGVyIHRoZXJlIGlzIG9ubHkgb25lIHJlZmVyZW5jZSBsZWZ0IG9uIHRoZSBuZGxwLiBJZiBzbywgaXQgd2lsbAorICogcGVyZm9ybSBvbmUgbW9yZSBkZWNyZW1lbnQgYW5kIHRyaWdnZXIgdGhlIHJlbGVhc2Ugb2YgdGhlIG5kbHAuCisgKiovCiB2b2lkCiBscGZjX21ieF9jbXBsX2RmbHRfcnBpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWIpCiB7CkBAIC0yMzMyLDYgKzI5NTAsMjIgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19jbXBsX2Vsc19yc3A6IENvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVscyByZXNwb25zZSBpb2NiIGNtZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBscGZjIHJlc3BvbnNlIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBFTFMgUmVzcG9uc2UgSU9DQgorICogY29tbWFuZC4gSW4gbm9ybWFsIGNhc2UsIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24ganVzdCBwcm9wZXJseSBzZXRzIHRoZQorICogbmxwX2ZsYWcgYml0bWFwIGluIHRoZSBuZGxwIGRhdGEgc3RydWN0dXJlLCBpZiB0aGUgbWJveCBjb21tYW5kIHJlZmVyZW5jZQorICogZmllbGQgaW4gdGhlIGNvbW1hbmQgSU9DQiBpcyBub3QgTlVMTCwgdGhlIHJlZmVycmVkIG1haWxib3ggY29tbWFuZCB3aWxsCisgKiBiZSBzZW5kIG91dCwgYW5kIHRoZW4gaW52b2tlcyB0aGUgbHBmY19lbHNfZnJlZV9pb2NiKCkgcm91dGluZSB0byByZWxlYXNlCisgKiB0aGUgSU9DQi4gVW5kZXIgZXJyb3IgY29uZGl0aW9ucywgc3VjaCBhcyB3aGVuIGEgTFNfUkpUIGlzIHJldHVybmVkIG9yIGEKKyAqIGxpbmsgZG93biBldmVudCBvY2N1cnJlZCBkdXJpbmcgdGhlIGRpc2NvdmVyeSwgdGhlIGxwZmNfbmxwX25vdF91c2VkKCkKKyAqIHJvdXRpbmUgc2hhbGwgYmUgaW52b2tlZCB0cnlpbmcgdG8gcmVsZWFzZSB0aGUgbmRscCBpZiBubyBvdGhlciB0aHJlYWRzCisgKiBhcmUgY3VycmVudGx5IHJlZmVycmluZyBpdC4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NtcGxfZWxzX3JzcChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgIHN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtMjQ4Nyw2ICszMTIxLDMxIEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3JzcF9hY2M6IFByZXBhcmUgYW5kIGlzc3VlIGFuIGFjYyByZXNwb25zZSBpb2NiIGNvbW1hbmQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGZsYWc6IHRoZSBlbHMgY29tbWFuZCBjb2RlIHRvIGJlIGFjY2VwdGVkLgorICogQG9sZGlvY2I6IHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbWJveDogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgYW5kIGlzc3VlcyBhbiBBY2NlcHQgKEFDQykgcmVzcG9uc2UgSU9DQgorICogY29tbWFuZC4gSXQgdXNlcyB0aGUgQGZsYWcgdG8gcHJvcGVybHkgc2V0IHVwIHRoZSBJT0NCIGZpZWxkIGZvciB0aGUKKyAqIHNwZWNpZmljIEFDQyByZXNwb25zZSBjb21tYW5kIHRvIGJlIGlzc3VlZCBhbmQgaW52b2tlcyB0aGUKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2IoKSByb3V0aW5lIHRvIHNlbmQgb3V0IEFDQyByZXNwb25zZSBJT0NCLiBJZiBhCisgKiBAbWJveCBwb2ludGVyIGlzIHBhc3NlZCBpbiwgaXQgd2lsbCBiZSBwdXQgaW50byB0aGUgY29udGV4dF91bi5tYm94CisgKiBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gdG8gaXNzdWUgdGhlCisgKiBtYWlsYm94IGNvbW1hbmQgdG8gdGhlIEhCQSBsYXRlciB3aGVuIGNhbGxiYWNrIGlzIGludm9rZWQuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlIEVMUyBJT0NCIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBpc3N1ZWQgYWNjIHJlc3BvbnNlCisgKiAgIDEgLSBGYWlsZWQgdG8gaXNzdWUgYWNjIHJlc3BvbnNlCisgKiovCiBpbnQKIGxwZmNfZWxzX3JzcF9hY2Moc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50MzJfdCBmbGFnLAogCQkgc3RydWN0IGxwZmNfaW9jYnEgKm9sZGlvY2IsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLApAQCAtMjYwMSw2ICszMjYwLDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcnNwX3JlamVjdDogUHJvcGFyZSBhbmQgaXNzdWUgYSByanQgcmVzcG9uc2UgaW9jYiBjb21tYW5kLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcmVqZWN0RXJyb3I6CisgKiBAb2xkaW9jYjogcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBtYm94OiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyBhbmQgaXNzdWUgYW4gUmVqZWN0IChSSlQpIHJlc3BvbnNlIElPQ0IKKyAqIGNvbW1hbmQuIElmIGEgQG1ib3ggcG9pbnRlciBpcyBwYXNzZWQgaW4sIGl0IHdpbGwgYmUgcHV0IGludG8gdGhlCisgKiBjb250ZXh0X3VuLm1ib3ggZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiB0byBpc3N1ZSB0byB0aGUgSEJBIGxhdGVyLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgcmVqZWN0IHJlc3BvbnNlIEVMUyBJT0NCIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBpc3N1ZWQgcmVqZWN0IHJlc3BvbnNlCisgKiAgIDEgLSBGYWlsZWQgdG8gaXNzdWUgcmVqZWN0IHJlc3BvbnNlCisgKiovCiBpbnQKIGxwZmNfZWxzX3JzcF9yZWplY3Qoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50MzJfdCByZWplY3RFcnJvciwKIAkJICAgIHN0cnVjdCBscGZjX2lvY2JxICpvbGRpb2NiLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKQEAgLTI2NjAsNiArMzM0MSwyNSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3JzcF9hZGlzY19hY2M6IFByZXBhcmUgYW5kIGlzc3VlIGFjYyByZXNwb25zZSB0byBhZGlzYyBpb2NiIGNtZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG9sZGlvY2I6IHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIGFuZCBpc3N1ZXMgYW4gQWNjZXB0IChBQ0MpIHJlc3BvbnNlIHRvIEFkZHJlc3MKKyAqIERpc2NvdmVyIChBRElTQykgRUxTIGNvbW1hbmQuIEl0IHNpbXBseSBwcmVwYXJlcyB0aGUgcGF5bG9hZCBvZiB0aGUgSU9DQgorICogYW5kIGludm9rZXMgdGhlIGxwZmNfc2xpX2lzc3VlX2lvY2IoKSByb3V0aW5lIHRvIHNlbmQgb3V0IHRoZSBjb21tYW5kLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQURJU0MgQWNjZXB0IHJlc3BvbnNlIEVMUyBJT0NCIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBpc3N1ZWQgYWNjIGFkaXNjIHJlc3BvbnNlCisgKiAgIDEgLSBGYWlsZWQgdG8gaXNzdWUgYWRpc2MgYWNjIHJlc3BvbnNlCisgKiovCiBpbnQKIGxwZmNfZWxzX3JzcF9hZGlzY19hY2Moc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19pb2NicSAqb2xkaW9jYiwKIAkJICAgICAgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQpAQCAtMjcxNiw2ICszNDE2LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcnNwX3BybGlfYWNjOiBQcmVwYXJlIGFuZCBpc3N1ZSBhY2MgcmVzcG9uc2UgdG8gcHJsaSBpb2NiIGNtZC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG9sZGlvY2I6IHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIGFuZCBpc3N1ZXMgYW4gQWNjZXB0IChBQ0MpIHJlc3BvbnNlIHRvIFByb2Nlc3MKKyAqIExvZ2luIChQUkxJKSBFTFMgY29tbWFuZC4gSXQgc2ltcGx5IHByZXBhcmVzIHRoZSBwYXlsb2FkIG9mIHRoZSBJT0NCCisgKiBhbmQgaW52b2tlcyB0aGUgbHBmY19zbGlfaXNzdWVfaW9jYigpIHJvdXRpbmUgdG8gc2VuZCBvdXQgdGhlIGNvbW1hbmQuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBQUkxJIEFjY2VwdCByZXNwb25zZSBFTFMgSU9DQiBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgaXNzdWVkIGFjYyBwcmxpIHJlc3BvbnNlCisgKiAgIDEgLSBGYWlsZWQgdG8gaXNzdWUgYWNjIHBybGkgcmVzcG9uc2UKKyAqKi8KIGludAogbHBmY19lbHNfcnNwX3BybGlfYWNjKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfaW9jYnEgKm9sZGlvY2IsCiAJCSAgICAgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQpAQCAtMjc5NSw2ICszNTE0LDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcnNwX3JuaWRfYWNjOiBJc3N1ZSBybmlkIGFjYyByZXNwb25zZSBpb2NiIGNvbW1hbmQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBmb3JtYXQ6IHJuaWQgY29tbWFuZCBmb3JtYXQuCisgKiBAb2xkaW9jYjogcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIGEgUmVxdWVzdCBOb2RlIElkZW50aWZpY2F0aW9uIERhdGEgKFJOSUQpIEFjY2VwdAorICogKEFDQykgcmVzcG9uc2UuIEl0IGNvbnN0cnVjdHMgdGhlIFJOSUQgQUNDIHJlc3BvbnNlIGNvbW1hbmQgYWNjb3JkaW5nIHRvCisgKiB0aGUgcHJvcGVyIEBmb3JtYXQgYW5kIHRoZW4gY2FsbHMgdGhlIGxwZmNfc2xpX2lzc3VlX2lvY2IoKSByb3V0aW5lIHRvCisgKiBpc3N1ZSB0aGUgcmVzcG9uc2UuIE5vdGUgdGhhdCB0aGlzIGNvbW1hbmQgZG9lcyBub3QgbmVlZCB0byBob2xkIHRoZSBuZGxwCisgKiByZWZlcmVuY2UgY291bnQgZm9yIHRoZSBjYWxsYmFjay4gU28sIHRoZSBuZGxwIHJlZmVyZW5jZSBjb3VudCB0YWtlbiBieQorICogdGhlIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUgaXMgcHV0IGJhY2sgYW5kIHRoZSBjb250ZXh0MSBmaWVsZCBvZgorICogSU9DQiBpcyBzZXQgdG8gTlVMTCB0byBpbmRpY2F0ZSB0byB0aGUgbHBmY19lbHNfZnJlZV9pb2NiKCkgcm91dGluZSB0aGF0CisgKiB0aGVyZSBpcyBubyBuZGxwIHJlZmVyZW5jZSBhdmFpbGFibGUuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uLiBIb3dldmVyLCBmb3IgdGhlIFJOSUQgQWNjZXB0IFJlc3BvbnNlIEVMUyBjb21tYW5kLAorICogdGhpcyBpcyB1bmRvbmUgbGF0ZXIgYnkgdGhpcyByb3V0aW5lIGFmdGVyIHRoZSBJT0NCIGlzIGFsbG9jYXRlZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IGlzc3VlZCBhY2Mgcm5pZCByZXNwb25zZQorICogICAxIC0gRmFpbGVkIHRvIGlzc3VlIGFjYyBybmlkIHJlc3BvbnNlCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19yc3Bfcm5pZF9hY2Moc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50OF90IGZvcm1hdCwKIAkJICAgICAgc3RydWN0IGxwZmNfaW9jYnEgKm9sZGlvY2IsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQpAQCAtMjg3NSw2ICszNjIwLDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfZGlzY19hZGlzYzogSXNzdWUgcmVtYWluaW5nIGFkaXNjIGlvY2JzIHRvIG5wciBub2RlcyBvZiBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIEFkZHJlc3MgRGlzY292ZXIgKEFESVNDKSBFTFMgY29tbWFuZHMgdG8gdGhvc2UKKyAqIE5fUG9ydHMgd2hpY2ggYXJlIGluIG5vZGUgcG9ydCByZWNvdmVyeSBzdGF0ZSBhbmQgQURJU0MgaGFzIG5vdCBiZWVuIGlzc3VlZAorICogZm9yIHRoZSBAdnBvcnQuIEVhY2ggdGltZSBhbiBFTFMgQURJU0MgSU9DQiBpcyBpc3N1ZWQgYnkgaW52b2tpbmcgdGhlCisgKiBscGZjX2lzc3VlX2Vsc19hZGlzYygpIHJvdXRpbmUsIHRoZSBwZXIgQHZwb3J0IG51bWJlciBvZiBkaXNjb3ZlciBjb3VudAorICogKG51bV9kaXNjX25vZGVzKSBzaGFsbCBiZSBpbmNyZW1lbnRlZC4gSWYgdGhlIG51bV9kaXNjX25vZGVzIHJlYWNoZXMgYQorICogcHJlLWNvbmZpZ3VyZWQgdGhyZXNob2xkIChjZmdfZGlzY292ZXJ5X3RocmVhZHMpLCB0aGUgQHZwb3J0IGZjX2ZsYWcgd2lsbAorICogYmUgbWFya2VkIHdpdGggRkNfTkxQX01PUkUgYml0IGFuZCB0aGUgcHJvY2VzcyBvZiBpc3N1aW5nIHJlbWFpbmluZyBBRElTQworICogSU9DQnMgcXVpdCBmb3IgbGF0ZXIgcGljayB1cC4gT24gdGhlIG90aGVyIGhhbmQsIGFmdGVyIHdhbGtpbmcgdGhyb3VnaAorICogYWxsIHRoZSBuZGxwcyB3aXRoIHRoZSBAdnBvcnQgYW5kIHRoZXJlIGlzIG5vbmUgQURJU0MgSU9DQiBpc3N1ZWQsIHRoZQorICogQHZwb3J0IGZjX2ZsYWcgc2hhbGwgYmUgY2xlYXJlZCB3aXRoIEZDX05MUF9NT1JFIGJpdCBpbmRpY2F0aW5nIHRoZXJlIGlzCisgKiBubyBtb3JlIEFESVNDIG5lZWQgdG8gYmUgc2VudC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAgVGhlIG51bWJlciBvZiBOX1BvcnRzIHdpdGggYWRpc2MgaXNzdWVkLgorICoqLwogaW50CiBscGZjX2Vsc19kaXNjX2FkaXNjKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTI5MTQsNiArMzY3OCwyNSBAQAogCXJldHVybiBzZW50YWRpc2M7CiB9CiAKKy8qKgorICogbHBmY19lbHNfZGlzY19wbG9naTogSXNzdWUgcGxvZ2kgZm9yIGFsbCBucHIgbm9kZXMgb2YgYSB2cG9ydCBiZWZvcmUgYWRpc2MuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgUG9ydCBMb2dpbiAoUExPR0kpIEVMUyBjb21tYW5kcyB0byBhbGwgdGhlIE5fUG9ydHMKKyAqIHdoaWNoIGFyZSBpbiBub2RlIHBvcnQgcmVjb3Zlcnkgc3RhdGUsIHdpdGggYSBAdnBvcnQuIEVhY2ggdGltZSBhbiBFTFMKKyAqIEFESVNDIFBMT0dJIElPQ0IgaXMgaXNzdWVkIGJ5IGludm9raW5nIHRoZSBscGZjX2lzc3VlX2Vsc19wbG9naSgpIHJvdXRpbmUsCisgKiB0aGUgcGVyIEB2cG9ydCBudW1iZXIgb2YgZGlzY292ZXIgY291bnQgKG51bV9kaXNjX25vZGVzKSBzaGFsbCBiZQorICogaW5jcmVtZW50ZWQuIElmIHRoZSBudW1fZGlzY19ub2RlcyByZWFjaGVzIGEgcHJlLWNvbmZpZ3VyZWQgdGhyZXNob2xkCisgKiAoY2ZnX2Rpc2NvdmVyeV90aHJlYWRzKSwgdGhlIEB2cG9ydCBmY19mbGFnIHdpbGwgYmUgbWFya2VkIHdpdGggRkNfTkxQX01PUkUKKyAqIGJpdCBzZXQgYW5kIHF1aXQgdGhlIHByb2Nlc3Mgb2YgaXNzdWluZyByZW1haW5pbmcgQURJU0MgUExPR0lOIElPQ0JzIGZvcgorICogbGF0ZXIgcGljayB1cC4gT24gdGhlIG90aGVyIGhhbmQsIGFmdGVyIHdhbGtpbmcgdGhyb3VnaCBhbGwgdGhlIG5kbHBzIHdpdGgKKyAqIHRoZSBAdnBvcnQgYW5kIHRoZXJlIGlzIG5vbmUgQURJU0MgUExPR0kgSU9DQiBpc3N1ZWQsIHRoZSBAdnBvcnQgZmNfZmxhZworICogc2hhbGwgYmUgY2xlYXJlZCB3aXRoIHRoZSBGQ19OTFBfTU9SRSBiaXQgaW5kaWNhdGluZyB0aGVyZSBpcyBubyBtb3JlIEFESVNDCisgKiBQTE9HSSBuZWVkIHRvIGJlIHNlbnQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgVGhlIG51bWJlciBvZiBOX1BvcnRzIHdpdGggcGxvZ2kgaXNzdWVkLgorICoqLwogaW50CiBscGZjX2Vsc19kaXNjX3Bsb2dpKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTI5NTQsNiArMzczNywxNSBAQAogCXJldHVybiBzZW50cGxvZ2k7CiB9CiAKKy8qKgorICogbHBmY19lbHNfZmx1c2hfcnNjbjogQ2xlYW4gdXAgYW55IHJzY24gYWN0aXZpdGllcyB3aXRoIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBjbGVhbnMgdXAgYW55IFJlZ2lzdHJhdGlvbiBTdGF0ZSBDaGFuZ2UgTm90aWZpY2F0aW9uCisgKiAoUlNDTikgYWN0aXZpdHkgd2l0aCBhIEB2cG9ydC4gTm90ZSB0aGF0IHRoZSBmY19yc2NuX2ZsdXNoIGZsYWcgb2YgdGhlCisgKiBAdnBvcnQgdG9nZXRoZXIgd2l0aCB0aGUgaG9zdF9sb2NrIGlzIHVzZWQgdG8gcHJldmVudCBtdWx0aXBsZSB0aHJlYWQKKyAqIHRyeWluZyB0byBhY2Nlc3MgdGhlIFJTQ04gYXJyYXkgb24gYSBzYW1lIEB2cG9ydCBhdCB0aGUgc2FtZSB0aW1lLgorICoqLwogdm9pZAogbHBmY19lbHNfZmx1c2hfcnNjbihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0yOTg0LDYgKzM3NzYsMTggQEAKIAl2cG9ydC0+ZmNfcnNjbl9mbHVzaCA9IDA7CiB9CiAKKy8qKgorICogbHBmY19yc2NuX3BheWxvYWRfY2hlY2s6IENoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYSBwZW5kaW5nIHJzY24gdG8gYSBkaWQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGRpZDogcmVtb3RlIGRlc3RpbmF0aW9uIHBvcnQgaWRlbnRpZmllci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIHdoZXRoZXIgdGhlcmUgaXMgYW55IHBlbmRpbmcgUmVnaXN0cmF0aW9uIFN0YXRlCisgKiBDb25maWd1cmF0aW9uIE5vdGlmaWNhdGlvbiAoUlNDTikgdG8gYSBAZGlkIG9uIEB2cG9ydC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICBOb25lIHplcm8gLSBUaGUgQGRpZCBtYXRjaGVkIHdpdGggYSBwZW5kaW5nIHJzY24KKyAqICAgMCAtIG5vdCBhYmxlIHRvIG1hdGNoIEBkaWQgd2l0aCBhIHBlbmRpbmcgcnNjbgorICoqLwogaW50CiBscGZjX3JzY25fcGF5bG9hZF9jaGVjayhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHVpbnQzMl90IGRpZCkKIHsKQEAgLTMwNTMsNiArMzg1NywxNyBAQAogCXJldHVybiBkaWQ7CiB9CiAKKy8qKgorICogbHBmY19yc2NuX3JlY292ZXJ5X2NoZWNrOiBTZW5kIHJlY292ZXJ5IGV2ZW50IHRvIHZwb3J0IG5vZGVzIG1hdGNoaW5nIHJzY24KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHNlbmRzIHJlY292ZXJ5IChOTFBfRVZUX0RFVklDRV9SRUNPVkVSWSkgZXZlbnQgdG8gdGhlCisgKiBzdGF0ZSBtYWNoaW5lIGZvciBhIEB2cG9ydCdzIG5vZGVzIHRoYXQgYXJlIHdpdGggcGVuZGluZyBSU0NOIChSZWdpc3RyYXRpb24KKyAqIFN0YXRlIENoYW5nZSBOb3RpZmljYXRpb24pLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsIChjdXJyZW50bHkgYWx3YXkgcmV0dXJuIDApCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3JzY25fcmVjb3ZlcnlfY2hlY2soc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMzA3MSw2ICszODg2LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcmN2X3JzY246IFByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgcnNjbiBpb2NiLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHByb2Nlc3NlcyBhbiB1bnNvbGljaXRlZCBSU0NOIChSZWdpc3RyYXRpb24gU3RhdGUgQ2hhbmdlCisgKiBOb3RpZmljYXRpb24pIElPQ0IuIEZpcnN0LCB0aGUgcGF5bG9hZCBvZiB0aGUgdW5zb2xpY2l0ZWQgUlNDTiBpcyB3YWxrZWQKKyAqIHRvIGludm9rZSBmY19ob3N0X3Bvc3RfZXZlbnQoKSByb3V0aW5lIHRvIHRoZSBGQyB0cmFuc3BvcnQgbGF5ZXIuIElmIHRoZQorICogZGlzY292ZXIgc3RhdGUgbWFjaGluZSBpcyBhYm91dCB0byBiZWdpbiBkaXNjb3ZlcnksIGl0IGp1c3QgYWNjZXB0cyB0aGUKKyAqIFJTQ04gYW5kIHRoZSBkaXNjb3ZlcnkgcHJvY2VzcyB3aWxsIHNhdGlzZnkgdGhlIFJTQ04uIElmIHRoaXMgUlNDTiBvbmx5CisgKiBjb250YWlucyBOX1BvcnQgSURzIGZvciBvdGhlciB2cG9ydHMgb24gdGhpcyBIQkEsIGl0IGp1c3QgYWNjZXB0cyB0aGUKKyAqIFJTQ04gYW5kIGlnbm9yZSBwcm9jZXNzaW5nIGl0LiBJZiB0aGUgc3RhdGUgbWFjaGluZSBpcyBpbiB0aGUgcmVjb3ZlcnkKKyAqIHN0YXRlLCB0aGUgZmNfcnNjbl9pZF9saXN0IG9mIHRoaXMgQHZwb3J0IGlzIHdhbGtlZCBhbmQgdGhlCisgKiBscGZjX3JzY25fcmVjb3ZlcnlfY2hlY2soKSByb3V0aW5lIGlzIGludm9rZWQgdG8gc2VuZCByZWNvdmVyeSBldmVudCBmb3IKKyAqIGFsbCBub2RlcyB0aGF0IG1hdGNoIFJTQ04gcGF5bG9hZC4gT3RoZXJ3aXNlLCB0aGUgbHBmY19lbHNfaGFuZGxlX3JzY24oKQorICogcm91dGluZSBpcyBpbnZva2VkIHRvIGhhbmRsZSB0aGUgUlNDTiBldmVudC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gSnVzdCBzZW50IHRoZSBhY2MgcmVzcG9uc2UKKyAqICAgMSAtIFNlbnQgdGhlIGFjYyByZXNwb25zZSBhbmQgd2FpdGVkIGZvciBuYW1lIHNlcnZlciBjb21wbGV0aW9uCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19yY3ZfcnNjbihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQpAQCAtMzEzMCw3ICszOTY3LDcgQEAKIAkJaWYgKHJzY25faWQgPT0gaGJhX2lkKSB7CiAJCQkvKiBBTEwgTlBvcnRJRHMgaW4gUlNDTiBhcmUgb24gSEJBICovCiAJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0lORk8sIExPR19ESVNDT1ZFUlksCi0JCQkJCSAiMDIxNCBJZ25vcmUgUlNDTiAiCisJCQkJCSAiMDIxOSBJZ25vcmUgUlNDTiAiCiAJCQkJCSAiRGF0YTogeCV4IHgleCB4JXggeCV4XG4iLAogCQkJCQkgdnBvcnQtPmZjX2ZsYWcsIHBheWxvYWRfbGVuLAogCQkJCQkgKmxwLCB2cG9ydC0+ZmNfcnNjbl9pZF9jbnQpOwpAQCAtMzI0MSw2ICs0MDc4LDIyIEBACiAJcmV0dXJuIGxwZmNfZWxzX2hhbmRsZV9yc2NuKHZwb3J0KTsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19oYW5kbGVfcnNjbjogSGFuZGxlIHJzY24gZm9yIGEgdnBvcnQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBoYW5kbGVzIHRoZSBSZWdpc3RyYXRpb24gU3RhdGUgQ29uZmlndXJhdGlvbiBOb3RpZmljYXRpb24KKyAqIChSU0NOKSBmb3IgYSBAdnBvcnQuIElmIGxvZ2luIHRvIE5hbWVTZXJ2ZXIgZG9lcyBub3QgZXhpc3QsIGEgbmV3IG5kbHAgc2hhbGwKKyAqIGJlIGNyZWF0ZWQgYW5kIGEgUG9ydCBMb2dpbiAoUExPR0kpIHRvIHRoZSBOYW1lU2VydmVyIGlzIGlzc3VlZC4gT3RoZXJ3aXNlLAorICogaWYgdGhlIG5kbHAgdG8gTmFtZVNlcnZlciBleGlzdHMsIGEgQ29tbW9uIFRyYW5zcG9ydCAoQ1QpIGNvbW1hbmQgdG8gdGhlCisgKiBOYW1lU2VydmVyIHNoYWxsIGJlIGlzc3VlZC4gSWYgQ1QgY29tbWFuZCB0byB0aGUgTmFtZVNlcnZlciBmYWlscyB0byBiZQorICogaXNzdWVkLCB0aGUgbHBmY19lbHNfZmx1c2hfcnNjbigpIHJvdXRpbmUgc2hhbGwgYmUgaW52b2tlZCB0byBjbGVhbiB1cCBhbnkKKyAqIFJTQ04gYWN0aXZpdGllcyB3aXRoIHRoZSBAdnBvcnQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIENsZWFuZWQgdXAgcnNjbiBvbiB0aGUgQHZwb3J0CisgKiAgIDEgLSBXYWl0IGZvciBwbG9naSB0byBuYW1lIHNlcnZlciBiZWZvcmUgcHJvY2VlZAorICoqLwogaW50CiBscGZjX2Vsc19oYW5kbGVfcnNjbihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0zMzEzLDYgKzQxNjYsMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yY3ZfZmxvZ2k6IFByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgZmxvZ2kgaW9jYi4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9jZXNzZXMgRmFicmljIExvZ2luIChGTE9HSSkgSU9DQiByZWNlaXZlZCBhcyBhbiBFTFMKKyAqIHVuc29saWNpdGVkIGV2ZW50LiBBbiB1bnNvbGljaXRlZCBGTE9HSSBjYW4gYmUgcmVjZWl2ZWQgaW4gYSBwb2ludC10by0KKyAqIHBvaW50IHRvcG9sb2d5LiBBcyBhbiB1bnNvbGljaXRlZCBGTE9HSSBzaG91bGQgbm90IGJlIHJlY2VpdmVkIGluIGEgbG9vcAorICogbW9kZSwgYW55IHVuc29saWNpdGVkIEZMT0dJIHJlY2VpdmVkIGluIGxvb3AgbW9kZSBzaGFsbCBiZSBpZ25vcmVkLiBUaGUKKyAqIGxwZmNfY2hlY2tfc3Bhcm0oKSByb3V0aW5lIGlzIGludm9rZWQgdG8gY2hlY2sgdGhlIHBhcmFtZXRlcnMgaW4gdGhlCisgKiB1bnNvbGljaXRlZCBGTE9HSS4gSWYgcGFyYW1ldGVycyB2YWxpZGF0aW9uIGZhaWxlZCwgdGhlIHJvdXRpbmUKKyAqIGxwZmNfZWxzX3JzcF9yZWplY3QoKSBzaGFsbCBiZSBjYWxsZWQgd2l0aCByZWplY3QgcmVhc29uIGNvZGUgc2V0IHRvCisgKiBMU0VYUF9TUEFSTV9PUFRJT05TIHRvIHJlamVjdCB0aGUgRkxPR0kuIE90aGVyd2lzZSwgdGhlIFBvcnQgV1dOIGluIHRoZQorICogRkxPR0kgc2hhbGwgYmUgY29tcGFyZWQgd2l0aCB0aGUgUG9ydCBXV04gb2YgdGhlIEB2cG9ydCB0byBkZXRlcm1pbmUgd2hvCisgKiB3aWxsIGluaXRpYXRlIFBMT0dJLiBUaGUgaGlnaGVyIGxleGljb2dyYXBoaWNhbCB2YWx1ZSBwYXJ0eSBzaGFsbCBoYXMKKyAqIGhpZ2hlciBwcmlvcml0eSAoYXMgdGhlIHdpbm5pbmcgcG9ydCkgYW5kIHdpbGwgaW5pdGlhdGUgUExPR0kgYW5kCisgKiBjb21tdW5pY2F0ZSBQb3J0X0lEcyAoQWRkcmVzc2VzKSBmb3IgYm90aCBub2RlcyBpbiBQTE9HSS4gVGhlIHJlc3VsdAorICogb2YgdGhpcyB3aWxsIGJlIG1hcmtlZCBpbiB0aGUgQHZwb3J0IGZjX2ZsYWcgZmllbGQgd2l0aCBGQ19QVDJQVF9QTE9HSQorICogYW5kIHRoZW4gdGhlIGxwZmNfZWxzX3JzcF9hY2MoKSByb3V0aW5lIGlzIGludm9rZWQgdG8gYWNjZXB0IHRoZSBGTE9HSS4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCB0aGUgdW5zb2xpY2l0ZWQgZmxvZ2kKKyAqICAgMSAtIEZhaWxlZCB0byBwcm9jZXNzIHRoZSB1bnNvbGljaXRlZCBmbG9naQorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfcmN2X2Zsb2dpKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQpAQCAtMzQwMiw2ICs0MjgwLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcmN2X3JuaWQ6IFByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgcm5pZCBpb2NiLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHByb2Nlc3NlcyBSZXF1ZXN0IE5vZGUgSWRlbnRpZmljYXRpb24gRGF0YSAoUk5JRCkgSU9DQgorICogcmVjZWl2ZWQgYXMgYW4gRUxTIHVuc29saWNpdGVkIGV2ZW50LiBPbmx5IHdoZW4gdGhlIFJOSUQgc3BlY2lmaWVkIGZvcm1hdAorICogMHgwIG9yIDB4REYgKFRvcG9sb2d5IERpc2NvdmVyeSBTcGVjaWZpYyBOb2RlIElkZW50aWZpY2F0aW9uIERhdGEpCisgKiBwcmVzZW50LCB0aGlzIHJvdXRpbmUgd2lsbCBpbnZva2UgdGhlIGxwZmNfZWxzX3JzcF9ybmlkX2FjYygpIHJvdXRpbmUgdG8KKyAqIEFjY2VwdCAoQUNDKSB0aGUgUk5JRCBFTFMgY29tbWFuZC4gQWxsIHRoZSBvdGhlciBSTklEIGZvcm1hdHMgYXJlCisgKiByZWplY3RlZCBieSBpbnZva2luZyB0aGUgbHBmY19lbHNfcnNwX3JlamVjdCgpIHJvdXRpbmUuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgcm5pZCBpb2NiIChjdXJyZW50bHkgYWx3YXlzIHJldHVybiAwKQorICoqLwogc3RhdGljIGludAogbHBmY19lbHNfcmN2X3JuaWQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKQEAgLTM0NDEsNiArNDMzNSwxOSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3Jjdl9saXJyOiBQcm9jZXNzIGFuIHVuc29saWNpdGVkIGxpcnIgaW9jYi4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqIEBuZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9jZXNzZXMgYSBMaW5rIEluY2lkZW50IFJlcG9ydCBSZWdpc3RyYXRpb24oTElSUikgSU9DQgorICogcmVjZWl2ZWQgYXMgYW4gRUxTIHVuc29saWNpdGVkIGV2ZW50LiBDdXJyZW50bHksIHRoaXMgZnVuY3Rpb24ganVzdCBpbnZva2VzCisgKiB0aGUgbHBmY19lbHNfcnNwX3JlamVjdCgpIHJvdXRpbmUgdG8gcmVqZWN0IHRoZSBMSVJSIElPQ0IgdW5jb25kaXRpb25hbGx5LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGxpcnIgaW9jYiAoY3VycmVudGx5IGFsd2F5cyByZXR1cm4gMCkKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX3Jjdl9saXJyKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCkBAIC0zNDU2LDYgKzQzNjMsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yc3BfcnBzX2FjYzogQ29tcGxldGlvbiBjYWxsYmsgZnVuYyBmb3IgTUJYX1JFQURfTE5LX1NUQVQgbWJveCBjbWQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgTUJYX1JFQURfTE5LX1NUQVQKKyAqIG1haWxib3ggY29tbWFuZC4gVGhpcyBjYWxsYmFjayBmdW5jdGlvbiBpcyB0byBhY3R1YWxseSBzZW5kIHRoZSBBY2NlcHQKKyAqIChBQ0MpIHJlc3BvbnNlIHRvIGEgUmVhZCBQb3J0IFN0YXR1cyAoUlBTKSB1bnNvbGljaXRlZCBJT0NCIGV2ZW50LiBJdAorICogY29sbGVjdHMgdGhlIGxpbmsgc3RhdGlzdGljcyBmcm9tIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBNQlhfUkVBRF9MTktfU1RBVAorICogbWFpbGJveCBjb21tYW5kLCBjb25zdHJ1Y3RzIHRoZSBSUFMgcmVzcG9uc2Ugd2l0aCB0aGUgbGluayBzdGF0aXN0aWNzCisgKiBjb2xsZWN0ZWQsIGFuZCB0aGVuIGludm9rZXMgdGhlIGxwZmNfc2xpX2lzc3VlX2lvY2IoKSByb3V0aW5lIHRvIHNlbmQgQUNDCisgKiByZXNwb25zZSB0byB0aGUgUlBTLgorICoKKyAqIE5vdGUgdGhhdCwgaW4gbHBmY19wcmVwX2Vsc19pb2NiKCkgcm91dGluZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBuZGxwCisgKiB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IDEgZm9yIGhvbGRpbmcgdGhlIG5kbHAgYW5kIHRoZSByZWZlcmVuY2UgdG8gbmRscAorICogd2lsbCBiZSBzdG9yZWQgaW50byB0aGUgY29udGV4dDEgZmllbGQgb2YgdGhlIElPQ0IgZm9yIHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgUlBTIEFjY2VwdCBSZXNwb25zZSBFTFMgSU9DQiBjb21tYW5kLgorICoKKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2Vsc19yc3BfcnBzX2FjYyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1iKQogewpAQCAtMzUzMSw2ICs0NDU3LDI0IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3Jjdl9ycHM6IFByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgcnBzIGlvY2IuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJvY2Vzc2VzIFJlYWQgUG9ydCBTdGF0dXMgKFJQUykgSU9DQiByZWNlaXZlZCBhcyBhbgorICogRUxTIHVuc29saWNpdGVkIGV2ZW50LiBJdCBmaXJzdCBjaGVja3MgdGhlIHJlbW90ZSBwb3J0IHN0YXRlLiBJZiB0aGUKKyAqIHJlbW90ZSBwb3J0IGlzIG5vdCBpbiBOTFBfU1RFX1VOTUFQUEVEX05PREUgc3RhdGUgb3IgTkxQX1NURV9NQVBQRURfTk9ERQorICogc3RhdGUsIGl0IGludm9rZXMgdGhlIGxwZmNfZWxzX3JzcF9yZWplY3QoKSByb3V0aW5lIHRvIHNlbmQgdGhlIHJlamVjdAorICogcmVzcG9uc2UuIE90aGVyd2lzZSwgaXQgaXNzdWUgdGhlIE1CWF9SRUFEX0xOS19TVEFUIG1haWxib3ggY29tbWFuZAorICogZm9yIHJlYWRpbmcgdGhlIEhCQSBsaW5rIHN0YXRpc3RpY3MuIEl0IGlzIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sCisgKiBscGZjX2Vsc19yc3BfcnBzX2FjYygpLCBzZXQgdG8gdGhlIE1CWF9SRUFEX0xOS19TVEFUIG1haWxib3ggY29tbWFuZAorICogdG8gYWN0dWFsbHkgc2VuZGluZyBvdXQgUlBTIEFjY2VwdCAoQUNDKSByZXNwb25zZS4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgcnBzIGlvY2IgKGN1cnJlbnRseSBhbHdheXMgcmV0dXJuIDApCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19yY3ZfcnBzKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKQEAgLTM1NDQsMTQgKzQ0ODgsOSBAQAogCXN0cnVjdCBsc19yanQgc3RhdDsKIAogCWlmICgobmRscC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfVU5NQVBQRURfTk9ERSkgJiYKLQkgICAgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX01BUFBFRF9OT0RFKSkgewotCQlzdGF0LnVuLmIubHNSanRSc3ZkMCA9IDA7Ci0JCXN0YXQudW4uYi5sc1JqdFJzbkNvZGUgPSBMU1JKVF9VTkFCTEVfVFBDOwotCQlzdGF0LnVuLmIubHNSanRSc25Db2RlRXhwID0gTFNFWFBfQ0FOVF9HSVZFX0RBVEE7Ci0JCXN0YXQudW4uYi52ZW5kb3JVbmlxdWUgPSAwOwotCQlscGZjX2Vsc19yc3BfcmVqZWN0KHZwb3J0LCBzdGF0LnVuLmxzUmp0RXJyb3IsIGNtZGlvY2IsIG5kbHAsCi0JCQlOVUxMKTsKLQl9CisJICAgIChuZGxwLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9NQVBQRURfTk9ERSkpCisJCS8qIHJlamVjdCB0aGUgdW5zb2xpY2l0ZWQgUlBTIHJlcXVlc3QgYW5kIGRvbmUgd2l0aCBpdCAqLworCQlnb3RvIHJlamVjdF9vdXQ7CiAKIAlwY21kID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBjbWRpb2NiLT5jb250ZXh0MjsKIAlscCA9ICh1aW50MzJfdCAqKSBwY21kLT52aXJ0OwpAQCAtMzU4NCw2ICs0NTIzLDkgQEAKIAkJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkJfQogCX0KKworcmVqZWN0X291dDoKKwkvKiBpc3N1ZSByZWplY3Rpb24gcmVzcG9uc2UgKi8KIAlzdGF0LnVuLmIubHNSanRSc3ZkMCA9IDA7CiAJc3RhdC51bi5iLmxzUmp0UnNuQ29kZSA9IExTUkpUX1VOQUJMRV9UUEM7CiAJc3RhdC51bi5iLmxzUmp0UnNuQ29kZUV4cCA9IExTRVhQX0NBTlRfR0lWRV9EQVRBOwpAQCAtMzU5Miw2ICs0NTM0LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcnNwX3JwbF9hY2M6IElzc3VlIGFuIGFjY2VwdCBycGwgZWxzIGNvbW1hbmQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQGNtZHNpemU6IHNpemUgb2YgdGhlIEVMUyBjb21tYW5kLgorICogQG9sZGlvY2I6IHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzc3VlZXMgYW4gQWNjZXB0IChBQ0MpIFJlYWQgUG9ydCBMaXN0IChSUEwpIEVMUyBjb21tYW5kLgorICogSXQgaXMgdG8gYmUgY2FsbGVkIGJ5IHRoZSBscGZjX2Vsc19yY3ZfcnBsKCkgcm91dGluZSB0byBhY2NlcHQgdGhlIFJQTC4KKyAqCisgKiBOb3RlIHRoYXQsIGluIGxwZmNfcHJlcF9lbHNfaW9jYigpIHJvdXRpbmUsIHRoZSByZWZlcmVuY2UgY291bnQgb2YgbmRscAorICogd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAxIGZvciBob2xkaW5nIHRoZSBuZGxwIGFuZCB0aGUgcmVmZXJlbmNlIHRvIG5kbHAKKyAqIHdpbGwgYmUgc3RvcmVkIGludG8gdGhlIGNvbnRleHQxIGZpZWxkIG9mIHRoZSBJT0NCIGZvciB0aGUgY29tcGxldGlvbgorICogY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIFJQTCBBY2NlcHQgUmVzcG9uc2UgRUxTIGNvbW1hbmQuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgMCAtIFN1Y2Nlc3NmdWxseSBpc3N1ZWQgQUNDIFJQTCBFTFMgY29tbWFuZAorICogICAxIC0gRmFpbGVkIHRvIGlzc3VlIEFDQyBSUEwgRUxTIGNvbW1hbmQKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX3JzcF9ycGxfYWNjKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludDE2X3QgY21kc2l6ZSwKIAkJICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqb2xkaW9jYiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCkBAIC0zNjQ1LDYgKzQ2MDYsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yY3ZfcnBsOiBQcm9jZXNzIGFuIHVuc29saWNpdGVkIHJwbCBpb2NiLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHByb2Nlc3NlcyBSZWFkIFBvcnQgTGlzdCAoUlBMKSBJT0NCIHJlY2VpdmVkIGFzIGFuIEVMUworICogdW5zb2xpY2l0ZWQgZXZlbnQuIEl0IGZpcnN0IGNoZWNrcyB0aGUgcmVtb3RlIHBvcnQgc3RhdGUuIElmIHRoZSByZW1vdGUKKyAqIHBvcnQgaXMgbm90IGluIE5MUF9TVEVfVU5NQVBQRURfTk9ERSBhbmQgTkxQX1NURV9NQVBQRURfTk9ERSBzdGF0ZXMsIGl0CisgKiBpbnZva2VzIHRoZSBscGZjX2Vsc19yc3BfcmVqZWN0KCkgcm91dGluZSB0byBzZW5kIHJlamVjdCByZXNwb25zZS4KKyAqIE90aGVyd2lzZSwgdGhpcyByb3V0aW5lIHRoZW4gaW52b2tlcyB0aGUgbHBmY19lbHNfcnNwX3JwbF9hY2MoKSByb3V0aW5lCisgKiB0byBhY2NlcHQgdGhlIFJQTC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBycGwgaW9jYiAoY3VycmVudGx5IGFsd2F5cyByZXR1cm4gMCkKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX3Jjdl9ycGwoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQpAQCAtMzY1OCwxMiArNDYzNSwxNSBAQAogCiAJaWYgKChuZGxwLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9VTk1BUFBFRF9OT0RFKSAmJgogCSAgICAobmRscC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfTUFQUEVEX05PREUpKSB7CisJCS8qIGlzc3VlIHJlamVjdGlvbiByZXNwb25zZSAqLwogCQlzdGF0LnVuLmIubHNSanRSc3ZkMCA9IDA7CiAJCXN0YXQudW4uYi5sc1JqdFJzbkNvZGUgPSBMU1JKVF9VTkFCTEVfVFBDOwogCQlzdGF0LnVuLmIubHNSanRSc25Db2RlRXhwID0gTFNFWFBfQ0FOVF9HSVZFX0RBVEE7CiAJCXN0YXQudW4uYi52ZW5kb3JVbmlxdWUgPSAwOwogCQlscGZjX2Vsc19yc3BfcmVqZWN0KHZwb3J0LCBzdGF0LnVuLmxzUmp0RXJyb3IsIGNtZGlvY2IsIG5kbHAsCiAJCQlOVUxMKTsKKwkJLyogcmVqZWN0ZWQgdGhlIHVuc29saWNpdGVkIFJQTCByZXF1ZXN0IGFuZCBkb25lIHdpdGggaXQgKi8KKwkJcmV0dXJuIDA7CiAJfQogCiAJcGNtZCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgY21kaW9jYi0+Y29udGV4dDI7CkBAIC0zNjg1LDYgKzQ2NjUsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yY3ZfZmFycDogUHJvY2VzcyBhbiB1bnNvbGljaXRlZCBmYXJwIHJlcXVlc3QgZWxzIGNvbW1hbmQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHByb2Nlc3NlcyBGaWJyZSBDaGFubmVsIEFkZHJlc3MgUmVzb2x1dGlvbiBQcm90b2NvbAorICogKEZBUlApIFJlcXVlc3QgSU9DQiByZWNlaXZlZCBhcyBhbiBFTFMgdW5zb2xpY2l0ZWQgZXZlbnQuIEN1cnJlbnRseSwKKyAqIHRoZSBscGZjIGRyaXZlciBvbmx5IHN1cHBvcnRzIG1hdGNoaW5nIG9uIFdXUE4gb3IgV1dOTiBmb3IgRkFSUC4gQXMgc3VjaCwKKyAqIEZBUlBfTUFUQ0hfUE9SVCBmbGFnIGFuZCBGQVJQX01BVENIX05PREUgZmxhZyBhcmUgY2hlY2tlZCBhZ2FpbnN0IHRoZQorICogTWF0Y2ggRmxhZyBpbiB0aGUgRkFSUCByZXF1ZXN0IElPQ0I6IGlmIEZBUlBfTUFUQ0hfUE9SVCBmbGFnIGlzIHNldCwgdGhlCisgKiByZW1vdGUgUG9ydE5hbWUgaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgRkMgUG9ydE5hbWUgc3RvcmVkIGluIHRoZSBAdnBvcnQKKyAqIGRhdGEgc3RydWN0dXJlOyBpZiBGQVJQX01BVENIX05PREUgZmxhZyBpcyBzZXQsIHRoZSByZW1vdGUgTm9kZU5hbWUgaXMKKyAqIGNvbXBhcmVkIGFnYWluc3QgdGhlIEZDIE5vZGVOYW1lIHN0b3JlZCBpbiB0aGUgQHZwb3J0IGRhdGEgc3RydWN0dXJlLgorICogSWYgYW55IG9mIHRoZXNlIG1hdGNoZXMgYW5kIHRoZSBGQVJQX1JFUVVFU1RfRkFSUFIgZmxhZyBpcyBzZXQgaW4gdGhlCisgKiBGQVJQIHJlcXVlc3QgSU9DQiBSZXNwb25zZSBGbGFnLCB0aGUgbHBmY19pc3N1ZV9lbHNfZmFycHIoKSByb3V0aW5lIGlzCisgKiBpbnZva2VkIHRvIHNlbmQgb3V0IEZBUlAgUmVzcG9uc2UgdG8gdGhlIHJlbW90ZSBub2RlLiBCZWZvcmUgc2VuZGluZyB0aGUKKyAqIEZBUlAgUmVzcG9uc2UsIGhvd2V2ZXIsIHRoZSBGQVJQX1JFUVVFU1RfUExPR0kgZmxhZyBpcyBjaGVjayBpbiB0aGUgRkFSUAorICogcmVxdWVzdCBJT0NCIFJlc3BvbnNlIEZsYWcgYW5kLCBpZiBpdCBpcyBzZXQsIHRoZSBscGZjX2lzc3VlX2Vsc19wbG9naSgpCisgKiByb3V0aW5lIGlzIGludm9rZWQgdG8gbG9nIGludG8gdGhlIHJlbW90ZSBwb3J0IGZpcnN0LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBFaXRoZXIgdGhlIEZBUlAgTWF0Y2ggTW9kZSBub3Qgc3VwcG9ydGVkIG9yIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZWxzX3Jjdl9mYXJwKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCkBAIC0zNzQ0LDYgKzQ3NDgsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19yY3ZfZmFycHI6IFByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgZmFycCByZXNwb25zZSBpb2NiLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHByb2Nlc3NlcyBGaWJyZSBDaGFubmVsIEFkZHJlc3MgUmVzb2x1dGlvbiBQcm90b2NvbAorICogUmVzcG9uc2UgKEZBUlBSKSBJT0NCIHJlY2VpdmVkIGFzIGFuIEVMUyB1bnNvbGljaXRlZCBldmVudC4gSXQgc2ltcGx5CisgKiBpbnZva2VzIHRoZSBscGZjX2Vsc19yc3BfYWNjKCkgcm91dGluZSB0byB0aGUgcmVtb3RlIG5vZGUgdG8gYWNjZXB0CisgKiB0aGUgRkFSUCByZXNwb25zZSByZXF1ZXN0LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIEZBUlBSIElPQ0IgKGN1cnJlbnRseSBhbHdheXMgcmV0dXJuIDApCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19yY3ZfZmFycHIoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgICpuZGxwKQpAQCAtMzc2OCw2ICs0Nzg2LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19lbHNfcmN2X2ZhbjogUHJvY2VzcyBhbiB1bnNvbGljaXRlZCBmYW4gaW9jYiBjb21tYW5kLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQGZhbl9uZGxwOiBwb2ludGVyIHRvIGEgbm9kZS1saXN0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9jZXNzZXMgYSBGYWJyaWMgQWRkcmVzcyBOb3RpZmljYXRpb24gKEZBTikgSU9DQgorICogY29tbWFuZCByZWNlaXZlZCBhcyBhbiBFTFMgdW5zb2xpY2l0ZWQgZXZlbnQuIFRoZSBGQU4gRUxTIGNvbW1hbmQgd2lsbAorICogb25seSBiZSBwcm9jZXNzZWQgb24gYSBwaHlzaWNhbCBwb3J0IChpLmUuLCB0aGUgQHZwb3J0IHJlcHJlc2VudHMgdGhlCisgKiBwaHlzaWNhbCBwb3J0KS4gVGhlIGZhYnJpYyBOb2RlTmFtZSBhbmQgUG9ydE5hbWUgZnJvbSB0aGUgRkFOIElPQ0IgYXJlCisgKiBjb21wYXJlZCBhZ2FpbnN0IHRob3NlIGluIHRoZSBwaGJhIGRhdGEgc3RydWN0dXJlLiBJZiBhbnkgb2YgdGhvc2UgaXMKKyAqIGRpZmZlcmVudCwgdGhlIGxwZmNfaW5pdGlhbF9mbG9naSgpIHJvdXRpbmUgaXMgaW52b2tlZCB0byBpbml0aWFsaXplCisgKiBGYWJyaWMgTG9naW4gKEZMT0dJKSB0byB0aGUgZmFicmljIHRvIHN0YXJ0IHRoZSBkaXNjb3ZlciBvdmVyLiBPdGhlcndpc2UsCisgKiBpZiBib3RoIG9mIHRob3NlIGFyZSBpZGVudGljYWwsIHRoZSBscGZjX2lzc3VlX2ZhYnJpY19yZWdsb2dpbigpIHJvdXRpbmUKKyAqIGlzIGludm9rZWQgdG8gcmVnaXN0ZXIgbG9naW4gdG8gdGhlIGZhYnJpYy4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBmYW4gaW9jYiAoY3VycmVudGx5IGFsd2F5cyByZXR1cm4gMCkuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2Vsc19yY3ZfZmFuKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqZmFuX25kbHApCkBAIC0zNzk3LDYgKzQ4MzQsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX2Vsc190aW1lb3V0OiBIYW5kbGVyIGZ1bmNpdG9uIHRvIHRoZSBlbHMgdGltZXIuCisgKiBAcHRyOiBob2xkZXIgZm9yIHRoZSB0aW1lciBmdW5jdGlvbiBhc3NvY2lhdGVkIGRhdGEuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgYnkgdGhlIEVMUyB0aW1lciBhZnRlciB0aW1lb3V0LiBJdCBwb3N0cyB0aGUgRUxTCisgKiB0aW1lciB0aW1lb3V0IGV2ZW50IGJ5IHNldHRpbmcgdGhlIFdPUktFUl9FTFNfVE1PIGJpdCB0byB0aGUgd29yayBwb3J0CisgKiBldmVudCBiaXRtYXAgYW5kIHRoZW4gaW52b2tlcyB0aGUgbHBmY193b3JrZXJfd2FrZV91cCgpIHJvdXRpbmUgdG8gd2FrZQorICogdXAgdGhlIHdvcmtlciB0aHJlYWQuIEl0IGlzIGZvciB0aGUgd29ya2VyIHRocmVhZCB0byBpbnZva2UgdGhlIHJvdXRpbmUKKyAqIGxwZmNfZWxzX3RpbWVvdXRfaGFuZGxlcigpIHRvIHdvcmsgb24gdGhlIHBvc3RlZCBldmVudCBXT1JLRVJfRUxTX1RNTy4KKyAqKi8KIHZvaWQKIGxwZmNfZWxzX3RpbWVvdXQodW5zaWduZWQgbG9uZyBwdHIpCiB7CkBAIC0zODE2LDYgKzQ4NjMsMTUgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19lbHNfdGltZW91dF9oYW5kbGVyOiBQcm9jZXNzIGFuIGVscyB0aW1lb3V0IGV2ZW50LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBhY3R1YWwgaGFuZGxlciBmdW5jdGlvbiB0aGF0IHByb2Nlc3NlcyBhbiBFTFMgdGltZW91dAorICogZXZlbnQuIEl0IHdhbGtzIHRoZSBFTFMgcmluZyB0byBnZXQgYW5kIGFib3J0IGFsbCB0aGUgSU9DQnMgKGV4Y2VwdCB0aGUKKyAqIEFCT1JUL0NMT1NFL0ZBUlAvRkFSUFIvRkRJU0MpLCB3aGljaCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBAdnBvcnQgYnkKKyAqIGludm9raW5nIHRoZSBscGZjX3NsaV9pc3N1ZV9hYm9ydF9pb3RhZygpIHJvdXRpbmUuCisgKiovCiB2b2lkCiBscGZjX2Vsc190aW1lb3V0X2hhbmRsZXIoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMzg4Niw2ICs0OTQyLDI2IEBACiAJCW1vZF90aW1lcigmdnBvcnQtPmVsc190bW9mdW5jLCBqaWZmaWVzICsgSFogKiB0aW1lb3V0KTsKIH0KIAorLyoqCisgKiBscGZjX2Vsc19mbHVzaF9jbWQ6IENsZWFuIHVwIHRoZSBvdXRzdGFuZGluZyBlbHMgY29tbWFuZHMgdG8gYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIGhvc3QgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gY2xlYW4gdXAgYWxsIHRoZSBvdXRzdGFuZGluZyBFTFMgY29tbWFuZHMgb24gYQorICogQHZwb3J0LiBJdCBmaXJzdCBhYm9ydHMgdGhlIEB2cG9ydCBieSBpbnZva2luZyBscGZjX2ZhYnJpY19hYm9ydF92cG9ydCgpCisgKiByb3V0aW5lLiBBZnRlciB0aGF0LCBpdCB3YWxrcyB0aGUgRUxTIHRyYW5zbWl0IHF1ZXVlIHRvIHJlbW92ZSBhbGwgdGhlCisgKiBJT0NCcyB3aXRoIHRoZSBAdnBvcnQgb3RoZXIgdGhhbiB0aGUgUVVFX1JJTkcgYW5kIEFCT1JUL0NMT1NFIElPQ0JzLiBGb3IKKyAqIHRoZSBJT0NCcyB3aXRoIGEgbm9uLU5VTEwgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiwgdGhlIGNhbGxiYWNrCisgKiBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUgc3RhdHVzIHNldCB0byBJT1NUQVRfTE9DQUxfUkVKRUNUIGFuZAorICogdW4udWxwV29yZFs0XSBzZXQgdG8gSU9FUlJfU0xJX0FCT1JURUQuIEZvciBJT0NCcyB3aXRoIGEgTlVMTCBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiwgdGhlIElPQ0Igd2lsbCBzaW1wbHkgYmUgcmVsZWFzZWQuIEZpbmFsbHksIGl0IHdhbGtzCisgKiB0aGUgRUxTIHRyYW5zbWl0IGNvbXBsZXRpb24gcXVldWUgdG8gaXNzdWUgYW4gYWJvcnQgSU9DQiB0byBhbnkgdHJhbnNtaXQKKyAqIGNvbXBsZXRpb24gcXVldWUgSU9DQiB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgQHZwb3J0IGFuZCBpcyBub3QKKyAqIGFuIElPQ0IgZnJvbSBsaWJkZmMgKGkuZS4sIHRoZSBtYW5hZ2VtZW50IHBsYW5lIElPQ0JzIHRoYXQgYXJlIG5vdAorICogcGFydCBvZiB0aGUgZGlzY292ZXJ5IHN0YXRlIG1hY2hpbmUpIG91dCB0byBIQkEgYnkgaW52b2tpbmcgdGhlCisgKiBscGZjX3NsaV9pc3N1ZV9hYm9ydF9pb3RhZygpIHJvdXRpbmUuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzc3VlcyB0aGUKKyAqIGFib3J0IElPQ0IgdG8gYW55IHRyYW5zbWl0IGNvbXBsZXRpb24gcXVldWVlZCBJT0NCLCBpdCBkb2VzIG5vdCBndWFyYW50ZWUKKyAqIHRoZSBJT0NCcyBhcmUgYWJvcnRlZCB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KKyAqKi8KIHZvaWQKIGxwZmNfZWxzX2ZsdXNoX2NtZChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0zOTQ4LDYgKzUwMjQsMjMgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19lbHNfZmx1c2hfYWxsX2NtZDogQ2xlYW4gdXAgYWxsIHRoZSBvdXRzdGFuZGluZyBlbHMgY29tbWFuZHMgdG8gYSBIQkEuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBjbGVhbiB1cCBhbGwgdGhlIG91dHN0YW5kaW5nIEVMUyBjb21tYW5kcyBvbiBhCisgKiBAcGhiYS4gSXQgZmlyc3QgYWJvcnRzIHRoZSBAcGhiYSBieSBpbnZva2luZyB0aGUgbHBmY19mYWJyaWNfYWJvcnRfaGJhKCkKKyAqIHJvdXRpbmUuIEFmdGVyIHRoYXQsIGl0IHdhbGtzIHRoZSBFTFMgdHJhbnNtaXQgcXVldWUgdG8gcmVtb3ZlIGFsbCB0aGUKKyAqIElPQ0JzIHRvIHRoZSBAcGhiYSBvdGhlciB0aGFuIHRoZSBRVUVfUklORyBhbmQgQUJPUlQvQ0xPU0UgSU9DQnMuIEZvcgorICogdGhlIElPQ0JzIHdpdGggdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gYXNzb2NpYXRlZCwgdGhlIGNhbGxiYWNrCisgKiBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUgc3RhdHVzIHNldCB0byBJT1NUQVRfTE9DQUxfUkVKRUNUIGFuZAorICogdW4udWxwV29yZFs0XSBzZXQgdG8gSU9FUlJfU0xJX0FCT1JURUQuIEZvciBJT0NCcyB3aXRob3V0IHRoZSBjb21wbGV0aW9uCisgKiBjYWxsYmFjayBmdW5jdGlvbiBhc3NvY2lhdGVkLCB0aGUgSU9DQiB3aWxsIHNpbXBseSBiZSByZWxlYXNlZC4gRmluYWxseSwKKyAqIGl0IHdhbGtzIHRoZSBFTFMgdHJhbnNtaXQgY29tcGxldGlvbiBxdWV1ZSB0byBpc3N1ZSBhbiBhYm9ydCBJT0NCIHRvIGFueQorICogdHJhbnNtaXQgY29tcGxldGlvbiBxdWV1ZSBJT0NCIHRoYXQgaXMgbm90IGFuIElPQ0IgZnJvbSBsaWJkZmMgKGkuZS4sIHRoZQorICogbWFuYWdlbWVudCBwbGFuZSBJT0NCcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgZGlzY292ZXJ5IHN0YXRlIG1hY2hpbmUpCisgKiBvdXQgdG8gSEJBIGJ5IGludm9raW5nIHRoZSBscGZjX3NsaV9pc3N1ZV9hYm9ydF9pb3RhZygpIHJvdXRpbmUuCisgKiovCiB2b2lkCiBscGZjX2Vsc19mbHVzaF9hbGxfY21kKHN0cnVjdCBscGZjX2hiYSAgKnBoYmEpCiB7CkBAIC0zOTkyLDYgKzUwODUsMTMwIEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfc2VuZF9lbHNfZmFpbHVyZV9ldmVudDogUG9zdHMgYW4gRUxTIGNvbW1hbmQgZmFpbHVyZSBldmVudC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBjb250ZXh0IG9iamVjdC4KKyAqIEBjbWRpb2NicDogUG9pbnRlciB0byBjb21tYW5kIGlvY2Igd2hpY2ggcmVwb3J0ZWQgZXJyb3IuCisgKiBAcnNwaW9jYnA6IFBvaW50ZXIgdG8gcmVzcG9uc2UgaW9jYiB3aGljaCByZXBvcnRlZCBlcnJvci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGFuIGV2ZW50IHdoZW4gdGhlcmUgaXMgYW4gRUxTIGNvbW1hbmQKKyAqIGZhaWx1cmUuCisgKiovCit2b2lkCitscGZjX3NlbmRfZWxzX2ZhaWx1cmVfZXZlbnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JwLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JwKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IGNtZGlvY2JwLT52cG9ydDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CisJc3RydWN0IGxwZmNfbHNyanRfZXZlbnQgbHNyanRfZXZlbnQ7CisJc3RydWN0IGxwZmNfZmFicmljX2V2ZW50X2hlYWRlciBmYWJyaWNfZXZlbnQ7CisJc3RydWN0IGxzX3JqdCBzdGF0OworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXVpbnQzMl90ICpwY21kOworCisJbmRscCA9IGNtZGlvY2JwLT5jb250ZXh0MTsKKwlpZiAoIW5kbHAgfHwgIU5MUF9DSEtfTk9ERV9BQ1QobmRscCkpCisJCXJldHVybjsKKworCWlmIChyc3Bpb2NicC0+aW9jYi51bHBTdGF0dXMgPT0gSU9TVEFUX0xTX1JKVCkgeworCQlsc3JqdF9ldmVudC5oZWFkZXIuZXZlbnRfdHlwZSA9IEZDX1JFR19FTFNfRVZFTlQ7CisJCWxzcmp0X2V2ZW50LmhlYWRlci5zdWJjYXRlZ29yeSA9IExQRkNfRVZFTlRfTFNSSlRfUkNWOworCQltZW1jcHkobHNyanRfZXZlbnQuaGVhZGVyLnd3cG4sICZuZGxwLT5ubHBfcG9ydG5hbWUsCisJCQlzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCQltZW1jcHkobHNyanRfZXZlbnQuaGVhZGVyLnd3bm4sICZuZGxwLT5ubHBfbm9kZW5hbWUsCisJCQlzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCQlwY21kID0gKHVpbnQzMl90ICopICgoKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKQorCQkJY21kaW9jYnAtPmNvbnRleHQyKS0+dmlydCk7CisJCWxzcmp0X2V2ZW50LmNvbW1hbmQgPSAqcGNtZDsKKwkJc3RhdC51bi5sc1JqdEVycm9yID0gYmUzMl90b19jcHUocnNwaW9jYnAtPmlvY2IudW4udWxwV29yZFs0XSk7CisJCWxzcmp0X2V2ZW50LnJlYXNvbl9jb2RlID0gc3RhdC51bi5iLmxzUmp0UnNuQ29kZTsKKwkJbHNyanRfZXZlbnQuZXhwbGFuYXRpb24gPSBzdGF0LnVuLmIubHNSanRSc25Db2RlRXhwOworCQlmY19ob3N0X3Bvc3RfdmVuZG9yX2V2ZW50KHNob3N0LAorCQkJZmNfZ2V0X2V2ZW50X251bWJlcigpLAorCQkJc2l6ZW9mKGxzcmp0X2V2ZW50KSwKKwkJCShjaGFyICopJmxzcmp0X2V2ZW50LAorCQkJU0NTSV9OTF9WSURfVFlQRV9QQ0kgfCBQQ0lfVkVORE9SX0lEX0VNVUxFWCk7CisJCXJldHVybjsKKwl9CisJaWYgKChyc3Bpb2NicC0+aW9jYi51bHBTdGF0dXMgPT0gSU9TVEFUX05QT1JUX0JTWSkgfHwKKwkJKHJzcGlvY2JwLT5pb2NiLnVscFN0YXR1cyA9PSBJT1NUQVRfRkFCUklDX0JTWSkpIHsKKwkJZmFicmljX2V2ZW50LmV2ZW50X3R5cGUgPSBGQ19SRUdfRkFCUklDX0VWRU5UOworCQlpZiAocnNwaW9jYnAtPmlvY2IudWxwU3RhdHVzID09IElPU1RBVF9OUE9SVF9CU1kpCisJCQlmYWJyaWNfZXZlbnQuc3ViY2F0ZWdvcnkgPSBMUEZDX0VWRU5UX1BPUlRfQlVTWTsKKwkJZWxzZQorCQkJZmFicmljX2V2ZW50LnN1YmNhdGVnb3J5ID0gTFBGQ19FVkVOVF9GQUJSSUNfQlVTWTsKKwkJbWVtY3B5KGZhYnJpY19ldmVudC53d3BuLCAmbmRscC0+bmxwX3BvcnRuYW1lLAorCQkJc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwkJbWVtY3B5KGZhYnJpY19ldmVudC53d25uLCAmbmRscC0+bmxwX25vZGVuYW1lLAorCQkJc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwkJZmNfaG9zdF9wb3N0X3ZlbmRvcl9ldmVudChzaG9zdCwKKwkJCWZjX2dldF9ldmVudF9udW1iZXIoKSwKKwkJCXNpemVvZihmYWJyaWNfZXZlbnQpLAorCQkJKGNoYXIgKikmZmFicmljX2V2ZW50LAorCQkJU0NTSV9OTF9WSURfVFlQRV9QQ0kgfCBQQ0lfVkVORE9SX0lEX0VNVUxFWCk7CisJCXJldHVybjsKKwl9CisKK30KKworLyoqCisgKiBscGZjX3NlbmRfZWxzX2V2ZW50OiBQb3N0cyB1bnNvbGljaXRlZCBlbHMgZXZlbnQuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gdnBvcnQgb2JqZWN0LgorICogQG5kbHA6IFBvaW50ZXIgRkMgbm9kZSBvYmplY3QuCisgKiBAY21kOiBFTFMgY29tbWFuZCBjb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcG9zdHMgYW4gZXZlbnQgd2hlbiB0aGVyZSBpcyBhbiBpbmNvbWluZworICogdW5zb2xpY2l0ZWQgRUxTIGNvbW1hbmQuCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19zZW5kX2Vsc19ldmVudChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCisJCSAgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKKwkJICAgIHVpbnQzMl90IGNtZCkKK3sKKwlzdHJ1Y3QgbHBmY19lbHNfZXZlbnRfaGVhZGVyIGVsc19kYXRhOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKKworCWVsc19kYXRhLmV2ZW50X3R5cGUgPSBGQ19SRUdfRUxTX0VWRU5UOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBFTFNfQ01EX1BMT0dJOgorCQllbHNfZGF0YS5zdWJjYXRlZ29yeSA9IExQRkNfRVZFTlRfUExPR0lfUkNWOworCQlicmVhazsKKwljYXNlIEVMU19DTURfUFJMTzoKKwkJZWxzX2RhdGEuc3ViY2F0ZWdvcnkgPSBMUEZDX0VWRU5UX1BSTE9fUkNWOworCQlicmVhazsKKwljYXNlIEVMU19DTURfQURJU0M6CisJCWVsc19kYXRhLnN1YmNhdGVnb3J5ID0gTFBGQ19FVkVOVF9BRElTQ19SQ1Y7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJbWVtY3B5KGVsc19kYXRhLnd3cG4sICZuZGxwLT5ubHBfcG9ydG5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJbWVtY3B5KGVsc19kYXRhLnd3bm4sICZuZGxwLT5ubHBfbm9kZW5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJZmNfaG9zdF9wb3N0X3ZlbmRvcl9ldmVudChzaG9zdCwKKwkJZmNfZ2V0X2V2ZW50X251bWJlcigpLAorCQlzaXplb2YoZWxzX2RhdGEpLAorCQkoY2hhciAqKSZlbHNfZGF0YSwKKwkJU0NTSV9OTF9WSURfVFlQRV9QQ0kgfCBQQ0lfVkVORE9SX0lEX0VNVUxFWCk7CisKKwlyZXR1cm47Cit9CisKKworLyoqCisgKiBscGZjX2Vsc191bnNvbF9idWZmZXI6IFByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgZXZlbnQgZGF0YSBidWZmZXIuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwcmluZzogcG9pbnRlciB0byBhIFNMSSByaW5nLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgaG9zdCB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqIEBlbHNpb2NiOiBwb2ludGVyIHRvIGxwZmMgZWxzIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgcHJvY2Vzc2luZyB0aGUgSU9DQiBhc3NvY2lhdGVkIHdpdGggYSB1bnNvbGljaXRlZAorICogZXZlbnQuIEl0IGZpcnN0IGRldGVybWluZXMgd2hldGhlciB0aGVyZSBpcyBhbiBleGlzdGluZyBuZGxwIHRoYXQgbWF0Y2hlcworICogdGhlIERJRCBmcm9tIHRoZSB1bnNvbGljaXRlZCBJT0NCLiBJZiBub3QsIGl0IHdpbGwgY3JlYXRlIGEgbmV3IG9uZSB3aXRoCisgKiB0aGUgRElEIGZyb20gdGhlIHVuc29saWNpdGVkIElPQ0IuIFRoZSBFTFMgY29tbWFuZCBmcm9tIHRoZSB1bnNvbGljaXRlZAorICogSU9DQiBpcyB0aGVuIHVzZWQgdG8gaW52b2tlIHRoZSBwcm9wZXIgcm91dGluZSBhbmQgdG8gc2V0IHVwIHByb3BlciBzdGF0ZQorICogb2YgdGhlIGRpc2NvdmVyeSBzdGF0ZSBtYWNoaW5lLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfZWxzX3Vuc29sX2J1ZmZlcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJICAgICAgc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19pb2NicSAqZWxzaW9jYikKQEAgLTQwNTksOCArNTI3Niw2IEBACiAJfQogCiAJcGhiYS0+ZmNfc3RhdC5lbHNSY3ZGcmFtZSsrOwotCWlmIChlbHNpb2NiLT5jb250ZXh0MSkKLQkJbHBmY19ubHBfcHV0KGVsc2lvY2ItPmNvbnRleHQxKTsKIAogCWVsc2lvY2ItPmNvbnRleHQxID0gbHBmY19ubHBfZ2V0KG5kbHApOwogCWVsc2lvY2ItPnZwb3J0ID0gdnBvcnQ7CkBAIC00MDgxLDYgKzUyOTYsNyBAQAogCQlwaGJhLT5mY19zdGF0LmVsc1JjdlBMT0dJKys7CiAJCW5kbHAgPSBscGZjX3Bsb2dpX2NvbmZpcm1fbnBvcnQocGhiYSwgcGF5bG9hZCwgbmRscCk7CiAKKwkJbHBmY19zZW5kX2Vsc19ldmVudCh2cG9ydCwgbmRscCwgY21kKTsKIAkJaWYgKHZwb3J0LT5wb3J0X3N0YXRlIDwgTFBGQ19ESVNDX0FVVEgpIHsKIAkJCWlmICghKHBoYmEtPnBwb3J0LT5mY19mbGFnICYgRkNfUFQyUFQpIHx8CiAJCQkJKHBoYmEtPnBwb3J0LT5mY19mbGFnICYgRkNfUFQyUFRfUExPR0kpKSB7CkBAIC00MTMwLDYgKzUzNDYsNyBAQAogCQkJZGlkLCB2cG9ydC0+cG9ydF9zdGF0ZSwgbmRscC0+bmxwX2ZsYWcpOwogCiAJCXBoYmEtPmZjX3N0YXQuZWxzUmN2UFJMTysrOworCQlscGZjX3NlbmRfZWxzX2V2ZW50KHZwb3J0LCBuZGxwLCBjbWQpOwogCQlpZiAodnBvcnQtPnBvcnRfc3RhdGUgPCBMUEZDX0RJU0NfQVVUSCkgewogCQkJcmp0X2VyciA9IExTUkpUX1VOQUJMRV9UUEM7CiAJCQlicmVhazsKQEAgLTQxNDcsNiArNTM2NCw3IEBACiAJCQkiUkNWIEFESVNDOiAgICAgICBkaWQ6eCV4L3N0ZTp4JXggZmxnOngleCIsCiAJCQlkaWQsIHZwb3J0LT5wb3J0X3N0YXRlLCBuZGxwLT5ubHBfZmxhZyk7CiAKKwkJbHBmY19zZW5kX2Vsc19ldmVudCh2cG9ydCwgbmRscCwgY21kKTsKIAkJcGhiYS0+ZmNfc3RhdC5lbHNSY3ZBRElTQysrOwogCQlpZiAodnBvcnQtPnBvcnRfc3RhdGUgPCBMUEZDX0RJU0NfQVVUSCkgewogCQkJcmp0X2VyciA9IExTUkpUX1VOQUJMRV9UUEM7CkBAIC00MjcwLDYgKzU0ODgsOCBAQAogCQkJTlVMTCk7CiAJfQogCisJbHBmY19ubHBfcHV0KGVsc2lvY2ItPmNvbnRleHQxKTsKKwllbHNpb2NiLT5jb250ZXh0MSA9IE5VTEw7CiAJcmV0dXJuOwogCiBkcm9waXQ6CkBAIC00MjgyLDYgKzU1MDIsMTkgQEAKIAlwaGJhLT5mY19zdGF0LmVsc1JjdkRyb3ArKzsKIH0KIAorLyoqCisgKiBscGZjX2ZpbmRfdnBvcnRfYnlfdnBpZDogRmluZCBhIHZwb3J0IG9uIGEgSEJBIHRocm91Z2ggdnBvcnQgaWRlbnRpZmllci4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHZwaTogaG9zdCB2aXJ0dWFsIE5fUG9ydCBpZGVudGlmaWVyLgorICoKKyAqIFRoaXMgcm91dGluZSBmaW5kcyBhIHZwb3J0IG9uIGEgSEJBIChyZWZlcnJlZCBieSBAcGhiYSkgdGhyb3VnaCBhCisgKiBAdnBpLiBUaGUgZnVuY3Rpb24gd2Fsa3MgdGhlIEhCQSdzIHZwb3J0IGxpc3QgYW5kIHJldHVybnMgdGhlIGFkZHJlc3MKKyAqIG9mIHRoZSB2cG9ydCB3aXRoIHRoZSBtYXRjaGluZyBAdnBpLgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgICBOVUxMIC0gTm8gdnBvcnQgd2l0aCB0aGUgbWF0Y2hpbmcgQHZwaSBmb3VuZAorICogICAgT3RoZXJ3aXNlIC0gQWRkcmVzcyB0byB0aGUgdnBvcnQgd2l0aCB0aGUgbWF0Y2hpbmcgQHZwaS4KKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY192cG9ydCAqCiBscGZjX2ZpbmRfdnBvcnRfYnlfdnBpZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90IHZwaSkKIHsKQEAgLTQyOTksNiArNTUzMiwxOCBAQAogCXJldHVybiBOVUxMOwogfQogCisvKioKKyAqIGxwZmNfZWxzX3Vuc29sX2V2ZW50OiBQcm9jZXNzIGFuIHVuc29saWNpdGVkIGV2ZW50IGZyb20gYW4gZWxzIHNsaSByaW5nLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcHJpbmc6IHBvaW50ZXIgdG8gYSBTTEkgcmluZy4KKyAqIEBlbHNpb2NiOiBwb2ludGVyIHRvIGxwZmMgZWxzIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gcHJvY2VzcyBhbiB1bnNvbGljaXRlZCBldmVudCByZWNlaXZlZCBmcm9tIGEgU0xJCisgKiAoU2VydmljZSBMZXZlbCBJbnRlcmZhY2UpIHJpbmcuIFRoZSBhY3R1YWwgcHJvY2Vzc2luZyBvZiB0aGUgZGF0YSBidWZmZXIKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5zb2xpY2l0ZWQgZXZlbnQgaXMgZG9uZSBieSBpbnZva2luZyB0aGUgcm91dGluZQorICogbHBmY19lbHNfdW5zb2xfYnVmZmVyKCkgYWZ0ZXIgcHJvcGVybHkgc2V0IHVwIHRoZSBpb2NiIGJ1ZmZlciBmcm9tIHRoZQorICogU0xJIHJpbmcgb24gd2hpY2ggdGhlIHVuc29saWNpdGVkIGV2ZW50IHdhcyByZWNlaXZlZC4KKyAqKi8KIHZvaWQKIGxwZmNfZWxzX3Vuc29sX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkgICAgIHN0cnVjdCBscGZjX2lvY2JxICplbHNpb2NiKQpAQCAtNDMwOSw2ICs1NTU0LDcgQEAKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmJkZUJ1ZjEgPSBlbHNpb2NiLT5jb250ZXh0MjsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmJkZUJ1ZjIgPSBlbHNpb2NiLT5jb250ZXh0MzsKIAorCWVsc2lvY2ItPmNvbnRleHQxID0gTlVMTDsKIAllbHNpb2NiLT5jb250ZXh0MiA9IE5VTEw7CiAJZWxzaW9jYi0+Y29udGV4dDMgPSBOVUxMOwogCkBAIC00MzU2LDggKzU2MDIsNiBAQAogCSAqIFRoZSBkaWZmZXJlbnQgdW5zb2xpY2l0ZWQgZXZlbnQgaGFuZGxlcnMgd291bGQgdGVsbCB1cwogCSAqIGlmIHRoZXkgYXJlIGRvbmUgd2l0aCAibXAiIGJ5IHNldHRpbmcgY29udGV4dDIgdG8gTlVMTC4KIAkgKi8KLQlscGZjX25scF9wdXQoZWxzaW9jYi0+Y29udGV4dDEpOwotCWVsc2lvY2ItPmNvbnRleHQxID0gTlVMTDsKIAlpZiAoZWxzaW9jYi0+Y29udGV4dDIpIHsKIAkJbHBmY19pbl9idWZfZnJlZShwaGJhLCAoc3RydWN0IGxwZmNfZG1hYnVmICopZWxzaW9jYi0+Y29udGV4dDIpOwogCQllbHNpb2NiLT5jb250ZXh0MiA9IE5VTEw7CkBAIC00Mzc2LDYgKzU2MjAsMTkgQEAKIAl9CiB9CiAKKy8qKgorICogbHBmY19kb19zY3JfbnNfcGxvZ2k6IElzc3VlIGEgcGxvZ2kgdG8gdGhlIG5hbWUgc2VydmVyIGZvciBzY3IuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgYSBQb3J0IExvZ2luIChQTE9HSSkgdG8gdGhlIE5hbWUgU2VydmVyIHdpdGgKKyAqIFN0YXRlIENoYW5nZSBSZXF1ZXN0IChTQ1IpIGZvciBhIEB2cG9ydC4gVGhpcyByb3V0aW5lIHdpbGwgY3JlYXRlIGFuCisgKiBuZGxwIGZvciB0aGUgTmFtZSBTZXJ2ZXIgYXNzb2NpYXRlZCB0byB0aGUgQHZwb3J0IGlmIHN1Y2ggbm9kZSBkb2VzCisgKiBub3QgYWxyZWFkeSBleGlzdC4gVGhlIFBMT0dJIHRvIE5hbWUgU2VydmVyIGlzIGlzc3VlZCBieSBpbnZva2luZyB0aGUKKyAqIGxwZmNfaXNzdWVfZWxzX3Bsb2dpKCkgcm91dGluZS4gSWYgRmFicmljLURldmljZSBNYW5hZ2VtZW50IEludGVyZmFjZQorICogKEZETUkpIGlzIGNvbmZpZ3VyZWQgdG8gdGhlIEB2cG9ydCwgYSBGRE1JIG5vZGUgd2lsbCBiZSBjcmVhdGVkIGFuZAorICogdGhlIFBMT0dJIHRvIEZETUkgaXMgaXNzdWVkIGJ5IGludm9raW5nIGxwZmNfaXNzdWVfZWxzX3Bsb2dpKCkgcm91dGluZS4KKyAqKi8KIHZvaWQKIGxwZmNfZG9fc2NyX25zX3Bsb2dpKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtNDQzNCw2ICs1NjkxLDE4IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfY21wbF9yZWdfbmV3X3Zwb3J0OiBDb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIG5ldyB2cG9ydC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgbmV3IHZwb3J0CisgKiBtYWlsYm94IGNvbW1hbmQuIElmIHRoZSBuZXcgdnBvcnQgbWFpbGJveCBjb21tYW5kIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksCisgKiB0aGUgZmFicmljIHJlZ2lzdHJhdGlvbiBsb2dpbiBzaGFsbCBiZSBwZXJmb3JtZWQgb24gcGh5c2ljYWwgcG9ydCAodGhlCisgKiBuZXcgdnBvcnQgY3JlYXRlZCBpcyBhY3R1YWxseSBhIHBoeXNpY2FsIHBvcnQsIHdpdGggVlBJIDApIG9yIHRoZSBwb3J0CisgKiBsb2dpbiB0byBOYW1lIFNlcnZlciBmb3IgU3RhdGUgQ2hhbmdlIFJlcXVlc3QgKFNDUikgd2lsbCBiZSBwZXJmb3JtZWQKKyAqIG9uIHZpcnR1YWwgcG9ydCAocmVhbCB2aXJ0dWFsIHBvcnQsIHdpdGggVlBJIGdyZWF0ZXIgdGhhbiAwKS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NtcGxfcmVnX25ld192cG9ydChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1iKQogewpAQCAtNDQ5MSw2ICs1NzYwLDE1IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfcmVnaXN0ZXJfbmV3X3Zwb3J0OiBSZWdpc3RlciBhIG5ldyB2cG9ydCB3aXRoIGEgSEJBLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSBob3N0IHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHJlZ2lzdGVycyB0aGUgQHZwb3J0IGFzIGEgbmV3IHZpcnR1YWwgcG9ydCB3aXRoIGEgSEJBLgorICogSXQgaXMgZG9uZSB0aHJvdWdoIGEgcmVnaXN0ZXJpbmcgdnBpIG1haWxib3ggY29tbWFuZC4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3JlZ2lzdGVyX25ld192cG9ydChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwKIAkJCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQpAQCAtNDUzMSw2ICs1ODA5LDI2IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfY21wbF9lbHNfZmRpc2M6IENvbXBsZXRpb24gZnVuY3Rpb24gZm9yIGZkaXNjIGlvY2IgY29tbWFuZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBscGZjIHJlc3BvbnNlIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGEgRmFicmljIERpc2NvdmVyCisgKiAoRkRJU0MpIEVMUyBjb21tYW5kLiBTaW5jZSBhbGwgdGhlIEZESVNDIEVMUyBjb21tYW5kcyBhcmUgaXNzdWVkCisgKiBzaW5nbGUgdGhyZWFkZWQsIGVhY2ggRkRJU0MgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIHJlc2V0CisgKiB0aGUgZGlzY292ZXJ5IHRpbWVyIGZvciBhbGwgdnBvcnRzIHN1Y2ggdGhhdCB0aGUgdGltZXJzIHdpbGwgbm90IGdldAorICogdW5uZWNlc3NhcnkgdGltZW91dC4gVGhlIGZ1bmN0aW9uIGNoZWNrcyB0aGUgRkRJU0MgSU9DQiBzdGF0dXMuIElmIGVycm9yCisgKiBkZXRlY3RlZCwgdGhlIHZwb3J0IHdpbGwgYmUgc2V0IHRvIEZDX1ZQT1JUX0ZBSUxFRCBzdGF0ZS4gT3RoZXJ3aXNlLHRoZQorICogdnBvcnQgd2lsbCBzZXQgdG8gRkNfVlBPUlRfQUNUSVZFIHN0YXRlLiBJdCB0aGVuIGNoZWNrcyB3aGV0aGVyIHRoZSBESUQKKyAqIGFzc2lnbmVkIHRvIHRoZSB2cG9ydCBoYXMgYmVlbiBjaGFuZ2VkIHdpdGggdGhlIGNvbXBsZXRpb24gb2YgdGhlIEZESVNDCisgKiBjb21tYW5kLiBJZiBzbywgYm90aCBSUEkgKFJlbW90ZSBQb3J0IEluZGV4KSBhbmQgVlBJIChWaXJ0dWFsIFBvcnQgSW5kZXgpCisgKiBhcmUgdW5yZWdpc3RlcmVkIGZyb20gdGhlIEhCQSwgYW5kIHRoZW4gdGhlIGxwZmNfcmVnaXN0ZXJfbmV3X3Zwb3J0KCkKKyAqIHJvdXRpbmUgaXMgaW52b2tlZCB0byByZWdpc3RlciBuZXcgdnBvcnQgd2l0aCB0aGUgSEJBLiBPdGhlcndpc2UsIHRoZQorICogbHBmY19kb19zY3JfbnNfcGxvZ2koKSByb3V0aW5lIGlzIGludm9rZWQgdG8gaXNzdWUgYSBQTE9HSSB0byB0aGUgTmFtZQorICogU2VydmVyIGZvciBTdGF0ZSBDaGFuZ2UgUmVxdWVzdCAoU0NSKS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2NtcGxfZWxzX2ZkaXNjKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKQEAgLTQ1NjUsNTggKzU4NjMsODAgQEAKIAkJCWdvdG8gb3V0OwogCQkvKiBGRElTQyBmYWlsZWQgKi8KIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19FTFMsCi0JCQkJICIwMTI0IEZESVNDIGZhaWxlZC4gKCVkLyVkKVxuIiwKKwkJCQkgIjAxMjYgRkRJU0MgZmFpbGVkLiAoJWQvJWQpXG4iLAogCQkJCSBpcnNwLT51bHBTdGF0dXMsIGlyc3AtPnVuLnVscFdvcmRbNF0pOworCQlnb3RvIGZkaXNjX2ZhaWxlZDsKKwl9CiAJCWlmICh2cG9ydC0+ZmNfdnBvcnQtPnZwb3J0X3N0YXRlID09IEZDX1ZQT1JUX0lOSVRJQUxJWklORykKIAkJCWxwZmNfdnBvcnRfc2V0X3N0YXRlKHZwb3J0LCBGQ19WUE9SVF9GQUlMRUQpOwogCQlscGZjX25scF9wdXQobmRscCk7CiAJCS8qIGdpdmluZyB1cCBvbiBGRElTQy4gQ2FuY2VsIGRpc2NvdmVyeSB0aW1lciAqLwogCQlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKLQl9IGVsc2UgewotCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19GQUJSSUM7Ci0JCWlmICh2cG9ydC0+cGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkKLQkJCXZwb3J0LT5mY19mbGFnIHw9ICBGQ19QVUJMSUNfTE9PUDsKLQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfRkFCUklDOworCWlmICh2cG9ydC0+cGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkKKwkJdnBvcnQtPmZjX2ZsYWcgfD0gIEZDX1BVQkxJQ19MT09QOworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAotCQl2cG9ydC0+ZmNfbXlESUQgPSBpcnNwLT51bi51bHBXb3JkWzRdICYgTWFza19ESUQ7Ci0JCWxwZmNfdnBvcnRfc2V0X3N0YXRlKHZwb3J0LCBGQ19WUE9SVF9BQ1RJVkUpOwotCQlpZiAoKHZwb3J0LT5mY19wcmV2RElEICE9IHZwb3J0LT5mY19teURJRCkgJiYKLQkJCSEodnBvcnQtPmZjX2ZsYWcgJiBGQ19WUE9SVF9ORUVEU19SRUdfVlBJKSkgewotCQkJLyogSWYgb3VyIE5wb3J0SUQgY2hhbmdlZCwgd2UgbmVlZCB0byBlbnN1cmUgYWxsCi0JCQkgKiByZW1haW5pbmcgTlBPUlRzIGdldCB1bnJlZ19sb2dpbidlZCBzbyB3ZSBjYW4KLQkJCSAqIGlzc3VlIHVucmVnX3ZwaS4KLQkJCSAqLwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5wLCBuZXh0X25wLAotCQkJCSZ2cG9ydC0+ZmNfbm9kZXMsIG5scF9saXN0cCkgewotCQkJCWlmICghTkxQX0NIS19OT0RFX0FDVChuZGxwKSB8fAotCQkJCSAgICAobnAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX05QUl9OT0RFKSB8fAotCQkJCSAgICAhKG5wLT5ubHBfZmxhZyAmIE5MUF9OUFJfQURJU0MpKQotCQkJCQljb250aW51ZTsKLQkJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQkJCW5wLT5ubHBfZmxhZyAmPSB+TkxQX05QUl9BRElTQzsKLQkJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JCQkJbHBmY191bnJlZ19ycGkodnBvcnQsIG5wKTsKLQkJCX0KLQkJCWxwZmNfbWJ4X3VucmVnX3ZwaSh2cG9ydCk7CisJdnBvcnQtPmZjX215RElEID0gaXJzcC0+dW4udWxwV29yZFs0XSAmIE1hc2tfRElEOworCWxwZmNfdnBvcnRfc2V0X3N0YXRlKHZwb3J0LCBGQ19WUE9SVF9BQ1RJVkUpOworCWlmICgodnBvcnQtPmZjX3ByZXZESUQgIT0gdnBvcnQtPmZjX215RElEKSAmJgorCQkhKHZwb3J0LT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSSkpIHsKKwkJLyogSWYgb3VyIE5wb3J0SUQgY2hhbmdlZCwgd2UgbmVlZCB0byBlbnN1cmUgYWxsCisJCSAqIHJlbWFpbmluZyBOUE9SVHMgZ2V0IHVucmVnX2xvZ2luJ2VkIHNvIHdlIGNhbgorCQkgKiBpc3N1ZSB1bnJlZ192cGkuCisJCSAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobnAsIG5leHRfbnAsCisJCQkmdnBvcnQtPmZjX25vZGVzLCBubHBfbGlzdHApIHsKKwkJCWlmICghTkxQX0NIS19OT0RFX0FDVChuZGxwKSB8fAorCQkJICAgIChucC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfTlBSX05PREUpIHx8CisJCQkgICAgIShucC0+bmxwX2ZsYWcgJiBOTFBfTlBSX0FESVNDKSkKKwkJCQljb250aW51ZTsKIAkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOworCQkJbnAtPm5scF9mbGFnICY9IH5OTFBfTlBSX0FESVNDOwogCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJbHBmY191bnJlZ19ycGkodnBvcnQsIG5wKTsKIAkJfQotCi0JCWlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZQT1JUX05FRURTX1JFR19WUEkpCi0JCQlscGZjX3JlZ2lzdGVyX25ld192cG9ydChwaGJhLCB2cG9ydCwgbmRscCk7Ci0JCWVsc2UKLQkJCWxwZmNfZG9fc2NyX25zX3Bsb2dpKHBoYmEsIHZwb3J0KTsKLQotCQkvKiBVbmNvbmRpdGlvbmFseSBraWNrIG9mZiByZWxlYXNpbmcgZmFicmljIG5vZGUgZm9yIHZwb3J0cyAqLwotCQlscGZjX25scF9wdXQobmRscCk7CisJCWxwZmNfbWJ4X3VucmVnX3ZwaSh2cG9ydCk7CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl9CiAKKwlpZiAodnBvcnQtPmZjX2ZsYWcgJiBGQ19WUE9SVF9ORUVEU19SRUdfVlBJKQorCQlscGZjX3JlZ2lzdGVyX25ld192cG9ydChwaGJhLCB2cG9ydCwgbmRscCk7CisJZWxzZQorCQlscGZjX2RvX3Njcl9uc19wbG9naShwaGJhLCB2cG9ydCk7CisJZ290byBvdXQ7CitmZGlzY19mYWlsZWQ6CisJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX0ZBSUxFRCk7CisJLyogQ2FuY2VsIGRpc2NvdmVyeSB0aW1lciAqLworCWxwZmNfY2FuX2Rpc2N0bW8odnBvcnQpOworCWxwZmNfbmxwX3B1dChuZGxwKTsKIG91dDoKIAlscGZjX2Vsc19mcmVlX2lvY2IocGhiYSwgY21kaW9jYik7CiB9CiAKKy8qKgorICogbHBmY19pc3N1ZV9lbHNfZmRpc2M6IElzc3VlIGEgZmRpc2MgaW9jYiBjb21tYW5kLgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqIEByZXRyeTogbnVtYmVyIG9mIHJldHJpZXMgdG8gdGhlIGNvbW1hbmQgSU9DQi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgYW5kIGlzc3VlcyBhIEZhYnJpYyBEaXNjb3ZlciAoRkRJU0MpIElPQ0IgdG8KKyAqIGEgcmVtb3RlIG5vZGUgKEBuZGxwKSBvZmYgYSBAdnBvcnQuIEl0IHVzZXMgdGhlIGxwZmNfaXNzdWVfZmFicmljX2lvY2IoKQorICogcm91dGluZSB0byBpc3N1ZSB0aGUgSU9DQiwgd2hpY2ggbWFrZXMgc3VyZSBvbmx5IG9uZSBvdXRzdGFuZGluZyBmYWJyaWMKKyAqIElPQ0Igd2lsbCBiZSBzZW50IG9mZiBIQkEgYXQgYW55IGdpdmVuIHRpbWUuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBGRElTQyBFTFMgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gY29kZQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IGlzc3VlZCBmZGlzYyBpb2NiIGNvbW1hbmQKKyAqICAgMSAtIEZhaWxlZCB0byBpc3N1ZSBmZGlzYyBpb2NiIGNvbW1hbmQKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfaXNzdWVfZWxzX2ZkaXNjKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCiAJCSAgICAgdWludDhfdCByZXRyeSkKQEAgLTQ2OTEsNiArNjAxMSwyMCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfY21wbF9lbHNfbnBpdl9sb2dvOiBDb21wbGV0aW9uIGZ1bmN0aW9uIHdpdGggdnBvcnQgbG9nby4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gbHBmYyBjb21tYW5kIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcnNwaW9jYjogcG9pbnRlciB0byBscGZjIHJlc3BvbnNlIGlvY2IgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBpc3N1aW5nIG9mIGEgTE9HTworICogRUxTIGNvbW1hbmQgb2ZmIGEgdnBvcnQuIEl0IGZyZWVzIHRoZSBjb21tYW5kIElPQ0IgYW5kIHRoZW4gZGVjcmVtZW50IHRoZQorICogcmVmZXJlbmNlIGNvdW50IGhlbGQgb24gbmRscCBmb3IgdGhpcyBjb21wbGV0aW9uIGZ1bmN0aW9uLCBpbmRpY2F0aW5nIHRoYXQKKyAqIHRoZSByZWZlcmVuY2UgdG8gdGhlIG5kbHAgaXMgbm8gbG9uZyBuZWVkZWQuIE5vdGUgdGhhdCB0aGUKKyAqIGxwZmNfZWxzX2ZyZWVfaW9jYigpIHJvdXRpbmUgZGVjcmVtZW50cyB0aGUgbmRscCByZWZlcmVuY2UgaGVsZCBmb3IgdGhpcworICogY2FsbGJhY2sgZnVuY3Rpb24gYW5kIGFuIGFkZGl0aW9uYWwgZXhwbGljaXQgbmRscCByZWZlcmVuY2UgZGVjcmVtZW50YXRpb24KKyAqIHdpbGwgdHJpZ2dlciB0aGUgYWN0dWFsIHJlbGVhc2Ugb2YgdGhlIG5kbHAuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jbXBsX2Vsc19ucGl2X2xvZ28oc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtNDcxMiw2ICs2MDQ2LDIyIEBACiAJbHBmY19ubHBfcHV0KG5kbHApOwogfQogCisvKioKKyAqIGxwZmNfaXNzdWVfZWxzX25waXZfbG9nbzogSXNzdWUgYSBsb2dvIG9mZiBhIHZwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGEgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAbmRscDogcG9pbnRlciB0byBhIG5vZGUtbGlzdCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXNzdWVzIGEgTE9HTyBFTFMgY29tbWFuZCB0byBhbiBAbmRscCBvZmYgYSBAdnBvcnQuCisgKgorICogTm90ZSB0aGF0LCBpbiBscGZjX3ByZXBfZWxzX2lvY2IoKSByb3V0aW5lLCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIG5kbHAKKyAqIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgMSBmb3IgaG9sZGluZyB0aGUgbmRscCBhbmQgdGhlIHJlZmVyZW5jZSB0byBuZGxwCisgKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBjb250ZXh0MSBmaWVsZCBvZiB0aGUgSU9DQiBmb3IgdGhlIGNvbXBsZXRpb24KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBMT0dPIEVMUyBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAwIC0gU3VjY2Vzc2Z1bGx5IGlzc3VlZCBsb2dvIG9mZiB0aGUgQHZwb3J0CisgKiAgIDEgLSBGYWlsZWQgdG8gaXNzdWUgbG9nbyBvZmYgdGhlIEB2cG9ydAorICoqLwogaW50CiBscGZjX2lzc3VlX2Vsc19ucGl2X2xvZ28oc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKIHsKQEAgLTQ3NTcsNiArNjEwNywxNyBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfZmFicmljX2Jsb2NrX3RpbWVvdXQ6IEhhbmRsZXIgZnVuY3Rpb24gdG8gdGhlIGZhYnJpYyBibG9jayB0aW1lci4KKyAqIEBwdHI6IGhvbGRlciBmb3IgdGhlIHRpbWVyIGZ1bmN0aW9uIGFzc29jaWF0ZWQgZGF0YS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCBieSB0aGUgZmFicmljIGlvY2IgYmxvY2sgdGltZXIgYWZ0ZXIKKyAqIHRpbWVvdXQuIEl0IHBvc3RzIHRoZSBmYWJyaWMgaW9jYiBibG9jayB0aW1lb3V0IGV2ZW50IGJ5IHNldHRpbmcgdGhlCisgKiBXT1JLRVJfRkFCUklDX0JMT0NLX1RNTyBiaXQgdG8gd29yayBwb3J0IGV2ZW50IGJpdG1hcCBhbmQgdGhlbiBpbnZva2VzCisgKiBscGZjX3dvcmtlcl93YWtlX3VwKCkgcm91dGluZSB0byB3YWtlIHVwIHRoZSB3b3JrZXIgdGhyZWFkLiBJdCBpcyBmb3IKKyAqIHRoZSB3b3JrZXIgdGhyZWFkIHRvIGludm9rZSB0aGUgbHBmY191bmJsb2NrX2ZhYnJpY19pb2NicygpIG9uIHRoZQorICogcG9zdGVkIGV2ZW50IFdPUktFUl9GQUJSSUNfQkxPQ0tfVE1PLgorICoqLwogdm9pZAogbHBmY19mYWJyaWNfYmxvY2tfdGltZW91dCh1bnNpZ25lZCBsb25nIHB0cikKIHsKQEAgLTQ3NzUsNiArNjEzNiwxNiBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX3Jlc3VtZV9mYWJyaWNfaW9jYnM6IElzc3VlIGEgZmFicmljIGlvY2IgZnJvbSBkcml2ZXIgaW50ZXJuYWwgbGlzdC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpc3N1ZXMgb25lIGZhYnJpYyBpb2NiIGZyb20gdGhlIGRyaXZlciBpbnRlcm5hbCBsaXN0IHRvCisgKiB0aGUgSEJBLiBJdCBmaXJzdCBjaGVja3Mgd2hldGhlciBpdCdzIHJlYWR5IHRvIGlzc3VlIG9uZSBmYWJyaWMgaW9jYiB0bworICogdGhlIEhCQSAod2hldGhlciB0aGVyZSBpcyBubyBvdXRzdGFuZGluZyBmYWJyaWMgaW9jYikuIElmIHNvLCBpdCBzaGFsbAorICogcmVtb3ZlIG9uZSBwZW5kaW5nIGZhYnJpYyBpb2NiIGZyb20gdGhlIGRyaXZlciBpbnRlcm5hbCBsaXN0IGFuZCBpbnZva2VzCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiKCkgcm91dGluZSB0byBzZW5kIHRoZSBmYWJyaWMgaW9jYiB0byB0aGUgSEJBLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfcmVzdW1lX2ZhYnJpY19pb2NicyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC00ODI0LDYgKzYxOTUsMTUgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY191bmJsb2NrX2ZhYnJpY19pb2NiczogVW5ibG9jayBpc3N1aW5nIGZhYnJpYyBpb2NiIGNvbW1hbmQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgdW5ibG9ja3MgdGhlICBpc3N1aW5nIGZhYnJpYyBpb2NiIGNvbW1hbmQuIFRoZSBmdW5jdGlvbgorICogd2lsbCBjbGVhciB0aGUgZmFicmljIGlvY2IgYmxvY2sgYml0IGFuZCB0aGVuIGludm9rZSB0aGUgcm91dGluZQorICogbHBmY19yZXN1bWVfZmFicmljX2lvY2JzKCkgdG8gaXNzdWUgb25lIG9mIHRoZSBwZW5kaW5nIGZhYnJpYyBpb2NiCisgKiBmcm9tIHRoZSBkcml2ZXIgaW50ZXJuYWwgZmFicmljIGlvY2IgbGlzdC4KKyAqKi8KIHZvaWQKIGxwZmNfdW5ibG9ja19mYWJyaWNfaW9jYnMoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtNDgzMyw2ICs2MjEzLDE1IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfYmxvY2tfZmFicmljX2lvY2JzOiBCbG9jayBpc3N1aW5nIGZhYnJpYyBpb2NiIGNvbW1hbmQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYmxvY2tzIHRoZSBpc3N1aW5nIGZhYnJpYyBpb2NiIGZvciBhIHNwZWNpZmllZCBhbW91bnQgb2YKKyAqIHRpbWUgKGN1cnJlbnRseSAxMDAgbXMpLiBUaGlzIGlzIGRvbmUgYnkgc2V0IHRoZSBmYWJyaWMgaW9jYiBibG9jayBiaXQKKyAqIGFuZCBzZXQgdXAgYSB0aW1lb3V0IHRpbWVyIGZvciAxMDBtcy4gV2hlbiB0aGUgYmxvY2sgYml0IGlzIHNldCwgbm8gbW9yZQorICogZmFicmljIGlvY2Igd2lsbCBiZSBpc3N1ZWQgb3V0IG9mIHRoZSBIQkEuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19ibG9ja19mYWJyaWNfaW9jYnMoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtNDg0Niw2ICs2MjM1LDE5IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfY21wbF9mYWJyaWNfaW9jYjogQ29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZmFicmljIGlvY2IuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gbHBmYyByZXNwb25zZSBpb2NiIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBwdXQgdG8gdGhlIGZhYnJpYyBpb2NiJ3MKKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgKGlvY2ItPmlvY2JfY21wbCkuIFRoZSBvcmlnaW5hbCBpb2NiJ3MgY2FsbGJhY2sKKyAqIGZ1bmN0aW9uIHBvaW50ZXIgaGFzIGJlZW4gc3RvcmVkIGluIGlvY2ItPmZhYnJpY19pb2NiX2NtcGwuIFRoaXMgY2FsbGJhY2sKKyAqIGZ1bmN0aW9uIGZpcnN0IHJlc3RvcmVzIGFuZCBpbnZva2VzIHRoZSBvcmlnaW5hbCBpb2NiJ3MgY2FsbGJhY2sgZnVuY3Rpb24KKyAqIGFuZCB0aGVuIGludm9rZXMgdGhlIGxwZmNfcmVzdW1lX2ZhYnJpY19pb2NicygpIHJvdXRpbmUgdG8gaXNzdWUgdGhlIG5leHQKKyAqIGZhYnJpYyBib3VuZCBpb2NiIGZyb20gdGhlIGRyaXZlciBpbnRlcm5hbCBmYWJyaWMgaW9jYiBsaXN0IG9udG8gdGhlIHdpcmUuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jbXBsX2ZhYnJpY19pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC00ODkyLDYgKzYyOTQsMzAgQEAKIAl9CiB9CiAKKy8qKgorICogbHBmY19pc3N1ZV9mYWJyaWNfaW9jYjogSXNzdWUgYSBmYWJyaWMgaW9jYiBjb21tYW5kLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAaW9jYjogcG9pbnRlciB0byBscGZjIGNvbW1hbmQgaW9jYiBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCBhcyB0aGUgdG9wLWxldmVsIEFQSSBmb3IgaXNzdWluZyBhIGZhYnJpYyBpb2NiIGNvbW1hbmQKKyAqIHN1Y2ggYXMgRkxPR0kgYW5kIEZESVNDLiBUbyBhY2NvbW1vZGF0ZSBjZXJ0YWluIHN3aXRjaCBmYWJyaWMsIHRoaXMgZHJpdmVyCisgKiBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgb25seSBvbmUgZmFicmljIGJvdW5kIGlvY2Igd2lsbCBiZSBvdXRzdGFuZGluZyBhdAorICogYW55IGdpdmVuIHRpbWUuIEFzIHN1Y2gsIHRoaXMgZnVuY3Rpb24gd2lsbCBmaXJzdCBjaGVjayB0byBzZWUgd2hldGhlciB0aGVyZQorICogaXMgYWxyZWFkeSBhbiBvdXRzdGFuZGluZyBmYWJyaWMgaW9jYiBvbiB0aGUgd2lyZS4gSWYgc28sIGl0IHdpbGwgcHV0IHRoZQorICogbmV3bHkgaXNzdWVkIGlvY2Igb250byB0aGUgZHJpdmVyIGludGVybmFsIGZhYnJpYyBpb2NiIGxpc3QsIHdhaXRpbmcgdG8gYmUKKyAqIGlzc3VlZCBsYXRlci4gT3RoZXJ3aXNlLCBpdCB3aWxsIGlzc3VlIHRoZSBpb2NiIG9uIHRoZSB3aXJlIGFuZCB1cGRhdGUgdGhlCisgKiBmYWJyaWMgaW9jYiBjb3VudCBpdCBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzIG9uZSBmYWJyaWMgaW9jYiBvbiB0aGUgd2lyZS4KKyAqCisgKiBOb3RlLCB0aGlzIGltcGxlbWVudGF0aW9uIGhhcyBhIHBvdGVudGlhbCBzZW5kaW5nIG91dCBmYWJyaWMgSU9DQnMgb3V0IG9mCisgKiBvcmRlci4gVGhlIHByb2JsZW0gaXMgY2F1c2VkIGJ5IHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlICJyZWFkeSIgYm9vbGVuIGRvZXMKKyAqIG5vdCBpbmNsdWRlIHRoZSBjb25kaXRpb24gdGhhdCB0aGUgaW50ZXJuYWwgZmFicmljIElPQ0IgbGlzdCBpcyBlbXB0eS4gQXMKKyAqIHN1Y2gsIGl0IGlzIHBvc3NpYmxlIGEgZmFicmljIElPQ0IgaXNzdWVkIGJ5IHRoaXMgcm91dGluZSBtaWdodCBiZSAianVtcCIKKyAqIGFoZWFkIG9mIHRoZSBmYWJyaWMgSU9DQnMgaW4gdGhlIGludGVybmFsIGxpc3QuCisgKgorICogUmV0dXJuIGNvZGUKKyAqICAgSU9DQl9TVUNDRVNTIC0gZWl0aGVyIGZhYnJpYyBpb2NiIHB1dCBvbiB0aGUgbGlzdCBvciBpc3N1ZWQgc3VjY2Vzc2Z1bGx5CisgKiAgIElPQ0JfRVJST1IgLSBmYWlsZWQgdG8gaXNzdWUgZmFicmljIGlvY2IKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfaXNzdWVfZmFicmljX2lvY2Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqaW9jYikKIHsKQEAgLTQ5MzcsNyArNjM2MywxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLQorLyoqCisgKiBscGZjX2ZhYnJpY19hYm9ydF92cG9ydDogQWJvcnQgYSB2cG9ydCdzIGlvY2JzIGZyb20gZHJpdmVyIGZhYnJpYyBpb2NiIGxpc3QuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gYSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYWJvcnRzIGFsbCB0aGUgSU9DQnMgYXNzb2NpYXRlZCB3aXRoIGEgQHZwb3J0IGZyb20gdGhlCisgKiBkcml2ZXIgaW50ZXJuYWwgZmFicmljIElPQ0IgbGlzdC4gVGhlIGxpc3QgY29udGFpbnMgZmFicmljIElPQ0JzIHRvIGJlCisgKiBpc3N1ZWQgdG8gdGhlIEVMUyBJT0NCIHJpbmcuIFRoaXMgYWJvcnQgZnVuY3Rpb24gd2Fsa3MgdGhlIGZhYnJpYyBJT0NCCisgKiBsaXN0LCByZW1vdmVzIGVhY2ggSU9DQiBhc3NvY2lhdGVkIHdpdGggdGhlIEB2cG9ydCBvZmYgdGhlIGxpc3QsIHNldCB0aGUKKyAqIHN0YXR1cyBmZWlsZCB0byBJT1NUQVRfTE9DQUxfUkVKRUNULCBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgSU9DQi4KKyAqKi8KIHN0YXRpYyB2b2lkIGxwZmNfZmFicmljX2Fib3J0X3Zwb3J0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKIAlMSVNUX0hFQUQoY29tcGxldGlvbnMpOwpAQCAtNDk2Nyw2ICs2NDAzLDE3IEBACiAJfQogfQogCisvKioKKyAqIGxwZmNfZmFicmljX2Fib3J0X25wb3J0OiBBYm9ydCBhIG5kbHAncyBpb2NicyBmcm9tIGRyaXZlciBmYWJyaWMgaW9jYiBsaXN0LgorICogQG5kbHA6IHBvaW50ZXIgdG8gYSBub2RlLWxpc3QgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGFib3J0cyBhbGwgdGhlIElPQ0JzIGFzc29jaWF0ZWQgd2l0aCBhbiBAbmRscCBmcm9tIHRoZQorICogZHJpdmVyIGludGVybmFsIGZhYnJpYyBJT0NCIGxpc3QuIFRoZSBsaXN0IGNvbnRhaW5zIGZhYnJpYyBJT0NCcyB0byBiZQorICogaXNzdWVkIHRvIHRoZSBFTFMgSU9DQiByaW5nLiBUaGlzIGFib3J0IGZ1bmN0aW9uIHdhbGtzIHRoZSBmYWJyaWMgSU9DQgorICogbGlzdCwgcmVtb3ZlcyBlYWNoIElPQ0IgYXNzb2NpYXRlZCB3aXRoIHRoZSBAbmRscCBvZmYgdGhlIGxpc3QsIHNldCB0aGUKKyAqIHN0YXR1cyBmZWlsZCB0byBJT1NUQVRfTE9DQUxfUkVKRUNULCBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgSU9DQi4KKyAqKi8KIHZvaWQgbHBmY19mYWJyaWNfYWJvcnRfbnBvcnQoc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCiB7CiAJTElTVF9IRUFEKGNvbXBsZXRpb25zKTsKQEAgLTQ5OTYsNiArNjQ0MywxNyBAQAogCX0KIH0KIAorLyoqCisgKiBscGZjX2ZhYnJpY19hYm9ydF9oYmE6IEFib3J0IGFsbCBpb2NicyBvbiBkcml2ZXIgZmFicmljIGlvY2IgbGlzdC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBhYm9ydHMgYWxsIHRoZSBJT0NCcyBjdXJyZW50bHkgb24gdGhlIGRyaXZlciBpbnRlcm5hbAorICogZmFicmljIElPQ0IgbGlzdC4gVGhlIGxpc3QgY29udGFpbnMgZmFicmljIElPQ0JzIHRvIGJlIGlzc3VlZCB0byB0aGUgRUxTCisgKiBJT0NCIHJpbmcuIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIGVudGlyZSBJT0NCIGxpc3Qgb2ZmIHRoZSBmYWJyaWMgSU9DQgorICogbGlzdCwgcmVtb3ZlcyBJT0NCcyBvZmYgdGhlIGxpc3QsIHNldCB0aGUgc3RhdHVzIGZlaWxkIHRvCisgKiBJT1NUQVRfTE9DQUxfUkVKRUNULCBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoCisgKiB0aGUgSU9DQi4KKyAqKi8KIHZvaWQgbHBmY19mYWJyaWNfYWJvcnRfaGJhKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKIAlMSVNUX0hFQUQoY29tcGxldGlvbnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwppbmRleCBhOThkMTFiLi5hMWE3MGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfZmMuaD4KIAogI2luY2x1ZGUgImxwZmNfaHcuaCIKKyNpbmNsdWRlICJscGZjX25sLmgiCiAjaW5jbHVkZSAibHBmY19kaXNjLmgiCiAjaW5jbHVkZSAibHBmY19zbGkuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKQEAgLTg4LDE0ICs4OSw2IEBACiAJCQkmcGhiYS0+c2xpLnJpbmdbcGhiYS0+c2xpLmZjcF9yaW5nXSwKIAkJCW5kbHAtPm5scF9zaWQsIDAsIExQRkNfQ1RYX1RHVCk7CiAJfQotCi0JLyoKLQkgKiBBIGRldmljZSBpcyBub3JtYWxseSBibG9ja2VkIGZvciByZWRpc2NvdmVyeSBhbmQgdW5ibG9ja2VkIHdoZW4KLQkgKiBkZXZsb3NzIHRpbWVvdXQgaGFwcGVucy4gIEluIGNhc2UgYSB2cG9ydCBpcyByZW1vdmVkIG9yIGRyaXZlcgotCSAqIHVubG9hZGVkIGJlZm9yZSBkZXZsb3NzIHRpbWVvdXQgaGFwcGVucywgd2UgbmVlZCB0byB1bmJsb2NrIGhlcmUuCi0JICovCi0Jc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7Ci0JcmV0dXJuOwogfQogCiAvKgpAQCAtMjE1LDggKzIwOCwxNiBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX01BUFBFRF9OT0RFKQorCWlmIChuZGxwLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9NQVBQRURfTk9ERSkgeworCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0lORk8sIExPR19ESVNDT1ZFUlksCisJCQkJICIwMjg0IERldmxvc3MgdGltZW91dCBJZ25vcmVkIG9uICIKKwkJCQkgIldXUE4gJXg6JXg6JXg6JXg6JXg6JXg6JXg6JXggIgorCQkJCSAiTlBvcnQgeCV4XG4iLAorCQkJCSAqbmFtZSwgKihuYW1lKzEpLCAqKG5hbWUrMiksICoobmFtZSszKSwKKwkJCQkgKihuYW1lKzQpLCAqKG5hbWUrNSksICoobmFtZSs2KSwgKihuYW1lKzcpLAorCQkJCSBuZGxwLT5ubHBfRElEKTsKIAkJcmV0dXJuOworCX0KIAogCWlmIChuZGxwLT5ubHBfdHlwZSAmIE5MUF9GQUJSSUMpIHsKIAkJLyogV2Ugd2lsbCBjbGVhbiB1cCB0aGVzZSBOb2RlcyBpbiBsaW5rdXAgKi8KQEAgLTIzNyw4ICsyMzgsNiBAQAogCQlscGZjX3NsaV9hYm9ydF9pb2NiKHZwb3J0LCAmcGhiYS0+c2xpLnJpbmdbcGhiYS0+c2xpLmZjcF9yaW5nXSwKIAkJCQkgICAgbmRscC0+bmxwX3NpZCwgMCwgTFBGQ19DVFhfVEdUKTsKIAl9Ci0JaWYgKHZwb3J0LT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpCi0JCXdhcm5fb24gPSAwOwogCiAJaWYgKHdhcm5fb24pIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUlksCkBAIC0yNzYsNiArMjc1LDEyNCBAQAogCQlscGZjX2Rpc2Nfc3RhdGVfbWFjaGluZSh2cG9ydCwgbmRscCwgTlVMTCwgTkxQX0VWVF9ERVZJQ0VfUk0pOwogfQogCisvKioKKyAqIGxwZmNfYWxsb2NfZmFzdF9ldnQ6IEFsbG9jYXRlcyBkYXRhIHN0cnVjdHVyZSBmb3IgcG9zdGluZyBldmVudC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBmdW5jdGlvbnMgd2hpY2ggbmVlZCB0byBwb3N0CisgKiBldmVudHMgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgZGF0YQorICogc3RydWN0dXJlIHJlcXVpcmVkIGZvciBwb3N0aW5nIGV2ZW50LiBJdCBhbHNvIGtlZXBzIHRyYWNrIG9mCisgKiBudW1iZXIgb2YgZXZlbnRzIHBlbmRpbmcgYW5kIHByZXZlbnQgZXZlbnQgc3Rvcm0gd2hlbiB0aGVyZSBhcmUKKyAqIHRvbyBtYW55IGV2ZW50cy4KKyAqKi8KK3N0cnVjdCBscGZjX2Zhc3RfcGF0aF9ldmVudCAqCitscGZjX2FsbG9jX2Zhc3RfZXZ0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkgeworCXN0cnVjdCBscGZjX2Zhc3RfcGF0aF9ldmVudCAqcmV0OworCisJLyogSWYgdGhlcmUgYXJlIGxvdCBvZiBmYXN0IGV2ZW50IGRvIG5vdCBleGhhdXN0IG1lbW9yeSBkdWUgdG8gdGhpcyAqLworCWlmIChhdG9taWNfcmVhZCgmcGhiYS0+ZmFzdF9ldmVudF9jb3VudCkgPiBMUEZDX01BWF9FVlRfQ09VTlQpCisJCXJldHVybiBOVUxMOworCisJcmV0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZmFzdF9wYXRoX2V2ZW50KSwKKwkJCUdGUF9BVE9NSUMpOworCWlmIChyZXQpCisJCWF0b21pY19pbmMoJnBoYmEtPmZhc3RfZXZlbnRfY291bnQpOworCUlOSVRfTElTVF9IRUFEKCZyZXQtPndvcmtfZXZ0LmV2dF9saXN0cCk7CisJcmV0LT53b3JrX2V2dC5ldnQgPSBMUEZDX0VWVF9GQVNUUEFUSF9NR01UX0VWVDsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGxwZmNfZnJlZV9mYXN0X2V2dDogRnJlZXMgZXZlbnQgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcGhiYTogUG9pbnRlciB0byBoYmEgY29udGV4dCBvYmplY3QuCisgKiBAZXZ0OiAgRXZlbnQgb2JqZWN0IHdoaWNoIG5lZWQgdG8gYmUgZnJlZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBmcmVlcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIHBvc3RpbmcKKyAqIGV2ZW50cy4KKyAqKi8KK3ZvaWQKK2xwZmNfZnJlZV9mYXN0X2V2dChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCisJCXN0cnVjdCBscGZjX2Zhc3RfcGF0aF9ldmVudCAqZXZ0KSB7CisKKwlhdG9taWNfZGVjKCZwaGJhLT5mYXN0X2V2ZW50X2NvdW50KTsKKwlrZnJlZShldnQpOworfQorCisvKioKKyAqIGxwZmNfc2VuZF9mYXN0cGF0aF9ldnQ6IFBvc3RzIGV2ZW50cyBnZW5lcmF0ZWQgZnJvbSBmYXN0IHBhdGguCisgKiBAcGhiYTogUG9pbnRlciB0byBoYmEgY29udGV4dCBvYmplY3QuCisgKiBAZXZ0cDogRXZlbnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB3b3JrZXIgdGhyZWFkLCB3aGVuIHRoZSBpbnRlcnJ1cHQKKyAqIGNvbnRleHQgbmVlZCB0byBwb3N0IGFuIGV2ZW50LiBUaGlzIGZ1bmN0aW9uIHBvc3RzIHRoZSBldmVudAorICogdG8gZmMgdHJhbnNwb3J0IG5ldGxpbmsgaW50ZXJmYWNlLgorICoqLworc3RhdGljIHZvaWQKK2xwZmNfc2VuZF9mYXN0cGF0aF9ldnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQlzdHJ1Y3QgbHBmY193b3JrX2V2dCAqZXZ0cCkKK3sKKwl1bnNpZ25lZCBsb25nIGV2dF9jYXRlZ29yeSwgZXZ0X3N1Yl9jYXRlZ29yeTsKKwlzdHJ1Y3QgbHBmY19mYXN0X3BhdGhfZXZlbnQgKmZhc3RfZXZ0X2RhdGE7CisJY2hhciAqZXZ0X2RhdGE7CisJdWludDMyX3QgZXZ0X2RhdGFfc2l6ZTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKworCWZhc3RfZXZ0X2RhdGEgPSBjb250YWluZXJfb2YoZXZ0cCwgc3RydWN0IGxwZmNfZmFzdF9wYXRoX2V2ZW50LAorCQl3b3JrX2V2dCk7CisKKwlldnRfY2F0ZWdvcnkgPSAodW5zaWduZWQgbG9uZykgZmFzdF9ldnRfZGF0YS0+dW4uZmFicmljX2V2dC5ldmVudF90eXBlOworCWV2dF9zdWJfY2F0ZWdvcnkgPSAodW5zaWduZWQgbG9uZykgZmFzdF9ldnRfZGF0YS0+dW4uCisJCQlmYWJyaWNfZXZ0LnN1YmNhdGVnb3J5OworCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KGZhc3RfZXZ0X2RhdGEtPnZwb3J0KTsKKwlpZiAoZXZ0X2NhdGVnb3J5ID09IEZDX1JFR19GQUJSSUNfRVZFTlQpIHsKKwkJaWYgKGV2dF9zdWJfY2F0ZWdvcnkgPT0gTFBGQ19FVkVOVF9GQ1BSRENIS0VSUikgeworCQkJZXZ0X2RhdGEgPSAoY2hhciAqKSAmZmFzdF9ldnRfZGF0YS0+dW4ucmVhZF9jaGVja19lcnJvcjsKKwkJCWV2dF9kYXRhX3NpemUgPSBzaXplb2YoZmFzdF9ldnRfZGF0YS0+dW4uCisJCQkJcmVhZF9jaGVja19lcnJvcik7CisJCX0gZWxzZSBpZiAoKGV2dF9zdWJfY2F0ZWdvcnkgPT0gTFBGQ19FVkVOVF9GQUJSSUNfQlVTWSkgfHwKKwkJCShldnRfc3ViX2NhdGVnb3J5ID09IElPU1RBVF9OUE9SVF9CU1kpKSB7CisJCQlldnRfZGF0YSA9IChjaGFyICopICZmYXN0X2V2dF9kYXRhLT51bi5mYWJyaWNfZXZ0OworCQkJZXZ0X2RhdGFfc2l6ZSA9IHNpemVvZihmYXN0X2V2dF9kYXRhLT51bi5mYWJyaWNfZXZ0KTsKKwkJfSBlbHNlIHsKKwkJCWxwZmNfZnJlZV9mYXN0X2V2dChwaGJhLCBmYXN0X2V2dF9kYXRhKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSBpZiAoZXZ0X2NhdGVnb3J5ID09IEZDX1JFR19TQ1NJX0VWRU5UKSB7CisJCXN3aXRjaCAoZXZ0X3N1Yl9jYXRlZ29yeSkgeworCQljYXNlIExQRkNfRVZFTlRfUUZVTEw6CisJCWNhc2UgTFBGQ19FVkVOVF9ERVZCU1k6CisJCQlldnRfZGF0YSA9IChjaGFyICopICZmYXN0X2V2dF9kYXRhLT51bi5zY3NpX2V2dDsKKwkJCWV2dF9kYXRhX3NpemUgPSBzaXplb2YoZmFzdF9ldnRfZGF0YS0+dW4uc2NzaV9ldnQpOworCQkJYnJlYWs7CisJCWNhc2UgTFBGQ19FVkVOVF9DSEVDS19DT05EOgorCQkJZXZ0X2RhdGEgPSAoY2hhciAqKSAmZmFzdF9ldnRfZGF0YS0+dW4uY2hlY2tfY29uZF9ldnQ7CisJCQlldnRfZGF0YV9zaXplID0gIHNpemVvZihmYXN0X2V2dF9kYXRhLT51bi4KKwkJCQljaGVja19jb25kX2V2dCk7CisJCQlicmVhazsKKwkJY2FzZSBMUEZDX0VWRU5UX1ZBUlFVRURFUFRIOgorCQkJZXZ0X2RhdGEgPSAoY2hhciAqKSAmZmFzdF9ldnRfZGF0YS0+dW4ucXVldWVfZGVwdGhfZXZ0OworCQkJZXZ0X2RhdGFfc2l6ZSA9IHNpemVvZihmYXN0X2V2dF9kYXRhLT51bi4KKwkJCQlxdWV1ZV9kZXB0aF9ldnQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlscGZjX2ZyZWVfZmFzdF9ldnQocGhiYSwgZmFzdF9ldnRfZGF0YSk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQlscGZjX2ZyZWVfZmFzdF9ldnQocGhiYSwgZmFzdF9ldnRfZGF0YSk7CisJCXJldHVybjsKKwl9CisKKwlmY19ob3N0X3Bvc3RfdmVuZG9yX2V2ZW50KHNob3N0LAorCQlmY19nZXRfZXZlbnRfbnVtYmVyKCksCisJCWV2dF9kYXRhX3NpemUsCisJCWV2dF9kYXRhLAorCQlTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IFBDSV9WRU5ET1JfSURfRU1VTEVYKTsKKworCWxwZmNfZnJlZV9mYXN0X2V2dChwaGJhLCBmYXN0X2V2dF9kYXRhKTsKKwlyZXR1cm47Cit9CisKIHN0YXRpYyB2b2lkCiBscGZjX3dvcmtfbGlzdF9kb25lKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTM0Nyw2ICs0NjQsMTAgQEAKIAkJCWxwZmNfdW5ibG9ja19tZ210X2lvKHBoYmEpOwogCQkJY29tcGxldGUoKHN0cnVjdCBjb21wbGV0aW9uICopKGV2dHAtPmV2dF9hcmcyKSk7CiAJCQlicmVhazsKKwkJY2FzZSBMUEZDX0VWVF9GQVNUUEFUSF9NR01UX0VWVDoKKwkJCWxwZmNfc2VuZF9mYXN0cGF0aF9ldnQocGhiYSwgZXZ0cCk7CisJCQlmcmVlX2V2dCA9IDA7CisJCQlicmVhazsKIAkJfQogCQlpZiAoZnJlZV9ldnQpCiAJCQlrZnJlZShldnRwKTsKQEAgLTM3MSw2ICs0OTIsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAKIAlpZiAoaGFfY29weSAmIEhBX0VSQVRUKQorCQkvKiBIYW5kbGUgdGhlIGVycm9yIGF0dGVudGlvbiBldmVudCAqLwogCQlscGZjX2hhbmRsZV9lcmF0dChwaGJhKTsKIAogCWlmIChoYV9jb3B5ICYgSEFfTUJBVFQpCkBAIC0zNzgsNiArNTAwLDcgQEAKIAogCWlmIChoYV9jb3B5ICYgSEFfTEFUVCkKIAkJbHBmY19oYW5kbGVfbGF0dChwaGJhKTsKKwogCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CiAJaWYgKHZwb3J0cyAhPSBOVUxMKQogCQlmb3IoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3ZwaTsgaSsrKSB7CkBAIC0xMDEzLDE0ICsxMTM2LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1scGZjX21ieF9pc3N1ZV9saW5rX2Rvd24oc3RydWN0IGxwZmNfaGJhICpwaGJhKQorbHBmY19lbmFibGVfbGEoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewogCXVpbnQzMl90IGNvbnRyb2w7CiAJc3RydWN0IGxwZmNfc2xpICpwc2xpID0gJnBoYmEtPnNsaTsKLQotCWxwZmNfbGlua2Rvd24ocGhiYSk7Ci0KLQkvKiB0dXJuIG9uIExpbmsgQXR0ZW50aW9uIGludGVycnVwdHMgLSBubyBDTEVBUl9MQSBuZWVkZWQgKi8KIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlwc2xpLT5zbGlfZmxhZyB8PSBMUEZDX1BST0NFU1NfTEE7CiAJY29udHJvbCA9IHJlYWRsKHBoYmEtPkhDcmVnYWRkcik7CkBAIC0xMDMwLDYgKzExNDksMTUgQEAKIAlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogfQogCitzdGF0aWMgdm9pZAorbHBmY19tYnhfaXNzdWVfbGlua19kb3duKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlscGZjX2xpbmtkb3duKHBoYmEpOworCWxwZmNfZW5hYmxlX2xhKHBoYmEpOworCS8qIHR1cm4gb24gTGluayBBdHRlbnRpb24gaW50ZXJydXB0cyAtIG5vIENMRUFSX0xBIG5lZWRlZCAqLworfQorCisKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBwcm9jZXNzaW5nIGEgUkVBRF9MQSBtYWlsYm94CiAgKiBjb21tYW5kIHVwb24gY29tcGxldGlvbi4gSXQgaXMgc2V0dXAgaW4gdGhlIExQRkNfTUJPWFEKQEAgLTEwNzcsOCArMTIwNSwxMiBAQAogCX0KIAogCXBoYmEtPmZjX2V2ZW50VGFnID0gbGEtPmV2ZW50VGFnOworCWlmIChsYS0+bW0pCisJCXBoYmEtPnNsaS5zbGlfZmxhZyB8PSBMUEZDX01FTkxPX01BSU5UOworCWVsc2UKKwkJcGhiYS0+c2xpLnNsaV9mbGFnICY9IH5MUEZDX01FTkxPX01BSU5UOwogCi0JaWYgKGxhLT5hdHRUeXBlID09IEFUX0xJTktfVVApIHsKKwlpZiAobGEtPmF0dFR5cGUgPT0gQVRfTElOS19VUCAmJiAoIWxhLT5tbSkpIHsKIAkJcGhiYS0+ZmNfc3RhdC5MaW5rVXArKzsKIAkJaWYgKHBoYmEtPmxpbmtfZmxhZyAmIExTX0xPT1BCQUNLX01PREUpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0xJTktfRVZFTlQsCkBAIC0xMDkwLDEzICsxMjIyLDE1IEBACiAJCX0gZWxzZSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19MSU5LX0VWRU5ULAogCQkJCQkiMTMwMyBMaW5rIFVwIEV2ZW50IHgleCByZWNlaXZlZCAiCi0JCQkJCSJEYXRhOiB4JXggeCV4IHgleCB4JXhcbiIsCisJCQkJCSJEYXRhOiB4JXggeCV4IHgleCB4JXggeCV4IHgleCAlZFxuIiwKIAkJCQkJbGEtPmV2ZW50VGFnLCBwaGJhLT5mY19ldmVudFRhZywKIAkJCQkJbGEtPmdyYW50ZWRfQUxfUEEsIGxhLT5VbG5rU3BlZWQsCi0JCQkJCXBoYmEtPmFscGFfbWFwWzBdKTsKKwkJCQkJcGhiYS0+YWxwYV9tYXBbMF0sCisJCQkJCWxhLT5tbSwgbGEtPmZhLAorCQkJCQlwaGJhLT53YWl0XzRfbWxvX21haW50X2ZsZyk7CiAJCX0KIAkJbHBmY19tYnhfcHJvY2Vzc19saW5rX3VwKHBoYmEsIGxhKTsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAobGEtPmF0dFR5cGUgPT0gQVRfTElOS19ET1dOKSB7CiAJCXBoYmEtPmZjX3N0YXQuTGlua0Rvd24rKzsKIAkJaWYgKHBoYmEtPmxpbmtfZmxhZyAmIExTX0xPT1BCQUNLX01PREUpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0xJTktfRVZFTlQsCkBAIC0xMTA5LDExICsxMjQzLDQ2IEBACiAJCWVsc2UgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTElOS19FVkVOVCwKIAkJCQkiMTMwNSBMaW5rIERvd24gRXZlbnQgeCV4IHJlY2VpdmVkICIKKwkJCQkiRGF0YTogeCV4IHgleCB4JXggeCV4IHgleFxuIiwKKwkJCQlsYS0+ZXZlbnRUYWcsIHBoYmEtPmZjX2V2ZW50VGFnLAorCQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlLCB2cG9ydC0+ZmNfZmxhZywKKwkJCQlsYS0+bW0sIGxhLT5mYSk7CisJCX0KKwkJbHBmY19tYnhfaXNzdWVfbGlua19kb3duKHBoYmEpOworCX0KKwlpZiAobGEtPm1tICYmIGxhLT5hdHRUeXBlID09IEFUX0xJTktfVVApIHsKKwkJaWYgKHBoYmEtPmxpbmtfc3RhdGUgIT0gTFBGQ19MSU5LX0RPV04pIHsKKwkJCXBoYmEtPmZjX3N0YXQuTGlua0Rvd24rKzsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0xJTktfRVZFTlQsCisJCQkJIjEzMTIgTGluayBEb3duIEV2ZW50IHgleCByZWNlaXZlZCAiCiAJCQkJIkRhdGE6IHgleCB4JXggeCV4XG4iLAogCQkJCWxhLT5ldmVudFRhZywgcGhiYS0+ZmNfZXZlbnRUYWcsCiAJCQkJcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUsIHZwb3J0LT5mY19mbGFnKTsKKwkJCWxwZmNfbWJ4X2lzc3VlX2xpbmtfZG93bihwaGJhKTsKKwkJfSBlbHNlCisJCQlscGZjX2VuYWJsZV9sYShwaGJhKTsKKworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19MSU5LX0VWRU5ULAorCQkJCSIxMzEwIE1lbmxvIE1haW50IE1vZGUgTGluayB1cCBFdmVudCB4JXggcmN2ZCAiCisJCQkJIkRhdGE6IHgleCB4JXggeCV4XG4iLAorCQkJCWxhLT5ldmVudFRhZywgcGhiYS0+ZmNfZXZlbnRUYWcsCisJCQkJcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUsIHZwb3J0LT5mY19mbGFnKTsKKwkJLyoKKwkJICogVGhlIGNtbmQgdGhhdCB0cmlnZ2VyZWQgdGhpcyB3aWxsIGJlIHdhaXRpbmcgZm9yIHRoaXMKKwkJICogc2lnbmFsLgorCQkgKi8KKwkJLyogV0FLRVVQIGZvciBNRU5MT19TRVRfTU9ERSBvciBNRU5MT19SRVNFVCBjb21tYW5kLiAqLworCQlpZiAocGhiYS0+d2FpdF80X21sb19tYWludF9mbGcpIHsKKwkJCXBoYmEtPndhaXRfNF9tbG9fbWFpbnRfZmxnID0gMDsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGhiYS0+d2FpdF80X21sb19tX3EpOwogCQl9Ci0JCWxwZmNfbWJ4X2lzc3VlX2xpbmtfZG93bihwaGJhKTsKKwl9CisKKwlpZiAobGEtPmZhKSB7CisJCWlmIChsYS0+bW0pCisJCQlscGZjX2lzc3VlX2NsZWFyX2xhKHBoYmEsIHZwb3J0KTsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0xJTktfRVZFTlQsCisJCQkJIjEzMTEgZmEgJWRcbiIsIGxhLT5mYSk7CiAJfQogCiBscGZjX21ieF9jbXBsX3JlYWRfbGFfZnJlZV9tYnVmOgpAQCAtMTE3Nyw3ICsxMzQ2LDcgQEAKIAkJc2NzaV9ob3N0X3B1dChzaG9zdCk7CiB9CiAKLXZvaWQKK2ludAogbHBmY19tYnhfdW5yZWdfdnBpKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKIAlzdHJ1Y3QgbHBmY19oYmEgICpwaGJhID0gdnBvcnQtPnBoYmE7CkBAIC0xMTg2LDcgKzEzNTUsNyBAQAogCiAJbWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtYm94KQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCiAJbHBmY191bnJlZ192cGkocGhiYSwgdnBvcnQtPnZwaSwgbWJveCk7CiAJbWJveC0+dnBvcnQgPSB2cG9ydDsKQEAgLTExOTcsNyArMTM2Niw5IEBACiAJCQkJICIxODAwIENvdWxkIG5vdCBpc3N1ZSB1bnJlZ192cGlcbiIpOwogCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJCXZwb3J0LT51bnJlZ192cGlfY21wbCA9IFZQT1JUX0VSUk9SOworCQlyZXR1cm4gcmM7CiAJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTU1Myw2ICsxNzI0LDIyIEBACiAJCSAqLwogCQlscGZjX3JlZ2lzdGVyX3JlbW90ZV9wb3J0KHZwb3J0LCBuZGxwKTsKIAl9CisJaWYgKChuZXdfc3RhdGUgPT0gIE5MUF9TVEVfTUFQUEVEX05PREUpICYmCisJCSh2cG9ydC0+c3RhdF9kYXRhX2VuYWJsZWQpKSB7CisJCS8qCisJCSAqIEEgbmV3IHRhcmdldCBpcyBkaXNjb3ZlcmVkLCBpZiB0aGVyZSBpcyBubyBidWZmZXIgZm9yCisJCSAqIHN0YXRpc3RpY2FsIGRhdGEgY29sbGVjdGlvbiBhbGxvY2F0ZSBidWZmZXIuCisJCSAqLworCQluZGxwLT5sYXRfZGF0YSA9IGtjYWxsb2MoTFBGQ19NQVhfQlVDS0VUX0NPVU5ULAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBscGZjX3Njc2ljbWRfYmt0KSwKKwkJCQkJIEdGUF9LRVJORUwpOworCisJCWlmICghbmRscC0+bGF0X2RhdGEpCisJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX05PREUsCisJCQkJIjAyODYgbHBmY19ubHBfc3RhdGVfY2xlYW51cCBmYWlsZWQgdG8gIgorCQkJCSJhbGxvY2F0ZSBzdGF0aXN0aWNhbCBkYXRhIGJ1ZmZlciBESUQgIgorCQkJCSIweCV4XG4iLCBuZGxwLT5ubHBfRElEKTsKKwl9CiAJLyoKIAkgKiBpZiB3ZSBhZGRlZCB0byBNYXBwZWQgbGlzdCwgYnV0IHRoZSByZW1vdGUgcG9ydAogCSAqIHJlZ2lzdHJhdGlvbiBmYWlsZWQgb3IgYXNzaWduZWQgYSB0YXJnZXQgaWQgb3V0c2lkZQpAQCAtMjc4Niw3ICsyOTczLDcgQEAKIAogCWRlZmF1bHQ6CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZLAotCQkJCSAiMDIyOSBVbmV4cGVjdGVkIGRpc2NvdmVyeSB0aW1lb3V0LCAiCisJCQkJICIwMjczIFVuZXhwZWN0ZWQgZGlzY292ZXJ5IHRpbWVvdXQsICIKIAkJCQkgInZwb3J0IFN0YXRlIHgleFxuIiwgdnBvcnQtPnBvcnRfc3RhdGUpOwogCQlicmVhazsKIAl9CkBAIC0yOTQwLDYgKzMxMjcsOCBAQAogCUlOSVRfTElTVF9IRUFEKCZuZGxwLT5ubHBfbGlzdHApOwogCWtyZWZfaW5pdCgmbmRscC0+a3JlZik7CiAJTkxQX0lOVF9OT0RFX0FDVChuZGxwKTsKKwlhdG9taWNfc2V0KCZuZGxwLT5jbWRfcGVuZGluZywgMCk7CisJbmRscC0+Y21kX3FkZXB0aCA9IExQRkNfTUFYX1RHVF9RREVQVEg7CiAKIAlscGZjX2RlYnVnZnNfZGlzY190cmModnBvcnQsIExQRkNfRElTQ19UUkNfTk9ERSwKIAkJIm5vZGUgaW5pdDogICAgICAgZGlkOngleCIsCkBAIC0yOTc5LDggKzMxNjgsMTAgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5uZGxwX2xvY2ssIGZsYWdzKTsKIAogCS8qIGZyZWUgbmRscCBtZW1vcnkgZm9yIGZpbmFsIG5kbHAgcmVsZWFzZSAqLwotCWlmIChOTFBfQ0hLX0ZSRUVfUkVRKG5kbHApKQorCWlmIChOTFBfQ0hLX0ZSRUVfUkVRKG5kbHApKSB7CisJCWtmcmVlKG5kbHAtPmxhdF9kYXRhKTsKIAkJbWVtcG9vbF9mcmVlKG5kbHAsIG5kbHAtPnZwb3J0LT5waGJhLT5ubHBfbWVtX3Bvb2wpOworCX0KIH0KIAogLyogVGhpcyByb3V0aW5lIGJ1bXBzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIGEgbmRscCBzdHJ1Y3R1cmUgdG8gZW5zdXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKaW5kZXggNzc3M2I5NC4uNWRlNWRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaApAQCAtMTEwNyw2ICsxMTA3LDggQEAKIC8qIFN0YXJ0IEZpcmVGbHkgUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FTVVMRVggICAgICAgIDB4MTBkZgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0ZJUkVGTFkgICAgICAgMHgxYWU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPVEVVU19WRiAgICAweGUxMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9URVVTX1BGICAgIDB4ZTE4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NBVF9TTUIgICAgICAgMHhmMDExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0FUX01JRCAgICAgICAweGYwMTUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9SRkxZICAgICAgICAgIDB4ZjA5NQpAQCAtMTEzMywxMCArMTEzNSwxMiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xQMTEwMDBTICAgICAgMHhmYzEwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFBFMTEwMDBTICAgICAweGZjMjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TQVRfUyAgICAgICAgIDB4ZmM0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST1RFVVNfUyAgICAgMHhmYzUwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSEVMSU9TICAgICAgICAweGZkMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IRUxJT1NfU0NTUCAgIDB4ZmQxMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hFTElPU19EQ1NQICAgMHhmZDEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWkVQSFlSICAgICAgICAweGZlMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IT1JORVQgICAgICAgIDB4ZmUwNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1pFUEhZUl9TQ1NQICAgMHhmZTExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWkVQSFlSX0RDU1AgICAweGZlMTIKIApAQCAtMTE1NCw2ICsxMTU4LDcgQEAKICNkZWZpbmUgWkVQSFlSX0pFREVDX0lEICAgICAgICAgICAgIDB4MDU3NwogI2RlZmluZSBWSVBFUl9KRURFQ19JRCAgICAgICAgICAgICAgMHg0ODM4CiAjZGVmaW5lIFNBVFVSTl9KRURFQ19JRCAgICAgICAgICAgICAweDEwMDQKKyNkZWZpbmUgSE9STkVUX0pERUNfSUQgICAgICAgICAgICAgIDB4MjA1NzcwNkQKIAogI2RlZmluZSBKRURFQ19JRF9NQVNLICAgICAgICAgICAgICAgMHgwRkZGRjAwMAogI2RlZmluZSBKRURFQ19JRF9TSElGVCAgICAgICAgICAgICAgMTIKQEAgLTExOTgsNiArMTIwMywxOCBAQAogI2RlZmluZSBIQV9SWEFUVCAgICAgICAweDAwMDAwMDA4CS8qIEJpdCAgMyAqLwogI2RlZmluZSBIQV9SWE1BU0sgICAgICAweDAwMDAwMDBmCiAKKyNkZWZpbmUgSEFfUjBfQ0xSX01TSwkoSEFfUjBSRV9SRVEgfCBIQV9SMENFX1JTUCB8IEhBX1IwQVRUKQorI2RlZmluZSBIQV9SMV9DTFJfTVNLCShIQV9SMVJFX1JFUSB8IEhBX1IxQ0VfUlNQIHwgSEFfUjFBVFQpCisjZGVmaW5lIEhBX1IyX0NMUl9NU0sJKEhBX1IyUkVfUkVRIHwgSEFfUjJDRV9SU1AgfCBIQV9SMkFUVCkKKyNkZWZpbmUgSEFfUjNfQ0xSX01TSwkoSEFfUjNSRV9SRVEgfCBIQV9SM0NFX1JTUCB8IEhBX1IzQVRUKQorCisjZGVmaW5lIEhBX1IwX1BPUwkzCisjZGVmaW5lIEhBX1IxX1BPUwk3CisjZGVmaW5lIEhBX1IyX1BPUwkxMQorI2RlZmluZSBIQV9SM19QT1MJMTUKKyNkZWZpbmUgSEFfTEVfUE9TCTI5CisjZGVmaW5lIEhBX01CX1BPUwkzMAorI2RlZmluZSBIQV9FUl9QT1MJMzEKIC8qIENoaXAgQXR0ZW50aW9uIFJlZ2lzdGVyICovCiAKICNkZWZpbmUgQ0FfUkVHX09GRlNFVCAgNAkvKiBCeXRlIG9mZnNldCBmcm9tIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLwpAQCAtMTIzNSw3ICsxMjUyLDcgQEAKIAogLyogSG9zdCBDb250cm9sIFJlZ2lzdGVyICovCiAKLSNkZWZpbmUgSENfUkVHX09GRlNFVCAgMTIJLyogV29yZCBvZmZzZXQgZnJvbSByZWdpc3RlciBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgSENfUkVHX09GRlNFVCAgMTIJLyogQnl0ZSBvZmZzZXQgZnJvbSByZWdpc3RlciBiYXNlIGFkZHJlc3MgKi8KIAogI2RlZmluZSBIQ19NQklOVF9FTkEgICAweDAwMDAwMDAxCS8qIEJpdCAgMCAqLwogI2RlZmluZSBIQ19SMElOVF9FTkEgICAweDAwMDAwMDAyCS8qIEJpdCAgMSAqLwpAQCAtMTI0OCw2ICsxMjY1LDE5IEBACiAjZGVmaW5lIEhDX0xBSU5UX0VOQSAgIDB4MjAwMDAwMDAJLyogQml0IDI5ICovCiAjZGVmaW5lIEhDX0VSSU5UX0VOQSAgIDB4ODAwMDAwMDAJLyogQml0IDMxICovCiAKKy8qIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0IGVYdGVuc2lvbiAoTVNJLVgpIG1lc3NhZ2UgaWRlbnRpZmllcnMgKi8KKyNkZWZpbmUgTVNJWF9ERkxUX0lECTAKKyNkZWZpbmUgTVNJWF9STkcwX0lECTAKKyNkZWZpbmUgTVNJWF9STkcxX0lECTEKKyNkZWZpbmUgTVNJWF9STkcyX0lECTIKKyNkZWZpbmUgTVNJWF9STkczX0lECTMKKworI2RlZmluZSBNU0lYX0xJTktfSUQJNAorI2RlZmluZSBNU0lYX01CT1hfSUQJNQorCisjZGVmaW5lIE1TSVhfU1BBUkUwX0lECTYKKyNkZWZpbmUgTVNJWF9TUEFSRTFfSUQJNworCiAvKiBNYWlsYm94IENvbW1hbmRzICovCiAjZGVmaW5lIE1CWF9TSFVURE9XTiAgICAgICAgMHgwMAkvKiB0ZXJtaW5hdGUgdGVzdGluZyAqLwogI2RlZmluZSBNQlhfTE9BRF9TTSAgICAgICAgIDB4MDEKQEAgLTEyODUsMTAgKzEzMTUsMTQgQEAKICNkZWZpbmUgTUJYX0tJTExfQk9BUkQgICAgICAweDI0CiAjZGVmaW5lIE1CWF9DT05GSUdfRkFSUCAgICAgMHgyNQogI2RlZmluZSBNQlhfQkVBQ09OICAgICAgICAgIDB4MkEKKyNkZWZpbmUgTUJYX0NPTkZJR19NU0kgICAgICAweDMwCiAjZGVmaW5lIE1CWF9IRUFSVEJFQVQgICAgICAgMHgzMQogI2RlZmluZSBNQlhfV1JJVEVfVlBBUk1TICAgIDB4MzIKICNkZWZpbmUgTUJYX0FTWU5DRVZUX0VOQUJMRSAweDMzCiAKKyNkZWZpbmUgTUJYX1BPUlRfQ0FQQUJJTElUSUVTIDB4M0IKKyNkZWZpbmUgTUJYX1BPUlRfSU9WX0NPTlRST0wgMHgzQworCiAjZGVmaW5lIE1CWF9DT05GSUdfSEJRCSAgICAweDdDCiAjZGVmaW5lIE1CWF9MT0FEX0FSRUEgICAgICAgMHg4MQogI2RlZmluZSBNQlhfUlVOX0JJVV9ESUFHNjQgIDB4ODQKQEAgLTE0NzQsMjQgKzE1MDgsMTggQEAKIAkJCXVpbnQzMl90IGJkZUZsYWdzOjg7CS8qIEJERSBGbGFncyAwIElTIEEgU1VQUE9SVEVECiAJCQkJCQkgICBWQUxVRSAhISAqLwogI2VuZGlmCi0KLSNkZWZpbmUgQlVGRl9VU0VfUlNWRCAgICAgICAweDAxCS8qIGJkZUZsYWdzICovCi0jZGVmaW5lIEJVRkZfVVNFX0lOVFJQVCAgICAgMHgwMgkvKiBOb3QgSW1wbGVtZW50ZWQgd2l0aCBMUDYwMDAgKi8KLSNkZWZpbmUgQlVGRl9VU0VfQ01ORCAgICAgICAweDA0CS8qIE9wdGlvbmFsLCAxPWNtZC9yc3AgMD1kYXRhIGJ1ZmZlciAqLwotI2RlZmluZSBCVUZGX1VTRV9SQ1YgICAgICAgIDB4MDgJLyogICIiICIiLCAxPXJjdiBidWZmZXIsIDA9eG1pdAotCQkJCQkgICAgYnVmZmVyICovCi0jZGVmaW5lIEJVRkZfVFlQRV8zMkJJVCAgICAgMHgxMAkvKiAgIiIgIiIsIDE9MzIgYml0IGFkZHIgMD02NCBiaXQKLQkJCQkJICAgIGFkZHIgKi8KLSNkZWZpbmUgQlVGRl9UWVBFX1NQRUNJQUwgICAweDIwCS8qIE5vdCBJbXBsZW1lbnRlZCB3aXRoIExQNjAwMCAgKi8KLSNkZWZpbmUgQlVGRl9UWVBFX0JETCAgICAgICAweDQwCS8qIE9wdGlvbmFsLCAgbWF5IGJlIHNldCBpbiBCREwgKi8KLSNkZWZpbmUgQlVGRl9UWVBFX0lOVkFMSUQgICAweDgwCS8qICAiIiAgIiIgKi8KKyNkZWZpbmUgQlVGRl9UWVBFX0JERV82NCAgICAweDAwCS8qIEJERSAoSG9zdF9yZXNpZGVudCkgKi8KKyNkZWZpbmUgQlVGRl9UWVBFX0JERV9JTU1FRCAweDAxCS8qIEltbWVkaWF0ZSBEYXRhIEJERSAqLworI2RlZmluZSBCVUZGX1RZUEVfQkRFXzY0UCAgIDB4MDIJLyogQkRFIChQb3J0LXJlc2lkZW50KSAqLworI2RlZmluZSBCVUZGX1RZUEVfQkRFXzY0SSAgIDB4MDgJLyogSW5wdXQgQkRFIChIb3N0LXJlc2lkZW50KSAqLworI2RlZmluZSBCVUZGX1RZUEVfQkRFXzY0SVAgIDB4MEEJLyogSW5wdXQgQkRFIChQb3J0LXJlc2lkZW50KSAqLworI2RlZmluZSBCVUZGX1RZUEVfQkxQXzY0ICAgIDB4NDAJLyogQkxQIChIb3N0LXJlc2lkZW50KSAqLworI2RlZmluZSBCVUZGX1RZUEVfQkxQXzY0UCAgIDB4NDIJLyogQkxQIChQb3J0LXJlc2lkZW50KSAqLwogCQl9IGY7CiAJfSB0dXM7CiAJdWludDMyX3QgYWRkckxvdzsKIAl1aW50MzJfdCBhZGRySGlnaDsKIH07Ci0jZGVmaW5lIEJERTY0X1NJWkVfV09SRCAwCi0jZGVmaW5lIEJQTDY0X1NJWkVfV09SRCAweDQwCiAKIHR5cGVkZWYgc3RydWN0IFVMUF9CREwgewkvKiBTTEktMiAqLwogI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRApAQCAtMjIwMSw3ICsyMjI5LDEwIEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdWludDMyX3QgZXZlbnRUYWc7CS8qIEV2ZW50IHRhZyAqLwogI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAotCXVpbnQzMl90IHJzdmQxOjIyOworCXVpbnQzMl90IHJzdmQxOjE5OworCXVpbnQzMl90IGZhOjE7CisJdWludDMyX3QgbW06MTsJCS8qIE1lbmxvIE1haW50ZW5hbmNlIG1vZGUgZW5hYmxlZCAqLworCXVpbnQzMl90IHJ4OjE7CiAJdWludDMyX3QgcGI6MTsKIAl1aW50MzJfdCBpbDoxOwogCXVpbnQzMl90IGF0dFR5cGU6ODsKQEAgLTIyMDksNyArMjI0MCwxMCBAQAogCXVpbnQzMl90IGF0dFR5cGU6ODsKIAl1aW50MzJfdCBpbDoxOwogCXVpbnQzMl90IHBiOjE7Ci0JdWludDMyX3QgcnN2ZDE6MjI7CisJdWludDMyX3Qgcng6MTsKKwl1aW50MzJfdCBtbToxOworCXVpbnQzMl90IGZhOjE7CisJdWludDMyX3QgcnN2ZDE6MTk7CiAjZW5kaWYKIAogI2RlZmluZSBBVF9SRVNFUlZFRCAgICAweDAwCS8qIFJlc2VydmVkIC0gYXR0VHlwZSAqLwpAQCAtMjIzMCw2ICsyMjY0LDcgQEAKIAogI2RlZmluZSBUT1BPTE9HWV9QVF9QVCAweDAxCS8qIFRvcG9sb2d5IGlzIHB0LXB0IC8gcHQtZmFicmljICovCiAjZGVmaW5lIFRPUE9MT0dZX0xPT1AgIDB4MDIJLyogVG9wb2xvZ3kgaXMgRkMtQUwgKi8KKyNkZWZpbmUgVE9QT0xPR1lfTE5LX01FTkxPX01BSU5URU5BTkNFIDB4MDUgLyogbWFpbnQgbW9kZSB6ZXBodHIgdG8gbWVubG8gKi8KIAogCXVuaW9uIHsKIAkJc3RydWN0IHVscF9iZGUgbGlscEJkZTsgLyogVGhpcyBCREUgcG9pbnRzIHRvIGEgMTI4IGJ5dGUgYnVmZmVyCkBAIC0yMzI0LDYgKzIzNTksMzYgQEAKICNkZWZpbmUgIERNUF9SU1BfT0ZGU0VUICAgICAgICAgIDB4MTQgICAvKiB3b3JkIDUgY29udGFpbnMgZmlyc3Qgd29yZCBvZiByc3AgKi8KICNkZWZpbmUgIERNUF9SU1BfU0laRSAgICAgICAgICAgIDB4NkMgICAvKiBtYXhpbXVtIG9mIDI3IHdvcmRzIG9mIHJzcCBkYXRhICovCiAKKy8qIFN0cnVjdHVyZSBmb3IgTUIgQ29tbWFuZCBVUERBVEVfQ0ZHICgweDFCKSAqLworCitzdHJ1Y3QgdXBkYXRlX2NmZ192YXIgeworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorCXVpbnQzMl90IHJzdmQyOjE2OworCXVpbnQzMl90IHR5cGU6ODsKKwl1aW50MzJfdCByc3ZkOjE7CisJdWludDMyX3QgcmE6MTsKKwl1aW50MzJfdCBjbzoxOworCXVpbnQzMl90IGN2OjE7CisJdWludDMyX3QgcmVxOjQ7CisJdWludDMyX3QgZW50cnlfbGVuZ3RoOjE2OworCXVpbnQzMl90IHJlZ2lvbl9pZDoxNjsKKyNlbHNlICAvKiAgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEICovCisJdWludDMyX3QgcmVxOjQ7CisJdWludDMyX3QgY3Y6MTsKKwl1aW50MzJfdCBjbzoxOworCXVpbnQzMl90IHJhOjE7CisJdWludDMyX3QgcnN2ZDoxOworCXVpbnQzMl90IHR5cGU6ODsKKwl1aW50MzJfdCByc3ZkMjoxNjsKKwl1aW50MzJfdCByZWdpb25faWQ6MTY7CisJdWludDMyX3QgZW50cnlfbGVuZ3RoOjE2OworI2VuZGlmCisKKwl1aW50MzJfdCByZXNwX2luZm87CisJdWludDMyX3QgYnl0ZV9jbnQ7CisJdWludDMyX3QgZGF0YV9vZmZzZXQ7Cit9OworCiBzdHJ1Y3QgaGJxX21hc2sgewogI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAogCXVpbnQ4X3QgdG1hdGNoOwpAQCAtMjU2MCw2ICsyNjI1LDQwIEBACiAKIH0gQ09ORklHX1BPUlRfVkFSOwogCisvKiBTdHJ1Y3R1cmUgZm9yIE1CIENvbW1hbmQgQ09ORklHX01TSSAoMHgzMCkgKi8KK3N0cnVjdCBjb25maWdfbXNpX3ZhciB7CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisJdWludDMyX3QgZGZsdE1zZ051bTo4OwkvKiBEZWZhdWx0IG1lc3NhZ2UgbnVtYmVyICAgICAgICAgICAgKi8KKwl1aW50MzJfdCByc3ZkMToxMTsJLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdWludDMyX3QgTklEOjU7CQkvKiBOdW1iZXIgb2Ygc2Vjb25kYXJ5IGF0dGVudGlvbiBJRHMgKi8KKwl1aW50MzJfdCByc3ZkMjo1OwkvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCBkZmx0UHJlc2VudDoxOwkvKiBEZWZhdWx0IG1lc3NhZ2UgbnVtYmVyIHByZXNlbnQgICAgKi8KKwl1aW50MzJfdCBhZGRGbGFnOjE7CS8qIEFkZCBhc3NvY2lhdGlvbiBmbGFnICAgICAgICAgICAgICAqLworCXVpbnQzMl90IHJlcG9ydEZsYWc6MTsJLyogUmVwb3J0IGFzc29jaWF0aW9uIGZsYWcgICAgICAgICAgICovCisjZWxzZQkvKiAgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEICovCisJdWludDMyX3QgcmVwb3J0RmxhZzoxOwkvKiBSZXBvcnQgYXNzb2NpYXRpb24gZmxhZyAgICAgICAgICAgKi8KKwl1aW50MzJfdCBhZGRGbGFnOjE7CS8qIEFkZCBhc3NvY2lhdGlvbiBmbGFnICAgICAgICAgICAgICAqLworCXVpbnQzMl90IGRmbHRQcmVzZW50OjE7CS8qIERlZmF1bHQgbWVzc2FnZSBudW1iZXIgcHJlc2VudCAgICAqLworCXVpbnQzMl90IHJzdmQyOjU7CS8qIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90IE5JRDo1OwkJLyogTnVtYmVyIG9mIHNlY29uZGFyeSBhdHRlbnRpb24gSURzICovCisJdWludDMyX3QgcnN2ZDE6MTE7CS8qIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90IGRmbHRNc2dOdW06ODsJLyogRGVmYXVsdCBtZXNzYWdlIG51bWJlciAgICAgICAgICAgICovCisjZW5kaWYKKwl1aW50MzJfdCBhdHRlbnRpb25Db25kaXRpb25zWzJdOworCXVpbnQ4X3QgIGF0dGVudGlvbklkWzE2XTsKKwl1aW50OF90ICBtZXNzYWdlTnVtYmVyQnlIQVs2NF07CisJdWludDhfdCAgbWVzc2FnZU51bWJlckJ5SURbMTZdOworCXVpbnQzMl90IGF1dG9DbGVhckhBWzJdOworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorCXVpbnQzMl90IHJzdmQzOjE2OworCXVpbnQzMl90IGF1dG9DbGVhcklEOjE2OworI2Vsc2UJLyogIF9fTElUVExFX0VORElBTl9CSVRGSUVMRCAqLworCXVpbnQzMl90IGF1dG9DbGVhcklEOjE2OworCXVpbnQzMl90IHJzdmQzOjE2OworI2VuZGlmCisJdWludDMyX3QgcnN2ZDQ7Cit9OworCiAvKiBTTEktMiBQb3J0IENvbnRyb2wgQmxvY2sgKi8KIAogLyogU0xJTSBQT0lOVEVSICovCkBAIC0yNjc4LDEwICsyNzc3LDEyIEBACiAJCQkJCSAqIE5FV19GRUFUVVJFCiAJCQkJCSAqLwogCXN0cnVjdCBjb25maWdfaGJxX3ZhciB2YXJDZmdIYnE7LyogY21kID0gMHg3YyAoQ09ORklHX0hCUSkgICovCisJc3RydWN0IHVwZGF0ZV9jZmdfdmFyIHZhclVwZGF0ZUNmZzsgLyogY21kID0gMHgxQiAoVVBEQVRFX0NGRykqLwogCUNPTkZJR19QT1JUX1ZBUiB2YXJDZmdQb3J0OwkvKiBjbWQgPSAweDg4IChDT05GSUdfUE9SVCkgICovCiAJUkVHX1ZQSV9WQVIgdmFyUmVnVnBpOwkJLyogY21kID0gMHg5NiAoUkVHX1ZQSSkgKi8KIAlVTlJFR19WUElfVkFSIHZhclVucmVnVnBpOwkvKiBjbWQgPSAweDk3IChVTlJFR19WUEkpICovCiAJQVNZTkNFVlRfRU5BQkxFX1ZBUiB2YXJDZmdBc3luY0V2ZW50OyAvKmNtZCA9IHgzMyAoQ09ORklHX0FTWU5DKSAqLworCXN0cnVjdCBjb25maWdfbXNpX3ZhciB2YXJDZmdNU0k7LyogY21kID0geDMwIChDT05GSUdfTVNJKSAgICAgKi8KIH0gTUFJTFZBUklBTlRTOwogCiAvKgpAQCAtMjcxNSwxMSArMjgxNiwxOSBAQAogCXVpbnQzMl90IGhicV9nZXRbMTZdOwogfTsKIAotdHlwZWRlZiB1bmlvbiB7Ci0Jc3RydWN0IHNsaTJfZGVzYyBzMjsKLQlzdHJ1Y3Qgc2xpM19kZXNjIHMzOwotCXN0cnVjdCBzbGkzX3BncCAgczNfcGdwOwotfSBTTElfVkFSOworc3RydWN0IHNsaTNfaW5iX3BncCB7CisJdWludDMyX3QgaGFfY29weTsKKwl1aW50MzJfdCBjb3VudGVyOworCXN0cnVjdCBscGZjX3BncCBwb3J0W01BWF9SSU5HU107CisJdWludDMyX3QgaGJxX2dldFsxNl07Cit9OworCit1bmlvbiBzbGlfdmFyIHsKKwlzdHJ1Y3Qgc2xpMl9kZXNjCXMyOworCXN0cnVjdCBzbGkzX2Rlc2MJczM7CisJc3RydWN0IHNsaTNfcGdwCQlzM19wZ3A7CisJc3RydWN0IHNsaTNfaW5iX3BncAlzM19pbmJfcGdwOworfTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRApAQCAtMjczNyw3ICsyODQ2LDcgQEAKICNlbmRpZgogCiAJTUFJTFZBUklBTlRTIHVuOwotCVNMSV9WQVIgdXM7CisJdW5pb24gc2xpX3ZhciB1czsKIH0gTUFJTEJPWF90OwogCiAvKgpAQCAtMzEwNSw2ICszMjE0LDI3IEBACiAJc3RydWN0IGxwZmNfaGJxX2VudHJ5CWJ1ZmZbNV07CiB9OwogCisjZGVmaW5lIExQRkNfRVhUX0RBVEFfQkRFX0NPVU5UIDMKK3N0cnVjdCBmY3BfaXJ3X2V4dCB7CisJdWludDMyX3QJaW9fdGFnNjRfbG93OworCXVpbnQzMl90CWlvX3RhZzY0X2hpZ2g7CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisJdWludDhfdAkJcmVzZXJ2ZWQxOworCXVpbnQ4X3QJCXJlc2VydmVkMjsKKwl1aW50OF90CQlyZXNlcnZlZDM7CisJdWludDhfdAkJZWJkZV9jb3VudDsKKyNlbHNlICAvKiBfX0xJVFRMRV9FTkRJQU4gKi8KKwl1aW50OF90CQllYmRlX2NvdW50OworCXVpbnQ4X3QJCXJlc2VydmVkMzsKKwl1aW50OF90CQlyZXNlcnZlZDI7CisJdWludDhfdAkJcmVzZXJ2ZWQxOworI2VuZGlmCisJdWludDMyX3QJcmVzZXJ2ZWQ0OworCXN0cnVjdCB1bHBfYmRlNjQgcmJkZTsJCS8qIHJlc3BvbnNlIGJkZSAqLworCXN0cnVjdCB1bHBfYmRlNjQgZGJkZVtMUEZDX0VYVF9EQVRBX0JERV9DT1VOVF07CS8qIGRhdGEgQkRFIG9yIEJQTCAqLworCXVpbnQ4X3QgaWNkWzMyXTsJCS8qIGltbWVkaWF0ZSBjb21tYW5kIGRhdGEgKDMyIGJ5dGVzKSAqLworfTsKKwogdHlwZWRlZiBzdHJ1Y3QgX0lPQ0IgewkvKiBJT0NCIHN0cnVjdHVyZSAqLwogCXVuaW9uIHsKIAkJR0VORVJJQ19SU1AgZ3JzcDsJLyogR2VuZXJpYyByZXNwb25zZSAqLwpAQCAtMzE5MCw3ICszMzIwLDcgQEAKIAogCQkvKiB3b3JkcyA4LTMxIHVzZWQgZm9yIHF1ZV94cmlfY3ggaW9jYiAqLwogCQlzdHJ1Y3QgcXVlX3hyaTY0Y3hfZXh0X2ZpZWxkcyBxdWVfeHJpNjRjeF9leHRfd29yZHM7Ci0KKwkJc3RydWN0IGZjcF9pcndfZXh0IGZjcF9leHQ7CiAJCXVpbnQzMl90IHNsaTNXb3Jkc1syNF07IC8qIDk2IGV4dHJhIGJ5dGVzIGZvciBTTEktMyAqLwogCX0gdW5zbGkzOwogCkBAIC0zMjkyLDMgKzM0MjIsMTAgQEAKIAkJIGlvY2JwLT51bi51bHBXb3JkWzRdID09IElPRVJSX0xJTktfRE9XTiB8fAogCQkgaW9jYnAtPnVuLnVscFdvcmRbNF0gPT0gSU9FUlJfU0xJX0RPV04pKTsKIH0KKworI2RlZmluZSBNRU5MT19UUkFOU1BPUlRfVFlQRSAweGZlCisjZGVmaW5lIE1FTkxPX0NPTlRFWFQgMAorI2RlZmluZSBNRU5MT19QVSAzCisjZGVmaW5lIE1FTkxPX1RJTUVPVVQgMzAKKyNkZWZpbmUgU0VUVkFSX01MT01OVCAweDEwMzEwNworI2RlZmluZSBTRVRWQVJfTUxPUlNUIDB4MTAzMDA3CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCmluZGV4IGQ1MWEyYTQuLjkwOWJlMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlICJscGZjX2h3LmgiCiAjaW5jbHVkZSAibHBmY19zbGkuaCIKKyNpbmNsdWRlICJscGZjX25sLmgiCiAjaW5jbHVkZSAibHBmY19kaXNjLmgiCiAjaW5jbHVkZSAibHBmY19zY3NpLmgiCiAjaW5jbHVkZSAibHBmYy5oIgpAQCAtNTIsMTcgKzUzLDIwIEBACiBzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpscGZjX3Zwb3J0X3RyYW5zcG9ydF90ZW1wbGF0ZSA9IE5VTEw7CiBzdGF0aWMgREVGSU5FX0lEUihscGZjX2hiYV9pbmRleCk7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgbHBmY19jb25maWdfcG9ydF9wcmVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoaXMgcm91dGluZSB3aWxsIGRvIExQRkMgaW5pdGlhbGl6YXRpb24gcHJpb3IgdG8gdGhlICAgICAgICAgICAgICovCi0vKiAgICBDT05GSUdfUE9SVCBtYWlsYm94IGNvbW1hbmQuIFRoaXMgd2lsbCBiZSBpbml0aWFsaXplZCAgICAgICAgICAgICAqLwotLyogICAgYXMgYSBTTEkgbGF5ZXIgY2FsbGJhY2sgcm91dGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoaXMgcm91dGluZSByZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRVJFU1RBUlQgaWYgaXQgd2FudHMgICAgICAgICovCi0vKiAgICB0aGUgU0xJIGxheWVyIHRvIHJlc2V0IHRoZSBIQkEgYW5kIHRyeSBhZ2Fpbi4gQW55ICAgICAgICAgICAgICAgICAqLwotLyogICAgb3RoZXIgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2NvbmZpZ19wb3J0X3ByZXA6IFBlcmZvcm0gbHBmYyBpbml0aWFsaXphdGlvbiBwcmlvciB0byBjb25maWcgcG9ydC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSB3aWxsIGRvIExQRkMgaW5pdGlhbGl6YXRpb24gcHJpb3IgdG8gaXNzdWluZyB0aGUgQ09ORklHX1BPUlQKKyAqIG1haWxib3ggY29tbWFuZC4gSXQgcmV0cmlldmVzIHRoZSByZXZpc2lvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBIQkEgYW5kCisgKiBjb2xsZWN0cyB0aGUgVml0YWwgUHJvZHVjdCBEYXRhIChWUEQpIGFib3V0IHRoZSBIQkEgZm9yIHByZXBhcmluZyB0aGUKKyAqIGNvbmZpZ3VyYXRpb24gb2YgdGhlIEhCQS4KKyAqCisgKiBSZXR1cm4gY29kZXM6CisgKiAgIDAgLSBzdWNjZXNzLgorICogICAtRVJFU1RBUlQgLSByZXF1ZXN0cyB0aGUgU0xJIGxheWVyIHRvIHJlc2V0IHRoZSBIQkEgYW5kIHRyeSBhZ2Fpbi4KKyAqICAgQW55IG90aGVyIHZhbHVlIC0gaW5kaWNhdGVzIGFuIGVycm9yLgorICoqLwogaW50CiBscGZjX2NvbmZpZ19wb3J0X3ByZXAoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMTgwLDEyICsxODQsOSBAQAogCQkJCQkJc2l6ZW9mIChwaGJhLT5SYW5kb21EYXRhKSk7CiAKIAkvKiBHZXQgYWRhcHRlciBWUEQgaW5mb3JtYXRpb24gKi8KLQlwbWItPmNvbnRleHQyID0ga21hbGxvYyhETVBfUlNQX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghcG1iLT5jb250ZXh0MikKLQkJZ290byBvdXRfZnJlZV9tYm94OwogCWxwZmNfdnBkX2RhdGEgPSBrbWFsbG9jKERNUF9WUERfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFscGZjX3ZwZF9kYXRhKQotCQlnb3RvIG91dF9mcmVlX2NvbnRleHQyOworCQlnb3RvIG91dF9mcmVlX21ib3g7CiAKIAlkbyB7CiAJCWxwZmNfZHVtcF9tZW0ocGhiYSwgcG1iLCBvZmZzZXQpOwpAQCAtMjAwLDIxICsyMDEsMjkgQEAKIAkJfQogCQlpZiAobWItPnVuLnZhckRtcC53b3JkX2NudCA+IERNUF9WUERfU0laRSAtIG9mZnNldCkKIAkJCW1iLT51bi52YXJEbXAud29yZF9jbnQgPSBETVBfVlBEX1NJWkUgLSBvZmZzZXQ7Ci0JCWxwZmNfc2xpX3BjaW1lbV9iY29weShwbWItPmNvbnRleHQyLCBscGZjX3ZwZF9kYXRhICsgb2Zmc2V0LAorCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkoKCh1aW50OF90ICopbWIpICsgRE1QX1JTUF9PRkZTRVQsCisJCQkJICAgICAgbHBmY192cGRfZGF0YSArIG9mZnNldCwKIAkJCQkgICAgICBtYi0+dW4udmFyRG1wLndvcmRfY250KTsKIAkJb2Zmc2V0ICs9IG1iLT51bi52YXJEbXAud29yZF9jbnQ7CiAJfSB3aGlsZSAobWItPnVuLnZhckRtcC53b3JkX2NudCAmJiBvZmZzZXQgPCBETVBfVlBEX1NJWkUpOwogCWxwZmNfcGFyc2VfdnBkKHBoYmEsIGxwZmNfdnBkX2RhdGEsIG9mZnNldCk7CiAKIAlrZnJlZShscGZjX3ZwZF9kYXRhKTsKLW91dF9mcmVlX2NvbnRleHQyOgotCWtmcmVlKHBtYi0+Y29udGV4dDIpOwogb3V0X2ZyZWVfbWJveDoKIAltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAlyZXR1cm4gMDsKIH0KIAotLyogQ29tcGxldGlvbiBoYW5kbGVyIGZvciBjb25maWcgYXN5bmMgZXZlbnQgbWFpbGJveCBjb21tYW5kLiAqLworLyoqCisgKiBscGZjX2NvbmZpZ19hc3luY19jbXBsOiBDb21wbGV0aW9uIGhhbmRsZXIgZm9yIGNvbmZpZyBhc3luYyBldmVudCBtYm94IGNtZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYm94cTogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGlzIGlzIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGRyaXZlcidzIGNvbmZpZ3VyaW5nIGFzeW5jaHJvbm91cyBldmVudAorICogbWFpbGJveCBjb21tYW5kIHRvIHRoZSBkZXZpY2UuIElmIHRoZSBtYWlsYm94IGNvbW1hbmQgcmV0dXJucyBzdWNjZXNzZnVsbHksCisgKiBpdCB3aWxsIHNldCBpbnRlcm5hbCBhc3luYyBldmVudCBzdXBwb3J0IGZsYWcgdG8gMTsgb3RoZXJ3aXNlLCBpdCB3aWxsCisgKiBzZXQgaW50ZXJuYWwgYXN5bmMgZXZlbnQgc3VwcG9ydCBmbGFnIHRvIDAuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jb25maWdfYXN5bmNfY21wbChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWJveHEpCiB7CkBAIC0yMjYsMTYgKzIzNSwxOSBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBscGZjX2NvbmZpZ19wb3J0X3Bvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhpcyByb3V0aW5lIHdpbGwgZG8gTFBGQyBpbml0aWFsaXphdGlvbiBhZnRlciB0aGUgICAgICAgICAgICAgICAgKi8KLS8qICAgIENPTkZJR19QT1JUIG1haWxib3ggY29tbWFuZC4gVGhpcyB3aWxsIGJlIGluaXRpYWxpemVkICAgICAgICAgICAgICovCi0vKiAgICBhcyBhIFNMSSBsYXllciBjYWxsYmFjayByb3V0aW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhpcyByb3V0aW5lIHJldHVybnMgMCBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgcmV0dXJuIHZhbHVlICAgICAgICAgKi8KLS8qICAgIGluZGljYXRlcyBhbiBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19jb25maWdfcG9ydF9wb3N0OiBQZXJmb3JtIGxwZmMgaW5pdGlhbGl6YXRpb24gYWZ0ZXIgY29uZmlnIHBvcnQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBkbyBMUEZDIGluaXRpYWxpemF0aW9uIGFmdGVyIHRoZSBDT05GSUdfUE9SVCBtYWlsYm94CisgKiBjb21tYW5kIGNhbGwuIEl0IHBlcmZvcm1zIGFsbCBpbnRlcm5hbCByZXNvdXJjZSBhbmQgc3RhdGUgc2V0dXBzIG9uIHRoZQorICogcG9ydDogcG9zdCBJT0NCIGJ1ZmZlcnMsIGVuYWJsZSBhcHByb3ByaWF0ZSBob3N0IGludGVycnVwdCBhdHRlbnRpb25zLAorICogRUxTIHJpbmcgdGltZXJzLCBldGMuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBzdWNjZXNzLgorICogICBBbnkgb3RoZXIgdmFsdWUgLSBlcnJvci4KKyAqKi8KIGludAogbHBmY19jb25maWdfcG9ydF9wb3N0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTM3OCw2ICszOTAsMjkgQEAKIAlpZiAocGhiYS0+c2xpX3JldiAhPSAzKQogCQlscGZjX3Bvc3RfcmN2X2J1ZihwaGJhKTsKIAorCS8qCisJICogQ29uZmlndXJlIEhCQSBNU0ktWCBhdHRlbnRpb24gY29uZGl0aW9ucyB0byBtZXNzYWdlcyBpZiBNU0ktWCBtb2RlCisJICovCisJaWYgKHBoYmEtPmludHJfdHlwZSA9PSBNU0lYKSB7CisJCXJjID0gbHBmY19jb25maWdfbXNpKHBoYmEsIHBtYik7CisJCWlmIChyYykgeworCQkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfUE9MTCk7CisJCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTUJPWCwKKwkJCQkJIjAzNTIgQ29uZmlnIE1TSSBtYWlsYm94IGNvbW1hbmQgIgorCQkJCQkiZmFpbGVkLCBtYnhDbWQgeCV4LCBtYnhTdGF0dXMgeCV4XG4iLAorCQkJCQlwbWItPm1iLm1ieENvbW1hbmQsIHBtYi0+bWIubWJ4U3RhdHVzKTsKKwkJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwkvKiBJbml0aWFsaXplIEVSQVRUIGhhbmRsaW5nIGZsYWcgKi8KKwlwaGJhLT5oYmFfZmxhZyAmPSB+SEJBX0VSQVRUX0hBTkRMRUQ7CisKIAkvKiBFbmFibGUgYXBwcm9wcmlhdGUgaG9zdCBpbnRlcnJ1cHRzICovCiAJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJc3RhdHVzID0gcmVhZGwocGhiYS0+SENyZWdhZGRyKTsKQEAgLTM5MywyNiArNDI4LDI2IEBACiAKIAlpZiAoKHBoYmEtPmNmZ19wb2xsICYgRU5BQkxFX0ZDUF9SSU5HX1BPTExJTkcpICYmCiAJICAgIChwaGJhLT5jZmdfcG9sbCAmIERJU0FCTEVfRkNQX1JJTkdfSU5UKSkKLQkJc3RhdHVzICY9IH4oSENfUjBJTlRfRU5BIDw8IExQRkNfRkNQX1JJTkcpOworCQlzdGF0dXMgJj0gfihIQ19SMElOVF9FTkEpOwogCiAJd3JpdGVsKHN0YXR1cywgcGhiYS0+SENyZWdhZGRyKTsKIAlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLwogCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAKLQkvKgotCSAqIFNldHVwIHRoZSByaW5nIDAgKGVscykgIHRpbWVvdXQgaGFuZGxlcgotCSAqLwotCXRpbWVvdXQgPSBwaGJhLT5mY19yYXRvdiA8PCAxOworCS8qIFNldCB1cCByaW5nLTAgKEVMUykgdGltZXIgKi8KKwl0aW1lb3V0ID0gcGhiYS0+ZmNfcmF0b3YgKiAyOwogCW1vZF90aW1lcigmdnBvcnQtPmVsc190bW9mdW5jLCBqaWZmaWVzICsgSFogKiB0aW1lb3V0KTsKKwkvKiBTZXQgdXAgaGVhcnQgYmVhdCAoSEIpIHRpbWVyICovCiAJbW9kX3RpbWVyKCZwaGJhLT5oYl90bW9mdW5jLCBqaWZmaWVzICsgSFogKiBMUEZDX0hCX01CT1hfSU5URVJWQUwpOwogCXBoYmEtPmhiX291dHN0YW5kaW5nID0gMDsKIAlwaGJhLT5sYXN0X2NvbXBsZXRpb25fdGltZSA9IGppZmZpZXM7CisJLyogU2V0IHVwIGVycm9yIGF0dGVudGlvbiAoRVJBVFQpIHBvbGxpbmcgdGltZXIgKi8KKwltb2RfdGltZXIoJnBoYmEtPmVyYXR0X3BvbGwsIGppZmZpZXMgKyBIWiAqIExQRkNfRVJBVFRfUE9MTF9JTlRFUlZBTCk7CiAKIAlscGZjX2luaXRfbGluayhwaGJhLCBwbWIsIHBoYmEtPmNmZ190b3BvbG9neSwgcGhiYS0+Y2ZnX2xpbmtfc3BlZWQpOwogCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKLQlwbWItPnZwb3J0ID0gdnBvcnQ7Ci0JcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX05PV0FJVCk7CiAJbHBmY19zZXRfbG9vcGJhY2tfZmxhZyhwaGJhKTsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfTk9XQUlUKTsKIAlpZiAocmMgIT0gTUJYX1NVQ0NFU1MpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKIAkJCQkiMDQ1NCBBZGFwdGVyIGZhaWxlZCB0byBpbml0LCBtYnhDbWQgeCV4ICIKQEAgLTQ0NywxOSArNDgyLDIwIEBACiAJCQkJcmMpOwogCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAl9Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBscGZjX2hiYV9kb3duX3ByZXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhpcyByb3V0aW5lIHdpbGwgZG8gTFBGQyB1bmluaXRpYWxpemF0aW9uIGJlZm9yZSB0aGUgICAgICAgICAgICAgKi8KLS8qICAgIEhCQSBpcyByZXNldCB3aGVuIGJyaW5naW5nIGRvd24gdGhlIFNMSSBMYXllci4gVGhpcyB3aWxsIGJlICAgICAgICovCi0vKiAgICBpbml0aWFsaXplZCBhcyBhIFNMSSBsYXllciBjYWxsYmFjayByb3V0aW5lLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhpcyByb3V0aW5lIHJldHVybnMgMCBvbiBzdWNjZXNzLiBBbnkgb3RoZXIgcmV0dXJuIHZhbHVlICAgICAgICAgKi8KLS8qICAgIGluZGljYXRlcyBhbiBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19oYmFfZG93bl9wcmVwOiBQZXJmb3JtIGxwZmMgdW5pbml0aWFsaXphdGlvbiBwcmlvciB0byBIQkEgcmVzZXQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIEhCQSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBkbyBMUEZDIHVuaW5pdGlhbGl6YXRpb24gYmVmb3JlIHRoZSBIQkEgaXMgcmVzZXQgd2hlbgorICogYnJpbmdpbmcgZG93biB0aGUgU0xJIExheWVyLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAwIC0gc3VjY2Vzcy4KKyAqICAgQW55IG90aGVyIHZhbHVlIC0gZXJyb3IuCisgKiovCiBpbnQKIGxwZmNfaGJhX2Rvd25fcHJlcChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC00ODEsMTUgKzUxNywxNyBAQAogCXJldHVybiAwOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGxwZmNfaGJhX2Rvd25fcG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGlzIHJvdXRpbmUgd2lsbCBkbyB1bmluaXRpYWxpemF0aW9uIGFmdGVyIHRoZSBIQkEgaXMgcmVzZXQgICAgICAqLwotLyogICAgd2hlbiBicmluZ2luZyBkb3duIHRoZSBTTEkgTGF5ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoaXMgcm91dGluZSByZXR1cm5zIDAgb24gc3VjY2Vzcy4gQW55IG90aGVyIHJldHVybiB2YWx1ZSAgICAgICAgICovCi0vKiAgICBpbmRpY2F0ZXMgYW4gZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfaGJhX2Rvd25fcG9zdDogUGVyZm9ybSBscGZjIHVuaW5pdGlhbGl6YXRpb24gYWZ0ZXIgSEJBIHJlc2V0LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBIQkEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgZG8gdW5pbml0aWFsaXphdGlvbiBhZnRlciB0aGUgSEJBIGlzIHJlc2V0IHdoZW4gYnJpbmcKKyAqIGRvd24gdGhlIFNMSSBMYXllci4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgMCAtIHN1Y2Vzcy4KKyAqICAgQW55IG90aGVyIHZhbHVlIC0gZXJyb3IuCisgKiovCiBpbnQKIGxwZmNfaGJhX2Rvd25fcG9zdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC01NDgsNyArNTg2LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIEhCQSBoZWFydCBiZWF0IHRpbWVvdXQgaGFuZGxlciAqLworLyoqCisgKiBscGZjX2hiX3RpbWVvdXQ6IFRoZSBIQkEtdGltZXIgdGltZW91dCBoYW5kbGVyLgorICogQHB0cjogdW5zaWduZWQgbG9uZyBob2xkcyB0aGUgcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGlzIHRoZSBIQkEtdGltZXIgdGltZW91dCBoYW5kbGVyIHJlZ2lzdGVyZWQgdG8gdGhlIGxwZmMgZHJpdmVyLiBXaGVuCisgKiB0aGlzIHRpbWVyIGZpcmVzLCBhIEhCQSB0aW1lb3V0IGV2ZW50IHNoYWxsIGJlIHBvc3RlZCB0byB0aGUgbHBmYyBkcml2ZXIKKyAqIHdvcmstcG9ydC1ldmVudHMgYml0bWFwIGFuZCB0aGUgd29ya2VyIHRocmVhZCBpcyBub3RpZmllZC4gVGhpcyB0aW1lb3V0CisgKiBldmVudCB3aWxsIGJlIHVzZWQgYnkgdGhlIHdvcmtlciB0aHJlYWQgdG8gaW52b2tlIHRoZSBhY3R1YWwgdGltZW91dAorICogaGFuZGxlciByb3V0aW5lLCBscGZjX2hiX3RpbWVvdXRfaGFuZGxlci4gQW55IHBlcmlvZGljYWwgb3BlcmF0aW9ucyB3aWxsCisgKiBiZSBwZXJmb3JtZWQgaW4gdGhlIHRpbWVvdXQgaGFuZGxlciBhbmQgdGhlIEhCQSB0aW1lb3V0IGV2ZW50IGJpdCBzaGFsbAorICogYmUgY2xlYXJlZCBieSB0aGUgd29ya2VyIHRocmVhZCBhZnRlciBpdCBoYXMgdGFrZW4gdGhlIGV2ZW50IGJpdG1hcCBvdXQuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19oYl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgcHRyKQogewpAQCAtNTU3LDE3ICs2MDYsMzYgQEAKIAl1bnNpZ25lZCBsb25nIGlmbGFnOwogCiAJcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilwdHI7CisKKwkvKiBDaGVjayBmb3IgaGVhcnQgYmVhdCB0aW1lb3V0IGNvbmRpdGlvbnMgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9sb2NrLCBpZmxhZyk7CiAJdG1vX3Bvc3RlZCA9IHBoYmEtPnBwb3J0LT53b3JrX3BvcnRfZXZlbnRzICYgV09SS0VSX0hCX1RNTzsKIAlpZiAoIXRtb19wb3N0ZWQpCiAJCXBoYmEtPnBwb3J0LT53b3JrX3BvcnRfZXZlbnRzIHw9IFdPUktFUl9IQl9UTU87CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+cHBvcnQtPndvcmtfcG9ydF9sb2NrLCBpZmxhZyk7CiAKKwkvKiBUZWxsIHRoZSB3b3JrZXIgdGhyZWFkIHRoZXJlIGlzIHdvcmsgdG8gZG8gKi8KIAlpZiAoIXRtb19wb3N0ZWQpCiAJCWxwZmNfd29ya2VyX3dha2VfdXAocGhiYSk7CiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfaGJfbWJveF9jbXBsOiBUaGUgbHBmYyBoZWFydC1iZWF0IG1haWxib3ggY29tbWFuZCBjYWxsYmFjayBmdW5jdGlvbi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYm94cTogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgbHBmYyBoZWFydC1iZWF0IG1haWxib3ggY29tbWFuZC4KKyAqIElmIGNvbmZpZ3VyZWQsIHRoZSBscGZjIGRyaXZlciBpc3N1ZXMgdGhlIGhlYXJ0LWJlYXQgbWFpbGJveCBjb21tYW5kIHRvCisgKiB0aGUgSEJBIGV2ZXJ5IExQRkNfSEJfTUJPWF9JTlRFUlZBTCAoY3VycmVudCA1KSBzZWNvbmRzLiBBdCB0aGUgdGltZSB0aGUKKyAqIGhlYXJ0LWJlYXQgbWFpbGJveCBjb21tYW5kIGlzIGlzc3VlZCwgdGhlIGRyaXZlciBzaGFsbCBzZXQgdXAgaGVhcnQtYmVhdAorICogdGltZW91dCB0aW1lciB0byBMUEZDX0hCX01CT1hfVElNRU9VVCAoY3VycmVudCAzMCkgc2Vjb25kcyBhbmQgbWFya3MKKyAqIGhlYXJ0LWJlYXQgb3V0c3RhbmRpbmcgc3RhdGUuIE9uY2UgdGhlIG1haWxib3ggY29tbWFuZCBjb21lcyBiYWNrIGFuZAorICogbm8gZXJyb3IgY29uZGl0aW9ucyBkZXRlY3RlZCwgdGhlIGhlYXJ0LWJlYXQgbWFpbGJveCBjb21tYW5kIHRpbWVyIGlzCisgKiByZXNldCB0byBMUEZDX0hCX01CT1hfSU5URVJWQUwgc2Vjb25kcyBhbmQgdGhlIGhlYXJ0LWJlYXQgb3V0c3RhbmRpbmcKKyAqIHN0YXRlIGlzIGNsZWFyZWQgZm9yIHRoZSBuZXh0IGhlYXJ0LWJlYXQuIElmIHRoZSB0aW1lciBleHBpcmVkIHdpdGggdGhlCisgKiBoZWFydC1iZWF0IG91dHN0YW5kaW5nIHN0YXRlIHNldCwgdGhlIGRyaXZlciB3aWxsIHB1dCB0aGUgSEJBIG9mZmxpbmUuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19oYl9tYm94X2NtcGwoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1ib3hxKQogewpAQCAtNTc3LDYgKzY0NSw3IEBACiAJcGhiYS0+aGJfb3V0c3RhbmRpbmcgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGRydnJfZmxhZyk7CiAKKwkvKiBDaGVjayBhbmQgcmVzZXQgaGVhcnQtYmVhdCB0aW1lciBpcyBuZWNlc3NhcnkgKi8KIAltZW1wb29sX2ZyZWUocG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAlpZiAoIShwaGJhLT5wcG9ydC0+ZmNfZmxhZyAmIEZDX09GRkxJTkVfTU9ERSkgJiYKIAkJIShwaGJhLT5saW5rX3N0YXRlID09IExQRkNfSEJBX0VSUk9SKSAmJgpAQCAtNTg2LDYgKzY1NSwyMiBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX2hiX3RpbWVvdXRfaGFuZGxlcjogVGhlIEhCQS10aW1lciB0aW1lb3V0IGhhbmRsZXIuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGlzIHRoZSBhY3R1YWwgSEJBLXRpbWVyIHRpbWVvdXQgaGFuZGxlciB0byBiZSBpbnZva2VkIGJ5IHRoZSB3b3JrZXIKKyAqIHRocmVhZCB3aGVuZXZlciB0aGUgSEJBIHRpbWVyIGZpcmVkIGFuZCBIQkEtdGltZW91dCBldmVudCBwb3N0ZWQuIFRoaXMKKyAqIGhhbmRsZXIgcGVyZm9ybXMgYW55IHBlcmlvZGljIG9wZXJhdGlvbnMgbmVlZGVkIGZvciB0aGUgZGV2aWNlLiBJZiBzdWNoCisgKiBwZXJpb2RpYyBldmVudCBoYXMgYWxyZWFkeSBiZWVuIGF0dGVuZGVkIHRvIGVpdGhlciBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIKKyAqIG9yIGJ5IHByb2Nlc3Npbmcgc2xvdy1yaW5nIG9yIGZhc3QtcmluZyBldmVudHMgd2l0aGluIHRoZSBIQkEtdGltZXIKKyAqIHRpbWVvdXQgd2luZG93IChMUEZDX0hCX01CT1hfSU5URVJWQUwpLCB0aGlzIGhhbmRsZXIganVzdCBzaW1wbHkgcmVzZXRzCisgKiB0aGUgdGltZXIgZm9yIHRoZSBuZXh0IHRpbWVvdXQgcGVyaW9kLiBJZiBscGZjIGhlYXJ0LWJlYXQgbWFpbGJveCBjb21tYW5kCisgKiBpcyBjb25maWd1cmVkIGFuZCB0aGVyZSBpcyBubyBoZWFydC1iZWF0IG1haWxib3ggY29tbWFuZCBvdXRzdGFuZGluZywgYQorICogaGVhcnQtYmVhdCBtYWlsYm94IGlzIGlzc3VlZCBhbmQgdGltZXIgc2V0IHByb3Blcmx5LiBPdGhlcndpc2UsIGlmIHRoZXJlCisgKiBoYXMgYmVlbiBhIGhlYXJ0LWJlYXQgbWFpbGJveCBjb21tYW5kIG91dHN0YW5kaW5nLCB0aGUgSEJBIHNoYWxsIGJlIHB1dAorICogdG8gb2ZmbGluZS4KKyAqKi8KIHZvaWQKIGxwZmNfaGJfdGltZW91dF9oYW5kbGVyKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTY4NCw2ICs3NjksMTMgQEAKIAl9CiB9CiAKKy8qKgorICogbHBmY19vZmZsaW5lX2VyYXR0OiBCcmluZyBscGZjIG9mZmxpbmUgb24gaGFyZHdhcmUgZXJyb3IgYXR0ZW50aW9uLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBicmluZyB0aGUgSEJBIG9mZmxpbmUgd2hlbiBIQkEgaGFyZHdhcmUgZXJyb3IKKyAqIG90aGVyIHRoYW4gUG9ydCBFcnJvciA2IGhhcyBiZWVuIGRldGVjdGVkLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfb2ZmbGluZV9lcmF0dChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC03MDQsMTQgKzc5NiwxNiBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBscGZjX2hhbmRsZV9lcmF0dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhpcyByb3V0aW5lIHdpbGwgaGFuZGxlIHByb2Nlc3NpbmcgYSBIb3N0IEF0dGVudGlvbiAgICAgICAgICAgICAgKi8KLS8qICAgIEVycm9yIFN0YXR1cyBldmVudC4gVGhpcyB3aWxsIGJlIGluaXRpYWxpemVkICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBhcyBhIFNMSSBsYXllciBjYWxsYmFjayByb3V0aW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfaGFuZGxlX2VyYXR0OiBUaGUgSEJBIGhhcmR3YXJlIGVycm9yIGhhbmRsZXIuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byBoYW5kbGUgdGhlIGZvbGxvd2luZyBIQkEgaGFyZHdhcmUgZXJyb3IKKyAqIGNvbmRpdGlvbnM6CisgKiAxIC0gSEJBIGVycm9yIGF0dGVudGlvbiBpbnRlcnJ1cHQKKyAqIDIgLSBETUEgcmluZyBpbmRleCBvdXQgb2YgcmFuZ2UKKyAqIDMgLSBNYWlsYm94IGNvbW1hbmQgY2FtZSBiYWNrIGFzIHVua25vd24KKyAqKi8KIHZvaWQKIGxwZmNfaGFuZGxlX2VyYXR0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTcyMiw2ICs4MTYsNyBAQAogCXVuc2lnbmVkIGxvbmcgdGVtcGVyYXR1cmU7CiAJc3RydWN0IHRlbXBfZXZlbnQgdGVtcF9ldmVudF9kYXRhOwogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdDsKKwlzdHJ1Y3QgbHBmY19ib2FyZF9ldmVudF9oZWFkZXIgYm9hcmRfZXZlbnQ7CiAKIAkvKiBJZiB0aGUgcGNpIGNoYW5uZWwgaXMgb2ZmbGluZSwgaWdub3JlIHBvc3NpYmxlIGVycm9ycywKIAkgKiBzaW5jZSB3ZSBjYW5ub3QgY29tbXVuaWNhdGUgd2l0aCB0aGUgcGNpIGNhcmQgYW55d2F5LiAqLwpAQCAtNzMxLDYgKzgyNiwxNiBAQAogCWlmICghcGhiYS0+Y2ZnX2VuYWJsZV9oYmFfcmVzZXQpCiAJCXJldHVybjsKIAorCS8qIFNlbmQgYW4gaW50ZXJuYWwgZXJyb3IgZXZlbnQgdG8gbWdtdCBhcHBsaWNhdGlvbiAqLworCWJvYXJkX2V2ZW50LmV2ZW50X3R5cGUgPSBGQ19SRUdfQk9BUkRfRVZFTlQ7CisJYm9hcmRfZXZlbnQuc3ViY2F0ZWdvcnkgPSBMUEZDX0VWRU5UX1BPUlRJTlRFUlI7CisJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQocGhiYS0+cHBvcnQpOworCWZjX2hvc3RfcG9zdF92ZW5kb3JfZXZlbnQoc2hvc3QsIGZjX2dldF9ldmVudF9udW1iZXIoKSwKKwkJCQkgIHNpemVvZihib2FyZF9ldmVudCksCisJCQkJICAoY2hhciAqKSAmYm9hcmRfZXZlbnQsCisJCQkJICBTQ1NJX05MX1ZJRF9UWVBFX1BDSQorCQkJCSAgfCBQQ0lfVkVORE9SX0lEX0VNVUxFWCk7CisKIAlpZiAocGhiYS0+d29ya19ocyAmIEhTX0ZGRVI2KSB7CiAJCS8qIFJlLWVzdGFibGlzaGluZyBMaW5rICovCiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19MSU5LX0VWRU5ULApAQCAtNzcxLDcgKzg3Niw3IEBACiAJCXRlbXBfZXZlbnRfZGF0YS5kYXRhID0gKHVpbnQzMl90KXRlbXBlcmF0dXJlOwogCiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJIjA0NTkgQWRhcHRlciBtYXhpbXVtIHRlbXBlcmF0dXJlIGV4Y2VlZGVkICIKKwkJCQkiMDQwNiBBZGFwdGVyIG1heGltdW0gdGVtcGVyYXR1cmUgZXhjZWVkZWQgIgogCQkJCSIoJWxkKSwgdGFraW5nIHRoaXMgcG9ydCBvZmZsaW5lICIKIAkJCQkiRGF0YTogeCV4IHgleCB4JXhcbiIsCiAJCQkJdGVtcGVyYXR1cmUsIHBoYmEtPndvcmtfaHMsCkBAIC03OTEsOCArODk2LDggQEAKIAogCX0gZWxzZSB7CiAJCS8qIFRoZSBpZiBjbGF1c2UgYWJvdmUgZm9yY2VzIHRoaXMgY29kZSBwYXRoIHdoZW4gdGhlIHN0YXR1cwotCQkgKiBmYWlsdXJlIGlzIGEgdmFsdWUgb3RoZXIgdGhhbiBGRkVSNi4gIERvIG5vdCBjYWxsIHRoZSBvZmZsaW5lCi0JCSAqICB0d2ljZS4gVGhpcyBpcyB0aGUgYWRhcHRlciBoYXJkd2FyZSBlcnJvciBwYXRoLgorCQkgKiBmYWlsdXJlIGlzIGEgdmFsdWUgb3RoZXIgdGhhbiBGRkVSNi4gRG8gbm90IGNhbGwgdGhlIG9mZmxpbmUKKwkJICogdHdpY2UuIFRoaXMgaXMgdGhlIGFkYXB0ZXIgaGFyZHdhcmUgZXJyb3IgcGF0aC4KIAkJICovCiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCiAJCQkJIjA0NTcgQWRhcHRlciBIYXJkd2FyZSBFcnJvciAiCkBAIC04MDgsMTYgKzkxMywxNiBAQAogCiAJCWxwZmNfb2ZmbGluZV9lcmF0dChwaGJhKTsKIAl9CisJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGxwZmNfaGFuZGxlX2xhdHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBUaGlzIHJvdXRpbmUgd2lsbCBoYW5kbGUgcHJvY2Vzc2luZyBhIEhvc3QgQXR0ZW50aW9uICAgICAgICAgICAgICAqLwotLyogICAgTGluayBTdGF0dXMgZXZlbnQuIFRoaXMgd2lsbCBiZSBpbml0aWFsaXplZCAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIGFzIGEgU0xJIGxheWVyIGNhbGxiYWNrIHJvdXRpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19oYW5kbGVfbGF0dDogVGhlIEhCQSBsaW5rIGV2ZW50IGhhbmRsZXIuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCBmcm9tIHRoZSB3b3JrZXIgdGhyZWFkIHRvIGhhbmRsZSBhIEhCQSBob3N0CisgKiBhdHRlbnRpb24gbGluayBldmVudC4KKyAqKi8KIHZvaWQKIGxwZmNfaGFuZGxlX2xhdHQoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtODk4LDEyICsxMDAzLDIwIEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgbHBmY19wYXJzZV92cGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgIFRoaXMgcm91dGluZSB3aWxsIHBhcnNlIHRoZSBWUEQgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfcGFyc2VfdnBkOiBQYXJzZSBWUEQgKFZpdGFsIFByb2R1Y3QgRGF0YSkuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEB2cGQ6IHBvaW50ZXIgdG8gdGhlIHZpdGFsIHByb2R1Y3QgZGF0YS4KKyAqIEBsZW46IGxlbmd0aCBvZiB0aGUgdml0YWwgcHJvZHVjdCBkYXRhIGluIGJ5dGVzLgorICoKKyAqIFRoaXMgcm91dGluZSBwYXJzZXMgdGhlIFZpdGFsIFByb2R1Y3QgRGF0YSAoVlBEKS4gVGhlIFZQRCBpcyB0cmVhdGVkIGFzCisgKiBhbiBhcnJheSBvZiBjaGFyYWN0ZXJzLiBJbiB0aGlzIHJvdXRpbmUsIHRoZSBNb2RlbE5hbWUsIFByb2dyYW1UeXBlLCBhbmQKKyAqIE1vZGVsRGVzYywgZXRjLiBmaWVsZHMgb2YgdGhlIHBoYmEgZGF0YSBzdHJ1Y3R1cmUgd2lsbCBiZSBwb3B1bGF0ZWQuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBwb2ludGVyIHRvIHRoZSBWUEQgcGFzc2VkIGluIGlzIE5VTEwKKyAqICAgMSAtIHN1Y2Nlc3MKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfcGFyc2VfdnBkKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDhfdCAqdnBkLCBpbnQgbGVuKQogewpAQCAtMTA0MCwxMiArMTE1MywyNSBAQAogCXJldHVybigxKTsKIH0KIAorLyoqCisgKiBscGZjX2dldF9oYmFfbW9kZWxfZGVzYzogUmV0cmlldmUgSEJBIGRldmljZSBtb2RlbCBuYW1lIGFuZCBkZXNjcmlwdGlvbi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQG1kcDogcG9pbnRlciB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgZGVyaXZlZCBtb2RlbCBuYW1lLgorICogQGRlc2NwOiBwb2ludGVyIHRvIHRoZSBkYXRhIHN0cnVjdHVyZSB0byBob2xkIHRoZSBkZXJpdmVkIGRlc2NyaXB0aW9uLgorICoKKyAqIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgSEJBJ3MgZGVzY3JpcHRpb24gYmFzZWQgb24gaXRzIHJlZ2lzdGVyZWQgUENJIGRldmljZQorICogSUQuIFRoZSBAZGVzY3AgcGFzc2VkIGludG8gdGhpcyBmdW5jdGlvbiBwb2ludHMgdG8gYW4gYXJyYXkgb2YgMjU2IGNoYXJzLiBJdAorICogc2hhbGwgYmUgcmV0dXJuZWQgd2l0aCB0aGUgbW9kZWwgbmFtZSwgbWF4aW11bSBzcGVlZCwgYW5kIHRoZSBob3N0IGJ1cyB0eXBlLgorICogVGhlIEBtZHAgcGFzc2VkIGludG8gdGhpcyBmdW5jdGlvbiBwb2ludHMgdG8gYW4gYXJyYXkgb2YgODAgY2hhcnMuIFdoZW4gdGhlCisgKiBmdW5jdGlvbiByZXR1cm5zLCB0aGUgQG1kcCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBtb2RlbCBuYW1lLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfZ2V0X2hiYV9tb2RlbF9kZXNjKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDhfdCAqbWRwLCB1aW50OF90ICpkZXNjcCkKIHsKIAlscGZjX3ZwZF90ICp2cDsKIAl1aW50MTZfdCBkZXZfaWQgPSBwaGJhLT5wY2lkZXYtPmRldmljZTsKIAlpbnQgbWF4X3NwZWVkOworCWludCBHRSA9IDA7CiAJc3RydWN0IHsKIAkJY2hhciAqIG5hbWU7CiAJCWludCAgICBtYXhfc3BlZWQ7CkBAIC0xMTc3LDYgKzEzMDMsMTkgQEAKIAljYXNlIFBDSV9ERVZJQ0VfSURfU0FUX1M6CiAJCW0gPSAodHlwZW9mKG0pKXsiTFBlMTIwMDAtUyIsIG1heF9zcGVlZCwgIlBDSWUifTsKIAkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0hPUk5FVDoKKwkJbSA9ICh0eXBlb2YobSkpeyJMUDIxMDAwIiwgbWF4X3NwZWVkLCAiUENJZSJ9OworCQlHRSA9IDE7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9QUk9URVVTX1ZGOgorCQltID0gKHR5cGVvZihtKSkgeyJMUGV2MTIwMDAiLCBtYXhfc3BlZWQsICJQQ0llIElPViJ9OworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfUFJPVEVVU19QRjoKKwkJbSA9ICh0eXBlb2YobSkpIHsiTFBldjEyMDAwIiwgbWF4X3NwZWVkLCAiUENJZSBJT1YifTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1BST1RFVVNfUzoKKwkJbSA9ICh0eXBlb2YobSkpIHsiTFBlbXYxMjAwMi1TIiwgbWF4X3NwZWVkLCAiUENJZSBJT1YifTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbSA9ICh0eXBlb2YobSkpeyBOVUxMIH07CiAJCWJyZWFrOwpAQCAtMTE4NiwxOCArMTMyNSwyNSBAQAogCQlzbnByaW50ZihtZHAsIDc5LCIlcyIsIG0ubmFtZSk7CiAJaWYgKGRlc2NwICYmIGRlc2NwWzBdID09ICdcMCcpCiAJCXNucHJpbnRmKGRlc2NwLCAyNTUsCi0JCQkgIkVtdWxleCAlcyAlZEdiICVzIEZpYnJlIENoYW5uZWwgQWRhcHRlciIsCi0JCQkgbS5uYW1lLCBtLm1heF9zcGVlZCwgbS5idXMpOworCQkJIkVtdWxleCAlcyAlZCVzICVzICVzIiwKKwkJCW0ubmFtZSwgbS5tYXhfc3BlZWQsCisJCQkoR0UpID8gIkdFIiA6ICJHYiIsCisJCQltLmJ1cywKKwkJCShHRSkgPyAiRkNvRSBBZGFwdGVyIiA6ICJGaWJyZSBDaGFubmVsIEFkYXB0ZXIiKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICBscGZjX3Bvc3RfYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBUaGlzIHJvdXRpbmUgd2lsbCBwb3N0IGNvdW50IGJ1ZmZlcnMgdG8gdGhlICAqLwotLyogICByaW5nIHdpdGggdGhlIFFVRV9SSU5HX0JVRl9DTiBjb21tYW5kLiBUaGlzICAqLwotLyogICBhbGxvd3MgMyBidWZmZXJzIC8gY29tbWFuZCB0byBiZSBwb3N0ZWQuICAgICAqLwotLyogICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnVmZmVycyBOT1QgcG9zdGVkLiAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3Bvc3RfYnVmZmVyOiBQb3N0IElPQ0Iocykgd2l0aCBETUEgYnVmZmVyIGRlc2NyaXB0b3IocykgdG8gYSBJT0NCIHJpbmcuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwcmluZzogcG9pbnRlciB0byBhIElPQ0IgcmluZy4KKyAqIEBjbnQ6IHRoZSBudW1iZXIgb2YgSU9DQnMgdG8gYmUgcG9zdGVkIHRvIHRoZSBJT0NCIHJpbmcuCisgKgorICogVGhpcyByb3V0aW5lIHBvc3RzIGEgZ2l2ZW4gbnVtYmVyIG9mIElPQ0JzIHdpdGggdGhlIGFzc29jaWF0ZWQgRE1BIGJ1ZmZlcgorICogZGVzY3JpcHRvcnMgc3BlY2lmaWVkIGJ5IHRoZSBjbnQgYXJndW1lbnQgdG8gdGhlIGdpdmVuIElPQ0IgcmluZy4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgVGhlIG51bWJlciBvZiBJT0NCcyBOT1QgYWJsZSB0byBiZSBwb3N0ZWQgdG8gdGhlIElPQ0IgcmluZy4KKyAqKi8KIGludAogbHBmY19wb3N0X2J1ZmZlcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywgaW50IGNudCkKIHsKQEAgLTEyODcsMTIgKzE0MzMsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgIGxwZmNfcG9zdF9yY3ZfYnVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICBUaGlzIHJvdXRpbmUgcG9zdCBpbml0aWFsIHJjdiBidWZmZXJzIHRvIHRoZSBjb25maWd1cmVkIHJpbmdzICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3Bvc3RfcmN2X2J1ZjogUG9zdCB0aGUgaW5pdGlhbCByZWNlaXZlIElPQ0IgYnVmZmVycyB0byBFTFMgcmluZy4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwb3N0cyBpbml0aWFsIHJlY2VpdmUgSU9DQiBidWZmZXJzIHRvIHRoZSBFTFMgcmluZy4gVGhlCisgKiBjdXJyZW50IG51bWJlciBvZiBpbml0aWFsIElPQ0IgYnVmZmVycyBzcGVjaWZpZWQgYnkgTFBGQ19CVUZfUklORzAgaXMKKyAqIHNldCB0byA2NCBJT0NCcy4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgMCAtIHN1Y2Nlc3MgKGN1cnJlbnRseSBhbHdheXMgc3VjY2VzcykKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfcG9zdF9yY3ZfYnVmKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTEzMDcsMTEgKzE0NTgsMTMgQEAKIAogI2RlZmluZSBTKE4sVikgKCgoVik8PChOKSl8KChWKT4+KDMyLShOKSkpKQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgbHBmY19zaGFfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19zaGFfaW5pdDogU2V0IHVwIGluaXRpYWwgYXJyYXkgb2YgaGFzaCB0YWJsZSBlbnRyaWVzLgorICogQEhhc2hSZXN1bHRQb2ludGVyOiBwb2ludGVyIHRvIGFuIGFycmF5IGFzIGhhc2ggdGFibGUuCisgKgorICogVGhpcyByb3V0aW5lIHNldHMgdXAgdGhlIGluaXRpYWwgdmFsdWVzIHRvIHRoZSBhcnJheSBvZiBoYXNoIHRhYmxlIGVudHJpZXMKKyAqIGZvciB0aGUgTEMgSEJBcy4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NoYV9pbml0KHVpbnQzMl90ICogSGFzaFJlc3VsdFBvaW50ZXIpCiB7CkBAIC0xMzIyLDExICsxNDc1LDE2IEBACiAJSGFzaFJlc3VsdFBvaW50ZXJbNF0gPSAweEMzRDJFMUYwOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgbHBmY19zaGFfaXRlcmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19zaGFfaXRlcmF0ZTogSXRlcmF0ZSBpbml0aWFsIGhhc2ggdGFibGUgd2l0aCB0aGUgd29ya2luZyBoYXNoIHRhYmxlLgorICogQEhhc2hSZXN1bHRQb2ludGVyOiBwb2ludGVyIHRvIGFuIGluaXRpYWwvcmVzdWx0IGhhc2ggdGFibGUuCisgKiBASGFzaFdvcmtpbmdQb2ludGVyOiBwb2ludGVyIHRvIGFuIHdvcmtpbmcgaGFzaCB0YWJsZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXRlcmF0ZXMgYW4gaW5pdGlhbCBoYXNoIHRhYmxlIHBvaW50ZWQgYnkgQEhhc2hSZXN1bHRQb2ludGVyCisgKiB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgd29ya2luZyBoYXNoIHRhYmxlIHBvaW50ZWVkIGJ5IEBIYXNoV29ya2luZ1BvaW50ZXIuCisgKiBUaGUgcmVzdWx0cyBhcmUgcHV0dGluZyBiYWNrIHRvIHRoZSBpbml0aWFsIGhhc2ggdGFibGUsIHJldHVybmVkIHRocm91Z2gKKyAqIHRoZSBASGFzaFJlc3VsdFBvaW50ZXIgYXMgdGhlIHJlc3VsdCBoYXNoIHRhYmxlLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfc2hhX2l0ZXJhdGUodWludDMyX3QgKiBIYXNoUmVzdWx0UG9pbnRlciwgdWludDMyX3QgKiBIYXNoV29ya2luZ1BvaW50ZXIpCiB7CkBAIC0xMzc0LDIyICsxNTMyLDI5IEBACiAKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgIGxwZmNfY2hhbGxlbmdlX2tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfY2hhbGxlbmdlX2tleTogQ3JlYXRlIGNoYWxsZW5nZSBrZXkgYmFzZWQgb24gV1dQTiBvZiB0aGUgSEJBLgorICogQFJhbmRvbUNoYWxsZW5nZTogcG9pbnRlciB0byB0aGUgZW50cnkgb2YgaG9zdCBjaGFsbGVuZ2UgcmFuZG9tIG51bWJlciBhcnJheS4KKyAqIEBIYXNoV29ya2luZzogcG9pbnRlciB0byB0aGUgZW50cnkgb2YgdGhlIHdvcmtpbmcgaGFzaCBhcnJheS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FsY3VsYXRlcyB0aGUgd29ya2luZyBoYXNoIGFycmF5IHJlZmVycmVkIGJ5IEBIYXNoV29ya2luZworICogZnJvbSB0aGUgY2hhbGxlbmdlIHJhbmRvbSBudW1iZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaG9zdCwgcmVmZXJyZWQgYnkKKyAqIEBSYW5kb21DaGFsbGVuZ2UuIFRoZSByZXN1bHQgaXMgcHV0IGludG8gdGhlIGVudHJ5IG9mIHRoZSB3b3JraW5nIGhhc2gKKyAqIGFycmF5IGFuZCByZXR1cm5lZCBieSByZWZlcmVuY2UgdGhyb3VnaCBASGFzaFdvcmtpbmcuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jaGFsbGVuZ2Vfa2V5KHVpbnQzMl90ICogUmFuZG9tQ2hhbGxlbmdlLCB1aW50MzJfdCAqIEhhc2hXb3JraW5nKQogewogCSpIYXNoV29ya2luZyA9ICgqUmFuZG9tQ2hhbGxlbmdlIF4gKkhhc2hXb3JraW5nKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgIGxwZmNfaGJhX2luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfaGJhX2luaXQ6IFBlcmZvcm0gc3BlY2lhbCBoYW5kbGluZyBmb3IgTEMgSEJBIGluaXRpYWxpemF0aW9uLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAaGJhaW5pdDogcG9pbnRlciB0byBhbiBhcnJheSBvZiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlcnMuCisgKgorICogVGhpcyByb3V0aW5lIHBlcmZvcm1zIHRoZSBzcGVjaWFsIGhhbmRsaW5nIGZvciBMQyBIQkEgaW5pdGlhbGl6YXRpb24uCisgKiovCiB2b2lkCiBscGZjX2hiYV9pbml0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgKmhiYWluaXQpCiB7CkBAIC0xNDEyLDYgKzE1NzcsMTUgQEAKIAlrZnJlZShIYXNoV29ya2luZyk7CiB9CiAKKy8qKgorICogbHBmY19jbGVhbnVwOiBQZXJmb3JtcyB2cG9ydCBjbGVhbnVwcyBiZWZvcmUgZGVsZXRpbmcgYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBwZXJmb3JtcyB0aGUgbmVjZXNzYXJ5IGNsZWFudXBzIGJlZm9yZSBkZWxldGluZyB0aGUgQHZwb3J0LgorICogSXQgaW52b2tlcyB0aGUgZGlzY292ZXJ5IHN0YXRlIG1hY2hpbmUgdG8gcGVyZm9ybSBuZWNlc3Nhcnkgc3RhdGUKKyAqIHRyYW5zaXRpb25zIGFuZCB0byByZWxlYXNlIHRoZSBuZGxwcyBhc3NvY2lhdGVkIHdpdGggdGhlIEB2cG9ydC4gTm90ZSwKKyAqIHRoZSBwaHlzaWNhbCBwb3J0IGlzIHRyZWF0ZWQgYXMgQHZwb3J0IDAuCisgKiovCiB2b2lkCiBscGZjX2NsZWFudXAoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMTQ1OSwxNCArMTYzMyw2IEBACiAJCWxwZmNfZGlzY19zdGF0ZV9tYWNoaW5lKHZwb3J0LCBuZGxwLCBOVUxMLAogCQkJCQkgICAgIE5MUF9FVlRfREVWSUNFX1JNKTsKIAotCQkvKiBubHBfdHlwZSB6ZXJvIGlzIG5vdCBkZWZpbmVkLCBubHBfZmxhZyB6ZXJvIGFsc28gbm90IGRlZmluZWQsCi0JCSAqIG5scF9zdGF0ZSBpcyB1bnVzZWQsIHRoaXMgaGFwcGVucyB3aGVuCi0JCSAqIGFuIGluaXRpYXRvciBoYXMgbG9nZ2VkCi0JCSAqIGludG8gdXMgc28gY2xlYW51cCB0aGlzIG5kbHAuCi0JCSAqLwotCQlpZiAoKG5kbHAtPm5scF90eXBlID09IDApICYmIChuZGxwLT5ubHBfZmxhZyA9PSAwKSAmJgotCQkJKG5kbHAtPm5scF9zdGF0ZSA9PSAwKSkKLQkJCWxwZmNfbmxwX3B1dChuZGxwKTsKIAl9CiAKIAkvKiBBdCB0aGlzIHBvaW50LCBBTEwgbmRscCdzIHNob3VsZCBiZSBnb25lCkBAIC0xNDgyLDcgKzE2NDgsNyBAQAogCQkJCQkJJnZwb3J0LT5mY19ub2RlcywgbmxwX2xpc3RwKSB7CiAJCQkJbHBmY19wcmludGZfdmxvZyhuZGxwLT52cG9ydCwgS0VSTl9FUlIsCiAJCQkJCQlMT0dfTk9ERSwKLQkJCQkJCSIwMjgyOiBkaWQ6eCV4IG5kbHA6eCVwICIKKwkJCQkJCSIwMjgyIGRpZDp4JXggbmRscDp4JXAgIgogCQkJCQkJInVzZ21hcDp4JXggcmVmY250OiVkXG4iLAogCQkJCQkJbmRscC0+bmxwX0RJRCwgKHZvaWQgKiluZGxwLAogCQkJCQkJbmRscC0+bmxwX3VzZ19tYXAsCkBAIC0xNDk4LDYgKzE2NjQsMTQgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19zdG9wX3Zwb3J0X3RpbWVyczogU3RvcCBhbGwgdGhlIHRpbWVycyBhc3NvY2lhdGVkIHdpdGggYSB2cG9ydC4KKyAqIEB2cG9ydDogcG9pbnRlciB0byBhIHZpcnR1YWwgTl9Qb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBzdG9wcyBhbGwgdGhlIHRpbWVycyBhc3NvY2lhdGVkIHdpdGggYSBAdnBvcnQuIFRoaXMgZnVuY3Rpb24KKyAqIGlzIGludm9rZWQgYmVmb3JlIGRpc2FibGluZyBvciBkZWxldGluZyBhIEB2cG9ydC4gTm90ZSB0aGF0IHRoZSBwaHlzaWNhbAorICogcG9ydCBpcyB0cmVhdGVkIGFzIEB2cG9ydCAwLgorICoqLwogdm9pZAogbHBmY19zdG9wX3Zwb3J0X3RpbWVycyhzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0xNTA3LDYgKzE2ODEsMTMgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19zdG9wX3BoYmFfdGltZXJzOiBTdG9wIGFsbCB0aGUgdGltZXJzIGFzc29jaWF0ZWQgd2l0aCBhbiBIQkEuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc3RvcHMgYWxsIHRoZSB0aW1lcnMgYXNzb2NpYXRlZCB3aXRoIGEgSEJBLiBUaGlzIGZ1bmN0aW9uIGlzCisgKiBpbnZva2VkIGJlZm9yZSBlaXRoZXIgcHV0dGluZyBhIEhCQSBvZmZsaW5lIG9yIHVubG9hZGluZyB0aGUgZHJpdmVyLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfc3RvcF9waGJhX3RpbWVycyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0xNTE2LDkgKzE2OTcsMjAgQEAKIAlkZWxfdGltZXJfc3luYygmcGhiYS0+ZmFicmljX2Jsb2NrX3RpbWVyKTsKIAlwaGJhLT5oYl9vdXRzdGFuZGluZyA9IDA7CiAJZGVsX3RpbWVyX3N5bmMoJnBoYmEtPmhiX3Rtb2Z1bmMpOworCWRlbF90aW1lcl9zeW5jKCZwaGJhLT5lcmF0dF9wb2xsKTsKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19ibG9ja19tZ210X2lvOiBNYXJrIGEgSEJBJ3MgbWFuYWdlbWVudCBpbnRlcmZhY2UgYXMgYmxvY2tlZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBtYXJrcyBhIEhCQSdzIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGFzIGJsb2NrZWQuIE9uY2UgdGhlIEhCQSdzCisgKiBtYW5hZ2VtZW50IGludGVyZmFjZSBpcyBtYXJrZWQgYXMgYmxvY2tlZCwgYWxsIHRoZSB1c2VyIHNwYWNlIGFjY2VzcyB0bworICogdGhlIEhCQSwgd2hldGhlciB0aGV5IGFyZSBmcm9tIHN5c2ZzIGludGVyZmFjZSBvciBsaWJkZmMgaW50ZXJmYWNlIHdpbGwKKyAqIGFsbCBiZSBibG9ja2VkLiBUaGUgSEJBIGlzIHNldCB0byBibG9jayB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2Ugd2hlbiB0aGUKKyAqIGRyaXZlciBwcmVwYXJlcyB0aGUgSEJBIGludGVyZmFjZSBmb3Igb25saW5lIG9yIG9mZmxpbmUuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19ibG9ja19tZ210X2lvKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCiB7CkBAIC0xNTI5LDYgKzE3MjEsMTggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZyk7CiB9CiAKKy8qKgorICogbHBmY19vbmxpbmU6IEluaXRpYWxpemUgYW5kIGJyaW5nIGEgSEJBIG9ubGluZS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpbml0aWFsaXplcyB0aGUgSEJBIGFuZCBicmluZ3MgYSBIQkEgb25saW5lLiBEdXJpbmcgdGhpcworICogcHJvY2VzcywgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGlzIGJsb2NrZWQgdG8gcHJldmVudCB1c2VyIHNwYWNlIGFjY2VzcworICogdG8gdGhlIEhCQSBpbnRlcmZlcmluZyB3aXRoIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24uCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBzdWNjZXNzZnVsCisgKiAgIDEgLSBmYWlsZWQKKyAqKi8KIGludAogbHBmY19vbmxpbmUoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMTU3NCw2ICsxNzc4LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY191bmJsb2NrX21nbXRfaW86IE1hcmsgYSBIQkEncyBtYW5hZ2VtZW50IGludGVyZmFjZSB0byBiZSBub3QgYmxvY2tlZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBtYXJrcyBhIEhCQSdzIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGFzIG5vdCBibG9ja2VkLiBPbmNlIHRoZQorICogSEJBJ3MgbWFuYWdlbWVudCBpbnRlcmZhY2UgaXMgbWFya2VkIGFzIG5vdCBibG9ja2VkLCBhbGwgdGhlIHVzZXIgc3BhY2UKKyAqIGFjY2VzcyB0byB0aGUgSEJBLCB3aGV0aGVyIHRoZXkgYXJlIGZyb20gc3lzZnMgaW50ZXJmYWNlIG9yIGxpYmRmYworICogaW50ZXJmYWNlIHdpbGwgYmUgYWxsb3dlZC4gVGhlIEhCQSBpcyBzZXQgdG8gYmxvY2sgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlCisgKiB3aGVuIHRoZSBkcml2ZXIgcHJlcGFyZXMgdGhlIEhCQSBpbnRlcmZhY2UgZm9yIG9ubGluZSBvciBvZmZsaW5lIGFuZCB0aGVuCisgKiBzZXQgdG8gdW5ibG9jayB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2UgYWZ0ZXJ3YXJkcy4KKyAqKi8KIHZvaWQKIGxwZmNfdW5ibG9ja19tZ210X2lvKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCiB7CkBAIC0xNTg0LDYgKzE3OTksMTQgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZyk7CiB9CiAKKy8qKgorICogbHBmY19vZmZsaW5lX3ByZXA6IFByZXBhcmUgYSBIQkEgdG8gYmUgYnJvdWdodCBvZmZsaW5lLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgdG8gcHJlcGFyZSBhIEhCQSB0byBiZSBicm91Z2h0IG9mZmxpbmUuIEl0IHBlcmZvcm1zCisgKiB1bnJlZ2lzdHJhdGlvbiBsb2dpbiB0byBhbGwgdGhlIG5vZGVzIG9uIGFsbCB2cG9ydHMgYW5kIGZsdXNoZXMgdGhlIG1haWxib3gKKyAqIHF1ZXVlIHRvIG1ha2UgaXQgcmVhZHkgdG8gYmUgYnJvdWdodCBvZmZsaW5lLgorICoqLwogdm9pZAogbHBmY19vZmZsaW5lX3ByZXAoc3RydWN0IGxwZmNfaGJhICogcGhiYSkKIHsKQEAgLTE2MzMsNiArMTg1NiwxNCBAQAogCWxwZmNfc2xpX2ZsdXNoX21ib3hfcXVldWUocGhiYSk7CiB9CiAKKy8qKgorICogbHBmY19vZmZsaW5lOiBCcmluZyBhIEhCQSBvZmZsaW5lLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGFjdHVhbGx5IGJyaW5ncyBhIEhCQSBvZmZsaW5lLiBJdCBzdG9wcyBhbGwgdGhlIHRpbWVycworICogYXNzb2NpYXRlZCB3aXRoIHRoZSBIQkEsIGJyaW5ncyBkb3duIHRoZSBTTEkgbGF5ZXIsIGFuZCBldmVudHVhbGx5CisgKiBtYXJrcyB0aGUgSEJBIGFzIGluIG9mZmxpbmUgc3RhdGUgZm9yIHRoZSB1cHBlciBsYXllciBwcm90b2NvbC4KKyAqKi8KIHZvaWQKIGxwZmNfb2ZmbGluZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0xNjcwLDEyICsxOTAxLDE3IEBACiAJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBGdW5jdGlvbiBuYW1lOiBscGZjX3Njc2lfZnJlZQotKgotKiBEZXNjcmlwdGlvbjogQ2FsbGVkIGZyb20gbHBmY19wY2lfcmVtb3ZlX29uZSBmcmVlIGludGVybmFsIGRyaXZlciByZXNvdXJjZXMKLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19zY3NpX2ZyZWU6IEZyZWUgYWxsIHRoZSBTQ1NJIGJ1ZmZlcnMgYW5kIElPQ0JzIGZyb20gZHJpdmVyIGxpc3RzLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRvIGZyZWUgYWxsIHRoZSBTQ1NJIGJ1ZmZlcnMgYW5kIElPQ0JzIGZyb20gdGhlIGRyaXZlcgorICogbGlzdCBiYWNrIHRvIGtlcm5lbC4gSXQgaXMgY2FsbGVkIGZyb20gbHBmY19wY2lfcmVtb3ZlX29uZSB0byBmcmVlCisgKiB0aGUgaW50ZXJuYWwgcmVzb3VyY2VzIGJlZm9yZSB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAwIC0gc3VjY2Vzc2Z1bCAoZm9yIG5vdywgaXQgYWx3YXlzIHJldHVybnMgMCkKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2NzaV9mcmVlKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTE3MDQsNiArMTk0MCwyMiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfY3JlYXRlX3BvcnQ6IENyZWF0ZSBhbiBGQyBwb3J0LgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAaW5zdGFuY2U6IGEgdW5pcXVlIGludGVnZXIgSUQgdG8gdGhpcyBGQyBwb3J0LgorICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBjcmVhdGVzIGEgRkMgcG9ydCBmb3IgdGhlIHVwcGVyIGxheWVyIHByb3RvY29sLiBUaGUgRkMgcG9ydAorICogY2FuIGJlIGNyZWF0ZWQgb24gdG9wIG9mIGVpdGhlciBhIHBoeXNpY2FsIHBvcnQgb3IgYSB2aXJ0dWFsIHBvcnQgcHJvdmlkZWQKKyAqIGJ5IHRoZSBIQkEuIFRoaXMgcm91dGluZSBhbHNvIGFsbG9jYXRlcyBhIFNDU0kgaG9zdCBkYXRhIHN0cnVjdHVyZSAoc2hvc3QpCisgKiBhbmQgYXNzb2NpYXRlcyB0aGUgRkMgcG9ydCBjcmVhdGVkIGJlZm9yZSBhZGRpbmcgdGhlIHNob3N0IGludG8gdGhlIFNDU0kKKyAqIGxheWVyLgorICoKKyAqIFJldHVybiBjb2RlcworICogICBAdnBvcnQgLSBwb2ludGVyIHRvIHRoZSB2aXJ0dWFsIE5fUG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqICAgTlVMTCAtIHBvcnQgY3JlYXRlIGZhaWxlZC4KKyAqKi8KIHN0cnVjdCBscGZjX3Zwb3J0ICoKIGxwZmNfY3JlYXRlX3BvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgaW5zdGFuY2UsIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTE3NzcsNiArMjAyOSwxMyBAQAogCXJldHVybiBOVUxMOwogfQogCisvKioKKyAqIGRlc3Ryb3lfcG9ydDogRGVzdHJveSBhbiBGQyBwb3J0LgorICogQHZwb3J0OiBwb2ludGVyIHRvIGFuIGxwZmMgdmlydHVhbCBOX1BvcnQgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGRlc3Ryb3lzIGEgRkMgcG9ydCBmcm9tIHRoZSB1cHBlciBsYXllciBwcm90b2NvbC4gQWxsIHRoZQorICogcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9ydCBhcmUgcmVsZWFzZWQuCisgKiovCiB2b2lkCiBkZXN0cm95X3BvcnQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQogewpAQCAtMTc5Nyw2ICsyMDU2LDE2IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfZ2V0X2luc3RhbmNlOiBHZXQgYSB1bmlxdWUgaW50ZWdlciBJRC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYWxsb2NhdGVzIGEgdW5pcXVlIGludGVnZXIgSUQgZnJvbSBscGZjX2hiYV9pbmRleCBwb29sLiBJdAorICogdXNlcyB0aGUga2VybmVsIGlkciBmYWNpbGl0eSB0byBwZXJmb3JtIHRoZSB0YXNrLgorICoKKyAqIFJldHVybiBjb2RlczoKKyAqICAgaW5zdGFuY2UgLSBhIHVuaXF1ZSBpbnRlZ2VyIElEIGFsbG9jYXRlZCBhcyB0aGUgbmV3IGluc3RhbmNlLgorICogICAtMSAtIGxwZmMgZ2V0IGluc3RhbmNlIGZhaWxlZC4KKyAqKi8KIGludAogbHBmY19nZXRfaW5zdGFuY2Uodm9pZCkKIHsKQEAgLTE4MTAsMTEgKzIwNzksMjEgQEAKIAlyZXR1cm4gaW5zdGFuY2U7CiB9CiAKLS8qCi0gKiBOb3RlOiB0aGVyZSBpcyBubyBzY2FuX3N0YXJ0IGZ1bmN0aW9uIGFzIGFkYXB0ZXIgaW5pdGlhbGl6YXRpb24KLSAqIHdpbGwgaGF2ZSBhc3luY2hyb25vdXNseSBraWNrZWQgb2ZmIHRoZSBsaW5rIGluaXRpYWxpemF0aW9uLgotICovCi0KKy8qKgorICogbHBmY19zY2FuX2ZpbmlzaGVkOiBtZXRob2QgZm9yIFNDU0kgbGF5ZXIgdG8gZGV0ZWN0IHdoZXRoZXIgc2NhbiBpcyBkb25lLgorICogQHNob3N0OiBwb2ludGVyIHRvIFNDU0kgaG9zdCBkYXRhIHN0cnVjdHVyZS4KKyAqIEB0aW1lOiBlbGFwc2VkIHRpbWUgb2YgdGhlIHNjYW4gaW4gamlmZmllcy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBTQ1NJIGxheWVyIHdpdGggYSBTQ1NJIGhvc3QgdG8gZGV0ZXJtaW5lCisgKiB3aGV0aGVyIHRoZSBzY2FuIGhvc3QgaXMgZmluaXNoZWQuCisgKgorICogTm90ZTogdGhlcmUgaXMgbm8gc2Nhbl9zdGFydCBmdW5jdGlvbiBhcyBhZGFwdGVyIGluaXRpYWxpemF0aW9uIHdpbGwgaGF2ZQorICogYXN5bmNocm9ub3VzbHkga2lja2VkIG9mZiB0aGUgbGluayBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgMCAtIFNDU0kgaG9zdCBzY2FuIGlzIG5vdCBvdmVyIHlldC4KKyAqICAgMSAtIFNDU0kgaG9zdCBzY2FuIGlzIG92ZXIuCisgKiovCiBpbnQgbHBmY19zY2FuX2ZpbmlzaGVkKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCB1bnNpZ25lZCBsb25nIHRpbWUpCiB7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKQEAgLTE4NTgsNiArMjEzNywxMyBAQAogCXJldHVybiBzdGF0OwogfQogCisvKioKKyAqIGxwZmNfaG9zdF9hdHRyaWJfaW5pdDogSW5pdGlhbGl6ZSBTQ1NJIGhvc3QgYXR0cmlidXRlcyBvbiBhIEZDIHBvcnQuCisgKiBAc2hvc3Q6IHBvaW50ZXIgdG8gU0NTSSBob3N0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpbml0aWFsaXplcyBhIGdpdmVuIFNDU0kgaG9zdCBhdHRyaWJ1dGVzIG9uIGEgRkMgcG9ydC4gVGhlCisgKiBTQ1NJIGhvc3QgY2FuIGJlIGVpdGhlciBvbiB0b3Agb2YgYSBwaHlzaWNhbCBwb3J0IG9yIGEgdmlydHVhbCBwb3J0LgorICoqLwogdm9pZCBscGZjX2hvc3RfYXR0cmliX2luaXQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKQEAgLTE5MDYsNDIgKzIxOTIsMTU3IEBACiAJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogfQogCisvKioKKyAqIGxwZmNfZW5hYmxlX21zaXg6IEVuYWJsZSBNU0ktWCBpbnRlcnJ1cHQgbW9kZS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIGVuYWJsZSB0aGUgTVNJLVggaW50ZXJydXB0IHZlY3RvcnMuIFRoZSBrZXJuZWwKKyAqIGZ1bmN0aW9uIHBjaV9lbmFibGVfbXNpeCgpIGlzIGNhbGxlZCB0byBlbmFibGUgdGhlIE1TSS1YIHZlY3RvcnMuIE5vdGUgdGhhdAorICogcGNpX2VuYWJsZV9tc2l4KCksIG9uY2UgaW52b2tlZCwgZW5hYmxlcyBlaXRoZXIgYWxsIG9yIG5vdGhpbmcsIGRlcGVuZGluZworICogb24gdGhlIGN1cnJlbnQgYXZhaWxhYmlsaXR5IG9mIFBDSSB2ZWN0b3IgcmVzb3VyY2VzLiBUaGUgZGV2aWNlIGRyaXZlciBpcworICogcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgdGhlIGluZGl2aWR1YWwgcmVxdWVzdF9pcnEoKSB0byByZWdpc3RlciBlYWNoIE1TSS1YCisgKiB2ZWN0b3Igd2l0aCBhIGludGVycnVwdCBoYW5kbGVyLCB3aGljaCBpcyBkb25lIGluIHRoaXMgZnVuY3Rpb24uIE5vdGUgdGhhdAorICogbGF0ZXIgd2hlbiBkZXZpY2UgaXMgdW5sb2FkaW5nLCB0aGUgZHJpdmVyIHNob3VsZCBhbHdheXMgY2FsbCBmcmVlX2lycSgpCisgKiBvbiBhbGwgTVNJLVggdmVjdG9ycyBpdCBoYXMgZG9uZSByZXF1ZXN0X2lycSgpIG9uIGJlZm9yZSBjYWxsaW5nCisgKiBwY2lfZGlzYWJsZV9tc2l4KCkuIEZhaWx1cmUgdG8gZG8gc28gcmVzdWx0cyBpbiBhIEJVR19PTigpIGFuZCBhIGRldmljZQorICogd2lsbCBiZSBsZWZ0IHdpdGggTVNJLVggZW5hYmxlZCBhbmQgbGVha3MgaXRzIHZlY3RvcnMuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgIDAgLSBzdWNlc3NmdWwKKyAqICAgb3RoZXIgdmFsdWVzIC0gZXJyb3IKKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZW5hYmxlX21zaXgoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewotCWludCBlcnJvcjsKKwlpbnQgcmMsIGk7CisJTFBGQ19NQk9YUV90ICpwbWI7CiAKLQlwaGJhLT5tc2l4X2VudHJpZXNbMF0uZW50cnkgPSAwOwotCXBoYmEtPm1zaXhfZW50cmllc1swXS52ZWN0b3IgPSAwOworCS8qIFNldCB1cCBNU0ktWCBtdWx0aS1tZXNzYWdlIHZlY3RvcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTFBGQ19NU0lYX1ZFQ1RPUlM7IGkrKykKKwkJcGhiYS0+bXNpeF9lbnRyaWVzW2ldLmVudHJ5ID0gaTsKIAotCWVycm9yID0gcGNpX2VuYWJsZV9tc2l4KHBoYmEtPnBjaWRldiwgcGhiYS0+bXNpeF9lbnRyaWVzLAorCS8qIENvbmZpZ3VyZSBNU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZSAqLworCXJjID0gcGNpX2VuYWJsZV9tc2l4KHBoYmEtPnBjaWRldiwgcGhiYS0+bXNpeF9lbnRyaWVzLAogCQkJCUFSUkFZX1NJWkUocGhiYS0+bXNpeF9lbnRyaWVzKSk7Ci0JaWYgKGVycm9yKSB7CisJaWYgKHJjKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAogCQkJCSIwNDIwIEVuYWJsZSBNU0ktWCBmYWlsZWQgKCVkKSwgY29udGludWluZyAiCi0JCQkJIndpdGggTVNJXG4iLCBlcnJvcik7Ci0JCXBjaV9kaXNhYmxlX21zaXgocGhiYS0+cGNpZGV2KTsKLQkJcmV0dXJuIGVycm9yOworCQkJCSJ3aXRoIE1TSVxuIiwgcmMpOworCQlnb3RvIG1zaV9mYWlsX291dDsKKwl9IGVsc2UKKwkJZm9yIChpID0gMDsgaSA8IExQRkNfTVNJWF9WRUNUT1JTOyBpKyspCisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKKwkJCQkJIjA0NzcgTVNJLVggZW50cnlbJWRdOiB2ZWN0b3I9eCV4ICIKKwkJCQkJIm1lc3NhZ2U9JWRcbiIsIGksCisJCQkJCXBoYmEtPm1zaXhfZW50cmllc1tpXS52ZWN0b3IsCisJCQkJCXBoYmEtPm1zaXhfZW50cmllc1tpXS5lbnRyeSk7CisJLyoKKwkgKiBBc3NpZ24gTVNJLVggdmVjdG9ycyB0byBpbnRlcnJ1cHQgaGFuZGxlcnMKKwkgKi8KKworCS8qIHZlY3Rvci0wIGlzIGFzc29jaWF0ZWQgdG8gc2xvdy1wYXRoIGhhbmRsZXIgKi8KKwlyYyA9IHJlcXVlc3RfaXJxKHBoYmEtPm1zaXhfZW50cmllc1swXS52ZWN0b3IsICZscGZjX3NwX2ludHJfaGFuZGxlciwKKwkJCSBJUlFGX1NIQVJFRCwgTFBGQ19TUF9EUklWRVJfSEFORExFUl9OQU1FLCBwaGJhKTsKKwlpZiAocmMpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkiMDQyMSBNU0ktWCBzbG93LXBhdGggcmVxdWVzdF9pcnEgZmFpbGVkICIKKwkJCQkiKCVkKSwgY29udGludWluZyB3aXRoIE1TSVxuIiwgcmMpOworCQlnb3RvIG1zaV9mYWlsX291dDsKIAl9CiAKLQllcnJvciA9CXJlcXVlc3RfaXJxKHBoYmEtPm1zaXhfZW50cmllc1swXS52ZWN0b3IsIGxwZmNfaW50cl9oYW5kbGVyLCAwLAotCQkJICAgIExQRkNfRFJJVkVSX05BTUUsIHBoYmEpOwotCWlmIChlcnJvcikgeworCS8qIHZlY3Rvci0xIGlzIGFzc29jaWF0ZWQgdG8gZmFzdC1wYXRoIGhhbmRsZXIgKi8KKwlyYyA9IHJlcXVlc3RfaXJxKHBoYmEtPm1zaXhfZW50cmllc1sxXS52ZWN0b3IsICZscGZjX2ZwX2ludHJfaGFuZGxlciwKKwkJCSBJUlFGX1NIQVJFRCwgTFBGQ19GUF9EUklWRVJfSEFORExFUl9OQU1FLCBwaGJhKTsKKworCWlmIChyYykgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSIwNDIxIE1TSS1YIHJlcXVlc3RfaXJxIGZhaWxlZCAoJWQpLCAiCi0JCQkJImNvbnRpbnVpbmcgd2l0aCBNU0lcbiIsIGVycm9yKTsKLQkJcGNpX2Rpc2FibGVfbXNpeChwaGJhLT5wY2lkZXYpOworCQkJCSIwNDI5IE1TSS1YIGZhc3QtcGF0aCByZXF1ZXN0X2lycSBmYWlsZWQgIgorCQkJCSIoJWQpLCBjb250aW51aW5nIHdpdGggTVNJXG4iLCByYyk7CisJCWdvdG8gaXJxX2ZhaWxfb3V0OwogCX0KLQlyZXR1cm4gZXJyb3I7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBIQkEgTVNJLVggYXR0ZW50aW9uIGNvbmRpdGlvbnMgdG8gbWVzc2FnZXMKKwkgKi8KKwlwbWIgPSAoTFBGQ19NQk9YUV90ICopIG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXBtYikgeworCQlyYyA9IC1FTk9NRU07CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJIjA0NzQgVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgaXNzdWluZyAiCisJCQkJIk1CT1hfQ09ORklHX01TSSBjb21tYW5kXG4iKTsKKwkJZ290byBtZW1fZmFpbF9vdXQ7CisJfQorCXJjID0gbHBmY19jb25maWdfbXNpKHBoYmEsIHBtYik7CisJaWYgKHJjKQorCQlnb3RvIG1ieF9mYWlsX291dDsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfUE9MTCk7CisJaWYgKHJjICE9IE1CWF9TVUNDRVNTKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX01CT1gsCisJCQkJIjAzNTEgQ29uZmlnIE1TSSBtYWlsYm94IGNvbW1hbmQgZmFpbGVkLCAiCisJCQkJIm1ieENtZCB4JXgsIG1ieFN0YXR1cyB4JXhcbiIsCisJCQkJcG1iLT5tYi5tYnhDb21tYW5kLCBwbWItPm1iLm1ieFN0YXR1cyk7CisJCWdvdG8gbWJ4X2ZhaWxfb3V0OworCX0KKworCS8qIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgbWFpbGJveCBjb21tYW5kICovCisJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJcmV0dXJuIHJjOworCittYnhfZmFpbF9vdXQ6CisJLyogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBtYWlsYm94IGNvbW1hbmQgKi8KKwltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKworbWVtX2ZhaWxfb3V0OgorCS8qIGZyZWUgdGhlIGlycSBhbHJlYWR5IHJlcXVlc3RlZCAqLworCWZyZWVfaXJxKHBoYmEtPm1zaXhfZW50cmllc1sxXS52ZWN0b3IsIHBoYmEpOworCitpcnFfZmFpbF9vdXQ6CisJLyogZnJlZSB0aGUgaXJxIGFscmVhZHkgcmVxdWVzdGVkICovCisJZnJlZV9pcnEocGhiYS0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvciwgcGhiYSk7CisKK21zaV9mYWlsX291dDoKKwkvKiBVbmNvbmZpZ3VyZSBNU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZSAqLworCXBjaV9kaXNhYmxlX21zaXgocGhiYS0+cGNpZGV2KTsKKwlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogbHBmY19kaXNhYmxlX21zaXg6IERpc2FibGUgTVNJLVggaW50ZXJydXB0IG1vZGUuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byByZWxlYXNlIHRoZSBNU0ktWCB2ZWN0b3JzIGFuZCB0aGVuIGRpc2FibGUgdGhlCisgKiBNU0ktWCBpbnRlcnJ1cHQgbW9kZS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2Rpc2FibGVfbXNpeChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7Ci0JZnJlZV9pcnEocGhiYS0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvciwgcGhiYSk7CisJaW50IGk7CisKKwkvKiBGcmVlIHVwIE1TSS1YIG11bHRpLW1lc3NhZ2UgdmVjdG9ycyAqLworCWZvciAoaSA9IDA7IGkgPCBMUEZDX01TSVhfVkVDVE9SUzsgaSsrKQorCQlmcmVlX2lycShwaGJhLT5tc2l4X2VudHJpZXNbaV0udmVjdG9yLCBwaGJhKTsKKwkvKiBEaXNhYmxlIE1TSS1YICovCiAJcGNpX2Rpc2FibGVfbXNpeChwaGJhLT5wY2lkZXYpOwogfQogCisvKioKKyAqIGxwZmNfcGNpX3Byb2JlX29uZTogbHBmYyBQQ0kgcHJvYmUgZnVuYyB0byByZWdpc3RlciBkZXZpY2UgdG8gUENJIHN1YnN5c3RlbS4KKyAqIEBwZGV2OiBwb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqIEBwaWQ6IHBvaW50ZXIgdG8gUENJIGRldmljZSBpZGVudGlmaWVyCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRvIGJlIHJlZ2lzdGVyZWQgdG8gdGhlIGtlcm5lbCdzIFBDSSBzdWJzeXN0ZW0uIFdoZW4gYW4KKyAqIEVtdWxleCBIQkEgaXMgcHJlc2VudGVkIGluIFBDSSBidXMsIHRoZSBrZXJuZWwgUENJIHN1YnN5c3RlbSBsb29rcyBhdAorICogUENJIGRldmljZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiBvZiB0aGUgZGV2aWNlIGFuZCBkcml2ZXIgdG8gc2VlIGlmIHRoZQorICogZHJpdmVyIHN0YXRlIHRoYXQgaXQgY2FuIHN1cHBvcnQgdGhpcyBraW5kIG9mIGRldmljZS4gSWYgdGhlIG1hdGNoIGlzCisgKiBzdWNjZXNzZnVsLCB0aGUgZHJpdmVyIGNvcmUgaW52b2tlcyB0aGlzIHJvdXRpbmUuIElmIHRoaXMgcm91dGluZQorICogZGV0ZXJtaW5lcyBpdCBjYW4gY2xhaW0gdGhlIEhCQSwgaXQgZG9lcyBhbGwgdGhlIGluaXRpYWxpemF0aW9uIHRoYXQgaXQKKyAqIG5lZWRzIHRvIGRvIHRvIGhhbmRsZSB0aGUgSEJBIHByb3Blcmx5LgorICoKKyAqIFJldHVybiBjb2RlCisgKiAgIDAgLSBkcml2ZXIgY2FuIGNsYWltIHRoZSBkZXZpY2UKKyAqICAgbmVnYXRpdmUgdmFsdWUgLSBkcml2ZXIgY2FuIG5vdCBjbGFpbSB0aGUgZGV2aWNlCisgKiovCiBzdGF0aWMgaW50IF9fZGV2aW5pdAogbHBmY19wY2lfcHJvYmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkKQogewpAQCAtMTk1Niw2ICsyMzU3LDcgQEAKIAlpbnQgIGksIGhicV9jb3VudDsKIAl1aW50MTZfdCBpb3RhZzsKIAlpbnQgYmFycyA9IHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSk7CisJc3RydWN0IGxwZmNfYWRhcHRlcl9ldmVudF9oZWFkZXIgYWRhcHRlcl9ldmVudDsKIAogCWlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpCiAJCWdvdG8gb3V0OwpAQCAtMTk2Niw2ICsyMzY4LDcgQEAKIAlpZiAoIXBoYmEpCiAJCWdvdG8gb3V0X3JlbGVhc2VfcmVnaW9uczsKIAorCWF0b21pY19zZXQoJnBoYmEtPmZhc3RfZXZlbnRfY291bnQsIDApOwogCXNwaW5fbG9ja19pbml0KCZwaGJhLT5oYmFsb2NrKTsKIAogCS8qIEluaXRpYWxpemUgbmRscCBtYW5hZ2VtZW50IHNwaW5sb2NrICovCkBAIC0xOTc4LDYgKzIzODEsNyBAQAogCQlnb3RvIG91dF9mcmVlX3BoYmE7CiAKIAlJTklUX0xJU1RfSEVBRCgmcGhiYS0+cG9ydF9saXN0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwaGJhLT53YWl0XzRfbWxvX21fcSk7CiAJLyoKIAkgKiBHZXQgYWxsIHRoZSBtb2R1bGUgcGFyYW1zIGZvciBjb25maWd1cmluZyB0aGlzIGhvc3QgYW5kIHRoZW4KIAkgKiBlc3RhYmxpc2ggdGhlIGhvc3QuCkBAIC0yMDAwLDYgKzI0MDQsOSBAQAogCWluaXRfdGltZXIoJnBoYmEtPmZhYnJpY19ibG9ja190aW1lcik7CiAJcGhiYS0+ZmFicmljX2Jsb2NrX3RpbWVyLmZ1bmN0aW9uID0gbHBmY19mYWJyaWNfYmxvY2tfdGltZW91dDsKIAlwaGJhLT5mYWJyaWNfYmxvY2tfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwaGJhOworCWluaXRfdGltZXIoJnBoYmEtPmVyYXR0X3BvbGwpOworCXBoYmEtPmVyYXR0X3BvbGwuZnVuY3Rpb24gPSBscGZjX3BvbGxfZXJhdHQ7CisJcGhiYS0+ZXJhdHRfcG9sbC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHBoYmE7CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAlwY2lfdHJ5X3NldF9td2kocGRldik7CkBAIC0yMDE5LDcgKzI0MjYsNyBAQAogCWJhcjJtYXBfbGVuICAgICAgICA9IHBjaV9yZXNvdXJjZV9sZW4ocGhiYS0+cGNpZGV2LCAyKTsKIAogCS8qIE1hcCBIQkEgU0xJTSB0byBhIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MuICovCi0JcGhiYS0+c2xpbV9tZW1tYXBfcCAgICAgID0gaW9yZW1hcChwaGJhLT5wY2lfYmFyMF9tYXAsIGJhcjBtYXBfbGVuKTsKKwlwaGJhLT5zbGltX21lbW1hcF9wID0gaW9yZW1hcChwaGJhLT5wY2lfYmFyMF9tYXAsIGJhcjBtYXBfbGVuKTsKIAlpZiAoIXBoYmEtPnNsaW1fbWVtbWFwX3ApIHsKIAkJZXJyb3IgPSAtRU5PREVWOwogCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcGRldi0+ZGV2LApAQCAtMjAzNywxMiArMjQ0NCwxOCBAQAogCX0KIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgU0xJLTIgc3RydWN0dXJlcyAqLwotCXBoYmEtPnNsaW0ycCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGhiYS0+cGNpZGV2LT5kZXYsIFNMSTJfU0xJTV9TSVpFLAotCQkJCQkgICZwaGJhLT5zbGltMnBfbWFwcGluZywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwaGJhLT5zbGltMnApCisJcGhiYS0+c2xpbTJwLnZpcnQgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBoYmEtPnBjaWRldi0+ZGV2LAorCQkJCQkgICAgICAgU0xJMl9TTElNX1NJWkUsCisJCQkJCSAgICAgICAmcGhiYS0+c2xpbTJwLnBoeXMsCisJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXBoYmEtPnNsaW0ycC52aXJ0KQogCQlnb3RvIG91dF9pb3VubWFwOwogCi0JbWVtc2V0KHBoYmEtPnNsaW0ycCwgMCwgU0xJMl9TTElNX1NJWkUpOworCW1lbXNldChwaGJhLT5zbGltMnAudmlydCwgMCwgU0xJMl9TTElNX1NJWkUpOworCXBoYmEtPm1ib3ggPSBwaGJhLT5zbGltMnAudmlydCArIG9mZnNldG9mKHN0cnVjdCBscGZjX3NsaTJfc2xpbSwgbWJ4KTsKKwlwaGJhLT5wY2IgPSAocGhiYS0+c2xpbTJwLnZpcnQgKyBvZmZzZXRvZihzdHJ1Y3QgbHBmY19zbGkyX3NsaW0sIHBjYikpOworCXBoYmEtPklPQ0JzID0gKHBoYmEtPnNsaW0ycC52aXJ0ICsKKwkJICAgICAgIG9mZnNldG9mKHN0cnVjdCBscGZjX3NsaTJfc2xpbSwgSU9DQnMpKTsKIAogCXBoYmEtPmhicXNsaW1wLnZpcnQgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBoYmEtPnBjaWRldi0+ZGV2LAogCQkJCQkJIGxwZmNfc2xpX2hicV9zaXplKCksCkBAIC0yMTExLDcgKzI1MjQsNyBAQAogCXBoYmEtPmZjX2FyYnRvdiA9IEZGX0RFRl9BUkJUT1Y7CiAKIAlJTklUX0xJU1RfSEVBRCgmcGhiYS0+d29ya19saXN0KTsKLQlwaGJhLT53b3JrX2hhX21hc2sgPSAoSEFfRVJBVFR8SEFfTUJBVFR8SEFfTEFUVCk7CisJcGhiYS0+d29ya19oYV9tYXNrID0gKEhBX0VSQVRUIHwgSEFfTUJBVFQgfCBIQV9MQVRUKTsKIAlwaGJhLT53b3JrX2hhX21hc2sgfD0gKEhBX1JYTUFTSyA8PCAoTFBGQ19FTFNfUklORyAqIDQpKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHdhaXQgcXVldWUgaGVhZCBmb3IgdGhlIGtlcm5lbCB0aHJlYWQgKi8KQEAgLTIxNDYsMjEgKzI1NTksNDIgQEAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgc2hvc3QpOwogCXBoYmEtPmludHJfdHlwZSA9IE5PTkU7CiAKKwlwaGJhLT5NQnNsaW1hZGRyID0gcGhiYS0+c2xpbV9tZW1tYXBfcDsKKwlwaGJhLT5IQXJlZ2FkZHIgPSBwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3AgKyBIQV9SRUdfT0ZGU0VUOworCXBoYmEtPkNBcmVnYWRkciA9IHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCArIENBX1JFR19PRkZTRVQ7CisJcGhiYS0+SFNyZWdhZGRyID0gcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wICsgSFNfUkVHX09GRlNFVDsKKwlwaGJhLT5IQ3JlZ2FkZHIgPSBwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3AgKyBIQ19SRUdfT0ZGU0VUOworCisJLyogQ29uZmlndXJlIGFuZCBlbmFibGUgaW50ZXJydXB0ICovCiAJaWYgKHBoYmEtPmNmZ191c2VfbXNpID09IDIpIHsKLQkJZXJyb3IgPSBscGZjX2VuYWJsZV9tc2l4KHBoYmEpOwotCQlpZiAoIWVycm9yKQotCQkJcGhiYS0+aW50cl90eXBlID0gTVNJWDsKKwkJLyogTmVlZCB0byBpc3N1ZSBjb25mX3BvcnQgbWJveCBjbWQgYmVmb3JlIGNvbmZfbXNpIG1ib3ggY21kICovCisJCWVycm9yID0gbHBmY19zbGlfY29uZmlnX3BvcnQocGhiYSwgMyk7CisJCWlmIChlcnJvcikKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJCSIwNDI3IEZpcm13YXJlIG5vdCBjYXBhYmxlIG9mIFNMSSAzIG1vZGUuXG4iKTsKKwkJZWxzZSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKKwkJCQkiMDQyNiBGaXJtd2FyZSBjYXBhYmxlIG9mIFNMSSAzIG1vZGUuXG4iKTsKKwkJCS8qIE5vdywgdHJ5IHRvIGVuYWJsZSBNU0ktWCBpbnRlcnJ1cHQgbW9kZSAqLworCQkJZXJyb3IgPSBscGZjX2VuYWJsZV9tc2l4KHBoYmEpOworCQkJaWYgKCFlcnJvcikgeworCQkJCXBoYmEtPmludHJfdHlwZSA9IE1TSVg7CisJCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkJCQkiMDQzMCBlbmFibGUgTVNJLVggbW9kZS5cbiIpOworCQkJfQorCQl9CiAJfQogCiAJLyogRmFsbGJhY2sgdG8gTVNJIGlmIE1TSS1YIGluaXRpYWxpemF0aW9uIGZhaWxlZCAqLwogCWlmIChwaGJhLT5jZmdfdXNlX21zaSA+PSAxICYmIHBoYmEtPmludHJfdHlwZSA9PSBOT05FKSB7CiAJCXJldHZhbCA9IHBjaV9lbmFibGVfbXNpKHBoYmEtPnBjaWRldik7Ci0JCWlmICghcmV0dmFsKQorCQlpZiAoIXJldHZhbCkgewogCQkJcGhiYS0+aW50cl90eXBlID0gTVNJOwotCQllbHNlCiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKLQkJCQkJIjA0NTIgRW5hYmxlIE1TSSBmYWlsZWQsIGNvbnRpbnVpbmcgIgotCQkJCQkid2l0aCBJUlFcbiIpOworCQkJCQkiMDQ3MyBlbmFibGUgTVNJIG1vZGUuXG4iKTsKKwkJfSBlbHNlCisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKKwkJCQkJIjA0NTIgZW5hYmxlIElSUSBtb2RlLlxuIik7CiAJfQogCiAJLyogTVNJLVggaXMgdGhlIG9ubHkgY2FzZSB0aGUgZG9lc24ndCBuZWVkIHRvIGNhbGwgcmVxdWVzdF9pcnEgKi8KQEAgLTIxNzYsMTggKzI2MTAsMTYgQEAKIAkJCXBoYmEtPmludHJfdHlwZSA9IElOVHg7CiAJfQogCi0JcGhiYS0+TUJzbGltYWRkciA9IHBoYmEtPnNsaW1fbWVtbWFwX3A7Ci0JcGhiYS0+SEFyZWdhZGRyID0gcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wICsgSEFfUkVHX09GRlNFVDsKLQlwaGJhLT5DQXJlZ2FkZHIgPSBwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3AgKyBDQV9SRUdfT0ZGU0VUOwotCXBoYmEtPkhTcmVnYWRkciA9IHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCArIEhTX1JFR19PRkZTRVQ7Ci0JcGhiYS0+SENyZWdhZGRyID0gcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wICsgSENfUkVHX09GRlNFVDsKLQogCWlmIChscGZjX2FsbG9jX3N5c2ZzX2F0dHIodnBvcnQpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJIjE0NzYgRmFpbGVkIHRvIGFsbG9jYXRlIHN5c2ZzIGF0dHJcbiIpOwogCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X2ZyZWVfaXJxOwogCX0KIAogCWlmIChscGZjX3NsaV9oYmFfc2V0dXAocGhiYSkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkiMTQ3NyBGYWlsZWQgdG8gc2V0IHVwIGhiYVxuIik7CiAJCWVycm9yID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcmVtb3ZlX2RldmljZTsKIAl9CkBAIC0yMjA2LDYgKzI2MzgsMTYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCX0KIAorCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJIjA0MjggUGVyZm9ybSBTQ1NJIHNjYW5cbiIpOworCS8qIFNlbmQgYm9hcmQgYXJyaXZhbCBldmVudCB0byB1cHBlciBsYXllciAqLworCWFkYXB0ZXJfZXZlbnQuZXZlbnRfdHlwZSA9IEZDX1JFR19BREFQVEVSX0VWRU5UOworCWFkYXB0ZXJfZXZlbnQuc3ViY2F0ZWdvcnkgPSBMUEZDX0VWRU5UX0FSUklWQUw7CisJZmNfaG9zdF9wb3N0X3ZlbmRvcl9ldmVudChzaG9zdCwgZmNfZ2V0X2V2ZW50X251bWJlcigpLAorCQlzaXplb2YoYWRhcHRlcl9ldmVudCksCisJCShjaGFyICopICZhZGFwdGVyX2V2ZW50LAorCQlTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IFBDSV9WRU5ET1JfSURfRU1VTEVYKTsKKwogCXNjc2lfc2Nhbl9ob3N0KHNob3N0KTsKIAogCXJldHVybiAwOwpAQCAtMjIzOCwxMSArMjY4MCwxMSBAQAogCX0KIAlscGZjX21lbV9mcmVlKHBoYmEpOwogb3V0X2ZyZWVfaGJxc2xpbXA6Ci0JZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgbHBmY19zbGlfaGJxX3NpemUoKSwgcGhiYS0+aGJxc2xpbXAudmlydCwKLQkJCSAgcGhiYS0+aGJxc2xpbXAucGh5cyk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgbHBmY19zbGlfaGJxX3NpemUoKSwKKwkJCSAgcGhiYS0+aGJxc2xpbXAudmlydCwgcGhiYS0+aGJxc2xpbXAucGh5cyk7CiBvdXRfZnJlZV9zbGltOgotCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIFNMSTJfU0xJTV9TSVpFLCBwaGJhLT5zbGltMnAsCi0JCQkJCQkJcGhiYS0+c2xpbTJwX21hcHBpbmcpOworCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIFNMSTJfU0xJTV9TSVpFLAorCQkJICBwaGJhLT5zbGltMnAudmlydCwgcGhiYS0+c2xpbTJwLnBoeXMpOwogb3V0X2lvdW5tYXA6CiAJaW91bm1hcChwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3ApOwogb3V0X2lvdW5tYXBfc2xpbToKQEAgLTIyNjIsNiArMjcwNCwxNCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorLyoqCisgKiBscGZjX3BjaV9yZW1vdmVfb25lOiBscGZjIFBDSSBmdW5jIHRvIHVucmVnaXN0ZXIgZGV2aWNlIGZyb20gUENJIHN1YnN5c3RlbS4KKyAqIEBwZGV2OiBwb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdG8gYmUgcmVnaXN0ZXJlZCB0byB0aGUga2VybmVsJ3MgUENJIHN1YnN5c3RlbS4gV2hlbiBhbgorICogRW11bGV4IEhCQSBpcyByZW1vdmVkIGZyb20gUENJIGJ1cy4gSXQgcGVyZm9ybSBhbGwgdGhlIG5lY2Vzc2FyeSBjbGVhbnVwCisgKiBmb3IgdGhlIEhCQSBkZXZpY2UgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBQQ0kgc3Vic3lzdGVtIHByb3Blcmx5LgorICoqLwogc3RhdGljIHZvaWQgX19kZXZleGl0CiBscGZjX3BjaV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtMjMxNiwxMiArMjc2NiwxMiBAQAogCWxwZmNfc2NzaV9mcmVlKHBoYmEpOwogCWxwZmNfbWVtX2ZyZWUocGhiYSk7CiAKLQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBscGZjX3NsaV9oYnFfc2l6ZSgpLCBwaGJhLT5oYnFzbGltcC52aXJ0LAotCQkJICBwaGJhLT5oYnFzbGltcC5waHlzKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBscGZjX3NsaV9oYnFfc2l6ZSgpLAorCQkJICBwaGJhLT5oYnFzbGltcC52aXJ0LCBwaGJhLT5oYnFzbGltcC5waHlzKTsKIAogCS8qIEZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBTTEkyIGludGVyZmFjZSAqLwogCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIFNMSTJfU0xJTV9TSVpFLAotCQkJICBwaGJhLT5zbGltMnAsIHBoYmEtPnNsaW0ycF9tYXBwaW5nKTsKKwkJCSAgcGhiYS0+c2xpbTJwLnZpcnQsIHBoYmEtPnNsaW0ycC5waHlzKTsKIAogCS8qIHVubWFwIGFkYXB0ZXIgU0xJTSBhbmQgQ29udHJvbCBSZWdpc3RlcnMgKi8KIAlpb3VubWFwKHBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCk7CkBAIC0yMzM2LDEzICsyNzg2LDIxIEBACiB9CiAKIC8qKgotICogbHBmY19pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZAotICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQotICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVlY3Rpb24gc3RhdGUKKyAqIGxwZmNfaW9fZXJyb3JfZGV0ZWN0ZWQ6IERyaXZlciBtZXRob2QgZm9yIGhhbmRsaW5nIFBDSSBJL08gZXJyb3IgZGV0ZWN0ZWQuCisgKiBAcGRldjogcG9pbnRlciB0byBQQ0kgZGV2aWNlLgorICogQHN0YXRlOiB0aGUgY3VycmVudCBQQ0kgY29ubmVjdGlvbiBzdGF0ZS4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nCi0gKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KLSAqLworICogVGhpcyByb3V0aW5lIGlzIHJlZ2lzdGVyZWQgdG8gdGhlIFBDSSBzdWJzeXN0ZW0gZm9yIGVycm9yIGhhbmRsaW5nLiBUaGlzCisgKiBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIFBDSSBzdWJzeXN0ZW0gYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZworICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLCBpdCB3aWxsCisgKiBuZWVkIHRvIHN0b3AgYWxsIHRoZSBJL09zIGFuZCBpbnRlcnJ1cHQocykgdG8gdGhlIGRldmljZS4gT25jZSB0aGF0IGlzCisgKiBkb25lLCBpdCB3aWxsIHJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUIGZvciB0aGUgUENJIHN1YnN5c3RlbSB0bworICogcGVyZm9ybSBwcm9wZXIgcmVjb3ZlcnkgYXMgZGVzaXJlZC4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVCAtIG5lZWQgdG8gcmVzZXQgYmVmb3JlIHJlY292ZXJ5CisgKiAgIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1QgLSBkZXZpY2UgY291bGQgbm90IGJlIHJlY292ZXJlZAorICoqLwogc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgbHBmY19pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQlwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQogewpAQCAtMjM1MSw4ICsyODA5LDE1IEBACiAJc3RydWN0IGxwZmNfc2xpICpwc2xpID0gJnBoYmEtPnNsaTsKIAlzdHJ1Y3QgbHBmY19zbGlfcmluZyAgKnByaW5nOwogCi0JaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkJIjA0NzIgUENJIGNoYW5uZWwgSS9PIHBlcm1hbmVudCBmYWlsdXJlXG4iKTsKKwkJLyogQmxvY2sgYWxsIFNDU0kgZGV2aWNlcycgSS9PcyBvbiB0aGUgaG9zdCAqLworCQlscGZjX3Njc2lfZGV2X2Jsb2NrKHBoYmEpOworCQkvKiBDbGVhbiB1cCBhbGwgZHJpdmVyJ3Mgb3V0c3RhbmRpbmcgU0NTSSBJL09zICovCisJCWxwZmNfc2xpX2ZsdXNoX2ZjcF9yaW5ncyhwaGJhKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJfQogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCS8qCkBAIC0yMzc2LDEwICsyODQxLDIxIEBACiB9CiAKIC8qKgotICogbHBmY19pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBwY2kgYnVzIGhhcyBiZWVuIHJlc2V0LgotICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICogbHBmY19pb19zbG90X3Jlc2V0OiBSZXN0YXJ0IGEgUENJIGRldmljZSBmcm9tIHNjcmF0Y2guCisgKiBAcGRldjogcG9pbnRlciB0byBQQ0kgZGV2aWNlLgogICoKLSAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1ib290LgorICogVGhpcyByb3V0aW5lIGlzIHJlZ2lzdGVyZWQgdG8gdGhlIFBDSSBzdWJzeXN0ZW0gZm9yIGVycm9yIGhhbmRsaW5nLiBUaGlzIGlzCisgKiBjYWxsZWQgYWZ0ZXIgUENJIGJ1cyBoYXMgYmVlbiByZXNldCB0byByZXN0YXJ0IHRoZSBQQ0kgY2FyZCBmcm9tIHNjcmF0Y2gsCisgKiBhcyBpZiBmcm9tIGEgY29sZC1ib290LiBEdXJpbmcgdGhlIFBDSSBzdWJzeXN0ZW0gZXJyb3IgcmVjb3ZlcnksIGFmdGVyIHRoZQorICogZHJpdmVyIHJldHVybnMgUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVCwgdGhlIFBDSSBzdWJzeXN0ZW0gd2lsbCBwZXJmb3JtCisgKiBwcm9wZXIgZXJyb3IgcmVjb3ZlcnkgYW5kIHRoZW4gY2FsbCB0aGlzIHJvdXRpbmUgYmVmb3JlIGNhbGxpbmcgdGhlIC5yZXN1bWUKKyAqIG1ldGhvZCB0byByZWNvdmVyIHRoZSBkZXZpY2UuIFRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplIHRoZSBIQkEgZGV2aWNlLAorICogZW5hYmxlIHRoZSBpbnRlcnJ1cHQsIGJ1dCBpdCB3aWxsIGp1c3QgcHV0IHRoZSBIQkEgdG8gb2ZmbGluZSBzdGF0ZSB3aXRob3V0CisgKiBwYXNzaW5nIGFueSBJL08gdHJhZmZpYy4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEIC0gdGhlIGRldmljZSBoYXMgYmVlbiByZWNvdmVyZWQKKyAqICAgUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVCAtIGRldmljZSBjb3VsZCBub3QgYmUgcmVjb3ZlcmVkCiAgKi8KIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGxwZmNfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTI0MDQsMjAgKzI4ODAsMzQgQEAKIAkvKiBFbmFibGUgY29uZmlndXJlZCBpbnRlcnJ1cHQgbWV0aG9kICovCiAJcGhiYS0+aW50cl90eXBlID0gTk9ORTsKIAlpZiAocGhiYS0+Y2ZnX3VzZV9tc2kgPT0gMikgewotCQllcnJvciA9IGxwZmNfZW5hYmxlX21zaXgocGhiYSk7Ci0JCWlmICghZXJyb3IpCi0JCQlwaGJhLT5pbnRyX3R5cGUgPSBNU0lYOworCQkvKiBOZWVkIHRvIGlzc3VlIGNvbmZfcG9ydCBtYm94IGNtZCBiZWZvcmUgY29uZl9tc2kgbWJveCBjbWQgKi8KKwkJZXJyb3IgPSBscGZjX3NsaV9jb25maWdfcG9ydChwaGJhLCAzKTsKKwkJaWYgKGVycm9yKQorCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0lOSVQsCisJCQkJIjA0NzggRmlybXdhcmUgbm90IGNhcGFibGUgb2YgU0xJIDMgbW9kZS5cbiIpOworCQllbHNlIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJCSIwNDc5IEZpcm13YXJlIGNhcGFibGUgb2YgU0xJIDMgbW9kZS5cbiIpOworCQkJLyogTm93LCB0cnkgdG8gZW5hYmxlIE1TSS1YIGludGVycnVwdCBtb2RlICovCisJCQllcnJvciA9IGxwZmNfZW5hYmxlX21zaXgocGhiYSk7CisJCQlpZiAoIWVycm9yKSB7CisJCQkJcGhiYS0+aW50cl90eXBlID0gTVNJWDsKKwkJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKKwkJCQkJCSIwNDgwIGVuYWJsZSBNU0ktWCBtb2RlLlxuIik7CisJCQl9CisJCX0KIAl9CiAKIAkvKiBGYWxsYmFjayB0byBNU0kgaWYgTVNJLVggaW5pdGlhbGl6YXRpb24gZmFpbGVkICovCiAJaWYgKHBoYmEtPmNmZ191c2VfbXNpID49IDEgJiYgcGhiYS0+aW50cl90eXBlID09IE5PTkUpIHsKIAkJcmV0dmFsID0gcGNpX2VuYWJsZV9tc2kocGhiYS0+cGNpZGV2KTsKLQkJaWYgKCFyZXR2YWwpCisJCWlmICghcmV0dmFsKSB7CiAJCQlwaGJhLT5pbnRyX3R5cGUgPSBNU0k7Ci0JCWVsc2UKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAotCQkJCQkiMDQ3MCBFbmFibGUgTVNJIGZhaWxlZCwgY29udGludWluZyAiCi0JCQkJCSJ3aXRoIElSUVxuIik7CisJCQkJCSIwNDgxIGVuYWJsZSBNU0kgbW9kZS5cbiIpOworCQl9IGVsc2UKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJCQkiMDQ3MCBlbmFibGUgSVJRIG1vZGUuXG4iKTsKIAl9CiAKIAkvKiBNU0ktWCBpcyB0aGUgb25seSBjYXNlIHRoZSBkb2Vzbid0IG5lZWQgdG8gY2FsbCByZXF1ZXN0X2lycSAqLwpAQCAtMjQ0MCwxMSArMjkzMCwxMyBAQAogfQogCiAvKioKLSAqIGxwZmNfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KLSAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqIGxwZmNfaW9fcmVzdW1lOiBSZXN1bWUgUENJIEkvTyBvcGVyYXRpb24uCisgKiBAcGRldjogcG9pbnRlciB0byBQQ0kgZGV2aWNlCiAgKgotICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzIHVzIHRoYXQKLSAqIGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4KKyAqIFRoaXMgcm91dGluZSBpcyByZWdpc3RlcmVkIHRvIHRoZSBQQ0kgc3Vic3lzdGVtIGZvciBlcnJvciBoYW5kbGluZy4gSXQgaXMKKyAqIGNhbGxlZCB3aGVuIGtlcm5lbCBlcnJvciByZWNvdmVyeSB0ZWxscyB0aGUgbHBmYyBkcml2ZXIgdGhhdCBpdCBpcyBvayB0bworICogcmVzdW1lIG5vcm1hbCBQQ0kgb3BlcmF0aW9uIGFmdGVyIFBDSSBidXMgZXJyb3IgcmVjb3ZlcnkuIEFmdGVyIHRoaXMgY2FsbCwKKyAqIHRyYWZmaWMgY2FuIHN0YXJ0IHRvIGZsb3cgZnJvbSB0aGlzIGRldmljZSBhZ2Fpbi4KICAqLwogc3RhdGljIHZvaWQgbHBmY19pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC0yNDkxLDYgKzI5ODMsOCBAQAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9aRVBIWVIsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCisJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX0hPUk5FVCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7UENJX1ZFTkRPUl9JRF9FTVVMRVgsIFBDSV9ERVZJQ0VfSURfWkVQSFlSX1NDU1AsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX1pFUEhZUl9EQ1NQLApAQCAtMjUyMSw2ICszMDE1LDEyIEBACiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJe1BDSV9WRU5ET1JfSURfRU1VTEVYLCBQQ0lfREVWSUNFX0lEX1NBVF9TLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9QUk9URVVTX1ZGLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9QUk9URVVTX1BGLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXtQQ0lfVkVORE9SX0lEX0VNVUxFWCwgUENJX0RFVklDRV9JRF9QUk9URVVTX1MsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyAwIH0KIH07CiAKQEAgLTI1NDAsNiArMzA0MCwxOCBAQAogCS5lcnJfaGFuZGxlciAgICA9ICZscGZjX2Vycl9oYW5kbGVyLAogfTsKIAorLyoqCisgKiBscGZjX2luaXQ6IGxwZmMgbW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgbHBmYyBtb2R1bGUgaXMgbG9hZGVkIGludG8gdGhlCisgKiBrZXJuZWwuIFRoZSBzcGVjaWFsIGtlcm5lbCBtYWNybyBtb2R1bGVfaW5pdCgpIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlCisgKiByb2xlIG9mIHRoaXMgcm91dGluZSB0byB0aGUga2VybmVsIGFzIGxwZmMgbW9kdWxlIGVudHJ5IHBvaW50LgorICoKKyAqIFJldHVybiBjb2RlcworICogICAwIC0gc3VjY2Vzc2Z1bAorICogICAtRU5PTUVNIC0gRkMgYXR0YWNoIHRyYW5zcG9ydCBmYWlsZWQKKyAqICAgYWxsIG90aGVycyAtIGZhaWxlZAorICovCiBzdGF0aWMgaW50IF9faW5pdAogbHBmY19pbml0KHZvaWQpCiB7CkBAIC0yNTY3LDEyICszMDc5LDIwIEBACiAJZXJyb3IgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZscGZjX2RyaXZlcik7CiAJaWYgKGVycm9yKSB7CiAJCWZjX3JlbGVhc2VfdHJhbnNwb3J0KGxwZmNfdHJhbnNwb3J0X3RlbXBsYXRlKTsKLQkJZmNfcmVsZWFzZV90cmFuc3BvcnQobHBmY192cG9ydF90cmFuc3BvcnRfdGVtcGxhdGUpOworCQlpZiAobHBmY19lbmFibGVfbnBpdikKKwkJCWZjX3JlbGVhc2VfdHJhbnNwb3J0KGxwZmNfdnBvcnRfdHJhbnNwb3J0X3RlbXBsYXRlKTsKIAl9CiAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKKy8qKgorICogbHBmY19leGl0OiBscGZjIG1vZHVsZSByZW1vdmFsIHJvdXRpbmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgd2hlbiB0aGUgbHBmYyBtb2R1bGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwuCisgKiBUaGUgc3BlY2lhbCBrZXJuZWwgbWFjcm8gbW9kdWxlX2V4aXQoKSBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSByb2xlIG9mCisgKiB0aGlzIHJvdXRpbmUgdG8gdGhlIGtlcm5lbCBhcyBscGZjIG1vZHVsZSBleGl0IHBvaW50LgorICovCiBzdGF0aWMgdm9pZCBfX2V4aXQKIGxwZmNfZXhpdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwppbmRleCA3YTliZTRjLi43NDY1ZmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAibHBmY19ody5oIgogI2luY2x1ZGUgImxwZmNfc2xpLmgiCisjaW5jbHVkZSAibHBmY19ubC5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTM3LDEwICszOCwyMCBAQAogI2luY2x1ZGUgImxwZmNfY3J0bi5oIgogI2luY2x1ZGUgImxwZmNfY29tcGF0LmgiCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2R1bXBfbWVtOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciByZXRyaWV2aW5nIEhCQSdzIFZQRCBtZW1vcnkuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKiBAb2Zmc2V0OiBvZmZzZXQgZm9yIGR1bXBpbmcgVlBEIG1lbW9yeSBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIGR1bXAgbWFpbGJveCBjb21tYW5kIHByb3ZpZGVzIGEgbWV0aG9kIGZvciB0aGUgZGV2aWNlIGRyaXZlciB0byBvYnRhaW4KKyAqIHZhcmlvdXMgdHlwZXMgb2YgaW5mb3JtYXRpb24gZnJvbSB0aGUgSEJBIGRldmljZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgZHVtcGluZyBIQkEgVml0YWwgUHJvZHVjdAorICogRGF0YSAoVlBEKSBtZW1vcnkuIFRoaXMgbWFpbGJveCBjb21tYW5kIGlzIHRvIGJlIHVzZWQgZm9yIHJldHJpZXZpbmcgYQorICogcG9ydGlvbiAoRE1QX1JTUF9TSVpFIGJ5dGVzKSBvZiBhIEhCQSdzIFZQRCBmcm9tIHRoZSBIQkEgYXQgYW4gYWRkcmVzcworICogb2Zmc2V0IHNwZWNpZmllZCBieSB0aGUgb2Zmc2V0IHBhcmFtZXRlci4KKyAqKi8KIHZvaWQKIGxwZmNfZHVtcF9tZW0oc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iLCB1aW50MTZfdCBvZmZzZXQpCiB7CkBAIC02NSwxMCArNzYsMTcgQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfcmVhZF9udiAgSXNzdWUgYSBSRUFEIE5WUEFSQU0gICAgICAgICovCi0vKiAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3JlYWRfbnY6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgSEJBJ3MgTlZSQU0gcGFyYW0uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIHJlYWQgTlZSQU0gbWFpbGJveCBjb21tYW5kIHJldHVybnMgdGhlIEhCQSdzIG5vbi12b2xhdGlsZSBwYXJhbWV0ZXJzCisgKiB0aGF0IGFyZSB1c2VkIGFzIGRlZmF1bHRzIHdoZW4gdGhlIEZpYnJlIENoYW5uZWwgbGluayBpcyBicm91Z2h0IG9uLWxpbmUuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgaW5mb3JtYXRpb24gc3RvcmVkCisgKiBpbiB0aGUgSEJBJ3MgTlZSQU0uIFNwZWNpZmljYWxseSwgdGhlIEhCQSdzIFdXTk4gYW5kIFdXUE4uCisgKiovCiB2b2lkCiBscGZjX3JlYWRfbnYoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iKQogewpAQCAtODEsMTAgKzk5LDE5IEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX2NvbmZpZ19hc3luYyAgSXNzdWUgYSAgICAgICAgICAgICAgICAqLwotLyogIE1CWF9BU1lOQ19FVlRfRU5BQkxFIG1haWxib3ggY29tbWFuZCAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19jb25maWdfYXN5bmM6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIGVuYWJsaW5nIEhCQSBhc3luYyBldmVudC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqIEByaW5nOiByaW5nIG51bWJlciBmb3IgdGhlIGFzeW5jaHJvbm91cyBldmVudCB0byBiZSBjb25maWd1cmVkLgorICoKKyAqIFRoZSBhc3luY2hyb25vdXMgZXZlbnQgZW5hYmxlIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIGVuYWJsZSB0aGUKKyAqIGFzeW5jaHJvbm91cyBldmVudCBwb3N0aW5nIHZpYSB0aGUgQVNZTkNfU1RBVFVTX0NOIElPQ0IgcmVzcG9uc2UgYW5kCisgKiBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgcmluZyB0byB3aGljaCBldmVudHMgYXJlIHBvc3RlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgZW5hYmxpbmcgSEJBIGFzeW5jaHJvbm91cworICogZXZlbnQgc3VwcG9ydCBvbiBhIElPQ0IgcmluZy4KKyAqKi8KIHZvaWQKIGxwZmNfY29uZmlnX2FzeW5jKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYiwKIAkJdWludDMyX3QgcmluZykKQEAgLTk5LDEwICsxMjYsMTkgQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfaGVhcnRfYmVhdCAgSXNzdWUgYSBIRUFSVF9CRUFUICAgICAgICovCi0vKiAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2hlYXJ0X2JlYXQ6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIGhlYXJ0IGJlYXQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIGhlYXJ0IGJlYXQgbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gZGV0ZWN0IGFuIHVucmVzcG9uc2l2ZSBIQkEsIHdoaWNoCisgKiBpcyBkZWZpbmVkIGFzIGFueSBkZXZpY2Ugd2hlcmUgbm8gZXJyb3IgYXR0ZW50aW9uIGlzIHNlbnQgYW5kIGJvdGggbWFpbGJveAorICogYW5kIHJpbmdzIGFyZSBub3QgcHJvY2Vzc2VkLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciBpc3N1aW5nIGEgaGVhcnQgYmVhdCBpbiB0aGUKKyAqIGZvcm0gb2YgbWFpbGJveCBjb21tYW5kIHRvIHRoZSBIQkEuIFRoZSB0aW1lbHkgY29tcGxldGlvbiBvZiB0aGUgaGVhcnQKKyAqIGJlYXQgbWFpbGJveCBjb21tYW5kIGluZGljYXRlcyB0aGUgaGVhbHRoIG9mIHRoZSBIQkEuCisgKiovCiB2b2lkCiBscGZjX2hlYXJ0X2JlYXQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iKQogewpAQCAtMTE1LDEwICsxNTEsMjYgQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfcmVhZF9sYSAgSXNzdWUgYSBSRUFEIExBICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3JlYWRfbGE6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgSEJBIGxpbmsgYXR0ZW50aW9uLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICogQG1wOiBETUEgYnVmZmVyIG1lbW9yeSBmb3IgcmVhZGluZyB0aGUgbGluayBhdHRlbnRpb24gaW5mb3JtYXRpb24gaW50by4KKyAqCisgKiBUaGUgcmVhZCBsaW5rIGF0dGVudGlvbiBtYWlsYm94IGNvbW1hbmQgaXMgaXNzdWVkIHRvIHJlYWQgdGhlIExpbmsgRXZlbnQKKyAqIEF0dGVudGlvbiBpbmZvcm1hdGlvbiBpbmRpY2F0ZWQgYnkgdGhlIEhCQSBwb3J0IHdoZW4gdGhlIExpbmsgRXZlbnQgYml0CisgKiBvZiB0aGUgSG9zdCBBdHRlbnRpb24gKEhTVEFUVCkgcmVnaXN0ZXIgaXMgc2V0IHRvIDEuIEEgTGluayBFdmVudAorICogQXR0ZW50aW9uIG9jY3VycyBiYXNlZCBvbiBhbiBleGNlcHRpb24gZGV0ZWN0ZWQgYXQgdGhlIEZpYnJlIENoYW5uZWwgbGluaworICogaW50ZXJmYWNlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciByZWFkaW5nIEhCQSBsaW5rIGF0dGVudGlvbgorICogaW5mb3JtYXRpb24uIEEgRE1BIG1lbW9yeSBoYXMgYmVlbiBzZXQgYXNpZGUgYW5kIGFkZHJlc3MgcGFzc2VkIHRvIHRoZQorICogSEJBIHRocm91Z2ggQG1wIGZvciB0aGUgSEJBIHRvIERNQSBsaW5rIGF0dGVudGlvbiBpbmZvcm1hdGlvbiBpbnRvIHRoZQorICogbWVtb3J5IGFzIHBhcnQgb2YgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAgMCAtIFN1Y2Nlc3MgKGN1cnJlbnRseSBhbHdheXMgcmV0dXJuIDApCisgKiovCiBpbnQKIGxwZmNfcmVhZF9sYShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIsIHN0cnVjdCBscGZjX2RtYWJ1ZiAqbXApCiB7CkBAIC0xNDMsMTAgKzE5NSwyMSBAQAogCXJldHVybiAoMCk7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfY2xlYXJfbGEgIElzc3VlIGEgQ0xFQVIgTEEgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX2NsZWFyX2xhOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciBjbGVhcmluZyBIQkEgbGluayBhdHRlbnRpb24uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIGNsZWFyIGxpbmsgYXR0ZW50aW9uIG1haWxib3ggY29tbWFuZCBpcyBpc3N1ZWQgdG8gY2xlYXIgdGhlIGxpbmsgZXZlbnQKKyAqIGF0dGVudGlvbiBjb25kaXRpb24gaW5kaWNhdGVkIGJ5IHRoZSBMaW5rIEV2ZW50IGJpdCBvZiB0aGUgSG9zdCBBdHRlbnRpb24KKyAqIChIU1RBVFQpIHJlZ2lzdGVyLiBUaGUgbGluayBldmVudCBhdHRlbnRpb24gY29uZGl0aW9uIGlzIGNsZWFyZWQgb25seSBpZgorICogdGhlIGV2ZW50IHRhZyBzcGVjaWZpZWQgbWF0Y2hlcyB0aGF0IG9mIHRoZSBjdXJyZW50IGxpbmsgZXZlbnQgY291bnRlci4KKyAqIFRoZSBjdXJyZW50IGV2ZW50IHRhZyBpcyByZWFkIHVzaW5nIHRoZSByZWFkIGxpbmsgYXR0ZW50aW9uIGV2ZW50IG1haWxib3gKKyAqIGNvbW1hbmQuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIGNsZWFyaW5nIEhCQSBsaW5rIGF0dGVudGlvbgorICogaW5mb3JtYXRpb24uCisgKiovCiB2b2lkCiBscGZjX2NsZWFyX2xhKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYikKIHsKQEAgLTE2MSwxMCArMjI0LDIwIEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY19jb25maWdfbGluayAgSXNzdWUgYSBDT05GSUcgTElOSyAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfY29uZmlnX2xpbms6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIGNvbmZpZ3VyaW5nIGxpbmsgb24gYSBIQkEuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIGNvbmZpZ3VyZSBsaW5rIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIGJlZm9yZSB0aGUgaW5pdGlhbGl6ZSBsaW5rCisgKiBtYWlsYm94IGNvbW1hbmQgdG8gb3ZlcnJpZGUgZGVmYXVsdCB2YWx1ZSBhbmQgdG8gY29uZmlndXJlIGxpbmstb3JpZW50ZWQKKyAqIHBhcmFtZXRlcnMgc3VjaCBhcyBESUQgYWRkcmVzcyBhbmQgdmFyaW91cyB0aW1lcnMuIFR5cGljYWxseSwgdGhpcworICogY29tbWFuZCB3b3VsZCBiZSB1c2VkIGFmdGVyIGFuIEZfUG9ydCBsb2dpbiB0byBzZXQgdGhlIHJldHVybmVkIERJRCBhZGRyZXNzCisgKiBhbmQgdGhlIGZhYnJpYyB0aW1lb3V0IHZhbHVlcy4gVGhpcyBjb21tYW5kIGlzIG5vdCB2YWxpZCBiZWZvcmUgYSBjb25maWd1cmUKKyAqIHBvcnQgY29tbWFuZCBoYXMgY29uZmlndXJlZCB0aGUgSEJBIHBvcnQuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIGNvbmZpZ3VyaW5nIGxpbmsgb24gYSBIQkEuCisgKiovCiB2b2lkCiBscGZjX2NvbmZpZ19saW5rKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYikKIHsKQEAgLTE5OSwxMCArMjcyLDk4IEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX2luaXRfbGluayAgSXNzdWUgYW4gSU5JVCBMSU5LICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19jb25maWdfbXNpOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciBjb25maWd1cmluZyBtc2kteC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgY29uZmlndXJlIE1TSS1YIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgSEJBJ3MgU0xJLTMKKyAqIE1TSS1YIG11bHRpLW1lc3NhZ2UgaW50ZXJydXB0IHZlY3RvciBhc3NvY2lhdGlvbiB0byBpbnRlcnJ1cHQgYXR0ZW50aW9uCisgKiBjb25kaXRpb25zLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAgMCAtIFN1Y2Nlc3MKKyAqICAgIC1FSU5WQUwgLSBGYWlsdXJlCisgKiovCitpbnQKK2xwZmNfY29uZmlnX21zaShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1iKQoreworCU1BSUxCT1hfdCAqbWIgPSAmcG1iLT5tYjsKKwl1aW50MzJfdCBhdHRlbnRpb25Db25kaXRpb25zWzJdOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKHBoYmEtPmNmZ191c2VfbXNpICE9IDIpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkiMDQ3NSBOb3QgY29uZmlndXJlZCBmb3Igc3VwcG9ydGluZyBNU0ktWCAiCisJCQkJImNmZ191c2VfbXNpOiAweCV4XG4iLCBwaGJhLT5jZmdfdXNlX21zaSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwaGJhLT5zbGlfcmV2IDwgMykgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCSIwNDc2IEhCQSBub3Qgc3VwcG9ydGluZyBTTEktMyBvciBsYXRlciAiCisJCQkJIlNMSSBSZXZpc2lvbjogMHgleFxuIiwgcGhiYS0+c2xpX3Jldik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENsZWFyIG1haWxib3ggY29tbWFuZCBmaWVsZHMgKi8KKwltZW1zZXQocG1iLCAwLCBzaXplb2YoTFBGQ19NQk9YUV90KSk7CisKKwkvKgorCSAqIFNMSS0zLCBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdCBGZWFydXJlLgorCSAqLworCisJLyogTXVsdGktbWVzc2FnZSBhdHRlbnRpb24gY29uZmlndXJhdGlvbiAqLworCWF0dGVudGlvbkNvbmRpdGlvbnNbMF0gPSAoSEFfUjBBVFQgfCBIQV9SMUFUVCB8IEhBX1IyQVRUIHwgSEFfRVJBVFQgfAorCQkJCSAgSEFfTEFUVCB8IEhBX01CQVRUKTsKKwlhdHRlbnRpb25Db25kaXRpb25zWzFdID0gMDsKKworCW1iLT51bi52YXJDZmdNU0kuYXR0ZW50aW9uQ29uZGl0aW9uc1swXSA9IGF0dGVudGlvbkNvbmRpdGlvbnNbMF07CisJbWItPnVuLnZhckNmZ01TSS5hdHRlbnRpb25Db25kaXRpb25zWzFdID0gYXR0ZW50aW9uQ29uZGl0aW9uc1sxXTsKKworCS8qCisJICogU2V0IHVwIG1lc3NhZ2UgbnVtYmVyIHRvIEhBIGJpdCBhc3NvY2lhdGlvbgorCSAqLworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorCS8qIFJBMCAoRkNQIFJpbmcpICovCisJbWItPnVuLnZhckNmZ01TSS5tZXNzYWdlTnVtYmVyQnlIQVtIQV9SMF9QT1NdID0gMTsKKwkvKiBSQTEgKE90aGVyIFByb3RvY29sIEV4dHJhIFJpbmcpICovCisJbWItPnVuLnZhckNmZ01TSS5tZXNzYWdlTnVtYmVyQnlIQVtIQV9SMV9QT1NdID0gMTsKKyNlbHNlICAgLyogIF9fTElUVExFX0VORElBTl9CSVRGSUVMRCAqLworCS8qIFJBMCAoRkNQIFJpbmcpICovCisJbWItPnVuLnZhckNmZ01TSS5tZXNzYWdlTnVtYmVyQnlIQVtIQV9SMF9QT1NeM10gPSAxOworCS8qIFJBMSAoT3RoZXIgUHJvdG9jb2wgRXh0cmEgUmluZykgKi8KKwltYi0+dW4udmFyQ2ZnTVNJLm1lc3NhZ2VOdW1iZXJCeUhBW0hBX1IxX1BPU14zXSA9IDE7CisjZW5kaWYKKwkvKiBNdWx0aS1tZXNzYWdlIGludGVycnVwdCBhdXRvY2xlYXIgY29uZmlndXJhdGlvbiovCisJbWItPnVuLnZhckNmZ01TSS5hdXRvQ2xlYXJIQVswXSA9IGF0dGVudGlvbkNvbmRpdGlvbnNbMF07CisJbWItPnVuLnZhckNmZ01TSS5hdXRvQ2xlYXJIQVsxXSA9IGF0dGVudGlvbkNvbmRpdGlvbnNbMV07CisKKwkvKiBGb3Igbm93LCBIQkEgYXV0b2NsZWFyIGRvZXMgbm90IHdvcmsgcmVsaWFibHksIGRpc2FibGUgaXQgKi8KKwltYi0+dW4udmFyQ2ZnTVNJLmF1dG9DbGVhckhBWzBdID0gMDsKKwltYi0+dW4udmFyQ2ZnTVNJLmF1dG9DbGVhckhBWzFdID0gMDsKKworCS8qIFNldCBjb21tYW5kIGFuZCBvd25lciBiaXQgKi8KKwltYi0+bWJ4Q29tbWFuZCA9IE1CWF9DT05GSUdfTVNJOworCW1iLT5tYnhPd25lciA9IE9XTl9IT1NUOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbHBmY19pbml0X2xpbms6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIGluaXRpYWxpemUgbGluayBvbiBhIEhCQS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqIEB0b3BvbG9neTogdGhlIGxpbmsgdG9wb2xvZ3kgZm9yIHRoZSBsaW5rIHRvIGJlIGluaXRpYWxpemVkIHRvLgorICogQGxpbmtzcGVlZDogdGhlIGxpbmsgc3BlZWQgZm9yIHRoZSBsaW5rIHRvIGJlIGluaXRpYWxpemVkIHRvLgorICoKKyAqIFRoZSBpbml0aWFsaXplIGxpbmsgbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgRmlicmUKKyAqIENoYW5uZWwgbGluay4gVGhpcyBjb21tYW5kIG11c3QgZm9sbG93IGEgY29uZmlndXJlIHBvcnQgY29tbWFuZCB0aGF0CisgKiBlc3RhYmxpc2hlcyB0aGUgbW9kZSBvZiBvcGVyYXRpb24uCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIGluaXRpYWxpemluZyBsaW5rIG9uIGEgSEJBCisgKiB3aXRoIHRoZSBzcGVjaWZpZWQgbGluayB0b3BvbG9neSBhbmQgc3BlZWQuCisgKiovCiB2b2lkCiBscGZjX2luaXRfbGluayhzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLAogCSAgICAgICBMUEZDX01CT1hRX3QgKiBwbWIsIHVpbnQzMl90IHRvcG9sb2d5LCB1aW50MzJfdCBsaW5rc3BlZWQpCkBAIC0yNjksMTAgKzQzMCwyNyBAQAogCXJldHVybjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY19yZWFkX3NwYXJhbSAgSXNzdWUgYSBSRUFEIFNQQVJBTSAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfcmVhZF9zcGFyYW06IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgSEJBIHBhcmFtZXRlcnMuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKiBAdnBpOiB2aXJ0dWFsIE5fUG9ydCBpZGVudGlmaWVyLgorICoKKyAqIFRoZSByZWFkIHNlcnZpY2UgcGFyYW1ldGVyIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQgdGhlIEhCQSBwb3J0CisgKiBzZXJ2aWNlIHBhcmFtZXRlcnMuIFRoZSBzZXJ2aWNlIHBhcmFtZXRlcnMgYXJlIHJlYWQgaW50byB0aGUgYnVmZmVyCisgKiBzcGVjaWZpZWQgZGlyZWN0bHkgYnkgYSBCREUgaW4gdGhlIG1haWxib3ggY29tbWFuZC4gVGhlc2Ugc2VydmljZQorICogcGFyYW1ldGVycyBtYXkgdGhlbiBiZSB1c2VkIHRvIGJ1aWxkIHRoZSBwYXlsb2FkIG9mIGFuIE5fUG9ydC9GX1BPcnQKKyAqIGxvZ2luIHJlcXVlc3QgYW5kIHJlcGx5IChMT0dJL0FDQykuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgSEJBIHBvcnQgc2VydmljZQorICogcGFyYW1ldGVycy4gVGhlIERNQSBtZW1vcnkgaXMgYWxsb2NhdGVkIGluIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBhZGRyZXNzZXMKKyAqIGFyZSBwb3B1bGF0ZWQgaW50byB0aGUgbWFpbGJveCBjb21tYW5kIGZvciB0aGUgSEJBIHRvIERNQSB0aGUgc2VydmljZQorICogcGFyYW1ldGVycyBpbnRvLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAgMCAtIFN1Y2Nlc3MKKyAqICAgIDEgLSBETUEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKiovCiBpbnQKIGxwZmNfcmVhZF9zcGFyYW0oc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYiwgaW50IHZwaSkKIHsKQEAgLTMxMiwxMCArNDkwLDIxIEBACiAJcmV0dXJuICgwKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfdW5yZWdfZGlkICBJc3N1ZSBhIFVOUkVHX0RJRCAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3VucmVnX2RpZDogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgdW5yZWdpc3RlcmluZyBESUQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEB2cGk6IHZpcnR1YWwgTl9Qb3J0IGlkZW50aWZpZXIuCisgKiBAZGlkOiByZW1vdGUgcG9ydCBpZGVudGlmaWVyLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgdW5yZWdpc3RlciBESUQgbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gdW5yZWdpc3RlciBhbiBOX1BvcnQvRl9Qb3J0CisgKiBsb2dpbiBmb3IgYW4gdW5rbm93biBSUEkgYnkgc3BlY2lmeWluZyB0aGUgRElEIG9mIGEgcmVtb3RlIHBvcnQuIFRoaXMKKyAqIGNvbW1hbmQgZnJlZXMgYW4gUlBJIGNvbnRleHQgaW4gdGhlIEhCQSBwb3J0LiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mCisgKiBwZXJmb3JtaW5nIGFuIGltcGxpY2l0IE5fUG9ydC9GX1BvcnQgbG9nb3V0LgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciB1bnJlZ2lzdGVyaW5nIGEgcmVtb3RlCisgKiBOX1BvcnQvRl9Qb3J0IChESUQpIGxvZ2luLgorICoqLwogdm9pZAogbHBmY191bnJlZ19kaWQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgdWludDE2X3QgdnBpLCB1aW50MzJfdCBkaWQsCiAJICAgICAgIExQRkNfTUJPWFFfdCAqIHBtYikKQEAgLTMzMywxMCArNTIyLDE5IEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX3JlYWRfbnYgIElzc3VlIGEgUkVBRCBDT05GSUcgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY19yZWFkX2NvbmZpZzogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBIQkEgY29uZmlndXJhdGlvbi4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgcmVhZCBjb25maWd1cmF0aW9uIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQgdGhlIEhCQSBwb3J0CisgKiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuIFRoaXMgbWFpbGJveCBjb21tYW5kIHByb3ZpZGVzIGEgbWV0aG9kIGZvcgorICogc2VlaW5nIGFueSBwYXJhbWV0ZXJzIHRoYXQgbWF5IGhhdmUgY2hhbmdlZCB2aWEgdmFyaW91cyBjb25maWd1cmF0aW9uCisgKiBtYWlsYm94IGNvbW1hbmRzLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciByZWFkaW5nIG91dCBIQkEgY29uZmlndXJhdGlvbgorICogcGFyYW1ldGVycy4KKyAqKi8KIHZvaWQKIGxwZmNfcmVhZF9jb25maWcoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iKQogewpAQCAtMzUwLDEwICs1NDgsMTggQEAKIAlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIGxwZmNfcmVhZF9sbmtfc3RhdCAgSXNzdWUgYSBSRUFEIExJTksgU1RBVFVTICovCi0vKiAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBscGZjX3JlYWRfbG5rX3N0YXQ6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgSEJBIGxpbmsgc3RhdHMuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhlIHJlYWQgbGluayBzdGF0dXMgbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCB0aGUgbGluayBzdGF0dXMgZnJvbQorICogdGhlIEhCQS4gTGluayBzdGF0dXMgaW5jbHVkZXMgYWxsIGxpbmstcmVsYXRlZCBlcnJvciBjb3VudGVycy4gVGhlc2UKKyAqIGNvdW50ZXJzIGFyZSBtYWludGFpbmVkIGJ5IHRoZSBIQkEgYW5kIG9yaWdpbmF0ZWQgaW4gdGhlIGxpbmsgaGFyZHdhcmUKKyAqIHVuaXQuIE5vdGUgdGhhdCBhbGwgb2YgdGhlc2UgY291bnRlcnMgd3JhcC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgcmVhZGluZyBvdXQgSEJBIGxpbmsgc3RhdHVzLgorICoqLwogdm9pZAogbHBmY19yZWFkX2xua19zdGF0KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYikKIHsKQEAgLTM2NywxMCArNTczLDMwIEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY19yZWdfbG9naW4gIElzc3VlIGEgUkVHX0xPR0lOICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfcmVnX2xvZ2luOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciByZWdpc3RlcmluZyByZW1vdGUgbG9naW4uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEB2cGk6IHZpcnR1YWwgTl9Qb3J0IGlkZW50aWZpZXIuCisgKiBAZGlkOiByZW1vdGUgcG9ydCBpZGVudGlmaWVyLgorICogQHBhcmFtOiBwb2ludGVyIHRvIG1lbW9yeSBob2xkaW5nIHRoZSBzZXJ2ZXIgcGFyYW1ldGVycy4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKiBAZmxhZzogYWN0aW9uIGZsYWcgdG8gYmUgcGFzc2VkIGJhY2sgZm9yIHRoZSBjb21wbGV0ZSBmdW5jdGlvbi4KKyAqCisgKiBUaGUgcmVnaXN0cmF0aW9uIGxvZ2luIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIHJlZ2lzdGVyIGFuIE5fUG9ydCBvcgorICogRl9Qb3J0IGxvZ2luLiBUaGlzIHJlZ2lzdHJhdGlvbiBhbGxvd3MgdGhlIEhCQSB0byBjYWNoZSB0aGUgcmVtb3RlIE5fUG9ydAorICogc2VydmljZSBwYXJhbWV0ZXJzIGludGVybmFsbHkgYW5kIHRoZXJlYnkgbWFrZSB0aGUgYXBwcm9wcmlhdGUgRkMtMgorICogZGVjaXNpb25zLiBUaGUgcmVtb3RlIHBvcnQgc2VydmljZSBwYXJhbWV0ZXJzIGFyZSBoYW5kZWQgb2ZmIGJ5IHRoZSBkcml2ZXIKKyAqIHRvIHRoZSBIQkEgdXNpbmcgYSBkZXNjcmlwdG9yIGVudHJ5IHRoYXQgZGlyZWN0bHkgaWRlbnRpZmllcyBhIGJ1ZmZlciBpbgorICogaG9zdCBtZW1vcnkuIEluIGV4Y2hhbmdlLCB0aGUgSEJBIHJldHVybnMgYW4gUlBJIGlkZW50aWZpZXIuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlZ2lzdGVyaW5nIHJlbW90ZSBwb3J0IGxvZ2luLgorICogVGhlIGZ1bmN0aW9uIGFsbG9jYXRlcyBETUEgYnVmZmVyIGZvciBwYXNzaW5nIHRoZSBzZXJ2aWNlIHBhcmFtZXRlcnMgdG8gdGhlCisgKiBIQkEgd2l0aCB0aGUgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFJldHVybiBjb2RlcworICogICAgMCAtIFN1Y2Nlc3MKKyAqICAgIDEgLSBETUEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgKiovCiBpbnQKIGxwZmNfcmVnX2xvZ2luKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgdnBpLCB1aW50MzJfdCBkaWQsCiAJICAgICAgIHVpbnQ4X3QgKnBhcmFtLCBMUEZDX01CT1hRX3QgKnBtYiwgdWludDMyX3QgZmxhZykKQEAgLTQxOCwxMCArNjQ0LDIwIEBACiAJcmV0dXJuICgwKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY191bnJlZ19sb2dpbiAgSXNzdWUgYSBVTlJFR19MT0dJTiAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfdW5yZWdfbG9naW46IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHVucmVnaXN0ZXJpbmcgcmVtb3RlIGxvZ2luLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAdnBpOiB2aXJ0dWFsIE5fUG9ydCBpZGVudGlmaWVyLgorICogQHJwaTogcmVtb3RlIHBvcnQgaWRlbnRpZmllcgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgdW5yZWdpc3RyYXRpb24gbG9naW4gbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gdW5yZWdpc3RlciBhbiBOX1BvcnQKKyAqIG9yIEZfUG9ydCBsb2dpbi4gVGhpcyBjb21tYW5kIGZyZWVzIGFuIFJQSSBjb250ZXh0IGluIHRoZSBIQkEuIEl0IGhhcyB0aGUKKyAqIGVmZmVjdCBvZiBwZXJmb3JtaW5nIGFuIGltcGxpY2l0IE5fUG9ydC9GX1BvcnQgbG9nb3V0LgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciB1bnJlZ2lzdGVyaW5nIHJlbW90ZSBwb3J0CisgKiBsb2dpbi4KKyAqKi8KIHZvaWQKIGxwZmNfdW5yZWdfbG9naW4oc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCB2cGksIHVpbnQzMl90IHJwaSwKIAkJIExQRkNfTUJPWFFfdCAqIHBtYikKQEAgLTQ0MCwxMCArNjc2LDIxIEBACiAJcmV0dXJuOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgbHBmY19yZWdfdnBpICAgSXNzdWUgYSBSRUdfVlBJICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgbWFpbGJveCBjb21tYW5kICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIGxwZmNfcmVnX3ZwaTogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgcmVnaXN0ZXJpbmcgdnBvcnQgaWRlbnRpZmllci4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHZwaTogdmlydHVhbCBOX1BvcnQgaWRlbnRpZmllci4KKyAqIEBzaWQ6IEZpYnJlIENoYW5uZWwgU19JRCAoTl9Qb3J0X0lEIGFzc2lnbmVkIHRvIGEgdmlydHVhbCBOX1BvcnQpLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgcmVnaXN0cmF0aW9uIHZwb3J0IGlkZW50aWZpZXIgbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gYWN0aXZhdGUgYQorICogdmlydHVhbCBOX1BvcnQgYWZ0ZXIgaXQgaGFzIGFjcXVpcmVkIGFuIE5fUG9ydF9JRC4gVGhlIEhCQSB2YWxpZGF0ZXMgdGhlCisgKiBOX1BvcnRfSUQgYWdhaW5zdCB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHNlbGVjdGVkIHZpcnR1YWwgTl9Qb3J0IGNvbnRleHQKKyAqIGJsb2NrIGFuZCBtYXJrcyBpdCBhY3RpdmUgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3Npbmcgb2YgSU9DQiBjb21tYW5kcyBhbmQKKyAqIHJlY2VpdmVkIHVuc29saWNpdGVkIGV4Y2hhbmdlcy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgcmVnaXN0ZXJpbmcgYSB2aXJ0dWFsIE5fUG9ydC4KKyAqKi8KIHZvaWQKIGxwZmNfcmVnX3ZwaShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90IHZwaSwgdWludDMyX3Qgc2lkLAogCSAgICAgTFBGQ19NQk9YUV90ICpwbWIpCkBAIC00NjEsMTAgKzcwOCwyMiBAQAogCiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBscGZjX3VucmVnX3ZwaSAgIElzc3VlIGEgVU5SRUdfVk5QSSAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogbHBmY191bnJlZ192cGk6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHVucmVnaXN0ZXJpbmcgdnBvcnQgaWQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEB2cGk6IHZpcnR1YWwgTl9Qb3J0IGlkZW50aWZpZXIuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSB1bnJlZ2lzdHJhdGlvbiB2cG9ydCBpZGVudGlmaWVyIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIGluYWN0aXZhdGUKKyAqIGEgdmlydHVhbCBOX1BvcnQuIFRoZSBkcml2ZXIgbXVzdCBoYXZlIGxvZ2dlZCBvdXQgYW5kIHVucmVnaXN0ZXJlZCBhbGwKKyAqIHJlbW90ZSBOX1BvcnRzIHRvIGFib3J0IGFueSBhY3Rpdml0eSBvbiB0aGUgdmlydHVhbCBOX1BvcnQuIFRoZSBIQkEgd2lsbAorICogdW5yZWdpc3RlcnMgYW55IGRlZmF1bHQgUlBJcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCB2cGksIGFib3J0aW5nCisgKiBhbnkgYWN0aXZlIGV4Y2hhbmdlcy4gVGhlIEhCQSB3aWxsIHBvc3QgdGhlIG1haWxib3ggcmVzcG9uc2UgYWZ0ZXIgbWFraW5nCisgKiB0aGUgdmlydHVhbCBOX1BvcnQgaW5hY3RpdmUuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIHVucmVnaXN0ZXJpbmcgYSB2aXJ0dWFsCisgKiBOX1BvcnQuCisgKiovCiB2b2lkCiBscGZjX3VucmVnX3ZwaShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90IHZwaSwgTFBGQ19NQk9YUV90ICpwbWIpCiB7CkBAIC00NzksMTIgKzczOCwxOSBAQAogCiB9CiAKKy8qKgorICogbHBmY19jb25maWdfcGNiX3NldHVwOiBTZXQgdXAgSU9DQiByaW5ncyBpbiB0aGUgUG9ydCBDb250cm9sIEJsb2NrIChQQ0IpCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc2V0cyB1cCBhbmQgaW5pdGlhbGl6ZXMgdGhlIElPQ0IgcmluZ3MgaW4gdGhlIFBvcnQgQ29udHJvbAorICogQmxvY2sgKFBDQikuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19jb25maWdfcGNiX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCiB7CiAJc3RydWN0IGxwZmNfc2xpICpwc2xpID0gJnBoYmEtPnNsaTsKIAlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmc7Ci0JUENCX3QgKnBjYnAgPSAmcGhiYS0+c2xpbTJwLT5wY2I7CisJUENCX3QgKnBjYnAgPSBwaGJhLT5wY2I7CiAJZG1hX2FkZHJfdCBwZG1hX2FkZHI7CiAJdWludDMyX3Qgb2Zmc2V0OwogCXVpbnQzMl90IGlvY2JDbnQgPSAwOwpAQCAtNTEzLDI5ICs3NzksNDMgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCS8qIENvbW1hbmQgcmluZyBzZXR1cCBmb3IgcmluZyAqLwotCQlwcmluZy0+Y21kcmluZ2FkZHIgPSAodm9pZCAqKSAmcGhiYS0+c2xpbTJwLT5JT0NCc1tpb2NiQ250XTsKKwkJcHJpbmctPmNtZHJpbmdhZGRyID0gKHZvaWQgKikmcGhiYS0+SU9DQnNbaW9jYkNudF07CiAJCXBjYnAtPnJkc2NbaV0uY21kRW50cmllcyA9IHByaW5nLT5udW1DaW9jYjsKIAotCQlvZmZzZXQgPSAodWludDhfdCAqKSAmcGhiYS0+c2xpbTJwLT5JT0NCc1tpb2NiQ250XSAtCi0JCQkgKHVpbnQ4X3QgKikgcGhiYS0+c2xpbTJwOwotCQlwZG1hX2FkZHIgPSBwaGJhLT5zbGltMnBfbWFwcGluZyArIG9mZnNldDsKKwkJb2Zmc2V0ID0gKHVpbnQ4X3QgKikgJnBoYmEtPklPQ0JzW2lvY2JDbnRdIC0KKwkJCSAodWludDhfdCAqKSBwaGJhLT5zbGltMnAudmlydDsKKwkJcGRtYV9hZGRyID0gcGhiYS0+c2xpbTJwLnBoeXMgKyBvZmZzZXQ7CiAJCXBjYnAtPnJkc2NbaV0uY21kQWRkckhpZ2ggPSBwdXRQYWRkckhpZ2gocGRtYV9hZGRyKTsKIAkJcGNicC0+cmRzY1tpXS5jbWRBZGRyTG93ID0gcHV0UGFkZHJMb3cocGRtYV9hZGRyKTsKIAkJaW9jYkNudCArPSBwcmluZy0+bnVtQ2lvY2I7CiAKIAkJLyogUmVzcG9uc2UgcmluZyBzZXR1cCBmb3IgcmluZyAqLwotCQlwcmluZy0+cnNwcmluZ2FkZHIgPSAodm9pZCAqKSAmcGhiYS0+c2xpbTJwLT5JT0NCc1tpb2NiQ250XTsKKwkJcHJpbmctPnJzcHJpbmdhZGRyID0gKHZvaWQgKikgJnBoYmEtPklPQ0JzW2lvY2JDbnRdOwogCiAJCXBjYnAtPnJkc2NbaV0ucnNwRW50cmllcyA9IHByaW5nLT5udW1SaW9jYjsKLQkJb2Zmc2V0ID0gKHVpbnQ4X3QgKikmcGhiYS0+c2xpbTJwLT5JT0NCc1tpb2NiQ250XSAtCi0JCQkgKHVpbnQ4X3QgKilwaGJhLT5zbGltMnA7Ci0JCXBkbWFfYWRkciA9IHBoYmEtPnNsaW0ycF9tYXBwaW5nICsgb2Zmc2V0OworCQlvZmZzZXQgPSAodWludDhfdCAqKSZwaGJhLT5JT0NCc1tpb2NiQ250XSAtCisJCQkgKHVpbnQ4X3QgKilwaGJhLT5zbGltMnAudmlydDsKKwkJcGRtYV9hZGRyID0gcGhiYS0+c2xpbTJwLnBoeXMgKyBvZmZzZXQ7CiAJCXBjYnAtPnJkc2NbaV0ucnNwQWRkckhpZ2ggPSBwdXRQYWRkckhpZ2gocGRtYV9hZGRyKTsKIAkJcGNicC0+cmRzY1tpXS5yc3BBZGRyTG93ID0gcHV0UGFkZHJMb3cocGRtYV9hZGRyKTsKIAkJaW9jYkNudCArPSBwcmluZy0+bnVtUmlvY2I7CiAJfQogfQogCisvKioKKyAqIGxwZmNfcmVhZF9yZXY6IFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgSEJBIHJldmlzaW9uLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSByZWFkIHJldmlzaW9uIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQgdGhlIHJldmlzaW9uIGxldmVscyBvZgorICogdGhlIEhCQSBjb21wb25lbnRzLiBUaGVzZSBjb21wb25lbnRzIGluY2x1ZGUgaGFyZHdhcmUgdW5pdHMsIHJlc2lkZW50CisgKiBmaXJtd2FyZSwgYW5kIGF2YWlsYWJsZSBmaXJtd2FyZS4gSEJBcyB0aGF0IHN1cHBvcnRzIFNMSS0zIG1vZGUgb2YKKyAqIG9wZXJhdGlvbiBwcm92aWRlIGRpZmZlcmVudCByZXNwb25zZSBpbmZvcm1hdGlvbiBkZXBlbmRpbmcgb24gdGhlIHZlcnNpb24KKyAqIHJlcXVlc3RlZCBieSB0aGUgZHJpdmVyLgorICoKKyAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciByZWFkaW5nIEhCQSByZXZpc2lvbgorICogaW5mb3JtYXRpb24uCisgKiovCiB2b2lkCiBscGZjX3JlYWRfcmV2KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYikKIHsKQEAgLTU0OCw2ICs4MjgsMTYgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19idWlsZF9oYnFfcHJvZmlsZTI6IFNldCB1cCB0aGUgSEJRIFNlbGVjdGlvbiBQcm9maWxlIDIuCisgKiBAaGJxbWI6IHBvaW50ZXIgdG8gdGhlIEhCUSBjb25maWd1cmF0aW9uIGRhdGEgc3RydWN0dXJlIGluIG1haWxib3ggY29tbWFuZC4KKyAqIEBoYnFfZGVzYzogcG9pbnRlciB0byB0aGUgSEJRIHNlbGVjdGlvbiBwcm9maWxlIGRlc2NyaXB0b3IuCisgKgorICogVGhlIEhvc3QgQnVmZmVyIFF1ZXVlIChIQlEpIFNlbGVjdGlvbiBQcm9maWxlIDIgc3BlY2lmaWVzIHRoYXQgdGhlIEhCQQorICogdGVzdHMgdGhlIGluY29taW5nIGZyYW1lcycgUl9DVEwvVFlQRSBmaWVsZHMgd2l0aCB3b3JrcyAxMDoxNSBhbmQgcGVyZm9ybXMKKyAqIHRoZSBTZXF1ZW5jZSBMZW5ndGggVGVzdCB1c2luZyB0aGUgZmllbGRzIGluIHRoZSBTZWxlY3Rpb24gUHJvZmlsZSAyCisgKiBleHRlbnNpb24gaW4gd29yZHMgMjA6MzEuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19idWlsZF9oYnFfcHJvZmlsZTIoc3RydWN0IGNvbmZpZ19oYnFfdmFyICpoYnFtYiwKIAkJCXN0cnVjdCBscGZjX2hicV9pbml0ICAqaGJxX2Rlc2MpCkBAIC01NTcsNiArODQ3LDE2IEBACiAJaGJxbWItPnByb2ZpbGVzLnByb2ZpbGUyLnNlcWxlbm9mZiAgPSBoYnFfZGVzYy0+c2VxbGVub2ZmOwogfQogCisvKioKKyAqIGxwZmNfYnVpbGRfaGJxX3Byb2ZpbGUzOiBTZXQgdXAgdGhlIEhCUSBTZWxlY3Rpb24gUHJvZmlsZSAzLgorICogQGhicW1iOiBwb2ludGVyIHRvIHRoZSBIQlEgY29uZmlndXJhdGlvbiBkYXRhIHN0cnVjdHVyZSBpbiBtYWlsYm94IGNvbW1hbmQuCisgKiBAaGJxX2Rlc2M6IHBvaW50ZXIgdG8gdGhlIEhCUSBzZWxlY3Rpb24gcHJvZmlsZSBkZXNjcmlwdG9yLgorICoKKyAqIFRoZSBIb3N0IEJ1ZmZlciBRdWV1ZSAoSEJRKSBTZWxlY3Rpb24gUHJvZmlsZSAzIHNwZWNpZmllcyB0aGF0IHRoZSBIQkEKKyAqIHRlc3RzIHRoZSBpbmNvbWluZyBmcmFtZSdzIFJfQ1RML1RZUEUgZmllbGRzIHdpdGggd29yZHMgMTA6MTUgYW5kIHBlcmZvcm1zCisgKiB0aGUgU2VxdWVuY2UgTGVuZ3RoIFRlc3QgYW5kIEJ5dGUgRmllbGQgVGVzdCB1c2luZyB0aGUgZmllbGRzIGluIHRoZQorICogU2VsZWN0aW9uIFByb2ZpbGUgMyBleHRlbnNpb24gaW4gd29yZHMgMjA6MzEuCisgKiovCiBzdGF0aWMgdm9pZAogbHBmY19idWlsZF9oYnFfcHJvZmlsZTMoc3RydWN0IGNvbmZpZ19oYnFfdmFyICpoYnFtYiwKIAkJCXN0cnVjdCBscGZjX2hicV9pbml0ICAqaGJxX2Rlc2MpCkBAIC01NjksNiArODY5LDE3IEBACiAJICAgICAgIHNpemVvZihoYnFtYi0+cHJvZmlsZXMucHJvZmlsZTMuY21kbWF0Y2gpKTsKIH0KIAorLyoqCisgKiBscGZjX2J1aWxkX2hicV9wcm9maWxlNTogU2V0IHVwIHRoZSBIQlEgU2VsZWN0aW9uIFByb2ZpbGUgNS4KKyAqIEBoYnFtYjogcG9pbnRlciB0byB0aGUgSEJRIGNvbmZpZ3VyYXRpb24gZGF0YSBzdHJ1Y3R1cmUgaW4gbWFpbGJveCBjb21tYW5kLgorICogQGhicV9kZXNjOiBwb2ludGVyIHRvIHRoZSBIQlEgc2VsZWN0aW9uIHByb2ZpbGUgZGVzY3JpcHRvci4KKyAqCisgKiBUaGUgSG9zdCBCdWZmZXIgUXVldWUgKEhCUSkgU2VsZWN0aW9uIFByb2ZpbGUgNSBzcGVjaWZpZXMgYSBoZWFkZXIgSEJRLiBUaGUKKyAqIEhCQSB0ZXN0cyB0aGUgaW5pdGlhbCBmcmFtZSBvZiBhbiBpbmNvbWluZyBzZXF1ZW5jZSB1c2luZyB0aGUgZnJhbWUncworICogUl9DVEwvVFlQRSBmaWVsZHMgd2l0aCB3b3JkcyAxMDoxNSBhbmQgcGVyZm9ybXMgdGhlIFNlcXVlbmNlIExlbmd0aCBUZXN0CisgKiBhbmQgQnl0ZSBGaWVsZCBUZXN0IHVzaW5nIHRoZSBmaWVsZHMgaW4gdGhlIFNlbGVjdGlvbiBQcm9maWxlIDUgZXh0ZW5zaW9uCisgKiB3b3JkcyAyMDozMS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX2J1aWxkX2hicV9wcm9maWxlNShzdHJ1Y3QgY29uZmlnX2hicV92YXIgKmhicW1iLAogCQkJc3RydWN0IGxwZmNfaGJxX2luaXQgICpoYnFfZGVzYykKQEAgLTU4MSw2ICs4OTIsMjAgQEAKIAkgICAgICAgc2l6ZW9mKGhicW1iLT5wcm9maWxlcy5wcm9maWxlNS5jbWRtYXRjaCkpOwogfQogCisvKioKKyAqIGxwZmNfY29uZmlnX2hicTogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgY29uZmlndXJpbmcgYW4gSEJRLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAaWQ6IEhCUSBpZGVudGlmaWVyLgorICogQGhicV9kZXNjOiBwb2ludGVyIHRvIHRoZSBIQkEgZGVzY3JpcHRvciBkYXRhIHN0cnVjdHVyZS4KKyAqIEBoYnFfZW50cnlfaW5kZXg6IGluZGV4IG9mIHRoZSBIQlEgZW50cnkgZGF0YSBzdHJ1Y3R1cmVzLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgY29uZmlndXJlIEhCUSAoSG9zdCBCdWZmZXIgUXVldWUpIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZQorICogYW4gSEJRLiBUaGUgY29uZmlndXJhdGlvbiBiaW5kcyBldmVudHMgdGhhdCByZXF1aXJlIGJ1ZmZlcnMgdG8gYSBwYXJ0aWN1bGFyCisgKiByaW5nIGFuZCBIQlEgYmFzZWQgb24gYSBzZWxlY3Rpb24gcHJvZmlsZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgY29uZmlndXJpbmcgYW4gSEJRLgorICoqLwogdm9pZAogbHBmY19jb25maWdfaGJxKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgaWQsCiAJCSBzdHJ1Y3QgbHBmY19oYnFfaW5pdCAqaGJxX2Rlc2MsCkBAIC02NDEsOCArOTY2LDIzIEBACiAJcmV0dXJuOwogfQogCi0KLQorLyoqCisgKiBscGZjX2NvbmZpZ19yaW5nOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciBjb25maWd1cmluZyBhbiBJT0NCIHJpbmcuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEByaW5nOgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgY29uZmlndXJlIHJpbmcgbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gY29uZmlndXJlIGFuIElPQ0IgcmluZy4gVGhpcworICogY29uZmlndXJhdGlvbiBiaW5kcyBmcm9tIG9uZSB0byBzaXggb2YgSEJBIFJDX0NUTC9UWVBFIG1hc2sgZW50cmllcyB0byB0aGUKKyAqIHJpbmcuIFRoaXMgaXMgdXNlZCB0byBtYXAgaW5jb21pbmcgc2VxdWVuY2VzIHRvIGEgcGFydGljdWxhciByaW5nIHdob3NlCisgKiBSQ19DVEwvVFlQRSBtYXNrIGVudHJ5IG1hdGNoZXMgdGhhdCBvZiB0aGUgc2VxdWVuY2UuIFRoZSBkcml2ZXIgc2hvdWxkIG5vdAorICogYXR0ZW1wdCB0byBjb25maWd1cmUgYSByaW5nIHdob3NlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlcgorICogc3BlY2lmaWVkIGluIHRoZSBQb3J0IENvbnRyb2wgQmxvY2sgKFBDQikuIEl0IGlzIGFuIGVycm9yIHRvIGlzc3VlIHRoZQorICogY29uZmlndXJlIHJpbmcgY29tbWFuZCBtb3JlIHRoYW4gb25jZSB3aXRoIHRoZSBzYW1lIHJpbmcgbnVtYmVyLiBUaGUgSEJBCisgKiByZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdGhpcy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgY29uZmlndXJpbmcgSU9DQiByaW5nLgorICoqLwogdm9pZAogbHBmY19jb25maWdfcmluZyhzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBpbnQgcmluZywgTFBGQ19NQk9YUV90ICogcG1iKQogewpAQCAtNjg0LDYgKzEwMjQsMjAgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19jb25maWdfcG9ydDogUHJlcGFyZSBhIG1haWxib3ggY29tbWFuZCBmb3IgY29uZmlndXJpbmcgcG9ydC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQHBtYjogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGUgY29uZmlndXJlIHBvcnQgbWFpbGJveCBjb21tYW5kIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFBvcnQgQ29udHJvbAorICogQmxvY2sgKFBDQikgaW4gdGhlIGRyaXZlciBtZW1vcnkuIEFmdGVyIHRoaXMgY29tbWFuZCBpcyBpc3N1ZWQsIHRoZQorICogZHJpdmVyIG11c3Qgbm90IGFjY2VzcyB0aGUgbWFpbGJveCBpbiB0aGUgSEJBIHdpdGhvdXQgZmlyc3QgcmVzZXR0aW5nCisgKiB0aGUgSEJBLiBUaGUgSEJBIG1heSBjb3B5IHRoZSBQQ0IgaW5mb3JtYXRpb24gdG8gaW50ZXJuYWwgc3RvcmFnZSBmb3IKKyAqIHN1YnNlcXVlbnQgdXNlOyB0aGUgZHJpdmVyIGNhbiBub3QgY2hhbmdlIHRoZSBQQ0IgaW5mb3JtYXRpb24gdW5sZXNzIGl0CisgKiByZXNldHMgdGhlIEhCQS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgdGhlIG1haWxib3ggY29tbWFuZCBmb3IgY29uZmlndXJpbmcgcG9ydC4KKyAqKi8KIHZvaWQKIGxwZmNfY29uZmlnX3BvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYikKIHsKQEAgLTcwMiw4ICsxMDU2LDggQEAKIAogCW1iLT51bi52YXJDZmdQb3J0LnBjYkxlbiA9IHNpemVvZihQQ0JfdCk7CiAKLQlvZmZzZXQgPSAodWludDhfdCAqKSZwaGJhLT5zbGltMnAtPnBjYiAtICh1aW50OF90ICopcGhiYS0+c2xpbTJwOwotCXBkbWFfYWRkciA9IHBoYmEtPnNsaW0ycF9tYXBwaW5nICsgb2Zmc2V0OworCW9mZnNldCA9ICh1aW50OF90ICopcGhiYS0+cGNiIC0gKHVpbnQ4X3QgKilwaGJhLT5zbGltMnAudmlydDsKKwlwZG1hX2FkZHIgPSBwaGJhLT5zbGltMnAucGh5cyArIG9mZnNldDsKIAltYi0+dW4udmFyQ2ZnUG9ydC5wY2JMb3cgPSBwdXRQYWRkckxvdyhwZG1hX2FkZHIpOwogCW1iLT51bi52YXJDZmdQb3J0LnBjYkhpZ2ggPSBwdXRQYWRkckhpZ2gocGRtYV9hZGRyKTsKIApAQCAtNzExLDEyICsxMDY1LDEzIEBACiAKIAlpZiAocGhiYS0+c2xpX3JldiA9PSAzICYmIHBoYmEtPnZwZC5zbGkzRmVhdC5jZXJibSkgewogCQltYi0+dW4udmFyQ2ZnUG9ydC5jZXJibSA9IDE7IC8qIFJlcXVlc3QgSEJRcyAqLworCQltYi0+dW4udmFyQ2ZnUG9ydC5jY3JwID0gMTsgLyogQ29tbWFuZCBSaW5nIFBvbGxpbmcgKi8KKwkJbWItPnVuLnZhckNmZ1BvcnQuY2luYiA9IDE7IC8qIEludGVycnVwdCBOb3RpZmljYXRpb24gQmxvY2sgKi8KIAkJbWItPnVuLnZhckNmZ1BvcnQubWF4X2hicSA9IGxwZmNfc2xpX2hicV9jb3VudCgpOwogCQlpZiAocGhiYS0+bWF4X3ZwaSAmJiBwaGJhLT5jZmdfZW5hYmxlX25waXYgJiYKIAkJICAgIHBoYmEtPnZwZC5zbGkzRmVhdC5jbXYpIHsKIAkJCW1iLT51bi52YXJDZmdQb3J0Lm1heF92cGkgPSBwaGJhLT5tYXhfdnBpOwogCQkJbWItPnVuLnZhckNmZ1BvcnQuY212ID0gMTsKLQkJCXBoYmEtPnNsaTNfb3B0aW9ucyB8PSBMUEZDX1NMSTNfTlBJVl9FTkFCTEVEOwogCQl9IGVsc2UKIAkJCW1iLT51bi52YXJDZmdQb3J0Lm1heF92cGkgPSBwaGJhLT5tYXhfdnBpID0gMDsKIAl9IGVsc2UKQEAgLTcyNCwxNiArMTA3OSwxNSBAQAogCW1iLT51bi52YXJDZmdQb3J0LnNsaV9tb2RlID0gcGhiYS0+c2xpX3JldjsKIAogCS8qIE5vdyBzZXR1cCBwY2IgKi8KLQlwaGJhLT5zbGltMnAtPnBjYi50eXBlID0gVFlQRV9OQVRJVkVfU0xJMjsKLQlwaGJhLT5zbGltMnAtPnBjYi5mZWF0dXJlID0gRkVBVFVSRV9JTklUSUFMX1NMSTI7CisJcGhiYS0+cGNiLT50eXBlID0gVFlQRV9OQVRJVkVfU0xJMjsKKwlwaGJhLT5wY2ItPmZlYXR1cmUgPSBGRUFUVVJFX0lOSVRJQUxfU0xJMjsKIAogCS8qIFNldHVwIE1haWxib3ggcG9pbnRlcnMgKi8KLQlwaGJhLT5zbGltMnAtPnBjYi5tYWlsQm94U2l6ZSA9IG9mZnNldG9mKE1BSUxCT1hfdCwgdXMpICsKLQkJc2l6ZW9mKHN0cnVjdCBzbGkyX2Rlc2MpOwotCW9mZnNldCA9ICh1aW50OF90ICopJnBoYmEtPnNsaW0ycC0+bWJ4IC0gKHVpbnQ4X3QgKilwaGJhLT5zbGltMnA7Ci0JcGRtYV9hZGRyID0gcGhiYS0+c2xpbTJwX21hcHBpbmcgKyBvZmZzZXQ7Ci0JcGhiYS0+c2xpbTJwLT5wY2IubWJBZGRySGlnaCA9IHB1dFBhZGRySGlnaChwZG1hX2FkZHIpOwotCXBoYmEtPnNsaW0ycC0+cGNiLm1iQWRkckxvdyA9IHB1dFBhZGRyTG93KHBkbWFfYWRkcik7CisJcGhiYS0+cGNiLT5tYWlsQm94U2l6ZSA9IHNpemVvZihNQUlMQk9YX3QpOworCW9mZnNldCA9ICh1aW50OF90ICopcGhiYS0+bWJveCAtICh1aW50OF90ICopcGhiYS0+c2xpbTJwLnZpcnQ7CisJcGRtYV9hZGRyID0gcGhiYS0+c2xpbTJwLnBoeXMgKyBvZmZzZXQ7CisJcGhiYS0+cGNiLT5tYkFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKHBkbWFfYWRkcik7CisJcGhiYS0+cGNiLT5tYkFkZHJMb3cgPSBwdXRQYWRkckxvdyhwZG1hX2FkZHIpOwogCiAJLyoKIAkgKiBTZXR1cCBIb3N0IEdyb3VwIHJpbmcgcG9pbnRlci4KQEAgLTc5NCwxMyArMTE0OCwxMyBAQAogCX0KIAogCS8qIG1hc2sgb2ZmIEJBUjAncyBmbGFnIGJpdHMgMCAtIDMgKi8KLQlwaGJhLT5zbGltMnAtPnBjYi5oZ3BBZGRyTG93ID0gKGJhcl9sb3cgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLKSArCi0JCSh2b2lkIF9faW9tZW0gKikgcGhiYS0+aG9zdF9ncCAtCisJcGhiYS0+cGNiLT5oZ3BBZGRyTG93ID0gKGJhcl9sb3cgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLKSArCisJCSh2b2lkIF9faW9tZW0gKilwaGJhLT5ob3N0X2dwIC0KIAkJKHZvaWQgX19pb21lbSAqKXBoYmEtPk1Cc2xpbWFkZHI7CiAJaWYgKGJhcl9sb3cgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0KQotCQlwaGJhLT5zbGltMnAtPnBjYi5oZ3BBZGRySGlnaCA9IGJhcl9oaWdoOworCQlwaGJhLT5wY2ItPmhncEFkZHJIaWdoID0gYmFyX2hpZ2g7CiAJZWxzZQotCQlwaGJhLT5zbGltMnAtPnBjYi5oZ3BBZGRySGlnaCA9IDA7CisJCXBoYmEtPnBjYi0+aGdwQWRkckhpZ2ggPSAwOwogCS8qIHdyaXRlIEhHUCBkYXRhIHRvIFNMSU0gYXQgdGhlIHJlcXVpcmVkIGxvbmd3b3JkIG9mZnNldCAqLwogCW1lbXNldCgmaGdwLCAwLCBzaXplb2Yoc3RydWN0IGxwZmNfaGdwKSk7CiAKQEAgLTgxMCwxNyArMTE2NCwxOSBAQAogCX0KIAogCS8qIFNldHVwIFBvcnQgR3JvdXAgcmluZyBwb2ludGVyICovCi0JaWYgKHBoYmEtPnNsaV9yZXYgPT0gMykKLQkJcGdwX29mZnNldCA9ICh1aW50OF90ICopJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMzX3BncC5wb3J0IC0KLQkJCSh1aW50OF90ICopcGhiYS0+c2xpbTJwOwotCWVsc2UKLQkJcGdwX29mZnNldCA9ICh1aW50OF90ICopJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMyLnBvcnQgLQotCQkJKHVpbnQ4X3QgKilwaGJhLT5zbGltMnA7Ci0KLQlwZG1hX2FkZHIgPSBwaGJhLT5zbGltMnBfbWFwcGluZyArIHBncF9vZmZzZXQ7Ci0JcGhiYS0+c2xpbTJwLT5wY2IucGdwQWRkckhpZ2ggPSBwdXRQYWRkckhpZ2gocGRtYV9hZGRyKTsKLQlwaGJhLT5zbGltMnAtPnBjYi5wZ3BBZGRyTG93ID0gcHV0UGFkZHJMb3cocGRtYV9hZGRyKTsKLQlwaGJhLT5oYnFfZ2V0ID0gJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMzX3BncC5oYnFfZ2V0WzBdOworCWlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSU5CX0VOQUJMRUQpIHsKKwkJcGdwX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBscGZjX3NsaTJfc2xpbSwKKwkJCQkgICAgICBtYngudXMuczNfaW5iX3BncC5wb3J0KTsKKwkJcGhiYS0+aGJxX2dldCA9IHBoYmEtPm1ib3gtPnVzLnMzX2luYl9wZ3AuaGJxX2dldDsKKwl9IGVsc2UgaWYgKHBoYmEtPnNsaV9yZXYgPT0gMykgeworCQlwZ3Bfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGxwZmNfc2xpMl9zbGltLAorCQkJCSAgICAgIG1ieC51cy5zM19wZ3AucG9ydCk7CisJCXBoYmEtPmhicV9nZXQgPSBwaGJhLT5tYm94LT51cy5zM19wZ3AuaGJxX2dldDsKKwl9IGVsc2UKKwkJcGdwX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBscGZjX3NsaTJfc2xpbSwgbWJ4LnVzLnMyLnBvcnQpOworCXBkbWFfYWRkciA9IHBoYmEtPnNsaW0ycC5waHlzICsgcGdwX29mZnNldDsKKwlwaGJhLT5wY2ItPnBncEFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKHBkbWFfYWRkcik7CisJcGhiYS0+cGNiLT5wZ3BBZGRyTG93ID0gcHV0UGFkZHJMb3cocGRtYV9hZGRyKTsKIAogCS8qIFVzZSBjYWxsYmFjayByb3V0aW5lIHRvIHNldHAgcmluZ3MgaW4gdGhlIHBjYiAqLwogCWxwZmNfY29uZmlnX3BjYl9zZXR1cChwaGJhKTsKQEAgLTgzNSwxMCArMTE5MSwyNCBAQAogCX0KIAogCS8qIFN3YXAgUENCIGlmIG5lZWRlZCAqLwotCWxwZmNfc2xpX3BjaW1lbV9iY29weSgmcGhiYS0+c2xpbTJwLT5wY2IsICZwaGJhLT5zbGltMnAtPnBjYiwKLQkJCSAgICAgIHNpemVvZihQQ0JfdCkpOworCWxwZmNfc2xpX3BjaW1lbV9iY29weShwaGJhLT5wY2IsIHBoYmEtPnBjYiwgc2l6ZW9mKFBDQl90KSk7CiB9CiAKKy8qKgorICogbHBmY19raWxsX2JvYXJkOiBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciBraWxsaW5nIGJvYXJkLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcG1iOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoZSBraWxsIGJvYXJkIG1haWxib3ggY29tbWFuZCBpcyB1c2VkIHRvIHRlbGwgZmlybXdhcmUgdG8gcGVyZm9ybSBhCisgKiBncmFjZWZ1bCBzaHV0ZG93biBvZiBhIGNoYW5uZWwgb24gYSBzcGVjaWZpZWQgYm9hcmQgdG8gcHJlcGFyZSBmb3IgcmVzZXQuCisgKiBXaGVuIHRoZSBraWxsIGJvYXJkIG1haWxib3ggY29tbWFuZCBpcyByZWNlaXZlZCwgdGhlIEVSMyBiaXQgaXMgc2V0IHRvIDEKKyAqIGluIHRoZSBIb3N0IFN0YXR1cyByZWdpc3RlciBhbmQgdGhlIEVSIEF0dGVudGlvbiBiaXQgaXMgc2V0IHRvIDEgaW4gdGhlCisgKiBIb3N0IEF0dGVudGlvbiByZWdpc3RlciBvZiB0aGUgSEJBIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZWQgdGhlIGtpbGwgYm9hcmQKKyAqIGNvbW1hbmQuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIGtpbGxpbmcgdGhlIGJvYXJkIGluCisgKiBwcmVwYXJhdGlvbiBmb3IgYSBncmFjZWZ1bCBzaHV0ZG93bi4KKyAqKi8KIHZvaWQKIGxwZmNfa2lsbF9ib2FyZChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIpCiB7CkBAIC04NTAsNiArMTIyMCwxNiBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX21ib3hfcHV0OiBQdXQgYSBtYWlsYm94IGNtZCBpbnRvIHRoZSB0YWlsIG9mIGRyaXZlcidzIG1haWxib3ggcXVldWUuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBtYnE6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKgorICogRHJpdmVyIG1haW50YWlucyBhIGludGVybmFsIG1haWxib3ggY29tbWFuZCBxdWV1ZSBpbXBsZW1lbnRlZCBhcyBhIGxpbmtlZAorICogbGlzdC4gV2hlbiBhIG1haWxib3ggY29tbWFuZCBpcyBpc3N1ZWQsIGl0IHNoYWxsIGJlIHB1dCBpbnRvIHRoZSBtYWlsYm94CisgKiBjb21tYW5kIHF1ZXVlIHN1Y2ggdGhhdCB0aGV5IHNoYWxsIGJlIHByb2Nlc3NlZCBvcmRlcmx5IGFzIEhCQSBjYW4gcHJvY2VzcworICogb25lIG1haWxib3ggY29tbWFuZCBhdCBhIHRpbWUuCisgKiovCiB2b2lkCiBscGZjX21ib3hfcHV0KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIG1icSkKIHsKQEAgLTg2NCw2ICsxMjQ0LDIwIEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfbWJveF9nZXQ6IFJlbW92ZSBhIG1haWxib3ggY21kIGZyb20gdGhlIGhlYWQgb2YgZHJpdmVyJ3MgbWFpbGJveCBxdWV1ZS4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIERyaXZlciBtYWludGFpbnMgYSBpbnRlcm5hbCBtYWlsYm94IGNvbW1hbmQgcXVldWUgaW1wbGVtZW50ZWQgYXMgYSBsaW5rZWQKKyAqIGxpc3QuIFdoZW4gYSBtYWlsYm94IGNvbW1hbmQgaXMgaXNzdWVkLCBpdCBzaGFsbCBiZSBwdXQgaW50byB0aGUgbWFpbGJveAorICogY29tbWFuZCBxdWV1ZSBzdWNoIHRoYXQgdGhleSBzaGFsbCBiZSBwcm9jZXNzZWQgb3JkZXJseSBhcyBIQkEgY2FuIHByb2Nlc3MKKyAqIG9uZSBtYWlsYm94IGNvbW1hbmQgYXQgYSB0aW1lLiBBZnRlciBIQkEgZmluaXNoZWQgcHJvY2Vzc2luZyBhIG1haWxib3gKKyAqIGNvbW1hbmQsIHRoZSBkcml2ZXIgd2lsbCByZW1vdmUgYSBwZW5kaW5nIG1haWxib3ggY29tbWFuZCBmcm9tIHRoZSBoZWFkIG9mCisgKiB0aGUgbWFpbGJveCBjb21tYW5kIHF1ZXVlIGFuZCBzZW5kIHRvIHRoZSBIQkEgZm9yIHByb2Nlc3NpbmcuCisgKgorICogUmV0dXJuIGNvZGVzCisgKiAgICBwb2ludGVyIHRvIHRoZSBkcml2ZXIgaW50ZXJuYWwgcXVldWUgZWxlbWVudCBmb3IgbWFpbGJveCBjb21tYW5kLgorICoqLwogTFBGQ19NQk9YUV90ICoKIGxwZmNfbWJveF9nZXQoc3RydWN0IGxwZmNfaGJhICogcGhiYSkKIHsKQEAgLTg3Nyw2ICsxMjcxLDE3IEBACiAJcmV0dXJuIG1icTsKIH0KIAorLyoqCisgKiBscGZjX21ib3hfY21wbF9wdXQ6IFB1dCBtYWlsYm94IGNvbW1hbmQgaW50byBtYWlsYm94IGNvbW1hbmQgY29tcGxldGUgbGlzdC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQG1icTogcG9pbnRlciB0byB0aGUgZHJpdmVyIGludGVybmFsIHF1ZXVlIGVsZW1lbnQgZm9yIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHV0IHRoZSBjb21wbGV0ZWQgbWFpbGJveCBjb21tYW5kIGludG8gdGhlIG1haWxib3ggY29tbWFuZAorICogY29tcGxldGUgbGlzdC4gVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIGRyaXZlciBpbnRlcnJ1cHQgaGFuZGxlcgorICogY29udGV4dC5UaGUgbWFpbGJveCBjb21wbGV0ZSBsaXN0IGlzIHVzZWQgYnkgdGhlIGRyaXZlciB3b3JrZXIgdGhyZWFkCisgKiB0byBwcm9jZXNzIG1haWxib3ggY29tcGxldGUgY2FsbGJhY2sgZnVuY3Rpb25zIG91dHNpZGUgdGhlIGRyaXZlciBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIuCisgKiovCiB2b2lkCiBscGZjX21ib3hfY21wbF9wdXQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogbWJxKQogewpAQCAtODg3LDYgKzEyOTIsMTcgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19tYm94X3Rtb192YWw6IFJldHJpZXZlIG1haWxib3ggY29tbWFuZCB0aW1lb3V0IHZhbHVlLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAY21kOiBtYWlsYm94IGNvbW1hbmQgY29kZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIHRoZSBwcm9wZXIgdGltZW91dCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIG1haWxib3gKKyAqIGNvbW1hbmQgY29kZS4KKyAqCisgKiBSZXR1cm4gY29kZXMKKyAqICAgIFRpbWVvdXQgdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIGdpdmVuIG1haWxib3ggY29tbWFuZAorICoqLwogaW50CiBscGZjX21ib3hfdG1vX3ZhbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGludCBjbWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21lbS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tZW0uYwppbmRleCAzYzBjZWJjLi5hNGJiYTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21lbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWVtLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgImxwZmNfaHcuaCIKICNpbmNsdWRlICJscGZjX3NsaS5oIgorI2luY2x1ZGUgImxwZmNfbmwuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKICNpbmNsdWRlICJscGZjLmgiCkBAIC0zOSw3ICs0MCwyMSBAQAogI2RlZmluZSBMUEZDX01FTV9QT09MX1NJWkUgICAgICA2NCAgICAgIC8qIG1heCBlbGVtIGluIG5vbi1ETUEgc2FmZXR5IHBvb2wgKi8KIAogCi0KKy8qKgorICogbHBmY19tZW1fYWxsb2M6IGNyZWF0ZSBhbmQgYWxsb2NhdGUgYWxsIFBDSSBhbmQgbWVtb3J5IHBvb2xzCisgKiBAcGhiYTogSEJBIHRvIGFsbG9jYXRlIHBvb2xzIGZvcgorICoKKyAqIERlc2NyaXB0aW9uOiBDcmVhdGVzIGFuZCBhbGxvY2F0ZXMgUENJIHBvb2xzIGxwZmNfc2NzaV9kbWFfYnVmX3Bvb2wsCisgKiBscGZjX21idWZfcG9vbCwgbHBmY19oYnFfcG9vbC4gIENyZWF0ZXMgYW5kIGFsbG9jYXRlcyBrbWFsbG9jLWJhY2tlZCBtZW1wb29scworICogZm9yIExQRkNfTUJPWFFfdCBhbmQgbHBmY19ub2RlbGlzdC4gIEFsc28gYWxsb2NhdGVzIHRoZSBWUEkgYml0bWFzay4KKyAqCisgKiBOb3RlczogTm90IGludGVycnVwdC1zYWZlLiAgTXVzdCBiZSBjYWxsZWQgd2l0aCBubyBsb2NrcyBoZWxkLiAgSWYgYW55CisgKiBhbGxvY2F0aW9uIGZhaWxzLCBmcmVlcyBhbGwgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCBtZW1vcnkgYmVmb3JlIHJldHVybmluZy4KKyAqCisgKiBSZXR1cm5zOgorICogICAwIG9uIHN1Y2Nlc3MKKyAqICAgLUVOT01FTSBvbiBmYWlsdXJlIChpZiBhbnkgbWVtb3J5IGFsbG9jYXRpb25zIGZhaWwpCisgKiovCiBpbnQKIGxwZmNfbWVtX2FsbG9jKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCiB7CkBAIC0xMjAsNiArMTM1LDE2IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKKy8qKgorICogbHBmY19tZW1fZnJlZTogRnJlZXMgYWxsIFBDSSBhbmQgbWVtb3J5IGFsbG9jYXRlZCBieSBscGZjX21lbV9hbGxvYworICogQHBoYmE6IEhCQSB0byBmcmVlIG1lbW9yeSBmb3IKKyAqCisgKiBEZXNjcmlwdGlvbjogRnJlZXMgUENJIHBvb2xzIGxwZmNfc2NzaV9kbWFfYnVmX3Bvb2wsIGxwZmNfbWJ1Zl9wb29sLAorICogbHBmY19oYnFfcG9vbC4gIEZyZWVzIGttYWxsb2MtYmFja2VkIG1lbXBvb2xzIGZvciBMUEZDX01CT1hRX3QgYW5kCisgKiBscGZjX25vZGVsaXN0LiAgQWxzbyBmcmVlcyB0aGUgVlBJIGJpdG1hc2suCisgKgorICogUmV0dXJuczogTm9uZQorICoqLwogdm9pZAogbHBmY19tZW1fZnJlZShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQogewpAQCAtMTgxLDEyICsyMDYsMjkgQEAKIAlwaGJhLT5scGZjX3Njc2lfZG1hX2J1Zl9wb29sID0gTlVMTDsKIAlwaGJhLT5scGZjX21idWZfcG9vbCA9IE5VTEw7CiAKLQkJCQkvKiBGcmVlIHRoZSBpb2NiIGxvb2t1cCBhcnJheSAqLworCS8qIEZyZWUgdGhlIGlvY2IgbG9va3VwIGFycmF5ICovCiAJa2ZyZWUocHNsaS0+aW9jYnFfbG9va3VwKTsKIAlwc2xpLT5pb2NicV9sb29rdXAgPSBOVUxMOwotCiB9CiAKKy8qKgorICogbHBmY19tYnVmX2FsbG9jOiBBbGxvY2F0ZSBhbiBtYnVmIGZyb20gdGhlIGxwZmNfbWJ1Zl9wb29sIFBDSSBwb29sCisgKiBAcGhiYTogSEJBIHdoaWNoIG93bnMgdGhlIHBvb2wgdG8gYWxsb2NhdGUgZnJvbQorICogQG1lbV9mbGFnczogaW5kaWNhdGVzIGlmIHRoaXMgaXMgYSBwcmlvcml0eSAoTUVNX1BSSSkgYWxsb2NhdGlvbgorICogQGhhbmRsZTogdXNlZCB0byByZXR1cm4gdGhlIERNQS1tYXBwZWQgYWRkcmVzcyBvZiB0aGUgbWJ1ZgorICoKKyAqIERlc2NyaXB0aW9uOiBBbGxvY2F0ZXMgYSBETUEtbWFwcGVkIGJ1ZmZlciBmcm9tIHRoZSBscGZjX21idWZfcG9vbCBQQ0kgcG9vbC4KKyAqIEFsbG9jYXRlcyBmcm9tIGdlbmVyaWMgcGNpX3Bvb2xfYWxsb2MgZnVuY3Rpb24gZmlyc3QgYW5kIGlmIHRoYXQgZmFpbHMgYW5kCisgKiBtZW1fZmxhZ3MgaGFzIE1FTV9QUkkgc2V0ICh0aGUgb25seSBkZWZpbmVkIGZsYWcpLCByZXR1cm5zIGFuIG1idWYgZnJvbSB0aGUKKyAqIEhCQSdzIHBvb2wuCisgKgorICogTm90ZXM6IE5vdCBpbnRlcnJ1cHQtc2FmZS4gIE11c3QgYmUgY2FsbGVkIHdpdGggbm8gbG9ja3MgaGVsZC4gIFRha2VzCisgKiBwaGJhLT5oYmFsb2NrLgorICoKKyAqIFJldHVybnM6CisgKiAgIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBtYnVmIG9uIHN1Y2Nlc3MKKyAqICAgTlVMTCBvbiBmYWlsdXJlCisgKiovCiB2b2lkICoKIGxwZmNfbWJ1Zl9hbGxvYyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGludCBtZW1fZmxhZ3MsIGRtYV9hZGRyX3QgKmhhbmRsZSkKIHsKQEAgLTIwNiw2ICsyNDgsMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIF9fbHBmY19tZW1fZnJlZTogRnJlZSBhbiBtYnVmIGZyb20gdGhlIGxwZmNfbWJ1Zl9wb29sIFBDSSBwb29sIChsb2NrZWQpCisgKiBAcGhiYTogSEJBIHdoaWNoIG93bnMgdGhlIHBvb2wgdG8gcmV0dXJuIHRvCisgKiBAdmlydDogbWJ1ZiB0byBmcmVlCisgKiBAZG1hOiB0aGUgRE1BLW1hcHBlZCBhZGRyZXNzIG9mIHRoZSBscGZjX21idWZfcG9vbCB0byBiZSBmcmVlZAorICoKKyAqIERlc2NyaXB0aW9uOiBSZXR1cm5zIGFuIG1idWYgbHBmY19tYnVmX3Bvb2wgdG8gdGhlIGxwZmNfbWJ1Zl9zYWZldHlfcG9vbCBpZgorICogaXQgaXMgYmVsb3cgaXRzIG1heF9jb3VudCwgZnJlZXMgdGhlIG1idWYgb3RoZXJ3aXNlLgorICoKKyAqIE5vdGVzOiBNdXN0IGJlIGNhbGxlZCB3aXRoIHBoYmEtPmhiYWxvY2sgaGVsZCB0byBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8KKyAqIGxwZmNfbWJ1Zl9zYWZldHlfcG9vbC4KKyAqCisgKiBSZXR1cm5zOiBOb25lCisgKiovCiB2b2lkCiBfX2xwZmNfbWJ1Zl9mcmVlKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHZvaWQgKnZpcnQsIGRtYV9hZGRyX3QgZG1hKQogewpAQCAtMjIxLDcgKzI3NywyMSBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBscGZjX21lbV9mcmVlOiBGcmVlIGFuIG1idWYgZnJvbSB0aGUgbHBmY19tYnVmX3Bvb2wgUENJIHBvb2wgKHVubG9ja2VkKQorICogQHBoYmE6IEhCQSB3aGljaCBvd25zIHRoZSBwb29sIHRvIHJldHVybiB0bworICogQHZpcnQ6IG1idWYgdG8gZnJlZQorICogQGRtYTogdGhlIERNQS1tYXBwZWQgYWRkcmVzcyBvZiB0aGUgbHBmY19tYnVmX3Bvb2wgdG8gYmUgZnJlZWQKKyAqCisgKiBEZXNjcmlwdGlvbjogUmV0dXJucyBhbiBtYnVmIGxwZmNfbWJ1Zl9wb29sIHRvIHRoZSBscGZjX21idWZfc2FmZXR5X3Bvb2wgaWYKKyAqIGl0IGlzIGJlbG93IGl0cyBtYXhfY291bnQsIGZyZWVzIHRoZSBtYnVmIG90aGVyd2lzZS4KKyAqCisgKiBOb3RlczogVGFrZXMgcGhiYS0+aGJhbG9jay4gIENhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0IG90aGVyIGxvY2tzIGhlbGQuCisgKgorICogUmV0dXJuczogTm9uZQorICoqLwogdm9pZAorCiBscGZjX21idWZfZnJlZShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCB2b2lkICp2aXJ0LCBkbWFfYWRkcl90IGRtYSkKIHsKIAl1bnNpZ25lZCBsb25nIGlmbGFnczsKQEAgLTIzMiw2ICszMDIsMTkgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19lbHNfaGJxX2FsbG9jOiBBbGxvY2F0ZSBhbiBIQlEgYnVmZmVyCisgKiBAcGhiYTogSEJBIHRvIGFsbG9jYXRlIEhCUSBidWZmZXIgZm9yCisgKgorICogRGVzY3JpcHRpb246IEFsbG9jYXRlcyBhIERNQS1tYXBwZWQgSEJRIGJ1ZmZlciBmcm9tIHRoZSBscGZjX2hicV9wb29sIFBDSQorICogcG9vbCBhbG9uZyBhIG5vbi1ETUEtbWFwcGVkIGNvbnRhaW5lciBmb3IgaXQuCisgKgorICogTm90ZXM6IE5vdCBpbnRlcnJ1cHQtc2FmZS4gIE11c3QgYmUgY2FsbGVkIHdpdGggbm8gbG9ja3MgaGVsZC4KKyAqCisgKiBSZXR1cm5zOgorICogICBwb2ludGVyIHRvIEhCUSBvbiBzdWNjZXNzCisgKiAgIE5VTEwgb24gZmFpbHVyZQorICoqLwogc3RydWN0IGhicV9kbWFidWYgKgogbHBmY19lbHNfaGJxX2FsbG9jKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTI1MSw2ICszMzQsMTggQEAKIAlyZXR1cm4gaGJxYnA7CiB9CiAKKy8qKgorICogbHBmY19tZW1faGJxX2ZyZWU6IEZyZWVzIGFuIEhCUSBidWZmZXIgYWxsb2NhdGVkIHdpdGggbHBmY19lbHNfaGJxX2FsbG9jCisgKiBAcGhiYTogSEJBIGJ1ZmZlciB3YXMgYWxsb2NhdGVkIGZvcgorICogQGhicWJwOiBIQlEgY29udGFpbmVyIHJldHVybmVkIGJ5IGxwZmNfZWxzX2hicV9hbGxvYworICoKKyAqIERlc2NyaXB0aW9uOiBGcmVlcyBib3RoIHRoZSBjb250YWluZXIgYW5kIHRoZSBETUEtbWFwcGVkIGJ1ZmZlciByZXR1cm5lZCBieQorICogbHBmY19lbHNfaGJxX2FsbG9jLgorICoKKyAqIE5vdGVzOiBDYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBsb2NrcyBoZWxkLgorICoKKyAqIFJldHVybnM6IE5vbmUKKyAqKi8KIHZvaWQKIGxwZmNfZWxzX2hicV9mcmVlKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGhicV9kbWFidWYgKmhicWJwKQogewpAQCAtMjU5LDcgKzM1NCwxOCBAQAogCXJldHVybjsKIH0KIAotLyogVGhpcyBpcyBPTkxZIGNhbGxlZCBmb3IgdGhlIExQRkNfRUxTX0hCUSAqLworLyoqCisgKiBscGZjX2luX2J1Zl9mcmVlOiBGcmVlIGEgRE1BIGJ1ZmZlcgorICogQHBoYmE6IEhCQSBidWZmZXIgaXMgYXNzb2NpYXRlZCB3aXRoCisgKiBAbXA6IEJ1ZmZlciB0byBmcmVlCisgKgorICogRGVzY3JpcHRpb246IEZyZWVzIHRoZSBnaXZlbiBETUEgYnVmZmVyIGluIHRoZSBhcHByb3ByaWF0ZSB3YXkgZ2l2ZW4gaWYgdGhlCisgKiBIQkEgaXMgcnVubmluZyBpbiBTTEkzIG1vZGUgd2l0aCBIQlFzIGVuYWJsZWQuCisgKgorICogTm90ZXM6IFRha2VzIHBoYmEtPmhiYWxvY2suICBDYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBvdGhlciBsb2NrcyBoZWxkLgorICoKKyAqIFJldHVybnM6IE5vbmUKKyAqKi8KIHZvaWQKIGxwZmNfaW5fYnVmX2ZyZWUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19kbWFidWYgKm1wKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhY2NiNWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgorICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAqCisgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgorICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgKgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsICAgICAgICoKKyAqIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bC4gKgorICogQUxMIEVYUFJFU1MgT1IgSU1QTElFRCBDT05ESVRJT05TLCBSRVBSRVNFTlRBVElPTlMgQU5EICAgICAgICAgICoKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFksICAqCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgTk9OLUlORlJJTkdFTUVOVCwgQVJFICAgICAgKgorICogRElTQ0xBSU1FRCwgRVhDRVBUIFRPIFRIRSBFWFRFTlQgVEhBVCBTVUNIIERJU0NMQUlNRVJTIEFSRSBIRUxEICoKKyAqIFRPIEJFIExFR0FMTFkgSU5WQUxJRC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yICAqCisgKiBtb3JlIGRldGFpbHMsIGEgY29weSBvZiB3aGljaCBjYW4gYmUgZm91bmQgaW4gdGhlIGZpbGUgQ09QWUlORyAgKgorICogaW5jbHVkZWQgd2l0aCB0aGlzIHBhY2thZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBFdmVudCBkZWZpbml0aW9ucyBmb3IgUmVnaXN0ZXJGb3JFdmVudCAqLworI2RlZmluZSBGQ19SRUdfTElOS19FVkVOVAkJMHgwMDAxCS8qIGxpbmsgdXAgLyBkb3duIGV2ZW50cyAqLworI2RlZmluZSBGQ19SRUdfUlNDTl9FVkVOVAkJMHgwMDAyCS8qIFJTQ04gZXZlbnRzICovCisjZGVmaW5lIEZDX1JFR19DVF9FVkVOVAkJCTB4MDAwNAkvKiBDVCByZXF1ZXN0IGV2ZW50cyAqLworI2RlZmluZSBGQ19SRUdfRFVNUF9FVkVOVAkJMHgwMDA4CS8qIER1bXAgZXZlbnRzICovCisjZGVmaW5lIEZDX1JFR19URU1QRVJBVFVSRV9FVkVOVAkweDAwMTAJLyogdGVtcGVyYXR1cmUgZXZlbnRzICovCisjZGVmaW5lIEZDX1JFR19FTFNfRVZFTlQJCTB4MDAyMAkvKiBscGZjIGVscyBldmVudHMgKi8KKyNkZWZpbmUgRkNfUkVHX0ZBQlJJQ19FVkVOVAkJMHgwMDQwCS8qIGxwZmMgZmFicmljIGV2ZW50cyAqLworI2RlZmluZSBGQ19SRUdfU0NTSV9FVkVOVAkJMHgwMDgwCS8qIGxwZmMgc2NzaSBldmVudHMgKi8KKyNkZWZpbmUgRkNfUkVHX0JPQVJEX0VWRU5UCQkweDAxMDAJLyogbHBmYyBib2FyZCBldmVudHMgKi8KKyNkZWZpbmUgRkNfUkVHX0FEQVBURVJfRVZFTlQJCTB4MDIwMAkvKiBscGZjIGFkYXB0ZXIgZXZlbnRzICovCisjZGVmaW5lIEZDX1JFR19FVkVOVF9NQVNLCQkoRkNfUkVHX0xJTktfRVZFTlQgfCBcCisJCQkJCQlGQ19SRUdfUlNDTl9FVkVOVCB8IFwKKwkJCQkJCUZDX1JFR19DVF9FVkVOVCB8IFwKKwkJCQkJCUZDX1JFR19EVU1QX0VWRU5UIHwgXAorCQkJCQkJRkNfUkVHX1RFTVBFUkFUVVJFX0VWRU5UIHwgXAorCQkJCQkJRkNfUkVHX0VMU19FVkVOVCB8IFwKKwkJCQkJCUZDX1JFR19GQUJSSUNfRVZFTlQgfCBcCisJCQkJCQlGQ19SRUdfU0NTSV9FVkVOVCB8IFwKKwkJCQkJCUZDX1JFR19CT0FSRF9FVkVOVCB8IFwKKwkJCQkJCUZDX1JFR19BREFQVEVSX0VWRU5UKQorLyogVGVtcGVyYXR1cmUgZXZlbnRzICovCisjZGVmaW5lIExQRkNfQ1JJVF9URU1QCQkweDEKKyNkZWZpbmUgTFBGQ19USFJFU0hPTERfVEVNUAkweDIKKyNkZWZpbmUgTFBGQ19OT1JNQUxfVEVNUAkweDMKKy8qCisgKiBBbGwgbmV0IGxpbmsgZXZlbnQgcGF5bG9hZHMgd2lsbCBiZWdpbiB3aXRoIGFuZCBldmVudCB0eXBlCisgKiBhbmQgc3ViY2F0ZWdvcnkuIFRoZSBldmVudCB0eXBlIG11c3QgY29tZSBmaXJzdC4KKyAqIFRoZSBzdWJjYXRlZ29yeSBmdXJ0aGVyIGRlZmluZXMgdGhlIGRhdGEgdGhhdCBmb2xsb3dzIGluIHRoZSByZXN0CisgKiBvZiB0aGUgcGF5bG9hZC4gRWFjaCBjYXRlZ29yeSB3aWxsIGhhdmUgaXRzIG93biB1bmlxdWUgaGVhZGVyIHBsdXMKKyAqIGFueSBhZGR0aW9uYWwgZGF0YSB1bmlxdWUgdG8gdGhlIHN1YmNhdGVnb3J5LgorICogVGhlIHBheWxvYWQgc2VudCB2aWEgdGhlIGZjIHRyYW5zcG9ydCBpcyBvbmUtd2F5IGRyaXZlci0+YXBwbGljYXRpb24uCisgKi8KKworLyogZWxzIGV2ZW50IGhlYWRlciAqLworc3RydWN0IGxwZmNfZWxzX2V2ZW50X2hlYWRlciB7CisJdWludDMyX3QgZXZlbnRfdHlwZTsKKwl1aW50MzJfdCBzdWJjYXRlZ29yeTsKKwl1aW50OF90IHd3cG5bOF07CisJdWludDhfdCB3d25uWzhdOworfTsKKworLyogc3ViY2F0ZWdvcnkgY29kZXMgZm9yIEZDX1JFR19FTFNfRVZFTlQgKi8KKyNkZWZpbmUgTFBGQ19FVkVOVF9QTE9HSV9SQ1YJCTB4MDEKKyNkZWZpbmUgTFBGQ19FVkVOVF9QUkxPX1JDVgkJMHgwMgorI2RlZmluZSBMUEZDX0VWRU5UX0FESVNDX1JDVgkJMHgwNAorI2RlZmluZSBMUEZDX0VWRU5UX0xTUkpUX1JDVgkJMHgwOAorCisvKiBzcGVjaWFsIGVscyBsc3JqdCBldmVudCAqLworc3RydWN0IGxwZmNfbHNyanRfZXZlbnQgeworCXN0cnVjdCBscGZjX2Vsc19ldmVudF9oZWFkZXIgaGVhZGVyOworCXVpbnQzMl90IGNvbW1hbmQ7CisJdWludDMyX3QgcmVhc29uX2NvZGU7CisJdWludDMyX3QgZXhwbGFuYXRpb247Cit9OworCisKKy8qIGZhYnJpYyBldmVudCBoZWFkZXIgKi8KK3N0cnVjdCBscGZjX2ZhYnJpY19ldmVudF9oZWFkZXIgeworCXVpbnQzMl90IGV2ZW50X3R5cGU7CisJdWludDMyX3Qgc3ViY2F0ZWdvcnk7CisJdWludDhfdCB3d3BuWzhdOworCXVpbnQ4X3Qgd3dubls4XTsKK307CisKKy8qIHN1YmNhdGVnb3J5IGNvZGVzIGZvciBGQ19SRUdfRkFCUklDX0VWRU5UICovCisjZGVmaW5lIExQRkNfRVZFTlRfRkFCUklDX0JVU1kJCTB4MDEKKyNkZWZpbmUgTFBGQ19FVkVOVF9QT1JUX0JVU1kJCTB4MDIKKyNkZWZpbmUgTFBGQ19FVkVOVF9GQ1BSRENIS0VSUgkJMHgwNAorCisvKiBzcGVjaWFsIGNhc2UgZmFicmljIGZjcHJkY2hrZXJyIGV2ZW50ICovCitzdHJ1Y3QgbHBmY19mY3ByZGNoa2Vycl9ldmVudCB7CisJc3RydWN0IGxwZmNfZmFicmljX2V2ZW50X2hlYWRlciBoZWFkZXI7CisJdWludDMyX3QgbHVuOworCXVpbnQzMl90IG9wY29kZTsKKwl1aW50MzJfdCBmY3BpcGFyYW07Cit9OworCisKKy8qIHNjc2kgZXZlbnQgaGVhZGVyICovCitzdHJ1Y3QgbHBmY19zY3NpX2V2ZW50X2hlYWRlciB7CisJdWludDMyX3QgZXZlbnRfdHlwZTsKKwl1aW50MzJfdCBzdWJjYXRlZ29yeTsKKwl1aW50MzJfdCBsdW47CisJdWludDhfdCB3d3BuWzhdOworCXVpbnQ4X3Qgd3dubls4XTsKK307CisKKy8qIHN1YmNhdGVnb3J5IGNvZGVzIGZvciBGQ19SRUdfU0NTSV9FVkVOVCAqLworI2RlZmluZSBMUEZDX0VWRU5UX1FGVUxMCTB4MDAwMQorI2RlZmluZSBMUEZDX0VWRU5UX0RFVkJTWQkweDAwMDIKKyNkZWZpbmUgTFBGQ19FVkVOVF9DSEVDS19DT05ECTB4MDAwNAorI2RlZmluZSBMUEZDX0VWRU5UX0xVTlJFU0VUCTB4MDAwOAorI2RlZmluZSBMUEZDX0VWRU5UX1RHVFJFU0VUCTB4MDAxMAorI2RlZmluZSBMUEZDX0VWRU5UX0JVU1JFU0VUCTB4MDAyMAorI2RlZmluZSBMUEZDX0VWRU5UX1ZBUlFVRURFUFRICTB4MDA0MAorCisvKiBzcGVjaWFsIGNhc2Ugc2NzaSB2YXJxdWV1ZWRlcHRoIGV2ZW50ICovCitzdHJ1Y3QgbHBmY19zY3NpX3ZhcnF1ZXVlZGVwdGhfZXZlbnQgeworCXN0cnVjdCBscGZjX3Njc2lfZXZlbnRfaGVhZGVyIHNjc2lfZXZlbnQ7CisJdWludDMyX3Qgb2xkdmFsOworCXVpbnQzMl90IG5ld3ZhbDsKK307CisKKy8qIHNwZWNpYWwgY2FzZSBzY3NpIGNoZWNrIGNvbmRpdGlvbiBldmVudCAqLworc3RydWN0IGxwZmNfc2NzaV9jaGVja19jb25kaXRpb25fZXZlbnQgeworCXN0cnVjdCBscGZjX3Njc2lfZXZlbnRfaGVhZGVyIHNjc2lfZXZlbnQ7CisJdWludDhfdCBzZW5zZV9rZXk7CisJdWludDhfdCBhc2M7CisJdWludDhfdCBhc2NxOworfTsKKworLyogZXZlbnQgY29kZXMgZm9yIEZDX1JFR19CT0FSRF9FVkVOVCAqLworI2RlZmluZSBMUEZDX0VWRU5UX1BPUlRJTlRFUlIJCTB4MDEKKworLyogYm9hcmQgZXZlbnQgaGVhZGVyICovCitzdHJ1Y3QgbHBmY19ib2FyZF9ldmVudF9oZWFkZXIgeworCXVpbnQzMl90IGV2ZW50X3R5cGU7CisJdWludDMyX3Qgc3ViY2F0ZWdvcnk7Cit9OworCisKKy8qIGV2ZW50IGNvZGVzIGZvciBGQ19SRUdfQURBUFRFUl9FVkVOVCAqLworI2RlZmluZSBMUEZDX0VWRU5UX0FSUklWQUwJMHgwMQorCisvKiBhZGFwdGVyIGV2ZW50IGhlYWRlciAqLworc3RydWN0IGxwZmNfYWRhcHRlcl9ldmVudF9oZWFkZXIgeworCXVpbnQzMl90IGV2ZW50X3R5cGU7CisJdWludDMyX3Qgc3ViY2F0ZWdvcnk7Cit9OworCisKKy8qIGV2ZW50IGNvZGVzIGZvciB0ZW1wX2V2ZW50ICovCisjZGVmaW5lIExQRkNfQ1JJVF9URU1QCQkweDEKKyNkZWZpbmUgTFBGQ19USFJFU0hPTERfVEVNUAkweDIKKyNkZWZpbmUgTFBGQ19OT1JNQUxfVEVNUAkweDMKKworc3RydWN0IHRlbXBfZXZlbnQgeworCXVpbnQzMl90IGV2ZW50X3R5cGU7CisJdWludDMyX3QgZXZlbnRfY29kZTsKKwl1aW50MzJfdCBkYXRhOworfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKaW5kZXggNjY4OGE4Ni4uMGMyNWQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJscGZjX2h3LmgiCiAjaW5jbHVkZSAibHBmY19zbGkuaCIKKyNpbmNsdWRlICJscGZjX25sLmgiCiAjaW5jbHVkZSAibHBmY19kaXNjLmgiCiAjaW5jbHVkZSAibHBmY19zY3NpLmgiCiAjaW5jbHVkZSAibHBmYy5oIgpAQCAtMTAwMywyMCArMTAwNCw4IEBACiAJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfMkJfRElTQzsKIAkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQotCQkJaWYgKHZwb3J0LT5udW1fZGlzY19ub2RlcykgeworCQkJaWYgKHZwb3J0LT5udW1fZGlzY19ub2RlcykKIAkJCQlscGZjX21vcmVfYWRpc2ModnBvcnQpOwotCQkJCWlmICgodnBvcnQtPm51bV9kaXNjX25vZGVzID09IDApICYmCi0JCQkJICAgICh2cG9ydC0+ZmNfbnByX2NudCkpCi0JCQkJCWxwZmNfZWxzX2Rpc2NfcGxvZ2kodnBvcnQpOwotCQkJCWlmICh2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMgPT0gMCkgewotCQkJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwotCQkJCQl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfTkRJU0NfQUNUSVZFOwotCQkJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JCQkJCWxwZmNfY2FuX2Rpc2N0bW8odnBvcnQpOwotCQkJCQlscGZjX2VuZF9yc2NuKHZwb3J0KTsKLQkJCQl9Ci0JCQl9CiAJCX0KIAkJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIAl9CkBAIC0xODY1LDggKzE4NTQsMTMgQEAKIGxwZmNfY21wbF9sb2dvX25wcl9ub2RlKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsCiAJCQl2b2lkICphcmcsIHVpbnQzMl90IGV2dCkKIHsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CisJaWYgKG5kbHAtPm5scF9ESUQgPT0gRmFicmljX0RJRCkgeworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQl2cG9ydC0+ZmNfZmxhZyAmPSB+KEZDX0ZBQlJJQyB8IEZDX1BVQkxJQ19MT09QKTsKKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCX0KIAlscGZjX3VucmVnX3JwaSh2cG9ydCwgbmRscCk7Ci0JLyogVGhpcyByb3V0aW5lIGRvZXMgbm90aGluZywganVzdCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgKi8KIAlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCkBAIC0yMTU1LDcgKzIxNDksNyBAQAogCQlscGZjX25scF9wdXQobmRscCk7CiAJfSBlbHNlIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9JTkZPLCBMT0dfRElTQ09WRVJZLAotCQkJIjAyMTIgRFNNIG91dCBzdGF0ZSAlZCBvbiBOUG9ydCBmcmVlXG4iLCByYyk7CisJCQkiMDIxMyBEU00gb3V0IHN0YXRlICVkIG9uIE5Qb3J0IGZyZWVcbiIsIHJjKTsKIAogCQlscGZjX2RlYnVnZnNfZGlzY190cmModnBvcnQsIExQRkNfRElTQ19UUkNfRFNNLAogCQkJIkRTTSBvdXQ6ICAgICAgICAgc3RlOiVkIGRpZDp4JXggZmxnOngleCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCmluZGV4IDFiY2ViYmQuLmJkMTg2NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAibHBmY192ZXJzaW9uLmgiCiAjaW5jbHVkZSAibHBmY19ody5oIgogI2luY2x1ZGUgImxwZmNfc2xpLmgiCisjaW5jbHVkZSAibHBmY19ubC5oIgogI2luY2x1ZGUgImxwZmNfZGlzYy5oIgogI2luY2x1ZGUgImxwZmNfc2NzaS5oIgogI2luY2x1ZGUgImxwZmMuaCIKQEAgLTQyLDYgKzQzLDExMSBAQAogI2RlZmluZSBMUEZDX1JFU0VUX1dBSVQgIDIKICNkZWZpbmUgTFBGQ19BQk9SVF9XQUlUICAyCiAKKy8qKgorICogbHBmY191cGRhdGVfc3RhdHM6IFVwZGF0ZSBzdGF0aXN0aWNhbCBkYXRhIGZvciB0aGUgY29tbWFuZCBjb21wbGV0aW9uLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIG9iamVjdC4KKyAqIEBscGZjX2NtZDogbHBmYyBzY3NpIGNvbW1hbmQgb2JqZWN0IHBvaW50ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBhIGNvbW1hbmQgY29tcGxldGlvbiBhbmQgdGhpcworICogZnVuY3Rpb24gdXBkYXRlcyB0aGUgc3RhdGlzdGljYWwgZGF0YSBmb3IgdGhlIGNvbW1hbmQgY29tcGxldGlvbi4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCAgbHBmY19zY3NpX2J1ZiAqbHBmY19jbWQpCit7CisJc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGEgPSBscGZjX2NtZC0+cmRhdGE7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKnBub2RlID0gcmRhdGEtPnBub2RlOworCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IGxwZmNfY21kLT5wQ21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY21kLT5kZXZpY2UtPmhvc3Q7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKKwl1bnNpZ25lZCBsb25nIGxhdGVuY3k7CisJaW50IGk7CisKKwlpZiAoY21kLT5yZXN1bHQpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIXZwb3J0LT5zdGF0X2RhdGFfZW5hYmxlZCB8fAorCQl2cG9ydC0+c3RhdF9kYXRhX2Jsb2NrZWQgfHwKKwkJIXBub2RlLT5sYXRfZGF0YSB8fAorCQkocGhiYS0+YnVja2V0X3R5cGUgPT0gTFBGQ19OT19CVUNLRVQpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCWxhdGVuY3kgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBscGZjX2NtZC0+c3RhcnRfdGltZSk7CisKKwlpZiAocGhiYS0+YnVja2V0X3R5cGUgPT0gTFBGQ19MSU5FQVJfQlVDS0VUKSB7CisJCWkgPSAobGF0ZW5jeSArIHBoYmEtPmJ1Y2tldF9zdGVwIC0gMSAtIHBoYmEtPmJ1Y2tldF9iYXNlKS8KKwkJCXBoYmEtPmJ1Y2tldF9zdGVwOworCQlpZiAoaSA+PSBMUEZDX01BWF9CVUNLRVRfQ09VTlQpCisJCQlpID0gTFBGQ19NQVhfQlVDS0VUX0NPVU5UOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBMUEZDX01BWF9CVUNLRVRfQ09VTlQtMTsgaSsrKQorCQkJaWYgKGxhdGVuY3kgPD0gKHBoYmEtPmJ1Y2tldF9iYXNlICsKKwkJCQkoKDE8PGkpKnBoYmEtPmJ1Y2tldF9zdGVwKSkpCisJCQkJYnJlYWs7CisJfQorCisJcG5vZGUtPmxhdF9kYXRhW2ldLmNtZF9jb3VudCsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworfQorCisKKy8qKgorICogbHBmY19zZW5kX3NkZXZfcXVldWVkZXB0aF9jaGFuZ2VfZXZlbnQ6IFBvc3RzIGEgcXVldWVkZXB0aCBjaGFuZ2UKKyAqICAgICAgICAgICAgICAgICAgIGV2ZW50LgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHZwb3J0OiBQb2ludGVyIHRvIHZwb3J0IG9iamVjdC4KKyAqIEBuZGxwOiBQb2ludGVyIHRvIEZDIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQuCisgKiBAbHVuOiBMdW4gbnVtYmVyIG9mIHRoZSBzY3NpIGRldmljZS4KKyAqIEBvbGRfdmFsOiBPbGQgdmFsdWUgb2YgdGhlIHF1ZXVlIGRlcHRoLgorICogQG5ld192YWw6IE5ldyB2YWx1ZSBvZiB0aGUgcXVldWUgZGVwdGguCisgKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhbiBldmVudCB0byB0aGUgbWdtdCBhcHBsaWNhdGlvbiBpbmRpY2F0aW5nCisgKiB0aGVyZSBpcyBhIGNoYW5nZSBpbiB0aGUgc2NzaSBkZXZpY2UgcXVldWUgZGVwdGguCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19zZW5kX3NkZXZfcXVldWVkZXB0aF9jaGFuZ2VfZXZlbnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQlzdHJ1Y3QgbHBmY192cG9ydCAgKnZwb3J0LAorCQlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwKKwkJdWludDMyX3QgbHVuLAorCQl1aW50MzJfdCBvbGRfdmFsLAorCQl1aW50MzJfdCBuZXdfdmFsKQoreworCXN0cnVjdCBscGZjX2Zhc3RfcGF0aF9ldmVudCAqZmFzdF9wYXRoX2V2dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZmFzdF9wYXRoX2V2dCA9IGxwZmNfYWxsb2NfZmFzdF9ldnQocGhiYSk7CisJaWYgKCFmYXN0X3BhdGhfZXZ0KQorCQlyZXR1cm47CisKKwlmYXN0X3BhdGhfZXZ0LT51bi5xdWV1ZV9kZXB0aF9ldnQuc2NzaV9ldmVudC5ldmVudF90eXBlID0KKwkJRkNfUkVHX1NDU0lfRVZFTlQ7CisJZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQuc3ViY2F0ZWdvcnkgPQorCQlMUEZDX0VWRU5UX1ZBUlFVRURFUFRIOworCisJLyogUmVwb3J0IGFsbCBsdW5zIHdpdGggY2hhbmdlIGluIHF1ZXVlIGRlcHRoICovCisJZmFzdF9wYXRoX2V2dC0+dW4ucXVldWVfZGVwdGhfZXZ0LnNjc2lfZXZlbnQubHVuID0gbHVuOworCWlmIChuZGxwICYmIE5MUF9DSEtfTk9ERV9BQ1QobmRscCkpIHsKKwkJbWVtY3B5KCZmYXN0X3BhdGhfZXZ0LT51bi5xdWV1ZV9kZXB0aF9ldnQuc2NzaV9ldmVudC53d3BuLAorCQkJJm5kbHAtPm5scF9wb3J0bmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwkJbWVtY3B5KCZmYXN0X3BhdGhfZXZ0LT51bi5xdWV1ZV9kZXB0aF9ldnQuc2NzaV9ldmVudC53d25uLAorCQkJJm5kbHAtPm5scF9ub2RlbmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwl9CisKKwlmYXN0X3BhdGhfZXZ0LT51bi5xdWV1ZV9kZXB0aF9ldnQub2xkdmFsID0gb2xkX3ZhbDsKKwlmYXN0X3BhdGhfZXZ0LT51bi5xdWV1ZV9kZXB0aF9ldnQubmV3dmFsID0gbmV3X3ZhbDsKKwlmYXN0X3BhdGhfZXZ0LT52cG9ydCA9IHZwb3J0OworCisJZmFzdF9wYXRoX2V2dC0+d29ya19ldnQuZXZ0ID0gTFBGQ19FVlRfRkFTVFBBVEhfTUdNVF9FVlQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZmYXN0X3BhdGhfZXZ0LT53b3JrX2V2dC5ldnRfbGlzdHAsICZwaGJhLT53b3JrX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwlscGZjX3dvcmtlcl93YWtlX3VwKHBoYmEpOworCisJcmV0dXJuOworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQgd2hlbiB0aGVyZSBpcyBhIHJlc291cmNlCiAgKiBlcnJvciBpbiBkcml2ZXIgb3IgaW4gZmlybXdhcmUuCkBAIC0xMTcsOSArMjIzLDEwIEBACiAJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0OwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKLQl1bnNpZ25lZCBsb25nIG5ld19xdWV1ZV9kZXB0aDsKKwl1bnNpZ25lZCBsb25nIG5ld19xdWV1ZV9kZXB0aCwgb2xkX3F1ZXVlX2RlcHRoOwogCXVuc2lnbmVkIGxvbmcgbnVtX3JzcmNfZXJyLCBudW1fY21kX3N1Y2Nlc3M7CiAJaW50IGk7CisJc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGE7CiAKIAludW1fcnNyY19lcnIgPSBhdG9taWNfcmVhZCgmcGhiYS0+bnVtX3JzcmNfZXJyKTsKIAludW1fY21kX3N1Y2Nlc3MgPSBhdG9taWNfcmVhZCgmcGhiYS0+bnVtX2NtZF9zdWNjZXNzKTsKQEAgLTEzNyw2ICsyNDQsNyBAQAogCQkJCWVsc2UKIAkJCQkJbmV3X3F1ZXVlX2RlcHRoID0gc2Rldi0+cXVldWVfZGVwdGggLQogCQkJCQkJCQluZXdfcXVldWVfZGVwdGg7CisJCQkJb2xkX3F1ZXVlX2RlcHRoID0gc2Rldi0+cXVldWVfZGVwdGg7CiAJCQkJaWYgKHNkZXYtPm9yZGVyZWRfdGFncykKIAkJCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2RldiwKIAkJCQkJCQlNU0dfT1JERVJFRF9UQUcsCkBAIC0xNDUsNiArMjUzLDEzIEBACiAJCQkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsCiAJCQkJCQkJTVNHX1NJTVBMRV9UQUcsCiAJCQkJCQkJbmV3X3F1ZXVlX2RlcHRoKTsKKwkJCQlyZGF0YSA9IHNkZXYtPmhvc3RkYXRhOworCQkJCWlmIChyZGF0YSkKKwkJCQkJbHBmY19zZW5kX3NkZXZfcXVldWVkZXB0aF9jaGFuZ2VfZXZlbnQoCisJCQkJCQlwaGJhLCB2cG9ydHNbaV0sCisJCQkJCQlyZGF0YS0+cG5vZGUsCisJCQkJCQlzZGV2LT5sdW4sIG9sZF9xdWV1ZV9kZXB0aCwKKwkJCQkJCW5ld19xdWV1ZV9kZXB0aCk7CiAJCQl9CiAJCX0KIAlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOwpAQCAtMTU5LDYgKzI3NCw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0OwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAlpbnQgaTsKKwlzdHJ1Y3QgbHBmY19ycG9ydF9kYXRhICpyZGF0YTsKIAogCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CiAJaWYgKHZwb3J0cyAhPSBOVUxMKQpAQCAtMTc2LDYgKzI5MiwxNCBAQAogCQkJCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LAogCQkJCQkJCU1TR19TSU1QTEVfVEFHLAogCQkJCQkJCXNkZXYtPnF1ZXVlX2RlcHRoKzEpOworCQkJCXJkYXRhID0gc2Rldi0+aG9zdGRhdGE7CisJCQkJaWYgKHJkYXRhKQorCQkJCQlscGZjX3NlbmRfc2Rldl9xdWV1ZWRlcHRoX2NoYW5nZV9ldmVudCgKKwkJCQkJCXBoYmEsIHZwb3J0c1tpXSwKKwkJCQkJCXJkYXRhLT5wbm9kZSwKKwkJCQkJCXNkZXYtPmx1biwKKwkJCQkJCXNkZXYtPnF1ZXVlX2RlcHRoIC0gMSwKKwkJCQkJCXNkZXYtPnF1ZXVlX2RlcHRoKTsKIAkJCX0KIAkJfQogCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CkBAIC0xODMsNiArMzA3LDM1IEBACiAJYXRvbWljX3NldCgmcGhiYS0+bnVtX2NtZF9zdWNjZXNzLCAwKTsKIH0KIAorLyoqCisgKiBscGZjX3Njc2lfZGV2X2Jsb2NrOiBzZXQgYWxsIHNjc2kgaG9zdHMgdG8gYmxvY2sgc3RhdGUuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiB3YWxrcyB2cG9ydCBsaXN0IGFuZCBzZXQgZWFjaCBTQ1NJIGhvc3QgdG8gYmxvY2sgc3RhdGUKKyAqIGJ5IGludm9raW5nIGZjX3JlbW90ZV9wb3J0X2RlbGV0ZSgpIHJvdXRpbmUuIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZAorICogd2l0aCBFRUggd2hlbiBkZXZpY2UncyBQQ0kgc2xvdCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC4KKyAqKi8KK3ZvaWQKK2xwZmNfc2NzaV9kZXZfYmxvY2soc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKKwlpbnQgaTsKKworCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisJaWYgKHZwb3J0cyAhPSBOVUxMKQorCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cGkgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKKwkJCXNob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LCBzaG9zdCkgeworCQkJCXJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzY3NpX3RhcmdldChzZGV2KSk7CisJCQkJZmNfcmVtb3RlX3BvcnRfZGVsZXRlKHJwb3J0KTsKKwkJCX0KKwkJfQorCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7Cit9CisKIC8qCiAgKiBUaGlzIHJvdXRpbmUgYWxsb2NhdGVzIGEgc2NzaSBidWZmZXIsIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5CiAgKiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gaW5pdGlhdGUgYSBTQ1NJIEkvTy4gIFRoZSBub24tRE1BYWJsZSBidWZmZXIgcmVnaW9uCkBAIC0xOTgsNyArMzUxLDkgQEAKIAlzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqcHNiOwogCXN0cnVjdCB1bHBfYmRlNjQgKmJwbDsKIAlJT0NCX3QgKmlvY2I7Ci0JZG1hX2FkZHJfdCBwZG1hX3BoeXM7CisJZG1hX2FkZHJfdCBwZG1hX3BoeXNfZmNwX2NtZDsKKwlkbWFfYWRkcl90IHBkbWFfcGh5c19mY3BfcnNwOworCWRtYV9hZGRyX3QgcGRtYV9waHlzX2JwbDsKIAl1aW50MTZfdCBpb3RhZzsKIAogCXBzYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX3Njc2lfYnVmKSwgR0ZQX0tFUk5FTCk7CkBAIC0yMzgsNDAgKzM5Myw2MCBAQAogCiAJLyogSW5pdGlhbGl6ZSBsb2NhbCBzaG9ydC1oYW5kIHBvaW50ZXJzLiAqLwogCWJwbCA9IHBzYi0+ZmNwX2JwbDsKLQlwZG1hX3BoeXMgPSBwc2ItPmRtYV9oYW5kbGU7CisJcGRtYV9waHlzX2ZjcF9jbWQgPSBwc2ItPmRtYV9oYW5kbGU7CisJcGRtYV9waHlzX2ZjcF9yc3AgPSBwc2ItPmRtYV9oYW5kbGUgKyBzaXplb2Yoc3RydWN0IGZjcF9jbW5kKTsKKwlwZG1hX3BoeXNfYnBsID0gcHNiLT5kbWFfaGFuZGxlICsgc2l6ZW9mKHN0cnVjdCBmY3BfY21uZCkgKworCQkJc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKTsKIAogCS8qCiAJICogVGhlIGZpcnN0IHR3byBiZGVzIGFyZSB0aGUgRkNQX0NNRCBhbmQgRkNQX1JTUC4gIFRoZSBiYWxhbmNlIGFyZSBzZwogCSAqIGxpc3QgYmRlcy4gIEluaXRpYWxpemUgdGhlIGZpcnN0IHR3byBhbmQgbGVhdmUgdGhlIHJlc3QgZm9yCiAJICogcXVldWVjb21tYW5kLgogCSAqLwotCWJwbC0+YWRkckhpZ2ggPSBsZTMyX3RvX2NwdShwdXRQYWRkckhpZ2gocGRtYV9waHlzKSk7Ci0JYnBsLT5hZGRyTG93ID0gbGUzMl90b19jcHUocHV0UGFkZHJMb3cocGRtYV9waHlzKSk7Ci0JYnBsLT50dXMuZi5iZGVTaXplID0gc2l6ZW9mIChzdHJ1Y3QgZmNwX2NtbmQpOwotCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1VTRV9DTU5EOwotCWJwbC0+dHVzLncgPSBsZTMyX3RvX2NwdShicGwtPnR1cy53KTsKLQlicGwrKzsKKwlicGxbMF0uYWRkckhpZ2ggPSBsZTMyX3RvX2NwdShwdXRQYWRkckhpZ2gocGRtYV9waHlzX2ZjcF9jbWQpKTsKKwlicGxbMF0uYWRkckxvdyA9IGxlMzJfdG9fY3B1KHB1dFBhZGRyTG93KHBkbWFfcGh5c19mY3BfY21kKSk7CisJYnBsWzBdLnR1cy5mLmJkZVNpemUgPSBzaXplb2Yoc3RydWN0IGZjcF9jbW5kKTsKKwlicGxbMF0udHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRFXzY0OworCWJwbFswXS50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOwogCiAJLyogU2V0dXAgdGhlIHBoeXNpY2FsIHJlZ2lvbiBmb3IgdGhlIEZDUCBSU1AgKi8KLQlwZG1hX3BoeXMgKz0gc2l6ZW9mIChzdHJ1Y3QgZmNwX2NtbmQpOwotCWJwbC0+YWRkckhpZ2ggPSBsZTMyX3RvX2NwdShwdXRQYWRkckhpZ2gocGRtYV9waHlzKSk7Ci0JYnBsLT5hZGRyTG93ID0gbGUzMl90b19jcHUocHV0UGFkZHJMb3cocGRtYV9waHlzKSk7Ci0JYnBsLT50dXMuZi5iZGVTaXplID0gc2l6ZW9mIChzdHJ1Y3QgZmNwX3JzcCk7Ci0JYnBsLT50dXMuZi5iZGVGbGFncyA9IChCVUZGX1VTRV9DTU5EIHwgQlVGRl9VU0VfUkNWKTsKLQlicGwtPnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7CisJYnBsWzFdLmFkZHJIaWdoID0gbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKHBkbWFfcGh5c19mY3BfcnNwKSk7CisJYnBsWzFdLmFkZHJMb3cgPSBsZTMyX3RvX2NwdShwdXRQYWRkckxvdyhwZG1hX3BoeXNfZmNwX3JzcCkpOworCWJwbFsxXS50dXMuZi5iZGVTaXplID0gc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKTsKKwlicGxbMV0udHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRFXzY0OworCWJwbFsxXS50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOwogCiAJLyoKIAkgKiBTaW5jZSB0aGUgSU9DQiBmb3IgdGhlIEZDUCBJL08gaXMgYnVpbHQgaW50byB0aGlzIGxwZmNfc2NzaV9idWYsCiAJICogaW5pdGlhbGl6ZSBpdCB3aXRoIGFsbCBrbm93biBkYXRhIG5vdy4KIAkgKi8KLQlwZG1hX3BoeXMgKz0gKHNpemVvZiAoc3RydWN0IGZjcF9yc3ApKTsKIAlpb2NiID0gJnBzYi0+Y3VyX2lvY2JxLmlvY2I7CiAJaW9jYi0+dW4uZmNwaTY0LmJkbC51bHBJb1RhZzMyID0gMDsKLQlpb2NiLT51bi5mY3BpNjQuYmRsLmFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKHBkbWFfcGh5cyk7Ci0JaW9jYi0+dW4uZmNwaTY0LmJkbC5hZGRyTG93ID0gcHV0UGFkZHJMb3cocGRtYV9waHlzKTsKLQlpb2NiLT51bi5mY3BpNjQuYmRsLmJkZVNpemUgPSAoMiAqIHNpemVvZiAoc3RydWN0IHVscF9iZGU2NCkpOwotCWlvY2ItPnVuLmZjcGk2NC5iZGwuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRMOwotCWlvY2ItPnVscEJkZUNvdW50ID0gMTsKKwlpZiAocGhiYS0+c2xpX3JldiA9PSAzKSB7CisJCS8qIGZpbGwgaW4gaW1tZWRpYXRlIGZjcCBjb21tYW5kIEJERSAqLworCQlpb2NiLT51bi5mY3BpNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV9JTU1FRDsKKwkJaW9jYi0+dW4uZmNwaTY0LmJkbC5iZGVTaXplID0gc2l6ZW9mKHN0cnVjdCBmY3BfY21uZCk7CisJCWlvY2ItPnVuLmZjcGk2NC5iZGwuYWRkckxvdyA9IG9mZnNldG9mKElPQ0JfdCwKKwkJCQkJCSAgICAgICB1bnNsaTMuZmNwX2V4dC5pY2QpOworCQlpb2NiLT51bi5mY3BpNjQuYmRsLmFkZHJIaWdoID0gMDsKKwkJaW9jYi0+dWxwQmRlQ291bnQgPSAwOworCQlpb2NiLT51bHBMZSA9IDA7CisJCS8qIGZpbGwgaW4gcmVzcG9uY2UgQkRFICovCisJCWlvY2ItPnVuc2xpMy5mY3BfZXh0LnJiZGUudHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRFXzY0OworCQlpb2NiLT51bnNsaTMuZmNwX2V4dC5yYmRlLnR1cy5mLmJkZVNpemUgPQorCQkJCQkJc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKTsKKwkJaW9jYi0+dW5zbGkzLmZjcF9leHQucmJkZS5hZGRyTG93ID0KKwkJCQkJCXB1dFBhZGRyTG93KHBkbWFfcGh5c19mY3BfcnNwKTsKKwkJaW9jYi0+dW5zbGkzLmZjcF9leHQucmJkZS5hZGRySGlnaCA9CisJCQkJCQlwdXRQYWRkckhpZ2gocGRtYV9waHlzX2ZjcF9yc3ApOworCX0gZWxzZSB7CisJCWlvY2ItPnVuLmZjcGk2NC5iZGwuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkxQXzY0OworCQlpb2NiLT51bi5mY3BpNjQuYmRsLmJkZVNpemUgPSAoMiAqIHNpemVvZihzdHJ1Y3QgdWxwX2JkZTY0KSk7CisJCWlvY2ItPnVuLmZjcGk2NC5iZGwuYWRkckxvdyA9IHB1dFBhZGRyTG93KHBkbWFfcGh5c19icGwpOworCQlpb2NiLT51bi5mY3BpNjQuYmRsLmFkZHJIaWdoID0gcHV0UGFkZHJIaWdoKHBkbWFfcGh5c19icGwpOworCQlpb2NiLT51bHBCZGVDb3VudCA9IDE7CisJCWlvY2ItPnVscExlID0gMTsKKwl9CiAJaW9jYi0+dWxwQ2xhc3MgPSBDTEFTUzM7CiAKIAlyZXR1cm4gcHNiOwpAQCAtMzEzLDggKzQ4OCw5IEBACiAJc3RydWN0IGZjcF9jbW5kICpmY3BfY21uZCA9IGxwZmNfY21kLT5mY3BfY21uZDsKIAlzdHJ1Y3QgdWxwX2JkZTY0ICpicGwgPSBscGZjX2NtZC0+ZmNwX2JwbDsKIAlJT0NCX3QgKmlvY2JfY21kID0gJmxwZmNfY21kLT5jdXJfaW9jYnEuaW9jYjsKKwlzdHJ1Y3QgdWxwX2JkZTY0ICpkYXRhX2JkZSA9IGlvY2JfY21kLT51bnNsaTMuZmNwX2V4dC5kYmRlOwogCWRtYV9hZGRyX3QgcGh5c2FkZHI7Ci0JdWludDMyX3QgaSwgbnVtX2JkZSA9IDA7CisJdWludDMyX3QgbnVtX2JkZSA9IDA7CiAJaW50IG5zZWcsIGRhdGFkaXIgPSBzY3NpX2NtbmQtPnNjX2RhdGFfZGlyZWN0aW9uOwogCiAJLyoKQEAgLTM1MiwzNyArNTI4LDE1OSBAQAogCQkgKiBkdXJpbmcgcHJvYmUgdGhhdCBsaW1pdHMgdGhlIG51bWJlciBvZiBzZyBlbGVtZW50cyBpbiBhbnkKIAkJICogc2luZ2xlIHNjc2kgY29tbWFuZC4gIEp1c3QgcnVuIHRocm91Z2ggdGhlIHNlZ19jbnQgYW5kIGZvcm1hdAogCQkgKiB0aGUgYmRlJ3MuCisJCSAqIFdoZW4gdXNpbmcgU0xJLTMgdGhlIGRyaXZlciB3aWxsIHRyeSB0byBmaXQgYWxsIHRoZSBCREVzIGludG8KKwkJICogdGhlIElPQ0IuIElmIGl0IGNhbid0IHRoZW4gdGhlIEJERXMgZ2V0IGFkZGVkIHRvIGEgQlBMIGFzIGl0CisJCSAqIGRvZXMgZm9yIFNMSS0yIG1vZGUuCiAJCSAqLwotCQlzY3NpX2Zvcl9lYWNoX3NnKHNjc2lfY21uZCwgc2dlbCwgbnNlZywgaSkgeworCQlzY3NpX2Zvcl9lYWNoX3NnKHNjc2lfY21uZCwgc2dlbCwgbnNlZywgbnVtX2JkZSkgewogCQkJcGh5c2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZ2VsKTsKLQkJCWJwbC0+YWRkckxvdyA9IGxlMzJfdG9fY3B1KHB1dFBhZGRyTG93KHBoeXNhZGRyKSk7Ci0JCQlicGwtPmFkZHJIaWdoID0gbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKHBoeXNhZGRyKSk7Ci0JCQlicGwtPnR1cy5mLmJkZVNpemUgPSBzZ19kbWFfbGVuKHNnZWwpOwotCQkJaWYgKGRhdGFkaXIgPT0gRE1BX1RPX0RFVklDRSkKLQkJCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gMDsKLQkJCWVsc2UKLQkJCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9VU0VfUkNWOwotCQkJYnBsLT50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOwotCQkJYnBsKys7Ci0JCQludW1fYmRlKys7CisJCQlpZiAocGhiYS0+c2xpX3JldiA9PSAzICYmCisJCQkgICAgbnNlZyA8PSBMUEZDX0VYVF9EQVRBX0JERV9DT1VOVCkgeworCQkJCWRhdGFfYmRlLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjQ7CisJCQkJZGF0YV9iZGUtPnR1cy5mLmJkZVNpemUgPSBzZ19kbWFfbGVuKHNnZWwpOworCQkJCWRhdGFfYmRlLT5hZGRyTG93ID0gcHV0UGFkZHJMb3cocGh5c2FkZHIpOworCQkJCWRhdGFfYmRlLT5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChwaHlzYWRkcik7CisJCQkJZGF0YV9iZGUrKzsKKwkJCX0gZWxzZSB7CisJCQkJYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjQ7CisJCQkJYnBsLT50dXMuZi5iZGVTaXplID0gc2dfZG1hX2xlbihzZ2VsKTsKKwkJCQlicGwtPnR1cy53ID0gbGUzMl90b19jcHUoYnBsLT50dXMudyk7CisJCQkJYnBsLT5hZGRyTG93ID0KKwkJCQkJbGUzMl90b19jcHUocHV0UGFkZHJMb3cocGh5c2FkZHIpKTsKKwkJCQlicGwtPmFkZHJIaWdoID0KKwkJCQkJbGUzMl90b19jcHUocHV0UGFkZHJIaWdoKHBoeXNhZGRyKSk7CisJCQkJYnBsKys7CisJCQl9CiAJCX0KIAl9CiAKIAkvKgogCSAqIEZpbmlzaCBpbml0aWFsaXppbmcgdGhvc2UgSU9DQiBmaWVsZHMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIHRoZQotCSAqIHNjc2lfY21uZCByZXF1ZXN0X2J1ZmZlci4gIE5vdGUgdGhhdCB0aGUgYmRlU2l6ZSBpcyBleHBsaWNpdGx5Ci0JICogcmVpbml0aWFsaXplZCBzaW5jZSBhbGwgaW9jYiBtZW1vcnkgcmVzb3VyY2VzIGFyZSB1c2VkIG1hbnkgdGltZXMKLQkgKiBmb3IgdHJhbnNtaXQsIHJlY2VpdmUsIGFuZCBjb250aW51YXRpb24gYnBsJ3MuCisJICogc2NzaV9jbW5kIHJlcXVlc3RfYnVmZmVyLiAgTm90ZSB0aGF0IGZvciBTTEktMiB0aGUgYmRlU2l6ZSBpcworCSAqIGV4cGxpY2l0bHkgcmVpbml0aWFsaXplZCBhbmQgZm9yIFNMSS0zIHRoZSBleHRlbmRlZCBiZGUgY291bnQgaXMKKwkgKiBleHBsaWNpdGx5IHJlaW5pdGlhbGl6ZWQgc2luY2UgYWxsIGlvY2IgbWVtb3J5IHJlc291cmNlcyBhcmUgcmV1c2VkLgogCSAqLwotCWlvY2JfY21kLT51bi5mY3BpNjQuYmRsLmJkZVNpemUgPSAoMiAqIHNpemVvZiAoc3RydWN0IHVscF9iZGU2NCkpOwotCWlvY2JfY21kLT51bi5mY3BpNjQuYmRsLmJkZVNpemUgKz0KLQkJKG51bV9iZGUgKiBzaXplb2YgKHN0cnVjdCB1bHBfYmRlNjQpKTsKLQlpb2NiX2NtZC0+dWxwQmRlQ291bnQgPSAxOwotCWlvY2JfY21kLT51bHBMZSA9IDE7CisJaWYgKHBoYmEtPnNsaV9yZXYgPT0gMykgeworCQlpZiAobnVtX2JkZSA+IExQRkNfRVhUX0RBVEFfQkRFX0NPVU5UKSB7CisJCQkvKgorCQkJICogVGhlIGV4dGVuZGVkIElPQ0IgZm9ybWF0IGNhbiBvbmx5IGZpdCAzIEJERSBvciBhIEJQTC4KKwkJCSAqIFRoaXMgSS9PIGhhcyBtb3JlIHRoYW4gMyBCREUgc28gdGhlIDFzdCBkYXRhIGJkZSB3aWxsCisJCQkgKiBiZSBhIEJQTCB0aGF0IGlzIGZpbGxlZCBpbiBoZXJlLgorCQkJICovCisJCQlwaHlzYWRkciA9IGxwZmNfY21kLT5kbWFfaGFuZGxlOworCQkJZGF0YV9iZGUtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JMUF82NDsKKwkJCWRhdGFfYmRlLT50dXMuZi5iZGVTaXplID0gKG51bV9iZGUgKgorCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpKTsKKwkJCXBoeXNhZGRyICs9IChzaXplb2Yoc3RydWN0IGZjcF9jbW5kKSArCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGZjcF9yc3ApICsKKwkJCQkgICAgICgyICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpKSk7CisJCQlkYXRhX2JkZS0+YWRkckhpZ2ggPSBwdXRQYWRkckhpZ2gocGh5c2FkZHIpOworCQkJZGF0YV9iZGUtPmFkZHJMb3cgPSBwdXRQYWRkckxvdyhwaHlzYWRkcik7CisJCQkvKiBlYmRlIGNvdW50IGluY2x1ZGVzIHRoZSByZXNwb25jZSBiZGUgYW5kIGRhdGEgYnBsICovCisJCQlpb2NiX2NtZC0+dW5zbGkzLmZjcF9leHQuZWJkZV9jb3VudCA9IDI7CisJCX0gZWxzZSB7CisJCQkvKiBlYmRlIGNvdW50IGluY2x1ZGVzIHRoZSByZXNwb25jZSBiZGUgYW5kIGRhdGEgYmRlcyAqLworCQkJaW9jYl9jbWQtPnVuc2xpMy5mY3BfZXh0LmViZGVfY291bnQgPSAobnVtX2JkZSArIDEpOworCQl9CisJfSBlbHNlIHsKKwkJaW9jYl9jbWQtPnVuLmZjcGk2NC5iZGwuYmRlU2l6ZSA9CisJCQkoKG51bV9iZGUgKyAyKSAqIHNpemVvZihzdHJ1Y3QgdWxwX2JkZTY0KSk7CisJfQogCWZjcF9jbW5kLT5mY3BEbCA9IGNwdV90b19iZTMyKHNjc2lfYnVmZmxlbihzY3NpX2NtbmQpKTsKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3NlbmRfc2NzaV9lcnJvcl9ldmVudDogUG9zdHMgYW4gZXZlbnQgd2hlbiB0aGVyZSBpcyBTQ1NJIGVycm9yLgorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICogQHZwb3J0OiBQb2ludGVyIHRvIHZwb3J0IG9iamVjdC4KKyAqIEBscGZjX2NtZDogUG9pbnRlciB0byBscGZjIHNjc2kgY29tbWFuZCB3aGljaCByZXBvcnRlZCB0aGUgZXJyb3IuCisgKiBAcnNwX2lvY2I6IFBvaW50ZXIgdG8gcmVzcG9uc2UgaW9jYiBvYmplY3Qgd2hpY2ggcmVwb3J0ZWQgZXJyb3IuCisgKgorICogVGhpcyBmdW5jdGlvbiBwb3N0cyBhbiBldmVudCB3aGVuIHRoZXJlIGlzIGEgU0NTSSBjb21tYW5kIHJlcG9ydGluZworICogZXJyb3IgZnJvbSB0aGUgc2NzaSBkZXZpY2UuCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19zZW5kX3Njc2lfZXJyb3JfZXZlbnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCisJCXN0cnVjdCBscGZjX3Njc2lfYnVmICpscGZjX2NtZCwgc3RydWN0IGxwZmNfaW9jYnEgKnJzcF9pb2NiKSB7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IGxwZmNfY21kLT5wQ21kOworCXN0cnVjdCBmY3BfcnNwICpmY3Byc3AgPSBscGZjX2NtZC0+ZmNwX3JzcDsKKwl1aW50MzJfdCByZXNwX2luZm8gPSBmY3Byc3AtPnJzcFN0YXR1czI7CisJdWludDMyX3Qgc2NzaV9zdGF0dXMgPSBmY3Byc3AtPnJzcFN0YXR1czM7CisJdWludDMyX3QgZmNwaV9wYXJtID0gcnNwX2lvY2ItPmlvY2IudW4uZmNwaS5mY3BpX3Bhcm07CisJc3RydWN0IGxwZmNfZmFzdF9wYXRoX2V2ZW50ICpmYXN0X3BhdGhfZXZ0ID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqcG5vZGUgPSBscGZjX2NtZC0+cmRhdGEtPnBub2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBJZiB0aGVyZSBpcyBxdWV1ZWZ1bGwgb3IgYnVzeSBjb25kaXRpb24gc2VuZCBhIHNjc2kgZXZlbnQgKi8KKwlpZiAoKGNtbmQtPnJlc3VsdCA9PSBTQU1fU1RBVF9UQVNLX1NFVF9GVUxMKSB8fAorCQkoY21uZC0+cmVzdWx0ID09IFNBTV9TVEFUX0JVU1kpKSB7CisJCWZhc3RfcGF0aF9ldnQgPSBscGZjX2FsbG9jX2Zhc3RfZXZ0KHBoYmEpOworCQlpZiAoIWZhc3RfcGF0aF9ldnQpCisJCQlyZXR1cm47CisJCWZhc3RfcGF0aF9ldnQtPnVuLnNjc2lfZXZ0LmV2ZW50X3R5cGUgPQorCQkJRkNfUkVHX1NDU0lfRVZFTlQ7CisJCWZhc3RfcGF0aF9ldnQtPnVuLnNjc2lfZXZ0LnN1YmNhdGVnb3J5ID0KKwkJKGNtbmQtPnJlc3VsdCA9PSBTQU1fU1RBVF9UQVNLX1NFVF9GVUxMKSA/CisJCUxQRkNfRVZFTlRfUUZVTEwgOiBMUEZDX0VWRU5UX0RFVkJTWTsKKwkJZmFzdF9wYXRoX2V2dC0+dW4uc2NzaV9ldnQubHVuID0gY21uZC0+ZGV2aWNlLT5sdW47CisJCW1lbWNweSgmZmFzdF9wYXRoX2V2dC0+dW4uc2NzaV9ldnQud3dwbiwKKwkJCSZwbm9kZS0+bmxwX3BvcnRuYW1lLCBzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCQltZW1jcHkoJmZhc3RfcGF0aF9ldnQtPnVuLnNjc2lfZXZ0Lnd3bm4sCisJCQkmcG5vZGUtPm5scF9ub2RlbmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwl9IGVsc2UgaWYgKChyZXNwX2luZm8gJiBTTlNfTEVOX1ZBTElEKSAmJiBmY3Byc3AtPnJzcFNuc0xlbiAmJgorCQkoKGNtbmQtPmNtbmRbMF0gPT0gUkVBRF8xMCkgfHwgKGNtbmQtPmNtbmRbMF0gPT0gV1JJVEVfMTApKSkgeworCQlmYXN0X3BhdGhfZXZ0ID0gbHBmY19hbGxvY19mYXN0X2V2dChwaGJhKTsKKwkJaWYgKCFmYXN0X3BhdGhfZXZ0KQorCQkJcmV0dXJuOworCQlmYXN0X3BhdGhfZXZ0LT51bi5jaGVja19jb25kX2V2dC5zY3NpX2V2ZW50LmV2ZW50X3R5cGUgPQorCQkJRkNfUkVHX1NDU0lfRVZFTlQ7CisJCWZhc3RfcGF0aF9ldnQtPnVuLmNoZWNrX2NvbmRfZXZ0LnNjc2lfZXZlbnQuc3ViY2F0ZWdvcnkgPQorCQkJTFBGQ19FVkVOVF9DSEVDS19DT05EOworCQlmYXN0X3BhdGhfZXZ0LT51bi5jaGVja19jb25kX2V2dC5zY3NpX2V2ZW50Lmx1biA9CisJCQljbW5kLT5kZXZpY2UtPmx1bjsKKwkJbWVtY3B5KCZmYXN0X3BhdGhfZXZ0LT51bi5jaGVja19jb25kX2V2dC5zY3NpX2V2ZW50Lnd3cG4sCisJCQkmcG5vZGUtPm5scF9wb3J0bmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwkJbWVtY3B5KCZmYXN0X3BhdGhfZXZ0LT51bi5jaGVja19jb25kX2V2dC5zY3NpX2V2ZW50Lnd3bm4sCisJCQkmcG5vZGUtPm5scF9ub2RlbmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwkJZmFzdF9wYXRoX2V2dC0+dW4uY2hlY2tfY29uZF9ldnQuc2Vuc2Vfa2V5ID0KKwkJCWNtbmQtPnNlbnNlX2J1ZmZlclsyXSAmIDB4ZjsKKwkJZmFzdF9wYXRoX2V2dC0+dW4uY2hlY2tfY29uZF9ldnQuYXNjID0gY21uZC0+c2Vuc2VfYnVmZmVyWzEyXTsKKwkJZmFzdF9wYXRoX2V2dC0+dW4uY2hlY2tfY29uZF9ldnQuYXNjcSA9IGNtbmQtPnNlbnNlX2J1ZmZlclsxM107CisJfSBlbHNlIGlmICgoY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSAmJgorCQkgICAgIGZjcGlfcGFybSAmJgorCQkgICAgICgoYmUzMl90b19jcHUoZmNwcnNwLT5yc3BSZXNJZCkgIT0gZmNwaV9wYXJtKSB8fAorCQkJKChzY3NpX3N0YXR1cyA9PSBTQU1fU1RBVF9HT09EKSAmJgorCQkJIShyZXNwX2luZm8gJiAoUkVTSURfVU5ERVIgfCBSRVNJRF9PVkVSKSkpKSkgeworCQkvKgorCQkgKiBJZiBzdGF0dXMgaXMgZ29vZCBvciByZXNpZCBkb2VzIG5vdCBtYXRjaCB3aXRoIGZjcF9wYXJhbSBhbmQKKwkJICogdGhlcmUgaXMgdmFsaWQgZmNwaV9wYXJtLCB0aGVuIHRoZXJlIGlzIGEgcmVhZF9jaGVjayBlcnJvcgorCQkgKi8KKwkJZmFzdF9wYXRoX2V2dCA9IGxwZmNfYWxsb2NfZmFzdF9ldnQocGhiYSk7CisJCWlmICghZmFzdF9wYXRoX2V2dCkKKwkJCXJldHVybjsKKwkJZmFzdF9wYXRoX2V2dC0+dW4ucmVhZF9jaGVja19lcnJvci5oZWFkZXIuZXZlbnRfdHlwZSA9CisJCQlGQ19SRUdfRkFCUklDX0VWRU5UOworCQlmYXN0X3BhdGhfZXZ0LT51bi5yZWFkX2NoZWNrX2Vycm9yLmhlYWRlci5zdWJjYXRlZ29yeSA9CisJCQlMUEZDX0VWRU5UX0ZDUFJEQ0hLRVJSOworCQltZW1jcHkoJmZhc3RfcGF0aF9ldnQtPnVuLnJlYWRfY2hlY2tfZXJyb3IuaGVhZGVyLnd3cG4sCisJCQkmcG5vZGUtPm5scF9wb3J0bmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwkJbWVtY3B5KCZmYXN0X3BhdGhfZXZ0LT51bi5yZWFkX2NoZWNrX2Vycm9yLmhlYWRlci53d25uLAorCQkJJnBub2RlLT5ubHBfbm9kZW5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJCWZhc3RfcGF0aF9ldnQtPnVuLnJlYWRfY2hlY2tfZXJyb3IubHVuID0gY21uZC0+ZGV2aWNlLT5sdW47CisJCWZhc3RfcGF0aF9ldnQtPnVuLnJlYWRfY2hlY2tfZXJyb3Iub3Bjb2RlID0gY21uZC0+Y21uZFswXTsKKwkJZmFzdF9wYXRoX2V2dC0+dW4ucmVhZF9jaGVja19lcnJvci5mY3BpcGFyYW0gPQorCQkJZmNwaV9wYXJtOworCX0gZWxzZQorCQlyZXR1cm47CisKKwlmYXN0X3BhdGhfZXZ0LT52cG9ydCA9IHZwb3J0OworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmZmFzdF9wYXRoX2V2dC0+d29ya19ldnQuZXZ0X2xpc3RwLCAmcGhiYS0+d29ya19saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJbHBmY193b3JrZXJfd2FrZV91cChwaGJhKTsKKwlyZXR1cm47Cit9CiBzdGF0aWMgdm9pZAogbHBmY19zY3NpX3VucHJlcF9kbWFfYnVmKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHN0cnVjdCBscGZjX3Njc2lfYnVmICogcHNiKQogewpAQCAtNDExLDYgKzcwOSw3IEBACiAJdWludDMyX3QgcnNwbGVuID0gMDsKIAl1aW50MzJfdCBsb2dpdCA9IExPR19GQ1AgfCBMT0dfRkNQX0VSUk9SOwogCisKIAkvKgogCSAqICBJZiB0aGlzIGlzIGEgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQsIHRoZXJlIGlzIG5vCiAJICogIHNjc2kgcGFja2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxwZmNfY21kLiAgVGhlIGRyaXZlcgpAQCAtNTI2LDYgKzgyNSw3IEBACiAKICBvdXQ6CiAJY21uZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChob3N0X3N0YXR1cywgc2NzaV9zdGF0dXMpOworCWxwZmNfc2VuZF9zY3NpX2Vycm9yX2V2ZW50KHZwb3J0LT5waGJhLCB2cG9ydCwgbHBmY19jbWQsIHJzcF9pb2NiKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTU0Miw5ICs4NDIsMTEgQEAKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsICp0bXBfc2RldjsKIAlpbnQgZGVwdGggPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxwZmNfZmFzdF9wYXRoX2V2ZW50ICpmYXN0X3BhdGhfZXZ0OwogCiAJbHBmY19jbWQtPnJlc3VsdCA9IHBJb2NiT3V0LT5pb2NiLnVuLnVscFdvcmRbNF07CiAJbHBmY19jbWQtPnN0YXR1cyA9IHBJb2NiT3V0LT5pb2NiLnVscFN0YXR1czsKKwlhdG9taWNfZGVjKCZwbm9kZS0+Y21kX3BlbmRpbmcpOwogCiAJaWYgKGxwZmNfY21kLT5zdGF0dXMpIHsKIAkJaWYgKGxwZmNfY21kLT5zdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCAmJgpAQCAtNTcwLDEyICs4NzIsMzYgQEAKIAkJCWJyZWFrOwogCQljYXNlIElPU1RBVF9OUE9SVF9CU1k6CiAJCWNhc2UgSU9TVEFUX0ZBQlJJQ19CU1k6Ci0JCQljbWQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX0JVU19CVVNZLCAwKTsKKwkJCWNtZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfVFJBTlNQT1JUX0RJU1JVUFRFRCwgMCk7CisJCQlmYXN0X3BhdGhfZXZ0ID0gbHBmY19hbGxvY19mYXN0X2V2dChwaGJhKTsKKwkJCWlmICghZmFzdF9wYXRoX2V2dCkKKwkJCQlicmVhazsKKwkJCWZhc3RfcGF0aF9ldnQtPnVuLmZhYnJpY19ldnQuZXZlbnRfdHlwZSA9CisJCQkJRkNfUkVHX0ZBQlJJQ19FVkVOVDsKKwkJCWZhc3RfcGF0aF9ldnQtPnVuLmZhYnJpY19ldnQuc3ViY2F0ZWdvcnkgPQorCQkJCShscGZjX2NtZC0+c3RhdHVzID09IElPU1RBVF9OUE9SVF9CU1kpID8KKwkJCQlMUEZDX0VWRU5UX1BPUlRfQlVTWSA6IExQRkNfRVZFTlRfRkFCUklDX0JVU1k7CisJCQlpZiAocG5vZGUgJiYgTkxQX0NIS19OT0RFX0FDVChwbm9kZSkpIHsKKwkJCQltZW1jcHkoJmZhc3RfcGF0aF9ldnQtPnVuLmZhYnJpY19ldnQud3dwbiwKKwkJCQkJJnBub2RlLT5ubHBfcG9ydG5hbWUsCisJCQkJCXNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJCQkJbWVtY3B5KCZmYXN0X3BhdGhfZXZ0LT51bi5mYWJyaWNfZXZ0Lnd3bm4sCisJCQkJCSZwbm9kZS0+bmxwX25vZGVuYW1lLAorCQkJCQlzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpOworCQkJfQorCQkJZmFzdF9wYXRoX2V2dC0+dnBvcnQgPSB2cG9ydDsKKwkJCWZhc3RfcGF0aF9ldnQtPndvcmtfZXZ0LmV2dCA9CisJCQkJTFBGQ19FVlRfRkFTVFBBVEhfTUdNVF9FVlQ7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCQkJbGlzdF9hZGRfdGFpbCgmZmFzdF9wYXRoX2V2dC0+d29ya19ldnQuZXZ0X2xpc3RwLAorCQkJCSZwaGJhLT53b3JrX2xpc3QpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCQkJbHBmY193b3JrZXJfd2FrZV91cChwaGJhKTsKIAkJCWJyZWFrOwogCQljYXNlIElPU1RBVF9MT0NBTF9SRUpFQ1Q6Ci0JCQlpZiAobHBmY19jbWQtPnJlc3VsdCA9PSBSSlRfVU5BVkFJTF9QRVJNIHx8CisJCQlpZiAobHBmY19jbWQtPnJlc3VsdCA9PSBJT0VSUl9JTlZBTElEX1JQSSB8fAogCQkJICAgIGxwZmNfY21kLT5yZXN1bHQgPT0gSU9FUlJfTk9fUkVTT1VSQ0VTIHx8Ci0JCQkgICAgbHBmY19jbWQtPnJlc3VsdCA9PSBSSlRfTE9HSU5fUkVRVUlSRUQpIHsKKwkJCSAgICBscGZjX2NtZC0+cmVzdWx0ID09IElPRVJSX0FCT1JUX1JFUVVFU1RFRCkgewogCQkJCWNtZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfUkVRVUVVRSwgMCk7CiAJCQkJYnJlYWs7CiAJCQl9IC8qIGVsc2U6IGZhbGwgdGhyb3VnaCAqLwpAQCAtNTg2LDcgKzkxMiw4IEBACiAKIAkJaWYgKCFwbm9kZSB8fCAhTkxQX0NIS19OT0RFX0FDVChwbm9kZSkKIAkJICAgIHx8IChwbm9kZS0+bmxwX3N0YXRlICE9IE5MUF9TVEVfTUFQUEVEX05PREUpKQotCQkJY21kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9CVVNfQlVTWSwgU0FNX1NUQVRfQlVTWSk7CisJCQljbWQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX1RSQU5TUE9SVF9ESVNSVVBURUQsCisJCQkJCQkgU0FNX1NUQVRfQlVTWSk7CiAJfSBlbHNlIHsKIAkJY21kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9PSywgMCk7CiAJfQpAQCAtNjAyLDggKzkyOSwzMiBAQAogCQkJCSBzY3NpX2dldF9yZXNpZChjbWQpKTsKIAl9CiAKKwlscGZjX3VwZGF0ZV9zdGF0cyhwaGJhLCBscGZjX2NtZCk7CiAJcmVzdWx0ID0gY21kLT5yZXN1bHQ7CiAJc2RldiA9IGNtZC0+ZGV2aWNlOworCWlmICh2cG9ydC0+Y2ZnX21heF9zY3NpY21wbF90aW1lICYmCisJICAgdGltZV9hZnRlcihqaWZmaWVzLCBscGZjX2NtZC0+c3RhcnRfdGltZSArCisJCW1zZWNzX3RvX2ppZmZpZXModnBvcnQtPmNmZ19tYXhfc2NzaWNtcGxfdGltZSkpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKHNkZXYtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCQlpZiAoKHBub2RlLT5jbWRfcWRlcHRoID4gYXRvbWljX3JlYWQoJnBub2RlLT5jbWRfcGVuZGluZykgJiYKKwkJICAgIChhdG9taWNfcmVhZCgmcG5vZGUtPmNtZF9wZW5kaW5nKSA+IExQRkNfTUlOX1RHVF9RREVQVEgpICYmCisJCSAgICAoKGNtZC0+Y21uZFswXSA9PSBSRUFEXzEwKSB8fCAoY21kLT5jbW5kWzBdID09IFdSSVRFXzEwKSkpKQorCQkJcG5vZGUtPmNtZF9xZGVwdGggPSBhdG9taWNfcmVhZCgmcG5vZGUtPmNtZF9wZW5kaW5nKTsKKworCQlwbm9kZS0+bGFzdF9jaGFuZ2VfdGltZSA9IGppZmZpZXM7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2Rldi0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmICgocG5vZGUtPmNtZF9xZGVwdGggPCBMUEZDX01BWF9UR1RfUURFUFRIKSAmJgorCQkgICB0aW1lX2FmdGVyKGppZmZpZXMsIHBub2RlLT5sYXN0X2NoYW5nZV90aW1lICsKKwkJCW1zZWNzX3RvX2ppZmZpZXMoTFBGQ19UR1RRX0lOVEVSVkFMKSkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCXBub2RlLT5jbWRfcWRlcHRoICs9IHBub2RlLT5jbWRfcWRlcHRoICoKKwkJCUxQRkNfVEdUUV9SQU1QVVBfUENFTlQgLyAxMDA7CisJCWlmIChwbm9kZS0+Y21kX3FkZXB0aCA+IExQRkNfTUFYX1RHVF9RREVQVEgpCisJCQlwbm9kZS0+Y21kX3FkZXB0aCA9IExQRkNfTUFYX1RHVF9RREVQVEg7CisJCXBub2RlLT5sYXN0X2NoYW5nZV90aW1lID0gamlmZmllczsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzZGV2LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwl9CisKIAlscGZjX3Njc2lfdW5wcmVwX2RtYV9idWYocGhiYSwgbHBmY19jbWQpOwogCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAKQEAgLTY0Nyw2ICs5OTgsOSBAQAogCQkJCXBub2RlLT5sYXN0X3JhbXBfdXBfdGltZSA9IGppZmZpZXM7CiAJCQl9CiAJCX0KKwkJbHBmY19zZW5kX3NkZXZfcXVldWVkZXB0aF9jaGFuZ2VfZXZlbnQocGhiYSwgdnBvcnQsIHBub2RlLAorCQkJMHhGRkZGRkZGRiwKKwkJCXNkZXYtPnF1ZXVlX2RlcHRoIC0gMSwgc2Rldi0+cXVldWVfZGVwdGgpOwogCX0KIAogCS8qCkBAIC02NzYsNiArMTAzMCw5IEBACiAJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX1dBUk5JTkcsIExPR19GQ1AsCiAJCQkJCSAiMDcxMSBkZXRlY3RlZCBxdWV1ZSBmdWxsIC0gbHVuIHF1ZXVlICIKIAkJCQkJICJkZXB0aCBhZGp1c3RlZCB0byAlZC5cbiIsIGRlcHRoKTsKKwkJCWxwZmNfc2VuZF9zZGV2X3F1ZXVlZGVwdGhfY2hhbmdlX2V2ZW50KHBoYmEsIHZwb3J0LAorCQkJCXBub2RlLCAweEZGRkZGRkZGLAorCQkJCWRlcHRoKzEsIGRlcHRoKTsKIAkJfQogCX0KIApAQCAtNjkyLDYgKzEwNDksMjQgQEAKIAlscGZjX3JlbGVhc2Vfc2NzaV9idWYocGhiYSwgbHBmY19jbWQpOwogfQogCisvKioKKyAqIGxwZmNfZmNwY21kX3RvX2lvY2IgLSBjb3B5IHRoZSBmY3BfY21kIGRhdGEgaW50byB0aGUgSU9DQi4KKyAqIEBkYXRhOiBBIHBvaW50ZXIgdG8gdGhlIGltbWVkaWF0ZSBjb21tYW5kIGRhdGEgcG9ydGlvbiBvZiB0aGUgSU9DQi4KKyAqIEBmY3BfY21uZDogVGhlIEZDUCBDb21tYW5kIHRoYXQgaXMgcHJvdmlkZWQgYnkgdGhlIFNDU0kgbGF5ZXIuCisgKgorICogVGhlIHJvdXRpbmUgY29waWVzIHRoZSBlbnRpcmUgRkNQIGNvbW1hbmQgZnJvbSBAZmNwX2NtbmQgdG8gQGRhdGEgd2hpbGUKKyAqIGJ5dGUgc3dhcHBpbmcgdGhlIGRhdGEgdG8gYmlnIGVuZGlhbiBmb3JtYXQgZm9yIHRyYW5zbWlzc2lvbiBvbiB0aGUgd2lyZS4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX2ZjcGNtZF90b19pb2NiKHVpbnQ4X3QgKmRhdGEsIHN0cnVjdCBmY3BfY21uZCAqZmNwX2NtbmQpCit7CisJaW50IGksIGo7CisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGZjcF9jbW5kKTsKKwkgICAgIGkgKz0gc2l6ZW9mKHVpbnQzMl90KSwgaisrKSB7CisJCSgodWludDMyX3QgKilkYXRhKVtqXSA9IGNwdV90b19iZTMyKCgodWludDMyX3QgKilmY3BfY21uZClbal0pOworCX0KK30KKwogc3RhdGljIHZvaWQKIGxwZmNfc2NzaV9wcmVwX2NtbmQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqbHBmY19jbWQsCiAJCSAgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqcG5vZGUpCkBAIC03NTgsNyArMTEzMyw4IEBACiAJCWZjcF9jbW5kLT5mY3BDbnRsMyA9IDA7CiAJCXBoYmEtPmZjNENvbnRyb2xSZXF1ZXN0cysrOwogCX0KLQorCWlmIChwaGJhLT5zbGlfcmV2ID09IDMpCisJCWxwZmNfZmNwY21kX3RvX2lvY2IoaW9jYl9jbWQtPnVuc2xpMy5mY3BfZXh0LmljZCwgZmNwX2NtbmQpOwogCS8qCiAJICogRmluaXNoIGluaXRpYWxpemluZyB0aG9zZSBJT0NCIGZpZWxkcyB0aGF0IGFyZSBpbmRlcGVuZGVudAogCSAqIG9mIHRoZSBzY3NpX2NtbmQgcmVxdWVzdF9idWZmZXIKQEAgLTc5OCwxMSArMTE3NCwxMyBAQAogCXBpb2NiID0gJnBpb2NicS0+aW9jYjsKIAogCWZjcF9jbW5kID0gbHBmY19jbWQtPmZjcF9jbW5kOwotCWludF90b19zY3NpbHVuKGx1biwgJmxwZmNfY21kLT5mY3BfY21uZC0+ZmNwX2x1bik7CisJLyogQ2xlYXIgb3V0IGFueSBvbGQgZGF0YSBpbiB0aGUgRkNQIGNvbW1hbmQgYXJlYSAqLworCW1lbXNldChmY3BfY21uZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY3BfY21uZCkpOworCWludF90b19zY3NpbHVuKGx1biwgJmZjcF9jbW5kLT5mY3BfbHVuKTsKIAlmY3BfY21uZC0+ZmNwQ250bDIgPSB0YXNrX21nbXRfY21kOwotCisJaWYgKHZwb3J0LT5waGJhLT5zbGlfcmV2ID09IDMpCisJCWxwZmNfZmNwY21kX3RvX2lvY2IocGlvY2ItPnVuc2xpMy5mY3BfZXh0LmljZCwgZmNwX2NtbmQpOwogCXBpb2NiLT51bHBDb21tYW5kID0gQ01EX0ZDUF9JQ01ORDY0X0NSOwotCiAJcGlvY2ItPnVscENvbnRleHQgPSBuZGxwLT5ubHBfcnBpOwogCWlmIChuZGxwLT5ubHBfZmNwX2luZm8gJiBOTFBfRkNQXzJfREVWSUNFKSB7CiAJCXBpb2NiLT51bHBGQ1AyUmN2eSA9IDE7CkBAIC05NjcsOSArMTM0NSwxMiBAQAogCSAqIHRyYW5zcG9ydCBpcyBzdGlsbCB0cmFuc2l0aW9uaW5nLgogCSAqLwogCWlmICghbmRscCB8fCAhTkxQX0NIS19OT0RFX0FDVChuZGxwKSkgewotCQljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9CVVNfQlVTWSwgMCk7CisJCWNtbmQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX1RSQU5TUE9SVF9ESVNSVVBURUQsIDApOwogCQlnb3RvIG91dF9mYWlsX2NvbW1hbmQ7CiAJfQorCWlmIChhdG9taWNfcmVhZCgmbmRscC0+Y21kX3BlbmRpbmcpID49IG5kbHAtPmNtZF9xZGVwdGgpCisJCWdvdG8gb3V0X2hvc3RfYnVzeTsKKwogCWxwZmNfY21kID0gbHBmY19nZXRfc2NzaV9idWYocGhiYSk7CiAJaWYgKGxwZmNfY21kID09IE5VTEwpIHsKIAkJbHBmY19hZGp1c3RfcXVldWVfZGVwdGgocGhiYSk7CkBAIC05ODAsNiArMTM2MSw3IEBACiAJCWdvdG8gb3V0X2hvc3RfYnVzeTsKIAl9CiAKKwlscGZjX2NtZC0+c3RhcnRfdGltZSA9IGppZmZpZXM7CiAJLyoKIAkgKiBTdG9yZSB0aGUgbWlkbGF5ZXIncyBjb21tYW5kIHN0cnVjdHVyZSBmb3IgdGhlIGNvbXBsZXRpb24gcGhhc2UKIAkgKiBhbmQgY29tcGxldGUgdGhlIGNvbW1hbmQgaW5pdGlhbGl6YXRpb24uCkBAIC05ODcsNiArMTM2OSw3IEBACiAJbHBmY19jbWQtPnBDbWQgID0gY21uZDsKIAlscGZjX2NtZC0+cmRhdGEgPSByZGF0YTsKIAlscGZjX2NtZC0+dGltZW91dCA9IDA7CisJbHBmY19jbWQtPnN0YXJ0X3RpbWUgPSBqaWZmaWVzOwogCWNtbmQtPmhvc3Rfc2NyaWJibGUgPSAodW5zaWduZWQgY2hhciAqKWxwZmNfY21kOwogCWNtbmQtPnNjc2lfZG9uZSA9IGRvbmU7CiAKQEAgLTk5Niw2ICsxMzc5LDcgQEAKIAogCWxwZmNfc2NzaV9wcmVwX2NtbmQodnBvcnQsIGxwZmNfY21kLCBuZGxwKTsKIAorCWF0b21pY19pbmMoJm5kbHAtPmNtZF9wZW5kaW5nKTsKIAllcnIgPSBscGZjX3NsaV9pc3N1ZV9pb2NiKHBoYmEsICZwaGJhLT5zbGkucmluZ1twc2xpLT5mY3BfcmluZ10sCiAJCQkJICAmbHBmY19jbWQtPmN1cl9pb2NicSwgU0xJX0lPQ0JfUkVUX0lPQ0IpOwogCWlmIChlcnIpCkBAIC0xMDEwLDYgKzEzOTQsNyBAQAogCXJldHVybiAwOwogCiAgb3V0X2hvc3RfYnVzeV9mcmVlX2J1ZjoKKwlhdG9taWNfZGVjKCZuZGxwLT5jbWRfcGVuZGluZyk7CiAJbHBmY19zY3NpX3VucHJlcF9kbWFfYnVmKHBoYmEsIGxwZmNfY21kKTsKIAlscGZjX3JlbGVhc2Vfc2NzaV9idWYocGhiYSwgbHBmY19jbWQpOwogIG91dF9ob3N0X2J1c3k6CkBAIC0xMTQ1LDYgKzE1MzAsNyBAQAogCWludCByZXQgPSBTVUNDRVNTOwogCWludCBzdGF0dXM7CiAJaW50IGNudDsKKwlzdHJ1Y3QgbHBmY19zY3NpX2V2ZW50X2hlYWRlciBzY3NpX2V2ZW50OwogCiAJbHBmY19ibG9ja19lcnJvcl9oYW5kbGVyKGNtbmQpOwogCS8qCkBAIC0xMTYzLDYgKzE1NDksMTkgQEAKIAkJCWJyZWFrOwogCQlwbm9kZSA9IHJkYXRhLT5wbm9kZTsKIAl9CisKKwlzY3NpX2V2ZW50LmV2ZW50X3R5cGUgPSBGQ19SRUdfU0NTSV9FVkVOVDsKKwlzY3NpX2V2ZW50LnN1YmNhdGVnb3J5ID0gTFBGQ19FVkVOVF9UR1RSRVNFVDsKKwlzY3NpX2V2ZW50Lmx1biA9IDA7CisJbWVtY3B5KHNjc2lfZXZlbnQud3dwbiwgJnBub2RlLT5ubHBfcG9ydG5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJbWVtY3B5KHNjc2lfZXZlbnQud3dubiwgJnBub2RlLT5ubHBfbm9kZW5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisKKwlmY19ob3N0X3Bvc3RfdmVuZG9yX2V2ZW50KHNob3N0LAorCQlmY19nZXRfZXZlbnRfbnVtYmVyKCksCisJCXNpemVvZihzY3NpX2V2ZW50KSwKKwkJKGNoYXIgKikmc2NzaV9ldmVudCwKKwkJU0NTSV9OTF9WSURfVFlQRV9QQ0kgfCBQQ0lfVkVORE9SX0lEX0VNVUxFWCk7CisKIAlpZiAoIXJkYXRhIHx8IHBub2RlLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9NQVBQRURfTk9ERSkgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0ZDUCwKIAkJCQkgIjA3MjEgTFVOIFJlc2V0IHJwb3J0ICIKQEAgLTEyNDIsMTAgKzE2NDEsMjMgQEAKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTDsKIAlpbnQgbWF0Y2g7Ci0JaW50IHJldCA9IFNVQ0NFU1MsIHN0YXR1cywgaTsKKwlpbnQgcmV0ID0gU1VDQ0VTUywgc3RhdHVzID0gU1VDQ0VTUywgaTsKIAlpbnQgY250OwogCXN0cnVjdCBscGZjX3Njc2lfYnVmICogbHBmY19jbWQ7CiAJdW5zaWduZWQgbG9uZyBsYXRlcjsKKwlzdHJ1Y3QgbHBmY19zY3NpX2V2ZW50X2hlYWRlciBzY3NpX2V2ZW50OworCisJc2NzaV9ldmVudC5ldmVudF90eXBlID0gRkNfUkVHX1NDU0lfRVZFTlQ7CisJc2NzaV9ldmVudC5zdWJjYXRlZ29yeSA9IExQRkNfRVZFTlRfQlVTUkVTRVQ7CisJc2NzaV9ldmVudC5sdW4gPSAwOworCW1lbWNweShzY3NpX2V2ZW50Lnd3cG4sICZ2cG9ydC0+ZmNfcG9ydG5hbWUsIHNpemVvZihzdHJ1Y3QgbHBmY19uYW1lKSk7CisJbWVtY3B5KHNjc2lfZXZlbnQud3dubiwgJnZwb3J0LT5mY19ub2RlbmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKworCWZjX2hvc3RfcG9zdF92ZW5kb3JfZXZlbnQoc2hvc3QsCisJCWZjX2dldF9ldmVudF9udW1iZXIoKSwKKwkJc2l6ZW9mKHNjc2lfZXZlbnQpLAorCQkoY2hhciAqKSZzY3NpX2V2ZW50LAorCQlTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IFBDSV9WRU5ET1JfSURfRU1VTEVYKTsKIAogCWxwZmNfYmxvY2tfZXJyb3JfaGFuZGxlcihjbW5kKTsKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaAppbmRleCBkYWJhOTIzLi40MzdmMTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaApAQCAtMTA3LDYgKzEwNywxMCBAQAogCiB9OwogCitzdHJ1Y3QgbHBmY19zY3NpY21kX2JrdCB7CisJdWludDMyX3QgY21kX2NvdW50OworfTsKKwogc3RydWN0IGxwZmNfc2NzaV9idWYgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpwQ21kOwpAQCAtMTM5LDYgKzE0Myw3IEBACiAJICovCiAJc3RydWN0IGxwZmNfaW9jYnEgY3VyX2lvY2JxOwogCXdhaXRfcXVldWVfaGVhZF90ICp3YWl0cTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CiB9OwogCiAjZGVmaW5lIExQRkNfU0NTSV9ETUFfRVhUX1NJWkUgMjY0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwppbmRleCA1MGZlMDc2Li44YWI1YmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgImxwZmNfaHcuaCIKICNpbmNsdWRlICJscGZjX3NsaS5oIgorI2luY2x1ZGUgImxwZmNfbmwuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKICNpbmNsdWRlICJscGZjLmgiCkBAIC02NiwxMCArNjcsMTYgQEAKIAlMUEZDX0FCT1JUX0lPQ0IKIH0gbHBmY19pb2NiX3R5cGU7CiAKLQkJLyogU0xJLTIvU0xJLTMgcHJvdmlkZSBkaWZmZXJlbnQgc2l6ZWQgaW9jYnMuICBHaXZlbiBhIHBvaW50ZXIKLQkJICogdG8gdGhlIHN0YXJ0IG9mIHRoZSByaW5nLCBhbmQgdGhlIHNsb3QgbnVtYmVyIG9mIHRoZQotCQkgKiBkZXNpcmVkIGlvY2IgZW50cnksIGNhbGMgYSBwb2ludGVyIHRvIHRoYXQgZW50cnkuCi0JCSAqLworLyoqCisgKiBscGZjX2NtZF9pb2NiOiBHZXQgbmV4dCBjb21tYW5kIGlvY2IgZW50cnkgaW4gdGhlIHJpbmcuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcG9pbnRlciB0byBuZXh0IGNvbW1hbmQgaW9jYiBlbnRyeQorICogaW4gdGhlIGNvbW1hbmQgcmluZy4gVGhlIGNhbGxlciBtdXN0IGhvbGQgaGJhbG9jayB0byBwcmV2ZW50CisgKiBvdGhlciB0aHJlYWRzIGNvbnN1bWUgdGhlIG5leHQgY29tbWFuZCBpb2NiLgorICogU0xJLTIvU0xJLTMgcHJvdmlkZSBkaWZmZXJlbnQgc2l6ZWQgaW9jYnMuCisgKiovCiBzdGF0aWMgaW5saW5lIElPQ0JfdCAqCiBscGZjX2NtZF9pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nKQogewpAQCAtNzcsNiArODQsMTYgQEAKIAkJCSAgIHByaW5nLT5jbWRpZHggKiBwaGJhLT5pb2NiX2NtZF9zaXplKTsKIH0KIAorLyoqCisgKiBscGZjX3Jlc3BfaW9jYjogR2V0IG5leHQgcmVzcG9uc2UgaW9jYiBlbnRyeSBpbiB0aGUgcmluZy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBwb2ludGVyIHRvIG5leHQgcmVzcG9uc2UgaW9jYiBlbnRyeQorICogaW4gdGhlIHJlc3BvbnNlIHJpbmcuIFRoZSBjYWxsZXIgbXVzdCBob2xkIGhiYWxvY2sgdG8gbWFrZSBzdXJlCisgKiB0aGF0IG5vIG90aGVyIHRocmVhZCBjb25zdW1lIHRoZSBuZXh0IHJlc3BvbnNlIGlvY2IuCisgKiBTTEktMi9TTEktMyBwcm92aWRlIGRpZmZlcmVudCBzaXplZCBpb2Nicy4KKyAqKi8KIHN0YXRpYyBpbmxpbmUgSU9DQl90ICoKIGxwZmNfcmVzcF9pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nKQogewpAQCAtODQsNiArMTAxLDE1IEBACiAJCQkgICBwcmluZy0+cnNwaWR4ICogcGhiYS0+aW9jYl9yc3Bfc2l6ZSk7CiB9CiAKKy8qKgorICogX19scGZjX3NsaV9nZXRfaW9jYnE6IEFsbG9jYXRlcyBhbiBpb2NiIG9iamVjdCBmcm9tIGlvY2IgcG9vbC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZC4gVGhpcyBmdW5jdGlvbgorICogYWxsb2NhdGVzIGEgbmV3IGRyaXZlciBpb2NiIG9iamVjdCBmcm9tIHRoZSBpb2NiIHBvb2wuIElmIHRoZQorICogYWxsb2NhdGlvbiBpcyBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIHBvaW50ZXIgdG8gdGhlIG5ld2x5CisgKiBhbGxvY2F0ZWQgaW9jYiBvYmplY3QgZWxzZSBpdCByZXR1cm5zIE5VTEwuCisgKiovCiBzdGF0aWMgc3RydWN0IGxwZmNfaW9jYnEgKgogX19scGZjX3NsaV9nZXRfaW9jYnEoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtOTQsNiArMTIwLDE1IEBACiAJcmV0dXJuIGlvY2JxOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2dldF9pb2NicTogQWxsb2NhdGVzIGFuIGlvY2Igb2JqZWN0IGZyb20gaW9jYiBwb29sLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uCisgKiBhbGxvY2F0ZXMgYSBuZXcgZHJpdmVyIGlvY2Igb2JqZWN0IGZyb20gdGhlIGlvY2IgcG9vbC4gSWYgdGhlCisgKiBhbGxvY2F0aW9uIGlzIHN1Y2Nlc3NmdWwsIGl0IHJldHVybnMgcG9pbnRlciB0byB0aGUgbmV3bHkKKyAqIGFsbG9jYXRlZCBpb2NiIG9iamVjdCBlbHNlIGl0IHJldHVybnMgTlVMTC4KKyAqKi8KIHN0cnVjdCBscGZjX2lvY2JxICoKIGxwZmNfc2xpX2dldF9pb2NicShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0xMDYsNiArMTQxLDE2IEBACiAJcmV0dXJuIGlvY2JxOwogfQogCisvKioKKyAqIF9fbHBmY19zbGlfcmVsZWFzZV9pb2NicTogUmVsZWFzZSBpb2NiIHRvIHRoZSBpb2NiIHBvb2wuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAaW9jYnE6IFBvaW50ZXIgdG8gZHJpdmVyIGlvY2Igb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jayBoZWxkIHRvIHJlbGVhc2UgZHJpdmVyCisgKiBpb2NiIG9iamVjdCB0byB0aGUgaW9jYiBwb29sLiBUaGUgaW90YWcgaW4gdGhlIGlvY2Igb2JqZWN0CisgKiBkb2VzIG5vdCBjaGFuZ2UgZm9yIGVhY2ggdXNlIG9mIHRoZSBpb2NiIG9iamVjdC4gVGhpcyBmdW5jdGlvbgorICogY2xlYXJzIGFsbCBvdGhlciBmaWVsZHMgb2YgdGhlIGlvY2Igb2JqZWN0IHdoZW4gaXQgaXMgZnJlZWQuCisgKiovCiBzdGF0aWMgdm9pZAogX19scGZjX3NsaV9yZWxlYXNlX2lvY2JxKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxKQogewpAQCAtMTE4LDYgKzE2MywxNCBAQAogCWxpc3RfYWRkX3RhaWwoJmlvY2JxLT5saXN0LCAmcGhiYS0+bHBmY19pb2NiX2xpc3QpOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3JlbGVhc2VfaW9jYnE6IFJlbGVhc2UgaW9jYiB0byB0aGUgaW9jYiBwb29sLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGlvY2JxOiBQb2ludGVyIHRvIGRyaXZlciBpb2NiIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZCB0byByZWxlYXNlIHRoZSBpb2NiIHRvCisgKiBpb2NiIHBvb2wuCisgKiovCiB2b2lkCiBscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxKQogewpAQCAtMTMxLDEwICsxODQsMjEgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOwogfQogCi0vKgotICogVHJhbnNsYXRlIHRoZSBpb2NiIGNvbW1hbmQgdG8gYW4gaW9jYiBjb21tYW5kIHR5cGUgdXNlZCB0byBkZWNpZGUgdGhlIGZpbmFsCi0gKiBkaXNwb3NpdGlvbiBvZiBlYWNoIGNvbXBsZXRlZCBJT0NCLgotICovCisvKioKKyAqIGxwZmNfc2xpX2lvY2JfY21kX3R5cGU6IEdldCB0aGUgaW9jYiB0eXBlLgorICogQGlvY2JfY21uZCA6IGlvY2IgY29tbWFuZCBjb2RlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHJpbmcgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB0byBnZXQgdGhlIGlvY2IgdHlwZS4KKyAqIFRoaXMgZnVuY3Rpb24gdHJhbnNsYXRlcyB0aGUgaW9jYiBjb21tYW5kIHRvIGFuIGlvY2IgY29tbWFuZCB0eXBlIHVzZWQgdG8KKyAqIGRlY2lkZSB0aGUgZmluYWwgZGlzcG9zaXRpb24gb2YgZWFjaCBjb21wbGV0ZWQgSU9DQi4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zCisgKiBMUEZDX1VOS05PV05fSU9DQiBpZiBpdCBpcyBhbiB1bnN1cHBvcnRlZCBpb2NiCisgKiBMUEZDX1NPTF9JT0NCICAgICBpZiBpdCBpcyBhIHNvbGljaXRlZCBpb2NiIGNvbXBsZXRpb24KKyAqIExQRkNfQUJPUlRfSU9DQiAgIGlmIGl0IGlzIGFuIGFib3J0IGlvY2IKKyAqIExQRkNfVU5TT0xfSU9DQiAgIGlmIGl0IGlzIGFuIHVuc29saWNpdGVkIGlvY2IKKyAqCisgKiBUaGUgY2FsbGVyIGlzIG5vdCByZXF1aXJlZCB0byBob2xkIGFueSBsb2NrLgorICoqLwogc3RhdGljIGxwZmNfaW9jYl90eXBlCiBscGZjX3NsaV9pb2NiX2NtZF90eXBlKHVpbnQ4X3QgaW9jYl9jbW5kKQogewpAQCAtMjMwLDYgKzI5NCwxNyBAQAogCXJldHVybiB0eXBlOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3JpbmdfbWFwOiBJc3N1ZSBjb25maWdfcmluZyBtYm94IGZvciBhbGwgcmluZ3MuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBTTEkgaW5pdGlhbGl6YXRpb24gY29kZQorICogdG8gY29uZmlndXJlIGV2ZXJ5IHJpbmcgb2YgdGhlIEhCQSdzIFNMSSBpbnRlcmZhY2UuIFRoZQorICogY2FsbGVyIGlzIG5vdCByZXF1aXJlZCB0byBob2xkIGFueSBsb2NrLiBUaGlzIGZ1bmN0aW9uIGlzc3VlcworICogYSBjb25maWdfcmluZyBtYWlsYm94IGNvbW1hbmQgZm9yIGVhY2ggcmluZy4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwgZWxzZSByZXR1cm5zIGEgbmVnYXRpdmUKKyAqIGVycm9yIGNvZGUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3NsaV9yaW5nX21hcChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0yNjIsNiArMzM3LDE4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9yaW5ndHhjbXBsX3B1dDogQWRkcyBuZXcgaW9jYiB0byB0aGUgdHhjbXBscS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQHBpb2NiOiBQb2ludGVyIHRvIHRoZSBkcml2ZXIgaW9jYiBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQuIFRoZSBmdW5jdGlvbiBhZGRzIHRoZQorICogbmV3IGlvY2IgdG8gdHhjbXBscSBvZiB0aGUgZ2l2ZW4gcmluZy4gVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucworICogMC4gSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIEVMUyByaW5nLCB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBpZgorICogdGhlcmUgaXMgYSB2cG9ydCBhc3NvY2lhdGVkIHdpdGggdGhlIEVMUyBjb21tYW5kLiBUaGlzIGZ1bmN0aW9uIGFsc28KKyAqIHN0YXJ0cyBlbHNfdG1vZnVuYyB0aW1lciBpZiB0aGlzIGlzIGFuIEVMUyBjb21tYW5kLgorICoqLwogc3RhdGljIGludAogbHBmY19zbGlfcmluZ3R4Y21wbF9wdXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCQlzdHJ1Y3QgbHBmY19pb2NicSAqcGlvY2IpCkBAIC0yODIsNiArMzY5LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19zbGlfcmluZ3R4X2dldDogR2V0IGZpcnN0IGVsZW1lbnQgb2YgdGhlIHR4cS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jayBoZWxkIHRvIGdldCBuZXh0CisgKiBpb2NiIGluIHR4cSBvZiB0aGUgZ2l2ZW4gcmluZy4gSWYgdGhlcmUgaXMgYW55IGlvY2IgaW4KKyAqIHRoZSB0eHEsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZpcnN0IGlvY2IgaW4gdGhlIGxpc3QgYWZ0ZXIKKyAqIHJlbW92aW5nIHRoZSBpb2NiIGZyb20gdGhlIGxpc3QsIGVsc2UgaXQgcmV0dXJucyBOVUxMLgorICoqLwogc3RhdGljIHN0cnVjdCBscGZjX2lvY2JxICoKIGxwZmNfc2xpX3Jpbmd0eF9nZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcpCiB7CkBAIC0yOTMsMTQgKzM5MCwyNSBAQAogCXJldHVybiBjbWRfaW9jYjsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9uZXh0X2lvY2Jfc2xvdDogR2V0IG5leHQgaW9jYiBzbG90IGluIHRoZSByaW5nLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQgYW5kIHRoZSBjYWxsZXIgbXVzdCBwb3N0IHRoZQorICogaW9jYiB3aXRob3V0IHJlbGVhc2luZyB0aGUgbG9jay4gSWYgdGhlIGNhbGxlciByZWxlYXNlcyB0aGUgbG9jaywKKyAqIGlvY2Igc2xvdCByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24gaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgYXZhaWxhYmxlLgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgcG9pbnRlciB0byB0aGUgbmV4dCBhdmFpbGFibGUgaW9jYiBzbG90IGlmIHRoZXJlCisgKiBpcyBhdmFpbGFibGUgc2xvdCBpbiB0aGUgcmluZywgZWxzZSBpdCByZXR1cm5zIE5VTEwuCisgKiBJZiB0aGUgZ2V0IGluZGV4IG9mIHRoZSByaW5nIGlzIGFoZWFkIG9mIHRoZSBwdXQgaW5kZXgsIHRoZSBmdW5jdGlvbgorICogd2lsbCBwb3N0IGFuIGVycm9yIGF0dGVudGlvbiBldmVudCB0byB0aGUgd29ya2VyIHRocmVhZCB0byB0YWtlIHRoZQorICogSEJBIHRvIG9mZmxpbmUgc3RhdGUuCisgKiovCiBzdGF0aWMgSU9DQl90ICoKIGxwZmNfc2xpX25leHRfaW9jYl9zbG90IChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZykKIHsKLQlzdHJ1Y3QgbHBmY19wZ3AgKnBncCA9IChwaGJhLT5zbGlfcmV2ID09IDMpID8KLQkJJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMzX3BncC5wb3J0W3ByaW5nLT5yaW5nbm9dIDoKLQkJJnBoYmEtPnNsaW0ycC0+bWJ4LnVzLnMyLnBvcnRbcHJpbmctPnJpbmdub107CisJc3RydWN0IGxwZmNfcGdwICpwZ3AgPSAmcGhiYS0+cG9ydF9ncFtwcmluZy0+cmluZ25vXTsKIAl1aW50MzJfdCAgbWF4X2NtZF9pZHggPSBwcmluZy0+bnVtQ2lvY2I7Ci0KIAlpZiAoKHByaW5nLT5uZXh0X2NtZGlkeCA9PSBwcmluZy0+Y21kaWR4KSAmJgogCSAgICgrK3ByaW5nLT5uZXh0X2NtZGlkeCA+PSBtYXhfY21kX2lkeCkpCiAJCXByaW5nLT5uZXh0X2NtZGlkeCA9IDA7CkBAIC0zMzYsNiArNDQ0LDE4IEBACiAJcmV0dXJuIGxwZmNfY21kX2lvY2IocGhiYSwgcHJpbmcpOwogfQogCisvKioKKyAqIGxwZmNfc2xpX25leHRfaW90YWc6IEdldCBhbiBpb3RhZyBmb3IgdGhlIGlvY2IuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAaW9jYnE6IFBvaW50ZXIgdG8gZHJpdmVyIGlvY2Igb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBhbiBpb3RhZyBmb3IgdGhlIGlvY2IuIElmIHRoZXJlIGlzIG5vIHVudXNlZCBpb3RhZyBhbmQKKyAqIHRoZSBpb2NicV9sb29rdXBfbGVuIDwgMHhmZmZmLCB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIGJpZ2dlciBpb3RhZ19sb29rdXAKKyAqIGFycmF5IGFuZCBhc3NpZ25zIGEgbmV3IGlvdGFnLgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFsbG9jYXRlZCBpb3RhZyBpZiBzdWNjZXNzZnVsLCBlbHNlIHJldHVybnMgemVyby4KKyAqIFplcm8gaXMgbm90IGEgdmFsaWQgaW90YWcuCisgKiBUaGUgY2FsbGVyIGlzIG5vdCByZXF1aXJlZCB0byBob2xkIGFueSBsb2NrLgorICoqLwogdWludDE2X3QKIGxwZmNfc2xpX25leHRfaW90YWcoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqaW9jYnEpCiB7CkBAIC0zOTksNiArNTE5LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19zbGlfc3VibWl0X2lvY2I6IFN1Ym1pdCBhbiBpb2NiIHRvIHRoZSBmaXJtd2FyZS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQGlvY2I6IFBvaW50ZXIgdG8gaW9jYiBzbG90IGluIHRoZSByaW5nLgorICogQG5leHRpb2NiOiBQb2ludGVyIHRvIGRyaXZlciBpb2NiIG9iamVjdCB3aGljaCBuZWVkIHRvIGJlCisgKiAgICAgICAgICAgIHBvc3RlZCB0byBmaXJtd2FyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZCB0byBwb3N0IGEgbmV3IGlvY2IgdG8KKyAqIHRoZSBmaXJtd2FyZS4gVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIG5ldyBpb2NiIHRvIHJpbmcgaW9jYiBzbG90IGFuZAorICogdXBkYXRlcyB0aGUgcmluZyBwb2ludGVycy4gSXQgYWRkcyB0aGUgbmV3IGlvY2IgdG8gdHhjbXBscSBpZiB0aGVyZSBpcworICogYSBjb21wbGV0aW9uIGNhbGwgYmFjayBmb3IgdGhpcyBpb2NiIGVsc2UgdGhlIGZ1bmN0aW9uIHdpbGwgZnJlZSB0aGUKKyAqIGlvY2Igb2JqZWN0LgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfc2xpX3N1Ym1pdF9pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQlJT0NCX3QgKmlvY2IsIHN0cnVjdCBscGZjX2lvY2JxICpuZXh0aW9jYikKQEAgLTQ0MSw2ICs1NzUsMTggQEAKIAl3cml0ZWwocHJpbmctPmNtZGlkeCwgJnBoYmEtPmhvc3RfZ3BbcHJpbmctPnJpbmdub10uY21kUHV0SW54KTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV91cGRhdGVfZnVsbF9yaW5nOiBVcGRhdGUgdGhlIGNoaXAgYXR0ZW50aW9uIHJlZ2lzdGVyLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKgorICogVGhlIGNhbGxlciBpcyBub3QgcmVxdWlyZWQgdG8gaG9sZCBhbnkgbG9jayBmb3IgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBjaGlwIGF0dGVudGlvbiBiaXRzIGZvciB0aGUgcmluZyB0byBpbmZvcm0gZmlybXdhcmUKKyAqIHRoYXQgdGhlcmUgYXJlIHBlbmRpbmcgd29yayB0byBiZSBkb25lIGZvciB0aGlzIHJpbmcgYW5kIHJlcXVlc3RzIGFuCisgKiBpbnRlcnJ1cHQgd2hlbiB0aGVyZSBpcyBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIHJpbmcuIFRoaXMgZnVuY3Rpb24gaXMKKyAqIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgdW5hYmxlIHRvIHBvc3QgbW9yZSBpb2NicyB0byB0aGUgcmluZyBkdWUKKyAqIHRvIHVuYXZhaWxhYmlsaXR5IG9mIHNwYWNlIGluIHRoZSByaW5nLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfc2xpX3VwZGF0ZV9mdWxsX3Jpbmcoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcpCiB7CkBAIC00NjAsNiArNjA2LDE1IEBACiAJcHJpbmctPnN0YXRzLmlvY2JfY21kX2Z1bGwrKzsKIH0KIAorLyoqCisgKiBscGZjX3NsaV91cGRhdGVfcmluZzogVXBkYXRlIGNoaXAgYXR0ZW50aW9uIHJlZ2lzdGVyLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBjaGlwIGF0dGVudGlvbiByZWdpc3RlciBiaXQgZm9yIHRoZQorICogZ2l2ZW4gcmluZyB0byBpbmZvcm0gSEJBIHRoYXQgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGJlIGRvbmUKKyAqIGluIHRoaXMgcmluZy4gVGhlIGNhbGxlciBpcyBub3QgcmVxdWlyZWQgdG8gaG9sZCBhbnkgbG9jay4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NsaV91cGRhdGVfcmluZyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZykKIHsKQEAgLTQ2OCwxMSArNjIzLDIyIEBACiAJLyoKIAkgKiBUZWxsIHRoZSBIQkEgdGhhdCB0aGVyZSBpcyB3b3JrIHRvIGRvIGluIHRoaXMgcmluZy4KIAkgKi8KLQl3bWIoKTsKLQl3cml0ZWwoQ0FfUjBBVFQgPDwgKHJpbmdubyAqIDQpLCBwaGJhLT5DQXJlZ2FkZHIpOwotCXJlYWRsKHBoYmEtPkNBcmVnYWRkcik7IC8qIGZsdXNoICovCisJaWYgKCEocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0NSUF9FTkFCTEVEKSkgeworCQl3bWIoKTsKKwkJd3JpdGVsKENBX1IwQVRUIDw8IChyaW5nbm8gKiA0KSwgcGhiYS0+Q0FyZWdhZGRyKTsKKwkJcmVhZGwocGhiYS0+Q0FyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwl9CiB9CiAKKy8qKgorICogbHBmY19zbGlfcmVzdW1lX2lvY2I6IFByb2Nlc3MgaW9jYnMgaW4gdGhlIHR4cS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jayBoZWxkIHRvIHBvc3QgcGVuZGluZyBpb2NicworICogaW4gdGhlIHR4cSB0byB0aGUgZmlybXdhcmUuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gZHJpdmVyCisgKiBkZXRlY3RzIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgcmluZy4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NsaV9yZXN1bWVfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZykKIHsKQEAgLTUwNCw2ICs2NzAsMTYgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19zbGlfbmV4dF9oYnFfc2xvdDogR2V0IG5leHQgaGJxIGVudHJ5IGZvciB0aGUgSEJRLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGhicW5vOiBIQlEgbnVtYmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jayBoZWxkIHRvIGdldCB0aGUgbmV4dAorICogYXZhaWxhYmxlIHNsb3QgZm9yIHRoZSBnaXZlbiBIQlEuIElmIHRoZXJlIGlzIGZyZWUgc2xvdAorICogYXZhaWxhYmxlIGZvciB0aGUgSEJRIGl0IHdpbGwgcmV0dXJuIHBvaW50ZXIgdG8gdGhlIG5leHQgYXZhaWxhYmxlCisgKiBIQlEgZW50cnkgZWxzZSBpdCB3aWxsIHJldHVybiBOVUxMLgorICoqLwogc3RhdGljIHN0cnVjdCBscGZjX2hicV9lbnRyeSAqCiBscGZjX3NsaV9uZXh0X2hicV9zbG90KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgaGJxbm8pCiB7CkBAIC01MzksNiArNzE1LDE1IEBACiAJCQloYnFwLT5oYnFQdXRJZHg7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaGJxYnVmX2ZyZWVfYWxsOiBGcmVlIGFsbCB0aGUgaGJxIGJ1ZmZlcnMuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQgdG8gZnJlZSBhbGwgdGhlCisgKiBoYnEgYnVmZmVycyB3aGlsZSB1bmluaXRpYWxpemluZyB0aGUgU0xJIGludGVyZmFjZS4gSXQgYWxzbworICogZnJlZXMgdGhlIEhCUSBidWZmZXJzIHJldHVybmVkIGJ5IHRoZSBmaXJtd2FyZSBidXQgbm90IHlldAorICogcHJvY2Vzc2VkIGJ5IHRoZSB1cHBlciBsYXllcnMuCisgKiovCiB2b2lkCiBscGZjX3NsaV9oYnFidWZfZnJlZV9hbGwoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtNTg0LDYgKzc2OSwxOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9oYnFfdG9fZmlybXdhcmU6IFBvc3QgdGhlIGhicSBidWZmZXIgdG8gZmlybXdhcmUuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAaGJxbm86IEhCUSBudW1iZXIuCisgKiBAaGJxX2J1ZjogUG9pbnRlciB0byBIQlEgYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGhiYWxvY2sgaGVsZCB0byBwb3N0IGEKKyAqIGhicSBidWZmZXIgdG8gdGhlIGZpcm13YXJlLiBJZiB0aGUgZnVuY3Rpb24gZmluZHMgYW4gZW1wdHkKKyAqIHNsb3QgaW4gdGhlIEhCUSwgaXQgd2lsbCBwb3N0IHRoZSBidWZmZXIuIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybgorICogcG9pbnRlciB0byB0aGUgaGJxIGVudHJ5IGlmIGl0IHN1Y2Nlc3NmdWxseSBwb3N0IHRoZSBidWZmZXIKKyAqIGVsc2UgaXQgd2lsbCByZXR1cm4gTlVMTC4KKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19oYnFfZW50cnkgKgogbHBmY19zbGlfaGJxX3RvX2Zpcm13YXJlKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgaGJxbm8sCiAJCQkgc3RydWN0IGhicV9kbWFidWYgKmhicV9idWYpCkBAIC02MTIsNiArODA5LDcgQEAKIAlyZXR1cm4gaGJxZTsKIH0KIAorLyogSEJRIGZvciBFTFMgYW5kIENUIHRyYWZmaWMuICovCiBzdGF0aWMgc3RydWN0IGxwZmNfaGJxX2luaXQgbHBmY19lbHNfaGJxID0gewogCS5ybiA9IDEsCiAJLmVudHJ5X2NvdW50ID0gMjAwLApAQCAtNjIzLDYgKzgyMSw3IEBACiAJLmFkZF9jb3VudCA9IDUsCiB9OwogCisvKiBIQlEgZm9yIHRoZSBleHRyYSByaW5nIGlmIG5lZWRlZCAqLwogc3RhdGljIHN0cnVjdCBscGZjX2hicV9pbml0IGxwZmNfZXh0cmFfaGJxID0gewogCS5ybiA9IDEsCiAJLmVudHJ5X2NvdW50ID0gMjAwLApAQCAtNjM0LDUxICs4MzMsODEgQEAKIAkuYWRkX2NvdW50ID0gNSwKIH07CiAKKy8qIEFycmF5IG9mIEhCUXMgKi8KIHN0cnVjdCBscGZjX2hicV9pbml0ICpscGZjX2hicV9kZWZzW10gPSB7CiAJJmxwZmNfZWxzX2hicSwKIAkmbHBmY19leHRyYV9oYnEsCiB9OwogCisvKioKKyAqIGxwZmNfc2xpX2hicWJ1Zl9maWxsX2hicXM6IFBvc3QgbW9yZSBoYnEgYnVmZmVycyB0byBIQlEuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAaGJxbm86IEhCUSBudW1iZXIuCisgKiBAY291bnQ6IE51bWJlciBvZiBIQlEgYnVmZmVycyB0byBiZSBwb3N0ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQgdG8gcG9zdCBtb3JlIGhicSBidWZmZXJzIHRvIHRoZQorICogZ2l2ZW4gSEJRLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIEhCUSBidWZmZXJzIHN1Y2Nlc3NmdWxseQorICogcG9zdGVkLgorICoqLwogc3RhdGljIGludAogbHBmY19zbGlfaGJxYnVmX2ZpbGxfaGJxcyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IGhicW5vLCB1aW50MzJfdCBjb3VudCkKIHsKLQl1aW50MzJfdCBpLCBzdGFydCwgZW5kOworCXVpbnQzMl90IGksIHBvc3RlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaGJxX2RtYWJ1ZiAqaGJxX2J1ZmZlcjsKLQorCUxJU1RfSEVBRChoYnFfYnVmX2xpc3QpOwogCWlmICghcGhiYS0+aGJxc1toYnFub10uaGJxX2FsbG9jX2J1ZmZlcikKIAkJcmV0dXJuIDA7CiAKLQlzdGFydCA9IHBoYmEtPmhicXNbaGJxbm9dLmJ1ZmZlcl9jb3VudDsKLQllbmQgPSBjb3VudCArIHN0YXJ0OwotCWlmIChlbmQgPiBscGZjX2hicV9kZWZzW2hicW5vXS0+ZW50cnlfY291bnQpCi0JCWVuZCA9IGxwZmNfaGJxX2RlZnNbaGJxbm9dLT5lbnRyeV9jb3VudDsKLQorCWlmICgocGhiYS0+aGJxc1toYnFub10uYnVmZmVyX2NvdW50ICsgY291bnQpID4KKwkgICAgbHBmY19oYnFfZGVmc1toYnFub10tPmVudHJ5X2NvdW50KQorCQljb3VudCA9IGxwZmNfaGJxX2RlZnNbaGJxbm9dLT5lbnRyeV9jb3VudCAtCisJCQkJCXBoYmEtPmhicXNbaGJxbm9dLmJ1ZmZlcl9jb3VudDsKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKwkvKiBBbGxvY2F0ZSBIQlEgZW50cmllcyAqLworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWhicV9idWZmZXIgPSAocGhiYS0+aGJxc1toYnFub10uaGJxX2FsbG9jX2J1ZmZlcikocGhiYSk7CisJCWlmICghaGJxX2J1ZmZlcikKKwkJCWJyZWFrOworCQlsaXN0X2FkZF90YWlsKCZoYnFfYnVmZmVyLT5kYnVmLmxpc3QsICZoYnFfYnVmX2xpc3QpOworCX0KIAkvKiBDaGVjayB3aGV0aGVyIEhCUSBpcyBzdGlsbCBpbiB1c2UgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwogCWlmICghcGhiYS0+aGJxX2luX3VzZSkKLQkJZ290byBvdXQ7Ci0KLQkvKiBQb3B1bGF0ZSBIQlEgZW50cmllcyAqLwotCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKLQkJaGJxX2J1ZmZlciA9IChwaGJhLT5oYnFzW2hicW5vXS5oYnFfYWxsb2NfYnVmZmVyKShwaGJhKTsKLQkJaWYgKCFoYnFfYnVmZmVyKQotCQkJZ290byBlcnI7Ci0JCWhicV9idWZmZXItPnRhZyA9IChpIHwgKGhicW5vIDw8IDE2KSk7Ci0JCWlmIChscGZjX3NsaV9oYnFfdG9fZmlybXdhcmUocGhiYSwgaGJxbm8sIGhicV9idWZmZXIpKQorCQlnb3RvIGVycjsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmhicV9idWZfbGlzdCkpIHsKKwkJbGlzdF9yZW1vdmVfaGVhZCgmaGJxX2J1Zl9saXN0LCBoYnFfYnVmZmVyLCBzdHJ1Y3QgaGJxX2RtYWJ1ZiwKKwkJCQkgZGJ1Zi5saXN0KTsKKwkJaGJxX2J1ZmZlci0+dGFnID0gKHBoYmEtPmhicXNbaGJxbm9dLmJ1ZmZlcl9jb3VudCB8CisJCQkJICAgICAgKGhicW5vIDw8IDE2KSk7CisJCWlmIChscGZjX3NsaV9oYnFfdG9fZmlybXdhcmUocGhiYSwgaGJxbm8sIGhicV9idWZmZXIpKSB7CiAJCQlwaGJhLT5oYnFzW2hicW5vXS5idWZmZXJfY291bnQrKzsKLQkJZWxzZQorCQkJcG9zdGVkKys7CisJCX0gZWxzZQogCQkJKHBoYmEtPmhicXNbaGJxbm9dLmhicV9mcmVlX2J1ZmZlcikocGhiYSwgaGJxX2J1ZmZlcik7CiAJfQotCi0gb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcG9zdGVkOworZXJyOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmhicV9idWZfbGlzdCkpIHsKKwkJbGlzdF9yZW1vdmVfaGVhZCgmaGJxX2J1Zl9saXN0LCBoYnFfYnVmZmVyLCBzdHJ1Y3QgaGJxX2RtYWJ1ZiwKKwkJCQkgZGJ1Zi5saXN0KTsKKwkJKHBoYmEtPmhicXNbaGJxbm9dLmhicV9mcmVlX2J1ZmZlcikocGhiYSwgaGJxX2J1ZmZlcik7CisJfQogCXJldHVybiAwOwotIGVycjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDE7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaGJxYnVmX2FkZF9oYnFzOiBQb3N0IG1vcmUgSEJRIGJ1ZmZlcnMgdG8gZmlybXdhcmUuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcW5vOiBIQlEgbnVtYmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcG9zdHMgbW9yZSBidWZmZXJzIHRvIHRoZSBIQlEuIFRoaXMgZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBIQlEgZW50cmllcworICogc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZC4KKyAqKi8KIGludAogbHBmY19zbGlfaGJxYnVmX2FkZF9oYnFzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgcW5vKQogewpAQCAtNjg2LDYgKzkxNSwxNSBAQAogCQkJCQkgbHBmY19oYnFfZGVmc1txbm9dLT5hZGRfY291bnQpKTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9oYnFidWZfaW5pdF9oYnFzOiBQb3N0IGluaXRpYWwgYnVmZmVycyB0byB0aGUgSEJRLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHFubzogIEhCUSBxdWV1ZSBudW1iZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBTTEkgaW5pdGlhbGl6YXRpb24gY29kZSBwYXRoIHdpdGgKKyAqIG5vIGxvY2sgaGVsZCB0byBwb3N0IGluaXRpYWwgSEJRIGJ1ZmZlcnMgdG8gZmlybXdhcmUuIFRoZQorICogZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIEhCUSBlbnRyaWVzIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3NsaV9oYnFidWZfaW5pdF9oYnFzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgcW5vKQogewpAQCAtNjkzLDYgKzkzMSwxNiBAQAogCQkJCQkgbHBmY19oYnFfZGVmc1txbm9dLT5pbml0X2NvdW50KSk7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaGJxYnVmX2ZpbmQ6IEZpbmQgdGhlIGhicSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIGEgdGFnLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHRhZzogVGFnIG9mIHRoZSBoYnEgYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzCisgKiBmb3IgdGhlIGhicSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiB0YWcgaW4gdGhlIGhicSBidWZmZXIKKyAqIGxpc3QuIElmIGl0IGZpbmRzIHRoZSBoYnEgYnVmZmVyLCBpdCByZXR1cm5zIHRoZSBoYnFfYnVmZmVyIG90aGVyIHdpc2UKKyAqIGl0IHJldHVybnMgTlVMTC4KKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgaGJxX2RtYWJ1ZiAqCiBscGZjX3NsaV9oYnFidWZfZmluZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQzMl90IHRhZykKIHsKQEAgLTcxNiw2ICs5NjQsMTUgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9mcmVlX2hicTogR2l2ZSBiYWNrIHRoZSBoYnEgYnVmZmVyIHRvIGZpcm13YXJlLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGhicV9idWZmZXI6IFBvaW50ZXIgdG8gSEJRIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2suIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgYmFjaworICogdGhlIGhicSBidWZmZXIgdG8gZmlybXdhcmUuIElmIHRoZSBIQlEgZG9lcyBub3QgaGF2ZSBzcGFjZSB0bworICogcG9zdCB0aGUgYnVmZmVyLCBpdCB3aWxsIGZyZWUgdGhlIGJ1ZmZlci4KKyAqKi8KIHZvaWQKIGxwZmNfc2xpX2ZyZWVfaGJxKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGhicV9kbWFidWYgKmhicV9idWZmZXIpCiB7CkBAIC03MjksNiArOTg2LDE1IEBACiAJfQogfQogCisvKioKKyAqIGxwZmNfc2xpX2Noa19tYnhfY29tbWFuZDogQ2hlY2sgaWYgdGhlIG1haWxib3ggaXMgYSBsZWdpdGltYXRlIG1haWxib3guCisgKiBAbWJ4Q29tbWFuZDogbWFpbGJveCBjb21tYW5kIGNvZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIG1haWxib3ggZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB0byB2ZXJpZnkKKyAqIHRoYXQgdGhlIGNvbXBsZXRlZCBtYWlsYm94IGNvbW1hbmQgaXMgYSBsZWdpdGltYXRlIG1haWxib3ggY29tbWFuZC4gSWYgdGhlCisgKiBjb21wbGV0ZWQgbWFpbGJveCBpcyBub3Qga25vd24gdG8gdGhlIGZ1bmN0aW9uLCBpdCB3aWxsIHJldHVybiBNQlhfU0hVVERPV04KKyAqIGFuZCB0aGUgbWFpbGJveCBldmVudCBoYW5kbGVyIHdpbGwgdGFrZSB0aGUgSEJBIG9mZmxpbmUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3NsaV9jaGtfbWJ4X2NvbW1hbmQodWludDhfdCBtYnhDb21tYW5kKQogewpAQCAtNzg1LDYgKzEwNTEsOCBAQAogCWNhc2UgTUJYX1JFR19WUEk6CiAJY2FzZSBNQlhfVU5SRUdfVlBJOgogCWNhc2UgTUJYX0hFQVJUQkVBVDoKKwljYXNlIE1CWF9QT1JUX0NBUEFCSUxJVElFUzoKKwljYXNlIE1CWF9QT1JUX0lPVl9DT05UUk9MOgogCQlyZXQgPSBtYnhDb21tYW5kOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNzkzLDYgKzEwNjEsMTkgQEAKIAl9CiAJcmV0dXJuIHJldDsKIH0KKworLyoqCisgKiBscGZjX3NsaV93YWtlX21ib3hfd2FpdDogQ29tcGxldGlvbiBoYW5kbGVyIGZvciBtYm94IGlzc3VlZCBmcm9tCisgKiAgICAgICAgICBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcG1ib3hxOiBQb2ludGVyIHRvIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBUaGlzIGlzIGNvbXBsZXRpb24gaGFuZGxlciBmdW5jdGlvbiBmb3IgbWFpbGJveCBjb21tYW5kcyBpc3N1ZWQgZnJvbQorICogbHBmY19zbGlfaXNzdWVfbWJveF93YWl0IGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUKKyAqIG1haWxib3ggZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRoIG5vIGxvY2sgaGVsZC4gVGhpcyBmdW5jdGlvbgorICogd2lsbCB3YWtlIHVwIHRocmVhZCB3YWl0aW5nIG9uIHRoZSB3YWl0IHF1ZXVlIHBvaW50ZWQgYnkgY29udGV4dDEKKyAqIG9mIHRoZSBtYWlsYm94LgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfc2xpX3dha2VfbWJveF93YWl0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWJveHEpCiB7CkBAIC04MTIsNiArMTA5MywxNyBAQAogCXJldHVybjsKIH0KIAorCisvKioKKyAqIGxwZmNfc2xpX2RlZl9tYm94X2NtcGw6IERlZmF1bHQgbWFpbGJveCBjb21wbGV0aW9uIGhhbmRsZXIuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcG1iOiBQb2ludGVyIHRvIG1haWxib3ggb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGRlZmF1bHQgbWFpbGJveCBjb21wbGV0aW9uIGhhbmRsZXIuIEl0CisgKiBmcmVlcyB0aGUgbWVtb3J5IHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbXBsZXRlZCBtYWlsYm94CisgKiBjb21tYW5kLiBJZiB0aGUgY29tcGxldGVkIGNvbW1hbmQgaXMgYSBSRUdfTE9HSU4gbWFpbGJveCBjb21tYW5kLAorICogdGhpcyBmdW5jdGlvbiB3aWxsIGlzc3VlIGEgVVJFR19MT0dJTiB0byByZS1jbGFpbSB0aGUgUlBJLgorICoqLwogdm9pZAogbHBmY19zbGlfZGVmX21ib3hfY21wbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1iKQogewpAQCAtODQ2LDYgKzExMzgsMTkgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19zbGlfaGFuZGxlX21iX2V2ZW50OiBIYW5kbGUgbWFpbGJveCBjb21wbGV0aW9ucyBmcm9tIGZpcm13YXJlLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyBhbGwKKyAqIHRoZSBjb21wbGV0ZWQgbWFpbGJveCBjb21tYW5kcyBhbmQgZ2l2ZXMgaXQgdG8gdXBwZXIgbGF5ZXJzLiBUaGUgaW50ZXJydXB0CisgKiBzZXJ2aWNlIHJvdXRpbmUgcHJvY2Vzc2VzIG1haWxib3ggY29tcGxldGlvbiBpbnRlcnJ1cHQgYW5kIGFkZHMgY29tcGxldGVkCisgKiBtYWlsYm94IGNvbW1hbmRzIHRvIHRoZSBtYm94cV9jbXBsIHF1ZXVlIGFuZCBzaWduYWxzIHRoZSB3b3JrZXIgdGhyZWFkLgorICogV29ya2VyIHRocmVhZCBjYWxsIGxwZmNfc2xpX2hhbmRsZV9tYl9ldmVudCwgd2hpY2ggd2lsbCByZXR1cm4gdGhlCisgKiBjb21wbGV0ZWQgbWFpbGJveCBjb21tYW5kcyBpbiBtYm94cV9jbXBsIHF1ZXVlIHRvIHRoZSB1cHBlciBsYXllcnMuIFRoaXMKKyAqIGZ1bmN0aW9uIHJldHVybnMgdGhlIG1haWxib3ggY29tbWFuZHMgdG8gdGhlIHVwcGVyIGxheWVyIGJ5IGNhbGxpbmcgdGhlCisgKiBjb21wbGV0aW9uIGhhbmRsZXIgZnVuY3Rpb24gb2YgZWFjaCBtYWlsYm94LgorICoqLwogaW50CiBscGZjX3NsaV9oYW5kbGVfbWJfZXZlbnQoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtOTUzLDYgKzEyNTgsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9yZXBsYWNlX2hicWJ1ZmY6IFJlcGxhY2UgdGhlIEhCUSBidWZmZXIgd2l0aCBhIG5ldyBidWZmZXIuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAdGFnOiBUYWcgZm9yIHRoZSBIQlEgYnVmZmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdW5zb2xpY2l0ZWQgZXZlbnQgaGFuZGxlciBjb2RlIHBhdGggdG8gZ2V0IHRoZQorICogSEJRIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggYW4gdW5zb2xpY2l0ZWQgaW9jYi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aAorICogbm8gbG9jayBoZWxkLiBJdCByZXR1cm5zIHRoZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiB0YWcgYW5kIHBvc3RzCisgKiBhbm90aGVyIGJ1ZmZlciB0byB0aGUgZmlybXdhcmUuIE5vdGUgdGhhdCB0aGUgbmV3IGJ1ZmZlciBtdXN0IGJlIGFsbG9jYXRlZAorICogYmVmb3JlIHRha2luZyB0aGUgaGJhbG9jayBhbmQgdGhhdCB0aGUgaGJhIGxvY2sgbXVzdCBiZSBoZWxkIHVudGlsIGl0IGlzCisgKiBmaW5pc2hlZCB3aXRoIHRoZSBoYnEgZW50cnkgc3dhcC4KKyAqKi8KIHN0YXRpYyBzdHJ1Y3QgbHBmY19kbWFidWYgKgogbHBmY19zbGlfcmVwbGFjZV9oYnFidWZmKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgdGFnKQogewpAQCAtOTYyLDIyICsxMjc5LDI4IEBACiAJZG1hX2FkZHJfdCBwaHlzOwkvKiBtYXBwZWQgYWRkcmVzcyAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwloYnFubyA9IHRhZyA+PiAxNjsKKwluZXdfaGJxX2VudHJ5ID0gKHBoYmEtPmhicXNbaGJxbm9dLmhicV9hbGxvY19idWZmZXIpKHBoYmEpOwogCS8qIENoZWNrIHdoZXRoZXIgSEJRIGlzIHN0aWxsIGluIHVzZSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJaWYgKCFwaGJhLT5oYnFfaW5fdXNlKSB7CisJCWlmIChuZXdfaGJxX2VudHJ5KQorCQkJKHBoYmEtPmhicXNbaGJxbm9dLmhicV9mcmVlX2J1ZmZlcikocGhiYSwKKwkJCQkJCQkgICAgbmV3X2hicV9lbnRyeSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJaGJxX2VudHJ5ID0gbHBmY19zbGlfaGJxYnVmX2ZpbmQocGhiYSwgdGFnKTsKIAlpZiAoaGJxX2VudHJ5ID09IE5VTEwpIHsKKwkJaWYgKG5ld19oYnFfZW50cnkpCisJCQkocGhiYS0+aGJxc1toYnFub10uaGJxX2ZyZWVfYnVmZmVyKShwaGJhLAorCQkJCQkJCSAgICBuZXdfaGJxX2VudHJ5KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJbGlzdF9kZWwoJmhicV9lbnRyeS0+ZGJ1Zi5saXN0KTsKIAotCWhicW5vID0gdGFnID4+IDE2OwotCW5ld19oYnFfZW50cnkgPSAocGhiYS0+aGJxc1toYnFub10uaGJxX2FsbG9jX2J1ZmZlcikocGhiYSk7CiAJaWYgKG5ld19oYnFfZW50cnkgPT0gTlVMTCkgewogCQlsaXN0X2FkZF90YWlsKCZoYnFfZW50cnktPmRidWYubGlzdCwgJnBoYmEtPmhicWJ1Zl9pbl9saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwpAQCAtOTk3LDYgKzEzMjAsMTggQEAKIAlyZXR1cm4gJm5ld19oYnFfZW50cnktPmRidWY7CiB9CiAKKy8qKgorICogbHBmY19zbGlfZ2V0X2J1ZmY6IEdldCB0aGUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgYnVmZmVyIHRhZy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQHRhZzogYnVmZmVyIHRhZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZC4gV2hlbiBRVUVfQlVGVEFHX0JJVCBiaXQKKyAqIGlzIHNldCBpbiB0aGUgdGFnIHRoZSBidWZmZXIgaXMgcG9zdGVkIGZvciBhIHBhcnRpY3VsYXIgZXhjaGFuZ2UsCisgKiB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGJ1ZmZlciB3aXRob3V0IHJlcGxhY2luZyB0aGUgYnVmZmVyLgorICogSWYgdGhlIGJ1ZmZlciBpcyBmb3IgdW5zb2xpY2l0ZWQgRUxTIG9yIENUIHRyYWZmaWMsIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMgdGhlIGJ1ZmZlciBhbmQgYWxzbyBwb3N0cyBhbm90aGVyIGJ1ZmZlciB0byB0aGUgZmlybXdhcmUuCisgKiovCiBzdGF0aWMgc3RydWN0IGxwZmNfZG1hYnVmICoKIGxwZmNfc2xpX2dldF9idWZmKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKIAkJCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKQEAgLTEwMDgsNiArMTM0MywyMSBAQAogCQlyZXR1cm4gbHBmY19zbGlfcmVwbGFjZV9oYnFidWZmKHBoYmEsIHRhZyk7CiB9CiAKKworLyoqCisgKiBscGZjX3NsaV9wcm9jZXNzX3Vuc29sX2lvY2I6IFVuc29saWNpdGVkIGlvY2IgaGFuZGxlci4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQHNhdmVxOiBQb2ludGVyIHRvIHRoZSB1bnNvbGljaXRlZCBpb2NiLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkIGJ5IHRoZSByaW5nIGV2ZW50IGhhbmRsZXIKKyAqIHdoZW4gdGhlcmUgaXMgYW4gdW5zb2xpY2l0ZWQgaW9jYiBwb3N0ZWQgdG8gdGhlIHJlc3BvbnNlIHJpbmcgYnkgdGhlCisgKiBmaXJtd2FyZS4gVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBpb2NicworICogYW5kIGNhbGxzIHRoZSBldmVudCBoYW5kbGVyIGZvciB0aGUgcmluZy4gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGJvdGgKKyAqIHFyaW5nIGJ1ZmZlcnMgYW5kIGhicSBidWZmZXJzLgorICogV2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyAxIHRoZSBjYWxsZXIgY2FuIGZyZWUgdGhlIGlvY2Igb2JqZWN0IG90aGVyd2lzZQorICogdXBwZXIgbGF5ZXIgZnVuY3Rpb25zIHdpbGwgZnJlZSB0aGUgaW9jYiBvYmplY3RzLgorICoqLwogc3RhdGljIGludAogbHBmY19zbGlfcHJvY2Vzc191bnNvbF9pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkJICAgIHN0cnVjdCBscGZjX2lvY2JxICpzYXZlcSkKQEAgLTExOTIsNiArMTU0MiwxOCBAQAogCXJldHVybiAxOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2lvY2JxX2xvb2t1cDogRmluZCBjb21tYW5kIGlvY2IgZm9yIHRoZSBnaXZlbiByZXNwb25zZSBpb2NiLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAcHJzcGlvY2I6IFBvaW50ZXIgdG8gcmVzcG9uc2UgaW9jYiBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBsb29rcyB1cCB0aGUgaW9jYl9sb29rdXAgdGFibGUgdG8gZ2V0IHRoZSBjb21tYW5kIGlvY2IKKyAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHJlc3BvbnNlIGlvY2IgdXNpbmcgdGhlIGlvdGFnIG9mIHRoZQorICogcmVzcG9uc2UgaW9jYi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgaGJhbG9jayBoZWxkLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb21tYW5kIGlvY2Igb2JqZWN0IGlmIGl0IGZpbmRzIHRoZSBjb21tYW5kCisgKiBpb2NiIGVsc2UgcmV0dXJucyBOVUxMLgorICoqLwogc3RhdGljIHN0cnVjdCBscGZjX2lvY2JxICoKIGxwZmNfc2xpX2lvY2JxX2xvb2t1cChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCiAJCSAgICAgIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKQEAgLTEyMTcsNiArMTU3OSwyMyBAQAogCXJldHVybiBOVUxMOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3Byb2Nlc3Nfc29sX2lvY2I6IHByb2Nlc3Mgc29saWNpdGVkIGlvY2IgY29tcGxldGlvbi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQHNhdmVxOiBQb2ludGVyIHRvIHRoZSByZXNwb25zZSBpb2NiIHRvIGJlIHByb2Nlc3NlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgcmluZyBldmVudCBoYW5kbGVyIGZvciBub24tZmNwCisgKiByaW5ncyB3aGVuIHRoZXJlIGlzIGEgbmV3IHJlc3BvbnNlIGlvY2IgaW4gdGhlIHJlc3BvbnNlIHJpbmcuCisgKiBUaGUgY2FsbGVyIGlzIG5vdCByZXF1aXJlZCB0byBob2xkIGFueSBsb2Nrcy4gVGhpcyBmdW5jdGlvbgorICogZ2V0cyB0aGUgY29tbWFuZCBpb2NiIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzcG9uc2UgaW9jYiBhbmQKKyAqIGNhbGxzIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIHRoZSBjb21tYW5kIGlvY2IuIElmIHRoZXJlCisgKiBpcyBubyBjb21wbGV0aW9uIGhhbmRsZXIsIHRoZSBmdW5jdGlvbiB3aWxsIGZyZWUgdGhlIHJlc291cmNlcworICogYXNzb2NpYXRlZCB3aXRoIGNvbW1hbmQgaW9jYi4gSWYgdGhlIHJlc3BvbnNlIGlvY2IgaXMgZm9yCisgKiBhbiBhbHJlYWR5IGFib3J0ZWQgY29tbWFuZCBpb2NiLCB0aGUgc3RhdHVzIG9mIHRoZSBjb21wbGV0aW9uCisgKiBpcyBjaGFuZ2VkIHRvIElPU1RBVF9MT0NBTF9SRUpFQ1QvSU9FUlJfU0xJX0FCT1JURUQuCisgKiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIDEuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3NsaV9wcm9jZXNzX3NvbF9pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkJICBzdHJ1Y3QgbHBmY19pb2NicSAqc2F2ZXEpCkBAIC0xMjMzLDYgKzE2MTIsMTcgQEAKIAlpZiAoY21kaW9jYnApIHsKIAkJaWYgKGNtZGlvY2JwLT5pb2NiX2NtcGwpIHsKIAkJCS8qCisJCQkgKiBJZiBhbiBFTFMgY29tbWFuZCBmYWlsZWQgc2VuZCBhbiBldmVudCB0byBtZ210CisJCQkgKiBhcHBsaWNhdGlvbi4KKwkJCSAqLworCQkJaWYgKHNhdmVxLT5pb2NiLnVscFN0YXR1cyAmJgorCQkJICAgICAocHJpbmctPnJpbmdubyA9PSBMUEZDX0VMU19SSU5HKSAmJgorCQkJICAgICAoY21kaW9jYnAtPmlvY2IudWxwQ29tbWFuZCA9PQorCQkJCUNNRF9FTFNfUkVRVUVTVDY0X0NSKSkKKwkJCQlscGZjX3NlbmRfZWxzX2ZhaWx1cmVfZXZlbnQocGhiYSwKKwkJCQkJY21kaW9jYnAsIHNhdmVxKTsKKworCQkJLyoKIAkJCSAqIFBvc3QgYWxsIEVMUyBjb21wbGV0aW9ucyB0byB0aGUgd29ya2VyIHRocmVhZC4KIAkJCSAqIEFsbCBvdGhlciBhcmUgcGFzc2VkIHRvIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrLgogCQkJICovCkBAIC0xMjgyLDEyICsxNjcyLDIwIEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3JzcF9wb2ludGVyc19lcnJvcjogUmVzcG9uc2UgcmluZyBwb2ludGVyIGVycm9yIGhhbmRsZXIuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBpb2NiIHJpbmcgZXZlbnQgaGFuZGxlcnMgd2hlbgorICogcHV0IHBvaW50ZXIgaXMgYWhlYWQgb2YgdGhlIGdldCBwb2ludGVyIGZvciBhIHJpbmcuIFRoaXMgZnVuY3Rpb24gc2lnbmFsCisgKiBhbiBlcnJvciBhdHRlbnRpb24gY29uZGl0aW9uIHRvIHRoZSB3b3JrZXIgdGhyZWFkIGFuZCB0aGUgd29ya2VyCisgKiB0aHJlYWQgd2lsbCB0cmFuc2l0aW9uIHRoZSBIQkEgdG8gb2ZmbGluZSBzdGF0ZS4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NsaV9yc3BfcG9pbnRlcnNfZXJyb3Ioc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcpCiB7Ci0Jc3RydWN0IGxwZmNfcGdwICpwZ3AgPSAocGhiYS0+c2xpX3JldiA9PSAzKSA/Ci0JCSZwaGJhLT5zbGltMnAtPm1ieC51cy5zM19wZ3AucG9ydFtwcmluZy0+cmluZ25vXSA6Ci0JCSZwaGJhLT5zbGltMnAtPm1ieC51cy5zMi5wb3J0W3ByaW5nLT5yaW5nbm9dOworCXN0cnVjdCBscGZjX3BncCAqcGdwID0gJnBoYmEtPnBvcnRfZ3BbcHJpbmctPnJpbmdub107CiAJLyoKIAkgKiBSaW5nIDxyaW5nbm8+IGhhbmRsZXI6IHBvcnRSc3BQdXQgPHBvcnRSc3BQdXQ+IGlzIGJpZ2dlciB0aGVuCiAJICogcnNwIHJpbmcgPHBvcnRSc3BNYXg+CkBAIC0xMzEyLDYgKzE3MTAsNTEgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19wb2xsX2VyYXR0OiBFcnJvciBhdHRlbnRpb24gcG9sbGluZyB0aW1lciB0aW1lb3V0IGhhbmRsZXIuCisgKiBAcHRyOiBQb2ludGVyIHRvIGFkZHJlc3Mgb2YgSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBieSB0aGUgRXJyb3IgQXR0ZW50aW9uIHBvbGxpbmcgdGltZXIgd2hlbiB0aGUKKyAqIHRpbWVyIHRpbWVzIG91dC4gSXQgd2lsbCBjaGVjayB0aGUgU0xJIEVycm9yIEF0dGVudGlvbiByZWdpc3RlciBmb3IKKyAqIHBvc3NpYmxlIGF0dGVudGlvbiBldmVudHMuIElmIHNvLCBpdCB3aWxsIHBvc3QgYW4gRXJyb3IgQXR0ZW50aW9uIGV2ZW50CisgKiBhbmQgd2FrZSB1cCB3b3JrZXIgdGhyZWFkIHRvIHByb2Nlc3MgaXQuIE90aGVyd2lzZSwgaXQgd2lsbCBzZXQgdXAgdGhlCisgKiBFcnJvciBBdHRlbnRpb24gcG9sbGluZyB0aW1lciBmb3IgdGhlIG5leHQgcG9sbC4KKyAqKi8KK3ZvaWQgbHBmY19wb2xsX2VyYXR0KHVuc2lnbmVkIGxvbmcgcHRyKQoreworCXN0cnVjdCBscGZjX2hiYSAqcGhiYTsKKwl1aW50MzJfdCBlcmF0dCA9IDA7CisKKwlwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKXB0cjsKKworCS8qIENoZWNrIGNoaXAgSEEgcmVnaXN0ZXIgZm9yIGVycm9yIGV2ZW50ICovCisJZXJhdHQgPSBscGZjX3NsaV9jaGVja19lcmF0dChwaGJhKTsKKworCWlmIChlcmF0dCkKKwkJLyogVGVsbCB0aGUgd29ya2VyIHRocmVhZCB0aGVyZSBpcyB3b3JrIHRvIGRvICovCisJCWxwZmNfd29ya2VyX3dha2VfdXAocGhiYSk7CisJZWxzZQorCQkvKiBSZXN0YXJ0IHRoZSB0aW1lciBmb3IgbmV4dCBlcmF0dCBwb2xsICovCisJCW1vZF90aW1lcigmcGhiYS0+ZXJhdHRfcG9sbCwgamlmZmllcyArCisJCQkJCUhaICogTFBGQ19FUkFUVF9QT0xMX0lOVEVSVkFMKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogbHBmY19zbGlfcG9sbF9mY3BfcmluZzogSGFuZGxlIEZDUCByaW5nIGNvbXBsZXRpb24gaW4gcG9sbGluZyBtb2RlLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gbHBmY19xdWV1ZWNvbW1hbmQsIGxwZmNfcG9sbF90aW1lb3V0LAorICogbHBmY19hYm9ydF9oYW5kbGVyIGFuZCBscGZjX3NsYXZlX2NvbmZpZ3VyZSB3aGVuIEZDUF9SSU5HX1BPTExJTkcKKyAqIGlzIGVuYWJsZWQuCisgKgorICogVGhlIGNhbGxlciBkb2VzIG5vdCBob2xkIGFueSBsb2NrLgorICogVGhlIGZ1bmN0aW9uIHByb2Nlc3NlcyBlYWNoIHJlc3BvbnNlIGlvY2IgaW4gdGhlIHJlc3BvbnNlIHJpbmcgdW50aWwgaXQKKyAqIGZpbmRzIGFuIGlvY2Igd2l0aCBMRSBiaXQgc2V0IGFuZCBjaGFpbnMgYWxsIHRoZSBpb2NicyB1cHRvIHRoZSBpb2NiIHdpdGgKKyAqIExFIGJpdCBzZXQuIFRoZSBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBvZiB0aGUgY29tbWFuZCBpb2NiCisgKiBpZiB0aGUgcmVzcG9uc2UgaW9jYiBpbmRpY2F0ZXMgYSBjb21wbGV0aW9uIGZvciBhIGNvbW1hbmQgaW9jYiBvciBpdCBpcworICogYW4gYWJvcnQgY29tcGxldGlvbi4KKyAqKi8KIHZvaWQgbHBmY19zbGlfcG9sbF9mY3BfcmluZyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CiAJc3RydWN0IGxwZmNfc2xpICAgICAgKnBzbGkgID0gJnBoYmEtPnNsaTsKQEAgLTEzMjAsNyArMTc2Myw3IEBACiAJSU9DQl90ICplbnRyeSA9IE5VTEw7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxID0gTlVMTDsKIAlzdHJ1Y3QgbHBmY19pb2NicSByc3Bpb2NicTsKLQlzdHJ1Y3QgbHBmY19wZ3AgKnBncDsKKwlzdHJ1Y3QgbHBmY19wZ3AgKnBncCA9ICZwaGJhLT5wb3J0X2dwW3ByaW5nLT5yaW5nbm9dOwogCXVpbnQzMl90IHN0YXR1czsKIAl1aW50MzJfdCBwb3J0UnNwUHV0LCBwb3J0UnNwTWF4OwogCWludCB0eXBlOwpAQCAtMTMzMCwxMSArMTc3Myw2IEBACiAKIAlwcmluZy0+c3RhdHMuaW9jYl9ldmVudCsrOwogCi0JcGdwID0gKHBoYmEtPnNsaV9yZXYgPT0gMykgPwotCQkmcGhiYS0+c2xpbTJwLT5tYngudXMuczNfcGdwLnBvcnRbcHJpbmctPnJpbmdub10gOgotCQkmcGhiYS0+c2xpbTJwLT5tYngudXMuczIucG9ydFtwcmluZy0+cmluZ25vXTsKLQotCiAJLyoKIAkgKiBUaGUgbmV4dCBhdmFpbGFibGUgcmVzcG9uc2UgZW50cnkgc2hvdWxkIG5ldmVyIGV4Y2VlZCB0aGUgbWF4aW11bQogCSAqIGVudHJpZXMuICBJZiBpdCBkb2VzLCB0cmVhdCBpdCBhcyBhbiBhZGFwdGVyIGhhcmR3YXJlIGVycm9yLgpAQCAtMTM3Miw4ICsxODEwLDggQEAKIAkJCQkJaXJzcC0+dW4udWxwV29yZFszXSwKIAkJCQkJaXJzcC0+dW4udWxwV29yZFs0XSwKIAkJCQkJaXJzcC0+dW4udWxwV29yZFs1XSwKLQkJCQkJKigoKHVpbnQzMl90ICopIGlyc3ApICsgNiksCi0JCQkJCSooKCh1aW50MzJfdCAqKSBpcnNwKSArIDcpKTsKKwkJCQkJKih1aW50MzJfdCAqKSZpcnNwLT51bjEsCisJCQkJCSooKHVpbnQzMl90ICopJmlyc3AtPnVuMSArIDEpKTsKIAkJfQogCiAJCXN3aXRjaCAodHlwZSkgewpAQCAtMTQ2NSwxNyArMTkwMywyOCBAQAogCXJldHVybjsKIH0KIAotLyoKKy8qKgorICogbHBmY19zbGlfaGFuZGxlX2Zhc3RfcmluZ19ldmVudDogSGFuZGxlIHJpbmcgZXZlbnRzIG9uIEZDUCByaW5nLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAbWFzazogSG9zdCBhdHRlbnRpb24gcmVnaXN0ZXIgbWFzayBmb3IgdGhpcyByaW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBjb250ZXh0IHdoZW4gdGhlcmUgaXMgYSByaW5nCisgKiBldmVudCBmb3IgdGhlIGZjcCByaW5nLiBUaGUgY2FsbGVyIGRvZXMgbm90IGhvbGQgYW55IGxvY2suCisgKiBUaGUgZnVuY3Rpb24gcHJvY2Vzc2VzIGVhY2ggcmVzcG9uc2UgaW9jYiBpbiB0aGUgcmVzcG9uc2UgcmluZyB1bnRpbCBpdAorICogZmluZHMgYW4gaW9jYiB3aXRoIExFIGJpdCBzZXQgYW5kIGNoYWlucyBhbGwgdGhlIGlvY2JzIHVwdG8gdGhlIGlvY2Igd2l0aAorICogTEUgYml0IHNldC4gVGhlIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgY29tcGxldGlvbiBoYW5kbGVyIG9mIHRoZSBjb21tYW5kIGlvY2IKKyAqIGlmIHRoZSByZXNwb25zZSBpb2NiIGluZGljYXRlcyBhIGNvbXBsZXRpb24gZm9yIGEgY29tbWFuZCBpb2NiIG9yIGl0IGlzCisgKiBhbiBhYm9ydCBjb21wbGV0aW9uLiBUaGUgZnVuY3Rpb24gd2lsbCBjYWxsIGxwZmNfc2xpX3Byb2Nlc3NfdW5zb2xfaW9jYgorICogZnVuY3Rpb24gaWYgdGhpcyBpcyBhbiB1bnNvbGljaXRlZCBpb2NiLgogICogVGhpcyByb3V0aW5lIHByZXN1bWVzIExQRkNfRkNQX1JJTkcgaGFuZGxpbmcgYW5kIGRvZXNuJ3QgYm90aGVyCi0gKiB0byBjaGVjayBpdCBleHBsaWNpdGx5LgotICovCisgKiB0byBjaGVjayBpdCBleHBsaWNpdGx5LiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIDEuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3NsaV9oYW5kbGVfZmFzdF9yaW5nX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKIAkJCQlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsIHVpbnQzMl90IG1hc2spCiB7Ci0Jc3RydWN0IGxwZmNfcGdwICpwZ3AgPSAocGhiYS0+c2xpX3JldiA9PSAzKSA/Ci0JCSZwaGJhLT5zbGltMnAtPm1ieC51cy5zM19wZ3AucG9ydFtwcmluZy0+cmluZ25vXSA6Ci0JCSZwaGJhLT5zbGltMnAtPm1ieC51cy5zMi5wb3J0W3ByaW5nLT5yaW5nbm9dOworCXN0cnVjdCBscGZjX3BncCAqcGdwID0gJnBoYmEtPnBvcnRfZ3BbcHJpbmctPnJpbmdub107CiAJSU9DQl90ICppcnNwID0gTlVMTDsKIAlJT0NCX3QgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnEgPSBOVUxMOwpAQCAtMTU0OCw4ICsxOTk3LDggQEAKIAkJCQkJaXJzcC0+dW4udWxwV29yZFszXSwKIAkJCQkJaXJzcC0+dW4udWxwV29yZFs0XSwKIAkJCQkJaXJzcC0+dW4udWxwV29yZFs1XSwKLQkJCQkJKigoKHVpbnQzMl90ICopIGlyc3ApICsgNiksCi0JCQkJCSooKCh1aW50MzJfdCAqKSBpcnNwKSArIDcpKTsKKwkJCQkJKih1aW50MzJfdCAqKSZpcnNwLT51bjEsCisJCQkJCSooKHVpbnQzMl90ICopJmlyc3AtPnVuMSArIDEpKTsKIAkJfQogCiAJCXN3aXRjaCAodHlwZSkgewpAQCAtMTY0NiwxMyArMjA5NSwyOCBAQAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9oYW5kbGVfc2xvd19yaW5nX2V2ZW50OiBIYW5kbGUgcmluZyBldmVudHMgZm9yIG5vbi1GQ1AgcmluZ3MuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBtYXNrOiBIb3N0IGF0dGVudGlvbiByZWdpc3RlciBtYXNrIGZvciB0aGlzIHJpbmcuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgd29ya2VyIHRocmVhZCB3aGVuIHRoZXJlIGlzIGEgcmluZworICogZXZlbnQgZm9yIG5vbi1mY3AgcmluZ3MuIFRoZSBjYWxsZXIgZG9lcyBub3QgaG9sZCBhbnkgbG9jayAuCisgKiBUaGUgZnVuY3Rpb24gcHJvY2Vzc2VzIGVhY2ggcmVzcG9uc2UgaW9jYiBpbiB0aGUgcmVzcG9uc2UgcmluZyB1bnRpbCBpdAorICogZmluZHMgYW4gaW9jYiB3aXRoIExFIGJpdCBzZXQgYW5kIGNoYWlucyBhbGwgdGhlIGlvY2JzIHVwdG8gdGhlIGlvY2Igd2l0aAorICogTEUgYml0IHNldC4gVGhlIGZ1bmN0aW9uIHdpbGwgY2FsbCBscGZjX3NsaV9wcm9jZXNzX3NvbF9pb2NiIGZ1bmN0aW9uIGlmIHRoZQorICogcmVzcG9uc2UgaW9jYiBpbmRpY2F0ZXMgYSBjb21wbGV0aW9uIG9mIGEgY29tbWFuZCBpb2NiLiBUaGUgZnVuY3Rpb24KKyAqIHdpbGwgY2FsbCBscGZjX3NsaV9wcm9jZXNzX3Vuc29sX2lvY2IgZnVuY3Rpb24gaWYgdGhpcyBpcyBhbiB1bnNvbGljaXRlZAorICogaW9jYi4gVGhlIGZ1bmN0aW9uIGZyZWVzIHRoZSByZXNvdXJjZXMgb3IgY2FsbHMgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBpZgorICogdGhpcyBpb2NiIGlzIGFuIGFib3J0IGNvbXBsZXRpb24uIFRoZSBmdW5jdGlvbiByZXR1cm5zIDAgd2hlbiB0aGUgYWxsb2NhdGVkCisgKiBpb2NicyBhcmUgbm90IGZyZWVkLCBvdGhlcndpc2UgcmV0dXJucyAxLgorICoqLwogaW50CiBscGZjX3NsaV9oYW5kbGVfc2xvd19yaW5nX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKIAkJCQlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsIHVpbnQzMl90IG1hc2spCiB7Ci0Jc3RydWN0IGxwZmNfcGdwICpwZ3AgPSAocGhiYS0+c2xpX3JldiA9PSAzKSA/Ci0JCSZwaGJhLT5zbGltMnAtPm1ieC51cy5zM19wZ3AucG9ydFtwcmluZy0+cmluZ25vXSA6Ci0JCSZwaGJhLT5zbGltMnAtPm1ieC51cy5zMi5wb3J0W3ByaW5nLT5yaW5nbm9dOworCXN0cnVjdCBscGZjX3BncCAqcGdwOwogCUlPQ0JfdCAqZW50cnk7CiAJSU9DQl90ICppcnNwID0gTlVMTDsKIAlzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYnAgPSBOVUxMOwpAQCAtMTY2Niw2ICsyMTMwLDcgQEAKIAlpbnQgcmMgPSAxOwogCXVuc2lnbmVkIGxvbmcgaWZsYWc7CiAKKwlwZ3AgPSAmcGhiYS0+cG9ydF9ncFtwcmluZy0+cmluZ25vXTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgaWZsYWcpOwogCXByaW5nLT5zdGF0cy5pb2NiX2V2ZW50Kys7CiAKQEAgLTE5MDQsNiArMjM2OSwxNiBAQAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9hYm9ydF9pb2NiX3Jpbmc6IEFib3J0IGFsbCBpb2NicyBpbiB0aGUgcmluZy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWJvcnRzIGFsbCBpb2NicyBpbiB0aGUgZ2l2ZW4gcmluZyBhbmQgZnJlZXMgYWxsIHRoZSBpb2NiCisgKiBvYmplY3RzIGluIHR4cS4gVGhpcyBmdW5jdGlvbiBpc3N1ZXMgYW4gYWJvcnQgaW9jYiBmb3IgYWxsIHRoZSBpb2NiIGNvbW1hbmRzCisgKiBpbiB0eGNtcGxxLiBUaGUgaW9jYnMgaW4gdGhlIHR4Y21wbHEgaXMgbm90IGd1YXJhbnRlZWQgdG8gY29tcGxldGUgYmVmb3JlCisgKiB0aGUgcmV0dXJuIG9mIHRoaXMgZnVuY3Rpb24uIFRoZSBjYWxsZXIgaXMgbm90IHJlcXVpcmVkIHRvIGhvbGQgYW55IGxvY2tzLgorICoqLwogdm9pZAogbHBmY19zbGlfYWJvcnRfaW9jYl9yaW5nKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nKQogewpAQCAtMTk0Myw2ICsyNDE4LDgzIEBACiAJfQogfQogCisvKioKKyAqIGxwZmNfc2xpX2ZsdXNoX2ZjcF9yaW5nczogZmx1c2ggYWxsIGlvY2JzIGluIHRoZSBmY3AgcmluZy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZsdXNoZXMgYWxsIGlvY2JzIGluIHRoZSBmY3AgcmluZyBhbmQgZnJlZXMgYWxsIHRoZSBpb2NiCisgKiBvYmplY3RzIGluIHR4cSBhbmQgdHhjbXBscS4gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBpc3N1ZSBhYm9ydCBpb2NicworICogZm9yIGFsbCB0aGUgaW9jYiBjb21tYW5kcyBpbiB0eGNtcGxxLCB0aGV5IHdpbGwganVzdCBiZSByZXR1cm5lZCB3aXRoCisgKiBJT0VSUl9TTElfRE9XTi4gVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggRUVIIHdoZW4gZGV2aWNlJ3MgUENJCisgKiBzbG90IGhhcyBiZWVuIHBlcm1hbmVudGx5IGRpc2FibGVkLgorICoqLwordm9pZAorbHBmY19zbGlfZmx1c2hfZmNwX3JpbmdzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlMSVNUX0hFQUQodHhxKTsKKwlMSVNUX0hFQUQodHhjbXBscSk7CisJc3RydWN0IGxwZmNfaW9jYnEgKmlvY2I7CisJSU9DQl90ICpjbWQgPSBOVUxMOworCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CisJc3RydWN0IGxwZmNfc2xpX3JpbmcgICpwcmluZzsKKworCS8qIEN1cnJlbnRseSwgb25seSBvbmUgZmNwIHJpbmcgKi8KKwlwcmluZyA9ICZwc2xpLT5yaW5nW3BzbGktPmZjcF9yaW5nXTsKKworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCS8qIFJldHJpZXZlIGV2ZXJ5dGhpbmcgb24gdHhxICovCisJbGlzdF9zcGxpY2VfaW5pdCgmcHJpbmctPnR4cSwgJnR4cSk7CisJcHJpbmctPnR4cV9jbnQgPSAwOworCisJLyogUmV0cmlldmUgZXZlcnl0aGluZyBvbiB0aGUgdHhjbXBscSAqLworCWxpc3Rfc3BsaWNlX2luaXQoJnByaW5nLT50eGNtcGxxLCAmdHhjbXBscSk7CisJcHJpbmctPnR4Y21wbHFfY250ID0gMDsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCisJLyogRmx1c2ggdGhlIHR4cSAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmdHhxKSkgeworCQlpb2NiID0gbGlzdF9nZXRfZmlyc3QoJnR4cSwgc3RydWN0IGxwZmNfaW9jYnEsIGxpc3QpOworCQljbWQgPSAmaW9jYi0+aW9jYjsKKwkJbGlzdF9kZWxfaW5pdCgmaW9jYi0+bGlzdCk7CisKKwkJaWYgKCFpb2NiLT5pb2NiX2NtcGwpCisJCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGlvY2IpOworCQllbHNlIHsKKwkJCWNtZC0+dWxwU3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKKwkJCWNtZC0+dW4udWxwV29yZFs0XSA9IElPRVJSX1NMSV9ET1dOOworCQkJKGlvY2ItPmlvY2JfY21wbCkgKHBoYmEsIGlvY2IsIGlvY2IpOworCQl9CisJfQorCisJLyogRmx1c2ggdGhlIHR4Y21wcSAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmdHhjbXBscSkpIHsKKwkJaW9jYiA9IGxpc3RfZ2V0X2ZpcnN0KCZ0eGNtcGxxLCBzdHJ1Y3QgbHBmY19pb2NicSwgbGlzdCk7CisJCWNtZCA9ICZpb2NiLT5pb2NiOworCQlsaXN0X2RlbF9pbml0KCZpb2NiLT5saXN0KTsKKworCQlpZiAoIWlvY2ItPmlvY2JfY21wbCkKKwkJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgaW9jYik7CisJCWVsc2UgeworCQkJY21kLT51bHBTdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOworCQkJY21kLT51bi51bHBXb3JkWzRdID0gSU9FUlJfU0xJX0RPV047CisJCQkoaW9jYi0+aW9jYl9jbXBsKSAocGhiYSwgaW9jYiwgaW9jYik7CisJCX0KKwl9Cit9CisKKy8qKgorICogbHBmY19zbGlfYnJkcmVhZHk6IENoZWNrIGZvciBob3N0IHN0YXR1cyBiaXRzLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQG1hc2s6IEJpdCBtYXNrIHRvIGJlIGNoZWNrZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgaG9zdCBzdGF0dXMgcmVnaXN0ZXIgYW5kIGNvbXBhcmVzCisgKiB3aXRoIHRoZSBwcm92aWRlZCBiaXQgbWFzayB0byBjaGVjayBpZiBIQkEgY29tcGxldGVkCisgKiB0aGUgcmVzdGFydC4gVGhpcyBmdW5jdGlvbiB3aWxsIHdhaXQgaW4gYSBsb29wIGZvciB0aGUKKyAqIEhCQSB0byBjb21wbGV0ZSByZXN0YXJ0LiBJZiB0aGUgSEJBIGRvZXMgbm90IHJlc3RhcnQgd2l0aGluCisgKiAxNSBpdGVyYXRpb25zLCB0aGUgZnVuY3Rpb24gd2lsbCByZXNldCB0aGUgSEJBIGFnYWluLiBUaGUKKyAqIGZ1bmN0aW9uIHJldHVybnMgMSB3aGVuIEhCQSBmYWlsIHRvIHJlc3RhcnQgb3RoZXJ3aXNlIHJldHVybnMKKyAqIHplcm8uCisgKiovCiBpbnQKIGxwZmNfc2xpX2JyZHJlYWR5KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDMyX3QgbWFzaykKIHsKQEAgLTE5OTAsNiArMjU0MiwxMyBAQAogCiAjZGVmaW5lIEJBUlJJRVJfVEVTVF9QQVRURVJOICgweGRlYWRiZWVmKQogCisvKioKKyAqIGxwZmNfcmVzZXRfYmFycmllcjogTWFrZSBIQkEgcmVhZHkgZm9yIEhCQSByZXNldC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgcmVzZXR0aW5nIGFuIEhCQS4gVGhpcworICogZnVuY3Rpb24gcmVxdWVzdHMgSEJBIHRvIHF1aWVzY2UgRE1BcyBiZWZvcmUgYSByZXNldC4KKyAqKi8KIHZvaWQgbHBmY19yZXNldF9iYXJyaWVyKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKIAl1aW50MzJfdCBfX2lvbWVtICpyZXNwX2J1ZjsKQEAgLTIwNjMsNiArMjYyMiwxNyBAQAogCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCiB9CiAKKy8qKgorICogbHBmY19zbGlfYnJka2lsbDogSXNzdWUgYSBraWxsX2JvYXJkIG1haWxib3ggY29tbWFuZC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyBhIGtpbGxfYm9hcmQgbWFpbGJveCBjb21tYW5kIGFuZCB3YWl0cyBmb3IKKyAqIHRoZSBlcnJvciBhdHRlbnRpb24gaW50ZXJydXB0LiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3Igc3RvcHBpbmcKKyAqIHRoZSBmaXJtd2FyZSBwcm9jZXNzaW5nLiBUaGUgY2FsbGVyIGlzIG5vdCByZXF1aXJlZCB0byBob2xkIGFueQorICogbG9ja3MuIFRoaXMgZnVuY3Rpb24gY2FsbHMgbHBmY19oYmFfZG93bl9wb3N0IGZ1bmN0aW9uIHRvIGZyZWUKKyAqIGFueSBwZW5kaW5nIGNvbW1hbmRzIGFmdGVyIHRoZSBraWxsLiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMSB3aGVuIGl0CisgKiBmYWlscyB0byBraWxsIHRoZSBib2FyZCBlbHNlIHdpbGwgcmV0dXJuIDAuCisgKiovCiBpbnQKIGxwZmNfc2xpX2JyZGtpbGwoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMjEzOSw2ICsyNzA5LDE3IEBACiAJcmV0dXJuIGhhX2NvcHkgJiBIQV9FUkFUVCA/IDAgOiAxOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2JyZHJlc2V0OiBSZXNldCB0aGUgSEJBLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSBIQkEgYnkgd3JpdGluZyBIQ19JTklURkYgdG8gdGhlIGNvbnRyb2wKKyAqIHJlZ2lzdGVyLiBBZnRlciB0aGUgSEJBIHJlc2V0cywgdGhpcyBmdW5jdGlvbiByZXNldHMgYWxsIHRoZSBpb2NiIHJpbmcKKyAqIGluZGljZXMuIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgUENJIGxheWVyIHBhcml0eSBjaGVja2luZyBkdXJpbmcKKyAqIHRoZSByZXNldC4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGFsd2F5cy4KKyAqIFRoZSBjYWxsZXIgaXMgbm90IHJlcXVpcmVkIHRvIGhvbGQgYW55IGxvY2tzLgorICoqLwogaW50CiBscGZjX3NsaV9icmRyZXNldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0yMTkxLDYgKzI3NzIsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9icmRyZXN0YXJ0OiBSZXN0YXJ0IHRoZSBIQkEuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gdGhlIFNMSSBpbml0aWFsaXphdGlvbiBjb2RlIHBhdGggdG8KKyAqIHJlc3RhcnQgdGhlIEhCQS4gVGhlIGNhbGxlciBpcyBub3QgcmVxdWlyZWQgdG8gaG9sZCBhbnkgbG9jay4KKyAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIE1CWF9SRVNUQVJUIG1haWxib3ggY29tbWFuZCB0byB0aGUgU0xJTSBhbmQKKyAqIHJlc2V0cyB0aGUgSEJBLiBBdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwgaXQgY2FsbHMgbHBmY19oYmFfZG93bl9wb3N0CisgKiBmdW5jdGlvbiB0byBmcmVlIGFueSBwZW5kaW5nIGNvbW1hbmRzLiBUaGUgZnVuY3Rpb24gZW5hYmxlcworICogUE9TVCBvbmx5IGR1cmluZyB0aGUgZmlyc3QgaW5pdGlhbGl6YXRpb24uIFRoZSBmdW5jdGlvbiByZXR1cm5zIHplcm8uCisgKiBUaGUgZnVuY3Rpb24gZG9lcyBub3QgZ3VhcmFudGVlIGNvbXBsZXRpb24gb2YgTUJYX1JFU1RBUlQgbWFpbGJveAorICogY29tbWFuZCBiZWZvcmUgdGhlIHJldHVybiBvZiB0aGlzIGZ1bmN0aW9uLgorICoqLwogaW50CiBscGZjX3NsaV9icmRyZXN0YXJ0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTIyNTEsNiArMjg0NSwxNiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2NoaXBzZXRfaW5pdDogV2FpdCBmb3IgdGhlIHJlc3RhcnQgb2YgdGhlIEhCQSBhZnRlciBhIHJlc3RhcnQuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBIQkEgcmVzdGFydCB0byB3YWl0IGZvciBzdWNjZXNzZnVsCisgKiByZXN0YXJ0IG9mIHRoZSBIQkEuIFN1Y2Nlc3NmdWwgcmVzdGFydCBvZiB0aGUgSEJBIGlzIGluZGljYXRlZCBieQorICogSFNfRkZSRFkgYW5kIEhTX01CUkRZIGJpdHMuIElmIHRoZSBIQkEgZmFpbHMgdG8gcmVzdGFydCBldmVuIGFmdGVyIDE1CisgKiBpdGVyYXRpb24sIHRoZSBmdW5jdGlvbiB3aWxsIHJlc3RhcnQgdGhlIEhCQSBhZ2Fpbi4gVGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqIHplcm8gaWYgSEJBIHN1Y2Nlc3NmdWxseSByZXN0YXJ0ZWQgZWxzZSByZXR1cm5zIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3NsaV9jaGlwc2V0X2luaXQoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMjMzNiwxMiArMjk0MCwyNSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2hicV9jb3VudDogR2V0IHRoZSBudW1iZXIgb2YgSEJRcyB0byBiZSBjb25maWd1cmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIEhCUXMgcmVxdWlyZWQgdG8gYmUKKyAqIGNvbmZpZ3VyZWQuCisgKiovCiBpbnQKIGxwZmNfc2xpX2hicV9jb3VudCh2b2lkKQogewogCXJldHVybiBBUlJBWV9TSVpFKGxwZmNfaGJxX2RlZnMpOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2hicV9lbnRyeV9jb3VudDogQ2FsY3VsYXRlIHRvdGFsIG51bWJlciBvZiBoYnEgZW50cmllcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgdGhlIG51bWJlciBvZiBoYnEgZW50cmllcyBpbiBldmVyeSBIQlEgdG8gZ2V0CisgKiB0aGUgdG90YWwgbnVtYmVyIG9mIGhicSBlbnRyaWVzIHJlcXVpcmVkIGZvciB0aGUgSEJBIGFuZCByZXR1cm5zCisgKiB0aGUgdG90YWwgY291bnQuCisgKiovCiBzdGF0aWMgaW50CiBscGZjX3NsaV9oYnFfZW50cnlfY291bnQodm9pZCkKIHsKQEAgLTIzNTQsMTIgKzI5NzEsMjcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaGJxX3NpemU6IENhbGN1bGF0ZSBtZW1vcnkgcmVxdWlyZWQgZm9yIGFsbCBoYnEgZW50cmllcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYW1vdW50IG9mIG1lbW9yeSByZXF1aXJlZCBmb3IgYWxsIGhicSBlbnRyaWVzCisgKiB0byBiZSBjb25maWd1cmVkIGFuZCByZXR1cm5zIHRoZSB0b3RhbCBtZW1vcnkgcmVxdWlyZWQuCisgKiovCiBpbnQKIGxwZmNfc2xpX2hicV9zaXplKHZvaWQpCiB7CiAJcmV0dXJuIGxwZmNfc2xpX2hicV9lbnRyeV9jb3VudCgpICogc2l6ZW9mKHN0cnVjdCBscGZjX2hicV9lbnRyeSk7CiB9CiAKKy8qKgorICogbHBmY19zbGlfaGJxX3NldHVwOiBjb25maWd1cmUgYW5kIGluaXRpYWxpemUgSEJRcy4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdGhlIFNMSSBpbml0aWFsaXphdGlvbiB0byBjb25maWd1cmUKKyAqIGFsbCB0aGUgSEJRcyBhbmQgcG9zdCBidWZmZXJzIHRvIHRoZSBIQlEuIFRoZSBjYWxsZXIgaXMgbm90CisgKiByZXF1aXJlZCB0byBob2xkIGFueSBsb2Nrcy4gVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB6ZXJvIGlmIHN1Y2Nlc3NmdWwKKyAqIGVsc2UgaXQgd2lsbCByZXR1cm4gbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2xpX2hicV9zZXR1cChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0yNDE1LDE1ICszMDQ3LDI2IEBACiAJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAKIAkvKiBJbml0aWFsbHkgcG9wdWxhdGUgb3IgcmVwbGVuaXNoIHRoZSBIQlFzICovCi0JZm9yIChoYnFubyA9IDA7IGhicW5vIDwgaGJxX2NvdW50OyArK2hicW5vKSB7Ci0JCWlmIChscGZjX3NsaV9oYnFidWZfaW5pdF9oYnFzKHBoYmEsIGhicW5vKSkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KKwlmb3IgKGhicW5vID0gMDsgaGJxbm8gPCBoYnFfY291bnQ7ICsraGJxbm8pCisJCWxwZmNfc2xpX2hicWJ1Zl9pbml0X2hicXMocGhiYSwgaGJxbm8pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1scGZjX2RvX2NvbmZpZ19wb3J0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHNsaV9tb2RlKQorLyoqCisgKiBscGZjX3NsaV9jb25maWdfcG9ydDogSXNzdWUgY29uZmlnIHBvcnQgbWFpbGJveCBjb21tYW5kLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHNsaV9tb2RlOiBzbGkgbW9kZSAtIDIvMworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBzbGkgaW50aWFsaXphdGlvbiBjb2RlIHBhdGgKKyAqIHRvIGlzc3VlIGNvbmZpZ19wb3J0IG1haWxib3ggY29tbWFuZC4gVGhpcyBmdW5jdGlvbiByZXN0YXJ0cyB0aGUKKyAqIEhCQSBmaXJtd2FyZSBhbmQgaXNzdWVzIGEgY29uZmlnX3BvcnQgbWFpbGJveCBjb21tYW5kIHRvIGNvbmZpZ3VyZQorICogdGhlIFNMSSBpbnRlcmZhY2UgaW4gdGhlIHNsaSBtb2RlIHNwZWNpZmllZCBieSBzbGlfbW9kZQorICogdmFyaWFibGUuIFRoZSBjYWxsZXIgaXMgbm90IHJlcXVpcmVkIHRvIGhvbGQgYW55IGxvY2tzLgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBlbHNlIHJldHVybnMgbmVnYXRpdmUgZXJyb3IKKyAqIGNvZGUuCisgKiovCitpbnQKK2xwZmNfc2xpX2NvbmZpZ19wb3J0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHNsaV9tb2RlKQogewogCUxQRkNfTUJPWFFfdCAqcG1iOwogCXVpbnQzMl90IHJlc2V0Y291bnQgPSAwLCByYyA9IDAsIGRvbmUgPSAwOwpAQCAtMjQ2MCwxMyArMzEwMywxNSBAQAogCQlpZiAocmMgPT0gLUVSRVNUQVJUKSB7CiAJCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19MSU5LX1VOS05PV047CiAJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChyYykgeworCQl9IGVsc2UgaWYgKHJjKQogCQkJYnJlYWs7Ci0JCX0KLQogCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19JTklUX01CWF9DTURTOwogCQlscGZjX2NvbmZpZ19wb3J0KHBoYmEsIHBtYik7CiAJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9QT0xMKTsKKwkJcGhiYS0+c2xpM19vcHRpb25zICY9IH4oTFBGQ19TTEkzX05QSVZfRU5BQkxFRCB8CisJCQkJCUxQRkNfU0xJM19IQlFfRU5BQkxFRCB8CisJCQkJCUxQRkNfU0xJM19DUlBfRU5BQkxFRCB8CisJCQkJCUxQRkNfU0xJM19JTkJfRU5BQkxFRCk7CiAJCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKIAkJCQkiMDQ0MiBBZGFwdGVyIGZhaWxlZCB0byBpbml0LCBtYnhDbWQgeCV4ICIKQEAgLTI0NzYsMzAgKzMxMjEsNjQgQEAKIAkJCXBoYmEtPnNsaS5zbGlfZmxhZyAmPSB+TFBGQ19TTEkyX0FDVElWRTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCQlyYyA9IC1FTlhJTzsKLQkJfSBlbHNlIHsKKwkJfSBlbHNlCiAJCQlkb25lID0gMTsKLQkJCXBoYmEtPm1heF92cGkgPSAocGhiYS0+bWF4X3ZwaSAmJgotCQkJCQkgcG1iLT5tYi51bi52YXJDZmdQb3J0LmdtdikgIT0gMAotCQkJCT8gcG1iLT5tYi51bi52YXJDZmdQb3J0Lm1heF92cGkKLQkJCQk6IDA7Ci0JCX0KIAl9Ci0KIAlpZiAoIWRvbmUpIHsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIGRvX3ByZXBfZmFpbGVkOwogCX0KLQotCWlmICgocG1iLT5tYi51bi52YXJDZmdQb3J0LnNsaV9tb2RlID09IDMpICYmCi0JCSghcG1iLT5tYi51bi52YXJDZmdQb3J0LmNNQSkpIHsKLQkJcmMgPSAtRU5YSU87CisJaWYgKHBtYi0+bWIudW4udmFyQ2ZnUG9ydC5zbGlfbW9kZSA9PSAzKSB7CisJCWlmICghcG1iLT5tYi51bi52YXJDZmdQb3J0LmNNQSkgeworCQkJcmMgPSAtRU5YSU87CisJCQlnb3RvIGRvX3ByZXBfZmFpbGVkOworCQl9CisJCWlmIChwaGJhLT5tYXhfdnBpICYmIHBtYi0+bWIudW4udmFyQ2ZnUG9ydC5nbXYpIHsKKwkJCXBoYmEtPnNsaTNfb3B0aW9ucyB8PSBMUEZDX1NMSTNfTlBJVl9FTkFCTEVEOworCQkJcGhiYS0+bWF4X3ZwaSA9IHBtYi0+bWIudW4udmFyQ2ZnUG9ydC5tYXhfdnBpOworCQl9IGVsc2UKKwkJCXBoYmEtPm1heF92cGkgPSAwOworCQlpZiAocG1iLT5tYi51bi52YXJDZmdQb3J0LmdlcmJtKQorCQkJcGhiYS0+c2xpM19vcHRpb25zIHw9IExQRkNfU0xJM19IQlFfRU5BQkxFRDsKKwkJaWYgKHBtYi0+bWIudW4udmFyQ2ZnUG9ydC5nY3JwKQorCQkJcGhiYS0+c2xpM19vcHRpb25zIHw9IExQRkNfU0xJM19DUlBfRU5BQkxFRDsKKwkJaWYgKHBtYi0+bWIudW4udmFyQ2ZnUG9ydC5naW5iKSB7CisJCQlwaGJhLT5zbGkzX29wdGlvbnMgfD0gTFBGQ19TTEkzX0lOQl9FTkFCTEVEOworCQkJcGhiYS0+cG9ydF9ncCA9IHBoYmEtPm1ib3gtPnVzLnMzX2luYl9wZ3AucG9ydDsKKwkJCXBoYmEtPmluYl9oYV9jb3B5ID0gJnBoYmEtPm1ib3gtPnVzLnMzX2luYl9wZ3AuaGFfY29weTsKKwkJCXBoYmEtPmluYl9jb3VudGVyID0gJnBoYmEtPm1ib3gtPnVzLnMzX2luYl9wZ3AuY291bnRlcjsKKwkJCXBoYmEtPmluYl9sYXN0X2NvdW50ZXIgPQorCQkJCQlwaGJhLT5tYm94LT51cy5zM19pbmJfcGdwLmNvdW50ZXI7CisJCX0gZWxzZSB7CisJCQlwaGJhLT5wb3J0X2dwID0gcGhiYS0+bWJveC0+dXMuczNfcGdwLnBvcnQ7CisJCQlwaGJhLT5pbmJfaGFfY29weSA9IE5VTEw7CisJCQlwaGJhLT5pbmJfY291bnRlciA9IE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlwaGJhLT5wb3J0X2dwID0gcGhiYS0+bWJveC0+dXMuczIucG9ydDsKKwkJcGhiYS0+aW5iX2hhX2NvcHkgPSBOVUxMOworCQlwaGJhLT5pbmJfY291bnRlciA9IE5VTEw7CisJCXBoYmEtPm1heF92cGkgPSAwOwogCX0KLQogZG9fcHJlcF9mYWlsZWQ6CiAJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJcmV0dXJuIHJjOwogfQogCisKKy8qKgorICogbHBmY19zbGlfaGJhX3NldHVwOiBTTEkgaW50aWFsaXphdGlvbiBmdW5jdGlvbi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBtYWluIFNMSSBpbnRpYWxpemF0aW9uIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uCisgKiBpcyBjYWxsZWQgYnkgdGhlIEhCQSBpbnRpYWxpemF0aW9uIGNvZGUsIEhCQSByZXNldCBjb2RlIGFuZCBIQkEKKyAqIGVycm9yIGF0dGVudGlvbiBoYW5kbGVyIGNvZGUuIENhbGxlciBpcyBub3QgcmVxdWlyZWQgdG8gaG9sZCBhbnkKKyAqIGxvY2tzLiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyBjb25maWdfcG9ydCBtYWlsYm94IGNvbW1hbmQgdG8gY29uZmlndXJlCisgKiB0aGUgU0xJLCBzZXR1cCBpb2NiIHJpbmdzIGFuZCBIQlEgcmluZ3MuIEluIHRoZSBlbmQgdGhlIGZ1bmN0aW9uCisgKiBjYWxscyB0aGUgY29uZmlnX3BvcnRfcG9zdCBmdW5jdGlvbiB0byBpc3N1ZSBpbml0X2xpbmsgbWFpbGJveAorICogY29tbWFuZCBhbmQgdG8gc3RhcnQgdGhlIGRpc2NvdmVyeS4gVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHplcm8KKyAqIGlmIHN1Y2Nlc3NmdWwsIGVsc2UgaXQgd2lsbCByZXR1cm4gbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqKi8KIGludAogbHBmY19zbGlfaGJhX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTI1MjgsMjIgKzMyMDcsMjAgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmMgPSBscGZjX2RvX2NvbmZpZ19wb3J0KHBoYmEsIG1vZGUpOworCXJjID0gbHBmY19zbGlfY29uZmlnX3BvcnQocGhiYSwgbW9kZSk7CisKIAlpZiAocmMgJiYgbHBmY19zbGlfbW9kZSA9PSAzKQogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklUIHwgTE9HX1ZQT1JULAogCQkJCSIxODIwIFVuYWJsZSB0byBzZWxlY3QgU0xJLTMuICAiCiAJCQkJIk5vdCBzdXBwb3J0ZWQgYnkgYWRhcHRlci5cbiIpOwogCWlmIChyYyAmJiBtb2RlICE9IDIpCi0JCXJjID0gbHBmY19kb19jb25maWdfcG9ydChwaGJhLCAyKTsKKwkJcmMgPSBscGZjX3NsaV9jb25maWdfcG9ydChwaGJhLCAyKTsKIAlpZiAocmMpCiAJCWdvdG8gbHBmY19zbGlfaGJhX3NldHVwX2Vycm9yOwogCiAJaWYgKHBoYmEtPnNsaV9yZXYgPT0gMykgewogCQlwaGJhLT5pb2NiX2NtZF9zaXplID0gU0xJM19JT0NCX0NNRF9TSVpFOwogCQlwaGJhLT5pb2NiX3JzcF9zaXplID0gU0xJM19JT0NCX1JTUF9TSVpFOwotCQlwaGJhLT5zbGkzX29wdGlvbnMgfD0gTFBGQ19TTEkzX0VOQUJMRUQ7Ci0JCXBoYmEtPnNsaTNfb3B0aW9ucyB8PSBMUEZDX1NMSTNfSEJRX0VOQUJMRUQ7Ci0KIAl9IGVsc2UgewogCQlwaGJhLT5pb2NiX2NtZF9zaXplID0gU0xJMl9JT0NCX0NNRF9TSVpFOwogCQlwaGJhLT5pb2NiX3JzcF9zaXplID0gU0xJMl9JT0NCX1JTUF9TSVpFOwpAQCAtMjU1OCw4ICszMjM1LDcgQEAKIAlpZiAocmMpCiAJCWdvdG8gbHBmY19zbGlfaGJhX3NldHVwX2Vycm9yOwogCi0JCQkJLyogSW5pdCBIQlFzICovCi0KKwkvKiBJbml0IEhCUXMgKi8KIAlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSB7CiAJCXJjID0gbHBmY19zbGlfaGJxX3NldHVwKHBoYmEpOwogCQlpZiAocmMpCkBAIC0yNTgxLDE5ICszMjU3LDE5IEBACiAJcmV0dXJuIHJjOwogfQogCi0vKiEgbHBmY19tYm94X3RpbWVvdXQKKworLyoqCisgKiBscGZjX21ib3hfdGltZW91dDogVGltZW91dCBjYWxsIGJhY2sgZnVuY3Rpb24gZm9yIG1ib3ggdGltZXIuCisgKiBAcHRyOiBjb250ZXh0IG9iamVjdCAtIHBvaW50ZXIgdG8gaGJhIHN0cnVjdHVyZS4KICAqCi0gKiBccHJlCi0gKiBccG9zdAotICogXHBhcmFtIGhiYSBQb2ludGVyIHRvIHBlciBzdHJ1Y3QgbHBmY19oYmEgc3RydWN0dXJlCi0gKiBccGFyYW0gbDEgIFBvaW50ZXIgdG8gdGhlIGRyaXZlcidzIG1haWxib3ggcXVldWUuCi0gKiBccmV0dXJuCi0gKiAgIHZvaWQKLSAqCi0gKiBcYiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBtYWlsYm94IHRpbWVvdXQgZXZlbnRzIGF0IHRpbWVyIGludGVycnVwdCBjb250ZXh0LgotICovCisgKiBUaGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgbWFpbGJveCB0aW1lci4gVGhlIG1haWxib3gKKyAqIHRpbWVyIGlzIGFybWVkIHdoZW4gYSBuZXcgbWFpbGJveCBjb21tYW5kIGlzIGlzc3VlZCBhbmQgdGhlIHRpbWVyCisgKiBpcyBkZWxldGVkIHdoZW4gdGhlIG1haWxib3ggY29tcGxldGUuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYnkKKyAqIHRoZSBrZXJuZWwgdGltZXIgY29kZSB3aGVuIGEgbWFpbGJveCBkb2VzIG5vdCBjb21wbGV0ZSB3aXRoaW4KKyAqIGV4cGVjdGVkIHRpbWUuIFRoaXMgZnVuY3Rpb24gd2FrZXMgdXAgdGhlIHdvcmtlciB0aHJlYWQgdG8KKyAqIHByb2Nlc3MgdGhlIG1haWxib3ggdGltZW91dCBhbmQgcmV0dXJucy4gQWxsIHRoZSBwcm9jZXNzaW5nIGlzCisgKiBkb25lIGJ5IHRoZSB3b3JrZXIgdGhyZWFkIGZ1bmN0aW9uIGxwZmNfbWJveF90aW1lb3V0X2hhbmRsZXIuCisgKiovCiB2b2lkCiBscGZjX21ib3hfdGltZW91dCh1bnNpZ25lZCBsb25nIHB0cikKIHsKQEAgLTI2MTIsNiArMzI4OCwxNSBAQAogCXJldHVybjsKIH0KIAorCisvKioKKyAqIGxwZmNfbWJveF90aW1lb3V0X2hhbmRsZXI6IFdvcmtlciB0aHJlYWQgZnVuY3Rpb24gdG8gaGFuZGxlIG1haWxib3ggdGltZW91dC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHdvcmtlciB0aHJlYWQgd2hlbiBhIG1haWxib3ggY29tbWFuZCB0aW1lcyBvdXQuCisgKiBUaGUgY2FsbGVyIGlzIG5vdCByZXF1aXJlZCB0byBob2xkIGFueSBsb2Nrcy4gVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0IHRoZQorICogSEJBIGFuZCByZWNvdmVyIGFsbCB0aGUgcGVuZGluZyBjb21tYW5kcy4KKyAqKi8KIHZvaWQKIGxwZmNfbWJveF90aW1lb3V0X2hhbmRsZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMjY2Niw2ICszMzUxLDMyIEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2lzc3VlX21ib3g6IElzc3VlIGEgbWFpbGJveCBjb21tYW5kIHRvIGZpcm13YXJlLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHBtYm94OiBQb2ludGVyIHRvIG1haWxib3ggb2JqZWN0LgorICogQGZsYWc6IEZsYWcgaW5kaWNhdGluZyBob3cgdGhlIG1haWxib3ggbmVlZCB0byBiZSBwcm9jZXNzZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZGlzY292ZXJ5IGNvZGUgYW5kIEhCQSBtYW5hZ2VtZW50IGNvZGUKKyAqIHRvIHN1Ym1pdCBhIG1haWxib3ggY29tbWFuZCB0byBmaXJtd2FyZS4gVGhpcyBmdW5jdGlvbiBnZXRzIHRoZQorICogaGJhbG9jayB0byBwcm90ZWN0IHRoZSBkYXRhIHN0cnVjdHVyZXMuCisgKiBUaGUgbWFpbGJveCBjb21tYW5kIGNhbiBiZSBzdWJtaXR0ZWQgaW4gcG9sbGluZyBtb2RlLCBpbiB3aGljaCBjYXNlCisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCBpbiBhIHBvbGxpbmcgbG9vcCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlCisgKiBtYWlsYm94LgorICogSWYgdGhlIG1haWxib3ggaXMgc3VibWl0dGVkIGluIG5vX3dhaXQgbW9kZSAobm90IHBvbGxpbmcpIHRoZQorICogZnVuY3Rpb24gd2lsbCBzdWJtaXQgdGhlIGNvbW1hbmQgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nCisgKiBmb3IgdGhlIG1haWxib3ggY29tcGxldGlvbi4gVGhlIG5vX3dhaXQgaXMgc3VwcG9ydGVkIG9ubHkgd2hlbiBIQkEKKyAqIGlzIGluIFNMSTIvU0xJMyBtb2RlIC0gaW50ZXJydXB0cyBhcmUgZW5hYmxlZC4KKyAqIFRoZSBTTEkgaW50ZXJmYWNlIGFsbG93cyBvbmx5IG9uZSBtYWlsYm94IHBlbmRpbmcgYXQgYSB0aW1lLiBJZiB0aGUKKyAqIG1haWxib3ggaXMgaXNzdWVkIGluIHBvbGxpbmcgbW9kZSBhbmQgdGhlcmUgaXMgYWxyZWFkeSBhIG1haWxib3gKKyAqIHBlbmRpbmcsIHRoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVycm9yLiBJZiB0aGUgbWFpbGJveCBpcyBpc3N1ZWQKKyAqIGluIE5PX1dBSVQgbW9kZSBhbmQgdGhlcmUgaXMgYSBtYWlsYm94IHBlbmRpbmcgYWxyZWFkeSwgdGhlIGZ1bmN0aW9uCisgKiB3aWxsIHJldHVybiBNQlhfQlVTWSBhZnRlciBxdWV1aW5nIHRoZSBtYWlsYm94IGludG8gbWFpbGJveCBxdWV1ZS4KKyAqIFRoZSBzbGkgbGF5ZXIgb3ducyB0aGUgbWFpbGJveCBvYmplY3QgdW50aWwgdGhlIGNvbXBsZXRpb24gb2YgbWFpbGJveAorICogY29tbWFuZCBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybiBNQlhfQlVTWSBvciBNQlhfU1VDQ0VTUy4gRm9yIGFsbCBvdGhlcgorICogcmV0dXJuIGNvZGVzIHRoZSBjYWxsZXIgb3ducyB0aGUgbWFpbGJveCBjb21tYW5kIGFmdGVyIHRoZSByZXR1cm4gb2YKKyAqIHRoZSBmdW5jdGlvbi4KKyAqKi8KIGludAogbHBmY19zbGlfaXNzdWVfbWJveChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1ib3gsIHVpbnQzMl90IGZsYWcpCiB7CkBAIC0yNjc2LDcgKzMzODcsNyBAQAogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAl1bnNpZ25lZCBsb25nIGRydnJfZmxhZyA9IDA7Ci0Jdm9sYXRpbGUgdWludDMyX3Qgd29yZDAsIGxkYXRhOworCXVpbnQzMl90IHdvcmQwLCBsZGF0YTsKIAl2b2lkIF9faW9tZW0gKnRvX3NsaW07CiAJaW50IHByb2Nlc3NpbmdfcXVldWUgPSAwOwogCkBAIC0yODM2LDEyICszNTQ3LDExIEBACiAKIAlpZiAocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX1NMSTJfQUNUSVZFKSB7CiAJCS8qIEZpcnN0IGNvcHkgY29tbWFuZCBkYXRhIHRvIGhvc3QgU0xJTSBhcmVhICovCi0JCWxwZmNfc2xpX3BjaW1lbV9iY29weShtYiwgJnBoYmEtPnNsaW0ycC0+bWJ4LCBNQUlMQk9YX0NNRF9TSVpFKTsKKwkJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KG1iLCBwaGJhLT5tYm94LCBNQUlMQk9YX0NNRF9TSVpFKTsKIAl9IGVsc2UgewogCQlpZiAobWItPm1ieENvbW1hbmQgPT0gTUJYX0NPTkZJR19QT1JUKSB7CiAJCQkvKiBjb3B5IGNvbW1hbmQgZGF0YSBpbnRvIGhvc3QgbWJveCBmb3IgY21wbCAqLwotCQkJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KG1iLCAmcGhiYS0+c2xpbTJwLT5tYngsCi0JCQkJCSAgICAgIE1BSUxCT1hfQ01EX1NJWkUpOworCQkJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KG1iLCBwaGJhLT5tYm94LCBNQUlMQk9YX0NNRF9TSVpFKTsKIAkJfQogCiAJCS8qIEZpcnN0IGNvcHkgbWJveCBjb21tYW5kIGRhdGEgdG8gSEJBIFNMSU0sIHNraXAgcGFzdCBmaXJzdApAQCAtMjg1MSw3ICszNTYxLDcgQEAKIAkJCSAgICBNQUlMQk9YX0NNRF9TSVpFIC0gc2l6ZW9mICh1aW50MzJfdCkpOwogCiAJCS8qIE5leHQgY29weSBvdmVyIGZpcnN0IHdvcmQsIHdpdGggbWJ4T3duZXIgc2V0ICovCi0JCWxkYXRhID0gKigodm9sYXRpbGUgdWludDMyX3QgKiltYik7CisJCWxkYXRhID0gKigodWludDMyX3QgKiltYik7CiAJCXRvX3NsaW0gPSBwaGJhLT5NQnNsaW1hZGRyOwogCQl3cml0ZWwobGRhdGEsIHRvX3NsaW0pOwogCQlyZWFkbCh0b19zbGltKTsgLyogZmx1c2ggKi8KQEAgLTI4ODMsNyArMzU5Myw3IEBACiAKIAkJaWYgKHBzbGktPnNsaV9mbGFnICYgTFBGQ19TTEkyX0FDVElWRSkgewogCQkJLyogRmlyc3QgcmVhZCBtYm94IHN0YXR1cyB3b3JkICovCi0JCQl3b3JkMCA9ICooKHZvbGF0aWxlIHVpbnQzMl90ICopJnBoYmEtPnNsaW0ycC0+bWJ4KTsKKwkJCXdvcmQwID0gKigodWludDMyX3QgKilwaGJhLT5tYm94KTsKIAkJCXdvcmQwID0gbGUzMl90b19jcHUod29yZDApOwogCQl9IGVsc2UgewogCQkJLyogRmlyc3QgcmVhZCBtYm94IHN0YXR1cyB3b3JkICovCkBAIC0yOTIyLDEyICszNjMyLDExIEBACiAKIAkJCWlmIChwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJMl9BQ1RJVkUpIHsKIAkJCQkvKiBGaXJzdCBjb3B5IGNvbW1hbmQgZGF0YSAqLwotCQkJCXdvcmQwID0gKigodm9sYXRpbGUgdWludDMyX3QgKikKLQkJCQkJCSZwaGJhLT5zbGltMnAtPm1ieCk7CisJCQkJd29yZDAgPSAqKCh1aW50MzJfdCAqKXBoYmEtPm1ib3gpOwogCQkJCXdvcmQwID0gbGUzMl90b19jcHUod29yZDApOwogCQkJCWlmIChtYi0+bWJ4Q29tbWFuZCA9PSBNQlhfQ09ORklHX1BPUlQpIHsKIAkJCQkJTUFJTEJPWF90ICpzbGltbWI7Ci0JCQkJCXZvbGF0aWxlIHVpbnQzMl90IHNsaW13b3JkMDsKKwkJCQkJdWludDMyX3Qgc2xpbXdvcmQwOwogCQkJCQkvKiBDaGVjayByZWFsIFNMSU0gZm9yIGFueSBlcnJvcnMgKi8KIAkJCQkJc2xpbXdvcmQwID0gcmVhZGwocGhiYS0+TUJzbGltYWRkcik7CiAJCQkJCXNsaW1tYiA9IChNQUlMQk9YX3QgKikgJiBzbGltd29yZDA7CkBAIC0yOTQ4LDggKzM2NTcsNyBAQAogCiAJCWlmIChwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJMl9BQ1RJVkUpIHsKIAkJCS8qIGNvcHkgcmVzdWx0cyBiYWNrIHRvIHVzZXIgKi8KLQkJCWxwZmNfc2xpX3BjaW1lbV9iY29weSgmcGhiYS0+c2xpbTJwLT5tYngsIG1iLAotCQkJCQkgICAgICBNQUlMQk9YX0NNRF9TSVpFKTsKKwkJCWxwZmNfc2xpX3BjaW1lbV9iY29weShwaGJhLT5tYm94LCBtYiwgTUFJTEJPWF9DTURfU0laRSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBGaXJzdCBjb3B5IGNvbW1hbmQgZGF0YSAqLwogCQkJbHBmY19tZW1jcHlfZnJvbV9zbGltKG1iLCBwaGJhLT5NQnNsaW1hZGRyLApAQCAtMjk4MCw5ICszNjg4LDE2IEBACiAJcmV0dXJuIE1CWF9OT1RfRklOSVNIRUQ7CiB9CiAKLS8qCi0gKiBDYWxsZXIgbmVlZHMgdG8gaG9sZCBsb2NrLgotICovCisvKioKKyAqIF9fbHBmY19zbGlfcmluZ3R4X3B1dDogQWRkIGFuIGlvY2IgdG8gdGhlIHR4cS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQHBpb2NiOiBQb2ludGVyIHRvIGFkZHJlc3Mgb2YgbmV3bHkgYWRkZWQgY29tbWFuZCBpb2NiLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggaGJhbG9jayBoZWxkIHRvIGFkZCBhIGNvbW1hbmQKKyAqIGlvY2IgdG8gdGhlIHR4cSB3aGVuIFNMSSBsYXllciBjYW5ub3Qgc3VibWl0IHRoZSBjb21tYW5kIGlvY2IKKyAqIHRvIHRoZSByaW5nLgorICoqLwogc3RhdGljIHZvaWQKIF9fbHBmY19zbGlfcmluZ3R4X3B1dChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJICAgIHN0cnVjdCBscGZjX2lvY2JxICpwaW9jYikKQEAgLTI5OTIsNiArMzcwNywyMyBAQAogCXByaW5nLT50eHFfY250Kys7CiB9CiAKKy8qKgorICogbHBmY19zbGlfbmV4dF9pb2NiOiBHZXQgdGhlIG5leHQgaW9jYiBpbiB0aGUgdHhxLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAcGlvY2I6IFBvaW50ZXIgdG8gYWRkcmVzcyBvZiBuZXdseSBhZGRlZCBjb21tYW5kIGlvY2IuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQgYmVmb3JlIGEgbmV3CisgKiBpb2NiIGlzIHN1Ym1pdHRlZCB0byB0aGUgZmlybXdhcmUuIFRoaXMgZnVuY3Rpb24gY2hlY2tzCisgKiB0eHEgdG8gZmx1c2ggdGhlIGlvY2JzIGluIHR4cSB0byBGaXJtd2FyZSBiZWZvcmUKKyAqIHN1Ym1pdHRpbmcgbmV3IGlvY2JzIHRvIHRoZSBGaXJtd2FyZS4KKyAqIElmIHRoZXJlIGFyZSBpb2NicyBpbiB0aGUgdHhxIHdoaWNoIG5lZWQgdG8gYmUgc3VibWl0dGVkCisgKiB0byBmaXJtd2FyZSwgbHBmY19zbGlfbmV4dF9pb2NiIHJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQKKyAqIG9mIHRoZSB0eHEgYWZ0ZXIgZGVxdWV1aW5nIGl0IGZyb20gdHhxLgorICogSWYgdGhlcmUgaXMgbm8gaW9jYiBpbiB0aGUgdHhxIHRoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisgKiAqcGlvY2IgYW5kICpwaW9jYiBpcyBzZXQgdG8gTlVMTC4gQ2FsbGVyIG5lZWRzIHRvIGNoZWNrCisgKiAqcGlvY2IgdG8gZmluZCBpZiB0aGVyZSBhcmUgbW9yZSBjb21tYW5kcyBpbiB0aGUgdHhxLgorICoqLwogc3RhdGljIHN0cnVjdCBscGZjX2lvY2JxICoKIGxwZmNfc2xpX25leHRfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJICAgc3RydWN0IGxwZmNfaW9jYnEgKipwaW9jYikKQEAgLTMwMDcsOSArMzczOSwzMCBAQAogCXJldHVybiBuZXh0aW9jYjsKIH0KIAotLyoKLSAqIExvY2tsZXNzIHZlcnNpb24gb2YgbHBmY19zbGlfaXNzdWVfaW9jYi4KLSAqLworLyoqCisgKiBfX2xwZmNfc2xpX2lzc3VlX2lvY2I6IExvY2tsZXNzIHZlcnNpb24gb2YgbHBmY19zbGlfaXNzdWVfaW9jYi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQHBpb2NiOiBQb2ludGVyIHRvIGNvbW1hbmQgaW9jYi4KKyAqIEBmbGFnOiBGbGFnIGluZGljYXRpbmcgaWYgdGhpcyBjb21tYW5kIGNhbiBiZSBwdXQgaW50byB0eHEuCisgKgorICogX19scGZjX3NsaV9pc3N1ZV9pb2NiIGlzIHVzZWQgYnkgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSBkcml2ZXIKKyAqIHRvIGlzc3VlIGFuIGlvY2IgY29tbWFuZCB0byB0aGUgSEJBLiBJZiB0aGUgUENJIHNsb3QgaXMgcmVjb3ZlcmluZworICogZnJvbSBlcnJvciBzdGF0ZSBvciBpZiBIQkEgaXMgcmVzZXR0aW5nIG9yIGlmIExQRkNfU1RPUF9JT0NCX0VWRU5UCisgKiBmbGFnIGlzIHR1cm5lZCBvbiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgSU9DQl9FUlJPUi4KKyAqIFdoZW4gdGhlIGxpbmsgaXMgZG93biwgdGhpcyBmdW5jdGlvbiBhbGxvd3Mgb25seSBpb2NicyBmb3IKKyAqIHBvc3RpbmcgYnVmZmVycy4KKyAqIFRoaXMgZnVuY3Rpb24gZmluZHMgbmV4dCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgY29tbWFuZCByaW5nIGFuZAorICogcG9zdHMgdGhlIGNvbW1hbmQgdG8gdGhlIGF2YWlsYWJsZSBzbG90IGFuZCB3cml0ZXMgdGhlIHBvcnQKKyAqIGF0dGVudGlvbiByZWdpc3RlciB0byByZXF1ZXN0IEhCQSBzdGFydCBwcm9jZXNzaW5nIG5ldyBpb2NiLgorICogSWYgdGhlcmUgaXMgbm8gc2xvdCBhdmFpbGFibGUgaW4gdGhlIHJpbmcgYW5kCisgKiBmbGFnICYgU0xJX0lPQ0JfUkVUX0lPQ0IgaXMgc2V0LCB0aGUgbmV3IGlvY2IgaXMgYWRkZWQgdG8gdGhlCisgKiB0eHEsIG90aGVyd2lzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBJT0NCX0JVU1kuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBoYmFsb2NrIGhlbGQuCisgKiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gc3VjY2VzcyBhZnRlciBpdCBzdWNjZXNzZnVsbHkgc3VibWl0IHRoZQorICogaW9jYiB0byBmaXJtd2FyZSBvciBhZnRlciBhZGRpbmcgdG8gdGhlIHR4cS4KKyAqKi8KIHN0YXRpYyBpbnQKIF9fbHBmY19zbGlfaXNzdWVfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJICAgIHN0cnVjdCBscGZjX2lvY2JxICpwaW9jYiwgdWludDMyX3QgZmxhZykKQEAgLTMwNTIsNiArMzgwNSwxNiBAQAogCQkgKiBjYW4gYmUgaXNzdWVkIGlmIHRoZSBsaW5rIGlzIG5vdCB1cC4KIAkJICovCiAJCXN3aXRjaCAocGlvY2ItPmlvY2IudWxwQ29tbWFuZCkgeworCQljYXNlIENNRF9HRU5fUkVRVUVTVDY0X0NSOgorCQljYXNlIENNRF9HRU5fUkVRVUVTVDY0X0NYOgorCQkJaWYgKCEocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19NRU5MT19NQUlOVCkgfHwKKwkJCQkocGlvY2ItPmlvY2IudW4uZ2VucmVxNjQudzUuaGNzdy5SY3RsICE9CisJCQkJCUZDX0ZDUF9DTU5EKSB8fAorCQkJCShwaW9jYi0+aW9jYi51bi5nZW5yZXE2NC53NS5oY3N3LlR5cGUgIT0KKwkJCQkJTUVOTE9fVFJBTlNQT1JUX1RZUEUpKQorCisJCQkJZ290byBpb2NiX2J1c3k7CisJCQlicmVhazsKIAkJY2FzZSBDTURfUVVFX1JJTkdfQlVGX0NOOgogCQljYXNlIENNRF9RVUVfUklOR19CVUY2NF9DTjoKIAkJCS8qCkBAIC0zMTA2LDYgKzM4NjksMTkgQEAKIH0KIAogCisvKioKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2I6IFdyYXBwZXIgZnVuY3Rpb24gZm9yIF9fbHBmY19zbGlfaXNzdWVfaW9jYi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQHBpb2NiOiBQb2ludGVyIHRvIGNvbW1hbmQgaW9jYi4KKyAqIEBmbGFnOiBGbGFnIGluZGljYXRpbmcgaWYgdGhpcyBjb21tYW5kIGNhbiBiZSBwdXQgaW50byB0eHEuCisgKgorICogbHBmY19zbGlfaXNzdWVfaW9jYiBpcyBhIHdyYXBwZXIgYXJvdW5kIF9fbHBmY19zbGlfaXNzdWVfaW9jYgorICogZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgaGJhbG9jayBhbmQgY2FsbHMKKyAqIF9fbHBmY19zbGlfaXNzdWVfaW9jYiBmdW5jdGlvbiBhbmQgd2lsbCByZXR1cm4gdGhlIGVycm9yIHJldHVybmVkCisgKiBieSBfX2xwZmNfc2xpX2lzc3VlX2lvY2IgZnVuY3Rpb24uIFRoaXMgd3JhcHBlciBpcyB1c2VkIGJ5CisgKiBmdW5jdGlvbnMgd2hpY2ggZG8gbm90IGhvbGQgaGJhbG9jay4KKyAqKi8KIGludAogbHBmY19zbGlfaXNzdWVfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJICAgIHN0cnVjdCBscGZjX2lvY2JxICpwaW9jYiwgdWludDMyX3QgZmxhZykKQEAgLTMxMjAsNiArMzg5NiwxNyBAQAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBscGZjX2V4dHJhX3Jpbmdfc2V0dXA6IEV4dHJhIHJpbmcgc2V0dXAgZnVuY3Rpb24uCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hpbGUgZHJpdmVyIGF0dGFjaGVzIHdpdGggdGhlCisgKiBIQkEgdG8gc2V0dXAgdGhlIGV4dHJhIHJpbmcuIFRoZSBleHRyYSByaW5nIGlzIHVzZWQKKyAqIG9ubHkgd2hlbiBkcml2ZXIgbmVlZHMgdG8gc3VwcG9ydCB0YXJnZXQgbW9kZSBmdW5jdGlvbmFsaXR5CisgKiBvciBJUCBvdmVyIEZDIGZ1bmN0aW9uYWxpdGllcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZC4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfZXh0cmFfcmluZ19zZXR1cCggc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMzE1NSw2ICszOTQyLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogbHBmY19zbGlfYXN5bmNfZXZlbnRfaGFuZGxlcjogQVNZTkMgaW9jYiBoYW5kbGVyIGZ1bmN0aW9uLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAaW9jYnE6IFBvaW50ZXIgdG8gaW9jYiBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHNsb3cgcmluZyBldmVudCBoYW5kbGVyCisgKiBmdW5jdGlvbiB3aGVuIHRoZXJlIGlzIGFuIEFTWU5DIGV2ZW50IGlvY2IgaW4gdGhlIHJpbmcuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZC4KKyAqIEN1cnJlbnRseSB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgb25seSB0ZW1wZXJhdHVyZSByZWxhdGVkCisgKiBBU1lOQyBldmVudHMuIFRoZSBmdW5jdGlvbiBkZWNvZGVzIHRoZSB0ZW1wZXJhdHVyZSBzZW5zb3IKKyAqIGV2ZW50IG1lc3NhZ2UgYW5kIHBvc3RzIGV2ZW50cyBmb3IgdGhlIG1hbmFnZW1lbnQgYXBwbGljYXRpb25zLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfc2xpX2FzeW5jX2V2ZW50X2hhbmRsZXIoc3RydWN0IGxwZmNfaGJhICogcGhiYSwKIAlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqIHByaW5nLCBzdHJ1Y3QgbHBmY19pb2NicSAqIGlvY2JxKQpAQCAtMzIxMCw2ICs0MDEwLDE3IEBACiB9CiAKIAorLyoqCisgKiBscGZjX3NsaV9zZXR1cDogU0xJIHJpbmcgc2V0dXAgZnVuY3Rpb24uCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKgorICogbHBmY19zbGlfc2V0dXAgc2V0cyB1cCByaW5ncyBvZiB0aGUgU0xJIGludGVyZmFjZSB3aXRoCisgKiBudW1iZXIgb2YgaW9jYnMgcGVyIHJpbmcgYW5kIGlvdGFncy4gVGhpcyBmdW5jdGlvbiBpcworICogY2FsbGVkIHdoaWxlIGRyaXZlciBhdHRhY2ggdG8gdGhlIEhCQSBhbmQgYmVmb3JlIHRoZQorICogaW50ZXJydXB0cyBhcmUgZW5hYmxlZC4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgbG9ja2luZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIDAuCisgKiovCiBpbnQKIGxwZmNfc2xpX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTMzMjEsNiArNDEzMiwxNyBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3F1ZXVlX3NldHVwOiBRdWV1ZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBscGZjX3NsaV9xdWV1ZV9zZXR1cCBzZXRzIHVwIG1haWxib3ggcXVldWVzIGFuZCBpb2NiIHF1ZXVlcyBmb3IgZWFjaAorICogcmluZy4gVGhpcyBmdW5jdGlvbiBhbHNvIGluaXRpYWxpemVzIHJpbmcgaW5kaWNlcyBvZiBlYWNoIHJpbmcuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBTTEkKKyAqIGludGVyZmFjZSBvZiBhbiBIQkEuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZCBhbmQgYWx3YXlzIHJldHVybnMKKyAqIDEuCisgKiovCiBpbnQKIGxwZmNfc2xpX3F1ZXVlX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKQEAgLTMzNDksNiArNDE3MSwyMyBAQAogCXJldHVybiAxOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2hvc3RfZG93bjogVnBvcnQgY2xlYW51cCBmdW5jdGlvbi4KKyAqIEB2cG9ydDogUG9pbnRlciB0byB2aXJ0dWFsIHBvcnQgb2JqZWN0LgorICoKKyAqIGxwZmNfc2xpX2hvc3RfZG93biBpcyBjYWxsZWQgdG8gY2xlYW4gdXAgdGhlIHJlc291cmNlcworICogYXNzb2NpYXRlZCB3aXRoIGEgdnBvcnQgYmVmb3JlIGRlc3Ryb3lpbmcgdmlydHVhbAorICogcG9ydCBkYXRhIHN0cnVjdHVyZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgZm9sbG93aW5nIG9wZXJhdGlvbnM6CisgKiAtIEZyZWUgZGlzY292ZXJ5IHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyB2aXJ0dWFsCisgKiAgIHBvcnQuCisgKiAtIEZyZWUgaW9jYnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdmlydHVhbCBwb3J0IGluCisgKiAgIHRoZSB0eHEuCisgKiAtIFNlbmQgYWJvcnQgZm9yIGFsbCBpb2NiIGNvbW1hbmRzIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgKiAgIHZwb3J0IGluIHR4Y21wbHEuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQgYW5kIGFsd2F5cyByZXR1cm5zIDEuCisgKiovCiBpbnQKIGxwZmNfc2xpX2hvc3RfZG93bihzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CkBAIC0zNDExLDYgKzQyNTAsMjEgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9oYmFfZG93bjogUmVzb3VyY2UgY2xlYW51cCBmdW5jdGlvbiBmb3IgdGhlIEhCQS4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCBhbGwgaW9jYiwgYnVmZmVycywgbWFpbGJveCBjb21tYW5kcworICogd2hpbGUgc2h1dHRpbmcgZG93biB0aGUgSEJBLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vCisgKiBsb2NrIGhlbGQgYW5kIGFsd2F5cyByZXR1cm5zIDEuCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGZvbGxvd2luZyB0byBjbGVhbnVwIGRyaXZlciByZXNvdXJjZXM6CisgKiAtIEZyZWUgZGlzY292ZXJ5IHJlc291cmNlcyBmb3IgZWFjaCB2aXJ0dWFsIHBvcnQKKyAqIC0gQ2xlYW51cCBhbnkgcGVuZGluZyBmYWJyaWMgaW9jYnMKKyAqIC0gSXRlcmF0ZSB0aHJvdWdoIHRoZSBpb2NiIHR4cSBhbmQgZnJlZSBlYWNoIGVudHJ5CisgKiAgIGluIHRoZSBsaXN0LgorICogLSBGcmVlIHVwIGFueSBidWZmZXIgcG9zdGVkIHRvIHRoZSBIQkEKKyAqIC0gRnJlZSBtYWlsYm94IGNvbW1hbmRzIGluIHRoZSBtYWlsYm94IHF1ZXVlLgorICoqLwogaW50CiBscGZjX3NsaV9oYmFfZG93bihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CkBAIC0zNTAxLDYgKzQzNTUsMTggQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9wY2ltZW1fYmNvcHk6IFNMSSBtZW1vcnkgY29weSBmdW5jdGlvbi4KKyAqIEBzcmNwOiBTb3VyY2UgbWVtb3J5IHBvaW50ZXIuCisgKiBAZGVzdHA6IERlc3RpbmF0aW9uIG1lbW9yeSBwb2ludGVyLgorICogQGNudDogTnVtYmVyIG9mIHdvcmRzIHJlcXVpcmVkIHRvIGJlIGNvcGllZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGNvcHlpbmcgZGF0YSBiZXR3ZWVuIGRyaXZlciBtZW1vcnkKKyAqIGFuZCB0aGUgU0xJIG1lbW9yeS4gVGhpcyBmdW5jdGlvbiBhbHNvIGNoYW5nZXMgdGhlIGVuZGlhbm5lc3MKKyAqIG9mIGVhY2ggd29yZCBpZiBuYXRpdmUgZW5kaWFubmVzcyBpcyBkaWZmZXJlbnQgZnJvbSBTTEkKKyAqIGVuZGlhbm5lc3MuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRoIG9yIHdpdGhvdXQKKyAqIGxvY2suCisgKiovCiB2b2lkCiBscGZjX3NsaV9wY2ltZW1fYmNvcHkodm9pZCAqc3JjcCwgdm9pZCAqZGVzdHAsIHVpbnQzMl90IGNudCkKIHsKQEAgLTM1MTgsNiArNDM4NCwxNyBAQAogCX0KIH0KIAorCisvKioKKyAqIGxwZmNfc2xpX3Jpbmdwb3N0YnVmX3B1dDogRnVuY3Rpb24gdG8gYWRkIGEgYnVmZmVyIHRvIHBvc3RidWZxLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAbXA6IFBvaW50ZXIgdG8gZHJpdmVyIGJ1ZmZlciBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQuCisgKiBJdCBhbHdheXMgcmV0dXJuIHplcm8gYWZ0ZXIgYWRkaW5nIHRoZSBidWZmZXIgdG8gdGhlIHBvc3RidWZxCisgKiBidWZmZXIgbGlzdC4KKyAqKi8KIGludAogbHBmY19zbGlfcmluZ3Bvc3RidWZfcHV0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkJIHN0cnVjdCBscGZjX2RtYWJ1ZiAqbXApCkBAIC0zNTMxLDYgKzQ0MDgsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9nZXRfYnVmZmVyX3RhZzogVGFnIGFsbG9jYXRpb24gZnVuY3Rpb24gZm9yIGEgYnVmZmVyIHBvc3RlZAorICogICAgICAgICAgdXNpbmcgQ01EX1FVRV9YUkk2NF9DWCBpb2NiLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFdoZW4gSEJRIGlzIGVuYWJsZWQsIGJ1ZmZlcnMgYXJlIHNlYXJjaGVkIGJhc2VkIG9uIHRhZ3MuIFRoaXMgZnVuY3Rpb24KKyAqIGFsbG9jYXRlcyBhIHRhZyBmb3IgYnVmZmVyIHBvc3RlZCB1c2luZyBDTURfUVVFX1hSSTY0X0NYIGlvY2IuIFRoZQorICogdGFnIGlzIGJpdCB3aXNlIG9yLWVkIHdpdGggUVVFX0JVRlRBR19CSVQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHRhZworICogZG9lcyBub3QgY29uZmxpY3Qgd2l0aCB0YWdzIG9mIGJ1ZmZlciBwb3N0ZWQgZm9yIHVuc29saWNpdGVkIGV2ZW50cy4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbGxvY2F0ZWQgdGFnLiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGgKKyAqIG5vIGxvY2tzIGhlbGQuCisgKiovCiB1aW50MzJfdAogbHBmY19zbGlfZ2V0X2J1ZmZlcl90YWcoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMzU0NSw2ICs0NDM0LDIyIEBACiAJcmV0dXJuIHBoYmEtPmJ1ZmZlcl90YWdfY291bnQ7CiB9CiAKKy8qKgorICogbHBmY19zbGlfcmluZ190YWdnZWRidWZfZ2V0OiBTZWFyY2ggSEJRIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGgKKyAqICAgICAgICAgICAgICBwb3N0ZWQgdXNpbmcgQ01EX1FVRV9YUkk2NF9DWCBpb2NiLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAdGFnOiBCdWZmZXIgdGFnLgorICoKKyAqIEJ1ZmZlcnMgcG9zdGVkIHVzaW5nIENNRF9RVUVfWFJJNjRfQ1ggaW9jYiBhcmUgaW4gcHJpbmctPnBvc3RidWZxCisgKiBsaXN0LiBBZnRlciBIQkEgRE1BIGRhdGEgdG8gdGhlc2UgYnVmZmVycywgQ01EX0lPQ0JfUkVUX1hSSTY0X0NYCisgKiBpb2NiIGlzIHBvc3RlZCB0byB0aGUgcmVzcG9uc2UgcmluZyB3aXRoIHRoZSB0YWcgb2YgdGhlIGJ1ZmZlci4KKyAqIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgdGhlIHByaW5nLT5wb3N0YnVmcSBsaXN0IHVzaW5nIHRoZSB0YWcKKyAqIHRvIGZpbmQgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCBDTURfSU9DQl9SRVRfWFJJNjRfQ1gKKyAqIGlvY2IuIElmIHRoZSBidWZmZXIgaXMgZm91bmQgdGhlbiBscGZjX2RtYWJ1ZiBvYmplY3Qgb2YgdGhlCisgKiBidWZmZXIgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBlbHNlIE5VTEwgaXMgcmV0dXJuZWQuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZC4KKyAqKi8KIHN0cnVjdCBscGZjX2RtYWJ1ZiAqCiBscGZjX3NsaV9yaW5nX3RhZ2dlZGJ1Zl9nZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCQl1aW50MzJfdCB0YWcpCkBAIC0zNTY1LDcgKzQ0NzAsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAotCQkJIjA0MTAgQ2Fubm90IGZpbmQgdmlydHVhbCBhZGRyIGZvciBidWZmZXIgdGFnIG9uICIKKwkJCSIwNDAyIENhbm5vdCBmaW5kIHZpcnR1YWwgYWRkciBmb3IgYnVmZmVyIHRhZyBvbiAiCiAJCQkicmluZyAlZCBEYXRhIHglbHggeCVwIHglcCB4JXhcbiIsCiAJCQlwcmluZy0+cmluZ25vLCAodW5zaWduZWQgbG9uZykgdGFnLAogCQkJc2xwLT5uZXh0LCBzbHAtPnByZXYsIHByaW5nLT5wb3N0YnVmcV9jbnQpOwpAQCAtMzU3Myw2ICs0NDc4LDIzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qKgorICogbHBmY19zbGlfcmluZ3Bvc3RidWZfZ2V0OiBTTEkyIGJ1ZmZlciBzZWFyY2ggZnVuY3Rpb24gZm9yCisgKiAgICAgIHVuc29saWNpdGVkIGN0IGFuZCBlbHMgZXZlbnRzLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQHByaW5nOiBQb2ludGVyIHRvIGRyaXZlciBTTEkgcmluZyBvYmplY3QuCisgKiBAcGh5czogRE1BIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSBidWZmZXIgbGlzdCB1c2luZyB0aGUgZG1hX2FkZHJlc3MKKyAqIG9mIHVuc29saWNpdGVkIGV2ZW50IHRvIGZpbmQgdGhlIGRyaXZlcidzIGxwZmNfZG1hYnVmIG9iamVjdAorICogY29ycmVzcG9uZGluZyB0byB0aGUgZG1hX2FkZHJlc3MuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZQorICogbHBmY19kbWFidWYgb2JqZWN0IGlmIGEgYnVmZmVyIGlzIGZvdW5kIGVsc2UgaXQgcmV0dXJucyBOVUxMLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGN0IGFuZCBlbHMgdW5zb2xpY2l0ZWQgZXZlbnQKKyAqIGhhbmRsZXJzIHRvIGdldCB0aGUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5zb2xpY2l0ZWQKKyAqIGV2ZW50LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9jayBoZWxkLgorICoqLwogc3RydWN0IGxwZmNfZG1hYnVmICoKIGxwZmNfc2xpX3Jpbmdwb3N0YnVmX2dldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZywKIAkJCSBkbWFfYWRkcl90IHBoeXMpCkBAIC0zNjAwLDYgKzQ1MjIsMTcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9hYm9ydF9lbHNfY21wbDogQ29tcGxldGlvbiBoYW5kbGVyIGZvciB0aGUgZWxzIGFib3J0IGlvY2JzLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGNtZGlvY2I6IFBvaW50ZXIgdG8gZHJpdmVyIGNvbW1hbmQgaW9jYiBvYmplY3QuCisgKiBAcnNwaW9jYjogUG9pbnRlciB0byBkcml2ZXIgcmVzcG9uc2UgaW9jYiBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGZvciB0aGUgYWJvcnQgaW9jYnMgZm9yCisgKiBFTFMgY29tbWFuZHMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIEVMUyByaW5nIGV2ZW50CisgKiBoYW5kbGVyIHdpdGggbm8gbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uIGZyZWVzIG1lbW9yeSByZXNvdXJjZXMKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWJvcnQgaW9jYi4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NsaV9hYm9ydF9lbHNfY21wbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAogCQkJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC0zNjY1LDYgKzQ1OTgsMTcgQEAKIAlyZXR1cm47CiB9CiAKKy8qKgorICogbHBmY19pZ25vcmVfZWxzX2NtcGw6IENvbXBsZXRpb24gaGFuZGxlciBmb3IgYWJvcnRlZCBFTFMgY29tbWFuZC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBjbWRpb2NiOiBQb2ludGVyIHRvIGRyaXZlciBjb21tYW5kIGlvY2Igb2JqZWN0LgorICogQHJzcGlvY2I6IFBvaW50ZXIgdG8gZHJpdmVyIHJlc3BvbnNlIGlvY2Igb2JqZWN0LgorICoKKyAqIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBTTEkgcmluZyBldmVudCBoYW5kbGVyIHdpdGggbm8KKyAqIGxvY2sgaGVsZC4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGZvciBFTFMgY29tbWFuZHMKKyAqIHdoaWNoIGFyZSBhYm9ydGVkLiBUaGUgZnVuY3Rpb24gZnJlZXMgbWVtb3J5IHJlc291cmNlcyB1c2VkIGZvcgorICogdGhlIGFib3J0ZWQgRUxTIGNvbW1hbmRzLgorICoqLwogc3RhdGljIHZvaWQKIGxwZmNfaWdub3JlX2Vsc19jbXBsKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsCiAJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2IpCkBAIC0zNjczLDcgKzQ2MTcsNyBAQAogCiAJLyogRUxTIGNtZCB0YWcgPHVscElvVGFnPiBjb21wbGV0ZXMgKi8KIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLAotCQkJIjAxMzMgSWdub3JpbmcgRUxTIGNtZCB0YWcgeCV4IGNvbXBsZXRpb24gRGF0YTogIgorCQkJIjAxMzkgSWdub3JpbmcgRUxTIGNtZCB0YWcgeCV4IGNvbXBsZXRpb24gRGF0YTogIgogCQkJIngleCB4JXggeCV4XG4iLAogCQkJaXJzcC0+dWxwSW9UYWcsIGlyc3AtPnVscFN0YXR1cywKIAkJCWlyc3AtPnVuLnVscFdvcmRbNF0sIGlyc3AtPnVscFRpbWVvdXQpOwpAQCAtMzY4NCw2ICs0NjI4LDE3IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2lzc3VlX2Fib3J0X2lvdGFnOiBBYm9ydCBmdW5jdGlvbiBmb3IgYSBjb21tYW5kIGlvY2IuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KKyAqIEBjbWRpb2NiOiBQb2ludGVyIHRvIGRyaXZlciBjb21tYW5kIGlvY2Igb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWVzIGFuIGFib3J0IGlvY2IgZm9yIHRoZSBwcm92aWRlZCBjb21tYW5kCisgKiBpb2NiLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGhiYWxvY2sgaGVsZC4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIDAgd2hlbiBpdCBmYWlscyBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24KKyAqIGZhaWx1cmUgb3Igd2hlbiB0aGUgY29tbWFuZCBpb2NiIGlzIGFuIGFib3J0IHJlcXVlc3QuCisgKiovCiBpbnQKIGxwZmNfc2xpX2lzc3VlX2Fib3J0X2lvdGFnKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkJICAgc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IpCkBAIC0zNzQ4LDYgKzQ3MDMsOCBAQAogCQkJIGlhYnQtPnVuLmFjeHJpLmFib3J0SW9UYWcsIGFidHNpb2NicC0+aW90YWcpOwogCXJldHZhbCA9IF9fbHBmY19zbGlfaXNzdWVfaW9jYihwaGJhLCBwcmluZywgYWJ0c2lvY2JwLCAwKTsKIAorCWlmIChyZXR2YWwpCisJCV9fbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBhYnRzaW9jYnApOwogYWJvcnRfaW90YWdfZXhpdDoKIAkvKgogCSAqIENhbGxlciB0byB0aGlzIHJvdXRpbmUgc2hvdWxkIGNoZWNrIGZvciBJT0NCX0VSUk9SCkBAIC0zNzU3LDYgKzQ3MTQsMjkgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCisvKioKKyAqIGxwZmNfc2xpX3ZhbGlkYXRlX2ZjcF9pb2NiOiBGaWx0ZXJpbmcgZnVuY3Rpb24sIHVzZWQgdG8gZmluZCBjb21tYW5kcworICogICAgICAgICAgICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhIHZwb3J0L1NDU0kgdGFyZ2V0L2x1bi4KKyAqIEBpb2NicTogUG9pbnRlciB0byBkcml2ZXIgaW9jYiBvYmplY3QuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gZHJpdmVyIHZpcnR1YWwgcG9ydCBvYmplY3QuCisgKiBAdGd0X2lkOiBTQ1NJIElEIG9mIHRoZSB0YXJnZXQuCisgKiBAbHVuX2lkOiBMVU4gSUQgb2YgdGhlIHNjc2kgZGV2aWNlLgorICogQGN0eF9jbWQ6IExQRkNfQ1RYX0xVTi9MUEZDX0NUWF9UR1QvTFBGQ19DVFhfSE9TVAorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWN0cyBhcyBpb2NiIGZpbHRlciBmb3IgZnVuY3Rpb25zIHdoaWNoIGFib3J0IG9yIGNvdW50CisgKiBhbGwgRkNQIGlvY2JzIHBlbmRpbmcgb24gYSBsdW4vU0NTSSB0YXJnZXQvU0NTSSBob3N0LiBJdCB3aWxsIHJldHVybgorICogMCBpZiB0aGUgZmlsdGVyaW5nIGNyaXRlcmlhIGlzIG1ldCBmb3IgdGhlIGdpdmVuIGlvY2IgYW5kIHdpbGwgcmV0dXJuCisgKiAxIGlmIHRoZSBmaWx0ZXJpbmcgY3JpdGVyaWEgaXMgbm90IG1ldC4KKyAqIElmIGN0eF9jbWQgPT0gTFBGQ19DVFhfTFVOLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwIG9ubHkgaWYgdGhlCisgKiBnaXZlbiBpb2NiIGlzIGZvciB0aGUgU0NTSSBkZXZpY2Ugc3BlY2lmaWVkIGJ5IHZwb3J0LCB0Z3RfaWQgYW5kCisgKiBsdW5faWQgcGFyYW1ldGVyLgorICogSWYgY3R4X2NtZCA9PSBMUEZDX0NUWF9UR1QsICB0aGUgZnVuY3Rpb24gcmV0dXJucyAwIG9ubHkgaWYgdGhlCisgKiBnaXZlbiBpb2NiIGlzIGZvciB0aGUgU0NTSSB0YXJnZXQgc3BlY2lmaWVkIGJ5IHZwb3J0IGFuZCB0Z3RfaWQKKyAqIHBhcmFtZXRlcnMuCisgKiBJZiBjdHhfY21kID09IExQRkNfQ1RYX0hPU1QsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAgb25seSBpZiB0aGUKKyAqIGdpdmVuIGlvY2IgaXMgZm9yIHRoZSBTQ1NJIGhvc3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiB2cG9ydC4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gbG9ja3MgaGVsZC4KKyAqKi8KIHN0YXRpYyBpbnQKIGxwZmNfc2xpX3ZhbGlkYXRlX2ZjcF9pb2NiKHN0cnVjdCBscGZjX2lvY2JxICppb2NicSwgc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LAogCQkJICAgdWludDE2X3QgdGd0X2lkLCB1aW50NjRfdCBsdW5faWQsCkBAIC0zODAwLDYgKzQ3ODAsMjUgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogbHBmY19zbGlfc3VtX2lvY2I6IEZ1bmN0aW9uIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgRkNQIGlvY2JzIHBlbmRpbmcuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gdmlydHVhbCBwb3J0LgorICogQHRndF9pZDogU0NTSSBJRCBvZiB0aGUgdGFyZ2V0LgorICogQGx1bl9pZDogTFVOIElEIG9mIHRoZSBzY3NpIGRldmljZS4KKyAqIEBjdHhfY21kOiBMUEZDX0NUWF9MVU4vTFBGQ19DVFhfVEdUL0xQRkNfQ1RYX0hPU1QuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIG51bWJlciBvZiBGQ1AgY29tbWFuZHMgcGVuZGluZyBmb3IgdGhlIHZwb3J0LgorICogV2hlbiBjdHhfY21kID09IExQRkNfQ1RYX0xVTiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyIG9mIEZDUAorICogY29tbWFuZHMgcGVuZGluZyBvbiB0aGUgdnBvcnQgYXNzb2NpYXRlZCB3aXRoIFNDU0kgZGV2aWNlIHNwZWNpZmllZAorICogYnkgdGd0X2lkIGFuZCBsdW5faWQgcGFyYW1ldGVycy4KKyAqIFdoZW4gY3R4X2NtZCA9PSBMUEZDX0NUWF9UR1QsIHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bWJlciBvZiBGQ1AKKyAqIGNvbW1hbmRzIHBlbmRpbmcgb24gdGhlIHZwb3J0IGFzc29jaWF0ZWQgd2l0aCBTQ1NJIHRhcmdldCBzcGVjaWZpZWQKKyAqIGJ5IHRndF9pZCBwYXJhbWV0ZXIuCisgKiBXaGVuIGN0eF9jbWQgPT0gTFBGQ19DVFhfSE9TVCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyIG9mIEZDUAorICogY29tbWFuZHMgcGVuZGluZyBvbiB0aGUgdnBvcnQuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBpb2NicyB3aGljaCBzYXRpc2Z5IHRoZSBmaWx0ZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRob3V0IGFueSBsb2NrIGhlbGQuCisgKiovCiBpbnQKIGxwZmNfc2xpX3N1bV9pb2NiKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludDE2X3QgdGd0X2lkLCB1aW50NjRfdCBsdW5faWQsCiAJCSAgbHBmY19jdHhfY21kIGN0eF9jbWQpCkBAIC0zODE5LDYgKzQ4MTgsMTcgQEAKIAlyZXR1cm4gc3VtOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2Fib3J0X2ZjcF9jbXBsOiBDb21wbGV0aW9uIGhhbmRsZXIgZnVuY3Rpb24gZm9yIGFuIGFib3J0ZWQKKyAqICAgICAgIEZDUCBpb2NiLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0CisgKiBAY21kaW9jYjogUG9pbnRlciB0byBjb21tYW5kIGlvY2Igb2JqZWN0LgorICogQHJzcGlvY2I6IFBvaW50ZXIgdG8gcmVzcG9uc2UgaW9jYiBvYmplY3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbiBhYm9ydGVkIEZDUCBpb2NiIGNvbXBsZXRlcy4gVGhpcworICogZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSByaW5nIGV2ZW50IGhhbmRsZXIgd2l0aCBubyBsb2NrIGhlbGQuCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBpb2NiLgorICoqLwogdm9pZAogbHBmY19zbGlfYWJvcnRfZmNwX2NtcGwoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiwKIAkJCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NiKQpAQCAtMzgyNyw2ICs0ODM3LDI4IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2Fib3J0X2lvY2I6IFRoaXMgZnVuY3Rpb24gaXNzdWUgYWJvcnQgZm9yIGFsbCBTQ1NJIGNvbW1hbmRzCisgKiAgICAgICAgICBwZW5kaW5nIG9uIGEgU0NTSSBob3N0KHZwb3J0KS90YXJnZXQvbHVuLgorICogQHZwb3J0OiBQb2ludGVyIHRvIHZpcnR1YWwgcG9ydC4KKyAqIEBwcmluZzogUG9pbnRlciB0byBkcml2ZXIgU0xJIHJpbmcgb2JqZWN0LgorICogQHRndF9pZDogU0NTSSBJRCBvZiB0aGUgdGFyZ2V0LgorICogQGx1bl9pZDogTFVOIElEIG9mIHRoZSBzY3NpIGRldmljZS4KKyAqIEBhYm9ydF9jbWQ6IExQRkNfQ1RYX0xVTi9MUEZDX0NUWF9UR1QvTFBGQ19DVFhfSE9TVC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGFuIGFib3J0IGNvbW1hbmQgZm9yIGV2ZXJ5IFNDU0kgY29tbWFuZAorICogYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiB2aXJ0dWFsIHBvcnQgcGVuZGluZyBvbiB0aGUgcmluZworICogZmlsdGVyZWQgYnkgbHBmY19zbGlfdmFsaWRhdGVfZmNwX2lvY2IgZnVuY3Rpb24uCisgKiBXaGVuIGFib3J0X2NtZCA9PSBMUEZDX0NUWF9MVU4sIHRoZSBmdW5jdGlvbiBzZW5kcyBhYm9ydCBvbmx5IHRvIHRoZQorICogRkNQIGlvY2JzIGFzc29jaWF0ZWQgd2l0aCBsdW4gc3BlY2lmaWVkIGJ5IHRndF9pZCBhbmQgbHVuX2lkCisgKiBwYXJhbWV0ZXJzCisgKiBXaGVuIGFib3J0X2NtZCA9PSBMUEZDX0NUWF9UR1QsIHRoZSBmdW5jdGlvbiBzZW5kcyBhYm9ydCBvbmx5IHRvIHRoZQorICogRkNQIGlvY2JzIGFzc29jaWF0ZWQgd2l0aCBTQ1NJIHRhcmdldCBzcGVjaWZpZWQgYnkgdGd0X2lkIHBhcmFtZXRlci4KKyAqIFdoZW4gYWJvcnRfY21kID09IExQRkNfQ1RYX0hPU1QsIHRoZSBmdW5jdGlvbiBzZW5kcyBhYm9ydCB0byBhbGwKKyAqIEZDUCBpb2NicyBhc3NvY2lhdGVkIHdpdGggdmlydHVhbCBwb3J0LgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIG51bWJlciBvZiBpb2NicyBpdCBmYWlsZWQgdG8gYWJvcnQuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2tzIGhlbGQuCisgKiovCiBpbnQKIGxwZmNfc2xpX2Fib3J0X2lvY2Ioc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCiAJCSAgICB1aW50MTZfdCB0Z3RfaWQsIHVpbnQ2NF90IGx1bl9pZCwgbHBmY19jdHhfY21kIGFib3J0X2NtZCkKQEAgLTM4NzgsNiArNDkxMCwyNCBAQAogCXJldHVybiBlcnJjbnQ7CiB9CiAKKy8qKgorICogbHBmY19zbGlfd2FrZV9pb2NiX3dhaXQ6IGlvY2IgY29tcGxldGlvbiBoYW5kbGVyIGZvciBpb2NiIGlzc3VlZCB1c2luZworICogICAgICAgICAgICAgICAgICAgICAgICAgIGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBjbWRpb2NicTogUG9pbnRlciB0byBjb21tYW5kIGlvY2IuCisgKiBAcnNwaW9jYnE6IFBvaW50ZXIgdG8gcmVzcG9uc2UgaW9jYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGlvY2JzIGlzc3VlZCB1c2luZworICogbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0IGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUKKyAqIHJpbmcgZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRob3V0IGFueSBsb2NrIGhlbGQuIFRoaXMgZnVuY3Rpb24KKyAqIGNhbiBiZSBjYWxsZWQgZnJvbSBib3RoIHdvcmtlciB0aHJlYWQgY29udGV4dCBhbmQgaW50ZXJydXB0CisgKiBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGFsc28gY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIHRocmVhZCB3aGljaAorICogY2xlYW5zIHVwIHRoZSBTTEkgbGF5ZXIgb2JqZWN0cy4KKyAqIFRoaXMgZnVuY3Rpb24gY29weSB0aGUgY29udGVudHMgb2YgdGhlIHJlc3BvbnNlIGlvY2IgdG8gdGhlCisgKiByZXNwb25zZSBpb2NiIG1lbW9yeSBvYmplY3QgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciBvZgorICogbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0IGFuZCB0aGVuIHdha2VzIHVwIHRoZSB0aHJlYWQgd2hpY2gKKyAqIHNsZWVwcyBmb3IgdGhlIGlvY2IgY29tcGxldGlvbi4KKyAqKi8KIHN0YXRpYyB2b2lkCiBscGZjX3NsaV93YWtlX2lvY2Jfd2FpdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCiAJCQlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnEsCkBAIC0zODk5LDEzICs0OTQ5LDM2IEBACiAJcmV0dXJuOwogfQogCi0vKgotICogSXNzdWUgdGhlIGNhbGxlcidzIGlvY2IgYW5kIHdhaXQgZm9yIGl0cyBjb21wbGV0aW9uLCBidXQgbm8gbG9uZ2VyIHRoYW4gdGhlCi0gKiBjYWxsZXIncyB0aW1lb3V0LiAgTm90ZSB0aGF0IGlvY2JfZmxhZ3MgaXMgY2xlYXJlZCBiZWZvcmUgdGhlCi0gKiBscGZjX3NsaV9pc3N1ZV9jYWxsIHNpbmNlIHRoZSB3YWtlIHJvdXRpbmUgc2V0cyBhIHVuaXF1ZSB2YWx1ZSBhbmQgYnkKLSAqIGRlZmluaXRpb24gdGhpcyBpcyBhIHdhaXQgZnVuY3Rpb24uCi0gKi8KLQorLyoqCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQ6IFN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGlzc3VlIGlvY2IgY29tbWFuZHMuCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuLgorICogQHByaW5nOiBQb2ludGVyIHRvIHNsaSByaW5nLgorICogQHBpb2NiOiBQb2ludGVyIHRvIGNvbW1hbmQgaW9jYi4KKyAqIEBwcnNwaW9jYnE6IFBvaW50ZXIgdG8gcmVzcG9uc2UgaW9jYi4KKyAqIEB0aW1lb3V0OiBUaW1lb3V0IGluIG51bWJlciBvZiBzZWNvbmRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWVzIHRoZSBpb2NiIHRvIGZpcm13YXJlIGFuZCB3YWl0cyBmb3IgdGhlCisgKiBpb2NiIHRvIGNvbXBsZXRlLiBJZiB0aGUgaW9jYiBjb21tYW5kIGlzIG5vdAorICogY29tcGxldGVkIHdpdGhpbiB0aW1lb3V0IHNlY29uZHMsIGl0IHJldHVybnMgSU9DQl9USU1FRE9VVC4KKyAqIENhbGxlciBzaG91bGQgbm90IGZyZWUgdGhlIGlvY2IgcmVzb3VyY2VzIGlmIHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMgSU9DQl9USU1FRE9VVC4KKyAqIFRoZSBmdW5jdGlvbiB3YWl0cyBmb3IgdGhlIGlvY2IgY29tcGxldGlvbiB1c2luZyBhbgorICogbm9uLWludGVycnVwdGlibGUgd2FpdC4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzbGVlcCB3aGlsZSB3YWl0aW5nIGZvciBpb2NiIGNvbXBsZXRpb24uCisgKiBTbywgdGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIGFueSBjb250ZXh0IHdoaWNoCisgKiBkb2VzIG5vdCBhbGxvdyBzbGVlcGluZy4gRHVlIHRvIHRoZSBzYW1lIHJlYXNvbiwgdGhpcyBmdW5jdGlvbgorICogY2Fubm90IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdCBkaXNhYmxlZC4KKyAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBpb2NiIGNvbXBsZXRpb25zIG9jY3VyIHdoaWxlCisgKiB0aGlzIGZ1bmN0aW9uIHNsZWVwLiBTbywgdGhpcyBmdW5jdGlvbiBjYW5ub3QgYmUgY2FsbGVkIGZyb20KKyAqIHRoZSB0aHJlYWQgd2hpY2ggcHJvY2VzcyBpb2NiIGNvbXBsZXRpb24gZm9yIHRoaXMgcmluZy4KKyAqIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBpb2NiX2ZsYWcgb2YgdGhlIGlvY2Igb2JqZWN0IGJlZm9yZQorICogaXNzdWluZyB0aGUgaW9jYiBhbmQgdGhlIGlvY2IgY29tcGxldGlvbiBoYW5kbGVyIHNldHMgdGhpcworICogZmxhZyBhbmQgd2FrZXMgdGhpcyB0aHJlYWQgd2hlbiB0aGUgaW9jYiBjb21wbGV0ZXMuCisgKiBUaGUgY29udGVudHMgb2YgdGhlIHJlc3BvbnNlIGlvY2Igd2lsbCBiZSBjb3BpZWQgdG8gcHJzcGlvY2JxCisgKiBieSB0aGUgY29tcGxldGlvbiBoYW5kbGVyIHdoZW4gdGhlIGNvbW1hbmQgY29tcGxldGVzLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIElPQ0JfU1VDQ0VTUyB3aGVuIHN1Y2Nlc3MuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGxvY2sgaGVsZC4KKyAqKi8KIGludAogbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKIAkJCSBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcsCkBAIC0zOTYzLDcgKzUwMzYsNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX1NMSSwKLQkJCQkiOjAzMzIgSU9DQiB3YWl0IGlzc3VlIGZhaWxlZCwgRGF0YSB4JXhcbiIsCisJCQkJIjAzMzIgSU9DQiB3YWl0IGlzc3VlIGZhaWxlZCwgRGF0YSB4JXhcbiIsCiAJCQkJcmV0dmFsKTsKIAkJcmV0dmFsID0gSU9DQl9FUlJPUjsKIAl9CkBAIC0zOTgzLDYgKzUwNTYsMzIgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdDogU3luY2hyb25vdXMgZnVuY3Rpb24gdG8gaXNzdWUgbWFpbGJveC4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwbWJveHE6IFBvaW50ZXIgdG8gZHJpdmVyIG1haWxib3ggb2JqZWN0LgorICogQHRpbWVvdXQ6IFRpbWVvdXQgaW4gbnVtYmVyIG9mIHNlY29uZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpc3N1ZXMgdGhlIG1haWxib3ggdG8gZmlybXdhcmUgYW5kIHdhaXRzIGZvciB0aGUKKyAqIG1haWxib3ggY29tbWFuZCB0byBjb21wbGV0ZS4gSWYgdGhlIG1haWxib3ggY29tbWFuZCBpcyBub3QKKyAqIGNvbXBsZXRlZCB3aXRoaW4gdGltZW91dCBzZWNvbmRzLCBpdCByZXR1cm5zIE1CWF9USU1FT1VULgorICogVGhlIGZ1bmN0aW9uIHdhaXRzIGZvciB0aGUgbWFpbGJveCBjb21wbGV0aW9uIHVzaW5nIGFuCisgKiBpbnRlcnJ1cHRpYmxlIHdhaXQuIElmIHRoZSB0aHJlYWQgaXMgd29rZW4gdXAgZHVlIHRvIGEKKyAqIHNpZ25hbCwgTUJYX1RJTUVPVVQgZXJyb3IgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4gQ2FsbGVyCisgKiBzaG91bGQgbm90IGZyZWUgdGhlIG1haWxib3ggcmVzb3VyY2VzLCBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAqIE1CWF9USU1FT1VULgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHNsZWVwIHdoaWxlIHdhaXRpbmcgZm9yIG1haWxib3ggY29tcGxldGlvbi4KKyAqIFNvLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQgd2hpY2gKKyAqIGRvZXMgbm90IGFsbG93IHNsZWVwaW5nLiBEdWUgdG8gdGhlIHNhbWUgcmVhc29uLCB0aGlzIGZ1bmN0aW9uCisgKiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0IGRpc2FibGVkLgorICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIG1haWxib3ggY29tcGxldGlvbiBvY2N1cnMgd2hpbGUKKyAqIHRoaXMgZnVuY3Rpb24gc2xlZXAuIFNvLCB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBiZSBjYWxsZWQgZnJvbQorICogdGhlIHdvcmtlciB0aHJlYWQgd2hpY2ggcHJvY2Vzc2VzIG1haWxib3ggY29tcGxldGlvbi4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIEhCQSBtYW5hZ2VtZW50CisgKiBhcHBsaWNhdGlvbnMuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgTUJYX1NVQ0NFU1Mgd2hlbiBzdWNjZXNzZnVsLgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBsb2NrIGhlbGQuCisgKiovCiBpbnQKIGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1ib3hxLAogCQkJIHVpbnQzMl90IHRpbWVvdXQpCkBAIC00MDI3LDYgKzUxMjYsMTggQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCisvKioKKyAqIGxwZmNfc2xpX2ZsdXNoX21ib3hfcXVldWU6IG1haWxib3ggcXVldWUgY2xlYW51cCBmdW5jdGlvbi4KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGNsZWFudXAgYW55IHBlbmRpbmcgbWFpbGJveAorICogb2JqZWN0cyBpbiB0aGUgZHJpdmVyIHF1ZXVlIGJlZm9yZSBicmluZ2luZyB0aGUgSEJBIG9mZmxpbmUuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGlsZSByZXNldHRpbmcgdGhlIEhCQS4KKyAqIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBhbnkgbG9jayBoZWxkLiBUaGUgZnVuY3Rpb24KKyAqIHRha2VzIGhiYWxvY2sgdG8gdXBkYXRlIFNMSSBkYXRhIHN0cnVjdHVyZS4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIHdoZW4gdGhlcmUgaXMgYW4gYWN0aXZlIG1haWxib3gKKyAqIGNvbW1hbmQgcGVuZGluZyBlbHNlIHJldHVybnMgMC4KKyAqKi8KIGludAogbHBmY19zbGlfZmx1c2hfbWJveF9xdWV1ZShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQogewpAQCAtNDA1OCw4ICs1MTY5LDc0IEBACiAJcmV0dXJuIChwaGJhLT5zbGkuc2xpX2ZsYWcgJiBMUEZDX1NMSV9NQk9YX0FDVElWRSkgPyAxIDogMDsKIH0KIAorLyoqCisgKiBscGZjX3NsaV9jaGVja19lcmF0dDogY2hlY2sgZXJyb3IgYXR0ZW50aW9uIGV2ZW50cworICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9ybSB0aW1lciBzb2Z0IGludGVycnVwdCBjb250ZXh0IHRvIGNoZWNrIEhCQSdzCisgKiBlcnJvciBhdHRlbnRpb24gcmVnaXN0ZXIgYml0IGZvciBlcnJvciBhdHRlbnRpb24gZXZlbnRzLgorICoKKyAqIFRoaXMgZnVjbnRpb24gcmV0dXJucyAxIHdoZW4gdGhlcmUgaXMgRXJyb3IgQXR0ZW50aW9uIGluIHRoZSBIb3N0IEF0dGVudGlvbgorICogUmVnaXN0ZXIgYW5kIHJldHVybnMgMCBvdGhlcndpc2UuCisgKiovCitpbnQKK2xwZmNfc2xpX2NoZWNrX2VyYXR0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwl1aW50MzJfdCBoYV9jb3B5OworCisJLyogSWYgc29tZWJvZHkgaXMgd2FpdGluZyB0byBoYW5kbGUgYW4gZXJhdHQsIGRvbid0IHByb2Nlc3MgaXQKKwkgKiBoZXJlLiBUaGUgYnJka2lsbCBmdW5jdGlvbiB3aWxsIGRvIHRoaXMuCisJICovCisJaWYgKHBoYmEtPmxpbmtfZmxhZyAmIExTX0lHTk9SRV9FUkFUVCkKKwkJcmV0dXJuIDA7CisKKwkvKiBDaGVjayBpZiBpbnRlcnJ1cHQgaGFuZGxlciBoYW5kbGVzIHRoaXMgRVJBVFQgKi8KKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlpZiAocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRVJBVFRfSEFORExFRCkgeworCQkvKiBJbnRlcnJ1cHQgaGFuZGxlciBoYXMgaGFuZGxlZCBFUkFUVCAqLworCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBSZWFkIGNoaXAgSG9zdCBBdHRlbnRpb24gKEhBKSByZWdpc3RlciAqLworCWhhX2NvcHkgPSByZWFkbChwaGJhLT5IQXJlZ2FkZHIpOworCWlmIChoYV9jb3B5ICYgSEFfRVJBVFQpIHsKKwkJLyogUmVhZCBob3N0IHN0YXR1cyByZWdpc3RlciB0byByZXRyaWV2ZSBlcnJvciBldmVudCAqLworCQlscGZjX3NsaV9yZWFkX2hzKHBoYmEpOworCQkvKiBTZXQgdGhlIGRyaXZlciBIQSB3b3JrIGJpdG1hcCAqLworCQlwaGJhLT53b3JrX2hhIHw9IEhBX0VSQVRUOworCQkvKiBJbmRpY2F0ZSBwb2xsaW5nIGhhbmRsZXMgdGhpcyBFUkFUVCAqLworCQlwaGJhLT5oYmFfZmxhZyB8PSBIQkFfRVJBVFRfSEFORExFRDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJcmV0dXJuIDE7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbHBmY19zcF9pbnRyX2hhbmRsZXI6IFRoZSBzbG93LXBhdGggaW50ZXJydXB0IGhhbmRsZXIgb2YgbHBmYyBkcml2ZXIuCisgKiBAaXJxOiBJbnRlcnJ1cHQgbnVtYmVyLgorICogQGRldl9pZDogVGhlIGRldmljZSBjb250ZXh0IHBvaW50ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBkaXJlY3RseSBjYWxsZWQgZnJvbSB0aGUgUENJIGxheWVyIGFzIGFuIGludGVycnVwdAorICogc2VydmljZSByb3V0aW5lIHdoZW4gdGhlIGRldmljZSBpcyBlbmFibGVkIHdpdGggTVNJLVggbXVsdGktbWVzc2FnZQorICogaW50ZXJydXB0IG1vZGUgYW5kIHRoZXJlIGFyZSBzbG93LXBhdGggZXZlbnRzIGluIHRoZSBIQkEuIEhvd2V2ZXIsCisgKiB3aGVuIHRoZSBkZXZpY2UgaXMgZW5hYmxlZCB3aXRoIGVpdGhlciBNU0kgb3IgUGluLUlSUSBpbnRlcnJ1cHQgbW9kZSwKKyAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIGRldmljZS1sZXZlbCBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqIFdoZW4gdGhlIFBDSSBzbG90IGlzIGluIGVycm9yIHJlY292ZXJ5IG9yIHRoZSBIQkEgaXMgdW5kZXJnb2luZworICogaW5pdGlhbGl6YXRpb24sIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIG5vdCBwcm9jZXNzIHRoZSBpbnRlcnJ1cHQuCisgKiBUaGUgbGluayBhdHRlbnRpb24gYW5kIEVMUyByaW5nIGF0dGVudGlvbiBldmVudHMgYXJlIGhhbmRsZWQgYnkgdGhlCisgKiB3b3JrZXIgdGhyZWFkLiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgc2lnbmFscyB0aGUgd29ya2VyIHRocmVhZCBhbmQKKyAqIGFuZCByZXR1cm5zIGZvciB0aGVzZSBldmVudHMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhvdXQgYW55CisgKiBsb2NrIGhlbGQuIEl0IGdldHMgdGhlIGhiYWxvY2sgdG8gYWNjZXNzIGFuZCB1cGRhdGUgU0xJIGRhdGEKKyAqIHN0cnVjdHVyZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIElSUV9IQU5ETEVEIHdoZW4gaW50ZXJydXB0IGlzIGhhbmRsZWQgZWxzZSBpdAorICogcmV0dXJucyBJUlFfTk9ORS4KKyAqKi8KIGlycXJldHVybl90Ci1scGZjX2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitscGZjX3NwX2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGxwZmNfaGJhICAqcGhiYTsKIAl1aW50MzJfdCBoYV9jb3B5OwpAQCAtNDA3OCw0OCArNTI1NSw1MiBAQAogCSAqIEdldCB0aGUgZHJpdmVyJ3MgcGhiYSBzdHJ1Y3R1cmUgZnJvbSB0aGUgZGV2X2lkIGFuZAogCSAqIGFzc3VtZSB0aGUgSEJBIGlzIG5vdCBpbnRlcnJ1cHRpbmcuCiAJICovCi0JcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKikgZGV2X2lkOworCXBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopZGV2X2lkOwogCiAJaWYgKHVubGlrZWx5KCFwaGJhKSkKIAkJcmV0dXJuIElSUV9OT05FOwogCi0JLyogSWYgdGhlIHBjaSBjaGFubmVsIGlzIG9mZmxpbmUsIGlnbm9yZSBhbGwgdGhlIGludGVycnVwdHMuICovCi0JaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUocGhiYS0+cGNpZGV2KSkpCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCXBoYmEtPnNsaS5zbGlzdGF0LnNsaV9pbnRyKys7Ci0KIAkvKgotCSAqIENhbGwgdGhlIEhCQSB0byBzZWUgaWYgaXQgaXMgaW50ZXJydXB0aW5nLiAgSWYgbm90LCBkb24ndCBjbGFpbQotCSAqIHRoZSBpbnRlcnJ1cHQKKwkgKiBTdHVmZiBuZWVkcyB0byBiZSBhdHRlbnRlZCB0byB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBhcyBhbgorCSAqIGluZGl2aWR1YWwgaW50ZXJydXB0IGhhbmRsZXIgaW4gTVNJLVggbXVsdGktbWVzc2FnZSBpbnRlcnJ1cHQgbW9kZQogCSAqLwotCi0JLyogSWdub3JlIGFsbCBpbnRlcnJ1cHRzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gKi8KLQlpZiAodW5saWtlbHkocGhiYS0+bGlua19zdGF0ZSA8IExQRkNfTElOS19ET1dOKSkKLQkJcmV0dXJuIElSUV9OT05FOwotCi0JLyoKLQkgKiBSZWFkIGhvc3QgYXR0ZW50aW9uIHJlZ2lzdGVyIHRvIGRldGVybWluZSBpbnRlcnJ1cHQgc291cmNlCi0JICogQ2xlYXIgQXR0ZW50aW9uIFNvdXJjZXMsIGV4Y2VwdCBFcnJvciBBdHRlbnRpb24gKHRvCi0JICogcHJlc2VydmUgc3RhdHVzKSBhbmQgTGluayBBdHRlbnRpb24KLQkgKi8KLQlzcGluX2xvY2soJnBoYmEtPmhiYWxvY2spOwotCWhhX2NvcHkgPSByZWFkbChwaGJhLT5IQXJlZ2FkZHIpOwotCS8qIElmIHNvbWVib2R5IGlzIHdhaXRpbmcgdG8gaGFuZGxlIGFuIGVyYXR0IGRvbid0IHByb2Nlc3MgaXQKLQkgKiBoZXJlLiAgVGhlIGJyZGtpbGwgZnVuY3Rpb24gd2lsbCBkbyB0aGlzLgotCSAqLwotCWlmIChwaGJhLT5saW5rX2ZsYWcgJiBMU19JR05PUkVfRVJBVFQpCi0JCWhhX2NvcHkgJj0gfkhBX0VSQVRUOwotCXdyaXRlbCgoaGFfY29weSAmIH4oSEFfTEFUVCB8IEhBX0VSQVRUKSksIHBoYmEtPkhBcmVnYWRkcik7Ci0JcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsgLyogZmx1c2ggKi8KLQlzcGluX3VubG9jaygmcGhiYS0+aGJhbG9jayk7Ci0KLQlpZiAodW5saWtlbHkoIWhhX2NvcHkpKQotCQlyZXR1cm4gSVJRX05PTkU7CisJaWYgKHBoYmEtPmludHJfdHlwZSA9PSBNU0lYKSB7CisJCS8qIElmIHRoZSBwY2kgY2hhbm5lbCBpcyBvZmZsaW5lLCBpZ25vcmUgYWxsIHRoZSBpbnRlcnJ1cHRzICovCisJCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKHBoYmEtPnBjaWRldikpKQorCQkJcmV0dXJuIElSUV9OT05FOworCQkvKiBVcGRhdGUgZGV2aWNlLWxldmVsIGludGVycnVwdCBzdGF0aXN0aWNzICovCisJCXBoYmEtPnNsaS5zbGlzdGF0LnNsaV9pbnRyKys7CisJCS8qIElnbm9yZSBhbGwgaW50ZXJydXB0cyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICovCisJCWlmICh1bmxpa2VseShwaGJhLT5saW5rX3N0YXRlIDwgTFBGQ19MSU5LX0RPV04pKQorCQkJcmV0dXJuIElSUV9OT05FOworCQkvKiBOZWVkIHRvIHJlYWQgSEEgUkVHIGZvciBzbG93LXBhdGggZXZlbnRzICovCisJCXNwaW5fbG9jaygmcGhiYS0+aGJhbG9jayk7CisJCWhhX2NvcHkgPSByZWFkbChwaGJhLT5IQXJlZ2FkZHIpOworCQkvKiBJZiBzb21lYm9keSBpcyB3YWl0aW5nIHRvIGhhbmRsZSBhbiBlcmF0dCBkb24ndCBwcm9jZXNzIGl0CisJCSAqIGhlcmUuIFRoZSBicmRraWxsIGZ1bmN0aW9uIHdpbGwgZG8gdGhpcy4KKwkJICovCisJCWlmIChwaGJhLT5saW5rX2ZsYWcgJiBMU19JR05PUkVfRVJBVFQpCisJCQloYV9jb3B5ICY9IH5IQV9FUkFUVDsKKwkJLyogQ2hlY2sgdGhlIG5lZWQgZm9yIGhhbmRsaW5nIEVSQVRUIGluIGludGVycnVwdCBoYW5kbGVyICovCisJCWlmIChoYV9jb3B5ICYgSEFfRVJBVFQpIHsKKwkJCWlmIChwaGJhLT5oYmFfZmxhZyAmIEhCQV9FUkFUVF9IQU5ETEVEKQorCQkJCS8qIEVSQVRUIHBvbGxpbmcgaGFzIGhhbmRsZWQgRVJBVFQgKi8KKwkJCQloYV9jb3B5ICY9IH5IQV9FUkFUVDsKKwkJCWVsc2UKKwkJCQkvKiBJbmRpY2F0ZSBpbnRlcnJ1cHQgaGFuZGxlciBoYW5kbGVzIEVSQVRUICovCisJCQkJcGhiYS0+aGJhX2ZsYWcgfD0gSEJBX0VSQVRUX0hBTkRMRUQ7CisJCX0KKwkJLyogQ2xlYXIgdXAgb25seSBhdHRlbnRpb24gc291cmNlIHJlbGF0ZWQgdG8gc2xvdy1wYXRoICovCisJCXdyaXRlbCgoaGFfY29weSAmIChIQV9NQkFUVCB8IEhBX1IyX0NMUl9NU0spKSwKKwkJCXBoYmEtPkhBcmVnYWRkcik7CisJCXJlYWRsKHBoYmEtPkhBcmVnYWRkcik7IC8qIGZsdXNoICovCisJCXNwaW5fdW5sb2NrKCZwaGJhLT5oYmFsb2NrKTsKKwl9IGVsc2UKKwkJaGFfY29weSA9IHBoYmEtPmhhX2NvcHk7CiAKIAl3b3JrX2hhX2NvcHkgPSBoYV9jb3B5ICYgcGhiYS0+d29ya19oYV9tYXNrOwogCi0JaWYgKHVubGlrZWx5KHdvcmtfaGFfY29weSkpIHsKKwlpZiAod29ya19oYV9jb3B5KSB7CiAJCWlmICh3b3JrX2hhX2NvcHkgJiBIQV9MQVRUKSB7CiAJCQlpZiAocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19QUk9DRVNTX0xBKSB7CiAJCQkJLyoKQEAgLTQxMzgsNyArNTMxOSw3IEBACiAJCQkJd29ya19oYV9jb3B5ICY9IH5IQV9MQVRUOwogCQl9CiAKLQkJaWYgKHdvcmtfaGFfY29weSAmIH4oSEFfRVJBVFR8SEFfTUJBVFR8SEFfTEFUVCkpIHsKKwkJaWYgKHdvcmtfaGFfY29weSAmIH4oSEFfRVJBVFQgfCBIQV9NQkFUVCB8IEhBX0xBVFQpKSB7CiAJCQkvKgogCQkJICogVHVybiBvZmYgU2xvdyBSaW5ncyBpbnRlcnJ1cHRzLCBMUEZDX0VMU19SSU5HIGlzCiAJCQkgKiB0aGUgb25seSBzbG93IHJpbmcuCkBAIC00MTc5LDMxICs1MzYwLDEzIEBACiAJCQkJc3Bpbl91bmxvY2soJnBoYmEtPmhiYWxvY2spOwogCQkJfQogCQl9Ci0KLQkJaWYgKHdvcmtfaGFfY29weSAmIEhBX0VSQVRUKSB7Ci0JCQkvKgotCQkJICogVGhlcmUgd2FzIGEgbGluay9ib2FyZCBlcnJvci4gIFJlYWQgdGhlCi0JCQkgKiBzdGF0dXMgcmVnaXN0ZXIgdG8gcmV0cmlldmUgdGhlIGVycm9yIGV2ZW50Ci0JCQkgKiBhbmQgcHJvY2VzcyBpdC4KLQkJCSAqLwotCQkJcGhiYS0+c2xpLnNsaXN0YXQuZXJyX2F0dG5fZXZlbnQrKzsKLQkJCS8qIFNhdmUgc3RhdHVzIGluZm8gKi8KLQkJCXBoYmEtPndvcmtfaHMgPSByZWFkbChwaGJhLT5IU3JlZ2FkZHIpOwotCQkJcGhiYS0+d29ya19zdGF0dXNbMF0gPSByZWFkbChwaGJhLT5NQnNsaW1hZGRyICsgMHhhOCk7Ci0JCQlwaGJhLT53b3JrX3N0YXR1c1sxXSA9IHJlYWRsKHBoYmEtPk1Cc2xpbWFkZHIgKyAweGFjKTsKLQotCQkJLyogQ2xlYXIgQ2hpcCBlcnJvciBiaXQgKi8KLQkJCXdyaXRlbChIQV9FUkFUVCwgcGhiYS0+SEFyZWdhZGRyKTsKLQkJCXJlYWRsKHBoYmEtPkhBcmVnYWRkcik7IC8qIGZsdXNoICovCi0JCQlwaGJhLT5wcG9ydC0+c3RvcHBlZCA9IDE7Ci0JCX0KLQogCQlzcGluX2xvY2soJnBoYmEtPmhiYWxvY2spOwotCQlpZiAoKHdvcmtfaGFfY29weSAmIEhBX01CQVRUKSAmJgotCQkgICAgKHBoYmEtPnNsaS5tYm94X2FjdGl2ZSkpIHsKKwkJaWYgKHdvcmtfaGFfY29weSAmIEhBX0VSQVRUKQorCQkJbHBmY19zbGlfcmVhZF9ocyhwaGJhKTsKKwkJaWYgKCh3b3JrX2hhX2NvcHkgJiBIQV9NQkFUVCkgJiYgKHBoYmEtPnNsaS5tYm94X2FjdGl2ZSkpIHsKIAkJCXBtYiA9IHBoYmEtPnNsaS5tYm94X2FjdGl2ZTsKIAkJCXBtYm94ID0gJnBtYi0+bWI7Ci0JCQltYm94ID0gJnBoYmEtPnNsaW0ycC0+bWJ4OworCQkJbWJveCA9IHBoYmEtPm1ib3g7CiAJCQl2cG9ydCA9IHBtYi0+dnBvcnQ7CiAKIAkJCS8qIEZpcnN0IGNoZWNrIG91dCB0aGUgc3RhdHVzIHdvcmQgKi8KQEAgLTQyNzAsNyArNTQzMyw3IEBACiAJCQkJCQkJbHBmY19wcmludGZfbG9nKHBoYmEsCiAJCQkJCQkJS0VSTl9FUlIsCiAJCQkJCQkJTE9HX01CT1ggfCBMT0dfU0xJLAotCQkJCQkJCSIwMzA2IHJjIHNob3VsZCBoYXZlIgorCQkJCQkJCSIwMzUwIHJjIHNob3VsZCBoYXZlIgogCQkJCQkJCSJiZWVuIE1CWF9CVVNZIik7CiAJCQkJCQlnb3RvIHNlbmRfY3VycmVudF9tYm94OwogCQkJCQl9CkBAIC00MjgzLDYgKzU0NDYsNyBAQAogCQkJfQogCQl9IGVsc2UKIAkJCXNwaW5fdW5sb2NrKCZwaGJhLT5oYmFsb2NrKTsKKwogCQlpZiAoKHdvcmtfaGFfY29weSAmIEhBX01CQVRUKSAmJgogCQkgICAgKHBoYmEtPnNsaS5tYm94X2FjdGl2ZSA9PSBOVUxMKSkgewogc2VuZF9jdXJyZW50X21ib3g6CkBAIC00MzAyLDE1ICs1NDY2LDc0IEBACiAJCXNwaW5fdW5sb2NrKCZwaGJhLT5oYmFsb2NrKTsKIAkJbHBmY193b3JrZXJfd2FrZV91cChwaGJhKTsKIAl9CisJcmV0dXJuIElSUV9IQU5ETEVEOwogCi0JaGFfY29weSAmPSB+KHBoYmEtPndvcmtfaGFfbWFzayk7Cit9IC8qIGxwZmNfc3BfaW50cl9oYW5kbGVyICovCisKKy8qKgorICogbHBmY19mcF9pbnRyX2hhbmRsZXI6IFRoZSBmYXN0LXBhdGggaW50ZXJydXB0IGhhbmRsZXIgb2YgbHBmYyBkcml2ZXIuCisgKiBAaXJxOiBJbnRlcnJ1cHQgbnVtYmVyLgorICogQGRldl9pZDogVGhlIGRldmljZSBjb250ZXh0IHBvaW50ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBkaXJlY3RseSBjYWxsZWQgZnJvbSB0aGUgUENJIGxheWVyIGFzIGFuIGludGVycnVwdAorICogc2VydmljZSByb3V0aW5lIHdoZW4gdGhlIGRldmljZSBpcyBlbmFibGVkIHdpdGggTVNJLVggbXVsdGktbWVzc2FnZQorICogaW50ZXJydXB0IG1vZGUgYW5kIHRoZXJlIGlzIGEgZmFzdC1wYXRoIEZDUCBJT0NCIHJpbmcgZXZlbnQgaW4gdGhlCisgKiBIQkEuIEhvd2V2ZXIsIHdoZW4gdGhlIGRldmljZSBpcyBlbmFibGVkIHdpdGggZWl0aGVyIE1TSSBvciBQaW4tSVJRCisgKiBpbnRlcnJ1cHQgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXMgcGFydCBvZiB0aGUgZGV2aWNlLWxldmVsCisgKiBpbnRlcnJ1cHQgaGFuZGxlci4gV2hlbiB0aGUgUENJIHNsb3QgaXMgaW4gZXJyb3IgcmVjb3Zlcnkgb3IgdGhlIEhCQQorICogaXMgdW5kZXJnb2luZyBpbml0aWFsaXphdGlvbiwgdGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwgbm90IHByb2Nlc3MKKyAqIHRoZSBpbnRlcnJ1cHQuIFRoZSBTQ1NJIEZDUCBmYXN0LXBhdGggcmluZyBldmVudCBhcmUgaGFuZGxlZCBpbiB0aGUKKyAqIGludHJydXB0IGNvbnRleHQuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2sgaGVsZC4gSXQKKyAqIGdldHMgdGhlIGhiYWxvY2sgdG8gYWNjZXNzIGFuZCB1cGRhdGUgU0xJIGRhdGEgc3RydWN0dXJlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgSVJRX0hBTkRMRUQgd2hlbiBpbnRlcnJ1cHQgaXMgaGFuZGxlZCBlbHNlIGl0CisgKiByZXR1cm5zIElSUV9OT05FLgorICoqLworaXJxcmV0dXJuX3QKK2xwZmNfZnBfaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbHBmY19oYmEgICpwaGJhOworCXVpbnQzMl90IGhhX2NvcHk7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7CisKKwkvKiBHZXQgdGhlIGRyaXZlcidzIHBoYmEgc3RydWN0dXJlIGZyb20gdGhlIGRldl9pZCBhbmQKKwkgKiBhc3N1bWUgdGhlIEhCQSBpcyBub3QgaW50ZXJydXB0aW5nLgorCSAqLworCXBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopIGRldl9pZDsKKworCWlmICh1bmxpa2VseSghcGhiYSkpCisJCXJldHVybiBJUlFfTk9ORTsKIAogCS8qCi0JICogUHJvY2VzcyBhbGwgZXZlbnRzIG9uIEZDUCByaW5nLiAgVGFrZSB0aGUgb3B0aW1pemVkIHBhdGggZm9yCi0JICogRkNQIElPLiAgQW55IG90aGVyIElPIGlzIHNsb3cgcGF0aCBhbmQgaXMgaGFuZGxlZCBieQotCSAqIHRoZSB3b3JrZXIgdGhyZWFkLgorCSAqIFN0dWZmIG5lZWRzIHRvIGJlIGF0dGVudGVkIHRvIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGFzIGFuCisJICogaW5kaXZpZHVhbCBpbnRlcnJ1cHQgaGFuZGxlciBpbiBNU0ktWCBtdWx0aS1tZXNzYWdlIGludGVycnVwdCBtb2RlCiAJICovCi0Jc3RhdHVzID0gKGhhX2NvcHkgJiAoSEFfUlhNQVNLICA8PCAoNCpMUEZDX0ZDUF9SSU5HKSkpOworCWlmIChwaGJhLT5pbnRyX3R5cGUgPT0gTVNJWCkgeworCQkvKiBJZiBwY2kgY2hhbm5lbCBpcyBvZmZsaW5lLCBpZ25vcmUgYWxsIHRoZSBpbnRlcnJ1cHRzICovCisJCWlmICh1bmxpa2VseShwY2lfY2hhbm5lbF9vZmZsaW5lKHBoYmEtPnBjaWRldikpKQorCQkJcmV0dXJuIElSUV9OT05FOworCQkvKiBVcGRhdGUgZGV2aWNlLWxldmVsIGludGVycnVwdCBzdGF0aXN0aWNzICovCisJCXBoYmEtPnNsaS5zbGlzdGF0LnNsaV9pbnRyKys7CisJCS8qIElnbm9yZSBhbGwgaW50ZXJydXB0cyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICovCisJCWlmICh1bmxpa2VseShwaGJhLT5saW5rX3N0YXRlIDwgTFBGQ19MSU5LX0RPV04pKQorCQkJcmV0dXJuIElSUV9OT05FOworCQkvKiBOZWVkIHRvIHJlYWQgSEEgUkVHIGZvciBGQ1AgcmluZyBhbmQgb3RoZXIgcmluZyBldmVudHMgKi8KKwkJaGFfY29weSA9IHJlYWRsKHBoYmEtPkhBcmVnYWRkcik7CisJCS8qIENsZWFyIHVwIG9ubHkgYXR0ZW50aW9uIHNvdXJjZSByZWxhdGVkIHRvIGZhc3QtcGF0aCAqLworCQlzcGluX2xvY2soJnBoYmEtPmhiYWxvY2spOworCQl3cml0ZWwoKGhhX2NvcHkgJiAoSEFfUjBfQ0xSX01TSyB8IEhBX1IxX0NMUl9NU0spKSwKKwkJCXBoYmEtPkhBcmVnYWRkcik7CisJCXJlYWRsKHBoYmEtPkhBcmVnYWRkcik7IC8qIGZsdXNoICovCisJCXNwaW5fdW5sb2NrKCZwaGJhLT5oYmFsb2NrKTsKKwl9IGVsc2UKKwkJaGFfY29weSA9IHBoYmEtPmhhX2NvcHk7CisKKwkvKgorCSAqIFByb2Nlc3MgYWxsIGV2ZW50cyBvbiBGQ1AgcmluZy4gVGFrZSB0aGUgb3B0aW1pemVkIHBhdGggZm9yIEZDUCBJTy4KKwkgKi8KKwloYV9jb3B5ICY9IH4ocGhiYS0+d29ya19oYV9tYXNrKTsKKworCXN0YXR1cyA9IChoYV9jb3B5ICYgKEhBX1JYTUFTSyA8PCAoNCpMUEZDX0ZDUF9SSU5HKSkpOwogCXN0YXR1cyA+Pj0gKDQqTFBGQ19GQ1BfUklORyk7CiAJaWYgKHN0YXR1cyAmIEhBX1JYTUFTSykKIAkJbHBmY19zbGlfaGFuZGxlX2Zhc3RfcmluZ19ldmVudChwaGJhLApAQCAtNDMxOSwxMSArNTU0MiwxMCBAQAogCiAJaWYgKHBoYmEtPmNmZ19tdWx0aV9yaW5nX3N1cHBvcnQgPT0gMikgewogCQkvKgotCQkgKiBQcm9jZXNzIGFsbCBldmVudHMgb24gZXh0cmEgcmluZy4gIFRha2UgdGhlIG9wdGltaXplZCBwYXRoCi0JCSAqIGZvciBleHRyYSByaW5nIElPLiAgQW55IG90aGVyIElPIGlzIHNsb3cgcGF0aCBhbmQgaXMgaGFuZGxlZAotCQkgKiBieSB0aGUgd29ya2VyIHRocmVhZC4KKwkJICogUHJvY2VzcyBhbGwgZXZlbnRzIG9uIGV4dHJhIHJpbmcuIFRha2UgdGhlIG9wdGltaXplZCBwYXRoCisJCSAqIGZvciBleHRyYSByaW5nIElPLgogCQkgKi8KLQkJc3RhdHVzID0gKGhhX2NvcHkgJiAoSEFfUlhNQVNLICA8PCAoNCpMUEZDX0VYVFJBX1JJTkcpKSk7CisJCXN0YXR1cyA9IChoYV9jb3B5ICYgKEhBX1JYTUFTSyA8PCAoNCpMUEZDX0VYVFJBX1JJTkcpKSk7CiAJCXN0YXR1cyA+Pj0gKDQqTFBGQ19FWFRSQV9SSU5HKTsKIAkJaWYgKHN0YXR1cyAmIEhBX1JYTUFTSykgewogCQkJbHBmY19zbGlfaGFuZGxlX2Zhc3RfcmluZ19ldmVudChwaGJhLApAQCAtNDMzMiw1ICs1NTU0LDEwNiBAQAogCQl9CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKK30gIC8qIGxwZmNfZnBfaW50cl9oYW5kbGVyICovCiAKLX0gLyogbHBmY19pbnRyX2hhbmRsZXIgKi8KKy8qKgorICogbHBmY19pbnRyX2hhbmRsZXI6IFRoZSBkZXZpY2UtbGV2ZWwgaW50ZXJydXB0IGhhbmRsZXIgb2YgbHBmYyBkcml2ZXIuCisgKiBAaXJxOiBJbnRlcnJ1cHQgbnVtYmVyLgorICogQGRldl9pZDogVGhlIGRldmljZSBjb250ZXh0IHBvaW50ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgZGV2aWNlLWxldmVsIGludGVycnVwdCBoYW5kbGVyIGNhbGxlZCBmcm9tIHRoZSBQQ0kKKyAqIGxheWVyIHdoZW4gZWl0aGVyIE1TSSBvciBQaW4tSVJRIGludGVycnVwdCBtb2RlIGlzIGVuYWJsZWQgYW5kIHRoZXJlIGlzCisgKiBhbiBldmVudCBpbiB0aGUgSEJBIHdoaWNoIHJlcXVpcmVzIGRyaXZlciBhdHRlbnRpb24uIFRoaXMgZnVuY3Rpb24KKyAqIGludm9rZXMgdGhlIHNsb3ctcGF0aCBpbnRlcnJ1cHQgYXR0ZW50aW9uIGhhbmRsaW5nIGZ1bmN0aW9uIGFuZCBmYXN0LXBhdGgKKyAqIGludGVycnVwdCBhdHRlbnRpb24gaGFuZGxpbmcgZnVuY3Rpb24gaW4gdHVybiB0byBwcm9jZXNzIHRoZSByZWxldmFudAorICogSEJBIGF0dGVudGlvbiBldmVudHMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhvdXQgYW55IGxvY2sgaGVsZC4gSXQKKyAqIGdldHMgdGhlIGhiYWxvY2sgdG8gYWNjZXNzIGFuZCB1cGRhdGUgU0xJIGRhdGEgc3RydWN0dXJlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgSVJRX0hBTkRMRUQgd2hlbiBpbnRlcnJ1cHQgaXMgaGFuZGxlZCwgZWxzZSBpdAorICogcmV0dXJucyBJUlFfTk9ORS4KKyAqKi8KK2lycXJldHVybl90CitscGZjX2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGxwZmNfaGJhICAqcGhiYTsKKwlpcnFyZXR1cm5fdCBzcF9pcnFfcmMsIGZwX2lycV9yYzsKKwl1bnNpZ25lZCBsb25nIHN0YXR1czEsIHN0YXR1czI7CisKKwkvKgorCSAqIEdldCB0aGUgZHJpdmVyJ3MgcGhiYSBzdHJ1Y3R1cmUgZnJvbSB0aGUgZGV2X2lkIGFuZAorCSAqIGFzc3VtZSB0aGUgSEJBIGlzIG5vdCBpbnRlcnJ1cHRpbmcuCisJICovCisJcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKikgZGV2X2lkOworCisJaWYgKHVubGlrZWx5KCFwaGJhKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJLyogSWYgdGhlIHBjaSBjaGFubmVsIGlzIG9mZmxpbmUsIGlnbm9yZSBhbGwgdGhlIGludGVycnVwdHMuICovCisJaWYgKHVubGlrZWx5KHBjaV9jaGFubmVsX29mZmxpbmUocGhiYS0+cGNpZGV2KSkpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIFVwZGF0ZSBkZXZpY2UgbGV2ZWwgaW50ZXJydXB0IHN0YXRpc3RpY3MgKi8KKwlwaGJhLT5zbGkuc2xpc3RhdC5zbGlfaW50cisrOworCisJLyogSWdub3JlIGFsbCBpbnRlcnJ1cHRzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gKi8KKwlpZiAodW5saWtlbHkocGhiYS0+bGlua19zdGF0ZSA8IExQRkNfTElOS19ET1dOKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3Bpbl9sb2NrKCZwaGJhLT5oYmFsb2NrKTsKKwlwaGJhLT5oYV9jb3B5ID0gcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsKKwlpZiAodW5saWtlbHkoIXBoYmEtPmhhX2NvcHkpKSB7CisJCXNwaW5fdW5sb2NrKCZwaGJhLT5oYmFsb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0gZWxzZSBpZiAocGhiYS0+aGFfY29weSAmIEhBX0VSQVRUKSB7CisJCWlmIChwaGJhLT5oYmFfZmxhZyAmIEhCQV9FUkFUVF9IQU5ETEVEKQorCQkJLyogRVJBVFQgcG9sbGluZyBoYXMgaGFuZGxlZCBFUkFUVCAqLworCQkJcGhiYS0+aGFfY29weSAmPSB+SEFfRVJBVFQ7CisJCWVsc2UKKwkJCS8qIEluZGljYXRlIGludGVycnVwdCBoYW5kbGVyIGhhbmRsZXMgRVJBVFQgKi8KKwkJCXBoYmEtPmhiYV9mbGFnIHw9IEhCQV9FUkFUVF9IQU5ETEVEOworCX0KKworCS8qIENsZWFyIGF0dGVudGlvbiBzb3VyY2VzIGV4Y2VwdCBsaW5rIGFuZCBlcnJvciBhdHRlbnRpb25zICovCisJd3JpdGVsKChwaGJhLT5oYV9jb3B5ICYgfihIQV9MQVRUIHwgSEFfRVJBVFQpKSwgcGhiYS0+SEFyZWdhZGRyKTsKKwlyZWFkbChwaGJhLT5IQXJlZ2FkZHIpOyAvKiBmbHVzaCAqLworCXNwaW5fdW5sb2NrKCZwaGJhLT5oYmFsb2NrKTsKKworCS8qCisJICogSW52b2tlcyBzbG93LXBhdGggaG9zdCBhdHRlbnRpb24gaW50ZXJydXB0IGhhbmRsaW5nIGFzIGFwcHJvcHJpYXRlLgorCSAqLworCisJLyogc3RhdHVzIG9mIGV2ZW50cyB3aXRoIG1haWxib3ggYW5kIGxpbmsgYXR0ZW50aW9uICovCisJc3RhdHVzMSA9IHBoYmEtPmhhX2NvcHkgJiAoSEFfTUJBVFQgfCBIQV9MQVRUIHwgSEFfRVJBVFQpOworCisJLyogc3RhdHVzIG9mIGV2ZW50cyB3aXRoIEVMUyByaW5nICovCisJc3RhdHVzMiA9IChwaGJhLT5oYV9jb3B5ICYgKEhBX1JYTUFTSyAgPDwgKDQqTFBGQ19FTFNfUklORykpKTsKKwlzdGF0dXMyID4+PSAoNCpMUEZDX0VMU19SSU5HKTsKKworCWlmIChzdGF0dXMxIHx8IChzdGF0dXMyICYgSEFfUlhNQVNLKSkKKwkJc3BfaXJxX3JjID0gbHBmY19zcF9pbnRyX2hhbmRsZXIoaXJxLCBkZXZfaWQpOworCWVsc2UKKwkJc3BfaXJxX3JjID0gSVJRX05PTkU7CisKKwkvKgorCSAqIEludm9rZSBmYXN0LXBhdGggaG9zdCBhdHRlbnRpb24gaW50ZXJydXB0IGhhbmRsaW5nIGFzIGFwcHJvcHJpYXRlLgorCSAqLworCisJLyogc3RhdHVzIG9mIGV2ZW50cyB3aXRoIEZDUCByaW5nICovCisJc3RhdHVzMSA9IChwaGJhLT5oYV9jb3B5ICYgKEhBX1JYTUFTSyA8PCAoNCpMUEZDX0ZDUF9SSU5HKSkpOworCXN0YXR1czEgPj49ICg0KkxQRkNfRkNQX1JJTkcpOworCisJLyogc3RhdHVzIG9mIGV2ZW50cyB3aXRoIGV4dHJhIHJpbmcgKi8KKwlpZiAocGhiYS0+Y2ZnX211bHRpX3Jpbmdfc3VwcG9ydCA9PSAyKSB7CisJCXN0YXR1czIgPSAocGhiYS0+aGFfY29weSAmIChIQV9SWE1BU0sgPDwgKDQqTFBGQ19FWFRSQV9SSU5HKSkpOworCQlzdGF0dXMyID4+PSAoNCpMUEZDX0VYVFJBX1JJTkcpOworCX0gZWxzZQorCQlzdGF0dXMyID0gMDsKKworCWlmICgoc3RhdHVzMSAmIEhBX1JYTUFTSykgfHwgKHN0YXR1czIgJiBIQV9SWE1BU0spKQorCQlmcF9pcnFfcmMgPSBscGZjX2ZwX2ludHJfaGFuZGxlcihpcnEsIGRldl9pZCk7CisJZWxzZQorCQlmcF9pcnFfcmMgPSBJUlFfTk9ORTsKKworCS8qIFJldHVybiBkZXZpY2UtbGV2ZWwgaW50ZXJydXB0IGhhbmRsaW5nIHN0YXR1cyAqLworCXJldHVybiAoc3BfaXJxX3JjID09IElSUV9IQU5ETEVEKSA/IHNwX2lycV9yYyA6IGZwX2lycV9yYzsKK30gIC8qIGxwZmNfaW50cl9oYW5kbGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaAppbmRleCA3MjQ5ZmQyLi44ODM5Mzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmgKQEAgLTIzMyw2ICsyMzMsNyBAQAogI2RlZmluZSBMUEZDX1NMSTJfQUNUSVZFICAgICAgICAgIDB4MjAwCS8qIFNMSTIgb3ZlcmxheSBpbiBmaXJtd2FyZSBpcyBhY3RpdmUgKi8KICNkZWZpbmUgTFBGQ19QUk9DRVNTX0xBICAgICAgICAgICAweDQwMAkvKiBBYmxlIHRvIHByb2Nlc3MgbGluayBhdHRlbnRpb24gKi8KICNkZWZpbmUgTFBGQ19CTE9DS19NR01UX0lPICAgICAgICAweDgwMAkvKiBEb24ndCBhbGxvdyBtZ210IG1ieCBvciBpb2NiIGNtZHMgKi8KKyNkZWZpbmUgTFBGQ19NRU5MT19NQUlOVCAgICAgICAgICAweDEwMDAgLyogbmVlZCBmb3IgbWVubCBmdyBkb3dubG9hZCAqLwogCiAJc3RydWN0IGxwZmNfc2xpX3JpbmcgcmluZ1tMUEZDX01BWF9SSU5HXTsKIAlpbnQgZmNwX3Jpbmc7CQkvKiByaW5nIHVzZWQgZm9yIEZDUCBpbml0aWF0b3IgY29tbWFuZHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKaW5kZXggYWQyNGNhYy4uY2M0M2U5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKQEAgLTE4LDkgKzE4LDExIEBACiAgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4yLjciCisjZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMi44IgogCi0jZGVmaW5lIExQRkNfRFJJVkVSX05BTUUgImxwZmMiCisjZGVmaW5lIExQRkNfRFJJVkVSX05BTUUJCSJscGZjIgorI2RlZmluZSBMUEZDX1NQX0RSSVZFUl9IQU5ETEVSX05BTUUJImxwZmM6c3AiCisjZGVmaW5lIExQRkNfRlBfRFJJVkVSX0hBTkRMRVJfTkFNRQkibHBmYzpmcCIKIAogI2RlZmluZSBMUEZDX01PRFVMRV9ERVNDICJFbXVsZXggTGlnaHRQdWxzZSBGaWJyZSBDaGFubmVsIFNDU0kgZHJpdmVyICIgXAogCQlMUEZDX0RSSVZFUl9WRVJTSU9OCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKaW5kZXggMTA5Zjg5ZC4uYTdkZTFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfZmMuaD4KICNpbmNsdWRlICJscGZjX2h3LmgiCiAjaW5jbHVkZSAibHBmY19zbGkuaCIKKyNpbmNsdWRlICJscGZjX25sLmgiCiAjaW5jbHVkZSAibHBmY19kaXNjLmgiCiAjaW5jbHVkZSAibHBmY19zY3NpLmgiCiAjaW5jbHVkZSAibHBmYy5oIgpAQCAtMjA0LDYgKzIwNSw3NyBAQAogCXJldHVybiAxOwogfQogCisvKioKKyAqIGxwZmNfZGlzY292ZXJ5X3dhaXQ6IFdhaXQgZm9yIGRyaXZlciBkaXNjb3ZlcnkgdG8gcXVpZXNjZS4KKyAqIEB2cG9ydDogVGhlIHZpcnR1YWwgcG9ydCBmb3Igd2hpY2ggdGhpcyBjYWxsIGlzIGJlaW5nIGV4ZWN1dGVkLgorICoKKyAqIFRoaXMgZHJpdmVyIGNhbGxzIHRoaXMgcm91dGluZSBzcGVjaWZpY2FsbHkgZnJvbSBscGZjX3Zwb3J0X2RlbGV0ZQorICogdG8gZW5mb3JjZSBhIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiBvZiB2cG9ydAorICogZGVsZXRlIHJlbGF0aXZlIHRvIGRpc2NvdmVyeSBhY3Rpdml0aWVzLiAgVGhlCisgKiBscGZjX3Zwb3J0X2RlbGV0ZSByb3V0aW5lIHNob3VsZCBub3QgcmV0dXJuIHVudGlsIGl0CisgKiBjYW4gcmVhc29uYWJseSBndWFyYW50ZWUgdGhhdCBkaXNjb3ZlcnkgaGFzIHF1aWVzY2VkLgorICogUG9zdCBGRElTQyBMT0dPLCB0aGUgZHJpdmVyIG11c3Qgd2FpdCB1bnRpbCBpdHMgU0FOIHRlYXJkb3duIGlzCisgKiBjb21wbGV0ZSBhbmQgYWxsIHJlc291cmNlcyByZWNvdmVyZWQgYmVmb3JlIGFsbG93aW5nCisgKiBjbGVhbnVwLgorICoKKyAqIFRoaXMgcm91dGluZSBkb2VzIG5vdCByZXF1aXJlIGFueSBsb2NrcyBoZWxkLgorICoqLworc3RhdGljIHZvaWQgbHBmY19kaXNjb3Zlcnlfd2FpdChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCit7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJdWludDMyX3Qgd2FpdF9mbGFncyA9IDA7CisJdW5zaWduZWQgbG9uZyB3YWl0X3RpbWVfbWF4OworCXVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZTsKKworCXdhaXRfZmxhZ3MgPSBGQ19SU0NOX01PREUgfCBGQ19SU0NOX0RJU0NPVkVSWSB8IEZDX05MUF9NT1JFIHwKKwkJICAgICBGQ19SU0NOX0RFRkVSUkVEIHwgRkNfTkRJU0NfQUNUSVZFIHwgRkNfRElTQ19UTU87CisKKwkvKgorCSAqIFRoZSB0aW1lIGNvbnN0cmFpbnQgb24gdGhpcyBsb29wIGlzIGEgYmFsYW5jZSBiZXR3ZWVuIHRoZQorCSAqIGZhYnJpYyBSQV9UT1YgdmFsdWUgYW5kIGRldl9sb3NzIHRtby4gIFRoZSBkcml2ZXIncworCSAqIGRldmxvc3NfdG1vIGlzIDEwIGdpdmluZyB0aGlzIGxvb3AgYSAzeCBtdWx0aXBsaWVyIG1pbmltYWxseS4KKwkgKi8KKwl3YWl0X3RpbWVfbWF4ID0gbXNlY3NfdG9famlmZmllcygoKHBoYmEtPmZjX3JhdG92ICogMykgKyAzKSAqIDEwMDApOworCXdhaXRfdGltZV9tYXggKz0gamlmZmllczsKKwlzdGFydF90aW1lID0gamlmZmllczsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgd2FpdF90aW1lX21heCkpIHsKKwkJaWYgKCh2cG9ydC0+bnVtX2Rpc2Nfbm9kZXMgPiAwKSAgICB8fAorCQkgICAgKHZwb3J0LT5mY19mbGFnICYgd2FpdF9mbGFncykgIHx8CisJCSAgICAoKHZwb3J0LT5wb3J0X3N0YXRlID4gTFBGQ19WUE9SVF9GQUlMRUQpICYmCisJCSAgICAgKHZwb3J0LT5wb3J0X3N0YXRlIDwgTFBGQ19WUE9SVF9SRUFEWSkpKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfVlBPUlQsCisJCQkJCSIxODMzIFZwb3J0IGRpc2NvdmVyeSBxdWllc2NlIFdhaXQ6IgorCQkJCQkiIHZwaSB4JXggc3RhdGUgeCV4IGZjX2ZsYWdzIHgleCIKKwkJCQkJIiBudW1fbm9kZXMgeCV4LCB3YWl0aW5nIDEwMDAgbXNlY3MiCisJCQkJCSIgdG90YWwgd2FpdCBtc2VjcyB4JXhcbiIsCisJCQkJCXZwb3J0LT52cGksIHZwb3J0LT5wb3J0X3N0YXRlLAorCQkJCQl2cG9ydC0+ZmNfZmxhZywgdnBvcnQtPm51bV9kaXNjX25vZGVzLAorCQkJCQlqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBzdGFydF90aW1lKSk7CisJCQltc2xlZXAoMTAwMCk7CisJCX0gZWxzZSB7CisJCQkvKiBCYXNlIGNhc2UuICBXYWl0IHZhcmlhbnRzIHNhdGlzZmllZC4gIEJyZWFrIG91dCAqLworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX1ZQT1JULAorCQkJCQkgIjE4MzQgVnBvcnQgZGlzY292ZXJ5IHF1aWVzY2VkOiIKKwkJCQkJICIgdnBpIHgleCBzdGF0ZSB4JXggZmNfZmxhZ3MgeCV4IgorCQkJCQkgIiB3YWl0IG1zZWNzIHgleFxuIiwKKwkJCQkJIHZwb3J0LT52cGksIHZwb3J0LT5wb3J0X3N0YXRlLAorCQkJCQkgdnBvcnQtPmZjX2ZsYWcsCisJCQkJCSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMKKwkJCQkJCS0gc3RhcnRfdGltZSkpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB3YWl0X3RpbWVfbWF4KSkKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfVlBPUlQsCisJCQkJIjE4MzUgVnBvcnQgZGlzY292ZXJ5IHF1aWVzY2UgZmFpbGVkOiIKKwkJCQkiIHZwaSB4JXggc3RhdGUgeCV4IGZjX2ZsYWdzIHgleCIKKwkJCQkiIHdhaXQgbXNlY3MgeCV4XG4iLAorCQkJCXZwb3J0LT52cGksIHZwb3J0LT5wb3J0X3N0YXRlLAorCQkJCXZwb3J0LT5mY19mbGFnLAorCQkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0X3RpbWUpKTsKK30KKwogaW50CiBscGZjX3Zwb3J0X2NyZWF0ZShzdHJ1Y3QgZmNfdnBvcnQgKmZjX3Zwb3J0LCBib29sIGRpc2FibGUpCiB7CkBAIC01MDYsOCArNTc4LDEyIEBACiAJICogaW5pdGlhdGVkIGFmdGVyIHdlJ3ZlIGRpc3Bvc2VkIG9mIGFsbCBvdGhlciByZXNvdXJjZXMgYXNzb2NpYXRlZAogCSAqIHdpdGggdGhlIHBvcnQuCiAJICovCi0JaWYgKCFzY3NpX2hvc3RfZ2V0KHNob3N0KSB8fCAhc2NzaV9ob3N0X2dldChzaG9zdCkpCisJaWYgKCFzY3NpX2hvc3RfZ2V0KHNob3N0KSkKIAkJcmV0dXJuIFZQT1JUX0lOVkFMOworCWlmICghc2NzaV9ob3N0X2dldChzaG9zdCkpIHsKKwkJc2NzaV9ob3N0X3B1dChzaG9zdCk7CisJCXJldHVybiBWUE9SVF9JTlZBTDsKKwl9CiAJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJdnBvcnQtPmxvYWRfZmxhZyB8PSBGQ19VTkxPQURJTkc7CiAJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKQEAgLTU5NywxMSArNjczLDE2IEBACiAJCX0KIAkJdnBvcnQtPnVucmVnX3ZwaV9jbXBsID0gVlBPUlRfSU5WQUw7CiAJCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKHBoYmEtPmZjX3JhdG92ICogMjAwMCk7CisJCWlmIChuZGxwLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9VTlVTRURfTk9ERSkKKwkJCWdvdG8gc2tpcF9sb2dvOwogCQlpZiAoIWxwZmNfaXNzdWVfZWxzX25waXZfbG9nbyh2cG9ydCwgbmRscCkpCiAJCQl3aGlsZSAodnBvcnQtPnVucmVnX3ZwaV9jbXBsID09IFZQT1JUX0lOVkFMICYmIHRpbWVvdXQpCiAJCQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CiAJfQogCisJaWYgKCEocGhiYS0+cHBvcnQtPmxvYWRfZmxhZyAmIEZDX1VOTE9BRElORykpCisJCWxwZmNfZGlzY292ZXJ5X3dhaXQodnBvcnQpOworCiBza2lwX2xvZ286CiAJbHBmY19jbGVhbnVwKHZwb3J0KTsKIAlscGZjX3NsaV9ob3N0X2Rvd24odnBvcnQpOwpAQCAtNjE1LDggKzY5NiwxMCBAQAogCQkgKiBDb21wbGV0aW9uIG9mIHVucmVnX3ZwaSAobHBmY19tYnhfY21wbF91bnJlZ192cGkpCiAJCSAqIGRvZXMgdGhlIHNjc2lfaG9zdF9wdXQoKSB0byByZWxlYXNlIHRoZSB2cG9ydC4KIAkJICovCi0JCWxwZmNfbWJ4X3VucmVnX3ZwaSh2cG9ydCk7Ci0JfQorCQlpZiAobHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0KSkKKwkJCXNjc2lfaG9zdF9wdXQoc2hvc3QpOworCX0gZWxzZQorCQlzY3NpX2hvc3RfcHV0KHNob3N0KTsKIAogCWxwZmNfZnJlZV92cGkocGhiYSwgdnBvcnQtPnZwaSk7CiAJdnBvcnQtPndvcmtfcG9ydF9ldmVudHMgPSAwOwpAQCAtNjYzLDMgKzc0Niw4MiBAQAogCQlzY3NpX2hvc3RfcHV0KGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pKTsKIAlrZnJlZSh2cG9ydHMpOwogfQorCisKKy8qKgorICogbHBmY192cG9ydF9yZXNldF9zdGF0X2RhdGE6IFJlc2V0IHRoZSBzdGF0aXN0aWNhbCBkYXRhIGZvciB0aGUgdnBvcnQuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gdnBvcnQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSBzdGF0aXN0aWNhbCBkYXRhIGZvciB0aGUgdnBvcnQuIFRoaXMgZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCB3aXRoIHRoZSBob3N0X2xvY2sgaGVsZAorICoqLwordm9pZAorbHBmY192cG9ydF9yZXNldF9zdGF0X2RhdGEoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTCwgKm5leHRfbmRscCA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmdnBvcnQtPmZjX25vZGVzLCBubHBfbGlzdHApIHsKKwkJaWYgKCFOTFBfQ0hLX05PREVfQUNUKG5kbHApKQorCQkJY29udGludWU7CisJCWlmIChuZGxwLT5sYXRfZGF0YSkKKwkJCW1lbXNldChuZGxwLT5sYXRfZGF0YSwgMCwgTFBGQ19NQVhfQlVDS0VUX0NPVU5UICoKKwkJCQlzaXplb2Yoc3RydWN0IGxwZmNfc2NzaWNtZF9ia3QpKTsKKwl9Cit9CisKKworLyoqCisgKiBscGZjX2FsbG9jX2J1Y2tldDogQWxsb2NhdGUgZGF0YSBidWZmZXIgcmVxdWlyZWQgZm9yIGNvbGxlY3RpbmcKKyAqICBzdGF0aXN0aWNhbCBkYXRhLgorICogQHZwb3J0OiBQb2ludGVyIHRvIHZwb3J0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBkYXRhIGJ1ZmZlciByZXF1aXJlZCBmb3IgYWxsIHRoZSBGQworICogbm9kZXMgb2YgdGhlIHZwb3J0IHRvIGNvbGxlY3Qgc3RhdGlzdGljYWwgZGF0YS4KKyAqKi8KK3ZvaWQKK2xwZmNfYWxsb2NfYnVja2V0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKK3sKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IE5VTEwsICpuZXh0X25kbHAgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgJnZwb3J0LT5mY19ub2RlcywgbmxwX2xpc3RwKSB7CisJCWlmICghTkxQX0NIS19OT0RFX0FDVChuZGxwKSkKKwkJCWNvbnRpbnVlOworCisJCWtmcmVlKG5kbHAtPmxhdF9kYXRhKTsKKwkJbmRscC0+bGF0X2RhdGEgPSBOVUxMOworCisJCWlmIChuZGxwLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9NQVBQRURfTk9ERSkgeworCQkJbmRscC0+bGF0X2RhdGEgPSBrY2FsbG9jKExQRkNfTUFYX0JVQ0tFVF9DT1VOVCwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgbHBmY19zY3NpY21kX2JrdCksCisJCQkJCSBHRlBfQVRPTUlDKTsKKworCQkJaWYgKCFuZGxwLT5sYXRfZGF0YSkKKwkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX05PREUsCisJCQkJCSIwMjg3IGxwZmNfYWxsb2NfYnVja2V0IGZhaWxlZCB0byAiCisJCQkJCSJhbGxvY2F0ZSBzdGF0aXN0aWNhbCBkYXRhIGJ1ZmZlciBESUQgIgorCQkJCQkiMHgleFxuIiwgbmRscC0+bmxwX0RJRCk7CisJCX0KKwl9Cit9CisKKy8qKgorICogbHBmY19mcmVlX2J1Y2tldDogRnJlZSBkYXRhIGJ1ZmZlciByZXF1aXJlZCBmb3IgY29sbGVjdGluZworICogIHN0YXRpc3RpY2FsIGRhdGEuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gdnBvcnQgb2JqZWN0LgorICoKKyAqIFRoIGZ1bmN0aW9uIGZyZWVzIHN0YXRpc3RpY2FsIGRhdGEgYnVmZmVyIG9mIGFsbCB0aGUgRkMKKyAqIG5vZGVzIG9mIHRoZSB2cG9ydC4KKyAqKi8KK3ZvaWQKK2xwZmNfZnJlZV9idWNrZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTCwgKm5leHRfbmRscCA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmdnBvcnQtPmZjX25vZGVzLCBubHBfbGlzdHApIHsKKwkJaWYgKCFOTFBfQ0hLX05PREVfQUNUKG5kbHApKQorCQkJY29udGludWU7CisKKwkJa2ZyZWUobmRscC0+bGF0X2RhdGEpOworCQluZGxwLT5sYXRfZGF0YSA9IE5VTEw7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5oCmluZGV4IDk2YzQ0NTMuLjkwODI4MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmgKQEAgLTExMiw0ICsxMTIsOCBAQAogdm9pZCBscGZjX3Zwb3J0X3NldF9zdGF0ZShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCiAJCQkgIGVudW0gZmNfdnBvcnRfc3RhdGUgbmV3X3N0YXRlKTsKIAordm9pZCBscGZjX3Zwb3J0X3Jlc2V0X3N0YXRfZGF0YShzdHJ1Y3QgbHBmY192cG9ydCAqKTsKK3ZvaWQgbHBmY19hbGxvY19idWNrZXQoc3RydWN0IGxwZmNfdnBvcnQgKik7Cit2b2lkIGxwZmNfZnJlZV9idWNrZXQoc3RydWN0IGxwZmNfdnBvcnQgKik7CisKICNlbmRpZiAvKiBIX0xQRkNfVlBPUlQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc3N0LmMgYi9kcml2ZXJzL3Njc2kvb3NzdC5jCmluZGV4IDFjNzlmOTcuLjBlYTc4ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL29zc3QuYwpAQCAtNTcwOCw3ICs1NzA4LDggQEAKIAlzdHJ1Y3QgZGV2aWNlICpvc3N0X21lbWJlcjsKIAlpbnQgZXJyOwogCi0Jb3NzdF9tZW1iZXIgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEob3NzdF9zeXNmc19jbGFzcywgZGV2aWNlLCBkZXYsIFNUcCwgIiVzIiwgbmFtZSk7CisJb3NzdF9tZW1iZXIgPSBkZXZpY2VfY3JlYXRlKG9zc3Rfc3lzZnNfY2xhc3MsIGRldmljZSwgZGV2LCBTVHAsCisJCQkJICAgICIlcyIsIG5hbWUpOwogCWlmIChJU19FUlIob3NzdF9tZW1iZXIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIm9zc3QgOlc6IFVuYWJsZSB0byBhZGQgc3lzZnMgY2xhc3MgbWVtYmVyICVzXG4iLCBuYW1lKTsKIAkJcmV0dXJuIFBUUl9FUlIob3NzdF9tZW1iZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9haGExNTJ4X3N0dWIuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvYWhhMTUyeF9zdHViLmMKaW5kZXggMmRkMGRjOS4uMTY1ZmY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9haGExNTJ4X3N0dWIuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2FoYTE1Mnhfc3R1Yi5jCkBAIC0xNDAsNDQgKzE0MCw0MSBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCitzdGF0aWMgaW50IGFoYTE1MnhfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQl1bnNpZ25lZCBpbnQgdmNjLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwkvKiBGb3IgTmV3IE1lZGlhIFQmSiwgbG9vayBmb3IgYSBTQ1NJIHdpbmRvdyAqLworCWlmIChjZmctPmlvLndpblswXS5sZW4gPj0gMHgyMCkKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmZy0+aW8ud2luWzBdLmJhc2U7CisJZWxzZSBpZiAoKGNmZy0+aW8ubndpbiA+IDEpICYmCisJCSAoY2ZnLT5pby53aW5bMV0ubGVuID49IDB4MjApKQorCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMV0uYmFzZTsKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApICYmCisJICAgIChwX2Rldi0+aW8uQmFzZVBvcnQxIDwgMHhmZmZmKSkgeworCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKwogc3RhdGljIGludCBhaGExNTJ4X2NvbmZpZ19jcyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IGFoYTE1Mnhfc2V0dXAgczsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIGNpc3BhcnNlX3QgcGFyc2U7Ci0gICAgaW50IGksIGxhc3RfcmV0LCBsYXN0X2ZuOwotICAgIHVfY2hhciB0dXBsZV9kYXRhWzY0XTsKKyAgICBpbnQgbGFzdF9yZXQsIGxhc3RfZm47CiAgICAgc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKLSAgICAKKwogICAgIERFQlVHKDAsICJhaGExNTJ4X2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAKLSAgICB0dXBsZS5UdXBsZURhdGEgPSB0dXBsZV9kYXRhOwotICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLSAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotICAgIHdoaWxlICgxKSB7Ci0JaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKLQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQotCSAgICBnb3RvIG5leHRfZW50cnk7Ci0JLyogRm9yIE5ldyBNZWRpYSBUJkosIGxvb2sgZm9yIGEgU0NTSSB3aW5kb3cgKi8KLQlpZiAocGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0ubGVuID49IDB4MjApCi0JICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmJhc2U7Ci0JZWxzZSBpZiAoKHBhcnNlLmNmdGFibGVfZW50cnkuaW8ubndpbiA+IDEpICYmCi0JCSAocGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMV0ubGVuID49IDB4MjApKQotCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblsxXS5iYXNlOwotCWlmICgocGFyc2UuY2Z0YWJsZV9lbnRyeS5pby5ud2luID4gMCkgJiYKLQkgICAgKGxpbmstPmlvLkJhc2VQb3J0MSA8IDB4ZmZmZikpIHsKLQkgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW5kZXg7Ci0JICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCSAgICBpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKLQl9Ci0gICAgbmV4dF9lbnRyeToKLQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKyAgICBsYXN0X3JldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBhaGExNTJ4X2NvbmZpZ19jaGVjaywgTlVMTCk7CisgICAgaWYgKGxhc3RfcmV0KSB7CisJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBsYXN0X3JldCk7CisJZ290byBmYWlsZWQ7CiAgICAgfQotICAgIAorCiAgICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKICAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogICAgIApAQCAtMjA4LDYgKzIwNSw3IEBACiAKIGNzX2ZhaWxlZDoKICAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CitmYWlsZWQ6CiAgICAgYWhhMTUyeF9yZWxlYXNlX2NzKGxpbmspOwogICAgIHJldHVybiAtRU5PREVWOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9mZG9tYWluX3N0dWIuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvZmRvbWFpbl9zdHViLmMKaW5kZXggZDhiOTkzNS4uMDYyNTRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9mZG9tYWluX3N0dWIuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2Zkb21haW5fc3R1Yi5jCkBAIC0xMjMsMzQgKzEyMywzMCBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCitzdGF0aWMgaW50IGZkb21haW5fY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQl1bnNpZ25lZCBpbnQgdmNjLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworfQorCisKIHN0YXRpYyBpbnQgZmRvbWFpbl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwotICAgIHR1cGxlX3QgdHVwbGU7Ci0gICAgY2lzcGFyc2VfdCBwYXJzZTsKLSAgICBpbnQgaSwgbGFzdF9yZXQsIGxhc3RfZm47Ci0gICAgdV9jaGFyIHR1cGxlX2RhdGFbNjRdOworICAgIGludCBsYXN0X3JldCwgbGFzdF9mbjsKICAgICBjaGFyIHN0clsyMl07CiAgICAgc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAogICAgIERFQlVHKDAsICJmZG9tYWluX2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAKLSAgICB0dXBsZS5UdXBsZURhdGEgPSB0dXBsZV9kYXRhOwotICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQotICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0gICAgd2hpbGUgKDEpIHsKLQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAotCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDApCi0JICAgIGdvdG8gbmV4dF9lbnRyeTsKLQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pbmRleDsKLQlsaW5rLT5pby5CYXNlUG9ydDEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblswXS5iYXNlOwotCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCWlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOwotICAgIG5leHRfZW50cnk6Ci0JQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgbGFzdF9yZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgZmRvbWFpbl9jb25maWdfY2hlY2ssIE5VTEwpOworICAgIGlmIChsYXN0X3JldCkgeworCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKKwkgICAgZ290byBmYWlsZWQ7CiAgICAgfQogCiAgICAgQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKQEAgLTE4MSw2ICsxNzcsNyBAQAogCiBjc19mYWlsZWQ6CiAgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOworZmFpbGVkOgogICAgIGZkb21haW5fcmVsZWFzZShsaW5rKTsKICAgICByZXR1cm4gLUVOT0RFVjsKIH0gLyogZmRvbWFpbl9jb25maWcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCmluZGV4IDI0ZTZjYjguLjExYTYxZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYwpAQCAtMTYwNiwxMzMgKzE2MDYsMTI5IEBACiAgICAgaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCiAgICAgZXRoZXJuZXQgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RydWN0IG5zcF9jc19jb25maWdkYXRhIHsKKwluc3BfaHdfZGF0YQkJKmRhdGE7CisJd2luX3JlcV90CQlyZXE7Cit9OworCitzdGF0aWMgaW50IG5zcF9jc19jb25maWdfY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCSAgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBuc3BfY3NfY29uZmlnZGF0YSAqY2ZnX21lbSA9IHByaXZfZGF0YTsKKworCWlmIChjZmctPmluZGV4ID09IDApCisJCXJldHVybiAtRU5PREVWOworCisJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCisJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgeworCQlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CisJCXBfZGV2LT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOworCX0KKworCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLworCS8qICBOb3RlIHRoYXQgdGhlIENJUyB2YWx1ZXMgbmVlZCB0byBiZSByZXNjYWxlZCAqLworCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQlpZiAodmNjICE9IGNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMCkKKwkJCXJldHVybiAtRU5PREVWOworCQllbHNlIGlmIChkZmx0LT52Y2MucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJCWlmICh2Y2MgIT0gZGZsdC0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQkJcF9kZXYtPmNvbmYuVnBwID0KKwkJCQljZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisJCX0gZWxzZSBpZiAoZGZsdC0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7CisJCQlwX2Rldi0+Y29uZi5WcHAgPQorCQkJCWRmbHQtPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisJCX0KKworCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQtPmlycS5JUlFJbmZvMSkKKwkJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CisJCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gcF9kZXYtPmlvLkF0dHJpYnV0ZXMxOworCQkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJfQorCQkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykgIT0gMCkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KKworCQlpZiAoKGNmZy0+bWVtLm53aW4gPiAwKSB8fCAoZGZsdC0+bWVtLm53aW4gPiAwKSkgeworCQkJbWVtcmVxX3QJbWFwOworCQkJY2lzdHBsX21lbV90CSptZW0gPQorCQkJCShjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0LT5tZW07CisJCQljZmdfbWVtLT5yZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzE2fFdJTl9NRU1PUllfVFlQRV9DTTsKKwkJCWNmZ19tZW0tPnJlcS5BdHRyaWJ1dGVzIHw9IFdJTl9FTkFCTEU7CisJCQljZmdfbWVtLT5yZXEuQmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKKwkJCWNmZ19tZW0tPnJlcS5TaXplID0gbWVtLT53aW5bMF0ubGVuOworCQkJaWYgKGNmZ19tZW0tPnJlcS5TaXplIDwgMHgxMDAwKQorCQkJCWNmZ19tZW0tPnJlcS5TaXplID0gMHgxMDAwOworCQkJY2ZnX21lbS0+cmVxLkFjY2Vzc1NwZWVkID0gMDsKKwkJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJnBfZGV2LCAmY2ZnX21lbS0+cmVxLCAmcF9kZXYtPndpbikgIT0gMCkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCQltYXAuUGFnZSA9IDA7IG1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOworCQkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYtPndpbiwgJm1hcCkgIT0gMCkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisKKwkJCWNmZ19tZW0tPmRhdGEtPk1taW9BZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXBfbm9jYWNoZShjZmdfbWVtLT5yZXEuQmFzZSwgY2ZnX21lbS0+cmVxLlNpemUpOworCQkJY2ZnX21lbS0+ZGF0YS0+TW1pb0xlbmd0aCAgPSBjZmdfbWVtLT5yZXEuU2l6ZTsKKwkJfQorCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJCXJldHVybiAwOworCX0KKworbmV4dF9lbnRyeToKKwluc3BfZGJnKE5TUF9ERUJVR19JTklULCAibmV4dCIpOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShwX2Rldik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKIHN0YXRpYyBpbnQgbnNwX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlpbnQJCSAgcmV0OwogCXNjc2lfaW5mb190CSAqaW5mbwkgPSBsaW5rLT5wcml2OwotCXR1cGxlX3QJCSAgdHVwbGU7Ci0JY2lzcGFyc2VfdAkgIHBhcnNlOwotCWludAkJICBsYXN0X3JldCwgbGFzdF9mbjsKLQl1bnNpZ25lZCBjaGFyCSAgdHVwbGVfZGF0YVs2NF07Ci0JY29uZmlnX2luZm9fdAkgIGNvbmY7Ci0Jd2luX3JlcV90ICAgICAgICAgcmVxOwotCW1lbXJlcV90ICAgICAgICAgIG1hcDsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKKwlzdHJ1Y3QgbnNwX2NzX2NvbmZpZ2RhdGEgKmNmZ19tZW07CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAluc3BfaHdfZGF0YSAgICAgICpkYXRhID0gJm5zcF9kYXRhX2Jhc2U7CiAKIAluc3BfZGJnKE5TUF9ERUJVR19JTklULCAiaW4iKTsKIAotCXR1cGxlLkF0dHJpYnV0ZXMgICAgICA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhCSAgICAgID0gdHVwbGVfZGF0YTsKLQl0dXBsZS5UdXBsZURhdGFNYXggICAgPSBzaXplb2YodHVwbGVfZGF0YSk7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgICAgID0gMDsKKwljZmdfbWVtID0ga3phbGxvYyhzaXplb2YoY2ZnX21lbSksIEdGUF9LRVJORUwpOworCWlmICghY2ZnX21lbSkKKwkJcmV0dXJuIC1FTk9NRU07CisJY2ZnX21lbS0+ZGF0YSA9IGRhdGE7CiAKLQkvKiBMb29rIHVwIHRoZSBjdXJyZW50IFZjYyAqLwotCUNTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmY29uZikpOwotCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLQl3aGlsZSAoMSkgewotCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwotCi0JCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8Ci0JCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgeyBkZmx0ID0gKmNmZzsgfQotCQlpZiAoY2ZnLT5pbmRleCA9PSAwKSB7IGdvdG8gbmV4dF9lbnRyeTsgfQotCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKLQotCQkvKiBEb2VzIHRoaXMgY2FyZCBuZWVkIGF1ZGlvIG91dHB1dD8gKi8KLQkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgewotCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7Ci0JCQlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwotCQl9Ci0KLQkJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCi0JCS8qICBOb3RlIHRoYXQgdGhlIENJUyB2YWx1ZXMgbmVlZCB0byBiZSByZXNjYWxlZCAqLwotCQlpZiAoY2ZnLT52Y2MucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJCWlmIChjb25mLlZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDApIHsKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoZGZsdC52Y2MucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJCWlmIChjb25mLlZjYyAhPSBkZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDApIHsKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJCWxpbmstPmNvbmYuVnBwID0KLQkJCQljZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7Ci0JCX0gZWxzZSBpZiAoZGZsdC52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJCWxpbmstPmNvbmYuVnBwID0KLQkJCQlkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7Ci0JCX0KLQotCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KLQkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKSB7Ci0JCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwotCQl9Ci0KLQkJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JCWxpbmstPmlvLk51bVBvcnRzMSA9IGxpbmstPmlvLk51bVBvcnRzMiA9IDA7Ci0JCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQuaW8ubndpbiA+IDApKSB7Ci0JCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87Ci0JCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCQkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gbGluay0+aW8uQXR0cmlidXRlczE7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOwotCQkJfQotCQkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCi0JCQkJZ290byBuZXh0X2VudHJ5OwotCQl9Ci0KLQkJaWYgKChjZmctPm1lbS5ud2luID4gMCkgfHwgKGRmbHQubWVtLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX21lbV90ICptZW0gPQotCQkJCShjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0Lm1lbTsKLQkJCXJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTZ8V0lOX01FTU9SWV9UWVBFX0NNOwotCQkJcmVxLkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKLQkJCXJlcS5CYXNlID0gbWVtLT53aW5bMF0uaG9zdF9hZGRyOwotCQkJcmVxLlNpemUgPSBtZW0tPndpblswXS5sZW47Ci0JCQlpZiAocmVxLlNpemUgPCAweDEwMDApIHsKLQkJCQlyZXEuU2l6ZSA9IDB4MTAwMDsKLQkJCX0KLQkJCXJlcS5BY2Nlc3NTcGVlZCA9IDA7Ci0JCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSAhPSAwKQotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCW1hcC5QYWdlID0gMDsgbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7Ci0JCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtYXApICE9IDApCi0JCQkJZ290byBuZXh0X2VudHJ5OwotCi0JCQlkYXRhLT5NbWlvQWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXBfbm9jYWNoZShyZXEuQmFzZSwgcmVxLlNpemUpOwotCQkJZGF0YS0+TW1pb0xlbmd0aCAgPSByZXEuU2l6ZTsKLQkJfQotCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCi0JCWJyZWFrOwotCi0JbmV4dF9lbnRyeToKLQkJbnNwX2RiZyhOU1BfREVCVUdfSU5JVCwgIm5leHQiKTsKLQkJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwotCQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLQl9CisJcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIG5zcF9jc19jb25maWdfY2hlY2ssIGNmZ19tZW0pOworCQlnb3RvIGNzX2ZhaWxlZDsKIAogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpIHsKLQkJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSkKKwkJCWdvdG8gY3NfZmFpbGVkOwogCX0KLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisJaWYgKHJldCkKKwkJZ290byBjc19mYWlsZWQ7CiAKIAlpZiAoZnJlZV9wb3J0cykgewogCQlpZiAobGluay0+aW8uQmFzZVBvcnQxKSB7CkBAIC0xNzkwLDIwICsxNzg2LDIwIEBACiAJCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKIAkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MitsaW5rLT5pby5OdW1Qb3J0czItMSk7CiAJaWYgKGxpbmstPndpbikKLQkJcHJpbnRrKCIsIG1lbSAweCUwNmx4LTB4JTA2bHgiLCByZXEuQmFzZSwKLQkJICAgICAgIHJlcS5CYXNlK3JlcS5TaXplLTEpOworCQlwcmludGsoIiwgbWVtIDB4JTA2bHgtMHglMDZseCIsIGNmZ19tZW0tPnJlcS5CYXNlLAorCQkgICAgICAgY2ZnX21lbS0+cmVxLkJhc2UrY2ZnX21lbS0+cmVxLlNpemUtMSk7CiAJcHJpbnRrKCJcbiIpOwogCisJa2ZyZWUoY2ZnX21lbSk7CiAJcmV0dXJuIDA7CiAKICBjc19mYWlsZWQ6CiAJbnNwX2RiZyhOU1BfREVCVUdfSU5JVCwgImNvbmZpZyBmYWlsIik7Ci0JY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCW5zcF9jc19yZWxlYXNlKGxpbmspOworCWtmcmVlKGNmZ19tZW0pOwogCiAJcmV0dXJuIC1FTk9ERVY7CiB9IC8qIG5zcF9jc19jb25maWcgKi8KLSN1bmRlZiBDU19DSEVDSwogCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9xbG9naWNfc3R1Yi5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9xbG9naWNfc3R1Yi5jCmluZGV4IDY3YzVhNTguLjIwYzNlNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvcWxvZ2ljX3N0dWIuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL3Fsb2dpY19zdHViLmMKQEAgLTE5NSwzOSArMTk1LDMzIEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKK3N0YXRpYyBpbnQgcWxvZ2ljX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmZy0+aW8ud2luWzBdLmJhc2U7CisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmZy0+aW8ud2luWzBdLmxlbjsKKworCWlmIChwX2Rldi0+aW8uQmFzZVBvcnQxID09IDApCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKK30KKwogc3RhdGljIGludCBxbG9naWNfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluaykKIHsKIAlzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdCB0dXBsZTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWludCBpLCBsYXN0X3JldCwgbGFzdF9mbjsKLQl1bnNpZ25lZCBzaG9ydCB0dXBsZV9kYXRhWzMyXTsKKwlpbnQgbGFzdF9yZXQsIGxhc3RfZm47CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAogCURFQlVHKDAsICJxbG9naWNfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAotCWluZm8tPm1hbmZfaWQgPSBsaW5rLT5tYW5mX2lkOwotCi0JdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSB0dXBsZV9kYXRhOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0Jd2hpbGUgKDEpIHsKLQkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKLQkJCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDApCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0JCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmluZGV4OwotCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblswXS5iYXNlOwotCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblswXS5sZW47Ci0JCWlmIChsaW5rLT5pby5CYXNlUG9ydDEgIT0gMCkgewotCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCQlpZiAoaSA9PSBDU19TVUNDRVNTKQotCQkJCWJyZWFrOwotCQl9Ci0JICAgICAgbmV4dF9lbnRyeToKLQkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CisJbGFzdF9yZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgcWxvZ2ljX2NvbmZpZ19jaGVjaywgTlVMTCk7CisJaWYgKGxhc3RfcmV0KSB7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgbGFzdF9yZXQpOworCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwpAQCAtMjYyLDYgKzI1Niw3IEBACiBjc19mYWlsZWQ6CiAJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKK2ZhaWxlZDoKIAlyZXR1cm4gLUVOT0RFVjsKIAogfQkJCQkvKiBxbG9naWNfY29uZmlnICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9zeW01M2M1MDBfY3MuYwppbmRleCAwYmUyMzJiLi5iMzMwYzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMKQEAgLTcwMCwxNSArNzAwLDI3IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKIGRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCiAKK3N0YXRpYyBpbnQgU1lNNTNDNTAwX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJCSAgdW5zaWduZWQgaW50IHZjYywKKwkJCQkgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKKwlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2ZnLT5pby53aW5bMF0ubGVuOworCisJaWYgKHBfZGV2LT5pby5CYXNlUG9ydDEgPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworfQorCiBzdGF0aWMgaW50CiBTWU01M0M1MDBfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBzY3NpX2luZm9fdCAqaW5mbyA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdCB0dXBsZTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWludCBpLCBsYXN0X3JldCwgbGFzdF9mbjsKKwlpbnQgbGFzdF9yZXQsIGxhc3RfZm47CiAJaW50IGlycV9sZXZlbCwgcG9ydF9iYXNlOwotCXVuc2lnbmVkIHNob3J0IHR1cGxlX2RhdGFbMzJdOwogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqdHBudCA9ICZzeW01M2M1MDBfZHJpdmVyX3RlbXBsYXRlOwogCXN0cnVjdCBzeW01M2M1MDBfZGF0YSAqZGF0YTsKQEAgLTcxNywyNyArNzI5LDEwIEBACiAKIAlpbmZvLT5tYW5mX2lkID0gbGluay0+bWFuZl9pZDsKIAotCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKil0dXBsZV9kYXRhOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IDY0OwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0Jd2hpbGUgKDEpIHsKLQkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKLQkJICAgIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW5kZXg7Ci0JCWxpbmstPmlvLkJhc2VQb3J0MSA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmJhc2U7Ci0JCWxpbmstPmlvLk51bVBvcnRzMSA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmxlbjsKLQotCQlpZiAobGluay0+aW8uQmFzZVBvcnQxICE9IDApIHsKLQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKLQkJCQlicmVhazsKLQkJfQotbmV4dF9lbnRyeToKLQkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CisJbGFzdF9yZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgU1lNNTNDNTAwX2NvbmZpZ19jaGVjaywgTlVMTCk7CisJaWYgKGxhc3RfcmV0KSB7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgbGFzdF9yZXQpOworCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwpAQCAtODMxLDYgKzgyNiw3IEBACiAKIGNzX2ZhaWxlZDoKIAljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CitmYWlsZWQ6CiAJU1lNNTNDNTAwX3JlbGVhc2UobGluayk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9IC8qIFNZTTUzQzUwMF9jb25maWcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCmluZGV4IDBkZGZlNzEuLmVkNzMxOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwpAQCAtMTAwNiw3ICsxMDA2LDYgQEAKIAl9CiAKIAlxbGEyeDAwX2Fib3J0X2ZjcG9ydF9jbWRzKGZjcG9ydCk7Ci0Jc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAppbmRleCA4M2M4MTkyLi5mMjVmNDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCkBAIC0yMTA4LDcgKzIxMDgsNyBAQAogCiBzdHJ1Y3QgcWxhX21zaXhfZW50cnkgewogCWludCBoYXZlX2lycTsKLQl1aW50MTZfdCBtc2l4X3ZlY3RvcjsKKwl1aW50MzJfdCBtc2l4X3ZlY3RvcjsKIAl1aW50MTZfdCBtc2l4X2VudHJ5OwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCmluZGV4IGZjNGJmYTcuLmE3NmVmZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKQEAgLTExODcsNyArMTE4NywxMiBAQAogCQkgICAgY3AtPnNlcmlhbF9udW1iZXIsIGNvbXBfc3RhdHVzLAogCQkgICAgYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpKSk7CiAKLQkJY3AtPnJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKKwkJLyoKKwkJICogV2UgYXJlIGdvaW5nIHRvIGhhdmUgdGhlIGZjIGNsYXNzIGJsb2NrIHRoZSBycG9ydAorCQkgKiB3aGlsZSB3ZSB0cnkgdG8gcmVjb3ZlciBzbyBpbnN0cnVjdCB0aGUgbWlkIGxheWVyCisJCSAqIHRvIHJlcXVldWUgdW50aWwgdGhlIGNsYXNzIGRlY2lkZXMgaG93IHRvIGhhbmRsZSB0aGlzLgorCQkgKi8KKwkJY3AtPnJlc3VsdCA9IERJRF9UUkFOU1BPUlRfRElTUlVQVEVEIDw8IDE2OwogCQlpZiAoYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpID09IEZDU19PTkxJTkUpCiAJCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QoZmNwb3J0LT5oYSwgZmNwb3J0LCAxLCAxKTsKIAkJYnJlYWs7CkBAIC0xMjE0LDcgKzEyMTksMTIgQEAKIAkJYnJlYWs7CiAKIAljYXNlIENTX1RJTUVPVVQ6Ci0JCWNwLT5yZXN1bHQgPSBESURfQlVTX0JVU1kgPDwgMTY7CisJCS8qCisJCSAqIFdlIGFyZSBnb2luZyB0byBoYXZlIHRoZSBmYyBjbGFzcyBibG9jayB0aGUgcnBvcnQKKwkJICogd2hpbGUgd2UgdHJ5IHRvIHJlY292ZXIgc28gaW5zdHJ1Y3QgdGhlIG1pZCBsYXllcgorCQkgKiB0byByZXF1ZXVlIHVudGlsIHRoZSBjbGFzcyBkZWNpZGVzIGhvdyB0byBoYW5kbGUgdGhpcy4KKwkJICovCisJCWNwLT5yZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAogCQlpZiAoSVNfRldJMl9DQVBBQkxFKGhhKSkgewogCQkJREVCVUcyKHByaW50ayhLRVJOX0lORk8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKaW5kZXggMzQzMzQ0MS4uMmFlZDQ3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKQEAgLTM5NCwxMCArMzk0LDggQEAKIAl9CiAKIAkvKiBDbG9zZSB3aW5kb3cgb24gZmNwb3J0L3Jwb3J0IHN0YXRlLXRyYW5zaXRpb25pbmcuICovCi0JaWYgKGZjcG9ydC0+ZHJwb3J0KSB7Ci0JCWNtZC0+cmVzdWx0ID0gRElEX0lNTV9SRVRSWSA8PCAxNjsKLQkJZ290byBxY19mYWlsX2NvbW1hbmQ7Ci0JfQorCWlmIChmY3BvcnQtPmRycG9ydCkKKwkJZ290byBxY190YXJnZXRfYnVzeTsKIAogCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgIT0gRkNTX09OTElORSkgewogCQlpZiAoYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpID09IEZDU19ERVZJQ0VfREVBRCB8fApAQCAtNDA1LDcgKzQwMyw3IEBACiAJCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQkJZ290byBxY19mYWlsX2NvbW1hbmQ7CiAJCX0KLQkJZ290byBxY19ob3N0X2J1c3k7CisJCWdvdG8gcWNfdGFyZ2V0X2J1c3k7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxKGhhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtNDI4LDEwICs0MjYsMTEgQEAKIAogcWNfaG9zdF9idXN5X2xvY2s6CiAJc3Bpbl9sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQotcWNfaG9zdF9idXN5OgogCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCitxY190YXJnZXRfYnVzeToKKwlyZXR1cm4gU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZOworCiBxY19mYWlsX2NvbW1hbmQ6CiAJZG9uZShjbWQpOwogCkBAIC00NjEsMTAgKzQ2MCw4IEBACiAJfQogCiAJLyogQ2xvc2Ugd2luZG93IG9uIGZjcG9ydC9ycG9ydCBzdGF0ZS10cmFuc2l0aW9uaW5nLiAqLwotCWlmIChmY3BvcnQtPmRycG9ydCkgewotCQljbWQtPnJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7Ci0JCWdvdG8gcWMyNF9mYWlsX2NvbW1hbmQ7Ci0JfQorCWlmIChmY3BvcnQtPmRycG9ydCkKKwkJZ290byBxYzI0X3RhcmdldF9idXN5OwogCiAJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSAhPSBGQ1NfT05MSU5FKSB7CiAJCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX0RFVklDRV9ERUFEIHx8CkBAIC00NzIsNyArNDY5LDcgQEAKIAkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCQlnb3RvIHFjMjRfZmFpbF9jb21tYW5kOwogCQl9Ci0JCWdvdG8gcWMyNF9ob3N0X2J1c3k7CisJCWdvdG8gcWMyNF90YXJnZXRfYnVzeTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC00OTUsMTAgKzQ5MiwxMSBAQAogCiBxYzI0X2hvc3RfYnVzeV9sb2NrOgogCXNwaW5fbG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7Ci0KLXFjMjRfaG9zdF9idXN5OgogCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCitxYzI0X3RhcmdldF9idXN5OgorCXJldHVybiBTQ1NJX01MUVVFVUVfVEFSR0VUX0JVU1k7CisKIHFjMjRfZmFpbF9jb21tYW5kOgogCWRvbmUoY21kKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jCmluZGV4IGE5MWE1N2MuLjc5OTEyMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCQkJICAgICAgaGEtPmhvc3Rfbm8sIGNtZC0+ZGV2aWNlLT5jaGFubmVsLAogCQkJICAgICAgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuKSk7CiAKLQkJY21kLT5yZXN1bHQgPSBESURfQlVTX0JVU1kgPDwgMTY7CisJCWNtZC0+cmVzdWx0ID0gRElEX1RSQU5TUE9SVF9ESVNSVVBURUQgPDwgMTY7CiAKIAkJLyoKIAkJICogTWFyayBkZXZpY2UgbWlzc2luZyBzbyB0aGF0IHdlIHdvbid0IGNvbnRpbnVlIHRvIHNlbmQKQEAgLTI0Myw3ICsyNDMsNyBAQAogCQlpZiAoYXRvbWljX3JlYWQoJmRkYl9lbnRyeS0+c3RhdGUpID09IEREQl9TVEFURV9PTkxJTkUpCiAJCQlxbGE0eHh4X21hcmtfZGV2aWNlX21pc3NpbmcoaGEsIGRkYl9lbnRyeSk7CiAKLQkJY21kLT5yZXN1bHQgPSBESURfQlVTX0JVU1kgPDwgMTY7CisJCWNtZC0+cmVzdWx0ID0gRElEX1RSQU5TUE9SVF9ESVNSVVBURUQgPDwgMTY7CiAJCWJyZWFrOwogCiAJY2FzZSBTQ1NfUVVFVUVfRlVMTDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKaW5kZXggZGU4Mjc5YS4uZGI3ZWEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKQEAgLTM1Myw3ICszNTMsNyBAQAogCQkgICAgICBoYS0+aG9zdF9ubywgZGRiX2VudHJ5LT5idXMsIGRkYl9lbnRyeS0+dGFyZ2V0LAogCQkgICAgICBkZGJfZW50cnktPmZ3X2RkYl9pbmRleCkpOwogCWlzY3NpX2Jsb2NrX3Nlc3Npb24oZGRiX2VudHJ5LT5zZXNzKTsKLQlpc2NzaV9jb25uX2Vycm9yKGRkYl9lbnRyeS0+Y29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwlpc2NzaV9jb25uX2Vycm9yX2V2ZW50KGRkYl9lbnRyeS0+Y29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzcmIqIHFsYTR4eHhfZ2V0X25ld19zcmIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhLApAQCAtNDM5LDcgKzQzOSw3IEBACiAJCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQkJZ290byBxY19mYWlsX2NvbW1hbmQ7CiAJCX0KLQkJZ290byBxY19ob3N0X2J1c3k7CisJCXJldHVybiBTQ1NJX01MUVVFVUVfVEFSR0VUX0JVU1k7CiAJfQogCiAJaWYgKHRlc3RfYml0KERQQ19SRVNFVF9IQV9JTlRSLCAmaGEtPmRwY19mbGFncykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCAyYWMzY2IyLi5mOGI3OWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTc1NCw4ICs3NTQsMTIgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlpZiAocnRuKSB7Ci0JCXNjc2lfcXVldWVfaW5zZXJ0KGNtZCwgKHJ0biA9PSBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1kpID8KLQkJCQkJCXJ0biA6IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1kpOworCQlpZiAocnRuICE9IFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWSAmJgorCQkgICAgcnRuICE9IFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWSkKKwkJCXJ0biA9IFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisKKwkJc2NzaV9xdWV1ZV9pbnNlcnQoY21kLCBydG4pOworCiAJCVNDU0lfTE9HX01MUVVFVUUoMywKIAkJICAgIHByaW50aygicXVldWVjb21tYW5kIDogcmVxdWVzdCByZWplY3RlZFxuIikpOwogCX0KQEAgLTgwMCw2ICs4MDQsNyBAQAogdm9pZCBzY3NpX2ZpbmlzaF9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBjbWQtPmRldmljZTsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7CiAJc3RydWN0IHNjc2lfZHJpdmVyICpkcnY7CiAJdW5zaWduZWQgaW50IGdvb2RfYnl0ZXM7CkBAIC04MTUsNiArODIwLDcgQEAKIAkgKiBYWFgoaGNoKTogV2hhdCBhYm91dCBsb2NraW5nPwogICAgICAgICAgKi8KICAgICAgICAgc2hvc3QtPmhvc3RfYmxvY2tlZCA9IDA7CisJc3RhcmdldC0+dGFyZ2V0X2Jsb2NrZWQgPSAwOwogICAgICAgICBzZGV2LT5kZXZpY2VfYmxvY2tlZCA9IDA7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKaW5kZXggZmVjZWZhMC4uOTRlZDI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCkBAIC0xMDY1LDEwICsxMDY1LDEwIEBACiAJCQkJc3RydWN0IGxpc3RfaGVhZCAqZG9uZV9xKQogewogCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsICp0Z3RyX3NjbWQsICpuZXh0OwotCXVuc2lnbmVkIGludCBpZDsKKwl1bnNpZ25lZCBpbnQgaWQgPSAwOwogCWludCBydG47CiAKLQlmb3IgKGlkID0gMDsgaWQgPD0gc2hvc3QtPm1heF9pZDsgaWQrKykgeworCWRvIHsKIAkJdGd0cl9zY21kID0gTlVMTDsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShzY21kLCB3b3JrX3EsIGVoX2VudHJ5KSB7CiAJCQlpZiAoaWQgPT0gc2NtZF9pZChzY21kKSkgewpAQCAtMTA3Niw4ICsxMDc2LDE4IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJaWYgKCF0Z3RyX3NjbWQpIHsKKwkJCS8qIG5vdCBvbmUgZXhhY3RseSBlcXVhbDsgZmluZCB0aGUgbmV4dCBoaWdoZXN0ICovCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjbWQsIHdvcmtfcSwgZWhfZW50cnkpIHsKKwkJCQlpZiAoc2NtZF9pZChzY21kKSA+IGlkICYmCisJCQkJICAgICghdGd0cl9zY21kIHx8CisJCQkJICAgICBzY21kX2lkKHRndHJfc2NtZCkgPiBzY21kX2lkKHNjbWQpKSkKKwkJCQkJCXRndHJfc2NtZCA9IHNjbWQ7CisJCQl9CisJCX0KIAkJaWYgKCF0Z3RyX3NjbWQpCi0JCQljb250aW51ZTsKKwkJCS8qIG5vIG1vcmUgY29tbWFuZHMsIHRoYXQncyBpdCAqLworCQkJYnJlYWs7CiAKIAkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywgcHJpbnRrKCIlczogU2VuZGluZyB0YXJnZXQgcmVzZXQgIgogCQkJCQkJICAidG8gdGFyZ2V0ICVkXG4iLApAQCAtMTA5Niw3ICsxMTA2LDggQEAKIAkJCQkJCQkgICIgZmFpbGVkIHRhcmdldDogIgogCQkJCQkJCSAgIiVkXG4iLAogCQkJCQkJCSAgY3VycmVudC0+Y29tbSwgaWQpKTsKLQl9CisJCWlkKys7CisJfSB3aGlsZShpZCAhPSAwKTsKIAogCXJldHVybiBsaXN0X2VtcHR5KHdvcmtfcSk7CiB9CkBAIC0xMjE5LDYgKzEyMzAsNDAgQEAKIH0KIAogLyoqCisgKiBzY3NpX25vcmV0cnlfY21kIC0gZGV0ZXJtaW50ZSBpZiBjb21tYW5kIHNob3VsZCBiZSBmYWlsZWQgZmFzdAorICogQHNjbWQ6CVNDU0kgY21kIHRvIGV4YW1pbmUuCisgKi8KK2ludCBzY3NpX25vcmV0cnlfY21kKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJc3dpdGNoIChob3N0X2J5dGUoc2NtZC0+cmVzdWx0KSkgeworCWNhc2UgRElEX09LOgorCQlicmVhazsKKwljYXNlIERJRF9CVVNfQlVTWToKKwkJcmV0dXJuIGJsa19mYWlsZmFzdF90cmFuc3BvcnQoc2NtZC0+cmVxdWVzdCk7CisJY2FzZSBESURfUEFSSVRZOgorCQlyZXR1cm4gYmxrX2ZhaWxmYXN0X2RldihzY21kLT5yZXF1ZXN0KTsKKwljYXNlIERJRF9FUlJPUjoKKwkJaWYgKG1zZ19ieXRlKHNjbWQtPnJlc3VsdCkgPT0gQ09NTUFORF9DT01QTEVURSAmJgorCQkgICAgc3RhdHVzX2J5dGUoc2NtZC0+cmVzdWx0KSA9PSBSRVNFUlZBVElPTl9DT05GTElDVCkKKwkJCXJldHVybiAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIERJRF9TT0ZUX0VSUk9SOgorCQlyZXR1cm4gYmxrX2ZhaWxmYXN0X2RyaXZlcihzY21kLT5yZXF1ZXN0KTsKKwl9CisKKwlzd2l0Y2ggKHN0YXR1c19ieXRlKHNjbWQtPnJlc3VsdCkpIHsKKwljYXNlIENIRUNLX0NPTkRJVElPTjoKKwkJLyoKKwkJICogYXNzdW1lIGNhbGxlciBoYXMgY2hlY2tlZCBzZW5zZSBhbmQgZGV0ZXJtaW50ZWQKKwkJICogdGhlIGNoZWNrIGNvbmRpdGlvbiB3YXMgcmV0cnlhYmxlLgorCQkgKi8KKwkJcmV0dXJuIGJsa19mYWlsZmFzdF9kZXYoc2NtZC0+cmVxdWVzdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogc2NzaV9kZWNpZGVfZGlzcG9zaXRpb24gLSBEaXNwb3NpdGlvbiBhIGNtZCBvbiByZXR1cm4gZnJvbSBMTEQuCiAgKiBAc2NtZDoJU0NTSSBjbWQgdG8gZXhhbWluZS4KICAqCkBAIC0xMjkwLDcgKzEzMzUsMjAgQEAKIAogCWNhc2UgRElEX1JFUVVFVUU6CiAJCXJldHVybiBBRERfVE9fTUxRVUVVRTsKLQorCWNhc2UgRElEX1RSQU5TUE9SVF9ESVNSVVBURUQ6CisJCS8qCisJCSAqIExMRC90cmFuc3BvcnQgd2FzIGRpc3J1cHRlZCBkdXJpbmcgcHJvY2Vzc2luZyBvZiB0aGUgSU8uCisJCSAqIFRoZSB0cmFuc3BvcnQgY2xhc3MgaXMgbm93IGJsb2NrZWQvYmxvY2tpbmcsCisJCSAqIGFuZCB0aGUgdHJhbnNwb3J0IHdpbGwgZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgSU8KKwkJICogYmFzZWQgb24gaXRzIHRpbWVycyBhbmQgcmVjb3ZlcnkgY2FwYWJsaWxpdGllcy4KKwkJICovCisJCXJldHVybiBBRERfVE9fTUxRVUVVRTsKKwljYXNlIERJRF9UUkFOU1BPUlRfRkFJTEZBU1Q6CisJCS8qCisJCSAqIFRoZSB0cmFuc3BvcnQgZGVjaWRlZCB0byBmYWlsZmFzdCB0aGUgSU8gKG1vc3QgbGlrZWx5CisJCSAqIHRoZSBmYXN0IGlvIGZhaWwgdG1vIGZpcmVkKSwgc28gc2VuZCBJTyBkaXJlY3RseSB1cHdhcmRzLgorCQkgKi8KKwkJcmV0dXJuIFNVQ0NFU1M7CiAJY2FzZSBESURfRVJST1I6CiAJCWlmIChtc2dfYnl0ZShzY21kLT5yZXN1bHQpID09IENPTU1BTkRfQ09NUExFVEUgJiYKIAkJICAgIHN0YXR1c19ieXRlKHNjbWQtPnJlc3VsdCkgPT0gUkVTRVJWQVRJT05fQ09ORkxJQ1QpCkBAIC0xMzgzLDcgKzE0NDEsNyBAQAogCSAqIGV2ZW4gaWYgdGhlIHJlcXVlc3QgaXMgbWFya2VkIGZhc3QgZmFpbCwgd2Ugc3RpbGwgcmVxdWV1ZQogCSAqIGZvciBxdWV1ZSBjb25nZXN0aW9uIGNvbmRpdGlvbnMgKFFVRVVFX0ZVTEwgb3IgQlVTWSkgKi8KIAlpZiAoKCsrc2NtZC0+cmV0cmllcykgPD0gc2NtZC0+YWxsb3dlZAotCSAgICAmJiAhYmxrX25vcmV0cnlfcmVxdWVzdChzY21kLT5yZXF1ZXN0KSkgeworCSAgICAmJiAhc2NzaV9ub3JldHJ5X2NtZChzY21kKSkgewogCQlyZXR1cm4gTkVFRFNfUkVUUlk7CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTE1MDgsNyArMTU2Niw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjbWQsIG5leHQsIGRvbmVfcSwgZWhfZW50cnkpIHsKIAkJbGlzdF9kZWxfaW5pdCgmc2NtZC0+ZWhfZW50cnkpOwogCQlpZiAoc2NzaV9kZXZpY2Vfb25saW5lKHNjbWQtPmRldmljZSkgJiYKLQkJICAgICFibGtfbm9yZXRyeV9yZXF1ZXN0KHNjbWQtPnJlcXVlc3QpICYmCisJCSAgICAhc2NzaV9ub3JldHJ5X2NtZChzY21kKSAmJgogCQkgICAgKCsrc2NtZC0+cmV0cmllcyA8PSBzY21kLT5hbGxvd2VkKSkgewogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywgcHJpbnRrKCIlczogZmx1c2giCiAJCQkJCQkJICAiIHJldHJ5IGNtZDogJXBcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IDk4ZWU1NWMuLmU1YTk1MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC0xMTQsNiArMTE0LDcgQEAKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY21kLT5kZXZpY2UtPmhvc3Q7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpkZXZpY2UgPSBjbWQtPmRldmljZTsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSBzY3NpX3RhcmdldChkZXZpY2UpOwogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTEzMywxMCArMTM0LDE3IEBACiAJICogaWYgYSBjb21tYW5kIGlzIHJlcXVldWVkIHdpdGggbm8gb3RoZXIgY29tbWFuZHMgb3V0c3RhbmRpbmcKIAkgKiBlaXRoZXIgZm9yIHRoZSBkZXZpY2Ugb3IgZm9yIHRoZSBob3N0LgogCSAqLwotCWlmIChyZWFzb24gPT0gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWSkKKwlzd2l0Y2ggKHJlYXNvbikgeworCWNhc2UgU0NTSV9NTFFVRVVFX0hPU1RfQlVTWToKIAkJaG9zdC0+aG9zdF9ibG9ja2VkID0gaG9zdC0+bWF4X2hvc3RfYmxvY2tlZDsKLQllbHNlIGlmIChyZWFzb24gPT0gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZKQorCQlicmVhazsKKwljYXNlIFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWToKIAkJZGV2aWNlLT5kZXZpY2VfYmxvY2tlZCA9IGRldmljZS0+bWF4X2RldmljZV9ibG9ja2VkOworCQlicmVhazsKKwljYXNlIFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWToKKwkJc3RhcmdldC0+dGFyZ2V0X2Jsb2NrZWQgPSBzdGFyZ2V0LT5tYXhfdGFyZ2V0X2Jsb2NrZWQ7CisJCWJyZWFrOworCX0KIAogCS8qCiAJICogRGVjcmVtZW50IHRoZSBjb3VudGVycywgc2luY2UgdGhlc2UgY29tbWFuZHMgYXJlIG5vIGxvbmdlcgpAQCAtNDYwLDEwICs0NjgsMTIgQEAKIHZvaWQgc2NzaV9kZXZpY2VfdW5idXN5KHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlzaG9zdC0+aG9zdF9idXN5LS07CisJc3RhcmdldC0+dGFyZ2V0X2J1c3ktLTsKIAlpZiAodW5saWtlbHkoc2NzaV9ob3N0X2luX3JlY292ZXJ5KHNob3N0KSAmJgogCQkgICAgIChzaG9zdC0+aG9zdF9mYWlsZWQgfHwgc2hvc3QtPmhvc3RfZWhfc2NoZWR1bGVkKSkpCiAJCXNjc2lfZWhfd2FrZXVwKHNob3N0KTsKQEAgLTUxOSw2ICs1MjksMTMgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2NzaV90YXJnZXRfaXNfYnVzeShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJcmV0dXJuICgoc3RhcmdldC0+Y2FuX3F1ZXVlID4gMCAmJgorCQkgc3RhcmdldC0+dGFyZ2V0X2J1c3kgPj0gc3RhcmdldC0+Y2FuX3F1ZXVlKSB8fAorCQkgc3RhcmdldC0+dGFyZ2V0X2Jsb2NrZWQpOworfQorCiAvKgogICogRnVuY3Rpb246CXNjc2lfcnVuX3F1ZXVlKCkKICAqCkBAIC01MzMsNyArNTUwLDcgQEAKICAqLwogc3RhdGljIHZvaWQgc2NzaV9ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gcS0+cXVldWVkYXRhOworCXN0cnVjdCBzY3NpX2RldmljZSAqc3RhcnZlZF9oZWFkID0gTlVMTCwgKnNkZXYgPSBxLT5xdWV1ZWRhdGE7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTU2MCw2ICs1NzcsMjEgQEAKIAkJICovCiAJCXNkZXYgPSBsaXN0X2VudHJ5KHNob3N0LT5zdGFydmVkX2xpc3QubmV4dCwKIAkJCQkJICBzdHJ1Y3Qgc2NzaV9kZXZpY2UsIHN0YXJ2ZWRfZW50cnkpOworCQkvKgorCQkgKiBUaGUgKnF1ZXVlX3JlYWR5IGZ1bmN0aW9ucyBjYW4gYWRkIGEgZGV2aWNlIGJhY2sgb250byB0aGUKKwkJICogc3RhcnZlZCBsaXN0J3MgdGFpbCwgc28gd2UgbXVzdCBjaGVjayBmb3IgYSBpbmZpbml0ZSBsb29wLgorCQkgKi8KKwkJaWYgKHNkZXYgPT0gc3RhcnZlZF9oZWFkKQorCQkJYnJlYWs7CisJCWlmICghc3RhcnZlZF9oZWFkKQorCQkJc3RhcnZlZF9oZWFkID0gc2RldjsKKworCQlpZiAoc2NzaV90YXJnZXRfaXNfYnVzeShzY3NpX3RhcmdldChzZGV2KSkpIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZzZGV2LT5zdGFydmVkX2VudHJ5LAorCQkJCSAgICAgICAmc2hvc3QtPnN0YXJ2ZWRfbGlzdCk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWxpc3RfZGVsX2luaXQoJnNkZXYtPnN0YXJ2ZWRfZW50cnkpOwogCQlzcGluX3VubG9jayhzaG9zdC0+aG9zdF9sb2NrKTsKIApAQCAtNTc1LDEzICs2MDcsNiBAQAogCQlzcGluX3VubG9jayhzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKIAogCQlzcGluX2xvY2soc2hvc3QtPmhvc3RfbG9jayk7Ci0JCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmc2Rldi0+c3RhcnZlZF9lbnRyeSkpKQotCQkJLyoKLQkJCSAqIHNkZXYgbG9zdCBhIHJhY2UsIGFuZCB3YXMgcHV0IGJhY2sgb24gdGhlCi0JCQkgKiBzdGFydmVkIGxpc3QuIFRoaXMgaXMgdW5saWtlbHkgYnV0IHdpdGhvdXQgdGhpcwotCQkJICogaW4gdGhlb3J5IHdlIGNvdWxkIGxvb3AgZm9yZXZlci4KLQkJCSAqLwotCQkJYnJlYWs7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCkBAIC02ODEsNyArNzA2LDcgQEAKIAkJCWxlZnRvdmVyID0gcmVxLT5kYXRhX2xlbjsKIAogCQkvKiBraWxsIHJlbWFpbmRlciBpZiBubyByZXRyeXMgKi8KLQkJaWYgKGVycm9yICYmIGJsa19ub3JldHJ5X3JlcXVlc3QocmVxKSkKKwkJaWYgKGVycm9yICYmIHNjc2lfbm9yZXRyeV9jbWQoY21kKSkKIAkJCWJsa19lbmRfcmVxdWVzdChyZXEsIGVycm9yLCBsZWZ0b3Zlcik7CiAJCWVsc2UgewogCQkJaWYgKHJlcXVldWUpIHsKQEAgLTEzNDQsNiArMTM2OSw1MiBAQAogCXJldHVybiAxOwogfQogCisKKy8qCisgKiBzY3NpX3RhcmdldF9xdWV1ZV9yZWFkeTogY2hlY2tzIGlmIHRoZXJlIHdlIGNhbiBzZW5kIGNvbW1hbmRzIHRvIHRhcmdldAorICogQHNkZXY6IHNjc2kgZGV2aWNlIG9uIHN0YXJnZXQgdG8gY2hlY2suCisgKgorICogQ2FsbGVkIHdpdGggdGhlIGhvc3QgbG9jayBoZWxkLgorICovCitzdGF0aWMgaW5saW5lIGludCBzY3NpX3RhcmdldF9xdWV1ZV9yZWFkeShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKKwkJCQkJICAgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOworCisJaWYgKHN0YXJnZXQtPnNpbmdsZV9sdW4pIHsKKwkJaWYgKHN0YXJnZXQtPnN0YXJnZXRfc2Rldl91c2VyICYmCisJCSAgICBzdGFyZ2V0LT5zdGFyZ2V0X3NkZXZfdXNlciAhPSBzZGV2KQorCQkJcmV0dXJuIDA7CisJCXN0YXJnZXQtPnN0YXJnZXRfc2Rldl91c2VyID0gc2RldjsKKwl9CisKKwlpZiAoc3RhcmdldC0+dGFyZ2V0X2J1c3kgPT0gMCAmJiBzdGFyZ2V0LT50YXJnZXRfYmxvY2tlZCkgeworCQkvKgorCQkgKiB1bmJsb2NrIGFmdGVyIHRhcmdldF9ibG9ja2VkIGl0ZXJhdGVzIHRvIHplcm8KKwkJICovCisJCWlmICgtLXN0YXJnZXQtPnRhcmdldF9ibG9ja2VkID09IDApIHsKKwkJCVNDU0lfTE9HX01MUVVFVUUoMywgc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzdGFyZ2V0LAorCQkJCQkgInVuYmxvY2tpbmcgdGFyZ2V0IGF0IHplcm8gZGVwdGhcbiIpKTsKKwkJfSBlbHNlIHsKKwkJCWJsa19wbHVnX2RldmljZShzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKHNjc2lfdGFyZ2V0X2lzX2J1c3koc3RhcmdldCkpIHsKKwkJaWYgKGxpc3RfZW1wdHkoJnNkZXYtPnN0YXJ2ZWRfZW50cnkpKSB7CisJCQlsaXN0X2FkZF90YWlsKCZzZGV2LT5zdGFydmVkX2VudHJ5LAorCQkJCSAgICAgICZzaG9zdC0+c3RhcnZlZF9saXN0KTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogV2UncmUgT0sgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCwgc28gd2UgY2FuJ3QgYmUgc3RhcnZlZCAqLworCWlmICghbGlzdF9lbXB0eSgmc2Rldi0+c3RhcnZlZF9lbnRyeSkpCisJCWxpc3RfZGVsX2luaXQoJnNkZXYtPnN0YXJ2ZWRfZW50cnkpOworCXJldHVybiAxOworfQorCiAvKgogICogc2NzaV9ob3N0X3F1ZXVlX3JlYWR5OiBpZiB3ZSBjYW4gc2VuZCByZXF1ZXN0cyB0byBzaG9zdCwgcmV0dXJuIDEgZWxzZQogICogcmV0dXJuIDAuIFdlIG11c3QgZW5kIHVwIHJ1bm5pbmcgdGhlIHF1ZXVlIGFnYWluIHdoZW5ldmVyIDAgaXMKQEAgLTEzOTAsNiArMTQ2MSw3IEBACiB7CiAJc3RydWN0IHNjc2lfY21uZCAqY21kID0gcmVxLT5zcGVjaWFsOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGNtZC0+ZGV2aWNlOworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKIAogCWJsa2Rldl9kZXF1ZXVlX3JlcXVlc3QocmVxKTsKQEAgLTE0MTMsNiArMTQ4NSw3IEBACiAJc3Bpbl91bmxvY2soc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jayk7CiAJc3Bpbl9sb2NrKHNob3N0LT5ob3N0X2xvY2spOwogCXNob3N0LT5ob3N0X2J1c3krKzsKKwlzdGFyZ2V0LT50YXJnZXRfYnVzeSsrOwogCXNwaW5fdW5sb2NrKHNob3N0LT5ob3N0X2xvY2spOwogCXNwaW5fbG9jayhzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKIApAQCAtMTU1MCwxNCArMTYyMywxMyBAQAogCQkJZ290byBub3RfcmVhZHk7CiAJCX0KIAorCQlpZiAoIXNjc2lfdGFyZ2V0X3F1ZXVlX3JlYWR5KHNob3N0LCBzZGV2KSkKKwkJCWdvdG8gbm90X3JlYWR5OworCiAJCWlmICghc2NzaV9ob3N0X3F1ZXVlX3JlYWR5KHEsIHNob3N0LCBzZGV2KSkKIAkJCWdvdG8gbm90X3JlYWR5OwotCQlpZiAoc2NzaV90YXJnZXQoc2RldiktPnNpbmdsZV9sdW4pIHsKLQkJCWlmIChzY3NpX3RhcmdldChzZGV2KS0+c3RhcmdldF9zZGV2X3VzZXIgJiYKLQkJCSAgICBzY3NpX3RhcmdldChzZGV2KS0+c3RhcmdldF9zZGV2X3VzZXIgIT0gc2RldikKLQkJCQlnb3RvIG5vdF9yZWFkeTsKLQkJCXNjc2lfdGFyZ2V0KHNkZXYpLT5zdGFyZ2V0X3NkZXZfdXNlciA9IHNkZXY7Ci0JCX0KKworCQlzY3NpX3RhcmdldChzZGV2KS0+dGFyZ2V0X2J1c3krKzsKIAkJc2hvc3QtPmhvc3RfYnVzeSsrOwogCiAJCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmggYi9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKaW5kZXggNmNkZGQ1ZC4uZTE4NTA5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaApAQCAtNTksNiArNTksNyBAQAogCQkJc3RydWN0IGxpc3RfaGVhZCAqZG9uZV9xKTsKIGludCBzY3NpX2VoX2dldF9zZW5zZShzdHJ1Y3QgbGlzdF9oZWFkICp3b3JrX3EsCiAJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRvbmVfcSk7CitpbnQgc2NzaV9ub3JldHJ5X2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKTsKIAogLyogc2NzaV9saWIuYyAqLwogZXh0ZXJuIGludCBzY3NpX21heWJlX3VuYmxvY2tfaG9zdChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IDMzNDg2MmUuLmIxNGRjMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTQxOSw2ICs0MTksNyBAQAogCWRldi0+dHlwZSA9ICZzY3NpX3RhcmdldF90eXBlOwogCXN0YXJnZXQtPmlkID0gaWQ7CiAJc3RhcmdldC0+Y2hhbm5lbCA9IGNoYW5uZWw7CisJc3RhcmdldC0+Y2FuX3F1ZXVlID0gMDsKIAlJTklUX0xJU1RfSEVBRCgmc3RhcmdldC0+c2libGluZ3MpOwogCUlOSVRfTElTVF9IRUFEKCZzdGFyZ2V0LT5kZXZpY2VzKTsKIAlzdGFyZ2V0LT5zdGF0ZSA9IFNUQVJHRVRfQ1JFQVRFRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKaW5kZXggZDVmNzY1My4uMWU3MWFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKQEAgLTIxMzMsOCArMjEzMyw3IEBACiAJU0VUVVBfUFJJVkFURV9SUE9SVF9BVFRSSUJVVEVfUkQocm9sZXMpOwogCVNFVFVQX1BSSVZBVEVfUlBPUlRfQVRUUklCVVRFX1JEKHBvcnRfc3RhdGUpOwogCVNFVFVQX1BSSVZBVEVfUlBPUlRfQVRUUklCVVRFX1JEKHNjc2lfdGFyZ2V0X2lkKTsKLQlpZiAoZnQtPnRlcm1pbmF0ZV9ycG9ydF9pbykKLQkJU0VUVVBfUFJJVkFURV9SUE9SVF9BVFRSSUJVVEVfUlcoZmFzdF9pb19mYWlsX3Rtbyk7CisJU0VUVVBfUFJJVkFURV9SUE9SVF9BVFRSSUJVVEVfUlcoZmFzdF9pb19mYWlsX3Rtbyk7CiAKIAlCVUdfT04oY291bnQgPiBGQ19SUE9SVF9OVU1fQVRUUlMpOwogCkBAIC0yMzI4LDYgKzIzMjcsMjIgQEAKIH0KIEVYUE9SVF9TWU1CT0woZmNfcmVtb3ZlX2hvc3QpOwogCitzdGF0aWMgdm9pZCBmY190ZXJtaW5hdGVfcnBvcnRfaW8oc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKKwlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CisKKwkvKiBJbnZvbHZlIHRoZSBMTEREIGlmIHBvc3NpYmxlIHRvIHRlcm1pbmF0ZSBhbGwgaW8gb24gdGhlIHJwb3J0LiAqLworCWlmIChpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8pCisJCWktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbyhycG9ydCk7CisKKwkvKgorCSAqIG11c3QgdW5ibG9jayB0byBmbHVzaCBxdWV1ZWQgSU8uIFRoZSBjYWxsZXIgd2lsbCBoYXZlIHNldAorCSAqIHRoZSBwb3J0X3N0YXRlIG9yIGZsYWdzLCBzbyB0aGF0IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5IHdpbGwKKwkgKiBmYWlsIElPLgorCSAqLworCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnJwb3J0LT5kZXYpOworfQogCiAvKioKICAqIGZjX3N0YXJnZXRfZGVsZXRlIC0gY2FsbGVkIHRvIGRlbGV0ZSB0aGUgc2NzaSBkZWNlbmRlbnRzIG9mIGFuIHJwb3J0CkBAIC0yMzQwLDEzICsyMzU1LDggQEAKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmY19ycG9ydCwgc3RndF9kZWxldGVfd29yayk7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7Ci0Jc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwogCi0JLyogSW52b2x2ZSB0aGUgTExERCBpZiBwb3NzaWJsZSB0byB0ZXJtaW5hdGUgYWxsIGlvIG9uIHRoZSBycG9ydC4gKi8KLQlpZiAoaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKQotCQlpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOwotCisJZmNfdGVybWluYXRlX3Jwb3J0X2lvKHJwb3J0KTsKIAlzY3NpX3JlbW92ZV90YXJnZXQoJnJwb3J0LT5kZXYpOwogfQogCkBAIC0yMzcyLDEwICsyMzgyLDcgQEAKIAlpZiAocnBvcnQtPmZsYWdzICYgRkNfUlBPUlRfU0NBTl9QRU5ESU5HKQogCQlzY3NpX2ZsdXNoX3dvcmsoc2hvc3QpOwogCi0JLyogaW52b2x2ZSB0aGUgTExERCB0byB0ZXJtaW5hdGUgYWxsIHBlbmRpbmcgaS9vICovCi0JaWYgKGktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbykKLQkJaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKHJwb3J0KTsKLQorCWZjX3Rlcm1pbmF0ZV9ycG9ydF9pbyhycG9ydCk7CiAJLyoKIAkgKiBDYW5jZWwgYW55IG91dHN0YW5kaW5nIHRpbWVycy4gVGhlc2Ugc2hvdWxkIHJlYWxseSBleGlzdAogCSAqIG9ubHkgd2hlbiBybW1vZCdpbmcgdGhlIExMREQgYW5kIHdlJ3JlIGFza2luZyBmb3IKQEAgLTI2MzksNyArMjY0Niw4IEBACiAKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKLQkJCQlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX0RFVkxPU1NfUEVORElORzsKKwkJCQlycG9ydC0+ZmxhZ3MgJj0gfihGQ19SUE9SVF9GQVNUX0ZBSUxfVElNRURPVVQgfAorCQkJCQkJICBGQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkcpOwogCiAJCQkJLyogaWYgdGFyZ2V0LCBpbml0aWF0ZSBhIHNjYW4gKi8KIAkJCQlpZiAocnBvcnQtPnNjc2lfdGFyZ2V0X2lkICE9IC0xKSB7CkBAIC0yNzAyLDYgKzI3MTAsNyBAQAogCQkJcnBvcnQtPnBvcnRfaWQgPSBpZHMtPnBvcnRfaWQ7CiAJCQlycG9ydC0+cm9sZXMgPSBpZHMtPnJvbGVzOwogCQkJcnBvcnQtPnBvcnRfc3RhdGUgPSBGQ19QT1JUU1RBVEVfT05MSU5FOworCQkJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9GQVNUX0ZBSUxfVElNRURPVVQ7CiAKIAkJCWlmIChmY2ktPmYtPmRkX2ZjcnBvcnRfc2l6ZSkKIAkJCQltZW1zZXQocnBvcnQtPmRkX2RhdGEsIDAsCkBAIC0yNzg0LDcgKzI3OTMsNiBAQAogZmNfcmVtb3RlX3BvcnRfZGVsZXRlKHN0cnVjdCBmY19ycG9ydCAgKnJwb3J0KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOwotCXN0cnVjdCBmY19pbnRlcm5hbCAqaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKIAlpbnQgdGltZW91dCA9IHJwb3J0LT5kZXZfbG9zc190bW87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjgzMCw3ICsyODM4LDcgQEAKIAogCS8qIHNlZSBpZiB3ZSBuZWVkIHRvIGtpbGwgaW8gZmFzdGVyIHRoYW4gd2FpdGluZyBmb3IgZGV2aWNlIGxvc3MgKi8KIAlpZiAoKHJwb3J0LT5mYXN0X2lvX2ZhaWxfdG1vICE9IC0xKSAmJgotCSAgICAocnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPCB0aW1lb3V0KSAmJiAoaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKSkKKwkgICAgKHJwb3J0LT5mYXN0X2lvX2ZhaWxfdG1vIDwgdGltZW91dCkpCiAJCWZjX3F1ZXVlX2Rldmxvc3Nfd29yayhzaG9zdCwgJnJwb3J0LT5mYWlsX2lvX3dvcmssCiAJCQkJCXJwb3J0LT5mYXN0X2lvX2ZhaWxfdG1vICogSFopOwogCkBAIC0yOTA2LDcgKzI5MTQsOCBAQAogCQkJZmNfZmx1c2hfZGV2bG9zcyhzaG9zdCk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX0RFVkxPU1NfUEVORElORzsKKwkJcnBvcnQtPmZsYWdzICY9IH4oRkNfUlBPUlRfRkFTVF9GQUlMX1RJTUVET1VUIHwKKwkJCQkgIEZDX1JQT1JUX0RFVkxPU1NfUEVORElORyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJCS8qIGVuc3VyZSBhbnkgc3RndCBkZWxldGUgZnVuY3Rpb25zIGFyZSBkb25lICovCkBAIC0zMDAxLDYgKzMwMTAsNyBAQAogCXJwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9IEZDX0NPU19VTlNQRUNJRklFRDsKIAlycG9ydC0+cm9sZXMgPSBGQ19QT1JUX1JPTEVfVU5LTk9XTjsKIAlycG9ydC0+cG9ydF9zdGF0ZSA9IEZDX1BPUlRTVEFURV9OT1RQUkVTRU5UOworCXJwb3J0LT5mbGFncyAmPSB+RkNfUlBPUlRfRkFTVF9GQUlMX1RJTUVET1VUOwogCiAJLyogcmVtb3ZlIHRoZSBpZGVudGlmaWVycyB0aGF0IGFyZW4ndCB1c2VkIGluIHRoZSBjb25zaXN0aW5nIGJpbmRpbmcgKi8KIAlzd2l0Y2ggKGZjX2hvc3QtPnRndGlkX2JpbmRfdHlwZSkgewpAQCAtMzA0MywxMyArMzA1MywxMiBAQAogewogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZjX3Jwb3J0LCBmYWlsX2lvX3dvcmsud29yayk7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7Ci0Jc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwogCiAJaWYgKHJwb3J0LT5wb3J0X3N0YXRlICE9IEZDX1BPUlRTVEFURV9CTE9DS0VEKQogCQlyZXR1cm47CiAKLQlpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOworCXJwb3J0LT5mbGFncyB8PSBGQ19SUE9SVF9GQVNUX0ZBSUxfVElNRURPVVQ7CisJZmNfdGVybWluYXRlX3Jwb3J0X2lvKHJwb3J0KTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCmluZGV4IDBjZTVmN2MuLjRhODAzZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIHNob3dfZXBfaGFuZGxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwID0gaXNjc2lfZGV2X3RvX2VuZHBvaW50KGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGVwLT5pZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxsdVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgZXAtPmlkKTsKIH0KIHN0YXRpYyBJU0NTSV9BVFRSKGVwLCBoYW5kbGUsIFNfSVJVR08sIHNob3dfZXBfaGFuZGxlLCBOVUxMKTsKIApAQCAtMTU2LDcgKzE1Niw3IEBACiBzdGF0aWMgaW50IGlzY3NpX21hdGNoX2VwaWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAgPSBpc2NzaV9kZXZfdG9fZW5kcG9pbnQoZGV2KTsKLQl1bnNpZ25lZCBpbnQgKmVwaWQgPSAodW5zaWduZWQgaW50ICopIGRhdGE7CisJdWludDY0X3QgKmVwaWQgPSAodWludDY0X3QgKikgZGF0YTsKIAogCXJldHVybiAqZXBpZCA9PSBlcC0+aWQ7CiB9CkBAIC0xNjYsNyArMTY2LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcDsKLQl1bnNpZ25lZCBpbnQgaWQ7CisJdWludDY0X3QgaWQ7CiAJaW50IGVycjsKIAogCWZvciAoaWQgPSAxOyBpZCA8IElTQ1NJX01BWF9FUElEOyBpZCsrKSB7CkBAIC0xODcsNyArMTg3LDggQEAKIAogCWVwLT5pZCA9IGlkOwogCWVwLT5kZXYuY2xhc3MgPSAmaXNjc2lfZW5kcG9pbnRfY2xhc3M7Ci0Jc25wcmludGYoZXAtPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAiZXAtJXUiLCBpZCk7CisJc25wcmludGYoZXAtPmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAiZXAtJWxsdSIsCisJCSAodW5zaWduZWQgbG9uZyBsb25nKSBpZCk7CiAJZXJyID0gZGV2aWNlX3JlZ2lzdGVyKCZlcC0+ZGV2KTsKICAgICAgICAgaWYgKGVycikKICAgICAgICAgICAgICAgICBnb3RvIGZyZWVfZXA7CkBAIC0zNzQsMTAgKzM3NSwxMCBAQAogCQllcnIgPSAwOwogCQlicmVhazsKIAljYXNlIElTQ1NJX1NFU1NJT05fRkFJTEVEOgotCQllcnIgPSBESURfSU1NX1JFVFJZIDw8IDE2OworCQllcnIgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9TRVNTSU9OX0ZSRUU6Ci0JCWVyciA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQllcnIgPSBESURfVFJBTlNQT1JUX0ZBSUxGQVNUIDw8IDE2OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKQEAgLTEwMTAsNyArMTAxMSw3IEBACiAKIAlza2IgPSBhbGxvY19za2IobGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikgewotCQlpc2NzaV9jb25uX2Vycm9yKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CisJCWlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKIAkJaXNjc2lfY2xzX2Nvbm5fcHJpbnRrKEtFUk5fRVJSLCBjb25uLCAiY2FuIG5vdCBkZWxpdmVyICIKIAkJCQkgICAgICAiY29udHJvbCBQRFU6IE9PTVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTAzMSw3ICsxMDMyLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3JlY3ZfcGR1KTsKIAotdm9pZCBpc2NzaV9jb25uX2Vycm9yKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiwgZW51bSBpc2NzaV9lcnIgZXJyb3IpCit2b2lkIGlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLCBlbnVtIGlzY3NpX2VyciBlcnJvcikKIHsKIAlzdHJ1Y3Qgbmxtc2doZHIJKm5saDsKIAlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOwpAQCAtMTA2Myw3ICsxMDY0LDcgQEAKIAlpc2NzaV9jbHNfY29ubl9wcmludGsoS0VSTl9JTkZPLCBjb25uLCAiZGV0ZWN0ZWQgY29ubiBlcnJvciAoJWQpXG4iLAogCQkJICAgICAgZXJyb3IpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfY29ubl9lcnJvcik7CitFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9jb25uX2Vycm9yX2V2ZW50KTsKIAogc3RhdGljIGludAogaXNjc2lfaWZfc2VuZF9yZXBseShpbnQgcGlkLCBpbnQgc2VxLCBpbnQgdHlwZSwgaW50IGRvbmUsIGludCBtdWx0aSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYwppbmRleCBiMjkzNjBlLi43YzJkMjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCkBAIC0xMDksNyArMTA5LDkgQEAKIAlmb3IoaSA9IDA7IGkgPCBEVl9SRVRSSUVTOyBpKyspIHsKIAkJcmVzdWx0ID0gc2NzaV9leGVjdXRlKHNkZXYsIGNtZCwgZGlyLCBidWZmZXIsIGJ1ZmZsZW4sCiAJCQkJICAgICAgc2Vuc2UsIERWX1RJTUVPVVQsIC8qIHJldHJpZXMgKi8gMSwKLQkJCQkgICAgICBSRVFfRkFJTEZBU1QpOworCQkJCSAgICAgIFJFUV9GQUlMRkFTVF9ERVYgfAorCQkJCSAgICAgIFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfAorCQkJCSAgICAgIFJFUV9GQUlMRkFTVF9EUklWRVIpOwogCQlpZiAocmVzdWx0ICYgRFJJVkVSX1NFTlNFKSB7CiAJCQlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc3NoZHJfdG1wOwogCQkJaWYgKCFzc2hkcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggYTdiNTNiZS4uN2M0ZDJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTM4NCw3ICszODQsNyBAQAogCXNlY3Rvcl90IGJsb2NrID0gcnEtPnNlY3RvcjsKIAlzZWN0b3JfdCB0aHJlc2hvbGQ7CiAJdW5zaWduZWQgaW50IHRoaXNfY291bnQgPSBycS0+bnJfc2VjdG9yczsKLQlpbnQgcmV0OworCWludCByZXQsIGhvc3RfZGlmOwogCiAJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykgewogCQlyZXQgPSBzY3NpX3NldHVwX2Jsa19wY19jbW5kKHNkcCwgcnEpOwpAQCAtNTE1LDcgKzUxNSw4IEBACiAJCQkJCXJxLT5ucl9zZWN0b3JzKSk7CiAKIAkvKiBTZXQgUkRQUk9URUNUL1dSUFJPVEVDVCBpZiBkaXNrIGlzIGZvcm1hdHRlZCB3aXRoIERJRiAqLwotCWlmIChzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RwLT5ob3N0LCBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpKQorCWhvc3RfZGlmID0gc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHNkcC0+aG9zdCwgc2RrcC0+cHJvdGVjdGlvbl90eXBlKTsKKwlpZiAoaG9zdF9kaWYpCiAJCVNDcG50LT5jbW5kWzFdID0gMSA8PCA1OwogCWVsc2UKIAkJU0NwbnQtPmNtbmRbMV0gPSAwOwpAQCAtNTczLDggKzU3NCw5IEBACiAJU0NwbnQtPnNkYi5sZW5ndGggPSB0aGlzX2NvdW50ICogc2RwLT5zZWN0b3Jfc2l6ZTsKIAogCS8qIElmIERJRiBvciBESVggaXMgZW5hYmxlZCwgdGVsbCBIQkEgaG93IHRvIGhhbmRsZSByZXF1ZXN0ICovCi0JaWYgKHNka3AtPnByb3RlY3Rpb25fdHlwZSB8fCBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpKQotCQlzZF9kaWZfb3AoU0NwbnQsIHNka3AtPnByb3RlY3Rpb25fdHlwZSwgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSk7CisJaWYgKGhvc3RfZGlmIHx8IHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpCisJCXNkX2RpZl9vcChTQ3BudCwgaG9zdF9kaWYsIHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCksCisJCQkgIHNka3AtPnByb3RlY3Rpb25fdHlwZSk7CiAKIAkvKgogCSAqIFdlIHNob3VsZG4ndCBkaXNjb25uZWN0IGluIHRoZSBtaWRkbGUgb2YgYSBzZWN0b3IsIHNvIHdpdGggYSBkdW1iCkBAIC0xMjUyLDE0ICsxMjU0LDEyIEBACiAJZWxzZQogCQl0eXBlID0gKChidWZmZXJbMTJdID4+IDEpICYgNykgKyAxOyAvKiBQX1RZUEUgMCA9IFR5cGUgMSAqLwogCisJc2RrcC0+cHJvdGVjdGlvbl90eXBlID0gdHlwZTsKKwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU0RfRElGX1RZUEUwX1BST1RFQ1RJT046Ci0JCXNka3AtPnByb3RlY3Rpb25fdHlwZSA9IDA7Ci0JCWJyZWFrOwotCiAJY2FzZSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTjoKIAljYXNlIFNEX0RJRl9UWVBFM19QUk9URUNUSU9OOgotCQlzZGtwLT5wcm90ZWN0aW9uX3R5cGUgPSB0eXBlOwogCQlicmVhazsKIAogCWNhc2UgU0RfRElGX1RZUEUyX1BST1RFQ1RJT046CkBAIC0xMjc3LDcgKzEyNzcsNiBAQAogCXJldHVybjsKIAogZGlzYWJsZToKLQlzZGtwLT5wcm90ZWN0aW9uX3R5cGUgPSAwOwogCXNka3AtPmNhcGFjaXR5ID0gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmggYi9kcml2ZXJzL3Njc2kvc2QuaAppbmRleCA5NWI5ZjA2Li43NTYzOGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuaAorKysgYi9kcml2ZXJzL3Njc2kvc2QuaApAQCAtOTcsMTkgKzk3LDI4IEBACiAgICAgICAgX19iZTMyIHJlZl90YWc7CQkvKiBUYXJnZXQgTEJBIG9yIGluZGlyZWN0IExCQSAqLwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKQorI2lmZGVmIENPTkZJR19CTEtfREVWX0lOVEVHUklUWQogCi1leHRlcm4gdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHNkX2RpZl9jb25maWdfaG9zdChzdHJ1Y3Qgc2NzaV9kaXNrICopOwogZXh0ZXJuIGludCBzZF9kaWZfcHJlcGFyZShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgc2RfZGlmX2NvbXBsZXRlKHN0cnVjdCBzY3NpX2NtbmQgKiwgdW5zaWduZWQgaW50KTsKIAogI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKLSNkZWZpbmUgc2RfZGlmX29wKGEsIGIsIGMpCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBzZF9kaWZfY29uZmlnX2hvc3QoYSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNkX2RpZl9wcmVwYXJlKGEsIGIsIGMpCQkJKDApCi0jZGVmaW5lIHNkX2RpZl9jb21wbGV0ZShhLCBiKQkJCSgwKQorc3RhdGljIGlubGluZSB2b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc2RfZGlmX2NvbmZpZ19ob3N0KHN0cnVjdCBzY3NpX2Rpc2sgKmRpc2spCit7Cit9CitzdGF0aWMgaW5saW5lIGludCBzZF9kaWZfcHJlcGFyZShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90IHMsIHVuc2lnbmVkIGludCBhKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIHNkX2RpZl9jb21wbGV0ZShzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGludCBhKQoreworfQogCiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZF9kaWYuYyBiL2RyaXZlcnMvc2NzaS9zZF9kaWYuYwppbmRleCA0ZDE3ZjNkLi4zZWJiMWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2RfZGlmLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkX2RpZi5jCkBAIC0zMTEsMjYgKzMxMSwyNyBAQAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gc2RrcC0+ZGV2aWNlOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gc2RrcC0+ZGlzazsKIAl1OCB0eXBlID0gc2RrcC0+cHJvdGVjdGlvbl90eXBlOworCWludCBkaWYsIGRpeDsKIAotCS8qIElmIHRoaXMgSEJBIGRvZXNuJ3Qgc3VwcG9ydCBESVgsIHJlc29ydCB0byBub3JtYWwgSS9PIG9yIERJRiAqLwotCWlmIChzY3NpX2hvc3RfZGl4X2NhcGFibGUoc2RwLT5ob3N0LCB0eXBlKSA9PSAwKSB7CisJZGlmID0gc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHNkcC0+aG9zdCwgdHlwZSk7CisJZGl4ID0gc2NzaV9ob3N0X2RpeF9jYXBhYmxlKHNkcC0+aG9zdCwgdHlwZSk7CiAKLQkJaWYgKHR5cGUgPT0gU0RfRElGX1RZUEUwX1BST1RFQ1RJT04pCi0JCQlyZXR1cm47Ci0KLQkJaWYgKHNjc2lfaG9zdF9kaWZfY2FwYWJsZShzZHAtPmhvc3QsIHR5cGUpID09IDApIHsKLQkJCXNkX3ByaW50ayhLRVJOX0lORk8sIHNka3AsICJUeXBlICVkIHByb3RlY3Rpb24gIiBcCi0JCQkJICAidW5zdXBwb3J0ZWQgYnkgSEJBLiBEaXNhYmxpbmcgRElGLlxuIiwgdHlwZSk7Ci0JCQlzZGtwLT5wcm90ZWN0aW9uX3R5cGUgPSAwOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJc2RfcHJpbnRrKEtFUk5fSU5GTywgc2RrcCwgIkVuYWJsaW5nIERJRiBUeXBlICVkIHByb3RlY3Rpb25cbiIsCi0JCQkgIHR5cGUpOwotCi0JCXJldHVybjsKKwlpZiAoIWRpeCAmJiBzY3NpX2hvc3RfZGl4X2NhcGFibGUoc2RwLT5ob3N0LCAwKSkgeworCQlkaWYgPSAwOyBkaXggPSAxOwogCX0KIAorCWlmICh0eXBlKSB7CisJCWlmIChkaWYpCisJCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCisJCQkJICAiRW5hYmxpbmcgRElGIFR5cGUgJWQgcHJvdGVjdGlvblxuIiwgdHlwZSk7CisJCWVsc2UKKwkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKKwkJCQkgICJEaXNhYmxpbmcgRElGIFR5cGUgJWQgcHJvdGVjdGlvblxuIiwgdHlwZSk7CisJfQorCisJaWYgKCFkaXgpCisJCXJldHVybjsKKwogCS8qIEVuYWJsZSBETUEgb2YgcHJvdGVjdGlvbiBpbmZvcm1hdGlvbiAqLwogCWlmIChzY3NpX2hvc3RfZ2V0X2d1YXJkKHNka3AtPmRldmljZS0+aG9zdCkgJiBTSE9TVF9ESVhfR1VBUkRfSVApCiAJCWlmICh0eXBlID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKQpAQCAtMzQzLDE3ICszNDQsMTcgQEAKIAkJZWxzZQogCQkJYmxrX2ludGVncml0eV9yZWdpc3RlcihkaXNrLCAmZGlmX3R5cGUxX2ludGVncml0eV9jcmMpOwogCi0Jc2RfcHJpbnRrKEtFUk5fSU5GTywgc2RrcCwKLQkJICAiRW5hYmxpbmcgJXMgaW50ZWdyaXR5IHByb3RlY3Rpb25cbiIsIGRpc2stPmludGVncml0eS0+bmFtZSk7CisJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAorCQkgICJFbmFibGluZyBESVggJXMgcHJvdGVjdGlvblxuIiwgZGlzay0+aW50ZWdyaXR5LT5uYW1lKTsKIAogCS8qIFNpZ25hbCB0byBibG9jayBsYXllciB0aGF0IHdlIHN1cHBvcnQgc2VjdG9yIHRhZ2dpbmcgKi8KLQlpZiAodHlwZSAmJiBzZGtwLT5BVE8pIHsKKwlpZiAoZGlmICYmIHR5cGUgJiYgc2RrcC0+QVRPKSB7CiAJCWlmICh0eXBlID09IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKQogCQkJZGlzay0+aW50ZWdyaXR5LT50YWdfc2l6ZSA9IHNpemVvZih1MTYpICsgc2l6ZW9mKHUzMik7CiAJCWVsc2UKIAkJCWRpc2stPmludGVncml0eS0+dGFnX3NpemUgPSBzaXplb2YodTE2KTsKIAotCQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLCAiRElGIGFwcGxpY2F0aW9uIHRhZyBzaXplICV1XG4iLAorCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJESUYgYXBwbGljYXRpb24gdGFnIHNpemUgJXVcbiIsCiAJCQkgIGRpc2stPmludGVncml0eS0+dGFnX3NpemUpOwogCX0KIH0KQEAgLTM2MSw3ICszNjIsNyBAQAogLyoKICAqIERJRiBETUEgb3BlcmF0aW9uIG1hZ2ljIGRlY29kZXIgcmluZy4KICAqLwotdm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgaW50IGRpZiwgdW5zaWduZWQgaW50IGRpeCkKK3ZvaWQgc2RfZGlmX29wKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHVuc2lnbmVkIGludCBkaWYsIHVuc2lnbmVkIGludCBkaXgsIHVuc2lnbmVkIGludCB0eXBlKQogewogCWludCBjc3VtX2NvbnZlcnQsIHByb3Rfb3A7CiAKQEAgLTQwNiw3ICs0MDcsOCBAQAogCX0KIAogCXNjc2lfc2V0X3Byb3Rfb3Aoc2NtZCwgcHJvdF9vcCk7Ci0Jc2NzaV9zZXRfcHJvdF90eXBlKHNjbWQsIGRpZik7CisJaWYgKGRpZikKKwkJc2NzaV9zZXRfcHJvdF90eXBlKHNjbWQsIHR5cGUpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuYwppbmRleCBiYTliOWJiLi45M2JkNTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYworKysgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtMTQ1MCwxMiArMTQ1MCwxMCBAQAogCWlmIChzZ19zeXNmc192YWxpZCkgewogCQlzdHJ1Y3QgZGV2aWNlICpzZ19jbGFzc19tZW1iZXI7CiAKLQkJc2dfY2xhc3NfbWVtYmVyID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHNnX3N5c2ZzX2NsYXNzLAotCQkJCQkJCWNsX2Rldi0+cGFyZW50LAotCQkJCQkJCU1LREVWKFNDU0lfR0VORVJJQ19NQUpPUiwKLQkJCQkJCQkgICAgICBzZHAtPmluZGV4KSwKLQkJCQkJCQlzZHAsCi0JCQkJCQkJIiVzIiwgZGlzay0+ZGlza19uYW1lKTsKKwkJc2dfY2xhc3NfbWVtYmVyID0gZGV2aWNlX2NyZWF0ZShzZ19zeXNmc19jbGFzcywgY2xfZGV2LT5wYXJlbnQsCisJCQkJCQlNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsCisJCQkJCQkgICAgICBzZHAtPmluZGV4KSwKKwkJCQkJCXNkcCwgIiVzIiwgZGlzay0+ZGlza19uYW1lKTsKIAkJaWYgKElTX0VSUihzZ19jbGFzc19tZW1iZXIpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInNnX2FkZDogIgogCQkJICAgICAgICJkZXZpY2VfY3JlYXRlIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3JfdmVuZG9yLmMgYi9kcml2ZXJzL3Njc2kvc3JfdmVuZG9yLmMKaW5kZXggNGViM2RhOS4uNGFkM2UwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NyX3ZlbmRvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zcl92ZW5kb3IuYwpAQCAtMjIzLDkgKzIyMyw5IEBACiAJCQkJbm9fbXVsdGkgPSAxOwogCQkJCWJyZWFrOwogCQkJfQotCQkJbWluID0gQkNEMkJJTihidWZmZXJbMTVdKTsKLQkJCXNlYyA9IEJDRDJCSU4oYnVmZmVyWzE2XSk7Ci0JCQlmcmFtZSA9IEJDRDJCSU4oYnVmZmVyWzE3XSk7CisJCQltaW4gPSBiY2QyYmluKGJ1ZmZlclsxNV0pOworCQkJc2VjID0gYmNkMmJpbihidWZmZXJbMTZdKTsKKwkJCWZyYW1lID0gYmNkMmJpbihidWZmZXJbMTddKTsKIAkJCXNlY3RvciA9IG1pbiAqIENEX1NFQ1MgKiBDRF9GUkFNRVMgKyBzZWMgKiBDRF9GUkFNRVMgKyBmcmFtZTsKIAkJCWJyZWFrOwogCQl9CkBAIC0yNTIsOSArMjUyLDkgQEAKIAkJCX0KIAkJCWlmIChyYyAhPSAwKQogCQkJCWJyZWFrOwotCQkJbWluID0gQkNEMkJJTihidWZmZXJbMV0pOwotCQkJc2VjID0gQkNEMkJJTihidWZmZXJbMl0pOwotCQkJZnJhbWUgPSBCQ0QyQklOKGJ1ZmZlclszXSk7CisJCQltaW4gPSBiY2QyYmluKGJ1ZmZlclsxXSk7CisJCQlzZWMgPSBiY2QyYmluKGJ1ZmZlclsyXSk7CisJCQlmcmFtZSA9IGJjZDJiaW4oYnVmZmVyWzNdKTsKIAkJCXNlY3RvciA9IG1pbiAqIENEX1NFQ1MgKiBDRF9GUkFNRVMgKyBzZWMgKiBDRF9GUkFNRVMgKyBmcmFtZTsKIAkJCWlmIChzZWN0b3IpCiAJCQkJc2VjdG9yIC09IENEX01TRl9PRkZTRVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IGMyYmI1M2UzLi41YzI4ZDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvc3QuYwpAQCAtNDQyOCwxMyArNDQyOCwxMCBAQAogCQlzbnByaW50ZihuYW1lLCAxMCwgIiVzJXMlcyIsIHJldyA/ICJuIiA6ICIiLAogCQkJIFNUcC0+ZGlzay0+ZGlza19uYW1lLCBzdF9mb3JtYXRzW2ldKTsKIAkJc3RfY2xhc3NfbWVtYmVyID0KLQkJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShzdF9zeXNmc19jbGFzcywKLQkJCQkJICAgICAgJlNUcC0+ZGV2aWNlLT5zZGV2X2dlbmRldiwKLQkJCQkJICAgICAgTUtERVYoU0NTSV9UQVBFX01BSk9SLAotCQkJCQkJICAgIFRBUEVfTUlOT1IoZGV2X251bSwKLQkJCQkJCQkgICAgICBtb2RlLCByZXcpKSwKLQkJCQkJICAgICAgJlNUcC0+bW9kZXNbbW9kZV0sCi0JCQkJCSAgICAgICIlcyIsIG5hbWUpOworCQkJZGV2aWNlX2NyZWF0ZShzdF9zeXNmc19jbGFzcywgJlNUcC0+ZGV2aWNlLT5zZGV2X2dlbmRldiwKKwkJCQkgICAgICBNS0RFVihTQ1NJX1RBUEVfTUFKT1IsCisJCQkJCSAgICBUQVBFX01JTk9SKGRldl9udW0sIG1vZGUsIHJldykpLAorCQkJCSAgICAgICZTVHAtPm1vZGVzW21vZGVdLCAiJXMiLCBuYW1lKTsKIAkJaWYgKElTX0VSUihzdF9jbGFzc19tZW1iZXIpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJzdCVkOiBkZXZpY2VfY3JlYXRlIGZhaWxlZFxuIiwKIAkJCSAgICAgICBkZXZfbnVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jCmluZGV4IDM4MWIxMmEuLmQ5MzViMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYwpAQCAtNjYsNyArNjYsNiBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgbTY4a19zZXJpYWwgbTY4a19zb2Z0W05SX1BPUlRTXTsKLXN0cnVjdCBtNjhrX3NlcmlhbCAqSVJRX3BvcnRzW05SX0lSUVNdOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHVhcnRfaXJxc1tOUl9QT1JUU10gPSBVQVJUX0lSUV9ERUZOUzsKIApAQCAtMzc1LDE1ICszNzQsMTEgQEAKICAqLwogaXJxcmV0dXJuX3QgcnNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgbTY4a19zZXJpYWwgKiBpbmZvOworCXN0cnVjdCBtNjhrX3NlcmlhbCAqaW5mbyA9IGRldl9pZDsKIAltNjgzMjhfdWFydCAqdWFydDsKIAl1bnNpZ25lZCBzaG9ydCByeDsKIAl1bnNpZ25lZCBzaG9ydCB0eDsKIAotCWluZm8gPSBJUlFfcG9ydHNbaXJxXTsKLQlpZighaW5mbykKLQkgICAgcmV0dXJuIElSUV9OT05FOwotCiAJdWFydCA9ICZ1YXJ0X2FkZHJbaW5mby0+bGluZV07CiAJcnggPSB1YXJ0LT51cngudzsKIApAQCAtMTM4Myw4ICsxMzc4LDYgQEAKIAkJICAgaW5mby0+cG9ydCwgaW5mby0+aXJxKTsKIAkgICAgcHJpbnRrKCIgaXMgYSBidWlsdGluIE1DNjgzMjggVUFSVFxuIik7CiAJICAgIAotCSAgICBJUlFfcG9ydHNbaW5mby0+aXJxXSA9IGluZm87CS8qIHdhc3RlIG9mIHNwYWNlICovCi0KICNpZmRlZiBDT05GSUdfTTY4VlozMjgKIAkJaWYgKGkgPiAwICkKIAkJCVBKU0VMICY9IDB4Q0Y7ICAvKiBQU1cgZW5hYmxlIHNlY29uZCBwb3J0IG91dHB1dCAqLwpAQCAtMTM5Myw3ICsxMzg2LDcgQEAKIAkgICAgaWYgKHJlcXVlc3RfaXJxKHVhcnRfaXJxc1tpXSwKIAkJCSAgICByc19pbnRlcnJ1cHQsCiAJCQkgICAgSVJRRl9ESVNBQkxFRCwKLQkJCSAgICAiTTY4MzI4X1VBUlQiLCBOVUxMKSkKKwkJCSAgICAiTTY4MzI4X1VBUlQiLCBpbmZvKSkKICAgICAgICAgICAgICAgICBwYW5pYygiVW5hYmxlIHRvIGF0dGFjaCA2ODMyOCBzZXJpYWwgaW50ZXJydXB0XG4iKTsKIAl9CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCmluZGV4IGQ0MTA0YTMuLjMwMzI3MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKQEAgLTE1NiwxMSArMTU2LDE1IEBACiB9OwogCiBzdHJ1Y3QgaXJxX2luZm8gewotCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0CQkJaGxpc3Rfbm9kZSBub2RlOworCWludAkJCWlycTsKKwlzcGlubG9ja190CQlsb2NrOwkvKiBQcm90ZWN0cyBsaXN0IG5vdCB0aGUgaGFzaCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJKmhlYWQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IGlycV9pbmZvIGlycV9saXN0c1tOUl9JUlFTXTsKKyNkZWZpbmUgTlJfSVJRX0hBU0gJCTMyCS8qIENhbiBiZSBhZGp1c3RlZCBsYXRlciAqLworc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIGlycV9saXN0c1tOUl9JUlFfSEFTSF07CitzdGF0aWMgREVGSU5FX01VVEVYKGhhc2hfbXV0ZXgpOwkvKiBVc2VkIHRvIHdhbGsgdGhlIGhhc2ggKi8KIAogLyoKICAqIEhlcmUgd2UgZGVmaW5lIHRoZSBkZWZhdWx0IHhtaXQgZmlmbyBzaXplIHVzZWQgZm9yIGVhY2ggdHlwZSBvZiBVQVJULgpAQCAtMTU0NSwxNSArMTU0OSw0MyBAQAogCQlCVUdfT04oaS0+aGVhZCAhPSAmdXAtPmxpc3QpOwogCQlpLT5oZWFkID0gTlVMTDsKIAl9Ci0KIAlzcGluX3VubG9ja19pcnEoJmktPmxvY2spOworCS8qIExpc3QgZW1wdHkgc28gdGhyb3cgYXdheSB0aGUgaGFzaCBub2RlICovCisJaWYgKGktPmhlYWQgPT0gTlVMTCkgeworCQlobGlzdF9kZWwoJmktPm5vZGUpOworCQlrZnJlZShpKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgc2VyaWFsX2xpbmtfaXJxX2NoYWluKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXApCiB7Ci0Jc3RydWN0IGlycV9pbmZvICppID0gaXJxX2xpc3RzICsgdXAtPnBvcnQuaXJxOworCXN0cnVjdCBobGlzdF9oZWFkICpoOworCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXN0cnVjdCBpcnFfaW5mbyAqaTsKIAlpbnQgcmV0LCBpcnFfZmxhZ3MgPSB1cC0+cG9ydC5mbGFncyAmIFVQRl9TSEFSRV9JUlEgPyBJUlFGX1NIQVJFRCA6IDA7CiAKKwltdXRleF9sb2NrKCZoYXNoX211dGV4KTsKKworCWggPSAmaXJxX2xpc3RzW3VwLT5wb3J0LmlycSAlIE5SX0lSUV9IQVNIXTsKKworCWhsaXN0X2Zvcl9lYWNoKG4sIGgpIHsKKwkJaSA9IGhsaXN0X2VudHJ5KG4sIHN0cnVjdCBpcnFfaW5mbywgbm9kZSk7CisJCWlmIChpLT5pcnEgPT0gdXAtPnBvcnQuaXJxKQorCQkJYnJlYWs7CisJfQorCisJaWYgKG4gPT0gTlVMTCkgeworCQlpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlycV9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChpID09IE5VTEwpIHsKKwkJCW11dGV4X3VubG9jaygmaGFzaF9tdXRleCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlzcGluX2xvY2tfaW5pdCgmaS0+bG9jayk7CisJCWktPmlycSA9IHVwLT5wb3J0LmlycTsKKwkJaGxpc3RfYWRkX2hlYWQoJmktPm5vZGUsIGgpOworCX0KKwltdXRleF91bmxvY2soJmhhc2hfbXV0ZXgpOworCiAJc3Bpbl9sb2NrX2lycSgmaS0+bG9jayk7CiAKIAlpZiAoaS0+aGVhZCkgewpAQCAtMTU3NywxNCArMTYwOSwyOCBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdW5saW5rX2lycV9jaGFpbihzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQogewotCXN0cnVjdCBpcnFfaW5mbyAqaSA9IGlycV9saXN0cyArIHVwLT5wb3J0LmlycTsKKwlzdHJ1Y3QgaXJxX2luZm8gKmk7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisJc3RydWN0IGhsaXN0X2hlYWQgKmg7CiAKKwltdXRleF9sb2NrKCZoYXNoX211dGV4KTsKKworCWggPSAmaXJxX2xpc3RzW3VwLT5wb3J0LmlycSAlIE5SX0lSUV9IQVNIXTsKKworCWhsaXN0X2Zvcl9lYWNoKG4sIGgpIHsKKwkJaSA9IGhsaXN0X2VudHJ5KG4sIHN0cnVjdCBpcnFfaW5mbywgbm9kZSk7CisJCWlmIChpLT5pcnEgPT0gdXAtPnBvcnQuaXJxKQorCQkJYnJlYWs7CisJfQorCisJQlVHX09OKG4gPT0gTlVMTCk7CiAJQlVHX09OKGktPmhlYWQgPT0gTlVMTCk7CiAKIAlpZiAobGlzdF9lbXB0eShpLT5oZWFkKSkKIAkJZnJlZV9pcnEodXAtPnBvcnQuaXJxLCBpKTsKIAogCXNlcmlhbF9kb191bmxpbmsoaSwgdXApOworCW11dGV4X3VubG9jaygmaGFzaF9tdXRleCk7CiB9CiAKIC8qIEJhc2UgdGltZXIgaW50ZXJ2YWwgZm9yIHBvbGxpbmcgKi8KQEAgLTIyMjMsOSArMjI2OSw5IEBACiAJCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0VGUiwgZWZyKTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAKIAkvKiBXb3JrYXJvdW5kIHRvIGVuYWJsZSAxMTUyMDAgYmF1ZCBvbiBPTUFQMTUxMCBpbnRlcm5hbCBwb3J0cyAqLwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSAmJiBpc19vbWFwX3BvcnQoKHVuc2lnbmVkIGludCl1cC0+cG9ydC5tZW1iYXNlKSkgeworCWlmIChjcHVfaXNfb21hcDE1MTAoKSAmJiBpc19vbWFwX3BvcnQodXApKSB7CiAJCWlmIChiYXVkID09IDExNTIwMCkgewogCQkJcXVvdCA9IDE7CiAJCQlzZXJpYWxfb3V0KHVwLCBVQVJUX09NQVBfT1NDXzEyTV9TRUwsIDEpOwpAQCAtMjI3OCwxOCArMjMyNCwyNyBAQAogCQlwLT5wbShwb3J0LCBzdGF0ZSwgb2xkc3RhdGUpOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbDgyNTBfcG9ydF9zaXplKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqcHQpCit7CisJaWYgKHB0LT5wb3J0LmlvdHlwZSA9PSBVUElPX0FVKQorCQlyZXR1cm4gMHgxMDAwMDA7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUAorCWlmIChpc19vbWFwX3BvcnQocHQpKQorCQlyZXR1cm4gMHgxNiA8PCBwdC0+cG9ydC5yZWdzaGlmdDsKKyNlbmRpZgorCXJldHVybiA4IDw8IHB0LT5wb3J0LnJlZ3NoaWZ0OworfQorCiAvKgogICogUmVzb3VyY2UgaGFuZGxpbmcuCiAgKi8KIHN0YXRpYyBpbnQgc2VyaWFsODI1MF9yZXF1ZXN0X3N0ZF9yZXNvdXJjZShzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQogewotCXVuc2lnbmVkIGludCBzaXplID0gOCA8PCB1cC0+cG9ydC5yZWdzaGlmdDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IHNlcmlhbDgyNTBfcG9ydF9zaXplKHVwKTsKIAlpbnQgcmV0ID0gMDsKIAogCXN3aXRjaCAodXAtPnBvcnQuaW90eXBlKSB7CiAJY2FzZSBVUElPX0FVOgotCQlzaXplID0gMHgxMDAwMDA7Ci0JCS8qIGZhbGwgdGhydSAqLwogCWNhc2UgVVBJT19UU0k6CiAJY2FzZSBVUElPX01FTTMyOgogCWNhc2UgVVBJT19NRU06CkBAIC0yMzIzLDEyICsyMzc4LDEwIEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbDgyNTBfcmVsZWFzZV9zdGRfcmVzb3VyY2Uoc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCkKIHsKLQl1bnNpZ25lZCBpbnQgc2l6ZSA9IDggPDwgdXAtPnBvcnQucmVnc2hpZnQ7CisJdW5zaWduZWQgaW50IHNpemUgPSBzZXJpYWw4MjUwX3BvcnRfc2l6ZSh1cCk7CiAKIAlzd2l0Y2ggKHVwLT5wb3J0LmlvdHlwZSkgewogCWNhc2UgVVBJT19BVToKLQkJc2l6ZSA9IDB4MTAwMDAwOwotCQkvKiBmYWxsIHRocnUgKi8KIAljYXNlIFVQSU9fVFNJOgogCWNhc2UgVVBJT19NRU0zMjoKIAljYXNlIFVQSU9fTUVNOgpAQCAtMjQ0MCw3ICsyNDkzLDcgQEAKIHN0YXRpYyBpbnQKIHNlcmlhbDgyNTBfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnNlcikKIHsKLQlpZiAoc2VyLT5pcnEgPj0gTlJfSVJRUyB8fCBzZXItPmlycSA8IDAgfHwKKwlpZiAoc2VyLT5pcnEgPj0gbnJfaXJxcyB8fCBzZXItPmlycSA8IDAgfHwKIAkgICAgc2VyLT5iYXVkX2Jhc2UgPCA5NjAwIHx8IHNlci0+dHlwZSA8IFBPUlRfVU5LTk9XTiB8fAogCSAgICBzZXItPnR5cGUgPj0gQVJSQVlfU0laRSh1YXJ0X2NvbmZpZykgfHwgc2VyLT50eXBlID09IFBPUlRfQ0lSUlVTIHx8CiAJICAgIHNlci0+dHlwZSA9PSBQT1JUX1NUQVJURUNIKQpAQCAtMjk2MCw3ICszMDEzLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2VyaWFsODI1MF9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCwgaTsKKwlpbnQgcmV0OwogCiAJaWYgKG5yX3VhcnRzID4gVUFSVF9OUikKIAkJbnJfdWFydHMgPSBVQVJUX05SOwpAQCAtMjk5NiwxNSArMzA0OSwxNSBAQAogCQlnb3RvIG91dDsKIAogCXBsYXRmb3JtX2RldmljZV9kZWwoc2VyaWFsODI1MF9pc2FfZGV2cyk7Ci0gcHV0X2RldjoKK3B1dF9kZXY6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChzZXJpYWw4MjUwX2lzYV9kZXZzKTsKLSB1bnJlZ191YXJ0X2RydjoKK3VucmVnX3VhcnRfZHJ2OgogI2lmZGVmIENPTkZJR19TUEFSQwogCXN1bnNlcmlhbF91bnJlZ2lzdGVyX21pbm9ycygmc2VyaWFsODI1MF9yZWcsIFVBUlRfTlIpOwogI2Vsc2UKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWw4MjUwX3JlZyk7CiAjZW5kaWYKLSBvdXQ6CitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9nc2MuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfZ3NjLmMKaW5kZXggMDQxNmFkMy4uNDE4YjRmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9nc2MuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2dzYy5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAkucHJvYmUJCT0gc2VyaWFsX2luaXRfY2hpcCwKIH07CiAKLWludCBfX2luaXQgcHJvYmVfc2VyaWFsX2dzYyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcHJvYmVfc2VyaWFsX2dzYyh2b2lkKQogewogCXJlZ2lzdGVyX3BhcmlzY19kcml2ZXIoJmxhc2lfZHJpdmVyKTsKIAlyZWdpc3Rlcl9wYXJpc2NfZHJpdmVyKCZzZXJpYWxfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCmluZGV4IDMxNzg2YjMuLmRiNzgzYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwpAQCAtMTEyMyw0MiArMTEyMyw2IEBACiAJICB5b3VyIGJvb3QgbG9hZGVyIChsaWxvIG9yIGxvYWRsaW4pIGFib3V0IGhvdyB0byBwYXNzIG9wdGlvbnMgdG8gdGhlCiAJICBrZXJuZWwgYXQgYm9vdCB0aW1lLikKIAotY29uZmlnIFNFUklBTF9DUE1fU0NDMQotCWJvb2wgIlN1cHBvcnQgZm9yIFNDQzEgc2VyaWFsIHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfQ1BNPXkKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gdXNlIFNDQzEgYXMgYSBzZXJpYWwgcG9ydAotCi1jb25maWcgU0VSSUFMX0NQTV9TQ0MyCi0JYm9vbCAiU3VwcG9ydCBmb3IgU0NDMiBzZXJpYWwgcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9DUE09eQotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byB1c2UgU0NDMiBhcyBhIHNlcmlhbCBwb3J0Ci0KLWNvbmZpZyBTRVJJQUxfQ1BNX1NDQzMKLQlib29sICJTdXBwb3J0IGZvciBTQ0MzIHNlcmlhbCBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX0NQTT15Ci0JaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHVzZSBTQ0MzIGFzIGEgc2VyaWFsIHBvcnQKLQotY29uZmlnIFNFUklBTF9DUE1fU0NDNAotCWJvb2wgIlN1cHBvcnQgZm9yIFNDQzQgc2VyaWFsIHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfQ1BNPXkKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gdXNlIFNDQzQgYXMgYSBzZXJpYWwgcG9ydAotCi1jb25maWcgU0VSSUFMX0NQTV9TTUMxCi0JYm9vbCAiU3VwcG9ydCBmb3IgU01DMSBzZXJpYWwgcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9DUE09eQotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byB1c2UgU01DMSBhcyBhIHNlcmlhbCBwb3J0Ci0KLWNvbmZpZyBTRVJJQUxfQ1BNX1NNQzIKLQlib29sICJTdXBwb3J0IGZvciBTTUMyIHNlcmlhbCBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX0NQTT15Ci0JaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHVzZSBTTUMyIGFzIGEgc2VyaWFsIHBvcnQKLQogY29uZmlnIFNFUklBTF9TR0lfTDFfQ09OU09MRQogCWJvb2wgIlNHSSBBbHRpeCBMMSBzZXJpYWwgY29uc29sZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gSUE2NF9HRU5FUklDIHx8IElBNjRfU0dJX1NOMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCmluZGV4IDkwYjU2YzIuLjcxNTYyNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKQEAgLTUxMiw3ICs1MTIsNyBAQAogCWludCByZXQgPSAwOwogCWlmIChzZXItPnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHNlci0+dHlwZSAhPSBQT1JUX0FNQkEpCiAJCXJldCA9IC1FSU5WQUw7Ci0JaWYgKHNlci0+aXJxIDwgMCB8fCBzZXItPmlycSA+PSBOUl9JUlFTKQorCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gbnJfaXJxcykKIAkJcmV0ID0gLUVJTlZBTDsKIAlpZiAoc2VyLT5iYXVkX2Jhc2UgPCA5NjAwKQogCQlyZXQgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCmluZGV4IDlkMDhmMjcuLmI3MTgwMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKQEAgLTU3Miw3ICs1NzIsNyBAQAogCWludCByZXQgPSAwOwogCWlmIChzZXItPnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHNlci0+dHlwZSAhPSBQT1JUX0FNQkEpCiAJCXJldCA9IC1FSU5WQUw7Ci0JaWYgKHNlci0+aXJxIDwgMCB8fCBzZXItPmlycSA+PSBOUl9JUlFTKQorCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gbnJfaXJxcykKIAkJcmV0ID0gLUVJTlZBTDsKIAlpZiAoc2VyLT5iYXVkX2Jhc2UgPCA5NjAwKQogCQlyZXQgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCmluZGV4IDI1ZWZjYTUuLmJkZTRiNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKQEAgLTYyMyw3ICs2MjMsNyBAQAogCiAJaWYgKHNlci0+dHlwZSAhPSBQT1JUX1VOS05PV04gJiYgc2VyLT50eXBlICE9IFBPUlRfQ1BNKQogCQlyZXQgPSAtRUlOVkFMOwotCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gTlJfSVJRUykKKwlpZiAoc2VyLT5pcnEgPCAwIHx8IHNlci0+aXJxID49IG5yX2lycXMpCiAJCXJldCA9IC1FSU5WQUw7CiAJaWYgKHNlci0+YmF1ZF9iYXNlIDwgOTYwMCkKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTEzMzMsNiArMTMzMyw5IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCS8qIGluaXRpYWxpemUgdGhlIGRldmljZSBwb2ludGVyIGZvciB0aGUgcG9ydCAqLworCXBpbmZvLT5wb3J0LmRldiA9ICZvZmRldi0+ZGV2OworCiAJcmV0dXJuIHVhcnRfYWRkX29uZV9wb3J0KCZjcG1fcmVnLCAmcGluZm8tPnBvcnQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMKaW5kZXggMGYwYWZmMC4uMWI5NGM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCW1lbV9hZGRyID0gKHU4ICopIGNwbV9kcHJhbV9hZGRyKGNwbV9kcGFsbG9jKG1lbXN6LCA4KSk7CiAJCWRtYV9hZGRyID0gKHUzMiljcG1fZHByYW1fcGh5cyhtZW1fYWRkcik7CiAJfSBlbHNlCi0JCW1lbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIG1lbXN6LCAmZG1hX2FkZHIsCisJCW1lbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KHBpbmZvLT5wb3J0LmRldiwgbWVtc3osICZkbWFfYWRkciwKIAkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CiAKIAlpZiAobWVtX2FkZHIgPT0gTlVMTCkgewpAQCAtMTI3LDggKzEyNyw4IEBACiAKIHZvaWQgY3BtX3VhcnRfZnJlZWJ1ZihzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pCiB7Ci0JZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgTDFfQ0FDSEVfQUxJR04ocGluZm8tPnJ4X25yZmlmb3MgKgotCQkJCQkgICAgICAgcGluZm8tPnJ4X2ZpZm9zaXplKSArCisJZG1hX2ZyZWVfY29oZXJlbnQocGluZm8tPnBvcnQuZGV2LCBMMV9DQUNIRV9BTElHTihwaW5mby0+cnhfbnJmaWZvcyAqCisJCQkJCQkJICBwaW5mby0+cnhfZmlmb3NpemUpICsKIAkJCSAgTDFfQ0FDSEVfQUxJR04ocGluZm8tPnR4X25yZmlmb3MgKgogCQkJCQkgcGluZm8tPnR4X2ZpZm9zaXplKSwgcGluZm8tPm1lbV9hZGRyLAogCQkJICBwaW5mby0+ZG1hX2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jCmluZGV4IGI4ZGI0ZDMuLjE0MWMwYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCQlkbWFfYWRkciA9IHZpcnRfdG9fYnVzKG1lbV9hZGRyKTsKIAl9CiAJZWxzZQotCQltZW1fYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBtZW1zeiwgJmRtYV9hZGRyLAorCQltZW1fYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChwaW5mby0+cG9ydC5kZXYsIG1lbXN6LCAmZG1hX2FkZHIsCiAJCQkJCSAgICAgIEdGUF9LRVJORUwpOwogCiAJaWYgKG1lbV9hZGRyID09IE5VTEwpIHsKQEAgLTE2Myw4ICsxNjMsOCBAQAogCiB2b2lkIGNwbV91YXJ0X2ZyZWVidWYoc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBpbmZvKQogewotCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIEwxX0NBQ0hFX0FMSUdOKHBpbmZvLT5yeF9ucmZpZm9zICoKLQkJCQkJICAgICAgIHBpbmZvLT5yeF9maWZvc2l6ZSkgKworCWRtYV9mcmVlX2NvaGVyZW50KHBpbmZvLT5wb3J0LmRldiwgTDFfQ0FDSEVfQUxJR04ocGluZm8tPnJ4X25yZmlmb3MgKgorCQkJCQkJCSAgcGluZm8tPnJ4X2ZpZm9zaXplKSArCiAJCQkgIEwxX0NBQ0hFX0FMSUdOKHBpbmZvLT50eF9ucmZpZm9zICoKIAkJCQkJIHBpbmZvLT50eF9maWZvc2l6ZSksICh2b2lkIF9fZm9yY2UgKilwaW5mby0+bWVtX2FkZHIsCiAJCQkgIHBpbmZvLT5kbWFfYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jIGIvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYwppbmRleCAyM2QwMzA1Li42MTFjOTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMKQEAgLTkyMiw3ICs5MjIsNyBAQAogc3RhdGljIGludAogbTMycl9zaW9fdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnNlcikKIHsKLQlpZiAoc2VyLT5pcnEgPj0gTlJfSVJRUyB8fCBzZXItPmlycSA8IDAgfHwKKwlpZiAoc2VyLT5pcnEgPj0gbnJfaXJxcyB8fCBzZXItPmlycSA8IDAgfHwKIAkgICAgc2VyLT5iYXVkX2Jhc2UgPCA5NjAwIHx8IHNlci0+dHlwZSA8IFBPUlRfVU5LTk9XTiB8fAogCSAgICBzZXItPnR5cGUgPj0gQVJSQVlfU0laRSh1YXJ0X2NvbmZpZykpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE2Miw3ICsxMTYyLDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIlNlcmlhbDogTTMyUiBTSU8gZHJpdmVyXG4iKTsKIAotCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG5yX2lycXM7IGkrKykKIAkJc3Bpbl9sb2NrX2luaXQoJmlycV9saXN0c1tpXS5sb2NrKTsKIAogCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZtMzJyX3Npb19yZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwppbmRleCAzNjEyNjA3Li42MTE3ZDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpAQCAtNzIsMTMgKzcyLDggQEAKICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNlbHNlCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CiAjaW5jbHVkZSA8YXNtL21wYzUxMnguaD4KQEAgLTEwNywxMiArMTAyLDExIEBACiAJICogICAgICAgIGl0J3MgY2xlYXJlZCwgdGhlbiBhIG1lbXNldCguLi4sMCwuLi4pIHNob3VsZCBiZSBhZGRlZCB0bwogCSAqICAgICAgICB0aGUgY29uc29sZV9pbml0CiAJICovCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorCiAvKiBsb29rdXAgdGFibGUgZm9yIG1hdGNoaW5nIGRldmljZSBub2RlcyB0byBpbmRleCBudW1iZXJzICovCiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICptcGM1Mnh4X3VhcnRfbm9kZXNbTVBDNTJ4eF9QU0NfTUFYTlVNXTsKIAogc3RhdGljIHZvaWQgbXBjNTJ4eF91YXJ0X29mX2VudW1lcmF0ZSh2b2lkKTsKLSNlbmRpZgogCiAKICNkZWZpbmUgUFNDKHBvcnQpICgoc3RydWN0IG1wYzUyeHhfcHNjIF9faW9tZW0gKikoKHBvcnQpLT5tZW1iYXNlKSkKQEAgLTI1NSwxNyArMjQ5LDEyIEBACiAvKiBTZWFyY2ggZm9yIGJ1cy1mcmVxdWVuY3kgcHJvcGVydHkgaW4gdGhpcyBub2RlIG9yIGEgcGFyZW50ICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtcGM1Mnh4X2dldHVhcnRjbGsodm9pZCAqcCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCiAJLyoKIAkgKiA1MjAwIFVBUlRzIGhhdmUgYSAvIDMyIHByZXNjYWxlcgogCSAqIGJ1dCB0aGUgZ2VuZXJpYyBzZXJpYWwgY29kZSBhc3N1bWVzIDE2CiAJICogc28gcmV0dXJuIGlwYiBmcmVxIC8gMgogCSAqLwogCXJldHVybiBtcGM1Mnh4X2ZpbmRfaXBiX2ZyZXEocCkgLyAyOwotI2Vsc2UKLQlwcl9kZWJ1ZygidW5leHBlY3RlZCBjYWxsIHRvIG1wYzUyeHhfZ2V0dWFydGNsayB3aXRoIGFyY2gvcHBjXG4iKTsKLQlyZXR1cm4gTlVMTDsKLSNlbmRpZgogfQogCiBzdGF0aWMgc3RydWN0IHBzY19vcHMgbXBjNTJ4eF9wc2Nfb3BzID0gewpAQCAtODg2LDEwICs4NzUsNiBAQAogCiAJLyogQ1R7VSxMfVIgYXJlIHdyaXRlLW9ubHkgISAqLwogCSpiYXVkID0gQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEVfQkFVRDsKLSNpZiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQotCWlmIChfX3Jlcy5iaV9iYXVkcmF0ZSkKLQkJKmJhdWQgPSBfX3Jlcy5iaV9iYXVkcmF0ZTsKLSNlbmRpZgogCiAJLyogUGFyc2UgdGhlbSAqLwogCXN3aXRjaCAobXIxICYgTVBDNTJ4eF9QU0NfTU9ERV9CSVRTX01BU0spIHsKQEAgLTk0Niw0MiArOTMxLDYgQEAKIAlwc2Nfb3BzLT5jd19yZXN0b3JlX2ludHMocG9ydCk7CiB9CiAKLSNpZiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQotc3RhdGljIGludCBfX2luaXQKLW1wYzUyeHhfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCi17Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZtcGM1Mnh4X3VhcnRfcG9ydHNbY28tPmluZGV4XTsKLQotCWludCBiYXVkID0gQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEVfQkFVRDsKLQlpbnQgYml0cyA9IDg7Ci0JaW50IHBhcml0eSA9ICduJzsKLQlpbnQgZmxvdyA9ICduJzsKLQotCWlmIChjby0+aW5kZXggPCAwIHx8IGNvLT5pbmRleCA+PSBNUEM1Mnh4X1BTQ19NQVhOVU0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogQmFzaWMgcG9ydCBpbml0LiBOZWVkZWQgc2luY2Ugd2UgdXNlIHNvbWUgdWFydF8/Pz8gZnVuYyBiZWZvcmUKLQkgKiByZWFsIGluaXQgZm9yIGVhcmx5IGFjY2VzcyAqLwotCXNwaW5fbG9ja19pbml0KCZwb3J0LT5sb2NrKTsKLQlwb3J0LT51YXJ0Y2xrCT0gX19yZXMuYmlfaXBiZnJlcSAvIDI7IC8qIExvb2sgYXQgQ1RMUiBkb2MgKi8KLQlwb3J0LT5vcHMJPSAmbXBjNTJ4eF91YXJ0X29wczsKLQlwb3J0LT5tYXBiYXNlCT0gTVBDNTJ4eF9QQShNUEM1Mnh4X1BTQ3hfT0ZGU0VUKGNvLT5pbmRleCsxKSk7Ci0KLQkvKiBXZSBpb3JlbWFwIG91cnNlbGYgKi8KLQlwb3J0LT5tZW1iYXNlID0gaW9yZW1hcChwb3J0LT5tYXBiYXNlLCBNUEM1Mnh4X1BTQ19TSVpFKTsKLQlpZiAocG9ydC0+bWVtYmFzZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFNldHVwIHRoZSBwb3J0IHBhcmFtZXRlcnMgYWNjb2RpbmcgdG8gb3B0aW9ucyAqLwotCWlmIChvcHRpb25zKQotCQl1YXJ0X3BhcnNlX29wdGlvbnMob3B0aW9ucywgJmJhdWQsICZwYXJpdHksICZiaXRzLCAmZmxvdyk7Ci0JZWxzZQotCQltcGM1Mnh4X2NvbnNvbGVfZ2V0X29wdGlvbnMocG9ydCwgJmJhdWQsICZwYXJpdHksICZiaXRzLCAmZmxvdyk7Ci0KLQlyZXR1cm4gdWFydF9zZXRfb3B0aW9ucyhwb3J0LCBjbywgYmF1ZCwgcGFyaXR5LCBiaXRzLCBmbG93KTsKLX0KLQotI2Vsc2UKIAogc3RhdGljIGludCBfX2luaXQKIG1wYzUyeHhfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCkBAIC0xMDUzLDcgKzEwMDIsNiBAQAogCiAJcmV0dXJuIHVhcnRfc2V0X29wdGlvbnMocG9ydCwgY28sIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7CiB9Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKSAqLwogCiAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgbXBjNTJ4eF91YXJ0X2RyaXZlcjsKQEAgLTEwNzIsOSArMTAyMCw3IEBACiBzdGF0aWMgaW50IF9faW5pdAogbXBjNTJ4eF9jb25zb2xlX2luaXQodm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCiAJbXBjNTJ4eF91YXJ0X29mX2VudW1lcmF0ZSgpOwotI2VuZGlmCiAJcmVnaXN0ZXJfY29uc29sZSgmbXBjNTJ4eF9jb25zb2xlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExMDAsMTE1ICsxMDQ2LDYgQEAKIAkuY29ucwkJPSBNUEM1Mnh4X1BTQ19DT05TT0xFLAogfTsKIAotCi0jaWYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogUGxhdGZvcm0gRHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotc3RhdGljIGludCBfX2RldmluaXQKLW1wYzUyeHhfdWFydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHJlc291cmNlICpyZXMgPSBkZXYtPnJlc291cmNlOwotCi0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IE5VTEw7Ci0JaW50IGksIGlkeCwgcmV0OwotCi0JLyogQ2hlY2sgdmFsaWRpdHkgJiBwcmVzZW5jZSAqLwotCWlkeCA9IGRldi0+aWQ7Ci0JaWYgKGlkeCA8IDAgfHwgaWR4ID49IE1QQzUyeHhfUFNDX01BWE5VTSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIW1wYzUyeHhfbWF0Y2hfcHNjX2Z1bmN0aW9uKGlkeCwgInVhcnQiKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBJbml0IHRoZSBwb3J0IHN0cnVjdHVyZSAqLwotCXBvcnQgPSAmbXBjNTJ4eF91YXJ0X3BvcnRzW2lkeF07Ci0KLQlzcGluX2xvY2tfaW5pdCgmcG9ydC0+bG9jayk7Ci0JcG9ydC0+dWFydGNsawk9IF9fcmVzLmJpX2lwYmZyZXEgLyAyOyAvKiBMb29rIGF0IENUTFIgZG9jICovCi0JcG9ydC0+Zmlmb3NpemUJPSA1MTI7Ci0JcG9ydC0+aW90eXBlCT0gVVBJT19NRU07Ci0JcG9ydC0+ZmxhZ3MJPSBVUEZfQk9PVF9BVVRPQ09ORiB8Ci0JCQkgICh1YXJ0X2NvbnNvbGUocG9ydCkgPyAwIDogVVBGX0lPUkVNQVApOwotCXBvcnQtPmxpbmUJPSBpZHg7Ci0JcG9ydC0+b3BzCT0gJm1wYzUyeHhfdWFydF9vcHM7Ci0JcG9ydC0+ZGV2CT0gJmRldi0+ZGV2OwotCi0JLyogU2VhcmNoIGZvciBJUlEgYW5kIG1hcGJhc2UgKi8KLQlmb3IgKGkgPSAwIDsgaSA8IGRldi0+bnVtX3Jlc291cmNlcyA7IGkrKywgcmVzKyspIHsKLQkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkKLQkJCXBvcnQtPm1hcGJhc2UgPSByZXMtPnN0YXJ0OwotCQllbHNlIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JUlEpCi0JCQlwb3J0LT5pcnEgPSByZXMtPnN0YXJ0OwotCX0KLQlpZiAoIXBvcnQtPmlycSB8fCAhcG9ydC0+bWFwYmFzZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBBZGQgdGhlIHBvcnQgdG8gdGhlIHVhcnQgc3ViLXN5c3RlbSAqLwotCXJldCA9IHVhcnRfYWRkX29uZV9wb3J0KCZtcGM1Mnh4X3VhcnRfZHJpdmVyLCBwb3J0KTsKLQlpZiAoIXJldCkKLQkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCAodm9pZCAqKXBvcnQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotbXBjNTJ4eF91YXJ0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopIHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwotCi0JaWYgKHBvcnQpCi0JCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZtcGM1Mnh4X3VhcnRfZHJpdmVyLCBwb3J0KTsKLQotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50Ci1tcGM1Mnh4X3VhcnRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1YXJ0X3BvcnQgKikgcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQotCWlmIChwb3J0KQotCQl1YXJ0X3N1c3BlbmRfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbXBjNTJ4eF91YXJ0X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopIHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7Ci0KLQlpZiAocG9ydCkKLQkJdWFydF9yZXN1bWVfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0vKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KLU1PRFVMRV9BTElBUygicGxhdGZvcm06bXBjNTJ4eC1wc2MiKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXBjNTJ4eF91YXJ0X3BsYXRmb3JtX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gbXBjNTJ4eF91YXJ0X3Byb2JlLAotCS5yZW1vdmUJCT0gbXBjNTJ4eF91YXJ0X3JlbW92ZSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IG1wYzUyeHhfdWFydF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gbXBjNTJ4eF91YXJ0X3Jlc3VtZSwKLSNlbmRpZgotCS5kcml2ZXIJCT0gewotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkJLm5hbWUJPSAibXBjNTJ4eC1wc2MiLAotCX0sCi19OwotI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpICovCi0KLQotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogT0YgUGxhdGZvcm0gRHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KQEAgLTE0MDIsNyArMTIzOSw2IEBACiAJCS5uYW1lCT0gIm1wYzUyeHgtcHNjLXVhcnQiLAogCX0sCiB9OwotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkgKi8KIAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KQEAgLTE0MjMsNyArMTI1OSw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQogCW1wYzUyeHhfdWFydF9vZl9lbnVtZXJhdGUoKTsKIAogCXJldCA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTJ4eF91YXJ0X29mX2RyaXZlcik7CkBAIC0xNDMzLDE2ICsxMjY4LDYgQEAKIAkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmbXBjNTJ4eF91YXJ0X2RyaXZlcik7CiAJCXJldHVybiByZXQ7CiAJfQotI2Vsc2UKLQlwc2Nfb3BzID0gJm1wYzUyeHhfcHNjX29wczsKLQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1wYzUyeHhfdWFydF9wbGF0Zm9ybV9kcml2ZXIpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyIGZhaWxlZCAoJWkpXG4iLAotCQkgICAgICAgX19GSUxFX18sIHJldCk7Ci0JCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1wYzUyeHhfdWFydF9kcml2ZXIpOwotCQlyZXR1cm4gcmV0OwotCX0KLSNlbmRpZgogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDUwLDExICsxMjc1LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdAogbXBjNTJ4eF91YXJ0X2V4aXQodm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCiAJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUyeHhfdWFydF9vZl9kcml2ZXIpOwotI2Vsc2UKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXBjNTJ4eF91YXJ0X3BsYXRmb3JtX2RyaXZlcik7Ci0jZW5kaWYKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZtcGM1Mnh4X3VhcnRfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvczNjMjQwMC5jIGIvZHJpdmVycy9zZXJpYWwvczNjMjQwMC5jCmluZGV4IGM4YjQyNjYuLjQ4NzNmMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDAwLmMKQEAgLTE5LDcgKzE5LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCiAjaW5jbHVkZSAic2Ftc3VuZy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jIGIvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCmluZGV4IDQwYTI1MzEuLjg3YzE4MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKICNpbmNsdWRlICJzYW1zdW5nLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEyLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEyLmMKaW5kZXggZDAxNzAzMS4uZmQwMTdiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTIuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAogI2luY2x1ZGUgInNhbXN1bmcuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0NDAuYyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0NDAuYwppbmRleCBkNGEyYjE3Li4zMTdkMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDQwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvczNjMjQ0MC5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCiAjaW5jbHVkZSAic2Ftc3VuZy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jIGIvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jCmluZGV4IDVhODhiM2Y5Li4xZTIxOWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jCkBAIC00Nyw3ICs0Nyw3IEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAogI2luY2x1ZGUgInNhbXN1bmcuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IDZiZGYzMzYuLjg3NDc4NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtNzQxLDcgKzc0MSw3IEBACiAJaWYgKHBvcnQtPm9wcy0+dmVyaWZ5X3BvcnQpCiAJCXJldHZhbCA9IHBvcnQtPm9wcy0+dmVyaWZ5X3BvcnQocG9ydCwgJm5ld19zZXJpYWwpOwogCi0JaWYgKChuZXdfc2VyaWFsLmlycSA+PSBOUl9JUlFTKSB8fCAobmV3X3NlcmlhbC5pcnEgPCAwKSB8fAorCWlmICgobmV3X3NlcmlhbC5pcnEgPj0gbnJfaXJxcykgfHwgKG5ld19zZXJpYWwuaXJxIDwgMCkgfHwKIAkgICAgKG5ld19zZXJpYWwuYmF1ZF9iYXNlIDwgOTYwMCkpCiAJCXJldHZhbCA9IC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKaW5kZXggMTY0ZDJhNC4uNzU0NmFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMKQEAgLTQzMSwxMzEgKzQzMSwxMDMgQEAKIHsKIAlpbnQgaTsKIAlpID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKQotCQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKLQlpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpCisJaWYgKGkgIT0gMCkKIAkJcmV0dXJuIGk7Ci0JcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7Ci19Ci0KLXN0YXRpYyBpbnQKLW5leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqIHR1cGxlLCBjaXNwYXJzZV90ICogcGFyc2UpCi17Ci0JaW50IGk7Ci0JaSA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKQotCQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKIAlpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpCisJaWYgKGkgIT0gMCkKIAkJcmV0dXJuIGk7Ci0JcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZSh0dXBsZSwgcGFyc2UpOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBzaW1wbGVfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQorc3RhdGljIGludCBzaW1wbGVfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiwKKwkJCSAgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0YXRpYyBjb25zdCBpbnQgc2l6ZV90YWJsZVsyXSA9IHsgOCwgMTYgfTsKKwlpbnQgKnRyeSA9IHByaXZfZGF0YTsKKworCWlmIChjZi0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPQorCQkJY2YtPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisKKwlpZiAoKGNmLT5pby5ud2luID4gMCkgJiYgKGNmLT5pby53aW5bMF0ubGVuID09IHNpemVfdGFibGVbKCp0cnkgPj4gMSldKQorCSAgICAmJiAoY2YtPmlvLndpblswXS5iYXNlICE9IDApKSB7CisJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9ICgoKnRyeSAmIDB4MSkgPT0gMCkgPworCQkJMTYgOiBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgc2ltcGxlX2NvbmZpZ19jaGVja19ub3RwaWNreShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmLAorCQkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJCQl1bnNpZ25lZCBpbnQgdmNjLAorCQkJCQl2b2lkICpwcml2X2RhdGEpCiB7CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBiYXNlWzVdID0geyAweDNmOCwgMHgyZjgsIDB4M2U4LCAweDJlOCwgMHgwIH07Ci0Jc3RhdGljIGNvbnN0IGludCBzaXplX3RhYmxlWzJdID0geyA4LCAxNiB9OworCWludCBqOworCisJaWYgKChjZi0+aW8ubndpbiA+IDApICYmICgoY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0spIDw9IDMpKSB7CisJCWZvciAoaiA9IDA7IGogPCA1OyBqKyspIHsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBiYXNlW2pdOworCQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gYmFzZVtqXSA/IDE2IDogMzsKKwkJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IHNpbXBsZV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CiAJc3RydWN0IHNlcmlhbF9pbmZvICppbmZvID0gbGluay0+cHJpdjsKLQlzdHJ1Y3Qgc2VyaWFsX2NmZ19tZW0gKmNmZ19tZW07Ci0JdHVwbGVfdCAqdHVwbGU7Ci0JdV9jaGFyICpidWY7Ci0JY2lzcGFyc2VfdCAqcGFyc2U7Ci0JY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2Y7Ci0JY29uZmlnX2luZm9fdCBjb25maWc7Ci0JaW50IGksIGosIHRyeTsKLQlpbnQgczsKLQotCWNmZ19tZW0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaWFsX2NmZ19tZW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNmZ19tZW0pCi0JCXJldHVybiAtMTsKLQotCXR1cGxlID0gJmNmZ19tZW0tPnR1cGxlOwotCXBhcnNlID0gJmNmZ19tZW0tPnBhcnNlOwotCWNmID0gJnBhcnNlLT5jZnRhYmxlX2VudHJ5OwotCWJ1ZiA9IGNmZ19tZW0tPmJ1ZjsKKwlpbnQgaSA9IC1FTk9ERVYsIHRyeTsKIAogCS8qIElmIHRoZSBjYXJkIGlzIGFscmVhZHkgY29uZmlndXJlZCwgbG9vayB1cCB0aGUgcG9ydCBhbmQgaXJxICovCi0JaSA9IHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGxpbmssICZjb25maWcpOwotCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY29uZmlnLkF0dHJpYnV0ZXMgJiBDT05GX1ZBTElEX0NMSUVOVCkpIHsKKwlpZiAobGluay0+ZnVuY3Rpb25fY29uZmlnKSB7CiAJCXVuc2lnbmVkIGludCBwb3J0ID0gMDsKLQkJaWYgKChjb25maWcuQmFzZVBvcnQyICE9IDApICYmIChjb25maWcuTnVtUG9ydHMyID09IDgpKSB7Ci0JCQlwb3J0ID0gY29uZmlnLkJhc2VQb3J0MjsKKwkJaWYgKChsaW5rLT5pby5CYXNlUG9ydDIgIT0gMCkgJiYKKwkJICAgIChsaW5rLT5pby5OdW1Qb3J0czIgPT0gOCkpIHsKKwkJCXBvcnQgPSBsaW5rLT5pby5CYXNlUG9ydDI7CiAJCQlpbmZvLT5zbGF2ZSA9IDE7CiAJCX0gZWxzZSBpZiAoKGluZm8tPm1hbmZpZCA9PSBNQU5GSURfT1NJVEVDSCkgJiYKLQkJCSAgIChjb25maWcuTnVtUG9ydHMxID09IDB4NDApKSB7Ci0JCQlwb3J0ID0gY29uZmlnLkJhc2VQb3J0MSArIDB4Mjg7CisJCQkgICAobGluay0+aW8uTnVtUG9ydHMxID09IDB4NDApKSB7CisJCQlwb3J0ID0gbGluay0+aW8uQmFzZVBvcnQxICsgMHgyODsKIAkJCWluZm8tPnNsYXZlID0gMTsKIAkJfQogCQlpZiAoaW5mby0+c2xhdmUpIHsKLQkJCWtmcmVlKGNmZ19tZW0pOwotCQkJcmV0dXJuIHNldHVwX3NlcmlhbChsaW5rLCBpbmZvLCBwb3J0LCBjb25maWcuQXNzaWduZWRJUlEpOworCQkJcmV0dXJuIHNldHVwX3NlcmlhbChsaW5rLCBpbmZvLCBwb3J0LAorCQkJCQkgICAgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIAkJfQogCX0KIAotCS8qIEZpcnN0IHBhc3M6IGxvb2sgZm9yIGEgY29uZmlnIGVudHJ5IHRoYXQgbG9va3Mgbm9ybWFsLiAqLwotCXR1cGxlLT5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKLQl0dXBsZS0+VHVwbGVPZmZzZXQgPSAwOwotCXR1cGxlLT5UdXBsZURhdGFNYXggPSAyNTU7Ci0JdHVwbGUtPkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQkvKiBUd28gdHJpZXM6IHdpdGhvdXQgSU8gYWxpYXNlcywgdGhlbiB3aXRoIGFsaWFzZXMgKi8KLQlmb3IgKHMgPSAwOyBzIDwgMjsgcysrKSB7Ci0JCWZvciAodHJ5ID0gMDsgdHJ5IDwgMjsgdHJ5KyspIHsKLQkJCWkgPSBmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwotCQkJd2hpbGUgKGkgIT0gQ1NfTk9fTU9SRV9JVEVNUykgewotCQkJCWlmIChpICE9IENTX1NVQ0NFU1MpCi0JCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCQlpZiAoY2YtPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCQkJbGluay0+Y29uZi5WcHAgPQotCQkJCQkgICAgY2YtPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7Ci0JCQkJaWYgKChjZi0+aW8ubndpbiA+IDApICYmIChjZi0+aW8ud2luWzBdLmxlbiA9PSBzaXplX3RhYmxlW3NdKSAmJgotCQkJCQkgICAgKGNmLT5pby53aW5bMF0uYmFzZSAhPSAwKSkgewotCQkJCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwotCQkJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gKHRyeSA9PSAwKSA/Ci0JCQkJCSAgICAxNiA6IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKLQkJCQkJCWdvdG8gZm91bmRfcG9ydDsKLQkJCQl9Ci1uZXh0X2VudHJ5OgotCQkJCWkgPSBuZXh0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7Ci0JCQl9Ci0JCX0KLQl9CisJLyogRmlyc3QgcGFzczogbG9vayBmb3IgYSBjb25maWcgZW50cnkgdGhhdCBsb29rcyBub3JtYWwuCisJICogVHdvIHRyaWVzOiB3aXRob3V0IElPIGFsaWFzZXMsIHRoZW4gd2l0aCBhbGlhc2VzICovCisJZm9yICh0cnkgPSAwOyB0cnkgPCA0OyB0cnkrKykKKwkJaWYgKCFwY21jaWFfbG9vcF9jb25maWcobGluaywgc2ltcGxlX2NvbmZpZ19jaGVjaywgJnRyeSkpCisJCQlnb3RvIGZvdW5kX3BvcnQ7CisKIAkvKiBTZWNvbmQgcGFzczogdHJ5IHRvIGZpbmQgYW4gZW50cnkgdGhhdCBpc24ndCBwaWNreSBhYm91dAogCSAgIGl0cyBiYXNlIGFkZHJlc3MsIHRoZW4gdHJ5IHRvIGdyYWIgYW55IHN0YW5kYXJkIHNlcmlhbCBwb3J0CiAJICAgYWRkcmVzcywgYW5kIGZpbmFsbHkgdHJ5IHRvIGdldCBhbnkgZnJlZSBwb3J0LiAqLwotCWkgPSBmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwotCXdoaWxlIChpICE9IENTX05PX01PUkVfSVRFTVMpIHsKLQkJaWYgKChpID09IENTX1NVQ0NFU1MpICYmIChjZi0+aW8ubndpbiA+IDApICYmCi0JCSAgICAoKGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSA8PSAzKSkgewotCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKLQkJCWZvciAoaiA9IDA7IGogPCA1OyBqKyspIHsKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBiYXNlW2pdOwotCQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gYmFzZVtqXSA/IDE2IDogMzsKLQkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQotCQkJCQlnb3RvIGZvdW5kX3BvcnQ7Ci0JCQl9Ci0JCX0KLQkJaSA9IG5leHRfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKLQl9CisJaWYgKCFwY21jaWFfbG9vcF9jb25maWcobGluaywgc2ltcGxlX2NvbmZpZ19jaGVja19ub3RwaWNreSwgTlVMTCkpCisJCWdvdG8gZm91bmRfcG9ydDsKIAotICAgICAgZm91bmRfcG9ydDoKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRQotCQkgICAgICAgInNlcmlhbF9jczogbm8gdXNhYmxlIHBvcnQgcmFuZ2UgZm91bmQsIGdpdmluZyB1cFxuIik7Ci0JCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7Ci0JCWtmcmVlKGNmZ19tZW0pOwotCQlyZXR1cm4gLTE7Ci0JfQorCXByaW50ayhLRVJOX05PVElDRQorCSAgICAgICAic2VyaWFsX2NzOiBubyB1c2FibGUgcG9ydCByYW5nZSBmb3VuZCwgZ2l2aW5nIHVwXG4iKTsKKwljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOworCXJldHVybiAtMTsKIAorZm91bmRfcG9ydDoKIAlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCX0KQEAgLTU2OSw4OCArNTQxLDc2IEBACiAJCWluZm8tPnF1aXJrLT5jb25maWcobGluayk7CiAKIAlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChpICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOwotCQlrZnJlZShjZmdfbWVtKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlrZnJlZShjZmdfbWVtKTsKIAlyZXR1cm4gc2V0dXBfc2VyaWFsKGxpbmssIGluZm8sIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIH0KIAotc3RhdGljIGludCBtdWx0aV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKQorc3RhdGljIGludCBtdWx0aV9jb25maWdfY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCQkgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJICAgICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlpbnQgKmJhc2UyID0gcHJpdl9kYXRhOworCisJLyogVGhlIHF1YWQgcG9ydCBjYXJkcyBoYXZlIGJhZCBDSVMncywgc28ganVzdCBsb29rIGZvciBhCisJICAgd2luZG93IGxhcmdlciB0aGFuIDggcG9ydHMgYW5kIGFzc3VtZSBpdCB3aWxsIGJlIHJpZ2h0ICovCisJaWYgKChjZi0+aW8ubndpbiA9PSAxKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPiA4KSkgeworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykpIHsKKwkJCSpiYXNlMiA9IHBfZGV2LT5pby5CYXNlUG9ydDEgKyA4OworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgbXVsdGlfY29uZmlnX2NoZWNrX25vdHBpY2t5KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkJICAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlpbnQgKmJhc2UyID0gcHJpdl9kYXRhOworCisJaWYgKGNmLT5pby5ud2luID09IDIpIHsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGNmLT5pby53aW5bMV0uYmFzZTsKKwkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKSB7CisJCQkqYmFzZTIgPSBwX2Rldi0+aW8uQmFzZVBvcnQyOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgbXVsdGlfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBzZXJpYWxfaW5mbyAqaW5mbyA9IGxpbmstPnByaXY7Ci0Jc3RydWN0IHNlcmlhbF9jZmdfbWVtICpjZmdfbWVtOwotCXR1cGxlX3QgKnR1cGxlOwotCXVfY2hhciAqYnVmOwotCWNpc3BhcnNlX3QgKnBhcnNlOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmOwotCWludCBpLCByYywgYmFzZTIgPSAwOwotCi0JY2ZnX21lbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpYWxfY2ZnX21lbSksIEdGUF9LRVJORUwpOwotCWlmICghY2ZnX21lbSkKLQkJcmV0dXJuIC0xOwotCXR1cGxlID0gJmNmZ19tZW0tPnR1cGxlOwotCXBhcnNlID0gJmNmZ19tZW0tPnBhcnNlOwotCWNmID0gJnBhcnNlLT5jZnRhYmxlX2VudHJ5OwotCWJ1ZiA9IGNmZ19tZW0tPmJ1ZjsKLQotCXR1cGxlLT5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKLQl0dXBsZS0+VHVwbGVPZmZzZXQgPSAwOwotCXR1cGxlLT5UdXBsZURhdGFNYXggPSAyNTU7Ci0JdHVwbGUtPkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKKwlpbnQgaSwgYmFzZTIgPSAwOwogCiAJLyogRmlyc3QsIGxvb2sgZm9yIGEgZ2VuZXJpYyBmdWxsLXNpemVkIHdpbmRvdyAqLwogCWxpbmstPmlvLk51bVBvcnRzMSA9IGluZm8tPm11bHRpICogODsKLQlpID0gZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKLQl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7Ci0JCS8qIFRoZSBxdWFkIHBvcnQgY2FyZHMgaGF2ZSBiYWQgQ0lTJ3MsIHNvIGp1c3QgbG9vayBmb3IgYQotCQkgICB3aW5kb3cgbGFyZ2VyIHRoYW4gOCBwb3J0cyBhbmQgYXNzdW1lIGl0IHdpbGwgYmUgcmlnaHQgKi8KLQkJaWYgKChpID09IENTX1NVQ0NFU1MpICYmIChjZi0+aW8ubndpbiA9PSAxKSAmJgotCQkgICAgKGNmLT5pby53aW5bMF0ubGVuID4gOCkpIHsKLQkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9Ci0JCQkgICAgY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJCWJhc2UyID0gbGluay0+aW8uQmFzZVBvcnQxICsgODsKLQkJCWlmIChpID09IENTX1NVQ0NFU1MpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaSA9IG5leHRfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKLQl9Ci0KLQkvKiBJZiB0aGF0IGRpZG4ndCB3b3JrLCBsb29rIGZvciB0d28gd2luZG93cyAqLwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIG11bHRpX2NvbmZpZ19jaGVjaywgJmJhc2UyKSkgeworCQkvKiBJZiB0aGF0IGRpZG4ndCB3b3JrLCBsb29rIGZvciB0d28gd2luZG93cyAqLwogCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSA4OwogCQlpbmZvLT5tdWx0aSA9IDI7Ci0JCWkgPSBmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwotCQl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7Ci0JCQlpZiAoKGkgPT0gQ1NfU1VDQ0VTUykgJiYgKGNmLT5pby5ud2luID09IDIpKSB7Ci0JCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQyID0gY2YtPmlvLndpblsxXS5iYXNlOwotCQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0KLQkJCQkgICAgY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCQkJYmFzZTIgPSBsaW5rLT5pby5CYXNlUG9ydDI7Ci0JCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpID0gbmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOworCQlpZiAocGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIG11bHRpX2NvbmZpZ19jaGVja19ub3RwaWNreSwKKwkJCQkgICAgICAgJmJhc2UyKSkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJzZXJpYWxfY3M6IG5vIHVzYWJsZSBwb3J0IHJhbmdlIgorCQkJICAgICAgICJmb3VuZCwgZ2l2aW5nIHVwXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQogCi0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwotCQlyYyA9IC0xOwotCQlnb3RvIGZyZWVfY2ZnX21lbTsKLQl9Ci0KIAlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CisJCS8qIEZJWE1FOiBjb21tZW50IGRvZXMgbm90IGZpdCwgZXJyb3IgaGFuZGxpbmcgZG9lcyBub3QgZml0ICovCiAJCXByaW50ayhLRVJOX05PVElDRQogCQkgICAgICAgInNlcmlhbF9jczogbm8gdXNhYmxlIHBvcnQgcmFuZ2UgZm91bmQsIGdpdmluZyB1cFxuIik7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwpAQCAtNjY0LDEwICs2MjQsOSBAQAogCQlpbmZvLT5xdWlyay0+Y29uZmlnKGxpbmspOwogCiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKLQkJcmMgPSAtMTsKLQkJZ290byBmcmVlX2NmZ19tZW07CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIFRoZSBPeGZvcmQgU2VtaWNvbmR1Y3RvciBPWENGOTUwIGNhcmRzIGFyZSBpbiBmYWN0IHNpbmdsZS1wb3J0OgpAQCAtNjc4LDcgKzYzNyw4IEBACiAJCQkJaW5mby0+cHJvZGlkID09IFBST0RJRF9QT1NTSU9fR0NDKSkgewogCQlpbnQgZXJyOwogCi0JCWlmIChjZi0+aW5kZXggPT0gMSB8fCBjZi0+aW5kZXggPT0gMykgeworCQlpZiAobGluay0+Y29uZi5Db25maWdJbmRleCA9PSAxIHx8CisJCSAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID09IDMpIHsKIAkJCWVyciA9IHNldHVwX3NlcmlhbChsaW5rLCBpbmZvLCBiYXNlMiwKIAkJCQkJbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKIAkJCWJhc2UyID0gbGluay0+aW8uQmFzZVBvcnQxOwpAQCAtNjk1LDE4ICs2NTUsMTQgQEAKIAkJaWYgKGluZm8tPnF1aXJrICYmIGluZm8tPnF1aXJrLT53YWtldXApCiAJCQlpbmZvLT5xdWlyay0+d2FrZXVwKGxpbmspOwogCi0JCXJjID0gMDsKLQkJZ290byBmcmVlX2NmZ19tZW07CisJCXJldHVybiAwOwogCX0KIAogCXNldHVwX3NlcmlhbChsaW5rLCBpbmZvLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAJZm9yIChpID0gMDsgaSA8IGluZm8tPm11bHRpIC0gMTsgaSsrKQogCQlzZXR1cF9zZXJpYWwobGluaywgaW5mbywgYmFzZTIgKyAoOCAqIGkpLAogCQkJCWxpbmstPmlycS5Bc3NpZ25lZElSUSk7Ci0JcmMgPSAwOwotZnJlZV9jZmdfbWVtOgotCWtmcmVlKGNmZ19tZW0pOwotCXJldHVybiByYzsKKwlyZXR1cm4gMDsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC03NDYsNyArNzAyLDcgQEAKIAkvKiBJcyB0aGlzIGEgY29tcGxpYW50IG11bHRpZnVuY3Rpb24gY2FyZD8gKi8KIAl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0xPTkdMSU5LX01GQzsKIAl0dXBsZS0+QXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT04gfCBUVVBMRV9SRVRVUk5fTElOSzsKLQlpbmZvLT5tdWx0aSA9IChmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpID09IENTX1NVQ0NFU1MpOworCWluZm8tPm11bHRpID0gKGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSkgPT0gMCk7CiAKIAkvKiBJcyB0aGlzIGEgbXVsdGlwb3J0IGNhcmQ/ICovCiAJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7CkBAIC03NzAsNyArNzI2LDcgQEAKIAkgICAgKChsaW5rLT5mdW5jX2lkID09IENJU1RQTF9GVU5DSURfTVVMVEkpIHx8CiAJICAgICAobGluay0+ZnVuY19pZCA9PSBDSVNUUExfRlVOQ0lEX1NFUklBTCkpKSB7CiAJCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQkJaWYgKGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSkgPT0gQ1NfU1VDQ0VTUykgeworCQlpZiAoZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKSA9PSAwKSB7CiAJCQlpZiAoKGNmLT5pby5ud2luID09IDEpICYmIChjZi0+aW8ud2luWzBdLmxlbiAlIDggPT0gMCkpCiAJCQkJaW5mby0+bXVsdGkgPSBjZi0+aW8ud2luWzBdLmxlbiA+PiAzOwogCQkJaWYgKChjZi0+aW8ubndpbiA9PSAyKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gOCkgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCmluZGV4IGNiNDlhNWEuLjYxZGM4YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAKIAlpZiAoc2VyLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBzZXItPnR5cGUgIT0gUE9SVF9MSDdBNDBYKQogCQlyZXQgPSAtRUlOVkFMOwotCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gTlJfSVJRUykKKwlpZiAoc2VyLT5pcnEgPCAwIHx8IHNlci0+aXJxID49IG5yX2lycXMpCiAJCXJldCA9IC1FSU5WQUw7CiAJaWYgKHNlci0+YmF1ZF9iYXNlIDwgOTYwMCkgLyogKioqIEZJWE1FOiBpcyB0aGlzIHRydWU/ICovCiAJCXJldCA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYwppbmRleCA4ZmNiNGM1Li43MzEzYzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKQEAgLTEwMzksNyArMTAzOSw3IEBACiAJCXJldCA9IHNlcmlhbF90eHg5X3JlZ2lzdGVyX3BvcnQoJnBvcnQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2X2VycigmZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgcG9ydCBhdCBpbmRleCAlZCAiCi0JCQkJIihJTyV4IE1FTSVsbHggSVJRJWQpOiAlZFxuIiwgaSwKKwkJCQkiKElPJWx4IE1FTSVsbHggSVJRJWQpOiAlZFxuIiwgaSwKIAkJCQlwLT5pb2Jhc2UsICh1bnNpZ25lZCBsb25nIGxvbmcpcC0+bWFwYmFzZSwKIAkJCQlwLT5pcnEsIHJldCk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKaW5kZXggM2RmMmFhZS4uZjA2NThkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogU3VwZXJIIG9uLWNoaXAgc2VyaWFsIG1vZHVsZSBzdXBwb3J0LiAgKFNDSSB3aXRoIG5vIEZJRk8gLyB3aXRoIEZJRk8pCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDYgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA4ICBQYXVsIE11bmR0CiAgKiAgTW9kaWZpZWQgdG8gc3VwcG9ydCBTSDc3MjAgU0NJRi4gTWFya3VzIEJydW5uZXIsIE1hcmsgSm9uYXMgKEp1bCAyMDA3KS4KICAqCiAgKiBiYXNlZCBvZmYgb2YgdGhlIG9sZCBkcml2ZXJzL2NoYXIvc2gtc2NpLmMgYnk6CkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpZmRlZiBDT05GSUdfU1VQRVJICiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CkBAIC03OCw3ICs3OSw3IEBACiAJc3RydWN0IHRpbWVyX2xpc3QJYnJlYWtfdGltZXI7CiAJaW50CQkJYnJlYWtfZmxhZzsKIAotI2lmZGVmIENPTkZJR19TVVBFUkgKKyNpZmRlZiBDT05GSUdfSEFWRV9DTEsKIAkvKiBQb3J0IGNsb2NrICovCiAJc3RydWN0IGNsawkJKmNsazsKICNlbmRpZgpAQCAtODMxLDcgKzgzMiw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0jaWZkZWYgQ09ORklHX0NQVV9GUkVRCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVEpICYmIGRlZmluZWQoQ09ORklHX0hBVkVfQ0xLKQogLyoKICAqIEhlcmUgd2UgZGVmaW5lIGEgdHJhbnNpc3Rpb24gbm90aWZpZXIgc28gdGhhdCB3ZSBjYW4gdXBkYXRlIGFsbCBvZiBvdXIKICAqIHBvcnRzJyBiYXVkIHJhdGUgd2hlbiB0aGUgcGVyaXBoZXJhbCBjbG9jayBjaGFuZ2VzLgpAQCAtODYwLDcgKzg2MSw3IEBACiAJCQkgKiBDbGVhbiB0aGlzIHVwIGxhdGVyLi4KIAkJCSAqLwogCQkJY2xrID0gY2xrX2dldChOVUxMLCAibW9kdWxlX2NsayIpOwotCQkJcG9ydC0+dWFydGNsayA9IGNsa19nZXRfcmF0ZShjbGspICogMTY7CisJCQlwb3J0LT51YXJ0Y2xrID0gY2xrX2dldF9yYXRlKGNsayk7CiAJCQljbGtfcHV0KGNsayk7CiAJCX0KIApAQCAtODczLDcgKzg3NCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc2NpX25iID0geyAmc2NpX25vdGlmaWVyLCBOVUxMLCAwIH07Ci0jZW5kaWYgLyogQ09ORklHX0NQVV9GUkVRICovCisjZW5kaWYgLyogQ09ORklHX0NQVV9GUkVRICYmIENPTkZJR19IQVZFX0NMSyAqLwogCiBzdGF0aWMgaW50IHNjaV9yZXF1ZXN0X2lycShzdHJ1Y3Qgc2NpX3BvcnQgKnBvcnQpCiB7CkBAIC0xMDA4LDcgKzEwMDksNyBAQAogCWlmIChzLT5lbmFibGUpCiAJCXMtPmVuYWJsZShwb3J0KTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NVUEVSSCkgJiYgIWRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQorI2lmZGVmIENPTkZJR19IQVZFX0NMSwogCXMtPmNsayA9IGNsa19nZXQoTlVMTCwgIm1vZHVsZV9jbGsiKTsKICNlbmRpZgogCkBAIC0xMDMwLDcgKzEwMzEsNyBAQAogCWlmIChzLT5kaXNhYmxlKQogCQlzLT5kaXNhYmxlKHBvcnQpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIKSAmJiAhZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCisjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCiAJY2xrX3B1dChzLT5jbGspOwogCXMtPmNsayA9IE5VTEw7CiAjZW5kaWYKQEAgLTEwNDEsMjQgKzEwNDIsMTEgQEAKIHsKIAlzdHJ1Y3Qgc2NpX3BvcnQgKnMgPSAmc2NpX3BvcnRzW3BvcnQtPmxpbmVdOwogCXVuc2lnbmVkIGludCBzdGF0dXMsIGJhdWQsIHNtcl92YWw7Ci0JaW50IHQ7CisJaW50IHQgPSAtMTsKIAogCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCBwb3J0LT51YXJ0Y2xrLzE2KTsKLQotCXN3aXRjaCAoYmF1ZCkgewotCQljYXNlIDA6Ci0JCQl0ID0gLTE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJewotI2lmIGRlZmluZWQoQ09ORklHX1NVUEVSSCkgJiYgIWRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQotCQkJdCA9IFNDQlJSX1ZBTFVFKGJhdWQsIGNsa19nZXRfcmF0ZShzLT5jbGspKTsKLSNlbHNlCi0JCQl0ID0gU0NCUlJfVkFMVUUoYmF1ZCk7Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQl9Ci0JfQorCWlmIChsaWtlbHkoYmF1ZCkpCisJCXQgPSBTQ0JSUl9WQUxVRShiYXVkLCBwb3J0LT51YXJ0Y2xrKTsKIAogCWRvIHsKIAkJc3RhdHVzID0gc2NpX2luKHBvcnQsIFNDeFNSKTsKQEAgLTExMTMsNyArMTEwMSw3IEBACiAJCWNhc2UgUE9SVF9JUkRBOiByZXR1cm4gImlyZGEiOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBzY2lfcmVsZWFzZV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCkBAIC0xMTQ1LDE5ICsxMTMzLDIzIEBACiAJCWJyZWFrOwogCX0KIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMpCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMCkKKwlpZiAocG9ydC0+ZmxhZ3MgJiBVUEZfSU9SRU1BUCAmJiAhcG9ydC0+bWVtYmFzZSkgeworI2lmIGRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQogCQlwb3J0LT5tYXBiYXNlID0gb25jaGlwX3JlbWFwKFNDSUZfQUREUl9TSDUsIDEwMjQsICJTQ0lGIik7Ci0KLQlwb3J0LT5tZW1iYXNlID0gKHZvaWQgX19pb21lbSAqKXBvcnQtPm1hcGJhc2U7CisJCXBvcnQtPm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtICopcG9ydC0+bWFwYmFzZTsKKyNlbHNlCisJCXBvcnQtPm1lbWJhc2UgPSBpb3JlbWFwX25vY2FjaGUocG9ydC0+bWFwYmFzZSwgMHg0MCk7CiAjZW5kaWYKKworCQlwcmludGsoS0VSTl9FUlIgInNjaTogY2FuJ3QgcmVtYXAgcG9ydCMlZFxuIiwgcG9ydC0+bGluZSk7CisJfQogfQogCiBzdGF0aWMgaW50IHNjaV92ZXJpZnlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc2VyKQogewogCXN0cnVjdCBzY2lfcG9ydCAqcyA9ICZzY2lfcG9ydHNbcG9ydC0+bGluZV07CiAKLQlpZiAoc2VyLT5pcnEgIT0gcy0+aXJxc1tTQ0l4X1RYSV9JUlFdIHx8IHNlci0+aXJxID4gTlJfSVJRUykKKwlpZiAoc2VyLT5pcnEgIT0gcy0+aXJxc1tTQ0l4X1RYSV9JUlFdIHx8IHNlci0+aXJxID4gbnJfaXJxcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHNlci0+YmF1ZF9iYXNlIDwgMjQwMCkKIAkJLyogTm8gcGFwZXIgdGFwZSByZWFkZXIgZm9yIE1pdGNoLi4gKi8KQEAgLTEyMDcsMTcgKzExOTksMTcgQEAKIAkJc2NpX3BvcnRzW2ldLmRpc2FibGUJPSBoODMwMF9zY2lfZGlzYWJsZTsKICNlbmRpZgogCQlzY2lfcG9ydHNbaV0ucG9ydC51YXJ0Y2xrID0gQ09ORklHX0NQVV9DTE9DSzsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQotCQlzY2lfcG9ydHNbaV0ucG9ydC51YXJ0Y2xrID0gY3VycmVudF9jcHVfZGF0YS5tb2R1bGVfY2xvY2sgKiAxNjsKLSNlbHNlCisjZWxpZiBkZWZpbmVkKENPTkZJR19IQVZFX0NMSykKIAkJLyoKIAkJICogWFhYOiBXZSBzaG91bGQgdXNlIGEgcHJvcGVyIFNDSS9TQ0lGIGNsb2NrCiAJCSAqLwogCQl7CiAJCQlzdHJ1Y3QgY2xrICpjbGsgPSBjbGtfZ2V0KE5VTEwsICJtb2R1bGVfY2xrIik7Ci0JCQlzY2lfcG9ydHNbaV0ucG9ydC51YXJ0Y2xrID0gY2xrX2dldF9yYXRlKGNsaykgKiAxNjsKKwkJCXNjaV9wb3J0c1tpXS5wb3J0LnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKIAkJCWNsa19wdXQoY2xrKTsKIAkJfQorI2Vsc2UKKyNlcnJvciAiTmVlZCBhIHZhbGlkIHVhcnRjbGsiCiAjZW5kaWYKIAogCQlzY2lfcG9ydHNbaV0uYnJlYWtfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSZzY2lfcG9ydHNbaV07CkBAIC0xMjg1LDcgKzEyNzcsNyBAQAogCiAJcG9ydC0+dHlwZSA9IHNlcmlhbF9jb25zb2xlX3BvcnQtPnR5cGU7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TVVBFUkgpICYmICFkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKKyNpZmRlZiBDT05GSUdfSEFWRV9DTEsKIAlpZiAoIXNlcmlhbF9jb25zb2xlX3BvcnQtPmNsaykKIAkJc2VyaWFsX2NvbnNvbGVfcG9ydC0+Y2xrID0gY2xrX2dldChOVUxMLCAibW9kdWxlX2NsayIpOwogI2VuZGlmCkBAIC0xNDM2LDcgKzE0MjgsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgc2NpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGxhdF9zY2lfcG9ydCAqcCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaW50IGk7CisJaW50IGksIHJldCA9IC1FSU5WQUw7CiAKIAlmb3IgKGkgPSAwOyBwICYmIHAtPmZsYWdzICE9IDA7IHArKywgaSsrKSB7CiAJCXN0cnVjdCBzY2lfcG9ydCAqc2NpcG9ydCA9ICZzY2lfcG9ydHNbaV07CkBAIC0xNDUzLDEyICsxNDQ1LDIyIEBACiAKIAkJc2NpcG9ydC0+cG9ydC5tYXBiYXNlCT0gcC0+bWFwYmFzZTsKIAotCQkvKgotCQkgKiBGb3IgdGhlIHNpbXBsZSAoYW5kIG1ham9yaXR5IG9mKSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBuZWVkCi0JCSAqIHRvIGRvIGFueSByZW1hcHBpbmcsIGp1c3QgY2FzdCB0aGUgY29va2llIGRpcmVjdGx5LgotCQkgKi8KLQkJaWYgKHAtPm1hcGJhc2UgJiYgIXAtPm1lbWJhc2UgJiYgIShwLT5mbGFncyAmIFVQRl9JT1JFTUFQKSkKLQkJCXAtPm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtICopcC0+bWFwYmFzZTsKKwkJaWYgKHAtPm1hcGJhc2UgJiYgIXAtPm1lbWJhc2UpIHsKKwkJCWlmIChwLT5mbGFncyAmIFVQRl9JT1JFTUFQKSB7CisJCQkJcC0+bWVtYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShwLT5tYXBiYXNlLCAweDQwKTsKKwkJCQlpZiAoSVNfRVJSKHAtPm1lbWJhc2UpKSB7CisJCQkJCXJldCA9IFBUUl9FUlIocC0+bWVtYmFzZSk7CisJCQkJCWdvdG8gZXJyX3VucmVnOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBGb3IgdGhlIHNpbXBsZSAoYW5kIG1ham9yaXR5IG9mKSBjYXNlcworCQkJCSAqIHdoZXJlIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55IHJlbWFwcGluZywKKwkJCQkgKiBqdXN0IGNhc3QgdGhlIGNvb2tpZSBkaXJlY3RseS4KKwkJCQkgKi8KKwkJCQlwLT5tZW1iYXNlID0gKHZvaWQgX19pb21lbSAqKXAtPm1hcGJhc2U7CisJCQl9CisJCX0KIAogCQlzY2lwb3J0LT5wb3J0Lm1lbWJhc2UJPSBwLT5tZW1iYXNlOwogCkBAIC0xNDc5LDcgKzE0ODEsNyBAQAogCWtnZGJfcHV0Y2hhcgk9IGtnZGJfc2NpX3B1dGNoYXI7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19DUFVfRlJFUQorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9GUkVRKSAmJiBkZWZpbmVkKENPTkZJR19IQVZFX0NMSykKIAljcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZzY2lfbmIsIENQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7CiAJZGV2X2luZm8oJmRldi0+ZGV2LCAiQ1BVIGZyZXF1ZW5jeSBub3RpZmllciByZWdpc3RlcmVkXG4iKTsKICNlbmRpZgpAQCAtMTQ4OSw2ICsxNDkxLDEyIEBACiAjZW5kaWYKIAogCXJldHVybiAwOworCitlcnJfdW5yZWc6CisJZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgaS0tKQorCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc2NpX3VhcnRfZHJpdmVyLCAmc2NpX3BvcnRzW2ldLnBvcnQpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgc2NpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaCBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCmluZGV4IDhhMDc0OWUuLjdjZDI4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCkBAIC0zMjAsMTggKzMyMCwxNiBAQAogI2RlZmluZSBTQ0lfRVZFTlRfV1JJVEVfV0FLRVVQCTAKIAogI2RlZmluZSBTQ0lfSU4oc2l6ZSwgb2Zmc2V0KQkJCQkJXAotICB1bnNpZ25lZCBpbnQgYWRkciA9IHBvcnQtPm1hcGJhc2UgKyAob2Zmc2V0KTsJCQlcCiAgIGlmICgoc2l6ZSkgPT0gOCkgewkJCQkJCVwKLSAgICByZXR1cm4gY3RybF9pbmIoYWRkcik7CQkJCQlcCisgICAgcmV0dXJuIGlvcmVhZDgocG9ydC0+bWVtYmFzZSArIChvZmZzZXQpKTsJCQlcCiAgIH0gZWxzZSB7CQkJCQkJCVwKLSAgICByZXR1cm4gY3RybF9pbncoYWRkcik7CQkJCQlcCisgICAgcmV0dXJuIGlvcmVhZDE2KHBvcnQtPm1lbWJhc2UgKyAob2Zmc2V0KSk7CQkJXAogICB9CiAjZGVmaW5lIFNDSV9PVVQoc2l6ZSwgb2Zmc2V0LCB2YWx1ZSkJCQkJXAotICB1bnNpZ25lZCBpbnQgYWRkciA9IHBvcnQtPm1hcGJhc2UgKyAob2Zmc2V0KTsJCQlcCiAgIGlmICgoc2l6ZSkgPT0gOCkgewkJCQkJCVwKLSAgICBjdHJsX291dGIodmFsdWUsIGFkZHIpOwkJCQkJXAorICAgIGlvd3JpdGU4KHZhbHVlLCBwb3J0LT5tZW1iYXNlICsgKG9mZnNldCkpOwkJCVwKICAgfSBlbHNlIGlmICgoc2l6ZSkgPT0gMTYpIHsJCQkJCVwKLSAgICBjdHJsX291dHcodmFsdWUsIGFkZHIpOwkJCQkJXAorICAgIGlvd3JpdGUxNih2YWx1ZSwgcG9ydC0+bWVtYmFzZSArIChvZmZzZXQpKTsJCQlcCiAgIH0KIAogI2RlZmluZSBDUFVfU0NJeF9GTlMobmFtZSwgc2NpX29mZnNldCwgc2NpX3NpemUsIHNjaWZfb2Zmc2V0LCBzY2lmX3NpemUpXApAQCAtNzkxLDExICs3ODksMTYgQEAKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkKICNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoKGNsayoyKSsxNipicHMpLygzMipicHMpLTEpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCi0jZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSAoKChjbGsqMikrMTYqYnBzKS8oMTYqYnBzKS0xKQorc3RhdGljIGlubGluZSBpbnQgc2NicnJfY2FsYyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgYnBzLCBpbnQgY2xrKQoreworCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRikKKwkJcmV0dXJuIChjbGsrMTYqYnBzKS8oMzIqYnBzKS0xOworCWVsc2UKKwkJcmV0dXJuICgoY2xrKjIpKzE2KmJwcykvKDE2KmJwcyktMTsKK30KKyNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspIHNjYnJyX2NhbGMocG9ydCwgYnBzLCBjbGspCiAjZWxpZiBkZWZpbmVkKF9fSDgzMDBIX18pIHx8IGRlZmluZWQoX19IODMwMFNfXykKLSNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzKSAoKChDT05GSUdfQ1BVX0NMT0NLKjEwMDAvMzIpL2JwcyktMSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQotI2RlZmluZSBTQ0JSUl9WQUxVRShicHMpICgoY3VycmVudF9jcHVfZGF0YS5tb2R1bGVfY2xvY2srMTYqYnBzKS8oMzIqYnBzKS0xKQorI2RlZmluZSBTQ0JSUl9WQUxVRShicHMsIGNsaykgKCgoY2xrKjEwMDAvMzIpL2JwcyktMSkKICNlbHNlIC8qIEdlbmVyaWMgU0ggKi8KICNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoY2xrKzE2KmJwcykvKDMyKmJwcyktMSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jIGIvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCmluZGV4IGI3M2UzYzAuLmQ1Mjc2YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKQEAgLTYxLDcgKzYxLDcgQEAKICNkZWZpbmUgU05fU0FMX0JVRkZFUl9TSVpFICg2NCAqICgxIDw8IDEwKSkKIAogI2RlZmluZSBTTl9TQUxfVUFSVF9GSUZPX0RFUFRIIDE2Ci0jZGVmaW5lIFNOX1NBTF9VQVJUX0ZJRk9fU1BFRURfQ1BTIDk2MDAvMTAKKyNkZWZpbmUgU05fU0FMX1VBUlRfRklGT19TUEVFRF9DUFMgKDk2MDAvMTApCiAKIC8qIHNuX3RyYW5zbWl0X2NoYXJzKCkgY2FsbGluZyBhcmdzICovCiAjZGVmaW5lIFRSQU5TTUlUX0JVRkZFUkVECTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC91Y2NfdWFydC5jCmluZGV4IDVjNWQxOGQuLjMxNWE5MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdWNjX3VhcnQuYwpAQCAtMTAwOSw3ICsxMDA5LDcgQEAKIAlyeF9zaXplID0gTDFfQ0FDSEVfQUxJR04ocWVfcG9ydC0+cnhfbnJmaWZvcyAqIHFlX3BvcnQtPnJ4X2ZpZm9zaXplKTsKIAl0eF9zaXplID0gTDFfQ0FDSEVfQUxJR04ocWVfcG9ydC0+dHhfbnJmaWZvcyAqIHFlX3BvcnQtPnR4X2ZpZm9zaXplKTsKIAotCWJkX3ZpcnQgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgcnhfc2l6ZSArIHR4X3NpemUsICZiZF9kbWFfYWRkciwKKwliZF92aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KHBvcnQtPmRldiwgcnhfc2l6ZSArIHR4X3NpemUsICZiZF9kbWFfYWRkciwKIAkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFiZF92aXJ0KSB7CiAJCWRldl9lcnIocG9ydC0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIGJ1ZmZlciBkZXNjcmlwdG9yc1xuIik7CkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfcWVfcG9ydCwgcG9ydCk7CiAJc3RydWN0IHVjY19zbG93X3ByaXZhdGUgKnVjY3MgPSBxZV9wb3J0LT51c19wcml2YXRlOwogCi0JZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgcWVfcG9ydC0+YmRfc2l6ZSwgcWVfcG9ydC0+YmRfdmlydCwKKwlkbWFfZnJlZV9jb2hlcmVudChwb3J0LT5kZXYsIHFlX3BvcnQtPmJkX3NpemUsIHFlX3BvcnQtPmJkX3ZpcnQsCiAJCQkgIHFlX3BvcnQtPmJkX2RtYV9hZGRyKTsKIAogCXVjY19zbG93X2ZyZWUodWNjcyk7CkBAIC0xMDY2LDcgKzEwNjYsNyBAQAogCWlmIChzZXItPnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHNlci0+dHlwZSAhPSBQT1JUX0NQTSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc2VyLT5pcnEgPCAwIHx8IHNlci0+aXJxID49IE5SX0lSUVMpCisJaWYgKHNlci0+aXJxIDwgMCB8fCBzZXItPmlycSA+PSBucl9pcnFzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChzZXItPmJhdWRfYmFzZSA8IDk2MDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL01ha2VmaWxlIGIvZHJpdmVycy9zaC9NYWtlZmlsZQppbmRleCBhOTZmNGE4Li42YTAyNWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2gvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgU3VwZXJIIHNwZWNpZmljIGRyaXZlcnMuCiAjCi0KIG9iai0kKENPTkZJR19TVVBFUkhZV0FZKQkrPSBzdXBlcmh5d2F5Lwogb2JqLSQoQ09ORklHX01BUExFKQkJKz0gbWFwbGUvCitvYmoteQkJCQkrPSBpbnRjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvaW50Yy5jIGIvZHJpdmVycy9zaC9pbnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThkMjRjNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2gvaW50Yy5jCkBAIC0wLDAgKzEsNzEzIEBACisvKgorICogU2hhcmVkIGludGVycnVwdCBoYW5kbGluZyBjb2RlIGZvciBJUFIgYW5kIElOVEMyIHR5cGVzIG9mIElSUXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IE1hZ251cyBEYW1tCisgKgorICogQmFzZWQgb24gaW50YzIuYyBhbmQgaXByLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgIE5paWJlIFl1dGFrYSAmIFRha2VzaGkgWWFlZ2FzaGkKKyAqIENvcHlyaWdodCAoQykgMjAwMCAgS2F6dW1vdG8gS29qaW1hCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIERhdmlkIEouIE1ja2F5IChkYXZpZC5tY2theUBzdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFRha2FzaGkgS3VzdWRhIDxrdXN1ZGEtdGFrYXNoaUBoaXRhY2hpLXVsLmNvLmpwPgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2hfaW50Yy5oPgorCisjZGVmaW5lIF9JTlRDX01LKGZuLCBtb2RlLCBhZGRyX2UsIGFkZHJfZCwgd2lkdGgsIHNoaWZ0KSBcCisJKChzaGlmdCkgfCAoKHdpZHRoKSA8PCA1KSB8ICgoZm4pIDw8IDkpIHwgKChtb2RlKSA8PCAxMykgfCBcCisJICgoYWRkcl9lKSA8PCAxNikgfCAoKGFkZHJfZCA8PCAyNCkpKQorCisjZGVmaW5lIF9JTlRDX1NISUZUKGgpIChoICYgMHgxZikKKyNkZWZpbmUgX0lOVENfV0lEVEgoaCkgKChoID4+IDUpICYgMHhmKQorI2RlZmluZSBfSU5UQ19GTihoKSAoKGggPj4gOSkgJiAweGYpCisjZGVmaW5lIF9JTlRDX01PREUoaCkgKChoID4+IDEzKSAmIDB4NykKKyNkZWZpbmUgX0lOVENfQUREUl9FKGgpICgoaCA+PiAxNikgJiAweGZmKQorI2RlZmluZSBfSU5UQ19BRERSX0QoaCkgKChoID4+IDI0KSAmIDB4ZmYpCisKK3N0cnVjdCBpbnRjX2hhbmRsZV9pbnQgeworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBoYW5kbGU7Cit9OworCitzdHJ1Y3QgaW50Y19kZXNjX2ludCB7CisJdW5zaWduZWQgbG9uZyAqcmVnOworI2lmZGVmIENPTkZJR19TTVAKKwl1bnNpZ25lZCBsb25nICpzbXA7CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQgbnJfcmVnOworCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKnByaW87CisJdW5zaWduZWQgaW50IG5yX3ByaW87CisJc3RydWN0IGludGNfaGFuZGxlX2ludCAqc2Vuc2U7CisJdW5zaWduZWQgaW50IG5yX3NlbnNlOworCXN0cnVjdCBpcnFfY2hpcCBjaGlwOworfTsKKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgSVNfU01QKHgpIHguc21wCisjZGVmaW5lIElOVENfUkVHKGQsIHgsIGMpIChkLT5yZWdbKHgpXSArICgoZC0+c21wWyh4KV0gJiAweGZmKSAqIGMpKQorI2RlZmluZSBTTVBfTlIoZCwgeCkgKChkLT5zbXBbKHgpXSA+PiA4KSA/IChkLT5zbXBbKHgpXSA+PiA4KSA6IDEpCisjZWxzZQorI2RlZmluZSBJU19TTVAoeCkgMAorI2RlZmluZSBJTlRDX1JFRyhkLCB4LCBjKSAoZC0+cmVnWyh4KV0pCisjZGVmaW5lIFNNUF9OUihkLCB4KSAxCisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGludCBpbnRjX3ByaW9fbGV2ZWxbTlJfSVJRU107IC8qIGZvciBub3cgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFja19oYW5kbGVbTlJfSVJRU107CisjZW5kaWYKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZ2V0X2ludGNfZGVzYyh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcChpcnEpOworCXJldHVybiAodm9pZCAqKSgoY2hhciAqKWNoaXAgLSBvZmZzZXRvZihzdHJ1Y3QgaW50Y19kZXNjX2ludCwgY2hpcCkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzZXRfZmllbGQodW5zaWduZWQgaW50IHZhbHVlLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGZpZWxkX3ZhbHVlLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGhhbmRsZSkKK3sKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBfSU5UQ19XSURUSChoYW5kbGUpOworCXVuc2lnbmVkIGludCBzaGlmdCA9IF9JTlRDX1NISUZUKGhhbmRsZSk7CisKKwl2YWx1ZSAmPSB+KCgoMSA8PCB3aWR0aCkgLSAxKSA8PCBzaGlmdCk7CisJdmFsdWUgfD0gZmllbGRfdmFsdWUgPDwgc2hpZnQ7CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV84KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBoLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJX19yYXdfd3JpdGViKHNldF9maWVsZCgwLCBkYXRhLCBoKSwgYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlXzE2KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBoLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJX19yYXdfd3JpdGV3KHNldF9maWVsZCgwLCBkYXRhLCBoKSwgYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlXzMyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBoLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJX19yYXdfd3JpdGVsKHNldF9maWVsZCgwLCBkYXRhLCBoKSwgYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIG1vZGlmeV84KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBoLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19yYXdfd3JpdGViKHNldF9maWVsZChfX3Jhd19yZWFkYihhZGRyKSwgZGF0YSwgaCksIGFkZHIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbW9kaWZ5XzE2KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBoLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19yYXdfd3JpdGV3KHNldF9maWVsZChfX3Jhd19yZWFkdyhhZGRyKSwgZGF0YSwgaCksIGFkZHIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbW9kaWZ5XzMyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBoLCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19yYXdfd3JpdGVsKHNldF9maWVsZChfX3Jhd19yZWFkbChhZGRyKSwgZGF0YSwgaCksIGFkZHIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworZW51bSB7CVJFR19GTl9FUlIgPSAwLCBSRUdfRk5fV1JJVEVfQkFTRSA9IDEsIFJFR19GTl9NT0RJRllfQkFTRSA9IDUgfTsKKworc3RhdGljIHZvaWQgKCppbnRjX3JlZ19mbnNbXSkodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBoLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKSA9IHsKKwlbUkVHX0ZOX1dSSVRFX0JBU0UgKyAwXSA9IHdyaXRlXzgsCisJW1JFR19GTl9XUklURV9CQVNFICsgMV0gPSB3cml0ZV8xNiwKKwlbUkVHX0ZOX1dSSVRFX0JBU0UgKyAzXSA9IHdyaXRlXzMyLAorCVtSRUdfRk5fTU9ESUZZX0JBU0UgKyAwXSA9IG1vZGlmeV84LAorCVtSRUdfRk5fTU9ESUZZX0JBU0UgKyAxXSA9IG1vZGlmeV8xNiwKKwlbUkVHX0ZOX01PRElGWV9CQVNFICsgM10gPSBtb2RpZnlfMzIsCit9OworCitlbnVtIHsJTU9ERV9FTkFCTEVfUkVHID0gMCwgLyogQml0KHMpIHNldCAtPiBpbnRlcnJ1cHQgZW5hYmxlZCAqLworCU1PREVfTUFTS19SRUcsICAgICAgIC8qIEJpdChzKSBzZXQgLT4gaW50ZXJydXB0IGRpc2FibGVkICovCisJTU9ERV9EVUFMX1JFRywgICAgICAgLyogVHdvIHJlZ2lzdGVycywgc2V0IGJpdCB0byBlbmFibGUgLyBkaXNhYmxlICovCisJTU9ERV9QUklPX1JFRywgICAgICAgLyogUHJpb3JpdHkgdmFsdWUgd3JpdHRlbiB0byBlbmFibGUgaW50ZXJydXB0ICovCisJTU9ERV9QQ0xSX1JFRywgICAgICAgLyogQWJvdmUgcGx1cyBhbGwgYml0cyBzZXQgdG8gZGlzYWJsZSBpbnRlcnJ1cHQgKi8KK307CisKK3N0YXRpYyB2b2lkIGludGNfbW9kZV9maWVsZCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgdW5zaWduZWQgbG9uZyBoYW5kbGUsCisJCQkgICAgdm9pZCAoKmZuKSh1bnNpZ25lZCBsb25nLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nKSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgaXJxKQoreworCWZuKGFkZHIsIGhhbmRsZSwgKCgxIDw8IF9JTlRDX1dJRFRIKGhhbmRsZSkpIC0gMSkpOworfQorCitzdGF0aWMgdm9pZCBpbnRjX21vZGVfemVybyh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICB1bnNpZ25lZCBsb25nIGhhbmRsZSwKKwkJCSAgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyksCisJCQkgICB1bnNpZ25lZCBpbnQgaXJxKQoreworCWZuKGFkZHIsIGhhbmRsZSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGludGNfbW9kZV9wcmlvKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAorCQkJICAgdm9pZCAoKmZuKSh1bnNpZ25lZCBsb25nLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nKSwKKwkJCSAgIHVuc2lnbmVkIGludCBpcnEpCit7CisJZm4oYWRkciwgaGFuZGxlLCBpbnRjX3ByaW9fbGV2ZWxbaXJxXSk7Cit9CisKK3N0YXRpYyB2b2lkICgqaW50Y19lbmFibGVfZm5zW10pKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgdW5zaWduZWQgbG9uZyBoYW5kbGUsCisJCQkJIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nKSwKKwkJCQkgdW5zaWduZWQgaW50IGlycSkgPSB7CisJW01PREVfRU5BQkxFX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCisJW01PREVfTUFTS19SRUddID0gaW50Y19tb2RlX3plcm8sCisJW01PREVfRFVBTF9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorCVtNT0RFX1BSSU9fUkVHXSA9IGludGNfbW9kZV9wcmlvLAorCVtNT0RFX1BDTFJfUkVHXSA9IGludGNfbW9kZV9wcmlvLAorfTsKKworc3RhdGljIHZvaWQgKCppbnRjX2Rpc2FibGVfZm5zW10pKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAorCQkJCSAgdm9pZCAoKmZuKSh1bnNpZ25lZCBsb25nLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyksCisJCQkJICB1bnNpZ25lZCBpbnQgaXJxKSA9IHsKKwlbTU9ERV9FTkFCTEVfUkVHXSA9IGludGNfbW9kZV96ZXJvLAorCVtNT0RFX01BU0tfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKKwlbTU9ERV9EVUFMX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCisJW01PREVfUFJJT19SRUddID0gaW50Y19tb2RlX3plcm8sCisJW01PREVfUENMUl9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9pbnRjX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGhhbmRsZSkKK3sKKwlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCA9IGdldF9pbnRjX2Rlc2MoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgU01QX05SKGQsIF9JTlRDX0FERFJfRShoYW5kbGUpKTsgY3B1KyspIHsKKwkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRShoYW5kbGUpLCBjcHUpOworCQlpbnRjX2VuYWJsZV9mbnNbX0lOVENfTU9ERShoYW5kbGUpXShhZGRyLCBoYW5kbGUsIGludGNfcmVnX2Zuc1wKKwkJCQkJCSAgICBbX0lOVENfRk4oaGFuZGxlKV0sIGlycSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnRjX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCV9pbnRjX2VuYWJsZShpcnEsICh1bnNpZ25lZCBsb25nKWdldF9pcnFfY2hpcF9kYXRhKGlycSkpOworfQorCitzdGF0aWMgdm9pZCBpbnRjX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCA9IGdldF9pbnRjX2Rlc2MoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGhhbmRsZSA9ICh1bnNpZ25lZCBsb25nKSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBTTVBfTlIoZCwgX0lOVENfQUREUl9EKGhhbmRsZSkpOyBjcHUrKykgeworCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9EKGhhbmRsZSksIGNwdSk7CisJCWludGNfZGlzYWJsZV9mbnNbX0lOVENfTU9ERShoYW5kbGUpXShhZGRyLCBoYW5kbGUsaW50Y19yZWdfZm5zXAorCQkJCQkJICAgICBbX0lOVENfRk4oaGFuZGxlKV0sIGlycSk7CisJfQorfQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCitzdGF0aWMgdm9pZCBpbnRjX21hc2tfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7CisJdW5zaWduZWQgbG9uZyBoYW5kbGUgPSBhY2tfaGFuZGxlW2lycV07CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJaW50Y19kaXNhYmxlKGlycSk7CisKKwkvKiByZWFkIHJlZ2lzdGVyIGFuZCB3cml0ZSB6ZXJvIG9ubHkgdG8gdGhlIGFzc29jYWl0ZWQgYml0ICovCisKKwlpZiAoaGFuZGxlKSB7CisJCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0QoaGFuZGxlKSwgMCk7CisJCXN3aXRjaCAoX0lOVENfRk4oaGFuZGxlKSkgeworCQljYXNlIFJFR19GTl9NT0RJRllfQkFTRSArIDA6CS8qIDhiaXQgKi8KKwkJCV9fcmF3X3JlYWRiKGFkZHIpOworCQkJX19yYXdfd3JpdGViKDB4ZmYgXiBzZXRfZmllbGQoMCwgMSwgaGFuZGxlKSwgYWRkcik7CisJCQlicmVhazsKKwkJY2FzZSBSRUdfRk5fTU9ESUZZX0JBU0UgKyAxOgkvKiAxNmJpdCAqLworCQkJX19yYXdfcmVhZHcoYWRkcik7CisJCQlfX3Jhd193cml0ZXcoMHhmZmZmIF4gc2V0X2ZpZWxkKDAsIDEsIGhhbmRsZSksIGFkZHIpOworCQkJYnJlYWs7CisJCWNhc2UgUkVHX0ZOX01PRElGWV9CQVNFICsgMzoJLyogMzJiaXQgKi8KKwkJCV9fcmF3X3JlYWRsKGFkZHIpOworCQkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYgXiBzZXRfZmllbGQoMCwgMSwgaGFuZGxlKSwgYWRkcik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmludGNfZmluZF9pcnEoc3RydWN0IGludGNfaGFuZGxlX2ludCAqaHAsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IG5yX2hwLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGk7CisKKwkvKiB0aGlzIGRvZXNuJ3Qgc2NhbGUgd2VsbCwgYnV0Li4uCisJICoKKwkgKiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNlcmFpbiB1bmNvbW1vbgorCSAqIG9wZXJhdGlvbnMgc3VjaCBhcyBpbnRjX3NldF9wcmlvcml0eSgpIGFuZCBpbnRjX3NldF9zZW5zZSgpCisJICogYW5kIGluIHRob3NlIHJhcmUgY2FzZXMgcGVyZm9ybWFuY2UgZG9lc24ndCBtYXR0ZXIgdGhhdCBtdWNoLgorCSAqIGtlZXBpbmcgdGhlIG1lbW9yeSBmb290cHJpbnQgbG93IGlzIG1vcmUgaW1wb3J0YW50LgorCSAqCisJICogb25lIHJhdGhlciBzaW1wbGUgd2F5IHRvIHNwZWVkIHRoaXMgdXAgYW5kIHN0aWxsIGtlZXAgdGhlCisJICogbWVtb3J5IGZvb3RwcmludCBkb3duIGlzIHRvIG1ha2Ugc3VyZSB0aGUgYXJyYXkgaXMgc29ydGVkCisJICogYW5kIHRoZW4gcGVyZm9ybSBhIGJpc2VjdCB0byBsb29rdXAgdGhlIGlycS4KKwkgKi8KKworCWZvciAoaSA9IDA7IGkgPCBucl9ocDsgaSsrKSB7CisJCWlmICgoaHAgKyBpKS0+aXJxICE9IGlycSkKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiBocCArIGk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBpbnRjX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpbykKK3sKKwlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCA9IGdldF9pbnRjX2Rlc2MoaXJxKTsKKwlzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICppaHA7CisKKwlpZiAoIWludGNfcHJpb19sZXZlbFtpcnFdIHx8IHByaW8gPD0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpaHAgPSBpbnRjX2ZpbmRfaXJxKGQtPnByaW8sIGQtPm5yX3ByaW8sIGlycSk7CisJaWYgKGlocCkgeworCQlpZiAocHJpbyA+PSAoMSA8PCBfSU5UQ19XSURUSChpaHAtPmhhbmRsZSkpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaW50Y19wcmlvX2xldmVsW2lycV0gPSBwcmlvOworCisJCS8qCisJCSAqIG9ubHkgc2V0IHNlY29uZGFyeSBtYXNraW5nIG1ldGhvZCBkaXJlY3RseQorCQkgKiBwcmltYXJ5IG1hc2tpbmcgbWV0aG9kIGlzIHVzaW5nIGludGNfcHJpb19sZXZlbFtpcnFdCisJCSAqIHByaW9yaXR5IGxldmVsIHdpbGwgYmUgc2V0IGR1cmluZyBuZXh0IGVuYWJsZSgpCisJCSAqLworCisJCWlmIChfSU5UQ19GTihpaHAtPmhhbmRsZSkgIT0gUkVHX0ZOX0VSUikKKwkJCV9pbnRjX2VuYWJsZShpcnEsIGlocC0+aGFuZGxlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgVkFMSUQoeCkgKHggfCAweDgwKQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBpbnRjX2lycV9zZW5zZV90YWJsZVtJUlFfVFlQRV9TRU5TRV9NQVNLICsgMV0gPSB7CisJW0lSUV9UWVBFX0VER0VfRkFMTElOR10gPSBWQUxJRCgwKSwKKwlbSVJRX1RZUEVfRURHRV9SSVNJTkddID0gVkFMSUQoMSksCisJW0lSUV9UWVBFX0xFVkVMX0xPV10gPSBWQUxJRCgyKSwKKwkvKiBTSDc3MDYsIFNINzcwNyBhbmQgU0g3NzA5IGRvIG5vdCBzdXBwb3J0IGhpZ2ggbGV2ZWwgdHJpZ2dlcmVkICovCisjaWYgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikgJiYgXAorICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpICYmIFwKKyAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQorCVtJUlFfVFlQRV9MRVZFTF9ISUdIXSA9IFZBTElEKDMpLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IGludGNfc2V0X3NlbnNlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkID0gZ2V0X2ludGNfZGVzYyhpcnEpOworCXVuc2lnbmVkIGNoYXIgdmFsdWUgPSBpbnRjX2lycV9zZW5zZV90YWJsZVt0eXBlICYgSVJRX1RZUEVfU0VOU0VfTUFTS107CisJc3RydWN0IGludGNfaGFuZGxlX2ludCAqaWhwOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWlmICghdmFsdWUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWhwID0gaW50Y19maW5kX2lycShkLT5zZW5zZSwgZC0+bnJfc2Vuc2UsIGlycSk7CisJaWYgKGlocCkgeworCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9FKGlocC0+aGFuZGxlKSwgMCk7CisJCWludGNfcmVnX2Zuc1tfSU5UQ19GTihpaHAtPmhhbmRsZSldKGFkZHIsIGlocC0+aGFuZGxlLCB2YWx1ZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX2dldF9yZWcoc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCBkLT5ucl9yZWc7IGsrKykgeworCQlpZiAoZC0+cmVnW2tdID09IGFkZHJlc3MpCisJCQlyZXR1cm4gazsKKwl9CisKKwlCVUcoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludGNfZW51bSBfX2luaXQgaW50Y19ncnBfaWQoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkgICAgaW50Y19lbnVtIGVudW1faWQpCit7CisJc3RydWN0IGludGNfZ3JvdXAgKmcgPSBkZXNjLT5ncm91cHM7CisJdW5zaWduZWQgaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBnICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX2dyb3VwczsgaSsrKSB7CisJCWcgPSBkZXNjLT5ncm91cHMgKyBpOworCisJCWZvciAoaiA9IDA7IGctPmVudW1faWRzW2pdOyBqKyspIHsKKwkJCWlmIChnLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXR1cm4gZy0+ZW51bV9pZDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX21hc2tfZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAorCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCQkgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZG9fZ3JwcykKK3sKKwlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqbXIgPSBkZXNjLT5tYXNrX3JlZ3M7CisJdW5zaWduZWQgaW50IGksIGosIGZuLCBtb2RlOworCXVuc2lnbmVkIGxvbmcgcmVnX2UsIHJlZ19kOworCisJZm9yIChpID0gMDsgbXIgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+bnJfbWFza19yZWdzOyBpKyspIHsKKwkJbXIgPSBkZXNjLT5tYXNrX3JlZ3MgKyBpOworCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKG1yLT5lbnVtX2lkcyk7IGorKykgeworCQkJaWYgKG1yLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAobXItPnNldF9yZWcgJiYgbXItPmNscl9yZWcpIHsKKwkJCQlmbiA9IFJFR19GTl9XUklURV9CQVNFOworCQkJCW1vZGUgPSBNT0RFX0RVQUxfUkVHOworCQkJCXJlZ19lID0gbXItPmNscl9yZWc7CisJCQkJcmVnX2QgPSBtci0+c2V0X3JlZzsKKwkJCX0gZWxzZSB7CisJCQkJZm4gPSBSRUdfRk5fTU9ESUZZX0JBU0U7CisJCQkJaWYgKG1yLT5zZXRfcmVnKSB7CisJCQkJCW1vZGUgPSBNT0RFX0VOQUJMRV9SRUc7CisJCQkJCXJlZ19lID0gbXItPnNldF9yZWc7CisJCQkJCXJlZ19kID0gbXItPnNldF9yZWc7CisJCQkJfSBlbHNlIHsKKwkJCQkJbW9kZSA9IE1PREVfTUFTS19SRUc7CisJCQkJCXJlZ19lID0gbXItPmNscl9yZWc7CisJCQkJCXJlZ19kID0gbXItPmNscl9yZWc7CisJCQkJfQorCQkJfQorCisJCQlmbiArPSAobXItPnJlZ193aWR0aCA+PiAzKSAtIDE7CisJCQlyZXR1cm4gX0lOVENfTUsoZm4sIG1vZGUsCisJCQkJCWludGNfZ2V0X3JlZyhkLCByZWdfZSksCisJCQkJCWludGNfZ2V0X3JlZyhkLCByZWdfZCksCisJCQkJCTEsCisJCQkJCShtci0+cmVnX3dpZHRoIC0gMSkgLSBqKTsKKwkJfQorCX0KKworCWlmIChkb19ncnBzKQorCQlyZXR1cm4gaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgaW50Y19ncnBfaWQoZGVzYywgZW51bV9pZCksIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfcHJpb19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJCSAgaW50Y19lbnVtIGVudW1faWQsIGludCBkb19ncnBzKQoreworCXN0cnVjdCBpbnRjX3ByaW9fcmVnICpwciA9IGRlc2MtPnByaW9fcmVnczsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIG1vZGUsIGJpdDsKKwl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKKworCWZvciAoaSA9IDA7IHByICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX3ByaW9fcmVnczsgaSsrKSB7CisJCXByID0gZGVzYy0+cHJpb19yZWdzICsgaTsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShwci0+ZW51bV9pZHMpOyBqKyspIHsKKwkJCWlmIChwci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKHByLT5zZXRfcmVnICYmIHByLT5jbHJfcmVnKSB7CisJCQkJZm4gPSBSRUdfRk5fV1JJVEVfQkFTRTsKKwkJCQltb2RlID0gTU9ERV9QQ0xSX1JFRzsKKwkJCQlyZWdfZSA9IHByLT5zZXRfcmVnOworCQkJCXJlZ19kID0gcHItPmNscl9yZWc7CisJCQl9IGVsc2UgeworCQkJCWZuID0gUkVHX0ZOX01PRElGWV9CQVNFOworCQkJCW1vZGUgPSBNT0RFX1BSSU9fUkVHOworCQkJCWlmICghcHItPnNldF9yZWcpCisJCQkJCUJVRygpOworCQkJCXJlZ19lID0gcHItPnNldF9yZWc7CisJCQkJcmVnX2QgPSBwci0+c2V0X3JlZzsKKwkJCX0KKworCQkJZm4gKz0gKHByLT5yZWdfd2lkdGggPj4gMykgLSAxOworCisJCQlCVUdfT04oKGogKyAxKSAqIHByLT5maWVsZF93aWR0aCA+IHByLT5yZWdfd2lkdGgpOworCisJCQliaXQgPSBwci0+cmVnX3dpZHRoIC0gKChqICsgMSkgKiBwci0+ZmllbGRfd2lkdGgpOworCisJCQlyZXR1cm4gX0lOVENfTUsoZm4sIG1vZGUsCisJCQkJCWludGNfZ2V0X3JlZyhkLCByZWdfZSksCisJCQkJCWludGNfZ2V0X3JlZyhkLCByZWdfZCksCisJCQkJCXByLT5maWVsZF93aWR0aCwgYml0KTsKKwkJfQorCX0KKworCWlmIChkb19ncnBzKQorCQlyZXR1cm4gaW50Y19wcmlvX2RhdGEoZGVzYywgZCwgaW50Y19ncnBfaWQoZGVzYywgZW51bV9pZCksIDApOworCisJcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfYWNrX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkJICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICBpbnRjX2VudW0gZW51bV9pZCkKK3sKKwlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqbXIgPSBkZXNjLT5hY2tfcmVnczsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIG1vZGU7CisJdW5zaWduZWQgbG9uZyByZWdfZSwgcmVnX2Q7CisKKwlmb3IgKGkgPSAwOyBtciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9hY2tfcmVnczsgaSsrKSB7CisJCW1yID0gZGVzYy0+YWNrX3JlZ3MgKyBpOworCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKG1yLT5lbnVtX2lkcyk7IGorKykgeworCQkJaWYgKG1yLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQlmbiA9IFJFR19GTl9NT0RJRllfQkFTRTsKKwkJCW1vZGUgPSBNT0RFX0VOQUJMRV9SRUc7CisJCQlyZWdfZSA9IG1yLT5zZXRfcmVnOworCQkJcmVnX2QgPSBtci0+c2V0X3JlZzsKKworCQkJZm4gKz0gKG1yLT5yZWdfd2lkdGggPj4gMykgLSAxOworCQkJcmV0dXJuIF9JTlRDX01LKGZuLCBtb2RlLAorCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAorCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAorCQkJCQkxLAorCQkJCQkobXItPnJlZ193aWR0aCAtIDEpIC0gaik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX3NlbnNlX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkJICAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJCSAgIGludGNfZW51bSBlbnVtX2lkKQoreworCXN0cnVjdCBpbnRjX3NlbnNlX3JlZyAqc3IgPSBkZXNjLT5zZW5zZV9yZWdzOworCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgYml0OworCisJZm9yIChpID0gMDsgc3IgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+bnJfc2Vuc2VfcmVnczsgaSsrKSB7CisJCXNyID0gZGVzYy0+c2Vuc2VfcmVncyArIGk7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoc3ItPmVudW1faWRzKTsgaisrKSB7CisJCQlpZiAoc3ItPmVudW1faWRzW2pdICE9IGVudW1faWQpCisJCQkJY29udGludWU7CisKKwkJCWZuID0gUkVHX0ZOX01PRElGWV9CQVNFOworCQkJZm4gKz0gKHNyLT5yZWdfd2lkdGggPj4gMykgLSAxOworCisJCQlCVUdfT04oKGogKyAxKSAqIHNyLT5maWVsZF93aWR0aCA+IHNyLT5yZWdfd2lkdGgpOworCisJCQliaXQgPSBzci0+cmVnX3dpZHRoIC0gKChqICsgMSkgKiBzci0+ZmllbGRfd2lkdGgpOworCisJCQlyZXR1cm4gX0lOVENfTUsoZm4sIDAsIGludGNfZ2V0X3JlZyhkLCBzci0+cmVnKSwKKwkJCQkJMCwgc3ItPmZpZWxkX3dpZHRoLCBiaXQpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbnRjX3JlZ2lzdGVyX2lycShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAorCQkJCSAgICAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJICAgICBpbnRjX2VudW0gZW51bV9pZCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGludGNfaGFuZGxlX2ludCAqaHA7CisJdW5zaWduZWQgaW50IGRhdGFbMl0sIHByaW1hcnk7CisKKwkvKiBQcmVmZXIgc2luZ2xlIGludGVycnVwdCBzb3VyY2UgYml0bWFwIG92ZXIgb3RoZXIgY29tYmluYXRpb25zOgorCSAqIDEuIGJpdG1hcCwgc2luZ2xlIGludGVycnVwdCBzb3VyY2UKKwkgKiAyLiBwcmlvcml0eSwgc2luZ2xlIGludGVycnVwdCBzb3VyY2UKKwkgKiAzLiBiaXRtYXAsIG11bHRpcGxlIGludGVycnVwdCBzb3VyY2VzIChncm91cHMpCisJICogNC4gcHJpb3JpdHksIG11bHRpcGxlIGludGVycnVwdCBzb3VyY2VzIChncm91cHMpCisJICovCisKKwlkYXRhWzBdID0gaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMCk7CisJZGF0YVsxXSA9IGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDApOworCisJcHJpbWFyeSA9IDA7CisJaWYgKCFkYXRhWzBdICYmIGRhdGFbMV0pCisJCXByaW1hcnkgPSAxOworCisJZGF0YVswXSA9IGRhdGFbMF0gPyBkYXRhWzBdIDogaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMSk7CisJZGF0YVsxXSA9IGRhdGFbMV0gPyBkYXRhWzFdIDogaW50Y19wcmlvX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMSk7CisKKwlpZiAoIWRhdGFbcHJpbWFyeV0pCisJCXByaW1hcnkgXj0gMTsKKworCUJVR19PTighZGF0YVtwcmltYXJ5XSk7IC8qIG11c3QgaGF2ZSBwcmltYXJ5IG1hc2tpbmcgbWV0aG9kICovCisKKwlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZkLT5jaGlwLAorCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOworCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgKHZvaWQgKilkYXRhW3ByaW1hcnldKTsKKworCS8qIHNldCBwcmlvcml0eSBsZXZlbAorCSAqIC0gdGhpcyBuZWVkcyB0byBiZSBhdCBsZWFzdCAyIGZvciA1LWJpdCBwcmlvcml0aWVzIG9uIDc3ODAKKwkgKi8KKwlpbnRjX3ByaW9fbGV2ZWxbaXJxXSA9IDI7CisKKwkvKiBlbmFibGUgc2Vjb25kYXJ5IG1hc2tpbmcgbWV0aG9kIGlmIHByZXNlbnQgKi8KKwlpZiAoZGF0YVshcHJpbWFyeV0pCisJCV9pbnRjX2VuYWJsZShpcnEsIGRhdGFbIXByaW1hcnldKTsKKworCS8qIGFkZCBpcnEgdG8gZC0+cHJpbyBsaXN0IGlmIHByaW9yaXR5IGlzIGF2YWlsYWJsZSAqLworCWlmIChkYXRhWzFdKSB7CisJCWhwID0gZC0+cHJpbyArIGQtPm5yX3ByaW87CisJCWhwLT5pcnEgPSBpcnE7CisJCWhwLT5oYW5kbGUgPSBkYXRhWzFdOworCisJCWlmIChwcmltYXJ5KSB7CisJCQkvKgorCQkJICogb25seSBzZWNvbmRhcnkgcHJpb3JpdHkgc2hvdWxkIGFjY2VzcyByZWdpc3RlcnMsIHNvCisJCQkgKiBzZXQgX0lOVENfRk4oaCkgPSBSRUdfRk5fRVJSIGZvciBpbnRjX3NldF9wcmlvcml0eSgpCisJCQkgKi8KKworCQkJaHAtPmhhbmRsZSAmPSB+X0lOVENfTUsoMHgwZiwgMCwgMCwgMCwgMCwgMCk7CisJCQlocC0+aGFuZGxlIHw9IF9JTlRDX01LKFJFR19GTl9FUlIsIDAsIDAsIDAsIDAsIDApOworCQl9CisJCWQtPm5yX3ByaW8rKzsKKwl9CisKKwkvKiBhZGQgaXJxIHRvIGQtPnNlbnNlIGxpc3QgaWYgc2Vuc2UgaXMgYXZhaWxhYmxlICovCisJZGF0YVswXSA9IGludGNfc2Vuc2VfZGF0YShkZXNjLCBkLCBlbnVtX2lkKTsKKwlpZiAoZGF0YVswXSkgeworCQkoZC0+c2Vuc2UgKyBkLT5ucl9zZW5zZSktPmlycSA9IGlycTsKKwkJKGQtPnNlbnNlICsgZC0+bnJfc2Vuc2UpLT5oYW5kbGUgPSBkYXRhWzBdOworCQlkLT5ucl9zZW5zZSsrOworCX0KKworCS8qIGlycSBzaG91bGQgYmUgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLworCWQtPmNoaXAubWFzayhpcnEpOworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisJaWYgKGRlc2MtPmFja19yZWdzKQorCQlhY2tfaGFuZGxlW2lycV0gPSBpbnRjX2Fja19kYXRhKGRlc2MsIGQsIGVudW1faWQpOworI2VuZGlmCit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHNhdmVfcmVnKHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY250LAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHZhbHVlLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgc21wKQoreworCWlmICh2YWx1ZSkgeworCQlkLT5yZWdbY250XSA9IHZhbHVlOworI2lmZGVmIENPTkZJR19TTVAKKwkJZC0+c21wW2NudF0gPSBzbXA7CisjZW5kaWYKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKwordm9pZCBfX2luaXQgcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgaW50IGksIGssIHNtcDsKKwlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZDsKKworCWQgPSBhbGxvY19ib290bWVtKHNpemVvZigqZCkpOworCisJZC0+bnJfcmVnID0gZGVzYy0+bWFza19yZWdzID8gZGVzYy0+bnJfbWFza19yZWdzICogMiA6IDA7CisJZC0+bnJfcmVnICs9IGRlc2MtPnByaW9fcmVncyA/IGRlc2MtPm5yX3ByaW9fcmVncyAqIDIgOiAwOworCWQtPm5yX3JlZyArPSBkZXNjLT5zZW5zZV9yZWdzID8gZGVzYy0+bnJfc2Vuc2VfcmVncyA6IDA7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKKwlkLT5ucl9yZWcgKz0gZGVzYy0+YWNrX3JlZ3MgPyBkZXNjLT5ucl9hY2tfcmVncyA6IDA7CisjZW5kaWYKKwlkLT5yZWcgPSBhbGxvY19ib290bWVtKGQtPm5yX3JlZyAqIHNpemVvZigqZC0+cmVnKSk7CisjaWZkZWYgQ09ORklHX1NNUAorCWQtPnNtcCA9IGFsbG9jX2Jvb3RtZW0oZC0+bnJfcmVnICogc2l6ZW9mKCpkLT5zbXApKTsKKyNlbmRpZgorCWsgPSAwOworCisJaWYgKGRlc2MtPm1hc2tfcmVncykgeworCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfbWFza19yZWdzOyBpKyspIHsKKwkJCXNtcCA9IElTX1NNUChkZXNjLT5tYXNrX3JlZ3NbaV0pOworCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5tYXNrX3JlZ3NbaV0uc2V0X3JlZywgc21wKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+bWFza19yZWdzW2ldLmNscl9yZWcsIHNtcCk7CisJCX0KKwl9CisKKwlpZiAoZGVzYy0+cHJpb19yZWdzKSB7CisJCWQtPnByaW8gPSBhbGxvY19ib290bWVtKGRlc2MtPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnByaW8pKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfcHJpb19yZWdzOyBpKyspIHsKKwkJCXNtcCA9IElTX1NNUChkZXNjLT5wcmlvX3JlZ3NbaV0pOworCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5wcmlvX3JlZ3NbaV0uc2V0X3JlZywgc21wKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+cHJpb19yZWdzW2ldLmNscl9yZWcsIHNtcCk7CisJCX0KKwl9CisKKwlpZiAoZGVzYy0+c2Vuc2VfcmVncykgeworCQlkLT5zZW5zZSA9IGFsbG9jX2Jvb3RtZW0oZGVzYy0+bnJfdmVjdG9ycyAqIHNpemVvZigqZC0+c2Vuc2UpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfc2Vuc2VfcmVnczsgaSsrKSB7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPnNlbnNlX3JlZ3NbaV0ucmVnLCAwKTsKKwkJfQorCX0KKworCWQtPmNoaXAubmFtZSA9IGRlc2MtPm5hbWU7CisJZC0+Y2hpcC5tYXNrID0gaW50Y19kaXNhYmxlOworCWQtPmNoaXAudW5tYXNrID0gaW50Y19lbmFibGU7CisJZC0+Y2hpcC5tYXNrX2FjayA9IGludGNfZGlzYWJsZTsKKwlkLT5jaGlwLnNldF90eXBlID0gaW50Y19zZXRfc2Vuc2U7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKKwlpZiAoZGVzYy0+YWNrX3JlZ3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX2Fja19yZWdzOyBpKyspCisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPmFja19yZWdzW2ldLnNldF9yZWcsIDApOworCisJCWQtPmNoaXAubWFza19hY2sgPSBpbnRjX21hc2tfYWNrOworCX0KKyNlbmRpZgorCisJQlVHX09OKGsgPiAyNTYpOyAvKiBfSU5UQ19BRERSX0UoKSBhbmQgX0lOVENfQUREUl9EKCkgYXJlIDggYml0cyAqLworCisJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ZlY3RvcnM7IGkrKykgeworCQlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0ID0gZGVzYy0+dmVjdG9ycyArIGk7CisKKwkJaW50Y19yZWdpc3Rlcl9pcnEoZGVzYywgZCwgdmVjdC0+ZW51bV9pZCwgZXZ0MmlycSh2ZWN0LT52ZWN0KSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYwppbmRleCAyNWVkYTcxLi4wZGViZTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYworKysgYi9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYwpAQCAtMTUsMTMgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2Vsc2UKLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC0xMDgsMTMgKzEwMiwxMyBAQAogCSAqIEJlY2F1c2UgcHNjLT5jY3IgaXMgZGVmaW5lZCBhcyAxNmJpdCByZWdpc3RlciBpbnN0ZWFkIG9mIDMyYml0CiAJICoganVzdCBzZXQgdGhlIGxvd2VyIGJ5dGUgb2YgQml0Q2xrRGl2CiAJICovCi0JY2NyID0gaW5fYmUxNigmcHNjLT5jY3IpOworCWNjciA9IGluX2JlMTYoKHUxNiBfX2lvbWVtICopJnBzYy0+Y2NyKTsKIAljY3IgJj0gMHhGRjAwOwogCWlmIChjcy0+c3BlZWRfaHopCiAJCWNjciB8PSAoTUNMSyAvIGNzLT5zcGVlZF9oeiAtIDEpICYgMHhGRjsKIAllbHNlIC8qIGJ5IGRlZmF1bHQgU1BJIENsayAxTUh6ICovCiAJCWNjciB8PSAoTUNMSyAvIDEwMDAwMDAgLSAxKSAmIDB4RkY7Ci0Jb3V0X2JlMTYoJnBzYy0+Y2NyLCBjY3IpOworCW91dF9iZTE2KCh1MTYgX19pb21lbSAqKSZwc2MtPmNjciwgY2NyKTsKIAltcHMtPmJpdHNfcGVyX3dvcmQgPSBjcy0+Yml0c19wZXJfd29yZDsKIAogCWlmIChtcHMtPmFjdGl2YXRlX2NzKQpAQCAtMzQ3LDcgKzM0MSw3IEBACiAJLyogQ29uZmlndXJlIDhiaXQgY29kZWMgbW9kZSBhcyBhIFNQSSBtYXN0ZXIgYW5kIHVzZSBFT0YgZmxhZ3MgKi8KIAkvKiBTSUNSX1NJTV9DT0RFQzh8U0lDUl9HRU5DTEt8U0lDUl9TUEl8U0lDUl9NU1RSfFNJQ1JfVVNFRU9GICovCiAJb3V0X2JlMzIoJnBzYy0+c2ljciwgMHgwMTgwQzgwMCk7Ci0Jb3V0X2JlMTYoJnBzYy0+Y2NyLCAweDA3MEYpOyAvKiBieSBkZWZhdWx0IFNQSSBDbGsgMU1IeiAqLworCW91dF9iZTE2KCh1MTYgX19pb21lbSAqKSZwc2MtPmNjciwgMHgwNzBGKTsgLyogZGVmYXVsdCBTUEkgQ2xrIDFNSHogKi8KIAogCS8qIFNldCAybXMgRFRMIGRlbGF5ICovCiAJb3V0XzgoJnBzYy0+Y3R1ciwgMHgwMCk7CkBAIC00NzEsNTMgKzQ2NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQotc3RhdGljIGludCBfX2luaXQgbXBjNTJ4eF9wc2Nfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzd2l0Y2goZGV2LT5pZCkgewotCWNhc2UgMToKLQljYXNlIDI6Ci0JY2FzZSAzOgotCWNhc2UgNjoKLQkJcmV0dXJuIG1wYzUyeHhfcHNjX3NwaV9kb19wcm9iZSgmZGV2LT5kZXYsCi0JCQlNUEM1Mnh4X1BBKE1QQzUyeHhfUFNDeF9PRkZTRVQoZGV2LT5pZCkpLAotCQkJTVBDNTJ4eF9QU0NfU0laRSwgcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApLCBkZXYtPmlkKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19leGl0IG1wYzUyeHhfcHNjX3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXJldHVybiBtcGM1Mnh4X3BzY19zcGlfZG9fcmVtb3ZlKCZkZXYtPmRldik7Ci19Ci0KLS8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptcGM1Mnh4LXBzYy1zcGkiKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXBjNTJ4eF9wc2Nfc3BpX3BsYXRmb3JtX2RyaXZlciA9IHsKLQkucmVtb3ZlID0gX19leGl0X3AobXBjNTJ4eF9wc2Nfc3BpX3JlbW92ZSksCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAibXBjNTJ4eC1wc2Mtc3BpIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1wYzUyeHhfcHNjX3NwaV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbXBjNTJ4eF9wc2Nfc3BpX3BsYXRmb3JtX2RyaXZlciwKLQkJCW1wYzUyeHhfcHNjX3NwaV9wcm9iZSk7Ci19Ci1tb2R1bGVfaW5pdChtcGM1Mnh4X3BzY19zcGlfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBtcGM1Mnh4X3BzY19zcGlfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtcGM1Mnh4X3BzY19zcGlfcGxhdGZvcm1fZHJpdmVyKTsKLX0KLW1vZHVsZV9leGl0KG1wYzUyeHhfcHNjX3NwaV9leGl0KTsKLQotI2Vsc2UJLyogZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKSAqLwotCiBzdGF0aWMgaW50IF9faW5pdCBtcGM1Mnh4X3BzY19zcGlfb2ZfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsCiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CkBAIC01ODYsOCArNTMzLDYgQEAKIH0KIG1vZHVsZV9leGl0KG1wYzUyeHhfcHNjX3NwaV9leGl0KTsKIAotI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkgKi8KLQogTU9EVUxFX0FVVEhPUigiRHJhZ29zIENhcnAiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTVBDNTJ4eCBQU0MgU1BJIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKaW5kZXggOWQyMTg2Zi4uNDU0YTI3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCkBAIC0xMTksMTIgKzExOSwxNCBAQAogCXN0cnVjdCBjbGsJCSpmY2s7CiAJLyogVmlydHVhbCBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNvbnRyb2xsZXIgKi8KIAl2b2lkIF9faW9tZW0JCSpiYXNlOworCXVuc2lnbmVkIGxvbmcJCXBoeXM7CiAJLyogU1BJMSBoYXMgNCBjaGFubmVscywgd2hpbGUgU1BJMiBoYXMgMiAqLwogCXN0cnVjdCBvbWFwMl9tY3NwaV9kbWEJKmRtYV9jaGFubmVsczsKIH07CiAKIHN0cnVjdCBvbWFwMl9tY3NwaV9jcyB7CiAJdm9pZCBfX2lvbWVtCQkqYmFzZTsKKwl1bnNpZ25lZCBsb25nCQlwaHlzOwogCWludAkJCXdvcmRfbGVuOwogfTsKIApAQCAtMjMzLDcgKzIzNSw3IEBACiAJYyA9IGNvdW50OwogCXdvcmRfbGVuID0gY3MtPndvcmRfbGVuOwogCi0JYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBpb192MnAoY3MtPmJhc2UpOworCWJhc2UgPSBjcy0+cGh5czsKIAl0eF9yZWcgPSBiYXNlICsgT01BUDJfTUNTUElfVFgwOwogCXJ4X3JlZyA9IGJhc2UgKyBPTUFQMl9NQ1NQSV9SWDA7CiAJcnggPSB4ZmVyLT5yeF9idWY7CkBAIC02MzMsNiArNjM1LDcgQEAKIAkJaWYgKCFjcykKIAkJCXJldHVybiAtRU5PTUVNOwogCQljcy0+YmFzZSA9IG1jc3BpLT5iYXNlICsgc3BpLT5jaGlwX3NlbGVjdCAqIDB4MTQ7CisJCWNzLT5waHlzID0gbWNzcGktPnBoeXMgKyBzcGktPmNoaXBfc2VsZWN0ICogMHgxNDsKIAkJc3BpLT5jb250cm9sbGVyX3N0YXRlID0gY3M7CiAJfQogCkBAIC0xMDA1LDcgKzEwMDgsMTMgQEAKIAkJZ290byBlcnIxOwogCX0KIAotCW1jc3BpLT5iYXNlID0gKHZvaWQgX19pb21lbSAqKSBpb19wMnYoci0+c3RhcnQpOworCW1jc3BpLT5waHlzID0gci0+c3RhcnQ7CisJbWNzcGktPmJhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworCWlmICghbWNzcGktPmJhc2UpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY2FuJ3QgaW9yZW1hcCBNQ1NQSVxuIik7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZXJyMWFhOworCX0KIAogCUlOSVRfV09SSygmbWNzcGktPndvcmssIG9tYXAyX21jc3BpX3dvcmspOwogCkBAIC0xMDU1LDYgKzEwNjQsOCBAQAogZXJyMjoKIAljbGtfcHV0KG1jc3BpLT5pY2spOwogZXJyMWE6CisJaW91bm1hcChtY3NwaS0+YmFzZSk7CitlcnIxYWE6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCAoci0+ZW5kIC0gci0+c3RhcnQpICsgMSk7CiBlcnIxOgogCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CkBAIC0xMDY3LDYgKzEwNzgsNyBAQAogCXN0cnVjdCBvbWFwMl9tY3NwaQkqbWNzcGk7CiAJc3RydWN0IG9tYXAyX21jc3BpX2RtYQkqZG1hX2NoYW5uZWxzOwogCXN0cnVjdCByZXNvdXJjZQkJKnI7CisJdm9pZCBfX2lvbWVtICpiYXNlOwogCiAJbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwogCW1jc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwpAQCAtMTA3OCw3ICsxMDkwLDkgQEAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIChyLT5lbmQgLSByLT5zdGFydCkgKyAxKTsKIAorCWJhc2UgPSBtY3NwaS0+YmFzZTsKIAlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKKwlpb3VubWFwKGJhc2UpOwogCWtmcmVlKGRtYV9jaGFubmVscyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYyBiL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYwppbmRleCA1NTE1ZWI5Li5iYWI2ZmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKKysrIGIvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCkBAIC01OSw3ICs1OSw2IEBACiAgKiBhbmQgaXJxcyBzaG91bGQgc2hvdyB0aGVyZSB0b28uLi4KICAqLwogI2RlZmluZSBVV0lSRV9CQVNFX1BIWVMJCTB4RkZGQjMwMDAKLSNkZWZpbmUgVVdJUkVfQkFTRQkJKCh2b2lkICpfX2lvbWVtKUlPX0FERFJFU1MoVVdJUkVfQkFTRV9QSFlTKSkKIAogLyogdVdpcmUgUmVnaXN0ZXJzOiAqLwogI2RlZmluZSBVV0lSRV9JT19TSVpFIDB4MjAKQEAgLTEwMywxNiArMTAyLDIxIEBACiB9OwogCiAvKiBSRVZJU0lUIGNvbXBpbGUgdGltZSBjb25zdGFudCBmb3IgaWR4X3NoaWZ0PyAqLworLyoKKyAqIE9yLCBwdXQgaXQgaW4gYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBkcml2ZXI7CisgKiB0aGF0IGF2b2lkcyBoYXZpbmcgdG8gaXNzdWUgdHdvIGxvYWRzIGZvciBlYWNoIGJpdCBvZiBzdGF0aWMgZGF0YS4KKyAqLwogc3RhdGljIHVuc2lnbmVkIGludCB1d2lyZV9pZHhfc2hpZnQ7CitzdGF0aWMgdm9pZCBfX2lvbWVtICp1d2lyZV9iYXNlOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXdpcmVfd3JpdGVfcmVnKGludCBpZHgsIHUxNiB2YWwpCiB7Ci0JX19yYXdfd3JpdGV3KHZhbCwgVVdJUkVfQkFTRSArIChpZHggPDwgdXdpcmVfaWR4X3NoaWZ0KSk7CisJX19yYXdfd3JpdGV3KHZhbCwgdXdpcmVfYmFzZSArIChpZHggPDwgdXdpcmVfaWR4X3NoaWZ0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTE2IHV3aXJlX3JlYWRfcmVnKGludCBpZHgpCiB7Ci0JcmV0dXJuIF9fcmF3X3JlYWR3KFVXSVJFX0JBU0UgKyAoaWR4IDw8IHV3aXJlX2lkeF9zaGlmdCkpOworCXJldHVybiBfX3Jhd19yZWFkdyh1d2lyZV9iYXNlICsgKGlkeCA8PCB1d2lyZV9pZHhfc2hpZnQpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfdXdpcmVfY29uZmlndXJlX21vZGUodTggY3MsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCkBAIC00OTIsNiArNDk2LDE0IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJdXdpcmUgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwl1d2lyZV9iYXNlID0gaW9yZW1hcChVV0lSRV9CQVNFX1BIWVMsIFVXSVJFX0lPX1NJWkUpOworCWlmICghdXdpcmVfYmFzZSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjYW4ndCBpb3JlbWFwIFVXSVJFXG4iKTsKKwkJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIHV3aXJlKTsKIAogCXV3aXJlLT5jayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImFybXhvcl9jayIpOwpAQCAtNTIwLDggKzUzMiwxMCBAQAogCXV3aXJlLT5iaXRiYW5nLnR4cnhfYnVmcyA9IHV3aXJlX3R4cng7CiAKIAlzdGF0dXMgPSBzcGlfYml0YmFuZ19zdGFydCgmdXdpcmUtPmJpdGJhbmcpOwotCWlmIChzdGF0dXMgPCAwKQorCWlmIChzdGF0dXMgPCAwKSB7CiAJCXV3aXJlX29mZih1d2lyZSk7CisJCWlvdW5tYXAodXdpcmVfYmFzZSk7CisJfQogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTUzNCw2ICs1NDgsNyBAQAogCiAJc3RhdHVzID0gc3BpX2JpdGJhbmdfc3RvcCgmdXdpcmUtPmJpdGJhbmcpOwogCXV3aXJlX29mZih1d2lyZSk7CisJaW91bm1hcCh1d2lyZV9iYXNlKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vcmlvbl9zcGkuYyBiL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jCmluZGV4IGI4NzJiZmEuLjAxNGJlY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jCkBAIC0zNjQsNiArMzY0LDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCS8qIEZpeCBhYyB0aW1pbmcgaWYgcmVxdWlyZWQuICAgKi8KKwlpZiAob3Jpb25fc3BpLT5zcGlfaW5mby0+ZW5hYmxlX2Nsb2NrX2ZpeCkKKwkJb3Jpb25fc3BpX3NldGJpdHMob3Jpb25fc3BpLCBPUklPTl9TUElfSUZfQ09ORklHX1JFRywKKwkJCQkgICgxIDw8IDE0KSk7CisKIAlpZiAoc3BpLT5iaXRzX3Blcl93b3JkID09IDApCiAJCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwppbmRleCBkNDdkMzYzLi5kYWU4N2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCkBAIC00Nyw2ICs0NywxMCBAQAogCiAjZGVmaW5lIE1BWF9CVVNFUyAzCiAKKyNkZWZpbmUgUlhfVEhSRVNIX0RGTFQgCTgKKyNkZWZpbmUgVFhfVEhSRVNIX0RGTFQgCTgKKyNkZWZpbmUgVElNT1VUX0RGTFQJCTEwMDAKKwogI2RlZmluZSBETUFfSU5UX01BU0sJCShEQ1NSX0VORElOVFIgfCBEQ1NSX1NUQVJUSU5UUiB8IERDU1JfQlVTRVJSKQogI2RlZmluZSBSRVNFVF9ETUFfQ0hBTk5FTAkoRENTUl9OT0RFU0MgfCBETUFfSU5UX01BU0spCiAjZGVmaW5lIElTX0RNQV9BTElHTkVEKHgpCSgoKCh1MzIpKHgpKSAmIDB4MDcpID09IDApCkBAIC0xMTcxLDYgKzExNzUsOCBAQAogCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKIAlzdHJ1Y3Qgc3NwX2RldmljZSAqc3NwID0gZHJ2X2RhdGEtPnNzcDsKIAl1bnNpZ25lZCBpbnQgY2xrX2RpdjsKKwl1aW50IHR4X3RocmVzID0gVFhfVEhSRVNIX0RGTFQ7CisJdWludCByeF90aHJlcyA9IFJYX1RIUkVTSF9ERkxUOwogCiAJaWYgKCFzcGktPmJpdHNfcGVyX3dvcmQpCiAJCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CkBAIC0xMjA5LDggKzEyMTUsNyBAQAogCiAJCWNoaXAtPmNzX2NvbnRyb2wgPSBudWxsX2NzX2NvbnRyb2w7CiAJCWNoaXAtPmVuYWJsZV9kbWEgPSAwOwotCQljaGlwLT50aW1lb3V0ID0gMTAwMDsKLQkJY2hpcC0+dGhyZXNob2xkID0gU1NDUjFfUnhUcmVzaCgxKSB8IFNTQ1IxX1R4VHJlc2goMSk7CisJCWNoaXAtPnRpbWVvdXQgPSBUSU1PVVRfREZMVDsKIAkJY2hpcC0+ZG1hX2J1cnN0X3NpemUgPSBkcnZfZGF0YS0+bWFzdGVyX2luZm8tPmVuYWJsZV9kbWEgPwogCQkJCQlEQ01EX0JVUlNUOCA6IDA7CiAJfQpAQCAtMTIyNCwyMiArMTIyOSwyMSBAQAogCWlmIChjaGlwX2luZm8pIHsKIAkJaWYgKGNoaXBfaW5mby0+Y3NfY29udHJvbCkKIAkJCWNoaXAtPmNzX2NvbnRyb2wgPSBjaGlwX2luZm8tPmNzX2NvbnRyb2w7Ci0KLQkJY2hpcC0+dGltZW91dCA9IGNoaXBfaW5mby0+dGltZW91dDsKLQotCQljaGlwLT50aHJlc2hvbGQgPSAoU1NDUjFfUnhUcmVzaChjaGlwX2luZm8tPnJ4X3RocmVzaG9sZCkgJgotCQkJCQkJCQlTU0NSMV9SRlQpIHwKLQkJCQkoU1NDUjFfVHhUcmVzaChjaGlwX2luZm8tPnR4X3RocmVzaG9sZCkgJgotCQkJCQkJCQlTU0NSMV9URlQpOwotCi0JCWNoaXAtPmVuYWJsZV9kbWEgPSBjaGlwX2luZm8tPmRtYV9idXJzdF9zaXplICE9IDAKLQkJCQkJJiYgZHJ2X2RhdGEtPm1hc3Rlcl9pbmZvLT5lbmFibGVfZG1hOworCQlpZiAoY2hpcF9pbmZvLT50aW1lb3V0KQorCQkJY2hpcC0+dGltZW91dCA9IGNoaXBfaW5mby0+dGltZW91dDsKKwkJaWYgKGNoaXBfaW5mby0+dHhfdGhyZXNob2xkKQorCQkJdHhfdGhyZXMgPSBjaGlwX2luZm8tPnR4X3RocmVzaG9sZDsKKwkJaWYgKGNoaXBfaW5mby0+cnhfdGhyZXNob2xkKQorCQkJcnhfdGhyZXMgPSBjaGlwX2luZm8tPnJ4X3RocmVzaG9sZDsKKwkJY2hpcC0+ZW5hYmxlX2RtYSA9IGRydl9kYXRhLT5tYXN0ZXJfaW5mby0+ZW5hYmxlX2RtYTsKIAkJY2hpcC0+ZG1hX3RocmVzaG9sZCA9IDA7Ci0KIAkJaWYgKGNoaXBfaW5mby0+ZW5hYmxlX2xvb3BiYWNrKQogCQkJY2hpcC0+Y3IxID0gU1NDUjFfTEJNOwogCX0KIAorCWNoaXAtPnRocmVzaG9sZCA9IChTU0NSMV9SeFRyZXNoKHJ4X3RocmVzKSAmIFNTQ1IxX1JGVCkgfAorCQkJKFNTQ1IxX1R4VHJlc2godHhfdGhyZXMpICYgU1NDUjFfVEZUKTsKKwogCS8qIHNldCBkbWEgYnVyc3QgYW5kIHRocmVzaG9sZCBvdXRzaWRlIG9mIGNoaXBfaW5mbyBwYXRoIHNvIHRoYXQgaWYKIAkgKiBjaGlwX2luZm8gZ29lcyBhd2F5IGFmdGVyIHNldHRpbmcgY2hpcC0+ZW5hYmxlX2RtYSwgdGhlCiAJICogYnVyc3QgYW5kIHRocmVzaG9sZCBjYW4gc3RpbGwgcmVzcG9uZCB0byBjaGFuZ2VzIGluIGJpdHNfcGVyX3dvcmQgKi8KQEAgLTEyNjgsMTcgKzEyNzIsMTkgQEAKIAogCS8qIE5PVEU6ICBQWEEyNXhfU1NQIF9jb3VsZF8gdXNlIGV4dGVybmFsIGNsb2NraW5nIC4uLiAqLwogCWlmIChkcnZfZGF0YS0+c3NwX3R5cGUgIT0gUFhBMjV4X1NTUCkKLQkJZGV2X2RiZygmc3BpLT5kZXYsICIlZCBiaXRzL3dvcmQsICVsZCBIeiwgbW9kZSAlZFxuIiwKKwkJZGV2X2RiZygmc3BpLT5kZXYsICIlZCBiaXRzL3dvcmQsICVsZCBIeiwgbW9kZSAlZCwgJXNcbiIsCiAJCQkJc3BpLT5iaXRzX3Blcl93b3JkLAogCQkJCWNsa19nZXRfcmF0ZShzc3AtPmNsaykKIAkJCQkJLyAoMSArICgoY2hpcC0+Y3IwICYgU1NDUjBfU0NSKSA+PiA4KSksCi0JCQkJc3BpLT5tb2RlICYgMHgzKTsKKwkJCQlzcGktPm1vZGUgJiAweDMsCisJCQkJY2hpcC0+ZW5hYmxlX2RtYSA/ICJETUEiIDogIlBJTyIpOwogCWVsc2UKLQkJZGV2X2RiZygmc3BpLT5kZXYsICIlZCBiaXRzL3dvcmQsICVsZCBIeiwgbW9kZSAlZFxuIiwKKwkJZGV2X2RiZygmc3BpLT5kZXYsICIlZCBiaXRzL3dvcmQsICVsZCBIeiwgbW9kZSAlZCwgJXNcbiIsCiAJCQkJc3BpLT5iaXRzX3Blcl93b3JkLAotCQkJCWNsa19nZXRfcmF0ZShzc3AtPmNsaykKKwkJCQljbGtfZ2V0X3JhdGUoc3NwLT5jbGspIC8gMgogCQkJCQkvICgxICsgKChjaGlwLT5jcjAgJiBTU0NSMF9TQ1IpID4+IDgpKSwKLQkJCQlzcGktPm1vZGUgJiAweDMpOworCQkJCXNwaS0+bW9kZSAmIDB4MywKKwkJCQljaGlwLT5lbmFibGVfZG1hID8gIkRNQSIgOiAiUElPIik7CiAKIAlpZiAoc3BpLT5iaXRzX3Blcl93b3JkIDw9IDgpIHsKIAkJY2hpcC0+bl9ieXRlcyA9IDE7CkBAIC0xNDA3LDkgKzE0MTMsOSBAQAogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyICpwbGF0Zm9ybV9pbmZvOwogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7Ci0Jc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSA9IE5VTEw7CisJc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YTsKIAlzdHJ1Y3Qgc3NwX2RldmljZSAqc3NwOwotCWludCBzdGF0dXMgPSAwOworCWludCBzdGF0dXM7CiAKIAlwbGF0Zm9ybV9pbmZvID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCkBAIC0xNDIyLDcgKzE0MjgsNyBAQAogCS8qIEFsbG9jYXRlIG1hc3RlciB3aXRoIHNwYWNlIGZvciBkcnZfZGF0YSBhbmQgbnVsbCBkbWEgYnVmZmVyICovCiAJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcihkZXYsIHNpemVvZihzdHJ1Y3QgZHJpdmVyX2RhdGEpICsgMTYpOwogCWlmICghbWFzdGVyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbiBub3QgYWxsb2Mgc3BpX21hc3RlclxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBhbGxvYyBzcGlfbWFzdGVyXG4iKTsKIAkJc3NwX2ZyZWUoc3NwKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMTQ1OCw3ICsxNDY0LDcgQEAKIAogCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHNzcC0+aXJxLCBzc3BfaW50LCAwLCBkZXYtPmJ1c19pZCwgZHJ2X2RhdGEpOwogCWlmIChzdGF0dXMgPCAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbiBub3QgZ2V0IElSUVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgSVJRICVkXG4iLCBzc3AtPmlycSk7CiAJCWdvdG8gb3V0X2Vycm9yX21hc3Rlcl9hbGxvYzsKIAl9CiAKQEAgLTE0OTgsNyArMTUwNCw5IEBACiAKIAkvKiBMb2FkIGRlZmF1bHQgU1NQIGNvbmZpZ3VyYXRpb24gKi8KIAl3cml0ZV9TU0NSMCgwLCBkcnZfZGF0YS0+aW9hZGRyKTsKLQl3cml0ZV9TU0NSMShTU0NSMV9SeFRyZXNoKDQpIHwgU1NDUjFfVHhUcmVzaCgxMiksIGRydl9kYXRhLT5pb2FkZHIpOworCXdyaXRlX1NTQ1IxKFNTQ1IxX1J4VHJlc2goUlhfVEhSRVNIX0RGTFQpIHwKKwkJCQlTU0NSMV9UeFRyZXNoKFRYX1RIUkVTSF9ERkxUKSwKKwkJCQlkcnZfZGF0YS0+aW9hZGRyKTsKIAl3cml0ZV9TU0NSMChTU0NSMF9TZXJDbGtEaXYoMikKIAkJCXwgU1NDUjBfTW90b3JvbGEKIAkJCXwgU1NDUjBfRGF0YVNpemUoOCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGkuYyBiL2RyaXZlcnMvc3BpL3NwaS5jCmluZGV4IDc1ZTg2ODYuLjM3MzRkYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS5jCkBAIC02NjAsNyArNjYwLDcgQEAKIAogCWludAkJCXN0YXR1czsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbWVzc2FnZTsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXhbMl07CisJc3RydWN0IHNwaV90cmFuc2Zlcgl4OwogCXU4CQkJKmxvY2FsX2J1ZjsKIAogCS8qIFVzZSBwcmVhbGxvY2F0ZWQgRE1BLXNhZmUgYnVmZmVyLiAgV2UgY2FuJ3QgYXZvaWQgY29weWluZyBoZXJlLApAQCAtNjcxLDE1ICs2NzEsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaV9tZXNzYWdlX2luaXQoJm1lc3NhZ2UpOwotCW1lbXNldCh4LCAwLCBzaXplb2YgeCk7Ci0JaWYgKG5fdHgpIHsKLQkJeFswXS5sZW4gPSBuX3R4OwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeFswXSwgJm1lc3NhZ2UpOwotCX0KLQlpZiAobl9yeCkgewotCQl4WzFdLmxlbiA9IG5fcng7Ci0JCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4WzFdLCAmbWVzc2FnZSk7Ci0JfQorCW1lbXNldCgmeCwgMCwgc2l6ZW9mIHgpOworCXgubGVuID0gbl90eCArIG5fcng7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJngsICZtZXNzYWdlKTsKIAogCS8qIC4uLiB1bmxlc3Mgc29tZW9uZSBlbHNlIGlzIHVzaW5nIHRoZSBwcmUtYWxsb2NhdGVkIGJ1ZmZlciAqLwogCWlmICghbXV0ZXhfdHJ5bG9jaygmbG9jaykpIHsKQEAgLTY5MCwxNSArNjg0LDE1IEBACiAJCWxvY2FsX2J1ZiA9IGJ1ZjsKIAogCW1lbWNweShsb2NhbF9idWYsIHR4YnVmLCBuX3R4KTsKLQl4WzBdLnR4X2J1ZiA9IGxvY2FsX2J1ZjsKLQl4WzFdLnJ4X2J1ZiA9IGxvY2FsX2J1ZiArIG5fdHg7CisJeC50eF9idWYgPSBsb2NhbF9idWY7CisJeC5yeF9idWYgPSBsb2NhbF9idWY7CiAKIAkvKiBkbyB0aGUgaS9vICovCiAJc3RhdHVzID0gc3BpX3N5bmMoc3BpLCAmbWVzc2FnZSk7CiAJaWYgKHN0YXR1cyA9PSAwKQotCQltZW1jcHkocnhidWYsIHhbMV0ucnhfYnVmLCBuX3J4KTsKKwkJbWVtY3B5KHJ4YnVmLCB4LnJ4X2J1ZiArIG5fdHgsIG5fcngpOwogCi0JaWYgKHhbMF0udHhfYnVmID09IGJ1ZikKKwlpZiAoeC50eF9idWYgPT0gYnVmKQogCQltdXRleF91bmxvY2soJmxvY2spOwogCWVsc2UKIAkJa2ZyZWUobG9jYWxfYnVmKTsKQEAgLTc0NCw1ICs3MzgsNSBAQAogICogZHJpdmVyIHJlZ2lzdHJhdGlvbikgX2NvdWxkXyBiZSBkeW5hbWljYWxseSBsaW5rZWQgKG1vZHVsYXIpIC4uLiBjb3N0cwogICogaW5jbHVkZSBuZWVkaW5nIHRvIGhhdmUgYm9hcmRpbmZvIGRhdGEgc3RydWN0dXJlcyBiZSBtdWNoIG1vcmUgcHVibGljLgogICovCi1zdWJzeXNfaW5pdGNhbGwoc3BpX2luaXQpOworcG9zdGNvcmVfaW5pdGNhbGwoc3BpX2luaXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYwppbmRleCAzZWI0MTRiLi5jMjUyY2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKQEAgLTI0Nyw2ICsyNDcsOSBAQAogCXdyaXRlYigweGZmLCBody0+cmVncyArIFMzQzI0MTBfU1BQUkUpOwogCXdyaXRlYihTUFBJTl9ERUZBVUxULCBody0+cmVncyArIFMzQzI0MTBfU1BQSU4pOwogCXdyaXRlYihTUENPTl9ERUZBVUxULCBody0+cmVncyArIFMzQzI0MTBfU1BDT04pOworCisJaWYgKGh3LT5wZGF0YSAmJiBody0+cGRhdGEtPmdwaW9fc2V0dXApCisJCWh3LT5wZGF0YS0+Z3Bpb19zZXR1cChody0+cGRhdGEsIDEpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBzM2MyNHh4X3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtNDEyLDYgKzQxNSw5IEBACiB7CiAJc3RydWN0IHMzYzI0eHhfc3BpICpodyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCisJaWYgKGh3LT5wZGF0YSAmJiBody0+cGRhdGEtPmdwaW9fc2V0dXApCisJCWh3LT5wZGF0YS0+Z3Bpb19zZXR1cChody0+cGRhdGEsIDApOworCiAJY2xrX2Rpc2FibGUoaHctPmNsayk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlkZXYuYyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCmluZGV4IGU1ZTBjZmUuLjg5YTQzNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaWRldi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCkBAIC01ODMsMTAgKzU4Myw5IEBACiAJCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCQlzcGlkZXYtPmRldnQgPSBNS0RFVihTUElERVZfTUFKT1IsIG1pbm9yKTsKLQkJZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHNwaWRldl9jbGFzcywgJnNwaS0+ZGV2LAotCQkJCXNwaWRldi0+ZGV2dCwgc3BpZGV2LAotCQkJCSJzcGlkZXYlZC4lZCIsCi0JCQkJc3BpLT5tYXN0ZXItPmJ1c19udW0sIHNwaS0+Y2hpcF9zZWxlY3QpOworCQlkZXYgPSBkZXZpY2VfY3JlYXRlKHNwaWRldl9jbGFzcywgJnNwaS0+ZGV2LCBzcGlkZXYtPmRldnQsCisJCQkJICAgIHNwaWRldiwgInNwaWRldiVkLiVkIiwKKwkJCQkgICAgc3BpLT5tYXN0ZXItPmJ1c19udW0sIHNwaS0+Y2hpcF9zZWxlY3QpOwogCQlzdGF0dXMgPSBJU19FUlIoZGV2KSA/IFBUUl9FUlIoZGV2KSA6IDA7CiAJfSBlbHNlIHsKIAkJZGV2X2RiZygmc3BpLT5kZXYsICJubyBtaW5vciBudW1iZXIgYXZhaWxhYmxlIVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY21jaWEuYyBiL2RyaXZlcnMvc3NiL3BjbWNpYS5jCmluZGV4IDI0YzJhNDYuLmZiZmFkYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvc3NiL3BjbWNpYS5jCkBAIC04MCw3ICs4MCw3IEBACiAJcmVnLkFjdGlvbiA9IENTX1dSSVRFOwogCXJlZy5WYWx1ZSA9IHZhbHVlOwogCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihidXMtPmhvc3RfcGNtY2lhLCAmcmVnKTsKLQlpZiAodW5saWtlbHkocmVzICE9IENTX1NVQ0NFU1MpKQorCWlmICh1bmxpa2VseShyZXMgIT0gMCkpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlyZXR1cm4gMDsKQEAgLTk2LDcgKzk2LDcgQEAKIAlyZWcuT2Zmc2V0ID0gb2Zmc2V0OwogCXJlZy5BY3Rpb24gPSBDU19SRUFEOwogCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihidXMtPmhvc3RfcGNtY2lhLCAmcmVnKTsKLQlpZiAodW5saWtlbHkocmVzICE9IENTX1NVQ0NFU1MpKQorCWlmICh1bmxpa2VseShyZXMgIT0gMCkpCiAJCXJldHVybiAtRUJVU1k7CiAJKnZhbHVlID0gcmVnLlZhbHVlOwogCkBAIC02MzgsMTcgKzYzOCwxNyBAQAogCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKIAl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKIAlyZXMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGJ1cy0+aG9zdF9wY21jaWEsICZ0dXBsZSk7Ci0JR09UT19FUlJPUl9PTihyZXMgIT0gQ1NfU1VDQ0VTUywgIk1BQyBmaXJzdCB0cGwiKTsKKwlHT1RPX0VSUk9SX09OKHJlcyAhPSAwLCAiTUFDIGZpcnN0IHRwbCIpOwogCXJlcyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShidXMtPmhvc3RfcGNtY2lhLCAmdHVwbGUpOwotCUdPVE9fRVJST1JfT04ocmVzICE9IENTX1NVQ0NFU1MsICJNQUMgZmlyc3QgdHBsIGRhdGEiKTsKKwlHT1RPX0VSUk9SX09OKHJlcyAhPSAwLCAiTUFDIGZpcnN0IHRwbCBkYXRhIik7CiAJd2hpbGUgKDEpIHsKIAkJR09UT19FUlJPUl9PTih0dXBsZS5UdXBsZURhdGFMZW4gPCAxLCAiTUFDIHRwbCA8IDEiKTsKIAkJaWYgKHR1cGxlLlR1cGxlRGF0YVswXSA9PSBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQpCiAJCQlicmVhazsKIAkJcmVzID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGJ1cy0+aG9zdF9wY21jaWEsICZ0dXBsZSk7Ci0JCUdPVE9fRVJST1JfT04ocmVzICE9IENTX1NVQ0NFU1MsICJNQUMgbmV4dCB0cGwiKTsKKwkJR09UT19FUlJPUl9PTihyZXMgIT0gMCwgIk1BQyBuZXh0IHRwbCIpOwogCQlyZXMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoYnVzLT5ob3N0X3BjbWNpYSwgJnR1cGxlKTsKLQkJR09UT19FUlJPUl9PTihyZXMgIT0gQ1NfU1VDQ0VTUywgIk1BQyBuZXh0IHRwbCBkYXRhIik7CisJCUdPVE9fRVJST1JfT04ocmVzICE9IDAsICJNQUMgbmV4dCB0cGwgZGF0YSIpOwogCX0KIAlHT1RPX0VSUk9SX09OKHR1cGxlLlR1cGxlRGF0YUxlbiAhPSBFVEhfQUxFTiArIDIsICJNQUMgdHBsIHNpemUiKTsKIAltZW1jcHkoc3Byb20tPmlsMG1hYywgJnR1cGxlLlR1cGxlRGF0YVsyXSwgRVRIX0FMRU4pOwpAQCAtNjU5LDkgKzY1OSw5IEBACiAJdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogCXJlcyA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoYnVzLT5ob3N0X3BjbWNpYSwgJnR1cGxlKTsKLQlHT1RPX0VSUk9SX09OKHJlcyAhPSBDU19TVUNDRVNTLCAiVkVOIGZpcnN0IHRwbCIpOworCUdPVE9fRVJST1JfT04ocmVzICE9IDAsICJWRU4gZmlyc3QgdHBsIik7CiAJcmVzID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGJ1cy0+aG9zdF9wY21jaWEsICZ0dXBsZSk7Ci0JR09UT19FUlJPUl9PTihyZXMgIT0gQ1NfU1VDQ0VTUywgIlZFTiBmaXJzdCB0cGwgZGF0YSIpOworCUdPVE9fRVJST1JfT04ocmVzICE9IDAsICJWRU4gZmlyc3QgdHBsIGRhdGEiKTsKIAl3aGlsZSAoMSkgewogCQlHT1RPX0VSUk9SX09OKHR1cGxlLlR1cGxlRGF0YUxlbiA8IDEsICJWRU4gdHBsIDwgMSIpOwogCQlzd2l0Y2ggKHR1cGxlLlR1cGxlRGF0YVswXSkgewpAQCAtNzMzLDExICs3MzMsMTEgQEAKIAkJCWJyZWFrOwogCQl9CiAJCXJlcyA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShidXMtPmhvc3RfcGNtY2lhLCAmdHVwbGUpOwotCQlpZiAocmVzID09IENTX05PX01PUkVfSVRFTVMpCisJCWlmIChyZXMgPT0gLUVOT1NQQykKIAkJCWJyZWFrOwotCQlHT1RPX0VSUk9SX09OKHJlcyAhPSBDU19TVUNDRVNTLCAiVkVOIG5leHQgdHBsIik7CisJCUdPVE9fRVJST1JfT04ocmVzICE9IDAsICJWRU4gbmV4dCB0cGwiKTsKIAkJcmVzID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGJ1cy0+aG9zdF9wY21jaWEsICZ0dXBsZSk7Ci0JCUdPVE9fRVJST1JfT04ocmVzICE9IENTX1NVQ0NFU1MsICJWRU4gbmV4dCB0cGwgZGF0YSIpOworCQlHT1RPX0VSUk9SX09OKHJlcyAhPSAwLCAiVkVOIG5leHQgdHBsIGRhdGEiKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE3OWRlYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCkBAIC0wLDAgKzEsNDYgQEAKK21lbnVjb25maWcgU1RBR0lORworCWJvb2wgIlN0YWdpbmcgZHJpdmVycyIKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNlbGVjdCBhIG51bWJlciBvZiBkcml2ZXJzIHRoYXQgYXJlCisJICBub3Qgb2YgdGhlICJub3JtYWwiIExpbnV4IGtlcm5lbCBxdWFsaXR5IGxldmVsLiAgVGhlc2UgZHJpdmVycworCSAgYXJlIHBsYWNlZCBoZXJlIGluIG9yZGVyIHRvIGdldCBhIHdpZGVyIGF1ZGllbmNlIGZvciB1c2Ugb2YKKwkgIHRoZW0uICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIGRyaXZlcnMgYXJlIHVuZGVyIGhlYXZ5CisJICBkZXZlbG9wbWVudCwgbWF5IG9yIG1heSBub3Qgd29yaywgYW5kIG1heSBjb250YWluIHVzZXJzcGFjZQorCSAgaW50ZXJmYWNlcyB0aGF0IG1vc3QgbGlrZWx5IHdpbGwgYmUgY2hhbmdlZCBpbiB0aGUgbmVhcgorCSAgZnV0dXJlLgorCisJICBVc2luZyBhbnkgb2YgdGhlc2UgZHJpdmVycyB3aWxsIHRhaW50IHlvdXIga2VybmVsIHdoaWNoIG1pZ2h0CisJICBhZmZlY3Qgc3VwcG9ydCBvcHRpb25zIGZyb20gYm90aCB0aGUgY29tbXVuaXR5LCBhbmQgdmFyaW91cworCSAgY29tbWVyY2lhbCBzdXBwb3J0IG9yZ2luaXphdGlvbnMuCisKKwkgIElmIHlvdSB3aXNoIHRvIHdvcmsgb24gdGhlc2UgZHJpdmVycywgdG8gaGVscCBpbXByb3ZlIHRoZW0sIG9yCisJICB0byByZXBvcnQgcHJvYmxlbXMgeW91IGhhdmUgd2l0aCB0aGVtLCBwbGVhc2Ugc2VlIHRoZQorCSAgZHJpdmVyX25hbWUuUkVBRE1FIGZpbGUgaW4gdGhlIGRyaXZlcnMvc3RhZ2luZy8gZGlyZWN0b3J5IHRvCisJICBzZWUgd2hhdCBuZWVkcyB0byBiZSB3b3JrZWQgb24sIGFuZCB3aG8gdG8gY29udGFjdC4KKworCSAgSWYgaW4gZG91YnQsIHNheSBOIGhlcmUuCisKK2lmIFNUQUdJTkcKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvZXQxMzF4L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc3hnL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL21lNDAwMC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9nbzcwMDcvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvdXNiaXAvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2VjaG8vS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvS2NvbmZpZyIKKworZW5kaWYgIyBTVEFHSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1YmNhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpAQCAtMCwwICsxLDE1IEBACisjIE1ha2VmaWxlIGZvciBzdGFnaW5nIGRpcmVjdG9yeQorCisjIGZpeCBmb3IgYnVpbGQgc3lzdGVtIGJ1Zy4uLgorb2JqLSQoQ09ORklHX1NUQUdJTkcpCQkrPSBzdGFnaW5nLm8KKworb2JqLSQoQ09ORklHX0VUMTMxWCkJCSs9IGV0MTMxeC8KK29iai0kKENPTkZJR19TTElDT1NTKQkJKz0gc2xpY29zcy8KK29iai0kKENPTkZJR19TWEcpCQkrPSBzeGcvCitvYmotJChDT05GSUdfTUU0MDAwKQkJKz0gbWU0MDAwLworb2JqLSQoQ09ORklHX1ZJREVPX0dPNzAwNykJKz0gZ283MDA3Lworb2JqLSQoQ09ORklHX1VTQl9JUF9DT01NT04pCSs9IHVzYmlwLworb2JqLSQoQ09ORklHX1czNVVORCkJCSs9IHdpbmJvbmQvCitvYmotJChDT05GSUdfUFJJU00yX1VTQikJKz0gd2xhbi1uZy8KK29iai0kKENPTkZJR19FQ0hPKQkJKz0gZWNoby8KK29iai0kKENPTkZJR19VU0JfQVRNRUwpCQkrPSBhdDc2X3VzYi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwNmY5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9LY29uZmlnCkBAIC0wLDAgKzEsOCBAQAorY29uZmlnIFVTQl9BVE1FTAorCXRyaXN0YXRlICJBdG1lbCBhdDc2YzUwMy9hdDc2YzUwNS9hdDc2YzUwNWEgVVNCIGNhcmRzIgorCWRlcGVuZHMgb24gV0xBTl84MDIxMSAmJiBVU0IKKwlkZWZhdWx0IE4KKwlzZWxlY3QgRldfTE9BREVSCisJLS0taGVscC0tLQorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFVTQiBXaXJlbGVzcyBkZXZpY2VzIHVzaW5nIEF0bWVsIGF0NzZjNTAzLAorCSAgYXQ3NmM1MDUgb3IgYXQ3NmM1MDVhIGNoaXBzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNDdlODgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX1VTQl9BVE1FTCkJCSs9IGF0NzZfdXNiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxMWNhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9UT0RPCkBAIC0wLDAgKzEsMiBAQAorcmV3cml0ZSB0aGUgZHJpdmVyIHRvIHVzZSB0aGUgcHJvcGVyIGluLWtlcm5lbCB3aXJlbGVzcyBzdGFjaworaW5zdGVhZCBvZiB1c2luZyBpdHMgb3duLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmRmMGM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMKQEAgLTAsMCArMSw1NTU5IEBACisvKgorICogYXQ3NmM1MDMvYXQ3NmM1MDUgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMiAtIDIwMDMgT2xpdmVyIEt1cnRoCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgSm9lcmcgQWxiZXJ0IDxqb2VyZy5hbGJlcnRAZ214LmRlPgorICogQ29weXJpZ2h0IChjKSAyMDA0IE5pY2sgSm9uZXMKKyAqIENvcHlyaWdodCAoYykgMjAwNCBCYWxpbnQgU2VlYmVyIDxuMF81cDRtX3AxMzQ1M0Bob3RtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNyBHdWlkbyBHdWVudGhlciA8YWd4QHNpZ3hjcHUub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEJlcmxpb3MgZHJpdmVyIGZvciBXTEFOIFVTQiBkZXZpY2VzIGJhc2VkIG9uIHRoZQorICogQXRtZWwgQVQ3NkM1MDNBLzUwNS81MDVBLgorICoKKyAqIFNvbWUgaXdfaGFuZGxlciBjb2RlIHdhcyB0YWtlbiBmcm9tIGFpcm8uYywgKEMpIDE5OTkgQmVuamFtaW4gUmVlZAorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KKworI2luY2x1ZGUgImF0NzZfdXNiLmgiCisKKy8qIFZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgRFJJVkVSX05BTUUgImF0NzZfdXNiIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC4xNyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkF0bWVsIGF0NzZ4IFVTQiBXaXJlbGVzcyBMQU4gRHJpdmVyIgorCisvKiBhdDc2X2RlYnVnIGJpdHMgKi8KKyNkZWZpbmUgREJHX1BST0dSRVNTCQkweDAwMDAwMDAxCS8qIGF1dGhlbnRpY2F0aW9uL2FjY29jaWF0aW9uICovCisjZGVmaW5lIERCR19CU1NfVEFCTEUJCTB4MDAwMDAwMDIJLyogc2hvdyBCU1MgdGFibGUgYWZ0ZXIgc2NhbnMgKi8KKyNkZWZpbmUgREJHX0lPQ1RMCQkweDAwMDAwMDA0CS8qIGlvY3RsIGNhbGxzIC8gc2V0dGluZ3MgKi8KKyNkZWZpbmUgREJHX01BQ19TVEFURQkJMHgwMDAwMDAwOAkvKiBNQUMgc3RhdGUgdHJhbnNpdGlvbnMgKi8KKyNkZWZpbmUgREJHX1RYX0RBVEEJCTB4MDAwMDAwMTAJLyogdHggaGVhZGVyICovCisjZGVmaW5lIERCR19UWF9EQVRBX0NPTlRFTlQJMHgwMDAwMDAyMAkvKiB0eCBjb250ZW50ICovCisjZGVmaW5lIERCR19UWF9NR01UCQkweDAwMDAwMDQwCS8qIHR4IG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgREJHX1JYX0RBVEEJCTB4MDAwMDAwODAJLyogcnggZGF0YSBoZWFkZXIgKi8KKyNkZWZpbmUgREJHX1JYX0RBVEFfQ09OVEVOVAkweDAwMDAwMTAwCS8qIHJ4IGRhdGEgY29udGVudCAqLworI2RlZmluZSBEQkdfUlhfTUdNVAkJMHgwMDAwMDIwMAkvKiByeCBtZ210IGZyYW1lIGhlYWRlcnMgKi8KKyNkZWZpbmUgREJHX1JYX0JFQUNPTgkJMHgwMDAwMDQwMAkvKiByeCBiZWFjb24gKi8KKyNkZWZpbmUgREJHX1JYX0NUUkwJCTB4MDAwMDA4MDAJLyogcnggY29udHJvbCAqLworI2RlZmluZSBEQkdfUlhfTUdNVF9DT05URU5UCTB4MDAwMDEwMDAJLyogcnggbWdtdCBjb250ZW50ICovCisjZGVmaW5lIERCR19SWF9GUkFHUwkJMHgwMDAwMjAwMAkvKiByeCBkYXRhIGZyYWdtZW50IGhhbmRsaW5nICovCisjZGVmaW5lIERCR19ERVZTVEFSVAkJMHgwMDAwNDAwMAkvKiBmdyBkb3dubG9hZCwgZGV2aWNlIHN0YXJ0ICovCisjZGVmaW5lIERCR19VUkIJCQkweDAwMDA4MDAwCS8qIHJ4IHVyYiBzdGF0dXMsIC4uLiAqLworI2RlZmluZSBEQkdfUlhfQVRNRUxfSERSCTB4MDAwMTAwMDAJLyogQXRtZWwtc3BlY2lmaWMgUnggaGVhZGVycyAqLworI2RlZmluZSBEQkdfUFJPQ19FTlRSWQkJMHgwMDAyMDAwMAkvKiBwcm9jZWR1cmUgZW50cmllcy9leGl0cyAqLworI2RlZmluZSBEQkdfUE0JCQkweDAwMDQwMDAwCS8qIHBvd2VyIG1hbmFnZW1lbnQgc2V0dGluZ3MgKi8KKyNkZWZpbmUgREJHX0JTU19NQVRDSAkJMHgwMDA4MDAwMAkvKiBCU1MgbWF0Y2ggZmFpbHVyZXMgKi8KKyNkZWZpbmUgREJHX1BBUkFNUwkJMHgwMDEwMDAwMAkvKiBzaG93IGNvbmZpZ3VyZWQgcGFyYW1ldGVycyAqLworI2RlZmluZSBEQkdfV0FJVF9DT01QTEVURQkweDAwMjAwMDAwCS8qIGNvbW1hbmQgY29tcGxldGlvbiAqLworI2RlZmluZSBEQkdfUlhfRlJBR1NfU0tCCTB4MDA0MDAwMDAJLyogc2tiIGhlYWRlciBvZiBSeCBmcmFnbWVudHMgKi8KKyNkZWZpbmUgREJHX0JTU19UQUJMRV9STQkweDAwODAwMDAwCS8qIHB1cmdpbmcgYnNzIHRhYmxlIGVudHJpZXMgKi8KKyNkZWZpbmUgREJHX01PTklUT1JfTU9ERQkweDAxMDAwMDAwCS8qIG1vbml0b3IgbW9kZSAqLworI2RlZmluZSBEQkdfTUlCCQkJMHgwMjAwMDAwMAkvKiBkdW1wIGFsbCBNSUJzIG9uIHN0YXJ0dXAgKi8KKyNkZWZpbmUgREJHX01HTVRfVElNRVIJCTB4MDQwMDAwMDAJLyogZHVtcCBtZ210X3RpbWVyIG9wcyAqLworI2RlZmluZSBEQkdfV0VfRVZFTlRTCQkweDA4MDAwMDAwCS8qIGR1bXAgd2lyZWxlc3MgZXZlbnRzICovCisjZGVmaW5lIERCR19GVwkJCTB4MTAwMDAwMDAJLyogZmlybXdhcmUgZG93bmxvYWQgKi8KKyNkZWZpbmUgREJHX0RGVQkJCTB4MjAwMDAwMDAJLyogZGV2aWNlIGZpcm13YXJlIHVwZ3JhZGUgKi8KKworI2RlZmluZSBEQkdfREVGQVVMVFMJCTAKKworLyogVXNlIG91ciBvd24gZGJnIG1hY3JvICovCisjZGVmaW5lIGF0NzZfZGJnKGJpdHMsIGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmIChhdDc2X2RlYnVnICYgKGJpdHMpKSBcCisJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBhdDc2X2RlYnVnID0gREJHX0RFRkFVTFRTOworCisvKiBQcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBmaXJtd2FyZSBsb2FkaW5nIGFuZCBwYXJzaW5nICovCitzdGF0aWMgc3RydWN0IG11dGV4IGZ3X211dGV4OworCitzdGF0aWMgc3RydWN0IGZ3ZW50cnkgZmlybXdhcmVzW10gPSB7CisJWzBdID0geyIifSwKKwlbQk9BUkRfNTAzX0lTTDM4NjFdID0geyJhdG1lbF9hdDc2YzUwMy1pMzg2MS5iaW4ifSwKKwlbQk9BUkRfNTAzX0lTTDM4NjNdID0geyJhdG1lbF9hdDc2YzUwMy1pMzg2My5iaW4ifSwKKwlbQk9BUkRfNTAzXSA9IHsiYXRtZWxfYXQ3NmM1MDMtcmZtZC5iaW4ifSwKKwlbQk9BUkRfNTAzX0FDQ10gPSB7ImF0bWVsX2F0NzZjNTAzLXJmbWQtYWNjLmJpbiJ9LAorCVtCT0FSRF81MDVdID0geyJhdG1lbF9hdDc2YzUwNS1yZm1kLmJpbiJ9LAorCVtCT0FSRF81MDVfMjk1OF0gPSB7ImF0bWVsX2F0NzZjNTA1LXJmbWQyOTU4LmJpbiJ9LAorCVtCT0FSRF81MDVBXSA9IHsiYXRtZWxfYXQ3NmM1MDVhLXJmbWQyOTU4LmJpbiJ9LAorCVtCT0FSRF81MDVBTVhdID0geyJhdG1lbF9hdDc2YzUwNWFteC1yZm1kLmJpbiJ9LAorfTsKKworI2RlZmluZSBVU0JfREVWSUNFX0RBVEEoX19vcHMpCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkoX19vcHMpCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZfdGFibGVbXSA9IHsKKwkvKgorCSAqIGF0NzZjNTAzLWkzODYxCisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwMy8zODYxIGRldmljZSAqLworCXtVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjAzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogTGlua3N5cyBXVVNCMTEgdjIuMS92Mi42ICovCisJe1VTQl9ERVZJQ0UoMHgwNjZiLCAweDIyMTEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBOZXRnZWFyIE1BMTAxIHJldi4gQSAqLworCXtVU0JfREVWSUNFKDB4MDg2NCwgMHg0MTAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogVGVrcmFtIFUzMDBDIC8gQWxsbmV0IEFMTDAxOTMgKi8KKwl7VVNCX0RFVklDRSgweDBiM2IsIDB4MTYxMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIEhQIEhOMjEwVyBKNzgwMUEgKi8KKwl7VVNCX0RFVklDRSgweDAzZjAsIDB4MDExYyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIFNpdGVjb20vWi1Db20vWnl4ZWwgTTRZLTc1MCAqLworCXtVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogRHluYWxpbmsvQXNrZXkgV0xMMDEzIChpbnRlcnNpbCkgKi8KKwl7VVNCX0RFVklDRSgweDA2OWEsIDB4MDMyMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIEVaIGNvbm5lY3QgMTFNcGJzIFdpcmVsZXNzIFVTQiBBZGFwdGVyIFNNQzI2NjJXIHYxICovCisJe1VTQl9ERVZJQ0UoMHgwZDVjLCAweGEwMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBCZW5RIEFXTDMwMCAqLworCXtVU0JfREVWSUNFKDB4MDRhNSwgMHg5MDAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogQWRkdHJvbiBBV1UtMTIwLCBDb21wZXggV0xVMTEgKi8KKwl7VVNCX0RFVklDRSgweDA1ZGQsIDB4ZmYzMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qIEludGVsIEFQMzEwIEFueVBvaW50IElJIFVTQiAqLworCXtVU0JfREVWSUNFKDB4ODA4NiwgMHgwMjAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogRHluYWxpbmsgTDExVSAqLworCXtVU0JfREVWSUNFKDB4MGQ4ZSwgMHg3MTAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKX0sCisJLyogQXJlc2NvbSBXTC0yMTAsIEZDQyBpZCAwN0otR0wyNDExVVNCICovCisJe1VTQl9ERVZJQ0UoMHgwZDhlLCAweDcxMTApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBJLU8gREFUQSBXTi1CMTEvVVNCICovCisJe1VTQl9ERVZJQ0UoMHgwNGJiLCAweDA5MTkpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpfSwKKwkvKiBCVCBWb3lhZ2VyIDEwMTAgKi8KKwl7VVNCX0RFVklDRSgweDA2OWEsIDB4MDgyMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSl9LAorCS8qCisJICogYXQ3NmM1MDMtaTM4NjMKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTAzLzM4NjMgZGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MDQpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjMpfSwKKwkvKiBTYW1zdW5nIFNXTC0yMTAwVSAqLworCXtVU0JfREVWSUNFKDB4MDU1ZCwgMHhhMDAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYzKX0sCisJLyoKKwkgKiBhdDc2YzUwMy1yZm1kCisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwMy9SRk1EIGRldmljZSAqLworCXtVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjA1KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIER5bmFsaW5rL0Fza2V5IFdMTDAxMyAocmZtZCkgKi8KKwl7VVNCX0RFVklDRSgweDA2OWEsIDB4MDMyMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBMaW5rc3lzIFdVU0IxMSB2Mi42ICovCisJe1VTQl9ERVZJQ0UoMHgwNzdiLCAweDIyMTkpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogTmV0d29yayBFdmVyeXdoZXJlIE5XVTExQiAqLworCXtVU0JfREVWSUNFKDB4MDc3YiwgMHgyMjI3KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIE5ldGdlYXIgTUExMDEgcmV2LiBCICovCisJe1VTQl9ERVZJQ0UoMHgwODY0LCAweDQxMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogRC1MaW5rIERXTC0xMjAgcmV2LiBFICovCisJe1VTQl9ERVZJQ0UoMHgyMDAxLCAweDMyMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogQWN0aW9udGVjIDgwMlVBVDEsIEhXVTAxMTUwLTAxVUsgKi8KKwl7VVNCX0RFVklDRSgweDE2NjgsIDB4NzYwNSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBBaXJWYXN0IFctQnVkZGllIFdOMjEwICovCisJe1VTQl9ERVZJQ0UoMHgwM2ViLCAweDQxMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogRGljayBTbWl0aCBFbGVjdHJvbmljcyBYSDExNTMgODAyLjExYiBVU0IgYWRhcHRlciAqLworCXtVU0JfREVWSUNFKDB4MTM3MSwgMHg1NzQzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIENOZXQgQ05VU0I2MTEgKi8KKwl7VVNCX0RFVklDRSgweDEzNzEsIDB4MDAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBGaWJlckxpbmUgRkwtV0wyMDBVICovCisJe1VTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogQmVuUSBBV0w0MDAgVVNCIHN0aWNrICovCisJe1VTQl9ERVZJQ0UoMHgwNGE1LCAweDkwMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogM0NvbSAzQ1JTSEVXNjk2ICovCisJe1VTQl9ERVZJQ0UoMHgwNTA2LCAweDBhMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogU2llbWVucyBTYW50aXMgQURTTCBXTEFOIFVTQiBhZGFwdGVyIFdMTCAwMTMgKi8KKwl7VVNCX0RFVklDRSgweDA2ODEsIDB4MDAxYiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBCZWxraW4gRjVENjA1MCwgdmVyc2lvbiAyICovCisJe1VTQl9ERVZJQ0UoMHgwNTBkLCAweDAwNTApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKX0sCisJLyogaUJsaXR6eiwgQldVNjEzIChub3QgKkIgb3IgKlNCKSAqLworCXtVU0JfREVWSUNFKDB4MDdiOCwgMHhiMDAwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIEdpZ2FieXRlIEdOLVdMQk0xMDEgKi8KKwl7VVNCX0RFVklDRSgweDEwNDQsIDB4ODAwMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBQbGFuZXggR1ctVVMxMVMgKi8KKwl7VVNCX0RFVklDRSgweDIwMTksIDB4MzIyMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBJbnRlcm5hbCBXTEFOIGFkYXB0ZXIgaW4gaDVbNCw1XXh4IHNlcmllcyBpUEFRcyAqLworCXtVU0JfREVWSUNFKDB4MDQ5ZiwgMHgwMDMyKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIENvcmVnYSBXaXJlbGVzcyBMQU4gVVNCLTExIG1pbmkgKi8KKwl7VVNCX0RFVklDRSgweDA3YWEsIDB4MDAxMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKiBDb3JlZ2EgV2lyZWxlc3MgTEFOIFVTQi0xMSBtaW5pMiAqLworCXtVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDE4KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMyl9LAorCS8qIFVuaWRlbiBQQ1cxMDAgKi8KKwl7VVNCX0RFVklDRSgweDA1ZGQsIDB4ZmYzNSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpfSwKKwkvKgorCSAqIGF0NzZjNTAzLXJmbWQtYWNjCisJICovCisJLyogU01DMjY2NFcgKi8KKwl7VVNCX0RFVklDRSgweDA4M2EsIDB4MzUwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfQUNDKX0sCisJLyogQmVsa2luIEY1RDYwNTAsIFNNQzI2NjJXIHYyLCBTTUMyNjYyVy1BUiAqLworCXtVU0JfREVWSUNFKDB4MGQ1YywgMHhhMDAyKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19BQ0MpfSwKKwkvKgorCSAqIGF0NzZjNTA1LXJmbWQKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1L1JGTUQgKi8KKwl7VVNCX0RFVklDRSgweDAzZWIsIDB4NzYwNiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDUpfSwKKwkvKgorCSAqIGF0NzZjNTA1LXJmbWQyOTU4CisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwNS9SRk1ELCBPdmlzTGluayBXTC0xMTMwVVNCICovCisJe1VTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MTMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpfSwKKwkvKiBGaWJlcmxpbmUgRkwtV0wyNDBVICovCisJe1VTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMTQpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpfSwKKwkvKiBDTmV0IENOVVNCLTYxMUcgKi8KKwl7VVNCX0RFVklDRSgweDEzNzEsIDB4MDAxMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCl9LAorCS8qIExpbmtzeXMgV1VTQjExIHYyLjggKi8KKwl7VVNCX0RFVklDRSgweDE5MTUsIDB4MjIzMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCl9LAorCS8qIFh0ZXJhc3lzIFhOLTIxMjJCLCBJQmxpdHp6IEJXVTYxM0IvQldVNjEzU0IgKi8KKwl7VVNCX0RFVklDRSgweDEyZmQsIDB4MTAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCl9LAorCS8qIENvcmVnYSBXTEFOIFVTQiBTdGljayAxMSAqLworCXtVU0JfREVWSUNFKDB4MDdhYSwgMHg3NjEzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KX0sCisJLyogTWljcm9zdGFyIE1TSSBCb3ggTVM2OTc4ICovCisJe1VTQl9ERVZJQ0UoMHgwZGIwLCAweDEwMjApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpfSwKKwkvKgorCSAqIGF0NzZjNTA1YS1yZm1kMjk1OAorCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDVBIGRldmljZSAqLworCXtVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjE0KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNUEpfSwKKwkvKiBHZW5lcmljIEFUNzZDNTA1QVMgZGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MTcpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1QSl9LAorCS8qIFNpZW1lbnMgR2lnYXNldCBVU0IgV0xBTiBBZGFwdGVyIDExICovCisJe1VTQl9ERVZJQ0UoMHgxNjkwLCAweDA3MDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1QSl9LAorCS8qCisJICogYXQ3NmM1MDVhbXgtcmZtZAorCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDVBTVggZGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MTUpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1QU1YKX0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZfdGFibGUpOworCisvKiBTdXBwb3J0ZWQgcmF0ZXMgb2YgdGhpcyBoYXJkd2FyZSwgYml0IDcgbWFya3MgYmFzaWMgcmF0ZXMgKi8KK3N0YXRpYyBjb25zdCB1OCBod19yYXRlc1tdID0geyAweDgyLCAweDg0LCAweDBiLCAweDE2IH07CisKKy8qIEZyZXF1ZW5jeSBvZiBlYWNoIGNoYW5uZWwgaW4gTUh6ICovCitzdGF0aWMgY29uc3QgbG9uZyBjaGFubmVsX2ZyZXF1ZW5jeVtdID0geworCTI0MTIsIDI0MTcsIDI0MjIsIDI0MjcsIDI0MzIsIDI0MzcsIDI0NDIsCisJMjQ0NywgMjQ1MiwgMjQ1NywgMjQ2MiwgMjQ2NywgMjQ3MiwgMjQ4NAorfTsKKworI2RlZmluZSBOVU1fQ0hBTk5FTFMgQVJSQVlfU0laRShjaGFubmVsX2ZyZXF1ZW5jeSkKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHByZWFtYmxlc1tdID0geyAibG9uZyIsICJzaG9ydCIsICJhdXRvIiB9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWFjX3N0YXRlc1tdID0geworCVtNQUNfSU5JVF0gPSAiSU5JVCIsCisJW01BQ19TQ0FOTklOR10gPSAiU0NBTk5JTkciLAorCVtNQUNfQVVUSF0gPSAiQVVUSCIsCisJW01BQ19BU1NPQ10gPSAiQVNTT0MiLAorCVtNQUNfSk9JTklOR10gPSAiSk9JTklORyIsCisJW01BQ19DT05ORUNURURdID0gIkNPTk5FQ1RFRCIsCisJW01BQ19PV05fSUJTU10gPSAiT1dOX0lCU1MiCit9OworCisvKiBGaXJtd2FyZSBkb3dubG9hZCAqLworLyogREZVIHN0YXRlcyAqLworI2RlZmluZSBTVEFURV9JRExFCQkJMHgwMAorI2RlZmluZSBTVEFURV9ERVRBQ0gJCQkweDAxCisjZGVmaW5lIFNUQVRFX0RGVV9JRExFCQkJMHgwMgorI2RlZmluZSBTVEFURV9ERlVfRE9XTkxPQURfU1lOQwkJMHgwMworI2RlZmluZSBTVEFURV9ERlVfRE9XTkxPQURfQlVTWQkJMHgwNAorI2RlZmluZSBTVEFURV9ERlVfRE9XTkxPQURfSURMRQkJMHgwNQorI2RlZmluZSBTVEFURV9ERlVfTUFOSUZFU1RfU1lOQwkJMHgwNgorI2RlZmluZSBTVEFURV9ERlVfTUFOSUZFU1QJCTB4MDcKKyNkZWZpbmUgU1RBVEVfREZVX01BTklGRVNUX1dBSVRfUkVTRVQJMHgwOAorI2RlZmluZSBTVEFURV9ERlVfVVBMT0FEX0lETEUJCTB4MDkKKyNkZWZpbmUgU1RBVEVfREZVX0VSUk9SCQkJMHgwYQorCisvKiBERlUgY29tbWFuZHMgKi8KKyNkZWZpbmUgREZVX0RFVEFDSAkJCTAKKyNkZWZpbmUgREZVX0ROTE9BRAkJCTEKKyNkZWZpbmUgREZVX1VQTE9BRAkJCTIKKyNkZWZpbmUgREZVX0dFVFNUQVRVUwkJCTMKKyNkZWZpbmUgREZVX0NMUlNUQVRVUwkJCTQKKyNkZWZpbmUgREZVX0dFVFNUQVRFCQkJNQorI2RlZmluZSBERlVfQUJPUlQJCQk2CisKKyNkZWZpbmUgRldfQkxPQ0tfU0laRSAxMDI0CisKK3N0cnVjdCBkZnVfc3RhdHVzIHsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwl1bnNpZ25lZCBjaGFyIHBvbGxfdGltZW91dFszXTsKKwl1bnNpZ25lZCBjaGFyIHN0YXRlOworCXVuc2lnbmVkIGNoYXIgc3RyaW5nOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9pc19pbnRlcnNpbChlbnVtIGJvYXJkX3R5cGUgYm9hcmQpCit7CisJcmV0dXJuIChib2FyZCA9PSBCT0FSRF81MDNfSVNMMzg2MSB8fCBib2FyZCA9PSBCT0FSRF81MDNfSVNMMzg2Myk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfaXNfNTAzcmZtZChlbnVtIGJvYXJkX3R5cGUgYm9hcmQpCit7CisJcmV0dXJuIChib2FyZCA9PSBCT0FSRF81MDMgfHwgYm9hcmQgPT0gQk9BUkRfNTAzX0FDQyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfaXNfNTA1YShlbnVtIGJvYXJkX3R5cGUgYm9hcmQpCit7CisJcmV0dXJuIChib2FyZCA9PSBCT0FSRF81MDVBIHx8IGJvYXJkID09IEJPQVJEXzUwNUFNWCk7Cit9CisKKy8qIExvYWQgYSBibG9jayBvZiB0aGUgZmlyc3QgKGludGVybmFsKSBwYXJ0IG9mIHRoZSBmaXJtd2FyZSAqLworc3RhdGljIGludCBhdDc2X2xvYWRfaW50X2Z3X2Jsb2NrKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgYmxvY2tubywKKwkJCQkgIHZvaWQgKmJsb2NrLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgREZVX0ROTE9BRCwKKwkJCSAgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwKKwkJCSAgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCBibG9ja25vLCAwLCBibG9jaywgc2l6ZSwKKwkJCSAgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9kZnVfZ2V0X3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGZ1X3N0YXR1cyAqc3RhdHVzKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCBERlVfR0VUU1RBVFVTLAorCQkJICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgIDAsIDAsIHN0YXR1cywgc2l6ZW9mKHN0cnVjdCBkZnVfc3RhdHVzKSwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTggYXQ3Nl9kZnVfZ2V0X3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCAqc3RhdGUpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIERGVV9HRVRTVEFURSwKKwkJCSAgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkgICAgICAwLCAwLCBzdGF0ZSwgMSwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCXJldHVybiByZXQ7Cit9CisKKy8qIENvbnZlcnQgdGltZW91dCBmcm9tIHRoZSBERlUgc3RhdHVzIHRvIGppZmZpZXMgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhdDc2X2dldF90aW1lb3V0KHN0cnVjdCBkZnVfc3RhdHVzICpzKQoreworCXJldHVybiBtc2Vjc190b19qaWZmaWVzKChzLT5wb2xsX3RpbWVvdXRbMl0gPDwgMTYpCisJCQkJfCAocy0+cG9sbF90aW1lb3V0WzFdIDw8IDgpCisJCQkJfCAocy0+cG9sbF90aW1lb3V0WzBdKSk7Cit9CisKKy8qIExvYWQgaW50ZXJuYWwgZmlybXdhcmUgZnJvbSB0aGUgYnVmZmVyLiAgSWYgbWFuaWZlc3Rfc3luY190aW1lb3V0ID4gMCwgdXNlCisgKiBpdHMgdmFsdWUgaW4gamlmZmllcyBpbiB0aGUgTUFOSUZFU1RfU1lOQyBzdGF0ZS4gICovCitzdGF0aWMgaW50IGF0NzZfdXNiZGZ1X2Rvd25sb2FkKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCAqYnVmLCB1MzIgc2l6ZSwKKwkJCQlpbnQgbWFuaWZlc3Rfc3luY190aW1lb3V0KQoreworCXU4ICpibG9jazsKKwlzdHJ1Y3QgZGZ1X3N0YXR1cyBkZnVfc3RhdF9idWY7CisJaW50IHJldCA9IDA7CisJaW50IG5lZWRfZGZ1X3N0YXRlID0gMTsKKwlpbnQgaXNfZG9uZSA9IDA7CisJdTggZGZ1X3N0YXRlID0gMDsKKwl1MzIgZGZ1X3RpbWVvdXQgPSAwOworCWludCBic2l6ZSA9IDA7CisJaW50IGJsb2Nrbm8gPSAwOworCisJYXQ3Nl9kYmcoREJHX0RGVSwgIiVzKCAlcCwgJXUsICVkKSIsIF9fZnVuY19fLCBidWYsIHNpemUsCisJCSBtYW5pZmVzdF9zeW5jX3RpbWVvdXQpOworCisJaWYgKCFzaXplKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsICJGVyBidWZmZXIgbGVuZ3RoIGludmFsaWQhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmxvY2sgPSBrbWFsbG9jKEZXX0JMT0NLX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYmxvY2spCisJCXJldHVybiAtRU5PTUVNOworCisJZG8geworCQlpZiAobmVlZF9kZnVfc3RhdGUpIHsKKwkJCXJldCA9IGF0NzZfZGZ1X2dldF9zdGF0ZSh1ZGV2LCAmZGZ1X3N0YXRlKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkJICAgImNhbm5vdCBnZXQgREZVIHN0YXRlOiAlZFxuIiwgcmV0KTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCQluZWVkX2RmdV9zdGF0ZSA9IDA7CisJCX0KKworCQlzd2l0Y2ggKGRmdV9zdGF0ZSkgeworCQljYXNlIFNUQVRFX0RGVV9ET1dOTE9BRF9TWU5DOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9ET1dOTE9BRF9TWU5DIik7CisJCQlyZXQgPSBhdDc2X2RmdV9nZXRfc3RhdHVzKHVkZXYsICZkZnVfc3RhdF9idWYpOworCQkJaWYgKHJldCA+PSAwKSB7CisJCQkJZGZ1X3N0YXRlID0gZGZ1X3N0YXRfYnVmLnN0YXRlOworCQkJCWRmdV90aW1lb3V0ID0gYXQ3Nl9nZXRfdGltZW91dCgmZGZ1X3N0YXRfYnVmKTsKKwkJCQluZWVkX2RmdV9zdGF0ZSA9IDA7CisJCQl9IGVsc2UKKwkJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJCQkgICAiYXQ3Nl9kZnVfZ2V0X3N0YXR1cyByZXR1cm5lZCAlZFxuIiwKKwkJCQkJICAgcmV0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX0RPV05MT0FEX0JVU1k6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX0RPV05MT0FEX0JVU1kiKTsKKwkJCW5lZWRfZGZ1X3N0YXRlID0gMTsKKworCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIkRGVTogUmVzZXR0aW5nIGRldmljZSIpOworCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKGRmdV90aW1lb3V0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX0RPV05MT0FEX0lETEU6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiRE9XTkxPQUQuLi4iKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFNUQVRFX0RGVV9JRExFOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIkRGVSBJRExFIik7CisKKwkJCWJzaXplID0gbWluX3QoaW50LCBzaXplLCBGV19CTE9DS19TSVpFKTsKKwkJCW1lbWNweShibG9jaywgYnVmLCBic2l6ZSk7CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiaW50IGZ3LCBzaXplIGxlZnQgPSAlNWQsICIKKwkJCQkgImJzaXplID0gJTRkLCBibG9ja25vID0gJTJkIiwgc2l6ZSwgYnNpemUsCisJCQkJIGJsb2Nrbm8pOworCQkJcmV0ID0KKwkJCSAgICBhdDc2X2xvYWRfaW50X2Z3X2Jsb2NrKHVkZXYsIGJsb2Nrbm8sIGJsb2NrLCBic2l6ZSk7CisJCQlidWYgKz0gYnNpemU7CisJCQlzaXplIC09IGJzaXplOworCQkJYmxvY2tubysrOworCisJCQlpZiAocmV0ICE9IGJzaXplKQorCQkJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkJCSAgICJhdDc2X2xvYWRfaW50X2Z3X2Jsb2NrICIKKwkJCQkJICAgInJldHVybmVkICVkXG4iLCByZXQpOworCQkJbmVlZF9kZnVfc3RhdGUgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfTUFOSUZFU1RfU1lOQzoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfTUFOSUZFU1RfU1lOQyIpOworCisJCQlyZXQgPSBhdDc2X2RmdV9nZXRfc3RhdHVzKHVkZXYsICZkZnVfc3RhdF9idWYpOworCQkJaWYgKHJldCA8IDApCisJCQkJYnJlYWs7CisKKwkJCWRmdV9zdGF0ZSA9IGRmdV9zdGF0X2J1Zi5zdGF0ZTsKKwkJCWRmdV90aW1lb3V0ID0gYXQ3Nl9nZXRfdGltZW91dCgmZGZ1X3N0YXRfYnVmKTsKKwkJCW5lZWRfZGZ1X3N0YXRlID0gMDsKKworCQkJLyogb3ZlcnJpZGUgdGhlIHRpbWVvdXQgZnJvbSB0aGUgc3RhdHVzIHJlc3BvbnNlLAorCQkJICAgbmVlZGVkIGZvciBBVDc2QzUwNUEgKi8KKwkJCWlmIChtYW5pZmVzdF9zeW5jX3RpbWVvdXQgPiAwKQorCQkJCWRmdV90aW1lb3V0ID0gbWFuaWZlc3Rfc3luY190aW1lb3V0OworCisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVOiBXYWl0aW5nIGZvciBtYW5pZmVzdCBwaGFzZSIpOworCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKGRmdV90aW1lb3V0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX01BTklGRVNUOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9NQU5JRkVTVCIpOworCQkJaXNfZG9uZSA9IDE7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9NQU5JRkVTVF9XQUlUX1JFU0VUOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9NQU5JRkVTVF9XQUlUX1JFU0VUIik7CisJCQlpc19kb25lID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX1VQTE9BRF9JRExFOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9VUExPQURfSURMRSIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfRVJST1I6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX0VSUk9SIik7CisJCQlyZXQgPSAtRVBJUEU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIkRGVSBVTktOT1dOIFNUQVRFICglZCkiLCBkZnVfc3RhdGUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoIWlzX2RvbmUgJiYgKHJldCA+PSAwKSk7CisKK2V4aXQ6CisJa2ZyZWUoYmxvY2spOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFJlcG9ydCB0aGF0IHRoZSBzY2FuIHJlc3VsdHMgYXJlIHJlYWR5ICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXQ3Nl9pd2V2ZW50X3NjYW5fY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJd3JxdS5kYXRhLmZsYWdzID0gMDsKKwl3aXJlbGVzc19zZW5kX2V2ZW50KG5ldGRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKKwlhdDc2X2RiZyhEQkdfV0VfRVZFTlRTLCAiJXM6IFNJT0NHSVdTQ0FOIHNlbnQiLCBuZXRkZXYtPm5hbWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXQ3Nl9pd2V2ZW50X2Jzc19jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJCSAgICB1OCAqYnNzaWQpCit7CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCXdycXUuZGF0YS5sZW5ndGggPSAwOworCXdycXUuZGF0YS5mbGFncyA9IDA7CisJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBic3NpZCwgRVRIX0FMRU4pOworCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJd2lyZWxlc3Nfc2VuZF9ldmVudChuZXRkZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCWF0NzZfZGJnKERCR19XRV9FVkVOVFMsICIlczogJXM6IFNJT0NHSVdBUCBzZW50IiwgbmV0ZGV2LT5uYW1lLAorCQkgX19mdW5jX18pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXQ3Nl9pd2V2ZW50X2Jzc19kaXNjb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCXdycXUuZGF0YS5sZW5ndGggPSAwOworCXdycXUuZGF0YS5mbGFncyA9IDA7CisJbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBFVEhfQUxFTik7CisJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwl3aXJlbGVzc19zZW5kX2V2ZW50KG5ldGRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisJYXQ3Nl9kYmcoREJHX1dFX0VWRU5UUywgIiVzOiAlczogU0lPQ0dJV0FQIHNlbnQiLCBuZXRkZXYtPm5hbWUsCisJCSBfX2Z1bmNfXyk7Cit9CisKKyNkZWZpbmUgSEVYMlNUUl9CVUZGRVJTIDQKKyNkZWZpbmUgSEVYMlNUUl9NQVhfTEVOIDY0CisjZGVmaW5lIEJJTjJIRVgoeCkgKCh4KSA8IDEwID8gJzAnICsgKHgpIDogKHgpICsgJ0EnIC0gMTApCisKKy8qIENvbnZlcnQgYmluYXJ5IGRhdGEgaW50byBoZXggc3RyaW5nICovCitzdGF0aWMgY2hhciAqaGV4MnN0cih2b2lkICpidWYsIGludCBsZW4pCit7CisJc3RhdGljIGF0b21pY190IGEgPSBBVE9NSUNfSU5JVCgwKTsKKwlzdGF0aWMgY2hhciBidWZzW0hFWDJTVFJfQlVGRkVSU11bMyAqIEhFWDJTVFJfTUFYX0xFTiArIDFdOworCWNoYXIgKnJldCA9IGJ1ZnNbYXRvbWljX2luY19yZXR1cm4oJmEpICYgKEhFWDJTVFJfQlVGRkVSUyAtIDEpXTsKKwljaGFyICpvYnVmID0gcmV0OworCXU4ICppYnVmID0gYnVmOworCisJaWYgKGxlbiA+IEhFWDJTVFJfTUFYX0xFTikKKwkJbGVuID0gSEVYMlNUUl9NQVhfTEVOOworCisJaWYgKGxlbiA8PSAwKSB7CisJCXJldFswXSA9ICdcMCc7CisJCXJldHVybiByZXQ7CisJfQorCisJd2hpbGUgKGxlbi0tKSB7CisJCSpvYnVmKysgPSBCSU4ySEVYKCppYnVmID4+IDQpOworCQkqb2J1ZisrID0gQklOMkhFWCgqaWJ1ZiAmIDB4Zik7CisJCSpvYnVmKysgPSAnLSc7CisJCWlidWYrKzsKKwl9CisJKigtLW9idWYpID0gJ1wwJzsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgTUFDMlNUUl9CVUZGRVJTIDQKKworc3RhdGljIGlubGluZSBjaGFyICptYWMyc3RyKHU4ICptYWMpCit7CisJc3RhdGljIGF0b21pY190IGEgPSBBVE9NSUNfSU5JVCgwKTsKKwlzdGF0aWMgY2hhciBidWZzW01BQzJTVFJfQlVGRkVSU11bNiAqIDNdOworCWNoYXIgKnN0cjsKKworCXN0ciA9IGJ1ZnNbYXRvbWljX2luY19yZXR1cm4oJmEpICYgKE1BQzJTVFJfQlVGRkVSUyAtIDEpXTsKKwlzcHJpbnRmKHN0ciwgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwKKwkJbWFjWzBdLCBtYWNbMV0sIG1hY1syXSwgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSk7CisJcmV0dXJuIHN0cjsKK30KKworLyogTEVEIHRyaWdnZXIgKi8KK3N0YXRpYyBpbnQgdHhfYWN0aXZpdHk7CitzdGF0aWMgdm9pZCBhdDc2X2xlZHRyaWdfdHhfdGltZXJmdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgREVGSU5FX1RJTUVSKGxlZHRyaWdfdHhfdGltZXIsIGF0NzZfbGVkdHJpZ190eF90aW1lcmZ1bmMsIDAsIDApOworREVGSU5FX0xFRF9UUklHR0VSKGxlZHRyaWdfdHgpOworCitzdGF0aWMgdm9pZCBhdDc2X2xlZHRyaWdfdHhfdGltZXJmdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdGF0aWMgaW50IHR4X2xhc3RhY3Rpdml0eTsKKworCWlmICh0eF9sYXN0YWN0aXZpdHkgIT0gdHhfYWN0aXZpdHkpIHsKKwkJdHhfbGFzdGFjdGl2aXR5ID0gdHhfYWN0aXZpdHk7CisJCWxlZF90cmlnZ2VyX2V2ZW50KGxlZHRyaWdfdHgsIExFRF9GVUxMKTsKKwkJbW9kX3RpbWVyKCZsZWR0cmlnX3R4X3RpbWVyLCBqaWZmaWVzICsgSFogLyA0KTsKKwl9IGVsc2UKKwkJbGVkX3RyaWdnZXJfZXZlbnQobGVkdHJpZ190eCwgTEVEX09GRik7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfbGVkdHJpZ190eF9hY3Rpdml0eSh2b2lkKQoreworCXR4X2FjdGl2aXR5Kys7CisJaWYgKCF0aW1lcl9wZW5kaW5nKCZsZWR0cmlnX3R4X3RpbWVyKSkKKwkJbW9kX3RpbWVyKCZsZWR0cmlnX3R4X3RpbWVyLCBqaWZmaWVzICsgSFogLyA0KTsKK30KKworLyogQ2hlY2sgaWYgdGhlIGdpdmVuIHNzaWQgaXMgaGlkZGVuICovCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2lzX2hpZGRlbl9zc2lkKHU4ICpzc2lkLCBpbnQgbGVuZ3RoKQoreworCXN0YXRpYyBjb25zdCB1OCB6ZXJvc1szMl07CisKKwlpZiAobGVuZ3RoID09IDApCisJCXJldHVybiAxOworCisJaWYgKGxlbmd0aCA9PSAxICYmIHNzaWRbMF0gPT0gJyAnKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAobWVtY21wKHNzaWQsIHplcm9zLCBsZW5ndGgpID09IDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXQ3Nl9mcmVlX2Jzc19saXN0KHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dCwgKnB0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrLCBmbGFncyk7CisKKwlwcml2LT5jdXJyX2JzcyA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocHRyLCBuZXh0LCAmcHJpdi0+YnNzX2xpc3QpIHsKKwkJbGlzdF9kZWwocHRyKTsKKwkJa2ZyZWUobGlzdF9lbnRyeShwdHIsIHN0cnVjdCBic3NfaW5mbywgbGlzdCkpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9yZW1hcChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgcmV0OworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MGEsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8CisJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCAwLCBOVUxMLCAwLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfZ2V0X29wX21vZGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IHJldDsKKwl1OCBvcF9tb2RlOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgMHgzMywKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfAorCQkJICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMHgwMSwgMCwgJm9wX21vZGUsIDEsCisJCQkgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZWxzZSBpZiAocmV0IDwgMSkKKwkJcmV0dXJuIC1FSU87CisJZWxzZQorCQlyZXR1cm4gb3BfbW9kZTsKK30KKworLyogTG9hZCBhIGJsb2NrIG9mIHRoZSBzZWNvbmQgKCJleHRlcm5hbCIpIHBhcnQgb2YgdGhlIGZpcm13YXJlICovCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2xvYWRfZXh0X2Z3X2Jsb2NrKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgYmxvY2tubywKKwkJCQkJIHZvaWQgKmJsb2NrLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwZSwKKwkJCSAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAgMHgwODAyLCBibG9ja25vLCBibG9jaywgc2l6ZSwKKwkJCSAgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfZ2V0X2h3X2NmZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkgIHVuaW9uIGF0NzZfaHdjZmcgKmJ1ZiwgaW50IGJ1Zl9zaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfAorCQkJICAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDB4MGEwMiwgMCwKKwkJCSAgICAgICBidWYsIGJ1Zl9zaXplLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Cit9CisKKy8qIEludGVyc2lsIGJvYXJkcyB1c2UgYSBkaWZmZXJlbnQgInZhbHVlIiBmb3IgR2V0SFdDb25maWcgcmVxdWVzdHMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfZ2V0X2h3X2NmZ19pbnRlcnNpbChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkJICAgdW5pb24gYXQ3Nl9od2NmZyAqYnVmLCBpbnQgYnVmX3NpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MzMsCisJCQkgICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMHgwOTAyLCAwLAorCQkJICAgICAgIGJ1ZiwgYnVmX3NpemUsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworLyogR2V0IHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGZvciB0aGUgYWRhcHRlciBhbmQgcHV0IGl0IHRvIHRoZSBhcHByb3ByaWF0ZQorICogZmllbGRzIG9mICdwcml2JyAodGhlIEdldEhXQ29uZmlnIHJlcXVlc3QgYW5kIGludGVycHJldGF0aW9uIG9mIHRoZSByZXN1bHQKKyAqIGRlcGVuZHMgb24gdGhlIGJvYXJkIHR5cGUpICovCitzdGF0aWMgaW50IGF0NzZfZ2V0X2h3X2NvbmZpZyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJdW5pb24gYXQ3Nl9od2NmZyAqaHdjZmcgPSBrbWFsbG9jKHNpemVvZigqaHdjZmcpLCBHRlBfS0VSTkVMKTsKKworCWlmICghaHdjZmcpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGF0NzZfaXNfaW50ZXJzaWwocHJpdi0+Ym9hcmRfdHlwZSkpIHsKKwkJcmV0ID0gYXQ3Nl9nZXRfaHdfY2ZnX2ludGVyc2lsKHByaXYtPnVkZXYsIGh3Y2ZnLAorCQkJCQkgICAgICAgc2l6ZW9mKGh3Y2ZnLT5pKSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBleGl0OworCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGh3Y2ZnLT5pLm1hY19hZGRyLCBFVEhfQUxFTik7CisJCXByaXYtPnJlZ3VsYXRvcnlfZG9tYWluID0gaHdjZmctPmkucmVndWxhdG9yeV9kb21haW47CisJfSBlbHNlIGlmIChhdDc2X2lzXzUwM3JmbWQocHJpdi0+Ym9hcmRfdHlwZSkpIHsKKwkJcmV0ID0gYXQ3Nl9nZXRfaHdfY2ZnKHByaXYtPnVkZXYsIGh3Y2ZnLCBzaXplb2YoaHdjZmctPnIzKSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBleGl0OworCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGh3Y2ZnLT5yMy5tYWNfYWRkciwgRVRIX0FMRU4pOworCQlwcml2LT5yZWd1bGF0b3J5X2RvbWFpbiA9IGh3Y2ZnLT5yMy5yZWd1bGF0b3J5X2RvbWFpbjsKKwl9IGVsc2UgeworCQlyZXQgPSBhdDc2X2dldF9od19jZmcocHJpdi0+dWRldiwgaHdjZmcsIHNpemVvZihod2NmZy0+cjUpKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGV4aXQ7CisJCW1lbWNweShwcml2LT5tYWNfYWRkciwgaHdjZmctPnI1Lm1hY19hZGRyLCBFVEhfQUxFTik7CisJCXByaXYtPnJlZ3VsYXRvcnlfZG9tYWluID0gaHdjZmctPnI1LnJlZ3VsYXRvcnlfZG9tYWluOworCX0KKworZXhpdDoKKwlrZnJlZShod2NmZyk7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBnZXQgSFcgQ29uZmlnIChlcnJvciAlZClcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHJlZ19kb21haW4gY29uc3QgKmF0NzZfZ2V0X3JlZ19kb21haW4odTE2IGNvZGUpCit7CisJaW50IGk7CisJc3RhdGljIHN0cnVjdCByZWdfZG9tYWluIGNvbnN0IGZkX3RhYltdID0geworCQl7MHgxMCwgIkZDQyAoVVNBKSIsIDB4N2ZmfSwJLyogY2ggMS0xMSAqLworCQl7MHgyMCwgIklDIChDYW5hZGEpIiwgMHg3ZmZ9LAkvKiBjaCAxLTExICovCisJCXsweDMwLCAiRVRTSSAobW9zdCBvZiBFdXJvcGUpIiwgMHgxZmZmfSwJLyogY2ggMS0xMyAqLworCQl7MHgzMSwgIlNwYWluIiwgMHg2MDB9LAkvKiBjaCAxMC0xMSAqLworCQl7MHgzMiwgIkZyYW5jZSIsIDB4MWUwMH0sCS8qIGNoIDEwLTEzICovCisJCXsweDQwLCAiTUtLIChKYXBhbikiLCAweDIwMDB9LAkvKiBjaCAxNCAqLworCQl7MHg0MSwgIk1LSzEgKEphcGFuKSIsIDB4M2ZmZn0sCS8qIGNoIDEtMTQgKi8KKwkJezB4NTAsICJJc3JhZWwiLCAweDNmY30sCS8qIGNoIDMtOSAqLworCQl7MHgwMCwgIjx1bmtub3duPiIsIDB4ZmZmZmZmZmZ9CS8qIGNoIDEtMzIgKi8KKwl9OworCisJLyogTGFzdCBlbnRyeSBpcyBmYWxsYmFjayBmb3IgdW5rbm93biBkb21haW4gY29kZSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZkX3RhYikgLSAxOyBpKyspCisJCWlmIChjb2RlID09IGZkX3RhYltpXS5jb2RlKQorCQkJYnJlYWs7CisKKwlyZXR1cm4gJmZkX3RhYltpXTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9nZXRfbWliKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1MTYgbWliLCB2b2lkICpidWYsCisJCQkgICAgICAgaW50IGJ1Zl9zaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCBtaWIgPDwgOCwgMCwgYnVmLCBidWZfc2l6ZSwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0ID49IDAgJiYgcmV0ICE9IGJ1Zl9zaXplKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZXR1cm4gcG9zaXRpdmUgbnVtYmVyIGZvciBzdGF0dXMsIG5lZ2F0aXZlIGZvciBhbiBlcnJvciAqLworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9nZXRfY21kX3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTggY21kKQoreworCXU4IHN0YXRfYnVmWzQwXTsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgMHgyMiwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfAorCQkJICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgY21kLCAwLCBzdGF0X2J1ZiwKKwkJCSAgICAgIHNpemVvZihzdGF0X2J1ZiksIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzdGF0X2J1Zls1XTsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9jYXJkX2NvbW1hbmQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBjbWQsIHZvaWQgKmJ1ZiwKKwkJCQkgaW50IGJ1Zl9zaXplKQoreworCWludCByZXQ7CisJc3RydWN0IGF0NzZfY29tbWFuZCAqY21kX2J1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdDc2X2NvbW1hbmQpICsKKwkJCQkJICAgICAgIGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKworCWlmICghY21kX2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWRfYnVmLT5jbWQgPSBjbWQ7CisJY21kX2J1Zi0+cmVzZXJ2ZWQgPSAwOworCWNtZF9idWYtPnNpemUgPSBjcHVfdG9fbGUxNihidWZfc2l6ZSk7CisJbWVtY3B5KGNtZF9idWYtPmRhdGEsIGJ1ZiwgYnVmX3NpemUpOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwZSwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIDAsIDAsIGNtZF9idWYsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGF0NzZfY29tbWFuZCkgKyBidWZfc2l6ZSwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlrZnJlZShjbWRfYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIE1BS0VfQ01EX1NUQVRVU19DQVNFKGMpCWNhc2UgKGMpOiByZXR1cm4gI2MKK3N0YXRpYyBjb25zdCBjaGFyICphdDc2X2dldF9jbWRfc3RhdHVzX3N0cmluZyh1OCBjbWRfc3RhdHVzKQoreworCXN3aXRjaCAoY21kX3N0YXR1cykgeworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0lETEUpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0NPTVBMRVRFKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19VTktOT1dOKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUik7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfRlVOQ1RJT05fTk9UX1NVUFBPUlRFRCk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfVElNRV9PVVQpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0lOX1BST0dSRVNTKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19IT1NUX0ZBSUxVUkUpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX1NDQU5fRkFJTEVEKTsKKwl9CisKKwlyZXR1cm4gIlVOS05PV04iOworfQorCisvKiBXYWl0IHVudGlsIHRoZSBjb21tYW5kIGlzIGNvbXBsZXRlZCAqLworc3RhdGljIGludCBhdDc2X3dhaXRfY29tcGxldGlvbihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBpbnQgY21kKQoreworCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBDTURfQ09NUExFVElPTl9USU1FT1VUOworCisJZG8geworCQlzdGF0dXMgPSBhdDc2X2dldF9jbWRfc3RhdHVzKHByaXYtPnVkZXYsIGNtZCk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9jbWRfc3RhdHVzIGZhaWxlZDogJWRcbiIsCisJCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJYnJlYWs7CisJCX0KKworCQlhdDc2X2RiZyhEQkdfV0FJVF9DT01QTEVURSwKKwkJCSAiJXM6IFdhaXRpbmcgb24gY21kICVkLCBzdGF0dXMgPSAlZCAoJXMpIiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGNtZCwgc3RhdHVzLAorCQkJIGF0NzZfZ2V0X2NtZF9zdGF0dXNfc3RyaW5nKHN0YXR1cykpOworCisJCWlmIChzdGF0dXMgIT0gQ01EX1NUQVRVU19JTl9QUk9HUkVTUworCQkgICAgJiYgc3RhdHVzICE9IENNRF9TVEFUVVNfSURMRSkKKwkJCWJyZWFrOworCisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWiAvIDEwKTsJLyogMTAwIG1zICovCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IGNvbXBsZXRpb24gdGltZW91dCBmb3IgY29tbWFuZCAlZFxuIiwKKwkJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIGNtZCk7CisJCQlzdGF0dXMgPSAtRVRJTUVET1VUOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICgxKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfbWliKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBzZXRfbWliX2J1ZmZlciAqYnVmKQoreworCWludCByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX1NFVF9NSUIsIGJ1ZiwKKwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IHNldF9taWJfYnVmZmVyLAorCQkJCQkgICAgIGRhdGEpICsgYnVmLT5zaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9TRVRfTUlCKTsKKwlpZiAocmV0ICE9IENNRF9TVEFUVVNfQ09NUExFVEUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIiVzOiBzZXRfbWliOiBhdDc2X3dhaXRfY29tcGxldGlvbiBmYWlsZWQgIgorCQkgICAgICAgIndpdGggJWRcbiIsIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZXR1cm4gPCAwIG9uIGVycm9yLCA9PSAwIGlmIG5vIGNvbW1hbmQgc2VudCwgPT0gMSBpZiBjbWQgc2VudCAqLworc3RhdGljIGludCBhdDc2X3NldF9yYWRpbyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBpbnQgZW5hYmxlKQoreworCWludCByZXQ7CisJaW50IGNtZDsKKworCWlmIChwcml2LT5yYWRpb19vbiA9PSBlbmFibGUpCisJCXJldHVybiAwOworCisJY21kID0gZW5hYmxlID8gQ01EX1JBRElPX09OIDogQ01EX1JBRElPX09GRjsKKworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBjbWQsIE5VTEwsIDApOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X3NldF9jYXJkX2NvbW1hbmQoJWQpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIGNtZCwgcmV0KTsKKwllbHNlCisJCXJldCA9IDE7CisKKwlwcml2LT5yYWRpb19vbiA9IGVuYWJsZTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBTZXQgY3VycmVudCBwb3dlciBzYXZlIG1vZGUgKEFUNzZfUE1fT0ZGL0FUNzZfUE1fT04vQVQ3Nl9QTV9TTUFSVCkgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfcG1fbW9kZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX01BQ19NR01UOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbWFjX21nbXQsIHBvd2VyX21nbXRfbW9kZSk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLmJ5dGUgPSBwcml2LT5wbV9tb2RlOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAocG1fbW9kZSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFNldCB0aGUgYXNzb2NpYXRpb24gaWQgZm9yIHBvd2VyIHNhdmUgbW9kZSAqLworc3RhdGljIGludCBhdDc2X3NldF9hc3NvY2lkKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHUxNiBpZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUNfTUdNVDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAyOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX21hY19tZ210LCBzdGF0aW9uX2lkKTsKKwlwcml2LT5taWJfYnVmLmRhdGEud29yZCA9IGNwdV90b19sZTE2KGlkKTsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKGFzc29jaWQpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBTZXQgdGhlIGxpc3RlbiBpbnRlcnZhbCBmb3IgcG93ZXIgc2F2ZSBtb2RlICovCitzdGF0aWMgaW50IGF0NzZfc2V0X2xpc3Rlbl9pbnRlcnZhbChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCB1MTYgaW50ZXJ2YWwpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTUFDOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDI7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbWFjLCBsaXN0ZW5faW50ZXJ2YWwpOworCXByaXYtPm1pYl9idWYuZGF0YS53b3JkID0gY3B1X3RvX2xlMTYoaW50ZXJ2YWwpOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IHNldF9taWIgKGxpc3Rlbl9pbnRlcnZhbCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfcHJlYW1ibGUoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgdTggdHlwZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9MT0NBTDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX2xvY2FsLCBwcmVhbWJsZV90eXBlKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IHR5cGU7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChwcmVhbWJsZSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfZnJhZyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCB1MTYgc2l6ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUM7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMjsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWMsIGZyYWdfdGhyZXNob2xkKTsKKwlwcml2LT5taWJfYnVmLmRhdGEud29yZCA9IGNwdV90b19sZTE2KHNpemUpOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAoZnJhZyB0aHJlc2hvbGQpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X3J0cyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCB1MTYgc2l6ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUM7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMjsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWMsIHJ0c190aHJlc2hvbGQpOworCXByaXYtPm1pYl9idWYuZGF0YS53b3JkID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChydHMpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X2F1dG9yYXRlX2ZhbGxiYWNrKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIGludCBvbm9mZikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9MT0NBTDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX2xvY2FsLCB0eGF1dG9yYXRlX2ZhbGxiYWNrKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IG9ub2ZmOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAoYXV0b3JhdGUgZmFsbGJhY2spIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfYWRkX21hY19hZGRyZXNzKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHZvaWQgKmFkZHIpCit7CisJaW50IHJldCA9IDA7CisKKwlwcml2LT5taWJfYnVmLnR5cGUgPSBNSUJfTUFDX0FERFI7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gRVRIX0FMRU47CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbWFjX2FkZHIsIG1hY19hZGRyKTsKKwltZW1jcHkocHJpdi0+bWliX2J1Zi5kYXRhLmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKE1BQ19BRERSLCBtYWNfYWRkcikgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWFjX2FkZHIoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfbWFjX2FkZHIgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX21hY19hZGRyKSwKKwkJCQkJIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQ19BRERSLCBtLAorCQkJICAgc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX2FkZHIpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1BQ19BRERSKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX0FERFI6IG1hY19hZGRyICVzIHJlcyAweCV4IDB4JXgiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgbWFjMnN0cihtLT5tYWNfYWRkciksIG0tPnJlc1swXSwgbS0+cmVzWzFdKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtLT5ncm91cF9hZGRyKTsgaSsrKQorCQlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNQUNfQUREUjogZ3JvdXAgYWRkciAlZDogJXMsICIKKwkJCSAic3RhdHVzICVkIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLCBpLAorCQkJIG1hYzJzdHIobS0+Z3JvdXBfYWRkcltpXSksIG0tPmdyb3VwX2FkZHJfc3RhdHVzW2ldKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWFjX3dlcChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCBpOworCWludCByZXQ7CisJaW50IGtleV9sZW47CisJc3RydWN0IG1pYl9tYWNfd2VwICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tYWNfd2VwKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTUFDX1dFUCwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21hY193ZXApKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1BQ19XRVApIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNQUNfV0VQOiBwcml2X2ludm9rZWQgJXUgZGVmX2tleV9pZCAldSAiCisJCSAia2V5X2xlbiAldSBleGNsX3VuZW5jciAldSB3ZXBfaWN2X2VyciAldSB3ZXBfZXhjbHVkZWQgJXUgIgorCQkgImVuY3JfbGV2ZWwgJXUga2V5ICVkIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgbS0+cHJpdmFjeV9pbnZva2VkLCBtLT53ZXBfZGVmYXVsdF9rZXlfaWQsCisJCSBtLT53ZXBfa2V5X21hcHBpbmdfbGVuLCBtLT5leGNsdWRlX3VuZW5jcnlwdGVkLAorCQkgbGUzMl90b19jcHUobS0+d2VwX2ljdl9lcnJvcl9jb3VudCksCisJCSBsZTMyX3RvX2NwdShtLT53ZXBfZXhjbHVkZWRfY291bnQpLCBtLT5lbmNyeXB0aW9uX2xldmVsLAorCQkgbS0+d2VwX2RlZmF1bHRfa2V5X2lkKTsKKworCWtleV9sZW4gPSAobS0+ZW5jcnlwdGlvbl9sZXZlbCA9PSAxKSA/CisJICAgIFdFUF9TTUFMTF9LRVlfTEVOIDogV0VQX0xBUkdFX0tFWV9MRU47CisKKwlmb3IgKGkgPSAwOyBpIDwgV0VQX0tFWVM7IGkrKykKKwkJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX1dFUDoga2V5ICVkOiAlcyIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBpLAorCQkJIGhleDJzdHIobS0+d2VwX2RlZmF1bHRfa2V5dmFsdWVbaV0sIGtleV9sZW4pKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWFjX21nbXQoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfbWFjX21nbXQgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX21hY19tZ210KSwKKwkJCQkJIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQ19NR01ULCBtLAorCQkJICAgc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX21nbXQpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1BQ19NR01UKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX01HTVQ6IGJlYWNvbl9wZXJpb2QgJWQgQ0ZQX21heF9kdXJhdGlvbiAiCisJCSAiJWQgbWVkaXVtX29jY3VwYW5jeV9saW1pdCAlZCBzdGF0aW9uX2lkIDB4JXggQVRJTV93aW5kb3cgJWQgIgorCQkgIkNGUF9tb2RlICVkIHByaXZhY3lfb3B0X2ltcGwgJWQgRFRJTV9wZXJpb2QgJWQgQ0ZQX3BlcmlvZCAlZCAiCisJCSAiY3VycmVudF9ic3NpZCAlcyBjdXJyZW50X2Vzc2lkICVzIGN1cnJlbnRfYnNzX3R5cGUgJWQgIgorCQkgInBtX21vZGUgJWQgaWJzc19jaGFuZ2UgJWQgcmVzICVkICIKKwkJICJtdWx0aV9kb21haW5fY2FwYWJpbGl0eV9pbXBsZW1lbnRlZCAlZCAiCisJCSAiaW50ZXJuYXRpb25hbF9yb2FtaW5nICVkIGNvdW50cnlfc3RyaW5nICUuM3MiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBsZTE2X3RvX2NwdShtLT5iZWFjb25fcGVyaW9kKSwKKwkJIGxlMTZfdG9fY3B1KG0tPkNGUF9tYXhfZHVyYXRpb24pLAorCQkgbGUxNl90b19jcHUobS0+bWVkaXVtX29jY3VwYW5jeV9saW1pdCksCisJCSBsZTE2X3RvX2NwdShtLT5zdGF0aW9uX2lkKSwgbGUxNl90b19jcHUobS0+QVRJTV93aW5kb3cpLAorCQkgbS0+Q0ZQX21vZGUsIG0tPnByaXZhY3lfb3B0aW9uX2ltcGxlbWVudGVkLCBtLT5EVElNX3BlcmlvZCwKKwkJIG0tPkNGUF9wZXJpb2QsIG1hYzJzdHIobS0+Y3VycmVudF9ic3NpZCksCisJCSBoZXgyc3RyKG0tPmN1cnJlbnRfZXNzaWQsIElXX0VTU0lEX01BWF9TSVpFKSwKKwkJIG0tPmN1cnJlbnRfYnNzX3R5cGUsIG0tPnBvd2VyX21nbXRfbW9kZSwgbS0+aWJzc19jaGFuZ2UsCisJCSBtLT5yZXMsIG0tPm11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2ltcGxlbWVudGVkLAorCQkgbS0+bXVsdGlfZG9tYWluX2NhcGFiaWxpdHlfZW5hYmxlZCwgbS0+Y291bnRyeV9zdHJpbmcpOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9tYWMoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfbWFjICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tYWMpLCBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUMsIG0sIHNpemVvZihzdHJ1Y3QgbWliX21hYykpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTUFDKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDOiBtYXhfdHhfbXNkdV9saWZldGltZSAlZCAiCisJCSAibWF4X3J4X2xpZmV0aW1lICVkIGZyYWdfdGhyZXNob2xkICVkIHJ0c190aHJlc2hvbGQgJWQgIgorCQkgImN3bWluICVkIGN3bWF4ICVkIHNob3J0X3JldHJ5X3RpbWUgJWQgbG9uZ19yZXRyeV90aW1lICVkICIKKwkJICJzY2FuX3R5cGUgJWQgc2Nhbl9jaGFubmVsICVkIHByb2JlX2RlbGF5ICV1ICIKKwkJICJtaW5fY2hhbm5lbF90aW1lICVkIG1heF9jaGFubmVsX3RpbWUgJWQgbGlzdGVuX2ludCAlZCAiCisJCSAiZGVzaXJlZF9zc2lkICVzIGRlc2lyZWRfYnNzaWQgJXMgZGVzaXJlZF9ic3N0eXBlICVkIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgbGUzMl90b19jcHUobS0+bWF4X3R4X21zZHVfbGlmZXRpbWUpLAorCQkgbGUzMl90b19jcHUobS0+bWF4X3J4X2xpZmV0aW1lKSwKKwkJIGxlMTZfdG9fY3B1KG0tPmZyYWdfdGhyZXNob2xkKSwgbGUxNl90b19jcHUobS0+cnRzX3RocmVzaG9sZCksCisJCSBsZTE2X3RvX2NwdShtLT5jd21pbiksIGxlMTZfdG9fY3B1KG0tPmN3bWF4KSwKKwkJIG0tPnNob3J0X3JldHJ5X3RpbWUsIG0tPmxvbmdfcmV0cnlfdGltZSwgbS0+c2Nhbl90eXBlLAorCQkgbS0+c2Nhbl9jaGFubmVsLCBsZTE2X3RvX2NwdShtLT5wcm9iZV9kZWxheSksCisJCSBsZTE2X3RvX2NwdShtLT5taW5fY2hhbm5lbF90aW1lKSwKKwkJIGxlMTZfdG9fY3B1KG0tPm1heF9jaGFubmVsX3RpbWUpLAorCQkgbGUxNl90b19jcHUobS0+bGlzdGVuX2ludGVydmFsKSwKKwkJIGhleDJzdHIobS0+ZGVzaXJlZF9zc2lkLCBJV19FU1NJRF9NQVhfU0laRSksCisJCSBtYWMyc3RyKG0tPmRlc2lyZWRfYnNzaWQpLCBtLT5kZXNpcmVkX2Jzc3R5cGUpOworZXhpdDoKKwlrZnJlZShtKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kdW1wX21pYl9waHkoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfcGh5ICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9waHkpLCBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9QSFksIG0sIHNpemVvZihzdHJ1Y3QgbWliX3BoeSkpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoUEhZKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgUEhZOiBlZF90aHJlc2hvbGQgJWQgc2xvdF90aW1lICVkICIKKwkJICJzaWZzX3RpbWUgJWQgcHJlYW1ibGVfbGVuZ3RoICVkIHBsY3BfaGVhZGVyX2xlbmd0aCAlZCAiCisJCSAibXBkdV9tYXhfbGVuZ3RoICVkIGNjYV9tb2RlX3N1cHBvcnRlZCAlZCBvcGVyYXRpb25fcmF0ZV9zZXQgIgorCQkgIjB4JXggMHgleCAweCV4IDB4JXggY2hhbm5lbF9pZCAlZCBjdXJyZW50X2NjYV9tb2RlICVkICIKKwkJICJwaHlfdHlwZSAlZCBjdXJyZW50X3JlZ19kb21haW4gJWQiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBsZTMyX3RvX2NwdShtLT5lZF90aHJlc2hvbGQpLAorCQkgbGUxNl90b19jcHUobS0+c2xvdF90aW1lKSwgbGUxNl90b19jcHUobS0+c2lmc190aW1lKSwKKwkJIGxlMTZfdG9fY3B1KG0tPnByZWFtYmxlX2xlbmd0aCksCisJCSBsZTE2X3RvX2NwdShtLT5wbGNwX2hlYWRlcl9sZW5ndGgpLAorCQkgbGUxNl90b19jcHUobS0+bXBkdV9tYXhfbGVuZ3RoKSwKKwkJIGxlMTZfdG9fY3B1KG0tPmNjYV9tb2RlX3N1cHBvcnRlZCksIG0tPm9wZXJhdGlvbl9yYXRlX3NldFswXSwKKwkJIG0tPm9wZXJhdGlvbl9yYXRlX3NldFsxXSwgbS0+b3BlcmF0aW9uX3JhdGVfc2V0WzJdLAorCQkgbS0+b3BlcmF0aW9uX3JhdGVfc2V0WzNdLCBtLT5jaGFubmVsX2lkLCBtLT5jdXJyZW50X2NjYV9tb2RlLAorCQkgbS0+cGh5X3R5cGUsIG0tPmN1cnJlbnRfcmVnX2RvbWFpbik7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX2xvY2FsKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX2xvY2FsICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9waHkpLCBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9MT0NBTCwgbSwgc2l6ZW9mKHN0cnVjdCBtaWJfbG9jYWwpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKExPQ0FMKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTE9DQUw6IGJlYWNvbl9lbmFibGUgJWQgIgorCQkgInR4YXV0b3JhdGVfZmFsbGJhY2sgJWQgc3NpZF9zaXplICVkIHByb21pc2N1b3VzX21vZGUgJWQgIgorCQkgInByZWFtYmxlX3R5cGUgJWQiLCBwcml2LT5uZXRkZXYtPm5hbWUsIG0tPmJlYWNvbl9lbmFibGUsCisJCSBtLT50eGF1dG9yYXRlX2ZhbGxiYWNrLCBtLT5zc2lkX3NpemUsIG0tPnByb21pc2N1b3VzX21vZGUsCisJCSBtLT5wcmVhbWJsZV90eXBlKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWRvbWFpbihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9tZG9tYWluICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tZG9tYWluKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTURPTUFJTiwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21kb21haW4pKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1ET01BSU4pIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNRE9NQUlOOiBjaGFubmVsX2xpc3QgJXMiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgaGV4MnN0cihtLT5jaGFubmVsX2xpc3QsIHNpemVvZihtLT5jaGFubmVsX2xpc3QpKSk7CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNRE9NQUlOOiB0eF9wb3dlcmxldmVsICVzIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIGhleDJzdHIobS0+dHhfcG93ZXJsZXZlbCwgc2l6ZW9mKG0tPnR4X3Bvd2VybGV2ZWwpKSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgaW50IGF0NzZfZ2V0X2N1cnJlbnRfYnNzaWQoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbWliX21hY19tZ210ICptYWNfbWdtdCA9CisJICAgIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX21nbXQpLCBHRlBfS0VSTkVMKTsKKworCWlmICghbWFjX21nbXQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTUFDX01HTVQsIG1hY19tZ210LAorCQkJICAgc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX21nbXQpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJZ290byBlcnJvcjsKKwl9CisJbWVtY3B5KHByaXYtPmJzc2lkLCBtYWNfbWdtdC0+Y3VycmVudF9ic3NpZCwgRVRIX0FMRU4pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiB1c2luZyBCU1NJRCAlc1xuIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCSAgICAgICBtYWMyc3RyKHByaXYtPmJzc2lkKSk7CitlcnJvcjoKKwlrZnJlZShtYWNfbWdtdCk7CitleGl0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9nZXRfY3VycmVudF9jaGFubmVsKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG1pYl9waHkgKnBoeSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfcGh5KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXBoeSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfUEhZLCBwaHksIHNpemVvZihzdHJ1Y3QgbWliX3BoeSkpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYihNSUJfUEhZKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlnb3RvIGVycm9yOworCX0KKwlwcml2LT5jaGFubmVsID0gcGh5LT5jaGFubmVsX2lkOworZXJyb3I6CisJa2ZyZWUocGh5KTsKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBhdDc2X3N0YXJ0X3NjYW4gLSBzdGFydCBhIHNjYW4KKyAqCisgKiBAdXNlX2Vzc2lkIC0gdXNlIHRoZSBjb25maWd1cmVkIEVTU0lEIGluIG5vbiBwYXNzaXZlIG1vZGUKKyAqLworc3RhdGljIGludCBhdDc2X3N0YXJ0X3NjYW4oc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgaW50IHVzZV9lc3NpZCkKK3sKKwlzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbiBzY2FuOworCisJbWVtc2V0KCZzY2FuLCAwLCBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX3NjYW4pKTsKKwltZW1zZXQoc2Nhbi5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOworCisJaWYgKHVzZV9lc3NpZCkgeworCQltZW1jcHkoc2Nhbi5lc3NpZCwgcHJpdi0+ZXNzaWQsIElXX0VTU0lEX01BWF9TSVpFKTsKKwkJc2Nhbi5lc3NpZF9zaXplID0gcHJpdi0+ZXNzaWRfc2l6ZTsKKwl9IGVsc2UKKwkJc2Nhbi5lc3NpZF9zaXplID0gMDsKKworCS8qIGphbDogd2h5IHNob3VsZCB3ZSBzdGFydCBhdCBhIGNlcnRhaW4gY2hhbm5lbD8gd2UgZG8gc2NhbiB0aGUgd2hvbGUKKwkgICByYW5nZSBhbGxvd2VkIGJ5IHJlZyBkb21haW4uICovCisJc2Nhbi5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKKworCS8qIGF0bWVsd2xhbmRyaXZlciBkaWZmZXJzIGJldHdlZW4gc2NhbiB0eXBlIDAgYW5kIDEgKGFjdGl2ZS9wYXNzaXZlKQorCSAgIEZvciBhZC1ob2MgbW9kZSwgaXQgdXNlcyB0eXBlIDAgb25seS4gKi8KKwlzY2FuLnNjYW5fdHlwZSA9IHByaXYtPnNjYW5fbW9kZTsKKworCS8qIElORk86IEZvciBwcm9iZV9kZWxheSwgbm90IG11bHRpcGx5aW5nIGJ5IDEwMjQgYXMgdGhpcyB3aWxsIGJlCisJICAgc2xpZ2h0bHkgbGVzcyB0aGFuIG1pbl9jaGFubmVsX3RpbWUKKwkgICAocGVyIHNwZWM6IHByb2JlIGRlbGF5IDwgbWluLiBjaGFubmVsIHRpbWUpICovCisJc2Nhbi5taW5fY2hhbm5lbF90aW1lID0gY3B1X3RvX2xlMTYocHJpdi0+c2Nhbl9taW5fdGltZSk7CisJc2Nhbi5tYXhfY2hhbm5lbF90aW1lID0gY3B1X3RvX2xlMTYocHJpdi0+c2Nhbl9tYXhfdGltZSk7CisJc2Nhbi5wcm9iZV9kZWxheSA9IGNwdV90b19sZTE2KHByaXYtPnNjYW5fbWluX3RpbWUgKiAxMDAwKTsKKwlzY2FuLmludGVybmF0aW9uYWxfc2NhbiA9IDA7CisKKwkvKiBvdGhlciB2YWx1ZXMgYXJlIHNldCB0byAwIGZvciB0eXBlIDAgKi8KKworCWF0NzZfZGJnKERCR19QUk9HUkVTUywgIiVzOiBzdGFydF9zY2FuICh1c2VfZXNzaWQgPSAlZCwgaW50bCA9ICVkLCAiCisJCSAiY2hhbm5lbCA9ICVkLCBwcm9iZV9kZWxheSA9ICVkLCBzY2FuX21pbl90aW1lID0gJWQsICIKKwkJICJzY2FuX21heF90aW1lID0gJWQpIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgdXNlX2Vzc2lkLAorCQkgc2Nhbi5pbnRlcm5hdGlvbmFsX3NjYW4sIHNjYW4uY2hhbm5lbCwKKwkJIGxlMTZfdG9fY3B1KHNjYW4ucHJvYmVfZGVsYXkpLAorCQkgbGUxNl90b19jcHUoc2Nhbi5taW5fY2hhbm5lbF90aW1lKSwKKwkJIGxlMTZfdG9fY3B1KHNjYW4ubWF4X2NoYW5uZWxfdGltZSkpOworCisJcmV0dXJuIGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfU0NBTiwgJnNjYW4sIHNpemVvZihzY2FuKSk7Cit9CisKKy8qIEVuYWJsZSBtb25pdG9yIG1vZGUgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9zdGFydF9tb25pdG9yKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJc3RydWN0IGF0NzZfcmVxX3NjYW4gc2NhbjsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZzY2FuLCAwLCBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX3NjYW4pKTsKKwltZW1zZXQoc2Nhbi5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOworCisJc2Nhbi5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKKwlzY2FuLnNjYW5fdHlwZSA9IFNDQU5fVFlQRV9QQVNTSVZFOworCXNjYW4uaW50ZXJuYXRpb25hbF9zY2FuID0gMDsKKworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfU0NBTiwgJnNjYW4sIHNpemVvZihzY2FuKSk7CisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSBhdDc2X2dldF9jbWRfc3RhdHVzKHByaXYtPnVkZXYsIENNRF9TQ0FOKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zdGFydF9pYnNzKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJc3RydWN0IGF0NzZfcmVxX2lic3MgYnNzOworCWludCByZXQ7CisKKwlXQVJOX09OKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfT1dOX0lCU1MpOworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX09XTl9JQlNTKQorCQlyZXR1cm4gLUVCVVNZOworCisJbWVtc2V0KCZic3MsIDAsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfaWJzcykpOworCW1lbXNldChic3MuYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKKwltZW1jcHkoYnNzLmVzc2lkLCBwcml2LT5lc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpOworCWJzcy5lc3NpZF9zaXplID0gcHJpdi0+ZXNzaWRfc2l6ZTsKKwlic3MuYnNzX3R5cGUgPSBBREhPQ19NT0RFOworCWJzcy5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKKworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfU1RBUlRfSUJTUywgJmJzcywKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBhdDc2X3JlcV9pYnNzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc3RhcnRfaWJzcyBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9TVEFSVF9JQlNTKTsKKwlpZiAocmV0ICE9IENNRF9TVEFUVVNfQ09NUExFVEUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc3RhcnRfaWJzcyBmYWlsZWQgdG8gY29tcGxldGUsICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGF0NzZfZ2V0X2N1cnJlbnRfYnNzaWQocHJpdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhdDc2X2dldF9jdXJyZW50X2NoYW5uZWwocHJpdik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBub3Qgc3VyZSB3aGF0IHRoaXMgaXMgZ29vZCBmb3IgPz8/ICovCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX01BQ19NR01UOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbWFjX21nbXQsIGlic3NfY2hhbmdlKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IDA7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKGlic3MgY2hhbmdlIG9rKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+bmV0ZGV2KTsKKwluZXRpZl9zdGFydF9xdWV1ZShwcml2LT5uZXRkZXYpOworCXJldHVybiAwOworfQorCisvKiBSZXF1ZXN0IGNhcmQgdG8gam9pbiBCU1MgaW4gbWFuYWdlZCBvciBhZC1ob2MgbW9kZSAqLworc3RhdGljIGludCBhdDc2X2pvaW5fYnNzKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBic3NfaW5mbyAqcHRyKQoreworCXN0cnVjdCBhdDc2X3JlcV9qb2luIGpvaW47CisKKwlCVUdfT04oIXB0cik7CisKKwltZW1zZXQoJmpvaW4sIDAsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfam9pbikpOworCW1lbWNweShqb2luLmJzc2lkLCBwdHItPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KGpvaW4uZXNzaWQsIHB0ci0+c3NpZCwgcHRyLT5zc2lkX2xlbik7CisJam9pbi5lc3NpZF9zaXplID0gcHRyLT5zc2lkX2xlbjsKKwlqb2luLmJzc190eXBlID0gKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQyA/IDEgOiAyKTsKKwlqb2luLmNoYW5uZWwgPSBwdHItPmNoYW5uZWw7CisJam9pbi50aW1lb3V0ID0gY3B1X3RvX2xlMTYoMjAwMCk7CisKKwlhdDc2X2RiZyhEQkdfUFJPR1JFU1MsCisJCSAiJXMgam9pbiBhZGRyICVzIHNzaWQgJXMgdHlwZSAlZCBjaCAlZCB0aW1lb3V0ICVkIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjMnN0cihqb2luLmJzc2lkKSwgam9pbi5lc3NpZCwKKwkJIGpvaW4uYnNzX3R5cGUsIGpvaW4uY2hhbm5lbCwgbGUxNl90b19jcHUoam9pbi50aW1lb3V0KSk7CisJcmV0dXJuIGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfSk9JTiwgJmpvaW4sCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX2pvaW4pKTsKK30KKworLyogQ2FsY3VsYXRlIHBhZGRpbmcgZnJvbSB0eGJ1Zi0+d2xlbmd0aCAod2hpY2ggZXhjbHVkZXMgdGhlIFVTQiBUWCBoZWFkZXIpLAorICAgbGlrZWx5IHRvIGNvbXBlbnNhdGUgYSBmbGF3IGluIHRoZSBBVDc2QzUwM0EgVVNCIHBhcnQgLi4uICovCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2NhbGNfcGFkZGluZyhpbnQgd2xlbikKK3sKKwkvKiBhZGQgdGhlIFVTQiBUWCBoZWFkZXIgKi8KKwl3bGVuICs9IEFUNzZfVFhfSERSTEVOOworCisJd2xlbiA9IHdsZW4gJSA2NDsKKworCWlmICh3bGVuIDwgNTApCisJCXJldHVybiA1MCAtIHdsZW47CisKKwlpZiAod2xlbiA+PSA2MSkKKwkJcmV0dXJuIDY0ICsgNTAgLSB3bGVuOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFdlIGFyZSBkb2luZyBhIGxvdCBvZiB0aGluZ3MgaGVyZSBpbiBhbiBpbnRlcnJ1cHQuIE5lZWQKKyAgIGEgYmggaGFuZGxlciAoV2F0Y2hpbmcgVFYgd2l0aCBhIFRWIGNhcmQgaXMgcHJvYmFibHkKKyAgIGEgZ29vZCB0ZXN0OiBpZiB5b3Ugc2VlIGZsaWNrZXJzLCB3ZSBhcmUgZG9pbmcgdG9vIG11Y2guCisgICBDdXJyZW50bHkgSSBkbyBzZWUgZmxpY2tlcnMuLi4gZXZlbiB3aXRoIG91ciB0YXNrbGV0IDotKCApCisgICBNYXliZSBiZWNhdXNlIHRoZSBidHR2IGRyaXZlciBhbmQgdXNiLXVoY2kgdXNlIHRoZSBzYW1lIGludGVycnVwdAorKi8KKy8qIE9yIG1heWJlIGJlY2F1c2Ugb3VyIEJIIGhhbmRsZXIgaXMgcHJlZW1wdGluZyBidHR2J3MgQkggaGFuZGxlci4uIEJIcyBkb24ndAorICogc29sdmUgZXZlcnl0aGluZy4uIChhbGV4KSAqLworc3RhdGljIHZvaWQgYXQ3Nl9yeF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKworCXByaXYtPnJ4X3Rhc2tsZXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXVyYjsKKwl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5yeF90YXNrbGV0KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfdHhfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGF0NzZfdHhfYnVmZmVyICptZ210X2J1ZjsKKwlpbnQgcmV0OworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJc3RhdHMtPnR4X3BhY2tldHMrKzsKKwkJYnJlYWs7CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVDT05OUkVTRVQ6CisJCS8qIHVyYiBoYXMgYmVlbiB1bmxpbmtlZCAqLworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJYXQ3Nl9kYmcoREJHX1VSQiwgIiVzIC0gbm9uemVybyB0eCBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCSBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlzdGF0cy0+dHhfZXJyb3JzKys7CisJCWJyZWFrOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5tZ210X3NwaW5sb2NrLCBmbGFncyk7CisJbWdtdF9idWYgPSBwcml2LT5uZXh0X21nbXRfYnVsazsKKwlwcml2LT5uZXh0X21nbXRfYnVsayA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bWdtdF9zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKCFtZ210X2J1ZikgeworCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm5ldGRldik7CisJCXJldHVybjsKKwl9CisKKwkvKiB3ZSBkb24ndCBjb3B5IHRoZSBwYWRkaW5nIGJ5dGVzLCBidXQgYWRkIHRoZW0KKwkgICB0byB0aGUgbGVuZ3RoICovCisJbWVtY3B5KHByaXYtPmJ1bGtfb3V0X2J1ZmZlciwgbWdtdF9idWYsCisJICAgICAgIGxlMTZfdG9fY3B1KG1nbXRfYnVmLT53bGVuZ3RoKSArIEFUNzZfVFhfSERSTEVOKTsKKwl1c2JfZmlsbF9idWxrX3VyYihwcml2LT50eF91cmIsIHByaXYtPnVkZXYsIHByaXYtPnR4X3BpcGUsCisJCQkgIHByaXYtPmJ1bGtfb3V0X2J1ZmZlciwKKwkJCSAgbGUxNl90b19jcHUobWdtdF9idWYtPndsZW5ndGgpICsgbWdtdF9idWYtPnBhZGRpbmcgKworCQkJICBBVDc2X1RYX0hEUkxFTiwgYXQ3Nl90eF9jYWxsYmFjaywgcHJpdik7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+dHhfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciBpbiB0eCBzdWJtaXQgdXJiOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKworCWtmcmVlKG1nbXRfYnVmKTsKK30KKworLyogU2VuZCBhIG1hbmFnZW1lbnQgZnJhbWUgb24gYnVsay1vdXQuICB0eGJ1Zi0+d2xlbmd0aCBtdXN0IGJlIHNldCAqLworc3RhdGljIGludCBhdDc2X3R4X21nbXQoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IGF0NzZfdHhfYnVmZmVyICp0eGJ1ZikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisJaW50IHVyYl9zdGF0dXM7CisJdm9pZCAqb2xkYnVmID0gTlVMTDsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5ldGRldik7CS8qIHN0b3AgbmV0ZGV2IHdhdGNoZG9nICovCisJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRkZXYpOwkvKiBzdG9wIHR4IGRhdGEgcGFja2V0cyAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPm1nbXRfc3BpbmxvY2ssIGZsYWdzKTsKKworCXVyYl9zdGF0dXMgPSBwcml2LT50eF91cmItPnN0YXR1czsKKwlpZiAodXJiX3N0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJLyogY2Fubm90IHRyYW5zbWl0IG5vdywgcHV0IGluIHRoZSBxdWV1ZSAqLworCQlvbGRidWYgPSBwcml2LT5uZXh0X21nbXRfYnVsazsKKwkJcHJpdi0+bmV4dF9tZ210X2J1bGsgPSB0eGJ1ZjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bWdtdF9zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKG9sZGJ1ZikgeworCQkvKiBhIGRhdGEvbWdtdCB0eCBpcyBhbHJlYWR5IHBlbmRpbmcgaW4gdGhlIFVSQiAtCisJCSAgIGlmIHRoaXMgaXMgbm8gZXJyb3IgaW4gc29tZSBzaXR1YXRpb25zIHdlIG11c3QKKwkJICAgaW1wbGVtZW50IGEgcXVldWUgb3Igc2lsZW50bHkgbW9kaWZ5IHRoZSBvbGQgbXNnICovCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlbW92ZWQgcGVuZGluZyBtZ210IGJ1ZmZlciAlc1xuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgaGV4MnN0cihvbGRidWYsIDY0KSk7CisJCWtmcmVlKG9sZGJ1Zik7CisJCXJldHVybiAwOworCX0KKworCXR4YnVmLT50eF9yYXRlID0gVFhfUkFURV8xTUJJVDsKKwl0eGJ1Zi0+cGFkZGluZyA9IGF0NzZfY2FsY19wYWRkaW5nKGxlMTZfdG9fY3B1KHR4YnVmLT53bGVuZ3RoKSk7CisJbWVtc2V0KHR4YnVmLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKHR4YnVmLT5yZXNlcnZlZCkpOworCisJaWYgKHByaXYtPm5leHRfbWdtdF9idWxrKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVUkIgc3RhdHVzICVkLCBidXQgbWdtdCBpcyBwZW5kaW5nXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCB1cmJfc3RhdHVzKTsKKworCWF0NzZfZGJnKERCR19UWF9NR01ULAorCQkgIiVzOiB0eCBtZ210OiB3bGVuICVkIHR4X3JhdGUgJWQgcGFkICVkICVzIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgbGUxNl90b19jcHUodHhidWYtPndsZW5ndGgpLAorCQkgdHhidWYtPnR4X3JhdGUsIHR4YnVmLT5wYWRkaW5nLAorCQkgaGV4MnN0cih0eGJ1Zi0+cGFja2V0LCBsZTE2X3RvX2NwdSh0eGJ1Zi0+d2xlbmd0aCkpKTsKKworCS8qIHR4YnVmIHdhcyBub3QgY29uc3VtZWQgYWJvdmUgLT4gc2VuZCBtZ210IG1zZyBpbW1lZGlhdGVseSAqLworCW1lbWNweShwcml2LT5idWxrX291dF9idWZmZXIsIHR4YnVmLAorCSAgICAgICBsZTE2X3RvX2NwdSh0eGJ1Zi0+d2xlbmd0aCkgKyBBVDc2X1RYX0hEUkxFTik7CisJdXNiX2ZpbGxfYnVsa191cmIocHJpdi0+dHhfdXJiLCBwcml2LT51ZGV2LCBwcml2LT50eF9waXBlLAorCQkJICBwcml2LT5idWxrX291dF9idWZmZXIsCisJCQkgIGxlMTZfdG9fY3B1KHR4YnVmLT53bGVuZ3RoKSArIHR4YnVmLT5wYWRkaW5nICsKKwkJCSAgQVQ3Nl9UWF9IRFJMRU4sIGF0NzZfdHhfY2FsbGJhY2ssIHByaXYpOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnR4X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgaW4gdHggc3VibWl0IHVyYjogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisKKwlrZnJlZSh0eGJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBHbyB0byB0aGUgbmV4dCBpbmZvcm1hdGlvbiBlbGVtZW50ICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmV4dF9pZShzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCAqKmllKQoreworCSppZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCAqKSgmKCppZSktPmRhdGFbKCppZSktPmxlbl0pOworfQorCisvKiBDaGFsbGVuZ2UgaXMgdGhlIGNoYWxsZW5nZSBzdHJpbmcgKGluIFRMViBmb3JtYXQpCisgICB3ZSBnb3Qgd2l0aCBzZXFfbnIgMiBmb3Igc2hhcmVkIHNlY3JldCBhdXRoZW50aWNhdGlvbiBvbmx5IGFuZAorICAgc2VuZCBpbiBzZXFfbnIgMyBXRVAgZW5jcnlwdGVkIHRvIHByb3ZlIHdlIGhhdmUgdGhlIGNvcnJlY3QgV0VQIGtleTsKKyAgIG90aGVyd2lzZSBpdCBpcyBOVUxMICovCitzdGF0aWMgaW50IGF0NzZfYXV0aF9yZXEoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IGJzc19pbmZvICpic3MsCisJCQkgaW50IHNlcV9uciwgc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgKmNoYWxsZW5nZSkKK3sKKwlzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIgKnR4X2J1ZmZlcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqbWdtdDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2F1dGggKnJlcTsKKwlpbnQgYnVmX2xlbiA9IChzZXFfbnIgIT0gMyA/IEFVVEhfRlJBTUVfU0laRSA6CisJCSAgICAgICBBVVRIX0ZSQU1FX1NJWkUgKyAxICsgMSArIGNoYWxsZW5nZS0+bGVuKTsKKworCUJVR19PTighYnNzKTsKKwlCVUdfT04oc2VxX25yID09IDMgJiYgIWNoYWxsZW5nZSk7CisJdHhfYnVmZmVyID0ga21hbGxvYyhidWZfbGVuICsgTUFYX1BBRERJTkdfU0laRSwgR0ZQX0FUT01JQyk7CisJaWYgKCF0eF9idWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVxID0gKHN0cnVjdCBpZWVlODAyMTFfYXV0aCAqKXR4X2J1ZmZlci0+cGFja2V0OworCW1nbXQgPSAmcmVxLT5oZWFkZXI7CisKKwkvKiBtYWtlIHdpcmVsZXNzIGhlYWRlciAqLworCS8qIGZpcnN0IGF1dGggbXNnIGlzIG5vdCBlbmNyeXB0ZWQsIG9ubHkgdGhlIHNlY29uZCAoc2VxX25yID09IDMpICovCisJbWdtdC0+ZnJhbWVfY3RsID0KKwkgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfQVVUSCB8CisJCQkoc2VxX25yID09IDMgPyBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQgOiAwKSk7CisKKwltZ210LT5kdXJhdGlvbl9pZCA9IGNwdV90b19sZTE2KDB4ODAwMCk7CisJbWVtY3B5KG1nbXQtPmFkZHIxLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmFkZHIyLCBwcml2LT5uZXRkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmFkZHIzLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJbWdtdC0+c2VxX2N0bCA9IGNwdV90b19sZTE2KDApOworCisJcmVxLT5hbGdvcml0aG0gPSBjcHVfdG9fbGUxNihwcml2LT5hdXRoX21vZGUpOworCXJlcS0+dHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUxNihzZXFfbnIpOworCXJlcS0+c3RhdHVzID0gY3B1X3RvX2xlMTYoMCk7CisKKwlpZiAoc2VxX25yID09IDMpCisJCW1lbWNweShyZXEtPmluZm9fZWxlbWVudCwgY2hhbGxlbmdlLCAxICsgMSArIGNoYWxsZW5nZS0+bGVuKTsKKworCS8qIGluaXQuIGF0NzZfcHJpdiB0eCBoZWFkZXIgKi8KKwl0eF9idWZmZXItPndsZW5ndGggPSBjcHVfdG9fbGUxNihidWZfbGVuIC0gQVQ3Nl9UWF9IRFJMRU4pOworCWF0NzZfZGJnKERCR19UWF9NR01ULCAiJXM6IEF1dGhSZXEgYnNzaWQgJXMgYWxnICVkIHNlcV9uciAlZCIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIG1hYzJzdHIobWdtdC0+YWRkcjMpLAorCQkgbGUxNl90b19jcHUocmVxLT5hbGdvcml0aG0pLCBsZTE2X3RvX2NwdShyZXEtPnRyYW5zYWN0aW9uKSk7CisJaWYgKHNlcV9uciA9PSAzKQorCQlhdDc2X2RiZyhEQkdfVFhfTUdNVCwgIiVzOiBBdXRoUmVxIGNoYWxsZW5nZTogJXMgLi4uIiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGhleDJzdHIocmVxLT5pbmZvX2VsZW1lbnQsIDE4KSk7CisKKwkvKiBlaXRoZXIgc2VuZCBpbW1lZGlhdGVseSAoaWYgbm8gZGF0YSB0eCBpcyBwZW5kaW5nCisJICAgb3IgcHV0IGl0IGluIHBlbmRpbmcgbGlzdCAqLworCXJldHVybiBhdDc2X3R4X21nbXQocHJpdiwgdHhfYnVmZmVyKTsKK30KKworc3RhdGljIGludCBhdDc2X2Fzc29jX3JlcShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3QgYnNzX2luZm8gKmJzcykKK3sKKwlzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIgKnR4X2J1ZmZlcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqbWdtdDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3JlcXVlc3QgKnJlcTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCAqaWU7CisJY2hhciAqZXNzaWQ7CisJaW50IGVzc2lkX2xlbjsKKwl1MTYgY2FwYTsKKworCUJVR19PTighYnNzKTsKKworCXR4X2J1ZmZlciA9IGttYWxsb2MoQVNTT0NSRVFfTUFYX1NJWkUgKyBNQVhfUEFERElOR19TSVpFLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXR4X2J1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXEgPSAoc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXF1ZXN0ICopdHhfYnVmZmVyLT5wYWNrZXQ7CisJbWdtdCA9ICZyZXEtPmhlYWRlcjsKKwlpZSA9IHJlcS0+aW5mb19lbGVtZW50OworCisJLyogbWFrZSB3aXJlbGVzcyBoZWFkZXIgKi8KKwltZ210LT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJICAgICAgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSk7CisKKwltZ210LT5kdXJhdGlvbl9pZCA9IGNwdV90b19sZTE2KDB4ODAwMCk7CisJbWVtY3B5KG1nbXQtPmFkZHIxLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmFkZHIyLCBwcml2LT5uZXRkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmFkZHIzLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJbWdtdC0+c2VxX2N0bCA9IGNwdV90b19sZTE2KDApOworCisJLyogd2UgbXVzdCBzZXQgdGhlIFByaXZhY3kgYml0IGluIHRoZSBjYXBhYmlsaXRpZXMgdG8gYXNzdXJlIGFuCisJICAgQWdlcmUtYmFzZWQgQVAgd2l0aCBvcHRpb25hbCBXRVAgdHJhbnNtaXRzIGVuY3J5cHRlZCBmcmFtZXMKKwkgICB0byB1cy4gIEFQIG9ubHkgc2V0IHRoZSBQcml2YWN5IGJpdCBpbiB0aGVpciBjYXBhYmlsaXRpZXMKKwkgICBpZiBXRVAgaXMgbWFuZGF0b3J5IGluIHRoZSBCU1MhICovCisJY2FwYSA9IGJzcy0+Y2FwYTsKKwlpZiAocHJpdi0+d2VwX2VuYWJsZWQpCisJCWNhcGEgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CisJaWYgKHByaXYtPnByZWFtYmxlX3R5cGUgIT0gUFJFQU1CTEVfVFlQRV9MT05HKQorCQljYXBhIHw9IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRTsKKwlyZXEtPmNhcGFiaWxpdHkgPSBjcHVfdG9fbGUxNihjYXBhKTsKKworCXJlcS0+bGlzdGVuX2ludGVydmFsID0gY3B1X3RvX2xlMTYoMiAqIGJzcy0+YmVhY29uX2ludGVydmFsKTsKKworCS8qIHdyaXRlIFRMViBkYXRhIGVsZW1lbnRzICovCisKKwlpZS0+aWQgPSBNRklFX1RZUEVfU1NJRDsKKwlpZS0+bGVuID0gYnNzLT5zc2lkX2xlbjsKKwltZW1jcHkoaWUtPmRhdGEsIGJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbik7CisJbmV4dF9pZSgmaWUpOworCisJaWUtPmlkID0gTUZJRV9UWVBFX1JBVEVTOworCWllLT5sZW4gPSBzaXplb2YoaHdfcmF0ZXMpOworCW1lbWNweShpZS0+ZGF0YSwgaHdfcmF0ZXMsIHNpemVvZihod19yYXRlcykpOworCW5leHRfaWUoJmllKTsJCS8qIGllIHBvaW50cyBiZWhpbmQgdGhlIHN1cHBfcmF0ZXMgZmllbGQgKi8KKworCS8qIGluaXQuIGF0NzZfcHJpdiB0eCBoZWFkZXIgKi8KKwl0eF9idWZmZXItPndsZW5ndGggPSBjcHVfdG9fbGUxNigodTggKilpZSAtICh1OCAqKW1nbXQpOworCisJaWUgPSByZXEtPmluZm9fZWxlbWVudDsKKwllc3NpZCA9IGllLT5kYXRhOworCWVzc2lkX2xlbiA9IG1pbl90KGludCwgSVdfRVNTSURfTUFYX1NJWkUsIGllLT5sZW4pOworCisJbmV4dF9pZSgmaWUpOwkJLyogcG9pbnRzIHRvIElFIG9mIHJhdGVzIG5vdyAqLworCWF0NzZfZGJnKERCR19UWF9NR01ULAorCQkgIiVzOiBBc3NvY1JlcSBic3NpZCAlcyBjYXBhIDB4JTA0eCBzc2lkICUuKnMgcmF0ZXMgJXMiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWMyc3RyKG1nbXQtPmFkZHIzKSwKKwkJIGxlMTZfdG9fY3B1KHJlcS0+Y2FwYWJpbGl0eSksIGVzc2lkX2xlbiwgZXNzaWQsCisJCSBoZXgyc3RyKGllLT5kYXRhLCBpZS0+bGVuKSk7CisKKwkvKiBlaXRoZXIgc2VuZCBpbW1lZGlhdGVseSAoaWYgbm8gZGF0YSB0eCBpcyBwZW5kaW5nCisJICAgb3IgcHV0IGl0IGluIHBlbmRpbmcgbGlzdCAqLworCXJldHVybiBhdDc2X3R4X21nbXQocHJpdiwgdHhfYnVmZmVyKTsKK30KKworLyogV2UgZ290IHRvIGNoZWNrIHRoZSBic3NfbGlzdCBmb3Igb2xkIGVudHJpZXMgKi8KK3N0YXRpYyB2b2lkIGF0NzZfYnNzX2xpc3RfdGltZW91dCh1bnNpZ25lZCBsb25nIHBhcikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gKHN0cnVjdCBhdDc2X3ByaXYgKilwYXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpscHRyLCAqbnB0cjsKKwlzdHJ1Y3QgYnNzX2luZm8gKnB0cjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5ic3NfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGxwdHIsIG5wdHIsICZwcml2LT5ic3NfbGlzdCkgeworCisJCXB0ciA9IGxpc3RfZW50cnkobHB0ciwgc3RydWN0IGJzc19pbmZvLCBsaXN0KTsKKworCQlpZiAocHRyICE9IHByaXYtPmN1cnJfYnNzCisJCSAgICAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIHB0ci0+bGFzdF9yeCArIEJTU19MSVNUX1RJTUVPVVQpKSB7CisJCQlhdDc2X2RiZyhEQkdfQlNTX1RBQkxFX1JNLAorCQkJCSAiJXM6IGJzc19saXN0OiByZW1vdmluZyBvbGQgQlNTICVzIGNoICVkIiwKKwkJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWMyc3RyKHB0ci0+YnNzaWQpLAorCQkJCSBwdHItPmNoYW5uZWwpOworCQkJbGlzdF9kZWwoJnB0ci0+bGlzdCk7CisJCQlrZnJlZShwdHIpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrLCBmbGFncyk7CisJLyogcmVzdGFydCB0aGUgdGltZXIgKi8KKwltb2RfdGltZXIoJnByaXYtPmJzc19saXN0X3RpbWVyLCBqaWZmaWVzICsgQlNTX0xJU1RfVElNRU9VVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdDc2X3NldF9tYWNfc3RhdGUoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwKKwkJCQkgICAgICBlbnVtIG1hY19zdGF0ZSBtYWNfc3RhdGUpCit7CisJYXQ3Nl9kYmcoREJHX01BQ19TVEFURSwgIiVzIHN0YXRlOiAlcyIsIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIG1hY19zdGF0ZXNbbWFjX3N0YXRlXSk7CisJcHJpdi0+bWFjX3N0YXRlID0gbWFjX3N0YXRlOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfYnNzX3RhYmxlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJc3RydWN0IGJzc19pbmZvICpwdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpscHRyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrLCBmbGFncyk7CisKKwlhdDc2X2RiZyhEQkdfQlNTX1RBQkxFLCAiJXMgQlNTIHRhYmxlIChjdXJyPSVwKToiLCBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBwcml2LT5jdXJyX2Jzcyk7CisKKwlsaXN0X2Zvcl9lYWNoKGxwdHIsICZwcml2LT5ic3NfbGlzdCkgeworCQlwdHIgPSBsaXN0X2VudHJ5KGxwdHIsIHN0cnVjdCBic3NfaW5mbywgbGlzdCk7CisJCWF0NzZfZGJnKERCR19CU1NfVEFCTEUsICIweCVwOiBic3NpZCAlcyBjaGFubmVsICVkIHNzaWQgJS4qcyAiCisJCQkgIiglcykgY2FwYSAweCUwNHggcmF0ZXMgJXMgcnNzaSAlZCBsaW5rICVkIG5vaXNlICVkIiwKKwkJCSBwdHIsIG1hYzJzdHIocHRyLT5ic3NpZCksIHB0ci0+Y2hhbm5lbCwgcHRyLT5zc2lkX2xlbiwKKwkJCSBwdHItPnNzaWQsIGhleDJzdHIocHRyLT5zc2lkLCBwdHItPnNzaWRfbGVuKSwKKwkJCSBwdHItPmNhcGEsIGhleDJzdHIocHRyLT5yYXRlcywgcHRyLT5yYXRlc19sZW4pLAorCQkJIHB0ci0+cnNzaSwgcHRyLT5saW5rX3F1YWwsIHB0ci0+bm9pc2VfbGV2ZWwpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5ic3NfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworfQorCisvKiBDYWxsZWQgdXBvbiBzdWNjZXNzZnVsIGFzc29jaWF0aW9uIHRvIG1hcmsgaW50ZXJmYWNlIGFzIGNvbm5lY3RlZCAqLworc3RhdGljIHZvaWQgYXQ3Nl93b3JrX2Fzc29jX2RvbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgd29ya19hc3NvY19kb25lKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlXQVJOX09OKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQVNTT0MpOworCVdBUk5fT04oIXByaXYtPmN1cnJfYnNzKTsKKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19BU1NPQyB8fCAhcHJpdi0+Y3Vycl9ic3MpCisJCWdvdG8gZXhpdDsKKworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfSU5GUkEpIHsKKwkJaWYgKHByaXYtPnBtX21vZGUgIT0gQVQ3Nl9QTV9PRkYpIHsKKwkJCS8qIGNhbGN1bGF0ZSB0aGUgbGlzdGVuIGludGVydmFsIGluIHVuaXRzIG9mCisJCQkgICBiZWFjb24gaW50ZXJ2YWxzIG9mIHRoZSBjdXJyX2JzcyAqLworCQkJdTMyIHBtX3BlcmlvZF9iZWFjb24gPSAocHJpdi0+cG1fcGVyaW9kID4+IDEwKSAvCisJCQkgICAgcHJpdi0+Y3Vycl9ic3MtPmJlYWNvbl9pbnRlcnZhbDsKKworCQkJcG1fcGVyaW9kX2JlYWNvbiA9IG1heChwbV9wZXJpb2RfYmVhY29uLCAydSk7CisJCQlwbV9wZXJpb2RfYmVhY29uID0gbWluKHBtX3BlcmlvZF9iZWFjb24sIDB4ZmZmZnUpOworCisJCQlhdDc2X2RiZyhEQkdfUE0sCisJCQkJICIlczogcG1fbW9kZSAlZCBhc3NvYyBpZCAweCV4IGxpc3RlbiBpbnQgJWQiLAorCQkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIHByaXYtPnBtX21vZGUsCisJCQkJIHByaXYtPmFzc29jX2lkLCBwbV9wZXJpb2RfYmVhY29uKTsKKworCQkJYXQ3Nl9zZXRfYXNzb2NpZChwcml2LCBwcml2LT5hc3NvY19pZCk7CisJCQlhdDc2X3NldF9saXN0ZW5faW50ZXJ2YWwocHJpdiwgKHUxNilwbV9wZXJpb2RfYmVhY29uKTsKKwkJfQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2JlYWNvbiwgQkVBQ09OX1RJTUVPVVQpOworCX0KKwlhdDc2X3NldF9wbV9tb2RlKHByaXYpOworCisJbmV0aWZfY2Fycmllcl9vbihwcml2LT5uZXRkZXYpOworCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmV0ZGV2KTsKKwlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX0NPTk5FQ1RFRCk7CisJYXQ3Nl9pd2V2ZW50X2Jzc19jb25uZWN0KHByaXYtPm5ldGRldiwgcHJpdi0+Y3Vycl9ic3MtPmJzc2lkKTsKKwlhdDc2X2RiZyhEQkdfUFJPR1JFU1MsICIlczogY29ubmVjdGVkIHRvIEJTU0lEICVzIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjMnN0cihwcml2LT5jdXJyX2Jzcy0+YnNzaWQpKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKKy8qIFdlIG9ubHkgc3RvcmUgdGhlIG5ldyBtYWMgYWRkcmVzcyBpbiBuZXRkZXYgc3RydWN0LAorICAgaXQgZ2V0cyBzZXQgd2hlbiB0aGUgbmV0ZGV2IGlzIG9wZW5lZC4gKi8KK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKm1hYyA9IGFkZHI7CisJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIG1hYy0+c2FfZGF0YSwgRVRIX0FMRU4pOworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmF0NzZfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJcmV0dXJuICZwcml2LT5zdGF0czsKK30KKworc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICphdDc2X2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiUkVUVVJOIHF1YWwgJWQgbGV2ZWwgJWQgbm9pc2UgJWQgdXBkYXRlZCAlZCIsCisJCSBwcml2LT53c3RhdHMucXVhbC5xdWFsLCBwcml2LT53c3RhdHMucXVhbC5sZXZlbCwKKwkJIHByaXYtPndzdGF0cy5xdWFsLm5vaXNlLCBwcml2LT53c3RhdHMucXVhbC51cGRhdGVkKTsKKworCXJldHVybiAmcHJpdi0+d3N0YXRzOworfQorCitzdGF0aWMgdm9pZCBhdDc2X3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcHJvbWlzYzsKKworCXByb21pc2MgPSAoKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgIT0gMCk7CisJaWYgKHByb21pc2MgIT0gcHJpdi0+cHJvbWlzYykgeworCQkvKiBUaGlzIGdldHMgY2FsbGVkIGluIGludGVycnVwdCwgbXVzdCByZXNjaGVkdWxlICovCisJCXByaXYtPnByb21pc2MgPSBwcm9taXNjOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX3NldF9wcm9taXNjKTsKKwl9Cit9CisKKy8qIFN0b3AgYWxsIG5ldHdvcmsgYWN0aXZpdHksIGZsdXNoIGFsbCBwZW5kaW5nIHRhc2tzICovCitzdGF0aWMgdm9pZCBhdDc2X3F1aWVzY2Uoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRkZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5ldGRldik7CisKKwlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX0lOSVQpOworCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfZ2V0X3NjYW4pOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2JlYWNvbik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXV0aCk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXNzb2MpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX3Jlc3RhcnQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPm1nbXRfc3BpbmxvY2ssIGZsYWdzKTsKKwlrZnJlZShwcml2LT5uZXh0X21nbXRfYnVsayk7CisJcHJpdi0+bmV4dF9tZ210X2J1bGsgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPm1nbXRfc3BpbmxvY2ssIGZsYWdzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGF0NzZfcHJpdiBpbXBsZW1lbnRhdGlvbnMgb2YgaXdfaGFuZGxlciBmdW5jdGlvbnM6CisgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2NvbW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHZvaWQgKm51bGwsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXMgJXM6IHJlc3RhcnRpbmcgdGhlIGRldmljZSIsIG5ldGRldi0+bmFtZSwKKwkJIF9fZnVuY19fKTsKKworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0lOSVQpCisJCWF0NzZfcXVpZXNjZShwcml2KTsKKworCS8qIFdhaXQgaGFsZiBzZWNvbmQgYmVmb3JlIHRoZSByZXN0YXJ0IHRvIHByb2Nlc3Mgc3Vic2VxdWVudAorCSAqIHJlcXVlc3RzIGZyb20gdGhlIHNhbWUgaXdjb25maWcgaW4gYSBzaW5nbGUgcmVzdGFydCAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfcmVzdGFydCwgSFogLyAyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICBjaGFyICpuYW1lLCBjaGFyICpleHRyYSkKK3sKKwlzdHJjcHkobmFtZSwgIklFRUUgODAyLjExYiIpOworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXTkFNRSAtIG5hbWUgJXMiLCBuZXRkZXYtPm5hbWUsIG5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9zZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGNoYW4gPSAtMTsKKwlpbnQgcmV0ID0gLUVJV0NPTU1JVDsKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ1NJV0ZSRVEgLSBmcmVxLm0gJWQgZnJlcS5lICVkIiwKKwkJIG5ldGRldi0+bmFtZSwgZnJlcS0+bSwgZnJlcS0+ZSk7CisKKwlpZiAoKGZyZXEtPmUgPT0gMCkgJiYgKGZyZXEtPm0gPD0gMTAwMCkpCisJCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KKwkJY2hhbiA9IGZyZXEtPm07CisJZWxzZSB7CisJCS8qIFNldHRpbmcgYnkgZnJlcXVlbmN5IC0gc2VhcmNoIHRoZSB0YWJsZSAqLworCQlpbnQgbXVsdCA9IDE7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCAoNiAtIGZyZXEtPmUpOyBpKyspCisJCQltdWx0ICo9IDEwOworCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykgeworCQkJaWYgKGZyZXEtPm0gPT0gKGNoYW5uZWxfZnJlcXVlbmN5W2ldICogbXVsdCkpCisJCQkJY2hhbiA9IGkgKyAxOworCQl9CisJfQorCisJaWYgKGNoYW4gPCAxIHx8ICFwcml2LT5kb21haW4pCisJCS8qIG5vbi1wb3NpdGl2ZSBjaGFubmVscyBhcmUgaW52YWxpZAorCQkgKiB3ZSBuZWVkIGEgZG9tYWluIGluZm8gdG8gc2V0IHRoZSBjaGFubmVsCisJCSAqIGVpdGhlciB0aGF0IG9yIGFuIGludmFsaWQgZnJlcXVlbmN5IHdhcworCQkgKiBwcm92aWRlZCBieSB0aGUgdXNlciAqLworCQlyZXQgPSAtRUlOVkFMOworCWVsc2UgaWYgKCEocHJpdi0+ZG9tYWluLT5jaGFubmVsX21hcCAmICgxIDw8IChjaGFuIC0gMSkpKSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogY2hhbm5lbCAlZCBub3QgYWxsb3dlZCBmb3IgZG9tYWluICVzXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBjaGFuLCBwcml2LT5kb21haW4tPm5hbWUpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCWlmIChyZXQgPT0gLUVJV0NPTU1JVCkgeworCQlwcml2LT5jaGFubmVsID0gY2hhbjsKKwkJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NTSVdGUkVRIC0gY2ggJWQiLCBuZXRkZXYtPm5hbWUsCisJCQkgY2hhbik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJZnJlcS0+bSA9IHByaXYtPmNoYW5uZWw7CisJZnJlcS0+ZSA9IDA7CisKKwlpZiAocHJpdi0+Y2hhbm5lbCkKKwkJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdGUkVRIC0gZnJlcSAlbGQgeCAxMGUlZCIsCisJCQkgbmV0ZGV2LT5uYW1lLCBjaGFubmVsX2ZyZXF1ZW5jeVtwcml2LT5jaGFubmVsIC0gMV0sIDYpOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdGUkVRIC0gY2ggJWQiLCBuZXRkZXYtPm5hbWUsCisJCSBwcml2LT5jaGFubmVsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9zZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ1NJV01PREUgLSAlZCIsIG5ldGRldi0+bmFtZSwgKm1vZGUpOworCisJaWYgKCgqbW9kZSAhPSBJV19NT0RFX0FESE9DKSAmJiAoKm1vZGUgIT0gSVdfTU9ERV9JTkZSQSkgJiYKKwkgICAgKCptb2RlICE9IElXX01PREVfTU9OSVRPUikpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpdi0+aXdfbW9kZSA9ICptb2RlOworCWlmIChwcml2LT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpCisJCXByaXYtPnBtX21vZGUgPSBBVDc2X1BNX09GRjsKKworCXJldHVybiAtRUlXQ09NTUlUOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkqbW9kZSA9IHByaXYtPml3X21vZGU7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV01PREUgLSAlZCIsIG5ldGRldi0+bmFtZSwgKm1vZGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF9yYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJLyogaW5zcGlyZWQgYnkgYXRtZWwuYyAqLworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopZXh0cmE7CisJaW50IGk7CisKKwlkYXRhLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKKworCS8qIFRPRE86IHJhbmdlLT50aHJvdWdocHV0ID0geHh4eHh4OyAqLworCisJcmFuZ2UtPm1pbl9ud2lkID0gMHgwMDAwOworCXJhbmdlLT5tYXhfbndpZCA9IDB4MDAwMDsKKworCS8qIHRoaXMgZHJpdmVyIGRvZXNuJ3QgbWFpbnRhaW4gc2Vuc2l0aXZpdHkgaW5mb3JtYXRpb24gKi8KKwlyYW5nZS0+c2Vuc2l0aXZpdHkgPSAwOworCisJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7CisJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMTAwOworCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDA7CisJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CisKKwlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDUwOworCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IDUwOworCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IDA7CisJcmFuZ2UtPmF2Z19xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CisKKwlyYW5nZS0+Yml0cmF0ZVswXSA9IDEwMDAwMDA7CisJcmFuZ2UtPmJpdHJhdGVbMV0gPSAyMDAwMDAwOworCXJhbmdlLT5iaXRyYXRlWzJdID0gNTUwMDAwMDsKKwlyYW5nZS0+Yml0cmF0ZVszXSA9IDExMDAwMDAwOworCXJhbmdlLT5udW1fYml0cmF0ZXMgPSA0OworCisJcmFuZ2UtPm1pbl9ydHMgPSAwOworCXJhbmdlLT5tYXhfcnRzID0gTUFYX1JUU19USFJFU0hPTEQ7CisKKwlyYW5nZS0+bWluX2ZyYWcgPSBNSU5fRlJBR19USFJFU0hPTEQ7CisJcmFuZ2UtPm1heF9mcmFnID0gTUFYX0ZSQUdfVEhSRVNIT0xEOworCisJcmFuZ2UtPnBtcF9mbGFncyA9IElXX1BPV0VSX1BFUklPRDsKKwlyYW5nZS0+cG10X2ZsYWdzID0gSVdfUE9XRVJfT047CisJcmFuZ2UtPnBtX2NhcGEgPSBJV19QT1dFUl9QRVJJT0QgfCBJV19QT1dFUl9BTExfUjsKKworCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gV0VQX1NNQUxMX0tFWV9MRU47CisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSBXRVBfTEFSR0VfS0VZX0xFTjsKKwlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKKwlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IFdFUF9LRVlTOworCisJLyogYm90aCBXTC0yNDBVIGFuZCBMaW5rc3lzIFdVU0IxMSB2Mi42IHNwZWNpZnkgMTUgZEJtIGFzIG91dHB1dCBwb3dlcgorCSAgIC0gdGFrZSB0aGlzIGZvciBhbGwgKGlnbm9yZSBhbnRlbm5hIGdhaW5zKSAqLworCXJhbmdlLT50eHBvd2VyWzBdID0gMTU7CisJcmFuZ2UtPm51bV90eHBvd2VyID0gMTsKKwlyYW5nZS0+dHhwb3dlcl9jYXBhID0gSVdfVFhQT1dfREJNOworCisJcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gV0lSRUxFU1NfRVhUOworCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOworCisJLyogc2FtZSBhcyB0aGUgdmFsdWVzIHVzZWQgaW4gYXRtZWwuYyAqLworCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPnJfdGltZV9mbGFncyA9IDA7CisJcmFuZ2UtPm1pbl9yZXRyeSA9IDE7CisJcmFuZ2UtPm1heF9yZXRyeSA9IDI1NTsKKworCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBOVU1fQ0hBTk5FTFM7CisJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9DSEFOTkVMUzsgaSsrKSB7CisJCS8qIHRlc3QgaWYgY2hhbm5lbCBtYXAgYml0IGlzIHJhaXNlZCAqLworCQlpZiAocHJpdi0+ZG9tYWluLT5jaGFubmVsX21hcCAmICgweDEgPDwgaSkpIHsKKwkJCXJhbmdlLT5udW1fZnJlcXVlbmN5ICs9IDE7CisKKwkJCXJhbmdlLT5mcmVxW2ldLmkgPSBpICsgMTsKKwkJCXJhbmdlLT5mcmVxW2ldLm0gPSBjaGFubmVsX2ZyZXF1ZW5jeVtpXSAqIDEwMDAwMDsKKwkJCXJhbmdlLT5mcmVxW2ldLmUgPSAxOwkvKiBmcmVxICogMTBeMSAqLworCQl9CisJfQorCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdSQU5HRSIsIG5ldGRldi0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfc2V0X3NweShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DU0lXU1BZIC0gbnVtYmVyIG9mIGFkZHJlc3NlcyAlZCIsCisJCSBuZXRkZXYtPm5hbWUsIGRhdGEtPmxlbmd0aCk7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnNweV9zcGlubG9jayk7CisJcmV0ID0gaXdfaGFuZGxlcl9zZXRfc3B5KHByaXYtPm5ldGRldiwgaW5mbywgKHVuaW9uIGl3cmVxX2RhdGEgKilkYXRhLAorCQkJCSBleHRyYSk7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnNweV9zcGlubG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfc3B5KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnNweV9zcGlubG9jayk7CisJcmV0ID0gaXdfaGFuZGxlcl9nZXRfc3B5KHByaXYtPm5ldGRldiwgaW5mbywKKwkJCQkgKHVuaW9uIGl3cmVxX2RhdGEgKilkYXRhLCBleHRyYSk7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnNweV9zcGlubG9jayk7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV1NQWSAtIG51bWJlciBvZiBhZGRyZXNzZXMgJWQiLAorCQkgbmV0ZGV2LT5uYW1lLCBkYXRhLT5sZW5ndGgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfc2V0X3RocnNweShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmV0OworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NTSVdUSFJTUFkgLSBudW1iZXIgb2YgYWRkcmVzc2VzICVkKSIsCisJCSBuZXRkZXYtPm5hbWUsIGRhdGEtPmxlbmd0aCk7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnNweV9zcGlubG9jayk7CisJcmV0ID0gaXdfaGFuZGxlcl9zZXRfdGhyc3B5KG5ldGRldiwgaW5mbywgKHVuaW9uIGl3cmVxX2RhdGEgKilkYXRhLAorCQkJCSAgICBleHRyYSk7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnNweV9zcGlubG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9nZXRfdGhyc3B5KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnNweV9zcGlubG9jayk7CisJcmV0ID0gaXdfaGFuZGxlcl9nZXRfdGhyc3B5KG5ldGRldiwgaW5mbywgKHVuaW9uIGl3cmVxX2RhdGEgKilkYXRhLAorCQkJCSAgICBleHRyYSk7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnNweV9zcGlubG9jayk7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV1RIUlNQWSAtIG51bWJlciBvZiBhZGRyZXNzZXMgJWQpIiwKKwkJIG5ldGRldi0+bmFtZSwgZGF0YS0+bGVuZ3RoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX3NldF93YXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ1NJV0FQIC0gd2FwL2Jzc2lkICVzIiwgbmV0ZGV2LT5uYW1lLAorCQkgbWFjMnN0cihhcF9hZGRyLT5zYV9kYXRhKSk7CisKKwkvKiBpZiB0aGUgaW5jb21pbmcgYWRkcmVzcyA9PSBmZjpmZjpmZjpmZjpmZjpmZiwgdGhlIHVzZXIgaGFzCisJICAgY2hvc2VuIGFueSBvciBhdXRvIEFQIHByZWZlcmVuY2UgKi8KKwlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYXBfYWRkci0+c2FfZGF0YSkKKwkgICAgfHwgaXNfemVyb19ldGhlcl9hZGRyKGFwX2FkZHItPnNhX2RhdGEpKQorCQlwcml2LT53YW50ZWRfYnNzaWRfdmFsaWQgPSAwOworCWVsc2UgeworCQkvKiB1c2VyIHdhbnRzIHRvIHNldCBhIHByZWZlcnJlZCBBUCBhZGRyZXNzICovCisJCXByaXYtPndhbnRlZF9ic3NpZF92YWxpZCA9IDE7CisJCW1lbWNweShwcml2LT53YW50ZWRfYnNzaWQsIGFwX2FkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKKwl9CisKKwlyZXR1cm4gLUVJV0NPTU1JVDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3dhcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgc3RydWN0IHNvY2thZGRyICphcF9hZGRyLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwltZW1jcHkoYXBfYWRkci0+c2FfZGF0YSwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXQVAgLSB3YXAvYnNzaWQgJXMiLCBuZXRkZXYtPm5hbWUsCisJCSBtYWMyc3RyKGFwX2FkZHItPnNhX2RhdGEpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9zZXRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DU0lXU0NBTiIsIG5ldGRldi0+bmFtZSk7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwcml2LT5tdHgpKQorCQlyZXR1cm4gLUVJTlRSOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJcmV0ID0gLUVORVRET1dOOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogamFsOiB3ZSBkb24ndCBhbGxvdyAiaXdsaXN0IGV0aFggc2NhbiIgd2hpbGUgd2UgYXJlCisJICAgaW4gbW9uaXRvciBtb2RlICovCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBleGl0OworCX0KKworCS8qIERpc2NhcmQgb2xkIHNjYW4gcmVzdWx0cyAqLworCWlmICgoamlmZmllcyAtIHByaXYtPmxhc3Rfc2NhbikgPiAoMjAgKiBIWikpCisJCXByaXYtPnNjYW5fc3RhdGUgPSBTQ0FOX0lETEU7CisJcHJpdi0+bGFzdF9zY2FuID0gamlmZmllczsKKworCS8qIEluaXRpYXRlIGEgc2NhbiBjb21tYW5kICovCisJaWYgKHByaXYtPnNjYW5fc3RhdGUgPT0gU0NBTl9JTl9QUk9HUkVTUykgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwcml2LT5zY2FuX3N0YXRlID0gU0NBTl9JTl9QUk9HUkVTUzsKKworCWF0NzZfcXVpZXNjZShwcml2KTsKKworCS8qIFRyeSB0byBkbyBwYXNzaXZlIG9yIGFjdGl2ZSBzY2FuIGlmIFdFIGFza3MgYXMuICovCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoCisJICAgICYmIHdycXUtPmRhdGEubGVuZ3RoID09IHNpemVvZihzdHJ1Y3QgaXdfc2Nhbl9yZXEpKSB7CisJCXN0cnVjdCBpd19zY2FuX3JlcSAqcmVxID0gKHN0cnVjdCBpd19zY2FuX3JlcSAqKWV4dHJhOworCisJCWlmIChyZXEtPnNjYW5fdHlwZSA9PSBJV19TQ0FOX1RZUEVfUEFTU0lWRSkKKwkJCXByaXYtPnNjYW5fbW9kZSA9IFNDQU5fVFlQRV9QQVNTSVZFOworCQllbHNlIGlmIChyZXEtPnNjYW5fdHlwZSA9PSBJV19TQ0FOX1RZUEVfQUNUSVZFKQorCQkJcHJpdi0+c2Nhbl9tb2RlID0gU0NBTl9UWVBFX0FDVElWRTsKKworCQkvKiBTYW5pdHkgY2hlY2sgdmFsdWVzPyAqLworCQlpZiAocmVxLT5taW5fY2hhbm5lbF90aW1lID4gMCkKKwkJCXByaXYtPnNjYW5fbWluX3RpbWUgPSByZXEtPm1pbl9jaGFubmVsX3RpbWU7CisKKwkJaWYgKHJlcS0+bWF4X2NoYW5uZWxfdGltZSA+IDApCisJCQlwcml2LT5zY2FuX21heF90aW1lID0gcmVxLT5tYXhfY2hhbm5lbF90aW1lOworCX0KKworCS8qIGNoYW5nZSB0byBzY2FubmluZyBzdGF0ZSAqLworCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfU0NBTk5JTkcpOworCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfc3RhcnRfc2Nhbik7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpscHRyLCAqbnB0cjsKKwlzdHJ1Y3QgYnNzX2luZm8gKmN1cnJfYnNzOworCXN0cnVjdCBpd19ldmVudCAqaXdlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGl3X2V2ZW50KSwgR0ZQX0tFUk5FTCk7CisJY2hhciAqY3Vycl92YWwsICpjdXJyX3BvcyA9IGV4dHJhOworCWludCBpOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdTQ0FOIiwgbmV0ZGV2LT5uYW1lKTsKKworCWlmICghaXdlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChwcml2LT5zY2FuX3N0YXRlICE9IFNDQU5fQ09NUExFVEVEKQorCQkvKiBzY2FuIG5vdCB5ZXQgZmluaXNoZWQgKi8KKwkJcmV0dXJuIC1FQUdBSU47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShscHRyLCBucHRyLCAmcHJpdi0+YnNzX2xpc3QpIHsKKwkJY3Vycl9ic3MgPSBsaXN0X2VudHJ5KGxwdHIsIHN0cnVjdCBic3NfaW5mbywgbGlzdCk7CisKKwkJaXdlLT5jbWQgPSBTSU9DR0lXQVA7CisJCWl3ZS0+dS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJbWVtY3B5KGl3ZS0+dS5hcF9hZGRyLnNhX2RhdGEsIGN1cnJfYnNzLT5ic3NpZCwgNik7CisJCWN1cnJfcG9zID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3Vycl9wb3MsCisJCQkJCQlleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsIGl3ZSwKKwkJCQkJCUlXX0VWX0FERFJfTEVOKTsKKworCQlpd2UtPnUuZGF0YS5sZW5ndGggPSBjdXJyX2Jzcy0+c3NpZF9sZW47CisJCWl3ZS0+Y21kID0gU0lPQ0dJV0VTU0lEOworCQlpd2UtPnUuZGF0YS5mbGFncyA9IDE7CisKKwkJY3Vycl9wb3MgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyX3BvcywKKwkJCQkJCWV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgaXdlLAorCQkJCQkJY3Vycl9ic3MtPnNzaWQpOworCisJCWl3ZS0+Y21kID0gU0lPQ0dJV01PREU7CisJCWl3ZS0+dS5tb2RlID0gKGN1cnJfYnNzLT5jYXBhICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpID8KKwkJICAgIElXX01PREVfQURIT0MgOgorCQkgICAgKGN1cnJfYnNzLT5jYXBhICYgV0xBTl9DQVBBQklMSVRZX0VTUykgPworCQkgICAgSVdfTU9ERV9NQVNURVIgOiBJV19NT0RFX0FVVE87CisJCS8qIElXX01PREVfQVVUTyA9IDAgd2hpY2ggSSB0aG91Z2h0IGlzCisJCSAqIHRoZSBtb3N0IGxvZ2ljYWwgdmFsdWUgdG8gcmV0dXJuIGluIHRoaXMgY2FzZSAqLworCQljdXJyX3BvcyA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJfcG9zLAorCQkJCQkJZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCBpd2UsCisJCQkJCQlJV19FVl9VSU5UX0xFTik7CisKKwkJaXdlLT5jbWQgPSBTSU9DR0lXRlJFUTsKKwkJaXdlLT51LmZyZXEubSA9IGN1cnJfYnNzLT5jaGFubmVsOworCQlpd2UtPnUuZnJlcS5lID0gMDsKKwkJY3Vycl9wb3MgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyX3BvcywKKwkJCQkJCWV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgaXdlLAorCQkJCQkJSVdfRVZfRlJFUV9MRU4pOworCisJCWl3ZS0+Y21kID0gU0lPQ0dJV0VOQ09ERTsKKwkJaWYgKGN1cnJfYnNzLT5jYXBhICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCisJCQlpd2UtPnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOworCQllbHNlCisJCQlpd2UtPnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKKworCQlpd2UtPnUuZGF0YS5sZW5ndGggPSAwOworCQljdXJyX3BvcyA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJfcG9zLAorCQkJCQkJZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCBpd2UsCisJCQkJCQlOVUxMKTsKKworCQkvKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzICovCisJCWl3ZS0+Y21kID0gSVdFVlFVQUw7CisJCWl3ZS0+dS5xdWFsLm5vaXNlID0gMDsKKwkJaXdlLT51LnF1YWwudXBkYXRlZCA9CisJCSAgICBJV19RVUFMX05PSVNFX0lOVkFMSUQgfCBJV19RVUFMX0xFVkVMX1VQREFURUQ7CisJCWl3ZS0+dS5xdWFsLmxldmVsID0gKGN1cnJfYnNzLT5yc3NpICogMTAwIC8gNDIpOworCQlpZiAoaXdlLT51LnF1YWwubGV2ZWwgPiAxMDApCisJCQlpd2UtPnUucXVhbC5sZXZlbCA9IDEwMDsKKwkJaWYgKGF0NzZfaXNfaW50ZXJzaWwocHJpdi0+Ym9hcmRfdHlwZSkpCisJCQlpd2UtPnUucXVhbC5xdWFsID0gY3Vycl9ic3MtPmxpbmtfcXVhbDsKKwkJZWxzZSB7CisJCQlpd2UtPnUucXVhbC5xdWFsID0gMDsKKwkJCWl3ZS0+dS5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX0lOVkFMSUQ7CisJCX0KKwkJLyogQWRkIG5ldyB2YWx1ZSB0byBldmVudCAqLworCQljdXJyX3BvcyA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJfcG9zLAorCQkJCQkJZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCBpd2UsCisJCQkJCQlJV19FVl9RVUFMX0xFTik7CisKKwkJLyogUmF0ZTogc3R1ZmZpbmcgbXVsdGlwbGUgdmFsdWVzIGluIGEgc2luZ2xlIGV2ZW50IHJlcXVpcmVzCisJCSAqIGEgYml0IG1vcmUgb2YgbWFnaWMgLSBKZWFuIElJICovCisJCWN1cnJfdmFsID0gY3Vycl9wb3MgKyBJV19FVl9MQ1BfTEVOOworCisJCWl3ZS0+Y21kID0gU0lPQ0dJV1JBVEU7CisJCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLworCQlpd2UtPnUuYml0cmF0ZS5maXhlZCA9IDA7CisJCWl3ZS0+dS5iaXRyYXRlLmRpc2FibGVkID0gMDsKKwkJLyogTWF4IDggdmFsdWVzICovCisJCWZvciAoaSA9IDA7IGkgPCBjdXJyX2Jzcy0+cmF0ZXNfbGVuOyBpKyspIHsKKwkJCS8qIEJpdCByYXRlIGdpdmVuIGluIDUwMCBrYi9zIHVuaXRzICgrIDB4ODApICovCisJCQlpd2UtPnUuYml0cmF0ZS52YWx1ZSA9CisJCQkgICAgKChjdXJyX2Jzcy0+cmF0ZXNbaV0gJiAweDdmKSAqIDUwMDAwMCk7CisJCQkvKiBBZGQgbmV3IHZhbHVlIHRvIGV2ZW50ICovCisJCQljdXJyX3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJfcG9zLAorCQkJCQkJCWN1cnJfdmFsLAorCQkJCQkJCWV4dHJhICsKKwkJCQkJCQlJV19TQ0FOX01BWF9EQVRBLCBpd2UsCisJCQkJCQkJSVdfRVZfUEFSQU1fTEVOKTsKKwkJfQorCisJCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLworCQlpZiAoKGN1cnJfdmFsIC0gY3Vycl9wb3MpID4gSVdfRVZfTENQX0xFTikKKwkJCWN1cnJfcG9zID0gY3Vycl92YWw7CisKKwkJLyogbW9yZSBpbmZvcm1hdGlvbiBtYXkgYmUgc2VudCBiYWNrIHVzaW5nIElXRUNVU1RPTSAqLworCisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKworCWRhdGEtPmxlbmd0aCA9IChjdXJyX3BvcyAtIGV4dHJhKTsKKwlkYXRhLT5mbGFncyA9IDA7CisKKwlrZnJlZShpd2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9zZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NTSVdFU1NJRCAtICVzIiwgbmV0ZGV2LT5uYW1lLCBleHRyYSk7CisKKwlpZiAoZGF0YS0+ZmxhZ3MpIHsKKwkJbWVtY3B5KHByaXYtPmVzc2lkLCBleHRyYSwgZGF0YS0+bGVuZ3RoKTsKKwkJcHJpdi0+ZXNzaWRfc2l6ZSA9IGRhdGEtPmxlbmd0aDsKKwl9IGVsc2UKKwkJcHJpdi0+ZXNzaWRfc2l6ZSA9IDA7CS8qIFVzZSBhbnkgU1NJRCAqLworCisJcmV0dXJuIC1FSVdDT01NSVQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF9lc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAocHJpdi0+ZXNzaWRfc2l6ZSkgeworCQkvKiBub3QgdGhlIEFOWSBzc2lkIGluIHByaXYtPmVzc2lkICovCisJCWRhdGEtPmZsYWdzID0gMTsKKwkJZGF0YS0+bGVuZ3RoID0gcHJpdi0+ZXNzaWRfc2l6ZTsKKwkJbWVtY3B5KGV4dHJhLCBwcml2LT5lc3NpZCwgZGF0YS0+bGVuZ3RoKTsKKwl9IGVsc2UgeworCQkvKiB0aGUgQU5ZIHNzaWQgd2FzIHNwZWNpZmllZCAqLworCQlpZiAocHJpdi0+bWFjX3N0YXRlID09IE1BQ19DT05ORUNURUQgJiYgcHJpdi0+Y3Vycl9ic3MpIHsKKwkJCS8qIHJlcG9ydCB0aGUgU1NJRCB3ZSBoYXZlIGZvdW5kICovCisJCQlkYXRhLT5mbGFncyA9IDE7CisJCQlkYXRhLT5sZW5ndGggPSBwcml2LT5jdXJyX2Jzcy0+c3NpZF9sZW47CisJCQltZW1jcHkoZXh0cmEsIHByaXYtPmN1cnJfYnNzLT5zc2lkLCBkYXRhLT5sZW5ndGgpOworCQl9IGVsc2UgeworCQkJLyogcmVwb3J0IEFOWSBiYWNrICovCisJCQlkYXRhLT5mbGFncyA9IDA7CisJCQlkYXRhLT5sZW5ndGggPSAwOworCQl9CisJfQorCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdFU1NJRCAtICUuKnMiLCBuZXRkZXYtPm5hbWUsCisJCSBkYXRhLT5sZW5ndGgsIGV4dHJhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9zZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKmJpdHJhdGUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByZXQgPSAtRUlXQ09NTUlUOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NTSVdSQVRFIC0gJWQiLCBuZXRkZXYtPm5hbWUsCisJCSBiaXRyYXRlLT52YWx1ZSk7CisKKwlzd2l0Y2ggKGJpdHJhdGUtPnZhbHVlKSB7CisJY2FzZSAtMToKKwkJcHJpdi0+dHhyYXRlID0gVFhfUkFURV9BVVRPOworCQlicmVhazsJCS8qIGF1dG8gcmF0ZSAqLworCWNhc2UgMTAwMDAwMDoKKwkJcHJpdi0+dHhyYXRlID0gVFhfUkFURV8xTUJJVDsKKwkJYnJlYWs7CisJY2FzZSAyMDAwMDAwOgorCQlwcml2LT50eHJhdGUgPSBUWF9SQVRFXzJNQklUOworCQlicmVhazsKKwljYXNlIDU1MDAwMDA6CisJCXByaXYtPnR4cmF0ZSA9IFRYX1JBVEVfNV81TUJJVDsKKwkJYnJlYWs7CisJY2FzZSAxMTAwMDAwMDoKKwkJcHJpdi0+dHhyYXRlID0gVFhfUkFURV8xMU1CSVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgc3RydWN0IGl3X3BhcmFtICpiaXRyYXRlLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocHJpdi0+dHhyYXRlKSB7CisJCS8qIHJldHVybiBtYXggcmF0ZSBpZiBSQVRFX0FVVE8gKi8KKwljYXNlIFRYX1JBVEVfQVVUTzoKKwkJYml0cmF0ZS0+dmFsdWUgPSAxMTAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBUWF9SQVRFXzFNQklUOgorCQliaXRyYXRlLT52YWx1ZSA9IDEwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgVFhfUkFURV8yTUJJVDoKKwkJYml0cmF0ZS0+dmFsdWUgPSAyMDAwMDAwOworCQlicmVhazsKKwljYXNlIFRYX1JBVEVfNV81TUJJVDoKKwkJYml0cmF0ZS0+dmFsdWUgPSA1NTAwMDAwOworCQlicmVhazsKKwljYXNlIFRYX1JBVEVfMTFNQklUOgorCQliaXRyYXRlLT52YWx1ZSA9IDExMDAwMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKworCWJpdHJhdGUtPmZpeGVkID0gKHByaXYtPnR4cmF0ZSAhPSBUWF9SQVRFX0FVVE8pOworCWJpdHJhdGUtPmRpc2FibGVkID0gMDsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXUkFURSAtICVkIiwgbmV0ZGV2LT5uYW1lLAorCQkgYml0cmF0ZS0+dmFsdWUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfc2V0X3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByZXQgPSAtRUlXQ09NTUlUOworCWludCBydGhyID0gcnRzLT52YWx1ZTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DU0lXUlRTIC0gdmFsdWUgJWQgZGlzYWJsZWQgJXMiLAorCQkgbmV0ZGV2LT5uYW1lLCBydHMtPnZhbHVlLCAocnRzLT5kaXNhYmxlZCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKworCWlmIChydHMtPmRpc2FibGVkKQorCQlydGhyID0gTUFYX1JUU19USFJFU0hPTEQ7CisKKwlpZiAoKHJ0aHIgPCAwKSB8fCAocnRociA+IE1BWF9SVFNfVEhSRVNIT0xEKSkKKwkJcmV0ID0gLUVJTlZBTDsKKwllbHNlCisJCXByaXYtPnJ0c190aHJlc2hvbGQgPSBydGhyOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJcnRzLT52YWx1ZSA9IHByaXYtPnJ0c190aHJlc2hvbGQ7CisJcnRzLT5kaXNhYmxlZCA9IChydHMtPnZhbHVlID49IE1BWF9SVFNfVEhSRVNIT0xEKTsKKwlydHMtPmZpeGVkID0gMTsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBTSU9DR0lXUlRTIC0gdmFsdWUgJWQgZGlzYWJsZWQgJXMiLAorCQkgbmV0ZGV2LT5uYW1lLCBydHMtPnZhbHVlLCAocnRzLT5kaXNhYmxlZCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfaGFuZGxlcl9zZXRfZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByZXQgPSAtRUlXQ09NTUlUOworCWludCBmdGhyID0gZnJhZy0+dmFsdWU7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ1NJV0ZSQUcgLSB2YWx1ZSAlZCwgZGlzYWJsZWQgJXMiLAorCQkgbmV0ZGV2LT5uYW1lLCBmcmFnLT52YWx1ZSwKKwkJIChmcmFnLT5kaXNhYmxlZCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKworCWlmIChmcmFnLT5kaXNhYmxlZCkKKwkJZnRociA9IE1BWF9GUkFHX1RIUkVTSE9MRDsKKworCWlmICgoZnRociA8IE1JTl9GUkFHX1RIUkVTSE9MRCkgfHwgKGZ0aHIgPiBNQVhfRlJBR19USFJFU0hPTEQpKQorCQlyZXQgPSAtRUlOVkFMOworCWVsc2UKKwkJcHJpdi0+ZnJhZ190aHJlc2hvbGQgPSBmdGhyICYgfjB4MTsJLyogZ2V0IGFuIGV2ZW4gdmFsdWUgKi8KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlmcmFnLT52YWx1ZSA9IHByaXYtPmZyYWdfdGhyZXNob2xkOworCWZyYWctPmRpc2FibGVkID0gKGZyYWctPnZhbHVlID49IE1BWF9GUkFHX1RIUkVTSE9MRCk7CisJZnJhZy0+Zml4ZWQgPSAxOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdGUkFHIC0gdmFsdWUgJWQsIGRpc2FibGVkICVzIiwKKwkJIG5ldGRldi0+bmFtZSwgZnJhZy0+dmFsdWUsCisJCSAoZnJhZy0+ZGlzYWJsZWQpID8gInRydWUiIDogImZhbHNlIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3R4cG93KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IGl3X3BhcmFtICpwb3dlciwgY2hhciAqZXh0cmEpCit7CisJcG93ZXItPnZhbHVlID0gMTU7CisJcG93ZXItPmZpeGVkID0gMTsJLyogTm8gcG93ZXIgY29udHJvbCAqLworCXBvd2VyLT5kaXNhYmxlZCA9IDA7CisJcG93ZXItPmZsYWdzID0gSVdfVFhQT1dfREJNOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdUWFBPVyAtIHR4cG93ICVkIGRCbSIsIG5ldGRldi0+bmFtZSwKKwkJIHBvd2VyLT52YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogamFsOiBzaG9ydCByZXRyeSBpcyBoYW5kbGVkIGJ5IHRoZSBmaXJtd2FyZSAoYXQgbGVhc3QgMC45MC54KSwKKyAgIHdoaWxlIGxvbmcgcmV0cnkgaXMgbm90ICg/KSAqLworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfc2V0X3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IGl3X3BhcmFtICpyZXRyeSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJldCA9IC1FSVdDT01NSVQ7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ1NJV1JFVFJZIGRpc2FibGVkICVkIGZsYWdzIDB4JXggdmFsICVkIiwKKwkJIG5ldGRldi0+bmFtZSwgcmV0cnktPmRpc2FibGVkLCByZXRyeS0+ZmxhZ3MsIHJldHJ5LT52YWx1ZSk7CisKKwlpZiAoIXJldHJ5LT5kaXNhYmxlZCAmJiAocmV0cnktPmZsYWdzICYgSVdfUkVUUllfTElNSVQpKSB7CisJCWlmICgocmV0cnktPmZsYWdzICYgSVdfUkVUUllfTUlOKSB8fAorCQkgICAgIShyZXRyeS0+ZmxhZ3MgJiBJV19SRVRSWV9NQVgpKQorCQkJcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQgPSByZXRyeS0+dmFsdWU7CisJCWVsc2UKKwkJCXJldCA9IC1FSU5WQUw7CisJfSBlbHNlCisJCXJldCA9IC1FSU5WQUw7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBBZGFwdGVkIChyaXBwZWQpIGZyb20gYXRtZWwuYyAqLworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IGl3X3BhcmFtICpyZXRyeSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogU0lPQ0dJV1JFVFJZIiwgbmV0ZGV2LT5uYW1lKTsKKworCXJldHJ5LT5kaXNhYmxlZCA9IDA7CS8qIENhbid0IGJlIGRpc2FibGVkICovCisJcmV0cnktPmZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJcmV0cnktPnZhbHVlID0gcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfc2V0X2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICplbmNvZGluZywgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGluZGV4ID0gKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOworCWludCBsZW4gPSBlbmNvZGluZy0+bGVuZ3RoOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NTSVdFTkNPREUgLSBlbmMuZmxhZ3MgJTA4eCAiCisJCSAicG9pbnRlciAlcCBsZW4gJWQiLCBuZXRkZXYtPm5hbWUsIGVuY29kaW5nLT5mbGFncywKKwkJIGVuY29kaW5nLT5wb2ludGVyLCBlbmNvZGluZy0+bGVuZ3RoKTsKKwlhdDc2X2RiZyhEQkdfSU9DVEwsCisJCSAiJXM6IFNJT0NTSVdFTkNPREUgLSBvbGQgd2Vwc3RhdGU6IGVuYWJsZWQgJXMga2V5X2lkICVkICIKKwkJICJhdXRoX21vZGUgJXMiLCBuZXRkZXYtPm5hbWUsCisJCSAocHJpdi0+d2VwX2VuYWJsZWQpID8gInRydWUiIDogImZhbHNlIiwgcHJpdi0+d2VwX2tleV9pZCwKKwkJIChwcml2LT5hdXRoX21vZGUgPT0KKwkJICBXTEFOX0FVVEhfU0hBUkVEX0tFWSkgPyAicmVzdHJpY3RlZCIgOiAib3BlbiIpOworCisJLyogdGFrZSB0aGUgb2xkIGRlZmF1bHQga2V5IGlmIGluZGV4IGlzIGludmFsaWQgKi8KKwlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IFdFUF9LRVlTKSkKKwkJaW5kZXggPSBwcml2LT53ZXBfa2V5X2lkOworCisJaWYgKGxlbiA+IDApIHsKKwkJaWYgKGxlbiA+IFdFUF9MQVJHRV9LRVlfTEVOKQorCQkJbGVuID0gV0VQX0xBUkdFX0tFWV9MRU47CisKKwkJbWVtc2V0KHByaXYtPndlcF9rZXlzW2luZGV4XSwgMCwgV0VQX0tFWV9MRU4pOworCQltZW1jcHkocHJpdi0+d2VwX2tleXNbaW5kZXhdLCBleHRyYSwgbGVuKTsKKwkJcHJpdi0+d2VwX2tleXNfbGVuW2luZGV4XSA9IChsZW4gPD0gV0VQX1NNQUxMX0tFWV9MRU4pID8KKwkJICAgIFdFUF9TTUFMTF9LRVlfTEVOIDogV0VQX0xBUkdFX0tFWV9MRU47CisJCXByaXYtPndlcF9lbmFibGVkID0gMTsKKwl9CisKKwlwcml2LT53ZXBfa2V5X2lkID0gaW5kZXg7CisJcHJpdi0+d2VwX2VuYWJsZWQgPSAoKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkgPT0gMCk7CisKKwlpZiAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpCisJCXByaXYtPmF1dGhfbW9kZSA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOworCWlmIChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikKKwkJcHJpdi0+YXV0aF9tb2RlID0gV0xBTl9BVVRIX09QRU47CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsCisJCSAiJXM6IFNJT0NTSVdFTkNPREUgLSBuZXcgd2Vwc3RhdGU6IGVuYWJsZWQgJXMga2V5X2lkICVkICIKKwkJICJrZXlfbGVuICVkIGF1dGhfbW9kZSAlcyIsIG5ldGRldi0+bmFtZSwKKwkJIChwcml2LT53ZXBfZW5hYmxlZCkgPyAidHJ1ZSIgOiAiZmFsc2UiLCBwcml2LT53ZXBfa2V5X2lkICsgMSwKKwkJIHByaXYtPndlcF9rZXlzX2xlbltwcml2LT53ZXBfa2V5X2lkXSwKKwkJIChwcml2LT5hdXRoX21vZGUgPT0KKwkJICBXTEFOX0FVVEhfU0hBUkVEX0tFWSkgPyAicmVzdHJpY3RlZCIgOiAib3BlbiIpOworCisJcmV0dXJuIC1FSVdDT01NSVQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF9lbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgIHN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBpbmRleCA9IChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKKworCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gV0VQX0tFWVMpKQorCQlpbmRleCA9IHByaXYtPndlcF9rZXlfaWQ7CisKKwllbmNvZGluZy0+ZmxhZ3MgPQorCSAgICAocHJpdi0+YXV0aF9tb2RlID09IFdMQU5fQVVUSF9TSEFSRURfS0VZKSA/CisJICAgIElXX0VOQ09ERV9SRVNUUklDVEVEIDogSVdfRU5DT0RFX09QRU47CisKKwlpZiAoIXByaXYtPndlcF9lbmFibGVkKQorCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOworCisJaWYgKGVuY29kaW5nLT5wb2ludGVyKSB7CisJCWVuY29kaW5nLT5sZW5ndGggPSBwcml2LT53ZXBfa2V5c19sZW5baW5kZXhdOworCisJCW1lbWNweShleHRyYSwgcHJpdi0+d2VwX2tleXNbaW5kZXhdLCBwcml2LT53ZXBfa2V5c19sZW5baW5kZXhdKTsKKworCQllbmNvZGluZy0+ZmxhZ3MgfD0gKGluZGV4ICsgMSk7CisJfQorCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdFTkNPREUgLSBlbmMuZmxhZ3MgJTA4eCAiCisJCSAicG9pbnRlciAlcCBsZW4gJWQiLCBuZXRkZXYtPm5hbWUsIGVuY29kaW5nLT5mbGFncywKKwkJIGVuY29kaW5nLT5wb2ludGVyLCBlbmNvZGluZy0+bGVuZ3RoKTsKKwlhdDc2X2RiZyhEQkdfSU9DVEwsCisJCSAiJXM6IFNJT0NHSVdFTkNPREUgLSB3ZXBzdGF0ZTogZW5hYmxlZCAlcyBrZXlfaWQgJWQgIgorCQkgImtleV9sZW4gJWQgYXV0aF9tb2RlICVzIiwgbmV0ZGV2LT5uYW1lLAorCQkgKHByaXYtPndlcF9lbmFibGVkKSA/ICJ0cnVlIiA6ICJmYWxzZSIsIHByaXYtPndlcF9rZXlfaWQgKyAxLAorCQkgcHJpdi0+d2VwX2tleXNfbGVuW3ByaXYtPndlcF9rZXlfaWRdLAorCQkgKHByaXYtPmF1dGhfbW9kZSA9PQorCQkgIFdMQU5fQVVUSF9TSEFSRURfS0VZKSA/ICJyZXN0cmljdGVkIiA6ICJvcGVuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2hhbmRsZXJfc2V0X3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IGl3X3BhcmFtICpwcnEsIGNoYXIgKmV4dHJhKQoreworCWludCBlcnIgPSAtRUlXQ09NTUlUOworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLAorCQkgIiVzOiBTSU9DU0lXUE9XRVIgLSBkaXNhYmxlZCAlcyBmbGFncyAweCV4IHZhbHVlIDB4JXgiLAorCQkgbmV0ZGV2LT5uYW1lLCAocHJxLT5kaXNhYmxlZCkgPyAidHJ1ZSIgOiAiZmFsc2UiLCBwcnEtPmZsYWdzLAorCQkgcHJxLT52YWx1ZSk7CisKKwlpZiAocHJxLT5kaXNhYmxlZCkKKwkJcHJpdi0+cG1fbW9kZSA9IEFUNzZfUE1fT0ZGOworCWVsc2UgeworCQlzd2l0Y2ggKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9NT0RFKSB7CisJCWNhc2UgSVdfUE9XRVJfQUxMX1I6CisJCWNhc2UgSVdfUE9XRVJfT046CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJaWYgKHBycS0+ZmxhZ3MgJiBJV19QT1dFUl9QRVJJT0QpCisJCQlwcml2LT5wbV9wZXJpb2QgPSBwcnEtPnZhbHVlOworCisJCWlmIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfVElNRU9VVCkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlwcml2LT5wbV9tb2RlID0gQVQ3Nl9QTV9PTjsKKwl9CitleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19oYW5kbGVyX2dldF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBpd19wYXJhbSAqcG93ZXIsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJcG93ZXItPmRpc2FibGVkID0gKHByaXYtPnBtX21vZGUgPT0gQVQ3Nl9QTV9PRkYpOworCWlmICghcG93ZXItPmRpc2FibGVkKSB7CisJCXBvd2VyLT5mbGFncyA9IElXX1BPV0VSX1BFUklPRCB8IElXX1BPV0VSX0FMTF9SOworCQlwb3dlci0+dmFsdWUgPSBwcml2LT5wbV9wZXJpb2Q7CisJfQorCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IFNJT0NHSVdQT1dFUiAtICVzIGZsYWdzIDB4JXggdmFsdWUgMHgleCIsCisJCSBuZXRkZXYtPm5hbWUsIHBvd2VyLT5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIsCisJCSBwb3dlci0+ZmxhZ3MsIHBvd2VyLT52YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByaXZhdGUgSU9DVExTCisgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9pd19zZXRfc2hvcnRfcHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpuYW1lLAorCQkJCSAgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCB2YWwgPSAqKChpbnQgKiluYW1lKTsKKwlpbnQgcmV0ID0gLUVJV0NPTU1JVDsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBBVDc2X1NFVF9TSE9SVF9QUkVBTUJMRSwgJWQiLAorCQkgbmV0ZGV2LT5uYW1lLCB2YWwpOworCisJaWYgKHZhbCA8IFBSRUFNQkxFX1RZUEVfTE9ORyB8fCB2YWwgPiBQUkVBTUJMRV9UWVBFX0FVVE8pCisJCXJldCA9IC1FSU5WQUw7CisJZWxzZQorCQlwcml2LT5wcmVhbWJsZV90eXBlID0gdmFsOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2dldF9zaG9ydF9wcmVhbWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzbnByaW50Zih3cnF1LT5uYW1lLCBzaXplb2Yod3JxdS0+bmFtZSksICIlcyAoJWQpIiwKKwkJIHByZWFtYmxlc1twcml2LT5wcmVhbWJsZV90eXBlXSwgcHJpdi0+cHJlYW1ibGVfdHlwZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19zZXRfZGVidWcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwljaGFyICpwdHI7CisJdTMyIHZhbDsKKworCWlmIChkYXRhLT5sZW5ndGggPiAwKSB7CisJCXZhbCA9IHNpbXBsZV9zdHJ0b2woZXh0cmEsICZwdHIsIDApOworCisJCWlmIChwdHIgPT0gZXh0cmEpCisJCQl2YWwgPSBEQkdfREVGQVVMVFM7CisKKwkJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IEFUNzZfU0VUX0RFQlVHIGlucHV0ICVkOiAlcyAtPiAweCV4IiwKKwkJCSBuZXRkZXYtPm5hbWUsIGRhdGEtPmxlbmd0aCwgZXh0cmEsIHZhbCk7CisJfSBlbHNlCisJCXZhbCA9IERCR19ERUZBVUxUUzsKKworCWF0NzZfZGJnKERCR19JT0NUTCwgIiVzOiBBVDc2X1NFVF9ERUJVRywgb2xkIDB4JXgsIG5ldyAweCV4IiwKKwkJIG5ldGRldi0+bmFtZSwgYXQ3Nl9kZWJ1ZywgdmFsKTsKKworCS8qIGphbDogc29tZSBtb3JlIG91dHB1dCB0byBwaW4gZG93biBsb2NrdXBzICovCisJYXQ3Nl9kYmcoREJHX0lPQ1RMLCAiJXM6IG5ldGlmIHJ1bm5pbmcgJWQgcXVldWVfc3RvcHBlZCAlZCAiCisJCSAiY2Fycmllcl9vayAlZCIsIG5ldGRldi0+bmFtZSwgbmV0aWZfcnVubmluZyhuZXRkZXYpLAorCQkgbmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpLCBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpOworCisJYXQ3Nl9kZWJ1ZyA9IHZhbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfZ2V0X2RlYnVnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXNucHJpbnRmKHdycXUtPm5hbWUsIHNpemVvZih3cnF1LT5uYW1lKSwgIjB4JTA4eCIsIGF0NzZfZGVidWcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfc2V0X3Bvd2Vyc2F2ZV9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqbmFtZSwKKwkJCQkgICAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgdmFsID0gKigoaW50ICopbmFtZSk7CisJaW50IHJldCA9IC1FSVdDT01NSVQ7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogQVQ3Nl9TRVRfUE9XRVJTQVZFX01PREUsICVkICglcykiLAorCQkgbmV0ZGV2LT5uYW1lLCB2YWwsCisJCSB2YWwgPT0gQVQ3Nl9QTV9PRkYgPyAiYWN0aXZlIiA6IHZhbCA9PSBBVDc2X1BNX09OID8gInNhdmUiIDoKKwkJIHZhbCA9PSBBVDc2X1BNX1NNQVJUID8gInNtYXJ0IHNhdmUiIDogIjxpbnZhbGlkPiIpOworCWlmICh2YWwgPCBBVDc2X1BNX09GRiB8fCB2YWwgPiBBVDc2X1BNX1NNQVJUKQorCQlyZXQgPSAtRUlOVkFMOworCWVsc2UKKwkJcHJpdi0+cG1fbW9kZSA9IHZhbDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19nZXRfcG93ZXJzYXZlX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCAqcGFyYW0gPSAoaW50ICopZXh0cmE7CisKKwlwYXJhbVswXSA9IHByaXYtPnBtX21vZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19zZXRfc2Nhbl90aW1lcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqbmFtZSwKKwkJCQkgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBtaW50ID0gKigoaW50ICopbmFtZSk7CisJaW50IG1heHQgPSAqKChpbnQgKiluYW1lICsgMSk7CisJaW50IHJldCA9IC1FSVdDT01NSVQ7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogQVQ3Nl9TRVRfU0NBTl9USU1FUyAtIG1pbiAlZCBtYXggJWQiLAorCQkgbmV0ZGV2LT5uYW1lLCBtaW50LCBtYXh0KTsKKwlpZiAobWludCA8PSAwIHx8IG1heHQgPD0gMCB8fCBtaW50ID4gbWF4dCkKKwkJcmV0ID0gLUVJTlZBTDsKKwllbHNlIHsKKwkJcHJpdi0+c2Nhbl9taW5fdGltZSA9IG1pbnQ7CisJCXByaXYtPnNjYW5fbWF4X3RpbWUgPSBtYXh0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9pd19nZXRfc2Nhbl90aW1lcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCAqcGFyYW0gPSAoaW50ICopZXh0cmE7CisKKwlwYXJhbVswXSA9IHByaXYtPnNjYW5fbWluX3RpbWU7CisJcGFyYW1bMV0gPSBwcml2LT5zY2FuX21heF90aW1lOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfaXdfc2V0X3NjYW5fbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpuYW1lLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgdmFsID0gKigoaW50ICopbmFtZSk7CisJaW50IHJldCA9IC1FSVdDT01NSVQ7CisKKwlhdDc2X2RiZyhEQkdfSU9DVEwsICIlczogQVQ3Nl9TRVRfU0NBTl9NT0RFIC0gbW9kZSAlcyIsCisJCSBuZXRkZXYtPm5hbWUsICh2YWwgPSBTQ0FOX1RZUEVfQUNUSVZFKSA/ICJhY3RpdmUiIDoKKwkJICh2YWwgPSBTQ0FOX1RZUEVfUEFTU0lWRSkgPyAicGFzc2l2ZSIgOiAiPGludmFsaWQ+Iik7CisKKwlpZiAodmFsICE9IFNDQU5fVFlQRV9BQ1RJVkUgJiYgdmFsICE9IFNDQU5fVFlQRV9QQVNTSVZFKQorCQlyZXQgPSAtRUlOVkFMOworCWVsc2UKKwkJcHJpdi0+c2Nhbl9tb2RlID0gdmFsOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X2l3X2dldF9zY2FuX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50ICpwYXJhbSA9IChpbnQgKilleHRyYTsKKworCXBhcmFtWzBdID0gcHJpdi0+c2Nhbl9tb2RlOworCXJldHVybiAwOworfQorCisjZGVmaW5lIEFUNzZfU0VUX0hBTkRMRVIoaCwgZikgW2ggLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgZgorCisvKiBTdGFuZGFyZCB3aXJlbGVzcyBoYW5kbGVycyAqLworc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgYXQ3Nl9oYW5kbGVyc1tdID0geworCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV0NPTU1JVCwgYXQ3Nl9pd19oYW5kbGVyX2NvbW1pdCksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXTkFNRSwgYXQ3Nl9pd19oYW5kbGVyX2dldF9uYW1lKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdGUkVRLCBhdDc2X2l3X2hhbmRsZXJfc2V0X2ZyZXEpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV0ZSRVEsIGF0NzZfaXdfaGFuZGxlcl9nZXRfZnJlcSksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXTU9ERSwgYXQ3Nl9pd19oYW5kbGVyX3NldF9tb2RlKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdNT0RFLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X21vZGUpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV1JBTkdFLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3JhbmdlKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdTUFksIGF0NzZfaXdfaGFuZGxlcl9zZXRfc3B5KSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdTUFksIGF0NzZfaXdfaGFuZGxlcl9nZXRfc3B5KSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdUSFJTUFksIGF0NzZfaXdfaGFuZGxlcl9zZXRfdGhyc3B5KSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdUSFJTUFksIGF0NzZfaXdfaGFuZGxlcl9nZXRfdGhyc3B5KSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdBUCwgYXQ3Nl9pd19oYW5kbGVyX3NldF93YXApLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV0FQLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3dhcCksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXU0NBTiwgYXQ3Nl9pd19oYW5kbGVyX3NldF9zY2FuKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdTQ0FOLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3NjYW4pLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV0VTU0lELCBhdDc2X2l3X2hhbmRsZXJfc2V0X2Vzc2lkKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdFU1NJRCwgYXQ3Nl9pd19oYW5kbGVyX2dldF9lc3NpZCksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXUkFURSwgYXQ3Nl9pd19oYW5kbGVyX3NldF9yYXRlKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdSQVRFLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3JhdGUpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV1JUUywgYXQ3Nl9pd19oYW5kbGVyX3NldF9ydHMpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV1JUUywgYXQ3Nl9pd19oYW5kbGVyX2dldF9ydHMpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ1NJV0ZSQUcsIGF0NzZfaXdfaGFuZGxlcl9zZXRfZnJhZyksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXRlJBRywgYXQ3Nl9pd19oYW5kbGVyX2dldF9mcmFnKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdUWFBPVywgYXQ3Nl9pd19oYW5kbGVyX2dldF90eHBvdyksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DU0lXUkVUUlksIGF0NzZfaXdfaGFuZGxlcl9zZXRfcmV0cnkpLAorCUFUNzZfU0VUX0hBTkRMRVIoU0lPQ0dJV1JFVFJZLCBhdDc2X2l3X2hhbmRsZXJfZ2V0X3JldHJ5KSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdFTkNPREUsIGF0NzZfaXdfaGFuZGxlcl9zZXRfZW5jb2RlKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NHSVdFTkNPREUsIGF0NzZfaXdfaGFuZGxlcl9nZXRfZW5jb2RlKSwKKwlBVDc2X1NFVF9IQU5ETEVSKFNJT0NTSVdQT1dFUiwgYXQ3Nl9pd19oYW5kbGVyX3NldF9wb3dlciksCisJQVQ3Nl9TRVRfSEFORExFUihTSU9DR0lXUE9XRVIsIGF0NzZfaXdfaGFuZGxlcl9nZXRfcG93ZXIpCit9OworCisjZGVmaW5lIEFUNzZfU0VUX1BSSVYoaCwgZikgW2ggLSBTSU9DSVdGSVJTVFBSSVZdID0gKGl3X2hhbmRsZXIpIGYKKworLyogUHJpdmF0ZSB3aXJlbGVzcyBoYW5kbGVycyAqLworc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgYXQ3Nl9wcml2X2hhbmRsZXJzW10gPSB7CisJQVQ3Nl9TRVRfUFJJVihBVDc2X1NFVF9TSE9SVF9QUkVBTUJMRSwgYXQ3Nl9pd19zZXRfc2hvcnRfcHJlYW1ibGUpLAorCUFUNzZfU0VUX1BSSVYoQVQ3Nl9HRVRfU0hPUlRfUFJFQU1CTEUsIGF0NzZfaXdfZ2V0X3Nob3J0X3ByZWFtYmxlKSwKKwlBVDc2X1NFVF9QUklWKEFUNzZfU0VUX0RFQlVHLCBhdDc2X2l3X3NldF9kZWJ1ZyksCisJQVQ3Nl9TRVRfUFJJVihBVDc2X0dFVF9ERUJVRywgYXQ3Nl9pd19nZXRfZGVidWcpLAorCUFUNzZfU0VUX1BSSVYoQVQ3Nl9TRVRfUE9XRVJTQVZFX01PREUsIGF0NzZfaXdfc2V0X3Bvd2Vyc2F2ZV9tb2RlKSwKKwlBVDc2X1NFVF9QUklWKEFUNzZfR0VUX1BPV0VSU0FWRV9NT0RFLCBhdDc2X2l3X2dldF9wb3dlcnNhdmVfbW9kZSksCisJQVQ3Nl9TRVRfUFJJVihBVDc2X1NFVF9TQ0FOX1RJTUVTLCBhdDc2X2l3X3NldF9zY2FuX3RpbWVzKSwKKwlBVDc2X1NFVF9QUklWKEFUNzZfR0VUX1NDQU5fVElNRVMsIGF0NzZfaXdfZ2V0X3NjYW5fdGltZXMpLAorCUFUNzZfU0VUX1BSSVYoQVQ3Nl9TRVRfU0NBTl9NT0RFLCBhdDc2X2l3X3NldF9zY2FuX21vZGUpLAorCUFUNzZfU0VUX1BSSVYoQVQ3Nl9HRVRfU0NBTl9NT0RFLCBhdDc2X2l3X2dldF9zY2FuX21vZGUpLAorfTsKKworLyogTmFtZXMgYW5kIGFyZ3VtZW50cyBvZiBwcml2YXRlIHdpcmVsZXNzIGhhbmRsZXJzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyBhdDc2X3ByaXZfYXJnc1tdID0geworCS8qIDAgLSBsb25nLCAxIC0gc2hvcnQgKi8KKwl7QVQ3Nl9TRVRfU0hPUlRfUFJFQU1CTEUsCisJIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAic2V0X3ByZWFtYmxlIn0sCisKKwl7QVQ3Nl9HRVRfU0hPUlRfUFJFQU1CTEUsCisJIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMTAsICJnZXRfcHJlYW1ibGUifSwKKworCS8qIHdlIG11c3QgcGFzcyB0aGUgbmV3IGRlYnVnIG1hc2sgYXMgYSBzdHJpbmcsIGJlY2F1c2UgaXdwcml2IGNhbm5vdAorCSAqIHBhcnNlIGhleCBudW1iZXJzIHN0YXJ0aW5nIHdpdGggMHggOi0oICAqLworCXtBVDc2X1NFVF9ERUJVRywKKwkgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMCwgMCwgInNldF9kZWJ1ZyJ9LAorCisJe0FUNzZfR0VUX0RFQlVHLAorCSAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEwLCAiZ2V0X2RlYnVnIn0sCisKKwkvKiAxIC0gYWN0aXZlLCAyIC0gcG93ZXIgc2F2ZSwgMyAtIHNtYXJ0IHBvd2VyIHNhdmUgKi8KKwl7QVQ3Nl9TRVRfUE9XRVJTQVZFX01PREUsCisJIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAic2V0X3Bvd2Vyc2F2ZSJ9LAorCisJe0FUNzZfR0VUX1BPV0VSU0FWRV9NT0RFLAorCSAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgImdldF9wb3dlcnNhdmUifSwKKworCS8qIG1pbl9jaGFubmVsX3RpbWUsIG1heF9jaGFubmVsX3RpbWUgKi8KKwl7QVQ3Nl9TRVRfU0NBTl9USU1FUywKKwkgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDIsIDAsICJzZXRfc2Nhbl90aW1lcyJ9LAorCisJe0FUNzZfR0VUX1NDQU5fVElNRVMsCisJIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAyLCAiZ2V0X3NjYW5fdGltZXMifSwKKworCS8qIDAgLSBhY3RpdmUsIDEgLSBwYXNzaXZlIHNjYW4gKi8KKwl7QVQ3Nl9TRVRfU0NBTl9NT0RFLAorCSBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgInNldF9zY2FuX21vZGUifSwKKworCXtBVDc2X0dFVF9TQ0FOX01PREUsCisJIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAiZ2V0X3NjYW5fbW9kZSJ9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBhdDc2X2hhbmRsZXJfZGVmID0geworCS5udW1fc3RhbmRhcmQgPSBBUlJBWV9TSVpFKGF0NzZfaGFuZGxlcnMpLAorCS5udW1fcHJpdmF0ZSA9IEFSUkFZX1NJWkUoYXQ3Nl9wcml2X2hhbmRsZXJzKSwKKwkubnVtX3ByaXZhdGVfYXJncyA9IEFSUkFZX1NJWkUoYXQ3Nl9wcml2X2FyZ3MpLAorCS5zdGFuZGFyZCA9IGF0NzZfaGFuZGxlcnMsCisJLnByaXZhdGUgPSBhdDc2X3ByaXZfaGFuZGxlcnMsCisJLnByaXZhdGVfYXJncyA9IGF0NzZfcHJpdl9hcmdzLAorCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBhdDc2X2dldF93aXJlbGVzc19zdGF0cywKK307CisKK3N0YXRpYyBjb25zdCB1OCBzbmFwc2lnW10gPSB7IDB4YWEsIDB4YWEsIDB4MDMgfTsKKworLyogUkZDIDEwNDIgZW5jYXBzdWxhdGVzIEV0aGVybmV0IGZyYW1lcyBpbiA4MDIuMiBTTkFQICgweGFhLCAweGFhLCAweDAzKSB3aXRoCisgKiBhIFNOQVAgT0lEIG9mIDAgKDB4MDAsIDB4MDAsIDB4MDApICovCitzdGF0aWMgY29uc3QgdTggcmZjMTA0MnNpZ1tdID0geyAweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweDAwIH07CisKK3N0YXRpYyBpbnQgYXQ3Nl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgd2xlbjsKKwlpbnQgc3VibWl0X2xlbjsKKwlzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIgKnR4X2J1ZmZlciA9IHByaXYtPmJ1bGtfb3V0X2J1ZmZlcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaTgwMl8xMV9oZHIgPQorCSAgICAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKil0eF9idWZmZXItPnBhY2tldDsKKwl1OCAqcGF5bG9hZCA9IGk4MDJfMTFfaGRyLT5wYXlsb2FkOworCXN0cnVjdCBldGhoZHIgKmVoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CisKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIGNhbGxlZCB3aGlsZSBuZXRkZXYgaXMgc3RvcHBlZFxuIiwKKwkJICAgICAgIG5ldGRldi0+bmFtZSwgX19mdW5jX18pOworCQkvKiBza2lwIHRoaXMgcGFja2V0ICovCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHByaXYtPnR4X3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcyBjYWxsZWQgd2hpbGUgdHggdXJiIGlzIHBlbmRpbmdcbiIsCisJCSAgICAgICBuZXRkZXYtPm5hbWUsIF9fZnVuY19fKTsKKwkJLyogc2tpcCB0aGlzIHBhY2tldCAqLworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAwOworCX0KKworCWlmIChza2ItPmxlbiA8IEVUSF9ITEVOKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBza2IgdG9vIHNob3J0ICglZClcbiIsCisJCSAgICAgICBuZXRkZXYtPm5hbWUsIF9fZnVuY19fLCBza2ItPmxlbik7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYXQ3Nl9sZWR0cmlnX3R4X2FjdGl2aXR5KCk7CS8qIHRlbGwgbGVkdHJpZ2dlciB3ZSBzZW5kIGEgcGFja2V0ICovCisKKwkvKiB3ZSBjYW4gZ2V0IHJpZCBvZiBtZW1jcHkgaWYgd2Ugc2V0IG5ldGRldi0+aGFyZF9oZWFkZXJfbGVuIHRvCisJICAgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UsIGJ1dCB3ZSB3b3VsZCBuZWVkIHRvIGtlZXAgdGhlIHNrYiBhcm91bmQgKi8KKworCWlmIChudG9ocyhlaC0+aF9wcm90bykgPD0gRVRIX0RBVEFfTEVOKSB7CisJCS8qIHRoaXMgaXMgYSA4MDIuMyBwYWNrZXQgKi8KKwkJaWYgKHNrYi0+bGVuID49IEVUSF9ITEVOICsgc2l6ZW9mKHJmYzEwNDJzaWcpCisJCSAgICAmJiBza2ItPmRhdGFbRVRIX0hMRU5dID09IHJmYzEwNDJzaWdbMF0KKwkJICAgICYmIHNrYi0+ZGF0YVtFVEhfSExFTiArIDFdID09IHJmYzEwNDJzaWdbMV0pIHsKKwkJCS8qIGhpZ2hlciBsYXllciBkZWxpdmVyZWQgU05BUCBoZWFkZXIgLSBrZWVwIGl0ICovCisJCQltZW1jcHkocGF5bG9hZCwgc2tiLT5kYXRhICsgRVRIX0hMRU4sCisJCQkgICAgICAgc2tiLT5sZW4gLSBFVEhfSExFTik7CisJCQl3bGVuID0gSUVFRTgwMjExXzNBRERSX0xFTiArIHNrYi0+bGVuIC0gRVRIX0hMRU47CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkcm9wcGluZyBub24tU05BUCA4MDIuMiBwYWNrZXQgIgorCQkJICAgICAgICIoRFNBUCAweCUwMnggU1NBUCAweCUwMnggY250cmwgMHglMDJ4KVxuIiwKKwkJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHNrYi0+ZGF0YVtFVEhfSExFTl0sCisJCQkgICAgICAgc2tiLT5kYXRhW0VUSF9ITEVOICsgMV0sCisJCQkgICAgICAgc2tiLT5kYXRhW0VUSF9ITEVOICsgMl0pOworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQkvKiBhZGQgUkZDIDEwNDIgaGVhZGVyIGluIGZyb250ICovCisJCW1lbWNweShwYXlsb2FkLCByZmMxMDQyc2lnLCBzaXplb2YocmZjMTA0MnNpZykpOworCQltZW1jcHkocGF5bG9hZCArIHNpemVvZihyZmMxMDQyc2lnKSwgJmVoLT5oX3Byb3RvLAorCQkgICAgICAgc2tiLT5sZW4gLSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3Byb3RvKSk7CisJCXdsZW4gPSBJRUVFODAyMTFfM0FERFJfTEVOICsgc2l6ZW9mKHJmYzEwNDJzaWcpICsgc2tiLT5sZW4gLQorCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9wcm90byk7CisJfQorCisJLyogbWFrZSB3aXJlbGVzcyBoZWFkZXIgKi8KKwlpODAyXzExX2hkci0+ZnJhbWVfY3RsID0KKwkgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfAorCQkJKHByaXYtPndlcF9lbmFibGVkID8gSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEIDogMCkgfAorCQkJKHByaXYtPml3X21vZGUgPT0KKwkJCSBJV19NT0RFX0lORlJBID8gSUVFRTgwMjExX0ZDVExfVE9EUyA6IDApKTsKKworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MpIHsKKwkJbWVtY3B5KGk4MDJfMTFfaGRyLT5hZGRyMSwgZWgtPmhfZGVzdCwgRVRIX0FMRU4pOworCQltZW1jcHkoaTgwMl8xMV9oZHItPmFkZHIyLCBlaC0+aF9zb3VyY2UsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGk4MDJfMTFfaGRyLT5hZGRyMywgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKTsKKwl9IGVsc2UgaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSkgeworCQltZW1jcHkoaTgwMl8xMV9oZHItPmFkZHIxLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOworCQltZW1jcHkoaTgwMl8xMV9oZHItPmFkZHIyLCBlaC0+aF9zb3VyY2UsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGk4MDJfMTFfaGRyLT5hZGRyMywgZWgtPmhfZGVzdCwgRVRIX0FMRU4pOworCX0KKworCWk4MDJfMTFfaGRyLT5kdXJhdGlvbl9pZCA9IGNwdV90b19sZTE2KDApOworCWk4MDJfMTFfaGRyLT5zZXFfY3RsID0gY3B1X3RvX2xlMTYoMCk7CisKKwkvKiBzZXR1cCAnQXRtZWwnIGhlYWRlciAqLworCXR4X2J1ZmZlci0+d2xlbmd0aCA9IGNwdV90b19sZTE2KHdsZW4pOworCXR4X2J1ZmZlci0+dHhfcmF0ZSA9IHByaXYtPnR4cmF0ZTsKKwkvKiBmb3IgYnJvYWRjYXN0IGRlc3RpbmF0aW9uIGFkZHJlc3NlcywgdGhlIGZpcm13YXJlIDAuMTAwLngKKwkgICBzZWVtcyB0byBjaG9vc2UgdGhlIGhpZ2hlc3QgcmF0ZSBzZXQgd2l0aCBDTURfU1RBUlRVUCBpbgorCSAgIGJhc2ljX3JhdGVfc2V0IHJlcGxhY2luZyB0aGlzIHZhbHVlICovCisKKwltZW1zZXQodHhfYnVmZmVyLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKHR4X2J1ZmZlci0+cmVzZXJ2ZWQpKTsKKworCXR4X2J1ZmZlci0+cGFkZGluZyA9IGF0NzZfY2FsY19wYWRkaW5nKHdsZW4pOworCXN1Ym1pdF9sZW4gPSB3bGVuICsgQVQ3Nl9UWF9IRFJMRU4gKyB0eF9idWZmZXItPnBhZGRpbmc7CisKKwlhdDc2X2RiZyhEQkdfVFhfREFUQV9DT05URU5ULCAiJXMgc2tiLT5kYXRhICVzIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgaGV4MnN0cihza2ItPmRhdGEsIDMyKSk7CisJYXQ3Nl9kYmcoREJHX1RYX0RBVEEsICIlcyB0eDogd2xlbiAweCV4IHBhZCAweCV4IHJhdGUgJWQgaGRyICVzIiwKKwkJIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIGxlMTZfdG9fY3B1KHR4X2J1ZmZlci0+d2xlbmd0aCksCisJCSB0eF9idWZmZXItPnBhZGRpbmcsIHR4X2J1ZmZlci0+dHhfcmF0ZSwKKwkJIGhleDJzdHIoaTgwMl8xMV9oZHIsIHNpemVvZigqaTgwMl8xMV9oZHIpKSk7CisJYXQ3Nl9kYmcoREJHX1RYX0RBVEFfQ09OVEVOVCwgIiVzIHBheWxvYWQgJXMiLCBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBoZXgyc3RyKHBheWxvYWQsIDQ4KSk7CisKKwkvKiBzZW5kIHN0dWZmICovCisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJdXNiX2ZpbGxfYnVsa191cmIocHJpdi0+dHhfdXJiLCBwcml2LT51ZGV2LCBwcml2LT50eF9waXBlLCB0eF9idWZmZXIsCisJCQkgIHN1Ym1pdF9sZW4sIGF0NzZfdHhfY2FsbGJhY2ssIHByaXYpOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnR4X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCkgeworCQlzdGF0cy0+dHhfZXJyb3JzKys7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGluIHR4IHN1Ym1pdCB1cmI6ICVkXG4iLAorCQkgICAgICAgbmV0ZGV2LT5uYW1lLCByZXQpOworCQlpZiAocmV0ID09IC1FSU5WQUwpCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IC1FSU5WQUw6IHR4IHVyYiAlcCBoY3ByaXYgJXAgY29tcGxldGUgJXBcbiIsCisJCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBwcml2LT50eF91cmIsCisJCQkgICAgICAgcHJpdi0+dHhfdXJiLT5oY3ByaXYsIHByaXYtPnR4X3VyYi0+Y29tcGxldGUpOworCX0gZWxzZSB7CisJCXN0YXRzLT50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKCFwcml2KQorCQlyZXR1cm47CisJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LCAidHggdGltZW91dC4iKTsKKworCXVzYl91bmxpbmtfdXJiKHByaXYtPnR4X3VyYik7CisJcHJpdi0+c3RhdHMudHhfZXJyb3JzKys7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zdWJtaXRfcnhfdXJiKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlpbnQgc2l6ZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+cnhfc2tiOworCisJaWYgKCFwcml2LT5yeF91cmIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IHByaXYtPnJ4X3VyYiBpcyBOVUxMXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICghc2tiKSB7CisJCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdDc2X3J4X2J1ZmZlcikpOworCQlpZiAoIXNrYikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlIHJ4IHNrYnVmZlxuIiwKKwkJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlwcml2LT5yeF9za2IgPSBza2I7CisJfSBlbHNlIHsKKwkJc2tiX3B1c2goc2tiLCBza2JfaGVhZHJvb20oc2tiKSk7CisJCXNrYl90cmltKHNrYiwgMCk7CisJfQorCisJc2l6ZSA9IHNrYl90YWlscm9vbShza2IpOworCXVzYl9maWxsX2J1bGtfdXJiKHByaXYtPnJ4X3VyYiwgcHJpdi0+dWRldiwgcHJpdi0+cnhfcGlwZSwKKwkJCSAgc2tiX3B1dChza2IsIHNpemUpLCBzaXplLCBhdDc2X3J4X2NhbGxiYWNrLCBwcml2KTsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5yeF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPT0gLUVOT0RFVikKKwkJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwKKwkJCQkgInVzYl9zdWJtaXRfdXJiIHJldHVybmVkIC1FTk9ERVYiKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcngsIHVzYl9zdWJtaXRfdXJiIGZhaWxlZDogJWRcbiIsCisJCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCX0KKworZXhpdDoKKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVOT0RFVikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHN1Ym1pdCByeCB1cmIgLSBwbGVhc2UgdW5sb2FkIHRoZSAiCisJCSAgICAgICAiZHJpdmVyIGFuZC9vciBwb3dlciBjeWNsZSB0aGUgZGV2aWNlXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IHJldCA9IDA7CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzKCk6IGVudHJ5IiwgX19mdW5jX18pOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcHJpdi0+bXR4KSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCS8qIGlmIG5ldGRldi0+ZGV2X2FkZHIgIT0gcHJpdi0+bWFjX2FkZHIgd2UgbXVzdAorCSAgIHNldCB0aGUgbWFjIGFkZHJlc3MgaW4gdGhlIGRldmljZSAhICovCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihuZXRkZXYtPmRldl9hZGRyLCBwcml2LT5tYWNfYWRkcikpIHsKKwkJaWYgKGF0NzZfYWRkX21hY19hZGRyZXNzKHByaXYsIG5ldGRldi0+ZGV2X2FkZHIpID49IDApCisJCQlhdDc2X2RiZyhEQkdfUFJPR1JFU1MsICIlczogc2V0IG5ldyBNQUMgYWRkciAlcyIsCisJCQkJIG5ldGRldi0+bmFtZSwgbWFjMnN0cihuZXRkZXYtPmRldl9hZGRyKSk7CisJfQorCisJcHJpdi0+c2Nhbl9zdGF0ZSA9IFNDQU5fSURMRTsKKwlwcml2LT5sYXN0X3NjYW4gPSBqaWZmaWVzOworCisJcmV0ID0gYXQ3Nl9zdWJtaXRfcnhfdXJiKHByaXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG9wZW46IHN1Ym1pdF9yeF91cmIgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIG5ldGRldi0+bmFtZSwgcmV0KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX3Jlc3RhcnQsIDApOworCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlcygpOiBlbmQiLCBfX2Z1bmNfXyk7CitlcnJvcjoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7CisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOworfQorCitzdGF0aWMgaW50IGF0NzZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiJXM6IEVOVEVSIiwgX19mdW5jX18pOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcHJpdi0+bXR4KSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCWF0NzZfcXVpZXNjZShwcml2KTsKKworCWlmICghcHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkgeworCQkvKiBXZSBhcmUgY2FsbGVkIGJ5ICJpZmNvbmZpZyBldGhYIGRvd24iLCBub3QgYmVjYXVzZSB0aGUKKwkJICogZGV2aWNlIGlzIG5vdCBhdmFpbGFibGUgYW55bW9yZS4gKi8KKwkJYXQ3Nl9zZXRfcmFkaW8ocHJpdiwgMCk7CisKKwkJLyogV2UgdW5saW5rIHJ4X3VyYiBiZWNhdXNlIGF0NzZfb3BlbigpIHJlLXN1Ym1pdHMgaXQuCisJCSAqIElmIHVucGx1Z2dlZCwgYXQ3Nl9kZWxldGVfZGV2aWNlKCkgdGFrZXMgY2FyZSBvZiBpdC4gKi8KKwkJdXNiX2tpbGxfdXJiKHByaXYtPnJ4X3VyYik7CisJfQorCisJLyogZnJlZSB0aGUgYnNzX2xpc3QgKi8KKwlhdDc2X2ZyZWVfYnNzX2xpc3QocHJpdik7CisKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7CisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiJXM6IEVYSVQiLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9ldGh0b29sX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJc3RybmNweShpbmZvLT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CisJc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUklWRVJfVkVSU0lPTiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pKTsKKworCXVzYl9tYWtlX3BhdGgocHJpdi0+dWRldiwgaW5mby0+YnVzX2luZm8sIHNpemVvZihpbmZvLT5idXNfaW5mbykpOworCisJc25wcmludGYoaW5mby0+ZndfdmVyc2lvbiwgc2l6ZW9mKGluZm8tPmZ3X3ZlcnNpb24pLCAiJWQuJWQuJWQtJWQiLAorCQkgcHJpdi0+ZndfdmVyc2lvbi5tYWpvciwgcHJpdi0+ZndfdmVyc2lvbi5taW5vciwKKwkJIHByaXYtPmZ3X3ZlcnNpb24ucGF0Y2gsIHByaXYtPmZ3X3ZlcnNpb24uYnVpbGQpOworfQorCitzdGF0aWMgdTMyIGF0NzZfZXRodG9vbF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiBwcml2LT5tYWNfc3RhdGUgPT0gTUFDX0NPTk5FQ1RFRDsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBhdDc2X2V0aHRvb2xfb3BzID0geworCS5nZXRfZHJ2aW5mbyA9IGF0NzZfZXRodG9vbF9nZXRfZHJ2aW5mbywKKwkuZ2V0X2xpbmsgPSBhdDc2X2V0aHRvb2xfZ2V0X2xpbmssCit9OworCisvKiBEb3dubG9hZCBleHRlcm5hbCBmaXJtd2FyZSAqLworc3RhdGljIGludCBhdDc2X2xvYWRfZXh0ZXJuYWxfZncoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCBmd2VudHJ5ICpmd2UpCit7CisJaW50IHJldDsKKwlpbnQgb3BfbW9kZTsKKwlpbnQgYmxvY2tubyA9IDA7CisJaW50IGJzaXplOworCXU4ICpibG9jazsKKwl1OCAqYnVmID0gZndlLT5leHRmdzsKKwlpbnQgc2l6ZSA9IGZ3ZS0+ZXh0Zndfc2l6ZTsKKworCWlmICghYnVmIHx8ICFzaXplKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCW9wX21vZGUgPSBhdDc2X2dldF9vcF9tb2RlKHVkZXYpOworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIm9wbW9kZSAlZCIsIG9wX21vZGUpOworCisJaWYgKG9wX21vZGUgIT0gT1BNT0RFX05PUk1BTF9OSUNfV0lUSE9VVF9GTEFTSCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LCAidW5leHBlY3RlZCBvcG1vZGUgJWRcbiIsCisJCQkgICBvcF9tb2RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmxvY2sgPSBrbWFsbG9jKEZXX0JMT0NLX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYmxvY2spCisJCXJldHVybiAtRU5PTUVNOworCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiZG93bmxvYWRpbmcgZXh0ZXJuYWwgZmlybXdhcmUiKTsKKworCS8qIGZvciBmdyA+PSAwLjEwMCwgdGhlIGRldmljZSBuZWVkcyBhbiBleHRyYSBlbXB0eSBibG9jayAqLworCWRvIHsKKwkJYnNpemUgPSBtaW5fdChpbnQsIHNpemUsIEZXX0JMT0NLX1NJWkUpOworCQltZW1jcHkoYmxvY2ssIGJ1ZiwgYnNpemUpOworCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsCisJCQkgImV4dCBmdywgc2l6ZSBsZWZ0ID0gJTVkLCBic2l6ZSA9ICU0ZCwgYmxvY2tubyA9ICUyZCIsCisJCQkgc2l6ZSwgYnNpemUsIGJsb2Nrbm8pOworCQlyZXQgPSBhdDc2X2xvYWRfZXh0X2Z3X2Jsb2NrKHVkZXYsIGJsb2Nrbm8sIGJsb2NrLCBic2l6ZSk7CisJCWlmIChyZXQgIT0gYnNpemUpIHsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkJICAgImxvYWRpbmcgJWR0aCBmaXJtd2FyZSBibG9jayBmYWlsZWQ6ICVkXG4iLAorCQkJCSAgIGJsb2Nrbm8sIHJldCk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJYnVmICs9IGJzaXplOworCQlzaXplIC09IGJzaXplOworCQlibG9ja25vKys7CisJfSB3aGlsZSAoYnNpemUgPiAwKTsKKworCWlmIChhdDc2X2lzXzUwNWEoZndlLT5ib2FyZF90eXBlKSkgeworCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICIyMDAgbXMgZGVsYXkgZm9yIDUwNWEiKTsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaIC8gNSArIDEpOworCX0KKworZXhpdDoKKwlrZnJlZShibG9jayk7CisJaWYgKHJldCA8IDApCisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkgICAiZG93bmxvYWRpbmcgZXh0ZXJuYWwgZmlybXdhcmUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBEb3dubG9hZCBpbnRlcm5hbCBmaXJtd2FyZSAqLworc3RhdGljIGludCBhdDc2X2xvYWRfaW50ZXJuYWxfZncoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCBmd2VudHJ5ICpmd2UpCit7CisJaW50IHJldDsKKwlpbnQgbmVlZF9yZW1hcCA9ICFhdDc2X2lzXzUwNWEoZndlLT5ib2FyZF90eXBlKTsKKworCXJldCA9IGF0NzZfdXNiZGZ1X2Rvd25sb2FkKHVkZXYsIGZ3ZS0+aW50ZncsIGZ3ZS0+aW50Zndfc2l6ZSwKKwkJCQkgICBuZWVkX3JlbWFwID8gMCA6IDIgKiBIWik7CisKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJICAgImRvd25sb2FkaW5nIGludGVybmFsIGZ3IGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAic2VuZGluZyBSRU1BUCIpOworCisJLyogbm8gUkVNQVAgZm9yIDUwNUEgKHNlZSBTRiBkcml2ZXIpICovCisJaWYgKG5lZWRfcmVtYXApIHsKKwkJcmV0ID0gYXQ3Nl9yZW1hcCh1ZGV2KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkJICAgInNlbmRpbmcgUkVNQVAgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJzbGVlcGluZyBmb3IgMiBzZWNvbmRzIik7CisJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDIgKiBIWiArIDEpOworCXVzYl9yZXNldF9kZXZpY2UodWRldik7CisKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X21hdGNoX2Vzc2lkKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBic3NfaW5mbyAqcHRyKQoreworCS8qIGNvbW1vbiBjcml0ZXJpYSBmb3IgYm90aCBtb2RpICovCisKKwlpbnQgcmV0ID0gKHByaXYtPmVzc2lkX3NpemUgPT0gMCAvKiBBTlkgc3NpZCAqLyAgfHwKKwkJICAgKHByaXYtPmVzc2lkX3NpemUgPT0gcHRyLT5zc2lkX2xlbiAmJgorCQkgICAgIW1lbWNtcChwcml2LT5lc3NpZCwgcHRyLT5zc2lkLCBwdHItPnNzaWRfbGVuKSkpOworCWlmICghcmV0KQorCQlhdDc2X2RiZyhEQkdfQlNTX01BVENILAorCQkJICIlcyBic3MgdGFibGUgZW50cnkgJXA6IGVzc2lkIGRpZG4ndCBtYXRjaCIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBwdHIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfbWF0Y2hfbW9kZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3QgYnNzX2luZm8gKnB0cikKK3sKKwlpbnQgcmV0OworCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykKKwkJcmV0ID0gcHRyLT5jYXBhICYgV0xBTl9DQVBBQklMSVRZX0lCU1M7CisJZWxzZQorCQlyZXQgPSBwdHItPmNhcGEgJiBXTEFOX0NBUEFCSUxJVFlfRVNTOworCWlmICghcmV0KQorCQlhdDc2X2RiZyhEQkdfQlNTX01BVENILAorCQkJICIlcyBic3MgdGFibGUgZW50cnkgJXA6IG1vZGUgZGlkbid0IG1hdGNoIiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIHB0cik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDc2X21hdGNoX3JhdGVzKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBic3NfaW5mbyAqcHRyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHB0ci0+cmF0ZXNfbGVuOyBpKyspIHsKKwkJdTggcmF0ZSA9IHB0ci0+cmF0ZXNbaV07CisKKwkJaWYgKCEocmF0ZSAmIDB4ODApKQorCQkJY29udGludWU7CisKKwkJLyogdGhpcyBpcyBhIGJhc2ljIHJhdGUgd2UgaGF2ZSB0byBzdXBwb3J0CisJCSAgIChzZWUgSUVFRTgwMi4xMSwgY2guIDcuMy4yLjIpICovCisJCWlmIChyYXRlICE9ICgweDgwIHwgaHdfcmF0ZXNbMF0pCisJCSAgICAmJiByYXRlICE9ICgweDgwIHwgaHdfcmF0ZXNbMV0pCisJCSAgICAmJiByYXRlICE9ICgweDgwIHwgaHdfcmF0ZXNbMl0pCisJCSAgICAmJiByYXRlICE9ICgweDgwIHwgaHdfcmF0ZXNbM10pKSB7CisJCQlhdDc2X2RiZyhEQkdfQlNTX01BVENILAorCQkJCSAiJXM6IGJzcyB0YWJsZSBlbnRyeSAlcDogYmFzaWMgcmF0ZSAlMDJ4IG5vdCAiCisJCQkJICJzdXBwb3J0ZWQiLCBwcml2LT5uZXRkZXYtPm5hbWUsIHB0ciwgcmF0ZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIGlmIHdlIHVzZSBzaG9ydCBwcmVhbWJsZSwgdGhlIGJzcyBtdXN0IHN1cHBvcnQgaXQgKi8KKwlpZiAocHJpdi0+cHJlYW1ibGVfdHlwZSA9PSBQUkVBTUJMRV9UWVBFX1NIT1JUICYmCisJICAgICEocHRyLT5jYXBhICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKSkgeworCQlhdDc2X2RiZyhEQkdfQlNTX01BVENILAorCQkJICIlczogJXAgZG9lcyBub3Qgc3VwcG9ydCBzaG9ydCBwcmVhbWJsZSIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBwdHIpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfbWF0Y2hfd2VwKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBic3NfaW5mbyAqcHRyKQoreworCWlmICghcHJpdi0+d2VwX2VuYWJsZWQgJiYgcHRyLT5jYXBhICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpIHsKKwkJLyogd2UgaGF2ZSBkaXNhYmxlZCBXRVAsIGJ1dCB0aGUgQlNTIHNpZ25hbHMgcHJpdmFjeSAqLworCQlhdDc2X2RiZyhEQkdfQlNTX01BVENILAorCQkJICIlczogYnNzIHRhYmxlIGVudHJ5ICVwOiByZXF1aXJlcyBlbmNyeXB0aW9uIiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIHB0cik7CisJCXJldHVybiAwOworCX0KKwkvKiBvdGhlcndpc2UgaWYgdGhlIEJTUyBkb2VzIG5vdCBzaWduYWwgcHJpdmFjeSBpdCBtYXkgd2VsbAorCSAgIGFjY2VwdCBlbmNyeXB0ZWQgcGFja2V0cyBmcm9tIHVzIC4uLiAqLworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBhdDc2X21hdGNoX2Jzc2lkKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBic3NfaW5mbyAqcHRyKQoreworCWlmICghcHJpdi0+d2FudGVkX2Jzc2lkX3ZhbGlkIHx8CisJICAgICFjb21wYXJlX2V0aGVyX2FkZHIocHRyLT5ic3NpZCwgcHJpdi0+d2FudGVkX2Jzc2lkKSkKKwkJcmV0dXJuIDE7CisKKwlhdDc2X2RiZyhEQkdfQlNTX01BVENILAorCQkgIiVzOiByZXF1ZXN0ZWQgYnNzaWQgLSAlcyBkb2VzIG5vdCBtYXRjaCIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIG1hYzJzdHIocHJpdi0+d2FudGVkX2Jzc2lkKSk7CisJYXQ3Nl9kYmcoREJHX0JTU19NQVRDSCwKKwkJICIgICAgICBBUCBic3NpZCAtICVzIG9mIGJzcyB0YWJsZSBlbnRyeSAlcCIsCisJCSBtYWMyc3RyKHB0ci0+YnNzaWQpLCBwdHIpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGF0NzZfbWF0Y2hfYnNzIC0gdHJ5IHRvIGZpbmQgYSBtYXRjaGluZyBic3MgaW4gcHJpdi0+YnNzCisgKgorICogbGFzdCAtIGxhc3QgYnNzIHRyaWVkCisgKgorICogbGFzdCA9PSBOVUxMIHNpZ25hbHMgYSBuZXcgcm91bmQgc3RhcnRpbmcgd2l0aCBwcml2LT5ic3NfbGlzdC5uZXh0CisgKiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGluc2lkZSBhbiBhY3F1aXJlZCBwcml2LT5ic3NfbGlzdF9zcGlubG9jaworICogb3RoZXJ3aXNlIHRoZSB0aW1lb3V0IG9uIGJzcyBtYXkgcmVtb3ZlIHRoZSBuZXdseSBjaG9zZW4gZW50cnkKKyAqLworc3RhdGljIHN0cnVjdCBic3NfaW5mbyAqYXQ3Nl9tYXRjaF9ic3Moc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IGJzc19pbmZvICpsYXN0KQoreworCXN0cnVjdCBic3NfaW5mbyAqcHRyID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjdXJyOworCisJY3VyciA9IGxhc3QgPyBsYXN0LT5saXN0Lm5leHQgOiBwcml2LT5ic3NfbGlzdC5uZXh0OworCXdoaWxlIChjdXJyICE9ICZwcml2LT5ic3NfbGlzdCkgeworCQlwdHIgPSBsaXN0X2VudHJ5KGN1cnIsIHN0cnVjdCBic3NfaW5mbywgbGlzdCk7CisJCWlmIChhdDc2X21hdGNoX2Vzc2lkKHByaXYsIHB0cikgJiYgYXQ3Nl9tYXRjaF9tb2RlKHByaXYsIHB0cikKKwkJICAgICYmIGF0NzZfbWF0Y2hfd2VwKHByaXYsIHB0cikgJiYgYXQ3Nl9tYXRjaF9yYXRlcyhwcml2LCBwdHIpCisJCSAgICAmJiBhdDc2X21hdGNoX2Jzc2lkKHByaXYsIHB0cikpCisJCQlicmVhazsKKwkJY3VyciA9IGN1cnItPm5leHQ7CisJfQorCisJaWYgKGN1cnIgPT0gJnByaXYtPmJzc19saXN0KQorCQlwdHIgPSBOVUxMOworCS8qIG90aGVyd2lzZSBwdHIgcG9pbnRzIHRvIHRoZSBzdHJ1Y3QgYnNzX2luZm8gd2UgaGF2ZSBjaG9zZW4gKi8KKworCWF0NzZfZGJnKERCR19CU1NfVEFCTEUsICIlcyAlczogcmV0dXJuZWQgJXAiLCBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBfX2Z1bmNfXywgcHRyKTsKKwlyZXR1cm4gcHRyOworfQorCisvKiBTdGFydCBqb2luaW5nIGEgbWF0Y2hpbmcgQlNTLCBvciBjcmVhdGUgb3duIElCU1MgKi8KK3N0YXRpYyB2b2lkIGF0NzZfd29ya19qb2luKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIHdvcmtfam9pbik7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCVdBUk5fT04ocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19KT0lOSU5HKTsKKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19KT0lOSU5HKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBzZWN1cmUgdGhlIGFjY2VzcyB0byBwcml2LT5jdXJyX2JzcyAhICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrLCBmbGFncyk7CisJcHJpdi0+Y3Vycl9ic3MgPSBhdDc2X21hdGNoX2Jzcyhwcml2LCBwcml2LT5jdXJyX2Jzcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKworCWlmICghcHJpdi0+Y3Vycl9ic3MpIHsKKwkJLyogaGVyZSB3ZSBoYXZlbid0IGZvdW5kIGEgbWF0Y2hpbmcgKGkpYnNzIC4uLiAqLworCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7CisJCQlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX09XTl9JQlNTKTsKKwkJCWF0NzZfc3RhcnRfaWJzcyhwcml2KTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQkvKiBoYXZlbid0IGZvdW5kIGEgbWF0Y2hpbmcgQlNTIGluIGluZnJhIG1vZGUgLSB0cnkgYWdhaW4gKi8KKwkJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19TQ0FOTklORyk7CisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfc3RhcnRfc2Nhbik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXQgPSBhdDc2X2pvaW5fYnNzKHByaXYsIHByaXYtPmN1cnJfYnNzKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBqb2luX2JzcyBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCXJldCA9IGF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9KT0lOKTsKKwlpZiAocmV0ICE9IENNRF9TVEFUVVNfQ09NUExFVEUpIHsKKwkJaWYgKHJldCAhPSBDTURfU1RBVFVTX1RJTUVfT1VUKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogam9pbl9ic3MgY29tcGxldGVkIHdpdGggJWRcbiIsCisJCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCByZXQpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogam9pbl9ic3Mgc3NpZCAlcyB0aW1lZCBvdXRcbiIsCisJCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkJICAgICAgIG1hYzJzdHIocHJpdi0+Y3Vycl9ic3MtPmJzc2lkKSk7CisKKwkJLyogcmV0cnkgbmV4dCBCU1MgaW1tZWRpYXRlbHkgKi8KKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19qb2luKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIGhlcmUgd2UgaGF2ZSBqb2luZWQgdGhlIChJKUJTUyAqLworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MpIHsKKwkJc3RydWN0IGJzc19pbmZvICpicHRyID0gcHJpdi0+Y3Vycl9ic3M7CisJCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfQ09OTkVDVEVEKTsKKwkJLyogZ2V0IEVTU0lELCBCU1NJRCBhbmQgY2hhbm5lbCBmb3IgcHJpdi0+Y3Vycl9ic3MgKi8KKwkJcHJpdi0+ZXNzaWRfc2l6ZSA9IGJwdHItPnNzaWRfbGVuOworCQltZW1jcHkocHJpdi0+ZXNzaWQsIGJwdHItPnNzaWQsIGJwdHItPnNzaWRfbGVuKTsKKwkJbWVtY3B5KHByaXYtPmJzc2lkLCBicHRyLT5ic3NpZCwgRVRIX0FMRU4pOworCQlwcml2LT5jaGFubmVsID0gYnB0ci0+Y2hhbm5lbDsKKwkJYXQ3Nl9pd2V2ZW50X2Jzc19jb25uZWN0KHByaXYtPm5ldGRldiwgYnB0ci0+YnNzaWQpOworCQluZXRpZl9jYXJyaWVyX29uKHByaXYtPm5ldGRldik7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKHByaXYtPm5ldGRldik7CisJCS8qIGp1c3QgdG8gYmUgc3VyZSAqLworCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19nZXRfc2Nhbik7CisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2F1dGgpOworCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hc3NvYyk7CisJfSBlbHNlIHsKKwkJLyogc2VuZCBhdXRoIHJlcSAqLworCQlwcml2LT5yZXRyaWVzID0gQVVUSF9SRVRSSUVTOworCQlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX0FVVEgpOworCQlhdDc2X2F1dGhfcmVxKHByaXYsIHByaXYtPmN1cnJfYnNzLCAxLCBOVUxMKTsKKwkJYXQ3Nl9kYmcoREJHX01HTVRfVElNRVIsCisJCQkgIiVzOiVkOiBzdGFydGluZyBtZ210X3RpbWVyICsgSFoiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2F1dGgsIEFVVEhfVElNRU9VVCk7CisJfQorCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworLyogUmVhcCBzY2FuIHJlc3VsdHMgKi8KK3N0YXRpYyB2b2lkIGF0NzZfZHdvcmtfZ2V0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWludCBzdGF0dXM7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIGR3b3JrX2dldF9zY2FuLndvcmspOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKwlXQVJOX09OKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfU0NBTk5JTkcpOworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX1NDQU5OSU5HKQorCQlnb3RvIGV4aXQ7CisKKwlzdGF0dXMgPSBhdDc2X2dldF9jbWRfc3RhdHVzKHByaXYtPnVkZXYsIENNRF9TQ0FOKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogYXQ3Nl9nZXRfY21kX3N0YXR1cyBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgX19mdW5jX18sIHN0YXR1cyk7CisJCXN0YXR1cyA9IENNRF9TVEFUVVNfSU5fUFJPR1JFU1M7CisJCS8qIElORk86IEhvcGUgaXQgd2FzIGEgb25lIG9mZiBlcnJvciAtIGlmIG5vdCwgc2Nhbm5pbmcKKwkJICAgZnVydGhlciBkb3duIHRoZSBsaW5lIGFuZCBzdG9wIHRoaXMgY3ljbGUgKi8KKwl9CisJYXQ3Nl9kYmcoREJHX1BST0dSRVNTLAorCQkgIiVzICVzOiBnb3QgY21kX3N0YXR1cyAlZCAoc3RhdGUgJXMsIG5lZWRfYW55ICVkKSIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIF9fZnVuY19fLCBzdGF0dXMsCisJCSBtYWNfc3RhdGVzW3ByaXYtPm1hY19zdGF0ZV0sIHByaXYtPnNjYW5fbmVlZF9hbnkpOworCisJaWYgKHN0YXR1cyAhPSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CisJCWlmICgoc3RhdHVzICE9IENNRF9TVEFUVVNfSU5fUFJPR1JFU1MpICYmCisJCSAgICAoc3RhdHVzICE9IENNRF9TVEFUVVNfSURMRSkpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogQmFkIHNjYW4gc3RhdHVzOiAlc1xuIiwKKwkJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIF9fZnVuY19fLAorCQkJICAgICAgIGF0NzZfZ2V0X2NtZF9zdGF0dXNfc3RyaW5nKHN0YXR1cykpOworCisJCS8qIHRoZSBmaXJzdCBjbWQgc3RhdHVzIGFmdGVyIHNjYW4gc3RhcnQgaXMgYWx3YXlzIGEgSURMRSAtPgorCQkgICBzdGFydCB0aGUgdGltZXIgdG8gcG9sbCBhZ2FpbiB1bnRpbCBDT01QTEVURUQgKi8KKwkJYXQ3Nl9kYmcoREJHX01HTVRfVElNRVIsCisJCQkgIiVzOiVkOiBzdGFydGluZyBtZ210X3RpbWVyIGZvciAlZCB0aWNrcyIsCisJCQkgX19mdW5jX18sIF9fTElORV9fLCBTQ0FOX1BPTExfSU5URVJWQUwpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2dldF9zY2FuLAorCQkJCSAgICAgIFNDQU5fUE9MTF9JTlRFUlZBTCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoYXQ3Nl9kZWJ1ZyAmIERCR19CU1NfVEFCTEUpCisJCWF0NzZfZHVtcF9ic3NfdGFibGUocHJpdik7CisKKwlpZiAocHJpdi0+c2Nhbl9uZWVkX2FueSkgeworCQlyZXQgPSBhdDc2X3N0YXJ0X3NjYW4ocHJpdiwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiAlczogc3RhcnRfc2NhbiAoQU5ZKSBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIF9fZnVuY19fLCByZXQpOworCQlhdDc2X2RiZyhEQkdfTUdNVF9USU1FUiwKKwkJCSAiJXM6JWQ6IHN0YXJ0aW5nIG1nbXRfdGltZXIgZm9yICVkIHRpY2tzIiwgX19mdW5jX18sCisJCQkgX19MSU5FX18sIFNDQU5fUE9MTF9JTlRFUlZBTCk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfZ2V0X3NjYW4sCisJCQkJICAgICAgU0NBTl9QT0xMX0lOVEVSVkFMKTsKKwkJcHJpdi0+c2Nhbl9uZWVkX2FueSA9IDA7CisJfSBlbHNlIHsKKwkJcHJpdi0+c2Nhbl9zdGF0ZSA9IFNDQU5fQ09NUExFVEVEOworCQkvKiByZXBvcnQgdGhlIGVuZCBvZiBzY2FuIHRvIHVzZXIgc3BhY2UgKi8KKwkJYXQ3Nl9pd2V2ZW50X3NjYW5fY29tcGxldGUocHJpdi0+bmV0ZGV2KTsKKwkJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19KT0lOSU5HKTsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19qb2luKTsKKwl9CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCisvKiBIYW5kbGUgbG9zcyBvZiBiZWFjb25zIGZyb20gdGhlIEFQICovCitzdGF0aWMgdm9pZCBhdDc2X2R3b3JrX2JlYWNvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICBkd29ya19iZWFjb24ud29yayk7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0NPTk5FQ1RFRCB8fCBwcml2LT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpCisJCWdvdG8gZXhpdDsKKworCS8qIFdlIGhhdmVuJ3QgcmVjZWl2ZWQgYW55IGJlYWNvbnMgZnJvbSBvdXQgQVAgZm9yIEJFQUNPTl9USU1FT1VUICovCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxvc3QgYmVhY29uIGJzc2lkICVzXG4iLAorCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIG1hYzJzdHIocHJpdi0+Y3Vycl9ic3MtPmJzc2lkKSk7CisKKwluZXRpZl9jYXJyaWVyX29mZihwcml2LT5uZXRkZXYpOworCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmV0ZGV2KTsKKwlhdDc2X2l3ZXZlbnRfYnNzX2Rpc2Nvbm5lY3QocHJpdi0+bmV0ZGV2KTsKKwlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX1NDQU5OSU5HKTsKKwlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX3N0YXJ0X3NjYW4pOworCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworLyogSGFuZGxlIGF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlIHRpbWVvdXQgKi8KK3N0YXRpYyB2b2lkIGF0NzZfZHdvcmtfYXV0aChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICBkd29ya19hdXRoLndvcmspOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKwlXQVJOX09OKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQVVUSCk7CisJaWYgKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQVVUSCkKKwkJZ290byBleGl0OworCisJYXQ3Nl9kYmcoREJHX1BST0dSRVNTLCAiJXM6IGF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlIHRpbWVvdXQiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lKTsKKworCWlmIChwcml2LT5yZXRyaWVzLS0gPj0gMCkgeworCQlhdDc2X2F1dGhfcmVxKHByaXYsIHByaXYtPmN1cnJfYnNzLCAxLCBOVUxMKTsKKwkJYXQ3Nl9kYmcoREJHX01HTVRfVElNRVIsICIlczolZDogc3RhcnRpbmcgbWdtdF90aW1lciArIEhaIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18pOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2F1dGgsIEFVVEhfVElNRU9VVCk7CisJfSBlbHNlIHsKKwkJLyogdHJ5IHRvIGdldCBuZXh0IG1hdGNoaW5nIEJTUyAqLworCQlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX0pPSU5JTkcpOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX2pvaW4pOworCX0KKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKKy8qIEhhbmRsZSBhc3NvY2lhdGlvbiByZXNwb25zZSB0aW1lb3V0ICovCitzdGF0aWMgdm9pZCBhdDc2X2R3b3JrX2Fzc29jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIGR3b3JrX2Fzc29jLndvcmspOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKwlXQVJOX09OKHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQVNTT0MpOworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0FTU09DKQorCQlnb3RvIGV4aXQ7CisKKwlhdDc2X2RiZyhEQkdfUFJPR1JFU1MsICIlczogYXNzb2NpYXRpb24gcmVzcG9uc2UgdGltZW91dCIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUpOworCisJaWYgKHByaXYtPnJldHJpZXMtLSA+PSAwKSB7CisJCWF0NzZfYXNzb2NfcmVxKHByaXYsIHByaXYtPmN1cnJfYnNzKTsKKwkJYXQ3Nl9kYmcoREJHX01HTVRfVElNRVIsICIlczolZDogc3RhcnRpbmcgbWdtdF90aW1lciArIEhaIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18pOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2Fzc29jLCBBU1NPQ19USU1FT1VUKTsKKwl9IGVsc2UgeworCQkvKiB0cnkgdG8gZ2V0IG5leHQgbWF0Y2hpbmcgQlNTICovCisJCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfSk9JTklORyk7CisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfam9pbik7CisJfQorCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworLyogUmVhZCBuZXcgYnNzaWQgaW4gYWQtaG9jIG1vZGUgKi8KK3N0YXRpYyB2b2lkIGF0NzZfd29ya19uZXdfYnNzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIHdvcmtfbmV3X2Jzcyk7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21hY19tZ210IG1hY19tZ210OworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTUFDX01HTVQsICZtYWNfbWdtdCwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21hY19tZ210KSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfUFJPR1JFU1MsICJpYnNzX2NoYW5nZSA9IDB4JTJ4IiwgbWFjX21nbXQuaWJzc19jaGFuZ2UpOworCW1lbWNweShwcml2LT5ic3NpZCwgbWFjX21nbXQuY3VycmVudF9ic3NpZCwgRVRIX0FMRU4pOworCWF0NzZfZGJnKERCR19QUk9HUkVTUywgInVzaW5nIEJTU0lEICVzIiwgbWFjMnN0cihwcml2LT5ic3NpZCkpOworCisJYXQ3Nl9pd2V2ZW50X2Jzc19jb25uZWN0KHByaXYtPm5ldGRldiwgcHJpdi0+YnNzaWQpOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX01BQ19NR01UOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbWFjX21nbXQsIGlic3NfY2hhbmdlKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IDA7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChpYnNzIGNoYW5nZSBvaykgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zdGFydHVwX2RldmljZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBhdDc2X2NhcmRfY29uZmlnICpjY2ZnID0gJnByaXYtPmNhcmRfY29uZmlnOworCWludCByZXQ7CisKKwlhdDc2X2RiZyhEQkdfUEFSQU1TLAorCQkgIiVzIHBhcmFtOiBzc2lkICUuKnMgKCVzKSBtb2RlICVzIGNoICVkIHdlcCAlcyBrZXkgJWQgIgorCQkgImtleWxlbiAlZCIsIHByaXYtPm5ldGRldi0+bmFtZSwgcHJpdi0+ZXNzaWRfc2l6ZSwgcHJpdi0+ZXNzaWQsCisJCSBoZXgyc3RyKHByaXYtPmVzc2lkLCBJV19FU1NJRF9NQVhfU0laRSksCisJCSBwcml2LT5pd19tb2RlID09IElXX01PREVfQURIT0MgPyAiYWRob2MiIDogImluZnJhIiwKKwkJIHByaXYtPmNoYW5uZWwsIHByaXYtPndlcF9lbmFibGVkID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKKwkJIHByaXYtPndlcF9rZXlfaWQsIHByaXYtPndlcF9rZXlzX2xlbltwcml2LT53ZXBfa2V5X2lkXSk7CisJYXQ3Nl9kYmcoREJHX1BBUkFNUywKKwkJICIlcyBwYXJhbTogcHJlYW1ibGUgJXMgcnRzICVkIHJldHJ5ICVkIGZyYWcgJWQgIgorCQkgInR4cmF0ZSAlcyBhdXRoX21vZGUgJWQiLCBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBwcmVhbWJsZXNbcHJpdi0+cHJlYW1ibGVfdHlwZV0sIHByaXYtPnJ0c190aHJlc2hvbGQsCisJCSBwcml2LT5zaG9ydF9yZXRyeV9saW1pdCwgcHJpdi0+ZnJhZ190aHJlc2hvbGQsCisJCSBwcml2LT50eHJhdGUgPT0gVFhfUkFURV8xTUJJVCA/ICIxTUJpdCIgOiBwcml2LT50eHJhdGUgPT0KKwkJIFRYX1JBVEVfMk1CSVQgPyAiMk1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFXzVfNU1CSVQgPyAiNS41TUJpdCIgOiBwcml2LT50eHJhdGUgPT0KKwkJIFRYX1JBVEVfMTFNQklUID8gIjExTUJpdCIgOiBwcml2LT50eHJhdGUgPT0KKwkJIFRYX1JBVEVfQVVUTyA/ICJhdXRvIiA6ICI8aW52YWxpZD4iLCBwcml2LT5hdXRoX21vZGUpOworCWF0NzZfZGJnKERCR19QQVJBTVMsCisJCSAiJXMgcGFyYW06IHBtX21vZGUgJWQgcG1fcGVyaW9kICVkIGF1dGhfbW9kZSAlcyAiCisJCSAic2Nhbl90aW1lcyAlZCAlZCBzY2FuX21vZGUgJXMiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBwcml2LT5wbV9tb2RlLCBwcml2LT5wbV9wZXJpb2QsCisJCSBwcml2LT5hdXRoX21vZGUgPT0gV0xBTl9BVVRIX09QRU4gPyAib3BlbiIgOiAic2hhcmVkX3NlY3JldCIsCisJCSBwcml2LT5zY2FuX21pbl90aW1lLCBwcml2LT5zY2FuX21heF90aW1lLAorCQkgcHJpdi0+c2Nhbl9tb2RlID09IFNDQU5fVFlQRV9BQ1RJVkUgPyAiYWN0aXZlIiA6ICJwYXNzaXZlIik7CisKKwltZW1zZXQoY2NmZywgMCwgc2l6ZW9mKHN0cnVjdCBhdDc2X2NhcmRfY29uZmlnKSk7CisJY2NmZy0+cHJvbWlzY3VvdXNfbW9kZSA9IDA7CisJY2NmZy0+c2hvcnRfcmV0cnlfbGltaXQgPSBwcml2LT5zaG9ydF9yZXRyeV9saW1pdDsKKworCWlmIChwcml2LT53ZXBfZW5hYmxlZCkgeworCQlpZiAocHJpdi0+d2VwX2tleXNfbGVuW3ByaXYtPndlcF9rZXlfaWRdID4gV0VQX1NNQUxMX0tFWV9MRU4pCisJCQljY2ZnLT5lbmNyeXB0aW9uX3R5cGUgPSAyOworCQllbHNlCisJCQljY2ZnLT5lbmNyeXB0aW9uX3R5cGUgPSAxOworCisJCS8qIGphbDogYWx3YXlzIGV4Y2x1ZGUgdW5lbmNyeXB0ZWQgaWYgV0VQIGlzIGFjdGl2ZSAqLworCQljY2ZnLT5leGNsdWRlX3VuZW5jcnlwdGVkID0gMTsKKwl9IGVsc2UgeworCQljY2ZnLT5leGNsdWRlX3VuZW5jcnlwdGVkID0gMDsKKwkJY2NmZy0+ZW5jcnlwdGlvbl90eXBlID0gMDsKKwl9CisKKwljY2ZnLT5ydHNfdGhyZXNob2xkID0gY3B1X3RvX2xlMTYocHJpdi0+cnRzX3RocmVzaG9sZCk7CisJY2NmZy0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQgPSBjcHVfdG9fbGUxNihwcml2LT5mcmFnX3RocmVzaG9sZCk7CisKKwltZW1jcHkoY2NmZy0+YmFzaWNfcmF0ZV9zZXQsIGh3X3JhdGVzLCA0KTsKKwkvKiBqYWw6IHJlYWxseSBuZWVkZWQsIHdlIGRvIGEgc2V0X21pYiBmb3IgYXV0b3JhdGUgbGF0ZXIgPz8/ICovCisJY2NmZy0+YXV0b19yYXRlX2ZhbGxiYWNrID0gKHByaXYtPnR4cmF0ZSA9PSBUWF9SQVRFX0FVVE8gPyAxIDogMCk7CisJY2NmZy0+Y2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7CisJY2NmZy0+cHJpdmFjeV9pbnZva2VkID0gcHJpdi0+d2VwX2VuYWJsZWQ7CisJbWVtY3B5KGNjZmctPmN1cnJlbnRfc3NpZCwgcHJpdi0+ZXNzaWQsIElXX0VTU0lEX01BWF9TSVpFKTsKKwljY2ZnLT5zc2lkX2xlbiA9IHByaXYtPmVzc2lkX3NpemU7CisKKwljY2ZnLT53ZXBfZGVmYXVsdF9rZXlfaWQgPSBwcml2LT53ZXBfa2V5X2lkOworCW1lbWNweShjY2ZnLT53ZXBfZGVmYXVsdF9rZXlfdmFsdWUsIHByaXYtPndlcF9rZXlzLCA0ICogV0VQX0tFWV9MRU4pOworCisJY2NmZy0+c2hvcnRfcHJlYW1ibGUgPSBwcml2LT5wcmVhbWJsZV90eXBlOworCWNjZmctPmJlYWNvbl9wZXJpb2QgPSBjcHVfdG9fbGUxNihwcml2LT5iZWFjb25fcGVyaW9kKTsKKworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfU1RBUlRVUCwgJnByaXYtPmNhcmRfY29uZmlnLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGF0NzZfY2FyZF9jb25maWcpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X3NldF9jYXJkX2NvbW1hbmQgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlhdDc2X3dhaXRfY29tcGxldGlvbihwcml2LCBDTURfU1RBUlRVUCk7CisKKwkvKiByZW1vdmUgQlNTSUQgZnJvbSBwcmV2aW91cyBydW4gKi8KKwltZW1zZXQocHJpdi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKworCWlmIChhdDc2X3NldF9yYWRpbyhwcml2LCAxKSA9PSAxKQorCQlhdDc2X3dhaXRfY29tcGxldGlvbihwcml2LCBDTURfUkFESU9fT04pOworCisJcmV0ID0gYXQ3Nl9zZXRfcHJlYW1ibGUocHJpdiwgcHJpdi0+cHJlYW1ibGVfdHlwZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9mcmFnKHByaXYsIHByaXYtPmZyYWdfdGhyZXNob2xkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfc2V0X3J0cyhwcml2LCBwcml2LT5ydHNfdGhyZXNob2xkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfc2V0X2F1dG9yYXRlX2ZhbGxiYWNrKHByaXYsCisJCQkJCSBwcml2LT50eHJhdGUgPT0gVFhfUkFURV9BVVRPID8gMSA6IDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfcG1fbW9kZShwcml2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChhdDc2X2RlYnVnICYgREJHX01JQikgeworCQlhdDc2X2R1bXBfbWliX21hYyhwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9tYWNfYWRkcihwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9tYWNfbWdtdChwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9tYWNfd2VwKHByaXYpOworCQlhdDc2X2R1bXBfbWliX21kb21haW4ocHJpdik7CisJCWF0NzZfZHVtcF9taWJfcGh5KHByaXYpOworCQlhdDc2X2R1bXBfbWliX2xvY2FsKHByaXYpOworCX0KKworCXJldHVybiAwOworfQorCisvKiBSZXN0YXJ0IHRoZSBpbnRlcmZhY2UgKi8KK3N0YXRpYyB2b2lkIGF0NzZfZHdvcmtfcmVzdGFydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICBkd29ya19yZXN0YXJ0LndvcmspOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5ldGRldik7CS8qIHN0b3AgbmV0ZGV2IHdhdGNoZG9nICovCisJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRkZXYpOwkvKiBzdG9wIHR4IGRhdGEgcGFja2V0cyAqLworCisJYXQ3Nl9zdGFydHVwX2RldmljZShwcml2KTsKKworCWlmIChwcml2LT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUikgeworCQlwcml2LT5uZXRkZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7CisJCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfU0NBTk5JTkcpOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX3N0YXJ0X3NjYW4pOworCX0gZWxzZSB7CisJCXByaXYtPm5ldGRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVA7CisJCWF0NzZfc3RhcnRfbW9uaXRvcihwcml2KTsKKwl9CisKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKKy8qIEluaXRpYXRlIHNjYW5uaW5nICovCitzdGF0aWMgdm9pZCBhdDc2X3dvcmtfc3RhcnRfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICB3b3JrX3N0YXJ0X3NjYW4pOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJV0FSTl9PTihwcml2LT5tYWNfc3RhdGUgIT0gTUFDX1NDQU5OSU5HKTsKKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19TQ0FOTklORykKKwkJZ290byBleGl0OworCisJLyogb25seSBjbGVhciB0aGUgYnNzIGxpc3Qgd2hlbiBhIHNjYW4gaXMgYWN0aXZlbHkgaW5pdGlhdGVkLAorCSAqIG90aGVyd2lzZSBzaW1wbHkgcmVseSBvbiBhdDc2X2Jzc19saXN0X3RpbWVvdXQgKi8KKwlpZiAocHJpdi0+c2Nhbl9zdGF0ZSA9PSBTQ0FOX0lOX1BST0dSRVNTKSB7CisJCWF0NzZfZnJlZV9ic3NfbGlzdChwcml2KTsKKwkJcHJpdi0+c2Nhbl9uZWVkX2FueSA9IDE7CisJfSBlbHNlCisJCXByaXYtPnNjYW5fbmVlZF9hbnkgPSAwOworCisJcmV0ID0gYXQ3Nl9zdGFydF9zY2FuKHByaXYsIDEpOworCisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBzdGFydF9zY2FuIGZhaWxlZCB3aXRoICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBfX2Z1bmNfXywgcmV0KTsKKwllbHNlIHsKKwkJYXQ3Nl9kYmcoREJHX01HTVRfVElNRVIsCisJCQkgIiVzOiVkOiBzdGFydGluZyBtZ210X3RpbWVyIGZvciAlZCB0aWNrcyIsCisJCQkgX19mdW5jX18sIF9fTElORV9fLCBTQ0FOX1BPTExfSU5URVJWQUwpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2dldF9zY2FuLAorCQkJCSAgICAgIFNDQU5fUE9MTF9JTlRFUlZBTCk7CisJfQorCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworLyogRW5hYmxlIG9yIGRpc2FibGUgcHJvbWlzY3VvdXMgbW9kZSAqLworc3RhdGljIHZvaWQgYXQ3Nl93b3JrX3NldF9wcm9taXNjKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIHdvcmtfc2V0X3Byb21pc2MpOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9MT0NBTDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX2xvY2FsLCBwcm9taXNjdW91c19tb2RlKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IHByaXYtPnByb21pc2MgPyAxIDogMDsKKworCXJldCA9IGF0NzZfc2V0X21pYihwcml2LCAmcHJpdi0+bWliX2J1Zik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNldF9taWIgKHByb21pc2N1b3VzX21vZGUpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIHJldCk7CisKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7Cit9CisKKy8qIFN1Ym1pdCBSeCB1cmIgYmFjayB0byB0aGUgZGV2aWNlICovCitzdGF0aWMgdm9pZCBhdDc2X3dvcmtfc3VibWl0X3J4KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdDc2X3ByaXYsCisJCQkJCSAgICAgIHdvcmtfc3VibWl0X3J4KTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisJYXQ3Nl9zdWJtaXRfcnhfdXJiKHByaXYpOworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworLyogV2UgZ290IGFuIGFzc29jaWF0aW9uIHJlc3BvbnNlICovCitzdGF0aWMgdm9pZCBhdDc2X3J4X21nbXRfYXNzb2Moc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlICpyZXNwID0KKwkgICAgKHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgKilidWYtPnBhY2tldDsKKwl1MTYgYXNzb2NfaWQgPSBsZTE2X3RvX2NwdShyZXNwLT5haWQpOworCXUxNiBzdGF0dXMgPSBsZTE2X3RvX2NwdShyZXNwLT5zdGF0dXMpOworCisJYXQ3Nl9kYmcoREJHX1JYX01HTVQsICIlczogcnggQXNzb2NSZXNwIGJzc2lkICVzIGNhcGEgMHglMDR4IHN0YXR1cyAiCisJCSAiMHglMDR4IGFzc29jX2lkIDB4JTA0eCByYXRlcyAlcyIsIHByaXYtPm5ldGRldi0+bmFtZSwKKwkJIG1hYzJzdHIocmVzcC0+aGVhZGVyLmFkZHIzKSwgbGUxNl90b19jcHUocmVzcC0+Y2FwYWJpbGl0eSksCisJCSBzdGF0dXMsIGFzc29jX2lkLCBoZXgyc3RyKHJlc3AtPmluZm9fZWxlbWVudC0+ZGF0YSwKKwkJCQkJICAgcmVzcC0+aW5mb19lbGVtZW50LT5sZW4pKTsKKworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0FTU09DKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBc3NvY1Jlc3AgaW4gc3RhdGUgJXMgaWdub3JlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjX3N0YXRlc1twcml2LT5tYWNfc3RhdGVdKTsKKwkJcmV0dXJuOworCX0KKworCUJVR19PTighcHJpdi0+Y3Vycl9ic3MpOworCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXNzb2MpOworCWlmIChzdGF0dXMgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQlzdHJ1Y3QgYnNzX2luZm8gKnB0ciA9IHByaXYtPmN1cnJfYnNzOworCQlwcml2LT5hc3NvY19pZCA9IGFzc29jX2lkICYgMHgzZmZmOworCQkvKiB1cGRhdGUgaXdjb25maWcgcGFyYW1zICovCisJCW1lbWNweShwcml2LT5ic3NpZCwgcHRyLT5ic3NpZCwgRVRIX0FMRU4pOworCQltZW1jcHkocHJpdi0+ZXNzaWQsIHB0ci0+c3NpZCwgcHRyLT5zc2lkX2xlbik7CisJCXByaXYtPmVzc2lkX3NpemUgPSBwdHItPnNzaWRfbGVuOworCQlwcml2LT5jaGFubmVsID0gcHRyLT5jaGFubmVsOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX2Fzc29jX2RvbmUpOworCX0gZWxzZSB7CisJCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfSk9JTklORyk7CisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfam9pbik7CisJfQorfQorCisvKiBQcm9jZXNzIGRpc2Fzc29jaWF0aW9uIHJlcXVlc3QgZnJvbSB0aGUgQVAgKi8KK3N0YXRpYyB2b2lkIGF0NzZfcnhfbWdtdF9kaXNhc3NvYyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyAqcmVzcCA9CisJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jICopYnVmLT5wYWNrZXQ7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKm1nbXQgPSAmcmVzcC0+aGVhZGVyOworCisJYXQ3Nl9kYmcoREJHX1JYX01HTVQsCisJCSAiJXM6IHJ4IERpc0Fzc29jIGJzc2lkICVzIHJlYXNvbiAweCUwNHggZGVzdGluYXRpb24gJXMiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWMyc3RyKG1nbXQtPmFkZHIzKSwKKwkJIGxlMTZfdG9fY3B1KHJlc3AtPnJlYXNvbiksIG1hYzJzdHIobWdtdC0+YWRkcjEpKTsKKworCS8qIFdlIGFyZSBub3QgY29ubmVjdGVkLCBpZ25vcmUgKi8KKwlpZiAocHJpdi0+bWFjX3N0YXRlID09IE1BQ19TQ0FOTklORyB8fCBwcml2LT5tYWNfc3RhdGUgPT0gTUFDX0lOSVQKKwkgICAgfHwgIXByaXYtPmN1cnJfYnNzKQorCQlyZXR1cm47CisKKwkvKiBOb3Qgb3VyIEJTU0lELCBpZ25vcmUgKi8KKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG1nbXQtPmFkZHIzLCBwcml2LT5jdXJyX2Jzcy0+YnNzaWQpKQorCQlyZXR1cm47CisKKwkvKiBOb3QgZm9yIG91ciBTVEEgYW5kIG5vdCBicm9hZGNhc3QsIGlnbm9yZSAqLworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+bmV0ZGV2LT5kZXZfYWRkciwgbWdtdC0+YWRkcjEpCisJICAgICYmICFpc19icm9hZGNhc3RfZXRoZXJfYWRkcihtZ210LT5hZGRyMSkpCisJCXJldHVybjsKKworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0FTU09DICYmIHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfQ09OTkVDVEVECisJICAgICYmIHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfSk9JTklORykgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogRGlzQXNzb2MgaW4gc3RhdGUgJXMgaWdub3JlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjX3N0YXRlc1twcml2LT5tYWNfc3RhdGVdKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwcml2LT5tYWNfc3RhdGUgPT0gTUFDX0NPTk5FQ1RFRCkgeworCQluZXRpZl9jYXJyaWVyX29mZihwcml2LT5uZXRkZXYpOworCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldGRldik7CisJCWF0NzZfaXdldmVudF9ic3NfZGlzY29ubmVjdChwcml2LT5uZXRkZXYpOworCX0KKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19nZXRfc2Nhbik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYmVhY29uKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hdXRoKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hc3NvYyk7CisJYXQ3Nl9zZXRfbWFjX3N0YXRlKHByaXYsIE1BQ19KT0lOSU5HKTsKKwlzY2hlZHVsZV93b3JrKCZwcml2LT53b3JrX2pvaW4pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X3J4X21nbXRfYXV0aChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJICAgICAgc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGllZWU4MDIxMV9hdXRoICpyZXNwID0gKHN0cnVjdCBpZWVlODAyMTFfYXV0aCAqKWJ1Zi0+cGFja2V0OworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICptZ210ID0gJnJlc3AtPmhlYWRlcjsKKwlpbnQgc2VxX25yID0gbGUxNl90b19jcHUocmVzcC0+dHJhbnNhY3Rpb24pOworCWludCBhbGcgPSBsZTE2X3RvX2NwdShyZXNwLT5hbGdvcml0aG0pOworCWludCBzdGF0dXMgPSBsZTE2X3RvX2NwdShyZXNwLT5zdGF0dXMpOworCisJYXQ3Nl9kYmcoREJHX1JYX01HTVQsCisJCSAiJXM6IHJ4IEF1dGhGcmFtZSBic3NpZCAlcyBhbGcgJWQgc2VxX25yICVkIHN0YXR1cyAlZCAiCisJCSAiZGVzdGluYXRpb24gJXMiLCBwcml2LT5uZXRkZXYtPm5hbWUsIG1hYzJzdHIobWdtdC0+YWRkcjMpLAorCQkgYWxnLCBzZXFfbnIsIHN0YXR1cywgbWFjMnN0cihtZ210LT5hZGRyMSkpOworCisJaWYgKGFsZyA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSAmJiBzZXFfbnIgPT0gMikKKwkJYXQ3Nl9kYmcoREJHX1JYX01HTVQsICIlczogQXV0aEZyYW1lIGNoYWxsZW5nZSAlcyAuLi4iLAorCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgaGV4MnN0cihyZXNwLT5pbmZvX2VsZW1lbnQsIDE4KSk7CisKKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19BVVRIKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpZ25vcmVkIEF1dGhGcmFtZSBpbiBzdGF0ZSAlc1xuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgbWFjX3N0YXRlc1twcml2LT5tYWNfc3RhdGVdKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocHJpdi0+YXV0aF9tb2RlICE9IGFsZykgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogaWdub3JlZCBBdXRoRnJhbWUgZm9yIGFsZyAlZFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgYWxnKTsKKwkJcmV0dXJuOworCX0KKworCUJVR19PTighcHJpdi0+Y3Vycl9ic3MpOworCisJLyogTm90IG91ciBCU1NJRCBvciBub3QgZm9yIG91ciBTVEEsIGlnbm9yZSAqLworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobWdtdC0+YWRkcjMsIHByaXYtPmN1cnJfYnNzLT5ic3NpZCkKKwkgICAgfHwgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPm5ldGRldi0+ZGV2X2FkZHIsIG1nbXQtPmFkZHIxKSkKKwkJcmV0dXJuOworCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXV0aCk7CisJaWYgKHN0YXR1cyAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CisJCS8qIHRyeSB0byBqb2luIG5leHQgYnNzICovCisJCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfSk9JTklORyk7CisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndvcmtfam9pbik7CisJCXJldHVybjsKKwl9CisKKwlpZiAocHJpdi0+YXV0aF9tb2RlID09IFdMQU5fQVVUSF9PUEVOIHx8IHNlcV9uciA9PSA0KSB7CisJCXByaXYtPnJldHJpZXMgPSBBU1NPQ19SRVRSSUVTOworCQlhdDc2X3NldF9tYWNfc3RhdGUocHJpdiwgTUFDX0FTU09DKTsKKwkJYXQ3Nl9hc3NvY19yZXEocHJpdiwgcHJpdi0+Y3Vycl9ic3MpOworCQlhdDc2X2RiZyhEQkdfTUdNVF9USU1FUiwKKwkJCSAiJXM6JWQ6IHN0YXJ0aW5nIG1nbXRfdGltZXIgKyBIWiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYXNzb2MsIEFTU09DX1RJTUVPVVQpOworCQlyZXR1cm47CisJfQorCisJV0FSTl9PTihzZXFfbnIgIT0gMik7CisJYXQ3Nl9hdXRoX3JlcShwcml2LCBwcml2LT5jdXJyX2Jzcywgc2VxX25yICsgMSwgcmVzcC0+aW5mb19lbGVtZW50KTsKKwlhdDc2X2RiZyhEQkdfTUdNVF9USU1FUiwgIiVzOiVkOiBzdGFydGluZyBtZ210X3RpbWVyICsgSFoiLCBfX2Z1bmNfXywKKwkJIF9fTElORV9fKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2F1dGgsIEFVVEhfVElNRU9VVCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfcnhfbWdtdF9kZWF1dGgoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jICpyZXNwID0KKwkgICAgKHN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgKilidWYtPnBhY2tldDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqbWdtdCA9ICZyZXNwLT5oZWFkZXI7CisKKwlhdDc2X2RiZyhEQkdfUlhfTUdNVCB8IERCR19QUk9HUkVTUywKKwkJICIlczogcnggRGVBdXRoIGJzc2lkICVzIHJlYXNvbiAweCUwNHggZGVzdGluYXRpb24gJXMiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYWMyc3RyKG1nbXQtPmFkZHIzKSwKKwkJIGxlMTZfdG9fY3B1KHJlc3AtPnJlYXNvbiksIG1hYzJzdHIobWdtdC0+YWRkcjEpKTsKKworCWlmIChwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0FVVEggJiYgcHJpdi0+bWFjX3N0YXRlICE9IE1BQ19BU1NPQworCSAgICAmJiBwcml2LT5tYWNfc3RhdGUgIT0gTUFDX0NPTk5FQ1RFRCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogRGVBdXRoIGluIHN0YXRlICVzIGlnbm9yZWRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUsIG1hY19zdGF0ZXNbcHJpdi0+bWFjX3N0YXRlXSk7CisJCXJldHVybjsKKwl9CisKKwlCVUdfT04oIXByaXYtPmN1cnJfYnNzKTsKKworCS8qIE5vdCBvdXIgQlNTSUQsIGlnbm9yZSAqLworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobWdtdC0+YWRkcjMsIHByaXYtPmN1cnJfYnNzLT5ic3NpZCkpCisJCXJldHVybjsKKworCS8qIE5vdCBmb3Igb3VyIFNUQSBhbmQgbm90IGJyb2FkY2FzdCwgaWdub3JlICovCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5uZXRkZXYtPmRldl9hZGRyLCBtZ210LT5hZGRyMSkKKwkgICAgJiYgIWlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKG1nbXQtPmFkZHIxKSkKKwkJcmV0dXJuOworCisJaWYgKHByaXYtPm1hY19zdGF0ZSA9PSBNQUNfQ09OTkVDVEVEKQorCQlhdDc2X2l3ZXZlbnRfYnNzX2Rpc2Nvbm5lY3QocHJpdi0+bmV0ZGV2KTsKKworCWF0NzZfc2V0X21hY19zdGF0ZShwcml2LCBNQUNfSk9JTklORyk7CisJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19qb2luKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19nZXRfc2Nhbik7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfYmVhY29uKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hdXRoKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19hc3NvYyk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfcnhfbWdtdF9iZWFjb24oc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZikKK3sKKwlpbnQgdmFycGFyX2xlbjsKKwkvKiBiZWFjb24gY29udGVudCAqLworCXN0cnVjdCBpZWVlODAyMTFfYmVhY29uICpiZGF0YSA9IChzdHJ1Y3QgaWVlZTgwMjExX2JlYWNvbiAqKWJ1Zi0+cGFja2V0OworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICptZ210ID0gJmJkYXRhLT5oZWFkZXI7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkICpscHRyOworCXN0cnVjdCBic3NfaW5mbyAqbWF0Y2g7CS8qIGVudHJ5IG1hdGNoaW5nIGFkZHIzIHdpdGggaXRzIGJzc2lkICovCisJaW50IG5ld19lbnRyeSA9IDA7CisJaW50IGxlbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCAqaWU7CisJaW50IGhhdmVfc3NpZCA9IDA7CisJaW50IGhhdmVfcmF0ZXMgPSAwOworCWludCBoYXZlX2NoYW5uZWwgPSAwOworCWludCBrZWVwX2dvaW5nID0gMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrLCBmbGFncyk7CisJaWYgKHByaXYtPm1hY19zdGF0ZSA9PSBNQUNfQ09OTkVDVEVEKSB7CisJCS8qIGluIHN0YXRlIE1BQ19DT05ORUNURUQgd2UgdXNlIHRoZSBtZ210X3RpbWVyIHRvIGNvbnRyb2wKKwkJICAgdGhlIGJlYWNvbiBvZiB0aGUgQlNTICovCisJCUJVR19PTighcHJpdi0+Y3Vycl9ic3MpOworCisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPmN1cnJfYnNzLT5ic3NpZCwgbWdtdC0+YWRkcjMpKSB7CisJCQkvKiBXZSBnb3Qgb3VyIEFQJ3MgYmVhY29uLCBkZWZlciB0aGUgdGltZW91dCBoYW5kbGVyLgorCQkJICAgS2lsbCBwZW5kaW5nIHdvcmsgZmlyc3QsIGFzIHNjaGVkdWxlX2RlbGF5ZWRfd29yaygpCisJCQkgICB3b24ndCBkbyBpdC4gKi8KKwkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2JlYWNvbik7CisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2JlYWNvbiwKKwkJCQkJICAgICAgQkVBQ09OX1RJTUVPVVQpOworCQkJcHJpdi0+Y3Vycl9ic3MtPnJzc2kgPSBidWYtPnJzc2k7CisJCQlwcml2LT5iZWFjb25zX3JlY2VpdmVkKys7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisKKwkvKiBsb29rIGlmIHdlIGhhdmUgdGhpcyBCU1MgYWxyZWFkeSBpbiB0aGUgbGlzdCAqLworCW1hdGNoID0gTlVMTDsKKworCWlmICghbGlzdF9lbXB0eSgmcHJpdi0+YnNzX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2gobHB0ciwgJnByaXYtPmJzc19saXN0KSB7CisJCQlzdHJ1Y3QgYnNzX2luZm8gKmJzc19wdHIgPQorCQkJICAgIGxpc3RfZW50cnkobHB0ciwgc3RydWN0IGJzc19pbmZvLCBsaXN0KTsKKwkJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGJzc19wdHItPmJzc2lkLCBtZ210LT5hZGRyMykpIHsKKwkJCQltYXRjaCA9IGJzc19wdHI7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIW1hdGNoKSB7CisJCS8qIEJTUyBub3QgaW4gdGhlIGxpc3QgLSBhcHBlbmQgaXQgKi8KKwkJbWF0Y2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnNzX2luZm8pLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFtYXRjaCkgeworCQkJYXQ3Nl9kYmcoREJHX0JTU19UQUJMRSwKKwkJCQkgIiVzOiBjYW5ub3Qga21hbGxvYyBuZXcgYnNzIGluZm8gKCV6ZCBieXRlKSIsCisJCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgc2l6ZW9mKHN0cnVjdCBic3NfaW5mbykpOworCQkJZ290byBleGl0OworCQl9CisJCW5ld19lbnRyeSA9IDE7CisJCWxpc3RfYWRkX3RhaWwoJm1hdGNoLT5saXN0LCAmcHJpdi0+YnNzX2xpc3QpOworCX0KKworCW1hdGNoLT5jYXBhID0gbGUxNl90b19jcHUoYmRhdGEtPmNhcGFiaWxpdHkpOworCW1hdGNoLT5iZWFjb25faW50ZXJ2YWwgPSBsZTE2X3RvX2NwdShiZGF0YS0+YmVhY29uX2ludGVydmFsKTsKKwltYXRjaC0+cnNzaSA9IGJ1Zi0+cnNzaTsKKwltYXRjaC0+bGlua19xdWFsID0gYnVmLT5saW5rX3F1YWxpdHk7CisJbWF0Y2gtPm5vaXNlX2xldmVsID0gYnVmLT5ub2lzZV9sZXZlbDsKKwltZW1jcHkobWF0Y2gtPmJzc2lkLCBtZ210LT5hZGRyMywgRVRIX0FMRU4pOworCWF0NzZfZGJnKERCR19SWF9CRUFDT04sICIlczogYnNzaWQgJXMiLCBwcml2LT5uZXRkZXYtPm5hbWUsCisJCSBtYWMyc3RyKG1hdGNoLT5ic3NpZCkpOworCisJaWUgPSBiZGF0YS0+aW5mb19lbGVtZW50OworCisJLyogbGVuZ3RoIG9mIHZhciBsZW5ndGggYmVhY29uIHBhcmFtZXRlcnMgKi8KKwl2YXJwYXJfbGVuID0gbWluX3QoaW50LCBsZTE2X3RvX2NwdShidWYtPndsZW5ndGgpIC0KKwkJCSAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2JlYWNvbiksCisJCQkgICBCRUFDT05fTUFYX0RBVEFfTEVOR1RIKTsKKworCS8qIFRoaXMgcm91dGluZSBzdGVwcyB0aHJvdWdoIHRoZSBiZGF0YS0+ZGF0YSBhcnJheSB0byBnZXQKKwkgKiBzb21lIHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWNjZXNzIHBvaW50LgorCSAqIEN1cnJlbnRseSwgdGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyByZWNlaXB0IG9mOiBTU0lELAorCSAqIHN1cHBvcnRlZCB0cmFuc2ZlciByYXRlcyBhbmQgY2hhbm5lbCwgaW4gYW55IG9yZGVyLCB3aXRoIHNvbWUKKwkgKiB0b2xlcmFuY2UgZm9yIGludGVybWl0dGVudCB1bmtub3duIGNvZGVzIChhbHRob3VnaCB0aGlzCisJICogZnVuY3Rpb25hbGl0eSBtYXkgbm90IGJlIG5lY2Vzc2FyeSBhcyB0aGUgdXNlZnVsIGluZm9ybWF0aW9uIHdpbGwKKwkgKiB1c3VhbGx5IGFycml2ZSBpbiBjb25zZWN1dGl2ZWx5LCBidXQgdGhlcmUgaGF2ZSBiZWVuIHNvbWUKKwkgKiByZXBvcnRzIG9mIHNvbWUgb2YgdGhlIHVzZWZ1bCBpbmZvcm1hdGlvbiBmaWVsZHMgYXJyaXZpbmcgaW4gYQorCSAqIGRpZmZlcmVudCBvcmRlcikuCisJICogSXQgZG9lcyBub3Qgc3VwcG9ydCBhbnkgbW9yZSBJRSB0eXBlcyBhbHRob3VnaCBNRklFX1RZUEVfVElNIG1heQorCSAqIGJlIHN1cHBvcnRlZCAob24gbXkgQVAgYXQgbGVhc3QpLgorCSAqIFRoZSBiZGF0YS0+ZGF0YSBhcnJheSBpcyBhYm91dCAxNTAwIGJ5dGVzIGxvbmcgYnV0IG9ubHkgfjM2IG9mIHRob3NlCisJICogYnl0ZXMgYXJlIHVzZWZ1bCwgaGVuY2UgdGhlIGhhdmVfc3NpZCBldGMgb3B0aW1pemF0aW9ucy4gKi8KKworCXdoaWxlIChrZWVwX2dvaW5nICYmCisJICAgICAgICgoJmllLT5kYXRhW2llLT5sZW5dIC0gKHU4ICopYmRhdGEtPmluZm9fZWxlbWVudCkgPD0KKwkJdmFycGFyX2xlbikpIHsKKworCQlzd2l0Y2ggKGllLT5pZCkgeworCisJCWNhc2UgTUZJRV9UWVBFX1NTSUQ6CisJCQlpZiAoaGF2ZV9zc2lkKQorCQkJCWJyZWFrOworCisJCQlsZW4gPSBtaW5fdChpbnQsIElXX0VTU0lEX01BWF9TSVpFLCBpZS0+bGVuKTsKKworCQkJLyogd2UgY29weSBvbmx5IGlmIHRoaXMgaXMgYSBuZXcgZW50cnksCisJCQkgICBvciB0aGUgaW5jb21pbmcgU1NJRCBpcyBub3QgYSBoaWRkZW4gU1NJRC4gVGhpcworCQkJICAgd2lsbCBwcm90ZWN0IHVzIGZyb20gb3ZlcndyaXRpbmcgYSByZWFsIFNTSUQgcmVhZAorCQkJICAgaW4gYSBQcm9iZVJlc3BvbnNlIHdpdGggYSBoaWRkZW4gb25lIGZyb20gYQorCQkJICAgZm9sbG93aW5nIGJlYWNvbi4gKi8KKwkJCWlmICghbmV3X2VudHJ5ICYmIGF0NzZfaXNfaGlkZGVuX3NzaWQoaWUtPmRhdGEsIGxlbikpIHsKKwkJCQloYXZlX3NzaWQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCisJCQltYXRjaC0+c3NpZF9sZW4gPSBsZW47CisJCQltZW1jcHkobWF0Y2gtPnNzaWQsIGllLT5kYXRhLCBsZW4pOworCQkJYXQ3Nl9kYmcoREJHX1JYX0JFQUNPTiwgIiVzOiBTU0lEIC0gJS4qcyIsCisJCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgbGVuLCBtYXRjaC0+c3NpZCk7CisJCQloYXZlX3NzaWQgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBNRklFX1RZUEVfUkFURVM6CisJCQlpZiAoaGF2ZV9yYXRlcykKKwkJCQlicmVhazsKKworCQkJbWF0Y2gtPnJhdGVzX2xlbiA9CisJCQkgICAgbWluX3QoaW50LCBzaXplb2YobWF0Y2gtPnJhdGVzKSwgaWUtPmxlbik7CisJCQltZW1jcHkobWF0Y2gtPnJhdGVzLCBpZS0+ZGF0YSwgbWF0Y2gtPnJhdGVzX2xlbik7CisJCQloYXZlX3JhdGVzID0gMTsKKwkJCWF0NzZfZGJnKERCR19SWF9CRUFDT04sICIlczogU1VQUE9SVEVEIFJBVEVTICVzIiwKKwkJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkJCSBoZXgyc3RyKGllLT5kYXRhLCBpZS0+bGVuKSk7CisJCQlicmVhazsKKworCQljYXNlIE1GSUVfVFlQRV9EU19TRVQ6CisJCQlpZiAoaGF2ZV9jaGFubmVsKQorCQkJCWJyZWFrOworCisJCQltYXRjaC0+Y2hhbm5lbCA9IGllLT5kYXRhWzBdOworCQkJaGF2ZV9jaGFubmVsID0gMTsKKwkJCWF0NzZfZGJnKERCR19SWF9CRUFDT04sICIlczogQ0hBTk5FTCAtICVkIiwKKwkJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYXRjaC0+Y2hhbm5lbCk7CisJCQlicmVhazsKKworCQljYXNlIE1GSUVfVFlQRV9DRl9TRVQ6CisJCWNhc2UgTUZJRV9UWVBFX1RJTToKKwkJY2FzZSBNRklFX1RZUEVfSUJTU19TRVQ6CisJCWRlZmF1bHQ6CisJCQlhdDc2X2RiZyhEQkdfUlhfQkVBQ09OLCAiJXM6IGJlYWNvbiBJRSBpZCAlZCBsZW4gJWQgJXMiLAorCQkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGllLT5pZCwgaWUtPmxlbiwKKwkJCQkgaGV4MnN0cihpZS0+ZGF0YSwgaWUtPmxlbikpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBhZHZhbmNlIHRvIHRoZSBuZXh0IGluZm9ybWF0aW9uYWwgZWxlbWVudCAqLworCQluZXh0X2llKCZpZSk7CisKKwkJLyogT3B0aW1pemF0aW9uOiBhZnRlciBhbGwsIHRoZSBiZGF0YS0+ZGF0YSBhcnJheSBpcworCQkgKiB2YXJwYXJfbGVuIGJ5dGVzIGxvbmcsIHdoZXJlYXMgd2UgZ2V0IGFsbCBvZiB0aGUgdXNlZnVsCisJCSAqIGluZm9ybWF0aW9uIGFmdGVyIG9ubHkgfjM2IGJ5dGVzLCB0aGlzIHNhdmVzIHVzIGEgbG90IG9mCisJCSAqIHRpbWUgKGFuZCB0cm91YmxlIGFzIHRoZSByZW1haW5pbmcgcG9ydGlvbiBvZiB0aGUgYXJyYXkKKwkJICogY291bGQgYmUgZnVsbCBvZiBqdW5rKQorCQkgKiBDb21tZW50IHRoaXMgb3V0IGlmIHlvdSB3YW50IHRvIHNlZSB3aGF0IG90aGVyIGluZm9ybWF0aW9uCisJCSAqIGNvbWVzIGZyb20gdGhlIEFQIC0gYWx0aG91Z2ggbGl0dGxlIG9mIGl0IG1heSBiZSB1c2VmdWwgKi8KKwl9CisKKwlhdDc2X2RiZyhEQkdfUlhfQkVBQ09OLCAiJXM6IEZpbmlzaGVkIHByb2Nlc3NpbmcgYmVhY29uIGRhdGEiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lKTsKKworCW1hdGNoLT5sYXN0X3J4ID0gamlmZmllczsJLyogcmVjb3JkIGxhc3Qgcnggb2YgYmVhY29uICovCisKK2V4aXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+YnNzX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKK30KKworLyogQ2FsY3VsYXRlIHRoZSBsaW5rIGxldmVsIGZyb20gYSBnaXZlbiByeF9idWZmZXIgKi8KK3N0YXRpYyB2b2lkIGF0NzZfY2FsY19sZXZlbChzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZiwKKwkJCSAgICBzdHJ1Y3QgaXdfcXVhbGl0eSAqcXVhbCkKK3sKKwkvKiBqdXN0IGEgZ3Vlc3MgZm9yIG5vdywgbWlnaHQgYmUgZGlmZmVyZW50IGZvciBvdGhlciBjaGlwcyAqLworCWludCBtYXhfcnNzaSA9IDQyOworCisJcXVhbC0+bGV2ZWwgPSAoYnVmLT5yc3NpICogMTAwIC8gbWF4X3Jzc2kpOworCWlmIChxdWFsLT5sZXZlbCA+IDEwMCkKKwkJcXVhbC0+bGV2ZWwgPSAxMDA7CisJcXVhbC0+dXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX1VQREFURUQ7Cit9CisKKy8qIENhbGN1bGF0ZSB0aGUgbGluayBxdWFsaXR5IGZyb20gYSBnaXZlbiByeF9idWZmZXIgKi8KK3N0YXRpYyB2b2lkIGF0NzZfY2FsY19xdWFsKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmLAorCQkJICAgc3RydWN0IGl3X3F1YWxpdHkgKnF1YWwpCit7CisJaWYgKGF0NzZfaXNfaW50ZXJzaWwocHJpdi0+Ym9hcmRfdHlwZSkpCisJCXF1YWwtPnF1YWwgPSBidWYtPmxpbmtfcXVhbGl0eTsKKwllbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBlbGFwc2VkOworCisJCS8qIFVwZGF0ZSBxdWFsIGF0IG1vc3Qgb25jZSBhIHNlY29uZCAqLworCQllbGFwc2VkID0gamlmZmllcyAtIHByaXYtPmJlYWNvbnNfbGFzdF9xdWFsOworCQlpZiAoZWxhcHNlZCA8IDEgKiBIWikKKwkJCXJldHVybjsKKworCQlxdWFsLT5xdWFsID0gcXVhbC0+bGV2ZWwgKiBwcml2LT5iZWFjb25zX3JlY2VpdmVkICoKKwkJICAgIG1zZWNzX3RvX2ppZmZpZXMocHJpdi0+YmVhY29uX3BlcmlvZCkgLyBlbGFwc2VkOworCisJCXByaXYtPmJlYWNvbnNfbGFzdF9xdWFsID0gamlmZmllczsKKwkJcHJpdi0+YmVhY29uc19yZWNlaXZlZCA9IDA7CisJfQorCXF1YWwtPnF1YWwgPSAocXVhbC0+cXVhbCA+IDEwMCkgPyAxMDAgOiBxdWFsLT5xdWFsOworCXF1YWwtPnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7Cit9CisKKy8qIENhbGN1bGF0ZSB0aGUgbm9pc2UgcXVhbGl0eSBmcm9tIGEgZ2l2ZW4gcnhfYnVmZmVyICovCitzdGF0aWMgdm9pZCBhdDc2X2NhbGNfbm9pc2Uoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYsCisJCQkgICAgc3RydWN0IGl3X3F1YWxpdHkgKnF1YWwpCit7CisJcXVhbC0+bm9pc2UgPSAwOworCXF1YWwtPnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9JTlZBTElEOworfQorCitzdGF0aWMgdm9pZCBhdDc2X3VwZGF0ZV93c3RhdHMoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXdfcXVhbGl0eSAqcXVhbCA9ICZwcml2LT53c3RhdHMucXVhbDsKKworCWlmIChidWYtPnJzc2kgJiYgcHJpdi0+bWFjX3N0YXRlID09IE1BQ19DT05ORUNURUQpIHsKKwkJcXVhbC0+dXBkYXRlZCA9IDA7CisJCWF0NzZfY2FsY19sZXZlbChwcml2LCBidWYsIHF1YWwpOworCQlhdDc2X2NhbGNfcXVhbChwcml2LCBidWYsIHF1YWwpOworCQlhdDc2X2NhbGNfbm9pc2UocHJpdiwgYnVmLCBxdWFsKTsKKwl9IGVsc2UgeworCQlxdWFsLT5xdWFsID0gMDsKKwkJcXVhbC0+bGV2ZWwgPSAwOworCQlxdWFsLT5ub2lzZSA9IDA7CisJCXF1YWwtPnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9JTlZBTElEOworCX0KK30KKworc3RhdGljIHZvaWQgYXQ3Nl9yeF9tZ210KHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICptZ210ID0KKwkgICAgKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopYnVmLT5wYWNrZXQ7CisJdTE2IGZyYW1lY3RsID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY3RsKTsKKworCS8qIHVwZGF0ZSB3c3RhdHMgKi8KKwlpZiAocHJpdi0+bWFjX3N0YXRlICE9IE1BQ19JTklUICYmIHByaXYtPm1hY19zdGF0ZSAhPSBNQUNfU0NBTk5JTkcpIHsKKwkJLyogamFsOiB0aGlzIGlzIGEgZGlydHkgaGFjayBuZWVkZWQgYnkgVGltIGluIGFkLWhvYyBtb2RlICovCisJCS8qIERhdGEgcGFja2V0cyBhbHdheXMgc2VlbSB0byBoYXZlIGEgMCBsaW5rIGxldmVsLCBzbyB3ZQorCQkgICBvbmx5IHJlYWQgbGluayBxdWFsaXR5IGluZm8gZnJvbSBtYW5hZ2VtZW50IHBhY2tldHMuCisJCSAgIEF0bWVsIGRyaXZlciBhY3R1YWxseSBhdmVyYWdlcyB0aGUgcHJlc2VudCwgYW5kIHByZXZpb3VzCisJCSAgIHZhbHVlcywgd2UganVzdCBwcmVzZW50IHRoZSByYXcgdmFsdWUgYXQgdGhlIG1vbWVudCAtIFRKUyAqLworCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DCisJCSAgICB8fCAocHJpdi0+Y3Vycl9ic3MKKwkJCSYmICFjb21wYXJlX2V0aGVyX2FkZHIobWdtdC0+YWRkcjMsCisJCQkJCSAgICAgICBwcml2LT5jdXJyX2Jzcy0+YnNzaWQpKSkKKwkJCWF0NzZfdXBkYXRlX3dzdGF0cyhwcml2LCBidWYpOworCX0KKworCWF0NzZfZGJnKERCR19SWF9NR01UX0NPTlRFTlQsICIlcyByeCBtZ210IGZyYW1lY3RsIDB4JXggJXMiLAorCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBmcmFtZWN0bCwKKwkJIGhleDJzdHIobWdtdCwgbGUxNl90b19jcHUoYnVmLT53bGVuZ3RoKSkpOworCisJc3dpdGNoIChmcmFtZWN0bCAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CisJCWF0NzZfcnhfbWdtdF9iZWFjb24ocHJpdiwgYnVmKTsKKwkJYnJlYWs7CisKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgorCQlhdDc2X3J4X21nbXRfYXNzb2MocHJpdiwgYnVmKTsKKwkJYnJlYWs7CisKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKKwkJYXQ3Nl9yeF9tZ210X2Rpc2Fzc29jKHByaXYsIGJ1Zik7CisJCWJyZWFrOworCisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKKwkJYXQ3Nl9yeF9tZ210X2F1dGgocHJpdiwgYnVmKTsKKwkJYnJlYWs7CisKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6CisJCWF0NzZfcnhfbWdtdF9kZWF1dGgocHJpdiwgYnVmKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlnbm9yaW5nIGZyYW1lIHdpdGggZnJhbWVjdGwgMHglMDR4XG4iLAorCQkgICAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBmcmFtZWN0bCk7CisJfQorCisJcmV0dXJuOworfQorCisvKiBDb252ZXJ0IHRoZSA4MDIuMTEgaGVhZGVyIGludG8gYW4gZXRoZXJuZXQtc3R5bGUgaGVhZGVyLCBtYWtlIHNrYgorICogcmVhZHkgZm9yIGNvbnN1bXB0aW9uIGJ5IG5ldGlmX3J4KCkgKi8KK3N0YXRpYyB2b2lkIGF0NzZfaWVlZTgwMjExX3RvX2V0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaXdfbW9kZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaTgwMl8xMV9oZHI7CisJc3RydWN0IGV0aGhkciAqZXRoX2hkcl9wOworCXU4ICpzcmNfYWRkcjsKKwl1OCAqZGVzdF9hZGRyOworCisJaTgwMl8xMV9oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKilza2ItPmRhdGE7CisKKwkvKiBUaGF0IHdvdWxkIGJlIHRoZSBldGhlcm5ldCBoZWFkZXIgaWYgdGhlIGhhcmR3YXJlIGNvbnZlcnRlZAorCSAqIHRoZSBmcmFtZSBmb3IgdXMuICBNYWtlIHN1cmUgdGhlIHNvdXJjZSBhbmQgdGhlIGRlc3RpbmF0aW9uCisJICogbWF0Y2ggdGhlIDgwMi4xMSBoZWFkZXIuICBXaGljaCBoYXJkd2FyZSBkb2VzIGl0PyAqLworCWV0aF9oZHJfcCA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX3B1bGwoc2tiLCBJRUVFODAyMTFfM0FERFJfTEVOKTsKKworCWRlc3RfYWRkciA9IGk4MDJfMTFfaGRyLT5hZGRyMTsKKwlpZiAoaXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKQorCQlzcmNfYWRkciA9IGk4MDJfMTFfaGRyLT5hZGRyMjsKKwllbHNlCisJCXNyY19hZGRyID0gaTgwMl8xMV9oZHItPmFkZHIzOworCisJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoZXRoX2hkcl9wLT5oX3NvdXJjZSwgc3JjX2FkZHIpICYmCisJICAgICFjb21wYXJlX2V0aGVyX2FkZHIoZXRoX2hkcl9wLT5oX2Rlc3QsIGRlc3RfYWRkcikpCisJCS8qIFllcywgd2UgYWxyZWFkeSBoYXZlIGFuIGV0aGVybmV0IGhlYWRlciAqLworCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCWVsc2UgeworCQl1MTYgbGVuOworCisJCS8qIE5lZWQgdG8gYnVpbGQgYW4gZXRoZXJuZXQgaGVhZGVyICovCisJCWlmICghbWVtY21wKHNrYi0+ZGF0YSwgc25hcHNpZywgc2l6ZW9mKHNuYXBzaWcpKSkgeworCQkJLyogU05BUCBmcmFtZSAtIGRlY2Fwc3VsYXRlLCBrZWVwIHByb3RvICovCisJCQlza2JfcHVzaChza2IsIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfcHJvdG8pIC0KKwkJCQkgc2l6ZW9mKHJmYzEwNDJzaWcpKTsKKwkJCWxlbiA9IDA7CisJCX0gZWxzZSB7CisJCQkvKiA4MDIuMyBmcmFtZSwgcHJvdG8gaXMgbGVuZ3RoICovCisJCQlsZW4gPSBza2ItPmxlbjsKKwkJCXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOworCQl9CisKKwkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwkJZXRoX2hkcl9wID0gZXRoX2hkcihza2IpOworCQkvKiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhpcyBvcmRlciAoZXRoX2hkcl9wLT5oX2Rlc3QgbWF5CisJCSAqIG92ZXJsYXAgc3JjX2FkZHIpICovCisJCW1lbWNweShldGhfaGRyX3AtPmhfc291cmNlLCBzcmNfYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkoZXRoX2hkcl9wLT5oX2Rlc3QsIGRlc3RfYWRkciwgRVRIX0FMRU4pOworCQlpZiAobGVuKQorCQkJZXRoX2hkcl9wLT5oX3Byb3RvID0gaHRvbnMobGVuKTsKKwl9CisKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBza2ItPmRldik7Cit9CisKKy8qIENoZWNrIGZvciBmcmFnbWVudGVkIGRhdGEgaW4gcHJpdi0+cnhfc2tiLiBJZiB0aGUgcGFja2V0IHdhcyBubyBmcmFnbWVudAorICAgb3IgaXQgd2FzIHRoZSBsYXN0IG9mIGEgZnJhZ21lbnQgc2V0IGEgc2tiIGNvbnRhaW5pbmcgdGhlIHdob2xlIHBhY2tldAorICAgaXMgcmV0dXJuZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4gT3RoZXJ3aXNlIHdlIGdldCBOVUxMIGFuZCBhcmUKKyAgIGRvbmUgYW5kIHRoZSBwYWNrZXQgaXMgZWl0aGVyIHN0b3JlZCBpbnNpZGUgdGhlIGZyYWdtZW50IGJ1ZmZlcgorICAgb3IgdGhyb3duIGF3YXkuICBFdmVyeSByZXR1cm5lZCBza2Igc3RhcnRzIHdpdGggdGhlIGllZWU4MDJfMTEgaGVhZGVyCisgICBhbmQgY29udGFpbnMgX25vXyBGQ1MgYXQgdGhlIGVuZCAqLworc3RhdGljIHN0cnVjdCBza19idWZmICphdDc2X2NoZWNrX2Zvcl9yeF9mcmFncyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBwcml2LT5yeF9za2I7CisJc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYgPSAoc3RydWN0IGF0NzZfcnhfYnVmZmVyICopc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICppODAyXzExX2hkciA9CisJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKWJ1Zi0+cGFja2V0OworCS8qIHNlcV9jdHJsLCBmcmFnbWVudF9udW1iZXIsIHNlcXVlbmNlIG51bWJlciBvZiBuZXcgcGFja2V0ICovCisJdTE2IHNjdGwgPSBsZTE2X3RvX2NwdShpODAyXzExX2hkci0+c2VxX2N0bCk7CisJdTE2IGZyYWduciA9IHNjdGwgJiAweGY7CisJdTE2IHNlcW5yID0gc2N0bCA+PiA0OworCXUxNiBmcmFtZV9jdGwgPSBsZTE2X3RvX2NwdShpODAyXzExX2hkci0+ZnJhbWVfY3RsKTsKKworCS8qIExlbmd0aCBpbmNsdWRpbmcgdGhlIElFRUU4MDIuMTEgaGVhZGVyLCBidXQgd2l0aG91dCB0aGUgdHJhaWxpbmcKKwkgKiBGQ1MgYW5kIHdpdGhvdXQgdGhlIEF0bWVsIFJ4IGhlYWRlciAqLworCWludCBsZW5ndGggPSBsZTE2X3RvX2NwdShidWYtPndsZW5ndGgpIC0gSUVFRTgwMjExX0ZDU19MRU47CisKKwkvKiB3aGVyZSBkb2VzIHRoZSBkYXRhIHBheWxvYWQgc3RhcnQgaW4gc2tiLT5kYXRhID8gKi8KKwl1OCAqZGF0YSA9IGk4MDJfMTFfaGRyLT5wYXlsb2FkOworCisJLyogbGVuZ3RoIG9mIHBheWxvYWQsIGV4Y2wuIHRoZSB0cmFpbGluZyBGQ1MgKi8KKwlpbnQgZGF0YV9sZW4gPSBsZW5ndGggLSBJRUVFODAyMTFfM0FERFJfTEVOOworCisJaW50IGk7CisJc3RydWN0IHJ4X2RhdGFfYnVmICpicHRyLCAqb3B0cjsKKwl1bnNpZ25lZCBsb25nIG9sZGVzdCA9IH4wVUw7CisKKwlhdDc2X2RiZyhEQkdfUlhfRlJBR1MsCisJCSAiJXM6IHJ4IGRhdGEgZnJhbWVfY3RsICUwNHggYWRkcjIgJXMgc2VxL2ZyYWcgJWQvJWQgIgorCQkgImxlbmd0aCAlZCBkYXRhICVkOiAlcyAuLi4iLCBwcml2LT5uZXRkZXYtPm5hbWUsIGZyYW1lX2N0bCwKKwkJIG1hYzJzdHIoaTgwMl8xMV9oZHItPmFkZHIyKSwgc2VxbnIsIGZyYWduciwgbGVuZ3RoLCBkYXRhX2xlbiwKKwkJIGhleDJzdHIoZGF0YSwgMzIpKTsKKworCWF0NzZfZGJnKERCR19SWF9GUkFHU19TS0IsICIlczogaW5jb21pbmcgc2tiOiBoZWFkICVwIGRhdGEgJXAgIgorCQkgInRhaWwgJXAgZW5kICVwIGxlbiAlZCIsIHByaXYtPm5ldGRldi0+bmFtZSwgc2tiLT5oZWFkLAorCQkgc2tiLT5kYXRhLCBza2JfdGFpbF9wb2ludGVyKHNrYiksIHNrYl9lbmRfcG9pbnRlcihza2IpLAorCQkgc2tiLT5sZW4pOworCisJaWYgKGRhdGFfbGVuIDwgMCkgeworCQkvKiBtYWtlIHN1cmUgZGF0YSBzdGFydHMgaW4gdGhlIGJ1ZmZlciAqLworCQlwcmludGsoS0VSTl9JTkZPICIlczogZGF0YSBmcmFtZSB0b28gc2hvcnRcbiIsCisJCSAgICAgICBwcml2LT5uZXRkZXYtPm5hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlXQVJOX09OKGxlbmd0aCA8PSBBVDc2X1JYX0hEUkxFTik7CisJaWYgKGxlbmd0aCA8PSBBVDc2X1JYX0hEUkxFTikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiByZW1vdmUgdGhlIGF0NzZfcnhfYnVmZmVyIGhlYWRlciAtIHdlIGRvbid0IG5lZWQgaXQgYW55bW9yZSAqLworCS8qIHdlIG5lZWQgdGhlIElFRUU4MDIuMTEgaGVhZGVyIChmb3IgdGhlIGFkZHJlc3NlcykgaWYgdGhpcyBwYWNrZXQKKwkgICBpcyB0aGUgZmlyc3Qgb2YgYSBjaGFpbiAqLworCXNrYl9wdWxsKHNrYiwgQVQ3Nl9SWF9IRFJMRU4pOworCisJLyogcmVtb3ZlIEZDUyBhdCBlbmQgKi8KKwlza2JfdHJpbShza2IsIGxlbmd0aCk7CisKKwlhdDc2X2RiZyhEQkdfUlhfRlJBR1NfU0tCLCAiJXM6IHRyaW1tZWQgc2tiOiBoZWFkICVwIGRhdGEgJXAgdGFpbCAlcCAiCisJCSAiZW5kICVwIGxlbiAlZCBkYXRhICVwIGRhdGFfbGVuICVkIiwgcHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkgc2tiLT5oZWFkLCBza2ItPmRhdGEsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSwKKwkJIHNrYl9lbmRfcG9pbnRlcihza2IpLCBza2ItPmxlbiwgZGF0YSwgZGF0YV9sZW4pOworCisJaWYgKGZyYWduciA9PSAwICYmICEoZnJhbWVfY3RsICYgSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKSkgeworCQkvKiB1bmZyYWdtZW50ZWQgcGFja2V0IHJlY2VpdmVkICovCisJCS8qIFVzZSBhIG5ldyBza2IgZm9yIHRoZSBuZXh0IHJlY2VpdmUgKi8KKwkJcHJpdi0+cnhfc2tiID0gTlVMTDsKKwkJYXQ3Nl9kYmcoREJHX1JYX0ZSQUdTLCAiJXM6IHVuZnJhZ21lbnRlZCIsIHByaXYtPm5ldGRldi0+bmFtZSk7CisJCXJldHVybiBza2I7CisJfQorCisJLyogbG9vayBpZiB3ZSd2ZSBnb3QgYSBjaGFpbiBmb3IgdGhlIHNlbmRlciBhZGRyZXNzLgorCSAgIGFmdGVyd2FyZHMgb3B0ciBwb2ludHMgdG8gZmlyc3QgZnJlZSBvciB0aGUgb2xkZXN0IGVudHJ5LAorCSAgIG9yLCBpZiBpIDwgTlJfUlhfREFUQV9CVUYsIGJwdHIgcG9pbnRzIHRvIHRoZSBlbnRyeSBmb3IgdGhlCisJICAgc2VuZGVyIGFkZHJlc3MgKi8KKwkvKiBkZXRlcm1pbmluZyB0aGUgb2xkZXN0IGVudHJ5IGRvZXNuJ3QgY29wZSB3aXRoIGppZmZpZXMgd3JhcHBpbmcKKwkgICBidXQgSSBkb24ndCBjYXJlIHRvIGRlbGV0ZSBhIHlvdW5nIGVudHJ5IGF0IHRoZXNlIHJhcmUgbW9tZW50cyAuLi4gKi8KKworCWJwdHIgPSBwcml2LT5yeF9kYXRhOworCW9wdHIgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBOUl9SWF9EQVRBX0JVRjsgaSsrLCBicHRyKyspIHsKKwkJaWYgKCFicHRyLT5za2IpIHsKKwkJCW9wdHIgPSBicHRyOworCQkJb2xkZXN0ID0gMFVMOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihpODAyXzExX2hkci0+YWRkcjIsIGJwdHItPnNlbmRlcikpCisJCQlicmVhazsKKworCQlpZiAoIW9wdHIpIHsKKwkJCW9wdHIgPSBicHRyOworCQkJb2xkZXN0ID0gYnB0ci0+bGFzdF9yeDsKKwkJfSBlbHNlIGlmIChicHRyLT5sYXN0X3J4IDwgb2xkZXN0KQorCQkJb3B0ciA9IGJwdHI7CisJfQorCisJaWYgKGkgPCBOUl9SWF9EQVRBX0JVRikgeworCisJCWF0NzZfZGJnKERCR19SWF9GUkFHUywgIiVzOiAlZC4gY2FjaGVlbnRyeSAoc2VxL2ZyYWcgPSAlZC8lZCkgIgorCQkJICJtYXRjaGVkIHNlbmRlciBhZGRyIiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGksIGJwdHItPnNlcW5yLCBicHRyLT5mcmFnbnIpOworCisJCS8qIGJwdHIgcG9pbnRzIHRvIGFuIGVudHJ5IGZvciB0aGUgc2VuZGVyIGFkZHJlc3MgKi8KKwkJaWYgKGJwdHItPnNlcW5yID09IHNlcW5yKSB7CisJCQlpbnQgbGVmdDsKKwkJCS8qIHRoZSBmcmFnbWVudCBoYXMgdGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyICovCisJCQlpZiAoKChicHRyLT5mcmFnbnIgKyAxKSAmIDB4ZikgIT0gZnJhZ25yKSB7CisJCQkJLyogd3JvbmcgZnJhZ21lbnQgbnVtYmVyIC0+IGlnbm9yZSBpdCAqLworCQkJCS8qIGlzICYgMHhmIG5lY2Vzc2FyeSBhYm92ZSA/Pz8gKi8KKwkJCQlhdDc2X2RiZyhEQkdfUlhfRlJBR1MsCisJCQkJCSAiJXM6IGZyYWcgbnIgbWlzbWF0Y2g6ICVkICsgMSAhPSAlZCIsCisJCQkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGJwdHItPmZyYWduciwKKwkJCQkJIGZyYWducik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlicHRyLT5sYXN0X3J4ID0gamlmZmllczsKKwkJCS8qIHRoZSBuZXh0IGZvbGxvd2luZyBmcmFnbWVudCBudW1iZXIgLT4KKwkJCSAgIGFkZCB0aGUgZGF0YSBhdCB0aGUgZW5kICovCisKKwkJCS8qIGZvciB0ZXN0IG9ubHkgPz8/ICovCisJCQlsZWZ0ID0gc2tiX3RhaWxyb29tKGJwdHItPnNrYik7CisJCQlpZiAobGVmdCA8IGRhdGFfbGVuKQorCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkgICAgICAgIiVzOiBvbmx5ICVkIGJ5dGUgZnJlZSAobmVlZCAlZClcbiIsCisJCQkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgbGVmdCwgZGF0YV9sZW4pOworCQkJZWxzZQorCQkJCW1lbWNweShza2JfcHV0KGJwdHItPnNrYiwgZGF0YV9sZW4pLCBkYXRhLAorCQkJCSAgICAgICBkYXRhX2xlbik7CisKKwkJCWJwdHItPmZyYWduciA9IGZyYWducjsKKwkJCWlmIChmcmFtZV9jdGwgJiBJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpCisJCQkJcmV0dXJuIE5VTEw7CisKKwkJCS8qIHRoaXMgd2FzIHRoZSBsYXN0IGZyYWdtZW50IC0gc2VuZCBpdCAqLworCQkJc2tiID0gYnB0ci0+c2tiOworCQkJYnB0ci0+c2tiID0gTlVMTDsJLyogZnJlZSB0aGUgZW50cnkgKi8KKwkJCWF0NzZfZGJnKERCR19SWF9GUkFHUywgIiVzOiBsYXN0IGZyYWcgb2Ygc2VxICVkIiwKKwkJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBzZXFucik7CisJCQlyZXR1cm4gc2tiOworCQl9CisKKwkJLyogZ290IGFub3RoZXIgc2VxdWVuY2UgbnVtYmVyICovCisJCWlmIChmcmFnbnIgPT0gMCkgeworCQkJLyogaXQncyB0aGUgc3RhcnQgb2YgYSBuZXcgY2hhaW4gLSByZXBsYWNlIHRoZQorCQkJICAgb2xkIG9uZSBieSB0aGlzICovCisJCQkvKiBicHRyLT5zZW5kZXIgaGFzIHRoZSBjb3JyZWN0IHZhbHVlIGFscmVhZHkgKi8KKwkJCWF0NzZfZGJnKERCR19SWF9GUkFHUywKKwkJCQkgIiVzOiBzdGFydCBvZiBuZXcgc2VxICVkLCByZW1vdmluZyBvbGQgc2VxICVkIiwKKwkJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBzZXFuciwgYnB0ci0+c2VxbnIpOworCQkJYnB0ci0+c2VxbnIgPSBzZXFucjsKKwkJCWJwdHItPmZyYWduciA9IDA7CisJCQlicHRyLT5sYXN0X3J4ID0gamlmZmllczsKKwkJCS8qIHN3YXAgYnB0ci0+c2tiIGFuZCBwcml2LT5yeF9za2IgKi8KKwkJCXNrYiA9IGJwdHItPnNrYjsKKwkJCWJwdHItPnNrYiA9IHByaXYtPnJ4X3NrYjsKKwkJCXByaXYtPnJ4X3NrYiA9IHNrYjsKKwkJfSBlbHNlIHsKKwkJCS8qIGl0IGZyb20gdGhlIG1pZGRsZSBvZiBhIG5ldyBjaGFpbiAtPgorCQkJICAgZGVsZXRlIHRoZSBvbGQgZW50cnkgYW5kIHNraXAgdGhlIG5ldyBvbmUgKi8KKwkJCWF0NzZfZGJnKERCR19SWF9GUkFHUywKKwkJCQkgIiVzOiBtaWRkbGUgb2YgbmV3IHNlcSAlZCAoJWQpICIKKwkJCQkgInJlbW92aW5nIG9sZCBzZXEgJWQiLAorCQkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIHNlcW5yLCBmcmFnbnIsCisJCQkJIGJwdHItPnNlcW5yKTsKKwkJCWRldl9rZnJlZV9za2IoYnB0ci0+c2tiKTsKKwkJCWJwdHItPnNrYiA9IE5VTEw7CisJCX0KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogaWYgd2UgZGlkbid0IGZpbmQgYSBjaGFpbiBmb3IgdGhlIHNlbmRlciBhZGRyZXNzLCBvcHRyCisJICAgcG9pbnRzIGVpdGhlciB0byB0aGUgZmlyc3QgZnJlZSBvciB0aGUgb2xkZXN0IGVudHJ5ICovCisKKwlpZiAoZnJhZ25yICE9IDApIHsKKwkJLyogdGhpcyBpcyBub3QgdGhlIGJlZ2luIG9mIGEgZnJhZ21lbnQgY2hhaW4gLi4uICovCisJCWF0NzZfZGJnKERCR19SWF9GUkFHUywKKwkJCSAiJXM6IG5vIGNoYWluIGZvciBub24tZmlyc3QgZnJhZ21lbnQgKCVkKSIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBmcmFnbnIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlCVUdfT04oIW9wdHIpOworCWlmIChvcHRyLT5za2IpIHsKKwkJLyogc3dhcCB0aGUgc2tiJ3MgKi8KKwkJc2tiID0gb3B0ci0+c2tiOworCQlvcHRyLT5za2IgPSBwcml2LT5yeF9za2I7CisJCXByaXYtPnJ4X3NrYiA9IHNrYjsKKworCQlhdDc2X2RiZyhEQkdfUlhfRlJBR1MsCisJCQkgIiVzOiBmcmVlIG9sZCBjb250ZW50czogc2VuZGVyICVzIHNlcS9mcmFnICVkLyVkIiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIG1hYzJzdHIob3B0ci0+c2VuZGVyKSwKKwkJCSBvcHRyLT5zZXFuciwgb3B0ci0+ZnJhZ25yKTsKKworCX0gZWxzZSB7CisJCS8qIHRha2UgdGhlIHNrYiBmcm9tIHByaXYtPnJ4X3NrYiAqLworCQlvcHRyLT5za2IgPSBwcml2LT5yeF9za2I7CisJCS8qIGxldCBhdDc2X3N1Ym1pdF9yeF91cmIoKSBhbGxvY2F0ZSBhIG5ldyBza2IgKi8KKwkJcHJpdi0+cnhfc2tiID0gTlVMTDsKKworCQlhdDc2X2RiZyhEQkdfUlhfRlJBR1MsICIlczogdXNlIGEgZnJlZSBlbnRyeSIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lKTsKKwl9CisJbWVtY3B5KG9wdHItPnNlbmRlciwgaTgwMl8xMV9oZHItPmFkZHIyLCBFVEhfQUxFTik7CisJb3B0ci0+c2VxbnIgPSBzZXFucjsKKwlvcHRyLT5mcmFnbnIgPSAwOworCW9wdHItPmxhc3RfcnggPSBqaWZmaWVzOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJ4IGludGVycnVwdDogd2UgZXhwZWN0IHRoZSBjb21wbGV0ZSBkYXRhIGJ1ZmZlciBpbiBwcml2LT5yeF9za2IgKi8KK3N0YXRpYyB2b2lkIGF0NzZfcnhfZGF0YShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwcml2LT5uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCXN0cnVjdCBza19idWZmICpza2IgPSBwcml2LT5yeF9za2I7CisJc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWYgPSAoc3RydWN0IGF0NzZfcnhfYnVmZmVyICopc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICppODAyXzExX2hkcjsKKwlpbnQgbGVuZ3RoID0gbGUxNl90b19jcHUoYnVmLT53bGVuZ3RoKTsKKworCWF0NzZfZGJnKERCR19SWF9EQVRBLCAiJXMgcmVjZWl2ZWQgZGF0YSBwYWNrZXQ6ICVzIiwgbmV0ZGV2LT5uYW1lLAorCQkgaGV4MnN0cihza2ItPmRhdGEsIEFUNzZfUlhfSERSTEVOKSk7CisKKwlhdDc2X2RiZyhEQkdfUlhfREFUQV9DT05URU5ULCAicnggcGFja2V0OiAlcyIsCisJCSBoZXgyc3RyKHNrYi0+ZGF0YSArIEFUNzZfUlhfSERSTEVOLCBsZW5ndGgpKTsKKworCXNrYiA9IGF0NzZfY2hlY2tfZm9yX3J4X2ZyYWdzKHByaXYpOworCWlmICghc2tiKQorCQlyZXR1cm47CisKKwkvKiBBdG1lbCBoZWFkZXIgYW5kIHRoZSBGQ1MgYXJlIGFscmVhZHkgcmVtb3ZlZCAqLworCWk4MDJfMTFfaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopc2tiLT5kYXRhOworCisJc2tiLT5kZXYgPSBuZXRkZXY7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwkvKiBUT0RPOiBzaG91bGQgY2hlY2sgQ1JDICovCisKKwlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaTgwMl8xMV9oZHItPmFkZHIxKSkgeworCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihpODAyXzExX2hkci0+YWRkcjEsIG5ldGRldi0+YnJvYWRjYXN0KSkKKwkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfQlJPQURDQVNUOworCQllbHNlCisJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX01VTFRJQ0FTVDsKKwl9IGVsc2UgaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihpODAyXzExX2hkci0+YWRkcjEsIG5ldGRldi0+ZGV2X2FkZHIpKQorCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKworCWF0NzZfaWVlZTgwMjExX3RvX2V0aChza2IsIHByaXYtPml3X21vZGUpOworCisJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwluZXRpZl9yeChza2IpOworCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJc3RhdHMtPnJ4X2J5dGVzICs9IGxlbmd0aDsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9yeF9tb25pdG9yX21vZGUoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXQ3Nl9yeF9yYWRpb3RhcCAqcnQ7CisJdTggKnBheWxvYWQ7CisJaW50IHNrYmxlbjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHJpdi0+bmV0ZGV2OworCXN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqYnVmID0KKwkgICAgKHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqKXByaXYtPnJ4X3NrYi0+ZGF0YTsKKwkvKiBsZW5ndGggaW5jbHVkaW5nIHRoZSBJRUVFODAyLjExIGhlYWRlciBhbmQgdGhlIHRyYWlsaW5nIEZDUywKKwkgICBidXQgbm90IGF0NzZfcnhfYnVmZmVyICovCisJaW50IGxlbmd0aCA9IGxlMTZfdG9fY3B1KGJ1Zi0+d2xlbmd0aCk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtPnJ4X3NrYjsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisKKwlpZiAobGVuZ3RoIDwgSUVFRTgwMjExX0ZDU19MRU4pIHsKKwkJLyogYnVmZmVyIGNvbnRhaW5zIG5vIGRhdGEgKi8KKwkJYXQ3Nl9kYmcoREJHX01PTklUT1JfTU9ERSwKKwkJCSAiJXM6IE1PTklUT1IgTU9ERTogcnggc2tiIHdpdGhvdXQgZGF0YSIsCisJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXNrYmxlbiA9IHNpemVvZihzdHJ1Y3QgYXQ3Nl9yeF9yYWRpb3RhcCkgKyBsZW5ndGg7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYmxlbik7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogTU9OSVRPUiBNT0RFOiBkZXZfYWxsb2Nfc2tiIGZvciByYWRpb3RhcCAiCisJCSAgICAgICAiaGVhZGVyIHJldHVybmVkIE5VTExcbiIsIHByaXYtPm5ldGRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlza2JfcHV0KHNrYiwgc2tibGVuKTsKKworCXJ0ID0gKHN0cnVjdCBhdDc2X3J4X3JhZGlvdGFwICopc2tiLT5kYXRhOworCXBheWxvYWQgPSBza2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IGF0NzZfcnhfcmFkaW90YXApOworCisJcnQtPnJ0X2hkci5pdF92ZXJzaW9uID0gMDsKKwlydC0+cnRfaGRyLml0X3BhZCA9IDA7CisJcnQtPnJ0X2hkci5pdF9sZW4gPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGF0NzZfcnhfcmFkaW90YXApKTsKKwlydC0+cnRfaGRyLml0X3ByZXNlbnQgPSBjcHVfdG9fbGUzMihBVDc2X1JYX1JBRElPVEFQX1BSRVNFTlQpOworCisJcnQtPnJ0X3RzZnQgPSBjcHVfdG9fbGU2NChsZTMyX3RvX2NwdShidWYtPnJ4X3RpbWUpKTsKKwlydC0+cnRfcmF0ZSA9IGh3X3JhdGVzW2J1Zi0+cnhfcmF0ZV0gJiAofjB4ODApOworCXJ0LT5ydF9zaWduYWwgPSBidWYtPnJzc2k7CisJcnQtPnJ0X25vaXNlID0gYnVmLT5ub2lzZV9sZXZlbDsKKwlydC0+cnRfZmxhZ3MgPSBJRUVFODAyMTFfUkFESU9UQVBfRl9GQ1M7CisJaWYgKGJ1Zi0+ZnJhZ21lbnRhdGlvbikKKwkJcnQtPnJ0X2ZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9GX0ZSQUc7CisKKwltZW1jcHkocGF5bG9hZCwgYnVmLT5wYWNrZXQsIGxlbmd0aCk7CisJc2tiLT5kZXYgPSBuZXRkZXY7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CisJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTsKKworCW5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJbmV0aWZfcngoc2tiKTsKKwlzdGF0cy0+cnhfcGFja2V0cysrOworCXN0YXRzLT5yeF9ieXRlcyArPSBsZW5ndGg7Cit9CisKKy8qIENoZWNrIGlmIHdlIHNweSBvbiB0aGUgc2VuZGVyIGFkZHJlc3MgaW4gYnVmIGFuZCB1cGRhdGUgc3RhdHMgKi8KK3N0YXRpYyB2b2lkIGF0NzZfaXdzcHlfdXBkYXRlKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaGRyID0KKwkgICAgKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopYnVmLT5wYWNrZXQ7CisJc3RydWN0IGl3X3F1YWxpdHkgcXVhbDsKKworCS8qIFdlIGNhbiBvbmx5IHNldCB0aGUgbGV2ZWwgaGVyZSAqLworCXF1YWwudXBkYXRlZCA9IElXX1FVQUxfUVVBTF9JTlZBTElEIHwgSVdfUVVBTF9OT0lTRV9JTlZBTElEOworCXF1YWwubGV2ZWwgPSAwOworCXF1YWwubm9pc2UgPSAwOworCWF0NzZfY2FsY19sZXZlbChwcml2LCBidWYsICZxdWFsKTsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+c3B5X3NwaW5sb2NrKTsKKworCWlmIChwcml2LT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkKKwkJd2lyZWxlc3Nfc3B5X3VwZGF0ZShwcml2LT5uZXRkZXYsIGhkci0+YWRkcjIsICZxdWFsKTsKKworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5zcHlfc3BpbmxvY2spOworfQorCitzdGF0aWMgdm9pZCBhdDc2X3J4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSAoc3RydWN0IHVyYiAqKXBhcmFtOworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHByaXYtPm5ldGRldjsKKwlzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKmJ1ZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaTgwMl8xMV9oZHI7CisJdTE2IGZyYW1lX2N0bDsKKworCWlmIChwcml2LT5kZXZpY2VfdW5wbHVnZ2VkKSB7CisJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgImRldmljZSB1bnBsdWdnZWQiKTsKKwkJaWYgKHVyYikKKwkJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgInVyYiBzdGF0dXMgJWQiLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXByaXYtPnJ4X3NrYiB8fCAhbmV0ZGV2IHx8ICFwcml2LT5yeF9za2ItPmRhdGEpCisJCXJldHVybjsKKworCWJ1ZiA9IChzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIgKilwcml2LT5yeF9za2ItPmRhdGE7CisKKwlpODAyXzExX2hkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKWJ1Zi0+cGFja2V0OworCisJZnJhbWVfY3RsID0gbGUxNl90b19jcHUoaTgwMl8xMV9oZHItPmZyYW1lX2N0bCk7CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVOT0VOVCAmJiB1cmItPnN0YXR1cyAhPSAtRUNPTk5SRVNFVCkKKwkJCWF0NzZfZGJnKERCR19VUkIsCisJCQkJICIlcyAlczogLSBub256ZXJvIFJ4IGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQkJIF9fZnVuY19fLCBuZXRkZXYtPm5hbWUsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCWF0NzZfZGJnKERCR19SWF9BVE1FTF9IRFIsCisJCSAiJXM6IHJ4IGZyYW1lOiByYXRlICVkIHJzc2kgJWQgbm9pc2UgJWQgbGluayAlZCAlcyIsCisJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGJ1Zi0+cnhfcmF0ZSwgYnVmLT5yc3NpLCBidWYtPm5vaXNlX2xldmVsLAorCQkgYnVmLT5saW5rX3F1YWxpdHksIGhleDJzdHIoaTgwMl8xMV9oZHIsIDQ4KSk7CisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCWF0NzZfcnhfbW9uaXRvcl9tb2RlKHByaXYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogdGhlcmUgaXMgYSBuZXcgYnNzaWQgYXJvdW5kLCBhY2NlcHQgaXQ6ICovCisJaWYgKGJ1Zi0+bmV3YnNzICYmIHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgeworCQlhdDc2X2RiZyhEQkdfUFJPR1JFU1MsICIlczogcnggbmV3YnNzIiwgbmV0ZGV2LT5uYW1lKTsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+d29ya19uZXdfYnNzKTsKKwl9CisKKwlzd2l0Y2ggKGZyYW1lX2N0bCAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSB7CisJY2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQToKKwkJYXQ3Nl9yeF9kYXRhKHByaXYpOworCQlicmVhazsKKworCWNhc2UgSUVFRTgwMjExX0ZUWVBFX01HTVQ6CisJCS8qIGphbDogVE9ETzogZmluZCBvdXQgaWYgd2UgY2FuIHVwZGF0ZSBpd3NweSBhbHNvIG9uCisJCSAgIG90aGVyIGZyYW1lcyB0aGFuIG1hbmFnZW1lbnQgKG1pZ2h0IGRlcGVuZCBvbiB0aGUKKwkJICAgcmFkaW8gY2hpcCAvIGZpcm13YXJlIHZlcnNpb24gISkgKi8KKworCQlhdDc2X2l3c3B5X3VwZGF0ZShwcml2LCBidWYpOworCisJCWF0NzZfcnhfbWdtdChwcml2LCBidWYpOworCQlicmVhazsKKworCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKKwkJYXQ3Nl9kYmcoREJHX1JYX0NUUkwsICIlczogaWdub3JlZCBjdHJsIGZyYW1lOiAlMDR4IiwKKwkJCSBwcml2LT5uZXRkZXYtPm5hbWUsIGZyYW1lX2N0bCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpZ25vcmluZyBmcmFtZSB3aXRoIGZyYW1lY3RsIDB4JTA0eFxuIiwKKwkJICAgICAgIHByaXYtPm5ldGRldi0+bmFtZSwgZnJhbWVfY3RsKTsKKwl9CitleGl0OgorCWF0NzZfc3VibWl0X3J4X3VyYihwcml2KTsKK30KKworLyogTG9hZCBmaXJtd2FyZSBpbnRvIGtlcm5lbCBtZW1vcnkgYW5kIHBhcnNlIGl0ICovCitzdGF0aWMgc3RydWN0IGZ3ZW50cnkgKmF0NzZfbG9hZF9maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkJICBlbnVtIGJvYXJkX3R5cGUgYm9hcmRfdHlwZSkKK3sKKwlpbnQgcmV0OworCWNoYXIgKnN0cjsKKwlzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgKmZ3aDsKKwlzdHJ1Y3QgZndlbnRyeSAqZndlID0gJmZpcm13YXJlc1tib2FyZF90eXBlXTsKKworCW11dGV4X2xvY2soJmZ3X211dGV4KTsKKworCWlmIChmd2UtPmxvYWRlZCkgeworCQlhdDc2X2RiZyhEQkdfRlcsICJyZS11c2luZyBwcmV2aW91c2x5IGxvYWRlZCBmdyIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX0ZXLCAiZG93bmxvYWRpbmcgZmlybXdhcmUgJXMiLCBmd2UtPmZ3bmFtZSk7CisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZndlLT5mdywgZndlLT5md25hbWUsICZ1ZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsICJmaXJtd2FyZSAlcyBub3QgZm91bmQhXG4iLAorCQkJICAgZndlLT5md25hbWUpOworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJICAgInlvdSBtYXkgbmVlZCB0byBkb3dubG9hZCB0aGUgZmlybXdhcmUgZnJvbSAiCisJCQkgICAiaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL2F0NzZjNTAzYS8iKTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19GVywgImdvdCBpdC4iKTsKKwlmd2ggPSAoc3RydWN0IGF0NzZfZndfaGVhZGVyICopKGZ3ZS0+ZnctPmRhdGEpOworCisJaWYgKGZ3ZS0+ZnctPnNpemUgPD0gc2l6ZW9mKCpmd2gpKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkgICAiZmlybXdhcmUgaXMgdG9vIHNob3J0ICgweCV6eClcbiIsIGZ3ZS0+ZnctPnNpemUpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogQ1JDIGN1cnJlbnRseSBub3QgY2hlY2tlZCAqLworCWZ3ZS0+Ym9hcmRfdHlwZSA9IGxlMzJfdG9fY3B1KGZ3aC0+Ym9hcmRfdHlwZSk7CisJaWYgKGZ3ZS0+Ym9hcmRfdHlwZSAhPSBib2FyZF90eXBlKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkgICAiYm9hcmQgdHlwZSBtaXNtYXRjaCwgcmVxdWVzdGVkICV1LCBnb3QgJXVcbiIsCisJCQkgICBib2FyZF90eXBlLCBmd2UtPmJvYXJkX3R5cGUpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZndlLT5md192ZXJzaW9uLm1ham9yID0gZndoLT5tYWpvcjsKKwlmd2UtPmZ3X3ZlcnNpb24ubWlub3IgPSBmd2gtPm1pbm9yOworCWZ3ZS0+ZndfdmVyc2lvbi5wYXRjaCA9IGZ3aC0+cGF0Y2g7CisJZndlLT5md192ZXJzaW9uLmJ1aWxkID0gZndoLT5idWlsZDsKKworCXN0ciA9IChjaGFyICopZndoICsgbGUzMl90b19jcHUoZndoLT5zdHJfb2Zmc2V0KTsKKwlmd2UtPmludGZ3ID0gKHU4ICopZndoICsgbGUzMl90b19jcHUoZndoLT5pbnRfZndfb2Zmc2V0KTsKKwlmd2UtPmludGZ3X3NpemUgPSBsZTMyX3RvX2NwdShmd2gtPmludF9md19sZW4pOworCWZ3ZS0+ZXh0ZncgPSAodTggKilmd2ggKyBsZTMyX3RvX2NwdShmd2gtPmV4dF9md19vZmZzZXQpOworCWZ3ZS0+ZXh0Zndfc2l6ZSA9IGxlMzJfdG9fY3B1KGZ3aC0+ZXh0X2Z3X2xlbik7CisKKwlmd2UtPmxvYWRlZCA9IDE7CisKKwlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZ1ZGV2LT5kZXYsCisJCSAgICJ1c2luZyBmaXJtd2FyZSAlcyAodmVyc2lvbiAlZC4lZC4lZC0lZClcbiIsCisJCSAgIGZ3ZS0+ZnduYW1lLCBmd2gtPm1ham9yLCBmd2gtPm1pbm9yLCBmd2gtPnBhdGNoLCBmd2gtPmJ1aWxkKTsKKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgImJvYXJkICV1LCBpbnQgJWQ6JWQsIGV4dCAlZDolZCIsIGJvYXJkX3R5cGUsCisJCSBsZTMyX3RvX2NwdShmd2gtPmludF9md19vZmZzZXQpLCBsZTMyX3RvX2NwdShmd2gtPmludF9md19sZW4pLAorCQkgbGUzMl90b19jcHUoZndoLT5leHRfZndfb2Zmc2V0KSwgbGUzMl90b19jcHUoZndoLT5leHRfZndfbGVuKSk7CisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiZmlybXdhcmUgaWQgJXMiLCBzdHIpOworCitleGl0OgorCW11dGV4X3VubG9jaygmZndfbXV0ZXgpOworCisJaWYgKGZ3ZS0+bG9hZGVkKQorCQlyZXR1cm4gZndlOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKKy8qIEFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlIGFuZCBpbml0aWFsaXplIHByaXZhdGUgZGF0YSAqLworc3RhdGljIHN0cnVjdCBhdDc2X3ByaXYgKmF0NzZfYWxsb2NfbmV3X2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXY7CisJaW50IGk7CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGF0NzZfcHJpdikpOworCWlmICghbmV0ZGV2KSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlwcml2LT51ZGV2ID0gdWRldjsKKwlwcml2LT5uZXRkZXYgPSBuZXRkZXY7CisKKwltdXRleF9pbml0KCZwcml2LT5tdHgpOworCUlOSVRfV09SSygmcHJpdi0+d29ya19hc3NvY19kb25lLCBhdDc2X3dvcmtfYXNzb2NfZG9uZSk7CisJSU5JVF9XT1JLKCZwcml2LT53b3JrX2pvaW4sIGF0NzZfd29ya19qb2luKTsKKwlJTklUX1dPUksoJnByaXYtPndvcmtfbmV3X2JzcywgYXQ3Nl93b3JrX25ld19ic3MpOworCUlOSVRfV09SSygmcHJpdi0+d29ya19zdGFydF9zY2FuLCBhdDc2X3dvcmtfc3RhcnRfc2Nhbik7CisJSU5JVF9XT1JLKCZwcml2LT53b3JrX3NldF9wcm9taXNjLCBhdDc2X3dvcmtfc2V0X3Byb21pc2MpOworCUlOSVRfV09SSygmcHJpdi0+d29ya19zdWJtaXRfcngsIGF0NzZfd29ya19zdWJtaXRfcngpOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5kd29ya19yZXN0YXJ0LCBhdDc2X2R3b3JrX3Jlc3RhcnQpOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5kd29ya19nZXRfc2NhbiwgYXQ3Nl9kd29ya19nZXRfc2Nhbik7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmR3b3JrX2JlYWNvbiwgYXQ3Nl9kd29ya19iZWFjb24pOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5kd29ya19hdXRoLCBhdDc2X2R3b3JrX2F1dGgpOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5kd29ya19hc3NvYywgYXQ3Nl9kd29ya19hc3NvYyk7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bWdtdF9zcGlubG9jayk7CisJcHJpdi0+bmV4dF9tZ210X2J1bGsgPSBOVUxMOworCXByaXYtPm1hY19zdGF0ZSA9IE1BQ19JTklUOworCisJLyogaW5pdGlhbGl6ZSBlbXB0eSBCU1MgbGlzdCAqLworCXByaXYtPmN1cnJfYnNzID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+YnNzX2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZwcml2LT5ic3NfbGlzdF9zcGlubG9jayk7CisKKwlpbml0X3RpbWVyKCZwcml2LT5ic3NfbGlzdF90aW1lcik7CisJcHJpdi0+YnNzX2xpc3RfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXByaXY7CisJcHJpdi0+YnNzX2xpc3RfdGltZXIuZnVuY3Rpb24gPSBhdDc2X2Jzc19saXN0X3RpbWVvdXQ7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+c3B5X3NwaW5sb2NrKTsKKworCS8qIG1hcmsgYWxsIHJ4IGRhdGEgZW50cmllcyBhcyB1bnVzZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlJfUlhfREFUQV9CVUY7IGkrKykKKwkJcHJpdi0+cnhfZGF0YVtpXS5za2IgPSBOVUxMOworCisJcHJpdi0+cnhfdGFza2xldC5mdW5jID0gYXQ3Nl9yeF90YXNrbGV0OworCXByaXYtPnJ4X3Rhc2tsZXQuZGF0YSA9IDA7CisKKwlwcml2LT5wbV9tb2RlID0gQVQ3Nl9QTV9PRkY7CisJcHJpdi0+cG1fcGVyaW9kID0gMDsKKworCXJldHVybiBwcml2OworfQorCitzdGF0aWMgaW50IGF0NzZfYWxsb2NfdXJicyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50LCAqZXBfaW4sICplcF9vdXQ7CisJaW50IGk7CisJaW50IGJ1ZmZlcl9zaXplOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBFTlRFUiIsIF9fZnVuY19fKTsKKworCWF0NzZfZGJnKERCR19VUkIsICIlczogTnVtRW5kcG9pbnRzICVkICIsIF9fZnVuY19fLAorCQkgaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdLmRlc2MuYk51bUVuZHBvaW50cyk7CisKKwllcF9pbiA9IE5VTEw7CisJZXBfb3V0ID0gTlVMTDsKKwlpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKworCQlhdDc2X2RiZyhEQkdfVVJCLCAiJXM6ICVkLiBlbmRwb2ludDogYWRkciAweCV4IGF0dHIgMHgleCIsCisJCQkgX19mdW5jX18sIGksIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzLAorCQkJIGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMpOworCisJCWlmICghZXBfaW4gJiYgdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oZW5kcG9pbnQpKQorCQkJZXBfaW4gPSBlbmRwb2ludDsKKworCQlpZiAoIWVwX291dCAmJiB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoZW5kcG9pbnQpKQorCQkJZXBfb3V0ID0gZW5kcG9pbnQ7CisJfQorCisJaWYgKCFlcF9pbiB8fCAhZXBfb3V0KSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJidWxrIGVuZHBvaW50cyBtaXNzaW5nXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlwcml2LT5yeF9waXBlID0gdXNiX3JjdmJ1bGtwaXBlKHByaXYtPnVkZXYsIGVwX2luLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwlwcml2LT50eF9waXBlID0gdXNiX3NuZGJ1bGtwaXBlKHByaXYtPnVkZXYsIGVwX291dC0+YkVuZHBvaW50QWRkcmVzcyk7CisKKwlwcml2LT5yeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCXByaXYtPnR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5yeF91cmIgfHwgIXByaXYtPnR4X3VyYikgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgVVJCXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYnVmZmVyX3NpemUgPSBzaXplb2Yoc3RydWN0IGF0NzZfdHhfYnVmZmVyKSArIE1BWF9QQURESU5HX1NJWkU7CisJcHJpdi0+YnVsa19vdXRfYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5idWxrX291dF9idWZmZXIpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImNhbm5vdCBhbGxvY2F0ZSBvdXRwdXQgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogRVhJVCIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworfQorCisvKiBSZWdpc3RlciBuZXR3b3JrIGRldmljZSBhbmQgaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9pbml0X25ld19kZXZpY2Uoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwKKwkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwcml2LT5uZXRkZXY7CisJaW50IHJldDsKKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwkvKiBjaGVjayBvdXQgdGhlIGVuZHBvaW50cyAqLworCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiVVNCIGludGVyZmFjZTogJWQgZW5kcG9pbnRzIiwKKwkJIGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyk7CisKKwlyZXQgPSBhdDc2X2FsbG9jX3VyYnMocHJpdiwgaW50ZXJmYWNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBleGl0OworCisJLyogTUFDIGFkZHJlc3MgKi8KKwlyZXQgPSBhdDc2X2dldF9od19jb25maWcocHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImNhbm5vdCBnZXQgTUFDIGFkZHJlc3NcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcHJpdi0+ZG9tYWluID0gYXQ3Nl9nZXRfcmVnX2RvbWFpbihwcml2LT5yZWd1bGF0b3J5X2RvbWFpbik7CisJLyogaW5pdC4gbmV0ZGV2LT5kZXZfYWRkciAqLworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCisJcHJpdi0+Y2hhbm5lbCA9IERFRl9DSEFOTkVMOworCXByaXYtPml3X21vZGUgPSBJV19NT0RFX0lORlJBOworCXByaXYtPnJ0c190aHJlc2hvbGQgPSBERUZfUlRTX1RIUkVTSE9MRDsKKwlwcml2LT5mcmFnX3RocmVzaG9sZCA9IERFRl9GUkFHX1RIUkVTSE9MRDsKKwlwcml2LT5zaG9ydF9yZXRyeV9saW1pdCA9IERFRl9TSE9SVF9SRVRSWV9MSU1JVDsKKwlwcml2LT50eHJhdGUgPSBUWF9SQVRFX0FVVE87CisJcHJpdi0+cHJlYW1ibGVfdHlwZSA9IFBSRUFNQkxFX1RZUEVfTE9ORzsKKwlwcml2LT5iZWFjb25fcGVyaW9kID0gMTAwOworCXByaXYtPmJlYWNvbnNfbGFzdF9xdWFsID0gamlmZmllczsKKwlwcml2LT5hdXRoX21vZGUgPSBXTEFOX0FVVEhfT1BFTjsKKwlwcml2LT5zY2FuX21pbl90aW1lID0gREVGX1NDQU5fTUlOX1RJTUU7CisJcHJpdi0+c2Nhbl9tYXhfdGltZSA9IERFRl9TQ0FOX01BWF9USU1FOworCXByaXYtPnNjYW5fbW9kZSA9IFNDQU5fVFlQRV9BQ1RJVkU7CisKKwluZXRkZXYtPmZsYWdzICY9IH5JRkZfTVVMVElDQVNUOwkvKiBub3QgeWV0IG9yIG5ldmVyICovCisJbmV0ZGV2LT5vcGVuID0gYXQ3Nl9vcGVuOworCW5ldGRldi0+c3RvcCA9IGF0NzZfc3RvcDsKKwluZXRkZXYtPmdldF9zdGF0cyA9IGF0NzZfZ2V0X3N0YXRzOworCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmYXQ3Nl9ldGh0b29sX29wczsKKworCS8qIEFkZCBwb2ludGVycyB0byBlbmFibGUgaXdzcHkgc3VwcG9ydC4gKi8KKwlwcml2LT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJnByaXYtPnNweV9kYXRhOworCW5ldGRldi0+d2lyZWxlc3NfZGF0YSA9ICZwcml2LT53aXJlbGVzc19kYXRhOworCisJbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBhdDc2X3R4OworCW5ldGRldi0+dHhfdGltZW91dCA9IGF0NzZfdHhfdGltZW91dDsKKwluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gMiAqIEhaOworCW5ldGRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmYXQ3Nl9oYW5kbGVyX2RlZjsKKwluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGF0NzZfc2V0X211bHRpY2FzdDsKKwluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGF0NzZfc2V0X21hY19hZGRyZXNzOworCWRldl9hbGxvY19uYW1lKG5ldGRldiwgIndsYW4lZCIpOworCisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KHByaXYtPm5ldGRldik7CisJaWYgKHJldCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiY2Fubm90IHJlZ2lzdGVyIG5ldGRldmljZSAoc3RhdHVzICVkKSFcbiIsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisJcHJpdi0+bmV0ZGV2X3JlZ2lzdGVyZWQgPSAxOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVTQiAlcywgTUFDICVzLCBmaXJtd2FyZSAlZC4lZC4lZC0lZFxuIiwKKwkgICAgICAgbmV0ZGV2LT5uYW1lLCBpbnRlcmZhY2UtPmRldi5idXNfaWQsIG1hYzJzdHIocHJpdi0+bWFjX2FkZHIpLAorCSAgICAgICBwcml2LT5md192ZXJzaW9uLm1ham9yLCBwcml2LT5md192ZXJzaW9uLm1pbm9yLAorCSAgICAgICBwcml2LT5md192ZXJzaW9uLnBhdGNoLCBwcml2LT5md192ZXJzaW9uLmJ1aWxkKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogcmVndWxhdG9yeSBkb21haW4gMHglMDJ4OiAlc1xuIiwgbmV0ZGV2LT5uYW1lLAorCSAgICAgICBwcml2LT5yZWd1bGF0b3J5X2RvbWFpbiwgcHJpdi0+ZG9tYWluLT5uYW1lKTsKKworCS8qIHdlIGxldCB0aGlzIHRpbWVyIHJ1biB0aGUgd2hvbGUgdGltZSB0aGlzIGRyaXZlciBpbnN0YW5jZSBsaXZlcyAqLworCW1vZF90aW1lcigmcHJpdi0+YnNzX2xpc3RfdGltZXIsIGppZmZpZXMgKyBCU1NfTElTVF9USU1FT1VUKTsKKworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdDc2X2RlbGV0ZV9kZXZpY2Uoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXM6IEVOVEVSIiwgX19mdW5jX18pOworCisJLyogVGhlIGRldmljZSBpcyBnb25lLCBkb24ndCBib3RoZXIgdHVybmluZyBpdCBvZmYgKi8KKwlwcml2LT5kZXZpY2VfdW5wbHVnZ2VkID0gMTsKKworCWlmIChwcml2LT5uZXRkZXZfcmVnaXN0ZXJlZCkKKwkJdW5yZWdpc3Rlcl9uZXRkZXYocHJpdi0+bmV0ZGV2KTsKKworCS8qIGFzc3VtaW5nIHdlIHVzZWQga2V2ZW50ZCwgaXQgbXVzdCBxdWllc2NlIHRvbyAqLworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwlrZnJlZShwcml2LT5idWxrX291dF9idWZmZXIpOworCisJaWYgKHByaXYtPnR4X3VyYikgeworCQl1c2Jfa2lsbF91cmIocHJpdi0+dHhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHByaXYtPnR4X3VyYik7CisJfQorCWlmIChwcml2LT5yeF91cmIpIHsKKwkJdXNiX2tpbGxfdXJiKHByaXYtPnJ4X3VyYik7CisJCXVzYl9mcmVlX3VyYihwcml2LT5yeF91cmIpOworCX0KKworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXM6IHVubGlua2VkIHVyYnMiLCBfX2Z1bmNfXyk7CisKKwlpZiAocHJpdi0+cnhfc2tiKQorCQlrZnJlZV9za2IocHJpdi0+cnhfc2tiKTsKKworCWF0NzZfZnJlZV9ic3NfbGlzdChwcml2KTsKKwlkZWxfdGltZXJfc3luYygmcHJpdi0+YnNzX2xpc3RfdGltZXIpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2dldF9zY2FuKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19iZWFjb24pOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2F1dGgpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmR3b3JrX2Fzc29jKTsKKworCWlmIChwcml2LT5tYWNfc3RhdGUgPT0gTUFDX0NPTk5FQ1RFRCkKKwkJYXQ3Nl9pd2V2ZW50X2Jzc19kaXNjb25uZWN0KHByaXYtPm5ldGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfUlhfREFUQV9CVUY7IGkrKykKKwkJaWYgKHByaXYtPnJ4X2RhdGFbaV0uc2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHByaXYtPnJ4X2RhdGFbaV0uc2tiKTsKKwkJCXByaXYtPnJ4X2RhdGFbaV0uc2tiID0gTlVMTDsKKwkJfQorCXVzYl9wdXRfZGV2KHByaXYtPnVkZXYpOworCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogYmVmb3JlIGZyZWVpbmcgcHJpdi9uZXRkZXYiLCBfX2Z1bmNfXyk7CisJZnJlZV9uZXRkZXYocHJpdi0+bmV0ZGV2KTsJLyogcHJpdiBpcyBpbiBuZXRkZXYgKi8KKworCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXM6IEVYSVQiLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2OworCXN0cnVjdCBmd2VudHJ5ICpmd2U7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJaW50IG9wX21vZGU7CisJaW50IG5lZWRfZXh0X2Z3ID0gMDsKKwlzdHJ1Y3QgbWliX2Z3X3ZlcnNpb24gZnd2OworCWludCBib2FyZF90eXBlID0gKGludClpZC0+ZHJpdmVyX2luZm87CisKKwl1ZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKKworCS8qIExvYWQgZmlybXdhcmUgaW50byBrZXJuZWwgbWVtb3J5ICovCisJZndlID0gYXQ3Nl9sb2FkX2Zpcm13YXJlKHVkZXYsIGJvYXJkX3R5cGUpOworCWlmICghZndlKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyb3I7CisJfQorCisJb3BfbW9kZSA9IGF0NzZfZ2V0X29wX21vZGUodWRldik7CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJvcG1vZGUgJWQiLCBvcF9tb2RlKTsKKworCS8qIHdlIGdldCBPUE1PREVfTk9ORSB3aXRoIDIuNC4yMywgU01DMjY2MlctQVIgPz8/CisJICAgd2UgZ2V0IDIwNCB3aXRoIDIuNC4yMywgRmliZXJsaW5lIEZMLVdMMjQwdSAoNTA1QStSRk1EMjk1OCkgPz8/ICovCisKKwlpZiAob3BfbW9kZSA9PSBPUE1PREVfSFdfQ09ORklHX01PREUpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImNhbm5vdCBoYW5kbGUgYSBkZXZpY2UgaW4gSFdfQ09ORklHX01PREVcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKG9wX21vZGUgIT0gT1BNT0RFX05PUk1BTF9OSUNfV0lUSF9GTEFTSAorCSAgICAmJiBvcF9tb2RlICE9IE9QTU9ERV9OT1JNQUxfTklDX1dJVEhPVVRfRkxBU0gpIHsKKwkJLyogZG93bmxvYWQgaW50ZXJuYWwgZmlybXdhcmUgcGFydCAqLworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJkb3dubG9hZGluZyBpbnRlcm5hbCBmaXJtd2FyZVxuIik7CisJCXJldCA9IGF0NzZfbG9hZF9pbnRlcm5hbF9mdyh1ZGV2LCBmd2UpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJCSAgICJlcnJvciAlZCBkb3dubG9hZGluZyBpbnRlcm5hbCBmaXJtd2FyZVxuIiwKKwkJCQkgICByZXQpOworCQkJZ290byBlcnJvcjsKKwkJfQorCQl1c2JfcHV0X2Rldih1ZGV2KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBJbnRlcm5hbCBmaXJtd2FyZSBhbHJlYWR5IGluc2lkZSB0aGUgZGV2aWNlLiAgR2V0IGZpcm13YXJlCisJICogdmVyc2lvbiB0byB0ZXN0IGlmIGV4dGVybmFsIGZpcm13YXJlIGlzIGxvYWRlZC4KKwkgKiBUaGlzIHdvcmtzIG9ubHkgZm9yIG5ld2VyIGZpcm13YXJlLCBlLmcuIHRoZSBJbnRlcnNpbCAwLjkwLngKKwkgKiBzYXlzICJjb250cm9sIHRpbWVvdXQgb24gZXAwaW4iIGFuZCBzdWJzZXF1ZW50CisJICogYXQ3Nl9nZXRfb3BfbW9kZSgpIGZhaWwgdG9vIDotKCAqLworCisJLyogaWYgdmVyc2lvbiA+PSAwLjEwMC54Lnkgb3IgZGV2aWNlIHdpdGggYnVpbHQtaW4gZmxhc2ggd2UgY2FuCisJICogcXVlcnkgdGhlIGRldmljZSBmb3IgdGhlIGZ3IHZlcnNpb24gKi8KKwlpZiAoKGZ3ZS0+ZndfdmVyc2lvbi5tYWpvciA+IDAgfHwgZndlLT5md192ZXJzaW9uLm1pbm9yID49IDEwMCkKKwkgICAgfHwgKG9wX21vZGUgPT0gT1BNT0RFX05PUk1BTF9OSUNfV0lUSF9GTEFTSCkpIHsKKwkJcmV0ID0gYXQ3Nl9nZXRfbWliKHVkZXYsIE1JQl9GV19WRVJTSU9OLCAmZnd2LCBzaXplb2YoZnd2KSk7CisJCWlmIChyZXQgPCAwIHx8IChmd3YubWFqb3IgfCBmd3YubWlub3IpID09IDApCisJCQluZWVkX2V4dF9mdyA9IDE7CisJfSBlbHNlCisJCS8qIE5vIHdheSB0byBjaGVjayBmaXJtd2FyZSB2ZXJzaW9uLCByZWxvYWQgdG8gYmUgc3VyZSAqLworCQluZWVkX2V4dF9mdyA9IDE7CisKKwlpZiAobmVlZF9leHRfZncpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiZG93bmxvYWRpbmcgZXh0ZXJuYWwgZmlybXdhcmVcbiIpOworCisJCXJldCA9IGF0NzZfbG9hZF9leHRlcm5hbF9mdyh1ZGV2LCBmd2UpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKworCQkvKiBSZS1jaGVjayBmaXJtd2FyZSB2ZXJzaW9uICovCisJCXJldCA9IGF0NzZfZ2V0X21pYih1ZGV2LCBNSUJfRldfVkVSU0lPTiwgJmZ3diwgc2l6ZW9mKGZ3dikpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJCSAgICJlcnJvciAlZCBnZXR0aW5nIGZpcm13YXJlIHZlcnNpb25cbiIsIHJldCk7CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJcHJpdiA9IGF0NzZfYWxsb2NfbmV3X2RldmljZSh1ZGV2KTsKKwlpZiAoIXByaXYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlTRVRfTkVUREVWX0RFVihwcml2LT5uZXRkZXYsICZpbnRlcmZhY2UtPmRldik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHByaXYpOworCisJbWVtY3B5KCZwcml2LT5md192ZXJzaW9uLCAmZnd2LCBzaXplb2Yoc3RydWN0IG1pYl9md192ZXJzaW9uKSk7CisJcHJpdi0+Ym9hcmRfdHlwZSA9IGJvYXJkX3R5cGU7CisKKwlyZXQgPSBhdDc2X2luaXRfbmV3X2RldmljZShwcml2LCBpbnRlcmZhY2UpOworCWlmIChyZXQgPCAwKQorCQlhdDc2X2RlbGV0ZV9kZXZpY2UocHJpdik7CisKKwlyZXR1cm4gcmV0OworCitlcnJvcjoKKwl1c2JfcHV0X2Rldih1ZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdDc2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2OworCisJcHJpdiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwkvKiBEaXNjb25uZWN0IGFmdGVyIGxvYWRpbmcgaW50ZXJuYWwgZmlybXdhcmUgKi8KKwlpZiAoIXByaXYpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBkaXNjb25uZWN0aW5nXG4iLCBwcml2LT5uZXRkZXYtPm5hbWUpOworCWF0NzZfZGVsZXRlX2RldmljZShwcml2KTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJmludGVyZmFjZS0+ZGV2LCAiZGlzY29ubmVjdGVkXG4iKTsKK30KKworLyogU3RydWN0dXJlIGZvciByZWdpc3RlcmluZyB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXQ3Nl9kcml2ZXIgPSB7CisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkucHJvYmUgPSBhdDc2X3Byb2JlLAorCS5kaXNjb25uZWN0ID0gYXQ3Nl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IGRldl90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0NzZfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04gIiBsb2FkaW5nXG4iKTsKKworCW11dGV4X2luaXQoJmZ3X211dGV4KTsKKworCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmF0NzZfZHJpdmVyKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FCisJCSAgICAgICAiOiB1c2JfcmVnaXN0ZXIgZmFpbGVkIChzdGF0dXMgJWQpXG4iLCByZXN1bHQpOworCisJbGVkX3RyaWdnZXJfcmVnaXN0ZXJfc2ltcGxlKCJhdDc2X3VzYi10eCIsICZsZWR0cmlnX3R4KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXQ3Nl9tb2RfZXhpdCh2b2lkKQoreworCWludCBpOworCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04gIiB1bmxvYWRpbmdcbiIpOworCXVzYl9kZXJlZ2lzdGVyKCZhdDc2X2RyaXZlcik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmlybXdhcmVzKTsgaSsrKSB7CisJCWlmIChmaXJtd2FyZXNbaV0uZncpCisJCQlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlc1tpXS5mdyk7CisJfQorCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXJfc2ltcGxlKGxlZHRyaWdfdHgpOworfQorCittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGF0NzZfZGVidWcsIGludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWdnaW5nIGxldmVsIik7CisKK21vZHVsZV9pbml0KGF0NzZfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoYXQ3Nl9tb2RfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk9saXZlciBLdXJ0aCA8b2t1QG1hc3FtYWlsLmN4PiIpOworTU9EVUxFX0FVVEhPUigiSm9lcmcgQWxiZXJ0IDxqb2VyZy5hbGJlcnRAZ214LmRlPiIpOworTU9EVUxFX0FVVEhPUigiQWxleCA8YWxleEBmb29nb2QuY29tPiIpOworTU9EVUxFX0FVVEhPUigiTmljayBKb25lcyIpOworTU9EVUxFX0FVVEhPUigiQmFsaW50IFNlZWJlciA8bjBfNXA0bV9wMTM0NTNAaG90bWFpbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5oIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIwYmU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5oCkBAIC0wLDAgKzEsNjE5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgT2xpdmVyIEt1cnRoCisgKgkgICAgIChjKSAyMDAzLDIwMDQgSm9lcmcgQWxiZXJ0IDxqb2VyZy5hbGJlcnRAZ214LmRlPgorICoJICAgICAoYykgMjAwNyBHdWlkbyBHdWVudGhlciA8YWd4QHNpZ3hjcHUub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBkcml2ZXIgd2FzIGJhc2VkIG9uIGluZm9ybWF0aW9uIGZyb20gdGhlIFNvdXJjZWZvcmdlIGRyaXZlcgorICogcmVsZWFzZWQgYW5kIG1haW50YWluZWQgYnkgQXRtZWw6CisgKgorICogIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvYXRtZWx3bGFuZHJpdmVyLworICoKKyAqIEFsdGhvdWdoIHRoZSBjb2RlIHdhcyBjb21wbGV0ZWx5IHJlLXdyaXR0ZW4sCisgKiBpdCB3b3VsZCBoYXZlIGJlZW4gaW1wb3NzaWJsZSB3aXRob3V0IEF0bWVsJ3MgZGVjaXNpb24gdG8KKyAqIHJlbGVhc2UgYW4gT3BlbiBTb3VyY2UgZHJpdmVyICh1bmZvcnR1bmF0ZWx5IHRoZSBmaXJtd2FyZSB3YXMKKyAqIGtlcHQgYmluYXJ5IG9ubHkpLiBUaGFua3MgZm9yIHRoYXQgZGVjaXNpb24gdG8gQXRtZWwhCisgKi8KKworI2lmbmRlZiBfQVQ3Nl9VU0JfSAorI2RlZmluZSBfQVQ3Nl9VU0JfSAorCisvKiBCb2FyZCB0eXBlcyAqLworZW51bSBib2FyZF90eXBlIHsKKwlCT0FSRF81MDNfSVNMMzg2MSA9IDEsCisJQk9BUkRfNTAzX0lTTDM4NjMgPSAyLAorCUJPQVJEXzUwMyA9IDMsCisJQk9BUkRfNTAzX0FDQyA9IDQsCisJQk9BUkRfNTA1ID0gNSwKKwlCT0FSRF81MDVfMjk1OCA9IDYsCisJQk9BUkRfNTA1QSA9IDcsCisJQk9BUkRfNTA1QU1YID0gOAorfTsKKworLyogb3VyIHByaXZhdGUgaW9jdGwncyAqLworLyogcHJlYW1ibGUgbGVuZ3RoICgwIC0gbG9uZywgMSAtIHNob3J0LCAyIC0gYXV0bykgKi8KKyNkZWZpbmUgQVQ3Nl9TRVRfU0hPUlRfUFJFQU1CTEUJCShTSU9DSVdGSVJTVFBSSVYgKyAwKQorI2RlZmluZSBBVDc2X0dFVF9TSE9SVF9QUkVBTUJMRQkJKFNJT0NJV0ZJUlNUUFJJViArIDEpCisvKiB3aGljaCBkZWJ1ZyBjaGFubmVscyBhcmUgZW5hYmxlZCAqLworI2RlZmluZSBBVDc2X1NFVF9ERUJVRwkJCShTSU9DSVdGSVJTVFBSSVYgKyAyKQorI2RlZmluZSBBVDc2X0dFVF9ERUJVRwkJCShTSU9DSVdGSVJTVFBSSVYgKyAzKQorLyogcG93ZXIgc2F2ZSBtb2RlIChpbmNsLiB0aGUgQXRtZWwgcHJvcHJpZXRhcnkgc21hcnQgc2F2ZSBtb2RlKSAqLworI2RlZmluZSBBVDc2X1NFVF9QT1dFUlNBVkVfTU9ERQkJKFNJT0NJV0ZJUlNUUFJJViArIDQpCisjZGVmaW5lIEFUNzZfR0VUX1BPV0VSU0FWRV9NT0RFCQkoU0lPQ0lXRklSU1RQUklWICsgNSkKKy8qIG1pbiBhbmQgbWF4IGNoYW5uZWwgdGltZXMgZm9yIHNjYW4gKi8KKyNkZWZpbmUgQVQ3Nl9TRVRfU0NBTl9USU1FUwkJKFNJT0NJV0ZJUlNUUFJJViArIDYpCisjZGVmaW5lIEFUNzZfR0VUX1NDQU5fVElNRVMJCShTSU9DSVdGSVJTVFBSSVYgKyA3KQorLyogc2NhbiBtb2RlICgwIC0gYWN0aXZlLCAxIC0gcGFzc2l2ZSkgKi8KKyNkZWZpbmUgQVQ3Nl9TRVRfU0NBTl9NT0RFCQkoU0lPQ0lXRklSU1RQUklWICsgOCkKKyNkZWZpbmUgQVQ3Nl9HRVRfU0NBTl9NT0RFCQkoU0lPQ0lXRklSU1RQUklWICsgOSkKKworI2RlZmluZSBDTURfU1RBVFVTX0lETEUJCQkJMHgwMAorI2RlZmluZSBDTURfU1RBVFVTX0NPTVBMRVRFCQkJMHgwMQorI2RlZmluZSBDTURfU1RBVFVTX1VOS05PV04JCQkweDAyCisjZGVmaW5lIENNRF9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVIJCTB4MDMKKyNkZWZpbmUgQ01EX1NUQVRVU19GVU5DVElPTl9OT1RfU1VQUE9SVEVECTB4MDQKKyNkZWZpbmUgQ01EX1NUQVRVU19USU1FX09VVAkJCTB4MDcKKyNkZWZpbmUgQ01EX1NUQVRVU19JTl9QUk9HUkVTUwkJCTB4MDgKKyNkZWZpbmUgQ01EX1NUQVRVU19IT1NUX0ZBSUxVUkUJCQkweGZmCisjZGVmaW5lIENNRF9TVEFUVVNfU0NBTl9GQUlMRUQJCQkweGYwCisKKy8qIGFuc3dlcnMgdG8gZ2V0IG9wIG1vZGUgKi8KKyNkZWZpbmUgT1BNT0RFX05PTkUJCQkJMHgwMAorI2RlZmluZSBPUE1PREVfTk9STUFMX05JQ19XSVRIX0ZMQVNICQkweDAxCisjZGVmaW5lIE9QTU9ERV9IV19DT05GSUdfTU9ERQkJCTB4MDIKKyNkZWZpbmUgT1BNT0RFX0RGVV9NT0RFX1dJVEhfRkxBU0gJCTB4MDMKKyNkZWZpbmUgT1BNT0RFX05PUk1BTF9OSUNfV0lUSE9VVF9GTEFTSAkJMHgwNAorCisjZGVmaW5lIENNRF9TRVRfTUlCCQkweDAxCisjZGVmaW5lIENNRF9HRVRfTUlCCQkweDAyCisjZGVmaW5lIENNRF9TQ0FOCQkweDAzCisjZGVmaW5lIENNRF9KT0lOCQkweDA0CisjZGVmaW5lIENNRF9TVEFSVF9JQlNTCQkweDA1CisjZGVmaW5lIENNRF9SQURJT19PTgkJMHgwNgorI2RlZmluZSBDTURfUkFESU9fT0ZGCQkweDA3CisjZGVmaW5lIENNRF9TVEFSVFVQCQkweDBCCisKKyNkZWZpbmUgTUlCX0xPQ0FMCQkweDAxCisjZGVmaW5lIE1JQl9NQUNfQUREUgkJMHgwMgorI2RlZmluZSBNSUJfTUFDCQkJMHgwMworI2RlZmluZSBNSUJfTUFDX01HTVQJCTB4MDUKKyNkZWZpbmUgTUlCX01BQ19XRVAJCTB4MDYKKyNkZWZpbmUgTUlCX1BIWQkJCTB4MDcKKyNkZWZpbmUgTUlCX0ZXX1ZFUlNJT04JCTB4MDgKKyNkZWZpbmUgTUlCX01ET01BSU4JCTB4MDkKKworI2RlZmluZSBBREhPQ19NT0RFCQkxCisjZGVmaW5lIElORlJBU1RSVUNUVVJFX01PREUJMgorCisvKiB2YWx1ZXMgZm9yIHN0cnVjdCBtaWJfbG9jYWwsIGZpZWxkIHByZWFtYmxlX3R5cGUgKi8KKyNkZWZpbmUgUFJFQU1CTEVfVFlQRV9MT05HCTAKKyNkZWZpbmUgUFJFQU1CTEVfVFlQRV9TSE9SVAkxCisjZGVmaW5lIFBSRUFNQkxFX1RZUEVfQVVUTwkyCisKKy8qIHZhbHVlcyBmb3IgdHhfcmF0ZSAqLworI2RlZmluZSBUWF9SQVRFXzFNQklUCQkwCisjZGVmaW5lIFRYX1JBVEVfMk1CSVQJCTEKKyNkZWZpbmUgVFhfUkFURV81XzVNQklUIAkyCisjZGVmaW5lIFRYX1JBVEVfMTFNQklUCQkzCisjZGVmaW5lIFRYX1JBVEVfQVVUTwkJNAorCisvKiBwb3dlciBtYW5hZ2VtZW50IG1vZGVzICovCisjZGVmaW5lIEFUNzZfUE1fT0ZGCQkxCisjZGVmaW5lIEFUNzZfUE1fT04JCTIKKyNkZWZpbmUgQVQ3Nl9QTV9TTUFSVAkJMworCitzdHJ1Y3QgaHdjZmdfcjUwNSB7CisJdTggY3IzOV92YWx1ZXNbMTRdOworCXU4IHJlc2VydmVkMVsxNF07CisJdTggYmJfY3JbMTRdOworCXU4IHBpZHZpZFs0XTsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcmVndWxhdG9yeV9kb21haW47CisJdTggcmVzZXJ2ZWQyWzE0XTsKKwl1OCBjcjE1X3ZhbHVlc1sxNF07CisJdTggcmVzZXJ2ZWQzWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGh3Y2ZnX3JmbWQgeworCXU4IGNyMjBfdmFsdWVzWzE0XTsKKwl1OCBjcjIxX3ZhbHVlc1sxNF07CisJdTggYmJfY3JbMTRdOworCXU4IHBpZHZpZFs0XTsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcmVndWxhdG9yeV9kb21haW47CisJdTggbG93X3Bvd2VyX3ZhbHVlc1sxNF07CisJdTggbm9ybWFsX3Bvd2VyX3ZhbHVlc1sxNF07CisJdTggcmVzZXJ2ZWQxWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGh3Y2ZnX2ludGVyc2lsIHsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggY3IzMV92YWx1ZXNbMTRdOworCXU4IGNyNThfdmFsdWVzWzE0XTsKKwl1OCBwaWR2aWRbNF07CisJdTggcmVndWxhdG9yeV9kb21haW47CisJdTggcmVzZXJ2ZWRbMV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit1bmlvbiBhdDc2X2h3Y2ZnIHsKKwlzdHJ1Y3QgaHdjZmdfaW50ZXJzaWwgaTsKKwlzdHJ1Y3QgaHdjZmdfcmZtZCByMzsKKwlzdHJ1Y3QgaHdjZmdfcjUwNSByNTsKK307CisKKyNkZWZpbmUgV0VQX1NNQUxMX0tFWV9MRU4JKDQwIC8gOCkKKyNkZWZpbmUgV0VQX0xBUkdFX0tFWV9MRU4JKDEwNCAvIDgpCisKK3N0cnVjdCBhdDc2X2NhcmRfY29uZmlnIHsKKwl1OCBleGNsdWRlX3VuZW5jcnlwdGVkOworCXU4IHByb21pc2N1b3VzX21vZGU7CisJdTggc2hvcnRfcmV0cnlfbGltaXQ7CisJdTggZW5jcnlwdGlvbl90eXBlOworCV9fbGUxNiBydHNfdGhyZXNob2xkOworCV9fbGUxNiBmcmFnbWVudGF0aW9uX3RocmVzaG9sZDsJLyogMjU2Li4yMzQ2ICovCisJdTggYmFzaWNfcmF0ZV9zZXRbNF07CisJdTggYXV0b19yYXRlX2ZhbGxiYWNrOwkvKiAwLDEgKi8KKwl1OCBjaGFubmVsOworCXU4IHByaXZhY3lfaW52b2tlZDsKKwl1OCB3ZXBfZGVmYXVsdF9rZXlfaWQ7CS8qIDAuLjMgKi8KKwl1OCBjdXJyZW50X3NzaWRbMzJdOworCXU4IHdlcF9kZWZhdWx0X2tleV92YWx1ZVs0XVtXRVBfS0VZX0xFTl07CisJdTggc3NpZF9sZW47CisJdTggc2hvcnRfcHJlYW1ibGU7CisJX19sZTE2IGJlYWNvbl9wZXJpb2Q7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9jb21tYW5kIHsKKwl1OCBjbWQ7CisJdTggcmVzZXJ2ZWQ7CisJX19sZTE2IHNpemU7CisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIExlbmd0aCBvZiBBdG1lbC1zcGVjaWZpYyBSeCBoZWFkZXIgYmVmb3JlIDgwMi4xMSBmcmFtZSAqLworI2RlZmluZSBBVDc2X1JYX0hEUkxFTiBvZmZzZXRvZihzdHJ1Y3QgYXQ3Nl9yeF9idWZmZXIsIHBhY2tldCkKKworc3RydWN0IGF0NzZfcnhfYnVmZmVyIHsKKwlfX2xlMTYgd2xlbmd0aDsKKwl1OCByeF9yYXRlOworCXU4IG5ld2JzczsKKwl1OCBmcmFnbWVudGF0aW9uOworCXU4IHJzc2k7CisJdTggbGlua19xdWFsaXR5OworCXU4IG5vaXNlX2xldmVsOworCV9fbGUzMiByeF90aW1lOworCXU4IHBhY2tldFtJRUVFODAyMTFfRlJBTUVfTEVOICsgSUVFRTgwMjExX0ZDU19MRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogTGVuZ3RoIG9mIEF0bWVsLXNwZWNpZmljIFR4IGhlYWRlciBiZWZvcmUgODAyLjExIGZyYW1lICovCisjZGVmaW5lIEFUNzZfVFhfSERSTEVOIG9mZnNldG9mKHN0cnVjdCBhdDc2X3R4X2J1ZmZlciwgcGFja2V0KQorCitzdHJ1Y3QgYXQ3Nl90eF9idWZmZXIgeworCV9fbGUxNiB3bGVuZ3RoOworCXU4IHR4X3JhdGU7CisJdTggcGFkZGluZzsKKwl1OCByZXNlcnZlZFs0XTsKKwl1OCBwYWNrZXRbSUVFRTgwMjExX0ZSQU1FX0xFTiArIElFRUU4MDIxMV9GQ1NfTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIGRlZmluZXMgZm9yIHNjYW5fdHlwZSBiZWxvdyAqLworI2RlZmluZSBTQ0FOX1RZUEVfQUNUSVZFCTAKKyNkZWZpbmUgU0NBTl9UWVBFX1BBU1NJVkUJMQorCitzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbiB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkWzMyXTsKKwl1OCBzY2FuX3R5cGU7CisJdTggY2hhbm5lbDsKKwlfX2xlMTYgcHJvYmVfZGVsYXk7CisJX19sZTE2IG1pbl9jaGFubmVsX3RpbWU7CisJX19sZTE2IG1heF9jaGFubmVsX3RpbWU7CisJdTggZXNzaWRfc2l6ZTsKKwl1OCBpbnRlcm5hdGlvbmFsX3NjYW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9yZXFfaWJzcyB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkWzMyXTsKKwl1OCBic3NfdHlwZTsKKwl1OCBjaGFubmVsOworCXU4IGVzc2lkX3NpemU7CisJdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9yZXFfam9pbiB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkWzMyXTsKKwl1OCBic3NfdHlwZTsKKwl1OCBjaGFubmVsOworCV9fbGUxNiB0aW1lb3V0OworCXU4IGVzc2lkX3NpemU7CisJdTggcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2V0X21pYl9idWZmZXIgeworCXU4IHR5cGU7CisJdTggc2l6ZTsKKwl1OCBpbmRleDsKKwl1OCByZXNlcnZlZDsKKwl1bmlvbiB7CisJCXU4IGJ5dGU7CisJCV9fbGUxNiB3b3JkOworCQl1OCBhZGRyW0VUSF9BTEVOXTsKKwl9IGRhdGE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX2xvY2FsIHsKKwl1MTYgcmVzZXJ2ZWQwOworCXU4IGJlYWNvbl9lbmFibGU7CisJdTggdHhhdXRvcmF0ZV9mYWxsYmFjazsKKwl1OCByZXNlcnZlZDE7CisJdTggc3NpZF9zaXplOworCXU4IHByb21pc2N1b3VzX21vZGU7CisJdTE2IHJlc2VydmVkMjsKKwl1OCBwcmVhbWJsZV90eXBlOworCXUxNiByZXNlcnZlZDM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hY19hZGRyIHsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcmVzWzJdOwkJLyogPz8/ICovCisJdTggZ3JvdXBfYWRkcls0XVtFVEhfQUxFTl07CisJdTggZ3JvdXBfYWRkcl9zdGF0dXNbNF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hYyB7CisJX19sZTMyIG1heF90eF9tc2R1X2xpZmV0aW1lOworCV9fbGUzMiBtYXhfcnhfbGlmZXRpbWU7CisJX19sZTE2IGZyYWdfdGhyZXNob2xkOworCV9fbGUxNiBydHNfdGhyZXNob2xkOworCV9fbGUxNiBjd21pbjsKKwlfX2xlMTYgY3dtYXg7CisJdTggc2hvcnRfcmV0cnlfdGltZTsKKwl1OCBsb25nX3JldHJ5X3RpbWU7CisJdTggc2Nhbl90eXBlOwkJLyogYWN0aXZlIG9yIHBhc3NpdmUgKi8KKwl1OCBzY2FuX2NoYW5uZWw7CisJX19sZTE2IHByb2JlX2RlbGF5OwkvKiBkZWxheSBiZWZvcmUgUHJvYmVSZXEgaW4gYWN0aXZlIHNjYW4sIFJPICovCisJX19sZTE2IG1pbl9jaGFubmVsX3RpbWU7CisJX19sZTE2IG1heF9jaGFubmVsX3RpbWU7CisJX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwl1OCBkZXNpcmVkX3NzaWRbMzJdOworCXU4IGRlc2lyZWRfYnNzaWRbRVRIX0FMRU5dOworCXU4IGRlc2lyZWRfYnNzdHlwZTsJLyogYWQtaG9jIG9yIGluZnJhc3RydWN0dXJlICovCisJdTggcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tYWNfbWdtdCB7CisJX19sZTE2IGJlYWNvbl9wZXJpb2Q7CisJX19sZTE2IENGUF9tYXhfZHVyYXRpb247CisJX19sZTE2IG1lZGl1bV9vY2N1cGFuY3lfbGltaXQ7CisJX19sZTE2IHN0YXRpb25faWQ7CS8qIGFzc29jIGlkICovCisJX19sZTE2IEFUSU1fd2luZG93OworCXU4IENGUF9tb2RlOworCXU4IHByaXZhY3lfb3B0aW9uX2ltcGxlbWVudGVkOworCXU4IERUSU1fcGVyaW9kOworCXU4IENGUF9wZXJpb2Q7CisJdTggY3VycmVudF9ic3NpZFtFVEhfQUxFTl07CisJdTggY3VycmVudF9lc3NpZFszMl07CisJdTggY3VycmVudF9ic3NfdHlwZTsKKwl1OCBwb3dlcl9tZ210X21vZGU7CisJLyogcmZtZCBhbmQgNTA1ICovCisJdTggaWJzc19jaGFuZ2U7CisJdTggcmVzOworCXU4IG11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2ltcGxlbWVudGVkOworCXU4IG11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2VuYWJsZWQ7CisJdTggY291bnRyeV9zdHJpbmdbM107CisJdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hY193ZXAgeworCXU4IHByaXZhY3lfaW52b2tlZDsJLyogMCBkaXNhYmxlIGVuY3IuLCAxIGVuYWJsZSBlbmNyICovCisJdTggd2VwX2RlZmF1bHRfa2V5X2lkOworCXU4IHdlcF9rZXlfbWFwcGluZ19sZW47CisJdTggZXhjbHVkZV91bmVuY3J5cHRlZDsKKwlfX2xlMzIgd2VwX2ljdl9lcnJvcl9jb3VudDsKKwlfX2xlMzIgd2VwX2V4Y2x1ZGVkX2NvdW50OworCXU4IHdlcF9kZWZhdWx0X2tleXZhbHVlW1dFUF9LRVlTXVtXRVBfS0VZX0xFTl07CisJdTggZW5jcnlwdGlvbl9sZXZlbDsJLyogMSBmb3IgNDBiaXQsIDIgZm9yIDEwNGJpdCBlbmNyeXB0aW9uICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX3BoeSB7CisJX19sZTMyIGVkX3RocmVzaG9sZDsKKworCV9fbGUxNiBzbG90X3RpbWU7CisJX19sZTE2IHNpZnNfdGltZTsKKwlfX2xlMTYgcHJlYW1ibGVfbGVuZ3RoOworCV9fbGUxNiBwbGNwX2hlYWRlcl9sZW5ndGg7CisJX19sZTE2IG1wZHVfbWF4X2xlbmd0aDsKKwlfX2xlMTYgY2NhX21vZGVfc3VwcG9ydGVkOworCisJdTggb3BlcmF0aW9uX3JhdGVfc2V0WzRdOworCXU4IGNoYW5uZWxfaWQ7CisJdTggY3VycmVudF9jY2FfbW9kZTsKKwl1OCBwaHlfdHlwZTsKKwl1OCBjdXJyZW50X3JlZ19kb21haW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX2Z3X3ZlcnNpb24geworCXU4IG1ham9yOworCXU4IG1pbm9yOworCXU4IHBhdGNoOworCXU4IGJ1aWxkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tZG9tYWluIHsKKwl1OCB0eF9wb3dlcmxldmVsWzE0XTsKKwl1OCBjaGFubmVsX2xpc3RbMTRdOwkvKiAwIGZvciBpbnZhbGlkIGNoYW5uZWxzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgeworCV9fbGUzMiBjcmM7CQkvKiBDUkMzMiBvZiB0aGUgd2hvbGUgaW1hZ2UgKi8KKwlfX2xlMzIgYm9hcmRfdHlwZTsJLyogZmlybXdhcmUgY29tcGF0aWJpbGl0eSBjb2RlICovCisJdTggYnVpbGQ7CQkvKiBmaXJtd2FyZSBidWlsZCBudW1iZXIgKi8KKwl1OCBwYXRjaDsJCS8qIGZpcm13YXJlIHBhdGNoIGxldmVsICovCisJdTggbWlub3I7CQkvKiBmaXJtd2FyZSBtaW5vciB2ZXJzaW9uICovCisJdTggbWFqb3I7CQkvKiBmaXJtd2FyZSBtYWpvciB2ZXJzaW9uICovCisJX19sZTMyIHN0cl9vZmZzZXQ7CS8qIG9mZnNldCBvZiB0aGUgY29weXJpZ2h0IHN0cmluZyAqLworCV9fbGUzMiBpbnRfZndfb2Zmc2V0OwkvKiBpbnRlcm5hbCBmaXJtd2FyZSBpbWFnZSBvZmZzZXQgKi8KKwlfX2xlMzIgaW50X2Z3X2xlbjsJLyogaW50ZXJuYWwgZmlybXdhcmUgaW1hZ2UgbGVuZ3RoICovCisJX19sZTMyIGV4dF9md19vZmZzZXQ7CS8qIGV4dGVybmFsIGZpcm13YXJlIGltYWdlIG9mZnNldCAqLworCV9fbGUzMiBleHRfZndfbGVuOwkvKiBleHRlcm5hbCBmaXJtd2FyZSBpbWFnZSBsZW5ndGggKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK2VudW0gbWFjX3N0YXRlIHsKKwlNQUNfSU5JVCwKKwlNQUNfU0NBTk5JTkcsCisJTUFDX0FVVEgsCisJTUFDX0FTU09DLAorCU1BQ19KT0lOSU5HLAorCU1BQ19DT05ORUNURUQsCisJTUFDX09XTl9JQlNTCit9OworCisvKiBhIGRlc2NyaXB0aW9uIG9mIGEgcmVndWxhdG9yeSBkb21haW4gYW5kIHRoZSBhbGxvd2VkIGNoYW5uZWxzICovCitzdHJ1Y3QgcmVnX2RvbWFpbiB7CisJdTE2IGNvZGU7CisJY2hhciBjb25zdCAqbmFtZTsKKwl1MzIgY2hhbm5lbF9tYXA7CS8qIGlmIGJpdCBOIGlzIHNldCwgY2hhbm5lbCAoTisxKSBpcyBhbGxvd2VkICovCit9OworCisvKiBob3cgbG9uZyBkbyB3ZSBrZWVwIGEgKEkpQlNTIGluIHRoZSBic3NfbGlzdCBpbiBqaWZmaWVzCisgICB0aGlzIHNob3VsZCBiZSBsb25nIGVub3VnaCBmb3IgdGhlIHVzZXIgdG8gcmV0cmlldmUgdGhlIHRhYmxlCisgICAoYnkgaXdsaXN0ID8pIGFmdGVyIHRoZSBkZXZpY2Ugc3RhcnRlZCwgYmVjYXVzZSBhbGwgZW50cmllcyBmcm9tCisgICBvdGhlciBjaGFubmVscyB0aGFuIHRoZSBvbmUgdGhlIGRldmljZSBsb2NrcyBvbiBnZXQgcmVtb3ZlZCwgdG9vICovCisjZGVmaW5lIEJTU19MSVNUX1RJTUVPVVQJKDEyMCAqIEhaKQorLyogc3RydWN0IHRvIHN0b3JlIEJTUyBpbmZvIGZvdW5kIGR1cmluZyBzY2FuICovCisjZGVmaW5lIEJTU19MSVNUX01BWF9SQVRFX0xFTgkzMgkvKiAzMiByYXRlcyBzaG91bGQgYmUgZW5vdWdoIC4uLiAqLworCitzdHJ1Y3QgYnNzX2luZm8geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCXU4IGJzc2lkW0VUSF9BTEVOXTsJLyogYnNzaWQgKi8KKwl1OCBzc2lkW0lXX0VTU0lEX01BWF9TSVpFXTsJLyogZXNzaWQgKi8KKwl1OCBzc2lkX2xlbjsJCS8qIGxlbmd0aCBvZiBzc2lkIGFib3ZlICovCisJdTggY2hhbm5lbDsKKwl1MTYgY2FwYTsJCS8qIEJTUyBjYXBhYmlsaXRpZXMgKi8KKwl1MTYgYmVhY29uX2ludGVydmFsOwkvKiBiZWFjb24gaW50ZXJ2YWwsIEt1cyAoMTAyNCBtaWNyb3NlY29uZHMpICovCisJdTggcmF0ZXNbQlNTX0xJU1RfTUFYX1JBVEVfTEVOXTsJLyogc3VwcG9ydGVkIHJhdGVzIGluIHVuaXRzIG9mCisJCQkJCQkgICA1MDAga2JwcywgT1JlZCB3aXRoIDB4ODAgZm9yCisJCQkJCQkgICBiYXNpYyByYXRlcyAqLworCXU4IHJhdGVzX2xlbjsKKworCS8qIHF1YWxpdHkgb2YgcmVjZWl2ZWQgYmVhY29uICovCisJdTggcnNzaTsKKwl1OCBsaW5rX3F1YWw7CisJdTggbm9pc2VfbGV2ZWw7CisKKwl1bnNpZ25lZCBsb25nIGxhc3Rfcng7CS8qIHRpbWUgKGppZmZpZXMpIG9mIGxhc3QgYmVhY29uIHJlY2VpdmVkICovCit9OworCisvKiBhIHJ4IGRhdGEgYnVmZmVyIHRvIGNvbGxlY3QgcnggZnJhZ21lbnRzICovCitzdHJ1Y3QgcnhfZGF0YV9idWYgeworCXU4IHNlbmRlcltFVEhfQUxFTl07CS8qIHNlbmRlciBhZGRyZXNzICovCisJdTE2IHNlcW5yOwkJLyogc2VxdWVuY2UgbnVtYmVyICovCisJdTE2IGZyYWducjsJCS8qIGxhc3QgZnJhZ21lbnQgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3Rfcng7CS8qIGppZmZpZXMgb2YgbGFzdCByeCAqLworCXN0cnVjdCBza19idWZmICpza2I7CS8qID09IE5VTEwgaWYgZW50cnkgaXMgZnJlZSAqLworfTsKKworI2RlZmluZSBOUl9SWF9EQVRBX0JVRgkJOAorCisvKiBEYXRhIGZvciBvbmUgbG9hZGVkIGZpcm13YXJlIGZpbGUgKi8KK3N0cnVjdCBmd2VudHJ5IHsKKwljb25zdCBjaGFyICpjb25zdCBmd25hbWU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgZXh0Zndfc2l6ZTsKKwlpbnQgaW50Zndfc2l6ZTsKKwkvKiBwb2ludGVyIHRvIGxvYWRlZCBmaXJtd2FyZSwgbm8gbmVlZCB0byBmcmVlICovCisJdTggKmV4dGZ3OwkJLyogZXh0ZXJuYWwgZmlybXdhcmUsIGV4dGZ3X3NpemUgYnl0ZXMgbG9uZyAqLworCXU4ICppbnRmdzsJCS8qIGludGVybmFsIGZpcm13YXJlLCBpbnRmd19zaXplIGJ5dGVzIGxvbmcgKi8KKwllbnVtIGJvYXJkX3R5cGUgYm9hcmRfdHlwZTsJLyogYm9hcmQgdHlwZSAqLworCXN0cnVjdCBtaWJfZndfdmVyc2lvbiBmd192ZXJzaW9uOworCWludCBsb2FkZWQ7CQkvKiBMb2FkZWQgYW5kIHBhcnNlZCBzdWNjZXNzZnVsbHkgKi8KK307CisKK3N0cnVjdCBhdDc2X3ByaXYgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwkvKiBVU0IgZGV2aWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwkvKiBuZXQgZGV2aWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsJLyogbmV0IGRldmljZSBzdGF0cyAqLworCXN0cnVjdCBpd19zdGF0aXN0aWNzIHdzdGF0czsJLyogd2lyZWxlc3Mgc3RhdHMgKi8KKworCXN0cnVjdCBza19idWZmICpyeF9za2I7CS8qIHNrYnVmZiBmb3IgcmVjZWl2aW5nIGRhdGEgKi8KKwl2b2lkICpidWxrX291dF9idWZmZXI7CS8qIGJ1ZmZlciBmb3Igc2VuZGluZyBkYXRhICovCisKKwlzdHJ1Y3QgdXJiICp0eF91cmI7CS8qIFVSQiBmb3Igc2VuZGluZyBkYXRhICovCisJc3RydWN0IHVyYiAqcnhfdXJiOwkvKiBVUkIgZm9yIHJlY2VpdmluZyBkYXRhICovCisKKwl1bnNpZ25lZCBpbnQgdHhfcGlwZTsJLyogYnVsayBvdXQgcGlwZSAqLworCXVuc2lnbmVkIGludCByeF9waXBlOwkvKiBidWxrIGluIHBpcGUgKi8KKworCXN0cnVjdCBtdXRleCBtdHg7CS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisKKwkvKiB3b3JrIHF1ZXVlcyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX2Fzc29jX2RvbmU7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfam9pbjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19uZXdfYnNzOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3N0YXJ0X3NjYW47CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc2V0X3Byb21pc2M7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc3VibWl0X3J4OworCXN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcmtfcmVzdGFydDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrX2dldF9zY2FuOworCXN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcmtfYmVhY29uOworCXN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcmtfYXV0aDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrX2Fzc29jOworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHJ4X3Rhc2tsZXQ7CisKKwkvKiB0aGUgV0VQIHN0dWZmICovCisJaW50IHdlcF9lbmFibGVkOwkvKiAxIGlmIFdFUCBpcyBlbmFibGVkICovCisJaW50IHdlcF9rZXlfaWQ7CQkvKiBrZXkgaWQgdG8gYmUgdXNlZCAqLworCXU4IHdlcF9rZXlzW1dFUF9LRVlTXVtXRVBfS0VZX0xFTl07CS8qIHRoZSBmb3VyIFdFUCBrZXlzLAorCQkJCQkJICAgNSBvciAxMyBieXRlcyBhcmUgdXNlZCAqLworCXU4IHdlcF9rZXlzX2xlbltXRVBfS0VZU107CS8qIHRoZSBsZW5ndGggb2YgdGhlIGFib3ZlIGtleXMgKi8KKworCWludCBjaGFubmVsOworCWludCBpd19tb2RlOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBlc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CisJaW50IGVzc2lkX3NpemU7CisJaW50IHJhZGlvX29uOworCWludCBwcm9taXNjOworCisJaW50IHByZWFtYmxlX3R5cGU7CS8qIDAgLSBsb25nLCAxIC0gc2hvcnQsIDIgLSBhdXRvICovCisJaW50IGF1dGhfbW9kZTsJCS8qIGF1dGhlbnRpY2F0aW9uIHR5cGU6IDAgb3BlbiwgMSBzaGFyZWQga2V5ICovCisJaW50IHR4cmF0ZTsJCS8qIDAsMSwyLDMgPSAxLDIsNS41LDExIE1icHMsIDQgaXMgYXV0byAqLworCWludCBmcmFnX3RocmVzaG9sZDsJLyogdGhyZXNob2xkIGZvciBmcmFnbWVudGF0aW9uIG9mIHR4IHBhY2tldHMgKi8KKwlpbnQgcnRzX3RocmVzaG9sZDsJLyogdGhyZXNob2xkIGZvciBSVFMgbWVjaGFuaXNtICovCisJaW50IHNob3J0X3JldHJ5X2xpbWl0OworCisJaW50IHNjYW5fbWluX3RpbWU7CS8qIHNjYW4gbWluIGNoYW5uZWwgdGltZSAqLworCWludCBzY2FuX21heF90aW1lOwkvKiBzY2FuIG1heCBjaGFubmVsIHRpbWUgKi8KKwlpbnQgc2Nhbl9tb2RlOwkJLyogU0NBTl9UWVBFX0FDVElWRSwgU0NBTl9UWVBFX1BBU1NJVkUgKi8KKwlpbnQgc2Nhbl9uZWVkX2FueTsJLyogaWYgc2V0LCBuZWVkIHRvIHNjYW4gZm9yIGFueSBFU1NJRCAqLworCisJLyogdGhlIGxpc3Qgd2UgZ290IGZyb20gc2Nhbm5pbmcgKi8KKwlzcGlubG9ja190IGJzc19saXN0X3NwaW5sb2NrOwkvKiBwcm90ZWN0cyBic3NfbGlzdCBvcGVyYXRpb25zICovCisJc3RydWN0IGxpc3RfaGVhZCBic3NfbGlzdDsJLyogbGlzdCBvZiBCU1Mgd2UgZ290IGJlYWNvbnMgZnJvbSAqLworCXN0cnVjdCB0aW1lcl9saXN0IGJzc19saXN0X3RpbWVyOwkvKiB0aW1lciB0byBwdXJnZSBvbGQgZW50cmllcworCQkJCQkJICAgZnJvbSBic3NfbGlzdCAqLworCXN0cnVjdCBic3NfaW5mbyAqY3Vycl9ic3M7CS8qIGN1cnJlbnQgQlNTICovCisJdTE2IGFzc29jX2lkOwkJLyogY3VycmVudCBhc3NvY2lhdGlvbiBJRCwgaWYgYXNzb2NpYXRlZCAqLworCisJdTggd2FudGVkX2Jzc2lkW0VUSF9BTEVOXTsKKwlpbnQgd2FudGVkX2Jzc2lkX3ZhbGlkOwkvKiAhPSAwIGlmIHdhbnRlZF9ic3NpZCBpcyB0byBiZSB1c2VkICovCisKKwkvKiBzb21lIGRhdGEgZm9yIGluZnJhc3RydWN0dXJlIG1vZGUgb25seSAqLworCXNwaW5sb2NrX3QgbWdtdF9zcGlubG9jazsJLyogdGhpcyBzcGlubG9jayBwcm90ZWN0cyBhY2Nlc3MgdG8KKwkJCQkJICAgbmV4dF9tZ210X2J1bGsgKi8KKworCXN0cnVjdCBhdDc2X3R4X2J1ZmZlciAqbmV4dF9tZ210X2J1bGs7CS8qIHBlbmRpbmcgbWFuYWdlbWVudCBtc2cgdG8KKwkJCQkJCSAgIHNlbmQgdmlhIGJ1bGsgb3V0ICovCisJZW51bSBtYWNfc3RhdGUgbWFjX3N0YXRlOworCWVudW0geworCQlTQ0FOX0lETEUsCisJCVNDQU5fSU5fUFJPR1JFU1MsCisJCVNDQU5fQ09NUExFVEVECisJfSBzY2FuX3N0YXRlOworCXRpbWVfdCBsYXN0X3NjYW47CisKKwlpbnQgcmV0cmllczsJCS8qIHJlbWFpbmluZyByZXRyaWVzIGluIGNhc2Ugb2YgdGltZW91dCB3aGVuCisJCQkJICogc2VuZGluZyBBdXRoUmVxIG9yIEFzc29jUmVxICovCisJdTggcG1fbW9kZTsJCS8qIHBvd2VyIG1hbmFnZW1lbnQgbW9kZSAqLworCXUzMiBwbV9wZXJpb2Q7CQkvKiBwb3dlciBtYW5hZ2VtZW50IHBlcmlvZCBpbiBtaWNyb3NlY29uZHMgKi8KKworCXN0cnVjdCByZWdfZG9tYWluIGNvbnN0ICpkb21haW47CS8qIHJlZyBkb21haW4gZGVzY3JpcHRpb24gKi8KKworCS8qIGl3c3B5IHN1cHBvcnQgKi8KKwlzcGlubG9ja190IHNweV9zcGlubG9jazsKKwlzdHJ1Y3QgaXdfc3B5X2RhdGEgc3B5X2RhdGE7CisKKwlzdHJ1Y3QgaXdfcHVibGljX2RhdGEgd2lyZWxlc3NfZGF0YTsKKworCS8qIFRoZXNlIGZpZWxkcyBjb250YWluIEhXIGNvbmZpZyBwcm92aWRlZCBieSB0aGUgZGV2aWNlIChub3QgYWxsIG9mCisJICogdGhlc2UgZmllbGRzIGFyZSB1c2VkIGJ5IGFsbCBib2FyZCB0eXBlcykgKi8KKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcmVndWxhdG9yeV9kb21haW47CisKKwlzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZyBjYXJkX2NvbmZpZzsKKworCS8qIHN0b3JlIHJ4IGZyYWdtZW50cyB1bnRpbCBjb21wbGV0ZSAqLworCXN0cnVjdCByeF9kYXRhX2J1ZiByeF9kYXRhW05SX1JYX0RBVEFfQlVGXTsKKworCWVudW0gYm9hcmRfdHlwZSBib2FyZF90eXBlOworCXN0cnVjdCBtaWJfZndfdmVyc2lvbiBmd192ZXJzaW9uOworCisJdW5zaWduZWQgaW50IGRldmljZV91bnBsdWdnZWQ6MTsKKwl1bnNpZ25lZCBpbnQgbmV0ZGV2X3JlZ2lzdGVyZWQ6MTsKKwlzdHJ1Y3Qgc2V0X21pYl9idWZmZXIgbWliX2J1ZjsJLyogZ2xvYmFsIGJ1ZmZlciBmb3Igc2V0X21pYiBjYWxscyAqLworCisJLyogYmVhY29uIGNvdW50aW5nICovCisJaW50IGJlYWNvbl9wZXJpb2Q7CS8qIHBlcmlvZCBvZiBtZ210IGJlYWNvbnMsIEt1cyAqLworCWludCBiZWFjb25zX3JlY2VpdmVkOworCXVuc2lnbmVkIGxvbmcgYmVhY29uc19sYXN0X3F1YWw7CS8qIHRpbWUgd2UgcmVzdGFydGVkIGNvdW50aW5nCisJCQkJCQkgICBiZWFjb25zICovCit9OworCitzdHJ1Y3QgYXQ3Nl9yeF9yYWRpb3RhcCB7CisJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgcnRfaGRyOworCV9fbGU2NCBydF90c2Z0OworCXU4IHJ0X2ZsYWdzOworCXU4IHJ0X3JhdGU7CisJczggcnRfc2lnbmFsOworCXM4IHJ0X25vaXNlOworfTsKKworI2RlZmluZSBBVDc2X1JYX1JBRElPVEFQX1BSRVNFTlQJCSAgXAorCSgoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfVFNGVCkJCXwgXAorCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUykJCXwgXAorCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9SQVRFKQkJfCBcCisJKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVFNJR05BTCkJfCBcCisJKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVE5PSVNFKSkKKworI2RlZmluZSBCRUFDT05fTUFYX0RBVEFfTEVOR1RICTE1MDAKKworLyogdGhlIG1heGltdW0gc2l6ZSBvZiBhbiBBc3NvY1JlcSBwYWNrZXQgKi8KKyNkZWZpbmUgQVNTT0NSRVFfTUFYX1NJWkUgXAorICAoQVQ3Nl9UWF9IRFJMRU4gKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXF1ZXN0KSArIFwKKyAgIDEgKyAxICsgSVdfRVNTSURfTUFYX1NJWkUgKyAxICsgMSArIDQpCisKKy8qIGZvciBzaGFyZWQgc2VjcmV0IGF1dGgsIGFkZCB0aGUgY2hhbGxlbmdlIHRleHQgc2l6ZSAqLworI2RlZmluZSBBVVRIX0ZSQU1FX1NJWkUgKEFUNzZfVFhfSERSTEVOICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYXV0aCkpCisKKy8qIE1heGltYWwgbnVtYmVyIG9mIEF1dGhSZXEgcmV0cmllcyAqLworI2RlZmluZSBBVVRIX1JFVFJJRVMJCTMKKworLyogTWF4aW1hbCBudW1iZXIgb2YgQXNzb2NSZXEgcmV0cmllcyAqLworI2RlZmluZSBBU1NPQ19SRVRSSUVTCQkzCisKKy8qIEJlYWNvbiB0aW1lb3V0IGluIG1hbmFnZWQgbW9kZSB3aGVuIHdlIGFyZSBjb25uZWN0ZWQgKi8KKyNkZWZpbmUgQkVBQ09OX1RJTUVPVVQJCSgxMCAqIEhaKQorCisvKiBUaW1lb3V0IGZvciBhdXRoZW50aWNhdGlvbiByZXNwb25zZSAqLworI2RlZmluZSBBVVRIX1RJTUVPVVQJCSgxICogSFopCisKKy8qIFRpbWVvdXQgZm9yIGFzc29jaWF0aW9uIHJlc3BvbnNlICovCisjZGVmaW5lIEFTU09DX1RJTUVPVVQJCSgxICogSFopCisKKy8qIFBvbGxpbmcgaW50ZXJ2YWwgd2hlbiBzY2FuIGlzIHJ1bm5pbmcgKi8KKyNkZWZpbmUgU0NBTl9QT0xMX0lOVEVSVkFMCShIWiAvIDQpCisKKy8qIENvbW1hbmQgY29tcGxldGlvbiB0aW1lb3V0ICovCisjZGVmaW5lIENNRF9DT01QTEVUSU9OX1RJTUVPVVQJKDUgKiBIWikKKworI2RlZmluZSBERUZfUlRTX1RIUkVTSE9MRAkxNTM2CisjZGVmaW5lIERFRl9GUkFHX1RIUkVTSE9MRAkxNTM2CisjZGVmaW5lIERFRl9TSE9SVF9SRVRSWV9MSU1JVAk4CisjZGVmaW5lIERFRl9DSEFOTkVMCQkxMAorI2RlZmluZSBERUZfU0NBTl9NSU5fVElNRQkxMAorI2RlZmluZSBERUZfU0NBTl9NQVhfVElNRQkxMjAKKworI2RlZmluZSBNQVhfUlRTX1RIUkVTSE9MRAkoTUFYX0ZSQUdfVEhSRVNIT0xEICsgMSkKKworLyogdGhlIG1heCBwYWRkaW5nIHNpemUgZm9yIHR4IGluIGJ5dGVzIChzZWUgY2FsY19wYWRkaW5nKSAqLworI2RlZmluZSBNQVhfUEFERElOR19TSVpFCTUzCisKKyNlbmRpZgkJCQkvKiBfQVQ3Nl9VU0JfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFkNDFlYTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9LY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorY29uZmlnIEVDSE8KKwl0cmlzdGF0ZSAiTGluZSBFY2hvIENhbmNlbGxlciBzdXBwb3J0IgorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGxpbmUgZWNobyBjYW5jZWxsaW5nIHN1cHBvcnQgZm9yIG1JU0ROIGFuZAorCSAgWmFwdGVsIGRyaXZlcnMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGVjaG8uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNGNhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfRUNITykgKz0gZWNoby5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2EwOWFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vVE9ETwpAQCAtMCwwICsxLDEwIEBACitUT0RPOgorCS0gY2hlY2twYXRjaC5wbCBjbGVhbnVwcworCS0gTGluZGVudAorCS0gdHlwZWRlZiByZW1vdmFscworCS0gaGFuZGxlIGJpdF9vcGVyYXRpb25zLmggKG1lcmdlIGluIG9yIG1ha2UgcGFydCBvZiBjb21tb24gY29kZT8pCisJLSByZW1vdmUgcHJvYyBpbnRlcmZhY2UsIG9ubHkgdXNlIGVjaG8uaCBpbnRlcmZhY2UgKHByb2MgaW50ZXJmYWNlIGlzCisJICByYWN5IGFuZCBub3QgY29ycmVjdC4pCisKK1BsZWFzZSBzZW5kIHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kIENjOiBTdGV2ZQorVW5kZXJ3b29kIDxzdGV2ZXVAY29wcGljZS5vcmc+IGFuZCBEYXZpZCBSb3dlIDxkYXZpZEByb3dldGVsLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2JpdF9vcGVyYXRpb25zLmggYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9iaXRfb3BlcmF0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMmY0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9iaXRfb3BlcmF0aW9ucy5oCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogU3BhbkRTUCAtIGEgc2VyaWVzIG9mIERTUCBjb21wb25lbnRzIGZvciB0ZWxlcGhvbnkKKyAqCisgKiBiaXRfb3BlcmF0aW9ucy5oIC0gVmFyaW91cyBiaXQgbGV2ZWwgb3BlcmF0aW9ucywgc3VjaCBhcyBiaXQgcmV2ZXJzYWwKKyAqCisgKiBXcml0dGVuIGJ5IFN0ZXZlIFVuZGVyd29vZCA8c3RldmV1QGNvcHBpY2Uub3JnPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTdGV2ZSBVbmRlcndvb2QKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAkSWQ6IGJpdF9vcGVyYXRpb25zLmgsdiAxLjExIDIwMDYvMTEvMjggMTU6Mzc6MDMgc3RldmV1IEV4cCAkCisgKi8KKworLyohIFxmaWxlICovCisKKyNpZiAhZGVmaW5lZChfQklUX09QRVJBVElPTlNfSF8pCisjZGVmaW5lIF9CSVRfT1BFUkFUSU9OU19IXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSAgfHwgIGRlZmluZWQoX194ODZfNjRfXykKKy8qISBcYnJpZWYgRmluZCB0aGUgYml0IHBvc2l0aW9uIG9mIHRoZSBoaWdoZXN0IHNldCBiaXQgaW4gYSB3b3JkCisgICAgXHBhcmFtIGJpdHMgVGhlIHdvcmQgdG8gYmUgc2VhcmNoZWQKKyAgICBccmV0dXJuIFRoZSBiaXQgbnVtYmVyIG9mIHRoZSBoaWdoZXN0IHNldCBiaXQsIG9yIC0xIGlmIHRoZSB3b3JkIGlzIHplcm8uICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdG9wX2JpdCh1bnNpZ25lZCBpbnQgYml0cykKK3sKKyAgICBpbnQgcmVzOworCisgICAgX19hc21fXyAoIiB4b3JsICVbcmVzXSwlW3Jlc107XG4iCisgICAgICAgICAgICAgIiBkZWNsICVbcmVzXTtcbiIKKyAgICAgICAgICAgICAiIGJzcmwgJVtiaXRzXSwlW3Jlc11cbiIKKyAgICAgICAgICAgICA6IFtyZXNdICI9JnIiIChyZXMpCisgICAgICAgICAgICAgOiBbYml0c10gInJtIiAoYml0cykpOworICAgIHJldHVybiByZXM7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyohIFxicmllZiBGaW5kIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGxvd2VzdCBzZXQgYml0IGluIGEgd29yZAorICAgIFxwYXJhbSBiaXRzIFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkCisgICAgXHJldHVybiBUaGUgYml0IG51bWJlciBvZiB0aGUgbG93ZXN0IHNldCBiaXQsIG9yIC0xIGlmIHRoZSB3b3JkIGlzIHplcm8uICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYm90dG9tX2JpdCh1bnNpZ25lZCBpbnQgYml0cykKK3sKKyAgICBpbnQgcmVzOworCisgICAgX19hc21fXyAoIiB4b3JsICVbcmVzXSwlW3Jlc107XG4iCisgICAgICAgICAgICAgIiBkZWNsICVbcmVzXTtcbiIKKyAgICAgICAgICAgICAiIGJzZmwgJVtiaXRzXSwlW3Jlc11cbiIKKyAgICAgICAgICAgICA6IFtyZXNdICI9JnIiIChyZXMpCisgICAgICAgICAgICAgOiBbYml0c10gInJtIiAoYml0cykpOworICAgIHJldHVybiByZXM7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbHNlCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdG9wX2JpdCh1bnNpZ25lZCBpbnQgYml0cykKK3sKKyAgICBpbnQgaTsKKworICAgIGlmIChiaXRzID09IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpID0gMDsKKyAgICBpZiAoYml0cyAmIDB4RkZGRjAwMDApCisgICAgeworICAgICAgICBiaXRzICY9IDB4RkZGRjAwMDA7CisgICAgICAgIGkgKz0gMTY7CisgICAgfQorICAgIGlmIChiaXRzICYgMHhGRjAwRkYwMCkKKyAgICB7CisgICAgICAgIGJpdHMgJj0gMHhGRjAwRkYwMDsKKyAgICAgICAgaSArPSA4OworICAgIH0KKyAgICBpZiAoYml0cyAmIDB4RjBGMEYwRjApCisgICAgeworICAgICAgICBiaXRzICY9IDB4RjBGMEYwRjA7CisgICAgICAgIGkgKz0gNDsKKyAgICB9CisgICAgaWYgKGJpdHMgJiAweENDQ0NDQ0NDKQorICAgIHsKKyAgICAgICAgYml0cyAmPSAweENDQ0NDQ0NDOworICAgICAgICBpICs9IDI7CisgICAgfQorICAgIGlmIChiaXRzICYgMHhBQUFBQUFBQSkKKyAgICB7CisgICAgICAgIGJpdHMgJj0gMHhBQUFBQUFBQTsKKyAgICAgICAgaSArPSAxOworICAgIH0KKyAgICByZXR1cm4gaTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYm90dG9tX2JpdCh1bnNpZ25lZCBpbnQgYml0cykKK3sKKyAgICBpbnQgaTsKKworICAgIGlmIChiaXRzID09IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpID0gMzI7CisgICAgaWYgKGJpdHMgJiAweDAwMDBGRkZGKQorICAgIHsKKyAgICAgICAgYml0cyAmPSAweDAwMDBGRkZGOworICAgICAgICBpIC09IDE2OworICAgIH0KKyAgICBpZiAoYml0cyAmIDB4MDBGRjAwRkYpCisgICAgeworICAgICAgICBiaXRzICY9IDB4MDBGRjAwRkY7CisgICAgICAgIGkgLT0gODsKKyAgICB9CisgICAgaWYgKGJpdHMgJiAweDBGMEYwRjBGKQorICAgIHsKKyAgICAgICAgYml0cyAmPSAweDBGMEYwRjBGOworICAgICAgICBpIC09IDQ7CisgICAgfQorICAgIGlmIChiaXRzICYgMHgzMzMzMzMzMykKKyAgICB7CisgICAgICAgIGJpdHMgJj0gMHgzMzMzMzMzMzsKKyAgICAgICAgaSAtPSAyOworICAgIH0KKyAgICBpZiAoYml0cyAmIDB4NTU1NTU1NTUpCisgICAgeworICAgICAgICBiaXRzICY9IDB4NTU1NTU1NTU7CisgICAgICAgIGkgLT0gMTsKKyAgICB9CisgICAgcmV0dXJuIGk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbmRpZgorCisvKiEgXGJyaWVmIEJpdCByZXZlcnNlIGEgYnl0ZS4KKyAgICBccGFyYW0gZGF0YSBUaGUgYnl0ZSB0byBiZSByZXZlcnNlZC4KKyAgICBccmV0dXJuIFRoZSBiaXQgcmV2ZXJzZWQgdmVyc2lvbiBvZiBkYXRhLiAqLworc3RhdGljIF9faW5saW5lX18gdWludDhfdCBiaXRfcmV2ZXJzZTgodWludDhfdCB4KQoreworI2lmIGRlZmluZWQoX19pMzg2X18pICB8fCAgZGVmaW5lZChfX3g4Nl82NF9fKQorICAgIC8qIElmIG11bHRpcGx5IGlzIGZhc3QgKi8KKyAgICByZXR1cm4gKCh4KjB4MDgwMlUgJiAweDIyMTEwVSkgfCAoeCoweDgwMjBVICYgMHg4ODQ0MFUpKSoweDEwMTAxVSA+PiAxNjsKKyNlbHNlCisgICAgLyogSWYgbXVsdGlwbHkgaXMgc2xvdywgYnV0IHdlIGhhdmUgYSBiYXJyZWwgc2hpZnRlciAqLworICAgIHggPSAoeCA+PiA0KSB8ICh4IDw8IDQpOworICAgIHggPSAoKHggJiAweENDKSA+PiAyKSB8ICgoeCAmIDB4MzMpIDw8IDIpOworICAgIHJldHVybiAoKHggJiAweEFBKSA+PiAxKSB8ICgoeCAmIDB4NTUpIDw8IDEpOworI2VuZGlmCit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyohIFxicmllZiBCaXQgcmV2ZXJzZSBhIDE2IGJpdCB3b3JkLgorICAgIFxwYXJhbSBkYXRhIFRoZSB3b3JkIHRvIGJlIHJldmVyc2VkLgorICAgIFxyZXR1cm4gVGhlIGJpdCByZXZlcnNlZCB2ZXJzaW9uIG9mIGRhdGEuICovCit1aW50MTZfdCBiaXRfcmV2ZXJzZTE2KHVpbnQxNl90IGRhdGEpOworCisvKiEgXGJyaWVmIEJpdCByZXZlcnNlIGEgMzIgYml0IHdvcmQuCisgICAgXHBhcmFtIGRhdGEgVGhlIHdvcmQgdG8gYmUgcmV2ZXJzZWQuCisgICAgXHJldHVybiBUaGUgYml0IHJldmVyc2VkIHZlcnNpb24gb2YgZGF0YS4gKi8KK3VpbnQzMl90IGJpdF9yZXZlcnNlMzIodWludDMyX3QgZGF0YSk7CisKKy8qISBcYnJpZWYgQml0IHJldmVyc2UgZWFjaCBvZiB0aGUgZm91ciBieXRlcyBpbiBhIDMyIGJpdCB3b3JkLgorICAgIFxwYXJhbSBkYXRhIFRoZSB3b3JkIHRvIGJlIHJldmVyc2VkLgorICAgIFxyZXR1cm4gVGhlIGJpdCByZXZlcnNlZCB2ZXJzaW9uIG9mIGRhdGEuICovCit1aW50MzJfdCBiaXRfcmV2ZXJzZV80Ynl0ZXModWludDMyX3QgZGF0YSk7CisKKy8qISBcYnJpZWYgRmluZCB0aGUgbnVtYmVyIG9mIHNldCBiaXRzIGluIGEgMzIgYml0IHdvcmQuCisgICAgXHBhcmFtIHggVGhlIHdvcmQgdG8gYmUgc2VhcmNoZWQuCisgICAgXHJldHVybiBUaGUgbnVtYmVyIG9mIHNldCBiaXRzLiAqLworaW50IG9uZV9iaXRzMzIodWludDMyX3QgeCk7CisKKy8qISBcYnJpZWYgQ3JlYXRlIGEgbWFzayBhcyB3aWRlIGFzIHRoZSBudW1iZXIgaW4gYSAzMiBiaXQgd29yZC4KKyAgICBccGFyYW0geCBUaGUgd29yZCB0byBiZSBzZWFyY2hlZC4KKyAgICBccmV0dXJuIFRoZSBtYXNrLiAqLwordWludDMyX3QgbWFrZV9tYXNrMzIodWludDMyX3QgeCk7CisKKy8qISBcYnJpZWYgQ3JlYXRlIGEgbWFzayBhcyB3aWRlIGFzIHRoZSBudW1iZXIgaW4gYSAxNiBiaXQgd29yZC4KKyAgICBccGFyYW0geCBUaGUgd29yZCB0byBiZSBzZWFyY2hlZC4KKyAgICBccmV0dXJuIFRoZSBtYXNrLiAqLwordWludDE2X3QgbWFrZV9tYXNrMTYodWludDE2X3QgeCk7CisKKy8qISBcYnJpZWYgRmluZCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgb25lIGluIGEgd29yZCwgYW5kIHJldHVybiBhIHdvcmQKKyAgICAgICAgICAgd2l0aCBqdXN0IHRoYXQgYml0IHNldC4KKyAgICBccGFyYW0geCBUaGUgd29yZCB0byBiZSBzZWFyY2hlZC4KKyAgICBccmV0dXJuIFRoZSB3b3JkIHdpdGggdGhlIHNpbmdsZSBzZXQgYml0LiAqLworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgbGVhc3Rfc2lnbmlmaWNhbnRfb25lMzIodWludDMyX3QgeCkKK3sKKyAgICByZXR1cm4gKHggJiAoLShpbnQzMl90KSB4KSk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyohIFxicmllZiBGaW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IG9uZSBpbiBhIHdvcmQsIGFuZCByZXR1cm4gYSB3b3JkCisgICAgICAgICAgIHdpdGgganVzdCB0aGF0IGJpdCBzZXQuCisgICAgXHBhcmFtIHggVGhlIHdvcmQgdG8gYmUgc2VhcmNoZWQuCisgICAgXHJldHVybiBUaGUgd29yZCB3aXRoIHRoZSBzaW5nbGUgc2V0IGJpdC4gKi8KK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IG1vc3Rfc2lnbmlmaWNhbnRfb25lMzIodWludDMyX3QgeCkKK3sKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSAgfHwgIGRlZmluZWQoX194ODZfNjRfXykKKyAgICByZXR1cm4gMSA8PCB0b3BfYml0KHgpOworI2Vsc2UKKyAgICB4ID0gbWFrZV9tYXNrMzIoeCk7CisgICAgcmV0dXJuICh4IF4gKHggPj4gMSkpOworI2VuZGlmCit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyohIFxicmllZiBGaW5kIHRoZSBwYXJpdHkgb2YgYSBieXRlLgorICAgIFxwYXJhbSB4IFRoZSBieXRlIHRvIGJlIGNoZWNrZWQuCisgICAgXHJldHVybiAxIGZvciBvZGQsIG9yIDAgZm9yIGV2ZW4uICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcGFyaXR5OCh1aW50OF90IHgpCit7CisgICAgeCA9ICh4IF4gKHggPj4gNCkpICYgMHgwRjsKKyAgICByZXR1cm4gKDB4Njk5NiA+PiB4KSAmIDE7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyohIFxicmllZiBGaW5kIHRoZSBwYXJpdHkgb2YgYSAxNiBiaXQgd29yZC4KKyAgICBccGFyYW0geCBUaGUgd29yZCB0byBiZSBjaGVja2VkLgorICAgIFxyZXR1cm4gMSBmb3Igb2RkLCBvciAwIGZvciBldmVuLiAqLworc3RhdGljIF9faW5saW5lX18gaW50IHBhcml0eTE2KHVpbnQxNl90IHgpCit7CisgICAgeCBePSAoeCA+PiA4KTsKKyAgICB4ID0gKHggXiAoeCA+PiA0KSkgJiAweDBGOworICAgIHJldHVybiAoMHg2OTk2ID4+IHgpICYgMTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiEgXGJyaWVmIEZpbmQgdGhlIHBhcml0eSBvZiBhIDMyIGJpdCB3b3JkLgorICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIGNoZWNrZWQuCisgICAgXHJldHVybiAxIGZvciBvZGQsIG9yIDAgZm9yIGV2ZW4uICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcGFyaXR5MzIodWludDMyX3QgeCkKK3sKKyAgICB4IF49ICh4ID4+IDE2KTsKKyAgICB4IF49ICh4ID4+IDgpOworICAgIHggPSAoeCBeICh4ID4+IDQpKSAmIDB4MEY7CisgICAgcmV0dXJuICgweDY5OTYgPj4geCkgJiAxOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgorLyotIEVuZCBvZiBmaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmMgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyODFiMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uYwpAQCAtMCwwICsxLDYzMiBAQAorLyoKKyAqIFNwYW5EU1AgLSBhIHNlcmllcyBvZiBEU1AgY29tcG9uZW50cyBmb3IgdGVsZXBob255CisgKgorICogZWNoby5jIC0gQSBsaW5lIGVjaG8gY2FuY2VsbGVyLiAgVGhpcyBjb2RlIGlzIGJlaW5nIGRldmVsb3BlZAorICogICAgICAgICAgYWdhaW5zdCBhbmQgcGFydGlhbGx5IGNvbXBsaWVzIHdpdGggRzE2OC4KKyAqCisgKiBXcml0dGVuIGJ5IFN0ZXZlIFVuZGVyd29vZCA8c3RldmV1QGNvcHBpY2Uub3JnPgorICogICAgICAgICBhbmQgRGF2aWQgUm93ZSA8ZGF2aWRfYXRfcm93ZXRlbF9kb3RfY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMyBTdGV2ZSBVbmRlcndvb2QsIDIwMDcgRGF2aWQgUm93ZQorICoKKyAqIEJhc2VkIG9uIGEgYml0IGZyb20gaGVyZSwgYSBiaXQgZnJvbSB0aGVyZSwgZXllIG9mIHRvYWQsIGVhciBvZgorICogYmF0LCAxNSB5ZWFycyBvZiBmYWlsZWQgYXR0ZW1wdHMgYnkgRGF2aWQgYW5kIGEgZmV3IGZyaWVkIGJyYWluCisgKiBjZWxscy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAkSWQ6IGVjaG8uYyx2IDEuMjAgMjAwNi8xMi8wMSAxODowMDo0OCBzdGV2ZXUgRXhwICQKKyAqLworCisvKiEgXGZpbGUgKi8KKworLyogSW1wbGVtZW50YXRpb24gTm90ZXMKKyAgIERhdmlkIFJvd2UKKyAgIEFwcmlsIDIwMDcKKworICAgVGhpcyBjb2RlIHN0YXJ0ZWQgbGlmZSBhcyBTdGV2ZSdzIE5MTVMgYWxnb3JpdGhtIHdpdGggYSB0YXAKKyAgIHJvdGF0aW9uIGFsZ29yaXRobSB0byBoYW5kbGUgZGl2ZXJnZW5jZSBkdXJpbmcgZG91YmxlIHRhbGsuICBJCisgICBhZGRlZCBhIEdlaWdlbCBEb3VibGUgVGFsayBEZXRlY3RvciAoRFREKSBbMl0gYW5kIHBlcmZvcm1lZCBzb21lCisgICBHMTY4IHRlc3RzLiAgSG93ZXZlciBJIGhhZCB0cm91YmxlIG1lZXRpbmcgdGhlIEcxNjggcmVxdWlyZW1lbnRzLAorICAgZXNwZWNpYWxseSBmb3IgZG91YmxlIHRhbGsgLSB0aGVyZSB3ZXJlIGFsd2F5cyBjYXNlcyB3aGVyZSBteSBEVEQKKyAgIGZhaWxlZCwgZm9yIGV4YW1wbGUgd2hlcmUgbmVhciBlbmQgc3BlZWNoIHdhcyB1bmRlciB0aGUgNmRCCisgICB0aHJlc2hvbGQgcmVxdWlyZWQgZm9yIGRlY2xhcmluZyBkb3VibGUgdGFsay4KKworICAgU28gSSB0cmllZCBhIHR3byBwYXRoIGFsZ29yaXRobSBbMV0sIHdoaWNoIGhhcyBzbyBmYXIgZ2l2ZW4gYmV0dGVyCisgICByZXN1bHRzLiAgVGhlIG9yaWdpbmFsIHRhcCByb3RhdGlvbi9HZWlnZWwgYWxnb3JpdGhtIGlzIGF2YWlsYWJsZQorICAgaW4gU1ZOIGh0dHA6Ly9zdm4ucm93ZXRlbC5jb20vc29mdHdhcmUvb3NsZWMvdGFncy9iZWZvcmVfMTZiaXQuCisgICBJdCdzIHByb2JhYmx5IHBvc3NpYmxlIHRvIG1ha2UgaXQgd29yayBpZiBzb21lIG9uZSB3YW50cyB0byBwdXQgc29tZQorICAgc2VyaW91cyB3b3JrIGludG8gaXQuCisKKyAgIEF0IHByZXNlbnQgbm8gc3BlY2lhbCB0cmVhdG1lbnQgaXMgcHJvdmlkZWQgZm9yIHRvbmVzLCB3aGljaAorICAgZ2VuZXJhbGx5IGNhdXNlIE5MTVMgYWxnb3JpdGhtcyB0byBkaXZlcmdlLiAgSW5pdGlhbCBydW5zIG9mIGEKKyAgIHN1YnNldCBvZiB0aGUgRzE2OCB0ZXN0cyBmb3IgdG9uZXMgKGUuZyAuL2VjaG9fdGVzdCA2KSBzaG93IHRoZQorICAgY3VycmVudCBhbGdvcml0aG0gaXMgcGFzc2luZyBPSywgd2hpY2ggaXMga2luZCBvZiBzdXJwcmlzaW5nLiAgVGhlCisgICBmdWxsIHNldCBvZiB0ZXN0cyBuZWVkcyB0byBiZSBwZXJmb3JtZWQgdG8gY29uZmlybSB0aGlzIHJlc3VsdC4KKworICAgT25lIG90aGVyIGludGVyZXN0aW5nIGNoYW5nZSBpcyB0aGF0IEkgaGF2ZSBtYW5hZ2VkIHRvIGdldCB0aGUgTkxNUworICAgY29kZSB0byB3b3JrIHdpdGggMTYgYml0IGNvZWZmaWNpZW50cywgcmF0aGVyIHRoYW4gdGhlIG9yaWdpbmFsIDMyCisgICBiaXQgY29lZmZpY2VudHMuICBUaGlzIHJlZHVjZXMgdGhlIE1JUHMgYW5kIHN0b3JhZ2UgcmVxdWlyZWQuCisgICBJIGV2YXVsYXRlZCB0aGUgMTYgYml0IHBvcnQgdXNpbmcgZzE2OF90ZXN0cy5zaCBhbmQgbGlzdGVuaW5nIHRlc3RzCisgICBvbiA0IHJlYWwtd29ybGQgc2FtcGxlcy4KKworICAgSSBhbHNvIGF0dGVtcHRlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYSBibG9jayBiYXNlZCBOTE1TIHVwZGF0ZQorICAgWzJdIGJ1dCBhbHRob3VnaCB0aGlzIHBhc3NlcyBnMTY4X3Rlc3RzLnNoIGl0IGRpZG4ndCBjb252ZXJnZSB3ZWxsCisgICBvbiB0aGUgcmVhbC13b3JsZCBzYW1wbGVzLiAgSSBoYXZlIG5vIGlkZWEgd2h5LCBwZXJoYXBzIGEgc2NhbGluZworICAgcHJvYmxlbS4gIFRoZSBibG9jayBiYXNlZCBjb2RlIGlzIGFsc28gYXZhaWxhYmxlIGluIFNWTgorICAgaHR0cDovL3N2bi5yb3dldGVsLmNvbS9zb2Z0d2FyZS9vc2xlYy90YWdzL2JlZm9yZV8xNmJpdC4gIElmIHRoaXMKKyAgIGNvZGUgY2FuIGJlIGRlYnVnZ2VkLCBpdCB3aWxsIGxlYWQgdG8gZnVydGhlciByZWR1Y3Rpb24gaW4gTUlQUywgYXMKKyAgIHRoZSBibG9jayB1cGRhdGUgY29kZSBtYXBzIG5pY2VseSBvbnRvIERTUCBpbnN0cnVjdGlvbiBzZXRzIChpdCdzIGEKKyAgIGRvdCBwcm9kdWN0KSBjb21wYXJlZCB0byB0aGUgY3VycmVudCBzYW1wbGUtYnktc2FtcGxlIHVwZGF0ZS4KKworICAgU3RldmUgYWxzbyBoYXMgc29tZSBuaWNlIG5vdGVzIG9uIGVjaG8gY2FuY2VsbGVycyBpbiBlY2hvLmgKKworCisgICBSZWZlcmVuY2VzOgorCisgICBbMV0gT2NoaWFpLCBBcmVzZWtpLCBhbmQgT2dpaGFyYSwgIkVjaG8gQ2FuY2VsbGVyIHdpdGggVHdvIEVjaG8KKyAgICAgICBQYXRoIE1vZGVscyIsIElFRUUgVHJhbnNhY3Rpb25zIG9uIGNvbW11bmljYXRpb25zLCBDT00tMjUsCisgICAgICAgTm8uIDYsIEp1bmUKKyAgICAgICAxOTc3LgorICAgICAgIGh0dHA6Ly93d3cucm93ZXRlbC5jb20vaW1hZ2VzL2VjaG8vZHVhbF9wYXRoX3BhcGVyLnBkZgorCisgICBbMl0gVGhlIGNsYXNzaWMsIHZlcnkgdXNlZnVsIHBhcGVyIHRoYXQgdGVsbHMgeW91IGhvdyB0bworICAgICAgIGFjdHVhbGx5IGJ1aWxkIGEgcmVhbCB3b3JsZCBlY2hvIGNhbmNlbGxlcjoKKyAgICAgICAgIE1lc3NlcnNjaG1pdHQsIEhlZGJlcmcsIENvbGUsIEhhb3VpLCBXaW5zaGlwLCAiRGlnaXRhbCBWb2ljZQorICAgICAgICAgRWNobyBDYW5jZWxsZXIgd2l0aCBhIFRNUzMyMDAyMCwKKyAgICAgICAgIGh0dHA6Ly93d3cucm93ZXRlbC5jb20vaW1hZ2VzL2VjaG8vc3ByYTEyOS5wZGYKKworICAgWzNdIEkgaGF2ZSB3cml0dGVuIGEgc2VyaWVzIG9mIGJsb2cgcG9zdHMgb24gdGhpcyB3b3JrLCBoZXJlIGlzCisgICAgICAgUGFydCAxOiBodHRwOi8vd3d3LnJvd2V0ZWwuY29tL2Jsb2cvP3A9MTgKKworICAgWzRdIFRoZSBzb3VyY2UgY29kZSBodHRwOi8vc3ZuLnJvd2V0ZWwuY29tL3NvZnR3YXJlL29zbGVjLworCisgICBbNV0gQSBuaWNlIHJlZmVyZW5jZSBvbiBMTVMgZmlsdGVyczoKKyAgICAgICAgIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGVhc3RfbWVhbl9zcXVhcmVzX2ZpbHRlcgorCisgICBDcmVkaXRzOgorCisgICBUaGFua3MgdG8gU3RldmUgVW5kZXJ3b29kLCBKZWFuLU1hcmMgVmFsaW4sIGFuZCBSYW1ha3Jpc2huYW4KKyAgIE11dGh1a3Jpc2huYW4gZm9yIHRoZWlyIHN1Z2dlc3Rpb25zIGFuZCBlbWFpbCBkaXNjdXNzaW9ucy4gIFRoYW5rcworICAgYWxzbyB0byB0aG9zZSBwZW9wbGUgd2hvIGNvbGxlY3RlZCBlY2hvIHNhbXBsZXMgZm9yIG1lIHN1Y2ggYXMKKyAgIE1hcmssIFBhd2VsLCBhbmQgUGF2ZWwuCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+ICAgICAgIC8qIFdlJ3JlIGRvaW5nIGtlcm5lbCB3b3JrICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2RlZmluZSBtYWxsb2MoYSkga21hbGxvYygoYSksIEdGUF9LRVJORUwpCisjZGVmaW5lIGZyZWUoYSkga2ZyZWUoYSkKKworI2luY2x1ZGUgImJpdF9vcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiZWNoby5oIgorCisjZGVmaW5lIE1JTl9UWF9QT1dFUl9GT1JfQURBUFRJT04gICA2NAorI2RlZmluZSBNSU5fUlhfUE9XRVJfRk9SX0FEQVBUSU9OICAgNjQKKyNkZWZpbmUgRFREX0hBTkdPVkVSICAgICAgICAgICAgICAgNjAwICAgICAvKiA2MDAgc2FtcGxlcywgb3IgNzVtcyAgICAgKi8KKyNkZWZpbmUgRENfTE9HMkJFVEEgICAgICAgICAgICAgICAgICAzICAgICAvKiBsb2cyKCkgb2YgREMgZmlsdGVyIEJldGEgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlVOQ1RJT05TCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogYWRhcHRpbmcgY29lZmZzIHVzaW5nIHRoZSB0cmFkaXRpb25hbCBzdG9jaGFzdGljIGRlc2NlbnQgKE4pTE1TIGFsZ29yaXRobSAqLworCisKKyNpZmRlZiBfX0JMQUNLRklOX0FTTV9fCitzdGF0aWMgdm9pZCBfX2lubGluZV9fIGxtc19hZGFwdF9iZyhlY2hvX2Nhbl9zdGF0ZV90ICplYywgaW50IGNsZWFuLCBpbnQgc2hpZnQpCit7CisgICAgaW50IGksIGo7CisgICAgaW50IG9mZnNldDE7CisgICAgaW50IG9mZnNldDI7CisgICAgaW50IGZhY3RvcjsKKyAgICBpbnQgZXhwOworICAgIGludDE2X3QgKnBoaXN0OworICAgIGludCBuOworCisgICAgaWYgKHNoaWZ0ID4gMCkKKwlmYWN0b3IgPSBjbGVhbiA8PCBzaGlmdDsKKyAgICBlbHNlCisJZmFjdG9yID0gY2xlYW4gPj4gLXNoaWZ0OworCisgICAgLyogVXBkYXRlIHRoZSBGSVIgdGFwcyAqLworCisgICAgb2Zmc2V0MiA9IGVjLT5jdXJyX3BvczsKKyAgICBvZmZzZXQxID0gZWMtPnRhcHMgLSBvZmZzZXQyOworICAgIHBoaXN0ID0gJmVjLT5maXJfc3RhdGVfYmcuaGlzdG9yeVtvZmZzZXQyXTsKKworICAgIC8qIHN0OiBhbmQgZW46IGhlbHAgdXMgbG9jYXRlIHRoZSBhc3NlbWJsZXIgaW4gZWNoby5zICovCisKKyAgICAvL2FzbSgic3Q6Iik7CisgICAgbiA9IGVjLT50YXBzOworICAgIGZvciAoaSA9IDAsIGogPSBvZmZzZXQyOyAgaSA8IG47ICBpKyssIGorKykKKyAgICB7CisgICAgICAgZXhwID0gKnBoaXN0KysgKiBmYWN0b3I7CisgICAgICAgZWMtPmZpcl90YXBzMTZbMV1baV0gKz0gKGludDE2X3QpICgoZXhwKygxPDwxNCkpID4+IDE1KTsKKyAgICB9CisgICAgLy9hc20oImVuOiIpOworCisgICAgLyogTm90ZSB0aGUgYXNtIGZvciB0aGUgaW5uZXIgbG9vcCBhYm92ZSBnZW5lcmF0ZWQgYnkgQmxhY2tmaW4gZ2NjCisgICAgICAgNC4xLjEgaXMgcHJldHR5IGdvb2QgKG5vdGUgZXZlbiBwYXJhbGxlbCBpbnN0cnVjdGlvbnMgdXNlZCk6CisKKyAgICAJUjAgPSBXIFtQMCsrXSAoWCk7CisJUjAgKj0gUjI7CisJUjAgPSBSMCArIFIzIChOUykgfHwKKwlSMSA9IFcgW1AxXSAoWCkgfHwKKwlub3A7CisJUjAgPj4+PSAxNTsKKwlSMCA9IFIwICsgUjE7CisJVyBbUDErK10gPSBSMDsKKworCUEgYmxvY2sgYmFzZWQgdXBkYXRlIGFsZ29yaXRobSB3b3VsZCBiZSBtdWNoIGZhc3RlciBidXQgdGhlCisJYWJvdmUgY2FuJ3QgYmUgaW1wcm92ZWQgb24gbXVjaC4gIEV2ZXJ5IGluc3RydWN0aW9uIHNhdmVkIGluCisJdGhlIGxvb3AgYWJvdmUgaXMgMiBNSVBzL2NoISAgVGhlIGZvciBsb29wIGFib3ZlIGlzIHdoZXJlIHRoZQorCUJsYWNrZmluIHNwZW5kcyBtb3N0IG9mIGl0J3MgdGltZSAtIGFib3V0IDE3IE1JUHMvY2ggbWVhc3VyZWQKKwl3aXRoIHNwZWVkdGVzdC5jIHdpdGggMjU2IHRhcHMgKDMybXMpLiAgV3JpdGUtYmFjayBhbmQKKwlXcml0ZS10aHJvdWdoIGNhY2hlIGdhdmUgYWJvdXQgdGhlIHNhbWUgcGVyZm9ybWFuY2UuCisgICAgKi8KK30KKworLyoKKyAgIElERUFTIGZvciBmdXJ0aGVyIG9wdGltaXNhdGlvbiBvZiBsbXNfYWRhcHRfYmcoKToKKworICAgMS8gVGhlIHJvdW5kaW5nIGlzIHF1aXRlIGNvc3RseS4gIENvdWxkIHdlIGtlZXAgYXMgMzIgYml0IGNvZWZmcworICAgdGhlbiBtYWtlIGZpbHRlciBwbHVjayB0aGUgTVMgMTYtYml0cyBvZiB0aGUgY29lZmZzIHdoZW4gZmlsdGVyaW5nPworICAgSG93ZXZlciB0aGlzIHdvdWxkIGxvd2VyIHBvdGVudGlhbCBvcHRpbWlzYXRpb24gb2YgZmlsdGVyLCBhcyBJCisgICB0aGluayB0aGUgZHVhbC1NQUMgYXJjaGl0ZWN0dXJlIHJlcXVpcmVzIHBhY2tlZCAxNiBiaXQgY29lZmZzLgorCisgICAyLyBCbG9jayBiYXNlZCB1cGRhdGUgd291bGQgYmUgbW9yZSBlZmZpY2llbnQsIGFzIHBlciBjb21tZW50cyBhYm92ZSwKKyAgIGNvdWxkIHVzZSBkdWFsIE1BQyBhcmNoaXRlY3R1cmUuCisKKyAgIDMvIExvb2sgZm9yIHNhbWUgc2FtcGxlIEJsYWNrZmluIExNUyBjb2RlLCBzZWUgaWYgd2UgY2FuIGdldCBkdWFsLU1BQworICAgcGFja2luZy4KKworICAgNC8gRXhlY3V0ZSB0aGUgd2hvbGUgZS9jIGluIGEgYmxvY2sgb2Ygc2F5IDIwbXMgcmF0aGVyIHRoYW4gc2FtcGxlCisgICBieSBzYW1wbGUuICBQcm9jZXNzaW5nIGEgZmV3IHNhbXBsZXMgZXZlcnkgbXMgaXMgaW5lZmZpY2llbnQuCisqLworCisjZWxzZQorc3RhdGljIF9faW5saW5lX18gdm9pZCBsbXNfYWRhcHRfYmcoZWNob19jYW5fc3RhdGVfdCAqZWMsIGludCBjbGVhbiwgaW50IHNoaWZ0KQoreworICAgIGludCBpOworCisgICAgaW50IG9mZnNldDE7CisgICAgaW50IG9mZnNldDI7CisgICAgaW50IGZhY3RvcjsKKyAgICBpbnQgZXhwOworCisgICAgaWYgKHNoaWZ0ID4gMCkKKwlmYWN0b3IgPSBjbGVhbiA8PCBzaGlmdDsKKyAgICBlbHNlCisJZmFjdG9yID0gY2xlYW4gPj4gLXNoaWZ0OworCisgICAgLyogVXBkYXRlIHRoZSBGSVIgdGFwcyAqLworCisgICAgb2Zmc2V0MiA9IGVjLT5jdXJyX3BvczsKKyAgICBvZmZzZXQxID0gZWMtPnRhcHMgLSBvZmZzZXQyOworCisgICAgZm9yIChpID0gZWMtPnRhcHMgLSAxOyAgaSA+PSBvZmZzZXQxOyAgaS0tKQorICAgIHsKKyAgICAgICBleHAgPSAoZWMtPmZpcl9zdGF0ZV9iZy5oaXN0b3J5W2kgLSBvZmZzZXQxXSpmYWN0b3IpOworICAgICAgIGVjLT5maXJfdGFwczE2WzFdW2ldICs9IChpbnQxNl90KSAoKGV4cCsoMTw8MTQpKSA+PiAxNSk7CisgICAgfQorICAgIGZvciAoICA7ICBpID49IDA7ICBpLS0pCisgICAgeworICAgICAgIGV4cCA9IChlYy0+ZmlyX3N0YXRlX2JnLmhpc3RvcnlbaSArIG9mZnNldDJdKmZhY3Rvcik7CisgICAgICAgZWMtPmZpcl90YXBzMTZbMV1baV0gKz0gKGludDE2X3QpICgoZXhwKygxPDwxNCkpID4+IDE1KTsKKyAgICB9Cit9CisjZW5kaWYKKworLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2VjaG9fY2FuX3N0YXRlX3QgKmVjaG9fY2FuX2NyZWF0ZShpbnQgbGVuLCBpbnQgYWRhcHRpb25fbW9kZSkKK3sKKyAgICBlY2hvX2Nhbl9zdGF0ZV90ICplYzsKKyAgICBpbnQgaTsKKyAgICBpbnQgajsKKworICAgIGVjID0ga21hbGxvYyhzaXplb2YoKmVjKSwgR0ZQX0tFUk5FTCk7CisgICAgaWYgKGVjID09IE5VTEwpCisgICAgICAgIHJldHVybiAgTlVMTDsKKyAgICBtZW1zZXQoZWMsIDAsIHNpemVvZigqZWMpKTsKKworICAgIGVjLT50YXBzID0gbGVuOworICAgIGVjLT5sb2cydGFwcyA9IHRvcF9iaXQobGVuKTsKKyAgICBlYy0+Y3Vycl9wb3MgPSBlYy0+dGFwcyAtIDE7CisKKyAgICBmb3IgKGkgPSAwOyAgaSA8IDI7ICBpKyspCisgICAgeworICAgICAgICBpZiAoKGVjLT5maXJfdGFwczE2W2ldID0gKGludDE2X3QgKikgbWFsbG9jKChlYy0+dGFwcykqc2l6ZW9mKGludDE2X3QpKSkgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChqID0gMDsgIGogPCBpOyAgaisrKQorICAgICAgICAgICAgICAgIGtmcmVlKGVjLT5maXJfdGFwczE2W2pdKTsKKyAgICAgICAgICAgIGtmcmVlKGVjKTsKKyAgICAgICAgICAgIHJldHVybiAgTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQoZWMtPmZpcl90YXBzMTZbaV0sIDAsIChlYy0+dGFwcykqc2l6ZW9mKGludDE2X3QpKTsKKyAgICB9CisKKyAgICBmaXIxNl9jcmVhdGUoJmVjLT5maXJfc3RhdGUsCisgICAgICAgICAgICAgICAgIGVjLT5maXJfdGFwczE2WzBdLAorICAgICAgICAgICAgICAgICBlYy0+dGFwcyk7CisgICAgZmlyMTZfY3JlYXRlKCZlYy0+ZmlyX3N0YXRlX2JnLAorICAgICAgICAgICAgICAgICBlYy0+ZmlyX3RhcHMxNlsxXSwKKyAgICAgICAgICAgICAgICAgZWMtPnRhcHMpOworCisgICAgZm9yKGk9MDsgaTw1OyBpKyspIHsKKyAgICAgIGVjLT54dnR4W2ldID0gZWMtPnl2dHhbaV0gPSBlYy0+eHZyeFtpXSA9IGVjLT55dnJ4W2ldID0gMDsKKyAgICB9CisKKyAgICBlYy0+Y25nX2xldmVsID0gMTAwMDsKKyAgICBlY2hvX2Nhbl9hZGFwdGlvbl9tb2RlKGVjLCBhZGFwdGlvbl9tb2RlKTsKKworICAgIGVjLT5zbmFwc2hvdCA9IChpbnQxNl90KiltYWxsb2MoZWMtPnRhcHMqc2l6ZW9mKGludDE2X3QpKTsKKyAgICBtZW1zZXQoZWMtPnNuYXBzaG90LCAwLCBzaXplb2YoaW50MTZfdCkqZWMtPnRhcHMpOworCisgICAgZWMtPmNvbmRfbWV0ID0gMDsKKyAgICBlYy0+UHN0YXRlcyA9IDA7CisgICAgZWMtPkx0eGFjYyA9IGVjLT5McnhhY2MgPSBlYy0+TGNsZWFuYWNjID0gZWMtPkxjbGVhbl9iZ2FjYyA9IDA7CisgICAgZWMtPkx0eCA9IGVjLT5McnggPSBlYy0+TGNsZWFuID0gZWMtPkxjbGVhbl9iZyA9IDA7CisgICAgZWMtPnR4XzEgPSBlYy0+dHhfMiA9IGVjLT5yeF8xID0gZWMtPnJ4XzIgPSAwOworICAgIGVjLT5MYmduID0gZWMtPkxiZ25fYWNjID0gMDsKKyAgICBlYy0+TGJnbl91cHBlciA9IDIwMDsKKyAgICBlYy0+TGJnbl91cHBlcl9hY2MgPSBlYy0+TGJnbl91cHBlciA8PCAxMzsKKworICAgIHJldHVybiAgZWM7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBlY2hvX2Nhbl9mcmVlKGVjaG9fY2FuX3N0YXRlX3QgKmVjKQoreworCWludCBpOworCisJZmlyMTZfZnJlZSgmZWMtPmZpcl9zdGF0ZSk7CisJZmlyMTZfZnJlZSgmZWMtPmZpcl9zdGF0ZV9iZyk7CisJZm9yIChpID0gMDsgIGkgPCAyOyAgaSsrKQorCQlrZnJlZShlYy0+ZmlyX3RhcHMxNltpXSk7CisJa2ZyZWUoZWMtPnNuYXBzaG90KTsKKwlrZnJlZShlYyk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBlY2hvX2Nhbl9hZGFwdGlvbl9tb2RlKGVjaG9fY2FuX3N0YXRlX3QgKmVjLCBpbnQgYWRhcHRpb25fbW9kZSkKK3sKKyAgICBlYy0+YWRhcHRpb25fbW9kZSA9IGFkYXB0aW9uX21vZGU7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBlY2hvX2Nhbl9mbHVzaChlY2hvX2Nhbl9zdGF0ZV90ICplYykKK3sKKyAgICBpbnQgaTsKKworICAgIGVjLT5MdHhhY2MgPSBlYy0+THJ4YWNjID0gZWMtPkxjbGVhbmFjYyA9IGVjLT5MY2xlYW5fYmdhY2MgPSAwOworICAgIGVjLT5MdHggPSBlYy0+THJ4ID0gZWMtPkxjbGVhbiA9IGVjLT5MY2xlYW5fYmcgPSAwOworICAgIGVjLT50eF8xID0gZWMtPnR4XzIgPSBlYy0+cnhfMSA9IGVjLT5yeF8yID0gMDsKKworICAgIGVjLT5MYmduID0gZWMtPkxiZ25fYWNjID0gMDsKKyAgICBlYy0+TGJnbl91cHBlciA9IDIwMDsKKyAgICBlYy0+TGJnbl91cHBlcl9hY2MgPSBlYy0+TGJnbl91cHBlciA8PCAxMzsKKworICAgIGVjLT5ub251cGRhdGVfZHdlbGwgPSAwOworCisgICAgZmlyMTZfZmx1c2goJmVjLT5maXJfc3RhdGUpOworICAgIGZpcjE2X2ZsdXNoKCZlYy0+ZmlyX3N0YXRlX2JnKTsKKyAgICBlYy0+ZmlyX3N0YXRlLmN1cnJfcG9zID0gZWMtPnRhcHMgLSAxOworICAgIGVjLT5maXJfc3RhdGVfYmcuY3Vycl9wb3MgPSBlYy0+dGFwcyAtIDE7CisgICAgZm9yIChpID0gMDsgIGkgPCAyOyAgaSsrKQorICAgICAgICBtZW1zZXQoZWMtPmZpcl90YXBzMTZbaV0sIDAsIGVjLT50YXBzKnNpemVvZihpbnQxNl90KSk7CisKKyAgICBlYy0+Y3Vycl9wb3MgPSBlYy0+dGFwcyAtIDE7CisgICAgZWMtPlBzdGF0ZXMgPSAwOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgZWNob19jYW5fc25hcHNob3QoZWNob19jYW5fc3RhdGVfdCAqZWMpIHsKKyAgICBtZW1jcHkoZWMtPnNuYXBzaG90LCBlYy0+ZmlyX3RhcHMxNlswXSwgZWMtPnRhcHMqc2l6ZW9mKGludDE2X3QpKTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBEdWFsIFBhdGggRWNobyBDYW5jZWxsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50MTZfdCBlY2hvX2Nhbl91cGRhdGUoZWNob19jYW5fc3RhdGVfdCAqZWMsIGludDE2X3QgdHgsIGludDE2X3QgcngpCit7CisgICAgaW50MzJfdCBlY2hvX3ZhbHVlOworICAgIGludCBjbGVhbl9iZzsKKyAgICBpbnQgdG1wLCB0bXAxOworCisgICAgLyogSW5wdXQgc2NhbGluZyB3YXMgZm91bmQgYmUgcmVxdWlyZWQgdG8gcHJldmVudCBwcm9ibGVtcyB3aGVuIHR4CisgICAgICAgc3RhcnRzIGNsaXBwaW5nLiAgQW5vdGhlciBwb3NzaWJsZSB3YXkgdG8gaGFuZGxlIHRoaXMgd291bGQgYmUgdGhlCisgICAgICAgZmlsdGVyIGNvZWZmaWNlbnQgc2NhbGluZy4gKi8KKworICAgIGVjLT50eCA9IHR4OyBlYy0+cnggPSByeDsKKyAgICB0eCA+Pj0xOworICAgIHJ4ID4+PTE7CisKKyAgICAvKgorICAgICAgIEZpbHRlciBEQywgM2RCIHBvaW50IGlzIDE2MEh6IChJIHRoaW5rKSwgbm90ZSAzMiBiaXQgcHJlY2lzaW9uIHJlcXVpcmVkCisgICAgICAgb3RoZXJ3aXNlIHZhbHVlcyBkbyBub3QgdHJhY2sgZG93biB0byAwLiBaZXJvIGF0IERDLCBQb2xlIGF0ICgxLUJldGEpCisgICAgICAgb25seSByZWFsIGF4aXMuICBTb21lIGNoaXAgc2V0cyAobGlrZSBTaSBsYWJzKSBkb24ndCBuZWVkCisgICAgICAgdGhpcywgYnV0IHNvbWV0aGluZyBsaWtlIGEgJDEwIFgxMDBQIGNhcmQgZG9lcy4gIEFueSBEQyByZWFsbHkgc2xvd3MKKyAgICAgICBkb3duIGNvbnZlcmdlbmNlLgorCisgICAgICAgTm90ZTogcmVtb3ZlcyBzb21lIGxvdyBmcmVxdWVuY3kgZnJvbSB0aGUgc2lnbmFsLCB0aGlzIHJlZHVjZXMKKyAgICAgICB0aGUgc3BlZWNoIHF1YWxpdHkgd2hlbiBsaXN0ZW5pbmcgdG8gc2FtcGxlcyB0aHJvdWdoIGhlYWRwaG9uZXMKKyAgICAgICBidXQgbWF5IG5vdCBiZSBvYnZpb3VzIHRocm91Z2ggYSB0ZWxlcGhvbmUgaGFuZHNldC4KKworICAgICAgIE5vdGUgdGhhdCB0aGUgM2RCIGZyZXF1ZW5jeSBpbiByYWRpYW5zIGlzIGFwcHJveCBCZXRhLCBlLmcuIGZvcgorICAgICAgIEJldGEgPSAyXigtMykgPSAwLjEyNSwgM2RCIGZyZXEgaXMgMC4xMjUgcmFkcyA9IDE1OUh6LgorICAgICovCisKKyAgICBpZiAoZWMtPmFkYXB0aW9uX21vZGUgJiBFQ0hPX0NBTl9VU0VfUlhfSFBGKSB7CisgICAgICB0bXAgPSByeCA8PCAxNTsKKyNpZiAxCisgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgZ2FpbiBvZiB0aGUgSFBGIGlzIDEuMC4gVGhpcyBjYW4gc3RpbGwgc2F0dXJhdGUgYSBsaXR0bGUgdW5kZXIKKyAgICAgICAgICAgaW1wdWxzZSBjb25kaXRpb25zLCBhbmQgaXQgbWlnaHQgcm9sbCB0byAzMjc2OCBhbmQgbmVlZCBjbGlwcGluZyBvbiBzdXN0YWluZWQgcGVhaworICAgICAgICAgICBsZXZlbCBzaWduYWxzLiBIb3dldmVyLCB0aGUgc2NhbGUgb2Ygc3VjaCBjbGlwcGluZyBpcyBzbWFsbCwgYW5kIHRoZSBlcnJvciBkdWUgdG8KKyAgICAgICAgICAgYW55IHNhdHVyYXRpb24gc2hvdWxkIG5vdCBtYXJrZWRseSBhZmZlY3QgdGhlIGRvd25zdHJlYW0gcHJvY2Vzc2luZy4gKi8KKyAgICAgICAgdG1wIC09ICh0bXAgPj4gNCk7CisjZW5kaWYKKyAgICAgIGVjLT5yeF8xICs9IC0oZWMtPnJ4XzE+PkRDX0xPRzJCRVRBKSArIHRtcCAtIGVjLT5yeF8yOworCisgICAgICAvKiBoYXJkIGxpbWl0IGZpbHRlciB0byBwcmV2ZW50IGNsaXBwaW5nLiAgTm90ZSB0aGF0IGF0IHRoaXMgc3RhZ2UKKwkgcnggc2hvdWxkIGJlIGxpbWl0ZWQgdG8gKy8tIDE2MzgzIGR1ZSB0byByaWdodCBzaGlmdCBhYm92ZSAqLworICAgICAgdG1wMSA9IGVjLT5yeF8xID4+IDE1OworICAgICAgaWYgKHRtcDEgPiAxNjM4MykgdG1wMSA9IDE2MzgzOworICAgICAgaWYgKHRtcDEgPCAtMTYzODMpIHRtcDEgPSAtMTYzODM7CisgICAgICByeCA9IHRtcDE7CisgICAgICBlYy0+cnhfMiA9IHRtcDsKKyAgICB9CisKKyAgICAvKiBCbG9jayBhdmVyYWdlIG9mIHBvd2VyIGluIHRoZSBmaWx0ZXIgc3RhdGVzLiAgVXNlZCBmb3IKKyAgICAgICBhZGFwdGlvbiBwb3dlciBjYWxjdWxhdGlvbi4gKi8KKworICAgIHsKKwlpbnQgbmV3LCBvbGQ7CisKKwkvKiBlZmZpY2llbnQgIm91dCB3aXRoIHRoZSBvbGQgYW5kIGluIHdpdGggdGhlIG5ldyIgYWxnb3JpdGhtIHNvCisJICAgd2UgZG9uJ3QgaGF2ZSB0byByZWNhbGN1bGF0ZSBvdmVyIHRoZSB3aG9sZSBibG9jayBvZgorCSAgIHNhbXBsZXMuICovCisJbmV3ID0gKGludCl0eCAqIChpbnQpdHg7CisJb2xkID0gKGludCllYy0+ZmlyX3N0YXRlLmhpc3RvcnlbZWMtPmZpcl9zdGF0ZS5jdXJyX3Bvc10gKgorICAgICAgICAgICAgICAoaW50KWVjLT5maXJfc3RhdGUuaGlzdG9yeVtlYy0+ZmlyX3N0YXRlLmN1cnJfcG9zXTsKKwllYy0+UHN0YXRlcyArPSAoKG5ldyAtIG9sZCkgKyAoMTw8ZWMtPmxvZzJ0YXBzKSkgPj4gZWMtPmxvZzJ0YXBzOworCWlmIChlYy0+UHN0YXRlcyA8IDApIGVjLT5Qc3RhdGVzID0gMDsKKyAgICB9CisKKyAgICAvKiBDYWxjdWxhdGUgc2hvcnQgdGVybSBhdmVyYWdlIGxldmVscyB1c2luZyBzaW1wbGUgc2luZ2xlIHBvbGUgSUlScyAqLworCisgICAgZWMtPkx0eGFjYyArPSBhYnModHgpIC0gZWMtPkx0eDsKKyAgICBlYy0+THR4ID0gKGVjLT5MdHhhY2MgKyAoMTw8NCkpID4+IDU7CisgICAgZWMtPkxyeGFjYyArPSBhYnMocngpIC0gZWMtPkxyeDsKKyAgICBlYy0+THJ4ID0gKGVjLT5McnhhY2MgKyAoMTw8NCkpID4+IDU7CisKKyAgICAvKiBGb3JlZ3JvdW5kIGZpbHRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgICAgZWMtPmZpcl9zdGF0ZS5jb2VmZnMgPSBlYy0+ZmlyX3RhcHMxNlswXTsKKyAgICBlY2hvX3ZhbHVlID0gZmlyMTYoJmVjLT5maXJfc3RhdGUsIHR4KTsKKyAgICBlYy0+Y2xlYW4gPSByeCAtIGVjaG9fdmFsdWU7CisgICAgZWMtPkxjbGVhbmFjYyArPSBhYnMoZWMtPmNsZWFuKSAtIGVjLT5MY2xlYW47CisgICAgZWMtPkxjbGVhbiA9IChlYy0+TGNsZWFuYWNjICsgKDE8PDQpKSA+PiA1OworCisgICAgLyogQmFja2dyb3VuZCBmaWx0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIGVjaG9fdmFsdWUgPSBmaXIxNigmZWMtPmZpcl9zdGF0ZV9iZywgdHgpOworICAgIGNsZWFuX2JnID0gcnggLSBlY2hvX3ZhbHVlOworICAgIGVjLT5MY2xlYW5fYmdhY2MgKz0gYWJzKGNsZWFuX2JnKSAtIGVjLT5MY2xlYW5fYmc7CisgICAgZWMtPkxjbGVhbl9iZyA9IChlYy0+TGNsZWFuX2JnYWNjICsgKDE8PDQpKSA+PiA1OworCisgICAgLyogQmFja2dyb3VuZCBGaWx0ZXIgYWRhcHRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgICAgLyogQWxtb3N0IGFsd2F5cyBhZGFwIGJnIGZpbHRlciwganVzdCBzaW1wbGUgRFQgYW5kIGVuZXJneQorICAgICAgIGRldGVjdGlvbiB0byBtaW5pbWlzZSBhZGFwdGlvbiBpbiBjYXNlcyBvZiBzdHJvbmcgZG91YmxlIHRhbGsuCisgICAgICAgSG93ZXZlciB0aGlzIGlzIG5vdCBjcml0aWNhbCBmb3IgdGhlIGR1YWwgcGF0aCBhbGdvcml0aG0uCisgICAgKi8KKyAgICBlYy0+ZmFjdG9yID0gMDsKKyAgICBlYy0+c2hpZnQgPSAwOworICAgIGlmICgoZWMtPm5vbnVwZGF0ZV9kd2VsbCA9PSAwKSkgeworCWludCAgIFAsIGxvZ1AsIHNoaWZ0OworCisJLyogRGV0ZXJtaW5lOgorCisJICAgZiA9IEJldGEgKiBjbGVhbl9iZ19yeC9QIC0tLS0tLSAoMSkKKworCSAgIHdoZXJlIFAgaXMgdGhlIHRvdGFsIHBvd2VyIGluIHRoZSBmaWx0ZXIgc3RhdGVzLgorCisJICAgVGhlIEJvZmZpbnMgaGF2ZSBzaG93biB0aGF0IGlmIHdlIG9iZXkgKDEpIHdlIGNvbnZlcmdlCisJICAgcXVpY2tseSBhbmQgYXZvaWQgaW5zdGFiaWxpdHkuCisKKwkgICBUaGUgY29ycmVjdCBmYWN0b3IgZiBtdXN0IGJlIGluIFEzMCwgYXMgdGhpcyBpcyB0aGUgZml4ZWQKKwkgICBwb2ludCBmb3JtYXQgcmVxdWlyZWQgYnkgdGhlIGxtc19hZGFwdF9iZygpIGZ1bmN0aW9uLAorCSAgIHRoZXJlZm9yZSB0aGUgc2NhbGVkIHZlcnNpb24gb2YgKDEpIGlzOgorCisJICAgKDJeMzApICogZiAgPSAoMl4zMCkgKiBCZXRhICogY2xlYW5fYmdfcngvUAorCSAgICAgICBmYWN0b3IgID0gKDJeMzApICogQmV0YSAqIGNsZWFuX2JnX3J4L1AgICAgICAgICAtLS0tLSAoMikKKworCSAgIFdlIGhhdmUgY2hvc2VuIEJldGEgPSAwLjI1IGJ5IGV4cGVyaW1lbnQsIHNvOgorCisJICAgICAgIGZhY3RvciAgPSAoMl4zMCkgKiAoMl4tMikgKiBjbGVhbl9iZ19yeC9QCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMCAtIDIgLSBsb2cyKFApKQorCSAgICAgICBmYWN0b3IgID0gY2xlYW5fYmdfcnggMiAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLSAoMykKKworCSAgIFRvIGF2b2lkIGEgZGl2aWRlIHdlIGFwcHJveGltYXRlIGxvZzIoUCkgYXMgdG9wX2JpdChQKSwKKwkgICB3aGljaCByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgaGlnaGVzdCBub24temVybyBiaXQgaW4KKwkgICBQLiAgVGhpcyBhcHByb3hpbWF0aW9uIGludHJvZHVjZXMgYW4gZXJyb3IgYXMgbGFyZ2UgYXMgYQorCSAgIGZhY3RvciBvZiAyLCBidXQgdGhlIGFsZ29yaXRobSBzZWVtcyB0byBoYW5kbGUgaXQgT0suCisKKwkgICBDb21lIHRvIHRoaW5rIG9mIGl0IGEgZGl2aWRlIG1heSBub3QgYmUgYSBiaWcgZGVhbCBvbiBhCisJICAgbW9kZXJuIERTUCwgc28gaXRzIHByb2JhYmx5IHdvcnRoIGNoZWNraW5nIG91dCB0aGUgY3ljbGVzCisJICAgZm9yIGEgZGl2aWRlIHZlcnN1cyBhIHRvcF9iaXQoKSBpbXBsZW1lbnRhdGlvbi4KKwkqLworCisJUCA9IE1JTl9UWF9QT1dFUl9GT1JfQURBUFRJT04gKyBlYy0+UHN0YXRlczsKKwlsb2dQID0gdG9wX2JpdChQKSArIGVjLT5sb2cydGFwczsKKwlzaGlmdCA9IDMwIC0gMiAtIGxvZ1A7CisJZWMtPnNoaWZ0ID0gc2hpZnQ7CisKKwlsbXNfYWRhcHRfYmcoZWMsIGNsZWFuX2JnLCBzaGlmdCk7CisgICAgfQorCisgICAgLyogdmVyeSBzaW1wbGUgRFREIHRvIG1ha2Ugc3VyZSB3ZSBkb250IHRyeSBhbmQgYWRhcHQgd2l0aCBzdHJvbmcKKyAgICAgICBuZWFyIGVuZCBzcGVlY2ggKi8KKworICAgIGVjLT5hZGFwdCA9IDA7CisgICAgaWYgKChlYy0+THJ4ID4gTUlOX1JYX1BPV0VSX0ZPUl9BREFQVElPTikgJiYgKGVjLT5McnggPiBlYy0+THR4KSkKKwllYy0+bm9udXBkYXRlX2R3ZWxsID0gRFREX0hBTkdPVkVSOworICAgIGlmIChlYy0+bm9udXBkYXRlX2R3ZWxsKQorCWVjLT5ub251cGRhdGVfZHdlbGwtLTsKKworICAgIC8qIFRyYW5zZmVyIGxvZ2ljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICAvKiBUaGVzZSBjb25kaXRpb25zIGFyZSBmcm9tIHRoZSBkdWFsIHBhdGggcGFwZXIgWzFdLCBJIG1lc3NlZCB3aXRoCisgICAgICAgdGhlbSBhIGJpdCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLiAqLworCisgICAgaWYgKChlYy0+YWRhcHRpb25fbW9kZSAmIEVDSE9fQ0FOX1VTRV9BREFQVElPTikgJiYKKwkoZWMtPm5vbnVwZGF0ZV9kd2VsbCA9PSAwKSAmJgorCSg4KmVjLT5MY2xlYW5fYmcgPCA3KmVjLT5MY2xlYW4pIC8qIChlYy0+TGNsZWFuX2JnIDwgMC44NzUqZWMtPkxjbGVhbikgKi8gJiYKKwkoOCplYy0+TGNsZWFuX2JnIDwgZWMtPkx0eCkgICAgICAvKiAoZWMtPkxjbGVhbl9iZyA8IDAuMTI1KmVjLT5MdHgpICAgICovICkKKyAgICB7CisJaWYgKGVjLT5jb25kX21ldCA9PSA2KSB7CisJICAgIC8qIEJHIGZpbHRlciBoYXMgaGFkIGJldHRlciByZXN1bHRzIGZvciA2IGNvbnNlY3V0aXZlIHNhbXBsZXMgKi8KKwkgICAgZWMtPmFkYXB0ID0gMTsKKwkgICAgbWVtY3B5KGVjLT5maXJfdGFwczE2WzBdLCBlYy0+ZmlyX3RhcHMxNlsxXSwgZWMtPnRhcHMqc2l6ZW9mKGludDE2X3QpKTsKKwl9CisJZWxzZQorCSAgICBlYy0+Y29uZF9tZXQrKzsKKyAgICB9CisgICAgZWxzZQorCWVjLT5jb25kX21ldCA9IDA7CisKKyAgICAvKiBOb24tTGluZWFyIFByb2Nlc3NpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIGVjLT5jbGVhbl9ubHAgPSBlYy0+Y2xlYW47CisgICAgaWYgKGVjLT5hZGFwdGlvbl9tb2RlICYgRUNIT19DQU5fVVNFX05MUCkKKyAgICB7CisgICAgICAgIC8qIE5vbi1saW5lYXIgcHJvY2Vzc29yIC0gYSBmYW5jeSB3YXkgdG8gc2F5ICJ6YXAgc21hbGwgc2lnbmFscywgdG8gYXZvaWQKKyAgICAgICAgICAgcmVzaWR1YWwgZWNobyBkdWUgdG8gKHVMYXcvQUxhdykgbm9uLWxpbmVhcml0eSBpbiB0aGUgY2hhbm5lbC4iLiAqLworCisgICAgICBpZiAoKDE2KmVjLT5MY2xlYW4gPCBlYy0+THR4KSkKKyAgICAgIHsKKwkvKiBPdXIgZS9jIGhhcyBpbXByb3ZlZCBlY2hvIGJ5IGF0IGxlYXN0IDI0IGRCIChlYWNoIGZhY3RvciBvZiAyIGlzIDZkQiwKKwkgICBzbyAyKjIqMioyPTE2IGlzIHRoZSBzYW1lIGFzIDYrNis2KzY9MjRkQikgKi8KKyAgICAgICAgaWYgKGVjLT5hZGFwdGlvbl9tb2RlICYgRUNIT19DQU5fVVNFX0NORykKKwl7CisJICAgIGVjLT5jbmdfbGV2ZWwgPSBlYy0+TGJnbjsKKworCSAgICAvKiBWZXJ5IGVsZW1lbnRhcnkgY29tZm9ydCBub2lzZSBnZW5lcmF0aW9uLiAgSnVzdCByYW5kb20KKwkgICAgICAgbnVtYmVycyByb2xsZWQgb2ZmIHZlcnkgdmFndWVseSBIb3RoLWxpa2UuICBEUjogVGhpcworCSAgICAgICBub2lzZSBkb2Vzbid0IHNvdW5kIHF1aXRlIHJpZ2h0IHRvIG1lIC0gSSBzdXNwZWN0IHRoZXJlCisJICAgICAgIGFyZSBzb21lIG92ZXJsZm93IGlzc3VlcyBpbiB0aGUgZmlsdGVyaW5nIGFzIGl0J3MgdG9vCisJICAgICAgICJjcmFja2x5Ii4gIFRPRE86IGRlYnVnIHRoaXMsIG1heWJlIGp1c3QgcGxheSBub2lzZSBhdAorCSAgICAgICBoaWdoIGxldmVsIG9yIGxvb2sgYXQgc3BlY3RydW0uCisJICAgICovCisKKwkgICAgZWMtPmNuZ19ybmRudW0gPSAxNjY0NTI1VSplYy0+Y25nX3JuZG51bSArIDEwMTM5MDQyMjNVOworCSAgICBlYy0+Y25nX2ZpbHRlciA9ICgoZWMtPmNuZ19ybmRudW0gJiAweEZGRkYpIC0gMzI3NjggKyA1KmVjLT5jbmdfZmlsdGVyKSA+PiAzOworCSAgICBlYy0+Y2xlYW5fbmxwID0gKGVjLT5jbmdfZmlsdGVyKmVjLT5jbmdfbGV2ZWwqOCkgPj4gMTQ7CisKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChlYy0+YWRhcHRpb25fbW9kZSAmIEVDSE9fQ0FOX1VTRV9DTElQKQorCXsKKwkgICAgLyogVGhpcyBzb3VuZHMgbXVjaCBiZXR0ZXIgdGhhbiBDTkcgKi8KKwkgICAgaWYgKGVjLT5jbGVhbl9ubHAgPiBlYy0+TGJnbikKKwkgICAgICBlYy0+Y2xlYW5fbmxwID0gZWMtPkxiZ247CisJICAgIGlmIChlYy0+Y2xlYW5fbmxwIDwgLWVjLT5MYmduKQorCSAgICAgIGVjLT5jbGVhbl9ubHAgPSAtZWMtPkxiZ247CisJfQorCWVsc2UKKyAgICAgICAgeworCSAgLyoganVzdCBtdXRlIHRoZSByZXNpZHVhbCwgZG9lc24ndCBzb3VuZCB2ZXJ5IGdvb2QsIHVzZWQgbWFpbmx5CisJICAgICBpbiBHMTY4IHRlc3RzICovCisgICAgICAgICAgZWMtPmNsZWFuX25scCA9IDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgeworCSAgLyogQmFja2dyb3VuZCBub2lzZSBlc3RpbWF0b3IuICBJIHRyaWVkIGEgZmV3IGFsZ29yaXRobXMKKwkgICAgIGhlcmUgd2l0aG91dCBtdWNoIGx1Y2suICBUaGlzIHZlcnkgc2ltcGxlIG9uZSBzZWVtcyB0bworCSAgICAgd29yayBiZXN0LCB3ZSBqdXN0IGF2ZXJhZ2UgdGhlIGxldmVsIHVzaW5nIGEgc2xvdyAoMSBzZWMKKwkgICAgIHRpbWUgY29uc3QpIGZpbHRlciBpZiB0aGUgY3VycmVudCBsZXZlbCBpcyBsZXNzIHRoYW4gYQorCSAgICAgKGV4cGVyaW1lbnRhbGx5IGRlcml2ZWQpIGNvbnN0YW50LiAgVGhpcyBtZWFucyB3ZSBkb250CisJICAgICBpbmNsdWRlIGhpZ2ggbGV2ZWwgc2lnbmFscyBsaWtlIG5lYXIgZW5kIHNwZWVjaC4gIFdoZW4KKwkgICAgIGNvbWJpbmVkIHdpdGggQ05HIG9yIGVzcGVjaWFsbHkgQ0xJUCBzZWVtcyB0byB3b3JrIE9LLgorCSAgKi8KKwkgIGlmIChlYy0+TGNsZWFuIDwgNDApIHsKKwkgICAgICBlYy0+TGJnbl9hY2MgKz0gYWJzKGVjLT5jbGVhbikgLSBlYy0+TGJnbjsKKwkgICAgICBlYy0+TGJnbiA9IChlYy0+TGJnbl9hY2MgKyAoMTw8MTEpKSA+PiAxMjsKKwkgIH0KKyAgICAgICB9CisgICAgfQorCisgICAgLyogUm9sbCBhcm91bmQgdGhlIHRhcHMgYnVmZmVyICovCisgICAgaWYgKGVjLT5jdXJyX3BvcyA8PSAwKQorICAgICAgICBlYy0+Y3Vycl9wb3MgPSBlYy0+dGFwczsKKyAgICBlYy0+Y3Vycl9wb3MtLTsKKworICAgIGlmIChlYy0+YWRhcHRpb25fbW9kZSAmIEVDSE9fQ0FOX0RJU0FCTEUpCisgICAgICBlYy0+Y2xlYW5fbmxwID0gcng7CisKKyAgICAvKiBPdXRwdXQgc2NhbGVkIGJhY2sgdXAgYWdhaW4gdG8gbWF0Y2ggaW5wdXQgc2NhbGluZyAqLworCisgICAgcmV0dXJuIChpbnQxNl90KSBlYy0+Y2xlYW5fbmxwIDw8IDE7Cit9CisKKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHNlcGVyYXRlZCBmcm9tIHRoZSBlY2hvIGNhbmNlbGxlciBpcyBpdCBpcyB1c3VhbGx5IGNhbGxlZAorICAgYXMgcGFydCBvZiB0aGUgdHggcHJvY2Vzcy4gIFNlZSByeCBIUCAoREMgYmxvY2tpbmcpIGZpbHRlciBhYm92ZSwgaXQncworICAgdGhlIHNhbWUgZGVzaWduLgorCisgICBTb21lIHNvZnQgcGhvbmVzIHNlbmQgc3BlZWNoIHNpZ25hbHMgd2l0aCBhIGxvdCBvZiBsb3cgZnJlcXVlbmN5CisgICBlbmVyZ3ksIGUuZy4gZG93biB0byAyMEh6LiAgVGhpcyBjYW4gbWFrZSB0aGUgaHlicmlkIG5vbi1saW5lYXIKKyAgIHdoaWNoIGNhdXNlcyB0aGUgZWNobyBjYW5jZWxsZXIgdG8gZmFsbCBvdmVyLiAgVGhpcyBmaWx0ZXIgY2FuIGhlbHAKKyAgIGJ5IHJlbW92aW5nIGFueSBsb3cgZnJlcXVlbmN5IGJlZm9yZSBpdCBnZXRzIHRvIHRoZSB0eCBwb3J0IG9mIHRoZQorICAgaHlicmlkLgorCisgICBJdCBjYW4gYWxzbyBoZWxwIGJ5IHJlbW92aW5nIGFuZCBEQyBpbiB0aGUgdHggc2lnbmFsLiAgREMgaXMgYmFkCisgICBmb3IgTE1TIGFsZ29yaXRobXMuCisKKyAgIFRoaXMgaXMgb25lIG9mIHRoZSBjbGFzc2ljIERDIHJlbW92YWwgZmlsdGVycywgYWRqdXN0ZWQgdG8gcHJvdmlkZSBzdWZmaWNpZW50CisgICBiYXNzIHJvbGxvZmYgdG8gbWVldCB0aGUgYWJvdmUgcmVxdWlyZW1lbnQgdG8gcHJvdGVjdCBoeWJyaWRzIGZyb20gdGhpbmdzIHRoYXQKKyAgIHVwc2V0IHRoZW0uIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc3VjY2Vzc2l2ZSBzYW1wbGVzIHByb2R1Y2VzIGEgbG91c3kgSFBGLCBhbmQKKyAgIHRoZW4gYSBzdWl0YWJseSBwbGFjZWQgcG9sZSBmbGF0dGVucyB0aGluZ3Mgb3V0LiBUaGUgZmluYWwgcmVzdWx0IGlzIGEgbmljZWx5CisgICByb2xsZWQgb2ZmIGJhc3MgZW5kLiBUaGUgZmlsdGVyaW5nIGlzIGltcGxlbWVudGVkIHdpdGggZXh0ZW5kZWQgZnJhY3Rpb25hbAorICAgcHJlY2lzaW9uLCB3aGljaCBub2lzZSBzaGFwZXMgdGhpbmdzLCBnaXZpbmcgdmVyeSBjbGVhbiBEQyByZW1vdmFsLgorKi8KKworaW50MTZfdCBlY2hvX2Nhbl9ocGZfdHgoZWNob19jYW5fc3RhdGVfdCAqZWMsIGludDE2X3QgdHgpIHsKKyAgICBpbnQgdG1wLCB0bXAxOworCisgICAgaWYgKGVjLT5hZGFwdGlvbl9tb2RlICYgRUNIT19DQU5fVVNFX1RYX0hQRikgeworICAgICAgICB0bXAgPSB0eCA8PCAxNTsKKyNpZiAxCisgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgZ2FpbiBvZiB0aGUgSFBGIGlzIDEuMC4gVGhlIGZpcnN0IGNhbiBzdGlsbCBzYXR1cmF0ZSBhIGxpdHRsZSB1bmRlcgorICAgICAgICAgICBpbXB1bHNlIGNvbmRpdGlvbnMsIGFuZCBpdCBtaWdodCByb2xsIHRvIDMyNzY4IGFuZCBuZWVkIGNsaXBwaW5nIG9uIHN1c3RhaW5lZCBwZWFrCisgICAgICAgICAgIGxldmVsIHNpZ25hbHMuIEhvd2V2ZXIsIHRoZSBzY2FsZSBvZiBzdWNoIGNsaXBwaW5nIGlzIHNtYWxsLCBhbmQgdGhlIGVycm9yIGR1ZSB0bworICAgICAgICAgICBhbnkgc2F0dXJhdGlvbiBzaG91bGQgbm90IG1hcmtlZGx5IGFmZmVjdCB0aGUgZG93bnN0cmVhbSBwcm9jZXNzaW5nLiAqLworICAgICAgICB0bXAgLT0gKHRtcCA+PiA0KTsKKyNlbmRpZgorICAgICAgICBlYy0+dHhfMSArPSAtKGVjLT50eF8xPj5EQ19MT0cyQkVUQSkgKyB0bXAgLSBlYy0+dHhfMjsKKyAgICAgICAgdG1wMSA9IGVjLT50eF8xID4+IDE1OworCWlmICh0bXAxID4gMzI3NjcpIHRtcDEgPSAzMjc2NzsKKwlpZiAodG1wMSA8IC0zMjc2NykgdG1wMSA9IC0zMjc2NzsKKwl0eCA9IHRtcDE7CisgICAgICAgIGVjLT50eF8yID0gdG1wOworICAgIH0KKworICAgIHJldHVybiB0eDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uaCBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTkxYjQzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uaApAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIFNwYW5EU1AgLSBhIHNlcmllcyBvZiBEU1AgY29tcG9uZW50cyBmb3IgdGVsZXBob255CisgKgorICogZWNoby5jIC0gQSBsaW5lIGVjaG8gY2FuY2VsbGVyLiAgVGhpcyBjb2RlIGlzIGJlaW5nIGRldmVsb3BlZAorICogICAgICAgICAgYWdhaW5zdCBhbmQgcGFydGlhbGx5IGNvbXBsaWVzIHdpdGggRzE2OC4KKyAqCisgKiBXcml0dGVuIGJ5IFN0ZXZlIFVuZGVyd29vZCA8c3RldmV1QGNvcHBpY2Uub3JnPgorICogICAgICAgICBhbmQgRGF2aWQgUm93ZSA8ZGF2aWRfYXRfcm93ZXRlbF9kb3RfY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBTdGV2ZSBVbmRlcndvb2QgYW5kIDIwMDcgRGF2aWQgUm93ZQorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICRJZDogZWNoby5oLHYgMS45IDIwMDYvMTAvMjQgMTM6NDU6Mjggc3RldmV1IEV4cCAkCisgKi8KKworI2lmbmRlZiBfX0VDSE9fSAorI2RlZmluZSBfX0VDSE9fSAorCisvKiEgXHBhZ2UgZWNob19jYW5fcGFnZSBMaW5lIGVjaG8gY2FuY2VsbGF0aW9uIGZvciB2b2ljZQorCitcc2VjdGlvbiBlY2hvX2Nhbl9wYWdlX3NlY18xIFdoYXQgZG9lcyBpdCBkbz8KK1RoaXMgbW9kdWxlIGFpbXMgdG8gcHJvdmlkZSBHLjE2OC0yMDAyIGNvbXBsaWFudCBlY2hvIGNhbmNlbGxhdGlvbiwgdG8gcmVtb3ZlCitlbGVjdHJpY2FsIGVjaG9lcyAoZS5nLiBmcm9tIDItNCB3aXJlIGh5YnJpZHMpIGZyb20gdm9pY2UgY2FsbHMuCisKK1xzZWN0aW9uIGVjaG9fY2FuX3BhZ2Vfc2VjXzIgSG93IGRvZXMgaXQgd29yaz8KK1RoZSBoZWFydCBvZiB0aGUgZWNobyBjYW5jZWxsb3IgaXMgRklSIGZpbHRlci4gVGhpcyBpcyBhZGFwdGVkIHRvIG1hdGNoIHRoZQorZWNobyBpbXB1bHNlIHJlc3BvbnNlIG9mIHRoZSB0ZWxlcGhvbmUgbGluZS4gSXQgbXVzdCBiZSBsb25nIGVub3VnaCB0bworYWRlcXVhdGVseSBjb3ZlciB0aGUgZHVyYXRpb24gb2YgdGhhdCBpbXB1bHNlIHJlc3BvbnNlLiBUaGUgc2lnbmFsIHRyYW5zbWl0dGVkCit0byB0aGUgdGVsZXBob25lIGxpbmUgaXMgcGFzc2VkIHRocm91Z2ggdGhlIEZJUiBmaWx0ZXIuIE9uY2UgdGhlIEZJUiBpcworcHJvcGVybHkgYWRhcHRlZCwgdGhlIHJlc3VsdGluZyBvdXRwdXQgaXMgYW4gZXN0aW1hdGUgb2YgdGhlIGVjaG8gc2lnbmFsCityZWNlaXZlZCBmcm9tIHRoZSBsaW5lLiBUaGlzIGlzIHN1YnRyYWN0ZWQgZnJvbSB0aGUgcmVjZWl2ZWQgc2lnbmFsLiBUaGUgcmVzdWx0CitpcyBhbiBlc3RpbWF0ZSBvZiB0aGUgc2lnbmFsIHdoaWNoIG9yaWdpbmF0ZWQgYXQgdGhlIGZhciBlbmQgb2YgdGhlIGxpbmUsIGZyZWUKK2Zyb20gZWNob3Mgb2Ygb3VyIG93biB0cmFuc21pdHRlZCBzaWduYWwuCisKK1RoZSBsZWFzdCBtZWFuIHNxdWFyZXMgKExNUykgYWxnb3JpdGhtIGlzIGF0dHJpYnV0ZWQgdG8gV2lkcm93IGFuZCBIb2ZmLCBhbmQKK3dhcyBpbnRyb2R1Y2VkIGluIDE5NjAuIEl0IGlzIHRoZSBjb21tb25lc3QgZm9ybSBvZiBmaWx0ZXIgYWRhcHRpb24gdXNlZCBpbgordGhpbmdzIGxpa2UgbW9kZW0gbGluZSBlcXVhbGlzZXJzIGFuZCBsaW5lIGVjaG8gY2FuY2VsbGVycy4gVGhlcmUgaXQgd29ya3MgdmVyeQord2VsbC4gIEhvd2V2ZXIsIGl0IG9ubHkgd29ya3Mgd2VsbCBmb3Igc2lnbmFscyBvZiBjb25zdGFudCBhbXBsaXR1ZGUuIEl0IHdvcmtzCit2ZXJ5IHBvb3JseSBmb3IgdGhpbmdzIGxpa2Ugc3BlZWNoIGVjaG8gY2FuY2VsbGF0aW9uLCB3aGVyZSB0aGUgc2lnbmFsIGxldmVsCit2YXJpZXMgd2lkZWx5LiAgVGhpcyBpcyBxdWl0ZSBlYXN5IHRvIGZpeC4gSWYgdGhlIHNpZ25hbCBsZXZlbCBpcyBub3JtYWxpc2VkIC0KK3NpbWlsYXIgdG8gYXBwbHlpbmcgQUdDIC0gTE1TIGNhbiB3b3JrIGFzIHdlbGwgZm9yIGEgc2lnbmFsIG9mIHZhcnlpbmcKK2FtcGxpdHVkZSBhcyBpdCBkb2VzIGZvciBhIG1vZGVtIHNpZ25hbC4gVGhpcyBub3JtYWxpc2VkIGxlYXN0IG1lYW4gc3F1YXJlcworKE5MTVMpIGFsZ29yaXRobSBpcyB0aGUgY29tbW9uZXN0IG9uZSB1c2VkIGZvciBzcGVlY2ggZWNobyBjYW5jZWxsYXRpb24uIE1hbnkKK290aGVyIGFsZ29yaXRobXMgZXhpc3QgLSBlLmcuIFJMUyAoZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgS2FsbWFuIGZpbHRlcmluZyksCitGQVAsIGV0Yy4gU29tZSBwZXJmb3JtIHNpZ25pZmljYW50bHkgYmV0dGVyIHRoYW4gTkxNUy4gIEhvd2V2ZXIsIGZhY3RvcnMgc3VjaAorYXMgY29tcHV0YXRpb25hbCBjb21wbGV4aXR5IGFuZCBwYXRlbnRzIGZhdm91ciB0aGUgdXNlIG9mIE5MTVMuCisKK0Egc2ltcGxlIHJlZmluZW1lbnQgdG8gTkxNUyBjYW4gaW1wcm92ZSBpdHMgcGVyZm9ybWFuY2Ugd2l0aCBzcGVlY2guIE5MTVMgdGVuZHMKK3RvIGFkYXB0IGJlc3QgdG8gdGhlIHN0cm9uZ2VzdCBwYXJ0cyBvZiBhIHNpZ25hbC4gSWYgdGhlIHNpZ25hbCBpcyB3aGl0ZSBub2lzZSwKK3RoZSBOTE1TIGFsZ29yaXRobSB3b3JrcyB2ZXJ5IHdlbGwuIEhvd2V2ZXIsIHNwZWVjaCBoYXMgbW9yZSBsb3cgZnJlcXVlbmN5IHRoYW4KK2hpZ2ggZnJlcXVlbmN5IGNvbnRlbnQuIFByZS13aGl0ZW5pbmcgKGkuZS4gZmlsdGVyaW5nIHRoZSBzaWduYWwgdG8gZmxhdHRlbiBpdHMKK3NwZWN0cnVtKSB0aGUgZWNobyBzaWduYWwgaW1wcm92ZXMgdGhlIGFkYXB0IHJhdGUgZm9yIHNwZWVjaCwgYW5kIGVuc3VyZXMgdGhlCitmaW5hbCByZXNpZHVhbCBzaWduYWwgaXMgbm90IGhlYXZpbHkgYmlhc2VkIHRvd2FyZHMgaGlnaCBmcmVxdWVuY2llcy4gQSB2ZXJ5Citsb3cgY29tcGxleGl0eSBmaWx0ZXIgaXMgYWRlcXVhdGUgZm9yIHRoaXMsIHNvIHByZS13aGl0ZW5pbmcgYWRkcyBsaXR0bGUgdG8gdGhlCitjb21wdXRlIHJlcXVpcmVtZW50cyBvZiB0aGUgZWNobyBjYW5jZWxsZXIuCisKK0FuIEZJUiBmaWx0ZXIgYWRhcHRlZCB1c2luZyBwcmUtd2hpdGVuZWQgTkxNUyBwZXJmb3JtcyB3ZWxsLCBwcm92aWRlZCBjZXJ0YWluCitjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAtIFRoZSB0cmFuc21pdHRlZCBzaWduYWwgaGFzIHBvb3Igc2VsZi1jb3JyZWxhdGlvbi4KKyAgICAtIFRoZXJlIGlzIG5vIHNpZ25hbCBiZWluZyBnZW5lcmF0ZWQgd2l0aGluIHRoZSBlbnZpcm9ubWVudCBiZWluZworICAgICAgY2FuY2VsbGVkLgorCitUaGUgZGlmZmljdWx0eSBpcyB0aGF0IG5laXRoZXIgb2YgdGhlc2UgY2FuIGJlIGd1YXJhbnRlZWQuCisKK0lmIHRoZSBhZGFwdGlvbiBpcyBwZXJmb3JtZWQgd2hpbGUgdHJhbnNtaXR0aW5nIG5vaXNlIChvciBzb21ldGhpbmcgZmFpcmx5Citub2lzZSBsaWtlLCBzdWNoIGFzIHZvaWNlKSB0aGUgYWRhcHRpb24gd29ya3MgdmVyeSB3ZWxsLiBJZiB0aGUgYWRhcHRpb24gaXMKK3BlcmZvcm1lZCB3aGlsZSB0cmFuc21pdHRpbmcgc29tZXRoaW5nIGhpZ2hseSBjb3JyZWxhdGl2ZSAodHlwaWNhbGx5IG5hcnJvdworYmFuZCBlbmVyZ3kgc3VjaCBhcyBzaWduYWxsaW5nIHRvbmVzIG9yIERUTUYpLCB0aGUgYWRhcHRpb24gY2FuIGdvIHNlcmlvdXNseQord3JvbmcuIFRoZSByZWFzb24gaXMgdGhlcmUgaXMgb25seSBvbmUgc29sdXRpb24gZm9yIHRoZSBhZGFwdGlvbiBvbiBhIG5lYXIKK3JhbmRvbSBzaWduYWwgLSB0aGUgaW1wdWxzZSByZXNwb25zZSBvZiB0aGUgbGluZS4gRm9yIGEgcmVwZXRpdGl2ZSBzaWduYWwsCit0aGVyZSBhcmUgYW55IG51bWJlciBvZiBzb2x1dGlvbnMgd2hpY2ggY29udmVyZ2UgdGhlIGFkYXB0aW9uLCBhbmQgbm90aGluZworZ3VpZGVzIHRoZSBhZGFwdGlvbiB0byBjaG9vc2UgdGhlIGdlbmVyYWxpc2VkIG9uZS4gQWxsb3dpbmcgYW4gdW50cmFpbmVkCitjYW5jZWxsZXIgdG8gY29udmVyZ2Ugb24gdGhpcyBraW5kIG9mIG5hcnJvd2JhbmQgZW5lcmd5IHByb2JhYmx5IGEgZ29vZCB0aGluZywKK3NpbmNlIGF0IGxlYXN0IGl0IGNhbmNlbHMgdGhlIHRvbmVzLiBBbGxvd2luZyBhIHdlbGwgY29udmVyZ2VkIGNhbmNlbGxlciB0bworY29udGludWUgY29udmVyZ2luZyBvbiBzdWNoIGVuZXJneSBpcyBqdXN0IGEgd2F5IHRvIHJ1aW4gaXRzIGdlbmVyYWxpc2VkCithZGFwdGlvbi4gQSBuYXJyb3diYW5kIGRldGVjdG9yIGlzIG5lZWRlZCwgc28gYWRhcGF0aW9uIGNhbiBiZSBzdXNwZW5kZWQgYXQKK2FwcHJvcHJpYXRlIHRpbWVzLgorCitUaGUgYWRhcHRpb24gcHJvY2VzcyBpcyBiYXNlZCBvbiB0cnlpbmcgdG8gZWxpbWluYXRlIHRoZSByZWNlaXZlZCBzaWduYWwuIFdoZW4KK3RoZXJlIGlzIGFueSBzaWduYWwgZnJvbSB3aXRoaW4gdGhlIGVudmlyb25tZW50IGJlaW5nIGNhbmNlbGxlZCBpdCBtYXkgdXBzZXQKK3RoZSBhZGFwdGlvbiBwcm9jZXNzLiBTaW1pbGFybHksIGlmIHRoZSBzaWduYWwgd2UgYXJlIHRyYW5zbWl0dGluZyBpcyBzbWFsbCwKK25vaXNlIG1heSBkb21pbmF0ZSBhbmQgZGlzdHVyYiB0aGUgYWRhcHRpb24gcHJvY2Vzcy4gSWYgd2UgY2FuIGVuc3VyZSB0aGF0IHRoZQorYWRhcHRpb24gaXMgb25seSBwZXJmb3JtZWQgd2hlbiB3ZSBhcmUgdHJhbnNtaXR0aW5nIGEgc2lnbmlmaWNhbnQgc2lnbmFsIGxldmVsLAorYW5kIHRoZSBlbnZpcm9ubWVudCBpcyBub3QsIHRoaW5ncyB3aWxsIGJlIE9LLiBDbGVhcmx5LCBpdCBpcyBlYXN5IHRvIHRlbGwgd2hlbgord2UgYXJlIHNlbmRpbmcgYSBzaWduaWZpY2FudCBzaWduYWwuIFRlbGxpbmcsIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBnZW5lcmF0aW5nCithIHNpZ25pZmljYW50IHNpZ25hbCwgYW5kIGRvaW5nIGl0IHdpdGggc3VmZmljaWVudCBzcGVlZCB0aGF0IHRoZSBhZGFwdGlvbiB3aWxsCitub3QgaGF2ZSBkaXZlcmdlZCB0b28gbXVjaCBtb3JlIHdlIHN0b3AgaXQsIGlzIGEgbGl0dGxlIGhhcmRlci4KKworVGhlIGtleSBwcm9ibGVtIGluIGRldGVjdGluZyB3aGVuIHRoZSBlbnZpcm9ubWVudCBpcyBzb3VyY2luZyBzaWduaWZpY2FudAorZW5lcmd5IGlzIHRoYXQgd2UgbXVzdCBkbyB0aGlzIHZlcnkgcXVpY2tseS4gR2l2ZW4gYSByZWFzb25hYmx5IGxvbmcgc2FtcGxlIG9mCit0aGUgcmVjZWl2ZWQgc2lnbmFsLCB0aGVyZSBhcmUgYSBudW1iZXIgb2Ygc3RyYXRlZ2llcyB3aGljaCBtYXkgYmUgdXNlZCB0bworYXNzZXNzIHdoZXRoZXIgdGhhdCBzaWduYWwgY29udGFpbnMgYSBzdHJvbmcgZmFyIGVuZCBjb21wb25lbnQuIEhvd2V2ZXIsIGJ5IHRoZQordGltZSB0aGF0IGFzc2Vzc21lbnQgaXMgY29tcGxldGUgdGhlIGZhciBlbmQgc2lnbmFsIHdpbGwgaGF2ZSBhbHJlYWR5IGNhdXNlZAorbWFqb3IgbWlzLWNvbnZlcmdlbmNlIGluIHRoZSBhZGFwdGlvbiBwcm9jZXNzLiBBbiBhc3Nlc3NtZW50IGFsZ29yaXRobSBpcworbmVlZGVkIHdoaWNoIHByb2R1Y2VzIGEgZmFpcmx5IGFjY3VyYXRlIHJlc3VsdCBmcm9tIGEgdmVyeSBzaG9ydCBidXJzdCBvZiBmYXIKK2VuZCBlbmVyZ3kuCisKK1xzZWN0aW9uIGVjaG9fY2FuX3BhZ2Vfc2VjXzMgSG93IGRvIEkgdXNlIGl0PworVGhlIGVjaG8gY2FuY2VsbG9yIHByb2Nlc3NlcyBib3RoIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBzdHJlYW1zIHNhbXBsZSBieQorc2FtcGxlLiBUaGUgcHJvY2Vzc2luZyBmdW5jdGlvbiBpcyBub3QgZGVjbGFyZWQgaW5saW5lLiBVbmZvcnR1bmF0ZWx5LAorY2FuY2VsbGF0aW9uIHJlcXVpcmVzIG1hbnkgb3BlcmF0aW9ucyBwZXIgc2FtcGxlLCBzbyB0aGUgY2FsbCBvdmVyaGVhZCBpcyBvbmx5CithIG1pbm9yIGJ1cmRlbi4KKyovCisKKyNpbmNsdWRlICJmaXIuaCIKKworLyogTWFzayBiaXRzIGZvciB0aGUgYWRhcHRpb24gbW9kZSAqLworI2RlZmluZSBFQ0hPX0NBTl9VU0VfQURBUFRJT04JMHgwMQorI2RlZmluZSBFQ0hPX0NBTl9VU0VfTkxQCTB4MDIKKyNkZWZpbmUgRUNIT19DQU5fVVNFX0NORwkweDA0CisjZGVmaW5lIEVDSE9fQ0FOX1VTRV9DTElQCTB4MDgKKyNkZWZpbmUgRUNIT19DQU5fVVNFX1RYX0hQRgkweDEwCisjZGVmaW5lIEVDSE9fQ0FOX1VTRV9SWF9IUEYJMHgyMAorI2RlZmluZSBFQ0hPX0NBTl9ESVNBQkxFCTB4NDAKKworLyohCisgICAgRy4xNjggZWNobyBjYW5jZWxsZXIgZGVzY3JpcHRvci4gVGhpcyBkZWZpbmVzIHRoZSB3b3JraW5nIHN0YXRlIGZvciBhIGxpbmUKKyAgICBlY2hvIGNhbmNlbGxlci4KKyovCit0eXBlZGVmIHN0cnVjdAoreworCWludDE2X3QgdHgscng7CisJaW50MTZfdCBjbGVhbjsKKwlpbnQxNl90IGNsZWFuX25scDsKKworCWludCBub251cGRhdGVfZHdlbGw7CisJaW50IGN1cnJfcG9zOworCWludCB0YXBzOworCWludCBsb2cydGFwczsKKwlpbnQgYWRhcHRpb25fbW9kZTsKKworCWludCBjb25kX21ldDsKKwlpbnQzMl90IFBzdGF0ZXM7CisJaW50MTZfdCBhZGFwdDsKKwlpbnQzMl90IGZhY3RvcjsKKwlpbnQxNl90IHNoaWZ0OworCisJLyogQXZlcmFnZSBsZXZlbHMgYW5kIGF2ZXJhZ2luZyBmaWx0ZXIgc3RhdGVzICovCisJaW50IEx0eGFjYywgTHJ4YWNjLCBMY2xlYW5hY2MsIExjbGVhbl9iZ2FjYzsKKwlpbnQgTHR4LCBMcng7CisJaW50IExjbGVhbjsKKwlpbnQgTGNsZWFuX2JnOworCWludCBMYmduLCBMYmduX2FjYywgTGJnbl91cHBlciwgTGJnbl91cHBlcl9hY2M7CisKKwkvKiBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGZpbHRlciBzdGF0ZXMgKi8KKwlmaXIxNl9zdGF0ZV90IGZpcl9zdGF0ZTsKKwlmaXIxNl9zdGF0ZV90IGZpcl9zdGF0ZV9iZzsKKwlpbnQxNl90ICpmaXJfdGFwczE2WzJdOworCisJLyogREMgYmxvY2tpbmcgZmlsdGVyIHN0YXRlcyAqLworCWludCB0eF8xLCB0eF8yLCByeF8xLCByeF8yOworCisJLyogb3B0aW9uYWwgSGlnaCBQYXNzIEZpbHRlciBzdGF0ZXMgKi8KKwlpbnQzMl90IHh2dHhbNV0sIHl2dHhbNV07CisJaW50MzJfdCB4dnJ4WzVdLCB5dnJ4WzVdOworCisJLyogUGFyYW1ldGVycyBmb3IgdGhlIG9wdGlvbmFsIEhvdGggbm9pc2UgZ2VuZXJhdG9yICovCisJaW50IGNuZ19sZXZlbDsKKwlpbnQgY25nX3JuZG51bTsKKwlpbnQgY25nX2ZpbHRlcjsKKworCS8qIHNuYXBzaG90IHNhbXBsZSBvZiBjb2VmZnMgdXNlZCBmb3IgZGV2ZWxvcG1lbnQgKi8KKwlpbnQxNl90ICpzbmFwc2hvdDsKK30gZWNob19jYW5fc3RhdGVfdDsKKworLyohIENyZWF0ZSBhIHZvaWNlIGVjaG8gY2FuY2VsbGVyIGNvbnRleHQuCisgICAgXHBhcmFtIGxlbiBUaGUgbGVuZ3RoIG9mIHRoZSBjYW5jZWxsZXIsIGluIHNhbXBsZXMuCisgICAgXHJldHVybiBUaGUgbmV3IGNhbmNlbGxlciBjb250ZXh0LCBvciBOVUxMIGlmIHRoZSBjYW5jZWxsZXIgY291bGQgbm90IGJlIGNyZWF0ZWQuCisqLworZWNob19jYW5fc3RhdGVfdCAqZWNob19jYW5fY3JlYXRlKGludCBsZW4sIGludCBhZGFwdGlvbl9tb2RlKTsKKworLyohIEZyZWUgYSB2b2ljZSBlY2hvIGNhbmNlbGxlciBjb250ZXh0LgorICAgIFxwYXJhbSBlYyBUaGUgZWNobyBjYW5jZWxsZXIgY29udGV4dC4KKyovCit2b2lkIGVjaG9fY2FuX2ZyZWUoZWNob19jYW5fc3RhdGVfdCAqZWMpOworCisvKiEgRmx1c2ggKHJlaW5pdGlhbGlzZSkgYSB2b2ljZSBlY2hvIGNhbmNlbGxlciBjb250ZXh0LgorICAgIFxwYXJhbSBlYyBUaGUgZWNobyBjYW5jZWxsZXIgY29udGV4dC4KKyovCit2b2lkIGVjaG9fY2FuX2ZsdXNoKGVjaG9fY2FuX3N0YXRlX3QgKmVjKTsKKworLyohIFNldCB0aGUgYWRhcHRpb24gbW9kZSBvZiBhIHZvaWNlIGVjaG8gY2FuY2VsbGVyIGNvbnRleHQuCisgICAgXHBhcmFtIGVjIFRoZSBlY2hvIGNhbmNlbGxlciBjb250ZXh0LgorICAgIFxwYXJhbSBhZGFwdCBUaGUgbW9kZS4KKyovCit2b2lkIGVjaG9fY2FuX2FkYXB0aW9uX21vZGUoZWNob19jYW5fc3RhdGVfdCAqZWMsIGludCBhZGFwdGlvbl9tb2RlKTsKKwordm9pZCBlY2hvX2Nhbl9zbmFwc2hvdChlY2hvX2Nhbl9zdGF0ZV90ICplYyk7CisKKy8qISBQcm9jZXNzIGEgc2FtcGxlIHRocm91Z2ggYSB2b2ljZSBlY2hvIGNhbmNlbGxlci4KKyAgICBccGFyYW0gZWMgVGhlIGVjaG8gY2FuY2VsbGVyIGNvbnRleHQuCisgICAgXHBhcmFtIHR4IFRoZSB0cmFuc21pdHRlZCBhdWRpbyBzYW1wbGUuCisgICAgXHBhcmFtIHJ4IFRoZSByZWNlaXZlZCBhdWRpbyBzYW1wbGUuCisgICAgXHJldHVybiBUaGUgY2xlYW4gKGVjaG8gY2FuY2VsbGVkKSByZWNlaXZlZCBzYW1wbGUuCisqLworaW50MTZfdCBlY2hvX2Nhbl91cGRhdGUoZWNob19jYW5fc3RhdGVfdCAqZWMsIGludDE2X3QgdHgsIGludDE2X3QgcngpOworCisvKiEgUHJvY2VzcyB0byBoaWdoIHBhc3MgZmlsdGVyIHRoZSB0eCBzaWduYWwuCisgICAgXHBhcmFtIGVjIFRoZSBlY2hvIGNhbmNlbGxlciBjb250ZXh0LgorICAgIFxwYXJhbSB0eCBUaGUgdHJhbnNtaXR0ZWQgYXVpbyBzYW1wbGUuCisgICAgXHJldHVybiBUaGUgSFAgZmlsdGVyZWQgdHJhbnNtaXQgc2FtcGxlLCBzZW5kIHRoaXMgdG8geW91ciBEL0EuCisqLworaW50MTZfdCBlY2hvX2Nhbl9ocGZfdHgoZWNob19jYW5fc3RhdGVfdCAqZWMsIGludDE2X3QgdHgpOworCisjZW5kaWYJLyogX19FQ0hPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2Zpci5oIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vZmlyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiZmM0OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2Zpci5oCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogU3BhbkRTUCAtIGEgc2VyaWVzIG9mIERTUCBjb21wb25lbnRzIGZvciB0ZWxlcGhvbnkKKyAqCisgKiBmaXIuaCAtIEdlbmVyYWwgdGVsZXBob255IEZJUiByb3V0aW5lcworICoKKyAqIFdyaXR0ZW4gYnkgU3RldmUgVW5kZXJ3b29kIDxzdGV2ZXVAY29wcGljZS5vcmc+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFN0ZXZlIFVuZGVyd29vZAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICRJZDogZmlyLmgsdiAxLjggMjAwNi8xMC8yNCAxMzo0NToyOCBzdGV2ZXUgRXhwICQKKyAqLworCisvKiEgXHBhZ2UgZmlyX3BhZ2UgRklSIGZpbHRlcmluZworXHNlY3Rpb24gZmlyX3BhZ2Vfc2VjXzEgV2hhdCBkb2VzIGl0IGRvPworPz8/LgorCitcc2VjdGlvbiBmaXJfcGFnZV9zZWNfMiBIb3cgZG9lcyBpdCB3b3JrPworPz8/LgorKi8KKworI2lmICFkZWZpbmVkKF9GSVJfSF8pCisjZGVmaW5lIF9GSVJfSF8KKworLyoKKyAgIEJsYWNrZmluIE5PVEVTICYgSURFQVM6CisKKyAgIEEgc2ltcGxlIGRvdCBwcm9kdWN0IGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBmaWx0ZXIuICBUaGlzIHBlcmZvcm1zCisgICBqdXN0IG9uZSBNQUMvY3ljbGUgd2hpY2ggaXMgaW5lZmZpY2llbnQgYnV0IHdhcyBlYXN5IHRvIGltcGxlbWVudCBhcyBhIGZpcnN0CisgICBwYXNzLiAgVGhlIGN1cnJlbnQgQmxhY2tmaW4gY29kZSBhbHNvIHVzZXMgYW4gdW5yb2xsZWQgZm9ybSBvZiB0aGUgZmlsdGVyCisgICBoaXN0b3J5IHRvIGF2b2lkIDAgbGVuZ3RoIGhhcmR3YXJlIGxvb3AgaXNzdWVzLiAgVGhpcyBpcyB3YXN0ZWZ1bCBvZgorICAgbWVtb3J5LgorCisgICBJZGVhcyBmb3IgaW1wcm92ZW1lbnQ6CisKKyAgIDEvIFJld3JpdGUgZmlsdGVyIGZvciBkdWFsIE1BQyBpbm5lciBsb29wLiAgVGhlIGlzc3VlIGhlcmUgaXMgaGFuZGxpbmcKKyAgIGhpc3Rvcnkgc2FtcGxlIG9mZnNldHMgdGhhdCBhcmUgMTYgYml0IGFsaWduZWQgLSB0aGUgZHVhbCBNQUMgbmVlZHMKKyAgIDMyIGJpdCBhbGlnbW5lbnQuICBUaGVyZSBhcmUgc29tZSBnb29kIGV4YW1wbGVzIGluIGxpYmJmZHNwLgorCisgICAyLyBVc2UgdGhlIGhhcmR3YXJlIGNpcmN1bGFyIGJ1ZmZlciBmYWNpbGl0eSB0b2hhbHZlIG1lbW9yeSB1c2FnZS4KKworICAgMy8gQ29uc2lkZXIgdXNpbmcgaW50ZXJuYWwgbWVtb3J5LgorCisgICBVc2luZyBsZXNzIG1lbW9yeSBtaWdodCBhbHNvIGltcHJvdmUgc3BlZWQgYXMgY2FjaGUgbWlzc2VzIHdpbGwgYmUKKyAgIHJlZHVjZWQuIEEgZHJvcCBpbiBNSVBzIGFuZCBtZW1vcnkgYXBwcm9hY2hpbmcgNTAlIHNob3VsZCBiZQorICAgcG9zc2libGUuCisKKyAgIFRoZSBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGZpbHRlcnMgY3VycmVubHR5IHVzZSBhIHRvdGFsIG9mCisgICBhYm91dCAxMCBNSVBzL2NoIGFzIG1lYXN1cmVkIHdpdGggc3BlZWR0ZXN0LmMgb24gYSAyNTYgVEFQIGVjaG8KKyAgIGNhbi4KKyovCisKKyNpZiBkZWZpbmVkKFVTRV9NTVgpICB8fCAgZGVmaW5lZChVU0VfU1NFMikKKyNpbmNsdWRlICJtbXguaCIKKyNlbmRpZgorCisvKiEKKyAgICAxNiBiaXQgaW50ZWdlciBGSVIgZGVzY3JpcHRvci4gVGhpcyBkZWZpbmVzIHRoZSB3b3JraW5nIHN0YXRlIGZvciBhIHNpbmdsZQorICAgIGluc3RhbmNlIG9mIGFuIEZJUiBmaWx0ZXIgdXNpbmcgMTYgYml0IGludGVnZXIgY29lZmZpY2llbnRzLgorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJaW50IHRhcHM7CisJaW50IGN1cnJfcG9zOworCWNvbnN0IGludDE2X3QgKmNvZWZmczsKKwlpbnQxNl90ICpoaXN0b3J5OworfSBmaXIxNl9zdGF0ZV90OworCisvKiEKKyAgICAzMiBiaXQgaW50ZWdlciBGSVIgZGVzY3JpcHRvci4gVGhpcyBkZWZpbmVzIHRoZSB3b3JraW5nIHN0YXRlIGZvciBhIHNpbmdsZQorICAgIGluc3RhbmNlIG9mIGFuIEZJUiBmaWx0ZXIgdXNpbmcgMzIgYml0IGludGVnZXIgY29lZmZpY2llbnRzLCBhbmQgZmlsdGVyaW5nCisgICAgMTYgYml0IGludGVnZXIgZGF0YS4KKyovCit0eXBlZGVmIHN0cnVjdAoreworCWludCB0YXBzOworCWludCBjdXJyX3BvczsKKwljb25zdCBpbnQzMl90ICpjb2VmZnM7CisJaW50MTZfdCAqaGlzdG9yeTsKK30gZmlyMzJfc3RhdGVfdDsKKworLyohCisgICAgRmxvYXRpbmcgcG9pbnQgRklSIGRlc2NyaXB0b3IuIFRoaXMgZGVmaW5lcyB0aGUgd29ya2luZyBzdGF0ZSBmb3IgYSBzaW5nbGUKKyAgICBpbnN0YW5jZSBvZiBhbiBGSVIgZmlsdGVyIHVzaW5nIGZsb2F0aW5nIHBvaW50IGNvZWZmaWNpZW50cyBhbmQgZGF0YS4KKyovCit0eXBlZGVmIHN0cnVjdAoreworCWludCB0YXBzOworCWludCBjdXJyX3BvczsKKwljb25zdCBmbG9hdCAqY29lZmZzOworCWZsb2F0ICpoaXN0b3J5OworfSBmaXJfZmxvYXRfc3RhdGVfdDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBjb25zdCBpbnQxNl90ICpmaXIxNl9jcmVhdGUoZmlyMTZfc3RhdGVfdCAqZmlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDE2X3QgKmNvZWZmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFwcykKK3sKKwlmaXItPnRhcHMgPSB0YXBzOworCWZpci0+Y3Vycl9wb3MgPSB0YXBzIC0gMTsKKwlmaXItPmNvZWZmcyA9IGNvZWZmczsKKyNpZiBkZWZpbmVkKFVTRV9NTVgpICB8fCAgZGVmaW5lZChVU0VfU1NFMikgfHwgZGVmaW5lZChfX0JMQUNLRklOX0FTTV9fKQorCWlmICgoZmlyLT5oaXN0b3J5ID0gbWFsbG9jKDIqdGFwcypzaXplb2YoaW50MTZfdCkpKSkKKwkJbWVtc2V0KGZpci0+aGlzdG9yeSwgMCwgMip0YXBzKnNpemVvZihpbnQxNl90KSk7CisjZWxzZQorCWlmICgoZmlyLT5oaXN0b3J5ID0gKGludDE2X3QgKikgbWFsbG9jKHRhcHMqc2l6ZW9mKGludDE2X3QpKSkpCisJCW1lbXNldChmaXItPmhpc3RvcnksIDAsIHRhcHMqc2l6ZW9mKGludDE2X3QpKTsKKyNlbmRpZgorCXJldHVybiBmaXItPmhpc3Rvcnk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXIxNl9mbHVzaChmaXIxNl9zdGF0ZV90ICpmaXIpCit7CisjaWYgZGVmaW5lZChVU0VfTU1YKSAgfHwgIGRlZmluZWQoVVNFX1NTRTIpIHx8IGRlZmluZWQoX19CTEFDS0ZJTl9BU01fXykKKyAgICBtZW1zZXQoZmlyLT5oaXN0b3J5LCAwLCAyKmZpci0+dGFwcypzaXplb2YoaW50MTZfdCkpOworI2Vsc2UKKyAgICBtZW1zZXQoZmlyLT5oaXN0b3J5LCAwLCBmaXItPnRhcHMqc2l6ZW9mKGludDE2X3QpKTsKKyNlbmRpZgorfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZmlyMTZfZnJlZShmaXIxNl9zdGF0ZV90ICpmaXIpCit7CisJZnJlZShmaXItPmhpc3RvcnkpOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBfX0JMQUNLRklOX0FTTV9fCitzdGF0aWMgaW5saW5lIGludDMyX3QgZG90X2FzbShzaG9ydCAqeCwgc2hvcnQgKnksIGludCBsZW4pCit7CisgICBpbnQgZG90OworCisgICBsZW4tLTsKKworICAgX19hc21fXworICAgKAorICAgIkkwID0gJTE7XG5cdCIKKyAgICJJMSA9ICUyO1xuXHQiCisgICAiQTAgPSAwO1xuXHQiCisgICAiUjAuTCA9IFdbSTArK10gfHwgUjEuTCA9IFdbSTErK107XG5cdCIKKyAgICJMT09QIGRvdCU9IExDMCA9ICUzO1xuXHQiCisgICAiTE9PUF9CRUdJTiBkb3QlPTtcblx0IgorICAgICAgIkEwICs9IFIwLkwgKiBSMS5MIChJUykgfHwgUjAuTCA9IFdbSTArK10gfHwgUjEuTCA9IFdbSTErK107XG5cdCIKKyAgICJMT09QX0VORCBkb3QlPTtcblx0IgorICAgIkEwICs9IFIwLkwqUjEuTCAoSVMpO1xuXHQiCisgICAiUjAgPSBBMDtcblx0IgorICAgIiUwID0gUjA7XG5cdCIKKyAgIDogIj0mZCIgKGRvdCkKKyAgIDogImEiICh4KSwgImEiICh5KSwgImEiIChsZW4pCisgICA6ICJJMCIsICJJMSIsICJBMSIsICJBMCIsICJSMCIsICJSMSIKKyAgICk7CisKKyAgIHJldHVybiBkb3Q7Cit9CisjZW5kaWYKKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQxNl90IGZpcjE2KGZpcjE2X3N0YXRlX3QgKmZpciwgaW50MTZfdCBzYW1wbGUpCit7CisgICAgaW50MzJfdCB5OworI2lmIGRlZmluZWQoVVNFX01NWCkKKyAgICBpbnQgaTsKKyAgICBtbXhfdCAqbW14X2NvZWZmczsKKyAgICBtbXhfdCAqbW14X2hpc3Q7CisKKyAgICBmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3Bvc10gPSBzYW1wbGU7CisgICAgZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3MgKyBmaXItPnRhcHNdID0gc2FtcGxlOworCisgICAgbW14X2NvZWZmcyA9IChtbXhfdCAqKSBmaXItPmNvZWZmczsKKyAgICBtbXhfaGlzdCA9IChtbXhfdCAqKSAmZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3NdOworICAgIGkgPSBmaXItPnRhcHM7CisgICAgcHhvcl9yMnIobW00LCBtbTQpOworICAgIC8qIDggc2FtcGxlcyBwZXIgaXRlcmF0aW9uLCBzbyB0aGUgZmlsdGVyIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4IGxvbmcuICovCisgICAgd2hpbGUgKGkgPiAwKQorICAgIHsKKyAgICAgICAgbW92cV9tMnIobW14X2NvZWZmc1swXSwgbW0wKTsKKyAgICAgICAgbW92cV9tMnIobW14X2NvZWZmc1sxXSwgbW0yKTsKKyAgICAgICAgbW92cV9tMnIobW14X2hpc3RbMF0sIG1tMSk7CisgICAgICAgIG1vdnFfbTJyKG1teF9oaXN0WzFdLCBtbTMpOworICAgICAgICBtbXhfY29lZmZzICs9IDI7CisgICAgICAgIG1teF9oaXN0ICs9IDI7CisgICAgICAgIHBtYWRkd2RfcjJyKG1tMSwgbW0wKTsKKyAgICAgICAgcG1hZGR3ZF9yMnIobW0zLCBtbTIpOworICAgICAgICBwYWRkZF9yMnIobW0wLCBtbTQpOworICAgICAgICBwYWRkZF9yMnIobW0yLCBtbTQpOworICAgICAgICBpIC09IDg7CisgICAgfQorICAgIG1vdnFfcjJyKG1tNCwgbW0wKTsKKyAgICBwc3JscV9pMnIoMzIsIG1tMCk7CisgICAgcGFkZGRfcjJyKG1tMCwgbW00KTsKKyAgICBtb3ZkX3IybShtbTQsIHkpOworICAgIGVtbXMoKTsKKyNlbGlmIGRlZmluZWQoVVNFX1NTRTIpCisgICAgaW50IGk7CisgICAgeG1tX3QgKnhtbV9jb2VmZnM7CisgICAgeG1tX3QgKnhtbV9oaXN0OworCisgICAgZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3NdID0gc2FtcGxlOworICAgIGZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zICsgZmlyLT50YXBzXSA9IHNhbXBsZTsKKworICAgIHhtbV9jb2VmZnMgPSAoeG1tX3QgKikgZmlyLT5jb2VmZnM7CisgICAgeG1tX2hpc3QgPSAoeG1tX3QgKikgJmZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zXTsKKyAgICBpID0gZmlyLT50YXBzOworICAgIHB4b3JfcjJyKHhtbTQsIHhtbTQpOworICAgIC8qIDE2IHNhbXBsZXMgcGVyIGl0ZXJhdGlvbiwgc28gdGhlIGZpbHRlciBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYgbG9uZy4gKi8KKyAgICB3aGlsZSAoaSA+IDApCisgICAgeworICAgICAgICBtb3ZkcXVfbTJyKHhtbV9jb2VmZnNbMF0sIHhtbTApOworICAgICAgICBtb3ZkcXVfbTJyKHhtbV9jb2VmZnNbMV0sIHhtbTIpOworICAgICAgICBtb3ZkcXVfbTJyKHhtbV9oaXN0WzBdLCB4bW0xKTsKKyAgICAgICAgbW92ZHF1X20ycih4bW1faGlzdFsxXSwgeG1tMyk7CisgICAgICAgIHhtbV9jb2VmZnMgKz0gMjsKKyAgICAgICAgeG1tX2hpc3QgKz0gMjsKKyAgICAgICAgcG1hZGR3ZF9yMnIoeG1tMSwgeG1tMCk7CisgICAgICAgIHBtYWRkd2RfcjJyKHhtbTMsIHhtbTIpOworICAgICAgICBwYWRkZF9yMnIoeG1tMCwgeG1tNCk7CisgICAgICAgIHBhZGRkX3Iycih4bW0yLCB4bW00KTsKKyAgICAgICAgaSAtPSAxNjsKKyAgICB9CisgICAgbW92ZHFhX3Iycih4bW00LCB4bW0wKTsKKyAgICBwc3JsZHFfaTJyKDgsIHhtbTApOworICAgIHBhZGRkX3Iycih4bW0wLCB4bW00KTsKKyAgICBtb3ZkcWFfcjJyKHhtbTQsIHhtbTApOworICAgIHBzcmxkcV9pMnIoNCwgeG1tMCk7CisgICAgcGFkZGRfcjJyKHhtbTAsIHhtbTQpOworICAgIG1vdmRfcjJtKHhtbTQsIHkpOworI2VsaWYgZGVmaW5lZChfX0JMQUNLRklOX0FTTV9fKQorICAgIGZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zXSA9IHNhbXBsZTsKKyAgICBmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3BvcyArIGZpci0+dGFwc10gPSBzYW1wbGU7CisgICAgeSA9IGRvdF9hc20oKGludDE2X3QqKWZpci0+Y29lZmZzLCAmZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3NdLCBmaXItPnRhcHMpOworI2Vsc2UKKyAgICBpbnQgaTsKKyAgICBpbnQgb2Zmc2V0MTsKKyAgICBpbnQgb2Zmc2V0MjsKKworICAgIGZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zXSA9IHNhbXBsZTsKKworICAgIG9mZnNldDIgPSBmaXItPmN1cnJfcG9zOworICAgIG9mZnNldDEgPSBmaXItPnRhcHMgLSBvZmZzZXQyOworICAgIHkgPSAwOworICAgIGZvciAoaSA9IGZpci0+dGFwcyAtIDE7ICBpID49IG9mZnNldDE7ICBpLS0pCisgICAgICAgIHkgKz0gZmlyLT5jb2VmZnNbaV0qZmlyLT5oaXN0b3J5W2kgLSBvZmZzZXQxXTsKKyAgICBmb3IgKCAgOyAgaSA+PSAwOyAgaS0tKQorICAgICAgICB5ICs9IGZpci0+Y29lZmZzW2ldKmZpci0+aGlzdG9yeVtpICsgb2Zmc2V0Ml07CisjZW5kaWYKKyAgICBpZiAoZmlyLT5jdXJyX3BvcyA8PSAwKQorICAgIAlmaXItPmN1cnJfcG9zID0gZmlyLT50YXBzOworICAgIGZpci0+Y3Vycl9wb3MtLTsKKyAgICByZXR1cm4gKGludDE2X3QpICh5ID4+IDE1KTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgX19pbmxpbmVfXyBjb25zdCBpbnQxNl90ICpmaXIzMl9jcmVhdGUoZmlyMzJfc3RhdGVfdCAqZmlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgKmNvZWZmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFwcykKK3sKKyAgICBmaXItPnRhcHMgPSB0YXBzOworICAgIGZpci0+Y3Vycl9wb3MgPSB0YXBzIC0gMTsKKyAgICBmaXItPmNvZWZmcyA9IGNvZWZmczsKKyAgICBmaXItPmhpc3RvcnkgPSAoaW50MTZfdCAqKSBtYWxsb2ModGFwcypzaXplb2YoaW50MTZfdCkpOworICAgIGlmIChmaXItPmhpc3RvcnkpCisgICAgCW1lbXNldChmaXItPmhpc3RvcnksICdcMCcsIHRhcHMqc2l6ZW9mKGludDE2X3QpKTsKKyAgICByZXR1cm4gZmlyLT5oaXN0b3J5OworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZmlyMzJfZmx1c2goZmlyMzJfc3RhdGVfdCAqZmlyKQoreworICAgIG1lbXNldChmaXItPmhpc3RvcnksIDAsIGZpci0+dGFwcypzaXplb2YoaW50MTZfdCkpOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZmlyMzJfZnJlZShmaXIzMl9zdGF0ZV90ICpmaXIpCit7CisgICAgZnJlZShmaXItPmhpc3RvcnkpOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBfX2lubGluZV9fIGludDE2X3QgZmlyMzIoZmlyMzJfc3RhdGVfdCAqZmlyLCBpbnQxNl90IHNhbXBsZSkKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQzMl90IHk7CisgICAgaW50IG9mZnNldDE7CisgICAgaW50IG9mZnNldDI7CisKKyAgICBmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3Bvc10gPSBzYW1wbGU7CisgICAgb2Zmc2V0MiA9IGZpci0+Y3Vycl9wb3M7CisgICAgb2Zmc2V0MSA9IGZpci0+dGFwcyAtIG9mZnNldDI7CisgICAgeSA9IDA7CisgICAgZm9yIChpID0gZmlyLT50YXBzIC0gMTsgIGkgPj0gb2Zmc2V0MTsgIGktLSkKKyAgICAgICAgeSArPSBmaXItPmNvZWZmc1tpXSpmaXItPmhpc3RvcnlbaSAtIG9mZnNldDFdOworICAgIGZvciAoICA7ICBpID49IDA7ICBpLS0pCisgICAgICAgIHkgKz0gZmlyLT5jb2VmZnNbaV0qZmlyLT5oaXN0b3J5W2kgKyBvZmZzZXQyXTsKKyAgICBpZiAoZmlyLT5jdXJyX3BvcyA8PSAwKQorICAgIAlmaXItPmN1cnJfcG9zID0gZmlyLT50YXBzOworICAgIGZpci0+Y3Vycl9wb3MtLTsKKyAgICByZXR1cm4gKGludDE2X3QpICh5ID4+IDE1KTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZuZGVmIF9fS0VSTkVMX18KK3N0YXRpYyBfX2lubGluZV9fIGNvbnN0IGZsb2F0ICpmaXJfZmxvYXRfY3JlYXRlKGZpcl9mbG9hdF9zdGF0ZV90ICpmaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqY29lZmZzLAorICAgIAkgICAgCSAgICAJICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhcHMpCit7CisgICAgZmlyLT50YXBzID0gdGFwczsKKyAgICBmaXItPmN1cnJfcG9zID0gdGFwcyAtIDE7CisgICAgZmlyLT5jb2VmZnMgPSBjb2VmZnM7CisgICAgZmlyLT5oaXN0b3J5ID0gKGZsb2F0ICopIG1hbGxvYyh0YXBzKnNpemVvZihmbG9hdCkpOworICAgIGlmIChmaXItPmhpc3RvcnkpCisgICAgICAgIG1lbXNldChmaXItPmhpc3RvcnksICdcMCcsIHRhcHMqc2l6ZW9mKGZsb2F0KSk7CisgICAgcmV0dXJuIGZpci0+aGlzdG9yeTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZpcl9mbG9hdF9mcmVlKGZpcl9mbG9hdF9zdGF0ZV90ICpmaXIpCit7CisgICAgZnJlZShmaXItPmhpc3RvcnkpOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBfX2lubGluZV9fIGludDE2X3QgZmlyX2Zsb2F0KGZpcl9mbG9hdF9zdGF0ZV90ICpmaXIsIGludDE2X3Qgc2FtcGxlKQoreworICAgIGludCBpOworICAgIGZsb2F0IHk7CisgICAgaW50IG9mZnNldDE7CisgICAgaW50IG9mZnNldDI7CisKKyAgICBmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3Bvc10gPSBzYW1wbGU7CisKKyAgICBvZmZzZXQyID0gZmlyLT5jdXJyX3BvczsKKyAgICBvZmZzZXQxID0gZmlyLT50YXBzIC0gb2Zmc2V0MjsKKyAgICB5ID0gMDsKKyAgICBmb3IgKGkgPSBmaXItPnRhcHMgLSAxOyAgaSA+PSBvZmZzZXQxOyAgaS0tKQorICAgICAgICB5ICs9IGZpci0+Y29lZmZzW2ldKmZpci0+aGlzdG9yeVtpIC0gb2Zmc2V0MV07CisgICAgZm9yICggIDsgIGkgPj0gMDsgIGktLSkKKyAgICAgICAgeSArPSBmaXItPmNvZWZmc1tpXSpmaXItPmhpc3RvcnlbaSArIG9mZnNldDJdOworICAgIGlmIChmaXItPmN1cnJfcG9zIDw9IDApCisgICAgCWZpci0+Y3Vycl9wb3MgPSBmaXItPnRhcHM7CisgICAgZmlyLT5jdXJyX3Bvcy0tOworICAgIHJldHVybiAgKGludDE2X3QpIHk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKKy8qLSBFbmQgb2YgZmlsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vbW14LmggYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9tbXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWEzOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vbW14LmgKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBtbXguaAorICogQ29weXJpZ2h0IChDKSAxOTk3LTIwMDEgSC4gRGlldHogYW5kIFIuIEZpc2hlcgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworI2lmbmRlZiBBVkNPREVDX0kzODZNTVhfSAorI2RlZmluZSBBVkNPREVDX0kzODZNTVhfSAorCisvKgorICogVGhlIHR5cGUgb2YgYW4gdmFsdWUgdGhhdCBmaXRzIGluIGFuIE1NWCByZWdpc3RlciAobm90ZSB0aGF0IGxvbmcKKyAqIGxvbmcgY29uc3RhbnQgdmFsdWVzIE1VU1QgYmUgc3VmZml4ZWQgYnkgTEwgYW5kIHVuc2lnbmVkIGxvbmcgbG9uZworICogdmFsdWVzIGJ5IFVMTCwgbGVzdCB0aGV5IGJlIHRydW5jYXRlZCBieSB0aGUgY29tcGlsZXIpCisgKi8KKwordHlwZWRlZiAgICAgICAgdW5pb24geworICAgICAgICBsb25nIGxvbmcgICAgICAgICAgICAgICBxOyAgICAgIC8qIFF1YWR3b3JkICg2NC1iaXQpIHZhbHVlICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgICAgIHVxOyAgICAgLyogVW5zaWduZWQgUXVhZHdvcmQgKi8KKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZFsyXTsgICAvKiAyIERvdWJsZXdvcmQgKDMyLWJpdCkgdmFsdWVzICovCisgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIHVkWzJdOyAgLyogMiBVbnNpZ25lZCBEb3VibGV3b3JkICovCisgICAgICAgIHNob3J0ICAgICAgICAgICAgICAgICAgIHdbNF07ICAgLyogNCBXb3JkICgxNi1iaXQpIHZhbHVlcyAqLworICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICB1d1s0XTsgIC8qIDQgVW5zaWduZWQgV29yZCAqLworICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICBiWzhdOyAgIC8qIDggQnl0ZSAoOC1iaXQpIHZhbHVlcyAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICB1Yls4XTsgIC8qIDggVW5zaWduZWQgQnl0ZSAqLworICAgICAgICBmbG9hdCAgICAgICAgICAgICAgICAgICBzWzJdOyAgIC8qIFNpbmdsZS1wcmVjaXNpb24gKDMyLWJpdCkgdmFsdWUgKi8KK30gbW14X3Q7ICAgICAgICAvKiBPbiBhbiA4LWJ5dGUgKDY0LWJpdCkgYm91bmRhcnkgKi8KKworLyogU1NFIHJlZ2lzdGVycyAqLwordHlwZWRlZiB1bmlvbiB7CisJY2hhciBiWzE2XTsKK30geG1tX3Q7CisKKworI2RlZmluZSAgICAgICAgIG1teF9pMnIob3AsaW1tLHJlZykgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJpIiAoaW1tKSApCisKKyNkZWZpbmUgICAgICAgICBtbXhfbTJyKG9wLG1lbSxyZWcpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUwLCAlJSIgI3JlZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibSIgKG1lbSkpCisKKyNkZWZpbmUgICAgICAgICBtbXhfcjJtKG9wLHJlZyxtZW0pIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUlIiAjcmVnICIsICUwIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9bSIgKG1lbSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBub3RoaW5nICovICkKKworI2RlZmluZSAgICAgICAgIG1teF9yMnIob3AscmVncyxyZWdkKSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlIiAjcmVncyAiLCAlIiAjcmVnZCkKKworCisjZGVmaW5lICAgICAgICAgZW1tcygpIF9fYXNtX18gX192b2xhdGlsZV9fICgiZW1tcyIpCisKKyNkZWZpbmUgICAgICAgICBtb3ZkX20ycih2YXIscmVnKSAgICAgICAgICAgbW14X20yciAobW92ZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgbW92ZF9yMm0ocmVnLHZhcikgICAgICAgICAgIG1teF9yMm0gKG1vdmQsIHJlZywgdmFyKQorI2RlZmluZSAgICAgICAgIG1vdmRfcjJyKHJlZ3MscmVnZCkgICAgICAgICBtbXhfcjJyIChtb3ZkLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgbW92cV9tMnIodmFyLHJlZykgICAgICAgICAgIG1teF9tMnIgKG1vdnEsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIG1vdnFfcjJtKHJlZyx2YXIpICAgICAgICAgICBtbXhfcjJtIChtb3ZxLCByZWcsIHZhcikKKyNkZWZpbmUgICAgICAgICBtb3ZxX3IycihyZWdzLHJlZ2QpICAgICAgICAgbW14X3IyciAobW92cSwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBhY2tzc2R3X20ycih2YXIscmVnKSAgICAgICBtbXhfbTJyIChwYWNrc3NkdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFja3NzZHdfcjJyKHJlZ3MscmVnZCkgICAgIG1teF9yMnIgKHBhY2tzc2R3LCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBhY2tzc3diX20ycih2YXIscmVnKSAgICAgICBtbXhfbTJyIChwYWNrc3N3YiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFja3Nzd2JfcjJyKHJlZ3MscmVnZCkgICAgIG1teF9yMnIgKHBhY2tzc3diLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcGFja3Vzd2JfbTJyKHZhcixyZWcpICAgICAgIG1teF9tMnIgKHBhY2t1c3diLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWNrdXN3Yl9yMnIocmVncyxyZWdkKSAgICAgbW14X3IyciAocGFja3Vzd2IsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwYWRkYl9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGFkZGIsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhZGRiX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYWRkYiwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwYWRkZF9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGFkZGQsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhZGRkX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYWRkZCwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwYWRkd19tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGFkZHcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhZGR3X3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYWRkdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBhZGRzYl9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwYWRkc2IsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhZGRzYl9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwYWRkc2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGFkZHN3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBhZGRzdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFkZHN3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBhZGRzdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBhZGR1c2JfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwYWRkdXNiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWRkdXNiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGFkZHVzYiwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwYWRkdXN3X20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGFkZHVzdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFkZHVzd19yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBhZGR1c3csIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwYW5kX20ycih2YXIscmVnKSAgICAgICAgICAgbW14X20yciAocGFuZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFuZF9yMnIocmVncyxyZWdkKSAgICAgICAgIG1teF9yMnIgKHBhbmQsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwYW5kbl9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGFuZG4sIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhbmRuX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYW5kbiwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBjbXBlcWJfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZXFiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwY21wZXFiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGVxYiwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwY21wZXFkX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGVxZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGNtcGVxZF9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBlcWQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGNtcGVxd19tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBlcXcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBjbXBlcXdfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZXF3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcGNtcGd0Yl9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBndGIsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBjbXBndGJfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZ3RiLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBjbXBndGRfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZ3RkLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwY21wZ3RkX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGd0ZCwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwY21wZ3R3X20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGd0dywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGNtcGd0d19yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBndHcsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwbWFkZHdkX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocG1hZGR3ZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcG1hZGR3ZF9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBtYWRkd2QsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwbXVsaHdfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocG11bGh3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwbXVsaHdfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocG11bGh3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcG11bGx3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtdWxsdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcG11bGx3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtdWxsdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBvcl9tMnIodmFyLHJlZykgICAgICAgICAgICBtbXhfbTJyIChwb3IsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBvcl9yMnIocmVncyxyZWdkKSAgICAgICAgICBtbXhfcjJyIChwb3IsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwc2xsZF9pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNsbGQsIGltbSwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzbGxkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc2xsZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNsbGRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzbGxkLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzbGxxX2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc2xscSwgaW1tLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNsbHFfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzbGxxLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc2xscV9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNsbHEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHNsbHdfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzbGx3LCBpbW0sIHJlZykKKyNkZWZpbmUgICAgICAgICBwc2xsd19tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNsbHcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzbGx3X3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc2xsdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBzcmFkX2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc3JhZCwgaW1tLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNyYWRfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzcmFkLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3JhZF9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNyYWQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHNyYXdfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzcmF3LCBpbW0sIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3Jhd19tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNyYXcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmF3X3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc3JhdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBzcmxkX2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc3JsZCwgaW1tLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNybGRfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzcmxkLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3JsZF9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNybGQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHNybHFfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzcmxxLCBpbW0sIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3JscV9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNybHEsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmxxX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc3JscSwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwc3Jsd19pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNybHcsIGltbSwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmx3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3JsdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNybHdfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzcmx3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHN1YmJfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzdWJiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3ViYl9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHN1YmIsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHN1YmRfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzdWJkLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3ViZF9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHN1YmQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHN1YndfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzdWJ3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3Vid19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHN1YncsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwc3Vic2JfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocHN1YnNiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3Vic2JfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocHN1YnNiLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzdWJzd19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwc3Vic3csIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzdWJzd19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwc3Vic3csIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwc3VidXNiX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocHN1YnVzYiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHN1YnVzYl9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBzdWJ1c2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHN1YnVzd19tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBzdWJ1c3csIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzdWJ1c3dfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwc3VidXN3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHVucGNraGJ3X20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2hidywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHVucGNraGJ3X3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2hidywgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwdW5wY2toZHFfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNraGRxLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwdW5wY2toZHFfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNraGRxLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHB1bnBja2h3ZF9tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2tod2QsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHB1bnBja2h3ZF9yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2tod2QsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwdW5wY2tsYndfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNrbGJ3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwdW5wY2tsYndfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNrbGJ3LCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHB1bnBja2xkcV9tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2tsZHEsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHB1bnBja2xkcV9yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2tsZHEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHVucGNrbHdkX20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2x3ZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHVucGNrbHdkX3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2x3ZCwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHB4b3JfbTJyKHZhcixyZWcpICAgICAgICAgICBtbXhfbTJyIChweG9yLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBweG9yX3IycihyZWdzLHJlZ2QpICAgICAgICAgbW14X3IyciAocHhvciwgcmVncywgcmVnZCkKKworCisvKiAzRE5PVyBleHRlbnNpb25zICovCisKKyNkZWZpbmUgICAgICAgICBwYXZndXNiX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGF2Z3VzYiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGF2Z3VzYl9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBhdmd1c2IsIHJlZ3MsIHJlZ2QpCisKKworLyogQU1EIE1NWCBleHRlbnNpb25zIC0gYWxzbyBhdmFpbGFibGUgaW4gaW50ZWwgU1NFICovCisKKworI2RlZmluZSAgICAgICAgIG1teF9tMnJpKG9wLG1lbSxyZWcsaW1tKSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMSwgJTAsICUlIiAjcmVnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtIiAobWVtKSwgImkiIChpbW0pKQorI2RlZmluZSAgICAgICAgIG1teF9yMnJpKG9wLHJlZ3MscmVnZCxpbW0pIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUwLCAlJSIgI3JlZ3MgIiwgJSUiICNyZWdkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJpIiAoaW1tKSApCisKKyNkZWZpbmUgICAgICAgICBtbXhfZmV0Y2gobWVtLGhpbnQpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJwcmVmZXRjaCIgI2hpbnQgIiAlMCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBub3RoaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm0iIChtZW0pKQorCisKKyNkZWZpbmUgICAgICAgICBtYXNrbW92cShyZWdzLG1hc2tyZWcpICAgICAgbW14X3IycmkgKG1hc2ttb3ZxLCByZWdzLCBtYXNrcmVnKQorCisjZGVmaW5lICAgICAgICAgbW92bnRxX3IybShtbXJlZyx2YXIpICAgICAgIG1teF9yMm0gKG1vdm50cSwgbW1yZWcsIHZhcikKKworI2RlZmluZSAgICAgICAgIHBhdmdiX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwYXZnYiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGF2Z2JfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBhdmdiLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBhdmd3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwYXZndywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGF2Z3dfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBhdmd3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcGV4dHJ3X3IycihtbXJlZyxyZWcsaW1tKSAgIG1teF9yMnJpIChwZXh0cncsIG1tcmVnLCByZWcsIGltbSkKKworI2RlZmluZSAgICAgICAgIHBpbnNyd19yMnIocmVnLG1tcmVnLGltbSkgICBtbXhfcjJyaSAocGluc3J3LCByZWcsIG1tcmVnLCBpbW0pCisKKyNkZWZpbmUgICAgICAgICBwbWF4c3dfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocG1heHN3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwbWF4c3dfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocG1heHN3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcG1heHViX20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtYXh1YiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcG1heHViX3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtYXh1YiwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBtaW5zd19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbWluc3csIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBtaW5zd19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbWluc3csIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwbWludWJfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocG1pbnViLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwbWludWJfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocG1pbnViLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcG1vdm1za2IobW1yZWcscmVnKSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibW92bXNrcHMgJSIgI21tcmVnICIsICUiICNyZWcpCisKKyNkZWZpbmUgICAgICAgICBwbXVsaHV3X20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocG11bGh1dywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcG11bGh1d19yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBtdWxodXcsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwcmVmZXRjaHQwKG1lbSkgICAgICAgICAgICAgbW14X2ZldGNoIChtZW0sIHQwKQorI2RlZmluZSAgICAgICAgIHByZWZldGNodDEobWVtKSAgICAgICAgICAgICBtbXhfZmV0Y2ggKG1lbSwgdDEpCisjZGVmaW5lICAgICAgICAgcHJlZmV0Y2h0MihtZW0pICAgICAgICAgICAgIG1teF9mZXRjaCAobWVtLCB0MikKKyNkZWZpbmUgICAgICAgICBwcmVmZXRjaG50YShtZW0pICAgICAgICAgICAgbW14X2ZldGNoIChtZW0sIG50YSkKKworI2RlZmluZSAgICAgICAgIHBzYWRid19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwc2FkYncsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzYWRid19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwc2FkYncsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwc2h1ZndfbTJyKHZhcixyZWcsaW1tKSAgICAgbW14X20ycmkocHNodWZ3LCB2YXIsIHJlZywgaW1tKQorI2RlZmluZSAgICAgICAgIHBzaHVmd19yMnIocmVncyxyZWdkLGltbSkgICBtbXhfcjJyaShwc2h1ZncsIHJlZ3MsIHJlZ2QsIGltbSkKKworI2RlZmluZSAgICAgICAgIHNmZW5jZSgpIF9fYXNtX18gX192b2xhdGlsZV9fICgic2ZlbmNlXG5cdCIpCisKKy8qIFNTRTIgKi8KKyNkZWZpbmUgICAgICAgICBwc2h1Zmh3X20ycih2YXIscmVnLGltbSkgICAgbW14X20ycmkocHNodWZodywgdmFyLCByZWcsIGltbSkKKyNkZWZpbmUgICAgICAgICBwc2h1Zmh3X3IycihyZWdzLHJlZ2QsaW1tKSAgbW14X3IycmkocHNodWZodywgcmVncywgcmVnZCwgaW1tKQorI2RlZmluZSAgICAgICAgIHBzaHVmbHdfbTJyKHZhcixyZWcsaW1tKSAgICBtbXhfbTJyaShwc2h1Zmx3LCB2YXIsIHJlZywgaW1tKQorI2RlZmluZSAgICAgICAgIHBzaHVmbHdfcjJyKHJlZ3MscmVnZCxpbW0pICBtbXhfcjJyaShwc2h1Zmx3LCByZWdzLCByZWdkLCBpbW0pCisKKyNkZWZpbmUgICAgICAgICBwc2h1ZmRfcjJyKHJlZ3MscmVnZCxpbW0pICAgbW14X3IycmkocHNodWZkLCByZWdzLCByZWdkLCBpbW0pCisKKyNkZWZpbmUgICAgICAgICBtb3ZkcWFfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAobW92ZHFhLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBtb3ZkcWFfcjJtKHJlZyx2YXIpICAgICAgICAgbW14X3IybSAobW92ZHFhLCByZWcsIHZhcikKKyNkZWZpbmUgICAgICAgICBtb3ZkcWFfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAobW92ZHFhLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIG1vdmRxdV9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChtb3ZkcXUsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIG1vdmRxdV9yMm0ocmVnLHZhcikgICAgICAgICBtbXhfcjJtIChtb3ZkcXUsIHJlZywgdmFyKQorI2RlZmluZSAgICAgICAgIG1vdmRxdV9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChtb3ZkcXUsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwbXVsbHdfcjJtKHJlZyx2YXIpICAgICAgICAgbW14X3IybSAocG11bGx3LCByZWcsIHZhcikKKworI2RlZmluZSAgICAgICAgIHBzbGxkcV9pMnIoaW1tLHJlZykgICAgICAgICBtbXhfaTJyIChwc2xsZHEsIGltbSwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmxkcV9pMnIoaW1tLHJlZykgICAgICAgICBtbXhfaTJyIChwc3JsZHEsIGltbSwgcmVnKQorCisjZGVmaW5lICAgICAgICAgcHVucGNrbHFkcV9yMnIocmVncyxyZWdkKSAgIG1teF9yMnIgKHB1bnBja2xxZHEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHVucGNraHFkcV9yMnIocmVncyxyZWdkKSAgIG1teF9yMnIgKHB1bnBja2hxZHEsIHJlZ3MsIHJlZ2QpCisKKworI2VuZGlmIC8qIEFWQ09ERUNfSTM4Nk1NWF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExY2YzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvS2NvbmZpZwpAQCAtMCwwICsxLDE4IEBACitjb25maWcgRVQxMzFYCisJdHJpc3RhdGUgIkFnZXJlIEVULTEzMTAgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IgorCWRlcGVuZHMgb24gTkVUREVWXzEwMDAgJiYgUENJCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQWdlcmUgRVQtMTMxMCBldGhlcm5ldCBhZGFwdGVycy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgZXQxMzF4LgorCitjb25maWcgRVQxMzFYX0RFQlVHCisJYm9vbCAiRW5hYmxlIGV0MTMxeCBkZWJ1Z2dpbmciCisJZGVwZW5kcyBvbiBFVDEzMVgKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBTYXkgWSBmb3IgZGV0YWlsZWQgZGVidWcgaW5mb3JtYXRpb24uCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgTi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDU3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L01ha2VmaWxlCkBAIC0wLDAgKzEsMTggQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBBZ2VyZSBFVC0xMzF4IGV0aGVybmV0IGRyaXZlcgorIworCitvYmotJChDT05GSUdfRVQxMzFYKSArPSBldDEzMXgubworCitldDEzMXgtb2JqcyA6PQlldDEzMTBfZWVwcm9tLm8gXAorCQlldDEzMTBfamFnY29yZS5vIFwKKwkJZXQxMzEwX21hYy5vIFwKKwkJZXQxMzEwX3BoeS5vIFwKKwkJZXQxMzEwX3BtLm8gXAorCQlldDEzMTBfcngubyBcCisJCWV0MTMxMF90eC5vIFwKKwkJZXQxMzF4X2NvbmZpZy5vIFwKKwkJZXQxMzF4X2RlYnVnLm8gXAorCQlldDEzMXhfaW5pdHBjaS5vIFwKKwkJZXQxMzF4X2lzci5vIFwKKwkJZXQxMzF4X25ldGRldi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzUyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L1JFQURNRQpAQCAtMCwwICsxLDI1IEBACitUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgRVQxMzEwIG5ldHdvcmsgZGV2aWNlLgorCitCYXNlZCBvbiB0aGUgZHJpdmVyIGZvdW5kIGF0IGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V0MTMxeC8KKworQ2xlYW5lZCB1cCBpbW1lbnNlbHkgYnkgT2xhZiBIYXJ0bWFuIDxvLmhhcnRtYW5uQHRlbG92aXRhbC5jb20+IGFuZCBDaHJpc3RvcGgKK0hlbGx3aWcgPGhjaEBpbmZyYWRlYWQub3JnPgorCitOb3RlLCB0aGUgcG93ZXJtYW5hZ2VtZW50IG9wdGlvbnMgd2VyZSByZW1vdmVkIGZyb20gdGhlIHZlbmRvciBwcm92aWRlZAorZHJpdmVyIGFzIHRoZXkgZGlkIG5vdCBidWlsZCBwcm9wZXJseSBhdCB0aGUgdGltZS4KKworVE9ETzoKKwktIGtlcm5lbCBjb2Rpbmcgc3R5bGUgY2xlYW51cHMKKwktIGZvcndhcmQgcG9ydCBmb3IgbGF0ZXN0IG5ldHdvcmsgZHJpdmVyIGNoYW5nZXMKKwktIGtpbGwgdXNlbGVzcyB0eXBlY2FzdHMgKGUuZy4gaW4gZXQxMzEwX3BoeS5jKQorCS0gYWxsb2NfZXRoZXJkZXYgaXMgaW5pdGlhbGl6aW5nIG1lbW9yeSB3aXRoIHplcm8/IT8KKwktIGFkZF90aW1lciBjYWxsIGluIGV0MTMxeF9uZXRkZXYuYyBpcyBjb3JyZWN0PworCS0gQWRkIHBvd2VyIHNhdmluZyBmdW5jdGlvbmFsaXR5IChzdXNwZW5kLCBzbGVlcCwgcmVzdW1lKQorCS0gSW1wbGVtZW50IGEgZmV3IG1vcmUga2VybmVsIFBhcmFtZXRlciAoc2V0IG1hYyApCisKK1BsZWFzZSBzZW5kIHBhdGNoZXMgdG86CisJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKworQW5kIENjOiBPbGFmIEhhcnRtYW5uIDxvLmhhcnRtYW5uQHRlbG92aXRhbC5jb20+IGFzIGhlIGhhcyB0aGlzIGRldmljZSBhbmQgY2FuCit0ZXN0IGFueSBjaGFuZ2VzLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzg1OTk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaApAQCAtMCwwICsxLDIzOTkgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX2FkZHJlc3NfbWFwLmggLSBDb250YWlucyB0aGUgcmVnaXN0ZXIgbWFwcGluZyBmb3IgdGhlIEVUMTMxMAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9FVDEzMTBfQUREUkVTU19NQVBfSF8KKyNkZWZpbmUgX0VUMTMxMF9BRERSRVNTX01BUF9IXworCisKKy8qIFNUQVJUIE9GIEdMT0JBTCBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCit0eXBlZGVmIHVuaW9uIF9RX0FERFJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIyOwkvLyBiaXRzIDEwLTMxCisJCXUzMiBhZGRyOjEwOwkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIGFkZHI6MTA7CS8vIGJpdHMgMC05CisJCXUzMiB1bnVzZWQ6MjI7CS8vIGJpdHMgMTAtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUV9BRERSX3QsICpQUV9BRERSX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4IHF1ZXVlIHN0YXJ0IGFkZHJlc3MgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAwMAorICogRGVmaW5lZCBlYXJsaWVyIChRX0FERFJfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eCBxdWV1ZSBlbmQgYWRkcmVzcyByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDA0CisgKiBEZWZpbmVkIGVhcmxpZXIgKFFfQUREUl90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHJ4IHF1ZXVlIHN0YXJ0IGFkZHJlc3MgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAwOAorICogRGVmaW5lZCBlYXJsaWVyIChRX0FERFJfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciByeCBxdWV1ZSBlbmQgYWRkcmVzcyByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDBDCisgKiBEZWZpbmVkIGVhcmxpZXIgKFFfQUREUl90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbCBzdGF0dXMgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAxMAorICovCit0eXBlZGVmIHVuaW9uIF9QTV9DU1JfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIyOwkJLy8gYml0cyAxMC0zMQorCQl1MzIgcG1famFnY29yZV9yeF9yZHk6MTsJLy8gYml0IDkKKwkJdTMyIHBtX2phZ2NvcmVfdHhfcmR5OjE7CS8vIGJpdCA4CisJCXUzMiBwbV9waHlfbHBlZF9lbjoxOwkvLyBiaXQgNworCQl1MzIgcG1fcGh5X3N3X2NvbWE6MTsJLy8gYml0IDYKKwkJdTMyIHBtX3J4Y2xrX2dhdGU6MTsJLy8gYml0IDUKKwkJdTMyIHBtX3R4Y2xrX2dhdGU6MTsJLy8gYml0IDQKKwkJdTMyIHBtX3N5c2Nsa19nYXRlOjE7CS8vIGJpdCAzCisJCXUzMiBwbV9qYWdjb3JlX3J4X2VuOjE7CS8vIGJpdCAyCisJCXUzMiBwbV9qYWdjb3JlX3R4X2VuOjE7CS8vIGJpdCAxCisJCXUzMiBwbV9naWdlcGh5X2VuOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgcG1fZ2lnZXBoeV9lbjoxOwkvLyBiaXQgMAorCQl1MzIgcG1famFnY29yZV90eF9lbjoxOwkvLyBiaXQgMQorCQl1MzIgcG1famFnY29yZV9yeF9lbjoxOwkvLyBiaXQgMgorCQl1MzIgcG1fc3lzY2xrX2dhdGU6MTsJLy8gYml0IDMKKwkJdTMyIHBtX3R4Y2xrX2dhdGU6MTsJLy8gYml0IDQKKwkJdTMyIHBtX3J4Y2xrX2dhdGU6MTsJLy8gYml0IDUKKwkJdTMyIHBtX3BoeV9zd19jb21hOjE7CS8vIGJpdCA2CisJCXUzMiBwbV9waHlfbHBlZF9lbjoxOwkvLyBiaXQgNworCQl1MzIgcG1famFnY29yZV90eF9yZHk6MTsJLy8gYml0IDgKKwkJdTMyIHBtX2phZ2NvcmVfcnhfcmR5OjE7CS8vIGJpdCA5CisJCXUzMiB1bnVzZWQ6MjI7CQkvLyBiaXRzIDEwLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFBNX0NTUl90LCAqUFBNX0NTUl90OworCisvKgorICogc3RydWN0dXJlIGZvciBpbnRlcnJ1cHQgc3RhdHVzIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMTgKKyAqLwordHlwZWRlZiB1bmlvbiBfSU5URVJSVVBUX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDU6MTE7CQkJLy8gYml0cyAyMS0zMQorCQl1MzIgc2x2X3RpbWVvdXQ6MTsJCQkvLyBiaXQgMjAKKwkJdTMyIG1hY19zdGF0X2ludGVycnVwdDoxOwkJLy8gYml0IDE5CisJCXUzMiByeG1hY19pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxOAorCQl1MzIgdHhtYWNfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTcKKwkJdTMyIHBoeV9pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxNgorCQl1MzIgd2FrZV9vbl9sYW46MTsJCQkvLyBiaXQgMTUKKwkJdTMyIHdhdGNoZG9nX2ludGVycnVwdDoxOwkJLy8gYml0IDE0CisJCXUzMiB1bnVzZWQ0OjQ7CQkJLy8gYml0cyAxMC0xMworCQl1MzIgcnhkbWFfZXJyOjE7CQkJLy8gYml0IDkKKwkJdTMyIHJ4ZG1hX3BrdF9zdGF0X3JpbmdfbG93OjE7CS8vIGJpdCA4CisJCXUzMiByeGRtYV9mYl9yaW5nMV9sb3c6MTsJCS8vIGJpdCA3CisJCXUzMiByeGRtYV9mYl9yaW5nMF9sb3c6MTsJCS8vIGJpdCA2CisJCXUzMiByeGRtYV94ZnJfZG9uZToxOwkJLy8gYml0IDUKKwkJdTMyIHR4ZG1hX2VycjoxOwkJCS8vIGJpdCA0CisJCXUzMiB0eGRtYV9pc3I6MTsJCQkvLyBiaXQgMworCQl1MzIgdW51c2VkMzoxOwkJCS8vIGJpdCAyCisJCXUzMiB1bnVzZWQyOjE7CQkJLy8gYml0IDEKKwkJdTMyIHVudXNlZDE6MTsJCQkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHVudXNlZDE6MTsJCQkvLyBiaXQgMAorCQl1MzIgdW51c2VkMjoxOwkJCS8vIGJpdCAxCisJCXUzMiB1bnVzZWQzOjE7CQkJLy8gYml0IDIKKwkJdTMyIHR4ZG1hX2lzcjoxOwkJCS8vIGJpdCAzCisJCXUzMiB0eGRtYV9lcnI6MTsJCQkvLyBiaXQgNAorCQl1MzIgcnhkbWFfeGZyX2RvbmU6MTsJCS8vIGJpdCA1CisJCXUzMiByeGRtYV9mYl9yaW5nMF9sb3c6MTsJCS8vIGJpdCA2CisJCXUzMiByeGRtYV9mYl9yaW5nMV9sb3c6MTsJCS8vIGJpdCA3CisJCXUzMiByeGRtYV9wa3Rfc3RhdF9yaW5nX2xvdzoxOwkvLyBiaXQgOAorCQl1MzIgcnhkbWFfZXJyOjE7CQkJLy8gYml0IDkKKwkJdTMyIHVudXNlZDQ6NDsJCQkvLyBiaXRzIDEwLTEzCisJCXUzMiB3YXRjaGRvZ19pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxNAorCQl1MzIgd2FrZV9vbl9sYW46MTsJCQkvLyBiaXQgMTUKKwkJdTMyIHBoeV9pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxNgorCQl1MzIgdHhtYWNfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTcKKwkJdTMyIHJ4bWFjX2ludGVycnVwdDoxOwkJLy8gYml0IDE4CisJCXUzMiBtYWNfc3RhdF9pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxOQorCQl1MzIgc2x2X3RpbWVvdXQ6MTsJCQkvLyBiaXQgMjAKKwkJdTMyIHVudXNlZDU6MTE7CQkJLy8gYml0cyAyMS0zMQorI2VuZGlmCisJfSBiaXRzOworfSBJTlRFUlJVUFRfdCwgKlBJTlRFUlJVUFRfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgaW50ZXJydXB0IG1hc2sgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAxQworICogRGVmaW5lZCBlYXJsaWVyIChJTlRFUlJVUFRfdCksIGJ1dCAnd2F0Y2hkb2dfaW50ZXJydXB0JyBpcyBub3QgdXNlZC4KKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBpbnRlcnJ1cHQgYWxpYXMgY2xlYXIgbWFzayByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDIwCisgKiBEZWZpbmVkIGVhcmxpZXIgKElOVEVSUlVQVF90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGludGVycnVwdCBzdGF0dXMgYWxpYXMgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAyNAorICogRGVmaW5lZCBlYXJsaWVyIChJTlRFUlJVUFRfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBzb2Z0d2FyZSByZXNldCByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDI4CisgKi8KK3R5cGVkZWYgdW5pb24gX1NXX1JFU0VUX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHNlbGZjbHJfZGlzYWJsZToxOwkvLyBiaXQgMzEKKwkJdTMyIHVudXNlZDoyNDsJCS8vIGJpdHMgNy0zMAorCQl1MzIgbW1jX3N3X3Jlc2V0OjE7CS8vIGJpdCA2CisJCXUzMiBtYWNfc3RhdF9zd19yZXNldDoxOwkvLyBiaXQgNQorCQl1MzIgbWFjX3N3X3Jlc2V0OjE7CS8vIGJpdCA0CisJCXUzMiByeG1hY19zd19yZXNldDoxOwkvLyBiaXQgMworCQl1MzIgdHhtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDIKKwkJdTMyIHJ4ZG1hX3N3X3Jlc2V0OjE7CS8vIGJpdCAxCisJCXUzMiB0eGRtYV9zd19yZXNldDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHR4ZG1hX3N3X3Jlc2V0OjE7CS8vIGJpdCAwCisJCXUzMiByeGRtYV9zd19yZXNldDoxOwkvLyBiaXQgMQorCQl1MzIgdHhtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDIKKwkJdTMyIHJ4bWFjX3N3X3Jlc2V0OjE7CS8vIGJpdCAzCisJCXUzMiBtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDQKKwkJdTMyIG1hY19zdGF0X3N3X3Jlc2V0OjE7CS8vIGJpdCA1CisJCXUzMiBtbWNfc3dfcmVzZXQ6MTsJLy8gYml0IDYKKwkJdTMyIHVudXNlZDoyNDsJCS8vIGJpdHMgNy0zMAorCQl1MzIgc2VsZmNscl9kaXNhYmxlOjE7CS8vIGJpdCAzMQorI2VuZGlmCisJfSBiaXRzOworfSBTV19SRVNFVF90LCAqUFNXX1JFU0VUX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFNMViBUaW1lciByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDJDCisgKi8KK3R5cGVkZWYgdW5pb24gX1NMVl9USU1FUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6ODsJLy8gYml0cyAyNC0zMQorCQl1MzIgdGltZXJfaW5pOjI0OwkvLyBiaXRzIDAtMjMKKyNlbHNlCisJCXUzMiB0aW1lcl9pbmk6MjQ7CS8vIGJpdHMgMC0yMworCQl1MzIgdW51c2VkOjg7CS8vIGJpdHMgMjQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gU0xWX1RJTUVSX3QsICpQU0xWX1RJTUVSX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1TSSBDb25maWd1cmF0aW9uIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMzAKKyAqLwordHlwZWRlZiB1bmlvbiBfTVNJX0NPTkZJR190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQxOjEzOwkvLyBiaXRzIDE5LTMxCisJCXUzMiBtc2lfdGM6MzsJLy8gYml0cyAxNi0xOAorCQl1MzIgdW51c2VkMjoxMTsJLy8gYml0cyA1LTE1CisJCXUzMiBtc2lfdmVjdG9yOjU7CS8vIGJpdHMgMC00CisjZWxzZQorCQl1MzIgbXNpX3ZlY3Rvcjo1OwkvLyBiaXRzIDAtNAorCQl1MzIgdW51c2VkMjoxMTsJLy8gYml0cyA1LTE1CisJCXUzMiBtc2lfdGM6MzsJLy8gYml0cyAxNi0xOAorCQl1MzIgdW51c2VkMToxMzsJLy8gYml0cyAxOS0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNU0lfQ09ORklHX3QsICpQTVNJX0NPTkZJR190OworCisvKgorICogc3RydWN0dXJlIGZvciBMb29wYmFjayByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDM0CisgKi8KK3R5cGVkZWYgdW5pb24gX0xPT1BCQUNLX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDozMDsJCS8vIGJpdHMgMi0zMQorCQl1MzIgZG1hX2xvb3BiYWNrOjE7CS8vIGJpdCAxCisJCXUzMiBtYWNfbG9vcGJhY2s6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBtYWNfbG9vcGJhY2s6MTsJLy8gYml0IDAKKwkJdTMyIGRtYV9sb29wYmFjazoxOwkvLyBiaXQgMQorCQl1MzIgdW51c2VkOjMwOwkJLy8gYml0cyAyLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IExPT1BCQUNLX3QsICpQTE9PUEJBQ0tfdDsKKworLyoKKyAqIEdMT0JBTCBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqIExvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMDAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0dMT0JBTF90IHsJCQkvLyBMb2NhdGlvbjoKKwlRX0FERFJfdCB0eHFfc3RhcnRfYWRkcjsJCS8vICAweDAwMDAKKwlRX0FERFJfdCB0eHFfZW5kX2FkZHI7CQkJLy8gIDB4MDAwNAorCVFfQUREUl90IHJ4cV9zdGFydF9hZGRyOwkJLy8gIDB4MDAwOAorCVFfQUREUl90IHJ4cV9lbmRfYWRkcjsJCQkvLyAgMHgwMDBDCisJUE1fQ1NSX3QgcG1fY3NyOwkJCS8vICAweDAwMTAKKwl1MzIgdW51c2VkOwkJCQkvLyAgMHgwMDE0CisJSU5URVJSVVBUX3QgaW50X3N0YXR1czsJCQkvLyAgMHgwMDE4CisJSU5URVJSVVBUX3QgaW50X21hc2s7CQkJLy8gIDB4MDAxQworCUlOVEVSUlVQVF90IGludF9hbGlhc19jbHJfZW47CQkvLyAgMHgwMDIwCisJSU5URVJSVVBUX3QgaW50X3N0YXR1c19hbGlhczsJCS8vICAweDAwMjQKKwlTV19SRVNFVF90IHN3X3Jlc2V0OwkJCS8vICAweDAwMjgKKwlTTFZfVElNRVJfdCBzbHZfdGltZXI7CQkJLy8gIDB4MDAyQworCU1TSV9DT05GSUdfdCBtc2lfY29uZmlnOwkJLy8gIDB4MDAzMAorCUxPT1BCQUNLX3QgbG9vcGJhY2s7CQkJLy8gIDB4MDAzNAorCXUzMiB3YXRjaGRvZ190aW1lcjsJCQkvLyAgMHgwMDM4Cit9IEdMT0JBTF90LCAqUEdMT0JBTF90OworCisvKiBFTkQgT0YgR0xPQkFMIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKworLyogU1RBUlQgT0YgVFhETUEgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgY29udHJvbCBzdGF0dXMgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDAwCisgKi8KK3R5cGVkZWYgdW5pb24gX1RYRE1BX0NTUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQyOjE5OwkJLy8gYml0cyAxMy0zMQorCQl1MzIgdHJhZmZpY19jbGFzczo0OwkvLyBiaXRzIDktMTIKKwkJdTMyIHNuZ2xfZXBrdF9tb2RlOjE7CS8vIGJpdCA4CisJCXUzMiBjYWNoZV90aHJzaGxkOjQ7CS8vIGJpdHMgNC03CisJCXUzMiB1bnVzZWQxOjI7CQkvLyBiaXRzIDItMworCQl1MzIgZHJvcF9UTFBfZGlzYWJsZToxOwkvLyBiaXQgMQorCQl1MzIgaGFsdDoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBoYWx0OjE7CQkvLyBiaXQgMAorCQl1MzIgZHJvcF9UTFBfZGlzYWJsZToxOwkvLyBiaXQgMQorCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyAyLTMKKwkJdTMyIGNhY2hlX3RocnNobGQ6NDsJLy8gYml0cyA0LTcKKwkJdTMyIHNuZ2xfZXBrdF9tb2RlOjE7CS8vIGJpdCA4CisJCXUzMiB0cmFmZmljX2NsYXNzOjQ7CS8vIGJpdHMgOS0xMgorCQl1MzIgdW51c2VkMjoxOTsJCS8vIGJpdHMgMTMtMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhETUFfQ1NSX3QsICpQVFhETUFfQ1NSX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHBhY2tldCByaW5nIGJhc2UgYWRkcmVzcyBoaSByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMDQKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHBhY2tldCByaW5nIGJhc2UgYWRkcmVzcyBsb3cgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDA4CisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSBwYWNrZXQgcmluZyBudW1iZXIgb2YgZGVzY3JpcHRvciByZWcgaW4gdHhkbWEgYWRkcmVzcworICogbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAwQworICovCit0eXBlZGVmIHVuaW9uIF9UWERNQV9QUl9OVU1fREVTX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMjsJLy8gYml0cyAxMC0zMQorCQl1MzIgcHJfbmRlczoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiBwcl9uZGVzOjEwOwkvLyBiaXRzIDAtOQorCQl1MzIgdW51c2VkOjIyOwkvLyBiaXRzIDEwLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYRE1BX1BSX05VTV9ERVNfdCwgKlBUWERNQV9QUl9OVU1fREVTX3Q7CisKKwordHlwZWRlZiB1bmlvbiBfRE1BMTBXX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMTsJLy8gYml0cyAxMS0zMQorCQl1MzIgd3JhcDoxOwkvLyBiaXQgMTAKKwkJdTMyIHZhbDoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiB2YWw6MTA7CS8vIGJpdHMgMC05CisJCXUzMiB3cmFwOjE7CS8vIGJpdCAxMAorCQl1MzIgdW51c2VkOjIxOwkvLyBiaXRzIDExLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IERNQTEwV190LCAqUERNQTEwV190OworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSB0eCBxdWV1ZSB3cml0ZSBhZGRyZXNzIHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAxMAorICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSB0eCBxdWV1ZSB3cml0ZSBhZGRyZXNzIGV4dGVybmFsIHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAxNAorICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSB0eCBxdWV1ZSByZWFkIGFkZHJlc3MgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDE4CisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHN0YXR1cyB3cml0ZWJhY2sgYWRkcmVzcyBoaSByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMUMKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHN0YXR1cyB3cml0ZWJhY2sgYWRkcmVzcyBsbyByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMjAKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHNlcnZpY2UgcmVxdWVzdCByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMjQKKyAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgc2VydmljZSBjb21wbGV0ZSByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMjgKKyAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCisgKi8KKwordHlwZWRlZiB1bmlvbiBfRE1BNFdfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjI3OwkvLyBiaXRzIDUtMzEKKwkJdTMyIHdyYXA6MTsJLy8gYml0IDQKKwkJdTMyIHZhbDo0OwkJLy8gYml0IDAtMworI2Vsc2UKKwkJdTMyIHZhbDo0OwkJLy8gYml0cyAwLTMKKwkJdTMyIHdyYXA6MTsJLy8gYml0IDQKKwkJdTMyIHVudXNlZDoyNzsJLy8gYml0cyA1LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IERNQTRXX3QsICpQRE1BNFdfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgdHggZGVzY3JpcHRvciBjYWNoZSByZWFkIGluZGV4IHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAyQworICogRGVmaW5lZCBlYXJsaWVyIChETUE0V190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHR4IGRlc2NyaXB0b3IgY2FjaGUgd3JpdGUgaW5kZXggcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDMwCisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTRXX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgZXJyb3IgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDM0CisgKi8KK3R5cGVkZWYgdW5pb24gX1RYRE1BX0VSUk9SX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDM6MjI7CQkvLyBiaXRzIDEwLTMxCisJCXUzMiBXcmJrUmV3aW5kOjE7CS8vIGJpdCA5CisJCXUzMiBXcmJrUmVzZW5kOjE7CS8vIGJpdCA4CisJCXUzMiB1bnVzZWQyOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgRGVzY3JSZXdpbmQ6MTsJLy8gYml0IDUKKwkJdTMyIERlc2NyUmVzZW5kOjE7CS8vIGJpdCA0CisJCXUzMiB1bnVzZWQxOjI7CQkvLyBiaXRzIDItMworCQl1MzIgUHlsZFJld2luZDoxOwkvLyBiaXQgMQorCQl1MzIgUHlsZFJlc2VuZDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIFB5bGRSZXNlbmQ6MTsJLy8gYml0IDAKKwkJdTMyIFB5bGRSZXdpbmQ6MTsJLy8gYml0IDEKKwkJdTMyIHVudXNlZDE6MjsJCS8vIGJpdHMgMi0zCisJCXUzMiBEZXNjclJlc2VuZDoxOwkvLyBiaXQgNAorCQl1MzIgRGVzY3JSZXdpbmQ6MTsJLy8gYml0IDUKKwkJdTMyIHVudXNlZDI6MjsJCS8vIGJpdHMgNi03CisJCXUzMiBXcmJrUmVzZW5kOjE7CS8vIGJpdCA4CisJCXUzMiBXcmJrUmV3aW5kOjE7CS8vIGJpdCA5CisJCXUzMiB1bnVzZWQzOjIyOwkJLy8gYml0cyAxMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWERNQV9FUlJPUl90LCAqUFRYRE1BX0VSUk9SX3Q7CisKKy8qCisgKiBUeCBETUEgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKiBMb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDAwCisgKi8KK3R5cGVkZWYgc3RydWN0IF9UWERNQV90IHsJCS8vIExvY2F0aW9uOgorCVRYRE1BX0NTUl90IGNzcjsJCS8vICAweDEwMDAKKwl1MzIgcHJfYmFzZV9oaTsJCQkvLyAgMHgxMDA0CisJdTMyIHByX2Jhc2VfbG87CQkJLy8gIDB4MTAwOAorCVRYRE1BX1BSX05VTV9ERVNfdCBwcl9udW1fZGVzOwkvLyAgMHgxMDBDCisJRE1BMTBXX3QgdHhxX3dyX2FkZHI7CQkvLyAgMHgxMDEwCisJRE1BMTBXX3QgdHhxX3dyX2FkZHJfZXh0OwkvLyAgMHgxMDE0CisJRE1BMTBXX3QgdHhxX3JkX2FkZHI7CQkvLyAgMHgxMDE4CisJdTMyIGRtYV93Yl9iYXNlX2hpOwkJLy8gIDB4MTAxQworCXUzMiBkbWFfd2JfYmFzZV9sbzsJCS8vICAweDEwMjAKKwlETUExMFdfdCBzZXJ2aWNlX3JlcXVlc3Q7CS8vICAweDEwMjQKKwlETUExMFdfdCBzZXJ2aWNlX2NvbXBsZXRlOwkvLyAgMHgxMDI4CisJRE1BNFdfdCBjYWNoZV9yZF9pbmRleDsJCS8vICAweDEwMkMKKwlETUE0V190IGNhY2hlX3dyX2luZGV4OwkJLy8gIDB4MTAzMAorCVRYRE1BX0VSUk9SX3QgVHhEbWFFcnJvcjsJLy8gIDB4MTAzNAorCXUzMiBEZXNjQWJvcnRDb3VudDsJCS8vICAweDEwMzgKKwl1MzIgUGF5bG9hZEFib3J0Q250OwkJLy8gIDB4MTAzYworCXUzMiBXcml0ZUJhY2tBYm9ydENudDsJCS8vICAweDEwNDAKKwl1MzIgRGVzY1RpbWVvdXRDbnQ7CQkvLyAgMHgxMDQ0CisJdTMyIFBheWxvYWRUaW1lb3V0Q250OwkJLy8gIDB4MTA0OAorCXUzMiBXcml0ZUJhY2tUaW1lb3V0Q250OwkvLyAgMHgxMDRjCisJdTMyIERlc2NFcnJvckNvdW50OwkJLy8gIDB4MTA1MAorCXUzMiBQYXlsb2FkRXJyb3JDbnQ7CQkvLyAgMHgxMDU0CisJdTMyIFdyaXRlQmFja0Vycm9yQ250OwkJLy8gIDB4MTA1OAorCXUzMiBEcm9wcGVkVExQQ291bnQ7CQkvLyAgMHgxMDVjCisJRE1BMTBXX3QgTmV3U2VydmljZUNvbXBsZXRlOwkvLyAgMHgxMDYwCisJdTMyIEV0aGVybmV0UGFja2V0Q291bnQ7CS8vICAweDEwNjQKK30gVFhETUFfdCwgKlBUWERNQV90OworCisvKiBFTkQgT0YgVFhETUEgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworCisvKiBTVEFSVCBPRiBSWERNQSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogc3RydWN0dXJlIGZvciBjb250cm9sIHN0YXR1cyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIExvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMDAKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfQ1NSX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDI6MTQ7CQkvLyBiaXRzIDE4LTMxCisJCXUzMiBoYWx0X3N0YXR1czoxOwkvLyBiaXQgMTcKKwkJdTMyIHBrdF9kb25lX2ZsdXNoOjE7CS8vIGJpdCAxNgorCQl1MzIgcGt0X2Ryb3BfZGlzYWJsZToxOwkvLyBiaXQgMTUKKwkJdTMyIHVudXNlZDE6MTsJCS8vIGJpdCAxNAorCQl1MzIgZmJyMV9lbmFibGU6MTsJLy8gYml0IDEzCisJCXUzMiBmYnIxX3NpemU6MjsJLy8gYml0cyAxMS0xMgorCQl1MzIgZmJyMF9lbmFibGU6MTsJLy8gYml0IDEwCisJCXUzMiBmYnIwX3NpemU6MjsJLy8gYml0cyA4LTkKKwkJdTMyIGRtYV9iaWdfZW5kaWFuOjE7CS8vIGJpdCA3CisJCXUzMiBwa3RfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNgorCQl1MzIgcHNyX2JpZ19lbmRpYW46MTsJLy8gYml0IDUKKwkJdTMyIGZicl9iaWdfZW5kaWFuOjE7CS8vIGJpdCA0CisJCXUzMiB0YzozOwkJLy8gYml0cyAxLTMKKwkJdTMyIGhhbHQ6MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MzIgaGFsdDoxOwkJLy8gYml0IDAKKwkJdTMyIHRjOjM7CQkvLyBiaXRzIDEtMworCQl1MzIgZmJyX2JpZ19lbmRpYW46MTsJLy8gYml0IDQKKwkJdTMyIHBzcl9iaWdfZW5kaWFuOjE7CS8vIGJpdCA1CisJCXUzMiBwa3RfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNgorCQl1MzIgZG1hX2JpZ19lbmRpYW46MTsJLy8gYml0IDcKKwkJdTMyIGZicjBfc2l6ZToyOwkvLyBiaXRzIDgtOQorCQl1MzIgZmJyMF9lbmFibGU6MTsJLy8gYml0IDEwCisJCXUzMiBmYnIxX3NpemU6MjsJLy8gYml0cyAxMS0xMgorCQl1MzIgZmJyMV9lbmFibGU6MTsJLy8gYml0IDEzCisJCXUzMiB1bnVzZWQxOjE7CQkvLyBiaXQgMTQKKwkJdTMyIHBrdF9kcm9wX2Rpc2FibGU6MTsJLy8gYml0IDE1CisJCXUzMiBwa3RfZG9uZV9mbHVzaDoxOwkvLyBiaXQgMTYKKwkJdTMyIGhhbHRfc3RhdHVzOjE7CS8vIGJpdCAxNworCQl1MzIgdW51c2VkMjoxNDsJCS8vIGJpdHMgMTgtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfQ1NSX3QsICpQUlhETUFfQ1NSX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGRtYSB3cml0ZWJhY2sgbG8gcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDA0CisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBkbWEgd3JpdGViYWNrIGhpIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAwOAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgbnVtYmVyIG9mIHBhY2tldHMgZG9uZSByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMEMKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfTlVNX1BLVF9ET05FX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyNDsJLy8gYml0cyA4LTMxCisJCXUzMiBudW1fZG9uZTo4OwkvLyBiaXRzIDAtNworI2Vsc2UKKwkJdTMyIG51bV9kb25lOjg7CS8vIGJpdHMgMC03CisJCXUzMiB1bnVzZWQ6MjQ7CS8vIGJpdHMgOC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9OVU1fUEtUX0RPTkVfdCwgKlBSWERNQV9OVU1fUEtUX0RPTkVfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgbWF4IHBhY2tldCB0aW1lIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAxMAorICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9NQVhfUEtUX1RJTUVfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjE0OwkJLy8gYml0cyAxOC0zMQorCQl1MzIgdGltZV9kb25lOjE4OwkvLyBiaXRzIDAtMTcKKyNlbHNlCisJCXUzMiB0aW1lX2RvbmU6MTg7CS8vIGJpdHMgMC0xNworCQl1MzIgdW51c2VkOjE0OwkJLy8gYml0cyAxOC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9NQVhfUEtUX1RJTUVfdCwgKlBSWERNQV9NQVhfUEtUX1RJTUVfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcnggcXVldWUgcmVhZCBhZGRyZXNzIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAxNAorICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciByeCBxdWV1ZSByZWFkIGFkZHJlc3MgZXh0ZXJuYWwgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDE4CisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHJ4IHF1ZXVlIHdyaXRlIGFkZHJlc3MgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDFDCisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBiYXNlIGFkZHJlc3MgbG8gcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDIwCisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBwYWNrZXQgc3RhdHVzIHJpbmcgYmFzZSBhZGRyZXNzIGhpIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAyNAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcGFja2V0IHN0YXR1cyByaW5nIG51bWJlciBvZiBkZXNjcmlwdG9ycyByZWcgaW4gcnhkbWEgYWRkcmVzcworICogbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAyOAorICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9QU1JfTlVNX0RFU190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjA7CQkvLyBiaXRzIDEyLTMxCisJCXUzMiBwc3JfbmRlczoxMjsJLy8gYml0IDAtMTEKKyNlbHNlCisJCXUzMiBwc3JfbmRlczoxMjsJLy8gYml0IDAtMTEKKwkJdTMyIHVudXNlZDoyMDsJCS8vIGJpdHMgMTItMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfUFNSX05VTV9ERVNfdCwgKlBSWERNQV9QU1JfTlVNX0RFU190OworCisvKgorICogc3RydWN0dXJlIGZvciBwYWNrZXQgc3RhdHVzIHJpbmcgYXZhaWxhYmxlIG9mZnNldCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMkMKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfUFNSX0FWQUlMX09GRlNFVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MTk7CQkvLyBiaXRzIDEzLTMxCisJCXUzMiBwc3JfYXZhaWxfd3JhcDoxOwkvLyBiaXQgMTIKKwkJdTMyIHBzcl9hdmFpbDoxMjsJLy8gYml0IDAtMTEKKyNlbHNlCisJCXUzMiBwc3JfYXZhaWw6MTI7CS8vIGJpdCAwLTExCisJCXUzMiBwc3JfYXZhaWxfd3JhcDoxOwkvLyBiaXQgMTIKKwkJdTMyIHVudXNlZDoxOTsJCS8vIGJpdHMgMTMtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfUFNSX0FWQUlMX09GRlNFVF90LCAqUFJYRE1BX1BTUl9BVkFJTF9PRkZTRVRfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcGFja2V0IHN0YXR1cyByaW5nIGZ1bGwgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAzMAorICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9QU1JfRlVMTF9PRkZTRVRfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjE5OwkJLy8gYml0cyAxMy0zMQorCQl1MzIgcHNyX2Z1bGxfd3JhcDoxOwkvLyBiaXQgMTIKKwkJdTMyIHBzcl9mdWxsOjEyOwkvLyBiaXQgMC0xMQorI2Vsc2UKKwkJdTMyIHBzcl9mdWxsOjEyOwkvLyBiaXQgMC0xMQorCQl1MzIgcHNyX2Z1bGxfd3JhcDoxOwkvLyBiaXQgMTIKKwkJdTMyIHVudXNlZDoxOTsJCS8vIGJpdHMgMTMtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfUFNSX0ZVTExfT0ZGU0VUX3QsICpQUlhETUFfUFNSX0ZVTExfT0ZGU0VUX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBhY2Nlc3MgaW5kZXggcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDM0CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYRE1BX1BTUl9BQ0NFU1NfSU5ERVhfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjI3OwkvLyBiaXRzIDUtMzEKKwkJdTMyIHBzcl9haTo1OwkvLyBiaXRzIDAtNAorI2Vsc2UKKwkJdTMyIHBzcl9haTo1OwkvLyBiaXRzIDAtNAorCQl1MzIgdW51c2VkOjI3OwkvLyBiaXRzIDUtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfUFNSX0FDQ0VTU19JTkRFWF90LCAqUFJYRE1BX1BTUl9BQ0NFU1NfSU5ERVhfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcGFja2V0IHN0YXR1cyByaW5nIG1pbmltdW0gZGVzY3JpcHRvcnMgcmVnIGluIHJ4ZG1hIGFkZHJlc3MKKyAqIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMzgKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfUFNSX01JTl9ERVNfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIwOwkvLyBiaXRzIDEyLTMxCisJCXUzMiBwc3JfbWluOjEyOwkvLyBiaXRzIDAtMTEKKyNlbHNlCisJCXUzMiBwc3JfbWluOjEyOwkvLyBiaXRzIDAtMTEKKwkJdTMyIHVudXNlZDoyMDsJLy8gYml0cyAxMi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9QU1JfTUlOX0RFU190LCAqUFJYRE1BX1BTUl9NSU5fREVTX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgYmFzZSBsbyBhZGRyZXNzIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAzQworICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyBiYXNlIGhpIGFkZHJlc3MgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDQwCisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIG51bWJlciBvZiBkZXNjcmlwdG9ycyByZWcgaW4gcnhkbWEgYWRkcmVzcworICogbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA0NAorICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9GQlJfTlVNX0RFU190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjI7CQkvLyBiaXRzIDEwLTMxCisJCXUzMiBmYnJfbmRlc2M6MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgZmJyX25kZXNjOjEwOwkvLyBiaXRzIDAtOQorCQl1MzIgdW51c2VkOjIyOwkJLy8gYml0cyAxMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9GQlJfTlVNX0RFU190LCAqUFJYRE1BX0ZCUl9OVU1fREVTX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMCBhdmFpbGFibGUgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA0OAorICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIDAgZnVsbCBvZmZzZXQgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDRDCisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIGNhY2hlIDAgZnVsbCBvZmZzZXQgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDUwCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYRE1BX0ZCQ19SRF9JTkRFWF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6Mjc7CS8vIGJpdHMgNS0zMQorCQl1MzIgZmJjX3JkaTo1OwkvLyBiaXQgMC00CisjZWxzZQorCQl1MzIgZmJjX3JkaTo1OwkvLyBiaXQgMC00CisJCXUzMiB1bnVzZWQ6Mjc7CS8vIGJpdHMgNS0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWERNQV9GQkNfUkRfSU5ERVhfdCwgKlBSWERNQV9GQkNfUkRfSU5ERVhfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyAwIG1pbmltdW0gZGVzY3JpcHRvciByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNTQKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfRkJSX01JTl9ERVNfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIyOwkvLyBiaXRzIDEwLTMxCisJCXUzMiBmYnJfbWluOjEwOwkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIGZicl9taW46MTA7CS8vIGJpdHMgMC05CisJCXUzMiB1bnVzZWQ6MjI7CS8vIGJpdHMgMTAtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfRkJSX01JTl9ERVNfdCwgKlBSWERNQV9GQlJfTUlOX0RFU190OworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIDEgYmFzZSBhZGRyZXNzIGxvIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA1OCAtIDB4MjA1QworICogRGVmaW5lZCBlYXJsaWVyIChSWERNQV9GQlJfQkFTRV9MT190IGFuZCBSWERNQV9GQlJfQkFTRV9ISV90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgcmVnIGluIHJ4ZG1hIGFkZHJlc3MKKyAqIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNjAKKyAqIERlZmluZWQgZWFybGllciAoUlhETUFfRkJSX05VTV9ERVNfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIDEgYXZhaWxhYmxlIG9mZnNldCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNjQKKyAqIERlZmluZWQgRWFybGllciAoUlhETUFfRkJSX0FWQUlMX09GRlNFVF90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMSBmdWxsIG9mZnNldCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNjgKKyAqIERlZmluZWQgRWFybGllciAoUlhETUFfRkJSX0ZVTExfT0ZGU0VUX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgY2FjaGUgMSByZWFkIGluZGV4IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA2QworICogRGVmaW5lZCBFYXJsaWVyIChSWERNQV9GQkNfUkRfSU5ERVhfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIDEgbWluaW11bSBkZXNjcmlwdG9yIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA3MAorICogRGVmaW5lZCBFYXJsaWVyIChSWERNQV9GQlJfTUlOX0RFU190KQorICovCisKKy8qCisgKiBSeCBETUEgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKiBMb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDAwCisgKi8KK3R5cGVkZWYgc3RydWN0IF9SWERNQV90IHsJCQkJLy8gTG9jYXRpb246CisJUlhETUFfQ1NSX3QgY3NyOwkJCQkvLyAgMHgyMDAwCisJdTMyIGRtYV93Yl9iYXNlX2xvOwkJCQkvLyAgMHgyMDA0CisJdTMyIGRtYV93Yl9iYXNlX2hpOwkJCQkvLyAgMHgyMDA4CisJUlhETUFfTlVNX1BLVF9ET05FX3QgbnVtX3BrdF9kb25lOwkJLy8gIDB4MjAwQworCVJYRE1BX01BWF9QS1RfVElNRV90IG1heF9wa3RfdGltZTsJCS8vICAweDIwMTAKKwlETUExMFdfdCByeHFfcmRfYWRkcjsJCQkJLy8gIDB4MjAxNAorCURNQTEwV190IHJ4cV9yZF9hZGRyX2V4dDsJCQkvLyAgMHgyMDE4CisJRE1BMTBXX3QgcnhxX3dyX2FkZHI7CQkJCS8vICAweDIwMUMKKwl1MzIgcHNyX2Jhc2VfbG87CQkJCS8vICAweDIwMjAKKwl1MzIgcHNyX2Jhc2VfaGk7CQkJCS8vICAweDIwMjQKKwlSWERNQV9QU1JfTlVNX0RFU190IHBzcl9udW1fZGVzOwkJLy8gIDB4MjAyOAorCVJYRE1BX1BTUl9BVkFJTF9PRkZTRVRfdCBwc3JfYXZhaWxfb2Zmc2V0OwkvLyAgMHgyMDJDCisJUlhETUFfUFNSX0ZVTExfT0ZGU0VUX3QgcHNyX2Z1bGxfb2Zmc2V0OwkvLyAgMHgyMDMwCisJUlhETUFfUFNSX0FDQ0VTU19JTkRFWF90IHBzcl9hY2Nlc3NfaW5kZXg7CS8vICAweDIwMzQKKwlSWERNQV9QU1JfTUlOX0RFU190IHBzcl9taW5fZGVzOwkJLy8gIDB4MjAzOAorCXUzMiBmYnIwX2Jhc2VfbG87CQkJCS8vICAweDIwM0MKKwl1MzIgZmJyMF9iYXNlX2hpOwkJCQkvLyAgMHgyMDQwCisJUlhETUFfRkJSX05VTV9ERVNfdCBmYnIwX251bV9kZXM7CQkvLyAgMHgyMDQ0CisJRE1BMTBXX3QgZmJyMF9hdmFpbF9vZmZzZXQ7CQkJLy8gIDB4MjA0OAorCURNQTEwV190IGZicjBfZnVsbF9vZmZzZXQ7CQkJLy8gIDB4MjA0QworCVJYRE1BX0ZCQ19SRF9JTkRFWF90IGZicjBfcmRfaW5kZXg7CQkvLyAgMHgyMDUwCisJUlhETUFfRkJSX01JTl9ERVNfdCBmYnIwX21pbl9kZXM7CQkvLyAgMHgyMDU0CisJdTMyIGZicjFfYmFzZV9sbzsJCQkJLy8gIDB4MjA1OAorCXUzMiBmYnIxX2Jhc2VfaGk7CQkJCS8vICAweDIwNUMKKwlSWERNQV9GQlJfTlVNX0RFU190IGZicjFfbnVtX2RlczsJCS8vICAweDIwNjAKKwlETUExMFdfdCBmYnIxX2F2YWlsX29mZnNldDsJCQkvLyAgMHgyMDY0CisJRE1BMTBXX3QgZmJyMV9mdWxsX29mZnNldDsJCQkvLyAgMHgyMDY4CisJUlhETUFfRkJDX1JEX0lOREVYX3QgZmJyMV9yZF9pbmRleDsJCS8vICAweDIwNkMKKwlSWERNQV9GQlJfTUlOX0RFU190IGZicjFfbWluX2RlczsJCS8vICAweDIwNzAKK30gUlhETUFfdCwgKlBSWERNQV90OworCisvKiBFTkQgT0YgUlhETUEgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworCisvKiBTVEFSVCBPRiBUWE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogc3RydWN0dXJlIGZvciBjb250cm9sIHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAwMAorICovCit0eXBlZGVmIHVuaW9uIF9UWE1BQ19DVExfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjI0OwkJLy8gYml0cyA4LTMxCisJCXUzMiBja2xzZWdfZGlhYmxlOjE7CS8vIGJpdCA3CisJCXUzMiBja2JjbnRfZGlzYWJsZToxOwkvLyBiaXQgNgorCQl1MzIgY2tzZWdudW06MTsJCS8vIGJpdCA1CisJCXUzMiBhc3luY19kaXNhYmxlOjE7CS8vIGJpdCA0CisJCXUzMiBmY19kaXNhYmxlOjE7CS8vIGJpdCAzCisJCXUzMiBtY2lmX2Rpc2FibGU6MTsJLy8gYml0IDIKKwkJdTMyIG1pZl9kaXNhYmxlOjE7CS8vIGJpdCAxCisJCXUzMiB0eG1hY19lbjoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiB0eG1hY19lbjoxOwkJLy8gYml0IDAKKwkJdTMyIG1pZl9kaXNhYmxlOjE7CS8vIGJpdCAxIG1hYyBpbnRlcmZhY2UKKwkJdTMyIG1jaWZfZGlzYWJsZToxOwkvLyBiaXQgMiBtZW0uIGNvbnRyLiBpbnRlcmZhY2UKKwkJdTMyIGZjX2Rpc2FibGU6MTsJLy8gYml0IDMKKwkJdTMyIGFzeW5jX2Rpc2FibGU6MTsJLy8gYml0IDQKKwkJdTMyIGNrc2VnbnVtOjE7CQkvLyBiaXQgNQorCQl1MzIgY2tiY250X2Rpc2FibGU6MTsJLy8gYml0IDYKKwkJdTMyIGNrbHNlZ19kaWFibGU6MTsJLy8gYml0IDcKKwkJdTMyIHVudXNlZDoyNDsJCS8vIGJpdHMgOC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWE1BQ19DVExfdCwgKlBUWE1BQ19DVExfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3Igc2hhZG93IHBvaW50ZXIgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDA0CisgKi8KK3R5cGVkZWYgdW5pb24gX1RYTUFDX1NIQURPV19QVFJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQyOjU7CS8vIGJpdHMgMjctMzEKKwkJdTMyIHR4cV9yZF9wdHI6MTE7CS8vIGJpdHMgMTYtMjYKKwkJdTMyIHJlc2VydmVkOjU7CQkvLyBiaXRzIDExLTE1CisJCXUzMiB0eHFfd3JfcHRyOjExOwkvLyBiaXRzIDAtMTAKKyNlbHNlCisJCXUzMiB0eHFfd3JfcHRyOjExOwkvLyBiaXRzIDAtMTAKKwkJdTMyIHJlc2VydmVkOjU7CQkvLyBiaXRzIDExLTE1CisJCXUzMiB0eHFfcmRfcHRyOjExOwkvLyBiaXRzIDE2LTI2CisJCXUzMiByZXNlcnZlZDI6NTsJLy8gYml0cyAyNy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWE1BQ19TSEFET1dfUFRSX3QsICpQVFhNQUNfU0hBRE9XX1BUUl90OworCisvKgorICogc3RydWN0dXJlIGZvciBlcnJvciBjb3VudCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMDgKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhNQUNfRVJSX0NOVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjA7CQkvLyBiaXRzIDEyLTMxCisJCXUzMiByZXNlcnZlZDo0OwkJLy8gYml0cyA4LTExCisJCXUzMiB0eHFfdW5kZXJydW46NDsJLy8gYml0cyA0LTcKKwkJdTMyIGZpZm9fdW5kZXJydW46NDsJLy8gYml0cyAwLTMKKyNlbHNlCisJCXUzMiBmaWZvX3VuZGVycnVuOjQ7CS8vIGJpdHMgMC0zCisJCXUzMiB0eHFfdW5kZXJydW46NDsJLy8gYml0cyA0LTcKKwkJdTMyIHJlc2VydmVkOjQ7CQkvLyBiaXRzIDgtMTEKKwkJdTMyIHVudXNlZDoyMDsJCS8vIGJpdHMgMTItMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhNQUNfRVJSX0NOVF90LCAqUFRYTUFDX0VSUl9DTlRfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgbWF4IGZpbGwgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDBDCisgKi8KK3R5cGVkZWYgdW5pb24gX1RYTUFDX01BWF9GSUxMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMDsJCS8vIGJpdHMgMTItMzEKKwkJdTMyIG1heF9maWxsOjEyOwkvLyBiaXRzIDAtMTEKKyNlbHNlCisJCXUzMiBtYXhfZmlsbDoxMjsJLy8gYml0cyAwLTExCisJCXUzMiB1bnVzZWQ6MjA7CQkvLyBiaXRzIDEyLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYTUFDX01BWF9GSUxMX3QsICpQVFhNQUNfTUFYX0ZJTExfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgY2YgcGFyYW1ldGVyIHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAxMAorICovCit0eXBlZGVmIHVuaW9uIF9UWE1BQ19DRl9QQVJBTV90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBjZmVwOjE2OwkvLyBiaXRzIDE2LTMxCisJCXUzMiBjZnB0OjE2OwkvLyBiaXRzIDAtMTUKKyNlbHNlCisJCXUzMiBjZnB0OjE2OwkvLyBiaXRzIDAtMTUKKwkJdTMyIGNmZXA6MTY7CS8vIGJpdHMgMTYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhNQUNfQ0ZfUEFSQU1fdCwgKlBUWE1BQ19DRl9QQVJBTV90OworCisvKgorICogc3RydWN0dXJlIGZvciB0eCB0ZXN0IHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAxNAorICovCit0eXBlZGVmIHVuaW9uIF9UWE1BQ19UWFRFU1RfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkMjoxNTsJCS8vIGJpdHMgMTctMzEKKwkJdTMyIHJlc2VydmVkMToxOwkvLyBiaXQgMTYKKwkJdTMyIHR4dGVzdF9lbjoxOwkvLyBiaXQgMTUKKwkJdTMyIHVudXNlZDE6NDsJCS8vIGJpdHMgMTEtMTQKKwkJdTMyIHR4cXRlc3RfcHRyOjExOwkvLyBiaXRzIDAtMTEKKyNlbHNlCisJCXUzMiB0eHF0ZXN0X3B0cjoxMTsJLy8gYml0cyAwLTEwCisJCXUzMiB1bnVzZWQxOjQ7CQkvLyBiaXRzIDExLTE0CisJCXUzMiB0eHRlc3RfZW46MTsJLy8gYml0IDE1CisJCXUzMiByZXNlcnZlZDE6MTsJLy8gYml0IDE2CisJCXUzMiB1bnVzZWQyOjE1OwkJLy8gYml0cyAxNy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWE1BQ19UWFRFU1RfdCwgKlBUWE1BQ19UWFRFU1RfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZXJyb3IgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDE4CisgKi8KK3R5cGVkZWYgdW5pb24gX1RYTUFDX0VSUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQyOjIzOwkJLy8gYml0cyA5LTMxCisJCXUzMiBmaWZvX3VuZGVycnVuOjE7CS8vIGJpdCA4CisJCXUzMiB1bnVzZWQxOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgY3RybDJfZXJyOjE7CS8vIGJpdCA1CisJCXUzMiB0eHFfdW5kZXJydW46MTsJLy8gYml0IDQKKwkJdTMyIGJjbnRfZXJyOjE7CQkvLyBiaXQgMworCQl1MzIgbHNlZ19lcnI6MTsJCS8vIGJpdCAyCisJCXUzMiBzZWdudW1fZXJyOjE7CS8vIGJpdCAxCisJCXUzMiBzZWcwX2VycjoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBzZWcwX2VycjoxOwkJLy8gYml0IDAKKwkJdTMyIHNlZ251bV9lcnI6MTsJLy8gYml0IDEKKwkJdTMyIGxzZWdfZXJyOjE7CQkvLyBiaXQgMgorCQl1MzIgYmNudF9lcnI6MTsJCS8vIGJpdCAzCisJCXUzMiB0eHFfdW5kZXJydW46MTsJLy8gYml0IDQKKwkJdTMyIGN0cmwyX2VycjoxOwkvLyBiaXQgNQorCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyA2LTcKKwkJdTMyIGZpZm9fdW5kZXJydW46MTsJLy8gYml0IDgKKwkJdTMyIHVudXNlZDI6MjM7CQkvLyBiaXRzIDktMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhNQUNfRVJSX3QsICpQVFhNQUNfRVJSX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGVycm9yIGludGVycnVwdCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMUMKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhNQUNfRVJSX0lOVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQyOjIzOwkJLy8gYml0cyA5LTMxCisJCXUzMiBmaWZvX3VuZGVycnVuOjE7CS8vIGJpdCA4CisJCXUzMiB1bnVzZWQxOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgY3RybDJfZXJyOjE7CS8vIGJpdCA1CisJCXUzMiB0eHFfdW5kZXJydW46MTsJLy8gYml0IDQKKwkJdTMyIGJjbnRfZXJyOjE7CQkvLyBiaXQgMworCQl1MzIgbHNlZ19lcnI6MTsJCS8vIGJpdCAyCisJCXUzMiBzZWdudW1fZXJyOjE7CS8vIGJpdCAxCisJCXUzMiBzZWcwX2VycjoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBzZWcwX2VycjoxOwkJLy8gYml0IDAKKwkJdTMyIHNlZ251bV9lcnI6MTsJLy8gYml0IDEKKwkJdTMyIGxzZWdfZXJyOjE7CQkvLyBiaXQgMgorCQl1MzIgYmNudF9lcnI6MTsJCS8vIGJpdCAzCisJCXUzMiB0eHFfdW5kZXJydW46MTsJLy8gYml0IDQKKwkJdTMyIGN0cmwyX2VycjoxOwkvLyBiaXQgNQorCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyA2LTcKKwkJdTMyIGZpZm9fdW5kZXJydW46MTsJLy8gYml0IDgKKwkJdTMyIHVudXNlZDI6MjM7CQkvLyBiaXRzIDktMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhNQUNfRVJSX0lOVF90LCAqUFRYTUFDX0VSUl9JTlRfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZXJyb3IgaW50ZXJydXB0IHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAyMAorICovCit0eXBlZGVmIHVuaW9uIF9UWE1BQ19DUF9DVFJMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDozMDsJCS8vIGJpdHMgMi0zMQorCQl1MzIgYnBfcmVxOjE7CQkvLyBiaXQgMQorCQl1MzIgYnBfeG9ueG9mZjoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIGJwX3hvbnhvZmY6MTsJLy8gYml0IDAKKwkJdTMyIGJwX3JlcToxOwkJLy8gYml0IDEKKwkJdTMyIHVudXNlZDozMDsJCS8vIGJpdHMgMi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWE1BQ19CUF9DVFJMX3QsICpQVFhNQUNfQlBfQ1RSTF90OworCisvKgorICogVHggTUFDIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZworICovCit0eXBlZGVmIHN0cnVjdCBfVFhNQUNfdCB7CQkvLyBMb2NhdGlvbjoKKwlUWE1BQ19DVExfdCBjdGw7CQkvLyAgMHgzMDAwCisJVFhNQUNfU0hBRE9XX1BUUl90IHNoYWRvd19wdHI7CS8vICAweDMwMDQKKwlUWE1BQ19FUlJfQ05UX3QgZXJyX2NudDsJLy8gIDB4MzAwOAorCVRYTUFDX01BWF9GSUxMX3QgbWF4X2ZpbGw7CS8vICAweDMwMEMKKwlUWE1BQ19DRl9QQVJBTV90IGNmX3BhcmFtOwkvLyAgMHgzMDEwCisJVFhNQUNfVFhURVNUX3QgdHhfdGVzdDsJCS8vICAweDMwMTQKKwlUWE1BQ19FUlJfdCBlcnI7CQkvLyAgMHgzMDE4CisJVFhNQUNfRVJSX0lOVF90IGVycl9pbnQ7CS8vICAweDMwMUMKKwlUWE1BQ19CUF9DVFJMX3QgYnBfY3RybDsJLy8gIDB4MzAyMAorfSBUWE1BQ190LCAqUFRYTUFDX3Q7CisKKy8qIEVORCBPRiBUWE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKiBTVEFSVCBPRiBSWE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogc3RydWN0dXJlIGZvciByeG1hYyBjb250cm9sIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAwMAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19DVFJMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjI1OwkJLy8gYml0cyA3LTMxCisJCXUzMiByeG1hY19pbnRfZGlzYWJsZToxOwkvLyBiaXQgNgorCQl1MzIgYXN5bmNfZGlzYWJsZToxOwkJLy8gYml0IDUKKwkJdTMyIG1pZl9kaXNhYmxlOjE7CQkvLyBiaXQgNAorCQl1MzIgd29sX2Rpc2FibGU6MTsJCS8vIGJpdCAzCisJCXUzMiBwa3RfZmlsdGVyX2Rpc2FibGU6MTsJLy8gYml0IDIKKwkJdTMyIG1jaWZfZGlzYWJsZToxOwkJLy8gYml0IDEKKwkJdTMyIHJ4bWFjX2VuOjE7CQkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiByeG1hY19lbjoxOwkJCS8vIGJpdCAwCisJCXUzMiBtY2lmX2Rpc2FibGU6MTsJCS8vIGJpdCAxCisJCXUzMiBwa3RfZmlsdGVyX2Rpc2FibGU6MTsJLy8gYml0IDIKKwkJdTMyIHdvbF9kaXNhYmxlOjE7CQkvLyBiaXQgMworCQl1MzIgbWlmX2Rpc2FibGU6MTsJCS8vIGJpdCA0CisJCXUzMiBhc3luY19kaXNhYmxlOjE7CQkvLyBiaXQgNQorCQl1MzIgcnhtYWNfaW50X2Rpc2FibGU6MTsJLy8gYml0IDYKKwkJdTMyIHJlc2VydmVkOjI1OwkJLy8gYml0cyA3LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX0NUUkxfdCwgKlBSWE1BQ19DVFJMX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFdha2UgT24gTGFuIENvbnRyb2wgYW5kIENSQyAwIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAwNAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19XT0xfQ1RMX0NSQzBfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgY3JjMDoxNjsJCS8vIGJpdHMgMTYtMzEKKwkJdTMyIHJlc2VydmU6NDsJCS8vIGJpdHMgMTItMTUKKwkJdTMyIGlnbm9yZV9wcDoxOwkvLyBiaXQgMTEKKwkJdTMyIGlnbm9yZV9tcDoxOwkvLyBiaXQgMTAKKwkJdTMyIGNscl9pbnRyOjE7CQkvLyBiaXQgOQorCQl1MzIgaWdub3JlX2xpbmtfY2hnOjE7CS8vIGJpdCA4CisJCXUzMiBpZ25vcmVfdW5pOjE7CS8vIGJpdCA3CisJCXUzMiBpZ25vcmVfbXVsdGk6MTsJLy8gYml0IDYKKwkJdTMyIGlnbm9yZV9icm9hZDoxOwkvLyBiaXQgNQorCQl1MzIgdmFsaWRfY3JjNDoxOwkvLyBiaXQgNAorCQl1MzIgdmFsaWRfY3JjMzoxOwkvLyBiaXQgMworCQl1MzIgdmFsaWRfY3JjMjoxOwkvLyBiaXQgMgorCQl1MzIgdmFsaWRfY3JjMToxOwkvLyBiaXQgMQorCQl1MzIgdmFsaWRfY3JjMDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHZhbGlkX2NyYzA6MTsJLy8gYml0IDAKKwkJdTMyIHZhbGlkX2NyYzE6MTsJLy8gYml0IDEKKwkJdTMyIHZhbGlkX2NyYzI6MTsJLy8gYml0IDIKKwkJdTMyIHZhbGlkX2NyYzM6MTsJLy8gYml0IDMKKwkJdTMyIHZhbGlkX2NyYzQ6MTsJLy8gYml0IDQKKwkJdTMyIGlnbm9yZV9icm9hZDoxOwkvLyBiaXQgNQorCQl1MzIgaWdub3JlX211bHRpOjE7CS8vIGJpdCA2CisJCXUzMiBpZ25vcmVfdW5pOjE7CS8vIGJpdCA3CisJCXUzMiBpZ25vcmVfbGlua19jaGc6MTsJLy8gYml0IDgKKwkJdTMyIGNscl9pbnRyOjE7CQkvLyBiaXQgOQorCQl1MzIgaWdub3JlX21wOjE7CS8vIGJpdCAxMAorCQl1MzIgaWdub3JlX3BwOjE7CS8vIGJpdCAxMQorCQl1MzIgcmVzZXJ2ZTo0OwkJLy8gYml0cyAxMi0xNQorCQl1MzIgY3JjMDoxNjsJCS8vIGJpdHMgMTYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfV09MX0NUTF9DUkMwX3QsICpQUlhNQUNfV09MX0NUTF9DUkMwX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIENSQyAxIGFuZCBDUkMgMiByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMDgKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfV09MX0NSQzEyX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIGNyYzI6MTY7CS8vIGJpdHMgMTYtMzEKKwkJdTMyIGNyYzE6MTY7CS8vIGJpdHMgMC0xNQorI2Vsc2UKKwkJdTMyIGNyYzE6MTY7CS8vIGJpdHMgMC0xNQorCQl1MzIgY3JjMjoxNjsJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19XT0xfQ1JDMTJfdCwgKlBSWE1BQ19XT0xfQ1JDMTJfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgQ1JDIDMgYW5kIENSQyA0IHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAwQworICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19XT0xfQ1JDMzRfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgY3JjNDoxNjsJLy8gYml0cyAxNi0zMQorCQl1MzIgY3JjMzoxNjsJLy8gYml0cyAwLTE1CisjZWxzZQorCQl1MzIgY3JjMzoxNjsJLy8gYml0cyAwLTE1CisJCXUzMiBjcmM0OjE2OwkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1dPTF9DUkMzNF90LCAqUFJYTUFDX1dPTF9DUkMzNF90OworCisvKgorICogc3RydWN0dXJlIGZvciBXYWtlIE9uIExhbiBTb3VyY2UgQWRkcmVzcyBMbyByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMTAKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfV09MX1NBX0xPX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHNhMzo4OwkvLyBiaXRzIDI0LTMxCisJCXUzMiBzYTQ6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgc2E1Ojg7CS8vIGJpdHMgOC0xNQorCQl1MzIgc2E2Ojg7CS8vIGJpdHMgMC03CisjZWxzZQorCQl1MzIgc2E2Ojg7CS8vIGJpdHMgMC03CisJCXUzMiBzYTU6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBzYTQ6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgc2EzOjg7CS8vIGJpdHMgMjQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfV09MX1NBX0xPX3QsICpQUlhNQUNfV09MX1NBX0xPX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFdha2UgT24gTGFuIFNvdXJjZSBBZGRyZXNzIEhpIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAxNAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19XT0xfU0FfSElfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMTYtMzEKKwkJdTMyIHNhMTo4OwkJLy8gYml0cyA4LTE1CisJCXUzMiBzYTI6ODsJCS8vIGJpdHMgMC03CisjZWxzZQorCQl1MzIgc2EyOjg7CQkvLyBiaXRzIDAtNworCQl1MzIgc2ExOjg7CQkvLyBiaXRzIDgtMTUKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1dPTF9TQV9ISV90LCAqUFJYTUFDX1dPTF9TQV9ISV90OworCisvKgorICogc3RydWN0dXJlIGZvciBXYWtlIE9uIExhbiBtYXNrIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAxOCAtIDB4NDA2NAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgVW5pY2FzdCBQYWtldCBGaWx0ZXIgQWRkcmVzcyAxIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA2OAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19VTklfUEZfQUREUjFfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgYWRkcjFfMzo4OwkvLyBiaXRzIDI0LTMxCisJCXUzMiBhZGRyMV80Ojg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIGFkZHIxXzU6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBhZGRyMV82Ojg7CS8vIGJpdHMgMC03CisjZWxzZQorCQl1MzIgYWRkcjFfNjo4OwkvLyBiaXRzIDAtNworCQl1MzIgYWRkcjFfNTo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIGFkZHIxXzQ6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgYWRkcjFfMzo4OwkvLyBiaXRzIDI0LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1VOSV9QRl9BRERSMV90LCAqUFJYTUFDX1VOSV9QRl9BRERSMV90OworCisvKgorICogc3RydWN0dXJlIGZvciBVbmljYXN0IFBha2V0IEZpbHRlciBBZGRyZXNzIDIgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDZDCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX1VOSV9QRl9BRERSMl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBhZGRyMl8zOjg7CS8vIGJpdHMgMjQtMzEKKwkJdTMyIGFkZHIyXzQ6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgYWRkcjJfNTo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIGFkZHIyXzY6ODsJLy8gYml0cyAwLTcKKyNlbHNlCisJCXUzMiBhZGRyMl82Ojg7CS8vIGJpdHMgMC03CisJCXUzMiBhZGRyMl81Ojg7CS8vIGJpdHMgOC0xNQorCQl1MzIgYWRkcjJfNDo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBhZGRyMl8zOjg7CS8vIGJpdHMgMjQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfVU5JX1BGX0FERFIyX3QsICpQUlhNQUNfVU5JX1BGX0FERFIyX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFVuaWNhc3QgUGFrZXQgRmlsdGVyIEFkZHJlc3MgMSAmIDIgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDcwCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX1VOSV9QRl9BRERSM190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBhZGRyMl8xOjg7CS8vIGJpdHMgMjQtMzEKKwkJdTMyIGFkZHIyXzI6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgYWRkcjFfMTo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIGFkZHIxXzI6ODsJLy8gYml0cyAwLTcKKyNlbHNlCisJCXUzMiBhZGRyMV8yOjg7CS8vIGJpdHMgMC03CisJCXUzMiBhZGRyMV8xOjg7CS8vIGJpdHMgOC0xNQorCQl1MzIgYWRkcjJfMjo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBhZGRyMl8xOjg7CS8vIGJpdHMgMjQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfVU5JX1BGX0FERFIzX3QsICpQUlhNQUNfVU5JX1BGX0FERFIzX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE11bHRpY2FzdCBIYXNoIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA3NCAtIDB4NDA4MAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgUGFja2V0IEZpbHRlciBDb250cm9sIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA4NAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19QRl9DVFJMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDI6OTsJCS8vIGJpdHMgMjMtMzEKKwkJdTMyIG1pbl9wa3Rfc2l6ZTo3OwkvLyBiaXRzIDE2LTIyCisJCXUzMiB1bnVzZWQxOjEyOwkJLy8gYml0cyA0LTE1CisJCXUzMiBmaWx0ZXJfZnJhZ19lbjoxOwkvLyBiaXQgMworCQl1MzIgZmlsdGVyX3VuaV9lbjoxOwkvLyBiaXQgMgorCQl1MzIgZmlsdGVyX211bHRpX2VuOjE7CS8vIGJpdCAxCisJCXUzMiBmaWx0ZXJfYnJvYWRfZW46MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBmaWx0ZXJfYnJvYWRfZW46MTsJLy8gYml0IDAKKwkJdTMyIGZpbHRlcl9tdWx0aV9lbjoxOwkvLyBiaXQgMQorCQl1MzIgZmlsdGVyX3VuaV9lbjoxOwkvLyBiaXQgMgorCQl1MzIgZmlsdGVyX2ZyYWdfZW46MTsJLy8gYml0IDMKKwkJdTMyIHVudXNlZDE6MTI7CQkvLyBiaXRzIDQtMTUKKwkJdTMyIG1pbl9wa3Rfc2l6ZTo3OwkvLyBiaXRzIDE2LTIyCisJCXUzMiB1bnVzZWQyOjk7CQkvLyBiaXRzIDIzLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1BGX0NUUkxfdCwgKlBSWE1BQ19QRl9DVFJMX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZSBDb250cm9sIE1heCBTZWdtZW50IHJlZyBpbiByeG1hYworICogYWRkcmVzcyBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDg4CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX01DSUZfQ1RSTF9NQVhfU0VHX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjIyOwkvLyBiaXRzIDEwLTMxCisJCXUzMiBtYXhfc2l6ZTo4OwkvLyBiaXRzIDItOQorCQl1MzIgZmNfZW46MTsJLy8gYml0IDEKKwkJdTMyIHNlZ19lbjoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHNlZ19lbjoxOwkvLyBiaXQgMAorCQl1MzIgZmNfZW46MTsJLy8gYml0IDEKKwkJdTMyIG1heF9zaXplOjg7CS8vIGJpdHMgMi05CisJCXUzMiByZXNlcnZlZDoyMjsJLy8gYml0cyAxMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19NQ0lGX0NUUkxfTUFYX1NFR190LCAqUFJYTUFDX01DSUZfQ1RSTF9NQVhfU0VHX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZSBXYXRlciBNYXJrIHJlZyBpbiByeG1hYyBhZGRyZXNzCisgKiBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDhDCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX01DSUZfV0FURVJfTUFSS190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDI6NjsJLy8gYml0cyAyNi0zMQorCQl1MzIgbWFya19oaToxMDsJLy8gYml0cyAxNi0yNQorCQl1MzIgcmVzZXJ2ZWQxOjY7CS8vIGJpdHMgMTAtMTUKKwkJdTMyIG1hcmtfbG86MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgbWFya19sbzoxMDsJLy8gYml0cyAwLTkKKwkJdTMyIHJlc2VydmVkMTo2OwkvLyBiaXRzIDEwLTE1CisJCXUzMiBtYXJrX2hpOjEwOwkvLyBiaXRzIDE2LTI1CisJCXUzMiByZXNlcnZlZDI6NjsJLy8gYml0cyAyNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19NQ0lGX1dBVEVSX01BUktfdCwgKlBSWE1BQ19NQ0lGX1dBVEVSX01BUktfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgUnggUXVldWUgRGlhbG9nIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOTAKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfUlhRX0RJQUdfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQyOjY7CS8vIGJpdHMgMjYtMzEKKwkJdTMyIHJkX3B0cjoxMDsJLy8gYml0cyAxNi0yNQorCQl1MzIgcmVzZXJ2ZWQxOjY7CS8vIGJpdHMgMTAtMTUKKwkJdTMyIHdyX3B0cjoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiB3cl9wdHI6MTA7CS8vIGJpdHMgMC05CisJCXUzMiByZXNlcnZlZDE6NjsJLy8gYml0cyAxMC0xNQorCQl1MzIgcmRfcHRyOjEwOwkvLyBiaXRzIDE2LTI1CisJCXUzMiByZXNlcnZlZDI6NjsJLy8gYml0cyAyNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19SWFFfRElBR190LCAqUFJYTUFDX1JYUV9ESUFHX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHNwYWNlIGF2YWlsaWFibGUgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA5NAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19TUEFDRV9BVkFJTF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDI6MTU7CQkvLyBiaXRzIDE3LTMxCisJCXUzMiBzcGFjZV9hdmFpbF9lbjoxOwkvLyBiaXQgMTYKKwkJdTMyIHJlc2VydmVkMTo2OwkJLy8gYml0cyAxMC0xNQorCQl1MzIgc3BhY2VfYXZhaWw6MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgc3BhY2VfYXZhaWw6MTA7CS8vIGJpdHMgMC05CisJCXUzMiByZXNlcnZlZDE6NjsJCS8vIGJpdHMgMTAtMTUKKwkJdTMyIHNwYWNlX2F2YWlsX2VuOjE7CS8vIGJpdCAxNgorCQl1MzIgcmVzZXJ2ZWQyOjE1OwkJLy8gYml0cyAxNy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19TUEFDRV9BVkFJTF90LCAqUFJYTUFDX1NQQUNFX0FWQUlMX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIG1hbmFnZW1lbnQgaW50ZXJmYWNlIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOTgKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfTUlGX0NUTF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlOjE0OwkJLy8gYml0cyAxOC0zMQorCQl1MzIgZHJvcF9wa3RfZW46MTsJCS8vIGJpdCAxNworCQl1MzIgZHJvcF9wa3RfbWFzazoxNzsJLy8gYml0cyAwLTE2CisjZWxzZQorCQl1MzIgZHJvcF9wa3RfbWFzazoxNzsJLy8gYml0cyAwLTE2CisJCXUzMiBkcm9wX3BrdF9lbjoxOwkJLy8gYml0IDE3CisJCXUzMiByZXNlcnZlOjE0OwkJLy8gYml0cyAxOC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19NSUZfQ1RMX3QsICpQUlhNQUNfTUlGX0NUTF90OworCisvKgorICogc3RydWN0dXJlIGZvciBFcnJvciByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDlDCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX0VSUk9SX1JFR190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlOjI4OwkvLyBiaXRzIDQtMzEKKwkJdTMyIG1pZjoxOwkJLy8gYml0IDMKKwkJdTMyIGFzeW5jOjE7CS8vIGJpdCAyCisJCXUzMiBwa3RfZmlsdGVyOjE7CS8vIGJpdCAxCisJCXUzMiBtY2lmOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgbWNpZjoxOwkvLyBiaXQgMAorCQl1MzIgcGt0X2ZpbHRlcjoxOwkvLyBiaXQgMQorCQl1MzIgYXN5bmM6MTsJLy8gYml0IDIKKwkJdTMyIG1pZjoxOwkJLy8gYml0IDMKKwkJdTMyIHJlc2VydmU6Mjg7CS8vIGJpdHMgNC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19FUlJPUl9SRUdfdCwgKlBSWE1BQ19FUlJPUl9SRUdfdDsKKworLyoKKyAqIFJ4IE1BQyBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX1JYTUFDX3QgewkJCQkvLyBMb2NhdGlvbjoKKwlSWE1BQ19DVFJMX3QgY3RybDsJCQkJLy8gIDB4NDAwMAorCVJYTUFDX1dPTF9DVExfQ1JDMF90IGNyYzA7CQkJLy8gIDB4NDAwNAorCVJYTUFDX1dPTF9DUkMxMl90IGNyYzEyOwkJCS8vICAweDQwMDgKKwlSWE1BQ19XT0xfQ1JDMzRfdCBjcmMzNDsJCQkvLyAgMHg0MDBDCisJUlhNQUNfV09MX1NBX0xPX3Qgc2FfbG87CQkJLy8gIDB4NDAxMAorCVJYTUFDX1dPTF9TQV9ISV90IHNhX2hpOwkJCS8vICAweDQwMTQKKwl1MzIgbWFzazBfd29yZDA7CQkJCS8vICAweDQwMTgKKwl1MzIgbWFzazBfd29yZDE7CQkJCS8vICAweDQwMUMKKwl1MzIgbWFzazBfd29yZDI7CQkJCS8vICAweDQwMjAKKwl1MzIgbWFzazBfd29yZDM7CQkJCS8vICAweDQwMjQKKwl1MzIgbWFzazFfd29yZDA7CQkJCS8vICAweDQwMjgKKwl1MzIgbWFzazFfd29yZDE7CQkJCS8vICAweDQwMkMKKwl1MzIgbWFzazFfd29yZDI7CQkJCS8vICAweDQwMzAKKwl1MzIgbWFzazFfd29yZDM7CQkJCS8vICAweDQwMzQKKwl1MzIgbWFzazJfd29yZDA7CQkJCS8vICAweDQwMzgKKwl1MzIgbWFzazJfd29yZDE7CQkJCS8vICAweDQwM0MKKwl1MzIgbWFzazJfd29yZDI7CQkJCS8vICAweDQwNDAKKwl1MzIgbWFzazJfd29yZDM7CQkJCS8vICAweDQwNDQKKwl1MzIgbWFzazNfd29yZDA7CQkJCS8vICAweDQwNDgKKwl1MzIgbWFzazNfd29yZDE7CQkJCS8vICAweDQwNEMKKwl1MzIgbWFzazNfd29yZDI7CQkJCS8vICAweDQwNTAKKwl1MzIgbWFzazNfd29yZDM7CQkJCS8vICAweDQwNTQKKwl1MzIgbWFzazRfd29yZDA7CQkJCS8vICAweDQwNTgKKwl1MzIgbWFzazRfd29yZDE7CQkJCS8vICAweDQwNUMKKwl1MzIgbWFzazRfd29yZDI7CQkJCS8vICAweDQwNjAKKwl1MzIgbWFzazRfd29yZDM7CQkJCS8vICAweDQwNjQKKwlSWE1BQ19VTklfUEZfQUREUjFfdCB1bmlfcGZfYWRkcjE7CQkvLyAgMHg0MDY4CisJUlhNQUNfVU5JX1BGX0FERFIyX3QgdW5pX3BmX2FkZHIyOwkJLy8gIDB4NDA2QworCVJYTUFDX1VOSV9QRl9BRERSM190IHVuaV9wZl9hZGRyMzsJCS8vICAweDQwNzAKKwl1MzIgbXVsdGlfaGFzaDE7CQkJCS8vICAweDQwNzQKKwl1MzIgbXVsdGlfaGFzaDI7CQkJCS8vICAweDQwNzgKKwl1MzIgbXVsdGlfaGFzaDM7CQkJCS8vICAweDQwN0MKKwl1MzIgbXVsdGlfaGFzaDQ7CQkJCS8vICAweDQwODAKKwlSWE1BQ19QRl9DVFJMX3QgcGZfY3RybDsJCQkvLyAgMHg0MDg0CisJUlhNQUNfTUNJRl9DVFJMX01BWF9TRUdfdCBtY2lmX2N0cmxfbWF4X3NlZzsJLy8gIDB4NDA4OAorCVJYTUFDX01DSUZfV0FURVJfTUFSS190IG1jaWZfd2F0ZXJfbWFyazsJLy8gIDB4NDA4QworCVJYTUFDX1JYUV9ESUFHX3QgcnhxX2RpYWc7CQkJLy8gIDB4NDA5MAorCVJYTUFDX1NQQUNFX0FWQUlMX3Qgc3BhY2VfYXZhaWw7CQkvLyAgMHg0MDk0CisKKwlSWE1BQ19NSUZfQ1RMX3QgbWlmX2N0cmw7CQkJLy8gIDB4NDA5OAorCVJYTUFDX0VSUk9SX1JFR190IGVycl9yZWc7CQkJLy8gIDB4NDA5QworfSBSWE1BQ190LCAqUFJYTUFDX3Q7CisKKy8qIEVORCBPRiBUWE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisKKy8qIFNUQVJUIE9GIE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogc3RydWN0dXJlIGZvciBjb25maWd1cmF0aW9uICMxIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDAwCisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19DRkcxX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHNvZnRfcmVzZXQ6MTsJCS8vIGJpdCAzMQorCQl1MzIgc2ltX3Jlc2V0OjE7CQkvLyBiaXQgMzAKKwkJdTMyIHJlc2VydmVkMzoxMDsJCS8vIGJpdHMgMjAtMjkKKwkJdTMyIHJlc2V0X3J4X21jOjE7CQkvLyBiaXQgMTkKKwkJdTMyIHJlc2V0X3R4X21jOjE7CQkvLyBiaXQgMTgKKwkJdTMyIHJlc2V0X3J4X2Z1bjoxOwkvLyBiaXQgMTcKKwkJdTMyIHJlc2V0X3R4X2Z1bjoxOwkvLyBiaXQgMTYKKwkJdTMyIHJlc2VydmVkMjo3OwkJLy8gYml0cyA5LTE1CisJCXUzMiBsb29wX2JhY2s6MTsJCS8vIGJpdCA4CisJCXUzMiByZXNlcnZlZDE6MjsJCS8vIGJpdHMgNi03CisJCXUzMiByeF9mbG93OjE7CQkvLyBiaXQgNQorCQl1MzIgdHhfZmxvdzoxOwkJLy8gYml0IDQKKwkJdTMyIHN5bmNkX3J4X2VuOjE7CQkvLyBiaXQgMworCQl1MzIgcnhfZW5hYmxlOjE7CQkvLyBiaXQgMgorCQl1MzIgc3luY2RfdHhfZW46MTsJCS8vIGJpdCAxCisJCXUzMiB0eF9lbmFibGU6MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MzIgdHhfZW5hYmxlOjE7CQkvLyBiaXQgMAorCQl1MzIgc3luY2RfdHhfZW46MTsJCS8vIGJpdCAxCisJCXUzMiByeF9lbmFibGU6MTsJCS8vIGJpdCAyCisJCXUzMiBzeW5jZF9yeF9lbjoxOwkJLy8gYml0IDMKKwkJdTMyIHR4X2Zsb3c6MTsJCS8vIGJpdCA0CisJCXUzMiByeF9mbG93OjE7CQkvLyBiaXQgNQorCQl1MzIgcmVzZXJ2ZWQxOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgbG9vcF9iYWNrOjE7CQkvLyBiaXQgOAorCQl1MzIgcmVzZXJ2ZWQyOjc7CQkvLyBiaXRzIDktMTUKKwkJdTMyIHJlc2V0X3R4X2Z1bjoxOwkvLyBiaXQgMTYKKwkJdTMyIHJlc2V0X3J4X2Z1bjoxOwkvLyBiaXQgMTcKKwkJdTMyIHJlc2V0X3R4X21jOjE7CQkvLyBiaXQgMTgKKwkJdTMyIHJlc2V0X3J4X21jOjE7CQkvLyBiaXQgMTkKKwkJdTMyIHJlc2VydmVkMzoxMDsJCS8vIGJpdHMgMjAtMjkKKwkJdTMyIHNpbV9yZXNldDoxOwkJLy8gYml0IDMwCisJCXUzMiBzb2Z0X3Jlc2V0OjE7CQkvLyBiaXQgMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX0NGRzFfdCwgKlBNQUNfQ0ZHMV90OworCisvKgorICogc3RydWN0dXJlIGZvciBjb25maWd1cmF0aW9uICMyIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDA0CisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19DRkcyX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkMzoxNjsJCS8vIGJpdHMgMTYtMzEKKwkJdTMyIHByZWFtYmxlX2xlbjo0OwkvLyBiaXRzIDEyLTE1CisJCXUzMiByZXNlcnZlZDI6MjsJCS8vIGJpdHMgMTAtMTEKKwkJdTMyIGlmX21vZGU6MjsJCS8vIGJpdHMgOC05CisJCXUzMiByZXNlcnZlZDE6MjsJCS8vIGJpdHMgNi03CisJCXUzMiBodWdlX2ZyYW1lOjE7CQkvLyBiaXQgNQorCQl1MzIgbGVuX2NoZWNrOjE7CQkvLyBiaXQgNAorCQl1MzIgdW5kZWZpbmVkOjE7CQkvLyBiaXQgMworCQl1MzIgcGFkX2NyYzoxOwkJLy8gYml0IDIKKwkJdTMyIGNyY19lbmFibGU6MTsJCS8vIGJpdCAxCisJCXUzMiBmdWxsX2R1cGxleDoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBmdWxsX2R1cGxleDoxOwkJLy8gYml0IDAKKwkJdTMyIGNyY19lbmFibGU6MTsJCS8vIGJpdCAxCisJCXUzMiBwYWRfY3JjOjE7CQkvLyBiaXQgMgorCQl1MzIgdW5kZWZpbmVkOjE7CQkvLyBiaXQgMworCQl1MzIgbGVuX2NoZWNrOjE7CQkvLyBiaXQgNAorCQl1MzIgaHVnZV9mcmFtZToxOwkJLy8gYml0IDUKKwkJdTMyIHJlc2VydmVkMToyOwkJLy8gYml0cyA2LTcKKwkJdTMyIGlmX21vZGU6MjsJCS8vIGJpdHMgOC05CisJCXUzMiByZXNlcnZlZDI6MjsJCS8vIGJpdHMgMTAtMTEKKwkJdTMyIHByZWFtYmxlX2xlbjo0OwkvLyBiaXRzIDEyLTE1CisJCXUzMiByZXNlcnZlZDM6MTY7CQkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19DRkcyX3QsICpQTUFDX0NGRzJfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgSW50ZXJwYWNrZXQgZ2FwIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDA4CisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19JUEdfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MTsJCS8vIGJpdCAzMQorCQl1MzIgbm9uX0IyQl9pcGdfMTo3OwkvLyBiaXRzIDI0LTMwCisJCXUzMiB1bmRlZmluZWQyOjE7CQkvLyBiaXQgMjMKKwkJdTMyIG5vbl9CMkJfaXBnXzI6NzsJLy8gYml0cyAxNi0yMgorCQl1MzIgbWluX2lmZ19lbmZvcmNlOjg7CS8vIGJpdHMgOC0xNQorCQl1MzIgdW5kZWZpbmVkMToxOwkJLy8gYml0IDcKKwkJdTMyIEIyQl9pcGc6NzsJCS8vIGJpdHMgMC02CisjZWxzZQorCQl1MzIgQjJCX2lwZzo3OwkJLy8gYml0cyAwLTYKKwkJdTMyIHVuZGVmaW5lZDE6MTsJCS8vIGJpdCA3CisJCXUzMiBtaW5faWZnX2VuZm9yY2U6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBub25fQjJCX2lwZ18yOjc7CS8vIGJpdHMgMTYtMjIKKwkJdTMyIHVuZGVmaW5lZDI6MTsJCS8vIGJpdCAyMworCQl1MzIgbm9uX0IyQl9pcGdfMTo3OwkvLyBiaXRzIDI0LTMwCisJCXUzMiByZXNlcnZlZDoxOwkJLy8gYml0IDMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19JUEdfdCwgKlBNQUNfSVBHX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGhhbGYgZHVwbGV4IHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDBDCisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19IRkRQX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkMjo4OwkJLy8gYml0cyAyNC0zMQorCQl1MzIgYWx0X2JlYl90cnVuYzo0OwkvLyBiaXRzIDIzLTIwCisJCXUzMiBhbHRfYmViX2VuYWJsZToxOwkvLyBiaXQgMTkKKwkJdTMyIGJwX25vX2JhY2tvZmY6MTsJLy8gYml0IDE4CisJCXUzMiBub19iYWNrb2ZmOjE7CQkvLyBiaXQgMTcKKwkJdTMyIGV4Y2Vzc19kZWZlcjoxOwkvLyBiaXQgMTYKKwkJdTMyIHJleG1pdF9tYXg6NDsJCS8vIGJpdHMgMTItMTUKKwkJdTMyIHJlc2VydmVkMToyOwkJLy8gYml0cyAxMC0xMQorCQl1MzIgY29sbF93aW5kb3c6MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgY29sbF93aW5kb3c6MTA7CS8vIGJpdHMgMC05CisJCXUzMiByZXNlcnZlZDE6MjsJCS8vIGJpdHMgMTAtMTEKKwkJdTMyIHJleG1pdF9tYXg6NDsJCS8vIGJpdHMgMTItMTUKKwkJdTMyIGV4Y2Vzc19kZWZlcjoxOwkvLyBiaXQgMTYKKwkJdTMyIG5vX2JhY2tvZmY6MTsJCS8vIGJpdCAxNworCQl1MzIgYnBfbm9fYmFja29mZjoxOwkvLyBiaXQgMTgKKwkJdTMyIGFsdF9iZWJfZW5hYmxlOjE7CS8vIGJpdCAxOQorCQl1MzIgYWx0X2JlYl90cnVuYzo0OwkvLyBiaXRzIDIzLTIwCisJCXUzMiByZXNlcnZlZDI6ODsJCS8vIGJpdHMgMjQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX0hGRFBfdCwgKlBNQUNfSEZEUF90OworCisvKgorICogc3RydWN0dXJlIGZvciBNYXhpbXVtIEZyYW1lIExlbmd0aCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAxMAorICovCit0eXBlZGVmIHVuaW9uIF9NQUNfTUFYX0ZNX0xFTl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQorCQl1MzIgbWF4X2xlbjoxNjsJLy8gYml0cyAwLTE1CisjZWxzZQorCQl1MzIgbWF4X2xlbjoxNjsJLy8gYml0cyAwLTE1CisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfTUFYX0ZNX0xFTl90LCAqUE1BQ19NQVhfRk1fTEVOX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFJlc2VydmUgMSByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAxNCAtIDB4NTAxOAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgVGVzdCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAxQworICovCit0eXBlZGVmIHVuaW9uIF9NQUNfVEVTVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6Mjk7CS8vIGJpdHMgMy0zMQorCQl1MzIgbWFjX3Rlc3Q6MzsJLy8gYml0cyAwLTIKKyNlbHNlCisJCXUzMiBtYWNfdGVzdDozOwkvLyBiaXRzIDAtMgorCQl1MzIgdW51c2VkOjI5OwkvLyBiaXRzIDMtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX1RFU1RfdCwgKlBNQUNfVEVTVF90OworCisvKgorICogc3RydWN0dXJlIGZvciBNSUkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDIwCisgKi8KK3R5cGVkZWYgdW5pb24gX01JSV9NR01UX0NGR190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNldF9taWlfbWdtdDoxOwkvLyBiaXQgMzEKKwkJdTMyIHJlc2VydmVkOjI1OwkJLy8gYml0cyA2LTMwCisJCXUzMiBzY2FuX2F1dG9faW5jcmVtdDoxOwkvLyBiaXQgNQorCQl1MzIgcHJlYW1ibGVfc3VwcHJlc3M6MTsJLy8gYml0IDQKKwkJdTMyIHVuZGVmaW5lZDoxOwkJLy8gYml0IDMKKwkJdTMyIG1nbXRfY2xrX3Jlc2V0OjM7CS8vIGJpdHMgMC0yCisjZWxzZQorCQl1MzIgbWdtdF9jbGtfcmVzZXQ6MzsJLy8gYml0cyAwLTIKKwkJdTMyIHVuZGVmaW5lZDoxOwkJLy8gYml0IDMKKwkJdTMyIHByZWFtYmxlX3N1cHByZXNzOjE7CS8vIGJpdCA0CisJCXUzMiBzY2FuX2F1dG9faW5jcmVtdDoxOwkvLyBiaXQgNQorCQl1MzIgcmVzZXJ2ZWQ6MjU7CQkvLyBiaXRzIDYtMzAKKwkJdTMyIHJlc2V0X21paV9tZ210OjE7CS8vIGJpdCAzMQorI2VuZGlmCisJfSBiaXRzOworfSBNSUlfTUdNVF9DRkdfdCwgKlBNSUlfTUdNVF9DRkdfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTUlJIE1hbmFnZW1lbnQgQ29tbWFuZCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAyNAorICovCit0eXBlZGVmIHVuaW9uIF9NSUlfTUdNVF9DTURfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MzA7CS8vIGJpdHMgMi0zMQorCQl1MzIgc2Nhbl9jeWNsZToxOwkvLyBiaXQgMQorCQl1MzIgcmVhZF9jeWNsZToxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHJlYWRfY3ljbGU6MTsJLy8gYml0IDAKKwkJdTMyIHNjYW5fY3ljbGU6MTsJLy8gYml0IDEKKwkJdTMyIHJlc2VydmVkOjMwOwkvLyBiaXRzIDItMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUlJX01HTVRfQ01EX3QsICpQTUlJX01HTVRfQ01EX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1JSSBNYW5hZ2VtZW50IEFkZHJlc3MgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMjgKKyAqLwordHlwZWRlZiB1bmlvbiBfTUlJX01HTVRfQUREUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDI6MTk7CS8vIGJpdCAxMy0zMQorCQl1MzIgcGh5X2FkZHI6NTsJLy8gYml0cyA4LTEyCisJCXUzMiByZXNlcnZlZDE6MzsJLy8gYml0cyA1LTcKKwkJdTMyIHJlZ19hZGRyOjU7CS8vIGJpdHMgMC00CisjZWxzZQorCQl1MzIgcmVnX2FkZHI6NTsJLy8gYml0cyAwLTQKKwkJdTMyIHJlc2VydmVkMTozOwkvLyBiaXRzIDUtNworCQl1MzIgcGh5X2FkZHI6NTsJLy8gYml0cyA4LTEyCisJCXUzMiByZXNlcnZlZDI6MTk7CS8vIGJpdCAxMy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNSUlfTUdNVF9BRERSX3QsICpQTUlJX01HTVRfQUREUl90OworCisvKgorICogc3RydWN0dXJlIGZvciBNSUkgTWFuYWdlbWVudCBDb250cm9sIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDJDCisgKi8KK3R5cGVkZWYgdW5pb24gX01JSV9NR01UX0NUUkxfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMTYtMzEKKwkJdTMyIHBoeV9jdHJsOjE2OwkvLyBiaXRzIDAtMTUKKyNlbHNlCisJCXUzMiBwaHlfY3RybDoxNjsJLy8gYml0cyAwLTE1CisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNSUlfTUdNVF9DVFJMX3QsICpQTUlJX01HTVRfQ1RSTF90OworCisvKgorICogc3RydWN0dXJlIGZvciBNSUkgTWFuYWdlbWVudCBTdGF0dXMgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMzAKKyAqLwordHlwZWRlZiB1bmlvbiBfTUlJX01HTVRfU1RBVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQorCQl1MzIgcGh5X3N0YXQ6MTY7CS8vIGJpdHMgMC0xNQorI2Vsc2UKKwkJdTMyIHBoeV9zdGF0OjE2OwkvLyBiaXRzIDAtMTUKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JSV9NR01UX1NUQVRfdCwgKlBNSUlfTUdNVF9TVEFUX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1JSSBNYW5hZ2VtZW50IEluZGljYXRvcnMgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMzQKKyAqLwordHlwZWRlZiB1bmlvbiBfTUlJX01HTVRfSU5ESUNBVE9SX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjI5OwkvLyBiaXRzIDMtMzEKKwkJdTMyIG5vdF92YWxpZDoxOwkvLyBiaXQgMgorCQl1MzIgc2Nhbm5pbmc6MTsJLy8gYml0IDEKKwkJdTMyIGJ1c3k6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBidXN5OjE7CS8vIGJpdCAwCisJCXUzMiBzY2FubmluZzoxOwkvLyBiaXQgMQorCQl1MzIgbm90X3ZhbGlkOjE7CS8vIGJpdCAyCisJCXUzMiByZXNlcnZlZDoyOTsJLy8gYml0cyAzLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JSV9NR01UX0lORElDQVRPUl90LCAqUE1JSV9NR01UX0lORElDQVRPUl90OworCisvKgorICogc3RydWN0dXJlIGZvciBJbnRlcmZhY2UgQ29udHJvbCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAzOAorICovCit0eXBlZGVmIHVuaW9uIF9NQUNfSUZfQ1RSTF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNldF9pZl9tb2R1bGU6MTsJLy8gYml0IDMxCisJCXUzMiByZXNlcnZlZDQ6MzsJCS8vIGJpdCAyOC0zMAorCQl1MzIgdGJpX21vZGU6MTsJCS8vIGJpdCAyNworCQl1MzIgZ2hkX21vZGU6MTsJCS8vIGJpdCAyNgorCQl1MzIgbGhkX21vZGU6MTsJCS8vIGJpdCAyNQorCQl1MzIgcGh5X21vZGU6MTsJCS8vIGJpdCAyNAorCQl1MzIgcmVzZXRfcGVyX21paToxOwkvLyBiaXQgMjMKKwkJdTMyIHJlc2VydmVkMzo2OwkJLy8gYml0cyAxNy0yMgorCQl1MzIgc3BlZWQ6MTsJCS8vIGJpdCAxNgorCQl1MzIgcmVzZXRfcGUxMDB4OjE7CS8vIGJpdCAxNQorCQl1MzIgcmVzZXJ2ZWQyOjQ7CQkvLyBiaXRzIDExLTE0CisJCXUzMiBmb3JjZV9xdWlldDoxOwkJLy8gYml0IDEwCisJCXUzMiBub19jaXBoZXI6MTsJCS8vIGJpdCA5CisJCXUzMiBkaXNhYmxlX2xpbmtfZmFpbDoxOwkvLyBiaXQgOAorCQl1MzIgcmVzZXRfZ3BzaToxOwkJLy8gYml0IDcKKwkJdTMyIHJlc2VydmVkMTo2OwkJLy8gYml0cyAxLTYKKwkJdTMyIGVuYWJfamFiX3Byb3RlY3Q6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBlbmFiX2phYl9wcm90ZWN0OjE7CS8vIGJpdCAwCisJCXUzMiByZXNlcnZlZDE6NjsJCS8vIGJpdHMgMS02CisJCXUzMiByZXNldF9ncHNpOjE7CQkvLyBiaXQgNworCQl1MzIgZGlzYWJsZV9saW5rX2ZhaWw6MTsJLy8gYml0IDgKKwkJdTMyIG5vX2NpcGhlcjoxOwkJLy8gYml0IDkKKwkJdTMyIGZvcmNlX3F1aWV0OjE7CQkvLyBiaXQgMTAKKwkJdTMyIHJlc2VydmVkMjo0OwkJLy8gYml0cyAxMS0xNAorCQl1MzIgcmVzZXRfcGUxMDB4OjE7CS8vIGJpdCAxNQorCQl1MzIgc3BlZWQ6MTsJCS8vIGJpdCAxNgorCQl1MzIgcmVzZXJ2ZWQzOjY7CQkvLyBiaXRzIDE3LTIyCisJCXUzMiByZXNldF9wZXJfbWlpOjE7CS8vIGJpdCAyMworCQl1MzIgcGh5X21vZGU6MTsJCS8vIGJpdCAyNAorCQl1MzIgbGhkX21vZGU6MTsJCS8vIGJpdCAyNQorCQl1MzIgZ2hkX21vZGU6MTsJCS8vIGJpdCAyNgorCQl1MzIgdGJpX21vZGU6MTsJCS8vIGJpdCAyNworCQl1MzIgcmVzZXJ2ZWQ0OjM7CQkvLyBiaXQgMjgtMzAKKwkJdTMyIHJlc2V0X2lmX21vZHVsZToxOwkvLyBiaXQgMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX0lGX0NUUkxfdCwgKlBNQUNfSUZfQ1RSTF90OworCisvKgorICogc3RydWN0dXJlIGZvciBJbnRlcmZhY2UgU3RhdHVzIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDNDCisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19JRl9TVEFUX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjIyOwkJLy8gYml0cyAxMC0zMQorCQl1MzIgZXhjZXNzX2RlZmVyOjE7CS8vIGJpdCA5CisJCXUzMiBjbGFzaDoxOwkJLy8gYml0IDgKKwkJdTMyIHBoeV9qYWJiZXI6MTsJCS8vIGJpdCA3CisJCXUzMiBwaHlfbGlua19vazoxOwkJLy8gYml0IDYKKwkJdTMyIHBoeV9mdWxsX2R1cGxleDoxOwkvLyBiaXQgNQorCQl1MzIgcGh5X3NwZWVkOjE7CQkvLyBiaXQgNAorCQl1MzIgcGUxMDB4X2xpbmtfZmFpbDoxOwkvLyBiaXQgMworCQl1MzIgcGUxMHRfbG9zc19jYXJyaWU6MTsJLy8gYml0IDIKKwkJdTMyIHBlMTB0X3NxZV9lcnJvcjoxOwkvLyBiaXQgMQorCQl1MzIgcGUxMHRfamFiYmVyOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgcGUxMHRfamFiYmVyOjE7CS8vIGJpdCAwCisJCXUzMiBwZTEwdF9zcWVfZXJyb3I6MTsJLy8gYml0IDEKKwkJdTMyIHBlMTB0X2xvc3NfY2FycmllOjE7CS8vIGJpdCAyCisJCXUzMiBwZTEwMHhfbGlua19mYWlsOjE7CS8vIGJpdCAzCisJCXUzMiBwaHlfc3BlZWQ6MTsJCS8vIGJpdCA0CisJCXUzMiBwaHlfZnVsbF9kdXBsZXg6MTsJLy8gYml0IDUKKwkJdTMyIHBoeV9saW5rX29rOjE7CQkvLyBiaXQgNgorCQl1MzIgcGh5X2phYmJlcjoxOwkJLy8gYml0IDcKKwkJdTMyIGNsYXNoOjE7CQkvLyBiaXQgOAorCQl1MzIgZXhjZXNzX2RlZmVyOjE7CS8vIGJpdCA5CisJCXUzMiByZXNlcnZlZDoyMjsJCS8vIGJpdHMgMTAtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX0lGX1NUQVRfdCwgKlBNQUNfSUZfU1RBVF90OworCisvKgorICogc3RydWN0dXJlIGZvciBNYWMgU3RhdGlvbiBBZGRyZXNzLCBQYXJ0IDEgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwNDAKKyAqLwordHlwZWRlZiB1bmlvbiBfTUFDX1NUQVRJT05fQUREUjFfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgT2N0ZXQ2Ojg7CS8vIGJpdHMgMjQtMzEKKwkJdTMyIE9jdGV0NTo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBPY3RldDQ6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBPY3RldDM6ODsJLy8gYml0cyAwLTcKKyNlbHNlCisJCXUzMiBPY3RldDM6ODsJLy8gYml0cyAwLTcKKwkJdTMyIE9jdGV0NDo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIE9jdGV0NTo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBPY3RldDY6ODsJLy8gYml0cyAyNC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfU1RBVElPTl9BRERSMV90LCAqUE1BQ19TVEFUSU9OX0FERFIxX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1hYyBTdGF0aW9uIEFkZHJlc3MsIFBhcnQgMiByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTA0NAorICovCit0eXBlZGVmIHVuaW9uIF9NQUNfU1RBVElPTl9BRERSMl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBPY3RldDI6ODsJLy8gYml0cyAyNC0zMQorCQl1MzIgT2N0ZXQxOjg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDAtMTUKKyNlbHNlCisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0IDAtMTUKKwkJdTMyIE9jdGV0MTo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBPY3RldDI6ODsJLy8gYml0cyAyNC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfU1RBVElPTl9BRERSMl90LCAqUE1BQ19TVEFUSU9OX0FERFIyX3Q7CisKKy8qCisgKiBNQUMgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKi8KK3R5cGVkZWYgc3RydWN0IF9NQUNfdCB7CQkJCQkvLyBMb2NhdGlvbjoKKwlNQUNfQ0ZHMV90IGNmZzE7CQkJCS8vICAweDUwMDAKKwlNQUNfQ0ZHMl90IGNmZzI7CQkJCS8vICAweDUwMDQKKwlNQUNfSVBHX3QgaXBnOwkJCQkJLy8gIDB4NTAwOAorCU1BQ19IRkRQX3QgaGZkcDsJCQkJLy8gIDB4NTAwQworCU1BQ19NQVhfRk1fTEVOX3QgbWF4X2ZtX2xlbjsJCQkvLyAgMHg1MDEwCisJdTMyIHJzdjE7CQkJCQkvLyAgMHg1MDE0CisJdTMyIHJzdjI7CQkJCQkvLyAgMHg1MDE4CisJTUFDX1RFU1RfdCBtYWNfdGVzdDsJCQkJLy8gIDB4NTAxQworCU1JSV9NR01UX0NGR190IG1paV9tZ210X2NmZzsJCQkvLyAgMHg1MDIwCisJTUlJX01HTVRfQ01EX3QgbWlpX21nbXRfY21kOwkJCS8vICAweDUwMjQKKwlNSUlfTUdNVF9BRERSX3QgbWlpX21nbXRfYWRkcjsJCQkvLyAgMHg1MDI4CisJTUlJX01HTVRfQ1RSTF90IG1paV9tZ210X2N0cmw7CQkJLy8gIDB4NTAyQworCU1JSV9NR01UX1NUQVRfdCBtaWlfbWdtdF9zdGF0OwkJCS8vICAweDUwMzAKKwlNSUlfTUdNVF9JTkRJQ0FUT1JfdCBtaWlfbWdtdF9pbmRpY2F0b3I7CS8vICAweDUwMzQKKwlNQUNfSUZfQ1RSTF90IGlmX2N0cmw7CQkJCS8vICAweDUwMzgKKwlNQUNfSUZfU1RBVF90IGlmX3N0YXQ7CQkJCS8vICAweDUwM0MKKwlNQUNfU1RBVElPTl9BRERSMV90IHN0YXRpb25fYWRkcl8xOwkJLy8gIDB4NTA0MAorCU1BQ19TVEFUSU9OX0FERFIyX3Qgc3RhdGlvbl9hZGRyXzI7CQkvLyAgMHg1MDQ0Cit9IE1BQ190LCAqUE1BQ190OworCisvKiBFTkQgT0YgTUFDIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKy8qIFNUQVJUIE9GIE1BQyBTVEFUIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIENhcnJ5IFJlZ2lzdGVyIE9uZSBhbmQgaXQncyBNYXNrIFJlZ2lzdGVyIHJlZyBsb2NhdGVkIGluIG1hYworICogc3RhdCBhZGRyZXNzIG1hcCBhZGRyZXNzIDB4NjEzMCBhbmQgMHg2MTM4LgorICovCit0eXBlZGVmIHVuaW9uIF9NQUNfU1RBVF9SRUdfMV90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB0cjY0OjE7CS8vIGJpdCAzMQorCQl1MzIgdHIxMjc6MTsJLy8gYml0IDMwCisJCXUzMiB0cjI1NToxOwkvLyBiaXQgMjkKKwkJdTMyIHRyNTExOjE7CS8vIGJpdCAyOAorCQl1MzIgdHIxazoxOwkvLyBiaXQgMjcKKwkJdTMyIHRybWF4OjE7CS8vIGJpdCAyNgorCQl1MzIgdHJtZ3Y6MTsJLy8gYml0IDI1CisJCXUzMiB1bnVzZWQ6ODsJLy8gYml0cyAxNy0yNAorCQl1MzIgcmJ5dDoxOwkvLyBiaXQgMTYKKwkJdTMyIHJwa3Q6MTsJLy8gYml0IDE1CisJCXUzMiByZmNzOjE7CS8vIGJpdCAxNAorCQl1MzIgcm1jYToxOwkvLyBiaXQgMTMKKwkJdTMyIHJiY2E6MTsJLy8gYml0IDEyCisJCXUzMiByeGNmOjE7CS8vIGJpdCAxMQorCQl1MzIgcnhwZjoxOwkvLyBiaXQgMTAKKwkJdTMyIHJ4dW86MTsJLy8gYml0IDkKKwkJdTMyIHJhbG46MTsJLy8gYml0IDgKKwkJdTMyIHJmbHI6MTsJLy8gYml0IDcKKwkJdTMyIHJjZGU6MTsJLy8gYml0IDYKKwkJdTMyIHJjc2U6MTsJLy8gYml0IDUKKwkJdTMyIHJ1bmQ6MTsJLy8gYml0IDQKKwkJdTMyIHJvdnI6MTsJLy8gYml0IDMKKwkJdTMyIHJmcmc6MTsJLy8gYml0IDIKKwkJdTMyIHJqYnI6MTsJLy8gYml0IDEKKwkJdTMyIHJkcnA6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiByZHJwOjE7CS8vIGJpdCAwCisJCXUzMiByamJyOjE7CS8vIGJpdCAxCisJCXUzMiByZnJnOjE7CS8vIGJpdCAyCisJCXUzMiByb3ZyOjE7CS8vIGJpdCAzCisJCXUzMiBydW5kOjE7CS8vIGJpdCA0CisJCXUzMiByY3NlOjE7CS8vIGJpdCA1CisJCXUzMiByY2RlOjE7CS8vIGJpdCA2CisJCXUzMiByZmxyOjE7CS8vIGJpdCA3CisJCXUzMiByYWxuOjE7CS8vIGJpdCA4CisJCXUzMiByeHVvOjE7CS8vIGJpdCA5CisJCXUzMiByeHBmOjE7CS8vIGJpdCAxMAorCQl1MzIgcnhjZjoxOwkvLyBiaXQgMTEKKwkJdTMyIHJiY2E6MTsJLy8gYml0IDEyCisJCXUzMiBybWNhOjE7CS8vIGJpdCAxMworCQl1MzIgcmZjczoxOwkvLyBiaXQgMTQKKwkJdTMyIHJwa3Q6MTsJLy8gYml0IDE1CisJCXUzMiByYnl0OjE7CS8vIGJpdCAxNgorCQl1MzIgdW51c2VkOjg7CS8vIGJpdHMgMTctMjQKKwkJdTMyIHRybWd2OjE7CS8vIGJpdCAyNQorCQl1MzIgdHJtYXg6MTsJLy8gYml0IDI2CisJCXUzMiB0cjFrOjE7CS8vIGJpdCAyNworCQl1MzIgdHI1MTE6MTsJLy8gYml0IDI4CisJCXUzMiB0cjI1NToxOwkvLyBiaXQgMjkKKwkJdTMyIHRyMTI3OjE7CS8vIGJpdCAzMAorCQl1MzIgdHI2NDoxOwkvLyBiaXQgMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX1NUQVRfUkVHXzFfdCwgKlBNQUNfU1RBVF9SRUdfMV90OworCisvKgorICogc3RydWN0dXJlIGZvciBDYXJyeSBSZWdpc3RlciBUd28gTWFzayBSZWdpc3RlciByZWcgaW4gbWFjIHN0YXQgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg2MTNDCisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19TVEFUX1JFR18yX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoxMjsJLy8gYml0IDIwLTMxCisJCXUzMiB0amJyOjE7CS8vIGJpdCAxOQorCQl1MzIgdGZjczoxOwkvLyBiaXQgMTgKKwkJdTMyIHR4Y2Y6MTsJLy8gYml0IDE3CisJCXUzMiB0b3ZyOjE7CS8vIGJpdCAxNgorCQl1MzIgdHVuZDoxOwkvLyBiaXQgMTUKKwkJdTMyIHRmcmc6MTsJLy8gYml0IDE0CisJCXUzMiB0Ynl0OjE7CS8vIGJpdCAxMworCQl1MzIgdHBrdDoxOwkvLyBiaXQgMTIKKwkJdTMyIHRtY2E6MTsJLy8gYml0IDExCisJCXUzMiB0YmNhOjE7CS8vIGJpdCAxMAorCQl1MzIgdHhwZjoxOwkvLyBiaXQgOQorCQl1MzIgdGRmcjoxOwkvLyBiaXQgOAorCQl1MzIgdGVkZjoxOwkvLyBiaXQgNworCQl1MzIgdHNjbDoxOwkvLyBiaXQgNgorCQl1MzIgdG1jbDoxOwkvLyBiaXQgNQorCQl1MzIgdGxjbDoxOwkvLyBiaXQgNAorCQl1MzIgdHhjbDoxOwkvLyBiaXQgMworCQl1MzIgdG5jbDoxOwkvLyBiaXQgMgorCQl1MzIgdHBmaDoxOwkvLyBiaXQgMQorCQl1MzIgdGRycDoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHRkcnA6MTsJLy8gYml0IDAKKwkJdTMyIHRwZmg6MTsJLy8gYml0IDEKKwkJdTMyIHRuY2w6MTsJLy8gYml0IDIKKwkJdTMyIHR4Y2w6MTsJLy8gYml0IDMKKwkJdTMyIHRsY2w6MTsJLy8gYml0IDQKKwkJdTMyIHRtY2w6MTsJLy8gYml0IDUKKwkJdTMyIHRzY2w6MTsJLy8gYml0IDYKKwkJdTMyIHRlZGY6MTsJLy8gYml0IDcKKwkJdTMyIHRkZnI6MTsJLy8gYml0IDgKKwkJdTMyIHR4cGY6MTsJLy8gYml0IDkKKwkJdTMyIHRiY2E6MTsJLy8gYml0IDEwCisJCXUzMiB0bWNhOjE7CS8vIGJpdCAxMQorCQl1MzIgdHBrdDoxOwkvLyBiaXQgMTIKKwkJdTMyIHRieXQ6MTsJLy8gYml0IDEzCisJCXUzMiB0ZnJnOjE7CS8vIGJpdCAxNAorCQl1MzIgdHVuZDoxOwkvLyBiaXQgMTUKKwkJdTMyIHRvdnI6MTsJLy8gYml0IDE2CisJCXUzMiB0eGNmOjE7CS8vIGJpdCAxNworCQl1MzIgdGZjczoxOwkvLyBiaXQgMTgKKwkJdTMyIHRqYnI6MTsJLy8gYml0IDE5CisJCXUzMiB1bnVzZWQ6MTI7CS8vIGJpdCAyMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfU1RBVF9SRUdfMl90LCAqUE1BQ19TVEFUX1JFR18yX3Q7CisKKy8qCisgKiBNQUMgU1RBVFMgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKi8KK3R5cGVkZWYgc3RydWN0IF9NQUNfU1RBVF90IHsJCS8vIExvY2F0aW9uOgorCXUzMiBwYWRbMzJdOwkJLy8gIDB4NjAwMCAtIDYwN0MKKworCS8vIFR4L1J4IDAtNjQgQnl0ZSBGcmFtZSBDb3VudGVyCisJdTMyIFRSNjQ7CQkJLy8gIDB4NjA4MAorCisJLy8gVHgvUnggNjUtMTI3IEJ5dGUgRnJhbWUgQ291bnRlcgorCXUzMiBUUjEyNzsJCQkvLyAgMHg2MDg0CisKKwkvLyBUeC9SeCAxMjgtMjU1IEJ5dGUgRnJhbWUgQ291bnRlcgorCXUzMiBUUjI1NTsJCQkvLyAgMHg2MDg4CisKKwkvLyBUeC9SeCAyNTYtNTExIEJ5dGUgRnJhbWUgQ291bnRlcgorCXUzMiBUUjUxMTsJCQkvLyAgMHg2MDhDCisKKwkvLyBUeC9SeCA1MTItMTAyMyBCeXRlIEZyYW1lIENvdW50ZXIKKwl1MzIgVFIxSzsJCQkvLyAgMHg2MDkwCisKKwkvLyBUeC9SeCAxMDI0LTE1MTggQnl0ZSBGcmFtZSBDb3VudGVyCisJdTMyIFRSTWF4OwkJCS8vICAweDYwOTQKKworCS8vIFR4L1J4IDE1MTktMTUyMiBCeXRlIEdvb2QgVkxBTiBGcmFtZSBDb3VudAorCXUzMiBUUk1ndjsJCQkvLyAgMHg2MDk4CisKKwkvLyBSeCBCeXRlIENvdW50ZXIKKwl1MzIgUkJ5dDsJCQkvLyAgMHg2MDlDCisKKwkvLyBSeCBQYWNrZXQgQ291bnRlcgorCXUzMiBSUGt0OwkJCS8vICAweDYwQTAKKworCS8vIFJ4IEZDUyBFcnJvciBDb3VudGVyCisJdTMyIFJGY3M7CQkJLy8gIDB4NjBBNAorCisJLy8gUnggTXVsdGljYXN0IFBhY2tldCBDb3VudGVyCisJdTMyIFJNY2E7CQkJLy8gIDB4NjBBOAorCisJLy8gUnggQnJvYWRjYXN0IFBhY2tldCBDb3VudGVyCisJdTMyIFJCY2E7CQkJLy8gIDB4NjBBQworCisJLy8gUnggQ29udHJvbCBGcmFtZSBQYWNrZXQgQ291bnRlcgorCXUzMiBSeENmOwkJCS8vICAweDYwQjAKKworCS8vIFJ4IFBhdXNlIEZyYW1lIFBhY2tldCBDb3VudGVyCisJdTMyIFJ4UGY7CQkJLy8gIDB4NjBCNAorCisJLy8gUnggVW5rbm93biBPUCBDb2RlIENvdW50ZXIKKwl1MzIgUnhVbzsJCQkvLyAgMHg2MEI4CisKKwkvLyBSeCBBbGlnbm1lbnQgRXJyb3IgQ291bnRlcgorCXUzMiBSQWxuOwkJCS8vICAweDYwQkMKKworCS8vIFJ4IEZyYW1lIExlbmd0aCBFcnJvciBDb3VudGVyCisJdTMyIFJGbHI7CQkJLy8gIDB4NjBDMAorCisJLy8gUnggQ29kZSBFcnJvciBDb3VudGVyCisJdTMyIFJDZGU7CQkJLy8gIDB4NjBDNAorCisJLy8gUnggQ2FycmllciBTZW5zZSBFcnJvciBDb3VudGVyCisJdTMyIFJDc2U7CQkJLy8gIDB4NjBDOAorCisJLy8gUnggVW5kZXJzaXplIFBhY2tldCBDb3VudGVyCisJdTMyIFJVbmQ7CQkJLy8gIDB4NjBDQworCisJLy8gUnggT3ZlcnNpemUgUGFja2V0IENvdW50ZXIKKwl1MzIgUk92cjsJCQkvLyAgMHg2MEQwCisKKwkvLyBSeCBGcmFnbWVudCBDb3VudGVyCisJdTMyIFJGcmc7CQkJLy8gIDB4NjBENAorCisJLy8gUnggSmFiYmVyIENvdW50ZXIKKwl1MzIgUkpicjsJCQkvLyAgMHg2MEQ4CisKKwkvLyBSeCBEcm9wCisJdTMyIFJEcnA7CQkJLy8gIDB4NjBEQworCisJLy8gVHggQnl0ZSBDb3VudGVyCisJdTMyIFRCeXQ7CQkJLy8gIDB4NjBFMAorCisJLy8gVHggUGFja2V0IENvdW50ZXIKKwl1MzIgVFBrdDsJCQkvLyAgMHg2MEU0CisKKwkvLyBUeCBNdWx0aWNhc3QgUGFja2V0IENvdW50ZXIKKwl1MzIgVE1jYTsJCQkvLyAgMHg2MEU4CisKKwkvLyBUeCBCcm9hZGNhc3QgUGFja2V0IENvdW50ZXIKKwl1MzIgVEJjYTsJCQkvLyAgMHg2MEVDCisKKwkvLyBUeCBQYXVzZSBDb250cm9sIEZyYW1lIENvdW50ZXIKKwl1MzIgVHhQZjsJCQkvLyAgMHg2MEYwCisKKwkvLyBUeCBEZWZlcnJhbCBQYWNrZXQgQ291bnRlcgorCXUzMiBURGZyOwkJCS8vICAweDYwRjQKKworCS8vIFR4IEV4Y2Vzc2l2ZSBEZWZlcnJhbCBQYWNrZXQgQ291bnRlcgorCXUzMiBURWRmOwkJCS8vICAweDYwRjgKKworCS8vIFR4IFNpbmdsZSBDb2xsaXNpb24gUGFja2V0IENvdW50ZXIKKwl1MzIgVFNjbDsJCQkvLyAgMHg2MEZDCisKKwkvLyBUeCBNdWx0aXBsZSBDb2xsaXNpb24gUGFja2V0IENvdW50ZXIKKwl1MzIgVE1jbDsJCQkvLyAgMHg2MTAwCisKKwkvLyBUeCBMYXRlIENvbGxpc2lvbiBQYWNrZXQgQ291bnRlcgorCXUzMiBUTGNsOwkJCS8vICAweDYxMDQKKworCS8vIFR4IEV4Y2Vzc2l2ZSBDb2xsaXNpb24gUGFja2V0IENvdW50ZXIKKwl1MzIgVFhjbDsJCQkvLyAgMHg2MTA4CisKKwkvLyBUeCBUb3RhbCBDb2xsaXNpb24gUGFja2V0IENvdW50ZXIKKwl1MzIgVE5jbDsJCQkvLyAgMHg2MTBDCisKKwkvLyBUeCBQYXVzZSBGcmFtZSBIb25vcmVkIENvdW50ZXIKKwl1MzIgVFBmaDsJCQkvLyAgMHg2MTEwCisKKwkvLyBUeCBEcm9wIEZyYW1lIENvdW50ZXIKKwl1MzIgVERycDsJCQkvLyAgMHg2MTE0CisKKwkvLyBUeCBKYWJiZXIgRnJhbWUgQ291bnRlcgorCXUzMiBUSmJyOwkJCS8vICAweDYxMTgKKworCS8vIFR4IEZDUyBFcnJvciBDb3VudGVyCisJdTMyIFRGY3M7CQkJLy8gIDB4NjExQworCisJLy8gVHggQ29udHJvbCBGcmFtZSBDb3VudGVyCisJdTMyIFR4Q2Y7CQkJLy8gIDB4NjEyMAorCisJLy8gVHggT3ZlcnNpemUgRnJhbWUgQ291bnRlcgorCXUzMiBUT3ZyOwkJCS8vICAweDYxMjQKKworCS8vIFR4IFVuZGVyc2l6ZSBGcmFtZSBDb3VudGVyCisJdTMyIFRVbmQ7CQkJLy8gIDB4NjEyOAorCisJLy8gVHggRnJhZ21lbnRzIEZyYW1lIENvdW50ZXIKKwl1MzIgVEZyZzsJCQkvLyAgMHg2MTJDCisKKwkvLyBDYXJyeSBSZWdpc3RlciBPbmUgUmVnaXN0ZXIKKwlNQUNfU1RBVF9SRUdfMV90IENhcnJ5MTsJLy8gIDB4NjEzMAorCisJLy8gQ2FycnkgUmVnaXN0ZXIgVHdvIFJlZ2lzdGVyCisJTUFDX1NUQVRfUkVHXzJfdCBDYXJyeTI7CS8vICAweDYxMzQKKworCS8vIENhcnJ5IFJlZ2lzdGVyIE9uZSBNYXNrIFJlZ2lzdGVyCisJTUFDX1NUQVRfUkVHXzFfdCBDYXJyeTFNOwkvLyAgMHg2MTM4CisKKwkvLyBDYXJyeSBSZWdpc3RlciBUd28gTWFzayBSZWdpc3RlcgorCU1BQ19TVEFUX1JFR18yX3QgQ2FycnkyTTsJLy8gIDB4NjEzQworfSBNQUNfU1RBVF90LCAqUE1BQ19TVEFUX3Q7CisKKy8qIEVORCBPRiBNQUMgU1RBVCBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisKKy8qIFNUQVJUIE9GIE1NQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogc3RydWN0dXJlIGZvciBNYWluIE1lbW9yeSBDb250cm9sbGVyIENvbnRyb2wgcmVnIGluIG1tYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDcwMDAKKyAqLwordHlwZWRlZiB1bmlvbiBfTU1DX0NUUkxfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MjU7CQkvLyBiaXRzIDctMzEKKwkJdTMyIGZvcmNlX2NlOjE7CQkvLyBiaXQgNgorCQl1MzIgcnhkbWFfZGlzYWJsZToxOwkvLyBiaXQgNQorCQl1MzIgdHhkbWFfZGlzYWJsZToxOwkvLyBiaXQgNAorCQl1MzIgdHhtYWNfZGlzYWJsZToxOwkvLyBiaXQgMworCQl1MzIgcnhtYWNfZGlzYWJsZToxOwkvLyBiaXQgMgorCQl1MzIgYXJiX2Rpc2FibGU6MTsJCS8vIGJpdCAxCisJCXUzMiBtbWNfZW5hYmxlOjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIG1tY19lbmFibGU6MTsJCS8vIGJpdCAwCisJCXUzMiBhcmJfZGlzYWJsZToxOwkJLy8gYml0IDEKKwkJdTMyIHJ4bWFjX2Rpc2FibGU6MTsJLy8gYml0IDIKKwkJdTMyIHR4bWFjX2Rpc2FibGU6MTsJLy8gYml0IDMKKwkJdTMyIHR4ZG1hX2Rpc2FibGU6MTsJLy8gYml0IDQKKwkJdTMyIHJ4ZG1hX2Rpc2FibGU6MTsJLy8gYml0IDUKKwkJdTMyIGZvcmNlX2NlOjE7CQkvLyBiaXQgNgorCQl1MzIgcmVzZXJ2ZWQ6MjU7CQkvLyBiaXRzIDctMzEKKyNlbmRpZgorCX0gYml0czsKK30gTU1DX0NUUkxfdCwgKlBNTUNfQ1RSTF90OworCisvKgorICogc3RydWN0dXJlIGZvciBNYWluIE1lbW9yeSBDb250cm9sbGVyIEhvc3QgTWVtb3J5IEFjY2VzcyBBZGRyZXNzIHJlZyBpbiBtbWMKKyAqIGFkZHJlc3MgbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4NzAwNAorICovCit0eXBlZGVmIHVuaW9uIF9NTUNfU1JBTV9BQ0NFU1NfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgYnl0ZV9lbmFibGU6MTY7CS8vIGJpdHMgMTYtMzEKKwkJdTMyIHJlc2VydmVkMjoyOwkJLy8gYml0cyAxNC0xNQorCQl1MzIgcmVxX2FkZHI6MTA7CQkvLyBiaXRzIDQtMTMKKwkJdTMyIHJlc2VydmVkMToxOwkJLy8gYml0IDMKKwkJdTMyIGlzX2N0cmxfd29yZDoxOwkvLyBiaXQgMgorCQl1MzIgd3JfYWNjZXNzOjE7CQkvLyBiaXQgMQorCQl1MzIgcmVxX2FjY2VzczoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiByZXFfYWNjZXNzOjE7CQkvLyBiaXQgMAorCQl1MzIgd3JfYWNjZXNzOjE7CQkvLyBiaXQgMQorCQl1MzIgaXNfY3RybF93b3JkOjE7CS8vIGJpdCAyCisJCXUzMiByZXNlcnZlZDE6MTsJCS8vIGJpdCAzCisJCXUzMiByZXFfYWRkcjoxMDsJCS8vIGJpdHMgNC0xMworCQl1MzIgcmVzZXJ2ZWQyOjI7CQkvLyBiaXRzIDE0LTE1CisJCXUzMiBieXRlX2VuYWJsZToxNjsJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNTUNfU1JBTV9BQ0NFU1NfdCwgKlBNTUNfU1JBTV9BQ0NFU1NfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTWFpbiBNZW1vcnkgQ29udHJvbGxlciBIb3N0IE1lbW9yeSBBY2Nlc3MgRGF0YSByZWcgaW4gbW1jCisgKiBhZGRyZXNzIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDcwMDggLSAweDcwMTQKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBNZW1vcnkgQ29udHJvbCBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX01NQ190IHsJCQkvLyBMb2NhdGlvbjoKKwlNTUNfQ1RSTF90IG1tY19jdHJsOwkJLy8gIDB4NzAwMAorCU1NQ19TUkFNX0FDQ0VTU190IHNyYW1fYWNjZXNzOwkvLyAgMHg3MDA0CisJdTMyIHNyYW1fd29yZDE7CQkvLyAgMHg3MDA4CisJdTMyIHNyYW1fd29yZDI7CQkvLyAgMHg3MDBDCisJdTMyIHNyYW1fd29yZDM7CQkvLyAgMHg3MDEwCisJdTMyIHNyYW1fd29yZDQ7CQkvLyAgMHg3MDE0Cit9IE1NQ190LCAqUE1NQ190OworCisvKiBFTkQgT0YgTU1DIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKworLyogU1RBUlQgT0YgRVhQIFJPTSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogRXhwYW5zaW9uIFJPTSBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqLworCisvKiBUYWtlIHRoaXMgb3V0IHVudGlsIGl0IGlzIG5vdCBlbXB0eSAqLworI2lmIDAKK3R5cGVkZWYgc3RydWN0IF9FWFBfUk9NX3QgeworCit9IEVYUF9ST01fdCwgKlBFWFBfUk9NX3Q7CisjZW5kaWYKKworLyogRU5EIE9GIEVYUCBST00gUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworCisvKgorICogSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0FERFJFU1NfTUFQX3QgeworCUdMT0JBTF90IGdsb2JhbDsKKwkvLyB1bnVzZWQgc2VjdGlvbiBvZiBnbG9iYWwgYWRkcmVzcyBtYXAKKwl1OCB1bnVzZWRfZ2xvYmFsWzQwOTYgLSBzaXplb2YoR0xPQkFMX3QpXTsKKwlUWERNQV90IHR4ZG1hOworCS8vIHVudXNlZCBzZWN0aW9uIG9mIHR4ZG1hIGFkZHJlc3MgbWFwCisJdTggdW51c2VkX3R4ZG1hWzQwOTYgLSBzaXplb2YoVFhETUFfdCldOworCVJYRE1BX3QgcnhkbWE7CisJLy8gdW51c2VkIHNlY3Rpb24gb2YgcnhkbWEgYWRkcmVzcyBtYXAKKwl1OCB1bnVzZWRfcnhkbWFbNDA5NiAtIHNpemVvZihSWERNQV90KV07CisJVFhNQUNfdCB0eG1hYzsKKwkvLyB1bnVzZWQgc2VjdGlvbiBvZiB0eG1hYyBhZGRyZXNzIG1hcAorCXU4IHVudXNlZF90eG1hY1s0MDk2IC0gc2l6ZW9mKFRYTUFDX3QpXTsKKwlSWE1BQ190IHJ4bWFjOworCS8vIHVudXNlZCBzZWN0aW9uIG9mIHJ4bWFjIGFkZHJlc3MgbWFwCisJdTggdW51c2VkX3J4bWFjWzQwOTYgLSBzaXplb2YoUlhNQUNfdCldOworCU1BQ190IG1hYzsKKwkvLyB1bnVzZWQgc2VjdGlvbiBvZiBtYWMgYWRkcmVzcyBtYXAKKwl1OCB1bnVzZWRfbWFjWzQwOTYgLSBzaXplb2YoTUFDX3QpXTsKKwlNQUNfU1RBVF90IG1hY1N0YXQ7CisJLy8gdW51c2VkIHNlY3Rpb24gb2YgbWFjIHN0YXQgYWRkcmVzcyBtYXAKKwl1OCB1bnVzZWRfbWFjX3N0YXRbNDA5NiAtIHNpemVvZihNQUNfU1RBVF90KV07CisJTU1DX3QgbW1jOworCS8vIHVudXNlZCBzZWN0aW9uIG9mIG1tYyBhZGRyZXNzIG1hcAorCXU4IHVudXNlZF9tbWNbNDA5NiAtIHNpemVvZihNTUNfdCldOworCS8vIHVudXNlZCBzZWN0aW9uIG9mIGFkZHJlc3MgbWFwCisJdTggdW51c2VkX1sxMDE1ODA4XTsKKworLyogVGFrZSB0aGlzIG91dCB1bnRpbCBpdCBpcyBub3QgZW1wdHkgKi8KKyNpZiAwCisJRVhQX1JPTV90IGV4cF9yb207CisjZW5kaWYKKworCXU4IHVudXNlZF9leHBfcm9tWzQwOTZdOwkvLyBNR1Mtc2l6ZSBUQkQKKwl1OCB1bnVzZWRfX1s1MjQyODhdOwkvLyB1bnVzZWQgc2VjdGlvbiBvZiBhZGRyZXNzIG1hcAorfSBBRERSRVNTX01BUF90LCAqUEFERFJFU1NfTUFQX3Q7CisKKyNlbmRpZiAvKiBfRVQxMzEwX0FERFJFU1NfTUFQX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2VlcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjE5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uYwpAQCAtMCwwICsxLDQ4MCBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfZWVwcm9tLmMgLSBDb2RlIHVzZWQgdG8gYWNjZXNzIHRoZSBkZXZpY2UncyBFRVBST00KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorI2luY2x1ZGUgImV0MTMxMF9lZXByb20uaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisjaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKyNpbmNsdWRlICJldDEzMXhfaXNyLmgiCisKKyNpbmNsdWRlICJldDEzMTBfdHguaCIKKworCisvKgorICogRUVQUk9NIERlZmluZXMKKyAqLworCisvKiBMQkNJRiBSZWdpc3RlciBHcm91cHMgKGFkZHJlc3NlZCB2aWEgMzItYml0IG9mZnNldHMpICovCisjZGVmaW5lIExCQ0lGX0RXT1JEMF9HUk9VUF9PRkZTRVQgICAgICAgMHhBQworI2RlZmluZSBMQkNJRl9EV09SRDFfR1JPVVBfT0ZGU0VUICAgICAgIDB4QjAKKworLyogTEJDSUYgUmVnaXN0ZXJzIChhZGRyZXNzZWQgdmlhIDgtYml0IG9mZnNldHMpICovCisjZGVmaW5lIExCQ0lGX0FERFJFU1NfUkVHSVNURVJfT0ZGU0VUICAgMHhBQworI2RlZmluZSBMQkNJRl9EQVRBX1JFR0lTVEVSX09GRlNFVCAgICAgIDB4QjAKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9SRUdJU1RFUl9PRkZTRVQgICAweEIxCisjZGVmaW5lIExCQ0lGX1NUQVRVU19SRUdJU1RFUl9PRkZTRVQgICAgMHhCMgorCisvKiBMQkNJRiBDb250cm9sIFJlZ2lzdGVyIEJpdHMgKi8KKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9TRVFVRU5USUFMX1JFQUQgICAweDAxCisjZGVmaW5lIExCQ0lGX0NPTlRST0xfUEFHRV9XUklURSAgICAgICAgMHgwMgorI2RlZmluZSBMQkNJRl9DT05UUk9MX1VOVVNFRDEgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9FRVBST01fUkVMT0FEICAgICAweDA4CisjZGVmaW5lIExCQ0lGX0NPTlRST0xfVU5VU0VEMiAgICAgICAgICAgMHgxMAorI2RlZmluZSBMQkNJRl9DT05UUk9MX1RXT19CWVRFX0FERFIgICAgIDB4MjAKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9JMkNfV1JJVEUgICAgICAgICAweDQwCisjZGVmaW5lIExCQ0lGX0NPTlRST0xfTEJDSUZfRU5BQkxFICAgICAgMHg4MAorCisvKiBMQkNJRiBTdGF0dXMgUmVnaXN0ZXIgQml0cyAqLworI2RlZmluZSBMQkNJRl9TVEFUVVNfUEhZX1FVRVVFX0FWQUlMICAgIDB4MDEKKyNkZWZpbmUgTEJDSUZfU1RBVFVTX0kyQ19JRExFICAgICAgICAgICAweDAyCisjZGVmaW5lIExCQ0lGX1NUQVRVU19BQ0tfRVJST1IgICAgICAgICAgMHgwNAorI2RlZmluZSBMQkNJRl9TVEFUVVNfR0VORVJBTF9FUlJPUiAgICAgIDB4MDgKKyNkZWZpbmUgTEJDSUZfU1RBVFVTX1VOVVNFRCAgICAgICAgICAgICAweDMwCisjZGVmaW5lIExCQ0lGX1NUQVRVU19DSEVDS1NVTV9FUlJPUiAgICAgMHg0MAorI2RlZmluZSBMQkNJRl9TVEFUVVNfRUVQUk9NX1BSRVNFTlQgICAgIDB4ODAKKworLyogTWlzY2VsbGFuZW91cyBDb25zdHJhaW50cyAqLworI2RlZmluZSBNQVhfTlVNX1JFR0lTVEVSX1BPTExTICAgICAgICAgIDEwMDAKKyNkZWZpbmUgTUFYX05VTV9XUklURV9SRVRSSUVTICAgICAgICAgICAyCisKKy8qCisgKiBEZWZpbmUgbWFjcm9zIHRoYXQgYWxsb3cgaW5kaXZpZHVhbCByZWdpc3RlciB2YWx1ZXMgdG8gYmUgZXh0cmFjdGVkIGZyb20gYQorICogRFdPUkQxIHJlZ2lzdGVyIGdyb3VwaW5nCisgKi8KKyNkZWZpbmUgRVhUUkFDVF9EQVRBX1JFR0lTVEVSKHgpICAgICh1aW50OF90KSh4ICYgMHhGRikKKyNkZWZpbmUgRVhUUkFDVF9TVEFUVVNfUkVHSVNURVIoeCkgICh1aW50OF90KSgoeCA+PiAxNikgJiAweEZGKQorI2RlZmluZSBFWFRSQUNUX0NPTlRST0xfUkVHKHgpICAgICAgKHVpbnQ4X3QpKCh4ID4+IDgpICYgMHhGRikKKworLyoqCisgKiBFZXByb21Xcml0ZUJ5dGUgLSBXcml0ZSBhIGJ5dGUgdG8gdGhlIEVUMTMxMCdzIEVFUFJPTQorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiBAdW5BZGRyZXNzOiB0aGUgYWRkcmVzcyB0byB3cml0ZQorICogQGJEYXRhOiB0aGUgdmFsdWUgdG8gd3JpdGUKKyAqIEB1bkVlcHJvbklkOiB0aGUgSUQgb2YgdGhlIEVFUFJPTQorICogQHVuQWRkcmVzc2luZ01vZGU6IGhvdyB0aGUgRUVQUk9NIGlzIHRvIGJlIGFjY2Vzc2VkCisgKgorICogUmV0dXJucyBTVUNDRVNTIG9yIEZBSUxVUkUKKyAqLworaW50MzJfdCBFZXByb21Xcml0ZUJ5dGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgdWludDMyX3QgdW5BZGRyZXNzLAorCQkJdWludDhfdCBiRGF0YSwgdWludDMyX3QgdW5FZXByb21JZCwKKwkJCXVpbnQzMl90IHVuQWRkcmVzc2luZ01vZGUpCit7CisgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcEFkYXB0ZXItPnBkZXY7CisJaW50MzJfdCBuSW5kZXg7CisJaW50MzJfdCBuUmV0cmllczsKKwlpbnQzMl90IG5FcnJvciA9IGZhbHNlOworCWludDMyX3QgbkkyQ1dyaXRlQWN0aXZlID0gMDsKKwlpbnQzMl90IG5Xcml0ZVN1Y2Nlc3NmdWwgPSAwOworCXVpbnQ4X3QgYkNvbnRyb2w7CisJdWludDhfdCBiU3RhdHVzID0gMDsKKwl1aW50MzJfdCB1bkR3b3JkMSA9IDA7CisJdWludDMyX3QgdW5EYXRhID0gMDsKKworCS8qCisJICogVGhlIGZvbGxvd2luZyBleGNlcnB0IGlzIGZyb20gIlNlcmlhbCBFRVBST00gSFcgRGVzaWduCisJICogU3BlY2lmaWNhdGlvbiIgVmVyc2lvbiAwLjkyICg5LzIwLzIwMDQpOgorCSAqCisJICogU2luZ2xlIEJ5dGUgV3JpdGVzCisJICoKKwkgKiBGb3IgYW4gRUVQUk9NLCBhbiBJMkMgc2luZ2xlIGJ5dGUgd3JpdGUgaXMgZGVmaW5lZCBhcyBhIFNUQVJUCisJICogY29uZGl0aW9uIGZvbGxvd2VkIGJ5IHRoZSBkZXZpY2UgYWRkcmVzcywgRUVQUk9NIGFkZHJlc3MsIG9uZSBieXRlCisJICogb2YgZGF0YSBhbmQgYSBTVE9QIGNvbmRpdGlvbi4gIFRoZSBTVE9QIGNvbmRpdGlvbiB3aWxsIHRyaWdnZXIgdGhlCisJICogRUVQUk9NJ3MgaW50ZXJuYWxseSB0aW1lZCB3cml0ZSBjeWNsZSB0byB0aGUgbm9udm9sYXRpbGUgbWVtb3J5LgorCSAqIEFsbCBpbnB1dHMgYXJlIGRpc2FibGVkIGR1cmluZyB0aGlzIHdyaXRlIGN5Y2xlIGFuZCB0aGUgRUVQUk9NIHdpbGwKKwkgKiBub3QgcmVzcG9uZCB0byBhbnkgYWNjZXNzIHVudGlsIHRoZSBpbnRlcm5hbCB3cml0ZSBpcyBjb21wbGV0ZS4KKwkgKiBUaGUgc3RlcHMgdG8gZXhlY3V0ZSBhIHNpbmdsZSBieXRlIHdyaXRlIGFyZSBhcyBmb2xsb3dzOgorCSAqCisJICogMS4gQ2hlY2sgTEJDSUYgU3RhdHVzIFJlZ2lzdGVyIGZvciBiaXRzIDYgJiAzOjIgYWxsIGVxdWFsIHRvIDAgYW5kCisJICogICAgYml0cyA3LDE6MCBib3RoIGVxdWFsIHRvIDEsIGF0IGxlYXN0IG9uY2UgYWZ0ZXIgcmVzZXQuCisJICogICAgU3Vic2VxdWVudCBvcGVyYXRpb25zIG5lZWQgb25seSB0byBjaGVjayB0aGF0IGJpdHMgMTowIGFyZQorCSAqICAgIGVxdWFsIHRvIDEgcHJpb3IgdG8gc3RhcnRpbmcgYSBzaW5nbGUgYnl0ZSB3cml0ZS4KKwkgKgorCSAqIDIuIFdyaXRlIHRvIHRoZSBMQkNJRiBDb250cm9sIFJlZ2lzdGVyOiAgYml0IDc9MSwgYml0IDY9MSwgYml0IDM9MCwKKwkgKiAgICBhbmQgYml0cyAxOjAgYm90aCA9MC4gIEJpdCA1IHNob3VsZCBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZQorCSAqICAgIHR5cGUgb2YgRUVQUk9NIGJlaW5nIGFjY2Vzc2VkICgxPXR3byBieXRlIGFkZHJlc3NpbmcsIDA9b25lCisJICogICAgYnl0ZSBhZGRyZXNzaW5nKS4KKwkgKgorCSAqIDMuIFdyaXRlIHRoZSBhZGRyZXNzIHRvIHRoZSBMQkNJRiBBZGRyZXNzIFJlZ2lzdGVyLgorCSAqCisJICogNC4gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIExCQ0lGIERhdGEgUmVnaXN0ZXIgKHRoZSBJMkMgd3JpdGUgd2lsbAorCSAqICAgIGJlZ2luKS4KKwkgKgorCSAqIDUuIE1vbml0b3IgYml0IDE6MCBvZiB0aGUgTEJDSUYgU3RhdHVzIFJlZ2lzdGVyLiAgV2hlbiBiaXRzIDE6MCBhcmUKKwkgKiAgICBib3RoIGVxdWFsIHRvIDEsIHRoZSBJMkMgd3JpdGUgaGFzIGNvbXBsZXRlZCBhbmQgdGhlIGludGVybmFsCisJICogICAgd3JpdGUgY3ljbGUgb2YgdGhlIEVFUFJPTSBpcyBhYm91dCB0byBzdGFydC4gKGJpdHMgMTowID0gMDEgaXMKKwkgKiAgICBhIGxlZ2FsIHN0YXRlIHdoaWxlIHdhaXRpbmcgZnJvbSBib3RoIGVxdWFsIHRvIDEsIGJ1dCBiaXRzCisJICogICAgMTowID0gMTAgaXMgaW52YWxpZCBhbmQgaW1wbGllcyB0aGF0IHNvbWV0aGluZyBpcyBicm9rZW4pLgorCSAqCisJICogNi4gQ2hlY2sgYml0IDMgb2YgdGhlIExCQ0lGIFN0YXR1cyBSZWdpc3Rlci4gIElmICBlcXVhbCB0byAxLCBhbgorCSAqICAgIGVycm9yIGhhcyBvY2N1cnJlZC4KKwkgKgorCSAqIDcuIENoZWNrIGJpdCAyIG9mIHRoZSBMQkNJRiBTdGF0dXMgUmVnaXN0ZXIuICBJZiBlcXVhbCB0byAxIGFuIEFDSworCSAqICAgIGVycm9yIGhhcyBvY2N1cnJlZCBvbiB0aGUgYWRkcmVzcyBwaGFzZSBvZiB0aGUgd3JpdGUuICBUaGlzCisJICogICAgY291bGQgYmUgZHVlIHRvIGFuIGFjdHVhbCBoYXJkd2FyZSBmYWlsdXJlIG9yIHRoZSBFRVBST00gbWF5CisJICogICAgc3RpbGwgYmUgaW4gaXRzIGludGVybmFsIHdyaXRlIGN5Y2xlIGZyb20gYSBwcmV2aW91cyB3cml0ZS4KKwkgKiAgICBUaGlzIHdyaXRlIG9wZXJhdGlvbiB3YXMgaWdub3JlZCBhbmQgbXVzdCBiZSByZXBlYXRlZCBsYXRlci4KKwkgKgorCSAqIDguIFNldCBiaXQgNiBvZiB0aGUgTEJDSUYgQ29udHJvbCBSZWdpc3RlciA9IDAuIElmIGFub3RoZXIgd3JpdGUgaXMKKwkgKiAgICByZXF1aXJlZCwgZ28gdG8gc3RlcCAxLgorCSAqLworCisJLyogU3RlcCAxOiAqLworCWZvciAobkluZGV4ID0gMDsgbkluZGV4IDwgTUFYX05VTV9SRUdJU1RFUl9QT0xMUzsgbkluZGV4KyspIHsKKwkJLyogUmVhZCByZWdpc3RlcnMgZ3JvdXBlZCBpbiBEV09SRDEgKi8KKwkJaWYgKHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBMQkNJRl9EV09SRDFfR1JPVVBfT0ZGU0VULAorCQkJCQkgICZ1bkR3b3JkMSkpIHsKKwkJCW5FcnJvciA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCWJTdGF0dXMgPSBFWFRSQUNUX1NUQVRVU19SRUdJU1RFUih1bkR3b3JkMSk7CisKKwkJaWYgKGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfUEhZX1FVRVVFX0FWQUlMICYmCisJCSAgICBiU3RhdHVzICYgTEJDSUZfU1RBVFVTX0kyQ19JRExFKSB7CisJCSAgICAJLyogYml0cyAxOjAgYXJlIGVxdWFsIHRvIDEgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKG5FcnJvciB8fCAobkluZGV4ID49IE1BWF9OVU1fUkVHSVNURVJfUE9MTFMpKSB7CisJCXJldHVybiBGQUlMVVJFOworCX0KKworCS8qIFN0ZXAgMjogKi8KKwliQ29udHJvbCA9IDA7CisJYkNvbnRyb2wgfD0gTEJDSUZfQ09OVFJPTF9MQkNJRl9FTkFCTEUgfCBMQkNJRl9DT05UUk9MX0kyQ19XUklURTsKKworCWlmICh1bkFkZHJlc3NpbmdNb2RlID09IERVQUxfQllURSkgeworCQliQ29udHJvbCB8PSBMQkNJRl9DT05UUk9MX1RXT19CWVRFX0FERFI7CisJfQorCisJaWYgKHBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBMQkNJRl9DT05UUk9MX1JFR0lTVEVSX09GRlNFVCwKKwkJCQkgIGJDb250cm9sKSkgeworCQlyZXR1cm4gRkFJTFVSRTsKKwl9CisKKwluSTJDV3JpdGVBY3RpdmUgPSAxOworCisJLyogUHJlcGFyZSBFRVBST00gYWRkcmVzcyBmb3IgU3RlcCAzICovCisJdW5BZGRyZXNzIHw9ICh1bkFkZHJlc3NpbmdNb2RlID09IERVQUxfQllURSkgPworCSAgICAodW5FZXByb21JZCA8PCAxNikgOiAodW5FZXByb21JZCA8PCA4KTsKKworCWZvciAoblJldHJpZXMgPSAwOyBuUmV0cmllcyA8IE1BWF9OVU1fV1JJVEVfUkVUUklFUzsgblJldHJpZXMrKykgeworCQkvKiBTdGVwIDM6Ki8KKwkJaWYgKHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgTEJDSUZfQUREUkVTU19SRUdJU1RFUl9PRkZTRVQsCisJCQkJCSAgIHVuQWRkcmVzcykpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogU3RlcCA0OiAqLworCQlpZiAocGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIExCQ0lGX0RBVEFfUkVHSVNURVJfT0ZGU0VULAorCQkJCQkgIGJEYXRhKSkgeworCQkJYnJlYWs7CisJCX0KKworCQkvKiBTdGVwIDU6ICovCisJCWZvciAobkluZGV4ID0gMDsgbkluZGV4IDwgTUFYX05VTV9SRUdJU1RFUl9QT0xMUzsgbkluZGV4KyspIHsKKwkJCS8qIFJlYWQgcmVnaXN0ZXJzIGdyb3VwZWQgaW4gRFdPUkQxICovCisJCQlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCisJCQkJCQkgIExCQ0lGX0RXT1JEMV9HUk9VUF9PRkZTRVQsCisJCQkJCQkgICZ1bkR3b3JkMSkpIHsKKwkJCQluRXJyb3IgPSAxOworCQkJCWJyZWFrOworCQkJfQorCisJCQliU3RhdHVzID0gRVhUUkFDVF9TVEFUVVNfUkVHSVNURVIodW5Ed29yZDEpOworCisJCQlpZiAoYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19QSFlfUVVFVUVfQVZBSUwgJiYKKwkJCSAgICBiU3RhdHVzICYgTEJDSUZfU1RBVFVTX0kyQ19JRExFKSB7CisJCQkgICAgCS8qIEkyQyB3cml0ZSBjb21wbGV0ZSAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG5FcnJvciB8fCAobkluZGV4ID49IE1BWF9OVU1fUkVHSVNURVJfUE9MTFMpKSB7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFN0ZXAgNjogRG9uJ3QgYnJlYWsgaGVyZSBpZiB3ZSBhcmUgcmV2aXNpb24gMSwgdGhpcyBpcworCQkgKgkgICBzbyB3ZSBkbyBhIGJsaW5kIHdyaXRlIGZvciBsb2FkIGJ1Zy4KKwkgICAgICAgICAqLworCQlpZiAoYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19HRU5FUkFMX0VSUk9SCisJCSAgICAmJiBwQWRhcHRlci0+UmV2aXNpb25JRCA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFN0ZXAgNyAqLworCQlpZiAoYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19BQ0tfRVJST1IpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBhbiBhY3R1YWwgaGFyZHdhcmUgZmFpbHVyZQorCQkJICogb3IgdGhlIEVFUFJPTSBtYXkgc3RpbGwgYmUgaW4gaXRzIGludGVybmFsIHdyaXRlCisJCQkgKiBjeWNsZSBmcm9tIGEgcHJldmlvdXMgd3JpdGUuIFRoaXMgd3JpdGUgb3BlcmF0aW9uCisJCQkgKiB3YXMgaWdub3JlZCBhbmQgbXVzdCBiZSByZXBlYXRlZCBsYXRlci4KKwkJCSAqLworCQkJdWRlbGF5KDEwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbldyaXRlU3VjY2Vzc2Z1bCA9IDE7CisJCWJyZWFrOworCX0KKworCS8qIFN0ZXAgODogKi8KKwl1ZGVsYXkoMTApOworCW5JbmRleCA9IDA7CisJd2hpbGUgKG5JMkNXcml0ZUFjdGl2ZSkgeworCQliQ29udHJvbCAmPSB+TEJDSUZfQ09OVFJPTF9JMkNfV1JJVEU7CisKKwkJaWYgKHBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBMQkNJRl9DT05UUk9MX1JFR0lTVEVSX09GRlNFVCwKKwkJCQkJICBiQ29udHJvbCkpIHsKKwkJCW5Xcml0ZVN1Y2Nlc3NmdWwgPSAwOworCQl9CisKKwkJLyogRG8gcmVhZCB1bnRpbCBpbnRlcm5hbCBBQ0tfRVJST1IgZ29lcyBhd2F5IG1lYW5pbmcgd3JpdGUKKwkJICogY29tcGxldGVkCisJCSAqLworCQlkbyB7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsCisJCQkJCSAgICAgICBMQkNJRl9BRERSRVNTX1JFR0lTVEVSX09GRlNFVCwKKwkJCQkJICAgICAgIHVuQWRkcmVzcyk7CisJCQlkbyB7CisJCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCisJCQkJCUxCQ0lGX0RBVEFfUkVHSVNURVJfT0ZGU0VULCAmdW5EYXRhKTsKKwkJCX0gd2hpbGUgKCh1bkRhdGEgJiAweDAwMDEwMDAwKSA9PSAwKTsKKwkJfSB3aGlsZSAodW5EYXRhICYgMHgwMDA0MDAwMCk7CisKKwkJYkNvbnRyb2wgPSBFWFRSQUNUX0NPTlRST0xfUkVHKHVuRGF0YSk7CisKKwkJaWYgKGJDb250cm9sICE9IDB4QzAgfHwgbkluZGV4ID09IDEwMDAwKSB7CisJCQlicmVhazsKKwkJfQorCisJCW5JbmRleCsrOworCX0KKworCXJldHVybiBuV3JpdGVTdWNjZXNzZnVsID8gU1VDQ0VTUyA6IEZBSUxVUkU7Cit9CisKKy8qKgorICogRWVwcm9tUmVhZEJ5dGUgLSBSZWFkIGEgYnl0ZSBmcm9tIHRoZSBFVDEzMTAncyBFRVBST00KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICogQHVuQWRkcmVzczogdGhlIGFkZHJlc3MgZnJvbSB3aGljaCB0byByZWFkCisgKiBAcGJEYXRhOiBhIHBvaW50ZXIgdG8gYSBieXRlIGluIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZSBvZiB0aGUgcmVhZAorICogQHVuRWVwcm9uSWQ6IHRoZSBJRCBvZiB0aGUgRUVQUk9NCisgKiBAdW5BZGRyZXNzaW5nTW9kZTogaG93IHRoZSBFRVBST00gaXMgdG8gYmUgYWNjZXNzZWQKKyAqCisgKiBSZXR1cm5zIFNVQ0NFU1Mgb3IgRkFJTFVSRQorICovCitpbnQzMl90IEVlcHJvbVJlYWRCeXRlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIHVpbnQzMl90IHVuQWRkcmVzcywKKwkJICAgICAgIHVpbnQ4X3QgKnBiRGF0YSwgdWludDMyX3QgdW5FZXByb21JZCwKKwkJICAgICAgIHVpbnQzMl90IHVuQWRkcmVzc2luZ01vZGUpCit7CisgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcEFkYXB0ZXItPnBkZXY7CisJaW50MzJfdCBuSW5kZXg7CisJaW50MzJfdCBuRXJyb3IgPSAwOworCXVpbnQ4X3QgYkNvbnRyb2w7CisJdWludDhfdCBiU3RhdHVzID0gMDsKKwl1aW50MzJfdCB1bkR3b3JkMSA9IDA7CisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgZXhjZXJwdCBpcyBmcm9tICJTZXJpYWwgRUVQUk9NIEhXIERlc2lnbgorCSAqIFNwZWNpZmljYXRpb24iIFZlcnNpb24gMC45MiAoOS8yMC8yMDA0KToKKwkgKgorCSAqIFNpbmdsZSBCeXRlIFJlYWRzCisJICoKKwkgKiBBIHNpbmdsZSBieXRlIHJlYWQgaXMgc2ltaWxhciB0byB0aGUgc2luZ2xlIGJ5dGUgd3JpdGUsIHdpdGggdGhlCisJICogZXhjZXB0aW9uIG9mIHRoZSBkYXRhIGZsb3c6CisJICoKKwkgKiAxLiBDaGVjayBMQkNJRiBTdGF0dXMgUmVnaXN0ZXIgZm9yIGJpdHMgNiAmIDM6MiBhbGwgZXF1YWwgdG8gMCBhbmQKKwkgKiAgICBiaXRzIDcsMTowIGJvdGggZXF1YWwgdG8gMSwgYXQgbGVhc3Qgb25jZSBhZnRlciByZXNldC4KKwkgKiAgICBTdWJzZXF1ZW50IG9wZXJhdGlvbnMgbmVlZCBvbmx5IHRvIGNoZWNrIHRoYXQgYml0cyAxOjAgYXJlIGVxdWFsCisJICogICAgdG8gMSBwcmlvciB0byBzdGFydGluZyBhIHNpbmdsZSBieXRlIHJlYWQuCisJICoKKwkgKiAyLiBXcml0ZSB0byB0aGUgTEJDSUYgQ29udHJvbCBSZWdpc3RlcjogIGJpdCA3PTEsIGJpdCA2PTAsIGJpdCAzPTAsCisJICogICAgYW5kIGJpdHMgMTowIGJvdGggPTAuICBCaXQgNSBzaG91bGQgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgdHlwZQorCSAqICAgIG9mIEVFUFJPTSBiZWluZyBhY2Nlc3NlZCAoMT10d28gYnl0ZSBhZGRyZXNzaW5nLCAwPW9uZSBieXRlCisJICogICAgYWRkcmVzc2luZykuCisJICoKKwkgKiAzLiBXcml0ZSB0aGUgYWRkcmVzcyB0byB0aGUgTEJDSUYgQWRkcmVzcyBSZWdpc3RlciAoSTJDIHJlYWQgd2lsbAorCSAqICAgIGJlZ2luKS4KKwkgKgorCSAqIDQuIE1vbml0b3IgYml0IDAgb2YgdGhlIExCQ0lGIFN0YXR1cyBSZWdpc3Rlci4gIFdoZW4gPTEsIEkyQyByZWFkCisJICogICAgaXMgY29tcGxldGUuIChpZiBiaXQgMSA9MSBhbmQgYml0IDAgc3RheXMgPTAsIGEgaGFyZHdhcmUgZmFpbHVyZQorCSAqICAgIGhhcyBvY2N1cnJlZCkuCisJICoKKwkgKiA1LiBDaGVjayBiaXQgMiBvZiB0aGUgTEJDSUYgU3RhdHVzIFJlZ2lzdGVyLiAgSWYgPTEsIHRoZW4gYW4gZXJyb3IKKwkgKiAgICBoYXMgb2NjdXJyZWQuICBUaGUgZGF0YSB0aGF0IGhhcyBiZWVuIHJldHVybmVkIGZyb20gdGhlIFBIWSBtYXkKKwkgKiAgICBiZSBpbnZhbGlkLgorCSAqCisJICogNi4gUmVnYXJkbGVzcyBvZiBlcnJvciBzdGF0dXMsIHJlYWQgZGF0YSBieXRlIGZyb20gTEJDSUYgRGF0YQorCSAqICAgIFJlZ2lzdGVyLiAgSWYgYW5vdGhlciBieXRlIGlzIHJlcXVpcmVkLCBnbyB0byBzdGVwIDEuCisJICovCisKKwkvKiBTdGVwIDE6ICovCisJZm9yIChuSW5kZXggPSAwOyBuSW5kZXggPCBNQVhfTlVNX1JFR0lTVEVSX1BPTExTOyBuSW5kZXgrKykgeworCQkvKiBSZWFkIHJlZ2lzdGVycyBncm91cGVkIGluIERXT1JEMSAqLworCQlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIExCQ0lGX0RXT1JEMV9HUk9VUF9PRkZTRVQsCisJCQkJCSAgJnVuRHdvcmQxKSkgeworCQkJbkVycm9yID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJYlN0YXR1cyA9IEVYVFJBQ1RfU1RBVFVTX1JFR0lTVEVSKHVuRHdvcmQxKTsKKworCQlpZiAoYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19QSFlfUVVFVUVfQVZBSUwgJiYKKwkJICAgIGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfSTJDX0lETEUpIHsKKwkJCS8qIGJpdHMgMTowIGFyZSBlcXVhbCB0byAxICovCisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChuRXJyb3IgfHwgKG5JbmRleCA+PSBNQVhfTlVNX1JFR0lTVEVSX1BPTExTKSkgeworCQlyZXR1cm4gRkFJTFVSRTsKKwl9CisKKwkvKiBTdGVwIDI6ICovCisJYkNvbnRyb2wgPSAwOworCWJDb250cm9sIHw9IExCQ0lGX0NPTlRST0xfTEJDSUZfRU5BQkxFOworCisJaWYgKHVuQWRkcmVzc2luZ01vZGUgPT0gRFVBTF9CWVRFKSB7CisJCWJDb250cm9sIHw9IExCQ0lGX0NPTlRST0xfVFdPX0JZVEVfQUREUjsKKwl9CisKKwlpZiAocGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIExCQ0lGX0NPTlRST0xfUkVHSVNURVJfT0ZGU0VULAorCQkJCSAgYkNvbnRyb2wpKSB7CisJCXJldHVybiBGQUlMVVJFOworCX0KKworCS8qIFN0ZXAgMzogKi8KKwl1bkFkZHJlc3MgfD0gKHVuQWRkcmVzc2luZ01vZGUgPT0gRFVBTF9CWVRFKSA/CisJICAgICh1bkVlcHJvbUlkIDw8IDE2KSA6ICh1bkVlcHJvbUlkIDw8IDgpOworCisJaWYgKHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgTEJDSUZfQUREUkVTU19SRUdJU1RFUl9PRkZTRVQsCisJCQkJICAgdW5BZGRyZXNzKSkgeworCQlyZXR1cm4gRkFJTFVSRTsKKwl9CisKKwkvKiBTdGVwIDQ6ICovCisJZm9yIChuSW5kZXggPSAwOyBuSW5kZXggPCBNQVhfTlVNX1JFR0lTVEVSX1BPTExTOyBuSW5kZXgrKykgeworCQkvKiBSZWFkIHJlZ2lzdGVycyBncm91cGVkIGluIERXT1JEMSAqLworCQlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIExCQ0lGX0RXT1JEMV9HUk9VUF9PRkZTRVQsCisJCQkJCSAgJnVuRHdvcmQxKSkgeworCQkJbkVycm9yID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJYlN0YXR1cyA9IEVYVFJBQ1RfU1RBVFVTX1JFR0lTVEVSKHVuRHdvcmQxKTsKKworCQlpZiAoYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19QSFlfUVVFVUVfQVZBSUwKKwkJICAgICYmIGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfSTJDX0lETEUpIHsKKwkJCS8qIEkyQyByZWFkIGNvbXBsZXRlICovCisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChuRXJyb3IgfHwgKG5JbmRleCA+PSBNQVhfTlVNX1JFR0lTVEVSX1BPTExTKSkgeworCQlyZXR1cm4gRkFJTFVSRTsKKwl9CisKKwkvKiBTdGVwIDY6ICovCisJKnBiRGF0YSA9IEVYVFJBQ1RfREFUQV9SRUdJU1RFUih1bkR3b3JkMSk7CisKKwlyZXR1cm4gKGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfQUNLX0VSUk9SKSA/IEZBSUxVUkUgOiBTVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjZmOGFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfZWVwcm9tLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiB1c2VkIGZvciBFRVBST00KKyAqICAgICAgICAgICAgICAgICAgIGFjY2VzcyByb3V0aW5lcworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzEwX0VFUFJPTV9IX18KKyNkZWZpbmUgX19FVDEzMTBfRUVQUk9NX0hfXworCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisKKyNpZm5kZWYgU1VDQ0VTUworI2RlZmluZSBTVUNDRVNTCQkwCisjZGVmaW5lIEZBSUxVUkUJCTEKKyNlbmRpZgorCisjaWZuZGVmIFJFQUQKKyNkZWZpbmUgUkVBRAkJMAorI2RlZmluZSBXUklURQkJMQorI2VuZGlmCisKKyNpZm5kZWYgU0lOR0xFX0JZVEUKKyNkZWZpbmUgU0lOR0xFX0JZVEUJMAorI2RlZmluZSBEVUFMX0JZVEUJMQorI2VuZGlmCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBldDEzMXhfYWRhcHRlcjsKKworaW50MzJfdCBFZXByb21Xcml0ZUJ5dGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCB1MzIgdW5BZGRyZXNzLAorCQkJdTggYkRhdGEsIHUzMiB1bkVlcHJvbUlkLAorCQkJdTMyIHVuQWRkcmVzc2luZ01vZGUpOworaW50MzJfdCBFZXByb21SZWFkQnl0ZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB1bkFkZHJlc3MsCisJCSAgICAgICB1OCAqcGJEYXRhLCB1MzIgdW5FZXByb21JZCwKKwkJICAgICAgIHUzMiB1bkFkZHJlc3NpbmdNb2RlKTsKKworI2VuZGlmIC8qIF9FVDEzMTBfRUVQUk9NX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9qYWdjb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9qYWdjb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzYjMwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2phZ2NvcmUuYwpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfamFnY29yZS5jIC0gQWxsIGNvZGUgcGVydGFpbmluZyB0byB0aGUgRVQxMzAxL0VUMTMxeCdzIEpBR2NvcmUKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgorCisvKiBEYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKK2V4dGVybiBkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbzsKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKy8qKgorICogQ29uZmlnR2xvYmFsUmVncyAtIFVzZWQgdG8gY29uZmlndXJlIHRoZSBnbG9iYWwgcmVnaXN0ZXJzIG9uIHRoZSBKQUdDb3JlCisgKiBAcEFkcGF0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgQ29uZmlnR2xvYmFsUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXN0cnVjdCBfR0xPQkFMX3QgX19pb21lbSAqcEdibCA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCWlmIChwQWRhcHRlci0+UmVnaXN0cnlQaHlMb29wYmsgPT0gZmFsc2UpIHsKKwkJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeUp1bWJvUGFja2V0IDwgMjA0OCkgeworCQkJLyogVHggLyBSeERNQSBhbmQgVHgvUnggTUFDIGludGVyZmFjZXMgaGF2ZSBhIDFrIHdvcmQKKwkJCSAqIGJsb2NrIG9mIFJBTSB0aGF0IHRoZSBkcml2ZXIgY2FuIHNwbGl0IGJldHdlZW4gVHgKKwkJCSAqIGFuZCBSeCBhcyBpdCBkZXNpcmVzLiAgT3VyIGRlZmF1bHQgaXMgdG8gc3BsaXQgaXQKKwkJCSAqIDUwLzUwOgorCQkJICovCisJCQl3cml0ZWwoMCwgJnBHYmwtPnJ4cV9zdGFydF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbChwQWRhcHRlci0+UmVnaXN0cnlSeE1lbUVuZCwKKwkJCSAgICAgICAmcEdibC0+cnhxX2VuZF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbChwQWRhcHRlci0+UmVnaXN0cnlSeE1lbUVuZCArIDEsCisJCQkgICAgICAgJnBHYmwtPnR4cV9zdGFydF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbChJTlRFUk5BTF9NRU1fU0laRSAtIDEsCisJCQkgICAgICAgJnBHYmwtPnR4cV9lbmRfYWRkci52YWx1ZSk7CisJCX0gZWxzZSBpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPCA4MTkyKSB7CisJCQkvKiBGb3IganVtYm8gcGFja2V0cyA+IDJrIGJ1dCA8IDhrLCBzcGxpdCA1MC01MC4gKi8KKwkJCXdyaXRlbCgwLCAmcEdibC0+cnhxX3N0YXJ0X2FkZHIudmFsdWUpOworCQkJd3JpdGVsKElOVEVSTkFMX01FTV9SWF9PRkZTRVQsCisJCQkgICAgICAgJnBHYmwtPnJ4cV9lbmRfYWRkci52YWx1ZSk7CisJCQl3cml0ZWwoSU5URVJOQUxfTUVNX1JYX09GRlNFVCArIDEsCisJCQkgICAgICAgJnBHYmwtPnR4cV9zdGFydF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbChJTlRFUk5BTF9NRU1fU0laRSAtIDEsCisJCQkgICAgICAgJnBHYmwtPnR4cV9lbmRfYWRkci52YWx1ZSk7CisJCX0gZWxzZSB7CisJCQkvKiA5MjE2IGlzIHRoZSBvbmx5IHBhY2tldCBzaXplIGdyZWF0ZXIgdGhhbiA4ayB0aGF0CisJCQkgKiBpcyBhdmFpbGFibGUuIFRoZSBUeCBidWZmZXIgaGFzIHRvIGJlIGJpZyBlbm91Z2gKKwkJCSAqIGZvciBvbmUgd2hvbGUgcGFja2V0IG9uIHRoZSBUeCBzaWRlLiBXZSdsbCBtYWtlCisJCQkgKiB0aGUgVHggOTQwOCwgYW5kIGdpdmUgdGhlIHJlc3QgdG8gUngKKwkJCSAqLworCQkJd3JpdGVsKDB4MDAwMCwgJnBHYmwtPnJ4cV9zdGFydF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbCgweDAxYjMsICZwR2JsLT5yeHFfZW5kX2FkZHIudmFsdWUpOworCQkJd3JpdGVsKDB4MDFiNCwgJnBHYmwtPnR4cV9zdGFydF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbChJTlRFUk5BTF9NRU1fU0laRSAtIDEsCisJCQkgICAgICAgJnBHYmwtPnR4cV9lbmRfYWRkci52YWx1ZSk7CisJCX0KKworCQkvKiBJbml0aWFsaXplIHRoZSBsb29wYmFjayByZWdpc3Rlci4gRGlzYWJsZSBhbGwgbG9vcGJhY2tzLiAqLworCQl3cml0ZWwoMCwgJnBHYmwtPmxvb3BiYWNrLnZhbHVlKTsKKwl9IGVsc2UgeworCQkvKiBGb3IgUEhZIExpbmUgbG9vcGJhY2ssIHRoZSBtZW1vcnkgaXMgY29uZmlndXJlZCBhcyBpZiBUeAorCQkgKiBhbmQgUnggYm90aCBoYXZlIGFsbCB0aGUgbWVtb3J5LiAgVGhpcyBpcyBiZWNhdXNlIHRoZQorCQkgKiBSeE1BQyB3aWxsIHdyaXRlIGRhdGEgaW50byB0aGUgc3BhY2UsIGFuZCB0aGUgVHhNQUMgd2lsbAorCQkgKiByZWFkIGl0IG91dC4KKwkJICovCisJCXdyaXRlbCgwLCAmcEdibC0+cnhxX3N0YXJ0X2FkZHIudmFsdWUpOworCQl3cml0ZWwoSU5URVJOQUxfTUVNX1NJWkUgLSAxLCAmcEdibC0+cnhxX2VuZF9hZGRyLnZhbHVlKTsKKwkJd3JpdGVsKDAsICZwR2JsLT50eHFfc3RhcnRfYWRkci52YWx1ZSk7CisJCXdyaXRlbChJTlRFUk5BTF9NRU1fU0laRSAtIDEsICZwR2JsLT50eHFfZW5kX2FkZHIudmFsdWUpOworCisJCS8qIEluaXRpYWxpemUgdGhlIGxvb3BiYWNrIHJlZ2lzdGVyIChNQUMgbG9vcGJhY2spLiAqLworCQl3cml0ZWwoMSwgJnBHYmwtPmxvb3BiYWNrLnZhbHVlKTsKKwl9CisKKwkvKiBNU0kgUmVnaXN0ZXIgKi8KKwl3cml0ZWwoMCwgJnBHYmwtPm1zaV9jb25maWcudmFsdWUpOworCisJLyogQnkgZGVmYXVsdCwgZGlzYWJsZSB0aGUgd2F0Y2hkb2cgdGltZXIuICBJdCB3aWxsIGJlIGVuYWJsZWQgd2hlbgorCSAqIGEgcGFja2V0IGlzIHF1ZXVlZC4KKwkgKi8KKwl3cml0ZWwoMCwgJnBHYmwtPndhdGNoZG9nX3RpbWVyKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogQ29uZmlnTU1DUmVncyAtIFVzZWQgdG8gY29uZmlndXJlIHRoZSBtYWluIG1lbW9yeSByZWdpc3RlcnMgaW4gdGhlIEpBR0NvcmUKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBDb25maWdNTUNSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJTU1DX0NUUkxfdCBtbWNfY3RybCA9IHsgMCB9OworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIEFsbCB3ZSBuZWVkIHRvIGRvIGlzIGluaXRpYWxpemUgdGhlIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyICovCisJbW1jX2N0cmwuYml0cy5mb3JjZV9jZSA9IDB4MDsKKwltbWNfY3RybC5iaXRzLnJ4ZG1hX2Rpc2FibGUgPSAweDA7CisJbW1jX2N0cmwuYml0cy50eGRtYV9kaXNhYmxlID0gMHgwOworCW1tY19jdHJsLmJpdHMudHhtYWNfZGlzYWJsZSA9IDB4MDsKKwltbWNfY3RybC5iaXRzLnJ4bWFjX2Rpc2FibGUgPSAweDA7CisJbW1jX2N0cmwuYml0cy5hcmJfZGlzYWJsZSA9IDB4MDsKKwltbWNfY3RybC5iaXRzLm1tY19lbmFibGUgPSAweDE7CisKKwl3cml0ZWwobW1jX2N0cmwudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bW1jLm1tY19jdHJsLnZhbHVlKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKK3ZvaWQgZXQxMzF4X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1aW50MzJfdCBNYXNrVmFsdWU7CisKKwkvKiBFbmFibGUgYWxsIGdsb2JhbCBpbnRlcnJ1cHRzICovCisJaWYgKChhZGFwdGVyLT5GbG93Q29udHJvbCA9PSBUeE9ubHkpIHx8IChhZGFwdGVyLT5GbG93Q29udHJvbCA9PSBCb3RoKSkgeworCQlNYXNrVmFsdWUgPSBJTlRfTUFTS19FTkFCTEU7CisJfSBlbHNlIHsKKwkJTWFza1ZhbHVlID0gSU5UX01BU0tfRU5BQkxFX05PX0ZMT1c7CisJfQorCisJaWYgKGFkYXB0ZXItPkRyaXZlck5vUGh5QWNjZXNzKSB7CisJCU1hc2tWYWx1ZSB8PSAweDEwMDAwOworCX0KKworCWFkYXB0ZXItPkNhY2hlZE1hc2tWYWx1ZS52YWx1ZSA9IE1hc2tWYWx1ZTsKKwl3cml0ZWwoTWFza1ZhbHVlLCAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLmludF9tYXNrLnZhbHVlKTsKK30KKwordm9pZCBldDEzMXhfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqIGFkYXB0ZXIpCit7CisJLyogRGlzYWJsZSBhbGwgZ2xvYmFsIGludGVycnVwdHMgKi8KKwlhZGFwdGVyLT5DYWNoZWRNYXNrVmFsdWUudmFsdWUgPSBJTlRfTUFTS19ESVNBQkxFOworCXdyaXRlbChJTlRfTUFTS19ESVNBQkxFLCAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLmludF9tYXNrLnZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2phZ2NvcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2phZ2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmM4MjkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfamFnY29yZS5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9qYWdjb3JlLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvCisgKiAgICAgICAgICAgICAgICAgICAgdGhlIEpBR0NvcmUKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxMF9KQUdDT1JFX0hfXworI2RlZmluZSBfX0VUMTMxMF9KQUdDT1JFX0hfXworCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisKKworI2RlZmluZSBJTlRFUk5BTF9NRU1fU0laRSAgICAgICAweDQwMAkvLzEwMjQgb2YgaW50ZXJuYWwgbWVtb3J5CisjZGVmaW5lIElOVEVSTkFMX01FTV9SWF9PRkZTRVQgIDB4MUZGCS8vNTAlICAgVHgsIDUwJSAgIFJ4CisKKyNkZWZpbmUgUkVHU19NQVhfQVJSQVkgICAgICAgICAgNDA5NgorCisvKgorICogRm9yIGludGVycnVwdHMsIG5vcm1hbCBydW5uaW5nIGlzOgorICogICAgICAgcnhkbWFfeGZyX2RvbmUsIHBoeV9pbnRlcnJ1cHQsIG1hY19zdGF0X2ludGVycnVwdCwKKyAqICAgICAgIHdhdGNoZG9nX2ludGVycnVwdCAmIHR4ZG1hX3hmZXJfZG9uZQorICoKKyAqIEluIGJvdGggY2FzZXMsIHdoZW4gZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgZm9yIGVpdGhlciBUeCBvciBiaS1kaXJlY3Rpb24sCisgKiB3ZSBhZGRpdGlvbmFsIGVuYWJsZSByeF9mYnIwX2xvdyBhbmQgcnhfZmJyMV9sb3csIHNvIHdlIGtub3cgd2hlbiB0aGUKKyAqIGJ1ZmZlciByaW5ncyBhcmUgcnVubmluZyBsb3cuCisgKi8KKyNkZWZpbmUgSU5UX01BU0tfRElTQUJMRSAgICAgICAgICAgIDB4ZmZmZmZmZmYKKworLy8gTk9URTogTWFza2luZyBvdXQgTUFDX1NUQVQgSW50ZXJydXB0IGZvciBub3cuLi4KKy8vI2RlZmluZSBJTlRfTUFTS19FTkFCTEUgICAgICAgICAgICAgMHhmZmY2YmYxNworLy8jZGVmaW5lIElOVF9NQVNLX0VOQUJMRV9OT19GTE9XICAgICAweGZmZjZiZmQ3CisjZGVmaW5lIElOVF9NQVNLX0VOQUJMRSAgICAgICAgICAgICAweGZmZmViZjE3CisjZGVmaW5lIElOVF9NQVNLX0VOQUJMRV9OT19GTE9XICAgICAweGZmZmViZmQ3CisKKy8qIERBVEEgU1RSVUNUVVJFUyBGT1IgRElSRUNUIFJFR0lTVEVSIEFDQ0VTUyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdTggYlJlYWRXcml0ZTsKKwl1MzIgblJlZ0NvdW50OworCXUzMiBuRGF0YVtSRUdTX01BWF9BUlJBWV07CisJdTMyIG5PZmZzZXRzW1JFR1NfTUFYX0FSUkFZXTsKK30gSkFHQ09SRV9BQ0NFU1NfUkVHUywgKlBKQUdDT1JFX0FDQ0VTU19SRUdTOworCit0eXBlZGVmIHN0cnVjdCB7CisJdTggYlJlYWRXcml0ZTsKKwl1MzIgbkRhdGFXaWR0aDsKKwl1MzIgblJlZ0NvdW50OworCXUzMiBuT2Zmc2V0c1tSRUdTX01BWF9BUlJBWV07CisJdTMyIG5EYXRhW1JFR1NfTUFYX0FSUkFZXTsKK30gUENJX0NGR19TUEFDRV9SRUdTLCAqUFBDSV9DRkdfU1BBQ0VfUkVHUzsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCit2b2lkIENvbmZpZ0dsb2JhbFJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIENvbmZpZ01NQ1JlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIGV0MTMxeF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKyNlbmRpZiAvKiBfX0VUMTMxMF9KQUdDT1JFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTI0OTY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmMKQEAgLTAsMCArMSw3OTIgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX21hYy5jIC0gQWxsIGNvZGUgYW5kIHJvdXRpbmVzIHBlcnRhaW5pbmcgdG8gdGhlIE1BQworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisKKyNpbmNsdWRlICJldDEzMTBfcGh5LmgiCisjaW5jbHVkZSAiZXQxMzEwX3BtLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKyNpbmNsdWRlICJldDEzMTBfbWFjLmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCisKKy8qIERhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworLyoqCisgKiBDb25maWdNYWNSZWdzMSAtIEluaXRpYWxpemUgdGhlIGZpcnN0IHBhcnQgb2YgTUFDIHJlZ3MKKyAqIEBwQWRwYXRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBDb25maWdNQUNSZWdzMShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXN0cnVjdCBfTUFDX3QgX19pb21lbSAqcE1hYyA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjOworCU1BQ19TVEFUSU9OX0FERFIxX3Qgc3RhdGlvbjE7CisJTUFDX1NUQVRJT05fQUREUjJfdCBzdGF0aW9uMjsKKwlNQUNfSVBHX3QgaXBnOworCU1BQ19IRkRQX3QgaGZkcDsKKwlNSUlfTUdNVF9DRkdfdCBtaWlfbWdtdF9jZmc7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogRmlyc3Qgd2UgbmVlZCB0byByZXNldCBldmVyeXRoaW5nLiAgV3JpdGUgdG8gTUFDIGNvbmZpZ3VyYXRpb24KKwkgKiByZWdpc3RlciAxIHRvIHBlcmZvcm0gcmVzZXQuCisJICovCisJd3JpdGVsKDB4QzAwRjAwMDAsICZwTWFjLT5jZmcxLnZhbHVlKTsKKworCS8qIE5leHQgbGV0cyBjb25maWd1cmUgdGhlIE1BQyBJbnRlci1wYWNrZXQgZ2FwIHJlZ2lzdGVyICovCisJaXBnLmJpdHMubm9uX0IyQl9pcGdfMSA9IDB4Mzg7CQkvLyA1OGQKKwlpcGcuYml0cy5ub25fQjJCX2lwZ18yID0gMHg1ODsJCS8vIDg4ZAorCWlwZy5iaXRzLm1pbl9pZmdfZW5mb3JjZSA9IDB4NTA7CS8vIDgwZAorCWlwZy5iaXRzLkIyQl9pcGcgPSAweDYwOwkJLy8gOTZkCisJd3JpdGVsKGlwZy52YWx1ZSwgJnBNYWMtPmlwZy52YWx1ZSk7CisKKwkvKiBOZXh0IGxldHMgY29uZmlndXJlIHRoZSBNQUMgSGFsZiBEdXBsZXggcmVnaXN0ZXIgKi8KKwloZmRwLmJpdHMuYWx0X2JlYl90cnVuYyA9IDB4QTsKKwloZmRwLmJpdHMuYWx0X2JlYl9lbmFibGUgPSAweDA7CisJaGZkcC5iaXRzLmJwX25vX2JhY2tvZmYgPSAweDA7CisJaGZkcC5iaXRzLm5vX2JhY2tvZmYgPSAweDA7CisJaGZkcC5iaXRzLmV4Y2Vzc19kZWZlciA9IDB4MTsKKwloZmRwLmJpdHMucmV4bWl0X21heCA9IDB4RjsKKwloZmRwLmJpdHMuY29sbF93aW5kb3cgPSAweDM3OwkJLy8gNTVkCisJd3JpdGVsKGhmZHAudmFsdWUsICZwTWFjLT5oZmRwLnZhbHVlKTsKKworCS8qIE5leHQgbGV0cyBjb25maWd1cmUgdGhlIE1BQyBJbnRlcmZhY2UgQ29udHJvbCByZWdpc3RlciAqLworCXdyaXRlbCgwLCAmcE1hYy0+aWZfY3RybC52YWx1ZSk7CisKKwkvKiBMZXQncyBtb3ZlIG9uIHRvIHNldHRpbmcgdXAgdGhlIG1paSBtYW5hZ21lbnQgY29uZmlndXJhdGlvbiAqLworCW1paV9tZ210X2NmZy5iaXRzLnJlc2V0X21paV9tZ210ID0gMDsKKwltaWlfbWdtdF9jZmcuYml0cy5zY2FuX2F1dG9faW5jcmVtdCA9IDA7CisJbWlpX21nbXRfY2ZnLmJpdHMucHJlYW1ibGVfc3VwcHJlc3MgPSAwOworCW1paV9tZ210X2NmZy5iaXRzLm1nbXRfY2xrX3Jlc2V0ID0gMHg3OworCXdyaXRlbChtaWlfbWdtdF9jZmcudmFsdWUsICZwTWFjLT5taWlfbWdtdF9jZmcudmFsdWUpOworCisJLyogTmV4dCBsZXRzIGNvbmZpZ3VyZSB0aGUgTUFDIFN0YXRpb24gQWRkcmVzcyByZWdpc3Rlci4gIFRoZXNlCisJICogdmFsdWVzIGFyZSByZWFkIGZyb20gdGhlIEVFUFJPTSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIHN0b3JlZAorCSAqIGluIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS4gIFdlIHdyaXRlIHdoYXQgaXMgc3RvcmVkIGluIHRoZSBhZGFwdGVyCisJICogc3RydWN0dXJlIHRvIHRoZSBNQUMgU3RhdGlvbiBBZGRyZXNzIHJlZ2lzdGVycyBoaWdoIGFuZCBsb3cuICBUaGlzCisJICogc3RhdGlvbiBhZGRyZXNzIGlzIHVzZWQgZm9yIGdlbmVyYXRpbmcgYW5kIGNoZWNraW5nIHBhdXNlIGNvbnRyb2wKKwkgKiBwYWNrZXRzLgorCSAqLworCXN0YXRpb24yLmJpdHMuT2N0ZXQxID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzBdOworCXN0YXRpb24yLmJpdHMuT2N0ZXQyID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzFdOworCXN0YXRpb24xLmJpdHMuT2N0ZXQzID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzJdOworCXN0YXRpb24xLmJpdHMuT2N0ZXQ0ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzNdOworCXN0YXRpb24xLmJpdHMuT2N0ZXQ1ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzRdOworCXN0YXRpb24xLmJpdHMuT2N0ZXQ2ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzVdOworCXdyaXRlbChzdGF0aW9uMS52YWx1ZSwgJnBNYWMtPnN0YXRpb25fYWRkcl8xLnZhbHVlKTsKKwl3cml0ZWwoc3RhdGlvbjIudmFsdWUsICZwTWFjLT5zdGF0aW9uX2FkZHJfMi52YWx1ZSk7CisKKwkvKiBNYXggZXRoZXJuZXQgcGFja2V0IGluIGJ5dGVzIHRoYXQgd2lsbCBwYXNzZWQgYnkgdGhlIG1hYyB3aXRob3V0CisJICogYmVpbmcgdHJ1bmNhdGVkLiAgQWxsb3cgdGhlIE1BQyB0byBwYXNzIDQgbW9yZSB0aGFuIG91ciBtYXggcGFja2V0CisJICogc2l6ZS4gIFRoaXMgaXMgNCBmb3IgdGhlIEV0aGVybmV0IENSQy4KKwkgKgorCSAqIFBhY2tldHMgbGFyZ2VyIHRoYW4gKFJlZ2lzdHJ5SnVtYm9QYWNrZXQpIHRoYXQgZG8gbm90IGNvbnRhaW4gYQorCSAqIFZMQU4gSUQgd2lsbCBiZSBkcm9wcGVkIGJ5IHRoZSBSeCBmdW5jdGlvbi4KKwkgKi8KKwl3cml0ZWwocEFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgKyA0LCAmcE1hYy0+bWF4X2ZtX2xlbi52YWx1ZSk7CisKKwkvKiBjbGVhciBvdXQgTUFDIGNvbmZpZyByZXNldCAqLworCXdyaXRlbCgwLCAmcE1hYy0+Y2ZnMS52YWx1ZSk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIENvbmZpZ01hY1JlZ3MyIC0gSW5pdGlhbGl6ZSB0aGUgc2Vjb25kIHBhcnQgb2YgTUFDIHJlZ3MKKyAqIEBwQWRwYXRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBDb25maWdNQUNSZWdzMihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCWludDMyX3QgZGVsYXkgPSAwOworCXN0cnVjdCBfTUFDX3QgX19pb21lbSAqcE1hYyA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjOworCU1BQ19DRkcxX3QgY2ZnMTsKKwlNQUNfQ0ZHMl90IGNmZzI7CisJTUFDX0lGX0NUUkxfdCBpZmN0cmw7CisJVFhNQUNfQ1RMX3QgY3RsOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCWN0bC52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhtYWMuY3RsLnZhbHVlKTsKKwljZmcxLnZhbHVlID0gcmVhZGwoJnBNYWMtPmNmZzEudmFsdWUpOworCWNmZzIudmFsdWUgPSByZWFkbCgmcE1hYy0+Y2ZnMi52YWx1ZSk7CisJaWZjdHJsLnZhbHVlID0gcmVhZGwoJnBNYWMtPmlmX2N0cmwudmFsdWUpOworCisJaWYgKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwMDBNQlBTKSB7CisJCWNmZzIuYml0cy5pZl9tb2RlID0gMHgyOworCQlpZmN0cmwuYml0cy5waHlfbW9kZSA9IDB4MDsKKwl9IGVsc2UgeworCQljZmcyLmJpdHMuaWZfbW9kZSA9IDB4MTsKKwkJaWZjdHJsLmJpdHMucGh5X21vZGUgPSAweDE7CisJfQorCisJLyogV2UgbmVlZCB0byBlbmFibGUgUngvVHggKi8KKwljZmcxLmJpdHMucnhfZW5hYmxlID0gMHgxOworCWNmZzEuYml0cy50eF9lbmFibGUgPSAweDE7CisKKwkvKiBTZXQgdXAgZmxvdyBjb250cm9sICovCisJY2ZnMS5iaXRzLnR4X2Zsb3cgPSAweDE7CisKKwlpZiAoKHBBZGFwdGVyLT5GbG93Q29udHJvbCA9PSBSeE9ubHkpIHx8CisJICAgIChwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPT0gQm90aCkpIHsKKwkJY2ZnMS5iaXRzLnJ4X2Zsb3cgPSAweDE7CisJfSBlbHNlIHsKKwkJY2ZnMS5iaXRzLnJ4X2Zsb3cgPSAweDA7CisJfQorCisJLyogSW5pdGlhbGl6ZSBsb29wIGJhY2sgdG8gb2ZmICovCisJY2ZnMS5iaXRzLmxvb3BfYmFjayA9IDA7CisKKwl3cml0ZWwoY2ZnMS52YWx1ZSwgJnBNYWMtPmNmZzEudmFsdWUpOworCisJLyogTm93IHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgTUFDIENvbmZpZ3VyYXRpb24gMiByZWdpc3RlciAqLworCWNmZzIuYml0cy5wcmVhbWJsZV9sZW4gPSAweDc7CisJY2ZnMi5iaXRzLmh1Z2VfZnJhbWUgPSAweDA7CisJLyogTEVOR1RIIEZJRUxEIENIRUNLSU5HIGJpdDQ6IFNldCB0aGlzIGJpdCB0byBjYXVzZSB0aGUgTUFDIHRvIGNoZWNrCisJICogdGhlIGZyYW1lJ3MgbGVuZ3RoIGZpZWxkIHRvIGVuc3VyZSBpdCBtYXRjaGVzIHRoZSBhY3R1YWwgZGF0YQorCSAqIGZpZWxkIGxlbmd0aC4gQ2xlYXIgdGhpcyBiaXQgaWYgbm8gbGVuZ3RoIGZpZWxkIGNoZWNraW5nIGlzCisJICogZGVzaXJlZC4gSXRzIGRlZmF1bHQgaXMgMC4KKwkgKi8KKwljZmcyLmJpdHMubGVuX2NoZWNrID0gMHgxOworCisJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeVBoeUxvb3BiayA9PSBmYWxzZSkgeworCQljZmcyLmJpdHMucGFkX2NyYyA9IDB4MTsKKwkJY2ZnMi5iaXRzLmNyY19lbmFibGUgPSAweDE7CisJfSBlbHNlIHsKKwkJY2ZnMi5iaXRzLnBhZF9jcmMgPSAwOworCQljZmcyLmJpdHMuY3JjX2VuYWJsZSA9IDA7CisJfQorCisJLyogMSAtIGZ1bGwgZHVwbGV4LCAwIC0gaGFsZi1kdXBsZXggKi8KKwljZmcyLmJpdHMuZnVsbF9kdXBsZXggPSBwQWRhcHRlci0+dWlEdXBsZXhNb2RlOworCWlmY3RybC5iaXRzLmdoZF9tb2RlID0gIXBBZGFwdGVyLT51aUR1cGxleE1vZGU7CisKKwl3cml0ZWwoaWZjdHJsLnZhbHVlLCAmcE1hYy0+aWZfY3RybC52YWx1ZSk7CisJd3JpdGVsKGNmZzIudmFsdWUsICZwTWFjLT5jZmcyLnZhbHVlKTsKKworCWRvIHsKKwkJdWRlbGF5KDEwKTsKKwkJZGVsYXkrKzsKKwkJY2ZnMS52YWx1ZSA9IHJlYWRsKCZwTWFjLT5jZmcxLnZhbHVlKTsKKwl9IHdoaWxlICgoIWNmZzEuYml0cy5zeW5jZF9yeF9lbiB8fAorCQkgICFjZmcxLmJpdHMuc3luY2RfdHhfZW4pICYmCisJCSBkZWxheSA8IDEwMCk7CisKKwlpZiAoZGVsYXkgPT0gMTAwKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIlN5bmNkIGJpdHMgZGlkIG5vdCByZXNwb25kIGNvcnJlY3RseSBjZmcxIHdvcmQgMHglMDh4XG4iLAorCQkJICBjZmcxLnZhbHVlKTsKKwl9CisKKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sCisJCSAgIlNwZWVkICVkLCBEdXAgJWQsIENGRzEgMHglMDh4LCBDRkcyIDB4JTA4eCwgaWZfY3RybCAweCUwOHhcbiIsCisJCSAgcEFkYXB0ZXItPnVpTGlua1NwZWVkLCBwQWRhcHRlci0+dWlEdXBsZXhNb2RlLAorCQkgIHJlYWRsKCZwTWFjLT5jZmcxLnZhbHVlKSwgcmVhZGwoJnBNYWMtPmNmZzIudmFsdWUpLAorCQkgIHJlYWRsKCZwTWFjLT5pZl9jdHJsLnZhbHVlKSk7CisKKwkvKiBFbmFibGUgVFhNQUMgKi8KKwljdGwuYml0cy50eG1hY19lbiA9IDB4MTsKKwljdGwuYml0cy5mY19kaXNhYmxlID0gMHgxOworCXdyaXRlbChjdGwudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhtYWMuY3RsLnZhbHVlKTsKKworCS8qIFJlYWR5IHRvIHN0YXJ0IHRoZSBSWERNQS9UWERNQSBlbmdpbmUgKi8KKwlpZiAoIU1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZk1QX0FEQVBURVJfTE9XRVJfUE9XRVIpKSB7CisJCWV0MTMxeF9yeF9kbWFfZW5hYmxlKHBBZGFwdGVyKTsKKwkJZXQxMzF4X3R4X2RtYV9lbmFibGUocEFkYXB0ZXIpOworCX0gZWxzZSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJEaWRuJ3QgZW5hYmxlIFJ4L1R4IGR1ZSB0byBsb3ctcG93ZXIgbW9kZVxuIik7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKwordm9pZCBDb25maWdSeE1hY1JlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX1JYTUFDX3QgX19pb21lbSAqcFJ4TWFjID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeG1hYzsKKwlSWE1BQ19XT0xfU0FfTE9fdCBzYV9sbzsKKwlSWE1BQ19XT0xfU0FfSElfdCBzYV9oaTsKKwlSWE1BQ19QRl9DVFJMX3QgcGZfY3RybCA9IHsgMCB9OworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIERpc2FibGUgdGhlIE1BQyB3aGlsZSBpdCBpcyBiZWluZyBjb25maWd1cmVkIChhbHNvIGRpc2FibGUgV09MKSAqLworCXdyaXRlbCgweDgsICZwUnhNYWMtPmN0cmwudmFsdWUpOworCisJLyogSW5pdGlhbGl6ZSBXT0wgdG8gZGlzYWJsZWQuICovCisJd3JpdGVsKDAsICZwUnhNYWMtPmNyYzAudmFsdWUpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5jcmMxMi52YWx1ZSk7CisJd3JpdGVsKDAsICZwUnhNYWMtPmNyYzM0LnZhbHVlKTsKKworCS8qIFdlIG5lZWQgdG8gc2V0IHRoZSBXT0wgbWFzazAgLSBtYXNrNCBuZXh0LiAgV2UgaW5pdGlhbGl6ZSBpdCB0bworCSAqIGl0cyBkZWZhdWx0IFZhbHVlcyBvZiAweDAwMDAwMDAwIGJlY2F1c2UgdGhlcmUgYXJlIG5vdCBXT0wgbWFza3MKKwkgKiBhcyBvZiB0aGlzIHRpbWUuCisJICovCisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2swX3dvcmQwKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazBfd29yZDEpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMF93b3JkMik7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2swX3dvcmQzKTsKKworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMV93b3JkMCk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2sxX3dvcmQxKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazFfd29yZDIpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMV93b3JkMyk7CisKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazJfd29yZDApOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMl93b3JkMSk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2syX3dvcmQyKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazJfd29yZDMpOworCisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2szX3dvcmQwKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazNfd29yZDEpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrM193b3JkMik7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2szX3dvcmQzKTsKKworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrNF93b3JkMCk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2s0X3dvcmQxKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazRfd29yZDIpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrNF93b3JkMyk7CisKKwkvKiBMZXRzIHNldHVwIHRoZSBXT0wgU291cmNlIEFkZHJlc3MgKi8KKwlzYV9sby5iaXRzLnNhMyA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1syXTsKKwlzYV9sby5iaXRzLnNhNCA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1szXTsKKwlzYV9sby5iaXRzLnNhNSA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s0XTsKKwlzYV9sby5iaXRzLnNhNiA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s1XTsKKwl3cml0ZWwoc2FfbG8udmFsdWUsICZwUnhNYWMtPnNhX2xvLnZhbHVlKTsKKworCXNhX2hpLmJpdHMuc2ExID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzBdOworCXNhX2hpLmJpdHMuc2EyID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzFdOworCXdyaXRlbChzYV9oaS52YWx1ZSwgJnBSeE1hYy0+c2FfaGkudmFsdWUpOworCisJLyogRGlzYWJsZSBhbGwgUGFja2V0IEZpbHRlcmluZyAqLworCXdyaXRlbCgwLCAmcFJ4TWFjLT5wZl9jdHJsLnZhbHVlKTsKKworCS8qIExldCdzIGluaXRpYWxpemUgdGhlIFVuaWNhc3QgUGFja2V0IGZpbHRlcmluZyBhZGRyZXNzICovCisJaWYgKHBBZGFwdGVyLT5QYWNrZXRGaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfRElSRUNURUQpIHsKKwkJU2V0dXBEZXZpY2VGb3JVbmljYXN0KHBBZGFwdGVyKTsKKwkJcGZfY3RybC5iaXRzLmZpbHRlcl91bmlfZW4gPSAxOworCX0gZWxzZSB7CisJCXdyaXRlbCgwLCAmcFJ4TWFjLT51bmlfcGZfYWRkcjEudmFsdWUpOworCQl3cml0ZWwoMCwgJnBSeE1hYy0+dW5pX3BmX2FkZHIyLnZhbHVlKTsKKwkJd3JpdGVsKDAsICZwUnhNYWMtPnVuaV9wZl9hZGRyMy52YWx1ZSk7CisJfQorCisJLyogTGV0J3MgaW5pdGlhbGl6ZSB0aGUgTXVsdGljYXN0IGhhc2ggKi8KKwlpZiAocEFkYXB0ZXItPlBhY2tldEZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUKSB7CisJCXBmX2N0cmwuYml0cy5maWx0ZXJfbXVsdGlfZW4gPSAwOworCX0gZWxzZSB7CisJCXBmX2N0cmwuYml0cy5maWx0ZXJfbXVsdGlfZW4gPSAxOworCQlTZXR1cERldmljZUZvck11bHRpY2FzdChwQWRhcHRlcik7CisJfQorCisJLyogUnVudCBwYWNrZXQgZmlsdGVyaW5nLiAgRGlkbid0IHdvcmsgaW4gdmVyc2lvbiBBIHNpbGljb24uICovCisJcGZfY3RybC5iaXRzLm1pbl9wa3Rfc2l6ZSA9IE5JQ19NSU5fUEFDS0VUX1NJWkUgKyA0OworCXBmX2N0cmwuYml0cy5maWx0ZXJfZnJhZ19lbiA9IDE7CisKKwlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPiA4MTkyKSB7CisJCVJYTUFDX01DSUZfQ1RSTF9NQVhfU0VHX3QgbWNpZl9jdHJsX21heF9zZWc7CisKKwkJLyogSW4gb3JkZXIgdG8gdHJhbnNtaXQganVtYm8gcGFja2V0cyBncmVhdGVyIHRoYW4gOGssIHRoZQorCQkgKiBGSUZPIGJldHdlZW4gUnhNQUMgYW5kIFJ4RE1BIG5lZWRzIHRvIGJlIHJlZHVjZWQgaW4gc2l6ZQorCQkgKiB0byAoMTZrIC0gSnVtYm8gcGFja2V0IHNpemUpLiAgSW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoaXMsCisJCSAqIHdlIG11c3QgdXNlICJjdXQgdGhyb3VnaCIgbW9kZSBpbiB0aGUgUnhNQUMsIHdoaWNoIGNob3BzCisJCSAqIHBhY2tldHMgZG93biBpbnRvIHNlZ21lbnRzIHdoaWNoIGFyZSAobWF4X3NpemUgKiAxNikuICBJbgorCQkgKiB0aGlzIGNhc2Ugd2Ugc2VsZWN0ZWQgMjU2IGJ5dGVzLCBzaW5jZSB0aGlzIGlzIHRoZSBzaXplIG9mCisJCSAqIHRoZSBQQ0ktRXhwcmVzcyBUTFAncyB0aGF0IHRoZSAxMzEwIHVzZXMuCisJCSAqLworCQltY2lmX2N0cmxfbWF4X3NlZy5iaXRzLnNlZ19lbiA9IDB4MTsKKwkJbWNpZl9jdHJsX21heF9zZWcuYml0cy5mY19lbiA9IDB4MDsKKwkJbWNpZl9jdHJsX21heF9zZWcuYml0cy5tYXhfc2l6ZSA9IDB4MTA7CisKKwkJd3JpdGVsKG1jaWZfY3RybF9tYXhfc2VnLnZhbHVlLAorCQkgICAgICAgJnBSeE1hYy0+bWNpZl9jdHJsX21heF9zZWcudmFsdWUpOworCX0gZWxzZSB7CisJCXdyaXRlbCgwLCAmcFJ4TWFjLT5tY2lmX2N0cmxfbWF4X3NlZy52YWx1ZSk7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgTUNJRiB3YXRlciBtYXJrcyAqLworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tY2lmX3dhdGVyX21hcmsudmFsdWUpOworCisJLyogIEluaXRpYWxpemUgdGhlIE1JRiBjb250cm9sICovCisJd3JpdGVsKDAsICZwUnhNYWMtPm1pZl9jdHJsLnZhbHVlKTsKKworCS8qIEluaXRpYWxpemUgdGhlIFNwYWNlIEF2YWlsYWJsZSBSZWdpc3RlciAqLworCXdyaXRlbCgwLCAmcFJ4TWFjLT5zcGFjZV9hdmFpbC52YWx1ZSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSB0aGUgbWlmX2N0cmwgcmVnaXN0ZXIKKwkgKiBiaXQgMzogIFJlY2VpdmUgY29kZSBlcnJvci4gT25lIG9yIG1vcmUgbmliYmxlcyB3ZXJlIHNpZ25hbGVkIGFzCisJICoJICAgZXJyb3JzICBkdXJpbmcgdGhlIHJlY2VwdGlvbiBvZiB0aGUgcGFja2V0LiAgQ2xlYXIgdGhpcworCSAqCSAgIGJpdCBpbiBHaWdhYml0LCBzZXQgaXQgaW4gMTAwTWJpdC4gIFRoaXMgd2FzIGRlcml2ZWQKKwkgKgkgICBleHBlcmltZW50YWxseSBhdCBVTkguCisJICogYml0IDQ6ICBSZWNlaXZlIENSQyBlcnJvci4gVGhlIHBhY2tldCdzIENSQyBkaWQgbm90IG1hdGNoIHRoZQorCSAqCSAgIGludGVybmFsbHkgZ2VuZXJhdGVkIENSQy4KKwkgKiBiaXQgNTogIFJlY2VpdmUgbGVuZ3RoIGNoZWNrIGVycm9yLiBJbmRpY2F0ZXMgdGhhdCBmcmFtZSBsZW5ndGgKKwkgKgkgICBmaWVsZCB2YWx1ZSBpbiB0aGUgcGFja2V0IGRvZXMgbm90IG1hdGNoIHRoZSBhY3R1YWwgZGF0YQorCSAqCSAgIGJ5dGUgbGVuZ3RoIGFuZCBpcyBub3QgYSB0eXBlIGZpZWxkLgorCSAqIGJpdCAxNjogUmVjZWl2ZSBmcmFtZSB0cnVuY2F0ZWQuCisJICogYml0IDE3OiBEcm9wIHBhY2tldCBlbmFibGUKKwkgKi8KKwlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTAwTUJQUykgeworCQl3cml0ZWwoMHgzMDAzOCwgJnBSeE1hYy0+bWlmX2N0cmwudmFsdWUpOworCX0gZWxzZSB7CisJCXdyaXRlbCgweDMwMDMwLCAmcFJ4TWFjLT5taWZfY3RybC52YWx1ZSk7CisJfQorCisJLyogRmluYWxseSB3ZSBpbml0aWFsaXplIFJ4TWFjIHRvIGJlIGVuYWJsZWQgJiBXT0wgZGlzYWJsZWQuICBQYWNrZXQKKwkgKiBmaWx0ZXIgaXMgYWx3YXlzIGVuYWJsZWQgc2luY2UgaXQgaXMgd2hlcmUgdGhlIHJ1bnQgcGFja2V0cyBhcmUKKwkgKiBzdXBwb3NlZCB0byBiZSBkcm9wcGVkLiAgRm9yIHZlcnNpb24gQSBzaWxpY29uLCBydW50IHBhY2tldAorCSAqIGRyb3BwaW5nIGRvZXNuJ3Qgd29yaywgc28gaXQgaXMgZGlzYWJsZWQgaW4gdGhlIHBmX2N0cmwgcmVnaXN0ZXIsCisJICogYnV0IHdlIHN0aWxsIGxlYXZlIHRoZSBwYWNrZXQgZmlsdGVyIG9uLgorCSAqLworCXdyaXRlbChwZl9jdHJsLnZhbHVlLCAmcFJ4TWFjLT5wZl9jdHJsLnZhbHVlKTsKKwl3cml0ZWwoMHg5LCAmcFJ4TWFjLT5jdHJsLnZhbHVlKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKK3ZvaWQgQ29uZmlnVHhNYWNSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9UWE1BQ190IF9faW9tZW0gKnBUeE1hYyA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhtYWM7CisJVFhNQUNfQ0ZfUEFSQU1fdCBMb2NhbDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgQ29udHJvbCBGcmFtZSBQYXJhbWV0ZXJzCisJICogY2ZwdCAtIGNvbnRyb2wgZnJhbWUgcGF1c2UgdGltZXIgc2V0IHRvIDY0ICgweDQwKQorCSAqIGNmZXAgLSBjb250cm9sIGZyYW1lIGV4dGVuZGVkIHBhdXNlIHRpbWVyIHNldCB0byAweDAKKwkgKi8KKwlpZiAocEFkYXB0ZXItPkZsb3dDb250cm9sID09IE5vbmUpIHsKKwkJd3JpdGVsKDAsICZwVHhNYWMtPmNmX3BhcmFtLnZhbHVlKTsKKwl9IGVsc2UgeworCQlMb2NhbC5iaXRzLmNmcHQgPSAweDQwOworCQlMb2NhbC5iaXRzLmNmZXAgPSAweDA7CisJCXdyaXRlbChMb2NhbC52YWx1ZSwgJnBUeE1hYy0+Y2ZfcGFyYW0udmFsdWUpOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKK3ZvaWQgQ29uZmlnTWFjU3RhdFJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX01BQ19TVEFUX3QgX19pb21lbSAqcERldk1hY1N0YXQgPQorCQkmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hY1N0YXQ7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogTmV4dCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgYWxsIHRoZSBNQUNfU1RBVCByZWdpc3RlcnMgdG8gemVybyBvbgorCSAqIHRoZSBkZXZpY2UuCisJICovCisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+UkZjcyk7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+UkFsbik7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+UkZscik7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+UkRycCk7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+UkNkZSk7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+Uk92cik7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+UkZyZyk7CisKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5UU2NsKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5URGZyKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5UTWNsKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5UTGNsKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5UTmNsKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5UT3ZyKTsKKwl3cml0ZWwoMCwgJnBEZXZNYWNTdGF0LT5UVW5kKTsKKworCS8qIFVubWFzayBhbnkgY291bnRlcnMgdGhhdCB3ZSB3YW50IHRvIHRyYWNrIHRoZSBvdmVyZmxvdyBvZi4KKwkgKiBJbml0aWFsbHkgdGhpcyB3aWxsIGJlIGFsbCBjb3VudGVycy4gIEl0IG1heSBiZWNvbWUgY2xlYXIgbGF0ZXIKKwkgKiB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIHRyYWNrIGFsbCBjb3VudGVycy4KKwkgKi8KKwl7CisJCU1BQ19TVEFUX1JFR18xX3QgQ2FycnkxTSA9IHsgMHhmZmZmZmZmZiB9OworCisJCUNhcnJ5MU0uYml0cy5yZHJwID0gMDsKKwkJQ2FycnkxTS5iaXRzLnJqYnIgPSAxOworCQlDYXJyeTFNLmJpdHMucmZyZyA9IDA7CisJCUNhcnJ5MU0uYml0cy5yb3ZyID0gMDsKKwkJQ2FycnkxTS5iaXRzLnJ1bmQgPSAxOworCQlDYXJyeTFNLmJpdHMucmNzZSA9IDE7CisJCUNhcnJ5MU0uYml0cy5yY2RlID0gMDsKKwkJQ2FycnkxTS5iaXRzLnJmbHIgPSAwOworCQlDYXJyeTFNLmJpdHMucmFsbiA9IDA7CisJCUNhcnJ5MU0uYml0cy5yeHVvID0gMTsKKwkJQ2FycnkxTS5iaXRzLnJ4cGYgPSAxOworCQlDYXJyeTFNLmJpdHMucnhjZiA9IDE7CisJCUNhcnJ5MU0uYml0cy5yYmNhID0gMTsKKwkJQ2FycnkxTS5iaXRzLnJtY2EgPSAxOworCQlDYXJyeTFNLmJpdHMucmZjcyA9IDA7CisJCUNhcnJ5MU0uYml0cy5ycGt0ID0gMTsKKwkJQ2FycnkxTS5iaXRzLnJieXQgPSAxOworCQlDYXJyeTFNLmJpdHMudHJtZ3YgPSAxOworCQlDYXJyeTFNLmJpdHMudHJtYXggPSAxOworCQlDYXJyeTFNLmJpdHMudHIxayA9IDE7CisJCUNhcnJ5MU0uYml0cy50cjUxMSA9IDE7CisJCUNhcnJ5MU0uYml0cy50cjI1NSA9IDE7CisJCUNhcnJ5MU0uYml0cy50cjEyNyA9IDE7CisJCUNhcnJ5MU0uYml0cy50cjY0ID0gMTsKKworCQl3cml0ZWwoQ2FycnkxTS52YWx1ZSwgJnBEZXZNYWNTdGF0LT5DYXJyeTFNLnZhbHVlKTsKKwl9CisKKwl7CisJCU1BQ19TVEFUX1JFR18yX3QgQ2FycnkyTSA9IHsgMHhmZmZmZmZmZiB9OworCisJCUNhcnJ5Mk0uYml0cy50ZHJwID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRwZmggPSAxOworCQlDYXJyeTJNLmJpdHMudG5jbCA9IDA7CisJCUNhcnJ5Mk0uYml0cy50eGNsID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRsY2wgPSAwOworCQlDYXJyeTJNLmJpdHMudG1jbCA9IDA7CisJCUNhcnJ5Mk0uYml0cy50c2NsID0gMDsKKwkJQ2FycnkyTS5iaXRzLnRlZGYgPSAxOworCQlDYXJyeTJNLmJpdHMudGRmciA9IDA7CisJCUNhcnJ5Mk0uYml0cy50eHBmID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRiY2EgPSAxOworCQlDYXJyeTJNLmJpdHMudG1jYSA9IDE7CisJCUNhcnJ5Mk0uYml0cy50cGt0ID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRieXQgPSAxOworCQlDYXJyeTJNLmJpdHMudGZyZyA9IDE7CisJCUNhcnJ5Mk0uYml0cy50dW5kID0gMDsKKwkJQ2FycnkyTS5iaXRzLnRvdnIgPSAwOworCQlDYXJyeTJNLmJpdHMudHhjZiA9IDE7CisJCUNhcnJ5Mk0uYml0cy50ZmNzID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRqYnIgPSAxOworCisJCXdyaXRlbChDYXJyeTJNLnZhbHVlLCAmcERldk1hY1N0YXQtPkNhcnJ5Mk0udmFsdWUpOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKK3ZvaWQgQ29uZmlnRmxvd0NvbnRyb2woc3RydWN0IGV0MTMxeF9hZGFwdGVyICogcEFkYXB0ZXIpCit7CisJaWYgKHBBZGFwdGVyLT51aUR1cGxleE1vZGUgPT0gMCkgeworCQlwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPSBOb25lOworCX0gZWxzZSB7CisJCWNoYXIgUmVtb3RlUGF1c2UsIFJlbW90ZUFzeW5jUGF1c2U7CisKKwkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KHBBZGFwdGVyLAorCQkJCSAgICAgIFRSVUVQSFlfQklUX1JFQUQsIDUsIDEwLCAmUmVtb3RlUGF1c2UpOworCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQocEFkYXB0ZXIsCisJCQkJICAgICAgVFJVRVBIWV9CSVRfUkVBRCwgNSwgMTEsCisJCQkJICAgICAgJlJlbW90ZUFzeW5jUGF1c2UpOworCisJCWlmICgoUmVtb3RlUGF1c2UgPT0gVFJVRVBIWV9CSVRfU0VUKSAmJgorCQkgICAgKFJlbW90ZUFzeW5jUGF1c2UgPT0gVFJVRVBIWV9CSVRfU0VUKSkgeworCQkJcEFkYXB0ZXItPkZsb3dDb250cm9sID0gcEFkYXB0ZXItPlJlZ2lzdHJ5Rmxvd0NvbnRyb2w7CisJCX0gZWxzZSBpZiAoKFJlbW90ZVBhdXNlID09IFRSVUVQSFlfQklUX1NFVCkgJiYKKwkJCSAgIChSZW1vdGVBc3luY1BhdXNlID09IFRSVUVQSFlfQklUX0NMRUFSKSkgeworCQkJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeUZsb3dDb250cm9sID09IEJvdGgpIHsKKwkJCQlwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPSBCb3RoOworCQkJfSBlbHNlIHsKKwkJCQlwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPSBOb25lOworCQkJfQorCQl9IGVsc2UgaWYgKChSZW1vdGVQYXVzZSA9PSBUUlVFUEhZX0JJVF9DTEVBUikgJiYKKwkJCSAgIChSZW1vdGVBc3luY1BhdXNlID09IFRSVUVQSFlfQklUX0NMRUFSKSkgeworCQkJcEFkYXB0ZXItPkZsb3dDb250cm9sID0gTm9uZTsKKwkJfSBlbHNlIHsvKiBpZiAoUmVtb3RlUGF1c2UgPT0gVFJVRVBIWV9DTEVBUl9CSVQgJiYKKwkJCSAgICAgICBSZW1vdGVBc3luY1BhdXNlID09IFRSVUVQSFlfU0VUX0JJVCkgKi8KKwkJCWlmIChwQWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBCb3RoKSB7CisJCQkJcEFkYXB0ZXItPkZsb3dDb250cm9sID0gUnhPbmx5OworCQkJfSBlbHNlIHsKKwkJCQlwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPSBOb25lOworCQkJfQorCQl9CisJfQorfQorCisvKioKKyAqIFVwZGF0ZU1hY1N0YXRIb3N0Q291bnRlcnMgLSBVcGRhdGUgdGhlIGxvY2FsIGNvcHkgb2YgdGhlIHN0YXRpc3RpY3MKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBVcGRhdGVNYWNTdGF0SG9zdENvdW50ZXJzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9jZV9zdGF0c190ICpzdGF0cyA9ICZwQWRhcHRlci0+U3RhdHM7CisJc3RydWN0IF9NQUNfU1RBVF90IF9faW9tZW0gKnBEZXZNYWNTdGF0ID0KKwkJJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWNTdGF0OworCisJc3RhdHMtPmNvbGxpc2lvbnMgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5UTmNsKTsKKwlzdGF0cy0+Zmlyc3RfY29sbGlzaW9uICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+VFNjbCk7CisJc3RhdHMtPnR4X2RlZmVycmVkICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+VERmcik7CisJc3RhdHMtPmV4Y2Vzc2l2ZV9jb2xsaXNpb25zICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+VE1jbCk7CisJc3RhdHMtPmxhdGVfY29sbGlzaW9ucyArPSByZWFkbCgmcERldk1hY1N0YXQtPlRMY2wpOworCXN0YXRzLT50eF91ZmxvICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+VFVuZCk7CisJc3RhdHMtPm1heF9wa3RfZXJyb3IgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5UT3ZyKTsKKworCXN0YXRzLT5hbGlnbm1lbnRfZXJyICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+UkFsbik7CisJc3RhdHMtPmNyY19lcnIgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5SQ2RlKTsKKwlzdGF0cy0+bm9yY3ZidWYgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5SRHJwKTsKKwlzdGF0cy0+cnhfb3ZfZmxvdyArPSByZWFkbCgmcERldk1hY1N0YXQtPlJPdnIpOworCXN0YXRzLT5jb2RlX3Zpb2xhdGlvbnMgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5SRmNzKTsKKwlzdGF0cy0+bGVuZ3RoX2VyciArPSByZWFkbCgmcERldk1hY1N0YXQtPlJGbHIpOworCisJc3RhdHMtPm90aGVyX2Vycm9ycyArPSByZWFkbCgmcERldk1hY1N0YXQtPlJGcmcpOworfQorCisvKioKKyAqIEhhbmRsZU1hY1N0YXRJbnRlcnJ1cHQKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBPbmUgb2YgdGhlIE1BQ1NUQVQgY291bnRlcnMgaGFzIHdyYXBwZWQuICBVcGRhdGUgdGhlIGxvY2FsIGNvcHkgb2YKKyAqIHRoZSBzdGF0aXN0aWNzIGhlbGQgaW4gdGhlIGFkYXB0ZXIgc3RydWN0dXJlLCBjaGVja2luZyB0aGUgIndyYXAiCisgKiBiaXQgZm9yIGVhY2ggY291bnRlci4KKyAqLwordm9pZCBIYW5kbGVNYWNTdGF0SW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJTUFDX1NUQVRfUkVHXzFfdCBDYXJyeTE7CisJTUFDX1NUQVRfUkVHXzJfdCBDYXJyeTI7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUmVhZCB0aGUgaW50ZXJydXB0IGJpdHMgZnJvbSB0aGUgcmVnaXN0ZXIocykuICBUaGVzZSBhcmUgQ2xlYXIgT24KKwkgKiBXcml0ZS4KKwkgKi8KKwlDYXJyeTEudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hY1N0YXQuQ2FycnkxLnZhbHVlKTsKKwlDYXJyeTIudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hY1N0YXQuQ2FycnkyLnZhbHVlKTsKKworCXdyaXRlbChDYXJyeTEudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjU3RhdC5DYXJyeTEudmFsdWUpOworCXdyaXRlbChDYXJyeTIudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjU3RhdC5DYXJyeTIudmFsdWUpOworCisJLyogV2UgbmVlZCB0byBkbyB1cGRhdGUgdGhlIGhvc3QgY29weSBvZiBhbGwgdGhlIE1BQ19TVEFUIGNvdW50ZXJzLgorCSAqIEZvciBlYWNoIGNvdW50ZXIsIGNoZWNrIGl0J3Mgb3ZlcmZsb3cgYml0LiAgSWYgdGhlIG92ZXJmbG93IGJpdCBpcworCSAqIHNldCwgdGhlbiBpbmNyZW1lbnQgdGhlIGhvc3QgdmVyc2lvbiBvZiB0aGUgY291bnQgYnkgb25lIGNvbXBsZXRlCisJICogcmV2b2x1dGlvbiBvZiB0aGUgY291bnRlci4gIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiB0aGUgY291bnRlcgorCSAqIGJsb2NrIGluZGljYXRlcyB0aGF0IG9uZSBvZiB0aGUgY291bnRlcnMgaGFzIHdyYXBwZWQuCisJICovCisJaWYgKENhcnJ5MS5iaXRzLnJmY3MpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLmNvZGVfdmlvbGF0aW9ucyArPSBDT1VOVEVSX1dSQVBfMTZfQklUOworCX0KKwlpZiAoQ2FycnkxLmJpdHMucmFsbikgeworCQlwQWRhcHRlci0+U3RhdHMuYWxpZ25tZW50X2VyciArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKwlpZiAoQ2FycnkxLmJpdHMucmZscikgeworCQlwQWRhcHRlci0+U3RhdHMubGVuZ3RoX2VyciArPSBDT1VOVEVSX1dSQVBfMTZfQklUOworCX0KKwlpZiAoQ2FycnkxLmJpdHMucmZyZykgeworCQlwQWRhcHRlci0+U3RhdHMub3RoZXJfZXJyb3JzICs9IENPVU5URVJfV1JBUF8xNl9CSVQ7CisJfQorCWlmIChDYXJyeTEuYml0cy5yY2RlKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5jcmNfZXJyICs9IENPVU5URVJfV1JBUF8xNl9CSVQ7CisJfQorCWlmIChDYXJyeTEuYml0cy5yb3ZyKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5yeF9vdl9mbG93ICs9IENPVU5URVJfV1JBUF8xNl9CSVQ7CisJfQorCWlmIChDYXJyeTEuYml0cy5yZHJwKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5ub3JjdmJ1ZiArPSBDT1VOVEVSX1dSQVBfMTZfQklUOworCX0KKwlpZiAoQ2FycnkyLmJpdHMudG92cikgeworCQlwQWRhcHRlci0+U3RhdHMubWF4X3BrdF9lcnJvciArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKwlpZiAoQ2FycnkyLmJpdHMudHVuZCkgeworCQlwQWRhcHRlci0+U3RhdHMudHhfdWZsbyArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKwlpZiAoQ2FycnkyLmJpdHMudHNjbCkgeworCQlwQWRhcHRlci0+U3RhdHMuZmlyc3RfY29sbGlzaW9uICs9IENPVU5URVJfV1JBUF8xMl9CSVQ7CisJfQorCWlmIChDYXJyeTIuYml0cy50ZGZyKSB7CisJCXBBZGFwdGVyLT5TdGF0cy50eF9kZWZlcnJlZCArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKwlpZiAoQ2FycnkyLmJpdHMudG1jbCkgeworCQlwQWRhcHRlci0+U3RhdHMuZXhjZXNzaXZlX2NvbGxpc2lvbnMgKz0gQ09VTlRFUl9XUkFQXzEyX0JJVDsKKwl9CisJaWYgKENhcnJ5Mi5iaXRzLnRsY2wpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLmxhdGVfY29sbGlzaW9ucyArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKwlpZiAoQ2FycnkyLmJpdHMudG5jbCkgeworCQlwQWRhcHRlci0+U3RhdHMuY29sbGlzaW9ucyArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKK3ZvaWQgU2V0dXBEZXZpY2VGb3JNdWx0aWNhc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX1JYTUFDX3QgX19pb21lbSAqcnhtYWMgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4bWFjOworCXVpbnQzMl90IG5JbmRleDsKKwl1aW50MzJfdCByZXN1bHQ7CisJdWludDMyX3QgaGFzaDEgPSAwOworCXVpbnQzMl90IGhhc2gyID0gMDsKKwl1aW50MzJfdCBoYXNoMyA9IDA7CisJdWludDMyX3QgaGFzaDQgPSAwOworCVBNX0NTUl90IHBtX2NzcjsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBJZiBFVDEzMVhfUEFDS0VUX1RZUEVfTVVMVElDQVNUIGlzIHNwZWNpZmllZCwgdGhlbiB3ZSBwcm92aXNpb24KKwkgKiB0aGUgbXVsdGktY2FzdCBMSVNULiAgSWYgaXQgaXMgTk9UIHNwZWNpZmllZCwgKGFuZCAiQUxMIiBpcyBub3QKKwkgKiBzcGVjaWZpZWQpIHRoZW4gd2Ugc2hvdWxkIHBhc3MgTk8gbXVsdGktY2FzdCBhZGRyZXNzZXMgdG8gdGhlCisJICogZHJpdmVyLgorCSAqLworCWlmIChwQWRhcHRlci0+UGFja2V0RmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCkgeworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJCSAgICAiTVVMVElDQVNUIGZsYWcgaXMgc2V0LCBNQ0NvdW50OiAlZFxuIiwKKwkJCSAgICBwQWRhcHRlci0+TUNBZGRyZXNzQ291bnQpOworCisJCS8qIExvb3AgdGhyb3VnaCBvdXIgbXVsdGljYXN0IGFycmF5IGFuZCBzZXQgdXAgdGhlIGRldmljZSAqLworCQlmb3IgKG5JbmRleCA9IDA7IG5JbmRleCA8IHBBZGFwdGVyLT5NQ0FkZHJlc3NDb3VudDsgbkluZGV4KyspIHsKKwkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiTUNMaXN0WyVkXTogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQkJICAgIG5JbmRleCwKKwkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzBdLAorCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bMV0sCisJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVsyXSwKKwkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzNdLAorCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bNF0sCisJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVs1XSk7CisKKwkJCXJlc3VsdCA9IGV0aGVyX2NyYyg2LCBwQWRhcHRlci0+TUNMaXN0W25JbmRleF0pOworCisJCQlyZXN1bHQgPSAocmVzdWx0ICYgMHgzRjgwMDAwMCkgPj4gMjM7CisKKwkJCWlmIChyZXN1bHQgPCAzMikgeworCQkJCWhhc2gxIHw9ICgxIDw8IHJlc3VsdCk7CisJCQl9IGVsc2UgaWYgKCgzMSA8IHJlc3VsdCkgJiYgKHJlc3VsdCA8IDY0KSkgeworCQkJCXJlc3VsdCAtPSAzMjsKKwkJCQloYXNoMiB8PSAoMSA8PCByZXN1bHQpOworCQkJfSBlbHNlIGlmICgoNjMgPCByZXN1bHQpICYmIChyZXN1bHQgPCA5NikpIHsKKwkJCQlyZXN1bHQgLT0gNjQ7CisJCQkJaGFzaDMgfD0gKDEgPDwgcmVzdWx0KTsKKwkJCX0gZWxzZSB7CisJCQkJcmVzdWx0IC09IDk2OworCQkJCWhhc2g0IHw9ICgxIDw8IHJlc3VsdCk7CisJCQl9CisJCX0KKwl9CisKKwkvKiBXcml0ZSBvdXQgdGhlIG5ldyBoYXNoIHRvIHRoZSBkZXZpY2UgKi8KKwlwbV9jc3IudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5wbV9jc3IudmFsdWUpOworCWlmIChwbV9jc3IuYml0cy5wbV9waHlfc3dfY29tYSA9PSAwKSB7CisJCXdyaXRlbChoYXNoMSwgJnJ4bWFjLT5tdWx0aV9oYXNoMSk7CisJCXdyaXRlbChoYXNoMiwgJnJ4bWFjLT5tdWx0aV9oYXNoMik7CisJCXdyaXRlbChoYXNoMywgJnJ4bWFjLT5tdWx0aV9oYXNoMyk7CisJCXdyaXRlbChoYXNoNCwgJnJ4bWFjLT5tdWx0aV9oYXNoNCk7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKwordm9pZCBTZXR1cERldmljZUZvclVuaWNhc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX1JYTUFDX3QgX19pb21lbSAqcnhtYWMgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4bWFjOworCVJYTUFDX1VOSV9QRl9BRERSMV90IHVuaV9wZjE7CisJUlhNQUNfVU5JX1BGX0FERFIyX3QgdW5pX3BmMjsKKwlSWE1BQ19VTklfUEZfQUREUjNfdCB1bmlfcGYzOworCVBNX0NTUl90IHBtX2NzcjsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBTZXQgdXAgdW5pY2FzdCBwYWNrZXQgZmlsdGVyIHJlZyAzIHRvIGJlIHRoZSBmaXJzdCB0d28gb2N0ZXRzIG9mCisJICogdGhlIE1BQyBhZGRyZXNzIGZvciBib3RoIGFkZHJlc3MKKwkgKgorCSAqIFNldCB1cCB1bmljYXN0IHBhY2tldCBmaWx0ZXIgcmVnIDIgdG8gYmUgdGhlIG9jdGV0cyAyIC0gNSBvZiB0aGUKKwkgKiBNQUMgYWRkcmVzcyBmb3Igc2Vjb25kIGFkZHJlc3MKKwkgKgorCSAqIFNldCB1cCB1bmljYXN0IHBhY2tldCBmaWx0ZXIgcmVnIDMgdG8gYmUgdGhlIG9jdGV0cyAyIC0gNSBvZiB0aGUKKwkgKiBNQUMgYWRkcmVzcyBmb3IgZmlyc3QgYWRkcmVzcworCSAqLworCXVuaV9wZjMuYml0cy5hZGRyMV8xID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzBdOworCXVuaV9wZjMuYml0cy5hZGRyMV8yID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzFdOworCXVuaV9wZjMuYml0cy5hZGRyMl8xID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzBdOworCXVuaV9wZjMuYml0cy5hZGRyMl8yID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzFdOworCisJdW5pX3BmMi5iaXRzLmFkZHIyXzMgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMl07CisJdW5pX3BmMi5iaXRzLmFkZHIyXzQgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbM107CisJdW5pX3BmMi5iaXRzLmFkZHIyXzUgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNF07CisJdW5pX3BmMi5iaXRzLmFkZHIyXzYgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNV07CisKKwl1bmlfcGYxLmJpdHMuYWRkcjFfMyA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1syXTsKKwl1bmlfcGYxLmJpdHMuYWRkcjFfNCA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1szXTsKKwl1bmlfcGYxLmJpdHMuYWRkcjFfNSA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s0XTsKKwl1bmlfcGYxLmJpdHMuYWRkcjFfNiA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s1XTsKKworCXBtX2Nzci52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLnBtX2Nzci52YWx1ZSk7CisJaWYgKHBtX2Nzci5iaXRzLnBtX3BoeV9zd19jb21hID09IDApIHsKKwkJd3JpdGVsKHVuaV9wZjEudmFsdWUsICZyeG1hYy0+dW5pX3BmX2FkZHIxLnZhbHVlKTsKKwkJd3JpdGVsKHVuaV9wZjIudmFsdWUsICZyeG1hYy0+dW5pX3BmX2FkZHIyLnZhbHVlKTsKKwkJd3JpdGVsKHVuaV9wZjMudmFsdWUsICZyeG1hYy0+dW5pX3BmX2FkZHIzLnZhbHVlKTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDI2Y2QzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfbWFjLmggLSAgRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gcGVydGFpbmluZyB0byB0aGUKKyAqICAgICAgICAgICAgICAgICBNQUMuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX0VUMTMxMF9NQUNfSF8KKyNkZWZpbmUgX0VUMTMxMF9NQUNfSF8KKworCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisKKworI2RlZmluZSBDT1VOVEVSX1dSQVBfMjhfQklUIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ09VTlRFUl9XUkFQXzIyX0JJVCAweDQwMDAwMAorI2RlZmluZSBDT1VOVEVSX1dSQVBfMTZfQklUIDB4MTAwMDAKKyNkZWZpbmUgQ09VTlRFUl9XUkFQXzEyX0JJVCAweDEwMDAKKworI2RlZmluZSBDT1VOVEVSX01BU0tfMjhfQklUIChDT1VOVEVSX1dSQVBfMjhfQklUIC0gMSkKKyNkZWZpbmUgQ09VTlRFUl9NQVNLXzIyX0JJVCAoQ09VTlRFUl9XUkFQXzIyX0JJVCAtIDEpCisjZGVmaW5lIENPVU5URVJfTUFTS18xNl9CSVQgKENPVU5URVJfV1JBUF8xNl9CSVQgLSAxKQorI2RlZmluZSBDT1VOVEVSX01BU0tfMTJfQklUIChDT1VOVEVSX1dSQVBfMTJfQklUIC0gMSkKKworI2RlZmluZSBVUERBVEVfQ09VTlRFUihIb3N0Q250LERldkNudCkgXAorICAgIEhvc3RDbnQgPSBIb3N0Q250ICsgRGV2Q250OworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCitzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7CisKK3ZvaWQgQ29uZmlnTUFDUmVnczEoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgQ29uZmlnTUFDUmVnczIoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgQ29uZmlnUnhNYWNSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIENvbmZpZ1R4TWFjUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBDb25maWdNYWNTdGF0UmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBDb25maWdGbG93Q29udHJvbChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBVcGRhdGVNYWNTdGF0SG9zdENvdW50ZXJzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIEhhbmRsZU1hY1N0YXRJbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgU2V0dXBEZXZpY2VGb3JNdWx0aWNhc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgU2V0dXBEZXZpY2VGb3JVbmljYXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKyNlbmRpZiAvKiBfRVQxMzEwX01BQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzRmYTU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmMKQEAgLTAsMCArMSwxMjgxIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9waHkuYyAtIFJvdXRpbmVzIGZvciBjb25maWd1cmluZyBhbmQgYWNjZXNzaW5nIHRoZSBQSFkKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9uZXRkZXYuaCIKKyNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgorCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKyNpbmNsdWRlICJldDEzMTBfdHguaCIKKyNpbmNsdWRlICJldDEzMTBfcnguaCIKKyNpbmNsdWRlICJldDEzMTBfbWFjLmgiCisKKy8qIERhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworLyogUHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIHdpdGggbG9jYWwgc2NvcGUgKi8KK3N0YXRpYyBpbnQgZXQxMzF4X3hjdnJfaW5pdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisvKioKKyAqIFBoeU1pUmVhZCAtIFJlYWQgZnJvbSB0aGUgUEhZIHRocm91Z2ggdGhlIE1JSSBJbnRlcmZhY2Ugb24gdGhlIE1BQworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqIEB4Y3ZyQWRkcjogdGhlIGFkZHJlc3Mgb2YgdGhlIHRyYW5zY2lldmVyCisgKiBAeGN2clJlZzogdGhlIHJlZ2lzdGVyIHRvIHJlYWQKKyAqIEB2YWx1ZTogcG9pbnRlciB0byBhIDE2LWJpdCB2YWx1ZSBpbiB3aGljaCB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgUGh5TWlSZWFkKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgdWludDhfdCB4Y3ZyQWRkciwKKwkgICAgICB1aW50OF90IHhjdnJSZWcsIHVpbnQxNl90ICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgX01BQ190IF9faW9tZW0gKm1hYyA9ICZhZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWM7CisJaW50IHN0YXR1cyA9IDA7CisJdWludDMyX3QgZGVsYXk7CisJTUlJX01HTVRfQUREUl90IG1paUFkZHI7CisJTUlJX01HTVRfQ01EX3QgbWlpQ21kOworCU1JSV9NR01UX0lORElDQVRPUl90IG1paUluZGljYXRvcjsKKworCS8qIFNhdmUgYSBsb2NhbCBjb3B5IG9mIHRoZSByZWdpc3RlcnMgd2UgYXJlIGRlYWxpbmcgd2l0aCBzbyB3ZSBjYW4KKwkgKiBzZXQgdGhlbSBiYWNrCisJICovCisJbWlpQWRkci52YWx1ZSA9IHJlYWRsKCZtYWMtPm1paV9tZ210X2FkZHIudmFsdWUpOworCW1paUNtZC52YWx1ZSA9IHJlYWRsKCZtYWMtPm1paV9tZ210X2NtZC52YWx1ZSk7CisKKwkvKiBTdG9wIHRoZSBjdXJyZW50IG9wZXJhdGlvbiAqLworCXdyaXRlbCgwLCAmbWFjLT5taWlfbWdtdF9jbWQudmFsdWUpOworCisJLyogU2V0IHVwIHRoZSByZWdpc3RlciB3ZSBuZWVkIHRvIHJlYWQgZnJvbSBvbiB0aGUgY29ycmVjdCBQSFkgKi8KKwl7CisJCU1JSV9NR01UX0FERFJfdCBtaWlfbWdtdF9hZGRyID0geyAwIH07CisKKwkJbWlpX21nbXRfYWRkci5iaXRzLnBoeV9hZGRyID0geGN2ckFkZHI7CisJCW1paV9tZ210X2FkZHIuYml0cy5yZWdfYWRkciA9IHhjdnJSZWc7CisJCXdyaXRlbChtaWlfbWdtdF9hZGRyLnZhbHVlLCAmbWFjLT5taWlfbWdtdF9hZGRyLnZhbHVlKTsKKwl9CisKKwkvKiBLaWNrIHRoZSByZWFkIGN5Y2xlIG9mZiAqLworCWRlbGF5ID0gMDsKKworCXdyaXRlbCgweDEsICZtYWMtPm1paV9tZ210X2NtZC52YWx1ZSk7CisKKwlkbyB7CisJCXVkZWxheSg1MCk7CisJCWRlbGF5Kys7CisJCW1paUluZGljYXRvci52YWx1ZSA9IHJlYWRsKCZtYWMtPm1paV9tZ210X2luZGljYXRvci52YWx1ZSk7CisJfSB3aGlsZSAoKG1paUluZGljYXRvci5iaXRzLm5vdF92YWxpZCB8fCBtaWlJbmRpY2F0b3IuYml0cy5idXN5KSAmJgorCQkgZGVsYXkgPCA1MCk7CisKKwkvKiBJZiB3ZSBoaXQgdGhlIG1heCBkZWxheSwgd2UgY291bGQgbm90IHJlYWQgdGhlIHJlZ2lzdGVyICovCisJaWYgKGRlbGF5ID49IDUwKSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJ4Y3ZyUmVnIDB4JTA4eCBjb3VsZCBub3QgYmUgcmVhZFxuIiwgeGN2clJlZyk7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLCAic3RhdHVzIGlzICAweCUwOHhcbiIsCisJCQkgICAgbWlpSW5kaWNhdG9yLnZhbHVlKTsKKworCQlzdGF0dXMgPSAtRUlPOworCX0KKworCS8qIElmIHdlIGhpdCBoZXJlIHdlIHdlcmUgYWJsZSB0byByZWFkIHRoZSByZWdpc3RlciBhbmQgd2UgbmVlZCB0bworCSAqIHJldHVybiB0aGUgdmFsdWUgdG8gdGhlIGNhbGxlcgorCSAqLworCS8qIFRPRE86IG1ha2UgdGhpcyBzdHVmZiBhIHNpbXBsZSByZWFkdygpPyEgKi8KKwl7CisJCU1JSV9NR01UX1NUQVRfdCBtaWlfbWdtdF9zdGF0OworCisJCW1paV9tZ210X3N0YXQudmFsdWUgPSByZWFkbCgmbWFjLT5taWlfbWdtdF9zdGF0LnZhbHVlKTsKKwkJKnZhbHVlID0gKHVpbnQxNl90KSBtaWlfbWdtdF9zdGF0LmJpdHMucGh5X3N0YXQ7CisJfQorCisJLyogU3RvcCB0aGUgcmVhZCBvcGVyYXRpb24gKi8KKwl3cml0ZWwoMCwgJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKTsKKworCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiICB4Y3ZyX2FkZHIgPSAweCUwMngsICIKKwkJICAgICJ4Y3ZyX3JlZyAgPSAweCUwMngsICIKKwkJICAgICJ2YWx1ZSAgICAgPSAweCUwNHguXG4iLCB4Y3ZyQWRkciwgeGN2clJlZywgKnZhbHVlKTsKKworCS8qIHNldCB0aGUgcmVnaXN0ZXJzIHdlIHRvdWNoZWQgYmFjayB0byB0aGUgc3RhdGUgYXQgd2hpY2ggd2UgZW50ZXJlZAorCSAqIHRoaXMgZnVuY3Rpb24KKwkgKi8KKwl3cml0ZWwobWlpQWRkci52YWx1ZSwgJm1hYy0+bWlpX21nbXRfYWRkci52YWx1ZSk7CisJd3JpdGVsKG1paUNtZC52YWx1ZSwgJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogTWlXcml0ZSAtIFdyaXRlIHRvIGEgUEhZIHJlZ2lzdGVyIHRocm91Z2ggdGhlIE1JSSBpbnRlcmZhY2Ugb2YgdGhlIE1BQworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqIEB4Y3ZyUmVnOiB0aGUgcmVnaXN0ZXIgdG8gcmVhZAorICogQHZhbHVlOiAxNi1iaXQgdmFsdWUgdG8gd3JpdGUKKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBNaVdyaXRlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgdWludDhfdCB4Y3ZyUmVnLCB1aW50MTZfdCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgX01BQ190IF9faW9tZW0gKm1hYyA9ICZhZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWM7CisJaW50IHN0YXR1cyA9IDA7CisJdWludDhfdCB4Y3ZyQWRkciA9IGFkYXB0ZXItPlN0YXRzLnhjdnJfYWRkcjsKKwl1aW50MzJfdCBkZWxheTsKKwlNSUlfTUdNVF9BRERSX3QgbWlpQWRkcjsKKwlNSUlfTUdNVF9DTURfdCBtaWlDbWQ7CisJTUlJX01HTVRfSU5ESUNBVE9SX3QgbWlpSW5kaWNhdG9yOworCisJLyogU2F2ZSBhIGxvY2FsIGNvcHkgb2YgdGhlIHJlZ2lzdGVycyB3ZSBhcmUgZGVhbGluZyB3aXRoIHNvIHdlIGNhbgorCSAqIHNldCB0aGVtIGJhY2sKKwkgKi8KKwltaWlBZGRyLnZhbHVlID0gcmVhZGwoJm1hYy0+bWlpX21nbXRfYWRkci52YWx1ZSk7CisJbWlpQ21kLnZhbHVlID0gcmVhZGwoJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKTsKKworCS8qIFN0b3AgdGhlIGN1cnJlbnQgb3BlcmF0aW9uICovCisJd3JpdGVsKDAsICZtYWMtPm1paV9tZ210X2NtZC52YWx1ZSk7CisKKwkvKiBTZXQgdXAgdGhlIHJlZ2lzdGVyIHdlIG5lZWQgdG8gd3JpdGUgdG8gb24gdGhlIGNvcnJlY3QgUEhZICovCisJeworCQlNSUlfTUdNVF9BRERSX3QgbWlpX21nbXRfYWRkcjsKKworCQltaWlfbWdtdF9hZGRyLmJpdHMucGh5X2FkZHIgPSB4Y3ZyQWRkcjsKKwkJbWlpX21nbXRfYWRkci5iaXRzLnJlZ19hZGRyID0geGN2clJlZzsKKwkJd3JpdGVsKG1paV9tZ210X2FkZHIudmFsdWUsICZtYWMtPm1paV9tZ210X2FkZHIudmFsdWUpOworCX0KKworCS8qIEFkZCB0aGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlZ2lzdGVycyB0byB0aGUgbWFjICovCisJd3JpdGVsKHZhbHVlLCAmbWFjLT5taWlfbWdtdF9jdHJsLnZhbHVlKTsKKwlkZWxheSA9IDA7CisKKwlkbyB7CisJCXVkZWxheSg1MCk7CisJCWRlbGF5Kys7CisJCW1paUluZGljYXRvci52YWx1ZSA9IHJlYWRsKCZtYWMtPm1paV9tZ210X2luZGljYXRvci52YWx1ZSk7CisJfSB3aGlsZSAobWlpSW5kaWNhdG9yLmJpdHMuYnVzeSAmJiBkZWxheSA8IDEwMCk7CisKKwkvKiBJZiB3ZSBoaXQgdGhlIG1heCBkZWxheSwgd2UgY291bGQgbm90IHdyaXRlIHRoZSByZWdpc3RlciAqLworCWlmIChkZWxheSA9PSAxMDApIHsKKwkJdWludDE2X3QgVGVtcFZhbHVlOworCisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJ4Y3ZyUmVnIDB4JTA4eCBjb3VsZCBub3QgYmUgd3JpdHRlbiIsIHhjdnJSZWcpOworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywgInN0YXR1cyBpcyAgMHglMDh4XG4iLAorCQkJICAgIG1paUluZGljYXRvci52YWx1ZSk7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLCAiY29tbWFuZCBpcyAgMHglMDh4XG4iLAorCQkJICAgIHJlYWRsKCZtYWMtPm1paV9tZ210X2NtZC52YWx1ZSkpOworCisJCU1pUmVhZChhZGFwdGVyLCB4Y3ZyUmVnLCAmVGVtcFZhbHVlKTsKKworCQlzdGF0dXMgPSAtRUlPOworCX0KKworCS8qIFN0b3AgdGhlIHdyaXRlIG9wZXJhdGlvbiAqLworCXdyaXRlbCgwLCAmbWFjLT5taWlfbWdtdF9jbWQudmFsdWUpOworCisJLyogc2V0IHRoZSByZWdpc3RlcnMgd2UgdG91Y2hlZCBiYWNrIHRvIHRoZSBzdGF0ZSBhdCB3aGljaCB3ZSBlbnRlcmVkCisgICAgICAgICAqIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgICovCisJd3JpdGVsKG1paUFkZHIudmFsdWUsICZtYWMtPm1paV9tZ210X2FkZHIudmFsdWUpOworCXdyaXRlbChtaWlDbWQudmFsdWUsICZtYWMtPm1paV9tZ210X2NtZC52YWx1ZSk7CisKKwlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIiB4Y3ZyX2FkZHIgPSAweCUwMngsICIKKwkJICAgICJ4Y3ZyX3JlZyAgPSAweCUwMngsICIKKwkJICAgICJ2YWx1ZSAgICAgPSAweCUwNHguXG4iLCB4Y3ZyQWRkciwgeGN2clJlZywgdmFsdWUpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBldDEzMXhfeGN2cl9maW5kIC0gRmluZCB0aGUgUEhZIElECisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBldDEzMXhfeGN2cl9maW5kKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzID0gLUVOT0RFVjsKKwl1aW50OF90IHhjdnJfYWRkcjsKKwlNSV9JRFIxX3QgaWRyMTsKKwlNSV9JRFIyX3QgaWRyMjsKKwl1aW50MzJfdCB4Y3ZyX2lkOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFdlIG5lZWQgdG8gZ2V0IHhjdnIgaWQgYW5kIGFkZHJlc3Mgd2UganVzdCBnZXQgdGhlIGZpcnN0IG9uZSAqLworCWZvciAoeGN2cl9hZGRyID0gMDsgeGN2cl9hZGRyIDwgMzI7IHhjdnJfYWRkcisrKSB7CisJCS8qIFJlYWQgdGhlIElEIGZyb20gdGhlIFBIWSAqLworCQlQaHlNaVJlYWQoYWRhcHRlciwgeGN2cl9hZGRyLAorCQkJICAodWludDhfdCkgb2Zmc2V0b2YoTUlfUkVHU190LCBpZHIxKSwKKwkJCSAgJmlkcjEudmFsdWUpOworCQlQaHlNaVJlYWQoYWRhcHRlciwgeGN2cl9hZGRyLAorCQkJICAodWludDhfdCkgb2Zmc2V0b2YoTUlfUkVHU190LCBpZHIyKSwKKwkJCSAgJmlkcjIudmFsdWUpOworCisJCXhjdnJfaWQgPSAodWludDMyX3QpICgoaWRyMS52YWx1ZSA8PCAxNikgfCBpZHIyLnZhbHVlKTsKKworCQlpZiAoKGlkcjEudmFsdWUgIT0gMCkgJiYgKGlkcjEudmFsdWUgIT0gMHhmZmZmKSkgeworCQkJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgIlhjdnIgYWRkcjogMHglMDJ4XHRYY3ZyX2lkOiAweCUwOHhcbiIsCisJCQkJICB4Y3ZyX2FkZHIsIHhjdnJfaWQpOworCisJCQlhZGFwdGVyLT5TdGF0cy54Y3ZyX2lkID0geGN2cl9pZDsKKwkJCWFkYXB0ZXItPlN0YXRzLnhjdnJfYWRkciA9IHhjdnJfYWRkcjsKKworCQkJc3RhdHVzID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGV0MTMxeF9zZXRwaHlfbm9ybWFsIC0gU2V0IFBIWSBmb3Igbm9ybWFsIG9wZXJhdGlvbi4KKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogVXNlZCBieSBQb3dlciBNYW5hZ2VtZW50IHRvIGZvcmNlIHRoZSBQSFkgaW50byAxMCBCYXNlIFQgaGFsZi1kdXBsZXggbW9kZSwKKyAqIHdoZW4gZ29pbmcgdG8gRDMgaW4gV09MIG1vZGUuIEFsc28gdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdG8gc2V0IHRoZQorICogUEhZIGZvciBub3JtYWwgb3BlcmF0aW9uLgorICovCitpbnQgZXQxMzF4X3NldHBoeV9ub3JtYWwoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBzdGF0dXM7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogTWFrZSBzdXJlIHRoZSBQSFkgaXMgcG93ZXJlZCB1cCAqLworCUVUMTMxMF9QaHlQb3dlckRvd24oYWRhcHRlciwgMCk7CisJc3RhdHVzID0gZXQxMzF4X3hjdnJfaW5pdChhZGFwdGVyKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBldDEzMXhfeGN2cl9pbml0IC0gSW5pdCB0aGUgcGh5IGlmIHdlIGFyZSBzZXR0aW5nIGl0IGludG8gZm9yY2UgbW9kZQorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitzdGF0aWMgaW50IGV0MTMxeF94Y3ZyX2luaXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBzdGF0dXMgPSAwOworCU1JX0lNUl90IGltcjsKKwlNSV9JU1JfdCBpc3I7CisJTUlfTENSMl90IGxjcjI7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogWmVybyBvdXQgdGhlIGFkYXB0ZXIgc3RydWN0dXJlIHZhcmlhYmxlIHJlcHJlc2VudGluZyBCTVNSICovCisJYWRhcHRlci0+Qm1zci52YWx1ZSA9IDA7CisKKwlNaVJlYWQoYWRhcHRlciwgKHVpbnQ4X3QpIG9mZnNldG9mKE1JX1JFR1NfdCwgaXNyKSwgJmlzci52YWx1ZSk7CisKKwlNaVJlYWQoYWRhcHRlciwgKHVpbnQ4X3QpIG9mZnNldG9mKE1JX1JFR1NfdCwgaW1yKSwgJmltci52YWx1ZSk7CisKKwkvKiBTZXQgdGhlIGxpbmsgc3RhdHVzIGludGVycnVwdCBvbmx5LiAgQmFkIGJlaGF2aW9yIHdoZW4gbGluayBzdGF0dXMKKwkgKiBhbmQgYXV0byBuZWcgYXJlIHNldCwgd2UgcnVuIGludG8gYSBuZXN0ZWQgaW50ZXJydXB0IHByb2JsZW0KKwkgKi8KKwlpbXIuYml0cy5pbnRfZW4gPSAweDE7CisJaW1yLmJpdHMubGlua19zdGF0dXMgPSAweDE7CisJaW1yLmJpdHMuYXV0b25lZ19zdGF0dXMgPSAweDE7CisKKwlNaVdyaXRlKGFkYXB0ZXIsICh1aW50OF90KSBvZmZzZXRvZihNSV9SRUdTX3QsIGltciksIGltci52YWx1ZSk7CisKKwkvKiBTZXQgdGhlIExFRCBiZWhhdmlvciBzdWNoIHRoYXQgTEVEIDEgaW5kaWNhdGVzIHNwZWVkIChvZmYgPQorCSAqIDEwTWJpdHMsIGJsaW5rID0gMTAwTWJpdHMsIG9uID0gMTAwME1iaXRzKSBhbmQgTEVEIDIgaW5kaWNhdGVzCisJICogbGluayBhbmQgYWN0aXZpdHkgKG9uIGZvciBsaW5rLCBibGluayBvZmYgZm9yIGFjdGl2aXR5KS4KKwkgKgorCSAqIE5PVEU6IFNvbWUgY3VzdG9taXphdGlvbnMgaGF2ZSBiZWVuIGFkZGVkIGhlcmUgZm9yIHNwZWNpZmljCisJICogdmVuZG9yczsgVGhlIExFRCBiZWhhdmlvciBpcyBub3cgZGV0ZXJtaW5lZCBieSB2ZW5kb3IgZGF0YSBpbiB0aGUKKwkgKiBFRVBST00uIEhvd2V2ZXIsIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiBpcyB0aGUgZGVmYXVsdC4KKwkgKi8KKwlpZiAoKGFkYXB0ZXItPmVlcHJvbURhdGFbMV0gJiAweDQpID09IDApIHsKKwkJTWlSZWFkKGFkYXB0ZXIsICh1aW50OF90KSBvZmZzZXRvZihNSV9SRUdTX3QsIGxjcjIpLAorCQkgICAgICAgJmxjcjIudmFsdWUpOworCQlpZiAoKGFkYXB0ZXItPmVlcHJvbURhdGFbMV0gJiAweDgpID09IDApCisJCQlsY3IyLmJpdHMubGVkX3R4X3J4ID0gMHgzOworCQllbHNlCisJCQlsY3IyLmJpdHMubGVkX3R4X3J4ID0gMHg0OworCQlsY3IyLmJpdHMubGVkX2xpbmsgPSAweGE7CisJCU1pV3JpdGUoYWRhcHRlciwgKHVpbnQ4X3QpIG9mZnNldG9mKE1JX1JFR1NfdCwgbGNyMiksCisJCQlsY3IyLnZhbHVlKTsKKwl9CisKKwkvKiBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBnbyBpbnRvIGEgZm9yY2UgbW9kZSBhbmQgc2V0IGl0ICovCisJaWYgKGFkYXB0ZXItPkFpRm9yY2VTcGVlZCA9PSAwICYmIGFkYXB0ZXItPkFpRm9yY2VEcHggPT0gMCkgeworCQlpZiAoKGFkYXB0ZXItPlJlZ2lzdHJ5Rmxvd0NvbnRyb2wgPT0gVHhPbmx5KSB8fAorCQkgICAgKGFkYXB0ZXItPlJlZ2lzdHJ5Rmxvd0NvbnRyb2wgPT0gQm90aCkpIHsKKwkJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLAorCQkJCQkgICAgICBUUlVFUEhZX0JJVF9TRVQsIDQsIDExLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLAorCQkJCQkgICAgICBUUlVFUEhZX0JJVF9DTEVBUiwgNCwgMTEsIE5VTEwpOworCQl9CisKKwkJaWYgKGFkYXB0ZXItPlJlZ2lzdHJ5Rmxvd0NvbnRyb2wgPT0gQm90aCkgeworCQkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsCisJCQkJCSAgICAgIFRSVUVQSFlfQklUX1NFVCwgNCwgMTAsIE5VTEwpOworCQl9IGVsc2UgeworCQkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsCisJCQkJCSAgICAgIFRSVUVQSFlfQklUX0NMRUFSLCA0LCAxMCwgTlVMTCk7CisJCX0KKworCQkvKiBTZXQgdGhlIHBoeSB0byBhdXRvbmVnb3RpYXRpb24gKi8KKwkJRVQxMzEwX1BoeUF1dG9OZWcoYWRhcHRlciwgdHJ1ZSk7CisKKwkJLyogTk9URSAtIERvIHdlIG5lZWQgdGhpcz8gKi8KKwkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsIFRSVUVQSFlfQklUX1NFVCwgMCwgOSwgTlVMTCk7CisKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9IGVsc2UgeworCQlFVDEzMTBfUGh5QXV0b05lZyhhZGFwdGVyLCBmYWxzZSk7CisKKwkJLyogU2V0IHRvIHRoZSBjb3JyZWN0IGZvcmNlIG1vZGUuICovCisJCWlmIChhZGFwdGVyLT5BaUZvcmNlRHB4ICE9IDEpIHsKKwkJCWlmICgoYWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBUeE9ubHkpIHx8CisJCQkgICAgKGFkYXB0ZXItPlJlZ2lzdHJ5Rmxvd0NvbnRyb2wgPT0gQm90aCkpIHsKKwkJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJCSAgICAgIFRSVUVQSFlfQklUX1NFVCwgNCwgMTEsCisJCQkJCQkgICAgICBOVUxMKTsKKwkJCX0gZWxzZSB7CisJCQkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsCisJCQkJCQkgICAgICBUUlVFUEhZX0JJVF9DTEVBUiwgNCwgMTEsCisJCQkJCQkgICAgICBOVUxMKTsKKwkJCX0KKworCQkJaWYgKGFkYXB0ZXItPlJlZ2lzdHJ5Rmxvd0NvbnRyb2wgPT0gQm90aCkgeworCQkJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLAorCQkJCQkJICAgICAgVFJVRVBIWV9CSVRfU0VULCA0LCAxMCwKKwkJCQkJCSAgICAgIE5VTEwpOworCQkJfSBlbHNlIHsKKwkJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJCSAgICAgIFRSVUVQSFlfQklUX0NMRUFSLCA0LCAxMCwKKwkJCQkJCSAgICAgIE5VTEwpOworCQkJfQorCQl9IGVsc2UgeworCQkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsCisJCQkJCSAgICAgIFRSVUVQSFlfQklUX0NMRUFSLCA0LCAxMCwgTlVMTCk7CisJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJICAgICAgVFJVRVBIWV9CSVRfQ0xFQVIsIDQsIDExLCBOVUxMKTsKKwkJfQorCisJCXN3aXRjaCAoYWRhcHRlci0+QWlGb3JjZVNwZWVkKSB7CisJCWNhc2UgMTA6CisJCQlpZiAoYWRhcHRlci0+QWlGb3JjZURweCA9PSAxKSB7CisJCQkJVFBBTF9TZXRQaHkxMEhhbGZEdXBsZXgoYWRhcHRlcik7CisJCQl9IGVsc2UgaWYgKGFkYXB0ZXItPkFpRm9yY2VEcHggPT0gMikgeworCQkJCVRQQUxfU2V0UGh5MTBGdWxsRHVwbGV4KGFkYXB0ZXIpOworCQkJfSBlbHNlIHsKKwkJCQlUUEFMX1NldFBoeTEwRm9yY2UoYWRhcHRlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAxMDA6CisJCQlpZiAoYWRhcHRlci0+QWlGb3JjZURweCA9PSAxKSB7CisJCQkJVFBBTF9TZXRQaHkxMDBIYWxmRHVwbGV4KGFkYXB0ZXIpOworCQkJfSBlbHNlIGlmIChhZGFwdGVyLT5BaUZvcmNlRHB4ID09IDIpIHsKKwkJCQlUUEFMX1NldFBoeTEwMEZ1bGxEdXBsZXgoYWRhcHRlcik7CisJCQl9IGVsc2UgeworCQkJCVRQQUxfU2V0UGh5MTAwRm9yY2UoYWRhcHRlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAxMDAwOgorCQkJVFBBTF9TZXRQaHkxMDAwRnVsbER1cGxleChhZGFwdGVyKTsKKwkJCWJyZWFrOworCQl9CisKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9Cit9CisKK3ZvaWQgZXQxMzF4X01paV9jaGVjayhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkgICAgICBNSV9CTVNSX3QgYm1zciwgTUlfQk1TUl90IGJtc3JfaW50cykKK3sKKwl1aW50OF90IHVjTGlua1N0YXR1czsKKwl1aW50MzJfdCB1aUF1dG9OZWdTdGF0dXM7CisJdWludDMyX3QgdWlTcGVlZDsKKwl1aW50MzJfdCB1aUR1cGxleDsKKwl1aW50MzJfdCB1aU1kaU1kaXg7CisJdWludDMyX3QgdWlNYXN0ZXJTbGF2ZTsKKwl1aW50MzJfdCB1aVBvbGFyaXR5OworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCWlmIChibXNyX2ludHMuYml0cy5saW5rX3N0YXR1cykgeworCQlpZiAoYm1zci5iaXRzLmxpbmtfc3RhdHVzKSB7CisJCQlwQWRhcHRlci0+UG9NZ210LlRyYW5zUGh5Q29tYU1vZGVPbkJvb3QgPSAyMDsKKworCQkJLyogVXBkYXRlIG91ciBzdGF0ZSB2YXJpYWJsZXMgYW5kIGluZGljYXRlIHRoZQorCQkJICogY29ubmVjdGVkIHN0YXRlCisJCQkgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+TG9jaywgbG9ja2ZsYWdzKTsKKworCQkJcEFkYXB0ZXItPk1lZGlhU3RhdGUgPSBORVRJRl9TVEFUVVNfTUVESUFfQ09OTkVDVDsKKwkJCU1QX0NMRUFSX0ZMQUcocEFkYXB0ZXIsIGZNUF9BREFQVEVSX0xJTktfREVURUNUSU9OKTsKKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPkxvY2ssIGxvY2tmbGFncyk7CisKKwkJCS8qIERvbid0IGluZGljYXRlIHN0YXRlIGlmIHdlJ3JlIGluIGxvb3BiYWNrIG1vZGUgKi8KKwkJCWlmIChwQWRhcHRlci0+UmVnaXN0cnlQaHlMb29wYmsgPT0gZmFsc2UpIHsKKwkJCQluZXRpZl9jYXJyaWVyX29uKHBBZGFwdGVyLT5uZXRkZXYpOworCQkJfQorCQl9IGVsc2UgeworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJMaW5rIGRvd24gY2FibGUgcHJvYmxlbVxuIik7CisKKwkJCWlmIChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xME1CUFMpIHsKKwkJCQkvLyBOT1RFIC0gSXMgdGhlcmUgYSB3YXkgdG8gcXVlcnkgdGhpcyB3aXRob3V0IFRydWVQSFk/CisJCQkJLy8gJiYgVFJVX1F1ZXJ5Q29yZVR5cGUocEFkYXB0ZXItPmhUcnVlUGh5LCAwKSA9PSBFTUlfVFJVRVBIWV9BMTNPKSB7CisJCQkJdWludDE2X3QgUmVnaXN0ZXIxODsKKworCQkJCU1pUmVhZChwQWRhcHRlciwgMHgxMiwgJlJlZ2lzdGVyMTgpOworCQkJCU1pV3JpdGUocEFkYXB0ZXIsIDB4MTIsIFJlZ2lzdGVyMTggfCAweDQpOworCQkJCU1pV3JpdGUocEFkYXB0ZXIsIDB4MTAsIFJlZ2lzdGVyMTggfCAweDg0MDIpOworCQkJCU1pV3JpdGUocEFkYXB0ZXIsIDB4MTEsIFJlZ2lzdGVyMTggfCA1MTEpOworCQkJCU1pV3JpdGUocEFkYXB0ZXIsIDB4MTIsIFJlZ2lzdGVyMTgpOworCQkJfQorCisJCQkvKiBGb3IgdGhlIGZpcnN0IE4gc2Vjb25kcyBvZiBsaWZlLCB3ZSBhcmUgaW4gImxpbmsKKwkJCSAqIGRldGVjdGlvbiIgV2hlbiB3ZSBhcmUgaW4gdGhpcyBzdGF0ZSwgd2Ugc2hvdWxkCisJCQkgKiBvbmx5IHJlcG9ydCAiY29ubmVjdGVkIi4gV2hlbiB0aGUgTGlua0RldGVjdGlvbgorCQkJICogVGltZXIgZXhwaXJlcywgd2UgY2FuIHJlcG9ydCBkaXNjb25uZWN0ZWQgKGhhbmRsZWQKKwkJCSAqIGluIHRoZSBMaW5rRGV0ZWN0aW9uRFBDKS4KKwkJCSAqLworCQkJaWYgKChNUF9JU19GTEFHX0NMRUFSCisJCQkgICAgIChwQWRhcHRlciwgZk1QX0FEQVBURVJfTElOS19ERVRFQ1RJT04pKQorCQkJICAgIHx8IChwQWRhcHRlci0+TWVkaWFTdGF0ZSA9PQorCQkJCU5FVElGX1NUQVRVU19NRURJQV9ESVNDT05ORUNUKSkgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+TG9jaywgbG9ja2ZsYWdzKTsKKwkJCQlwQWRhcHRlci0+TWVkaWFTdGF0ZSA9CisJCQkJICAgIE5FVElGX1NUQVRVU19NRURJQV9ESVNDT05ORUNUOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5Mb2NrLAorCQkJCQkJICAgICAgIGxvY2tmbGFncyk7CisKKwkJCQkvKiBPbmx5IGluZGljYXRlIHN0YXRlIGlmIHdlJ3JlIGluIGxvb3BiYWNrCisJCQkJICogbW9kZQorCQkJCSAqLworCQkJCWlmIChwQWRhcHRlci0+UmVnaXN0cnlQaHlMb29wYmsgPT0gZmFsc2UpIHsKKwkJCQkJbmV0aWZfY2Fycmllcl9vZmYocEFkYXB0ZXItPm5ldGRldik7CisJCQkJfQorCQkJfQorCisJCQlwQWRhcHRlci0+dWlMaW5rU3BlZWQgPSAwOworCQkJcEFkYXB0ZXItPnVpRHVwbGV4TW9kZSA9IDA7CisKKwkJCS8qIEZyZWUgdGhlIHBhY2tldHMgYmVpbmcgYWN0aXZlbHkgc2VudCAmIHN0b3BwZWQgKi8KKwkJCWV0MTMxeF9mcmVlX2J1c3lfc2VuZF9wYWNrZXRzKHBBZGFwdGVyKTsKKworCQkJLyogUmUtaW5pdGlhbGl6ZSB0aGUgc2VuZCBzdHJ1Y3R1cmVzICovCisJCQlldDEzMXhfaW5pdF9zZW5kKHBBZGFwdGVyKTsKKworCQkJLyogUmVzZXQgdGhlIFJGRCBsaXN0IGFuZCByZS1zdGFydCBSVSAqLworCQkJZXQxMzF4X3Jlc2V0X3JlY3YocEFkYXB0ZXIpOworCisJCQkvKgorCQkJICogQnJpbmcgdGhlIGRldmljZSBiYWNrIHRvIHRoZSBzdGF0ZSBpdCB3YXMgZHVyaW5nCisJCQkgKiBpbml0IHByaW9yIHRvIGF1dG9uZWdvdGlhdGlvbiBiZWluZyBjb21wbGV0ZS4gVGhpcworCQkJICogd2F5LCB3aGVuIHdlIGdldCB0aGUgYXV0by1uZWcgY29tcGxldGUgaW50ZXJydXB0LAorCQkJICogd2UgY2FuIGNvbXBsZXRlIGluaXQgYnkgY2FsbGluZyBDb25maWdNYWNSRUdTMi4KKwkJCSAqLworCQkJZXQxMzF4X3NvZnRfcmVzZXQocEFkYXB0ZXIpOworCisJCQkvKiBTZXR1cCBFVDEzMTAgYXMgcGVyIHRoZSBkb2N1bWVudGF0aW9uICovCisJCQlldDEzMXhfYWRhcHRlcl9zZXR1cChwQWRhcHRlcik7CisKKwkJCS8qIFNldHVwIHRoZSBQSFkgaW50byBjb21hIG1vZGUgdW50aWwgdGhlIGNhYmxlIGlzCisJCQkgKiBwbHVnZ2VkIGJhY2sgaW4KKwkJCSAqLworCQkJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeVBoeUNvbWEgPT0gMSkgeworCQkJCUVuYWJsZVBoeUNvbWEocEFkYXB0ZXIpOworCQkJfQorCQl9CisJfQorCisJaWYgKGJtc3JfaW50cy5iaXRzLmF1dG9fbmVnX2NvbXBsZXRlIHx8CisJICAgICgocEFkYXB0ZXItPkFpRm9yY2VEcHggPT0gMykgJiYgKGJtc3JfaW50cy5iaXRzLmxpbmtfc3RhdHVzKSkpIHsKKwkJaWYgKGJtc3IuYml0cy5hdXRvX25lZ19jb21wbGV0ZSB8fCAocEFkYXB0ZXItPkFpRm9yY2VEcHggPT0gMykpIHsKKwkJCUVUMTMxMF9QaHlMaW5rU3RhdHVzKHBBZGFwdGVyLAorCQkJCQkgICAgICZ1Y0xpbmtTdGF0dXMsICZ1aUF1dG9OZWdTdGF0dXMsCisJCQkJCSAgICAgJnVpU3BlZWQsICZ1aUR1cGxleCwgJnVpTWRpTWRpeCwKKwkJCQkJICAgICAmdWlNYXN0ZXJTbGF2ZSwgJnVpUG9sYXJpdHkpOworCisJCQlwQWRhcHRlci0+dWlMaW5rU3BlZWQgPSB1aVNwZWVkOworCQkJcEFkYXB0ZXItPnVpRHVwbGV4TW9kZSA9IHVpRHVwbGV4OworCisJCQlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAicEFkYXB0ZXItPnVpTGlua1NwZWVkIDB4JTA0eCwgcEFkYXB0ZXItPnVpRHVwbGV4IDB4JTA4eFxuIiwKKwkJCQkgIHBBZGFwdGVyLT51aUxpbmtTcGVlZCwKKwkJCQkgIHBBZGFwdGVyLT51aUR1cGxleE1vZGUpOworCisJCQlwQWRhcHRlci0+UG9NZ210LlRyYW5zUGh5Q29tYU1vZGVPbkJvb3QgPSAyMDsKKworCQkJaWYgKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwTUJQUykgeworCQkJCS8vIE5PVEUgLSBJcyB0aGVyZSBhIHdheSB0byBxdWVyeSB0aGlzIHdpdGhvdXQgVHJ1ZVBIWT8KKwkJCQkvLyAmJiBUUlVfUXVlcnlDb3JlVHlwZShwQWRhcHRlci0+aFRydWVQaHksIDApID09IEVNSV9UUlVFUEhZX0ExM08pIHsKKwkJCQl1aW50MTZfdCBSZWdpc3RlcjE4OworCisJCQkJTWlSZWFkKHBBZGFwdGVyLCAweDEyLCAmUmVnaXN0ZXIxOCk7CisJCQkJTWlXcml0ZShwQWRhcHRlciwgMHgxMiwgUmVnaXN0ZXIxOCB8IDB4NCk7CisJCQkJTWlXcml0ZShwQWRhcHRlciwgMHgxMCwgUmVnaXN0ZXIxOCB8IDB4ODQwMik7CisJCQkJTWlXcml0ZShwQWRhcHRlciwgMHgxMSwgUmVnaXN0ZXIxOCB8IDUxMSk7CisJCQkJTWlXcml0ZShwQWRhcHRlciwgMHgxMiwgUmVnaXN0ZXIxOCk7CisJCQl9CisKKwkJCUNvbmZpZ0Zsb3dDb250cm9sKHBBZGFwdGVyKTsKKworCQkJaWYgKChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xMDAwTUJQUykgJiYKKwkJCSAgICAocEFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPiAyMDQ4KSkKKwkJCXsKKwkJCQlFVDEzMTBfUGh5QW5kT3JSZWcocEFkYXB0ZXIsIDB4MTYsIDB4Y2ZmZiwKKwkJCQkJCSAgIDB4MjAwMCk7CisJCQl9CisKKwkJCVNldFJ4RG1hVGltZXIocEFkYXB0ZXIpOworCQkJQ29uZmlnTUFDUmVnczIocEFkYXB0ZXIpOworCQl9CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBUUEFMX1NldFBoeTEwSGFsZkR1cGxleCAtIEZvcmNlIHRoZSBwaHkgaW50byAxMCBCYXNlIFQgSGFsZiBEdXBsZXggbW9kZS4KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBBbHNvIHNldHMgdGhlIE1BQyBzbyBpdCBpcyBzeW5jZCB1cCBwcm9wZXJseQorICovCit2b2lkIFRQQUxfU2V0UGh5MTBIYWxmRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFBvd2VyIGRvd24gUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMSk7CisKKwkvKiBGaXJzdCB3ZSBuZWVkIHRvIHR1cm4gb2ZmIGFsbCBvdGhlciBhZHZlcnRpc2VtZW50ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwkvKiBTZXQgb3VyIGFkdmVydGlzZSB2YWx1ZXMgYWNjb3JkaW5nbHkgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX0hBTEYpOworCisJLyogUG93ZXIgdXAgUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMCk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFRQQUxfU2V0UGh5MTBGdWxsRHVwbGV4IC0gRm9yY2UgdGhlIHBoeSBpbnRvIDEwIEJhc2UgVCBGdWxsIER1cGxleCBtb2RlLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIEFsc28gc2V0cyB0aGUgTUFDIHNvIGl0IGlzIHN5bmNkIHVwIHByb3Blcmx5CisgKi8KK3ZvaWQgVFBBTF9TZXRQaHkxMEZ1bGxEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUG93ZXIgZG93biBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAxKTsKKworCS8qIEZpcnN0IHdlIG5lZWQgdG8gdHVybiBvZmYgYWxsIG90aGVyIGFkdmVydGlzZW1lbnQgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCS8qIFNldCBvdXIgYWR2ZXJ0aXNlIHZhbHVlcyBhY2NvcmRpbmdseSAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTCk7CisKKwkvKiBQb3dlciB1cCBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAwKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogVFBBTF9TZXRQaHkxMEZvcmNlIC0gRm9yY2UgQmFzZS1UIEZEIG1vZGUgV0lUSE9VVCB1c2luZyBhdXRvbmVnb3RpYXRpb24KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBUUEFMX1NldFBoeTEwRm9yY2Uoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUG93ZXIgZG93biBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAxKTsKKworCS8qIERpc2FibGUgYXV0b25lZyAqLworCUVUMTMxMF9QaHlBdXRvTmVnKHBBZGFwdGVyLCBmYWxzZSk7CisKKwkvKiBEaXNhYmxlIGFsbCBhZHZlcnRpc2VtZW50ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwkvKiBGb3JjZSAxMCBNYnBzICovCisJRVQxMzEwX1BoeVNwZWVkU2VsZWN0KHBBZGFwdGVyLCBUUlVFUEhZX1NQRUVEXzEwTUJQUyk7CisKKwkvKiBGb3JjZSBGdWxsIGR1cGxleCAqLworCUVUMTMxMF9QaHlEdXBsZXhNb2RlKHBBZGFwdGVyLCBUUlVFUEhZX0RVUExFWF9GVUxMKTsKKworCS8qIFBvd2VyIHVwIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDApOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBUUEFMX1NldFBoeTEwMEhhbGZEdXBsZXggLSBGb3JjZSAxMDAgQmFzZSBUIEhhbGYgRHVwbGV4IG1vZGUuCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogQWxzbyBzZXRzIHRoZSBNQUMgc28gaXQgaXMgc3luY2QgdXAgcHJvcGVybHkuCisgKi8KK3ZvaWQgVFBBTF9TZXRQaHkxMDBIYWxmRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFBvd2VyIGRvd24gUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMSk7CisKKwkvKiBmaXJzdCB3ZSBuZWVkIHRvIHR1cm4gb2ZmIGFsbCBvdGhlciBhZHZlcnRpc2VtZW50ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCS8qIFNldCBvdXIgYWR2ZXJ0aXNlIHZhbHVlcyBhY2NvcmRpbmdseSAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX0hBTEYpOworCisJLyogU2V0IHNwZWVkICovCisJRVQxMzEwX1BoeVNwZWVkU2VsZWN0KHBBZGFwdGVyLCBUUlVFUEhZX1NQRUVEXzEwME1CUFMpOworCisJLyogUG93ZXIgdXAgUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMCk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFRQQUxfU2V0UGh5MTAwRnVsbER1cGxleCAtIEZvcmNlIDEwMCBCYXNlIFQgRnVsbCBEdXBsZXggbW9kZS4KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBBbHNvIHNldHMgdGhlIE1BQyBzbyBpdCBpcyBzeW5jZCB1cCBwcm9wZXJseQorICovCit2b2lkIFRQQUxfU2V0UGh5MTAwRnVsbER1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQb3dlciBkb3duIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDEpOworCisJLyogRmlyc3Qgd2UgbmVlZCB0byB0dXJuIG9mZiBhbGwgb3RoZXIgYWR2ZXJ0aXNlbWVudCAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwkvKiBTZXQgb3VyIGFkdmVydGlzZSB2YWx1ZXMgYWNjb3JkaW5nbHkgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9GVUxMKTsKKworCS8qIFBvd2VyIHVwIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDApOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBUUEFMX1NldFBoeTEwMEZvcmNlIC0gRm9yY2UgMTAwIEJhc2VUIEZEIG1vZGUgV0lUSE9VVCB1c2luZyBhdXRvbmVnb3RpYXRpb24KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBUUEFMX1NldFBoeTEwMEZvcmNlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFBvd2VyIGRvd24gUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMSk7CisKKwkvKiBEaXNhYmxlIGF1dG9uZWcgKi8KKwlFVDEzMTBfUGh5QXV0b05lZyhwQWRhcHRlciwgZmFsc2UpOworCisJLyogRGlzYWJsZSBhbGwgYWR2ZXJ0aXNlbWVudCAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJLyogRm9yY2UgMTAwIE1icHMgKi8KKwlFVDEzMTBfUGh5U3BlZWRTZWxlY3QocEFkYXB0ZXIsIFRSVUVQSFlfU1BFRURfMTAwTUJQUyk7CisKKwkvKiBGb3JjZSBGdWxsIGR1cGxleCAqLworCUVUMTMxMF9QaHlEdXBsZXhNb2RlKHBBZGFwdGVyLCBUUlVFUEhZX0RVUExFWF9GVUxMKTsKKworCS8qIFBvd2VyIHVwIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDApOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBUUEFMX1NldFBoeTEwMDBGdWxsRHVwbGV4IC0gRm9yY2UgMTAwMCBCYXNlIFQgRnVsbCBEdXBsZXggbW9kZQorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIEFsc28gc2V0cyB0aGUgTUFDIHNvIGl0IGlzIHN5bmNkIHVwIHByb3Blcmx5LgorICovCit2b2lkIFRQQUxfU2V0UGh5MTAwMEZ1bGxEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUG93ZXIgZG93biBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAxKTsKKworCS8qIGZpcnN0IHdlIG5lZWQgdG8gdHVybiBvZmYgYWxsIG90aGVyIGFkdmVydGlzZW1lbnQgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwkvKiBzZXQgb3VyIGFkdmVydGlzZSB2YWx1ZXMgYWNjb3JkaW5nbHkgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTCk7CisKKwkvKiBwb3dlciB1cCBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAwKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogVFBBTF9TZXRQaHlBdXRvTmVnIC0gU2V0IHBoeSB0byBhdXRvbmVnb3RpYXRpb24gbW9kZS4KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBUUEFMX1NldFBoeUF1dG9OZWcoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUG93ZXIgZG93biBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAxKTsKKworCS8qIFR1cm4gb24gYWR2ZXJ0aXNlbWVudCBvZiBhbGwgY2FwYWJpbGl0aWVzICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9CT1RIKTsKKworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX0JPVEgpOworCisJaWYgKHBBZGFwdGVyLT5EZXZpY2VJRCAhPSBFVDEzMVhfUENJX0RFVklDRV9JRF9GQVNUKSB7CisJCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9GVUxMKTsKKwl9IGVsc2UgeworCQlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisJfQorCisJLyogTWFrZSBzdXJlIGF1dG8tbmVnIGlzIE9OIChpdCBpcyBkaXNhYmxlZCBpbiBGT1JDRSBtb2RlcykgKi8KKwlFVDEzMTBfUGh5QXV0b05lZyhwQWRhcHRlciwgdHJ1ZSk7CisKKwkvKiBQb3dlciB1cCBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAwKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKworLyoKKyAqIFRoZSByb3V0aW5lcyB3aGljaCBmb2xsb3cgcHJvdmlkZSBsb3ctbGV2ZWwgYWNjZXNzIHRvIHRoZSBQSFksIGFuZCBhcmUgdXNlZAorICogcHJpbWFyaWx5IGJ5IHRoZSByb3V0aW5lcyBhYm92ZSAoYWx0aG91Z2ggdGhlcmUgYXJlIGEgZmV3IHBsYWNlcyBlbHNld2hlcmUKKyAqIGluIHRoZSBkcml2ZXIgd2hlcmUgdGhpcyBsZXZlbCBvZiBhY2Nlc3MgaXMgcmVxdWlyZWQpLgorICovCisKK3N0YXRpYyBjb25zdCB1aW50MTZfdCBDb25maWdQaHlbMjVdWzJdID0geworCS8qIFJlZyAgICAgIFZhbHVlICAgICAgUmVnaXN0ZXIgKi8KKwkvKiBBZGRyICAgICAgICAgICAgICAgICAgICAgICAgICovCisJezB4ODgwQiwgMHgwOTI2fSwJLyogQWZlSWZDcmVnNEIxMDAwTXNicyAqLworCXsweDg4MEMsIDB4MDkyNn0sCS8qIEFmZUlmQ3JlZzRCMTAwTXNicyAqLworCXsweDg4MEQsIDB4MDkyNn0sCS8qIEFmZUlmQ3JlZzRCMTBNc2JzICovCisKKwl7MHg4ODBFLCAweEI0RDN9LAkvKiBBZmVJZkNyZWc0QjEwMDBMc2JzICovCisJezB4ODgwRiwgMHhCNEQzfSwJLyogQWZlSWZDcmVnNEIxMDBMc2JzICovCisJezB4ODgxMCwgMHhCNEQzfSwJLyogQWZlSWZDcmVnNEIxMExzYnMgKi8KKworCXsweDg4MDUsIDB4QjAzRX0sCS8qIEFmZUlmQ3JlZzNCMTAwME1zYnMgKi8KKwl7MHg4ODA2LCAweEIwM0V9LAkvKiBBZmVJZkNyZWczQjEwME1zYnMgKi8KKwl7MHg4ODA3LCAweEZGMDB9LAkvKiBBZmVJZkNyZWczQjEwTXNicyAqLworCisJezB4ODgwOCwgMHhFMDkwfSwJLyogQWZlSWZDcmVnM0IxMDAwTHNicyAqLworCXsweDg4MDksIDB4RTExMH0sCS8qIEFmZUlmQ3JlZzNCMTAwTHNicyAqLworCXsweDg4MEEsIDB4MDAwMH0sCS8qIEFmZUlmQ3JlZzNCMTBMc2JzICovCisKKwl7MHgzMDBELCAxfSwJCS8qIERpc2FibGVOb3JtICovCisKKwl7MHgyODBDLCAweDAxODB9LAkvKiBMaW5rSG9sZEVuZCAqLworCisJezB4MUMyMSwgMHgwMDAyfSwJLyogQWxwaGFNICovCisKKwl7MHgzODIxLCA2fSwJCS8qIEZmZUxrZ1R4MCAqLworCXsweDM4MUQsIDF9LAkJLyogRmZlTGtnMWc0ICovCisJezB4MzgxRSwgMX0sCQkvKiBGZmVMa2cxZzUgKi8KKwl7MHgzODFGLCAxfSwJCS8qIEZmZUxrZzFnNiAqLworCXsweDM4MjAsIDF9LAkJLyogRmZlTGtnMWc3ICovCisKKwl7MHg4NDAyLCAweDAxRjB9LAkvKiBCdGluYWN0ICovCisJezB4ODAwRSwgMjB9LAkJLyogTGZ0cmFpblRpbWUgKi8KKwl7MHg4MDBGLCAyNH0sCQkvKiBEdmd1YXJkVGltZSAqLworCXsweDgwMTAsIDQ2fSwJCS8qIElkbGd1YXJkVGltZSAqLworCisJezAsIDB9CisKK307CisKKy8qIGNvbmRlbnNlZCB2ZXJzaW9uIG9mIHRoZSBwaHkgaW5pdGlhbGl6YXRpb24gcm91dGluZSAqLwordm9pZCBFVDEzMTBfUGh5SW5pdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXVpbnQxNl90IHVzRGF0YSwgdXNJbmRleDsKKworCWlmIChwQWRhcHRlciA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisKKwkvLyBnZXQgdGhlIGlkZW50aXR5IChhZ2FpbiA/KQorCU1pUmVhZChwQWRhcHRlciwgUEhZX0lEXzEsICZ1c0RhdGEpOworCU1pUmVhZChwQWRhcHRlciwgUEhZX0lEXzIsICZ1c0RhdGEpOworCisJLy8gd2hhdCBkb2VzIHRoaXMgZG8vYWNoaWV2ZSA/CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywgJnVzRGF0YSk7CS8vIHNob3VsZCByZWFkIDAwMDIKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywJMHgwMDA2KTsKKworCS8vIHJlYWQgbW9kZW0gcmVnaXN0ZXIgMDQwMiwgc2hvdWxkIEkgZG8gc29tZXRoaW5nIHdpdGggdGhlIHJldHVybiBkYXRhID8KKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfSU5ERVhfUkVHLCAweDA0MDIpOworCU1pUmVhZChwQWRhcHRlciwgUEhZX0RBVEFfUkVHLCAmdXNEYXRhKTsKKworCS8vIHdoYXQgZG9lcyB0aGlzIGRvL2FjaGlldmUgPworCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9NUEhZX0NPTlRST0xfUkVHLCAweDAwMDIpOworCisJLy8gZ2V0IHRoZSBpZGVudGl0eSAoYWdhaW4gPykKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9JRF8xLCAmdXNEYXRhKTsKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9JRF8yLCAmdXNEYXRhKTsKKworCS8vIHdoYXQgZG9lcyB0aGlzIGFjaGlldmUgPworCU1pUmVhZChwQWRhcHRlciwgUEhZX01QSFlfQ09OVFJPTF9SRUcsICZ1c0RhdGEpOwkvLyBzaG91bGQgcmVhZCAwMDAyCisJTWlXcml0ZShwQWRhcHRlciwgUEhZX01QSFlfQ09OVFJPTF9SRUcsIDB4MDAwNik7CisKKwkvLyByZWFkIG1vZGVtIHJlZ2lzdGVyIDA0MDIsIHNob3VsZCBJIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXR1cm4gZGF0YT8KKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfSU5ERVhfUkVHLCAweDA0MDIpOworCU1pUmVhZChwQWRhcHRlciwgUEhZX0RBVEFfUkVHLCAmdXNEYXRhKTsKKworCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9NUEhZX0NPTlRST0xfUkVHLCAweDAwMDIpOworCisJLy8gd2hhdCBkb2VzIHRoaXMgYWNoaWV2ZSAoc2hvdWxkIHJldHVybiAweDEwNDApCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgJnVzRGF0YSk7CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywgJnVzRGF0YSk7CS8vIHNob3VsZCByZWFkIDAwMDIKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgMHgxODQwKTsKKworCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9NUEhZX0NPTlRST0xfUkVHLCAweDAwMDcpOworCisJLy8gaGVyZSB0aGUgd3JpdGluZyBvZiB0aGUgYXJyYXkgc3RhcnRzLi4uLgorCXVzSW5kZXggPSAwOworCXdoaWxlIChDb25maWdQaHlbdXNJbmRleF1bMF0gIT0gMHgwMDAwKSB7CisJCS8vIHdyaXRlIHZhbHVlCisJCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9JTkRFWF9SRUcsIENvbmZpZ1BoeVt1c0luZGV4XVswXSk7CisJCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9EQVRBX1JFRywgQ29uZmlnUGh5W3VzSW5kZXhdWzFdKTsKKworCQkvLyByZWFkIGl0IGJhY2sKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0lOREVYX1JFRywgQ29uZmlnUGh5W3VzSW5kZXhdWzBdKTsKKwkJTWlSZWFkKHBBZGFwdGVyLCBQSFlfREFUQV9SRUcsICZ1c0RhdGEpOworCisJCS8vIGRvIGEgY2hlY2sgb24gdGhlIHZhbHVlIHJlYWQgYmFjayA/CisJCXVzSW5kZXgrKzsKKwl9CisJLy8gaGVyZSB0aGUgd3JpdGluZyBvZiB0aGUgYXJyYXkgZW5kcy4uLgorCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgJnVzRGF0YSk7CS8vIDB4MTg0MAorCU1pUmVhZChwQWRhcHRlciwgUEhZX01QSFlfQ09OVFJPTF9SRUcsICZ1c0RhdGEpOwkvLyBzaG91bGQgcmVhZCAwMDA3CisJTWlXcml0ZShwQWRhcHRlciwgUEhZX0NPTlRST0wsIDB4MTA0MCk7CisJTWlXcml0ZShwQWRhcHRlciwgUEhZX01QSFlfQ09OVFJPTF9SRUcsIDB4MDAwMik7Cit9CisKK3ZvaWQgRVQxMzEwX1BoeVJlc2V0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJTWlXcml0ZShwQWRhcHRlciwgUEhZX0NPTlRST0wsIDB4ODAwMCk7Cit9CisKK3ZvaWQgRVQxMzEwX1BoeVBvd2VyRG93bihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCBib29sIGRvd24pCit7CisJdWludDE2X3QgdXNEYXRhOworCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgJnVzRGF0YSk7CisKKwlpZiAoZG93biA9PSBmYWxzZSkgeworCQkvLyBQb3dlciBVUAorCQl1c0RhdGEgJj0gfjB4MDgwMDsKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0NPTlRST0wsIHVzRGF0YSk7CisJfSBlbHNlIHsKKwkJLy8gUG93ZXIgRE9XTgorCQl1c0RhdGEgfD0gMHgwODAwOworCQlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgdXNEYXRhKTsKKwl9Cit9CisKK3ZvaWQgRVQxMzEwX1BoeUF1dG9OZWcoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgYm9vbCBlbmFibGUpCit7CisJdWludDE2X3QgdXNEYXRhOworCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgJnVzRGF0YSk7CisKKwlpZiAoZW5hYmxlID09IHRydWUpIHsKKwkJLy8gQXV0b25lZ290aWF0aW9uIE9OCisJCXVzRGF0YSB8PSAweDEwMDA7CisJCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCB1c0RhdGEpOworCX0gZWxzZSB7CisJCS8vIEF1dG9uZWdvdGlhdGlvbiBPRkYKKwkJdXNEYXRhICY9IH4weDEwMDA7CisJCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCB1c0RhdGEpOworCX0KK30KKwordm9pZCBFVDEzMTBfUGh5RHVwbGV4TW9kZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCB1aW50MTZfdCBkdXBsZXgpCit7CisJdWludDE2X3QgdXNEYXRhOworCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgJnVzRGF0YSk7CisKKwlpZiAoZHVwbGV4ID09IFRSVUVQSFlfRFVQTEVYX0ZVTEwpIHsKKwkJLy8gU2V0IEZ1bGwgRHVwbGV4CisJCXVzRGF0YSB8PSAweDEwMDsKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0NPTlRST0wsIHVzRGF0YSk7CisJfSBlbHNlIHsKKwkJLy8gU2V0IEhhbGYgRHVwbGV4CisJCXVzRGF0YSAmPSB+MHgxMDA7CisJCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCB1c0RhdGEpOworCX0KK30KKwordm9pZCBFVDEzMTBfUGh5U3BlZWRTZWxlY3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgdWludDE2X3Qgc3BlZWQpCit7CisJdWludDE2X3QgdXNEYXRhOworCisJLy8gUmVhZCB0aGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXIKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAmdXNEYXRhKTsKKworCS8vIENsZWFyIGFsbCBTcGVlZCBzZXR0aW5ncyAoQml0cyA2LCAxMykKKwl1c0RhdGEgJj0gfjB4MjA0MDsKKworCS8vIFJlc2V0IHRoZSBzcGVlZCBiaXRzIGJhc2VkIG9uIHVzZXIgc2VsZWN0aW9uCisJc3dpdGNoIChzcGVlZCkgeworCWNhc2UgVFJVRVBIWV9TUEVFRF8xME1CUFM6CisJCS8vIEJpdHMgYWxyZWFkeSBjbGVhcmVkIGFib3ZlLCBkbyBub3RoaW5nCisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX1NQRUVEXzEwME1CUFM6CisJCS8vIDEwME0gPT0gU2V0IGJpdCAxMworCQl1c0RhdGEgfD0gMHgyMDAwOworCQlicmVhazsKKworCWNhc2UgVFJVRVBIWV9TUEVFRF8xMDAwTUJQUzoKKwlkZWZhdWx0OgorCQl1c0RhdGEgfD0gMHgwMDQwOworCQlicmVhazsKKwl9CisKKwkvLyBXcml0ZSBiYWNrIHRoZSBuZXcgc3BlZWQKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgdXNEYXRhKTsKK30KKwordm9pZCBFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsCisJCQkJICB1aW50MTZfdCBkdXBsZXgpCit7CisJdWludDE2X3QgdXNEYXRhOworCisJLy8gUmVhZCB0aGUgUEhZIDEwMDAgQmFzZS1UIENvbnRyb2wgUmVnaXN0ZXIKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV8xMDAwX0NPTlRST0wsICZ1c0RhdGEpOworCisJLy8gQ2xlYXIgQml0cyA4LDkKKwl1c0RhdGEgJj0gfjB4MDMwMDsKKworCXN3aXRjaCAoZHVwbGV4KSB7CisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORToKKwkJLy8gRHVwbGV4IGFscmVhZHkgY2xlYXJlZCwgZG8gbm90aGluZworCQlicmVhazsKKworCWNhc2UgVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEw6CisJCS8vIFNldCBCaXQgOQorCQl1c0RhdGEgfD0gMHgwMjAwOworCQlicmVhazsKKworCWNhc2UgVFJVRVBIWV9BRFZfRFVQTEVYX0hBTEY6CisJCS8vIFNldCBCaXQgOAorCQl1c0RhdGEgfD0gMHgwMTAwOworCQlicmVhazsKKworCWNhc2UgVFJVRVBIWV9BRFZfRFVQTEVYX0JPVEg6CisJZGVmYXVsdDoKKwkJdXNEYXRhIHw9IDB4MDMwMDsKKwkJYnJlYWs7CisJfQorCisJLy8gV3JpdGUgYmFjayBhZHZlcnRpc2VtZW50CisJTWlXcml0ZShwQWRhcHRlciwgUEhZXzEwMDBfQ09OVFJPTCwgdXNEYXRhKTsKK30KKwordm9pZCBFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwQmFzZVQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKKwkJCQkgdWludDE2X3QgZHVwbGV4KQoreworCXVpbnQxNl90IHVzRGF0YTsKKworCS8vIFJlYWQgdGhlIEF1dG9uZWdvdGlhdGlvbiBSZWdpc3RlciAoMTAvMTAwKQorCU1pUmVhZChwQWRhcHRlciwgUEhZX0FVVE9fQURWRVJUSVNFTUVOVCwgJnVzRGF0YSk7CisKKwkvLyBDbGVhciBiaXRzIDcsOAorCXVzRGF0YSAmPSB+MHgwMTgwOworCisJc3dpdGNoIChkdXBsZXgpIHsKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9OT05FOgorCQkvLyBEdXBsZXggYWxyZWFkeSBjbGVhcmVkLCBkbyBub3RoaW5nCisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTDoKKwkJLy8gU2V0IEJpdCA4CisJCXVzRGF0YSB8PSAweDAxMDA7CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfSEFMRjoKKwkJLy8gU2V0IEJpdCA3CisJCXVzRGF0YSB8PSAweDAwODA7CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfQk9USDoKKwlkZWZhdWx0OgorCQkvLyBTZXQgQml0cyA3LDgKKwkJdXNEYXRhIHw9IDB4MDE4MDsKKwkJYnJlYWs7CisJfQorCisJLy8gV3JpdGUgYmFjayBhZHZlcnRpc2VtZW50CisJTWlXcml0ZShwQWRhcHRlciwgUEhZX0FVVE9fQURWRVJUSVNFTUVOVCwgdXNEYXRhKTsKK30KKwordm9pZCBFVDEzMTBfUGh5QWR2ZXJ0aXNlMTBCYXNlVChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkJCXVpbnQxNl90IGR1cGxleCkKK3sKKwl1aW50MTZfdCB1c0RhdGE7CisKKwkvLyBSZWFkIHRoZSBBdXRvbmVnb3RpYXRpb24gUmVnaXN0ZXIgKDEwLzEwMCkKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9BVVRPX0FEVkVSVElTRU1FTlQsICZ1c0RhdGEpOworCisJLy8gQ2xlYXIgYml0cyA1LDYKKwl1c0RhdGEgJj0gfjB4MDA2MDsKKworCXN3aXRjaCAoZHVwbGV4KSB7CisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORToKKwkJLy8gRHVwbGV4IGFscmVhZHkgY2xlYXJlZCwgZG8gbm90aGluZworCQlicmVhazsKKworCWNhc2UgVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEw6CisJCS8vIFNldCBCaXQgNgorCQl1c0RhdGEgfD0gMHgwMDQwOworCQlicmVhazsKKworCWNhc2UgVFJVRVBIWV9BRFZfRFVQTEVYX0hBTEY6CisJCS8vIFNldCBCaXQgNQorCQl1c0RhdGEgfD0gMHgwMDIwOworCQlicmVhazsKKworCWNhc2UgVFJVRVBIWV9BRFZfRFVQTEVYX0JPVEg6CisJZGVmYXVsdDoKKwkJLy8gU2V0IEJpdHMgNSw2CisJCXVzRGF0YSB8PSAweDAwNjA7CisJCWJyZWFrOworCX0KKworCS8vIFdyaXRlIGJhY2sgYWR2ZXJ0aXNlbWVudAorCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9BVVRPX0FEVkVSVElTRU1FTlQsIHVzRGF0YSk7Cit9CisKK3ZvaWQgRVQxMzEwX1BoeUxpbmtTdGF0dXMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKKwkJCSAgdWludDhfdCAqdWNMaW5rU3RhdHVzLAorCQkJICB1aW50MzJfdCAqdWlBdXRvTmVnLAorCQkJICB1aW50MzJfdCAqdWlMaW5rU3BlZWQsCisJCQkgIHVpbnQzMl90ICp1aUR1cGxleE1vZGUsCisJCQkgIHVpbnQzMl90ICp1aU1kaU1kaXgsCisJCQkgIHVpbnQzMl90ICp1aU1hc3RlclNsYXZlLCB1aW50MzJfdCAqdWlQb2xhcml0eSkKK3sKKwl1aW50MTZfdCB1c01pU3RhdHVzID0gMDsKKwl1aW50MTZfdCB1czEwMDBCYXNlVCA9IDA7CisJdWludDE2X3QgdXNWbWlQaHlTdGF0dXMgPSAwOworCXVpbnQxNl90IHVzQ29udHJvbCA9IDA7CisKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9TVEFUVVMsICZ1c01pU3RhdHVzKTsKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV8xMDAwX1NUQVRVUywgJnVzMTAwMEJhc2VUKTsKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9QSFlfU1RBVFVTLCAmdXNWbWlQaHlTdGF0dXMpOworCU1pUmVhZChwQWRhcHRlciwgUEhZX0NPTlRST0wsICZ1c0NvbnRyb2wpOworCisJaWYgKHVjTGlua1N0YXR1cykgeworCQkqdWNMaW5rU3RhdHVzID0KKwkJICAgICh1bnNpZ25lZCBjaGFyKSgodXNWbWlQaHlTdGF0dXMgJiAweDAwNDApID8gMSA6IDApOworCX0KKworCWlmICh1aUF1dG9OZWcpIHsKKwkJKnVpQXV0b05lZyA9CisJCSAgICAodXNDb250cm9sICYgMHgxMDAwKSA/ICgodXNWbWlQaHlTdGF0dXMgJiAweDAwMjApID8KKwkJCQkJICAgIFRSVUVQSFlfQU5FR19DT01QTEVURSA6CisJCQkJCSAgICBUUlVFUEhZX0FORUdfTk9UX0NPTVBMRVRFKSA6CisJCSAgICBUUlVFUEhZX0FORUdfRElTQUJMRUQ7CisJfQorCisJaWYgKHVpTGlua1NwZWVkKSB7CisJCSp1aUxpbmtTcGVlZCA9ICh1c1ZtaVBoeVN0YXR1cyAmIDB4MDMwMCkgPj4gODsKKwl9CisKKwlpZiAodWlEdXBsZXhNb2RlKSB7CisJCSp1aUR1cGxleE1vZGUgPSAodXNWbWlQaHlTdGF0dXMgJiAweDAwODApID4+IDc7CisJfQorCisJaWYgKHVpTWRpTWRpeCkgeworCQkvKiBOT1RFOiBOZWVkIHRvIGNvbXBsZXRlIHRoaXMgKi8KKwkJKnVpTWRpTWRpeCA9IDA7CisJfQorCisJaWYgKHVpTWFzdGVyU2xhdmUpIHsKKwkJKnVpTWFzdGVyU2xhdmUgPQorCQkgICAgKHVzMTAwMEJhc2VUICYgMHg0MDAwKSA/IFRSVUVQSFlfQ0ZHX01BU1RFUiA6CisJCSAgICBUUlVFUEhZX0NGR19TTEFWRTsKKwl9CisKKwlpZiAodWlQb2xhcml0eSkgeworCQkqdWlQb2xhcml0eSA9CisJCSAgICAodXNWbWlQaHlTdGF0dXMgJiAweDA0MDApID8gVFJVRVBIWV9QT0xBUklUWV9JTlZFUlRFRCA6CisJCSAgICBUUlVFUEhZX1BPTEFSSVRZX05PUk1BTDsKKwl9Cit9CisKK3ZvaWQgRVQxMzEwX1BoeUFuZE9yUmVnKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsCisJCQl1aW50MTZfdCByZWdudW0sIHVpbnQxNl90IGFuZE1hc2ssIHVpbnQxNl90IG9yTWFzaykKK3sKKwl1aW50MTZfdCByZWc7CisKKwkvLyBSZWFkIHRoZSByZXF1ZXN0ZWQgcmVnaXN0ZXIKKwlNaVJlYWQocEFkYXB0ZXIsIHJlZ251bSwgJnJlZyk7CisKKwkvLyBBcHBseSB0aGUgQU5EIG1hc2sKKwlyZWcgJj0gYW5kTWFzazsKKworCS8vIEFwcGx5IHRoZSBPUiBtYXNrCisJcmVnIHw9IG9yTWFzazsKKworCS8vIFdyaXRlIHRoZSB2YWx1ZSBiYWNrIHRvIHRoZSByZWdpc3RlcgorCU1pV3JpdGUocEFkYXB0ZXIsIHJlZ251bSwgcmVnKTsKK30KKwordm9pZCBFVDEzMTBfUGh5QWNjZXNzTWlCaXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgdWludDE2X3QgYWN0aW9uLAorCQkJICAgdWludDE2X3QgcmVnbnVtLCB1aW50MTZfdCBiaXRudW0sIHVpbnQ4X3QgKnZhbHVlKQoreworCXVpbnQxNl90IHJlZzsKKwl1aW50MTZfdCBtYXNrID0gMDsKKworCS8vIENyZWF0ZSBhIG1hc2sgdG8gaXNvbGF0ZSB0aGUgcmVxdWVzdGVkIGJpdAorCW1hc2sgPSAweDAwMDEgPDwgYml0bnVtOworCisJLy8gUmVhZCB0aGUgcmVxdWVzdGVkIHJlZ2lzdGVyCisJTWlSZWFkKHBBZGFwdGVyLCByZWdudW0sICZyZWcpOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIFRSVUVQSFlfQklUX1JFQUQ6CisJCWlmICh2YWx1ZSAhPSBOVUxMKSB7CisJCQkqdmFsdWUgPSAocmVnICYgbWFzaykgPj4gYml0bnVtOworCQl9CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0JJVF9TRVQ6CisJCXJlZyB8PSBtYXNrOworCQlNaVdyaXRlKHBBZGFwdGVyLCByZWdudW0sIHJlZyk7CisJCWJyZWFrOworCisJY2FzZSBUUlVFUEhZX0JJVF9DTEVBUjoKKwkJcmVnICY9IH5tYXNrOworCQlNaVdyaXRlKHBBZGFwdGVyLCByZWdudW0sIHJlZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjI0Y2JiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmgKQEAgLTAsMCArMSw5MTAgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX3BoeS5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gcGVydGFpbmluZyB0byB0aGUKKyAqICAgICAgICAgICAgICAgIFBIWS4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfRVQxMzEwX1BIWV9IXworI2RlZmluZSBfRVQxMzEwX1BIWV9IXworCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisKKyNkZWZpbmUgVFJVRVBIWV9TVUNDRVNTIDAKKyNkZWZpbmUgVFJVRVBIWV9GQUlMVVJFIDEKK3R5cGVkZWYgdm9pZCAqVFJVRVBIWV9IQU5ETEU7Cit0eXBlZGVmIHZvaWQgKlRSVUVQSFlfUExBVEZPUk1fSEFORExFOwordHlwZWRlZiB2b2lkICpUUlVFUEhZX09TQUxfSEFORExFOworCisvKiBNSSBSZWdpc3RlciBBZGRyZXNzZXMgKi8KKyNkZWZpbmUgTUlfQ09OVFJPTF9SRUcgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNSV9TVEFUVVNfUkVHICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1JX1BIWV9JREVOVElGSUVSXzFfUkVHICAgICAgICAgICAgIDIKKyNkZWZpbmUgTUlfUEhZX0lERU5USUZJRVJfMl9SRUcgICAgICAgICAgICAgMworI2RlZmluZSBNSV9BVVRPTkVHX0FEVkVSVElTRU1FTlRfUkVHICAgICAgICA0CisjZGVmaW5lIE1JX0FVVE9ORUdfTElOS19QQVJUTkVSX0FCSUxJVFlfUkVHIDUKKyNkZWZpbmUgTUlfQVVUT05FR19FWFBBTlNJT05fUkVHICAgICAgICAgICAgNgorI2RlZmluZSBNSV9BVVRPTkVHX05FWFRfUEFHRV9UUkFOU01JVF9SRUcgICA3CisjZGVmaW5lIE1JX0xJTktfUEFSVE5FUl9ORVhUX1BBR0VfUkVHICAgICAgIDgKKyNkZWZpbmUgTUlfMTAwMEJBU0VUX0NPTlRST0xfUkVHICAgICAgICAgICAgOQorI2RlZmluZSBNSV8xMDAwQkFTRVRfU1RBVFVTX1JFRyAgICAgICAgICAgICAxMAorI2RlZmluZSBNSV9SRVNFUlZFRDExX1JFRyAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBNSV9SRVNFUlZFRDEyX1JFRyAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBNSV9SRVNFUlZFRDEzX1JFRyAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBNSV9SRVNFUlZFRDE0X1JFRyAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBNSV9FWFRFTkRFRF9TVEFUVVNfUkVHICAgICAgICAgICAgICAxNQorCisvKiBWTUkgUmVnaXN0ZXIgQWRkcmVzc2VzICovCisjZGVmaW5lIFZNSV9SRVNFUlZFRDE2X1JFRyAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFZNSV9SRVNFUlZFRDE3X1JFRyAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIFZNSV9SRVNFUlZFRDE4X1JFRyAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIFZNSV9MT09QQkFDS19DT05UUk9MX1JFRyAgICAgICAgICAgIDE5CisjZGVmaW5lIFZNSV9SRVNFUlZFRDIwX1JFRyAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFZNSV9NSV9DT05UUk9MX1JFRyAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIFZNSV9QSFlfQ09ORklHVVJBVElPTl9SRUcgICAgICAgICAgIDIyCisjZGVmaW5lIFZNSV9QSFlfQ09OVFJPTF9SRUcgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIFZNSV9JTlRFUlJVUFRfTUFTS19SRUcgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFZNSV9JTlRFUlJVUFRfU1RBVFVTX1JFRyAgICAgICAgICAgIDI1CisjZGVmaW5lIFZNSV9QSFlfU1RBVFVTX1JFRyAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIFZNSV9MRURfQ09OVFJPTF8xX1JFRyAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIFZNSV9MRURfQ09OVFJPTF8yX1JFRyAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIFZNSV9SRVNFUlZFRDI5X1JFRyAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIFZNSV9SRVNFUlZFRDMwX1JFRyAgICAgICAgICAgICAgICAgIDMwCisjZGVmaW5lIFZNSV9SRVNFUlZFRDMxX1JFRyAgICAgICAgICAgICAgICAgIDMxCisKKy8qIFBIWSBSZWdpc3RlciBNYXBwaW5nKE1JKSBNYW5hZ2VtZW50IEludGVyZmFjZSBSZWdzICovCit0eXBlZGVmIHN0cnVjdCBfTUlfUkVHU190IHsKKwl1OCBibWNyOwkJLy8gQmFzaWMgbW9kZSBjb250cm9sIHJlZyhSZWcgMHgwMCkKKwl1OCBibXNyOwkJLy8gQmFzaWMgbW9kZSBzdGF0dXMgcmVnKFJlZyAweDAxKQorCXU4IGlkcjE7CQkvLyBQaHkgaWRlbnRpZmllciByZWcgMShSZWcgMHgwMikKKwl1OCBpZHIyOwkJLy8gUGh5IGlkZW50aWZpZXIgcmVnIDIoUmVnIDB4MDMpCisJdTggYW5hcjsJCS8vIEF1dG8tTmVnb3RpYXRpb24gYWR2ZXJ0aXNlbWVudChSZWcgMHgwNCkKKwl1OCBhbmxwYXI7CQkvLyBBdXRvLU5lZ290aWF0aW9uIGxpbmsgUGFydG5lciBBYmlsaXR5KFJlZyAweDA1KQorCXU4IGFuZXI7CQkvLyBBdXRvLU5lZ290aWF0aW9uIGV4cGFuc2lvbiByZWcoUmVnIDB4MDYpCisJdTggYW5ucHRyOwkJLy8gQXV0by1OZWdvdGlhdGlvbiBuZXh0IHBhZ2UgdHJhbnNtaXQgcmVnKFJlZyAweDA3KQorCXU4IGxwbnByOwkJLy8gbGluayBwYXJ0bmVyIG5leHQgcGFnZSByZWcoUmVnIDB4MDgpCisJdTggZ2NyOwkJLy8gR2lnYWJpdCBiYXNpYyBtb2RlIGNvbnRyb2wgcmVnKFJlZyAweDA5KQorCXU4IGdzcjsJCS8vIEdpZ2FiaXQgYmFzaWMgbW9kZSBzdGF0dXMgcmVnKFJlZyAweDBBKQorCXU4IG1pX3JlczFbNF07CS8vIEZ1dHVyZSB1c2UgYnkgTUkgd29ya2luZyBncm91cChSZWcgMHgwQiAtIDB4MEUpCisJdTggZXNyOwkJLy8gRXh0ZW5kZWQgc3RhdHVzIHJlZyhSZWcgMHgwRikKKwl1OCBtaV9yZXMyWzNdOwkvLyBGdXR1cmUgdXNlIGJ5IE1JIHdvcmtpbmcgZ3JvdXAoUmVnIDB4MTAgLSAweDEyKQorCXU4IGxvb3BfY3RsOwkvLyBMb29wYmFjayBDb250cm9sIFJlZyhSZWcgMHgxMykKKwl1OCBtaV9yZXMzOwkvLyBGdXR1cmUgdXNlIGJ5IE1JIHdvcmtpbmcgZ3JvdXAoUmVnIDB4MTQpCisJdTggbWNyOwkJLy8gTUkgQ29udHJvbCBSZWcoUmVnIDB4MTUpCisJdTggcGNyOwkJLy8gQ29uZmlndXJhdGlvbiBSZWcoUmVnIDB4MTYpCisJdTggcGh5X2N0bDsJLy8gUEhZIENvbnRyb2wgUmVnKFJlZyAweDE3KQorCXU4IGltcjsJCS8vIEludGVycnVwdCBNYXNrIFJlZyhSZWcgMHgxOCkKKwl1OCBpc3I7CQkvLyBJbnRlcnJ1cHQgU3RhdHVzIFJlZyhSZWcgMHgxOSkKKwl1OCBwc3I7CQkvLyBQSFkgU3RhdHVzIFJlZyhSZWcgMHgxQSkKKwl1OCBsY3IxOwkJLy8gTEVEIENvbnRyb2wgMSBSZWcoUmVnIDB4MUIpCisJdTggbGNyMjsJCS8vIExFRCBDb250cm9sIDIgUmVnKFJlZyAweDFDKQorCXU4IG1pX3JlczRbM107CS8vIEZ1dHVyZSB1c2UgYnkgTUkgd29ya2luZyBncm91cChSZWcgMHgxRCAtIDB4MUYpCit9IE1JX1JFR1NfdCwgKlBNSV9SRUdTX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDA6IEJhc2ljIG1vZGUgY29udHJvbCByZWdpc3RlciAqLwordHlwZWRlZiB1bmlvbiBfTUlfQk1DUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiByZXNldDoxOwkJLy8gYml0IDE1CisJCXUxNiBsb29wYmFjazoxOwkJLy8gYml0IDE0CisJCXUxNiBzcGVlZF9zZWw6MTsJCS8vIGJpdCAxMworCQl1MTYgZW5hYmxlX2F1dG9uZWc6MTsJLy8gYml0IDEyCisJCXUxNiBwb3dlcl9kb3duOjE7CQkvLyBiaXQgMTEKKwkJdTE2IGlzb2xhdGU6MTsJCS8vIGJpdCAxMAorCQl1MTYgcmVzdGFydF9hdXRvbmVnOjE7CS8vIGJpdCA5CisJCXUxNiBkdXBsZXhfbW9kZToxOwkJLy8gYml0IDgKKwkJdTE2IGNvbF90ZXN0OjE7CQkvLyBiaXQgNworCQl1MTYgc3BlZWRfMTAwMF9zZWw6MTsJLy8gYml0IDYKKwkJdTE2IHJlczE6NjsJCS8vIGJpdHMgMC01CisjZWxzZQorCQl1MTYgcmVzMTo2OwkJLy8gYml0cyAwLTUKKwkJdTE2IHNwZWVkXzEwMDBfc2VsOjE7CS8vIGJpdCA2CisJCXUxNiBjb2xfdGVzdDoxOwkJLy8gYml0IDcKKwkJdTE2IGR1cGxleF9tb2RlOjE7CQkvLyBiaXQgOAorCQl1MTYgcmVzdGFydF9hdXRvbmVnOjE7CS8vIGJpdCA5CisJCXUxNiBpc29sYXRlOjE7CQkvLyBiaXQgMTAKKwkJdTE2IHBvd2VyX2Rvd246MTsJCS8vIGJpdCAxMQorCQl1MTYgZW5hYmxlX2F1dG9uZWc6MTsJLy8gYml0IDEyCisJCXUxNiBzcGVlZF9zZWw6MTsJCS8vIGJpdCAxMworCQl1MTYgbG9vcGJhY2s6MTsJCS8vIGJpdCAxNAorCQl1MTYgcmVzZXQ6MTsJCS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9CTUNSX3QsICpQTUlfQk1DUl90OworCisvKiBNSSBSZWdpc3RlciAxOiAgQmFzaWMgbW9kZSBzdGF0dXMgcmVnaXN0ZXIgKi8KK3R5cGVkZWYgdW5pb24gX01JX0JNU1JfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgbGlua18xMDBUNDoxOwkJLy8gYml0IDE1CisJCXUxNiBsaW5rXzEwMGZkeDoxOwkJLy8gYml0IDE0CisJCXUxNiBsaW5rXzEwMGhkeDoxOwkJLy8gYml0IDEzCisJCXUxNiBsaW5rXzEwZmR4OjE7CQkvLyBiaXQgMTIKKwkJdTE2IGxpbmtfMTBoZHg6MTsJCS8vIGJpdCAxMQorCQl1MTYgbGlua18xMDBUMmZkeDoxOwkvLyBiaXQgMTAKKwkJdTE2IGxpbmtfMTAwVDJoZHg6MTsJLy8gYml0IDkKKwkJdTE2IGV4dGVuZF9zdGF0dXM6MTsJLy8gYml0IDgKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCA3CisJCXUxNiBwcmVhbWJsZV9zdXByZXNzOjE7CS8vIGJpdCA2CisJCXUxNiBhdXRvX25lZ19jb21wbGV0ZToxOwkvLyBiaXQgNQorCQl1MTYgcmVtb3RlX2ZhdWx0OjE7CS8vIGJpdCA0CisJCXUxNiBhdXRvX25lZ19hYmxlOjE7CS8vIGJpdCAzCisJCXUxNiBsaW5rX3N0YXR1czoxOwkJLy8gYml0IDIKKwkJdTE2IGphYmJlcl9kZXRlY3Q6MTsJLy8gYml0IDEKKwkJdTE2IGV4dF9jYXA6MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MTYgZXh0X2NhcDoxOwkJLy8gYml0IDAKKwkJdTE2IGphYmJlcl9kZXRlY3Q6MTsJLy8gYml0IDEKKwkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgMgorCQl1MTYgYXV0b19uZWdfYWJsZToxOwkvLyBiaXQgMworCQl1MTYgcmVtb3RlX2ZhdWx0OjE7CS8vIGJpdCA0CisJCXUxNiBhdXRvX25lZ19jb21wbGV0ZToxOwkvLyBiaXQgNQorCQl1MTYgcHJlYW1ibGVfc3VwcmVzczoxOwkvLyBiaXQgNgorCQl1MTYgcmVzMToxOwkJLy8gYml0IDcKKwkJdTE2IGV4dGVuZF9zdGF0dXM6MTsJLy8gYml0IDgKKwkJdTE2IGxpbmtfMTAwVDJoZHg6MTsJLy8gYml0IDkKKwkJdTE2IGxpbmtfMTAwVDJmZHg6MTsJLy8gYml0IDEwCisJCXUxNiBsaW5rXzEwaGR4OjE7CQkvLyBiaXQgMTEKKwkJdTE2IGxpbmtfMTBmZHg6MTsJCS8vIGJpdCAxMgorCQl1MTYgbGlua18xMDBoZHg6MTsJCS8vIGJpdCAxMworCQl1MTYgbGlua18xMDBmZHg6MTsJCS8vIGJpdCAxNAorCQl1MTYgbGlua18xMDBUNDoxOwkJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0JNU1JfdCwgKlBNSV9CTVNSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDI6IFBoeXNpY2FsIElkZW50aWZpZXIgMSAqLwordHlwZWRlZiB1bmlvbiBfTUlfSURSMV90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKwkJdTE2IGllZWVfYWRkcmVzczoxNjsJLy8gMHgwMjgyIGRlZmF1bHQoYml0cyAwLTE1KQorCX0gYml0czsKK30gTUlfSURSMV90LCAqUE1JX0lEUjFfdDsKKworLyogTUkgUmVnaXN0ZXIgMzogUGh5c2ljYWwgSWRlbnRpZmllciAyICovCit0eXBlZGVmIHVuaW9uIF9NSV9JRFIyX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IGllZWVfYWRkcmVzczo2OwkvLyAxMTExMDAgZGVmYXVsdChiaXRzIDEwLTE1KQorCQl1MTYgbW9kZWxfbm86NjsJCS8vIDAwMDAwMSBkZWZhdWx0KGJpdHMgNC05KQorCQl1MTYgcmV2X25vOjQ7CQkvLyAwMDEwICAgZGVmYXVsdChiaXRzIDAtMykKKyNlbHNlCisJCXUxNiByZXZfbm86NDsJCS8vIDAwMTAgICBkZWZhdWx0KGJpdHMgMC0zKQorCQl1MTYgbW9kZWxfbm86NjsJCS8vIDAwMDAwMSBkZWZhdWx0KGJpdHMgNC05KQorCQl1MTYgaWVlZV9hZGRyZXNzOjY7CS8vIDExMTEwMCBkZWZhdWx0KGJpdHMgMTAtMTUpCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0lEUjJfdCwgKlBNSV9JRFIyX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDQ6IEF1dG8tbmVnb3RpYXRpb24gYWR2ZXJ0aXNlbWVudCByZWdpc3RlciAqLwordHlwZWRlZiB1bmlvbiBfTUlfQU5BUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBucF9pbmRpY2F0aW9uOjE7CS8vIGJpdCAxNQorCQl1MTYgcmVzMjoxOwkJLy8gYml0IDE0CisJCXUxNiByZW1vdGVfZmF1bHQ6MTsJLy8gYml0IDEzCisJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTIKKwkJdTE2IGNhcF9hc21wYXVzZToxOwkvLyBiaXQgMTEKKwkJdTE2IGNhcF9wYXVzZToxOwkJLy8gYml0IDEwCisJCXUxNiBjYXBfMTAwVDQ6MTsJCS8vIGJpdCA5CisJCXUxNiBjYXBfMTAwZmR4OjE7CQkvLyBiaXQgOAorCQl1MTYgY2FwXzEwMGhkeDoxOwkJLy8gYml0IDcKKwkJdTE2IGNhcF8xMGZkeDoxOwkJLy8gYml0IDYKKwkJdTE2IGNhcF8xMGhkeDoxOwkJLy8gYml0IDUKKwkJdTE2IHNlbGVjdG9yOjU7CQkvLyBiaXRzIDAtNAorI2Vsc2UKKwkJdTE2IHNlbGVjdG9yOjU7CQkvLyBiaXRzIDAtNAorCQl1MTYgY2FwXzEwaGR4OjE7CQkvLyBiaXQgNQorCQl1MTYgY2FwXzEwZmR4OjE7CQkvLyBiaXQgNgorCQl1MTYgY2FwXzEwMGhkeDoxOwkJLy8gYml0IDcKKwkJdTE2IGNhcF8xMDBmZHg6MTsJCS8vIGJpdCA4CisJCXUxNiBjYXBfMTAwVDQ6MTsJCS8vIGJpdCA5CisJCXUxNiBjYXBfcGF1c2U6MTsJCS8vIGJpdCAxMAorCQl1MTYgY2FwX2FzbXBhdXNlOjE7CS8vIGJpdCAxMQorCQl1MTYgcmVzMToxOwkJLy8gYml0IDEyCisJCXUxNiByZW1vdGVfZmF1bHQ6MTsJLy8gYml0IDEzCisJCXUxNiByZXMyOjE7CQkvLyBiaXQgMTQKKwkJdTE2IG5wX2luZGljYXRpb246MTsJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0FOQVJfdCwgKlBNSV9BTkFSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDU6IEF1dG8tbmVnb3RpYXRpb24gbGluayBwYXJ0bmVyIGFkdmVydGlzZW1lbnQgcmVnaXN0ZXIgKi8KK3R5cGVkZWYgc3RydWN0IF9NSV9BTkxQQVJfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgbnBfaW5kaWNhdGlvbjoxOwkvLyBiaXQgMTUKKwkJdTE2IGFja25vd2xlZGdlOjE7CQkvLyBiaXQgMTQKKwkJdTE2IHJlbW90ZV9mYXVsdDoxOwkvLyBiaXQgMTMKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxMgorCQl1MTYgY2FwX2FzbXBhdXNlOjE7CS8vIGJpdCAxMQorCQl1MTYgY2FwX3BhdXNlOjE7CQkvLyBiaXQgMTAKKwkJdTE2IGNhcF8xMDBUNDoxOwkJLy8gYml0IDkKKwkJdTE2IGNhcF8xMDBmZHg6MTsJCS8vIGJpdCA4CisJCXUxNiBjYXBfMTAwaGR4OjE7CQkvLyBiaXQgNworCQl1MTYgY2FwXzEwZmR4OjE7CQkvLyBiaXQgNgorCQl1MTYgY2FwXzEwaGR4OjE7CQkvLyBiaXQgNQorCQl1MTYgc2VsZWN0b3I6NTsJCS8vIGJpdHMgMC00CisjZWxzZQorCQl1MTYgc2VsZWN0b3I6NTsJCS8vIGJpdHMgMC00CisJCXUxNiBjYXBfMTBoZHg6MTsJCS8vIGJpdCA1CisJCXUxNiBjYXBfMTBmZHg6MTsJCS8vIGJpdCA2CisJCXUxNiBjYXBfMTAwaGR4OjE7CQkvLyBiaXQgNworCQl1MTYgY2FwXzEwMGZkeDoxOwkJLy8gYml0IDgKKwkJdTE2IGNhcF8xMDBUNDoxOwkJLy8gYml0IDkKKwkJdTE2IGNhcF9wYXVzZToxOwkJLy8gYml0IDEwCisJCXUxNiBjYXBfYXNtcGF1c2U6MTsJLy8gYml0IDExCisJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTIKKwkJdTE2IHJlbW90ZV9mYXVsdDoxOwkvLyBiaXQgMTMKKwkJdTE2IGFja25vd2xlZGdlOjE7CQkvLyBiaXQgMTQKKwkJdTE2IG5wX2luZGljYXRpb246MTsJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0FOTFBBUl90LCAqUE1JX0FOTFBBUl90OworCisvKiBNSSBSZWdpc3RlciA2OiBBdXRvLW5lZ290aWF0aW9uIGV4cGFuc2lvbiByZWdpc3RlciAqLwordHlwZWRlZiB1bmlvbiBfTUlfQU5FUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiByZXM6MTE7CS8vIGJpdHMgNS0xNQorCQl1MTYgcGRmOjE7CQkvLyBiaXQgNAorCQl1MTYgbHBfbnBfYWJsZToxOwkvLyBiaXQgMworCQl1MTYgbnBfYWJsZToxOwkvLyBiaXQgMgorCQl1MTYgcGFnZV9yeDoxOwkvLyBiaXQgMQorCQl1MTYgbHBfYW5fYWJsZToxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTE2IGxwX2FuX2FibGU6MTsJLy8gYml0IDAKKwkJdTE2IHBhZ2Vfcng6MTsJLy8gYml0IDEKKwkJdTE2IG5wX2FibGU6MTsJLy8gYml0IDIKKwkJdTE2IGxwX25wX2FibGU6MTsJLy8gYml0IDMKKwkJdTE2IHBkZjoxOwkJLy8gYml0IDQKKwkJdTE2IHJlczoxMTsJLy8gYml0cyA1LTE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0FORVJfdCwgKlBNSV9BTkVSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDc6IEF1dG8tbmVnb3RpYXRpb24gbmV4dCBwYWdlIHRyYW5zbWl0IHJlZygweDA3KSAqLwordHlwZWRlZiB1bmlvbiBfTUlfQU5OUFRSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IG5wOjE7CQkvLyBiaXQgMTUKKwkJdTE2IHJlczE6MTsJLy8gYml0IDE0CisJCXUxNiBtc2dfcGFnZToxOwkvLyBiaXQgMTMKKwkJdTE2IGFjazI6MTsJLy8gYml0IDEyCisJCXUxNiB0b2dnbGU6MTsJLy8gYml0IDExCisJCXUxNiBtc2c6MTE7CS8vIGJpdHMgMC0xMAorI2Vsc2UKKwkJdTE2IG1zZzoxMTsJLy8gYml0cyAwLTEwCisJCXUxNiB0b2dnbGU6MTsJLy8gYml0IDExCisJCXUxNiBhY2syOjE7CS8vIGJpdCAxMgorCQl1MTYgbXNnX3BhZ2U6MTsJLy8gYml0IDEzCisJCXUxNiByZXMxOjE7CS8vIGJpdCAxNAorCQl1MTYgbnA6MTsJCS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9BTk5QVFJfdCwgKlBNSV9BTk5QVFJfdDsKKworLyogTUkgUmVnaXN0ZXIgODogTGluayBQYXJ0bmVyIE5leHQgUGFnZSBSZWcoMHgwOCkgKi8KK3R5cGVkZWYgdW5pb24gX01JX0xQTlBSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IG5wOjE7CQkvLyBiaXQgMTUKKwkJdTE2IGFjazoxOwkJLy8gYml0IDE0CisJCXUxNiBtc2dfcGFnZToxOwkvLyBiaXQgMTMKKwkJdTE2IGFjazI6MTsJLy8gYml0IDEyCisJCXUxNiB0b2dnbGU6MTsJLy8gYml0IDExCisJCXUxNiBtc2c6MTE7CS8vIGJpdHMgMC0xMAorI2Vsc2UKKwkJdTE2IG1zZzoxMTsJLy8gYml0cyAwLTEwCisJCXUxNiB0b2dnbGU6MTsJLy8gYml0IDExCisJCXUxNiBhY2syOjE7CS8vIGJpdCAxMgorCQl1MTYgbXNnX3BhZ2U6MTsJLy8gYml0IDEzCisJCXUxNiBhY2s6MTsJCS8vIGJpdCAxNAorCQl1MTYgbnA6MTsJCS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9MUE5QUl90LCAqUE1JX0xQTlBSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDk6IDEwMDBCYXNlVCBDb250cm9sIFJlZygweDA5KSAqLwordHlwZWRlZiB1bmlvbiBfTUlfR0NSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IHRlc3RfbW9kZTozOwkJLy8gYml0cyAxMy0xNQorCQl1MTYgbXNfY29uZmlnX2VuOjE7CS8vIGJpdCAxMgorCQl1MTYgbXNfdmFsdWU6MTsJCS8vIGJpdCAxMQorCQl1MTYgcG9ydF90eXBlOjE7CQkvLyBiaXQgMTAKKwkJdTE2IGxpbmtfMTAwMGZkeDoxOwkvLyBiaXQgOQorCQl1MTYgbGlua18xMDAwaGR4OjE7CS8vIGJpdCA4CisJCXUxNiByZXM6ODsJCQkvLyBiaXQgMC03CisjZWxzZQorCQl1MTYgcmVzOjg7CQkJLy8gYml0IDAtNworCQl1MTYgbGlua18xMDAwaGR4OjE7CS8vIGJpdCA4CisJCXUxNiBsaW5rXzEwMDBmZHg6MTsJLy8gYml0IDkKKwkJdTE2IHBvcnRfdHlwZToxOwkJLy8gYml0IDEwCisJCXUxNiBtc192YWx1ZToxOwkJLy8gYml0IDExCisJCXUxNiBtc19jb25maWdfZW46MTsJLy8gYml0IDEyCisJCXUxNiB0ZXN0X21vZGU6MzsJCS8vIGJpdHMgMTMtMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfR0NSX3QsICpQTUlfR0NSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDEwOiAxMDAwQmFzZVQgU3RhdHVzIFJlZygweDBBKSAqLwordHlwZWRlZiB1bmlvbiBfTUlfR1NSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IG1zX2NvbmZpZ19mYXVsdDoxOwkvLyBiaXQgMTUKKwkJdTE2IG1zX3Jlc29sdmU6MTsJCS8vIGJpdCAxNAorCQl1MTYgbG9jYWxfcnhfc3RhdHVzOjE7CS8vIGJpdCAxMworCQl1MTYgcmVtb3RlX3J4X3N0YXR1czoxOwkvLyBiaXQgMTIKKwkJdTE2IGxpbmtfMTAwMGZkeDoxOwkvLyBiaXQgMTEKKwkJdTE2IGxpbmtfMTAwMGhkeDoxOwkvLyBiaXQgMTAKKwkJdTE2IHJlczoyOwkJCS8vIGJpdHMgOC05CisJCXUxNiBpZGxlX2Vycl9jbnQ6ODsJLy8gYml0cyAwLTcKKyNlbHNlCisJCXUxNiBpZGxlX2Vycl9jbnQ6ODsJLy8gYml0cyAwLTcKKwkJdTE2IHJlczoyOwkJCS8vIGJpdHMgOC05CisJCXUxNiBsaW5rXzEwMDBoZHg6MTsJLy8gYml0IDEwCisJCXUxNiBsaW5rXzEwMDBmZHg6MTsJLy8gYml0IDExCisJCXUxNiByZW1vdGVfcnhfc3RhdHVzOjE7CS8vIGJpdCAxMgorCQl1MTYgbG9jYWxfcnhfc3RhdHVzOjE7CS8vIGJpdCAxMworCQl1MTYgbXNfcmVzb2x2ZToxOwkJLy8gYml0IDE0CisJCXUxNiBtc19jb25maWdfZmF1bHQ6MTsJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0dTUl90LCAqUE1JX0dTUl90OworCisvKiBNSSBSZWdpc3RlciAxMSAtIDE0OiBSZXNlcnZlZCBSZWdzKDB4MEIgLSAweDBFKSAqLwordHlwZWRlZiB1bmlvbiBfTUlfUkVTX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IHJlczE1OjE7CS8vIGJpdCAxNQorCQl1MTYgcmVzMTQ6MTsJLy8gYml0IDE0CisJCXUxNiByZXMxMzoxOwkvLyBiaXQgMTMKKwkJdTE2IHJlczEyOjE7CS8vIGJpdCAxMgorCQl1MTYgcmVzMTE6MTsJLy8gYml0IDExCisJCXUxNiByZXMxMDoxOwkvLyBiaXQgMTAKKwkJdTE2IHJlczk6MTsJLy8gYml0IDkKKwkJdTE2IHJlczg6MTsJLy8gYml0IDgKKwkJdTE2IHJlczc6MTsJLy8gYml0IDcKKwkJdTE2IHJlczY6MTsJLy8gYml0IDYKKwkJdTE2IHJlczU6MTsJLy8gYml0IDUKKwkJdTE2IHJlczQ6MTsJLy8gYml0IDQKKwkJdTE2IHJlczM6MTsJLy8gYml0IDMKKwkJdTE2IHJlczI6MTsJLy8gYml0IDIKKwkJdTE2IHJlczE6MTsJLy8gYml0IDEKKwkJdTE2IHJlczA6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUxNiByZXMwOjE7CS8vIGJpdCAwCisJCXUxNiByZXMxOjE7CS8vIGJpdCAxCisJCXUxNiByZXMyOjE7CS8vIGJpdCAyCisJCXUxNiByZXMzOjE7CS8vIGJpdCAzCisJCXUxNiByZXM0OjE7CS8vIGJpdCA0CisJCXUxNiByZXM1OjE7CS8vIGJpdCA1CisJCXUxNiByZXM2OjE7CS8vIGJpdCA2CisJCXUxNiByZXM3OjE7CS8vIGJpdCA3CisJCXUxNiByZXM4OjE7CS8vIGJpdCA4CisJCXUxNiByZXM5OjE7CS8vIGJpdCA5CisJCXUxNiByZXMxMDoxOwkvLyBiaXQgMTAKKwkJdTE2IHJlczExOjE7CS8vIGJpdCAxMQorCQl1MTYgcmVzMTI6MTsJLy8gYml0IDEyCisJCXUxNiByZXMxMzoxOwkvLyBiaXQgMTMKKwkJdTE2IHJlczE0OjE7CS8vIGJpdCAxNAorCQl1MTYgcmVzMTU6MTsJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX1JFU190LCAqUE1JX1JFU190OworCisvKiBNSSBSZWdpc3RlciAxNTogRXh0ZW5kZWQgc3RhdHVzIFJlZygweDBGKSAqLwordHlwZWRlZiB1bmlvbiBfTUlfRVNSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IGxpbmtfMTAwMFhmZHg6MTsJLy8gYml0IDE1CisJCXUxNiBsaW5rXzEwMDBYaGR4OjE7CS8vIGJpdCAxNAorCQl1MTYgbGlua18xMDAwZmR4OjE7CS8vIGJpdCAxMworCQl1MTYgbGlua18xMDAwaGR4OjE7CS8vIGJpdCAxMgorCQl1MTYgcmVzOjEyOwkJLy8gYml0IDAtMTEKKyNlbHNlCisJCXUxNiByZXM6MTI7CQkvLyBiaXQgMC0xMQorCQl1MTYgbGlua18xMDAwaGR4OjE7CS8vIGJpdCAxMgorCQl1MTYgbGlua18xMDAwZmR4OjE7CS8vIGJpdCAxMworCQl1MTYgbGlua18xMDAwWGhkeDoxOwkvLyBiaXQgMTQKKwkJdTE2IGxpbmtfMTAwMFhmZHg6MTsJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0VTUl90LCAqUE1JX0VTUl90OworCisvKiBNSSBSZWdpc3RlciAxNiAtIDE4OiBSZXNlcnZlZCBSZWcoMHgxMC0weDEyKSAqLworCisvKiBNSSBSZWdpc3RlciAxOTogTG9vcGJhY2sgQ29udHJvbCBSZWcoMHgxMykgKi8KK3R5cGVkZWYgdW5pb24gX01JX0xDUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBtaWlfZW46MTsJCS8vIGJpdCAxNQorCQl1MTYgcGNzX2VuOjE7CQkvLyBiaXQgMTQKKwkJdTE2IHBtZF9lbjoxOwkJLy8gYml0IDEzCisJCXUxNiBhbGxfZGlnaXRhbF9lbjoxOwkvLyBiaXQgMTIKKwkJdTE2IHJlcGxpY2FfZW46MTsJCS8vIGJpdCAxMQorCQl1MTYgbGluZV9kcml2ZXJfZW46MTsJLy8gYml0IDEwCisJCXUxNiByZXM6MTA7CQkvLyBiaXQgMC05CisjZWxzZQorCQl1MTYgcmVzOjEwOwkJLy8gYml0IDAtOQorCQl1MTYgbGluZV9kcml2ZXJfZW46MTsJLy8gYml0IDEwCisJCXUxNiByZXBsaWNhX2VuOjE7CQkvLyBiaXQgMTEKKwkJdTE2IGFsbF9kaWdpdGFsX2VuOjE7CS8vIGJpdCAxMgorCQl1MTYgcG1kX2VuOjE7CQkvLyBiaXQgMTMKKwkJdTE2IHBjc19lbjoxOwkJLy8gYml0IDE0CisJCXUxNiBtaWlfZW46MTsJCS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9MQ1JfdCwgKlBNSV9MQ1JfdDsKKworLyogTUkgUmVnaXN0ZXIgMjA6IFJlc2VydmVkIFJlZygweDE0KSAqLworCisvKiBNSSBSZWdpc3RlciAyMTogTWFuYWdlbWVudCBJbnRlcmZhY2UgQ29udHJvbCBSZWcoMHgxNSkgKi8KK3R5cGVkZWYgdW5pb24gX01JX01JQ1JfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgcmVzMTo1OwkJLy8gYml0cyAxMS0xNQorCQl1MTYgbWlfZXJyb3JfY291bnQ6NzsJLy8gYml0cyA0LTEwCisJCXUxNiByZXMyOjE7CQkvLyBiaXQgMworCQl1MTYgaWdub3JlXzEwZ19mcjoxOwkvLyBiaXQgMgorCQl1MTYgcmVzMzoxOwkJLy8gYml0IDEKKwkJdTE2IHByZWFtYmxlX3N1cHJlc3NfZW46MTsJLy8gYml0IDAKKyNlbHNlCisJCXUxNiBwcmVhbWJsZV9zdXByZXNzX2VuOjE7CS8vIGJpdCAwCisJCXUxNiByZXMzOjE7CQkvLyBiaXQgMQorCQl1MTYgaWdub3JlXzEwZ19mcjoxOwkvLyBiaXQgMgorCQl1MTYgcmVzMjoxOwkJLy8gYml0IDMKKwkJdTE2IG1pX2Vycm9yX2NvdW50Ojc7CS8vIGJpdHMgNC0xMAorCQl1MTYgcmVzMTo1OwkJLy8gYml0cyAxMS0xNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9NSUNSX3QsICpQTUlfTUlDUl90OworCisvKiBNSSBSZWdpc3RlciAyMjogUEhZIENvbmZpZ3VyYXRpb24gUmVnKDB4MTYpICovCit0eXBlZGVmIHVuaW9uIF9NSV9QSFlfQ09ORklHX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IGNyc190eF9lbjoxOwkJLy8gYml0IDE1CisJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTQKKwkJdTE2IHR4X2ZpZm9fZGVwdGg6MjsJLy8gYml0cyAxMi0xMworCQl1MTYgc3BlZWRfZG93bnNoaWZ0OjI7CS8vIGJpdHMgMTAtMTEKKwkJdTE2IHBiaV9kZXRlY3Q6MTsJCS8vIGJpdCA5CisJCXUxNiB0YmlfcmF0ZToxOwkJLy8gYml0IDgKKwkJdTE2IGFsdGVybmF0ZV9ucDoxOwkvLyBiaXQgNworCQl1MTYgZ3JvdXBfbWRpb19lbjoxOwkvLyBiaXQgNgorCQl1MTYgdHhfY2xvY2tfZW46MTsJCS8vIGJpdCA1CisJCXUxNiBzeXNfY2xvY2tfZW46MTsJLy8gYml0IDQKKwkJdTE2IHJlczI6MTsJCS8vIGJpdCAzCisJCXUxNiBtYWNfaWZfbW9kZTozOwkJLy8gYml0cyAwLTIKKyNlbHNlCisJCXUxNiBtYWNfaWZfbW9kZTozOwkJLy8gYml0cyAwLTIKKwkJdTE2IHJlczI6MTsJCS8vIGJpdCAzCisJCXUxNiBzeXNfY2xvY2tfZW46MTsJLy8gYml0IDQKKwkJdTE2IHR4X2Nsb2NrX2VuOjE7CQkvLyBiaXQgNQorCQl1MTYgZ3JvdXBfbWRpb19lbjoxOwkvLyBiaXQgNgorCQl1MTYgYWx0ZXJuYXRlX25wOjE7CS8vIGJpdCA3CisJCXUxNiB0YmlfcmF0ZToxOwkJLy8gYml0IDgKKwkJdTE2IHBiaV9kZXRlY3Q6MTsJCS8vIGJpdCA5CisJCXUxNiBzcGVlZF9kb3duc2hpZnQ6MjsJLy8gYml0cyAxMC0xMQorCQl1MTYgdHhfZmlmb19kZXB0aDoyOwkvLyBiaXRzIDEyLTEzCisJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTQKKwkJdTE2IGNyc190eF9lbjoxOwkJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX1BIWV9DT05GSUdfdCwgKlBNSV9QSFlfQ09ORklHX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDIzOiBQSFkgQ09OVFJPTCBSZWcoMHgxNykgKi8KK3R5cGVkZWYgdW5pb24gX01JX1BIWV9DT05UUk9MX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxNQorCQl1MTYgdGRyX2VuOjE7CQkvLyBiaXQgMTQKKwkJdTE2IHJlczI6MTsJCS8vIGJpdCAxMworCQl1MTYgZG93bnNoaWZ0X2F0dGVtcHRzOjI7CS8vIGJpdHMgMTEtMTIKKwkJdTE2IHJlczM6NTsJCS8vIGJpdCA2LTEwCisJCXUxNiBqYWJiZXJfMTBiYXNlVDoxOwkvLyBiaXQgNQorCQl1MTYgc3FlXzEwYmFzZVQ6MTsJCS8vIGJpdCA0CisJCXUxNiB0cF9sb29wYmFja18xMGJhc2VUOjE7CS8vIGJpdCAzCisJCXUxNiBwcmVhbWJsZV9nZW5fZW46MTsJLy8gYml0IDIKKwkJdTE2IHJlczQ6MTsJCS8vIGJpdCAxCisJCXUxNiBmb3JjZV9pbnQ6MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MTYgZm9yY2VfaW50OjE7CQkvLyBiaXQgMAorCQl1MTYgcmVzNDoxOwkJLy8gYml0IDEKKwkJdTE2IHByZWFtYmxlX2dlbl9lbjoxOwkvLyBiaXQgMgorCQl1MTYgdHBfbG9vcGJhY2tfMTBiYXNlVDoxOwkvLyBiaXQgMworCQl1MTYgc3FlXzEwYmFzZVQ6MTsJCS8vIGJpdCA0CisJCXUxNiBqYWJiZXJfMTBiYXNlVDoxOwkvLyBiaXQgNQorCQl1MTYgcmVzMzo1OwkJLy8gYml0IDYtMTAKKwkJdTE2IGRvd25zaGlmdF9hdHRlbXB0czoyOwkvLyBiaXRzIDExLTEyCisJCXUxNiByZXMyOjE7CQkvLyBiaXQgMTMKKwkJdTE2IHRkcl9lbjoxOwkJLy8gYml0IDE0CisJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfUEhZX0NPTlRST0xfdCwgKlBNSV9QSFlfQ09OVFJPTF90OworCisvKiBNSSBSZWdpc3RlciAyNDogSW50ZXJydXB0IE1hc2sgUmVnKDB4MTgpICovCit0eXBlZGVmIHVuaW9uIF9NSV9JTVJfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgcmVzMTo2OwkJLy8gYml0cyAxMC0xNQorCQl1MTYgbWRpb19zeW5jX2xvc3Q6MTsJLy8gYml0IDkKKwkJdTE2IGF1dG9uZWdfc3RhdHVzOjE7CS8vIGJpdCA4CisJCXUxNiBoaV9iaXRfZXJyOjE7CQkvLyBiaXQgNworCQl1MTYgbnBfcng6MTsJCS8vIGJpdCA2CisJCXUxNiBlcnJfY291bnRlcl9mdWxsOjE7CS8vIGJpdCA1CisJCXUxNiBmaWZvX292ZXJfdW5kZXJmbG93OjE7CS8vIGJpdCA0CisJCXUxNiByeF9zdGF0dXM6MTsJCS8vIGJpdCAzCisJCXUxNiBsaW5rX3N0YXR1czoxOwkJLy8gYml0IDIKKwkJdTE2IGF1dG9tYXRpY19zcGVlZDoxOwkvLyBiaXQgMQorCQl1MTYgaW50X2VuOjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTE2IGludF9lbjoxOwkJLy8gYml0IDAKKwkJdTE2IGF1dG9tYXRpY19zcGVlZDoxOwkvLyBiaXQgMQorCQl1MTYgbGlua19zdGF0dXM6MTsJCS8vIGJpdCAyCisJCXUxNiByeF9zdGF0dXM6MTsJCS8vIGJpdCAzCisJCXUxNiBmaWZvX292ZXJfdW5kZXJmbG93OjE7CS8vIGJpdCA0CisJCXUxNiBlcnJfY291bnRlcl9mdWxsOjE7CS8vIGJpdCA1CisJCXUxNiBucF9yeDoxOwkJLy8gYml0IDYKKwkJdTE2IGhpX2JpdF9lcnI6MTsJCS8vIGJpdCA3CisJCXUxNiBhdXRvbmVnX3N0YXR1czoxOwkvLyBiaXQgOAorCQl1MTYgbWRpb19zeW5jX2xvc3Q6MTsJLy8gYml0IDkKKwkJdTE2IHJlczE6NjsJCS8vIGJpdHMgMTAtMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfSU1SX3QsICpQTUlfSU1SX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDI1OiBJbnRlcnJ1cHQgU3RhdHVzIFJlZygweDE5KSAqLwordHlwZWRlZiB1bmlvbiBfTUlfSVNSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IHJlczE6NjsJCS8vIGJpdHMgMTAtMTUKKwkJdTE2IG1kaW9fc3luY19sb3N0OjE7CS8vIGJpdCA5CisJCXUxNiBhdXRvbmVnX3N0YXR1czoxOwkvLyBiaXQgOAorCQl1MTYgaGlfYml0X2VycjoxOwkJLy8gYml0IDcKKwkJdTE2IG5wX3J4OjE7CQkvLyBiaXQgNgorCQl1MTYgZXJyX2NvdW50ZXJfZnVsbDoxOwkvLyBiaXQgNQorCQl1MTYgZmlmb19vdmVyX3VuZGVyZmxvdzoxOwkvLyBiaXQgNAorCQl1MTYgcnhfc3RhdHVzOjE7CQkvLyBiaXQgMworCQl1MTYgbGlua19zdGF0dXM6MTsJCS8vIGJpdCAyCisJCXUxNiBhdXRvbWF0aWNfc3BlZWQ6MTsJLy8gYml0IDEKKwkJdTE2IGludF9lbjoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUxNiBpbnRfZW46MTsJCS8vIGJpdCAwCisJCXUxNiBhdXRvbWF0aWNfc3BlZWQ6MTsJLy8gYml0IDEKKwkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgMgorCQl1MTYgcnhfc3RhdHVzOjE7CQkvLyBiaXQgMworCQl1MTYgZmlmb19vdmVyX3VuZGVyZmxvdzoxOwkvLyBiaXQgNAorCQl1MTYgZXJyX2NvdW50ZXJfZnVsbDoxOwkvLyBiaXQgNQorCQl1MTYgbnBfcng6MTsJCS8vIGJpdCA2CisJCXUxNiBoaV9iaXRfZXJyOjE7CQkvLyBiaXQgNworCQl1MTYgYXV0b25lZ19zdGF0dXM6MTsJLy8gYml0IDgKKwkJdTE2IG1kaW9fc3luY19sb3N0OjE7CS8vIGJpdCA5CisJCXUxNiByZXMxOjY7CQkvLyBiaXRzIDEwLTE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0lTUl90LCAqUE1JX0lTUl90OworCisvKiBNSSBSZWdpc3RlciAyNjogUEhZIFN0YXR1cyBSZWcoMHgxQSkgKi8KK3R5cGVkZWYgdW5pb24gX01JX1BTUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTUKKwkJdTE2IGF1dG9uZWdfZmF1bHQ6MjsJLy8gYml0IDEzLTE0CisJCXUxNiBhdXRvbmVnX3N0YXR1czoxOwkvLyBiaXQgMTIKKwkJdTE2IG1kaV94X3N0YXR1czoxOwkvLyBiaXQgMTEKKwkJdTE2IHBvbGFyaXR5X3N0YXR1czoxOwkvLyBiaXQgMTAKKwkJdTE2IHNwZWVkX3N0YXR1czoyOwkvLyBiaXRzIDgtOQorCQl1MTYgZHVwbGV4X3N0YXR1czoxOwkvLyBiaXQgNworCQl1MTYgbGlua19zdGF0dXM6MTsJCS8vIGJpdCA2CisJCXUxNiB0eF9zdGF0dXM6MTsJCS8vIGJpdCA1CisJCXUxNiByeF9zdGF0dXM6MTsJCS8vIGJpdCA0CisJCXUxNiBjb2xsaXNpb25fc3RhdHVzOjE7CS8vIGJpdCAzCisJCXUxNiBhdXRvbmVnX2VuOjE7CQkvLyBiaXQgMgorCQl1MTYgcGF1c2VfZW46MTsJCS8vIGJpdCAxCisJCXUxNiBhc3ltbWV0cmljX2RpcjoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTE2IGFzeW1tZXRyaWNfZGlyOjE7CS8vIGJpdCAwCisJCXUxNiBwYXVzZV9lbjoxOwkJLy8gYml0IDEKKwkJdTE2IGF1dG9uZWdfZW46MTsJCS8vIGJpdCAyCisJCXUxNiBjb2xsaXNpb25fc3RhdHVzOjE7CS8vIGJpdCAzCisJCXUxNiByeF9zdGF0dXM6MTsJCS8vIGJpdCA0CisJCXUxNiB0eF9zdGF0dXM6MTsJCS8vIGJpdCA1CisJCXUxNiBsaW5rX3N0YXR1czoxOwkJLy8gYml0IDYKKwkJdTE2IGR1cGxleF9zdGF0dXM6MTsJLy8gYml0IDcKKwkJdTE2IHNwZWVkX3N0YXR1czoyOwkvLyBiaXRzIDgtOQorCQl1MTYgcG9sYXJpdHlfc3RhdHVzOjE7CS8vIGJpdCAxMAorCQl1MTYgbWRpX3hfc3RhdHVzOjE7CS8vIGJpdCAxMQorCQl1MTYgYXV0b25lZ19zdGF0dXM6MTsJLy8gYml0IDEyCisJCXUxNiBhdXRvbmVnX2ZhdWx0OjI7CS8vIGJpdCAxMy0xNAorCQl1MTYgcmVzMToxOwkJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX1BTUl90LCAqUE1JX1BTUl90OworCisvKiBNSSBSZWdpc3RlciAyNzogTEVEIENvbnRyb2wgUmVnIDEoMHgxQikgKi8KK3R5cGVkZWYgdW5pb24gX01JX0xDUjFfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgcmVzMToyOwkJLy8gYml0cyAxNC0xNQorCQl1MTYgbGVkX2R1cF9pbmRpY2F0ZToyOwkvLyBiaXRzIDEyLTEzCisJCXUxNiBsZWRfMTBiYXNlVDoyOwkJLy8gYml0cyAxMC0xMQorCQl1MTYgbGVkX2NvbGxpc2lvbjoyOwkvLyBiaXRzIDgtOQorCQl1MTYgcmVzMjoyOwkJLy8gYml0cyA2LTcKKwkJdTE2IHJlczM6MjsJCS8vIGJpdHMgNC01CisJCXUxNiBwdWxzZV9kdXI6MjsJCS8vIGJpdHMgMi0zCisJCXUxNiBwdWxzZV9zdHJldGNoMToxOwkvLyBiaXQgMQorCQl1MTYgcHVsc2Vfc3RyZXRjaDA6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUxNiBwdWxzZV9zdHJldGNoMDoxOwkvLyBiaXQgMAorCQl1MTYgcHVsc2Vfc3RyZXRjaDE6MTsJLy8gYml0IDEKKwkJdTE2IHB1bHNlX2R1cjoyOwkJLy8gYml0cyAyLTMKKwkJdTE2IHJlczM6MjsJCS8vIGJpdHMgNC01CisJCXUxNiByZXMyOjI7CQkvLyBiaXRzIDYtNworCQl1MTYgbGVkX2NvbGxpc2lvbjoyOwkvLyBiaXRzIDgtOQorCQl1MTYgbGVkXzEwYmFzZVQ6MjsJCS8vIGJpdHMgMTAtMTEKKwkJdTE2IGxlZF9kdXBfaW5kaWNhdGU6MjsJLy8gYml0cyAxMi0xMworCQl1MTYgcmVzMToyOwkJLy8gYml0cyAxNC0xNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9MQ1IxX3QsICpQTUlfTENSMV90OworCisvKiBNSSBSZWdpc3RlciAyODogTEVEIENvbnRyb2wgUmVnIDIoMHgxQykgKi8KK3R5cGVkZWYgdW5pb24gX01JX0xDUjJfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgbGVkX2xpbms6NDsJCS8vIGJpdHMgMTItMTUKKwkJdTE2IGxlZF90eF9yeDo0OwkJLy8gYml0cyA4LTExCisJCXUxNiBsZWRfMTAwQmFzZVRYOjQ7CS8vIGJpdHMgNC03CisJCXUxNiBsZWRfMTAwMEJhc2VUOjQ7CS8vIGJpdHMgMC0zCisjZWxzZQorCQl1MTYgbGVkXzEwMDBCYXNlVDo0OwkvLyBiaXRzIDAtMworCQl1MTYgbGVkXzEwMEJhc2VUWDo0OwkvLyBiaXRzIDQtNworCQl1MTYgbGVkX3R4X3J4OjQ7CQkvLyBiaXRzIDgtMTEKKwkJdTE2IGxlZF9saW5rOjQ7CQkvLyBiaXRzIDEyLTE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0xDUjJfdCwgKlBNSV9MQ1IyX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDI5IC0gMzE6IFJlc2VydmVkIFJlZygweDFEIC0gMHgxRSkgKi8KKworLyogVHJ1ZVBIWSBoZWFkZXJzICovCit0eXBlZGVmIHN0cnVjdCBfVFJVRVBIWV9BQ0NFU1NfTUlfUkVHU18geworCVRSVUVQSFlfSEFORExFIGhUcnVlUGh5OworCWludDMyX3QgblBoeUlkOworCXU4IGJSZWFkV3JpdGU7CisJdTggKnBieVJlZ3M7CisJdTggKnB3RGF0YTsKKwlpbnQzMl90IG5SZWdDb3VudDsKK30gVFJVRVBIWV9BQ0NFU1NfTUlfUkVHUywgKlBUUlVFUEhZX0FDQ0VTU19NSV9SRUdTOworCisvKiBUcnVlUEhZIGhlYWRlcnMgKi8KK3R5cGVkZWYgc3RydWN0IF9UQUdfVFBBTF9BQ0NFU1NfTUlfUkVHU18geworCXUzMiBuUGh5SWQ7CisJdTggYlJlYWRXcml0ZTsKKwl1MzIgblJlZ0NvdW50OworCXUxNiBEYXRhWzQwOTZdOworCXU4IFJlZ3NbNDA5Nl07Cit9IFRQQUxfQUNDRVNTX01JX1JFR1MsICpQVFBBTF9BQ0NFU1NfTUlfUkVHUzsKKworCit0eXBlZGVmIFRSVUVQSFlfSEFORExFIFRQQUxfSEFORExFOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCitzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7CisKKy8qIE9TIFNwZWNpZmljIEZ1bmN0aW9ucyovCit2b2lkIFRQQUxfU2V0UGh5MTBIYWxmRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIFRQQUxfU2V0UGh5MTBGdWxsRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIFRQQUxfU2V0UGh5MTBGb3JjZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3ZvaWQgVFBBTF9TZXRQaHkxMDBIYWxmRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIFRQQUxfU2V0UGh5MTAwRnVsbER1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBUUEFMX1NldFBoeTEwMEZvcmNlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwordm9pZCBUUEFMX1NldFBoeTEwMDBGdWxsRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIFRQQUxfU2V0UGh5QXV0b05lZyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisvKiBQcm90b3R5cGVzIGZvciBFVDEzMTBfcGh5LmMgKi8KK2ludCBldDEzMXhfeGN2cl9maW5kKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgZXQxMzF4X3NldHBoeV9ub3JtYWwoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK2ludDMyX3QgUGh5TWlSZWFkKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkgICAgICAgdTggeGN2ckFkZHIsIHU4IHhjdnJSZWcsIHUxNiAqdmFsdWUpOworCisvKiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGRvZXMgbm90IHdvcmsgYmVjYXVzZSBldDEzMXhfYWRhcHRlciBpcyBub3QgYWx3YXlzCisgKiBkZWZpbmVkCisgKi8KKyNkZWZpbmUgTWlSZWFkKGFkYXB0ZXIsIHhjdnJSZWcsIHZhbHVlKSBcCisJUGh5TWlSZWFkKChhZGFwdGVyKSwgKGFkYXB0ZXIpLT5TdGF0cy54Y3ZyX2FkZHIsICh4Y3ZyUmVnKSwgKHZhbHVlKSkKKworaW50MzJfdCBNaVdyaXRlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJdTggeGN2UmVnLCB1MTYgdmFsdWUpOwordm9pZCBldDEzMXhfTWlpX2NoZWNrKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsCisJCSAgICAgIE1JX0JNU1JfdCBibXNyLCBNSV9CTVNSX3QgYm1zcl9pbnRzKTsKKworLyogVGhpcyBsYXN0IGlzIG5vdCBzdHJpY3RseSByZXF1aXJlZCAodGhlIGRyaXZlciBjb3VsZCBjYWxsIHRoZSBUUEFMCisgKiB2ZXJzaW9uIGluc3RlYWQpLCBidXQgdGhpcyBzZXRzIHRoZSBhZGFwdGVyIHVwIGNvcnJlY3RseSwgYW5kIGNhbGxzIHRoZQorICogYWNjZXNzIHJvdXRpbmUgaW5kaXJlY3RseS4gIFRoaXMgcHJvdGVjdHMgdGhlIGRyaXZlciBmcm9tIGNoYW5nZXMgaW4gVFBBTC4KKyAqLwordm9pZCBTZXRQaHlfMTBCYXNlVEhhbGZEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworLyogRGVmaW5lcyBmb3IgUEhZIGFjY2VzcyByb3V0aW5lcyAqLworCisvLyBEZWZpbmUgYml0IG9wZXJhdGlvbiBmbGFncworI2RlZmluZSBUUlVFUEhZX0JJVF9DTEVBUiAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVFJVRVBIWV9CSVRfU0VUICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFRSVUVQSFlfQklUX1JFQUQgICAgICAgICAgICAgICAgMgorCisvLyBEZWZpbmUgcmVhZC93cml0ZSBvcGVyYXRpb24gZmxhZ3MKKyNpZm5kZWYgVFJVRVBIWV9SRUFECisjZGVmaW5lIFRSVUVQSFlfUkVBRCAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBUUlVFUEhZX1dSSVRFICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFJVRVBIWV9NQVNLICAgICAgICAgICAgICAgICAgICAyCisjZW5kaWYKKworLy8gRGVmaW5lIHNwZWVkcworI2RlZmluZSBUUlVFUEhZX1NQRUVEXzEwTUJQUyAgICAgICAgICAgIDAKKyNkZWZpbmUgVFJVRVBIWV9TUEVFRF8xMDBNQlBTICAgICAgICAgICAxCisjZGVmaW5lIFRSVUVQSFlfU1BFRURfMTAwME1CUFMgICAgICAgICAgMgorCisvLyBEZWZpbmUgZHVwbGV4IG1vZGVzCisjZGVmaW5lIFRSVUVQSFlfRFVQTEVYX0hBTEYgICAgICAgICAgICAgMAorI2RlZmluZSBUUlVFUEhZX0RVUExFWF9GVUxMICAgICAgICAgICAgIDEKKworLy8gRGVmaW5lIG1hc3Rlci9zbGF2ZSBjb25maWd1cmF0aW9uIHZhbHVlcworI2RlZmluZSBUUlVFUEhZX0NGR19TTEFWRSAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVFJVRVBIWV9DRkdfTUFTVEVSICAgICAgICAgICAgICAxCisKKy8vIERlZmluZSBNREkvTURJLVggc2V0dGluZ3MKKyNkZWZpbmUgVFJVRVBIWV9NREkgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRSVUVQSFlfTURJWCAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBUUlVFUEhZX0FVVE9fTURJX01ESVggICAgICAgICAgIDIKKworLy8gRGVmaW5lIDEwQmFzZS1UIGxpbmsgcG9sYXJpdGllcworI2RlZmluZSBUUlVFUEhZX1BPTEFSSVRZX05PUk1BTCAgICAgICAgIDAKKyNkZWZpbmUgVFJVRVBIWV9QT0xBUklUWV9JTlZFUlRFRCAgICAgICAxCisKKy8vIERlZmluZSBhdXRvLW5lZ290aWF0aW9uIHJlc3VsdHMKKyNkZWZpbmUgVFJVRVBIWV9BTkVHX05PVF9DT01QTEVURSAgICAgICAwCisjZGVmaW5lIFRSVUVQSFlfQU5FR19DT01QTEVURSAgICAgICAgICAgMQorI2RlZmluZSBUUlVFUEhZX0FORUdfRElTQUJMRUQgICAgICAgICAgIDIKKworLyogRGVmaW5lIGR1cGxleCBhZHZlcnRpc21lbnQgZmxhZ3MgKi8KKyNkZWZpbmUgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUgICAgICAgICAweDAwCisjZGVmaW5lIFRSVUVQSFlfQURWX0RVUExFWF9GVUxMICAgICAgICAgMHgwMQorI2RlZmluZSBUUlVFUEhZX0FEVl9EVVBMRVhfSEFMRiAgICAgICAgIDB4MDIKKyNkZWZpbmUgVFJVRVBIWV9BRFZfRFVQTEVYX0JPVEggICAgIFwKKyAgICAoVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEwgfCBUUlVFUEhZX0FEVl9EVVBMRVhfSEFMRikKKworI2RlZmluZSBQSFlfQ09OVFJPTCAgICAgICAgICAgICAgICAweDAwCS8vI2RlZmluZSBUUlVfTUlfQ09OVFJPTF9SRUdJU1RFUiAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQSFlfU1RBVFVTICAgICAgICAgICAgICAgICAweDAxCS8vI2RlZmluZSBUUlVfTUlfU1RBVFVTX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQSFlfSURfMSAgICAgICAgICAgICAgICAgICAweDAyCS8vI2RlZmluZSBUUlVfTUlfUEhZX0lERU5USUZJRVJfMV9SRUdJU1RFUiAgICAgICAgMgorI2RlZmluZSBQSFlfSURfMiAgICAgICAgICAgICAgICAgICAweDAzCS8vI2RlZmluZSBUUlVfTUlfUEhZX0lERU5USUZJRVJfMl9SRUdJU1RFUiAgICAgICAgMworI2RlZmluZSBQSFlfQVVUT19BRFZFUlRJU0VNRU5UICAgICAweDA0CS8vI2RlZmluZSBUUlVfTUlfQURWRVJUSVNFTUVOVF9SRUdJU1RFUiAgICAgICAgICAgNAorI2RlZmluZSBQSFlfQVVUT19MSU5LX1BBUlRORVIgICAgICAweDA1CS8vI2RlZmluZSBUUlVfTUlfTElOS19QQVJUTkVSX0FCSUxJVFlfUkVHSVNURVIgICAgNQorI2RlZmluZSBQSFlfQVVUT19FWFBBTlNJT04gICAgICAgICAweDA2CS8vI2RlZmluZSBUUlVfTUlfRVhQQU5TSU9OX1JFR0lTVEVSICAgICAgICAgICAgICAgNgorI2RlZmluZSBQSFlfQVVUT19ORVhUX1BBR0VfVFggICAgICAweDA3CS8vI2RlZmluZSBUUlVfTUlfTkVYVF9QQUdFX1RSQU5TTUlUX1JFR0lTVEVSICAgICAgNworI2RlZmluZSBQSFlfTElOS19QQVJUTkVSX05FWFRfUEFHRSAweDA4CS8vI2RlZmluZSBUUlVfTUlfTElOS19QQVJUTkVSX05FWFRfUEFHRV9SRUdJU1RFUiAgOAorI2RlZmluZSBQSFlfMTAwMF9DT05UUk9MICAgICAgICAgICAweDA5CS8vI2RlZmluZSBUUlVfTUlfMTAwMEJBU0VUX0NPTlRST0xfUkVHSVNURVIgICAgICAgOQorI2RlZmluZSBQSFlfMTAwMF9TVEFUVVMgICAgICAgICAgICAweDBBCS8vI2RlZmluZSBUUlVfTUlfMTAwMEJBU0VUX1NUQVRVU19SRUdJU1RFUiAgICAgICAgMTAKKworI2RlZmluZSBQSFlfRVhURU5ERURfU1RBVFVTICAgICAgICAweDBGCS8vI2RlZmluZSBUUlVfTUlfRVhURU5ERURfU1RBVFVTX1JFR0lTVEVSICAgICAgICAgMTUKKworLy8gc29tZSBkZWZpbmVzIGZvciBtb2RlbSByZWdpc3RlcnMgdGhhdCBzZWVtIHRvIGJlICdyZXNlcnZlZCcKKyNkZWZpbmUgUEhZX0lOREVYX1JFRyAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBQSFlfREFUQV9SRUcgICAgICAgICAgICAgICAweDExCisKKyNkZWZpbmUgUEhZX01QSFlfQ09OVFJPTF9SRUcgICAgICAgMHgxMgkvLyNkZWZpbmUgVFJVX1ZNSV9NUEhZX0NPTlRST0xfUkVHSVNURVIgICAgICAgICAgIDE4CisKKyNkZWZpbmUgUEhZX0xPT1BCQUNLX0NPTlRST0wgICAgICAgMHgxMwkvLyNkZWZpbmUgVFJVX1ZNSV9MT09QQkFDS19DT05UUk9MXzFfUkVHSVNURVIgICAgIDE5CisJCQkJCS8vI2RlZmluZSBUUlVfVk1JX0xPT1BCQUNLX0NPTlRST0xfMl9SRUdJU1RFUiAgICAgMjAKKyNkZWZpbmUgUEhZX1JFR0lTVEVSX01HTVRfQ09OVFJPTCAgMHgxNQkvLyNkZWZpbmUgVFJVX1ZNSV9NSV9TRVFfQ09OVFJPTF9SRUdJU1RFUiAgICAgICAgIDIxCisjZGVmaW5lIFBIWV9DT05GSUcgICAgICAgICAgICAgICAgIDB4MTYJLy8jZGVmaW5lIFRSVV9WTUlfQ09ORklHVVJBVElPTl9SRUdJU1RFUiAgICAgICAgICAyMgorI2RlZmluZSBQSFlfUEhZX0NPTlRST0wgICAgICAgICAgICAweDE3CS8vI2RlZmluZSBUUlVfVk1JX1BIWV9DT05UUk9MX1JFR0lTVEVSICAgICAgICAgICAgMjMKKyNkZWZpbmUgUEhZX0lOVEVSUlVQVF9NQVNLICAgICAgICAgMHgxOAkvLyNkZWZpbmUgVFJVX1ZNSV9JTlRFUlJVUFRfTUFTS19SRUdJU1RFUiAgICAgICAgIDI0CisjZGVmaW5lIFBIWV9JTlRFUlJVUFRfU1RBVFVTICAgICAgIDB4MTkJLy8jZGVmaW5lIFRSVV9WTUlfSU5URVJSVVBUX1NUQVRVU19SRUdJU1RFUiAgICAgICAyNQorI2RlZmluZSBQSFlfUEhZX1NUQVRVUyAgICAgICAgICAgICAweDFBCS8vI2RlZmluZSBUUlVfVk1JX1BIWV9TVEFUVVNfUkVHSVNURVIgICAgICAgICAgICAgMjYKKyNkZWZpbmUgUEhZX0xFRF8xICAgICAgICAgICAgICAgICAgMHgxQgkvLyNkZWZpbmUgVFJVX1ZNSV9MRURfQ09OVFJPTF8xX1JFR0lTVEVSICAgICAgICAgIDI3CisjZGVmaW5lIFBIWV9MRURfMiAgICAgICAgICAgICAgICAgIDB4MUMJLy8jZGVmaW5lIFRSVV9WTUlfTEVEX0NPTlRST0xfMl9SRUdJU1RFUiAgICAgICAgICAyOAorCQkJCQkvLyNkZWZpbmUgVFJVX1ZNSV9MSU5LX0NPTlRST0xfUkVHSVNURVIgICAgICAgICAgIDI5CisJCQkJCS8vI2RlZmluZSBUUlVfVk1JX1RJTUlOR19DT05UUk9MX1JFR0lTVEVSCisKKy8qIFByb3RvdHlwZXMgZm9yIFBIWSBhY2Nlc3Mgcm91dGluZXMgKi8KK3ZvaWQgRVQxMzEwX1BoeUluaXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgRVQxMzEwX1BoeVJlc2V0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIEVUMTMxMF9QaHlQb3dlckRvd24oc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCBib29sIGRvd24pOwordm9pZCBFVDEzMTBfUGh5QXV0b05lZyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZW5hYmxlKTsKK3ZvaWQgRVQxMzEwX1BoeUR1cGxleE1vZGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCB1MTYgZHVwbGV4KTsKK3ZvaWQgRVQxMzEwX1BoeVNwZWVkU2VsZWN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgdTE2IHNwZWVkKTsKK3ZvaWQgRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICB1MTYgZHVwbGV4KTsKK3ZvaWQgRVQxMzEwX1BoeUFkdmVydGlzZTEwMEJhc2VUKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgdTE2IGR1cGxleCk7Cit2b2lkIEVUMTMxMF9QaHlBZHZlcnRpc2UxMEJhc2VUKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQl1MTYgZHVwbGV4KTsKK3ZvaWQgRVQxMzEwX1BoeUxpbmtTdGF0dXMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJICB1OCAqdWNMaW5rU3RhdHVzLAorCQkJICB1MzIgKnVpQXV0b05lZywKKwkJCSAgdTMyICp1aUxpbmtTcGVlZCwKKwkJCSAgdTMyICp1aUR1cGxleE1vZGUsCisJCQkgIHUzMiAqdWlNZGlNZGl4LAorCQkJICB1MzIgKnVpTWFzdGVyU2xhdmUsIHUzMiAqdWlQb2xhcml0eSk7Cit2b2lkIEVUMTMxMF9QaHlBbmRPclJlZyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQl1MTYgcmVnbnVtLCB1MTYgYW5kTWFzaywgdTE2IG9yTWFzayk7Cit2b2lkIEVUMTMxMF9QaHlBY2Nlc3NNaUJpdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICB1MTYgYWN0aW9uLAorCQkJICAgdTE2IHJlZ251bSwgdTE2IGJpdG51bSwgdTggKnZhbHVlKTsKKworI2VuZGlmIC8qIF9FVDEzMTBfUEhZX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTM5YmM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcG0uYwpAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfcG0uYyAtIEFsbCBwb3dlciBtYW5hZ2VtZW50IHJlbGF0ZWQgY29kZSAobm90IGNvbXBsZXRlbHkgaW1wbGVtZW50ZWQpCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJldDEzMXhfdmVyc2lvbi5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWJ1Zy5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlICJldDEzMTBfcGh5LmgiCisjaW5jbHVkZSAiZXQxMzEwX3BtLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKyNpbmNsdWRlICJldDEzMTBfbWFjLmgiCisjaW5jbHVkZSAiZXQxMzEwX3J4LmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCisKKy8qIERhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworLyoqCisgKiBFbmFibGVQaHlDb21hIC0gY2FsbGVkIHdoZW4gbmV0d29yayBjYWJsZSBpcyB1bnBsdWdnZWQKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBkcml2ZXIgcmVjZWl2ZSBhbiBwaHkgc3RhdHVzIGNoYW5nZSBpbnRlcnJ1cHQgd2hpbGUgaW4gRDAgYW5kIGNoZWNrIHRoYXQKKyAqIHBoeV9zdGF0dXMgaXMgZG93bi4KKyAqCisgKiAgICAgICAgICAtLSBnYXRlIG9mZiBKQUdDb3JlOworICogICAgICAgICAgLS0gc2V0IGdpZ0UgUEhZIGluIENvbWEgbW9kZQorICogICAgICAgICAgLS0gd2FrZSBvbiBwaHlfaW50ZXJydXB0OyBQZXJmb3JtIHNvZnR3YXJlIHJlc2V0IEpBR0NvcmUsCisgKiAgICAgICAgICAgICByZS1pbml0aWFsaXplIGphZ2NvcmUgYW5kIGdpZ0UgUEhZCisgKgorICogICAgICBBZGQgRDAtQVNQTS1QaHlMaW5rRG93biBTdXBwb3J0OgorICogICAgICAgICAgLS0gd2hpbGUgaW4gRDAsIHdoZW4gdGhlcmUgaXMgYSBwaHlfaW50ZXJydXB0IGluZGljYXRpbmcgcGh5IGxpbmsKKyAqICAgICAgICAgICAgIGRvd24gc3RhdHVzLCBjYWxsIHRoZSBNUFNldFBoeUNvbWEgcm91dGluZSB0byBlbnRlciB0aGlzIGFjdGl2ZQorICogICAgICAgICAgICAgc3RhdGUgcG93ZXIgc2F2aW5nIG1vZGUKKyAqICAgICAgICAgIC0tIHdoaWxlIGluIEQwLUFTUE0tUGh5TGlua0Rvd24gbW9kZSwgd2hlbiB0aGVyZSBpcyBhIHBoeV9pbnRlcnJ1cHQKKyAqICAgICAgIGluZGljYXRpbmcgbGlua3VwIHN0YXR1cywgY2FsbCB0aGUgTVBEaXNhYmxlUGh5Q29tYSByb3V0aW5lIHRvCisgKiAgICAgICAgICAgICByZXN0b3JlIEpBR0NvcmUgYW5kIGdpZ0UgUEhZCisgKi8KK3ZvaWQgRW5hYmxlUGh5Q29tYShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCVBNX0NTUl90IEdsb2JhbFBtQ1NSOworCWludDMyX3QgTG9vcENvdW50ZXIgPSAxMDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlHbG9iYWxQbUNTUi52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLnBtX2Nzci52YWx1ZSk7CisKKwkvKiBTYXZlIHRoZSBHYkUgUEhZIHNwZWVkIGFuZCBkdXBsZXggbW9kZXMuIE5lZWQgdG8gcmVzdG9yZSB0aGlzCisJICogd2hlbiBjYWJsZSBpcyBwbHVnZ2VkIGJhY2sgaW4KKwkgKi8KKwlwQWRhcHRlci0+UG9NZ210LlBvd2VyRG93blNwZWVkID0gcEFkYXB0ZXItPkFpRm9yY2VTcGVlZDsKKwlwQWRhcHRlci0+UG9NZ210LlBvd2VyRG93bkR1cGxleCA9IHBBZGFwdGVyLT5BaUZvcmNlRHB4OworCisJLyogU3RvcCBzZW5kaW5nIHBhY2tldHMuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5TZW5kSFdMb2NrLCBsb2NrZmxhZ3MpOworCU1QX1NFVF9GTEFHKHBBZGFwdGVyLCBmTVBfQURBUFRFUl9MT1dFUl9QT1dFUik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlNlbmRIV0xvY2ssIGxvY2tmbGFncyk7CisKKwkvKiBXYWl0IGZvciBvdXRzdGFuZGluZyBSZWNlaXZlIHBhY2tldHMgKi8KKwl3aGlsZSAoKE1QX0dFVF9SQ1ZfUkVGKHBBZGFwdGVyKSAhPSAwKSAmJiAoTG9vcENvdW50ZXItLSA+IDApKSB7CisJCW1kZWxheSgyKTsKKwl9CisKKwkvKiBHYXRlIG9mZiBKQUdDb3JlIDMgY2xvY2sgZG9tYWlucyAqLworCUdsb2JhbFBtQ1NSLmJpdHMucG1fc3lzY2xrX2dhdGUgPSAwOworCUdsb2JhbFBtQ1NSLmJpdHMucG1fdHhjbGtfZ2F0ZSA9IDA7CisJR2xvYmFsUG1DU1IuYml0cy5wbV9yeGNsa19nYXRlID0gMDsKKwl3cml0ZWwoR2xvYmFsUG1DU1IudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLnBtX2Nzci52YWx1ZSk7CisKKwkvKiBQcm9ncmFtIGdpZ0UgUEhZIGluIHRvIENvbWEgbW9kZSAqLworCUdsb2JhbFBtQ1NSLmJpdHMucG1fcGh5X3N3X2NvbWEgPSAxOworCXdyaXRlbChHbG9iYWxQbUNTUi52YWx1ZSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogRGlzYWJsZVBoeUNvbWEgLSBEaXNhYmxlIHRoZSBQaHkgQ29tYSBNb2RlCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgRGlzYWJsZVBoeUNvbWEoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlQTV9DU1JfdCBHbG9iYWxQbUNTUjsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlHbG9iYWxQbUNTUi52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLnBtX2Nzci52YWx1ZSk7CisKKwkvKiBEaXNhYmxlIHBoeV9zd19jb21hIHJlZ2lzdGVyIGFuZCByZS1lbmFibGUgSkFHQ29yZSBjbG9ja3MgKi8KKwlHbG9iYWxQbUNTUi5iaXRzLnBtX3N5c2Nsa19nYXRlID0gMTsKKwlHbG9iYWxQbUNTUi5iaXRzLnBtX3R4Y2xrX2dhdGUgPSAxOworCUdsb2JhbFBtQ1NSLmJpdHMucG1fcnhjbGtfZ2F0ZSA9IDE7CisJR2xvYmFsUG1DU1IuYml0cy5wbV9waHlfc3dfY29tYSA9IDA7CisJd3JpdGVsKEdsb2JhbFBtQ1NSLnZhbHVlLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5wbV9jc3IudmFsdWUpOworCisJLyogUmVzdG9yZSB0aGUgR2JFIFBIWSBzcGVlZCBhbmQgZHVwbGV4IG1vZGVzOworCSAqIFJlc2V0IEpBR0NvcmU7IHJlLWNvbmZpZ3VyZSBhbmQgaW5pdGlhbGl6ZSBKQUdDb3JlIGFuZCBnaWdFIFBIWQorCSAqLworCXBBZGFwdGVyLT5BaUZvcmNlU3BlZWQgPSBwQWRhcHRlci0+UG9NZ210LlBvd2VyRG93blNwZWVkOworCXBBZGFwdGVyLT5BaUZvcmNlRHB4ID0gcEFkYXB0ZXItPlBvTWdtdC5Qb3dlckRvd25EdXBsZXg7CisKKwkvKiBSZS1pbml0aWFsaXplIHRoZSBzZW5kIHN0cnVjdHVyZXMgKi8KKwlldDEzMXhfaW5pdF9zZW5kKHBBZGFwdGVyKTsKKworCS8qIFJlc2V0IHRoZSBSRkQgbGlzdCBhbmQgcmUtc3RhcnQgUlUgICovCisJZXQxMzF4X3Jlc2V0X3JlY3YocEFkYXB0ZXIpOworCisJLyogQnJpbmcgdGhlIGRldmljZSBiYWNrIHRvIHRoZSBzdGF0ZSBpdCB3YXMgZHVyaW5nIGluaXQgcHJpb3IgdG8KKyAgICAgICAgICogYXV0b25lZ290aWF0aW9uIGJlaW5nIGNvbXBsZXRlLiAgVGhpcyB3YXksIHdoZW4gd2UgZ2V0IHRoZSBhdXRvLW5lZworICAgICAgICAgKiBjb21wbGV0ZSBpbnRlcnJ1cHQsIHdlIGNhbiBjb21wbGV0ZSBpbml0IGJ5IGNhbGxpbmcgQ29uZmlnTWFjUkVHUzIuCisgICAgICAgICAqLworCWV0MTMxeF9zb2Z0X3Jlc2V0KHBBZGFwdGVyKTsKKworCS8qIHNldHVwIGV0MTMxMCBhcyBwZXIgdGhlIGRvY3VtZW50YXRpb24gPz8gKi8KKwlldDEzMXhfYWRhcHRlcl9zZXR1cChwQWRhcHRlcik7CisKKwkvKiBBbGxvdyBUeCB0byByZXN0YXJ0ICovCisJTVBfQ0xFQVJfRkxBRyhwQWRhcHRlciwgZk1QX0FEQVBURVJfTE9XRVJfUE9XRVIpOworCisJLyogTmVlZCB0byByZS1lbmFibGUgUnguICovCisJZXQxMzF4X3J4X2RtYV9lbmFibGUocEFkYXB0ZXIpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcG0uaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwMjMzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BtLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX3BtLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvIHBvd2VyCisgKiAgICAgICAgICAgICAgIG1hbmFnZW1lbnQuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX0VUMTMxMF9QTV9IXworI2RlZmluZSBfRVQxMzEwX1BNX0hfCisKKyNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKKworI2RlZmluZSBNQVhfV09MX1BBQ0tFVF9TSVpFICAgIDB4ODAKKyNkZWZpbmUgTUFYX1dPTF9NQVNLX1NJWkUgICAgICAoIE1BWF9XT0xfUEFDS0VUX1NJWkUgLyA4ICkKKyNkZWZpbmUgTlVNX1dPTF9QQVRURVJOUyAgICAgICAweDUKKyNkZWZpbmUgQ1JDMTZfUE9MWSAgICAgICAgICAgICAweDEwMjEKKworLyogRGVmaW5pdGlvbiBvZiBORElTX0RFVklDRV9QT1dFUl9TVEFURSAqLwordHlwZWRlZiBlbnVtIHsKKwlOZGlzRGV2aWNlU3RhdGVVbnNwZWNpZmllZCA9IDAsCisJTmRpc0RldmljZVN0YXRlRDAsCisJTmRpc0RldmljZVN0YXRlRDEsCisJTmRpc0RldmljZVN0YXRlRDIsCisJTmRpc0RldmljZVN0YXRlRDMKK30gTkRJU19ERVZJQ0VfUE9XRVJfU1RBVEU7CisKK3R5cGVkZWYgc3RydWN0IF9NUF9QT1dFUl9NR01UIHsKKwkvKiB2YXJpYWJsZSBwdXR0aW5nIHRoZSBwaHkgaW50byBjb21hIG1vZGUgd2hlbiBib290IHVwIHdpdGggbm8gY2FibGUKKwkgKiBwbHVnZ2VkIGluIGFmdGVyIDUgc2Vjb25kcworCSAqLworCXU4IFRyYW5zUGh5Q29tYU1vZGVPbkJvb3Q7CisKKwkvKiBBcnJheSBob2xkaW5nIHRoZSBmaXZlIENSQyB2YWx1ZXMgdGhhdCB0aGUgZGV2aWNlIGlzIGN1cnJlbnRseQorCSAqIHVzaW5nIGZvciBXT0wuICBUaGlzIHdpbGwgYmUgcXVlcmllZCB3aGVuIGEgcGF0dGVybiBpcyB0byBiZQorCSAqIHJlbW92ZWQuCisJICovCisJdTMyIGxvY2FsV29sQW5kQ3JjMDsKKwl1MTYgV09MUGF0dGVybkxpc3RbTlVNX1dPTF9QQVRURVJOU107CisJdTggV09MTWFza0xpc3RbTlVNX1dPTF9QQVRURVJOU11bTUFYX1dPTF9NQVNLX1NJWkVdOworCXUzMiBXT0xNYXNrU2l6ZVtOVU1fV09MX1BBVFRFUk5TXTsKKworCS8qIElQIGFkZHJlc3MgKi8KKwl1bmlvbiB7CisJCXUzMiB1MzI7CisJCXU4IHU4WzRdOworCX0gSVBBZGRyZXNzOworCisJLyogQ3VycmVudCBQb3dlciBzdGF0ZSBvZiB0aGUgYWRhcHRlci4gKi8KKwlORElTX0RFVklDRV9QT1dFUl9TVEFURSBQb3dlclN0YXRlOworCWJvb2wgV09MU3RhdGU7CisJYm9vbCBXT0xFbmFibGVkOworCWJvb2wgRmFpbGVkMTBIYWxmOworCWJvb2wgYkZhaWxlZFN0YXRlVHJhbnNpdGlvbjsKKworCS8qIE5leHQgdHdvIHVzZWQgdG8gc2F2ZSBwb3dlciBpbmZvcm1hdGlvbiBhdCBwb3dlciBkb3duLiBUaGlzCisJICogaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGR1cmluZyBwb3dlciB1cCB0byBzZXQgdXAgcGFydHMgb2YgUG93ZXIKKwkgKiBNYW5hZ2VtZW50IGluIEpBR0NvcmUKKwkgKi8KKwl1MzIgdHhfZW47CisJdTMyIHJ4X2VuOworCXUxNiBQb3dlckRvd25TcGVlZDsKKwl1OCBQb3dlckRvd25EdXBsZXg7Cit9IE1QX1BPV0VSX01HTVQsICpQTVBfUE9XRVJfTUdNVDsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICogKCBJUyBUSEVSRSBBIFdBWSBUTyBETyBUSElTIFdJVEggQSBUWVBFREVGPz8/ICkKKyAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCit1MTYgQ2FsY3VsYXRlQ0NJVENSQzE2KHU4ICpQYXR0ZXJuLCB1OCAqTWFzaywgdTMyIE1hc2tTaXplKTsKK3ZvaWQgRW5hYmxlUGh5Q29tYShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBEaXNhYmxlUGh5Q29tYShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisjZW5kaWYgLyogX0VUMTMxMF9QTV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5OGRhNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKQEAgLTAsMCArMSwxMzkxIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9yeC5jIC0gUm91dGluZXMgdXNlZCB0byBwZXJmb3JtIGRhdGEgcmVjZXB0aW9uCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJldDEzMXhfdmVyc2lvbi5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWJ1Zy5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlICJldDEzMTBfcGh5LmgiCisjaW5jbHVkZSAiZXQxMzEwX3BtLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisjaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKworI2luY2x1ZGUgImV0MTMxMF9yeC5oIgorCisvKiBEYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKK2V4dGVybiBkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbzsKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKwordm9pZCBuaWNfcmV0dXJuX3JmZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCBQTVBfUkZEIHBNcFJmZCk7CisKKy8qKgorICogZXQxMzF4X3J4X2RtYV9tZW1vcnlfYWxsb2MKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqCisgKiBBbGxvY2F0ZXMgRnJlZSBidWZmZXIgcmluZyAxIGZvciBzdXJlLCBmcmVlIGJ1ZmZlciByaW5nIDAgaWYgcmVxdWlyZWQsCisgKiBhbmQgdGhlIFBhY2tldCBTdGF0dXMgUmluZy4KKyAqLworaW50IGV0MTMxeF9yeF9kbWFfbWVtb3J5X2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1aW50MzJfdCBPdXRlckxvb3AsIElubmVyTG9vcDsKKwl1aW50MzJfdCBidWZzaXplOworCXVpbnQzMl90IHBrdFN0YXRSaW5nU2l6ZSwgRkJSQ2h1bmtTaXplOworCVJYX1JJTkdfdCAqcnhfcmluZzsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBTZXR1cCBzb21lIGNvbnZlbmllbmNlIHBvaW50ZXJzICovCisJcnhfcmluZyA9IChSWF9SSU5HX3QgKikgJiBhZGFwdGVyLT5SeFJpbmc7CisKKwkvKiBBbGxvYyBtZW1vcnkgZm9yIHRoZSBsb29rdXAgdGFibGUgKi8KKyNpZmRlZiBVU0VfRkJSMAorCXJ4X3JpbmctPkZiclswXSA9IGttYWxsb2Moc2l6ZW9mKEZCUkxPT0tVUFRBQkxFKSwgR0ZQX0tFUk5FTCk7CisjZW5kaWYKKworCXJ4X3JpbmctPkZiclsxXSA9IGttYWxsb2Moc2l6ZW9mKEZCUkxPT0tVUFRBQkxFKSwgR0ZQX0tFUk5FTCk7CisKKwkvKiBUaGUgZmlyc3QgdGhpbmcgd2Ugd2lsbCBkbyBpcyBjb25maWd1cmUgdGhlIHNpemVzIG9mIHRoZSBidWZmZXIKKwkgKiByaW5ncy4gVGhlc2Ugd2lsbCBjaGFuZ2UgYmFzZWQgb24ganVtYm8gcGFja2V0IHN1cHBvcnQuICBMYXJnZXIKKwkgKiBqdW1ibyBwYWNrZXRzIGluY3JlYXNlcyB0aGUgc2l6ZSBvZiBlYWNoIGVudHJ5IGluIEZCUjAsIGFuZCB0aGUKKwkgKiBudW1iZXIgb2YgZW50cmllcyBpbiBGQlIwLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIGRlY3JlYXNpbmcgdGhlCisJICogbnVtYmVyIG9mIGVudHJpZXMgaW4gRkJSMS4KKwkgKgorCSAqIEZCUjEgaG9sZHMgImxhcmdlIiBmcmFtZXMsIEZCUjAgaG9sZHMgInNtYWxsIiBmcmFtZXMuICBJZiBGQlIxCisJICogZW50cmllcyBhcmUgaHVnZSBpbiBvcmRlciB0byBhY2NvbW9kYXRlIGEgImp1bWJvIiBmcmFtZSwgdGhlbiBpdAorCSAqIHdpbGwgaGF2ZSBsZXNzIGVudHJpZXMuICBDb252ZXJzZWx5LCBGQlIxIHdpbGwgbm93IGJlIHJlbGllZCB1cG9uCisJICogdG8gY2FycnkgbW9yZSAibm9ybWFsIiBmcmFtZXMsIHRodXMgaXQncyBlbnRyeSBzaXplIGFsc28gaW5jcmVhc2VzCisJICogYW5kIHRoZSBudW1iZXIgb2YgZW50cmllcyBnb2VzIHVwIHRvbyAoc2luY2UgaXQgbm93IGNhcnJpZXMKKwkgKiAic21hbGwiICsgInJlZ3VsYXIiIHBhY2tldHMuCisJICoKKwkgKiBJbiB0aGlzIHNjaGVtZSwgd2UgdHJ5IHRvIG1haW50YWluIDUxMiBlbnRyaWVzIGJldHdlZW4gdGhlIHR3bworCSAqIHJpbmdzLiBBbHNvLCBGQlIxIHJlbWFpbnMgYSBjb25zdGFudCBzaXplIC0gd2hlbiBpdCdzIHNpemUgZG91YmxlcworCSAqIHRoZSBudW1iZXIgb2YgZW50cmllcyBoYWx2ZXMuICBGQlIwIGluY3JlYXNlcyBpbiBzaXplLCBob3dldmVyLgorCSAqLworCisJaWYgKGFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPCAyMDQ4KSB7CisjaWZkZWYgVVNFX0ZCUjAKKwkJcnhfcmluZy0+RmJyMEJ1ZmZlclNpemUgPSAyNTY7CisJCXJ4X3JpbmctPkZicjBOdW1FbnRyaWVzID0gNTEyOworI2VuZGlmCisJCXJ4X3JpbmctPkZicjFCdWZmZXJTaXplID0gMjA0ODsKKwkJcnhfcmluZy0+RmJyMU51bUVudHJpZXMgPSA1MTI7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5SZWdpc3RyeUp1bWJvUGFja2V0IDwgNDA5NikgeworI2lmZGVmIFVTRV9GQlIwCisJCXJ4X3JpbmctPkZicjBCdWZmZXJTaXplID0gNTEyOworCQlyeF9yaW5nLT5GYnIwTnVtRW50cmllcyA9IDEwMjQ7CisjZW5kaWYKKwkJcnhfcmluZy0+RmJyMUJ1ZmZlclNpemUgPSA0MDk2OworCQlyeF9yaW5nLT5GYnIxTnVtRW50cmllcyA9IDUxMjsKKwl9IGVsc2UgeworI2lmZGVmIFVTRV9GQlIwCisJCXJ4X3JpbmctPkZicjBCdWZmZXJTaXplID0gMTAyNDsKKwkJcnhfcmluZy0+RmJyME51bUVudHJpZXMgPSA3Njg7CisjZW5kaWYKKwkJcnhfcmluZy0+RmJyMUJ1ZmZlclNpemUgPSAxNjM4NDsKKwkJcnhfcmluZy0+RmJyMU51bUVudHJpZXMgPSAxMjg7CisJfQorCisjaWZkZWYgVVNFX0ZCUjAKKwlhZGFwdGVyLT5SeFJpbmcuUHNyTnVtRW50cmllcyA9IGFkYXB0ZXItPlJ4UmluZy5GYnIwTnVtRW50cmllcyArCisJICAgIGFkYXB0ZXItPlJ4UmluZy5GYnIxTnVtRW50cmllczsKKyNlbHNlCisJYWRhcHRlci0+UnhSaW5nLlBzck51bUVudHJpZXMgPSBhZGFwdGVyLT5SeFJpbmcuRmJyMU51bUVudHJpZXM7CisjZW5kaWYKKworCS8qIEFsbG9jYXRlIGFuIGFyZWEgb2YgbWVtb3J5IGZvciBGcmVlIEJ1ZmZlciBSaW5nIDEgKi8KKwlidWZzaXplID0gKHNpemVvZihGQlJfREVTQ190KSAqIHJ4X3JpbmctPkZicjFOdW1FbnRyaWVzKSArIDB4ZmZmOworCXJ4X3JpbmctPnBGYnIxUmluZ1ZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkJCSAgICBidWZzaXplLAorCQkJCQkJICAgICZyeF9yaW5nLT5wRmJyMVJpbmdQYSk7CisJaWYgKCFyeF9yaW5nLT5wRmJyMVJpbmdWYSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciBGcmVlIEJ1ZmZlciBSaW5nIDFcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBTYXZlIHBoeXNpY2FsIGFkZHJlc3MKKwkgKgorCSAqIE5PVEU6IHBjaV9hbGxvY19jb25zaXN0ZW50KCksIHVzZWQgYWJvdmUgdG8gYWxsb2MgRE1BIHJlZ2lvbnMsCisJICogQUxXQVlTIHJldHVybnMgU0FDICgzMi1iaXQpIGFkZHJlc3Nlcy4gSWYgREFDICg2NC1iaXQpIGFkZHJlc3NlcworCSAqIGFyZSBldmVyIHJldHVybmVkLCBtYWtlIHN1cmUgdGhlIGhpZ2ggcGFydCBpcyByZXRyaWV2ZWQgaGVyZQorCSAqIGJlZm9yZSBzdG9yaW5nIHRoZSBhZGp1c3RlZCBhZGRyZXNzLgorCSAqLworCXJ4X3JpbmctPkZicjFSZWFscGEgPSByeF9yaW5nLT5wRmJyMVJpbmdQYTsKKworCS8qIEFsaWduIEZyZWUgQnVmZmVyIFJpbmcgMSBvbiBhIDRLIGJvdW5kYXJ5ICovCisJZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkoYWRhcHRlciwKKwkJCQkgICAgICAmcnhfcmluZy0+RmJyMVJlYWxwYSwKKwkJCQkgICAgICAmcnhfcmluZy0+RmJyMW9mZnNldCwgMHgwRkZGKTsKKworCXJ4X3JpbmctPnBGYnIxUmluZ1ZhID0gKHZvaWQgKikoKHVpbnQ4X3QgKikgcnhfcmluZy0+cEZicjFSaW5nVmEgKworCQkJCQlyeF9yaW5nLT5GYnIxb2Zmc2V0KTsKKworI2lmZGVmIFVTRV9GQlIwCisJLyogQWxsb2NhdGUgYW4gYXJlYSBvZiBtZW1vcnkgZm9yIEZyZWUgQnVmZmVyIFJpbmcgMCAqLworCWJ1ZnNpemUgPSAoc2l6ZW9mKEZCUl9ERVNDX3QpICogcnhfcmluZy0+RmJyME51bUVudHJpZXMpICsgMHhmZmY7CisJcnhfcmluZy0+cEZicjBSaW5nVmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgIGJ1ZnNpemUsCisJCQkJCQkgICAgJnJ4X3JpbmctPnBGYnIwUmluZ1BhKTsKKwlpZiAoIXJ4X3JpbmctPnBGYnIwUmluZ1ZhKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIEZyZWUgQnVmZmVyIFJpbmcgMFxuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFNhdmUgcGh5c2ljYWwgYWRkcmVzcworCSAqCisJICogTk9URTogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSwgdXNlZCBhYm92ZSB0byBhbGxvYyBETUEgcmVnaW9ucywKKwkgKiBBTFdBWVMgcmV0dXJucyBTQUMgKDMyLWJpdCkgYWRkcmVzc2VzLiBJZiBEQUMgKDY0LWJpdCkgYWRkcmVzc2VzCisJICogYXJlIGV2ZXIgcmV0dXJuZWQsIG1ha2Ugc3VyZSB0aGUgaGlnaCBwYXJ0IGlzIHJldHJpZXZlZCBoZXJlIGJlZm9yZQorCSAqIHN0b3JpbmcgdGhlIGFkanVzdGVkIGFkZHJlc3MuCisJICovCisJcnhfcmluZy0+RmJyMFJlYWxwYSA9IHJ4X3JpbmctPnBGYnIwUmluZ1BhOworCisJLyogQWxpZ24gRnJlZSBCdWZmZXIgUmluZyAwIG9uIGEgNEsgYm91bmRhcnkgKi8KKwlldDEzMXhfYWxpZ25fYWxsb2NhdGVkX21lbW9yeShhZGFwdGVyLAorCQkJCSAgICAgICZyeF9yaW5nLT5GYnIwUmVhbHBhLAorCQkJCSAgICAgICZyeF9yaW5nLT5GYnIwb2Zmc2V0LCAweDBGRkYpOworCisJcnhfcmluZy0+cEZicjBSaW5nVmEgPSAodm9pZCAqKSgodWludDhfdCAqKSByeF9yaW5nLT5wRmJyMFJpbmdWYSArCisJCQkJCXJ4X3JpbmctPkZicjBvZmZzZXQpOworI2VuZGlmCisKKwlmb3IgKE91dGVyTG9vcCA9IDA7IE91dGVyTG9vcCA8IChyeF9yaW5nLT5GYnIxTnVtRW50cmllcyAvIEZCUl9DSFVOS1MpOworCSAgICAgT3V0ZXJMb29wKyspIHsKKwkJdWludDY0X3QgRmJyMU9mZnNldDsKKwkJdWludDY0X3QgRmJyMVRlbXBQYTsKKwkJdWludDMyX3QgRmJyMUFsaWduOworCisJCS8qIFRoaXMgY29kZSBhbGxvY2F0ZXMgYW4gYXJlYSBvZiBtZW1vcnkgYmlnIGVub3VnaCBmb3IgTgorCQkgKiBmcmVlIGJ1ZmZlcnMgKyAoYnVmZmVyX3NpemUgLSAxKSBzbyB0aGF0IHRoZSBidWZmZXJzIGNhbgorCQkgKiBiZSBhbGlnbmVkIG9uIDRrIGJvdW5kYXJpZXMuICBJZiBlYWNoIGJ1ZmZlciB3ZXJlIGFsaWduZWQKKwkJICogdG8gYSBidWZmZXJfc2l6ZSBib3VuZGFyeSwgdGhlIGVmZmVjdCB3b3VsZCBiZSB0byBkb3VibGUKKwkJICogdGhlIHNpemUgb2YgRkJSMC4gIEJ5IGFsbG9jYXRpbmcgTiBidWZmZXJzIGF0IG9uY2UsIHdlCisJCSAqIHJlZHVjZSB0aGlzIG92ZXJoZWFkLgorCQkgKi8KKwkJaWYgKHJ4X3JpbmctPkZicjFCdWZmZXJTaXplID4gNDA5NikgeworCQkJRmJyMUFsaWduID0gNDA5NjsKKwkJfSBlbHNlIHsKKwkJCUZicjFBbGlnbiA9IHJ4X3JpbmctPkZicjFCdWZmZXJTaXplOworCQl9CisKKwkJRkJSQ2h1bmtTaXplID0KKwkJICAgIChGQlJfQ0hVTktTICogcnhfcmluZy0+RmJyMUJ1ZmZlclNpemUpICsgRmJyMUFsaWduIC0gMTsKKwkJcnhfcmluZy0+RmJyMU1lbVZhW091dGVyTG9vcF0gPQorCQkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgRkJSQ2h1bmtTaXplLAorCQkJCQkgJnJ4X3JpbmctPkZicjFNZW1QYVtPdXRlckxvb3BdKTsKKworCQlpZiAoIXJ4X3JpbmctPkZicjFNZW1WYVtPdXRlckxvb3BdKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJDb3VsZCBub3QgYWxsb2MgbWVtb3J5XG4iKTsKKwkJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCS8qIFNlZSBOT1RFIGluICJTYXZlIFBoeXNpY2FsIEFkZHJlc3MiIGNvbW1lbnQgYWJvdmUgKi8KKwkJRmJyMVRlbXBQYSA9IHJ4X3JpbmctPkZicjFNZW1QYVtPdXRlckxvb3BdOworCisJCWV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5KGFkYXB0ZXIsCisJCQkJCSAgICAgICZGYnIxVGVtcFBhLAorCQkJCQkgICAgICAmRmJyMU9mZnNldCwgKEZicjFBbGlnbiAtIDEpKTsKKworCQlmb3IgKElubmVyTG9vcCA9IDA7IElubmVyTG9vcCA8IEZCUl9DSFVOS1M7IElubmVyTG9vcCsrKSB7CisJCQl1aW50MzJfdCBpbmRleCA9IChPdXRlckxvb3AgKiBGQlJfQ0hVTktTKSArIElubmVyTG9vcDsKKworCQkJLyogU2F2ZSB0aGUgVmlydHVhbCBhZGRyZXNzIG9mIHRoaXMgaW5kZXggZm9yIHF1aWNrCisJCQkgKiBhY2Nlc3MgbGF0ZXIKKwkJCSAqLworCQkJcnhfcmluZy0+RmJyWzFdLT5WYVtpbmRleF0gPQorCQkJICAgICh1aW50OF90ICopIHJ4X3JpbmctPkZicjFNZW1WYVtPdXRlckxvb3BdICsKKwkJCSAgICAoSW5uZXJMb29wICogcnhfcmluZy0+RmJyMUJ1ZmZlclNpemUpICsgRmJyMU9mZnNldDsKKworCQkJLyogbm93IHN0b3JlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGluIHRoZSBkZXNjcmlwdG9yCisJCQkgKiBzbyB0aGUgZGV2aWNlIGNhbiBhY2Nlc3MgaXQKKwkJCSAqLworCQkJcnhfcmluZy0+RmJyWzFdLT5QQUhpZ2hbaW5kZXhdID0KKwkJCSAgICAodWludDMyX3QpIChGYnIxVGVtcFBhID4+IDMyKTsKKwkJCXJ4X3JpbmctPkZiclsxXS0+UEFMb3dbaW5kZXhdID0gKHVpbnQzMl90KSBGYnIxVGVtcFBhOworCisJCQlGYnIxVGVtcFBhICs9IHJ4X3JpbmctPkZicjFCdWZmZXJTaXplOworCisJCQlyeF9yaW5nLT5GYnJbMV0tPkJ1ZmZlcjFbaW5kZXhdID0KKwkJCSAgICByeF9yaW5nLT5GYnJbMV0tPlZhW2luZGV4XTsKKwkJCXJ4X3JpbmctPkZiclsxXS0+QnVmZmVyMltpbmRleF0gPQorCQkJICAgIHJ4X3JpbmctPkZiclsxXS0+VmFbaW5kZXhdIC0gNDsKKwkJfQorCX0KKworI2lmZGVmIFVTRV9GQlIwCisJLyogU2FtZSBmb3IgRkJSMCAoaWYgaW4gdXNlKSAqLworCWZvciAoT3V0ZXJMb29wID0gMDsgT3V0ZXJMb29wIDwgKHJ4X3JpbmctPkZicjBOdW1FbnRyaWVzIC8gRkJSX0NIVU5LUyk7CisJICAgICBPdXRlckxvb3ArKykgeworCQl1aW50NjRfdCBGYnIwT2Zmc2V0OworCQl1aW50NjRfdCBGYnIwVGVtcFBhOworCisJCUZCUkNodW5rU2l6ZSA9ICgoRkJSX0NIVU5LUyArIDEpICogcnhfcmluZy0+RmJyMEJ1ZmZlclNpemUpIC0gMTsKKwkJcnhfcmluZy0+RmJyME1lbVZhW091dGVyTG9vcF0gPQorCQkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgRkJSQ2h1bmtTaXplLAorCQkJCQkgJnJ4X3JpbmctPkZicjBNZW1QYVtPdXRlckxvb3BdKTsKKworCQlpZiAoIXJ4X3JpbmctPkZicjBNZW1WYVtPdXRlckxvb3BdKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJDb3VsZCBub3QgYWxsb2MgbWVtb3J5XG4iKTsKKwkJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCS8qIFNlZSBOT1RFIGluICJTYXZlIFBoeXNpY2FsIEFkZHJlc3MiIGNvbW1lbnQgYWJvdmUgKi8KKwkJRmJyMFRlbXBQYSA9IHJ4X3JpbmctPkZicjBNZW1QYVtPdXRlckxvb3BdOworCisJCWV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5KGFkYXB0ZXIsCisJCQkJCSAgICAgICZGYnIwVGVtcFBhLAorCQkJCQkgICAgICAmRmJyME9mZnNldCwKKwkJCQkJICAgICAgcnhfcmluZy0+RmJyMEJ1ZmZlclNpemUgLSAxKTsKKworCQlmb3IgKElubmVyTG9vcCA9IDA7IElubmVyTG9vcCA8IEZCUl9DSFVOS1M7IElubmVyTG9vcCsrKSB7CisJCQl1aW50MzJfdCBpbmRleCA9IChPdXRlckxvb3AgKiBGQlJfQ0hVTktTKSArIElubmVyTG9vcDsKKworCQkJcnhfcmluZy0+RmJyWzBdLT5WYVtpbmRleF0gPQorCQkJICAgICh1aW50OF90ICopIHJ4X3JpbmctPkZicjBNZW1WYVtPdXRlckxvb3BdICsKKwkJCSAgICAoSW5uZXJMb29wICogcnhfcmluZy0+RmJyMEJ1ZmZlclNpemUpICsgRmJyME9mZnNldDsKKworCQkJcnhfcmluZy0+RmJyWzBdLT5QQUhpZ2hbaW5kZXhdID0KKwkJCSAgICAodWludDMyX3QpIChGYnIwVGVtcFBhID4+IDMyKTsKKwkJCXJ4X3JpbmctPkZiclswXS0+UEFMb3dbaW5kZXhdID0gKHVpbnQzMl90KSBGYnIwVGVtcFBhOworCisJCQlGYnIwVGVtcFBhICs9IHJ4X3JpbmctPkZicjBCdWZmZXJTaXplOworCisJCQlyeF9yaW5nLT5GYnJbMF0tPkJ1ZmZlcjFbaW5kZXhdID0KKwkJCSAgICByeF9yaW5nLT5GYnJbMF0tPlZhW2luZGV4XTsKKwkJCXJ4X3JpbmctPkZiclswXS0+QnVmZmVyMltpbmRleF0gPQorCQkJICAgIHJ4X3JpbmctPkZiclswXS0+VmFbaW5kZXhdIC0gNDsKKwkJfQorCX0KKyNlbmRpZgorCisJLyogQWxsb2NhdGUgYW4gYXJlYSBvZiBtZW1vcnkgZm9yIEZJRk8gb2YgUGFja2V0IFN0YXR1cyByaW5nIGVudHJpZXMgKi8KKwlwa3RTdGF0UmluZ1NpemUgPQorCSAgICBzaXplb2YoUEtUX1NUQVRfREVTQ190KSAqIGFkYXB0ZXItPlJ4UmluZy5Qc3JOdW1FbnRyaWVzOworCisJcnhfcmluZy0+cFBTUmluZ1ZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkJCSAgcGt0U3RhdFJpbmdTaXplICsgMHgwZmZmLAorCQkJCQkJICAmcnhfcmluZy0+cFBTUmluZ1BhKTsKKworCWlmICghcnhfcmluZy0+cFBTUmluZ1ZhKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIFBhY2tldCBTdGF0dXMgUmluZ1xuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFNhdmUgcGh5c2ljYWwgYWRkcmVzcworCSAqCisJICogTk9URSA6IHBjaV9hbGxvY19jb25zaXN0ZW50KCksIHVzZWQgYWJvdmUgdG8gYWxsb2MgRE1BIHJlZ2lvbnMsCisJICogQUxXQVlTIHJldHVybnMgU0FDICgzMi1iaXQpIGFkZHJlc3Nlcy4gSWYgREFDICg2NC1iaXQpIGFkZHJlc3NlcworCSAqIGFyZSBldmVyIHJldHVybmVkLCBtYWtlIHN1cmUgdGhlIGhpZ2ggcGFydCBpcyByZXRyaWV2ZWQgaGVyZSBiZWZvcmUKKwkgKiBzdG9yaW5nIHRoZSBhZGp1c3RlZCBhZGRyZXNzLgorCSAqLworCXJ4X3JpbmctPnBQU1JpbmdSZWFsUGEgPSByeF9yaW5nLT5wUFNSaW5nUGE7CisKKwkvKiBBbGlnbiBQYWNrZXQgU3RhdHVzIFJpbmcgb24gYSA0SyBib3VuZGFyeSAqLworCWV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5KGFkYXB0ZXIsCisJCQkJICAgICAgJnJ4X3JpbmctPnBQU1JpbmdSZWFsUGEsCisJCQkJICAgICAgJnJ4X3JpbmctPnBQU1JpbmdPZmZzZXQsIDB4MEZGRik7CisKKwlyeF9yaW5nLT5wUFNSaW5nVmEgPSAodm9pZCAqKSgodWludDhfdCAqKSByeF9yaW5nLT5wUFNSaW5nVmEgKworCQkJCSAgICAgIHJ4X3JpbmctPnBQU1JpbmdPZmZzZXQpOworCisJLyogQWxsb2NhdGUgYW4gYXJlYSBvZiBtZW1vcnkgZm9yIHdyaXRlYmFjayBvZiBzdGF0dXMgaW5mb3JtYXRpb24gKi8KKwlyeF9yaW5nLT5wUnhTdGF0dXNWYSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgc2l6ZW9mKFJYX1NUQVRVU19CTE9DS190KSArCisJCQkJCQkgICAgMHg3LCAmcnhfcmluZy0+cFJ4U3RhdHVzUGEpOworCWlmICghcnhfcmluZy0+cFJ4U3RhdHVzVmEpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgU3RhdHVzIEJsb2NrXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogU2F2ZSBwaHlzaWNhbCBhZGRyZXNzICovCisJcnhfcmluZy0+UnhTdGF0dXNSZWFsUEEgPSByeF9yaW5nLT5wUnhTdGF0dXNQYTsKKworCS8qIEFsaWduIHdyaXRlIGJhY2sgb24gYW4gOCBieXRlIGJvdW5kYXJ5ICovCisJZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkoYWRhcHRlciwKKwkJCQkgICAgICAmcnhfcmluZy0+UnhTdGF0dXNSZWFsUEEsCisJCQkJICAgICAgJnJ4X3JpbmctPlJ4U3RhdHVzT2Zmc2V0LCAweDA3KTsKKworCXJ4X3JpbmctPnBSeFN0YXR1c1ZhID0gKHZvaWQgKikoKHVpbnQ4X3QgKikgcnhfcmluZy0+cFJ4U3RhdHVzVmEgKworCQkJCQlyeF9yaW5nLT5SeFN0YXR1c09mZnNldCk7CisJcnhfcmluZy0+TnVtUmZkID0gTklDX0RFRkFVTFRfTlVNX1JGRDsKKworCS8qIFJlY3YKKwkgKiBwY2lfcG9vbF9jcmVhdGUgaW5pdGlhbGl6ZXMgYSBsb29rYXNpZGUgbGlzdC4gQWZ0ZXIgc3VjY2Vzc2Z1bAorCSAqIGNyZWF0aW9uLCBub25wYWdlZCBmaXhlZC1zaXplIGJsb2NrcyBjYW4gYmUgYWxsb2NhdGVkIGZyb20gYW5kCisJICogZnJlZWQgdG8gdGhlIGxvb2thc2lkZSBsaXN0LgorCSAqIFJGRHMgd2lsbCBiZSBhbGxvY2F0ZWQgZnJvbSB0aGlzIHBvb2wuCisJICovCisJcnhfcmluZy0+UmVjdkxvb2thc2lkZSA9IGttZW1fY2FjaGVfY3JlYXRlKGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJCQkJCSAgIHNpemVvZihNUF9SRkQpLAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIFNMQUJfQ0FDSEVfRE1BIHwKKwkJCQkJCSAgIFNMQUJfSFdDQUNIRV9BTElHTiwKKwkJCQkJCSAgIE5VTEwpOworCisJTVBfU0VUX0ZMQUcoYWRhcHRlciwgZk1QX0FEQVBURVJfUkVDVl9MT09LQVNJREUpOworCisJLyogVGhlIFJGRHMgYXJlIGdvaW5nIHRvIGJlIHB1dCBvbiBsaXN0cyBsYXRlciBvbiwgc28gaW5pdGlhbGl6ZSB0aGUKKwkgKiBsaXN0cyBub3cuCisJICovCisJSU5JVF9MSVNUX0hFQUQoJnJ4X3JpbmctPlJlY3ZMaXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcnhfcmluZy0+UmVjdlBlbmRpbmdMaXN0KTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZXQxMzF4X3J4X2RtYV9tZW1vcnlfZnJlZSAtIEZyZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgd2l0aGluIHRoaXMgbW9kdWxlLgorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBldDEzMXhfcnhfZG1hX21lbW9yeV9mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1aW50MzJfdCBpbmRleDsKKwl1aW50MzJfdCBidWZzaXplOworCXVpbnQzMl90IHBrdFN0YXRSaW5nU2l6ZTsKKwlQTVBfUkZEIHBNcFJmZDsKKwlSWF9SSU5HX3QgKnJ4X3Jpbmc7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogU2V0dXAgc29tZSBjb252ZW5pZW5jZSBwb2ludGVycyAqLworCXJ4X3JpbmcgPSAoUlhfUklOR190ICopICYgYWRhcHRlci0+UnhSaW5nOworCisJLyogRnJlZSBSRkRzIGFuZCBhc3NvY2lhdGVkIHBhY2tldCBkZXNjcmlwdG9ycyAqLworCURCR19BU1NFUlQocnhfcmluZy0+blJlYWR5UmVjdiA9PSByeF9yaW5nLT5OdW1SZmQpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZyeF9yaW5nLT5SZWN2TGlzdCkpIHsKKwkJcE1wUmZkID0gKE1QX1JGRCAqKSBsaXN0X2VudHJ5KHJ4X3JpbmctPlJlY3ZMaXN0Lm5leHQsCisJCQkJCSAgICAgICBNUF9SRkQsIGxpc3Rfbm9kZSk7CisKKwkJbGlzdF9kZWwoJnBNcFJmZC0+bGlzdF9ub2RlKTsKKwkJZXQxMzF4X3JmZF9yZXNvdXJjZXNfZnJlZShhZGFwdGVyLCBwTXBSZmQpOworCX0KKworCXdoaWxlICghbGlzdF9lbXB0eSgmcnhfcmluZy0+UmVjdlBlbmRpbmdMaXN0KSkgeworCQlwTXBSZmQgPSAoTVBfUkZEICopIGxpc3RfZW50cnkocnhfcmluZy0+UmVjdlBlbmRpbmdMaXN0Lm5leHQsCisJCQkJCSAgICAgICBNUF9SRkQsIGxpc3Rfbm9kZSk7CisJCWxpc3RfZGVsKCZwTXBSZmQtPmxpc3Rfbm9kZSk7CisJCWV0MTMxeF9yZmRfcmVzb3VyY2VzX2ZyZWUoYWRhcHRlciwgcE1wUmZkKTsKKwl9CisKKwkvKiBGcmVlIEZyZWUgQnVmZmVyIFJpbmcgMSAqLworCWlmIChyeF9yaW5nLT5wRmJyMVJpbmdWYSkgeworCQkvKiBGaXJzdCB0aGUgcGFja2V0IG1lbW9yeSAqLworCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPAorCQkgICAgIChyeF9yaW5nLT5GYnIxTnVtRW50cmllcyAvIEZCUl9DSFVOS1MpOyBpbmRleCsrKSB7CisJCQlpZiAocnhfcmluZy0+RmJyMU1lbVZhW2luZGV4XSkgeworCQkJCXVpbnQzMl90IEZicjFBbGlnbjsKKworCQkJCWlmIChyeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZSA+IDQwOTYpIHsKKwkJCQkJRmJyMUFsaWduID0gNDA5NjsKKwkJCQl9IGVsc2UgeworCQkJCQlGYnIxQWxpZ24gPSByeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZTsKKwkJCQl9CisKKwkJCQlidWZzaXplID0KKwkJCQkgICAgKHJ4X3JpbmctPkZicjFCdWZmZXJTaXplICogRkJSX0NIVU5LUykgKworCQkJCSAgICBGYnIxQWxpZ24gLSAxOworCisJCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgIGJ1ZnNpemUsCisJCQkJCQkgICAgcnhfcmluZy0+RmJyMU1lbVZhW2luZGV4XSwKKwkJCQkJCSAgICByeF9yaW5nLT5GYnIxTWVtUGFbaW5kZXhdKTsKKworCQkJCXJ4X3JpbmctPkZicjFNZW1WYVtpbmRleF0gPSBOVUxMOworCQkJfQorCQl9CisKKwkJLyogTm93IHRoZSBGSUZPIGl0c2VsZiAqLworCQlyeF9yaW5nLT5wRmJyMVJpbmdWYSA9ICh2b2lkICopKCh1aW50OF90ICopIHJ4X3JpbmctPnBGYnIxUmluZ1ZhIC0KKwkJCQkJCXJ4X3JpbmctPkZicjFvZmZzZXQpOworCisJCWJ1ZnNpemUgPQorCQkgICAgKHNpemVvZihGQlJfREVTQ190KSAqIHJ4X3JpbmctPkZicjFOdW1FbnRyaWVzKSArIDB4ZmZmOworCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkgICAgYnVmc2l6ZSwKKwkJCQkgICAgcnhfcmluZy0+cEZicjFSaW5nVmEsIHJ4X3JpbmctPnBGYnIxUmluZ1BhKTsKKworCQlyeF9yaW5nLT5wRmJyMVJpbmdWYSA9IE5VTEw7CisJfQorCisjaWZkZWYgVVNFX0ZCUjAKKwkvKiBOb3cgdGhlIHNhbWUgZm9yIEZyZWUgQnVmZmVyIFJpbmcgMCAqLworCWlmIChyeF9yaW5nLT5wRmJyMFJpbmdWYSkgeworCQkvKiBGaXJzdCB0aGUgcGFja2V0IG1lbW9yeSAqLworCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPAorCQkgICAgIChyeF9yaW5nLT5GYnIwTnVtRW50cmllcyAvIEZCUl9DSFVOS1MpOyBpbmRleCsrKSB7CisJCQlpZiAocnhfcmluZy0+RmJyME1lbVZhW2luZGV4XSkgeworCQkJCWJ1ZnNpemUgPQorCQkJCSAgICAocnhfcmluZy0+RmJyMEJ1ZmZlclNpemUgKgorCQkJCSAgICAgKEZCUl9DSFVOS1MgKyAxKSkgLSAxOworCisJCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgIGJ1ZnNpemUsCisJCQkJCQkgICAgcnhfcmluZy0+RmJyME1lbVZhW2luZGV4XSwKKwkJCQkJCSAgICByeF9yaW5nLT5GYnIwTWVtUGFbaW5kZXhdKTsKKworCQkJCXJ4X3JpbmctPkZicjBNZW1WYVtpbmRleF0gPSBOVUxMOworCQkJfQorCQl9CisKKwkJLyogTm93IHRoZSBGSUZPIGl0c2VsZiAqLworCQlyeF9yaW5nLT5wRmJyMFJpbmdWYSA9ICh2b2lkICopKCh1aW50OF90ICopIHJ4X3JpbmctPnBGYnIwUmluZ1ZhIC0KKwkJCQkJCXJ4X3JpbmctPkZicjBvZmZzZXQpOworCisJCWJ1ZnNpemUgPQorCQkgICAgKHNpemVvZihGQlJfREVTQ190KSAqIHJ4X3JpbmctPkZicjBOdW1FbnRyaWVzKSArIDB4ZmZmOworCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkgICAgYnVmc2l6ZSwKKwkJCQkgICAgcnhfcmluZy0+cEZicjBSaW5nVmEsIHJ4X3JpbmctPnBGYnIwUmluZ1BhKTsKKworCQlyeF9yaW5nLT5wRmJyMFJpbmdWYSA9IE5VTEw7CisJfQorI2VuZGlmCisKKwkvKiBGcmVlIFBhY2tldCBTdGF0dXMgUmluZyAqLworCWlmIChyeF9yaW5nLT5wUFNSaW5nVmEpIHsKKwkJcnhfcmluZy0+cFBTUmluZ1ZhID0gKHZvaWQgKikoKHVpbnQ4X3QgKikgcnhfcmluZy0+cFBTUmluZ1ZhIC0KKwkJCQkJICAgICAgcnhfcmluZy0+cFBTUmluZ09mZnNldCk7CisKKwkJcGt0U3RhdFJpbmdTaXplID0KKwkJICAgIHNpemVvZihQS1RfU1RBVF9ERVNDX3QpICogYWRhcHRlci0+UnhSaW5nLlBzck51bUVudHJpZXM7CisKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCSAgICBwa3RTdGF0UmluZ1NpemUgKyAweDBmZmYsCisJCQkJICAgIHJ4X3JpbmctPnBQU1JpbmdWYSwgcnhfcmluZy0+cFBTUmluZ1BhKTsKKworCQlyeF9yaW5nLT5wUFNSaW5nVmEgPSBOVUxMOworCX0KKworCS8qIEZyZWUgYXJlYSBvZiBtZW1vcnkgZm9yIHRoZSB3cml0ZWJhY2sgb2Ygc3RhdHVzIGluZm9ybWF0aW9uICovCisJaWYgKHJ4X3JpbmctPnBSeFN0YXR1c1ZhKSB7CisJCXJ4X3JpbmctPnBSeFN0YXR1c1ZhID0gKHZvaWQgKikoKHVpbnQ4X3QgKikgcnhfcmluZy0+cFJ4U3RhdHVzVmEgLQorCQkJCQkJcnhfcmluZy0+UnhTdGF0dXNPZmZzZXQpOworCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkgICAgc2l6ZW9mKFJYX1NUQVRVU19CTE9DS190KSArIDB4NywKKwkJCQkgICAgcnhfcmluZy0+cFJ4U3RhdHVzVmEsIHJ4X3JpbmctPnBSeFN0YXR1c1BhKTsKKworCQlyeF9yaW5nLT5wUnhTdGF0dXNWYSA9IE5VTEw7CisJfQorCisJLyogRnJlZSByZWNlaXZlIGJ1ZmZlciBwb29sICovCisKKwkvKiBGcmVlIHJlY2VpdmUgcGFja2V0IHBvb2wgKi8KKworCS8qIERlc3Ryb3kgdGhlIGxvb2thc2lkZSAoUkZEKSBwb29sICovCisJaWYgKE1QX1RFU1RfRkxBRyhhZGFwdGVyLCBmTVBfQURBUFRFUl9SRUNWX0xPT0tBU0lERSkpIHsKKwkJa21lbV9jYWNoZV9kZXN0cm95KHJ4X3JpbmctPlJlY3ZMb29rYXNpZGUpOworCQlNUF9DTEVBUl9GTEFHKGFkYXB0ZXIsIGZNUF9BREFQVEVSX1JFQ1ZfTE9PS0FTSURFKTsKKwl9CisKKwkvKiBGcmVlIHRoZSBGQlIgTG9va3VwIFRhYmxlICovCisjaWZkZWYgVVNFX0ZCUjAKKwlrZnJlZShyeF9yaW5nLT5GYnJbMF0pOworI2VuZGlmCisKKwlrZnJlZShyeF9yaW5nLT5GYnJbMV0pOworCisJLyogUmVzZXQgQ291bnRlcnMgKi8KKwlyeF9yaW5nLT5uUmVhZHlSZWN2ID0gMDsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X2luaXRfcmVjdiAtIEluaXRpYWxpemUgcmVjZWl2ZSBkYXRhIHN0cnVjdHVyZXMuCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBldDEzMXhfaW5pdF9yZWN2KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzID0gLUVOT01FTTsKKwlQTVBfUkZEIHBNcFJmZCA9IE5VTEw7CisJdWludDMyX3QgUmZkQ291bnQ7CisJdWludDMyX3QgVG90YWxOdW1SZmQgPSAwOworCVJYX1JJTkdfdCAqcnhfcmluZyA9IE5VTEw7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogU2V0dXAgc29tZSBjb252ZW5pZW5jZSBwb2ludGVycyAqLworCXJ4X3JpbmcgPSAoUlhfUklOR190ICopICYgYWRhcHRlci0+UnhSaW5nOworCisJLyogU2V0dXAgZWFjaCBSRkQgKi8KKwlmb3IgKFJmZENvdW50ID0gMDsgUmZkQ291bnQgPCByeF9yaW5nLT5OdW1SZmQ7IFJmZENvdW50KyspIHsKKwkJcE1wUmZkID0gKE1QX1JGRCAqKSBrbWVtX2NhY2hlX2FsbG9jKHJ4X3JpbmctPlJlY3ZMb29rYXNpZGUsCisJCQkJCQkgICAgIEdGUF9BVE9NSUMgfCBHRlBfRE1BKTsKKworCQlpZiAoIXBNcFJmZCkgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgIkNvdWxkbid0IGFsbG9jIFJGRCBvdXQgb2Yga21lbV9jYWNoZVxuIik7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJY29udGludWU7CisJCX0KKworCQlzdGF0dXMgPSBldDEzMXhfcmZkX3Jlc291cmNlc19hbGxvYyhhZGFwdGVyLCBwTXBSZmQpOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCQkgICJDb3VsZG4ndCBhbGxvYyBwYWNrZXQgZm9yIFJGRFxuIik7CisJCQlrbWVtX2NhY2hlX2ZyZWUocnhfcmluZy0+UmVjdkxvb2thc2lkZSwgcE1wUmZkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogQWRkIHRoaXMgUkZEIHRvIHRoZSBSZWN2TGlzdCAqLworCQlsaXN0X2FkZF90YWlsKCZwTXBSZmQtPmxpc3Rfbm9kZSwgJnJ4X3JpbmctPlJlY3ZMaXN0KTsKKworCQkvKiBJbmNyZW1lbnQgYm90aCB0aGUgYXZhaWxhYmxlIFJGRCdzLCBhbmQgdGhlIHRvdGFsIFJGRCdzLiAqLworCQlyeF9yaW5nLT5uUmVhZHlSZWN2Kys7CisJCVRvdGFsTnVtUmZkKys7CisJfQorCisJaWYgKFRvdGFsTnVtUmZkID4gTklDX01JTl9OVU1fUkZEKSB7CisJCXN0YXR1cyA9IDA7CisJfQorCisJcnhfcmluZy0+TnVtUmZkID0gVG90YWxOdW1SZmQ7CisKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJa21lbV9jYWNoZV9mcmVlKHJ4X3JpbmctPlJlY3ZMb29rYXNpZGUsIHBNcFJmZCk7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkFsbG9jYXRpb24gcHJvYmxlbXMgaW4gZXQxMzF4X2luaXRfcmVjdlxuIik7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGV0MTMxeF9yZmRfcmVzb3VyY2VzX2FsbG9jCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICogQHBNcFJmZDogcG9pbnRlciB0byBhIFJGRAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBldDEzMXhfcmZkX3Jlc291cmNlc19hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIE1QX1JGRCAqcE1wUmZkKQoreworCXBNcFJmZC0+UGFja2V0ID0gTlVMTDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGV0MTMxeF9yZmRfcmVzb3VyY2VzX2ZyZWUgLSBGcmVlIHRoZSBwYWNrZXQgYWxsb2NhdGVkIGZvciB0aGUgZ2l2ZW4gUkZECisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICogQHBNcFJmZDogcG9pbnRlciB0byBhIFJGRAorICovCit2b2lkIGV0MTMxeF9yZmRfcmVzb3VyY2VzX2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCBNUF9SRkQgKnBNcFJmZCkKK3sKKwlwTXBSZmQtPlBhY2tldCA9IE5VTEw7CisJa21lbV9jYWNoZV9mcmVlKGFkYXB0ZXItPlJ4UmluZy5SZWN2TG9va2FzaWRlLCBwTXBSZmQpOworfQorCisvKioKKyAqIENvbmZpZ1J4RG1hUmVncyAtIFN0YXJ0IG9mIFJ4X0RNQSBpbml0IHNlcXVlbmNlCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgQ29uZmlnUnhEbWFSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9SWERNQV90IF9faW9tZW0gKnBSeERtYSA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWE7CisJc3RydWN0IF9yeF9yaW5nX3QgKnBSeExvY2FsID0gJnBBZGFwdGVyLT5SeFJpbmc7CisJUEZCUl9ERVNDX3QgcEZickVudHJ5OworCXVpbnQzMl90IGlFbnRyeTsKKwlSWERNQV9QU1JfTlVNX0RFU190IHBzcl9udW1fZGVzOworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIEhhbHQgUlhETUEgdG8gcGVyZm9ybSB0aGUgcmVjb25maWd1cmUuICAqLworCWV0MTMxeF9yeF9kbWFfZGlzYWJsZShwQWRhcHRlcik7CisKKwkvKiBMb2FkIHRoZSBjb21wbGV0aW9uIHdyaXRlYmFjayBwaHlzaWNhbCBhZGRyZXNzCisJICoKKwkgKiBOT1RFIDogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSwgdXNlZCBhYm92ZSB0byBhbGxvYyBETUEgcmVnaW9ucywKKwkgKiBBTFdBWVMgcmV0dXJucyBTQUMgKDMyLWJpdCkgYWRkcmVzc2VzLiBJZiBEQUMgKDY0LWJpdCkgYWRkcmVzc2VzCisJICogYXJlIGV2ZXIgcmV0dXJuZWQsIG1ha2Ugc3VyZSB0aGUgaGlnaCBwYXJ0IGlzIHJldHJpZXZlZCBoZXJlCisJICogYmVmb3JlIHN0b3JpbmcgdGhlIGFkanVzdGVkIGFkZHJlc3MuCisJICovCisJd3JpdGVsKCh1aW50MzJfdCkgKHBSeExvY2FsLT5SeFN0YXR1c1JlYWxQQSA+PiAzMiksCisJICAgICAgICZwUnhEbWEtPmRtYV93Yl9iYXNlX2hpKTsKKwl3cml0ZWwoKHVpbnQzMl90KSBwUnhMb2NhbC0+UnhTdGF0dXNSZWFsUEEsICZwUnhEbWEtPmRtYV93Yl9iYXNlX2xvKTsKKworCW1lbXNldChwUnhMb2NhbC0+cFJ4U3RhdHVzVmEsIDAsIHNpemVvZihSWF9TVEFUVVNfQkxPQ0tfdCkpOworCisJLyogU2V0IHRoZSBhZGRyZXNzIGFuZCBwYXJhbWV0ZXJzIG9mIHRoZSBwYWNrZXQgc3RhdHVzIHJpbmcgaW50byB0aGUKKwkgKiAxMzEwJ3MgcmVnaXN0ZXJzCisJICovCisJd3JpdGVsKCh1aW50MzJfdCkgKHBSeExvY2FsLT5wUFNSaW5nUmVhbFBhID4+IDMyKSwKKwkgICAgICAgJnBSeERtYS0+cHNyX2Jhc2VfaGkpOworCXdyaXRlbCgodWludDMyX3QpIHBSeExvY2FsLT5wUFNSaW5nUmVhbFBhLCAmcFJ4RG1hLT5wc3JfYmFzZV9sbyk7CisJd3JpdGVsKHBSeExvY2FsLT5Qc3JOdW1FbnRyaWVzIC0gMSwgJnBSeERtYS0+cHNyX251bV9kZXMudmFsdWUpOworCXdyaXRlbCgwLCAmcFJ4RG1hLT5wc3JfZnVsbF9vZmZzZXQudmFsdWUpOworCisJcHNyX251bV9kZXMudmFsdWUgPSByZWFkbCgmcFJ4RG1hLT5wc3JfbnVtX2Rlcy52YWx1ZSk7CisJd3JpdGVsKChwc3JfbnVtX2Rlcy5iaXRzLnBzcl9uZGVzICogTE9fTUFSS19QRVJDRU5UX0ZPUl9QU1IpIC8gMTAwLAorCSAgICAgICAmcFJ4RG1hLT5wc3JfbWluX2Rlcy52YWx1ZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlJjdkxvY2ssIGxvY2tmbGFncyk7CisKKwkvKiBUaGVzZSBsb2NhbCB2YXJpYWJsZXMgdHJhY2sgdGhlIFBTUiBpbiB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KKwlwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwuYml0cy5wc3JfZnVsbCA9IDA7CisJcFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLmJpdHMucHNyX2Z1bGxfd3JhcCA9IDA7CisKKwkvKiBOb3cncyB0aGUgYmVzdCB0aW1lIHRvIGluaXRpYWxpemUgRkJSMSBjb250ZW50cyAqLworCXBGYnJFbnRyeSA9IChQRkJSX0RFU0NfdCkgcFJ4TG9jYWwtPnBGYnIxUmluZ1ZhOworCWZvciAoaUVudHJ5ID0gMDsgaUVudHJ5IDwgcFJ4TG9jYWwtPkZicjFOdW1FbnRyaWVzOyBpRW50cnkrKykgeworCQlwRmJyRW50cnktPmFkZHJfaGkgPSBwUnhMb2NhbC0+RmJyWzFdLT5QQUhpZ2hbaUVudHJ5XTsKKwkJcEZickVudHJ5LT5hZGRyX2xvID0gcFJ4TG9jYWwtPkZiclsxXS0+UEFMb3dbaUVudHJ5XTsKKwkJcEZickVudHJ5LT53b3JkMi5iaXRzLmJpID0gaUVudHJ5OworCQlwRmJyRW50cnkrKzsKKwl9CisKKwkvKiBTZXQgdGhlIGFkZHJlc3MgYW5kIHBhcmFtZXRlcnMgb2YgRnJlZSBidWZmZXIgcmluZyAxIChhbmQgMCBpZgorCSAqIHJlcXVpcmVkKSBpbnRvIHRoZSAxMzEwJ3MgcmVnaXN0ZXJzCisJICovCisJd3JpdGVsKCh1aW50MzJfdCkgKHBSeExvY2FsLT5GYnIxUmVhbHBhID4+IDMyKSwgJnBSeERtYS0+ZmJyMV9iYXNlX2hpKTsKKwl3cml0ZWwoKHVpbnQzMl90KSBwUnhMb2NhbC0+RmJyMVJlYWxwYSwgJnBSeERtYS0+ZmJyMV9iYXNlX2xvKTsKKwl3cml0ZWwocFJ4TG9jYWwtPkZicjFOdW1FbnRyaWVzIC0gMSwgJnBSeERtYS0+ZmJyMV9udW1fZGVzLnZhbHVlKTsKKworCXsKKwkJRE1BMTBXX3QgZmJyMV9mdWxsID0geyAwIH07CisKKwkJZmJyMV9mdWxsLmJpdHMudmFsID0gMDsKKwkJZmJyMV9mdWxsLmJpdHMud3JhcCA9IDE7CisJCXdyaXRlbChmYnIxX2Z1bGwudmFsdWUsICZwUnhEbWEtPmZicjFfZnVsbF9vZmZzZXQudmFsdWUpOworCX0KKworCS8qIFRoaXMgdmFyaWFibGUgdHJhY2tzIHRoZSBmcmVlIGJ1ZmZlciByaW5nIDEgZnVsbCBwb3NpdGlvbiwgc28gaXQKKwkgKiBoYXMgdG8gbWF0Y2ggdGhlIGFib3ZlLgorCSAqLworCXBSeExvY2FsLT5sb2NhbF9GYnIxX2Z1bGwuYml0cy52YWwgPSAwOworCXBSeExvY2FsLT5sb2NhbF9GYnIxX2Z1bGwuYml0cy53cmFwID0gMTsKKwl3cml0ZWwoKChwUnhMb2NhbC0+RmJyMU51bUVudHJpZXMgKiBMT19NQVJLX1BFUkNFTlRfRk9SX1JYKSAvIDEwMCkgLSAxLAorCSAgICAgICAmcFJ4RG1hLT5mYnIxX21pbl9kZXMudmFsdWUpOworCisjaWZkZWYgVVNFX0ZCUjAKKwkvKiBOb3cncyB0aGUgYmVzdCB0aW1lIHRvIGluaXRpYWxpemUgRkJSMCBjb250ZW50cyAqLworCXBGYnJFbnRyeSA9IChQRkJSX0RFU0NfdCkgcFJ4TG9jYWwtPnBGYnIwUmluZ1ZhOworCWZvciAoaUVudHJ5ID0gMDsgaUVudHJ5IDwgcFJ4TG9jYWwtPkZicjBOdW1FbnRyaWVzOyBpRW50cnkrKykgeworCQlwRmJyRW50cnktPmFkZHJfaGkgPSBwUnhMb2NhbC0+RmJyWzBdLT5QQUhpZ2hbaUVudHJ5XTsKKwkJcEZickVudHJ5LT5hZGRyX2xvID0gcFJ4TG9jYWwtPkZiclswXS0+UEFMb3dbaUVudHJ5XTsKKwkJcEZickVudHJ5LT53b3JkMi5iaXRzLmJpID0gaUVudHJ5OworCQlwRmJyRW50cnkrKzsKKwl9CisKKwl3cml0ZWwoKHVpbnQzMl90KSAocFJ4TG9jYWwtPkZicjBSZWFscGEgPj4gMzIpLCAmcFJ4RG1hLT5mYnIwX2Jhc2VfaGkpOworCXdyaXRlbCgodWludDMyX3QpIHBSeExvY2FsLT5GYnIwUmVhbHBhLCAmcFJ4RG1hLT5mYnIwX2Jhc2VfbG8pOworCXdyaXRlbChwUnhMb2NhbC0+RmJyME51bUVudHJpZXMgLSAxLCAmcFJ4RG1hLT5mYnIwX251bV9kZXMudmFsdWUpOworCisJeworCQlETUExMFdfdCBmYnIwX2Z1bGwgPSB7IDAgfTsKKworCQlmYnIwX2Z1bGwuYml0cy52YWwgPSAwOworCQlmYnIwX2Z1bGwuYml0cy53cmFwID0gMTsKKwkJd3JpdGVsKGZicjBfZnVsbC52YWx1ZSwgJnBSeERtYS0+ZmJyMF9mdWxsX29mZnNldC52YWx1ZSk7CisJfQorCisJLyogVGhpcyB2YXJpYWJsZSB0cmFja3MgdGhlIGZyZWUgYnVmZmVyIHJpbmcgMCBmdWxsIHBvc2l0aW9uLCBzbyBpdAorCSAqIGhhcyB0byBtYXRjaCB0aGUgYWJvdmUuCisJICovCisJcFJ4TG9jYWwtPmxvY2FsX0ZicjBfZnVsbC5iaXRzLnZhbCA9IDA7CisJcFJ4TG9jYWwtPmxvY2FsX0ZicjBfZnVsbC5iaXRzLndyYXAgPSAxOworCXdyaXRlbCgoKHBSeExvY2FsLT5GYnIwTnVtRW50cmllcyAqIExPX01BUktfUEVSQ0VOVF9GT1JfUlgpIC8gMTAwKSAtIDEsCisJICAgICAgICZwUnhEbWEtPmZicjBfbWluX2Rlcy52YWx1ZSk7CisjZW5kaWYKKworCS8qIFByb2dyYW0gdGhlIG51bWJlciBvZiBwYWNrZXRzIHdlIHdpbGwgcmVjZWl2ZSBiZWZvcmUgZ2VuZXJhdGluZyBhbgorCSAqIGludGVycnVwdC4KKwkgKiBGb3IgdmVyc2lvbiBCIHNpbGljb24sIHRoaXMgdmFsdWUgZ2V0cyB1cGRhdGVkIG9uY2UgYXV0b25lZyBpcworCSAqY29tcGxldGUuCisJICovCisJd3JpdGVsKHBBZGFwdGVyLT5SZWdpc3RyeVJ4TnVtQnVmZmVycywgJnBSeERtYS0+bnVtX3BrdF9kb25lLnZhbHVlKTsKKworCS8qIFRoZSAidGltZV9kb25lIiBpcyBub3Qgd29ya2luZyBjb3JyZWN0bHkgdG8gY29hbGVzY2UgaW50ZXJydXB0cworCSAqIGFmdGVyIGEgZ2l2ZW4gdGltZSBwZXJpb2QsIGJ1dCByYXRoZXIgaXMgZ2l2aW5nIHVzIGFuIGludGVycnVwdAorCSAqIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBoYXZlIHJlY2VpdmVkIHBhY2tldHMuCisJICogVGhpcyB2YWx1ZSBnZXRzIHVwZGF0ZWQgb25jZSBhdXRvbmVnIGlzIGNvbXBsZXRlLgorCSAqLworCXdyaXRlbChwQWRhcHRlci0+UmVnaXN0cnlSeFRpbWVJbnRlcnZhbCwgJnBSeERtYS0+bWF4X3BrdF90aW1lLnZhbHVlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5SY3ZMb2NrLCBsb2NrZmxhZ3MpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBTZXRSeERtYVRpbWVyIC0gU2V0IHRoZSBoZWFydGJlYXQgdGltZXIgYWNjb3JkaW5nIHRvIGxpbmUgcmF0ZS4KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBTZXRSeERtYVRpbWVyKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJLyogRm9yIHZlcnNpb24gQiBzaWxpY29uLCB3ZSBkbyBub3QgdXNlIHRoZSBSeERNQSB0aW1lciBmb3IgMTAgYW5kIDEwMAorCSAqIE1iaXRzL3MgbGluZSByYXRlcy4gV2UgZG8gbm90IGVuYWJsZSBhbmQgUnhETUEgaW50ZXJydXB0IGNvYWxlc2NpbmcuCisJICovCisJaWYgKChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xMDBNQlBTKSB8fAorCSAgICAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTBNQlBTKSkgeworCQl3cml0ZWwoMCwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYS5tYXhfcGt0X3RpbWUudmFsdWUpOworCQl3cml0ZWwoMSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYS5udW1fcGt0X2RvbmUudmFsdWUpOworCX0KK30KKworLyoqCisgKiBldDEzMXhfcnhfZG1hX2Rpc2FibGUgLSBTdG9wIG9mIFJ4X0RNQSBvbiB0aGUgRVQxMzEwCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgZXQxMzF4X3J4X2RtYV9kaXNhYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJUlhETUFfQ1NSX3QgY3NyOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFNldHVwIHRoZSByZWNlaXZlIGRtYSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisJd3JpdGVsKDB4MDAwMDIwMDEsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWEuY3NyLnZhbHVlKTsKKwljc3IudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLmNzci52YWx1ZSk7CisJaWYgKGNzci5iaXRzLmhhbHRfc3RhdHVzICE9IDEpIHsKKwkJdWRlbGF5KDUpOworCQljc3IudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLmNzci52YWx1ZSk7CisJCWlmIChjc3IuYml0cy5oYWx0X3N0YXR1cyAhPSAxKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiUlggRG1hIGZhaWxlZCB0byBlbnRlciBoYWx0IHN0YXRlLiBDU1IgMHglMDh4XG4iLAorCQkJCSAgY3NyLnZhbHVlKTsKKwkJfQorCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X3J4X2RtYV9lbmFibGUgLSByZS1zdGFydCBvZiBSeF9ETUEgb24gdGhlIEVUMTMxMC4KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBldDEzMXhfcnhfZG1hX2VuYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19SWF9FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5UGh5TG9vcGJrKSB7CisJLyogUnhETUEgaXMgZGlzYWJsZWQgZm9yIGxvb3BiYWNrIG9wZXJhdGlvbi4gKi8KKwkJd3JpdGVsKDB4MSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYS5jc3IudmFsdWUpOworCX0gZWxzZSB7CisJLyogU2V0dXAgdGhlIHJlY2VpdmUgZG1hIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgZm9yIG5vcm1hbCBvcGVyYXRpb24gKi8KKwkJUlhETUFfQ1NSX3QgY3NyID0geyAwIH07CisKKwkJY3NyLmJpdHMuZmJyMV9lbmFibGUgPSAxOworCQlpZiAocEFkYXB0ZXItPlJ4UmluZy5GYnIxQnVmZmVyU2l6ZSA9PSA0MDk2KSB7CisJCQljc3IuYml0cy5mYnIxX3NpemUgPSAxOworCQl9IGVsc2UgaWYgKHBBZGFwdGVyLT5SeFJpbmcuRmJyMUJ1ZmZlclNpemUgPT0gODE5MikgeworCQkJY3NyLmJpdHMuZmJyMV9zaXplID0gMjsKKwkJfSBlbHNlIGlmIChwQWRhcHRlci0+UnhSaW5nLkZicjFCdWZmZXJTaXplID09IDE2Mzg0KSB7CisJCQljc3IuYml0cy5mYnIxX3NpemUgPSAzOworCQl9CisjaWZkZWYgVVNFX0ZCUjAKKwkJY3NyLmJpdHMuZmJyMF9lbmFibGUgPSAxOworCQlpZiAocEFkYXB0ZXItPlJ4UmluZy5GYnIwQnVmZmVyU2l6ZSA9PSAyNTYpIHsKKwkJCWNzci5iaXRzLmZicjBfc2l6ZSA9IDE7CisJCX0gZWxzZSBpZiAocEFkYXB0ZXItPlJ4UmluZy5GYnIwQnVmZmVyU2l6ZSA9PSA1MTIpIHsKKwkJCWNzci5iaXRzLmZicjBfc2l6ZSA9IDI7CisJCX0gZWxzZSBpZiAocEFkYXB0ZXItPlJ4UmluZy5GYnIwQnVmZmVyU2l6ZSA9PSAxMDI0KSB7CisJCQljc3IuYml0cy5mYnIwX3NpemUgPSAzOworCQl9CisjZW5kaWYKKwkJd3JpdGVsKGNzci52YWx1ZSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYS5jc3IudmFsdWUpOworCisJCWNzci52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWEuY3NyLnZhbHVlKTsKKwkJaWYgKGNzci5iaXRzLmhhbHRfc3RhdHVzICE9IDApIHsKKwkJCXVkZWxheSg1KTsKKwkJCWNzci52YWx1ZSA9IHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWEuY3NyLnZhbHVlKTsKKwkJCWlmIChjc3IuYml0cy5oYWx0X3N0YXR1cyAhPSAwKSB7CisJCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkgICJSWCBEbWEgZmFpbGVkIHRvIGV4aXQgaGFsdCBzdGF0ZS4gIENTUiAweCUwOHhcbiIsCisJCQkJCSAgY3NyLnZhbHVlKTsKKwkJCX0KKwkJfQorCX0KKworCURCR19SWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogbmljX3J4X3BrdHMgLSBDaGVja3MgdGhlIGhhcmR3YXJlIGZvciBhdmFpbGFibGUgcGFja2V0cworICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKgorICogUmV0dXJucyBwTXBSZmQsIGEgcG9pbnRlciB0byBvdXIgTVBSRkQuCisgKgorICogQ2hlY2tzIHRoZSBoYXJkd2FyZSBmb3IgYXZhaWxhYmxlIHBhY2tldHMsIHVzaW5nIGNvbXBsZXRpb24gcmluZworICogSWYgcGFja2V0cyBhcmUgYXZhaWxhYmxlLCBpdCBnZXRzIGFuIFJGRCBmcm9tIHRoZSBSZWN2TGlzdCwgYXR0YWNoZXMKKyAqIHRoZSBwYWNrZXQgdG8gaXQsIHB1dHMgdGhlIFJGRCBpbiB0aGUgUmVjdlBlbmRMaXN0LCBhbmQgYWxzbyByZXR1cm5zCisgKiB0aGUgcG9pbnRlciB0byB0aGUgUkZELgorICovCitQTVBfUkZEIG5pY19yeF9wa3RzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9yeF9yaW5nX3QgKnBSeExvY2FsID0gJnBBZGFwdGVyLT5SeFJpbmc7CisJUFJYX1NUQVRVU19CTE9DS190IHBSeFN0YXR1c0Jsb2NrOworCVBQS1RfU1RBVF9ERVNDX3QgcFBTUkVudHJ5OworCVBNUF9SRkQgcE1wUmZkOworCXVpbnQzMl90IG5JbmRleDsKKwl1aW50OF90ICpwQnVmVmE7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKKwl1aW50OF90IHJpbmdJbmRleDsKKwl1aW50MTZfdCBidWZmZXJJbmRleDsKKwl1aW50MzJfdCBsb2NhbExlbjsKKwlQS1RfU1RBVF9ERVNDX1dPUkQwX3QgV29yZDA7CisKKworCURCR19SWF9FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBSWCBTdGF0dXMgYmxvY2sgaXMgd3JpdHRlbiBieSB0aGUgRE1BIGVuZ2luZSBwcmlvciB0byBldmVyeQorCSAqIGludGVycnVwdC4gSXQgY29udGFpbnMgdGhlIG5leHQgdG8gYmUgdXNlZCBlbnRyeSBpbiB0aGUgUGFja2V0CisJICogU3RhdHVzIFJpbmcsIGFuZCBhbHNvIHRoZSB0d28gRnJlZSBCdWZmZXIgcmluZ3MuCisJICovCisJcFJ4U3RhdHVzQmxvY2sgPSAoUFJYX1NUQVRVU19CTE9DS190KSBwUnhMb2NhbC0+cFJ4U3RhdHVzVmE7CisKKwlpZiAocFJ4U3RhdHVzQmxvY2stPldvcmQxLmJpdHMuUFNSb2Zmc2V0ID09CisJCQlwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwuYml0cy5wc3JfZnVsbCAmJgorCSAgICBwUnhTdGF0dXNCbG9jay0+V29yZDEuYml0cy5QU1J3cmFwID09CisJICAgIAkJcFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLmJpdHMucHNyX2Z1bGxfd3JhcCkgeworCQkvKiBMb29rcyBsaWtlIHRoaXMgcmluZyBpcyBub3QgdXBkYXRlZCB5ZXQgKi8KKwkJREJHX1JYKGV0MTMxeF9kYmdpbmZvLCAiKDApXG4iKTsKKwkJREJHX1JYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogVGhlIHBhY2tldCBzdGF0dXMgcmluZyBpbmRpY2F0ZXMgdGhhdCBkYXRhIGlzIGF2YWlsYWJsZS4gKi8KKwlwUFNSRW50cnkgPSAoUFBLVF9TVEFUX0RFU0NfdCkgKHBSeExvY2FsLT5wUFNSaW5nVmEpICsKKwkJCXBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsOworCisJLyogR3JhYiBhbnkgaW5mb3JtYXRpb24gdGhhdCBpcyByZXF1aXJlZCBvbmNlIHRoZSBQU1IgaXMKKwkgKiBhZHZhbmNlZCwgc2luY2Ugd2UgY2FuIG5vIGxvbmdlciByZWx5IG9uIHRoZSBtZW1vcnkgYmVpbmcKKwkgKiBhY2N1cmF0ZQorCSAqLworCWxvY2FsTGVuID0gcFBTUkVudHJ5LT53b3JkMS5iaXRzLmxlbmd0aDsKKwlyaW5nSW5kZXggPSAodWludDhfdCkgcFBTUkVudHJ5LT53b3JkMS5iaXRzLnJpOworCWJ1ZmZlckluZGV4ID0gKHVpbnQxNl90KSBwUFNSRW50cnktPndvcmQxLmJpdHMuYmk7CisJV29yZDAgPSBwUFNSRW50cnktPndvcmQwOworCisJREJHX1JYKGV0MTMxeF9kYmdpbmZvLCAiUlggUEFDS0VUIFNUQVRVU1xuIik7CisJREJHX1JYKGV0MTMxeF9kYmdpbmZvLCAiXHRsZW5ndGggICAgICA6ICVkXG4iLCBsb2NhbExlbik7CisJREJHX1JYKGV0MTMxeF9kYmdpbmZvLCAiXHRyaW5nSW5kZXggICA6ICVkXG4iLCByaW5nSW5kZXgpOworCURCR19SWChldDEzMXhfZGJnaW5mbywgIlx0YnVmZmVySW5kZXggOiAlZFxuIiwgYnVmZmVySW5kZXgpOworCURCR19SWChldDEzMXhfZGJnaW5mbywgIlx0d29yZDAgICAgICAgOiAweCUwOHhcbiIsIFdvcmQwLnZhbHVlKTsKKworI2lmIDAKKwkvKiBDaGVjayB0aGUgU3RhdHVzIFdvcmQgdGhhdCB0aGUgTUFDIGhhcyBhcHBlbmRlZCB0byB0aGUgUFNSCisJICogZW50cnkgaW4gY2FzZSB0aGUgTUFDIGhhcyBkZXRlY3RlZCBlcnJvcnMuCisJICovCisJaWYgKFdvcmQwLnZhbHVlICYgQUxDQVRFTF9CQURfU1RBVFVTKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIk5JQ1J4UGt0cyA+PiBBbGNhdGVsIFN0YXR1cyBXb3JkIGVycm9yLiIKKwkJCSAgIlZhbHVlIDB4JTA4eFxuIiwgcFBTUkVudHJ5LT53b3JkMC52YWx1ZSk7CisJfQorI2VuZGlmCisKKwkvKiBJbmRpY2F0ZSB0aGF0IHdlIGhhdmUgdXNlZCB0aGlzIFBTUiBlbnRyeS4gKi8KKwlpZiAoKytwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwuYml0cy5wc3JfZnVsbCA+CisJICAgIHBSeExvY2FsLT5Qc3JOdW1FbnRyaWVzIC0gMSkgeworCQlwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwuYml0cy5wc3JfZnVsbCA9IDA7CisJCXBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsX3dyYXAgXj0gMTsKKwl9CisKKwl3cml0ZWwocFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLnZhbHVlLAorCSAgICAgICAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLnBzcl9mdWxsX29mZnNldC52YWx1ZSk7CisKKyNpZm5kZWYgVVNFX0ZCUjAKKwlpZiAocmluZ0luZGV4ICE9IDEpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiTklDUnhQa3RzIFBTUiBFbnRyeSAlZCBpbmRpY2F0ZXMgIgorCQkJICAiQnVmZmVyIFJpbmcgMCBpbiB1c2VcbiIsCisJCQkgIHBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsKTsKKwkJREJHX1JYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorI2VuZGlmCisKKyNpZmRlZiBVU0VfRkJSMAorCWlmIChyaW5nSW5kZXggPiAxIHx8CisJICAgIChyaW5nSW5kZXggPT0gMCAmJgorCSAgICAgYnVmZmVySW5kZXggPiBwUnhMb2NhbC0+RmJyME51bUVudHJpZXMgLSAxKSB8fAorCSAgICAocmluZ0luZGV4ID09IDEgJiYKKwkgICAgIGJ1ZmZlckluZGV4ID4gcFJ4TG9jYWwtPkZicjFOdW1FbnRyaWVzIC0gMSkpCisjZWxzZQorCWlmIChyaW5nSW5kZXggIT0gMSB8fAorCSAgICBidWZmZXJJbmRleCA+IHBSeExvY2FsLT5GYnIxTnVtRW50cmllcyAtIDEpCisjZW5kaWYKKwl7CisJCS8qIElsbGVnYWwgYnVmZmVyIG9yIHJpbmcgaW5kZXggY2Fubm90IGJlIHVzZWQgYnkgUy9XKi8KKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiTklDUnhQa3RzIFBTUiBFbnRyeSAlZCBpbmRpY2F0ZXMgIgorCQkJICAibGVuZ3RoIG9mICVkIGFuZC9vciBiYWQgYmkoJWQpXG4iLAorCQkJICBwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwuYml0cy5wc3JfZnVsbCwKKwkJCSAgbG9jYWxMZW4sIGJ1ZmZlckluZGV4KTsKKwkJREJHX1JYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogR2V0IGFuZCBmaWxsIHRoZSBSRkQuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5SY3ZMb2NrLCBsb2NrZmxhZ3MpOworCisJcE1wUmZkID0gTlVMTDsKKwllbGVtZW50ID0gcFJ4TG9jYWwtPlJlY3ZMaXN0Lm5leHQ7CisJcE1wUmZkID0gKFBNUF9SRkQpIGxpc3RfZW50cnkoZWxlbWVudCwgTVBfUkZELCBsaXN0X25vZGUpOworCisJaWYgKHBNcFJmZCA9PSBOVUxMKSB7CisJCURCR19SWChldDEzMXhfZGJnaW5mbywKKwkJICAgICAgICJOVUxMIFJGRCByZXR1cm5lZCBmcm9tIFJlY3ZMaXN0IHZpYSBsaXN0X2VudHJ5KClcbiIpOworCQlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+UmN2TG9jaywgbG9ja2ZsYWdzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbGlzdF9kZWwoJnBNcFJmZC0+bGlzdF9ub2RlKTsKKwlwUnhMb2NhbC0+blJlYWR5UmVjdi0tOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlJjdkxvY2ssIGxvY2tmbGFncyk7CisKKwlwTXBSZmQtPmlCdWZmZXJJbmRleCA9IGJ1ZmZlckluZGV4OworCXBNcFJmZC0+aVJpbmdJbmRleCA9IHJpbmdJbmRleDsKKworCS8qIEluIFYxIHNpbGljb24sIHRoZXJlIGlzIGEgYnVnIHdoaWNoIHNjcmV3cyB1cCBmaWx0ZXJpbmcgb2YKKwkgKiBydW50IHBhY2tldHMuICBUaGVyZWZvcmUgcnVudCBwYWNrZXQgZmlsdGVyaW5nIGlzIGRpc2FibGVkCisJICogaW4gdGhlIE1BQyBhbmQgdGhlIHBhY2tldHMgYXJlIGRyb3BwZWQgaGVyZS4gIFRoZXkgYXJlCisJICogYWxzbyBjb3VudGVkIGhlcmUuCisJICovCisJaWYgKGxvY2FsTGVuIDwgKE5JQ19NSU5fUEFDS0VUX1NJWkUgKyA0KSkgeworCQlwQWRhcHRlci0+U3RhdHMub3RoZXJfZXJyb3JzKys7CisJCWxvY2FsTGVuID0gMDsKKwl9CisKKwlpZiAobG9jYWxMZW4pIHsKKwkJaWYgKHBBZGFwdGVyLT5SZXBsaWNhUGh5TG9vcGJrID09IDEpIHsKKwkJCXBCdWZWYSA9IHBSeExvY2FsLT5GYnJbcmluZ0luZGV4XS0+VmFbYnVmZmVySW5kZXhdOworCisJCQlpZiAobWVtY21wKCZwQnVmVmFbNl0sICZwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMF0sCisJCQkJICAgRVRIX0FMRU4pID09IDApIHsKKwkJCQlpZiAobWVtY21wKCZwQnVmVmFbNDJdLCAiUmVwbGljYSBwYWNrZXQiLAorCQkJCQkgICBFVEhfSExFTikpIHsKKwkJCQkJcEFkYXB0ZXItPlJlcGxpY2FQaHlMb29wYmtQRiA9IDE7CisJCQkJfQorCQkJfQorCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJwQnVmVmE6XHQlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCQkgICAgcEJ1ZlZhWzZdLCBwQnVmVmFbN10sIHBCdWZWYVs4XSwKKwkJCQkgICAgcEJ1ZlZhWzldLCBwQnVmVmFbMTBdLCBwQnVmVmFbMTFdKTsKKworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJDdXJyZW50QWRkcjpcdCUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJCSAgICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMF0sCisJCQkJICAgIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1sxXSwKKwkJCQkgICAgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzJdLAorCQkJCSAgICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbM10sCisJCQkJICAgIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s0XSwKKwkJCQkgICAgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzVdKTsKKwkJfQorCisJCS8qIERldGVybWluZSBpZiB0aGlzIGlzIGEgbXVsdGljYXN0IHBhY2tldCBjb21pbmcgaW4gKi8KKwkJaWYgKChXb3JkMC52YWx1ZSAmIEFMQ0FURUxfTVVMVElDQVNUX1BLVCkgJiYKKwkJICAgICEoV29yZDAudmFsdWUgJiBBTENBVEVMX0JST0FEQ0FTVF9QS1QpKSB7CisJCQkvKiBQcm9taXNjdW91cyBtb2RlIGFuZCBNdWx0aWNhc3QgbW9kZSBhcmUKKwkJCSAqIG5vdCBtdXR1YWxseSBleGNsdXNpdmUgYXMgd2FzIGZpcnN0CisJCQkgKiB0aG91Z2h0LiAgSSBndWVzcyBQcm9taXNjdW91cyBpcyBqdXN0CisJCQkgKiBjb25zaWRlcmVkIGEgc3VwZXItc2V0IG9mIHRoZSBvdGhlcgorCQkJICogZmlsdGVycy4gR2VuZXJhbGx5IGZpbHRlciBpcyAweDJiIHdoZW4gaW4KKwkJCSAqIHByb21pc2N1b3VzIG1vZGUuCisJCQkgKi8KKwkJCWlmICgocEFkYXB0ZXItPlBhY2tldEZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9NVUxUSUNBU1QpCisJCQkgICAgJiYgIShwQWRhcHRlci0+UGFja2V0RmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTKQorCQkJICAgICYmICEocEFkYXB0ZXItPlBhY2tldEZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUKSkgeworCQkJCXBCdWZWYSA9IHBSeExvY2FsLT5GYnJbcmluZ0luZGV4XS0+CisJCQkJCQlWYVtidWZmZXJJbmRleF07CisKKwkJCQkvKiBMb29wIHRocm91Z2ggb3VyIGxpc3QgdG8gc2VlIGlmIHRoZQorCQkJCSAqIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhpcyBwYWNrZXQKKwkJCQkgKiBtYXRjaGVzIG9uZSBpbiBvdXIgbGlzdC4KKwkJCQkgKi8KKwkJCQlmb3IgKG5JbmRleCA9IDA7CisJCQkJICAgICBuSW5kZXggPCBwQWRhcHRlci0+TUNBZGRyZXNzQ291bnQ7CisJCQkJICAgICBuSW5kZXgrKykgeworCQkJCQlpZiAocEJ1ZlZhWzBdID09CisJCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bMF0KKwkJCQkJICAgICYmIHBCdWZWYVsxXSA9PQorCQkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzFdCisJCQkJCSAgICAmJiBwQnVmVmFbMl0gPT0KKwkJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVsyXQorCQkJCQkgICAgJiYgcEJ1ZlZhWzNdID09CisJCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bM10KKwkJCQkJICAgICYmIHBCdWZWYVs0XSA9PQorCQkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzRdCisJCQkJCSAgICAmJiBwQnVmVmFbNV0gPT0KKwkJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVs1XSkgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkvKiBJZiBvdXIgaW5kZXggaXMgZXF1YWwgdG8gdGhlIG51bWJlcgorCQkJCSAqIG9mIE11bHRpY2FzdCBhZGRyZXNzIHdlIGhhdmUsIHRoZW4KKwkJCQkgKiB0aGlzIG1lYW5zIHdlIGRpZCBub3QgZmluZCB0aGlzCisJCQkJICogcGFja2V0J3MgbWF0Y2hpbmcgYWRkcmVzcyBpbiBvdXIKKwkJCQkgKiBsaXN0LiAgU2V0IHRoZSBQYWNrZXRTaXplIHRvIHplcm8sCisJCQkJICogc28gd2UgZnJlZSBvdXIgUkZEIHdoZW4gd2UgcmV0dXJuCisJCQkJICogZnJvbSB0aGlzIGZ1bmN0aW9uLgorCQkJCSAqLworCQkJCWlmIChuSW5kZXggPT0gcEFkYXB0ZXItPk1DQWRkcmVzc0NvdW50KSB7CisJCQkJCWxvY2FsTGVuID0gMDsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChsb2NhbExlbiA+IDApIHsKKwkJCQlwQWRhcHRlci0+U3RhdHMubXVsdGlyY3YrKzsKKwkJCX0KKwkJfSBlbHNlIGlmIChXb3JkMC52YWx1ZSAmIEFMQ0FURUxfQlJPQURDQVNUX1BLVCkgeworCQkJcEFkYXB0ZXItPlN0YXRzLmJyZGNzdHJjdisrOworCQl9IGVsc2UgeworCQkJLyogTm90IHN1cmUgd2hhdCB0aGlzIGNvdW50ZXIgbWVhc3VyZXMgaW4KKwkJCSAqIHByb21pc2N1b3VzIG1vZGUuIFBlcmhhcHMgd2Ugc2hvdWxkIGNoZWNrCisJCQkgKiB0aGUgTUFDIGFkZHJlc3MgdG8gc2VlIGlmIGl0IGlzIGRpcmVjdGVkCisJCQkgKiB0byB1cyBpbiBwcm9taXNjdW91cyBtb2RlLgorCQkJICovCisJCQlwQWRhcHRlci0+U3RhdHMudW5pcmN2Kys7CisJCX0KKwl9CisKKwlpZiAobG9jYWxMZW4gPiAwKSB7CisJCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCisJCS8vcE1wUmZkLT5QYWNrZXRTaXplID0gbG9jYWxMZW4gLSA0OworCQlwTXBSZmQtPlBhY2tldFNpemUgPSBsb2NhbExlbjsKKworCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHBNcFJmZC0+UGFja2V0U2l6ZSArIDIpOworCQlpZiAoIXNrYikgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgIkNvdWxkbid0IGFsbG9jIGFuIFNLQiBmb3IgUnhcbiIpOworCQkJREJHX1JYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJcEFkYXB0ZXItPm5ldF9zdGF0cy5yeF9ieXRlcyArPSBwTXBSZmQtPlBhY2tldFNpemU7CisKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBwTXBSZmQtPlBhY2tldFNpemUpLAorCQkgICAgICAgcFJ4TG9jYWwtPkZicltyaW5nSW5kZXhdLT5WYVtidWZmZXJJbmRleF0sCisJCSAgICAgICBwTXBSZmQtPlBhY2tldFNpemUpOworCisJCXNrYi0+ZGV2ID0gcEFkYXB0ZXItPm5ldGRldjsKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcEFkYXB0ZXItPm5ldGRldik7CisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCQluZXRpZl9yeChza2IpOworCX0gZWxzZSB7CisJCXBNcFJmZC0+UGFja2V0U2l6ZSA9IDA7CisJfQorCisJbmljX3JldHVybl9yZmQocEFkYXB0ZXIsIHBNcFJmZCk7CisKKwlEQkdfUlgoZXQxMzF4X2RiZ2luZm8sICIoMSlcbiIpOworCURCR19SWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHBNcFJmZDsKK30KKworLyoqCisgKiBldDEzMXhfcmVzZXRfcmVjdiAtIFJlc2V0IHRoZSByZWNlaXZlIGxpc3QKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICoKKyAqIEFzc3VtcHRpb24sIFJjdiBzcGlubG9jayBoYXMgYmVlbiBhY3F1aXJlZC4KKyAqLwordm9pZCBldDEzMXhfcmVzZXRfcmVjdihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCVBNUF9SRkQgcE1wUmZkOworCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJREJHX0FTU0VSVCghbGlzdF9lbXB0eSgmcEFkYXB0ZXItPlJ4UmluZy5SZWN2TGlzdCkpOworCisJLyogVGFrZSBhbGwgdGhlIFJGRCdzIGZyb20gdGhlIHBlbmRpbmcgbGlzdCwgYW5kIHN0aWNrIHRoZW0gb24gdGhlCisJICogUmVjdkxpc3QuCisJICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZwQWRhcHRlci0+UnhSaW5nLlJlY3ZQZW5kaW5nTGlzdCkpIHsKKwkJZWxlbWVudCA9IHBBZGFwdGVyLT5SeFJpbmcuUmVjdlBlbmRpbmdMaXN0Lm5leHQ7CisKKwkJcE1wUmZkID0gKFBNUF9SRkQpIGxpc3RfZW50cnkoZWxlbWVudCwgTVBfUkZELCBsaXN0X25vZGUpOworCisJCWxpc3RfZGVsKCZwTXBSZmQtPmxpc3Rfbm9kZSk7CisJCWxpc3RfYWRkX3RhaWwoJnBNcFJmZC0+bGlzdF9ub2RlLCAmcEFkYXB0ZXItPlJ4UmluZy5SZWN2TGlzdCk7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfaGFuZGxlX3JlY3ZfaW50ZXJydXB0IC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIHJlY2VpdmUgcHJvY2Vzc2luZworICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKgorICogQXNzdW1wdGlvbiwgUmN2IHNwaW5sb2NrIGhhcyBiZWVuIGFjcXVpcmVkLgorICovCit2b2lkIGV0MTMxeF9oYW5kbGVfcmVjdl9pbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlQTVBfUkZEIHBNcFJmZCA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKlBhY2tldEFycmF5W05VTV9QQUNLRVRTX0hBTkRMRURdOworCVBNUF9SRkQgUkZERnJlZUFycmF5W05VTV9QQUNLRVRTX0hBTkRMRURdOworCXVpbnQzMl90IFBhY2tldEFycmF5Q291bnQgPSAwOworCXVpbnQzMl90IFBhY2tldHNUb0hhbmRsZTsKKwl1aW50MzJfdCBQYWNrZXRGcmVlQ291bnQgPSAwOworCWJvb2wgVGVtcFVuZmluaXNoZWRSZWMgPSBmYWxzZTsKKworCURCR19SWF9FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlQYWNrZXRzVG9IYW5kbGUgPSBOVU1fUEFDS0VUU19IQU5ETEVEOworCisJLyogUHJvY2VzcyB1cCB0byBhdmFpbGFibGUgUkZEJ3MgKi8KKwl3aGlsZSAoUGFja2V0QXJyYXlDb3VudCA8IFBhY2tldHNUb0hhbmRsZSkgeworCQlpZiAobGlzdF9lbXB0eSgmcEFkYXB0ZXItPlJ4UmluZy5SZWN2TGlzdCkpIHsKKwkJCURCR19BU1NFUlQocEFkYXB0ZXItPlJ4UmluZy5uUmVhZHlSZWN2ID09IDApOworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiTk8gUkZEJ3MgISEhISEhISEhISEhIVxuIik7CisJCQlUZW1wVW5maW5pc2hlZFJlYyA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCisJCXBNcFJmZCA9IG5pY19yeF9wa3RzKHBBZGFwdGVyKTsKKworCQlpZiAocE1wUmZkID09IE5VTEwpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogRG8gbm90IHJlY2VpdmUgYW55IHBhY2tldHMgdW50aWwgYSBmaWx0ZXIgaGFzIGJlZW4gc2V0LgorCQkgKiBEbyBub3QgcmVjZWl2ZSBhbnkgcGFja2V0cyB1bnRpbCB3ZSBhcmUgYXQgRDAuCisJCSAqIERvIG5vdCByZWNlaXZlIGFueSBwYWNrZXRzIHVudGlsIHdlIGhhdmUgbGluay4KKwkJICogSWYgbGVuZ3RoIGlzIHplcm8sIHJldHVybiB0aGUgUkZEIGluIG9yZGVyIHRvIGFkdmFuY2UgdGhlCisJCSAqIEZyZWUgYnVmZmVyIHJpbmcuCisJCSAqLworCQlpZiAoKCFwQWRhcHRlci0+UGFja2V0RmlsdGVyKSB8fAorCQkgICAgKHBBZGFwdGVyLT5Qb01nbXQuUG93ZXJTdGF0ZSAhPSBOZGlzRGV2aWNlU3RhdGVEMCkgfHwKKwkJICAgICghTVBfTElOS19ERVRFQ1RFRChwQWRhcHRlcikpIHx8CisJCSAgICAocE1wUmZkLT5QYWNrZXRTaXplID09IDApKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIHBhY2tldHMgd2UgcmVjZWl2ZWQgKi8KKwkJcEFkYXB0ZXItPlN0YXRzLmlwYWNrZXRzKys7CisKKwkJLyogU2V0IHRoZSBzdGF0dXMgb24gdGhlIHBhY2tldCwgZWl0aGVyIHJlc291cmNlcyBvciBzdWNjZXNzICovCisJCWlmIChwQWRhcHRlci0+UnhSaW5nLm5SZWFkeVJlY3YgPj0gUkZEX0xPV19XQVRFUl9NQVJLKSB7CisJCQkvKiBQdXQgdGhpcyBSRkQgb24gdGhlIHBlbmRpbmcgbGlzdAorCQkJICoKKwkJCSAqIE5PVEU6IG5pY19yeF9wa3RzKCkgYWJvdmUgaXMgYWxyZWFkeSByZXR1cm5pbmcgdGhlCisJCQkgKiBSRkQgdG8gdGhlIFJlY3ZMaXN0LCBzbyBkb24ndCBhZGRpdGlvbmFsbHkgZG8gdGhhdAorCQkJICogaGVyZS4KKwkJCSAqIEJlc2lkZXMsIHdlIGRvbid0IHJlYWxseSBuZWVkIChhdCB0aGlzIHBvaW50KSB0aGUKKwkJCSAqIHBlbmRpbmcgbGlzdCBhbnl3YXkuCisJCQkgKi8KKwkJCS8vc3Bpbl9sb2NrX2lycXNhdmUoICZwQWRhcHRlci0+UmN2UGVuZExvY2ssIGxvY2tmbGFncyApOworCQkJLy9saXN0X2FkZF90YWlsKCAmcE1wUmZkLT5saXN0X25vZGUsICZwQWRhcHRlci0+UnhSaW5nLlJlY3ZQZW5kaW5nTGlzdCApOworCQkJLy9zcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcEFkYXB0ZXItPlJjdlBlbmRMb2NrLCBsb2NrZmxhZ3MgKTsKKworCQkJLyogVXBkYXRlIHRoZSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgUmVjdnMgKi8KKwkJCS8vTVBfSU5DX1JDVl9SRUYoIHBBZGFwdGVyICk7CisJCX0gZWxzZSB7CisJCQlSRkRGcmVlQXJyYXlbUGFja2V0RnJlZUNvdW50XSA9IHBNcFJmZDsKKwkJCVBhY2tldEZyZWVDb3VudCsrOworCisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIlJGRCdzIGFyZSBydW5uaW5nIG91dCAhISEhISEhISEhISEhXG4iKTsKKwkJfQorCisJCVBhY2tldEFycmF5W1BhY2tldEFycmF5Q291bnRdID0gcE1wUmZkLT5QYWNrZXQ7CisJCVBhY2tldEFycmF5Q291bnQrKzsKKwl9CisKKwlpZiAoKFBhY2tldEFycmF5Q291bnQgPT0gTlVNX1BBQ0tFVFNfSEFORExFRCkgfHwgVGVtcFVuZmluaXNoZWRSZWMpIHsKKwkJcEFkYXB0ZXItPlJ4UmluZy5VbmZpbmlzaGVkUmVjZWl2ZXMgPSB0cnVlOworCQl3cml0ZWwocEFkYXB0ZXItPlJlZ2lzdHJ5VHhUaW1lSW50ZXJ2YWwgKiBOQU5PX0lOX0FfTUlDUk8sCisJCSAgICAgICAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC53YXRjaGRvZ190aW1lcik7CisJfSBlbHNlIHsKKwkJLyogV2F0Y2hkb2cgdGltZXIgd2lsbCBkaXNhYmxlIGl0c2VsZiBpZiBhcHByb3ByaWF0ZS4gKi8KKwkJcEFkYXB0ZXItPlJ4UmluZy5VbmZpbmlzaGVkUmVjZWl2ZXMgPSBmYWxzZTsKKwl9CisKKwlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIE5JQ1JldHVyblJGRCAtIFJlY3ljbGUgYSBSRkQgYW5kIHB1dCBpdCBiYWNrIG9udG8gdGhlIHJlY2VpdmUgbGlzdAorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKiBAcE1wUmZkOiBwb2ludGVyIHRvIHRoZSBSRkQKKyAqLwordm9pZCBuaWNfcmV0dXJuX3JmZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCBQTVBfUkZEIHBNcFJmZCkKK3sKKwlzdHJ1Y3QgX3J4X3JpbmdfdCAqcFJ4TG9jYWwgPSAmcEFkYXB0ZXItPlJ4UmluZzsKKwlzdHJ1Y3QgX1JYRE1BX3QgX19pb21lbSAqcFJ4RG1hID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYTsKKwl1aW50MTZfdCBiaSA9IHBNcFJmZC0+aUJ1ZmZlckluZGV4OworCXVpbnQ4X3QgcmkgPSBwTXBSZmQtPmlSaW5nSW5kZXg7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisKKwlEQkdfUlhfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogV2UgZG9uJ3QgdXNlIGFueSBvZiB0aGUgT09CIGRhdGEgYmVzaWRlcyBzdGF0dXMuIE90aGVyd2lzZSwgd2UKKwkgKiBuZWVkIHRvIGNsZWFuIHVwIE9PQiBkYXRhCisJICovCisJaWYgKAorI2lmZGVmIFVTRV9GQlIwCisJICAgIChyaSA9PSAwICYmIGJpIDwgcFJ4TG9jYWwtPkZicjBOdW1FbnRyaWVzKSB8fAorI2VuZGlmCisJICAgIChyaSA9PSAxICYmIGJpIDwgcFJ4TG9jYWwtPkZicjFOdW1FbnRyaWVzKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPkZickxvY2ssIGxvY2tmbGFncyk7CisKKwkJaWYgKHJpID09IDEpIHsKKwkJCVBGQlJfREVTQ190IHBOZXh0RGVzYyA9CisJCQkgICAgKFBGQlJfREVTQ190KSAocFJ4TG9jYWwtPnBGYnIxUmluZ1ZhKSArCisJCQkgICAgcFJ4TG9jYWwtPmxvY2FsX0ZicjFfZnVsbC5iaXRzLnZhbDsKKworCQkJLyogSGFuZGxlIHRoZSBGcmVlIEJ1ZmZlciBSaW5nIGFkdmFuY2VtZW50IGhlcmUuIFdyaXRlCisJCQkgKiB0aGUgUEEgLyBCdWZmZXIgSW5kZXggZm9yIHRoZSByZXR1cm5lZCBidWZmZXIgaW50bworCQkJICogdGhlIG9sZGVzdCAobmV4dCB0byBiZSBmcmVlZClGQlIgZW50cnkKKwkJCSAqLworCQkJcE5leHREZXNjLT5hZGRyX2hpID0gcFJ4TG9jYWwtPkZiclsxXS0+UEFIaWdoW2JpXTsKKwkJCXBOZXh0RGVzYy0+YWRkcl9sbyA9IHBSeExvY2FsLT5GYnJbMV0tPlBBTG93W2JpXTsKKwkJCXBOZXh0RGVzYy0+d29yZDIudmFsdWUgPSBiaTsKKworCQkJaWYgKCsrcFJ4TG9jYWwtPmxvY2FsX0ZicjFfZnVsbC5iaXRzLnZhbCA+CisJCQkgICAgKHBSeExvY2FsLT5GYnIxTnVtRW50cmllcyAtIDEpKSB7CisJCQkJcFJ4TG9jYWwtPmxvY2FsX0ZicjFfZnVsbC5iaXRzLnZhbCA9IDA7CisJCQkJcFJ4TG9jYWwtPmxvY2FsX0ZicjFfZnVsbC5iaXRzLndyYXAgXj0gMTsKKwkJCX0KKworCQkJd3JpdGVsKHBSeExvY2FsLT5sb2NhbF9GYnIxX2Z1bGwudmFsdWUsCisJCQkgICAgICAgJnBSeERtYS0+ZmJyMV9mdWxsX29mZnNldC52YWx1ZSk7CisJCX0KKyNpZmRlZiBVU0VfRkJSMAorCQllbHNlIHsKKwkJCVBGQlJfREVTQ190IHBOZXh0RGVzYyA9CisJCQkgICAgKFBGQlJfREVTQ190KSBwUnhMb2NhbC0+cEZicjBSaW5nVmEgKworCQkJICAgIHBSeExvY2FsLT5sb2NhbF9GYnIwX2Z1bGwuYml0cy52YWw7CisKKwkJCS8qIEhhbmRsZSB0aGUgRnJlZSBCdWZmZXIgUmluZyBhZHZhbmNlbWVudCBoZXJlLiBXcml0ZQorCQkJICogdGhlIFBBIC8gQnVmZmVyIEluZGV4IGZvciB0aGUgcmV0dXJuZWQgYnVmZmVyIGludG8KKwkJCSAqIHRoZSBvbGRlc3QgKG5leHQgdG8gYmUgZnJlZWQpIEZCUiBlbnRyeQorCQkJICovCisJCQlwTmV4dERlc2MtPmFkZHJfaGkgPSBwUnhMb2NhbC0+RmJyWzBdLT5QQUhpZ2hbYmldOworCQkJcE5leHREZXNjLT5hZGRyX2xvID0gcFJ4TG9jYWwtPkZiclswXS0+UEFMb3dbYmldOworCQkJcE5leHREZXNjLT53b3JkMi52YWx1ZSA9IGJpOworCisJCQlpZiAoKytwUnhMb2NhbC0+bG9jYWxfRmJyMF9mdWxsLmJpdHMudmFsID4KKwkJCSAgICAocFJ4TG9jYWwtPkZicjBOdW1FbnRyaWVzIC0gMSkpIHsKKwkJCQlwUnhMb2NhbC0+bG9jYWxfRmJyMF9mdWxsLmJpdHMudmFsID0gMDsKKwkJCQlwUnhMb2NhbC0+bG9jYWxfRmJyMF9mdWxsLmJpdHMud3JhcCBePSAxOworCQkJfQorCisJCQl3cml0ZWwocFJ4TG9jYWwtPmxvY2FsX0ZicjBfZnVsbC52YWx1ZSwKKwkJCSAgICAgICAmcFJ4RG1hLT5mYnIwX2Z1bGxfb2Zmc2V0LnZhbHVlKTsKKwkJfQorI2VuZGlmCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5GYnJMb2NrLCBsb2NrZmxhZ3MpOworCX0gZWxzZSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIk5JQ1JldHVyblJGRCBpbGxlZ2FsIEJ1ZmZlciBJbmRleCByZXR1cm5lZFxuIik7CisJfQorCisJLyogVGhlIHByb2Nlc3Npbmcgb24gdGhpcyBSRkQgaXMgZG9uZSwgc28gcHV0IGl0IGJhY2sgb24gdGhlIHRhaWwgb2YKKwkgKiBvdXIgbGlzdAorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+UmN2TG9jaywgbG9ja2ZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZwTXBSZmQtPmxpc3Rfbm9kZSwgJnBSeExvY2FsLT5SZWN2TGlzdCk7CisJcFJ4TG9jYWwtPm5SZWFkeVJlY3YrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+UmN2TG9jaywgbG9ja2ZsYWdzKTsKKworCURCR19BU1NFUlQocFJ4TG9jYWwtPm5SZWFkeVJlY3YgPD0gcFJ4TG9jYWwtPk51bVJmZCk7CisJREJHX1JYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNjZkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5oCkBAIC0wLDAgKzEsMzczIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9yeC5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gcGVydGFpbmluZyB0byBkYXRhCisgKiAgICAgICAgICAgICAgIHJlY2VwdGlvbi4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxMF9SWF9IX18KKyNkZWZpbmUgX19FVDEzMTBfUlhfSF9fCisKKyNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKKworI2RlZmluZSBVU0VfRkJSMCB0cnVlCisKKyNpZmRlZiBVU0VfRkJSMAorLy8jZGVmaW5lIEZCUjBfQlVGRkVSX1NJWkUgMjU2CisjZW5kaWYKKworLy8jZGVmaW5lIEZCUjFfQlVGRkVSX1NJWkUgMjA0OAorCisjZGVmaW5lIEZCUl9DSFVOS1MgMzIKKworI2RlZmluZSBNQVhfREVTQ19QRVJfUklOR19SWCAgICAgICAgIDEwMjQKKworLyogbnVtYmVyIG9mIFJGRHMgLSBkZWZhdWx0IGFuZCBtaW4gKi8KKyNpZmRlZiBVU0VfRkJSMAorI2RlZmluZSBSRkRfTE9XX1dBVEVSX01BUksJNDAKKyNkZWZpbmUgTklDX01JTl9OVU1fUkZECQk2NAorI2RlZmluZSBOSUNfREVGQVVMVF9OVU1fUkZECTEwMjQKKyNlbHNlCisjZGVmaW5lIFJGRF9MT1dfV0FURVJfTUFSSwkyMAorI2RlZmluZSBOSUNfTUlOX05VTV9SRkQJCTY0CisjZGVmaW5lIE5JQ19ERUZBVUxUX05VTV9SRkQJMjU2CisjZW5kaWYKKworI2RlZmluZSBOVU1fUEFDS0VUU19IQU5ETEVECTI1NgorCisjZGVmaW5lIEFMQ0FURUxfQkFEX1NUQVRVUwkweGU0N2YwMDAwCisjZGVmaW5lIEFMQ0FURUxfTVVMVElDQVNUX1BLVAkweDAxMDAwMDAwCisjZGVmaW5lIEFMQ0FURUxfQlJPQURDQVNUX1BLVAkweDAyMDAwMDAwCisKKy8qIHR5cGVkZWZzIGZvciBGcmVlIEJ1ZmZlciBEZXNjcmlwdG9ycyAqLwordHlwZWRlZiB1bmlvbiBfRkJSX1dPUkQyX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjIyOwkvLyBiaXRzIDEwLTMxCisJCXUzMiBiaToxMDsJCS8vIGJpdHMgMC05KEJ1ZmZlciBJbmRleCkKKyNlbHNlCisJCXUzMiBiaToxMDsJCS8vIGJpdHMgMC05KEJ1ZmZlciBJbmRleCkKKwkJdTMyIHJlc2VydmVkOjIyOwkvLyBiaXQgMTAtMzEKKyNlbmRpZgorCX0gYml0czsKK30gRkJSX1dPUkQyX3QsICpQRkJSX1dPUkQyX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9GQlJfREVTQ190IHsKKwl1MzIgYWRkcl9sbzsKKwl1MzIgYWRkcl9oaTsKKwlGQlJfV09SRDJfdCB3b3JkMjsKK30gRkJSX0RFU0NfdCwgKlBGQlJfREVTQ190OworCisvKiBUeXBlZGVmcyBmb3IgUGFja2V0IFN0YXR1cyBSaW5nIERlc2NyaXB0b3JzICovCit0eXBlZGVmIHVuaW9uIF9QS1RfU1RBVF9ERVNDX1dPUkQwX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJLy8gdG9wIDE2IGJpdHMgYXJlIGZyb20gdGhlIEFsY2F0ZWwgU3RhdHVzIFdvcmQgYXMgZW51bWVyYXRlZCBpbgorCQkvLyBQRS1NQ1hNQUMgRGF0YSBTaGVldCBJUEQgRFM1NCAwMjEwLTEgKGFsc28gSVBELURTODAgMDIwNS0yKQorI2lmIDAKKwkJdTMyIGFzd190cnVuYzoxOwkJLy8gYml0IDMxKFJ4IGZyYW1lIHRydW5jYXRlZCkKKyNlbmRpZgorCQl1MzIgYXN3X2xvbmdfZXZ0OjE7CS8vIGJpdCAzMShSeCBsb25nIGV2ZW50KQorCQl1MzIgYXN3X1ZMQU5fdGFnOjE7CS8vIGJpdCAzMChWTEFOIHRhZyBkZXRlY3RlZCkKKwkJdTMyIGFzd191bnN1cHBvcnRlZF9vcDoxOwkvLyBiaXQgMjkodW5zdXBwb3J0ZWQgT1AgY29kZSkKKwkJdTMyIGFzd19wYXVzZV9mcmFtZToxOwkvLyBiaXQgMjgoaXMgYSBwYXVzZSBmcmFtZSkKKwkJdTMyIGFzd19jb250cm9sX2ZyYW1lOjE7CS8vIGJpdCAyNyhpcyBhIGNvbnRyb2wgZnJhbWUpCisJCXUzMiBhc3dfZHJpYmJsZV9uaWJibGU6MTsJLy8gYml0IDI2KHNwdXJpb3VzIGJpdHMgYWZ0ZXIgRU9QKQorCQl1MzIgYXN3X2Jyb2FkY2FzdDoxOwkvLyBiaXQgMjUoaGFzIGEgYnJvYWRjYXN0IGFkZHJlc3MpCisJCXUzMiBhc3dfbXVsdGljYXN0OjE7CS8vIGJpdCAyNChoYXMgYSBtdWx0aWNhc3QgYWRkcmVzcykKKwkJdTMyIGFzd19PSzoxOwkJLy8gYml0IDIzKHZhbGlkIENSQyArIG5vIGNvZGUgZXJyb3IpCisJCXUzMiBhc3dfdG9vX2xvbmc6MTsJLy8gYml0IDIyKGZyYW1lIGxlbmd0aCA+IDE1MTggYnl0ZXMpCisJCXUzMiBhc3dfbGVuX2Noa19lcnI6MTsJLy8gYml0IDIxKGZyYW1lIGxlbmd0aCBmaWVsZCBpbmNvcnJlY3QpCisJCXUzMiBhc3dfQ1JDX2VycjoxOwkJLy8gYml0IDIwKENSQyBlcnJvcikKKwkJdTMyIGFzd19jb2RlX2VycjoxOwkvLyBiaXQgMTkob25lIG9yIG1vcmUgbmliYmxlcyBzaWduYWxsZWQgYXMgZXJyb3JzKQorCQl1MzIgYXN3X2ZhbHNlX2NhcnJpZXJfZXZlbnQ6MTsJLy8gYml0IDE4KGJhZCBjYXJyaWVyIHNpbmNlIGxhc3QgZ29vZCBwYWNrZXQpCisJCXUzMiBhc3dfUlhfRFZfZXZlbnQ6MTsJLy8gYml0IDE3KHNob3J0IHJlY2VpdmUgZXZlbnQgZGV0ZWN0ZWQpCisJCXUzMiBhc3dfcHJldl9wa3RfZHJvcHBlZDoxOy8vIGJpdCAxNihlLmcuIElGRyB0b28gc21hbGwgb24gcHJldmlvdXMpCisJCXUzMiB1bnVzZWQ6NTsJCS8vIGJpdHMgMTEtMTUKKwkJdTMyIHZwOjE7CQkJLy8gYml0IDEwKFZMQU4gUGFja2V0KQorCQl1MzIganA6MTsJCQkvLyBiaXQgOShKdW1ibyBQYWNrZXQpCisJCXUzMiBmdDoxOwkJCS8vIGJpdCA4KEZyYW1lIFRydW5jYXRlZCkKKwkJdTMyIGRyb3A6MTsJCS8vIGJpdCA3KERyb3AgcGFja2V0KQorCQl1MzIgcnhtYWNfZXJyb3I6MTsJCS8vIGJpdCA2KFJYTUFDIEVycm9yIEluZGljYXRvcikKKwkJdTMyIHdvbDoxOwkJCS8vIGJpdCA1KFdPTCBFdmVudCkKKwkJdTMyIHRjcHA6MTsJCS8vIGJpdCA0KFRDUCBjaGVja3N1bSBwYXNzKQorCQl1MzIgdGNwYToxOwkJLy8gYml0IDMoVENQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIGlwcDoxOwkJCS8vIGJpdCAyKElQIGNoZWNrc3VtIHBhc3MpCisJCXUzMiBpcGE6MTsJCQkvLyBiaXQgMShJUCBjaGVja3N1bSBhc3Npc3QpCisJCXUzMiBocDoxOwkJCS8vIGJpdCAwKGhhc2ggcGFzcykKKyNlbHNlCisJCXUzMiBocDoxOwkJCS8vIGJpdCAwKGhhc2ggcGFzcykKKwkJdTMyIGlwYToxOwkJCS8vIGJpdCAxKElQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIGlwcDoxOwkJCS8vIGJpdCAyKElQIGNoZWNrc3VtIHBhc3MpCisJCXUzMiB0Y3BhOjE7CQkvLyBiaXQgMyhUQ1AgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgdGNwcDoxOwkJLy8gYml0IDQoVENQIGNoZWNrc3VtIHBhc3MpCisJCXUzMiB3b2w6MTsJCQkvLyBiaXQgNShXT0wgRXZlbnQpCisJCXUzMiByeG1hY19lcnJvcjoxOwkJLy8gYml0IDYoUlhNQUMgRXJyb3IgSW5kaWNhdG9yKQorCQl1MzIgZHJvcDoxOwkJLy8gYml0IDcoRHJvcCBwYWNrZXQpCisJCXUzMiBmdDoxOwkJCS8vIGJpdCA4KEZyYW1lIFRydW5jYXRlZCkKKwkJdTMyIGpwOjE7CQkJLy8gYml0IDkoSnVtYm8gUGFja2V0KQorCQl1MzIgdnA6MTsJCQkvLyBiaXQgMTAoVkxBTiBQYWNrZXQpCisJCXUzMiB1bnVzZWQ6NTsJCS8vIGJpdHMgMTEtMTUKKwkJdTMyIGFzd19wcmV2X3BrdF9kcm9wcGVkOjE7Ly8gYml0IDE2KGUuZy4gSUZHIHRvbyBzbWFsbCBvbiBwcmV2aW91cykKKwkJdTMyIGFzd19SWF9EVl9ldmVudDoxOwkvLyBiaXQgMTcoc2hvcnQgcmVjZWl2ZSBldmVudCBkZXRlY3RlZCkKKwkJdTMyIGFzd19mYWxzZV9jYXJyaWVyX2V2ZW50OjE7CS8vIGJpdCAxOChiYWQgY2FycmllciBzaW5jZSBsYXN0IGdvb2QgcGFja2V0KQorCQl1MzIgYXN3X2NvZGVfZXJyOjE7CS8vIGJpdCAxOShvbmUgb3IgbW9yZSBuaWJibGVzIHNpZ25hbGxlZCBhcyBlcnJvcnMpCisJCXUzMiBhc3dfQ1JDX2VycjoxOwkJLy8gYml0IDIwKENSQyBlcnJvcikKKwkJdTMyIGFzd19sZW5fY2hrX2VycjoxOwkvLyBiaXQgMjEoZnJhbWUgbGVuZ3RoIGZpZWxkIGluY29ycmVjdCkKKwkJdTMyIGFzd190b29fbG9uZzoxOwkvLyBiaXQgMjIoZnJhbWUgbGVuZ3RoID4gMTUxOCBieXRlcykKKwkJdTMyIGFzd19PSzoxOwkJLy8gYml0IDIzKHZhbGlkIENSQyArIG5vIGNvZGUgZXJyb3IpCisJCXUzMiBhc3dfbXVsdGljYXN0OjE7CS8vIGJpdCAyNChoYXMgYSBtdWx0aWNhc3QgYWRkcmVzcykKKwkJdTMyIGFzd19icm9hZGNhc3Q6MTsJLy8gYml0IDI1KGhhcyBhIGJyb2FkY2FzdCBhZGRyZXNzKQorCQl1MzIgYXN3X2RyaWJibGVfbmliYmxlOjE7CS8vIGJpdCAyNihzcHVyaW91cyBiaXRzIGFmdGVyIEVPUCkKKwkJdTMyIGFzd19jb250cm9sX2ZyYW1lOjE7CS8vIGJpdCAyNyhpcyBhIGNvbnRyb2wgZnJhbWUpCisJCXUzMiBhc3dfcGF1c2VfZnJhbWU6MTsJLy8gYml0IDI4KGlzIGEgcGF1c2UgZnJhbWUpCisJCXUzMiBhc3dfdW5zdXBwb3J0ZWRfb3A6MTsJLy8gYml0IDI5KHVuc3VwcG9ydGVkIE9QIGNvZGUpCisJCXUzMiBhc3dfVkxBTl90YWc6MTsJLy8gYml0IDMwKFZMQU4gdGFnIGRldGVjdGVkKQorCQl1MzIgYXN3X2xvbmdfZXZ0OjE7CS8vIGJpdCAzMShSeCBsb25nIGV2ZW50KQorI2lmIDAKKwkJdTMyIGFzd190cnVuYzoxOwkJLy8gYml0IDMxKFJ4IGZyYW1lIHRydW5jYXRlZCkKKyNlbmRpZgorI2VuZGlmCisJfSBiaXRzOworfSBQS1RfU1RBVF9ERVNDX1dPUkQwX3QsICpQUEtUX1NUQVRfV09SRDBfdDsKKwordHlwZWRlZiB1bmlvbiBfUEtUX1NUQVRfREVTQ19XT1JEMV90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6NDsJLy8gYml0cyAyOC0zMQorCQl1MzIgcmk6MjsJCS8vIGJpdHMgMjYtMjcoUmluZyBJbmRleCkKKwkJdTMyIGJpOjEwOwkJLy8gYml0cyAxNi0yNShCdWZmZXIgSW5kZXgpCisJCXUzMiBsZW5ndGg6MTY7CS8vIGJpdCAwLTE1KGxlbmd0aCBpbiBieXRlcykKKyNlbHNlCisJCXUzMiBsZW5ndGg6MTY7CS8vIGJpdCAwLTE1KGxlbmd0aCBpbiBieXRlcykKKwkJdTMyIGJpOjEwOwkJLy8gYml0cyAxNi0yNShCdWZmZXIgSW5kZXgpCisJCXUzMiByaToyOwkJLy8gYml0cyAyNi0yNyhSaW5nIEluZGV4KQorCQl1MzIgdW51c2VkOjQ7CS8vIGJpdHMgMjgtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUEtUX1NUQVRfREVTQ19XT1JEMV90LCAqUFBLVF9TVEFUX1dPUkQxX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9QS1RfU1RBVF9ERVNDX3QgeworCVBLVF9TVEFUX0RFU0NfV09SRDBfdCB3b3JkMDsKKwlQS1RfU1RBVF9ERVNDX1dPUkQxX3Qgd29yZDE7Cit9IFBLVF9TVEFUX0RFU0NfdCwgKlBQS1RfU1RBVF9ERVNDX3Q7CisKKy8qIFR5cGVkZWZzIGZvciB0aGUgUlggRE1BIHN0YXR1cyB3b3JkICovCisKKy8qCisgKiBSWFNUQVRfV09SRDBfdCBzdHJ1Y3R1cmUgaG9sZHMgcGFydCBvZiB0aGUgc3RhdHVzIGJpdHMgb2YgdGhlIFJ4IERNQSBlbmdpbmUKKyAqIHRoYXQgZ2V0IGNvcGllZCBvdXQgdG8gbWVtb3J5IGJ5IHRoZSBFVC0xMzEwLiAgV29yZCAwIGlzIGEgMzIgYml0IHdvcmQKKyAqIHdoaWNoY29udGFpbnMgRnJlZSBCdWZmZXIgcmluZyAwIGFuZCAxIGF2YWlsYWJsZSBvZmZzZXQuCisgKi8KK3R5cGVkZWYgdW5pb24gX3J4c3RhdF93b3JkMF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBGQlIxdW51c2VkOjU7CS8vIGJpdHMgMjctMzEKKwkJdTMyIEZCUjF3cmFwOjE7CS8vIGJpdCAyNgorCQl1MzIgRkJSMW9mZnNldDoxMDsJLy8gYml0cyAxNi0yNQorCQl1MzIgRkJSMHVudXNlZDo1OwkvLyBiaXRzIDExLTE1CisJCXUzMiBGQlIwd3JhcDoxOwkvLyBiaXQgMTAKKwkJdTMyIEZCUjBvZmZzZXQ6MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgRkJSMG9mZnNldDoxMDsJLy8gYml0cyAwLTkKKwkJdTMyIEZCUjB3cmFwOjE7CS8vIGJpdCAxMAorCQl1MzIgRkJSMHVudXNlZDo1OwkvLyBiaXRzIDExLTE1CisJCXUzMiBGQlIxb2Zmc2V0OjEwOwkvLyBiaXRzIDE2LTI1CisJCXUzMiBGQlIxd3JhcDoxOwkvLyBiaXQgMjYKKwkJdTMyIEZCUjF1bnVzZWQ6NTsJLy8gYml0cyAyNy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWFNUQVRfV09SRDBfdCwgKlBSWFNUQVRfV09SRDBfdDsKKworLyoKKyAqIFJYU1RBVF9XT1JEMV90IHN0cnVjdHVyZSBob2xkcyBwYXJ0IG9mIHRoZSBzdGF0dXMgYml0cyBvZiB0aGUgUnggRE1BIGVuZ2luZQorICogdGhhdCBnZXQgY29waWVkIG91dCB0byBtZW1vcnkgYnkgdGhlIEVULTEzMTAuICBXb3JkIDMgaXMgYSAzMiBiaXQgd29yZAorICogd2hpY2ggY29udGFpbnMgdGhlIFBhY2tldCBTdGF0dXMgUmluZyBhdmFpbGFibGUgb2Zmc2V0LgorICovCit0eXBlZGVmIHVuaW9uIF9yeHN0YXRfd29yZDFfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgUFNSdW51c2VkOjM7CS8vIGJpdHMgMjktMzEKKwkJdTMyIFBTUndyYXA6MTsJLy8gYml0IDI4CisJCXUzMiBQU1JvZmZzZXQ6MTI7CS8vIGJpdHMgMTYtMjcKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDAtMTUKKyNlbHNlCisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAwLTE1CisJCXUzMiBQU1JvZmZzZXQ6MTI7CS8vIGJpdHMgMTYtMjcKKwkJdTMyIFBTUndyYXA6MTsJLy8gYml0IDI4CisJCXUzMiBQU1J1bnVzZWQ6MzsJLy8gYml0cyAyOS0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWFNUQVRfV09SRDFfdCwgKlBSWFNUQVRfV09SRDFfdDsKKworLyoKKyAqIFJYX1NUQVRVU19CTE9DS190IGlzIHNydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgc3RhdHVzIG9mIHRoZSBSeCBETUEgZW5naW5lCisgKiBpdCBzaXRzIGluIGZyZWUgbWVtb3J5LCBhbmQgaXMgcG9pbnRlZCB0byBieSAweDEwMWMgLyAweDEwMjAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3J4X3N0YXR1c19ibG9ja190IHsKKwlSWFNUQVRfV09SRDBfdCBXb3JkMDsKKwlSWFNUQVRfV09SRDFfdCBXb3JkMTsKK30gUlhfU1RBVFVTX0JMT0NLX3QsICpQUlhfU1RBVFVTX0JMT0NLX3Q7CisKKy8qCisgKiBTdHJ1Y3R1cmUgZm9yIGxvb2stdXAgdGFibGUgaG9sZGluZyBmcmVlIGJ1ZmZlciByaW5nIHBvaW50ZXJzCisgKi8KK3R5cGVkZWYgc3RydWN0IF9GYnJMb29rdXBUYWJsZSB7CisJdm9pZCAqVmFbTUFYX0RFU0NfUEVSX1JJTkdfUlhdOworCXZvaWQgKkJ1ZmZlcjFbTUFYX0RFU0NfUEVSX1JJTkdfUlhdOworCXZvaWQgKkJ1ZmZlcjJbTUFYX0RFU0NfUEVSX1JJTkdfUlhdOworCXUzMiBQQUhpZ2hbTUFYX0RFU0NfUEVSX1JJTkdfUlhdOworCXUzMiBQQUxvd1tNQVhfREVTQ19QRVJfUklOR19SWF07Cit9IEZCUkxPT0tVUFRBQkxFLCAqUEZCUkxPT0tVUFRBQkxFOworCit0eXBlZGVmIGVudW0geworCU9ORV9QQUNLRVRfSU5URVJSVVBULAorCUZPVVJfUEFDS0VUX0lOVEVSUlVQVAorfSBlUlhfSU5URVJSVVBUX1NUQVRFX3QsICpQZVJYX0lOVEVSUlVQVF9TVEFURV90OworCisvKgorICogU3RydWN0dXJlIHRvIGhvbGQgdGhlIHNrYidzIGluIGEgbGlzdAorICovCit0eXBlZGVmIHN0cnVjdCByeF9za2JfbGlzdF9lbGVtIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNrYl9saXN0X2VsZW07CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworfSBSWF9TS0JfTElTVF9FTEVNLCAqUFJYX1NLQl9MSVNUX0VMRU07CisKKy8qCisgKiBSWF9SSU5HX3QgaXMgc3J1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBhZGFwdG9yJ3MgbG9jYWwgcmVmZXJlbmNlKHMpIHRvIHRoZQorICogcmluZ3MKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3J4X3JpbmdfdCB7CisjaWZkZWYgVVNFX0ZCUjAKKwl2b2lkICpwRmJyMFJpbmdWYTsKKwlkbWFfYWRkcl90IHBGYnIwUmluZ1BhOworCXZvaWQgKkZicjBNZW1WYVtNQVhfREVTQ19QRVJfUklOR19SWCAvIEZCUl9DSFVOS1NdOworCWRtYV9hZGRyX3QgRmJyME1lbVBhW01BWF9ERVNDX1BFUl9SSU5HX1JYIC8gRkJSX0NIVU5LU107CisJdWludDY0X3QgRmJyMFJlYWxwYTsKKwl1aW50NjRfdCBGYnIwb2Zmc2V0OworCURNQTEwV190IGxvY2FsX0ZicjBfZnVsbDsKKwl1MzIgRmJyME51bUVudHJpZXM7CisJdTMyIEZicjBCdWZmZXJTaXplOworI2VuZGlmCisJdm9pZCAqcEZicjFSaW5nVmE7CisJZG1hX2FkZHJfdCBwRmJyMVJpbmdQYTsKKwl2b2lkICpGYnIxTWVtVmFbTUFYX0RFU0NfUEVSX1JJTkdfUlggLyBGQlJfQ0hVTktTXTsKKwlkbWFfYWRkcl90IEZicjFNZW1QYVtNQVhfREVTQ19QRVJfUklOR19SWCAvIEZCUl9DSFVOS1NdOworCXVpbnQ2NF90IEZicjFSZWFscGE7CisJdWludDY0X3QgRmJyMW9mZnNldDsKKwlGQlJMT09LVVBUQUJMRSAqRmJyWzJdOworCURNQTEwV190IGxvY2FsX0ZicjFfZnVsbDsKKwl1MzIgRmJyMU51bUVudHJpZXM7CisJdTMyIEZicjFCdWZmZXJTaXplOworCisJdm9pZCAqcFBTUmluZ1ZhOworCWRtYV9hZGRyX3QgcFBTUmluZ1BhOworCXVpbnQ2NF90IHBQU1JpbmdSZWFsUGE7CisJdWludDY0X3QgcFBTUmluZ09mZnNldDsKKwlSWERNQV9QU1JfRlVMTF9PRkZTRVRfdCBsb2NhbF9wc3JfZnVsbDsKKwl1MzIgUHNyTnVtRW50cmllczsKKworCXZvaWQgKnBSeFN0YXR1c1ZhOworCWRtYV9hZGRyX3QgcFJ4U3RhdHVzUGE7CisJdWludDY0X3QgUnhTdGF0dXNSZWFsUEE7CisJdWludDY0X3QgUnhTdGF0dXNPZmZzZXQ7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIFJlY3ZCdWZmZXJQb29sOworCisJLyogUkVDViAqLworCXN0cnVjdCBsaXN0X2hlYWQgUmVjdkxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBSZWN2UGVuZGluZ0xpc3Q7CisJdTMyIG5SZWFkeVJlY3Y7CisKKwl1MzIgTnVtUmZkOworCisJYm9vbCBVbmZpbmlzaGVkUmVjZWl2ZXM7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIFJlY3ZQYWNrZXRQb29sOworCisJLyogbG9va2FzaWRlIGxpc3RzICovCisJc3RydWN0IGttZW1fY2FjaGUgKlJlY3ZMb29rYXNpZGU7Cit9IFJYX1JJTkdfdCwgKlBSWF9SSU5HX3Q7CisKKy8qIEZvcndhcmQgcmVmZXJlbmNlIG9mIFJGRCAqLworc3RydWN0IF9NUF9SRkQ7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBldDEzMXhfYWRhcHRlcjsKKworLyogUFJPVE9UWVBFUyBmb3IgSW5pdGlhbGl6YXRpb24gKi8KK2ludCBldDEzMXhfcnhfZG1hX21lbW9yeV9hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfcnhfZG1hX21lbW9yeV9mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgZXQxMzF4X3JmZF9yZXNvdXJjZXNfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCBfTVBfUkZEICpwTXBSZmQpOwordm9pZCBldDEzMXhfcmZkX3Jlc291cmNlc19mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICBzdHJ1Y3QgX01QX1JGRCAqcE1wUmZkKTsKK2ludCBldDEzMXhfaW5pdF9yZWN2KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQgQ29uZmlnUnhEbWFSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIFNldFJ4RG1hVGltZXIoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3J4X2RtYV9kaXNhYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9yeF9kbWFfZW5hYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQgZXQxMzF4X3Jlc2V0X3JlY3Yoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZCBldDEzMXhfaGFuZGxlX3JlY3ZfaW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKyNlbmRpZiAvKiBfX0VUMTMxMF9SWF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF90eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NWMyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF90eC5jCkBAIC0wLDAgKzEsMTUyNSBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfdHguYyAtIFJvdXRpbmVzIHVzZWQgdG8gcGVyZm9ybSBkYXRhIHRyYW5zbWlzc2lvbi4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgorI2luY2x1ZGUgImV0MTMxeF9pc3IuaCIKKworI2luY2x1ZGUgImV0MTMxMF90eC5oIgorCisvKiBEYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKK2V4dGVybiBkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbzsKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKK3N0YXRpYyB2b2lkIGV0MTMxeF91cGRhdGVfdGNiX2xpc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7CitzdGF0aWMgdm9pZCBldDEzMXhfY2hlY2tfc2VuZF93YWl0X2xpc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7CitzdGF0aWMgaW5saW5lIHZvaWQgZXQxMzF4X2ZyZWVfc2VuZF9wYWNrZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKKwkJCQkJICAgUE1QX1RDQiBwTXBUY2IpOworc3RhdGljIGludCBldDEzMXhfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgIHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOworc3RhdGljIGludCBuaWNfc2VuZF9wYWNrZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgUE1QX1RDQiBwTXBUY2IpOworCisvKioKKyAqIGV0MTMxeF90eF9kbWFfbWVtb3J5X2FsbG9jCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpLgorICoKKyAqIEFsbG9jYXRlcyBtZW1vcnkgdGhhdCB3aWxsIGJlIHZpc2libGUgYm90aCB0byB0aGUgZGV2aWNlIGFuZCB0byB0aGUgQ1BVLgorICogVGhlIE9TIHdpbGwgcGFzcyB1cyBwYWNrZXRzLCBwb2ludGVycyB0byB3aGljaCB3ZSB3aWxsIGluc2VydCBpbiB0aGUgVHgKKyAqIERlc2NyaXB0b3IgcXVldWUuIFRoZSBkZXZpY2Ugd2lsbCByZWFkIHRoaXMgcXVldWUgdG8gZmluZCB0aGUgcGFja2V0cyBpbgorICogbWVtb3J5LiBUaGUgZGV2aWNlIHdpbGwgdXBkYXRlIHRoZSAic3RhdHVzIiBpbiBtZW1vcnkgZWFjaCB0aW1lIGl0IHhtaXRzIGEKKyAqIHBhY2tldC4KKyAqLworaW50IGV0MTMxeF90eF9kbWFfbWVtb3J5X2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgZGVzY19zaXplID0gMDsKKwlUWF9SSU5HX3QgKnR4X3JpbmcgPSAmYWRhcHRlci0+VHhSaW5nOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFRDQidzIChUcmFuc21pdCBDb250cm9sIEJsb2NrKSAqLworCWFkYXB0ZXItPlR4UmluZy5NcFRjYk1lbSA9IChNUF9UQ0IgKikga2NhbGxvYyhOVU1fVENCLCBzaXplb2YoTVBfVENCKSwKKwkJCQkJCSAgICAgIEdGUF9BVE9NSUMgfCBHRlBfRE1BKTsKKwlpZiAoIWFkYXB0ZXItPlR4UmluZy5NcFRjYk1lbSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciBUQ0JzXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIFR4IGRlc2NyaXB0b3IgcmluZywgYW5kIGFsbG9jYXRlCisJICogc29tZSBleHRyYSBzbyB0aGF0IHRoZSByaW5nIGNhbiBiZSBhbGlnbmVkIG9uIGEgNGsgYm91bmRhcnkuCisJICovCisJZGVzY19zaXplID0gKHNpemVvZihUWF9ERVNDX0VOVFJZX3QpICogTlVNX0RFU0NfUEVSX1JJTkdfVFgpICsgNDA5NiAtIDE7CisJdHhfcmluZy0+cFR4RGVzY1JpbmdWYSA9CisJICAgIChQVFhfREVTQ19FTlRSWV90KSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBkZXNjX3NpemUsCisJCQkJCQkgICAgJnR4X3JpbmctPnBUeERlc2NSaW5nUGEpOworCWlmICghYWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgVHggUmluZ1xuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFNhdmUgcGh5c2ljYWwgYWRkcmVzcworCSAqCisJICogTk9URTogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSwgdXNlZCBhYm92ZSB0byBhbGxvYyBETUEgcmVnaW9ucywKKwkgKiBBTFdBWVMgcmV0dXJucyBTQUMgKDMyLWJpdCkgYWRkcmVzc2VzLiBJZiBEQUMgKDY0LWJpdCkgYWRkcmVzc2VzCisJICogYXJlIGV2ZXIgcmV0dXJuZWQsIG1ha2Ugc3VyZSB0aGUgaGlnaCBwYXJ0IGlzIHJldHJpZXZlZCBoZXJlIGJlZm9yZQorCSAqIHN0b3JpbmcgdGhlIGFkanVzdGVkIGFkZHJlc3MuCisJICovCisJdHhfcmluZy0+cFR4RGVzY1JpbmdBZGp1c3RlZFBhID0gdHhfcmluZy0+cFR4RGVzY1JpbmdQYTsKKworCS8qIEFsaWduIFR4IERlc2NyaXB0b3IgUmluZyBvbiBhIDRrICgweDEwMDApIGJ5dGUgYm91bmRhcnkgKi8KKwlldDEzMXhfYWxpZ25fYWxsb2NhdGVkX21lbW9yeShhZGFwdGVyLAorCQkJCSAgICAgICZ0eF9yaW5nLT5wVHhEZXNjUmluZ0FkanVzdGVkUGEsCisJCQkJICAgICAgJnR4X3JpbmctPlR4RGVzY09mZnNldCwgMHgwRkZGKTsKKworCXR4X3JpbmctPnBUeERlc2NSaW5nVmEgKz0gdHhfcmluZy0+VHhEZXNjT2Zmc2V0OworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgVHggc3RhdHVzIGJsb2NrICovCisJdHhfcmluZy0+cFR4U3RhdHVzVmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgIHNpemVvZihUWF9TVEFUVVNfQkxPQ0tfdCksCisJCQkJCQkgICAgJnR4X3JpbmctPnBUeFN0YXR1c1BhKTsKKwlpZiAoIWFkYXB0ZXItPlR4UmluZy5wVHhTdGF0dXNQYSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciBUeCBzdGF0dXMgYmxvY2tcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGEgZHVtbXkgYnVmZmVyICovCisJdHhfcmluZy0+cFR4RHVtbXlCbGtWYSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgICBOSUNfTUlOX1BBQ0tFVF9TSVpFLAorCQkJCQkJICAgICAgJnR4X3JpbmctPnBUeER1bW15QmxrUGEpOworCWlmICghYWRhcHRlci0+VHhSaW5nLnBUeER1bW15QmxrUGEpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgVHggZHVtbXkgYnVmZmVyXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBldDEzMXhfdHhfZG1hX21lbW9yeV9mcmVlIC0gRnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCB3aXRoaW4gdGhpcyBtb2R1bGUKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkuCisgKi8KK3ZvaWQgZXQxMzF4X3R4X2RtYV9tZW1vcnlfZnJlZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGRlc2Nfc2l6ZSA9IDA7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJaWYgKGFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhKSB7CisJCS8qIEZyZWUgbWVtb3J5IHJlbGF0aW5nIHRvIFR4IHJpbmdzIGhlcmUgKi8KKwkJYWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgLT0gYWRhcHRlci0+VHhSaW5nLlR4RGVzY09mZnNldDsKKworCQlkZXNjX3NpemUgPQorCQkgICAgKHNpemVvZihUWF9ERVNDX0VOVFJZX3QpICogTlVNX0RFU0NfUEVSX1JJTkdfVFgpICsgNDA5NiAtIDE7CisKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCSAgICBkZXNjX3NpemUsCisJCQkJICAgIGFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhLAorCQkJCSAgICBhZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdQYSk7CisKKwkJYWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgPSBOVUxMOworCX0KKworCS8qIEZyZWUgbWVtb3J5IGZvciB0aGUgVHggc3RhdHVzIGJsb2NrICovCisJaWYgKGFkYXB0ZXItPlR4UmluZy5wVHhTdGF0dXNWYSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJICAgIHNpemVvZihUWF9TVEFUVVNfQkxPQ0tfdCksCisJCQkJICAgIGFkYXB0ZXItPlR4UmluZy5wVHhTdGF0dXNWYSwKKwkJCQkgICAgYWRhcHRlci0+VHhSaW5nLnBUeFN0YXR1c1BhKTsKKworCQlhZGFwdGVyLT5UeFJpbmcucFR4U3RhdHVzVmEgPSBOVUxMOworCX0KKworCS8qIEZyZWUgbWVtb3J5IGZvciB0aGUgZHVtbXkgYnVmZmVyICovCisJaWYgKGFkYXB0ZXItPlR4UmluZy5wVHhEdW1teUJsa1ZhKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkgICAgTklDX01JTl9QQUNLRVRfU0laRSwKKwkJCQkgICAgYWRhcHRlci0+VHhSaW5nLnBUeER1bW15QmxrVmEsCisJCQkJICAgIGFkYXB0ZXItPlR4UmluZy5wVHhEdW1teUJsa1BhKTsKKworCQlhZGFwdGVyLT5UeFJpbmcucFR4RHVtbXlCbGtWYSA9IE5VTEw7CisJfQorCisJLyogRnJlZSB0aGUgbWVtb3J5IGZvciBNUF9UQ0Igc3RydWN0dXJlcyAqLworCWlmIChhZGFwdGVyLT5UeFJpbmcuTXBUY2JNZW0pIHsKKwkJa2ZyZWUoYWRhcHRlci0+VHhSaW5nLk1wVGNiTWVtKTsKKwkJYWRhcHRlci0+VHhSaW5nLk1wVGNiTWVtID0gTlVMTDsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIENvbmZpZ1R4RG1hUmVncyAtIFNldCB1cCB0aGUgdHggZG1hIHNlY3Rpb24gb2YgdGhlIEpBR0NvcmUuCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIENvbmZpZ1R4RG1hUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXN0cnVjdCBfVFhETUFfdCBfX2lvbWVtICpwVHhEbWEgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnR4ZG1hOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIExvYWQgdGhlIGhhcmR3YXJlIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSB0cmFuc21pdCBkZXNjcmlwdG9yIHJpbmcuICovCisJd3JpdGVsKCh1aW50MzJfdCkgKHBBZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdBZGp1c3RlZFBhID4+IDMyKSwKKwkgICAgICAgJnBUeERtYS0+cHJfYmFzZV9oaSk7CisJd3JpdGVsKCh1aW50MzJfdCkgcEFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ0FkanVzdGVkUGEsCisJICAgICAgICZwVHhEbWEtPnByX2Jhc2VfbG8pOworCisJLyogSW5pdGlhbGlzZSB0aGUgdHJhbnNtaXQgRE1BIGVuZ2luZSAqLworCXdyaXRlbChOVU1fREVTQ19QRVJfUklOR19UWCAtIDEsICZwVHhEbWEtPnByX251bV9kZXMudmFsdWUpOworCisJLyogTG9hZCB0aGUgY29tcGxldGlvbiB3cml0ZWJhY2sgcGh5c2ljYWwgYWRkcmVzcworCSAqCisJICogTk9URTogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSwgdXNlZCBhYm92ZSB0byBhbGxvYyBETUEgcmVnaW9ucywKKwkgKiBBTFdBWVMgcmV0dXJucyBTQUMgKDMyLWJpdCkgYWRkcmVzc2VzLiBJZiBEQUMgKDY0LWJpdCkgYWRkcmVzc2VzCisJICogYXJlIGV2ZXIgcmV0dXJuZWQsIG1ha2Ugc3VyZSB0aGUgaGlnaCBwYXJ0IGlzIHJldHJpZXZlZCBoZXJlIGJlZm9yZQorCSAqIHN0b3JpbmcgdGhlIGFkanVzdGVkIGFkZHJlc3MuCisJICovCisJd3JpdGVsKDAsICZwVHhEbWEtPmRtYV93Yl9iYXNlX2hpKTsKKwl3cml0ZWwocEFkYXB0ZXItPlR4UmluZy5wVHhTdGF0dXNQYSwgJnBUeERtYS0+ZG1hX3diX2Jhc2VfbG8pOworCisJbWVtc2V0KHBBZGFwdGVyLT5UeFJpbmcucFR4U3RhdHVzVmEsIDAsIHNpemVvZihUWF9TVEFUVVNfQkxPQ0tfdCkpOworCisJd3JpdGVsKDAsICZwVHhEbWEtPnNlcnZpY2VfcmVxdWVzdC52YWx1ZSk7CisJcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLnZhbHVlID0gMDsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X3R4X2RtYV9kaXNhYmxlIC0gU3RvcCBvZiBUeF9ETUEgb24gdGhlIEVUMTMxMAorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIGV0MTMxeF90eF9kbWFfZGlzYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBTZXR1cCB0aGUgdHJhbXNtaXQgZG1hIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKwl3cml0ZWwoMHgxMDEsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhkbWEuY3NyLnZhbHVlKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X3R4X2RtYV9lbmFibGUgLSByZS1zdGFydCBvZiBUeF9ETUEgb24gdGhlIEVUMTMxMC4KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBNYWlubHkgdXNlZCBhZnRlciBhIHJldHVybiB0byB0aGUgRDAgKGZ1bGwtcG93ZXIpIHN0YXRlIGZyb20gYSBsb3dlciBzdGF0ZS4KKyAqLwordm9pZCBldDEzMXhfdHhfZG1hX2VuYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5UGh5TG9vcGJrKSB7CisJLyogVHhETUEgaXMgZGlzYWJsZWQgZm9yIGxvb3BiYWNrIG9wZXJhdGlvbi4gKi8KKwkJd3JpdGVsKDB4MTAxLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnR4ZG1hLmNzci52YWx1ZSk7CisJfSBlbHNlIHsKKwkJVFhETUFfQ1NSX3QgY3NyID0geyAwIH07CisKKwkJLyogU2V0dXAgdGhlIHRyYW5zbWl0IGRtYSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGZvciBub3JtYWwKKwkJICogb3BlcmF0aW9uCisJCSAqLworCQljc3IuYml0cy5zbmdsX2Vwa3RfbW9kZSA9IDE7CisJCWNzci5iaXRzLmhhbHQgPSAwOworCQljc3IuYml0cy5jYWNoZV90aHJzaGxkID0gcEFkYXB0ZXItPlJlZ2lzdHJ5RE1BQ2FjaGU7CisJCXdyaXRlbChjc3IudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhkbWEuY3NyLnZhbHVlKTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF9pbml0X3NlbmQgLSBJbml0aWFsaXplIHNlbmQgZGF0YSBzdHJ1Y3R1cmVzCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIGV0MTMxeF9pbml0X3NlbmQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCVBNUF9UQ0IgcE1wVGNiOworCXVpbnQzMl90IFRjYkNvdW50OworCVRYX1JJTkdfdCAqdHhfcmluZzsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBTZXR1cCBzb21lIGNvbnZlbmllbmNlIHBvaW50ZXJzICovCisJdHhfcmluZyA9ICZhZGFwdGVyLT5UeFJpbmc7CisJcE1wVGNiID0gYWRhcHRlci0+VHhSaW5nLk1wVGNiTWVtOworCisJdHhfcmluZy0+VENCUmVhZHlRdWV1ZUhlYWQgPSBwTXBUY2I7CisKKwkvKiBHbyB0aHJvdWdoIGFuZCBzZXQgdXAgZWFjaCBUQ0IgKi8KKwlmb3IgKFRjYkNvdW50ID0gMDsgVGNiQ291bnQgPCBOVU1fVENCOyBUY2JDb3VudCsrKSB7CisJCW1lbXNldChwTXBUY2IsIDAsIHNpemVvZihNUF9UQ0IpKTsKKworCQkvKiBTZXQgdGhlIGxpbmsgcG9pbnRlciBpbiBIVyBUQ0IgdG8gdGhlIG5leHQgVENCIGluIHRoZQorCQkgKiBjaGFpbi4gIElmIHRoaXMgaXMgdGhlIGxhc3QgVENCIGluIHRoZSBjaGFpbiwgYWxzbyBzZXQgdGhlCisJCSAqIHRhaWwgcG9pbnRlci4KKwkJICovCisJCWlmIChUY2JDb3VudCA8IE5VTV9UQ0IgLSAxKSB7CisJCQlwTXBUY2ItPk5leHQgPSBwTXBUY2IgKyAxOworCQl9IGVsc2UgeworCQkJdHhfcmluZy0+VENCUmVhZHlRdWV1ZVRhaWwgPSBwTXBUY2I7CisJCQlwTXBUY2ItPk5leHQgPSAoUE1QX1RDQikgTlVMTDsKKwkJfQorCisJCXBNcFRjYisrOworCX0KKworCS8qIEN1cnIgc2VuZCBxdWV1ZSBzaG91bGQgbm93IGJlIGVtcHR5ICovCisJdHhfcmluZy0+Q3VyclNlbmRIZWFkID0gKFBNUF9UQ0IpIE5VTEw7CisJdHhfcmluZy0+Q3VyclNlbmRUYWlsID0gKFBNUF9UQ0IpIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+VHhSaW5nLlNlbmRXYWl0UXVldWUpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfc2VuZF9wYWNrZXRzIC0gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIE9TIHRvIHNlbmQgcGFja2V0cworICogQHNrYjogdGhlIHBhY2tldChzKSB0byBzZW5kCisgKiBAbmV0ZGV2OmRldmljZSBvbiB3aGljaCB0byBUWCB0aGUgYWJvdmUgcGFja2V0KHMpCisgKgorICogUmV0dXJuIDAgaW4gYWxtb3N0IGFsbCBjYXNlczsgbm9uLXplcm8gdmFsdWUgaW4gZXh0cmVtZSBoYXJkIGZhaWx1cmUgb25seQorICovCitpbnQgZXQxMzF4X3NlbmRfcGFja2V0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIgPSBOVUxMOworCisJREJHX1RYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCXBBZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qIFNlbmQgdGhlc2UgcGFja2V0cworCSAqCisJICogTk9URTogVGhlIExpbnV4IFR4IGVudHJ5IHBvaW50IGlzIG9ubHkgZ2l2ZW4gb25lIHBhY2tldCBhdCBhIHRpbWUKKwkgKiB0byBUeCwgc28gdGhlIFBhY2tldENvdW50IGFuZCBpdCdzIGFycmF5IHVzZWQgbWFrZXMgbm8gc2Vuc2UgaGVyZQorCSAqLworCisJLyogUXVldWUgaXMgbm90IGVtcHR5IG9yIFRDQiBpcyBub3QgYXZhaWxhYmxlICovCisJaWYgKCFsaXN0X2VtcHR5KCZwQWRhcHRlci0+VHhSaW5nLlNlbmRXYWl0UXVldWUpIHx8CisJICAgIE1QX1RDQl9SRVNPVVJDRVNfTk9UX0FWQUlMQUJMRShwQWRhcHRlcikpIHsKKwkJLyogTk9URTogSWYgdGhlcmUncyBhbiBlcnJvciBvbiBzZW5kLCBubyBuZWVkIHRvIHF1ZXVlIHRoZQorCQkgKiBwYWNrZXQgdW5kZXIgTGludXg7IGlmIHdlIGp1c3Qgc2VuZCBhbiBlcnJvciB1cCB0byB0aGUKKwkJICogbmV0aWYgbGF5ZXIsIGl0IHdpbGwgcmVzZW5kIHRoZSBza2IgdG8gdXMuCisJCSAqLworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlRDQiBSZXNvdXJjZXMgTm90IEF2YWlsYWJsZVxuIik7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfSBlbHNlIHsKKwkJLyogV2UgbmVlZCB0byBzZWUgaWYgdGhlIGxpbmsgaXMgdXA7IGlmIGl0J3Mgbm90LCBtYWtlIHRoZQorCQkgKiBuZXRpZiBsYXllciB0aGluayB3ZSdyZSBnb29kIGFuZCBkcm9wIHRoZSBwYWNrZXQKKwkJICovCisJCS8vaWYoIE1QX1NIT1VMRF9GQUlMX1NFTkQoIHBBZGFwdGVyICkgfHwgcEFkYXB0ZXItPkRyaXZlck5vUGh5QWNjZXNzICkKKwkJaWYgKE1QX1NIT1VMRF9GQUlMX1NFTkQocEFkYXB0ZXIpIHx8IHBBZGFwdGVyLT5Ecml2ZXJOb1BoeUFjY2VzcworCQkgICAgfHwgIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgeworCQkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJDYW4ndCBUeCwgTGluayBpcyBET1dOOyBkcm9wIHRoZSBwYWNrZXRcbiIpOworCisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJc2tiID0gTlVMTDsKKworCQkJcEFkYXB0ZXItPm5ldF9zdGF0cy50eF9kcm9wcGVkKys7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSBldDEzMXhfc2VuZF9wYWNrZXQoc2tiLCBwQWRhcHRlcik7CisKKwkJCWlmIChzdGF0dXMgPT0gLUVOT01FTSkgeworCisJCQkJLyogTk9URTogSWYgdGhlcmUncyBhbiBlcnJvciBvbiBzZW5kLCBubyBuZWVkCisJCQkJICogdG8gcXVldWUgdGhlIHBhY2tldCB1bmRlciBMaW51eDsgaWYgd2UganVzdAorCQkJCSAqIHNlbmQgYW4gZXJyb3IgdXAgdG8gdGhlIG5ldGlmIGxheWVyLCBpdAorCQkJCSAqIHdpbGwgcmVzZW5kIHRoZSBza2IgdG8gdXMuCisJCQkJICovCisJCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJCSAgICAiUmVzb3VyY2VzIHByb2JsZW0sIFF1ZXVlIHR4IHBhY2tldFxuIik7CisJCQl9IGVsc2UgaWYgKHN0YXR1cyAhPSAwKSB7CisJCQkJLyogT24gYW55IG90aGVyIGVycm9yLCBtYWtlIG5ldGlmIHRoaW5rIHdlJ3JlCisJCQkJICogT0sgYW5kIGRyb3AgdGhlIHBhY2tldAorCQkJCSAqLworCQkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkgICAgIkdlbmVyYWwgZXJyb3IsIGRyb3AgcGFja2V0XG4iKTsKKworCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJc2tiID0gTlVMTDsKKworCQkJCXBBZGFwdGVyLT5uZXRfc3RhdHMudHhfZHJvcHBlZCsrOworCQkJfQorCQl9CisJfQorCisJREJHX1RYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGV0MTMxeF9zZW5kX3BhY2tldCAtIERvIHRoZSB3b3JrIHRvIHNlbmQgYSBwYWNrZXQKKyAqIEBza2I6IHRoZSBwYWNrZXQocykgdG8gc2VuZAorICogQHBBZGFwdGVyOiBhIHBvaW50ZXIgdG8gdGhlIGRldmljZSdzIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gMCBpbiBhbG1vc3QgYWxsIGNhc2VzOyBub24temVybyB2YWx1ZSBpbiBleHRyZW1lIGhhcmQgZmFpbHVyZSBvbmx5LgorICoKKyAqIEFzc3VtcHRpb246IFNlbmQgc3BpbmxvY2sgaGFzIGJlZW4gYWNxdWlyZWQKKyAqLworc3RhdGljIGludCBldDEzMXhfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgIHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJaW50IHN0YXR1cyA9IDA7CisJUE1QX1RDQiBwTXBUY2IgPSBOVUxMOworCXVpbnQxNl90ICpwU2hCdWZWYTsKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKworCURCR19UWF9FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBJcyBvdXIgYnVmZmVyIHNjYXR0ZXJlZCwgb3IgY29udGludW91cz8gKi8KKwlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKSB7CisJCURCR19UWChldDEzMXhfZGJnaW5mbywgIlNjYXR0ZXJlZCBidWZmZXI6IE5PXG4iKTsKKwl9IGVsc2UgeworCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sICJTY2F0dGVyZWQgYnVmZmVyOiBZRVMsIE51bSBGcmFnczogJWRcbiIsCisJCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKTsKKwl9CisKKwkvKiBBbGwgcGFja2V0cyBtdXN0IGhhdmUgYXQgbGVhc3QgYSBNQUMgYWRkcmVzcyBhbmQgYSBwcm90b2NvbCB0eXBlICovCisJaWYgKHNrYi0+bGVuIDwgRVRIX0hMRU4pIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiUGFja2V0IHNpemUgPCBFVEhfSExFTiAoMTQgYnl0ZXMpXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogR2V0IGEgVENCIGZvciB0aGlzIHBhY2tldCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCUmVhZHlRTG9jaywgbG9ja2ZsYWdzKTsKKworCXBNcFRjYiA9IHBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZUhlYWQ7CisKKwlpZiAocE1wVGNiID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlJlYWR5UUxvY2ssIGxvY2tmbGFncyk7CisKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sICJDYW4ndCBvYnRhaW4gYSBUQ0JcbiIpOworCQlEQkdfVFhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVIZWFkID0gcE1wVGNiLT5OZXh0OworCisJaWYgKHBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZUhlYWQgPT0gTlVMTCkgeworCQlwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVUYWlsID0gTlVMTDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCUmVhZHlRTG9jaywgbG9ja2ZsYWdzKTsKKworCXBNcFRjYi0+UGFja2V0TGVuZ3RoID0gc2tiLT5sZW47CisJcE1wVGNiLT5QYWNrZXQgPSBza2I7CisKKwlpZiAoKHNrYi0+ZGF0YSAhPSBOVUxMKSAmJiAoKHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbikgPj0gNikpIHsKKwkJcFNoQnVmVmEgPSAodWludDE2X3QgKikgc2tiLT5kYXRhOworCisJCWlmICgocFNoQnVmVmFbMF0gPT0gMHhmZmZmKSAmJgorCQkgICAgKHBTaEJ1ZlZhWzFdID09IDB4ZmZmZikgJiYgKHBTaEJ1ZlZhWzJdID09IDB4ZmZmZikpIHsKKwkJCU1QX1NFVF9GTEFHKHBNcFRjYiwgZk1QX0RFU1RfQlJPQUQpOworCQl9IGVsc2UgaWYgKChwU2hCdWZWYVswXSAmIDB4MykgPT0gMHgwMDAxKSB7CisJCQlNUF9TRVRfRkxBRyhwTXBUY2IsIGZNUF9ERVNUX01VTFRJKTsKKwkJfQorCX0KKworCXBNcFRjYi0+TmV4dCA9IE5VTEw7CisKKwkvKiBDYWxsIHRoZSBOSUMgc3BlY2lmaWMgc2VuZCBoYW5kbGVyLiAqLworCWlmIChzdGF0dXMgPT0gMCkgeworCQlzdGF0dXMgPSBuaWNfc2VuZF9wYWNrZXQocEFkYXB0ZXIsIHBNcFRjYik7CisJfQorCisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCUmVhZHlRTG9jaywgbG9ja2ZsYWdzKTsKKworCQlpZiAocEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlVGFpbCkgeworCQkJcEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlVGFpbC0+TmV4dCA9IHBNcFRjYjsKKwkJfSBlbHNlIHsKKwkJCS8qIEFwcGFyZW50bHkgcmVhZHkgUSBpcyBlbXB0eS4gKi8KKwkJCXBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZUhlYWQgPSBwTXBUY2I7CisJCX0KKworCQlwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVUYWlsID0gcE1wVGNiOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JSZWFkeVFMb2NrLCBsb2NrZmxhZ3MpOworCisJCURCR19UWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJREJHX0FTU0VSVChwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZCA8PSBOVU1fVENCKTsKKworCURCR19UWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbmljX3NlbmRfcGFja2V0IC0gTklDIHNwZWNpZmljIHNlbmQgaGFuZGxlciBmb3IgdmVyc2lvbiBCIHNpbGljb24uCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqIEBwTXBUY2I6IHBvaW50ZXIgdG8gTVBfVENCCisgKgorICogUmV0dXJucyAwIG9yIGVycm5vLgorICovCitzdGF0aWMgaW50IG5pY19zZW5kX3BhY2tldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCBQTVBfVENCIHBNcFRjYikKK3sKKwl1aW50MzJfdCBsb29wSW5kZXg7CisJVFhfREVTQ19FTlRSWV90IEN1ckRlc2NbMjRdOworCXVpbnQzMl90IEZyYWdtZW50TnVtYmVyID0gMDsKKwl1aW50MzJfdCBpVGhpc0NvcHksIGlSZW1haW5kZXI7CisJc3RydWN0IHNrX2J1ZmYgKnBQYWNrZXQgPSBwTXBUY2ItPlBhY2tldDsKKwl1aW50MzJfdCBGcmFnTGlzdENvdW50ID0gc2tiX3NoaW5mbyhwUGFja2V0KS0+bnJfZnJhZ3MgKyAxOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKnBGcmFnTGlzdCA9ICZza2Jfc2hpbmZvKHBQYWNrZXQpLT5mcmFnc1swXTsKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczEsIGxvY2tmbGFnczI7CisKKwlEQkdfVFhfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUGFydCBvZiB0aGUgb3B0aW1pemF0aW9ucyBvZiB0aGlzIHNlbmQgcm91dGluZSByZXN0cmljdCB1cyB0bworCSAqIHNlbmRpbmcgMjQgZnJhZ21lbnRzIGF0IGEgcGFzcy4gIEluIHByYWN0aWNlIHdlIHNob3VsZCBuZXZlciBzZWUKKwkgKiBtb3JlIHRoYW4gNSBmcmFnbWVudHMuCisJICoKKwkgKiBOT1RFOiBUaGUgb2xkZXIgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIChiZWxvdykgY2FuIGhhbmRsZSBhbnkKKwkgKiBudW1iZXIgb2YgZnJhZ21lbnRzLiBJZiBuZWVkZWQsIHdlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24sCisJICogYWx0aG91Z2ggaXQgaXMgbGVzcyBlZmZpY2llbnQuCisJICovCisJaWYgKEZyYWdMaXN0Q291bnQgPiAyMykgeworCQlEQkdfVFhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwltZW1zZXQoQ3VyRGVzYywgMCwgc2l6ZW9mKFRYX0RFU0NfRU5UUllfdCkgKiAoRnJhZ0xpc3RDb3VudCArIDEpKTsKKworCWZvciAobG9vcEluZGV4ID0gMDsgbG9vcEluZGV4IDwgRnJhZ0xpc3RDb3VudDsgbG9vcEluZGV4KyspIHsKKwkJLyogSWYgdGhlcmUgaXMgc29tZXRoaW5nIGluIHRoaXMgZWxlbWVudCwgbGV0cyBnZXQgYQorCQkgKiBkZXNjcmlwdG9yIGZyb20gdGhlIHJpbmcgYW5kIGdldCB0aGUgbmVjZXNzYXJ5IGRhdGEKKwkJICovCisJCWlmIChsb29wSW5kZXggPT0gMCkgeworCQkJLyogSWYgdGhlIGZyYWdtZW50cyBhcmUgc21hbGxlciB0aGFuIGEgc3RhbmRhcmQgTVRVLAorCQkJICogdGhlbiBtYXAgdGhlbSB0byBhIHNpbmdsZSBkZXNjcmlwdG9yIGluIHRoZSBUeAorCQkJICogRGVzYyByaW5nLiBIb3dldmVyLCBpZiB0aGV5J3JlIGxhcmdlciwgYXMgaXMKKwkJCSAqIHBvc3NpYmxlIHdpdGggc3VwcG9ydCBmb3IganVtYm8gcGFja2V0cywgdGhlbgorCQkJICogc3BsaXQgdGhlbSBlYWNoIGFjcm9zcyAyIGRlc2NyaXB0b3JzLgorCQkJICoKKwkJCSAqIFRoaXMgd2lsbCB3b3JrIHVudGlsIHdlIGRldGVybWluZSB3aHkgdGhlIGhhcmR3YXJlCisJCQkgKiBkb2Vzbid0IHNlZW0gdG8gbGlrZSBsYXJnZSBmcmFnbWVudHMuCisJCQkgKi8KKwkJCWlmICgocFBhY2tldC0+bGVuIC0gcFBhY2tldC0+ZGF0YV9sZW4pIDw9IDE1MTQpIHsKKwkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICAgICJHb3QgcGFja2V0IG9mIGxlbmd0aCAlZCwgIgorCQkJCSAgICAgICAiZmlsbGluZyBkZXNjIGVudHJ5ICVkLCAiCisJCQkJICAgICAgICJUQ0I6IDB4JXBcbiIsCisJCQkJICAgICAgIChwUGFja2V0LT5sZW4gLSBwUGFja2V0LT5kYXRhX2xlbiksCisJCQkJICAgICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLgorCQkJCSAgICAgICB2YWwsIHBNcFRjYik7CisKKwkJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyXS5EYXRhQnVmZmVyUHRySGlnaCA9IDA7CisKKwkJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyXS53b3JkMi5iaXRzLgorCQkJCSAgICBsZW5ndGhfaW5fYnl0ZXMgPQorCQkJCSAgICBwUGFja2V0LT5sZW4gLSBwUGFja2V0LT5kYXRhX2xlbjsKKworCQkJCS8qIE5PVEU6IEhlcmUsIHRoZSBkbWFfYWRkcl90IHJldHVybmVkIGZyb20KKwkJCQkgKiBwY2lfbWFwX3NpbmdsZSgpIGlzIGltcGxpY2l0bHkgY2FzdCBhcyBhCisJCQkJICogdWludDMyX3QuIEFsdGhvdWdoIGRtYV9hZGRyX3QgY2FuIGJlCisJCQkJICogNjQtYml0LCB0aGUgYWRkcmVzcyByZXR1cm5lZCBieQorCQkJCSAqIHBjaV9tYXBfc2luZ2xlKCkgaXMgYWx3YXlzIDMyLWJpdAorCQkJCSAqIGFkZHJlc3NhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBwY2kvZG1hCisJCQkJICogc3Vic3lzdGVtKQorCQkJCSAqLworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXIrK10uRGF0YUJ1ZmZlclB0ckxvdyA9CisJCQkJICAgIHBjaV9tYXBfc2luZ2xlKHBBZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgcFBhY2tldC0+ZGF0YSwKKwkJCQkJCSAgIHBQYWNrZXQtPmxlbiAtCisJCQkJCQkgICBwUGFja2V0LT5kYXRhX2xlbiwKKwkJCQkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJfSBlbHNlIHsKKwkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICAgICJHb3QgcGFja2V0IG9mIGxlbmd0aCAlZCwgIgorCQkJCSAgICAgICAiZmlsbGluZyBkZXNjIGVudHJ5ICVkLCAiCisJCQkJICAgICAgICJUQ0I6IDB4JXBcbiIsCisJCQkJICAgICAgIChwUGFja2V0LT5sZW4gLSBwUGFja2V0LT5kYXRhX2xlbiksCisJCQkJICAgICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLgorCQkJCSAgICAgICB2YWwsIHBNcFRjYik7CisKKwkJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyXS5EYXRhQnVmZmVyUHRySGlnaCA9IDA7CisKKwkJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyXS53b3JkMi5iaXRzLgorCQkJCSAgICBsZW5ndGhfaW5fYnl0ZXMgPQorCQkJCSAgICAoKHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuKSAvIDIpOworCisJCQkJLyogTk9URTogSGVyZSwgdGhlIGRtYV9hZGRyX3QgcmV0dXJuZWQgZnJvbQorCQkJCSAqIHBjaV9tYXBfc2luZ2xlKCkgaXMgaW1wbGljaXRseSBjYXN0IGFzIGEKKwkJCQkgKiB1aW50MzJfdC4gQWx0aG91Z2ggZG1hX2FkZHJfdCBjYW4gYmUKKwkJCQkgKiA2NC1iaXQsIHRoZSBhZGRyZXNzIHJldHVybmVkIGJ5CisJCQkJICogcGNpX21hcF9zaW5nbGUoKSBpcyBhbHdheXMgMzItYml0CisJCQkJICogYWRkcmVzc2FibGUgKGFzIGRlZmluZWQgYnkgdGhlIHBjaS9kbWEKKwkJCQkgKiBzdWJzeXN0ZW0pCisJCQkJICovCisJCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcisrXS5EYXRhQnVmZmVyUHRyTG93ID0KKwkJCQkgICAgcGNpX21hcF9zaW5nbGUocEFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICBwUGFja2V0LT5kYXRhLAorCQkJCQkJICAgKChwUGFja2V0LT5sZW4gLQorCQkJCQkJICAgICBwUGFja2V0LT5kYXRhX2xlbikgLyAyKSwKKwkJCQkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXJdLkRhdGFCdWZmZXJQdHJIaWdoID0gMDsKKworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXJdLndvcmQyLmJpdHMuCisJCQkJICAgIGxlbmd0aF9pbl9ieXRlcyA9CisJCQkJICAgICgocFBhY2tldC0+bGVuIC0gcFBhY2tldC0+ZGF0YV9sZW4pIC8gMik7CisKKwkJCQkvKiBOT1RFOiBIZXJlLCB0aGUgZG1hX2FkZHJfdCByZXR1cm5lZCBmcm9tCisJCQkJICogcGNpX21hcF9zaW5nbGUoKSBpcyBpbXBsaWNpdGx5IGNhc3QgYXMgYQorCQkJCSAqIHVpbnQzMl90LiBBbHRob3VnaCBkbWFfYWRkcl90IGNhbiBiZQorCQkJCSAqIDY0LWJpdCwgdGhlIGFkZHJlc3MgcmV0dXJuZWQgYnkKKwkJCQkgKiBwY2lfbWFwX3NpbmdsZSgpIGlzIGFsd2F5cyAzMi1iaXQKKwkJCQkgKiBhZGRyZXNzYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgcGNpL2RtYQorCQkJCSAqIHN1YnN5c3RlbSkKKwkJCQkgKi8KKwkJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyKytdLkRhdGFCdWZmZXJQdHJMb3cgPQorCQkJCSAgICBwY2lfbWFwX3NpbmdsZShwQWRhcHRlci0+cGRldiwKKwkJCQkJCSAgIHBQYWNrZXQtPmRhdGEgKworCQkJCQkJICAgKChwUGFja2V0LT5sZW4gLQorCQkJCQkJICAgICBwUGFja2V0LT5kYXRhX2xlbikgLyAyKSwKKwkJCQkJCSAgICgocFBhY2tldC0+bGVuIC0KKwkJCQkJCSAgICAgcFBhY2tldC0+ZGF0YV9sZW4pIC8gMiksCisJCQkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCSAgICAgICAiR290IHBhY2tldCBvZiBsZW5ndGggJWQsIgorCQkJICAgICAgICJmaWxsaW5nIGRlc2MgZW50cnkgJWRcbiIKKwkJCSAgICAgICAiVENCOiAweCVwXG4iLAorCQkJICAgICAgIHBGcmFnTGlzdFtsb29wSW5kZXhdLnNpemUsCisJCQkgICAgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMudmFsLAorCQkJICAgICAgIHBNcFRjYik7CisKKwkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXJdLkRhdGFCdWZmZXJQdHJIaWdoID0gMDsKKworCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcl0ud29yZDIuYml0cy5sZW5ndGhfaW5fYnl0ZXMgPQorCQkJICAgIHBGcmFnTGlzdFtsb29wSW5kZXggLSAxXS5zaXplOworCisJCQkvKiBOT1RFOiBIZXJlLCB0aGUgZG1hX2FkZHJfdCByZXR1cm5lZCBmcm9tCisJCQkgKiBwY2lfbWFwX3BhZ2UoKSBpcyBpbXBsaWNpdGx5IGNhc3QgYXMgYSB1aW50MzJfdC4KKwkJCSAqIEFsdGhvdWdoIGRtYV9hZGRyX3QgY2FuIGJlIDY0LWJpdCwgdGhlIGFkZHJlc3MKKwkJCSAqIHJldHVybmVkIGJ5IHBjaV9tYXBfcGFnZSgpIGlzIGFsd2F5cyAzMi1iaXQKKwkJCSAqIGFkZHJlc3NhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBwY2kvZG1hIHN1YnN5c3RlbSkKKwkJCSAqLworCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcisrXS5EYXRhQnVmZmVyUHRyTG93ID0KKwkJCSAgICBwY2lfbWFwX3BhZ2UocEFkYXB0ZXItPnBkZXYsCisJCQkJCSBwRnJhZ0xpc3RbbG9vcEluZGV4IC0gMV0ucGFnZSwKKwkJCQkJIHBGcmFnTGlzdFtsb29wSW5kZXggLSAxXS5wYWdlX29mZnNldCwKKwkJCQkJIHBGcmFnTGlzdFtsb29wSW5kZXggLSAxXS5zaXplLAorCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCX0KKwl9CisKKwlpZiAoRnJhZ21lbnROdW1iZXIgPT0gMCkgeworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywgIk5vLiBmcmFncyBpcyAwXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwMDBNQlBTKSB7CisJCWlmICgrK3BBZGFwdGVyLT5UeFJpbmcuVHhQYWNrZXRzU2luY2VMYXN0aW50ZXJydXB0ID09CisJCSAgICBwQWRhcHRlci0+UmVnaXN0cnlUeE51bUJ1ZmZlcnMpIHsKKwkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXIgLSAxXS53b3JkMy52YWx1ZSA9IDB4NTsKKwkJCXBBZGFwdGVyLT5UeFJpbmcuVHhQYWNrZXRzU2luY2VMYXN0aW50ZXJydXB0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXIgLSAxXS53b3JkMy52YWx1ZSA9IDB4MTsKKwkJfQorCX0gZWxzZSB7CisJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXIgLSAxXS53b3JkMy52YWx1ZSA9IDB4NTsKKwl9CisKKwlDdXJEZXNjWzBdLndvcmQzLmJpdHMuZiA9IDE7CisKKwlwTXBUY2ItPldySW5kZXhTdGFydCA9IHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZDsKKwlwTXBUY2ItPlBhY2tldFN0YWxlQ291bnQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5TZW5kSFdMb2NrLCBsb2NrZmxhZ3MxKTsKKworCWlUaGlzQ29weSA9CisJICAgIE5VTV9ERVNDX1BFUl9SSU5HX1RYIC0gcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMudmFsOworCisJaWYgKGlUaGlzQ29weSA+PSBGcmFnbWVudE51bWJlcikgeworCQlpUmVtYWluZGVyID0gMDsKKwkJaVRoaXNDb3B5ID0gRnJhZ21lbnROdW1iZXI7CisJfSBlbHNlIHsKKwkJaVJlbWFpbmRlciA9IEZyYWdtZW50TnVtYmVyIC0gaVRoaXNDb3B5OworCX0KKworCW1lbWNweShwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgKworCSAgICAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy52YWwsIEN1ckRlc2MsCisJICAgICAgIHNpemVvZihUWF9ERVNDX0VOVFJZX3QpICogaVRoaXNDb3B5KTsKKworCXBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnZhbCArPSBpVGhpc0NvcHk7CisKKwlpZiAoKHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnZhbCA9PSAwKSB8fAorCSAgICAocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMudmFsID09CisJICAgICBOVU1fREVTQ19QRVJfUklOR19UWCkpIHsKKwkJaWYgKHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLndyYXApIHsKKwkJCXBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSA9IDA7CisJCX0gZWxzZSB7CisJCQlwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQudmFsdWUgPSAweDQwMDsKKwkJfQorCX0KKworCWlmIChpUmVtYWluZGVyKSB7CisJCW1lbWNweShwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEsCisJCSAgICAgICBDdXJEZXNjICsgaVRoaXNDb3B5LAorCQkgICAgICAgc2l6ZW9mKFRYX0RFU0NfRU5UUllfdCkgKiBpUmVtYWluZGVyKTsKKworCQlwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy52YWwgKz0gaVJlbWFpbmRlcjsKKwl9CisKKwlpZiAocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMudmFsID09IDApIHsKKwkJaWYgKHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSkgeworCQkJcE1wVGNiLT5XckluZGV4LnZhbHVlID0gTlVNX0RFU0NfUEVSX1JJTkdfVFggLSAxOworCQl9IGVsc2UgeworCQkJcE1wVGNiLT5XckluZGV4LnZhbHVlID0KKwkJCSAgICAweDQwMCB8IChOVU1fREVTQ19QRVJfUklOR19UWCAtIDEpOworCQl9CisJfSBlbHNlIHsKKwkJcE1wVGNiLT5XckluZGV4LnZhbHVlID0KKwkJICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSAtIDE7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFnczIpOworCisJaWYgKHBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRUYWlsKSB7CisJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRUYWlsLT5OZXh0ID0gcE1wVGNiOworCX0gZWxzZSB7CisJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkID0gcE1wVGNiOworCX0KKworCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRUYWlsID0gcE1wVGNiOworCisJREJHX0FTU0VSVChwTXBUY2ItPk5leHQgPT0gTlVMTCk7CisKKwlwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZCsrOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzMik7CisKKwkvKiBXcml0ZSB0aGUgbmV3IHdyaXRlIHBvaW50ZXIgYmFjayB0byB0aGUgZGV2aWNlLiAqLworCXdyaXRlbChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQudmFsdWUsCisJICAgICAgICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhkbWEuc2VydmljZV9yZXF1ZXN0LnZhbHVlKTsKKworCS8qIEZvciBHaWcgb25seSwgd2UgdXNlIFR4IEludGVycnVwdCBjb2FsZXNjaW5nLiAgRW5hYmxlIHRoZSBzb2Z0d2FyZQorCSAqIHRpbWVyIHRvIHdha2UgdXMgdXAgaWYgdGhpcyBwYWNrZXQgaXNuJ3QgZm9sbG93ZWQgYnkgTiBtb3JlLgorCSAqLworCWlmIChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xMDAwTUJQUykgeworCQl3cml0ZWwocEFkYXB0ZXItPlJlZ2lzdHJ5VHhUaW1lSW50ZXJ2YWwgKiBOQU5PX0lOX0FfTUlDUk8sCisJCSAgICAgICAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC53YXRjaGRvZ190aW1lcik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlNlbmRIV0xvY2ssIGxvY2tmbGFnczEpOworCisJREJHX1RYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE5PVEU6IEZvciBub3csIGtlZXAgdGhpcyBvbGRlciB2ZXJzaW9uIG9mIE5JQ1NlbmRQYWNrZXQgYXJvdW5kIGZvcgorICogcmVmZXJlbmNlLCBldmVuIHRob3VnaCBpdCdzIG5vdCB1c2VkCisgKi8KKyNpZiAwCisKKy8qKgorICogTklDU2VuZFBhY2tldCAtIE5JQyBzcGVjaWZpYyBzZW5kIGhhbmRsZXIuCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqIEBwTXBUY2I6IHBvaW50ZXIgdG8gTVBfVENCCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2NlcywgZXJybm8gb24gZmFpbHVyZS4KKyAqCisgKiBUaGlzIHZlcnNpb24gb2YgdGhlIHNlbmQgcm91dGluZSBpcyBkZXNpZ25lZCBmb3IgdmVyc2lvbiBBIHNpbGljb24uCisgKiBBc3N1bXB0aW9uIC0gU2VuZCBzcGlubG9jayBoYXMgYmVlbiBhY3F1aXJlZC4KKyAqLworc3RhdGljIGludCBuaWNfc2VuZF9wYWNrZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgUE1QX1RDQiBwTXBUY2IpCit7CisJdWludDMyX3QgbG9vcEluZGV4LCBmcmFnSW5kZXgsIGxvb3BFbmQ7CisJdWludDMyX3QgaVNwbGl0Rmlyc3RFbGVtZW50ID0gMDsKKwl1aW50MzJfdCBTZWdtZW50U2l6ZSA9IDA7CisJVFhfREVTQ19FTlRSWV90IEN1ckRlc2M7CisJVFhfREVTQ19FTlRSWV90ICpDdXJEZXNjUG9zdENvcHkgPSBOVUxMOworCXVpbnQzMl90IFNsb3RzQXZhaWxhYmxlOworCURNQTEwV190IFNlcnZpY2VDb21wbGV0ZTsKKwl1bnNpZ25lZCBpbnQgbG9ja2ZsYWdzMSwgbG9ja2ZsYWdzMjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcFBhY2tldCA9IHBNcFRjYi0+UGFja2V0OworCXVpbnQzMl90IEZyYWdMaXN0Q291bnQgPSBza2Jfc2hpbmZvKHBQYWNrZXQpLT5ucl9mcmFncyArIDE7CisJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqcEZyYWdMaXN0ID0gJnNrYl9zaGluZm8ocFBhY2tldCktPmZyYWdzWzBdOworCisJREJHX1RYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCVNlcnZpY2VDb21wbGV0ZS52YWx1ZSA9CisJCXJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhkbWEuTmV3U2VydmljZUNvbXBsZXRlLnZhbHVlKTsKKworCS8qCisJICogQXR0ZW1wdCB0byBmaXggVFdPIGhhcmR3YXJlIGJ1Z3M6CisJICogMSkgIE5FVkVSIHdyaXRlIGFuIG9kZCBudW1iZXIgb2YgZGVzY3JpcHRvcnMuCisJICogMikgIElmIHBhY2tldCBsZW5ndGggaXMgbGVzcyB0aGFuIE5JQ19NSU5fUEFDS0VUX1NJWkUsIHRoZW4gcGFkIHRoZQorCSAqICAgICBwYWNrZXQgdG8gTklDX01JTl9QQUNLRVRfU0laRSBieXRlcyBieSBhZGRpbmcgYSBuZXcgbGFzdAorCSAqICAgICBkZXNjcmlwdG9yIElOIEhBTEYgRFVQTEVYIE1PREUgT05MWQorCSAqIE5PVEUgdGhhdCAoMikgaW50ZXJhY3RzIHdpdGggKDEpLiAgSWYgdGhlIHBhY2tldCBpcyBsZXNzIHRoYW4KKwkgKiBOSUNfTUlOX1BBQ0tFVF9TSVpFIGJ5dGVzIHRoZW4gd2Ugd2lsbCBhcHBlbmQgYSBkZXNjcmlwdG9yLgorCSAqIFRoZXJlZm9yZSBpZiBpdCBpcyBldmVuIG5vdywgaXQgd2lsbCBldmVudHVhbGx5IGVuZCB1cCBvZGQsIGFuZAorCSAqIHNvIHdpbGwgbmVlZCBhZGp1c3RpbmcuCisJICoKKwkgKiBWTEFOIHRhZ3MgZ2V0IGludm9sdmVkIHNpbmNlIFZMQU4gdGFncyBhZGQgYW5vdGhlciBvbmUgb3IgdHdvCisJICogc2VnbWVudHMuCisJICovCisJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCSAgICAgICAicE1wVGNiLT5QYWNrZXRMZW5ndGg6ICVkXG4iLCBwTXBUY2ItPlBhY2tldExlbmd0aCk7CisKKwlpZiAoKHBBZGFwdGVyLT51aUR1cGxleE1vZGUgPT0gMCkKKwkgICAgJiYgKHBNcFRjYi0+UGFja2V0TGVuZ3RoIDwgTklDX01JTl9QQUNLRVRfU0laRSkpIHsKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkgICAgICAgIkhBTEYgRFVQTEVYIG1vZGUgQU5EIGxlbiA8IE1JTl9QS1RfU0laRVxuIik7CisJCWlmICgoRnJhZ0xpc3RDb3VudCAmIDB4MSkgPT0gMCkgeworCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICAgICJFdmVuIG51bWJlciBvZiBkZXNjcywgc3BsaXQgMXN0IGVsZW1cbiIpOworCQkJaVNwbGl0Rmlyc3RFbGVtZW50ID0gMTsKKwkJCS8vU2VnbWVudFNpemUgPSBwRnJhZ0xpc3RbMF0uc2l6ZSAvIDI7CisJCQlTZWdtZW50U2l6ZSA9IChwUGFja2V0LT5sZW4gLSBwUGFja2V0LT5kYXRhX2xlbikgLyAyOworCQl9CisJfSBlbHNlIGlmIChGcmFnTGlzdENvdW50ICYgMHgxKSB7CisJCURCR19UWChldDEzMXhfZGJnaW5mbywgIk9kZCBudW1iZXIgb2YgZGVzY3MsIHNwbGl0IDFzdCBlbGVtXG4iKTsKKworCQlpU3BsaXRGaXJzdEVsZW1lbnQgPSAxOworCQkvL1NlZ21lbnRTaXplID0gcEZyYWdMaXN0WzBdLnNpemUgLyAyOworCQlTZWdtZW50U2l6ZSA9IChwUGFja2V0LT5sZW4gLSBwUGFja2V0LT5kYXRhX2xlbikgLyAyOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+U2VuZEhXTG9jaywgbG9ja2ZsYWdzMSk7CisKKwlpZiAocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXFfd3JhcCA9PQorCSAgICBTZXJ2aWNlQ29tcGxldGUuYml0cy5zZXJ2X2NwbF93cmFwKSB7CisJCS8qIFRoZSByaW5nIGhhc24ndCB3cmFwcGVkLiAgU2xvdHMgYXZhaWxhYmxlIHNob3VsZCBiZQorCQkgKiAoUklOR19TSVpFKSAtICB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gcG9pbnRlcnMuCisJCSAqLworCQlTbG90c0F2YWlsYWJsZSA9IE5VTV9ERVNDX1BFUl9SSU5HX1RYIC0KKwkJICAgIChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcSAtCisJCSAgICAgU2VydmljZUNvbXBsZXRlLmJpdHMuc2Vydl9jcGwpOworCX0gZWxzZSB7CisJCS8qIFRoZSByaW5nIGhhcyB3cmFwcGVkLiAgU2xvdHMgYXZhaWxhYmxlIHNob3VsZCBiZSB0aGUKKwkJICogZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gcG9pbnRlcnMuCisJCSAqLworCQlTbG90c0F2YWlsYWJsZSA9IFNlcnZpY2VDb21wbGV0ZS5iaXRzLnNlcnZfY3BsIC0KKwkJICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxOworCX0KKworCWlmICgoRnJhZ0xpc3RDb3VudCArIGlTcGxpdEZpcnN0RWxlbWVudCkgPiBTbG90c0F2YWlsYWJsZSkgeworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCSAgICAiTm90IEVub3VnaCBTcGFjZSBpbiBUeCBEZXNjIFJpbmdcbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+U2VuZEhXTG9jaywgbG9ja2ZsYWdzMSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWxvb3BFbmQgPSAoRnJhZ0xpc3RDb3VudCkgKyBpU3BsaXRGaXJzdEVsZW1lbnQ7CisJZnJhZ0luZGV4ID0gMDsKKworCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkgICAgICAgIlRDQiAgICAgICAgICAgOiAweCVwXG4iCisJICAgICAgICJQYWNrZXQgKFNLQikgIDogMHglcFx0IFBhY2tldC0+bGVuOiAlZFx0IFBhY2tldC0+ZGF0YV9sZW46ICVkXG4iCisJICAgICAgICJGcmFnTGlzdENvdW50IDogJWRcdCBpU3BsaXRGaXJzdEVsZW1lbnQ6ICVkXHQgbG9vcEVuZDolZFxuIiwKKwkgICAgICAgcE1wVGNiLAorCSAgICAgICBwUGFja2V0LCBwUGFja2V0LT5sZW4sIHBQYWNrZXQtPmRhdGFfbGVuLAorCSAgICAgICBGcmFnTGlzdENvdW50LCBpU3BsaXRGaXJzdEVsZW1lbnQsIGxvb3BFbmQpOworCisJZm9yIChsb29wSW5kZXggPSAwOyBsb29wSW5kZXggPCBsb29wRW5kOyBsb29wSW5kZXgrKykgeworCQlpZiAobG9vcEluZGV4ID4gaVNwbGl0Rmlyc3RFbGVtZW50KSB7CisJCQlmcmFnSW5kZXgrKzsKKwkJfQorCisJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJICAgICAgICJJbiBsb29wLCBsb29wSW5kZXg6ICVkXHQgZnJhZ0luZGV4OiAlZFxuIiwgbG9vcEluZGV4LAorCQkgICAgICAgZnJhZ0luZGV4KTsKKworCQkvKiBJZiB0aGVyZSBpcyBzb21ldGhpbmcgaW4gdGhpcyBlbGVtZW50LCBsZXQncyBnZXQgYQorCQkgKiBkZXNjcmlwdG9yIGZyb20gdGhlIHJpbmcgYW5kIGdldCB0aGUgbmVjZXNzYXJ5IGRhdGEKKwkJICovCisJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJICAgICAgICJQYWNrZXQgTGVuZ3RoICVkLCIKKwkJICAgICAgICJmaWxsaW5nIGRlc2MgZW50cnkgJWRcbiIsCisJCSAgICAgICBwUGFja2V0LT5sZW4sCisJCSAgICAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcSk7CisKKwkJLy8gTk9URSAtIFNob3VsZCB3ZSBkbyBhIHBhcmFub2lhIGNoZWNrIGhlcmUgdG8gbWFrZSBzdXJlIHRoZSBmcmFnbWVudAorCQkvLyBhY3R1YWxseSBoYXMgYSBsZW5ndGg/IEl0J3MgSElHSExZIHVubGlrZWx5IHRoZSBmcmFnbWVudCB3b3VsZAorCQkvLyBjb250YWluIG5vIGRhdGEuLi4KKwkJaWYgKDEpIHsKKwkJCS8vIE5PVEUgLSBDdXJyZW50bHkgYWx3YXlzIGdldHRpbmcgMzItYml0IGFkZHJzLCBhbmQgZG1hX2FkZHJfdCBpcworCQkJLy8gICAgICAgIG9ubHkgMzItYml0LCBzbyBsZWF2ZSAiaGlnaCIgcHRyIHZhbHVlIG91dCBmb3Igbm93CisJCQlDdXJEZXNjLkRhdGFCdWZmZXJQdHJIaWdoID0gMDsKKworCQkJQ3VyRGVzYy53b3JkMi52YWx1ZSA9IDA7CisJCQlDdXJEZXNjLndvcmQzLnZhbHVlID0gMDsKKworCQkJaWYgKGZyYWdJbmRleCA9PSAwKSB7CisJCQkJaWYgKGlTcGxpdEZpcnN0RWxlbWVudCkgeworCQkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJCSAgICAgICAiU3BsaXQgZmlyc3QgZWxlbWVudDogWUVTXG4iKTsKKworCQkJCQlpZiAobG9vcEluZGV4ID09IDApIHsKKwkJCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkJCSAgICAgICAiR290IGZyYWdtZW50IG9mIGxlbmd0aCAlZCwgZnJhZ0luZGV4OiAlZFxuIiwKKwkJCQkJCSAgICAgICBwUGFja2V0LT5sZW4gLQorCQkJCQkJICAgICAgIHBQYWNrZXQtPmRhdGFfbGVuLAorCQkJCQkJICAgICAgIGZyYWdJbmRleCk7CisJCQkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJCQkgICAgICAgIlNlZ21lbnRTaXplOiAlZFxuIiwKKwkJCQkJCSAgICAgICBTZWdtZW50U2l6ZSk7CisKKwkJCQkJCUN1ckRlc2Mud29yZDIuYml0cy4KKwkJCQkJCSAgICBsZW5ndGhfaW5fYnl0ZXMgPQorCQkJCQkJICAgIFNlZ21lbnRTaXplOworCQkJCQkJQ3VyRGVzYy5EYXRhQnVmZmVyUHRyTG93ID0KKwkJCQkJCSAgICBwY2lfbWFwX3NpbmdsZShwQWRhcHRlci0+CisJCQkJCQkJCSAgIHBkZXYsCisJCQkJCQkJCSAgIHBQYWNrZXQtPgorCQkJCQkJCQkgICBkYXRhLAorCQkJCQkJCQkgICBTZWdtZW50U2l6ZSwKKwkJCQkJCQkJICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJCQkgICAgICAgInBjaV9tYXBfc2luZ2xlKCkgcmV0dXJuczogMHglMDh4XG4iLAorCQkJCQkJICAgICAgIEN1ckRlc2MuCisJCQkJCQkgICAgICAgRGF0YUJ1ZmZlclB0ckxvdyk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJCQkgICAgICAgIkdvdCBmcmFnbWVudCBvZiBsZW5ndGggJWQsIGZyYWdJbmRleDogJWRcbiIsCisJCQkJCQkgICAgICAgcFBhY2tldC0+bGVuIC0KKwkJCQkJCSAgICAgICBwUGFja2V0LT5kYXRhX2xlbiwKKwkJCQkJCSAgICAgICBmcmFnSW5kZXgpOworCQkJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkJICAgICAgICJMZWZ0b3ZlciBTaXplOiAlZFxuIiwKKwkJCQkJCSAgICAgICAocFBhY2tldC0+bGVuIC0KKwkJCQkJCQlwUGFja2V0LT5kYXRhX2xlbiAtCisJCQkJCQkJU2VnbWVudFNpemUpKTsKKworCQkJCQkJQ3VyRGVzYy53b3JkMi5iaXRzLgorCQkJCQkJICAgIGxlbmd0aF9pbl9ieXRlcyA9CisJCQkJCQkgICAgKChwUGFja2V0LT5sZW4gLQorCQkJCQkJICAgICAgcFBhY2tldC0+ZGF0YV9sZW4pIC0KKwkJCQkJCSAgICAgU2VnbWVudFNpemUpOworCQkJCQkJQ3VyRGVzYy5EYXRhQnVmZmVyUHRyTG93ID0KKwkJCQkJCSAgICBwY2lfbWFwX3NpbmdsZShwQWRhcHRlci0+CisJCQkJCQkJCSAgIHBkZXYsCisJCQkJCQkJCSAgIChwUGFja2V0LT4KKwkJCQkJCQkJICAgIGRhdGEgKworCQkJCQkJCQkgICAgU2VnbWVudFNpemUpLAorCQkJCQkJCQkgICAocFBhY2tldC0+CisJCQkJCQkJCSAgICBsZW4gLQorCQkJCQkJCQkgICAgcFBhY2tldC0+CisJCQkJCQkJCSAgICBkYXRhX2xlbiAtCisJCQkJCQkJCSAgICBTZWdtZW50U2l6ZSksCisJCQkJCQkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkJICAgICAgICJwY2lfbWFwX3NpbmdsZSgpIHJldHVybnM6IDB4JTA4eFxuIiwKKwkJCQkJCSAgICAgICBDdXJEZXNjLgorCQkJCQkJICAgICAgIERhdGFCdWZmZXJQdHJMb3cpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkgICAgICAgIlNwbGl0IGZpcnN0IGVsZW1lbnQ6IE5PXG4iKTsKKworCQkJCQlDdXJEZXNjLndvcmQyLmJpdHMubGVuZ3RoX2luX2J5dGVzID0KKwkJCQkJICAgIHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuOworCisJCQkJCUN1ckRlc2MuRGF0YUJ1ZmZlclB0ckxvdyA9CisJCQkJCSAgICBwY2lfbWFwX3NpbmdsZShwQWRhcHRlci0+cGRldiwKKwkJCQkJCQkgICBwUGFja2V0LT5kYXRhLAorCQkJCQkJCSAgIChwUGFja2V0LT5sZW4gLQorCQkJCQkJCSAgICBwUGFja2V0LT5kYXRhX2xlbiksCisJCQkJCQkJICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkJICAgICAgICJwY2lfbWFwX3NpbmdsZSgpIHJldHVybnM6IDB4JTA4eFxuIiwKKwkJCQkJICAgICAgIEN1ckRlc2MuRGF0YUJ1ZmZlclB0ckxvdyk7CisJCQkJfQorCQkJfSBlbHNlIHsKKworCQkJCUN1ckRlc2Mud29yZDIuYml0cy5sZW5ndGhfaW5fYnl0ZXMgPQorCQkJCSAgICBwRnJhZ0xpc3RbZnJhZ0luZGV4IC0gMV0uc2l6ZTsKKwkJCQlDdXJEZXNjLkRhdGFCdWZmZXJQdHJMb3cgPQorCQkJCSAgICBwY2lfbWFwX3BhZ2UocEFkYXB0ZXItPnBkZXYsCisJCQkJCQkgcEZyYWdMaXN0W2ZyYWdJbmRleCAtIDFdLnBhZ2UsCisJCQkJCQkgcEZyYWdMaXN0W2ZyYWdJbmRleCAtCisJCQkJCQkJICAgMV0ucGFnZV9vZmZzZXQsCisJCQkJCQkgcEZyYWdMaXN0W2ZyYWdJbmRleCAtIDFdLnNpemUsCisJCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAgICAicGNpX21hcF9wYWdlKCkgcmV0dXJuczogMHglMDh4XG4iLAorCQkJCSAgICAgICBDdXJEZXNjLkRhdGFCdWZmZXJQdHJMb3cpOworCQkJfQorCisJCQlpZiAobG9vcEluZGV4ID09IDApIHsKKwkJCQkvKiBUaGlzIGlzIHRoZSBmaXJzdCBkZXNjcmlwdG9yIG9mIHRoZSBwYWNrZXQKKwkJCQkgKgorCQkJCSAqIFNldCB0aGUgImYiIGJpdCB0byBpbmRpY2F0ZSB0aGlzIGlzIHRoZQorCQkJCSAqIGZpcnN0IGRlc2NyaXB0b3IgaW4gdGhlIHBhY2tldC4KKwkJCQkgKi8KKwkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICAgICJUaGlzIGlzIG91ciBGSVJTVCBkZXNjcmlwdG9yXG4iKTsKKwkJCQlDdXJEZXNjLndvcmQzLmJpdHMuZiA9IDE7CisKKwkJCQlwTXBUY2ItPldySW5kZXhTdGFydCA9CisJCQkJICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZDsKKwkJCX0KKworCQkJaWYgKChsb29wSW5kZXggPT0gKGxvb3BFbmQgLSAxKSkgJiYKKwkJCSAgICAocEFkYXB0ZXItPnVpRHVwbGV4TW9kZSB8fAorCQkJICAgICAocE1wVGNiLT5QYWNrZXRMZW5ndGggPj0gTklDX01JTl9QQUNLRVRfU0laRSkpKSB7CisJCQkJLyogVGhpcyBpcyB0aGUgTGFzdCBkZXNjcmlwdG9yIG9mIHRoZSBwYWNrZXQgKi8KKwkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICAgICJUSElTIGlzIG91ciBMQVNUIGRlc2NyaXB0b3JcbiIpOworCisJCQkJaWYgKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PQorCQkJCSAgICBUUlVFUEhZX1NQRUVEXzEwMDBNQlBTKSB7CisJCQkJCWlmICgrK3BBZGFwdGVyLT5UeFJpbmcuCisJCQkJCSAgICBUeFBhY2tldHNTaW5jZUxhc3RpbnRlcnJ1cHQgPj0KKwkJCQkJICAgIHBBZGFwdGVyLT5SZWdpc3RyeVR4TnVtQnVmZmVycykgeworCQkJCQkJQ3VyRGVzYy53b3JkMy52YWx1ZSA9IDB4NTsKKwkJCQkJCXBBZGFwdGVyLT5UeFJpbmcuCisJCQkJCQkgICAgVHhQYWNrZXRzU2luY2VMYXN0aW50ZXJydXB0CisJCQkJCQkgICAgPSAwOworCQkJCQl9IGVsc2UgeworCQkJCQkJQ3VyRGVzYy53b3JkMy52YWx1ZSA9IDB4MTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCUN1ckRlc2Mud29yZDMudmFsdWUgPSAweDU7CisJCQkJfQorCisJCQkJLyogRm9sbG93aW5nIGluZGV4IHdpbGwgYmUgdXNlZCBkdXJpbmcgZnJlZWluZworCQkJCSAqIG9mIHBhY2tldAorCQkJCSAqLworCQkJCXBNcFRjYi0+V3JJbmRleCA9CisJCQkJICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZDsKKwkJCQlwTXBUY2ItPlBhY2tldFN0YWxlQ291bnQgPSAwOworCQkJfQorCisJCQkvKiBDb3B5IHRoZSBkZXNjcmlwdG9yIChmaWxsZWQgYWJvdmUpIGludG8gdGhlCisJCQkgKiBkZXNjcmlwdG9yIHJpbmcgYXQgdGhlIG5leHQgZnJlZSBlbnRyeS4gIEFkdmFuY2UKKwkJCSAqIHRoZSAibmV4dCBmcmVlIGVudHJ5IiB2YXJpYWJsZQorCQkJICovCisJCQltZW1jcHkocEFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhICsKKwkJCSAgICAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcSwKKwkJCSAgICAgICAmQ3VyRGVzYywgc2l6ZW9mKFRYX0RFU0NfRU5UUllfdCkpOworCisJCQlDdXJEZXNjUG9zdENvcHkgPQorCQkJICAgIHBBZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSArCisJCQkgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXE7CisKKwkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCSAgICAgICAiQ1VSUkVOVCBERVNDUklQVE9SXG4iCisJCQkgICAgICAgIlx0QWRkcmVzcyAgICAgICAgICAgOiAweCVwXG4iCisJCQkgICAgICAgIlx0RGF0YUJ1ZmZlclB0ckhpZ2ggOiAweCUwOHhcbiIKKwkJCSAgICAgICAiXHREYXRhQnVmZmVyUHRyTG93ICA6IDB4JTA4eFxuIgorCQkJICAgICAgICJcdHdvcmQyICAgICAgICAgICAgIDogMHglMDh4XG4iCisJCQkgICAgICAgIlx0d29yZDMgICAgICAgICAgICAgOiAweCUwOHhcbiIsCisJCQkgICAgICAgQ3VyRGVzY1Bvc3RDb3B5LAorCQkJICAgICAgIEN1ckRlc2NQb3N0Q29weS0+RGF0YUJ1ZmZlclB0ckhpZ2gsCisJCQkgICAgICAgQ3VyRGVzY1Bvc3RDb3B5LT5EYXRhQnVmZmVyUHRyTG93LAorCQkJICAgICAgIEN1ckRlc2NQb3N0Q29weS0+d29yZDIudmFsdWUsCisJCQkgICAgICAgQ3VyRGVzY1Bvc3RDb3B5LT53b3JkMy52YWx1ZSk7CisKKwkJCWlmICgrK3BBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxID49CisJCQkgICAgTlVNX0RFU0NfUEVSX1JJTkdfVFgpIHsKKwkJCQlpZiAocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuCisJCQkJICAgIHNlcnZfcmVxX3dyYXApIHsKKwkJCQkJcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLgorCQkJCQkgICAgdmFsdWUgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCXBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC4KKwkJCQkJICAgIHZhbHVlID0gMHg0MDA7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKHBBZGFwdGVyLT51aUR1cGxleE1vZGUgPT0gMCAmJgorCSAgICBwTXBUY2ItPlBhY2tldExlbmd0aCA8IE5JQ19NSU5fUEFDS0VUX1NJWkUpIHsKKwkJLy8gTk9URSAtIFNhbWUgMzIvNjQtYml0IGlzc3VlIGFzIGFib3ZlLi4uCisJCUN1ckRlc2MuRGF0YUJ1ZmZlclB0ckhpZ2ggPSAweDA7CisJCUN1ckRlc2MuRGF0YUJ1ZmZlclB0ckxvdyA9IHBBZGFwdGVyLT5UeFJpbmcucFR4RHVtbXlCbGtQYTsKKwkJQ3VyRGVzYy53b3JkMi52YWx1ZSA9IDA7CisKKwkJaWYgKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwMDBNQlBTKSB7CisJCQlpZiAoKytwQWRhcHRlci0+VHhSaW5nLlR4UGFja2V0c1NpbmNlTGFzdGludGVycnVwdCA+PQorCQkJICAgIHBBZGFwdGVyLT5SZWdpc3RyeVR4TnVtQnVmZmVycykgeworCQkJCUN1ckRlc2Mud29yZDMudmFsdWUgPSAweDU7CisJCQkJcEFkYXB0ZXItPlR4UmluZy5UeFBhY2tldHNTaW5jZUxhc3RpbnRlcnJ1cHQgPQorCQkJCSAgICAwOworCQkJfSBlbHNlIHsKKwkJCQlDdXJEZXNjLndvcmQzLnZhbHVlID0gMHgxOworCQkJfQorCQl9IGVsc2UgeworCQkJQ3VyRGVzYy53b3JkMy52YWx1ZSA9IDB4NTsKKwkJfQorCisJCUN1ckRlc2Mud29yZDIuYml0cy5sZW5ndGhfaW5fYnl0ZXMgPQorCQkgICAgTklDX01JTl9QQUNLRVRfU0laRSAtIHBNcFRjYi0+UGFja2V0TGVuZ3RoOworCisJCXBNcFRjYi0+V3JJbmRleCA9IHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZDsKKworCQltZW1jcHkocEFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhICsKKwkJICAgICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxLAorCQkgICAgICAgJkN1ckRlc2MsIHNpemVvZihUWF9ERVNDX0VOVFJZX3QpKTsKKworCQlDdXJEZXNjUG9zdENvcHkgPQorCQkgICAgcEFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhICsKKwkJICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxOworCisJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJICAgICAgICJDVVJSRU5UIERFU0NSSVBUT1JcbiIKKwkJICAgICAgICJcdEFkZHJlc3MgICAgICAgICAgIDogMHglcFxuIgorCQkgICAgICAgIlx0RGF0YUJ1ZmZlclB0ckhpZ2ggOiAweCUwOHhcbiIKKwkJICAgICAgICJcdERhdGFCdWZmZXJQdHJMb3cgIDogMHglMDh4XG4iCisJCSAgICAgICAiXHR3b3JkMiAgICAgICAgICAgICA6IDB4JTA4eFxuIgorCQkgICAgICAgIlx0d29yZDMgICAgICAgICAgICAgOiAweCUwOHhcbiIsCisJCSAgICAgICBDdXJEZXNjUG9zdENvcHksCisJCSAgICAgICBDdXJEZXNjUG9zdENvcHktPkRhdGFCdWZmZXJQdHJIaWdoLAorCQkgICAgICAgQ3VyRGVzY1Bvc3RDb3B5LT5EYXRhQnVmZmVyUHRyTG93LAorCQkgICAgICAgQ3VyRGVzY1Bvc3RDb3B5LT53b3JkMi52YWx1ZSwKKwkJICAgICAgIEN1ckRlc2NQb3N0Q29weS0+d29yZDMudmFsdWUpOworCisJCWlmICgrK3BBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxID49CisJCSAgICBOVU1fREVTQ19QRVJfUklOR19UWCkgeworCQkJaWYgKHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLgorCQkJICAgIHNlcnZfcmVxX3dyYXApIHsKKwkJCQlwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQudmFsdWUgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQudmFsdWUgPSAweDQwMDsKKwkJCX0KKwkJfQorCisJCURCR19UWChldDEzMXhfZGJnaW5mbywgIlBhZGRpbmcgZGVzY3JpcHRvciAlZCBieSAlZCBieXRlc1xuIiwKKwkJICAgICAgIC8vcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLnZhbHVlLAorCQkgICAgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXEsCisJCSAgICAgICBOSUNfTUlOX1BBQ0tFVF9TSVpFIC0gcE1wVGNiLT5QYWNrZXRMZW5ndGgpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MyKTsKKworCWlmIChwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kVGFpbCkgeworCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kVGFpbC0+TmV4dCA9IHBNcFRjYjsKKwl9IGVsc2UgeworCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZCA9IHBNcFRjYjsKKwl9CisKKwlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kVGFpbCA9IHBNcFRjYjsKKworCURCR19BU1NFUlQocE1wVGNiLT5OZXh0ID09IE5VTEwpOworCisJcEFkYXB0ZXItPlR4UmluZy5uQnVzeVNlbmQrKzsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFnczIpOworCisJLyogV3JpdGUgdGhlIG5ldyB3cml0ZSBwb2ludGVyIGJhY2sgdG8gdGhlIGRldmljZS4gKi8KKwl3cml0ZWwocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLnZhbHVlLAorCSAgICAgICAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnR4ZG1hLnNlcnZpY2VfcmVxdWVzdC52YWx1ZSk7CisKKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCisJRHVtcERldmljZUJsb2NrKERCR19UWF9PTiwgcEFkYXB0ZXIsIDEpOworI2VuZGlmCisKKwkvKiBGb3IgR2lnIG9ubHksIHdlIHVzZSBUeCBJbnRlcnJ1cHQgY29hbGVzY2luZy4gIEVuYWJsZSB0aGUgc29mdHdhcmUKKwkgKiB0aW1lciB0byB3YWtlIHVzIHVwIGlmIHRoaXMgcGFja2V0IGlzbid0IGZvbGxvd2VkIGJ5IE4gbW9yZS4KKwkgKi8KKwlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTAwME1CUFMpIHsKKwkJd3JpdGVsKHBBZGFwdGVyLT5SZWdpc3RyeVR4VGltZUludGVydmFsICogTkFOT19JTl9BX01JQ1JPLAorCQkgICAgICAgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwud2F0Y2hkb2dfdGltZXIpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5TZW5kSFdMb2NrLCBsb2NrZmxhZ3MxKTsKKworCURCR19UWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisvKioKKyAqIGV0MTMxeF9mcmVlX3NlbmRfcGFja2V0IC0gUmVjeWNsZSBhIE1QX1RDQiwgY29tcGxldGUgdGhlIHBhY2tldCBpZiBuZWNlc3NhcnkKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICogQHBNcFRjYjogcG9pbnRlciB0byBNUF9UQ0IKKyAqCisgKiBBc3N1bXB0aW9uIC0gU2VuZCBzcGlubG9jayBoYXMgYmVlbiBhY3F1aXJlZAorICovCitfX2lubGluZSB2b2lkIGV0MTMxeF9mcmVlX3NlbmRfcGFja2V0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIFBNUF9UQ0IgcE1wVGNiKQoreworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCVRYX0RFU0NfRU5UUllfdCAqZGVzYyA9IE5VTEw7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnBBZGFwdGVyLT5uZXRfc3RhdHM7CisKKwlpZiAoTVBfVEVTVF9GTEFHKHBNcFRjYiwgZk1QX0RFU1RfQlJPQUQpKSB7CisJCWF0b21pY19pbmMoJnBBZGFwdGVyLT5TdGF0cy5icmRjc3R4bXQpOworCX0gZWxzZSBpZiAoTVBfVEVTVF9GTEFHKHBNcFRjYiwgZk1QX0RFU1RfTVVMVEkpKSB7CisJCWF0b21pY19pbmMoJnBBZGFwdGVyLT5TdGF0cy5tdWx0aXhtdCk7CisJfSBlbHNlIHsKKwkJYXRvbWljX2luYygmcEFkYXB0ZXItPlN0YXRzLnVuaXhtdCk7CisJfQorCisJaWYgKHBNcFRjYi0+UGFja2V0KSB7CisJCXN0YXRzLT50eF9ieXRlcyArPSBwTXBUY2ItPlBhY2tldC0+bGVuOworCisJCS8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgVFggZGVzY3JpcHRvcnMgb24gdGhlIHJpbmcKKwkJICogY29ycmVzcG9uZGluZyB0byB0aGlzIHBhY2tldCBhbmQgdW1hcCB0aGUgZnJhZ21lbnRzCisJCSAqIHRoZXkgcG9pbnQgdG8KKwkJICovCisJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJICAgICAgICJVbm1hcCBkZXNjcmlwdG9ycyBIZXJlXG4iCisJCSAgICAgICAiVENCICAgICAgICAgICAgICAgICAgOiAweCVwXG4iCisJCSAgICAgICAiVENCIE5leHQgICAgICAgICAgICAgOiAweCVwXG4iCisJCSAgICAgICAiVENCIFBhY2tldExlbmd0aCAgICAgOiAlZFxuIgorCQkgICAgICAgIlRDQiBXckluZGV4LnZhbHVlICAgIDogMHglMDh4XG4iCisJCSAgICAgICAiVENCIFdySW5kZXguYml0cy52YWwgOiAlZFxuIgorCQkgICAgICAgIlRDQiBXckluZGV4LnZhbHVlICAgIDogMHglMDh4XG4iCisJCSAgICAgICAiVENCIFdySW5kZXguYml0cy52YWwgOiAlZFxuIiwKKwkJICAgICAgIHBNcFRjYiwKKwkJICAgICAgIHBNcFRjYi0+TmV4dCwKKwkJICAgICAgIHBNcFRjYi0+UGFja2V0TGVuZ3RoLAorCQkgICAgICAgcE1wVGNiLT5XckluZGV4U3RhcnQudmFsdWUsCisJCSAgICAgICBwTXBUY2ItPldySW5kZXhTdGFydC5iaXRzLnZhbCwKKwkJICAgICAgIHBNcFRjYi0+V3JJbmRleC52YWx1ZSwKKwkJICAgICAgIHBNcFRjYi0+V3JJbmRleC5iaXRzLnZhbCk7CisKKwkJZG8geworCQkJZGVzYyA9CisJCQkgICAgKFRYX0RFU0NfRU5UUllfdCAqKSAocEFkYXB0ZXItPlR4UmluZy4KKwkJCQkJCSBwVHhEZXNjUmluZ1ZhICsKKwkJCQkJCSBwTXBUY2ItPldySW5kZXhTdGFydC5iaXRzLnZhbCk7CisKKwkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCSAgICAgICAiQ1VSUkVOVCBERVNDUklQVE9SXG4iCisJCQkgICAgICAgIlx0QWRkcmVzcyAgICAgICAgICAgOiAweCVwXG4iCisJCQkgICAgICAgIlx0RGF0YUJ1ZmZlclB0ckhpZ2ggOiAweCUwOHhcbiIKKwkJCSAgICAgICAiXHREYXRhQnVmZmVyUHRyTG93ICA6IDB4JTA4eFxuIgorCQkJICAgICAgICJcdHdvcmQyICAgICAgICAgICAgIDogMHglMDh4XG4iCisJCQkgICAgICAgIlx0d29yZDMgICAgICAgICAgICAgOiAweCUwOHhcbiIsCisJCQkgICAgICAgZGVzYywKKwkJCSAgICAgICBkZXNjLT5EYXRhQnVmZmVyUHRySGlnaCwKKwkJCSAgICAgICBkZXNjLT5EYXRhQnVmZmVyUHRyTG93LAorCQkJICAgICAgIGRlc2MtPndvcmQyLnZhbHVlLAorCQkJICAgICAgIGRlc2MtPndvcmQzLnZhbHVlKTsKKworCQkJcGNpX3VubWFwX3NpbmdsZShwQWRhcHRlci0+cGRldiwKKwkJCQkJIGRlc2MtPkRhdGFCdWZmZXJQdHJMb3csCisJCQkJCSBkZXNjLT53b3JkMi52YWx1ZSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJCWlmICgrK3BNcFRjYi0+V3JJbmRleFN0YXJ0LmJpdHMudmFsID49CisJCQkgICAgTlVNX0RFU0NfUEVSX1JJTkdfVFgpIHsKKwkJCQlpZiAocE1wVGNiLT5XckluZGV4U3RhcnQuYml0cy53cmFwKSB7CisJCQkJCXBNcFRjYi0+V3JJbmRleFN0YXJ0LnZhbHVlID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlwTXBUY2ItPldySW5kZXhTdGFydC52YWx1ZSA9IDB4NDAwOworCQkJCX0KKwkJCX0KKwkJfQorCQl3aGlsZSAoZGVzYyAhPSAocEFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhICsKKwkJCQlwTXBUY2ItPldySW5kZXguYml0cy52YWwpKTsKKworCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCSAgICAgICAiRnJlZSBQYWNrZXQgKFNLQikgICA6IDB4JXBcbiIsIHBNcFRjYi0+UGFja2V0KTsKKworCQlkZXZfa2ZyZWVfc2tiX2FueShwTXBUY2ItPlBhY2tldCk7CisJfQorCisJbWVtc2V0KHBNcFRjYiwgMCwgc2l6ZW9mKE1QX1RDQikpOworCisJLyogQWRkIHRoZSBUQ0IgdG8gdGhlIFJlYWR5IFEgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlRDQlJlYWR5UUxvY2ssIGxvY2tmbGFncyk7CisKKwlwQWRhcHRlci0+U3RhdHMub3BhY2tldHMrKzsKKworCWlmIChwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVUYWlsKSB7CisJCXBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZVRhaWwtPk5leHQgPSBwTXBUY2I7CisJfSBlbHNlIHsKKwkJLyogQXBwYXJlbnRseSByZWFkeSBRIGlzIGVtcHR5LiAqLworCQlwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVIZWFkID0gcE1wVGNiOworCX0KKworCXBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZVRhaWwgPSBwTXBUY2I7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCUmVhZHlRTG9jaywgbG9ja2ZsYWdzKTsKKworCURCR19BU1NFUlQocEFkYXB0ZXItPlR4UmluZy5uQnVzeVNlbmQgPj0gMCk7Cit9CisKKy8qKgorICogZXQxMzF4X2ZyZWVfYnVzeV9zZW5kX3BhY2tldHMgLSBGcmVlIGFuZCBjb21wbGV0ZSB0aGUgc3RvcHBlZCBhY3RpdmUgc2VuZHMKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICoKKyAqIEFzc3VtcHRpb24gLSBTZW5kIHNwaW5sb2NrIGhhcyBiZWVuIGFjcXVpcmVkCisgKi8KK3ZvaWQgZXQxMzF4X2ZyZWVfYnVzeV9zZW5kX3BhY2tldHMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlQTVBfVENCIHBNcFRjYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwRW50cnk7CisJc3RydWN0IHNrX2J1ZmYgKnBQYWNrZXQgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCXVpbnQzMl90IEZyZWVDb3VudGVyID0gMDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnBBZGFwdGVyLT5UeFJpbmcuU2VuZFdhaXRRdWV1ZSkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5TZW5kV2FpdExvY2ssIGxvY2tmbGFncyk7CisKKwkJcEFkYXB0ZXItPlR4UmluZy5uV2FpdFNlbmQtLTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlNlbmRXYWl0TG9jaywgbG9ja2ZsYWdzKTsKKworCQlwRW50cnkgPSBwQWRhcHRlci0+VHhSaW5nLlNlbmRXYWl0UXVldWUubmV4dDsKKworCQlwUGFja2V0ID0gTlVMTDsKKwl9CisKKwlwQWRhcHRlci0+VHhSaW5nLm5XYWl0U2VuZCA9IDA7CisKKwkvKiBBbnkgcGFja2V0cyBiZWluZyBzZW50PyBDaGVjayB0aGUgZmlyc3QgVENCIG9uIHRoZSBzZW5kIGxpc3QgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKKworCXBNcFRjYiA9IHBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkOworCisJd2hpbGUgKChwTXBUY2IgIT0gTlVMTCkgJiYgKEZyZWVDb3VudGVyIDwgTlVNX1RDQikpIHsKKwkJUE1QX1RDQiBwTmV4dCA9IHBNcFRjYi0+TmV4dDsKKworCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZCA9IHBOZXh0OworCisJCWlmIChwTmV4dCA9PSBOVUxMKSB7CisJCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kVGFpbCA9IE5VTEw7CisJCX0KKworCQlwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZC0tOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7CisKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJwTXBUY2IgPSAweCVwXG4iLCBwTXBUY2IpOworCisJCUZyZWVDb3VudGVyKys7CisJCU1QX0ZSRUVfU0VORF9QQUNLRVRfRlVOKHBBZGFwdGVyLCBwTXBUY2IpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCisJCXBNcFRjYiA9IHBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkOworCX0KKworCWlmIChGcmVlQ291bnRlciA9PSBOVU1fVENCKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIk1wRnJlZUJ1c3lTZW5kUGFja2V0cyBleGl0dGVkIGxvb3AgZm9yIGEgYmFkIHJlYXNvblxuIik7CisJCUJVRygpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7CisKKwlwQWRhcHRlci0+VHhSaW5nLm5CdXN5U2VuZCA9IDA7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF9oYW5kbGVfc2VuZF9pbnRlcnJ1cHQgLSBJbnRlcnJ1cHQgaGFuZGxlciBmb3Igc2VuZGluZyBwcm9jZXNzaW5nCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqCisgKiBSZS1jbGFpbSB0aGUgc2VuZCByZXNvdXJjZXMsIGNvbXBsZXRlIHNlbmRzIGFuZCBnZXQgbW9yZSB0byBzZW5kIGZyb20KKyAqIHRoZSBzZW5kIHdhaXQgcXVldWUuCisgKgorICogQXNzdW1wdGlvbiAtIFNlbmQgc3BpbmxvY2sgaGFzIGJlZW4gYWNxdWlyZWQKKyAqLwordm9pZCBldDEzMXhfaGFuZGxlX3NlbmRfaW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX1RYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIE1hcmsgYXMgY29tcGxldGVkIGFueSBwYWNrZXRzIHdoaWNoIGhhdmUgYmVlbiBzZW50IGJ5IHRoZSBkZXZpY2UuICovCisJZXQxMzF4X3VwZGF0ZV90Y2JfbGlzdChwQWRhcHRlcik7CisKKwkvKiBJZiB3ZSBxdWV1ZWQgYW55IHRyYW5zbWl0cyBiZWNhdXNlIHdlIGRpZG4ndCBoYXZlIGFueSBUQ0JzIGVhcmxpZXIsCisJICogZGVxdWV1ZSBhbmQgc2VuZCB0aG9zZSBwYWNrZXRzIG5vdywgYXMgbG9uZyBhcyB3ZSBoYXZlIGZyZWUgVENCcy4KKwkgKi8KKwlldDEzMXhfY2hlY2tfc2VuZF93YWl0X2xpc3QocEFkYXB0ZXIpOworCisJREJHX1RYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfdXBkYXRlX3RjYl9saXN0IC0gSGVscGVyIHJvdXRpbmUgZm9yIFNlbmQgSW50ZXJydXB0IGhhbmRsZXIKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICoKKyAqIFJlLWNsYWltcyB0aGUgc2VuZCByZXNvdXJjZXMgYW5kIGNvbXBsZXRlcyBzZW5kcy4gIENhbiBhbHNvIGJlIGNhbGxlZCBhcworICogcGFydCBvZiB0aGUgTklDIHNlbmQgcm91dGluZSB3aGVuIHRoZSAiU2VydmljZUNvbXBsZXRlIiBpbmRpY2F0aW9uIGhhcworICogd3JhcHBlZC4KKyAqLworc3RhdGljIHZvaWQgZXQxMzF4X3VwZGF0ZV90Y2JfbGlzdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCURNQTEwV190IFNlcnZpY2VDb21wbGV0ZTsKKwlQTVBfVENCIHBNcFRjYjsKKworCVNlcnZpY2VDb21wbGV0ZS52YWx1ZSA9CisJICAgIHJlYWRsKCZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+dHhkbWEuTmV3U2VydmljZUNvbXBsZXRlLnZhbHVlKTsKKworCS8qIEhhcyB0aGUgcmluZyB3cmFwcGVkPyAgUHJvY2VzcyBhbnkgZGVzY3JpcHRvcnMgdGhhdCBkbyBub3QgaGF2ZQorCSAqIHRoZSBzYW1lICJ3cmFwIiBpbmRpY2F0b3IgYXMgdGhlIGN1cnJlbnQgY29tcGxldGlvbiBpbmRpY2F0b3IKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKKworCXBNcFRjYiA9IHBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkOworCXdoaWxlIChwTXBUY2IgJiYKKwkgICAgICAgU2VydmljZUNvbXBsZXRlLmJpdHMud3JhcCAhPSBwTXBUY2ItPldySW5kZXguYml0cy53cmFwICAmJgorCSAgICAgICBTZXJ2aWNlQ29tcGxldGUuYml0cy52YWwgPCBwTXBUY2ItPldySW5kZXguYml0cy52YWwpIHsKKwkJcEFkYXB0ZXItPlR4UmluZy5uQnVzeVNlbmQtLTsKKwkJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQgPSBwTXBUY2ItPk5leHQ7CisJCWlmIChwTXBUY2ItPk5leHQgPT0gTlVMTCkgeworCQkJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZFRhaWwgPSBOVUxMOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKKwkJTVBfRlJFRV9TRU5EX1BBQ0tFVF9GVU4ocEFkYXB0ZXIsIHBNcFRjYik7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCisJCS8qIEdvdG8gdGhlIG5leHQgcGFja2V0ICovCisJCXBNcFRjYiA9IHBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkOworCX0KKwl3aGlsZSAocE1wVGNiICYmCisJICAgICAgIFNlcnZpY2VDb21wbGV0ZS5iaXRzLndyYXAgPT0gcE1wVGNiLT5XckluZGV4LmJpdHMud3JhcCAmJgorCSAgICAgICBTZXJ2aWNlQ29tcGxldGUuYml0cy52YWwgPiBwTXBUY2ItPldySW5kZXguYml0cy52YWwpIHsKKwkJcEFkYXB0ZXItPlR4UmluZy5uQnVzeVNlbmQtLTsKKwkJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQgPSBwTXBUY2ItPk5leHQ7CisJCWlmIChwTXBUY2ItPk5leHQgPT0gTlVMTCkgeworCQkJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZFRhaWwgPSBOVUxMOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKKwkJTVBfRlJFRV9TRU5EX1BBQ0tFVF9GVU4ocEFkYXB0ZXIsIHBNcFRjYik7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCisJCS8qIEdvdG8gdGhlIG5leHQgcGFja2V0ICovCisJCXBNcFRjYiA9IHBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkOworCX0KKworCS8qIFdha2UgdXAgdGhlIHF1ZXVlIHdoZW4gd2UgaGl0IGEgbG93LXdhdGVyIG1hcmsgKi8KKwlpZiAocEFkYXB0ZXItPlR4UmluZy5uQnVzeVNlbmQgPD0gKE5VTV9UQ0IgLyAzKSkgeworCQluZXRpZl93YWtlX3F1ZXVlKHBBZGFwdGVyLT5uZXRkZXYpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7Cit9CisKKy8qKgorICogZXQxMzF4X2NoZWNrX3NlbmRfd2FpdF9saXN0IC0gSGVscGVyIHJvdXRpbmUgZm9yIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKgorICogVGFrZXMgcGFja2V0cyBmcm9tIHRoZSBzZW5kIHdhaXQgcXVldWUgYW5kIHBvc3RzIHRoZW0gdG8gdGhlIGRldmljZSAoaWYKKyAqIHJvb20gYXZhaWxhYmxlKS4KKyAqLworc3RhdGljIHZvaWQgZXQxMzF4X2NoZWNrX3NlbmRfd2FpdF9saXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlNlbmRXYWl0TG9jaywgbG9ja2ZsYWdzKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmcEFkYXB0ZXItPlR4UmluZy5TZW5kV2FpdFF1ZXVlKSAmJgorCSAgICAgICBNUF9UQ0JfUkVTT1VSQ0VTX0FWQUlMQUJMRShwQWRhcHRlcikpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqcEVudHJ5OworCisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiVHggcGFja2V0cyBvbiB0aGUgd2FpdCBxdWV1ZVxuIik7CisKKwkJcEVudHJ5ID0gcEFkYXB0ZXItPlR4UmluZy5TZW5kV2FpdFF1ZXVlLm5leHQ7CisKKwkJcEFkYXB0ZXItPlR4UmluZy5uV2FpdFNlbmQtLTsKKworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCSAgICAiTXBIYW5kbGVTZW5kSW50ZXJydXB0IC0gc2VudCBhIHF1ZXVlZCBwa3QuIFdhaXRpbmcgJWRcbiIsCisJCQkgICAgcEFkYXB0ZXItPlR4UmluZy5uV2FpdFNlbmQpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5TZW5kV2FpdExvY2ssIGxvY2tmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF90eC5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfdHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODE5Yzc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfdHguaApAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfdHguaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHBlcnRhaW5pbmcgdG8gZGF0YQorICogICAgICAgICAgICAgICB0cmFuc21pc3Npb24uCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMTBfVFhfSF9fCisjZGVmaW5lIF9fRVQxMzEwX1RYX0hfXworCisKKy8qIFR5cGVkZWZzIGZvciBUeCBEZXNjcmlwdG9yIFJpbmcgKi8KKworLyoKKyAqIFRYREVTQ19XT1JEMl90IHN0cnVjdHVyZSBob2xkcyBwYXJ0IG9mIHRoZSBjb250cm9sIGJpdHMgaW4gdGhlIFR4IERlc2NyaXB0b3IKKyAqIHJpbmcgZm9yIHRoZSBFVC0xMzEwCisgKi8KK3R5cGVkZWYgdW5pb24gX3R4ZGVzY193b3JkMl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB2bGFuX3ByaW86MzsJCS8vIGJpdHMgMjktMzEoVkxBTiBwcmlvcml0eSkKKwkJdTMyIHZsYW5fY2ZpOjE7CQkvLyBiaXQgMjgoY2ZpKQorCQl1MzIgdmxhbl90YWc6MTI7CQkvLyBiaXRzIDE2LTI3KFZMQU4gdGFnKQorCQl1MzIgbGVuZ3RoX2luX2J5dGVzOjE2OwkvLyBiaXRzICAwLTE1KHBhY2tldCBsZW5ndGgpCisjZWxzZQorCQl1MzIgbGVuZ3RoX2luX2J5dGVzOjE2OwkvLyBiaXRzICAwLTE1KHBhY2tldCBsZW5ndGgpCisJCXUzMiB2bGFuX3RhZzoxMjsJCS8vIGJpdHMgMTYtMjcoVkxBTiB0YWcpCisJCXUzMiB2bGFuX2NmaToxOwkJLy8gYml0IDI4KGNmaSkKKwkJdTMyIHZsYW5fcHJpbzozOwkJLy8gYml0cyAyOS0zMShWTEFOIHByaW9yaXR5KQorI2VuZGlmCS8qIF9CSVRfRklFTERTX0hUT0wgKi8KKwl9IGJpdHM7Cit9IFRYREVTQ19XT1JEMl90LCAqUFRYREVTQ19XT1JEMl90OworCisvKgorICogVFhERVNDX1dPUkQzX3Qgc3RydWN0dXJlIGhvbGRzIHBhcnQgb2YgdGhlIGNvbnRyb2wgYml0cyBpbiB0aGUgVHggRGVzY3JpcHRvcgorICogcmluZyBmb3IgdGhlIEVULTEzMTAKKyAqLwordHlwZWRlZiB1bmlvbiBfdHhkZXNjX3dvcmQzX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoxNzsJLy8gYml0cyAxNS0zMQorCQl1MzIgdWRwYToxOwkvLyBiaXQgMTQoVURQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIHRjcGE6MTsJLy8gYml0IDEzKFRDUCBjaGVja3N1bSBhc3Npc3QpCisJCXUzMiBpcGE6MTsJCS8vIGJpdCAxMihJUCBjaGVja3N1bSBhc3Npc3QpCisJCXUzMiB2bGFuOjE7CS8vIGJpdCAxMShhcHBlbmQgVkxBTiB0YWcpCisJCXUzMiBocDoxOwkJLy8gYml0IDEwKFBhY2tldCBpcyBhIEh1Z2UgcGFja2V0KQorCQl1MzIgcHA6MTsJCS8vIGJpdCAgOShwYWQgcGFja2V0KQorCQl1MzIgbWFjOjE7CQkvLyBiaXQgIDgoTUFDIG92ZXJyaWRlKQorCQl1MzIgY3JjOjE7CQkvLyBiaXQgIDcoYXBwZW5kIENSQykKKwkJdTMyIGU6MTsJCS8vIGJpdCAgNihUeCBmcmFtZSBoYXMgZXJyb3IpCisJCXUzMiBwZjoxOwkJLy8gYml0ICA1KHNlbmQgcGF1c2UgZnJhbWUpCisJCXUzMiBicDoxOwkJLy8gYml0ICA0KElzc3VlIGhhbGYtZHVwbGV4IGJhY2twcmVzc3VyZSAoWE9OL1hPRkYpCisJCXUzMiBjdzoxOwkJLy8gYml0ICAzKENvbnRyb2wgd29yZCAtIG5vIHBhY2tldCBkYXRhKQorCQl1MzIgaXI6MTsJCS8vIGJpdCAgMihpbnRlcnJ1cHQgdGhlIHByb2Nlc3NvciB3aGVuIHRoaXMgcGt0IHNlbnQpCisJCXUzMiBmOjE7CQkvLyBiaXQgIDEoZmlyc3QgcGFja2V0IGluIHRoZSBzZXF1ZW5jZSkKKwkJdTMyIGw6MTsJCS8vIGJpdCAgMChsYXN0IHBhY2tldCBpbiB0aGUgc2VxdWVuY2UpCisjZWxzZQorCQl1MzIgbDoxOwkJLy8gYml0ICAwKGxhc3QgcGFja2V0IGluIHRoZSBzZXF1ZW5jZSkKKwkJdTMyIGY6MTsJCS8vIGJpdCAgMShmaXJzdCBwYWNrZXQgaW4gdGhlIHNlcXVlbmNlKQorCQl1MzIgaXI6MTsJCS8vIGJpdCAgMihpbnRlcnJ1cHQgdGhlIHByb2Nlc3NvciB3aGVuIHRoaXMgcGt0IHNlbnQpCisJCXUzMiBjdzoxOwkJLy8gYml0ICAzKENvbnRyb2wgd29yZCAtIG5vIHBhY2tldCBkYXRhKQorCQl1MzIgYnA6MTsJCS8vIGJpdCAgNChJc3N1ZSBoYWxmLWR1cGxleCBiYWNrcHJlc3N1cmUgKFhPTi9YT0ZGKQorCQl1MzIgcGY6MTsJCS8vIGJpdCAgNShzZW5kIHBhdXNlIGZyYW1lKQorCQl1MzIgZToxOwkJLy8gYml0ICA2KFR4IGZyYW1lIGhhcyBlcnJvcikKKwkJdTMyIGNyYzoxOwkJLy8gYml0ICA3KGFwcGVuZCBDUkMpCisJCXUzMiBtYWM6MTsJCS8vIGJpdCAgOChNQUMgb3ZlcnJpZGUpCisJCXUzMiBwcDoxOwkJLy8gYml0ICA5KHBhZCBwYWNrZXQpCisJCXUzMiBocDoxOwkJLy8gYml0IDEwKFBhY2tldCBpcyBhIEh1Z2UgcGFja2V0KQorCQl1MzIgdmxhbjoxOwkvLyBiaXQgMTEoYXBwZW5kIFZMQU4gdGFnKQorCQl1MzIgaXBhOjE7CQkvLyBiaXQgMTIoSVAgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgdGNwYToxOwkvLyBiaXQgMTMoVENQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIHVkcGE6MTsJLy8gYml0IDE0KFVEUCBjaGVja3N1bSBhc3Npc3QpCisJCXUzMiB1bnVzZWQ6MTc7CS8vIGJpdHMgMTUtMzEKKyNlbmRpZgkvKiBfQklUX0ZJRUxEU19IVE9MICovCisJfSBiaXRzOworfSBUWERFU0NfV09SRDNfdCwgKlBUWERFU0NfV09SRDNfdDsKKworLyogVFhfREVTQ19FTlRSWV90IGlzIHNydWN0dXJlIHJlcHJlc2VudGluZyBlYWNoIGRlc2NyaXB0b3Igb24gdGhlIHJpbmcgKi8KK3R5cGVkZWYgc3RydWN0IF90eF9kZXNjX2VudHJ5X3QgeworCXUzMiBEYXRhQnVmZmVyUHRySGlnaDsKKwl1MzIgRGF0YUJ1ZmZlclB0ckxvdzsKKwlUWERFU0NfV09SRDJfdCB3b3JkMjsJLy8gY29udHJvbCB3b3JkcyBob3cgdG8geG1pdCB0aGUKKwlUWERFU0NfV09SRDNfdCB3b3JkMzsJLy8gZGF0YSAoZGV0YWlsZWQgYWJvdmUpCit9IFRYX0RFU0NfRU5UUllfdCwgKlBUWF9ERVNDX0VOVFJZX3Q7CisKKworLyogVHlwZWRlZnMgZm9yIFR4IERNQSBlbmdpbmUgc3RhdHVzIHdyaXRlYmFjayAqLworCisvKgorICogVFhfU1RBVFVTX0JMT0NLX3QgaXMgc3J1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBzdGF0dXMgb2YgdGhlIFR4IERNQSBlbmdpbmUKKyAqIGl0IHNpdHMgaW4gZnJlZSBtZW1vcnksIGFuZCBpcyBwb2ludGVkIHRvIGJ5IDB4MTAxYyAvIDB4MTAyMAorICovCit0eXBlZGVmIHVuaW9uIF90eF9zdGF0dXNfYmxvY2tfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIxOwkJLy8gYml0cyAxMS0zMQorCQl1MzIgc2Vydl9jcGxfd3JhcDoxOwkvLyBiaXQgMTAKKwkJdTMyIHNlcnZfY3BsOjEwOwkJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiBzZXJ2X2NwbDoxMDsJCS8vIGJpdHMgMC05CisJCXUzMiBzZXJ2X2NwbF93cmFwOjE7CS8vIGJpdCAxMAorCQl1MzIgdW51c2VkOjIxOwkJLy8gYml0cyAxMS0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWF9TVEFUVVNfQkxPQ0tfdCwgKlBUWF9TVEFUVVNfQkxPQ0tfdDsKKworLyogVENCIChUcmFuc21pdCBDb250cm9sIEJsb2NrKSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QX1RDQiB7CisJc3RydWN0IF9NUF9UQ0IgKk5leHQ7CisJdTMyIEZsYWdzOworCXUzMiBDb3VudDsKKwl1MzIgUGFja2V0U3RhbGVDb3VudDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqUGFja2V0OworCXUzMiBQYWNrZXRMZW5ndGg7CisJRE1BMTBXX3QgV3JJbmRleDsKKwlETUExMFdfdCBXckluZGV4U3RhcnQ7Cit9IE1QX1RDQiwgKlBNUF9UQ0I7CisKKy8qIFN0cnVjdHVyZSB0byBob2xkIHRoZSBza2IncyBpbiBhIGxpc3QgKi8KK3R5cGVkZWYgc3RydWN0IHR4X3NrYl9saXN0X2VsZW0geworCXN0cnVjdCBsaXN0X2hlYWQgc2tiX2xpc3RfZWxlbTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworfSBUWF9TS0JfTElTVF9FTEVNLCAqUFRYX1NLQl9MSVNUX0VMRU07CisKKy8qIFRYX1JJTkdfdCBpcyBzcnVjdHVyZSByZXByZXNlbnRpbmcgb3VyIGxvY2FsIHJlZmVyZW5jZShzKSB0byB0aGUgcmluZyAqLwordHlwZWRlZiBzdHJ1Y3QgX3R4X3JpbmdfdCB7CisJLyogVENCIChUcmFuc21pdCBDb250cm9sIEJsb2NrKSBtZW1vcnkgYW5kIGxpc3RzICovCisJUE1QX1RDQiBNcFRjYk1lbTsKKworCS8qIExpc3Qgb2YgVENCcyB0aGF0IGFyZSByZWFkeSB0byBiZSB1c2VkICovCisJUE1QX1RDQiBUQ0JSZWFkeVF1ZXVlSGVhZDsKKwlQTVBfVENCIFRDQlJlYWR5UXVldWVUYWlsOworCisJLyogbGlzdCBvZiBUQ0JzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBzZW50LiAgTk9URSB0aGF0IGFjY2VzcyB0byBhbGwKKwkgKiB0aHJlZSBvZiB0aGVzZSAoaW5jbHVkaW5nIG5CdXN5U2VuZCkgYXJlIGNvbnRyb2xsZWQgdmlhIHRoZQorCSAqIFRDQlNlbmRRTG9jay4gIFRoaXMgbG9jayBzaG91bGQgYmUgc2VjdXJlZCBwcmlvciB0byBpbmNlbWVudGluZyAvCisJICogZGVjcmVtZW50aW5nIG5CdXN5U2VuZCwgb3IgYW55IHF1ZXVlIG1hbmlwdWxhdGlvbiBvbiBDdXJyU2VuZEhlYWQgLworCSAqIFRhaWwKKwkgKi8KKwlQTVBfVENCIEN1cnJTZW5kSGVhZDsKKwlQTVBfVENCIEN1cnJTZW5kVGFpbDsKKwlpbnQzMl90IG5CdXN5U2VuZDsKKworCS8qIExpc3Qgb2YgcGFja2V0cyAobm90IFRDQnMpIHRoYXQgd2VyZSBxdWV1ZWQgZm9yIGxhY2sgb2YgcmVzb3VyY2VzICovCisJc3RydWN0IGxpc3RfaGVhZCBTZW5kV2FpdFF1ZXVlOworCWludDMyX3QgbldhaXRTZW5kOworCisJLyogVGhlIGFjdHVhbCBkZXNjcmlwdG9yIHJpbmcgKi8KKwlQVFhfREVTQ19FTlRSWV90IHBUeERlc2NSaW5nVmE7CisJZG1hX2FkZHJfdCBwVHhEZXNjUmluZ1BhOworCXVpbnQ2NF90IHBUeERlc2NSaW5nQWRqdXN0ZWRQYTsKKwl1aW50NjRfdCBUeERlc2NPZmZzZXQ7CisKKwkvKiBSZWFkeVRvU2VuZCBpbmRpY2F0ZXMgd2hlcmUgd2UgbGFzdCB3cm90ZSB0byBpbiB0aGUgZGVzY3JpcHRvciByaW5nLiAqLworCURNQTEwV190IHR4RG1hUmVhZHlUb1NlbmQ7CisKKwkvKiBUaGUgbG9jYXRpb24gb2YgdGhlIHdyaXRlLWJhY2sgc3RhdHVzIGJsb2NrICovCisJUFRYX1NUQVRVU19CTE9DS190IHBUeFN0YXR1c1ZhOworCWRtYV9hZGRyX3QgcFR4U3RhdHVzUGE7CisKKwkvKiBBIEJsb2NrIG9mIHplcm9lcyB1c2VkIHRvIHBhZCBwYWNrZXRzIHRoYXQgYXJlIGxlc3MgdGhhbiA2MCBieXRlcyAqLworCXZvaWQgKnBUeER1bW15QmxrVmE7CisJZG1hX2FkZHJfdCBwVHhEdW1teUJsa1BhOworCisJVFhNQUNfRVJSX3QgVHhNYWNFcnI7CisKKwkvKiBWYXJpYWJsZXMgdG8gdHJhY2sgdGhlIFR4IGludGVycnVwdCBjb2FsZXNjaW5nIGZlYXR1cmVzICovCisJaW50MzJfdCBUeFBhY2tldHNTaW5jZUxhc3RpbnRlcnJ1cHQ7Cit9IFRYX1JJTkdfdCwgKlBUWF9SSU5HX3Q7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIGZyYWctbGlzdCBmb3IgdGhlIGZvbGxvd2luZyBwcm90b3R5cGVzICovCit0eXBlZGVmIHN0cnVjdCBfTVBfRlJBR19MSVNUIE1QX0ZSQUdfTElTVCwgKlBNUF9GUkFHX0xJU1Q7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBldDEzMXhfYWRhcHRlcjsKKworLyogUFJPVE9UWVBFUyBmb3IgZXQxMzEwX3R4LmMgKi8KK2ludCBldDEzMXhfdHhfZG1hX21lbW9yeV9hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfdHhfZG1hX21lbW9yeV9mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIENvbmZpZ1R4RG1hUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X2luaXRfc2VuZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfdHhfZG1hX2Rpc2FibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIGV0MTMxeF90eF9kbWFfZW5hYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwordm9pZCBldDEzMXhfaGFuZGxlX3NlbmRfaW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwordm9pZCBldDEzMXhfZnJlZV9idXN5X3NlbmRfcGFja2V0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK2ludCBldDEzMXhfc2VuZF9wYWNrZXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworCisjZW5kaWYgLyogX19FVDEzMTBfVFhfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9hZGFwdGVyLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9hZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlNjFhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2FkYXB0ZXIuaApAQCAtMCwwICsxLDM0NyBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfYWRhcHRlci5oIC0gSGVhZGVyIHdoaWNoIGluY2x1ZGVzIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlLCBhbG9uZworICogICAgICAgICAgICAgICAgICAgIHdpdGggcmVsYXRlZCBzdXBwb3J0IHN0cnVjdHVyZXMsIG1hY3JvcywgZGVmaW5pdGlvbnMsIGV0Yy4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxWF9BREFQVEVSX0hfXworI2RlZmluZSBfX0VUMTMxWF9BREFQVEVSX0hfXworCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisjaW5jbHVkZSAiZXQxMzEwX3R4LmgiCisjaW5jbHVkZSAiZXQxMzEwX3J4LmgiCisKKy8qCisgKiBEbyBub3QgY2hhbmdlIHRoZXNlIHZhbHVlczogaWYgY2hhbmdlZCwgdGhlbiBjaGFuZ2UgYWxzbyBpbiByZXNwZWN0aXZlCisgKiBUWGRtYSBhbmQgUnhkbWEgZW5naW5lcworICovCisjZGVmaW5lIE5VTV9ERVNDX1BFUl9SSU5HX1RYICAgICAgICAgNTEyCS8vIFRYIERvIG5vdCBjaGFuZ2UgdGhlc2UgdmFsdWVzCisjZGVmaW5lIE5VTV9UQ0IgICAgICAgICAgICAgICAgICAgICAgNjQKKworLyoKKyAqIFRoZXNlIHZhbHVlcyBhcmUgYWxsIHN1cGVyc2VkZWQgYnkgcmVnaXN0cnkgZW50cmllcyB0byBmYWNpbGl0YXRlIHR1bmluZy4KKyAqIE9uY2UgdGhlIGRlc2lyZWQgcGVyZm9ybWFuY2UgaGFzIGJlZW4gYWNoaWV2ZWQsIHRoZSBvcHRpbWFsIHJlZ2lzdHJ5IHZhbHVlcworICogc2hvdWxkIGJlIHJlLXBvcHVsYXRlZCB0byB0aGVzZSAjZGVmaW5lczoKKyAqLworI2RlZmluZSBOVU1fVFJBRkZJQ19DTEFTU0VTICAgICAgICAgIDEKKworLyoKKyAqIFRoZXJlIGFyZSB0aHJlZSB3YXlzIG9mIGNvdW50aW5nIGVycm9ycyAtIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gWCBlcnJvcnMKKyAqIGluIFkgcGFja2V0cyAocmVwcmVzZW50ZWQgYnkgdGhlICJTQU1QTEUiIG1hY3JvcyksIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4KKyAqIE4gZXJyb3JzIGluIGEgUyBtU2VjIHRpbWUgcGVyaW9kICh0aGUgIlBFUklPRCIgbWFjcm9zKSwgb3IgaWYgdGhlcmUgYXJlCisgKiBjb25zZWN1dGl2ZSBwYWNrZXRzIHdpdGggZXJyb3JzIChDT05TRUNfRVJST1JFRF9USFJFU0gpLiAgVGhpcyBsYXN0IGNvdmVycworICogZm9yICJCdXJzdHkiIGVycm9ycywgYW5kIHRoZSBlcnJvcmVkIHBhY2tldHMgbWF5IHdlbGwgbm90IGJlIGNvbnRpZ3VvdXMsCisgKiBidXQgc2V2ZXJhbCBlcnJvcnMgd2hlcmUgdGhlIHBhY2tldCBjb3VudGVyIGhhcyBjaGFuZ2VkIGJ5IGxlc3MgdGhhbiBhCisgKiBzbWFsbCBhbW91bnQgd2lsbCBjYXVzZSB0aGlzIGNvdW50IHRvIGluY3JlbWVudC4KKyAqLworI2RlZmluZSBUWF9QQUNLRVRTX0lOX1NBTVBMRSAgICAgICAgMTAwMDAKKyNkZWZpbmUgVFhfTUFYX0VSUk9SU19JTl9TQU1QTEUgICAgIDUwCisKKyNkZWZpbmUgVFhfRVJST1JfUEVSSU9EICAgICAgICAgICAgIDEwMDAKKyNkZWZpbmUgVFhfTUFYX0VSUk9SU19JTl9QRVJJT0QgICAgIDEwCisKKyNkZWZpbmUgTElOS19ERVRFQ1RJT05fVElNRVIgICAgICAgIDUwMDAKKworI2RlZmluZSBUWF9DT05TRUNfUkFOR0UgICAgICAgICAgICAgNQorI2RlZmluZSBUWF9DT05TRUNfRVJST1JFRF9USFJFU0ggICAgMTAKKworI2RlZmluZSBMT19NQVJLX1BFUkNFTlRfRk9SX1BTUiAgICAgMTUKKyNkZWZpbmUgTE9fTUFSS19QRVJDRU5UX0ZPUl9SWCAgICAgIDE1CisKKy8qIE1hY3JvcyBmb3IgZmxhZyBhbmQgcmVmIGNvdW50IG9wZXJhdGlvbnMgICAgICAgICovCisjZGVmaW5lIE1QX1NFVF9GTEFHKF9NLCBfRikgICAgICAgICAoKF9NKS0+RmxhZ3MgfD0gKF9GKSkKKyNkZWZpbmUgTVBfQ0xFQVJfRkxBRyhfTSwgX0YpICAgICAgICgoX00pLT5GbGFncyAmPSB+KF9GKSkKKyNkZWZpbmUgTVBfQ0xFQVJfRkxBR1MoX00pICAgICAgICAgICgoX00pLT5GbGFncyA9IDApCisjZGVmaW5lIE1QX1RFU1RfRkxBRyhfTSwgX0YpICAgICAgICAoKChfTSktPkZsYWdzICYgKF9GKSkgIT0gMCkKKyNkZWZpbmUgTVBfVEVTVF9GTEFHUyhfTSwgX0YpICAgICAgICgoKF9NKS0+RmxhZ3MgJiAoX0YpKSA9PSAoX0YpKQorI2RlZmluZSBNUF9JU19GTEFHX0NMRUFSKF9NLCBfRikgICAgKCgoX00pLT5GbGFncyAmIChfRikpID09IDApCisKKyNkZWZpbmUgTVBfSU5DX1JDVl9SRUYoX0EpICAgICAgICAgIGF0b21pY19pbmMoJihfQSktPlJjdlJlZkNvdW50KQorI2RlZmluZSBNUF9ERUNfUkNWX1JFRihfQSkgICAgICAgICAgYXRvbWljX2RlYygmKF9BKS0+UmN2UmVmQ291bnQpCisjZGVmaW5lIE1QX0dFVF9SQ1ZfUkVGKF9BKSAgICAgICAgICBhdG9taWNfcmVhZCgmKF9BKS0+UmN2UmVmQ291bnQpCisKKy8qIE1hY3JvcyBzcGVjaWZpYyB0byB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworI2RlZmluZSBNUF9UQ0JfUkVTT1VSQ0VTX0FWQUlMQUJMRShfTSkgKChfTSktPlR4UmluZy5uQnVzeVNlbmQgPCBOVU1fVENCKQorI2RlZmluZSBNUF9UQ0JfUkVTT1VSQ0VTX05PVF9BVkFJTEFCTEUoX00pICgoX00pLT5UeFJpbmcubkJ1c3lTZW5kID49IE5VTV9UQ0IpCisKKyNkZWZpbmUgTVBfU0hPVUxEX0ZBSUxfU0VORChfTSkgICAoKF9NKS0+RmxhZ3MgJiBmTVBfQURBUFRFUl9GQUlMX1NFTkRfTUFTSykKKyNkZWZpbmUgTVBfSVNfTk9UX1JFQURZKF9NKSAgICAgICAoKF9NKS0+RmxhZ3MgJiBmTVBfQURBUFRFUl9OT1RfUkVBRFlfTUFTSykKKyNkZWZpbmUgTVBfSVNfUkVBRFkoX00pICAgICAgICAgICAhKChfTSktPkZsYWdzICYgZk1QX0FEQVBURVJfTk9UX1JFQURZX01BU0spCisKKyNkZWZpbmUgTVBfSEFTX0NBQkxFKF9NKSAgICAgICAgICAgISgoX00pLT5GbGFncyAmIGZNUF9BREFQVEVSX05PX0NBQkxFKQorI2RlZmluZSBNUF9MSU5LX0RFVEVDVEVEKF9NKSAgICAgICAhKChfTSktPkZsYWdzICYgZk1QX0FEQVBURVJfTElOS19ERVRFQ1RJT04pCisKKy8qIENvdW50ZXJzIGZvciBlcnJvciByYXRlIG1vbml0b3JpbmcgKi8KK3R5cGVkZWYgc3RydWN0IF9NUF9FUlJfQ09VTlRFUlMgeworCXUzMiBQa3RDb3VudFR4UGFja2V0czsKKwl1MzIgUGt0Q291bnRUeEVycm9yczsKKwl1MzIgVGltZXJCYXNlZFR4RXJyb3JzOworCXUzMiBQa3RDb3VudExhc3RFcnJvcjsKKwl1MzIgRXJyZWRDb25zZWNQYWNrZXRzOworfSBNUF9FUlJfQ09VTlRFUlMsICpQTVBfRVJSX0NPVU5URVJTOworCisvKiBSRkQgKFJlY2VpdmUgRnJhbWUgRGVzY3JpcHRvcikgKi8KK3R5cGVkZWYgc3RydWN0IF9NUF9SRkQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlOworCXN0cnVjdCBza19idWZmICpQYWNrZXQ7CisJdTMyIFBhY2tldFNpemU7CS8vIHRvdGFsIHNpemUgb2YgcmVjZWl2ZSBmcmFtZQorCXUxNiBpQnVmZmVySW5kZXg7CisJdTggaVJpbmdJbmRleDsKK30gTVBfUkZELCAqUE1QX1JGRDsKKworLyogRW51bSBmb3IgRmxvdyBDb250cm9sICovCit0eXBlZGVmIGVudW0gX2VmbG93X2NvbnRyb2xfdCB7CisJQm90aCA9IDAsCisJVHhPbmx5ID0gMSwKKwlSeE9ubHkgPSAyLAorCU5vbmUgPSAzCit9IGVGTE9XX0NPTlRST0xfdCwgKlBlRkxPV19DT05UUk9MX3Q7CisKKy8qIFN0cnVjdCB0byBkZWZpbmUgc29tZSBkZXZpY2Ugc3RhdGlzdGljcyAqLwordHlwZWRlZiBzdHJ1Y3QgX2NlX3N0YXRzX3QgeworCS8qIExpbmsgSW5wdXQvT3V0cHV0IHN0YXRzICovCisJdWludDY0X3QgaXBhY2tldHM7CS8vICMgb2YgaW4gcGFja2V0cworCXVpbnQ2NF90IG9wYWNrZXRzOwkvLyAjIG9mIG91dCBwYWNrZXRzCisKKwkvKiBNSUIgSUkgdmFyaWFibGVzCisJICoKKwkgKiBOT1RFOiBhdG9taWNfdCB0eXBlcyBhcmUgb25seSBndWFyYW50ZWVkIHRvIHN0b3JlIDI0LWJpdHM7IGlmIHdlCisJICogTVVTVCBoYXZlIDMyLCB0aGVuIHdlJ2xsIG5lZWQgYW5vdGhlciB3YXkgdG8gcGVyZm9ybSBhdG9taWMKKwkgKiBvcGVyYXRpb25zCisJICovCisJdTMyIHVuaXJjdjsJLy8gIyBtdWx0aWNhc3QgcGFja2V0cyByZWNlaXZlZAorCWF0b21pY190IHVuaXhtdDsJLy8gIyBtdWx0aWNhc3QgcGFja2V0cyBmb3IgVHgKKwl1MzIgbXVsdGlyY3Y7CS8vICMgbXVsdGljYXN0IHBhY2tldHMgcmVjZWl2ZWQKKwlhdG9taWNfdCBtdWx0aXhtdDsJLy8gIyBtdWx0aWNhc3QgcGFja2V0cyBmb3IgVHgKKwl1MzIgYnJkY3N0cmN2OwkvLyAjIGJyb2FkY2FzdCBwYWNrZXRzIHJlY2VpdmVkCisJYXRvbWljX3QgYnJkY3N0eG10OwkvLyAjIGJyb2FkY2FzdCBwYWNrZXRzIGZvciBUeAorCXUzMiBub3JjdmJ1ZjsJLy8gIyBSeCBwYWNrZXRzIGRpc2NhcmRlZAorCXUzMiBub3htdGJ1ZjsJLy8gIyBUeCBwYWNrZXRzIGRpc2NhcmRlZAorCisJLyogVHJhbnNjaWV2ZXIgc3RhdGUgaW5mb3JtYXRpb25zLiAqLworCXU4IHhjdnJfYWRkcjsKKwl1MzIgeGN2cl9pZDsKKworCS8qIFR4IFN0YXRpc3RpY3MuICovCisJdTMyIHR4X3VmbG87CQkvLyBUeCBVbmRlcnJ1bnMKKworCXUzMiBjb2xsaXNpb25zOworCXUzMiBleGNlc3NpdmVfY29sbGlzaW9uczsKKwl1MzIgZmlyc3RfY29sbGlzaW9uOworCXUzMiBsYXRlX2NvbGxpc2lvbnM7CisJdTMyIG1heF9wa3RfZXJyb3I7CisJdTMyIHR4X2RlZmVycmVkOworCisJLyogUnggU3RhdGlzdGljcy4gKi8KKwl1MzIgcnhfb3ZfZmxvdzsJLy8gUnggT3ZlciBGbG93CisKKwl1MzIgbGVuZ3RoX2VycjsKKwl1MzIgYWxpZ25tZW50X2VycjsKKwl1MzIgY3JjX2VycjsKKwl1MzIgY29kZV92aW9sYXRpb25zOworCXUzMiBvdGhlcl9lcnJvcnM7CisKKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCisJdTMyIFVuaGFuZGxlZEludGVycnVwdHNQZXJTZWM7CisJdTMyIFJ4RG1hSW50ZXJydXB0c1BlclNlYzsKKwl1MzIgVHhEbWFJbnRlcnJ1cHRzUGVyU2VjOworCXUzMiBXYXRjaERvZ0ludGVycnVwdHNQZXJTZWM7CisjZW5kaWYJLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisJdTMyIFN5bmNocm91bm91c0l0ZXJhdGlvbnM7CisJSU5URVJSVVBUX3QgSW50ZXJydXB0U3RhdHVzOworfSBDRV9TVEFUU190LCAqUENFX1NUQVRTX3Q7CisKKy8qIFRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCitzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgeworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGFzazsKKworCS8qIEZsYWdzIHRoYXQgaW5kaWNhdGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYWRhcHRlciAqLworCXUzMiBGbGFnczsKKwl1MzIgSHdFcnJDb3VudDsKKworCS8qIENvbmZpZ3VyYXRpb24gICovCisJdTggUGVybWFuZW50QWRkcmVzc1tFVEhfQUxFTl07CisJdTggQ3VycmVudEFkZHJlc3NbRVRIX0FMRU5dOworCWJvb2wgYk92ZXJyaWRlQWRkcmVzczsKKwlib29sIGJFZXByb21QcmVzZW50OworCXU4IGVlcHJvbURhdGFbMl07CisKKwkvKiBTcGlubG9ja3MgKi8KKwlzcGlubG9ja190IExvY2s7CisKKwlzcGlubG9ja190IFRDQlNlbmRRTG9jazsKKwlzcGlubG9ja190IFRDQlJlYWR5UUxvY2s7CisJc3BpbmxvY2tfdCBTZW5kSFdMb2NrOworCXNwaW5sb2NrX3QgU2VuZFdhaXRMb2NrOworCisJc3BpbmxvY2tfdCBSY3ZMb2NrOworCXNwaW5sb2NrX3QgUmN2UGVuZExvY2s7CisJc3BpbmxvY2tfdCBGYnJMb2NrOworCisJc3BpbmxvY2tfdCBQSFlMb2NrOworCisJLyogUGFja2V0IEZpbHRlciBhbmQgbG9vayBhaGVhZCBzaXplICovCisJdTMyIFBhY2tldEZpbHRlcjsKKwl1MzIgdWxMb29rQWhlYWQ7CisJdTMyIHVpTGlua1NwZWVkOworCXUzMiB1aUR1cGxleE1vZGU7CisJdTMyIHVpQXV0b05lZ1N0YXR1czsKKwl1OCB1Y0xpbmtTdGF0dXM7CisKKwkvKiBtdWx0aWNhc3QgbGlzdCAqLworCXUzMiBNQ0FkZHJlc3NDb3VudDsKKwl1OCBNQ0xpc3RbTklDX01BWF9NQ0FTVF9MSVNUXVtFVEhfQUxFTl07CisKKwkvKiBNQUMgdGVzdCAqLworCVRYTUFDX1RYVEVTVF90IFR4TWFjVGVzdDsKKworCS8qIFBvaW50ZXIgdG8gdGhlIGRldmljZSdzIFBDSSByZWdpc3RlciBzcGFjZSAqLworCUFERFJFU1NfTUFQX3QgX19pb21lbSAqQ1NSQWRkcmVzczsKKworCS8qIFBDSSBjb25maWcgc3BhY2UgaW5mbywgZm9yIGRlYnVnIHB1cnBvc2VzIG9ubHkuICovCisJdTggUmV2aXNpb25JRDsKKwl1MTYgVmVuZG9ySUQ7CisJdTE2IERldmljZUlEOworCXUxNiBTdWJWZW5kb3JJRDsKKwl1MTYgU3ViU3lzdGVtSUQ7CisJdTMyIENhY2hlRmlsbFNpemU7CisJdTE2IFBjaVhEZXZDdGw7CisJdTggcGNpX2xhdF90aW1lcjsKKwl1OCBwY2lfaGRyX3R5cGU7CisJdTggcGNpX2Jpc3Q7CisJdTMyIHBjaV9jZmdfc3RhdGVbNjQgLyBzaXplb2YodTMyKV07CisKKwkvKiBSZWdpc3RyeSBwYXJhbWV0ZXJzICovCisJdTggU3BlZWREdXBsZXg7CQkvLyBzcGVlZC9kdXBsZXgKKwllRkxPV19DT05UUk9MX3QgUmVnaXN0cnlGbG93Q29udHJvbDsJLy8gZm9yIDgwMi4zeCBmbG93IGNvbnRyb2wKKwl1OCBSZWdpc3RyeVdPTE1hdGNoOwkvLyBFbmFibGUgV09MIHBhdHRlcm4tbWF0Y2hpbmcKKwl1OCBSZWdpc3RyeVdPTExpbms7CS8vIExpbmsgc3RhdGUgY2hhbmdlIGlzIGluZGVwZW5kYW50CisJdTggUmVnaXN0cnlQaHlDb21hOwkvLyBQaHkgQ29tYSBtb2RlIGVuYWJsZS9kaXNhYmxlCisKKwl1MzIgUmVnaXN0cnlSeE1lbUVuZDsJLy8gU2l6ZSBvZiBpbnRlcm5hbCByeCBtZW1vcnkKKwl1OCBSZWdpc3RyeU1BQ1N0YXQ7CS8vIElmIHNldCwgcmVhZCBNQUNTVEFULCBlbHNlIGRvbid0CisJdTMyIFJlZ2lzdHJ5VmxhblRhZzsJLy8gODAyLjFxIFZsYW4gVEFHCisJdTMyIFJlZ2lzdHJ5SnVtYm9QYWNrZXQ7CS8vIE1heCBzdXBwb3J0ZWQgZXRoZXJuZXQgcGFja2V0IHNpemUKKworCXUzMiBSZWdpc3RyeVR4TnVtQnVmZmVyczsKKwl1MzIgUmVnaXN0cnlUeFRpbWVJbnRlcnZhbDsKKworCXUzMiBSZWdpc3RyeVJ4TnVtQnVmZmVyczsKKwl1MzIgUmVnaXN0cnlSeFRpbWVJbnRlcnZhbDsKKworCS8qIFZhbGlkYXRpb24gaGVscGVycyAqLworCXU4IFJlZ2lzdHJ5UE1XT0w7CisJdTggUmVnaXN0cnlOTUlEaXNhYmxlOworCXUzMiBSZWdpc3RyeURNQUNhY2hlOworCXUzMiBSZWdpc3RyeVNDR2FpbjsKKwl1OCBSZWdpc3RyeVBoeUxvb3BiazsJLy8gRW5hYmxlIFBoeSBsb29wYmFjaworCisJLyogRGVyaXZlZCBmcm9tIHRoZSByZWdpc3RyeTogKi8KKwl1OCBBaUZvcmNlRHB4OwkJLy8gZHVwbGV4IHNldHRpbmcKKwl1MTYgQWlGb3JjZVNwZWVkOwkJLy8gJ1NwZWVkJywgdXNlciBvdmVyLXJpZGUgb2YgbGluZSBzcGVlZAorCWVGTE9XX0NPTlRST0xfdCBGbG93Q29udHJvbDsJLy8gZmxvdyBjb250cm9sIHZhbGlkYXRlZCBieSB0aGUgZmFyLWVuZAorCWVudW0geworCQlORVRJRl9TVEFUVVNfSU5WQUxJRCA9IDAsCisJCU5FVElGX1NUQVRVU19NRURJQV9DT05ORUNULAorCQlORVRJRl9TVEFUVVNfTUVESUFfRElTQ09OTkVDVCwKKwkJTkVUSUZfU1RBVFVTX01BWAorCX0gTWVkaWFTdGF0ZTsKKwl1OCBEcml2ZXJOb1BoeUFjY2VzczsKKworCS8qIE1pbmltaXplIGluaXQtdGltZSAqLworCWJvb2wgYlF1ZXJ5UGVuZGluZzsKKwlib29sIGJTZXRQZW5kaW5nOworCWJvb2wgYlJlc2V0UGVuZGluZzsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBFcnJvclRpbWVyOworCWJvb2wgYkxpbmtUaW1lckFjdGl2ZTsKKwlNUF9QT1dFUl9NR01UIFBvTWdtdDsKKwlJTlRFUlJVUFRfdCBDYWNoZWRNYXNrVmFsdWU7CisKKwlhdG9taWNfdCBSY3ZSZWZDb3VudDsJLy8gTnVtIHBhY2tldHMgbm90IHlldCByZXR1cm5lZAorCisJLyogWGN2ciBzdGF0dXMgYXQgbGFzdCBwb2xsICovCisJTUlfQk1TUl90IEJtc3I7CisKKwkvKiBUeCBNZW1vcnkgVmFyaWFibGVzICovCisJVFhfUklOR190IFR4UmluZzsKKworCS8qIFJ4IE1lbW9yeSBWYXJpYWJsZXMgKi8KKwlSWF9SSU5HX3QgUnhSaW5nOworCisJLyogRVQxMzEwIHJlZ2lzdGVyIEFjY2VzcyAqLworCUpBR0NPUkVfQUNDRVNTX1JFR1MgSmFnQ29yZVJlZ3M7CisJUENJX0NGR19TUEFDRV9SRUdTIFBjaUNmZ1JlZ3M7CisKKwkvKiBMb29wYmFjayBzcGVjaWZpY3MgKi8KKwl1OCBSZXBsaWNhUGh5TG9vcGJrOwkvLyBSZXBsaWNhIEVuYWJsZQorCXU4IFJlcGxpY2FQaHlMb29wYmtQRjsJLy8gUmVwbGljYSBFbmFibGUgUGFzcy9GYWlsCisKKwkvKiBTdGF0cyAqLworCUNFX1NUQVRTX3QgU3RhdHM7CisKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHM7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzX3ByZXY7Cit9OworCisjZGVmaW5lIE1QU2VuZFBhY2tldHNIYW5kbGVyICBNUFNlbmRQYWNrZXRzCisjZGVmaW5lIE1QX0ZSRUVfU0VORF9QQUNLRVRfRlVOKEFkYXB0ZXIsIHBNcFRjYikgXAorCWV0MTMxeF9mcmVlX3NlbmRfcGFja2V0KEFkYXB0ZXIsIHBNcFRjYikKKyNkZWZpbmUgTXBTZW5kUGFja2V0RnVuKEFkYXB0ZXIsIFBhY2tldCkgTXBTZW5kUGFja2V0KEFkYXB0ZXIsIFBhY2tldCkKKworI2VuZGlmIC8qIF9fRVQxMzFYX0FEQVBURVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9jb25maWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZGJhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9jb25maWcuYwpAQCAtMCwwICsxLDMyNSBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfY29uZmlnLmMgLSBIYW5kbGVzIHBhcnNpbmcgb2YgY29uZmlndXJhdGlvbiBkYXRhIGR1cmluZworICogICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24uCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJldDEzMXhfdmVyc2lvbi5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWJ1Zy5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlICJldDEzMTBfcGh5LmgiCisjaW5jbHVkZSAiZXQxMzEwX3BtLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisjaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKyNpbmNsdWRlICJldDEzMXhfY29uZmlnLmgiCisKKyNpbmNsdWRlICJldDEzMTBfdHguaCIKKworLyogRGF0YSBmb3IgZGVidWdnaW5nIGZhY2lsaXRpZXMgKi8KKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCitleHRlcm4gZGJnX2luZm9fdCAqZXQxMzF4X2RiZ2luZm87CisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisvKiBEZWZpbmVzIGZvciBQYXJhbWV0ZXIgRGVmYXVsdC9NaW4vTWF4IHZhdWxlcyAqLworI2RlZmluZSBQQVJNX1NQRUVEX0RVUExFWF9ERUYgICAwCisjZGVmaW5lIFBBUk1fU1BFRURfRFVQTEVYX01JTiAgIDAKKyNkZWZpbmUgUEFSTV9TUEVFRF9EVVBMRVhfTUFYICAgNQorCisjZGVmaW5lIFBBUk1fVkxBTl9UQUdfREVGICAgICAgIDAKKyNkZWZpbmUgUEFSTV9WTEFOX1RBR19NSU4gICAgICAgMAorI2RlZmluZSBQQVJNX1ZMQU5fVEFHX01BWCAgICAgICA0MDk1CisKKyNkZWZpbmUgUEFSTV9GTE9XX0NUTF9ERUYgICAgICAgMAorI2RlZmluZSBQQVJNX0ZMT1dfQ1RMX01JTiAgICAgICAwCisjZGVmaW5lIFBBUk1fRkxPV19DVExfTUFYICAgICAgIDMKKworI2RlZmluZSBQQVJNX1dPTF9MSU5LX0RFRiAgICAgICAzCisjZGVmaW5lIFBBUk1fV09MX0xJTktfTUlOICAgICAgIDAKKyNkZWZpbmUgUEFSTV9XT0xfTElOS19NQVggICAgICAgMworCisjZGVmaW5lIFBBUk1fV09MX01BVENIX0RFRiAgICAgIDcKKyNkZWZpbmUgUEFSTV9XT0xfTUFUQ0hfTUlOICAgICAgMAorI2RlZmluZSBQQVJNX1dPTF9NQVRDSF9NQVggICAgICA3CisKKyNkZWZpbmUgUEFSTV9KVU1CT19QS1RfREVGICAgICAgMTUxNAorI2RlZmluZSBQQVJNX0pVTUJPX1BLVF9NSU4gICAgICAxNTE0CisjZGVmaW5lIFBBUk1fSlVNQk9fUEtUX01BWCAgICAgIDkyMTYKKworI2RlZmluZSBQQVJNX1BIWV9DT01BX0RFRiAgICAgICAwCisjZGVmaW5lIFBBUk1fUEhZX0NPTUFfTUlOICAgICAgIDAKKyNkZWZpbmUgUEFSTV9QSFlfQ09NQV9NQVggICAgICAgMQorCisjZGVmaW5lIFBBUk1fUlhfTlVNX0JVRlNfREVGICAgIDQKKyNkZWZpbmUgUEFSTV9SWF9OVU1fQlVGU19NSU4gICAgMQorI2RlZmluZSBQQVJNX1JYX05VTV9CVUZTX01BWCAgICA2NAorCisjZGVmaW5lIFBBUk1fUlhfVElNRV9JTlRfREVGICAgIDEwCisjZGVmaW5lIFBBUk1fUlhfVElNRV9JTlRfTUlOICAgIDIKKyNkZWZpbmUgUEFSTV9SWF9USU1FX0lOVF9NQVggICAgMzIwCisKKyNkZWZpbmUgUEFSTV9UWF9OVU1fQlVGU19ERUYgICAgNAorI2RlZmluZSBQQVJNX1RYX05VTV9CVUZTX01JTiAgICAxCisjZGVmaW5lIFBBUk1fVFhfTlVNX0JVRlNfTUFYICAgIDQwCisKKyNkZWZpbmUgUEFSTV9UWF9USU1FX0lOVF9ERUYgICAgNDAKKyNkZWZpbmUgUEFSTV9UWF9USU1FX0lOVF9NSU4gICAgMQorI2RlZmluZSBQQVJNX1RYX1RJTUVfSU5UX01BWCAgICAxNDAKKworI2RlZmluZSBQQVJNX1JYX01FTV9FTkRfREVGICAgICAweDJiYworI2RlZmluZSBQQVJNX1JYX01FTV9FTkRfTUlOICAgICAwCisjZGVmaW5lIFBBUk1fUlhfTUVNX0VORF9NQVggICAgIDB4M2ZmCisKKyNkZWZpbmUgUEFSTV9NQUNfU1RBVF9ERUYgICAgICAgMQorI2RlZmluZSBQQVJNX01BQ19TVEFUX01JTiAgICAgICAwCisjZGVmaW5lIFBBUk1fTUFDX1NUQVRfTUFYICAgICAgIDEKKworI2RlZmluZSBQQVJNX1NDX0dBSU5fREVGICAgICAgICA3CisjZGVmaW5lIFBBUk1fU0NfR0FJTl9NSU4gICAgICAgIDAKKyNkZWZpbmUgUEFSTV9TQ19HQUlOX01BWCAgICAgICAgNworCisjZGVmaW5lIFBBUk1fUE1fV09MX0RFRiAgICAgICAgIDAKKyNkZWZpbmUgUEFSTV9QTV9XT0xfTUlOICAgICAgICAgMAorI2RlZmluZSBQQVJNX1BNX1dPTF9NQVggICAgICAgICAxCisKKyNkZWZpbmUgUEFSTV9OTUlfRElTQUJMRV9ERUYgICAgMAorI2RlZmluZSBQQVJNX05NSV9ESVNBQkxFX01JTiAgICAwCisjZGVmaW5lIFBBUk1fTk1JX0RJU0FCTEVfTUFYICAgIDIKKworI2RlZmluZSBQQVJNX0RNQV9DQUNIRV9ERUYgICAgICAwCisjZGVmaW5lIFBBUk1fRE1BX0NBQ0hFX01JTiAgICAgIDAKKyNkZWZpbmUgUEFSTV9ETUFfQ0FDSEVfTUFYICAgICAgMTUKKworI2RlZmluZSBQQVJNX1BIWV9MT09QQktfREVGICAgICAwCisjZGVmaW5lIFBBUk1fUEhZX0xPT1BCS19NSU4gICAgIDAKKyNkZWZpbmUgUEFSTV9QSFlfTE9PUEJLX01BWCAgICAgMQorCisjZGVmaW5lIFBBUk1fTUFDX0FERFJFU1NfREVGICAgIHsgMHgwMCwgMHgwNSwgMHgzZCwgMHgwMCwgMHgwMiwgMHgwMCB9CisKKy8qIE1vZHVsZSBwYXJhbWV0ZXIgZm9yIGRpc2FibGluZyBOTUkKKyAqIGV0MTMxeF9zcGVlZF9zZXQgOgorICogU2V0IExpbmsgc3BlZWQgYW5kIGR1YmxleCBtYW51YWxseSAoMC01KSAgWzBdCisgKiAgMSA6IDEwTWIgICBIYWxmLUR1cGxleAorICogIDIgOiAxME1iICAgRnVsbC1EdXBsZXgKKyAqICAzIDogMTAwTWIgIEhhbGYtRHVwbGV4CisgKiAgNCA6IDEwME1iICBGdWxsLUR1cGxleAorICogIDUgOiAxMDAwTWIgRnVsbC1EdXBsZXgKKyAqICAwIDogQXV0byBTcGVlZCBBdXRvIER1YmxleCAvLyBkZWZhdWx0CisgKi8KK3N0YXRpYyB1MzIgZXQxMzF4X25taV9kaXNhYmxlID0gUEFSTV9OTUlfRElTQUJMRV9ERUY7Cittb2R1bGVfcGFyYW0oZXQxMzF4X25taV9kaXNhYmxlLCB1aW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZXQxMzF4X25taV9kaXNhYmxlLCAiRGlzYWJsZSBOTUkgKDAtMikgWzBdIik7CisKKy8qIE1vZHVsZSBwYXJhbWV0ZXIgZm9yIG1hbnVhbCBzcGVlZCBzZXR0aW5nCisgKiBldDEzMXhfbm1pX2Rpc2FibGUgOgorICogRGlzYWJsZSBOTUkgKDAtMikgWzBdCisgKiAgMCA6CisgKiAgMSA6CisgKiAgMiA6CisgKi8KK3N0YXRpYyB1MzIgZXQxMzF4X3NwZWVkX3NldCA9IFBBUk1fU1BFRURfRFVQTEVYX0RFRjsKK21vZHVsZV9wYXJhbShldDEzMXhfc3BlZWRfc2V0LCB1aW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZXQxMzF4X3NwZWVkX3NldCwKKwkJICJTZXQgTGluayBzcGVlZCBhbmQgZHVibGV4IG1hbnVhbGx5ICgwLTUpICBbMF0gXG4gIDEgOiAxME1iICAgSGFsZi1EdXBsZXggXG4gIDIgOiAxME1iICAgRnVsbC1EdXBsZXggXG4gIDMgOiAxMDBNYiAgSGFsZi1EdXBsZXggXG4gIDQgOiAxMDBNYiAgRnVsbC1EdXBsZXggXG4gIDUgOiAxMDAwTWIgRnVsbC1EdXBsZXggXG4gMCA6IEF1dG8gU3BlZWQgQXV0byBEdWJsZXgiKTsKKworLyoqCisgKiBldDEzMXhfY29uZmlnX3BhcnNlCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3QKKyAqCisgKiBQYXJzZXMgYSBjb25maWd1cmF0aW9uIGZyb20gc29tZSBsb2NhdGlvbiAobW9kdWxlIHBhcmFtZXRlcnMsIGZvciBleGFtcGxlKQorICogaW50byB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdAorICovCit2b2lkIGV0MTMxeF9jb25maWdfcGFyc2Uoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwl1aW50OF90IG1hY0FkZHJEZWZbXSA9IFBBUk1fTUFDX0FERFJFU1NfREVGOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qCisJICogVGhlIE5ESVMgZHJpdmVyIHVzZXMgdGhlIHJlZ2lzdHJ5IHRvIHN0b3JlIHBlcnNpc3RlbnQgcGVyLWRldmljZQorCSAqIGNvbmZpZ3VyYXRpb24sIGFuZCByZWFkcyB0aGlzIGNvbmZpZ3VyYXRpb24gaW50byB0aGUgYXBwcm9wcmlhdGUKKwkgKiBlbGVtZW50cyBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSBvbiBpbml0aWFsaXphdGlvbi4KKwkgKiBCZWNhdXNlIExpbnV4IGhhcyBubyBhbmFsb2cgdG8gdGhlIHJlZ2lzdHJ5LCB1c2UgdGhpcyBmdW5jdGlvbiB0bworCSAqIGluaXRpYWxpemUgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgd2l0aCBhIGRlZmF1bHQKKwkgKiBjb25maWd1cmF0aW9uLgorCSAqCisJICogT25lIG90aGVyIHBvc3NpYmlsaXR5IGlzIHRvIHVzZSBhIHNlcmllcyBvZiBtb2R1bGUgcGFyYW1ldGVycyB3aGljaAorCSAqIGNhbiBiZSBwYXNzZWQgaW4gYnkgdGhlIGNhbGxlciB3aGVuIHRoZSBtb2R1bGUgaXMgaW5pdGlhbGl6ZWQuCisJICogSG93ZXZlciwgdGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBhbGxvdyBmb3Igc2VwZXJhdGUKKwkgKiBjb25maWd1cmF0aW9ucyBpbiB0aGUgZXZlbnQgbXVsdGlwbGUgZGV2aWNlcyBhcmUgcHJlc2VudCwgYW5kIGhlbmNlCisJICogd2lsbCBub3Qgc3VmZmljZS4KKwkgKgorCSAqIElmIGFub3RoZXIgbWV0aG9kIGlzIGRlcml2ZWQgd2hpY2ggYWRkcmVzc2VzIHRoaXMgcHJvYmxlbSwgdGhpcyBpcworCSAqIHdoZXJlIGl0IHNob3VsZCBiZSBpbXBsZW1lbnRlZC4KKwkgKi8KKworCSAvKiBTZXQgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3Qgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlCisJICAqIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVycworCSAgKi8KKwlpZiAoZXQxMzF4X3NwZWVkX3NldCAhPSBQQVJNX1NQRUVEX0RVUExFWF9ERUYpIHsKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJTcGVlZCBzZXQgbWFudWFsbHkgdG8gOiAlZCBcbiIsCisJCQkgICAgZXQxMzF4X3NwZWVkX3NldCk7CisJCXBBZGFwdGVyLT5TcGVlZER1cGxleCA9IGV0MTMxeF9zcGVlZF9zZXQ7CisJfSBlbHNlIHsKKwkJcEFkYXB0ZXItPlNwZWVkRHVwbGV4ID0gUEFSTV9TUEVFRF9EVVBMRVhfREVGOworCX0KKworCS8vICBwQWRhcHRlci0+U3BlZWREdXBsZXggICAgICAgICAgICA9IFBBUk1fU1BFRURfRFVQTEVYX0RFRjsKKworCXBBZGFwdGVyLT5SZWdpc3RyeVZsYW5UYWcgPSBQQVJNX1ZMQU5fVEFHX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9IFBBUk1fRkxPV19DVExfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVdPTExpbmsgPSBQQVJNX1dPTF9MSU5LX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlXT0xNYXRjaCA9IFBBUk1fV09MX01BVENIX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlKdW1ib1BhY2tldCA9IFBBUk1fSlVNQk9fUEtUX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlQaHlDb21hID0gUEFSTV9QSFlfQ09NQV9ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5UnhOdW1CdWZmZXJzID0gUEFSTV9SWF9OVU1fQlVGU19ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5UnhUaW1lSW50ZXJ2YWwgPSBQQVJNX1JYX1RJTUVfSU5UX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlUeE51bUJ1ZmZlcnMgPSBQQVJNX1RYX05VTV9CVUZTX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlUeFRpbWVJbnRlcnZhbCA9IFBBUk1fVFhfVElNRV9JTlRfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVJ4TWVtRW5kID0gUEFSTV9SWF9NRU1fRU5EX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlNQUNTdGF0ID0gUEFSTV9NQUNfU1RBVF9ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5U0NHYWluID0gUEFSTV9TQ19HQUlOX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlQTVdPTCA9IFBBUk1fUE1fV09MX0RFRjsKKworCWlmIChldDEzMXhfbm1pX2Rpc2FibGUgIT0gUEFSTV9OTUlfRElTQUJMRV9ERUYpIHsKKwkJcEFkYXB0ZXItPlJlZ2lzdHJ5Tk1JRGlzYWJsZSA9IGV0MTMxeF9ubWlfZGlzYWJsZTsKKwl9IGVsc2UgeworCQlwQWRhcHRlci0+UmVnaXN0cnlOTUlEaXNhYmxlID0gUEFSTV9OTUlfRElTQUJMRV9ERUY7CisJfQorCisJcEFkYXB0ZXItPlJlZ2lzdHJ5RE1BQ2FjaGUgPSBQQVJNX0RNQV9DQUNIRV9ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5UGh5TG9vcGJrID0gUEFSTV9QSFlfTE9PUEJLX0RFRjsKKworCS8qIFNldCB0aGUgTUFDIGFkZHJlc3MgdG8gYSBkZWZhdWx0ICovCisJbWVtY3B5KHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzcywgbWFjQWRkckRlZiwgRVRIX0FMRU4pOworCXBBZGFwdGVyLT5iT3ZlcnJpZGVBZGRyZXNzID0gZmFsc2U7CisKKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sCisJCSAgIkRlZmF1bHQgTUFDIEFkZHJlc3MgIDogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCSAgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzBdLCBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMV0sCisJCSAgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzJdLCBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbM10sCisJCSAgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzRdLCBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNV0pOworCisJLyogRGVjb2RlIFNwZWVkRHVwbGV4CisJICoKKwkgKiBTZXQgdXAgYXMgaWYgd2UgYXJlIGF1dG8gbmVnb3RpYXRpbmcgYWx3YXlzIGFuZCB0aGVuIGNoYW5nZSBpZiB3ZQorCSAqIGdvIGludG8gZm9yY2UgbW9kZQorCSAqLworCXBBZGFwdGVyLT5BaUZvcmNlU3BlZWQgPSAwOwkvLyBBdXRvIHNwZWVkCisJcEFkYXB0ZXItPkFpRm9yY2VEcHggPSAwOwkvLyBBdXRvIEZEWAorCisJLyogSWYgd2UgYXJlIHRoZSAxMC8xMDAgZGV2aWNlLCBhbmQgZ2lnYWJpdCBpcyBzb21laG93IHJlcXVlc3RlZCB0aGVuCisJICoga25vY2sgaXQgZG93biB0byAxMDAgZnVsbC4KKwkgKi8KKwlpZiAoKHBBZGFwdGVyLT5EZXZpY2VJRCA9PSBFVDEzMVhfUENJX0RFVklDRV9JRF9GQVNUKSAmJgorCSAgICAocEFkYXB0ZXItPlNwZWVkRHVwbGV4ID09IDUpKSB7CisJCXBBZGFwdGVyLT5TcGVlZER1cGxleCA9IDQ7CisJfQorCisJc3dpdGNoIChwQWRhcHRlci0+U3BlZWREdXBsZXgpIHsKKwljYXNlIDE6CQkvLyAxME1iICAgSGFsZi1EdXBsZXgKKwkJcEFkYXB0ZXItPkFpRm9yY2VTcGVlZCA9IDEwOworCQlwQWRhcHRlci0+QWlGb3JjZURweCA9IDE7CisJCWJyZWFrOworCisJY2FzZSAyOgkJLy8gMTBNYiAgIEZ1bGwtRHVwbGV4CisJCXBBZGFwdGVyLT5BaUZvcmNlU3BlZWQgPSAxMDsKKwkJcEFkYXB0ZXItPkFpRm9yY2VEcHggPSAyOworCQlicmVhazsKKworCWNhc2UgMzoJCS8vIDEwME1iICBIYWxmLUR1cGxleAorCQlwQWRhcHRlci0+QWlGb3JjZVNwZWVkID0gMTAwOworCQlwQWRhcHRlci0+QWlGb3JjZURweCA9IDE7CisJCWJyZWFrOworCisJY2FzZSA0OgkJLy8gMTAwTWIgIEZ1bGwtRHVwbGV4CisJCXBBZGFwdGVyLT5BaUZvcmNlU3BlZWQgPSAxMDA7CisJCXBBZGFwdGVyLT5BaUZvcmNlRHB4ID0gMjsKKwkJYnJlYWs7CisKKwljYXNlIDU6CQkvLyAxMDAwTWIgRnVsbC1EdXBsZXgKKwkJcEFkYXB0ZXItPkFpRm9yY2VTcGVlZCA9IDEwMDA7CisJCXBBZGFwdGVyLT5BaUZvcmNlRHB4ID0gMjsKKwkJYnJlYWs7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2NvbmZpZy5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyYzBmNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2NvbmZpZy5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X2NvbmZpZy5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gdG8gc3VwcG9ydAorICogICAgICAgICAgICAgICAgICAgZXQxMzF4X2NvbmZpZy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMVhfQ09ORklHX0hfXworI2RlZmluZSBfX0VUMTMxWF9DT05GSUdfSF9fCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBldDEzMXhfYWRhcHRlcjsKKwordm9pZCBldDEzMXhfY29uZmlnX3BhcnNlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKyNlbmRpZiAvKiBfX0VUMTMxWF9DT05GSUdfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9kZWJ1Zy5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWU1YmNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfZGVidWcuYwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfZGVidWcuYyAtIFJvdXRpbmVzIHVzZWQgZm9yIGRlYnVnZ2luZy4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfbmV0ZGV2LmgiCisjaW5jbHVkZSAiZXQxMzF4X2NvbmZpZy5oIgorI2luY2x1ZGUgImV0MTMxeF9pc3IuaCIKKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisjaW5jbHVkZSAiZXQxMzEwX3R4LmgiCisjaW5jbHVkZSAiZXQxMzEwX3J4LmgiCisjaW5jbHVkZSAiZXQxMzEwX21hYy5oIgorCisvKiBEYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworCisvKioKKyAqIER1bXBUeFF1ZXVlQ29udGVudHMgLSBEdW1wIG91dCB0aGUgdHggcXVldWUgYW5kIHRoZSBzaGFkb3cgcG9pbnRlcnMKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBEdW1wVHhRdWV1ZUNvbnRlbnRzKGludCBkYmdMdmwsIHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJTU1DX3QgX19pb21lbSAqbW1jID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5tbWM7CisJdWludDMyX3QgVHhRdWV1ZUFkZHI7CisKKwlpZiAoREJHX0ZMQUdTKGV0MTMxeF9kYmdpbmZvKSAmIGRiZ0x2bCkgeworCQlmb3IgKFR4UXVldWVBZGRyID0gMHgyMDA7IFR4UXVldWVBZGRyIDwgMHgzZmY7IFR4UXVldWVBZGRyKyspIHsKKwkJCU1NQ19TUkFNX0FDQ0VTU190IHNyYW1fYWNjZXNzOworCisJCQlzcmFtX2FjY2Vzcy52YWx1ZSA9IHJlYWRsKCZtbWMtPnNyYW1fYWNjZXNzLnZhbHVlKTsKKwkJCXNyYW1fYWNjZXNzLmJpdHMucmVxX2FkZHIgPSBUeFF1ZXVlQWRkcjsKKwkJCXNyYW1fYWNjZXNzLmJpdHMucmVxX2FjY2VzcyA9IDE7CisJCQl3cml0ZWwoc3JhbV9hY2Nlc3MudmFsdWUsICZtbWMtPnNyYW1fYWNjZXNzLnZhbHVlKTsKKworCQkJREJHX1BSSU5UKCJBZGRyIDB4JXgsIEFjY2VzcyAweCUwOHhcdCIKKwkJCQkgICJWYWx1ZSAxIDB4JTA4eCwgVmFsdWUgMiAweCUwOHgsICIKKwkJCQkgICJWYWx1ZSAzIDB4JTA4eCwgVmFsdWUgNCAweCUwOHgsIFxuIiwKKwkJCQkgIFR4UXVldWVBZGRyLAorCQkJCSAgcmVhZGwoJm1tYy0+c3JhbV9hY2Nlc3MudmFsdWUpLAorCQkJCSAgcmVhZGwoJm1tYy0+c3JhbV93b3JkMSksCisJCQkJICByZWFkbCgmbW1jLT5zcmFtX3dvcmQyKSwKKwkJCQkgIHJlYWRsKCZtbWMtPnNyYW1fd29yZDMpLAorCQkJCSAgcmVhZGwoJm1tYy0+c3JhbV93b3JkNCkpOworCQl9CisKKwkJREJHX1BSSU5UKCJTaGFkb3cgUG9pbnRlcnMgMHglMDh4XG4iLAorCQkJICByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnR4bWFjLnNoYWRvd19wdHIudmFsdWUpKTsKKwl9Cit9CisKKy8qKgorICogRHVtcERldmljZUJsb2NrCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqCisgKiBEdW1wcyB0aGUgZmlyc3QgNjQgcmVncyBvZiBlYWNoIGJsb2NrIG9mIHRoZSBldC0xMzEwIChlYWNoIGJsb2NrIGlzCisgKiBtYXBwZWQgdG8gYSBuZXcgcGFnZSwgZWFjaCBwYWdlIGlzIDQwOTYgYnl0ZXMpLgorICovCisjZGVmaW5lIE5VTV9CTE9DS1MgOAordm9pZCBEdW1wRGV2aWNlQmxvY2soaW50IGRiZ0x2bCwgc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKKwkJICAgICB1aW50MzJfdCBCbG9jaykKK3sKKwl1aW50MzJfdCBBZGRyZXNzMSwgQWRkcmVzczI7CisJdWludDMyX3QgX19pb21lbSAqQmlnRGV2aWNlUG9pbnRlciA9CisJCSh1aW50MzJfdCBfX2lvbWVtICopIHBBZGFwdGVyLT5DU1JBZGRyZXNzOworCWNvbnN0IGNoYXIgKkJsb2NrTmFtZXNbTlVNX0JMT0NLU10gPSB7CisJCSJHbG9iYWwiLCAiVHggRE1BIiwgIlJ4IERNQSIsICJUeCBNQUMiLAorCQkiUnggTUFDIiwgIk1BQyIsICJNQUMgU3RhdCIsICJNTUMiCisJfTsKKworCS8qIE91dHB1dCB0aGUgZGVidWcgY291bnRlcnMgdG8gdGhlIGRlYnVnIHRlcm1pbmFsICovCisJaWYgKERCR19GTEFHUyhldDEzMXhfZGJnaW5mbykgJiBkYmdMdmwpIHsKKwkJREJHX1BSSU5UKCIlcyBibG9ja1xuIiwgQmxvY2tOYW1lc1tCbG9ja10pOworCQlCaWdEZXZpY2VQb2ludGVyICs9IEJsb2NrICogMTAyNDsKKwkJZm9yIChBZGRyZXNzMSA9IDA7IEFkZHJlc3MxIDwgODsgQWRkcmVzczErKykgeworCQkJZm9yIChBZGRyZXNzMiA9IDA7IEFkZHJlc3MyIDwgODsgQWRkcmVzczIrKykgeworCQkJCWlmIChCbG9jayA9PSAwICYmCisJCQkJICAgIChBZGRyZXNzMSAqIDggKyBBZGRyZXNzMikgPT0gNikgeworCQkJCQlEQkdfUFJJTlQoIiAgSVNSICAgICwgIik7CisJCQkJfSBlbHNlIHsKKwkJCQkJREJHX1BSSU5UKCIweCUwOHgsICIsCisJCQkJCQkgIHJlYWRsKEJpZ0RldmljZVBvaW50ZXIrKykpOworCQkJCX0KKwkJCX0KKwkJCURCR19QUklOVCgiXG4iKTsKKwkJfQorCQlEQkdfUFJJTlQoIlxuIik7CisJfQorfQorCisvKioKKyAqIER1bXBEZXZpY2VSZWcKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICoKKyAqIER1bXBzIHRoZSBmaXJzdCA2NCByZWdzIG9mIGVhY2ggYmxvY2sgb2YgdGhlIGV0LTEzMTAgKGVhY2ggYmxvY2sgaXMKKyAqIG1hcHBlZCB0byBhIG5ldyBwYWdlLCBlYWNoIHBhZ2UgaXMgNDA5NiBieXRlcykuCisgKi8KK3ZvaWQgRHVtcERldmljZVJlZyhpbnQgZGJnTHZsLCBzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXVpbnQzMl90IEFkZHJlc3MxLCBBZGRyZXNzMjsKKwl1aW50MzJfdCBCbG9jazsKKwl1aW50MzJfdCBfX2lvbWVtICpCaWdEZXZpY2VQb2ludGVyID0KKwkJKHVpbnQzMl90IF9faW9tZW0gKikgcEFkYXB0ZXItPkNTUkFkZHJlc3M7CisJdWludDMyX3QgX19pb21lbSAqUG9pbnRlcjsKKwljb25zdCBjaGFyICpCbG9ja05hbWVzW05VTV9CTE9DS1NdID0geworCQkiR2xvYmFsIiwgIlR4IERNQSIsICJSeCBETUEiLCAiVHggTUFDIiwKKwkJIlJ4IE1BQyIsICJNQUMiLCAiTUFDIFN0YXQiLCAiTU1DIgorCX07CisKKwkvKiBPdXRwdXQgdGhlIGRlYnVnIGNvdW50ZXJzIHRvIHRoZSBkZWJ1ZyB0ZXJtaW5hbCAqLworCWlmIChEQkdfRkxBR1MoZXQxMzF4X2RiZ2luZm8pICYgZGJnTHZsKSB7CisJCWZvciAoQmxvY2sgPSAwOyBCbG9jayA8IE5VTV9CTE9DS1M7IEJsb2NrKyspIHsKKwkJCURCR19QUklOVCgiJXMgYmxvY2tcbiIsIEJsb2NrTmFtZXNbQmxvY2tdKTsKKwkJCVBvaW50ZXIgPSBCaWdEZXZpY2VQb2ludGVyICsgKEJsb2NrICogMTAyNCk7CisKKwkJCWZvciAoQWRkcmVzczEgPSAwOyBBZGRyZXNzMSA8IDg7IEFkZHJlc3MxKyspIHsKKwkJCQlmb3IgKEFkZHJlc3MyID0gMDsgQWRkcmVzczIgPCA4OyBBZGRyZXNzMisrKSB7CisJCQkJCURCR19QUklOVCgiMHglMDh4LCAiLAorCQkJCQkJICByZWFkbChQb2ludGVyKyspKTsKKwkJCQl9CisJCQkJREJHX1BSSU5UKCJcbiIpOworCQkJfQorCQkJREJHX1BSSU5UKCJcbiIpOworCQl9CisJfQorfQorCisjZW5kaWYgLy8gQ09ORklHX0VUMTMxWF9ERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfZGVidWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiNjA4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2RlYnVnLmgKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X2RlYnVnLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiB1c2VkIGZvcgorICogICAgICAgICAgICAgICAgICBvdXRwdXR0aW5nIGRlYnVnIG1lc3NhZ2VzIHRvIHRoZSBzeXN0ZW0gbG9nZ2luZyBmYWNpbGl0eQorICogICAgICAgICAgICAgICAgICAoa3N5c2xvZ2QpCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMVhfREJHX0hfXworI2RlZmluZSBfX0VUMTMxWF9EQkdfSF9fCisKKy8qIERlZmluZSBNYXNrcyBmb3IgZGVidWdnaW5nIHR5cGVzL2xldmVscyAqLworI2RlZmluZSBEQkdfRVJST1JfT04gICAgICAgIDB4MDAwMDAwMDFMCisjZGVmaW5lIERCR19XQVJOSU5HX09OICAgICAgMHgwMDAwMDAwMkwKKyNkZWZpbmUgREJHX05PVElDRV9PTiAgICAgICAweDAwMDAwMDA0TAorI2RlZmluZSBEQkdfVFJBQ0VfT04gICAgICAgIDB4MDAwMDAwMDhMCisjZGVmaW5lIERCR19WRVJCT1NFX09OICAgICAgMHgwMDAwMDAxMEwKKyNkZWZpbmUgREJHX1BBUkFNX09OICAgICAgICAweDAwMDAwMDIwTAorI2RlZmluZSBEQkdfQlJFQUtfT04gICAgICAgIDB4MDAwMDAwNDBMCisjZGVmaW5lIERCR19SWF9PTiAgICAgICAgICAgMHgwMDAwMDEwMEwKKyNkZWZpbmUgREJHX1RYX09OICAgICAgICAgICAweDAwMDAwMjAwTAorCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworCisvKgorICogU2V0IHRoZSBsZXZlbCBvZiBkZWJ1Z2dpbmcgaWYgbm90IGRvbmUgd2l0aCBhIHByZXByb2Nlc3NvciBkZWZpbmUuIFNlZQorICogZXQxMzF4X21haW4uYywgZnVuY3Rpb24gZXQxMzF4X2luaXRfbW9kdWxlKCkgZm9yIGhvdyB0aGUgZGVidWcgbGV2ZWwKKyAqIHRyYW5zbGF0ZXMgaW50byB0aGUgdHlwZXMgb2YgbWVzc2FnZXMgZGlzcGxheWVkLgorICovCisjaWZuZGVmIERCR19MVkwKKyNkZWZpbmUgREJHX0xWTAkzCisjZW5kaWYgLyogREJHX0xWTCAqLworCisjZGVmaW5lIERCR19ERUZBVUxUUwkJKERCR19FUlJPUl9PTiB8IERCR19XQVJOSU5HX09OIHwgREJHX0JSRUFLX09OICkKKworI2RlZmluZSBEQkdfRkxBR1MoQSkJCShBKS0+ZGJnRmxhZ3MKKyNkZWZpbmUgREJHX05BTUUoQSkJCShBKS0+ZGJnTmFtZQorI2RlZmluZSBEQkdfTEVWRUwoQSkJCShBKS0+ZGJnTGV2ZWwKKworI2lmbmRlZiBEQkdfUFJJTlQKKyNkZWZpbmUgREJHX1BSSU5UKFMuLi4pCQlwcmludGsoS0VSTl9ERUJVRyBTKQorI2VuZGlmIC8qIERCR19QUklOVCAqLworCisjaWZuZGVmIERCR19QUklOVEMKKyNkZWZpbmUgREJHX1BSSU5UQyhTLi4uKQlwcmludGsoUykKKyNlbmRpZiAvKiBEQkdfUFJJTlRDICovCisKKyNpZm5kZWYgREJHX1RSQVAKKyNkZWZpbmUgREJHX1RSQVAJCXt9CS8qIEJVRygpICovCisjZW5kaWYgLyogREJHX1RSQVAgKi8KKworI2RlZmluZSBfRU5URVJfU1RSCSI+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IgorI2RlZmluZSBfTEVBVkVfU1RSCSI8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8IgorCisjZGVmaW5lIF9EQkdfRU5URVIoQSkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiUuKnM6JXNcbiIsIERCR19OQU1FKEEpLAlcCisJCQkJKytEQkdfTEVWRUwoQSksIF9FTlRFUl9TVFIsIF9fZnVuY19fKQorI2RlZmluZSBfREJHX0xFQVZFKEEpCXByaW50ayhLRVJOX0RFQlVHICIlczolLipzOiVzXG4iLCBEQkdfTkFNRShBKSwJXAorCQkJCURCR19MRVZFTChBKS0tLCBfTEVBVkVfU1RSLCBfX2Z1bmNfXykKKworI2RlZmluZSBEQkdfRU5URVIoQSkgICAgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1RSQUNFX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EQkdfRU5URVIoQSk7fQorCisjZGVmaW5lIERCR19MRUFWRShBKSAgICAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfVFJBQ0VfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RCR19MRUFWRShBKTt9CisKKyNkZWZpbmUgREJHX1BBUkFNKEEsTixGLFMuLi4pICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfUEFSQU1fT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUklOVCgiICAlcyAtLSAiRiJcbiIsTixTKTt9CisKKyNkZWZpbmUgREJHX0VSUk9SKEEsUy4uLikJXAorCWlmIChEQkdfRkxBR1MoQSkgJiBEQkdfRVJST1JfT04pIHsJCQkJXAorCQlEQkdfUFJJTlQoIiVzOkVSUk9SOiVzICIsREJHX05BTUUoQSksIF9fZnVuY19fKTsJXAorCQlEQkdfUFJJTlRDKFMpOwkJCQkJCVwKKwkJREJHX1RSQVA7CQkJCQkJXAorCX0KKworI2RlZmluZSBEQkdfV0FSTklORyhBLFMuLi4pIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1dBUk5JTkdfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0RCR19QUklOVCgiJXM6V0FSTklORzolcyAiLERCR19OQU1FKEEpLF9fZnVuY19fKTtEQkdfUFJJTlRDKFMpO319CisKKyNkZWZpbmUgREJHX05PVElDRShBLFMuLi4pICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19OT1RJQ0VfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0RCR19QUklOVCgiJXM6Tk9USUNFOiVzICIsREJHX05BTUUoQSksX19mdW5jX18pO0RCR19QUklOVEMoUyk7fX0KKworI2RlZmluZSBEQkdfVFJBQ0UoQSxTLi4uKSAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1RSQUNFX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtEQkdfUFJJTlQoIiVzOlRSQUNFOiVzICIsREJHX05BTUUoQSksIF9fZnVuY19fKTtEQkdfUFJJTlRDKFMpO319CisKKyNkZWZpbmUgREJHX1ZFUkJPU0UoQSxTLi4uKSB7aWYgKERCR19GTEFHUyhBKSAmIERCR19WRVJCT1NFX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtEQkdfUFJJTlQoIiVzOlZFUkJPU0U6JXMgIixEQkdfTkFNRShBKSwgX19mdW5jX18pO0RCR19QUklOVEMoUyk7fX0KKworI2RlZmluZSBEQkdfUlgoQSxTLi4uKSAgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1JYX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtEQkdfUFJJTlQoUyk7fX0KKworI2RlZmluZSBEQkdfUlhfRU5URVIoQSkgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1JYX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EQkdfRU5URVIoQSk7fQorCisjZGVmaW5lIERCR19SWF9MRUFWRShBKSAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfUlhfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RCR19MRUFWRShBKTt9CisKKyNkZWZpbmUgREJHX1RYKEEsUy4uLikgICAgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19UWF9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7REJHX1BSSU5UKFMpO319CisKKyNkZWZpbmUgREJHX1RYX0VOVEVSKEEpICAgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19UWF9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfREJHX0VOVEVSKEEpO30KKworI2RlZmluZSBEQkdfVFhfTEVBVkUoQSkgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1RYX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EQkdfTEVBVkUoQSk7fQorCisjZGVmaW5lIERCR19BU1NFUlQoQykgICAgICAge2lmICghKEMpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtEQkdfUFJJTlQoIkFTU0VSVCglcykgLS0gJXMjJWQgKCVzKVxuIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0MsX19GSUxFX18sX19MSU5FX18sX19mdW5jX18pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR19UUkFQO319CisjZGVmaW5lIFNUQVRJQworCit0eXBlZGVmIHN0cnVjdCB7CisJY2hhciAqZGJnTmFtZTsKKwlpbnQgZGJnTGV2ZWw7CisJdW5zaWduZWQgbG9uZyBkYmdGbGFnczsKK30gZGJnX2luZm9fdDsKKworI2Vsc2UgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisjZGVmaW5lIERCR19ERUZOCisjZGVmaW5lIERCR19UUkFQCisjZGVmaW5lIERCR19QUklOVChTLi4uKQorI2RlZmluZSBEQkdfRU5URVIoQSkKKyNkZWZpbmUgREJHX0xFQVZFKEEpCisjZGVmaW5lIERCR19QQVJBTShBLE4sRixTLi4uKQorI2RlZmluZSBEQkdfRVJST1IoQSxTLi4uKQorI2RlZmluZSBEQkdfV0FSTklORyhBLFMuLi4pCisjZGVmaW5lIERCR19OT1RJQ0UoQSxTLi4uKQorI2RlZmluZSBEQkdfVFJBQ0UoQSxTLi4uKQorI2RlZmluZSBEQkdfVkVSQk9TRShBLFMuLi4pCisjZGVmaW5lIERCR19SWChBLFMuLi4pCisjZGVmaW5lIERCR19SWF9FTlRFUihBKQorI2RlZmluZSBEQkdfUlhfTEVBVkUoQSkKKyNkZWZpbmUgREJHX1RYKEEsUy4uLikKKyNkZWZpbmUgREJHX1RYX0VOVEVSKEEpCisjZGVmaW5lIERCR19UWF9MRUFWRShBKQorI2RlZmluZSBEQkdfQVNTRVJUKEMpCisjZGVmaW5lIFNUQVRJQyBzdGF0aWMKKworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCit2b2lkIER1bXBUeFF1ZXVlQ29udGVudHMoaW50IGRiZ0x2bCwgc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgRHVtcERldmljZUJsb2NrKGludCBkYmdMdmwsIHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJICAgICB1bnNpZ25lZCBpbnQgQmxvY2spOwordm9pZCBEdW1wRGV2aWNlUmVnKGludCBkYmdMdmwsIHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKyNlbmRpZiAvKiBfX0VUMTMxWF9EQkdfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9kZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2Y2I3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2RlZnMuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfZGVmcy5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gdG8gYXNzaXN0IHdpdGggT1MKKyAqICAgICAgICAgICAgICAgICBjb21wYXRpYmlsaXR5CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMVhfREVGU19IX18KKyNkZWZpbmUgX19FVDEzMVhfREVGU19IX18KKworLyogUGFja2V0IGFuZCBoZWFkZXIgc2l6ZXMgKi8KKyNkZWZpbmUgTklDX01JTl9QQUNLRVRfU0laRQk2MAorI2RlZmluZSBOSUNfSEVBREVSX1NJWkUJCUVUSF9ITEVOCS8qIDE0ICovCisKKy8qIE11bHRpY2FzdCBsaXN0IHNpemUgKi8KKyNkZWZpbmUgTklDX01BWF9NQ0FTVF9MSVNUCTEyOAorCisvKiBTdXBwb3J0ZWQgRmlsdGVycyAqLworI2RlZmluZSBFVDEzMVhfUEFDS0VUX1RZUEVfRElSRUNURUQJCTB4MDAwMQorI2RlZmluZSBFVDEzMVhfUEFDS0VUX1RZUEVfTVVMVElDQVNUCQkweDAwMDIKKyNkZWZpbmUgRVQxMzFYX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVAkJMHgwMDA0CisjZGVmaW5lIEVUMTMxWF9QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUwkJMHgwMDA4CisjZGVmaW5lIEVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUCTB4MDAxMAorCisvKiBUeCBUaW1lb3V0ICovCisjZGVmaW5lIEVUMTMxWF9UWF9USU1FT1VUCSgxICogSFopCisjZGVmaW5lIE5JQ19TRU5EX0hBTkdfVEhSRVNIT0xECTAKKworLyogTVBfVENCIGZsYWdzICovCisjZGVmaW5lIGZNUF9ERVNUX01VTFRJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBmTVBfREVTVF9CUk9BRAkJCTB4MDAwMDAwMDIKKworLyogTVBfQURBUFRFUiBmbGFncyAqLworI2RlZmluZSBmTVBfQURBUFRFUl9SRUNWX0xPT0tBU0lERQkweDAwMDAwMDA0CisjZGVmaW5lIGZNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UJMHgwMDAwMDAwOAorI2RlZmluZSBmTVBfQURBUFRFUl9TRUNPTkRBUlkJCTB4MDAwMDAwMTAKKworLyogTVBfU0hBUkVEIGZsYWdzICovCisjZGVmaW5lIGZNUF9BREFQVEVSX1NIVVRET1dOCQkweDAwMTAwMDAwCisjZGVmaW5lIGZNUF9BREFQVEVSX0xPV0VSX1BPV0VSCQkweDAwMjAwMDAwCisKKyNkZWZpbmUgZk1QX0FEQVBURVJfTk9OX1JFQ09WRVJfRVJST1IJMHgwMDgwMDAwMAorI2RlZmluZSBmTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUwkweDAxMDAwMDAwCisjZGVmaW5lIGZNUF9BREFQVEVSX05PX0NBQkxFCQkweDAyMDAwMDAwCisjZGVmaW5lIGZNUF9BREFQVEVSX0hBUkRXQVJFX0VSUk9SCTB4MDQwMDAwMDAKKyNkZWZpbmUgZk1QX0FEQVBURVJfUkVNT1ZFX0lOX1BST0dSRVNTCTB4MDgwMDAwMDAKKyNkZWZpbmUgZk1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUwkweDEwMDAwMDAwCisjZGVmaW5lIGZNUF9BREFQVEVSX0xJTktfREVURUNUSU9OCTB4MjAwMDAwMDAKKworI2RlZmluZSBmTVBfQURBUFRFUl9GQUlMX1NFTkRfTUFTSwkweDNmZjAwMDAwCisjZGVmaW5lIGZNUF9BREFQVEVSX05PVF9SRUFEWV9NQVNLCTB4M2ZmMDAwMDAKKworLyogU29tZSBvZmZzZXRzIGluIFBDSSBjb25maWcgc3BhY2UgdGhhdCBhcmUgYWN0dWFsbHkgdXNlZC4gKi8KKyNkZWZpbmUgRVQxMzEwX1BDSV9QTV9DQVBBQklMSVRZCTB4NDAKKyNkZWZpbmUgRVQxMzEwX1BDSV9QTV9DU1IJCTB4NDQKKyNkZWZpbmUgRVQxMzEwX1BDSV9NQVhfUFlMRAkJMHg0QworI2RlZmluZSBFVDEzMTBfUENJX0RFVl9DVFJMCQkweDUwCisjZGVmaW5lIEVUMTMxMF9QQ0lfREVWX1NUQVQJCTB4NTIKKyNkZWZpbmUgRVQxMzEwX05NSV9ESVNBQkxFCQkweDYxCisjZGVmaW5lIEVUMTMxMF9QQ0lfTUFDX0FERFJFU1MJCTB4QTQKKyNkZWZpbmUgRVQxMzEwX1BDSV9FRVBST01fU1RBVFVTCTB4QjIKKyNkZWZpbmUgRVQxMzEwX1BDSV9QSFlfSU5ERVhfUkVHCTB4QjQKKyNkZWZpbmUgRVQxMzEwX1BDSV9BQ0tfTkFDSwkJMHhDMAorI2RlZmluZSBFVDEzMTBfUENJX1JFUExBWQkJMHhDMgorI2RlZmluZSBFVDEzMTBfUENJX0wwTDFMQVRFTkNZCQkweENGCisjZGVmaW5lIEVUMTMxMF9QQ0lfU0VMX1BIWV9DVFJMCQkweEU0CisjZGVmaW5lIEVUMTMxMF9QQ0lfQURWQU5DRURfRVJSCQkweDEwMAorCisvKiBQQ0kgVmVuZG9yL1Byb2R1Y3QgSURzICovCisjZGVmaW5lIEVUMTMxWF9QQ0lfVkVORE9SX0lECQkweDExQzEJLy8gQWdlcmUgU3lzdGVtcworI2RlZmluZSBFVDEzMVhfUENJX0RFVklDRV9JRF9HSUcJMHhFRDAwCS8vIEVUMTMxMCAxMDAwIEJhc2UtVAorI2RlZmluZSBFVDEzMVhfUENJX0RFVklDRV9JRF9GQVNUCTB4RUQwMQkvLyBFVDEzMTAgMTAwICBCYXNlLVQKKworLyogRGVmaW5lIG9yZGVyIG9mIG1hZ25pdHVkZSBjb252ZXJ0ZXIgKi8KKyNkZWZpbmUgTkFOT19JTl9BX01JQ1JPCTEwMDAKKworI2VuZGlmIC8qIF9fRVQxMzFYX0RFRlNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pbml0cGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pbml0cGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM2ZjE3MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2luaXRwY2kuYwpAQCAtMCwwICsxLDEwNDYgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X2luaXRwY2kuYyAtIFJvdXRpbmVzIGFuZCBkYXRhIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIGRyaXZlciB3aXRoIHRoZQorICogICAgICAgICAgICAgICAgICAgIFBDSSAoYW5kIFBDSSBFeHByZXNzKSBzdWJzeXN0ZW0sIGFzIHdlbGwgYXMgYmFzaWMgZHJpdmVyCisgKiAgICAgICAgICAgICAgICAgICAgaW5pdCBhbmQgc3RhcnR1cC4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfbmV0ZGV2LmgiCisjaW5jbHVkZSAiZXQxMzF4X2NvbmZpZy5oIgorI2luY2x1ZGUgImV0MTMxeF9pc3IuaCIKKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisjaW5jbHVkZSAiZXQxMzEwX3R4LmgiCisjaW5jbHVkZSAiZXQxMzEwX3J4LmgiCisjaW5jbHVkZSAiZXQxMzEwX21hYy5oIgorI2luY2x1ZGUgImV0MTMxMF9lZXByb20uaCIKKworCitpbnQgX19kZXZpbml0IGV0MTMxeF9wY2lfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7Cit2b2lkIF9fZGV2ZXhpdCBldDEzMXhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisKKworLyogTW9kaW5mbyBwYXJhbWV0ZXJzIChmaWxsZWQgb3V0IHVzaW5nIGRlZmluZXMgZnJvbSBldDEzMXhfdmVyc2lvbi5oKSAqLworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfSU5GTyk7CitNT0RVTEVfTElDRU5TRShEUklWRVJfTElDRU5TRSk7CisKKy8qIE1vZHVsZSBQYXJhbWV0ZXJzIGFuZCByZWxhdGVkIGRhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworc3RhdGljIHUzMiBldDEzMXhfZGVidWdfbGV2ZWwgPSBEQkdfTFZMOworc3RhdGljIHUzMiBldDEzMXhfZGVidWdfZmxhZ3MgPSBEQkdfREVGQVVMVFM7CisKKy8qCitldDEzMXhfZGVidWdfbGV2ZWwgOgorIExldmVsIG9mIGRlYnVnZ2luZyBkZXNpcmVkICgwLTcpCisgICA3IDogREJHX1JYX09OIHwgREJHX1RYX09OCisgICA2IDogREJHX1BBUkFNX09OCisgICA1IDogREJHX1ZFUkJPU0VfT04KKyAgIDQgOiBEQkdfVFJBQ0VfT04KKyAgIDMgOiBEQkdfTk9USUNFX09OCisgICAyIDogbm8gZGVidWcgaW5mbworICAgMSA6IG5vIGRlYnVnIGluZm8KKyAgIDAgOiBubyBkZWJ1ZyBpbmZvCisqLworCittb2R1bGVfcGFyYW0oZXQxMzF4X2RlYnVnX2xldmVsLCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbShldDEzMXhfZGVidWdfZmxhZ3MsIHVpbnQsIDApOworCitNT0RVTEVfUEFSTV9ERVNDKGV0MTMxeF9kZWJ1Z19sZXZlbCwgIkxldmVsIG9mIGRlYnVnZ2luZyBkZXNpcmVkICgwLTcpIik7CisKK3N0YXRpYyBkYmdfaW5mb190IGV0MTMxeF9pbmZvID0geyBEUklWRVJfTkFNRV9FWFQsIDAsIDAgfTsKK2RiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvID0gJmV0MTMxeF9pbmZvOworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGV0MTMxeF9wY2lfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworCXtFVDEzMVhfUENJX1ZFTkRPUl9JRCwgRVQxMzFYX1BDSV9ERVZJQ0VfSURfR0lHLCBQQ0lfQU5ZX0lELAorCSBQQ0lfQU5ZX0lELCAwLCAwLCAwVUx9LAorCXtFVDEzMVhfUENJX1ZFTkRPUl9JRCwgRVQxMzFYX1BDSV9ERVZJQ0VfSURfRkFTVCwgUENJX0FOWV9JRCwKKwkgUENJX0FOWV9JRCwgMCwgMCwgMFVMfSwKKwl7MCx9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZXQxMzF4X3BjaV90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBldDEzMXhfZHJpdmVyID0geworICAgICAgLm5hbWUJPSBEUklWRVJfTkFNRSwKKyAgICAgIC5pZF90YWJsZQk9IGV0MTMxeF9wY2lfdGFibGUsCisgICAgICAucHJvYmUJPSBldDEzMXhfcGNpX3NldHVwLAorICAgICAgLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGV0MTMxeF9wY2lfcmVtb3ZlKSwKKyAgICAgIC5zdXNwZW5kCT0gTlVMTCwJCS8vZXQxMzF4X3BjaV9zdXNwZW5kLAorICAgICAgLnJlc3VtZQk9IE5VTEwsCQkvL2V0MTMxeF9wY2lfcmVzdW1lLAorfTsKKworCisvKioKKyAqIGV0MTMxeF9pbml0X21vZHVsZSAtIFRoZSAibWFpbiIgZW50cnkgcG9pbnQgY2FsbGVkIG9uIGRyaXZlciBpbml0aWFsaXphdGlvbgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBldDEzMXhfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworCS8qIFNldCB0aGUgbGV2ZWwgb2YgZGVidWcgbWVzc2FnZXMgZGlzcGxheWVkIHVzaW5nIHRoZSBtb2R1bGUKKwkgKiBwYXJhbWV0ZXIKKwkgKi8KKwlldDEzMXhfZGJnaW5mby0+ZGJnRmxhZ3MgPSBldDEzMXhfZGVidWdfZmxhZ3M7CisKKwlzd2l0Y2ggKGV0MTMxeF9kZWJ1Z19sZXZlbCkgeworCWNhc2UgNzoKKwkJZXQxMzF4X2RiZ2luZm8tPmRiZ0ZsYWdzIHw9IChEQkdfUlhfT04gfCBEQkdfVFhfT04pOworCisJY2FzZSA2OgorCQlldDEzMXhfZGJnaW5mby0+ZGJnRmxhZ3MgfD0gREJHX1BBUkFNX09OOworCisJY2FzZSA1OgorCQlldDEzMXhfZGJnaW5mby0+ZGJnRmxhZ3MgfD0gREJHX1ZFUkJPU0VfT047CisKKwljYXNlIDQ6CisJCWV0MTMxeF9kYmdpbmZvLT5kYmdGbGFncyB8PSBEQkdfVFJBQ0VfT047CisKKwljYXNlIDM6CisJCWV0MTMxeF9kYmdpbmZvLT5kYmdGbGFncyB8PSBEQkdfTk9USUNFX09OOworCisJY2FzZSAyOgorCWNhc2UgMToKKwljYXNlIDA6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisJREJHX1BSSU5UKCIlc1xuIiwgRFJJVkVSX0lORk8pOworCisJcmVzdWx0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZXQxMzF4X2RyaXZlcik7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZXQxMzF4X2NsZWFudXBfbW9kdWxlIC0gVGhlIGVudHJ5IHBvaW50IGNhbGxlZCBvbiBkcml2ZXIgY2xlYW51cAorICovCit2b2lkIGV0MTMxeF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmV0MTMxeF9kcml2ZXIpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoKKyAqIFRoZXNlIG1hY3JvcyBtYXAgdGhlIGRyaXZlci1zcGVjaWZpYyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpCisgKiByb3V0aW5lcyBzbyB0aGV5IGNhbiBiZSBjYWxsZWQgYnkgdGhlIGtlcm5lbC4KKyAqLworbW9kdWxlX2luaXQoZXQxMzF4X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGV0MTMxeF9jbGVhbnVwX21vZHVsZSk7CisKKworLyoqCisgKiBldDEzMXhfZmluZF9hZGFwdGVyIC0gRmluZCB0aGUgYWRhcHRlciBhbmQgZ2V0IGFsbCB0aGUgYXNzaWduZWQgcmVzb3VyY2VzCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBldDEzMXhfZmluZF9hZGFwdGVyKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IHJlc3VsdDsKKwl1aW50OF90IGVlcHJvbVN0YXQ7CisJdWludDhfdCBtYXhQYXlsb2FkID0gMDsKKwl1aW50OF90IHJlYWRfc2l6ZV9yZWc7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogQWxsb3cgZGlzYWJsaW5nIG9mIE5vbi1NYXNrYWJsZSBJbnRlcnJ1cHRzIGluIEkvTyBzcGFjZSwgdG8KKwkgKiBzdXBwb3J0IHZhbGlkYXRpb24uCisJICovCisJaWYgKGFkYXB0ZXItPlJlZ2lzdHJ5Tk1JRGlzYWJsZSkgeworCQl1aW50OF90IFJlZ2lzdGVyVmFsOworCisJCVJlZ2lzdGVyVmFsID0gaW5iKEVUMTMxMF9OTUlfRElTQUJMRSk7CisJCVJlZ2lzdGVyVmFsICY9IDB4ZjM7CisKKwkJaWYgKGFkYXB0ZXItPlJlZ2lzdHJ5Tk1JRGlzYWJsZSA9PSAyKSB7CisJCQlSZWdpc3RlclZhbCB8PSAweGM7CisJCX0KKworCQlvdXRiKEVUMTMxMF9OTUlfRElTQUJMRSwgUmVnaXN0ZXJWYWwpOworCX0KKworCS8qIFdlIGZpcnN0IG5lZWQgdG8gY2hlY2sgdGhlIEVFUFJPTSBTdGF0dXMgY29kZSBsb2NhdGVkIGF0IG9mZnNldAorCSAqIDB4QjIgb2YgY29uZmlnIHNwYWNlCisJICovCisJcmVzdWx0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgRVQxMzEwX1BDSV9FRVBST01fU1RBVFVTLAorCQkJCSAgICAgICZlZXByb21TdGF0KTsKKworCS8qIFRISVMgSVMgQSBXT1JLQVJPVU5EOgorIAkgKiBJIG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHR3aWNlIHRvIGdldCBteSBjYXJkIGluIGEKKwkgKiBMRyBNMSBFeHByZXNzIER1YWwgcnVubmluZy4gSSB0cmllZCBhbHNvIGEgbXNsZWVwIGJlZm9yZSB0aGlzCisJICogZnVuY3Rpb24sIGJlY2F1c2UgSSB0aG91Z3RoIHRoZXJlIGNvdWxkIGJlIHNvbWUgdGltZSBjb25kaWRpb25zCisJICogYnV0IGl0IGRpZG4ndCB3b3JrLiBDYWxsIHRoZSB3aG9sZSBmdW5jdGlvbiB0d2ljZSBhbHNvIHdvcmsuCisJICovCisJcmVzdWx0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgRVQxMzEwX1BDSV9FRVBST01fU1RBVFVTLAorCQkJCSAgICAgICZlZXByb21TdGF0KTsKKwlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJDb3VsZCBub3QgcmVhZCBQQ0kgY29uZmlnIHNwYWNlIGZvciAiCisJCQkgICJFRVBST00gU3RhdHVzXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogRGV0ZXJtaW5lIGlmIHRoZSBlcnJvcihzKSB3ZSBjYXJlIGFib3V0IGFyZSBwcmVzZW50LiAgSWYgdGhleSBhcmUKKwkgKiBwcmVzZW50LCB3ZSBuZWVkIHRvIGZhaWwuCisJICovCisJaWYgKGVlcHJvbVN0YXQgJiAweDRDKSB7CisJCXJlc3VsdCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwKKwkJCQkJICAgICAgJmFkYXB0ZXItPlJldmlzaW9uSUQpOworCQlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgIkNvdWxkIG5vdCByZWFkIFBDSSBjb25maWcgc3BhY2UgZm9yICIKKwkJCQkgICJSZXZpc2lvbiBJRFxuIik7CisJCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQkJcmV0dXJuIC1FSU87CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+UmV2aXNpb25JRCA9PSAweDAxKSB7CisJCQlpbnQzMl90IG5Mb29wOworCQkJdWludDhfdCB1Y1RlbXBbNF0gPSB7IDB4RkUsIDB4MTMsIDB4MTAsIDB4RkYgfTsKKworCQkJLyogUmUtd3JpdGUgdGhlIGZpcnN0IDQgYnl0ZXMgaWYgd2UgaGF2ZSBhbiBlZXByb20KKwkJCSAqIHByZXNlbnQgYW5kIHRoZSByZXZpc2lvbiBpZCBpcyAxLCB0aGlzIGZpeGVzIHRoZQorCQkJICogY29ycnVwdGlvbiBzZWVuIHdpdGggMTMxMCBCIFNpbGljb24KKwkJCSAqLworCQkJZm9yIChuTG9vcCA9IDA7IG5Mb29wIDwgMzsgbkxvb3ArKykgeworCQkJCUVlcHJvbVdyaXRlQnl0ZShhZGFwdGVyLCBuTG9vcCwgdWNUZW1wW25Mb29wXSwKKwkJCQkJCTAsIFNJTkdMRV9CWVRFKTsKKwkJCX0KKwkJfQorCisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkZhdGFsIEVFUFJPTSBTdGF0dXMgRXJyb3IgLSAweCUwNHhcbiIsIGVlcHJvbVN0YXQpOworCisJCS8qIFRoaXMgZXJyb3IgY291bGQgbWVhbiB0aGF0IHRoZXJlIHdhcyBhbiBlcnJvciByZWFkaW5nIHRoZQorCQkgKiBlZXByb20gb3IgdGhhdCB0aGUgZWVwcm9tIGRvZXNuJ3QgZXhpc3QuICBXZSB3aWxsIHRyZWF0CisJCSAqIGVhY2ggY2FzZSB0aGUgc2FtZSBhbmQgbm90IHRyeSB0byBnYXRoZXIgYWRkaXRpb25hbAorCQkgKiBpbmZvcm1hdGlvbiB0aGF0IG5vcm1hbGx5IHdvdWxkIGNvbWUgZnJvbSB0aGUgZWVwcm9tLCBsaWtlCisJCSAqIE1BQyBBZGRyZXNzCisJCSAqLworCQlhZGFwdGVyLT5iRWVwcm9tUHJlc2VudCA9IGZhbHNlOworCisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRUlPOworCX0gZWxzZSB7CisJCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywgIkVFUFJPTSBTdGF0dXMgQ29kZSAtIDB4JTA0eFxuIiwKKwkJCSAgZWVwcm9tU3RhdCk7CisJCWFkYXB0ZXItPmJFZXByb21QcmVzZW50ID0gdHJ1ZTsKKwl9CisKKwkvKiBSZWFkIHRoZSBFRVBST00gZm9yIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBMRUQgYmVoYXZpb3IuIFJlZmVyIHRvCisJICogRVQxMzEwX3BoeS5jLCBldDEzMXhfeGN2cl9pbml0KCksIGZvciBpdHMgdXNlLgorCSAqLworCUVlcHJvbVJlYWRCeXRlKGFkYXB0ZXIsIDB4NzAsICZhZGFwdGVyLT5lZXByb21EYXRhWzBdLCAwLCBTSU5HTEVfQllURSk7CisJRWVwcm9tUmVhZEJ5dGUoYWRhcHRlciwgMHg3MSwgJmFkYXB0ZXItPmVlcHJvbURhdGFbMV0sIDAsIFNJTkdMRV9CWVRFKTsKKworCWlmIChhZGFwdGVyLT5lZXByb21EYXRhWzBdICE9IDB4Y2QpIHsKKwkJYWRhcHRlci0+ZWVwcm9tRGF0YVsxXSA9IDB4MDA7CS8vIERpc2FibGUgYWxsIG9wdGlvbmFsIGZlYXR1cmVzCisJfQorCisJLyogTGV0J3Mgc2V0IHVwIHRoZSBQT1JUIExPR0lDIFJlZ2lzdGVyLiAgRmlyc3Qgd2UgbmVlZCB0byBrbm93IHdoYXQKKwkgKiB0aGUgbWF4X3BheWxvYWRfc2l6ZSBpcworCSAqLworCXJlc3VsdCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEVUMTMxMF9QQ0lfTUFYX1BZTEQsICZtYXhQYXlsb2FkKTsKKwlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJDb3VsZCBub3QgcmVhZCBQQ0kgY29uZmlnIHNwYWNlIGZvciAiCisJCQkgICJNYXggUGF5bG9hZCBTaXplXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogUHJvZ3JhbSB0aGUgQWNrL05hayBsYXRlbmN5IGFuZCByZXBsYXkgdGltZXJzICovCisJbWF4UGF5bG9hZCAmPSAweDA3OwkvLyBPbmx5IHRoZSBsb3dlciAzIGJpdHMgYXJlIHZhbGlkCisKKwlpZiAobWF4UGF5bG9hZCA8IDIpIHsKKwkJY29uc3QgdWludDE2X3QgQWNrTmFrWzJdID0geyAweDc2LCAweEQwIH07CisJCWNvbnN0IHVpbnQxNl90IFJlcGxheVsyXSA9IHsgMHgxRTAsIDB4MkVEIH07CisKKwkJcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIEVUMTMxMF9QQ0lfQUNLX05BQ0ssCisJCQkJCSAgICAgICBBY2tOYWtbbWF4UGF5bG9hZF0pOworCQlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgIkNvdWxkIG5vdCB3cml0ZSBQQ0kgY29uZmlnIHNwYWNlICIKKwkJCQkgICJmb3IgQUNLL05BS1xuIik7CisJCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlyZXN1bHQgPSBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgRVQxMzEwX1BDSV9SRVBMQVksCisJCQkJCSAgICAgICBSZXBsYXlbbWF4UGF5bG9hZF0pOworCQlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgIkNvdWxkIG5vdCB3cml0ZSBQQ0kgY29uZmlnIHNwYWNlICIKKwkJCQkgICJmb3IgUmVwbGF5IFRpbWVyXG4iKTsKKwkJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCS8qIGwwcyBhbmQgbDEgbGF0ZW5jeSB0aW1lcnMuICBXZSBhcmUgdXNpbmcgZGVmYXVsdCB2YWx1ZXMuCisJICogUmVwcmVzZW50aW5nIDAwMSBmb3IgTDBzIGFuZCAwMTAgZm9yIEwxCisJICovCisJcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIEVUMTMxMF9QQ0lfTDBMMUxBVEVOQ1ksIDB4MTEpOworCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNvdWxkIG5vdCB3cml0ZSBQQ0kgY29uZmlnIHNwYWNlIGZvciAiCisJCQkgICJMYXRlbmN5IFRpbWVyc1xuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIENoYW5nZSB0aGUgbWF4IHJlYWQgc2l6ZSB0byAyayAqLworCXJlc3VsdCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NTEsICZyZWFkX3NpemVfcmVnKTsKKwlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDb3VsZCBub3QgcmVhZCBQQ0kgY29uZmlnIHNwYWNlIGZvciBNYXggcmVhZCBzaXplXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmVhZF9zaXplX3JlZyAmPSAweDhmOworCXJlYWRfc2l6ZV9yZWcgfD0gMHg0MDsKKworCXJlc3VsdCA9IHBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDUxLCByZWFkX3NpemVfcmVnKTsKKwlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDb3VsZCBub3Qgd3JpdGUgUENJIGNvbmZpZyBzcGFjZSBmb3IgTWF4IHJlYWQgc2l6ZVxuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFBDSSBFeHByZXNzIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIDB4NDgtMHg1QiAoRGV2aWNlIENvbnRyb2wpICovCisJcmVzdWx0ID0gcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgRVQxMzEwX1BDSV9ERVZfQ1RSTCwKKwkJCQkgICAgICAmYWRhcHRlci0+UGNpWERldkN0bCk7CisJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ291bGQgbm90IHJlYWQgUENJIGNvbmZpZyBzcGFjZSBmb3IgUENJIEV4cHJlc3MgRGV2IEN0bFxuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIEdldCBNQUMgYWRkcmVzcyBmcm9tIGNvbmZpZyBzcGFjZSBpZiBhbiBlZXByb20gZXhpc3RzLCBvdGhlcndpc2UKKwkgKiB0aGUgTUFDIGFkZHJlc3MgdGhlcmUgd2lsbCBub3QgYmUgdmFsaWQKKwkgKi8KKwlpZiAoYWRhcHRlci0+YkVlcHJvbVByZXNlbnQpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspIHsKKwkJCXJlc3VsdCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKAorCQkJCQlwZGV2LCBFVDEzMTBfUENJX01BQ19BRERSRVNTICsgaSwKKwkJCQkJYWRhcHRlci0+UGVybWFuZW50QWRkcmVzcyArIGkpOworCQkJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJCSAgIkNvdWxkIG5vdCByZWFkIFBDSSBjb25maWcgc3BhY2UgZm9yIE1BQyBhZGRyZXNzXG4iKTsKKwkJCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBldDEzMXhfZXJyb3JfdGltZXJfaGFuZGxlcgorICogQGRhdGE6IHRpbWVyLXNwZWNpZmljIHZhcmlhYmxlOyBoZXJlIGEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBUaGUgcm91dGluZSBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgdGltZXIgZXhwaXJlcywgdG8gdHJhY2sgdGhlIG51bWJlciBvZgorICogcmVjdXJyaW5nIGVycm9ycy4KKyAqLwordm9pZCBldDEzMXhfZXJyb3JfdGltZXJfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciA9IChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKikgZGF0YTsKKwlQTV9DU1JfdCBwbV9jc3I7CisKKwlwbV9jc3IudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5wbV9jc3IudmFsdWUpOworCisJaWYgKHBtX2Nzci5iaXRzLnBtX3BoeV9zd19jb21hID09IDApIHsKKwkJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeU1BQ1N0YXQpIHsKKwkJCVVwZGF0ZU1hY1N0YXRIb3N0Q291bnRlcnMocEFkYXB0ZXIpOworCQl9CisJfSBlbHNlIHsKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgIk5vIGludGVycnVwdHMsIGluIFBIWSBjb21hLCBwbV9jc3IgPSAweCV4XG4iLAorCQkJICAgIHBtX2Nzci52YWx1ZSk7CisJfQorCisJaWYgKCFwQWRhcHRlci0+Qm1zci5iaXRzLmxpbmtfc3RhdHVzICYmCisJICAgIHBBZGFwdGVyLT5SZWdpc3RyeVBoeUNvbWEgJiYKKwkgICAgcEFkYXB0ZXItPlBvTWdtdC5UcmFuc1BoeUNvbWFNb2RlT25Cb290IDwgMTEpIHsKKwkJcEFkYXB0ZXItPlBvTWdtdC5UcmFuc1BoeUNvbWFNb2RlT25Cb290Kys7CisJfQorCisJaWYgKHBBZGFwdGVyLT5Qb01nbXQuVHJhbnNQaHlDb21hTW9kZU9uQm9vdCA9PSAxMCkgeworCQlpZiAoIXBBZGFwdGVyLT5CbXNyLmJpdHMubGlua19zdGF0dXMKKwkJICAgICYmIHBBZGFwdGVyLT5SZWdpc3RyeVBoeUNvbWEpIHsKKwkJCWlmIChwbV9jc3IuYml0cy5wbV9waHlfc3dfY29tYSA9PSAwKSB7CisJCQkJLy8gTk9URSAtIFRoaXMgd2FzIG9yaWdpbmFsbHkgYSAnc3luYyB3aXRoIGludGVycnVwdCcuIEhvdworCQkJCS8vICAgICAgICB0byBkbyB0aGF0IHVuZGVyIExpbnV4PworCQkJCWV0MTMxeF9lbmFibGVfaW50ZXJydXB0cyhwQWRhcHRlcik7CisJCQkJRW5hYmxlUGh5Q29tYShwQWRhcHRlcik7CisJCQl9CisJCX0KKwl9CisKKwkvKiBUaGlzIGlzIGEgcGVyaW9kaWMgdGltZXIsIHNvIHJlc2NoZWR1bGUgKi8KKwltb2RfdGltZXIoJnBBZGFwdGVyLT5FcnJvclRpbWVyLCBqaWZmaWVzICsKKwkJICBUWF9FUlJPUl9QRVJJT0QgKiBIWiAvIDEwMDApOworfQorCisvKioKKyAqIGV0MTMxeF9saW5rX2RldGVjdGlvbl9oYW5kbGVyCisgKgorICogVGltZXIgZnVuY3Rpb24gZm9yIGxpbmsgdXAgYXQgZHJpdmVyIGxvYWQgdGltZQorICovCit2b2lkIGV0MTMxeF9saW5rX2RldGVjdGlvbl9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyID0gKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqKSBkYXRhOworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCisJLyogTGV0IGV2ZXJ5b25lIGtub3cgdGhhdCB3ZSBoYXZlIHJ1biAqLworCXBBZGFwdGVyLT5iTGlua1RpbWVyQWN0aXZlID0gZmFsc2U7CisKKwlpZiAocEFkYXB0ZXItPk1lZGlhU3RhdGUgPT0gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPkxvY2ssIGxvY2tmbGFncyk7CisKKwkJcEFkYXB0ZXItPk1lZGlhU3RhdGUgPSBORVRJRl9TVEFUVVNfTUVESUFfRElTQ09OTkVDVDsKKwkJTVBfQ0xFQVJfRkxBRyhwQWRhcHRlciwgZk1QX0FEQVBURVJfTElOS19ERVRFQ1RJT04pOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5Mb2NrLCBsb2NrZmxhZ3MpOworCisJCW5ldGlmX2NhcnJpZXJfb2ZmKHBBZGFwdGVyLT5uZXRkZXYpOworCisJCXBBZGFwdGVyLT5iU2V0UGVuZGluZyA9IGZhbHNlOworCX0KK30KKworLyoqCisgKiBldDEzMXhfYWRhcHRlcl9zZXR1cCAtIFNldCB0aGUgYWRhcHRlciB1cCBhcyBwZXIgY2Fzc2luaSsgZG9jdW1lbnRhdGlvbgorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgZXQxMzF4X2FkYXB0ZXJfc2V0dXAoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBDb25maWd1cmUgdGhlIEpBR0NvcmUgKi8KKwlDb25maWdHbG9iYWxSZWdzKHBBZGFwdGVyKTsKKworCUNvbmZpZ01BQ1JlZ3MxKHBBZGFwdGVyKTsKKwlDb25maWdNTUNSZWdzKHBBZGFwdGVyKTsKKworCUNvbmZpZ1J4TWFjUmVncyhwQWRhcHRlcik7CisJQ29uZmlnVHhNYWNSZWdzKHBBZGFwdGVyKTsKKworCUNvbmZpZ1J4RG1hUmVncyhwQWRhcHRlcik7CisJQ29uZmlnVHhEbWFSZWdzKHBBZGFwdGVyKTsKKworCUNvbmZpZ01hY1N0YXRSZWdzKHBBZGFwdGVyKTsKKworCS8qIE1vdmUgdGhlIGZvbGxvd2luZyBjb2RlIHRvIFRpbWVyIGZ1bmN0aW9uPz8gKi8KKwlzdGF0dXMgPSBldDEzMXhfeGN2cl9maW5kKHBBZGFwdGVyKTsKKworCWlmIChzdGF0dXMgIT0gMCkgeworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywgIkNvdWxkIG5vdCBmaW5kIHRoZSB4Y3ZyXG4iKTsKKwl9CisKKwkvKiBQcmVwYXJlIHRoZSBUUlVFUEhZIGxpYnJhcnkuICovCisJRVQxMzEwX1BoeUluaXQocEFkYXB0ZXIpOworCisJLyogUmVzZXQgdGhlIHBoeSBub3cgc28gY2hhbmdlcyB0YWtlIHBsYWNlICovCisJRVQxMzEwX1BoeVJlc2V0KHBBZGFwdGVyKTsKKworCS8qIFBvd2VyIGRvd24gUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMSk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gdHVybiBvZmYgMTAwMCBiYXNlIGhhbGYgZHVscGxleCwgdGhlIG1hYyBkb2VzIG5vdAorCSAqIHN1cHBvcnQgaXQuIEZvciB0aGUgMTAvMTAwIHBhcnQsIHR1cm4gb2ZmIGFsbCBnaWcgYWR2ZXJ0aXNlbWVudAorCSAqLworCWlmIChwQWRhcHRlci0+RGV2aWNlSUQgIT0gRVQxMzFYX1BDSV9ERVZJQ0VfSURfRkFTVCkgeworCQlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTCk7CisJfSBlbHNlIHsKKwkJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCX0KKworCS8qIFBvd2VyIHVwIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDApOworCisJZXQxMzF4X3NldHBoeV9ub3JtYWwocEFkYXB0ZXIpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGV0MTMxeF9zZXR1cF9oYXJkd2FyZV9wcm9wZXJ0aWVzIC0gc2V0IHVwIHRoZSBNQUMgQWRkcmVzcyBvbiB0aGUgRVQxMzEwCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIGV0MTMxeF9zZXR1cF9oYXJkd2FyZV9wcm9wZXJ0aWVzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogSWYgaGF2ZSBvdXIgZGVmYXVsdCBtYWMgZnJvbSByZWdpc3RyeSBhbmQgbm8gbWFjIGFkZHJlc3MgZnJvbQorCSAqIEVFUFJPTSB0aGVuIHdlIG5lZWQgdG8gZ2VuZXJhdGUgdGhlIGxhc3Qgb2N0ZXQgYW5kIHNldCBpdCBvbiB0aGUKKwkgKiBkZXZpY2UKKwkgKi8KKwlpZiAoIWFkYXB0ZXItPmJPdmVycmlkZUFkZHJlc3MpIHsKKwkJaWYgKGFkYXB0ZXItPlBlcm1hbmVudEFkZHJlc3NbMF0gPT0gMHgwMCAmJgorCQkgICAgYWRhcHRlci0+UGVybWFuZW50QWRkcmVzc1sxXSA9PSAweDAwICYmCisJCSAgICBhZGFwdGVyLT5QZXJtYW5lbnRBZGRyZXNzWzJdID09IDB4MDAgJiYKKwkJICAgIGFkYXB0ZXItPlBlcm1hbmVudEFkZHJlc3NbM10gPT0gMHgwMCAmJgorCQkgICAgYWRhcHRlci0+UGVybWFuZW50QWRkcmVzc1s0XSA9PSAweDAwICYmCisJCSAgICBhZGFwdGVyLT5QZXJtYW5lbnRBZGRyZXNzWzVdID09IDB4MDApIHsKKwkJCS8qCisJCQkgKiBXZSBuZWVkIHRvIHJhbmRvbWx5IGdlbmVyYXRlIHRoZSBsYXN0IG9jdGV0IHNvIHdlCisJCQkgKiBkZWNyZWFzZSBvdXIgY2hhbmNlcyBvZiBzZXR0aW5nIHRoZSBtYWMgYWRkcmVzcyB0bworCQkJICogc2FtZSBhcyBhbm90aGVyIG9uZSBvZiBvdXIgY2FyZHMgaW4gdGhlIHN5c3RlbQorCQkJICovCisJCQlnZXRfcmFuZG9tX2J5dGVzKCZhZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s1XSwgMSk7CisKKwkJCS8qCisJCQkgKiBXZSBoYXZlIHRoZSBkZWZhdWx0IHZhbHVlIGluIHRoZSByZWdpc3RlciB3ZSBhcmUKKwkJCSAqIHdvcmtpbmcgd2l0aCBzbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIGN1cnJlbnQKKwkJCSAqIGFkZHJlc3MgaW50byB0aGUgcGVybWFuZW50IGFkZHJlc3MKKwkJCSAqLworCQkJbWVtY3B5KGFkYXB0ZXItPlBlcm1hbmVudEFkZHJlc3MsCisJCQkgICAgICAgYWRhcHRlci0+Q3VycmVudEFkZHJlc3MsIEVUSF9BTEVOKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGRvIG5vdCBoYXZlIGFuIG92ZXJyaWRlIGFkZHJlc3MsIHNvIHNldCB0aGUKKwkJCSAqIGN1cnJlbnQgYWRkcmVzcyB0byB0aGUgcGVybWFuZW50IGFkZHJlc3MgYW5kIGFkZAorCQkJICogaXQgdG8gdGhlIGRldmljZQorCQkJICovCisJCQltZW1jcHkoYWRhcHRlci0+Q3VycmVudEFkZHJlc3MsCisJCQkgICAgICAgYWRhcHRlci0+UGVybWFuZW50QWRkcmVzcywgRVRIX0FMRU4pOworCQl9CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfc29mdF9yZXNldCAtIElzc3VlIGEgc29mdCByZXNldCB0byB0aGUgaGFyZHdhcmUsIGNvbXBsZXRlIGZvciBFVDEzMTAKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgZXQxMzF4X3NvZnRfcmVzZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBEaXNhYmxlIE1BQyBDb3JlICovCisJd3JpdGVsKDB4YzAwZjAwMDAsICZhZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWMuY2ZnMS52YWx1ZSk7CisKKwkvKiBTZXQgZXZlcnl0aGluZyB0byBhIHJlc2V0IHZhbHVlICovCisJd3JpdGVsKDB4N0YsICZhZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwuc3dfcmVzZXQudmFsdWUpOworCXdyaXRlbCgweDAwMGYwMDAwLCAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjLmNmZzEudmFsdWUpOworCXdyaXRlbCgweDAwMDAwMDAwLCAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjLmNmZzEudmFsdWUpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfYWxpZ25fYWxsb2NhdGVkX21lbW9yeSAtIEFsaWduIGFsbG9jYXRlZCBtZW1vcnkgb24gYSBnaXZlbiBib3VuZGFyeQorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKiBAcGh5c19hZGRyOiBwb2ludGVyIHRvIFBoeXNpY2FsIGFkZHJlc3MKKyAqIEBvZmZzZXQ6IHBvaW50ZXIgdG8gdGhlIG9mZnNldCB2YXJpYWJsZQorICogQG1hc2s6IGNvcnJlY3QgbWFzaworICovCit2b2lkIGV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICB1aW50NjRfdCAqcGh5c19hZGRyLAorCQkJCSAgIHVpbnQ2NF90ICpvZmZzZXQsIHVpbnQ2NF90IG1hc2spCit7CisJdWludDY0X3QgbmV3X2FkZHI7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJKm9mZnNldCA9IDA7CisKKwluZXdfYWRkciA9ICpwaHlzX2FkZHIgJiB+bWFzazsKKworCWlmIChuZXdfYWRkciAhPSAqcGh5c19hZGRyKSB7CisJCS8qIE1vdmUgdG8gbmV4dCBhbGlnbmVkIGJsb2NrICovCisJCW5ld19hZGRyICs9IG1hc2sgKyAxOworCQkvKiBSZXR1cm4gb2Zmc2V0IGZvciBhZGp1c3RpbmcgdmlydCBhZGRyICovCisJCSpvZmZzZXQgPSBuZXdfYWRkciAtICpwaHlzX2FkZHI7CisJCS8qIFJldHVybiBuZXcgcGh5c2ljYWwgYWRkcmVzcyAqLworCQkqcGh5c19hZGRyID0gbmV3X2FkZHI7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfYWRhcHRlcl9tZW1vcnlfYWxsb2MKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkuCisgKgorICogQWxsb2NhdGUgYWxsIHRoZSBtZW1vcnkgYmxvY2tzIGZvciBzZW5kLCByZWNlaXZlIGFuZCBvdGhlcnMuCisgKi8KK2ludCBldDEzMXhfYWRhcHRlcl9tZW1vcnlfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBzdGF0dXMgPSAwOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCWRvIHsKKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgVHggUmluZyAqLworCQlzdGF0dXMgPSBldDEzMXhfdHhfZG1hX21lbW9yeV9hbGxvYyhhZGFwdGVyKTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiZXQxMzF4X3R4X2RtYV9tZW1vcnlfYWxsb2MgRkFJTEVEXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogUmVjZWl2ZSBidWZmZXIgbWVtb3J5IGFsbG9jYXRpb24gKi8KKwkJc3RhdHVzID0gZXQxMzF4X3J4X2RtYV9tZW1vcnlfYWxsb2MoYWRhcHRlcik7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgImV0MTMxeF9yeF9kbWFfbWVtb3J5X2FsbG9jIEZBSUxFRFxuIik7CisJCQlldDEzMXhfdHhfZG1hX21lbW9yeV9mcmVlKGFkYXB0ZXIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBJbml0IHJlY2VpdmUgZGF0YSBzdHJ1Y3R1cmVzICovCisJCXN0YXR1cyA9IGV0MTMxeF9pbml0X3JlY3YoYWRhcHRlcik7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiZXQxMzF4X2luaXRfcmVjdiBGQUlMRURcbiIpOworCQkJZXQxMzF4X3R4X2RtYV9tZW1vcnlfZnJlZShhZGFwdGVyKTsKKwkJCWV0MTMxeF9yeF9kbWFfbWVtb3J5X2ZyZWUoYWRhcHRlcik7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKDApOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGV0MTMxeF9hZGFwdGVyX21lbW9yeV9mcmVlIC0gRnJlZSBhbGwgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdXNlIGJ5IFR4ICYgUngKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBGcmVlIERNQSBtZW1vcnkgKi8KKwlldDEzMXhfdHhfZG1hX21lbW9yeV9mcmVlKGFkYXB0ZXIpOworCWV0MTMxeF9yeF9kbWFfbWVtb3J5X2ZyZWUoYWRhcHRlcik7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF9wY2lfcmVtb3ZlCisgKiBAcGRldjogYSBwb2ludGVyIHRvIHRoZSBkZXZpY2UncyBwY2lfZGV2IHN0cnVjdHVyZQorICoKKyAqIFJlZ2lzdGVyZWQgaW4gdGhlIHBjaV9kcml2ZXIgc3RydWN0dXJlLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZQorICogUENJIHN1YnN5c3RlbSBkZXRlY3RzIHRoYXQgYSBQQ0kgZGV2aWNlIHdoaWNoIG1hdGNoZXMgdGhlIGluZm9ybWF0aW9uCisgKiBjb250YWluZWQgaW4gdGhlIHBjaV9kZXZpY2VfaWQgdGFibGUgaGFzIGJlZW4gcmVtb3ZlZC4KKyAqLwordm9pZCBfX2RldmV4aXQgZXQxMzF4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXI7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUmV0cmlldmUgdGhlIG5ldF9kZXZpY2UgcG9pbnRlciBmcm9tIHRoZSBwY2lfZGV2IHN0cnVjdCwgYXMgd2VsbAorCSAqIGFzIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0CisJICovCisJbmV0ZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qIFBlcmZvcm0gZGV2aWNlIGNsZWFudXAgKi8KKwl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWV0MTMxeF9hZGFwdGVyX21lbW9yeV9mcmVlKGFkYXB0ZXIpOworCWlvdW5tYXAoYWRhcHRlci0+Q1NSQWRkcmVzcyk7CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X3BjaV9zZXR1cCAtIFBlcmZvcm0gZGV2aWNlIGluaXRpYWxpemF0aW9uCisgKiBAcGRldjogYSBwb2ludGVyIHRvIHRoZSBkZXZpY2UncyBwY2lfZGV2IHN0cnVjdHVyZQorICogQGVudDogdGhpcyBkZXZpY2UncyBlbnRyeSBpbiB0aGUgcGNpX2RldmljZV9pZCB0YWJsZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKgorICogUmVnaXN0ZXJlZCBpbiB0aGUgcGNpX2RyaXZlciBzdHJ1Y3R1cmUsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlCisgKiBQQ0kgc3Vic3lzdGVtIGZpbmRzIGEgbmV3IFBDSSBkZXZpY2Ugd2hpY2ggbWF0Y2hlcyB0aGUgaW5mb3JtYXRpb24KKyAqIGNvbnRhaW5lZCBpbiB0aGUgcGNpX2RldmljZV9pZCB0YWJsZS4gVGhpcyByb3V0aW5lIGlzIHRoZSBlcXVpdmFsZW50IHRvCisgKiBhIGRldmljZSBpbnNlcnRpb24gcm91dGluZS4KKyAqLworaW50IF9fZGV2aW5pdCBldDEzMXhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IHBtX2NhcDsKKwlib29sIHBjaV91c2luZ19kYWM7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IE5VTEw7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBFbmFibGUgdGhlIGRldmljZSB2aWEgdGhlIFBDSSBzdWJzeXN0ZW0gKi8KKwlyZXN1bHQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAicGNpX2VuYWJsZV9kZXZpY2UoKSBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBQZXJmb3JtIHNvbWUgYmFzaWMgUENJIGNoZWNrcyAqLworCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKSAmIElPUkVTT1VSQ0VfTUVNKSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDYW4ndCBmaW5kIFBDSSBkZXZpY2UncyBiYXNlIGFkZHJlc3NcbiIpOworCQlyZXN1bHQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXN1bHQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSSVZFUl9OQU1FKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiQ2FuJ3QgZ2V0IFBDSSByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVycl9kaXNhYmxlOworCX0KKworCS8qIEVuYWJsZSBQQ0kgYnVzIG1hc3RlcmluZyAqLworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywgIlNldHRpbmcgUENJIEJ1cyBNYXN0ZXJpbmcuLi5cbiIpOworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJLyogUXVlcnkgUENJIGZvciBQb3dlciBNZ210IENhcGFiaWxpdGllcworCSAqCisJICogTk9URTogTm93IHJlYWRpbmcgUG93ZXJNZ210IGluIGFub3RoZXIgbG9jYXRpb247IGlzIHRoaXMgc3RpbGwKKwkgKiBuZWVkZWQ/CisJICovCisJcG1fY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1BNKTsKKwlpZiAocG1fY2FwID09IDApIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ2Fubm90IGZpbmQgUG93ZXIgTWFuYWdlbWVudCBjYXBhYmlsaXRpZXNcbiIpOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGVycl9yZWxlYXNlX3JlczsKKwl9CisKKwkvKiBDaGVjayB0aGUgRE1BIGFkZHJlc3Npbmcgc3VwcG9ydCBvZiB0aGlzIGRldmljZSAqLworCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCAweGZmZmZmZmZmZmZmZmZmZmZVTEwpKSB7CisJCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywgIjY0LWJpdCBETUEgYWRkcmVzc2luZyBzdXBwb3J0ZWRcbiIpOworCQlwY2lfdXNpbmdfZGFjID0gdHJ1ZTsKKworCQlyZXN1bHQgPQorCQkgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIDB4ZmZmZmZmZmZmZmZmZmZmZlVMTCk7CisJCWlmIChyZXN1bHQgIT0gMCkgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgIlVuYWJsZSB0byBvYnRhaW4gNjQgYml0IERNQSBmb3IgY29uc2lzdGVudCBhbGxvY2F0aW9uc1xuIik7CisJCQlnb3RvIGVycl9yZWxlYXNlX3JlczsKKwkJfQorCX0gZWxzZSBpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgMHhmZmZmZmZmZlVMTCkpIHsKKwkJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiNjQtYml0IERNQSBhZGRyZXNzaW5nIE5PVCBzdXBwb3J0ZWRcbiIpOworCQlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sCisJCQkgICIzMi1iaXQgRE1BIGFkZHJlc3Npbmcgd2lsbCBiZSB1c2VkXG4iKTsKKwkJcGNpX3VzaW5nX2RhYyA9IGZhbHNlOworCX0gZWxzZSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIk5vIHVzYWJsZSBETUEgYWRkcmVzc2luZyBtZXRob2RcbiIpOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGVycl9yZWxlYXNlX3JlczsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXRkZXYgYW5kIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3RzICovCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLAorCQkgICJBbGxvY2F0ZSBuZXRkZXYgYW5kIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3RzLi4uXG4iKTsKKwluZXRkZXYgPSBldDEzMXhfZGV2aWNlX2FsbG9jKCk7CisJaWYgKG5ldGRldiA9PSBOVUxMKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIkNvdWxkbid0IGFsbG9jIG5ldGRldiBzdHJ1Y3RcbiIpOworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWxlYXNlX3JlczsKKwl9CisKKwkvKiBTZXR1cCB0aGUgZnVuZGFtZW50YWwgbmV0X2RldmljZSBhbmQgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSBlbGVtZW50cyAgKi8KKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sICJTZXR0aW5nIGZ1bmRhbWVudGFsIG5ldF9kZXZpY2UgaW5mby4uLlxuIik7CisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmcGRldi0+ZGV2KTsKKwlpZiAocGNpX3VzaW5nX2RhYykgeworCQkvL25ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCX0KKworCS8qCisJICogTk9URSAtIFR1cm4gdGhpcyBvbiB3aGVuIHdlJ3JlIHJlYWR5IHRvIGRlYWwgd2l0aCBTRy1ETUEKKwkgKgorCSAqIE5PVEU6IEFjY29yZGluZyB0byAiTGludXggRGV2aWNlIERyaXZlcnMiLCAzcmQgZWQsIFJ1YmluaSBldCBhbCwKKwkgKiBpZiBjaGVja3N1bW1pbmcgaXMgbm90IHBlcmZvcm1lZCBpbiBIVywgdGhlbiB0aGUga2VybmVsIHdpbGwgbm90CisJICogdXNlIFNHLgorCSAqIEZyb20gcHAgNTEwLTUxMToKKwkgKgorCSAqICJOb3RlIHRoYXQgdGhlIGtlcm5lbCBkb2VzIG5vdCBwZXJmb3JtIHNjYXR0ZXIvZ2F0aGVyIEkvTyB0byB5b3VyCisJICogZGV2aWNlIGlmIGl0IGRvZXMgbm90IGFsc28gcHJvdmlkZSBzb21lIGZvcm0gb2YgY2hlY2tzdW1taW5nIGFzCisJICogd2VsbC4gVGhlIHJlYXNvbiBpcyB0aGF0LCBpZiB0aGUga2VybmVsIGhhcyB0byBtYWtlIGEgcGFzcyBvdmVyIGEKKwkgKiBmcmFnbWVudGVkICgibm9ubGluZWFyIikgcGFja2V0IHRvIGNhbGN1bGF0ZSB0aGUgY2hlY2tzdW0sIGl0CisJICogbWlnaHQgYXMgd2VsbCBjb3B5IHRoZSBkYXRhIGFuZCBjb2FsZXNjZSB0aGUgcGFja2V0IGF0IHRoZSBzYW1lCisJICogdGltZS4iCisJICoKKwkgKiBUaGlzIGhhcyBiZWVuIHZlcmlmaWVkIGJ5IHNldHRpbmcgdGhlIGZsYWdzIGJlbG93IGFuZCBzdGlsbCBub3QKKwkgKiByZWNlaXZpbmcgYSBzY2F0dGVyZWQgYnVmZmVyIGZyb20gdGhlIG5ldHdvcmsgc3RhY2ssIHNvIGxlYXZlIGl0CisJICogb2ZmIHVudGlsIGNoZWNrc3VtcyBhcmUgY2FsY3VsYXRlZCBpbiBIVy4KKwkgKi8KKwkvL25ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKKwkvL25ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9OT19DU1VNOworCS8vbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7CisKKwkvKiBBbGxvY2F0ZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0IGFuZCBjb3B5IGluIHJlbGV2YW50IGluZm9ybWF0aW9uICovCisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+cGRldiA9IHBkZXY7CisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPlZlbmRvcklEID0gcGRldi0+dmVuZG9yOworCWFkYXB0ZXItPkRldmljZUlEID0gcGRldi0+ZGV2aWNlOworCisJLyogRG8gdGhlIHNhbWUgZm9yIHRoZSBuZXRkZXYgc3RydWN0ICovCisJbmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnE7CisJbmV0ZGV2LT5iYXNlX2FkZHIgPSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKKworCS8qIEluaXRpYWxpemUgc3BpbmxvY2tzIGhlcmUgKi8KKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sICJJbml0aWFsaXplIHNwaW5sb2Nrcy4uLlxuIik7CisKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+TG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPlRDQlNlbmRRTG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPlRDQlJlYWR5UUxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5TZW5kSFdMb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+U2VuZFdhaXRMb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+UmN2TG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPlJjdlBlbmRMb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+RmJyTG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPlBIWUxvY2spOworCisJLyogUGFyc2UgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGludG8gdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3QgKi8KKwlldDEzMXhfY29uZmlnX3BhcnNlKGFkYXB0ZXIpOworCisJLyogRmluZCB0aGUgcGh5c2ljYWwgYWRhcHRlcgorCSAqCisJICogTk9URTogVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgTXBGaW5kQWRhcHRlcigpIHJvdXRpbmU7IGNhbiB3ZQorCSAqICAgICAgIGx1bXAgaXQncyBpbml0IHdpdGggdGhlIGRldmljZSBzcGVjaWZpYyBpbml0IGJlbG93IGludG8gYQorCSAqICAgICAgIHNpbmdsZSBpbml0IGZ1bmN0aW9uPworCSAqLworCS8vd2hpbGUgKGV0MTMxeF9maW5kX2FkYXB0ZXIoYWRhcHRlciwgcGRldikgIT0gMCk7CisJZXQxMzF4X2ZpbmRfYWRhcHRlcihhZGFwdGVyLCBwZGV2KTsKKworCS8qIE1hcCB0aGUgYnVzLXJlbGF0aXZlIHJlZ2lzdGVycyB0byBzeXN0ZW0gdmlydHVhbCBtZW1vcnkgKi8KKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sCisJCSAgIk1hcHBpbmcgYnVzLXJlbGF0aXZlIHJlZ2lzdGVycyB0byB2aXJ0dWFsIG1lbW9yeS4uLlxuIik7CisKKwlhZGFwdGVyLT5DU1JBZGRyZXNzID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwKKwkJCQkJICAgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CisJaWYgKGFkYXB0ZXItPkNTUkFkZHJlc3MgPT0gTlVMTCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJDYW5ub3QgbWFwIGRldmljZSByZWdpc3RlcnNcbiIpOworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2RldjsKKwl9CisKKwkvKiBQZXJmb3JtIGRldmljZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBoZXJlIChTZWUgY29kZSBiZWxvdykgKi8KKworCS8qIElmIFBoeSBDT01BIG1vZGUgd2FzIGVuYWJsZWQgd2hlbiB3ZSB3ZW50IGRvd24sIGRpc2FibGUgaXQgaGVyZS4gKi8KKwl7CisJCVBNX0NTUl90IEdsb2JhbFBtQ1NSID0geyAwIH07CisKKwkJR2xvYmFsUG1DU1IuYml0cy5wbV9zeXNjbGtfZ2F0ZSA9IDE7CisJCUdsb2JhbFBtQ1NSLmJpdHMucG1fdHhjbGtfZ2F0ZSA9IDE7CisJCUdsb2JhbFBtQ1NSLmJpdHMucG1fcnhjbGtfZ2F0ZSA9IDE7CisJCXdyaXRlbChHbG9iYWxQbUNTUi52YWx1ZSwKKwkJICAgICAgICZhZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKwl9CisKKwkvKiBJc3N1ZSBhIGdsb2JhbCByZXNldCB0byB0aGUgZXQxMzEwICovCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLCAiSXNzdWluZyBzb2Z0IHJlc2V0Li4uXG4iKTsKKwlldDEzMXhfc29mdF9yZXNldChhZGFwdGVyKTsKKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKHBhcmFub2lkKSAqLworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywgIkRpc2FibGUgZGV2aWNlIGludGVycnVwdHMuLi5cbiIpOworCWV0MTMxeF9kaXNhYmxlX2ludGVycnVwdHMoYWRhcHRlcik7CisKKwkvKiBBbGxvY2F0ZSBETUEgbWVtb3J5ICovCisJcmVzdWx0ID0gZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2FsbG9jKGFkYXB0ZXIpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDb3VsZCBub3QgYWxsb2MgYWRhcGF0ZXIgbWVtb3J5IChETUEpXG4iKTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwkvKiBJbml0IHNlbmQgZGF0YSBzdHJ1Y3R1cmVzICovCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLCAiSW5pdCBzZW5kIGRhdGEgc3RydWN0dXJlcy4uLlxuIik7CisJZXQxMzF4X2luaXRfc2VuZChhZGFwdGVyKTsKKworCWFkYXB0ZXItPlBvTWdtdC5Qb3dlclN0YXRlID0gTmRpc0RldmljZVN0YXRlRDA7CisKKwkvKiBSZWdpc3RlciB0aGUgaW50ZXJydXB0CisJICoKKwkgKiBOT1RFIC0gVGhpcyBpcyBiZWluZyBkb25lIGluIHRoZSBvcGVuIHJvdXRpbmUsIHdoZXJlIG1vc3Qgb3RoZXIKKwkgKiAgICAgICAgIExpbnV4IGRyaXZlcnMgc2V0dXAgSVJRIGhhbmRsZXJzLiBNYWtlIHN1cmUgZGV2aWNlCisJICogICAgICAgICBpbnRlcnJ1cHRzIGFyZSBub3QgdHVybmVkIG9uIGJlZm9yZSB0aGUgSVJRIGlzIHJlZ2lzdGVyZWQhIQorCSAqCisJICogICAgICAgICBXaGF0IHdlIHdpbGwgZG8gaGVyZSBpcyBzZXR1cCB0aGUgdGFzayBzdHJ1Y3R1cmUgZm9yIHRoZQorCSAqICAgICAgICAgSVNSJ3MgZGVmZXJyZWQgaGFuZGxlcgorCSAqLworCUlOSVRfV09SSygmYWRhcHRlci0+dGFzaywgZXQxMzF4X2lzcl9oYW5kbGVyKTsKKworCS8qIERldGVybWluZSBNQUMgQWRkcmVzcywgYW5kIGNvcHkgaW50byB0aGUgbmV0X2RldmljZSBzdHJ1Y3QgKi8KKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sICJSZXRyaWV2ZSBNQUMgYWRkcmVzcy4uLlxuIik7CisJZXQxMzF4X3NldHVwX2hhcmR3YXJlX3Byb3BlcnRpZXMoYWRhcHRlcik7CisKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+Q3VycmVudEFkZHJlc3MsIEVUSF9BTEVOKTsKKworCS8qIFNldHVwIGV0MTMxMCBhcyBwZXIgdGhlIGRvY3VtZW50YXRpb24gKi8KKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sICJTZXR1cCB0aGUgYWRhcHRlci4uLlxuIik7CisJZXQxMzF4X2FkYXB0ZXJfc2V0dXAoYWRhcHRlcik7CisKKwkvKiBDcmVhdGUgYSB0aW1lciB0byBjb3VudCBlcnJvcnMgcmVjZWl2ZWQgYnkgdGhlIE5JQyAqLworCWluaXRfdGltZXIoJmFkYXB0ZXItPkVycm9yVGltZXIpOworCisJYWRhcHRlci0+RXJyb3JUaW1lci5leHBpcmVzID0gamlmZmllcyArIFRYX0VSUk9SX1BFUklPRCAqIEhaIC8gMTAwMDsKKwlhZGFwdGVyLT5FcnJvclRpbWVyLmZ1bmN0aW9uID0gZXQxMzF4X2Vycm9yX3RpbWVyX2hhbmRsZXI7CisJYWRhcHRlci0+RXJyb3JUaW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlcjsKKworCS8qIEluaXRpYWxpemUgbGluayBzdGF0ZSAqLworCWV0MTMxeF9saW5rX2RldGVjdGlvbl9oYW5kbGVyKCh1bnNpZ25lZCBsb25nKWFkYXB0ZXIpOworCisJLyogSW50aWFsaXplIHZhcmlhYmxlIGZvciBjb3VudGluZyBob3cgbG9uZyB3ZSBkbyBub3QgaGF2ZSBsaW5rIHN0YXR1cyAqLworCWFkYXB0ZXItPlBvTWdtdC5UcmFuc1BoeUNvbWFNb2RlT25Cb290ID0gMDsKKworCS8qIFdlIGNhbiBlbmFibGUgaW50ZXJydXB0cyBub3cKKwkgKgorCSAqICBOT1RFIC0gQmVjYXVzZSByZWdpc3RyYXRpb24gb2YgaW50ZXJydXB0IGhhbmRsZXIgaXMgZG9uZSBpbiB0aGUKKwkgKiAgICAgICAgIGRldmljZSdzIG9wZW4oKSwgZGVmZXIgZW5hYmxpbmcgZGV2aWNlIGludGVycnVwdHMgdG8gdGhhdAorCSAqICAgICAgICAgcG9pbnQKKwkgKi8KKworCS8qIFJlZ2lzdGVyIHRoZSBuZXRfZGV2aWNlIHN0cnVjdCB3aXRoIHRoZSBMaW51eCBuZXR3b3JrIGxheWVyICovCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLCAiUmVnaXN0ZXJpbmcgbmV0X2RldmljZS4uLlxuIik7CisJaWYgKChyZXN1bHQgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KSkgIT0gMCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJyZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9tZW1fZnJlZTsKKwl9CisKKwkvKiBSZWdpc3RlciB0aGUgbmV0X2RldmljZSBzdHJ1Y3Qgd2l0aCB0aGUgUENJIHN1YnN5c3RlbS4gU2F2ZSBhIGNvcHkKKwkgKiBvZiB0aGUgUENJIGNvbmZpZyBzcGFjZSBmb3IgdGhpcyBkZXZpY2Ugbm93IHRoYXQgdGhlIGRldmljZSBoYXMKKwkgKiBiZWVuIGluaXRpYWxpemVkLCBqdXN0IGluIGNhc2UgaXQgbmVlZHMgdG8gYmUgcXVpY2tseSByZXN0b3JlZC4KKwkgKi8KKwlwY2lfc2V0X2RydmRhdGEocGRldiwgbmV0ZGV2KTsKKworCXBjaV9zYXZlX3N0YXRlKGFkYXB0ZXItPnBkZXYpOworCitvdXQ6CisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gcmVzdWx0OworCitlcnJfbWVtX2ZyZWU6CisJZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2ZyZWUoYWRhcHRlcik7CitlcnJfaW91bm1hcDoKKwlpb3VubWFwKGFkYXB0ZXItPkNTUkFkZHJlc3MpOworZXJyX2ZyZWVfZGV2OgorCWZyZWVfbmV0ZGV2KG5ldGRldik7CitlcnJfcmVsZWFzZV9yZXM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycl9kaXNhYmxlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlnb3RvIG91dDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2luaXRwY2kuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2luaXRwY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmFjYjYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaW5pdHBjaS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X2luaXRwY2kuaCAtIEhlYWRlciB3aGljaCBpbmNsdWRlcyBjb21tb24gZGF0YSBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcworICogICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgdG8gdGhlIGRyaXZlcidzIFBDSSAoYW5kIFBDSSBFeHByZXNzKSBpbmZvcm1hdGlvbi4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxWF9JTklUUENJX0hfXworI2RlZmluZSBfX0VUMTMxWF9JTklUUENJX0hfXworCisvKiBGdW5jdGlvbiBQcm90b3R5cGVzICovCit2b2lkIGV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICB1NjQgKnBoeXNfYWRkciwKKwkJCQkgICB1NjQgKm9mZnNldCwgdTY0IG1hc2spOworCitpbnQgZXQxMzF4X2FkYXB0ZXJfc2V0dXAoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBldDEzMXhfYWRhcHRlcl9tZW1vcnlfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3NldHVwX2hhcmR3YXJlX3Byb3BlcnRpZXMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3NvZnRfcmVzZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworI2VuZGlmIC8qIF9fRVQxMzFYX0lOSVRQQ0lfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pc3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2lzci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYWZhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pc3IuYwpAQCAtMCwwICsxLDQ4OCBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfaXNyLmMgLSBGaWxlIHdoaWNoIGNvbnRhaW5zIHRoZSBJU1IsIElTUiBoYW5kbGVyLCBhbmQgcmVsYXRlZCByb3V0aW5lcworICogICAgICAgICAgICAgICAgZm9yIHByb2Nlc3NpbmcgaW50ZXJydXB0cyBmcm9tIHRoZSBkZXZpY2UuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJldDEzMXhfdmVyc2lvbi5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWJ1Zy5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlICJldDEzMTBfcGh5LmgiCisjaW5jbHVkZSAiZXQxMzEwX3BtLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKyNpbmNsdWRlICJldDEzMTBfbWFjLmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorCisvKiBEYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKK2V4dGVybiBkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbzsKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKy8qKgorICogZXQxMzF4X2lzciAtIFRoZSBJbnRlcnJ1cHQgU2VydmljZSBSb3V0aW5lIGZvciB0aGUgZHJpdmVyLgorICogQGlycTogdGhlIElSUSBvbiB3aGljaCB0aGUgaW50ZXJydXB0IHdhcyByZWNlaXZlZC4KKyAqIEBkZXZfaWQ6IGRldmljZS1zcGVjaWZpYyBpbmZvIChoZXJlIGEgcG9pbnRlciB0byBhIG5ldF9kZXZpY2Ugc3RydWN0KQorICoKKyAqIFJldHVybnMgYSB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSBpbnRlcnJ1cHQgd2FzIGhhbmRsZWQuCisgKi8KK2lycXJldHVybl90IGV0MTMxeF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWJvb2wgaGFuZGxlZCA9IHRydWU7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMOworCUlOVEVSUlVQVF90IHN0YXR1czsKKworCWlmIChuZXRkZXYgPT0gTlVMTCB8fCAhbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0ZGV2KSkgeworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCSAgICAiTm8gbmV0X2RldmljZSBzdHJ1Y3Qgb3IgZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJaGFuZGxlZCA9IGZhbHNlOworCQlnb3RvIG91dDsKKwl9CisKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qIElmIHRoZSBhZGFwdGVyIGlzIGluIGxvdyBwb3dlciBzdGF0ZSwgdGhlbiBpdCBzaG91bGQgbm90CisJICogcmVjb2duaXplIGFueSBpbnRlcnJ1cHQKKwkgKi8KKworCS8qIERpc2FibGUgRGV2aWNlIEludGVycnVwdHMgKi8KKwlldDEzMXhfZGlzYWJsZV9pbnRlcnJ1cHRzKGFkYXB0ZXIpOworCisJLyogR2V0IGEgY29weSBvZiB0aGUgdmFsdWUgaW4gdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIKKwkgKiBzbyB3ZSBjYW4gcHJvY2VzcyB0aGUgaW50ZXJydXB0aW5nIHNlY3Rpb24KKwkgKi8KKwlzdGF0dXMudmFsdWUgPSByZWFkbCgmYWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLmludF9zdGF0dXMudmFsdWUpOworCisJaWYgKGFkYXB0ZXItPkZsb3dDb250cm9sID09IFR4T25seSB8fAorCSAgICBhZGFwdGVyLT5GbG93Q29udHJvbCA9PSBCb3RoKSB7CisJCXN0YXR1cy52YWx1ZSAmPSB+SU5UX01BU0tfRU5BQkxFOworCX0gZWxzZSB7CisJCXN0YXR1cy52YWx1ZSAmPSB+SU5UX01BU0tfRU5BQkxFX05PX0ZMT1c7CisJfQorCisJLyogTWFrZSBzdXJlIHRoaXMgaXMgb3VyIGludGVycnVwdCAqLworCWlmICghc3RhdHVzLnZhbHVlKSB7CisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworCQlhZGFwdGVyLT5TdGF0cy5VbmhhbmRsZWRJbnRlcnJ1cHRzUGVyU2VjKys7CisjZW5kaWYKKwkJaGFuZGxlZCA9IGZhbHNlOworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIk5PVCBPVVIgSU5URVJSVVBUXG4iKTsKKwkJZXQxMzF4X2VuYWJsZV9pbnRlcnJ1cHRzKGFkYXB0ZXIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBUaGlzIGlzIG91ciBpbnRlcnJ1cHQsIHNvIHByb2Nlc3MgYWNjb3JkaW5nbHkgKi8KKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCisJaWYgKHN0YXR1cy5iaXRzLnJ4ZG1hX3hmcl9kb25lKSB7CisJCWFkYXB0ZXItPlN0YXRzLlJ4RG1hSW50ZXJydXB0c1BlclNlYysrOworCX0KKworCWlmIChzdGF0dXMuYml0cy50eGRtYV9pc3IpIHsKKwkJYWRhcHRlci0+U3RhdHMuVHhEbWFJbnRlcnJ1cHRzUGVyU2VjKys7CisJfQorI2VuZGlmCisKKwlpZiAoc3RhdHVzLmJpdHMud2F0Y2hkb2dfaW50ZXJydXB0KSB7CisJCVBNUF9UQ0IgcE1wVGNiID0gYWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZDsKKworCQlpZiAocE1wVGNiKSB7CisJCQlpZiAoKytwTXBUY2ItPlBhY2tldFN0YWxlQ291bnQgPiAxKSB7CisJCQkJc3RhdHVzLmJpdHMudHhkbWFfaXNyID0gMTsKKwkJCX0KKwkJfQorCisJCWlmIChhZGFwdGVyLT5SeFJpbmcuVW5maW5pc2hlZFJlY2VpdmVzKSB7CisJCQlzdGF0dXMuYml0cy5yeGRtYV94ZnJfZG9uZSA9IDE7CisJCX0gZWxzZSBpZiAocE1wVGNiID09IE5VTEwpIHsKKwkJCXdyaXRlbCgwLCAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLndhdGNoZG9nX3RpbWVyKTsKKwkJfQorCisJCXN0YXR1cy5iaXRzLndhdGNoZG9nX2ludGVycnVwdCA9IDA7CisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworCQlhZGFwdGVyLT5TdGF0cy5XYXRjaERvZ0ludGVycnVwdHNQZXJTZWMrKzsKKyNlbmRpZgorCX0KKworCWlmIChzdGF0dXMudmFsdWUgPT0gMCkgeworCQkvKiBUaGlzIGludGVycnVwdCBoYXMgaW4gc29tZSB3YXkgYmVlbiAiaGFuZGxlZCIgYnkKKwkJICogdGhlIElTUi4gRWl0aGVyIGl0IHdhcyBhIHNwdXJpb3VzIFJ4IGludGVycnVwdCwgb3IKKwkJICogaXQgd2FzIGEgVHggaW50ZXJydXB0IHRoYXQgaGFzIGJlZW4gZmlsdGVyZWQgYnkKKwkJICogdGhlIElTUi4KKwkJICovCisJCWV0MTMxeF9lbmFibGVfaW50ZXJydXB0cyhhZGFwdGVyKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogV2UgbmVlZCB0byBzYXZlIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHZhbHVlIGZvciB1c2UgaW4gb3VyCisJICogRFBDLiBXZSB3aWxsIGNsZWFyIHRoZSBzb2Z0d2FyZSBjb3B5IG9mIHRoYXQgaW4gdGhhdAorCSAqIHJvdXRpbmUuCisJICovCisJYWRhcHRlci0+U3RhdHMuSW50ZXJydXB0U3RhdHVzID0gc3RhdHVzOworCisJLyogU2NoZWR1bGUgdGhlIElTUiBoYW5kbGVyIGFzIGEgYm90dG9tLWhhbGYgdGFzayBpbiB0aGUKKwkgKiBrZXJuZWwncyB0cV9pbW1lZGlhdGUgcXVldWUsIGFuZCBtYXJrIHRoZSBxdWV1ZSBmb3IKKwkgKiBleGVjdXRpb24KKwkgKi8KKwlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT50YXNrKTsKKworb3V0OgorCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQorCisvKioKKyAqIGV0MTMxeF9pc3JfaGFuZGxlciAtIFRoZSBJU1IgaGFuZGxlcgorICogQHBfYWRhcHRlciwgYSBwb2ludGVyIHRvIHRoZSBkZXZpY2UncyBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogc2NoZWR1bGVkIHRvIHJ1biBpbiBhIGRlZmVycmVkIGNvbnRleHQgYnkgdGhlIElTUi4gVGhpcyBpcyB3aGVyZSB0aGUgSVNSJ3MKKyAqIHdvcmsgYWN0dWFsbHkgZ2V0cyBkb25lLgorICovCit2b2lkIGV0MTMxeF9pc3JfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIsIHRhc2spOworCUlOVEVSUlVQVF90IEdsb2JTdGF0dXMgPSBwQWRhcHRlci0+U3RhdHMuSW50ZXJydXB0U3RhdHVzOworCUFERFJFU1NfTUFQX3QgX19pb21lbSAqaW9tZW0gPSBwQWRhcHRlci0+Q1NSQWRkcmVzczsKKworCS8qCisJICogVGhlc2UgZmlyc3QgdHdvIGFyZSBieSBmYXIgdGhlIG1vc3QgY29tbW9uLiAgT25jZSBoYW5kbGVkLCB3ZSBjbGVhcgorCSAqIHRoZWlyIHR3byBiaXRzIGluIHRoZSBzdGF0dXMgd29yZC4gIElmIHRoZSB3b3JkIGlzIG5vdyB6ZXJvLCB3ZQorCSAqIGV4aXQuCisJICovCisJLyogSGFuZGxlIGFsbCB0aGUgY29tcGxldGVkIFRyYW5zbWl0IGludGVycnVwdHMgKi8KKwlpZiAoR2xvYlN0YXR1cy5iaXRzLnR4ZG1hX2lzcikgeworCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sICJUWERNQV9JU1IgaW50ZXJydXB0XG4iKTsKKwkJZXQxMzF4X2hhbmRsZV9zZW5kX2ludGVycnVwdChwQWRhcHRlcik7CisJfQorCisJLyogSGFuZGxlIGFsbCB0aGUgY29tcGxldGVkIFJlY2VpdmVzIGludGVycnVwdHMgKi8KKwlpZiAoR2xvYlN0YXR1cy5iaXRzLnJ4ZG1hX3hmcl9kb25lKSB7CisJCURCR19SWChldDEzMXhfZGJnaW5mbywgIlJYRE1BX1hGUl9ET05FIGludGVycnVwdFxuIik7CisJCWV0MTMxeF9oYW5kbGVfcmVjdl9pbnRlcnJ1cHQocEFkYXB0ZXIpOworCX0KKworCUdsb2JTdGF0dXMudmFsdWUgJj0gMHhmZmZmZmZkNzsKKworCWlmIChHbG9iU3RhdHVzLnZhbHVlKSB7CisJCS8qIEhhbmRsZSB0aGUgVFhETUEgRXJyb3IgaW50ZXJydXB0ICovCisJCWlmIChHbG9iU3RhdHVzLmJpdHMudHhkbWFfZXJyKSB7CisJCQlUWERNQV9FUlJPUl90IFR4RG1hRXJyOworCisJCQkvKiBGb2xsb3dpbmcgcmVhZCBhbHNvIGNsZWFycyB0aGUgcmVnaXN0ZXIgKENPUikgKi8KKwkJCVR4RG1hRXJyLnZhbHVlID0gcmVhZGwoJmlvbWVtLT50eGRtYS5UeERtYUVycm9yLnZhbHVlKTsKKworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJUWERNQV9FUlIgaW50ZXJydXB0LCBlcnJvciA9ICVkXG4iLAorCQkJCSAgICBUeERtYUVyci52YWx1ZSk7CisJCX0KKworCQkvKiBIYW5kbGUgRnJlZSBCdWZmZXIgUmluZyAwIGFuZCAxIExvdyBpbnRlcnJ1cHQgKi8KKwkJaWYgKEdsb2JTdGF0dXMuYml0cy5yeGRtYV9mYl9yaW5nMF9sb3cgfHwKKwkJICAgIEdsb2JTdGF0dXMuYml0cy5yeGRtYV9mYl9yaW5nMV9sb3cpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHVudXNlZCBidWZmZXJzIGluCisJCQkgKiBSWERNQSBmcmVlIGJ1ZmZlciByaW5nIDAgaXMgPD0gdGhlIGxpbWl0IHlvdQorCQkJICogcHJvZ3JhbW1lZC4gRnJlZSBidWZmZXIgcmVzb3VyY2VzIG5lZWQgdG8gYmUKKwkJCSAqIHJldHVybmVkLiAgRnJlZSBidWZmZXJzIGFyZSBjb25zdW1lZCBhcyBwYWNrZXRzCisJCQkgKiBhcmUgcGFzc2VkIGZyb20gdGhlIG5ldHdvcmsgdG8gdGhlIGhvc3QuIFRoZSBob3N0CisJCQkgKiBiZWNvbWVzIGF3YXJlIG9mIHRoZSBwYWNrZXRzIGZyb20gdGhlIGNvbnRlbnRzIG9mCisJCQkgKiB0aGUgcGFja2V0IHN0YXR1cyByaW5nLiBUaGlzIHJpbmcgaXMgcXVlcmllZCB3aGVuCisJCQkgKiB0aGUgcGFja2V0IGRvbmUgaW50ZXJydXB0IG9jY3Vycy4gUGFja2V0cyBhcmUgdGhlbgorCQkJICogcGFzc2VkIHRvIHRoZSBPUy4gV2hlbiB0aGUgT1MgaXMgZG9uZSB3aXRoIHRoZQorCQkJICogcGFja2V0cyB0aGUgcmVzb3VyY2VzIGNhbiBiZSByZXR1cm5lZCB0byB0aGUKKwkJCSAqIEVUMTMxMCBmb3IgcmUtdXNlLiBUaGlzIGludGVycnVwdCBpcyBvbmUgbWV0aG9kIG9mCisJCQkgKiByZXR1cm5pbmcgcmVzb3VyY2VzLgorCQkJICovCisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIlJYRE1BX0ZCX1JJTkcwX0xPVyBvciAiCisJCQkJICAgICJSWERNQV9GQl9SSU5HMV9MT1cgaW50ZXJydXB0XG4iKTsKKworCQkJLyogSWYgdGhlIHVzZXIgaGFzIGZsb3cgY29udHJvbCBvbiwgdGhlbiB3ZSB3aWxsCisJCQkgKiBzZW5kIGEgcGF1c2UgcGFja2V0LCBvdGhlcndpc2UganVzdCBleGl0CisJCQkgKi8KKwkJCWlmIChwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPT0gVHhPbmx5IHx8CisJCQkgICAgcEFkYXB0ZXItPkZsb3dDb250cm9sID09IEJvdGgpIHsKKwkJCQlQTV9DU1JfdCBwbV9jc3I7CisKKwkJCQkvKiBUZWxsIHRoZSBkZXZpY2UgdG8gc2VuZCBhIHBhdXNlIHBhY2tldCB2aWEKKwkJCQkgKiB0aGUgYmFjayBwcmVzc3VyZSByZWdpc3RlcgorCQkJCSAqLworCQkJCXBtX2Nzci52YWx1ZSA9IHJlYWRsKCZpb21lbS0+Z2xvYmFsLnBtX2Nzci52YWx1ZSk7CisJCQkJaWYgKHBtX2Nzci5iaXRzLnBtX3BoeV9zd19jb21hID09IDApIHsKKwkJCQkJVFhNQUNfQlBfQ1RSTF90IGJwX2N0cmwgPSB7IDAgfTsKKworCQkJCQlicF9jdHJsLmJpdHMuYnBfcmVxID0gMTsKKwkJCQkJYnBfY3RybC5iaXRzLmJwX3hvbnhvZmYgPSAxOworCQkJCQl3cml0ZWwoYnBfY3RybC52YWx1ZSwKKwkJCQkJICAgICAgICZpb21lbS0+dHhtYWMuYnBfY3RybC52YWx1ZSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogSGFuZGxlIFBhY2tldCBTdGF0dXMgUmluZyBMb3cgSW50ZXJydXB0ICovCisJCWlmIChHbG9iU3RhdHVzLmJpdHMucnhkbWFfcGt0X3N0YXRfcmluZ19sb3cpIHsKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiUlhETUFfUEtUX1NUQVRfUklOR19MT1cgaW50ZXJydXB0XG4iKTsKKworCQkJLyoKKwkJCSAqIFNhbWUgaWRlYSBhcyB3aXRoIHRoZSB0d28gRnJlZSBCdWZmZXIgUmluZ3MuCisJCQkgKiBQYWNrZXRzIGdvaW5nIGZyb20gdGhlIG5ldHdvcmsgdG8gdGhlIGhvc3QgZWFjaAorCQkJICogY29uc3VtZSBhIGZyZWUgYnVmZmVyIHJlc291cmNlIGFuZCBhIHBhY2tldCBzdGF0dXMKKwkJCSAqIHJlc291cmNlLiAgVGhlc2UgcmVzb3VyZXMgYXJlIHBhc3NlZCB0byB0aGUgT1MuCisJCQkgKiBXaGVuIHRoZSBPUyBpcyBkb25lIHdpdGggdGhlIHJlc291cmNlcywgdGhleSBuZWVkCisJCQkgKiB0byBiZSByZXR1cm5lZCB0byB0aGUgRVQxMzEwLiBUaGlzIGlzIG9uZSBtZXRob2QKKwkJCSAqIG9mIHJldHVybmluZyB0aGUgcmVzb3VyY2VzLgorCQkJICovCisJCX0KKworCQkvKiBIYW5kbGUgUlhETUEgRXJyb3IgSW50ZXJydXB0ICovCisJCWlmIChHbG9iU3RhdHVzLmJpdHMucnhkbWFfZXJyKSB7CisJCQkvKgorCQkJICogVGhlIHJ4ZG1hX2Vycm9yIGludGVycnVwdCBpcyBzZW50IHdoZW4gYSB0aW1lLW91dAorCQkJICogb24gYSByZXF1ZXN0IGlzc3VlZCBieSB0aGUgSkFHQ29yZSBoYXMgb2NjdXJyZWQgb3IKKwkJCSAqIGEgY29tcGxldGlvbiBpcyByZXR1cm5lZCB3aXRoIGFuIHVuLXN1Y2Nlc3NmdWwKKwkJCSAqIHN0YXR1cy4gIEluIGJvdGggY2FzZXMgdGhlIHJlcXVlc3QgaXMgY29uc2lkZXJlZAorCQkJICogY29tcGxldGUuIFRoZSBKQUdDb3JlIHdpbGwgYXV0b21hdGljYWxseSByZS10cnkgdGhlCisJCQkgKiByZXF1ZXN0IGluIHF1ZXN0aW9uLiBOb3JtYWxseSBpbmZvcm1hdGlvbiBvbiBldmVudHMKKwkJCSAqIGxpa2UgdGhlc2UgYXJlIHNlbnQgdG8gdGhlIGhvc3QgdXNpbmcgdGhlICJBZHZhbmNlZAorCQkJICogRXJyb3IgUmVwb3J0aW5nIiBjYXBhYmlsaXR5LiBUaGlzIGludGVycnVwdCBpcworCQkJICogYW5vdGhlciB3YXkgb2YgZ2V0dGluZyBzaW1pbGFyIGluZm9ybWF0aW9uLiBUaGUKKwkJCSAqIG9ubHkgdGhpbmcgcmVxdWlyZWQgaXMgdG8gY2xlYXIgdGhlIGludGVycnVwdCBieQorCQkJICogcmVhZGluZyB0aGUgSVNSIGluIHRoZSBnbG9iYWwgcmVzb3VyY2VzLiBUaGUKKwkJCSAqIEpBR0NvcmUgd2lsbCBkbyBhIHJlLXRyeSBvbiB0aGUgcmVxdWVzdC4gIE5vcm1hbGx5CisJCQkgKiB5b3Ugc2hvdWxkIG5ldmVyIHNlZSB0aGlzIGludGVycnVwdC4gSWYgeW91IHN0YXJ0CisJCQkgKiB0byBzZWUgdGhpcyBpbnRlcnJ1cHQgb2NjdXJyaW5nIGZyZXF1ZW50bHkgdGhlbgorCQkJICogc29tZXRoaW5nIGJhZCBoYXMgb2NjdXJyZWQuIEEgcmVzZXQgbWlnaHQgYmUgdGhlCisJCQkgKiB0aGluZyB0byBkby4KKwkJCSAqLworCQkJLy8gVFJBUCgpOworCisJCQlwQWRhcHRlci0+VHhNYWNUZXN0LnZhbHVlID0KKwkJCQlyZWFkbCgmaW9tZW0tPnR4bWFjLnR4X3Rlc3QudmFsdWUpOworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJSeERNQV9FUlIgaW50ZXJydXB0LCBlcnJvciAleFxuIiwKKwkJCQkgICAgcEFkYXB0ZXItPlR4TWFjVGVzdC52YWx1ZSk7CisJCX0KKworCQkvKiBIYW5kbGUgdGhlIFdha2Ugb24gTEFOIEV2ZW50ICovCisJCWlmIChHbG9iU3RhdHVzLmJpdHMud2FrZV9vbl9sYW4pIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGEgc2Vjb25kYXJ5IGludGVycnVwdCBmb3Igd2FrZSBvbiBMQU4uCisJCQkgKiBUaGUgZHJpdmVyIHNob3VsZCBuZXZlciBzZWUgdGhpcywgaWYgaXQgZG9lcywKKwkJCSAqIHNvbWV0aGluZyBzZXJpb3VzIGlzIHdyb25nLiBXZSB3aWxsIFRSQVAgdGhlCisJCQkgKiBtZXNzYWdlIHdoZW4gd2UgYXJlIGluIERCRyBtb2RlLCBvdGhlcndpc2Ugd2UKKwkJCSAqIHdpbGwgaWdub3JlIGl0LgorCQkJICovCisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJXQUtFX09OX0xBTiBpbnRlcnJ1cHRcbiIpOworCQl9CisKKwkJLyogSGFuZGxlIHRoZSBQSFkgaW50ZXJydXB0ICovCisJCWlmIChHbG9iU3RhdHVzLmJpdHMucGh5X2ludGVycnVwdCkgeworCQkJUE1fQ1NSX3QgcG1fY3NyOworCQkJTUlfQk1TUl90IEJtc3JJbnRzLCBCbXNyRGF0YTsKKwkJCU1JX0lTUl90IG15SXNyOworCisJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlBIWSBpbnRlcnJ1cHRcbiIpOworCisJCQkvKiBJZiB3ZSBhcmUgaW4gY29tYSBtb2RlIHdoZW4gd2UgZ2V0IHRoaXMgaW50ZXJydXB0LAorCQkJICogd2UgbmVlZCB0byBkaXNhYmxlIGl0LgorCQkJICovCisJCQlwbV9jc3IudmFsdWUgPSByZWFkbCgmaW9tZW0tPmdsb2JhbC5wbV9jc3IudmFsdWUpOworCQkJaWYgKHBtX2Nzci5iaXRzLnBtX3BoeV9zd19jb21hID09IDEpIHsKKwkJCQkvKgorCQkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgaW4gY29tYSBtb2RlIGFuZCBpZgorCQkJCSAqIHNvLCBkaXNhYmxlIGl0IGJlY2F1c2Ugd2Ugd2lsbCBub3QgYmUgYWJsZQorCQkJCSAqIHRvIHJlYWQgUEhZIHZhbHVlcyB1bnRpbCB3ZSBhcmUgb3V0LgorCQkJCSAqLworCQkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkgICAgIkRldmljZSBpcyBpbiBDT01BIG1vZGUsICIKKwkJCQkJICAgICJuZWVkIHRvIHdha2UgdXBcbiIpOworCQkJCURpc2FibGVQaHlDb21hKHBBZGFwdGVyKTsKKwkJCX0KKworCQkJLyogUmVhZCB0aGUgUEhZIElTUiB0byBjbGVhciB0aGUgcmVhc29uIGZvciB0aGUKKwkJCSAqIGludGVycnVwdC4KKwkJCSAqLworCQkJTWlSZWFkKHBBZGFwdGVyLCAodWludDhfdCkgb2Zmc2V0b2YoTUlfUkVHU190LCBpc3IpLAorCQkJICAgICAgICZteUlzci52YWx1ZSk7CisKKwkJCWlmICghcEFkYXB0ZXItPlJlcGxpY2FQaHlMb29wYmspIHsKKwkJCQlNaVJlYWQocEFkYXB0ZXIsCisJCQkJICAgICAgICh1aW50OF90KSBvZmZzZXRvZihNSV9SRUdTX3QsIGJtc3IpLAorCQkJCSAgICAgICAmQm1zckRhdGEudmFsdWUpOworCisJCQkJQm1zckludHMudmFsdWUgPQorCQkJCSAgICBwQWRhcHRlci0+Qm1zci52YWx1ZSBeIEJtc3JEYXRhLnZhbHVlOworCQkJCXBBZGFwdGVyLT5CbXNyLnZhbHVlID0gQm1zckRhdGEudmFsdWU7CisKKwkJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJCQkJICAgICJCbXNyLnZhbHVlID0gMHglMDR4LCIKKwkJCQkJICAgICJCbXNyX2ludHMudmFsdWUgPSAweCUwNHhcbiIsCisJCQkJCSAgICBCbXNyRGF0YS52YWx1ZSwgQm1zckludHMudmFsdWUpOworCisJCQkJLyogRG8gYWxsIHRoZSBjYWJsZSBpbiAvIGNhYmxlIG91dCBzdHVmZiAqLworCQkJCWV0MTMxeF9NaWlfY2hlY2socEFkYXB0ZXIsIEJtc3JEYXRhLCBCbXNySW50cyk7CisJCQl9CisJCX0KKworCQkvKiBMZXQncyBtb3ZlIG9uIHRvIHRoZSBUeE1hYyAqLworCQlpZiAoR2xvYlN0YXR1cy5iaXRzLnR4bWFjX2ludGVycnVwdCkgeworCQkJcEFkYXB0ZXItPlR4UmluZy5UeE1hY0Vyci52YWx1ZSA9CisJCQkJcmVhZGwoJmlvbWVtLT50eG1hYy5lcnIudmFsdWUpOworCisJCQkvKgorCQkJICogV2hlbiBhbnkgb2YgdGhlIGVycm9ycyBvY2N1ciBhbmQgVFhNQUMgZ2VuZXJhdGVzCisJCQkgKiBhbiBpbnRlcnJ1cHQgdG8gcmVwb3J0IHRoZXNlIGVycm9ycywgaXQgdXN1YWxseQorCQkJICogbWVhbnMgdGhhdCBUWE1BQyBoYXMgZGV0ZWN0ZWQgYW4gZXJyb3IgaW4gdGhlIGRhdGEKKwkJCSAqIHN0cmVhbSByZXRyaWV2ZWQgZnJvbSB0aGUgb24tY2hpcCBUeCBRLiBBbGwgb2YKKwkJCSAqIHRoZXNlIGVycm9ycyBhcmUgY2F0YXN0cm9waGljIGFuZCBUWE1BQyB3b24ndCBiZQorCQkJICogYWJsZSB0byByZWNvdmVyIGRhdGEgd2hlbiB0aGVzZSBlcnJvcnMgb2NjdXIuICBJbgorCQkJICogYSBudXRzaGVsbCwgdGhlIHdob2xlIFR4IHBhdGggd2lsbCBoYXZlIHRvIGJlIHJlc2V0CisJCQkgKiBhbmQgcmUtY29uZmlndXJlZCBhZnRlcndhcmRzLgorCQkJICovCisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIlRYTUFDIGludGVycnVwdCwgZXJyb3IgMHglMDh4XG4iLAorCQkJCSAgICBwQWRhcHRlci0+VHhSaW5nLlR4TWFjRXJyLnZhbHVlKTsKKworCQkJLyogSWYgd2UgYXJlIGRlYnVnZ2luZywgd2Ugd2FudCB0byBzZWUgdGhpcyBlcnJvciwKKwkJCSAqIG90aGVyd2lzZSB3ZSBqdXN0IHdhbnQgdGhlIGRldmljZSB0byBiZSByZXNldCBhbmQKKwkJCSAqIGNvbnRpbnVlCisJCQkgKi8KKwkJCS8vREJHX1RSQVAoKTsKKwkJfQorCisJCS8qIEhhbmRsZSBSWE1BQyBJbnRlcnJ1cHQgKi8KKwkJaWYgKEdsb2JTdGF0dXMuYml0cy5yeG1hY19pbnRlcnJ1cHQpIHsKKwkJCS8qCisJCQkgKiBUaGVzZSBpbnRlcnJ1cHRzIGFyZSBjYXRhc3Ryb3BoaWMgdG8gdGhlIGRldmljZSwKKwkJCSAqIHdoYXQgd2UgbmVlZCB0byBkbyBpcyBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRzIGFuZAorCQkJICogc2V0IHRoZSBmbGFnIHRvIGNhdXNlIHVzIHRvIHJlc2V0IHNvIHdlIGNhbiBzb2x2ZQorCQkJICogdGhpcyBpc3N1ZS4KKwkJCSAqLworCQkJLy8gTVBfU0VUX0ZMQUcoIHBBZGFwdGVyLCBmTVBfQURBUFRFUl9IQVJEV0FSRV9FUlJPUiApOworCisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIlJYTUFDIGludGVycnVwdCwgZXJyb3IgMHglMDh4LiAgUmVxdWVzdGluZyByZXNldFxuIiwKKwkJCQkgICAgcmVhZGwoJmlvbWVtLT5yeG1hYy5lcnJfcmVnLnZhbHVlKSk7CisKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiRW5hYmxlIDB4JTA4eCwgRGlhZyAweCUwOHhcbiIsCisJCQkJICAgIHJlYWRsKCZpb21lbS0+cnhtYWMuY3RybC52YWx1ZSksCisJCQkJICAgIHJlYWRsKCZpb21lbS0+cnhtYWMucnhxX2RpYWcudmFsdWUpKTsKKworCQkJLyoKKwkJCSAqIElmIHdlIGFyZSBkZWJ1Z2dpbmcsIHdlIHdhbnQgdG8gc2VlIHRoaXMgZXJyb3IsCisJCQkgKiBvdGhlcndpc2Ugd2UganVzdCB3YW50IHRoZSBkZXZpY2UgdG8gYmUgcmVzZXQgYW5kCisJCQkgKiBjb250aW51ZQorCQkJICovCisJCQkvLyBUUkFQKCk7CisJCX0KKworCQkvKiBIYW5kbGUgTUFDX1NUQVQgSW50ZXJydXB0ICovCisJCWlmIChHbG9iU3RhdHVzLmJpdHMubWFjX3N0YXRfaW50ZXJydXB0KSB7CisJCQkvKgorCQkJICogVGhpcyBtZWFucyBhdCBsZWFzdCBvbmUgb2YgdGhlIHVuLW1hc2tlZCBjb3VudGVycworCQkJICogaW4gdGhlIE1BQ19TVEFUIGJsb2NrIGhhcyByb2xsZWQgb3Zlci4gIFVzZSB0aGlzCisJCQkgKiB0byBtYWludGFpbiB0aGUgdG9wLCBzb2Z0d2FyZSBtYW5hZ2VkIGJpdHMgb2YgdGhlCisJCQkgKiBjb3VudGVyKHMpLgorCQkJICovCisJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIk1BQ19TVEFUIGludGVycnVwdFxuIik7CisJCQlIYW5kbGVNYWNTdGF0SW50ZXJydXB0KHBBZGFwdGVyKTsKKwkJfQorCisJCS8qIEhhbmRsZSBTTFYgVGltZW91dCBJbnRlcnJ1cHQgKi8KKwkJaWYgKEdsb2JTdGF0dXMuYml0cy5zbHZfdGltZW91dCkgeworCQkJLyoKKwkJCSAqIFRoaXMgbWVhbnMgYSB0aW1lb3V0IGhhcyBvY2N1cmVkIG9uIGEgcmVhZCBvcgorCQkJICogd3JpdGUgcmVxdWVzdCB0byBvbmUgb2YgdGhlIEpBR0NvcmUgcmVnaXN0ZXJzLiBUaGUKKwkJCSAqIEdsb2JhbCBSZXNvdXJjZXMgYmxvY2sgaGFzIHRlcm1pbmF0ZWQgdGhlIHJlcXVlc3QKKwkJCSAqIGFuZCBvbiBhIHJlYWQgcmVxdWVzdCwgcmV0dXJuZWQgYSAiZmFrZSIgdmFsdWUuCisJCQkgKiBUaGUgbW9zdCBsaWtlbHkgcmVhc29ucyBhcmU6IEJhZCBBZGRyZXNzIG9yIHRoZQorCQkJICogYWRkcmVzc2VkIG1vZHVsZSBpcyBpbiBhIHBvd2VyLWRvd24gc3RhdGUgYW5kCisJCQkgKiBjYW4ndCByZXNwb25kLgorCQkJICovCisJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlNMVl9USU1FT1VUIGludGVycnVwdFxuIik7CisJCX0KKwl9CisKKwlpZiAocEFkYXB0ZXItPlBvTWdtdC5Qb3dlclN0YXRlID09IE5kaXNEZXZpY2VTdGF0ZUQwKSB7CisJCWV0MTMxeF9lbmFibGVfaW50ZXJydXB0cyhwQWRhcHRlcik7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pc3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmE1MWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMXhfaXNyLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvIHRoZQorICogICAgICAgICAgICAgICAgSVNSIHByb2Nlc3NpbmcgY29kZS4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxWF9JU1JfSF9fCisjZGVmaW5lIF9fRVQxMzFYX0lTUl9IX18KKworaXJxcmV0dXJuX3QgZXQxMzF4X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwordm9pZCBldDEzMXhfaXNyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworI2VuZGlmIC8qIF9fRVQxMzFYX0lTUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2NTk3MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5jCkBAIC0wLDAgKzEsODU2IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9uZXRkZXYuYyAtIFJvdXRpbmVzIGFuZCBkYXRhIHJlcXVpcmVkIGJ5IGFsbCBMaW51eCBuZXR3b3JrIGRldmljZXMuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJldDEzMXhfdmVyc2lvbi5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWJ1Zy5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlICJldDEzMTBfcGh5LmgiCisjaW5jbHVkZSAiZXQxMzEwX3BtLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKyNpbmNsdWRlICJldDEzMTBfbWFjLmgiCisjaW5jbHVkZSAiZXQxMzEwX3R4LmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9pc3IuaCIKKyNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgorCisvKiBEYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKK2V4dGVybiBkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbzsKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKK3N0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpldDEzMXhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitpbnQgZXQxMzF4X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitpbnQgZXQxMzF4X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworaW50IGV0MTMxeF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWZyZXEgKnJlcWJ1ZiwgaW50IGNtZCk7Cit2b2lkIGV0MTMxeF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitpbnQgZXQxMzF4X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwordm9pZCBldDEzMXhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2ludCBldDEzMXhfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSk7CitpbnQgZXQxMzF4X3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpuZXdfbWFjKTsKK3ZvaWQgZXQxMzF4X3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCk7Cit2b2lkIGV0MTMxeF92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDE2X3QgdmlkKTsKK3ZvaWQgZXQxMzF4X3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDE2X3QgdmlkKTsKKworLyoqCisgKiBldDEzMXhfZGV2aWNlX2FsbG9jCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIG5ldF9kZXZpY2Ugc3RydWN0IGZvcgorICogdGhpcyBkZXZpY2UuCisgKgorICogQ3JlYXRlIGluc3RhbmNlcyBvZiBuZXRfZGV2aWNlIGFuZCB3bF9wcml2YXRlIGZvciB0aGUgbmV3IGFkYXB0ZXIgYW5kCisgKiByZWdpc3RlciB0aGUgZGV2aWNlJ3MgZW50cnkgcG9pbnRzIGluIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IG5ldF9kZXZpY2UgKmV0MTMxeF9kZXZpY2VfYWxsb2Modm9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIEFsbG9jIG5ldF9kZXZpY2UgYW5kIGFkYXB0ZXIgc3RydWN0cyAqLworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIpKTsKKworCWlmIChuZXRkZXYgPT0gTlVMTCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJBbGxvYyBvZiBuZXRfZGV2aWNlIHN0cnVjdCBmYWlsZWRcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBTZXR1cCB0aGUgZnVuY3Rpb24gcmVnaXN0cmF0aW9uIHRhYmxlIChhbmQgb3RoZXIgZGF0YSkgZm9yIGEKKwkgKiBuZXRfZGV2aWNlCisJICovCisJLy9uZXRkZXYtPmluaXQgICAgICAgICAgICAgICA9ICZldDEzMXhfaW5pdDsKKwkvL25ldGRldi0+c2V0X2NvbmZpZyA9ICZldDEzMXhfY29uZmlnOworCW5ldGRldi0+Z2V0X3N0YXRzID0gJmV0MTMxeF9zdGF0czsKKwluZXRkZXYtPm9wZW4gPSAmZXQxMzF4X29wZW47CisJbmV0ZGV2LT5zdG9wID0gJmV0MTMxeF9jbG9zZTsKKwluZXRkZXYtPmRvX2lvY3RsID0gJmV0MTMxeF9pb2N0bDsKKwluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZldDEzMXhfbXVsdGljYXN0OworCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gJmV0MTMxeF90eDsKKwluZXRkZXYtPnR4X3RpbWVvdXQgPSAmZXQxMzF4X3R4X3RpbWVvdXQ7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUMTMxWF9UWF9USU1FT1VUOworCW5ldGRldi0+Y2hhbmdlX210dSA9ICZldDEzMXhfY2hhbmdlX210dTsKKwluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZldDEzMXhfc2V0X21hY19hZGRyOworCisJLy9uZXRkZXYtPmV0aHRvb2xfb3BzICAgICAgICA9ICZldDEzMXhfZXRodG9vbF9vcHM7CisKKwkvLyBQb2xsPworCS8vbmV0ZGV2LT5wb2xsICAgICAgICAgICAgICAgPSAmZXQxMzF4X3BvbGw7CisJLy9uZXRkZXYtPnBvbGxfY29udHJvbGxlciAgICA9ICZldDEzMXhfcG9sbF9jb250cm9sbGVyOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gbmV0ZGV2OworfQorCisvKioKKyAqIGV0MTMxeF9zdGF0cyAtIFJldHVybiB0aGUgY3VycmVudCBkZXZpY2Ugc3RhdGlzdGljcy4KKyAqIEBuZXRkZXY6IGRldmljZSB3aG9zZSBzdGF0cyBhcmUgYmVpbmcgcXVlcmllZAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK3N0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpldDEzMXhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZhZGFwdGVyLT5uZXRfc3RhdHM7CisJQ0VfU1RBVFNfdCAqZGV2c3RhdCA9ICZhZGFwdGVyLT5TdGF0czsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlzdGF0cy0+cnhfcGFja2V0cyA9IGRldnN0YXQtPmlwYWNrZXRzOworCXN0YXRzLT50eF9wYWNrZXRzID0gZGV2c3RhdC0+b3BhY2tldHM7CisJc3RhdHMtPnJ4X2Vycm9ycyA9IGRldnN0YXQtPmxlbmd0aF9lcnIgKyBkZXZzdGF0LT5hbGlnbm1lbnRfZXJyICsKKwkgICAgZGV2c3RhdC0+Y3JjX2VyciArIGRldnN0YXQtPmNvZGVfdmlvbGF0aW9ucyArIGRldnN0YXQtPm90aGVyX2Vycm9yczsKKwlzdGF0cy0+dHhfZXJyb3JzID0gZGV2c3RhdC0+bWF4X3BrdF9lcnJvcjsKKwlzdGF0cy0+bXVsdGljYXN0ID0gZGV2c3RhdC0+bXVsdGlyY3Y7CisJc3RhdHMtPmNvbGxpc2lvbnMgPSBkZXZzdGF0LT5jb2xsaXNpb25zOworCisJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgPSBkZXZzdGF0LT5sZW5ndGhfZXJyOworCXN0YXRzLT5yeF9vdmVyX2Vycm9ycyA9IGRldnN0YXQtPnJ4X292X2Zsb3c7CisJc3RhdHMtPnJ4X2NyY19lcnJvcnMgPSBkZXZzdGF0LT5jcmNfZXJyOworCisJLy8gTk9URTogVGhlc2Ugc3RhdHMgZG9uJ3QgaGF2ZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBpbiBDRV9TVEFUUywgc28gd2UncmUKKwkvLyAgICAgICBnb2luZyB0byBoYXZlIHRvIHVwZGF0ZSB0aGVzZSBkaXJlY3RseSBmcm9tIHdpdGhpbiB0aGUgVFgvUlggY29kZQorCS8vc3RhdHMtPnJ4X2J5dGVzICAgICAgICAgICAgPSAyMDsgLy9kZXZzdGF0LT47CisJLy9zdGF0cy0+dHhfYnl0ZXMgICAgICAgICAgICA9IDIwOyAvL2RldnN0YXQtPjsKKwkvL3N0YXRzLT5yeF9kcm9wcGVkICAgICAgICAgID0gZGV2c3RhdC0+OworCS8vc3RhdHMtPnR4X2Ryb3BwZWQgICAgICAgICAgPSBkZXZzdGF0LT47CisKKwkvLyBOT1RFOiBOb3QgdXNlZCwgY2FuJ3QgZmluZCBhbmFsb2dvdXMgc3RhdGlzdGljcworCS8vc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyAgICAgPSBkZXZzdGF0LT47CisJLy9zdGF0cy0+cnhfZmlmb19lcnJvcnMgICAgICA9IGRldnN0YXQtPjsKKwkvL3N0YXRzLT5yeF9taXNzZWRfZXJyb3JzICAgID0gZGV2c3RhdC0+OworCisJLy9zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgICA9IGRldnN0YXQtPjsKKwkvL3N0YXRzLT50eF9jYXJyaWVyX2Vycm9ycyAgID0gZGV2c3RhdC0+OworCS8vc3RhdHMtPnR4X2ZpZm9fZXJyb3JzICAgICAgPSBkZXZzdGF0LT47CisJLy9zdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9ycyA9IGRldnN0YXQtPjsKKwkvL3N0YXRzLT50eF93aW5kb3dfZXJyb3JzICAgID0gZGV2c3RhdC0+OworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gc3RhdHM7Cit9CisKKy8qKgorICogZXQxMzF4X29wZW4gLSBPcGVuIHRoZSBkZXZpY2UgZm9yIHVzZS4KKyAqIEBuZXRkZXY6IGRldmljZSB0byBiZSBvcGVuZWQKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgZXQxMzF4X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFN0YXJ0IHRoZSB0aW1lciB0byB0cmFjayBOSUMgZXJyb3JzICovCisJYWRkX3RpbWVyKCZhZGFwdGVyLT5FcnJvclRpbWVyKTsKKworCS8qIFJlZ2lzdGVyIG91ciBJU1IgKi8KKwlEQkdfVFJBQ0UoZXQxMzF4X2RiZ2luZm8sICJSZWdpc3RlcmluZyBJU1IuLi5cbiIpOworCisJcmVzdWx0ID0KKwkgICAgcmVxdWVzdF9pcnEobmV0ZGV2LT5pcnEsIGV0MTMxeF9pc3IsIElSUUZfU0hBUkVELCBuZXRkZXYtPm5hbWUsCisJCQluZXRkZXYpOworCWlmIChyZXN1bHQpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiQ291bGQgbm90IHJlZ2lzdGVyIElTUlxuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyogRW5hYmxlIHRoZSBUeCBhbmQgUnggRE1BIGVuZ2luZXMgKGlmIG5vdCBhbHJlYWR5IGVuYWJsZWQpICovCisJZXQxMzF4X3J4X2RtYV9lbmFibGUoYWRhcHRlcik7CisJZXQxMzF4X3R4X2RtYV9lbmFibGUoYWRhcHRlcik7CisKKwkvKiBFbmFibGUgZGV2aWNlIGludGVycnVwdHMgKi8KKwlldDEzMXhfZW5hYmxlX2ludGVycnVwdHMoYWRhcHRlcik7CisKKwlNUF9TRVRfRkxBRyhhZGFwdGVyLCBmTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKTsKKworCS8qIFdlJ3JlIHJlYWR5IHRvIG1vdmUgc29tZSBkYXRhLCBzbyBzdGFydCB0aGUgcXVldWUgKi8KKwluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGV0MTMxeF9jbG9zZSAtIENsb3NlIHRoZSBkZXZpY2UKKyAqIEBuZXRkZXY6IGRldmljZSB0byBiZSBjbG9zZWQKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgZXQxMzF4X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBGaXJzdCB0aGluZyBpcyB0byBzdG9wIHRoZSBxdWV1ZSAqLworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCS8qIFN0b3AgdGhlIFR4IGFuZCBSeCBETUEgZW5naW5lcyAqLworCWV0MTMxeF9yeF9kbWFfZGlzYWJsZShhZGFwdGVyKTsKKwlldDEzMXhfdHhfZG1hX2Rpc2FibGUoYWRhcHRlcik7CisKKwkvKiBEaXNhYmxlIGRldmljZSBpbnRlcnJ1cHRzICovCisJZXQxMzF4X2Rpc2FibGVfaW50ZXJydXB0cyhhZGFwdGVyKTsKKworCS8qIERlcmVnaXN0ZXJpbmcgSVNSICovCisJTVBfQ0xFQVJfRkxBRyhhZGFwdGVyLCBmTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKTsKKworCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywgIkRlcmVnaXN0ZXJpbmcgSVNSLi4uXG4iKTsKKwlmcmVlX2lycShuZXRkZXYtPmlycSwgbmV0ZGV2KTsKKworCS8qIFN0b3AgdGhlIGVycm9yIHRpbWVyICovCisJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPkVycm9yVGltZXIpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBldDEzMXhfaW9jdGxfbWlpIC0gVGhlIGZ1bmN0aW9uIHdoaWNoIGhhbmRsZXMgTUlJIElPQ1RMcworICogQG5ldGRldjogZGV2aWNlIG9uIHdoaWNoIHRoZSBxdWVyeSBpcyBiZWluZyBtYWRlCisgKiBAcmVxYnVmOiB0aGUgcmVxdWVzdC1zcGVjaWZpYyBkYXRhIGJ1ZmZlcgorICogQGNtZDogdGhlIGNvbW1hbmQgcmVxdWVzdCBjb2RlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF9pb2N0bF9taWkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICpyZXFidWYsIGludCBjbWQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKHJlcWJ1Zik7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHTUlJUEhZOgorCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlNJT0NHTUlJUEhZXG4iKTsKKwkJZGF0YS0+cGh5X2lkID0gcEFkYXB0ZXItPlN0YXRzLnhjdnJfYWRkcjsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NHTUlJUkVHOgorCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlNJT0NHTUlJUkVHXG4iKTsKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSBNaVJlYWQocEFkYXB0ZXIsCisJCQkJCWRhdGEtPnJlZ19udW0sICZkYXRhLT52YWxfb3V0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU0lPQ1NNSUlSRUc6CisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiU0lPQ1NNSUlSRUdcbiIpOworCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IE1pV3JpdGUocEFkYXB0ZXIsIGRhdGEtPnJlZ19udW0sCisJCQkJCSBkYXRhLT52YWxfaW4pOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc3RhdHVzID0gLUVPUE5PVFNVUFA7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGV0MTMxeF9pb2N0bCAtIFRoZSBJL08gQ29udHJvbCBoYW5kbGVyIGZvciB0aGUgZHJpdmVyCisgKiBAbmV0ZGV2OiBkZXZpY2Ugb24gd2hpY2ggdGhlIGNvbnRyb2wgcmVxdWVzdCBpcyBiZWluZyBtYWRlCisgKiBAcmVxYnVmOiBhIHBvaW50ZXIgdG8gdGhlIElPQ1RMIHJlcXVlc3QgYnVmZmVyCisgKiBAY21kOiB0aGUgSU9DVEwgY29tbWFuZCBjb2RlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWZyZXEgKnJlcWJ1ZiwgaW50IGNtZCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ0dNSUlQSFk6CisJY2FzZSBTSU9DR01JSVJFRzoKKwljYXNlIFNJT0NTTUlJUkVHOgorCQlzdGF0dXMgPSBldDEzMXhfaW9jdGxfbWlpKG5ldGRldiwgcmVxYnVmLCBjbWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLCAiVW5oYW5kbGVkIElPQ1RMIENvZGU6IDB4JTA0eFxuIiwKKwkJCSAgICBjbWQpOworCQlzdGF0dXMgPSAtRU9QTk9UU1VQUDsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X3NldF9wYWNrZXRfZmlsdGVyIC0gQ29uZmlndXJlcyB0aGUgUnggUGFja2V0IGZpbHRlcmluZyBvbiB0aGUgZGV2aWNlCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlCisgKi8KK2ludCBldDEzMXhfc2V0X3BhY2tldF9maWx0ZXIoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBzdGF0dXMgPSAwOworCXVpbnQzMl90IGZpbHRlciA9IGFkYXB0ZXItPlBhY2tldEZpbHRlcjsKKwlSWE1BQ19DVFJMX3QgY3RybDsKKwlSWE1BQ19QRl9DVFJMX3QgcGZfY3RybDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwljdHJsLnZhbHVlID0gcmVhZGwoJmFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4bWFjLmN0cmwudmFsdWUpOworCXBmX2N0cmwudmFsdWUgPSByZWFkbCgmYWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhtYWMucGZfY3RybC52YWx1ZSk7CisKKwkvKiBEZWZhdWx0IHRvIGRpc2FibGVkIHBhY2tldCBmaWx0ZXJpbmcuICBFbmFibGUgaXQgaW4gdGhlIGluZGl2aWR1YWwKKwkgKiBjYXNlIHN0YXRlbWVudHMgdGhhdCByZXF1aXJlIHRoZSBkZXZpY2UgdG8gZmlsdGVyIHNvbWV0aGluZworCSAqLworCWN0cmwuYml0cy5wa3RfZmlsdGVyX2Rpc2FibGUgPSAxOworCisJLyogU2V0IHVzIHRvIGJlIGluIHByb21pc2N1b3VzIG1vZGUgc28gd2UgcmVjZWl2ZSBldmVyeXRoaW5nLCB0aGlzCisJICogaXMgYWxzbyB0cnVlIHdoZW4gd2UgZ2V0IGEgcGFja2V0IGZpbHRlciBvZiAwCisJICovCisJaWYgKChmaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMpIHx8IGZpbHRlciA9PSAwKSB7CisJCXBmX2N0cmwuYml0cy5maWx0ZXJfYnJvYWRfZW4gPSAwOworCQlwZl9jdHJsLmJpdHMuZmlsdGVyX211bHRpX2VuID0gMDsKKwkJcGZfY3RybC5iaXRzLmZpbHRlcl91bmlfZW4gPSAwOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFNldCB1cyB1cCB3aXRoIE11bHRpY2FzdCBwYWNrZXQgZmlsdGVyaW5nLiAgVGhyZWUgY2FzZXMgYXJlCisJCSAqIHBvc3NpYmxlIC0gKDEpIHdlIGhhdmUgYSBtdWx0aS1jYXN0IGxpc3QsICgyKSB3ZSByZWNlaXZlIEFMTAorCQkgKiBtdWx0aWNhc3QgZW50cmllcyBvciAoMykgd2UgcmVjZWl2ZSBub25lLgorCQkgKi8KKwkJaWYgKGZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUKSB7CisJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIk11bHRpY2FzdCBmaWx0ZXJpbmcgT0ZGIChSeCBBTEwgTVVMVElDQVNUKVxuIik7CisJCQlwZl9jdHJsLmJpdHMuZmlsdGVyX211bHRpX2VuID0gMDsKKwkJfSBlbHNlIHsKKwkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiTXVsdGljYXN0IGZpbHRlcmluZyBPTlxuIik7CisJCQlTZXR1cERldmljZUZvck11bHRpY2FzdChhZGFwdGVyKTsKKwkJCXBmX2N0cmwuYml0cy5maWx0ZXJfbXVsdGlfZW4gPSAxOworCQkJY3RybC5iaXRzLnBrdF9maWx0ZXJfZGlzYWJsZSA9IDA7CisJCX0KKworCQkvKiBTZXQgdXMgdXAgd2l0aCBVbmljYXN0IHBhY2tldCBmaWx0ZXJpbmcgKi8KKwkJaWYgKGZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9ESVJFQ1RFRCkgeworCQkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJVbmljYXN0IEZpbHRlcmluZyBPTlxuIik7CisJCQlTZXR1cERldmljZUZvclVuaWNhc3QoYWRhcHRlcik7CisJCQlwZl9jdHJsLmJpdHMuZmlsdGVyX3VuaV9lbiA9IDE7CisJCQljdHJsLmJpdHMucGt0X2ZpbHRlcl9kaXNhYmxlID0gMDsKKwkJfQorCisJCS8qIFNldCB1cyB1cCB3aXRoIEJyb2FkY2FzdCBwYWNrZXQgZmlsdGVyaW5nICovCisJCWlmIChmaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfQlJPQURDQVNUKSB7CisJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIkJyb2FkY2FzdCBGaWx0ZXJpbmcgT05cbiIpOworCQkJcGZfY3RybC5iaXRzLmZpbHRlcl9icm9hZF9lbiA9IDE7CisJCQljdHJsLmJpdHMucGt0X2ZpbHRlcl9kaXNhYmxlID0gMDsKKwkJfSBlbHNlIHsKKwkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiQnJvYWRjYXN0IEZpbHRlcmluZyBPRkZcbiIpOworCQkJcGZfY3RybC5iaXRzLmZpbHRlcl9icm9hZF9lbiA9IDA7CisJCX0KKworCQkvKiBTZXR1cCB0aGUgcmVjZWl2ZSBtYWMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgLSBQYWNrZXQKKwkJICogRmlsdGVyIGNvbnRyb2wgKyB0aGUgZW5hYmxlIC8gZGlzYWJsZSBmb3IgcGFja2V0IGZpbHRlcgorCQkgKiBpbiB0aGUgY29udHJvbCByZWcuCisJCSAqLworCQl3cml0ZWwocGZfY3RybC52YWx1ZSwKKwkJICAgICAgICZhZGFwdGVyLT5DU1JBZGRyZXNzLT5yeG1hYy5wZl9jdHJsLnZhbHVlKTsKKwkJd3JpdGVsKGN0cmwudmFsdWUsICZhZGFwdGVyLT5DU1JBZGRyZXNzLT5yeG1hYy5jdHJsLnZhbHVlKTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X211bHRpY2FzdCAtIFRoZSBoYW5kbGVyIHRvIGNvbmZpZ3VyZSBtdWx0aWNhc3Rpbmcgb24gdGhlIGludGVyZmFjZQorICogQG5ldGRldjogYSBwb2ludGVyIHRvIGEgbmV0X2RldmljZSBzdHJ1Y3QgcmVwcmVzZW50aW5nIHRoZSBkZXZpY2UKKyAqLwordm9pZCBldDEzMXhfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1aW50MzJfdCBQYWNrZXRGaWx0ZXIgPSAwOworCXVpbnQzMl90IGNvdW50OworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0ID0gbmV0ZGV2LT5tY19saXN0OworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5Mb2NrLCBsb2NrZmxhZ3MpOworCisJLyogQmVmb3JlIHdlIG1vZGlmeSB0aGUgcGxhdGZvcm0taW5kZXBlbmRlbnQgZmlsdGVyIGZsYWdzLCBzdG9yZSB0aGVtCisJICogbG9jYWxseS4gVGhpcyBhbGxvd3MgdXMgdG8gZGV0ZXJtaW5lIGlmIGFueXRoaW5nJ3MgY2hhbmdlZCBhbmQgaWYKKwkgKiB3ZSBldmVuIG5lZWQgdG8gYm90aGVyIHRoZSBoYXJkd2FyZQorCSAqLworCVBhY2tldEZpbHRlciA9IGFkYXB0ZXItPlBhY2tldEZpbHRlcjsKKworCS8qIENsZWFyIHRoZSAnbXVsdGljYXN0JyBmbGFnIGxvY2FsbHk7IGJlY3Vhc2Ugd2Ugb25seSBoYXZlIGEgc2luZ2xlCisJICogZmxhZyB0byBjaGVjayBtdWx0aWNhc3QsIGFuZCBtdWx0aXBsZSBtdWx0aWNhc3QgYWRkcmVzc2VzIGNhbiBiZQorCSAqIHNldCwgdGhpcyBpcyB0aGUgZWFzaWVzdCB3YXkgdG8gZGV0ZXJtaW5lIGlmIG1vcmUgdGhhbiBvbmUKKwkgKiBtdWx0aWNhc3QgYWRkcmVzcyBpcyBiZWluZyBzZXQuCisJICovCisJUGFja2V0RmlsdGVyICY9IH5FVDEzMVhfUEFDS0VUX1RZUEVfTVVMVElDQVNUOworCisJLyogQ2hlY2sgdGhlIG5ldF9kZXZpY2UgZmxhZ3MgYW5kIHNldCB0aGUgZGV2aWNlIGluZGVwZW5kZW50IGZsYWdzCisJICogYWNjb3JkaW5nbHkKKwkgKi8KKwlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJICAgICJNVUxUSUNBU1QgQUREUiBDT1VOVDogJWRcbiIsIG5ldGRldi0+bWNfY291bnQpOworCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlJlcXVlc3Q6IFBST01JU0NVT1VTIE1PREUgT05cbiIpOworCQlhZGFwdGVyLT5QYWNrZXRGaWx0ZXIgfD0gRVQxMzFYX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTOworCX0gZWxzZSB7CisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiUmVxdWVzdDogUFJPTUlTQ1VPVVMgTU9ERSBPRkZcbiIpOworCQlhZGFwdGVyLT5QYWNrZXRGaWx0ZXIgJj0gfkVUMTMxWF9QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUzsKKwl9CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlJlcXVlc3Q6IEFDQ0VQVCBBTEwgTVVMVElDQVNUXG4iKTsKKwkJYWRhcHRlci0+UGFja2V0RmlsdGVyIHw9IEVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUOworCX0KKworCWlmIChuZXRkZXYtPm1jX2NvdW50ID4gTklDX01BWF9NQ0FTVF9MSVNUKSB7CisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJBQ0NFUFQgQUxMIE1VTFRJQ0FTVCBmb3Igbm93LCBhcyB0aGVyZSdzIG1vcmUgTXVsdGljYXN0ICIKKwkJCSAgICAiYWRkcmVzc2VzIHRoYW4gdGhlIEhXIHN1cHBvcnRzXG4iKTsKKworCQlhZGFwdGVyLT5QYWNrZXRGaWx0ZXIgfD0gRVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1Q7CisJfQorCisJaWYgKG5ldGRldi0+bWNfY291bnQgPCAxKSB7CisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiUmVxdWVzdDogUkVKRUNUIEFMTCBNVUxUSUNBU1RcbiIpOworCQlhZGFwdGVyLT5QYWNrZXRGaWx0ZXIgJj0gfkVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUOworCQlhZGFwdGVyLT5QYWNrZXRGaWx0ZXIgJj0gfkVUMTMxWF9QQUNLRVRfVFlQRV9NVUxUSUNBU1Q7CisJfSBlbHNlIHsKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgIlJlcXVlc3Q6IFNFVCBNVUxUSUNBU1QgRklMVEVSKFMpXG4iKTsKKwkJYWRhcHRlci0+UGFja2V0RmlsdGVyIHw9IEVUMTMxWF9QQUNLRVRfVFlQRV9NVUxUSUNBU1Q7CisJfQorCisJLyogU2V0IHZhbHVlcyBpbiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdCAqLworCWFkYXB0ZXItPk1DQWRkcmVzc0NvdW50ID0gbmV0ZGV2LT5tY19jb3VudDsKKworCWlmIChuZXRkZXYtPm1jX2NvdW50KSB7CisJCWlmIChtY2xpc3QtPmRtaV9hZGRybGVuICE9IEVUSF9BTEVOKSB7CisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIk11bHRpY2FzdCBhZGRycyBhcmUgbm90IEVUSF9BTEVOIGluIHNpemVcbiIpOworCQl9IGVsc2UgeworCQkJY291bnQgPSBuZXRkZXYtPm1jX2NvdW50IC0gMTsKKwkJCW1lbWNweShhZGFwdGVyLT5NQ0xpc3RbY291bnRdLCBtY2xpc3QtPmRtaV9hZGRyLAorCQkJICAgICAgIEVUSF9BTEVOKTsKKwkJfQorCX0KKworCS8qIEFyZSB0aGUgbmV3IGZsYWdzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cyBvbmVzPyBJZiBub3QsIHRoZW4gbm8KKwkgKiBhY3Rpb24gaXMgcmVxdWlyZWQKKwkgKgorCSAqIE5PVEUgLSBUaGlzIGJsb2NrIHdpbGwgYWx3YXlzIHVwZGF0ZSB0aGUgTUNMaXN0IHdpdGggdGhlIGhhcmR3YXJlLAorCSAqICAgICAgICBldmVuIGlmIHRoZSBhZGRyZXNzZXMgYXJlbid0IHRoZSBzYW1lLgorCSAqLworCWlmIChQYWNrZXRGaWx0ZXIgIT0gYWRhcHRlci0+UGFja2V0RmlsdGVyKSB7CisJCS8qIENhbGwgdGhlIGRldmljZSdzIGZpbHRlciBmdW5jdGlvbiAqLworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlVQREFURSBSRVFVSVJFRCwgRkxBR1MgY2hhbmdlZFxuIik7CisKKwkJZXQxMzF4X3NldF9wYWNrZXRfZmlsdGVyKGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLAorCQkJICAgICJOTyBVUERBVEUgUkVRVUlSRUQsIEZMQUdTIGRpZG4ndCBjaGFuZ2VcbiIpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPkxvY2ssIGxvY2tmbGFncyk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF90eCAtIFRoZSBoYW5kbGVyIHRvIHR4IGEgcGFja2V0IG9uIHRoZSBkZXZpY2UKKyAqIEBza2I6IGRhdGEgdG8gYmUgVHgnZAorICogQG5ldGRldjogZGV2aWNlIG9uIHdoaWNoIGRhdGEgaXMgdG8gYmUgVHgnZAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKi8KK2ludCBldDEzMXhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCURCR19UWF9FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBTYXZlIHRoZSB0aW1lc3RhbXAgZm9yIHRoZSBUWCB0aW1lb3V0IHdhdGNoZG9nICovCisJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisKKwkvKiBDYWxsIHRoZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSBUeCByb3V0aW5lICovCisJc3RhdHVzID0gZXQxMzF4X3NlbmRfcGFja2V0cyhza2IsIG5ldGRldik7CisKKwkvKiBDaGVjayBzdGF0dXMgYW5kIG1hbmFnZSB0aGUgbmV0aWYgcXVldWUgaWYgbmVjZXNzYXJ5ICovCisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWlmIChzdGF0dXMgPT0gLUVOT01FTSkgeworCQkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJPVVQgT0YgVENCczsgU1RPUCBORVRJRiBRVUVVRVxuIik7CisKKwkJCS8qIFB1dCB0aGUgcXVldWUgdG8gc2xlZXAgdW50aWwgcmVzb3VyY2VzIGFyZQorCQkJICogYXZhaWxhYmxlCisJCQkgKi8KKwkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkJCXN0YXR1cyA9IDE7CisJCX0gZWxzZSB7CisJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIk1pc2MgZXJyb3I7IGRyb3AgcGFja2V0XG4iKTsKKwkJCXN0YXR1cyA9IDA7CisJCX0KKwl9CisKKwlEQkdfVFhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X3R4X3RpbWVvdXQgLSBUaW1lb3V0IGhhbmRsZXIKKyAqIEBuZXRkZXY6IGEgcG9pbnRlciB0byBhIG5ldF9kZXZpY2Ugc3RydWN0IHJlcHJlc2VudGluZyB0aGUgZGV2aWNlCisgKgorICogVGhlIGhhbmRsZXIgY2FsbGVkIHdoZW4gYSBUeCByZXF1ZXN0IHRpbWVzIG91dC4gVGhlIHRpbWVvdXQgcGVyaW9kIGlzCisgKiBzcGVjaWZpZWQgYnkgdGhlICd0eF90aW1lbyIgZWxlbWVudCBpbiB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmUgKHNlZQorICogZXQxMzF4X2FsbG9jX2RldmljZSgpIHRvIHNlZSBob3cgdGhpcyB2YWx1ZSBpcyBzZXQpLgorICovCit2b2lkIGV0MTMxeF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJUE1QX1RDQiBwTXBUY2I7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisKKwlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywgIlRYIFRJTUVPVVRcbiIpOworCisJLyogSnVzdCBza2lwIHRoaXMgcGFydCBpZiB0aGUgYWRhcHRlciBpcyBkb2luZyBsaW5rIGRldGVjdGlvbiAqLworCWlmIChNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZNUF9BREFQVEVSX0xJTktfREVURUNUSU9OKSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sICJTdGlsbCBkb2luZyBsaW5rIGRldGVjdGlvblxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBBbnkgbm9ucmVjb3ZlcmFibGUgaGFyZHdhcmUgZXJyb3I/CisJICogQ2hlY2tzIGFkYXB0ZXItPmZsYWdzIGZvciBhbnkgZmFpbHVyZSBpbiBwaHkgcmVhZGluZworCSAqLworCWlmIChNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZNUF9BREFQVEVSX05PTl9SRUNPVkVSX0VSUk9SKSkgeworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywgIk5vbiByZWNvdmVyYWJsZSBlcnJvciAtIHJlbW92ZVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBIYXJkd2FyZSBmYWlsdXJlPyAqLworCWlmIChNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZNUF9BREFQVEVSX0hBUkRXQVJFX0VSUk9SKSkgeworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywgImhhcmR3YXJlIGVycm9yIC0gcmVzZXRcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogSXMgc2VuZCBzdHVjaz8gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKKworCXBNcFRjYiA9IHBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkOworCisJaWYgKHBNcFRjYiAhPSBOVUxMKSB7CisJCXBNcFRjYi0+Q291bnQrKzsKKworCQlpZiAocE1wVGNiLT5Db3VudCA+IE5JQ19TRU5EX0hBTkdfVEhSRVNIT0xEKSB7CisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworCQkJVFhfU1RBVFVTX0JMT0NLX3QgdHhEbWFDb21wbGV0ZSA9CisJCQkgICAgKihwQWRhcHRlci0+VHhSaW5nLnBUeFN0YXR1c1ZhKTsKKwkJCVBUWF9ERVNDX0VOVFJZX3QgcERlc2MgPQorCQkJICAgIHBBZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSArCisJCQkgICAgcE1wVGNiLT5XckluZGV4LmJpdHMudmFsOworI2VuZGlmCisJCQlUWF9ERVNDX0VOVFJZX3QgU3R1Y2tEZXNjcmlwdG9yc1sxMF07CisKKwkJCWlmIChwTXBUY2ItPldySW5kZXguYml0cy52YWwgPiA3KSB7CisJCQkJbWVtY3B5KFN0dWNrRGVzY3JpcHRvcnMsCisJCQkJICAgICAgIHBBZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSArCisJCQkJICAgICAgIHBNcFRjYi0+V3JJbmRleC5iaXRzLnZhbCAtIDYsCisJCQkJICAgICAgIHNpemVvZihUWF9ERVNDX0VOVFJZX3QpICogMTApOworCQkJfQorCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLAorCQkJCQkgICAgICAgbG9ja2ZsYWdzKTsKKworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJTZW5kIHN0dWNrIC0gcmVzZXQuICBwTXBUY2ItPldySW5kZXggJXgsIEZsYWdzIDB4JTA4eFxuIiwKKwkJCQkgICAgcE1wVGNiLT5XckluZGV4LmJpdHMudmFsLAorCQkJCSAgICBwTXBUY2ItPkZsYWdzKTsKKworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJwRGVzYyAweCUwOHgsIDB4JTA4eCwgMHglMDh4LCAweCUwOHhcbiIsCisJCQkJICAgIHBEZXNjLT5EYXRhQnVmZmVyUHRySGlnaCwKKwkJCQkgICAgcERlc2MtPkRhdGFCdWZmZXJQdHJMb3csIHBEZXNjLT53b3JkMi52YWx1ZSwKKwkJCQkgICAgcERlc2MtPndvcmQzLnZhbHVlKTsKKworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJXYlN0YXR1cyAweCUwOHhcbiIsIHR4RG1hQ29tcGxldGUudmFsdWUpOworCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworCQkJRHVtcERldmljZUJsb2NrKERCR19XQVJOSU5HX09OLCBwQWRhcHRlciwgMCk7CisJCQlEdW1wRGV2aWNlQmxvY2soREJHX1dBUk5JTkdfT04sIHBBZGFwdGVyLCAxKTsKKwkJCUR1bXBEZXZpY2VCbG9jayhEQkdfV0FSTklOR19PTiwgcEFkYXB0ZXIsIDMpOworCQkJRHVtcERldmljZUJsb2NrKERCR19XQVJOSU5HX09OLCBwQWRhcHRlciwgNSk7CisjZW5kaWYKKwkJCWV0MTMxeF9jbG9zZShuZXRkZXYpOworCQkJZXQxMzF4X29wZW4obmV0ZGV2KTsKKworCQkJcmV0dXJuOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKK30KKworLyoqCisgKiBldDEzMXhfY2hhbmdlX210dSAtIFRoZSBoYW5kbGVyIGNhbGxlZCB0byBjaGFuZ2UgdGhlIE1UVSBmb3IgdGhlIGRldmljZQorICogQG5ldGRldjogZGV2aWNlIHdob3NlIE1UVSBpcyB0byBiZSBjaGFuZ2VkCisgKiBAbmV3X210dTogdGhlIGRlc2lyZWQgTVRVCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IGV0MTMxeF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogTWFrZSBzdXJlIHRoZSByZXF1ZXN0ZWQgTVRVIGlzIHZhbGlkICovCisJaWYgKG5ld19tdHUgPT0gMCB8fCBuZXdfbXR1ID4gOTIxNikgeworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTdG9wIHRoZSBuZXRpZiBxdWV1ZSAqLworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCS8qIFN0b3AgdGhlIFR4IGFuZCBSeCBETUEgZW5naW5lcyAqLworCWV0MTMxeF9yeF9kbWFfZGlzYWJsZShhZGFwdGVyKTsKKwlldDEzMXhfdHhfZG1hX2Rpc2FibGUoYWRhcHRlcik7CisKKwkvKiBEaXNhYmxlIGRldmljZSBpbnRlcnJ1cHRzICovCisJZXQxMzF4X2Rpc2FibGVfaW50ZXJydXB0cyhhZGFwdGVyKTsKKwlldDEzMXhfaGFuZGxlX3NlbmRfaW50ZXJydXB0KGFkYXB0ZXIpOworCWV0MTMxeF9oYW5kbGVfcmVjdl9pbnRlcnJ1cHQoYWRhcHRlcik7CisKKwkvKiBTZXQgdGhlIG5ldyBNVFUgKi8KKwluZXRkZXYtPm10dSA9IG5ld19tdHU7CisKKwkvKiBGcmVlIFJ4IERNQSBtZW1vcnkgKi8KKwlldDEzMXhfYWRhcHRlcl9tZW1vcnlfZnJlZShhZGFwdGVyKTsKKworCS8qIFNldCB0aGUgY29uZmlnIHBhcmFtZXRlciBmb3IgSnVtYm8gUGFja2V0IHN1cHBvcnQgKi8KKwlhZGFwdGVyLT5SZWdpc3RyeUp1bWJvUGFja2V0ID0gbmV3X210dSArIDE0OworCWV0MTMxeF9zb2Z0X3Jlc2V0KGFkYXB0ZXIpOworCisJLyogQWxsb2MgYW5kIGluaXQgUnggRE1BIG1lbW9yeSAqLworCXJlc3VsdCA9IGV0MTMxeF9hZGFwdGVyX21lbW9yeV9hbGxvYyhhZGFwdGVyKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgIkNoYW5nZSBNVFUgZmFpbGVkOyBjb3VsZG4ndCByZS1hbGxvYyBETUEgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlldDEzMXhfaW5pdF9zZW5kKGFkYXB0ZXIpOworCisJZXQxMzF4X3NldHVwX2hhcmR3YXJlX3Byb3BlcnRpZXMoYWRhcHRlcik7CisJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzLCBFVEhfQUxFTik7CisKKwkvKiBJbml0IHRoZSBkZXZpY2Ugd2l0aCB0aGUgbmV3IHNldHRpbmdzICovCisJZXQxMzF4X2FkYXB0ZXJfc2V0dXAoYWRhcHRlcik7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLworCWlmIChNUF9URVNUX0ZMQUcoYWRhcHRlciwgZk1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpIHsKKwkJZXQxMzF4X2VuYWJsZV9pbnRlcnJ1cHRzKGFkYXB0ZXIpOworCX0KKworCS8qIFJlc3RhcnQgdGhlIFR4IGFuZCBSeCBETUEgZW5naW5lcyAqLworCWV0MTMxeF9yeF9kbWFfZW5hYmxlKGFkYXB0ZXIpOworCWV0MTMxeF90eF9kbWFfZW5hYmxlKGFkYXB0ZXIpOworCisJLyogUmVzdGFydCB0aGUgbmV0aWYgcXVldWUgKi8KKwluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZXQxMzF4X3NldF9tYWNfYWRkciAtIGhhbmRsZXIgdG8gY2hhbmdlIHRoZSBNQUMgYWRkcmVzcyBmb3IgdGhlIGRldmljZQorICogQG5ldGRldjogZGV2aWNlIHdob3NlIE1BQyBpcyB0byBiZSBjaGFuZ2VkCisgKiBAbmV3X21hYzogdGhlIGRlc2lyZWQgTUFDIGFkZHJlc3MKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICoKKyAqIElNUExFTUVOVEVEIEJZIDogYmx1eCBodHRwOi8vYmVybmRsdXguZGUgMjIuMDEuMjAwNyAyMToxNAorICovCitpbnQgZXQxMzF4X3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpuZXdfbWFjKQoreworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyZXNzID0gbmV3X21hYzsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisJLy8gYmVnaW4gYmx1eAorCS8vIERCR19WRVJCT1NFKCBldDEzMXhfZGJnaW5mbywgIkZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCEhXG4iICk7CisKKwlpZiAoYWRhcHRlciA9PSBOVUxMKSB7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdGVkIE1BQyBpcyB2YWxpZCAqLworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyZXNzLT5zYV9kYXRhKSkgeworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTdG9wIHRoZSBuZXRpZiBxdWV1ZSAqLworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCS8qIFN0b3AgdGhlIFR4IGFuZCBSeCBETUEgZW5naW5lcyAqLworCWV0MTMxeF9yeF9kbWFfZGlzYWJsZShhZGFwdGVyKTsKKwlldDEzMXhfdHhfZG1hX2Rpc2FibGUoYWRhcHRlcik7CisKKwkvKiBEaXNhYmxlIGRldmljZSBpbnRlcnJ1cHRzICovCisJZXQxMzF4X2Rpc2FibGVfaW50ZXJydXB0cyhhZGFwdGVyKTsKKwlldDEzMXhfaGFuZGxlX3NlbmRfaW50ZXJydXB0KGFkYXB0ZXIpOworCWV0MTMxeF9oYW5kbGVfcmVjdl9pbnRlcnJ1cHQoYWRhcHRlcik7CisKKwkvKiBTZXQgdGhlIG5ldyBNQUMgKi8KKwkvLyBuZXRkZXYtPnNldF9tYWNfYWRkcmVzcyAgPSAmbmV3X21hYzsKKwkvLyBuZXRkZXYtPm10dSA9IG5ld19tdHU7CisKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkcmVzcy0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisKKwlwcmludGsoIiVzOiBTZXR0aW5nIE1BQyBhZGRyZXNzIHRvICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCSAgICAgICBuZXRkZXYtPm5hbWUsIG5ldGRldi0+ZGV2X2FkZHJbMF0sIG5ldGRldi0+ZGV2X2FkZHJbMV0sCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbMl0sIG5ldGRldi0+ZGV2X2FkZHJbM10sIG5ldGRldi0+ZGV2X2FkZHJbNF0sCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbNV0pOworCisJLyogRnJlZSBSeCBETUEgbWVtb3J5ICovCisJZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2ZyZWUoYWRhcHRlcik7CisKKwkvKiBTZXQgdGhlIGNvbmZpZyBwYXJhbWV0ZXIgZm9yIEp1bWJvIFBhY2tldCBzdXBwb3J0ICovCisJLy8gYWRhcHRlci0+UmVnaXN0cnlKdW1ib1BhY2tldCA9IG5ld19tdHUgKyAxNDsKKwkvLyBibHV4OiBub3QgbmVlZGV0IGhlcmUsIHcnbGwgY2hhbmdlIHRoZSBNQUMKKworCWV0MTMxeF9zb2Z0X3Jlc2V0KGFkYXB0ZXIpOworCisJLyogQWxsb2MgYW5kIGluaXQgUnggRE1BIG1lbW9yeSAqLworCXJlc3VsdCA9IGV0MTMxeF9hZGFwdGVyX21lbW9yeV9hbGxvYyhhZGFwdGVyKTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgIkNoYW5nZSBNQUMgZmFpbGVkOyBjb3VsZG4ndCByZS1hbGxvYyBETUEgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlldDEzMXhfaW5pdF9zZW5kKGFkYXB0ZXIpOworCisJZXQxMzF4X3NldHVwX2hhcmR3YXJlX3Byb3BlcnRpZXMoYWRhcHRlcik7CisJLy8gbWVtY3B5KCBuZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5DdXJyZW50QWRkcmVzcywgRVRIX0FMRU4gKTsKKwkvLyBibHV4OiBubywgZG8gbm90IG92ZXJyaWRlIG91ciBuaWNlIGFkZHJlc3MKKworCS8qIEluaXQgdGhlIGRldmljZSB3aXRoIHRoZSBuZXcgc2V0dGluZ3MgKi8KKwlldDEzMXhfYWRhcHRlcl9zZXR1cChhZGFwdGVyKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJaWYgKE1QX1RFU1RfRkxBRyhhZGFwdGVyLCBmTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkgeworCQlldDEzMXhfZW5hYmxlX2ludGVycnVwdHMoYWRhcHRlcik7CisJfQorCisJLyogUmVzdGFydCB0aGUgVHggYW5kIFJ4IERNQSBlbmdpbmVzICovCisJZXQxMzF4X3J4X2RtYV9lbmFibGUoYWRhcHRlcik7CisJZXQxMzF4X3R4X2RtYV9lbmFibGUoYWRhcHRlcik7CisKKwkvKiBSZXN0YXJ0IHRoZSBuZXRpZiBxdWV1ZSAqLworCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhY2QxNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X25ldGRldi5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gcmVsYXRlZCB0byB0aGUKKyAqICAgICAgICAgICAgICAgICAgIGRyaXZlcidzIG5ldF9kZXZpY2Ugc3VwcG9ydC4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxWF9ORVRERVZfSF9fCisjZGVmaW5lIF9fRVQxMzFYX05FVERFVl9IX18KKworc3RydWN0IG5ldF9kZXZpY2UgKmV0MTMxeF9kZXZpY2VfYWxsb2Modm9pZCk7CisKKyNlbmRpZiAvKiBfX0VUMTMxWF9ORVRERVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF92ZXJzaW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF92ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhNjQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X3ZlcnNpb24uaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF92ZXJzaW9uLmggLSBUaGlzIGZpbGUgcHJvdmlkZXMgc3lzdGVtIGFuZCBkZXZpY2UgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxWF9WRVJTSU9OX0hfXworI2RlZmluZSBfX0VUMTMxWF9WRVJTSU9OX0hfXworCisjZGVmaW5lIERSSVZFUl9BVVRIT1IJCSJWaWN0b3IgU29yaWFubyAodmpzb3JpYW5vQGFnZXJlLmNvbSkiCisjZGVmaW5lIERSSVZFUl9MSUNFTlNFCQkiRHVhbCBCU0QvR1BMIgorI2RlZmluZSBEUklWRVJfREVWSUNFX1NUUklORwkiRVQxMzEwIgorI2RlZmluZSBEUklWRVJfTkFNRQkJImV0MTMxeCIKKyNkZWZpbmUgRFJJVkVSX01BSk9SX1ZFUlNJT04JMQorI2RlZmluZSBEUklWRVJfTUlOT1JfVkVSU0lPTgkyCisjZGVmaW5lIERSSVZFUl9QQVRDSF9WRVJTSU9OCTMKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fU1RSSU5HCSIxLjIuMyIKKyNkZWZpbmUgRFJJVkVSX1ZFTkRPUgkJIkFnZXJlIFN5c3RlbXMsIGh0dHA6Ly93d3cuYWdlcmUuY29tIgorI2RlZmluZSBEUklWRVJfREVTQwkJIjEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIiCisKKyNkZWZpbmUgU1RSVUNUX01PRFVMRQkJIm5ldCIJLyogYmx1eDogbWlzc2VkIGJ5IHRoZSBrZXJuZWwgKi8KKworI2RlZmluZSBEUklWRVJfSU5GTwkJRFJJVkVSX0RFU0MgIiBmb3IgdGhlICJcCisJCQkJRFJJVkVSX0RFVklDRV9TVFJJTkcgIiwgdiIgXAorCQkJCURSSVZFUl9WRVJTSU9OX1NUUklORyAiIGJ5ICIgXAorCQkJCURSSVZFUl9WRU5ET1IKKworI2RlZmluZSBEUklWRVJfTkFNRV9FWFQJCSJldDEzMXgua28iCisKKyNlbmRpZiAvKiBfX0VUMTMxWF9WRVJTSU9OX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5M2ZkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L0tjb25maWcKQEAgLTAsMCArMSwyNyBAQAorY29uZmlnIFZJREVPX0dPNzAwNworCXRyaXN0YXRlICJHbyA3MDA3IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIEkyQyAmJiBJTlBVVAorCWRlcGVuZHMgb24gU05ECisJc2VsZWN0IFZJREVPQlVGX0RNQV9TRworCXNlbGVjdCBWSURFT19JUgorCXNlbGVjdCBWSURFT19UVU5FUgorCXNlbGVjdCBWSURFT19UVkVFUFJPTQorCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IENSQzMyCisJZGVmYXVsdCBOCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3Igc29tZSB3aWVyZCBkZXZpY2UuLi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ283MDA3CisKK2NvbmZpZyBWSURFT19HTzcwMDdfVVNCCisJdHJpc3RhdGUgIkdvIDcwMDcgVVNCIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19HTzcwMDcgJiYgVVNCCisJZGVmYXVsdCBOCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3Igc29tZSB3aWVyZCBkZXZpY2UuLi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ283MDA3LXVzYgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjkzMTBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisjb2JqLW0gKz0gZ283MDA3Lm8gZ283MDA3LXVzYi5vIHNuZC1nbzcwMDcubyB3aXMtc2FhNzExNS5vIHdpcy10dzk5MDMubyBcCisJCXdpcy11ZGExMzQyLm8gd2lzLXNvbnktdHVuZXIubyB3aXMtc2FhNzExMy5vIHdpcy1vdjc2NDAubyBcCisJCXdpcy10dzI4MDQubworCisKK29iai0kKENPTkZJR19WSURFT19HTzcwMDcpICs9IGdvNzAwNy5vCitvYmotJChDT05GSUdfVklERU9fR083MDA3X1VTQikgKz0gZ283MDA3LXVzYi5vCisKK2dvNzAwNy1vYmpzICs9IGdvNzAwNy12NGwyLm8gZ283MDA3LWRyaXZlci5vIGdvNzAwNy1pMmMubyBnbzcwMDctZncubyBzbmQtZ283MDA3Lm8KKworCisjaWZuZXEgKCQoU0FBNzEzNF9CVUlMRCksKQorI29iai1tICs9IHNhYTcxMzQtZ283MDA3Lm8KKyNlbmRpZgorCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL3N0YWdpbmcvc2FhNzEzNAorRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGY0NDc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9SRUFETUUKQEAgLTAsMCArMSwxMSBAQAorVG9kbzoKKwktIGNoZWNrcGF0Y2gucGwgY2xlYW51cHMKKwktIHNwYXJzZSBjbGVhbnVwcworCS0gbG90cyBvZiBsaXR0bGUgbW9kdWxlcywgc2hvdWxkIGJlIG1lcmdlZCB0b2dldGhlcgorCSAgYW5kIGFkZGVkIHRvIHRoZSBidWlsZC4KKwktIHRlc3Rpbmc/CisJLSBoYW5kbGUgY2h1cm4gaW4gdjRsIGxheWVyLgorCitQbGVhc2Ugc2VuZCBwYXRjaHMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kIENjOiBSb3NzCitDb2hlbiA8cmNvaGVuQHNudXJnbGUub3JnPiBhcyB3ZWxsLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1kcml2ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWRyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYWU0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1kcml2ZXIuYwpAQCAtMCwwICsxLDY4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisKKyNpbmNsdWRlICJnbzcwMDctcHJpdi5oIgorI2luY2x1ZGUgIndpcy1pMmMuaCIKKworLyoKKyAqIFdhaXQgZm9yIGFuIGludGVycnVwdCB0byBiZSBkZWxpdmVyZWQgZnJvbSB0aGUgR083MDA3U0IgYW5kIHJldHVybgorICogdGhlIGFzc29jaWF0ZWQgdmFsdWUgYW5kIGRhdGEuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgaHdfbG9jayBoZWxkLgorICovCitpbnQgZ283MDA3X3JlYWRfaW50ZXJydXB0KHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgKnZhbHVlLCB1MTYgKmRhdGEpCit7CisJZ28tPmludGVycnVwdF9hdmFpbGFibGUgPSAwOworCWdvLT5ocGlfb3BzLT5yZWFkX2ludGVycnVwdChnbyk7CisJaWYgKHdhaXRfZXZlbnRfdGltZW91dChnby0+aW50ZXJydXB0X3dhaXRxLAorCQkJCWdvLT5pbnRlcnJ1cHRfYXZhaWxhYmxlLCA1KkhaKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IHRpbWVvdXQgd2FpdGluZyBmb3IgcmVhZCBpbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghZ28tPmludGVycnVwdF9hdmFpbGFibGUpCisJCXJldHVybiAtMTsKKwlnby0+aW50ZXJydXB0X2F2YWlsYWJsZSA9IDA7CisJKnZhbHVlID0gZ28tPmludGVycnVwdF92YWx1ZSAmIDB4ZmZmZTsKKwkqZGF0YSA9IGdvLT5pbnRlcnJ1cHRfZGF0YTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZ283MDA3X3JlYWRfaW50ZXJydXB0KTsKKworLyoKKyAqIFJlYWQgYSByZWdpc3Rlci9hZGRyZXNzIG9uIHRoZSBHTzcwMDdTQi4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBod19sb2NrIGhlbGQuCisgKi8KK2ludCBnbzcwMDdfcmVhZF9hZGRyKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgYWRkciwgdTE2ICpkYXRhKQoreworCWludCBjb3VudCA9IDEwMDsKKwl1MTYgdmFsdWU7CisKKwlpZiAoZ283MDA3X3dyaXRlX2ludGVycnVwdChnbywgMHgwMDEwLCBhZGRyKSA8IDApCisJCXJldHVybiAtRUlPOworCXdoaWxlIChjb3VudC0tID4gMCkgeworCQlpZiAoZ283MDA3X3JlYWRfaW50ZXJydXB0KGdvLCAmdmFsdWUsIGRhdGEpID09IDAgJiYKKwkJCQl2YWx1ZSA9PSAweGEwMDApCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU87Cit9CitFWFBPUlRfU1lNQk9MKGdvNzAwN19yZWFkX2FkZHIpOworCisvKgorICogU2VuZCB0aGUgYm9vdCBmaXJtd2FyZSB0byB0aGUgZW5jb2Rlciwgd2hpY2gganVzdCB3YWtlcyBpdCB1cCBhbmQgbGV0cworICogdXMgdGFsayB0byB0aGUgR1BJTyBwaW5zIGFuZCBvbi1ib2FyZCBJMkMgYWRhcHRlci4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBod19sb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbnQgZ283MDA3X2xvYWRfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCWNoYXIgZndfbmFtZVtdID0gImdvNzAwN2Z3LmJpbiI7CisJdm9pZCAqYm91bmNlOworCWludCBmd19sZW4sIHJ2ID0gMDsKKwl1MTYgaW50cl92YWwsIGludHJfZGF0YTsKKworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZndfbmFtZSwgZ28tPmRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ283MDA3OiB1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSBmcm9tIGZpbGUgXCIlc1wiXG4iLAorCQkJZndfbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGZ3X2VudHJ5LT5zaXplIDwgMTYgfHwgbWVtY21wKGZ3X2VudHJ5LT5kYXRhLCAiV0lTR083MDA3RlciLCAxMSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IGZpbGUgXCIlc1wiIGRvZXMgbm90IGFwcGVhciB0byBiZSAiCisJCQkJImdvNzAwNyBmaXJtd2FyZVxuIiwgZndfbmFtZSk7CisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCQlyZXR1cm4gLTE7CisJfQorCWZ3X2xlbiA9IGZ3X2VudHJ5LT5zaXplIC0gMTY7CisJYm91bmNlID0ga21hbGxvYyhmd19sZW4sIEdGUF9LRVJORUwpOworCWlmIChib3VuY2UgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogdW5hYmxlIHRvIGFsbG9jYXRlICVkIGJ5dGVzIGZvciAiCisJCQkJImZpcm13YXJlIHRyYW5zZmVyXG4iLCBmd19sZW4pOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwkJcmV0dXJuIC0xOworCX0KKwltZW1jcHkoYm91bmNlLCBmd19lbnRyeS0+ZGF0YSArIDE2LCBmd19sZW4pOworCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCWlmIChnbzcwMDdfaW50ZXJmYWNlX3Jlc2V0KGdvKSA8IDAgfHwKKwkJCWdvNzAwN19zZW5kX2Zpcm13YXJlKGdvLCBib3VuY2UsIGZ3X2xlbikgPCAwIHx8CisJCQlnbzcwMDdfcmVhZF9pbnRlcnJ1cHQoZ28sICZpbnRyX3ZhbCwgJmludHJfZGF0YSkgPCAwIHx8CisJCQkoaW50cl92YWwgJiB+MHgxKSAhPSAweDVhNWEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IGVycm9yIHRyYW5zZmVycmluZyBmaXJtd2FyZVxuIik7CisJCXJ2ID0gLTE7CisJfQorCWtmcmVlKGJvdW5jZSk7CisJcmV0dXJuIHJ2OworfQorCisvKgorICogQm9vdCB0aGUgZW5jb2RlciBhbmQgcmVnaXN0ZXIgdGhlIEkyQyBhZGFwdGVyIGlmIHJlcXVlc3RlZC4gIERvIHRoZQorICogbWluaW11bSBpbml0aWFsaXphdGlvbiBuZWNlc3NhcnksIHNpbmNlIHRoZSBib2FyZC1zcGVjaWZpYyBjb2RlIG1heQorICogc3RpbGwgbmVlZCB0byBwcm9iZSB0aGUgYm9hcmQgSUQuCisgKgorICogTXVzdCBOT1QgYmUgY2FsbGVkIHdpdGggdGhlIGh3X2xvY2sgaGVsZC4KKyAqLworaW50IGdvNzAwN19ib290X2VuY29kZXIoc3RydWN0IGdvNzAwNyAqZ28sIGludCBpbml0X2kyYykKK3sKKwlpbnQgcmV0OworCisJZG93bigmZ28tPmh3X2xvY2spOworCXJldCA9IGdvNzAwN19sb2FkX2VuY29kZXIoZ28pOworCXVwKCZnby0+aHdfbG9jayk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoIWluaXRfaTJjKQorCQlyZXR1cm4gMDsKKwlpZiAoZ283MDA3X2kyY19pbml0KGdvKSA8IDApCisJCXJldHVybiAtMTsKKwlnby0+aTJjX2FkYXB0ZXJfb25saW5lID0gMTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZ283MDA3X2Jvb3RfZW5jb2Rlcik7CisKKy8qCisgKiBDb25maWd1cmUgYW55IGhhcmR3YXJlLXJlbGF0ZWQgcmVnaXN0ZXJzIGluIHRoZSBHTzcwMDcsIHN1Y2ggYXMgR1BJTworICogcGlucyBhbmQgYnVzIHBhcmFtZXRlcnMsIHdoaWNoIGFyZSBib2FyZC1zcGVjaWZpYy4gIFRoaXMgYXNzdW1lcworICogdGhlIGJvb3QgZmlybXdhcmUgaGFzIGFscmVhZHkgYmVlbiBkb3dubG9hZGVkLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGh3X2xvY2sgaGVsZC4KKyAqLworc3RhdGljIGludCBnbzcwMDdfaW5pdF9lbmNvZGVyKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCWlmIChnby0+Ym9hcmRfaW5mby0+YXVkaW9fZmxhZ3MgJiBHTzcwMDdfQVVESU9fSTJTX01BU1RFUikgeworCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgxMDAwLCAweDA4MTEpOworCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgxMDAwLCAweDBjMTEpOworCX0KKwlpZiAoZ28tPmJvYXJkX2lkID09IEdPNzAwN19CT0FSRElEX01BVFJJWF9SRVYpIHsKKwkJLyogU2V0IEdQSU8gcGluIDAgdG8gYmUgYW4gb3V0cHV0IChhdWRpbyBjbG9jayBjb250cm9sKSAqLworCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgzYzgyLCAweDAwMDEpOworCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgzYzgwLCAweDAwZmUpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNlbmQgdGhlIGJvb3QgZmlybXdhcmUgdG8gdGhlIEdPNzAwNyBhbmQgY29uZmlndXJlIHRoZSByZWdpc3RlcnMuICBUaGlzCisgKiBpcyB0aGUgb25seSB3YXkgdG8gc3RvcCB0aGUgZW5jb2RlciBvbmNlIGl0IGhhcyBzdGFydGVkIHN0cmVhbWluZyB2aWRlby4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBod19sb2NrIGhlbGQuCisgKi8KK2ludCBnbzcwMDdfcmVzZXRfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlpZiAoZ283MDA3X2xvYWRfZW5jb2RlcihnbykgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGdvNzAwN19pbml0X2VuY29kZXIoZ28pOworfQorCisvKgorICogQXR0ZW1wdCB0byBpbnN0YW50aWF0ZSBhbiBJMkMgY2xpZW50IGJ5IElELCBwcm9iYWJseSBsb2FkaW5nIGEgbW9kdWxlLgorICovCitzdGF0aWMgaW50IGluaXRfaTJjX21vZHVsZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBpZCwgaW50IGFkZHIpCit7CisJY2hhciAqbW9kbmFtZTsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIEkyQ19EUklWRVJJRF9XSVNfU0FBNzExNToKKwkJbW9kbmFtZSA9ICJ3aXMtc2FhNzExNSI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX1dJU19TQUE3MTEzOgorCQltb2RuYW1lID0gIndpcy1zYWE3MTEzIjsKKwkJYnJlYWs7CisJY2FzZSBJMkNfRFJJVkVSSURfV0lTX1VEQTEzNDI6CisJCW1vZG5hbWUgPSAid2lzLXVkYTEzNDIiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9XSVNfU09OWV9UVU5FUjoKKwkJbW9kbmFtZSA9ICJ3aXMtc29ueS10dW5lciI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX1dJU19UVzk5MDM6CisJCW1vZG5hbWUgPSAid2lzLXR3OTkwMyI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX1dJU19UVzI4MDQ6CisJCW1vZG5hbWUgPSAid2lzLXR3MjgwNCI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX1dJU19PVjc2NDA6CisJCW1vZG5hbWUgPSAid2lzLW92NzY0MCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1vZG5hbWUgPSBOVUxMOworCQlicmVhazsKKwl9CisJaWYgKG1vZG5hbWUgIT0gTlVMTCkKKwkJcmVxdWVzdF9tb2R1bGUobW9kbmFtZSk7CisJaWYgKHdpc19pMmNfcHJvYmVfZGV2aWNlKGFkYXB0ZXIsIGlkLCBhZGRyKSA9PSAxKQorCQlyZXR1cm4gMDsKKwlpZiAobW9kbmFtZSAhPSBOVUxMKQorCQlwcmludGsoS0VSTl9JTkZPCisJCQkiZ283MDA3OiBwcm9iaW5nIGZvciBtb2R1bGUgJXMgZmFpbGVkIiwgbW9kbmFtZSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9JTkZPCisJCQkiZ283MDA3OiBzZW5zb3IgJXUgc2VlbXMgdG8gYmUgdW5zdXBwb3J0ZWQhXG4iLCBpZCk7CisJcmV0dXJuIC0xOworfQorCisvKgorICogRmluYWxpemUgdGhlIEdPNzAwNyBoYXJkd2FyZSBzZXR1cCwgcmVnaXN0ZXIgdGhlIG9uLWJvYXJkIEkyQyBhZGFwdGVyCisgKiAoaWYgdXNlZCBvbiB0aGlzIGJvYXJkKSwgbG9hZCB0aGUgSTJDIGNsaWVudCBkcml2ZXIgZm9yIHRoZSBzZW5zb3IKKyAqIChTQUE3MTE1IG9yIHdoYXRldmVyKSBhbmQgb3RoZXIgZGV2aWNlcywgYW5kIHJlZ2lzdGVyIHRoZSBBTFNBIGFuZCBWNEwyCisgKiBpbnRlcmZhY2VzLgorICoKKyAqIE11c3QgTk9UIGJlIGNhbGxlZCB3aXRoIHRoZSBod19sb2NrIGhlbGQuCisgKi8KK2ludCBnbzcwMDdfcmVnaXN0ZXJfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlpbnQgaSwgcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiZ283MDA3OiByZWdpc3RlcmluZyBuZXcgJXNcbiIsIGdvLT5uYW1lKTsKKworCWRvd24oJmdvLT5od19sb2NrKTsKKwlyZXQgPSBnbzcwMDdfaW5pdF9lbmNvZGVyKGdvKTsKKwl1cCgmZ28tPmh3X2xvY2spOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUgJiYKKwkJCWdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9VU0VfT05CT0FSRF9JMkMpIHsKKwkJaWYgKGdvNzAwN19pMmNfaW5pdChnbykgPCAwKQorCQkJcmV0dXJuIC0xOworCQlnby0+aTJjX2FkYXB0ZXJfb25saW5lID0gMTsKKwl9CisJaWYgKGdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpIHsKKwkJZm9yIChpID0gMDsgaSA8IGdvLT5ib2FyZF9pbmZvLT5udW1faTJjX2RldnM7ICsraSkKKwkJCWluaXRfaTJjX21vZHVsZSgmZ28tPmkyY19hZGFwdGVyLAorCQkJCQlnby0+Ym9hcmRfaW5mby0+aTJjX2RldnNbaV0uaWQsCisJCQkJCWdvLT5ib2FyZF9pbmZvLT5pMmNfZGV2c1tpXS5hZGRyKTsKKyNpZmRlZiBUVU5FUl9TRVRfVFlQRV9BRERSCisJCWlmIChnby0+dHVuZXJfdHlwZSA+PSAwKSB7CisJCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwID0geworCQkJCS5tb2RlX21hc2sJPSBUX0FOQUxPR19UViwKKwkJCQkuYWRkcgkJPSBBRERSX1VOU0VULAorCQkJCS50eXBlCQk9IGdvLT50dW5lcl90eXBlCisJCQl9OworCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCVRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOworCQl9CisjZWxzZQorCQlpZiAoZ28tPnR1bmVyX3R5cGUgPj0gMCkKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQlUVU5FUl9TRVRfVFlQRSwgJmdvLT50dW5lcl90eXBlKTsKKyNlbmRpZgorCQlpZiAoZ28tPmJvYXJkX2lkID09IEdPNzAwN19CT0FSRElEX0FETElOS19NUEcyNCkKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQlERUNPREVSX1NFVF9DSEFOTkVMLCAmZ28tPmNoYW5uZWxfbnVtYmVyKTsKKwl9CisJaWYgKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfQVVESU8pIHsKKwkJZ28tPmF1ZGlvX2VuYWJsZWQgPSAxOworCQlnbzcwMDdfc25kX2luaXQoZ28pOworCX0KKwlyZXR1cm4gZ283MDA3X3Y0bDJfaW5pdChnbyk7Cit9CitFWFBPUlRfU1lNQk9MKGdvNzAwN19yZWdpc3Rlcl9lbmNvZGVyKTsKKworLyoKKyAqIFNlbmQgdGhlIGVuY29kZSBmaXJtd2FyZSB0byB0aGUgZW5jb2Rlciwgd2hpY2ggd2lsbCBjYXVzZSBpdAorICogdG8gaW1tZWRpYXRlbHkgc3RhcnQgZGVsaXZlcmluZyB0aGUgdmlkZW8gYW5kIGF1ZGlvIHN0cmVhbXMuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgaHdfbG9jayBoZWxkLgorICovCitpbnQgZ283MDA3X3N0YXJ0X2VuY29kZXIoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJdTggKmZ3OworCWludCBmd19sZW4sIHJ2ID0gMCwgaTsKKwl1MTYgaW50cl92YWwsIGludHJfZGF0YTsKKworCWdvLT5tb2RldF9lbmFibGUgPSAwOworCWlmICghZ28tPmR2ZF9tb2RlKQorCQlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCQlpZiAoZ28tPm1vZGV0W2ldLmVuYWJsZSkgeworCQkJCWdvLT5tb2RldF9lbmFibGUgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZ28tPm1vZGV0W2ldLnBpeGVsX3RocmVzaG9sZCA9IDMyNzY3OworCQkJZ28tPm1vZGV0W2ldLm1vdGlvbl90aHJlc2hvbGQgPSAzMjc2NzsKKwkJCWdvLT5tb2RldFtpXS5tYl90aHJlc2hvbGQgPSAzMjc2NzsKKwkJfQorCisJaWYgKGdvNzAwN19jb25zdHJ1Y3RfZndfaW1hZ2UoZ28sICZmdywgJmZ3X2xlbikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZ283MDA3X3NlbmRfZmlybXdhcmUoZ28sIGZ3LCBmd19sZW4pIDwgMCB8fAorCQkJZ283MDA3X3JlYWRfaW50ZXJydXB0KGdvLCAmaW50cl92YWwsICZpbnRyX2RhdGEpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogZXJyb3IgdHJhbnNmZXJyaW5nIGZpcm13YXJlXG4iKTsKKwkJcnYgPSAtMTsKKwkJZ290byBzdGFydF9lcnJvcjsKKwl9CisKKwlnby0+c3RhdGUgPSBTVEFURV9EQVRBOworCWdvLT5wYXJzZV9sZW5ndGggPSAwOworCWdvLT5zZWVuX2ZyYW1lID0gMDsKKwlpZiAoZ283MDA3X3N0cmVhbV9zdGFydChnbykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiBlcnJvciBzdGFydGluZyBzdHJlYW0gdHJhbnNmZXJcbiIpOworCQlydiA9IC0xOworCQlnb3RvIHN0YXJ0X2Vycm9yOworCX0KKworc3RhcnRfZXJyb3I6CisJa2ZyZWUoZncpOworCXJldHVybiBydjsKK30KKworLyoKKyAqIFN0b3JlIGEgYnl0ZSBpbiB0aGUgY3VycmVudCB2aWRlbyBidWZmZXIsIGlmIHRoZXJlIGlzIG9uZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX2J5dGUoc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmLCB1OCBieXRlKQoreworCWlmIChnb2J1ZiAhPSBOVUxMICYmIGdvYnVmLT5ieXRlc3VzZWQgPCBHTzcwMDdfQlVGX1NJWkUpIHsKKwkJdW5zaWduZWQgaW50IHBnaWR4ID0gZ29idWYtPm9mZnNldCA+PiBQQUdFX1NISUZUOworCQl1bnNpZ25lZCBpbnQgcGdvZmYgPSBnb2J1Zi0+b2Zmc2V0ICYgflBBR0VfTUFTSzsKKworCQkqKCh1OCAqKXBhZ2VfYWRkcmVzcyhnb2J1Zi0+cGFnZXNbcGdpZHhdKSArIHBnb2ZmKSA9IGJ5dGU7CisJCSsrZ29idWYtPm9mZnNldDsKKwkJKytnb2J1Zi0+Ynl0ZXN1c2VkOworCX0KK30KKworLyoKKyAqIERlbGl2ZXIgdGhlIGxhc3QgdmlkZW8gYnVmZmVyIGFuZCBnZXQgYSBuZXcgb25lIHRvIHN0YXJ0IHdyaXRpbmcgdG8uCisgKi8KK3N0YXRpYyB2b2lkIGZyYW1lX2JvdW5kYXJ5KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBnbzcwMDdfYnVmZmVyICpnb2J1ZjsKKwlpbnQgaTsKKworCWlmIChnby0+YWN0aXZlX2J1ZikgeworCQlpZiAoZ28tPmFjdGl2ZV9idWYtPm1vZGV0X2FjdGl2ZSkgeworCQkJaWYgKGdvLT5hY3RpdmVfYnVmLT5ieXRlc3VzZWQgKyAyMTYgPCBHTzcwMDdfQlVGX1NJWkUpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgMjE2OyArK2kpCisJCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsCisJCQkJCQkJZ28tPmFjdGl2ZV9tYXBbaV0pOworCQkJCWdvLT5hY3RpdmVfYnVmLT5ieXRlc3VzZWQgLT0gMjE2OworCQkJfSBlbHNlCisJCQkJZ28tPmFjdGl2ZV9idWYtPm1vZGV0X2FjdGl2ZSA9IDA7CisJCX0KKwkJZ28tPmFjdGl2ZV9idWYtPnN0YXRlID0gQlVGX1NUQVRFX0RPTkU7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ28tPmZyYW1lX3dhaXRxKTsKKwkJZ28tPmFjdGl2ZV9idWYgPSBOVUxMOworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdvYnVmLCAmZ28tPnN0cmVhbSwgc3RyZWFtKQorCQlpZiAoZ29idWYtPnN0YXRlID09IEJVRl9TVEFURV9RVUVVRUQpIHsKKwkJCWdvYnVmLT5zZXEgPSBnby0+bmV4dF9zZXE7CisJCQlkb19nZXR0aW1lb2ZkYXkoJmdvYnVmLT50aW1lc3RhbXApOworCQkJZ28tPmFjdGl2ZV9idWYgPSBnb2J1ZjsKKwkJCWJyZWFrOworCQl9CisJKytnby0+bmV4dF9zZXE7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2JpdG1hcF93b3JkKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCWludCB4LCB5LCBpLCBzdHJpZGUgPSAoKGdvLT53aWR0aCA+PiA0KSArIDcpID4+IDM7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkgeworCQl5ID0gKCgoZ28tPnBhcnNlX2xlbmd0aCAtIDEpIDw8IDMpICsgaSkgLyAoZ28tPndpZHRoID4+IDQpOworCQl4ID0gKCgoZ28tPnBhcnNlX2xlbmd0aCAtIDEpIDw8IDMpICsgaSkgJSAoZ28tPndpZHRoID4+IDQpOworCQlnby0+YWN0aXZlX21hcFtzdHJpZGUgKiB5ICsgKHggPj4gMyldIHw9CisJCQkJCShnby0+bW9kZXRfd29yZCAmIDEpIDw8ICh4ICYgMHg3KTsKKwkJZ28tPm1vZGV0X3dvcmQgPj49IDE7CisJfQorfQorCisvKgorICogUGFyc2UgYSBjaHVuayBvZiB0aGUgdmlkZW8gc3RyZWFtIGludG8gZnJhbWVzLiAgVGhlIGZyYW1lcyBhcmUgbm90CisgKiBkZWxpbWl0ZWQgYnkgdGhlIGhhcmR3YXJlLCBzbyB3ZSBoYXZlIHRvIHBhcnNlIHRoZSBmcmFtZSBib3VuZGFyaWVzCisgKiBiYXNlZCBvbiB0aGUgdHlwZSBvZiB2aWRlbyBzdHJlYW0gd2UncmUgcmVjZWl2aW5nLgorICovCit2b2lkIGdvNzAwN19wYXJzZV92aWRlb19zdHJlYW0oc3RydWN0IGdvNzAwNyAqZ28sIHU4ICpidWYsIGludCBsZW5ndGgpCit7CisJaW50IGksIHNlcV9zdGFydF9jb2RlID0gLTEsIGZyYW1lX3N0YXJ0X2NvZGUgPSAtMTsKKworCXNwaW5fbG9jaygmZ28tPnNwaW5sb2NrKTsKKworCXN3aXRjaCAoZ28tPmZvcm1hdCkgeworCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHNDoKKwkJc2VxX3N0YXJ0X2NvZGUgPSAweEIwOworCQlmcmFtZV9zdGFydF9jb2RlID0gMHhCNjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcxOgorCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMjoKKwkJc2VxX3N0YXJ0X2NvZGUgPSAweEIzOworCQlmcmFtZV9zdGFydF9jb2RlID0gMHgwMDsKKwkJYnJlYWs7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisJCWlmIChnby0+YWN0aXZlX2J1ZiAhPSBOVUxMICYmCisJCQkgICAgZ28tPmFjdGl2ZV9idWYtPmJ5dGVzdXNlZCA+PSBHTzcwMDdfQlVGX1NJWkUgLSAzKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3OiBkcm9wcGluZyBvdmVyc2l6ZWQgZnJhbWVcbiIpOworCQkJZ28tPmFjdGl2ZV9idWYtPm9mZnNldCAtPSBnby0+YWN0aXZlX2J1Zi0+Ynl0ZXN1c2VkOworCQkJZ28tPmFjdGl2ZV9idWYtPmJ5dGVzdXNlZCA9IDA7CisJCQlnby0+YWN0aXZlX2J1Zi0+bW9kZXRfYWN0aXZlID0gMDsKKwkJCWdvLT5hY3RpdmVfYnVmID0gTlVMTDsKKwkJfQorCisJCXN3aXRjaCAoZ28tPnN0YXRlKSB7CisJCWNhc2UgU1RBVEVfREFUQToKKwkJCXN3aXRjaCAoYnVmW2ldKSB7CisJCQljYXNlIDB4MDA6CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfMDA7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4RkY6CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfRkY7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIGJ1ZltpXSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV8wMDoKKwkJCXN3aXRjaCAoYnVmW2ldKSB7CisJCQljYXNlIDB4MDA6CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfMDBfMDA7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4RkY6CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMCk7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfRkY7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIGJ1ZltpXSk7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfREFUQTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUQVRFXzAwXzAwOgorCQkJc3dpdGNoIChidWZbaV0pIHsKKwkJCWNhc2UgMHgwMDoKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQkvKiBnby0+c3RhdGUgcmVtYWlucyBTVEFURV8wMF8wMCAqLworCQkJCWJyZWFrOworCQkJY2FzZSAweDAxOgorCQkJCWdvLT5zdGF0ZSA9IFNUQVRFXzAwXzAwXzAxOworCQkJCWJyZWFrOworCQkJY2FzZSAweEZGOgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0ZGOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCBidWZbaV0pOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0RBVEE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV8wMF8wMF8wMToKKwkJCS8qIElmIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgbmV3IE1QRUcgZnJhbWUsCisJCQkgKiBnZXQgYSBuZXcgYnVmZmVyICovCisJCQlpZiAoKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMSB8fAorCQkJCQlnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIgfHwKKwkJCQkJZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0KSAmJgorCQkJCQkoYnVmW2ldID09IHNlcV9zdGFydF9jb2RlIHx8CisJCQkJCQlidWZbaV0gPT0gMHhCOCB8fCAvKiBHT1AgY29kZSAqLworCQkJCQkJYnVmW2ldID09IGZyYW1lX3N0YXJ0X2NvZGUpKSB7CisJCQkJaWYgKGdvLT5hY3RpdmVfYnVmID09IE5VTEwgfHwgZ28tPnNlZW5fZnJhbWUpCisJCQkJCWZyYW1lX2JvdW5kYXJ5KGdvKTsKKwkJCQlpZiAoYnVmW2ldID09IGZyYW1lX3N0YXJ0X2NvZGUpIHsKKwkJCQkJaWYgKGdvLT5hY3RpdmVfYnVmICE9IE5VTEwpCisJCQkJCQlnby0+YWN0aXZlX2J1Zi0+ZnJhbWVfb2Zmc2V0ID0KKwkJCQkJCQlnby0+YWN0aXZlX2J1Zi0+b2Zmc2V0OworCQkJCQlnby0+c2Vlbl9mcmFtZSA9IDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJZ28tPnNlZW5fZnJhbWUgPSAwOworCQkJCX0KKwkJCX0KKwkJCS8qIEhhbmRsZSBhbnkgc3BlY2lhbCBjaHVuayB0eXBlcywgb3IganVzdCB3cml0ZSB0aGUKKwkJCSAqIHN0YXJ0IGNvZGUgdG8gdGhlIChwb3RlbnRpYWxseSBuZXcpIGJ1ZmZlciAqLworCQkJc3dpdGNoIChidWZbaV0pIHsKKwkJCWNhc2UgMHhGNTogLyogdGltZXN0YW1wICovCisJCQkJZ28tPnBhcnNlX2xlbmd0aCA9IDEyOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX1VOUEFSU0VEOworCQkJCWJyZWFrOworCQkJY2FzZSAweEY2OiAvKiB2YmkgKi8KKwkJCQlnby0+c3RhdGUgPSBTVEFURV9WQklfTEVOX0E7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4Rjg6IC8qIE1EIG1hcCAqLworCQkJCWdvLT5wYXJzZV9sZW5ndGggPSAwOworCQkJCW1lbXNldChnby0+YWN0aXZlX21hcCwgMCwKKwkJCQkJCXNpemVvZihnby0+YWN0aXZlX21hcCkpOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX01PREVUX01BUDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHhGRjogLyogUG90ZW50aWFsIEpQRUcgc3RhcnQgY29kZSAqLworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDEpOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0ZGOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAxKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCBidWZbaV0pOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0RBVEE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9GRjoKKwkJCXN3aXRjaCAoYnVmW2ldKSB7CisJCQljYXNlIDB4MDA6CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHhGRik7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfMDA7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4RkY6CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHhGRik7CisJCQkJLyogZ28tPnN0YXRlIHJlbWFpbnMgU1RBVEVfRkYgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgMHhEODoKKwkJCQlpZiAoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01KUEVHKQorCQkJCQlmcmFtZV9ib3VuZGFyeShnbyk7CisJCQkJLyogZmFsbCB0aHJvdWdoICovCisJCQlkZWZhdWx0OgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4RkYpOworCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIGJ1ZltpXSk7CisJCQkJZ28tPnN0YXRlID0gU1RBVEVfREFUQTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX1ZCSV9MRU5fQToKKwkJCWdvLT5wYXJzZV9sZW5ndGggPSBidWZbaV0gPDwgODsKKwkJCWdvLT5zdGF0ZSA9IFNUQVRFX1ZCSV9MRU5fQjsKKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX1ZCSV9MRU5fQjoKKwkJCWdvLT5wYXJzZV9sZW5ndGggfD0gYnVmW2ldOworCQkJaWYgKGdvLT5wYXJzZV9sZW5ndGggPiAwKQorCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX1VOUEFSU0VEOworCQkJZWxzZQorCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0RBVEE7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9NT0RFVF9NQVA6CisJCQlpZiAoZ28tPnBhcnNlX2xlbmd0aCA8IDIwNCkgeworCQkJCWlmIChnby0+cGFyc2VfbGVuZ3RoICYgMSkgeworCQkJCQlnby0+bW9kZXRfd29yZCB8PSBidWZbaV07CisJCQkJCXdyaXRlX2JpdG1hcF93b3JkKGdvKTsKKwkJCQl9IGVsc2UKKwkJCQkJZ28tPm1vZGV0X3dvcmQgPSBidWZbaV0gPDwgODsKKwkJCX0gZWxzZSBpZiAoZ28tPnBhcnNlX2xlbmd0aCA9PSAyMDcgJiYgZ28tPmFjdGl2ZV9idWYpIHsKKwkJCQlnby0+YWN0aXZlX2J1Zi0+bW9kZXRfYWN0aXZlID0gYnVmW2ldOworCQkJfQorCQkJaWYgKCsrZ28tPnBhcnNlX2xlbmd0aCA9PSAyMDgpCisJCQkJZ28tPnN0YXRlID0gU1RBVEVfREFUQTsKKwkJCWJyZWFrOworCQljYXNlIFNUQVRFX1VOUEFSU0VEOgorCQkJaWYgKC0tZ28tPnBhcnNlX2xlbmd0aCA9PSAwKQorCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0RBVEE7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZnby0+c3BpbmxvY2spOworfQorRVhQT1JUX1NZTUJPTChnbzcwMDdfcGFyc2VfdmlkZW9fc3RyZWFtKTsKKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGdvNzAwNyBzdHJ1Y3QuICBVc2VkIGJ5IHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBwcm9iZS4KKyAqLworc3RydWN0IGdvNzAwNyAqZ283MDA3X2FsbG9jKHN0cnVjdCBnbzcwMDdfYm9hcmRfaW5mbyAqYm9hcmQsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbzsKKwlpbnQgaTsKKworCWdvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdvNzAwNyksIEdGUF9LRVJORUwpOworCWlmIChnbyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlnby0+ZGV2ID0gZGV2OworCWdvLT5ib2FyZF9pbmZvID0gYm9hcmQ7CisJZ28tPmJvYXJkX2lkID0gMDsKKwlnby0+dHVuZXJfdHlwZSA9IC0xOworCWdvLT5jaGFubmVsX251bWJlciA9IDA7CisJZ28tPm5hbWVbMF0gPSAwOworCWluaXRfTVVURVgoJmdvLT5od19sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZnby0+ZnJhbWVfd2FpdHEpOworCXNwaW5fbG9ja19pbml0KCZnby0+c3BpbmxvY2spOworCWdvLT52aWRlb19kZXYgPSBOVUxMOworCWdvLT5yZWZfY291bnQgPSAwOworCWdvLT5zdGF0dXMgPSBTVEFUVVNfSU5JVDsKKwltZW1zZXQoJmdvLT5pMmNfYWRhcHRlciwgMCwgc2l6ZW9mKGdvLT5pMmNfYWRhcHRlcikpOworCWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUgPSAwOworCWdvLT5pbnRlcnJ1cHRfYXZhaWxhYmxlID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZnby0+aW50ZXJydXB0X3dhaXRxKTsKKwlnby0+aW5fdXNlID0gMDsKKwlnby0+aW5wdXQgPSAwOworCWlmIChib2FyZC0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UVikgeworCQlnby0+c3RhbmRhcmQgPSBHTzcwMDdfU1REX05UU0M7CisJCWdvLT53aWR0aCA9IDcyMDsKKwkJZ28tPmhlaWdodCA9IDQ4MDsKKwkJZ28tPnNlbnNvcl9mcmFtZXJhdGUgPSAzMDAwMDsKKwl9IGVsc2UgeworCQlnby0+c3RhbmRhcmQgPSBHTzcwMDdfU1REX09USEVSOworCQlnby0+d2lkdGggPSBib2FyZC0+c2Vuc29yX3dpZHRoOworCQlnby0+aGVpZ2h0ID0gYm9hcmQtPnNlbnNvcl9oZWlnaHQ7CisJCWdvLT5zZW5zb3JfZnJhbWVyYXRlID0gYm9hcmQtPnNlbnNvcl9mcmFtZXJhdGU7CisJfQorCWdvLT5lbmNvZGVyX3Zfb2Zmc2V0ID0gYm9hcmQtPnNlbnNvcl92X29mZnNldDsKKwlnby0+ZW5jb2Rlcl9oX29mZnNldCA9IGJvYXJkLT5zZW5zb3JfaF9vZmZzZXQ7CisJZ28tPmVuY29kZXJfaF9oYWx2ZSA9IDA7CisJZ28tPmVuY29kZXJfdl9oYWx2ZSA9IDA7CisJZ28tPmVuY29kZXJfc3Vic2FtcGxlID0gMDsKKwlnby0+c3RyZWFtaW5nID0gMDsKKwlnby0+Zm9ybWF0ID0gR083MDA3X0ZPUk1BVF9NSlBFRzsKKwlnby0+Yml0cmF0ZSA9IDE1MDAwMDA7CisJZ28tPmZwc19zY2FsZSA9IDE7CisJZ28tPnBhbGkgPSAwOworCWdvLT5hc3BlY3RfcmF0aW8gPSBHTzcwMDdfUkFUSU9fMV8xOworCWdvLT5nb3Bfc2l6ZSA9IDA7CisJZ28tPmlwYiA9IDA7CisJZ28tPmNsb3NlZF9nb3AgPSAwOworCWdvLT5yZXBlYXRfc2VxaGVhZCA9IDA7CisJZ28tPnNlcV9oZWFkZXJfZW5hYmxlID0gMDsKKwlnby0+Z29wX2hlYWRlcl9lbmFibGUgPSAwOworCWdvLT5kdmRfbW9kZSA9IDA7CisJZ28tPmludGVybGFjZV9jb2RpbmcgPSAwOworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJCWdvLT5tb2RldFtpXS5lbmFibGUgPSAwOzsKKwlmb3IgKGkgPSAwOyBpIDwgMTYyNDsgKytpKQorCQlnby0+bW9kZXRfbWFwW2ldID0gMDsKKwlnby0+YXVkaW9fZGVsaXZlciA9IE5VTEw7CisJZ28tPmF1ZGlvX2VuYWJsZWQgPSAwOworCUlOSVRfTElTVF9IRUFEKCZnby0+c3RyZWFtKTsKKworCXJldHVybiBnbzsKK30KK0VYUE9SVF9TWU1CT0woZ283MDA3X2FsbG9jKTsKKworLyoKKyAqIERldGFjaCBhbmQgdW5yZWdpc3RlciB0aGUgZW5jb2Rlci4gIFRoZSBnbzcwMDcgc3RydWN0IHdvbid0IGJlIGZyZWVkCisgKiB1bnRpbCB2NGwyIGZpbmlzaGVzIHJlbGVhc2luZyBpdHMgcmVzb3VyY2VzIGFuZCBhbGwgYXNzb2NpYXRlZCBmZHMgYXJlCisgKiBjbG9zZWQgYnkgYXBwbGljYXRpb25zLgorICovCit2b2lkIGdvNzAwN19yZW1vdmUoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJaWYgKGdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpIHsKKwkJaWYgKGkyY19kZWxfYWRhcHRlcigmZ28tPmkyY19hZGFwdGVyKSA9PSAwKQorCQkJZ28tPmkyY19hZGFwdGVyX29ubGluZSA9IDA7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJnbzcwMDc6IGVycm9yIHJlbW92aW5nIEkyQyBhZGFwdGVyIVxuIik7CisJfQorCisJaWYgKGdvLT5hdWRpb19lbmFibGVkKQorCQlnbzcwMDdfc25kX3JlbW92ZShnbyk7CisJZ283MDA3X3Y0bDJfcmVtb3ZlKGdvKTsKK30KK0VYUE9SVF9TWU1CT0woZ283MDA3X3JlbW92ZSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWZ3LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1mdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYWVhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1mdy5jCkBAIC0wLDAgKzEsMTYzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIHRvIGdlbmVyYXRlIGEgZmlybXdhcmUgaW1hZ2UgZm9yIHRoZSBHTzcwMDdTQgorICogZW5jb2Rlci4gIE11Y2ggb2YgdGhlIGZpcm13YXJlIGlzIHJlYWQgdmVyYmF0aW0gZnJvbSBhIGZpbGUsIGJ1dCBzb21lIG9mCisgKiBpdCBjb25jZXJuaW5nIGJpdHJhdGUgY29udHJvbCBhbmQgb3RoZXIgdGhpbmdzIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgYXQKKyAqIHJ1bi10aW1lIGFyZSBnZW5lcmF0ZWQgZHluYW1pY2FsbHkuICBOb3RlIHRoYXQgdGhlIGZvcm1hdCBoZWFkZXJzCisgKiBnZW5lcmF0ZWQgaGVyZSBkbyBub3QgYWZmZWN0IHRoZSBmdW5jdGlvbmluZyBvZiB0aGUgZW5jb2RlcjsgdGhleSBhcmUKKyAqIG1lcmVseSBwYXJyb3RlZCBiYWNrIHRvIHRoZSBob3N0IGF0IHRoZSBzdGFydCBvZiBlYWNoIGZyYW1lLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaW5jbHVkZSAiZ283MDA3LXByaXYuaCIKKworLyogQ29uc3RhbnRzIHVzZWQgaW4gdGhlIHNvdXJjZSBmaXJtd2FyZSBpbWFnZSB0byBkZXNjcmliZSBjb2RlIHNlZ21lbnRzICovCisKKyNkZWZpbmUJRkxBR19NT0RFX01KUEVHCQkoMSkKKyNkZWZpbmUJRkxBR19NT0RFX01QRUcxCQkoMTw8MSkKKyNkZWZpbmUJRkxBR19NT0RFX01QRUcyCQkoMTw8MikKKyNkZWZpbmUJRkxBR19NT0RFX01QRUc0CQkoMTw8MykKKyNkZWZpbmUJRkxBR19NT0RFX0gyNjMJCSgxPDw0KQorI2RlZmluZSBGTEFHX01PREVfQUxMCQkoRkxBR19NT0RFX01KUEVHIHwgRkxBR19NT0RFX01QRUcxIHwgXAorCQkJCQlGTEFHX01PREVfTVBFRzIgfCBGTEFHX01PREVfTVBFRzQgfCBcCisJCQkJCUZMQUdfTU9ERV9IMjYzKQorI2RlZmluZSBGTEFHX1NQRUNJQUwJCSgxPDw4KQorCisjZGVmaW5lIFNQRUNJQUxfRlJNX0hFQUQJMAorI2RlZmluZSBTUEVDSUFMX0JSQ19DVFJMCTEKKyNkZWZpbmUgU1BFQ0lBTF9DT05GSUcJCTIKKyNkZWZpbmUgU1BFQ0lBTF9TRVFIRUFECQkzCisjZGVmaW5lIFNQRUNJQUxfQVZfU1lOQwkJNAorI2RlZmluZSBTUEVDSUFMX0ZJTkFMCQk1CisjZGVmaW5lIFNQRUNJQUxfQVVESU8JCTYKKyNkZWZpbmUgU1BFQ0lBTF9NT0RFVAkJNworCisvKiBMaXR0bGUgZGF0YSBjbGFzcyBmb3IgY3JlYXRpbmcgTVBFRyBoZWFkZXJzIGJpdC1ieS1iaXQgKi8KKworc3RydWN0IGNvZGVfZ2VuIHsKKwl1bnNpZ25lZCBjaGFyICpwOyAvKiBkZXN0aW5hdGlvbiAqLworCXUzMiBhOyAvKiBjb2xsZWN0cyBiaXRzIGF0IHRoZSB0b3Agb2YgdGhlIHZhcmlhYmxlICovCisJaW50IGI7IC8qIGJpdCBwb3NpdGlvbiBvZiBtb3N0IHJlY2VudGx5LXdyaXR0ZW4gYml0ICovCisJaW50IGxlbjsgLyogd3JpdHRlbiBvdXQgc28gZmFyICovCit9OworCisjZGVmaW5lIENPREVfR0VOKG5hbWUsIGRlc3QpIHN0cnVjdCBjb2RlX2dlbiBuYW1lID0geyBkZXN0LCAwLCAzMiwgMCB9CisKKyNkZWZpbmUgQ09ERV9BREQobmFtZSwgdmFsLCBsZW5ndGgpIGRvIHsgXAorCW5hbWUuYiAtPSAobGVuZ3RoKTsgXAorCW5hbWUuYSB8PSAodmFsKSA8PCBuYW1lLmI7IFwKKwl3aGlsZSAobmFtZS5iIDw9IDI0KSB7IFwKKwkJKm5hbWUucCA9IG5hbWUuYSA+PiAyNDsgXAorCQkrK25hbWUucDsgXAorCQluYW1lLmEgPDw9IDg7IFwKKwkJbmFtZS5iICs9IDg7IFwKKwkJbmFtZS5sZW4gKz0gODsgXAorCX0gXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBDT0RFX0xFTkdUSChuYW1lKSAobmFtZS5sZW4gKyAoMzIgLSBuYW1lLmIpKQorCisvKiBUYWJsZXMgZm9yIGNyZWF0aW5nIHRoZSBiaXRyYXRlIGNvbnRyb2wgZGF0YSAqLworCitzdGF0aWMgY29uc3QgczE2IGNvbnZlcmdlX3NwZWVkX2lwWzEwMV0gPSB7CisJMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKwkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorCTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCisJMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMiwKKwkyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAzLAorCTMsIDMsIDMsIDMsIDMsIDQsIDQsIDQsIDQsIDQsCisJNSwgNSwgNSwgNiwgNiwgNiwgNywgNywgOCwgOCwKKwk5LCAxMCwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LAorCTE5LCAyMCwgMjIsIDIzLCAyNSwgMjcsIDMwLCAzMiwgMzUsIDM4LAorCTQxLCA0NSwgNDksIDUzLCA1OCwgNjMsIDY5LCA3NiwgODMsIDkxLAorCTEwMAorfTsKKworc3RhdGljIGNvbnN0IHMxNiBjb252ZXJnZV9zcGVlZF9pcGJbMTAxXSA9IHsKKwkzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLAorCTMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsCisJMywgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNCwKKwk0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCA1LCA2LAorCTYsIDYsIDYsIDcsIDcsIDcsIDcsIDgsIDgsIDksCisJOSwgOSwgMTAsIDEwLCAxMSwgMTIsIDEyLCAxMywgMTQsIDE0LAorCTE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIyLCAyMywgMjUsIDI2LAorCTI4LCAzMCwgMzIsIDM0LCAzNywgNDAsIDQyLCA0NiwgNDksIDUzLAorCTU3LCA2MSwgNjYsIDcxLCA3NywgODMsIDkwLCA5NywgMTA2LCAxMTUsCisJMTI1LCAxMzUsIDE0NywgMTYxLCAxNzUsIDE5MSwgMjA5LCAyMjgsIDI0OSwgMjczLAorCTMwMAorfTsKKworc3RhdGljIGNvbnN0IHMxNiBMQU1CREFfdGFibGVbNF1bMTAxXSA9IHsKKwl7CTE2LCAxNiwgMTYsIDE2LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LAorCQkxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIyLCAyMiwKKwkJMjIsIDIzLCAyMywgMjQsIDI0LCAyNSwgMjUsIDI1LCAyNiwgMjYsCisJCTI3LCAyNywgMjgsIDI4LCAyOSwgMjksIDMwLCAzMSwgMzEsIDMyLAorCQkzMiwgMzMsIDMzLCAzNCwgMzUsIDM1LCAzNiwgMzcsIDM3LCAzOCwKKwkJMzksIDM5LCA0MCwgNDEsIDQyLCA0MiwgNDMsIDQ0LCA0NSwgNDYsCisJCTQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LAorCQk1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwKKwkJNjcsIDY4LCA2OSwgNzAsIDcyLCA3MywgNzQsIDc2LCA3NywgNzgsCisJCTgwLCA4MSwgODMsIDg0LCA4NiwgODcsIDg5LCA5MCwgOTIsIDk0LAorCQk5NgorCX0sCisJeworCQkyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMiwgMjIsIDIzLCAyMywKKwkJMjMsIDI0LCAyNCwgMjUsIDI1LCAyNiwgMjYsIDI3LCAyNywgMjgsCisJCTI4LCAyOSwgMjksIDMwLCAzMCwgMzEsIDMxLCAzMiwgMzMsIDMzLAorCQkzNCwgMzQsIDM1LCAzNiwgMzYsIDM3LCAzOCwgMzgsIDM5LCA0MCwKKwkJNDAsIDQxLCA0MiwgNDMsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsCisJCTQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LAorCQk1OCwgNTksIDYwLCA2MSwgNjIsIDY0LCA2NSwgNjYsIDY3LCA2OCwKKwkJNzAsIDcxLCA3MiwgNzMsIDc1LCA3NiwgNzgsIDc5LCA4MCwgODIsCisJCTgzLCA4NSwgODYsIDg4LCA5MCwgOTEsIDkzLCA5NSwgOTYsIDk4LAorCQkxMDAsIDEwMiwgMTAzLCAxMDUsIDEwNywgMTA5LCAxMTEsIDExMywgMTE1LCAxMTcsCisJCTEyMAorCX0sCisJeworCQkyNCwgMjQsIDI0LCAyNSwgMjUsIDI2LCAyNiwgMjcsIDI3LCAyOCwKKwkJMjgsIDI5LCAyOSwgMzAsIDMwLCAzMSwgMzEsIDMyLCAzMywgMzMsCisJCTM0LCAzNCwgMzUsIDM2LCAzNiwgMzcsIDM4LCAzOCwgMzksIDQwLAorCQk0MSwgNDEsIDQyLCA0MywgNDQsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwKKwkJNDksIDUwLCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsCisJCTU4LCA1OSwgNjAsIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY5LAorCQk3MCwgNzEsIDcyLCA3NCwgNzUsIDc2LCA3OCwgNzksIDgxLCA4MiwKKwkJODQsIDg1LCA4NywgODgsIDkwLCA5MiwgOTMsIDk1LCA5NywgOTgsCisJCTEwMCwgMTAyLCAxMDQsIDEwNiwgMTA4LCAxMTAsIDExMiwgMTE0LCAxMTYsIDExOCwKKwkJMTIwLCAxMjIsIDEyNCwgMTI3LCAxMjksIDEzMSwgMTM0LCAxMzYsIDEzOCwgMTQxLAorCQkxNDQKKwl9LAorCXsKKwkJMzIsIDMyLCAzMywgMzMsIDM0LCAzNCwgMzUsIDM2LCAzNiwgMzcsCisJCTM4LCAzOCwgMzksIDQwLCA0MSwgNDEsIDQyLCA0MywgNDQsIDQ0LAorCQk0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MCwgNTEsIDUyLCA1MywKKwkJNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYyLCA2MywgNjQsCisJCTY1LCA2NiwgNjcsIDY5LCA3MCwgNzEsIDcyLCA3NCwgNzUsIDc2LAorCQk3OCwgNzksIDgxLCA4MiwgODQsIDg1LCA4NywgODgsIDkwLCA5MiwKKwkJOTMsIDk1LCA5NywgOTgsIDEwMCwgMTAyLCAxMDQsIDEwNiwgMTA4LCAxMTAsCisJCTExMiwgMTE0LCAxMTYsIDExOCwgMTIwLCAxMjIsIDEyNCwgMTI3LCAxMjksIDEzMSwKKwkJMTM0LCAxMzYsIDEzOSwgMTQxLCAxNDQsIDE0NiwgMTQ5LCAxNTIsIDE1NCwgMTU3LAorCQkxNjAsIDE2MywgMTY2LCAxNjksIDE3MiwgMTc1LCAxNzgsIDE4MSwgMTg1LCAxODgsCisJCTE5MgorCX0KK307CisKKy8qIE1QRUcgYmxhbmsgZnJhbWUgZ2VuZXJhdGlvbiB0YWJsZXMgKi8KKworZW51bSBtcGVnX2ZyYW1lX3R5cGUgeworCVBGUkFNRSwKKwlCRlJBTUVfUFJFLAorCUJGUkFNRV9QT1NULAorCUJGUkFNRV9CSURJUiwKKwlCRlJBTUVfRU1QVFkKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYWRkcmluY3RhYlszM11bMl0gPSB7CisJeyAweDAxLCAxIH0sCXsgMHgwMywgMyB9LAl7IDB4MDIsIDMgfSwJeyAweDAzLCA0IH0sCisJeyAweDAyLCA0IH0sCXsgMHgwMywgNSB9LAl7IDB4MDIsIDUgfSwJeyAweDA3LCA3IH0sCisJeyAweDA2LCA3IH0sCXsgMHgwYiwgOCB9LAl7IDB4MGEsIDggfSwJeyAweDA5LCA4IH0sCisJeyAweDA4LCA4IH0sCXsgMHgwNywgOCB9LAl7IDB4MDYsIDggfSwJeyAweDE3LCAxMCB9LAorCXsgMHgxNiwgMTAgfSwJeyAweDE1LCAxMCB9LAl7IDB4MTQsIDEwIH0sCXsgMHgxMywgMTAgfSwKKwl7IDB4MTIsIDEwIH0sCXsgMHgyMywgMTEgfSwJeyAweDIyLCAxMSB9LAl7IDB4MjEsIDExIH0sCisJeyAweDIwLCAxMSB9LAl7IDB4MWYsIDExIH0sCXsgMHgxZSwgMTEgfSwJeyAweDFkLCAxMSB9LAorCXsgMHgxYywgMTEgfSwJeyAweDFiLCAxMSB9LAl7IDB4MWEsIDExIH0sCXsgMHgxOSwgMTEgfSwKKwl7IDB4MTgsIDExIH0KK307CisKKy8qIFN0YW5kYXJkIEpQRUcgdGFibGVzICovCisKK3N0YXRpYyBjb25zdCB1OCBkZWZhdWx0X2ludHJhX3F1YW50X3RhYmxlW10gPSB7CisJIDgsIDE2LCAxOSwgMjIsIDI2LCAyNywgMjksIDM0LAorCTE2LCAxNiwgMjIsIDI0LCAyNywgMjksIDM0LCAzNywKKwkxOSwgMjIsIDI2LCAyNywgMjksIDM0LCAzNCwgMzgsCisJMjIsIDIyLCAyNiwgMjcsIDI5LCAzNCwgMzcsIDQwLAorCTIyLCAyNiwgMjcsIDI5LCAzMiwgMzUsIDQwLCA0OCwKKwkyNiwgMjcsIDI5LCAzMiwgMzUsIDQwLCA0OCwgNTgsCisJMjYsIDI3LCAyOSwgMzQsIDM4LCA0NiwgNTYsIDY5LAorCTI3LCAyOSwgMzUsIDM4LCA0NiwgNTYsIDY5LCA4MworfTsKKworc3RhdGljIGNvbnN0IHU4IGJpdHNfZGNfbHVtaW5hbmNlW10gPSB7CisJMCwgMCwgMSwgNSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMAorfTsKKworc3RhdGljIGNvbnN0IHU4IHZhbF9kY19sdW1pbmFuY2VbXSA9IHsKKwkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEKK307CisKK3N0YXRpYyBjb25zdCB1OCBiaXRzX2RjX2Nocm9taW5hbmNlW10gPSB7CisJMCwgMCwgMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMAorfTsKKworc3RhdGljIGNvbnN0IHU4IHZhbF9kY19jaHJvbWluYW5jZVtdID0geworCTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMQorfTsKKworc3RhdGljIGNvbnN0IHU4IGJpdHNfYWNfbHVtaW5hbmNlW10gPSB7CisJMCwgMCwgMiwgMSwgMywgMywgMiwgNCwgMywgNSwgNSwgNCwgNCwgMCwgMCwgMSwgMHg3ZAorfTsKKworc3RhdGljIGNvbnN0IHU4IHZhbF9hY19sdW1pbmFuY2VbXSA9IHsKKwkweDAxLCAweDAyLCAweDAzLCAweDAwLCAweDA0LCAweDExLCAweDA1LCAweDEyLAorCTB4MjEsIDB4MzEsIDB4NDEsIDB4MDYsIDB4MTMsIDB4NTEsIDB4NjEsIDB4MDcsCisJMHgyMiwgMHg3MSwgMHgxNCwgMHgzMiwgMHg4MSwgMHg5MSwgMHhhMSwgMHgwOCwKKwkweDIzLCAweDQyLCAweGIxLCAweGMxLCAweDE1LCAweDUyLCAweGQxLCAweGYwLAorCTB4MjQsIDB4MzMsIDB4NjIsIDB4NzIsIDB4ODIsIDB4MDksIDB4MGEsIDB4MTYsCisJMHgxNywgMHgxOCwgMHgxOSwgMHgxYSwgMHgyNSwgMHgyNiwgMHgyNywgMHgyOCwKKwkweDI5LCAweDJhLCAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LAorCTB4M2EsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsIDB4NDksCisJMHg0YSwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwgMHg1OSwKKwkweDVhLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAweDY4LCAweDY5LAorCTB4NmEsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsIDB4NzksCisJMHg3YSwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywgMHg4OCwgMHg4OSwKKwkweDhhLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LCAweDk4LAorCTB4OTksIDB4OWEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCisJMHhhOCwgMHhhOSwgMHhhYSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwKKwkweGI3LCAweGI4LCAweGI5LCAweGJhLCAweGMyLCAweGMzLCAweGM0LCAweGM1LAorCTB4YzYsIDB4YzcsIDB4YzgsIDB4YzksIDB4Y2EsIDB4ZDIsIDB4ZDMsIDB4ZDQsCisJMHhkNSwgMHhkNiwgMHhkNywgMHhkOCwgMHhkOSwgMHhkYSwgMHhlMSwgMHhlMiwKKwkweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LCAweGU4LCAweGU5LCAweGVhLAorCTB4ZjEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsCisJMHhmOSwgMHhmYQorfTsKKworc3RhdGljIGNvbnN0IHU4IGJpdHNfYWNfY2hyb21pbmFuY2VbXSA9IHsKKwkwLCAwLCAyLCAxLCAyLCA0LCA0LCAzLCA0LCA3LCA1LCA0LCA0LCAwLCAxLCAyLCAweDc3Cit9OworCitzdGF0aWMgY29uc3QgdTggdmFsX2FjX2Nocm9taW5hbmNlW10gPSB7CisJMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMSwgMHgwNCwgMHgwNSwgMHgyMSwKKwkweDMxLCAweDA2LCAweDEyLCAweDQxLCAweDUxLCAweDA3LCAweDYxLCAweDcxLAorCTB4MTMsIDB4MjIsIDB4MzIsIDB4ODEsIDB4MDgsIDB4MTQsIDB4NDIsIDB4OTEsCisJMHhhMSwgMHhiMSwgMHhjMSwgMHgwOSwgMHgyMywgMHgzMywgMHg1MiwgMHhmMCwKKwkweDE1LCAweDYyLCAweDcyLCAweGQxLCAweDBhLCAweDE2LCAweDI0LCAweDM0LAorCTB4ZTEsIDB4MjUsIDB4ZjEsIDB4MTcsIDB4MTgsIDB4MTksIDB4MWEsIDB4MjYsCisJMHgyNywgMHgyOCwgMHgyOSwgMHgyYSwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwKKwkweDM5LCAweDNhLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAorCTB4NDksIDB4NGEsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCisJMHg1OSwgMHg1YSwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwKKwkweDY5LCAweDZhLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAorCTB4NzksIDB4N2EsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisJMHg4OCwgMHg4OSwgMHg4YSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwKKwkweDk3LCAweDk4LCAweDk5LCAweDlhLCAweGEyLCAweGEzLCAweGE0LCAweGE1LAorCTB4YTYsIDB4YTcsIDB4YTgsIDB4YTksIDB4YWEsIDB4YjIsIDB4YjMsIDB4YjQsCisJMHhiNSwgMHhiNiwgMHhiNywgMHhiOCwgMHhiOSwgMHhiYSwgMHhjMiwgMHhjMywKKwkweGM0LCAweGM1LCAweGM2LCAweGM3LCAweGM4LCAweGM5LCAweGNhLCAweGQyLAorCTB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsIDB4ZDksIDB4ZGEsCisJMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywgMHhlOCwgMHhlOSwKKwkweGVhLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LCAweGY4LAorCTB4ZjksIDB4ZmEKK307CisKKy8qIFppZy16YWcgbWFwcGluZyBmb3IgcXVhbnQgdGFibGUKKyAqCisgKiBPSywgbGV0J3MgZG8gdGhpcyBtYXBwaW5nIG9uIHRoZSBhY3R1YWwgdGFibGUgYWJvdmUgc28gaXQgZG9lc24ndCBoYXZlCisgKiB0byBiZSBkb25lIG9uIHRoZSBmbHkuCisgKi8KK3N0YXRpYyBjb25zdCBpbnQgenpbNjRdID0geworCTAsICAgMSwgIDgsIDE2LCAgOSwgIDIsICAzLCAxMCwgMTcsIDI0LCAzMiwgMjUsIDE4LCAxMSwgIDQsICA1LAorCTEyLCAxOSwgMjYsIDMzLCA0MCwgNDgsIDQxLCAzNCwgMjcsIDIwLCAxMywgIDYsICA3LCAxNCwgMjEsIDI4LAorCTM1LCA0MiwgNDksIDU2LCA1NywgNTAsIDQzLCAzNiwgMjksIDIyLCAxNSwgMjMsIDMwLCAzNywgNDQsIDUxLAorCTU4LCA1OSwgNTIsIDQ1LCAzOCwgMzEsIDM5LCA0NiwgNTMsIDYwLCA2MSwgNTQsIDQ3LCA1NSwgNjIsIDYzCit9OworCitzdGF0aWMgaW50IGNvcHlfcGFja2FnZXModTE2ICpkZXN0LCB1MTYgKnNyYywgaW50IHBrZ19jbnQsIGludCBzcGFjZSkKK3sKKwlpbnQgaSwgY250ID0gcGtnX2NudCAqIDMyOworCisJaWYgKHNwYWNlIDwgY250KQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgY250OyArK2kpCisJCWRlc3RbaV0gPSBfX2NwdV90b19sZTE2KHNyY1tpXSk7CisKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgaW50IG1qcGVnX2ZyYW1lX2hlYWRlcihzdHJ1Y3QgZ283MDA3ICpnbywgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgcSkKK3sKKwlpbnQgaSwgcCA9IDA7CisKKwlidWZbcCsrXSA9IDB4ZmY7CisJYnVmW3ArK10gPSAweGQ4OworCWJ1ZltwKytdID0gMHhmZjsKKwlidWZbcCsrXSA9IDB4ZGI7CisJYnVmW3ArK10gPSAwOworCWJ1ZltwKytdID0gMiArIDY1OworCWJ1ZltwKytdID0gMDsKKwlidWZbcCsrXSA9IGRlZmF1bHRfaW50cmFfcXVhbnRfdGFibGVbMF07CisJZm9yIChpID0gMTsgaSA8IDY0OyArK2kpCisJCS8qIGJ1ZltwKytdID0gKGRlZmF1bHRfaW50cmFfcXVhbnRfdGFibGVbaV0gKiBxKSA+PiAzOyAqLworCQlidWZbcCsrXSA9IChkZWZhdWx0X2ludHJhX3F1YW50X3RhYmxlW3p6W2ldXSAqIHEpID4+IDM7CisJYnVmW3ArK10gPSAweGZmOworCWJ1ZltwKytdID0gMHhjMDsKKwlidWZbcCsrXSA9IDA7CisJYnVmW3ArK10gPSAxNzsKKwlidWZbcCsrXSA9IDg7CisJYnVmW3ArK10gPSBnby0+aGVpZ2h0ID4+IDg7CisJYnVmW3ArK10gPSBnby0+aGVpZ2h0ICYgMHhmZjsKKwlidWZbcCsrXSA9IGdvLT53aWR0aCA+PiA4OworCWJ1ZltwKytdID0gZ28tPndpZHRoICYgMHhmZjsKKwlidWZbcCsrXSA9IDM7CisJYnVmW3ArK10gPSAxOworCWJ1ZltwKytdID0gMHgyMjsKKwlidWZbcCsrXSA9IDA7CisJYnVmW3ArK10gPSAyOworCWJ1ZltwKytdID0gMHgxMTsKKwlidWZbcCsrXSA9IDA7CisJYnVmW3ArK10gPSAzOworCWJ1ZltwKytdID0gMHgxMTsKKwlidWZbcCsrXSA9IDA7CisJYnVmW3ArK10gPSAweGZmOworCWJ1ZltwKytdID0gMHhjNDsKKwlidWZbcCsrXSA9IDQxOCA+PiA4OworCWJ1ZltwKytdID0gNDE4ICYgMHhmZjsKKwlidWZbcCsrXSA9IDB4MDA7CisJbWVtY3B5KGJ1ZiArIHAsIGJpdHNfZGNfbHVtaW5hbmNlICsgMSwgMTYpOworCXAgKz0gMTY7CisJbWVtY3B5KGJ1ZiArIHAsIHZhbF9kY19sdW1pbmFuY2UsIHNpemVvZih2YWxfZGNfbHVtaW5hbmNlKSk7CisJcCArPSBzaXplb2YodmFsX2RjX2x1bWluYW5jZSk7CisJYnVmW3ArK10gPSAweDAxOworCW1lbWNweShidWYgKyBwLCBiaXRzX2RjX2Nocm9taW5hbmNlICsgMSwgMTYpOworCXAgKz0gMTY7CisJbWVtY3B5KGJ1ZiArIHAsIHZhbF9kY19jaHJvbWluYW5jZSwgc2l6ZW9mKHZhbF9kY19jaHJvbWluYW5jZSkpOworCXAgKz0gc2l6ZW9mKHZhbF9kY19jaHJvbWluYW5jZSk7CisJYnVmW3ArK10gPSAweDEwOworCW1lbWNweShidWYgKyBwLCBiaXRzX2FjX2x1bWluYW5jZSArIDEsIDE2KTsKKwlwICs9IDE2OworCW1lbWNweShidWYgKyBwLCB2YWxfYWNfbHVtaW5hbmNlLCBzaXplb2YodmFsX2FjX2x1bWluYW5jZSkpOworCXAgKz0gc2l6ZW9mKHZhbF9hY19sdW1pbmFuY2UpOworCWJ1ZltwKytdID0gMHgxMTsKKwltZW1jcHkoYnVmICsgcCwgYml0c19hY19jaHJvbWluYW5jZSArIDEsIDE2KTsKKwlwICs9IDE2OworCW1lbWNweShidWYgKyBwLCB2YWxfYWNfY2hyb21pbmFuY2UsIHNpemVvZih2YWxfYWNfY2hyb21pbmFuY2UpKTsKKwlwICs9IHNpemVvZih2YWxfYWNfY2hyb21pbmFuY2UpOworCWJ1ZltwKytdID0gMHhmZjsKKwlidWZbcCsrXSA9IDB4ZGE7CisJYnVmW3ArK10gPSAwOworCWJ1ZltwKytdID0gMTI7CisJYnVmW3ArK10gPSAzOworCWJ1ZltwKytdID0gMTsKKwlidWZbcCsrXSA9IDB4MDA7CisJYnVmW3ArK10gPSAyOworCWJ1ZltwKytdID0gMHgxMTsKKwlidWZbcCsrXSA9IDM7CisJYnVmW3ArK10gPSAweDExOworCWJ1ZltwKytdID0gMDsKKwlidWZbcCsrXSA9IDYzOworCWJ1ZltwKytdID0gMDsKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIGludCBnZW5fbWpwZWdoZHJfdG9fcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywgdTE2ICpjb2RlLCBpbnQgc3BhY2UpCit7CisJdTggKmJ1ZjsKKwl1MTYgbWVtID0gMHgzZTAwOworCXVuc2lnbmVkIGludCBhZGRyID0gMHgxOTsKKwlpbnQgc2l6ZSA9IDAsIGksIG9mZiA9IDAsIGNodW5rOworCisJYnVmID0ga21hbGxvYyg0MDk2LCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IHVuYWJsZSB0byBhbGxvY2F0ZSA0MDk2IGJ5dGVzIGZvciAiCisJCQkJImZpcm13YXJlIGNvbnN0cnVjdGlvblxuIik7CisJCXJldHVybiAtMTsKKwl9CisJbWVtc2V0KGJ1ZiwgMCwgNDA5Nik7CisKKwlmb3IgKGkgPSAxOyBpIDwgMzI7ICsraSkgeworCQltanBlZ19mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIHNpemUsIGkpOworCQlzaXplICs9IDgwOworCX0KKwljaHVuayA9IG1qcGVnX2ZyYW1lX2hlYWRlcihnbywgYnVmICsgc2l6ZSwgMSk7CisJbWVtbW92ZShidWYgKyBzaXplLCBidWYgKyBzaXplICsgODAsIGNodW5rIC0gODApOworCXNpemUgKz0gY2h1bmsgLSA4MDsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IGNodW5rICogMikgeworCQlpZiAoc3BhY2UgLSBvZmYgPCAzMikgeworCQkJb2ZmID0gLTE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQljb2RlW29mZiArIDFdID0gX19jcHVfdG9fbGUxNigweDgwMDAgfCBtZW0pOworCisJCWNodW5rID0gMjg7CisJCWlmIChtZW0gKyBjaHVuayA+IDB4NDAwMCkKKwkJCWNodW5rID0gMHg0MDAwIC0gbWVtOworCQlpZiAoaSArIDIgKiBjaHVuayA+IHNpemUpCisJCQljaHVuayA9IChzaXplIC0gaSkgLyAyOworCisJCWlmIChjaHVuayA8IDI4KSB7CisJCQljb2RlW29mZl0gPSBfX2NwdV90b19sZTE2KDB4NDAwMCB8IGNodW5rKTsKKwkJCWNvZGVbb2ZmICsgMzFdID0gX19jcHVfdG9fbGUxNihhZGRyKyspOworCQkJbWVtID0gMHgzZTAwOworCQl9IGVsc2UgeworCQkJY29kZVtvZmZdID0gX19jcHVfdG9fbGUxNigweDEwMDAgfCAyOCk7CisJCQljb2RlW29mZiArIDMxXSA9IDA7CisJCQltZW0gKz0gMjg7CisJCX0KKworCQltZW1jcHkoJmNvZGVbb2ZmICsgMl0sIGJ1ZiArIGksIGNodW5rICogMik7CisJCW9mZiArPSAzMjsKKwl9Citkb25lOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIG9mZjsKK30KKworc3RhdGljIGludCBtcGVnMV9mcmFtZV9oZWFkZXIoc3RydWN0IGdvNzAwNyAqZ28sIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJaW50IG1vZHVsbywgaW50IHBpY3Rfc3RydWN0LCBlbnVtIG1wZWdfZnJhbWVfdHlwZSBmcmFtZSkKK3sKKwlpbnQgaSwgaiwgbWJfY29kZSwgbWJfbGVuOworCWludCByb3dzID0gZ28tPmludGVybGFjZV9jb2RpbmcgPyBnby0+aGVpZ2h0IC8gMzIgOiBnby0+aGVpZ2h0IC8gMTY7CisJQ09ERV9HRU4oYywgYnVmICsgNik7CisKKwlzd2l0Y2ggKGZyYW1lKSB7CisJY2FzZSBQRlJBTUU6CisJCW1iX2NvZGUgPSAweDE7CisJCW1iX2xlbiA9IDM7CisJCWJyZWFrOworCWNhc2UgQkZSQU1FX1BSRToKKwkJbWJfY29kZSA9IDB4MjsKKwkJbWJfbGVuID0gNDsKKwkJYnJlYWs7CisJY2FzZSBCRlJBTUVfUE9TVDoKKwkJbWJfY29kZSA9IDB4MjsKKwkJbWJfbGVuID0gMzsKKwkJYnJlYWs7CisJY2FzZSBCRlJBTUVfQklESVI6CisJCW1iX2NvZGUgPSAweDI7CisJCW1iX2xlbiA9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIGtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5ICovCisJCW1iX2NvZGUgPSBtYl9sZW4gPSAwOworCQlicmVhazsKKwl9CisKKwlDT0RFX0FERChjLCBmcmFtZSA9PSBQRlJBTUUgPyAweDIgOiAweDMsIDEzKTsKKwlDT0RFX0FERChjLCAweGZmZmYsIDE2KTsKKwlDT0RFX0FERChjLCBnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIgPyAweDcgOiAweDQsIDQpOworCWlmIChmcmFtZSAhPSBQRlJBTUUpCisJCUNPREVfQUREKGMsIGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMiA/IDB4NyA6IDB4NCwgNCk7CisJZWxzZQorCQlDT0RFX0FERChjLCAwLCA0KTsgLyogSXMgdGhpcyBzdXBwb3NlZCB0byBiZSBoZXJlPz8gKi8KKwlDT0RFX0FERChjLCAwLCAzKTsgLyogV2hhdCBpcyB0aGlzPz8gKi8KKwkvKiBCeXRlLWFsaWduIHdpdGggemVyb3MgKi8KKwlqID0gOCAtIChDT0RFX0xFTkdUSChjKSAlIDgpOworCWlmIChqICE9IDgpCisJCUNPREVfQUREKGMsIDAsIGopOworCisJaWYgKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMikgeworCQlDT0RFX0FERChjLCAweDEsIDI0KTsKKwkJQ09ERV9BREQoYywgMHhiNSwgOCk7CisJCUNPREVfQUREKGMsIDB4ODQ0LCAxMik7CisJCUNPREVfQUREKGMsIGZyYW1lID09IFBGUkFNRSA/IDB4ZmYgOiAweDQ0LCA4KTsKKwkJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKSB7CisJCQlDT0RFX0FERChjLCBwaWN0X3N0cnVjdCwgNCk7CisJCQlpZiAoZ28tPmR2ZF9tb2RlKQorCQkJCUNPREVfQUREKGMsIDB4MDAwLCAxMSk7CisJCQllbHNlCisJCQkJQ09ERV9BREQoYywgMHgyMDAsIDExKTsKKwkJfSBlbHNlIHsKKwkJCUNPREVfQUREKGMsIDB4MywgNCk7CisJCQlDT0RFX0FERChjLCAweDIwYywgMTEpOworCQl9CisJCS8qIEJ5dGUtYWxpZ24gd2l0aCB6ZXJvcyAqLworCQlqID0gOCAtIChDT0RFX0xFTkdUSChjKSAlIDgpOworCQlpZiAoaiAhPSA4KQorCQkJQ09ERV9BREQoYywgMCwgaik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJvd3M7ICsraSkgeworCQlDT0RFX0FERChjLCAxLCAyNCk7CisJCUNPREVfQUREKGMsIGkgKyAxLCA4KTsKKwkJQ09ERV9BREQoYywgMHgyLCA2KTsKKwkJQ09ERV9BREQoYywgMHgxLCAxKTsKKwkJQ09ERV9BREQoYywgbWJfY29kZSwgbWJfbGVuKTsKKwkJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKSB7CisJCQlDT0RFX0FERChjLCAweDEsIDIpOworCQkJQ09ERV9BREQoYywgcGljdF9zdHJ1Y3QgPT0gMSA/IDB4MCA6IDB4MSwgMSk7CisJCX0KKwkJaWYgKGZyYW1lID09IEJGUkFNRV9CSURJUikgeworCQkJQ09ERV9BREQoYywgMHgzLCAyKTsKKwkJCWlmIChnby0+aW50ZXJsYWNlX2NvZGluZykKKwkJCQlDT0RFX0FERChjLCBwaWN0X3N0cnVjdCA9PSAxID8gMHgwIDogMHgxLCAxKTsKKwkJfQorCQlDT0RFX0FERChjLCAweDMsIDIpOworCQlmb3IgKGogPSAoZ28tPndpZHRoID4+IDQpIC0gMjsgaiA+PSAzMzsgaiAtPSAzMykKKwkJCUNPREVfQUREKGMsIDB4OCwgMTEpOworCQlDT0RFX0FERChjLCBhZGRyaW5jdGFiW2pdWzBdLCBhZGRyaW5jdGFiW2pdWzFdKTsKKwkJQ09ERV9BREQoYywgbWJfY29kZSwgbWJfbGVuKTsKKwkJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKSB7CisJCQlDT0RFX0FERChjLCAweDEsIDIpOworCQkJQ09ERV9BREQoYywgcGljdF9zdHJ1Y3QgPT0gMSA/IDB4MCA6IDB4MSwgMSk7CisJCX0KKwkJaWYgKGZyYW1lID09IEJGUkFNRV9CSURJUikgeworCQkJQ09ERV9BREQoYywgMHgzLCAyKTsKKwkJCWlmIChnby0+aW50ZXJsYWNlX2NvZGluZykKKwkJCQlDT0RFX0FERChjLCBwaWN0X3N0cnVjdCA9PSAxID8gMHgwIDogMHgxLCAxKTsKKwkJfQorCQlDT0RFX0FERChjLCAweDMsIDIpOworCisJCS8qIEJ5dGUtYWxpZ24gd2l0aCB6ZXJvcyAqLworCQlqID0gOCAtIChDT0RFX0xFTkdUSChjKSAlIDgpOworCQlpZiAoaiAhPSA4KQorCQkJQ09ERV9BREQoYywgMCwgaik7CisJfQorCisJaSA9IENPREVfTEVOR1RIKGMpICsgNCAqIDg7CisJYnVmWzJdID0gMHgwMDsKKwlidWZbM10gPSAweDAwOworCWJ1Zls0XSA9IDB4MDE7CisJYnVmWzVdID0gMHgwMDsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBtcGVnMV9zZXF1ZW5jZV9oZWFkZXIoc3RydWN0IGdvNzAwNyAqZ28sIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGV4dCkKK3sKKwlpbnQgaSwgYXNwZWN0X3JhdGlvLCBwaWN0dXJlX3JhdGU7CisJQ09ERV9HRU4oYywgYnVmICsgNik7CisKKwlpZiAoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcxKSB7CisJCXN3aXRjaCAoZ28tPmFzcGVjdF9yYXRpbykgeworCQljYXNlIEdPNzAwN19SQVRJT180XzM6CisJCQlhc3BlY3RfcmF0aW8gPSBnby0+c3RhbmRhcmQgPT0gR083MDA3X1NURF9OVFNDID8gMyA6IDI7CisJCQlicmVhazsKKwkJY2FzZSBHTzcwMDdfUkFUSU9fMTZfOToKKwkJCWFzcGVjdF9yYXRpbyA9IGdvLT5zdGFuZGFyZCA9PSBHTzcwMDdfU1REX05UU0MgPyA1IDogNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYXNwZWN0X3JhdGlvID0gMTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChnby0+YXNwZWN0X3JhdGlvKSB7CisJCWNhc2UgR083MDA3X1JBVElPXzRfMzoKKwkJCWFzcGVjdF9yYXRpbyA9IDI7CisJCQlicmVhazsKKwkJY2FzZSBHTzcwMDdfUkFUSU9fMTZfOToKKwkJCWFzcGVjdF9yYXRpbyA9IDM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFzcGVjdF9yYXRpbyA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlzd2l0Y2ggKGdvLT5zZW5zb3JfZnJhbWVyYXRlKSB7CisJY2FzZSAyNDAwMDoKKwkJcGljdHVyZV9yYXRlID0gMTsKKwkJYnJlYWs7CisJY2FzZSAyNDAyNDoKKwkJcGljdHVyZV9yYXRlID0gMjsKKwkJYnJlYWs7CisJY2FzZSAyNTAyNToKKwkJcGljdHVyZV9yYXRlID0gZ28tPmludGVybGFjZV9jb2RpbmcgPyA2IDogMzsKKwkJYnJlYWs7CisJY2FzZSAzMDAwMDoKKwkJcGljdHVyZV9yYXRlID0gZ28tPmludGVybGFjZV9jb2RpbmcgPyA3IDogNDsKKwkJYnJlYWs7CisJY2FzZSAzMDAzMDoKKwkJcGljdHVyZV9yYXRlID0gZ28tPmludGVybGFjZV9jb2RpbmcgPyA4IDogNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGljdHVyZV9yYXRlID0gNTsgLyogMzAgZnBzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGRlZmF1bHQgKi8KKwkJYnJlYWs7CisJfQorCisJQ09ERV9BREQoYywgZ28tPndpZHRoLCAxMik7CisJQ09ERV9BREQoYywgZ28tPmhlaWdodCwgMTIpOworCUNPREVfQUREKGMsIGFzcGVjdF9yYXRpbywgNCk7CisJQ09ERV9BREQoYywgcGljdHVyZV9yYXRlLCA0KTsKKwlDT0RFX0FERChjLCBnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIgPyAyMDAwMCA6IDB4M2ZmZmYsIDE4KTsKKwlDT0RFX0FERChjLCAxLCAxKTsKKwlDT0RFX0FERChjLCBnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIgPyAxMTIgOiAyMCwgMTApOworCUNPREVfQUREKGMsIDAsIDMpOworCisJLyogQnl0ZS1hbGlnbiB3aXRoIHplcm9zICovCisJaSA9IDggLSAoQ09ERV9MRU5HVEgoYykgJSA4KTsKKwlpZiAoaSAhPSA4KQorCQlDT0RFX0FERChjLCAwLCBpKTsKKworCWlmIChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIpIHsKKwkJQ09ERV9BREQoYywgMHgxLCAyNCk7CisJCUNPREVfQUREKGMsIDB4YjUsIDgpOworCQlDT0RFX0FERChjLCAweDE0OCwgMTIpOworCQlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpCisJCQlDT0RFX0FERChjLCAweDIwMDAxLCAyMCk7CisJCWVsc2UKKwkJCUNPREVfQUREKGMsIDB4YTAwMDEsIDIwKTsKKwkJQ09ERV9BREQoYywgMCwgMTYpOworCisJCS8qIEJ5dGUtYWxpZ24gd2l0aCB6ZXJvcyAqLworCQlpID0gOCAtIChDT0RFX0xFTkdUSChjKSAlIDgpOworCQlpZiAoaSAhPSA4KQorCQkJQ09ERV9BREQoYywgMCwgaSk7CisKKwkJaWYgKGV4dCkgeworCQkJQ09ERV9BREQoYywgMHgxLCAyNCk7CisJCQlDT0RFX0FERChjLCAweGI1MiwgMTIpOworCQkJQ09ERV9BREQoYywgZ28tPnN0YW5kYXJkID09IEdPNzAwN19TVERfTlRTQyA/IDIgOiAxLCAzKTsKKwkJCUNPREVfQUREKGMsIDB4MTA1LCA5KTsKKwkJCUNPREVfQUREKGMsIDB4NTA1LCAxNik7CisJCQlDT0RFX0FERChjLCBnby0+d2lkdGgsIDE0KTsKKwkJCUNPREVfQUREKGMsIDEsIDEpOworCQkJQ09ERV9BREQoYywgZ28tPmhlaWdodCwgMTQpOworCisJCQkvKiBCeXRlLWFsaWduIHdpdGggemVyb3MgKi8KKwkJCWkgPSA4IC0gKENPREVfTEVOR1RIKGMpICUgOCk7CisJCQlpZiAoaSAhPSA4KQorCQkJCUNPREVfQUREKGMsIDAsIGkpOworCQl9CisJfQorCisJaSA9IENPREVfTEVOR1RIKGMpICsgNCAqIDg7CisJYnVmWzBdID0gaSAmIDB4ZmY7CisJYnVmWzFdID0gaSA+PiA4OworCWJ1ZlsyXSA9IDB4MDA7CisJYnVmWzNdID0gMHgwMDsKKwlidWZbNF0gPSAweDAxOworCWJ1Zls1XSA9IDB4YjM7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgZ2VuX21wZWcxaGRyX3RvX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sCisJCQkJCXUxNiAqY29kZSwgaW50IHNwYWNlLCBpbnQgKmZyYW1lbGVuKQoreworCXU4ICpidWY7CisJdTE2IG1lbSA9IDB4M2UwMDsKKwl1bnNpZ25lZCBpbnQgYWRkciA9IDB4MTk7CisJaW50IGksIG9mZiA9IDAsIGNodW5rOworCisJYnVmID0ga21hbGxvYyg1MTIwLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IHVuYWJsZSB0byBhbGxvY2F0ZSA1MTIwIGJ5dGVzIGZvciAiCisJCQkJImZpcm13YXJlIGNvbnN0cnVjdGlvblxuIik7CisJCXJldHVybiAtMTsKKwl9CisJbWVtc2V0KGJ1ZiwgMCwgNTEyMCk7CisJZnJhbWVsZW5bMF0gPSBtcGVnMV9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiwgMCwgMSwgUEZSQU1FKTsKKwlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpCisJCWZyYW1lbGVuWzBdICs9IG1wZWcxX2ZyYW1lX2hlYWRlcihnbywgYnVmICsgZnJhbWVsZW5bMF0gLyA4LAorCQkJCQkJCTAsIDIsIFBGUkFNRSk7CisJYnVmWzBdID0gZnJhbWVsZW5bMF0gJiAweGZmOworCWJ1ZlsxXSA9IGZyYW1lbGVuWzBdID4+IDg7CisJaSA9IDM2ODsKKwlmcmFtZWxlblsxXSA9IG1wZWcxX2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSwgMCwgMSwgQkZSQU1FX1BSRSk7CisJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKQorCQlmcmFtZWxlblsxXSArPSBtcGVnMV9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGkgKyBmcmFtZWxlblsxXSAvIDgsCisJCQkJCQkJMCwgMiwgQkZSQU1FX1BSRSk7CisJYnVmW2ldID0gZnJhbWVsZW5bMV0gJiAweGZmOworCWJ1ZltpICsgMV0gPSBmcmFtZWxlblsxXSA+PiA4OworCWkgKz0gMTYzMjsKKwlmcmFtZWxlblsyXSA9IG1wZWcxX2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSwgMCwgMSwgQkZSQU1FX1BPU1QpOworCWlmIChnby0+aW50ZXJsYWNlX2NvZGluZykKKwkJZnJhbWVsZW5bMl0gKz0gbXBlZzFfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpICsgZnJhbWVsZW5bMl0gLyA4LAorCQkJCQkJCTAsIDIsIEJGUkFNRV9QT1NUKTsKKwlidWZbaV0gPSBmcmFtZWxlblsyXSAmIDB4ZmY7CisJYnVmW2kgKyAxXSA9IGZyYW1lbGVuWzJdID4+IDg7CisJaSArPSAxNDMyOworCWZyYW1lbGVuWzNdID0gbXBlZzFfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAwLCAxLCBCRlJBTUVfQklESVIpOworCWlmIChnby0+aW50ZXJsYWNlX2NvZGluZykKKwkJZnJhbWVsZW5bM10gKz0gbXBlZzFfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpICsgZnJhbWVsZW5bM10gLyA4LAorCQkJCQkJCTAsIDIsIEJGUkFNRV9CSURJUik7CisJYnVmW2ldID0gZnJhbWVsZW5bM10gJiAweGZmOworCWJ1ZltpICsgMV0gPSBmcmFtZWxlblszXSA+PiA4OworCWkgKz0gMTYzMiArIDE2OworCW1wZWcxX3NlcXVlbmNlX2hlYWRlcihnbywgYnVmICsgaSwgMCk7CisJaSArPSA0MDsKKwlmb3IgKGkgPSAwOyBpIDwgNTEyMDsgaSArPSBjaHVuayAqIDIpIHsKKwkJaWYgKHNwYWNlIC0gb2ZmIDwgMzIpIHsKKwkJCW9mZiA9IC0xOworCQkJZ290byBkb25lOworCQl9CisKKwkJY29kZVtvZmYgKyAxXSA9IF9fY3B1X3RvX2xlMTYoMHg4MDAwIHwgbWVtKTsKKworCQljaHVuayA9IDI4OworCQlpZiAobWVtICsgY2h1bmsgPiAweDQwMDApCisJCQljaHVuayA9IDB4NDAwMCAtIG1lbTsKKwkJaWYgKGkgKyAyICogY2h1bmsgPiA1MTIwKQorCQkJY2h1bmsgPSAoNTEyMCAtIGkpIC8gMjsKKworCQlpZiAoY2h1bmsgPCAyOCkgeworCQkJY29kZVtvZmZdID0gX19jcHVfdG9fbGUxNigweDQwMDAgfCBjaHVuayk7CisJCQljb2RlW29mZiArIDMxXSA9IF9fY3B1X3RvX2xlMTYoYWRkcik7CisJCQlpZiAobWVtICsgY2h1bmsgPT0gMHg0MDAwKSB7CisJCQkJbWVtID0gMHgzZTAwOworCQkJCSsrYWRkcjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWNvZGVbb2ZmXSA9IF9fY3B1X3RvX2xlMTYoMHgxMDAwIHwgMjgpOworCQkJY29kZVtvZmYgKyAzMV0gPSAwOworCQkJbWVtICs9IDI4OworCQl9CisKKwkJbWVtY3B5KCZjb2RlW29mZiArIDJdLCBidWYgKyBpLCBjaHVuayAqIDIpOworCQlvZmYgKz0gMzI7CisJfQorZG9uZToKKwlrZnJlZShidWYpOworCXJldHVybiBvZmY7Cit9CisKK3N0YXRpYyBpbnQgdnRpX2JpdGxlbihzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbWF4X3RpbWVfaW5jciA9IGdvLT5zZW5zb3JfZnJhbWVyYXRlIC8gZ28tPmZwc19zY2FsZTsKKworCWZvciAoaSA9IDMxOyAobWF4X3RpbWVfaW5jciAmICgoMSA8PCBpKSAtIDEpKSA9PSBtYXhfdGltZV9pbmNyOyAtLWkpOworCXJldHVybiBpICsgMTsKK30KKworc3RhdGljIGludCBtcGVnNF9mcmFtZV9oZWFkZXIoc3RydWN0IGdvNzAwNyAqZ28sIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJaW50IG1vZHVsbywgZW51bSBtcGVnX2ZyYW1lX3R5cGUgZnJhbWUpCit7CisJaW50IGk7CisJQ09ERV9HRU4oYywgYnVmICsgNik7CisJaW50IG1iX2NvdW50ID0gKGdvLT53aWR0aCA+PiA0KSAqIChnby0+aGVpZ2h0ID4+IDQpOworCisJQ09ERV9BREQoYywgZnJhbWUgPT0gUEZSQU1FID8gMHgxIDogMHgyLCAyKTsKKwlpZiAobW9kdWxvKQorCQlDT0RFX0FERChjLCAweDEsIDEpOworCUNPREVfQUREKGMsIDB4MSwgMik7CisJQ09ERV9BREQoYywgMCwgdnRpX2JpdGxlbihnbykpOworCUNPREVfQUREKGMsIDB4MywgMik7CisJaWYgKGZyYW1lID09IFBGUkFNRSkKKwkJQ09ERV9BREQoYywgMCwgMSk7CisJQ09ERV9BREQoYywgMHhjLCAxMSk7CisJaWYgKGZyYW1lICE9IFBGUkFNRSkKKwkJQ09ERV9BREQoYywgMHg0LCAzKTsKKwlpZiAoZnJhbWUgIT0gQkZSQU1FX0VNUFRZKSB7CisJCWZvciAoaSA9IDA7IGkgPCBtYl9jb3VudDsgKytpKSB7CisJCQlzd2l0Y2ggKGZyYW1lKSB7CisJCQljYXNlIFBGUkFNRToKKwkJCQlDT0RFX0FERChjLCAweDEsIDEpOworCQkJCWJyZWFrOworCQkJY2FzZSBCRlJBTUVfUFJFOgorCQkJCUNPREVfQUREKGMsIDB4NDcsIDgpOworCQkJCWJyZWFrOworCQkJY2FzZSBCRlJBTUVfUE9TVDoKKwkJCQlDT0RFX0FERChjLCAweDI3LCA3KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQkZSQU1FX0JJRElSOgorCQkJCUNPREVfQUREKGMsIDB4NWYsIDgpOworCQkJCWJyZWFrOworCQkJY2FzZSBCRlJBTUVfRU1QVFk6IC8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qIEJ5dGUtYWxpZ24gd2l0aCBhIHplcm8gZm9sbG93ZWQgYnkgb25lcyAqLworCWkgPSA4IC0gKENPREVfTEVOR1RIKGMpICUgOCk7CisJQ09ERV9BREQoYywgMCwgMSk7CisJQ09ERV9BREQoYywgKDEgPDwgKGkgLSAxKSkgLSAxLCBpIC0gMSk7CisKKwlpID0gQ09ERV9MRU5HVEgoYykgKyA0ICogODsKKwlidWZbMF0gPSBpICYgMHhmZjsKKwlidWZbMV0gPSBpID4+IDg7CisJYnVmWzJdID0gMHgwMDsKKwlidWZbM10gPSAweDAwOworCWJ1Zls0XSA9IDB4MDE7CisJYnVmWzVdID0gMHhiNjsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBtcGVnNF9zZXF1ZW5jZV9oZWFkZXIoc3RydWN0IGdvNzAwNyAqZ28sIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGV4dCkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyIGhlYWRbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMSwgMHhiMCwgZ28tPnBhbGksCisJCTB4MDAsIDB4MDAsIDB4MDEsIDB4YjUsIDB4MDksCisJCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisJCTB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIH07CisJaW50IGksIGFzcGVjdF9yYXRpbzsKKwlpbnQgZnBzID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUgLyBnby0+ZnBzX3NjYWxlOworCUNPREVfR0VOKGMsIGJ1ZiArIDIgKyBzaXplb2YoaGVhZCkpOworCisJc3dpdGNoIChnby0+YXNwZWN0X3JhdGlvKSB7CisJY2FzZSBHTzcwMDdfUkFUSU9fNF8zOgorCQlhc3BlY3RfcmF0aW8gPSBnby0+c3RhbmRhcmQgPT0gR083MDA3X1NURF9OVFNDID8gMyA6IDI7CisJCWJyZWFrOworCWNhc2UgR083MDA3X1JBVElPXzE2Xzk6CisJCWFzcGVjdF9yYXRpbyA9IGdvLT5zdGFuZGFyZCA9PSBHTzcwMDdfU1REX05UU0MgPyA1IDogNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXNwZWN0X3JhdGlvID0gMTsKKwkJYnJlYWs7CisJfQorCisJbWVtY3B5KGJ1ZiArIDIsIGhlYWQsIHNpemVvZihoZWFkKSk7CisJQ09ERV9BREQoYywgMHgxOTEsIDE3KTsKKwlDT0RFX0FERChjLCBhc3BlY3RfcmF0aW8sIDQpOworCUNPREVfQUREKGMsIDB4MSwgNCk7CisJQ09ERV9BREQoYywgZnBzLCAxNik7CisJQ09ERV9BREQoYywgMHgzLCAyKTsKKwlDT0RFX0FERChjLCAxMDAxLCB2dGlfYml0bGVuKGdvKSk7CisJQ09ERV9BREQoYywgMSwgMSk7CisJQ09ERV9BREQoYywgZ28tPndpZHRoLCAxMyk7CisJQ09ERV9BREQoYywgMSwgMSk7CisJQ09ERV9BREQoYywgZ28tPmhlaWdodCwgMTMpOworCUNPREVfQUREKGMsIDB4MjgzMCwgMTQpOworCisJLyogQnl0ZS1hbGlnbiAqLworCWkgPSA4IC0gKENPREVfTEVOR1RIKGMpICUgOCk7CisJQ09ERV9BREQoYywgMCwgMSk7CisJQ09ERV9BREQoYywgKDEgPDwgKGkgLSAxKSkgLSAxLCBpIC0gMSk7CisKKwlpID0gQ09ERV9MRU5HVEgoYykgKyBzaXplb2YoaGVhZCkgKiA4OworCWJ1ZlswXSA9IGkgJiAweGZmOworCWJ1ZlsxXSA9IGkgPj4gODsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBnZW5fbXBlZzRoZHJfdG9fcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywKKwkJCQkJdTE2ICpjb2RlLCBpbnQgc3BhY2UsIGludCAqZnJhbWVsZW4pCit7CisJdTggKmJ1ZjsKKwl1MTYgbWVtID0gMHgzZTAwOworCXVuc2lnbmVkIGludCBhZGRyID0gMHgxOTsKKwlpbnQgaSwgb2ZmID0gMCwgY2h1bms7CisKKwlidWYgPSBrbWFsbG9jKDUxMjAsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogdW5hYmxlIHRvIGFsbG9jYXRlIDUxMjAgYnl0ZXMgZm9yICIKKwkJCQkiZmlybXdhcmUgY29uc3RydWN0aW9uXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwltZW1zZXQoYnVmLCAwLCA1MTIwKTsKKwlmcmFtZWxlblswXSA9IG1wZWc0X2ZyYW1lX2hlYWRlcihnbywgYnVmLCAwLCBQRlJBTUUpOworCWkgPSAzNjg7CisJZnJhbWVsZW5bMV0gPSBtcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDAsIEJGUkFNRV9QUkUpOworCWkgKz0gMTYzMjsKKwlmcmFtZWxlblsyXSA9IG1wZWc0X2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSwgMCwgQkZSQU1FX1BPU1QpOworCWkgKz0gMTQzMjsKKwlmcmFtZWxlblszXSA9IG1wZWc0X2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSwgMCwgQkZSQU1FX0JJRElSKTsKKwlpICs9IDE2MzI7CisJbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAwLCBCRlJBTUVfRU1QVFkpOworCWkgKz0gMTY7CisJbXBlZzRfc2VxdWVuY2VfaGVhZGVyKGdvLCBidWYgKyBpLCAwKTsKKwlpICs9IDQwOworCWZvciAoaSA9IDA7IGkgPCA1MTIwOyBpICs9IGNodW5rICogMikgeworCQlpZiAoc3BhY2UgLSBvZmYgPCAzMikgeworCQkJb2ZmID0gLTE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQljb2RlW29mZiArIDFdID0gX19jcHVfdG9fbGUxNigweDgwMDAgfCBtZW0pOworCisJCWNodW5rID0gMjg7CisJCWlmIChtZW0gKyBjaHVuayA+IDB4NDAwMCkKKwkJCWNodW5rID0gMHg0MDAwIC0gbWVtOworCQlpZiAoaSArIDIgKiBjaHVuayA+IDUxMjApCisJCQljaHVuayA9ICg1MTIwIC0gaSkgLyAyOworCisJCWlmIChjaHVuayA8IDI4KSB7CisJCQljb2RlW29mZl0gPSBfX2NwdV90b19sZTE2KDB4NDAwMCB8IGNodW5rKTsKKwkJCWNvZGVbb2ZmICsgMzFdID0gX19jcHVfdG9fbGUxNihhZGRyKTsKKwkJCWlmIChtZW0gKyBjaHVuayA9PSAweDQwMDApIHsKKwkJCQltZW0gPSAweDNlMDA7CisJCQkJKythZGRyOworCQkJfQorCQl9IGVsc2UgeworCQkJY29kZVtvZmZdID0gX19jcHVfdG9fbGUxNigweDEwMDAgfCAyOCk7CisJCQljb2RlW29mZiArIDMxXSA9IDA7CisJCQltZW0gKz0gMjg7CisJCX0KKworCQltZW1jcHkoJmNvZGVbb2ZmICsgMl0sIGJ1ZiArIGksIGNodW5rICogMik7CisJCW9mZiArPSAzMjsKKwl9CisJbWVtID0gMHgzZTAwOworCWFkZHIgPSBnby0+aXBiID8gMHgxNGY5IDogMHgwYWY5OworCW1lbXNldChidWYsIDAsIDUxMjApOworCWZyYW1lbGVuWzRdID0gbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYsIDEsIFBGUkFNRSk7CisJaSA9IDM2ODsKKwlmcmFtZWxlbls1XSA9IG1wZWc0X2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSwgMSwgQkZSQU1FX1BSRSk7CisJaSArPSAxNjMyOworCWZyYW1lbGVuWzZdID0gbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAxLCBCRlJBTUVfUE9TVCk7CisJaSArPSAxNDMyOworCWZyYW1lbGVuWzddID0gbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAxLCBCRlJBTUVfQklESVIpOworCWkgKz0gMTYzMjsKKwltcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDEsIEJGUkFNRV9FTVBUWSk7CisJaSArPSAxNjsKKwlmb3IgKGkgPSAwOyBpIDwgNTEyMDsgaSArPSBjaHVuayAqIDIpIHsKKwkJaWYgKHNwYWNlIC0gb2ZmIDwgMzIpIHsKKwkJCW9mZiA9IC0xOworCQkJZ290byBkb25lOworCQl9CisKKwkJY29kZVtvZmYgKyAxXSA9IF9fY3B1X3RvX2xlMTYoMHg4MDAwIHwgbWVtKTsKKworCQljaHVuayA9IDI4OworCQlpZiAobWVtICsgY2h1bmsgPiAweDQwMDApCisJCQljaHVuayA9IDB4NDAwMCAtIG1lbTsKKwkJaWYgKGkgKyAyICogY2h1bmsgPiA1MTIwKQorCQkJY2h1bmsgPSAoNTEyMCAtIGkpIC8gMjsKKworCQlpZiAoY2h1bmsgPCAyOCkgeworCQkJY29kZVtvZmZdID0gX19jcHVfdG9fbGUxNigweDQwMDAgfCBjaHVuayk7CisJCQljb2RlW29mZiArIDMxXSA9IF9fY3B1X3RvX2xlMTYoYWRkcik7CisJCQlpZiAobWVtICsgY2h1bmsgPT0gMHg0MDAwKSB7CisJCQkJbWVtID0gMHgzZTAwOworCQkJCSsrYWRkcjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWNvZGVbb2ZmXSA9IF9fY3B1X3RvX2xlMTYoMHgxMDAwIHwgMjgpOworCQkJY29kZVtvZmYgKyAzMV0gPSAwOworCQkJbWVtICs9IDI4OworCQl9CisKKwkJbWVtY3B5KCZjb2RlW29mZiArIDJdLCBidWYgKyBpLCBjaHVuayAqIDIpOworCQlvZmYgKz0gMzI7CisJfQorZG9uZToKKwlrZnJlZShidWYpOworCXJldHVybiBvZmY7Cit9CisKK3N0YXRpYyBpbnQgYnJjdHJsX3RvX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sCisJCQkJCXUxNiAqY29kZSwgaW50IHNwYWNlLCBpbnQgKmZyYW1lbGVuKQoreworCWludCBjb252ZXJnZV9zcGVlZCA9IDA7CisJaW50IGxhbWJkYSA9IChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTUpQRUcgfHwgZ28tPmR2ZF9tb2RlKSA/CisJCQkJMTAwIDogMDsKKwlpbnQgcGVha19yYXRlID0gNiAqIGdvLT5iaXRyYXRlIC8gNTsKKwlpbnQgdmJ2X2J1ZmZlciA9IGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NSlBFRyA/CisJCQkJZ28tPmJpdHJhdGUgOgorCQkJCShnby0+ZHZkX21vZGUgPyA5MDAwMDAgOiBwZWFrX3JhdGUpOworCWludCBmcHMgPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIGdvLT5mcHNfc2NhbGU7CisJaW50IHEgPSAwOworCS8qIEJpemFycmUgbWF0aCBiZWxvdyBkZXBlbmRzIG9uIHJvdW5kaW5nIGVycm9ycyBpbiBkaXZpc2lvbiAqLworCXUzMiBzZ29wX2V4cHRfYWRkciA9IGdvLT5iaXRyYXRlIC8gMzIgKiAoZ28tPmlwYiA/IDMgOiAxKSAqIDEwMDEgLyBmcHM7CisJdTMyIHNnb3BfcGVha19hZGRyID0gcGVha19yYXRlIC8gMzIgKiAxMDAxIC8gZnBzOworCXUzMiB0b3RhbF9leHB0X2FkZHIgPSBnby0+Yml0cmF0ZSAvIDMyICogMTAwMCAvIGZwcyAqIChmcHMgLyAxMDAwKTsKKwl1MzIgdmJ2X2FsZXJ0X2FkZHIgPSB2YnZfYnVmZmVyICogMyAvICg0ICogMzIpOworCXUzMiBjcGx4W10gPSB7CisJCXEgPiAwID8gc2dvcF9leHB0X2FkZHIgKiBxIDoKKwkJCTIgKiBnby0+d2lkdGggKiBnby0+aGVpZ2h0ICogKGdvLT5pcGIgPyA2IDogNCkgLyAzMiwKKwkJcSA+IDAgPyBzZ29wX2V4cHRfYWRkciAqIHEgOgorCQkJMiAqIGdvLT53aWR0aCAqIGdvLT5oZWlnaHQgKiAoZ28tPmlwYiA/IDYgOiA0KSAvIDMyLAorCQlxID4gMCA/IHNnb3BfZXhwdF9hZGRyICogcSA6CisJCQkyICogZ28tPndpZHRoICogZ28tPmhlaWdodCAqIChnby0+aXBiID8gNiA6IDQpIC8gMzIsCisJCXEgPiAwID8gc2dvcF9leHB0X2FkZHIgKiBxIDoKKwkJCTIgKiBnby0+d2lkdGggKiBnby0+aGVpZ2h0ICogKGdvLT5pcGIgPyA2IDogNCkgLyAzMiwKKwl9OworCXUzMiBjYWxjX3EgPSBxID4gMCA/IHEgOiBjcGx4WzBdIC8gc2dvcF9leHB0X2FkZHI7CisJdTE2IHBhY2tbXSA9IHsKKwkJMHgyMDBlLAkJMHgwMDAwLAorCQkweEJGMjAsCQlnby0+aXBiID8gY29udmVyZ2Vfc3BlZWRfaXBiW2NvbnZlcmdlX3NwZWVkXQorCQkJCQk6IGNvbnZlcmdlX3NwZWVkX2lwW2NvbnZlcmdlX3NwZWVkXSwKKwkJMHhCRjIxLAkJZ28tPmlwYiA/IDIgOiAwLAorCQkweEJGMjIsCQlnby0+aXBiID8gTEFNQkRBX3RhYmxlWzBdW2xhbWJkYSAvIDIgKyA1MF0KKwkJCQkJOiAzMjc2NywKKwkJMHhCRjIzLAkJZ28tPmlwYiA/IExBTUJEQV90YWJsZVsxXVtsYW1iZGFdIDogMzI3NjcsCisJCTB4QkYyNCwJCTMyNzY3LAorCQkweEJGMjUsCQlsYW1iZGEgPiA5OSA/IDMyNzY3IDogTEFNQkRBX3RhYmxlWzNdW2xhbWJkYV0sCisJCTB4QkYyNiwJCXNnb3BfZXhwdF9hZGRyICYgMHgwMDAwRkZGRiwKKwkJMHhCRjI3LAkJc2dvcF9leHB0X2FkZHIgPj4gMTYsCisJCTB4QkYyOCwJCXNnb3BfcGVha19hZGRyICYgMHgwMDAwRkZGRiwKKwkJMHhCRjI5LAkJc2dvcF9wZWFrX2FkZHIgPj4gMTYsCisJCTB4QkYyQSwJCXZidl9hbGVydF9hZGRyICYgMHgwMDAwRkZGRiwKKwkJMHhCRjJCLAkJdmJ2X2FsZXJ0X2FkZHIgPj4gMTYsCisJCTB4QkYyQywJCTAsCisJCTB4QkYyRCwJCTAsCisJCTAsCQkwLAorCisJCTB4MjAwZSwJCTB4MDAwMCwKKwkJMHhCRjJFLAkJdmJ2X2FsZXJ0X2FkZHIgJiAweDAwMDBGRkZGLAorCQkweEJGMkYsCQl2YnZfYWxlcnRfYWRkciA+PiAxNiwKKwkJMHhCRjMwLAkJY3BseFswXSAmIDB4MDAwMEZGRkYsCisJCTB4QkYzMSwJCWNwbHhbMF0gPj4gMTYsCisJCTB4QkYzMiwJCWNwbHhbMV0gJiAweDAwMDBGRkZGLAorCQkweEJGMzMsCQljcGx4WzFdID4+IDE2LAorCQkweEJGMzQsCQljcGx4WzJdICYgMHgwMDAwRkZGRiwKKwkJMHhCRjM1LAkJY3BseFsyXSA+PiAxNiwKKwkJMHhCRjM2LAkJY3BseFszXSAmIDB4MDAwMEZGRkYsCisJCTB4QkYzNywJCWNwbHhbM10gPj4gMTYsCisJCTB4QkYzOCwJCTAsCisJCTB4QkYzOSwJCTAsCisJCTB4QkYzQSwJCXRvdGFsX2V4cHRfYWRkciAmIDB4MDAwMEZGRkYsCisJCTB4QkYzQiwJCXRvdGFsX2V4cHRfYWRkciA+PiAxNiwKKwkJMCwJCTAsCisKKwkJMHgyMDBlLAkJMHgwMDAwLAorCQkweEJGM0MsCQl0b3RhbF9leHB0X2FkZHIgJiAweDAwMDBGRkZGLAorCQkweEJGM0QsCQl0b3RhbF9leHB0X2FkZHIgPj4gMTYsCisJCTB4QkYzRSwJCTAsCisJCTB4QkYzRiwJCTAsCisJCTB4QkY0OCwJCTAsCisJCTB4QkY0OSwJCTAsCisJCTB4QkY0QSwJCWNhbGNfcSA8IDQgPyA0IDogKGNhbGNfcSA+IDEyNCA/IDEyNCA6IGNhbGNfcSksCisJCTB4QkY0QiwJCTQsCisJCTB4QkY0QywJCTAsCisJCTB4QkY0RCwJCTAsCisJCTB4QkY0RSwJCTAsCisJCTB4QkY0RiwJCTAsCisJCTB4QkY1MCwJCTAsCisJCTB4QkY1MSwJCTAsCisJCTAsCQkwLAorCisJCTB4MjAwZSwJCTB4MDAwMCwKKwkJMHhCRjQwLAkJc2dvcF9leHB0X2FkZHIgJiAweDAwMDBGRkZGLAorCQkweEJGNDEsCQlzZ29wX2V4cHRfYWRkciA+PiAxNiwKKwkJMHhCRjQyLAkJMCwKKwkJMHhCRjQzLAkJMCwKKwkJMHhCRjQ0LAkJMCwKKwkJMHhCRjQ1LAkJMCwKKwkJMHhCRjQ2LAkJKGdvLT53aWR0aCA+PiA0KSAqIChnby0+aGVpZ2h0ID4+IDQpLAorCQkweEJGNDcsCQkwLAorCQkweEJGNjQsCQkwLAorCQkweEJGNjUsCQkwLAorCQkweEJGMTgsCQlmcmFtZWxlbls0XSwKKwkJMHhCRjE5LAkJZnJhbWVsZW5bNV0sCisJCTB4QkYxQSwJCWZyYW1lbGVuWzZdLAorCQkweEJGMUIsCQlmcmFtZWxlbls3XSwKKwkJMCwJCTAsCisKKyNpZiAwIC8qIFJlbW92ZSBvbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQgbWF0Y2hpbmcgKi8KKwkJMHgyMDBlLAkJMHgwMDAwLAorCQkweEJGNTYsCQk0LAorCQkweEJGNTcsCQkwLAorCQkweEJGNTgsCQk1LAorCQkweEJGNTksCQkwLAorCQkweEJGNUEsCQk2LAorCQkweEJGNUIsCQkwLAorCQkweEJGNUMsCQk4LAorCQkweEJGNUQsCQkwLAorCQkweEJGNUUsCQkxLAorCQkweEJGNUYsCQkwLAorCQkweEJGNjAsCQkxLAorCQkweEJGNjEsCQkwLAorCQkweEJGNjIsCQkwLAorCQkweEJGNjMsCQkwLAorCQkwLAkJMCwKKyNlbHNlCisJCTB4MjAwOCwJCTB4MDAwMCwKKwkJMHhCRjU2LAkJNCwKKwkJMHhCRjU3LAkJMCwKKwkJMHhCRjU4LAkJNSwKKwkJMHhCRjU5LAkJMCwKKwkJMHhCRjVBLAkJNiwKKwkJMHhCRjVCLAkJMCwKKwkJMHhCRjVDLAkJOCwKKwkJMHhCRjVELAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisjZW5kaWYKKworCQkweDIwMGUsCQkweDAwMDAsCisJCTB4QkYxMCwJCTAsCisJCTB4QkYxMSwJCTAsCisJCTB4QkYxMiwJCTAsCisJCTB4QkYxMywJCTAsCisJCTB4QkYxNCwJCTAsCisJCTB4QkYxNSwJCTAsCisJCTB4QkYxNiwJCTAsCisJCTB4QkYxNywJCTAsCisJCTB4QkY3RSwJCTAsCisJCTB4QkY3RiwJCTEsCisJCTB4QkY1MiwJCWZyYW1lbGVuWzBdLAorCQkweEJGNTMsCQlmcmFtZWxlblsxXSwKKwkJMHhCRjU0LAkJZnJhbWVsZW5bMl0sCisJCTB4QkY1NSwJCWZyYW1lbGVuWzNdLAorCQkwLAkJMCwKKwl9OworCisJcmV0dXJuIGNvcHlfcGFja2FnZXMoY29kZSwgcGFjaywgNiwgc3BhY2UpOworfQorCitzdGF0aWMgaW50IGNvbmZpZ19wYWNrYWdlKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgKmNvZGUsIGludCBzcGFjZSkKK3sKKwlpbnQgZnBzID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUgLyBnby0+ZnBzX3NjYWxlIC8gMTAwMDsKKwlpbnQgcm93cyA9IGdvLT5pbnRlcmxhY2VfY29kaW5nID8gZ28tPmhlaWdodCAvIDMyIDogZ28tPmhlaWdodCAvIDE2OworCWludCBicmNfd2luZG93X3NpemUgPSBmcHM7CisJaW50IHFfbWluID0gMiwgcV9tYXggPSAzMTsKKwlpbnQgVEhBQ0NvZWZmU2V0MCA9IDA7CisJdTE2IHBhY2tbXSA9IHsKKwkJMHgyMDBlLAkJMHgwMDAwLAorCQkweGMwMDIsCQkweDE0YjQsCisJCTB4YzAwMywJCTB4MjhiNCwKKwkJMHhjMDA0LAkJMHgzYzVhLAorCQkweGRjMDUsCQkweDJhNzcsCisJCTB4YzZjMywJCWdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHNCA/IDAgOgorCQkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfSDI2MyA/IDAgOiAxKSwKKwkJMHhjNjgwLAkJZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0ID8gMHhmMSA6CisJCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9IMjYzID8gMHg2MSA6CisJCQkJCQkJCQkweGQzKSwKKwkJMHhjNzgwLAkJMHgwMTQwLAorCQkweGUwMDksCQkweDAwMDEsCisJCTB4YzYwZiwJCTB4MDAwOCwKKwkJMHhkNGZmLAkJMHgwMDAyLAorCQkweGU0MDMsCQkyMzQwLAorCQkweGU0MDYsCQk3NSwKKwkJMHhkNDExLAkJMHgwMDAxLAorCQkweGQ0MTAsCQkweGExZDYsCisJCTB4MDAwMSwJCTB4MjgwMSwKKworCQkweDIwMGQsCQkweDAwMDAsCisJCTB4ZTQwMiwJCTB4MDE4YiwKKwkJMHhlNDAxLAkJMHg4YjAxLAorCQkweGQ0NzIsCQkoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmCisJCQkJCQkJR083MDA3X1NFTlNPUl9UVikgJiYKKwkJCQkJCSghZ28tPmludGVybGFjZV9jb2RpbmcpID8KKwkJCQkJMHgwMWIwIDogMHgwMTcwLAorCQkweGQ0NzUsCQkoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmCisJCQkJCQkJR083MDA3X1NFTlNPUl9UVikgJiYKKwkJCQkJCSghZ28tPmludGVybGFjZV9jb2RpbmcpID8KKwkJCQkJMHgwMDA4IDogMHgwMDA5LAorCQkweGM0MDQsCQlnby0+aW50ZXJsYWNlX2NvZGluZyA/IDB4NDQgOgorCQkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzQgPyAweDExIDoKKwkJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcxID8gMHgwMiA6CisJCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMiA/IDB4MDQgOgorCQkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfSDI2MyAgPyAweDA4IDoKKwkJCQkJCQkJICAgICAweDIwKSkpKSwKKwkJMHhiZjBhLAkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHNCA/IDggOgorCQkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzEgPyAxIDoKKwkJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyID8gMiA6CisJCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9IMjYzID8gNCA6IDE2KSkpKSB8CisJCQkJKChnby0+cmVwZWF0X3NlcWhlYWQgPyAxIDogMCkgPDwgNikgfAorCQkJCSgoZ28tPmR2ZF9tb2RlID8gMSA6IDApIDw8IDkpIHwKKwkJCQkoKGdvLT5nb3BfaGVhZGVyX2VuYWJsZSA/IDEgOiAwKSA8PCAxMCksCisJCTB4YmYwYiwJCTAsCisJCTB4ZGQ1YSwJCWdvLT5pcGIgPyAweDE0IDogMHgwYSwKKwkJMHhiZjBjLAkJMCwKKwkJMHhiZjBkLAkJMCwKKwkJMHhjNjgzLAkJVEhBQ0NvZWZmU2V0MCwKKwkJMHhjNDBhLAkJKGdvLT53aWR0aCA8PCA0KSB8IHJvd3MsCisJCTB4ZTAxYSwJCWdvLT5ib2FyZF9pbmZvLT5ocGlfYnVmZmVyX2NhcCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCisJCTB4MjAwOCwJCTAsCisJCTB4ZTQwMiwJCTB4ODgsCisJCTB4ZTQwMSwJCTB4OGYwMSwKKwkJMHhiZjZhLAkJMCwKKwkJMHhiZjZiLAkJMCwKKwkJMHhiZjZjLAkJMCwKKwkJMHhiZjZkLAkJMCwKKwkJMHhiZjZlLAkJMCwKKwkJMHhiZjZmLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisKKwkJMHgyMDBlLAkJMCwKKwkJMHhiZjY2LAkJYnJjX3dpbmRvd19zaXplLAorCQkweGJmNjcsCQkwLAorCQkweGJmNjgsCQlxX21pbiwKKwkJMHhiZjY5LAkJcV9tYXgsCisJCTB4YmZlMCwJCTAsCisJCTB4YmZlMSwJCTAsCisJCTB4YmZlMiwJCTAsCisJCTB4YmZlMywJCWdvLT5pcGIgPyAzIDogMSwKKwkJMHhjMDMxLAkJZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmCisJCQkJCUdPNzAwN19TRU5TT1JfVkJJID8gMSA6IDAsCisJCTB4YzAxYywJCTB4MWYsCisJCTB4ZGQ4YywJCTB4MTUsCisJCTB4ZGQ5NCwJCTB4MTUsCisJCTB4ZGQ4OCwJCWdvLT5pcGIgPyAweDE0MDEgOiAweDBhMDEsCisJCTB4ZGQ5MCwJCWdvLT5pcGIgPyAweDE0MDEgOiAweDBhMDEsCisJCTAsCQkwLAorCisJCTB4MjAwZSwJCTAsCisJCTB4YmZlNCwJCTAsCisJCTB4YmZlNSwJCTAsCisJCTB4YmZlNiwJCTAsCisJCTB4YmZlNywJCWZwcyA8PCA4LAorCQkweGJmZTgsCQkweDNhMDAsCisJCTB4YmZlOSwJCTAsCisJCTB4YmZlYSwJCTAsCisJCTB4YmZlYiwJCTAsCisJCTB4YmZlYywJCShnby0+aW50ZXJsYWNlX2NvZGluZyA/IDEgPDwgMTUgOiAwKSB8CisJCQkJCShnby0+bW9kZXRfZW5hYmxlID8gMHhhIDogMCkgfAorCQkJCQkoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmCisJCQkJCQlHTzcwMDdfU0VOU09SX1ZCSSA/IDEgOiAwKSwKKwkJMHhiZmVkLAkJMCwKKwkJMHhiZmVlLAkJMCwKKwkJMHhiZmVmLAkJMCwKKwkJMHhiZmYwLAkJZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmCisJCQkJCUdPNzAwN19TRU5TT1JfVFYgPyAweGYwNjAgOiAweGIwNjAsCisJCTB4YmZmMSwJCTAsCisJCTAsCQkwLAorCX07CisKKwlyZXR1cm4gY29weV9wYWNrYWdlcyhjb2RlLCBwYWNrLCA1LCBzcGFjZSk7Cit9CisKK3N0YXRpYyBpbnQgc2VxaGVhZF90b19wYWNrYWdlKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgKmNvZGUsIGludCBzcGFjZSwKKwlpbnQgKCpzZXF1ZW5jZV9oZWFkZXJfZnVuYykoc3RydWN0IGdvNzAwNyAqZ28sCisJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGV4dCkpCit7CisJaW50IHZvcF90aW1lX2luY3JlbWVudF9iaXRsZW5ndGggPSB2dGlfYml0bGVuKGdvKTsKKwlpbnQgZnBzID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUgLyBnby0+ZnBzX3NjYWxlICoKKwkJCQkJKGdvLT5pbnRlcmxhY2VfY29kaW5nID8gMiA6IDEpOworCXVuc2lnbmVkIGNoYXIgYnVmWzQwXSA9IHsgfTsKKwlpbnQgbGVuID0gc2VxdWVuY2VfaGVhZGVyX2Z1bmMoZ28sIGJ1ZiwgMSk7CisJdTE2IHBhY2tbXSA9IHsKKwkJMHgyMDA2LAkJMCwKKwkJMHhiZjA4LAkJZnBzLAorCQkweGJmMDksCQkwLAorCQkweGJmZjIsCQl2b3BfdGltZV9pbmNyZW1lbnRfYml0bGVuZ3RoLAorCQkweGJmZjMsCQkoMSA8PCB2b3BfdGltZV9pbmNyZW1lbnRfYml0bGVuZ3RoKSAtIDEsCisJCTB4YmZlNiwJCTAsCisJCTB4YmZlNywJCShmcHMgLyAxMDAwKSA8PCA4LAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCisJCTB4MjAwNywJCTAsCisJCTB4YzgwMCwJCWJ1ZlsyXSA8PCA4IHwgYnVmWzNdLAorCQkweGM4MDEsCQlidWZbNF0gPDwgOCB8IGJ1Zls1XSwKKwkJMHhjODAyLAkJYnVmWzZdIDw8IDggfCBidWZbN10sCisJCTB4YzgwMywJCWJ1Zls4XSA8PCA4IHwgYnVmWzldLAorCQkweGM0MDYsCQk2NCwKKwkJMHhjNDA3LAkJbGVuIC0gNjQsCisJCTB4YzYxYiwJCTEsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKworCQkweDIwMGUsCQkwLAorCQkweGM4MDgsCQlidWZbMTBdIDw8IDggfCBidWZbMTFdLAorCQkweGM4MDksCQlidWZbMTJdIDw8IDggfCBidWZbMTNdLAorCQkweGM4MGEsCQlidWZbMTRdIDw8IDggfCBidWZbMTVdLAorCQkweGM4MGIsCQlidWZbMTZdIDw8IDggfCBidWZbMTddLAorCQkweGM4MGMsCQlidWZbMThdIDw8IDggfCBidWZbMTldLAorCQkweGM4MGQsCQlidWZbMjBdIDw8IDggfCBidWZbMjFdLAorCQkweGM4MGUsCQlidWZbMjJdIDw8IDggfCBidWZbMjNdLAorCQkweGM4MGYsCQlidWZbMjRdIDw8IDggfCBidWZbMjVdLAorCQkweGM4MTAsCQlidWZbMjZdIDw8IDggfCBidWZbMjddLAorCQkweGM4MTEsCQlidWZbMjhdIDw8IDggfCBidWZbMjldLAorCQkweGM4MTIsCQlidWZbMzBdIDw8IDggfCBidWZbMzFdLAorCQkweGM4MTMsCQlidWZbMzJdIDw8IDggfCBidWZbMzNdLAorCQkweGM4MTQsCQlidWZbMzRdIDw8IDggfCBidWZbMzVdLAorCQkweGM4MTUsCQlidWZbMzZdIDw8IDggfCBidWZbMzddLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCX07CisKKwlyZXR1cm4gY29weV9wYWNrYWdlcyhjb2RlLCBwYWNrLCAzLCBzcGFjZSk7Cit9CisKK3N0YXRpYyBpbnQgcmVsYXRpdmVfcHJpbWUoaW50IGJpZywgaW50IGxpdHRsZSkKK3sKKwlpbnQgcmVtYWluZGVyOworCisJd2hpbGUgKGxpdHRsZSAhPSAwKSB7CisJCXJlbWFpbmRlciA9IGJpZyAlIGxpdHRsZTsKKwkJYmlnID0gbGl0dGxlOworCQlsaXR0bGUgPSByZW1haW5kZXI7CisJfQorCXJldHVybiBiaWc7Cit9CisKK3N0YXRpYyBpbnQgYXZzeW5jX3RvX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqY29kZSwgaW50IHNwYWNlKQoreworCWludCBhcmF0ZSA9IGdvLT5ib2FyZF9pbmZvLT5hdWRpb19yYXRlICogMTAwMSAqIGdvLT5mcHNfc2NhbGU7CisJaW50IHJhdGlvID0gYXJhdGUgLyBnby0+c2Vuc29yX2ZyYW1lcmF0ZTsKKwlpbnQgYWRqcmF0aW8gPSByYXRpbyAqIDIxNSAvIDEwMDsKKwlpbnQgcnByaW1lID0gcmVsYXRpdmVfcHJpbWUoZ28tPnNlbnNvcl9mcmFtZXJhdGUsCisJCQkJCWFyYXRlICUgZ28tPnNlbnNvcl9mcmFtZXJhdGUpOworCWludCBmMSA9IChhcmF0ZSAlIGdvLT5zZW5zb3JfZnJhbWVyYXRlKSAvIHJwcmltZTsKKwlpbnQgZjIgPSAoZ28tPnNlbnNvcl9mcmFtZXJhdGUgLSBhcmF0ZSAlIGdvLT5zZW5zb3JfZnJhbWVyYXRlKSAvIHJwcmltZTsKKwl1MTYgcGFja1tdID0geworCQkweDIwMGUsCQkwLAorCQkweGJmOTgsCQkodTE2KSgoLWFkanJhdGlvKSAmIDB4ZmZmZiksCisJCTB4YmY5OSwJCSh1MTYpKCgtYWRqcmF0aW8pID4+IDE2KSwKKwkJMHhiZjkyLAkJMCwKKwkJMHhiZjkzLAkJMCwKKwkJMHhiZmY0LAkJZjEgPiBmMiA/IGYxIDogZjIsCisJCTB4YmZmNSwJCWYxIDwgZjIgPyBmMSA6IGYyLAorCQkweGJmZjYsCQlmMSA8IGYyID8gcmF0aW8gOiByYXRpbyArIDEsCisJCTB4YmZmNywJCWYxID4gZjIgPyByYXRpbyA6IHJhdGlvICsgMSwKKwkJMHhiZmY4LAkJMCwKKwkJMHhiZmY5LAkJMCwKKwkJMHhiZmZhLAkJYWRqcmF0aW8gJiAweGZmZmYsCisJCTB4YmZmYiwJCWFkanJhdGlvID4+IDE2LAorCQkweGJmOTQsCQkwLAorCQkweGJmOTUsCQkwLAorCQkwLAkJMCwKKwl9OworCisJcmV0dXJuIGNvcHlfcGFja2FnZXMoY29kZSwgcGFjaywgMSwgc3BhY2UpOworfQorCitzdGF0aWMgaW50IGZpbmFsX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqY29kZSwgaW50IHNwYWNlKQoreworCWludCByb3dzID0gZ28tPmludGVybGFjZV9jb2RpbmcgPyBnby0+aGVpZ2h0IC8gMzIgOiBnby0+aGVpZ2h0IC8gMTY7CisJdTE2IHBhY2tbXSA9IHsKKwkJMHg4MDAwLAorCQkwLAorCQkwLAorCQkwLAorCQkwLAorCQkwLAorCQkwLAorCQkyLAorCQkoKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1RWKSAmJgorCQkJCQkJKCFnby0+aW50ZXJsYWNlX2NvZGluZykgPworCQkJCQkoMSA8PCAxNCkgfCAoMSA8PCA5KSA6IDApIHwKKwkJCSgoZ28tPmVuY29kZXJfc3Vic2FtcGxlID8gMSA6IDApIDw8IDgpIHwKKwkJCShnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYKKwkJCQlHTzcwMDdfU0VOU09SX0NPTkZJR19NQVNLKSwKKwkJKChnby0+ZW5jb2Rlcl92X2hhbHZlID8gMSA6IDApIDw8IDE0KSB8CisJCQkoZ28tPmVuY29kZXJfdl9oYWx2ZSA/IHJvd3MgPDwgOSA6IHJvd3MgPDwgOCkgfAorCQkJKGdvLT5lbmNvZGVyX2hfaGFsdmUgPyAxIDw8IDYgOiAwKSB8CisJCQkoZ28tPmVuY29kZXJfaF9oYWx2ZSA/IGdvLT53aWR0aCA+PiAzIDogZ28tPndpZHRoID4+IDQpLAorCQkoMSA8PCAxNSkgfCAoZ28tPmVuY29kZXJfdl9vZmZzZXQgPDwgNikgfAorCQkJKDEgPDwgNykgfCAoZ28tPmVuY29kZXJfaF9vZmZzZXQgPj4gMiksCisJCSgxIDw8IDYpLAorCQkwLAorCQkwLAorCQkoKGdvLT5mcHNfc2NhbGUgLSAxKSA8PCA4KSB8CisJCQkoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfVFYgPworCQkJCQkJKDEgPDwgNykgOiAwKSB8CisJCQkweDQxLAorCQlnby0+aXBiID8gMHhkNGMgOiAweDM2YiwKKwkJKHJvd3MgPDwgOCkgfCAoZ28tPndpZHRoID4+IDQpLAorCQlnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzQgPyAweDA0MDQgOiAwLAorCQkoMSA8PCAxNSkgfCAoKGdvLT5pbnRlcmxhY2VfY29kaW5nID8gMSA6IDApIDw8IDEzKSB8CisJCQkoKGdvLT5jbG9zZWRfZ29wID8gMSA6IDApIDw8IDEyKSB8CisJCQkoKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHNCA/IDEgOiAwKSA8PCAxMSkgfAorCQkvKgkoMSA8PCA5KSB8ICAgKi8KKwkJCSgoZ28tPmlwYiA/IDMgOiAwKSA8PCA3KSB8CisJCQkoKGdvLT5tb2RldF9lbmFibGUgPyAxIDogMCkgPDwgMikgfAorCQkJKChnby0+ZHZkX21vZGUgPyAxIDogMCkgPDwgMSkgfCAxLAorCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcxID8gMHg4OWEwIDoKKwkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIgPyAweDg5YTAgOgorCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NSlBFRyA/IDB4ODlhMCA6CisJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0ID8gMHg4OTIwIDoKKwkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfSDI2MyA/IDB4ODkyMCA6IDApKSkpKSwKKwkJZ28tPmlwYiA/IDB4MWYxNSA6IDB4MWYwYiwKKwkJZ28tPmlwYiA/IDB4MDAxNSA6IDB4MDAwYiwKKwkJZ28tPmlwYiA/IDB4YTgwMCA6IDB4NTgwMCwKKwkJMHhmZmZmLAorCQkweDAwMjAgKyAweDAzNGIgKiAwLAorCQkweDAwMjAgKyAweDAzNGIgKiAxLAorCQkweDAwMjAgKyAweDAzNGIgKiAyLAorCQkweDAwMjAgKyAweDAzNGIgKiAzLAorCQkweDAwMjAgKyAweDAzNGIgKiA0LAorCQkweDAwMjAgKyAweDAzNGIgKiA1LAorCQlnby0+aXBiID8gKGdvLT5nb3Bfc2l6ZSAvIDMpIDogZ28tPmdvcF9zaXplLAorCQkoZ28tPmhlaWdodCA+PiA0KSAqIChnby0+d2lkdGggPj4gNCkgKiAxMTAgLyAxMDAsCisJfTsKKworCXJldHVybiBjb3B5X3BhY2thZ2VzKGNvZGUsIHBhY2ssIDEsIHNwYWNlKTsKK30KKworc3RhdGljIGludCBhdWRpb190b19wYWNrYWdlKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgKmNvZGUsIGludCBzcGFjZSkKK3sKKwlpbnQgY2xvY2tfY29uZmlnID0gKChnby0+Ym9hcmRfaW5mby0+YXVkaW9fZmxhZ3MgJgorCQkJCUdPNzAwN19BVURJT19JMlNfTUFTVEVSID8gMSA6IDApIDw8IDExKSB8CisJCQkoKGdvLT5ib2FyZF9pbmZvLT5hdWRpb19mbGFncyAmCisJCQkJR083MDA3X0FVRElPX09LSV9NT0RFID8gMSA6IDApIDw8IDgpIHwKKwkJCSgoKGdvLT5ib2FyZF9pbmZvLT5hdWRpb19iY2xrX2RpdiAvIDQpIC0gMSkgPDwgNCkgfAorCQkJKGdvLT5ib2FyZF9pbmZvLT5hdWRpb19tYWluX2RpdiAtIDEpOworCXUxNiBwYWNrW10gPSB7CisJCTB4MjAwZCwJCTAsCisJCTB4OTAwMiwJCTAsCisJCTB4OTAwMiwJCTAsCisJCTB4OTAzMSwJCTAsCisJCTB4OTAzMiwJCTAsCisJCTB4OTAzMywJCTAsCisJCTB4OTAzNCwJCTAsCisJCTB4OTAzNSwJCTAsCisJCTB4OTAzNiwJCTAsCisJCTB4OTAzNywJCTAsCisJCTB4OTA0MCwJCTAsCisJCTB4OTAwMCwJCWNsb2NrX2NvbmZpZywKKwkJMHg5MDAxLAkJKGdvLT5ib2FyZF9pbmZvLT5hdWRpb19mbGFncyAmIDB4ZmZmZikgfAorCQkJCQkoMSA8PCA5KSwKKwkJMHg5MDAwLAkJKChnby0+Ym9hcmRfaW5mby0+YXVkaW9fZmxhZ3MgJgorCQkJCQkJR083MDA3X0FVRElPX0kyU19NQVNURVIgPworCQkJCQkJMSA6IDApIDw8IDEwKSB8CisJCQkJCWNsb2NrX2NvbmZpZywKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkweDIwMDUsCQkwLAorCQkweDkwNDEsCQkwLAorCQkweDkwNDIsCQkyNTYsCisJCTB4OTA0MywJCTAsCisJCTB4OTA0NCwJCTE2LAorCQkweDkwNDUsCQkxNiwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJfTsKKworCXJldHVybiBjb3B5X3BhY2thZ2VzKGNvZGUsIHBhY2ssIDIsIHNwYWNlKTsKK30KKworc3RhdGljIGludCBtb2RldF90b19wYWNrYWdlKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgKmNvZGUsIGludCBzcGFjZSkKK3sKKwlpbnQgcmV0LCBtYiwgaSwgYWRkciwgY250ID0gMDsKKwl1MTYgcGFja1szMl07CisJdTE2IHRocmVzaG9sZHNbXSA9IHsKKwkJMHgyMDBlLAkJMCwKKwkJMHhiZjgyLAkJZ28tPm1vZGV0WzBdLnBpeGVsX3RocmVzaG9sZCwKKwkJMHhiZjgzLAkJZ28tPm1vZGV0WzFdLnBpeGVsX3RocmVzaG9sZCwKKwkJMHhiZjg0LAkJZ28tPm1vZGV0WzJdLnBpeGVsX3RocmVzaG9sZCwKKwkJMHhiZjg1LAkJZ28tPm1vZGV0WzNdLnBpeGVsX3RocmVzaG9sZCwKKwkJMHhiZjg2LAkJZ28tPm1vZGV0WzBdLm1vdGlvbl90aHJlc2hvbGQsCisJCTB4YmY4NywJCWdvLT5tb2RldFsxXS5tb3Rpb25fdGhyZXNob2xkLAorCQkweGJmODgsCQlnby0+bW9kZXRbMl0ubW90aW9uX3RocmVzaG9sZCwKKwkJMHhiZjg5LAkJZ28tPm1vZGV0WzNdLm1vdGlvbl90aHJlc2hvbGQsCisJCTB4YmY4YSwJCWdvLT5tb2RldFswXS5tYl90aHJlc2hvbGQsCisJCTB4YmY4YiwJCWdvLT5tb2RldFsxXS5tYl90aHJlc2hvbGQsCisJCTB4YmY4YywJCWdvLT5tb2RldFsyXS5tYl90aHJlc2hvbGQsCisJCTB4YmY4ZCwJCWdvLT5tb2RldFszXS5tYl90aHJlc2hvbGQsCisJCTB4YmY4ZSwJCTAsCisJCTB4YmY4ZiwJCTAsCisJCTAsCQkwLAorCX07CisKKwlyZXQgPSBjb3B5X3BhY2thZ2VzKGNvZGUsIHRocmVzaG9sZHMsIDEsIHNwYWNlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC0xOworCWNudCArPSByZXQ7CisKKwlhZGRyID0gMHhiYWMwOworCW1lbXNldChwYWNrLCAwLCA2NCk7CisJaSA9IDA7CisJZm9yIChtYiA9IDA7IG1iIDwgMTYyNDsgKyttYikgeworCQlwYWNrW2kgKiAyICsgM10gPDw9IDI7CisJCXBhY2tbaSAqIDIgKyAzXSB8PSBnby0+bW9kZXRfbWFwW21iXTsKKwkJaWYgKG1iICUgOCAhPSA3KQorCQkJY29udGludWU7CisJCXBhY2tbaSAqIDIgKyAyXSA9IGFkZHIrKzsKKwkJKytpOworCQlpZiAoaSA9PSAxMCB8fCBtYiA9PSAxNjIzKSB7CisJCQlwYWNrWzBdID0gMHgyMDAwIHwgaTsKKwkJCXJldCA9IGNvcHlfcGFja2FnZXMoY29kZSArIGNudCwgcGFjaywgMSwgc3BhY2UgLSBjbnQpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJY250ICs9IHJldDsKKwkJCWkgPSAwOworCQkJbWVtc2V0KHBhY2ssIDAsIDY0KTsKKwkJfQorCQlwYWNrW2kgKiAyICsgM10gPSAwOworCX0KKworCW1lbXNldChwYWNrLCAwLCA2NCk7CisJaSA9IDA7CisJZm9yIChhZGRyID0gMHhiYjkwOyBhZGRyIDwgMHhiYmZhOyArK2FkZHIpIHsKKwkJcGFja1tpICogMiArIDJdID0gYWRkcjsKKwkJcGFja1tpICogMiArIDNdID0gMDsKKwkJKytpOworCQlpZiAoaSA9PSAxMCB8fCBhZGRyID09IDB4YmJmOSkgeworCQkJcGFja1swXSA9IDB4MjAwMCB8IGk7CisJCQlyZXQgPSBjb3B5X3BhY2thZ2VzKGNvZGUgKyBjbnQsIHBhY2ssIDEsIHNwYWNlIC0gY250KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCWNudCArPSByZXQ7CisJCQlpID0gMDsKKwkJCW1lbXNldChwYWNrLCAwLCA2NCk7CisJCX0KKwl9CisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGludCBkb19zcGVjaWFsKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgdHlwZSwgdTE2ICpjb2RlLCBpbnQgc3BhY2UsCisJCQlpbnQgKmZyYW1lbGVuKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU1BFQ0lBTF9GUk1fSEVBRDoKKwkJc3dpdGNoIChnby0+Zm9ybWF0KSB7CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NSlBFRzoKKwkJCXJldHVybiBnZW5fbWpwZWdoZHJfdG9fcGFja2FnZShnbywgY29kZSwgc3BhY2UpOworCQljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzE6CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMjoKKwkJCXJldHVybiBnZW5fbXBlZzFoZHJfdG9fcGFja2FnZShnbywgY29kZSwgc3BhY2UsCisJCQkJCQkJCWZyYW1lbGVuKTsKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01QRUc0OgorCQkJcmV0dXJuIGdlbl9tcGVnNGhkcl90b19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSwKKwkJCQkJCQkJZnJhbWVsZW4pOworCQl9CisJY2FzZSBTUEVDSUFMX0JSQ19DVFJMOgorCQlyZXR1cm4gYnJjdHJsX3RvX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlLCBmcmFtZWxlbik7CisJY2FzZSBTUEVDSUFMX0NPTkZJRzoKKwkJcmV0dXJuIGNvbmZpZ19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSk7CisJY2FzZSBTUEVDSUFMX1NFUUhFQUQ6CisJCXN3aXRjaCAoZ28tPmZvcm1hdCkgeworCQljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzE6CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMjoKKwkJCXJldHVybiBzZXFoZWFkX3RvX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlLAorCQkJCQltcGVnMV9zZXF1ZW5jZV9oZWFkZXIpOworCQljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzQ6CisJCQlyZXR1cm4gc2VxaGVhZF90b19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSwKKwkJCQkJbXBlZzRfc2VxdWVuY2VfaGVhZGVyKTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBTUEVDSUFMX0FWX1NZTkM6CisJCXJldHVybiBhdnN5bmNfdG9fcGFja2FnZShnbywgY29kZSwgc3BhY2UpOworCWNhc2UgU1BFQ0lBTF9GSU5BTDoKKwkJcmV0dXJuIGZpbmFsX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlKTsKKwljYXNlIFNQRUNJQUxfQVVESU86CisJCXJldHVybiBhdWRpb190b19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSk7CisJY2FzZSBTUEVDSUFMX01PREVUOgorCQlyZXR1cm4gbW9kZXRfdG9fcGFja2FnZShnbywgY29kZSwgc3BhY2UpOworCX0KKwlwcmludGsoS0VSTl9FUlIKKwkJImdvNzAwNzogZmlybXdhcmUgZmlsZSBjb250YWlucyB1bnN1cHBvcnRlZCBmZWF0dXJlICUwNHhcbiIsCisJCXR5cGUpOworCXJldHVybiAtMTsKK30KKworaW50IGdvNzAwN19jb25zdHJ1Y3RfZndfaW1hZ2Uoc3RydWN0IGdvNzAwNyAqZ28sIHU4ICoqZncsIGludCAqZndsZW4pCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKwl1MTYgKmNvZGUsICpzcmM7CisJaW50IGZyYW1lbGVuWzhdID0geyB9OyAvKiBob2xkcyB0aGUgbGVuZ3RocyBvZiBlbXB0eSBmcmFtZSB0ZW1wbGF0ZXMgKi8KKwlpbnQgY29kZXNwYWNlID0gNjQgKiAxMDI0LCBpID0gMCwgc3JjbGVuLCBjaHVua19sZW4sIGNodW5rX2ZsYWdzOworCWludCBtb2RlX2ZsYWc7CisJaW50IHJldDsKKworCXN3aXRjaCAoZ28tPmZvcm1hdCkgeworCWNhc2UgR083MDA3X0ZPUk1BVF9NSlBFRzoKKwkJbW9kZV9mbGFnID0gRkxBR19NT0RFX01KUEVHOworCQlicmVhazsKKwljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzE6CisJCW1vZGVfZmxhZyA9IEZMQUdfTU9ERV9NUEVHMTsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcyOgorCQltb2RlX2ZsYWcgPSBGTEFHX01PREVfTVBFRzI7CisJCWJyZWFrOworCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHNDoKKwkJbW9kZV9mbGFnID0gRkxBR19NT0RFX01QRUc0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZ28tPmJvYXJkX2luZm8tPmZpcm13YXJlLCBnby0+ZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJnbzcwMDc6IHVuYWJsZSB0byBsb2FkIGZpcm13YXJlIGZyb20gZmlsZSBcIiVzXCJcbiIsCisJCQlnby0+Ym9hcmRfaW5mby0+ZmlybXdhcmUpOworCQlyZXR1cm4gLTE7CisJfQorCWNvZGUgPSBrbWFsbG9jKGNvZGVzcGFjZSAqIDIsIEdGUF9LRVJORUwpOworCWlmIChjb2RlID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3IgIgorCQkJCSJmaXJtd2FyZSBjb25zdHJ1Y3Rpb25cbiIsIGNvZGVzcGFjZSAqIDIpOworCQlnb3RvIGZ3X2ZhaWxlZDsKKwl9CisJbWVtc2V0KGNvZGUsIDAsIGNvZGVzcGFjZSAqIDIpOworCXNyYyA9ICh1MTYgKilmd19lbnRyeS0+ZGF0YTsKKwlzcmNsZW4gPSBmd19lbnRyeS0+c2l6ZSAvIDI7CisJd2hpbGUgKHNyY2xlbiA+PSAyKSB7CisJCWNodW5rX2ZsYWdzID0gX19sZTE2X3RvX2NwdShzcmNbMF0pOworCQljaHVua19sZW4gPSBfX2xlMTZfdG9fY3B1KHNyY1sxXSk7CisJCWlmIChjaHVua19sZW4gKyAyID4gc3JjbGVuKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogZmlybXdhcmUgZmlsZSBcIiVzXCIgIgorCQkJCQkiYXBwZWFycyB0byBiZSBjb3JydXB0ZWRcbiIsCisJCQkJCWdvLT5ib2FyZF9pbmZvLT5maXJtd2FyZSk7CisJCQlnb3RvIGZ3X2ZhaWxlZDsKKwkJfQorCQlpZiAoY2h1bmtfZmxhZ3MgJiBtb2RlX2ZsYWcpIHsKKwkJCWlmIChjaHVua19mbGFncyAmIEZMQUdfU1BFQ0lBTCkgeworCQkJCXJldCA9IGRvX3NwZWNpYWwoZ28sIF9fbGUxNl90b19jcHUoc3JjWzJdKSwKKwkJCQkJJmNvZGVbaV0sIGNvZGVzcGFjZSAtIGksIGZyYW1lbGVuKTsKKwkJCQlpZiAocmV0IDwgMCkgeworCQkJCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogaW5zdWZmaWNpZW50ICIKKwkJCQkJCQkibWVtb3J5IGZvciBmaXJtd2FyZSAiCisJCQkJCQkJImNvbnN0cnVjdGlvblxuIik7CisJCQkJCWdvdG8gZndfZmFpbGVkOworCQkJCX0KKwkJCQlpICs9IHJldDsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNvZGVzcGFjZSAtIGkgPCBjaHVua19sZW4pIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IGluc3VmZmljaWVudCAiCisJCQkJCQkJIm1lbW9yeSBmb3IgZmlybXdhcmUgIgorCQkJCQkJCSJjb25zdHJ1Y3Rpb25cbiIpOworCQkJCQlnb3RvIGZ3X2ZhaWxlZDsKKwkJCQl9CisJCQkJbWVtY3B5KCZjb2RlW2ldLCAmc3JjWzJdLCBjaHVua19sZW4gKiAyKTsKKwkJCQlpICs9IGNodW5rX2xlbjsKKwkJCX0KKwkJfQorCQlzcmNsZW4gLT0gY2h1bmtfbGVuICsgMjsKKwkJc3JjICs9IGNodW5rX2xlbiArIDI7CisJfQorCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCSpmdyA9ICh1OCAqKWNvZGU7CisJKmZ3bGVuID0gaSAqIDI7CisJcmV0dXJuIDA7CisKK2Z3X2ZhaWxlZDoKKwlrZnJlZShjb2RlKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1pMmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYmFhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1pMmMuYwpAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgImdvNzAwNy1wcml2LmgiCisjaW5jbHVkZSAid2lzLWkyYy5oIgorCisvKioqKioqKioqKioqKiogUmVnaXN0cmF0aW9uIGludGVyZmFjZSBmb3IgSTJDIGNsaWVudCBkcml2ZXJzICoqKioqKioqKioqKioqLworCisvKiBTaW5jZSB0aGVyZSdzIG5vIHdheSB0byBhdXRvLXByb2JlIHRoZSBJMkMgZGV2aWNlcyBjb25uZWN0ZWQgdG8gdGhlIEkyQworICogYnVzIG9uIHRoZSBnbzcwMDcsIHdlIGhhdmUgdGhpcyBzaWxseSBsaXR0bGUgcmVnaXN0cmF0aW9uIHN5c3RlbSB0aGF0CisgKiBjbGllbnQgZHJpdmVycyBjYW4gdXNlIHRvIHJlZ2lzdGVyIHRoZWlyIEkyQyBkcml2ZXIgSUQgYW5kIHRoZWlyCisgKiBkZXRlY3RfY2xpZW50IGZ1bmN0aW9uICh0aGUgb25lIHRoYXQncyBub3JtYWxseSBwYXNzZWQgdG8gaTJjX3Byb2JlKS4KKyAqCisgKiBXaGVuIGEgbmV3IGdvNzAwNyBkZXZpY2UgaXMgY29ubmVjdGVkLCB3ZSBjYW4gbG9vayB1cCBpbiBhIGJvYXJkIGluZm8KKyAqIHRhYmxlIGJ5IHRoZSBVU0Igb3IgUENJIHZlbmRvci9wcm9kdWN0L3JldmlzaW9uIElEIHRvIGRldGVybWluZQorICogd2hpY2ggSTJDIGNsaWVudCBtb2R1bGUgdG8gbG9hZC4gIFRoZSBjbGllbnQgZHJpdmVyIG1vZHVsZSB3aWxsIHJlZ2lzdGVyCisgKiBpdHNlbGYgaGVyZSwgYW5kIHRoZW4gd2UgY2FuIGNhbGwgdGhlIHJlZ2lzdGVyZWQgZGV0ZWN0X2NsaWVudCBmdW5jdGlvbgorICogdG8gZm9yY2UtbG9hZCBhIG5ldyBjbGllbnQgYXQgdGhlIGFkZHJlc3MgbGlzdGVkIGluIHRoZSBib2FyZCBpbmZvIHRhYmxlLgorICoKKyAqIFJlYWxseSB0aGUgSTJDIHN1YnN5c3RlbSBzaG91bGQgaGF2ZSBhIHdheSB0byBmb3JjZS1sb2FkIEkyQyBjbGllbnQKKyAqIGRyaXZlcnMgd2hlbiB3ZSBoYXZlIGEgcHJpb3JpIGtub3dsZWRnZSBvZiB3aGF0J3Mgb24gdGhlIGJ1cywgZXNwZWNpYWxseQorICogc2luY2UgdGhlIGV4aXN0aW5nIEkyQyBhdXRvLXByb2JlIG1lY2hhbmlzbSBpcyBzbyBob2tleSwgYnV0IHdlJ2xsIHVzZQorICogb3VyIG93biBtZWNoYW5pc20gZm9yIHRoZSB0aW1lIGJlaW5nLiAqLworCitzdHJ1Y3Qgd2lzX2kyY19jbGllbnRfZHJpdmVyIHsKKwl1bnNpZ25lZCBpbnQgaWQ7CisJZm91bmRfcHJvYyBmb3VuZF9wcm9jOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQoaTJjX2NsaWVudF9kcml2ZXJzKTsKK3N0YXRpYyBERUNMQVJFX01VVEVYKGkyY19jbGllbnRfZHJpdmVyX2xpc3RfbG9jayk7CisKKy8qIENsaWVudCBkcml2ZXJzIHJlZ2lzdGVyIGhlcmUgYnkgdGhlaXIgSTJDIGRyaXZlciBJRCAqLworaW50IHdpc19pMmNfYWRkX2RyaXZlcih1bnNpZ25lZCBpbnQgaWQsIGZvdW5kX3Byb2MgZm91bmRfcHJvYykKK3sKKwlzdHJ1Y3Qgd2lzX2kyY19jbGllbnRfZHJpdmVyICpkcml2ZXI7CisKKwlkcml2ZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2lzX2kyY19jbGllbnRfZHJpdmVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRyaXZlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkcml2ZXItPmlkID0gaWQ7CisJZHJpdmVyLT5mb3VuZF9wcm9jID0gZm91bmRfcHJvYzsKKworCWRvd24oJmkyY19jbGllbnRfZHJpdmVyX2xpc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZHJpdmVyLT5saXN0LCAmaTJjX2NsaWVudF9kcml2ZXJzKTsKKwl1cCgmaTJjX2NsaWVudF9kcml2ZXJfbGlzdF9sb2NrKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh3aXNfaTJjX2FkZF9kcml2ZXIpOworCit2b2lkIHdpc19pMmNfZGVsX2RyaXZlcihmb3VuZF9wcm9jIGZvdW5kX3Byb2MpCit7CisJc3RydWN0IHdpc19pMmNfY2xpZW50X2RyaXZlciAqZHJpdmVyLCAqbmV4dDsKKworCWRvd24oJmkyY19jbGllbnRfZHJpdmVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRyaXZlciwgbmV4dCwgJmkyY19jbGllbnRfZHJpdmVycywgbGlzdCkKKwkJaWYgKGRyaXZlci0+Zm91bmRfcHJvYyA9PSBmb3VuZF9wcm9jKSB7CisJCQlsaXN0X2RlbCgmZHJpdmVyLT5saXN0KTsKKwkJCWtmcmVlKGRyaXZlcik7CisJCX0KKwl1cCgmaTJjX2NsaWVudF9kcml2ZXJfbGlzdF9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0wod2lzX2kyY19kZWxfZHJpdmVyKTsKKworLyogVGhlIG1haW4gZ283MDA3IGRyaXZlciBjYWxscyB0aGlzIHRvIGluc3RhbnRpYXRlIGEgY2xpZW50IGJ5IGRyaXZlcgorICogSUQgYW5kIGJ1cyBhZGRyZXNzLCB3aGljaCBhcmUgYm90aCBzdG9yZWQgaW4gdGhlIGJvYXJkIGluZm8gdGFibGUgKi8KK2ludCB3aXNfaTJjX3Byb2JlX2RldmljZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJdW5zaWduZWQgaW50IGlkLCBpbnQgYWRkcikKK3sKKwlzdHJ1Y3Qgd2lzX2kyY19jbGllbnRfZHJpdmVyICpkcml2ZXI7CisJaW50IGZvdW5kID0gMDsKKworCWlmIChhZGRyIDwgMCB8fCBhZGRyID4gMHg3ZikKKwkJcmV0dXJuIC0xOworCWRvd24oJmkyY19jbGllbnRfZHJpdmVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkcml2ZXIsICZpMmNfY2xpZW50X2RyaXZlcnMsIGxpc3QpCisJCWlmIChkcml2ZXItPmlkID09IGlkKSB7CisJCQlpZiAoZHJpdmVyLT5mb3VuZF9wcm9jKGFkYXB0ZXIsIGFkZHIsIDApID09IDApCisJCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl1cCgmaTJjX2NsaWVudF9kcml2ZXJfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKiogRHJpdmVyIGZvciBvbi1ib2FyZCBJMkMgYWRhcHRlciAqKioqKioqKioqKioqKioqKioqKiovCisKKy8qICNkZWZpbmUgR083MDA3X0kyQ19ERUJVRyAqLworCisjZGVmaW5lIFNQSV9JMkNfQUREUl9CQVNFCQkweDE0MDAKKyNkZWZpbmUgU1RBVFVTX1JFR19BRERSCQkJKFNQSV9JMkNfQUREUl9CQVNFICsgMHgyKQorI2RlZmluZSBJMkNfQ1RSTF9SRUdfQUREUgkJKFNQSV9JMkNfQUREUl9CQVNFICsgMHg2KQorI2RlZmluZSBJMkNfREVWX1VQX0FERFJfUkVHX0FERFIJKFNQSV9JMkNfQUREUl9CQVNFICsgMHg3KQorI2RlZmluZSBJMkNfTE9fQUREUl9SRUdfQUREUgkJKFNQSV9JMkNfQUREUl9CQVNFICsgMHg4KQorI2RlZmluZSBJMkNfREFUQV9SRUdfQUREUgkJKFNQSV9JMkNfQUREUl9CQVNFICsgMHg5KQorI2RlZmluZSBJMkNfQ0xLRlJFUV9SRUdfQUREUgkJKFNQSV9JMkNfQUREUl9CQVNFICsgMHhhKQorCisjZGVmaW5lIEkyQ19TVEFURV9NQVNLCQkJMHgwMDA3CisjZGVmaW5lIEkyQ19SRUFEX1JFQURZX01BU0sJCTB4MDAwOAorCisvKiBUaGVyZSBpcyBvbmx5IG9uZSBJMkMgcG9ydCBvbiB0aGUgVFcyODA0IHRoYXQgZmVlZHMgYWxsIGZvdXIgR083MDA3IFZJUHMKKyAqIG9uIHRoZSBBZGxpbmsgUENJLU1QRzI0LCBzbyBhY2Nlc3MgaXMgc2hhcmVkIGJldHdlZW4gYWxsIG9mIHRoZW0uICovCitzdGF0aWMgREVDTEFSRV9NVVRFWChhZGxpbmtfbXBnMjRfaTJjX2xvY2spOworCitzdGF0aWMgaW50IGdvNzAwN19pMmNfeGZlcihzdHJ1Y3QgZ283MDA3ICpnbywgdTE2IGFkZHIsIGludCByZWFkLAorCQl1MTYgY29tbWFuZCwgaW50IGZsYWdzLCB1OCAqZGF0YSkKK3sKKwlpbnQgaSwgcmV0ID0gLTE7CisJdTE2IHZhbDsKKworCWlmIChnby0+c3RhdHVzID09IFNUQVRVU19TSFVURE9XTikKKwkJcmV0dXJuIC0xOworCisjaWZkZWYgR083MDA3X0kyQ19ERUJVRworCWlmIChyZWFkKQorCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3LWkyYzogcmVhZGluZyAweCUwMnggb24gMHglMDJ4XG4iLAorCQkJY29tbWFuZCwgYWRkcik7CisJZWxzZQorCQlwcmludGsoS0VSTl9ERUJVRworCQkJImdvNzAwNy1pMmM6IHdyaXRpbmcgMHglMDJ4IHRvIDB4JTAyeCBvbiAweCUwMnhcbiIsCisJCQkqZGF0YSwgY29tbWFuZCwgYWRkcik7CisjZW5kaWYKKworCWRvd24oJmdvLT5od19sb2NrKTsKKworCWlmIChnby0+Ym9hcmRfaWQgPT0gR083MDA3X0JPQVJESURfQURMSU5LX01QRzI0KSB7CisJCS8qIEJyaWRnZSB0aGUgSTJDIHBvcnQgb24gdGhpcyBHTzcwMDcgdG8gdGhlIHNoYXJlZCBidXMgKi8KKwkJZG93bigmYWRsaW5rX21wZzI0X2kyY19sb2NrKTsKKwkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIDB4M2M4MiwgMHgwMDIwKTsKKwl9CisKKwkvKiBXYWl0IGZvciBJMkMgYWRhcHRlciB0byBiZSByZWFkeSAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgKytpKSB7CisJCWlmIChnbzcwMDdfcmVhZF9hZGRyKGdvLCBTVEFUVVNfUkVHX0FERFIsICZ2YWwpIDwgMCkKKwkJCWdvdG8gaTJjX2RvbmU7CisJCWlmICghKHZhbCAmIEkyQ19TVEFURV9NQVNLKSkKKwkJCWJyZWFrOworCQltc2xlZXAoMTAwKTsKKwl9CisJaWYgKGkgPT0gMTApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctaTJjOiBJMkMgYWRhcHRlciBpcyBodW5nXG4iKTsKKwkJZ290byBpMmNfZG9uZTsKKwl9CisKKwkvKiBTZXQgdGFyZ2V0IHJlZ2lzdGVyIChjb21tYW5kKSAqLworCWdvNzAwN193cml0ZV9hZGRyKGdvLCBJMkNfQ1RSTF9SRUdfQUREUiwgZmxhZ3MpOworCWdvNzAwN193cml0ZV9hZGRyKGdvLCBJMkNfTE9fQUREUl9SRUdfQUREUiwgY29tbWFuZCk7CisKKwkvKiBJZiB3ZSdyZSB3cml0aW5nLCBzZW5kIHRoZSBkYXRhIGFuZCB0YXJnZXQgYWRkcmVzcyBhbmQgd2UncmUgZG9uZSAqLworCWlmICghcmVhZCkgeworCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgSTJDX0RBVEFfUkVHX0FERFIsICpkYXRhKTsKKwkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIEkyQ19ERVZfVVBfQUREUl9SRUdfQUREUiwKKwkJCQkJKGFkZHIgPDwgOSkgfCAoY29tbWFuZCA+PiA4KSk7CisJCXJldCA9IDA7CisJCWdvdG8gaTJjX2RvbmU7CisJfQorCisJLyogT3RoZXJ3aXNlLCB3ZSdyZSByZWFkaW5nLiAgRmlyc3QgY2xlYXIgaTJjX3J4X2RhdGFfcmR5LiAqLworCWlmIChnbzcwMDdfcmVhZF9hZGRyKGdvLCBJMkNfREFUQV9SRUdfQUREUiwgJnZhbCkgPCAwKQorCQlnb3RvIGkyY19kb25lOworCisJLyogU2VuZCB0aGUgdGFyZ2V0IGFkZHJlc3MgcGx1cyByZWFkIGZsYWcgKi8KKwlnbzcwMDdfd3JpdGVfYWRkcihnbywgSTJDX0RFVl9VUF9BRERSX1JFR19BRERSLAorCQkJKGFkZHIgPDwgOSkgfCAweDAxMDAgfCAoY29tbWFuZCA+PiA4KSk7CisKKwkvKiBXYWl0IGZvciBpMmNfcnhfZGF0YV9yZHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkgeworCQlpZiAoZ283MDA3X3JlYWRfYWRkcihnbywgU1RBVFVTX1JFR19BRERSLCAmdmFsKSA8IDApCisJCQlnb3RvIGkyY19kb25lOworCQlpZiAodmFsICYgSTJDX1JFQURfUkVBRFlfTUFTSykKKwkJCWJyZWFrOworCQltc2xlZXAoMTAwKTsKKwl9CisJaWYgKGkgPT0gMTApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctaTJjOiBJMkMgYWRhcHRlciBpcyBodW5nXG4iKTsKKwkJZ290byBpMmNfZG9uZTsKKwl9CisKKwkvKiBSZXRyaWV2ZSB0aGUgcmVhZCBieXRlICovCisJaWYgKGdvNzAwN19yZWFkX2FkZHIoZ28sIEkyQ19EQVRBX1JFR19BRERSLCAmdmFsKSA8IDApCisJCWdvdG8gaTJjX2RvbmU7CisJKmRhdGEgPSB2YWw7CisJcmV0ID0gMDsKKworaTJjX2RvbmU6CisJaWYgKGdvLT5ib2FyZF9pZCA9PSBHTzcwMDdfQk9BUkRJRF9BRExJTktfTVBHMjQpIHsKKwkJLyogSXNvbGF0ZSB0aGUgSTJDIHBvcnQgb24gdGhpcyBHTzcwMDcgZnJvbSB0aGUgc2hhcmVkIGJ1cyAqLworCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgzYzgyLCAweDAwMDApOworCQl1cCgmYWRsaW5rX21wZzI0X2kyY19sb2NrKTsKKwl9CisJdXAoJmdvLT5od19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdvNzAwN19zbWJ1c194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgdTE2IGFkZHIsCisJCXVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsCisJCXU4IGNvbW1hbmQsIGludCBzaXplLCB1bmlvbiBpMmNfc21idXNfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcHRlcik7CisKKwlpZiAoc2l6ZSAhPSBJMkNfU01CVVNfQllURV9EQVRBKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGdvNzAwN19pMmNfeGZlcihnbywgYWRkciwgcmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCwgY29tbWFuZCwKKwkJCWZsYWdzICYgSTJDX0NMSUVOVF9TQ0NCID8gMHgxMCA6IDB4MDAsICZkYXRhLT5ieXRlKTsKK30KKworLyogVkVSWSBMSU1JVEVEIEkyQyBtYXN0ZXIgeGZlciBmdW5jdGlvbiAtLSBvbmx5IG5lZWRlZCBiZWNhdXNlIHRoZQorICogU01CdXMgZnVuY3Rpb25zIG9ubHkgc3VwcG9ydCA4LWJpdCBjb21tYW5kcyBhbmQgdGhlIFNBQTcxMzUgdXNlcworICogMTYtYml0IGNvbW1hbmRzLiAgVGhlIEkyQyBpbnRlcmZhY2Ugb24gdGhlIEdPNzAwNywgYXMgbGltaXRlZCBhcworICogaXQgaXMsIGRvZXMgc3VwcG9ydCB0aGlzIG1vZGUuICovCisKK3N0YXRpYyBpbnQgZ283MDA3X2kyY19tYXN0ZXJfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSwgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcHRlcik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKKwkJLyogV2UgY2FuIG9ubHkgZG8gdHdvIHRoaW5ncyBoZXJlIC0tIHdyaXRlIHRocmVlIGJ5dGVzLCBvcgorCQkgKiB3cml0ZSB0d28gYnl0ZXMgYW5kIHJlYWQgb25lIGJ5dGUuICovCisJCWlmIChtc2dzW2ldLmxlbiA9PSAyKSB7CisJCQlpZiAoaSArIDEgPT0gbnVtIHx8IG1zZ3NbaV0uYWRkciAhPSBtc2dzW2kgKyAxXS5hZGRyIHx8CisJCQkJCShtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQpIHx8CisJCQkJCSEobXNnc1tpICsgMV0uZmxhZ3MgJiBJMkNfTV9SRCkgfHwKKwkJCQkJbXNnc1tpICsgMV0ubGVuICE9IDEpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKGdvNzAwN19pMmNfeGZlcihnbywgbXNnc1tpXS5hZGRyLCAxLAorCQkJCQkobXNnc1tpXS5idWZbMF0gPDwgOCkgfCBtc2dzW2ldLmJ1ZlsxXSwKKwkJCQkJMHgwMSwgJm1zZ3NbaSArIDFdLmJ1ZlswXSkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCSsraTsKKwkJfSBlbHNlIGlmIChtc2dzW2ldLmxlbiA9PSAzKSB7CisJCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChtc2dzW2ldLmxlbiAhPSAzKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChnbzcwMDdfaTJjX3hmZXIoZ28sIG1zZ3NbaV0uYWRkciwgMCwKKwkJCQkJKG1zZ3NbaV0uYnVmWzBdIDw8IDgpIHwgbXNnc1tpXS5idWZbMV0sCisJCQkJCTB4MDEsICZtc2dzW2ldLmJ1ZlsyXSkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgZ283MDA3X2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBnbzcwMDdfYWxnbyA9IHsKKwkuc21idXNfeGZlcgk9IGdvNzAwN19zbWJ1c194ZmVyLAorCS5tYXN0ZXJfeGZlcgk9IGdvNzAwN19pMmNfbWFzdGVyX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJPSBnbzcwMDdfZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgZ283MDA3X2FkYXBfdGVtcGwgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuY2xhc3MJCQk9IEkyQ19DTEFTU19UVl9BTkFMT0csCisJLm5hbWUJCQk9ICJXSVMgR083MDA3U0IiLAorCS5pZAkJCT0gSTJDX0FMR09fR083MDA3LAorCS5hbGdvCQkJPSAmZ283MDA3X2FsZ28sCit9OworCitpbnQgZ283MDA3X2kyY19pbml0KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCW1lbWNweSgmZ28tPmkyY19hZGFwdGVyLCAmZ283MDA3X2FkYXBfdGVtcGwsCisJCQlzaXplb2YoZ283MDA3X2FkYXBfdGVtcGwpKTsKKwlnby0+aTJjX2FkYXB0ZXIuZGV2LnBhcmVudCA9IGdvLT5kZXY7CisJaTJjX3NldF9hZGFwZGF0YSgmZ28tPmkyY19hZGFwdGVyLCBnbyk7CisJaWYgKGkyY19hZGRfYWRhcHRlcigmZ28tPmkyY19hZGFwdGVyKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ283MDA3LWkyYzogZXJyb3I6IGkyY19hZGRfYWRhcHRlciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctcHJpdi5oIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNTU0MmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1wcml2LmgKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qCisgKiBUaGlzIGlzIHRoZSBwcml2YXRlIGluY2x1ZGUgZmlsZSBmb3IgdGhlIGdvNzAwNyBkcml2ZXIuICBJdCBzaG91bGQgbm90CisgKiBiZSBpbmNsdWRlZCBieSBhbnlib2R5IGJ1dCB0aGUgZHJpdmVyIGl0c2VsZiwgYW5kIGVzcGVjaWFsbHkgbm90IGJ5CisgKiB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucy4KKyAqLworCitzdHJ1Y3QgZ283MDA3OworCisvKiBJRHMgdG8gYWN0aXZhdGUgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydCBjb2RlICovCisjZGVmaW5lIEdPNzAwN19CT0FSRElEX01BVFJJWF9JSQkwCisjZGVmaW5lIEdPNzAwN19CT0FSRElEX01BVFJJWF9SRUxPQUQJMQorI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9TVEFSX1RSRUsJMgorI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9QQ0lfVk9ZQUdFUgkzCisjZGVmaW5lIEdPNzAwN19CT0FSRElEX1hNRU4JCTQKKyNkZWZpbmUgR083MDA3X0JPQVJESURfWE1FTl9JSQkJNQorI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9YTUVOX0lJSQkJNgorI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9NQVRSSVhfUkVWCTcKKyNkZWZpbmUgR083MDA3X0JPQVJESURfUFhfTTQwMlUJCTE2CisjZGVmaW5lIEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9BTlkJMTcgLyogbmVlZCB0byBjaGVjayB0dW5lciBtb2RlbCAqLworI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfTkEJMTggLyogZGV0ZWN0ZWQgTlRTQyB0dW5lciAqLworI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfRVUJMTkgLyogZGV0ZWN0ZWQgUEFMIHR1bmVyICovCisjZGVmaW5lIEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9KUAkyMCAvKiBkZXRlY3RlZCBOVFNDLUogdHVuZXIgKi8KKyNkZWZpbmUgR083MDA3X0JPQVJESURfTElGRVZJRVdfTFIxOTIJMjEgLyogVFYgV2Fsa2VyIFVsdHJhICovCisjZGVmaW5lIEdPNzAwN19CT0FSRElEX0VORFVSQQkJMjIKKyNkZWZpbmUgR083MDA3X0JPQVJESURfQURMSU5LX01QRzI0CTIzCisKKy8qIFZhcmlvdXMgY2hhcmFjdGVyaXN0aWNzIG9mIGVhY2ggYm9hcmQgKi8KKyNkZWZpbmUgR083MDA3X0JPQVJEX0hBU19BVURJTwkJKDE8PDApCisjZGVmaW5lIEdPNzAwN19CT0FSRF9VU0VfT05CT0FSRF9JMkMJKDE8PDEpCisjZGVmaW5lIEdPNzAwN19CT0FSRF9IQVNfVFVORVIJCSgxPDwyKQorCisvKiBDaGFyYWN0ZXJpc3RpY3Mgb2Ygc2Vuc29yIGRldmljZXMgKi8KKyNkZWZpbmUgR083MDA3X1NFTlNPUl9WQUxJRF9QT0xBUgkoMTw8MCkKKyNkZWZpbmUgR083MDA3X1NFTlNPUl9IUkVGX1BPTEFSCSgxPDwxKQorI2RlZmluZSBHTzcwMDdfU0VOU09SX1ZSRUZfUE9MQVIJKDE8PDIpCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfRklFTERfSURfUE9MQVIJKDE8PDMpCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfQklUX1dJRFRICQkoMTw8NCkKKyNkZWZpbmUgR083MDA3X1NFTlNPUl9WQUxJRF9FTkFCTEUJKDE8PDUpCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfNjU2CQkoMTw8NikKKyNkZWZpbmUgR083MDA3X1NFTlNPUl9DT05GSUdfTUFTSwkweDdmCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfVFYJCSgxPDw3KQorI2RlZmluZSBHTzcwMDdfU0VOU09SX1ZCSQkJKDE8PDgpCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfU0NBTElORwkJKDE8PDkpCisKKy8qIENoYXJhY3RlcmlzdGljcyBvZiBhdWRpbyBzZW5zb3IgZGV2aWNlcyAqLworI2RlZmluZSBHTzcwMDdfQVVESU9fSTJTX01PREVfMQkJKDEpCisjZGVmaW5lIEdPNzAwN19BVURJT19JMlNfTU9ERV8yCQkoMikKKyNkZWZpbmUgR083MDA3X0FVRElPX0kyU19NT0RFXzMJCSgzKQorI2RlZmluZSBHTzcwMDdfQVVESU9fQkNMS19QT0xBUgkJKDE8PDIpCisjZGVmaW5lIEdPNzAwN19BVURJT19XT1JEXzE0CQkoMTQ8PDQpCisjZGVmaW5lIEdPNzAwN19BVURJT19XT1JEXzE2CQkoMTY8PDQpCisjZGVmaW5lIEdPNzAwN19BVURJT19PTkVfQ0hBTk5FTAkoMTw8MTEpCisjZGVmaW5lIEdPNzAwN19BVURJT19JMlNfTUFTVEVSCQkoMTw8MTYpCisjZGVmaW5lIEdPNzAwN19BVURJT19PS0lfTU9ERQkJKDE8PDE3KQorCitzdHJ1Y3QgZ283MDA3X2JvYXJkX2luZm8geworCWNoYXIgKmZpcm13YXJlOworCXVuc2lnbmVkIGludCBmbGFnczsKKwlpbnQgaHBpX2J1ZmZlcl9jYXA7CisJdW5zaWduZWQgaW50IHNlbnNvcl9mbGFnczsKKwlpbnQgc2Vuc29yX3dpZHRoOworCWludCBzZW5zb3JfaGVpZ2h0OworCWludCBzZW5zb3JfZnJhbWVyYXRlOworCWludCBzZW5zb3JfaF9vZmZzZXQ7CisJaW50IHNlbnNvcl92X29mZnNldDsKKwl1bnNpZ25lZCBpbnQgYXVkaW9fZmxhZ3M7CisJaW50IGF1ZGlvX3JhdGU7CisJaW50IGF1ZGlvX2JjbGtfZGl2OworCWludCBhdWRpb19tYWluX2RpdjsKKwlpbnQgbnVtX2kyY19kZXZzOworCXN0cnVjdCB7CisJCWludCBpZDsKKwkJaW50IGFkZHI7CisJfSBpMmNfZGV2c1s0XTsKKwlpbnQgbnVtX2lucHV0czsKKwlzdHJ1Y3QgeworCQlpbnQgdmlkZW9faW5wdXQ7CisJCWludCBhdWRpb19pbnB1dDsKKwkJY2hhciAqbmFtZTsKKwl9IGlucHV0c1s0XTsKK307CisKK3N0cnVjdCBnbzcwMDdfaHBpX29wcyB7CisJaW50ICgqaW50ZXJmYWNlX3Jlc2V0KShzdHJ1Y3QgZ283MDA3ICpnbyk7CisJaW50ICgqd3JpdGVfaW50ZXJydXB0KShzdHJ1Y3QgZ283MDA3ICpnbywgaW50IGFkZHIsIGludCBkYXRhKTsKKwlpbnQgKCpyZWFkX2ludGVycnVwdCkoc3RydWN0IGdvNzAwNyAqZ28pOworCWludCAoKnN0cmVhbV9zdGFydCkoc3RydWN0IGdvNzAwNyAqZ28pOworCWludCAoKnN0cmVhbV9zdG9wKShzdHJ1Y3QgZ283MDA3ICpnbyk7CisJaW50ICgqc2VuZF9maXJtd2FyZSkoc3RydWN0IGdvNzAwNyAqZ28sIHU4ICpkYXRhLCBpbnQgbGVuKTsKK307CisKKy8qIFRoZSB2aWRlbyBidWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgUEFHRV9TSVpFICovCisjZGVmaW5lCUdPNzAwN19CVUZfUEFHRVMJKDEyOCAqIDEwMjQgLyBQQUdFX1NJWkUpCisjZGVmaW5lCUdPNzAwN19CVUZfU0laRQkJKEdPNzAwN19CVUZfUEFHRVMgPDwgUEFHRV9TSElGVCkKKworc3RydWN0IGdvNzAwN19idWZmZXIgeworCXN0cnVjdCBnbzcwMDcgKmdvOyAvKiBSZXZlcnNlIHJlZmVyZW5jZSBmb3IgVk1BIG9wcyAqLworCWludCBpbmRleDsgLyogUmV2ZXJzZSByZWZlcmVuY2UgZm9yIERRQlVGICovCisJZW51bSB7IEJVRl9TVEFURV9JRExFLCBCVUZfU1RBVEVfUVVFVUVELCBCVUZfU1RBVEVfRE9ORSB9IHN0YXRlOworCXUzMiBzZXE7CisJc3RydWN0IHRpbWV2YWwgdGltZXN0YW1wOworCXN0cnVjdCBsaXN0X2hlYWQgc3RyZWFtOworCXN0cnVjdCBwYWdlICpwYWdlc1tHTzcwMDdfQlVGX1BBR0VTICsgMV07IC8qIGV4dHJhIGZvciBzdHJhZGRsaW5nICovCisJdW5zaWduZWQgbG9uZyB1c2VyX2FkZHI7CisJdW5zaWduZWQgaW50IHBhZ2VfY291bnQ7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgYnl0ZXN1c2VkOworCXVuc2lnbmVkIGludCBmcmFtZV9vZmZzZXQ7CisJdTMyIG1vZGV0X2FjdGl2ZTsKKwlpbnQgbWFwcGVkOworfTsKKworc3RydWN0IGdvNzAwN19maWxlIHsKKwlzdHJ1Y3QgZ283MDA3ICpnbzsKKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJaW50IGJ1Zl9jb3VudDsKKwlzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqYnVmczsKK307CisKKyNkZWZpbmUJR083MDA3X0ZPUk1BVF9NSlBFRwkwCisjZGVmaW5lIEdPNzAwN19GT1JNQVRfTVBFRzQJMQorI2RlZmluZSBHTzcwMDdfRk9STUFUX01QRUcxCTIKKyNkZWZpbmUgR083MDA3X0ZPUk1BVF9NUEVHMgkzCisjZGVmaW5lIEdPNzAwN19GT1JNQVRfSDI2Mwk0CisKKyNkZWZpbmUgR083MDA3X1JBVElPXzFfMQkwCisjZGVmaW5lIEdPNzAwN19SQVRJT180XzMJMQorI2RlZmluZSBHTzcwMDdfUkFUSU9fMTZfOQkyCisKK2VudW0gZ283MDA3X3BhcnNlcl9zdGF0ZSB7CisJU1RBVEVfREFUQSwKKwlTVEFURV8wMCwKKwlTVEFURV8wMF8wMCwKKwlTVEFURV8wMF8wMF8wMSwKKwlTVEFURV9GRiwKKwlTVEFURV9WQklfTEVOX0EsCisJU1RBVEVfVkJJX0xFTl9CLAorCVNUQVRFX01PREVUX01BUCwKKwlTVEFURV9VTlBBUlNFRCwKK307CisKK3N0cnVjdCBnbzcwMDcgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZ283MDA3X2JvYXJkX2luZm8gKmJvYXJkX2luZm87CisJdW5zaWduZWQgaW50IGJvYXJkX2lkOworCWludCB0dW5lcl90eXBlOworCWludCBjaGFubmVsX251bWJlcjsgLyogZm9yIG11bHRpLWNoYW5uZWwgYm9hcmRzIGxpa2UgQWRsaW5rIFBDSS1NUEcyNCAqLworCWNoYXIgbmFtZVs2NF07CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2OworCWludCByZWZfY291bnQ7CisJZW51bSB7IFNUQVRVU19JTklULCBTVEFUVVNfT05MSU5FLCBTVEFUVVNfU0hVVERPV04gfSBzdGF0dXM7CisJc3BpbmxvY2tfdCBzcGlubG9jazsKKwlzdHJ1Y3Qgc2VtYXBob3JlIGh3X2xvY2s7CisJaW50IHN0cmVhbWluZzsKKwlpbnQgaW5fdXNlOworCWludCBhdWRpb19lbmFibGVkOworCisJLyogVmlkZW8gaW5wdXQgKi8KKwlpbnQgaW5wdXQ7CisJZW51bSB7IEdPNzAwN19TVERfTlRTQywgR083MDA3X1NURF9QQUwsIEdPNzAwN19TVERfT1RIRVIgfSBzdGFuZGFyZDsKKwlpbnQgc2Vuc29yX2ZyYW1lcmF0ZTsKKwlpbnQgd2lkdGg7CisJaW50IGhlaWdodDsKKwlpbnQgZW5jb2Rlcl9oX29mZnNldDsKKwlpbnQgZW5jb2Rlcl92X29mZnNldDsKKwl1bnNpZ25lZCBpbnQgZW5jb2Rlcl9oX2hhbHZlOjE7CisJdW5zaWduZWQgaW50IGVuY29kZXJfdl9oYWx2ZToxOworCXVuc2lnbmVkIGludCBlbmNvZGVyX3N1YnNhbXBsZToxOworCisJLyogRW5jb2RlciBjb25maWcgKi8KKwlpbnQgZm9ybWF0OworCWludCBiaXRyYXRlOworCWludCBmcHNfc2NhbGU7CisJaW50IHBhbGk7CisJaW50IGFzcGVjdF9yYXRpbzsKKwlpbnQgZ29wX3NpemU7CisJdW5zaWduZWQgaW50IGlwYjoxOworCXVuc2lnbmVkIGludCBjbG9zZWRfZ29wOjE7CisJdW5zaWduZWQgaW50IHJlcGVhdF9zZXFoZWFkOjE7CisJdW5zaWduZWQgaW50IHNlcV9oZWFkZXJfZW5hYmxlOjE7CisJdW5zaWduZWQgaW50IGdvcF9oZWFkZXJfZW5hYmxlOjE7CisJdW5zaWduZWQgaW50IGR2ZF9tb2RlOjE7CisJdW5zaWduZWQgaW50IGludGVybGFjZV9jb2Rpbmc6MTsKKworCS8qIE1vdGlvbiBkZXRlY3Rpb24gKi8KKwl1bnNpZ25lZCBpbnQgbW9kZXRfZW5hYmxlOjE7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgaW50IGVuYWJsZToxOworCQlpbnQgcGl4ZWxfdGhyZXNob2xkOworCQlpbnQgbW90aW9uX3RocmVzaG9sZDsKKwkJaW50IG1iX3RocmVzaG9sZDsKKwl9IG1vZGV0WzRdOworCXVuc2lnbmVkIGNoYXIgbW9kZXRfbWFwWzE2MjRdOworCXVuc2lnbmVkIGNoYXIgYWN0aXZlX21hcFsyMTZdOworCisJLyogVmlkZW8gc3RyZWFtaW5nICovCisJc3RydWN0IGdvNzAwN19idWZmZXIgKmFjdGl2ZV9idWY7CisJZW51bSBnbzcwMDdfcGFyc2VyX3N0YXRlIHN0YXRlOworCWludCBwYXJzZV9sZW5ndGg7CisJdTE2IG1vZGV0X3dvcmQ7CisJaW50IHNlZW5fZnJhbWU7CisJdTMyIG5leHRfc2VxOworCXN0cnVjdCBsaXN0X2hlYWQgc3RyZWFtOworCXdhaXRfcXVldWVfaGVhZF90IGZyYW1lX3dhaXRxOworCisJLyogQXVkaW8gc3RyZWFtaW5nICovCisJdm9pZCAoKmF1ZGlvX2RlbGl2ZXIpKHN0cnVjdCBnbzcwMDcgKmdvLCB1OCAqYnVmLCBpbnQgbGVuZ3RoKTsKKwl2b2lkICpzbmRfY29udGV4dDsKKworCS8qIEkyQyAqLworCWludCBpMmNfYWRhcHRlcl9vbmxpbmU7CisJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwdGVyOworCisJLyogSFBJIGRyaXZlciAqLworCXN0cnVjdCBnbzcwMDdfaHBpX29wcyAqaHBpX29wczsKKwl2b2lkICpocGlfY29udGV4dDsKKwlpbnQgaW50ZXJydXB0X2F2YWlsYWJsZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBpbnRlcnJ1cHRfd2FpdHE7CisJdW5zaWduZWQgc2hvcnQgaW50ZXJydXB0X3ZhbHVlOworCXVuc2lnbmVkIHNob3J0IGludGVycnVwdF9kYXRhOworfTsKKworLyogQWxsIG9mIHRoZXNlIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGhwaV9sb2NrIHNlbWFwaG9yZSBoZWxkISAqLworI2RlZmluZSBnbzcwMDdfaW50ZXJmYWNlX3Jlc2V0KGdvKSBcCisJCQkoKGdvKS0+aHBpX29wcy0+aW50ZXJmYWNlX3Jlc2V0KGdvKSkKKyNkZWZpbmUJZ283MDA3X3dyaXRlX2ludGVycnVwdChnbywgeCwgeSkgXAorCQkJKChnbyktPmhwaV9vcHMtPndyaXRlX2ludGVycnVwdCkoKGdvKSwgKHgpLCAoeSkpCisjZGVmaW5lIGdvNzAwN19zdHJlYW1fc3RhcnQoZ28pIFwKKwkJCSgoZ28pLT5ocGlfb3BzLT5zdHJlYW1fc3RhcnQoZ28pKQorI2RlZmluZSBnbzcwMDdfc3RyZWFtX3N0b3AoZ28pIFwKKwkJCSgoZ28pLT5ocGlfb3BzLT5zdHJlYW1fc3RvcChnbykpCisjZGVmaW5lCWdvNzAwN19zZW5kX2Zpcm13YXJlKGdvLCB4LCB5KSBcCisJCQkoKGdvKS0+aHBpX29wcy0+c2VuZF9maXJtd2FyZSkoKGdvKSwgKHgpLCAoeSkpCisjZGVmaW5lIGdvNzAwN193cml0ZV9hZGRyKGdvLCB4LCB5KSBcCisJCQkoKGdvKS0+aHBpX29wcy0+d3JpdGVfaW50ZXJydXB0KSgoZ28pLCAoeCl8MHg4MDAwLCAoeSkpCisKKy8qIGdvNzAwNy1kcml2ZXIuYyAqLworaW50IGdvNzAwN19yZWFkX2FkZHIoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiBhZGRyLCB1MTYgKmRhdGEpOworaW50IGdvNzAwN19yZWFkX2ludGVycnVwdChzdHJ1Y3QgZ283MDA3ICpnbywgdTE2ICp2YWx1ZSwgdTE2ICpkYXRhKTsKK2ludCBnbzcwMDdfYm9vdF9lbmNvZGVyKHN0cnVjdCBnbzcwMDcgKmdvLCBpbnQgaW5pdF9pMmMpOworaW50IGdvNzAwN19yZXNldF9lbmNvZGVyKHN0cnVjdCBnbzcwMDcgKmdvKTsKK2ludCBnbzcwMDdfcmVnaXN0ZXJfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbyk7CitpbnQgZ283MDA3X3N0YXJ0X2VuY29kZXIoc3RydWN0IGdvNzAwNyAqZ28pOwordm9pZCBnbzcwMDdfcGFyc2VfdmlkZW9fc3RyZWFtKHN0cnVjdCBnbzcwMDcgKmdvLCB1OCAqYnVmLCBpbnQgbGVuZ3RoKTsKK3N0cnVjdCBnbzcwMDcgKmdvNzAwN19hbGxvYyhzdHJ1Y3QgZ283MDA3X2JvYXJkX2luZm8gKmJvYXJkLAorCQkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYpOwordm9pZCBnbzcwMDdfcmVtb3ZlKHN0cnVjdCBnbzcwMDcgKmdvKTsKKworLyogZ283MDA3LWZ3LmMgKi8KK2ludCBnbzcwMDdfY29uc3RydWN0X2Z3X2ltYWdlKHN0cnVjdCBnbzcwMDcgKmdvLCB1OCAqKmZ3LCBpbnQgKmZ3bGVuKTsKKworLyogZ283MDA3LWkyYy5jICovCitpbnQgZ283MDA3X2kyY19pbml0KHN0cnVjdCBnbzcwMDcgKmdvKTsKK2ludCBnbzcwMDdfaTJjX3JlbW92ZShzdHJ1Y3QgZ283MDA3ICpnbyk7CisKKy8qIGdvNzAwNy12NGwyLmMgKi8KK2ludCBnbzcwMDdfdjRsMl9pbml0KHN0cnVjdCBnbzcwMDcgKmdvKTsKK3ZvaWQgZ283MDA3X3Y0bDJfcmVtb3ZlKHN0cnVjdCBnbzcwMDcgKmdvKTsKKworLyogc25kLWdvNzAwNy5jICovCitpbnQgZ283MDA3X3NuZF9pbml0KHN0cnVjdCBnbzcwMDcgKmdvKTsKK2ludCBnbzcwMDdfc25kX3JlbW92ZShzdHJ1Y3QgZ283MDA3ICpnbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy11c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZWQ2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy11c2IuYwpAQCAtMCwwICsxLDEyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS90dmF1ZGlvLmg+CisKKyNpbmNsdWRlICJnbzcwMDctcHJpdi5oIgorI2luY2x1ZGUgIndpcy1pMmMuaCIKKworc3RhdGljIHVuc2lnbmVkIGludCBhc3N1bWVfZW5kdXJhOworbW9kdWxlX3BhcmFtKGFzc3VtZV9lbmR1cmEsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGFzc3VtZV9lbmR1cmEsICJ3aGVuIHByb2JpbmcgZmFpbHMsIGhhcmR3YXJlIGlzIGEgUGVsY28gRW5kdXJhIik7CisKKy8qICNkZWZpbmUgR083MDA3X1VTQl9ERUJVRyAqLworLyogI2RlZmluZSBHTzcwMDdfSTJDX0RFQlVHICovIC8qIGZvciBkZWJ1Z2dpbmcgdGhlIEVaLVVTQiBJMkMgYWRhcHRlciAqLworCisjZGVmaW5lCUhQSV9TVEFUVVNfQUREUgkweEZGRjQKKyNkZWZpbmUJSU5UX1BBUkFNX0FERFIJMHhGRkY2CisjZGVmaW5lCUlOVF9JTkRFWF9BRERSCTB4RkZGOAorCisvKgorICogUGlwZXMgb24gRVotVVNCIGludGVyZmFjZToKKyAqIAkwIHNuZCAtIENvbnRyb2wKKyAqIAkwIHJjdiAtIENvbnRyb2wKKyAqIAkyIHNuZCAtIERvd25sb2FkIGZpcm13YXJlIChjb250cm9sKQorICogCTQgcmN2IC0gUmVhZCBJbnRlcnJ1cHQgKGludGVycnVwdCkKKyAqIAk2IHJjdiAtIFJlYWQgVmlkZW8gKGJ1bGspCisgKiAJOCByY3YgLSBSZWFkIEF1ZGlvIChidWxrKQorICovCisKKyNkZWZpbmUgR083MDA3X1VTQl9FWlVTQgkJKDE8PDApCisjZGVmaW5lIEdPNzAwN19VU0JfRVpVU0JfSTJDCQkoMTw8MSkKKworc3RydWN0IGdvNzAwN191c2JfYm9hcmQgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwlzdHJ1Y3QgZ283MDA3X2JvYXJkX2luZm8gbWFpbl9pbmZvOworfTsKKworc3RydWN0IGdvNzAwN191c2IgeworCXN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkICpib2FyZDsKKwlzdHJ1Y3Qgc2VtYXBob3JlIGkyY19sb2NrOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJc3RydWN0IHVyYiAqdmlkZW9fdXJic1s4XTsKKwlzdHJ1Y3QgdXJiICphdWRpb191cmJzWzhdOworCXN0cnVjdCB1cmIgKmludHJfdXJiOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqIFByb2R1Y3Qgc3BlY2lmaWNhdGlvbiBkYXRhICoqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IGdvNzAwN191c2JfYm9hcmQgYm9hcmRfbWF0cml4X2lpID0geworCS5mbGFncwkJPSBHTzcwMDdfVVNCX0VaVVNCLAorCS5tYWluX2luZm8JPSB7CisJCS5maXJtd2FyZQkgPSAiZ283MDA3dHYuYmluIiwKKwkJLmZsYWdzCQkgPSBHTzcwMDdfQk9BUkRfSEFTX0FVRElPIHwKKwkJCQkJR083MDA3X0JPQVJEX1VTRV9PTkJPQVJEX0kyQywKKwkJLmF1ZGlvX2ZsYWdzCSA9IEdPNzAwN19BVURJT19JMlNfTU9ERV8xIHwKKwkJCQkJR083MDA3X0FVRElPX1dPUkRfMTYsCisJCS5hdWRpb19yYXRlCSA9IDQ4MDAwLAorCQkuYXVkaW9fYmNsa19kaXYJID0gOCwKKwkJLmF1ZGlvX21haW5fZGl2CSA9IDIsCisJCS5ocGlfYnVmZmVyX2NhcCAgPSA3LAorCQkuc2Vuc29yX2ZsYWdzCSA9IEdPNzAwN19TRU5TT1JfNjU2IHwKKwkJCQkJR083MDA3X1NFTlNPUl9WQUxJRF9FTkFCTEUgfAorCQkJCQlHTzcwMDdfU0VOU09SX1RWIHwKKwkJCQkJR083MDA3X1NFTlNPUl9WQkkgfAorCQkJCQlHTzcwMDdfU0VOU09SX1NDQUxJTkcsCisJCS5udW1faTJjX2RldnMJID0gMSwKKwkJLmkyY19kZXZzCSA9IHsKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTUsCisJCQkJLmFkZHIJPSAweDIwLAorCQkJfSwKKwkJfSwKKwkJLm51bV9pbnB1dHMJID0gMiwKKwkJLmlucHV0cyAJID0geworCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDAsCisJCQkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCisJCQl9LAorCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDksCisJCQkJLm5hbWUJCT0gIlMtVmlkZW8iLAorCQkJfSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIGJvYXJkX21hdHJpeF9yZWxvYWQgPSB7CisJLmZsYWdzCQk9IEdPNzAwN19VU0JfRVpVU0IsCisJLm1haW5faW5mbwk9IHsKKwkJLmZpcm13YXJlCSA9ICJnbzcwMDd0di5iaW4iLAorCQkuZmxhZ3MJCSA9IEdPNzAwN19CT0FSRF9IQVNfQVVESU8gfAorCQkJCQlHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDLAorCQkuYXVkaW9fZmxhZ3MJID0gR083MDA3X0FVRElPX0kyU19NT0RFXzEgfAorCQkJCQlHTzcwMDdfQVVESU9fSTJTX01BU1RFUiB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCQkuYXVkaW9fcmF0ZQkgPSA0ODAwMCwKKwkJLmF1ZGlvX2JjbGtfZGl2CSA9IDgsCisJCS5hdWRpb19tYWluX2RpdgkgPSAyLAorCQkuaHBpX2J1ZmZlcl9jYXAgID0gNywKKwkJLnNlbnNvcl9mbGFncwkgPSBHTzcwMDdfU0VOU09SXzY1NiB8CisJCQkJCUdPNzAwN19TRU5TT1JfVFYsCisJCS5udW1faTJjX2RldnMJID0gMSwKKwkJLmkyY19kZXZzCSA9IHsKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTMsCisJCQkJLmFkZHIJPSAweDI1LAorCQkJfSwKKwkJfSwKKwkJLm51bV9pbnB1dHMJID0gMiwKKwkJLmlucHV0cyAJID0geworCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDAsCisJCQkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCisJCQl9LAorCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDksCisJCQkJLm5hbWUJCT0gIlMtVmlkZW8iLAorCQkJfSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIGJvYXJkX3N0YXJfdHJlayA9IHsKKwkuZmxhZ3MJCT0gR083MDA3X1VTQl9FWlVTQiB8IEdPNzAwN19VU0JfRVpVU0JfSTJDLAorCS5tYWluX2luZm8JPSB7CisJCS5maXJtd2FyZQkgPSAiZ283MDA3dHYuYmluIiwKKwkJLmZsYWdzCQkgPSBHTzcwMDdfQk9BUkRfSEFTX0FVRElPLCAvKiB8CisJCQkJCUdPNzAwN19CT0FSRF9IQVNfVFVORVIsICovCisJCS5zZW5zb3JfZmxhZ3MJID0gR083MDA3X1NFTlNPUl82NTYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZBTElEX0VOQUJMRSB8CisJCQkJCUdPNzAwN19TRU5TT1JfVFYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZCSSB8CisJCQkJCUdPNzAwN19TRU5TT1JfU0NBTElORywKKwkJLmF1ZGlvX2ZsYWdzCSA9IEdPNzAwN19BVURJT19JMlNfTU9ERV8xIHwKKwkJCQkJR083MDA3X0FVRElPX1dPUkRfMTYsCisJCS5hdWRpb19iY2xrX2RpdgkgPSA4LAorCQkuYXVkaW9fbWFpbl9kaXYJID0gMiwKKwkJLmhwaV9idWZmZXJfY2FwICA9IDcsCisJCS5udW1faTJjX2RldnMJID0gMSwKKwkJLmkyY19kZXZzCSA9IHsKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTUsCisJCQkJLmFkZHIJPSAweDIwLAorCQkJfSwKKwkJfSwKKwkJLm51bV9pbnB1dHMJID0gMiwKKwkJLmlucHV0cyAJID0geworCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDEsCisJCQkvKgkuYXVkaW9faW5wdXQJPSBBVURJT19FWFRFUk4sICovCisJCQkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCisJCQl9LAorCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDgsCisJCQkvKgkuYXVkaW9faW5wdXQJPSBBVURJT19FWFRFUk4sICovCisJCQkJLm5hbWUJCT0gIlMtVmlkZW8iLAorCQkJfSwKKwkJLyoJeworCQkgKgkJLnZpZGVvX2lucHV0CT0gMywKKwkJICoJCS5hdWRpb19pbnB1dAk9IEFVRElPX1RVTkVSLAorCQkgKgkJLm5hbWUJCT0gIlR1bmVyIiwKKwkJICoJfSwKKwkJICovCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCBib2FyZF9weF90djQwMnUgPSB7CisJLmZsYWdzCQk9IEdPNzAwN19VU0JfRVpVU0IgfCBHTzcwMDdfVVNCX0VaVVNCX0kyQywKKwkubWFpbl9pbmZvCT0geworCQkuZmlybXdhcmUJID0gImdvNzAwN3R2LmJpbiIsCisJCS5mbGFncwkJID0gR083MDA3X0JPQVJEX0hBU19BVURJTyB8CisJCQkJCUdPNzAwN19CT0FSRF9IQVNfVFVORVIsCisJCS5zZW5zb3JfZmxhZ3MJID0gR083MDA3X1NFTlNPUl82NTYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZBTElEX0VOQUJMRSB8CisJCQkJCUdPNzAwN19TRU5TT1JfVFYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZCSSB8CisJCQkJCUdPNzAwN19TRU5TT1JfU0NBTElORywKKwkJLmF1ZGlvX2ZsYWdzCSA9IEdPNzAwN19BVURJT19JMlNfTU9ERV8xIHwKKwkJCQkJR083MDA3X0FVRElPX1dPUkRfMTYsCisJCS5hdWRpb19iY2xrX2RpdgkgPSA4LAorCQkuYXVkaW9fbWFpbl9kaXYJID0gMiwKKwkJLmhwaV9idWZmZXJfY2FwICA9IDcsCisJCS5udW1faTJjX2RldnMJID0gMywKKwkJLmkyY19kZXZzCSA9IHsKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTUsCisJCQkJLmFkZHIJPSAweDIwLAorCQkJfSwKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1VEQTEzNDIsCisJCQkJLmFkZHIJPSAweDFhLAorCQkJfSwKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1NPTllfVFVORVIsCisJCQkJLmFkZHIJPSAweDYwLAorCQkJfSwKKwkJfSwKKwkJLm51bV9pbnB1dHMJID0gMywKKwkJLmlucHV0cyAJID0geworCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDEsCisJCS5hdWRpb19pbnB1dAkgPSBUVkFVRElPX0lOUFVUX0VYVEVSTiwKKwkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKKwkJCX0sCisJCQl7CisJCQkJLnZpZGVvX2lucHV0CT0gOCwKKwkJCQkuYXVkaW9faW5wdXQJPSBUVkFVRElPX0lOUFVUX0VYVEVSTiwKKwkJCQkubmFtZQkJPSAiUy1WaWRlbyIsCisJCQl9LAorCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDMsCisJCQkJLmF1ZGlvX2lucHV0CT0gVFZBVURJT19JTlBVVF9UVU5FUiwKKwkJCQkubmFtZQkJPSAiVHVuZXIiLAorCQkJfSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIGJvYXJkX3htZW4gPSB7CisJLmZsYWdzCQk9IDAsCisJLm1haW5faW5mbwk9IHsKKwkJLmZpcm13YXJlCSAgPSAiZ283MDA3dHYuYmluIiwKKwkJLmZsYWdzCQkgID0gR083MDA3X0JPQVJEX1VTRV9PTkJPQVJEX0kyQywKKwkJLmhwaV9idWZmZXJfY2FwICAgPSAwLAorCQkuc2Vuc29yX2ZsYWdzCSAgPSBHTzcwMDdfU0VOU09SX1ZSRUZfUE9MQVIsCisJCS5zZW5zb3Jfd2lkdGgJICA9IDMyMCwKKwkJLnNlbnNvcl9oZWlnaHQJICA9IDI0MCwKKwkJLnNlbnNvcl9mcmFtZXJhdGUgPSAzMDAzMCwKKwkJLmF1ZGlvX2ZsYWdzCSAgPSBHTzcwMDdfQVVESU9fT05FX0NIQU5ORUwgfAorCQkJCQlHTzcwMDdfQVVESU9fSTJTX01PREVfMyB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE0IHwKKwkJCQkJR083MDA3X0FVRElPX0kyU19NQVNURVIgfAorCQkJCQlHTzcwMDdfQVVESU9fQkNMS19QT0xBUiB8CisJCQkJCUdPNzAwN19BVURJT19PS0lfTU9ERSwKKwkJLmF1ZGlvX3JhdGUJICA9IDgwMDAsCisJCS5hdWRpb19iY2xrX2RpdgkgID0gNDgsCisJCS5hdWRpb19tYWluX2RpdgkgID0gMSwKKwkJLm51bV9pMmNfZGV2cwkgID0gMSwKKwkJLmkyY19kZXZzCSAgPSB7CisJCQl7CisJCQkJLmlkCT0gSTJDX0RSSVZFUklEX1dJU19PVjc2NDAsCisJCQkJLmFkZHIJPSAweDIxLAorCQkJfSwKKwkJfSwKKwkJLm51bV9pbnB1dHMJICA9IDEsCisJCS5pbnB1dHMgCSAgPSB7CisJCQl7CisJCQkJLm5hbWUJCT0gIkNhbWVyYSIsCisJCQl9LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN191c2JfYm9hcmQgYm9hcmRfbWF0cml4X3Jldm9sdXRpb24gPSB7CisJLmZsYWdzCQk9IEdPNzAwN19VU0JfRVpVU0IsCisJLm1haW5faW5mbwk9IHsKKwkJLmZpcm13YXJlCSA9ICJnbzcwMDd0di5iaW4iLAorCQkuZmxhZ3MJCSA9IEdPNzAwN19CT0FSRF9IQVNfQVVESU8gfAorCQkJCQlHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDLAorCQkuYXVkaW9fZmxhZ3MJID0gR083MDA3X0FVRElPX0kyU19NT0RFXzEgfAorCQkJCQlHTzcwMDdfQVVESU9fSTJTX01BU1RFUiB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCQkuYXVkaW9fcmF0ZQkgPSA0ODAwMCwKKwkJLmF1ZGlvX2JjbGtfZGl2CSA9IDgsCisJCS5hdWRpb19tYWluX2RpdgkgPSAyLAorCQkuaHBpX2J1ZmZlcl9jYXAgID0gNywKKwkJLnNlbnNvcl9mbGFncwkgPSBHTzcwMDdfU0VOU09SXzY1NiB8CisJCQkJCUdPNzAwN19TRU5TT1JfVFYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZCSSwKKwkJLm51bV9pMmNfZGV2cwkgPSAxLAorCQkuaTJjX2RldnMJID0geworCQkJeworCQkJCS5pZAk9IEkyQ19EUklWRVJJRF9XSVNfVFc5OTAzLAorCQkJCS5hZGRyCT0gMHg0NCwKKwkJCX0sCisJCX0sCisJCS5udW1faW5wdXRzCSA9IDIsCisJCS5pbnB1dHMgCSA9IHsKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSAyLAorCQkJCS5uYW1lCQk9ICJDb21wb3NpdGUiLAorCQkJfSwKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSA4LAorCQkJCS5uYW1lCQk9ICJTLVZpZGVvIiwKKwkJCX0sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCBib2FyZF9saWZldmlld19scjE5MiA9IHsKKwkuZmxhZ3MJCT0gR083MDA3X1VTQl9FWlVTQiwKKwkubWFpbl9pbmZvCT0geworCQkuZmlybXdhcmUJID0gImdvNzAwN3R2LmJpbiIsCisJCS5mbGFncwkJID0gR083MDA3X0JPQVJEX0hBU19BVURJTyB8CisJCQkJCUdPNzAwN19CT0FSRF9VU0VfT05CT0FSRF9JMkMsCisJCS5hdWRpb19mbGFncwkgPSBHTzcwMDdfQVVESU9fSTJTX01PREVfMSB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCQkuYXVkaW9fcmF0ZQkgPSA0ODAwMCwKKwkJLmF1ZGlvX2JjbGtfZGl2CSA9IDgsCisJCS5hdWRpb19tYWluX2RpdgkgPSAyLAorCQkuaHBpX2J1ZmZlcl9jYXAgID0gNywKKwkJLnNlbnNvcl9mbGFncwkgPSBHTzcwMDdfU0VOU09SXzY1NiB8CisJCQkJCUdPNzAwN19TRU5TT1JfVkFMSURfRU5BQkxFIHwKKwkJCQkJR083MDA3X1NFTlNPUl9UViB8CisJCQkJCUdPNzAwN19TRU5TT1JfVkJJIHwKKwkJCQkJR083MDA3X1NFTlNPUl9TQ0FMSU5HLAorCQkubnVtX2kyY19kZXZzCSA9IDAsCisJCS5udW1faW5wdXRzCSA9IDEsCisJCS5pbnB1dHMgCSA9IHsKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSAwLAorCQkJCS5uYW1lCQk9ICJDb21wb3NpdGUiLAorCQkJfSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIGJvYXJkX2VuZHVyYSA9IHsKKwkuZmxhZ3MJCT0gMCwKKwkubWFpbl9pbmZvCT0geworCQkuZmlybXdhcmUJID0gImdvNzAwN3R2LmJpbiIsCisJCS5mbGFncwkJID0gMCwKKwkJLmF1ZGlvX2ZsYWdzCSA9IEdPNzAwN19BVURJT19JMlNfTU9ERV8xIHwKKwkJCQkJR083MDA3X0FVRElPX0kyU19NQVNURVIgfAorCQkJCQlHTzcwMDdfQVVESU9fV09SRF8xNiwKKwkJLmF1ZGlvX3JhdGUJID0gODAwMCwKKwkJLmF1ZGlvX2JjbGtfZGl2CSA9IDQ4LAorCQkuYXVkaW9fbWFpbl9kaXYJID0gOCwKKwkJLmhwaV9idWZmZXJfY2FwICA9IDAsCisJCS5zZW5zb3JfZmxhZ3MJID0gR083MDA3X1NFTlNPUl82NTYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1RWLAorCQkuc2Vuc29yX2hfb2Zmc2V0ID0gOCwKKwkJLm51bV9pMmNfZGV2cwkgPSAwLAorCQkubnVtX2lucHV0cwkgPSAxLAorCQkuaW5wdXRzIAkgPSB7CisJCQl7CisJCQkJLm5hbWUJCT0gIkNhbWVyYSIsCisJCQl9LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN191c2JfYm9hcmQgYm9hcmRfYWRsaW5rX21wZzI0ID0geworCS5mbGFncwkJPSAwLAorCS5tYWluX2luZm8JPSB7CisJCS5maXJtd2FyZQkgPSAiZ283MDA3dHYuYmluIiwKKwkJLmZsYWdzCQkgPSBHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDLAorCQkuYXVkaW9fZmxhZ3MJID0gR083MDA3X0FVRElPX0kyU19NT0RFXzEgfAorCQkJCQlHTzcwMDdfQVVESU9fSTJTX01BU1RFUiB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCQkuYXVkaW9fcmF0ZQkgPSA0ODAwMCwKKwkJLmF1ZGlvX2JjbGtfZGl2CSA9IDgsCisJCS5hdWRpb19tYWluX2RpdgkgPSAyLAorCQkuaHBpX2J1ZmZlcl9jYXAgID0gMCwKKwkJLnNlbnNvcl9mbGFncwkgPSBHTzcwMDdfU0VOU09SXzY1NiB8CisJCQkJCUdPNzAwN19TRU5TT1JfVFYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZCSSwKKwkJLm51bV9pMmNfZGV2cwkgPSAxLAorCQkuaTJjX2RldnMJID0geworCQkJeworCQkJCS5pZAk9IEkyQ19EUklWRVJJRF9XSVNfVFcyODA0LAorCQkJCS5hZGRyCT0gMHgwMCwgLyogeWVzLCByZWFsbHkgKi8KKwkJCX0sCisJCX0sCisJCS5udW1faW5wdXRzCSA9IDEsCisJCS5pbnB1dHMgCSA9IHsKKwkJCXsKKwkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKKwkJCX0sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBnbzcwMDdfdXNiX2lkX3RhYmxlW10gPSB7CisJeworCQkubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiB8CisJCQkJCVVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJCS5pZFZlbmRvcgk9IDB4MGViMSwgIC8qIFZlbmRvciBJRCBvZiBXSVMgVGVjaG5vbG9naWVzICovCisJCS5pZFByb2R1Y3QJPSAweDcwMDcsICAvKiBQcm9kdWN0IElEIG9mIEdPNzAwN1NCIGNoaXAgKi8KKwkJLmJjZERldmljZV9sbwk9IDB4MjAwLCAgIC8qIFJldmlzaW9uIG51bWJlciBvZiBYTWVuICovCisJCS5iY2REZXZpY2VfaGkJPSAweDIwMCwKKwkJLmJJbnRlcmZhY2VDbGFzcwk9IDI1NSwKKwkJLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDAsCisJCS5iSW50ZXJmYWNlUHJvdG9jb2wJPSAyNTUsCisJCS5kcml2ZXJfaW5mbwk9IChrZXJuZWxfdWxvbmdfdClHTzcwMDdfQk9BUkRJRF9YTUVOLAorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiwKKwkJLmlkVmVuZG9yCT0gMHgwZWIxLCAgLyogVmVuZG9yIElEIG9mIFdJUyBUZWNobm9sb2dpZXMgKi8KKwkJLmlkUHJvZHVjdAk9IDB4NzAwNywgIC8qIFByb2R1Y3QgSUQgb2YgR083MDA3U0IgY2hpcCAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgyMDIsICAgLyogUmV2aXNpb24gbnVtYmVyIG9mIE1hdHJpeCBJSSAqLworCQkuYmNkRGV2aWNlX2hpCT0gMHgyMDIsCisJCS5kcml2ZXJfaW5mbwk9IChrZXJuZWxfdWxvbmdfdClHTzcwMDdfQk9BUkRJRF9NQVRSSVhfSUksCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OLAorCQkuaWRWZW5kb3IJPSAweDBlYjEsICAvKiBWZW5kb3IgSUQgb2YgV0lTIFRlY2hub2xvZ2llcyAqLworCQkuaWRQcm9kdWN0CT0gMHg3MDA3LCAgLyogUHJvZHVjdCBJRCBvZiBHTzcwMDdTQiBjaGlwICovCisJCS5iY2REZXZpY2VfbG8JPSAweDIwNCwgICAvKiBSZXZpc2lvbiBudW1iZXIgb2YgTWF0cml4ICovCisJCS5iY2REZXZpY2VfaGkJPSAweDIwNCwgICAvKiAgICAgUmVsb2FkZWQgKi8KKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX01BVFJJWF9SRUxPQUQsCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OIHwKKwkJCQkJVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkJLmlkVmVuZG9yCT0gMHgwZWIxLCAgLyogVmVuZG9yIElEIG9mIFdJUyBUZWNobm9sb2dpZXMgKi8KKwkJLmlkUHJvZHVjdAk9IDB4NzAwNywgIC8qIFByb2R1Y3QgSUQgb2YgR083MDA3U0IgY2hpcCAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgyMDUsICAgLyogUmV2aXNpb24gbnVtYmVyIG9mIFhNZW4tSUkgKi8KKwkJLmJjZERldmljZV9oaQk9IDB4MjA1LAorCQkuYkludGVyZmFjZUNsYXNzCT0gMjU1LAorCQkuYkludGVyZmFjZVN1YkNsYXNzCT0gMCwKKwkJLmJJbnRlcmZhY2VQcm90b2NvbAk9IDI1NSwKKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX1hNRU5fSUksCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OLAorCQkuaWRWZW5kb3IJPSAweDBlYjEsICAvKiBWZW5kb3IgSUQgb2YgV0lTIFRlY2hub2xvZ2llcyAqLworCQkuaWRQcm9kdWN0CT0gMHg3MDA3LCAgLyogUHJvZHVjdCBJRCBvZiBHTzcwMDdTQiBjaGlwICovCisJCS5iY2REZXZpY2VfbG8JPSAweDIwOCwgICAvKiBSZXZpc2lvbiBudW1iZXIgb2YgU3RhciBUcmVrICovCisJCS5iY2REZXZpY2VfaGkJPSAweDIwOCwKKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX1NUQVJfVFJFSywKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04gfAorCQkJCQlVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAorCQkuaWRWZW5kb3IJPSAweDBlYjEsICAvKiBWZW5kb3IgSUQgb2YgV0lTIFRlY2hub2xvZ2llcyAqLworCQkuaWRQcm9kdWN0CT0gMHg3MDA3LCAgLyogUHJvZHVjdCBJRCBvZiBHTzcwMDdTQiBjaGlwICovCisJCS5iY2REZXZpY2VfbG8JPSAweDIwOSwgICAvKiBSZXZpc2lvbiBudW1iZXIgb2YgWE1lbi1JSUkgKi8KKwkJLmJjZERldmljZV9oaQk9IDB4MjA5LAorCQkuYkludGVyZmFjZUNsYXNzCT0gMjU1LAorCQkuYkludGVyZmFjZVN1YkNsYXNzCT0gMCwKKwkJLmJJbnRlcmZhY2VQcm90b2NvbAk9IDI1NSwKKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX1hNRU5fSUlJLAorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiwKKwkJLmlkVmVuZG9yCT0gMHgwZWIxLCAgLyogVmVuZG9yIElEIG9mIFdJUyBUZWNobm9sb2dpZXMgKi8KKwkJLmlkUHJvZHVjdAk9IDB4NzAwNywgIC8qIFByb2R1Y3QgSUQgb2YgR083MDA3U0IgY2hpcCAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgyMTAsICAgLyogUmV2aXNpb24gbnVtYmVyIG9mIE1hdHJpeCAqLworCQkuYmNkRGV2aWNlX2hpCT0gMHgyMTAsICAgLyogICAgIFJldm9sdXRpb24gKi8KKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX01BVFJJWF9SRVYsCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OLAorCQkuaWRWZW5kb3IJPSAweDA5M2IsICAvKiBWZW5kb3IgSUQgb2YgUGxleHRvciAqLworCQkuaWRQcm9kdWN0CT0gMHhhMTAyLCAgLyogUHJvZHVjdCBJRCBvZiBNNDAyVSAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgxLAkgICAvKiByZXZpc2lvbiBudW1iZXIgb2YgQmx1ZWJlcnJ5ICovCisJCS5iY2REZXZpY2VfaGkJPSAweDEsCisJCS5kcml2ZXJfaW5mbwk9IChrZXJuZWxfdWxvbmdfdClHTzcwMDdfQk9BUkRJRF9QWF9NNDAyVSwKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04sCisJCS5pZFZlbmRvcgk9IDB4MDkzYiwgIC8qIFZlbmRvciBJRCBvZiBQbGV4dG9yICovCisJCS5pZFByb2R1Y3QJPSAweGExMDQsICAvKiBQcm9kdWN0IElEIG9mIFRWNDAyVSAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgxLAorCQkuYmNkRGV2aWNlX2hpCT0gMHgxLAorCQkuZHJpdmVyX2luZm8JPSAoa2VybmVsX3Vsb25nX3QpR083MDA3X0JPQVJESURfUFhfVFY0MDJVX0FOWSwKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04sCisJCS5pZFZlbmRvcgk9IDB4MTBmZCwgIC8qIFZlbmRvciBJRCBvZiBBbnViaXMgRWxlY3Ryb25pY3MgKi8KKwkJLmlkUHJvZHVjdAk9IDB4ZGUwMCwgIC8qIFByb2R1Y3QgSUQgb2YgTGlmZXZpZXcgTFIxOTIgKi8KKwkJLmJjZERldmljZV9sbwk9IDB4MSwKKwkJLmJjZERldmljZV9oaQk9IDB4MSwKKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX0xJRkVWSUVXX0xSMTkyLAorCX0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGdvNzAwN191c2JfaWRfdGFibGUpOworCisvKioqKioqKioqKioqKioqKioqKioqIERyaXZlciBmb3IgRVotVVNCIEhQSSBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGdvNzAwN191c2JfdmVuZG9yX3JlcXVlc3Qoc3RydWN0IGdvNzAwNyAqZ28sIGludCByZXF1ZXN0LAorCQlpbnQgdmFsdWUsIGludCBpbmRleCwgdm9pZCAqdHJhbnNmZXJfYnVmZmVyLCBpbnQgbGVuZ3RoLCBpbnQgaW4pCit7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwlpbnQgdGltZW91dCA9IDUwMDA7CisKKwlpZiAoaW4pIHsKKwkJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1c2ItPnVzYmRldiwKKwkJCQl1c2JfcmN2Y3RybHBpcGUodXNiLT51c2JkZXYsIDApLCByZXF1ZXN0LAorCQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAorCQkJCXZhbHVlLCBpbmRleCwgdHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgsIHRpbWVvdXQpOworCX0gZWxzZSB7CisJCXJldHVybiB1c2JfY29udHJvbF9tc2codXNiLT51c2JkZXYsCisJCQkJdXNiX3NuZGN0cmxwaXBlKHVzYi0+dXNiZGV2LCAwKSwgcmVxdWVzdCwKKwkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCXZhbHVlLCBpbmRleCwgdHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgsIHRpbWVvdXQpOworCX0KK30KKworc3RhdGljIGludCBnbzcwMDdfdXNiX2ludGVyZmFjZV9yZXNldChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCXUxNiBpbnRyX3ZhbCwgaW50cl9kYXRhOworCisJLyogUmVzZXQgZW5jb2RlciAqLworCWlmIChnbzcwMDdfd3JpdGVfaW50ZXJydXB0KGdvLCAweDAwMDEsIDB4MDAwMSkgPCAwKQorCQlyZXR1cm4gLTE7CisJbXNsZWVwKDEwMCk7CisKKwlpZiAodXNiLT5ib2FyZC0+ZmxhZ3MgJiBHTzcwMDdfVVNCX0VaVVNCKSB7CisJCS8qIFJlc2V0IGJ1ZmZlciBpbiBFWi1VU0IgKi8KKyNpZmRlZiBHTzcwMDdfVVNCX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJnbzcwMDctdXNiOiByZXNldHRpbmcgRVotVVNCIGJ1ZmZlcnNcbiIpOworI2VuZGlmCisJCWlmIChnbzcwMDdfdXNiX3ZlbmRvcl9yZXF1ZXN0KGdvLCAweDEwLCAwLCAwLCBOVUxMLCAwLCAwKSA8IDAgfHwKKwkJICAgIGdvNzAwN191c2JfdmVuZG9yX3JlcXVlc3QoZ28sIDB4MTAsIDAsIDAsIE5VTEwsIDAsIDApIDwgMCkKKwkJCXJldHVybiAtMTsKKworCQkvKiBSZXNldCBlbmNvZGVyIGFnYWluICovCisJCWlmIChnbzcwMDdfd3JpdGVfaW50ZXJydXB0KGdvLCAweDAwMDEsIDB4MDAwMSkgPCAwKQorCQkJcmV0dXJuIC0xOworCQltc2xlZXAoMTAwKTsKKwl9CisKKwkvKiBXYWl0IGZvciBhbiBpbnRlcnJ1cHQgdG8gaW5kaWNhdGUgc3VjY2Vzc2Z1bCBoYXJkd2FyZSByZXNldCAqLworCWlmIChnbzcwMDdfcmVhZF9pbnRlcnJ1cHQoZ28sICZpbnRyX3ZhbCwgJmludHJfZGF0YSkgPCAwIHx8CisJCQkoaW50cl92YWwgJiB+MHgxKSAhPSAweDU1YWEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ283MDA3LXVzYjogdW5hYmxlIHRvIHJlc2V0IHRoZSBVU0IgaW50ZXJmYWNlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbzcwMDdfdXNiX2V6dXNiX3dyaXRlX2ludGVycnVwdChzdHJ1Y3QgZ283MDA3ICpnbywKKwkJCQkJCWludCBhZGRyLCBpbnQgZGF0YSkKK3sKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCWludCBpLCByOworCXUxNiBzdGF0dXNfcmVnOworCWludCB0aW1lb3V0ID0gNTAwOworCisjaWZkZWYgR083MDA3X1VTQl9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHCisJCSJnbzcwMDctdXNiOiBXcml0ZUludGVycnVwdDogJTA0eCAlMDR4XG4iLCBhZGRyLCBkYXRhKTsKKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKSB7CisJCXIgPSB1c2JfY29udHJvbF9tc2codXNiLT51c2JkZXYsCisJCQkJdXNiX3JjdmN0cmxwaXBlKHVzYi0+dXNiZGV2LCAwKSwgMHgxNCwKKwkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJCQkwLCBIUElfU1RBVFVTX0FERFIsICZzdGF0dXNfcmVnLAorCQkJCXNpemVvZihzdGF0dXNfcmVnKSwgdGltZW91dCk7CisJCWlmIChyIDwgMCkKKwkJCWdvdG8gd3JpdGVfaW50X2Vycm9yOworCQlfX2xlMTZfdG9fY3B1cygmc3RhdHVzX3JlZyk7CisJCWlmICghKHN0YXR1c19yZWcgJiAweDAwMTApKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxMCk7CisJfQorCWlmIChpID09IDEwMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJnbzcwMDctdXNiOiBkZXZpY2UgaXMgaHVuZywgc3RhdHVzIHJlZyA9IDB4JTA0eFxuIiwKKwkJCXN0YXR1c19yZWcpOworCQlyZXR1cm4gLTE7CisJfQorCXIgPSB1c2JfY29udHJvbF9tc2codXNiLT51c2JkZXYsIHVzYl9zbmRjdHJscGlwZSh1c2ItPnVzYmRldiwgMCksIDB4MTIsCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLCBkYXRhLAorCQkJSU5UX1BBUkFNX0FERFIsIE5VTEwsIDAsIHRpbWVvdXQpOworCWlmIChyIDwgMCkKKwkJZ290byB3cml0ZV9pbnRfZXJyb3I7CisJciA9IHVzYl9jb250cm9sX21zZyh1c2ItPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYi0+dXNiZGV2LCAwKSwKKwkJCTB4MTIsIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsIGFkZHIsCisJCQlJTlRfSU5ERVhfQUREUiwgTlVMTCwgMCwgdGltZW91dCk7CisJaWYgKHIgPCAwKQorCQlnb3RvIHdyaXRlX2ludF9lcnJvcjsKKwlyZXR1cm4gMDsKKword3JpdGVfaW50X2Vycm9yOgorCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogZXJyb3IgaW4gV3JpdGVJbnRlcnJ1cHQ6ICVkXG4iLCByKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBnbzcwMDdfdXNiX29uYm9hcmRfd3JpdGVfaW50ZXJydXB0KHN0cnVjdCBnbzcwMDcgKmdvLAorCQkJCQkJaW50IGFkZHIsIGludCBkYXRhKQoreworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJdTggKnRidWY7CisJaW50IHI7CisJaW50IHRpbWVvdXQgPSA1MDA7CisKKyNpZmRlZiBHTzcwMDdfVVNCX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcKKwkJImdvNzAwNy11c2I6IFdyaXRlSW50ZXJydXB0OiAlMDR4ICUwNHhcbiIsIGFkZHIsIGRhdGEpOworI2VuZGlmCisKKwl0YnVmID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAodGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQodGJ1ZiwgMCwgOCk7CisJdGJ1ZlswXSA9IGRhdGEgJiAweGZmOworCXRidWZbMV0gPSBkYXRhID4+IDg7CisJdGJ1ZlsyXSA9IGFkZHIgJiAweGZmOworCXRidWZbM10gPSBhZGRyID4+IDg7CisJciA9IHVzYl9jb250cm9sX21zZyh1c2ItPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYi0+dXNiZGV2LCAyKSwgMHgwMCwKKwkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCwgMHg1NWFhLAorCQkJMHhmMGYwLCB0YnVmLCA4LCB0aW1lb3V0KTsKKwlrZnJlZSh0YnVmKTsKKwlpZiAociA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBlcnJvciBpbiBXcml0ZUludGVycnVwdDogJWRcbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdvNzAwN191c2JfcmVhZGludGVycnVwdF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoc3RydWN0IGdvNzAwNyAqKXVyYi0+Y29udGV4dDsKKwl1MTYgKnJlZ3MgPSAodTE2ICopdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVTSFVURE9XTiAmJgorCQkJCWdvLT5zdGF0dXMgIT0gU1RBVFVTX1NIVVRET1dOKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiZ283MDA3LXVzYjogZXJyb3IgaW4gcmVhZCBpbnRlcnJ1cHQ6ICVkXG4iLAorCQkJCXVyYi0+c3RhdHVzKTsKKwkJfSBlbHNlIHsKKwkJCXdha2VfdXAoJmdvLT5pbnRlcnJ1cHRfd2FpdHEpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIGlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogc2hvcnQgcmVhZCBpbiBpbnRlcnJ1cHQgcGlwZSFcbiIpOworCX0gZWxzZSB7CisJCWdvLT5pbnRlcnJ1cHRfYXZhaWxhYmxlID0gMTsKKwkJZ28tPmludGVycnVwdF9kYXRhID0gX19sZTE2X3RvX2NwdShyZWdzWzBdKTsKKwkJZ28tPmludGVycnVwdF92YWx1ZSA9IF9fbGUxNl90b19jcHUocmVnc1sxXSk7CisjaWZkZWYgR083MDA3X1VTQl9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3LXVzYjogUmVhZEludGVycnVwdDogJTA0eCAlMDR4XG4iLAorCQkJCWdvLT5pbnRlcnJ1cHRfdmFsdWUsIGdvLT5pbnRlcnJ1cHRfZGF0YSk7CisjZW5kaWYKKwl9CisKKwl3YWtlX3VwKCZnby0+aW50ZXJydXB0X3dhaXRxKTsKK30KKworc3RhdGljIGludCBnbzcwMDdfdXNiX3JlYWRfaW50ZXJydXB0KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJaW50IHI7CisKKwlyID0gdXNiX3N1Ym1pdF91cmIodXNiLT5pbnRyX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdvNzAwNy11c2I6IHVuYWJsZSB0byBzdWJtaXQgaW50ZXJydXB0IHVyYjogJWRcbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdvNzAwN191c2JfcmVhZF92aWRlb19waXBlX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IChzdHJ1Y3QgZ283MDA3ICopdXJiLT5jb250ZXh0OworCWludCByOworCisJaWYgKCFnby0+c3RyZWFtaW5nKSB7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ28tPmZyYW1lX3dhaXRxKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIGluIHZpZGVvIHBpcGU6ICVkXG4iLAorCQkJCXVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IHNob3J0IHJlYWQgaW4gdmlkZW8gcGlwZSFcbiIpOworCQlyZXR1cm47CisJfQorCWdvNzAwN19wYXJzZV92aWRlb19zdHJlYW0oZ28sIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCXIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBlcnJvciBpbiB2aWRlbyBwaXBlOiAlZFxuIiwgcik7Cit9CisKK3N0YXRpYyB2b2lkIGdvNzAwN191c2JfcmVhZF9hdWRpb19waXBlX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IChzdHJ1Y3QgZ283MDA3ICopdXJiLT5jb250ZXh0OworCWludCByOworCisJaWYgKCFnby0+c3RyZWFtaW5nKQorCQlyZXR1cm47CisJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBlcnJvciBpbiBhdWRpbyBwaXBlOiAlZFxuIiwKKwkJCQl1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBzaG9ydCByZWFkIGluIGF1ZGlvIHBpcGUhXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZ28tPmF1ZGlvX2RlbGl2ZXIgIT0gTlVMTCkKKwkJZ28tPmF1ZGlvX2RlbGl2ZXIoZ28sIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCXIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBlcnJvciBpbiBhdWRpbyBwaXBlOiAlZFxuIiwgcik7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3VzYl9zdHJlYW1fc3RhcnQoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwlpbnQgaSwgcjsKKworCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKwkJciA9IHVzYl9zdWJtaXRfdXJiKHVzYi0+dmlkZW9fdXJic1tpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBlcnJvciBzdWJtaXR0aW5nIHZpZGVvICIKKwkJCQkJInVyYiAlZDogJWRcbiIsIGksIHIpOworCQkJZ290byB2aWRlb19zdWJtaXRfZmFpbGVkOworCQl9CisJfQorCWlmICghZ28tPmF1ZGlvX2VuYWJsZWQpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IDg7ICsraSkgeworCQlyID0gdXNiX3N1Ym1pdF91cmIodXNiLT5hdWRpb191cmJzW2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIHN1Ym1pdHRpbmcgYXVkaW8gIgorCQkJCQkidXJiICVkOiAlZFxuIiwgaSwgcik7CisJCQlnb3RvIGF1ZGlvX3N1Ym1pdF9mYWlsZWQ7CisJCX0KKwl9CisJcmV0dXJuIDA7CisKK2F1ZGlvX3N1Ym1pdF9mYWlsZWQ6CisJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJdXNiX2tpbGxfdXJiKHVzYi0+YXVkaW9fdXJic1tpXSk7Cit2aWRlb19zdWJtaXRfZmFpbGVkOgorCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCXVzYl9raWxsX3VyYih1c2ItPnZpZGVvX3VyYnNbaV0pOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBnbzcwMDdfdXNiX3N0cmVhbV9zdG9wKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJaW50IGk7CisKKwlpZiAoZ28tPnN0YXR1cyA9PSBTVEFUVVNfU0hVVERPV04pCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCXVzYl9raWxsX3VyYih1c2ItPnZpZGVvX3VyYnNbaV0pOworCWlmIChnby0+YXVkaW9fZW5hYmxlZCkKKwkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJCXVzYl9raWxsX3VyYih1c2ItPmF1ZGlvX3VyYnNbaV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdvNzAwN191c2Jfc2VuZF9maXJtd2FyZShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwlpbnQgdHJhbnNmZXJyZWQsIHBpcGU7CisJaW50IHRpbWVvdXQgPSA1MDA7CisKKyNpZmRlZiBHTzcwMDdfVVNCX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNy11c2I6IERvd25sb2FkQnVmZmVyIHNlbmRpbmcgJWQgYnl0ZXNcbiIsIGxlbik7CisjZW5kaWYKKworCWlmICh1c2ItPmJvYXJkLT5mbGFncyAmIEdPNzAwN19VU0JfRVpVU0IpCisJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUodXNiLT51c2JkZXYsIDIpOworCWVsc2UKKwkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZSh1c2ItPnVzYmRldiwgMyk7CisKKwlyZXR1cm4gdXNiX2J1bGtfbXNnKHVzYi0+dXNiZGV2LCBwaXBlLCBkYXRhLCBsZW4sCisJCQkJCSZ0cmFuc2ZlcnJlZCwgdGltZW91dCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X2hwaV9vcHMgZ283MDA3X3VzYl9lenVzYl9ocGlfb3BzID0geworCS5pbnRlcmZhY2VfcmVzZXQJPSBnbzcwMDdfdXNiX2ludGVyZmFjZV9yZXNldCwKKwkud3JpdGVfaW50ZXJydXB0CT0gZ283MDA3X3VzYl9lenVzYl93cml0ZV9pbnRlcnJ1cHQsCisJLnJlYWRfaW50ZXJydXB0CQk9IGdvNzAwN191c2JfcmVhZF9pbnRlcnJ1cHQsCisJLnN0cmVhbV9zdGFydAkJPSBnbzcwMDdfdXNiX3N0cmVhbV9zdGFydCwKKwkuc3RyZWFtX3N0b3AJCT0gZ283MDA3X3VzYl9zdHJlYW1fc3RvcCwKKwkuc2VuZF9maXJtd2FyZQkJPSBnbzcwMDdfdXNiX3NlbmRfZmlybXdhcmUsCit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN19ocGlfb3BzIGdvNzAwN191c2Jfb25ib2FyZF9ocGlfb3BzID0geworCS5pbnRlcmZhY2VfcmVzZXQJPSBnbzcwMDdfdXNiX2ludGVyZmFjZV9yZXNldCwKKwkud3JpdGVfaW50ZXJydXB0CT0gZ283MDA3X3VzYl9vbmJvYXJkX3dyaXRlX2ludGVycnVwdCwKKwkucmVhZF9pbnRlcnJ1cHQJCT0gZ283MDA3X3VzYl9yZWFkX2ludGVycnVwdCwKKwkuc3RyZWFtX3N0YXJ0CQk9IGdvNzAwN191c2Jfc3RyZWFtX3N0YXJ0LAorCS5zdHJlYW1fc3RvcAkJPSBnbzcwMDdfdXNiX3N0cmVhbV9zdG9wLAorCS5zZW5kX2Zpcm13YXJlCQk9IGdvNzAwN191c2Jfc2VuZF9maXJtd2FyZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKiogRHJpdmVyIGZvciBFWi1VU0IgSTJDIGFkYXB0ZXIgKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGdvNzAwN191c2JfaTJjX21hc3Rlcl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJc3RydWN0IGkyY19tc2cgbXNnc1tdLCBpbnQgbnVtKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCXU4IGJ1ZlsxNl07CisJaW50IGJ1Zl9sZW4sIGk7CisJaW50IHJldCA9IC0xOworCisJaWYgKGdvLT5zdGF0dXMgPT0gU1RBVFVTX1NIVVRET1dOKQorCQlyZXR1cm4gLTE7CisKKwlkb3duKCZ1c2ItPmkyY19sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgeworCQkvKiBUaGUgaGFyZHdhcmUgY29tbWFuZCBpcyAid3JpdGUgc29tZSBieXRlcyB0aGVuIHJlYWQgc29tZQorCQkgKiBieXRlcyIsIHNvIHdlIHRyeSB0byBjb2FsZXNjZSBhIHdyaXRlIGZvbGxvd2VkIGJ5IGEgcmVhZAorCQkgKiBpbnRvIGEgc2luZ2xlIFVTQiB0cmFuc2FjdGlvbiAqLworCQlpZiAoaSArIDEgPCBudW0gJiYgbXNnc1tpXS5hZGRyID09IG1zZ3NbaSArIDFdLmFkZHIgJiYKKwkJCQkhKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgJiYKKwkJCQkobXNnc1tpICsgMV0uZmxhZ3MgJiBJMkNfTV9SRCkpIHsKKyNpZmRlZiBHTzcwMDdfSTJDX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3LXVzYjogaTJjIHdyaXRlL3JlYWQgJWQvJWQgIgorCQkJCQkiYnl0ZXMgb24gJTAyeFxuIiwgbXNnc1tpXS5sZW4sCisJCQkJCW1zZ3NbaSArIDFdLmxlbiwgbXNnc1tpXS5hZGRyKTsKKyNlbmRpZgorCQkJYnVmWzBdID0gMHgwMTsKKwkJCWJ1ZlsxXSA9IG1zZ3NbaV0ubGVuICsgMTsKKwkJCWJ1ZlsyXSA9IG1zZ3NbaV0uYWRkciA8PCAxOworCQkJbWVtY3B5KCZidWZbM10sIG1zZ3NbaV0uYnVmLCBtc2dzW2ldLmxlbik7CisJCQlidWZfbGVuID0gbXNnc1tpXS5sZW4gKyAzOworCQkJYnVmW2J1Zl9sZW4rK10gPSBtc2dzWysraV0ubGVuOworCQl9IGVsc2UgaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworI2lmZGVmIEdPNzAwN19JMkNfREVCVUcKKwkJCXByaW50ayhLRVJOX0RFQlVHICJnbzcwMDctdXNiOiBpMmMgcmVhZCAlZCAiCisJCQkJCSJieXRlcyBvbiAlMDJ4XG4iLCBtc2dzW2ldLmxlbiwKKwkJCQkJbXNnc1tpXS5hZGRyKTsKKyNlbmRpZgorCQkJYnVmWzBdID0gMHgwMTsKKwkJCWJ1ZlsxXSA9IDE7CisJCQlidWZbMl0gPSBtc2dzW2ldLmFkZHIgPDwgMTsKKwkJCWJ1ZlszXSA9IG1zZ3NbaV0ubGVuOworCQkJYnVmX2xlbiA9IDQ7CisJCX0gZWxzZSB7CisjaWZkZWYgR083MDA3X0kyQ19ERUJVRworCQkJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNy11c2I6IGkyYyB3cml0ZSAlZCAiCisJCQkJCSJieXRlcyBvbiAlMDJ4XG4iLCBtc2dzW2ldLmxlbiwKKwkJCQkJbXNnc1tpXS5hZGRyKTsKKyNlbmRpZgorCQkJYnVmWzBdID0gMHgwMDsKKwkJCWJ1ZlsxXSA9IG1zZ3NbaV0ubGVuICsgMTsKKwkJCWJ1ZlsyXSA9IG1zZ3NbaV0uYWRkciA8PCAxOworCQkJbWVtY3B5KCZidWZbM10sIG1zZ3NbaV0uYnVmLCBtc2dzW2ldLmxlbik7CisJCQlidWZfbGVuID0gbXNnc1tpXS5sZW4gKyAzOworCQkJYnVmW2J1Zl9sZW4rK10gPSAwOworCQl9CisJCWlmIChnbzcwMDdfdXNiX3ZlbmRvcl9yZXF1ZXN0KGdvLCAweDI0LCAwLCAwLAorCQkJCQkJYnVmLCBidWZfbGVuLCAwKSA8IDApCisJCQlnb3RvIGkyY19kb25lOworCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJCQlpZiAoZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChnbywgMHgyNSwgMCwgMCwgYnVmLAorCQkJCQkJbXNnc1tpXS5sZW4gKyAxLCAxKSA8IDApCisJCQkJZ290byBpMmNfZG9uZTsKKwkJCW1lbWNweShtc2dzW2ldLmJ1ZiwgYnVmICsgMSwgbXNnc1tpXS5sZW4pOworCQl9CisJfQorCXJldCA9IDA7CisKK2kyY19kb25lOgorCXVwKCZ1c2ItPmkyY19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMyIGdvNzAwN191c2JfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJLyogTm8gZXJyb3JzIGFyZSByZXBvcnRlZCBieSB0aGUgaGFyZHdhcmUsIHNvIHdlIGRvbid0IGJvdGhlcgorCSAqIHN1cHBvcnRpbmcgcXVpY2sgd3JpdGVzIHRvIGF2b2lkIGNvbmZ1c2luZyBwcm9iaW5nICovCisJcmV0dXJuIChJMkNfRlVOQ19TTUJVU19FTVVMKSAmIH5JMkNfRlVOQ19TTUJVU19RVUlDSzsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGdvNzAwN191c2JfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIJPSBnbzcwMDdfdXNiX2kyY19tYXN0ZXJfeGZlciwKKwkuZnVuY3Rpb25hbGl0eQk9IGdvNzAwN191c2JfZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgZ283MDA3X3VzYl9hZGFwX3RlbXBsID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmNsYXNzCQkJPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAorCS5uYW1lCQkJPSAiV0lTIEdPNzAwN1NCIEVaLVVTQiIsCisJLmlkCQkJPSBJMkNfQUxHT19HTzcwMDdfVVNCLAorCS5hbGdvCQkJPSAmZ283MDA3X3VzYl9hbGdvLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKiBVU0IgYWRkL3JlbW92ZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGdvNzAwN191c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbzsKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiOworCXN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkICpib2FyZDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwljaGFyICpuYW1lOworCWludCB2aWRlb19waXBlLCBpLCB2X3VyYl9sZW47CisKKwlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3LXVzYjogcHJvYmluZyBuZXcgR083MDA3IFVTQiBib2FyZFxuIik7CisKKwlzd2l0Y2ggKGlkLT5kcml2ZXJfaW5mbykgeworCWNhc2UgR083MDA3X0JPQVJESURfTUFUUklYX0lJOgorCQluYW1lID0gIldJUyBNYXRyaXggSUkgb3IgY29tcGF0aWJsZSI7CisJCWJvYXJkID0gJmJvYXJkX21hdHJpeF9paTsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfQk9BUkRJRF9NQVRSSVhfUkVMT0FEOgorCQluYW1lID0gIldJUyBNYXRyaXggUmVsb2FkZWQgb3IgY29tcGF0aWJsZSI7CisJCWJvYXJkID0gJmJvYXJkX21hdHJpeF9yZWxvYWQ7CisJCWJyZWFrOworCWNhc2UgR083MDA3X0JPQVJESURfTUFUUklYX1JFVjoKKwkJbmFtZSA9ICJXSVMgTWF0cml4IFJldm9sdXRpb24gb3IgY29tcGF0aWJsZSI7CisJCWJvYXJkID0gJmJvYXJkX21hdHJpeF9yZXZvbHV0aW9uOworCQlicmVhazsKKwljYXNlIEdPNzAwN19CT0FSRElEX1NUQVJfVFJFSzoKKwkJbmFtZSA9ICJXSVMgU3RhciBUcmVrIG9yIGNvbXBhdGlibGUiOworCQlib2FyZCA9ICZib2FyZF9zdGFyX3RyZWs7CisJCWJyZWFrOworCWNhc2UgR083MDA3X0JPQVJESURfWE1FTjoKKwkJbmFtZSA9ICJXSVMgWE1lbiBvciBjb21wYXRpYmxlIjsKKwkJYm9hcmQgPSAmYm9hcmRfeG1lbjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfQk9BUkRJRF9YTUVOX0lJOgorCQluYW1lID0gIldJUyBYTWVuIElJIG9yIGNvbXBhdGlibGUiOworCQlib2FyZCA9ICZib2FyZF94bWVuOworCQlicmVhazsKKwljYXNlIEdPNzAwN19CT0FSRElEX1hNRU5fSUlJOgorCQluYW1lID0gIldJUyBYTWVuIElJSSBvciBjb21wYXRpYmxlIjsKKwkJYm9hcmQgPSAmYm9hcmRfeG1lbjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfQk9BUkRJRF9QWF9NNDAyVToKKwkJbmFtZSA9ICJQbGV4dG9yIFBYLU00MDJVIjsKKwkJYm9hcmQgPSAmYm9hcmRfbWF0cml4X2lpOworCQlicmVhazsKKwljYXNlIEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9BTlk6CisJCW5hbWUgPSAiUGxleHRvciBQWC1UVjQwMlUgKHVua25vd24gdHVuZXIpIjsKKwkJYm9hcmQgPSAmYm9hcmRfcHhfdHY0MDJ1OworCQlicmVhazsKKwljYXNlIEdPNzAwN19CT0FSRElEX0xJRkVWSUVXX0xSMTkyOgorCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IFRoZSBMaWZldmlldyBUViBXYWxrZXIgVWx0cmEgIgorCQkJCSJpcyBub3Qgc3VwcG9ydGVkLiAgU29ycnkhXG4iKTsKKwkJcmV0dXJuIDA7CisJCW5hbWUgPSAiTGlmZXZpZXcgVFYgV2Fsa2VyIFVsdHJhIjsKKwkJYm9hcmQgPSAmYm9hcmRfbGlmZXZpZXdfbHIxOTI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogdW5rbm93biBib2FyZCBJRCAlZCFcbiIsCisJCQkJKHVuc2lnbmVkIGludClpZC0+ZHJpdmVyX2luZm8pOworCQlyZXR1cm4gMDsKKwl9CisKKwl1c2IgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ283MDA3X3VzYiksIEdGUF9LRVJORUwpOworCWlmICh1c2IgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KHVzYiwgMCwgc2l6ZW9mKHN0cnVjdCBnbzcwMDdfdXNiKSk7CisKKwkvKiBBbGxvY2F0ZSB0aGUgVVJCIGFuZCBidWZmZXIgZm9yIHJlY2VpdmluZyBpbmNvbWluZyBpbnRlcnJ1cHRzICovCisJdXNiLT5pbnRyX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKHVzYi0+aW50cl91cmIgPT0gTlVMTCkKKwkJZ290byBhbGxvY2ZhaWw7CisJdXNiLT5pbnRyX3VyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYygyKnNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTsKKwlpZiAodXNiLT5pbnRyX3VyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpCisJCWdvdG8gYWxsb2NmYWlsOworCisJZ28gPSBnbzcwMDdfYWxsb2MoJmJvYXJkLT5tYWluX2luZm8sICZpbnRmLT5kZXYpOworCWlmIChnbyA9PSBOVUxMKQorCQlnb3RvIGFsbG9jZmFpbDsKKwl1c2ItPmJvYXJkID0gYm9hcmQ7CisJdXNiLT51c2JkZXYgPSB1c2JkZXY7CisJZ28tPmJvYXJkX2lkID0gaWQtPmRyaXZlcl9pbmZvOworCXN0cm5jcHkoZ28tPm5hbWUsIG5hbWUsIHNpemVvZihnby0+bmFtZSkpOworCWlmIChib2FyZC0+ZmxhZ3MgJiBHTzcwMDdfVVNCX0VaVVNCKQorCQlnby0+aHBpX29wcyA9ICZnbzcwMDdfdXNiX2V6dXNiX2hwaV9vcHM7CisJZWxzZQorCQlnby0+aHBpX29wcyA9ICZnbzcwMDdfdXNiX29uYm9hcmRfaHBpX29wczsKKwlnby0+aHBpX2NvbnRleHQgPSB1c2I7CisJdXNiX2ZpbGxfaW50X3VyYih1c2ItPmludHJfdXJiLCB1c2ItPnVzYmRldiwKKwkJCXVzYl9yY3ZpbnRwaXBlKHVzYi0+dXNiZGV2LCA0KSwKKwkJCXVzYi0+aW50cl91cmItPnRyYW5zZmVyX2J1ZmZlciwgMipzaXplb2YodTE2KSwKKwkJCWdvNzAwN191c2JfcmVhZGludGVycnVwdF9jb21wbGV0ZSwgZ28sIDgpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZ28pOworCisJLyogQm9vdCB0aGUgR083MDA3ICovCisJaWYgKGdvNzAwN19ib290X2VuY29kZXIoZ28sIGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmCisJCQkJCUdPNzAwN19CT0FSRF9VU0VfT05CT0FSRF9JMkMpIDwgMCkKKwkJZ290byBpbml0ZmFpbDsKKworCS8qIFJlZ2lzdGVyIHRoZSBFWi1VU0IgSTJDIGFkYXB0ZXIsIGlmIHdlJ3JlIHVzaW5nIGl0ICovCisJaWYgKGJvYXJkLT5mbGFncyAmIEdPNzAwN19VU0JfRVpVU0JfSTJDKSB7CisJCW1lbWNweSgmZ28tPmkyY19hZGFwdGVyLCAmZ283MDA3X3VzYl9hZGFwX3RlbXBsLAorCQkJCXNpemVvZihnbzcwMDdfdXNiX2FkYXBfdGVtcGwpKTsKKwkJaW5pdF9NVVRFWCgmdXNiLT5pMmNfbG9jayk7CisJCWdvLT5pMmNfYWRhcHRlci5kZXYucGFyZW50ID0gZ28tPmRldjsKKwkJaTJjX3NldF9hZGFwZGF0YSgmZ28tPmkyY19hZGFwdGVyLCBnbyk7CisJCWlmIChpMmNfYWRkX2FkYXB0ZXIoJmdvLT5pMmNfYWRhcHRlcikgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiZ283MDA3LXVzYjogZXJyb3I6IGkyY19hZGRfYWRhcHRlciBmYWlsZWRcbiIpOworCQkJZ290byBpbml0ZmFpbDsKKwkJfQorCQlnby0+aTJjX2FkYXB0ZXJfb25saW5lID0gMTsKKwl9CisKKwkvKiBQZWxjbyBhbmQgQWRsaW5rIHJldXNlZCB0aGUgWE1lbiBhbmQgWE1lbi1JSUkgdmVuZG9yIGFuZCBwcm9kdWN0CisJICogSURzIGZvciB0aGVpciBvd24gaW5jb21wYXRpYmxlIGRlc2lnbnMuICBXZSBjYW4gZGV0ZWN0IFhNZW4gYm9hcmRzCisJICogYnkgcHJvYmluZyB0aGUgc2Vuc29yLCBidXQgdGhlcmUgaXMgbm8gd2F5IHRvIHByb2JlIHRoZSBzZW5zb3JzIG9uCisJICogdGhlIFBlbGNvIGFuZCBBZGxpbmsgZGVzaWducyBzbyB3ZSBkZWZhdWx0IHRvIHRoZSBBZGxpbmsuICBJZiBpdAorCSAqIGlzIGFjdHVhbGx5IGEgUGVsY28sIHRoZSB1c2VyIG11c3Qgc2V0IHRoZSBhc3N1bWVfZW5kdXJhIG1vZHVsZQorCSAqIHBhcmFtZXRlci4gKi8KKwlpZiAoKGdvLT5ib2FyZF9pZCA9PSBHTzcwMDdfQk9BUkRJRF9YTUVOIHx8CisJCQkJZ28tPmJvYXJkX2lkID09IEdPNzAwN19CT0FSRElEX1hNRU5fSUlJKSAmJgorCQkJZ28tPmkyY19hZGFwdGVyX29ubGluZSkgeworCQl1bmlvbiBpMmNfc21idXNfZGF0YSBkYXRhOworCisJCS8qIENoZWNrIHRvIHNlZSBpZiByZWdpc3RlciAweDBBIGlzIDB4NzYgKi8KKwkJaTJjX3NtYnVzX3hmZXIoJmdvLT5pMmNfYWRhcHRlciwgMHgyMSwgSTJDX0NMSUVOVF9TQ0NCLAorCQkJSTJDX1NNQlVTX1JFQUQsIDB4MEEsIEkyQ19TTUJVU19CWVRFX0RBVEEsICZkYXRhKTsKKwkJaWYgKGRhdGEuYnl0ZSAhPSAweDc2KSB7CisJCQlpZiAoYXNzdW1lX2VuZHVyYSkgeworCQkJCWdvLT5ib2FyZF9pZCA9IEdPNzAwN19CT0FSRElEX0VORFVSQTsKKwkJCQl1c2ItPmJvYXJkID0gYm9hcmQgPSAmYm9hcmRfZW5kdXJhOworCQkJCWdvLT5ib2FyZF9pbmZvID0gJmJvYXJkLT5tYWluX2luZm87CisJCQkJc3RybmNweShnby0+bmFtZSwgIlBlbGNvIEVuZHVyYSIsCisJCQkJCQlzaXplb2YoZ28tPm5hbWUpKTsKKwkJCX0gZWxzZSB7CisJCQkJdTE2IGNoYW5uZWw7CisKKwkJCQkvKiBzZXQgR1BJTzUgdG8gYmUgYW4gb3V0cHV0LCBjdXJyZW50bHkgbG93ICovCisJCQkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIDB4M2M4MiwgMHgwMDAwKTsKKwkJCQlnbzcwMDdfd3JpdGVfYWRkcihnbywgMHgzYzgwLCAweDAwZGYpOworCQkJCS8qIHJlYWQgY2hhbm5lbCBudW1iZXIgZnJvbSBHUElPWzE6MF0gKi8KKwkJCQlnbzcwMDdfcmVhZF9hZGRyKGdvLCAweDNjODEsICZjaGFubmVsKTsKKwkJCQljaGFubmVsICY9IDB4MzsKKwkJCQlnby0+Ym9hcmRfaWQgPSBHTzcwMDdfQk9BUkRJRF9BRExJTktfTVBHMjQ7CisJCQkJdXNiLT5ib2FyZCA9IGJvYXJkID0gJmJvYXJkX2FkbGlua19tcGcyNDsKKwkJCQlnby0+Ym9hcmRfaW5mbyA9ICZib2FyZC0+bWFpbl9pbmZvOworCQkJCWdvLT5jaGFubmVsX251bWJlciA9IGNoYW5uZWw7CisJCQkJc25wcmludGYoZ28tPm5hbWUsIHNpemVvZihnby0+bmFtZSksCisJCQkJCSJBZGxpbmsgUENJLU1QRzI0LCBjaGFubmVsICMlZCIsCisJCQkJCWNoYW5uZWwpOworCQkJfQorCQl9CisJfQorCisJLyogUHJvYmUgdGhlIHR1bmVyIG1vZGVsIG9uIHRoZSBUVjQwMlUgKi8KKwlpZiAoZ28tPmJvYXJkX2lkID09IEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9BTlkpIHsKKwkJdTggZGF0YVszXTsKKworCQkvKiBCb2FyZCBzdHJhcHBpbmcgaW5kaWNhdGVzIHR1bmVyIG1vZGVsICovCisJCWlmIChnbzcwMDdfdXNiX3ZlbmRvcl9yZXF1ZXN0KGdvLCAweDQxLCAwLCAwLCBkYXRhLCAzLCAxKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogR1BJTyByZWFkIGZhaWxlZCFcbiIpOworCQkJZ290byBpbml0ZmFpbDsKKwkJfQorCQlzd2l0Y2ggKGRhdGFbMF0gPj4gNikgeworCQljYXNlIDE6CisJCQlnby0+Ym9hcmRfaWQgPSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfRVU7CisJCQlnby0+dHVuZXJfdHlwZSA9IFRVTkVSX1NPTllfQlRGX1BHNDcyWjsKKwkJCXN0cm5jcHkoZ28tPm5hbWUsICJQbGV4dG9yIFBYLVRWNDAyVS1FVSIsCisJCQkJCXNpemVvZihnby0+bmFtZSkpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWdvLT5ib2FyZF9pZCA9IEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9KUDsKKwkJCWdvLT50dW5lcl90eXBlID0gVFVORVJfU09OWV9CVEZfUEs0NjdaOworCQkJc3RybmNweShnby0+bmFtZSwgIlBsZXh0b3IgUFgtVFY0MDJVLUpQIiwKKwkJCQkJc2l6ZW9mKGdvLT5uYW1lKSk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJZ28tPmJvYXJkX2lkID0gR083MDA3X0JPQVJESURfUFhfVFY0MDJVX05BOworCQkJZ28tPnR1bmVyX3R5cGUgPSBUVU5FUl9TT05ZX0JURl9QQjQ2M1o7CisJCQlzdHJuY3B5KGdvLT5uYW1lLCAiUGxleHRvciBQWC1UVjQwMlUtTkEiLAorCQkJCQlzaXplb2YoZ28tPm5hbWUpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNy11c2I6IHVuYWJsZSB0byBkZXRlY3QgIgorCQkJCQkJInR1bmVyIHR5cGUhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIENvbmZpZ3VyZSB0dW5lciBtb2RlIHNlbGVjdGlvbiBpbnB1dHMgY29ubmVjdGVkCisJCSAqIHRvIHRoZSBFWi1VU0IgR1BJTyBvdXRwdXQgcGlucyAqLworCQlpZiAoZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChnbywgMHg0MCwgMHg3ZjAyLCAwLAorCQkJCQlOVUxMLCAwLCAwKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJnbzcwMDctdXNiOiBHUElPIHdyaXRlIGZhaWxlZCFcbiIpOworCQkJZ290byBpbml0ZmFpbDsKKwkJfQorCX0KKworCS8qIFByaW50IGEgbmFzdHkgbWVzc2FnZSBpZiB0aGUgdXNlciBhdHRlbXB0cyB0byB1c2UgYSBVU0IyLjAgZGV2aWNlIGluCisJICogYSBVU0IxLjEgcG9ydC4gIFRoZXJlIHdpbGwgYmUgc2lsZW50IGNvcnJ1cHRpb24gb2YgdGhlIHN0cmVhbS4gKi8KKwlpZiAoKGJvYXJkLT5mbGFncyAmIEdPNzAwN19VU0JfRVpVU0IpICYmCisJCQl1c2JkZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKQorCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6ICoqKiBXQVJOSU5HICoqKiAgVGhpcyBkZXZpY2UgIgorCQkJCSJtdXN0IGJlIGNvbm5lY3RlZCB0byBhIFVTQiAyLjAgcG9ydCEgICIKKwkJCQkiQXR0ZW1wdGluZyB0byBjYXB0dXJlIHZpZGVvIHRocm91Z2ggYSBVU0IgMS4xICIKKwkJCQkicG9ydCB3aWxsIHJlc3VsdCBpbiBzdHJlYW0gY29ycnVwdGlvbiwgZXZlbiAiCisJCQkJImF0IGxvdyBiaXRyYXRlcyFcbiIpOworCisJLyogRG8gYW55IGZpbmFsIEdPNzAwNyBpbml0aWFsaXphdGlvbiwgdGhlbiByZWdpc3RlciB0aGUKKwkgKiBWNEwyIGFuZCBBTFNBIGludGVyZmFjZXMgKi8KKwlpZiAoZ283MDA3X3JlZ2lzdGVyX2VuY29kZXIoZ28pIDwgMCkKKwkJZ290byBpbml0ZmFpbDsKKworCS8qIEFsbG9jYXRlIHRoZSBVUkJzIGFuZCBidWZmZXJzIGZvciByZWNlaXZpbmcgdGhlIHZpZGVvIHN0cmVhbSAqLworCWlmIChib2FyZC0+ZmxhZ3MgJiBHTzcwMDdfVVNCX0VaVVNCKSB7CisJCXZfdXJiX2xlbiA9IDEwMjQ7CisJCXZpZGVvX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUodXNiLT51c2JkZXYsIDYpOworCX0gZWxzZSB7CisJCXZfdXJiX2xlbiA9IDUxMjsKKwkJdmlkZW9fcGlwZSA9IHVzYl9yY3ZidWxrcGlwZSh1c2ItPnVzYmRldiwgMSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKwkJdXNiLT52aWRlb191cmJzW2ldID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHVzYi0+dmlkZW9fdXJic1tpXSA9PSBOVUxMKQorCQkJZ290byBpbml0ZmFpbDsKKwkJdXNiLT52aWRlb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgPQorCQkJCQkJa21hbGxvYyh2X3VyYl9sZW4sIEdGUF9LRVJORUwpOworCQlpZiAodXNiLT52aWRlb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkKKwkJCWdvdG8gaW5pdGZhaWw7CisJCXVzYl9maWxsX2J1bGtfdXJiKHVzYi0+dmlkZW9fdXJic1tpXSwgdXNiLT51c2JkZXYsIHZpZGVvX3BpcGUsCisJCQkJdXNiLT52aWRlb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIsIHZfdXJiX2xlbiwKKwkJCQlnbzcwMDdfdXNiX3JlYWRfdmlkZW9fcGlwZV9jb21wbGV0ZSwgZ28pOworCX0KKworCS8qIEFsbG9jYXRlIHRoZSBVUkJzIGFuZCBidWZmZXJzIGZvciByZWNlaXZpbmcgdGhlIGF1ZGlvIHN0cmVhbSAqLworCWlmICgoYm9hcmQtPmZsYWdzICYgR083MDA3X1VTQl9FWlVTQikgJiYgZ28tPmF1ZGlvX2VuYWJsZWQpCisJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKwkJCXVzYi0+YXVkaW9fdXJic1tpXSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCQlpZiAodXNiLT5hdWRpb191cmJzW2ldID09IE5VTEwpCisJCQkJZ290byBpbml0ZmFpbDsKKwkJCXVzYi0+YXVkaW9fdXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyg0MDk2LAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmICh1c2ItPmF1ZGlvX3VyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKQorCQkJCWdvdG8gaW5pdGZhaWw7CisJCQl1c2JfZmlsbF9idWxrX3VyYih1c2ItPmF1ZGlvX3VyYnNbaV0sIHVzYi0+dXNiZGV2LAorCQkJCXVzYl9yY3ZidWxrcGlwZSh1c2ItPnVzYmRldiwgOCksCisJCQkJdXNiLT5hdWRpb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIsIDQwOTYsCisJCQkJZ283MDA3X3VzYl9yZWFkX2F1ZGlvX3BpcGVfY29tcGxldGUsIGdvKTsKKwkJfQorCisKKwlnby0+c3RhdHVzID0gU1RBVFVTX09OTElORTsKKwlyZXR1cm4gMDsKKworaW5pdGZhaWw6CisJZ28tPnN0YXR1cyA9IFNUQVRVU19TSFVURE9XTjsKKwlyZXR1cm4gMDsKKworYWxsb2NmYWlsOgorCWlmICh1c2ItPmludHJfdXJiKSB7CisJCWtmcmVlKHVzYi0+aW50cl91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXVzYl9mcmVlX3VyYih1c2ItPmludHJfdXJiKTsKKwl9CisJa2ZyZWUodXNiKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgZ283MDA3X3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCWludCBpOworCisJZ28tPnN0YXR1cyA9IFNUQVRVU19TSFVURE9XTjsKKwl1c2Jfa2lsbF91cmIodXNiLT5pbnRyX3VyYik7CisKKwkvKiBGcmVlIFVTQi1yZWxhdGVkIHN0cnVjdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7CisJCWlmICh1c2ItPnZpZGVvX3VyYnNbaV0gIT0gTlVMTCkgeworCQkJaWYgKHVzYi0+dmlkZW9fdXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyICE9IE5VTEwpCisJCQkJa2ZyZWUodXNiLT52aWRlb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdXNiX2ZyZWVfdXJiKHVzYi0+dmlkZW9fdXJic1tpXSk7CisJCX0KKwkJaWYgKHVzYi0+YXVkaW9fdXJic1tpXSAhPSBOVUxMKSB7CisJCQlpZiAodXNiLT5hdWRpb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgIT0gTlVMTCkKKwkJCQlrZnJlZSh1c2ItPmF1ZGlvX3VyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1c2JfZnJlZV91cmIodXNiLT5hdWRpb191cmJzW2ldKTsKKwkJfQorCX0KKwlrZnJlZSh1c2ItPmludHJfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCXVzYl9mcmVlX3VyYih1c2ItPmludHJfdXJiKTsKKworCWtmcmVlKGdvLT5ocGlfY29udGV4dCk7CisKKwlnbzcwMDdfcmVtb3ZlKGdvKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGdvNzAwN191c2JfZHJpdmVyID0geworCS5uYW1lCQk9ICJnbzcwMDciLAorCS5wcm9iZQkJPSBnbzcwMDdfdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gZ283MDA3X3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IGdvNzAwN191c2JfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBnbzcwMDdfdXNiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZnbzcwMDdfdXNiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBnbzcwMDdfdXNiX2NsZWFudXAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmZ283MDA3X3VzYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChnbzcwMDdfdXNiX2luaXQpOworbW9kdWxlX2V4aXQoZ283MDA3X3VzYl9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdjRsMi5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdjRsMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZTExNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy12NGwyLmMKQEAgLTAsMCArMSwxNDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpbmNsdWRlICJnbzcwMDcuaCIKKyNpbmNsdWRlICJnbzcwMDctcHJpdi5oIgorI2luY2x1ZGUgIndpcy1pMmMuaCIKKworc3RhdGljIHZvaWQgZGVhY3RpdmF0ZV9idWZmZXIoc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmKQoreworCWludCBpOworCisJaWYgKGdvYnVmLT5zdGF0ZSAhPSBCVUZfU1RBVEVfSURMRSkgeworCQlsaXN0X2RlbCgmZ29idWYtPnN0cmVhbSk7CisJCWdvYnVmLT5zdGF0ZSA9IEJVRl9TVEFURV9JRExFOworCX0KKwlpZiAoZ29idWYtPnBhZ2VfY291bnQgPiAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBnb2J1Zi0+cGFnZV9jb3VudDsgKytpKQorCQkJcGFnZV9jYWNoZV9yZWxlYXNlKGdvYnVmLT5wYWdlc1tpXSk7CisJCWdvYnVmLT5wYWdlX2NvdW50ID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFib3J0X3F1ZXVlZChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqZ29idWYsICpuZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGdvYnVmLCBuZXh0LCAmZ28tPnN0cmVhbSwgc3RyZWFtKSB7CisJCWRlYWN0aXZhdGVfYnVmZmVyKGdvYnVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3N0cmVhbW9mZihzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZG93bigmZ28tPmh3X2xvY2spOworCWlmIChnby0+c3RyZWFtaW5nKSB7CisJCWdvLT5zdHJlYW1pbmcgPSAwOworCQlnbzcwMDdfc3RyZWFtX3N0b3AoZ28pOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ28tPnNwaW5sb2NrLCBmbGFncyk7CisJCWFib3J0X3F1ZXVlZChnbyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdvLT5zcGlubG9jaywgZmxhZ3MpOworCQlnbzcwMDdfcmVzZXRfZW5jb2Rlcihnbyk7CisJCXJldHZhbCA9IDA7CisJfQorCXVwKCZnby0+aHdfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmg7CisKKwlpZiAoZ28tPnN0YXR1cyAhPSBTVEFUVVNfT05MSU5FKQorCQlyZXR1cm4gLUVCVVNZOworCWdvZmggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ283MDA3X2ZpbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZ29maCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwkrK2dvLT5yZWZfY291bnQ7CisJZ29maC0+Z28gPSBnbzsKKwlpbml0X01VVEVYKCZnb2ZoLT5sb2NrKTsKKwlnb2ZoLT5idWZfY291bnQgPSAwOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGdvZmg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisKKwlpZiAoZ29maC0+YnVmX2NvdW50ID4gMCkgeworCQlnbzcwMDdfc3RyZWFtb2ZmKGdvKTsKKwkJZ28tPmluX3VzZSA9IDA7CisJCWtmcmVlKGdvZmgtPmJ1ZnMpOworCQlnb2ZoLT5idWZfY291bnQgPSAwOworCX0KKwlrZnJlZShnb2ZoKTsKKwlpZiAoLS1nby0+cmVmX2NvdW50ID09IDApCisJCWtmcmVlKGdvKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGdldF9mcmFtZV90eXBlX2ZsYWcoc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmLCBpbnQgZm9ybWF0KQoreworCXU4ICpmID0gcGFnZV9hZGRyZXNzKGdvYnVmLT5wYWdlc1swXSk7CisKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgR083MDA3X0ZPUk1BVF9NSlBFRzoKKwkJcmV0dXJuIFY0TDJfQlVGX0ZMQUdfS0VZRlJBTUU7CisJY2FzZSBHTzcwMDdfRk9STUFUX01QRUc0OgorCQlzd2l0Y2ggKChmW2dvYnVmLT5mcmFtZV9vZmZzZXQgKyA0XSA+PiA2KSAmIDB4MykgeworCQljYXNlIDA6CisJCQlyZXR1cm4gVjRMMl9CVUZfRkxBR19LRVlGUkFNRTsKKwkJY2FzZSAxOgorCQkJcmV0dXJuIFY0TDJfQlVGX0ZMQUdfUEZSQU1FOworCQljYXNlIDI6CisJCQlyZXR1cm4gVjRMMl9CVUZfRkxBR19CRlJBTUU7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMToKKwljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzI6CisJCXN3aXRjaCAoKGZbZ29idWYtPmZyYW1lX29mZnNldCArIDVdID4+IDMpICYgMHg3KSB7CisJCWNhc2UgMToKKwkJCXJldHVybiBWNEwyX0JVRl9GTEFHX0tFWUZSQU1FOworCQljYXNlIDI6CisJCQlyZXR1cm4gVjRMMl9CVUZfRkxBR19QRlJBTUU7CisJCWNhc2UgMzoKKwkJCXJldHVybiBWNEwyX0JVRl9GTEFHX0JGUkFNRTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2NhcHR1cmVfc2l6ZShzdHJ1Y3QgZ283MDA3ICpnbywgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQsIGludCB0cnkpCit7CisJaW50IHNlbnNvcl9oZWlnaHQgPSAwLCBzZW5zb3Jfd2lkdGggPSAwOworCWludCB3aWR0aCwgaGVpZ2h0LCBpOworCisJaWYgKGZtdCAhPSBOVUxMICYmIGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTUpQRUcgJiYKKwkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTVBFRyAmJgorCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9NUEVHNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGdvLT5zdGFuZGFyZCkgeworCWNhc2UgR083MDA3X1NURF9OVFNDOgorCQlzZW5zb3Jfd2lkdGggPSA3MjA7CisJCXNlbnNvcl9oZWlnaHQgPSA0ODA7CisJCWJyZWFrOworCWNhc2UgR083MDA3X1NURF9QQUw6CisJCXNlbnNvcl93aWR0aCA9IDcyMDsKKwkJc2Vuc29yX2hlaWdodCA9IDU3NjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfU1REX09USEVSOgorCQlzZW5zb3Jfd2lkdGggPSBnby0+Ym9hcmRfaW5mby0+c2Vuc29yX3dpZHRoOworCQlzZW5zb3JfaGVpZ2h0ID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9oZWlnaHQ7CisJCWJyZWFrOworCX0KKworCWlmIChmbXQgPT0gTlVMTCkgeworCQl3aWR0aCA9IHNlbnNvcl93aWR0aDsKKwkJaGVpZ2h0ID0gc2Vuc29yX2hlaWdodDsKKwl9IGVsc2UgaWYgKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1NDQUxJTkcpIHsKKwkJaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA+IHNlbnNvcl93aWR0aCkKKwkJCXdpZHRoID0gc2Vuc29yX3dpZHRoOworCQllbHNlIGlmIChmbXQtPmZtdC5waXgud2lkdGggPCAxNDQpCisJCQl3aWR0aCA9IDE0NDsKKwkJZWxzZQorCQkJd2lkdGggPSBmbXQtPmZtdC5waXgud2lkdGggJiB+MHgwZjsKKworCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA+IHNlbnNvcl9oZWlnaHQpCisJCQloZWlnaHQgPSBzZW5zb3JfaGVpZ2h0OworCQllbHNlIGlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDwgOTYpCisJCQloZWlnaHQgPSA5NjsKKwkJZWxzZQorCQkJaGVpZ2h0ID0gZm10LT5mbXQucGl4LmhlaWdodCAmIH4weDBmOworCX0gZWxzZSB7CisJCWludCByZXF1ZXN0ZWRfc2l6ZSA9IGZtdC0+Zm10LnBpeC53aWR0aCAqIGZtdC0+Zm10LnBpeC5oZWlnaHQ7CisJCWludCBzZW5zb3Jfc2l6ZSA9IHNlbnNvcl93aWR0aCAqIHNlbnNvcl9oZWlnaHQ7CisKKwkJaWYgKDY0ICogcmVxdWVzdGVkX3NpemUgPCA5ICogc2Vuc29yX3NpemUpIHsKKwkJCXdpZHRoID0gc2Vuc29yX3dpZHRoIC8gNDsKKwkJCWhlaWdodCA9IHNlbnNvcl9oZWlnaHQgLyA0OworCQl9IGVsc2UgaWYgKDY0ICogcmVxdWVzdGVkX3NpemUgPCAzNiAqIHNlbnNvcl9zaXplKSB7CisJCQl3aWR0aCA9IHNlbnNvcl93aWR0aCAvIDI7CisJCQloZWlnaHQgPSBzZW5zb3JfaGVpZ2h0IC8gMjsKKwkJfSBlbHNlIHsKKwkJCXdpZHRoID0gc2Vuc29yX3dpZHRoOworCQkJaGVpZ2h0ID0gc2Vuc29yX2hlaWdodDsKKwkJfQorCQl3aWR0aCAmPSB+MHhmOworCQloZWlnaHQgJj0gfjB4ZjsKKwl9CisKKwlpZiAoZm10ICE9IE5VTEwpIHsKKwkJdTMyIHBpeGVsZm9ybWF0ID0gZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0OworCisJCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7CisJCWZtdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJZm10LT5mbXQucGl4LndpZHRoID0gd2lkdGg7CisJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBoZWlnaHQ7CisJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IHBpeGVsZm9ybWF0OworCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOworCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gR083MDA3X0JVRl9TSVpFOworCQlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07IC8qID8/ICovCisJfQorCisJaWYgKHRyeSkKKwkJcmV0dXJuIDA7CisKKwlnby0+d2lkdGggPSB3aWR0aDsKKwlnby0+aGVpZ2h0ID0gaGVpZ2h0OworCWdvLT5lbmNvZGVyX2hfb2Zmc2V0ID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9oX29mZnNldDsKKwlnby0+ZW5jb2Rlcl92X29mZnNldCA9IGdvLT5ib2FyZF9pbmZvLT5zZW5zb3Jfdl9vZmZzZXQ7CisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJZ28tPm1vZGV0W2ldLmVuYWJsZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IDE2MjQ7ICsraSkKKwkJZ28tPm1vZGV0X21hcFtpXSA9IDA7CisKKwlpZiAoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfU0NBTElORykgeworCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9yZXNvbHV0aW9uIHJlczsKKworCQlyZXMud2lkdGggPSB3aWR0aDsKKwkJaWYgKGhlaWdodCA+IHNlbnNvcl9oZWlnaHQgLyAyKSB7CisJCQlyZXMuaGVpZ2h0ID0gaGVpZ2h0IC8gMjsKKwkJCWdvLT5lbmNvZGVyX3ZfaGFsdmUgPSAwOworCQl9IGVsc2UgeworCQkJcmVzLmhlaWdodCA9IGhlaWdodDsKKwkJCWdvLT5lbmNvZGVyX3ZfaGFsdmUgPSAxOworCQl9CisJCWlmIChnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCQlERUNPREVSX1NFVF9SRVNPTFVUSU9OLCAmcmVzKTsKKwl9IGVsc2UgeworCQlpZiAod2lkdGggPD0gc2Vuc29yX3dpZHRoIC8gNCkgeworCQkJZ28tPmVuY29kZXJfaF9oYWx2ZSA9IDE7CisJCQlnby0+ZW5jb2Rlcl92X2hhbHZlID0gMTsKKwkJCWdvLT5lbmNvZGVyX3N1YnNhbXBsZSA9IDE7CisJCX0gZWxzZSBpZiAod2lkdGggPD0gc2Vuc29yX3dpZHRoIC8gMikgeworCQkJZ28tPmVuY29kZXJfaF9oYWx2ZSA9IDE7CisJCQlnby0+ZW5jb2Rlcl92X2hhbHZlID0gMTsKKwkJCWdvLT5lbmNvZGVyX3N1YnNhbXBsZSA9IDA7CisJCX0gZWxzZSB7CisJCQlnby0+ZW5jb2Rlcl9oX2hhbHZlID0gMDsKKwkJCWdvLT5lbmNvZGVyX3ZfaGFsdmUgPSAwOworCQkJZ28tPmVuY29kZXJfc3Vic2FtcGxlID0gMDsKKwkJfQorCX0KKworCWlmIChmbXQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCkgeworCWNhc2UgVjRMMl9QSVhfRk1UX01QRUc6CisJCWlmIChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzEgfHwKKwkJCQlnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIgfHwKKwkJCQlnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzQpCisJCQlicmVhazsKKwkJZ28tPmZvcm1hdCA9IEdPNzAwN19GT1JNQVRfTVBFRzE7CisJCWdvLT5wYWxpID0gMDsKKwkJZ28tPmFzcGVjdF9yYXRpbyA9IEdPNzAwN19SQVRJT18xXzE7CisJCWdvLT5nb3Bfc2l6ZSA9IGdvLT5zZW5zb3JfZnJhbWVyYXRlIC8gMTAwMDsKKwkJZ28tPmlwYiA9IDA7CisJCWdvLT5jbG9zZWRfZ29wID0gMTsKKwkJZ28tPnJlcGVhdF9zZXFoZWFkID0gMTsKKwkJZ28tPnNlcV9oZWFkZXJfZW5hYmxlID0gMTsKKwkJZ28tPmdvcF9oZWFkZXJfZW5hYmxlID0gMTsKKwkJZ28tPmR2ZF9tb2RlID0gMDsKKwkJYnJlYWs7CisJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seSEgKi8KKwljYXNlIFY0TDJfUElYX0ZNVF9NUEVHNDoKKwkJaWYgKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHNCkKKwkJCWJyZWFrOworCQlnby0+Zm9ybWF0ID0gR083MDA3X0ZPUk1BVF9NUEVHNDsKKwkJZ28tPnBhbGkgPSAweGY1OworCQlnby0+YXNwZWN0X3JhdGlvID0gR083MDA3X1JBVElPXzFfMTsKKwkJZ28tPmdvcF9zaXplID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUgLyAxMDAwOworCQlnby0+aXBiID0gMDsKKwkJZ28tPmNsb3NlZF9nb3AgPSAxOworCQlnby0+cmVwZWF0X3NlcWhlYWQgPSAxOworCQlnby0+c2VxX2hlYWRlcl9lbmFibGUgPSAxOworCQlnby0+Z29wX2hlYWRlcl9lbmFibGUgPSAxOworCQlnby0+ZHZkX21vZGUgPSAwOworCQlicmVhazsKKwljYXNlIFY0TDJfUElYX0ZNVF9NSlBFRzoKKwkJZ28tPmZvcm1hdCA9IEdPNzAwN19GT1JNQVRfTUpQRUc7CisJCWdvLT5wYWxpID0gMDsKKwkJZ28tPmFzcGVjdF9yYXRpbyA9IEdPNzAwN19SQVRJT18xXzE7CisJCWdvLT5nb3Bfc2l6ZSA9IDA7CisJCWdvLT5pcGIgPSAwOworCQlnby0+Y2xvc2VkX2dvcCA9IDA7CisJCWdvLT5yZXBlYXRfc2VxaGVhZCA9IDA7CisJCWdvLT5zZXFfaGVhZGVyX2VuYWJsZSA9IDA7CisJCWdvLT5nb3BfaGVhZGVyX2VuYWJsZSA9IDA7CisJCWdvLT5kdmRfbW9kZSA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbGlwX3RvX21vZGV0X21hcChzdHJ1Y3QgZ283MDA3ICpnbywgaW50IHJlZ2lvbiwKKwkJc3RydWN0IHY0bDJfY2xpcCAqY2xpcF9saXN0KQoreworCXN0cnVjdCB2NGwyX2NsaXAgY2xpcCwgKmNsaXBfcHRyOworCWludCB4LCB5LCBtYm51bTsKKworCS8qIENoZWNrIGlmIGNvb3JkaW5hdGVzIGFyZSBPSyBhbmQgaWYgYW55IG1hY3JvYmxvY2tzIGFyZSBhbHJlYWR5CisJICogdXNlZCBieSBvdGhlciByZWdpb25zIChiZXNpZGVzIDApICovCisJY2xpcF9wdHIgPSBjbGlwX2xpc3Q7CisJd2hpbGUgKGNsaXBfcHRyKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmY2xpcCwgY2xpcF9wdHIsIHNpemVvZihjbGlwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGNsaXAuYy5sZWZ0IDwgMCB8fCAoY2xpcC5jLmxlZnQgJiAweEYpIHx8CisJCQkJY2xpcC5jLndpZHRoIDw9IDAgfHwgKGNsaXAuYy53aWR0aCAmIDB4RikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGNsaXAuYy5sZWZ0ICsgY2xpcC5jLndpZHRoID4gZ28tPndpZHRoKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjbGlwLmMudG9wIDwgMCB8fCAoY2xpcC5jLnRvcCAmIDB4RikgfHwKKwkJCQljbGlwLmMuaGVpZ2h0IDw9IDAgfHwgKGNsaXAuYy5oZWlnaHQgJiAweEYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjbGlwLmMudG9wICsgY2xpcC5jLmhlaWdodCA+IGdvLT5oZWlnaHQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZm9yICh5ID0gMDsgeSA8IGNsaXAuYy5oZWlnaHQ7IHkgKz0gMTYpCisJCQlmb3IgKHggPSAwOyB4IDwgY2xpcC5jLndpZHRoOyB4ICs9IDE2KSB7CisJCQkJbWJudW0gPSAoZ28tPndpZHRoID4+IDQpICoKKwkJCQkJCSgoY2xpcC5jLnRvcCArIHkpID4+IDQpICsKKwkJCQkJKChjbGlwLmMubGVmdCArIHgpID4+IDQpOworCQkJCWlmIChnby0+bW9kZXRfbWFwW21ibnVtXSAhPSAwICYmCisJCQkJCQlnby0+bW9kZXRfbWFwW21ibnVtXSAhPSByZWdpb24pCisJCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CisJCWNsaXBfcHRyID0gY2xpcC5uZXh0OworCX0KKworCS8qIENsZWFyIG9sZCByZWdpb24gbWFjcm9ibG9ja3MgKi8KKwlmb3IgKG1ibnVtID0gMDsgbWJudW0gPCAxNjI0OyArK21ibnVtKQorCQlpZiAoZ28tPm1vZGV0X21hcFttYm51bV0gPT0gcmVnaW9uKQorCQkJZ28tPm1vZGV0X21hcFttYm51bV0gPSAwOworCisJLyogQ2xhaW0gbWFjcm9ibG9ja3MgaW4gdGhpcyBsaXN0ICovCisJY2xpcF9wdHIgPSBjbGlwX2xpc3Q7CisJd2hpbGUgKGNsaXBfcHRyKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmY2xpcCwgY2xpcF9wdHIsIHNpemVvZihjbGlwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJZm9yICh5ID0gMDsgeSA8IGNsaXAuYy5oZWlnaHQ7IHkgKz0gMTYpCisJCQlmb3IgKHggPSAwOyB4IDwgY2xpcC5jLndpZHRoOyB4ICs9IDE2KSB7CisJCQkJbWJudW0gPSAoZ28tPndpZHRoID4+IDQpICoKKwkJCQkJCSgoY2xpcC5jLnRvcCArIHkpID4+IDQpICsKKwkJCQkJKChjbGlwLmMubGVmdCArIHgpID4+IDQpOworCQkJCWdvLT5tb2RldF9tYXBbbWJudW1dID0gcmVnaW9uOworCQkJfQorCQljbGlwX3B0ciA9IGNsaXAubmV4dDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBnbzcwMDcgKmdvID0gZ29maC0+Z287CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfUVVFUllDQVA6CisJeworCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CisKKwkJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKKwkJc3RyY3B5KGNhcC0+ZHJpdmVyLCAiZ283MDA3Iik7CisJCXN0cm5jcHkoY2FwLT5jYXJkLCBnby0+bmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOworCQljYXAtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCA5LCA4KTsKKwkJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKKwkJCQlWNEwyX0NBUF9TVFJFQU1JTkc7IC8qIHwgVjRMMl9DQVBfQVVESU87ICovCisJCWlmIChnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKQorCQkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfVFVORVI7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19FTlVNX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCA9IGFyZzsKKwkJdW5zaWduZWQgaW50IGluZGV4OworCQljaGFyICpkZXNjOworCQl1MzIgcGl4ZWxmb3JtYXQ7CisKKwkJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3dpdGNoIChmbXQtPmluZGV4KSB7CisJCWNhc2UgMDoKKwkJCXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01KUEVHOworCQkJZGVzYyA9ICJNb3Rpb24tSlBFRyI7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKKwkJCWRlc2MgPSAiTVBFRzEvTVBFRzIvTVBFRzQiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpbmRleCA9IGZtdC0+aW5kZXg7CisJCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7CisJCWZtdC0+aW5kZXggPSBpbmRleDsKKwkJZm10LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlmbXQtPmZsYWdzID0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOworCQlzdHJuY3B5KGZtdC0+ZGVzY3JpcHRpb24sIGRlc2MsIHNpemVvZihmbXQtPmRlc2NyaXB0aW9uKSk7CisJCWZtdC0+cGl4ZWxmb3JtYXQgPSBwaXhlbGZvcm1hdDsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfVFJZX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOworCisJCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBzZXRfY2FwdHVyZV9zaXplKGdvLCBmbXQsIDEpOworCX0KKwljYXNlIFZJRElPQ19HX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOworCisJCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7CisJCWZtdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJZm10LT5mbXQucGl4LndpZHRoID0gZ28tPndpZHRoOworCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gZ28tPmhlaWdodDsKKwkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01KUEVHID8KKwkJCVY0TDJfUElYX0ZNVF9NSlBFRyA6IFY0TDJfUElYX0ZNVF9NUEVHOworCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOworCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gR083MDA3X0JVRl9TSVpFOworCQlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07IC8qID8/ICovCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOworCisJCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChnby0+c3RyZWFtaW5nKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIHNldF9jYXB0dXJlX3NpemUoZ28sIGZtdCwgMCk7CisJfQorCWNhc2UgVklESU9DX0dfRkJVRjoKKwljYXNlIFZJRElPQ19TX0ZCVUY6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVklESU9DX1JFUUJVRlM6CisJeworCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxID0gYXJnOworCQl1bnNpZ25lZCBpbnQgY291bnQsIGk7CisKKwkJaWYgKGdvLT5zdHJlYW1pbmcpCisJCQlyZXR1cm4gLUVCVVNZOworCQlpZiAocmVxLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCQkJCXJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlkb3duKCZnb2ZoLT5sb2NrKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlmb3IgKGkgPSAwOyBpIDwgZ29maC0+YnVmX2NvdW50OyArK2kpCisJCQlpZiAoZ29maC0+YnVmc1tpXS5tYXBwZWQgPiAwKQorCQkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CisJCWRvd24oJmdvLT5od19sb2NrKTsKKwkJaWYgKGdvLT5pbl91c2UgPiAwICYmIGdvZmgtPmJ1Zl9jb3VudCA9PSAwKSB7CisJCQl1cCgmZ28tPmh3X2xvY2spOworCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQlpZiAoZ29maC0+YnVmX2NvdW50ID4gMCkKKwkJCWtmcmVlKGdvZmgtPmJ1ZnMpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQljb3VudCA9IHJlcS0+Y291bnQ7CisJCWlmIChjb3VudCA+IDApIHsKKwkJCWlmIChjb3VudCA8IDIpCisJCQkJY291bnQgPSAyOworCQkJaWYgKGNvdW50ID4gMzIpCisJCQkJY291bnQgPSAzMjsKKwkJCWdvZmgtPmJ1ZnMgPSBrbWFsbG9jKGNvdW50ICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgZ283MDA3X2J1ZmZlciksCisJCQkJCUdGUF9LRVJORUwpOworCQkJaWYgKGdvZmgtPmJ1ZnMgPT0gTlVMTCkgeworCQkJCXVwKCZnby0+aHdfbG9jayk7CisJCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJCX0KKwkJCW1lbXNldChnb2ZoLT5idWZzLCAwLAorCQkJCQljb3VudCAqIHNpemVvZihzdHJ1Y3QgZ283MDA3X2J1ZmZlcikpOworCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJCQlnb2ZoLT5idWZzW2ldLmdvID0gZ287CisJCQkJZ29maC0+YnVmc1tpXS5pbmRleCA9IGk7CisJCQkJZ29maC0+YnVmc1tpXS5zdGF0ZSA9IEJVRl9TVEFURV9JRExFOworCQkJCWdvZmgtPmJ1ZnNbaV0ubWFwcGVkID0gMDsKKwkJCX0KKwkJCWdvLT5pbl91c2UgPSAxOworCQl9IGVsc2UgeworCQkJZ28tPmluX3VzZSA9IDA7CisJCX0KKwkJZ29maC0+YnVmX2NvdW50ID0gY291bnQ7CisJCXVwKCZnby0+aHdfbG9jayk7CisJCXVwKCZnb2ZoLT5sb2NrKTsKKwkJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKKwkJcmVxLT5jb3VudCA9IGNvdW50OworCQlyZXEtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCXJlcS0+bWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1FVRVJZQlVGOgorCXsKKwkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7CisJCXVuc2lnbmVkIGludCBpbmRleDsKKworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpbmRleCA9IGJ1Zi0+aW5kZXg7CisJCWRvd24oJmdvZmgtPmxvY2spOworCQlpZiAoaW5kZXggPj0gZ29maC0+YnVmX2NvdW50KQorCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYpKTsKKwkJYnVmLT5pbmRleCA9IGluZGV4OworCQlidWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCXN3aXRjaCAoZ29maC0+YnVmc1tpbmRleF0uc3RhdGUpIHsKKwkJY2FzZSBCVUZfU1RBVEVfUVVFVUVEOgorCQkJYnVmLT5mbGFncyA9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOworCQkJYnJlYWs7CisJCWNhc2UgQlVGX1NUQVRFX0RPTkU6CisJCQlidWYtPmZsYWdzID0gVjRMMl9CVUZfRkxBR19ET05FOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlidWYtPmZsYWdzID0gMDsKKwkJfQorCQlpZiAoZ29maC0+YnVmc1tpbmRleF0ubWFwcGVkKQorCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKKwkJYnVmLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCQlidWYtPm0ub2Zmc2V0ID0gaW5kZXggKiBHTzcwMDdfQlVGX1NJWkU7CisJCWJ1Zi0+bGVuZ3RoID0gR083MDA3X0JVRl9TSVpFOworCQl1cCgmZ29maC0+bG9jayk7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1FCVUY6CisJeworCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKKwkJc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmOworCQlpbnQgcmV0OworCisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCQkJYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkb3duKCZnb2ZoLT5sb2NrKTsKKwkJaWYgKGJ1Zi0+aW5kZXggPCAwIHx8IGJ1Zi0+aW5kZXggPj0gZ29maC0+YnVmX2NvdW50KQorCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJZ29idWYgPSAmZ29maC0+YnVmc1tidWYtPmluZGV4XTsKKwkJaWYgKGdvYnVmLT5tYXBwZWQgPT0gMCkKKwkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJaWYgKGdvYnVmLT5zdGF0ZSAhPSBCVUZfU1RBVEVfSURMRSkKKwkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CisJCS8qIG9mZnNldCB3aWxsIGJlIDAgdW50aWwgd2UgcmVhbGx5IHN1cHBvcnQgVVNFUlBUUiBzdHJlYW1pbmcgKi8KKwkJZ29idWYtPm9mZnNldCA9IGdvYnVmLT51c2VyX2FkZHIgJiB+UEFHRV9NQVNLOworCQlnb2J1Zi0+Ynl0ZXN1c2VkID0gMDsKKwkJZ29idWYtPmZyYW1lX29mZnNldCA9IDA7CisJCWdvYnVmLT5tb2RldF9hY3RpdmUgPSAwOworCQlpZiAoZ29idWYtPm9mZnNldCA+IDApCisJCQlnb2J1Zi0+cGFnZV9jb3VudCA9IEdPNzAwN19CVUZfUEFHRVMgKyAxOworCQllbHNlCisJCQlnb2J1Zi0+cGFnZV9jb3VudCA9IEdPNzAwN19CVUZfUEFHRVM7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sCisJCQkJZ29idWYtPnVzZXJfYWRkciAmIFBBR0VfTUFTSywgZ29idWYtPnBhZ2VfY291bnQsCisJCQkJMSwgMSwgZ29idWYtPnBhZ2VzLCBOVUxMKTsKKwkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJaWYgKHJldCAhPSBnb2J1Zi0+cGFnZV9jb3VudCkgeworCQkJaW50IGk7CisJCQlmb3IgKGkgPSAwOyBpIDwgcmV0OyArK2kpCisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKGdvYnVmLT5wYWdlc1tpXSk7CisJCQlnb2J1Zi0+cGFnZV9jb3VudCA9IDA7CisJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOworCQl9CisJCWdvYnVmLT5zdGF0ZSA9IEJVRl9TVEFURV9RVUVVRUQ7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZnby0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJbGlzdF9hZGRfdGFpbCgmZ29idWYtPnN0cmVhbSwgJmdvLT5zdHJlYW0pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnby0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJdXAoJmdvZmgtPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfRFFCVUY6CisJeworCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKKwkJc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmOworCQl1MzIgZnJhbWVfdHlwZV9mbGFnOworCQlERUZJTkVfV0FJVCh3YWl0KTsKKworCQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkb3duKCZnb2ZoLT5sb2NrKTsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJaWYgKGxpc3RfZW1wdHkoJmdvLT5zdHJlYW0pKQorCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJZ29idWYgPSBsaXN0X2VudHJ5KGdvLT5zdHJlYW0ubmV4dCwKKwkJCQlzdHJ1Y3QgZ283MDA3X2J1ZmZlciwgc3RyZWFtKTsKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwkJaWYgKGdvYnVmLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRE9ORSAmJgorCQkJCSEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKSB7CisJCQlmb3IgKDs7KSB7CisJCQkJcHJlcGFyZV90b193YWl0KCZnby0+ZnJhbWVfd2FpdHEsICZ3YWl0LAorCQkJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQlpZiAoZ29idWYtPnN0YXRlID09IEJVRl9TVEFURV9ET05FKQorCQkJCQlicmVhazsKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc2NoZWR1bGUoKTsKKwkJCX0KKwkJCWZpbmlzaF93YWl0KCZnby0+ZnJhbWVfd2FpdHEsICZ3YWl0KTsKKwkJfQorCQlpZiAoZ29idWYtPnN0YXRlICE9IEJVRl9TVEFURV9ET05FKQorCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdvLT5zcGlubG9jaywgZmxhZ3MpOworCQlkZWFjdGl2YXRlX2J1ZmZlcihnb2J1Zik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdvLT5zcGlubG9jaywgZmxhZ3MpOworCQlmcmFtZV90eXBlX2ZsYWcgPSBnZXRfZnJhbWVfdHlwZV9mbGFnKGdvYnVmLCBnby0+Zm9ybWF0KTsKKwkJZ29idWYtPnN0YXRlID0gQlVGX1NUQVRFX0lETEU7CisJCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7CisJCWJ1Zi0+aW5kZXggPSBnb2J1Zi0+aW5kZXg7CisJCWJ1Zi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJYnVmLT5ieXRlc3VzZWQgPSBnb2J1Zi0+Ynl0ZXN1c2VkOworCQlidWYtPmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQgfCBmcmFtZV90eXBlX2ZsYWc7CisJCWJ1Zi0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCWJ1Zi0+dGltZXN0YW1wID0gZ29idWYtPnRpbWVzdGFtcDsKKwkJYnVmLT5zZXF1ZW5jZSA9IGdvYnVmLT5zZXE7CisJCWJ1Zi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKwkJYnVmLT5tLm9mZnNldCA9IGdvYnVmLT5pbmRleCAqIEdPNzAwN19CVUZfU0laRTsKKwkJYnVmLT5sZW5ndGggPSBHTzcwMDdfQlVGX1NJWkU7CisJCWJ1Zi0+cmVzZXJ2ZWQgPSBnb2J1Zi0+bW9kZXRfYWN0aXZlOworCQl1cCgmZ29maC0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TVFJFQU1PTjoKKwl7CisJCXVuc2lnbmVkIGludCAqdHlwZSA9IGFyZzsKKworCQlpZiAoKnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWRvd24oJmdvZmgtPmxvY2spOworCQlkb3duKCZnby0+aHdfbG9jayk7CisJCWlmICghZ28tPnN0cmVhbWluZykgeworCQkJZ28tPnN0cmVhbWluZyA9IDE7CisJCQlnby0+bmV4dF9zZXEgPSAwOworCQkJZ28tPmFjdGl2ZV9idWYgPSBOVUxMOworCQkJaWYgKGdvNzAwN19zdGFydF9lbmNvZGVyKGdvKSA8IDApCisJCQkJcmV0dmFsID0gLUVJTzsKKwkJCWVsc2UKKwkJCQlyZXR2YWwgPSAwOworCQl9CisJCXVwKCZnby0+aHdfbG9jayk7CisJCXVwKCZnb2ZoLT5sb2NrKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgorCXsKKwkJdW5zaWduZWQgaW50ICp0eXBlID0gYXJnOworCisJCWlmICgqdHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZG93bigmZ29maC0+bG9jayk7CisJCWdvNzAwN19zdHJlYW1vZmYoZ28pOworCQl1cCgmZ29maC0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwgPSBhcmc7CisJCXUzMiBpZDsKKworCQlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQlyZXR1cm4gLUVJTzsKKwkJaWQgPSBjdHJsLT5pZDsKKwkJbWVtc2V0KGN0cmwsIDAsIHNpemVvZigqY3RybCkpOworCQljdHJsLT5pZCA9IGlkOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19RVUVSWUNUUkwsIGFyZyk7CisJCXJldHVybiBjdHJsLT5uYW1lWzBdID09IDAgPyAtRUlOVkFMIDogMDsKKwl9CisJY2FzZSBWSURJT0NfR19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsIHF1ZXJ5OworCisJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCXJldHVybiAtRUlPOworCQltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2YocXVlcnkpKTsKKwkJcXVlcnkuaWQgPSBjdHJsLT5pZDsKKwkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfUVVFUllDVFJMLCAmcXVlcnkpOworCQlpZiAocXVlcnkubmFtZVswXSA9PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX0dfQ1RSTCwgYXJnKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxdWVyeTsKKworCQlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQlyZXR1cm4gLUVJTzsKKwkJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9mKHF1ZXJ5KSk7CisJCXF1ZXJ5LmlkID0gY3RybC0+aWQ7CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX1FVRVJZQ1RSTCwgJnF1ZXJ5KTsKKwkJaWYgKHF1ZXJ5Lm5hbWVbMF0gPT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19TX0NUUkwsIGFyZyk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19HX1BBUk06CisJeworCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtID0gYXJnOworCQlzdHJ1Y3QgdjRsMl9mcmFjdCB0aW1lcGVyZnJhbWUgPSB7CisJCQkubnVtZXJhdG9yID0gMTAwMSAqICBnby0+ZnBzX3NjYWxlLAorCQkJLmRlbm9taW5hdG9yID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUsCisJCX07CisKKwkJaWYgKHBhcm0tPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbXNldChwYXJtLCAwLCBzaXplb2YoKnBhcm0pKTsKKwkJcGFybS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJcGFybS0+cGFybS5jYXB0dXJlLmNhcGFiaWxpdHkgfD0gVjRMMl9DQVBfVElNRVBFUkZSQU1FOworCQlwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lID0gdGltZXBlcmZyYW1lOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19QQVJNOgorCXsKKwkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSA9IGFyZzsKKwkJdW5zaWduZWQgaW50IG4sIGQ7CisKKwkJaWYgKHBhcm0tPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChwYXJtLT5wYXJtLmNhcHR1cmUuY2FwdHVyZW1vZGUgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQluID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUgKgorCQkJcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5udW1lcmF0b3I7CisJCWQgPSAxMDAxICogcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvcjsKKwkJaWYgKG4gIT0gMCAmJiBkICE9IDAgJiYgbiA+IGQpCisJCQlnby0+ZnBzX3NjYWxlID0gKG4gKyBkLzIpIC8gZDsKKwkJZWxzZQorCQkJZ28tPmZwc19zY2FsZSA9IDE7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19FTlVNU1REOgorCXsKKwkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKnN0ZCA9IGFyZzsKKworCQlpZiAoKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpICYmCisJCQkJZ28tPmlucHV0ID09IGdvLT5ib2FyZF9pbmZvLT5udW1faW5wdXRzIC0gMSkgeworCQkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJCXJldHVybiAtRUlPOworCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCQkJVklESU9DX0VOVU1TVEQsIGFyZyk7CisJCQlpZiAoIXN0ZC0+aWQpIC8qIGhhY2sgdG8gaW5kaWNhdGUgRUlOVkFMIGZyb20gdHVuZXIgKi8KKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIGlmIChnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UVikgeworCQkJc3dpdGNoIChzdGQtPmluZGV4KSB7CisJCQljYXNlIDA6CisJCQkJdjRsMl92aWRlb19zdGRfY29uc3RydWN0KHN0ZCwKKwkJCQkJCVY0TDJfU1REX05UU0MsICJOVFNDIik7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJdjRsMl92aWRlb19zdGRfY29uc3RydWN0KHN0ZCwKKwkJCQkJCVY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNLAorCQkJCQkJIlBBTC9TRUNBTSIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChzdGQtPmluZGV4ICE9IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQltZW1zZXQoc3RkLCAwLCBzaXplb2YoKnN0ZCkpOworCQkJc25wcmludGYoc3RkLT5uYW1lLCBzaXplb2Yoc3RkLT5uYW1lKSwgIiVkeCVkLCAlZGZwcyIsCisJCQkJZ28tPmJvYXJkX2luZm8tPnNlbnNvcl93aWR0aCwKKwkJCQlnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2hlaWdodCwKKwkJCQlnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIDEwMDApOworCQkJc3RkLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxMDAxOworCQkJc3RkLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9CisJCQkJCWdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZnJhbWVyYXRlOworCQl9CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19HX1NURDoKKwl7CisJCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7CisKKwkJaWYgKChnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSAmJgorCQkJCWdvLT5pbnB1dCA9PSBnby0+Ym9hcmRfaW5mby0+bnVtX2lucHV0cyAtIDEpIHsKKwkJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQkJCVZJRElPQ19HX1NURCwgYXJnKTsKKwkJfSBlbHNlIGlmIChnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UVikgeworCQkJaWYgKGdvLT5zdGFuZGFyZCA9PSBHTzcwMDdfU1REX05UU0MpCisJCQkJKnN0ZCA9IFY0TDJfU1REX05UU0M7CisJCQllbHNlCisJCQkJKnN0ZCA9IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNOworCQl9IGVsc2UKKwkJCSpzdGQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19TVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqc3RkID0gYXJnOworCisJCWlmIChnby0+c3RyZWFtaW5nKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJaWYgKCEoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfVFYpICYmCisJCQkJKnN0ZCAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICgqc3RkID09IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKChnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSAmJgorCQkJCWdvLT5pbnB1dCA9PSBnby0+Ym9hcmRfaW5mby0+bnVtX2lucHV0cyAtIDEpIHsKKwkJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQkJCVZJRElPQ19TX1NURCwgYXJnKTsKKwkJCWlmICghKnN0ZCkgLyogaGFjayB0byBpbmRpY2F0ZSBFSU5WQUwgZnJvbSB0dW5lciAqLworCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICgqc3RkICYgVjRMMl9TVERfTlRTQykgeworCQkJZ28tPnN0YW5kYXJkID0gR083MDA3X1NURF9OVFNDOworCQkJZ28tPnNlbnNvcl9mcmFtZXJhdGUgPSAzMDAwMDsKKwkJfSBlbHNlIGlmICgqc3RkICYgVjRMMl9TVERfUEFMKSB7CisJCQlnby0+c3RhbmRhcmQgPSBHTzcwMDdfU1REX1BBTDsKKwkJCWdvLT5zZW5zb3JfZnJhbWVyYXRlID0gMjUwMjU7CisJCX0gZWxzZSBpZiAoKnN0ZCAmIFY0TDJfU1REX1NFQ0FNKSB7CisJCQlnby0+c3RhbmRhcmQgPSBHTzcwMDdfU1REX1BBTDsKKwkJCWdvLT5zZW5zb3JfZnJhbWVyYXRlID0gMjUwMjU7CisJCX0gZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCQkgICAgVklESU9DX1NfU1RELCBzdGQpOworCQlzZXRfY2FwdHVyZV9zaXplKGdvLCBOVUxMLCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1FVRVJZU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKKworCQlpZiAoKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpICYmCisJCQkJZ28tPmlucHV0ID09IGdvLT5ib2FyZF9pbmZvLT5udW1faW5wdXRzIC0gMSkgeworCQkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJCXJldHVybiAtRUlPOworCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLAorCQkJCQkJVklESU9DX1FVRVJZU1RELCBhcmcpOworCQl9IGVsc2UgaWYgKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1RWKQorCQkJKnN0ZCA9IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9TRUNBTTsKKwkJZWxzZQorCQkJKnN0ZCA9IDA7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19FTlVNSU5QVVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wID0gYXJnOworCQlpbnQgaW5kZXg7CisKKwkJaWYgKGlucC0+aW5kZXggPj0gZ28tPmJvYXJkX2luZm8tPm51bV9pbnB1dHMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaW5kZXggPSBpbnAtPmluZGV4OworCQltZW1zZXQoaW5wLCAwLCBzaXplb2YoKmlucCkpOworCQlpbnAtPmluZGV4ID0gaW5kZXg7CisJCXN0cm5jcHkoaW5wLT5uYW1lLCBnby0+Ym9hcmRfaW5mby0+aW5wdXRzW2luZGV4XS5uYW1lLAorCQkJCXNpemVvZihpbnAtPm5hbWUpKTsKKwkJLyogSWYgdGhpcyBib2FyZCBoYXMgYSB0dW5lciwgaXQgd2lsbCBiZSB0aGUgbGFzdCBpbnB1dCAqLworCQlpZiAoKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpICYmCisJCQkJaW5kZXggPT0gZ28tPmJvYXJkX2luZm8tPm51bV9pbnB1dHMgLSAxKQorCQkJaW5wLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX1RVTkVSOworCQllbHNlCisJCQlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCQlpbnAtPmF1ZGlvc2V0ID0gMDsKKwkJaW5wLT50dW5lciA9IDA7CisJCWlmIChnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UVikKKwkJCWlucC0+c3RkID0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTCB8CisJCQkJCQkJVjRMMl9TVERfU0VDQU07CisJCWVsc2UKKwkJCWlucC0+c3RkID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0dfSU5QVVQ6CisJeworCQlpbnQgKmlucHV0ID0gYXJnOworCisJCSppbnB1dCA9IGdvLT5pbnB1dDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfSU5QVVQ6CisJeworCQlpbnQgKmlucHV0ID0gYXJnOworCisJCWlmICgqaW5wdXQgPj0gZ28tPmJvYXJkX2luZm8tPm51bV9pbnB1dHMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGdvLT5zdHJlYW1pbmcpCisJCQlyZXR1cm4gLUVCVVNZOworCQlnby0+aW5wdXQgPSAqaW5wdXQ7CisJCWlmIChnby0+aTJjX2FkYXB0ZXJfb25saW5lKSB7CisJCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19TX0lOUFVULAorCQkJCSZnby0+Ym9hcmRfaW5mby0+aW5wdXRzWyppbnB1dF0udmlkZW9faW5wdXQpOworCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfU19BVURJTywKKwkJCQkmZ28tPmJvYXJkX2luZm8tPmlucHV0c1sqaW5wdXRdLmF1ZGlvX2lucHV0KTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfR19UVU5FUjoKKwl7CisJCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOworCisJCWlmICghKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh0LT5pbmRleCAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCXJldHVybiAtRUlPOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19HX1RVTkVSLCBhcmcpOworCQl0LT5pbmRleCA9IDA7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX1RVTkVSOgorCXsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7CisKKwkJaWYgKCEoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHQtPmluZGV4ICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJcmV0dXJuIC1FSU87CisJCXN3aXRjaCAoZ28tPmJvYXJkX2lkKSB7CisJCWNhc2UgR083MDA3X0JPQVJESURfUFhfVFY0MDJVX05BOgorCQljYXNlIEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9KUDoKKwkJCS8qIE5vIHNlbGVjdGFibGUgb3B0aW9ucyBjdXJyZW50bHkgKi8KKwkJCWlmICh0LT5hdWRtb2RlICE9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19TX1RVTkVSLCBhcmcpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CisJeworCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJaWYgKCEoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJcmV0dXJuIC1FSU87CisJCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKKwkJZi0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19HX0ZSRVFVRU5DWSwgYXJnKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgorCXsKKwkJaWYgKCEoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJcmV0dXJuIC1FSU87CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX1NfRlJFUVVFTkNZLCBhcmcpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfQ1JPUENBUDoKKwl7CisJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3BjYXAgPSBhcmc7CisKKwkJaWYgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbXNldChjcm9wY2FwLCAwLCBzaXplb2YoKmNyb3BjYXApKTsKKwkJY3JvcGNhcC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJLyogVGhlc2Ugc3BlY2lmeSB0aGUgcmF3IGlucHV0IG9mIHRoZSBzZW5zb3IgKi8KKwkJc3dpdGNoIChnby0+c3RhbmRhcmQpIHsKKwkJY2FzZSBHTzcwMDdfU1REX05UU0M6CisJCQljcm9wY2FwLT5ib3VuZHMudG9wID0gMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy53aWR0aCA9IDcyMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy5oZWlnaHQgPSA0ODA7CisJCQljcm9wY2FwLT5kZWZyZWN0LnRvcCA9IDA7CisJCQljcm9wY2FwLT5kZWZyZWN0LmxlZnQgPSAwOworCQkJY3JvcGNhcC0+ZGVmcmVjdC53aWR0aCA9IDcyMDsKKwkJCWNyb3BjYXAtPmRlZnJlY3QuaGVpZ2h0ID0gNDgwOworCQkJYnJlYWs7CisJCWNhc2UgR083MDA3X1NURF9QQUw6CisJCQljcm9wY2FwLT5ib3VuZHMudG9wID0gMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy53aWR0aCA9IDcyMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy5oZWlnaHQgPSA1NzY7CisJCQljcm9wY2FwLT5kZWZyZWN0LnRvcCA9IDA7CisJCQljcm9wY2FwLT5kZWZyZWN0LmxlZnQgPSAwOworCQkJY3JvcGNhcC0+ZGVmcmVjdC53aWR0aCA9IDcyMDsKKwkJCWNyb3BjYXAtPmRlZnJlY3QuaGVpZ2h0ID0gNTc2OworCQkJYnJlYWs7CisJCWNhc2UgR083MDA3X1NURF9PVEhFUjoKKwkJCWNyb3BjYXAtPmJvdW5kcy50b3AgPSAwOworCQkJY3JvcGNhcC0+Ym91bmRzLmxlZnQgPSAwOworCQkJY3JvcGNhcC0+Ym91bmRzLndpZHRoID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl93aWR0aDsKKwkJCWNyb3BjYXAtPmJvdW5kcy5oZWlnaHQgPSBnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2hlaWdodDsKKwkJCWNyb3BjYXAtPmRlZnJlY3QudG9wID0gMDsKKwkJCWNyb3BjYXAtPmRlZnJlY3QubGVmdCA9IDA7CisJCQljcm9wY2FwLT5kZWZyZWN0LndpZHRoID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl93aWR0aDsKKwkJCWNyb3BjYXAtPmRlZnJlY3QuaGVpZ2h0ID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9oZWlnaHQ7CisJCQlicmVhazsKKwkJfQorCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19HX0NST1A6CisJeworCQlzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wID0gYXJnOworCisJCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQltZW1zZXQoY3JvcCwgMCwgc2l6ZW9mKCpjcm9wKSk7CisJCWNyb3AtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCS8qIFRoZXNlIHNwZWNpZnkgdGhlIHJhdyBpbnB1dCBvZiB0aGUgc2Vuc29yICovCisJCXN3aXRjaCAoZ28tPnN0YW5kYXJkKSB7CisJCWNhc2UgR083MDA3X1NURF9OVFNDOgorCQkJY3JvcC0+Yy50b3AgPSAwOworCQkJY3JvcC0+Yy5sZWZ0ID0gMDsKKwkJCWNyb3AtPmMud2lkdGggPSA3MjA7CisJCQljcm9wLT5jLmhlaWdodCA9IDQ4MDsKKwkJCWJyZWFrOworCQljYXNlIEdPNzAwN19TVERfUEFMOgorCQkJY3JvcC0+Yy50b3AgPSAwOworCQkJY3JvcC0+Yy5sZWZ0ID0gMDsKKwkJCWNyb3AtPmMud2lkdGggPSA3MjA7CisJCQljcm9wLT5jLmhlaWdodCA9IDU3NjsKKwkJCWJyZWFrOworCQljYXNlIEdPNzAwN19TVERfT1RIRVI6CisJCQljcm9wLT5jLnRvcCA9IDA7CisJCQljcm9wLT5jLmxlZnQgPSAwOworCQkJY3JvcC0+Yy53aWR0aCA9IGdvLT5ib2FyZF9pbmZvLT5zZW5zb3Jfd2lkdGg7CisJCQljcm9wLT5jLmhlaWdodCA9IGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfaGVpZ2h0OworCQkJYnJlYWs7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19DUk9QOgorCXsKKwkJc3RydWN0IHY0bDJfY3JvcCAqY3JvcCA9IGFyZzsKKworCQlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0dfSlBFR0NPTVA6CisJeworCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKnBhcmFtcyA9IGFyZzsKKworCQltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YoKnBhcmFtcykpOworCQlwYXJhbXMtPnF1YWxpdHkgPSA1MDsgLyogPz8gKi8KKwkJcGFyYW1zLT5qcGVnX21hcmtlcnMgPSBWNEwyX0pQRUdfTUFSS0VSX0RIVCB8CisJCQkJCVY0TDJfSlBFR19NQVJLRVJfRFFUOworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX0pQRUdDT01QOgorCXsKKwkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwYXJhbXMgPSBhcmc7CisKKwkJaWYgKHBhcmFtcy0+cXVhbGl0eSAhPSA1MCB8fAorCQkJCXBhcmFtcy0+anBlZ19tYXJrZXJzICE9IChWNEwyX0pQRUdfTUFSS0VSX0RIVCB8CisJCQkJCQkJVjRMMl9KUEVHX01BUktFUl9EUVQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOworCX0KKwkvKiBUZW1wb3JhcnkgaW9jdGxzIGZvciBjb250cm9sbGluZyBjb21wcmVzc2lvbiBjaGFyYWN0ZXJpc3RpY3MgKi8KKwljYXNlIEdPNzAwN0lPQ19TX0JJVFJBVEU6CisJeworCQlpbnQgKmJpdHJhdGUgPSBhcmc7CisKKwkJaWYgKGdvLT5zdHJlYW1pbmcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogVXBwZXIgYm91bmQgaXMga2luZCBvZiBhcmJpdHJhcnkgaGVyZSAqLworCQlpZiAoKmJpdHJhdGUgPCA2NDAwMCB8fCAqYml0cmF0ZSA+IDEwMDAwMDAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvLT5iaXRyYXRlID0gKmJpdHJhdGU7CisJCXJldHVybiAwOworCX0KKwljYXNlIEdPNzAwN0lPQ19HX0JJVFJBVEU6CisJeworCQlpbnQgKmJpdHJhdGUgPSBhcmc7CisKKwkJKmJpdHJhdGUgPSBnby0+Yml0cmF0ZTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgR083MDA3SU9DX1NfQ09NUF9QQVJBTVM6CisJeworCQlzdHJ1Y3QgZ283MDA3X2NvbXBfcGFyYW1zICpjb21wID0gYXJnOworCisJCWlmIChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTUpQRUcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGNvbXAtPmdvcF9zaXplID4gMCkKKwkJCWdvLT5nb3Bfc2l6ZSA9IGNvbXAtPmdvcF9zaXplOworCQllbHNlCisJCQlnby0+Z29wX3NpemUgPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIDEwMDA7CisJCWlmIChnby0+Z29wX3NpemUgIT0gMTUpCisJCQlnby0+ZHZkX21vZGUgPSAwOworCQkvKmdvLT5pcGIgPSBjb21wLT5tYXhfYl9mcmFtZXMgPiAwOyovIC8qIGNvbXBsZXRlbHkgdW50ZXN0ZWQgKi8KKwkJaWYgKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1RWKSB7CisJCQlzd2l0Y2ggKGNvbXAtPmFzcGVjdF9yYXRpbykgeworCQkJY2FzZSBHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19OVFNDOgorCQkJY2FzZSBHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19QQUw6CisJCQkJZ28tPmFzcGVjdF9yYXRpbyA9IEdPNzAwN19SQVRJT180XzM7CisJCQkJYnJlYWs7CisJCQljYXNlIEdPNzAwN19BU1BFQ1RfUkFUSU9fMTZfOV9OVFNDOgorCQkJY2FzZSBHTzcwMDdfQVNQRUNUX1JBVElPXzE2XzlfUEFMOgorCQkJCWdvLT5hc3BlY3RfcmF0aW8gPSBHTzcwMDdfUkFUSU9fMTZfOTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZ28tPmFzcGVjdF9yYXRpbyA9IEdPNzAwN19SQVRJT18xXzE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGNvbXAtPmZsYWdzICYgR083MDA3X0NPTVBfT01JVF9TRVFfSEVBREVSKSB7CisJCQlnby0+ZHZkX21vZGUgPSAwOworCQkJZ28tPnNlcV9oZWFkZXJfZW5hYmxlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWdvLT5zZXFfaGVhZGVyX2VuYWJsZSA9IDE7CisJCX0KKwkJLyogZmFsbC10aHJvdWdoICovCisJfQorCWNhc2UgR083MDA3SU9DX0dfQ09NUF9QQVJBTVM6CisJeworCQlzdHJ1Y3QgZ283MDA3X2NvbXBfcGFyYW1zICpjb21wID0gYXJnOworCisJCWlmIChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTUpQRUcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbWVtc2V0KGNvbXAsIDAsIHNpemVvZigqY29tcCkpOworCQljb21wLT5nb3Bfc2l6ZSA9IGdvLT5nb3Bfc2l6ZTsKKwkJY29tcC0+bWF4X2JfZnJhbWVzID0gZ28tPmlwYiA/IDIgOiAwOworCQlzd2l0Y2ggKGdvLT5hc3BlY3RfcmF0aW8pIHsKKwkJY2FzZSBHTzcwMDdfUkFUSU9fNF8zOgorCQkJaWYgKGdvLT5zdGFuZGFyZCA9PSBHTzcwMDdfU1REX05UU0MpCisJCQkJY29tcC0+YXNwZWN0X3JhdGlvID0KKwkJCQkJR083MDA3X0FTUEVDVF9SQVRJT180XzNfTlRTQzsKKwkJCWVsc2UKKwkJCQljb21wLT5hc3BlY3RfcmF0aW8gPQorCQkJCQlHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19QQUw7CisJCQlicmVhazsKKwkJY2FzZSBHTzcwMDdfUkFUSU9fMTZfOToKKwkJCWlmIChnby0+c3RhbmRhcmQgPT0gR083MDA3X1NURF9OVFNDKQorCQkJCWNvbXAtPmFzcGVjdF9yYXRpbyA9CisJCQkJCUdPNzAwN19BU1BFQ1RfUkFUSU9fMTZfOV9OVFNDOworCQkJZWxzZQorCQkJCWNvbXAtPmFzcGVjdF9yYXRpbyA9CisJCQkJCUdPNzAwN19BU1BFQ1RfUkFUSU9fMTZfOV9QQUw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbXAtPmFzcGVjdF9yYXRpbyA9IEdPNzAwN19BU1BFQ1RfUkFUSU9fMV8xOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGdvLT5jbG9zZWRfZ29wKQorCQkJY29tcC0+ZmxhZ3MgfD0gR083MDA3X0NPTVBfQ0xPU0VEX0dPUDsKKwkJaWYgKCFnby0+c2VxX2hlYWRlcl9lbmFibGUpCisJCQljb21wLT5mbGFncyB8PSBHTzcwMDdfQ09NUF9PTUlUX1NFUV9IRUFERVI7CisJCXJldHVybiAwOworCX0KKwljYXNlIEdPNzAwN0lPQ19TX01QRUdfUEFSQU1TOgorCXsKKwkJc3RydWN0IGdvNzAwN19tcGVnX3BhcmFtcyAqbXBlZyA9IGFyZzsKKworCQlpZiAoZ28tPmZvcm1hdCAhPSBHTzcwMDdfRk9STUFUX01QRUcxICYmCisJCQkJZ28tPmZvcm1hdCAhPSBHTzcwMDdfRk9STUFUX01QRUcyICYmCisJCQkJZ28tPmZvcm1hdCAhPSBHTzcwMDdfRk9STUFUX01QRUc0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKG1wZWctPmZsYWdzICYgR083MDA3X01QRUdfRk9SQ0VfRFZEX01PREUpIHsKKwkJCWdvLT5mb3JtYXQgPSBHTzcwMDdfRk9STUFUX01QRUcyOworCQkJZ28tPmJpdHJhdGUgPSA5ODAwMDAwOworCQkJZ28tPmdvcF9zaXplID0gMTU7CisJCQlnby0+cGFsaSA9IDB4NDg7CisJCQlnby0+Y2xvc2VkX2dvcCA9IDE7CisJCQlnby0+cmVwZWF0X3NlcWhlYWQgPSAwOworCQkJZ28tPnNlcV9oZWFkZXJfZW5hYmxlID0gMTsKKwkJCWdvLT5nb3BfaGVhZGVyX2VuYWJsZSA9IDE7CisJCQlnby0+ZHZkX21vZGUgPSAxOworCQl9IGVsc2UgeworCQkJc3dpdGNoIChtcGVnLT5tcGVnX3ZpZGVvX3N0YW5kYXJkKSB7CisJCQljYXNlIEdPNzAwN19NUEVHX1ZJREVPX01QRUcxOgorCQkJCWdvLT5mb3JtYXQgPSBHTzcwMDdfRk9STUFUX01QRUcxOworCQkJCWdvLT5wYWxpID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgR083MDA3X01QRUdfVklERU9fTVBFRzI6CisJCQkJZ28tPmZvcm1hdCA9IEdPNzAwN19GT1JNQVRfTVBFRzI7CisJCQkJaWYgKG1wZWctPnBhbGkgPj4gMjQgPT0gMikKKwkJCQkJZ28tPnBhbGkgPSBtcGVnLT5wYWxpICYgMHhmZjsKKwkJCQllbHNlCisJCQkJCWdvLT5wYWxpID0gMHg0ODsKKwkJCQlicmVhazsKKwkJCWNhc2UgR083MDA3X01QRUdfVklERU9fTVBFRzQ6CisJCQkJZ28tPmZvcm1hdCA9IEdPNzAwN19GT1JNQVRfTVBFRzQ7CisJCQkJaWYgKG1wZWctPnBhbGkgPj4gMjQgPT0gNCkKKwkJCQkJZ28tPnBhbGkgPSBtcGVnLT5wYWxpICYgMHhmZjsKKwkJCQllbHNlCisJCQkJCWdvLT5wYWxpID0gMHhmNTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlnby0+Z29wX2hlYWRlcl9lbmFibGUgPQorCQkJCW1wZWctPmZsYWdzICYgR083MDA3X01QRUdfT01JVF9HT1BfSEVBREVSCisJCQkJPyAwIDogMTsKKwkJCWlmIChtcGVnLT5mbGFncyAmIEdPNzAwN19NUEVHX1JFUEVBVF9TRVFIRUFERVIpCisJCQkJZ28tPnJlcGVhdF9zZXFoZWFkID0gMTsKKwkJCWVsc2UKKwkJCQlnby0+cmVwZWF0X3NlcWhlYWQgPSAwOworCQkJZ28tPmR2ZF9tb2RlID0gMDsKKwkJfQorCQkvKiBmYWxsLXRocm91Z2ggKi8KKwl9CisJY2FzZSBHTzcwMDdJT0NfR19NUEVHX1BBUkFNUzoKKwl7CisJCXN0cnVjdCBnbzcwMDdfbXBlZ19wYXJhbXMgKm1wZWcgPSBhcmc7CisKKwkJbWVtc2V0KG1wZWcsIDAsIHNpemVvZigqbXBlZykpOworCQlzd2l0Y2ggKGdvLT5mb3JtYXQpIHsKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcxOgorCQkJbXBlZy0+bXBlZ192aWRlb19zdGFuZGFyZCA9IEdPNzAwN19NUEVHX1ZJREVPX01QRUcxOworCQkJbXBlZy0+cGFsaSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcyOgorCQkJbXBlZy0+bXBlZ192aWRlb19zdGFuZGFyZCA9IEdPNzAwN19NUEVHX1ZJREVPX01QRUcyOworCQkJbXBlZy0+cGFsaSA9IEdPNzAwN19NUEVHX1BST0ZJTEUoMiwgZ28tPnBhbGkpOworCQkJYnJlYWs7CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHNDoKKwkJCW1wZWctPm1wZWdfdmlkZW9fc3RhbmRhcmQgPSBHTzcwMDdfTVBFR19WSURFT19NUEVHNDsKKwkJCW1wZWctPnBhbGkgPSBHTzcwMDdfTVBFR19QUk9GSUxFKDQsIGdvLT5wYWxpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKCFnby0+Z29wX2hlYWRlcl9lbmFibGUpCisJCQltcGVnLT5mbGFncyB8PSBHTzcwMDdfTVBFR19PTUlUX0dPUF9IRUFERVI7CisJCWlmIChnby0+cmVwZWF0X3NlcWhlYWQpCisJCQltcGVnLT5mbGFncyB8PSBHTzcwMDdfTVBFR19SRVBFQVRfU0VRSEVBREVSOworCQlpZiAoZ28tPmR2ZF9tb2RlKQorCQkJbXBlZy0+ZmxhZ3MgfD0gR083MDA3X01QRUdfRk9SQ0VfRFZEX01PREU7CisJCXJldHVybiAwOworCX0KKwljYXNlIEdPNzAwN0lPQ19TX01EX1BBUkFNUzoKKwl7CisJCXN0cnVjdCBnbzcwMDdfbWRfcGFyYW1zICptZHAgPSBhcmc7CisKKwkJaWYgKG1kcC0+cmVnaW9uID4gMykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAobWRwLT50cmlnZ2VyID4gMCkgeworCQkJZ28tPm1vZGV0W21kcC0+cmVnaW9uXS5waXhlbF90aHJlc2hvbGQgPQorCQkJCQltZHAtPnBpeGVsX3RocmVzaG9sZCA+PiAxOworCQkJZ28tPm1vZGV0W21kcC0+cmVnaW9uXS5tb3Rpb25fdGhyZXNob2xkID0KKwkJCQkJbWRwLT5tb3Rpb25fdGhyZXNob2xkID4+IDE7CisJCQlnby0+bW9kZXRbbWRwLT5yZWdpb25dLm1iX3RocmVzaG9sZCA9CisJCQkJCW1kcC0+dHJpZ2dlciA+PiAxOworCQkJZ28tPm1vZGV0W21kcC0+cmVnaW9uXS5lbmFibGUgPSAxOworCQl9IGVsc2UKKwkJCWdvLT5tb2RldFttZHAtPnJlZ2lvbl0uZW5hYmxlID0gMDsKKwkJLyogZmFsbC10aHJvdWdoICovCisJfQorCWNhc2UgR083MDA3SU9DX0dfTURfUEFSQU1TOgorCXsKKwkJc3RydWN0IGdvNzAwN19tZF9wYXJhbXMgKm1kcCA9IGFyZzsKKwkJaW50IHJlZ2lvbiA9IG1kcC0+cmVnaW9uOworCisJCWlmIChtZHAtPnJlZ2lvbiA+IDMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbWVtc2V0KG1kcCwgMCwgc2l6ZW9mKHN0cnVjdCBnbzcwMDdfbWRfcGFyYW1zKSk7CisJCW1kcC0+cmVnaW9uID0gcmVnaW9uOworCQlpZiAoIWdvLT5tb2RldFtyZWdpb25dLmVuYWJsZSkKKwkJCXJldHVybiAwOworCQltZHAtPnBpeGVsX3RocmVzaG9sZCA9CisJCQkoZ28tPm1vZGV0W3JlZ2lvbl0ucGl4ZWxfdGhyZXNob2xkIDw8IDEpICsgMTsKKwkJbWRwLT5tb3Rpb25fdGhyZXNob2xkID0KKwkJCShnby0+bW9kZXRbcmVnaW9uXS5tb3Rpb25fdGhyZXNob2xkIDw8IDEpICsgMTsKKwkJbWRwLT50cmlnZ2VyID0KKwkJCShnby0+bW9kZXRbcmVnaW9uXS5tYl90aHJlc2hvbGQgPDwgMSkgKyAxOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBHTzcwMDdJT0NfU19NRF9SRUdJT046CisJeworCQlzdHJ1Y3QgZ283MDA3X21kX3JlZ2lvbiAqcmVnaW9uID0gYXJnOworCisJCWlmIChyZWdpb24tPnJlZ2lvbiA8IDEgfHwgcmVnaW9uLT5yZWdpb24gPiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBjbGlwX3RvX21vZGV0X21hcChnbywgcmVnaW9uLT5yZWdpb24sIHJlZ2lvbi0+Y2xpcHMpOworCX0KKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3OiB1bnN1cHBvcnRlZCBpb2N0bCAlZFxuIiwgY21kKTsKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9CisJcmV0dXJuIDA7CisKK3VubG9ja19hbmRfcmV0dXJuOgorCXVwKCZnb2ZoLT5sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGdvNzAwN19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGdvNzAwN19maWxlICpnb2ZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGdvZmgtPmdvLT5zdGF0dXMgIT0gU1RBVFVTX09OTElORSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBnbzcwMDdfZG9faW9jdGwpOworfQorCitzdGF0aWMgc3NpemVfdCBnbzcwMDdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmRhdGEsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBnbzcwMDdfdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqZ29idWYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKworCSsrZ29idWYtPm1hcHBlZDsKK30KKworc3RhdGljIHZvaWQgZ283MDA3X3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBnbzcwMDdfYnVmZmVyICpnb2J1ZiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoLS1nb2J1Zi0+bWFwcGVkID09IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdvYnVmLT5nby0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJZGVhY3RpdmF0ZV9idWZmZXIoZ29idWYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnb2J1Zi0+Z28tPnNwaW5sb2NrLCBmbGFncyk7CisJfQorfQorCisvKiBDb3BpZWQgZnJvbSB2aWRlb2J1Zi1kbWEtc2cuYyAqLworc3RhdGljIGludCBnbzcwMDdfdm1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCisJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX1VTRVIgfCBfX0dGUF9ETUEzMik7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gVk1fRkFVTFRfT09NOworCWNsZWFyX3VzZXJfcGFnZShwYWdlX2FkZHJlc3MocGFnZSksICh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzLAorCQkJcGFnZSk7CisJdm1mLT5wYWdlID0gcGFnZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnbzcwMDdfdm1fb3BzID0geworCS5vcGVuCT0gZ283MDA3X3ZtX29wZW4sCisJLmNsb3NlCT0gZ283MDA3X3ZtX2Nsb3NlLAorCS5mYXVsdAk9IGdvNzAwN192bV9mYXVsdCwKK307CisKK3N0YXRpYyBpbnQgZ283MDA3X21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisKKwlpZiAoZ29maC0+Z28tPnN0YXR1cyAhPSBTVEFUVVNfT05MSU5FKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIG9ubHkgc3VwcG9ydCBWTV9TSEFSRUQgbWFwcGluZyAqLworCWlmICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQgIT0gR083MDA3X0JVRl9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogbXVzdCBtYXAgZXhhY3RseSBvbmUgZnVsbCBidWZmZXIgKi8KKwlkb3duKCZnb2ZoLT5sb2NrKTsKKwlpbmRleCA9IHZtYS0+dm1fcGdvZmYgLyBHTzcwMDdfQlVGX1BBR0VTOworCWlmIChpbmRleCA+PSBnb2ZoLT5idWZfY291bnQpIHsKKwkJdXAoJmdvZmgtPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsgLyogdHJ5aW5nIHRvIG1hcCBiZXlvbmQgcmVxdWVzdGVkIGJ1ZmZlcnMgKi8KKwl9CisJaWYgKGluZGV4ICogR083MDA3X0JVRl9QQUdFUyAhPSB2bWEtPnZtX3Bnb2ZmKSB7CisJCXVwKCZnb2ZoLT5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIG9mZnNldCBpcyBub3QgYWxpZ25lZCBvbiBidWZmZXIgYm91bmRhcnkgKi8KKwl9CisJaWYgKGdvZmgtPmJ1ZnNbaW5kZXhdLm1hcHBlZCA+IDApIHsKKwkJdXAoJmdvZmgtPmxvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlnb2ZoLT5idWZzW2luZGV4XS5tYXBwZWQgPSAxOworCWdvZmgtPmJ1ZnNbaW5kZXhdLnVzZXJfYWRkciA9IHZtYS0+dm1fc3RhcnQ7CisJdm1hLT52bV9vcHMgPSAmZ283MDA3X3ZtX29wczsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRFWFBBTkQ7CisJdm1hLT52bV9mbGFncyAmPSB+Vk1fSU87CisJdm1hLT52bV9wcml2YXRlX2RhdGEgPSAmZ29maC0+YnVmc1tpbmRleF07CisJdXAoJmdvZmgtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdvNzAwN19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqZ29idWY7CisKKwlpZiAobGlzdF9lbXB0eSgmZ29maC0+Z28tPnN0cmVhbSkpCisJCXJldHVybiBQT0xMRVJSOworCWdvYnVmID0gbGlzdF9lbnRyeShnb2ZoLT5nby0+c3RyZWFtLm5leHQsIHN0cnVjdCBnbzcwMDdfYnVmZmVyLCBzdHJlYW0pOworCXBvbGxfd2FpdChmaWxlLCAmZ29maC0+Z28tPmZyYW1lX3dhaXRxLCB3YWl0KTsKKwlpZiAoZ29idWYtPnN0YXRlID09IEJVRl9TVEFURV9ET05FKQorCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ283MDA3X3ZmbF9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZmZCk7CisKKwl2aWRlb19kZXZpY2VfcmVsZWFzZSh2ZmQpOworCWlmICgtLWdvLT5yZWZfY291bnQgPT0gMCkKKwkJa2ZyZWUoZ28pOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnbzcwMDdfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZ283MDA3X29wZW4sCisJLnJlbGVhc2UJPSBnbzcwMDdfcmVsZWFzZSwKKwkuaW9jdGwJCT0gZ283MDA3X2lvY3RsLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS5yZWFkCQk9IGdvNzAwN19yZWFkLAorCS5tbWFwCQk9IGdvNzAwN19tbWFwLAorCS5wb2xsCQk9IGdvNzAwN19wb2xsLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgZ283MDA3X3RlbXBsYXRlID0geworCS5uYW1lCQk9ICJnbzcwMDciLAorCS52ZmxfdHlwZQk9IFZJRF9UWVBFX0NBUFRVUkUsCisJLmZvcHMJCT0gJmdvNzAwN19mb3BzLAorCS5taW5vcgkJPSAtMSwKKwkucmVsZWFzZQk9IGdvNzAwN192ZmxfcmVsZWFzZSwKK307CisKK2ludCBnbzcwMDdfdjRsMl9pbml0KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCWludCBydjsKKworCWdvLT52aWRlb19kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoZ28tPnZpZGVvX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoZ28tPnZpZGVvX2RldiwgJmdvNzAwN190ZW1wbGF0ZSwgc2l6ZW9mKGdvNzAwN190ZW1wbGF0ZSkpOworCWdvLT52aWRlb19kZXYtPnBhcmVudCA9IGdvLT5kZXY7CisJcnYgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZ28tPnZpZGVvX2RldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOworCWlmIChydiA8IDApIHsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZ28tPnZpZGVvX2Rldik7CisJCWdvLT52aWRlb19kZXYgPSBOVUxMOworCQlyZXR1cm4gcnY7CisJfQorCXZpZGVvX3NldF9kcnZkYXRhKGdvLT52aWRlb19kZXYsIGdvKTsKKwkrK2dvLT5yZWZfY291bnQ7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBnbzcwMDdfdjRsMl9yZW1vdmUoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRvd24oJmdvLT5od19sb2NrKTsKKwlpZiAoZ28tPnN0cmVhbWluZykgeworCQlnby0+c3RyZWFtaW5nID0gMDsKKwkJZ283MDA3X3N0cmVhbV9zdG9wKGdvKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdvLT5zcGlubG9jaywgZmxhZ3MpOworCQlhYm9ydF9xdWV1ZWQoZ28pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnby0+c3BpbmxvY2ssIGZsYWdzKTsKKwl9CisJdXAoJmdvLT5od19sb2NrKTsKKwlpZiAoZ28tPnZpZGVvX2RldikKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZ28tPnZpZGVvX2Rldik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy5oIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzk5YzkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDcuaApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgdGhlIGFzc29jaWF0ZWQgUkVBRE1FIGRvY3VtZW50YXRpb24gZmlsZSAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzby4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworLyogREVQUkVDQVRFRCAtLSB1c2UgVjRMMl9QSVhfRk1UX01QRUcgYW5kIHRoZW4gY2FsbCBHTzcwMDdJT0NfU19NUEVHX1BBUkFNUworICogdG8gc2VsZWN0IGJldHdlZW4gTVBFRzEsIE1QRUcyLCBhbmQgTVBFRzQgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX01QRUc0ICAgICB2NGwyX2ZvdXJjYygnTScsICdQJywgJ0cnLCAnNCcpIC8qIE1QRUc0ICovCisKKy8qIFRoZXNlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIGJldHRlciBpbnRlcmZhY2UKKyAqIHNvb24sIHNvIGRvbid0IGdldCB0b28gYXR0YWNoZWQgdG8gdGhlbSAqLworI2RlZmluZQlHTzcwMDdJT0NfU19CSVRSQVRFCV9JT1coJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgMCwgaW50KQorI2RlZmluZQlHTzcwMDdJT0NfR19CSVRSQVRFCV9JT1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgMSwgaW50KQorCitlbnVtIGdvNzAwN19hc3BlY3RfcmF0aW8geworCUdPNzAwN19BU1BFQ1RfUkFUSU9fMV8xID0gMCwKKwlHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19OVFNDID0gMSwKKwlHTzcwMDdfQVNQRUNUX1JBVElPXzRfM19QQUwgPSAyLAorCUdPNzAwN19BU1BFQ1RfUkFUSU9fMTZfOV9OVFNDID0gMywKKwlHTzcwMDdfQVNQRUNUX1JBVElPXzE2XzlfUEFMID0gNCwKK307CisKKy8qIFVzZWQgdG8gc2V0IGdlbmVyaWMgY29tcHJlc3Npb24gcGFyYW1ldGVycyAqLworc3RydWN0IGdvNzAwN19jb21wX3BhcmFtcyB7CisJX191MzIgZ29wX3NpemU7CisJX191MzIgbWF4X2JfZnJhbWVzOworCWVudW0gZ283MDA3X2FzcGVjdF9yYXRpbyBhc3BlY3RfcmF0aW87CisJX191MzIgZmxhZ3M7CisJX191MzIgcmVzZXJ2ZWRbOF07Cit9OworCisjZGVmaW5lIEdPNzAwN19DT01QX0NMT1NFRF9HT1AJCTB4MDAwMDAwMDEKKyNkZWZpbmUgR083MDA3X0NPTVBfT01JVF9TRVFfSEVBREVSCTB4MDAwMDAwMDIKKworZW51bSBnbzcwMDdfbXBlZ192aWRlb19zdGFuZGFyZCB7CisJR083MDA3X01QRUdfVklERU9fTVBFRzEgPSAwLAorCUdPNzAwN19NUEVHX1ZJREVPX01QRUcyID0gMSwKKwlHTzcwMDdfTVBFR19WSURFT19NUEVHNCA9IDIsCit9OworCisvKiBVc2VkIHRvIHNldCBwYXJhbWV0ZXJzIGZvciBWNEwyX1BJWF9GTVRfTVBFRyBmb3JtYXQgKi8KK3N0cnVjdCBnbzcwMDdfbXBlZ19wYXJhbXMgeworCWVudW0gZ283MDA3X21wZWdfdmlkZW9fc3RhbmRhcmQgbXBlZ192aWRlb19zdGFuZGFyZDsKKwlfX3UzMiBmbGFnczsKKwlfX3UzMiBwYWxpOworCV9fdTMyIHJlc2VydmVkWzhdOworfTsKKworI2RlZmluZSBHTzcwMDdfTVBFR19GT1JDRV9EVkRfTU9ERQkweDAwMDAwMDAxCisjZGVmaW5lIEdPNzAwN19NUEVHX09NSVRfR09QX0hFQURFUgkweDAwMDAwMDAyCisjZGVmaW5lIEdPNzAwN19NUEVHX1JFUEVBVF9TRVFIRUFERVIJMHgwMDAwMDAwNAorCisjZGVmaW5lIEdPNzAwN19NUEVHX1BST0ZJTEUoZm9ybWF0LCBwYWxpKQkoKChmb3JtYXQpPDwyNCl8KHBhbGkpKQorCisjZGVmaW5lIEdPNzAwN19NUEVHMl9QUk9GSUxFX01BSU5fTUFJTgkJR083MDA3X01QRUdfUFJPRklMRSgyLCAweDQ4KQorCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX1NfTDAJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHgwOCkKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfU19MMQkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweDAxKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9TX0wyCQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4MDIpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX1NfTDMJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHgwMykKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfQVJUU19MMQkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweDkxKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BUlRTX0wyCQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4OTIpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FSVFNfTDMJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHg5MykKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfQVJUU19MNAkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweDk0KQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMAkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweGYwKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMQkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweGYxKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMgkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweGYyKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MMwkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweGYzKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MNAkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweGY0KQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BU19MNQkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweGY1KQorCitzdHJ1Y3QgZ283MDA3X21kX3BhcmFtcyB7CisJX191MTYgcmVnaW9uOworCV9fdTE2IHRyaWdnZXI7CisJX191MTYgcGl4ZWxfdGhyZXNob2xkOworCV9fdTE2IG1vdGlvbl90aHJlc2hvbGQ7CisJX191MzIgcmVzZXJ2ZWRbOF07Cit9OworCitzdHJ1Y3QgZ283MDA3X21kX3JlZ2lvbiB7CisJX191MTYgcmVnaW9uOworCV9fdTE2IGZsYWdzOworCXN0cnVjdCB2NGwyX2NsaXAgKmNsaXBzOworCV9fdTMyIHJlc2VydmVkWzhdOworfTsKKworI2RlZmluZQlHTzcwMDdJT0NfU19NUEVHX1BBUkFNUwlfSU9XUignVicsIEJBU0VfVklESU9DX1BSSVZBVEUgKyAyLCBcCisJCQkJCXN0cnVjdCBnbzcwMDdfbXBlZ19wYXJhbXMpCisjZGVmaW5lCUdPNzAwN0lPQ19HX01QRUdfUEFSQU1TCV9JT1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgMywgXAorCQkJCQlzdHJ1Y3QgZ283MDA3X21wZWdfcGFyYW1zKQorI2RlZmluZQlHTzcwMDdJT0NfU19DT01QX1BBUkFNUwlfSU9XUignVicsIEJBU0VfVklESU9DX1BSSVZBVEUgKyA0LCBcCisJCQkJCXN0cnVjdCBnbzcwMDdfY29tcF9wYXJhbXMpCisjZGVmaW5lCUdPNzAwN0lPQ19HX0NPTVBfUEFSQU1TCV9JT1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgNSwgXAorCQkJCQlzdHJ1Y3QgZ283MDA3X2NvbXBfcGFyYW1zKQorI2RlZmluZQlHTzcwMDdJT0NfU19NRF9QQVJBTVMJX0lPV1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgNiwgXAorCQkJCQlzdHJ1Y3QgZ283MDA3X21kX3BhcmFtcykKKyNkZWZpbmUJR083MDA3SU9DX0dfTURfUEFSQU1TCV9JT1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgNywgXAorCQkJCQlzdHJ1Y3QgZ283MDA3X21kX3BhcmFtcykKKyNkZWZpbmUJR083MDA3SU9DX1NfTURfUkVHSU9OCV9JT1coJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgOCwgXAorCQkJCQlzdHJ1Y3QgZ283MDA3X21kX3JlZ2lvbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc2FhNzEzNC1nbzcwMDcuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc2FhNzEzNC1nbzcwMDcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGE2ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zYWE3MTM0LWdvNzAwNy5jCkBAIC0wLDAgKzEsNDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgorCisjaW5jbHVkZSAic2FhNzEzNC1yZWcuaCIKKyNpbmNsdWRlICJzYWE3MTM0LmgiCisjaW5jbHVkZSAiZ283MDA3LXByaXYuaCIKKworI2RlZmluZSBHTzcwMDdfSFBJX0RFQlVHCisKK2VudW0gaHBpX2FkZHJlc3MgeworCUhQSV9BRERSX1ZJREVPX0JVRkZFUiA9IDB4ZTQsCisJSFBJX0FERFJfSU5JVF9CVUZGRVIgPSAweGVhLAorCUhQSV9BRERSX0lOVFJfUkVUX1ZBTFVFID0gMHhlZSwKKwlIUElfQUREUl9JTlRSX1JFVF9EQVRBID0gMHhlYywKKwlIUElfQUREUl9JTlRSX1NUQVRVUyA9IDB4ZjQsCisJSFBJX0FERFJfSU5UUl9XUl9QQVJBTSA9IDB4ZjYsCisJSFBJX0FERFJfSU5UUl9XUl9JTkRFWCA9IDB4ZjgsCit9OworCitlbnVtIGdwaW9fY29tbWFuZCB7CisJR1BJT19DT01NQU5EX1JFU0VUID0gMHgwMCwgLyogMDAwYiAqLworCUdQSU9fQ09NTUFORF9SRVExICA9IDB4MDQsIC8qIDAwMWIgKi8KKwlHUElPX0NPTU1BTkRfV1JJVEUgPSAweDIwLCAvKiAwMTBiICovCisJR1BJT19DT01NQU5EX1JFUTIgID0gMHgyNCwgLyogMDExYiAqLworCUdQSU9fQ09NTUFORF9SRUFEICA9IDB4ODAsIC8qIDEwMGIgKi8KKwlHUElPX0NPTU1BTkRfVklERU8gPSAweDg0LCAvKiAxMDFiICovCisJR1BJT19DT01NQU5EX0lETEUgID0gMHhBMCwgLyogMTEwYiAqLworCUdQSU9fQ09NTUFORF9BRERSICA9IDB4QTQsIC8qIDExMWIgKi8KK307CisKK3N0cnVjdCBzYWE3MTM0X2dvNzAwNyB7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY7CisJdTggKnRvcDsKKwl1OCAqYm90dG9tOworCWRtYV9hZGRyX3QgdG9wX2RtYTsKKwlkbWFfYWRkcl90IGJvdHRvbV9kbWE7Cit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN19ib2FyZF9pbmZvIGJvYXJkX3ZveWFnZXIgPSB7CisJLmZpcm13YXJlCSA9ICJnbzcwMDd0di5iaW4iLAorCS5mbGFncwkJID0gMCwKKwkuc2Vuc29yX2ZsYWdzCSA9IEdPNzAwN19TRU5TT1JfNjU2IHwKKwkJCQlHTzcwMDdfU0VOU09SX1ZBTElEX0VOQUJMRSB8CisJCQkJR083MDA3X1NFTlNPUl9UViB8CisJCQkJR083MDA3X1NFTlNPUl9WQkksCisJLmF1ZGlvX2ZsYWdzCT0gR083MDA3X0FVRElPX0kyU19NT0RFXzEgfAorCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCS5hdWRpb19yYXRlCSA9IDQ4MDAwLAorCS5hdWRpb19iY2xrX2RpdgkgPSA4LAorCS5hdWRpb19tYWluX2RpdgkgPSAyLAorCS5ocGlfYnVmZmVyX2NhcCAgPSA3LAorCS5udW1faW5wdXRzCSA9IDEsCisJLmlucHV0cyAJID0geworCQl7CisJCQkubmFtZQkJPSAiU0FBNzEzNCIsCisJCX0sCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKiogRHJpdmVyIGZvciBHUElPIEhQSSBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGdwaW9fd3JpdGUoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIHU4IGFkZHIsIHUxNiBkYXRhKQoreworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTAsIDB4ZmYpOworCisJLyogV3JpdGUgSFBJIGFkZHJlc3MgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAsIGFkZHIpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0FERFIpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0lETEUpOworCisJLyogV3JpdGUgbG93IGJ5dGUgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAsIGRhdGEgJiAweGZmKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9XUklURSk7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfSURMRSk7CisKKwkvKiBXcml0ZSBoaWdoIGJ5dGUgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAsIGRhdGEgPj4gOCk7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfV1JJVEUpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0lETEUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19yZWFkKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCB1OCBhZGRyLCB1MTYgKmRhdGEpCit7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHhmZik7CisKKwkvKiBXcml0ZSBIUEkgYWRkcmVzcyAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgYWRkcik7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfQUREUik7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfSURMRSk7CisKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUwLCAweDAwKTsKKworCS8qIFJlYWQgbG93IGJ5dGUgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRUFEKTsKKwlzYWFfY2xlYXJiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCSpkYXRhID0gc2FhX3JlYWRiKFNBQTcxMzRfR1BJT19HUFNUQVRVUzApOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0lETEUpOworCisJLyogUmVhZCBoaWdoIGJ5dGUgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRUFEKTsKKwlzYWFfY2xlYXJiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCSpkYXRhIHw9IHNhYV9yZWFkYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMwKSA8PCA4OworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0lETEUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF9nbzcwMDdfaW50ZXJmYWNlX3Jlc2V0KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBzYWE3MTM0X2dvNzAwNyAqc2FhID0gZ28tPmhwaV9jb250ZXh0OworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gc2FhLT5kZXY7CisJdTMyIHN0YXR1czsKKwl1MTYgaW50cl92YWwsIGludHJfZGF0YTsKKwlpbnQgY291bnQgPSAyMDsKKworCXNhYV9jbGVhcmIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHg4MCk7IC8qIERpc2FibGUgVFMgaW50ZXJmYWNlICovCisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMiwgMHhhNCk7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHhmZik7CisKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRVExKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRVNFVCk7CisJbXNsZWVwKDEpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1JFUTEpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1JFUTIpOworCW1zbGVlcCgxMCk7CisKKwlzYWFfY2xlYXJiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCisJc3RhdHVzID0gc2FhX3JlYWRiKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIpOworCS8qcHJpbnRrKEtFUk5fREVCVUcgInN0YXR1cyBpcyAlc1xuIiwgc3RhdHVzICYgMHg0MCA/ICJPSyIgOiAibm90IE9LIik7ICovCisKKwkvKiBlbnRlciBjb21tYW5kIG1vZGUuLi4oPykgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRVExKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRVEyKTsKKworCWRvIHsKKwkJc2FhX2NsZWFyYihTQUE3MTM0X0dQSU9fR1BNT0RFMywgU0FBNzEzNF9HUElPX0dQUkVTQ0FOKTsKKwkJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CisJCXN0YXR1cyA9IHNhYV9yZWFkYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyKTsKKwkJLypwcmludGsoS0VSTl9JTkZPICJncGlvIGlzICUwOHhcbiIsIHNhYV9yZWFkbChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIpKTsgKi8KKwl9IHdoaWxlICgtLWNvdW50ID4gMCk7CisKKwkvKiBXYWl0IGZvciBhbiBpbnRlcnJ1cHQgdG8gaW5kaWNhdGUgc3VjY2Vzc2Z1bCBoYXJkd2FyZSByZXNldCAqLworCWlmIChnbzcwMDdfcmVhZF9pbnRlcnJ1cHQoZ28sICZpbnRyX3ZhbCwgJmludHJfZGF0YSkgPCAwIHx8CisJCQkoaW50cl92YWwgJiB+MHgxKSAhPSAweDU1YWEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkic2FhNzEzNC1nbzcwMDc6IHVuYWJsZSB0byByZXNldCB0aGUgR083MDA3XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTM0X2dvNzAwN193cml0ZV9pbnRlcnJ1cHQoc3RydWN0IGdvNzAwNyAqZ28sIGludCBhZGRyLCBpbnQgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcgKnNhYSA9IGdvLT5ocGlfY29udGV4dDsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHNhYS0+ZGV2OworCWludCBpOworCXUxNiBzdGF0dXNfcmVnOworCisjaWZkZWYgR083MDA3X0hQSV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHCisJCSJzYWE3MTM0LWdvNzAwNzogV3JpdGVJbnRlcnJ1cHQ6ICUwNHggJTA0eFxuIiwgYWRkciwgZGF0YSk7CisjZW5kaWYKKworCWZvciAoaSA9IDA7IGkgPCAxMDA7ICsraSkgeworCQlncGlvX3JlYWQoZGV2LCBIUElfQUREUl9JTlRSX1NUQVRVUywgJnN0YXR1c19yZWcpOworCQlpZiAoIShzdGF0dXNfcmVnICYgMHgwMDEwKSkKKwkJCWJyZWFrOworCQltc2xlZXAoMTApOworCX0KKwlpZiAoaSA9PSAxMDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkic2FhNzEzNC1nbzcwMDc6IGRldmljZSBpcyBodW5nLCBzdGF0dXMgcmVnID0gMHglMDR4XG4iLAorCQkJc3RhdHVzX3JlZyk7CisJCXJldHVybiAtMTsKKwl9CisJZ3Bpb193cml0ZShkZXYsIEhQSV9BRERSX0lOVFJfV1JfUEFSQU0sIGRhdGEpOworCWdwaW9fd3JpdGUoZGV2LCBIUElfQUREUl9JTlRSX1dSX0lOREVYLCBhZGRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfZ283MDA3X3JlYWRfaW50ZXJydXB0KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBzYWE3MTM0X2dvNzAwNyAqc2FhID0gZ28tPmhwaV9jb250ZXh0OworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gc2FhLT5kZXY7CisKKwkvKiBYWFggd2UgbmVlZCB0byB3YWl0IGlmIHRoZXJlIGlzIG5vIGludGVycnVwdCBhdmFpbGFibGUgKi8KKwlnby0+aW50ZXJydXB0X2F2YWlsYWJsZSA9IDE7CisJZ3Bpb19yZWFkKGRldiwgSFBJX0FERFJfSU5UUl9SRVRfVkFMVUUsICZnby0+aW50ZXJydXB0X3ZhbHVlKTsKKwlncGlvX3JlYWQoZGV2LCBIUElfQUREUl9JTlRSX1JFVF9EQVRBLCAmZ28tPmludGVycnVwdF9kYXRhKTsKKyNpZmRlZiBHTzcwMDdfSFBJX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgInNhYTcxMzQtZ283MDA3OiBSZWFkSW50ZXJydXB0OiAlMDR4ICUwNHhcbiIsCisJCQlnby0+aW50ZXJydXB0X3ZhbHVlLCBnby0+aW50ZXJydXB0X2RhdGEpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNhYTcxMzRfZ283MDA3X2lycV90c19kb25lKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCQkJdW5zaWduZWQgbG9uZyBzdGF0dXMpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYtPmVtcHJlc3NfZGV2KTsKKwlzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcgKnNhYSA9IGdvLT5ocGlfY29udGV4dDsKKworCWlmICghZ28tPnN0cmVhbWluZykKKwkJcmV0dXJuOworCWlmICgwICE9IChzdGF0dXMgJiAweDAwMGYwMDAwKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgInNhYTcxMzQtZ283MDA3OiBpcnE6IGxvc3QgJWxkXG4iLAorCQkJCShzdGF0dXMgPj4gMTYpICYgMHgwZik7CisJaWYgKHN0YXR1cyAmIDB4MTAwMDAwKSB7CisJCWRtYV9zeW5jX3NpbmdsZSgmZGV2LT5wY2ktPmRldiwKKwkJCQlzYWEtPmJvdHRvbV9kbWEsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJZ283MDA3X3BhcnNlX3ZpZGVvX3N0cmVhbShnbywgc2FhLT5ib3R0b20sIFBBR0VfU0laRSk7CisJCXNhYV93cml0ZWwoU0FBNzEzNF9SU19CQTIoNSksIGNwdV90b19sZTMyKHNhYS0+Ym90dG9tX2RtYSkpOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZSgmZGV2LT5wY2ktPmRldiwKKwkJCQlzYWEtPnRvcF9kbWEsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJZ283MDA3X3BhcnNlX3ZpZGVvX3N0cmVhbShnbywgc2FhLT50b3AsIFBBR0VfU0laRSk7CisJCXNhYV93cml0ZWwoU0FBNzEzNF9SU19CQTEoNSksIGNwdV90b19sZTMyKHNhYS0+dG9wX2RtYSkpOworCX0KK30KKworc3RhdGljIGludCBzYWE3MTM0X2dvNzAwN19zdHJlYW1fc3RhcnQoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IHNhYTcxMzRfZ283MDA3ICpzYWEgPSBnby0+aHBpX2NvbnRleHQ7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBzYWEtPmRldjsKKworCXNhYS0+dG9wX2RtYSA9IGRtYV9tYXBfcGFnZSgmZGV2LT5wY2ktPmRldiwgdmlydF90b19wYWdlKHNhYS0+dG9wKSwKKwkJCTAsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoIXNhYS0+dG9wX2RtYSkKKwkJcmV0dXJuIC1FTk9NRU07CisJc2FhLT5ib3R0b21fZG1hID0gZG1hX21hcF9wYWdlKCZkZXYtPnBjaS0+ZGV2LAorCQkJdmlydF90b19wYWdlKHNhYS0+Ym90dG9tKSwKKwkJCTAsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoIXNhYS0+Ym90dG9tX2RtYSkgeworCQlkbWFfdW5tYXBfcGFnZSgmZGV2LT5wY2ktPmRldiwgc2FhLT50b3BfZG1hLCBQQUdFX1NJWkUsCisJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2FhX3dyaXRlbChTQUE3MTM0X1ZJREVPX1BPUlRfQ1RSTDAgPj4gMiwgMHhBMzAwQjAwMCk7CisJc2FhX3dyaXRlbChTQUE3MTM0X1ZJREVPX1BPUlRfQ1RSTDQgPj4gMiwgMHg0MDAwMDIwMCk7CisKKwkvKiBTZXQgSFBJIGludGVyZmFjZSBmb3IgdmlkZW8gKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUwLCAweGZmKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAsIEhQSV9BRERSX1ZJREVPX0JVRkZFUik7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfQUREUik7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHgwMCk7CisKKwkvKiBFbmFibGUgVFMgaW50ZXJmYWNlICovCisJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweGU2KTsKKworCS8qIFJlc2V0IFRTIGludGVyZmFjZSAqLworCXNhYV9zZXRiKFNBQTcxMzRfVFNfU0VSSUFMMSwgMHgwMSk7CisJc2FhX2NsZWFyYihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDEpOworCisJLyogU2V0IHVwIHRyYW5zZmVyIGJsb2NrIHNpemUgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfVFNfUEFSQUxMRUxfU0VSSUFMLCAxMjggLSAxKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfVFNfRE1BMCwgKFBBR0VfU0laRSA+PiA3KSAtIDEpOworCXNhYV93cml0ZWIoU0FBNzEzNF9UU19ETUExLCAwKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfVFNfRE1BMiwgMCk7CisKKwkvKiBFbmFibGUgdmlkZW8gc3RyZWFtaW5nIG1vZGUgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9WSURFTyk7CisKKwlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQkExKDUpLCBjcHVfdG9fbGUzMihzYWEtPnRvcF9kbWEpKTsKKwlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQkEyKDUpLCBjcHVfdG9fbGUzMihzYWEtPmJvdHRvbV9kbWEpKTsKKwlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfUElUQ0goNSksIDEyOCk7CisJc2FhX3dyaXRlbChTQUE3MTM0X1JTX0NPTlRST0woNSksIFNBQTcxMzRfUlNfQ09OVFJPTF9CVVJTVF9NQVgpOworCisJLyogRW5hYmxlIFRTIEZJRk8gKi8KKwlzYWFfc2V0bChTQUE3MTM0X01BSU5fQ1RSTCwgU0FBNzEzNF9NQUlOX0NUUkxfVEU1KTsKKworCS8qIEVuYWJsZSBETUEgSVJRICovCisJc2FhX3NldGwoU0FBNzEzNF9JUlExLAorCQkJU0FBNzEzNF9JUlExX0lOVEVfUkEyXzEgfCBTQUE3MTM0X0lSUTFfSU5URV9SQTJfMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTM0X2dvNzAwN19zdHJlYW1fc3RvcChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcgKnNhYSA9IGdvLT5ocGlfY29udGV4dDsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHNhYS0+ZGV2OworCisJLyogU2h1dCBkb3duIFRTIEZJRk8gKi8KKwlzYWFfY2xlYXJsKFNBQTcxMzRfTUFJTl9DVFJMLCBTQUE3MTM0X01BSU5fQ1RSTF9URTUpOworCisJLyogRGlzYWJsZSBETUEgSVJRICovCisJc2FhX2NsZWFybChTQUE3MTM0X0lSUTEsCisJCQlTQUE3MTM0X0lSUTFfSU5URV9SQTJfMSB8IFNBQTcxMzRfSVJRMV9JTlRFX1JBMl8wKTsKKworCS8qIERpc2FibGUgVFMgaW50ZXJmYWNlICovCisJc2FhX2NsZWFyYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweDgwKTsKKworCWRtYV91bm1hcF9wYWdlKCZkZXYtPnBjaS0+ZGV2LCBzYWEtPnRvcF9kbWEsIFBBR0VfU0laRSwKKwkJCURNQV9GUk9NX0RFVklDRSk7CisJZG1hX3VubWFwX3BhZ2UoJmRldi0+cGNpLT5kZXYsIHNhYS0+Ym90dG9tX2RtYSwgUEFHRV9TSVpFLAorCQkJRE1BX0ZST01fREVWSUNFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfZ283MDA3X3NlbmRfZmlybXdhcmUoc3RydWN0IGdvNzAwNyAqZ28sIHU4ICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBzYWE3MTM0X2dvNzAwNyAqc2FhID0gZ28tPmhwaV9jb250ZXh0OworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gc2FhLT5kZXY7CisJdTE2IHN0YXR1c19yZWc7CisJaW50IGk7CisKKyNpZmRlZiBHTzcwMDdfSFBJX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgInNhYTcxMzQtZ283MDA3OiBEb3dubG9hZEJ1ZmZlciAiCisJCQkic2VuZGluZyAlZCBieXRlc1xuIiwgbGVuKTsKKyNlbmRpZgorCisJd2hpbGUgKGxlbiA+IDApIHsKKwkJaSA9IGxlbiA+IDY0ID8gNjQgOiBsZW47CisJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTAsIDB4ZmYpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAsIEhQSV9BRERSX0lOSVRfQlVGRkVSKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfQUREUik7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0lETEUpOworCQl3aGlsZSAoaS0tID4gMCkgeworCQkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMwLCAqZGF0YSk7CisJCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9XUklURSk7CisJCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9JRExFKTsKKwkJCSsrZGF0YTsKKwkJCS0tbGVuOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCAxMDA7ICsraSkgeworCQkJZ3Bpb19yZWFkKGRldiwgSFBJX0FERFJfSU5UUl9TVEFUVVMsICZzdGF0dXNfcmVnKTsKKwkJCWlmICghKHN0YXR1c19yZWcgJiAweDAwMDIpKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IDEwMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJzYWE3MTM0LWdvNzAwNzogZGV2aWNlIGlzIGh1bmcsICIKKwkJCQkJInN0YXR1cyByZWcgPSAweCUwNHhcbiIsIHN0YXR1c19yZWcpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdvNzAwN19ocGlfb3BzIHNhYTcxMzRfZ283MDA3X2hwaV9vcHMgPSB7CisJLmludGVyZmFjZV9yZXNldAk9IHNhYTcxMzRfZ283MDA3X2ludGVyZmFjZV9yZXNldCwKKwkud3JpdGVfaW50ZXJydXB0CT0gc2FhNzEzNF9nbzcwMDdfd3JpdGVfaW50ZXJydXB0LAorCS5yZWFkX2ludGVycnVwdAkJPSBzYWE3MTM0X2dvNzAwN19yZWFkX2ludGVycnVwdCwKKwkuc3RyZWFtX3N0YXJ0CQk9IHNhYTcxMzRfZ283MDA3X3N0cmVhbV9zdGFydCwKKwkuc3RyZWFtX3N0b3AJCT0gc2FhNzEzNF9nbzcwMDdfc3RyZWFtX3N0b3AsCisJLnNlbmRfZmlybXdhcmUJCT0gc2FhNzEzNF9nbzcwMDdfc2VuZF9maXJtd2FyZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKiogQWRkL3JlbW92ZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHNhYTcxMzRfZ283MDA3X2luaXQoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCit7CisJc3RydWN0IGdvNzAwNyAqZ287CisJc3RydWN0IHNhYTcxMzRfZ283MDA3ICpzYWE7CisKKwlwcmludGsoS0VSTl9ERUJVRyAic2FhNzEzNC1nbzcwMDc6IHByb2JpbmcgbmV3IFNBQTcxM1ggYm9hcmRcbiIpOworCisJc2FhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxMzRfZ283MDA3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNhYSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoc2FhLCAwLCBzaXplb2Yoc3RydWN0IHNhYTcxMzRfZ283MDA3KSk7CisKKwkvKiBBbGxvY2F0ZSBhIGNvdXBsZSBwYWdlcyBmb3IgcmVjZWl2aW5nIHRoZSBjb21wcmVzc2VkIHN0cmVhbSAqLworCXNhYS0+dG9wID0gKHU4ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghc2FhLT50b3ApCisJCWdvdG8gYWxsb2NmYWlsOworCXNhYS0+Ym90dG9tID0gKHU4ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghc2FhLT5ib3R0b20pCisJCWdvdG8gYWxsb2NmYWlsOworCisJZ28gPSBnbzcwMDdfYWxsb2MoJmJvYXJkX3ZveWFnZXIsICZkZXYtPnBjaS0+ZGV2KTsKKwlpZiAoZ28gPT0gTlVMTCkKKwkJZ290byBhbGxvY2ZhaWw7CisJZ28tPmJvYXJkX2lkID0gR083MDA3X0JPQVJESURfUENJX1ZPWUFHRVI7CisJc3RybmNweShnby0+bmFtZSwgc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSwgc2l6ZW9mKGdvLT5uYW1lKSk7CisJZ28tPmhwaV9vcHMgPSAmc2FhNzEzNF9nbzcwMDdfaHBpX29wczsKKwlnby0+aHBpX2NvbnRleHQgPSBzYWE7CisJc2FhLT5kZXYgPSBkZXY7CisKKwkvKiBCb290IHRoZSBHTzcwMDcgKi8KKwlpZiAoZ283MDA3X2Jvb3RfZW5jb2RlcihnbywgZ28tPmJvYXJkX2luZm8tPmZsYWdzICYKKwkJCQkJR083MDA3X0JPQVJEX1VTRV9PTkJPQVJEX0kyQykgPCAwKQorCQlnb3RvIGluaXRmYWlsOworCisJLyogRG8gYW55IGZpbmFsIEdPNzAwNyBpbml0aWFsaXphdGlvbiwgdGhlbiByZWdpc3RlciB0aGUKKwkgKiBWNEwyIGFuZCBBTFNBIGludGVyZmFjZXMgKi8KKwlpZiAoZ283MDA3X3JlZ2lzdGVyX2VuY29kZXIoZ28pIDwgMCkKKwkJZ290byBpbml0ZmFpbDsKKwlkZXYtPmVtcHJlc3NfZGV2ID0gZ28tPnZpZGVvX2RldjsKKwl2aWRlb19zZXRfZHJ2ZGF0YShkZXYtPmVtcHJlc3NfZGV2LCBnbyk7CisKKwlnby0+c3RhdHVzID0gU1RBVFVTX09OTElORTsKKwlyZXR1cm4gMDsKKworaW5pdGZhaWw6CisJZ28tPnN0YXR1cyA9IFNUQVRVU19TSFVURE9XTjsKKwlyZXR1cm4gMDsKKworYWxsb2NmYWlsOgorCWlmIChzYWEtPnRvcCkKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNhYS0+dG9wKTsKKwlpZiAoc2FhLT5ib3R0b20pCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzYWEtPmJvdHRvbSk7CisJa2ZyZWUoc2FhKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBzYWE3MTM0X2dvNzAwN19maW5pKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQoreworCXN0cnVjdCBnbzcwMDcgKmdvOworCXN0cnVjdCBzYWE3MTM0X2dvNzAwNyAqc2FhOworCisJaWYgKE5VTEwgPT0gZGV2LT5lbXByZXNzX2RldikKKwkJcmV0dXJuIDA7CisKKwlnbyA9IHZpZGVvX2dldF9kcnZkYXRhKGRldi0+ZW1wcmVzc19kZXYpOworCXNhYSA9IGdvLT5ocGlfY29udGV4dDsKKwlnby0+c3RhdHVzID0gU1RBVFVTX1NIVVRET1dOOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzYWEtPnRvcCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNhYS0+Ym90dG9tKTsKKwlrZnJlZShzYWEpOworCWdvNzAwN19yZW1vdmUoZ28pOworCWRldi0+ZW1wcmVzc19kZXYgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2FhNzEzNF9tcGVnX29wcyBzYWE3MTM0X2dvNzAwN19vcHMgPSB7CisJLnR5cGUgICAgICAgICAgPSBTQUE3MTM0X01QRUdfR083MDA3LAorCS5pbml0ICAgICAgICAgID0gc2FhNzEzNF9nbzcwMDdfaW5pdCwKKwkuZmluaSAgICAgICAgICA9IHNhYTcxMzRfZ283MDA3X2ZpbmksCisJLmlycV90c19kb25lICAgPSBzYWE3MTM0X2dvNzAwN19pcnFfdHNfZG9uZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNhYTcxMzRfZ283MDA3X21vZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHNhYTcxMzRfdHNfcmVnaXN0ZXIoJnNhYTcxMzRfZ283MDA3X29wcyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzYWE3MTM0X2dvNzAwN19tb2RfY2xlYW51cCh2b2lkKQoreworCXNhYTcxMzRfdHNfdW5yZWdpc3Rlcigmc2FhNzEzNF9nbzcwMDdfb3BzKTsKK30KKworbW9kdWxlX2luaXQoc2FhNzEzNF9nbzcwMDdfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2FhNzEzNF9nbzcwMDdfbW9kX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc25kLWdvNzAwNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Mjc0MGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYwpAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorCisjaW5jbHVkZSAiZ283MDA3LXByaXYuaCIKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKKworbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgdGhlIGdvNzAwNyBhdWRpbyBkcml2ZXIiKTsKK01PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIHRoZSBnbzcwMDcgYXVkaW8gZHJpdmVyIik7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSBmb3IgdGhlIGdvNzAwNyBhdWRpbyBkcml2ZXIiKTsKKworc3RydWN0IGdvNzAwN19zbmQgeworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgd19pZHg7CisJaW50IGh3X3B0cjsKKwlpbnQgYXZhaWw7CisJaW50IGNhcHR1cmluZzsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBnbzcwMDdfc25kX2NhcHR1cmVfaHcgPSB7CisJLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCQkJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorCS5mb3JtYXRzCQk9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlcwkJCT0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisJLnJhdGVfbWluCQk9IDQ4MDAwLAorCS5yYXRlX21heAkJPSA0ODAwMCwKKwkuY2hhbm5lbHNfbWluCQk9IDIsCisJLmNoYW5uZWxzX21heAkJPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4CT0gKDEyOCoxMDI0KSwKKwkucGVyaW9kX2J5dGVzX21pbgk9IDQwOTYsCisJLnBlcmlvZF9ieXRlc19tYXgJPSAoMTI4KjEwMjQpLAorCS5wZXJpb2RzX21pbgkJPSAxLAorCS5wZXJpb2RzX21heAkJPSAzMiwKK307CisKK3N0YXRpYyB2b2lkIHBhcnNlX2F1ZGlvX3N0cmVhbV9kYXRhKHN0cnVjdCBnbzcwMDcgKmdvLCB1OCAqYnVmLCBpbnQgbGVuZ3RoKQoreworCXN0cnVjdCBnbzcwMDdfc25kICpnb3NuZCA9IGdvLT5zbmRfY29udGV4dDsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gZ29zbmQtPnN1YnN0cmVhbS0+cnVudGltZTsKKwlpbnQgZnJhbWVzID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGxlbmd0aCk7CisKKwlzcGluX2xvY2soJmdvc25kLT5sb2NrKTsKKwlnb3NuZC0+aHdfcHRyICs9IGZyYW1lczsKKwlpZiAoZ29zbmQtPmh3X3B0ciA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJZ29zbmQtPmh3X3B0ciAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwlnb3NuZC0+YXZhaWwgKz0gZnJhbWVzOworCXNwaW5fdW5sb2NrKCZnb3NuZC0+bG9jayk7CisJaWYgKGdvc25kLT53X2lkeCArIGxlbmd0aCA+IHJ1bnRpbWUtPmRtYV9ieXRlcykgeworCQlpbnQgY3B5ID0gcnVudGltZS0+ZG1hX2J5dGVzIC0gZ29zbmQtPndfaWR4OworCisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIGdvc25kLT53X2lkeCwgYnVmLCBjcHkpOworCQlsZW5ndGggLT0gY3B5OworCQlidWYgKz0gY3B5OworCQlnb3NuZC0+d19pZHggPSAwOworCX0KKwltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBnb3NuZC0+d19pZHgsIGJ1ZiwgbGVuZ3RoKTsKKwlnb3NuZC0+d19pZHggKz0gbGVuZ3RoOworCXNwaW5fbG9jaygmZ29zbmQtPmxvY2spOworCWlmIChnb3NuZC0+YXZhaWwgPCBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQlzcGluX3VubG9jaygmZ29zbmQtPmxvY2spOworCQlyZXR1cm47CisJfQorCWdvc25kLT5hdmFpbCAtPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwlzcGluX3VubG9jaygmZ29zbmQtPmxvY2spOworCWlmIChnb3NuZC0+Y2FwdHVyaW5nKQorCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGdvc25kLT5zdWJzdHJlYW0pOworfQorCitzdGF0aWMgaW50IGdvNzAwN19zbmRfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBieXRlczsKKworCWJ5dGVzID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpOworCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9ieXRlcyA+IDApCisJCXZmcmVlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2J5dGVzID0gMDsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvYyhieXRlcyk7CisJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYnl0ZXMgPSBieXRlczsKKwlnby0+YXVkaW9fZGVsaXZlciA9IHBhcnNlX2F1ZGlvX3N0cmVhbV9kYXRhOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdvNzAwN19zbmRfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWdvLT5hdWRpb19kZWxpdmVyID0gTlVMTDsKKwlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYnl0ZXMgPiAwKQorCQl2ZnJlZShzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhKTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9ieXRlcyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3NuZF9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IGdvNzAwN19zbmQgKmdvc25kID0gZ28tPnNuZF9jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ29zbmQtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZ29zbmQtPnN1YnN0cmVhbSA9PSBOVUxMKSB7CisJCWdvc25kLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJCXN1YnN0cmVhbS0+cnVudGltZS0+aHcgPSBnbzcwMDdfc25kX2NhcHR1cmVfaHc7CisJCXIgPSAwOworCX0gZWxzZQorCQlyID0gLUVCVVNZOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdvc25kLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3NuZF9jYXB0dXJlX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBnbzcwMDdfc25kICpnb3NuZCA9IGdvLT5zbmRfY29udGV4dDsKKworCWdvc25kLT5zdWJzdHJlYW0gPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdvNzAwN19zbmRfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3NuZF9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgZ283MDA3X3NuZCAqZ29zbmQgPSBnby0+c25kX2NvbnRleHQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCS8qIEp1c3Qgc2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB3ZSBzaG91bGQgc2lnbmFsIEFMU0Egd2hlbgorCQkgKiBzb3VuZCBjb21lcyBpbiAqLworCQlnb3NuZC0+Y2FwdHVyaW5nID0gMTsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlnb3NuZC0+aHdfcHRyID0gZ29zbmQtPndfaWR4ID0gZ29zbmQtPmF2YWlsID0gMDsKKwkJZ29zbmQtPmNhcHR1cmluZyA9IDA7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IGdvNzAwN19zbmRfcGNtX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IGdvNzAwN19zbmQgKmdvc25kID0gZ28tPnNuZF9jb250ZXh0OworCisJcmV0dXJuIGdvc25kLT5od19wdHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqZ283MDA3X3NuZF9wY21fcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuIHZtYWxsb2NfdG9fcGFnZShzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBnbzcwMDdfc25kX2NhcHR1cmVfb3BzID0geworCS5vcGVuCQk9IGdvNzAwN19zbmRfY2FwdHVyZV9vcGVuLAorCS5jbG9zZQkJPSBnbzcwMDdfc25kX2NhcHR1cmVfY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBnbzcwMDdfc25kX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IGdvNzAwN19zbmRfaHdfZnJlZSwKKwkucHJlcGFyZQk9IGdvNzAwN19zbmRfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBnbzcwMDdfc25kX3BjbV90cmlnZ2VyLAorCS5wb2ludGVyCT0gZ283MDA3X3NuZF9wY21fcG9pbnRlciwKKwkucGFnZQkJPSBnbzcwMDdfc25kX3BjbV9wYWdlLAorfTsKKworc3RhdGljIGludCBnbzcwMDdfc25kX2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CisKKwlrZnJlZShnby0+c25kX2NvbnRleHQpOworCWdvLT5zbmRfY29udGV4dCA9IE5VTEw7CisJaWYgKC0tZ28tPnJlZl9jb3VudCA9PSAwKQorCQlrZnJlZShnbyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgZ283MDA3X3NuZF9kZXZpY2Vfb3BzID0geworCS5kZXZfZnJlZQk9IGdvNzAwN19zbmRfZnJlZSwKK307CisKK2ludCBnbzcwMDdfc25kX2luaXQoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RhdGljIGludCBkZXY7CisJc3RydWN0IGdvNzAwN19zbmQgKmdvc25kOworCWludCByZXQgPSAwOworCisJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFlbmFibGVbZGV2XSkgeworCQlkZXYrKzsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCWdvc25kID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdvNzAwN19zbmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZ29zbmQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJc3Bpbl9sb2NrX2luaXQoJmdvc25kLT5sb2NrKTsKKwlnb3NuZC0+aHdfcHRyID0gZ29zbmQtPndfaWR4ID0gZ29zbmQtPmF2YWlsID0gMDsKKwlnb3NuZC0+Y2FwdHVyaW5nID0gMDsKKwlnb3NuZC0+Y2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7CisJaWYgKGdvc25kLT5jYXJkID09IE5VTEwpIHsKKwkJa2ZyZWUoZ29zbmQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0ID0gc25kX2RldmljZV9uZXcoZ29zbmQtPmNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgZ28sCisJCQkmZ283MDA3X3NuZF9kZXZpY2Vfb3BzKTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShnb3NuZCk7CisJCXJldHVybiByZXQ7CisJfQorCXNuZF9jYXJkX3NldF9kZXYoZ29zbmQtPmNhcmQsIGdvLT5kZXYpOworCXJldCA9IHNuZF9wY21fbmV3KGdvc25kLT5jYXJkLCAiZ283MDA3IiwgMCwgMCwgMSwgJmdvc25kLT5wY20pOworCWlmIChyZXQgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoZ29zbmQtPmNhcmQpOworCQlrZnJlZShnb3NuZCk7CisJCXJldHVybiByZXQ7CisJfQorCXN0cm5jcHkoZ29zbmQtPmNhcmQtPmRyaXZlciwgImdvNzAwNyIsIHNpemVvZihnb3NuZC0+Y2FyZC0+ZHJpdmVyKSk7CisJc3RybmNweShnb3NuZC0+Y2FyZC0+c2hvcnRuYW1lLCBnby0+bmFtZSwgc2l6ZW9mKGdvc25kLT5jYXJkLT5kcml2ZXIpKTsKKwlzdHJuY3B5KGdvc25kLT5jYXJkLT5sb25nbmFtZSwgZ29zbmQtPmNhcmQtPnNob3J0bmFtZSwKKwkJCXNpemVvZihnb3NuZC0+Y2FyZC0+bG9uZ25hbWUpKTsKKworCWdvc25kLT5wY20tPnByaXZhdGVfZGF0YSA9IGdvOworCXNuZF9wY21fc2V0X29wcyhnb3NuZC0+cGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisJCQkmZ283MDA3X3NuZF9jYXB0dXJlX29wcyk7CisKKwlyZXQgPSBzbmRfY2FyZF9yZWdpc3Rlcihnb3NuZC0+Y2FyZCk7CisJaWYgKHJldCA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShnb3NuZC0+Y2FyZCk7CisJCWtmcmVlKGdvc25kKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlnb3NuZC0+c3Vic3RyZWFtID0gTlVMTDsKKwlnby0+c25kX2NvbnRleHQgPSBnb3NuZDsKKwkrK2RldjsKKwkrK2dvLT5yZWZfY291bnQ7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZ283MDA3X3NuZF9pbml0KTsKKworaW50IGdvNzAwN19zbmRfcmVtb3ZlKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBnbzcwMDdfc25kICpnb3NuZCA9IGdvLT5zbmRfY29udGV4dDsKKworCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoZ29zbmQtPmNhcmQpOworCXNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQoZ29zbmQtPmNhcmQpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChnbzcwMDdfc25kX3JlbW92ZSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLWkyYy5oIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzZjY1OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLWkyYy5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qIFRlbXBvcmFyeSBJMkMgSURzIC0tIHRoZXNlIG5lZWQgdG8gYmUgcmVwbGFjZWQgd2l0aCByZWFsIHJlZ2lzdGVyZWQgSURzICovCisjZGVmaW5lCUkyQ19EUklWRVJJRF9XSVNfU0FBNzExNQkweGYwZjAKKyNkZWZpbmUJSTJDX0RSSVZFUklEX1dJU19VREExMzQyCTB4ZjBmMQorI2RlZmluZQlJMkNfRFJJVkVSSURfV0lTX1NPTllfVFVORVIJMHhmMGYyCisjZGVmaW5lCUkyQ19EUklWRVJJRF9XSVNfVFc5OTAzCQkweGYwZjMKKyNkZWZpbmUJSTJDX0RSSVZFUklEX1dJU19TQUE3MTEzCTB4ZjBmNAorI2RlZmluZQlJMkNfRFJJVkVSSURfV0lTX09WNzY0MAkJMHhmMGY1CisjZGVmaW5lCUkyQ19EUklWRVJJRF9XSVNfVFcyODA0CQkweGYwZjYKKyNkZWZpbmUJSTJDX0FMR09fR083MDA3CQkJMHhmMDAwMDAKKyNkZWZpbmUJSTJDX0FMR09fR083MDA3X1VTQgkJMHhmMTAwMDAKKworLyogRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjbGllbnQgbmVlZHMgdG8gYmUgYWNjZXNzZWQgd2l0aCBTQ0NCIHNlbWFudGljcyAqLworLyogV2UgcmUtdXNlIHRoZSBJMkNfTV9URU4gdmFsdWUgc28gdGhlIGZsYWcgcGFzc2VzIHRocm91Z2ggdGhlIG1hc2tzIGluIHRoZQorICogY29yZSBJMkMgY29kZS4gIE1ham9yIGtsdWRnZSwgYnV0IHRoZSBJMkMgbGF5ZXIgYWluJ3QgZXhhY3RseSBmbGV4aWJsZS4gKi8KKyNkZWZpbmUJSTJDX0NMSUVOVF9TQ0NCCQkJMHgxMAorCit0eXBlZGVmIGludCAoKmZvdW5kX3Byb2MpIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiwgaW50LCBpbnQpOworaW50IHdpc19pMmNfYWRkX2RyaXZlcih1bnNpZ25lZCBpbnQgaWQsIGZvdW5kX3Byb2MgZm91bmRfcHJvYyk7Cit2b2lkIHdpc19pMmNfZGVsX2RyaXZlcihmb3VuZF9wcm9jIGZvdW5kX3Byb2MpOworCitpbnQgd2lzX2kyY19wcm9iZV9kZXZpY2Uoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCXVuc2lnbmVkIGludCBpZCwgaW50IGFkZHIpOworCisvKiBEZWZpbml0aW9ucyBmb3IgbmV3IHZpZGVvIGRlY29kZXIgY29tbWFuZHMgKi8KKworc3RydWN0IHZpZGVvX2RlY29kZXJfcmVzb2x1dGlvbiB7CisJdW5zaWduZWQgaW50IHdpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQ7Cit9OworCisjZGVmaW5lCURFQ09ERVJfU0VUX1JFU09MVVRJT04JX0lPVygnZCcsIDIwMCwgc3RydWN0IHZpZGVvX2RlY29kZXJfcmVzb2x1dGlvbikKKyNkZWZpbmUJREVDT0RFUl9TRVRfQ0hBTk5FTAlfSU9XKCdkJywgMjAxLCBpbnQpCisKKy8qIFNvbnkgdHVuZXIgdHlwZXMgKi8KKworI2RlZmluZSBUVU5FUl9TT05ZX0JURl9QRzQ3MloJCTIwMAorI2RlZmluZSBUVU5FUl9TT05ZX0JURl9QSzQ2N1oJCTIwMQorI2RlZmluZSBUVU5FUl9TT05ZX0JURl9QQjQ2M1oJCTIwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtb3Y3NjQwLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1vdjc2NDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWYxMWU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtb3Y3NjQwLmMKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorCisjaW5jbHVkZSAid2lzLWkyYy5oIgorCitzdHJ1Y3Qgd2lzX292NzY0MCB7CisJaW50IGJyaWdodG5lc3M7CisJaW50IGNvbnRyYXN0OworCWludCBzYXR1cmF0aW9uOworCWludCBodWU7Cit9OworCitzdGF0aWMgdTggaW5pdGlhbF9yZWdpc3RlcnNbXSA9Cit7CisJMHgxMiwgMHg4MCwKKwkweDEyLCAweDU0LAorCTB4MTQsIDB4MjQsCisJMHgxNSwgMHgwMSwKKwkweDI4LCAweDIwLAorCTB4NzUsIDB4ODIsCisJMHhGRiwgMHhGRiwgLyogVGVybWluYXRvciAocmVnIDB4RkYgaXMgdW51c2VkKSAqLworfTsKKworc3RhdGljIGludCB3cml0ZV9yZWdzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICpyZWdzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgcmVnc1tpXSAhPSAweEZGOyBpICs9IDIpCisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnc1tpXSwgcmVnc1tpICsgMV0pIDwgMCkKKwkJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc19vdjc2NDBfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgd2lzX292NzY0MF9jbGllbnRfdGVtcGwgPSB7CisJLm5hbWUJCT0gIk9WNzY0MCAoV0lTKSIsCisJLmRyaXZlcgkJPSAmd2lzX292NzY0MF9kcml2ZXIsCit9OworCitzdGF0aWMgaW50IHdpc19vdjc2NDBfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShjbGllbnQsICZ3aXNfb3Y3NjQwX2NsaWVudF90ZW1wbCwKKwkJCXNpemVvZih3aXNfb3Y3NjQwX2NsaWVudF90ZW1wbCkpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKKwljbGllbnQtPmZsYWdzID0gSTJDX0NMSUVOVF9TQ0NCOworCisJcHJpbnRrKEtFUk5fREVCVUcKKwkJIndpcy1vdjc2NDA6IGluaXRpYWxpemluZyBPVjc2NDAgYXQgYWRkcmVzcyAlZCBvbiAlc1xuIiwKKwkJYWRkciwgYWRhcHRlci0+bmFtZSk7CisKKwlpZiAod3JpdGVfcmVncyhjbGllbnQsIGluaXRpYWxfcmVnaXN0ZXJzKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ3aXMtb3Y3NjQwOiBlcnJvciBpbml0aWFsaXppbmcgT1Y3NjQwXG4iKTsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfb3Y3NjQwX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWludCByOworCisJciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWtmcmVlKGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfb3Y3NjQwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJXSVMgT1Y3NjQwIEkyQyBkcml2ZXIiLAorCX0sCisJLmlkCQk9IEkyQ19EUklWRVJJRF9XSVNfT1Y3NjQwLAorCS5kZXRhY2hfY2xpZW50CT0gd2lzX292NzY0MF9kZXRhY2gsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3aXNfb3Y3NjQwX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfYWRkX2RyaXZlcigmd2lzX292NzY0MF9kcml2ZXIpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJcmV0dXJuIHdpc19pMmNfYWRkX2RyaXZlcih3aXNfb3Y3NjQwX2RyaXZlci5pZCwgd2lzX292NzY0MF9kZXRlY3QpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2lzX292NzY0MF9jbGVhbnVwKHZvaWQpCit7CisJd2lzX2kyY19kZWxfZHJpdmVyKHdpc19vdjc2NDBfZGV0ZWN0KTsKKwlpMmNfZGVsX2RyaXZlcigmd2lzX292NzY0MF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3aXNfb3Y3NjQwX2luaXQpOworbW9kdWxlX2V4aXQod2lzX292NzY0MF9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc2FhNzExMy5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc2FhNzExMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYWZmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zYWE3MTEzLmMKQEAgLTAsMCArMSwzNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNpbmNsdWRlICJ3aXMtaTJjLmgiCisKK3N0cnVjdCB3aXNfc2FhNzExMyB7CisJaW50IG5vcm07CisJaW50IGJyaWdodG5lc3M7CisJaW50IGNvbnRyYXN0OworCWludCBzYXR1cmF0aW9uOworCWludCBodWU7Cit9OworCitzdGF0aWMgdTggaW5pdGlhbF9yZWdpc3RlcnNbXSA9Cit7CisJMHgwMSwgMHgwOCwKKwkweDAyLCAweGMwLAorCTB4MDMsIDB4MzMsCisJMHgwNCwgMHgwMCwKKwkweDA1LCAweDAwLAorCTB4MDYsIDB4ZTksCisJMHgwNywgMHgwZCwKKwkweDA4LCAweGQ4LAorCTB4MDksIDB4NDAsCisJMHgwYSwgMHg4MCwKKwkweDBiLCAweDQ3LAorCTB4MGMsIDB4NDAsCisJMHgwZCwgMHgwMCwKKwkweDBlLCAweDAxLAorCTB4MGYsIDB4MmEsCisJMHgxMCwgMHg0MCwKKwkweDExLCAweDBjLAorCTB4MTIsIDB4ZmUsCisJMHgxMywgMHgwMCwKKwkweDE0LCAweDAwLAorCTB4MTUsIDB4MDQsCisJMHgxNiwgMHgwMCwKKwkweDE3LCAweDAwLAorCTB4MTgsIDB4MDAsCisJMHgxOSwgMHgwMCwKKwkweDFhLCAweDAwLAorCTB4MWIsIDB4MDAsCisJMHgxYywgMHgwMCwKKwkweDFkLCAweDAwLAorCTB4MWUsIDB4MDAsCisJMHgxZiwgMHhjOCwKKwkweDQwLCAweDAwLAorCTB4NDEsIDB4ZmYsCisJMHg0MiwgMHhmZiwKKwkweDQzLCAweGZmLAorCTB4NDQsIDB4ZmYsCisJMHg0NSwgMHhmZiwKKwkweDQ2LCAweGZmLAorCTB4NDcsIDB4ZmYsCisJMHg0OCwgMHhmZiwKKwkweDQ5LCAweGZmLAorCTB4NGEsIDB4ZmYsCisJMHg0YiwgMHhmZiwKKwkweDRjLCAweGZmLAorCTB4NGQsIDB4ZmYsCisJMHg0ZSwgMHhmZiwKKwkweDRmLCAweGZmLAorCTB4NTAsIDB4ZmYsCisJMHg1MSwgMHhmZiwKKwkweDUyLCAweGZmLAorCTB4NTMsIDB4ZmYsCisJMHg1NCwgMHhmZiwKKwkweDU1LCAweGZmLAorCTB4NTYsIDB4ZmYsCisJMHg1NywgMHhmZiwKKwkweDU4LCAweDAwLAorCTB4NTksIDB4NTQsCisJMHg1YSwgMHgwNywKKwkweDViLCAweDgzLAorCTB4NWMsIDB4MDAsCisJMHg1ZCwgMHgwMCwKKwkweDVlLCAweDAwLAorCTB4NWYsIDB4MDAsCisJMHg2MCwgMHgwMCwKKwkweDYxLCAweDAwLAorCTB4MDAsIDB4MDAsIC8qIFRlcm1pbmF0b3IgKHJlZyAweDAwIGlzIHJlYWQtb25seSkgKi8KK307CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIGludCB3cml0ZV9yZWdzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICpyZWdzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgcmVnc1tpXSAhPSAweDAwOyBpICs9IDIpCisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnc1tpXSwgcmVnc1tpICsgMV0pIDwgMCkKKwkJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfc2FhNzExM19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB3aXNfc2FhNzExMyAqZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklESU9DX1NfSU5QVVQ6CisJeworCQlpbnQgKmlucHV0ID0gYXJnOworCisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCAweDAyLCAweEMwIHwgKmlucHV0KTsKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIDB4MDksCisJCQkJKmlucHV0IDwgNiA/IDB4NDAgOiAweDgwKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKmlucHV0ID0gYXJnOworCQlkZWMtPm5vcm0gPSAqaW5wdXQ7CisJCWlmIChkZWMtPm5vcm0gJiBWNEwyX1NURF9OVFNDKSB7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBlLCAweDAxKTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MTAsIDB4NDApOworCQl9IGVsc2UgaWYgKGRlYy0+bm9ybSAmIFY0TDJfU1REX1BBTCkgeworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwZSwgMHgwMSk7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDEwLCAweDQ4KTsKKwkJfSBlbHNlIGlmIChkZWMtPm5vcm0gKiBWNEwyX1NURF9TRUNBTSkgeworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwZSwgMHg1MCk7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDEwLCAweDQ4KTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJCcmlnaHRuZXNzIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDI1NTsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDEyODsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJDb250cmFzdCIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAxMjc7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSA3MTsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIlNhdHVyYXRpb24iLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gNjQ7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkh1ZSIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gLTEyODsKKwkJCWN0cmwtPm1heGltdW0gPSAxMjc7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAwOworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAyNTUpCisJCQkJZGVjLT5icmlnaHRuZXNzID0gMjU1OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBhLCBkZWMtPmJyaWdodG5lc3MpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMjcpCisJCQkJZGVjLT5jb250cmFzdCA9IDEyNzsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPmNvbnRyYXN0ID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPmNvbnRyYXN0ID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBiLCBkZWMtPmNvbnRyYXN0KTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMjcpCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gMTI3OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBjLCBkZWMtPnNhdHVyYXRpb24pOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQorCQkJCWRlYy0+aHVlID0gMTI3OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAtMTI4KQorCQkJCWRlYy0+aHVlID0gLTEyODsKKwkJCWVsc2UKKwkJCQlkZWMtPmh1ZSA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwZCwgZGVjLT5odWUpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+YnJpZ2h0bmVzczsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmNvbnRyYXN0OworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5zYXR1cmF0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmh1ZTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfc2FhNzExM19kcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCB3aXNfc2FhNzExM19jbGllbnRfdGVtcGwgPSB7CisJLm5hbWUJCT0gIlNBQTcxMTMgKFdJUykiLAorCS5kcml2ZXIJCT0gJndpc19zYWE3MTEzX2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgd2lzX3NhYTcxMTNfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHdpc19zYWE3MTEzICpkZWM7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShjbGllbnQsICZ3aXNfc2FhNzExM19jbGllbnRfdGVtcGwsCisJCQlzaXplb2Yod2lzX3NhYTcxMTNfY2xpZW50X3RlbXBsKSk7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmFkZHIgPSBhZGRyOworCisJZGVjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdpc19zYWE3MTEzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRlYyA9PSBOVUxMKSB7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkZWMtPm5vcm0gPSBWNEwyX1NURF9OVFNDOworCWRlYy0+YnJpZ2h0bmVzcyA9IDEyODsKKwlkZWMtPmNvbnRyYXN0ID0gNzE7CisJZGVjLT5zYXR1cmF0aW9uID0gNjQ7CisJZGVjLT5odWUgPSAwOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlYyk7CisKKwlwcmludGsoS0VSTl9ERUJVRworCQkid2lzLXNhYTcxMTM6IGluaXRpYWxpemluZyBTQUE3MTEzIGF0IGFkZHJlc3MgJWQgb24gJXNcbiIsCisJCWFkZHIsIGFkYXB0ZXItPm5hbWUpOworCisJaWYgKHdyaXRlX3JlZ3MoY2xpZW50LCBpbml0aWFsX3JlZ2lzdGVycykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIndpcy1zYWE3MTEzOiBlcnJvciBpbml0aWFsaXppbmcgU0FBNzExM1xuIik7CisJCWtmcmVlKGNsaWVudCk7CisJCWtmcmVlKGRlYyk7CisJCXJldHVybiAwOworCX0KKworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3NhYTcxMTNfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdpc19zYWE3MTEzICpkZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcjsKKworCXIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlrZnJlZShjbGllbnQpOworCWtmcmVlKGRlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfc2FhNzExM19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiV0lTIFNBQTcxMTMgSTJDIGRyaXZlciIsCisJfSwKKwkuaWQJCT0gSTJDX0RSSVZFUklEX1dJU19TQUE3MTEzLAorCS5kZXRhY2hfY2xpZW50CT0gd2lzX3NhYTcxMTNfZGV0YWNoLAorCS5jb21tYW5kCT0gd2lzX3NhYTcxMTNfY29tbWFuZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdpc19zYWE3MTEzX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfYWRkX2RyaXZlcigmd2lzX3NhYTcxMTNfZHJpdmVyKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCXJldHVybiB3aXNfaTJjX2FkZF9kcml2ZXIod2lzX3NhYTcxMTNfZHJpdmVyLmlkLCB3aXNfc2FhNzExM19kZXRlY3QpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2lzX3NhYTcxMTNfY2xlYW51cCh2b2lkKQoreworCXdpc19pMmNfZGVsX2RyaXZlcih3aXNfc2FhNzExM19kZXRlY3QpOworCWkyY19kZWxfZHJpdmVyKCZ3aXNfc2FhNzExM19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3aXNfc2FhNzExM19pbml0KTsKK21vZHVsZV9leGl0KHdpc19zYWE3MTEzX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zYWE3MTE1LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zYWE3MTE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5NGM4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTUuYwpAQCAtMCwwICsxLDQ5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2luY2x1ZGUgIndpcy1pMmMuaCIKKworc3RydWN0IHdpc19zYWE3MTE1IHsKKwlpbnQgbm9ybTsKKwlpbnQgYnJpZ2h0bmVzczsKKwlpbnQgY29udHJhc3Q7CisJaW50IHNhdHVyYXRpb247CisJaW50IGh1ZTsKK307CisKK3N0YXRpYyB1OCBpbml0aWFsX3JlZ2lzdGVyc1tdID0KK3sKKwkweDAxLCAweDA4LAorCTB4MDIsIDB4YzAsCisJMHgwMywgMHgyMCwKKwkweDA0LCAweDgwLAorCTB4MDUsIDB4ODAsCisJMHgwNiwgMHhlYiwKKwkweDA3LCAweGUwLAorCTB4MDgsIDB4ZjAsCS8qIGFsd2F5cyB0b2dnbGUgRklEICovCisJMHgwOSwgMHg0MCwKKwkweDBhLCAweDgwLAorCTB4MGIsIDB4NDAsCisJMHgwYywgMHg0MCwKKwkweDBkLCAweDAwLAorCTB4MGUsIDB4MDMsCisJMHgwZiwgMHgyYSwKKwkweDEwLCAweDBlLAorCTB4MTEsIDB4MDAsCisJMHgxMiwgMHg4ZCwKKwkweDEzLCAweDAwLAorCTB4MTQsIDB4MDAsCisJMHgxNSwgMHgxMSwKKwkweDE2LCAweDAxLAorCTB4MTcsIDB4ZGEsCisJMHgxOCwgMHg0MCwKKwkweDE5LCAweDgwLAorCTB4MWEsIDB4MDAsCisJMHgxYiwgMHg0MiwKKwkweDFjLCAweGE5LAorCTB4MzAsIDB4NjYsCisJMHgzMSwgMHg5MCwKKwkweDMyLCAweDAxLAorCTB4MzQsIDB4MDAsCisJMHgzNSwgMHgwMCwKKwkweDM2LCAweDIwLAorCTB4MzgsIDB4MDMsCisJMHgzOSwgMHgyMCwKKwkweDNhLCAweDg4LAorCTB4NDAsIDB4MDAsCisJMHg0MSwgMHhmZiwKKwkweDQyLCAweGZmLAorCTB4NDMsIDB4ZmYsCisJMHg0NCwgMHhmZiwKKwkweDQ1LCAweGZmLAorCTB4NDYsIDB4ZmYsCisJMHg0NywgMHhmZiwKKwkweDQ4LCAweGZmLAorCTB4NDksIDB4ZmYsCisJMHg0YSwgMHhmZiwKKwkweDRiLCAweGZmLAorCTB4NGMsIDB4ZmYsCisJMHg0ZCwgMHhmZiwKKwkweDRlLCAweGZmLAorCTB4NGYsIDB4ZmYsCisJMHg1MCwgMHhmZiwKKwkweDUxLCAweGZmLAorCTB4NTIsIDB4ZmYsCisJMHg1MywgMHhmZiwKKwkweDU0LCAweGY0IC8qMHhmZiovLAorCTB4NTUsIDB4ZmYsCisJMHg1NiwgMHhmZiwKKwkweDU3LCAweGZmLAorCTB4NTgsIDB4NDAsCisJMHg1OSwgMHg0NywKKwkweDVhLCAweDA2IC8qMHgwMyovLAorCTB4NWIsIDB4ODMsCisJMHg1ZCwgMHgwNiwKKwkweDVlLCAweDAwLAorCTB4ODAsIDB4MzAsIC8qIHdpbmRvdyBkZWZpbmVkIHNjYWxlciBvcGVyYXRpb24sIHRhc2sgQSBhbmQgQiBlbmFibGVkICovCisJMHg4MSwgMHgwMywgLyogdXNlIHNjYWxlciBkYXRhcGF0aCBnZW5lcmF0ZWQgViAqLworCTB4ODMsIDB4MDAsCisJMHg4NCwgMHgwMCwKKwkweDg1LCAweDAwLAorCTB4ODYsIDB4NDUsCisJMHg4NywgMHgzMSwKKwkweDg4LCAweGMwLAorCTB4OTAsIDB4MDIsIC8qIHRhc2sgQSBwcm9jZXNzIHRvcCBmaWVsZCAqLworCTB4OTEsIDB4MDgsCisJMHg5MiwgMHgwOSwKKwkweDkzLCAweDgwLAorCTB4OTQsIDB4MDYsCisJMHg5NSwgMHgwMCwKKwkweDk2LCAweGMwLAorCTB4OTcsIDB4MDIsCisJMHg5OCwgMHgxMiwKKwkweDk5LCAweDAwLAorCTB4OWEsIDB4ZjIsCisJMHg5YiwgMHgwMCwKKwkweDljLCAweGQwLAorCTB4OWQsIDB4MDIsCisJMHg5ZSwgMHhmMiwKKwkweDlmLCAweDAwLAorCTB4YTAsIDB4MDEsCisJMHhhMSwgMHgwMSwKKwkweGEyLCAweDAxLAorCTB4YTQsIDB4ODAsCisJMHhhNSwgMHg0MCwKKwkweGE2LCAweDQwLAorCTB4YTgsIDB4MDAsCisJMHhhOSwgMHgwNCwKKwkweGFhLCAweDAwLAorCTB4YWMsIDB4MDAsCisJMHhhZCwgMHgwMiwKKwkweGFlLCAweDAwLAorCTB4YjAsIDB4MDAsCisJMHhiMSwgMHgwNCwKKwkweGIyLCAweDAwLAorCTB4YjMsIDB4MDQsCisJMHhiNCwgMHgwMCwKKwkweGI4LCAweDAwLAorCTB4YmMsIDB4MDAsCisJMHhjMCwgMHgwMywJLyogdGFzayBCIHByb2Nlc3MgYm90dG9tIGZpZWxkICovCisJMHhjMSwgMHgwOCwKKwkweGMyLCAweDA5LAorCTB4YzMsIDB4ODAsCisJMHhjNCwgMHgwNiwKKwkweGM1LCAweDAwLAorCTB4YzYsIDB4YzAsCisJMHhjNywgMHgwMiwKKwkweGM4LCAweDEyLAorCTB4YzksIDB4MDAsCisJMHhjYSwgMHhmMiwKKwkweGNiLCAweDAwLAorCTB4Y2MsIDB4ZDAsCisJMHhjZCwgMHgwMiwKKwkweGNlLCAweGYyLAorCTB4Y2YsIDB4MDAsCisJMHhkMCwgMHgwMSwKKwkweGQxLCAweDAxLAorCTB4ZDIsIDB4MDEsCisJMHhkNCwgMHg4MCwKKwkweGQ1LCAweDQwLAorCTB4ZDYsIDB4NDAsCisJMHhkOCwgMHgwMCwKKwkweGQ5LCAweDA0LAorCTB4ZGEsIDB4MDAsCisJMHhkYywgMHgwMCwKKwkweGRkLCAweDAyLAorCTB4ZGUsIDB4MDAsCisJMHhlMCwgMHgwMCwKKwkweGUxLCAweDA0LAorCTB4ZTIsIDB4MDAsCisJMHhlMywgMHgwNCwKKwkweGU0LCAweDAwLAorCTB4ZTgsIDB4MDAsCisJMHg4OCwgMHhmMCwgLyogRW5kIG9mIG9yaWdpbmFsIHN0YXRpYyBsaXN0ICovCisJMHgwMCwgMHgwMCwgLyogVGVybWluYXRvciAocmVnIDB4MDAgaXMgcmVhZC1vbmx5KSAqLworfTsKKworc3RhdGljIGludCB3cml0ZV9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3sKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgaW50IHdyaXRlX3JlZ3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggKnJlZ3MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyByZWdzW2ldICE9IDB4MDA7IGkgKz0gMikKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdzW2ldLCByZWdzW2kgKyAxXSkgPCAwKQorCQkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc19zYWE3MTE1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHdpc19zYWE3MTE1ICpkZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfU19JTlBVVDoKKwl7CisJCWludCAqaW5wdXQgPSBhcmc7CisKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIDB4MDIsIDB4QzAgfCAqaW5wdXQpOworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgMHgwOSwKKwkJCQkqaW5wdXQgPCA2ID8gMHg0MCA6IDB4QzApOworCQlicmVhazsKKwl9CisJY2FzZSBERUNPREVSX1NFVF9SRVNPTFVUSU9OOgorCXsKKwkJc3RydWN0IHZpZGVvX2RlY29kZXJfcmVzb2x1dGlvbiAqcmVzID0gYXJnOworCQkvKiBDb3Vyc2UtZ3JhaW5lZCBzY2FsZXIgKi8KKwkJaW50IGhfaW50ZWdlcl9zY2FsZXIgPSByZXMtPndpZHRoIDwgNzA0ID8gNzA0IC8gcmVzLT53aWR0aCA6IDE7CisJCS8qIEZpbmUtZ3JhaW5lZCBzY2FsZXIgdG8gdGFrZSBjYXJlIG9mIHJlbWFpbmRlciAqLworCQlpbnQgaF9zY2FsaW5nX2luY3JlbWVudCA9ICg3MDQgLyBoX2ludGVnZXJfc2NhbGVyKSAqCisJCQkJCTEwMjQgLyByZXMtPndpZHRoOworCQkvKiBGaW5lLWdyYWluZWQgc2NhbGVyIG9ubHkgKi8KKwkJaW50IHZfc2NhbGluZ19pbmNyZW1lbnQgPSAoZGVjLT5ub3JtICYgVjRMMl9TVERfTlRTQyA/CisJCQkJMjQwIDogMjg4KSAqIDEwMjQgLyByZXMtPmhlaWdodDsKKwkJdTggcmVnc1tdID0geworCQkJMHg4OCwJMHhjMCwKKwkJCTB4OWMsCXJlcy0+d2lkdGggJiAweGZmLAorCQkJMHg5ZCwJcmVzLT53aWR0aCA+PiA4LAorCQkJMHg5ZSwJcmVzLT5oZWlnaHQgJiAweGZmLAorCQkJMHg5ZiwJcmVzLT5oZWlnaHQgPj4gOCwKKwkJCTB4YTAsCWhfaW50ZWdlcl9zY2FsZXIsCisJCQkweGExLAkxLAorCQkJMHhhMiwJMSwKKwkJCTB4YTgsCWhfc2NhbGluZ19pbmNyZW1lbnQgJiAweGZmLAorCQkJMHhhOSwJaF9zY2FsaW5nX2luY3JlbWVudCA+PiA4LAorCQkJMHhhYywJKGhfc2NhbGluZ19pbmNyZW1lbnQgLyAyKSAmIDB4ZmYsCisJCQkweGFkLAkoaF9zY2FsaW5nX2luY3JlbWVudCAvIDIpID4+IDgsCisJCQkweGIwLAl2X3NjYWxpbmdfaW5jcmVtZW50ICYgMHhmZiwKKwkJCTB4YjEsCXZfc2NhbGluZ19pbmNyZW1lbnQgPj4gOCwKKwkJCTB4YjIsCXZfc2NhbGluZ19pbmNyZW1lbnQgJiAweGZmLAorCQkJMHhiMywJdl9zY2FsaW5nX2luY3JlbWVudCA+PiA4LAorCQkJMHhjYywJcmVzLT53aWR0aCAmIDB4ZmYsCisJCQkweGNkLAlyZXMtPndpZHRoID4+IDgsCisJCQkweGNlLAlyZXMtPmhlaWdodCAmIDB4ZmYsCisJCQkweGNmLAlyZXMtPmhlaWdodCA+PiA4LAorCQkJMHhkMCwJaF9pbnRlZ2VyX3NjYWxlciwKKwkJCTB4ZDEsCTEsCisJCQkweGQyLAkxLAorCQkJMHhkOCwJaF9zY2FsaW5nX2luY3JlbWVudCAmIDB4ZmYsCisJCQkweGQ5LAloX3NjYWxpbmdfaW5jcmVtZW50ID4+IDgsCisJCQkweGRjLAkoaF9zY2FsaW5nX2luY3JlbWVudCAvIDIpICYgMHhmZiwKKwkJCTB4ZGQsCShoX3NjYWxpbmdfaW5jcmVtZW50IC8gMikgPj4gOCwKKwkJCTB4ZTAsCXZfc2NhbGluZ19pbmNyZW1lbnQgJiAweGZmLAorCQkJMHhlMSwJdl9zY2FsaW5nX2luY3JlbWVudCA+PiA4LAorCQkJMHhlMiwJdl9zY2FsaW5nX2luY3JlbWVudCAmIDB4ZmYsCisJCQkweGUzLAl2X3NjYWxpbmdfaW5jcmVtZW50ID4+IDgsCisJCQkweDg4LAkweGYwLAorCQkJMCwJMCwKKwkJfTsKKwkJd3JpdGVfcmVncyhjbGllbnQsIHJlZ3MpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfU19TVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqaW5wdXQgPSBhcmc7CisJCXU4IHJlZ3NbXSA9IHsKKwkJCTB4ODgsCTB4YzAsCisJCQkweDk4LAkqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHgxMiA6IDB4MTYsCisJCQkweDlhLAkqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHhmMiA6IDB4MjAsCisJCQkweDliLAkqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHgwMCA6IDB4MDEsCisJCQkweGM4LAkqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHgxMiA6IDB4MTYsCisJCQkweGNhLAkqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHhmMiA6IDB4MjAsCisJCQkweGNiLAkqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHgwMCA6IDB4MDEsCisJCQkweDg4LAkweGYwLAorCQkJMHgzMCwJKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4NjYgOiAweDAwLAorCQkJMHgzMSwJKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4OTAgOiAweGUwLAorCQkJMCwJMCwKKwkJfTsKKwkJd3JpdGVfcmVncyhjbGllbnQsIHJlZ3MpOworCQlkZWMtPm5vcm0gPSAqaW5wdXQ7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkJyaWdodG5lc3MiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMjU1OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMTI4OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkNvbnRyYXN0Iiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDEyNzsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDY0OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiU2F0dXJhdGlvbiIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAxMjc7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSA2NDsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiSHVlIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAtMTI4OworCQkJY3RybC0+bWF4aW11bSA9IDEyNzsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDA7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfU19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDI1NSkKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSAyNTU7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5icmlnaHRuZXNzID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MGEsIGRlYy0+YnJpZ2h0bmVzcyk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDEyNykKKwkJCQlkZWMtPmNvbnRyYXN0ID0gMTI3OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+Y29udHJhc3QgPSAwOworCQkJZWxzZQorCQkJCWRlYy0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MGIsIGRlYy0+Y29udHJhc3QpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDEyNykKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSAxMjc7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MGMsIGRlYy0+c2F0dXJhdGlvbik7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMjcpCisJCQkJZGVjLT5odWUgPSAxMjc7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IC0xMjgpCisJCQkJZGVjLT5odWUgPSAtMTI4OworCQkJZWxzZQorCQkJCWRlYy0+aHVlID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBkLCBkZWMtPmh1ZSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5icmlnaHRuZXNzOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+Y29udHJhc3Q7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPnNhdHVyYXRpb247CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+aHVlOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc19zYWE3MTE1X2RyaXZlcjsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IHdpc19zYWE3MTE1X2NsaWVudF90ZW1wbCA9IHsKKwkubmFtZQkJPSAiU0FBNzExNSAoV0lTKSIsCisJLmRyaXZlcgkJPSAmd2lzX3NhYTcxMTVfZHJpdmVyLAorfTsKKworc3RhdGljIGludCB3aXNfc2FhNzExNV9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3Qgd2lzX3NhYTcxMTUgKmRlYzsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIDA7CisKKwljbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGNsaWVudCwgJndpc19zYWE3MTE1X2NsaWVudF90ZW1wbCwKKwkJCXNpemVvZih3aXNfc2FhNzExNV9jbGllbnRfdGVtcGwpKTsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+YWRkciA9IGFkZHI7CisKKwlkZWMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2lzX3NhYTcxMTUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGVjID09IE5VTEwpIHsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRlYy0+bm9ybSA9IFY0TDJfU1REX05UU0M7CisJZGVjLT5icmlnaHRuZXNzID0gMTI4OworCWRlYy0+Y29udHJhc3QgPSA2NDsKKwlkZWMtPnNhdHVyYXRpb24gPSA2NDsKKwlkZWMtPmh1ZSA9IDA7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjKTsKKworCXByaW50ayhLRVJOX0RFQlVHCisJCSJ3aXMtc2FhNzExNTogaW5pdGlhbGl6aW5nIFNBQTcxMTUgYXQgYWRkcmVzcyAlZCBvbiAlc1xuIiwKKwkJYWRkciwgYWRhcHRlci0+bmFtZSk7CisKKwlpZiAod3JpdGVfcmVncyhjbGllbnQsIGluaXRpYWxfcmVnaXN0ZXJzKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkid2lzLXNhYTcxMTU6IGVycm9yIGluaXRpYWxpemluZyBTQUE3MTE1XG4iKTsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJa2ZyZWUoZGVjKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfc2FhNzExNV9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd2lzX3NhYTcxMTUgKmRlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCByOworCisJciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWtmcmVlKGNsaWVudCk7CisJa2ZyZWUoZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc19zYWE3MTE1X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJXSVMgU0FBNzExNSBJMkMgZHJpdmVyIiwKKwl9LAorCS5pZAkJPSBJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTUsCisJLmRldGFjaF9jbGllbnQJPSB3aXNfc2FhNzExNV9kZXRhY2gsCisJLmNvbW1hbmQJPSB3aXNfc2FhNzExNV9jb21tYW5kLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2lzX3NhYTcxMTVfaW5pdCh2b2lkKQoreworCWludCByOworCisJciA9IGkyY19hZGRfZHJpdmVyKCZ3aXNfc2FhNzExNV9kcml2ZXIpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJcmV0dXJuIHdpc19pMmNfYWRkX2RyaXZlcih3aXNfc2FhNzExNV9kcml2ZXIuaWQsIHdpc19zYWE3MTE1X2RldGVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3aXNfc2FhNzExNV9jbGVhbnVwKHZvaWQpCit7CisJd2lzX2kyY19kZWxfZHJpdmVyKHdpc19zYWE3MTE1X2RldGVjdCk7CisJaTJjX2RlbF9kcml2ZXIoJndpc19zYWE3MTE1X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHdpc19zYWE3MTE1X2luaXQpOworbW9kdWxlX2V4aXQod2lzX3NhYTcxMTVfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNvbnktdHVuZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNvbnktdHVuZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTk3ZmI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc29ueS10dW5lci5jCkBAIC0wLDAgKzEsNzQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorCisjaW5jbHVkZSAid2lzLWkyYy5oIgorCisvKiAjZGVmaW5lIE1QWF9ERUJVRyAqLworCisvKiBBUyhJRi9NUFgpIHBpbjogICAgICBMT1cgICAgICBISUdIL09QRU4KKyAqIElGL01QWCBhZGRyZXNzOiAgIDB4NDIvMHg0MCAgIDB4NDMvMHg0NAorICovCisjZGVmaW5lIElGX0kyQ19BRERSCTB4NDMKKyNkZWZpbmUgTVBYX0kyQ19BRERSCTB4NDQKKworc3RhdGljIHY0bDJfc3RkX2lkIGZvcmNlX2JhbmQ7CitzdGF0aWMgY2hhciBmb3JjZV9iYW5kX3N0cltdID0gIi0iOworbW9kdWxlX3BhcmFtX3N0cmluZyhmb3JjZV9iYW5kLCBmb3JjZV9iYW5kX3N0ciwgc2l6ZW9mKGZvcmNlX2JhbmRfc3RyKSwgMDY0NCk7CitzdGF0aWMgaW50IGZvcmNlX21weF9tb2RlID0gLTE7Cittb2R1bGVfcGFyYW0oZm9yY2VfbXB4X21vZGUsIGludCwgMDY0NCk7CisKKy8qIFN0b3JlIHR1bmVyIGluZm8gaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHR1bmVyLmMsIHNvIG1heWJlIHdlIGNhbiBwdXQgdGhlCisgKiBTb255IHR1bmVyIHN1cHBvcnQgaW4gdGhlcmUuICovCitzdHJ1Y3Qgc29ueV90dW5lcnR5cGUgeworCWNoYXIgKm5hbWU7CisJdW5zaWduZWQgY2hhciBWZW5kb3I7IC8qIHVudXNlZCBoZXJlICovCisJdW5zaWduZWQgY2hhciBUeXBlOyAvKiB1bnVzZWQgaGVyZSAqLworCisJdW5zaWduZWQgc2hvcnQgdGhyZXNoMTsgLyogIGJhbmQgc3dpdGNoIFZIRl9MTyA8PT4gVkhGX0hJICovCisJdW5zaWduZWQgc2hvcnQgdGhyZXNoMjsgLyogIGJhbmQgc3dpdGNoIFZIRl9ISSA8PT4gVUhGICovCisJdW5zaWduZWQgY2hhciBWSEZfTDsKKwl1bnNpZ25lZCBjaGFyIFZIRl9IOworCXVuc2lnbmVkIGNoYXIgVUhGOworCXVuc2lnbmVkIGNoYXIgY29uZmlnOworCXVuc2lnbmVkIHNob3J0IElGUENvZmY7Cit9OworCisvKiBUaGlzIGFycmF5IGlzIGluZGV4ZWQgYnkgKHR1bmVyX3R5cGUgLSAyMDApICovCitzdGF0aWMgc3RydWN0IHNvbnlfdHVuZXJ0eXBlIHNvbnlfdHVuZXJzW10gPSB7CisJeyAiU29ueSBQQUwrU0VDQU0gKEJURi1QRzQ3MlopIiwgMCwgMCwKKwkgIDE2KjE0NC4yNSwgMTYqNDI3LjI1LCAweDAxLCAweDAyLCAweDA0LCAweGM2LCA2MjN9LAorCXsgIlNvbnkgTlRTQ19KUCAoQlRGLVBLNDY3WikiLCAwLCAwLAorCSAgMTYqMjIwLjI1LCAxNio0NjcuMjUsIDB4MDEsIDB4MDIsIDB4MDQsIDB4YzYsIDk0MH0sCisJeyAiU29ueSBOVFNDIChCVEYtUEI0NjNaKSIsIDAsIDAsCisJICAxNioxMzAuMjUsIDE2KjM2NC4yNSwgMHgwMSwgMHgwMiwgMHgwNCwgMHhjNiwgNzMyfSwKK307CisKK3N0cnVjdCB3aXNfc29ueV90dW5lciB7CisJaW50IHR5cGU7CisJdjRsMl9zdGRfaWQgc3RkOworCXVuc2lnbmVkIGludCBmcmVxOworCWludCBtcHhtb2RlOworCXUzMiBhdWRtb2RlOworfTsKKworLyogQmFzaWNhbGx5IHRoZSBzYW1lIGFzIGRlZmF1bHRfc2V0X3R2X2ZyZXEoKSBpbiB0dW5lci5jICovCitzdGF0aWMgaW50IHNldF9mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBmcmVxKQoreworCXN0cnVjdCB3aXNfc29ueV90dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWNoYXIgKmJhbmRfbmFtZTsKKwlpbnQgbjsKKwlpbnQgYmFuZF9zZWxlY3Q7CisJc3RydWN0IHNvbnlfdHVuZXJ0eXBlICp0dW47CisJdTggYnVmZmVyWzRdOworCisJdHVuID0gJnNvbnlfdHVuZXJzW3QtPnR5cGUgLSAyMDBdOworCWlmIChmcmVxIDwgdHVuLT50aHJlc2gxKSB7CisJCWJhbmRfbmFtZSA9ICJWSEZfTCI7CisJCWJhbmRfc2VsZWN0ID0gdHVuLT5WSEZfTDsKKwl9IGVsc2UgaWYgKGZyZXEgPCB0dW4tPnRocmVzaDIpIHsKKwkJYmFuZF9uYW1lID0gIlZIRl9IIjsKKwkJYmFuZF9zZWxlY3QgPSB0dW4tPlZIRl9IOworCX0gZWxzZSB7CisJCWJhbmRfbmFtZSA9ICJVSEYiOworCQliYW5kX3NlbGVjdCA9IHR1bi0+VUhGOworCX0KKwlwcmludGsoS0VSTl9ERUJVRyAid2lzLXNvbnktdHVuZXI6IHR1bmluZyB0byBmcmVxdWVuY3kgJWQuJTA0ZCAoJXMpXG4iLAorCQkJZnJlcSAvIDE2LCAoZnJlcSAlIDE2KSAqIDYyNSwgYmFuZF9uYW1lKTsKKwluID0gZnJlcSArIHR1bi0+SUZQQ29mZjsKKworCWJ1ZmZlclswXSA9IG4gPj4gODsKKwlidWZmZXJbMV0gPSBuICYgMHhmZjsKKwlidWZmZXJbMl0gPSB0dW4tPmNvbmZpZzsKKwlidWZmZXJbM10gPSBiYW5kX3NlbGVjdDsKKwlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWZmZXIsIDQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXB4X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBkZXYsIGludCBhZGRyLCBpbnQgdmFsKQoreworCXU4IGJ1ZmZlcls1XTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisKKwlidWZmZXJbMF0gPSBkZXY7CisJYnVmZmVyWzFdID0gYWRkciA+PiA4OworCWJ1ZmZlclsyXSA9IGFkZHIgJiAweGZmOworCWJ1ZmZlclszXSA9IHZhbCA+PiA4OworCWJ1ZmZlcls0XSA9IHZhbCAmIDB4ZmY7CisJbXNnLmFkZHIgPSBNUFhfSTJDX0FERFI7CisJbXNnLmZsYWdzID0gMDsKKwltc2cubGVuID0gNTsKKwltc2cuYnVmID0gYnVmZmVyOworCWkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsICZtc2csIDEpOworCXJldHVybiAwOworfQorCisvKgorICogTVBYIHJlZ2lzdGVyIHZhbHVlcyBmb3IgdGhlIEJURi1QRzQ3Mlo6CisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTV8gICAgIE5JQ0FNXyAgU0NBUlRfCisgKiAgICAgICAgICBNT0RVUyAgU09VUkNFICAgIEFDQiAgIFBSRVNDQUwgUFJFU0NBTCBQUkVTQ0FMIFNZU1RFTSAgVk9MVU1FCisgKiAgICAgICAgIDEwLzAwMzAgMTIvMDAwOCAxMi8wMDEzIDEyLzAwMEUgMTIvMDAxMCAxMi8wMDAwIDEwLzAwMjAgMTIvMDAwMAorICogICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEF1dG8gICAgIDEwMDMgICAgMDAyMCAgICAwMTAwICAgIDI2MDMgICAgNTAwMCAgICBYWFhYICAgIDAwMDEgICAgNzUwMAorICoKKyAqIEIvRworICogIE1vbm8gICAgMTAwMyAgICAwMDIwICAgIDAxMDAgICAgMjYwMyAgICA1MDAwICAgIFhYWFggICAgMDAwMyAgICA3NTAwCisgKiAgQTIgICAgICAxMDAzICAgIDAwMjAgICAgMDEwMCAgICAyNjAxICAgIDUwMDAgICAgWFhYWCAgICAwMDAzICAgIDc1MDAKKyAqICBOSUNBTSAgIDEwMDMgICAgMDEyMCAgICAwMTAwICAgIDI2MDMgICAgNTAwMCAgICBYWFhYICAgIDAwMDggICAgNzUwMAorICoKKyAqIEkKKyAqICBNb25vICAgIDEwMDMgICAgMDAyMCAgICAwMTAwICAgIDI2MDMgICAgNzkwMCAgICBYWFhYICAgIDAwMEEgICAgNzUwMAorICogIE5JQ0FNICAgMTAwMyAgICAwMTIwICAgIDAxMDAgICAgMjYwMyAgICA3OTAwICAgIFhYWFggICAgMDAwQSAgICA3NTAwCisgKgorICogRC9LCisgKiAgTW9ubyAgICAxMDAzICAgIDAwMjAgICAgMDEwMCAgICAyNjAzICAgIDUwMDAgICAgWFhYWCAgICAwMDA0ICAgIDc1MDAKKyAqICBBMi0xICAgIDEwMDMgICAgMDAyMCAgICAwMTAwICAgIDI2MDEgICAgNTAwMCAgICBYWFhYICAgIDAwMDQgICAgNzUwMAorICogIEEyLTIgICAgMTAwMyAgICAwMDIwICAgIDAxMDAgICAgMjYwMSAgICA1MDAwICAgIFhYWFggICAgMDAwNSAgICA3NTAwCisgKiAgQTItMyAgICAxMDAzICAgIDAwMjAgICAgMDEwMCAgICAyNjAxICAgIDUwMDAgICAgWFhYWCAgICAwMDA3ICAgIDc1MDAKKyAqICBOSUNBTSAgIDEwMDMgICAgMDEyMCAgICAwMTAwICAgIDI2MDMgICAgNTAwMCAgICBYWFhYICAgIDAwMEIgICAgNzUwMAorICoKKyAqIEwvTCcKKyAqICBNb25vICAgIDAwMDMgICAgMDIwMCAgICAwMTAwICAgIDdDMDMgICAgNTAwMCAgICAyMjAwICAgIDAwMDkgICAgNzUwMAorICogIE5JQ0FNICAgMDAwMyAgICAwMTIwICAgIDAxMDAgICAgN0MwMyAgICA1MDAwICAgIFhYWFggICAgMDAwOSAgICA3NTAwCisgKgorICogTQorICogIE1vbm8gICAgMTAwMyAgICAwMjAwICAgIDAxMDAgICAgMkIwMyAgICA1MDAwICAgIDJCMDAgICAgMDAwMiAgICA3NTAwCisgKgorICogRm9yIEFzaWEsIHJlcGxhY2UgdGhlIDB4MjZYWCBpbiBGTV9QUkVTQ0FMRSB3aXRoIDB4MTRYWC4KKyAqCisgKiBCaWxpbmd1YWwgc2VsZWN0aW9uIGluIEEyL05JQ0FNOgorICoKKyAqICAgICAgICAgSGlnaCBieXRlIG9mIFNPVVJDRSAgICAgTGVmdCBjaGFuICAgUmlnaHQgY2hhbgorICogICAgICAgICAgICAgICAgIDB4MDEgICAgICAgICAgICAgIE1BSU4gICAgICAgICBTVUIKKyAqICAgICAgICAgICAgICAgICAweDAzICAgICAgICAgICAgICBNQUlOICAgICAgICAgTUFJTgorICogICAgICAgICAgICAgICAgIDB4MDQgICAgICAgICAgICAgIFNVQiAgICAgICAgICBTVUIKKyAqCisgKiBGb3JjZSBtb25vIGluIE5JQ0FNIGJ5IHNldHRpbmcgdGhlIGhpZ2ggYnl0ZSBvZiBTT1VSQ0UgdG8gMHgwMiAoTC9MJykgb3IKKyAqIDB4MDAgKGFsbCBvdGhlciBiYW5kcykuICBGb3JjZSBtb25vIGluIEEyIHdpdGggRk1PTk9fQTI6CisgKgorICogICAgICAgICAgICAgICAgICAgICAgRk1PTk9fQTIKKyAqICAgICAgICAgICAgICAgICAgICAgIDEwLzAwMjIKKyAqICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tCisgKiAgICAgRm9yY2VkIG1vbm8gT04gICAgIDA3RjAKKyAqICAgICBGb3JjZWQgbW9ubyBPRkYgICAgMDE5MAorICovCisKK3N0YXRpYyBzdHJ1Y3QgeworCWVudW0geyBBVURfTU9OTywgQVVEX0EyLCBBVURfTklDQU0sIEFVRF9OSUNBTV9MIH0gYXVkaW9fbW9kZTsKKwl1MTYgbW9kdXM7CisJdTE2IHNvdXJjZTsKKwl1MTYgYWNiOworCXUxNiBmbV9wcmVzY2FsZTsKKwl1MTYgbmljYW1fcHJlc2NhbGU7CisJdTE2IHNjYXJ0X3ByZXNjYWxlOworCXUxNiBzeXN0ZW07CisJdTE2IHZvbHVtZTsKK30gbXB4X2F1ZGlvX21vZGVzW10gPSB7CisJLyogQXV0byAqLwl7IEFVRF9NT05PLAkweDEwMDMsIDB4MDAyMCwgMHgwMTAwLCAweDI2MDMsCisJCQkJCTB4NTAwMCwgMHgwMDAwLCAweDAwMDEsIDB4NzUwMCB9LAorCS8qIEIvRyBNb25vICovCXsgQVVEX01PTk8sCTB4MTAwMywgMHgwMDIwLCAweDAxMDAsIDB4MjYwMywKKwkJCQkJMHg1MDAwLCAweDAwMDAsIDB4MDAwMywgMHg3NTAwIH0sCisJLyogQi9HIEEyICovCXsgQVVEX0EyLAkweDEwMDMsIDB4MDAyMCwgMHgwMTAwLCAweDI2MDEsCisJCQkJCTB4NTAwMCwgMHgwMDAwLCAweDAwMDMsIDB4NzUwMCB9LAorCS8qIEIvRyBOSUNBTSAqLyB7IEFVRF9OSUNBTSwJMHgxMDAzLCAweDAxMjAsIDB4MDEwMCwgMHgyNjAzLAorCQkJCQkweDUwMDAsIDB4MDAwMCwgMHgwMDA4LCAweDc1MDAgfSwKKwkvKiBJIE1vbm8gKi8JeyBBVURfTU9OTywJMHgxMDAzLCAweDAwMjAsIDB4MDEwMCwgMHgyNjAzLAorCQkJCQkweDc5MDAsIDB4MDAwMCwgMHgwMDBBLCAweDc1MDAgfSwKKwkvKiBJIE5JQ0FNICovCXsgQVVEX05JQ0FNLAkweDEwMDMsIDB4MDEyMCwgMHgwMTAwLCAweDI2MDMsCisJCQkJCTB4NzkwMCwgMHgwMDAwLCAweDAwMEEsIDB4NzUwMCB9LAorCS8qIEQvSyBNb25vICovCXsgQVVEX01PTk8sCTB4MTAwMywgMHgwMDIwLCAweDAxMDAsIDB4MjYwMywKKwkJCQkJMHg1MDAwLCAweDAwMDAsIDB4MDAwNCwgMHg3NTAwIH0sCisJLyogRC9LIEEyLTEgKi8JeyBBVURfQTIsCTB4MTAwMywgMHgwMDIwLCAweDAxMDAsIDB4MjYwMSwKKwkJCQkJMHg1MDAwLCAweDAwMDAsIDB4MDAwNCwgMHg3NTAwIH0sCisJLyogRC9LIEEyLTIgKi8JeyBBVURfQTIsCTB4MTAwMywgMHgwMDIwLCAweDAxMDAsIDB4MjYwMSwKKwkJCQkJMHg1MDAwLCAweDAwMDAsIDB4MDAwNSwgMHg3NTAwIH0sCisJLyogRC9LIEEyLTMgKi8JeyBBVURfQTIsCTB4MTAwMywgMHgwMDIwLCAweDAxMDAsIDB4MjYwMSwKKwkJCQkJMHg1MDAwLCAweDAwMDAsIDB4MDAwNywgMHg3NTAwIH0sCisJLyogRC9LIE5JQ0FNICovCXsgQVVEX05JQ0FNLAkweDEwMDMsIDB4MDEyMCwgMHgwMTAwLCAweDI2MDMsCisJCQkJCTB4NTAwMCwgMHgwMDAwLCAweDAwMEIsIDB4NzUwMCB9LAorCS8qIEwvTCcgTW9ubyAqLwl7IEFVRF9NT05PLAkweDAwMDMsIDB4MDIwMCwgMHgwMTAwLCAweDdDMDMsCisJCQkJCTB4NTAwMCwgMHgyMjAwLCAweDAwMDksIDB4NzUwMCB9LAorCS8qIEwvTCcgTklDQU0gKi97IEFVRF9OSUNBTV9MLAkweDAwMDMsIDB4MDEyMCwgMHgwMTAwLCAweDdDMDMsCisJCQkJCTB4NTAwMCwgMHgwMDAwLCAweDAwMDksIDB4NzUwMCB9LAorfTsKKworI2RlZmluZSBNUFhfTlVNX01PREVTCUFSUkFZX1NJWkUobXB4X2F1ZGlvX21vZGVzKQorCitzdGF0aWMgaW50IG1weF9zZXR1cChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3aXNfc29ueV90dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXUxNiBzb3VyY2UgPSAwOworCXU4IGJ1ZmZlclszXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisKKwkvKiByZXNldCBNUFggKi8KKwlidWZmZXJbMF0gPSAweDAwOworCWJ1ZmZlclsxXSA9IDB4ODA7CisJYnVmZmVyWzJdID0gMHgwMDsKKwltc2cuYWRkciA9IE1QWF9JMkNfQUREUjsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSAzOworCW1zZy5idWYgPSBidWZmZXI7CisJaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgJm1zZywgMSk7CisJYnVmZmVyWzFdID0gMHgwMDsKKwlpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmbXNnLCAxKTsKKworCWlmIChtcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uYXVkaW9fbW9kZSAhPSBBVURfTU9OTykgeworCQlzd2l0Y2ggKHQtPmF1ZG1vZGUpIHsKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKKwkJCXN3aXRjaCAobXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLmF1ZGlvX21vZGUpIHsKKwkJCWNhc2UgQVVEX0EyOgorCQkJCXNvdXJjZSA9IG1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5zb3VyY2U7CisJCQkJYnJlYWs7CisJCQljYXNlIEFVRF9OSUNBTToKKwkJCQlzb3VyY2UgPSAweDAwMDA7CisJCQkJYnJlYWs7CisJCQljYXNlIEFVRF9OSUNBTV9MOgorCQkJCXNvdXJjZSA9IDB4MDIwMDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCQkJc291cmNlID0gbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLnNvdXJjZTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKKwkJCXNvdXJjZSA9IDB4MDMwMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKKwkJCXNvdXJjZSA9IDB4MDQwMDsKKwkJCWJyZWFrOworCQl9CisJCXNvdXJjZSB8PSBtcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uc291cmNlICYgMHgwMGZmOworCX0gZWxzZQorCQlzb3VyY2UgPSBtcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uc291cmNlOworCisJbXB4X3dyaXRlKGNsaWVudCwgMHgxMCwgMHgwMDMwLCBtcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0ubW9kdXMpOworCW1weF93cml0ZShjbGllbnQsIDB4MTIsIDB4MDAwOCwgc291cmNlKTsKKwltcHhfd3JpdGUoY2xpZW50LCAweDEyLCAweDAwMTMsIG1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5hY2IpOworCW1weF93cml0ZShjbGllbnQsIDB4MTIsIDB4MDAwZSwKKwkJCW1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5mbV9wcmVzY2FsZSk7CisJbXB4X3dyaXRlKGNsaWVudCwgMHgxMiwgMHgwMDEwLAorCQkJbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLm5pY2FtX3ByZXNjYWxlKTsKKwltcHhfd3JpdGUoY2xpZW50LCAweDEyLCAweDAwMGQsCisJCQltcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uc2NhcnRfcHJlc2NhbGUpOworCW1weF93cml0ZShjbGllbnQsIDB4MTAsIDB4MDAyMCwgbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLnN5c3RlbSk7CisJbXB4X3dyaXRlKGNsaWVudCwgMHgxMiwgMHgwMDAwLCBtcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0udm9sdW1lKTsKKwlpZiAobXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLmF1ZGlvX21vZGUgPT0gQVVEX0EyKQorCQltcHhfd3JpdGUoY2xpZW50LCAweDEwLCAweDAwMjIsCisJCQl0LT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9NT05PID8gIDB4MDdmMCA6IDB4MDE5MCk7CisKKyNpZmRlZiBNUFhfREVCVUcKKwl7CisJCXU4IGJ1ZjFbM10sIGJ1ZjJbMl07CisJCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgIndpcy1zb255LXR1bmVyOiBNUFggcmVnaXN0ZXJzOiAlMDR4ICUwNHggIgorCQkJCSIlMDR4ICUwNHggJTA0eCAlMDR4ICUwNHggJTA0eFxuIiwKKwkJCQltcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0ubW9kdXMsCisJCQkJc291cmNlLAorCQkJCW1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5hY2IsCisJCQkJbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLmZtX3ByZXNjYWxlLAorCQkJCW1weF9hdWRpb19tb2Rlc1t0LT5tcHhtb2RlXS5uaWNhbV9wcmVzY2FsZSwKKwkJCQltcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0uc2NhcnRfcHJlc2NhbGUsCisJCQkJbXB4X2F1ZGlvX21vZGVzW3QtPm1weG1vZGVdLnN5c3RlbSwKKwkJCQltcHhfYXVkaW9fbW9kZXNbdC0+bXB4bW9kZV0udm9sdW1lKTsKKwkJYnVmMVswXSA9IDB4MTE7CisJCWJ1ZjFbMV0gPSAweDAwOworCQlidWYxWzJdID0gMHg3ZTsKKwkJbXNnc1swXS5hZGRyID0gTVBYX0kyQ19BRERSOworCQltc2dzWzBdLmZsYWdzID0gMDsKKwkJbXNnc1swXS5sZW4gPSAzOworCQltc2dzWzBdLmJ1ZiA9IGJ1ZjE7CisJCW1zZ3NbMV0uYWRkciA9IE1QWF9JMkNfQUREUjsKKwkJbXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEOworCQltc2dzWzFdLmxlbiA9IDI7CisJCW1zZ3NbMV0uYnVmID0gYnVmMjsKKwkJaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgMik7CisJCXByaW50ayhLRVJOX0RFQlVHICJ3aXMtc29ueS10dW5lcjogTVBYIHN5c3RlbTogJTAyeCUwMnhcbiIsCisJCQkJYnVmMlswXSwgYnVmMlsxXSk7CisJCWJ1ZjFbMF0gPSAweDExOworCQlidWYxWzFdID0gMHgwMjsKKwkJYnVmMVsyXSA9IDB4MDA7CisJCWkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDIpOworCQlwcmludGsoS0VSTl9ERUJVRyAid2lzLXNvbnktdHVuZXI6IE1QWCBzdGF0dXM6ICUwMnglMDJ4XG4iLAorCQkJCWJ1ZjJbMF0sIGJ1ZjJbMV0pOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorCisvKgorICogSUYgY29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIHRoZSBCVEYtUEc0NzJaOgorICoKKyAqCUIvRzogMHg5NCAweDcwIDB4NDkKKyAqCUk6ICAgMHgxNCAweDcwIDB4NGEKKyAqCUQvSzogMHgxNCAweDcwIDB4NGIKKyAqCUw6ICAgMHgwNCAweDcwIDB4NGIKKyAqCUwnOiAgMHg0NCAweDcwIDB4NTMKKyAqCU06ICAgMHg1MCAweDMwIDB4NGMKKyAqLworCitzdGF0aWMgaW50IHNldF9pZihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3aXNfc29ueV90dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXU4IGJ1ZmZlcls0XTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisJaW50IGRlZmF1bHRfbXB4X21vZGUgPSAwOworCisJLyogY29uZmlndXJlIElGICovCisJYnVmZmVyWzBdID0gMDsKKwlpZiAodC0+c3RkICYgVjRMMl9TVERfUEFMX0JHKSB7CisJCWJ1ZmZlclsxXSA9IDB4OTQ7CisJCWJ1ZmZlclsyXSA9IDB4NzA7CisJCWJ1ZmZlclszXSA9IDB4NDk7CisJCWRlZmF1bHRfbXB4X21vZGUgPSAxOworCX0gZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfUEFMX0kpIHsKKwkJYnVmZmVyWzFdID0gMHgxNDsKKwkJYnVmZmVyWzJdID0gMHg3MDsKKwkJYnVmZmVyWzNdID0gMHg0YTsKKwkJZGVmYXVsdF9tcHhfbW9kZSA9IDQ7CisJfSBlbHNlIGlmICh0LT5zdGQgJiBWNEwyX1NURF9QQUxfREspIHsKKwkJYnVmZmVyWzFdID0gMHgxNDsKKwkJYnVmZmVyWzJdID0gMHg3MDsKKwkJYnVmZmVyWzNdID0gMHg0YjsKKwkJZGVmYXVsdF9tcHhfbW9kZSA9IDY7CisJfSBlbHNlIGlmICh0LT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MKSB7CisJCWJ1ZmZlclsxXSA9IDB4MDQ7CisJCWJ1ZmZlclsyXSA9IDB4NzA7CisJCWJ1ZmZlclszXSA9IDB4NGI7CisJCWRlZmF1bHRfbXB4X21vZGUgPSAxMTsKKwl9CisJbXNnLmFkZHIgPSBJRl9JMkNfQUREUjsKKwltc2cuZmxhZ3MgPSAwOworCW1zZy5sZW4gPSA0OworCW1zZy5idWYgPSBidWZmZXI7CisJaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgJm1zZywgMSk7CisKKwkvKiBTZWxlY3QgTVBYIG1vZGUgaWYgbm90IGZvcmNlZCBieSB0aGUgdXNlciAqLworCWlmIChmb3JjZV9tcHhfbW9kZSA+PSAwIHx8IGZvcmNlX21weF9tb2RlIDwgTVBYX05VTV9NT0RFUykKKwkJdC0+bXB4bW9kZSA9IGZvcmNlX21weF9tb2RlOworCWVsc2UKKwkJdC0+bXB4bW9kZSA9IGRlZmF1bHRfbXB4X21vZGU7CisJcHJpbnRrKEtFUk5fREVCVUcgIndpcy1zb255LXR1bmVyOiBzZXR0aW5nIE1QWCB0byBtb2RlICVkXG4iLAorCQkJdC0+bXB4bW9kZSk7CisJbXB4X3NldHVwKGNsaWVudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dW5lcl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgd2lzX3NvbnlfdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN3aXRjaCAoY21kKSB7CisjaWZkZWYgVFVORVJfU0VUX1RZUEVfQUREUgorCWNhc2UgVFVORVJfU0VUX1RZUEVfQUREUjoKKwl7CisJCXN0cnVjdCB0dW5lcl9zZXR1cCAqdHVuX3NldHVwID0gYXJnOworCQlpbnQgKnR5cGUgPSAmdHVuX3NldHVwLT50eXBlOworI2Vsc2UKKwljYXNlIFRVTkVSX1NFVF9UWVBFOgorCXsKKwkJaW50ICp0eXBlID0gYXJnOworI2VuZGlmCisKKwkJaWYgKHQtPnR5cGUgPj0gMCkgeworCQkJaWYgKHQtPnR5cGUgIT0gKnR5cGUpCisJCQkJcHJpbnRrKEtFUk5fRVJSICJ3aXMtc29ueS10dW5lcjogdHlwZSBhbHJlYWR5ICIKKwkJCQkJInNldCB0byAlZCwgaWdub3JpbmcgcmVxdWVzdCBmb3IgJWRcbiIsCisJCQkJCXQtPnR5cGUsICp0eXBlKTsKKwkJCWJyZWFrOworCQl9CisJCXQtPnR5cGUgPSAqdHlwZTsKKwkJc3dpdGNoICh0LT50eXBlKSB7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEc0NzJaOgorCQkJc3dpdGNoIChmb3JjZV9iYW5kX3N0clswXSkgeworCQkJY2FzZSAnYic6CisJCQljYXNlICdCJzoKKwkJCWNhc2UgJ2cnOgorCQkJY2FzZSAnRyc6CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAid2lzLXNvbnktdHVuZXI6IGZvcmNpbmcgIgorCQkJCQkJInR1bmVyIHRvIFBBTC1CL0cgYmFuZHNcbiIpOworCQkJCWZvcmNlX2JhbmQgPSBWNEwyX1NURF9QQUxfQkc7CisJCQkJYnJlYWs7CisJCQljYXNlICdpJzoKKwkJCWNhc2UgJ0knOgorCQkJCXByaW50ayhLRVJOX0lORk8gIndpcy1zb255LXR1bmVyOiBmb3JjaW5nICIKKwkJCQkJCSJ0dW5lciB0byBQQUwtSSBiYW5kXG4iKTsKKwkJCQlmb3JjZV9iYW5kID0gVjRMMl9TVERfUEFMX0k7CisJCQkJYnJlYWs7CisJCQljYXNlICdkJzoKKwkJCWNhc2UgJ0QnOgorCQkJY2FzZSAnayc6CisJCQljYXNlICdLJzoKKwkJCQlwcmludGsoS0VSTl9JTkZPICJ3aXMtc29ueS10dW5lcjogZm9yY2luZyAiCisJCQkJCQkidHVuZXIgdG8gUEFMLUQvSyBiYW5kc1xuIik7CisJCQkJZm9yY2VfYmFuZCA9IFY0TDJfU1REX1BBTF9JOworCQkJCWJyZWFrOworCQkJY2FzZSAnbCc6CisJCQljYXNlICdMJzoKKwkJCQlwcmludGsoS0VSTl9JTkZPICJ3aXMtc29ueS10dW5lcjogZm9yY2luZyAiCisJCQkJCQkidHVuZXIgdG8gU0VDQU0tTCBiYW5kXG4iKTsKKwkJCQlmb3JjZV9iYW5kID0gVjRMMl9TVERfU0VDQU1fTDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZm9yY2VfYmFuZCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZm9yY2VfYmFuZCkKKwkJCQl0LT5zdGQgPSBmb3JjZV9iYW5kOworCQkJZWxzZQorCQkJCXQtPnN0ZCA9IFY0TDJfU1REX1BBTF9CRzsKKwkJCXNldF9pZihjbGllbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEs0NjdaOgorCQkJdC0+c3RkID0gVjRMMl9TVERfTlRTQ19NX0pQOworCQkJYnJlYWs7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEI0NjNaOgorCQkJdC0+c3RkID0gVjRMMl9TVERfTlRTQ19NOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIndpcy1zb255LXR1bmVyOiB0dW5lciB0eXBlICVkIGlzIG5vdCAiCisJCQkJCSJzdXBwb3J0ZWQgYnkgdGhpcyBtb2R1bGVcbiIsICp0eXBlKTsKKwkJCWJyZWFrOworCQl9CisJCWlmICh0eXBlID49IDApCisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJIndpcy1zb255LXR1bmVyOiB0eXBlIHNldCB0byAlZCAoJXMpXG4iLAorCQkJCXQtPnR5cGUsIHNvbnlfdHVuZXJzW3QtPnR5cGUgLSAyMDBdLm5hbWUpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CisJeworCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJZi0+ZnJlcXVlbmN5ID0gdC0+ZnJlcTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgorCXsKKwkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCXQtPmZyZXEgPSBmLT5mcmVxdWVuY3k7CisJCXNldF9mcmVxKGNsaWVudCwgdC0+ZnJlcSk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19FTlVNU1REOgorCXsKKwkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKnN0ZCA9IGFyZzsKKworCQlzd2l0Y2ggKHQtPnR5cGUpIHsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QRzQ3Mlo6CisJCQlzd2l0Y2ggKHN0ZC0+aW5kZXgpIHsKKwkJCWNhc2UgMDoKKwkJCQl2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RkLAorCQkJCQkJVjRMMl9TVERfUEFMX0JHLCAiUEFMLUIvRyIpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdGQsCisJCQkJCQlWNEwyX1NURF9QQUxfSSwgIlBBTC1JIik7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJdjRsMl92aWRlb19zdGRfY29uc3RydWN0KHN0ZCwKKwkJCQkJCVY0TDJfU1REX1BBTF9ESywgIlBBTC1EL0siKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQl2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RkLAorCQkJCQkJVjRMMl9TVERfU0VDQU1fTCwgIlNFQ0FNLUwiKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3RkLT5pZCA9IDA7IC8qIGhhY2sgdG8gaW5kaWNhdGUgRUlOVkFMICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QSzQ2N1o6CisJCQlpZiAoc3RkLT5pbmRleCAhPSAwKSB7CisJCQkJc3RkLT5pZCA9IDA7IC8qIGhhY2sgdG8gaW5kaWNhdGUgRUlOVkFMICovCisJCQkJYnJlYWs7CisJCQl9CisJCQl2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RkLAorCQkJCQlWNEwyX1NURF9OVFNDX01fSlAsICJOVFNDLUoiKTsKKwkJCWJyZWFrOworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BCNDYzWjoKKwkJCWlmIChzdGQtPmluZGV4ICE9IDApIHsKKwkJCQlzdGQtPmlkID0gMDsgLyogaGFjayB0byBpbmRpY2F0ZSBFSU5WQUwgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdGQsIFY0TDJfU1REX05UU0NfTSwgIk5UU0MiKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19HX1NURDoKKwl7CisJCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7CisKKwkJKnN0ZCA9IHQtPnN0ZDsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKKwkJdjRsMl9zdGRfaWQgb2xkID0gdC0+c3RkOworCisJCXN3aXRjaCAodC0+dHlwZSkgeworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BHNDcyWjoKKwkJCWlmIChmb3JjZV9iYW5kICYmICgqc3RkICYgZm9yY2VfYmFuZCkgIT0gKnN0ZCAmJgorCQkJCQkqc3RkICE9IFY0TDJfU1REX1BBTCAmJgorCQkJCQkqc3RkICE9IFY0TDJfU1REX1NFQ0FNKSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIndpcy1zb255LXR1bmVyOiBpZ25vcmluZyAiCisJCQkJCQkicmVxdWVzdGVkIFRWIHN0YW5kYXJkIGluICIKKwkJCQkJCSJmYXZvciBvZiBmb3JjZV9iYW5kIHZhbHVlXG4iKTsKKwkJCQl0LT5zdGQgPSBmb3JjZV9iYW5kOworCQkJfSBlbHNlIGlmICgqc3RkICYgVjRMMl9TVERfUEFMX0JHKSB7IC8qIGRlZmF1bHQgKi8KKwkJCQl0LT5zdGQgPSBWNEwyX1NURF9QQUxfQkc7CisJCQl9IGVsc2UgaWYgKCpzdGQgJiBWNEwyX1NURF9QQUxfSSkgeworCQkJCXQtPnN0ZCA9IFY0TDJfU1REX1BBTF9JOworCQkJfSBlbHNlIGlmICgqc3RkICYgVjRMMl9TVERfUEFMX0RLKSB7CisJCQkJdC0+c3RkID0gVjRMMl9TVERfUEFMX0RLOworCQkJfSBlbHNlIGlmICgqc3RkICYgVjRMMl9TVERfU0VDQU1fTCkgeworCQkJCXQtPnN0ZCA9IFY0TDJfU1REX1NFQ0FNX0w7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUiAid2lzLXNvbnktdHVuZXI6IFRWIHN0YW5kYXJkICIKKwkJCQkJCSJub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQkqc3RkID0gMDsgLyogaGFjayB0byBpbmRpY2F0ZSBFSU5WQUwgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChvbGQgIT0gdC0+c3RkKQorCQkJCXNldF9pZihjbGllbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEs0NjdaOgorCQkJaWYgKCEoKnN0ZCAmIFY0TDJfU1REX05UU0NfTV9KUCkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIndpcy1zb255LXR1bmVyOiBUViBzdGFuZGFyZCAiCisJCQkJCQkibm90IHN1cHBvcnRlZFxuIik7CisJCQkJKnN0ZCA9IDA7IC8qIGhhY2sgdG8gaW5kaWNhdGUgRUlOVkFMICovCisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QQjQ2M1o6CisJCQlpZiAoISgqc3RkICYgVjRMMl9TVERfTlRTQ19NKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAid2lzLXNvbnktdHVuZXI6IFRWIHN0YW5kYXJkICIKKwkJCQkJCSJub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQkqc3RkID0gMDsgLyogaGFjayB0byBpbmRpY2F0ZSBFSU5WQUwgKi8KKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19RVUVSWVNURDoKKwl7CisJCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7CisKKwkJc3dpdGNoICh0LT50eXBlKSB7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEc0NzJaOgorCQkJaWYgKGZvcmNlX2JhbmQpCisJCQkJKnN0ZCA9IGZvcmNlX2JhbmQ7CisJCQllbHNlCisJCQkJKnN0ZCA9IFY0TDJfU1REX1BBTF9CRyB8IFY0TDJfU1REX1BBTF9JIHwKKwkJCQkJVjRMMl9TVERfUEFMX0RLIHwgVjRMMl9TVERfU0VDQU1fTDsKKwkJCWJyZWFrOworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BLNDY3WjoKKwkJCSpzdGQgPSBWNEwyX1NURF9OVFNDX01fSlA7CisJCQlicmVhazsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QQjQ2M1o6CisJCQkqc3RkID0gVjRMMl9TVERfTlRTQ19NOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfVFVORVI6CisJeworCQlzdHJ1Y3QgdjRsMl90dW5lciAqdHVuID0gYXJnOworCisJCW1lbXNldCh0LCAwLCBzaXplb2YoKnR1bikpOworCQlzdHJjcHkodHVuLT5uYW1lLCAiVGVsZXZpc2lvbiIpOworCQl0dW4tPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwkJdHVuLT5yYW5nZWxvdyA9IDBVTDsgLyogZG9lcyBhbnl0aGluZyB1c2UgdGhlc2U/ICovCisJCXR1bi0+cmFuZ2VoaWdoID0gMHhmZmZmZmZmZlVMOworCQlzd2l0Y2ggKHQtPnR5cGUpIHsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QRzQ3Mlo6CisJCQl0dW4tPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNIHwKKwkJCQlWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBWNEwyX1RVTkVSX0NBUF9MQU5HMSB8CisJCQkJVjRMMl9UVU5FUl9DQVBfTEFORzI7CisJCQl0dW4tPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwKKwkJCQlWNEwyX1RVTkVSX1NVQl9TVEVSRU8gfCBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8CisJCQkJVjRMMl9UVU5FUl9TVUJfTEFORzI7CisJCQlicmVhazsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QSzQ2N1o6CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEI0NjNaOgorCQkJdHVuLT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPOworCQkJdHVuLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTyB8CisJCQkJCQlWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCQlicmVhazsKKwkJfQorCQl0dW4tPmF1ZG1vZGUgPSB0LT5hdWRtb2RlOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19UVU5FUjoKKwl7CisJCXN0cnVjdCB2NGwyX3R1bmVyICp0dW4gPSBhcmc7CisKKwkJc3dpdGNoICh0LT50eXBlKSB7CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEc0NzJaOgorCQkJaWYgKHR1bi0+YXVkbW9kZSAhPSB0LT5hdWRtb2RlKSB7CisJCQkJdC0+YXVkbW9kZSA9IHR1bi0+YXVkbW9kZTsKKwkJCQltcHhfc2V0dXAoY2xpZW50KTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRVTkVSX1NPTllfQlRGX1BLNDY3WjoKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QQjQ2M1o6CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3NvbnlfdHVuZXJfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgd2lzX3NvbnlfdHVuZXJfY2xpZW50X3RlbXBsID0geworCS5uYW1lCQk9ICJTb255IFRWIFR1bmVyIChXSVMpIiwKKwkuZHJpdmVyCQk9ICZ3aXNfc29ueV90dW5lcl9kcml2ZXIsCit9OworCitzdGF0aWMgaW50IHdpc19zb255X3R1bmVyX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCWludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB3aXNfc29ueV90dW5lciAqdDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLKSkKKwkJcmV0dXJuIDA7CisKKwljbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGNsaWVudCwgJndpc19zb255X3R1bmVyX2NsaWVudF90ZW1wbCwKKwkJCXNpemVvZih3aXNfc29ueV90dW5lcl9jbGllbnRfdGVtcGwpKTsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+YWRkciA9IGFkZHI7CisKKwl0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdpc19zb255X3R1bmVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHQgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJdC0+dHlwZSA9IC0xOworCXQtPmZyZXEgPSAwOworCXQtPm1weG1vZGUgPSAwOworCXQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHQpOworCisJcHJpbnRrKEtFUk5fREVCVUcKKwkJIndpcy1zb255LXR1bmVyOiBpbml0aWFsaXppbmcgdHVuZXIgYXQgYWRkcmVzcyAlZCBvbiAlc1xuIiwKKwkJYWRkciwgYWRhcHRlci0+bmFtZSk7CisKKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3NvbnlfdHVuZXJfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdpc19zb255X3R1bmVyICp0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHI7CisKKwlyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJa2ZyZWUodCk7CisJa2ZyZWUoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc19zb255X3R1bmVyX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJXSVMgU29ueSBUViBUdW5lciBJMkMgZHJpdmVyIiwKKwl9LAorCS5pZAkJPSBJMkNfRFJJVkVSSURfV0lTX1NPTllfVFVORVIsCisJLmRldGFjaF9jbGllbnQJPSB3aXNfc29ueV90dW5lcl9kZXRhY2gsCisJLmNvbW1hbmQJPSB0dW5lcl9jb21tYW5kLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2lzX3NvbnlfdHVuZXJfaW5pdCh2b2lkKQoreworCWludCByOworCisJciA9IGkyY19hZGRfZHJpdmVyKCZ3aXNfc29ueV90dW5lcl9kcml2ZXIpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJcmV0dXJuIHdpc19pMmNfYWRkX2RyaXZlcih3aXNfc29ueV90dW5lcl9kcml2ZXIuaWQsCisJCQkJCXdpc19zb255X3R1bmVyX2RldGVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3aXNfc29ueV90dW5lcl9jbGVhbnVwKHZvaWQpCit7CisJd2lzX2kyY19kZWxfZHJpdmVyKHdpc19zb255X3R1bmVyX2RldGVjdCk7CisJaTJjX2RlbF9kcml2ZXIoJndpc19zb255X3R1bmVyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHdpc19zb255X3R1bmVyX2luaXQpOworbW9kdWxlX2V4aXQod2lzX3NvbnlfdHVuZXJfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3MjgwNC5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdHcyODA0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmZTRkMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3MjgwNC5jCkBAIC0wLDAgKzEsMzgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjaW5jbHVkZSAid2lzLWkyYy5oIgorCitzdHJ1Y3Qgd2lzX3R3MjgwNCB7CisJaW50IGNoYW5uZWw7CisJaW50IG5vcm07CisJaW50IGJyaWdodG5lc3M7CisJaW50IGNvbnRyYXN0OworCWludCBzYXR1cmF0aW9uOworCWludCBodWU7Cit9OworCitzdGF0aWMgdTggZ2xvYmFsX3JlZ2lzdGVyc1tdID0KK3sKKwkweDM5LCAweDAwLAorCTB4M2EsIDB4ZmYsCisJMHgzYiwgMHg4NCwKKwkweDNjLCAweDgwLAorCTB4M2QsIDB4ODAsCisJMHgzZSwgMHg4MiwKKwkweDNmLCAweDgyLAorCTB4ZmYsIDB4ZmYsIC8qIFRlcm1pbmF0b3IgKHJlZyAweGZmIGRvZXMgbm90IGV4aXN0KSAqLworfTsKKworc3RhdGljIHU4IGNoYW5uZWxfcmVnaXN0ZXJzW10gPQoreworCTB4MDEsIDB4YzQsCisJMHgwMiwgMHhhNSwKKwkweDAzLCAweDIwLAorCTB4MDQsIDB4ZDAsCisJMHgwNSwgMHgyMCwKKwkweDA2LCAweGQwLAorCTB4MDcsIDB4ODgsCisJMHgwOCwgMHgyMCwKKwkweDA5LCAweDA3LAorCTB4MGEsIDB4ZjAsCisJMHgwYiwgMHgwNywKKwkweDBjLCAweGYwLAorCTB4MGQsIDB4NDAsCisJMHgwZSwgMHhkMiwKKwkweDBmLCAweDgwLAorCTB4MTAsIDB4ODAsCisJMHgxMSwgMHg4MCwKKwkweDEyLCAweDgwLAorCTB4MTMsIDB4MWYsCisJMHgxNCwgMHgwMCwKKwkweDE1LCAweDAwLAorCTB4MTYsIDB4MDAsCisJMHgxNywgMHgwMCwKKwkweDE4LCAweGZmLAorCTB4MTksIDB4ZmYsCisJMHgxYSwgMHhmZiwKKwkweDFiLCAweGZmLAorCTB4MWMsIDB4ZmYsCisJMHgxZCwgMHhmZiwKKwkweDFlLCAweGZmLAorCTB4MWYsIDB4ZmYsCisJMHgyMCwgMHgwNywKKwkweDIxLCAweDA3LAorCTB4MjIsIDB4MDAsCisJMHgyMywgMHg5MSwKKwkweDI0LCAweDUxLAorCTB4MjUsIDB4MDMsCisJMHgyNiwgMHgwMCwKKwkweDI3LCAweDAwLAorCTB4MjgsIDB4MDAsCisJMHgyOSwgMHgwMCwKKwkweDJhLCAweDAwLAorCTB4MmIsIDB4MDAsCisJMHgyYywgMHgwMCwKKwkweDJkLCAweDAwLAorCTB4MmUsIDB4MDAsCisJMHgyZiwgMHgwMCwKKwkweDMwLCAweDAwLAorCTB4MzEsIDB4MDAsCisJMHgzMiwgMHgwMCwKKwkweDMzLCAweDAwLAorCTB4MzQsIDB4MDAsCisJMHgzNSwgMHgwMCwKKwkweDM2LCAweDAwLAorCTB4MzcsIDB4MDAsCisJMHhmZiwgMHhmZiwgLyogVGVybWluYXRvciAocmVnIDB4ZmYgZG9lcyBub3QgZXhpc3QpICovCit9OworCitzdGF0aWMgaW50IHdyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlLCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZyB8IChjaGFubmVsIDw8IDYpLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqcmVncywgaW50IGNoYW5uZWwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyByZWdzW2ldICE9IDB4ZmY7IGkgKz0gMikKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCXJlZ3NbaV0gfCAoY2hhbm5lbCA8PCA2KSwgcmVnc1tpICsgMV0pIDwgMCkKKwkJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfdHcyODA0X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHdpc190dzI4MDQgKmRlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaWYgKGNtZCA9PSBERUNPREVSX1NFVF9DSEFOTkVMKSB7CisJCWludCAqaW5wdXQgPSBhcmc7CisKKwkJaWYgKCppbnB1dCA8IDAgfHwgKmlucHV0ID4gMykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ3aXMtdHcyODA0OiBjaGFubmVsICVkIGlzIG5vdCAiCisJCQkJCSJiZXR3ZWVuIDAgYW5kIDMhXG4iLCAqaW5wdXQpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZGVjLT5jaGFubmVsID0gKmlucHV0OworCQlwcmludGsoS0VSTl9ERUJVRyAid2lzLXR3MjgwNDogaW5pdGlhbGl6aW5nIFRXMjgwNCAiCisJCQkJImNoYW5uZWwgJWRcbiIsIGRlYy0+Y2hhbm5lbCk7CisJCWlmIChkZWMtPmNoYW5uZWwgPT0gMCAmJgorCQkJCXdyaXRlX3JlZ3MoY2xpZW50LCBnbG9iYWxfcmVnaXN0ZXJzLCAwKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAid2lzLXR3MjgwNDogZXJyb3IgaW5pdGlhbGl6aW5nICIKKwkJCQkJIlRXMjgwNCBnbG9iYWwgcmVnaXN0ZXJzXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmICh3cml0ZV9yZWdzKGNsaWVudCwgY2hhbm5lbF9yZWdpc3RlcnMsIGRlYy0+Y2hhbm5lbCkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIndpcy10dzI4MDQ6IGVycm9yIGluaXRpYWxpemluZyAiCisJCQkJCSJUVzI4MDQgY2hhbm5lbCAlZFxuIiwgZGVjLT5jaGFubmVsKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChkZWMtPmNoYW5uZWwgPCAwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJ3aXMtdHcyODA0OiBpZ25vcmluZyBjb21tYW5kICUwOHggdW50aWwgIgorCQkJCSJjaGFubmVsIG51bWJlciBpcyBzZXRcbiIsIGNtZCk7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfU19TVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqaW5wdXQgPSBhcmc7CisJCXU4IHJlZ3NbXSA9IHsKKwkJCTB4MDEsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweGM0IDogMHg4NCwKKwkJCTB4MDksICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDA3IDogMHgwNCwKKwkJCTB4MGEsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweGYwIDogMHgyMCwKKwkJCTB4MGIsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDA3IDogMHgwNCwKKwkJCTB4MGMsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweGYwIDogMHgyMCwKKwkJCTB4MGQsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDQwIDogMHg0YSwKKwkJCTB4MTYsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDAwIDogMHg0MCwKKwkJCTB4MTcsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDAwIDogMHg0MCwKKwkJCTB4MjAsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDA3IDogMHgwZiwKKwkJCTB4MjEsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDA3IDogMHgwZiwKKwkJCTB4ZmYsCTB4ZmYsCisJCX07CisJCXdyaXRlX3JlZ3MoY2xpZW50LCByZWdzLCBkZWMtPmNoYW5uZWwpOworCQlkZWMtPm5vcm0gPSAqaW5wdXQ7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkJyaWdodG5lc3MiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMjU1OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMTI4OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkNvbnRyYXN0Iiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDI1NTsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDEyODsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIlNhdHVyYXRpb24iLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMjU1OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMTI4OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJIdWUiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMjU1OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMTI4OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAyNTUpCisJCQkJZGVjLT5icmlnaHRuZXNzID0gMjU1OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDEyLCBkZWMtPmJyaWdodG5lc3MsIGRlYy0+Y2hhbm5lbCk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDI1NSkKKwkJCQlkZWMtPmNvbnRyYXN0ID0gMjU1OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+Y29udHJhc3QgPSAwOworCQkJZWxzZQorCQkJCWRlYy0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MTEsIGRlYy0+Y29udHJhc3QsIGRlYy0+Y2hhbm5lbCk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMjU1KQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IDI1NTsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSAwOworCQkJZWxzZQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgxMCwgZGVjLT5zYXR1cmF0aW9uLCBkZWMtPmNoYW5uZWwpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMjU1KQorCQkJCWRlYy0+aHVlID0gMjU1OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+aHVlID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPmh1ZSA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwZiwgZGVjLT5odWUsIGRlYy0+Y2hhbm5lbCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5icmlnaHRuZXNzOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+Y29udHJhc3Q7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPnNhdHVyYXRpb247CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+aHVlOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc190dzI4MDRfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgd2lzX3R3MjgwNF9jbGllbnRfdGVtcGwgPSB7CisJLm5hbWUJCT0gIlRXMjgwNCAoV0lTKSIsCisJLmRyaXZlcgkJPSAmd2lzX3R3MjgwNF9kcml2ZXIsCit9OworCitzdGF0aWMgaW50IHdpc190dzI4MDRfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHdpc190dzI4MDQgKmRlYzsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIDA7CisKKwljbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGNsaWVudCwgJndpc190dzI4MDRfY2xpZW50X3RlbXBsLAorCQkJc2l6ZW9mKHdpc190dzI4MDRfY2xpZW50X3RlbXBsKSk7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmFkZHIgPSBhZGRyOworCisJZGVjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdpc190dzI4MDQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGVjID09IE5VTEwpIHsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRlYy0+Y2hhbm5lbCA9IC0xOworCWRlYy0+bm9ybSA9IFY0TDJfU1REX05UU0M7CisJZGVjLT5icmlnaHRuZXNzID0gMTI4OworCWRlYy0+Y29udHJhc3QgPSAxMjg7CisJZGVjLT5zYXR1cmF0aW9uID0gMTI4OworCWRlYy0+aHVlID0gMTI4OworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlYyk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAid2lzLXR3MjgwNDogY3JlYXRpbmcgVFcyODA0IGF0IGFkZHJlc3MgJWQgb24gJXNcbiIsCisJCWFkZHIsIGFkYXB0ZXItPm5hbWUpOworCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfdHcyODA0X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3aXNfdHcyODA0ICpkZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcjsKKworCXIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlrZnJlZShjbGllbnQpOworCWtmcmVlKGRlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfdHcyODA0X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJXSVMgVFcyODA0IEkyQyBkcml2ZXIiLAorCX0sCisJLmlkCQk9IEkyQ19EUklWRVJJRF9XSVNfVFcyODA0LAorCS5kZXRhY2hfY2xpZW50CT0gd2lzX3R3MjgwNF9kZXRhY2gsCisJLmNvbW1hbmQJPSB3aXNfdHcyODA0X2NvbW1hbmQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3aXNfdHcyODA0X2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfYWRkX2RyaXZlcigmd2lzX3R3MjgwNF9kcml2ZXIpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJcmV0dXJuIHdpc19pMmNfYWRkX2RyaXZlcih3aXNfdHcyODA0X2RyaXZlci5pZCwgd2lzX3R3MjgwNF9kZXRlY3QpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2lzX3R3MjgwNF9jbGVhbnVwKHZvaWQpCit7CisJd2lzX2kyY19kZWxfZHJpdmVyKHdpc190dzI4MDRfZGV0ZWN0KTsKKwlpMmNfZGVsX2RyaXZlcigmd2lzX3R3MjgwNF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3aXNfdHcyODA0X2luaXQpOworbW9kdWxlX2V4aXQod2lzX3R3MjgwNF9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdHc5OTAzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzk5MDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGU0MTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdHc5OTAzLmMKQEAgLTAsMCArMSwzNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNpbmNsdWRlICJ3aXMtaTJjLmgiCisKK3N0cnVjdCB3aXNfdHc5OTAzIHsKKwlpbnQgbm9ybTsKKwlpbnQgYnJpZ2h0bmVzczsKKwlpbnQgY29udHJhc3Q7CisJaW50IGh1ZTsKK307CisKK3N0YXRpYyB1OCBpbml0aWFsX3JlZ2lzdGVyc1tdID0KK3sKKwkweDAyLCAweDQ0LCAvKiBpbnB1dCAxLCBjb21wb3NpdGUgKi8KKwkweDAzLCAweDkyLCAvKiBjb3JyZWN0IGRpZ2l0YWwgZm9ybWF0ICovCisJMHgwNCwgMHgwMCwKKwkweDA1LCAweDgwLCAvKiBvciAweDAwIGZvciBQQUwgKi8KKwkweDA2LCAweDQwLCAvKiBzZWNvbmQgaW50ZXJuYWwgY3VycmVudCByZWZlcmVuY2UgKi8KKwkweDA3LCAweDAyLCAvKiB3aW5kb3cgKi8KKwkweDA4LCAweDE0LCAvKiB3aW5kb3cgKi8KKwkweDA5LCAweGYwLCAvKiB3aW5kb3cgKi8KKwkweDBhLCAweDgxLCAvKiB3aW5kb3cgKi8KKwkweDBiLCAweGQwLCAvKiB3aW5kb3cgKi8KKwkweDBjLCAweDhjLAorCTB4MGQsIDB4MDAsIC8qIHNjYWxpbmcgKi8KKwkweDBlLCAweDExLCAvKiBzY2FsaW5nICovCisJMHgwZiwgMHgwMCwgLyogc2NhbGluZyAqLworCTB4MTAsIDB4MDAsIC8qIGJyaWdodG5lc3MgKi8KKwkweDExLCAweDYwLCAvKiBjb250cmFzdCAqLworCTB4MTIsIDB4MDEsIC8qIHNoYXJwbmVzcyAqLworCTB4MTMsIDB4N2YsIC8qIFUgZ2FpbiAqLworCTB4MTQsIDB4NWEsIC8qIFYgZ2FpbiAqLworCTB4MTUsIDB4MDAsIC8qIGh1ZSAqLworCTB4MTYsIDB4YzMsIC8qIHNoYXJwbmVzcyAqLworCTB4MTgsIDB4MDAsCisJMHgxOSwgMHg1OCwgLyogdmJpICovCisJMHgxYSwgMHg4MCwKKwkweDFjLCAweDBmLCAvKiB2aWRlbyBub3JtICovCisJMHgxZCwgMHg3ZiwgLyogdmlkZW8gbm9ybSAqLworCTB4MjAsIDB4YTAsIC8qIGNsYW1waW5nIGdhaW4gKHdvcmtpbmcgMHg1MCkgKi8KKwkweDIxLCAweDIyLAorCTB4MjIsIDB4ZjAsCisJMHgyMywgMHhmZSwKKwkweDI0LCAweDNjLAorCTB4MjUsIDB4MzgsCisJMHgyNiwgMHg0NCwKKwkweDI3LCAweDIwLAorCTB4MjgsIDB4MDAsCisJMHgyOSwgMHgxNSwKKwkweDJhLCAweGEwLAorCTB4MmIsIDB4NDQsCisJMHgyYywgMHgzNywKKwkweDJkLCAweDAwLAorCTB4MmUsIDB4YTUsIC8qIGJ1cnN0IFBMTCBjb250cm9sICh3b3JraW5nOiBhOSkgKi8KKwkweDJmLCAweGUwLCAvKiAweGVhIGlzIGJsdWUgdGVzdCBmcmFtZSAtLSAweGUwIGZvciBub3JtYWwgKi8KKwkweDMxLCAweDAwLAorCTB4MzMsIDB4MjIsCisJMHgzNCwgMHgxMSwKKwkweDM1LCAweDM1LAorCTB4M2IsIDB4MDUsCisJMHgwNiwgMHhjMCwgLyogcmVzZXQgZGV2aWNlICovCisJMHgwMCwgMHgwMCwgLyogVGVybWluYXRvciAocmVnIDB4MDAgaXMgcmVhZC1vbmx5KSAqLworfTsKKworc3RhdGljIGludCB3cml0ZV9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3sKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgaW50IHdyaXRlX3JlZ3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggKnJlZ3MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyByZWdzW2ldICE9IDB4MDA7IGkgKz0gMikKKwkJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdzW2ldLCByZWdzW2kgKyAxXSkgPCAwKQorCQkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc190dzk5MDNfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgd2lzX3R3OTkwMyAqZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklESU9DX1NfSU5QVVQ6CisJeworCQlpbnQgKmlucHV0ID0gYXJnOworCisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCAweDAyLCAweDQwIHwgKCppbnB1dCA8PCAxKSk7CisJCWJyZWFrOworCX0KKyNpZiAwICAgLyogVGhlIHNjYWxlciBvbiB0aGlzIHRoaW5nIHNlZW1zIHRvIGJlIGhvcnJpYmx5IGJyb2tlbiAqLworCWNhc2UgREVDT0RFUl9TRVRfUkVTT0xVVElPTjoKKwl7CisJCXN0cnVjdCB2aWRlb19kZWNvZGVyX3Jlc29sdXRpb24gKnJlcyA9IGFyZzsKKwkJLyppbnQgaHNjYWxlID0gMjU2ICogNzIwIC8gcmVzLT53aWR0aDsqLworCQlpbnQgaHNjYWxlID0gMjU2ICogNzIwIC8gKHJlcy0+d2lkdGggLSAocmVzLT53aWR0aCA+IDcwNCA/IDAgOiA4KSk7CisJCWludCB2c2NhbGUgPSAyNTYgKiAoZGVjLT5ub3JtICYgVjRMMl9TVERfTlRTQyA/ICAyNDAgOiAyODgpCisJCQkJLyByZXMtPmhlaWdodDsKKwkJdTggcmVnc1tdID0geworCQkJMHgwZCwgdnNjYWxlICYgMHhmZiwKKwkJCTB4MGYsIGhzY2FsZSAmIDB4ZmYsCisJCQkweDBlLCAoKHZzY2FsZSAmIDB4ZjAwKSA+PiA0KSB8ICgoaHNjYWxlICYgMHhmMDApID4+IDgpLAorCQkJMHgwNiwgMHhjMCwgLyogcmVzZXQgZGV2aWNlICovCisJCQkwLAkwLAorCQl9OworCQlwcmludGsoS0VSTl9ERUJVRyAidnNjYWxlIGlzICUwNHgsIGhzY2FsZSBpcyAlMDR4XG4iLAorCQkJCXZzY2FsZSwgaHNjYWxlKTsKKwkJLyp3cml0ZV9yZWdzKGNsaWVudCwgcmVncyk7Ki8KKwkJYnJlYWs7CisJfQorI2VuZGlmCisJY2FzZSBWSURJT0NfU19TVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqaW5wdXQgPSBhcmc7CisJCXU4IHJlZ3NbXSA9IHsKKwkJCTB4MDUsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDgwIDogMHgwMCwKKwkJCTB4MDcsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDAyIDogMHgxMiwKKwkJCTB4MDgsICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDE0IDogMHgxOCwKKwkJCTB4MDksICppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweGYwIDogMHgyMCwKKwkJCTAsCTAsCisJCX07CisJCXdyaXRlX3JlZ3MoY2xpZW50LCByZWdzKTsKKwkJZGVjLT5ub3JtID0gKmlucHV0OworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJCcmlnaHRuZXNzIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAtMTI4OworCQkJY3RybC0+bWF4aW11bSA9IDEyNzsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDB4MDA7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiQ29udHJhc3QiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMjU1OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMHg2MDsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworI2lmIDAKKwkJLyogSSBkb24ndCB1bmRlcnN0YW5kIGhvdyB0aGUgQ2hyb21hIEdhaW4gcmVnaXN0ZXJzIHdvcmsuLi4gKi8KKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJTYXR1cmF0aW9uIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDEyNzsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDY0OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisjZW5kaWYKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkh1ZSIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gLTEyODsKKwkJCWN0cmwtPm1heGltdW0gPSAxMjc7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAwOworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMjcpCisJCQkJZGVjLT5icmlnaHRuZXNzID0gMTI3OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAtMTI4KQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IC0xMjg7CisJCQllbHNlCisJCQkJZGVjLT5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDEwLCBkZWMtPmJyaWdodG5lc3MpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAyNTUpCisJCQkJZGVjLT5jb250cmFzdCA9IDI1NTsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPmNvbnRyYXN0ID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPmNvbnRyYXN0ID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDExLCBkZWMtPmNvbnRyYXN0KTsKKwkJCWJyZWFrOworI2lmIDAKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IDEyNzsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSAwOworCQkJZWxzZQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IGN0cmwtPnZhbHVlOworCQkJLyp3cml0ZV9yZWcoY2xpZW50LCAweDBjLCBkZWMtPnNhdHVyYXRpb24pOyovCisJCQlicmVhazsKKyNlbmRpZgorCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDEyNykKKwkJCQlkZWMtPmh1ZSA9IDEyNzsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgLTEyOCkKKwkJCQlkZWMtPmh1ZSA9IC0xMjg7CisJCQllbHNlCisJCQkJZGVjLT5odWUgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MTUsIGRlYy0+aHVlKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19HX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmJyaWdodG5lc3M7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5jb250cmFzdDsKKwkJCWJyZWFrOworI2lmIDAKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPnNhdHVyYXRpb247CisJCQlicmVhazsKKyNlbmRpZgorCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5odWU7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3R3OTkwM19kcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCB3aXNfdHc5OTAzX2NsaWVudF90ZW1wbCA9IHsKKwkubmFtZQkJPSAiVFc5OTAzIChXSVMpIiwKKwkuZHJpdmVyCQk9ICZ3aXNfdHc5OTAzX2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgd2lzX3R3OTkwM19kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3Qgd2lzX3R3OTkwMyAqZGVjOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2xpZW50LCAmd2lzX3R3OTkwM19jbGllbnRfdGVtcGwsCisJCQlzaXplb2Yod2lzX3R3OTkwM19jbGllbnRfdGVtcGwpKTsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+YWRkciA9IGFkZHI7CisKKwlkZWMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2lzX3R3OTkwMyksIEdGUF9LRVJORUwpOworCWlmIChkZWMgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGVjLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKKwlkZWMtPmJyaWdodG5lc3MgPSAwOworCWRlYy0+Y29udHJhc3QgPSAweDYwOworCWRlYy0+aHVlID0gMDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWMpOworCisJcHJpbnRrKEtFUk5fREVCVUcKKwkJIndpcy10dzk5MDM6IGluaXRpYWxpemluZyBUVzk5MDMgYXQgYWRkcmVzcyAlZCBvbiAlc1xuIiwKKwkJYWRkciwgYWRhcHRlci0+bmFtZSk7CisKKwlpZiAod3JpdGVfcmVncyhjbGllbnQsIGluaXRpYWxfcmVnaXN0ZXJzKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ3aXMtdHc5OTAzOiBlcnJvciBpbml0aWFsaXppbmcgVFc5OTAzXG4iKTsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJa2ZyZWUoZGVjKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfdHc5OTAzX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3aXNfdHc5OTAzICpkZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcjsKKworCXIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlrZnJlZShjbGllbnQpOworCWtmcmVlKGRlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfdHc5OTAzX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJXSVMgVFc5OTAzIEkyQyBkcml2ZXIiLAorCX0sCisJLmlkCQk9IEkyQ19EUklWRVJJRF9XSVNfVFc5OTAzLAorCS5kZXRhY2hfY2xpZW50CT0gd2lzX3R3OTkwM19kZXRhY2gsCisJLmNvbW1hbmQJPSB3aXNfdHc5OTAzX2NvbW1hbmQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3aXNfdHc5OTAzX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfYWRkX2RyaXZlcigmd2lzX3R3OTkwM19kcml2ZXIpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJcmV0dXJuIHdpc19pMmNfYWRkX2RyaXZlcih3aXNfdHc5OTAzX2RyaXZlci5pZCwgd2lzX3R3OTkwM19kZXRlY3QpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2lzX3R3OTkwM19jbGVhbnVwKHZvaWQpCit7CisJd2lzX2kyY19kZWxfZHJpdmVyKHdpc190dzk5MDNfZGV0ZWN0KTsKKwlpMmNfZGVsX2RyaXZlcigmd2lzX3R3OTkwM19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3aXNfdHc5OTAzX2luaXQpOworbW9kdWxlX2V4aXQod2lzX3R3OTkwM19jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdWRhMTM0Mi5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdWRhMTM0Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwODk0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy11ZGExMzQyLmMKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3R2YXVkaW8uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorCisjaW5jbHVkZSAid2lzLWkyYy5oIgorCitzdGF0aWMgaW50IHdyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmVnLCBpbnQgdmFsdWUpCit7CisJLyogVURBMTM0MiB3YW50cyBNU0IgZmlyc3QsIGJ1dCBTTUJ1cyBzZW5kcyBMU0IgZmlyc3QgKi8KKwlpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgcmVnLCBzd2FiMTYodmFsdWUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfdWRhMTM0Ml9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfU19BVURJTzoKKwl7CisJCWludCAqaW5wID0gYXJnOworCisJCXN3aXRjaCAoKmlucCkgeworCQljYXNlIFRWQVVESU9fSU5QVVRfVFVORVI6CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDAwLCAweDE0NDEpOyAvKiBzZWxlY3QgaW5wdXQgMiAqLworCQkJYnJlYWs7CisJCWNhc2UgVFZBVURJT19JTlBVVF9FWFRFUk46CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDAwLCAweDEyNDEpOyAvKiBzZWxlY3QgaW5wdXQgMSAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIndpcy11ZGExMzQyOiBpbnB1dCAlZCBub3Qgc3VwcG9ydGVkXG4iLAorCQkJCQkqaW5wKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfdWRhMTM0Ml9kcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCB3aXNfdWRhMTM0Ml9jbGllbnRfdGVtcGwgPSB7CisJLm5hbWUJCT0gIlVEQTEzNDIgKFdJUykiLAorCS5kcml2ZXIJCT0gJndpc191ZGExMzQyX2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgd2lzX3VkYTEzNDJfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShjbGllbnQsICZ3aXNfdWRhMTM0Ml9jbGllbnRfdGVtcGwsCisJCQlzaXplb2Yod2lzX3VkYTEzNDJfY2xpZW50X3RlbXBsKSk7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmFkZHIgPSBhZGRyOworCisJcHJpbnRrKEtFUk5fREVCVUcKKwkJIndpcy11ZGExMzQyOiBpbml0aWFsaXppbmcgVURBMTM0MiBhdCBhZGRyZXNzICVkIG9uICVzXG4iLAorCQlhZGRyLCBhZGFwdGVyLT5uYW1lKTsKKworCXdyaXRlX3JlZyhjbGllbnQsIDB4MDAsIDB4ODAwMCk7IC8qIHJlc2V0IHJlZ2lzdGVycyAqLworCXdyaXRlX3JlZyhjbGllbnQsIDB4MDAsIDB4MTI0MSk7IC8qIHNlbGVjdCBpbnB1dCAxICovCisKKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc191ZGExMzQyX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWludCByOworCisJciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWtmcmVlKGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfdWRhMTM0Ml9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiV0lTIFVEQTEzNDIgSTJDIGRyaXZlciIsCisJfSwKKwkuaWQJCT0gSTJDX0RSSVZFUklEX1dJU19VREExMzQyLAorCS5kZXRhY2hfY2xpZW50CT0gd2lzX3VkYTEzNDJfZGV0YWNoLAorCS5jb21tYW5kCT0gd2lzX3VkYTEzNDJfY29tbWFuZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdpc191ZGExMzQyX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfYWRkX2RyaXZlcigmd2lzX3VkYTEzNDJfZHJpdmVyKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCXJldHVybiB3aXNfaTJjX2FkZF9kcml2ZXIod2lzX3VkYTEzNDJfZHJpdmVyLmlkLCB3aXNfdWRhMTM0Ml9kZXRlY3QpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2lzX3VkYTEzNDJfY2xlYW51cCh2b2lkKQoreworCXdpc19pMmNfZGVsX2RyaXZlcih3aXNfdWRhMTM0Ml9kZXRlY3QpOworCWkyY19kZWxfZHJpdmVyKCZ3aXNfdWRhMTM0Ml9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3aXNfdWRhMTM0Ml9pbml0KTsKK21vZHVsZV9leGl0KHdpc191ZGExMzQyX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU2YzlkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvS2NvbmZpZwpAQCAtMCwwICsxLDEwIEBACitjb25maWcgTUU0MDAwCisJdHJpc3RhdGUgIk1laWxoYXVzIE1FLTQwMDAgc3VwcG9ydCIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIFBDSQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBNZWlsaGF1cyBNRS00MDAwIGZhbWlseSBvZiBib2FyZHMKKwkgIHRoYXQgZG8gZGF0YSBjb2xsZWN0aW9uIGFuZCBtdWx0aXB1cnBvc2UgSS9PLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBtZTQwMDAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDQ4N2NkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfTUU0MDAwKQkJKz0gbWU0MDAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJiODM4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvUkVBRE1FCkBAIC0wLDAgKzEsMTMgQEAKKworVE9ETzoKKwktIGNoZWNrcGF0Y2gucGwgY2xlYW51cHMKKwktIHNwYXJzZSBjbGVhbnVwcworCS0gcG9zc2libGUgL3Byb2MgaW50ZXJhY3Rpb24gY2xlYW51cHMKKwktIG1vcmUgaW5mbyBuZWVkZWQgZm9yIEtjb25maWcgZW50cnkKKwktIHJlYWwgZGV2aWNlIGlkPworCS0gbW9kdWxlIHBhcmFtZXRlciBjbGVhbnVwCisKK1BsZWFzZSBzZW5kIHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KK2FuZCBDYzogV29sZmdhbmcgQmVpdGVyIDx3LmJlaXRlckBhb24uYXQ+IGFuZAorR3VlbnRlciBHZWJoYXJkdCA8Zy5nZWJoYXJkdEBtZWlsaGF1cy5kZT4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYyZGQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwLmMKQEAgLTAsMCArMSw2MTMzIEBACisvKiBEZXZpY2UgZHJpdmVyIGZvciBNZWlsaGF1cyBNRS00MDAwIGJvYXJkIGZhbWlseS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgTWVpbGhhdXMgRWxlY3Ryb25pYyBHbWJIIChzdXBwb3J0QG1laWxoYXVzLmRlKQorICoKKyAqICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogIEF1dGhvcjoJR3VlbnRlciBHZWJoYXJkdAk8Zy5nZWJoYXJkdEBtZWlsaGF1cy5kZT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKy8qIEluY2x1ZGUtRmlsZSBmb3IgdGhlIE1laWxoYXVzIE1FLTQwMDAgSS9PIGJvYXJkICovCisjaW5jbHVkZSAibWU0MDAwLmgiCisjaW5jbHVkZSAibWU0MDAwX2Zpcm13YXJlLmgiCisjaW5jbHVkZSAibWU0NjEwX2Zpcm13YXJlLmgiCisKKy8qIEFkbWluaXN0cmF0aXZlIHN0dWZmIGZvciBtb2RpbmZvICovCitNT0RVTEVfQVVUSE9SKCJHdWVudGVyIEdlYmhhcmR0IDxnLmdlYmhhcmR0QG1laWxoYXVzLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OCisgICAgKCJEZXZpY2UgRHJpdmVyIE1vZHVsZSBmb3IgTWVpbGhhdXMgTUUtNDAwMCBib2FyZHMgdmVyc2lvbiAxLjAuNSIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIk1laWxoYXVzIE1FLTQwMDAgTXVsdGkgSS9PIGJvYXJkcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBCb2FyZCBzcGVjaWZpYyBkYXRhIGFyZSBrZXB0IGluIGEgZ2xvYmFsIGxpc3QgKi8KK0xJU1RfSEVBRChtZTQwMDBfYm9hcmRfaW5mb19saXN0KTsKKworLyogTWFqb3IgRGV2aWNlIE51bWJlcnMuIDAgbWVhbnMgdG8gZ2V0IGl0IGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgU3lzdGVtICovCitzdGF0aWMgaW50IG1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8gPSAwOworc3RhdGljIGludCBtZTQwMDBfYWlfbWFqb3JfZHJpdmVyX25vID0gMDsKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8gPSAwOworc3RhdGljIGludCBtZTQwMDBfY250X21ham9yX2RyaXZlcl9ubyA9IDA7CitzdGF0aWMgaW50IG1lNDAwMF9leHRfaW50X21ham9yX2RyaXZlcl9ubyA9IDA7CisKKy8qIExldCB0aGUgdXNlciBzcGVjaWZ5IGEgY3VzdG9tIG1ham9yIGRyaXZlciBudW1iZXIgKi8KK21vZHVsZV9wYXJhbShtZTQwMDBfYW9fbWFqb3JfZHJpdmVyX25vLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtZTQwMDBfYW9fbWFqb3JfZHJpdmVyX25vLAorCQkgIk1ham9yIGRyaXZlciBudW1iZXIgZm9yIGFuYWxvZyBvdXRwdXQgKGRlZmF1bHQgMCkiKTsKKworbW9kdWxlX3BhcmFtKG1lNDAwMF9haV9tYWpvcl9kcml2ZXJfbm8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1lNDAwMF9haV9tYWpvcl9kcml2ZXJfbm8sCisJCSAiTWFqb3IgZHJpdmVyIG51bWJlciBmb3IgYW5hbG9nIGlucHV0IChkZWZhdWx0IDApIik7CisKK21vZHVsZV9wYXJhbShtZTQwMDBfZGlvX21ham9yX2RyaXZlcl9ubywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8sCisJCSAiTWFqb3IgZHJpdmVyIG51bWJlciBkaWdpdGFsIEkvTyAoZGVmYXVsdCAwKSIpOworCittb2R1bGVfcGFyYW0obWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vLAorCQkgIk1ham9yIGRyaXZlciBudW1iZXIgZm9yIGNvdW50ZXIgKGRlZmF1bHQgMCkiKTsKKworbW9kdWxlX3BhcmFtKG1lNDAwMF9leHRfaW50X21ham9yX2RyaXZlcl9ubywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vLAorCQkgIk1ham9yIGRyaXZlciBudW1iZXIgZm9yIGV4dGVybmFsIGludGVycnVwdCAoZGVmYXVsdCAwKSIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIE1vZHVsZSBzdHVmZgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGluaXRfbW9kdWxlKHZvaWQpOwordm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBCb2FyZCBkZXRlY3Rpb24gYW5kIGluaXRpYWxpemF0aW9uCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IG1lNDAwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOworc3RhdGljIGludCBtZTQwMDBfeGlsaW54X2Rvd25sb2FkKG1lNDAwMF9pbmZvX3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9yZXNldF9ib2FyZChtZTQwMDBfaW5mb190ICopOworCitzdGF0aWMgdm9pZCBjbGVhcl9ib2FyZF9pbmZvX2xpc3Qodm9pZCk7CitzdGF0aWMgaW50IGdldF9yZWdpc3RlcnMoc3RydWN0IHBjaV9kZXYgKmRldiwgbWU0MDAwX2luZm9fdCAqIGluZm8pOworc3RhdGljIGludCBpbml0X2JvYXJkX2luZm8oc3RydWN0IHBjaV9kZXYgKmRldiwgbWU0MDAwX2luZm9fdCAqIGJvYXJkX2luZm8pOworc3RhdGljIGludCBhbGxvY19hb19jb250ZXh0cyhtZTQwMDBfaW5mb190ICogaW5mbyk7CitzdGF0aWMgdm9pZCByZWxlYXNlX2FvX2NvbnRleHRzKG1lNDAwMF9pbmZvX3QgKiBib2FyZF9pbmZvKTsKK3N0YXRpYyBpbnQgYWxsb2NfYWlfY29udGV4dChtZTQwMDBfaW5mb190ICogaW5mbyk7CitzdGF0aWMgaW50IGFsbG9jX2Rpb19jb250ZXh0KG1lNDAwMF9pbmZvX3QgKiBpbmZvKTsKK3N0YXRpYyBpbnQgYWxsb2NfY250X2NvbnRleHQobWU0MDAwX2luZm9fdCAqIGluZm8pOworc3RhdGljIGludCBhbGxvY19leHRfaW50X2NvbnRleHQobWU0MDAwX2luZm9fdCAqIGluZm8pOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFN0dWZmIHVzZWQgYnkgYWxsIGRldmljZSBwYXJ0cworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBtZTQwMDBfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitzdGF0aWMgaW50IG1lNDAwMF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKKworc3RhdGljIGludCBtZTQwMDBfZ2V0X3VzZXJfaW5mbyhtZTQwMDBfdXNlcl9pbmZvX3QgKiwKKwkJCQltZTQwMDBfaW5mb190ICogYm9hcmRfaW5mbyk7CitzdGF0aWMgaW50IG1lNDAwMF9yZWFkX3Byb2NtZW0oY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBbmFsb2cgb3V0cHV0IHN0dWZmCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgc3NpemVfdCBtZTQwMDBfYW9fd3JpdGVfc2luZyhzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwKKwkJCQkgICAgbG9mZl90ICopOworc3RhdGljIHNzaXplX3QgbWU0MDAwX2FvX3dyaXRlX3dyYXAoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsCisJCQkJICAgIGxvZmZfdCAqKTsKK3N0YXRpYyBzc2l6ZV90IG1lNDAwMF9hb193cml0ZV9jb250KHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAorCQkJCSAgICBsb2ZmX3QgKik7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2lvY3RsX3Npbmcoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJCQl1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2lvY3RsX3dyYXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJCQl1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2lvY3RsX2NvbnQoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJCQl1bnNpZ25lZCBsb25nKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBtZTQwMDBfYW9fcG9sbF9jb250KHN0cnVjdCBmaWxlICosIHBvbGxfdGFibGUgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19mc3luY19jb250KHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKKworc3RhdGljIGludCBtZTQwMDBfYW9fc3RhcnQodW5zaWduZWQgbG9uZyAqLCBtZTQwMDBfYW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYW9fc3RvcChtZTQwMDBfYW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AobWU0MDAwX2FvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3RpbWVyX3NldF9kaXZpc29yKHUzMiAqLCBtZTQwMDBfYW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYW9fcHJlbG9hZChtZTQwMDBfYW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYW9fcHJlbG9hZF91cGRhdGUobWU0MDAwX2FvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfc2V0X2VkZ2UoaW50ICosIG1lNDAwMF9hb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19leF90cmlnX2VuYWJsZShtZTQwMDBfYW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYW9fZXhfdHJpZ19kaXNhYmxlKG1lNDAwMF9hb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19wcmVwYXJlKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19pbmZvKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3Jlc2V0KG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19pbmZvKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2VuYWJsZV9kbyhtZTQwMDBfYW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYW9fZGlzYWJsZV9kbyhtZTQwMDBfYW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYW9fZnNtX3N0YXRlKGludCAqLCBtZTQwMDBfYW9fY29udGV4dF90ICopOworCitzdGF0aWMgaW50IG1lNDAwMF9hb19zaW11bHRhbmVvdXNfZXhfdHJpZyhtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19zaW11bHRhbmVvdXNfc3cobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2Rpc2FibGUobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3VwZGF0ZShtZTQwMDBfYW9fY2hhbm5lbF9saXN0X3QgKiBjaGFubmVscywKKwkJCQkJIG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KTsKKworc3RhdGljIGludCBtZTQwMDBfYW9fc3luY2hyb25vdXNfZXhfdHJpZyhtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19zeW5jaHJvbm91c19zdyhtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19zeW5jaHJvbm91c19kaXNhYmxlKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KTsKKworc3RhdGljIGludCBtZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KHVuc2lnbmVkIGxvbmcgKmFyZywKKwkJCQkgICAgIG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2dldF9mcmVlX2J1ZmZlcih1bnNpZ25lZCBsb25nICphcmcsCisJCQkJICAgICBtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQW5hbG9nIGlucHV0IHN0dWZmCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IG1lNDAwMF9haV9zaW5nbGUobWU0MDAwX2FpX3NpbmdsZV90ICosIG1lNDAwMF9haV9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9pb2N0bF9zaW5nKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCQkJdW5zaWduZWQgbG9uZyk7CisKK3N0YXRpYyBzc2l6ZV90IG1lNDAwMF9haV9yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9pb2N0bF9zdyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgdW5zaWduZWQgaW50IG1lNDAwMF9haV9wb2xsKHN0cnVjdCBmaWxlICosIHBvbGxfdGFibGUgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLCBpbnQgbW9kZSk7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2lvY3RsX2V4dChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcpOworCitzdGF0aWMgaW50IG1lNDAwMF9haV9wcmVwYXJlKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3Jlc2V0KG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2NvbmZpZyhtZTQwMDBfYWlfY29uZmlnX3QgKiwgbWU0MDAwX2FpX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3N0YXJ0KG1lNDAwMF9haV9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9zdGFydF9leCh1bnNpZ25lZCBsb25nICosIG1lNDAwMF9haV9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9zdG9wKG1lNDAwMF9haV9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9pbW1lZGlhdGVfc3RvcChtZTQwMDBfYWlfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYWlfZXhfdHJpZ19lbmFibGUobWU0MDAwX2FpX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2V4X3RyaWdfZGlzYWJsZShtZTQwMDBfYWlfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYWlfZXhfdHJpZ19zZXR1cChtZTQwMDBfYWlfdHJpZ2dlcl90ICosCisJCQkJICAgbWU0MDAwX2FpX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3NjX3NldHVwKG1lNDAwMF9haV9zY190ICogYXJnLAorCQkJICAgICAgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYWlfb2Zmc2V0X2VuYWJsZShtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9vZmZzZXRfZGlzYWJsZShtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9mdWxsc2NhbGVfZW5hYmxlKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2Z1bGxzY2FsZV9kaXNhYmxlKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2ZzbV9zdGF0ZShpbnQgKmFyZywgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYWlfZ2V0X2NvdW50X2J1ZmZlcih1bnNpZ25lZCBsb25nICphcmcsCisJCQkJICAgICAgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEVFUFJPTSBzdHVmZgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBtZTQwMDBfZWVwcm9tX3JlYWQobWU0MDAwX2VlcHJvbV90ICogYXJnLAorCQkJICAgICAgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfZWVwcm9tX3dyaXRlKG1lNDAwMF9lZXByb21fdCAqIGFyZywKKwkJCSAgICAgICBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCk7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZWVwcm9tX3JlYWRfY21kKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0LAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY21kLCBpbnQgbGVuZ3RoKTsKK3N0YXRpYyBpbnQgZWVwcm9tX3dyaXRlX2NtZChtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCwgdW5zaWduZWQgbG9uZyBjbWQsCisJCQkgICAgaW50IGxlbmd0aCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGlnaXRhbCBJL08gc3R1ZmYKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkJICAgIHVuc2lnbmVkIGxvbmcpOworc3RhdGljIGludCBtZTQwMDBfZGlvX2NvbmZpZyhtZTQwMDBfZGlvX2NvbmZpZ190ICosIG1lNDAwMF9kaW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfZGlvX2dldF9ieXRlKG1lNDAwMF9kaW9fYnl0ZV90ICosIG1lNDAwMF9kaW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfZGlvX3NldF9ieXRlKG1lNDAwMF9kaW9fYnl0ZV90ICosIG1lNDAwMF9kaW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfZGlvX3Jlc2V0KG1lNDAwMF9kaW9fY29udGV4dF90ICopOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIENvdW50ZXIgc3R1ZmYKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkJICAgIHVuc2lnbmVkIGxvbmcpOworc3RhdGljIGludCBtZTQwMDBfY250X2NvbmZpZyhtZTQwMDBfY250X2NvbmZpZ190ICosIG1lNDAwMF9jbnRfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfY250X3JlYWQobWU0MDAwX2NudF90ICosIG1lNDAwMF9jbnRfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfY250X3dyaXRlKG1lNDAwMF9jbnRfdCAqLCBtZTQwMDBfY250X2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9yZXNldChtZTQwMDBfY250X2NvbnRleHRfdCAqKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFeHRlcm5hbCBpbnRlcnJ1cHQgcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJCQl1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfZW5hYmxlKG1lNDAwMF9leHRfaW50X2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfZGlzYWJsZShtZTQwMDBfZXh0X2ludF9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9leHRfaW50X2NvdW50KHVuc2lnbmVkIGxvbmcgKmFyZywKKwkJCQltZTQwMDBfZXh0X2ludF9jb250ZXh0X3QgKiBleHRfaW50X2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wdHIsIGludCBtb2RlKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBtZTQwMDBfYW9faXNyKGludCwgdm9pZCAqKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBtZTQwMDBfYWlfaXNyKGludCwgdm9pZCAqKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBtZTQwMDBfZXh0X2ludF9pc3IoaW50LCB2b2lkICopOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIElubGluZSBmdW5jdGlvbnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgaW5saW5lIG1lNDAwMF9idWZfY291bnQobWU0MDAwX2NpcmNfYnVmX3QsIGludCk7CitzdGF0aWMgaW50IGlubGluZSBtZTQwMDBfYnVmX3NwYWNlKG1lNDAwMF9jaXJjX2J1Zl90LCBpbnQpOworc3RhdGljIGludCBpbmxpbmUgbWU0MDAwX3NwYWNlX3RvX2VuZChtZTQwMDBfY2lyY19idWZfdCwgaW50KTsKK3N0YXRpYyBpbnQgaW5saW5lIG1lNDAwMF92YWx1ZXNfdG9fZW5kKG1lNDAwMF9jaXJjX2J1Zl90LCBpbnQpOworCitzdGF0aWMgdm9pZCBpbmxpbmUgbWU0MDAwX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK3N0YXRpYyB2b2lkIGlubGluZSBtZTQwMDBfb3V0bCh1bnNpZ25lZCBsb25nIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5saW5lIG1lNDAwMF9pbmwodW5zaWduZWQgbG9uZyBwb3J0KTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGlubGluZSBtZTQwMDBfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCk7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2J1Zl9jb3VudChtZTQwMDBfY2lyY19idWZfdCBidWYsIGludCBzaXplKQoreworCXJldHVybiAoKGJ1Zi5oZWFkIC0gYnVmLnRhaWwpICYgKHNpemUgLSAxKSk7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2J1Zl9zcGFjZShtZTQwMDBfY2lyY19idWZfdCBidWYsIGludCBzaXplKQoreworCXJldHVybiAoKGJ1Zi50YWlsIC0gKGJ1Zi5oZWFkICsgMSkpICYgKHNpemUgLSAxKSk7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX3ZhbHVlc190b19lbmQobWU0MDAwX2NpcmNfYnVmX3QgYnVmLCBpbnQgc2l6ZSkKK3sKKwlpbnQgZW5kOworCWludCBuOworCWVuZCA9IHNpemUgLSBidWYudGFpbDsKKwluID0gKGJ1Zi5oZWFkICsgZW5kKSAmIChzaXplIC0gMSk7CisJcmV0dXJuIChuIDwgZW5kKSA/IG4gOiBlbmQ7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX3NwYWNlX3RvX2VuZChtZTQwMDBfY2lyY19idWZfdCBidWYsIGludCBzaXplKQoreworCWludCBlbmQ7CisJaW50IG47CisKKwllbmQgPSBzaXplIC0gMSAtIGJ1Zi5oZWFkOworCW4gPSAoZW5kICsgYnVmLnRhaWwpICYgKHNpemUgLSAxKTsKKwlyZXR1cm4gKG4gPD0gZW5kKSA/IG4gOiAoZW5kICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIG1lNDAwMF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlQT1JUX1BERUJVRygiLS0+IDB4JTAyWCBwb3J0IDB4JTA0bFhcbiIsIHZhbHVlLCBwb3J0KTsKKwlvdXRiKHZhbHVlLCBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgbWU0MDAwX291dGwodW5zaWduZWQgbG9uZyB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCVBPUlRfUERFQlVHKCItLT4gMHglMDhsWCBwb3J0IDB4JTA0bFhcbiIsIHZhbHVlLCBwb3J0KTsKKwlvdXRsKHZhbHVlLCBwb3J0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWU0MDAwX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwl2YWx1ZSA9IGlubChwb3J0KTsKKwlQT1JUX1BERUJVRygiPC0tIDB4JTA4bFggcG9ydCAweCUwNGxYXG4iLCB2YWx1ZSwgcG9ydCk7CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBtZTQwMDBfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCXZhbHVlID0gaW5iKHBvcnQpOworCVBPUlRfUERFQlVHKCI8LS0gMHglMDhYIHBvcnQgMHglMDRsWFxuIiwgdmFsdWUsIHBvcnQpOworCXJldHVybiB2YWx1ZTsKK30KKworc3RydWN0IHBjaV9kcml2ZXIgbWU0MDAwX2RyaXZlciA9IHsKKwkubmFtZSA9IE1FNDAwMF9OQU1FLAorCS5pZF90YWJsZSA9IG1lNDAwMF9wY2lfdGFibGUsCisJLnByb2JlID0gbWU0MDAwX3Byb2JlCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYW9fZm9wc19zaW5nID0geworICAgICAgb3duZXI6VEhJU19NT0RVTEUsCisgICAgICB3cml0ZTptZTQwMDBfYW9fd3JpdGVfc2luZywKKyAgICAgIGlvY3RsOm1lNDAwMF9hb19pb2N0bF9zaW5nLAorICAgICAgb3BlbjptZTQwMDBfb3BlbiwKKyAgICAgIHJlbGVhc2U6bWU0MDAwX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYW9fZm9wc193cmFwID0geworICAgICAgb3duZXI6VEhJU19NT0RVTEUsCisgICAgICB3cml0ZTptZTQwMDBfYW9fd3JpdGVfd3JhcCwKKyAgICAgIGlvY3RsOm1lNDAwMF9hb19pb2N0bF93cmFwLAorICAgICAgb3BlbjptZTQwMDBfb3BlbiwKKyAgICAgIHJlbGVhc2U6bWU0MDAwX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYW9fZm9wc19jb250ID0geworICAgICAgb3duZXI6VEhJU19NT0RVTEUsCisgICAgICB3cml0ZTptZTQwMDBfYW9fd3JpdGVfY29udCwKKyAgICAgIHBvbGw6bWU0MDAwX2FvX3BvbGxfY29udCwKKyAgICAgIGlvY3RsOm1lNDAwMF9hb19pb2N0bF9jb250LAorICAgICAgb3BlbjptZTQwMDBfb3BlbiwKKyAgICAgIHJlbGVhc2U6bWU0MDAwX3JlbGVhc2UsCisgICAgICBmc3luYzptZTQwMDBfYW9fZnN5bmNfY29udCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX3NpbmcgPSB7CisgICAgICBvd25lcjpUSElTX01PRFVMRSwKKyAgICAgIGlvY3RsOm1lNDAwMF9haV9pb2N0bF9zaW5nLAorICAgICAgb3BlbjptZTQwMDBfb3BlbiwKKyAgICAgIHJlbGVhc2U6bWU0MDAwX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X3N3ID0geworICAgICAgb3duZXI6VEhJU19NT0RVTEUsCisgICAgICByZWFkOm1lNDAwMF9haV9yZWFkLAorICAgICAgcG9sbDptZTQwMDBfYWlfcG9sbCwKKyAgICAgIGlvY3RsOm1lNDAwMF9haV9pb2N0bF9zdywKKyAgICAgIG9wZW46bWU0MDAwX29wZW4sCisgICAgICByZWxlYXNlOm1lNDAwMF9yZWxlYXNlLAorICAgICAgZmFzeW5jOm1lNDAwMF9haV9mYXN5bmMsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X2V0ID0geworICAgICAgb3duZXI6VEhJU19NT0RVTEUsCisgICAgICByZWFkOm1lNDAwMF9haV9yZWFkLAorICAgICAgcG9sbDptZTQwMDBfYWlfcG9sbCwKKyAgICAgIGlvY3RsOm1lNDAwMF9haV9pb2N0bF9leHQsCisgICAgICBvcGVuOm1lNDAwMF9vcGVuLAorICAgICAgcmVsZWFzZTptZTQwMDBfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX2NvbnRfZXRfdmFsdWUgPSB7CisgICAgICBvd25lcjpUSElTX01PRFVMRSwKKyAgICAgIHJlYWQ6bWU0MDAwX2FpX3JlYWQsCisgICAgICBwb2xsOm1lNDAwMF9haV9wb2xsLAorICAgICAgaW9jdGw6bWU0MDAwX2FpX2lvY3RsX2V4dCwKKyAgICAgIG9wZW46bWU0MDAwX29wZW4sCisgICAgICByZWxlYXNlOm1lNDAwMF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfY29udF9ldF9jaGFubGlzdCA9IHsKKyAgICAgIG93bmVyOlRISVNfTU9EVUxFLAorICAgICAgcmVhZDptZTQwMDBfYWlfcmVhZCwKKyAgICAgIHBvbGw6bWU0MDAwX2FpX3BvbGwsCisgICAgICBpb2N0bDptZTQwMDBfYWlfaW9jdGxfZXh0LAorICAgICAgb3BlbjptZTQwMDBfb3BlbiwKKyAgICAgIHJlbGVhc2U6bWU0MDAwX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfZGlvX2ZvcHMgPSB7CisgICAgICBvd25lcjpUSElTX01PRFVMRSwKKyAgICAgIGlvY3RsOm1lNDAwMF9kaW9faW9jdGwsCisgICAgICBvcGVuOm1lNDAwMF9vcGVuLAorICAgICAgcmVsZWFzZTptZTQwMDBfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9jbnRfZm9wcyA9IHsKKyAgICAgIG93bmVyOlRISVNfTU9EVUxFLAorICAgICAgaW9jdGw6bWU0MDAwX2NudF9pb2N0bCwKKyAgICAgIG9wZW46bWU0MDAwX29wZW4sCisgICAgICByZWxlYXNlOm1lNDAwMF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2V4dF9pbnRfZm9wcyA9IHsKKyAgICAgIG93bmVyOlRISVNfTU9EVUxFLAorICAgICAgaW9jdGw6bWU0MDAwX2V4dF9pbnRfaW9jdGwsCisgICAgICBvcGVuOm1lNDAwMF9vcGVuLAorICAgICAgcmVsZWFzZTptZTQwMDBfcmVsZWFzZSwKKyAgICAgIGZhc3luYzptZTQwMDBfZXh0X2ludF9mYXN5bmMsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqbWU0MDAwX2FvX2ZvcHNfYXJyYXlbXSA9IHsKKwkmbWU0MDAwX2FvX2ZvcHNfc2luZywJLy8gc2luZ2xlIG9wZXJhdGlvbnMKKwkmbWU0MDAwX2FvX2ZvcHNfd3JhcCwJLy8gd3JhcGFyb3VuZCBvcGVyYXRpb25zCisJJm1lNDAwMF9hb19mb3BzX2NvbnQsCS8vIGNvbnRpbm91cyBvcGVyYXRpb25zCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqbWU0MDAwX2FpX2ZvcHNfYXJyYXlbXSA9IHsKKwkmbWU0MDAwX2FpX2ZvcHNfc2luZywJLy8gc2luZ2xlIG9wZXJhdGlvbnMKKwkmbWU0MDAwX2FpX2ZvcHNfY29udF9zdywJLy8gY29udGludW91cyBvcGVyYXRpb25zIHdpdGggc29mdHdhcmUgc3RhcnQKKwkmbWU0MDAwX2FpX2ZvcHNfY29udF9ldCwJLy8gY29udGlub3VzIG9wZXJhdGlvbnMgd2l0aCBleHRlcm5hbCB0cmlnZ2VyCisJJm1lNDAwMF9haV9mb3BzX2NvbnRfZXRfdmFsdWUsCS8vIHNhbXBsZSB2YWx1ZXMgYnkgZXh0ZXJuYWwgdHJpZ2dlcgorCSZtZTQwMDBfYWlfZm9wc19jb250X2V0X2NoYW5saXN0LAkvLyB3b3JrIHRocm91Z2ggb25lIGNoYW5uZWwgbGlzdCBieSBleHRlcm5hbCB0cmlnZ2VyCit9OworCitpbnQgX19pbml0IG1lNDAwMF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXN1bHQgPSAwOworCisJQ0FMTF9QREVCVUcoImluaXRfbW9kdWxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogUmVnaXN0ZXIgZHJpdmVyIGNhcGFiaWxpdGllcyAqLworCXJlc3VsdCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm1lNDAwMF9kcml2ZXIpOworCVBERUJVRygiaW5pdF9tb2R1bGUoKTolZCBkZXZpY2VzIGRldGVjdGVkXG4iLCByZXN1bHQpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTUU0MDAwOmluaXRfbW9kdWxlKCk6Q2FuJ3QgcmVnaXN0ZXIgZHJpdmVyXG4iKTsKKwkJZ290byBJTklUX0VSUk9SXzE7CisJfQorCisJLyogQWxsb2NhdGUgbWFqb3IgbnVtYmVyIGZvciBhbmFsb2cgb3V0cHV0ICovCisJcmVzdWx0ID0KKwkgICAgcmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9BT19OQU1FLAorCQkJICAgICZtZTQwMDBfYW9fZm9wc19zaW5nKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIk1FNDAwMDppbml0X21vZHVsZSgpOkNhbid0IGdldCBBTyBtYWpvciBub1xuIik7CisJCWdvdG8gSU5JVF9FUlJPUl8yOworCX0gZWxzZSB7CisJCW1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8gPSByZXN1bHQ7CisJfQorCVBERUJVRygiaW5pdF9tb2R1bGUoKTpNYWpvciBkcml2ZXIgbnVtYmVyIGZvciBBTyA9ICVsZFxuIiwKKwkgICAgICAgbWU0MDAwX2FvX21ham9yX2RyaXZlcl9ubyk7CisKKwkvKiBBbGxvY2F0ZSBtYWpvciBudW1iZXIgZm9yIGFuYWxvZyBpbnB1dCAgKi8KKwlyZXN1bHQgPQorCSAgICByZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0FJX05BTUUsCisJCQkgICAgJm1lNDAwMF9haV9mb3BzX3NpbmcpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTUU0MDAwOmluaXRfbW9kdWxlKCk6Q2FuJ3QgZ2V0IEFJIG1ham9yIG5vXG4iKTsKKwkJZ290byBJTklUX0VSUk9SXzM7CisJfSBlbHNlIHsKKwkJbWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubyA9IHJlc3VsdDsKKwl9CisJUERFQlVHKCJpbml0X21vZHVsZSgpOk1ham9yIGRyaXZlciBudW1iZXIgZm9yIEFJID0gJWxkXG4iLAorCSAgICAgICBtZTQwMDBfYWlfbWFqb3JfZHJpdmVyX25vKTsKKworCS8qIEFsbG9jYXRlIG1ham9yIG51bWJlciBmb3IgZGlnaXRhbCBJL08gKi8KKwlyZXN1bHQgPQorCSAgICByZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9ESU9fTkFNRSwKKwkJCSAgICAmbWU0MDAwX2Rpb19mb3BzKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6aW5pdF9tb2R1bGUoKTpDYW4ndCBnZXQgRElPIG1ham9yIG5vXG4iKTsKKwkJZ290byBJTklUX0VSUk9SXzQ7CisJfSBlbHNlIHsKKwkJbWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8gPSByZXN1bHQ7CisJfQorCVBERUJVRygiaW5pdF9tb2R1bGUoKTpNYWpvciBkcml2ZXIgbnVtYmVyIGZvciBESU8gPSAlbGRcbiIsCisJICAgICAgIG1lNDAwMF9kaW9fbWFqb3JfZHJpdmVyX25vKTsKKworCS8qIEFsbG9jYXRlIG1ham9yIG51bWJlciBmb3IgY291bnRlciAqLworCXJlc3VsdCA9CisJICAgIHJlZ2lzdGVyX2NocmRldihtZTQwMDBfY250X21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0NOVF9OQU1FLAorCQkJICAgICZtZTQwMDBfY250X2ZvcHMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDppbml0X21vZHVsZSgpOkNhbid0IGdldCBDTlQgbWFqb3Igbm9cbiIpOworCQlnb3RvIElOSVRfRVJST1JfNTsKKwl9IGVsc2UgeworCQltZTQwMDBfY250X21ham9yX2RyaXZlcl9ubyA9IHJlc3VsdDsKKwl9CisJUERFQlVHKCJpbml0X21vZHVsZSgpOk1ham9yIGRyaXZlciBudW1iZXIgZm9yIENOVCA9ICVsZFxuIiwKKwkgICAgICAgbWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8pOworCisJLyogQWxsb2NhdGUgbWFqb3IgbnVtYmVyIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgKi8KKwlyZXN1bHQgPQorCSAgICByZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfRVhUX0lOVF9OQU1FLAorCQkJICAgICZtZTQwMDBfZXh0X2ludF9mb3BzKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6aW5pdF9tb2R1bGUoKTpDYW4ndCBnZXQgbWFqb3Igbm8gZm9yIGV4dGVybmFsIGludGVycnVwdFxuIik7CisJCWdvdG8gSU5JVF9FUlJPUl82OworCX0gZWxzZSB7CisJCW1lNDAwMF9leHRfaW50X21ham9yX2RyaXZlcl9ubyA9IHJlc3VsdDsKKwl9CisJUERFQlVHCisJICAgICgiaW5pdF9tb2R1bGUoKTpNYWpvciBkcml2ZXIgbnVtYmVyIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgPSAlbGRcbiIsCisJICAgICBtZTQwMDBfZXh0X2ludF9tYWpvcl9kcml2ZXJfbm8pOworCisJLyogQ3JlYXRlIHRoZSAvcHJvYy9tZTQwMDAgZW50cnkgKi8KKwlpZiAoIWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkKKwkgICAgKCJtZTQwMDAiLCAwLCBOVUxMLCBtZTQwMDBfcmVhZF9wcm9jbWVtLCBOVUxMKSkgeworCQlyZXN1bHQgPSAtRU5PREVWOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6aW5pdF9tb2R1bGUoKTpDYW4ndCBjcmVhdGUgcHJvYyBlbnRyeVxuIik7CisJCWdvdG8gSU5JVF9FUlJPUl83OworCX0KKworCXJldHVybiAwOworCisgICAgICBJTklUX0VSUk9SXzc6CisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfRVhUX0lOVF9OQU1FKTsKKworICAgICAgSU5JVF9FUlJPUl82OgorCXVucmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfQ05UX05BTUUpOworCisgICAgICBJTklUX0VSUk9SXzU6CisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9ESU9fTkFNRSk7CisKKyAgICAgIElOSVRfRVJST1JfNDoKKwl1bnJlZ2lzdGVyX2NocmRldihtZTQwMDBfYWlfbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfQUlfTkFNRSk7CisKKyAgICAgIElOSVRfRVJST1JfMzoKKwl1bnJlZ2lzdGVyX2NocmRldihtZTQwMDBfYW9fbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfQU9fTkFNRSk7CisKKyAgICAgIElOSVRfRVJST1JfMjoKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm1lNDAwMF9kcml2ZXIpOworCWNsZWFyX2JvYXJkX2luZm9fbGlzdCgpOworCisgICAgICBJTklUX0VSUk9SXzE6CisJcmV0dXJuIHJlc3VsdDsKK30KKworbW9kdWxlX2luaXQobWU0MDAwX2luaXRfbW9kdWxlKTsKKworc3RhdGljIHZvaWQgY2xlYXJfYm9hcmRfaW5mb19saXN0KHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqYm9hcmRfcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpkYWNfcDsKKwltZTQwMDBfaW5mb190ICpib2FyZF9pbmZvOworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQ7CisKKwkvKiBDbGVhciBjb250ZXh0IGxpc3RzICovCisJZm9yIChib2FyZF9wID0gbWU0MDAwX2JvYXJkX2luZm9fbGlzdC5uZXh0OworCSAgICAgYm9hcmRfcCAhPSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdDsgYm9hcmRfcCA9IGJvYXJkX3AtPm5leHQpIHsKKwkJYm9hcmRfaW5mbyA9IGxpc3RfZW50cnkoYm9hcmRfcCwgbWU0MDAwX2luZm9fdCwgbGlzdCk7CisJCS8qIENsZWFyIGFuYWxvZyBvdXRwdXQgY29udGV4dCBsaXN0ICovCisJCXdoaWxlICghbGlzdF9lbXB0eSgmYm9hcmRfaW5mby0+YW9fY29udGV4dF9saXN0KSkgeworCQkJZGFjX3AgPSBib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3QubmV4dDsKKwkJCWFvX2NvbnRleHQgPQorCQkJICAgIGxpc3RfZW50cnkoZGFjX3AsIG1lNDAwMF9hb19jb250ZXh0X3QsIGxpc3QpOworCQkJbWU0MDAwX2FvX3Jlc2V0KGFvX2NvbnRleHQpOworCQkJZnJlZV9pcnEoYW9fY29udGV4dC0+aXJxLCBhb19jb250ZXh0KTsKKwkJCWlmIChhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYpCisJCQkJa2ZyZWUoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmKTsKKwkJCWxpc3RfZGVsKGRhY19wKTsKKwkJCWtmcmVlKGFvX2NvbnRleHQpOworCQl9CisKKwkJLyogQ2xlYXIgYW5hbG9nIGlucHV0IGNvbnRleHQgKi8KKwkJaWYgKGJvYXJkX2luZm8tPmFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZikKKwkJCWtmcmVlKGJvYXJkX2luZm8tPmFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1Zik7CisJCWtmcmVlKGJvYXJkX2luZm8tPmFpX2NvbnRleHQpOworCisJCS8qIENsZWFyIGRpZ2l0YWwgSS9PIGNvbnRleHQgKi8KKwkJa2ZyZWUoYm9hcmRfaW5mby0+ZGlvX2NvbnRleHQpOworCisJCS8qIENsZWFyIGNvdW50ZXIgY29udGV4dCAqLworCQlrZnJlZShib2FyZF9pbmZvLT5jbnRfY29udGV4dCk7CisKKwkJLyogQ2xlYXIgZXh0ZXJuYWwgaW50ZXJydXB0IGNvbnRleHQgKi8KKwkJa2ZyZWUoYm9hcmRfaW5mby0+ZXh0X2ludF9jb250ZXh0KTsKKwl9CisKKwkvKiBDbGVhciB0aGUgYm9hcmQgaW5mbyBsaXN0ICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZtZTQwMDBfYm9hcmRfaW5mb19saXN0KSkgeworCQlib2FyZF9wID0gbWU0MDAwX2JvYXJkX2luZm9fbGlzdC5uZXh0OworCQlib2FyZF9pbmZvID0gbGlzdF9lbnRyeShib2FyZF9wLCBtZTQwMDBfaW5mb190LCBsaXN0KTsKKwkJcGNpX3JlbGVhc2VfcmVnaW9ucyhib2FyZF9pbmZvLT5wY2lfZGV2X3ApOworCQlsaXN0X2RlbChib2FyZF9wKTsKKwkJa2ZyZWUoYm9hcmRfaW5mbyk7CisJfQorfQorCitzdGF0aWMgaW50IGdldF9yZWdpc3RlcnMoc3RydWN0IHBjaV9kZXYgKmRldiwgbWU0MDAwX2luZm9fdCAqIGJvYXJkX2luZm8pCit7CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwbHggcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisJYm9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAxKTsKKwlpZiAoYm9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6Z2V0X3JlZ2lzdGVycygpOlBDSSBiYXNlIGFkZHJlc3MgMSBpcyBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWJvYXJkX2luZm8tPnBseF9yZWdiYXNlX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMSk7CisKKwlQREVCVUcKKwkgICAgKCJnZXRfcmVnaXN0ZXJzKCk6UExYIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGF0IGFkZHJlc3MgMHglNGxYIFsweCU0bFhdXG4iLAorCSAgICAgYm9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UsIGJvYXJkX2luZm8tPnBseF9yZWdiYXNlX3NpemUpOworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWU0MDAwIHJlZ2Jhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCWJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMik7CisJaWYgKGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOmdldF9yZWdpc3RlcnMoKTpQQ0kgYmFzZSBhZGRyZXNzIDIgaXMgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZV9zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYsIDIpOworCisJUERFQlVHKCJnZXRfcmVnaXN0ZXJzKCk6TUU0MDAwIHJlZ2lzdGVycyBhdCBhZGRyZXNzIDB4JTRsWCBbMHglNGxYXVxuIiwKKwkgICAgICAgYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UsIGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlX3NpemUpOworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGltZXIgcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisJYm9hcmRfaW5mby0+dGltZXJfcmVnYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDMpOworCWlmIChib2FyZF9pbmZvLT50aW1lcl9yZWdiYXNlID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOmdldF9yZWdpc3RlcnMoKTpQQ0kgYmFzZSBhZGRyZXNzIDMgaXMgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlib2FyZF9pbmZvLT50aW1lcl9yZWdiYXNlX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMyk7CisKKwlQREVCVUcoImdldF9yZWdpc3RlcnMoKTpUaW1lciByZWdpc3RlcnMgYXQgYWRkcmVzcyAweCU0bFggWzB4JTRsWF1cbiIsCisJICAgICAgIGJvYXJkX2luZm8tPnRpbWVyX3JlZ2Jhc2UsIGJvYXJkX2luZm8tPnRpbWVyX3JlZ2Jhc2Vfc2l6ZSk7CisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwcm9ncmFtIHJlZ2Jhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCWJvYXJkX2luZm8tPnByb2dyYW1fcmVnYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDUpOworCWlmIChib2FyZF9pbmZvLT5wcm9ncmFtX3JlZ2Jhc2UgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJnZXRfcmVnaXN0ZXJzKCk6TUU0MDAwOlBDSSBiYXNlIGFkZHJlc3MgNSBpcyBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWJvYXJkX2luZm8tPnByb2dyYW1fcmVnYmFzZV9zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYsIDUpOworCisJUERFQlVHKCJnZXRfcmVnaXN0ZXJzKCk6UHJvZ3JhbSByZWdpc3RlcnMgYXQgYWRkcmVzcyAweCU0bFggWzB4JTRsWF1cbiIsCisJICAgICAgIGJvYXJkX2luZm8tPnByb2dyYW1fcmVnYmFzZSwgYm9hcmRfaW5mby0+cHJvZ3JhbV9yZWdiYXNlX3NpemUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9ib2FyZF9pbmZvKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3AsCisJCQkgICBtZTQwMDBfaW5mb190ICogYm9hcmRfaW5mbykKK3sKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBsaXN0X2hlYWQgKmJvYXJkX3A7CisJYm9hcmRfaW5mby0+cGNpX2Rldl9wID0gcGNpX2Rldl9wOworCisJZm9yIChpID0gMDsgaSA8IE1FNDAwMF9CT0FSRF9WRVJTSU9OUzsgaSsrKSB7CisJCWlmIChtZTQwMDBfYm9hcmRzW2ldLmRldmljZV9pZCA9PSBwY2lfZGV2X3AtPmRldmljZSkgeworCQkJYm9hcmRfaW5mby0+Ym9hcmRfcCA9ICZtZTQwMDBfYm9hcmRzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gTUU0MDAwX0JPQVJEX1ZFUlNJT05TKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDppbml0X2JvYXJkX2luZm8oKTpEZXZpY2UgSUQgbm90IHZhbGlkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogR2V0IHRoZSBpbmRleCBvZiB0aGUgYm9hcmQgaW4gdGhlIGdsb2JhbCBsaXN0ICovCisJZm9yIChib2FyZF9wID0gbWU0MDAwX2JvYXJkX2luZm9fbGlzdC5uZXh0LCBpID0gMDsKKwkgICAgIGJvYXJkX3AgIT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3Q7IGJvYXJkX3AgPSBib2FyZF9wLT5uZXh0LCBpKyspIHsKKwkJaWYgKGJvYXJkX3AgPT0gJmJvYXJkX2luZm8tPmxpc3QpIHsKKwkJCWJvYXJkX2luZm8tPmJvYXJkX2NvdW50ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChib2FyZF9wID09ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDppbml0X2JvYXJkX2luZm8oKTpDYW5ub3QgZ2V0IGluZGV4IG9mIGJhb3JkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogSW5pdCBsaXN0IGhlYWQgZm9yIGFuYWxvZyBvdXRwdXQgY29udGV4dHMgKi8KKwlJTklUX0xJU1RfSEVBRCgmYm9hcmRfaW5mby0+YW9fY29udGV4dF9saXN0KTsKKworCS8qIEluaXQgc3BpbiBsb2NrcyAqLworCXNwaW5fbG9ja19pbml0KCZib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZib2FyZF9pbmZvLT5haV9jdHJsX2xvY2spOworCisJLyogR2V0IHRoZSBzZXJpYWwgbnVtYmVyICovCisJcmVzdWx0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9kZXZfcCwgMHgyQywgJmJvYXJkX2luZm8tPnNlcmlhbF9ubyk7CisJaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIk1FNDAwMDppbml0X2JvYXJkX2luZm86IENhbid0IGdldCBzZXJpYWxfbm9cbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlQREVCVUcoImluaXRfYm9hcmRfaW5mbygpOnNlcmlhbF9ubyA9IDB4JXhcbiIsIGJvYXJkX2luZm8tPnNlcmlhbF9ubyk7CisKKwkvKiBHZXQgdGhlIGhhcmR3YXJlIHJldmlzaW9uICovCisJcmVzdWx0ID0KKwkgICAgcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2Rldl9wLCAweDA4LCAmYm9hcmRfaW5mby0+aHdfcmV2aXNpb24pOworCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJNRTQwMDA6aW5pdF9ib2FyZF9pbmZvKCk6Q2FuJ3QgZ2V0IGh3X3JldmlzaW9uXG4iKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJUERFQlVHKCJpbml0X2JvYXJkX2luZm8oKTpod19yZXZpc2lvbiA9IDB4JXhcbiIsCisJICAgICAgIGJvYXJkX2luZm8tPmh3X3JldmlzaW9uKTsKKworCS8qIEdldCB0aGUgdmVuZG9yIGlkICovCisJYm9hcmRfaW5mby0+dmVuZG9yX2lkID0gcGNpX2Rldl9wLT52ZW5kb3I7CisJUERFQlVHKCJpbml0X2JvYXJkX2luZm8oKTp2ZW5kb3JfaWQgPSAweCV4XG4iLCBib2FyZF9pbmZvLT52ZW5kb3JfaWQpOworCisJLyogR2V0IHRoZSBkZXZpY2UgaWQgKi8KKwlib2FyZF9pbmZvLT5kZXZpY2VfaWQgPSBwY2lfZGV2X3AtPmRldmljZTsKKwlQREVCVUcoImluaXRfYm9hcmRfaW5mbygpOmRldmljZV9pZCA9IDB4JXhcbiIsIGJvYXJkX2luZm8tPmRldmljZV9pZCk7CisKKwkvKiBHZXQgdGhlIHBjaSBkZXZpY2UgbnVtYmVyICovCisJYm9hcmRfaW5mby0+cGNpX2Rldl9ubyA9IFBDSV9GVU5DKHBjaV9kZXZfcC0+ZGV2Zm4pOworCVBERUJVRygiaW5pdF9ib2FyZF9pbmZvKCk6cGNpX2Z1bmNfbm8gPSAweCV4XG4iLAorCSAgICAgICBib2FyZF9pbmZvLT5wY2lfZnVuY19ubyk7CisKKwkvKiBHZXQgdGhlIHBjaSBzbG90IG51bWJlciAqLworCWJvYXJkX2luZm8tPnBjaV9kZXZfbm8gPSBQQ0lfU0xPVChwY2lfZGV2X3AtPmRldmZuKTsKKwlQREVCVUcoImluaXRfYm9hcmRfaW5mbygpOnBjaV9kZXZfbm8gPSAweCV4XG4iLCBib2FyZF9pbmZvLT5wY2lfZGV2X25vKTsKKworCS8qIEdldCB0aGUgcGNpIGJ1cyBudW1iZXIgKi8KKwlib2FyZF9pbmZvLT5wY2lfYnVzX25vID0gcGNpX2Rldl9wLT5idXMtPm51bWJlcjsKKwlQREVCVUcoImluaXRfYm9hcmRfaW5mbygpOnBjaV9idXNfbm8gPSAweCV4XG4iLCBib2FyZF9pbmZvLT5wY2lfYnVzX25vKTsKKworCS8qIEdldCB0aGUgaXJxIGFzc2lnbmVkIHRvIHRoZSBib2FyZCAqLworCWJvYXJkX2luZm8tPmlycSA9IHBjaV9kZXZfcC0+aXJxOworCVBERUJVRygiaW5pdF9ib2FyZF9pbmZvKCk6aXJxID0gJWRcbiIsIGJvYXJkX2luZm8tPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbGxvY19hb19jb250ZXh0cyhtZTQwMDBfaW5mb190ICogaW5mbykKK3sKKwlpbnQgaTsKKwlpbnQgZXJyOworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+Ym9hcmRfcC0+YW8uY291bnQ7IGkrKykgeworCQlhb19jb250ZXh0ID0ga21hbGxvYyhzaXplb2YobWU0MDAwX2FvX2NvbnRleHRfdCksIEdGUF9LRVJORUwpOworCQlpZiAoIWFvX2NvbnRleHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJhbGxvY19hb19jb250ZXh0cygpOkNhbid0IGdldCBtZW1vcnkgZm9yIGFvIGNvbnRleHRcbiIpOworCQkJcmVsZWFzZV9hb19jb250ZXh0cyhpbmZvKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldChhb19jb250ZXh0LCAwLCBzaXplb2YobWU0MDAwX2FvX2NvbnRleHRfdCkpOworCisJCXNwaW5fbG9ja19pbml0KCZhb19jb250ZXh0LT51c2VfbG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZhb19jb250ZXh0LT5pbnRfbG9jayk7CisJCWFvX2NvbnRleHQtPmlycSA9IGluZm8tPmlycTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmYW9fY29udGV4dC0+d2FpdF9xdWV1ZSk7CisJCWFvX2NvbnRleHQtPmJvYXJkX2luZm8gPSBpbmZvOworCisJCWlmIChpbmZvLT5ib2FyZF9wLT5hby5maWZvX2NvdW50KSB7CisJCQkvKiBBbGxvY2F0ZSBjaXJjdWxhciBidWZmZXIgKi8KKwkJCWFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiA9CisJCQkgICAga21hbGxvYyhNRTQwMDBfQU9fQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgImFsbG9jX2FvX2NvbnRleHRzKCk6Q2FuJ3QgZ2V0IGNpcmN1bGFyIGJ1ZmZlclxuIik7CisJCQkJcmVsZWFzZV9hb19jb250ZXh0cyhpbmZvKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCW1lbXNldChhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYsIDAsCisJCQkgICAgICAgTUU0MDAwX0FPX0JVRkZFUl9TSVpFKTsKKworCQkJLyogQ2xlYXIgdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworCQkJYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCA9IDA7CisJCQlhb19jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKwkJfQorCisJCXN3aXRjaCAoaSkgeworCQljYXNlIDA6CisJCQlhb19jb250ZXh0LT5jdHJsX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDBfQ1RSTF9SRUc7CisJCQlhb19jb250ZXh0LT5zdGF0dXNfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMF9TVEFUVVNfUkVHOworCQkJYW9fY29udGV4dC0+Zmlmb19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAwX0ZJRk9fUkVHOworCQkJYW9fY29udGV4dC0+c2luZ2xlX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDBfU0lOR0xFX1JFRzsKKwkJCWFvX2NvbnRleHQtPnRpbWVyX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDBfVElNRVJfUkVHOworCQkJYW9fY29udGV4dC0+aXJxX3N0YXR1c19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0lSUV9TVEFUVVNfUkVHOworCQkJYW9fY29udGV4dC0+cHJlbG9hZF9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPX0xPQURTRVRSRUdfWFg7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJYW9fY29udGV4dC0+Y3RybF9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAxX0NUUkxfUkVHOworCQkJYW9fY29udGV4dC0+c3RhdHVzX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDFfU1RBVFVTX1JFRzsKKwkJCWFvX2NvbnRleHQtPmZpZm9fcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMV9GSUZPX1JFRzsKKwkJCWFvX2NvbnRleHQtPnNpbmdsZV9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAxX1NJTkdMRV9SRUc7CisJCQlhb19jb250ZXh0LT50aW1lcl9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAxX1RJTUVSX1JFRzsKKwkJCWFvX2NvbnRleHQtPmlycV9zdGF0dXNfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9JUlFfU1RBVFVTX1JFRzsKKwkJCWFvX2NvbnRleHQtPnByZWxvYWRfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT19MT0FEU0VUUkVHX1hYOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWFvX2NvbnRleHQtPmN0cmxfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMl9DVFJMX1JFRzsKKwkJCWFvX2NvbnRleHQtPnN0YXR1c19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAyX1NUQVRVU19SRUc7CisJCQlhb19jb250ZXh0LT5maWZvX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDJfRklGT19SRUc7CisJCQlhb19jb250ZXh0LT5zaW5nbGVfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMl9TSU5HTEVfUkVHOworCQkJYW9fY29udGV4dC0+dGltZXJfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMl9USU1FUl9SRUc7CisJCQlhb19jb250ZXh0LT5pcnFfc3RhdHVzX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfSVJRX1NUQVRVU19SRUc7CisJCQlhb19jb250ZXh0LT5wcmVsb2FkX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fTE9BRFNFVFJFR19YWDsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlhb19jb250ZXh0LT5jdHJsX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDNfQ1RSTF9SRUc7CisJCQlhb19jb250ZXh0LT5zdGF0dXNfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wM19TVEFUVVNfUkVHOworCQkJYW9fY29udGV4dC0+Zmlmb19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAzX0ZJRk9fUkVHOworCQkJYW9fY29udGV4dC0+c2luZ2xlX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDNfU0lOR0xFX1JFRzsKKwkJCWFvX2NvbnRleHQtPnRpbWVyX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDNfVElNRVJfUkVHOworCQkJYW9fY29udGV4dC0+aXJxX3N0YXR1c19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0lSUV9TVEFUVVNfUkVHOworCQkJYW9fY29udGV4dC0+cHJlbG9hZF9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPX0xPQURTRVRSRUdfWFg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGluZm8tPmJvYXJkX3AtPmFvLmZpZm9fY291bnQpIHsKKwkJCS8qIFJlcXVlc3QgdGhlIGludGVycnVwdCBsaW5lICovCisJCQllcnIgPQorCQkJICAgIHJlcXVlc3RfaXJxKGFvX2NvbnRleHQtPmlycSwgbWU0MDAwX2FvX2lzciwKKwkJCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAorCQkJCQlNRTQwMDBfTkFNRSwgYW9fY29udGV4dCk7CisJCQlpZiAoZXJyKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJhbGxvY19hb19jb250ZXh0cygpOkNhbid0IGdldCBpbnRlcnJ1cHQgbGluZSIpOworCQkJCWlmIChhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYpCisJCQkJCWtmcmVlKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1Zik7CisJCQkJa2ZyZWUoYW9fY29udGV4dCk7CisJCQkJcmVsZWFzZV9hb19jb250ZXh0cyhpbmZvKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJfQorCisJCWxpc3RfYWRkX3RhaWwoJmFvX2NvbnRleHQtPmxpc3QsICZpbmZvLT5hb19jb250ZXh0X2xpc3QpOworCQlhb19jb250ZXh0LT5pbmRleCA9IGk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfYW9fY29udGV4dHMobWU0MDAwX2luZm9fdCAqIGJvYXJkX2luZm8pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZGFjX3A7CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dDsKKworCS8qIENsZWFyIGFuYWxvZyBvdXRwdXQgY29udGV4dCBsaXN0ICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3QpKSB7CisJCWRhY19wID0gYm9hcmRfaW5mby0+YW9fY29udGV4dF9saXN0Lm5leHQ7CisJCWFvX2NvbnRleHQgPSBsaXN0X2VudHJ5KGRhY19wLCBtZTQwMDBfYW9fY29udGV4dF90LCBsaXN0KTsKKwkJZnJlZV9pcnEoYW9fY29udGV4dC0+aXJxLCBhb19jb250ZXh0KTsKKwkJaWYgKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZikKKwkJCWtmcmVlKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1Zik7CisJCWxpc3RfZGVsKGRhY19wKTsKKwkJa2ZyZWUoYW9fY29udGV4dCk7CisJfQorfQorCitzdGF0aWMgaW50IGFsbG9jX2FpX2NvbnRleHQobWU0MDAwX2luZm9fdCAqIGluZm8pCit7CisJbWU0MDAwX2FpX2NvbnRleHRfdCAqYWlfY29udGV4dDsKKworCWlmIChpbmZvLT5ib2FyZF9wLT5haS5jb3VudCkgeworCQlhaV9jb250ZXh0ID0ga21hbGxvYyhzaXplb2YobWU0MDAwX2FpX2NvbnRleHRfdCksIEdGUF9LRVJORUwpOworCQlpZiAoIWFpX2NvbnRleHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6YWxsb2NfYWlfY29udGV4dCgpOkNhbid0IGdldCBtZW1vcnkgZm9yIGFpIGNvbnRleHRcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KGFpX2NvbnRleHQsIDAsIHNpemVvZihtZTQwMDBfYWlfY29udGV4dF90KSk7CisKKwkJaW5mby0+YWlfY29udGV4dCA9IGFpX2NvbnRleHQ7CisKKwkJc3Bpbl9sb2NrX2luaXQoJmFpX2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwkJYWlfY29udGV4dC0+bnVtYmVyID0gMDsKKwkJYWlfY29udGV4dC0+aXJxID0gaW5mby0+aXJxOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhaV9jb250ZXh0LT53YWl0X3F1ZXVlKTsKKwkJYWlfY29udGV4dC0+Ym9hcmRfaW5mbyA9IGluZm87CisKKwkJYWlfY29udGV4dC0+Y3RybF9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfQ1RSTF9SRUc7CisJCWFpX2NvbnRleHQtPnN0YXR1c19yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfU1RBVFVTX1JFRzsKKwkJYWlfY29udGV4dC0+Y2hhbm5lbF9saXN0X3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9DSEFOTkVMX0xJU1RfUkVHOworCQlhaV9jb250ZXh0LT5kYXRhX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9EQVRBX1JFRzsKKwkJYWlfY29udGV4dC0+Y2hhbl90aW1lcl9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfQ0hBTl9USU1FUl9SRUc7CisJCWFpX2NvbnRleHQtPmNoYW5fcHJlX3RpbWVyX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9DSEFOX1BSRV9USU1FUl9SRUc7CisJCWFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93X3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9TQ0FOX1RJTUVSX0xPV19SRUc7CisJCWFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaF9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfU0NBTl9USU1FUl9ISUdIX1JFRzsKKwkJYWlfY29udGV4dC0+c2Nhbl9wcmVfdGltZXJfbG93X3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9TQ0FOX1BSRV9USU1FUl9MT1dfUkVHOworCQlhaV9jb250ZXh0LT5zY2FuX3ByZV90aW1lcl9oaWdoX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9TQ0FOX1BSRV9USU1FUl9ISUdIX1JFRzsKKwkJYWlfY29udGV4dC0+c3RhcnRfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX1NUQVJUX1JFRzsKKwkJYWlfY29udGV4dC0+aXJxX3N0YXR1c19yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfSVJRX1NUQVRVU19SRUc7CisJCWFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9TQU1QTEVfQ09VTlRFUl9SRUc7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfZGlvX2NvbnRleHQobWU0MDAwX2luZm9fdCAqIGluZm8pCit7CisJbWU0MDAwX2Rpb19jb250ZXh0X3QgKmRpb19jb250ZXh0OworCisJaWYgKGluZm8tPmJvYXJkX3AtPmRpby5jb3VudCkgeworCQlkaW9fY29udGV4dCA9IGttYWxsb2Moc2l6ZW9mKG1lNDAwMF9kaW9fY29udGV4dF90KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZGlvX2NvbnRleHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6YWxsb2NfZGlvX2NvbnRleHQoKTpDYW4ndCBnZXQgbWVtb3J5IGZvciBkaW8gY29udGV4dFxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQoZGlvX2NvbnRleHQsIDAsIHNpemVvZihtZTQwMDBfZGlvX2NvbnRleHRfdCkpOworCisJCWluZm8tPmRpb19jb250ZXh0ID0gZGlvX2NvbnRleHQ7CisKKwkJc3Bpbl9sb2NrX2luaXQoJmRpb19jb250ZXh0LT51c2VfbG9jayk7CisJCWRpb19jb250ZXh0LT5ib2FyZF9pbmZvID0gaW5mbzsKKworCQlkaW9fY29udGV4dC0+ZGlvX2NvdW50ID0gaW5mby0+Ym9hcmRfcC0+ZGlvLmNvdW50OworCisJCWRpb19jb250ZXh0LT5kaXJfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19ESVJfUkVHOworCQlkaW9fY29udGV4dC0+Y3RybF9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX0NUUkxfUkVHOworCQlkaW9fY29udGV4dC0+cG9ydF8wX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9ESU9fUE9SVF8wX1JFRzsKKwkJZGlvX2NvbnRleHQtPnBvcnRfMV9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX1BPUlRfMV9SRUc7CisJCWRpb19jb250ZXh0LT5wb3J0XzJfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19QT1JUXzJfUkVHOworCQlkaW9fY29udGV4dC0+cG9ydF8zX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9ESU9fUE9SVF8zX1JFRzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbGxvY19jbnRfY29udGV4dChtZTQwMDBfaW5mb190ICogaW5mbykKK3sKKwltZTQwMDBfY250X2NvbnRleHRfdCAqY250X2NvbnRleHQ7CisKKwlpZiAoaW5mby0+Ym9hcmRfcC0+Y250LmNvdW50KSB7CisJCWNudF9jb250ZXh0ID0ga21hbGxvYyhzaXplb2YobWU0MDAwX2NudF9jb250ZXh0X3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjbnRfY29udGV4dCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDphbGxvY19jbnRfY29udGV4dCgpOkNhbid0IGdldCBtZW1vcnkgZm9yIGNudCBjb250ZXh0XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldChjbnRfY29udGV4dCwgMCwgc2l6ZW9mKG1lNDAwMF9jbnRfY29udGV4dF90KSk7CisKKwkJaW5mby0+Y250X2NvbnRleHQgPSBjbnRfY29udGV4dDsKKworCQlzcGluX2xvY2tfaW5pdCgmY250X2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJY250X2NvbnRleHQtPmJvYXJkX2luZm8gPSBpbmZvOworCisJCWNudF9jb250ZXh0LT5jdHJsX3JlZyA9CisJCSAgICBpbmZvLT50aW1lcl9yZWdiYXNlICsgTUU0MDAwX0NOVF9DVFJMX1JFRzsKKwkJY250X2NvbnRleHQtPmNvdW50ZXJfMF9yZWcgPQorCQkgICAgaW5mby0+dGltZXJfcmVnYmFzZSArIE1FNDAwMF9DTlRfQ09VTlRFUl8wX1JFRzsKKwkJY250X2NvbnRleHQtPmNvdW50ZXJfMV9yZWcgPQorCQkgICAgaW5mby0+dGltZXJfcmVnYmFzZSArIE1FNDAwMF9DTlRfQ09VTlRFUl8xX1JFRzsKKwkJY250X2NvbnRleHQtPmNvdW50ZXJfMl9yZWcgPQorCQkgICAgaW5mby0+dGltZXJfcmVnYmFzZSArIE1FNDAwMF9DTlRfQ09VTlRFUl8yX1JFRzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbGxvY19leHRfaW50X2NvbnRleHQobWU0MDAwX2luZm9fdCAqIGluZm8pCit7CisJbWU0MDAwX2V4dF9pbnRfY29udGV4dF90ICpleHRfaW50X2NvbnRleHQ7CisKKwlpZiAoaW5mby0+Ym9hcmRfcC0+Y250LmNvdW50KSB7CisJCWV4dF9pbnRfY29udGV4dCA9CisJCSAgICBrbWFsbG9jKHNpemVvZihtZTQwMDBfZXh0X2ludF9jb250ZXh0X3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFleHRfaW50X2NvbnRleHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6YWxsb2NfZXh0X2ludF9jb250ZXh0KCk6Q2FuJ3QgZ2V0IG1lbW9yeSBmb3IgY250IGNvbnRleHRcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KGV4dF9pbnRfY29udGV4dCwgMCwgc2l6ZW9mKG1lNDAwMF9leHRfaW50X2NvbnRleHRfdCkpOworCisJCWluZm8tPmV4dF9pbnRfY29udGV4dCA9IGV4dF9pbnRfY29udGV4dDsKKworCQlzcGluX2xvY2tfaW5pdCgmZXh0X2ludF9jb250ZXh0LT51c2VfbG9jayk7CisJCWV4dF9pbnRfY29udGV4dC0+Ym9hcmRfaW5mbyA9IGluZm87CisKKwkJZXh0X2ludF9jb250ZXh0LT5mYXN5bmNfcHRyID0gTlVMTDsKKwkJZXh0X2ludF9jb250ZXh0LT5pcnEgPSBpbmZvLT5pcnE7CisKKwkJZXh0X2ludF9jb250ZXh0LT5jdHJsX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9DVFJMX1JFRzsKKwkJZXh0X2ludF9jb250ZXh0LT5pcnFfc3RhdHVzX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9JUlFfU1RBVFVTX1JFRzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXN1bHQgPSAwOworCW1lNDAwMF9pbmZvX3QgKmJvYXJkX2luZm87CisKKwlDQUxMX1BERUJVRygibWU0MDAwX3Byb2JlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQWxsb2NhdGUgc3RydWN0dXJlIGZvciBib2FyZCBjb250ZXh0ICovCisJYm9hcmRfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKG1lNDAwMF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJvYXJkX2luZm8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOkNhbid0IGdldCBtZW1vcnkgZm9yIGJvYXJkIGluZm8gc3RydWN0dXJlXG4iKTsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBQUk9CRV9FUlJPUl8xOworCX0KKwltZW1zZXQoYm9hcmRfaW5mbywgMCwgc2l6ZW9mKG1lNDAwMF9pbmZvX3QpKTsKKworCS8qIEFkZCB0byBnbG9iYWwgbGlua2VkIGxpc3QgKi8KKwlsaXN0X2FkZF90YWlsKCZib2FyZF9pbmZvLT5saXN0LCAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdCk7CisKKwkvKiBHZXQgdGhlIFBDSSBiYXNlIHJlZ2lzdGVycyAqLworCXJlc3VsdCA9IGdldF9yZWdpc3RlcnMoZGV2LCBib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX3Byb2JlKCk6Q2Fubm90IGdldCByZWdpc3RlcnNcbiIpOworCQlnb3RvIFBST0JFX0VSUk9SXzI7CisJfQorCisJLyogRW5hYmxlIHRoZSBkZXZpY2UgKi8KKwlyZXN1bHQgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX3Byb2JlKCk6Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKKwkJZ290byBQUk9CRV9FUlJPUl8yOworCX0KKworCS8qIFJlcXVlc3QgdGhlIFBDSSByZWdpc3RlciByZWdpb25zICovCisJcmVzdWx0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYsIE1FNDAwMF9OQU1FKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9wcm9iZSgpOkNhbm5vdCByZXF1ZXN0IEkvTyByZWdpb25zXG4iKTsKKwkJZ290byBQUk9CRV9FUlJPUl8yOworCX0KKworCS8qIEluaXRpYWxpemUgYm9hcmQgaW5mbyAqLworCXJlc3VsdCA9IGluaXRfYm9hcmRfaW5mbyhkZXYsIGJvYXJkX2luZm8pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfcHJvYmUoKTpDYW5ub3QgaW5pdCBiYW9yZCBpbmZvXG4iKTsKKwkJZ290byBQUk9CRV9FUlJPUl8zOworCX0KKworCS8qIERvd25sb2FkIHRoZSB4aWxpbnggZmlybXdhcmUgKi8KKwlyZXN1bHQgPSBtZTQwMDBfeGlsaW54X2Rvd25sb2FkKGJvYXJkX2luZm8pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfcHJvYmU6Q2FuJ3QgZG93bmxvYWQgZmlybXdhcmVcbiIpOworCQlnb3RvIFBST0JFX0VSUk9SXzM7CisJfQorCisJLyogTWFrZSBhIGhhcmR3YXJlIHJlc2V0ICovCisJcmVzdWx0ID0gbWU0MDAwX3Jlc2V0X2JvYXJkKGJvYXJkX2luZm8pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfcHJvYmU6Q2FuJ3QgcmVzZXQgYm9hcmRcbiIpOworCQlnb3RvIFBST0JFX0VSUk9SXzM7CisJfQorCisJLyogQWxsb2NhdGUgYW5hbG9nIG91dHB1dCBjb250ZXh0IHN0cnVjdHVyZXMgKi8KKwlyZXN1bHQgPSBhbGxvY19hb19jb250ZXh0cyhib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX3Byb2JlKCk6Q2Fubm90IGFsbG9jYXRlIGFvIGNvbnRleHRzXG4iKTsKKwkJZ290byBQUk9CRV9FUlJPUl8zOworCX0KKworCS8qIEFsbG9jYXRlIGFuYWxvZyBpbnB1dCBjb250ZXh0ICovCisJcmVzdWx0ID0gYWxsb2NfYWlfY29udGV4dChib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX3Byb2JlKCk6Q2Fubm90IGFsbG9jYXRlIGFpIGNvbnRleHRcbiIpOworCQlnb3RvIFBST0JFX0VSUk9SXzQ7CisJfQorCisJLyogQWxsb2NhdGUgZGlnaXRhbCBJL08gY29udGV4dCAqLworCXJlc3VsdCA9IGFsbG9jX2Rpb19jb250ZXh0KGJvYXJkX2luZm8pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfcHJvYmUoKTpDYW5ub3QgYWxsb2NhdGUgZGlvIGNvbnRleHRcbiIpOworCQlnb3RvIFBST0JFX0VSUk9SXzU7CisJfQorCisJLyogQWxsb2NhdGUgY291bnRlciBjb250ZXh0ICovCisJcmVzdWx0ID0gYWxsb2NfY250X2NvbnRleHQoYm9hcmRfaW5mbyk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9wcm9iZSgpOkNhbm5vdCBhbGxvY2F0ZSBjbnQgY29udGV4dFxuIik7CisJCWdvdG8gUFJPQkVfRVJST1JfNjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBleHRlcm5hbCBpbnRlcnJ1cHQgY29udGV4dCAqLworCXJlc3VsdCA9IGFsbG9jX2V4dF9pbnRfY29udGV4dChib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9wcm9iZSgpOkNhbm5vdCBhbGxvY2F0ZSBleHRfaW50IGNvbnRleHRcbiIpOworCQlnb3RvIFBST0JFX0VSUk9SXzc7CisJfQorCisJcmV0dXJuIDA7CisKKyAgICAgIFBST0JFX0VSUk9SXzc6CisJa2ZyZWUoYm9hcmRfaW5mby0+Y250X2NvbnRleHQpOworCisgICAgICBQUk9CRV9FUlJPUl82OgorCWtmcmVlKGJvYXJkX2luZm8tPmRpb19jb250ZXh0KTsKKworICAgICAgUFJPQkVfRVJST1JfNToKKwlrZnJlZShib2FyZF9pbmZvLT5haV9jb250ZXh0KTsKKworICAgICAgUFJPQkVfRVJST1JfNDoKKwlyZWxlYXNlX2FvX2NvbnRleHRzKGJvYXJkX2luZm8pOworCisgICAgICBQUk9CRV9FUlJPUl8zOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKworICAgICAgUFJPQkVfRVJST1JfMjoKKwlsaXN0X2RlbCgmYm9hcmRfaW5mby0+bGlzdCk7CisJa2ZyZWUoYm9hcmRfaW5mbyk7CisKKyAgICAgIFBST0JFX0VSUk9SXzE6CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBtZTQwMDBfeGlsaW54X2Rvd25sb2FkKG1lNDAwMF9pbmZvX3QgKiBpbmZvKQoreworCWludCBzaXplID0gMDsKKwl1MzIgdmFsdWUgPSAwOworCWludCBpZHggPSAwOworCXVuc2lnbmVkIGNoYXIgKmZpcm07CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX3hpbGlueF9kb3dubG9hZCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCWZpcm0gPSAoaW5mby0+ZGV2aWNlX2lkID09IDB4NDYxMCkgPyB4aWxpbnhfZmlybV80NjEwIDogeGlsaW54X2Zpcm07CisKKwkvKgorCSAqIFNldCBQTFggbG9jYWwgaW50ZXJydXB0IDIgcG9sYXJpdHkgdG8gaGlnaC4KKwkgKiBJbnRlcnJ1cHQgaXMgdGhyb3duIGJ5IGluaXQgcGluIG9mIHhpbGlueC4KKwkgKi8KKwlvdXRsKDB4MTAsIGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lOVENTUik7CisKKwkvKiBTZXQgL0NTIGFuZCAvV1JJVEUgb2YgdGhlIFhpbGlueCAqLworCXZhbHVlID0gaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJdmFsdWUgfD0gMHgxMDA7CisJb3V0bCh2YWx1ZSwgaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKworCS8qIEluaXQgWGlsaW54IHdpdGggQ1MxICovCisJaW5iKGluZm8tPnByb2dyYW1fcmVnYmFzZSArIDB4QzgpOworCisJLyogV2FpdCB1bnRpbCAvSU5JVCBwaW4gaXMgc2V0ICovCisJdWRlbGF5KDIwKTsKKwlpZiAoIWlubChpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JTlRDU1IpICYgMHgyMCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF94aWxpbnhfZG93bmxvYWQoKTpDYW4ndCBpbml0IFhpbGlueFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFJlc2V0IC9DUyBhbmQgL1dSSVRFIG9mIHRoZSBYaWxpbnggKi8KKwl2YWx1ZSA9IGlubChpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCXZhbHVlICY9IH4weDEwMDsKKwlvdXRsKHZhbHVlLCBpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCisJLyogRG93bmxvYWQgWGlsaW54IGZpcm13YXJlICovCisJc2l6ZSA9IChmaXJtWzBdIDw8IDI0KSArIChmaXJtWzFdIDw8IDE2KSArIChmaXJtWzJdIDw8IDgpICsgZmlybVszXTsKKwl1ZGVsYXkoMTApOworCisJZm9yIChpZHggPSAwOyBpZHggPCBzaXplOyBpZHgrKykgeworCQlvdXRiKGZpcm1bMTYgKyBpZHhdLCBpbmZvLT5wcm9ncmFtX3JlZ2Jhc2UpOworCisJCXVkZWxheSgxMCk7CisKKwkJLyogQ2hlY2sgaWYgQlVTWSBmbGFnIGlzIGxvdyAqLworCQlpZiAoaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUikgJiAweDIwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAibWU0MDAwX3hpbGlueF9kb3dubG9hZCgpOlhpbGlueCBpcyBzdGlsbCBidXN5IChpZHggPSAlZClcbiIsCisJCQkgICAgICAgaWR4KTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJUERFQlVHKCJtZTQwMDBfeGlsaW54X2Rvd25sb2FkKCk6JWQgYnl0ZXMgd3JpdHRlblxuIiwgaWR4KTsKKworCS8qIElmIGRvbmUgZmxhZyBpcyBoaWdoIGRvd25sb2FkIHdhcyBzdWNjZXNzZnVsICovCisJaWYgKGlubChpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpICYgMHg0KSB7CisJCVBERUJVRygibWU0MDAwX3hpbGlueF9kb3dubG9hZCgpOkRvbmUgZmxhZyBpcyBzZXRcbiIpOworCQlQREVCVUcoIm1lNDAwMF94aWxpbnhfZG93bmxvYWQoKTpEb3dubG9hZCB3YXMgc3VjY2Vzc2Z1bFxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF94aWxpbnhfZG93bmxvYWQoKTpET05FIGZsYWcgaXMgbm90IHNldFxuIik7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfeGlsaW54X2Rvd25sb2FkKCk6RG93bmxvYWQgbm90IHN1Y2Nlc2Z1bFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFNldCAvQ1MgYW5kIC9XUklURSAqLworCXZhbHVlID0gaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJdmFsdWUgfD0gMHgxMDA7CisJb3V0bCh2YWx1ZSwgaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9yZXNldF9ib2FyZChtZTQwMDBfaW5mb190ICogaW5mbykKK3sKKwl1bnNpZ25lZCBsb25nIGljcjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfcmVzZXRfYm9hcmQoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBNYWtlIGEgaGFyZHdhcmUgcmVzZXQgKi8KKwlpY3IgPSBtZTQwMDBfaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJaWNyIHw9IDB4NDAwMDAwMDA7CisJbWU0MDAwX291dGwoaWNyLCBpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCWljciAmPSB+MHg0MDAwMDAwMDsKKwltZTQwMDBfb3V0bChpY3IsIGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisKKwkvKiBTZXQgYm90aCBzdG9wIGJpdHMgaW4gdGhlIGFuYWxvZyBpbnB1dCBjb250cm9sIHJlZ2lzdGVyICovCisJbWU0MDAwX291dGwoTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QIHwgTUU0MDAwX0FJX0NUUkxfQklUX1NUT1AsCisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9DVFJMX1JFRyk7CisKKwkvKiBTZXQgYm90aCBzdG9wIGJpdHMgaW4gdGhlIGFuYWxvZyBvdXRwdXQgY29udHJvbCByZWdpc3RlciAqLworCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QLAorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDBfQ1RSTF9SRUcpOworCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QLAorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDFfQ1RSTF9SRUcpOworCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QLAorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDJfQ1RSTF9SRUcpOworCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QLAorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDNfQ1RSTF9SRUcpOworCisJLyogMHg4MDAwIHRvIHRoZSBEQUNzIG1lYW5zIGFuIG91dHB1dCB2b2x0YWdlIG9mIDBWICovCisJbWU0MDAwX291dGwoMHg4MDAwLCBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMF9TSU5HTEVfUkVHKTsKKwltZTQwMDBfb3V0bCgweDgwMDAsIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAxX1NJTkdMRV9SRUcpOworCW1lNDAwMF9vdXRsKDB4ODAwMCwgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDJfU0lOR0xFX1JFRyk7CisJbWU0MDAwX291dGwoMHg4MDAwLCBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wM19TSU5HTEVfUkVHKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBQTFggKi8KKwltZTQwMDBfb3V0bCgweDQzLCBpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JTlRDU1IpOworCisJLyogU2V0IHRoZSBhZHVzdG1lbnQgcmVnaXN0ZXIgZm9yIEFPIGRlbXV4ICovCisJbWU0MDAwX291dGwoTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9WQUxVRSwKKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9SRUcpOworCisJLyogU2V0IGRpZ2l0YWwgSS9PIGRpcmVjdGlvbiBmb3IgcG9ydCAwIHRvIG91dHB1dCBvbiBpc29sYXRlZCB2ZXJzaW9ucyAqLworCWlmICghKG1lNDAwMF9pbmwoaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX0RJUl9SRUcpICYgMHgxKSkgeworCQltZTQwMDBfb3V0bCgweDEsIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19DVFJMX1JFRyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX29wZW4oc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wKQoreworCWludCBib2FyZCwgZGV2LCBtb2RlOworCWludCBlcnIgPSAwOworCWludCBpOworCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjsKKwltZTQwMDBfaW5mb190ICpib2FyZF9pbmZvID0gTlVMTDsKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0ID0gTlVMTDsKKwltZTQwMDBfYWlfY29udGV4dF90ICphaV9jb250ZXh0ID0gTlVMTDsKKwltZTQwMDBfZGlvX2NvbnRleHRfdCAqZGlvX2NvbnRleHQgPSBOVUxMOworCW1lNDAwMF9jbnRfY29udGV4dF90ICpjbnRfY29udGV4dCA9IE5VTEw7CisJbWU0MDAwX2V4dF9pbnRfY29udGV4dF90ICpleHRfaW50X2NvbnRleHQgPSBOVUxMOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9vcGVuKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQW5hbG9nIG91dHB1dCAqLworCWlmIChNQUpPUihpbm9kZV9wLT5pX3JkZXYpID09IG1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8pIHsKKwkJYm9hcmQgPSBBT19CT0FSRChpbm9kZV9wLT5pX3JkZXYpOworCQlkZXYgPSBBT19QT1JUKGlub2RlX3AtPmlfcmRldik7CisJCW1vZGUgPSBBT19NT0RFKGlub2RlX3AtPmlfcmRldik7CisKKwkJUERFQlVHKCJtZTQwMDBfb3BlbigpOmJvYXJkID0gJWQgYW8gPSAlZCBtb2RlID0gJWRcbiIsIGJvYXJkLAorCQkgICAgICAgZGV2LCBtb2RlKTsKKworCQkvKiBTZWFyY2ggZm9yIHRoZSBib2FyZCBjb250ZXh0ICovCisJCWZvciAocHRyID0gbWU0MDAwX2JvYXJkX2luZm9fbGlzdC5uZXh0LCBpID0gMDsKKwkJICAgICBwdHIgIT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3Q7IHB0ciA9IHB0ci0+bmV4dCwgaSsrKSB7CisJCQlib2FyZF9pbmZvID0gbGlzdF9lbnRyeShwdHIsIG1lNDAwMF9pbmZvX3QsIGxpc3QpOworCQkJaWYgKGkgPT0gYm9hcmQpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHRyID09ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6Qm9hcmQgJWQgbm90IGluIGRldmljZSBsaXN0XG4iLAorCQkJICAgICAgIGJvYXJkKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogU2VhcmNoIGZvciB0aGUgZGFjIGNvbnRleHQgKi8KKwkJZm9yIChwdHIgPSBib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3QubmV4dCwgaSA9IDA7CisJCSAgICAgcHRyICE9ICZib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3Q7CisJCSAgICAgcHRyID0gcHRyLT5uZXh0LCBpKyspIHsKKwkJCWFvX2NvbnRleHQgPSBsaXN0X2VudHJ5KHB0ciwgbWU0MDAwX2FvX2NvbnRleHRfdCwgbGlzdCk7CisJCQlpZiAoaSA9PSBkZXYpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHRyID09ICZib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3QpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpEZXZpY2UgJWQgbm90IGluIGRldmljZSBsaXN0XG4iLAorCQkJICAgICAgIGRldik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIENoZWNrIGlmIG1vZGUgaXMgdmFsaWQgKi8KKwkJaWYgKG1vZGUgPiAyKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6TW9kZSBpcyBub3QgdmFsaWRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBDaGVjayBpZiBtb2RlIGlzIHZhbGlkIGZvciB0aGlzIEFPICovCisJCWlmICgobW9kZSAhPSBNRTQwMDBfQU9fQ09OVl9NT0RFX1NJTkdMRSkKKwkJICAgICYmIChkZXYgPj0gYm9hcmRfaW5mby0+Ym9hcmRfcC0+YW8uZmlmb19jb3VudCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpBTyAlZCBvbmx5IGluIHNpbmdsZSBtb2RlIGF2YWlsYWJsZVxuIiwKKwkJCSAgICAgICBkZXYpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBDaGVjayBpZiBhbHJlYWR5IG9wZW5lZCAqLworCQlzcGluX2xvY2soJmFvX2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJaWYgKGFvX2NvbnRleHQtPmRhY19pbl91c2UpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpBTyAlZCBhbHJlYWR5IGluIHVzZVxuIiwKKwkJCSAgICAgICBkZXYpOworCQkJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJYW9fY29udGV4dC0+ZGFjX2luX3VzZSA9IDE7CisJCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT51c2VfbG9jayk7CisKKwkJYW9fY29udGV4dC0+bW9kZSA9IG1vZGU7CisKKwkJLyogSG9sZCB0aGUgY29udGV4dCBpbiBwcml2YXRlIGRhdGEgKi8KKwkJZmlsZV9wLT5wcml2YXRlX2RhdGEgPSBhb19jb250ZXh0OworCisJCS8qIFNldCBmaWxlIG9wZXJhdGlvbnMgcG9pbnRlciAqLworCQlmaWxlX3AtPmZfb3AgPSBtZTQwMDBfYW9fZm9wc19hcnJheVttb2RlXTsKKworCQllcnIgPSBtZTQwMDBfYW9fcHJlcGFyZShhb19jb250ZXh0KTsKKwkJaWYgKGVycikgeworCQkJYW9fY29udGV4dC0+ZGFjX2luX3VzZSA9IDA7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwkvKiBBbmFsb2cgaW5wdXQgKi8KKwllbHNlIGlmIChNQUpPUihpbm9kZV9wLT5pX3JkZXYpID09IG1lNDAwMF9haV9tYWpvcl9kcml2ZXJfbm8pIHsKKwkJYm9hcmQgPSBBSV9CT0FSRChpbm9kZV9wLT5pX3JkZXYpOworCQltb2RlID0gQUlfTU9ERShpbm9kZV9wLT5pX3JkZXYpOworCisJCVBERUJVRygibWU0MDAwX29wZW4oKTphaSBib2FyZCA9ICVkIG1vZGUgPSAlZFxuIiwgYm9hcmQsIG1vZGUpOworCisJCS8qIFNlYXJjaCBmb3IgdGhlIGJvYXJkIGNvbnRleHQgKi8KKwkJZm9yIChwdHIgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQsIGkgPSAwOworCQkgICAgIHB0ciAhPSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdDsgcHRyID0gcHRyLT5uZXh0LCBpKyspIHsKKwkJCWJvYXJkX2luZm8gPSBsaXN0X2VudHJ5KHB0ciwgbWU0MDAwX2luZm9fdCwgbGlzdCk7CisJCQlpZiAoaSA9PSBib2FyZCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChwdHIgPT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpCb2FyZCAlZCBub3QgaW4gZGV2aWNlIGxpc3RcbiIsCisJCQkgICAgICAgYm9hcmQpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQlhaV9jb250ZXh0ID0gYm9hcmRfaW5mby0+YWlfY29udGV4dDsKKworCQkvKiBDaGVjayBpZiBtb2RlIGlzIHZhbGlkICovCisJCWlmIChtb2RlID4gNSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOk1vZGUgaXMgbm90IHZhbGlkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyogQ2hlY2sgaWYgYWxyZWFkeSBvcGVuZWQgKi8KKwkJc3Bpbl9sb2NrKCZhaV9jb250ZXh0LT51c2VfbG9jayk7CisJCWlmIChhaV9jb250ZXh0LT5pbl91c2UpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpBSSBhbHJlYWR5IGluIHVzZVxuIik7CisJCQlzcGluX3VubG9jaygmYWlfY29udGV4dC0+dXNlX2xvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlhaV9jb250ZXh0LT5pbl91c2UgPSAxOworCQlzcGluX3VubG9jaygmYWlfY29udGV4dC0+dXNlX2xvY2spOworCisJCWFpX2NvbnRleHQtPm1vZGUgPSBtb2RlOworCisJCS8qIEhvbGQgdGhlIGNvbnRleHQgaW4gcHJpdmF0ZSBkYXRhICovCisJCWZpbGVfcC0+cHJpdmF0ZV9kYXRhID0gYWlfY29udGV4dDsKKworCQkvKiBTZXQgZmlsZSBvcGVyYXRpb25zIHBvaW50ZXIgKi8KKwkJZmlsZV9wLT5mX29wID0gbWU0MDAwX2FpX2ZvcHNfYXJyYXlbbW9kZV07CisKKwkJLyogUHJlcGFyZSBhbmFsb2cgaW5wdXQgKi8KKwkJbWU0MDAwX2FpX3ByZXBhcmUoYWlfY29udGV4dCk7CisJfQorCS8qIERpZ2l0YWwgSS9PICovCisJZWxzZSBpZiAoTUFKT1IoaW5vZGVfcC0+aV9yZGV2KSA9PSBtZTQwMDBfZGlvX21ham9yX2RyaXZlcl9ubykgeworCQlib2FyZCA9IERJT19CT0FSRChpbm9kZV9wLT5pX3JkZXYpOworCQlkZXYgPSAwOworCQltb2RlID0gMDsKKworCQlQREVCVUcoIm1lNDAwMF9vcGVuKCk6Ym9hcmQgPSAlZFxuIiwgYm9hcmQpOworCisJCS8qIFNlYXJjaCBmb3IgdGhlIGJvYXJkIGNvbnRleHQgKi8KKwkJZm9yIChwdHIgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQ7CisJCSAgICAgcHRyICE9ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0OyBwdHIgPSBwdHItPm5leHQpIHsKKwkJCWJvYXJkX2luZm8gPSBsaXN0X2VudHJ5KHB0ciwgbWU0MDAwX2luZm9fdCwgbGlzdCk7CisJCQlpZiAoYm9hcmRfaW5mby0+Ym9hcmRfY291bnQgPT0gYm9hcmQpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHRyID09ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6Qm9hcmQgJWQgbm90IGluIGRldmljZSBsaXN0XG4iLAorCQkJICAgICAgIGJvYXJkKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogU2VhcmNoIGZvciB0aGUgZGlvIGNvbnRleHQgKi8KKwkJZGlvX2NvbnRleHQgPSBib2FyZF9pbmZvLT5kaW9fY29udGV4dDsKKworCQkvKiBDaGVjayBpZiBhbHJlYWR5IG9wZW5lZCAqLworCQlzcGluX2xvY2soJmRpb19jb250ZXh0LT51c2VfbG9jayk7CisJCWlmIChkaW9fY29udGV4dC0+aW5fdXNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6RElPIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJCXNwaW5fdW5sb2NrKCZkaW9fY29udGV4dC0+dXNlX2xvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlkaW9fY29udGV4dC0+aW5fdXNlID0gMTsKKwkJc3Bpbl91bmxvY2soJmRpb19jb250ZXh0LT51c2VfbG9jayk7CisKKwkJLyogSG9sZCB0aGUgY29udGV4dCBpbiBwcml2YXRlIGRhdGEgKi8KKwkJZmlsZV9wLT5wcml2YXRlX2RhdGEgPSBkaW9fY29udGV4dDsKKworCQkvKiBTZXQgZmlsZSBvcGVyYXRpb25zIHBvaW50ZXIgdG8gc2luZ2xlIGZ1bmN0aW9ucyAqLworCQlmaWxlX3AtPmZfb3AgPSAmbWU0MDAwX2Rpb19mb3BzOworCisJCS8vbWU0MDAwX2Rpb19yZXNldChkaW9fY29udGV4dCk7CisJfQorCS8qIENvdW50ZXJzICovCisJZWxzZSBpZiAoTUFKT1IoaW5vZGVfcC0+aV9yZGV2KSA9PSBtZTQwMDBfY250X21ham9yX2RyaXZlcl9ubykgeworCQlib2FyZCA9IENOVF9CT0FSRChpbm9kZV9wLT5pX3JkZXYpOworCQlkZXYgPSAwOworCQltb2RlID0gMDsKKworCQlQREVCVUcoIm1lNDAwMF9vcGVuKCk6Ym9hcmQgPSAlZFxuIiwgYm9hcmQpOworCisJCS8qIFNlYXJjaCBmb3IgdGhlIGJvYXJkIGNvbnRleHQgKi8KKwkJZm9yIChwdHIgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQ7CisJCSAgICAgcHRyICE9ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0OyBwdHIgPSBwdHItPm5leHQpIHsKKwkJCWJvYXJkX2luZm8gPSBsaXN0X2VudHJ5KHB0ciwgbWU0MDAwX2luZm9fdCwgbGlzdCk7CisJCQlpZiAoYm9hcmRfaW5mby0+Ym9hcmRfY291bnQgPT0gYm9hcmQpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHRyID09ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6Qm9hcmQgJWQgbm90IGluIGRldmljZSBsaXN0XG4iLAorCQkJICAgICAgIGJvYXJkKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogR2V0IHRoZSBjbnQgY29udGV4dCAqLworCQljbnRfY29udGV4dCA9IGJvYXJkX2luZm8tPmNudF9jb250ZXh0OworCisJCS8qIENoZWNrIGlmIGFscmVhZHkgb3BlbmVkICovCisJCXNwaW5fbG9jaygmY250X2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJaWYgKGNudF9jb250ZXh0LT5pbl91c2UpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpDTlQgYWxyZWFkeSBpbiB1c2VcbiIpOworCQkJc3Bpbl91bmxvY2soJmNudF9jb250ZXh0LT51c2VfbG9jayk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWNudF9jb250ZXh0LT5pbl91c2UgPSAxOworCQlzcGluX3VubG9jaygmY250X2NvbnRleHQtPnVzZV9sb2NrKTsKKworCQkvKiBIb2xkIHRoZSBjb250ZXh0IGluIHByaXZhdGUgZGF0YSAqLworCQlmaWxlX3AtPnByaXZhdGVfZGF0YSA9IGNudF9jb250ZXh0OworCisJCS8qIFNldCBmaWxlIG9wZXJhdGlvbnMgcG9pbnRlciB0byBzaW5nbGUgZnVuY3Rpb25zICovCisJCWZpbGVfcC0+Zl9vcCA9ICZtZTQwMDBfY250X2ZvcHM7CisJfQorCS8qIEV4dGVybmFsIEludGVycnVwdCAqLworCWVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vKSB7CisJCWJvYXJkID0gRVhUX0lOVF9CT0FSRChpbm9kZV9wLT5pX3JkZXYpOworCQlkZXYgPSAwOworCQltb2RlID0gMDsKKworCQlQREVCVUcoIm1lNDAwMF9vcGVuKCk6Ym9hcmQgPSAlZFxuIiwgYm9hcmQpOworCisJCS8qIFNlYXJjaCBmb3IgdGhlIGJvYXJkIGNvbnRleHQgKi8KKwkJZm9yIChwdHIgPSBtZTQwMDBfYm9hcmRfaW5mb19saXN0Lm5leHQ7CisJCSAgICAgcHRyICE9ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0OyBwdHIgPSBwdHItPm5leHQpIHsKKwkJCWJvYXJkX2luZm8gPSBsaXN0X2VudHJ5KHB0ciwgbWU0MDAwX2luZm9fdCwgbGlzdCk7CisJCQlpZiAoYm9hcmRfaW5mby0+Ym9hcmRfY291bnQgPT0gYm9hcmQpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHRyID09ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6Qm9hcmQgJWQgbm90IGluIGRldmljZSBsaXN0XG4iLAorCQkJICAgICAgIGJvYXJkKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogR2V0IHRoZSBleHRlcm5hbCBpbnRlcnJ1cHQgY29udGV4dCAqLworCQlleHRfaW50X2NvbnRleHQgPSBib2FyZF9pbmZvLT5leHRfaW50X2NvbnRleHQ7CisKKwkJLyogQ2hlY2sgaWYgYWxyZWFkeSBvcGVuZWQgKi8KKwkJc3Bpbl9sb2NrKCZjbnRfY29udGV4dC0+dXNlX2xvY2spOworCQlpZiAoZXh0X2ludF9jb250ZXh0LT5pbl91c2UpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpFeHRlcm5hbCBpbnRlcnJ1cHQgYWxyZWFkeSBpbiB1c2VcbiIpOworCQkJc3Bpbl91bmxvY2soJmV4dF9pbnRfY29udGV4dC0+dXNlX2xvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlleHRfaW50X2NvbnRleHQtPmluX3VzZSA9IDE7CisJCXNwaW5fdW5sb2NrKCZleHRfaW50X2NvbnRleHQtPnVzZV9sb2NrKTsKKworCQkvKiBIb2xkIHRoZSBjb250ZXh0IGluIHByaXZhdGUgZGF0YSAqLworCQlmaWxlX3AtPnByaXZhdGVfZGF0YSA9IGV4dF9pbnRfY29udGV4dDsKKworCQkvKiBTZXQgZmlsZSBvcGVyYXRpb25zIHBvaW50ZXIgdG8gc2luZ2xlIGZ1bmN0aW9ucyAqLworCQlmaWxlX3AtPmZfb3AgPSAmbWU0MDAwX2V4dF9pbnRfZm9wczsKKworCQkvKiBSZXF1ZXN0IHRoZSBpbnRlcnJ1cHQgbGluZSAqLworCQllcnIgPQorCQkgICAgcmVxdWVzdF9pcnEoZXh0X2ludF9jb250ZXh0LT5pcnEsIG1lNDAwMF9leHRfaW50X2lzciwKKwkJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsIE1FNDAwMF9OQU1FLAorCQkJCWV4dF9pbnRfY29udGV4dCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpDYW4ndCBnZXQgaW50ZXJydXB0IGxpbmUiKTsKKwkJCWV4dF9pbnRfY29udGV4dC0+aW5fdXNlID0gMDsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogUmVzZXQgdGhlIGNvdW50ZXIgKi8KKwkJbWU0MDAwX2V4dF9pbnRfZGlzYWJsZShleHRfaW50X2NvbnRleHQpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6TWFqb3IgbnVtYmVyIHVua25vd25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3ApCit7CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dDsKKwltZTQwMDBfYWlfY29udGV4dF90ICphaV9jb250ZXh0OworCW1lNDAwMF9kaW9fY29udGV4dF90ICpkaW9fY29udGV4dDsKKwltZTQwMDBfY250X2NvbnRleHRfdCAqY250X2NvbnRleHQ7CisJbWU0MDAwX2V4dF9pbnRfY29udGV4dF90ICpleHRfaW50X2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX3JlbGVhc2UoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpZiAoTUFKT1IoaW5vZGVfcC0+aV9yZGV2KSA9PSBtZTQwMDBfYW9fbWFqb3JfZHJpdmVyX25vKSB7CisJCWFvX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCQkvKiBNYXJrIERBQyBhcyB1bnVzZWQgKi8KKwkJYW9fY29udGV4dC0+ZGFjX2luX3VzZSA9IDA7CisJfSBlbHNlIGlmIChNQUpPUihpbm9kZV9wLT5pX3JkZXYpID09IG1lNDAwMF9haV9tYWpvcl9kcml2ZXJfbm8pIHsKKwkJYWlfY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJCS8qIFJlc2V0IHRoZSBhbmFsb2cgaW5wdXQgKi8KKwkJbWU0MDAwX2FpX3Jlc2V0KGFpX2NvbnRleHQpOworCisJCS8qIEZyZWUgdGhlIGludGVycnVwdCBhbmQgdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworCQlpZiAoYWlfY29udGV4dC0+bW9kZSkgeworCQkJZnJlZV9pcnEoYWlfY29udGV4dC0+aXJxLCBhaV9jb250ZXh0KTsKKwkJCWtmcmVlKGFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1Zik7CisJCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYgPSBOVUxMOworCQkJYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCA9IDA7CisJCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKwkJfQorCisJCS8qIE1hcmsgQUkgYXMgdW51c2VkICovCisJCWFpX2NvbnRleHQtPmluX3VzZSA9IDA7CisJfSBlbHNlIGlmIChNQUpPUihpbm9kZV9wLT5pX3JkZXYpID09IG1lNDAwMF9kaW9fbWFqb3JfZHJpdmVyX25vKSB7CisJCWRpb19jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwkJLyogTWFyayBkaWdpdGFsIEkvTyBhcyB1bnVzZWQgKi8KKwkJZGlvX2NvbnRleHQtPmluX3VzZSA9IDA7CisJfSBlbHNlIGlmIChNQUpPUihpbm9kZV9wLT5pX3JkZXYpID09IG1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vKSB7CisJCWNudF9jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwkJLyogTWFyayBjb3VudGVycyBhcyB1bnVzZWQgKi8KKwkJY250X2NvbnRleHQtPmluX3VzZSA9IDA7CisJfSBlbHNlIGlmIChNQUpPUihpbm9kZV9wLT5pX3JkZXYpID09IG1lNDAwMF9leHRfaW50X21ham9yX2RyaXZlcl9ubykgeworCQlleHRfaW50X2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCQkvKiBEaXNhYmxlIHRoZSBleHRlcm5lbCBpbnRlcnJ1cHQgKi8KKwkJbWU0MDAwX2V4dF9pbnRfZGlzYWJsZShleHRfaW50X2NvbnRleHQpOworCisJCWZyZWVfaXJxKGV4dF9pbnRfY29udGV4dC0+aXJxLCBleHRfaW50X2NvbnRleHQpOworCisJCS8qIERlbGV0ZSB0aGUgZmFzeW5jIHN0cnVjdHVyZSBhbmQgZnJlZSBtZW1vcnkgKi8KKwkJbWU0MDAwX2V4dF9pbnRfZmFzeW5jKDAsIGZpbGVfcCwgMCk7CisKKwkJLyogTWFyayBhcyB1bnVzZWQgKi8KKwkJZXh0X2ludF9jb250ZXh0LT5pbl91c2UgPSAwOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfcmVsZWFzZSgpOk1ham9yIG51bWJlciB1bmtub3duXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBbmFsb2cgb3V0cHV0IHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBtZTQwMDBfYW9fcHJlcGFyZShtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19wcmVwYXJlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaWYgKGFvX2NvbnRleHQtPm1vZGUgPT0gTUU0MDAwX0FPX0NPTlZfTU9ERV9DT05USU5VT1VTKSB7CisJCS8qIE9ubHkgZG8gYW55dGhpbmcgaWYgbm90IGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgbW9kZSAqLworCQl1bnNpZ25lZCBsb25nIG1vZGUgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJaWYgKChtb2RlICYgTUU0MDAwX0FPX0NPTlZfTU9ERV9DT05USU5VT1VTKQorCQkgICAgJiYgKG1vZGUgJiBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk8pKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIFN0b3AgYW55IGNvbnZlcnNpb24gKi8KKwkJbWU0MDAwX2FvX2ltbWVkaWF0ZV9zdG9wKGFvX2NvbnRleHQpOworCisJCS8qIFNldCB0aGUgY29udHJvbCByZWdpc3RlciB0byBkZWZhdWx0IHN0YXRlICAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJbWU0MDAwX291dGwoTUU0MDAwX0FPX0NPTlZfTU9ERV9DT05USU5VT1VTIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk8gfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AsCisJCQkgICAgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJCS8qIFNldCB0byBmYXN0ZXN0IHNhbXBsZSByYXRlICovCisJCW1lNDAwMF9vdXRsKDY1LCBhb19jb250ZXh0LT50aW1lcl9yZWcpOworCX0gZWxzZSBpZiAoYW9fY29udGV4dC0+bW9kZSA9PSBNRTQwMDBfQU9fQ09OVl9NT0RFX1dSQVBBUk9VTkQpIHsKKwkJLyogT25seSBkbyBhbnl0aGluZyBpZiBub3QgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBtb2RlICovCisJCXVuc2lnbmVkIGxvbmcgbW9kZSA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlpZiAoKG1vZGUgJiBNRTQwMDBfQU9fQ09OVl9NT0RFX1dSQVBBUk9VTkQpCisJCSAgICAmJiAobW9kZSAmIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTykpIHsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogU3RvcCBhbnkgY29udmVyc2lvbiAqLworCQltZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AoYW9fY29udGV4dCk7CisKKwkJLyogU2V0IHRoZSBjb250cm9sIHJlZ2lzdGVyIHRvIGRlZmF1bHQgc3RhdGUgICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQltZTQwMDBfb3V0bChNRTQwMDBfQU9fQ09OVl9NT0RFX1dSQVBBUk9VTkQgfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTyB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCwKKwkJCSAgICBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwkJLyogU2V0IHRvIGZhc3Rlc3Qgc2FtcGxlIHJhdGUgKi8KKwkJbWU0MDAwX291dGwoNjUsIGFvX2NvbnRleHQtPnRpbWVyX3JlZyk7CisJfSBlbHNlIGlmIChhb19jb250ZXh0LT5tb2RlID09IE1FNDAwMF9BT19DT05WX01PREVfU0lOR0xFKSB7CisJCS8qIE9ubHkgZG8gYW55dGhpbmcgaWYgbm90IGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgbW9kZSAqLworCQl1bnNpZ25lZCBsb25nIG1vZGUgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJaWYgKCEKKwkJICAgIChtb2RlICYKKwkJICAgICAoTUU0MDAwX0FPX0NPTlZfTU9ERV9XUkFQQVJPVU5EIHwKKwkJICAgICAgTUU0MDAwX0FPX0NPTlZfTU9ERV9DT05USU5VT1VTKSkpIHsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogU3RvcCBhbnkgY29udmVyc2lvbiAqLworCQltZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AoYW9fY29udGV4dCk7CisKKwkJLyogQ2xlYXIgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCW1lNDAwMF9vdXRsKDB4MCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJCS8qIFNldCB2b2x0YWdlIHRvIDBWICovCisJCW1lNDAwMF9vdXRsKDB4ODAwMCwgYW9fY29udGV4dC0+c2luZ2xlX3JlZyk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19wcmVwYXJlKCk6SW52YWxpZCBtb2RlIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19yZXNldChtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3Jlc2V0KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJaWYgKGFvX2NvbnRleHQtPm1vZGUgPT0gTUU0MDAwX0FPX0NPTlZfTU9ERV9XUkFQQVJPVU5EKSB7CisJCS8qCisJCSAqIEZpcnN0IHN0b3AgY29udmVyc2lvbiBvZiB0aGUgREFDIGJlZm9yZSByZWNvbmZpZ3VyZS4KKwkJICogVGhpcyBpcyBlc3NhbnRpYWwsIGNhdXNlIG9mIHRoZSBzdGF0ZSBtYWNoaW5lLgorCQkgKiBJZiBub3Qgc3RvcHBlZCBiZWZvcmUgY29uZmlndXJpbmcgbW9kZSwgaXQgY291bGQKKwkJICogd2FsayBpbiBhIHVuZGVmaW5lZCBzdGF0ZS4KKwkJICovCisJCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgfD0gTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QOworCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCQl3aGlsZSAoaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCQlzbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCX0KKworCQkvKiBTZXQgdG8gdHJhbnNwYXJlbnQgbW9kZSAqLworCQltZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2Rpc2FibGUoYW9fY29udGV4dCk7CisKKwkJLyogU2V0IHRvIHNpbmdsZSBtb2RlIGluIG9yZGVyIHRvIHNldCBkZWZhdWx0IHZvbHRhZ2UgKi8KKwkJbWU0MDAwX291dGwoMHgwLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkJLyogU2V0IHZvbHRhZ2UgdG8gMFYgKi8KKwkJbWU0MDAwX291dGwoMHg4MDAwLCBhb19jb250ZXh0LT5zaW5nbGVfcmVnKTsKKworCQkvKiBTZXQgdG8gZmFzdGVzdCBzYW1wbGUgcmF0ZSAqLworCQltZTQwMDBfb3V0bCg2NSwgYW9fY29udGV4dC0+dGltZXJfcmVnKTsKKworCQkvKiBTZXQgdGhlIG9yaWdpbmFsIG1vZGUgYW5kIGVuYWJsZSBGSUZPICovCisJCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19DT05WX01PREVfV1JBUEFST1VORCB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9GSUZPIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QLAorCQkJICAgIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl9IGVsc2UgaWYgKGFvX2NvbnRleHQtPm1vZGUgPT0gTUU0MDAwX0FPX0NPTlZfTU9ERV9DT05USU5VT1VTKSB7CisJCS8qCisJCSAqIEZpcnN0IHN0b3AgY29udmVyc2lvbiBvZiB0aGUgREFDIGJlZm9yZSByZWNvbmZpZ3VyZS4KKwkJICogVGhpcyBpcyBlc3NhbnRpYWwsIGNhdXNlIG9mIHRoZSBzdGF0ZSBtYWNoaW5lLgorCQkgKiBJZiBub3Qgc3RvcHBlZCBiZWZvcmUgY29uZmlndXJpbmcgbW9kZSwgaXQgY291bGQKKwkJICogd2FsayBpbiBhIHVuZGVmaW5lZCBzdGF0ZS4KKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QOworCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCQl3aGlsZSAoaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCQlzbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCX0KKworCQkvKiBDbGVhciB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisJCWFvX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPSAwOworCQlhb19jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKworCQkvKiBTZXQgdG8gdHJhbnNwYXJlbnQgbW9kZSAqLworCQltZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2Rpc2FibGUoYW9fY29udGV4dCk7CisKKwkJLyogU2V0IHRvIHNpbmdsZSBtb2RlIGluIG9yZGVyIHRvIHNldCBkZWZhdWx0IHZvbHRhZ2UgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQltZTQwMDBfb3V0bCgweDAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCQkvKiBTZXQgdm9sdGFnZSB0byAwViAqLworCQltZTQwMDBfb3V0bCgweDgwMDAsIGFvX2NvbnRleHQtPnNpbmdsZV9yZWcpOworCisJCS8qIFNldCB0byBmYXN0ZXN0IHNhbXBsZSByYXRlICovCisJCW1lNDAwMF9vdXRsKDY1LCBhb19jb250ZXh0LT50aW1lcl9yZWcpOworCisJCS8qIFNldCB0aGUgb3JpZ2luYWwgbW9kZSBhbmQgZW5hYmxlIEZJRk8gKi8KKwkJbWU0MDAwX291dGwoTUU0MDAwX0FPX0NPTlZfTU9ERV9DT05USU5VT1VTIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk8gfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AsCisJCQkgICAgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CisJCS8qIFNldCB0byB0cmFuc3BhcmVudCBtb2RlICovCisJCW1lNDAwMF9hb19zaW11bHRhbmVvdXNfZGlzYWJsZShhb19jb250ZXh0KTsKKworCQkvKiBTZXQgdm9sdGFnZSB0byAwViAqLworCQltZTQwMDBfb3V0bCgweDgwMDAsIGFvX2NvbnRleHQtPnNpbmdsZV9yZWcpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBtZTQwMDBfYW9fd3JpdGVfc2luZyhzdHJ1Y3QgZmlsZSAqZmlsZXAsIGNvbnN0IGNoYXIgKmJ1ZmYsCisJCQkJICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqIG9mZnApCit7CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dCA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CisJdTMyIHZhbHVlOworCWNvbnN0IHUxNiAqYnVmZmVyID0gKGNvbnN0IHUxNiAqKWJ1ZmY7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3dyaXRlX3NpbmcoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpZiAoY250ICE9IDIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX3dyaXRlX3NpbmcoKTpXcml0ZSBjb3VudCBpcyBub3QgMlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChnZXRfdXNlcih2YWx1ZSwgYnVmZmVyKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fd3JpdGVfc2luZygpOkNhbm5vdCBjb3B5IGRhdGEgZnJvbSB1c2VyXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJbWU0MDAwX291dGwodmFsdWUsIGFvX2NvbnRleHQtPnNpbmdsZV9yZWcpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1lNDAwMF9hb193cml0ZV93cmFwKHN0cnVjdCBmaWxlICpmaWxlcCwgY29uc3QgY2hhciAqYnVmZiwKKwkJCQkgICAgc2l6ZV90IGNudCwgbG9mZl90ICogb2ZmcCkKK3sKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0ID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QgaTsKKwl1MzIgdmFsdWU7CisJdTMyIHRtcDsKKwljb25zdCB1MTYgKmJ1ZmZlciA9IChjb25zdCB1MTYgKilidWZmOworCXNpemVfdCBjb3VudCA9IGNudCAvIDI7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3dyaXRlX3dyYXAoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDaGVjayBpZiBhIGNvbnZlcnNpb24gaXMgYWxyZWFkeSBydW5uaW5nICovCisJaWYgKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3dyaXRlX3dyYXAoKTpUaGVyZSBpcyBhbHJlYWR5IGEgY29udmVyc2lvbiBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoY291bnQgPiBNRTQwMDBfQU9fRklGT19DT1VOVCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fd3JpdGVfd3JhcCgpOkNhbid0IGxvYWQgbW9yZSB0aGFuICVkIHZhbHVlc1xuIiwKKwkJICAgICAgIE1FNDAwMF9BT19GSUZPX0NPVU5UKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJLyogUmVzZXQgdGhlIEZJRk8gKi8KKwl0bXAgPSBpbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9GSUZPOworCW91dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTzsKKwlvdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKGdldF91c2VyKHZhbHVlLCBidWZmZXIgKyBpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIm1lNDAwMF9hb193cml0ZV9zaW5nbGUoKTpDYW5ub3QgY29weSBkYXRhIGZyb20gdXNlclxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlpZiAoKChhb19jb250ZXh0LT5maWZvX3JlZyAmIDB4RkYpID09IE1FNDAwMF9BT18wMV9GSUZPX1JFRykKKwkJICAgIHx8ICgoYW9fY29udGV4dC0+Zmlmb19yZWcgJiAweEZGKSA9PSBNRTQwMDBfQU9fMDNfRklGT19SRUcpKQorCQkJdmFsdWUgPSB2YWx1ZSA8PCAxNjsKKwkJb3V0bCh2YWx1ZSwgYW9fY29udGV4dC0+Zmlmb19yZWcpOworCX0KKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3dyaXRlX3dyYXAoKSBpcyBsZWF2ZWQgd2l0aCAlZFxuIiwgaSAqIDIpOworCisJcmV0dXJuIGkgKiAyOworfQorCitzdGF0aWMgc3NpemVfdCBtZTQwMDBfYW9fd3JpdGVfY29udChzdHJ1Y3QgZmlsZSAqZmlsZXAsIGNvbnN0IGNoYXIgKmJ1ZmYsCisJCQkJICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqIG9mZnApCit7CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dCA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CisJY29uc3QgdTE2ICpidWZmZXIgPSAoY29uc3QgdTE2ICopYnVmZjsKKwlzaXplX3QgY291bnQgPSBjbnQgLyAyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHRtcDsKKwlpbnQgYyA9IDA7CisJaW50IGsgPSAwOworCWludCByZXQgPSAwOworCXUxNiBzdmFsdWU7CisJdTMyIGx2YWx1ZTsKKwlpbnQgaTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCS8qIENoZWNrIGNvdW50ICovCisJaWYgKGNvdW50IDw9IDApIHsKKwkJUERFQlVHKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOkNvdW50IGlzIDBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX0FQUEVORCkgeworCQlQREVCVUcoIm1lNDAwMF9hb193cml0ZV9jb250KCk6QXBwZW5kIGRhdGEgdG8gZGF0YSBzdHJlYW1cbiIpOworCQl3aGlsZSAoY291bnQgPiAwKSB7CisJCQlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQkJaWYgKGFvX2NvbnRleHQtPnBpcGVfZmxhZykgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpCcm9rZW4gcGlwZSBpbiBub25ibG9ja2luZyB3cml0ZVxuIik7CisJCQkJCXJldHVybiAtRVBJUEU7CisJCQkJfQorCQkJCWMgPSBtZTQwMDBfc3BhY2VfdG9fZW5kKGFvX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJCU1FNDAwMF9BT19CVUZGRVJfQ09VTlQpOworCQkJCWlmICghYykgeworCQkJCQlQREVCVUcKKwkJCQkJICAgICgibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpSZXR1cm5pbmcgZnJvbSBub25ibG9ja2luZyB3cml0ZVxuIik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFvX2NvbnRleHQtPndhaXRfcXVldWUsCisJCQkJCQkJIChjID0KKwkJCQkJCQkgIG1lNDAwMF9zcGFjZV90b19lbmQKKwkJCQkJCQkgIChhb19jb250ZXh0LT5jaXJjX2J1ZiwKKwkJCQkJCQkgICBNRTQwMDBfQU9fQlVGRkVSX0NPVU5UKSkpOworCQkJCWlmIChhb19jb250ZXh0LT5waXBlX2ZsYWcpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpCcm9rZW4gcGlwZSBpbiBibG9ja2luZyB3cml0ZVxuIik7CisJCQkJCXJldHVybiAtRVBJUEU7CisJCQkJfQorCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJtZTQwMDBfYW9fd3JpdGVfY29udCgpOldhaXQgZm9yIGZyZWUgYnVmZmVyIGludGVycnVwdGVkIGZyb20gc2lnbmFsXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCQl9CisJCQl9CisKKwkJCVBERUJVRygibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpTcGFjZSB0byBlbmQgPSAlZFxuIiwgYyk7CisKKwkJCS8qIE9ubHkgYWJsZSB0byB3cml0ZSBzaXplIG9mIGZyZWUgYnVmZmVyIG9yIHNpemUgb2YgY291bnQgKi8KKwkJCWlmIChjb3VudCA8IGMpCisJCQkJYyA9IGNvdW50OworCisJCQlrID0gMiAqIGM7CisJCQlrIC09IGNvcHlfZnJvbV91c2VyKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiArCisJCQkJCSAgICBhb19jb250ZXh0LT5jaXJjX2J1Zi5oZWFkLCBidWZmZXIsCisJCQkJCSAgICBrKTsKKwkJCWMgPSBrIC8gMjsKKwkJCVBERUJVRworCQkJICAgICgibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpDb3B5ICVkIHZhbHVlcyBmcm9tIHVzZXIgc3BhY2VcbiIsCisJCQkgICAgIGMpOworCisJCQlpZiAoIWMpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCWFvX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPQorCQkJICAgIChhb19jb250ZXh0LT5jaXJjX2J1Zi5oZWFkICsKKwkJCSAgICAgYykgJiAoTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCAtIDEpOworCQkJYnVmZmVyICs9IGM7CisJCQljb3VudCAtPSBjOworCQkJcmV0ICs9IGM7CisKKwkJCS8qIFZhbHVlcyBhcmUgbm93IGF2YWlsYWJsZSBzbyBlbmFibGUgaW50ZXJydXB0cyAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCQlpZiAobWU0MDAwX2J1Zl9jb3VudAorCQkJICAgIChhb19jb250ZXh0LT5jaXJjX2J1ZiwgTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCkpIHsKKwkJCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCQl0bXAgfD0gTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9JUlE7CisJCQkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQl9CisKKwkJLyogV2FpdCB1bnRpbCB0aGUgc3RhdGUgbWFjaGluZSBpcyBzdG9wcGVkIGlmIE9fU1lOQyBpcyBzZXQgKi8KKwkJaWYgKGZpbGVwLT5mX2ZsYWdzICYgT19TWU5DKSB7CisJCQl3aGlsZSAoaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYKKwkJCSAgICAgICBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJCQlpZiAoYW9fY29udGV4dC0+cGlwZV9mbGFnKSB7CisJCQkJCVBERUJVRworCQkJCQkgICAgKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOkJyb2tlbiBwaXBlIGRldGVjdGVkIGFmdGVyIHN5bmNcbiIpOworCQkJCQlyZXR1cm4gLUVQSVBFOworCQkJCX0KKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpXYWl0IG9uIHN0YXRlIG1hY2hpbmUgYWZ0ZXIgc3luYyBpbnRlcnJ1cHRlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVFI7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJUERFQlVHKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOlByZWxvYWQgREFDIEZJRk9cbiIpOworCQlpZiAoKG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJgorCQkgICAgIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJtZTQwMDBfYW9fd3JpdGVfY29udCgpOkNhbid0IFByZWxvYWQgREFDIEZJRk8gd2hpbGUgY29udmVyc2lvbiBpcyBydW5uaW5nXG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKworCQkvKiBDbGVhciB0aGUgRklGTyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCAmPQorCQkgICAgfihNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk8gfAorCQkgICAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0lSUSk7CisJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgfD0gTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9GSUZPOworCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCQkvKiBDbGVhciB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisJCWFvX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPSAwOworCQlhb19jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKworCQkvKiBSZXNldCB0aGUgYnJva2VuIHBpcGUgZmxhZyAqLworCQlhb19jb250ZXh0LT5waXBlX2ZsYWcgPSAwOworCisJCS8qIE9ubHkgYWJsZSB0byB3cml0ZSBzaXplIG9mIGZpZm8gb3IgY291bnQgKi8KKwkJYyA9IE1FNDAwMF9BT19GSUZPX0NPVU5UOworCQlpZiAoY291bnQgPCBjKQorCQkJYyA9IGNvdW50OworCisJCVBERUJVRworCQkgICAgKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOldyaXRlICVkIHZhbHVlcyB0byBEQUMgb24gMHglbFhcbiIsCisJCSAgICAgYywgYW9fY29udGV4dC0+Zmlmb19yZWcpOworCisJCS8qIFdyaXRlIHZhbHVlcyB0byB0aGUgZmlmbyAqLworCQlmb3IgKGkgPSAwOyBpIDwgYzsgaSsrKSB7CisJCQlpZiAoZ2V0X3VzZXIoc3ZhbHVlLCBidWZmZXIpKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlpZiAoKChhb19jb250ZXh0LT5maWZvX3JlZyAmIDB4RkYpID09CisJCQkgICAgIE1FNDAwMF9BT18wMV9GSUZPX1JFRykKKwkJCSAgICB8fCAoKGFvX2NvbnRleHQtPmZpZm9fcmVnICYgMHhGRikgPT0KKwkJCQlNRTQwMDBfQU9fMDNfRklGT19SRUcpKSB7CisJCQkJbHZhbHVlID0gKCh1MzIpIHN2YWx1ZSkgPDwgMTY7CisJCQl9IGVsc2UKKwkJCQlsdmFsdWUgPSAodTMyKSBzdmFsdWU7CisKKwkJCW91dGwobHZhbHVlLCBhb19jb250ZXh0LT5maWZvX3JlZyk7CisJCQlidWZmZXIrKzsKKwkJfQorCQljb3VudCAtPSBjOworCQlyZXQgKz0gYzsKKworCQl3aGlsZSAoMSkgeworCQkJLyogR2V0IGZyZWUgYnVmZmVyICovCisJCQljID0gbWU0MDAwX3NwYWNlX3RvX2VuZChhb19jb250ZXh0LT5jaXJjX2J1ZiwKKwkJCQkJCU1FNDAwMF9BT19CVUZGRVJfQ09VTlQpOworCisJCQlpZiAoYyA9PSAwKQorCQkJCXJldHVybiAoMiAqIHJldCk7CisKKwkJCS8qIE9ubHkgYWJsZSB0byB3cml0ZSBzaXplIG9mIGZyZWUgYnVmZmVyIG9yIHNpemUgb2YgY291bnQgKi8KKwkJCWlmIChjb3VudCA8IGMpCisJCQkJYyA9IGNvdW50OworCisJCQkvKiBJZiBjb3VudCA9IDAgcmV0dXJuIHRvIHVzZXIgKi8KKwkJCWlmIChjIDw9IDApIHsKKwkJCQlQREVCVUcKKwkJCQkgICAgKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOkNvdW50IHJlYWNoZWQgMFxuIik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWsgPSAyICogYzsKKwkJCWsgLT0gY29weV9mcm9tX3VzZXIoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCQkJICAgIGFvX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQsIGJ1ZmZlciwKKwkJCQkJICAgIGspOworCQkJYyA9IGsgLyAyOworCQkJUERFQlVHCisJCQkgICAgKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOldyb3RlICVkIHZhbHVlcyB0byBidWZmZXJcbiIsCisJCQkgICAgIGMpOworCisJCQlpZiAoIWMpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCWFvX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPQorCQkJICAgIChhb19jb250ZXh0LT5jaXJjX2J1Zi5oZWFkICsKKwkJCSAgICAgYykgJiAoTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCAtIDEpOworCQkJYnVmZmVyICs9IGM7CisJCQljb3VudCAtPSBjOworCQkJcmV0ICs9IGM7CisKKwkJCS8qIElmIHZhbHVlcyBpbiB0aGUgYnVmZmVyIGFyZSBhdmFpbGFibGUgc28gZW5hYmxlIGludGVycnVwdHMgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQkJaWYgKG1lNDAwMF9idWZfY291bnQKKwkJCSAgICAoYW9fY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BT19CVUZGRVJfQ09VTlQpKSB7CisJCQkJUERFQlVHCisJCQkJICAgICgibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpFbmFibGUgSW50ZXJydXB0c1xuIik7CisJCQkJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQkJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfSVJROworCQkJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJfQorCX0KKworCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJcmV0dXJuIChyZXQgPT0gMCkgPyAtRUFHQUlOIDogMiAqIHJldDsKKwl9CisKKwlyZXR1cm4gMiAqIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtZTQwMDBfYW9fcG9sbF9jb250KHN0cnVjdCBmaWxlICpmaWxlX3AsIHBvbGxfdGFibGUgKiB3YWl0KQoreworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQ7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fcG9sbF9jb250KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYW9fY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJcG9sbF93YWl0KGZpbGVfcCwgJmFvX2NvbnRleHQtPndhaXRfcXVldWUsIHdhaXQpOworCisJLyogR2V0IGZyZWUgYnVmZmVyICovCisJaWYgKG1lNDAwMF9zcGFjZV90b19lbmQoYW9fY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BT19CVUZGRVJfQ09VTlQpKQorCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19wb2xsX2NvbnQoKTpSZXR1cm4gbWFzayAlbFhcbiIsIG1hc2spOworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2ZzeW5jX2NvbnQoc3RydWN0IGZpbGUgKmZpbGVfcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5X3AsCisJCQkJaW50IGRhdGFzeW5jKQoreworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2ZzeW5jX2NvbnQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlhb19jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJd2hpbGUgKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJaWYgKGFvX2NvbnRleHQtPnBpcGVfZmxhZykgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIm1lNDAwMF9hb19mc3luY19jb250KCk6QnJva2VuIHBpcGUgZGV0ZWN0ZWRcbiIpOworCQkJcmV0dXJuIC1FUElQRTsKKwkJfQorCisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIm1lNDAwMF9hb19mc3luY19jb250KCk6V2FpdCBvbiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVFI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9faW9jdGxfc2luZyhzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3AsCisJCQkJdW5zaWduZWQgaW50IHNlcnZpY2UsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2lvY3RsX3NpbmcoKSBpcyBleGVjdXRlZFxuIik7CisKKwlhb19jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoX0lPQ19UWVBFKHNlcnZpY2UpICE9IE1FNDAwMF9NQUdJQykgeworCQlyZXR1cm4gLUVOT1RUWTsKKwkJUERFQlVHKCJtZTQwMDBfYW9faW9jdGxfc2luZygpOldyb25nIG1hZ2ljIG51bWJlclxuIik7CisJfQorCisJc3dpdGNoIChzZXJ2aWNlKSB7CisJY2FzZSBNRTQwMDBfQU9fRVhfVFJJR19TRVRVUDoKKwkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX3NldF9lZGdlKChpbnQgKilhcmcsIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfRU5BQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FvX2V4X3RyaWdfZW5hYmxlKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfRElTQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX2Rpc2FibGUoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fUFJFTE9BRDoKKwkJcmV0dXJuIG1lNDAwMF9hb19wcmVsb2FkKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1BSRUxPQURfVVBEQVRFOgorCQlyZXR1cm4gbWU0MDAwX2FvX3ByZWxvYWRfdXBkYXRlKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0dFVF9VU0VSX0lORk86CisJCXJldHVybiBtZTQwMDBfZ2V0X3VzZXJfaW5mbygobWU0MDAwX3VzZXJfaW5mb190ICopIGFyZywKKwkJCQkJICAgIGFvX2NvbnRleHQtPmJvYXJkX2luZm8pOworCWNhc2UgTUU0MDAwX0FPX1NJTVVMVEFORU9VU19FWF9UUklHOgorCQlyZXR1cm4gbWU0MDAwX2FvX3NpbXVsdGFuZW91c19leF90cmlnKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1NJTVVMVEFORU9VU19TVzoKKwkJcmV0dXJuIG1lNDAwMF9hb19zaW11bHRhbmVvdXNfc3coYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fU0lNVUxUQU5FT1VTX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2Rpc2FibGUoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fU0lNVUxUQU5FT1VTX1VQREFURToKKwkJcmV0dXJuCisJCSAgICBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3VwZGF0ZSgobWU0MDAwX2FvX2NoYW5uZWxfbGlzdF90ICopCisJCQkJCQkgIGFyZywgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRVhfVFJJR19USU1FT1VUOgorCQlyZXR1cm4gbWU0MDAwX2FvX2V4X3RyaWdfdGltZW91dCgodW5zaWduZWQgbG9uZyAqKWFyZywKKwkJCQkJCSBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19ESVNBQkxFX0RPOgorCQlyZXR1cm4gbWU0MDAwX2FvX2Rpc2FibGVfZG8oYW9fY29udGV4dCk7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX2lvY3RsX3NpbmcoKTpTZXJ2aWNlIG51bWJlciBpbnZhbGlkXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2lvY3RsX3dyYXAoc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLAorCQkJCXVuc2lnbmVkIGludCBzZXJ2aWNlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19pb2N0bF93cmFwKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYW9fY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKF9JT0NfVFlQRShzZXJ2aWNlKSAhPSBNRTQwMDBfTUFHSUMpIHsKKwkJcmV0dXJuIC1FTk9UVFk7CisJCVBERUJVRygibWU0MDAwX2FvX2lvY3RsX3dyYXAoKTpXcm9uZyBtYWdpYyBudW1iZXJcbiIpOworCX0KKworCXN3aXRjaCAoc2VydmljZSkgeworCWNhc2UgTUU0MDAwX0FPX1NUQVJUOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N0YXJ0KCh1bnNpZ25lZCBsb25nICopYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TVE9QOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N0b3AoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fSU1NRURJQVRFX1NUT1A6CisJCXJldHVybiBtZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fUkVTRVQ6CisJCXJldHVybiBtZTQwMDBfYW9fcmVzZXQoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fVElNRVJfU0VUX0RJVklTT1I6CisJCXJldHVybiBtZTQwMDBfYW9fdGltZXJfc2V0X2Rpdmlzb3IoKHUzMiAqKSBhcmcsIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfU0VUVVA6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19zZXRfZWRnZSgoaW50ICopYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX0VOQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX2VuYWJsZShhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19kaXNhYmxlKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0dFVF9VU0VSX0lORk86CisJCXJldHVybiBtZTQwMDBfZ2V0X3VzZXJfaW5mbygobWU0MDAwX3VzZXJfaW5mb190ICopIGFyZywKKwkJCQkJICAgIGFvX2NvbnRleHQtPmJvYXJkX2luZm8pOworCWNhc2UgTUU0MDAwX0FPX0ZTTV9TVEFURToKKwkJcmV0dXJuIG1lNDAwMF9hb19mc21fc3RhdGUoKGludCAqKWFyZywgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRU5BQkxFX0RPOgorCQlyZXR1cm4gbWU0MDAwX2FvX2VuYWJsZV9kbyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19ESVNBQkxFX0RPOgorCQlyZXR1cm4gbWU0MDAwX2FvX2Rpc2FibGVfZG8oYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fU1lOQ0hST05PVVNfRVhfVFJJRzoKKwkJcmV0dXJuIG1lNDAwMF9hb19zeW5jaHJvbm91c19leF90cmlnKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1NZTkNIUk9OT1VTX1NXOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N5bmNocm9ub3VzX3N3KGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1NZTkNIUk9OT1VTX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYW9fc3luY2hyb25vdXNfZGlzYWJsZShhb19jb250ZXh0KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2lvY3RsX2NvbnQoc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLAorCQkJCXVuc2lnbmVkIGludCBzZXJ2aWNlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19pb2N0bF9jb250KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYW9fY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKF9JT0NfVFlQRShzZXJ2aWNlKSAhPSBNRTQwMDBfTUFHSUMpIHsKKwkJcmV0dXJuIC1FTk9UVFk7CisJCVBERUJVRygibWU0MDAwX2FvX2lvY3RsX2NvbnQoKTpXcm9uZyBtYWdpYyBudW1iZXJcbiIpOworCX0KKworCXN3aXRjaCAoc2VydmljZSkgeworCWNhc2UgTUU0MDAwX0FPX1NUQVJUOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N0YXJ0KCh1bnNpZ25lZCBsb25nICopYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TVE9QOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N0b3AoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fSU1NRURJQVRFX1NUT1A6CisJCXJldHVybiBtZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fUkVTRVQ6CisJCXJldHVybiBtZTQwMDBfYW9fcmVzZXQoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fVElNRVJfU0VUX0RJVklTT1I6CisJCXJldHVybiBtZTQwMDBfYW9fdGltZXJfc2V0X2Rpdmlzb3IoKHUzMiAqKSBhcmcsIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfU0VUVVA6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19zZXRfZWRnZSgoaW50ICopYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX0VOQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX2VuYWJsZShhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19kaXNhYmxlKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VOQUJMRV9ETzoKKwkJcmV0dXJuIG1lNDAwMF9hb19lbmFibGVfZG8oYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRElTQUJMRV9ETzoKKwkJcmV0dXJuIG1lNDAwMF9hb19kaXNhYmxlX2RvKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0ZTTV9TVEFURToKKwkJcmV0dXJuIG1lNDAwMF9hb19mc21fc3RhdGUoKGludCAqKWFyZywgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfR0VUX1VTRVJfSU5GTzoKKwkJcmV0dXJuIG1lNDAwMF9nZXRfdXNlcl9pbmZvKChtZTQwMDBfdXNlcl9pbmZvX3QgKikgYXJnLAorCQkJCQkgICAgYW9fY29udGV4dC0+Ym9hcmRfaW5mbyk7CisJY2FzZSBNRTQwMDBfQU9fU1lOQ0hST05PVVNfRVhfVFJJRzoKKwkJcmV0dXJuIG1lNDAwMF9hb19zeW5jaHJvbm91c19leF90cmlnKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1NZTkNIUk9OT1VTX1NXOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N5bmNocm9ub3VzX3N3KGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1NZTkNIUk9OT1VTX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYW9fc3luY2hyb25vdXNfZGlzYWJsZShhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19HRVRfRlJFRV9CVUZGRVI6CisJCXJldHVybiBtZTQwMDBfYW9fZ2V0X2ZyZWVfYnVmZmVyKCh1bnNpZ25lZCBsb25nICopYXJnLAorCQkJCQkJIGFvX2NvbnRleHQpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc3RhcnQodW5zaWduZWQgbG9uZyAqYXJnLCBtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXVuc2lnbmVkIGxvbmcgcmVmOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19zdGFydCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWlmIChnZXRfdXNlcih0aW1lb3V0LCBhcmcpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19zdGFydCgpOkNhbm5vdCBjb3B5IGRhdGEgZnJvbSB1c2VyXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0gfihNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCk7CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCWlmICgodG1wICYgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9FWF9UUklHKSkgeworCQlpZiAodGltZW91dCkgeworCQkJcmVmID0gamlmZmllczsKKwkJCXdoaWxlICghCisJCQkgICAgICAgKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmCisJCQkJTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSkgeworCQkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3N0YXJ0KCk6V2FpdCBvbiBzdGFydCBvZiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCQl9CisJCQkJaWYgKCgoamlmZmllcyAtIHJlZikgPiAodGltZW91dCAqIEhaIC8gVVNFUl9IWikpKSB7CS8vIDIuNiBoYXMgZGlmZnJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZQorCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3N0YXJ0KCk6VGltZW91dCByZWFjaGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU87CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJbWU0MDAwX291dGwoMHg4MDAwLCBhb19jb250ZXh0LT5zaW5nbGVfcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc3RvcChtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3N0b3AoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBTZXQgdGhlIHN0b3AgYml0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FPX0NUUkxfQklUX1NUT1A7CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCXdoaWxlIChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIm1lNDAwMF9hb19zdG9wKCk6V2FpdCBvbiBzdGF0ZSBtYWNoaW5lIGFmdGVyIHN0b3AgaW50ZXJydXB0ZWRcbiIpOworCQkJcmV0dXJuIC1FSU5UUjsKKwkJfQorCX0KKworCS8qIENsZWFyIHRoZSBzdG9wIGJpdCAqLworCS8vdG1wICY9IH5NRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUDsKKwkvL21lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2ltbWVkaWF0ZV9zdG9wKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9faW1tZWRpYXRlX3N0b3AoKSBpcyBleGVjdXRlZFxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBpbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUDsKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJd2hpbGUgKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAibWU0MDAwX2FvX2ltbWVkaWF0ZV9zdG9wKCk6V2FpdCBvbiBzdGF0ZSBtYWNoaW5lIGFmdGVyIHN0b3AgaW50ZXJydXB0ZWRcbiIpOworCQkJcmV0dXJuIC1FSU5UUjsKKwkJfQorCX0KKworCS8qIENsZWFyIHRoZSBzdG9wIGJpdHMgKi8KKwkvL3RtcCAmPSB+KE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QKTsKKwkvL21lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3RpbWVyX3NldF9kaXZpc29yKHUzMiAqIGFyZywKKwkJCQkgICAgICAgbWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIGRpdmlzb3I7CisJdTMyIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fdGltZXIgc2V0X2Rpdmlzb3IoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpZiAoZ2V0X3VzZXIoZGl2aXNvciwgYXJnKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBDaGVjayBpZiB0aGUgc3RhdGUgbWFjaGluZSBpcyBzdG9wcGVkICovCisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKTsKKwlpZiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb190aW1lcl9zZXRfZGl2aXNvcigpOkNhbid0IHNldCB0aW1lciB3aGlsZSBEQUMgaXMgcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJUERFQlVHKCJtZTQwMDBfYW9fdGltZXIgc2V0X2Rpdmlzb3IoKTpEaXZpc29yIGZyb20gdXNlciA9ICVkXG4iLAorCSAgICAgICBkaXZpc29yKTsKKworCS8qIENoZWNrIGlmIHRoZSBkaXZpc29yIGlzIHJpZ2h0LiBNRTQwMDBfQU9fTUlOX1RJQ0tTIGlzIHRoZSBsb3dlc3QgKi8KKwlpZiAoZGl2aXNvciA8IE1FNDAwMF9BT19NSU5fVElDS1MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb190aW1lciBzZXRfZGl2aXNvcigpOkRpdmlzb3IgdG8gbG93XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRml4IGJ1ZyBpbiBGaXJtd2FyZSAqLworCWRpdmlzb3IgLT0gMjsKKworCVBERUJVRygibWU0MDAwX2FvX3RpbWVyIHNldF9kaXZpc29yKCk6RGl2aXNvciB0byBIVyA9ICVkXG4iLCBkaXZpc29yKTsKKworCS8qIFdyaXRlIHRoZSBkaXZpc29yICovCisJbWU0MDAwX291dGwoZGl2aXNvciwgYW9fY29udGV4dC0+dGltZXJfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19leF90cmlnX3NldF9lZGdlKGludCAqYXJnLAorCQkJCSAgICAgIG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCWludCBtb2RlOworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fZXhfdHJpZ19zZXRfZWRnZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWlmIChnZXRfdXNlcihtb2RlLCBhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIENoZWNrIGlmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCWlmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX2V4X3RyaWdfc2V0X2VkZ2UoKTpDYW4ndCBzZXQgdHJpZ2dlciB3aGlsZSBEQUMgaXMgcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKG1vZGUgPT0gTUU0MDAwX0FPX1RSSUdHRVJfRVhUX0VER0VfUklTSU5HKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wICY9CisJCSAgICB+KE1FNDAwMF9BT19DVFJMX0JJVF9FWF9UUklHX0VER0UgfAorCQkgICAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfRVhfVFJJR19CT1RIKTsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmIChtb2RlID09IE1FNDAwMF9BT19UUklHR0VSX0VYVF9FREdFX0ZBTExJTkcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9FWF9UUklHX0JPVEg7CisJCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfRVhfVFJJR19FREdFOworCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gTUU0MDAwX0FPX1RSSUdHRVJfRVhUX0VER0VfQk9USCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCB8PQorCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX0VYX1RSSUdfRURHRSB8CisJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfRVhfVFJJR19CT1RIOworCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fZXhfdHJpZ19zZXRfZWRnZSgpOkludmFsaWQgdHJpZ2dlciBtb2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfZW5hYmxlKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fZXhfdHJpZ19lbmFibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDaGVjayBpZiB0aGUgc3RhdGUgbWFjaGluZSBpcyBzdG9wcGVkICovCisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKTsKKwlpZiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19leF90cmlnX2VuYWJsZSgpOkNhbid0IGVuYWJsZSB0cmlnZ2VyIHdoaWxlIERBQyBpcyBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9FWF9UUklHOworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fZXhfdHJpZ19kaXNhYmxlKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fZXhfdHJpZ19kaXNhYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisJaWYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fZXhfdHJpZ19kaXNhYmxlKCk6Q2FuJ3QgZGlzYWJsZSB0cmlnZ2VyIHdoaWxlIERBQyBpcyBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRVhfVFJJRzsKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3NpbXVsdGFuZW91c19kaXNhYmxlKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3NpbXVsdGFuZW91c19kaXNhYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCAqLworCS8qIEJlIGNhcmVmdWwgaGVyZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20KKwkgICBtZTQwMDBfYW9fc3luY2hyb25vdXMgZGlzYWJsZSAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisJaWYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2Rpc2FibGUoKTpDYW4ndCBkaXNhYmxlIHdoaWxlIERBQyBpcyBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJdG1wICY9IH4oMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsJLy8gRGlzYWJsZSBwcmVsb2FkIGJpdAorCXRtcCAmPSB+KDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwkvLyBEaXNhYmxlIGh3IHNpbXVsdGFuZW91cyBiaXQKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19zaW11bHRhbmVvdXNfZXhfdHJpZyhtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19zaW11bHRhbmVvdXNfZXhfdHJpZygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwl0bXAgfD0gKDB4MSA8PCBhb19jb250ZXh0LT5pbmRleCk7CS8vIEVuYWJsZSBwcmVsb2FkIGJpdAorCXRtcCB8PSAoMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CS8vIEVuYWJsZSBodyBzaW11bHRhbmVvdXMgYml0CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3N3KG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3NpbXVsdGFuZW91c19zdygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwl0bXAgfD0gKDB4MSA8PCBhb19jb250ZXh0LT5pbmRleCk7CS8vIEVuYWJsZSBwcmVsb2FkIGJpdAorCXRtcCAmPSB+KDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwkvLyBEaXNhYmxlIGh3IHNpbXVsdGFuZW91cyBiaXQKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19wcmVsb2FkKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fcHJlbG9hZCgpIGlzIGV4ZWN1dGVkXG4iKTsKKwlyZXR1cm4gbWU0MDAwX2FvX3NpbXVsdGFuZW91c19zdyhhb19jb250ZXh0KTsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fcHJlbG9hZF91cGRhdGUobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl1MzIgY3RybDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fcHJlbG9hZF91cGRhdGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJbGlzdF9mb3JfZWFjaChlbnRyeSwgJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdCkgeworCQkvKiBUaGUgY2hhbm5lbHMgd2UgdXBkYXRlIG11c3QgYmUgaW4gdGhlIGZvbGxvd2luZyBzdGF0ZSA6CisJCSAgIC0gTW9kZSBBCisJCSAgIC0gSGFyZHdhcmUgdHJpZ2dlciBpcyBkaXNhYmxlZAorCQkgICAtIENvcnJlc3BvbmRpbmcgc2ltdWx0YW5lb3VzIGJpdCBpcyByZXNldAorCQkgKi8KKwkJY3RybCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlpZiAoIQorCQkgICAgKGN0cmwgJgorCQkgICAgIChNRTQwMDBfQU9fQ1RSTF9CSVRfTU9ERV8wIHwgTUU0MDAwX0FPX0NUUkxfQklUX01PREVfMSB8CisJCSAgICAgIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRVhfVFJJRykpKSB7CisJCQlpZiAoIQorCQkJICAgICh0bXAgJgorCQkJICAgICAoMHgxIDw8CisJCQkgICAgICAoKChtZTQwMDBfYW9fY29udGV4dF90ICopIGVudHJ5KS0+aW5kZXggKyAxNikpKSkgeworCQkJCXRtcCAmPQorCQkJCSAgICB+KDB4MSA8PAorCQkJCSAgICAgICgoKG1lNDAwMF9hb19jb250ZXh0X3QgKikgZW50cnkpLT5pbmRleCkpOworCQkJfQorCQl9CisJfQorCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3NpbXVsdGFuZW91c191cGRhdGUobWU0MDAwX2FvX2NoYW5uZWxfbGlzdF90ICogYXJnLAorCQkJCQkgbWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJaW50IGVycjsKKwlpbnQgaTsKKwl1MzIgdG1wOworCW1lNDAwMF9hb19jaGFubmVsX2xpc3RfdCBjaGFubmVsczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3VwZGF0ZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmY2hhbm5lbHMsIGFyZywgc2l6ZW9mKG1lNDAwMF9hb19jaGFubmVsX2xpc3RfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19zaW11bHRhbmVvdXNfdXBkYXRlKCk6Q2FuJ3QgY29weSBjb21tYW5kXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJY2hhbm5lbHMubGlzdCA9CisJICAgIGttYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogY2hhbm5lbHMuY291bnQsIEdGUF9LRVJORUwpOworCWlmICghY2hhbm5lbHMubGlzdCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3NpbXVsdGFuZW91c191cGRhdGUoKTpDYW4ndCBnZXQgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChjaGFubmVscy5saXN0LCAwLCBzaXplb2YodW5zaWduZWQgbG9uZykgKiBjaGFubmVscy5jb3VudCk7CisKKwkvKiBDb3B5IGNoYW5uZWwgbGlzdCBmcm9tIHVzZXIgKi8KKwllcnIgPQorCSAgICBjb3B5X2Zyb21fdXNlcihjaGFubmVscy5saXN0LCBhcmctPmxpc3QsCisJCQkgICBzaXplb2YodW5zaWduZWQgbG9uZykgKiBjaGFubmVscy5jb3VudCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3NpbXVsdGFuZW91c191cGRhdGUoKTpDYW4ndCBjb3B5IGxpc3RcbiIpOworCQlrZnJlZShjaGFubmVscy5saXN0KTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCWZvciAoaSA9IDA7IGkgPCBjaGFubmVscy5jb3VudDsgaSsrKSB7CisJCWlmIChjaGFubmVscy5saXN0W2ldID4KKwkJICAgIGFvX2NvbnRleHQtPmJvYXJkX2luZm8tPmJvYXJkX3AtPmFvLmNvdW50KSB7CisJCQlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKwkJCWtmcmVlKGNoYW5uZWxzLmxpc3QpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3VwZGF0ZSgpOkludmFsaWQgYm9hcmQgbnVtYmVyIHNwZWNpZmllZFxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQl0bXAgJj0gfigweDEgPDwgY2hhbm5lbHMubGlzdFtpXSk7CS8vIENsZWFyIHRoZSBwcmVsb2FkIGJpdAorCQl0bXAgJj0gfigweDEgPDwgKGNoYW5uZWxzLmxpc3RbaV0gKyAxNikpOwkvLyBDbGVhciB0aGUgaHcgc2ltdWx0YW5lb3VzIGJpdAorCX0KKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKwlrZnJlZShjaGFubmVscy5saXN0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19zeW5jaHJvbm91c19leF90cmlnKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fc3luY2hyb25vdXNfZXhfdHJpZygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENoZWNrIGlmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCWlmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX3N5bmNocm9ub3VzX2V4X3RyaWcoKTogREFDIGlzIHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwl0bXAgJj0gfigweDEgPDwgYW9fY29udGV4dC0+aW5kZXgpOwkvLyBEaXNhYmxlIHN5bmNocm9ub3VzIHN3IGJpdAorCXRtcCB8PSAweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpOwkvLyBFbmFibGUgc3luY2hyb25vdXMgaHcgYml0CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisKKwkvKiBNYWtlIHJ1bm5hYmxlICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJaWYgKHRtcCAmIChNRTQwMDBfQU9fQ1RSTF9CSVRfTU9ERV8wIHwgTUU0MDAwX0FPX0NUUkxfQklUX01PREVfMSkpIHsKKwkJdG1wICY9CisJCSAgICB+KE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwKKwkJICAgICAgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QKTsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc3luY2hyb25vdXNfc3cobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19zeW5jaHJvbm91c19zdygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENoZWNrIGlmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCWlmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYW9fc3luY2hyb25vdXNfc3coKTogREFDIGlzIHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwl0bXAgfD0gMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4OwkvLyBFbmFibGUgc3luY2hyb25vdXMgc3cgYml0CisJdG1wICY9IH4oMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CS8vIERpc2FibGUgc3luY2hyb25vdXMgaHcgYml0CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisKKwkvKiBNYWtlIHJ1bm5hYmxlICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJaWYgKHRtcCAmIChNRTQwMDBfQU9fQ1RSTF9CSVRfTU9ERV8wIHwgTUU0MDAwX0FPX0NUUkxfQklUX01PREVfMSkpIHsKKwkJdG1wICY9CisJCSAgICB+KE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwKKwkJICAgICAgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QKTsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc3luY2hyb25vdXNfZGlzYWJsZShtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwlyZXR1cm4gbWU0MDAwX2FvX3NpbXVsdGFuZW91c19kaXNhYmxlKGFvX2NvbnRleHQpOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19nZXRfZnJlZV9idWZmZXIodW5zaWduZWQgbG9uZyAqYXJnLAorCQkJCSAgICAgbWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyBjOworCWludCBlcnI7CisKKwljID0gbWU0MDAwX2J1Zl9zcGFjZShhb19jb250ZXh0LT5jaXJjX2J1ZiwgTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCk7CisKKwllcnIgPSBjb3B5X3RvX3VzZXIoYXJnLCAmYywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fZ2V0X2ZyZWVfYnVmZmVyKCk6Q2FuJ3QgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfdGltZW91dCh1bnNpZ25lZCBsb25nICphcmcsCisJCQkJICAgICBtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXVuc2lnbmVkIGxvbmcgcmVmOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaWYgKGdldF91c2VyKHRpbWVvdXQsIGFyZykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX2V4X3RyaWdfdGltZW91dCgpOkNhbm5vdCBjb3B5IGRhdGEgZnJvbSB1c2VyXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJdG1wID0gaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCWlmICgodG1wICYgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9FWF9UUklHKSkgeworCQlpZiAodGltZW91dCkgeworCQkJcmVmID0gamlmZmllczsKKwkJCXdoaWxlICgoaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYKKwkJCQlNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pKSB7CisJCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KCk6V2FpdCBvbiBzdGFydCBvZiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCQl9CisJCQkJaWYgKCgoamlmZmllcyAtIHJlZikgPiAodGltZW91dCAqIEhaIC8gVVNFUl9IWikpKSB7CS8vIDIuNiBoYXMgZGlmZnJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZQorCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX2V4X3RyaWdfdGltZW91dCgpOlRpbWVvdXQgcmVhY2hlZFxuIik7CisJCQkJCXJldHVybiAtRUlPOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXdoaWxlICgoaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYKKwkJCQlNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pKSB7CisJCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KCk6V2FpdCBvbiBzdGFydCBvZiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX2V4X3RyaWdfdGltZW91dCgpOkV4dGVybmFsIFRyaWdnZXIgaXMgbm90IGVuYWJsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fZW5hYmxlX2RvKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fZW5hYmxlX2RvKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogT25seSBhdmFpbGFibGUgZm9yIGFuYWxvZyBvdXRwdXQgMyAqLworCWlmIChhb19jb250ZXh0LT5pbmRleCAhPSAzKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19lbmFibGVfZG8oKTpPbmx5IGF2YWlsYWJsZSBmb3IgYW5hbG9nIG91dHB1dCAzXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisJaWYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9hb19lbmFibGVfZG8oKTogREFDIGlzIHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIFNldCB0aGUgc3RvcCBiaXQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBpbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0RPOworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fZGlzYWJsZV9kbyhtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2Rpc2FibGVfZG8oKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBPbmx5IGF2YWlsYWJsZSBmb3IgYW5hbG9nIG91dHB1dCAzICovCisJaWYgKGFvX2NvbnRleHQtPmluZGV4ICE9IDMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX2Rpc2FibGUoKTpPbmx5IGF2YWlsYWJsZSBmb3IgYW5hbG9nIG91dHB1dCAzXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisJaWYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9hb19kaXNhYmxlX2RvKCk6IERBQyBpcyBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBpbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+KE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRE8pOworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fZnNtX3N0YXRlKGludCAqYXJnLCBtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fZnNtX3N0YXRlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdG1wID0KKwkgICAgKG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pID8gMQorCSAgICA6IDA7CisKKwlpZiAoYW9fY29udGV4dC0+cGlwZV9mbGFnKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2FvX2ZzbV9zdGF0ZSgpOkJyb2tlbiBwaXBlIGRldGVjdGVkXG4iKTsKKwkJcmV0dXJuIC1FUElQRTsKKwl9CisKKwlpZiAocHV0X3VzZXIodG1wLCBhcmcpKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2FvX2ZzbV9zdGF0ZSgpOkNhbm5vdCBjb3B5IHRvIHVzZXJcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFuYWxvZyBpbnB1dCBzdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3ByZXBhcmUobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJaW50IGVycjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfcHJlcGFyZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCS8qIFNldCB0aGUgbmV3IG1vZGUgYW5kIHN0b3AgYml0cyAqLworCW1lNDAwMF9vdXRsKGFpX2NvbnRleHQtPgorCQkgICAgbW9kZSB8IE1FNDAwMF9BSV9DVFJMX0JJVF9TVE9QIHwKKwkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJLyogU2V0IHRoZSB0aW1lciByZWdpc3RlcnMgKi8KKwlhaV9jb250ZXh0LT5jaGFuX3RpbWVyID0gNjY7CisJYWlfY29udGV4dC0+Y2hhbl9wcmVfdGltZXIgPSA2NjsKKwlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvdyA9IDA7CisJYWlfY29udGV4dC0+c2Nhbl90aW1lcl9oaWdoID0gMDsKKworCW1lNDAwMF9vdXRsKDY1LCBhaV9jb250ZXh0LT5jaGFuX3RpbWVyX3JlZyk7CisJbWU0MDAwX291dGwoNjUsIGFpX2NvbnRleHQtPmNoYW5fcHJlX3RpbWVyX3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2Nhbl90aW1lcl9sb3dfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2hfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3ByZV90aW1lcl9sb3dfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3ByZV90aW1lcl9oaWdoX3JlZyk7CisKKwlhaV9jb250ZXh0LT5jaGFubmVsX2xpc3RfY291bnQgPSAwOworCisJaWYgKGFpX2NvbnRleHQtPm1vZGUpIHsKKwkJLyogUmVxdWVzdCB0aGUgaW50ZXJydXB0IGxpbmUgKi8KKwkJZXJyID0KKwkJICAgIHJlcXVlc3RfaXJxKGFpX2NvbnRleHQtPmlycSwgbWU0MDAwX2FpX2lzciwKKwkJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsIE1FNDAwMF9OQU1FLAorCQkJCWFpX2NvbnRleHQpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9wcmVwYXJlKCk6Q2FuJ3QgZ2V0IGludGVycnVwdCBsaW5lIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIEFsbG9jYXRlIGNpcmN1bGFyIGJ1ZmZlciAqLworCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYgPQorCQkgICAga21hbGxvYyhNRTQwMDBfQUlfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoIWFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZikgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfcHJlcGFyZSgpOkNhbid0IGdldCBjaXJjdWxhciBidWZmZXJcbiIpOworCQkJZnJlZV9pcnEoYWlfY29udGV4dC0+aXJxLCBhaV9jb250ZXh0KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldChhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYsIDAsIE1FNDAwMF9BSV9CVUZGRVJfU0laRSk7CisKKwkJLyogQ2xlYXIgdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwkJYWlfY29udGV4dC0+Y2lyY19idWYudGFpbCA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3Jlc2V0KG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfcmVzZXQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwkvKgorCSAqIEZpcnN0IHN0b3AgY29udmVyc2lvbiBvZiB0aGUgc3RhdGUgbWFjaGluZSBiZWZvcmUgcmVjb25maWd1cmUuCisJICogSWYgbm90IHN0b3BwZWQgYmVmb3JlIGNvbmZpZ3VyaW5nIG1vZGUsIGl0IGNvdWxkCisJICogd2FsayBpbiBhIHVuZGVmaW5lZCBzdGF0ZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJtZTQwMDBfYWlfcmVzZXQoKTpXYWl0IG9uIHN0YXRlIG1hY2hpbmUgYWZ0ZXIgc3RvcCBpbnRlcnJ1cHRlZFxuIik7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJfQorCisJLyogQ2xlYXIgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIHNldCB0aGUgc3RvcCBiaXRzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJbWU0MDAwX291dGwoTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QIHwgTUU0MDAwX0FJX0NUUkxfQklUX1NUT1AsCisJCSAgICBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCS8qIFJlc2V0IHRpbWVyIHJlZ2lzdGVycyAqLworCWFpX2NvbnRleHQtPmNoYW5fdGltZXIgPSA2NjsKKwlhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lciA9IDY2OworCWFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93ID0gMDsKKwlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2ggPSAwOworCWFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyID0gMDsKKwlhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWxvYWQgPSAwOworCisJbWU0MDAwX291dGwoNjUsIGFpX2NvbnRleHQtPmNoYW5fdGltZXJfcmVnKTsKKwltZTQwMDBfb3V0bCg2NSwgYWlfY29udGV4dC0+Y2hhbl9wcmVfdGltZXJfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvd19yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaF9yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2xvd19yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2hpZ2hfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWcpOworCisJYWlfY29udGV4dC0+Y2hhbm5lbF9saXN0X2NvdW50ID0gMDsKKworCS8qIENsZWFyIHRoZSBjaXJjdWxhciBidWZmZXIgKi8KKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9pb2N0bF9zaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCwKKwkJCQl1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbWU0MDAwX2FpX2NvbnRleHRfdCAqYWlfY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfaW9jdGxfc2luZygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFpX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2FpX2lvY3RsX3NpbmcoKTpXcm9uZyBtYWdpYyBudW1iZXJcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJaWYgKF9JT0NfTlIoc2VydmljZSkgPiBNRTQwMDBfSU9DVExfTUFYTlIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FpX2lvY3RsX3NpbmcoKTpTZXJ2aWNlIG51bWJlciB0byBoaWdoXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJc3dpdGNoIChzZXJ2aWNlKSB7CisJY2FzZSBNRTQwMDBfQUlfU0lOR0xFOgorCQlyZXR1cm4gbWU0MDAwX2FpX3NpbmdsZSgobWU0MDAwX2FpX3NpbmdsZV90ICopIGFyZywgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRVhfVFJJR19FTkFCTEU6CisJCXJldHVybiBtZTQwMDBfYWlfZXhfdHJpZ19lbmFibGUoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRVhfVFJJR19ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FpX2V4X3RyaWdfZGlzYWJsZShhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9FWF9UUklHX1NFVFVQOgorCQlyZXR1cm4gbWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAoKG1lNDAwMF9haV90cmlnZ2VyX3QgKikgYXJnLAorCQkJCQkgICAgICAgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfR0VUX1VTRVJfSU5GTzoKKwkJcmV0dXJuIG1lNDAwMF9nZXRfdXNlcl9pbmZvKChtZTQwMDBfdXNlcl9pbmZvX3QgKikgYXJnLAorCQkJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mbyk7CisJY2FzZSBNRTQwMDBfQUlfT0ZGU0VUX0VOQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9haV9vZmZzZXRfZW5hYmxlKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX09GRlNFVF9ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FpX29mZnNldF9kaXNhYmxlKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0ZVTExTQ0FMRV9FTkFCTEU6CisJCXJldHVybiBtZTQwMDBfYWlfZnVsbHNjYWxlX2VuYWJsZShhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9GVUxMU0NBTEVfRElTQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9haV9mdWxsc2NhbGVfZGlzYWJsZShhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9FRVBST01fUkVBRDoKKwkJcmV0dXJuIG1lNDAwMF9lZXByb21fcmVhZCgobWU0MDAwX2VlcHJvbV90ICopIGFyZywgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRUVQUk9NX1dSSVRFOgorCQlyZXR1cm4gbWU0MDAwX2VlcHJvbV93cml0ZSgobWU0MDAwX2VlcHJvbV90ICopIGFyZywgYWlfY29udGV4dCk7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FpX2lvY3RsX3NpbmcoKTpJbnZhbGlkIHNlcnZpY2UgbnVtYmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9zaW5nbGUobWU0MDAwX2FpX3NpbmdsZV90ICogYXJnLAorCQkJICAgIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCW1lNDAwMF9haV9zaW5nbGVfdCBjbWQ7CisJaW50IGVycjsKKwl1MzIgdG1wOworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXVuc2lnbmVkIGxvbmcgamlmZnk7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX3NpbmdsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmY21kLCBhcmcsIHNpemVvZihtZTQwMDBfYWlfc2luZ2xlX3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6Q2FuJ3QgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBDaGVjayByYW5nZSBwYXJhbWV0ZXIgKi8KKwlzd2l0Y2ggKGNtZC5yYW5nZSkgeworCWNhc2UgTUU0MDAwX0FJX0xJU1RfUkFOR0VfQklQT0xBUl8xMDoKKwljYXNlIE1FNDAwMF9BSV9MSVNUX1JBTkdFX0JJUE9MQVJfMl81OgorCWNhc2UgTUU0MDAwX0FJX0xJU1RfUkFOR0VfVU5JUE9MQVJfMTA6CisJY2FzZSBNRTQwMDBfQUlfTElTVF9SQU5HRV9VTklQT0xBUl8yXzU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6SW52YWxpZCByYW5nZSBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDaGVjayBtb2RlIGFuZCBjaGFubmVsIG51bWJlciAqLworCXN3aXRjaCAoY21kLm1vZGUpIHsKKwljYXNlIE1FNDAwMF9BSV9MSVNUX0lOUFVUX1NJTkdMRV9FTkRFRDoKKwkJaWYgKGNtZC5jaGFubmVsID49IGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLmNvdW50KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zaW5nbGUoKTpBbmFsb2cgaW5wdXQgaXMgbm90IGF2YWlsYWJsZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIE1FNDAwMF9BSV9MSVNUX0lOUFVUX0RJRkZFUkVOVElBTDoKKwkJaWYgKGNtZC5jaGFubmVsID49CisJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5kaWZmX2NvdW50KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zaW5nbGUoKTpBbmFsb2cgaW5wdXQgaXMgbm90IGF2YWlsYWJsZSBpbiBkaWZmZXJlbnRpYWwgbW9kZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOkludmFsaWQgbW9kZSBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDbGVhciBjaGFubmVsIGxpc3QsIGRhdGEgZmlmbyBhbmQgYm90aCBzdG9wIGJpdHMgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0KKwkgICAgfihNRTQwMDBfQUlfQ1RSTF9CSVRfQ0hBTk5FTF9GSUZPIHwgTUU0MDAwX0FJX0NUUkxfQklUX0RBVEFfRklGTyB8CisJICAgICAgTUU0MDAwX0FJX0NUUkxfQklUX1NUT1AgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1ApOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJLyogRW5hYmxlIGNoYW5uZWwgbGlzdCBhbmQgZGF0YSBmaWZvICovCisJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9DSEFOTkVMX0ZJRk8gfCBNRTQwMDBfQUlfQ1RSTF9CSVRfREFUQV9GSUZPOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJLyogR2VuZXJhdGUgY2hhbm5lbCBsaXN0IGVudHJ5ICovCisJbWU0MDAwX291dGwoY21kLmNoYW5uZWwgfCBjbWQucmFuZ2UgfCBjbWQuCisJCSAgICBtb2RlIHwgTUU0MDAwX0FJX0xJU1RfTEFTVF9FTlRSWSwKKwkJICAgIGFpX2NvbnRleHQtPmNoYW5uZWxfbGlzdF9yZWcpOworCisJLyogU2V0IHRoZSB0aW1lciB0byBtYXhpbXVtICovCisJbWU0MDAwX291dGwoNjYsIGFpX2NvbnRleHQtPmNoYW5fdGltZXJfcmVnKTsKKwltZTQwMDBfb3V0bCg2NiwgYWlfY29udGV4dC0+Y2hhbl9wcmVfdGltZXJfcmVnKTsKKworCWlmICh0bXAgJiBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJRykgeworCQlqaWZmeSA9IGppZmZpZXM7CisJCXdoaWxlICghCisJCSAgICAgICAobWU0MDAwX2lubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmCisJCQlNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKSkgeworCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6V2FpdCBvbiBzdGFydCBvZiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlRSOworCQkJfQorCQkJaWYgKCgoamlmZmllcyAtIGppZmZ5KSA+IChjbWQudGltZW91dCAqIEhaIC8gVVNFUl9IWikpICYmIGNtZC50aW1lb3V0KSB7CS8vIDIuNiBoYXMgZGlmZnJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZQorCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zaW5nbGUoKTpUaW1lb3V0IHJlYWNoZWRcbiIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyogU3RhcnQgY29udmVyc2lvbiAqLworCQltZTQwMDBfaW5sKGFpX2NvbnRleHQtPnN0YXJ0X3JlZyk7CisKKwkJLyogV2FpdCB1bnRpbCByZWFkeSAqLworCQl1ZGVsYXkoMTApOworCQlpZiAoIQorCQkgICAgKG1lNDAwMF9pbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJgorCQkgICAgIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zaW5nbGUoKTpWYWx1ZSBub3QgYXZhaWxhYmxlIGFmdGVyIHdhaXRcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwkvKiBSZWFkIHZhbHVlIGZyb20gZGF0YSBmaWZvICovCisJY21kLnZhbHVlID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5kYXRhX3JlZykgJiAweEZGRkY7CisKKwkvKiBDb3B5IHJlc3VsdCBiYWNrIHRvIHVzZXIgKi8KKwllcnIgPSBjb3B5X3RvX3VzZXIoYXJnLCAmY21kLCBzaXplb2YobWU0MDAwX2FpX3NpbmdsZV90KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOkNhbid0IGNvcHkgdG8gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9pb2N0bF9zdyhzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbWU0MDAwX2FpX2NvbnRleHRfdCAqYWlfY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfaW9jdGxfc3coKSBpcyBleGVjdXRlZFxuIik7CisKKwlhaV9jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoX0lPQ19UWVBFKHNlcnZpY2UpICE9IE1FNDAwMF9NQUdJQykgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9haV9pb2N0bF9zdygpOldyb25nIG1hZ2ljIG51bWJlclxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlpZiAoX0lPQ19OUihzZXJ2aWNlKSA+IE1FNDAwMF9JT0NUTF9NQVhOUikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYWlfaW9jdGxfc3coKTpTZXJ2aWNlIG51bWJlciB0byBoaWdoXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJc3dpdGNoIChzZXJ2aWNlKSB7CisJY2FzZSBNRTQwMDBfQUlfU0NfU0VUVVA6CisJCXJldHVybiBtZTQwMDBfYWlfc2Nfc2V0dXAoKG1lNDAwMF9haV9zY190ICopIGFyZywgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfQ09ORklHOgorCQlyZXR1cm4gbWU0MDAwX2FpX2NvbmZpZygobWU0MDAwX2FpX2NvbmZpZ190ICopIGFyZywgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfU1RBUlQ6CisJCXJldHVybiBtZTQwMDBfYWlfc3RhcnQoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfU1RPUDoKKwkJcmV0dXJuIG1lNDAwMF9haV9zdG9wKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0lNTUVESUFURV9TVE9QOgorCQlyZXR1cm4gbWU0MDAwX2FpX2ltbWVkaWF0ZV9zdG9wKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0ZTTV9TVEFURToKKwkJcmV0dXJuIG1lNDAwMF9haV9mc21fc3RhdGUoKGludCAqKWFyZywgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfR0VUX1VTRVJfSU5GTzoKKwkJcmV0dXJuIG1lNDAwMF9nZXRfdXNlcl9pbmZvKChtZTQwMDBfdXNlcl9pbmZvX3QgKikgYXJnLAorCQkJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mbyk7CisJY2FzZSBNRTQwMDBfQUlfRUVQUk9NX1JFQUQ6CisJCXJldHVybiBtZTQwMDBfZWVwcm9tX3JlYWQoKG1lNDAwMF9lZXByb21fdCAqKSBhcmcsIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0VFUFJPTV9XUklURToKKwkJcmV0dXJuIG1lNDAwMF9lZXByb21fd3JpdGUoKG1lNDAwMF9lZXByb21fdCAqKSBhcmcsIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0dFVF9DT1VOVF9CVUZGRVI6CisJCXJldHVybiBtZTQwMDBfYWlfZ2V0X2NvdW50X2J1ZmZlcigodW5zaWduZWQgbG9uZyAqKWFyZywKKwkJCQkJCSAgYWlfY29udGV4dCk7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9pb2N0bF9zdygpOkludmFsaWQgc2VydmljZSBudW1iZXIgJWRcbiIsCisJCSAgICAgICBzZXJ2aWNlKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9pb2N0bF9leHQoc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzZXJ2aWNlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwltZTQwMDBfYWlfY29udGV4dF90ICphaV9jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9pb2N0bF9leHQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlhaV9jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoX0lPQ19UWVBFKHNlcnZpY2UpICE9IE1FNDAwMF9NQUdJQykgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9haV9pb2N0bF9leHQoKTpXcm9uZyBtYWdpYyBudW1iZXJcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJaWYgKF9JT0NfTlIoc2VydmljZSkgPiBNRTQwMDBfSU9DVExfTUFYTlIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FpX2lvY3RsX2V4dCgpOlNlcnZpY2UgbnVtYmVyIHRvIGhpZ2hcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlzd2l0Y2ggKHNlcnZpY2UpIHsKKwljYXNlIE1FNDAwMF9BSV9TQ19TRVRVUDoKKwkJcmV0dXJuIG1lNDAwMF9haV9zY19zZXR1cCgobWU0MDAwX2FpX3NjX3QgKikgYXJnLCBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9DT05GSUc6CisJCXJldHVybiBtZTQwMDBfYWlfY29uZmlnKChtZTQwMDBfYWlfY29uZmlnX3QgKikgYXJnLCBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9TVEFSVDoKKwkJcmV0dXJuIG1lNDAwMF9haV9zdGFydF9leCgodW5zaWduZWQgbG9uZyAqKWFyZywgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfU1RPUDoKKwkJcmV0dXJuIG1lNDAwMF9haV9zdG9wKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0lNTUVESUFURV9TVE9QOgorCQlyZXR1cm4gbWU0MDAwX2FpX2ltbWVkaWF0ZV9zdG9wKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0VYX1RSSUdfRU5BQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FpX2V4X3RyaWdfZW5hYmxlKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0VYX1RSSUdfRElTQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9haV9leF90cmlnX2Rpc2FibGUoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRVhfVFJJR19TRVRVUDoKKwkJcmV0dXJuIG1lNDAwMF9haV9leF90cmlnX3NldHVwKChtZTQwMDBfYWlfdHJpZ2dlcl90ICopIGFyZywKKwkJCQkJICAgICAgIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0ZTTV9TVEFURToKKwkJcmV0dXJuIG1lNDAwMF9haV9mc21fc3RhdGUoKGludCAqKWFyZywgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfR0VUX1VTRVJfSU5GTzoKKwkJcmV0dXJuIG1lNDAwMF9nZXRfdXNlcl9pbmZvKChtZTQwMDBfdXNlcl9pbmZvX3QgKikgYXJnLAorCQkJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mbyk7CisJY2FzZSBNRTQwMDBfQUlfR0VUX0NPVU5UX0JVRkZFUjoKKwkJcmV0dXJuIG1lNDAwMF9haV9nZXRfY291bnRfYnVmZmVyKCh1bnNpZ25lZCBsb25nICopYXJnLAorCQkJCQkJICBhaV9jb250ZXh0KTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2lvY3RsX2V4dCgpOkludmFsaWQgc2VydmljZSBudW1iZXIgJWRcbiIsCisJCSAgICAgICBzZXJ2aWNlKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLCBpbnQgbW9kZSkKK3sKKwltZTQwMDBfYWlfY29udGV4dF90ICphaV9jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19mYXN5bmNfY29udCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFpX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZV9wLCBtb2RlLCAmYWlfY29udGV4dC0+ZmFzeW5jX3ApOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9jb25maWcobWU0MDAwX2FpX2NvbmZpZ190ICogYXJnLAorCQkJICAgIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCW1lNDAwMF9haV9jb25maWdfdCBjbWQ7CisJdTMyICpsaXN0ID0gTlVMTDsKKwl1MzIgbW9kZTsKKwlpbnQgaTsKKwlpbnQgZXJyOworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXU2NCBzY2FuOworCXUzMiB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX2NvbmZpZygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCS8qIENoZWNrIGlmIGNvbnZlcnNpb24gaXMgc3RvcHBlZCAqLworCWlmIChpbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6Q29udmVyc2lvbiBpcyBub3Qgc3RvcHBlZFxuIik7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBBSV9DT05GSUdfRVJSOworCX0KKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmY21kLCBhcmcsIHNpemVvZihtZTQwMDBfYWlfY29uZmlnX3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6Q2FuJ3QgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJfQorCisJUERFQlVHCisJICAgICgibWU0MDAwX2FpX2NvbmZpZygpOmNoYW4gPSAlbGQsIHByZV9jaGFuID0gJWxkLCBzY2FuX2xvdyA9ICVsZCwgc2Nhbl9oaWdoID0gJWxkLCBjb3VudCA9ICVsZFxuIiwKKwkgICAgIGNtZC50aW1lci5jaGFuLCBjbWQudGltZXIucHJlX2NoYW4sIGNtZC50aW1lci5zY2FuX2xvdywKKwkgICAgIGNtZC50aW1lci5zY2FuX2hpZ2gsIGNtZC5jaGFubmVsX2xpc3QuY291bnQpOworCisJLyogQ2hlY2sgd2hldGhlciBzYW1wbGUgYW5kIGhvbGQgaXMgYXZhaWxhYmxlIGZvciB0aGlzIGJvYXJkICovCisJaWYgKGNtZC5zaCkgeworCQlpZiAoIWFpX2NvbnRleHQtPmJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLnNoX2NvdW50KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpTYW1wbGUgYW5kIEhvbGQgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBib2FyZFxuIik7CisJCQllcnIgPSAtRU5PREVWOworCQkJZ290byBBSV9DT05GSUdfRVJSOworCQl9CisJfQorCisJLyogQ2hlY2sgdGhlIGNoYW5uZWwgbGlzdCBzaXplICovCisJaWYgKGNtZC5jaGFubmVsX2xpc3QuY291bnQgPiBNRTQwMDBfQUlfQ0hBTk5FTF9MSVNUX0NPVU5UKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9haV9jb25maWcoKTpDaGFubmVsIGxpc3QgaXMgdG8gbGFyZ2VcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJfQorCisJLyogQ29weSBjaGFubmVsIGxpc3QgZnJvbSB1c2VyICovCisJbGlzdCA9IGttYWxsb2Moc2l6ZW9mKHUzMikgKiBjbWQuY2hhbm5lbF9saXN0LmNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxpc3QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDYW4ndCBnZXQgbWVtb3J5IGZvciBjaGFubmVsIGxpc3RcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJfQorCWVyciA9CisJICAgIGNvcHlfZnJvbV91c2VyKGxpc3QsIGNtZC5jaGFubmVsX2xpc3QubGlzdCwKKwkJCSAgIHNpemVvZih1MzIpICogY21kLmNoYW5uZWxfbGlzdC5jb3VudCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBBSV9DT05GSUdfRVJSOworCX0KKworCS8qIENoZWNrIGlmIGxhc3QgZW50cnkgYml0IGlzIHNldCAqLworCWlmICghKGxpc3RbY21kLmNoYW5uZWxfbGlzdC5jb3VudCAtIDFdICYgTUU0MDAwX0FJX0xJU1RfTEFTVF9FTlRSWSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIm1lNDAwMF9haV9jb25maWcoKTpMYXN0IGVudHJ5IGJpdCBpcyBub3Qgc2V0XG4iKTsKKwkJbGlzdFtjbWQuY2hhbm5lbF9saXN0LmNvdW50IC0gMV0gfD0gTUU0MDAwX0FJX0xJU1RfTEFTVF9FTlRSWTsKKwl9CisKKwkvKiBDaGVjayB3aGV0aGVyIG1vZGUgaXMgZXF1YWwgZm9yIGFsbCBlbnRyaWVzICovCisJbW9kZSA9IGxpc3RbMF0gJiAweDIwOworCWZvciAoaSA9IDA7IGkgPCBjbWQuY2hhbm5lbF9saXN0LmNvdW50OyBpKyspIHsKKwkJaWYgKChsaXN0W2ldICYgMHgyMCkgIT0gbW9kZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6TW9kZSBpcyBub3QgZXF1YWwgZm9yIGFsbCBlbnRyaWVzXG4iKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCX0KKwl9CisKKwkvKiBDaGVjayB3aGV0aGVyIGNoYW5uZWxzIGFyZSBhdmFpbGFibGUgZm9yIHRoaXMgbW9kZSAqLworCWlmIChtb2RlID09IE1FNDAwMF9BSV9MSVNUX0lOUFVUX1NJTkdMRV9FTkRFRCkgeworCQlmb3IgKGkgPSAwOyBpIDwgY21kLmNoYW5uZWxfbGlzdC5jb3VudDsgaSsrKSB7CisJCQlpZiAoKGxpc3RbaV0gJiAweDFGKSA+PQorCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLmNvdW50KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOkNoYW5uZWwgaXMgbm90IGF2YWlsYWJsZSBmb3Igc2luZ2xlIGVuZGVkXG4iKTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAobW9kZSA9PSBNRTQwMDBfQUlfTElTVF9JTlBVVF9ESUZGRVJFTlRJQUwpIHsKKwkJZm9yIChpID0gMDsgaSA8IGNtZC5jaGFubmVsX2xpc3QuY291bnQ7IGkrKykgeworCQkJaWYgKChsaXN0W2ldICYgMHgxRikgPj0KKwkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5kaWZmX2NvdW50KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOkNoYW5uZWwgaXMgbm90IGF2YWlsYWJsZSBmb3IgZGlmZmVyZW50aWFsXG4iKTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwkJCX0KKwkJfQorCX0KKworCS8qIENoZWNrIGlmIGJpcG9sYXIgaXMgc2V0IGZvciBhbGwgZW50cmllcyB3aGVuIGluIGRpZmZlcmVudGlhbCBtb2RlICovCisJaWYgKG1vZGUgPT0gTUU0MDAwX0FJX0xJU1RfSU5QVVRfRElGRkVSRU5USUFMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjbWQuY2hhbm5lbF9saXN0LmNvdW50OyBpKyspIHsKKwkJCWlmICgobGlzdFtpXSAmIDB4QzApICE9IE1FNDAwMF9BSV9MSVNUX1JBTkdFX0JJUE9MQVJfMTAKKwkJCSAgICAmJiAobGlzdFtpXSAmIDB4QzApICE9CisJCQkgICAgTUU0MDAwX0FJX0xJU1RfUkFOR0VfQklQT0xBUl8yXzUpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6Qmlwb2xhciBpcyBub3Qgc2VsZWN0ZWQgaW4gZGlmZmVyZW50aWFsIG1vZGVcbiIpOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBBSV9DT05GSUdfRVJSOworCQkJfQorCQl9CisJfQorCisJaWYgKGFpX2NvbnRleHQtPm1vZGUgIT0gTUU0MDAwX0FJX0FDUV9NT0RFX0VYVF9TSU5HTEVfVkFMVUUpIHsKKwkJLyogQ2hlY2sgZm9yIG1pbmltdW0gY2hhbm5lbCBkaXZpc29yICovCisJCWlmIChjbWQudGltZXIuY2hhbiA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOkNoYW5uZWwgdGltZXIgZGl2aXNvciBpcyB0byBsb3dcbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwkJfQorCisJCS8qIENoZWNrIGlmIG1pbmltdW0gY2hhbm5lbCBkaXZpc29yIGlzIGFkanVzdGVkIHdoZW4gc2FtcGxlIGFuZCBob2xkIGlzIGFjdGl2YXRlZCAqLworCQlpZiAoKGNtZC5zaCkgJiYgKGNtZC50aW1lci5jaGFuICE9IE1FNDAwMF9BSV9NSU5fVElDS1MpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDaGFubmVsIHRpbWVyIGRpdmlzb3IgbXVzdCBiZSBhdCBtaW5pbXVtIHdoZW4gc2FtcGxlIGFuZCBob2xkIGlzIGFjdGl2YXRlZFxuIik7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBBSV9DT05GSUdfRVJSOworCQl9CisKKwkJLyogQ2hlY2sgZm9yIG1pbmltdW0gY2hhbm5lbCBwcmUgZGl2aXNvciAqLworCQlpZiAoY21kLnRpbWVyLnByZV9jaGFuIDwgTUU0MDAwX0FJX01JTl9USUNLUykgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6Q2hhbm5lbCBwcmUgdGltZXIgZGl2aXNvciBpcyB0byBsb3dcbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwkJfQorCisJCS8qIFdyaXRlIHRoZSBjaGFubmVsIHRpbWVycyAqLworCQltZTQwMDBfb3V0bChjbWQudGltZXIuY2hhbiAtIDEsIGFpX2NvbnRleHQtPmNoYW5fdGltZXJfcmVnKTsKKwkJbWU0MDAwX291dGwoY21kLnRpbWVyLnByZV9jaGFuIC0gMSwKKwkJCSAgICBhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lcl9yZWcpOworCisJCS8qIFNhdmUgdGhlIHRpbWVyIHZhbHVlcyBpbiB0aGUgYm9hcmQgY29udGV4dCAqLworCQlhaV9jb250ZXh0LT5jaGFuX3RpbWVyID0gY21kLnRpbWVyLmNoYW47CisJCWFpX2NvbnRleHQtPmNoYW5fcHJlX3RpbWVyID0gY21kLnRpbWVyLnByZV9jaGFuOworCisJCWlmIChhaV9jb250ZXh0LT5tb2RlICE9IE1FNDAwMF9BSV9BQ1FfTU9ERV9FWFRfU0lOR0xFX0NIQU5MSVNUKSB7CisJCQkvKiBDaGVjayBmb3Igc2NhbiB0aW1lciBkaXZpc29yICovCisJCQlzY2FuID0KKwkJCSAgICAodTY0KSBjbWQudGltZXIuc2Nhbl9sb3cgfCAoKHU2NCkgY21kLnRpbWVyLgorCQkJCQkJCXNjYW5faGlnaCA8PCAzMik7CisJCQlpZiAoc2NhbiAhPSAwKSB7CisJCQkJaWYgKHNjYW4gPAorCQkJCSAgICBjbWQuY2hhbm5lbF9saXN0LmNvdW50ICogY21kLnRpbWVyLmNoYW4gKworCQkJCSAgICAxKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6U2NhbiB0aW1lciBkaXZpc29yIGlzIHRvIGxvd1xuIik7CisJCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwkJCQl9CisJCQl9CisKKwkJCS8qIFdyaXRlIHRoZSBzY2FuIHRpbWVycyAqLworCQkJaWYgKHNjYW4gIT0gMCkgeworCQkJCXNjYW4tLTsKKwkJCQl0bXAgPSAodTMyKSAoc2NhbiAmIDB4RkZGRkZGRkYpOworCQkJCW1lNDAwMF9vdXRsKHRtcCwKKwkJCQkJICAgIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93X3JlZyk7CisJCQkJdG1wID0gKHUzMikgKChzY2FuID4+IDMyKSAmIDB4RkZGRkZGRkYpOworCQkJCW1lNDAwMF9vdXRsKHRtcCwKKwkJCQkJICAgIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaF9yZWcpOworCisJCQkJc2NhbiA9CisJCQkJICAgIHNjYW4gLSAoY21kLnRpbWVyLmNoYW4gLSAxKSArCisJCQkJICAgIChjbWQudGltZXIucHJlX2NoYW4gLSAxKTsKKwkJCQl0bXAgPSAodTMyKSAoc2NhbiAmIDB4RkZGRkZGRkYpOworCQkJCW1lNDAwMF9vdXRsKHRtcCwKKwkJCQkJICAgIGFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2xvd19yZWcpOworCQkJCXRtcCA9ICh1MzIpICgoc2NhbiA+PiAzMikgJiAweEZGRkZGRkZGKTsKKwkJCQltZTQwMDBfb3V0bCh0bXAsCisJCQkJCSAgICBhaV9jb250ZXh0LT4KKwkJCQkJICAgIHNjYW5fcHJlX3RpbWVyX2hpZ2hfcmVnKTsKKwkJCX0gZWxzZSB7CisJCQkJbWU0MDAwX291dGwoMHgwLAorCQkJCQkgICAgYWlfY29udGV4dC0+c2Nhbl90aW1lcl9sb3dfcmVnKTsKKwkJCQltZTQwMDBfb3V0bCgweDAsCisJCQkJCSAgICBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2hfcmVnKTsKKworCQkJCW1lNDAwMF9vdXRsKDB4MCwKKwkJCQkJICAgIGFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2xvd19yZWcpOworCQkJCW1lNDAwMF9vdXRsKDB4MCwKKwkJCQkJICAgIGFpX2NvbnRleHQtPgorCQkJCQkgICAgc2Nhbl9wcmVfdGltZXJfaGlnaF9yZWcpOworCQkJfQorCisJCQlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvdyA9IGNtZC50aW1lci5zY2FuX2xvdzsKKwkJCWFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaCA9IGNtZC50aW1lci5zY2FuX2hpZ2g7CisJCX0KKwl9CisKKwkvKiBDbGVhciB0aGUgY2hhbm5lbCBsaXN0ICovCisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfQ0hBTk5FTF9GSUZPOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfQ0hBTk5FTF9GSUZPOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJLyogV3JpdGUgdGhlIGNoYW5uZWwgbGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCBjbWQuY2hhbm5lbF9saXN0LmNvdW50OyBpKyspIHsKKwkJbWU0MDAwX291dGwobGlzdFtpXSwgYWlfY29udGV4dC0+Y2hhbm5lbF9saXN0X3JlZyk7CisJfQorCisJLyogU2V0dXAgc2FtcGxlIGFuZCBob2xkICovCisJaWYgKGNtZC5zaCkgeworCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX1NBTVBMRV9IT0xEOworCQltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl9IGVsc2UgeworCQl0bXAgJj0gfk1FNDAwMF9BSV9DVFJMX0JJVF9TQU1QTEVfSE9MRDsKKwkJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJfQorCisJLyogU2F2ZSB0aGUgY2hhbm5lbCBsaXN0IHNpemUgaW4gdGhlIGJvYXJkIGNvbnRleHQgKi8KKwlhaV9jb250ZXh0LT5jaGFubmVsX2xpc3RfY291bnQgPSBjbWQuY2hhbm5lbF9saXN0LmNvdW50OworCisJa2ZyZWUobGlzdCk7CisKKwlyZXR1cm4gMDsKKworICAgICAgQUlfQ09ORklHX0VSUjoKKworCS8qIFJlc2V0IHRoZSB0aW1lcnMgKi8KKwlhaV9jb250ZXh0LT5jaGFuX3RpbWVyID0gNjY7CisJYWlfY29udGV4dC0+Y2hhbl9wcmVfdGltZXIgPSA2NjsKKwlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvdyA9IDA7CisJYWlfY29udGV4dC0+c2Nhbl90aW1lcl9oaWdoID0gMDsKKworCW1lNDAwMF9vdXRsKDY1LCBhaV9jb250ZXh0LT5jaGFuX3RpbWVyX3JlZyk7CisJbWU0MDAwX291dGwoNjUsIGFpX2NvbnRleHQtPmNoYW5fcHJlX3RpbWVyX3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2Nhbl90aW1lcl9oaWdoX3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2Nhbl90aW1lcl9sb3dfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3ByZV90aW1lcl9oaWdoX3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2Nhbl9wcmVfdGltZXJfbG93X3JlZyk7CisKKwlhaV9jb250ZXh0LT5jaGFubmVsX2xpc3RfY291bnQgPSAwOworCisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9CisJICAgIH4oTUU0MDAwX0FJX0NUUkxfQklUX0NIQU5ORUxfRklGTyB8IE1FNDAwMF9BSV9DVFJMX0JJVF9TQU1QTEVfSE9MRCk7CisKKwlpZiAobGlzdCkKKwkJa2ZyZWUobGlzdCk7CisKKwlyZXR1cm4gZXJyOworCit9CisKK3N0YXRpYyBpbnQgYWlfY29tbW9uX3N0YXJ0KG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCXUzMiB0bXA7CisJQ0FMTF9QREVCVUcoImFpX2NvbW1vbl9zdGFydCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJLyogQ2hlY2sgaWYgY29udmVyc2lvbiBpcyBzdG9wcGVkICovCisJaWYgKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6YWlfY29tbW9uX3N0YXJ0KCk6Q29udmVyc2lvbiBpcyBub3Qgc3RvcHBlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogQ2xlYXIgZGF0YSBmaWZvLCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLCBjbGVhciBzYW1wbGUgY291bnRlciByZWxvYWQgKi8KKwl0bXAgJj0gfihNRTQwMDBfQUlfQ1RSTF9CSVRfREFUQV9GSUZPIHwgTUU0MDAwX0FJX0NUUkxfQklUX0xFX0lSUSB8CisJCSBNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJRIHwgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSB8CisJCSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfUkVMT0FEKTsKKworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJLyogQ2xlYXIgY2lyY3VsYXIgYnVmZmVyICovCisJYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCA9IDA7CisJYWlfY29udGV4dC0+Y2lyY19idWYudGFpbCA9IDA7CisKKwkvKiBFbmFibGUgZGF0YSBmaWZvICovCisJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9EQVRBX0ZJRk87CisKKwkvKiBEZXRlcm1pbmUgaW50ZXJydXB0IHNldHVwICovCisJaWYgKGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyICYmICFhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWxvYWQpIHsKKwkJLyogRW5hYmxlIEhhbGYgRnVsbCBJbnRlcnJ1cHQgYW5kIFNhbXBsZSBDb3VudGVyIEludGVycnVwdCAqLworCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSB8IE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlE7CisJfSBlbHNlIGlmIChhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcgorCQkgICAmJiBhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWxvYWQpIHsKKwkJaWYgKGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyIDw9IE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMikgeworCQkJLyogRW5hYmxlIG9ubHkgU2FtcGxlIENvdW50ZXIgSW50ZXJydXB0ICovCisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRIHwKKwkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfUkVMT0FEOworCQl9IGVsc2UgeworCQkJLyogRW5hYmxlIEhhbGYgRnVsbCBJbnRlcnJ1cHQgYW5kIFNhbXBsZSBDb3VudGVyIEludGVycnVwdCAqLworCQkJdG1wIHw9CisJCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSB8CisJCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUSB8CisJCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX1NDX1JFTE9BRDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEVuYWJsZSBvbmx5IEhhbGYgRnVsbCBJbnRlcnJ1cHQgKi8KKwkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlE7CisJfQorCisJLyogQ2xlYXIgdGhlIHN0b3AgYml0cyAqLworCXRtcCAmPSB+KE1FNDAwMF9BSV9DVFJMX0JJVF9TVE9QIHwgTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QKTsKKworCS8qIFdyaXRlIHNldHVwIHRvIGhhcmR3YXJlICovCisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkvKiBXcml0ZSBzYW1wbGUgY291bnRlciAqLworCW1lNDAwMF9vdXRsKGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyLCBhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3N0YXJ0KG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCWludCBlcnI7CisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9zdGFydCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIFByZXBhcmUgSGFyZHdhcmUgKi8KKwllcnIgPSBhaV9jb21tb25fc3RhcnQoYWlfY29udGV4dCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIFN0YXJ0IGNvbnZlcnNpb24gYnkgZHVtbXkgcmVhZCAqLworCW1lNDAwMF9pbmwoYWlfY29udGV4dC0+c3RhcnRfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9zdGFydF9leCh1bnNpZ25lZCBsb25nICphcmcsCisJCQkgICAgICBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwlpbnQgZXJyOworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXVuc2lnbmVkIGxvbmcgcmVmOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfc3RhcnRfZXgoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpZiAoZ2V0X3VzZXIodGltZW91dCwgYXJnKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYWlfc3RhcnRfZXgoKTpDYW5ub3QgY29weSBkYXRhIGZyb20gdXNlclxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCS8qIFByZXBhcmUgSGFyZHdhcmUgKi8KKwllcnIgPSBhaV9jb21tb25fc3RhcnQoYWlfY29udGV4dCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICh0aW1lb3V0KSB7CisJCXJlZiA9IGppZmZpZXM7CisJCXdoaWxlICghCisJCSAgICAgICAoaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSkKKwkJeworCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc3RhcnRfZXgoKTpXYWl0IG9uIHN0YXJ0IG9mIHN0YXRlIG1hY2hpbmUgaW50ZXJydXB0ZWRcbiIpOworCQkJCXJldHVybiAtRUlOVFI7CisJCQl9CisJCQlpZiAoKChqaWZmaWVzIC0gcmVmKSA+ICh0aW1lb3V0ICogSFogLyBVU0VSX0haKSkpIHsJLy8gMi42IGhhcyBkaWZmcmVudCBkZWZpbml0aW9ucyBmb3IgSFogaW4gdXNlciBhbmQga2VybmVsIHNwYWNlCisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3N0YXJ0X2V4KCk6VGltZW91dCByZWFjaGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXdoaWxlICghCisJCSAgICAgICAoaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSkKKwkJeworCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc3RhcnRfZXgoKTpXYWl0IG9uIHN0YXJ0IG9mIHN0YXRlIG1hY2hpbmUgaW50ZXJydXB0ZWRcbiIpOworCQkJCXJldHVybiAtRUlOVFI7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfc3RvcChtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX3N0b3AoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwkvKiBEaXNhYmxlIGlycXMgYW5kIGNsZWFyIGRhdGEgZmlmbyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPQorCSAgICB+KE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRIHwKKwkgICAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfREFUQV9GSUZPKTsKKwkvKiBTdG9wIGNvbnZlcnNpb24gb2YgdGhlIHN0YXRlIG1hY2hpbmUgKi8KKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX1NUT1A7CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCS8qIENsZWFyIGNpcmN1bGFyIGJ1ZmZlciAqLworCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPSAwOworCWFpX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPSAwOworCisJd2hpbGUgKGlubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkgeworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zdG9wKCk6V2FpdCBvbiBzdGF0ZSBtYWNoaW5lIGFmdGVyIHN0b3AgaW50ZXJydXB0ZWRcbiIpOworCQkJcmV0dXJuIC1FSU5UUjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9pbW1lZGlhdGVfc3RvcChtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX3N0b3AoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwkvKiBEaXNhYmxlIGlycXMgYW5kIGNsZWFyIGRhdGEgZmlmbyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPQorCSAgICB+KE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRIHwKKwkgICAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfREFUQV9GSUZPKTsKKwkvKiBTdG9wIGNvbnZlcnNpb24gb2YgdGhlIHN0YXRlIG1hY2hpbmUgKi8KKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwkvKiBDbGVhciBjaXJjdWxhciBidWZmZXIgKi8KKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKworCXdoaWxlIChpbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pIHsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc3RvcCgpOldhaXQgb24gc3RhdGUgbWFjaGluZSBhZnRlciBzdG9wIGludGVycnVwdGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVFI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfZXhfdHJpZ19lbmFibGUobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9leF90cmlnX2VuYWJsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJRzsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2V4X3RyaWdfZGlzYWJsZShtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX2V4X3RyaWdfZGlzYWJsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUc7CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9leF90cmlnX3NldHVwKG1lNDAwMF9haV90cmlnZ2VyX3QgKiBhcmcsCisJCQkJICAgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJbWU0MDAwX2FpX3RyaWdnZXJfdCBjbWQ7CisJaW50IGVycjsKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2YobWU0MDAwX2FpX3RyaWdnZXJfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9leF90cmlnX3NldHVwKCk6Q2FuJ3QgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCWlmIChjbWQubW9kZSA9PSBNRTQwMDBfQUlfVFJJR0dFUl9FWFRfRElHSVRBTCkgeworCQl0bXAgJj0gfk1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0FOQUxPRzsKKwl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9BSV9UUklHR0VSX0VYVF9BTkFMT0cpIHsKKwkJaWYgKCFhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5leF90cmlnX2FuYWxvZykgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfZXhfdHJpZ19zZXR1cCgpOk5vIGFuYWxvZyB0cmlnZ2VyIGF2YWlsYWJsZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfQU5BTE9HOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfZXhfdHJpZ19zZXR1cCgpOkludmFsaWQgdHJpZ2dlciBtb2RlIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjbWQuZWRnZSA9PSBNRTQwMDBfQUlfVFJJR0dFUl9FWFRfRURHRV9SSVNJTkcpIHsKKwkJdG1wICY9CisJCSAgICB+KE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0JPVEggfAorCQkgICAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19GQUxMSU5HKTsKKwl9IGVsc2UgaWYgKGNtZC5lZGdlID09IE1FNDAwMF9BSV9UUklHR0VSX0VYVF9FREdFX0ZBTExJTkcpIHsKKwkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0ZBTExJTkc7CisJCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfQk9USDsKKwl9IGVsc2UgaWYgKGNtZC5lZGdlID09IE1FNDAwMF9BSV9UUklHR0VSX0VYVF9FREdFX0JPVEgpIHsKKwkJdG1wIHw9CisJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19CT1RIIHwKKwkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0ZBTExJTkc7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9leF90cmlnX3NldHVwKCk6SW52YWxpZCB0cmlnZ2VyIGVkZ2Ugc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfc2Nfc2V0dXAobWU0MDAwX2FpX3NjX3QgKiBhcmcsCisJCQkgICAgICBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwltZTQwMDBfYWlfc2NfdCBjbWQ7CisJaW50IGVycjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfc2Nfc2V0dXAoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2YobWU0MDAwX2FpX3NjX3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2Nfc2V0dXAoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyID0gY21kLnZhbHVlOworCWFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlbG9hZCA9IGNtZC5yZWxvYWQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgbWU0MDAwX2FpX3JlYWQoc3RydWN0IGZpbGUgKmZpbGVwLCBjaGFyICpidWZmLCBzaXplX3QgY250LAorCQkJICAgICAgbG9mZl90ICogb2ZmcCkKK3sKKwltZTQwMDBfYWlfY29udGV4dF90ICphaV9jb250ZXh0ID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKKwlzMTYgKmJ1ZmZlciA9IChzMTYgKikgYnVmZjsKKwlzaXplX3QgY291bnQgPSBjbnQgLyAyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHRtcDsKKwlpbnQgYyA9IDA7CisJaW50IGsgPSAwOworCWludCByZXQgPSAwOworCXdhaXRfcXVldWVfdCB3YWl0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9yZWFkKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOworCisJLyogQ2hlY2sgY291bnQgKi8KKwlpZiAoY291bnQgPD0gMCkgeworCQlQREVCVUcoIm1lNDAwMF9haV9yZWFkKCk6Q291bnQgaXMgMFxuIik7CisJCXJldHVybiAwOworCX0KKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJaWYgKGZpbGVwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJYyA9IG1lNDAwMF92YWx1ZXNfdG9fZW5kKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpOworCQkJaWYgKCFjKSB7CisJCQkJUERFQlVHCisJCQkJICAgICgibWU0MDAwX2FpX3JlYWQoKTpSZXR1cm5pbmcgZnJvbSBub25ibG9ja2luZyByZWFkXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIENoZWNrIGlmIGNvbnZlcnNpb24gaXMgc3RpbGwgcnVubmluZyAqLworCQkJaWYgKCEKKwkJCSAgICAobWU0MDAwX2lubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmCisJCQkgICAgIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfcmVhZCgpOkNvbnZlcnNpb24gaW50ZXJydXB0ZWRcbiIpOworCQkJCXJldHVybiAtRVBJUEU7CisJCQl9CisKKwkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShhaV9jb250ZXh0LT53YWl0X3F1ZXVlLAorCQkJCQkJIChtZTQwMDBfdmFsdWVzX3RvX2VuZAorCQkJCQkJICAoYWlfY29udGV4dC0+Y2lyY19idWYsCisJCQkJCQkgICBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKSkpOworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3JlYWQoKTpXYWl0IG9uIHZhbHVlcyBpbnRlcnJ1cHRlZCBmcm9tIHNpZ25hbFxuIik7CisJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCX0KKwkJfQorCisJCS8qIE9ubHkgcmVhZCBjb3VudCB2YWx1ZXMgb3IgYXMgbXVjaCBhcyBhdmFpbGFibGUgKi8KKwkJYyA9IG1lNDAwMF92YWx1ZXNfdG9fZW5kKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCk7CisJCVBERUJVRygibWU0MDAwX2FpX3JlYWQoKTolZCB2YWx1ZXMgdG8gZW5kXG4iLCBjKTsKKwkJaWYgKGNvdW50IDwgYykKKwkJCWMgPSBjb3VudDsKKworCQlQREVCVUcoIm1lNDAwMF9haV9yZWFkKCk6Q29weSAlZCB2YWx1ZXMgdG8gdXNlciBzcGFjZVxuIiwgYyk7CisJCWsgPSAyICogYzsKKwkJayAtPSBjb3B5X3RvX3VzZXIoYnVmZmVyLAorCQkJCSAgYWlfY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCQkgIGFpX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwsIGspOworCQljID0gayAvIDI7CisJCWlmICghYykgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfcmVhZCgpOkNhbm5vdCBjb3B5IG5ldyB2YWx1ZXMgdG8gdXNlclxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCWFpX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPQorCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgKyBjKSAmIChNRTQwMDBfQUlfQlVGRkVSX0NPVU5UIC0KKwkJCQkJCSAgICAgICAxKTsKKwkJYnVmZmVyICs9IGM7CisJCWNvdW50IC09IGM7CisJCXJldCArPSBjOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQlpZiAobWU0MDAwX2J1Zl9zcGFjZQorCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKSkgeworCQkJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkJCS8qIERldGVybWluZSBpbnRlcnJ1cHQgc2V0dXAgKi8KKwkJCWlmIChhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcgorCQkJICAgICYmICFhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWxvYWQpIHsKKwkJCQkvKiBFbmFibGUgSGFsZiBGdWxsIEludGVycnVwdCBhbmQgU2FtcGxlIENvdW50ZXIgSW50ZXJydXB0ICovCisJCQkJdG1wIHw9CisJCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEgfAorCQkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJROworCQkJfSBlbHNlIGlmIChhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcgorCQkJCSAgICYmIGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlbG9hZCkgeworCQkJCWlmIChhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlciA8CisJCQkJICAgIE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMikgeworCQkJCQkvKiBFbmFibGUgb25seSBTYW1wbGUgQ291bnRlciBJbnRlcnJ1cHQgKi8KKwkJCQkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlE7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogRW5hYmxlIEhhbGYgRnVsbCBJbnRlcnJ1cHQgYW5kIFNhbXBsZSBDb3VudGVyIEludGVycnVwdCAqLworCQkJCQl0bXAgfD0KKwkJCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEgfAorCQkJCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIEVuYWJsZSBvbmx5IEhhbGYgRnVsbCBJbnRlcnJ1cHQgKi8KKwkJCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUTsKKwkJCX0KKworCQkJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiBDaGVjayBpZiBjb252ZXJzaW9uIGlzIHN0aWxsIHJ1bm5pbmcgKi8KKwlpZiAoIShtZTQwMDBfaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3JlYWQoKTpDb252ZXJzaW9uIG5vdCBydW5uaW5nIGFmdGVyIGNvbXBsZXRlIHJlYWRcbiIpOworCQlyZXR1cm4gLUVQSVBFOworCX0KKworCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJcmV0dXJuIChrID09IDApID8gLUVBR0FJTiA6IDIgKiByZXQ7CisJfQorCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9yZWFkKCkgaXMgbGVhdmVkXG4iKTsKKwlyZXR1cm4gcmV0ICogMjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtZTQwMDBfYWlfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZV9wLCBwb2xsX3RhYmxlICogd2FpdCkKK3sKKwltZTQwMDBfYWlfY29udGV4dF90ICphaV9jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX3BvbGwoKSBpcyBleGVjdXRlZFxuIik7CisKKwlhaV9jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwkvKiBSZWdpc3RlciB3YWl0IHF1ZXVlICovCisJcG9sbF93YWl0KGZpbGVfcCwgJmFpX2NvbnRleHQtPndhaXRfcXVldWUsIHdhaXQpOworCisJLyogR2V0IGF2YWlsYWJsZSB2YWx1ZXMgKi8KKwlpZiAobWU0MDAwX3ZhbHVlc190b19lbmQoYWlfY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpKQorCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisKKwlQREVCVUcoIm1lNDAwMF9haV9wb2xsKCk6UmV0dXJuIG1hc2sgJWxYXG4iLCBtYXNrKTsKKworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9vZmZzZXRfZW5hYmxlKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9vZmZzZXRfZW5hYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9PRkZTRVQ7CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfb2Zmc2V0X2Rpc2FibGUobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX29mZnNldF9kaXNhYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfT0ZGU0VUOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2Z1bGxzY2FsZV9lbmFibGUobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX2Z1bGxzY2FsZV9lbmFibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0ZVTExTQ0FMRTsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9mdWxsc2NhbGVfZGlzYWJsZShtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfZnVsbHNjYWxlX2Rpc2FibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0gfk1FNDAwMF9BSV9DVFJMX0JJVF9GVUxMU0NBTEU7CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfZnNtX3N0YXRlKGludCAqYXJnLCBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfZnNtX3N0YXRlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdG1wID0KKwkgICAgKG1lNDAwMF9pbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pID8gMQorCSAgICA6IDA7CisKKwlpZiAocHV0X3VzZXIodG1wLCBhcmcpKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2FpX2ZzbV9zdGF0ZSgpOkNhbm5vdCBjb3B5IHRvIHVzZXJcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfZ2V0X2NvdW50X2J1ZmZlcih1bnNpZ25lZCBsb25nICphcmcsCisJCQkJICAgICAgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyBjOworCWludCBlcnI7CisKKwljID0gbWU0MDAwX2J1Zl9jb3VudChhaV9jb250ZXh0LT5jaXJjX2J1ZiwgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCk7CisKKwllcnIgPSBjb3B5X3RvX3VzZXIoYXJnLCAmYywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfZ2V0X2NvdW50X2J1ZmZlcigpOkNhbid0IGNvcHkgdG8gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRUVQUk9NIHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZWVwcm9tX3dyaXRlX2NtZChtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCwgdW5zaWduZWQgbG9uZyBjbWQsCisJCQkgICAgaW50IGxlbmd0aCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJQ0FMTF9QREVCVUcoImVlcHJvbV93cml0ZV9jbWQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlQREVCVUcoImVlcHJvbV93cml0ZV9jbWQoKTpXcml0ZSBjb21tYW5kIDB4JTA4bFggd2l0aCBsZW5ndGggPSAlZFxuIiwKKwkgICAgICAgY21kLCBsZW5ndGgpOworCisJLyogR2V0IHRoZSBJQ1IgcmVnaXN0ZXIgYW5kIGNsZWFyIHRoZSByZWxhdGVkIGJpdHMgKi8KKwl2YWx1ZSA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl2YWx1ZSAmPSB+KFBMWF9JQ1JfTUFTS19FRVBST00pOworCW1lNDAwMF9vdXRsKHZhbHVlLCBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCisJLyogUmFpc2UgdGhlIGNoaXAgc2VsZWN0ICovCisJdmFsdWUgfD0gUExYX0lDUl9CSVRfRUVQUk9NX0NISVBfU0VMRUNUOworCW1lNDAwMF9vdXRsKHZhbHVlLCBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCXVkZWxheShFRVBST01fREVMQVkpOworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCWlmIChjbWQgJiAoKDB4MSA8PCAobGVuZ3RoIC0gMSkpID4+IGkpKSB7CisJCQl2YWx1ZSB8PSBQTFhfSUNSX0JJVF9FRVBST01fV1JJVEU7CisJCX0gZWxzZSB7CisJCQl2YWx1ZSAmPSB+UExYX0lDUl9CSVRfRUVQUk9NX1dSSVRFOworCQl9CisKKwkJLyogV3JpdGUgdG8gRUVQUk9NICovCisJCW1lNDAwMF9vdXRsKHZhbHVlLAorCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJCXVkZWxheShFRVBST01fREVMQVkpOworCisJCS8qIFJhaXNpbmcgZWRnZSBvZiB0aGUgY2xvY2sgKi8KKwkJdmFsdWUgfD0gUExYX0lDUl9CSVRfRUVQUk9NX0NMT0NLX1NFVDsKKwkJbWU0MDAwX291dGwodmFsdWUsCisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisKKwkJLyogRmFsbGluZyBlZGdlIG9mIHRoZSBjbG9jayAqLworCQl2YWx1ZSAmPSB+UExYX0lDUl9CSVRfRUVQUk9NX0NMT0NLX1NFVDsKKwkJbWU0MDAwX291dGwodmFsdWUsCisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisJfQorCisJLyogQ2xlYXIgdGhlIGNoaXAgc2VsZWN0ICovCisJdmFsdWUgJj0gflBMWF9JQ1JfQklUX0VFUFJPTV9DSElQX1NFTEVDVDsKKwltZTQwMDBfb3V0bCh2YWx1ZSwgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKworCS8qIFdhaXQgdW50aWwgaGFyZHdhcmUgaXMgcmVhZHkgZm9yIHN1cmUgKi8KKwltZGVsYXkoMTApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBlZXByb21fcmVhZF9jbWQobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBjbWQsIGludCBsZW5ndGgpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwl1bnNpZ25lZCBzaG9ydCBpZCA9IDA7CisKKwlDQUxMX1BERUJVRygiZWVwcm9tX3JlYWRfY21kKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJUERFQlVHKCJlZXByb21fcmVhZF9jbWQoKTpSZWFkIGNvbW1hbmQgMHglMDhsWCB3aXRoIGxlbmd0aCA9ICVkXG4iLCBjbWQsCisJICAgICAgIGxlbmd0aCk7CisKKwkvKiBHZXQgdGhlIElDUiByZWdpc3RlciBhbmQgY2xlYXIgdGhlIHJlbGF0ZWQgYml0cyAqLworCXZhbHVlID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCXZhbHVlICY9IH4oUExYX0lDUl9NQVNLX0VFUFJPTSk7CisKKwltZTQwMDBfb3V0bCh2YWx1ZSwgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKworCS8qIFJhaXNlIHRoZSBjaGlwIHNlbGVjdCAqLworCXZhbHVlIHw9IFBMWF9JQ1JfQklUX0VFUFJPTV9DSElQX1NFTEVDVDsKKwltZTQwMDBfb3V0bCh2YWx1ZSwgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKworCS8qIFdyaXRlIHRoZSByZWFkIGNvbW1hbmQgdG8gdGhlIGVlcHJvbSAqLworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQlpZiAoY21kICYgKCgweDEgPDwgKGxlbmd0aCAtIDEpKSA+PiBpKSkgeworCQkJdmFsdWUgfD0gUExYX0lDUl9CSVRfRUVQUk9NX1dSSVRFOworCQl9IGVsc2UgeworCQkJdmFsdWUgJj0gflBMWF9JQ1JfQklUX0VFUFJPTV9XUklURTsKKwkJfQorCQltZTQwMDBfb3V0bCh2YWx1ZSwKKwkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCQl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKworCQkvKiBSYWlzaW5nIGVkZ2Ugb2YgdGhlIGNsb2NrICovCisJCXZhbHVlIHw9IFBMWF9JQ1JfQklUX0VFUFJPTV9DTE9DS19TRVQ7CisJCW1lNDAwMF9vdXRsKHZhbHVlLAorCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJCXVkZWxheShFRVBST01fREVMQVkpOworCisJCS8qIEZhbGxpbmcgZWRnZSBvZiB0aGUgY2xvY2sgKi8KKwkJdmFsdWUgJj0gflBMWF9JQ1JfQklUX0VFUFJPTV9DTE9DS19TRVQ7CisJCW1lNDAwMF9vdXRsKHZhbHVlLAorCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJCXVkZWxheShFRVBST01fREVMQVkpOworCX0KKworCS8qIFJlYWQgdGhlIHZhbHVlIGZyb20gdGhlIGVlcHJvbSAqLworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCS8qIFJhaXNpbmcgZWRnZSBvZiB0aGUgY2xvY2sgKi8KKwkJdmFsdWUgfD0gUExYX0lDUl9CSVRfRUVQUk9NX0NMT0NLX1NFVDsKKwkJbWU0MDAwX291dGwodmFsdWUsCisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisKKwkJaWYgKG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKSAmCisJCSAgICBQTFhfSUNSX0JJVF9FRVBST01fUkVBRCkgeworCQkJaWQgfD0gKDB4ODAwMCA+PiBpKTsKKwkJCVBERUJVRygiZWVwcm9tX3JlYWRfY21kKCk6T1Igd2l0aCAweCUwNFhcbiIsCisJCQkgICAgICAgKDB4ODAwMCA+PiBpKSk7CisJCX0gZWxzZSB7CisJCQlQREVCVUcoImVlcHJvbV9yZWFkX2NtZCgpOkRvbnQndCBPUlxuIik7CisJCX0KKworCQkvKiBGYWxsaW5nIGVkZ2Ugb2YgdGhlIGNsb2NrICovCisJCXZhbHVlICY9IH5QTFhfSUNSX0JJVF9FRVBST01fQ0xPQ0tfU0VUOworCQltZTQwMDBfb3V0bCh2YWx1ZSwKKwkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCQl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKwl9CisKKwkvKiBDbGVhciB0aGUgY2hpcCBzZWxlY3QgKi8KKwl2YWx1ZSAmPSB+UExYX0lDUl9CSVRfRUVQUk9NX0NISVBfU0VMRUNUOworCW1lNDAwMF9vdXRsKHZhbHVlLCBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCXVkZWxheShFRVBST01fREVMQVkpOworCisJcmV0dXJuIGlkOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9lZXByb21fd3JpdGUobWU0MDAwX2VlcHJvbV90ICogYXJnLAorCQkJICAgICAgIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCWludCBlcnI7CisJbWU0MDAwX2VlcHJvbV90IHNldHVwOworCXVuc2lnbmVkIGxvbmcgY21kOworCXVuc2lnbmVkIGxvbmcgZGF0ZV9oaWdoOworCXVuc2lnbmVkIGxvbmcgZGF0ZV9sb3c7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2VlcHJvbV93cml0ZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZzZXR1cCwgYXJnLCBzaXplb2Yoc2V0dXApKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZWVwcm9tX3dyaXRlKCk6Q2Fubm90IGNvcHkgZnJvbSB1c2VyXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBFbmFibGUgd3JpdGluZyAqLworCWVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEVfRU5BQkxFLAorCQkJIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURV9FTkFCTEUpOworCisJLyogQ29tbWFuZCBmb3IgZGF0ZSAqLworCWRhdGVfaGlnaCA9IChzZXR1cC5kYXRlICYgMHhGRkZGMDAwMCkgPj4gMTY7CisJZGF0ZV9sb3cgPSAoc2V0dXAuZGF0ZSAmIDB4MDAwMEZGRkYpOworCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfREFURV9ISUdIIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgZGF0ZV9oaWdoKTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfREFURV9MT1cgPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBkYXRlX2xvdyk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIHVuaXBvbGFyIDEwViBvZmZzZXQgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfVU5JX09GRlNFVCA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIHNldHVwLgorCQkJCQkJCQkgICAgIHVuaV8xMF9vZmZzZXQpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciB1bmlwb2xhciAxMFYgZnVsbHNjYWxlICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX1VOSV9GVUxMU0NBTEUgPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBzZXR1cC4KKwkJCQkJCQkJICAgICB1bmlfMTBfZnVsbHNjYWxlKTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgdW5pcG9sYXIgMiw1ViBvZmZzZXQgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfVU5JX09GRlNFVCA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIHNldHVwLgorCQkJCQkJCQkgICAgIHVuaV8yXzVfb2Zmc2V0KTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgdW5pcG9sYXIgMiw1ViBmdWxsc2NhbGUgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfVU5JX0ZVTExTQ0FMRSA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIHNldHVwLgorCQkJCQkJCQkgICAgIHVuaV8yXzVfZnVsbHNjYWxlKTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgYmlwb2xhciAxMFYgb2Zmc2V0ICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0JJX09GRlNFVCA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIHNldHVwLgorCQkJCQkJCQkgICAgIGJpXzEwX29mZnNldCk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIGJpcG9sYXIgMTBWIGZ1bGxzY2FsZSAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9CSV9GVUxMU0NBTEUgPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBzZXR1cC4KKwkJCQkJCQkJICAgICBiaV8xMF9mdWxsc2NhbGUpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciBiaXBvbGFyIDIsNVYgb2Zmc2V0ICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0JJX09GRlNFVCA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIHNldHVwLgorCQkJCQkJCQkgICAgIGJpXzJfNV9vZmZzZXQpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciBiaXBvbGFyIDIsNVYgZnVsbHNjYWxlICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0JJX0ZVTExTQ0FMRSA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIHNldHVwLgorCQkJCQkJCQkgICAgIGJpXzJfNV9mdWxsc2NhbGUpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciBkaWZmZXJlbnRpYWwgMTBWIG9mZnNldCAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9ESUZGX09GRlNFVCA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIHNldHVwLgorCQkJCQkJCQkgICAgIGRpZmZfMTBfb2Zmc2V0KTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgZGlmZmVyZW50aWFsIDEwViBmdWxsc2NhbGUgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfRElGRl9GVUxMU0NBTEUKKwkJCQkgICAgICAgPDwgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJCSh1bnNpZ25lZAorCQkJCQkJCQkJIGxvbmcpCisJCQkJCQkJCQlzZXR1cC4KKwkJCQkJCQkJCWRpZmZfMTBfZnVsbHNjYWxlKTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgZGlmZmVyZW50aWFsIDIsNVYgb2Zmc2V0ICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0RJRkZfT0ZGU0VUIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgZGlmZl8yXzVfb2Zmc2V0KTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgZGlmZmVyZW50aWFsIDIsNVYgZnVsbHNjYWxlICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0RJRkZfRlVMTFNDQUxFCisJCQkJICAgICAgIDw8IE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCQkodW5zaWduZWQKKwkJCQkJCQkJCSBsb25nKQorCQkJCQkJCQkJc2V0dXAuCisJCQkJCQkJCQlkaWZmXzJfNV9mdWxsc2NhbGUpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBEaXNhYmxlIHdyaXRpbmcgKi8KKwllZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFX0RJU0FCTEUsCisJCQkgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFX0RJU0FCTEUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2VlcHJvbV9yZWFkKG1lNDAwMF9lZXByb21fdCAqIGFyZywKKwkJCSAgICAgIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBjbWQ7CisJbWU0MDAwX2VlcHJvbV90IHNldHVwOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9lZXByb21fcmVhZCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENvbW1hbmQgZm9yIGRhdGUgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfREFURV9ISUdIOworCXNldHVwLmRhdGUgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisJc2V0dXAuZGF0ZSA8PD0gMTY7CisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0RBVEVfTE9XOworCXNldHVwLmRhdGUgfD0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgdW5pcG9sYXIgMTBWIG9mZnNldCAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfVU5JX09GRlNFVDsKKwlzZXR1cC51bmlfMTBfb2Zmc2V0ID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgdW5pcG9sYXIgMTBWIGZ1bGxzY2FsZSAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfVU5JX0ZVTExTQ0FMRTsKKwlzZXR1cC51bmlfMTBfZnVsbHNjYWxlID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgdW5pcG9sYXIgMiw1ViBvZmZzZXQgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X1VOSV9PRkZTRVQ7CisJc2V0dXAudW5pXzJfNV9vZmZzZXQgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciB1bmlwb2xhciAyLDVWIGZ1bGxzY2FsZSAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfVU5JX0ZVTExTQ0FMRTsKKwlzZXR1cC51bmlfMl81X2Z1bGxzY2FsZSA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIGJpcG9sYXIgMTBWIG9mZnNldCAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfQklfT0ZGU0VUOworCXNldHVwLmJpXzEwX29mZnNldCA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIGJpcG9sYXIgMTBWIGZ1bGxzY2FsZSAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfQklfRlVMTFNDQUxFOworCXNldHVwLmJpXzEwX2Z1bGxzY2FsZSA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIGJpcG9sYXIgMiw1ViBvZmZzZXQgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0JJX09GRlNFVDsKKwlzZXR1cC5iaV8yXzVfb2Zmc2V0ID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgYmlwb2xhciAyLDVWIGZ1bGxzY2FsZSAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfQklfRlVMTFNDQUxFOworCXNldHVwLmJpXzJfNV9mdWxsc2NhbGUgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciBkaWZmZXJudGlhbCAxMFYgb2Zmc2V0ICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9ESUZGX09GRlNFVDsKKwlzZXR1cC5kaWZmXzEwX29mZnNldCA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIGRpZmZlcmVudGlhbCAxMFYgZnVsbHNjYWxlICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9ESUZGX0ZVTExTQ0FMRTsKKwlzZXR1cC5kaWZmXzEwX2Z1bGxzY2FsZSA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIGRpZmZlcm50aWFsIDIsNVYgb2Zmc2V0ICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9ESUZGX09GRlNFVDsKKwlzZXR1cC5kaWZmXzJfNV9vZmZzZXQgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciBkaWZmZXJlbnRpYWwgMiw1ViBmdWxsc2NhbGUgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0RJRkZfRlVMTFNDQUxFOworCXNldHVwLmRpZmZfMl81X2Z1bGxzY2FsZSA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCWVyciA9IGNvcHlfdG9fdXNlcihhcmcsICZzZXR1cCwgc2l6ZW9mKHNldHVwKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2VlcHJvbV9yZWFkKCk6Q2Fubm90IGNvcHkgdG8gdXNlclxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERJTyBzdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBtZTQwMDBfZGlvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbWU0MDAwX2Rpb19jb250ZXh0X3QgKmRpb19jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9kaW9faW9jdGwoKSBpcyBleGVjdXRlZFxuIik7CisKKwlkaW9fY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKF9JT0NfVFlQRShzZXJ2aWNlKSAhPSBNRTQwMDBfTUFHSUMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfZGlvX2lvY3RsKCk6V3JvbmcgbWFnaWMgbnVtYmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCWlmIChfSU9DX05SKHNlcnZpY2UpID4gTUU0MDAwX0lPQ1RMX01BWE5SKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2Rpb19pb2N0bCgpOlNlcnZpY2UgbnVtYmVyIHRvIGhpZ2hcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlzd2l0Y2ggKHNlcnZpY2UpIHsKKwljYXNlIE1FNDAwMF9ESU9fQ09ORklHOgorCQlyZXR1cm4gbWU0MDAwX2Rpb19jb25maWcoKG1lNDAwMF9kaW9fY29uZmlnX3QgKikgYXJnLAorCQkJCQkgZGlvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0RJT19TRVRfQllURToKKwkJcmV0dXJuIG1lNDAwMF9kaW9fc2V0X2J5dGUoKG1lNDAwMF9kaW9fYnl0ZV90ICopIGFyZywKKwkJCQkJICAgZGlvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0RJT19HRVRfQllURToKKwkJcmV0dXJuIG1lNDAwMF9kaW9fZ2V0X2J5dGUoKG1lNDAwMF9kaW9fYnl0ZV90ICopIGFyZywKKwkJCQkJICAgZGlvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0RJT19SRVNFVDoKKwkJcmV0dXJuIG1lNDAwMF9kaW9fcmVzZXQoZGlvX2NvbnRleHQpOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2lvY3RsKCk6SW52YWxpZCBzZXJ2aWNlIG51bWJlciAlZFxuIiwKKwkJICAgICAgIHNlcnZpY2UpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19jb25maWcobWU0MDAwX2Rpb19jb25maWdfdCAqIGFyZywKKwkJCSAgICAgbWU0MDAwX2Rpb19jb250ZXh0X3QgKiBkaW9fY29udGV4dCkKK3sKKwltZTQwMDBfZGlvX2NvbmZpZ190IGNtZDsKKwl1MzIgdG1wOworCWludCBlcnI7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2Rpb19jb25maWcoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2YobWU0MDAwX2Rpb19jb25maWdfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6Q2FuJ3QgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBDaGVjayBwb3J0IHBhcmFtZXRlciAqLworCWlmIChjbWQucG9ydCA+PSBkaW9fY29udGV4dC0+ZGlvX2NvdW50KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOlBvcnQgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5wb3J0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJUERFQlVHKCJtZTQwMDBfZGlvX2NvbmZpZygpOiBwb3J0ICVkLCBtb2RlICVkLCBmdW5jdGlvbiAlZFxuIiwgY21kLnBvcnQsCisJICAgICAgIGNtZC5tb2RlLCBjbWQuZnVuY3Rpb24pOworCisJaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9BKSB7CisJCWlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX1BPUlRfSU5QVVQpIHsKKwkJCS8qIENoZWNrIGlmIG9wdG8gaXNvbGF0ZWQgdmVyc2lvbiAqLworCQkJaWYgKCEobWU0MDAwX2lubChkaW9fY29udGV4dC0+ZGlyX3JlZykgJiAweDEpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpDYW5ub3Qgc2V0IHRvIGlucHV0IG9uIG9wdG8gaXNvbGF0ZWQgdmVyc2lvbnNcbiIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8wIHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8xKTsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX1BPUlRfT1VUUFVUKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8wIHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8xKTsKKwkJCXRtcCB8PSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMDsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX0ZJRk9fTE9XKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8wIHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8xIHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzApOworCQkJdG1wIHw9CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzAgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8xOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19ISUdIKSB7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMCB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzEgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzA7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6TW9kZSAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkJICAgICAgIGNtZC5tb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfQikgeworCQlpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19QT1JUX0lOUFVUKSB7CisJCQkvKiBPbmx5IGRvIGFueXRoaW5nIHdoZW4gVFRMIHZlcnNpb24gaXMgaW5zdGFsbGVkICovCisJCQlpZiAoKG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmRpcl9yZWcpICYgMHgxKSkgeworCQkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCQl0bXAgJj0KKwkJCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMiB8CisJCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzMpOworCQkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX1BPUlRfT1VUUFVUKSB7CisJCQkvKiBDaGVjayBpZiBvcHRvIGlzb2xhdGVkIHZlcnNpb24gKi8KKwkJCWlmICghKG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmRpcl9yZWcpICYgMHgxKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6Q2Fubm90IHNldCB0byBvdXRwdXQgb24gb3B0byBpc29sYXRlZCB2ZXJzaW9uc1xuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzIgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzMpOworCQkJdG1wIHw9IE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8yOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19MT1cpIHsKKwkJCS8qIENoZWNrIGlmIG9wdG8gaXNvbGF0ZWQgdmVyc2lvbiAqLworCQkJaWYgKCEobWU0MDAwX2lubChkaW9fY29udGV4dC0+ZGlyX3JlZykgJiAweDEpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpDYW5ub3Qgc2V0IHRvIEZJRk8gbG93IG91dHB1dCBvbiBvcHRvIGlzb2xhdGVkIHZlcnNpb25zXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wICY9CisJCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMiB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMyB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX0ZJRk9fSElHSF8xKTsKKwkJCXRtcCB8PQorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8yIHwKKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMzsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX0ZJRk9fSElHSCkgeworCQkJLyogQ2hlY2sgaWYgb3B0byBpc29sYXRlZCB2ZXJzaW9uICovCisJCQlpZiAoIShtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5kaXJfcmVnKSAmIDB4MSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOkNhbm5vdCBzZXQgdG8gRklGTyBoaWdoIG91dHB1dCBvbiBvcHRvIGlzb2xhdGVkIHZlcnNpb25zXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wIHw9CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzIgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8zIHwKKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX0ZJRk9fSElHSF8xOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOk1vZGUgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJCSAgICAgICBjbWQubW9kZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSBpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0MpIHsKKwkJaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fUE9SVF9JTlBVVCkgeworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wICY9CisJCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNCB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNSk7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19QT1JUX09VVFBVVCkgeworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wICY9CisJCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNCB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNSk7CisJCQl0bXAgfD0gTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzQ7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19GSUZPX0xPVykgeworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wICY9CisJCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNCB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNSB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX0ZJRk9fSElHSF8yKTsKKwkJCXRtcCB8PQorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV80IHwKKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNTsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX0ZJRk9fSElHSCkgeworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wIHw9CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzQgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV81IHwKKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX0ZJRk9fSElHSF8yOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOk1vZGUgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJCSAgICAgICBjbWQubW9kZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSBpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0QpIHsKKwkJaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fUE9SVF9JTlBVVCkgeworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wICY9CisJCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNiB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNyk7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19QT1JUX09VVFBVVCkgeworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wICY9CisJCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNiB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNyk7CisJCQl0bXAgfD0gTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzY7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19GSUZPX0xPVykgeworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wICY9CisJCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNiB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNyB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX0ZJRk9fSElHSF8zKTsKKwkJCXRtcCB8PQorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV82IHwKKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNzsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX0ZJRk9fSElHSCkgeworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wIHw9CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzYgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV83IHwKKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX0ZJRk9fSElHSF8zOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOk1vZGUgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJCSAgICAgICBjbWQubW9kZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOlBvcnQgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5wb3J0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJUERFQlVHKCJtZTQwMDBfZGlvX2NvbmZpZygpOiBwb3J0ICVkLCBtb2RlICVkLCBmdW5jdGlvbiAlZFxuIiwgY21kLnBvcnQsCisJICAgICAgIGNtZC5tb2RlLCBjbWQuZnVuY3Rpb24pOworCisJaWYgKChjbWQubW9kZSA9PSBNRTQwMDBfRElPX0ZJRk9fSElHSCkKKwkgICAgfHwgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19MT1cpKSB7CisJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wICY9CisJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfRlVOQ1RJT05fMCB8CisJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRlVOQ1RJT05fMSk7CisJCWlmIChjbWQuZnVuY3Rpb24gPT0gTUU0MDAwX0RJT19GVU5DVElPTl9QQVRURVJOKSB7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLmZ1bmN0aW9uID09IE1FNDAwMF9ESU9fRlVOQ1RJT05fREVNVVgpIHsKKwkJCXRtcCB8PSBNRTQwMDBfRElPX0NUUkxfQklUX0ZVTkNUSU9OXzA7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLmZ1bmN0aW9uID09IE1FNDAwMF9ESU9fRlVOQ1RJT05fTVVYKSB7CisJCQl0bXAgfD0gTUU0MDAwX0RJT19DVFJMX0JJVF9GVU5DVElPTl8xOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOkludmFsaWQgcG9ydCBmdW5jdGlvbiBzcGVjaWZpZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZGlvX3NldF9ieXRlKG1lNDAwMF9kaW9fYnl0ZV90ICogYXJnLAorCQkJICAgICAgIG1lNDAwMF9kaW9fY29udGV4dF90ICogZGlvX2NvbnRleHQpCit7CisJbWU0MDAwX2Rpb19ieXRlX3QgY21kOworCWludCBlcnI7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2Rpb19zZXRfYnl0ZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmY21kLCBhcmcsIHNpemVvZihtZTQwMDBfZGlvX2J5dGVfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fc2V0X2J5dGUoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIENoZWNrIHBvcnQgcGFyYW1ldGVyICovCisJaWYgKGNtZC5wb3J0ID49IGRpb19jb250ZXh0LT5kaW9fY291bnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fc2V0X2J5dGUoKTpQb3J0ICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICAgICBjbWQucG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfQSkgeworCQlpZiAoKG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKSAmIDB4MykgIT0gMHgxKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fc2V0X2J5dGUoKTpQb3J0ICVkIGlzIG5vdCBpbiBvdXRwdXQgbW9kZVxuIiwKKwkJCSAgICAgICBjbWQucG9ydCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQltZTQwMDBfb3V0bChjbWQuYnl0ZSwgZGlvX2NvbnRleHQtPnBvcnRfMF9yZWcpOworCX0gZWxzZSBpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0IpIHsKKwkJaWYgKChtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZykgJiAweEMpICE9IDB4NCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX3NldF9ieXRlKCk6UG9ydCAlZCBpcyBub3QgaW4gb3V0cHV0IG1vZGVcbiIsCisJCQkgICAgICAgY21kLnBvcnQpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJbWU0MDAwX291dGwoY21kLmJ5dGUsIGRpb19jb250ZXh0LT5wb3J0XzFfcmVnKTsKKwl9IGVsc2UgaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9DKSB7CisJCWlmICgobWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpICYgMHgzMCkgIT0gMHgxMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX3NldF9ieXRlKCk6UG9ydCAlZCBpcyBub3QgaW4gb3V0cHV0IG1vZGVcbiIsCisJCQkgICAgICAgY21kLnBvcnQpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJbWU0MDAwX291dGwoY21kLmJ5dGUsIGRpb19jb250ZXh0LT5wb3J0XzJfcmVnKTsKKwl9IGVsc2UgaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9EKSB7CisJCWlmICgobWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpICYgMHhDMCkgIT0gMHg0MCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX3NldF9ieXRlKCk6UG9ydCAlZCBpcyBub3QgaW4gb3V0cHV0IG1vZGVcbiIsCisJCQkgICAgICAgY21kLnBvcnQpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJbWU0MDAwX291dGwoY21kLmJ5dGUsIGRpb19jb250ZXh0LT5wb3J0XzNfcmVnKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19zZXRfYnl0ZSgpOlBvcnQgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5wb3J0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19nZXRfYnl0ZShtZTQwMDBfZGlvX2J5dGVfdCAqIGFyZywKKwkJCSAgICAgICBtZTQwMDBfZGlvX2NvbnRleHRfdCAqIGRpb19jb250ZXh0KQoreworCW1lNDAwMF9kaW9fYnl0ZV90IGNtZDsKKwlpbnQgZXJyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9kaW9fZ2V0X2J5dGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2YobWU0MDAwX2Rpb19ieXRlX3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2dldF9ieXRlKCk6Q2FuJ3QgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBDaGVjayBwb3J0IHBhcmFtZXRlciAqLworCWlmIChjbWQucG9ydCA+PSBkaW9fY29udGV4dC0+ZGlvX2NvdW50KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2dldF9ieXRlKCk6UG9ydCAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgY21kLnBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0EpIHsKKwkJY21kLmJ5dGUgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5wb3J0XzBfcmVnKSAmIDB4RkY7CisJfSBlbHNlIGlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfQikgeworCQljbWQuYnl0ZSA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPnBvcnRfMV9yZWcpICYgMHhGRjsKKwl9IGVsc2UgaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9DKSB7CisJCWNtZC5ieXRlID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+cG9ydF8yX3JlZykgJiAweEZGOworCX0gZWxzZSBpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0QpIHsKKwkJY21kLmJ5dGUgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5wb3J0XzNfcmVnKSAmIDB4RkY7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fZ2V0X2J5dGUoKTpQb3J0ICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICAgICBjbWQucG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENvcHkgcmVzdWx0IGJhY2sgdG8gdXNlciAqLworCWVyciA9IGNvcHlfdG9fdXNlcihhcmcsICZjbWQsIHNpemVvZihtZTQwMDBfZGlvX2J5dGVfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fZ2V0X2J5dGUoKTpDYW4ndCBjb3B5IHRvIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZGlvX3Jlc2V0KG1lNDAwMF9kaW9fY29udGV4dF90ICogZGlvX2NvbnRleHQpCit7CisJQ0FMTF9QREVCVUcoIm1lNDAwMF9kaW9fcmVzZXQoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDbGVhciB0aGUgY29udHJvbCByZWdpc3RlciAqLworCW1lNDAwMF9vdXRsKDAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkvKiBDaGVjayBmb3Igb3B0byBpc29sYXRlZCB2ZXJzaW9uICovCisJaWYgKCEobWU0MDAwX2lubChkaW9fY29udGV4dC0+ZGlyX3JlZykgJiAweDEpKSB7CisJCW1lNDAwMF9vdXRsKDB4MSwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJbWU0MDAwX291dGwoMHgwLCBkaW9fY29udGV4dC0+cG9ydF8wX3JlZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENPVU5URVIgU1RVRkYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBtZTQwMDBfY250X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbWU0MDAwX2NudF9jb250ZXh0X3QgKmNudF9jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9jbnRfaW9jdGwoKSBpcyBleGVjdXRlZFxuIik7CisKKwljbnRfY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKF9JT0NfVFlQRShzZXJ2aWNlKSAhPSBNRTQwMDBfTUFHSUMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfZGlvX2lvY3RsKCk6V3JvbmcgbWFnaWMgbnVtYmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCWlmIChfSU9DX05SKHNlcnZpY2UpID4gTUU0MDAwX0lPQ1RMX01BWE5SKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2Rpb19pb2N0bCgpOlNlcnZpY2UgbnVtYmVyIHRvIGhpZ2hcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlzd2l0Y2ggKHNlcnZpY2UpIHsKKwljYXNlIE1FNDAwMF9DTlRfUkVBRDoKKwkJcmV0dXJuIG1lNDAwMF9jbnRfcmVhZCgobWU0MDAwX2NudF90ICopIGFyZywgY250X2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0NOVF9XUklURToKKwkJcmV0dXJuIG1lNDAwMF9jbnRfd3JpdGUoKG1lNDAwMF9jbnRfdCAqKSBhcmcsIGNudF9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9DTlRfQ09ORklHOgorCQlyZXR1cm4gbWU0MDAwX2NudF9jb25maWcoKG1lNDAwMF9jbnRfY29uZmlnX3QgKikgYXJnLAorCQkJCQkgY250X2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0NOVF9SRVNFVDoKKwkJcmV0dXJuIG1lNDAwMF9jbnRfcmVzZXQoY250X2NvbnRleHQpOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2lvY3RsKCk6SW52YWxpZCBzZXJ2aWNlIG51bWJlciAlZFxuIiwKKwkJICAgICAgIHNlcnZpY2UpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9jb25maWcobWU0MDAwX2NudF9jb25maWdfdCAqIGFyZywKKwkJCSAgICAgbWU0MDAwX2NudF9jb250ZXh0X3QgKiBjbnRfY29udGV4dCkKK3sKKwltZTQwMDBfY250X2NvbmZpZ190IGNtZDsKKwl1OCBjb3VudGVyOworCXU4IG1vZGU7CisJaW50IGVycjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfY250X2NvbmZpZygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmY21kLCBhcmcsIHNpemVvZihtZTQwMDBfY250X2NvbmZpZ190KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2NudF9jb25maWcoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIENoZWNrIGNvdW50ZXIgcGFyYW1ldGVyICovCisJc3dpdGNoIChjbWQuY291bnRlcikgeworCWNhc2UgTUU0MDAwX0NOVF9DT1VOVEVSXzA6CisJCWNvdW50ZXIgPSBNRTQwMDBfQ05UX0NUUkxfQklUX0NPVU5URVJfMDsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX0NPVU5URVJfMToKKwkJY291bnRlciA9IE1FNDAwMF9DTlRfQ1RSTF9CSVRfQ09VTlRFUl8xOworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8yOgorCQljb3VudGVyID0gTUU0MDAwX0NOVF9DVFJMX0JJVF9DT1VOVEVSXzI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfY250X2NvbmZpZygpOkNvdW50ZXIgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5jb3VudGVyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2hlY2sgbW9kZSBwYXJhbWV0ZXIgKi8KKwlzd2l0Y2ggKGNtZC5tb2RlKSB7CisJY2FzZSBNRTQwMDBfQ05UX01PREVfMDoKKwkJbW9kZSA9IE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV8wOworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfTU9ERV8xOgorCQltb2RlID0gTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzE7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9NT0RFXzI6CisJCW1vZGUgPSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfMjsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX01PREVfMzoKKwkJbW9kZSA9IE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV8zOworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfTU9ERV80OgorCQltb2RlID0gTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzQ7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9NT0RFXzU6CisJCW1vZGUgPSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9jbnRfY29uZmlnKCk6TW9kZSAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgY21kLm1vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBXcml0ZSB0aGUgY29udHJvbCB3b3JkICovCisJbWU0MDAwX291dGIoKGNvdW50ZXIgfCBtb2RlIHwgMHgzMCksIGNudF9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfY250X3JlYWQobWU0MDAwX2NudF90ICogYXJnLAorCQkJICAgbWU0MDAwX2NudF9jb250ZXh0X3QgKiBjbnRfY29udGV4dCkKK3sKKwltZTQwMDBfY250X3QgY21kOworCXU4IHRtcDsKKwlpbnQgZXJyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9jbnRfcmVhZCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENvcHkgZGF0YSBmcm9tIHVzZXIgKi8KKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmY21kLCBhcmcsIHNpemVvZihtZTQwMDBfY250X3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfY250X3JlYWQoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIFJlYWQgY291bnRlciAqLworCXN3aXRjaCAoY21kLmNvdW50ZXIpIHsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8wOgorCQl0bXAgPSBtZTQwMDBfaW5iKGNudF9jb250ZXh0LT5jb3VudGVyXzBfcmVnKTsKKwkJY21kLnZhbHVlID0gdG1wOworCQl0bXAgPSBtZTQwMDBfaW5iKGNudF9jb250ZXh0LT5jb3VudGVyXzBfcmVnKTsKKwkJY21kLnZhbHVlIHw9ICgodTE2KSB0bXApIDw8IDg7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9DT1VOVEVSXzE6CisJCXRtcCA9IG1lNDAwMF9pbmIoY250X2NvbnRleHQtPmNvdW50ZXJfMV9yZWcpOworCQljbWQudmFsdWUgPSB0bXA7CisJCXRtcCA9IG1lNDAwMF9pbmIoY250X2NvbnRleHQtPmNvdW50ZXJfMV9yZWcpOworCQljbWQudmFsdWUgfD0gKCh1MTYpIHRtcCkgPDwgODsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX0NPVU5URVJfMjoKKwkJdG1wID0gbWU0MDAwX2luYihjbnRfY29udGV4dC0+Y291bnRlcl8yX3JlZyk7CisJCWNtZC52YWx1ZSA9IHRtcDsKKwkJdG1wID0gbWU0MDAwX2luYihjbnRfY29udGV4dC0+Y291bnRlcl8yX3JlZyk7CisJCWNtZC52YWx1ZSB8PSAoKHUxNikgdG1wKSA8PCA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2NudF9yZWFkKCk6Q291bnRlciAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgY21kLmNvdW50ZXIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDb3B5IHJlc3VsdCBiYWNrIHRvIHVzZXIgKi8KKwllcnIgPSBjb3B5X3RvX3VzZXIoYXJnLCAmY21kLCBzaXplb2YobWU0MDAwX2NudF90KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2NudF9yZWFkKCk6Q2FuJ3QgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF93cml0ZShtZTQwMDBfY250X3QgKiBhcmcsCisJCQkgICAgbWU0MDAwX2NudF9jb250ZXh0X3QgKiBjbnRfY29udGV4dCkKK3sKKwltZTQwMDBfY250X3QgY21kOworCXU4IHRtcDsKKwlpbnQgZXJyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9jbnRfd3JpdGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2YobWU0MDAwX2NudF90KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2NudF93cml0ZSgpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogV3JpdGUgY291bnRlciAqLworCXN3aXRjaCAoY21kLmNvdW50ZXIpIHsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8wOgorCQl0bXAgPSBjbWQudmFsdWUgJiAweEZGOworCQltZTQwMDBfb3V0Yih0bXAsIGNudF9jb250ZXh0LT5jb3VudGVyXzBfcmVnKTsKKwkJdG1wID0gKGNtZC52YWx1ZSA+PiA4KSAmIDB4RkY7CisJCW1lNDAwMF9vdXRiKHRtcCwgY250X2NvbnRleHQtPmNvdW50ZXJfMF9yZWcpOworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8xOgorCQl0bXAgPSBjbWQudmFsdWUgJiAweEZGOworCQltZTQwMDBfb3V0Yih0bXAsIGNudF9jb250ZXh0LT5jb3VudGVyXzFfcmVnKTsKKwkJdG1wID0gKGNtZC52YWx1ZSA+PiA4KSAmIDB4RkY7CisJCW1lNDAwMF9vdXRiKHRtcCwgY250X2NvbnRleHQtPmNvdW50ZXJfMV9yZWcpOworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8yOgorCQl0bXAgPSBjbWQudmFsdWUgJiAweEZGOworCQltZTQwMDBfb3V0Yih0bXAsIGNudF9jb250ZXh0LT5jb3VudGVyXzJfcmVnKTsKKwkJdG1wID0gKGNtZC52YWx1ZSA+PiA4KSAmIDB4RkY7CisJCW1lNDAwMF9vdXRiKHRtcCwgY250X2NvbnRleHQtPmNvdW50ZXJfMl9yZWcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2NudF93cml0ZSgpOkNvdW50ZXIgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5jb3VudGVyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9yZXNldChtZTQwMDBfY250X2NvbnRleHRfdCAqIGNudF9jb250ZXh0KQoreworCUNBTExfUERFQlVHKCJtZTQwMDBfY250X3Jlc2V0KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogU2V0IHRoZSBtb2RlIGFuZCB2YWx1ZSBmb3IgY291bnRlciAwICovCisJbWU0MDAwX291dGIoMHgzMCwgY250X2NvbnRleHQtPmN0cmxfcmVnKTsKKwltZTQwMDBfb3V0YigweDAwLCBjbnRfY29udGV4dC0+Y291bnRlcl8wX3JlZyk7CisJbWU0MDAwX291dGIoMHgwMCwgY250X2NvbnRleHQtPmNvdW50ZXJfMF9yZWcpOworCisJLyogU2V0IHRoZSBtb2RlIGFuZCB2YWx1ZSBmb3IgY291bnRlciAxICovCisJbWU0MDAwX291dGIoMHg3MCwgY250X2NvbnRleHQtPmN0cmxfcmVnKTsKKwltZTQwMDBfb3V0YigweDAwLCBjbnRfY29udGV4dC0+Y291bnRlcl8xX3JlZyk7CisJbWU0MDAwX291dGIoMHgwMCwgY250X2NvbnRleHQtPmNvdW50ZXJfMV9yZWcpOworCisJLyogU2V0IHRoZSBtb2RlIGFuZCB2YWx1ZSBmb3IgY291bnRlciAyICovCisJbWU0MDAwX291dGIoMHhCMCwgY250X2NvbnRleHQtPmN0cmxfcmVnKTsKKwltZTQwMDBfb3V0YigweDAwLCBjbnRfY29udGV4dC0+Y291bnRlcl8yX3JlZyk7CisJbWU0MDAwX291dGIoMHgwMCwgY250X2NvbnRleHQtPmNvdW50ZXJfMl9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEV4dGVybmFsIEludGVycnVwdCBzdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG1lNDAwMF9leHRfaW50X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCwKKwkJCQl1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbWU0MDAwX2V4dF9pbnRfY29udGV4dF90ICpleHRfaW50X2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2V4dF9pbnRfaW9jdGwoKSBpcyBleGVjdXRlZFxuIik7CisKKwlleHRfaW50X2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2V4dF9pbnRfaW9jdGwoKTpXcm9uZyBtYWdpYyBudW1iZXJcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJaWYgKF9JT0NfTlIoc2VydmljZSkgPiBNRTQwMDBfSU9DVExfTUFYTlIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2V4dF9pbnRfaW9jdGwoKTpTZXJ2aWNlIG51bWJlciB0byBoaWdoXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJc3dpdGNoIChzZXJ2aWNlKSB7CisJY2FzZSBNRTQwMDBfRVhUX0lOVF9FTkFCTEU6CisJCXJldHVybiBtZTQwMDBfZXh0X2ludF9lbmFibGUoZXh0X2ludF9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9FWFRfSU5UX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfZXh0X2ludF9kaXNhYmxlKGV4dF9pbnRfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfRVhUX0lOVF9DT1VOVDoKKwkJcmV0dXJuIG1lNDAwMF9leHRfaW50X2NvdW50KCh1bnNpZ25lZCBsb25nICopYXJnLAorCQkJCQkgICAgZXh0X2ludF9jb250ZXh0KTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2V4dF9pbnRfaW9jdGwoKTpJbnZhbGlkIHNlcnZpY2UgbnVtYmVyICVkXG4iLAorCQkgICAgICAgc2VydmljZSk7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9lbmFibGUobWU0MDAwX2V4dF9pbnRfY29udGV4dF90ICogZXh0X2ludF9jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9leHRfaW50X2VuYWJsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXRtcCA9IG1lNDAwMF9pbmwoZXh0X2ludF9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9JUlE7CisJbWU0MDAwX291dGwodG1wLCBleHRfaW50X2NvbnRleHQtPmN0cmxfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9leHRfaW50X2Rpc2FibGUobWU0MDAwX2V4dF9pbnRfY29udGV4dF90ICogZXh0X2ludF9jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9leHRfaW50X2Rpc2FibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwl0bXAgPSBtZTQwMDBfaW5sKGV4dF9pbnRfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX0VYX0lSUTsKKwltZTQwMDBfb3V0bCh0bXAsIGV4dF9pbnRfY29udGV4dC0+Y3RybF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfY291bnQodW5zaWduZWQgbG9uZyAqYXJnLAorCQkJCW1lNDAwMF9leHRfaW50X2NvbnRleHRfdCAqIGV4dF9pbnRfY29udGV4dCkKK3sKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZXh0X2ludF9jb3VudCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXB1dF91c2VyKGV4dF9pbnRfY29udGV4dC0+aW50X2NvdW50LCBhcmcpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHZW5lcmFsIHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgbWU0MDAwX2dldF91c2VyX2luZm8obWU0MDAwX3VzZXJfaW5mb190ICogYXJnLAorCQkJCW1lNDAwMF9pbmZvX3QgKiBib2FyZF9pbmZvKQoreworCW1lNDAwMF91c2VyX2luZm9fdCB1c2VyX2luZm87CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2dldF91c2VyX2luZm8oKSBpcyBleGVjdXRlZFxuIik7CisKKwl1c2VyX2luZm8uYm9hcmRfY291bnQgPSBib2FyZF9pbmZvLT5ib2FyZF9jb3VudDsKKwl1c2VyX2luZm8ucGx4X3JlZ2Jhc2UgPSBib2FyZF9pbmZvLT5wbHhfcmVnYmFzZTsKKwl1c2VyX2luZm8ucGx4X3JlZ2Jhc2Vfc2l6ZSA9IGJvYXJkX2luZm8tPnBseF9yZWdiYXNlX3NpemU7CisJdXNlcl9pbmZvLm1lNDAwMF9yZWdiYXNlID0gYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2U7CisJdXNlcl9pbmZvLm1lNDAwMF9yZWdiYXNlX3NpemUgPSBib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZV9zaXplOworCXVzZXJfaW5mby5zZXJpYWxfbm8gPSBib2FyZF9pbmZvLT5zZXJpYWxfbm87CisJdXNlcl9pbmZvLmh3X3JldmlzaW9uID0gYm9hcmRfaW5mby0+aHdfcmV2aXNpb247CisJdXNlcl9pbmZvLnZlbmRvcl9pZCA9IGJvYXJkX2luZm8tPnZlbmRvcl9pZDsKKwl1c2VyX2luZm8uZGV2aWNlX2lkID0gYm9hcmRfaW5mby0+ZGV2aWNlX2lkOworCXVzZXJfaW5mby5wY2lfYnVzX25vID0gYm9hcmRfaW5mby0+cGNpX2J1c19ubzsKKwl1c2VyX2luZm8ucGNpX2Rldl9ubyA9IGJvYXJkX2luZm8tPnBjaV9kZXZfbm87CisJdXNlcl9pbmZvLnBjaV9mdW5jX25vID0gYm9hcmRfaW5mby0+cGNpX2Z1bmNfbm87CisJdXNlcl9pbmZvLmlycSA9IGJvYXJkX2luZm8tPmlycTsKKwl1c2VyX2luZm8uaXJxX2NvdW50ID0gYm9hcmRfaW5mby0+aXJxX2NvdW50OworCXVzZXJfaW5mby5kcml2ZXJfdmVyc2lvbiA9IE1FNDAwMF9EUklWRVJfVkVSU0lPTjsKKwl1c2VyX2luZm8uYW9fY291bnQgPSBib2FyZF9pbmZvLT5ib2FyZF9wLT5hby5jb3VudDsKKwl1c2VyX2luZm8uYW9fZmlmb19jb3VudCA9IGJvYXJkX2luZm8tPmJvYXJkX3AtPmFvLmZpZm9fY291bnQ7CisKKwl1c2VyX2luZm8uYWlfY291bnQgPSBib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5jb3VudDsKKwl1c2VyX2luZm8uYWlfc2hfY291bnQgPSBib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5zaF9jb3VudDsKKwl1c2VyX2luZm8uYWlfZXhfdHJpZ19hbmFsb2cgPSBib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5leF90cmlnX2FuYWxvZzsKKworCXVzZXJfaW5mby5kaW9fY291bnQgPSBib2FyZF9pbmZvLT5ib2FyZF9wLT5kaW8uY291bnQ7CisKKwl1c2VyX2luZm8uY250X2NvdW50ID0gYm9hcmRfaW5mby0+Ym9hcmRfcC0+Y250LmNvdW50OworCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ1c2VyX2luZm8sIHNpemVvZihtZTQwMDBfdXNlcl9pbmZvX3QpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSVNSIFNUVUZGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGVfcHRyLCBpbnQgbW9kZSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwltZTQwMDBfZXh0X2ludF9jb250ZXh0X3QgKmV4dF9pbnRfY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZXh0X2ludF9mYXN5bmMoKSBpcyBleGVjdXRlZFxuIik7CisKKwlleHRfaW50X2NvbnRleHQgPSBmaWxlX3B0ci0+cHJpdmF0ZV9kYXRhOworCisJcmVzdWx0ID0KKwkgICAgZmFzeW5jX2hlbHBlcihmZCwgZmlsZV9wdHIsIG1vZGUsICZleHRfaW50X2NvbnRleHQtPmZhc3luY19wdHIpOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9leHRfaW50X2Zhc3luYygpIGlzIGxlYXZlZFxuIik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlycXJldHVybl90IG1lNDAwMF9hb19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXUzMiB0bXA7CisJdTMyIHZhbHVlOworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQ7CisJaW50IGk7CisJaW50IGMgPSAwOworCWludCBjMSA9IDA7CisJLy91bnNpZ25lZCBsb25nIGJlZm9yZTsKKwkvL3Vuc2lnbmVkIGxvbmcgYWZ0ZXI7CisKKwlJU1JfUERFQlVHKCJtZTQwMDBfYW9faXNyKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYW9fY29udGV4dCA9IGRldl9pZDsKKworCS8qIENoZWNrIGlmIGlycSBudW1iZXIgaXMgcmlnaHQgKi8KKwlpZiAoaXJxICE9IGFvX2NvbnRleHQtPmlycSkgeworCQlJU1JfUERFQlVHKCJtZTQwMDBfYW9faXNyKCk6aW5jb3JyZWN0IGludGVycnVwdCBudW06ICVkXG4iLAorCQkJICAgaXJxKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCS8qIENoZWNrIGlmIHRoaXMgREFDIHJpc2VkIGFuIGludGVycnVwdCAqLworCWlmICghCisJICAgICgoMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDMpKSAmCisJICAgICBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmlycV9zdGF0dXNfcmVnKSkpIHsKKwkJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpOk5vdCB0aGlzIERBQ1xuIik7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBSZWFkIHN0YXR1cyByZWdpc3RlciB0byBmaW5kIG91dCB3aGF0IGhhcHBlbmVkICovCisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKTsKKworCWlmICghKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0VGKSAmJiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfSEYpCisJICAgICYmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9IRikpIHsKKwkJYyA9IE1FNDAwMF9BT19GSUZPX0NPVU5UOworCQlJU1JfUERFQlVHKCJtZTQwMDBfYW9faXNyKCk6RmlmbyBlbXB0eVxuIik7CisJfSBlbHNlIGlmICgodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRUYpCisJCSAgICYmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9IRikKKwkJICAgJiYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0hGKSkgeworCQljID0gTUU0MDAwX0FPX0ZJRk9fQ09VTlQgLyAyOworCQlJU1JfUERFQlVHKCJtZTQwMDBfYW9faXNyKCk6RmlmbyB1bmRlciBoYWxmIGZ1bGxcbiIpOworCX0gZWxzZSB7CisJCWMgPSAwOworCQlJU1JfUERFQlVHKCJtZTQwMDBfYW9faXNyKCk6RmlmbyBmdWxsXG4iKTsKKwl9CisKKwlJU1JfUERFQlVHKCJtZTQwMDBfYW9faXNyKCk6VHJ5IHRvIHdyaXRlIDB4JTA0WCB2YWx1ZXNcbiIsIGMpOworCisJd2hpbGUgKDEpIHsKKwkJYzEgPSBtZTQwMDBfdmFsdWVzX3RvX2VuZChhb19jb250ZXh0LT5jaXJjX2J1ZiwKKwkJCQkJICBNRTQwMDBfQU9fQlVGRkVSX0NPVU5UKTsKKwkJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpOlZhbHVlcyB0byBlbmQgPSAlZFxuIiwgYzEpOworCQlpZiAoYzEgPiBjKQorCQkJYzEgPSBjOworCisJCWlmIChjMSA8PSAwKSB7CisJCQlJU1JfUERFQlVHCisJCQkgICAgKCJtZTQwMDBfYW9faXNyKCk6V29yayBkb25lIG9yIGJ1ZmZlciBlbXB0eVxuIik7CisJCQlicmVhazsKKwkJfQorCQkvL3JkdHNjbChiZWZvcmUpOworCQlpZiAoKChhb19jb250ZXh0LT5maWZvX3JlZyAmIDB4RkYpID09IE1FNDAwMF9BT18wMV9GSUZPX1JFRykgfHwKKwkJICAgICgoYW9fY29udGV4dC0+Zmlmb19yZWcgJiAweEZGKSA9PSBNRTQwMDBfQU9fMDNfRklGT19SRUcpKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgYzE7IGkrKykgeworCQkJCXZhbHVlID0KKwkJCQkgICAgKCh1MzIpCisJCQkJICAgICAoKgorCQkJCSAgICAgIChhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJCSAgICAgICBhb19jb250ZXh0LT5jaXJjX2J1Zi50YWlsICsgaSkpKSA8PCAxNjsKKwkJCQlvdXRsKHZhbHVlLCBhb19jb250ZXh0LT5maWZvX3JlZyk7CisJCQl9CisJCX0gZWxzZQorCQkJb3V0c3coYW9fY29udGV4dC0+Zmlmb19yZWcsCisJCQkgICAgICBhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJICAgICAgYW9fY29udGV4dC0+Y2lyY19idWYudGFpbCwgYzEpOworCisJCS8vcmR0c2NsKGFmdGVyKTsKKwkJLy9wcmludGsoS0VSTl9FUlIiTUU0MDAwOm1lNDAwMF9hb19pc3IoKTpUaW1lIGxhcHNlID0gJWx1XG4iLCBhZnRlciAtIGJlZm9yZSk7CisKKwkJYW9fY29udGV4dC0+Y2lyY19idWYudGFpbCA9CisJCSAgICAoYW9fY29udGV4dC0+Y2lyY19idWYudGFpbCArIGMxKSAmIChNRTQwMDBfQU9fQlVGRkVSX0NPVU5UIC0KKwkJCQkJCQkxKTsKKwkJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpOiVkIHZhbHVlcyB3cm90ZSB0byBwb3J0IDB4JTA0WFxuIiwKKwkJCSAgIGMxLCBhb19jb250ZXh0LT5maWZvX3JlZyk7CisJCWMgLT0gYzE7CisJfQorCisJLyogSWYgdGhlcmUgYXJlIG5vIHZhbHVlcyBsZWZ0IGluIHRoZSBidWZmZXIsIGRpc2FibGUgaW50ZXJydXB0cyAqLworCXNwaW5fbG9jaygmYW9fY29udGV4dC0+aW50X2xvY2spOworCWlmICghbWU0MDAwX2J1Zl9jb3VudChhb19jb250ZXh0LT5jaXJjX2J1ZiwgTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCkpIHsKKwkJSVNSX1BERUJVRworCQkgICAgKCJtZTQwMDBfYW9faXNyKCk6RGlzYWJsZSBJbnRlcnJ1cHQgYmVjYXVzZSBubyB2YWx1ZXMgbGVmdCBpbiBidWZmZXJcbiIpOworCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wICY9IH5NRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0lSUTsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJfQorCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5pbnRfbG9jayk7CisKKwkvKiBSZXNldCB0aGUgaW50ZXJydXB0ICovCisJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5pbnRfbG9jayk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9SRVNFVF9JUlE7CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9IH5NRTQwMDBfQU9fQ1RSTF9CSVRfUkVTRVRfSVJROworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCisJLyogSWYgc3RhdGUgbWFjaGluZSBpcyBzdG9wcGVkLCBmbG93IHdhcyBpbnRlcnJ1cHRlZCAqLworCWlmICghKG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTUU0MDAwOm1lNDAwMF9hb19pc3IoKTpCcm9rZW4gcGlwZVxuIik7CisJCWFvX2NvbnRleHQtPnBpcGVfZmxhZyA9IDE7CS8vIFNldCBmbGFnIGluIG9yZGVyIHRvIGluZm9ybSB3cml0ZSByb3V0aW5lCisJCXRtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9JUlE7CS8vIERpc2FibGUgaW50ZXJydXB0CisJfQorCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5pbnRfbG9jayk7CisKKwkvKiBXYWtlIHVwIHdhaXRpbmcgcHJvY2VzcyAqLworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmKGFvX2NvbnRleHQtPndhaXRfcXVldWUpKTsKKworCS8qIENvdW50IHRoZSBpbnRlcnJ1cHQgKi8KKwlhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5pcnFfY291bnQrKzsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IG1lNDAwMF9haV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXUzMiB0bXA7CisJbWU0MDAwX2FpX2NvbnRleHRfdCAqYWlfY29udGV4dDsKKwlpbnQgaTsKKwlpbnQgYyA9IDA7CisJaW50IGMxID0gMDsKKyNpZmRlZiBNRTQwMDBfSVNSX0RFQlVHCisJdW5zaWduZWQgbG9uZyBiZWZvcmU7CisJdW5zaWduZWQgbG9uZyBhZnRlcjsKKyNlbmRpZgorCisJSVNSX1BERUJVRygibWU0MDAwX2FpX2lzcigpIGlzIGV4ZWN1dGVkXG4iKTsKKworI2lmZGVmIE1FNDAwMF9JU1JfREVCVUcKKwlyZHRzY2woYmVmb3JlKTsKKyNlbmRpZgorCisJYWlfY29udGV4dCA9IGRldl9pZDsKKworCS8qIENoZWNrIGlmIGlycSBudW1iZXIgaXMgcmlnaHQgKi8KKwlpZiAoaXJxICE9IGFpX2NvbnRleHQtPmlycSkgeworCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6aW5jb3JyZWN0IGludGVycnVwdCBudW06ICVkXG4iLAorCQkJICAgaXJxKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmIChtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmlycV9zdGF0dXNfcmVnKSAmCisJICAgIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9BSV9IRikgeworCQlJU1JfUERFQlVHCisJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpGaWZvIGhhbGYgZnVsbCBpbnRlcnJ1cHQgb2NjdXJlZFxuIik7CisKKwkJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCAqLworCQl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCQlpZiAoISh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GRl9EQVRBKSAmJgorCQkgICAgISh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9EQVRBKQorCQkgICAgJiYgKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CisJCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6RmlmbyBmdWxsXG4iKTsKKwkJCWMgPSBNRTQwMDBfQUlfRklGT19DT1VOVDsKKworCQkJLyogRklGTyBvdmVyZmxvdywgc28gc3RvcCBjb252ZXJzaW9uIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJCQlzcGluX2xvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUDsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUSB8CisJCQkgICAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRKTsKKwkJCW91dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCQlzcGluX3VubG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCQl9IGVsc2UgaWYgKCh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GRl9EQVRBKSAmJgorCQkJICAgISh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9EQVRBKQorCQkJICAgJiYgKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CisJCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6RmlmbyBoYWxmIGZ1bGxcbiIpOworCQkJYyA9IE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMjsKKwkJfSBlbHNlIHsKKwkJCWMgPSAwOworCQkJSVNSX1BERUJVRworCQkJICAgICgibWU0MDAwX2FpX2lzcigpOkNhbid0IGRldGVybWluZSBzdGF0ZSBvZiBmaWZvXG4iKTsKKwkJfQorCisJCUlTUl9QREVCVUcoIm1lNDAwMF9haV9pc3IoKTpUcnkgdG8gcmVhZCAlZCB2YWx1ZXNcbiIsIGMpOworCisJCXdoaWxlICgxKSB7CisJCQljMSA9IG1lNDAwMF9zcGFjZV90b19lbmQoYWlfY29udGV4dC0+Y2lyY19idWYsCisJCQkJCQkgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCk7CisJCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6U3BhY2UgdG8gZW5kID0gJWRcbiIsIGMxKTsKKwkJCWlmIChjMSA+IGMpCisJCQkJYzEgPSBjOworCisJCQlpZiAoYzEgPD0gMCkgeworCQkJCUlTUl9QREVCVUcKKwkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6V29yayBkb25lIG9yIGJ1ZmZlciBmdWxsXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaW5zdyhhaV9jb250ZXh0LT5kYXRhX3JlZywKKwkJCSAgICAgYWlfY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCSAgICAgYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCwgYzEpOworCQkJYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCA9CisJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgKworCQkJICAgICBjMSkgJiAoTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCAtIDEpOworCQkJYyAtPSBjMTsKKwkJfQorCisJCS8qIFdvcmsgaXMgZG9uZSwgc28gcmVzZXQgdGhlIGludGVycnVwdCAqLworCQlJU1JfUERFQlVHCisJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpyZXNldCBpbnRlcnJ1cHQgZmlmbyBoYWxmIGZ1bGwgaW50ZXJydXB0XG4iKTsKKwkJc3Bpbl9sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUV9SRVNFVDsKKwkJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUV9SRVNFVDsKKwkJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJfQorCisJaWYgKG1lNDAwMF9pbmwoYWlfY29udGV4dC0+aXJxX3N0YXR1c19yZWcpICYgTUU0MDAwX0lSUV9TVEFUVVNfQklUX1NDKSB7CisJCUlTUl9QREVCVUcKKwkJICAgICgibWU0MDAwX2FpX2lzcigpOlNhbXBsZSBjb3VudGVyIGludGVycnVwdCBvY2N1cmVkXG4iKTsKKworCQlpZiAoIWFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyX3JlbG9hZCkgeworCQkJSVNSX1BERUJVRworCQkJICAgICgibWU0MDAwX2FpX2lzcigpOlNpbmdsZSBkYXRhIGJsb2NrIGF2YWlsYWJsZVxuIik7CisKKwkJCS8qIFBvbGwgZGF0YSB1bnRpbCBmaWZvIGVtcHR5ICovCisJCQlmb3IgKGkgPSAwOworCQkJICAgICAoaSA8IE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMikKKwkJCSAgICAgJiYgKGlubChhaV9jb250ZXh0LT5jdHJsX3JlZykgJgorCQkJCSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKTsgaSsrKSB7CisJCQkJaWYgKG1lNDAwMF9zcGFjZV90b19lbmQKKwkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCSAgICAgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCkpIHsKKwkJCQkJKihhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJCQkgIGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQpID0KKwkJIGludyhhaV9jb250ZXh0LT5kYXRhX3JlZyk7CisJCQkJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPQorCQkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgKworCQkJCQkgICAgIDEpICYgKE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQgLSAxKTsKKwkJCQl9IGVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6JWQgdmFsdWVzIHJlYWRcbiIsIGkpOworCQl9IGVsc2UgeworCQkJaWYgKGFpX2NvbnRleHQtPnNhbXBsZV9jb3VudGVyIDw9CisJCQkgICAgTUU0MDAwX0FJX0ZJRk9fQ09VTlQgLyAyKSB7CisJCQkJSVNSX1BERUJVRworCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpJbnRlcnJ1cHQgZnJvbSBhZGp1c3RhYmxlIGhhbGYgZnVsbCB0aHJlc2hvbGRcbiIpOworCisJCQkJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCAqLworCQkJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJCQkJaWYgKCEodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRkZfREFUQSkgJiYKKwkJCQkgICAgISh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9EQVRBKQorCQkJCSAgICAmJiAodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQSkpIHsKKwkJCQkJSVNSX1BERUJVRworCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6RmlmbyBmdWxsXG4iKTsKKwkJCQkJYyA9IE1FNDAwMF9BSV9GSUZPX0NPVU5UOworCisJCQkJCS8qIEZJRk8gb3ZlcmZsb3csIHNvIHN0b3AgY29udmVyc2lvbiAqLworCQkJCQlzcGluX2xvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwkJCQkJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCQkJCXRtcCB8PQorCQkJCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QOworCQkJCQlvdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQkJCQlzcGluX3VubG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCQkJCX0gZWxzZSBpZiAoKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZGX0RBVEEpCisJCQkJCSAgICYmICEodG1wICYKKwkJCQkJCU1FNDAwMF9BSV9TVEFUVVNfQklUX0hGX0RBVEEpCisJCQkJCSAgICYmICh0bXAgJgorCQkJCQkgICAgICAgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQSkpIHsKKwkJCQkJSVNSX1BERUJVRworCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6RmlmbyBoYWxmIGZ1bGxcbiIpOworCQkJCQljID0gTUU0MDAwX0FJX0ZJRk9fQ09VTlQgLyAyOworCQkJCX0gZWxzZSB7CisJCQkJCWMgPSBhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcjsKKwkJCQkJSVNSX1BERUJVRworCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6U2FtcGxlIGNvdW50IHZhbHVlc1xuIik7CisJCQkJfQorCisJCQkJSVNSX1BERUJVRworCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpUcnkgdG8gcmVhZCAlZCB2YWx1ZXNcbiIsCisJCQkJICAgICBjKTsKKworCQkJCXdoaWxlICgxKSB7CisJCQkJCWMxID0gbWU0MDAwX3NwYWNlX3RvX2VuZChhaV9jb250ZXh0LT4KKwkJCQkJCQkJIGNpcmNfYnVmLAorCQkJCQkJCQkgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCk7CisJCQkJCUlTUl9QREVCVUcKKwkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOlNwYWNlIHRvIGVuZCA9ICVkXG4iLAorCQkJCQkgICAgIGMxKTsKKwkJCQkJaWYgKGMxID4gYykKKwkJCQkJCWMxID0gYzsKKworCQkJCQlpZiAoYzEgPD0gMCkgeworCQkJCQkJSVNSX1BERUJVRworCQkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOldvcmsgZG9uZSBvciBidWZmZXIgZnVsbFxuIik7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCWluc3coYWlfY29udGV4dC0+ZGF0YV9yZWcsCisJCQkJCSAgICAgYWlfY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCQkJICAgICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkLCBjMSk7CisJCQkJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPQorCQkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgKworCQkJCQkgICAgIGMxKSAmIChNRTQwMDBfQUlfQlVGRkVSX0NPVU5UIC0gMSk7CisJCQkJCWMgLT0gYzE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlJU1JfUERFQlVHCisJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOk11bHRpcGxlIGRhdGEgYmxvY2sgYXZhaWxhYmxlXG4iKTsKKworCQkJCS8qIFJlYWQgc3RhdHVzIHJlZ2lzdGVyIHRvIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQgKi8KKwkJCQl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCQkJCWlmICghKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZGX0RBVEEpICYmCisJCQkJICAgICEodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfSEZfREFUQSkKKwkJCQkgICAgJiYgKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CisJCQkJCUlTUl9QREVCVUcKKwkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOkZpZm8gZnVsbFxuIik7CisJCQkJCWMgPSBNRTQwMDBfQUlfRklGT19DT1VOVDsKKworCQkJCQkvKiBGSUZPIG92ZXJmbG93LCBzbyBzdG9wIGNvbnZlcnNpb24gKi8KKwkJCQkJc3Bpbl9sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJCQkJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQkJCQl0bXAgfD0KKwkJCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUDsKKwkJCQkJb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCQkJc3Bpbl91bmxvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKworCQkJCQl3aGlsZSAoMSkgeworCQkJCQkJYzEgPSBtZTQwMDBfc3BhY2VfdG9fZW5kCisJCQkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJICAgICBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKTsKKwkJCQkJCUlTUl9QREVCVUcKKwkJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpTcGFjZSB0byBlbmQgPSAlZFxuIiwKKwkJCQkJCSAgICAgYzEpOworCQkJCQkJaWYgKGMxID4gYykKKwkJCQkJCQljMSA9IGM7CisKKwkJCQkJCWlmIChjMSA8PSAwKSB7CisJCQkJCQkJSVNSX1BERUJVRworCQkJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpXb3JrIGRvbmUgb3IgYnVmZmVyIGZ1bGxcbiIpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisJCQkJCQlpbnN3KGFpX2NvbnRleHQtPmRhdGFfcmVnLAorCQkJCQkJICAgICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJCQkJICAgICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkLAorCQkJCQkJICAgICBjMSk7CisJCQkJCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0KKwkJCQkJCSAgICAoYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCArCisJCQkJCQkgICAgIGMxKSAmCisJCQkJCQkgICAgKE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQgLQorCQkJCQkJICAgICAxKTsKKwkJCQkJCWMgLT0gYzE7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKCh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GRl9EQVRBKQorCQkJCQkgICAmJiAhKHRtcCAmCisJCQkJCQlNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9EQVRBKQorCQkJCQkgICAmJiAodG1wICYKKwkJCQkJICAgICAgIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CisJCQkJCUlTUl9QREVCVUcKKwkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOkZpZm8gaGFsZiBmdWxsXG4iKTsKKwkJCQkJYyA9IE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMjsKKworCQkJCQl3aGlsZSAoMSkgeworCQkJCQkJYzEgPSBtZTQwMDBfc3BhY2VfdG9fZW5kCisJCQkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJICAgICBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKTsKKwkJCQkJCUlTUl9QREVCVUcKKwkJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpTcGFjZSB0byBlbmQgPSAlZFxuIiwKKwkJCQkJCSAgICAgYzEpOworCQkJCQkJaWYgKGMxID4gYykKKwkJCQkJCQljMSA9IGM7CisKKwkJCQkJCWlmIChjMSA8PSAwKSB7CisJCQkJCQkJSVNSX1BERUJVRworCQkJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpXb3JrIGRvbmUgb3IgYnVmZmVyIGZ1bGxcbiIpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisJCQkJCQlpbnN3KGFpX2NvbnRleHQtPmRhdGFfcmVnLAorCQkJCQkJICAgICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJCQkJICAgICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkLAorCQkJCQkJICAgICBjMSk7CisJCQkJCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0KKwkJCQkJCSAgICAoYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCArCisJCQkJCQkgICAgIGMxKSAmCisJCQkJCQkgICAgKE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQgLQorCQkJCQkJICAgICAxKTsKKwkJCQkJCWMgLT0gYzE7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkvKiBQb2xsIGRhdGEgdW50aWwgZmlmbyBlbXB0eSAqLworCQkJCQlmb3IgKGkgPSAwOworCQkJCQkgICAgIChpIDwgTUU0MDAwX0FJX0ZJRk9fQ09VTlQgLyAyKQorCQkJCQkgICAgICYmIChpbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpICYKKwkJCQkJCSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKTsKKwkJCQkJICAgICBpKyspIHsKKwkJCQkJCWlmIChtZTQwMDBfc3BhY2VfdG9fZW5kCisJCQkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJICAgICBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKSkgeworCQkJCQkJCSooYWlfY29udGV4dC0+Y2lyY19idWYuCisJCQkJCQkJICBidWYgKworCQkJCQkJCSAgYWlfY29udGV4dC0+Y2lyY19idWYuCisJCQkJCQkJICBoZWFkKSA9CisJCQkJICAgICAgIGludyhhaV9jb250ZXh0LT5kYXRhX3JlZyk7CisJCQkJCQkJYWlfY29udGV4dC0+Y2lyY19idWYuCisJCQkJCQkJICAgIGhlYWQgPQorCQkJCQkJCSAgICAoYWlfY29udGV4dC0+CisJCQkJCQkJICAgICBjaXJjX2J1Zi5oZWFkICsKKwkJCQkJCQkgICAgIDEpICYKKwkJCQkJCQkgICAgKE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQKKwkJCQkJCQkgICAgIC0gMSk7CisJCQkJCQl9IGVsc2UKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlJU1JfUERFQlVHCisJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTolZCB2YWx1ZXMgcmVhZFxuIiwKKwkJCQkJICAgICBpKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBXb3JrIGlzIGRvbmUsIHNvIHJlc2V0IHRoZSBpbnRlcnJ1cHQgKi8KKwkJSVNSX1BERUJVRworCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6cmVzZXQgaW50ZXJydXB0IGZyb20gc2FtcGxlIGNvdW50ZXJcbiIpOworCQlzcGluX2xvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwkJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRX1JFU0VUOworCQltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRX1JFU0VUOworCQltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwl9CisKKwkvKiBWYWx1ZXMgYXJlIG5vdyBhdmFpbGFibGUsIHNvIHdha2UgdXAgd2FpdGluZyBwcm9jZXNzICovCisJaWYgKG1lNDAwMF9idWZfY291bnQoYWlfY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpKSB7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9haV9pc3IoKTpXYWtlIHVwIHdhaXRpbmcgcHJvY2Vzc1xuIik7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmKGFpX2NvbnRleHQtPndhaXRfcXVldWUpKTsKKwl9CisKKwkvKiBJZiB0aGVyZSBpcyBubyBzcGFjZSBsZWZ0IGluIHRoZSBidWZmZXIsIGRpc2FibGUgaW50ZXJydXB0cyAqLworCXNwaW5fbG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCWlmICghbWU0MDAwX2J1Zl9zcGFjZShhaV9jb250ZXh0LT5jaXJjX2J1ZiwgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCkpIHsKKwkJSVNSX1BERUJVRworCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6RGlzYWJsZSBJbnRlcnJ1cHQgYmVjYXVzZSBubyBzcGFjZSBsZWZ0IGluIGJ1ZmZlclxuIik7CisJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgJj0KKwkJICAgIH4oTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSB8IE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfAorCQkgICAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfTEVfSVJRKTsKKwkJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJfQorCXNwaW5fdW5sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisKKyNpZmRlZiBNRTQwMDBfSVNSX0RFQlVHCisJcmR0c2NsKGFmdGVyKTsKKwlwcmludGsoS0VSTl9FUlIgIk1FNDAwMDptZTQwMDBfYWlfaXNyKCk6VGltZSBsYXBzZSA9ICVsdVxuIiwKKwkgICAgICAgYWZ0ZXIgLSBiZWZvcmUpOworI2VuZGlmCisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtZTQwMDBfZXh0X2ludF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCW1lNDAwMF9leHRfaW50X2NvbnRleHRfdCAqZXh0X2ludF9jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJSVNSX1BERUJVRygibWU0MDAwX2V4dF9pbnRfaXNyKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJZXh0X2ludF9jb250ZXh0ID0gZGV2X2lkOworCisJLyogQ2hlY2sgaWYgaXJxIG51bWJlciBpcyByaWdodCAqLworCWlmIChpcnEgIT0gZXh0X2ludF9jb250ZXh0LT5pcnEpIHsKKwkJSVNSX1BERUJVRygibWU0MDAwX2V4dF9pbnRfaXNyKCk6aW5jb3JyZWN0IGludGVycnVwdCBudW06ICVkXG4iLAorCQkJICAgaXJxKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmIChtZTQwMDBfaW5sKGV4dF9pbnRfY29udGV4dC0+aXJxX3N0YXR1c19yZWcpICYKKwkgICAgTUU0MDAwX0lSUV9TVEFUVVNfQklUX0VYKSB7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9leHRfaW50X2lzcigpOkV4dGVybmFsIGludGVycnVwdCBvY2N1cmVkXG4iKTsKKwkJdG1wID0gbWU0MDAwX2lubChleHRfaW50X2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9JUlFfUkVTRVQ7CisJCW1lNDAwMF9vdXRsKHRtcCwgZXh0X2ludF9jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX0VYX0lSUV9SRVNFVDsKKwkJbWU0MDAwX291dGwodG1wLCBleHRfaW50X2NvbnRleHQtPmN0cmxfcmVnKTsKKworCQlleHRfaW50X2NvbnRleHQtPmludF9jb3VudCsrOworCisJCWlmIChleHRfaW50X2NvbnRleHQtPmZhc3luY19wdHIpIHsKKwkJCUlTUl9QREVCVUcKKwkJCSAgICAoIm1lMjYwMF9leHRfaW50X2lzcigpOlNlbmQgc2lnbmFsIHRvIHByb2Nlc3NcbiIpOworCQkJa2lsbF9mYXN5bmMoJmV4dF9pbnRfY29udGV4dC0+ZmFzeW5jX3B0ciwgU0lHSU8sCisJCQkJICAgIFBPTExfSU4pOworCQl9CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCit2b2lkIF9fZXhpdCBtZTQwMDBfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpib2FyZF9wOworCW1lNDAwMF9pbmZvX3QgKmJvYXJkX2luZm87CisKKwlDQUxMX1BERUJVRygiY2xlYW51cF9tb2R1bGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwl1bnJlZ2lzdGVyX2NocmRldihtZTQwMDBfZXh0X2ludF9tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9FWFRfSU5UX05BTUUpOworCisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9DTlRfTkFNRSk7CisKKwl1bnJlZ2lzdGVyX2NocmRldihtZTQwMDBfZGlvX21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0RJT19OQU1FKTsKKworCXVucmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9haV9tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9BSV9OQU1FKTsKKworCXVucmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9BT19OQU1FKTsKKworCXJlbW92ZV9wcm9jX2VudHJ5KCJtZTQwMDAiLCBOVUxMKTsKKworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbWU0MDAwX2RyaXZlcik7CisKKwkvKiBSZXNldCB0aGUgYm9hcmRzICovCisJZm9yIChib2FyZF9wID0gbWU0MDAwX2JvYXJkX2luZm9fbGlzdC5uZXh0OworCSAgICAgYm9hcmRfcCAhPSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdDsgYm9hcmRfcCA9IGJvYXJkX3AtPm5leHQpIHsKKwkJYm9hcmRfaW5mbyA9IGxpc3RfZW50cnkoYm9hcmRfcCwgbWU0MDAwX2luZm9fdCwgbGlzdCk7CisJCW1lNDAwMF9yZXNldF9ib2FyZChib2FyZF9pbmZvKTsKKwl9CisKKwljbGVhcl9ib2FyZF9pbmZvX2xpc3QoKTsKK30KKworbW9kdWxlX2V4aXQobWU0MDAwX21vZHVsZV9leGl0KTsKKworc3RhdGljIGludCBtZTQwMDBfcmVhZF9wcm9jbWVtKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBjb3VudCwKKwkJCSAgICAgICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgbGVuID0gMDsKKwlpbnQgbGltaXQgPSBjb3VudCAtIDEwMDA7CisJbWU0MDAwX2luZm9fdCAqYm9hcmRfaW5mbzsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwdHI7CisKKwlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJcbk1FNDAwMCBEUklWRVIgVkVSU0lPTiAlWC4lWC4lWFxuXG4iLAorCQkgICAgICAgKE1FNDAwMF9EUklWRVJfVkVSU0lPTiAmIDB4RkYwMDAwKSA+PiAxNiwKKwkJICAgICAgIChNRTQwMDBfRFJJVkVSX1ZFUlNJT04gJiAweEZGMDApID4+IDgsCisJCSAgICAgICAoTUU0MDAwX0RSSVZFUl9WRVJTSU9OICYgMHhGRikpOworCisJLyogU2VhcmNoIGZvciB0aGUgYm9hcmQgY29udGV4dCAqLworCWZvciAocHRyID0gbWU0MDAwX2JvYXJkX2luZm9fbGlzdC5uZXh0OworCSAgICAgKHB0ciAhPSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdCkgJiYgKGxlbiA8IGxpbWl0KTsKKwkgICAgIHB0ciA9IHB0ci0+bmV4dCkgeworCQlib2FyZF9pbmZvID0gbGlzdF9lbnRyeShwdHIsIG1lNDAwMF9pbmZvX3QsIGxpc3QpOworCisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJCb2FyZCBudW1iZXIgJWQ6XG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmJvYXJkX2NvdW50KTsKKwkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIlBMWCBiYXNlIHJlZ2lzdGVyID0gMHglbFhcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiUExYIGJhc2UgcmVnaXN0ZXIgc2l6ZSA9IDB4JWxYXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPnBseF9yZWdiYXNlX3NpemUpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiTUU0MDAwIGJhc2UgcmVnaXN0ZXIgPSAweCVsWFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJNRTQwMDAgYmFzZSByZWdpc3RlciBzaXplID0gMHglbFhcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2Vfc2l6ZSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJTZXJpYWwgbnVtYmVyID0gMHglWFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5zZXJpYWxfbm8pOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiSGFyZHdhcmUgcmV2aXNpb24gPSAweCVYXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmh3X3JldmlzaW9uKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIlZlbmRvciBpZCA9IDB4JVhcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+dmVuZG9yX2lkKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkRldmljZSBpZCA9IDB4JVhcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+ZGV2aWNlX2lkKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIlBDSSBidXMgbnVtYmVyID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+cGNpX2J1c19ubyk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJQQ0kgZGV2aWNlIG51bWJlciA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPnBjaV9kZXZfbm8pOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiUENJIGZ1bmN0aW9uIG51bWJlciA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPnBjaV9mdW5jX25vKTsKKwkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiSVJRID0gJXVcbiIsIGJvYXJkX2luZm8tPmlycSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sCisJCQkgICAgIkNvdW50IG9mIGludGVycnVwdHMgc2luY2UgbW9kdWxlIHdhcyBsb2FkZWQgPSAlZFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5pcnFfY291bnQpOworCisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJDb3VudCBvZiBhbmFsb2cgb3V0cHV0cyA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmJvYXJkX3AtPmFvLmNvdW50KTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkNvdW50IG9mIGFuYWxvZyBvdXRwdXQgZmlmb3MgPSAlZFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5ib2FyZF9wLT5hby5maWZvX2NvdW50KTsKKworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQ291bnQgb2YgYW5hbG9nIGlucHV0cyA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLmNvdW50KTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwKKwkJCSAgICAiQ291bnQgb2Ygc2FtcGxlIGFuZCBob2xkIGRldmljZXMgZm9yIGFuYWxvZyBpbnB1dCA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmJvYXJkX3AtPmFpLnNoX2NvdW50KTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwKKwkJCSAgICAiQW5hbG9nIGV4dGVybmFsIHRyaWdnZXIgYXZhaWxhYmxlIGZvciBhbmFsb2cgaW5wdXQgPSAlZFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5leF90cmlnX2FuYWxvZyk7CisKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkNvdW50IG9mIGRpZ2l0YWwgcG9ydHMgPSAlZFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5ib2FyZF9wLT5kaW8uY291bnQpOworCisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJDb3VudCBvZiBjb3VudGVyIGRldmljZXMgPSAlZFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5ib2FyZF9wLT5jbnQuY291bnQpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQUkgY29udHJvbCByZWdpc3RlciA9IDB4JTA4WFxuIiwKKwkJCSAgICBpbmwoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKworCQkJCU1FNDAwMF9BSV9DVFJMX1JFRykpOworCisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIkFPIDAgY29udHJvbCByZWdpc3RlciA9IDB4JTA4WFxuIiwKKwkJCSAgICAgICBpbmwoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKworCQkJCSAgIE1FNDAwMF9BT18wMF9DVFJMX1JFRykpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQU8gMCBzdGF0dXMgcmVnaXN0ZXIgPSAweCUwOFhcbiIsCisJCQkgICAgaW5sKGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlICsKKwkJCQlNRTQwMDBfQU9fMDBfU1RBVFVTX1JFRykpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQU8gMSBjb250cm9sIHJlZ2lzdGVyID0gMHglMDhYXG4iLAorCQkJICAgIGlubChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSArCisJCQkJTUU0MDAwX0FPXzAxX0NUUkxfUkVHKSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJBTyAxIHN0YXR1cyByZWdpc3RlciA9IDB4JTA4WFxuIiwKKwkJCSAgICBpbmwoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKworCQkJCU1FNDAwMF9BT18wMV9TVEFUVVNfUkVHKSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJBTyAyIGNvbnRyb2wgcmVnaXN0ZXIgPSAweCUwOFhcbiIsCisJCQkgICAgaW5sKGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlICsKKwkJCQlNRTQwMDBfQU9fMDJfQ1RSTF9SRUcpKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkFPIDIgc3RhdHVzIHJlZ2lzdGVyID0gMHglMDhYXG4iLAorCQkJICAgIGlubChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSArCisJCQkJTUU0MDAwX0FPXzAyX1NUQVRVU19SRUcpKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkFPIDMgY29udHJvbCByZWdpc3RlciA9IDB4JTA4WFxuIiwKKwkJCSAgICBpbmwoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKworCQkJCU1FNDAwMF9BT18wM19DVFJMX1JFRykpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQU8gMyBzdGF0dXMgcmVnaXN0ZXIgPSAweCUwOFhcbiIsCisJCQkgICAgaW5sKGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlICsKKwkJCQlNRTQwMDBfQU9fMDNfU1RBVFVTX1JFRykpOworCX0KKworCSplb2YgPSAxOworCXJldHVybiBsZW47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5oIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzVlNGI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDAuaApAQCAtMCwwICsxLDk1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBNZWlsaGF1cyBFbGVjdHJvbmljIEdtYkggKHN1cHBvcnRAbWVpbGhhdXMuZGUpCisgKgorICogU291cmNlIEZpbGUgOiBtZTQwMDAuaAorICogQXV0aG9yICAgICAgOiBHRyAoR3VlbnRlciBHZWJoYXJkdCkgIDxnLmdlYmhhcmR0QG1laWxoYXVzLmRlPgorICovCisKKyNpZm5kZWYgX01FNDAwMF9IXworI2RlZmluZSBfTUU0MDAwX0hfCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgVGhlIHZlcnNpb24gb2YgdGhlIGRyaXZlciByZWxlYXNlCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0RSSVZFUl9WRVJTSU9OICAweDEwMDA5CS8vIFZlcnNpb24gMS4wMC4wOQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIERlYnVnIHNlY3Rpb24KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI3VuZGVmIE1FNDAwMF9DQUxMX0RFQlVHCS8vIERlYnVnIGZ1bmN0aW9uIGVudHJ5IGFuZCBleGl0CisjdW5kZWYgTUU0MDAwX0lTUl9ERUJVRwkJLy8gRGVidWcgdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUKKyN1bmRlZiBNRTQwMDBfUE9SVF9ERUJVRwkvLyBEZWJ1ZyBwb3J0IGFjY2VzcworI3VuZGVmIE1FNDAwMF9ERUJVRwkJLy8gR2VuZXJhbCBwdXJwb3NlIGRlYnVnIG1hc3NlZ2VzCisKKyNpZmRlZiBNRTQwMDBfQ0FMTF9ERUJVRworI3VuZGVmIENBTExfUERFQlVHCisjZGVmaW5lIENBTExfUERFQlVHKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUciTUU0MDAwOiIgZm10LCAjI2FyZ3MpCisjZWxzZQorIyBkZWZpbmUgQ0FMTF9QREVCVUcoZm10LCBhcmdzLi4uKQkvLyBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcKKyNlbmRpZgorCisjaWZkZWYgTUU0MDAwX0lTUl9ERUJVRworI3VuZGVmIElTUl9QREVCVUcKKyNkZWZpbmUgSVNSX1BERUJVRyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIk1FNDAwMDoiIGZtdCwgIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgSVNSX1BERUJVRyhmbXQsIGFyZ3MuLi4pCS8vIG5vIGRlYnVnZ2luZywgZG8gbm90aGluZworI2VuZGlmCisKKyNpZmRlZiBNRTQwMDBfUE9SVF9ERUJVRworI3VuZGVmIFBPUlRfUERFQlVHCisjZGVmaW5lIFBPUlRfUERFQlVHKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUciTUU0MDAwOiIgZm10LCAjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBQT1JUX1BERUJVRyhmbXQsIGFyZ3MuLi4pCS8vIG5vIGRlYnVnZ2luZywgZG8gbm90aGluZworI2VuZGlmCisKKyNpZmRlZiBNRTQwMDBfREVCVUcKKyN1bmRlZiBQREVCVUcKKyNkZWZpbmUgUERFQlVHKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUciTUU0MDAwOiIgZm10LCAjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBQREVCVUcoZm10LCBhcmdzLi4uKQkvLyBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFBDSSB2ZW5kb3IgYW5kIGRldmljZSBJRHMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01FSUxIQVVTIDB4MTQwMgorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjUwCTB4NDY1MAkvLyBMb3cgQ29zdCB2ZXJzaW9uCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NjAJMHg0NjYwCS8vIFN0YW5kYXJkIHZlcnNpb24KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NjBJCTB4NDY2MQkvLyBJc29sYXRlZCB2ZXJzaW9uCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjYwUwkweDQ2NjIJLy8gU3RhbmRhcmQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MElTCTB4NDY2MwkvLyBJc29sYXRlZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NzAJMHg0NjcwCS8vIFN0YW5kYXJkIHZlcnNpb24KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NzBJCTB4NDY3MQkvLyBJc29sYXRlZCB2ZXJzaW9uCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwUwkweDQ2NzIJLy8gU3RhbmRhcmQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY3MElTCTB4NDY3MwkvLyBJc29sYXRlZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODAJMHg0NjgwCS8vIFN0YW5kYXJkIHZlcnNpb24KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODBJCTB4NDY4MQkvLyBJc29sYXRlZCB2ZXJzaW9uCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjgwUwkweDQ2ODIJLy8gU3RhbmRhcmQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MElTCTB4NDY4MwkvLyBJc29sYXRlZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgRGV2aWNlIG5hbWVzLCBmb3IgZW50cmllcyBpbiAvcHJvYy8uLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIE1FNDAwMF9OQU1FCQkibWU0MDAwIgorI2RlZmluZSBNRTQwMDBfQU9fTkFNRQkJIm1lNDAwMF9hbyIKKyNkZWZpbmUgTUU0MDAwX0FJX05BTUUJCSJtZTQwMDBfYWkiCisjZGVmaW5lIE1FNDAwMF9ESU9fTkFNRQkJIm1lNDAwMF9kaW8iCisjZGVmaW5lIE1FNDAwMF9DTlRfTkFNRQkJIm1lNDAwMF9jbnQiCisjZGVmaW5lIE1FNDAwMF9FWFRfSU5UX05BTUUJIm1lNDAwMF9leHRfaW50IgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIE1FLTQwMDAgYmFzZSByZWdpc3RlciBvZmZzZXRzCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0FPXzAwX0NUUkxfUkVHCQkJMHgwMAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAwX1NUQVRVU19SRUcJCQkweDA0CS8vIFIvXworI2RlZmluZSBNRTQwMDBfQU9fMDBfRklGT19SRUcJCQkweDA4CS8vIF8vVworI2RlZmluZSBNRTQwMDBfQU9fMDBfU0lOR0xFX1JFRwkJCTB4MEMJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9BT18wMF9USU1FUl9SRUcJCQkweDEwCS8vIF8vVworCisjZGVmaW5lIE1FNDAwMF9BT18wMV9DVFJMX1JFRwkJCTB4MTgJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9BT18wMV9TVEFUVVNfUkVHCQkJMHgxQwkvLyBSL18KKyNkZWZpbmUgTUU0MDAwX0FPXzAxX0ZJRk9fUkVHCQkJMHgyMAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAxX1NJTkdMRV9SRUcJCQkweDI0CS8vIFIvVworI2RlZmluZSBNRTQwMDBfQU9fMDFfVElNRVJfUkVHCQkJMHgyOAkvLyBfL1cKKworI2RlZmluZSBNRTQwMDBfQU9fMDJfQ1RSTF9SRUcJCQkweDMwCS8vIFIvVworI2RlZmluZSBNRTQwMDBfQU9fMDJfU1RBVFVTX1JFRwkJCTB4MzQJLy8gUi9fCisjZGVmaW5lIE1FNDAwMF9BT18wMl9GSUZPX1JFRwkJCTB4MzgJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BT18wMl9TSU5HTEVfUkVHCQkJMHgzQwkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAyX1RJTUVSX1JFRwkJCTB4NDAJLy8gXy9XCisKKyNkZWZpbmUgTUU0MDAwX0FPXzAzX0NUUkxfUkVHCQkJMHg0OAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAzX1NUQVRVU19SRUcJCQkweDRDCS8vIFIvXworI2RlZmluZSBNRTQwMDBfQU9fMDNfRklGT19SRUcJCQkweDUwCS8vIF8vVworI2RlZmluZSBNRTQwMDBfQU9fMDNfU0lOR0xFX1JFRwkJCTB4NTQJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9BT18wM19USU1FUl9SRUcJCQkweDU4CS8vIF8vVworCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX1JFRwkJCTB4NzQJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfUkVHCQkJMHg3NAkvLyBSL18KKyNkZWZpbmUgTUU0MDAwX0FJX0NIQU5ORUxfTElTVF9SRUcJCTB4NzgJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BSV9EQVRBX1JFRwkJCTB4N0MJLy8gUi9fCisjZGVmaW5lIE1FNDAwMF9BSV9DSEFOX1RJTUVSX1JFRwkJMHg4MAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FJX0NIQU5fUFJFX1RJTUVSX1JFRwkJMHg4NAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FJX1NDQU5fVElNRVJfTE9XX1JFRwkJMHg4OAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FJX1NDQU5fVElNRVJfSElHSF9SRUcJCTB4OEMJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1BSRV9USU1FUl9MT1dfUkVHCTB4OTAJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1BSRV9USU1FUl9ISUdIX1JFRwkweDk0CS8vIF8vVworI2RlZmluZSBNRTQwMDBfQUlfU1RBUlRfUkVHCQkJMHg5OAkvLyBSL18KKworI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19SRUcJCQkweDlDCS8vIFIvXworCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8wX1JFRwkJCTB4QTAJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8xX1JFRwkJCTB4QTQJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8yX1JFRwkJCTB4QTgJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8zX1JFRwkJCTB4QUMJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9ESU9fRElSX1JFRwkJCTB4QjAJLy8gUi9XCisKKyNkZWZpbmUgTUU0MDAwX0FPX0xPQURTRVRSRUdfWFgJCQkweEI0CS8vIFIvVworCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9SRUcJCQkweEI4CS8vIFIvVworCisjZGVmaW5lIE1FNDAwMF9BT19ERU1VWF9BREpVU1RfUkVHCQkweEJDCS8vIC0vVworCisjZGVmaW5lIE1FNDAwMF9BSV9TQU1QTEVfQ09VTlRFUl9SRUcJCTB4QzAJLy8gXy9XCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgVmFsdWUgdG8gYWRqdXN0IERlbXV4CisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9WQUxVRSAgICAgICAgICAgIDB4NEMKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBDb3VudGVyIGJhc2UgcmVnaXN0ZXIgb2Zmc2V0cworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIE1FNDAwMF9DTlRfQ09VTlRFUl8wX1JFRwkJMHgwMAorI2RlZmluZSBNRTQwMDBfQ05UX0NPVU5URVJfMV9SRUcJCTB4MDEKKyNkZWZpbmUgTUU0MDAwX0NOVF9DT1VOVEVSXzJfUkVHCQkweDAyCisjZGVmaW5lIE1FNDAwMF9DTlRfQ1RSTF9SRUcJCQkweDAzCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgUExYIGJhc2UgcmVnaXN0ZXIgb2Zmc2V0cworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIFBMWF9JTlRDU1IJMHg0QwkvLyBJbnRlcnJ1cHQgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyCisjZGVmaW5lIFBMWF9JQ1IJCTB4NTAJLy8gSW5pdGlhbGl6YXRpb24gY29udHJvbCByZWdpc3RlcgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEJpdHMgZm9yIHRoZSBQTFhfSUNTUiByZWdpc3RlcgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMV9FTiAgICAgICAgICAgICAweDAxCS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDEgaXMgZW5hYmxlZCAoci93KQorI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDFfUE9MICAgICAgICAgICAgMHgwMgkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAxIHBvbGFyaXR5IGlzIGFjdGl2ZSBoaWdoIChyL3cpCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMV9TVEFURSAgICAgICAgICAweDA0CS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDEgaXMgYWN0aXZlIChyL18pCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMl9FTiAgICAgICAgICAgICAweDA4CS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDIgaXMgZW5hYmxlZCAoci93KQorI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDJfUE9MICAgICAgICAgICAgMHgxMAkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAyIHBvbGFyaXR5IGlzIGFjdGl2ZSBoaWdoIChyL3cpCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMl9TVEFURSAgICAgICAgICAweDIwCS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDIgaXMgYWN0aXZlICAoci9fKQorI2RlZmluZSBQTFhfSU5UQ1NSX1BDSV9JTlRfRU4gICAgICAgICAgICAgICAgMHg0MAkvLyBJZiBzZXQsIFBDSSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCAoci93KQorI2RlZmluZSBQTFhfSU5UQ1NSX1NPRlRfSU5UICAgICAgICAgICAgICAgICAgMHg4MAkvLyBJZiBzZXQsIGEgc29mdHdhcmUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCAoci93KQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEJpdHMgZm9yIHRoZSBQTFhfSUNSIHJlZ2lzdGVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgUExYX0lDUl9CSVRfRUVQUk9NX0NMT0NLX1NFVAkJMHgwMTAwMDAwMAorI2RlZmluZSBQTFhfSUNSX0JJVF9FRVBST01fQ0hJUF9TRUxFQ1QJCTB4MDIwMDAwMDAKKyNkZWZpbmUgUExYX0lDUl9CSVRfRUVQUk9NX1dSSVRFCQkweDA0MDAwMDAwCisjZGVmaW5lIFBMWF9JQ1JfQklUX0VFUFJPTV9SRUFECQkJMHgwODAwMDAwMAorI2RlZmluZSBQTFhfSUNSX0JJVF9FRVBST01fVkFMSUQJCTB4MTAwMDAwMDAKKworI2RlZmluZSBQTFhfSUNSX01BU0tfRUVQUk9NCQkJMHgxRjAwMDAwMAorCisjZGVmaW5lIEVFUFJPTV9ERUxBWQkJCQkxCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQml0cyBmb3IgdGhlIE1FNDAwMF9BT19DVFJMX1JFRyByZWdpc3RlcgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9NT0RFXzAJCTB4MDAxCisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9NT0RFXzEJCTB4MDAyCisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX01BU0tfTU9ERQkJMHgwMDMKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AJCQkweDAwNAorI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk8JCTB4MDA4CisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRVhfVFJJRwkweDAxMAorI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfRVhfVFJJR19FREdFCQkweDAyMAorI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AJMHgwODAKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9ETwkJMHgxMDAKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9JUlEJCTB4MjAwCisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9SRVNFVF9JUlEJCTB4NDAwCisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9FWF9UUklHX0JPVEgJCTB4ODAwCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQml0cyBmb3IgdGhlIE1FNDAwMF9BT19TVEFUVVNfUkVHIHJlZ2lzdGVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNCQkweDAxCisjZGVmaW5lIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZGCQkJMHgwMgorI2RlZmluZSBNRTQwMDBfQU9fU1RBVFVTX0JJVF9IRgkJCTB4MDQKKyNkZWZpbmUgTUU0MDAwX0FPX1NUQVRVU19CSVRfRUYJCQkweDA4CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQml0cyBmb3IgdGhlIE1FNDAwMF9BSV9DVFJMX1JFRyByZWdpc3RlcgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9NT0RFXzAJCTB4MDAwMDAwMDEKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX01PREVfMQkJMHgwMDAwMDAwMgorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfTU9ERV8yCQkweDAwMDAwMDA0CisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9TQU1QTEVfSE9MRAkJMHgwMDAwMDAwOAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AJMHgwMDAwMDAxMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfU1RPUAkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0NIQU5ORUxfRklGTwkJMHgwMDAwMDA0MAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfREFUQV9GSUZPCQkweDAwMDAwMDgwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9GVUxMU0NBTEUJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX09GRlNFVAkJMHgwMDAwMDIwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19BTkFMT0cJMHgwMDAwMDQwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJRwkJMHgwMDAwMDgwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19GQUxMSU5HCTB4MDAwMDEwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0VYX0lSUQkJMHgwMDAwMjAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfSVJRX1JFU0VUCQkweDAwMDA0MDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9MRV9JUlEJCTB4MDAwMDgwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0xFX0lSUV9SRVNFVAkJMHgwMDAxMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJRCQkweDAwMDIwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlFfUkVTRVQJCTB4MDAwNDAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUQkJMHgwMDA4MDAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRX1JFU0VUCQkweDAwMTAwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19SRUxPQUQJCTB4MDAyMDAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfQk9USAkJMHg4MDAwMDAwMAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEJpdHMgZm9yIHRoZSBNRTQwMDBfQUlfU1RBVFVTX1JFRyByZWdpc3RlcgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0NIQU5ORUwJCTB4MDA0MDAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19CSVRfSEZfQ0hBTk5FTAkJMHgwMDgwMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GRl9DSEFOTkVMCQkweDAxMDAwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEJCTB4MDIwMDAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19CSVRfSEZfREFUQQkJMHgwNDAwMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GRl9EQVRBCQkweDA4MDAwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfQklUX0xFCQkJMHgxMDAwMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00JCTB4MjAwMDAwMDAKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBCaXRzIGZvciB0aGUgTUU0MDAwX0lSUV9TVEFUVVNfUkVHIHJlZ2lzdGVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0lSUV9TVEFUVVNfQklUX0VYCQkweDAxCisjZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9MRQkJMHgwMgorI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfQUlfSEYJCTB4MDQKKyNkZWZpbmUgTUU0MDAwX0lSUV9TVEFUVVNfQklUX0FPXzBfSEYJCTB4MDgKKyNkZWZpbmUgTUU0MDAwX0lSUV9TVEFUVVNfQklUX0FPXzFfSEYJCTB4MTAKKyNkZWZpbmUgTUU0MDAwX0lSUV9TVEFUVVNfQklUX0FPXzJfSEYJCTB4MjAKKyNkZWZpbmUgTUU0MDAwX0lSUV9TVEFUVVNfQklUX0FPXzNfSEYJCTB4NDAKKyNkZWZpbmUgTUU0MDAwX0lSUV9TVEFUVVNfQklUX1NDCQkweDgwCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQml0cyBmb3IgdGhlIE1FNDAwMF9ESU9fQ1RSTF9SRUcgcmVnaXN0ZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMAkJMFgwMDAxCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8xCQkwWDAwMDIKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzIJCTBYMDAwNAorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMwkJMFgwMDA4CisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV80CQkwWDAwMTAKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzUJCTBYMDAyMAorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNgkJMFgwMDQwCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV83CQkwWDAwODAKKworI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX0ZVTkNUSU9OXzAJCTBYMDEwMAorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX0ZVTkNUSU9OXzEJCTBYMDIwMAorCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzAJCTBYMDQwMAorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX0ZJRk9fSElHSF8xCQkwWDA4MDAKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMgkJMFgxMDAwCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzMJCTBYMjAwMAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEJpdHMgZm9yIHRoZSBNRTQwMDBfQ05UX0NUUkxfUkVHIHJlZ2lzdGVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX0JJVF9DT1VOVEVSXzAgIDB4MDAKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX0JJVF9DT1VOVEVSXzEgIDB4NDAKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX0JJVF9DT1VOVEVSXzIgIDB4ODAKKworI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfMCAgICAgMHgwMAkvLyBDaGFuZ2Ugc3RhdGUgaWYgemVybyBjcm9zc2luZworI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfMSAgICAgMHgwMgkvLyBSZXRyaWdnZXJhYmxlIE9uZS1TaG90CisjZGVmaW5lIE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV8yICAgICAweDA0CS8vIEFzeW1tZXRyaWNhbCBkaXZpZGVyCisjZGVmaW5lIE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV8zICAgICAweDA2CS8vIFN5bW1ldHJpY2FsIGRpdmlkZXIKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzQgICAgIDB4MDgJLy8gQ291bnRlciBzdGFydCBieSBzb2Z0d2FyZSB0cmlnZ2VyCisjZGVmaW5lIE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV81ICAgICAweDBBCS8vIENvdW50ZXIgc3RhcnQgYnkgaGFyZHdhcmUgdHJpZ2dlcgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSBtaW5vciBkZXZpY2UgbnVtYmVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgQU9fQk9BUkQoZGV2KSAoKE1JTk9SKGRldikgPj4gNikgJiAweDMpCisjZGVmaW5lIEFPX1BPUlQoZGV2KSAgKChNSU5PUihkZXYpID4+IDIpICYgMHhGKQorI2RlZmluZSBBT19NT0RFKGRldikgIChNSU5PUihkZXYpICYgMHgzKQorCisjZGVmaW5lIEFJX0JPQVJEKGRldikgKChNSU5PUihkZXYpID4+IDMpICYgMHgxRikKKyNkZWZpbmUgQUlfTU9ERShkZXYpICAoTUlOT1IoZGV2KSAmIDB4NykKKworI2RlZmluZSBESU9fQk9BUkQoZGV2KSAoTUlOT1IoZGV2KSkKKworI2RlZmluZSBDTlRfQk9BUkQoZGV2KSAoTUlOT1IoZGV2KSkKKworI2RlZmluZSBFWFRfSU5UX0JPQVJEKGRldikgKE1JTk9SKGRldikpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQ2lyY3VsYXIgYnVmZmVyIHVzZWQgZm9yIGFuYWxvZyBpbnB1dC9vdXRwdXQgcmVhZHMvd3JpdGVzLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfY2lyY19idWYgeworCXMxNiAqYnVmOworCWludCB2b2xhdGlsZSBoZWFkOworCWludCB2b2xhdGlsZSB0YWlsOworfSBtZTQwMDBfY2lyY19idWZfdDsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBJbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9hb19pbmZvIHsKKwlpbnQgY291bnQ7CisJaW50IGZpZm9fY291bnQ7Cit9IG1lNDAwMF9hb19pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9haV9pbmZvIHsKKwlpbnQgY291bnQ7CisJaW50IHNoX2NvdW50OworCWludCBkaWZmX2NvdW50OworCWludCBleF90cmlnX2FuYWxvZzsKK30gbWU0MDAwX2FpX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2Rpb19pbmZvIHsKKwlpbnQgY291bnQ7Cit9IG1lNDAwMF9kaW9faW5mb190OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfY250X2luZm8geworCWludCBjb3VudDsKK30gbWU0MDAwX2NudF9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9ib2FyZCB7CisJdTE2IHZlbmRvcl9pZDsKKwl1MTYgZGV2aWNlX2lkOworCW1lNDAwMF9hb19pbmZvX3QgYW87CisJbWU0MDAwX2FpX2luZm9fdCBhaTsKKwltZTQwMDBfZGlvX2luZm9fdCBkaW87CisJbWU0MDAwX2NudF9pbmZvX3QgY250OworfSBtZTQwMDBfYm9hcmRfdDsKKworc3RhdGljIG1lNDAwMF9ib2FyZF90IG1lNDAwMF9ib2FyZHNbXSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjEwLCB7MCwgMH0sIHsxNiwgMCwgMCwgMH0sIHs0fSwgezN9fSwKKworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NTAsIHswLCAwfSwgezE2LCAwLCAwLCAwfSwgezR9LCB7MH19LAorCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY2MCwgezIsIDB9LCB7MTYsIDAsIDAsIDB9LCB7NH0sIHszfX0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY2MSwgezIsIDB9LCB7MTYsIDAsIDAsIDB9LCB7NH0sIHszfX0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY2MiwgezIsIDB9LCB7MTYsIDgsIDAsIDB9LCB7NH0sIHszfX0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY2MywgezIsIDB9LCB7MTYsIDgsIDAsIDB9LCB7NH0sIHszfX0sCisKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjcwLCB7NCwgMH0sIHszMiwgMCwgMTYsIDF9LCB7NH0sIHszfX0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY3MSwgezQsIDB9LCB7MzIsIDAsIDE2LCAxfSwgezR9LCB7M319LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NzIsIHs0LCAwfSwgezMyLCA4LCAxNiwgMX0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjczLCB7NCwgMH0sIHszMiwgOCwgMTYsIDF9LCB7NH0sIHszfX0sCisKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjgwLCB7NCwgNH0sIHszMiwgMCwgMTYsIDF9LCB7NH0sIHszfX0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY4MSwgezQsIDR9LCB7MzIsIDAsIDE2LCAxfSwgezR9LCB7M319LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODIsIHs0LCA0fSwgezMyLCA4LCAxNiwgMX0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjgzLCB7NCwgNH0sIHszMiwgOCwgMTYsIDF9LCB7NH0sIHszfX0sCisKKwl7MH0sCit9OworCisjZGVmaW5lIE1FNDAwMF9CT0FSRF9WRVJTSU9OUyAoc2l6ZW9mKG1lNDAwMF9ib2FyZHMpIC8gc2l6ZW9mKG1lNDAwMF9ib2FyZF90KSAtIDEpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgUENJIGRldmljZSB0YWJsZS4KKyAgVGhpcyBpcyB1c2VkIGJ5IG1vZHByb2JlIHRvIHRyYW5zbGF0ZSBQQ0kgSURzIHRvIGRyaXZlcnMuCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtZTQwMDBfcGNpX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjcwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjcxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjcyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjczLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWU0MDAwX3BjaV90YWJsZSk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgR2xvYmFsIGJvYXJkIGFuZCBzdWJkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0dXJlcworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfaW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvLyBMaXN0IG9mIGFsbCBkZXRlY3RlZCBib2FyZHMKKwlpbnQgYm9hcmRfY291bnQ7CS8vIEluZGV4IG9mIHRoZSBib2FyZCBhZnRlciBkZXRlY3Rpb24KKworCXVuc2lnbmVkIGxvbmcgcGx4X3JlZ2Jhc2U7CS8vIFBMWCBjb25maWd1cmF0aW9uIHNwYWNlIGJhc2UgYWRkcmVzcworCXVuc2lnbmVkIGxvbmcgbWU0MDAwX3JlZ2Jhc2U7CS8vIEJhc2UgYWRkcmVzcyBvZiB0aGUgTUU0MDAwCisJdW5zaWduZWQgbG9uZyB0aW1lcl9yZWdiYXNlOwkvLyBCYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIGNpcmN1aXQKKwl1bnNpZ25lZCBsb25nIHByb2dyYW1fcmVnYmFzZTsJLy8gQmFzZSBhZGRyZXNzIHRvIHNldCB0aGUgcHJvZ3JhbSBwaW4gZm9yIHRoZSB4aWxpbngKKworCXVuc2lnbmVkIGxvbmcgcGx4X3JlZ2Jhc2Vfc2l6ZTsJLy8gUExYIHJlZ2lzdGVyIHNldCBzcGFjZQorCXVuc2lnbmVkIGxvbmcgbWU0MDAwX3JlZ2Jhc2Vfc2l6ZTsJLy8gTUU0MDAwIHJlZ2lzdGVyIHNldCBzcGFjZQorCXVuc2lnbmVkIGxvbmcgdGltZXJfcmVnYmFzZV9zaXplOwkvLyBUaW1lciBjaXJjdWl0IHJlZ2lzdGVyIHNldCBzcGFjZQorCXVuc2lnbmVkIGxvbmcgcHJvZ3JhbV9yZWdiYXNlX3NpemU7CS8vIFNpemUgb2YgcHJvZ3JhbSBiYXNlIGFkZHJlc3Mgb2YgdGhlIE1FNDAwMAorCisJdW5zaWduZWQgaW50IHNlcmlhbF9ubzsJLy8gU2VyaWFsIG51bWJlciBvZiB0aGUgYm9hcmQKKwl1bnNpZ25lZCBjaGFyIGh3X3JldmlzaW9uOwkvLyBIYXJkd2FyZSByZXZpc2lvbiBvZiB0aGUgYm9hcmQKKwl1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQ7CS8vIE1laWxoYXVzIHZlbmRvciBpZCAoMHgxNDAyKQorCXVuc2lnbmVkIHNob3J0IGRldmljZV9pZDsJLy8gRGV2aWNlIElECisKKwlpbnQgcGNpX2J1c19ubzsJCS8vIFBDSSBidXMgbnVtYmVyCisJaW50IHBjaV9kZXZfbm87CQkvLyBQQ0kgZGV2aWNlIG51bWJlcgorCWludCBwY2lfZnVuY19ubzsJLy8gUENJIGZ1bmN0aW9uIG51bWJlcgorCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3A7CS8vIEdlbmVyYWwgUENJIGluZm9ybWF0aW9uCisKKwltZTQwMDBfYm9hcmRfdCAqYm9hcmRfcDsJLy8gSG9sZHMgdGhlIGJvYXJkIGNhcGFiaWxpdGllcworCisJdW5zaWduZWQgaW50IGlycTsJLy8gSVJRIGFzc2lnbmVkIGZyb20gdGhlIFBDSSBCSU9TCisJdW5zaWduZWQgaW50IGlycV9jb3VudDsJLy8gQ291bnQgb2YgZXh0ZXJuYWwgaW50ZXJydXB0cworCisJc3BpbmxvY2tfdCBwcmVsb2FkX2xvY2s7CS8vIEd1YXJkcyB0aGUgYW5hbG9nIG91dHB1dCBwcmVsb2FkIHJlZ2lzdGVyCisJc3BpbmxvY2tfdCBhaV9jdHJsX2xvY2s7CS8vIEd1YXJkcyB0aGUgYW5hbG9nIGlucHV0IGNvbnRyb2wgcmVnaXN0ZXIKKworCXN0cnVjdCBsaXN0X2hlYWQgYW9fY29udGV4dF9saXN0OwkvLyBMaXN0IHdpdGggYW5hbG9nIG91dHB1dCBzcGVjaWZpYyBjb250ZXh0CisJc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0OwkvLyBBbmFsb2cgaW5wdXQgIHNwZWNpZmljIGNvbnRleHQKKwlzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0ICpkaW9fY29udGV4dDsJLy8gRGlnaXRhbCBJL08gc3BlY2lmaWMgY29udGV4dAorCXN0cnVjdCBtZTQwMDBfY250X2NvbnRleHQgKmNudF9jb250ZXh0OwkvLyBDb3VudGVyIHNwZWNpZmljIGNvbnRleHQKKwlzdHJ1Y3QgbWU0MDAwX2V4dF9pbnRfY29udGV4dCAqZXh0X2ludF9jb250ZXh0OwkvLyBFeHRlcm5hbCBpbnRlcnJ1cHQgc3BlY2lmaWMgY29udGV4dAorfSBtZTQwMDBfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvLyBsaW5rZWQgbGlzdCBvZiBtZTQwMDBfYW9fY29udGV4dF90CisJaW50IGluZGV4OwkJLy8gSW5kZXggaW4gdGhlIGxpc3QKKwlpbnQgbW9kZTsJCS8vIEluZGljYXRlcyBtb2RlICgwID0gc2luZ2xlLCAxID0gd3JhcGFyb3VuZCwgMiA9IGNvbnRpbm91cykKKwlpbnQgZGFjX2luX3VzZTsJCS8vIEluZGljYXRlcyBpZiBhbHJlYWR5IG9wZW5kCisJc3BpbmxvY2tfdCB1c2VfbG9jazsJLy8gR3VhcmRzIGluX3VzZQorCXNwaW5sb2NrX3QgaW50X2xvY2s7CS8vIFVzZWQgd2hlbiBsb2NraW5nIG91dCBpbnRlcnJ1cHRzCisJbWU0MDAwX2NpcmNfYnVmX3QgY2lyY19idWY7CS8vIENpcmN1bGFyIGJ1ZmZlcgorCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcXVldWU7CS8vIFdhaXQgcXVldWUgdG8gc2xlZXAgd2hpbGUgYmxvY2tpbmcgd3JpdGUKKwltZTQwMDBfaW5mb190ICpib2FyZF9pbmZvOworCXVuc2lnbmVkIGludCBpcnE7CS8vIFRoZSBpcnEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQURDCisJaW50IHZvbGF0aWxlIHBpcGVfZmxhZzsJLy8gSW5kaWNhdGVzIGJyb2tlbiBwaXBlIHNldCBmcm9tIG1lNDAwMF9hb19pc3IoKQorCXVuc2lnbmVkIGxvbmcgY3RybF9yZWc7CisJdW5zaWduZWQgbG9uZyBzdGF0dXNfcmVnOworCXVuc2lnbmVkIGxvbmcgZmlmb19yZWc7CisJdW5zaWduZWQgbG9uZyBzaW5nbGVfcmVnOworCXVuc2lnbmVkIGxvbmcgdGltZXJfcmVnOworCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXR1c19yZWc7CisJdW5zaWduZWQgbG9uZyBwcmVsb2FkX3JlZzsKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jX3A7CS8vIFF1ZXVlIGZvciBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9uCit9IG1lNDAwMF9hb19jb250ZXh0X3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9haV9jb250ZXh0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8vIGxpbmtlZCBsaXN0IG9mIG1lNDAwMF9haV9pbmZvX3QKKwlpbnQgbW9kZTsJCS8vIEluZGljYXRlcyBtb2RlCisJaW50IGluX3VzZTsJCS8vIEluZGljYXRlcyBpZiBhbHJlYWR5IG9wZW5kCisJc3BpbmxvY2tfdCB1c2VfbG9jazsJLy8gR3VhcmRzIGluX3VzZQorCXNwaW5sb2NrX3QgaW50X2xvY2s7CS8vIFVzZWQgd2hlbiBsb2NraW5nIG91dCBpbnRlcnJ1cHRzCisJaW50IG51bWJlcjsJCS8vIE51bWJlciBvZiB0aGUgREFDCisJdW5zaWduZWQgaW50IGlycTsJLy8gVGhlIGlycSBhc3NvY2lhdGVkIHdpdGggdGhpcyBBREMKKwltZTQwMDBfY2lyY19idWZfdCBjaXJjX2J1ZjsJLy8gQ2lyY3VsYXIgYnVmZmVyCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xdWV1ZTsJLy8gV2FpdCBxdWV1ZSB0byBzbGVlcCB3aGlsZSBibG9ja2luZyByZWFkCisJbWU0MDAwX2luZm9fdCAqYm9hcmRfaW5mbzsKKworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfcDsJLy8gUXVldWUgZm9yIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24KKworCXVuc2lnbmVkIGxvbmcgY3RybF9yZWc7CisJdW5zaWduZWQgbG9uZyBzdGF0dXNfcmVnOworCXVuc2lnbmVkIGxvbmcgY2hhbm5lbF9saXN0X3JlZzsKKwl1bnNpZ25lZCBsb25nIGRhdGFfcmVnOworCXVuc2lnbmVkIGxvbmcgY2hhbl90aW1lcl9yZWc7CisJdW5zaWduZWQgbG9uZyBjaGFuX3ByZV90aW1lcl9yZWc7CisJdW5zaWduZWQgbG9uZyBzY2FuX3RpbWVyX2xvd19yZWc7CisJdW5zaWduZWQgbG9uZyBzY2FuX3RpbWVyX2hpZ2hfcmVnOworCXVuc2lnbmVkIGxvbmcgc2Nhbl9wcmVfdGltZXJfbG93X3JlZzsKKwl1bnNpZ25lZCBsb25nIHNjYW5fcHJlX3RpbWVyX2hpZ2hfcmVnOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcmVnOworCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXR1c19yZWc7CisJdW5zaWduZWQgbG9uZyBzYW1wbGVfY291bnRlcl9yZWc7CisKKwl1bnNpZ25lZCBsb25nIGNoYW5fdGltZXI7CisJdW5zaWduZWQgbG9uZyBjaGFuX3ByZV90aW1lcjsKKwl1bnNpZ25lZCBsb25nIHNjYW5fdGltZXJfbG93OworCXVuc2lnbmVkIGxvbmcgc2Nhbl90aW1lcl9oaWdoOworCXVuc2lnbmVkIGxvbmcgY2hhbm5lbF9saXN0X2NvdW50OworCXVuc2lnbmVkIGxvbmcgc2FtcGxlX2NvdW50ZXI7CisJaW50IHNhbXBsZV9jb3VudGVyX3JlbG9hZDsKK30gbWU0MDAwX2FpX2NvbnRleHRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8vIGxpbmtlZCBsaXN0IG9mIG1lNDAwMF9kaW9fY29udGV4dF90CisJaW50IGluX3VzZTsJCS8vIEluZGljYXRlcyBpZiBhbHJlYWR5IG9wZW5kCisJc3BpbmxvY2tfdCB1c2VfbG9jazsJLy8gR3VhcmRzIGluX3VzZQorCWludCBudW1iZXI7CisJaW50IGRpb19jb3VudDsKKwltZTQwMDBfaW5mb190ICpib2FyZF9pbmZvOworCXVuc2lnbmVkIGxvbmcgZGlyX3JlZzsKKwl1bnNpZ25lZCBsb25nIGN0cmxfcmVnOworCXVuc2lnbmVkIGxvbmcgcG9ydF8wX3JlZzsKKwl1bnNpZ25lZCBsb25nIHBvcnRfMV9yZWc7CisJdW5zaWduZWQgbG9uZyBwb3J0XzJfcmVnOworCXVuc2lnbmVkIGxvbmcgcG9ydF8zX3JlZzsKK30gbWU0MDAwX2Rpb19jb250ZXh0X3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvLyBsaW5rZWQgbGlzdCBvZiBtZTQwMDBfZGlvX2NvbnRleHRfdAorCWludCBpbl91c2U7CQkvLyBJbmRpY2F0ZXMgaWYgYWxyZWFkeSBvcGVuZAorCXNwaW5sb2NrX3QgdXNlX2xvY2s7CS8vIEd1YXJkcyBpbl91c2UKKwlpbnQgbnVtYmVyOworCWludCBjbnRfY291bnQ7CisJbWU0MDAwX2luZm9fdCAqYm9hcmRfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGN0cmxfcmVnOworCXVuc2lnbmVkIGxvbmcgY291bnRlcl8wX3JlZzsKKwl1bnNpZ25lZCBsb25nIGNvdW50ZXJfMV9yZWc7CisJdW5zaWduZWQgbG9uZyBjb3VudGVyXzJfcmVnOworfSBtZTQwMDBfY250X2NvbnRleHRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2V4dF9pbnRfY29udGV4dCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvLyBsaW5rZWQgbGlzdCBvZiBtZTQwMDBfZGlvX2NvbnRleHRfdAorCWludCBpbl91c2U7CQkvLyBJbmRpY2F0ZXMgaWYgYWxyZWFkeSBvcGVuZAorCXNwaW5sb2NrX3QgdXNlX2xvY2s7CS8vIEd1YXJkcyBpbl91c2UKKwlpbnQgbnVtYmVyOworCW1lNDAwMF9pbmZvX3QgKmJvYXJkX2luZm87CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBsb25nIGludF9jb3VudDsKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jX3B0cjsKKwl1bnNpZ25lZCBsb25nIGN0cmxfcmVnOworCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXR1c19yZWc7Cit9IG1lNDAwMF9leHRfaW50X2NvbnRleHRfdDsKKworI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQXBwbGljYXRpb24gaW5jbHVkZSBzZWN0aW9uIHN0YXJ0cyBoZXJlCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGVmaW5lcyBmb3IgYW5hbG9nIGlucHV0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHZW5lcmFsIHN0dWZmICovCisjZGVmaW5lIE1FNDAwMF9BSV9GSUZPX0NPVU5UCQkyMDQ4CisKKyNkZWZpbmUgTUU0MDAwX0FJX01JTl9USUNLUwkJNjYKKyNkZWZpbmUgTUU0MDAwX0FJX01BWF9TQ0FOX1RJQ0tTCTB4RkZGRkZGRkZGRkxMCisKKyNkZWZpbmUgTUU0MDAwX0FJX0JVRkZFUl9TSVpFIAkJKDMyICogMTAyNCkJLy8gU2l6ZSBpbiBieXRlcworCisjZGVmaW5lIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQJCSgoTUU0MDAwX0FJX0JVRkZFUl9TSVpFKSAvIDIpCS8vIFNpemUgaW4gdmFsdWVzCisKKy8qIENoYW5uZWwgbGlzdCBkZWZpbmVzIGFuZCBtYXNrcyAqLworI2RlZmluZSBNRTQwMDBfQUlfQ0hBTk5FTF9MSVNUX0NPVU5UCQkxMDI0CisKKyNkZWZpbmUgTUU0MDAwX0FJX0xJU1RfSU5QVVRfU0lOR0xFX0VOREVECTB4MDAwCisjZGVmaW5lIE1FNDAwMF9BSV9MSVNUX0lOUFVUX0RJRkZFUkVOVElBTAkweDAyMAorCisjZGVmaW5lIE1FNDAwMF9BSV9MSVNUX1JBTkdFX0JJUE9MQVJfMTAJCTB4MDAwCisjZGVmaW5lIE1FNDAwMF9BSV9MSVNUX1JBTkdFX0JJUE9MQVJfMl81CTB4MDQwCisjZGVmaW5lIE1FNDAwMF9BSV9MSVNUX1JBTkdFX1VOSVBPTEFSXzEwCTB4MDgwCisjZGVmaW5lIE1FNDAwMF9BSV9MSVNUX1JBTkdFX1VOSVBPTEFSXzJfNQkweDBDMAorCisjZGVmaW5lIE1FNDAwMF9BSV9MSVNUX0xBU1RfRU5UUlkJCTB4MTAwCisKKy8qIEV4dGVybmFsIHRyaWdnZXIgZGVmaW5lcyAqLworI2RlZmluZSBNRTQwMDBfQUlfVFJJR0dFUl9TT0ZUV0FSRQkJMHgwCS8vIFVzZSBvbmx5IHdpdGggQVBJCisjZGVmaW5lIE1FNDAwMF9BSV9UUklHR0VSX0VYVF9ESUdJVEFMCQkweDEKKyNkZWZpbmUgTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0FOQUxPRwkJMHgyCisKKyNkZWZpbmUgTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0VER0VfUklTSU5HCTB4MAorI2RlZmluZSBNRTQwMDBfQUlfVFJJR0dFUl9FWFRfRURHRV9GQUxMSU5HCTB4MQorI2RlZmluZSBNRTQwMDBfQUlfVFJJR0dFUl9FWFRfRURHRV9CT1RICQkweDIKKworLyogU2FtcGxlIGFuZCBIb2xkICovCisjZGVmaW5lIE1FNDAwMF9BSV9TSU1VTFRBTkVPVVNfRElTQUJMRQkJMHgwCisjZGVmaW5lIE1FNDAwMF9BSV9TSU1VTFRBTkVPVVNfRU5BQkxFCQkweDEKKworLyogRGVmaW5lcyBmb3IgdGhlIFNhbXBsZSBDb3VudGVyICovCisjZGVmaW5lIE1FNDAwMF9BSV9TQ19SRUxPQUQJCQkweDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NDX09OQ0UJCQkweDEKKworLyogTW9kZXMgZm9yIGFuYWxvZyBpbnB1dCAqLworI2RlZmluZSBNRTQwMDBfQUlfQUNRX01PREVfU0lOR0xFCQkweDAwCS8vIENhdGNoIG9uZSBzaW5nbGUgdmFsdWUKKyNkZWZpbmUgTUU0MDAwX0FJX0FDUV9NT0RFX1NPRlRXQVJFCQkweDAxCS8vIENvbnRpbm91cyBzYW1wbGluZyB3aXRoIHNvZnR3YXJlIHN0YXJ0CisjZGVmaW5lIE1FNDAwMF9BSV9BQ1FfTU9ERV9FWFQJCQkweDAyCS8vIENvbnRpbm91cyBzYW1wbGluZyB3aXRoIGV4dGVybmFsIHRyaWdnZXIgc3RhcnQKKyNkZWZpbmUgTUU0MDAwX0FJX0FDUV9NT0RFX0VYVF9TSU5HTEVfVkFMVUUJMHgwMwkvLyBTYW1wbGUgb25lIHZhbHVlIGJ5IGV4dGVybmFsIHRyaWdnZXIKKyNkZWZpbmUgTUU0MDAwX0FJX0FDUV9NT0RFX0VYVF9TSU5HTEVfQ0hBTkxJU1QJMHgwNAkvLyBTYW1wbGUgb25lIGNoYW5uZWwgbGlzdCBieSBleHRlcm5hbCB0cmlnZ2VyCisKKy8qIFN0YXVzIG9mIEFJIEZTTSAqLworI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX0lETEUJCQkweDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19CVVNZCQkJMHgxCisKKy8qIFZvbHRhZ2VzIGZvciBjYWxpYnJhdGlvbiAqLworI2RlZmluZSBNRTQwMDBfQUlfR0FJTl8xX1VOSV9PRkZTRVQJCTEwLjBFLTMKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fMV9VTklfRlVMTFNDQUxFCQk5OTUwLjBFLTMKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fMV9CSV9PRkZTRVQJCTAuMAorI2RlZmluZSBNRTQwMDBfQUlfR0FJTl8xX0JJX0ZVTExTQ0FMRQkJOTk1MC4wRS0zCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzRfVU5JX09GRlNFVAkJMTAuMEUtMworI2RlZmluZSBNRTQwMDBfQUlfR0FJTl80X1VOSV9GVUxMU0NBTEUJCTI0NTAuMEUtMworI2RlZmluZSBNRTQwMDBfQUlfR0FJTl80X0JJX09GRlNFVAkJMC4wCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzRfQklfRlVMTFNDQUxFCQkyNDUwLjBFLTMKKworLyogSWRlYWwgZGlnaXRzIGZvciBjYWxpYnJhdGlvbiAqLworI2RlZmluZSBNRTQwMDBfQUlfR0FJTl8xX1VOSV9PRkZTRVRfRElHSVRTCSgtMzI3MDIpCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzFfVU5JX0ZVTExTQ0FMRV9ESUdJVFMJMzI0NDAKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fMV9CSV9PRkZTRVRfRElHSVRTCTAKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fMV9CSV9GVUxMU0NBTEVfRElHSVRTCTMyNjA0CisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzRfVU5JX09GRlNFVF9ESUdJVFMJKC0zMjUwNSkKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fNF9VTklfRlVMTFNDQUxFX0RJR0lUUwkzMTQ1NworI2RlZmluZSBNRTQwMDBfQUlfR0FJTl80X0JJX09GRlNFVF9ESUdJVFMJMAorI2RlZmluZSBNRTQwMDBfQUlfR0FJTl80X0JJX0ZVTExTQ0FMRV9ESUdJVFMJMzIxMTMKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEZWZpbmVzIGZvciBhbmFsb2cgb3V0cHV0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHZW5lcmFsIHN0dWZmICovCisjZGVmaW5lIE1FNDAwMF9BT19GSUZPX0NPVU5UCQkJKDQgKiAxMDI0KQorCisjZGVmaW5lIE1FNDAwMF9BT19NSU5fVElDS1MJCQk2NgorCisjZGVmaW5lIE1FNDAwMF9BT19CVUZGRVJfU0laRSAJCQkoMzIgKiAxMDI0KQkvLyBTaXplIGluIGJ5dGVzCisKKyNkZWZpbmUgTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCAJCQkoKE1FNDAwMF9BT19CVUZGRVJfU0laRSkgLyAyKQkvLyBTaXplIGluIHZhbHVlcworCisvKiBDb252ZXJzaW9uIG1vZGVzIGZvciBhbmFsb2cgb3V0cHV0ICovCisjZGVmaW5lIE1FNDAwMF9BT19DT05WX01PREVfU0lOR0xFCQkweDAKKyNkZWZpbmUgTUU0MDAwX0FPX0NPTlZfTU9ERV9XUkFQQVJPVU5ECQkweDEKKyNkZWZpbmUgTUU0MDAwX0FPX0NPTlZfTU9ERV9DT05USU5VT1VTCQkweDIKKworLyogVHJpZ2dlciBzZXR1cCAqLworI2RlZmluZSBNRTQwMDBfQU9fVFJJR0dFUl9FWFRfRURHRV9SSVNJTkcJMHgwCisjZGVmaW5lIE1FNDAwMF9BT19UUklHR0VSX0VYVF9FREdFX0ZBTExJTkcJMHgxCisjZGVmaW5lIE1FNDAwMF9BT19UUklHR0VSX0VYVF9FREdFX0JPVEgJCTB4MgorCisvKiBTdGF0dXMgb2YgQU8gRlNNICovCisjZGVmaW5lIE1FNDAwMF9BT19TVEFUVVNfSURMRQkJCTB4MAorI2RlZmluZSBNRTQwMDBfQU9fU1RBVFVTX0JVU1kJCQkweDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEZWZpbmVzIGZvciBlZXByb20KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9DTURfUkVBRAkJCTB4MTgwCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFX0VOQUJMRQkJMHgxMzAKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEVfRElTQUJMRQkJMHgxMDAKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUJCQkweDE0MDAwMDAKKworI2RlZmluZSBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRAkJOQorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEVfRU5BQkxFCTkKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFX0RJU0FCTEUJOQorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUJCTI1CisKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfREFURV9ISUdICQkweDMyCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0RBVEVfTE9XCQkweDMzCisKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX1VOSV9PRkZTRVQJMHgzNAorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfVU5JX0ZVTExTQ0FMRQkweDM1CisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9CSV9PRkZTRVQJMHgzNgorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfQklfRlVMTFNDQUxFCTB4MzcKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0RJRkZfT0ZGU0VUCTB4MzgKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0RJRkZfRlVMTFNDQUxFCTB4MzkKKworI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfVU5JX09GRlNFVAkweDNBCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9VTklfRlVMTFNDQUxFCTB4M0IKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0JJX09GRlNFVAkweDNDCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9CSV9GVUxMU0NBTEUJMHgzRAorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfRElGRl9PRkZTRVQJMHgzRQorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfRElGRl9GVUxMU0NBTEUJMHgzRgorCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0xFTkdUSAkJNgorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RICQkxNgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIERlZmluZXMgZm9yIGRpZ2l0YWwgSS9PCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF9BCQkweDAKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUX0IJCTB4MQorI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfQwkJMHgyCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF9ECQkweDMKKworI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfSU5QVVQJCTB4MAorI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfT1VUUFVUCQkweDEKKyNkZWZpbmUgTUU0MDAwX0RJT19GSUZPX0xPVwkJMHgyCisjZGVmaW5lIE1FNDAwMF9ESU9fRklGT19ISUdICQkweDMKKworI2RlZmluZSBNRTQwMDBfRElPX0ZVTkNUSU9OX1BBVFRFUk4JMHgwCisjZGVmaW5lIE1FNDAwMF9ESU9fRlVOQ1RJT05fREVNVVgJMHgxCisjZGVmaW5lIE1FNDAwMF9ESU9fRlVOQ1RJT05fTVVYCQkweDIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEZWZpbmVzIGZvciBjb3VudGVycworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBNRTQwMDBfQ05UX0NPVU5URVJfMCAgMAorI2RlZmluZSBNRTQwMDBfQ05UX0NPVU5URVJfMSAgMQorI2RlZmluZSBNRTQwMDBfQ05UX0NPVU5URVJfMiAgMgorCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV8wICAgICAwCS8vIENoYW5nZSBzdGF0ZSBpZiB6ZXJvIGNyb3NzaW5nCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV8xICAgICAxCS8vIFJldHJpZ2dlcmFibGUgT25lLVNob3QKKyNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzIgICAgIDIJLy8gQXN5bW1ldHJpY2FsIGRpdmlkZXIKKyNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzMgICAgIDMJLy8gU3ltbWV0cmljYWwgZGl2aWRlcgorI2RlZmluZSBNRTQwMDBfQ05UX01PREVfNCAgICAgNAkvLyBDb3VudGVyIHN0YXJ0IGJ5IHNvZnR3YXJlIHRyaWdnZXIKKyNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzUgICAgIDUJLy8gQ291bnRlciBzdGFydCBieSBoYXJkd2FyZSB0cmlnZ2VyCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgR2VuZXJhbCB0eXBlIGRlZmluaXRpb25zCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfdXNlcl9pbmZvIHsKKwlpbnQgYm9hcmRfY291bnQ7CS8vIEluZGV4IG9mIHRoZSBib2FyZCBhZnRlciBkZXRlY3Rpb24KKwl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlOwkvLyBQTFggY29uZmlndXJhdGlvbiBzcGFjZSBiYXNlIGFkZHJlc3MKKwl1bnNpZ25lZCBsb25nIG1lNDAwMF9yZWdiYXNlOwkvLyBCYXNlIGFkZHJlc3Mgb2YgdGhlIE1FNDAwMAorCXVuc2lnbmVkIGxvbmcgcGx4X3JlZ2Jhc2Vfc2l6ZTsJLy8gUExYIHJlZ2lzdGVyIHNldCBzcGFjZQorCXVuc2lnbmVkIGxvbmcgbWU0MDAwX3JlZ2Jhc2Vfc2l6ZTsJLy8gTUU0MDAwIHJlZ2lzdGVyIHNldCBzcGFjZQorCXVuc2lnbmVkIGxvbmcgc2VyaWFsX25vOwkvLyBTZXJpYWwgbnVtYmVyIG9mIHRoZSBib2FyZAorCXVuc2lnbmVkIGNoYXIgaHdfcmV2aXNpb247CS8vIEhhcmR3YXJlIHJldmlzaW9uIG9mIHRoZSBib2FyZAorCXVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZDsJLy8gTWVpbGhhdXMgdmVuZG9yIGlkICgweDE0MDIpCisJdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkOwkvLyBEZXZpY2UgSUQKKwlpbnQgcGNpX2J1c19ubzsJCS8vIFBDSSBidXMgbnVtYmVyCisJaW50IHBjaV9kZXZfbm87CQkvLyBQQ0kgZGV2aWNlIG51bWJlcgorCWludCBwY2lfZnVuY19ubzsJLy8gUENJIGZ1bmN0aW9uIG51bWJlcgorCWNoYXIgaXJxOwkJLy8gSVJRIGFzc2lnbmVkIGZyb20gdGhlIFBDSSBCSU9TCisJaW50IGlycV9jb3VudDsJCS8vIENvdW50IG9mIGV4dGVybmFsIGludGVycnVwdHMKKworCWludCBkcml2ZXJfdmVyc2lvbjsJLy8gVmVyc2lvbiBvZiB0aGUgZHJpdmVyIHJlbGVhc2UKKworCWludCBhb19jb3VudDsJCS8vIENvdW50IG9mIGFuYWxvZyBvdXRwdXQgY2hhbm5lbHMKKwlpbnQgYW9fZmlmb19jb3VudDsJLy8gQ291bnQgZm8gYW5hbG9nIG91dHB1dCBmaWZvcworCisJaW50IGFpX2NvdW50OwkJLy8gQ291bnQgb2YgYW5hbG9nIGlucHV0IGNoYW5uZWxzCisJaW50IGFpX3NoX2NvdW50OwkvLyBDb3VudCBvZiBzYW1wbGUgYW5kIGhvbGQgZGV2aWNlcworCWludCBhaV9leF90cmlnX2FuYWxvZzsJLy8gRmxhZyB0byBpbmRpY2F0ZSBpZiBhbmFsb2dvdXMgZXh0ZXJuYWwgdHJpZ2dlciBpcyBhdmFpbGFibGUKKworCWludCBkaW9fY291bnQ7CQkvLyBDb3VudCBvZiBkaWdpdGFsIEkvTyBwb3J0cworCisJaW50IGNudF9jb3VudDsJCS8vIENvdW50IG9mIGNvdW50ZXJzCit9IG1lNDAwMF91c2VyX2luZm9fdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUeXBlIGRlZmluaXRpb25zIGZvciBhbmFsb2cgb3V0cHV0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfYW9fY2hhbm5lbF9saXN0IHsKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCXVuc2lnbmVkIGxvbmcgKmxpc3Q7Cit9IG1lNDAwMF9hb19jaGFubmVsX2xpc3RfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUeXBlIGRlZmluaXRpb25zIGZvciBhbmFsb2cgaW5wdXQKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9haV9jaGFubmVsX2xpc3QgeworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisJdW5zaWduZWQgbG9uZyAqbGlzdDsKK30gbWU0MDAwX2FpX2NoYW5uZWxfbGlzdF90OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfYWlfdGltZXIgeworCXVuc2lnbmVkIGxvbmcgcHJlX2NoYW47CisJdW5zaWduZWQgbG9uZyBjaGFuOworCXVuc2lnbmVkIGxvbmcgc2Nhbl9sb3c7CisJdW5zaWduZWQgbG9uZyBzY2FuX2hpZ2g7Cit9IG1lNDAwMF9haV90aW1lcl90OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfYWlfY29uZmlnIHsKKwltZTQwMDBfYWlfdGltZXJfdCB0aW1lcjsKKwltZTQwMDBfYWlfY2hhbm5lbF9saXN0X3QgY2hhbm5lbF9saXN0OworCWludCBzaDsKK30gbWU0MDAwX2FpX2NvbmZpZ190OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfYWlfc2luZ2xlIHsKKwlpbnQgY2hhbm5lbDsKKwlpbnQgcmFuZ2U7CisJaW50IG1vZGU7CisJc2hvcnQgdmFsdWU7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworfSBtZTQwMDBfYWlfc2luZ2xlX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9haV90cmlnZ2VyIHsKKwlpbnQgbW9kZTsKKwlpbnQgZWRnZTsKK30gbWU0MDAwX2FpX3RyaWdnZXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2FpX3NjIHsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCWludCByZWxvYWQ7Cit9IG1lNDAwMF9haV9zY190OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIGVlcHJvbQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2VlcHJvbSB7CisJdW5zaWduZWQgbG9uZyBkYXRlOworCXNob3J0IHVuaV8xMF9vZmZzZXQ7CisJc2hvcnQgdW5pXzEwX2Z1bGxzY2FsZTsKKwlzaG9ydCB1bmlfMl81X29mZnNldDsKKwlzaG9ydCB1bmlfMl81X2Z1bGxzY2FsZTsKKwlzaG9ydCBiaV8xMF9vZmZzZXQ7CisJc2hvcnQgYmlfMTBfZnVsbHNjYWxlOworCXNob3J0IGJpXzJfNV9vZmZzZXQ7CisJc2hvcnQgYmlfMl81X2Z1bGxzY2FsZTsKKwlzaG9ydCBkaWZmXzEwX29mZnNldDsKKwlzaG9ydCBkaWZmXzEwX2Z1bGxzY2FsZTsKKwlzaG9ydCBkaWZmXzJfNV9vZmZzZXQ7CisJc2hvcnQgZGlmZl8yXzVfZnVsbHNjYWxlOworfSBtZTQwMDBfZWVwcm9tX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVHlwZSBkZWZpbml0aW9ucyBmb3IgZGlnaXRhbCBJL08KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9kaW9fY29uZmlnIHsKKwlpbnQgcG9ydDsKKwlpbnQgbW9kZTsKKwlpbnQgZnVuY3Rpb247Cit9IG1lNDAwMF9kaW9fY29uZmlnX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9kaW9fYnl0ZSB7CisJaW50IHBvcnQ7CisJdW5zaWduZWQgY2hhciBieXRlOworfSBtZTQwMDBfZGlvX2J5dGVfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUeXBlIGRlZmluaXRpb25zIGZvciBjb3VudGVycworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2NudCB7CisJaW50IGNvdW50ZXI7CisJdW5zaWduZWQgc2hvcnQgdmFsdWU7Cit9IG1lNDAwMF9jbnRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2NudF9jb25maWcgeworCWludCBjb3VudGVyOworCWludCBtb2RlOworfSBtZTQwMDBfY250X2NvbmZpZ190OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIGV4dGVybmFsIGludGVycnVwdAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBpbnQxX2NvdW50OworCWludCBpbnQyX2NvdW50OworfSBtZTQwMDBfaW50X3R5cGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhlIGlvY3RscyBvZiB0aGUgYm9hcmQKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgTUU0MDAwX0lPQ1RMX01BWE5SIDUwCisjZGVmaW5lIE1FNDAwMF9NQUdJQyAneScKKyNkZWZpbmUgTUU0MDAwX0dFVF9VU0VSX0lORk8gICAgICAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCAwLCBtZTQwMDBfdXNlcl9pbmZvX3QpCisKKyNkZWZpbmUgTUU0MDAwX0FPX1NUQVJUICAgICAgICAgICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCAxLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBNRTQwMDBfQU9fU1RPUCAgICAgICAgICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDIpCisjZGVmaW5lIE1FNDAwMF9BT19JTU1FRElBVEVfU1RPUCAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMykKKyNkZWZpbmUgTUU0MDAwX0FPX1JFU0VUICAgICAgICAgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCA0KQorI2RlZmluZSBNRTQwMDBfQU9fUFJFTE9BRCAgICAgICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDUpCisjZGVmaW5lIE1FNDAwMF9BT19QUkVMT0FEX1VQREFURSAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgNikKKyNkZWZpbmUgTUU0MDAwX0FPX0VYX1RSSUdfRU5BQkxFICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCA3KQorI2RlZmluZSBNRTQwMDBfQU9fRVhfVFJJR19ESVNBQkxFICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDgpCisjZGVmaW5lIE1FNDAwMF9BT19FWF9UUklHX1NFVFVQICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgOSwgaW50KQorI2RlZmluZSBNRTQwMDBfQU9fVElNRVJfU0VUX0RJVklTT1IgICBfSU9XIChNRTQwMDBfTUFHSUMsIDEwLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBNRTQwMDBfQU9fRU5BQkxFX0RPICAgICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDExKQorI2RlZmluZSBNRTQwMDBfQU9fRElTQUJMRV9ETyAgICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDEyKQorI2RlZmluZSBNRTQwMDBfQU9fRlNNX1NUQVRFICAgICAgICAgICBfSU9SIChNRTQwMDBfTUFHSUMsIDEzLCBpbnQpCisKKyNkZWZpbmUgTUU0MDAwX0FJX1NJTkdMRSAgICAgICAgICAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCAxNCwgbWU0MDAwX2FpX3NpbmdsZV90KQorI2RlZmluZSBNRTQwMDBfQUlfU1RBUlQgICAgICAgICAgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDE1LCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBNRTQwMDBfQUlfU1RPUCAgICAgICAgICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDE2KQorI2RlZmluZSBNRTQwMDBfQUlfSU1NRURJQVRFX1NUT1AgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDE3KQorI2RlZmluZSBNRTQwMDBfQUlfRVhfVFJJR19FTkFCTEUgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDE4KQorI2RlZmluZSBNRTQwMDBfQUlfRVhfVFJJR19ESVNBQkxFICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDE5KQorI2RlZmluZSBNRTQwMDBfQUlfRVhfVFJJR19TRVRVUCAgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDIwLCBtZTQwMDBfYWlfdHJpZ2dlcl90KQorI2RlZmluZSBNRTQwMDBfQUlfQ09ORklHICAgICAgICAgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDIxLCBtZTQwMDBfYWlfY29uZmlnX3QpCisjZGVmaW5lIE1FNDAwMF9BSV9TQ19TRVRVUCAgICAgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMjIsIG1lNDAwMF9haV9zY190KQorI2RlZmluZSBNRTQwMDBfQUlfRlNNX1NUQVRFICAgICAgICAgICBfSU9SIChNRTQwMDBfTUFHSUMsIDIzLCBpbnQpCisKKyNkZWZpbmUgTUU0MDAwX0RJT19DT05GSUcgICAgICAgICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCAyNCwgbWU0MDAwX2Rpb19jb25maWdfdCkKKyNkZWZpbmUgTUU0MDAwX0RJT19HRVRfQllURSAgICAgICAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCAyNSwgbWU0MDAwX2Rpb19ieXRlX3QpCisjZGVmaW5lIE1FNDAwMF9ESU9fU0VUX0JZVEUgICAgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMjYsIG1lNDAwMF9kaW9fYnl0ZV90KQorI2RlZmluZSBNRTQwMDBfRElPX1JFU0VUICAgICAgICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDI3KQorCisjZGVmaW5lIE1FNDAwMF9DTlRfUkVBRCAgICAgICAgICAgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgMjgsIG1lNDAwMF9jbnRfdCkKKyNkZWZpbmUgTUU0MDAwX0NOVF9XUklURSAgICAgICAgICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCAyOSwgbWU0MDAwX2NudF90KQorI2RlZmluZSBNRTQwMDBfQ05UX0NPTkZJRyAgICAgICAgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDMwLCBtZTQwMDBfY250X2NvbmZpZ190KQorI2RlZmluZSBNRTQwMDBfQ05UX1JFU0VUICAgICAgICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDMxKQorCisjZGVmaW5lIE1FNDAwMF9FWFRfSU5UX0RJU0FCTEUgICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMzIpCisjZGVmaW5lIE1FNDAwMF9FWFRfSU5UX0VOQUJMRSAgICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgMzMpCisjZGVmaW5lIE1FNDAwMF9FWFRfSU5UX0NPVU5UICAgICAgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgMzQsIGludCkKKworI2RlZmluZSBNRTQwMDBfQUlfT0ZGU0VUX0VOQUJMRSAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDM1KQorI2RlZmluZSBNRTQwMDBfQUlfT0ZGU0VUX0RJU0FCTEUgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDM2KQorI2RlZmluZSBNRTQwMDBfQUlfRlVMTFNDQUxFX0VOQUJMRSAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDM3KQorI2RlZmluZSBNRTQwMDBfQUlfRlVMTFNDQUxFX0RJU0FCTEUgICBfSU8gIChNRTQwMDBfTUFHSUMsIDM4KQorCisjZGVmaW5lIE1FNDAwMF9BSV9FRVBST01fUkVBRCAgICAgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgMzksIG1lNDAwMF9lZXByb21fdCkKKyNkZWZpbmUgTUU0MDAwX0FJX0VFUFJPTV9XUklURSAgICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCA0MCwgbWU0MDAwX2VlcHJvbV90KQorCisjZGVmaW5lIE1FNDAwMF9BT19TSU1VTFRBTkVPVVNfRVhfVFJJRyBfSU8gIChNRTQwMDBfTUFHSUMsIDQxKQorI2RlZmluZSBNRTQwMDBfQU9fU0lNVUxUQU5FT1VTX1NXICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCA0MikKKyNkZWZpbmUgTUU0MDAwX0FPX1NJTVVMVEFORU9VU19ESVNBQkxFIF9JTyAgKE1FNDAwMF9NQUdJQywgNDMpCisjZGVmaW5lIE1FNDAwMF9BT19TSU1VTFRBTkVPVVNfVVBEQVRFICBfSU9XIChNRTQwMDBfTUFHSUMsIDQ0LCBtZTQwMDBfYW9fY2hhbm5lbF9saXN0X3QpCisKKyNkZWZpbmUgTUU0MDAwX0FPX1NZTkNIUk9OT1VTX0VYX1RSSUcgIF9JTyAgKE1FNDAwMF9NQUdJQywgNDUpCisjZGVmaW5lIE1FNDAwMF9BT19TWU5DSFJPTk9VU19TVyAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDQ2KQorI2RlZmluZSBNRTQwMDBfQU9fU1lOQ0hST05PVVNfRElTQUJMRSAgX0lPICAoTUU0MDAwX01BR0lDLCA0NykKKworI2RlZmluZSBNRTQwMDBfQU9fRVhfVFJJR19USU1FT1VUICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCA0OCwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTUU0MDAwX0FPX0dFVF9GUkVFX0JVRkZFUiAgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgNDksIHVuc2lnbmVkIGxvbmcpCisKKyNkZWZpbmUgTUU0MDAwX0FJX0dFVF9DT1VOVF9CVUZGRVIgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgNTAsIHVuc2lnbmVkIGxvbmcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDBfZmlybXdhcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwX2Zpcm13YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjMjNmNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwX2Zpcm13YXJlLmgKQEAgLTAsMCArMSwxMDAzMyBAQAorLyoKKyAgIFRoaXMgZmlsZSBpcyBjb3B5cmlnaHQgYnkgTWVpbGhhdXMgRWxlY3Ryb25pYyBHbWJIIDIwMDMuCisgICBZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUsIHNlbGwsIG1vZGlmeSwgcmV2ZXJzZSBlbmdpbmVlciBvciB1c2UgdGhpcworICAgY29kZSAob3IgcGFydHMgb2YgaXQpIGZvciBhbnkgb3RoZXIgcHVycG9zZSBvciB1bmRlciBhbnkgb3RoZXIgY29uZGl0aW9ucworICAgdGhhbiBzdGF0ZWQgYmVsb3cuCisKKyAgIDEpIFlvdSBhcmUgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGZpbGUgdG9nZXRoZXIKKyAgIHdpdGggZGV2aWNlIGRyaXZlcnMgZm9yIHRoZSBNZWlsaGF1cyBNRS00MDAwLCBib2FyZCBmYW1pbHkuCisKKyAgIDIpIERlcml2ZWQgd29yayAoZGV2aWNlIGRyaXZlcnMgdXNpbmcgdGhpcyBmaWxlKSBjYW4gYmUgcHVibGlzaGVkIHVuZGVyCisgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIEFueSBvdGhlciBsaWNlbnNlIHRlcm1zIGhhdmUKKyAgIHRvIGJlIGFncmVlZCBieSBNZWlsaGF1cyBHbWJIIGluIHdyaXR0ZW4uCisKKyAgIDIpIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsKKyAgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBNZWlsaGF1cyBpcyB1bmRlcgorICAgbm8gbWVhbnMgbGlhYmxlIGZvciBwcm9kdWN0cyB1c2luZyB0aGlzIGZpbGUgb3IgcGFydHMgb2YgaXQuCisKKyAgIDMpIFRoZSBjb3B5cmlnaHQgb2YgdGhpcyBmaWxlIGhhcyB0byBiZSBtZW50aW9uZWQgaW4gZGVyaXZlZCB3b3JrLgorCisgICA0KSBJZiB0aGlzIGxpY2Vuc2UgdGVybXMgYXJlIG5vdCB2YWxpZCBkdWUgdG8gYW55IG90aGVyIGxhdworICAgb3IgcmVzdHJpY3Rpb25zIGltcG9zZWQgb24geW91LCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIHVzZQorICAgdGhpcyBmaWxlIGluIGFueSB3YXkgYXQgYWxsLgorICovCisKKy8qIFZlcnNpb24gMTggb2Ygc3RhbmRhcmQgZmlybXdhcmUgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHhpbGlueF9maXJtW10gPSB7CisweDAwLCAweDAxLCAweGZiLCAweGRjLCAweDAxLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDA5LCAweDA0LCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg1NSwgMHg5OSwgMHhBQSwgMHg2NiwgMHgwQywgMHgwMCwKKzB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MDYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEYwLCAweDBDLCAweDgwLCAweDA0LCAweDgwLCAweDAwLCAweDAxLCAweEZDLCAweEI0LCAweDBDLCAweDAwLCAweDAzLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwQywKKzB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgwLCAweDBDLCAweDAwLCAweDAyLCAweDAwLCAweDBBLCAweDAwLCAweDZFLCAweDBELCAweDAxLCAweDQ5LCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorMHgwMCwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDksIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RkUsIDB4NEIsIDB4MDIsIDB4M0UsIDB4MDAsIDB4RUEsIDB4MDAsIDB4QTgsIDB4MDAsIDB4QTAsCisweDBBLCAweDgwLCAweDJBLCAweDAwLCAweEFFLCAweDAwLCAweEI4LCAweDAyLCAweEEwLCAweDAyLCAweDgwLCAweDI4LCAweDAwLAorMHhBQSwgMHgwMCwgMHhCOCwgMHgwMiwgMHg2MCwgMHgwMiwgMHg4MCwgMHgwQiwgMHgwMCwgMHgyNiwgMHgwMCwgMHhCOCwgMHgwMCwKKzB4RTAsIDB4MDIsIDB4ODAsIDB4MEIsIDB4MDAsIDB4MkUsIDB4MDAsIDB4QjgsIDB4MDAsIDB4RTAsIDB4MDIsIDB4ODAsIDB4MEIsCisweDAwLCAweEFFLCAweDAwLCAweEI4LCAweDAyLCAweDgwLCAweDBBLCAweEZDLCAweDIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg1QiwgMHgwMCwgMHhGMywgMHgwNCwgMHhDQywgMHgwMSwgMHhGMiwgMHg5NiwgMHhDMiwKKzB4REYsIDB4MzAsIDB4QkIsIDB4NDMsIDB4RDAsIDB4NzMsIDB4QjAsIDB4OEYsIDB4QzAsIDB4M0QsIDB4MDIsIDB4RkIsIDB4NDgsCisweEZDLCAweDEzLCAweDMwLCAweDEzLCAweEMwLCAweDRGLCAweDAyLCAweDNGLCAweDAxLCAweERDLCAweDEzLCAweEIwLCAweDRGLAorMHhDMCwgMHg0RiwgMHgwMCwgMHgzQiwgMHhDOSwgMHhDQywgMHgwNCwgMHhGMiwgMHgxMywgMHhDMCwgMHhGQywgMHgwMCwgMHhGQiwKKzB4QzksIDB4OEMsIDB4MjcsIDB4MzAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDA4LCAweDU3LCAweDQwLCAweEUxLCAweDA4LCAweDQ0LCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweDEzLAorMHgwMSwgMHhEMSwgMHgwNCwgMHhDNCwgMHgxQiwgMHgxMCwgMHg2RCwgMHg0MCwgMHgzQywgMHgwMiwgMHhERCwgMHgwNiwgMHhGNCwKKzB4MEYsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MjcsIDB4MTEsIDB4NTcsIDB4ODEsIDB4QzQsIDB4MEYsIDB4RDAsIDB4QkYsIDB4NDAsCisweDY0LCAweDAwLCAweDUxLCAweDA0LCAweDQ0LCAweDA0LCAweEQwLCAweDExLCAweDUwLCAweDM0LCAweDAwLCAweEQxLCAweDAwLAorMHg1NCwgMHgxMSwgMHgxNCwgMHgxOSwgMHg0MCwgMHgxNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4RDgsIDB4NDgsIDB4NDQsIDB4MjEsIDB4MDAsCisweEM5LCAweDAwLCAweDE0LCAweDAzLCAweEQwLCAweENDLCAweDY0LCAweDMzLCAweDExLCAweENELCAweDA2LCAweDM0LCAweDIzLAorMHg1MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMSwgMHg4RCwgMHgwMCwgMHgwNCwgMHgyMywgMHhEMCwgMHgwQywgMHg0MiwgMHgwMSwKKzB4MDAsIDB4QzEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDQsIDB4MzAsIDB4MDksIDB4Q0QsIDB4NDQsIDB4NDQsCisweDEyLCAweDEwLCAweDAwLCAweDQ0LCAweDQ3LCAweDg4LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBOCwgMHhCNSwgMHgwMSwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwQSwgMHhEOCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHhEMSwKKzB4NDAsIDB4NDQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NjAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4NTAsCisweDAxLCAweDQwLCAweDI3LCAweDEwLCAweEQ1LCAweDAwLCAweDQ0LCAweDAzLCAweENBLCAweDBELCAweDQwLCAweDY1LCAweDAwLAorMHhDMSwgMHgwMCwgMHg0NCwgMHhDNiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgzMCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg1NCwgMHgwOSwKKzB4MTQsIDB4MTEsIDB4NDAsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsCisweEUzLCAweDAwLCAweEQzLCAweDAwLCAweDRDLCAweDBBLCAweEYwLCAweDBELCAweEM0LCAweEY3LCAweDAwLCAweDlCLCAweDQwLAorMHg1QywgMHgwMywgMHhGMiwgMHgwRCwgMHhDNiwgMHgzNywgMHgxMCwgMHhEQiwgMHgwMCwgMHg3NCwgMHgwMywgMHg3MCwgMHhBMSwKKzB4ODEsIDB4MzcsIDB4MDAsIDB4Q0YsIDB4MDMsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QzcsIDB4MDEsIDB4OTMsCisweDAwLCAweDVELCAweDBDLCAweEYwLCAweDMxLCAweEMwLCAweDM0LCAweDAwLCAweDVGLCAweEMwLCAweDBDLCAweDA3LCAweDMwLAorMHg3MSwgMHg4MCwgMHgwMywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwKKzB4MDgsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4RkYsIDB4MTgsIDB4RkYsIDB4MDQsIDB4QUMsCisweDAzLCAweEIxLCAweDBELCAweEM4LCAweDNELCAweDAwLCAweEZGLCAweDgwLCAweDdDLCAweDAzLCAweEI0LCAweDEzLCAweENBLAorMHhGRiwgMHgwMCwgMHhGNywgMHgwMywgMHhFNCwgMHg0MywgMHhGMCwgMHgwRSwgMHhDMSwgMHgwRSwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4NDAsIDB4RjAsIDB4MEIsIDB4RTIsIDB4M0YsIDB4MDAsIDB4RkYsIDB4ODMsIDB4RkQsIDB4MjUsIDB4RjAsIDB4MEIsCisweEMwLCAweDFFLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDI1LCAweDAwLAorMHhEMywgMHgwMCwgMHg0QywgMHgwQSwgMHgzMCwgMHgwRCwgMHhDMCwgMHhBNCwgMHgwMCwgMHhENywgMHgwMCwgMHg1QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsIDB4RDcsIDB4MDAsIDB4MEMsIDB4MDMsIDB4MzAsIDB4NDEsIDB4QzQsIDB4MzUsCisweDAwLCAweEQzLCAweDAyLCAweDVDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDA1LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHgwRSwgMHgzMCwgMHgwMSwgMHhDMSwgMHgzNywgMHgxMCwgMHhENywgMHgwNCwgMHg0QywgMHgwQiwgMHgzMCwgMHgyMSwgMHhDMCwKKzB4MEIsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4RjQsIDB4MDEsIDB4RjUsCisweDAwLCAweDQ0LCAweDJFLCAweDEwLCAweDA5LCAweDQwLCAweDI1LCAweDAwLCAweEQxLCAweDAwLCAweEM0LCAweDAzLCAweDEwLAorMHgwRiwgMHhDMCwgMHgzRSwgMHgwMCwgMHhGMSwgMHgwMCwgMHhFQywgMHgwMywgMHgxMCwgMHgxMSwgMHhDMCwgMHgzNSwgMHgwMCwKKzB4RDEsIDB4MDEsIDB4REMsIDB4MDcsIDB4NzAsIDB4MkYsIDB4QzMsIDB4MjMsIDB4MDYsIDB4REQsIDB4MjAsIDB4NjQsIDB4MDIsCisweEIwLCAweDM4LCAweDQxLCAweDM3LCAweDAwLCAweEQxLCAweDAzLCAweDZDLCAweDI5LCAweDUwLCAweEE5LCAweDQwLCAweDRFLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgyMiwgMHgwMSwgMHhEMSwgMHgwMCwKKzB4MDQsIDB4MjksIDB4OTAsIDB4MDQsIDB4NDAsIDB4MjQsIDB4MDAsIDB4RDUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4NTAsIDB4MEQsCisweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAzLCAweDVELCAweDAwLCAweDQwLCAweDEyLCAweDIwLCAweDAxLAorMHgwNCwgMHgxMCwgMHgwQiwgMHhEMCwgMHgxQywgMHg0MiwgMHgyMSwgMHg4MCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwOCwgMHg5MCwKKzB4MzAsIDB4NDAsIDB4MzEsIDB4MTAsIDB4RDUsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MTgsIDB4MTgsIDB4NDQsIDB4MUYsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDY4LCAweDAwLCAweEU1LCAweDAxLCAweDg0LAorMHgwNywgMHg5OCwgMHgxQiwgMHg0MCwgMHg2OSwgMHg4MCwgMHhFMSwgMHg4MSwgMHgyNCwgMHgwNywgMHgxMCwgMHg5RSwgMHg0MCwKKzB4NzgsIDB4ODAsIDB4RUQsIDB4MDEsIDB4QTQsIDB4MDcsIDB4NTAsIDB4NTIsIDB4NjEsIDB4NzksIDB4MDAsIDB4MjEsIDB4MTksCisweDkwLCAweDA3LCAweDUxLCAweDFDLCAweDQwLCAweDZBLCAweDAwLCAweDZELCAweDQxLCAweEE0LCAweDA2LCAweEQyLCAweDEyLAorMHg0MCwgMHg3QiwgMHgwMCwgMHhGMSwgMHgwOSwgMHhFNCwgMHg0NSwgMHg1NCwgMHgxQSwgMHg0MCwgMHgxMiwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MjAsIDB4MDIsIDB4QzMsIDB4ODgsIDB4NDQsIDB4MDIsCisweEIwLCAweDg4LCAweDQwLCAweDIwLCAweDAwLCAweEQ3LCAweDA4LCAweDM0LCAweDAzLCAweDcwLCAweDBDLCAweDQwLCAweDM3LAorMHgwMiwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMywgMHg3MSwgMHgxMCwgMHhDMCwgMHgxNiwgMHgwMiwgMHgwMSwgMHg4MCwgMHgxQywKKzB4QzMsIDB4RjAsIDB4MEMsIDB4NDAsIDB4MjEsIDB4MDAsIDB4Q0YsIDB4MDksIDB4M0MsIDB4OTEsIDB4QjAsIDB4ODgsIDB4QzAsCisweDM3LCAweDAwLCAweEM3LCAweDEwLCAweDBDLCAweDExLCAweDM4LCAweDg0LCAweEMxLCAweDRCLCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCMCwgMHgyRCwgMHgwMCwgMHhGRiwgMHgwMiwgMHhGQywgMHgwMiwgMHg2MCwKKzB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsIDB4NDMsIDB4NzAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDQsCisweEYzLCAweDAwLCAweEZDLCAweDBCLCAweEIwLCAweDAyLCAweEMwLCAweDNGLCAweDQ4LCAweEZGLCAweDAwLCAweDdDLCAweDJCLAorMHhGMCwgMHg4RiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgyMCwgMHgzQywgMHgwMywgMHg5MCwgMHgwOSwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4RUUsIDB4MjAsIDB4N0MsIDB4MDEsIDB4RDQsIDB4MDEsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDI3LCAweDAwLCAweERGLCAweDBFLCAweDdDLCAweDAwLCAweEMwLCAweDBELAorMHhDMCwgMHg3NSwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHg1MywgMHg3MCwgMHg4RCwgMHhDNiwgMHhCNCwgMHgwNCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MTMsIDB4QjAsIDB4MDAsIDB4QzAsIDB4MzQsIDB4MTAsIDB4MDcsIDB4ODAsIDB4NUMsIDB4MTMsIDB4MzAsCisweDVDLCAweEMxLCAweDA0LCAweDAwLCAweDlGLCAweDQwLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLAorMHg1RiwgMHgwMCwgMHg0QywgMHgwMSwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MjksIDB4MDAsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsCisweDNCLCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDEzLCAweEQwLCAweDRGLCAweDQwLCAweDNBLCAweDExLCAweEVELCAweDAwLAorMHhCNCwgMHgwMywgMHhEMCwgMHgwMiwgMHg0MCwgMHgzOSwgMHgwMCwgMHhBRCwgMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgyRSwKKzB4NDAsIDB4MDgsIDB4MDgsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsCisweDIwLCAweEM0LCAweDAxLCAweDEwLCAweDBBLCAweDQwLCAweDRCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHgwMCwgMHg2OSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNiwgMHg5MCwgMHgzRSwgMHg0QywgMHg2RiwKKzB4MTAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MTcsIDB4RDAsIDB4MEUsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RUQsIDB4MEQsIDB4OTQsCisweDI3LCAweEQwLCAweDEzLCAweDQxLCAweDdBLCAweDgwLCAweDZELCAweDAxLCAweDk0LCAweDM3LCAweDUxLCAweDVFLCAweDQwLAorMHg2QSwgMHgwNCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMSwgMHgxQSwgMHg0OCwgMHg3QiwgMHg4MCwgMHhBRCwgMHgwMSwKKzB4ODQsIDB4MDUsIDB4MTQsIDB4MUUsIDB4NDIsIDB4MEYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDI4LCAweDIzLCAweDg0LCAweENELCAweDAwLCAweDM0LCAweDJFLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDQ5LAorMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNiwgMHgwMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MTEsIDB4Q0QsIDB4MDMsIDB4MDQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDAsIDB4NzAsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDZGLCAweEQyLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDhELCAweDQ0LCAweDA1LAorMHgyMSwgMHgxNCwgMHgxQywgMHg0MCwgMHg0QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKzB4QTgsIDB4RDksIDB4MDAsIDB4NUYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4QjAsIDB4MDcsIDB4QzQsIDB4REYsIDB4MDEsIDB4NTMsCisweDAwLCAweDdDLCAweDAxLCAweDc4LCAweDA1LCAweEMwLCAweDE0LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEIwLAorMHgxNywgMHhDMCwgMHg5RSwgMHgwMSwgMHg3RiwgMHgwRSwgMHg1QywgMHgwMSwgMHg3NCwgMHgwNSwgMHhDOCwgMHgxRSwgMHgwMCwKKzB4N0YsIDB4MDIsIDB4RkMsIDB4MEQsIDB4RTAsIDB4MDcsIDB4QzAsIDB4MTcsIDB4MjAsIDB4N0YsIDB4MDcsIDB4Q0MsIDB4MDUsCisweDEwLCAweDA3LCAweEMxLCAweDVGLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLAorMHgwNywgMHgwMiwgMHgxRiwgMHgwMCwgMHgzQywgMHg0MCwgMHhGMCwgMHg0MSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHg2MCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMxLCAweDA1LCAweDEwLCAweDFGLCAweDAwLCAweDdDLCAweDgwLCAweDkxLCAweDAxLCAweEQwLCAweDg3LCAweDAxLCAweDFGLAorMHgzMCwgMHg3MCwgMHgwOCwgMHhGMCwgMHg0MSwgMHhDMCwgMHgwNywgMHgxOCwgMHgxRiwgMHg0MCwgMHg3RCwgMHgwMCwgMHhGMCwKKzB4MTEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsCisweDAxLCAweDlCLCAweDAwLCAweDRELCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDc0LAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyMywgMHg0MCwgMHg5MywgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NDQsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzQsIDB4NjcsIDB4MDIsIDB4OUQsIDB4MDAsCisweDRDLCAweDE2LCAweEYwLCAweDE5LCAweEMwLCAweDI3LCAweDgwLCAweDlGLCAweDAzLCAweDRDLCAweDIyLCAweDM0LCAweDA4LAorMHhDMCwgMHg0MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHg2NiwgMHgwMCwKKzB4OTUsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsCisweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDA2LCAweEYwLCAweEI4LCAweDQwLCAweDI0LAorMHgwMCwgMHg4RCwgMHgwOCwgMHgwMSwgMHgwNiwgMHgzMCwgMHgyOSwgMHhDMCwgMHgyNywgMHgyMSwgMHg4RCwgMHgwMCwgMHg0NCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OEQsIDB4MDMsIDB4NkMsIDB4MUUsIDB4NTQsIDB4MjksIDB4NDAsCisweDA1LCAweDgwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDgxLAorMHgwMCwgMHg0NCwgMHgyMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NDAsIDB4MjYsIDB4MDAsIDB4OTksIDB4MDAsIDB4NzQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NjAsIDB4MjQsIDB4ODAsCisweERELCAweDgwLCAweDU0LCAweDEyLCAweDAwLCAweEE5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLAorMHhEMCwgMHg0RCwgMHg0MywgMHgyNywgMHgwMCwgMHg5OCwgMHgxMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHhBOSwgMHg0MCwgMHg2MCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4MDAsIDB4ODUsIDB4MDQsCisweDA0LCAweDFBLCAweDE0LCAweDA4LCAweDQwLCAweDIwLCAweDIwLCAweDhELCAweDA4LCAweDM0LCAweDEyLCAweEQwLCAweDg4LAorMHg2NCwgMHgyMywgMHgwMSwgMHg4OSwgMHgwOCwgMHgzNCwgMHgxMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHgwMiwgMHhERCwKKzB4MDAsIDB4MTQsIDB4MDIsIDB4MTQsIDB4MDgsIDB4NDQsIDB4MjMsIDB4MDAsIDB4OUQsIDB4MDgsIDB4MDQsIDB4MDIsIDB4RDgsCisweDA4LCAweDQyLCAweDIzLCAweDAyLCAweDlELCAweDA4LCAweDI0LCAweDIyLCAweDEwLCAweDQ4LCAweDQwLCAweDQxLCAweDg4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwQSwgMHg0QywKKzB4MDksIDB4MzAsIDB4QTEsIDB4QzAsIDB4ODUsIDB4MDIsIDB4MUQsIDB4MDIsIDB4N0MsIDB4MjgsIDB4RjAsIDB4NjEsIDB4QzEsCisweDg3LCAweDAyLCAweDE5LCAweDE2LCAweDc0LCAweDAwLCAweEYwLCAweDA1LCAweEMwLCAweDg0LCAweDAwLCAweDFGLCAweDAwLAorMHg1QywgMHg1MSwgMHg3MCwgMHg0MSwgMHg0NSwgMHgwNywgMHgxMCwgMHgxRiwgMHgwMiwgMHg0RCwgMHgwMSwgMHhGMCwgMHgwMSwKKzB4QzQsIDB4ODcsIDB4MDAsIDB4MEQsIDB4MDIsIDB4NEMsIDB4ODgsIDB4MzAsIDB4MDEsIDB4QzQsIDB4NzQsIDB4QzAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDJGLCAweDAwLCAweDlGLCAweDA4LCAweEZDLCAweDBBLAorMHhGMCwgMHgwQiwgMHhDMCwgMHgyQiwgMHgwMCwgMHhCRiwgMHgwNCwgMHg3QywgMHgyMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywKKzB4MDIsIDB4OTMsIDB4MDQsIDB4N0MsIDB4MjIsIDB4NzAsIDB4MEIsIDB4RDAsIDB4MkYsIDB4MDEsIDB4QkYsIDB4MDAsIDB4NkMsCisweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDJELCAweDEwLCAweEJGLCAweDA0LCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLAorMHgyNywgMHgwMSwgMHhCRiwgMHg4NCwgMHhGQywgMHgxMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsIDB4MDAsIDB4OTMsIDB4OEMsIDB4RTgsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI3LCAweDAyLCAweDkzLCAweDYwLCAweDdDLCAweDUyLCAweDMwLCAweEM5LCAweEMwLCAweDI1LCAweDAwLAorMHg5QiwgMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNywgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMiwKKzB4QjAsIDB4MEIsIDB4QzAsIDB4MkIsIDB4MjgsIDB4OUYsIDB4NDAsIDB4QkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MjQsCisweDIwLCAweEJGLCAweDQwLCAweENDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDYwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMCwgMHgxMSwgMHgwQywgMHg0NCwgMHg0OSwgMHhEMCwgMHgwMSwKKzB4NDEsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MTQsIDB4NzQsIDB4MTAsIDB4MTAsIDB4QzEsIDB4NDgsIDB4ODQsIDB4MDQsIDB4MTEsCisweDEwLCAweDQ0LCAweDIwLCAweEQyLCAweDAxLCAweDQwLCAweDA3LCAweDAxLCAweDFELCAweDAwLCAweDUwLCAweDA4LCAweDE0LAorMHgwMSwgMHg0MCwgMHgxNywgMHgwMCwgMHgxRCwgMHgxNCwgMHg2NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNSwgMHgwQywKKzB4NUQsIDB4OTAsIDB4NTQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NTAsIDB4NzAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDI3LCAweDQwLCAweDgxLCAweDA0LCAweDM0LCAweDMyLCAweEQwLCAweDA4LCAweDQwLAorMHgyNywgMHg0MCwgMHg4NSwgMHgwNCwgMHgzNCwgMHg1MiwgMHgxMCwgMHg0OCwgMHg0MCwgMHgyMSwgMHgwMywgMHg4OSwgMHgwOCwKKzB4MTQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDUsIDB4OUQsIDB4MDAsIDB4MDQsIDB4MjIsIDB4MTIsIDB4OEMsCisweDQyLCAweDIzLCAweDAwLCAweDhELCAweDA0LCAweDM0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDIzLCAweDAxLCAweDhELAorMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDQsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4NjksIDB4NjAsIDB4MjcsCisweDAwLCAweDk1LCAweDAwLCAweDM0LCAweDAyLCAweDEwLCAweDA5LCAweDYwLCAweDIxLCAweDAwLCAweDkxLCAweDAwLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyNywgMHg4MCwgMHg5QywgMHgwMiwgMHg1NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NjQsIDB4MEEsIDB4RDAsIDB4MjksIDB4NDAsIDB4MjcsIDB4ODAsIDB4OEQsIDB4MDgsCisweDU0LCAweDEyLCAweDEyLCAweDE5LCAweDQwLCAweDYwLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHhBOCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHgwRSwgMHhGMCwgMHgzOSwgMHhFMCwgMHgyNywgMHgyMSwKKzB4OTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzIsIDB4MjUsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NUMsIDB4MDIsCisweEYwLCAweDI5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAzLCAweDRDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDY3LAorMHgwMCwgMHg5RiwgMHgyNCwgMHg3QywgMHgwMiwgMHhGOCwgMHg4OCwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywKKzB4MDIsIDB4MzAsIDB4NTksIDB4QzAsIDB4MTQsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweDAwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDU2LCAweEYwLCAweDE5LCAweEMwLCAweDY3LCAweDAxLCAweDlCLAorMHgwNCwgMHg3QywgMHgwMiwgMHhGNCwgMHgwOCwgMHhDQywgMHgyNiwgMHgwMCwgMHg4RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MzksIDB4QzIsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDEsCisweDlGLCAweDA1LCAweDdDLCAweDIyLCAweEYwLCAweDE5LCAweEMyLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOCwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwKKzB4MDUsIDB4MDAsIDB4MEYsIDB4MDAsIDB4NUMsIDB4MDgsIDB4RjAsIDB4MjEsIDB4QzAsIDB4ODUsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEUwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDIxLAorMHhDMSwgMHgwNywgMHgwMCwgMHgxQiwgMHgwNiwgMHg0QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMSwgMHgwNCwgMHgwMSwgMHgxMywKKzB4MDIsIDB4N0MsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MjAsIDB4MzEsCisweDIxLCAweDgwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDE4LAorMHgwMCwgMHg1RCwgMHgwMCwgMHhDMCwgMHgwNSwgMHg3MCwgMHgwNSwgMHg0MCwgMHgxMCwgMHgwMCwgMHg1QywgMHgwMCwgMHg3NCwKKzB4MDEsIDB4RDAsIDB4MDUsIDB4QzAsIDB4MTUsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4NDUsIDB4RDAsIDB4MDcsIDB4QzAsCisweDE1LCAweDAwLCAweDYxLCAweDAwLCAweERDLCAweDRELCAweDcwLCAweDA3LCAweDQwLCAweERELCAweDQwLCAweDUxLCAweDAwLAorMHhGNCwgMHgzRCwgMHgxMCwgMHg3NywgMHg0MCwgMHgxNywgMHg0MCwgMHg3MSwgMHgwMCwgMHg4NCwgMHgwRCwgMHhGMCwgMHhBNywKKzB4QzAsIDB4NTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MjIsIDB4MjAsCisweENELCAweDgwLCAweDEwLCAweDBGLCAweDUwLCAweDBDLCAweDQwLCAweDMzLCAweDgwLCAweENDLCAweDAwLCAweDM0LCAweDAzLAorMHhEMCwgMHgwQywgMHgwMCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHhCQywgMHg0MCwgMHgzMywKKzB4MDAsIDB4QzksIDB4MDEsIDB4MjQsIDB4MDcsIDB4NTAsIDB4MEMsIDB4NDAsIDB4RjAsIDB4MDAsIDB4QzEsIDB4MjAsIDB4MzQsCisweDA3LCAweDEwLCAweDRDLCAweDYwLCAweDMzLCAweDkwLCAweEM5LCAweDAwLCAweDA0LCAweDRGLCAweDEwLCAweDJDLCAweDQyLAorMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwMCwgMHhDRCwKKzB4MDQsIDB4ODQsIDB4MEIsIDB4NTAsIDB4MUUsIDB4NDAsIDB4M0EsIDB4MDMsIDB4RUQsIDB4MDgsIDB4QjQsIDB4MDMsIDB4RDAsCisweDhFLCAweDQwLCAweDM5LCAweEExLCAweEVELCAweDAwLCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDQwLCAweDdELCAweDAwLAorMHhGRCwgMHg0MiwgMHg5MCwgMHgwMywgMHg1MCwgMHgxOCwgMHg0MCwgMHhGRCwgMHgxMCwgMHhFMSwgMHgwNCwgMHhGNCwgMHgwNiwKKzB4MTAsIDB4MEUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTksIDB4MDAsIDB4QzUsIDB4MDEsIDB4OTAsIDB4MEMsIDB4NjAsIDB4MTIsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDY4LCAweDAwLCAweEVGLCAweDA3LAorMHg5NCwgMHgwNywgMHg3MCwgMHgxRiwgMHhDOCwgMHg3QiwgMHgwMCwgMHhFRiwgMHgwNSwgMHhCNCwgMHgwRiwgMHhGMCwgMHgxRSwKKzB4NDAsIDB4N0IsIDB4MDQsIDB4RUQsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RjIsIDB4MUEsIDB4QzgsIDB4N0IsIDB4MjQsIDB4RkIsCisweDAxLCAweEFDLCAweDg0LCAweDcwLCAweDFBLCAweEMwLCAweDc4LCAweDAwLCAweEUxLCAweDA5LCAweEI0LCAweDA2LCAweDM0LAorMHgxRSwgMHhDNCwgMHg3RiwgMHgwOCwgMHg3OSwgMHgwMSwgMHhDQywgMHgwNiwgMHgzMiwgMHgxNiwgMHhDMCwgMHg1MCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MjUsIDB4MTAsIDB4REYsIDB4MDIsIDB4N0MsCisweDAzLCAweDcwLCAweEVELCAweEM4LCAweEI1LCAweDIxLCAweERGLCAweDAwLCAweDdDLCAweDQzLCAweEYwLCAweDBELCAweEM4LAorMHgzNywgMHgwMiwgMHhERiwgMHg4OCwgMHg3QywgMHgwMywgMHhEMCwgMHgwOSwgMHhDMCwgMHgzMywgMHgwMSwgMHg5MywgMHg4MCwKKzB4N0MsIDB4MDEsIDB4NjAsIDB4MDEsIDB4QzAsIDB4MTcsIDB4MDAsIDB4REYsIDB4MkEsIDB4N0MsIDB4MDAsIDB4NjAsIDB4MDksCisweEMwLCAweEI3LCAweDA2LCAweDk3LCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMyLCAweDQzLCAweDYwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg2RiwgMHgwMCwgMHhGRiwgMHgwMywgMHhDOCwgMHgyMSwKKzB4RTAsIDB4M0UsIDB4QzIsIDB4RkMsIDB4MTIsIDB4RkYsIDB4MDksIDB4RUMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsCisweDAyLCAweEZCLCAweDAxLCAweERDLCAweDI3LCAweEYwLCAweDlGLCAweEMwLCAweDdELCAweDA0LCAweEIzLCAweDQxLCAweEJDLAorMHgyNywgMHhCMCwgMHgxMywgMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgyMSwgMHhGQywgMHgwNiwgMHhGMCwgMHgxRiwgMHhDMCwKKzB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4QkMsIDB4ODcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MEIsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDM5LCAweDEwLCAweEZELCAweDA0LCAweDg0LCAweDAxLCAweEYwLAorMHgwRSwgMHhDMSwgMHgzQSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhFQywgMHgwMywgMHgxNSwgMHg4RSwgMHg0OCwgMHgzQiwgMHg0MCwKKzB4RjEsIDB4MDAsIDB4ODQsIDB4MjMsIDB4RDAsIDB4QTgsIDB4NDAsIDB4M0IsIDB4MjAsIDB4MjEsIDB4MDAsIDB4QjQsIDB4MjksCisweDEwLCAweDYyLCAweDQwLCAweDNCLCAweDAwLCAweERGLCAweDAwLCAweDg0LCAweDAyLCAweEYwLCAweDBFLCAweDQwLCAweDNCLAorMHgwMiwgMHhFRCwgMHgwOCwgMHhCQywgMHgwMSwgMHhCMCwgMHgwRSwgMHg0MSwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MDAsIDB4RUQsIDB4MDAsIDB4ODYsIDB4NjMsIDB4RDgsIDB4MEYsCisweDQwLCAweDM4LCAweDgwLCAweEZELCAweDQwLCAweDg0LCAweDIzLCAweDkwLCAweDBFLCAweDQwLCAweDMzLCAweDEwLCAweEUxLAorMHgwMCwgMHhCNCwgMHgyMywgMHhEMiwgMHgyMiwgMHg2MCwgMHgzOSwgMHgwMCwgMHhBNSwgMHgwMCwgMHhCNCwgMHgwMCwgMHgxMiwKKzB4MDIsIDB4NDAsIDB4MkEsIDB4MDAsIDB4RUQsIDB4MTAsIDB4OTQsIDB4MDIsIDB4RDAsIDB4MDYsIDB4NDAsIDB4M0IsIDB4MDAsCisweDZELCAweDAwLCAweEY0LCAweDAyLCAweDEwLCAweDA2LCAweDQwLCAweDAzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHgyMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwNiwgMHg1OCwgMHgzQywgMHg0MCwKKzB4MzIsIDB4MDAsIDB4Q0QsIDB4MDgsIDB4MjQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDIsIDB4MzMsIDB4MjAsIDB4QzEsIDB4MDAsCisweDE2LCAweDAzLCAweEQwLCAweDAwLCAweDQwLCAweEIzLCAweDAwLCAweDA1LCAweDBCLCAweDM2LCAweDAxLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMywgMHgxMCwgMHhDRCwgMHg0MCwgMHgwNCwgMHgxMCwgMHg1MSwgMHgwMCwgMHg0MCwgMHgzMywgMHgwMCwgMHg5RCwKKzB4MTIsIDB4MTQsIDB4QUYsIDB4OTAsIDB4NTAsIDB4MDAsIDB4MUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweEE4LCAweDI1LCAweDAxLCAweEZGLCAweDAwLCAweDRELCAweDIyLCAweEQwLCAweDNGLCAweEMwLCAweDNDLAorMHgwMCwgMHhGRiwgMHgwMCwgMHhDQywgMHgwMywgMHhCMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGMywgMHgwMCwgMHgxQywKKzB4MDIsIDB4RjAsIDB4MjUsIDB4QzAsIDB4QkQsIDB4MDIsIDB4NTcsIDB4MEIsIDB4N0MsIDB4MDMsIDB4MTEsIDB4MDksIDB4QzAsCisweEY3LCAweDAyLCAweEVGLCAweDAwLCAweDVDLCAweDBBLCAweEQwLCAweDlELCAweDQwLCAweDNGLCAweDAwLCAweDlGLCAweDAyLAorMHg3MCwgMHgwMywgMHgxMCwgMHgyMSwgMHhDMCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4NEQsIDB4QzQsIDB4MzcsIDB4MTAsCisweERGLCAweDgwLCAweDdDLCAweDgzLCAweDcwLCAweDBELCAweEM4LCAweDM3LCAweDAwLCAweEQ3LCAweDgwLCAweDY0LCAweDAyLAorMHhGMCwgMHgzRCwgMHhDMCwgMHgzNywgMHg0OCwgMHg1QSwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgyOSwgMHhDMCwgMHg2NywKKzB4MDAsIDB4RDcsIDB4MDAsIDB4NUMsIDB4MEEsIDB4RjAsIDB4MTUsIDB4QzQsIDB4MzcsIDB4MjAsIDB4NUYsIDB4MDIsIDB4N0MsCisweDA5LCAweEYwLCAweDI5LCAweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorMHgwOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHgzMCwgMHgwRiwgMHhDMCwgMHgzRCwgMHgwMCwgMHhGRiwKKzB4MDAsIDB4RkUsIDB4MDMsIDB4RjIsIDB4MEYsIDB4QzIsIDB4M0YsIDB4ODAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4QjEsCisweDE3LCAweEMyLCAweDNGLCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA2LCAweEYwLCAweDBCLCAweEMwLCAweDdGLCAweDAwLAorMHhGRiwgMHgwMCwgMHhDQywgMHgwMiwgMHhEMCwgMHg4RiwgMHhDMCwgMHgzRiwgMHgwMCwgMHgzMSwgMHgwMCwgMHhDQywgMHg2MiwKKzB4MzAsIDB4MDMsIDB4QzAsIDB4MDMsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsCisweDU2LCAweDAwLCAweERELCAweDAwLCAweDM0LCAweDBFLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDgwLCAweERELCAweDAwLAorMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHhBMCwgMHhERiwgMHgyMCwgMHg3NCwgMHgwMywgMHgzMSwgMHg5RCwKKzB4QzAsIDB4MzEsIDB4MDAsIDB4OTEsIDB4MEEsIDB4NzQsIDB4MEYsIDB4NzgsIDB4MTEsIDB4NDAsIDB4ODcsIDB4MDEsIDB4REQsCisweDAwLCAweDZDLCAweDQ0LCAweDcwLCAweDAxLCAweDQxLCAweDM3LCAweDAwLCAweDEzLCAweDBGLCAweDE0LCAweDQ0LCAweDEwLAorMHgzOSwgMHg0MCwgMHgwNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHhBNiwKKzB4MDIsIDB4REQsIDB4MDAsIDB4NzQsIDB4MEMsIDB4OTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4ODAsIDB4NzQsCisweDAzLCAweEQyLCAweDBELCAweDQ4LCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweDkwLCAweDA1LCAweDQwLAorMHgzNywgMHgwMCwgMHg1NSwgMHg4MiwgMHg3NCwgMHgxMiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgxNywgMHgwMiwgMHhEOSwgMHgwMCwKKzB4NDQsIDB4MDQsIDB4RDAsIDB4MDksIDB4NDIsIDB4MzMsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MTksCisweDQxLCAweDA3LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDMwLCAweDAwLAorMHhDRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNiwgMHgwMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MjAsIDB4QzUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4ODgsIDB4NDgsIDB4MzUsCisweDAwLCAweDQ1LCAweDAwLCAweDM0LCAweDAwLCAweDU4LCAweDA4LCAweDYwLCAweDAzLCAweDAwLCAweERELCAweDAwLCAweDI1LAorMHgwMCwgMHg1MCwgMHgwMCwgMHg0OCwgMHgzMywgMHg0MCwgMHg0NSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMSwgMHgwOCwgMHg0MCwKKzB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjYsIDB4MDAsIDB4RkYsCisweDAwLCAweDdDLCAweDAwLCAweDEwLCAweDBGLCAweEMwLCAweDNELCAweDAwLCAweERELCAweDAwLCAweEY0LCAweDAzLCAweEYwLAorMHgwRCwgMHhDMCwgMHgzRiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3RSwgMHgwMywgMHhCMCwgMHgwNSwgMHg0OCwgMHgzQiwgMHgwMCwKKzB4RDUsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RDAsIDB4MDksIDB4QzAsIDB4MDcsIDB4MDAsIDB4RkYsIDB4MDgsIDB4NEMsIDB4MDAsCisweEYwLCAweDAxLCAweEMwLCAweDNGLCAweDAwLCAweDE3LCAweDAwLCAweDRELCAweDAwLCAweDMwLCAweDA5LCAweEMwLCAweDAzLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgxRiwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4MDIsIDB4NzAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RUYsIDB4ODAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsCisweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweDcxLCAweDQzLCAweEMwLCAweDNELCAweDAwLCAweDNCLAorMHgwMCwgMHhGQywgMHgwMCwgMHg3MCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywgMHgwMCwgMHg3OCwKKzB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4MzMsIDB4MDAsIDB4RkYsIDB4ODAsIDB4RjAsIDB4MEIsIDB4QzIsIDB4MTcsIDB4NjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDBGLCAweDA0LCAweDMzLCAweDAxLCAweEM0LAorMHgwMiwgMHhCOCwgMHgwQiwgMHhDMCwgMHhCRiwgMHgwMSwgMHhGQiwgMHgyQywgMHhFQywgMHg4RSwgMHg3MCwgMHgyRiwgMHhDMCwKKzB4NEYsIDB4MDAsIDB4RjcsIDB4MTgsIDB4OEMsIDB4MjQsIDB4RjAsIDB4NEYsIDB4QzEsIDB4NEYsIDB4MDIsIDB4RkYsIDB4NDQsCisweERDLCAweDI3LCAweDMwLCAweDhGLCAweEMwLCAweDNGLCAweDAwLCAweEU3LCAweDAwLCAweEVDLCAweDA0LCAweEYwLCAweDBGLAorMHhDMCwgMHg2QywgMHgwMCwgMHhGQiwgMHgxMCwgMHg5QywgMHg1MiwgMHhGMCwgMHgxMywgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4ODcsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NkMsIDB4MDIsCisweEYwLCAweDA5LCAweDQwLCAweEJGLCAweDAwLCAweEYxLCAweDAyLCAweDRDLCAweDEzLCAweDEwLCAweDhGLCAweDQwLCAweDY3LAorMHgwOCwgMHhGMSwgMHgwMiwgMHg0NCwgMHgxMCwgMHhEMiwgMHgzRiwgMHhDMiwgMHgyMywgMHgwOCwgMHhGMSwgMHgwMywgMHg0NCwKKzB4MTMsIDB4MDQsIDB4NkYsIDB4NDAsIDB4RkMsIDB4MjAsIDB4RjEsIDB4MEIsIDB4NDQsIDB4MDQsIDB4RDEsIDB4M0YsIDB4QzAsCisweDQ0LCAweDAwLCAweEQ1LCAweDQzLCAweDc0LCAweDA0LCAweEQwLCAweDE1LCAweEMwLCAweDA2LCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgwMywgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNSwgMHgwMCwgMHg5MiwKKzB4MDgsIDB4NDIsIDB4MzMsIDB4MDMsIDB4QzksIDB4MEMsIDB4MzQsIDB4MDMsIDB4NTAsIDB4NEMsIDB4NDQsIDB4MDcsIDB4ODAsCisweEM1LCAweDIwLCAweDA0LCAweDEyLCAweEQwLCAweDBDLCAweDQyLCAweDEzLCAweDEwLCAweEM5LCAweDAyLCAweDE0LCAweDAzLAorMHgxMCwgMHgyQywgMHg0MCwgMHhCMSwgMHgwMCwgMHhDNSwgMHgwMCwgMHgwNywgMHgwMCwgMHg1MCwgMHgyQywgMHg0MCwgMHgyNiwKKzB4MDAsIDB4QzEsIDB4MjAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NDQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDQxLCAweDA0LCAweDAxLCAweDAxLCAweDU0LCAweDBFLCAweDUwLCAweDE5LAorMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHg0NywgMHgwMCwgMHhEMSwKKzB4MDAsIDB4NDQsIDB4MEMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjUsIDB4MDQsIDB4RDUsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTgsCisweDBELCAweDA4LCAweDM0LCAweDAwLCAweEQxLCAweDAwLCAweDY0LCAweDA0LCAweEQwLCAweDBELCAweDQwLCAweDY0LCAweDAwLAorMHhENSwgMHgwMCwgMHg3NCwgMHgwNiwgMHhEMCwgMHgzNSwgMHg0MCwgMHgwRSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4QzcsIDB4MDAsIDB4MTMsIDB4MDMsIDB4NTQsIDB4MEMsIDB4OTAsIDB4NTEsIDB4QzAsCisweDM3LCAweDAwLCAweERCLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDBELCAweEM0LCAweDQzLCAweDAwLCAweEQ3LCAweDAwLAorMHg0QywgMHgwRSwgMHhGMCwgMHgwRCwgMHg0OCwgMHg5NywgMHgwMiwgMHhERiwgMHgwMCwgMHg1QywgMHgwMywgMHgzMiwgMHgwRCwKKzB4QzAsIDB4MzcsIDB4MTAsIDB4RDcsIDB4MDAsIDB4NkUsIDB4NDQsIDB4RjAsIDB4MEQsIDB4RDAsIDB4NjIsIDB4MDAsIDB4REIsCisweDAwLCAweDVDLCAweDE2LCAweEYyLCAweDFELCAweEUwLCAweDA4LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNywgMHg4MCwgMHgwNSwgMHgwMCwgMHgzRiwgMHgwMCwgMHg2RCwgMHg4MCwgMHhGMCwgMHgwMywgMHhDMCwgMHgzRiwKKzB4MDAsIDB4RUYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjgsIDB4MEQsIDB4QzAsIDB4MkYsIDB4ODAsIDB4RUIsIDB4NDAsIDB4RkMsCisweDAwLCAweEYyLCAweDBGLCAweEMwLCAweDRGLCAweDAwLCAweEVCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBFLCAweEMwLAorMHgzQiwgMHgwNCwgMHhGRCwgMHg4MCwgMHhEQywgMHg0MCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDA4LCAweDg1LCAweDAwLCAweDFCLCAweDAwLCAweDRELCAweDA4LCAweDMwLCAweDA5LCAweEMzLCAweDMzLCAweDAwLAorMHhERiwgMHgwMCwgMHg1QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHg4NSwgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwQSwKKzB4MzAsIDB4MEQsIDB4QzYsIDB4MTYsIDB4MDAsIDB4RDMsIDB4MTAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzYsCisweDAwLCAweERGLCAweDIwLCAweDRDLCAweDA4LCAweDcwLCAweDBDLCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdFLAorMHg0MiwgMHg3MCwgMHgyRCwgMHhDMCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywKKzB4QTAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDQsIDB4NEUsIDB4MDAsIDB4NjksIDB4NDAsIDB4M0YsIDB4MTAsIDB4RkQsCisweDAwLCAweDRDLCAweDAzLCAweDEwLCAweDBGLCAweDQwLCAweEE0LCAweDAzLCAweEZELCAweDAwLCAweDQ0LCAweDAwLCAweDEyLAorMHgwRiwgMHg0MCwgMHgyNCwgMHgwMCwgMHhGMCwgMHgwMywgMHg1NCwgMHgwMywgMHhEMCwgMHgwRiwgMHg0MCwgMHg3QywgMHgwNCwKKzB4RUQsIDB4MDAsIDB4NDUsIDB4MDQsIDB4RDAsIDB4MUYsIDB4NDAsIDB4NDcsIDB4MDAsIDB4RkQsIDB4MDAsIDB4NzQsIDB4MEUsCisweDEwLCAweDBELCAweDQzLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLAorMHg0MiwgMHgwMCwgMHgwOSwgMHgyNCwgMHgwMCwgMHg0NiwgMHg5MCwgMHgwMCwgMHg0MCwgMHgzMywgMHgyMCwgMHhDOSwgMHgwMCwKKzB4NTIsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDgsIDB4QTEsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MEMsCisweDQ4LCAweDI3LCAweDYwLCAweEMxLCAweDAxLCAweDQ0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELAorMHgwNCwgMHgyNCwgMHgwNCwgMHhEMCwgMHg4QywgMHg0OSwgMHgyMywgMHgxMiwgMHhDRCwgMHgwMCwgMHgxNiwgMHgwNCwgMHg1MSwKKzB4MEQsIDB4NDEsIDB4MUMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NDgsCisweDI0LCAweDIxLCAweDAxLCAweDg0LCAweDA3LCAweDE4LCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweENELCAweDAxLCAweDk0LAorMHgwNywgMHg5MCwgMHg5RSwgMHg0MCwgMHg3OCwgMHhBMCwgMHhFRCwgMHgwMSwgMHhENCwgMHgwNCwgMHgxNCwgMHgxRSwgMHg0MCwKKzB4NjksIDB4MDAsIDB4RTEsIDB4MTEsIDB4OTQsIDB4MDcsIDB4QzAsIDB4MUMsIDB4NDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4OTUsCisweDg0LCAweDA1LCAweEQyLCAweDFFLCAweDQwLCAweDRCLCAweDAwLCAweEVELCAweDA5LCAweEI2LCAweDQ0LCAweDEwLCAweDFGLAorMHg0MCwgMHgxMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgwMCwgMHgwMCwKKzB4MUIsIDB4MTAsIDB4MEQsIDB4MjEsIDB4QjAsIDB4MDQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NUMsIDB4MDMsCisweEYwLCAweDBDLCAweEM4LCAweDgxLCAweDAwLCAweERFLCAweDAwLCAweDFDLCAweDAzLCAweDMwLCAweDBDLCAweEMwLCAweDMzLAorMHgwMywgMHhDMywgMHg4MCwgMHgxQywgMHg4MywgMHhGMCwgMHg0QywgMHhDMCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgwQywKKzB4NDAsIDB4NzAsIDB4MEMsIDB4RTQsIDB4MjMsIDB4MjIsIDB4Q0YsIDB4MDAsIDB4MUUsIDB4MTQsIDB4NzAsIDB4MEMsIDB4QzAsCisweDQ4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDJELCAweDEyLCAweDdGLAorMHgwOCwgMHhGQywgMHgwMywgMHg1NCwgMHgwRiwgMHhDMCwgMHgzRiwgMHg4MCwgMHhGRiwgMHgwMiwgMHhFQywgMHgwMywgMHg3MCwKKzB4MEYsIDB4QzMsIDB4MUYsIDB4MDAsIDB4RkYsIDB4MDgsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MkUsIDB4QzQsIDB4M0UsIDB4MDIsCisweEVGLCAweDEwLCAweEY4LCAweDIzLCAweEYwLCAweDBGLCAweEMxLCAweDNFLCAweDAwLCAweEZGLCAweDA2LCAweERDLCAweDAxLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwOCwgMHhGRiwgMHgyMCwgMHhGRSwgMHgyMCwgMHhGMiwgMHgwQywgMHhDMCwgMHgwQiwKKzB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MDcsIDB4MDAsIDB4MDMsIDB4MDAsCisweDRDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweEI3LCAweDAxLCAweERCLCAweDBFLCAweDdDLCAweDAzLCAweEYwLCAweDVELAorMHhDMSwgMHgyNCwgMHgwMCwgMHhERiwgMHg4NiwgMHg3QywgMHg4NiwgMHg3MCwgMHgzRCwgMHhDMCwgMHgxNiwgMHgwMCwgMHhERiwKKzB4MTAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4NEQsIDB4QzEsIDB4MzYsIDB4MDEsIDB4REYsIDB4MDEsIDB4NEMsIDB4MDAsIDB4RjAsCisweEFDLCAweEMwLCAweDI0LCAweDAwLCAweERGLCAweDAxLCAweDRDLCAweDA2LCAweDMwLCAweDBELCAweEMwLCAweDU0LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgwOSwgMHgwOCwgMHgyMSwgMHgwMCwgMHg4NCwKKzB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4QkIsIDB4MEQsIDB4RTEsIDB4MDAsIDB4OUMsIDB4MDMsIDB4RDAsIDB4NEUsIDB4NTAsCisweDM4LCAweDgwLCAweEVELCAweDEyLCAweEI0LCAweDAyLCAweDEwLCAweDBFLCAweDQwLCAweDE4LCAweDAwLCAweEVELCAweDA0LAorMHhCMCwgMHg4MywgMHhEMCwgMHg0RSwgMHg0MiwgMHhCOCwgMHg4MiwgMHhDRCwgMHgwNCwgMHhBNSwgMHgwMSwgMHhEMCwgMHg0RSwKKzB4NDksIDB4MjksIDB4MDAsIDB4RUQsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MTEsIDB4MEUsIDB4QzAsIDB4NEEsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQ5LCAweDA0LCAweDIxLCAweDAxLCAweDg0LCAweDBELAorMHhEMCwgMHgxNiwgMHg0MSwgMHg3MywgMHgwMSwgMHhFOSwgMHgwNSwgMHg5NCwgMHgwNywgMHhEMCwgMHg1RSwgMHg0MCwgMHg2OCwKKzB4MDAsIDB4RUQsIDB4MDUsIDB4QjQsIDB4MDcsIDB4NTAsIDB4OUMsIDB4NTAsIDB4NzksIDB4ODAsIDB4RUQsIDB4MDEsIDB4QjQsCisweDg3LCAweDU4LCAweDFFLCAweDQwLCAweDc4LCAweDAwLCAweEVELCAweDA4LCAweEE0LCAweDA0LCAweDUwLCAweDFFLCAweDQwLAorMHg3OCwgMHgwMCwgMHhDRCwgMHgwMSwgMHgwNCwgMHgwNiwgMHgxMCwgMHgxRiwgMHg0MCwgMHgwQywgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4NzcsIDB4MjAsIDB4RDEsIDB4MDQsIDB4MDQsIDB4MDcsIDB4RDAsCisweDNDLCAweDQxLCAweDMzLCAweDAwLCAweEMxLCAweDQwLCAweDE0LCAweEE3LCAweEQ4LCAweDBDLCAweDQwLCAweEIwLCAweDAwLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgwQiwgMHgxMCwgMHgwQywgMHg0MCwgMHg3MSwgMHg4MywgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywKKzB4RDksIDB4MEQsIDB4NTAsIDB4MzAsIDB4MDAsIDB4REQsIDB4MDAsIDB4MjQsIDB4NEIsIDB4RDEsIDB4MEMsIDB4NDgsIDB4MTEsCisweDE0LCAweENELCAweDAwLCAweDE2LCAweDI3LCAweDEwLCAweDBDLCAweDQwLCAweDRBLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHg1RCwgMHg0MCwgMHg3MywgMHgwMCwgMHhDRCwgMHgwRCwgMHhGMCwgMHgwNywKKzB4QzAsIDB4MTcsIDB4MDAsIDB4NUIsIDB4MDAsIDB4NUMsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTgsIDB4MDIsIDB4NUYsCisweDAwLCAweEZDLCAweDAxLCAweDcwLCAweDA1LCAweEMwLCAweDVELCAweDE4LCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLAorMHgwNSwgMHhDMCwgMHgxNCwgMHgwMCwgMHg1RCwgMHg4MCwgMHhDNSwgMHgwMSwgMHhGOCwgMHgwNSwgMHhDMCwgMHg1QywgMHgwMCwKKzB4NUYsIDB4MDAsIDB4Q0MsIDB4MDEsIDB4MzAsIDB4NjcsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDEwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MjAsIDB4MUYsIDB4ODIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDAxLCAweDAwLCAweDFGLCAweDAyLCAweDVDLCAweDgwLCAweEYwLCAweDIxLCAweEMwLCAweDA3LCAweDAyLCAweDFGLAorMHgwMCwgMHg3QywgMHg4QywgMHhGMCwgMHgwMSwgMHhDMSwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDgsIDB4NjcsIDB4MDIsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MEUsIDB4RjAsIDB4MzksIDB4QzAsIDB4MjcsCisweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAyLCAweDkzLCAweDAwLCAweDdDLAorMHg0MiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMiwgMHhCMiwgMHgwOSwgMHhDMiwKKzB4RTUsIDB4MDAsIDB4OTcsIDB4MDUsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDgsIDB4RDAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsCisweDVFLCAweDAyLCAweEYwLCAweDI5LCAweEMwLCAweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgyMCwgMHhFNiwgMHg2MCwgMHg5MSwgMHgwMywgMHg0NCwgMHgwNiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwKKzB4OTEsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDYsIDB4MjcsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NzQsIDB4MDIsCisweEQwLCAweDE5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAzLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQ4LCAweEU0LAorMHgwNCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgyNiwgMHhEMSwgMHg0OSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwKKzB4NEUsIDB4RDIsIDB4MTgsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweEEwLCAweDI0LCAweDA0LCAweEQxLCAweDA4LCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDIzLCAweDAwLCAweDk1LAorMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwNCwgMHg5OSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTUsIDB4MDIsIDB4MzQsIDB4MDIsIDB4OTAsIDB4MDksIDB4NjAsIDB4MjUsIDB4MDAsCisweDk1LCAweDQwLCAweDQ2LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAxLCAweDlELCAweDAwLCAweDU0LCAweDIyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4MjAsIDB4MDEsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MTMsIDB4RDAsIDB4QzgsIDB4NDAsIDB4MjMsIDB4MTEsIDB4ODEsIDB4MEMsCisweDE0LCAweDIyLCAweEQwLCAweDQ4LCAweDQwLCAweDIzLCAweDAwLCAweDg1LCAweDA0LCAweDM0LCAweDIyLCAweEQwLCAweDQ4LAorMHg2MCwgMHgyMywgMHgwMiwgMHg4RCwgMHgwMCwgMHgzNCwgMHgyMiwgMHgxMCwgMHg4OCwgMHg0MCwgMHgyMCwgMHgwOCwgMHg5MSwKKzB4MDAsIDB4MDQsIDB4MDYsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MTIsIDB4RDAsCisweDA4LCAweDQwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDgyLAorMHgwMiwgMHg1MywgMHgwQSwgMHg0RCwgMHgzMCwgMHhGMCwgMHg0NSwgMHhDMSwgMHg4NywgMHgwMiwgMHgxNywgMHgwMiwgMHg3QywKKzB4MDgsIDB4RjAsIDB4QTAsIDB4QzAsIDB4MDcsIDB4MDgsIDB4MTMsIDB4MEEsIDB4M0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsCisweDg3LCAweDAwLCAweDE3LCAweDE0LCAweDdDLCAweDA4LCAweEIwLCAweDYwLCAweEMxLCAweDA1LCAweDg1LCAweDU2LCAweDE0LAorMHg0NCwgMHgwMCwgMHhGMCwgMHg0MSwgMHhEMSwgMHgwNCwgMHgwMCwgMHgxRiwgMHgxNCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4RDAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTAsIDB4MkYsIDB4MjIsCisweEJGLCAweDAwLCAweEZDLCAweDMzLCAweEYwLCAweDRCLCAweEMwLCAweDI3LCAweDAyLCAweDlGLCAweDBDLCAweERDLCAweDEyLAorMHhGMCwgMHg4OSwgMHhDMCwgMHgyRiwgMHgzMCwgMHg5RiwgMHgwOCwgMHhGQywgMHgxMiwgMHhGMCwgMHg4OSwgMHhDOCwgMHgyRiwKKzB4MDEsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4NDksIDB4QzIsIDB4MjcsIDB4MDgsIDB4OUYsIDB4MDAsIDB4RkMsCisweDAyLCAweEQwLCAweDA5LCAweEMwLCAweDJGLCAweDA4LCAweDlGLCAweDAwLCAweEZDLCAweDIyLCAweEYwLCAweDBBLCAweEMwLAorMHg2NSwgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwgMHgwMSwgMHhCRiwKKzB4MDAsIDB4Q0MsIDB4MzIsIDB4RTAsIDB4MEIsIDB4QzgsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDgsIDB4NkMsIDB4MDIsIDB4RTAsCisweDQ5LCAweEMxLCAweDJFLCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDBCLCAweEQ4LCAweDI0LCAweDIwLAorMHhCRiwgMHgzNCwgMHg3QywgMHgyMiwgMHhGMCwgMHgwOSwgMHhFMCwgMHgyRCwgMHgwMCwgMHhCMywgMHgwMCwgMHhFQywgMHgwMiwKKzB4RjAsIDB4NEIsIDB4QzEsIDB4MkMsIDB4MjAsIDB4OUYsIDB4NTUsIDB4RjgsIDB4MDIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4NjAsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDA1LCAweDFELCAweDA0LAorMHg0NCwgMHhCMCwgMHhEMCwgMHgyNSwgMHg0MSwgMHgwNCwgMHgwNCwgMHgxRCwgMHgwOCwgMHg0NCwgMHg1MCwgMHhEMiwgMHg0MSwKKzB4NDQsIDB4MDQsIDB4MDAsIDB4MTcsIDB4MTIsIDB4NzQsIDB4NDAsIDB4MTQsIDB4ODEsIDB4NjgsIDB4MDQsIDB4MDUsIDB4MUQsCisweDAwLCAweDc0LCAweDEwLCAweDcxLCAweDIxLCAweDQxLCAweDA0LCAweDAwLCAweDE1LCAweDA4LCAweDQ0LCAweDAwLCAweEQwLAorMHgwMSwgMHg0MCwgMHgwNSwgMHgyMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHhDMCwgMHg3MiwgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDMsIDB4OEQsIDB4MTUsIDB4MDQsCisweDkyLCAweEQwLCAweEM4LCAweDQwLCAweDIwLCAweDAyLCAweDhELCAweDAwLCAweDI0LCAweDEyLCAweEQwLCAweDQ4LCAweDQxLAorMHgyMiwgMHgyMCwgMHg4RCwgMHgwQywgMHgzNiwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMiwgMHgyMSwgMHg4RCwgMHgwMCwKKzB4MzAsIDB4MTIsIDB4RDEsIDB4QzgsIDB4NDAsIDB4MzEsIDB4MDIsIDB4ODEsIDB4MDAsIDB4MTQsIDB4MDIsIDB4RDAsIDB4MDgsCisweDQwLCAweDIyLCAweDAwLCAweDhELCAweDgwLCAweDM0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDQwLCAweDg4LCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHg2NSwgMHgwMCwgMHg4RCwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsCisweDAwLCAweDk1LCAweDAwLCAweDc0LCAweDQyLCAweDEwLCAweDA5LCAweDQwLCAweDI2LCAweDA2LCAweDlELCAweDAwLCAweDc0LAorMHgwMiwgMHg1MCwgMHgwOCwgMHg0OCwgMHgzNCwgMHgwOCwgMHg5NSwgMHgyMCwgMHg0NiwgMHg0MywgMHhEMCwgMHgwOSwgMHg0MCwKKzB4NjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzYsIDB4MEUsIDB4RDAsIDB4NDksIDB4NDAsIDB4NjIsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDg4LCAweEU3LCAweDA0LCAweDlGLCAweDAxLCAweDRELCAweDAyLCAweEYwLAorMHgzOSwgMHhFMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNiwgMHgwNCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4MzAsIDB4MDksIDB4NDAsIDB4NjYsIDB4MDAsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MDIsCisweEQwLCAweDA5LCAweDQwLCAweDI1LCAweDAwLCAweDkzLCAweDAwLCAweDVELCAweDhBLCAweEYwLCAweDA5LCAweEMwLCAweEU2LAorMHgwNCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwRSwgMHhGMCwgMHgwOCwgMHg0MCwgMHgxNCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDQsIDB4N0MsIDB4NjYsIDB4RjMsIDB4ODgsCisweEQxLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDA5LCAweEM4LCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgyNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgyMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OEYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzEsIDB4MjUsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMxLCAweDUzLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg4NSwgMHgwMiwgMHgxRiwgMHgwMCwgMHg0RCwgMHgwOCwgMHhGOCwgMHgyMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDAsIDB4QzQsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDA4LCAweEYwLCAweDAwLCAweEMwLCAweDg0LCAweDAwLCAweDFGLCAweDAxLCAweDRDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwMiwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4NDAsIDB4MzIsIDB4MDEsIDB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweEEwLCAweDFDLCAweDAyLCAweDdELCAweDAyLCAweEM0LCAweDAxLCAweEQwLCAweDM3LCAweEMwLCAweDE1LAorMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0OCwgMHg1RiwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3NCwKKzB4MDEsIDB4RDAsIDB4MTUsIDB4MDEsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MDUsIDB4NDUsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsCisweDFELCAweDAwLCAweDdGLCAweDIwLCAweEY0LCAweDRELCAweEQwLCAweDA3LCAweDQwLCAweDU0LCAweDIwLCAweDVELCAweDAwLAorMHhGNCwgMHgwMSwgMHgzNCwgMHgwNywgMHhEMCwgMHg1MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4QTAsIDB4NzIsIDB4ODAsIDB4OEQsIDB4MTAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4QkMsIDB4NDAsIDB4MzEsIDB4MDAsCisweERELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDA2LCAweENELCAweDAwLCAweDc0LCAweDAzLAorMHhEMCwgMHgxOCwgMHg2MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHhCMCwKKzB4MDEsIDB4QzEsIDB4MTIsIDB4MzQsIDB4MEIsIDB4RDAsIDB4MzQsIDB4NTAsIDB4NzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsCisweDAzLCAweDkwLCAweDBDLCAweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHg4MCwgMHgyOCwgMHgwMSwgMHg3RCwgMHgwOCwgMHg4NCwgMHg0MywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOSwgMHgwMCwgMHhFRCwKKzB4MEMsIDB4QjQsIDB4MTMsIDB4REEsIDB4Q0UsIDB4NDAsIDB4MUIsIDB4MDAsIDB4RUQsIDB4MDgsIDB4QjQsIDB4MTMsIDB4RDEsCisweDBCLCAweDQwLCAweDM4LCAweDIxLCAweDBELCAweDAxLCAweDg2LCAweDIzLCAweEQyLCAweDRDLCAweDQwLCAweDIxLCAweDAwLAorMHg2NSwgMHgxMCwgMHhCMCwgMHgwMSwgMHhEMCwgMHgwRSwgMHg0MSwgMHgzOCwgMHgwNCwgMHhFRCwgMHgwMCwgMHhGNCwgMHg0NywKKzB4MTAsIDB4MEYsIDB4NDAsIDB4MTYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsCisweEY4LCAweDAwLCAweEFGLCAweDA1LCAweDhDLCAweDA3LCAweEQwLCAweDE2LCAweEMwLCAweDc5LCAweDAwLCAweEVGLCAweDA1LAorMHhCQywgMHgwRiwgMHhGMCwgMHgxRSwgMHhDNCwgMHg3QiwgMHgyMCwgMHhFRCwgMHgxMSwgMHhCNCwgMHg4NywgMHhEMCwgMHgwRiwKKzB4QzAsIDB4NzgsIDB4MDEsIDB4MkYsIDB4MjEsIDB4OEMsIDB4NTcsIDB4RjAsIDB4QkUsIDB4QzQsIDB4NjgsIDB4MDAsIDB4RTEsCisweDAxLCAweEIwLCAweDA1LCAweEYwLCAweDFDLCAweEM0LCAweDc4LCAweDAwLCAweEVGLCAweDAxLCAweEY4LCAweDA1LCAweEIwLAorMHgxRSwgMHhEMCwgMHg1NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwKKzB4MDAsIDB4OEYsIDB4NDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4QjUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYxLCAweDRELCAweEMxLCAweDM3LCAweDAwLCAweEQ2LCAweDQ0LCAweDdDLCAweEFCLCAweEYwLCAweDBELCAweENDLAorMHhCNywgMHgwNiwgMHgxRiwgMHgwMCwgMHg2QywgMHgwMywgMHg2MCwgMHg2RCwgMHhDMCwgMHgyNSwgMHgwMCwgMHg1RiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4ODAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsCisweEMwLCAweDQxLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDRGLCAweDAwLAorMHgyMywgMHg0MSwgMHhERCwgMHgyNywgMHhGOCwgMHg4RiwgMHhDMCwgMHhGRiwgMHgwNCwgMHhGQiwgMHgwMSwgMHhEQywgMHgwNywKKzB4RjAsIDB4OUYsIDB4QzAsIDB4NkMsIDB4MDIsIDB4RkYsIDB4MDEsIDB4RUMsIDB4MkYsIDB4RjIsIDB4OUIsIDB4QzIsIDB4N0YsCisweDQyLCAweDMzLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDQ4LCAweDAwLCAweEIzLCAweDg5LCAweEFFLAorMHgyNSwgMHgzMCwgMHgxRiwgMHhDMiwgMHg3RiwgMHgwMiwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNiwgMHhGMCwgMHgxRSwgMHhDMCwKKzB4MDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MDksIDB4MDAsIDB4NjEsCisweDA4LCAweDg1LCAweDAxLCAweEQ4LCAweDBFLCAweDQxLCAweDNGLCAweDAwLCAweEYxLCAweDAwLCAweDg0LCAweDAzLCAweEQyLAorMHgwRiwgMHg1NCwgMHg4OCwgMHgyMCwgMHhFNywgMHgwMCwgMHg4NSwgMHgyMywgMHhEMCwgMHhDQSwgMHg0MCwgMHgzQiwgMHgwMiwKKzB4MjEsIDB4MDgsIDB4QUMsIDB4MDMsIDB4NzAsIDB4MEYsIDB4NDgsIDB4MjgsIDB4MDAsIDB4RUIsIDB4MDAsIDB4OEMsIDB4MDEsCisweEIwLCAweDRBLCAweDQwLCAweDNCLCAweDAyLCAweEVELCAweDAwLCAweDM0LCAweDFCLCAweEQwLCAweDBFLCAweDUwLCAweDU0LAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgwNCwgMHgyMSwgMHgwMiwKKzB4OTQsIDB4QzMsIDB4RDAsIDB4ODYsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTksIDB4MDAsIDB4OTQsIDB4MjMsIDB4RDAsIDB4MEUsCisweDQyLCAweDM4LCAweDkwLCAweEVELCAweDAwLCAweDg0LCAweDAzLCAweEQyLCAweDBBLCAweDAwLCAweDNGLCAweDA0LCAweDAxLAorMHgwMCwgMHg4NCwgMHgyMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgwOSwgMHgwMCwgMHhBMSwgMHg0MCwgMHg5NywgMHgwMSwgMHgxMiwKKzB4MEUsIDB4NDgsIDB4MkIsIDB4MTAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweEE3LCAweDAxLCAweDAxLCAweDgxLCAweDQ0LAorMHgwRSwgMHhEMCwgMHgzMSwgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEOCwgMHgwQywgMHg0MCwKKzB4QjAsIDB4MDgsIDB4QzUsIDB4MDAsIDB4MDQsIDB4MTMsIDB4RDAsIDB4MDgsIDB4NjAsIDB4MzMsIDB4MDAsIDB4MDEsIDB4MDAsCisweDI0LCAweDAzLCAweDU4LCAweDBDLCAweDUwLCAweDIxLCAweDAwLCAweEM5LCAweDAwLCAweDA0LCAweDQwLCAweDEyLCAweDA4LAorMHg0MCwgMHgyMywgMHgwMSwgMHhDRCwgMHgwMCwgMHg3NCwgMHg5RSwgMHhEMSwgMHg4QywgMHg0MCwgMHgxMCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4RkQsIDB4NDAsIDB4MzMsIDB4MDEsIDB4NUMsIDB4MDQsCisweEQwLCAweDE5LCAweEMwLCAweDNGLCAweDAwLCAweEZCLCAweDAwLCAweEQ0LCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDc0LAorMHgwMCwgMHhGRSwgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHhCQiwgMHg4MCwgMHgxMywgMHgwMCwgMHhDQywKKzB4MDMsIDB4RjAsIDB4MEYsIDB4NDAsIDB4MjUsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NUMsIDB4MDUsIDB4MTAsIDB4MDUsIDB4QzgsCisweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDRCLCAweEYwLCAweDBELCAweEMwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwOCwgMHg1RiwgMHgwQSwgMHg3QywgMHg0MCwgMHhGMCwKKzB4MjksIDB4QzEsIDB4MzcsIDB4MDAsIDB4REYsIDB4ODAsIDB4N0MsIDB4MjMsIDB4RjMsIDB4MEQsIDB4QzQsIDB4QzcsIDB4MDAsCisweEM0LCAweDgwLCAweDVDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAxLCAweDFGLCAweDAwLCAweDdDLCAweDAzLAorMHg3MCwgMHgwQywgMHhDMCwgMHgyNiwgMHgwMCwgMHg1RiwgMHgwMiwgMHg1MCwgMHgwNSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywKKzB4MDAsIDB4REUsIDB4NDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MkQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLCAweDAyLCAweDMzLCAweDIwLCAweENDLCAweDAwLCAweDMwLCAweDBCLAorMHhDMCwgMHgzQywgMHgwMCwgMHhGRSwgMHgwMCwgMHhGRSwgMHgwMywgMHhCMiwgMHgwRiwgMHhDMiwgMHg3RiwgMHgwNSwgMHhGRiwKKzB4MDAsIDB4Q0QsIDB4ODMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4MzMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsCisweDBGLCAweEMyLCAweDBFLCAweDAwLCAweDBGLCAweDAxLCAweENELCAweDAxLCAweDMwLCAweDRGLCAweEMwLCAweDdDLCAweDAxLAorMHhFRiwgMHgwMCwgMHhDQywgMHgwNywgMHgzMCwgMHgxQiwgMHhDMCwgMHgwMCwgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4NzYsIDB4MjAsIDB4MDUsIDB4MDQsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MzksIDB4NDEsCisweDM0LCAweDAwLCAweERELCAweDAwLCAweDM0LCAweDAzLCAweDcwLCAweDBELCAweDQwLCAweEE3LCAweDgwLCAweERELCAweDAwLAorMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwgMHgzNSwgMHgwMCwgMHgxMSwgMHgwMywgMHg3NCwgMHgwMywgMHg3MiwgMHgwRCwKKzB4NDgsIDB4NDUsIDB4MDAsIDB4MUQsIDB4MDUsIDB4MDQsIDB4MDgsIDB4NTIsIDB4MEMsIDB4NDAsIDB4MjQsIDB4MDAsIDB4REQsCisweDAwLCAweDQ0LCAweDA5LCAweDEwLCAweDlDLCAweDQwLCAweDA0LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHhBMCwgMHgxNCwgMHg1MCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwNiwgMHgxMCwgMHgxMSwgMHg2MCwgMHgzNiwKKzB4MTAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NEEsIDB4MDcsIDB4ODAsIDB4REQsIDB4MDAsIDB4NDQsCisweDAzLCAweEQwLCAweDA5LCAweDY4LCAweDM3LCAweDAwLCAweDExLCAweDAzLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLAorMHg0NCwgMHgwMCwgMHg5RCwgMHgwOCwgMHg0NCwgMHgyMCwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNSwgMHgwMCwgMHhERCwgMHgwMCwKKzB4NTQsIDB4MTMsIDB4NTAsIDB4MDUsIDB4NDEsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDIyLCAweDAwLCAweDAwLCAweDUxLCAweDAwLCAweDA1LCAweDA0LCAweDE0LCAweDA4LCAweDUwLCAweDMyLCAweDAwLAorMHhDRCwgMHgwMCwgMHg3NCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwgMHgwMywgMHgwMCwgMHhDRCwgMHg4MCwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MDgsIDB4NDAsIDB4MzQsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4NTIsIDB4MEMsIDB4NDAsIDB4MjEsCisweDEwLCAweENELCAweDAwLCAweDQ0LCAweDAwLCAweDUwLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLCAweENELCAweDAwLCAweDQ1LAorMHgwQiwgMHgxNCwgMHgwRCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4QjAsIDB4MzIsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NEQsIDB4MDIsIDB4MzAsIDB4MDEsIDB4QzIsIDB4M0UsIDB4MTAsIDB4REYsCisweDAwLCAweDc0LCAweDAzLCAweDMwLCAweDBGLCAweEMwLCAweDE3LCAweDEwLCAweEVELCAweDAwLCAweENDLCAweDAzLCAweEYwLAorMHgwOSwgMHg4OCwgMHgzRiwgMHg0MCwgMHgxMywgMHg0MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhFMCwgMHgwNCwgMHgyMCwKKzB4MUYsIDB4MDAsIDB4NEUsIDB4MDAsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MjQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MEIsCisweDMwLCAweDAxLCAweEMwLCAweDAwLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LAorMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMSwgMHgwQiwgMHhDQSwgMHgzRCwgMHgwMCwgMHhGRiwgMHgyMCwKKzB4RkMsIDB4MDMsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsCisweEMwLCAweDM5LCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweDQwLCAweDBGLCAweEMwLCAweDBELCAweDAwLCAweDNGLAorMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgxMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4M0YsCisweDAwLCAweEZCLCAweDFDLCAweEVDLCAweDA1LCAweDMwLCAweDBCLCAweEMwLCAweDVGLCAweDAwLCAweEJGLCAweDAwLCAweEVDLAorMHgwMywgMHhCMCwgMHgwRiwgMHhDMSwgMHgzRiwgMHgwMCwgMHgzQiwgMHg4MSwgMHhFQywgMHgzMywgMHg3MCwgMHgwRiwgMHhDMCwKKzB4NEYsIDB4MDAsIDB4MkYsIDB4MDEsIDB4RkMsIDB4ODQsIDB4RjAsIDB4NEYsIDB4ODAsIDB4N0MsIDB4MDAsIDB4N0IsIDB4MDEsCisweEJDLCAweDA0LCAweEYwLCAweDEzLCAweEMyLCAweDRFLCAweDAwLCAweEZGLCAweDAxLCAweEZFLCAweDAwLCAweEYwLCAweDAzLAorMHg0NCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHhGRiwgMHgwMiwKKzB4RjEsIDB4MDIsIDB4NDQsIDB4MDYsIDB4MTQsIDB4MTksIDB4NDAsIDB4MjYsIDB4MDAsIDB4OEQsIDB4NzAsIDB4NzQsIDB4QUYsCisweDEwLCAweDFGLCAweDQwLCAweEZGLCAweDAwLCAweDlELCAweDAxLCAweDc0LCAweDNCLCAweDEwLCAweEJGLCAweDQwLCAweDc3LAorMHgwMCwgMHhERCwgMHgwMSwgMHg3NCwgMHgwNywgMHhEMCwgMHhCRiwgMHg0MCwgMHgzOCwgMHgwNSwgMHg5MSwgMHgwMSwgMHg3NCwKKzB4MDQsIDB4RDAsIDB4MTEsIDB4NDAsIDB4NDcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzYsIDB4ODYsIDB4RDIsIDB4MTksIDB4NDAsCisweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDIwLCAweEM4LAorMHgwNCwgMHg2NCwgMHgwMSwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwNCwgMHgwNiwgMHgwMywgMHg5MCwKKzB4MEMsIDB4NDIsIDB4QjMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MTMsIDB4NTAsIDB4MEMsIDB4NjAsIDB4MzMsIDB4MjAsCisweENELCAweDgwLCAweDM0LCAweDAyLCAweDUyLCAweDBDLCAweDYwLCAweDMwLCAweDQwLCAweDg1LCAweDQwLCAweDE2LCAweDAwLAorMHhEMCwgMHgwMCwgMHg0MiwgMHgwMywgMHgwMCwgMHhDNSwgMHg4MCwgMHgzNCwgMHgwMCwgMHhEMiwgMHgwMCwgMHg0MiwgMHg0NywKKzB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4MDAsIDB4RDEsIDB4MDAsCisweDQ0LCAweDAyLCAweDUwLCAweDE5LCAweDQwLCAweDI2LCAweDAwLCAweDlELCAweDIzLCAweDc0LCAweDAzLCAweDUwLCAweDBELAorMHg0MCwgMHgzNywgMHgwMCwgMHg5QywgMHgwMSwgMHgzNCwgMHgwMywgMHgxMCwgMHgwRCwgMHgwMCwgMHgzNywgMHgwMCwgMHhERCwKKzB4MDYsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MTAsIDB4OTUsIDB4MDAsIDB4NzQsIDB4MEUsIDB4RDAsCisweDExLCAweDQwLCAweDY3LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDA2LCAweEMwLCAweDE5LCAweDQwLCAweDBGLCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNywgMHgwMCwgMHhEQiwgMHg4MCwgMHgyQywKKzB4MTIsIDB4NzEsIDB4MTEsIDB4QzEsIDB4MTcsIDB4MDEsIDB4MUYsIDB4MDMsIDB4NEMsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsCisweDM3LCAweDAwLCAweDEzLCAweDAzLCAweDZDLCAweDAzLCAweDcyLCAweDBELCAweEM4LCAweDA3LCAweDAxLCAweDFFLCAweDAwLAorMHg3QywgMHgwMSwgMHhGMCwgMHgwQywgMHhDMCwgMHgzNCwgMHgwMCwgMHg1NSwgMHgwNSwgMHg3QywgMHgwNCwgMHhEMCwgMHgzMSwKKzB4QzAsIDB4NDcsIDB4MDEsIDB4REYsIDB4QTAsIDB4NzQsIDB4MDQsIDB4RjAsIDB4MTksIDB4QzEsIDB4MDMsIDB4MjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDM5LCAweDAwLCAweEVGLCAweDAwLCAweEZDLCAweDAyLAorMHhCMCwgMHgwMywgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHg4MCwgMHhCQywgMHgwMywgMHhCMCwgMHgwRiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RDAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDEsIDB4RkYsIDB4NDEsIDB4RkMsCisweDAzLCAweEYwLCAweDBGLCAweEMxLCAweDNGLCAweDAwLCAweEIzLCAweDA5LCAweEY4LCAweDAyLCAweEYwLCAweDAzLCAweEMwLAorMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGOCwgMHg0MCwgMHhGMCwgMHgwOSwgMHhDMSwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDI5LCAweEMwLCAweDM3LCAweDAwLCAweDFGLCAweDIyLCAweDZDLCAweDAzLCAweDMwLCAweDhELCAweEMwLCAweDM3LCAweDAwLAorMHgxMywgMHg0NiwgMHg3QywgMHgwMywgMHhCMiwgMHgwRCwgMHhDNCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMiwgMHg0QywgMHgxNywKKzB4QjAsIDB4OEQsIDB4QzIsIDB4MzcsIDB4MTAsIDB4OUYsIDB4ODAsIDB4N0UsIDB4MDgsIDB4QjQsIDB4ODEsIDB4QzgsIDB4MjcsCisweDExLCAweERGLCAweDAwLCAweDVFLCAweDAwLCAweEYwLCAweDI5LCAweEMwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzQywgMHgwMCwgMHhGMSwgMHgwMCwgMHg0NCwgMHgxMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4MjcsIDB4MjIsIDB4OUQsIDB4QTAsIDB4QzQsIDB4NEIsIDB4NTAsIDB4MUYsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MUEsCisweDAzLCAweEY0LCAweDAzLCAweDEwLCAweDBGLCAweDQwLCAweDc0LCAweDAxLCAweERELCAweDAwLCAweDQ0LCAweDBCLCAweDEwLAorMHgyRiwgMHg0MiwgMHgzNywgMHgwMCwgMHg5MSwgMHgwQiwgMHg3NCwgMHgwMiwgMHgyMSwgMHgwMSwgMHg0MCwgMHhBNywgMHgwMSwKKzB4REQsIDB4MDAsIDB4NDYsIDB4MUEsIDB4OTAsIDB4MjksIDB4QzAsIDB4NEUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDMyLCAweDAwLCAweEM1LCAweDAwLCAweDE0LCAweDEzLCAweEQwLCAweDAwLCAweDQwLAorMHgzMiwgMHgwMiwgMHgwRCwgMHgwMCwgMHgyNCwgMHgxRiwgMHgxMCwgMHgwQywgMHg0OCwgMHgzMywgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4MDEsIDB4MEQsIDB4QTAsIDB4MjYsIDB4ODgsIDB4MTAsIDB4MkMsCisweDQ4LCAweDMzLCAweDAwLCAweEM0LCAweDA4LCAweDM0LCAweDAwLCAweDEwLCAweDUwLCAweDQ4LCAweDQyLCAweDIwLCAweEM5LAorMHg4MCwgMHgyNCwgMHgwMiwgMHhEMiwgMHgyMCwgMHg0MCwgMHgxRSwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4ODAsIDB4NzAsIDB4MDAsIDB4QzEsIDB4MDEsIDB4ODQsIDB4MDYsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NkIsCisweDAwLCAweDZELCAweDAxLCAweDg0LCAweDA3LCAweDUwLCAweDFFLCAweDQwLCAweDdCLCAweDAyLCAweEFELCAweDI5LCAweEI0LAorMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg0QiwgMHgwMCwgMHgyRCwgMHg0MSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg2MCwKKzB4N0IsIDB4MjIsIDB4RTEsIDB4NDEsIDB4RjQsIDB4MDQsIDB4OTAsIDB4OTIsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsCisweDg0LCAweDA2LCAweDkwLCAweDEyLCAweDQwLCAweDFBLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDNywgMHgwOCwgMHgxQywgMHgwMywgMHhEMCwgMHgwNCwgMHhDMCwgMHgyMywgMHgwMCwKKzB4Q0YsIDB4MDAsIDB4MkUsIDB4MDMsIDB4MzAsIDB4MEMsIDB4RTgsIDB4MzMsIDB4MDIsIDB4ODcsIDB4MTIsIDB4M0MsIDB4MDMsCisweEIwLCAweDBDLCAweEMxLCAweDAzLCAweDIwLCAweDBELCAweDAxLCAweDJELCAweDE2LCAweDMwLCAweDhDLCAweEMwLCAweDMzLAorMHgwMCwgMHg4NywgMHgwOCwgMHgzNCwgMHgwNiwgMHgzMCwgMHg1MCwgMHhDMiwgMHgxMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgzQywKKzB4MDMsIDB4RjAsIDB4ODQsIDB4QzAsIDB4NEEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweEI4LCAweDNELCAweDAwLCAweEZDLCAweDIyLCAweERDLCAweDAyLCAweEYwLCAweDBGLCAweDgwLCAweDJGLCAweDAyLCAweEZGLAorMHgwMCwgMHg5QywgMHg2MywgMHhGMCwgMHhBRiwgMHhDMCwgMHgzMywgMHg0QSwgMHg5MywgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEUsIDB4QzEsIDB4MEMsIDB4OTIsIDB4MUYsIDB4ODAsIDB4MEMsIDB4MjMsIDB4NzQsIDB4MEYsIDB4QzAsIDB4NzcsIDB4MDAsCisweEI3LCAweDA4LCAweDdDLCAweDAyLCAweDcwLCAweDg3LCAweEUwLCAweDNGLCAweDAwLCAweEVGLCAweDAwLCAweEZELCAweDAyLAorMHhGMCwgMHgwRiwgMHhDMiwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwKKzB4QjcsIDB4MDMsIDB4REYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDAsIDB4N0YsIDB4MDEsCisweDZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweEI3LCAweDg2LCAweDEzLCAweDAxLCAweDVDLCAweDAzLCAweDcxLCAweDVELAorMHhDMCwgMHg0MCwgMHg5MCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMSwgMHgzOCwgMHgwRCwgMHhDNCwgMHgzNywgMHgwMCwgMHhEMywKKzB4ODAsIDB4N0MsIDB4MDIsIDB4RDAsIDB4MTEsIDB4QzAsIDB4MjQsIDB4ODAsIDB4Q0YsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjEsCisweDAxLCAweEMwLCAweDU3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDM5LAorMHgwMywgMHhFRCwgMHgwMiwgMHhCNCwgMHgwMiwgMHgxMCwgMHgwNiwgMHg0MCwgMHgyQiwgMHgwMCwgMHhGRCwgMHgwMCwgMHg4NCwKKzB4OTMsIDB4RDAsIDB4MkUsIDB4NDIsIDB4MzMsIDB4MjEsIDB4QTEsIDB4MDAsIDB4ODQsIDB4MTMsIDB4RDAsIDB4Q0UsIDB4NjgsCisweDM5LCAweDMwLCAweEUxLCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweENFLCAweDQwLCAweDNGLCAweDE5LCAweEUxLCAweDIwLAorMHhCNCwgMHgwMiwgMHhEMiwgMHgwMiwgMHg0NCwgMHgzOCwgMHgxMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwgMHgwMiwKKzB4NDAsIDB4NEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzksIDB4MDAsCisweEVELCAweDAxLCAweDk0LCAweDA3LCAweDEwLCAweDFFLCAweDQxLCAweDdCLCAweDA4LCAweDZELCAweDAwLCAweEI0LCAweDA3LAorMHhEMCwgMHg1RSwgMHg0MCwgMHg3QiwgMHgwMSwgMHhCMSwgMHgyMSwgMHhCNCwgMHgyNywgMHg1MCwgMHgxQywgMHg1MCwgMHgzQSwKKzB4MDAsIDB4RTEsIDB4MDEsIDB4OTQsIDB4MDcsIDB4OTEsIDB4OUUsIDB4NDQsIDB4M0IsIDB4MDMsIDB4QTEsIDB4MDEsIDB4QjQsCisweDQ2LCAweEQ4LCAweDEzLCAweDQ0LCAweDc4LCAweDAwLCAweEU1LCAweDgxLCAweDg0LCAweEM3LCAweEQwLCAweDFBLCAweDQwLAorMHgwRiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwOCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MkUsIDB4MTUsIDB4MkMsIDB4NDEsIDB4MjMsIDB4MjAsIDB4Q0QsIDB4MTMsIDB4MDQsIDB4MDMsIDB4RDAsCisweDBDLCAweDQwLCAweDMzLCAweDAwLCAweEMxLCAweDExLCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQ0LCAweDM3LCAweDAwLAorMHhDMSwgMHgwMCwgMHgzNCwgMHg4NywgMHg5MCwgMHgwQywgMHg0MCwgMHgzNywgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHg0NywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4ODcsIDB4RDAsIDB4RUMsIDB4NDAsIDB4NEIsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE1LCAweDAwLCAweDVGLCAweDAwLAorMHhCQywgMHgwRCwgMHgzMCwgMHgwNywgMHhDMCwgMHg1RiwgMHgwMSwgMHg3RiwgMHg0MCwgMHg3QywgMHgwMSwgMHhEMCwgMHgwNSwKKzB4QzAsIDB4MTcsIDB4MTAsIDB4NzMsIDB4MDMsIDB4N0MsIDB4MDEsIDB4NzEsIDB4MDUsIDB4QzAsIDB4OUUsIDB4QzAsIDB4NzMsCisweDA5LCAweDlDLCAweDA1LCAweDkxLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDYxLCAweDAwLCAweEY0LCAweDAxLCAweEYwLAorMHgyNywgMHg0MCwgMHgxQywgMHg4MCwgMHg0RiwgMHgwMCwgMHhDNCwgMHg4RCwgMHhGMCwgMHgzNywgMHg0MCwgMHg1RiwgMHgyMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsCisweDQ4LCAweEYwLCAweDAxLCAweEMwLCAweDg3LCAweDIwLCAweDFGLCAweDA4LCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEUwLAorMHgwNywgMHg0MCwgMHgxRiwgMHgwOCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NCwgMHgyNiwgMHgxRiwgMHg4QSwKKzB4N0MsIDB4MjAsIDB4NzAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MDgsIDB4RjIsIDB4MDEsCisweEMwLCAweDg3LCAweDM5LCAweDFGLCAweDAwLCAweDdELCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDRCLCAweDAwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwNiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4ODMsIDB4MDAsIDB4MEMsIDB4MDIsIDB4QjIsIDB4MDksIDB4QzgsIDB4MjcsCisweDAyLCAweDlCLCAweDA1LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDIwLCAweDkxLCAweDAwLCAweDdDLAorMHgyMiwgMHhCNCwgMHg5OCwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5MywgMHg0MCwgMHg0QywgMHgyNiwgMHgzMCwgMHgwOSwgMHhDMSwKKzB4NjcsIDB4MDIsIDB4OUIsIDB4MDAsIDB4MEMsIDB4MDIsIDB4MzAsIDB4MzksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI2LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweDE0LAorMHgwOSwgMHhDMCwgMHgyMSwgMHgwMiwgMHg5NSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyMywgMHgwMCwKKzB4OTAsIDB4MDEsIDB4NzQsIDB4MDIsIDB4RDAsIDB4OTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDQsIDB4N0MsIDB4MEUsCisweDEwLCAweDA5LCAweDQwLCAweDJDLCAweDAwLCAweDlCLCAweDEyLCAweDJDLCAweDBFLCAweDE0LCAweDk5LCAweDQwLCAweEUzLAorMHg0MCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwQSwgMHg1MCwgMHgzOSwgMHg0OCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4ODAsIDB4OEQsIDB4MDAsIDB4NTQsIDB4MjIsIDB4MTAsIDB4MDksCisweDYwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDkwLCAweDA5LCAweDQ0LCAweDI3LCAweDAwLCAweDk5LAorMHgwMCwgMHg3MCwgMHgwMiwgMHhEOCwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5NSwgMHgyMCwgMHg3NiwgMHgwQSwgMHgxOCwKKzB4MDksIDB4NDEsIDB4MjUsIDB4MDAsIDB4OTEsIDB4MDgsIDB4NDAsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDQsCisweDkxLCAweDAxLCAweDQ0LCAweDQ3LCAweDExLCAweDI5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhBMCwgMHgwMSwgMHg4RCwgMHgwNCwgMHgwNCwgMHgwMiwgMHgxMCwgMHg0OCwgMHg0MCwKKzB4QTUsIDB4QTAsIDB4ODUsIDB4MTQsIDB4MDQsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4QzksIDB4MDAsCisweDM0LCAweDIyLCAweEQyLCAweDA4LCAweDQwLCAweDI3LCAweDAwLCAweDg1LCAweDAwLCAweDc0LCAweDAyLCAweDFBLCAweDA4LAorMHg0MCwgMHgyMCwgMHgwMiwgMHg5OSwgMHgyMCwgMHgyNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwKKzB4MDEsIDB4MDQsIDB4MTIsIDB4NTAsIDB4NDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDFELCAweDhBLCAweDU0LCAweDAxLCAweDMxLCAweDAxLCAweEMxLCAweDk3LAorMHgwMCwgMHgxMywgMHgwQSwgMHg0QywgMHg1MCwgMHhCMCwgMHg0MSwgMHg0MSwgMHgwNywgMHgwNSwgMHgxQiwgMHgwMCwgMHg3QywKKzB4NTgsIDB4RDAsIDB4NDEsIDB4NDEsIDB4MTcsIDB4MDAsIDB4MTcsIDB4MjAsIDB4N0UsIDB4MDAsIDB4QjAsIDB4NDEsIDB4QzEsCisweEM1LCAweDAwLCAweDEzLCAweDAwLCAweDRELCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDBBLAorMHg0QywgMHgwMCwgMHgzMywgMHgwMSwgMHhDMiwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTksIDB4QjgsIDB4NjcsIDB4MDIsIDB4OUYsIDB4MDgsIDB4QkMsIDB4MDIsIDB4RDAsIDB4MEIsIDB4QzgsIDB4MkQsIDB4MDEsCisweEJGLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweEE2LCAweDAwLCAweDdDLCAweDEyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCQiwgMHgwMCwgMHg5QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHhBNywKKzB4MDksIDB4QkYsIDB4NjAsIDB4REMsIDB4ODIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MDgsIDB4OTcsIDB4MDAsIDB4RkQsCisweDIyLCAweEYwLCAweDhCLCAweEMwLCAweDY3LCAweDQ4LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBMCwgMHgyNywgMHgwNSwgMHg5RiwgMHgwQywgMHhGQywgMHgwMiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgyRiwgMHgwMiwgMHg5RiwKKzB4ODQsIDB4RjQsIDB4RDIsIDB4NzAsIDB4NEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4NzAsCisweDRCLCAweEMwLCAweDJDLCAweDAwLCAweEI3LCAweDIwLCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMyLCAweDY0LCAweDAzLAorMHhBNSwgMHg4MCwgMHhDQywgMHgwMiwgMHg3MSwgMHgwQiwgMHg0MCwgMHgyRCwgMHgwMCwgMHhCQiwgMHgyMCwgMHhDQywgMHgwMiwKKzB4RjAsIDB4MEIsIDB4ODIsIDB4NjQsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsCisweDQ3LCAweDA1LCAweDFELCAweDRDLCAweDc0LCAweDAwLCAweEMwLCAweDAxLCAweDQ0LCAweDA3LCAweDIwLCAweDFELCAweEI0LAorMHg3NCwgMHgwMCwgMHg3MCwgMHg4MSwgMHg0MCwgMHg4NCwgMHgwMCwgMHgxOSwgMHg4MCwgMHg3NCwgMHhBMCwgMHhEMCwgMHgwMSwKKzB4NDQsIDB4MDYsIDB4MDAsIDB4MTMsIDB4ODAsIDB4NUMsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4ODQsIDB4MTAsIDB4NTcsCisweDAwLCAweDRDLCAweDAwLCAweEQwLCAweDAxLCAweEMwLCAweDE1LCAweDIwLCAweDE5LCAweDUwLCAweDZDLCAweDAwLCAweEQwLAorMHgwMSwgMHg1MCwgMHg3MCwgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywKKzB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MDIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MEMsIDB4MzQsCisweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIwLCAweDAyLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweDUwLCAweDg4LCAweDQ4LAorMHgyNiwgMHg4MCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHhBMCwgMHgyMCwgMHg4NSwgMHgwMCwKKzB4MTcsIDB4ODIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MjQsIDB4MDIsIDB4RDAsIDB4MDgsCisweDQwLCAweDQwLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAwLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgxMywgMHhEMCwgMHgwOSwgMHg0MCwgMHhBNywgMHgwMCwgMHg5RCwgMHgxMCwgMHg3NCwgMHgwMiwKKzB4NTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4RDksIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjYsCisweDAwLCAweDkxLCAweDA2LCAweDU2LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDEwLCAweDk1LCAweDA4LCAweDQ0LAorMHgwNiwgMHhEOCwgMHgxOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5OSwgMHgwMCwgMHg2NCwgMHgwNiwgMHhEMCwgMHgxOSwgMHgwMCwKKzB4NjAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjgsIDB4MkQsIDB4MDAsIDB4OUYsCisweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDU5LCAweEMwLCAweEE3LCAweDAyLCAweDlGLCAweDAzLCAweDdDLCAweDAyLCAweDcwLAorMHgwOSwgMHhDNCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwNSwgMHg3QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHg2MCwgMHgwMSwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4NDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NUMsIDB4NDYsCisweDcwLCAweDU5LCAweENFLCAweEU1LCAweDAyLCAweDlCLCAweDAwLCAweDZDLCAweDRFLCAweEYwLCAweDE5LCAweEMxLCAweDE0LAorMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweDUwLCAweDI3LCAweDI0LCAweDlGLCAweDA5LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM0LCAweDY1LCAweDAyLCAweDlGLAorMHg0MSwgMHg3OCwgMHgwMiwgMHhGMSwgMHgwOCwgMHhEMCwgMHgyNywgMHgwOCwgMHg5RiwgMHgwMSwgMHg3OCwgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4NjcsIDB4ODAsIDB4OUUsIDB4MDAsIDB4NzgsIDB4MDIsIDB4RjEsIDB4MDgsIDB4QzAsIDB4NTMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDVDLAorMHgwMCwgMHhGOCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHg4MCwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDMsIDB4N0MsIDB4MDAsIDB4RDIsIDB4MDAsIDB4RDAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MTIsCisweDRDLCAweDQwLCAweEIwLCAweDgxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDE4LCAweEYwLCAweDIxLAorMHhDMCwgMHgwNywgMHgwNCwgMHgxMywgMHgwMCwgMHg0QywgMHgxOCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NUQsIDB4MDAsIDB4QzQsIDB4MDEsCisweDcwLCAweDA1LCAweDQwLCAweDlGLCAweDA4LCAweDUxLCAweDAwLCAweEY0LCAweDZELCAweEQwLCAweDE1LCAweDQwLCAweDlGLAorMHgwMCwgMHg3RCwgMHgxMCwgMHg3NCwgMHgwMSwgMHhEMSwgMHgxNSwgMHg0MywgMHg5QywgMHgxMCwgMHg3RCwgMHgwMCwgMHhFQywKKzB4MTEsIDB4NzAsIDB4MzcsIDB4QzgsIDB4MTYsIDB4MDAsIDB4NkQsIDB4MTAsIDB4QzUsIDB4MDEsIDB4RDAsIDB4ODcsIDB4NDAsCisweDVGLCAweDA0LCAweDYxLCAweDE4LCAweEM0LCAweDA5LCAweEIwLCAweDA3LCAweDQwLCAweDUzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg1MCwKKzB4MEMsIDB4NDgsIDB4QjMsIDB4MDQsIDB4QzEsIDB4MDAsIDB4MzYsIDB4MEUsIDB4RDAsIDB4MDgsIDB4NDAsIDB4QjMsIDB4MDAsCisweENELCAweDAxLCAweDM0LCAweDAzLCAweEQ4LCAweDFDLCAweDQ0LCAweEIyLCAweDgxLCAweENELCAweDBCLCAweDI0LCAweDAzLAorMHg1MCwgMHgzQywgMHg0MSwgMHgzMSwgMHgwMCwgMHhDRCwgMHgxMSwgMHgwNCwgMHgwRSwgMHhEMCwgMHgyQywgMHg0MCwgMHg3MywKKzB4MDAsIDB4QzEsIDB4NDAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4QUMsIDB4NjEsIDB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDAxLCAweEVELCAweDA5LCAweDg0LCAweDAxLCAweDUwLCAweDBFLAorMHg0MCwgMHhGQiwgMHg0MCwgMHhFMSwgMHgwMCwgMHhCNiwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwNCwgMHhFRCwKKzB4MjAsIDB4QjQsIDB4OTMsIDB4RDAsIDB4MUUsIDB4NDAsIDB4QUEsIDB4MDgsIDB4RkQsIDB4MDEsIDB4QTQsIDB4MDAsIDB4NTEsCisweDBFLCAweDQwLCAweDNCLCAweDAyLCAweDJELCAweDAwLCAweDg2LCAweDBBLCAweEQwLCAweDBFLCAweDYwLCAweDdCLCAweDA4LAorMHhFMSwgMHgwMCwgMHgwNSwgMHg4NywgMHg5MCwgMHgwRSwgMHg2MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NzgsIDB4MDEsIDB4RkYsIDB4MDUsIDB4OUMsIDB4MDUsIDB4NzAsIDB4MUUsIDB4QzAsCisweDdGLCAweDAwLCAweEUzLCAweDBGLCAweEJDLCAweDA2LCAweEYwLCAweDFBLCAweDQwLCAweDdCLCAweDAwLCAweDJELCAweDAxLAorMHhCNCwgMHgzRiwgMHhGMCwgMHgwQywgMHhDQywgMHg0QSwgMHg4MCwgMHhFRiwgMHgwMSwgMHhBRSwgMHgwNCwgMHg3MCwgMHgxQywKKzB4QzAsIDB4NzksIDB4MDUsIDB4MkQsIDB4MDEsIDB4OUMsIDB4MDcsIDB4RTksIDB4MUUsIDB4QzAsIDB4N0IsIDB4NDAsIDB4RTEsCisweDIxLCAweDhDLCAweDA1LCAweDMwLCAweDE2LCAweEMwLCAweDUzLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgxMCwgMHg3QywgMHgwMSwgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywKKzB4MDAsIDB4REYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MEQsIDB4QzQsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDgzLCAweEYxLCAweDBELCAweEMyLCAweDI1LCAweDAwLCAweENGLCAweDQwLCAweDdDLCAweDAwLCAweDYwLCAweDBELCAweEMwLAorMHhCNiwgMHgyMCwgMHgxRiwgMHgwMCwgMHg1OCwgMHg4MywgMHhGQSwgMHgwOSwgMHhDMCwgMHgxMywgMHgwOCwgMHhDRiwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4RjEsIDB4MDUsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEEyLCAweDdGLCAweDE0LCAweEZGLCAweDAxLCAweEZDLCAweDExLCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAyLAorMHhGRiwgMHgwOSwgMHhGQywgMHgwNiwgMHgzMCwgMHg5RiwgMHhDMCwgMHg3RSwgMHgwMiwgMHhGRiwgMHgwOSwgMHhGQywgMHgwNywKKzB4NzAsIDB4MUYsIDB4QzgsIDB4NkYsIDB4MDIsIDB4RUYsIDB4NDEsIDB4REMsIDB4MjQsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0MsCisweDAwLCAweDMzLCAweDA5LCAweEY4LCAweDA3LCAweEYwLCAweDlGLCAweEMwLCAweDdGLCAweDAyLCAweEZCLCAweDQxLCAweENDLAorMHgwNSwgMHgzMCwgMHg5NywgMHhDNCwgMHgwQiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4ODgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4NDEsIDB4RDEsIDB4MEUsIDB4QzAsIDB4MzksIDB4MjMsIDB4RUQsCisweDA4LCAweEI0LCAweDAyLCAweEIwLCAweDhFLCAweDA4LCAweDM4LCAweDAwLCAweEVELCAweDA4LCAweERDLCAweDIzLCAweDMwLAorMHg0RSwgMHg0NCwgMHg2QiwgMHgyQSwgMHhDOSwgMHhDMCwgMHgxMCwgMHgyMCwgMHhEMCwgMHg4MiwgMHg0MCwgMHgzOSwgMHgwMCwKKzB4MkQsIDB4MEMsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MDQsIDB4MDAsIDB4M0IsIDB4MDcsIDB4RTcsIDB4MDgsIDB4QUMsIDB4MjksCisweDMwLCAweEFFLCAweEMwLCAweDU1LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg3OSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgyMSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgxQiwgMHgyNCwgMHhFRCwgMHg0MCwKKzB4OTYsIDB4MDIsIDB4OTAsIDB4OEUsIDB4NDgsIDB4MjksIDB4MDgsIDB4MkQsIDB4MDAsIDB4OTAsIDB4MDMsIDB4NTAsIDB4MEEsCisweDQ4LCAweDBCLCAweDA3LCAweDY1LCAweDE4LCAweDk0LCAweDQwLCAweEQwLCAweDBFLCAweDQwLCAweDMxLCAweDAwLCAweDJELAorMHg4MCwgMHhCNCwgMHg0MywgMHhEMCwgMHgwRSwgMHg0OCwgMHgyQiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg4NCwgMHgwMSwgMHg5MCwKKzB4ODIsIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4MzMsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDBELCAweEQwLCAweDJDLCAweDQwLCAweEUxLCAweDA0LCAweENELCAweDAyLCAweDM0LAorMHgwMiwgMHg4MCwgMHgwQywgMHg1MCwgMHgyMSwgMHgxMCwgMHhDRCwgMHgxMiwgMHgxNCwgMHgwMywgMHgxMCwgMHgwOCwgMHg0MCwKKzB4NjMsIDB4MTEsIDB4NDksIDB4MDEsIDB4MDQsIDB4MEMsIDB4QzAsIDB4MDAsIDB4NDIsIDB4MzEsIDB4MDAsIDB4MEQsIDB4MDAsCisweDM0LCAweDRCLCAweEQ4LCAweDkwLCAweDQyLCAweDczLCAweDAxLCAweDQ1LCAweDAwLCAweDI0LCAweDJFLCAweDE0LCAweDE4LAorMHg0MCwgMHgxOSwgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4M0MsIDB4MEYsIDB4RjAsIDB4MkQsIDB4QzEsIDB4ODMsIDB4MDAsIDB4RkYsIDB4MDUsIDB4NUUsIDB4MDMsCisweEIwLCAweDA4LCAweEMwLCAweDM1LCAweDAwLCAweENGLCAweDgxLCAweERDLCAweDgzLCAweDcwLCAweDA5LCAweEMyLCAweDIzLAorMHgxMCwgMHhENywgMHgwMCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzRCwgMHgwOCwgMHgxNywgMHgxOCwgMHg3NCwKKzB4MDMsIDB4RjAsIDB4MzksIDB4NjgsIDB4MzcsIDB4MTAsIDB4RDcsIDB4MDAsIDB4NEMsIDB4ODIsIDB4QjgsIDB4NTksIDB4QzAsCisweDc3LCAweDIxLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweERGLAorMHg0MCwgMHg3QywgMHgxMSwgMHhGMCwgMHg0RCwgMHhDMiwgMHg4NywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwQSwgMHhGMSwKKzB4MEQsIDB4NDAsIDB4QjQsIDB4MDAsIDB4REYsIDB4MDEsIDB4NUMsIDB4MDMsIDB4NzAsIDB4MEQsIDB4ODIsIDB4QTcsIDB4MDAsCisweERDLCAweDQ0LCAweDdDLCAweDAwLCAweEYyLCAweDBELCAweEMwLCAweDMzLCAweDAwLCAweDE2LCAweDIwLCAweDdDLCAweDAzLAorMHhGMCwgMHgwOSwgMHhDNSwgMHgzNiwgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOSwgMHgwNywKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDAsCisweEZDLCAweDBCLCAweDMwLCAweDBFLCAweEMwLCAweDJDLCAweDAwLCAweEYzLCAweDEwLCAweEZDLCAweDI3LCAweEYwLCAweDA5LAorMHhDMCwgMHgzOCwgMHg0MCwgMHgzMywgMHgwNSwgMHhDQywgMHgwMywgMHhGMCwgMHgwQSwgMHhDMCwgMHgwQywgMHgwMCwgMHhGMywKKzB4QTAsIDB4RTgsIDB4QzAsIDB4MzAsIDB4MTMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4M0IsIDB4MDEsIDB4Q0MsIDB4MDUsIDB4RjAsCisweDAzLCAweEMyLCAweDNELCAweDAwLCAweEZCLCAweDAxLCAweDdDLCAweDQyLCAweEYwLCAweDAyLCAweDQwLCAweDA0LCAweDI4LAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwKKzB4MDIsIDB4MTQsIDB4MEQsIDB4NjAsIDB4NjQsIDB4ODEsIDB4RDUsIDB4MDAsIDB4NzQsIDB4MEUsIDB4RDAsIDB4MEQsIDB4NDAsCisweDM1LCAweDgxLCAweEQxLCAweDIzLCAweDRDLCAweDAzLCAweDMwLCAweDBELCAweDQwLCAweEU1LCAweDAwLCAweEMxLCAweDAwLAorMHgxMCwgMHgyMCwgMHhCMCwgMHg1MSwgMHg0MCwgMHgzNywgMHgwMCwgMHgwNSwgMHg0MywgMHg0NCwgMHgxNSwgMHhEMCwgMHgxMSwKKzB4NDMsIDB4MTMsIDB4MDAsIDB4RDEsIDB4MDAsIDB4N0MsIDB4MEUsIDB4RDEsIDB4MzEsIDB4NTAsIDB4MDQsIDB4MDYsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDMyLCAweDAwLCAweEQ5LCAweDAwLCAweDc0LCAweDAzLAorMHg5MiwgMHgwRCwgMHg1MCwgMHg0NCwgMHgwOCwgMHhEMSwgMHgwMCwgMHg3NCwgMHhDMywgMHhEQSwgMHgwRCwgMHgwMCwgMHgxNCwKKzB4MjAsIDB4MTEsIDB4NDAsIDB4NjQsIDB4MDMsIDB4RDAsIDB4NDksIDB4NDAsIDB4QzQsIDB4MDAsIDB4OTEsIDB4MDgsIDB4NzQsCisweDQwLCAweDkwLCAweDRELCAweDQwLCAweDM3LCAweDAwLCAweDE1LCAweDE0LCAweDY0LCAweDIzLCAweEQxLCAweDE5LCAweDA0LAorMHgzNywgMHgwMCwgMHg5MSwgMHgwNCwgMHg3NCwgMHgwNCwgMHhEOSwgMHgxOSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NzQsIDB4MDEsIDB4OTAsCisweDBDLCAweDQwLCAweDA0LCAweDAwLCAweEM1LCAweDAwLCAweDM0LCAweDAxLCAweEQwLCAweDBDLCAweDQwLCAweDExLCAweDEwLAorMHgwMSwgMHgwMCwgMHgyNCwgMHgwMywgMHg1MCwgMHgwQywgMHg0NiwgMHgwNSwgMHhFMSwgMHg5MSwgMHgwMiwgMHg1NCwgMHgyMCwKKzB4OTAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MDUsIDB4QjMsIDB4RDgsIDB4MDAsIDB4MDAsIDB4MzMsCisweEMwLCAweDgxLCAweDQwLCAweDI0LCAweDAwLCAweEQwLCAweDA4LCAweDYwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgzRSwgMHgwMCwgMHhGQiwgMHgwMCwgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwKKzB4NDAsIDB4MDQsIDB4MDAsIDB4RjEsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTEsCisweDAwLCAweEVDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDA0LCAweDA1LCAweDEzLCAweDAyLCAweDZDLCAweDAwLCAweEIwLAorMHgwMSwgMHg0MCwgMHgzRiwgMHgwMCwgMHgxNywgMHgwMCwgMHg2QywgMHgwMywgMHhGMiwgMHhBMSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4NDMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzgsIDB4MDUsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweDcwLCAweDBGLCAweEMwLAorMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMSwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RDAsIDB4MDMsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MDcsIDB4MTAsIDB4M0YsIDB4ODAsIDB4RUMsIDB4OTAsIDB4RjAsIDB4MDMsCisweEMwLCAweDNGLCAweDAwLCAweDNDLCAweDAwLCAweDdDLCAweDFCLCAweEYwLCAweDQzLCAweEMwLCAweDNGLCAweDAwLCAweDdGLAorMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDOCwgMHgxNywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4ODAsIDB4MEYsIDB4MDYsIDB4QUYsIDB4MDAsIDB4RUMsIDB4MDIsIDB4RTAsIDB4MUUsIDB4QzAsIDB4MEYsCisweDA1LCAweEZCLCAweDBDLCAweEZDLCAweDUwLCAweDMwLCAweDQzLCAweEMwLCAweDJDLCAweDAxLCAweDMzLCAweDAwLCAweENDLAorMHgwMywgMHgzMCwgMHgxRiwgMHhDMCwgMHgwRiwgMHgwNSwgMHgyMywgMHgwMSwgMHhFQywgMHgwMywgMHhCMCwgMHgxMywgMHhDMCwKKzB4M0YsIDB4MDEsIDB4M0IsIDB4MDEsIDB4QzQsIDB4MDYsIDB4QjYsIDB4ODMsIDB4QzAsIDB4MEQsIDB4MDMsIDB4MzcsIDB4MDAsCisweEFDLCAweDI3LCAweDMwLCAweDFFLCAweEMwLCAweDBFLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgxMCwgMHg4NywgMHgwMSwgMHg5RCwgMHgwMSwgMHg0NCwgMHgwMCwgMHhEMCwgMHgwRCwgMHg0MCwgMHg4MywgMHgwMCwKKzB4RjEsIDB4MDgsIDB4NzQsIDB4MTAsIDB4MTAsIDB4MDksIDB4NDAsIDB4QjQsIDB4MDcsIDB4NTUsIDB4MTAsIDB4ODQsIDB4MkIsCisweDEwLCAweDQxLCAweEMzLCAweDQ0LCAweDAwLCAweDExLCAweDAxLCAweEM0LCAweDA3LCAweEIwLCAweDE1LCAweEMwLCAweEJELAorMHgxMiwgMHhEMSwgMHgwMSwgMHg0NCwgMHg0MiwgMHgxMCwgMHhFMSwgMHg0MCwgMHg5MCwgMHgwMywgMHgxMSwgMHgyMywgMHg0NCwKKzB4MTIsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MEMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsCisweEEwLCAweDAzLCAweDAwLCAweDhELCAweDgwLCAweDE0LCAweDA2LCAweEMwLCAweDBDLCAweDQwLCAweDAxLCAweDAwLCAweEM5LAorMHgwNCwgMHgzNiwgMHg0MCwgMHgxMCwgMHg2NCwgMHg0OSwgMHgyMCwgMHgwOSwgMHgwMSwgMHgwOCwgMHgwNCwgMHhDMywgMHgxMCwKKzB4NDQsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MEIsIDB4OTgsIDB4MDgsIDB4NDIsIDB4MzMsIDB4OTUsCisweDE1LCAweDAwLCAweDY0LCAweDEzLCAweDEwLCAweDQ4LCAweDQ4LCAweDAxLCAweDAwLCAweDA1LCAweDgyLCAweDc2LCAweDExLAorMHgxMSwgMHgwQywgMHg1MCwgMHg0QywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwKKzB4NDUsIDB4MDAsIDB4REQsIDB4MjIsIDB4NTQsIDB4MDQsIDB4RDEsIDB4MEQsIDB4NDAsIDB4NDcsIDB4MTAsIDB4RDEsIDB4MDAsCisweDc0LCAweDA5LCAweDEwLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweEQ1LCAweDEwLCAweDQ0LCAweDAzLCAweDEwLCAweDIxLAorMHg0MCwgMHg4NCwgMHgwMCwgMHgxMSwgMHgwMSwgMHg1NCwgMHgwMywgMHg4MCwgMHgwRCwgMHg0MiwgMHgzNSwgMHgwMCwgMHgxNSwKKzB4MTAsIDB4NjQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDQsIDB4MjUsIDB4MDQsIDB4RDUsIDB4MTQsIDB4NTQsIDB4MDMsIDB4MTAsCisweDA5LCAweDAwLCAweDBDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDQ3LAorMHgwMCwgMHg5RiwgMHgwOSwgMHg3RCwgMHgwNCwgMHhGMCwgMHg5RCwgMHhDMCwgMHhDNywgMHgyMCwgMHhEQiwgMHg4MCwgMHg3QywKKzB4MDksIDB4MzEsIDB4NTEsIDB4QzAsIDB4NjQsIDB4MDIsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MkQsIDB4QzAsCisweEM3LCAweDQyLCAweDEzLCAweDAxLCAweDdDLCAweDAzLCAweEIwLCAweDg5LCAweEMwLCAweDM3LCAweDAwLCAweDlGLCAweDAyLAorMHgyRCwgMHgwMiwgMHhCMSwgMHhCNSwgMHhDMCwgMHg4NSwgMHgwMCwgMHgwNSwgMHgwMywgMHg3QywgMHg2RiwgMHgyNCwgMHgxQywKKzB4ODAsIDB4OEEsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MEQsIDB4MDAsCisweEFGLCAweDAwLCAweEVDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDBCLCAweDEwLCAweEZGLCAweDAwLCAweEJDLCAweDAyLAorMHhGMiwgMHg5MSwgMHhDMCwgMHg3QiwgMHgwMCwgMHgyRiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwgMHg1NywgMHhDMCwgMHgyRCwKKzB4MDAsIDB4M0UsIDB4MDAsIDB4QUMsIDB4ODMsIDB4RjAsIDB4MEIsIDB4QzgsIDB4M0IsIDB4MDAsIDB4RkIsIDB4NDksIDB4REMsCisweDAyLCAweEQwLCAweDEyLCAweEMwLCAweDFBLCAweDQwLCAweEZCLCAweDAwLCAweEVDLCAweDAzLCAweEY0LCAweDVGLCAweEMwLAorMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgwNSwgMHg4MCwgMHg5RiwKKzB4MDcsIDB4NkMsIDB4MDIsIDB4NzAsIDB4OEQsIDB4QzAsIDB4MDYsIDB4MDAsIDB4RDMsIDB4MjAsIDB4NUUsIDB4MDksIDB4MzgsCisweDAwLCAweEMwLCAweDI0LCAweDAyLCAweDVGLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDkzLCAweDAwLAorMHgxRiwgMHgwNiwgMHg0QywgMHg2MywgMHgzMCwgMHgwOSwgMHhDMCwgMHgzNCwgMHgyMCwgMHgxQiwgMHgyMCwgMHg0RSwgMHgwMywKKzB4RjEsIDB4MEQsIDB4QzAsIDB4OTYsIDB4MEEsIDB4MTcsIDB4MDIsIDB4NkMsIDB4NDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MjgsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDQ0LCAweDg2LCAweERELCAweEMyLAorMHg0NCwgMHhFOCwgMHgxMiwgMHgxRCwgMHg0MCwgMHgwNCwgMHgwMCwgMHhGMSwgMHgwMCwgMHg2QywgMHgwMywgMHgzMSwgMHgwMSwKKzB4NDAsIDB4RjQsIDB4MDIsIDB4REQsIDB4MDQsIDB4QzQsIDB4MDMsIDB4MTAsIDB4MDUsIDB4QzYsIDB4RTcsIDB4ODEsIDB4MEYsCisweDQwLCAweEQwLCAweDBCLCAweEIxLCAweDFELCAweDQwLCAweDNELCAweDAwLCAweDQxLCAweDAwLCAweDRDLCAweDAyLCAweDcwLAorMHgwOSwgMHg0NCwgMHgzNCwgMHgxMiwgMHhEQiwgMHgxQiwgMHgwOCwgMHg0MywgMHgxMCwgMHg3RCwgMHg0MCwgMHg0RCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MDIsIDB4MzAsIDB4MEQsIDB4MDAsIDB4MDQsCisweDA2LCAweDEwLCAweDU4LCAweDUwLCAweDAwLCAweDAwLCAweEMxLCAweDAwLCAweDI0LCAweDAyLCAweDkwLCAweDAwLCAweDQwLAorMHgzMCwgMHgwMCwgMHg4RCwgMHgwMSwgMHgwNCwgMHgyNywgMHgxMCwgMHgwOSwgMHg0MCwgMHgyMywgMHgyMSwgMHgwOSwgMHg0MiwKKzB4MDQsIDB4MEYsIDB4NTAsIDB4RjQsIDB4NDgsIDB4MzAsIDB4MTAsIDB4NDEsIDB4MDAsIDB4MDYsIDB4MDIsIDB4REEsIDB4MDAsCisweDAwLCAweDYyLCAweDQwLCAweENDLCAweDAzLCAweDAxLCAweDA3LCAweDU4LCAweDdDLCAweDQwLCAweDBDLCAweDIwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0QSwgMHgwMCwgMHg2RCwgMHgwMSwgMHg4NCwgMHgwNywKKzB4MTIsIDB4MUYsIDB4NDQsIDB4NDgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4MjQsIDB4MDQsIDB4MTAsIDB4OUEsIDB4NDAsIDB4NzgsCisweDgwLCAweDRELCAweDAxLCAweDg0LCAweDI3LCAweDEwLCAweDFBLCAweDQyLCAweDU5LCAweDAwLCAweDM1LCAweDAxLCAweDk0LAorMHgwMywgMHhEQywgMHgxNiwgMHg2MCwgMHg3MSwgMHgwMiwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNiwgMHg1MCwgMHg5NCwgMHg0MCwKKzB4NzgsIDB4ODMsIDB4RTksIDB4MDksIDB4QzQsIDB4MjcsIDB4NTAsIDB4MTYsIDB4NDAsIDB4MzUsIDB4MjAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDgyLCAweDAwLCAweDhELCAweDAwLCAweDRDLCAweDIzLCAweDcwLAorMHg4OCwgMHhDMCwgMHg4MCwgMHg0MiwgMHhEMywgMHgwMCwgMHgzNCwgMHgwMiwgMHg5MCwgMHg4NCwgMHhDNCwgMHgzMCwgMHgwMCwKKzB4OEQsIDB4MDAsIDB4MEMsIDB4MDMsIDB4MzAsIDB4NDQsIDB4NDAsIDB4MzMsIDB4MDEsIDB4MEQsIDB4MDgsIDB4MEMsIDB4MTMsCisweDUwLCAweDA0LCAweDQwLCAweDMwLCAweDAwLCAweDAzLCAweDA4LCAweDBDLCAweDgzLCAweEYwLCAweEEwLCAweEQwLCAweDAyLAorMHgwMSwgMHgwNywgMHg4OCwgMHgwQywgMHgyMywgMHg3MCwgMHg0QywgMHhDMCwgMHg0OCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4MEQsIDB4MDAsIDB4RkYsIDB4MDgsIDB4REUsIDB4MDMsIDB4RjQsIDB4MEYsCisweEMyLCAweDBELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDhGLCAweEMyLCAweDNGLCAweDAwLCAweEZGLAorMHg0MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwMywgMHhDMCwgMHgxRiwgMHgwMCwgMHgzRiwgMHgwOCwgMHhCQywgMHgxQiwgMHgzMCwKKzB4OEUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QTcsIDB4QTAsIDB4RkQsIDB4MDIsIDB4RjAsIDB4ODcsIDB4QzAsIDB4MkYsIDB4NDEsCisweEVGLCAweDA4LCAweDdDLCAweDIzLCAweEIwLCAweDBELCAweEM0LCAweDBCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHgwRiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMSwgMHhFMSwgMHgwOSwgMHhDMCwKKzB4MDcsIDB4MDgsIDB4REYsIDB4MDYsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4OTMsIDB4MDAsCisweDRDLCAweDI3LCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDFCLCAweDAwLCAweDdDLCAweDIzLCAweEY4LCAweDExLAorMHhDMCwgMHgzNiwgMHgwMywgMHhEQiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgxRCwgMHhDMCwgMHgyNCwgMHgwMCwgMHgxMywKKzB4MjAsIDB4NEQsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDk4LCAweDI5LCAweDAwLCAweDZELCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDBCLAorMHgwMCwgMHhGRCwgMHgxMiwgMHg4NCwgMHgwMiwgMHhEMCwgMHgwRiwgMHg0OCwgMHgzOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwNCwKKzB4MzMsIDB4MTQsIDB4MEEsIDB4NDAsIDB4M0IsIDB4NDAsIDB4MjIsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsIDB4MEEsIDB4NDAsCisweDNDLCAweDAyLCAweEUxLCAweDAwLCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDUyLCAweDNELCAweDAwLCAweEM1LCAweDAwLAorMHg4NCwgMHgwMiwgMHgxMCwgMHgwRSwgMHg0MCwgMHg0RiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4RjksIDB4MDAsIDB4OEQsIDB4MDEsIDB4OTQsIDB4MEYsIDB4RDAsIDB4MUEsIDB4NDAsIDB4NUIsIDB4MDgsCisweEVELCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDNFLCAweDQwLCAweDc4LCAweDQwLCAweEMxLCAweDExLCAweEE1LCAweDA3LAorMHgxOCwgMHgxRSwgMHg0MCwgMHg3MywgMHgwMCwgMHgyMSwgMHgwMSwgMHhCNCwgMHgwNywgMHg1MCwgMHgxNywgMHg0NiwgMHg3OSwKKzB4MDEsIDB4RTksIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDIsIDB4MUMsIDB4NzAsIDB4NTgsIDB4MDAsIDB4MjEsIDB4MDEsIDB4ODYsCisweDQ3LCAweDEwLCAweDFFLCAweDQxLCAweDEzLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorMHgyMCwgMHhCMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHhCNywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MDQsIDB4MTcsIDB4RDgsIDB4MEMsIDB4NDAsIDB4MzQsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4MTAsCisweDJDLCAweDQwLCAweEIzLCAweDAxLCAweEMxLCAweDA3LCAweDM0LCAweDAzLCAweEQ4LCAweDJDLCAweDQwLCAweDMxLCAweDAwLAorMHhDMSwgMHg0OCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgyQywgMHg2NCwgMHg3MSwgMHg4MCwgMHhDNSwgMHgwQiwgMHgwNCwgMHg5QiwKKzB4MTIsIDB4M0MsIDB4NjAsIDB4NUIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsCisweDFGLCAweDAwLCAweDZGLCAweDAwLCAweERELCAweDBELCAweEYwLCAweDA1LCAweEMwLCAweDFGLCAweDAwLCAweDVGLCAweDAwLAorMHhEQywgMHg0OSwgMHhGMCwgMHgwNywgMHhEMCwgMHgxNCwgMHgwMCwgMHg3MywgMHgwMSwgMHg2QywgMHgwMSwgMHgzMCwgMHhENywKKzB4QzAsIDB4OUIsIDB4NDAsIDB4NzMsIDB4MTEsIDB4N0MsIDB4MDEsIDB4RjAsIDB4QjcsIDB4NTQsIDB4MTcsIDB4MDAsIDB4N0IsCisweDAyLCAweDdDLCAweDAxLCAweEYwLCAweDQ3LCAweEMwLCAweDVDLCAweDA5LCAweDczLCAweDgwLCAweDhDLCAweDA1LCAweDM1LAorMHgwNiwgMHhDMCwgMHg1RiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgwNSwKKzB4MDAsIDB4MUYsIDB4MDAsIDB4NkMsIDB4OTgsIDB4RjIsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MEYsIDB4MDAsIDB4N0MsCisweDAwLCAweEYwLCAweDQxLCAweEMwLCAweDA3LCAweDA4LCAweDBGLCAweDAyLCAweDVDLCAweDgwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHg4MiwgMHg3QywgMHg4MCwgMHhGMCwgMHg4MSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwNCwKKzB4N0MsIDB4MDAsIDB4QjgsIDB4MDEsIDB4QzEsIDB4MDcsIDB4MDAsIDB4MEYsIDB4MTIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsCisweEM1LCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDYxLCAweDA0LAorMHg5MywgMHgwMCwgMHgwRCwgMHgwRSwgMHgzMCwgMHgxOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMCwgMHgxQywgMHgwMiwKKzB4QjQsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzgsIDB4MjcsCisweDAyLCAweDlGLCAweDQwLCAweDdDLCAweDAyLCAweEYyLCAweDg5LCAweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLAorMHgwMiwgMHgzMCwgMHgwOSwgMHhDOCwgMHgyMywgMHgyMCwgMHg5QiwgMHgwMSwgMHg0RCwgMHgyMiwgMHg3MCwgMHgxOSwgMHhDMiwKKzB4NDEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDIsIDB4OTUsCisweDAyLCAweDQ0LCAweDBFLCAweDE0LCAweDA5LCAweDQyLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLAorMHgwOSwgMHg0OCwgMHgyNywgMHgwOCwgMHg5MSwgMHgxMiwgMHg0NCwgMHg0MiwgMHhEMCwgMHgwOSwgMHg0NCwgMHg2NywgMHgxMCwKKzB4OTEsIDB4MDAsIDB4NzQsIDB4NDYsIDB4RDAsIDB4MzksIDB4RTAsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NUMsIDB4MDIsCisweDUwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAzLCAweDRDLCAweDAyLCAweDEwLCAweEE5LCAweDQwLCAweDA0LAorMHgwOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMiwKKzB4NDQsIDB4MDIsIDB4OTAsIDB4ODksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MDksCisweDQwLCAweDI3LCAweDAwLCAweDlELCAweDQwLCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDIwLCAweEQ1LAorMHgwMCwgMHg3NCwgMHgxMiwgMHhEOCwgMHgwRCwgMHg0NSwgMHgyMywgMHgwMCwgMHg5NSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4NDAsIDB4OTksIDB4ODgsIDB4NDQsIDB4NDIsIDB4NTAsIDB4MDksIDB4NDIsIDB4NzEsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI4LCAweDIwLCAweDAxLCAweDg1LCAweDA0LCAweDA0LAorMHgxQiwgMHg5MCwgMHgyOCwgMHg0MCwgMHgyMywgMHg0MSwgMHg4MSwgMHgwQywgMHgwNCwgMHgxMiwgMHgxMCwgMHg0OCwgMHg0MCwKKzB4MjMsIDB4MDEsIDB4OEQsIDB4MDQsIDB4MDYsIDB4MTIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4QzEsIDB4MDAsCisweDM2LCAweDAyLCAweEQwLCAweDA4LCAweDQ0LCAweDIzLCAweDAzLCAweDgxLCAweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDA4LAorMHg0NCwgMHgyMywgMHgwMiwgMHhDOSwgMHgwMCwgMHg0NCwgMHgyMiwgMHgxMCwgMHgwRCwgMHg2MCwgMHg1MCwgMHhBOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4ODYsIDB4MDIsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDgsCisweEIwLCAweDI1LCAweEMwLCAweDg3LCAweDAyLCAweDEzLCAweDAyLCAweDVDLCAweDI4LCAweDMwLCAweEExLCAweEMwLCAweDgzLAorMHg0MiwgMHgxRiwgMHgwQSwgMHg0NCwgMHgyOCwgMHhEMCwgMHgyMSwgMHgwMCwgMHgxNywgMHgwMCwgMHgxRiwgMHg0MCwgMHg3QywKKzB4NTAsIDB4RjAsIDB4MDEsIDB4NDAsIDB4ODcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MjgsIDB4MzAsIDB4RTEsIDB4QzEsCisweDg3LCAweDQ1LCAweDFCLCAweDE0LCAweDBDLCAweDA4LCAweDcwLCAweDAxLCAweEMwLCAweDc1LCAweEMwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBOCwgMHgyRiwgMHgxMiwgMHhCRiwgMHgwOCwgMHhGQywgMHgwQSwgMHg3MCwKKzB4MEIsIDB4QzIsIDB4MkYsIDB4MDIsIDB4OUYsIDB4MEMsIDB4RkMsIDB4MjIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MkYsIDB4MDIsCisweEIzLCAweDA4LCAweDdDLCAweDIyLCAweEYyLCAweDRGLCAweEMwLCAweDJGLCAweDIyLCAweEJGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwQSwgMHhDMCwgMHgyNSwgMHgwMywgMHhCNiwgMHgwMCwgMHhEOCwgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwKKzB4NDEsIDB4QjcsIDB4MDAsIDB4REMsIDB4MTIsIDB4RjQsIDB4MEYsIDB4QzAsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDJGLCAweDA1LCAweEJGLCAweDA0LCAweENDLCAweDAyLCAweEYwLCAweDBCLAorMHhDMCwgMHgzMywgMHgwMiwgMHg5MywgMHgwNCwgMHg3QywgMHhEMiwgMHhCMCwgMHhDOSwgMHhDMCwgMHgyQywgMHgwMCwgMHhCMywKKzB4MDAsIDB4Q0MsIDB4MjIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjgsIDB4MDUsIDB4QkIsIDB4MDAsIDB4REMsIDB4MDIsIDB4QjAsCisweDBCLCAweEMwLCAweDI3LCAweDAyLCAweEIzLCAweDIwLCAweDVDLCAweDhBLCAweEYyLCAweDQ5LCAweEMyLCAweDJELCAweDQwLAorMHhCRSwgMHgwMCwgMHhDQywgMHgwMiwgMHgzMCwgMHgwQSwgMHhEMCwgMHg2MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MUMsIDB4MTgsIDB4MTUsIDB4MDEsIDB4MUQsIDB4MDgsIDB4NDUsIDB4QzgsIDB4RDAsIDB4MDEsIDB4NDksCisweDA3LCAweDAyLCAweDExLCAweDE0LCAweDMwLCAweDEwLCAweDAwLCAweEMxLCAweDQyLCAweDg0LCAweDA0LCAweDAxLCAweDEwLAorMHg0NCwgMHgyMCwgMHgxMSwgMHg0MSwgMHg4MywgMHgwNSwgMHgyMCwgMHg1NywgMHg0MCwgMHg1QywgMHgwOCwgMHgwMSwgMHgwMSwKKzB4NDAsIDB4MDMsIDB4MDIsIDB4MTEsIDB4MDAsIDB4NjQsIDB4MTQsIDB4RDAsIDB4RDEsIDB4NDEsIDB4ODEsIDB4NDQsIDB4NTUsCisweDAwLCAweDA0LCAweDAxLCAweDUwLCAweDAxLCAweDQwLCAweDcwLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgyMCwgMHgzMSwgMHgwNSwgMHg4RCwgMHgwMCwgMHgzNCwgMHhCMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4ODEsIDB4MkMsIDB4MzQsIDB4NTIsIDB4OTgsIDB4NDgsIDB4NDgsIDB4MjAsIDB4MDMsIDB4ODEsIDB4QzgsIDB4MDQsCisweDAyLCAweDEwLCAweDQ5LCAweDA0LCAweDIwLCAweDEwLCAweDgxLCAweDAwLCAweDE0LCAweDIyLCAweEQxLCAweDA4LCAweDQwLAorMHgyMywgMHgyMCwgMHg4MSwgMHgwMCwgMHgxNiwgMHgxMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMSwgMHg0QiwgMHg4RCwgMHhDMCwKKzB4NDUsIDB4MDIsIDB4MTIsIDB4MDksIDB4NDAsIDB4NDgsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweDAwLCAweDI1LCAweDAxLCAweDlELCAweDAzLCAweDc0LCAweDBBLCAweEQyLCAweDA5LCAweDQwLCAweEEzLCAweDQwLAorMHg5MSwgMHg0MCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHg5MSwgMHgwMywgMHgwNCwgMHgwMiwKKzB4MTAsIDB4NDksIDB4NTAsIDB4MjYsIDB4MTIsIDB4OTUsIDB4MDAsIDB4NTQsIDB4MDMsIDB4NTAsIDB4QTksIDB4NDAsIDB4MjcsCisweDAwLCAweDkxLCAweDAwLCAweDY0LCAweDEyLCAweEQwLCAweDA5LCAweDQwLCAweDI1LCAweDQwLCAweDk1LCAweDA4LCAweDQ0LAorMHgxMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4QTgsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzQsIDB4MjcsIDB4MDAsIDB4OTMsCisweDYwLCAweDdDLCAweDAyLCAweEIwLCAweDE5LCAweEQwLCAweDI0LCAweDQwLCAweDkzLCAweDAyLCAweDQ0LCAweDAyLCAweDMwLAorMHgwOCwgMHhDMiwgMHgyNCwgMHgwOCwgMHg5MywgMHgwMiwgMHg1QywgMHg4MiwgMHhGMCwgMHgxOSwgMHhDOCwgMHgyNywgMHg0MCwKKzB4OTEsIDB4MTgsIDB4NUMsIDB4MDYsIDB4RjAsIDB4MjksIDB4QzEsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NDQsIDB4MDIsCisweDIwLCAweDI4LCAweEMwLCAweDE0LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLAorMHg2NSwgMHgwMCwgMHg4RiwgMHgwMCwgMHg0QywgMHg0RSwgMHhGMCwgMHgwOSwgMHhDMSwgMHhFNywgMHgzMCwgMHg5RiwgMHg0MCwKKzB4N0MsIDB4MjIsIDB4RjAsIDB4NDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0QsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDY1LCAweDAwLCAweDlGLCAweDE5LCAweDdDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlGLAorMHgwMSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHhFNywgMHg0MCwgMHg4QiwgMHgxMCwgMHg3QywgMHg4MiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDUsCisweDgwLCAweDFGLCAweDA2LCAweDRFLCAweDA4LCAweEYwLCAweDAxLCAweEM0LCAweDA0LCAweDgwLCAweDEzLCAweDAwLCAweDdFLAorMHg4MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwNiwgMHgxRiwgMHgxMiwgMHg1QywgMHgyMCwgMHhGOCwgMHgyMSwgMHhDMCwKKzB4MDcsIDB4OTQsIDB4MTMsIDB4MDIsIDB4M0MsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MEEsCisweDdDLCAweDAwLCAweEUxLCAweDIwLCAweEMwLCAweDgwLCAweDA0LCAweDE3LCAweDIwLCAweDRDLCAweDAwLCAweDMwLCAweDgxLAorMHhDMiwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgxQywgMHgwMCwKKzB4N0QsIDB4MDAsIDB4QzQsIDB4MDEsIDB4NzAsIDB4NTcsIDB4NDAsIDB4MTUsIDB4ODAsIDB4NUIsIDB4NDAsIDB4NjQsIDB4MDEsCisweEIyLCAweDA1LCAweEMyLCAweDFGLCAweDIwLCAweDdELCAweDExLCAweEM0LCAweDI1LCAweDc4LCAweDA1LCAweEUwLCAweERCLAorMHgwMCwgMHg3QiwgMHgwNCwgMHhGQywgMHgyRCwgMHg3MCwgMHgzNywgMHg0NCwgMHgxNywgMHgyMCwgMHg1MywgMHg0MCwgMHg1OCwKKzB4MDEsIDB4NzAsIDB4MDUsIDB4RDAsIDB4MUMsIDB4MDAsIDB4NzEsIDB4MDAsIDB4QzQsIDB4MDUsIDB4MTQsIDB4MTcsIDB4NDAsCisweDUxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweENELAorMHgyMCwgMHgwNiwgMHgwMywgMHg1MCwgMHgzQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHg3NCwgMHgwMywgMHg1MCwKKzB4MEMsIDB4NjAsIDB4RjMsIDB4MDgsIDB4REQsIDB4MDIsIDB4MTQsIDB4MEYsIDB4RDEsIDB4MEMsIDB4NDAsIDB4MTMsIDB4MDIsCisweEMxLCAweDAzLCAweDM0LCAweDBGLCAweDQxLCAweDRDLCAweDYwLCAweDM3LCAweDgwLCAweDgxLCAweDAxLCAweDM0LCAweDAzLAorMHg5MCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHhDNSwgMHgwMywgMHg0NCwgMHgxRiwgMHg1MCwgMHg0QywgMHg0MCwgMHg1MCwKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODgsIDB4MjgsIDB4MDAsIDB4QUQsIDB4MDAsCisweDg2LCAweDQxLCAweDU4LCAweDFFLCAweDYwLCAweDNELCAweDEwLCAweEU5LCAweDQwLCAweEI0LCAweDMzLCAweDEwLCAweDRFLAorMHg0MCwgMHgzOSwgMHgwOCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMywgMHg1MCwgMHg0RSwgMHg0MCwgMHgxOSwgMHgwOCwgMHhFOSwKKzB4MDAsIDB4OTQsIDB4MDksIDB4NTAsIDB4MjYsIDB4NDAsIDB4M0IsIDB4MDMsIDB4QTEsIDB4NDAsIDB4QjYsIDB4MTMsIDB4NTAsCisweDhFLCAweDQwLCAweDA4LCAweDA0LCAweEMxLCAweDAyLCAweDg0LCAweDQwLCAweDUwLCAweDBFLCAweDQwLCAweDA1LCAweDIwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgxMCwgMHg2OCwgMHgwMCwgMHhDRCwgMHgwMSwgMHg4NSwKKzB4MDcsIDB4NzAsIDB4MTcsIDB4QzAsIDB4NzgsIDB4MDEsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4NTAsIDB4NUUsIDB4NDAsCisweDdCLCAweDAwLCAweEVELCAweDAxLCAweDlDLCAweDg1LCAweEQwLCAweDFFLCAweDYwLCAweDdCLCAweDAwLCAweEUxLCAweDAxLAorMHhCNCwgMHgwNiwgMHg3MCwgMHgxRSwgMHhDMCwgMHg3QiwgMHg0MCwgMHhBMywgMHgwMSwgMHhCQywgMHgxRiwgMHhGMSwgMHg1RiwKKzB4QzAsIDB4N0EsIDB4MDAsIDB4RTcsIDB4MDEsIDB4OEQsIDB4MDcsIDB4NzAsIDB4MUUsIDB4QzAsIDB4NDQsIDB4NDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDJELCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAxLAorMHg3MCwgMHgwRCwgMHhDMCwgMHhCNywgMHgwMCwgMHhERiwgMHgwMCwgMHg2QywgMHg0MywgMHhGMSwgMHgyRCwgMHhDMSwgMHgzNywKKzB4MzAsIDB4REMsIDB4MDAsIDB4N0MsIDB4ODEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAyLCAweDcwLCAweDBELCAweEMwLCAweEI3LCAweDA0LCAweDlCLCAweDAwLCAweDU4LCAweDgzLCAweEZBLCAweDBELCAweENDLAorMHgwNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMCwgMHhCMCwgMHgwRCwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NkYsIDB4MDAsIDB4RjMsIDB4NDEsIDB4Q0MsIDB4MTMsIDB4RjAsCisweDFGLCAweEMwLCAweEZGLCAweDA0LCAweEZCLCAweDkxLCAweEVDLCAweDA3LCAweDgwLCAweDlGLCAweEMxLCAweDVDLCAweDA4LAorMHg3QiwgMHg4OSwgMHhDQywgMHgwNiwgMHgzMCwgMHgxRiwgMHhDMSwgMHg1RiwgMHgwMCwgMHhCMywgMHgwMSwgMHhGOCwgMHhBNywKKzB4QjAsIDB4MUYsIDB4RDAsIDB4N0MsIDB4MDAsIDB4RkYsIDB4MjEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0QsCisweDAyLCAweDc3LCAweDAxLCAweENDLCAweDA3LCAweEIwLCAweDFGLCAweEMwLCAweDAzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhBRCwgMHg0MCwgMHhBMSwgMHgzMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwKKzB4NDUsIDB4M0YsIDB4MDAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4NjMsIDB4MTAsIDB4MEUsIDB4NDgsIDB4MEMsIDB4MDIsIDB4MzEsCisweDBDLCAweEM1LCAweDIyLCAweDEwLCAweDBFLCAweDQzLCAweDlCLCAweDAyLCAweEExLCAweDAyLCAweEI0LCAweDAxLCAweDUwLAorMHhBMiwgMHg0MCwgMHgzOCwgMHg4MCwgMHhFRCwgMHgxMCwgMHhCNCwgMHgwMywgMHg3MCwgMHg0RSwgMHg1MCwgMHgxOCwgMHg0NywKKzB4RkIsIDB4MDAsIDB4QzQsIDB4MDgsIDB4MTQsIDB4MEEsIDB4NDgsIDB4NTcsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDI4LCAweDAwLCAweDYxLCAweDA4LCAweDg0LCAweDYzLCAweEQwLCAweDg2LCAweDQwLAorMHgzQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHgyNCwgMHgwMywgMHgxNCwgMHgwQywgMHg1MCwgMHgxOCwgMHg0NCwgMHg2MSwgMHgwMCwKKzB4QTQsIDB4MDAsIDB4MTQsIDB4MEUsIDB4NDAsIDB4MzMsIDB4NDQsIDB4MjEsIDB4MTAsIDB4QjQsIDB4MDMsIDB4MTEsIDB4MEUsCisweDQwLCAweDM4LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDQzLCAweEQwLCAweDBFLCAweDQ0LCAweDM5LCAweDgwLCAweEY1LAorMHgwMCwgMHg4NCwgMHg0MywgMHg5MCwgMHgwRSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4MjAsIDB4MjMsIDB4MTQsIDB4MDEsIDB4MjAsIDB4MDQsIDB4MEUsIDB4RDAsIDB4MTgsIDB4NDAsIDB4QjMsCisweDA0LCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweDEwLCAweDJDLCAweDQxLCAweDQwLCAweDAwLCAweDAxLCAweDAzLCAweDY0LAorMHgwMCwgMHgxMSwgMHgyQywgMHg0MCwgMHhGMywgMHgwMCwgMHgwMSwgMHgxMiwgMHgzNCwgMHgwMywgMHg1MCwgMHgzOCwgMHg0MCwKKzB4MzAsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4NzYsIDB4MDcsIDB4NTAsIDB4MEQsIDB4NDAsIDB4NTQsIDB4MDAsIDB4NDksIDB4MEMsCisweDA1LCAweDBFLCAweDEwLCAweDlDLCAweDQwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5MywgMHgwMSwgMHg0NSwgMHgwQSwgMHhGOCwgMHgwOSwgMHhDMCwgMHhCRiwgMHg0MCwKKzB4RjMsIDB4MDAsIDB4RUMsIDB4MEYsIDB4MzAsIDB4MkYsIDB4QzAsIDB4NjQsIDB4MDAsIDB4OTMsIDB4MTIsIDB4NkMsIDB4MDMsCisweDMwLCAweDBFLCAweEMwLCAweDE3LCAweDEwLCAweDEzLCAweDAzLCAweDdDLCAweDgzLCAweEIwLCAweDE4LCAweEMwLCAweDNDLAorMHgyMCwgMHg5RiwgMHgwMCwgMHhGNCwgMHgwNywgMHhGMCwgMHg1RiwgMHhDMCwgMHg3NSwgMHgwMCwgMHg5NywgMHgyMiwgMHgwNCwKKzB4MkYsIDB4QjAsIDB4QkMsIDB4QzAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweDg3LCAweDAwLCAweDBGLCAweDgwLCAweDdFLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDM3LCAweDAwLCAweEQ3LAorMHg4MCwgMHg3QywgMHgxMywgMHg3MCwgMHgwRCwgMHhDMCwgMHg4NywgMHgwMCwgMHg5NywgMHgwMiwgMHg1QywgMHgwQSwgMHhGMCwKKzB4MEQsIDB4RTAsIDB4MTcsIDB4MDAsIDB4OUYsIDB4MjAsIDB4M0MsIDB4MDgsIDB4RjAsIDB4QzEsIDB4QzgsIDB4MzcsIDB4MDAsCisweDlGLCAweDA0LCAweDdDLCAweDAzLCAweEYxLCAweDBELCAweEMwLCAweEE3LCAweDQ0LCAweERGLCAweDAyLCAweDdDLCAweDg4LAorMHhGMiwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwKKzB4MkQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4RUMsIDB4NDIsIDB4RTAsIDB4MDMsIDB4RTAsIDB4M0YsIDB4MDAsIDB4REYsIDB4MDAsCisweEZDLCAweDAzLCAweEY4LCAweDBFLCAweEQwLCAweDJDLCAweDAyLCAweDNGLCAweDEwLCAweENELCAweDA3LCAweDM0LCAweDBGLAorMHhDMSwgMHgzQywgMHgwNCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhCMSwgMHg4RiwgMHhDMCwgMHgzRSwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NzQsIDB4NDAsIDB4RjcsIDB4MDAsIDB4RkMsIDB4MTcsIDB4MzAsCisweDBGLCAweDAwLCAweDEwLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDIwLCAweEM2LAorMHgwOCwgMHgxRCwgMHg4MSwgMHg0NCwgMHg0NCwgMHhEMCwgMHgxMSwgMHg0MSwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwKKzB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4QzQsIDB4MDgsIDB4MTksIDB4MDIsIDB4NEMsIDB4MEEsIDB4MTAsIDB4MEQsIDB4NDAsCisweDg0LCAweDAwLCAweDk3LCAweDAzLCAweDc0LCAweDA2LCAweEI4LCAweDFELCAweDAwLCAweDM0LCAweDAwLCAweDhELCAweDAxLAorMHg1NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgyNCwgMHg0MiwgMHhEMywgMHgwOSwgMHg3NCwgMHgwNSwgMHgxMCwgMHgwNSwKKzB4NDgsIDB4MTQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4NjQsIDB4MDAsCisweDlELCAweDAxLCAweDY0LCAweDA0LCAweEQwLCAweDE5LCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDU0LCAweDAzLAorMHhEMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhDRCwgMHgwMywgMHg0NCwgMHgxOSwgMHgxMCwgMHgwRCwgMHg1MCwgMHgxNCwKKzB4MDAsIDB4MTgsIDB4MDEsIDB4NzQsIDB4MjEsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4OUQsIDB4MDQsIDB4NDQsCisweDAzLCAweDEwLCAweDBELCAweDQwLCAweDg0LCAweDQwLCAweERELCAweDAyLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDQwLAorMHgwNCwgMHgwOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwRCwKKzB4MDEsIDB4MDUsIDB4MDAsIDB4RDEsIDB4MDgsIDB4NDgsIDB4MzMsIDB4ODAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsCisweDBDLCAweDQwLCAweDAwLCAweDAwLCAweDhELCAweDAwLCAweDA2LCAweDAwLCAweDEwLCAweDBELCAweDYwLCAweDEwLCAweDEwLAorMHg4NSwgMHgwMCwgMHgzNCwgMHgwMCwgMHg5MSwgMHgwMSwgMHg0MCwgMHgzMCwgMHgwMCwgMHg5RCwgMHg4MCwgMHgxNiwgMHgwMywKKzB4MTAsIDB4MEMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NTAsIDB4MTgsIDB4NTAsIDB4NDEsCisweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDI2LCAweDAwLCAweDFGLCAweDAwLAorMHg2QywgMHgwMiwgMHhGMSwgMHgwMSwgMHg0MCwgMHgzRiwgMHgwMCwgMHhERiwgMHgwMCwgMHhEQywgMHgwMywgMHhEMCwgMHgwRiwKKzB4QzAsIDB4MzQsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NEMsIDB4MDEsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4MUYsCisweDAwLCAweDdDLCAweDAxLCAweDExLCAweDA1LCAweEMwLCAweDNFLCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAzLCAweDMwLAorMHgwRCwgMHhDMCwgMHgwNCwgMHgwMCwgMHhERiwgMHg4MCwgMHg3QywgMHgwMCwgMHgzMSwgMHgwRCwgMHhDMCwgMHgwMCwgMHhDMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkUsCisweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgwRiwgMHgwMCwgMHgzQiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDNCwgMHgzRiwgMHgwOCwgMHgzNywgMHgwMCwKKzB4QkMsIDB4MDAsIDB4RjIsIDB4MDIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsCisweEMwLCAweDBGLCAweDAwLCAweEY3LCAweDQwLCAweEZDLCAweDAwLCAweEIwLCAweDBGLCAweEMwLCAweDE2LCAweDIxLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg1RiwgMHgwMCwgMHg3MywgMHgwMSwgMHhDQywgMHgwNywKKzB4RjAsIDB4MUYsIDB4QzAsIDB4M0MsIDB4MDEsIDB4QjMsIDB4MDEsIDB4QUMsIDB4MDUsIDB4RjAsIDB4NEYsIDB4QzAsIDB4NEQsCisweDA4LCAweDNGLCAweDAzLCAweDRDLCAweDA0LCAweEYwLCAweDBGLCAweEMwLCAweDRGLCAweDQwLCAweDMzLCAweDAxLCAweEZDLAorMHgwQywgMHg3MSwgMHg5MCwgMHhDMCwgMHg0QywgMHgwMCwgMHhBMywgMHgwMSwgMHhFRCwgMHgwNCwgMHhGMCwgMHgxMiwgMHhDMCwKKzB4NEYsIDB4MDAsIDB4M0YsIDB4MDIsIDB4Q0UsIDB4MjYsIDB4MzQsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDgsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDE4LCAweDUzLCAweDAwLCAweDUxLCAweDAxLCAweEVDLCAweDA3LCAweEQwLAorMHgxRiwgMHg0MCwgMHg3NCwgMHgwMCwgMHg5NSwgMHgwMSwgMHg1MSwgMHgwNiwgMHhEMCwgMHg5RiwgMHg0MiwgMHg0NCwgMHgwMCwKKzB4MUQsIDB4MDAsIDB4NEMsIDB4MDQsIDB4RDAsIDB4M0YsIDB4NDAsIDB4NDcsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NzQsIDB4MDAsCisweDEwLCAweDQ1LCAweDQ0LCAweDQ1LCAweDAwLCAweDExLCAweDQxLCAweDQ0LCAweDAwLCAweEQwLCAweDExLCAweDQwLCAweDQ3LAorMHgwMCwgMHg5NywgMHg4MiwgMHg2QywgMHgxMCwgMHgxMCwgMHgxMSwgMHg0OCwgMHgwRiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MjUsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4NTEsIDB4MEMsCisweDQwLCAweEIwLCAweDAwLCAweDQ1LCAweDAwLCAweDA0LCAweDAxLCAweDUwLCAweDBDLCAweDQwLCAweDIxLCAweDAwLCAweDA1LAorMHgwNCwgMHgyNCwgMHgwMywgMHhEMCwgMHgyQywgMHg0MCwgMHgwNywgMHgwMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgxMCwgMHhEMCwKKzB4MDksIDB4NDAsIDB4MzUsIDB4MDAsIDB4OTUsIDB4ODAsIDB4MTQsIDB4NTAsIDB4RDEsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MDgsCisweDRELCAweDA2LCAweDQ0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDRGLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgyNywgMHgwMCwgMHhDMSwgMHgwMCwgMHg2NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MzQsIDB4MDAsIDB4NTUsIDB4MDYsIDB4NTQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NDQsIDB4MDAsIDB4MEQsIDB4ODEsCisweDQ0LCAweDIzLCAweEQwLCAweDBELCAweDQwLCAweDA3LCAweDAwLCAweDExLCAweDA0LCAweDc0LCAweDQ2LCAweDEwLCAweDBELAorMHg0MCwgMHgzNSwgMHg0MCwgMHgxNSwgMHgwMiwgMHg1MCwgMHgwNiwgMHhEMCwgMHgxMSwgMHg2MCwgMHgwNywgMHgwMCwgMHg5NSwKKzB4MDgsIDB4NDUsIDB4MDYsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEE4LCAweDczLCAweDAwLCAweDkzLCAweDAyLCAweDRDLCAweDAzLCAweEYwLCAweDBDLCAweEQwLCAweDM0LAorMHg4MCwgMHhDNywgMHgwMywgMHg2QywgMHgxQiwgMHhGMCwgMHgwQywgMHhDMCwgMHg2NSwgMHgwMSwgMHg5RiwgMHgwMSwgMHg2QywKKzB4NEUsIDB4RjAsIDB4MEQsIDB4QzAsIDB4ODMsIDB4MDEsIDB4MTMsIDB4MDAsIDB4M0MsIDB4MDQsIDB4NzAsIDB4M0QsIDB4QzAsCisweEY1LCAweDA4LCAweDg3LCAweDAzLCAweDU0LCAweDQ0LCAweEYwLCAweDMxLCAweEMxLCAweDA3LCAweDExLCAweDFGLCAweDA1LAorMHg0NCwgMHgwNiwgMHgzMCwgMHgzMSwgMHhDMCwgMHgwMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDcsIDB4ODAsIDB4RkQsIDB4NDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjIsIDB4MEYsIDB4QzAsIDB4M0IsIDB4MjAsCisweEZGLCAweDAwLCAweEU4LCAweDk2LCAweEYwLCAweDBGLCAweEMwLCAweDBGLCAweDIwLCAweDNGLCAweDAwLCAweEZDLCAweDA2LAorMHhFMCwgMHgwRCwgMHhDNCwgMHg0RSwgMHgwMiwgMHgzRiwgMHg0MSwgMHhGNCwgMHgwMiwgMHhGMCwgMHgyRiwgMHhDMCwgMHhCRiwKKzB4MDAsIDB4QkIsIDB4MDIsIDB4QzQsIDB4MDIsIDB4RDAsIDB4MDMsIDB4NDEsIDB4MEYsIDB4MDAsIDB4MUYsIDB4MDEsIDB4RkMsCisweDAwLCAweEYwLCAweDAzLCAweEM0LCAweDNGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwOCwgMHhBNSwgMHgwMCwgMHg5MywgMHgwMiwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4NkUsIDB4MEIsIDB4MzAsIDB4MEQsIDB4QzAsIDB4QTQsIDB4ODAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4RjAsCisweDhELCAweEMyLCAweDA3LCAweDAyLCAweDFFLCAweDAwLCAweDdDLCAweDE4LCAweEYwLCAweDBELCAweEMwLCAweDM2LCAweDAxLAorMHg5RiwgMHgwNiwgMHg2QywgMHgwOCwgMHhGMiwgMHg4MSwgMHhDOCwgMHgxNiwgMHg0NCwgMHg4MywgMHgwMiwgMHg0RCwgMHg4QSwKKzB4MzAsIDB4MjksIDB4QzQsIDB4MDgsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsCisweDI0LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAzLCAweDUwLCAweDBELCAweDQwLCAweDNGLCAweDAwLCAweERELCAweDA3LAorMHg3NiwgMHgxRSwgMHhGMCwgMHhBRiwgMHg0MCwgMHg0NCwgMHgwMCwgMHg5RiwgMHg4MCwgMHg3NCwgMHg0RiwgMHhEMCwgMHgxRiwKKzB4QzAsIDB4QzQsIDB4MDAsIDB4MUYsIDB4MEMsIDB4NzAsIDB4MDIsIDB4RjAsIDB4MEMsIDB4NDAsIDB4RjAsIDB4MDgsIDB4OUQsCisweDAyLCAweDUwLCAweDAyLCAweEQyLCAweDExLCAweDUwLCAweDU0LCAweDA0LCAweDkxLCAweDA5LCAweDY0LCAweDAyLCAweDM0LAorMHgzOSwgMHhDMCwgMHg2QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHgyMiwKKzB4MDAsIDB4QzEsIDB4NDAsIDB4MjQsIDB4MDMsIDB4MTAsIDB4NEMsIDB4NjAsIDB4MzMsIDB4MDAsIDB4NEQsIDB4MDQsIDB4MzQsCisweDFFLCAweDEwLCAweDFDLCAweDQwLCAweDQwLCAweDAwLCAweDg5LCAweDAwLCAweDM2LCAweDExLCAweEQwLCAweDRDLCAweDYwLAorMHgwMiwgMHgwNCwgMHgwOSwgMHgwMCwgMHgzNCwgMHgwQywgMHhEQSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMiwgMHgwOCwgMHgwMCwKKzB4MTQsIDB4MDAsIDB4RDAsIDB4MjAsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDksIDB4ODMsIDB4NjQsIDB4MzIsIDB4OTAsIDB4QzgsCisweDQwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA4LCAweDdBLCAweDQwLAorMHhFMSwgMHgwMSwgMHgzNCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHg2RCwgMHg4MSwgMHhGNiwgMHgyNiwKKzB4RDAsIDB4MUMsIDB4NDAsIDB4NDgsIDB4MDAsIDB4MjUsIDB4NDksIDB4QjYsIDB4MjUsIDB4RDAsIDB4OUUsIDB4NDAsIDB4NDgsCisweDAwLCAweDJELCAweDAxLCAweEI0LCAweDA1LCAweEQxLCAweDUzLCAweDQwLCAweDRBLCAweDAxLCAweDdELCAweDgxLCAweDk0LAorMHgyNCwgMHhEOCwgMHgxMiwgMHg2MCwgMHg0QywgMHg4MCwgMHg2OSwgMHgyMSwgMHhBNCwgMHgyNCwgMHgxMCwgMHgxMywgMHg0MCwKKzB4M0MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4QTIsIDB4MDAsIDB4ODEsCisweDAwLCAweDJDLCAweDIzLCAweDEwLCAweDBDLCAweEMwLCAweDMzLCAweDAwLCAweDRGLCAweDAwLCAweDM0LCAweDIyLCAweDEwLAorMHgwQywgMHhDMSwgMHg2MCwgMHgwNSwgMHg4OSwgMHgwNywgMHgzQywgMHgxNSwgMHhGMCwgMHg4QywgMHhDMCwgMHgwMywgMHgwMiwKKzB4MEYsIDB4MDEsIDB4MzgsIDB4NDYsIDB4RjAsIDB4NTAsIDB4RTgsIDB4NDIsIDB4MTAsIDB4Q0QsIDB4MTQsIDB4MTQsIDB4MjMsCisweEYwLCAweDgwLCAweEMwLCAweDAwLCAweDAwLCAweENCLCAweDEwLCAweDRDLCAweDIzLCAweEIyLCAweDJELCAweEUwLCAweDRBLAorMHg2OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgyRCwgMHgwMCwgMHhGRiwgMHg4MCwKKzB4RkMsIDB4MDcsIDB4NzAsIDB4MUYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsIDB4MDgsIDB4RkMsIDB4MjIsIDB4NzAsIDB4MEQsCisweEQwLCAweDI3LCAweDAyLCAweEJFLCAweDAwLCAweEZDLCAweDIzLCAweEYwLCAweDhGLCAweEMwLCAweDBGLCAweDAyLCAweDM1LAorMHg0MCwgMHhGQywgMHgwMywgMHg3MCwgMHgwRiwgMHhFOCwgMHgzRCwgMHgwMCwgMHg3RiwgMHgwMCwgMHhEQywgMHgyMywgMHhGMCwKKzB4MDMsIDB4QzgsIDB4MDksIDB4MDIsIDB4RjcsIDB4MDAsIDB4REMsIDB4MjMsIDB4RDAsIDB4ODMsIDB4RDAsIDB4MEIsIDB4NjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDY3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLAorMHgyMywgMHhGMCwgMHgxRCwgMHhEMCwgMHgzNCwgMHgwMCwgMHg1NywgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHhEQywgMHhDMCwKKzB4NjUsIDB4MjAsIDB4OUIsIDB4MjAsIDB4NkMsIDB4MDQsIDB4QjAsIDB4OUQsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4ODAsCisweDdDLCAweDA3LCAweEJDLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDVGLCAweDAxLCAweDZFLCAweDA3LCAweDM5LCAweDAxLAorMHhDMCwgMHgwNywgMHg4MCwgMHg1RiwgMHgwMCwgMHg0QywgMHgwMSwgMHgzMywgMHgwOSwgMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MzksIDB4MDAsIDB4QUIsIDB4MDAsIDB4QjQsIDB4MTMsCisweEQwLCAweDJDLCAweDQwLCAweDM4LCAweDExLCAweDYxLCAweDAwLCAweDhDLCAweDAyLCAweDE4LCAweDRFLCAweDQxLCAweDI4LAorMHgzMCwgMHgzMSwgMHgwMCwgMHg4NCwgMHgwMywgMHgxMSwgMHhDQywgMHg0MCwgMHgwOCwgMHg4OCwgMHgyRCwgMHgwMCwgMHhCNCwKKzB4MDMsIDB4MTAsIDB4MEEsIDB4NDIsIDB4M0IsIDB4ODAsIDB4NkQsIDB4MDAsIDB4OTQsIDB4MDMsIDB4MTQsIDB4MDIsIDB4NDAsCisweDBCLCAweDAwLCAweDdELCAweEMwLCAweEM0LCAweDAxLCAweEIwLCAweDBBLCAweDQwLCAweDRELCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg2OSwgMHgwMCwgMHhBMSwgMHgwMywgMHg5NCwgMHgwNywgMHg1MiwKKzB4NUUsIDB4NjAsIDB4NzAsIDB4MDMsIDB4NjUsIDB4NDMsIDB4QjQsIDB4MDcsIDB4OTAsIDB4MUUsIDB4NDAsIDB4NkQsIDB4MDAsCisweEE1LCAweDAxLCAweDg0LCAweDA0LCAweDEwLCAweDFFLCAweDQwLCAweEM5LCAweDAwLCAweDI1LCAweDAxLCAweEI0LCAweDA3LAorMHgxMCwgMHgxNiwgMHg0NCwgMHg0QiwgMHgxMCwgMHhGRCwgMHgwMSwgMHg5NCwgMHg4NywgMHgxMCwgMHgxNiwgMHg0NCwgMHg1QiwKKzB4MjAsIDB4RUQsIDB4MDEsIDB4QTQsIDB4MDUsIDB4MTAsIDB4MUMsIDB4NjQsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDIzLCAweDA0LCAweDg5LCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLAorMHg0MCwgMHgzMCwgMHgwMCwgMHg0MSwgMHg0NSwgMHgzMCwgMHgyRSwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDNSwKKzB4MjAsIDB4MDQsIDB4MUYsIDB4MTAsIDB4MEMsIDB4NTAsIDB4RjEsIDB4MDEsIDB4Q0QsIDB4NDgsIDB4MzQsIDB4MEYsIDB4MTIsCisweDNDLCAweDQxLCAweEYzLCAweDAwLCAweENELCAweDIyLCAweDE0LCAweDEzLCAweDEwLCAweDFDLCAweDQwLCAweEYzLCAweDBDLAorMHhDRCwgMHgwNywgMHgyNCwgMHg0RiwgMHgxMCwgMHg0QywgMHg0OCwgMHg1OSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4OUYsIDB4MDAsIDB4NzMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsCisweDE0LCAweDAwLCAweDc3LCAweDAwLCAweEI0LCAweDAxLCAweEI1LCAweDA1LCAweEMwLCAweERELCAweDAxLCAweDc3LCAweDA4LAorMHhFQywgMHgwRCwgMHhCMCwgMHgwNSwgMHhFMCwgMHhERCwgMHgwMCwgMHg3RiwgMHgwQiwgMHhGQywgMHgxNSwgMHhCMSwgMHgzNywKKzB4QzEsIDB4REIsIDB4MTYsIDB4N0YsIDB4MDIsIDB4REQsIDB4MDksIDB4MzAsIDB4MjcsIDB4QzEsIDB4NUYsIDB4MTQsIDB4N0YsCisweDA0LCAweEU0LCAweDFELCAweDEwLCAweDE3LCAweDQ1LCAweDVDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHg4MCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgyNCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4ODAsIDB4NEMsIDB4MTAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MTIsIDB4MDAsIDB4N0QsCisweDIwLCAweEYwLCAweDAxLCAweDAwLCAweDg2LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDQ4LCAweEYyLCAweDAxLCAweEMwLAorMHg4NywgMHgwMCwgMHgxRiwgMHgwQSwgMHg2NCwgMHgyMCwgMHhGMCwgMHgwMSwgMHhDMSwgMHg4NywgMHgwMCwgMHgxRiwgMHg0MCwKKzB4NUQsIDB4MDAsIDB4RjQsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDAwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDg5LCAweEMwLCAweDI3LCAweDAwLAorMHg5MywgMHg4MCwgMHg3QywgMHgwQSwgMHgzMCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg2QywgMHgwMiwKKzB4RjAsIDB4MTksIDB4QzgsIDB4MjYsIDB4MDAsIDB4OTMsIDB4MDEsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDkzLCAweDEwLCAweDVDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAyLCAweDZDLAorMHgwQSwgMHgzMCwgMHg1OCwgMHhDNCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MjAsIDB4MjYsIDB4MDAsIDB4OEQsIDB4MDAsIDB4QzQsIDB4MDIsIDB4RDgsIDB4MUIsIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTUsCisweDAxLCAweDc0LCAweDAyLCAweDUwLCAweDA5LCAweDQ0LCAweDI3LCAweDAwLCAweDg3LCAweDAwLCAweDQ0LCAweDA2LCAweEQwLAorMHgyOSwgMHg0NCwgMHhFMywgMHgxQywgMHg5MSwgMHgwMSwgMHg3NCwgMHgxMiwgMHhEMCwgMHgwOSwgMHg0QSwgMHg2NywgMHgwMCwKKzB4OTUsIDB4MjIsIDB4NzQsIDB4ODIsIDB4RDAsIDB4MTgsIDB4NDAsIDB4MjQsIDB4MDgsIDB4OUMsIDB4MDMsIDB4MDQsIDB4NDIsCisweDE0LCAweDE5LCAweDQwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLAorMHgyNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMywgMHgwMCwgMHg5MSwgMHgwNCwKKzB4NTQsIDB4MDIsIDB4MTAsIDB4NjksIDB4NDQsIDB4MjcsIDB4ODAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDYsIDB4RDAsIDB4ODksCisweDQxLCAweDI3LCAweDQxLCAweEQxLCAweDBBLCAweDc0LCAweDAyLCAweEQyLCAweDBELCAweDQ4LCAweDM3LCAweDAyLCAweDkxLAorMHg4MiwgMHg3NCwgMHgwMiwgMHg1MiwgMHg4OSwgMHgwMCwgMHgyNCwgMHgwMCwgMHg4RCwgMHgwMCwgMHg0MiwgMHgwMywgMHgxMCwKKzB4MDksIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjgsIDB4QTAsCisweDAwLCAweDlELCAweDAyLCAweDA0LCAweDBBLCAweEQwLCAweDA4LCAweDQwLCAweEEzLCAweDAwLCAweDg1LCAweDIwLCAweDc0LAorMHgwMywgMHg1MCwgMHgwOCwgMHg0OCwgMHgyMywgMHgwMCwgMHg5NSwgMHgwOCwgMHgwNCwgMHg4MywgMHhEMiwgMHgwOCwgMHg0MCwKKzB4MjMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MjIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODUsIDB4ODAsCisweDM0LCAweDIyLCAweEQwLCAweDA5LCAweDUwLCAweDMwLCAweDkwLCAweENELCAweDY4LCAweDQ1LCAweEEyLCAweDEwLCAweDQ4LAorMHg1MCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwMiwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4NEQsIDB4MDQsIDB4RDAsIDB4MTEsIDB4QzAsIDB4MDcsIDB4MDUsIDB4MTMsIDB4ODAsIDB4NUMsIDB4ODAsCisweDMwLCAweDQxLCAweEMxLCAweDA3LCAweDIwLCAweDFGLCAweDAyLCAweDRELCAweDAwLCAweEYwLCAweDQxLCAweEMxLCAweDA3LAorMHgwMCwgMHgxMywgMHg4MCwgMHgzOCwgMHgwOCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgxNywgMHgyMCwgMHgxMywgMHgwMCwgMHgzRSwKKzB4MDgsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDgsIDB4MUYsIDB4MTYsIDB4NEMsIDB4MDgsIDB4MzAsIDB4MDUsIDB4QzAsCisweDc0LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEE4LCAweDdGLCAweDAwLCAweEJGLAorMHgwMSwgMHg3QywgMHgwRSwgMHhEMCwgMHgyOSwgMHhDMCwgMHg2NywgMHgxMCwgMHhCRiwgMHgwMCwgMHhCQywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MkIsIDB4MDAsIDB4QjcsIDB4MDQsIDB4OUMsIDB4MDIsIDB4RjIsIDB4MDksIDB4QzAsIDB4M0YsIDB4MjAsCisweEZGLCAweDQwLCAweEZDLCAweDEyLCAweEQwLCAweDRCLCAweEMwLCAweDJGLCAweDEwLCAweEFGLCAweDgwLCAweEZFLCAweDEyLAorMHhGMCwgMHgwQiwgMHhDOCwgMHgyRiwgMHgwMCwgMHhCRSwgMHg0NCwgMHhEQywgMHgxMywgMHhGMCwgMHg4QiwgMHhDMCwgMHg3NywKKzB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4NDIsCisweDdDLCAweDM2LCAweEYwLCAweDFCLCAweEMxLCAweDI3LCAweDAyLCAweEJGLCAweDAwLCAweERDLCAweDAyLCAweEYyLCAweDRCLAorMHhDMSwgMHgyRiwgMHgwMCwgMHhEQiwgMHg4MCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDOCwgMHgyRiwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4QzQsIDB4MjIsIDB4RjAsIDB4MDksIDB4NDAsIDB4MjgsIDB4MDAsIDB4QkUsIDB4MDAsIDB4NEMsIDB4ODIsIDB4MzAsCisweDBCLCAweEMwLCAweDJCLCAweDA4LCAweEJGLCAweDAwLCAweENDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDc0LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgxMCwgMHg0NywgMHgwNSwgMHgxRCwgMHhDMSwgMHgzNCwKKzB4MEMsIDB4RDAsIDB4MjEsIDB4NDAsIDB4NDMsIDB4MjAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsCisweDA3LCAweDAwLCAweDFELCAweDcwLCAweDQ0LCAweDAwLCAweEQwLCAweDgxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDAwLAorMHg0NCwgMHgxMSwgMHg3MiwgMHgwMSwgMHg0MSwgMHgwNCwgMHgzMCwgMHgxRCwgMHgyMCwgMHg1NCwgMHg1MCwgMHgxMCwgMHgwMSwKKzB4NDAsIDB4MTcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDQsIDB4NjEsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDIxLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDMyLAorMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMywgMHg4RCwgMHgwMCwgMHgwNSwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4ODksIDB4MDQsIDB4MDUsIDB4MDIsIDB4RDAsIDB4MDgsIDB4MDgsIDB4MzMsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MDUsCisweDEyLCAweEQ4LCAweDQ4LCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDE0LCAweDkyLCAweDEwLCAweDA4LCAweDYwLAorMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHg4MiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg0QSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDI3LCAweDA4LCAweERELCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDBELCAweDQwLCAweDY3LCAweDIwLAorMHg4RCwgMHgxOCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0NCwgMHg2NiwgMHgxMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4NTAsIDB4MjgsIDB4NTQsIDB4QjQsIDB4MDIsIDB4OUQsIDB4MTAsIDB4NTUsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDEsIDB4MjcsCisweDAwLCAweERELCAweDAwLCAweDA0LCAweDAyLCAweDkwLCAweDE5LCAweDYwLCAweDYzLCAweDI4LCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHhFRiwgMHgwMCwgMHhCRiwgMHgwRCwgMHhGQywgMHg4MiwgMHhGMiwgMHgwOSwKKzB4QzAsIDB4MkYsIDB4MDAsIDB4OUYsIDB4MTMsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzQsIDB4RTcsIDB4MjQsIDB4OUIsCisweDgxLCAweDQ0LCAweDQ2LCAweEYyLCAweDA5LCAweEM4LCAweDY3LCAweDIwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHhFNCwgMHgwMCwgMHg5RiwgMHgyMCwgMHg1NCwgMHgxQSwgMHgzMCwgMHgyOSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MTIsIDB4NEMsIDB4MEUsIDB4MzQsIDB4NTksIDB4QzAsIDB4MTYsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDgwLCAweEU1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwNSwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMSwKKzB4N0MsIDB4NjIsIDB4RTAsIDB4MDksIDB4MDAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4NzIsIDB4NDksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAzLCAweDdDLCAweDIyLCAweEQ0LCAweDk5LCAweEMwLCAweDI3LCAweDAxLCAweDlELAorMHgxMywgMHg3RiwgMHhEMiwgMHg3MCwgMHgwOSwgMHhDMSwgMHg1OSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDgsIDB4ODUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4QjAsIDB4MDEsIDB4RDAsIDB4MDYsCisweDAwLCAweDEzLCAweDAyLCAweDRDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDg3LCAweDgwLCAweDFGLCAweDAyLCAweDVDLAorMHg4OCwgMHgzMCwgMHgwMSwgMHhDNSwgMHg4NSwgMHg0MCwgMHgxMywgMHgzMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwKKzB4MDcsIDB4MDEsIDB4MTMsIDB4MjMsIDB4NUMsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzEsIDB4MDUsIDB4MTQsIDB4MDMsIDB4MDAsCisweDRDLCAweDAwLCAweDIxLCAweDAxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHhBMCwgMHgxNCwgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHg1OCwgMHg3NywgMHg0MCwgMHgxNCwgMHgwMCwKKzB4NjUsIDB4MDIsIDB4RDgsIDB4MDEsIDB4RDAsIDB4MTcsIDB4NDAsIDB4MTcsIDB4ODAsIDB4NUMsIDB4MDAsIDB4RDQsIDB4MDEsCisweDExLCAweDA3LCAweDAxLCAweDlELCAweDAwLCAweDYxLCAweDAyLCAweEM0LCAweDg1LCAweDMyLCAweDA1LCAweEMwLCAweDlELAorMHg0MCwgMHg2MSwgMHgxMCwgMHg0OCwgMHgwMSwgMHhEMSwgMHgwNywgMHg0MCwgMHg1RiwgMHgwNCwgMHg3MSwgMHgwMCwgMHhENCwKKzB4ODEsIDB4NTAsIDB4MDcsIDB4NDgsIDB4NDMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDc4LCAweDQwLCAweDMwLCAweDAwLCAweDQxLAorMHgwNCwgMHgyNCwgMHgwMiwgMHhEMCwgMHhEQywgMHg0MCwgMHgzMywgMHgyMCwgMHhDRCwgMHg0MCwgMHgxNCwgMHgwMywgMHgxMCwKKzB4MEMsIDB4MEEsIDB4QjAsIDB4MEMsIDB4QzEsIDB4MDgsIDB4MDUsIDB4MDcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NzEsIDB4MDAsCisweEMxLCAweDgwLCAweDUwLCAweDgzLCAweEQwLCAweDBDLCAweDQwLCAweDMxLCAweDAwLCAweEMxLCAweDAzLCAweDA0LCAweDJCLAorMHgxQywgMHgyRCwgMHg0MCwgMHg0MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwKKzB4MzgsIDB4MDEsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MjcsIDB4NTgsIDB4MUEsIDB4NDAsIDB4NzgsIDB4MDEsIDB4RjUsIDB4MDAsCisweDk0LCAweDAyLCAweEQ4LCAweDBBLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDBDLCAweDk0LCAweDBDLCAweDEwLCAweDFBLAorMHg0QSwgMHg3RCwgMHgwMCwgMHhFMSwgMHgyMCwgMHg4NCwgMHg0MywgMHgwMCwgMHg0RSwgMHg0MCwgMHg0RCwgMHgyNCwgMHhGMSwKKzB4NDAsIDB4QTQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4N0YsIDB4MDgsIDB4RTEsIDB4ODIsIDB4ODQsIDB4MDEsIDB4MTAsCisweDA2LCAweDQ0LCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweEY4LAorMHgwMCwgMHhFRiwgMHgwMywgMHhCQywgMHgwNywgMHgzMCwgMHgxQSwgMHhDMiwgMHg3OCwgMHgwMSwgMHg2MywgMHgwMSwgMHhBQywKKzB4MDYsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RkQsIDB4MzEsIDB4OTYsIDB4MDQsIDB4MzAsIDB4MUEsIDB4NDAsCisweDc5LCAweDAwLCAweDYzLCAweDAxLCAweDhDLCAweDA3LCAweEYwLCAweDFFLCAweEMxLCAweDQ5LCAweDIwLCAweEUzLCAweDAxLAorMHg5RSwgMHgxNywgMHhGMiwgMHgxRSwgMHhDOCwgMHg3OSwgMHg0MCwgMHhGMywgMHgwMSwgMHg4RCwgMHgwNiwgMHgzMCwgMHgxRSwKKzB4QzAsIDB4NTMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4MzUsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA4LCAweEMwLCAweDM3LCAweDEwLCAweENGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMSwgMHgwMSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMiwgMHgyQywgMHgwMCwgMHhGMCwgMHgwOCwgMHhFMCwgMHgzMywKKzB4MDAsIDB4NEYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4QTIsIDB4NEQsIDB4QzAsIDB4MDUsIDB4MjAsIDB4Q0YsIDB4MjAsIDB4NUMsCisweDFCLCAweEYyLCAweDA5LCAweEUwLCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDA5LCAweEMwLAorMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyMCwgMHg3OSwgMHgwMCwgMHhFMywKKzB4MDEsIDB4Q0MsIDB4MTMsIDB4RjgsIDB4OEYsIDB4QzAsIDB4N0QsIDB4MDQsIDB4N0YsIDB4MDksIDB4Q0MsIDB4MDYsIDB4RjAsCisweDlGLCAweEMwLCAweDdGLCAweDAyLCAweEY3LCAweDAxLCAweDNDLCAweDI0LCAweDcwLCAweDlCLCAweEMwLCAweDQ3LCAweDIyLAorMHhCRiwgMHgwRCwgMHhDQywgMHgwNiwgMHhCMCwgMHg5RCwgMHg0MSwgMHg0RiwgMHgwMiwgMHhCRiwgMHgwMSwgMHhDRCwgMHg0RiwKKzB4MzAsIDB4OUUsIDB4QzgsIDB4N0MsIDB4MTIsIDB4M0IsIDB4MDksIDB4Q0MsIDB4MDcsIDB4MzQsIDB4OTcsIDB4RDgsIDB4MTgsCisweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDE4LCAweDM4LCAweDAwLCAweEUxLCAweDE4LAorMHg4NCwgMHgwMywgMHhEOCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgyMCwgMHhFRCwgMHgwQywgMHhBQywgMHgwMiwgMHhEMCwgMHgwQSwKKzB4NDQsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDgsIDB4QjQsIDB4MjQsIDB4MTAsIDB4Q0EsIDB4MDgsIDB4N0IsIDB4MDEsIDB4NEQsCisweDk4LCAweDQ0LCAweDQzLCAweDEwLCAweDVFLCAweDQwLCAweDAzLCAweDAzLCAweEFELCAweDA0LCAweDk0LCAweDIzLCAweDEwLAorMHgwRSwgMHg0MiwgMHgyOSwgMHgwMywgMHgyRCwgMHgwQywgMHhGQywgMHgxMSwgMHgxMCwgMHg4NiwgMHg0MCwgMHg1NCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4N0QsIDB4MDAsIDB4RjEsIDB4MDEsIDB4ODQsCisweDI3LCAweEQwLCAweEM4LCAweDQwLCAweDc5LCAweDAyLCAweDdELCAweDAwLCAweEE2LCAweDAyLCAweDUwLCAweDBBLCAweDQ4LAorMHgzQiwgMHg4MCwgMHhFRCwgMHgwMCwgMHhGNCwgMHgwMCwgMHhEMCwgMHgwMiwgMHgwQSwgMHgwOSwgMHgwOCwgMHgzRCwgMHgwNiwKKzB4QTYsIDB4MjIsIDB4MTAsIDB4MEUsIDB4NDQsIDB4MEIsIDB4MTQsIDB4QkQsIDB4MDAsIDB4QzYsIDB4MDMsIDB4MTAsIDB4MEUsCisweDQwLCAweDE5LCAweDEwLCAweDJELCAweDQwLCAweEM0LCAweDAyLCAweDEyLCAweDA2LCAweDQyLCAweDYwLCAweDAyLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHgzMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywKKzB4RDgsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4MjIsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MzMsCisweDAwLCAweENELCAweDIwLCAweDM0LCAweDRDLCAweDkwLCAweDAwLCAweDQwLCAweEIyLCAweDAxLCAweDRELCAweDAxLCAweDI0LAorMHg4NSwgMHg5QSwgMHgyRCwgMHg0OCwgMHhDMywgMHgwMCwgMHg4RCwgMHgxMCwgMHgxNCwgMHg5QiwgMHgxMCwgMHgyOCwgMHg0MSwKKzB4ODEsIDB4MDAsIDB4OEQsIDB4MDgsIDB4MDUsIDB4MDgsIDB4MTAsIDB4QjgsIDB4NDAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEE4LCAweDM1LCAweDQxLCAweEQzLCAweDAxLCAweDRELCAweDAzLCAweEQwLAorMHgwOSwgMHhDMCwgMHgzNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHgyQywgMHgwMywgMHg3MCwgMHgwNSwgMHhDMCwgMHg3NywgMHgwNCwKKzB4RkYsIDB4MTEsIDB4N0MsIDB4MUMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzUsIDB4MDgsIDB4REYsIDB4MDIsIDB4NkQsIDB4MDksCisweDM0LCAweDBGLCAweEMwLCAweEM3LCAweDIwLCAweENELCAweDgxLCAweEM0LCAweDAzLCAweDMwLCAweDJELCAweEMwLCAweDIxLAorMHgwMCwgMHhEQiwgMHgyQiwgMHg0NCwgMHgwQiwgMHgzMCwgMHhCOSwgMHhDMCwgMHg3NCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4M0MsIDB4MDMsIDB4RjAsIDB4MjksCisweEMwLCAweDM3LCAweDAwLCAweDVGLCAweDQyLCAweDdDLCAweDRBLCAweEYwLCAweDA1LCAweEMwLCAweDI3LCAweDkxLCAweERGLAorMHgyNCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwQSwgMHhERiwgMHgwMiwgMHg1QywgMHg0MiwgMHg3MCwKKzB4Q0QsIDB4QzAsIDB4MDcsIDB4MDQsIDB4OUYsIDB4MDEsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MjUsIDB4NDAsIDB4MDcsIDB4MDEsCisweERGLCAweDAyLCAweDdDLCAweDA5LCAweEYwLCAweDI5LCAweEM4LCAweDE3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhDOCwgMHgwMywgMHgzMCwgMHgxQiwgMHhDMCwKKzB4M0YsIDB4MjAsIDB4N0YsIDB4NDEsIDB4RkMsIDB4MjcsIDB4MzAsIDB4NDYsIDB4QzAsIDB4N0UsIDB4MDEsIDB4RkYsIDB4MjAsCisweENDLCAweDBDLCAweDcwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweEJGLCAweDA4LCAweEY4LCAweDA1LCAweEI0LCAweDBGLAorMHhDMCwgMHgwRCwgMHgwOCwgMHhGRiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgxMCwgMHhFNywKKzB4MDEsIDB4Q0MsIDB4NDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MDcsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDg1LCAweDIwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDU0LCAweDAzLCAweDUwLCAweDE5LCAweDQwLCAweDM3LAorMHgwMCwgMHgxRCwgMHgwMiwgMHg3NCwgMHgwRCwgMHgxMCwgMHgxNSwgMHg0MCwgMHgyNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwKKzB4MEMsIDB4RDEsIDB4MTksIDB4QzAsIDB4MDcsIDB4MDEsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDgsIDB4OTAsIDB4MEQsIDB4NDAsCisweEM0LCAweDAwLCAweDlELCAweDAzLCAweDZDLCAweDAzLCAweEQyLCAweEY1LCAweDQwLCAweDQ3LCAweDAwLCAweDExLCAweDAxLAorMHg0NCwgMHgwMiwgMHhEMCwgMHgzOSwgMHg0OCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4QTAsIDB4MzQsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NTQsIDB4MDMsIDB4OTAsIDB4OEQsIDB4NDEsIDB4MzcsIDB4MDAsCisweDVELCAweDA4LCAweDc0LCAweDQzLCAweDUwLCAweDBELCAweDQwLCAweDM2LCAweDAwLCAweEM5LCAweDAwLCAweDQ0LCAweEMwLAorMHhEOCwgMHgxMSwgMHgwMCwgMHgwNywgMHgwMiwgMHg5RCwgMHgwMiwgMHgzNiwgMHgxOCwgMHgxMiwgMHgwRCwgMHg0MCwgMHg0NiwKKzB4MDAsIDB4OUQsIDB4MDMsIDB4NjAsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4RTcsIDB4MDAsIDB4MTEsIDB4MDQsIDB4NDQsCisweDlCLCAweEQwLCAweDExLCAweDRELCAweDA3LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgyOCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHg1MCwgMHgwNCwgMHg0MCwgMHgzMiwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4NTYsIDB4MEMsIDB4NDIsIDB4MjAsIDB4ODAsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MTAsIDB4RDAsCisweDE4LCAweDQwLCAweDMxLCAweDA5LCAweDRELCAweDIwLCAweDM0LCAweDIyLCAweDExLCAweDZDLCAweDUwLCAweDAyLCAweDAyLAorMHg4RCwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMiwgMHgwQywgMHg0MiwgMHgwMywgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4RDAsIDB4MDgsIDB4NEEsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsCisweDNFLCAweDA4LCAweEZGLCAweDAwLCAweERDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDNGLCAweDAwLCAweDVGLCAweDAwLAorMHg3NCwgMHgwMywgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNiwgMHgxMCwgMHhGQiwgMHgwMCwgMHg0QywgMHg1MCwgMHg3MSwgMHgwMSwKKzB4NjQsIDB4MDcsIDB4MDAsIDB4OUYsIDB4MDgsIDB4N0MsIDB4MDAsIDB4QjAsIDB4NkYsIDB4QzAsIDB4MDcsIDB4QTAsIDB4OUYsCisweDgwLCAweERDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDA3LCAweDQwLCAweDQ3LCAweDgwLCAweDRFLCAweDAxLCAweEYyLAorMHgwMSwgMHhDMCwgMHgwNywgMHg2MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBMCwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzAsIDB4MDcsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QUYsIDB4MDAsIDB4RkMsCisweDAxLCAweEIwLCAweDAzLCAweEMwLCAweDJGLCAweDA0LCAweEZDLCAweDEwLCAweEZDLCAweDQwLCAweEYwLCAweDAzLCAweEMwLAorMHg4RiwgMHgwOCwgMHgyRiwgMHgwMCwgMHhGQywgMHgxMCwgMHhEMiwgMHg4RiwgMHhDMCwgMHgwRCwgMHgwMSwgMHgyRSwgMHgwMCwKKzB4QkMsIDB4MDMsIDB4RTAsIDB4MEYsIDB4QzIsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkQsIDB4MDAsIDB4RjAsIDB4MEIsCisweEMyLCAweDE3LCAweDY0LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDNGLCAweDAwLAorMHhBMywgMHg0MCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgxMSwgMHhCMywgMHgyMCwgMHhGQywgMHgyNiwKKzB4QjAsIDB4OUYsIDB4RDIsIDB4MkMsIDB4MDAsIDB4RkYsIDB4MjEsIDB4RUMsIDB4MTAsIDB4QjIsIDB4OEYsIDB4QzgsIDB4M0MsCisweDEyLCAweEZGLCAweDA0LCAweEVDLCAweDIwLCAweDcyLCAweDBGLCAweEMwLCAweDdGLCAweDAyLCAweEYzLCAweDAzLCAweEVELAorMHgxQiwgMHhCMCwgMHg5QiwgMHhDMCwgMHg3QywgMHgwQSwgMHhERiwgMHgwMSwgMHhGQywgMHgxQSwgMHgzNCwgMHg0OSwgMHhDMCwKKzB4MEUsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4M0YsIDB4MDAsIDB4QjEsCisweDAxLCAweDQ0LCAweDgyLCAweDcwLCAweDAxLCAweDAyLCAweDNGLCAweDIyLCAweDkxLCAweDAwLCAweDM0LCAweDEzLCAweDEwLAorMHg0QywgMHg0OCwgMHhCNCwgMHgwMSwgMHhEMSwgMHgwMSwgMHg1NCwgMHgyNCwgMHhEMCwgMHg2RiwgMHg2MCwgMHhCQywgMHgwMSwKKzB4RkQsIDB4MDksIDB4NDQsIDB4MTgsIDB4MTAsIDB4OUYsIDB4NDAsIDB4MzMsIDB4MDEsIDB4RDEsIDB4MDAsIDB4ODQsIDB4MUIsCisweDE0LCAweDQ4LCAweDUwLCAweDM0LCAweDIxLCAweERELCAweDA0LCAweDc0LCAweDEyLCAweDExLCAweDE5LCAweDQwLCAweDBELAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMSwgMHgwMCwgMHg4MSwgMHgwMCwKKzB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MjAsIDB4QzUsIDB4MjAsIDB4MTQsIDB4MDcsIDB4NTAsIDB4MEMsCisweDQwLCAweDgxLCAweDA0LCAweEM1LCAweDAwLCAweDA0LCAweDAwLCAweEQwLCAweDZDLCAweDQ4LCAweEIwLCAweDAxLCAweENELAorMHgwMCwgMHgyNCwgMHgxQywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgwNCwgMHgwNCwgMHgwQiwgMHg1MCwKKzB4MEQsIDB4NDAsIDB4MzAsIDB4MDEsIDB4Q0QsIDB4MTQsIDB4MzQsIDB4MTgsIDB4MTAsIDB4ODEsIDB4NDAsIDB4NUMsIDB4ODAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM3LCAweDAwLCAweDkxLCAweDQxLCAweDQ0LAorMHgwRSwgMHg1MiwgMHgxMSwgMHg0NSwgMHgzNywgMHgxMCwgMHhENSwgMHg0MywgMHg3NCwgMHgwNywgMHg1MCwgMHgwRCwgMHg0NCwKKzB4NTUsIDB4MDAsIDB4RDUsIDB4MDQsIDB4NTYsIDB4ODgsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsCisweDI0LCAweDAyLCAweDEzLCAweDBELCAweDQwLCAweDM3LCAweDgwLCAweEMxLCAweDAxLCAweDQ0LCAweDAzLCAweDUwLCAweDBELAorMHg0MCwgMHgzNCwgMHgwMCwgMHhERCwgMHg4MCwgMHg3NCwgMHgwNiwgMHgxMCwgMHgxMSwgMHg0MCwgMHgxRCwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4MzcsIDB4MDAsIDB4OTMsIDB4MDEsIDB4NEQsIDB4MDQsCisweEYwLCAweDExLCAweEM0LCAweDM3LCAweEMwLCAweEQ3LCAweDAzLCAweDdDLCAweDA3LCAweEYwLCAweDhELCAweEMwLCAweEM1LAorMHgwMCwgMHhERiwgMHgwMSwgMHg0QywgMHgwQywgMHhCMiwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg2QywKKzB4MDEsIDB4NzAsIDB4MEQsIDB4QzAsIDB4NzcsIDB4MEEsIDB4RDMsIDB4ODAsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MDgsIDB4QzQsCisweDM0LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDBFLCAweDMwLCAweDM5LCAweEMwLCAweDgyLCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHgzRCwgMHgxMCwgMHhFRiwgMHgwMCwgMHhGQywgMHg4MCwgMHg3MCwKKzB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkIsIDB4ODAsIDB4RjgsIDB4MDMsIDB4QjQsIDB4MEYsIDB4QzAsIDB4MUEsIDB4MDAsCisweEZCLCAweDAwLCAweDVDLCAweDIyLCAweEYwLCAweDBGLCAweEMyLCAweDM3LCAweDMwLCAweEVGLCAweDAwLCAweDVDLCAweDBELAorMHhGMywgMHgwRiwgMHhDMCwgMHg3RiwgMHg0MCwgMHhGRiwgMHg4MCwgMHhEQywgMHgwMywgMHhCMCwgMHgwQiwgMHhDMCwgMHgzRiwKKzB4MjAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDBBLCAweDkzLCAweDAwLCAweDRDLCAweDBBLCAweEYyLCAweDY5LAorMHhDMCwgMHgzMywgMHgyMCwgMHhERiwgMHgwMiwgMHg1RCwgMHg4MywgMHhGMCwgMHhDRCwgMHhDMCwgMHg4NCwgMHgwMCwgMHhEMywKKzB4MDEsIDB4N0MsIDB4MDksIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4NDAsIDB4RDMsIDB4ODQsIDB4N0MsIDB4ODEsIDB4MzAsCisweDhELCAweEMwLCAweDM1LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDA5LCAweEMwLCAweDM0LCAweDAwLAorMHhEQiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4RjgsIDB4MDIsIDB4NTEsIDB4MjAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDUsCisweDNGLCAweDAwLCAweERELCAweDAxLCAweDdDLCAweDgzLCAweDEwLCAweDNELCAweDQwLCAweDE0LCAweDA4LCAweEMwLCAweDIwLAorMHg3NCwgMHgwMywgMHgxMiwgMHhCRiwgMHg0MCwgMHhGQywgMHgwMiwgMHhGMSwgMHgwMCwgMHg3NCwgMHg4MywgMHgxMCwgMHgxRiwKKzB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4RjQsIDB4MDMsIDB4MTAsIDB4MDksIDB4NDAsIDB4MzQsIDB4ODAsIDB4RDEsCisweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHgyMCwgMHgzMCwgMHgwMCwgMHg4MSwgMHgxMiwgMHgwNCwgMHg0QywgMHhEOSwgMHgzOCwgMHg0MCwgMHgzMywKKzB4MDAsIDB4Q0QsIDB4MDksIDB4NTQsIDB4MDMsIDB4MTAsIDB4MkQsIDB4NDAsIDB4MjAsIDB4MDgsIDB4QzEsIDB4MDAsIDB4MzQsCisweDA3LCAweDExLCAweEFDLCAweDQ4LCAweEIxLCAweDAwLCAweEMxLCAweDAxLCAweDM0LCAweDgyLCAweDEwLCAweDFDLCAweDQxLAorMHgzNiwgMHgwMCwgMHhDOSwgMHgyMCwgMHg3NCwgMHgwMywgMHg1MCwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwKKzB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NjAsIDB4MEYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDAwLCAweDcwLCAweDAwLCAweEExLCAweDg5LCAweDg0LCAweDA3LCAweEQ4LCAweDFFLCAweDQwLCAweDdCLCAweDAyLAorMHhGRCwgMHgwOSwgMHhCNCwgMHgwNywgMHgxMiwgMHgxRSwgMHg0MCwgMHg2OCwgMHgwMCwgMHhFMSwgMHg4MSwgMHhCNCwgMHgwNywKKzB4MTAsIDB4MUUsIDB4NDAsIDB4NzksIDB4MDUsIDB4RTEsIDB4MTEsIDB4QjQsIDB4MjcsIDB4MTAsIDB4MUMsIDB4NDAsIDB4RkEsCisweDAwLCAweEU5LCAweDgxLCAweEI0LCAweDA3LCAweDEwLCAweDFBLCAweDQwLCAweDc4LCAweDAwLCAweEU4LCAweDBCLCAweEI0LAorMHg4NCwgMHhEMCwgMHgxQSwgMHg0MCwgMHgzRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MTgsIDB4MzAsIDB4MDAsIDB4ODMsIDB4MjAsIDB4MEMsIDB4NDEsIDB4RjAsIDB4OEMsIDB4QzQsIDB4MzMsIDB4MjAsIDB4NEYsCisweDAwLCAweDFELCAweDIzLCAweDcwLCAweDhDLCAweEMwLCAweDg0LCAweDQwLCAweEMzLCAweDAwLCAweDNDLCAweDQzLCAweDc0LAorMHgwRCwgMHhDMCwgMHgzMSwgMHgwMCwgMHhDMywgMHgwMCwgMHgzQywgMHgwMCwgMHgzMCwgMHgwQywgMHhEMCwgMHgzMywgMHgwMCwKKzB4Q0EsIDB4MDgsIDB4M0MsIDB4MDMsIDB4NzQsIDB4MEMsIDB4RDAsIDB4MzQsIDB4MDAsIDB4QzMsIDB4MUQsIDB4M0MsIDB4MDgsCisweEYwLCAweDcwLCAweEM4LCAweDRCLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LAorMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwNCwgMHg2RiwgMHgwMCwKKzB4RkMsIDB4QTMsIDB4NzAsIDB4MEYsIDB4RTAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MkYsCisweEMxLCAweDNFLCAweDBELCAweEZGLCAweDAwLCAweEZFLCAweDAzLCAweEYyLCAweDBGLCAweEMwLCAweDNELCAweDAwLCAweEY3LAorMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGNSwgMHgyOCwgMHhGQywgMHgwMCwgMHhGMCwKKzB4ODMsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsCisweDAxLCAweEIzLCAweDAyLCAweDRELCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweEI3LCAweDAwLCAweEQzLCAweDgwLCAweDZDLAorMHgwMywgMHhGMiwgMHgwRCwgMHhDMiwgMHgxNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgyRCwgMHhDMCwKKzB4QjQsIDB4MDQsIDB4RDMsIDB4MDQsIDB4N0MsIDB4ODYsIDB4MzAsIDB4NkQsIDB4QzAsIDB4NzcsIDB4MDAsIDB4RDMsIDB4NDAsCisweDdDLCAweDUzLCAweEIwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAxLCAweDQ0LCAweDgyLCAweEYwLCAweDExLAorMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgzRCwgMHgwNSwKKzB4RTEsIDB4MTAsIDB4ODQsIDB4MDEsIDB4RDAsIDB4MDYsIDB4NDAsIDB4M0YsIDB4MDQsIDB4RTUsIDB4MDAsIDB4ODQsIDB4MDMsCisweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDIwLCAweEVELCAweEEwLCAweDlDLCAweDAyLCAweDEwLCAweDRGLCAweDQyLCAweDNDLAorMHgyMSwgMHhFMSwgMHgwQSwgMHg5QywgMHgwMywgMHgxOCwgMHg4RSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwKKzB4MEIsIDB4MTAsIDB4MEEsIDB4NDgsIDB4M0IsIDB4MDAsIDB4RkQsIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsIDB4MEEsIDB4NDAsCisweDRDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDQyLCAweDgxLAorMHgwMSwgMHg4NCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHg0OSwgMHgwMSwgMHhBNCwgMHg0NywgMHg1MCwKKzB4MUUsIDB4NDAsIDB4NUIsIDB4MDAsIDB4RUQsIDB4MDEsIDB4MTQsIDB4MDUsIDB4MTQsIDB4MUUsIDB4NTAsIDB4N0EsIDB4NDAsCisweEUxLCAweDIxLCAweDM0LCAweDA0LCAweEQwLCAweDlFLCAweDYwLCAweDdCLCAweDQwLCAweEUxLCAweDAxLCAweDM0LCAweDE3LAorMHg5MCwgMHgxQSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NCwgMHgwNCwgMHhEMCwgMHgxMCwgMHg0MCwgMHgwMiwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4MzMsIDB4MDAsIDB4NDEsIDB4MEEsCisweDA0LCAweEMzLCAweEMxLCAweEJDLCAweDQ0LCAweDMzLCAweDAwLCAweDVELCAweDAxLCAweDA0LCAweDA1LCAweEQwLCAweDA4LAorMHg0MCwgMHg3MywgMHgwQSwgMHg4RCwgMHgyMCwgMHgxNCwgMHgwRiwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMiwgMHg4MCwgMHhDMSwKKzB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4NDAsIDB4MzQsIDB4MDMsIDB4MTIsCisweDg5LCAweDQyLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDgzLCAweEQ4LCAweDFDLCAweDQwLCAweDVBLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHgxNSwgMHgwMCwgMHg3MywgMHgwMywgMHhDQywKKzB4MEQsIDB4RTAsIDB4MDcsIDB4QzAsIDB4MTcsIDB4MDAsIDB4N0IsIDB4MDAsIDB4RUMsIDB4MDUsIDB4RjAsIDB4MTUsIDB4QzIsCisweDFGLCAweDAwLCAweDVGLCAweDA1LCAweERDLCAweDYxLCAweDMwLCAweDA1LCAweEMwLCAweDE2LCAweDYwLCAweDUzLCAweDgwLAorMHhGNCwgMHgwMSwgMHhGMSwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1MywgMHgwMCwgMHg3QywgMHgwMSwgMHhCMCwgMHgwNSwKKzB4QzAsIDB4MTcsIDB4MTAsIDB4NUYsIDB4MDAsIDB4Q0MsIDB4MzksIDB4RjAsIDB4MzcsIDB4QzAsIDB4NUUsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDgxLCAweDAwLCAweDBGLCAweDA0LCAweDdDLCAweDI4LAorMHhGMSwgMHgwMSwgMHhDMywgMHgwNywgMHgxMCwgMHgxNywgMHgwOCwgMHg3QywgMHgwNCwgMHhGMCwgMHhBMSwgMHhDMCwgMHgwNywKKzB4MDEsIDB4MUYsIDB4MDAsIDB4MUMsIDB4MDAsIDB4RjAsIDB4MjAsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NUMsCisweDgwLCAweDM0LCAweDIxLCAweEMwLCAweDA3LCAweDAyLCAweDFGLCAweDAwLCAweDNDLCAweDgwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNywgMHg4MCwgMHgxRSwgMHgwMiwgMHg3QywgMHgwMCwgMHhGMCwgMHg4MSwgMHhDMSwgMHg0OSwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NjUsIDB4MDAsIDB4OTMsIDB4MDgsIDB4NkMsIDB4MDYsIDB4RjAsCisweDg5LCAweEMwLCAweDYzLCAweDAwLCAweDkzLCAweDAyLCAweDRDLCAweDAyLCAweDMxLCAweDA5LCAweEQwLCAweDI0LCAweDAwLAorMHg5QiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhEMCwgMHg2NCwgMHhDMCwgMHg5MywgMHgwOCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjQsCisweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHg2NCwgMHg0MCwgMHg5MSwgMHgwMCwgMHg0NCwgMHg2RSwgMHhEMiwgMHgyOSwKKzB4NDAsIDB4MjcsIDB4MDIsIDB4OTEsIDB4MDMsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MzksIDB4NDEsIDB4MjQsIDB4MDgsIDB4OTEsCisweDIwLCAweDdDLCAweDI2LCAweDExLCAweDI5LCAweDQwLCAweDI0LCAweDAyLCAweDkxLCAweDAyLCAweDc0LCAweDAyLCAweEQwLAorMHg3OSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3QywgMHgwMiwgMHhCMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwKKzB4OUQsIDB4MDQsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAyLCAweDkxLCAweDAwLCAweDY0LCAweDAyLCAweEQwLCAweDI5LCAweDQwLAorMHgyNywgMHgwMCwgMHg5MSwgMHgxMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHg4OCwgMHg0OCwgMHgyMCwgMHgwMCwgMHg5OSwgMHgwNCwKKzB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjAsIDB4MDAsIDB4OTEsIDB4MTAsIDB4NzQsIDB4MDIsIDB4NTAsIDB4NDksCisweDQwLCAweDY3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDY0LCAweDAwLCAweDk1LAorMHgwMSwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4NDEsIDB4ODEsIDB4MDQsIDB4MDQsIDB4MUEsIDB4OTAsIDB4MDgsIDB4NDAsIDB4MjMsCisweEMxLCAweDgxLCAweDA0LCAweDQ1LCAweDAyLCAweDE4LCAweDA4LCAweDQwLCAweDIwLCAweDAxLCAweDg5LCAweDAwLCAweDM0LAorMHgxMiwgMHgxMCwgMHg0QywgMHg0MCwgMHgyMCwgMHgwMSwgMHg4MSwgMHgwNCwgMHgzNCwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0MCwKKzB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MjIsIDB4OTAsIDB4MDgsIDB4NTQsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsCisweDM0LCAweDEyLCAweEQwLCAweDQ4LCAweDYwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxRCwgMHhCOCwgMHg5NiwgMHgwMiwgMHgxMywgMHgwMCwgMHg2QywgMHgwOCwgMHhGMCwgMHg4MSwgMHg0NCwgMHg4NywgMHgwMiwKKzB4MTMsIDB4MEEsIDB4NEMsIDB4MjgsIDB4MzAsIDB4QTEsIDB4QzAsIDB4ODQsIDB4MDIsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MDAsCisweDMwLCAweEExLCAweDQyLCAweDg0LCAweDAyLCAweDExLCAweDAwLCAweDdDLCAweEE4LCAweEYwLCAweDAxLCAweEMwLCAweDgzLAorMHgxMiwgMHgxRiwgMHgwQSwgMHg3QywgMHg1OCwgMHg3MCwgMHhBMSwgMHhDMCwgMHg4NCwgMHgwMiwgMHgxNywgMHgwQSwgMHg3QywKKzB4MjgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NzcsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsCisweEIwLCAweDI3LCAweDAyLCAweEJGLCAweDA4LCAweEY0LCAweDBBLCAweEYwLCAweDhCLCAweEMwLCAweDI3LCAweDAyLCAweEZGLAorMHgwOCwgMHhGQywgMHgwMiwgMHhGNCwgMHgwQiwgMHhDMiwgMHgyRiwgMHgwMiwgMHhCNywgMHgwMCwgMHhEQywgMHgyMiwgMHhGMCwKKzB4ODksIDB4QzgsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDgsIDB4RkMsIDB4MjIsIDB4RjAsIDB4ODksIDB4QzAsIDB4MkYsIDB4MDgsCisweEJGLCAweDAwLCAweDVDLCAweDkyLCAweDcwLCAweDBCLCAweEMyLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweEZDLCAweDIyLAorMHhGMCwgMHg4QiwgMHhDMCwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwKKzB4MkYsIDB4MDUsIDB4QjMsIDB4ODQsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDIsIDB4QjMsIDB4MDQsCisweDVDLCAweDAyLCAweDMwLCAweDhCLCAweEUwLCAweDI1LCAweDAwLCAweEI3LCAweDAwLCAweERDLCAweDAyLCAweEYwLCAweDRCLAorMHhDMCwgMHgyRiwgMHgwNSwgMHhCRiwgMHgwNCwgMHg0QywgMHgwMywgMHhGNCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMiwgMHhERiwKKzB4MDAsIDB4NEMsIDB4NTIsIDB4QjAsIDB4ODksIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RTIsCisweDA5LCAweDAwLCAweDc3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LAorMHgwMSwgMHgxMSwgMHg4OCwgMHg3NCwgMHg0OSwgMHhEMCwgMHgwNSwgMHg0MSwgMHgwNywgMHgwMiwgMHgxNSwgMHgxNCwgMHg0NCwKKzB4OTAsIDB4MTEsIDB4NDEsIDB4NDIsIDB4ODcsIDB4NDQsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MjAsIDB4NzIsIDB4NDEsIDB4QzEsCisweDA1LCAweDAxLCAweDFDLCAweDA4LCAweDU0LCAweDQ5LCAweDEwLCAweDAxLCAweDQ0LCAweDA3LCAweDAwLCAweDFELCAweDE0LAorMHg1NCwgMHgxMCwgMHg3MCwgMHg0MSwgMHg0MCwgMHgwNywgMHgyNCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwKKzB4NDIsIDB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjAsIDB4MDUsCisweDgxLCAweDAwLCAweDM0LCAweDMyLCAweEQwLCAweDg4LCAweDQwLCAweDIzLCAweDIwLCAweDgxLCAweDJDLCAweDQ0LCAweDU2LAorMHgwNCwgMHg0OCwgMHg0MCwgMHgyNSwgMHg0MywgMHg4NSwgMHg0MCwgMHgxNCwgMHgwMiwgMHhEMCwgMHhDOCwgMHg0MCwgMHgyMywKKzB4MjUsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4MzIsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OUQsIDB4MDQsIDB4MDQsCisweDUyLCAweDkwLCAweDQ4LCAweDQ0LCAweDIzLCAweDAxLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLAorMHg0QiwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5MSwKKzB4MDEsIDB4NzQsIDB4ODMsIDB4RDAsIDB4ODksIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsCisweDE5LCAweDQwLCAweEE3LCAweEMwLCAweDkxLCAweDAxLCAweDc0LCAweDA2LCAweDUwLCAweDA5LCAweDAwLCAweDI3LCAweDA4LAorMHg5OSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg1MCwgMHgwMiwKKzB4NTgsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDgsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MTIsIDB4RDAsIDB4MDksIDB4NDMsIDB4NjMsCisweDI4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDIwLCAweDI0LCAweDQwLCAweDkzLCAweDA1LAorMHg3QywgMHgwRSwgMHhGMCwgMHgzOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMywgMHgxRCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4QzgsIDB4MjUsIDB4NDAsIDB4OTcsIDB4MjAsIDB4NUMsIDB4MDIsIDB4RjMsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsCisweDAwLCAweDZDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDY3LCAweDIwLCAweDhGLCAweDAxLCAweDQ5LCAweDAyLCAweEIwLAorMHgxOSwgMHhDOCwgMHgyNywgMHgxMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgxNiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgxNywgMHgwOCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsIDB4MjEsIDB4MTAsIDB4OUYsIDB4MjAsIDB4N0MsCisweDEyLCAweEYwLCAweDA5LCAweEMxLCAweDI3LCAweDAwLCAweDlGLCAweDAyLCAweDdDLCAweDI2LCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhFMCwgMHgyNSwgMHgwNCwgMHg5RiwgMHgwMCwKKzB4NUMsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzEsIDB4MjcsIDB4MDEsIDB4OUYsIDB4ODQsIDB4NkMsIDB4MDIsIDB4QjAsIDB4NTksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDU5LCAweEMwLCAweDVCLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxMywgMHgwNCwgMHg3RSwgMHg2OCwKKzB4QjQsIDB4MjEsIDB4RDAsIDB4MDQsIDB4MDgsIDB4MUQsIDB4MDIsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzgsIDB4MDcsCisweDAwLCAweDFGLCAweDA4LCAweDdDLCAweDAwLCAweEYwLCAweDgxLCAweEMwLCAweDA3LCAweDQwLCAweDEzLCAweDAwLCAweDVDLAorMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MEMsIDB4N0MsIDB4MDgsIDB4MzAsIDB4MjEsIDB4QzIsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDFDLCAweDQwLCAweDcxLCAweDAxLCAweEU0LCAweDBELCAweDMwLAorMHgwNywgMHg0MSwgMHgxNCwgMHgwMCwgMHg3RCwgMHgwRCwgMHg0NCwgMHgwMSwgMHg3MCwgMHgwNywgMHhDMCwgMHgxMSwgMHgwMCwKKzB4NUQsIDB4MDAsIDB4NzYsIDB4MDUsIDB4OTAsIDB4MDcsIDB4NDAsIDB4OUYsIDB4MDgsIDB4NjEsIDB4MDIsIDB4NDQsIDB4MDEsCisweDcwLCAweDE3LCAweEM4LCAweDlFLCAweDAyLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweDUyLCAweDA1LCAweDQwLCAweDE3LAorMHgwMSwgMHg3RCwgMHgwMywgMHg3NCwgMHgwMSwgMHgxMCwgMHgwNSwgMHg0NCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4NzIsIDB4MDAsIDB4ODEsIDB4MDksIDB4MjQsIDB4MEIsIDB4NTAsIDB4MkMsCisweDQyLCAweDMwLCAweDAwLCAweERELCAweDAzLCAweDI0LCAweDAzLCAweEQwLCAweDlDLCAweDQwLCAweDMzLCAweDAwLCAweDhELAorMHgwMSwgMHgzNCwgMHgyMiwgMHhEMCwgMHgxQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgxMCwgMHg1NCwgMHg4MywgMHg1MCwKKzB4QjQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4NDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NzIsIDB4MDAsCisweENELCAweDgxLCAweDM2LCAweDgzLCAweDEwLCAweDBDLCAweDQwLCAweDQzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgyMCwgMHgwNSwgMHhBMSwgMHgwMCwgMHhBNCwgMHgwNywgMHg1MCwgMHgxRSwgMHg2MCwKKzB4MzgsIDB4MDAsIDB4QUQsIDB4MDQsIDB4ODQsIDB4MTMsIDB4RDAsIDB4MEUsIDB4NDgsIDB4M0IsIDB4MDAsIDB4RUQsIDB4ODAsCisweEI0LCAweDAzLCAweDkwLCAweDBFLCAweDQ0LCAweDZCLCAweDEwLCAweDIxLCAweDQwLCAweDg0LCAweDIzLCAweDQwLCAweDFFLAorMHg0MCwgMHgzQSwgMHgwMCwgMHhFRCwgMHgwOCwgMHhCNCwgMHgxMywgMHg1MCwgMHg0RSwgMHg0MCwgMHgzQiwgMHgxMCwgMHhBQywKKzB4MDAsIDB4MzQsIDB4MjcsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweDE4LCAweEU4LCAweDAwLCAweEExLCAweDAxLCAweEY0LCAweDA3LCAweDcwLCAweDE3LCAweEMwLCAweDc4LAorMHgwMCwgMHhFRiwgMHgwMywgMHhBQywgMHgyNywgMHhGMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgyMiwgMHhFRCwgMHgwMSwgMHhCNiwKKzB4MDcsIDB4RjAsIDB4MTYsIDB4ODIsIDB4NzMsIDB4MDAsIDB4MDMsIDB4MDEsIDB4OUMsIDB4MTcsIDB4NjAsIDB4MUUsIDB4QzAsCisweDc4LCAweDA4LCAweEVGLCAweDg5LCAweDNDLCAweDE3LCAweDM4LCAweERFLCAweEM4LCAweDdCLCAweDAwLCAweEFGLCAweDAxLAorMHhCQywgMHgyNywgMHgzMCwgMHgxRSwgMHhDMCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QjgsIDB4MDUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDgsCisweDhGLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDAxLCAweEMwLCAweDM1LCAweDAzLCAweERGLCAweDAwLCAweDdDLCAweDgzLAorMHhCMSwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHg5QiwgMHg1MSwgMHgwQywgMHhDMCwgMHgzNywKKzB4MDAsIDB4REYsIDB4MDIsIDB4N0MsIDB4NEIsIDB4NzAsIDB4OEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYyLCAweDBELCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorMHgyMCwgMHg2RCwgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgxMSwgMHhCMCwgMHgxRiwgMHhDMCwgMHhGRiwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4Q0MsIDB4NDcsIDB4RjAsIDB4MUIsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4QkMsIDB4MDcsIDB4MzAsCisweDlGLCAweEUwLCAweDVDLCAweDAwLCAweDNGLCAweDAxLCAweEY4LCAweDJGLCAweDM4LCAweDFGLCAweEM4LCAweDZFLCAweDI4LAorMHhGMywgMHg4MSwgMHhGQywgMHg0NywgMHhGQSwgMHg5RiwgMHhDOCwgMHg2RiwgMHgwMCwgMHgzMywgMHgyMSwgMHg3QywgMHgyNywKKzB4MzAsIDB4OUYsIDB4QzQsIDB4MUIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsCisweDI5LCAweDIwLCAweEUxLCAweDA4LCAweDg0LCAweDIxLCAweDMxLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLAorMHg4NCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwgMHgzQiwgMHgxNCwgMHhFRCwgMHg4MCwgMHg5QywgMHgyMywgMHg3MCwgMHg4QSwKKzB4QzAsIDB4MjgsIDB4MDEsIDB4MkQsIDB4MjAsIDB4OUMsIDB4MDMsIDB4MzAsIDB4NEUsIDB4NDAsIDB4MEMsIDB4MTIsIDB4RTEsCisweDE4LCAweEI0LCAweDAzLCAweDcwLCAweDBFLCAweDQwLCAweDJGLCAweDMwLCAweDAxLCAweDAwLCAweEI0LCAweDA3LCAweEIwLAorMHgwQywgMHg0MCwgMHg1NywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwKKzB4MDAsIDB4QTEsIDB4MDAsIDB4ODQsIDB4MDEsIDB4MTAsIDB4MEUsIDB4NDEsIDB4M0IsIDB4MDAsIDB4NkQsIDB4MDAsIDB4ODQsCisweDBCLCAweDUwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDA2LCAweDcwLAorMHgxOCwgMHgxMCwgMHgyRCwgMHgwMCwgMHgxNCwgMHg0MywgMHgxRCwgMHgwRSwgMHg0MCwgMHgyOCwgMHg0NCwgMHhFNSwgMHgwMCwKKzB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDQsIDB4MkIsIDB4MDIsIDB4QTksIDB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsCisweDQwLCAweDIzLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDAxLCAweDAwLAorMHg4MSwgMHgwNiwgMHgwNSwgMHg4MCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzNywgMHgwMCwgMHg0RCwgMHgwMCwgMHgwNCwgMHg4NywKKzB4RDAsIDB4MDAsIDB4NDYsIDB4NzMsIDB4MDgsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4OTMsIDB4NTEsIDB4MDgsIDB4NDAsIDB4MjAsCisweDA4LCAweDBELCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDQwLCAweDEwLCAweEQ1LCAweDgwLCAweDM0LAorMHgwMywgMHg1MCwgMHgwQywgMHg2MCwgMHgyMywgMHgwMCwgMHg4OSwgMHgyMCwgMHg3NiwgMHgxMywgMHgxQywgMHhFRCwgMHg0OCwKKzB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MkQsIDB4NDAsIDB4OTMsCisweDAwLCAweDQ0LCAweDA2LCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweEJGLCAweDAwLCAweENELCAweDA3LCAweEYwLAorMHgwNSwgMHhDMCwgMHhGRiwgMHgwMiwgMHhERiwgMHgwMCwgMHg3QywgMHgwQiwgMHgzMCwgMHgwOSwgMHhDNCwgMHgzNCwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4REMsIDB4MDcsIDB4MzAsIDB4MEQsIDB4RDAsIDB4NTQsIDB4MDAsIDB4RjcsIDB4MDEsIDB4RkMsIDB4MDMsCisweEYwLCAweDBGLCAweEMwLCAweDM3LCAweDQwLCAweDFCLCAweDAwLCAweEZDLCAweDAzLCAweDEwLCAweDNELCAweEM0LCAweDc3LAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgyNywgMHgwMCwgMHgwRiwgMHgwMSwKKzB4N0MsIDB4NjgsIDB4NzAsIDB4MjksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjMsIDB4RjAsIDB4MUQsCisweEM4LCAweDM3LCAweDAwLCAweERGLCAweDAxLCAweDFDLCAweDAzLCAweDcyLCAweDI1LCAweEMwLCAweDk1LCAweDAwLCAweDFGLAorMHg4MiwgMHgxQywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgxNywgMHgwMCwgMHhEQiwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwKKzB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4ODcsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MTcsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDJGLCAweDAwLCAweDkzLCAweDAwLCAweDRDLAorMHgwMiwgMHhGMCwgMHgwMiwgMHhDMSwgMHgzQywgMHgwMCwgMHhGMywgMHgwMiwgMHhDQywgMHgwMywgMHhGMCwgMHgwNywgMHhDMCwKKzB4M0MsIDB4MDAsIDB4RkYsIDB4MDMsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4ODIsIDB4QzAsIDB4NkMsIDB4NDAsIDB4MzMsIDB4MDAsCisweEZDLCAweDQzLCAweDMwLCAweDBELCAweEMwLCAweDRGLCAweDAwLCAweEYzLCAweDAwLCAweDhELCAweDAzLCAweDMwLCAweDBGLAorMHhDMCwgMHg2RiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHgzMCwgMHgwRiwgMHhEMCwgMHgwNCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4NDYsIDB4MDIsIDB4MTEsIDB4MDIsIDB4NTQsIDB4MDYsCisweDkwLCAweDcxLCAweDQwLCAweDM0LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDIwLCAweDQwLCAweDM0LAorMHgwMCwgMHhDRCwgMHgwMCwgMHg2QywgMHgwMywgMHgxMCwgMHgyNSwgMHg0MSwgMHg4NCwgMHgwNiwgMHgxMSwgMHgwMSwgMHg3NCwKKzB4MDMsIDB4MTAsIDB4MUQsIDB4QzAsIDB4NDEsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NDAsCisweDY3LCAweDAwLCAweDlELCAweDA1LCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweEMyLCAweDA2LCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgyMiwgMHgwMCwgMHhEMSwgMHgwMiwgMHg0NCwgMHgwNiwgMHhEMCwKKzB4MTEsIDB4NDAsIDB4NjQsIDB4MDAsIDB4ODEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDgsIDB4MjEsIDB4NDAsIDB4MzQsIDB4MDAsCisweERELCAweDAwLCAweDQ0LCAweDA3LCAweDEwLCAweDA5LCAweDQwLCAweDEwLCAweDgwLCAweDExLCAweDAzLCAweDc0LCAweDAzLAorMHg5MCwgMHgxRCwgMHg0MSwgMHgzNywgMHgwMSwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywKKzB4MDEsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDMsIDB4MTQsIDB4MEQsIDB4NDQsIDB4MDQsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweEMxLCAweDAwLCAweDE0LCAweDAwLCAweDk4LCAweDA4LAorMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHg4MCwgMHgwNSwgMHgwMywgMHhEMCwgMHgwOSwgMHg0MCwgMHgzMCwgMHgwMCwgMHhERCwKKzB4MDAsIDB4MjQsIDB4MDMsIDB4MTQsIDB4MDAsIDB4NTAsIDB4MTAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTAsCisweDBDLCAweDQwLCAweDU3LCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweDUwLCAweDBDLCAweDQwLCAweDMzLCAweDgwLAorMHgwRCwgMHgwMiwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0QywgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MjIsIDB4NDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjEsIDB4MDEsIDB4NTAsCisweDNDLCAweDAwLCAweDQzLCAweDAwLCAweENDLCAweDAzLCAweEYwLCAweDA1LCAweEQwLCAweDNDLCAweDAwLCAweERGLCAweDAwLAorMHg0NCwgMHgwMywgMHgzMCwgMHgwMCwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxMywgMHgwMCwgMHhGQywgMHgwMywgMHhCMCwgMHgwRCwKKzB4QzAsIDB4MjcsIDB4NDAsIDB4RjMsIDB4MDAsIDB4QzQsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MUYsCisweDAyLCAweEJDLCAweDEzLCAweDMwLCAweEFELCAweEMyLCAweDA0LCAweDYwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHhCMCwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGOCwgMHgwQiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4NDAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAzLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweDc0LCAweDBCLCAweEUwLAorMHgwRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDOCwgMHgyRiwgMHgzMCwgMHhCRiwgMHgwNCwKKzB4N0MsIDB4MEIsIDB4RjAsIDB4NEYsIDB4QzAsIDB4MTcsIDB4NjIsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEEwLCAweDdGLCAweDAwLCAweDdFLCAweDAxLCAweEZDLCAweDA3LCAweDMwLCAweDFGLCAweDQ0LCAweDNDLCAweDA1LAorMHhGNywgMHgwMCwgMHhFQywgMHgyMywgMHhCMCwgMHg0RiwgMHhDMCwgMHg0OSwgMHgwMCwgMHgzNywgMHgwMywgMHhGQywgMHgwMywKKzB4MzIsIDB4MkYsIDB4NDAsIDB4M0QsIDB4MDIsIDB4MjMsIDB4MDMsIDB4REMsIDB4MjQsIDB4NzgsIDB4OTMsIDB4QzAsIDB4NDgsCisweDAwLCAweDIzLCAweDAxLCAweEU0LCAweDAzLCAweEIwLCAweDE3LCAweEMwLCAweDRDLCAweDAwLCAweEZGLCAweDIxLCAweENDLAorMHgwNiwgMHhFMCwgMHgwMywgMHhDMCwgMHgwRSwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4MDgsIDB4N0YsIDB4MDAsIDB4REQsIDB4MDEsIDB4RjQsIDB4MDcsIDB4MTAsIDB4MUYsIDB4NDAsIDB4RjQsIDB4MDAsIDB4RjEsCisweDAzLCAweDg0LCAweDNCLCAweDEwLCAweDlELCAweEMwLCAweDY0LCAweDAwLCAweDFELCAweDAwLCAweEY0LCAweDJGLCAweDE0LAorMHg2RiwgMHg0NCwgMHhCQywgMHgwMywgMHgxMSwgMHg4NCwgMHg0QywgMHgwMCwgMHhEMCwgMHg0MSwgMHhDMCwgMHg1NCwgMHg0OCwKKzB4NTEsIDB4MDEsIDB4NDQsIDB4MkYsIDB4MTAsIDB4MTEsIDB4NTAsIDB4NDQsIDB4MDAsIDB4RkQsIDB4QTEsIDB4NDQsIDB4MDQsCisweEQxLCAweDA5LCAweDQwLCAweDBDLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLAorMHgzMywgMHgwMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMywgMHg5MSwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDNSwgMHgyMiwKKzB4MjQsIDB4MTMsIDB4OTEsIDB4MEMsIDB4NDAsIDB4MDEsIDB4MDgsIDB4MEQsIDB4ODQsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MkMsCisweDQwLCAweDMxLCAweDIxLCAweDAxLCAweEMwLCAweDE0LCAweDE0LCAweDUwLCAweDAxLCAweDQwLCAweDMyLCAweDIwLCAweDkxLAorMHgwMCwgMHgwNCwgMHgwMywgMHg5MCwgMHgwRCwgMHg0MCwgMHgwMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwKKzB4MDEsIDB4NDIsIDB4NEQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsCisweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweDkwLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDYwLCAweDQ0LAorMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHg2NCwgMHgyNCwgMHgxRCwgMHgwMSwgMHg3NCwgMHgwMywgMHg5MiwgMHgwRCwgMHg0MCwKKzB4MzIsIDB4ODgsIDB4MDEsIDB4MDEsIDB4NTQsIDB4MDQsIDB4QzAsIDB4MTksIDB4NTAsIDB4OTQsIDB4MDEsIDB4OTAsIDB4MDgsCisweDQ0LCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweDQ2LCAweDA0LCAweERELCAweDAwLCAweDQ0LCAweDQ2LCAweEQxLCAweDMxLAorMHg0MCwgMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNywgMHgwMCwKKzB4OUYsIDB4MDQsIDB4M0MsIDB4MDMsIDB4OTQsIDB4MEMsIDB4RDAsIDB4MzQsIDB4MTAsIDB4RDcsIDB4MDAsIDB4NkMsIDB4MDMsCisweEIwLCAweDBELCAweEM4LCAweDQ1LCAweDEwLCAweDlGLCAweDAzLCAweDdDLCAweDAzLCAweEIwLCAweDBELCAweEMwLCAweDM1LAorMHgwMCwgMHgxMywgMHgxMSwgMHg1QywgMHgwNCwgMHg3MSwgMHgzMCwgMHhDMCwgMHgyNiwgMHgwMCwgMHgxMywgMHg4MywgMHg2QywKKzB4MDMsIDB4QjAsIDB4NDgsIDB4QzAsIDB4QzYsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NEQsIDB4MEUsIDB4RjAsIDB4MzEsIDB4RDAsCisweDIzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBGLCAweDgwLCAweDNELCAweDAwLCAweEJGLAorMHgwMCwgMHhGQywgMHgwMywgMHg3MCwgMHgwRiwgMHhDMCwgMHgzQiwgMHgwMCwgMHhFRCwgMHg0MCwgMHhGQywgMHg4MywgMHhGMCwKKzB4MEUsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzAsIDB4MEUsIDB4QzQsIDB4M0QsIDB4MDAsCisweEJGLCAweDAwLCAweEVDLCAweDAyLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDdGLCAweDAwLCAweDNDLCAweDAzLAorMHgxMCwgMHg0QiwgMHhDMCwgMHgwRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwgMHgxRSwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4MDgsIDB4MzUsIDB4MjAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAzLCAweEYwLCAweDRELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDgzLCAweDcwLCAweDBELAorMHhDMCwgMHgwNywgMHgwMCwgMHg5MywgMHgwMiwgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHg5RiwKKzB4MDIsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzIsIDB4QTcsIDB4MDEsIDB4OTMsIDB4MDYsIDB4N0MsIDB4NDcsIDB4MzAsCisweDQ5LCAweEMwLCAweDg3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDAxLCAweEM0LCAweDA4LCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwgMHgyMCwgMHg5RCwgMHg4MCwgMHg3NCwKKzB4MDMsIDB4RDAsIDB4NEQsIDB4NjAsIDB4M0YsIDB4MDAsIDB4RkQsIDB4MDAsIDB4QzQsIDB4ODMsIDB4MTAsIDB4MEYsIDB4NDQsCisweEE3LCAweDFBLCAweDkxLCAweDAwLCAweEJDLCAweDEzLCAweEQwLCAweDBGLCAweDQwLCAweDNDLCAweDAwLCAweDlELCAweDAwLAorMHg0NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0MCwgMHg4MywgMHgwMSwgMHhDMSwgMHg1MSwgMHhDNCwgMHgwQiwgMHg1MCwgMHgwOSwKKzB4NDAsIDB4ODcsIDB4MDAsIDB4REMsIDB4MDAsIDB4NzQsIDB4MEEsIDB4RDAsIDB4OTksIDB4NDAsIDB4NkQsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDEzLAorMHhEMCwgMHgyQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHg1NCwgMHgwMywgMHg1OCwgMHgwQywgMHg0MSwgMHgyMywKKzB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MTMsIDB4OTAsIDB4MEMsIDB4NDQsIDB4MzAsIDB4MDAsIDB4MEQsIDB4ODAsIDB4MTQsCisweDAwLCAweEQxLCAweDAwLCAweDQwLCAweDgyLCAweDA4LCAweEM1LCAweDYzLCAweDE0LCAweDAzLCAweDEwLCAweDNDLCAweDQwLAorMHhDMywgMHgwMywgMHhDRCwgMHgwMCwgMHgzNCwgMHgxNiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEQsIDB4ODAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4ODEsIDB4QjQsIDB4MjcsIDB4RDAsCisweDFFLCAweDQwLCAweDdCLCAweDAwLCAweENELCAweDg5LCAweDg0LCAweDA3LCAweDE4LCAweDFFLCAweDQwLCAweDZGLCAweDAxLAorMHgyMSwgMHgwMSwgMHhCNCwgMHgwNywgMHhDMCwgMHgxQywgMHg0OCwgMHg3OCwgMHgwMCwgMHhCRCwgMHg0MSwgMHg4NCwgMHgwNywKKzB4RDAsIDB4MUEsIDB4NDEsIDB4NUYsIDB4MDAsIDB4RTUsIDB4MDEsIDB4ODQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDAsIDB4NEIsCisweDAxLCAweEVELCAweDIxLCAweEI0LCAweDA0LCAweEQwLCAweDVBLCAweDQwLCAweDNELCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHg4RiwgMHgwOCwgMHgzQywgMHgwMywgMHhGMCwgMHg4QywKKzB4NDAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MUMsIDB4MjMsIDB4NzAsIDB4MUMsIDB4QzAsIDB4NjMsIDB4MjEsIDB4ODMsCisweDAyLCAweDNFLCAweDAzLCAweEIwLCAweDhDLCAweEMwLCAweDMwLCAweDAwLCAweENGLCAweDA4LCAweDFDLCAweDAyLCAweEYwLAorMHgwNCwgMHhDMCwgMHgzMywgMHgwMSwgMHg4NywgMHgwNCwgMHgxQywgMHgyMywgMHgzOCwgMHgwQywgMHhDMSwgMHgwMywgMHgwMiwKKzB4Q0YsIDB4MDAsIDB4M0MsIDB4RTMsIDB4RjAsIDB4MDAsIDB4QzEsIDB4NDgsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDdELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDg3LCAweEYwLCAweDlGLCAweEMwLAorMHgzRiwgMHgwMCwgMHhGRiwgMHg1MCwgMHhGQywgMHgwMywgMHhGMiwgMHg4RiwgMHhDMCwgMHgyRiwgMHg0MiwgMHhCRiwgMHgwOCwKKzB4REMsIDB4MDMsIDB4RjgsIDB4MEYsIDB4QzIsIDB4M0YsIDB4OTQsIDB4RkYsIDB4NDAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4OEQsCisweDQwLCAweDNGLCAweDQwLCAweEJCLCAweDAwLCAweDVDLCAweDYzLCAweEYwLCAweDBGLCAweEM4LCAweDBGLCAweDAzLCAweEZGLAorMHgwMSwgMHhGQywgMHgwMywgMHhGMCwgMHg0MywgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4ODAsIDB4OUUsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDAyLCAweERGLCAweDExLCAweDRDLCAweDUzLCAweEYwLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweDlGLCAweDIwLCAweDRDLAorMHgwMywgMHhGMCwgMHg0RCwgMHhDMCwgMHhGNywgMHgwMSwgMHg1QiwgMHgwMCwgMHg3QywgMHgwMSwgMHg3MiwgMHgxRCwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NDQsIDB4QzAsIDB4REIsIDB4MDEsCisweDRDLCAweDAxLCAweEQwLCAweDFELCAweDQwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMywgMHg4OCwgMHgzOSwgMHgwMSwgMHhBRCwgMHgwMCwgMHgzNCwgMHg4QiwgMHgxMCwgMHgyRSwgMHg0OCwgMHgzQiwgMHgzMSwKKzB4RUQsIDB4MDQsIDB4QUMsIDB4MDMsIDB4RDAsIDB4MkUsIDB4NDAsIDB4MEIsIDB4MjgsIDB4M0QsIDB4MDAsIDB4ODQsIDB4M0IsCisweEQwLCAweEFFLCAweEMwLCAweDM5LCAweDBBLCAweEUxLCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDAwLCAweDM4LAorMHgwMCwgMHhFRCwgMHg4MCwgMHg4NCwgMHgxMywgMHhEMiwgMHgwQSwgMHg0MCwgMHgwOCwgMHgwMCwgMHhDNSwgMHgwMiwgMHg5NCwKKzB4MDEsIDB4RDAsIDB4MEYsIDB4NDAsIDB4NEMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweDc5LCAweDAyLCAweEE1LCAweDQzLCAweEI0LCAweDE3LCAweDEwLCAweDVFLCAweDQwLCAweDdCLCAweDAwLCAweEVELAorMHgwMSwgMHg4NCwgMHgyNywgMHg1OCwgMHg1RSwgMHg0NCwgMHg2QiwgMHgxMCwgMHhBRCwgMHgxMSwgMHg4NSwgMHgwNywgMHhEMCwKKzB4MUUsIDB4NDYsIDB4NzMsIDB4MDEsIDB4RTksIDB4OTEsIDB4QjQsIDB4ODcsIDB4NDIsIDB4MUUsIDB4NDAsIDB4N0EsIDB4MDAsCisweEZELCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDBBLCAweDQxLCAweEM4LCAweDQwLCAweEVELCAweDA1LCAweDg0LCAweDA1LAorMHhEMCwgMHgxQSwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwKKzB4MzMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTQsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDczLCAweDAyLCAweENELCAweDAzLCAweDQ0LCAweDAzLCAweEQwLCAweDBDLAorMHg0MCwgMHgzMSwgMHgwMCwgMHhDOSwgMHgwMSwgMHgzNCwgMHgxNywgMHhEMCwgMHg1QywgMHg0MiwgMHhGMiwgMHgwMCwgMHhDRCwKKzB4ODAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MzgsIDB4NDAsIDB4NzAsIDB4NDEsIDB4Q0QsIDB4NDAsIDB4MTQsIDB4NjMsIDB4RDAsCisweDNDLCAweDQ5LCAweDU4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE1LAorMHgwMCwgMHg3RiwgMHgwMCwgMHgzQywgMHgwMSwgMHhCMCwgMHgwNCwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg0QywKKzB4MDEsIDB4RjAsIDB4MDQsIDB4QzAsIDB4OUYsIDB4MDAsIDB4N0YsIDB4MDEsIDB4NDQsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzQsCisweDE3LCAweDAwLCAweDdCLCAweDAyLCAweEY0LCAweDE1LCAweDcwLCAweDE3LCAweEQwLCAweDlBLCAweDEwLCAweDdGLCAweDEwLAorMHg1QywgMHgwMSwgMHhGMCwgMHgwNywgMHhDMCwgMHgxQywgMHgwMCwgMHg1RiwgMHgwMCwgMHhDQywgMHgwNSwgMHhGMCwgMHg1NywKKzB4RDAsIDB4NUMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsCisweDFGLCAweDA0LCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDNDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDNCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3QywgMHg4OCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNSwKKzB4MDAsIDB4MTcsIDB4MTAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4ODEsIDB4QzAsIDB4MDUsIDB4MDIsIDB4MUYsIDB4MDAsIDB4NzUsCisweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDQwLCAweDE3LCAweDgwLCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEMwLAorMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4NEMsIDB4MTIsIDB4MzAsIDB4MjksIDB4QzIsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsCisweDQ5LCAweEMwLCAweDI0LCAweDA2LCAweDlGLCAweDEwLCAweDRDLCAweDIyLCAweDMwLCAweDA5LCAweEUwLCAweDI3LCAweDAwLAorMHg5NywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMiwgMHg1OSwgMHhDMCwgMHgyNywgMHgyNiwgMHg5MywgMHg4MCwgMHg3RCwgMHgwQSwKKzB4RjAsIDB4MTksIDB4QzEsIDB4NjcsIDB4MDIsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4MzAsIDB4NTksIDB4QzAsIDB4NDMsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDJFLCAweDAwLCAweDhELCAweDAwLAorMHhDNCwgMHgxRSwgMHgxMCwgMHgyQiwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHg3OSwKKzB4NDAsIDB4NjUsIDB4MDAsIDB4OUQsIDB4ODAsIDB4NjgsIDB4MDYsIDB4NTAsIDB4MDksIDB4NjAsIDB4MjcsIDB4MDAsIDB4OUQsCisweDAwLCAweDVDLCAweDAyLCAweEIxLCAweDM5LCAweEMyLCAweEU3LCAweDAwLCAweDgxLCAweDgyLCAweDZDLCAweDFBLCAweEQwLAorMHg4OSwgMHhDMCwgMHgyNSwgMHgwMCwgMHhCRCwgMHgwMywgMHgzNCwgMHgxQSwgMHgxMiwgMHg0OSwgMHg0MCwgMHgwNywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MjAsIDB4OUQsIDB4NDAsIDB4NDQsCisweDAyLCAweDEwLCAweDI5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDE4LCAweDA5LCAweDQyLAorMHgyNCwgMHgwMCwgMHg4RCwgMHgwMCwgMHg0NCwgMHg4MiwgMHgxMiwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5NSwgMHg2MCwKKzB4MzQsIDB4MDIsIDB4NTgsIDB4MkQsIDB4NDAsIDB4QTcsIDB4ODAsIDB4RDEsIDB4OTgsIDB4NjQsIDB4MDIsIDB4RDAsIDB4MDksCisweDQwLCAweDI3LCAweDAwLCAweDlELCAweDQwLCAweDc0LCAweDIyLCAweDE0LCAweDA5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHg5RCwgMHgwMiwgMHgwNCwgMHgwMiwKKzB4MTAsIDB4MDgsIDB4NDAsIDB4QTAsIDB4MDAsIDB4OEQsIDB4MDYsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjEsCisweDAwLCAweDhELCAweDA4LCAweDQ1LCAweDgzLCAweDVBLCAweDg4LCAweDYwLCAweDIzLCAweDgyLCAweDhELCAweDA4LCAweDM0LAorMHgyMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwgMHgwMCwgMHgyNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwKKzB4MzEsIDB4ODAsIDB4Q0QsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDQ2LCAweDAwLCAweDFGLCAweDAwLCAweDRELCAweDA0LCAweDM0LAorMHgxMSwgMHg1MCwgMHgwNCwgMHgwNSwgMHgwRiwgMHgwMCwgMHg3QywgMHg3OCwgMHgzMCwgMHg0MSwgMHg0MSwgMHgwNCwgMHgwMCwKKzB4MUQsIDB4MDIsIDB4NDQsIDB4NTAsIDB4MzEsIDB4NjEsIDB4NDEsIDB4ODcsIDB4MDUsIDB4MTcsIDB4NDIsIDB4NzQsIDB4MDgsCisweDc0LCAweDIwLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDQwLCAweDZDLCAweDUwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LAorMHgwMCwgMHgxRiwgMHg4MSwgMHg3QywgMHgwMCwgMHgzMCwgMHhBMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4QTcsIDB4MDAsIDB4QkYsIDB4MDEsIDB4N0MsIDB4MEEsIDB4RjEsIDB4MjksCisweEMwLCAweDY3LCAweDAwLCAweDlGLCAweDA5LCAweDdDLCAweDgyLCAweEY0LCAweDA5LCAweEMwLCAweDJGLCAweDIwLCAweEJGLAorMHgwNCwgMHg3QywgMHgwMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwMSwgMHhGRiwgMHgyNCwgMHhEQywgMHgxMiwgMHgwMCwKKzB4NEIsIDB4QzAsIDB4MkQsIDB4NDAsIDB4QUYsIDB4MDAsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzgsIDB4MzksIDB4MDAsCisweDlGLCAweDIyLCAweEZDLCAweDAzLCAweEYwLCAweDhCLCAweEMwLCAweDc3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHg2NywgMHgwMSwgMHg5MywgMHgwMiwgMHhDQywgMHgwNiwgMHhGMCwgMHgxQiwgMHhDMCwKKzB4MjUsIDB4MDIsIDB4OUIsIDB4RTAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4NEIsIDB4QzUsIDB4MkYsIDB4MDAsIDB4OTMsIDB4MDAsCisweERDLCAweDAyLCAweDM4LCAweDg5LCAweEMwLCAweDI3LCAweDQ5LCAweDkzLCAweDAwLCAweDVFLCAweDIyLCAweDMwLCAweDBCLAorMHg0MCwgMHgyQywgMHgwMCwgMHhBMywgMHgwMCwgMHhDQywgMHgxMiwgMHhGMCwgMHgwQSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCQiwKKzB4MTEsIDB4RkMsIDB4ODIsIDB4RTAsIDB4MEIsIDB4RDAsIDB4NzQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDA4LCAweDBCLCAweDAxLCAweDQ1LCAweDAwLCAweEQwLCAweDAxLCAweDQ2LCAweDQ3LAorMHgwMSwgMHgxRCwgMHg5RCwgMHg3NCwgMHg1MCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxMSwgMHgxMCwgMHg1QywKKzB4MDAsIDB4MTQsIDB4ODEsIDB4MDAsIDB4MDcsIDB4MjUsIDB4MTEsIDB4MDQsIDB4NUMsIDB4MTAsIDB4MTAsIDB4MDEsIDB4NTEsCisweDA0LCAweDIwLCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweEQyLCAweDA1LCAweDQ4LCAweDA3LCAweDEwLCAweDEzLCAweDQyLAorMHg3NCwgMHgwMCwgMHhEMCwgMHgwNSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4QTAsIDB4QTMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MEEsIDB4RDAsIDB4MjgsIDB4NDAsIDB4MjMsIDB4MDIsCisweDhELCAweDAwLCAweDM0LCAweDMyLCAweEQwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDgxLCAweDA0LCAweDE0LCAweDIyLAorMHg5MCwgMHgwOCwgMHg0NCwgMHgyMywgMHgwMywgMHg4OSwgMHgxNCwgMHg1NCwgMHgxMiwgMHgxOCwgMHg0OCwgMHg0MCwgMHgyMiwKKzB4NDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MjIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODksIDB4MDAsIDB4MzQsCisweDAyLCAweEQxLCAweDA4LCAweDQwLCAweDQ4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHg4OCwgMHgyNSwgMHgwMCwgMHg4OSwgMHgwNCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwKKzB4ODAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4MDAsIDB4QTcsIDB4NDIsIDB4OTEsIDB4MDIsIDB4NTQsIDB4MDIsIDB4OTgsCisweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDU0LCAweDAyLCAweDEwLCAweDBDLCAweDQwLCAweDI2LCAweDIwLAorMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMSwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwKKzB4RDAsIDB4MEQsIDB4NDAsIDB4NjAsIDB4MjgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjgsCisweDI1LCAweDAwLCAweEIzLCAweDgxLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEM4LCAweDJGLCAweDA4LCAweEJCLCAweDgwLAorMHg3QywgMHgwMiwgMHhGMSwgMHgwOSwgMHg4MCwgMHg2NSwgMHgwMCwgMHg5MywgMHgwMCwgMHgxQywgMHgwMiwgMHg5MCwgMHgwOSwKKzB4NDgsIDB4MjcsIDB4MDAsIDB4OUIsIDB4MDMsIDB4MUMsIDB4MUEsIDB4MzAsIDB4NTksIDB4QzAsIDB4MjIsIDB4MDEsIDB4ODMsCisweEE3LCAweDRDLCAweDAyLCAweEQwLCAweDI5LCAweEM0LCAweDY3LCAweDAwLCAweDlCLCAweDgwLCAweDdDLCAweDJBLCAweEYwLAorMHgyOSwgMHhDMCwgMHgxNCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHgyNSwKKzB4MDAsIDB4OUYsIDB4MDEsIDB4NzAsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4ODAsIDB4OUMsIDB4QTAsIDB4N0MsCisweDgyLCAweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDlGLCAweDAzLCAweDdFLCAweDAyLCAweDUwLCAweDA5LCAweEM0LAorMHgyNywgMHgwMCwgMHg5RiwgMHgwNSwgMHg3QywgMHgwMiwgMHhGNCwgMHg0OSwgMHhFMCwgMHg2NSwgMHgwMSwgMHg5QywgMHg0NCwKKzB4NUMsIDB4NDIsIDB4RjAsIDB4MDksIDB4MDAsIDB4NjcsIDB4MDQsIDB4OUYsIDB4MjAsIDB4N0UsIDB4MDYsIDB4RDAsIDB4NTgsCisweEMxLCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDAxLCAweDAwLAorMHgxRiwgMHgwMCwgMHg1QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhFMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4MzEsIDB4MDEsIDB4RTAsIDB4MDYsIDB4MTEsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4OTAsIDB4MDEsIDB4QzgsIDB4MDMsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDgwLCAweEY4LCAweDAxLCAweEMwLCAweDg2LCAweDAwLCAweDFGLCAweDgwLCAweDVDLAorMHgwMCwgMHg2MCwgMHgwMSwgMHhDMCwgMHg4NSwgMHgwMCwgMHgxRiwgMHgwNCwgMHg0RCwgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwKKzB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsIDB4MTQsIDB4MDAsIDB4NUQsCisweDAwLCAweEQ0LCAweDBELCAweEQ4LCAweDA3LCAweDYwLCAweDE3LCAweDEwLCAweDVFLCAweDAwLCAweDc0LCAweDAxLCAweDEwLAorMHg1NywgMHhFMCwgMHg5QiwgMHg4MCwgMHg1RCwgMHgyMCwgMHhGNCwgMHgwMSwgMHhCMiwgMHgwNSwgMHhDMCwgMHgxNywgMHg4MCwKKzB4NUQsIDB4MDAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4MTcsIDB4QzAsIDB4MUMsIDB4MDAsIDB4N0QsIDB4MDIsIDB4QzQsIDB4MDEsCisweEIwLCAweDE3LCAweDQwLCAweDk4LCAweDAwLCAweDdGLCAweDAzLCAweEM0LCAweDQ1LCAweEQyLCAweDA3LCAweDQ4LCAweDQxLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MDQsIDB4MkUsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MzEsIDB4ODAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTMsIDB4MTgsCisweDYwLCAweDMyLCAweDgwLCAweENELCAweDAwLCAweDM0LCAweDAyLCAweDE4LCAweDBDLCAweDQwLCAweDMzLCAweDEwLCAweENELAorMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHg3QywgMHg1MCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgxQSwgMHgxNiwgMHgwQiwgMHgxMCwKKzB4MDQsIDB4MDAsIDB4RjEsIDB4MDIsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MUUsIDB4RDAsIDB4OEMsIDB4NDAsIDB4NDAsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDAwLCAweEVELCAweDA0LCAweDk0LAorMHgwMiwgMHhEMCwgMHgwQSwgMHg0MCwgMHgzQiwgMHgwMSwgMHhFRCwgMHgwNCwgMHgzNCwgMHgwNywgMHgxOCwgMHgwQSwgMHg0MCwKKzB4M0IsIDB4MDAsIDB4RUQsIDB4MDQsIDB4MzQsIDB4MDIsIDB4OTIsIDB4NEUsIDB4NDAsIDB4M0IsIDB4MDEsIDB4RUQsIDB4MDAsCisweEI0LCAweDAzLCAweDUwLCAweDBFLCAweDQxLCAweDI4LCAweDEwLCAweEFELCAweDQwLCAweDg0LCAweDA0LCAweDkwLCAweDNFLAorMHg0MCwgMHgzOCwgMHgwMCwgMHhBRCwgMHg4MywgMHg4NiwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwgMHgxMSwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDMsIDB4OTQsIDB4MDcsCisweDcwLCAweDFBLCAweEMwLCAweDc5LCAweDAxLCAweEVELCAweDA1LCAweEI0LCAweDM3LCAweDMxLCAweDFFLCAweDQwLCAweDdBLAorMHgwOCwgMHhFRCwgMHgwQiwgMHhCNCwgMHgwNiwgMHgzNCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMiwgMHhFRCwgMHg4NSwgMHhCQywKKzB4MjcsIDB4RDgsIDB4MTcsIDB4RTAsIDB4NjgsIDB4MDAsIDB4QUYsIDB4ODEsIDB4OUMsIDB4MDQsIDB4NzgsIDB4MTYsIDB4QzAsCisweDc5LCAweDAwLCAweEVGLCAweDAxLCAweDhDLCAweDA3LCAweEYwLCAweDFCLCAweEMwLCAweDUwLCAweDYwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgxMCwgMHhERiwgMHg0MCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MkIsIDB4RjQsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDBELCAweEMwLCAweDM1LCAweDgyLCAweERGLCAweDNFLCAweDVDLCAweDNCLAorMHg3MCwgMHgwMSwgMHhFMCwgMHgyNSwgMHgyMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwMCwgMHg3MCwgMHgwRCwgMHhDMiwgMHgyNywKKzB4MDAsIDB4QzcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDdGLCAweDAwLCAweEVGLCAweDA5LCAweENDLCAweDMyLCAweEY4LCAweDhCLAorMHhDMCwgMHg3QywgMHgwNCwgMHhGRiwgMHgxMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxQiwgMHhDOCwgMHg3RiwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4REUsIDB4MDYsIDB4RjAsIDB4QkQsIDB4QzEsIDB4NzQsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsCisweDFCLCAweEMwLCAweDZDLCAweDAwLCAweDlCLCAweDg5LCAweEZDLCAweDI1LCAweEYwLCAweDE3LCAweEMwLCAweDdDLCAweDAwLAorMHhCQiwgMHgwMSwgMHhCQywgMHgwNywgMHgzOCwgMHg5RiwgMHhDMCwgMHgxQiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTUsIDB4ODAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MUMsIDB4ODQsIDB4MjIsIDB4RDgsIDB4MEEsIDB4QzAsCisweDNBLCAweEEwLCAweEVELCAweDA4LCAweEI0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDEzLCAweDAwLCAweEVELCAweDAwLAorMHg4QywgMHgxMiwgMHhEMCwgMHg1RSwgMHg0MCwgMHg3OCwgMHgwMiwgMHhFRCwgMHgwMCwgMHg5QywgMHg0MywgMHhEMCwgMHgwQiwKKzB4NjAsIDB4MjgsIDB4MDYsIDB4QUQsIDB4MDUsIDB4QjQsIDB4MjQsIDB4RDIsIDB4MEUsIDB4QzAsIDB4M0EsIDB4ODAsIDB4QTUsCisweDAwLCAweEI0LCAweDA5LCAweEYyLCAweEMyLCAweDQwLCAweDU3LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwOCwgMHgzOSwgMHgwMCwgMHhGRCwgMHg4MSwgMHhBNCwgMHgwMywgMHhEOCwgMHg4OCwgMHg0MCwgMHg3OCwKKzB4MDIsIDB4RTUsIDB4MDEsIDB4QjQsIDB4MDMsIDB4NTAsIDB4MEEsIDB4NDAsIDB4M0IsIDB4MDIsIDB4RkQsIDB4MTgsIDB4OTQsCisweDAyLCAweEQxLCAweDRFLCAweDU0LCAweDNBLCAweDEwLCAweEVELCAweDAwLCAweEI0LCAweDIzLCAweEQwLCAweDBFLCAweDQwLAorMHgyOCwgMHgwMCwgMHhBOSwgMHgxNCwgMHhCNCwgMHg4MCwgMHhEOCwgMHg4NiwgMHg0MCwgMHgzOSwgMHgwMCwgMHhFMSwgMHgwMCwKKzB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA2LCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAxLCAweEQwLCAweDA4LCAweDY0LCAweDMyLCAweDAwLAorMHhDRCwgMHg4MCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg2MCwgMHgxMywgMHgwMCwgMHhDRCwgMHg4MSwgMHgwNCwgMHgwMiwKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4REQsIDB4NDAsIDB4NTQsIDB4MEYsIDB4RDEsIDB4MjgsIDB4NDQsIDB4RTAsCisweDEwLCAweDhELCAweDQwLCAweDM0LCAweDAwLCAweEQwLCAweDg4LCAweDQwLCAweDYzLCAweDAwLCAweEM1LCAweDAwLCAweDM0LAorMHgwOSwgMHg1MiwgMHgzMCwgMHg0MCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4QTgsIDB4MzUsIDB4MDAsIDB4REYsIDB4NDEsIDB4NkQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REYsCisweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDA5LCAweEM4LCAweEY3LCAweDA4LCAweEZGLCAweDAzLCAweDU0LCAweDgzLCAweEQyLAorMHgwRiwgMHg0OCwgMHgzRSwgMHgwMCwgMHhGRiwgMHgwOCwgMHhGNCwgMHgwQiwgMHhEMCwgMHgyRCwgMHhEMCwgMHgzNCwgMHgwMiwKKzB4OEIsIDB4MDEsIDB4N0MsIDB4MDAsIDB4RDAsIDB4MEMsIDB4QzAsIDB4QjUsIDB4MDYsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MEEsCisweDEwLCAweDIxLCAweEMwLCAweDU3LCAweDAxLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgzMywgMHgwMCwgMHhERiwgMHgxMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MjksIDB4QzQsIDB4NzcsIDB4MDQsIDB4REYsIDB4MDQsIDB4MUMsIDB4MEEsIDB4RjAsIDB4MEQsCisweEMwLCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDRELCAweEMwLCAweEE3LCAweDA4LCAweDlGLAorMHg2MCwgMHg3QywgMHg4OCwgMHhGMSwgMHgyRCwgMHg0MCwgMHhCNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4QTEsIDB4QzgsIDB4MzcsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsCisweDAwLCAweEYzLCAweDAwLCAweEZDLCAweDEyLCAweDMwLCAweDJGLCAweEMwLCAweDNGLCAweDIwLCAweEYzLCAweDQwLCAweEZDLAorMHgwMywgMHhGMCwgMHgxRiwgMHhDMCwgMHgyQywgMHgwMiwgMHhGRiwgMHg4MCwgMHhGQywgMHg4NywgMHgzMCwgMHgwRiwgMHhEMCwKKzB4M0MsIDB4MDAsIDB4RjUsIDB4MDAsIDB4Q0QsIDB4NDMsIDB4QjAsIDB4MDcsIDB4QzAsIDB4N0YsIDB4MDAsIDB4QkYsIDB4MDAsCisweENDLCAweDgwLCAweEYwLCAweDBGLCAweDgwLCAweDNDLCAweDAwLCAweEIzLCAweDA0LCAweEZDLCAweDQwLCAweEYwLCAweDBBLAorMHhDMSwgMHgwNCwgMHgyNiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgyMCwKKzB4RDEsIDB4MDAsIDB4NzQsIDB4MDYsIDB4OTQsIDB4MDUsIDB4QzAsIDB4MzUsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsCisweEQwLCAweDg0LCAweDQxLCAweDI1LCAweDAwLCAweERELCAweDIwLCAweDc0LCAweDAxLCAweDEwLCAweDBELCAweDQwLCAweDM0LAorMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHhCMCwgMHgyMSwgMHg0MCwgMHgxNywgMHgwMCwgMHg5RCwgMHgyMywgMHg0NCwKKzB4NEMsIDB4RDAsIDB4MEQsIDB4NTAsIDB4NjAsIDB4ODQsIDB4OTUsIDB4MDcsIDB4NzQsIDB4MEMsIDB4RDAsIDB4MzksIDB4NTAsCisweDA0LCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM2LCAweEMwLCAweEQxLAorMHgwMCwgMHg3NCwgMHgwMiwgMHg5MCwgMHgwRCwgMHg0MCwgMHgzMywgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwKKzB4MDksIDB4NDAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NjQsIDB4MUIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsCisweEQ1LCAweDAwLCAweDY0LCAweDAzLCAweDEwLCAweDAxLCAweDQwLCAweEI3LCAweDAxLCAweDlELCAweDExLCAweDQ0LCAweDA0LAorMHhEMCwgMHgwRCwgMHg0MSwgMHg0NSwgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwNiwgMHg1MCwgMHgxMSwgMHg0MCwgMHgwNCwKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsCisweDM0LCAweDAyLCAweDkwLCAweDA4LCAweDQwLCAweDMxLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDA4LAorMHg0MCwgMHgxMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxNCwgMHg0QywgMHg0MCwgMHgzMCwgMHgwNCwgMHhDNSwKKzB4MjAsIDB4MDQsIDB4MDMsIDB4RDQsIDB4MDAsIDB4NDQsIDB4MjMsIDB4ODAsIDB4OEQsIDB4MzAsIDB4MDUsIDB4NDAsIDB4RDAsCisweDBELCAweDQwLCAweDI1LCAweDAwLCAweDg1LCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDAwLCAweDQyLCAweDQwLCAweDgxLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhGMywgMHg0MCwgMHg3QywKKzB4MDMsIDB4MzAsIDB4MEQsIDB4QzQsIDB4M0YsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MkQsIDB4QzIsCisweEE0LCAweDAyLCAweEZELCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDBFLCAweEMwLCAweDNDLCAweDAxLCAweEY3LCAweDAwLAorMHhDQywgMHgwMywgMHgzMiwgMHgwNSwgMHhDMiwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgxMCwgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MjUsIDB4MDAsIDB4NTEsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDksIDB4QzAsIDB4MDQsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI1LCAweEE4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAxLAorMHg3OCwgMHgwNywgMHhDOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHg0NywgMHhDMSwgMHgwRiwKKzB4MDAsIDB4RUYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MkYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RkMsCisweDAzLCAweDMwLCAweDAzLCAweEMwLCAweDFGLCAweDAwLCAweDNGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDBBLCAweDQwLAorMHgyQSwgMHgwOCwgMHg3RiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgxNywgMHgyMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4M0YsIDB4MDgsIDB4QTMsIDB4MDAsIDB4RkMsIDB4MzMsIDB4MzAsCisweDlCLCAweEMwLCAweEVGLCAweDAwLCAweEZGLCAweDAzLCAweDlELCAweDI3LCAweEIwLCAweDFGLCAweEMwLCAweDdDLCAweDAyLAorMHhGQiwgMHgwOSwgMHhDRCwgMHgwNywgMHg3MCwgMHgxRiwgMHhDOCwgMHg3QSwgMHgwOCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywKKzB4MzEsIDB4OUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDksIDB4RkUsIDB4MjcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0EsCisweDQwLCAweEIzLCAweDAxLCAweEZDLCAweDAwLCAweDMwLCAweDI2LCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzQiwgMHgzOCwgMHhEMSwgMHg0MywgMHhGNCwgMHgxMywgMHgxMiwgMHg0QywKKzB4NDQsIDB4MjcsIDB4MTEsIDB4MUMsIDB4ODQsIDB4NDQsIDB4MTAsIDB4MTAsIDB4MTEsIDB4NTAsIDB4MDQsIDB4MDEsIDB4MTEsCisweDA0LCAweDQ0LCAweEQwLCAweDUwLCAweDExLCAweDQwLCAweDA3LCAweDA1LCAweDBELCAweDEwLCAweDM0LCAweDQwLCAweDEwLAorMHg0MSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHg0NCwgMHg1QywgMHgxMCwgMHgxMCwgMHgxMSwgMHg0MCwgMHg0NCwgMHgwMCwKKzB4OTEsIDB4MDEsIDB4NUMsIDB4MEMsIDB4MTQsIDB4NDUsIDB4NDAsIDB4MEYsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDExLCAweEEwLCAweDIzLCAweDA1LCAweDgxLCAweDIyLCAweDE0LCAweDMzLCAweDEwLCAweDBDLCAweDQ4LAorMHgyMSwgMHgwMSwgMHhDRCwgMHgwMCwgMHg0NCwgMHgxMywgMHg1NCwgMHgwRCwgMHg0MCwgMHgzMSwgMHgwMCwgMHhDMSwgMHg4MCwKKzB4MDQsIDB4MDMsIDB4NTYsIDB4MEMsIDB4NDQsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDQsIDB4MzQsIDB4MTMsIDB4OTAsIDB4NEMsCisweDQwLCAweDMzLCAweDA1LCAweENELCAweDIwLCAweDM0LCAweDEzLCAweDEwLCAweDBELCAweDQwLCAweDMwLCAweDAwLCAweDAxLAorMHgwMSwgMHgzNCwgMHgwQSwgMHhEMCwgMHg0MCwgMHg0MCwgMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDcsIDB4ODgsIDB4MzUsIDB4NDAsIDB4RDEsIDB4ODQsIDB4NzQsIDB4MDMsIDB4MTQsIDB4M0QsIDB4NDAsIDB4MjcsCisweDIwLCAweDBELCAweDAwLCAweDU0LCAweDAwLCAweDkwLCAweDAxLCAweDQyLCAweDA1LCAweDAwLCAweDAxLCAweDAwLCAweDQ0LAorMHgwMCwgMHg1NCwgMHgwMSwgMHg2MCwgMHgwNywgMHgwMCwgMHgxRCwgMHg4MCwgMHg3MCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MUQsIDB4MjAsIDB4MTQsIDB4MDAsIDB4MTgsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4NTEsIDB4MDEsCisweDc0LCAweDAwLCAweEQxLCAweDAxLCAweDQwLCAweDBGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhBMCwgMHgzNywgMHgwMCwgMHg5MywgMHgwMSwgMHg1QywgMHgwMywgMHgzMCwgMHgzRCwgMHhDMCwgMHg2NSwgMHgwQSwKKzB4REYsIDB4MDAsIDB4NEMsIDB4ODMsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MzUsIDB4NDAsIDB4REIsIDB4ODAsIDB4MDgsIDB4MDMsCisweDc0LCAweDBELCAweEM0LCAweDM2LCAweDEwLCAweERGLCAweDAwLCAweDc4LCAweDAzLCAweEEwLCAweDBELCAweEMwLCAweDM3LAorMHg4MCwgMHhERiwgMHgwMCwgMHg3NCwgMHgwMywgMHgzNCwgMHgwQywgMHhDMiwgMHgzNiwgMHgwMCwgMHg5MSwgMHgwMSwgMHgzQywKKzB4MTUsIDB4RjAsIDB4MTUsIDB4QzAsIDB4MDMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweDg4LCAweDNELCAweDAwLCAweEZGLCAweDIxLCAweEY0LCAweDAzLCAweEQwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweDNGLAorMHg0MCwgMHhFNCwgMHgwMCwgMHgzMCwgMHgwMywgMHhDMCwgMHgwRSwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHg0MCwgMHhGMCwKKzB4MDMsIDB4MDAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MzAsIDB4RkMsIDB4ODAsIDB4NzAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4QTAsCisweDNGLCAweDQwLCAweERDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDE0LCAweEZGLCAweDAwLCAweERDLCAweDI0LAorMHgzMCwgMHg0NywgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwKKzB4NjEsIDB4MTAsIDB4OUIsIDB4MDEsIDB4NkMsIDB4MDMsIDB4MzQsIDB4M0QsIDB4QzAsIDB4MjQsIDB4MDAsIDB4RDMsIDB4NTAsCisweDdDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDc3LCAweDAwLCAweEQzLCAweDA4LCAweDRDLCAweDA3LCAweEIwLCAweDRELAorMHhDMCwgMHgzNywgMHgwMCwgMHhENywgMHgwMSwgMHg0QywgMHg4MywgMHgzMCwgMHgxRCwgMHhDMSwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDEsIDB4N0MsIDB4OTcsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4OTMsIDB4MTAsIDB4N0MsIDB4MjAsIDB4MzAsCisweDI1LCAweEQwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweEI0LAorMHgwMiwgMHhEMSwgMHgyMCwgMHhENCwgMHgyQiwgMHgxMCwgMHgyRCwgMHg0MCwgMHg2NCwgMHgwMSwgMHgxQSwgMHgwMywgMHgzQywKKzB4MDAsIDB4MTQsIDB4NDAsIDB4NDIsIDB4ODcsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDQsIDB4MDAsIDB4MTAsIDB4NTEsIDB4QzAsCisweDA1LCAweDQwLCAweDE1LCAweDAxLCAweDQ0LCAweDA0LCAweDEwLCAweDExLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDIxLAorMHg3NCwgMHgwQywgMHhEMCwgMHgwMSwgMHg0NCwgMHhDMCwgMHgwNCwgMHg1OSwgMHgwMywgMHg3NCwgMHgyMCwgMHgwMCwgMHhCNSwKKzB4NDAsIDB4MEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MjAsIDB4MzAsIDB4MDAsCisweDg5LCAweDQwLCAweDQ0LCAweDAzLCAweDkwLCAweDJDLCAweDQxLCAweDYwLCAweDAwLCAweEM5LCAweDAyLCAweDM0LCAweDAzLAorMHgxMCwgMHgxQywgMHg0MCwgMHhCNywgMHgwNCwgMHhDMSwgMHgwMSwgMHgxNCwgMHgwMywgMHg5MCwgMHgyQywgMHg0MCwgMHgzMywKKzB4MDAsIDB4QzksIDB4MDIsIDB4NTQsIDB4MjcsIDB4OTEsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsCisweDBCLCAweEQwLCAweDBDLCAweDQwLCAweEYwLCAweDQwLCAweDg5LCAweDAzLCAweDE0LCAweDBDLCAweDEwLCAweDlDLCAweDQwLAorMHg0QywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMCwgMHg3OCwgMHgwMCwgMHhGMSwKKzB4MDEsIDB4MTQsIDB4MDcsIDB4OTAsIDB4MUUsIDB4NDAsIDB4NjgsIDB4MDAsIDB4MjksIDB4MTEsIDB4QzQsIDB4MDQsIDB4MTAsCisweDkyLCAweDQ4LCAweDRCLCAweDAwLCAweDIxLCAweDAzLCAweDk0LCAweDA0LCAweDEyLCAweDEyLCAweDQwLCAweDRELCAweDIwLAorMHgyOSwgMHgwOSwgMHg5NSwgMHgwQywgMHg1MCwgMHgxMiwgMHg0MCwgMHg0QiwgMHgyMCwgMHgyQywgMHg0MSwgMHhCMCwgMHgwNCwKKzB4RDAsIDB4MTMsIDB4NDAsIDB4NDgsIDB4MDAsIDB4QTksIDB4MjksIDB4QjQsIDB4MTcsIDB4MTAsIDB4MUYsIDB4NDAsIDB4M0MsCisweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDE4LCAweDIwLCAweDAwLCAweDhCLCAweDAwLAorMHgwQywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwgMHgyNCwgMHgwMCwgMHhDQiwgMHg4OCwgMHgzNCwgMHgyMywgMHgzMSwgMHgwQywKKzB4QzAsIDB4MzcsIDB4MDAsIDB4RDMsIDB4ODAsIDB4NUMsIDB4MjMsIDB4QjAsIDB4OEMsIDB4QzAsIDB4MzMsIDB4MDIsIDB4Q0YsCisweDAwLCAweDFDLCAweDIzLCAweDMwLCAweDBDLCAweEMwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDNDLCAweDAzLCAweEYyLAorMHgwQywgMHhDNCwgMHgzMCwgMHgwMCwgMHg0MywgMHgzMCwgMHgxQywgMHgwMywgMHgzMCwgMHg3QywgMHhDMCwgMHg0OCwgMHg0MCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsCisweDRCLCAweDUwLCAweDBGLCAweEMwLCAweDJGLCAweDAyLCAweDNGLCAweDI4LCAweEZFLCAweDAwLCAweEYyLCAweDAzLCAweDQ4LAorMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhFQywgMHg4MCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzNywgMHgwMCwKKzB4RUMsIDB4MDAsIDB4QjAsIDB4ODMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4NDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDIsCisweEMwLCAweDRGLCAweDQwLCAweDc3LCAweDAwLCAweDNDLCAweDEzLCAweEYyLCAweDhELCAweEMwLCAweDBCLCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgxMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MjQsIDB4MDAsIDB4REQsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MUMsIDB4QzAsIDB4MzAsCisweDQwLCAweEQzLCAweDAwLCAweDZGLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDRELAorMHgwMywgMHhGMCwgMHgxRCwgMHhEMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgyMSwgMHg0RCwgMHgwNywgMHgyNCwgMHgwRCwgMHhDMCwKKzB4MzMsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NEMsIDB4MDcsIDB4MzIsIDB4MTUsIDB4QzAsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDM5LCAweDIyLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLAorMHgwRiwgMHg1MCwgMHgyOCwgMHgwMCwgMHgyRCwgMHgwMCwgMHhCQywgMHgwMCwgMHhEMCwgMHgwMiwgMHg0OCwgMHgwOSwgMHgwMCwKKzB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDIsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4M0QsIDB4MDAsIDB4ODQsIDB4MDAsCisweEQwLCAweDAzLCAweDQwLCAweDA4LCAweDAwLCAweDNELCAweDAwLCAweEM0LCAweDAwLCAweDEwLCAweDAyLCAweDQ0LCAweDBCLAorMHgwMCwgMHhFMSwgMHgyMCwgMHhBQywgMHgwMywgMHhCMCwgMHgwNywgMHhDMCwgMHg0RSwgMHg2OCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NjksIDB4MTAsIDB4RUQsIDB4MDMsIDB4OTQsIDB4MTcsIDB4RDAsIDB4MUUsCisweDQwLCAweDY4LCAweDA0LCAweEVELCAweDQxLCAweEI0LCAweDA3LCAweDUwLCAweDFFLCAweDQ0LCAweDdDLCAweDIwLCAweEY5LAorMHg4MSwgMHg4NCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFNSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwKKzB4MUUsIDB4NDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsIDB4ODcsIDB4MTgsIDB4MUUsIDB4NDAsIDB4N0IsIDB4NDAsCisweDcxLCAweDAxLCAweDA0LCAweDA3LCAweDEwLCAweDE2LCAweDQwLCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMSwgMHgzNCwgMHgwMywgMHhEMCwgMHgyNCwgMHg0QywKKzB4MzAsIDB4MTAsIDB4MEQsIDB4MDAsIDB4MTIsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MTAsIDB4MDksIDB4QzAsCisweDA0LCAweDgwLCAweEQwLCAweDAwLCAweDQyLCAweDAzLCAweDA4LCAweDFELCAweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDAwLAorMHg0MCwgMHgwMSwgMHgwMCwgMHgwRCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHg1MSwKKzB4MDMsIDB4MjQsIDB4Q0YsIDB4MTIsIDB4MzQsIDB4NDAsIDB4NTgsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE3LCAweEEwLCAweDE1LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEQwLCAweDI3LCAweEMwLCAweDU0LAorMHgwMCwgMHg1RiwgMHgwMCwgMHg3NCwgMHgwMSwgMHg3MCwgMHgwNSwgMHhDNCwgMHgxNCwgMHgwMCwgMHg0QiwgMHgwMCwgMHg2QywKKzB4MDEsIDB4RjAsIDB4MDQsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NEMsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsCisweDE1LCAweDAwLCAweDVGLCAweDAwLCAweDQ0LCAweDAxLCAweDMwLCAweDA1LCAweEMwLCAweDEzLCAweDAwLCAweDcxLCAweDA3LAorMHhDQywgMHgxMSwgMHgxNCwgMHgxNywgMHg0MCwgMHg1QywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MjEsIDB4QzEsIDB4MDcsIDB4MDAsCisweDNELCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDM3LCAweDAyLCAweEZDLCAweDAwLAorMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRSwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4NDAsIDB4MUYsIDB4MDYsIDB4N0MsCisweDAwLCAweEYwLCAweEExLCAweEM5LCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgyMSwgMHgwMCwgMHg5MywgMHgwMCwgMHgzQywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgxMCwgMHg5RiwKKzB4MDEsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsIDB4RTcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NkMsIDB4MDYsIDB4RjAsCisweDk5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweDM0LCAweDU5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwNSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MCwgMHg5QiwgMHgwMCwgMHg2QywgMHgwMiwKKzB4RjAsIDB4NDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsCisweDI2LCAweDQwLCAweDkxLCAweDgwLCAweDc0LCAweDQyLCAweDEwLCAweEE5LCAweDQxLCAweDI0LCAweDAwLCAweDhELCAweDA5LAorMHg1RSwgMHgyQSwgMHhEMCwgMHgxOSwgMHg0MCwgMHg2MywgMHg0MCwgMHg5MSwgMHgwMiwgMHg0NSwgMHgxQSwgMHhEMCwgMHg2OSwKKzB4QzIsIDB4MjYsIDB4MDgsIDB4OUQsIDB4MDIsIDB4NDQsIDB4NDIsIDB4MTAsIDB4MzksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsCisweDAyLCAweDc0LCAweDBBLCAweEQwLCAweDA5LCAweDQ4LCAweDY3LCAweDA0LCAweDkxLCAweDgyLCAweDQ0LCAweDg2LCAweEQwLAorMHg2OSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHg2NCwKKzB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4QzQsCisweDQyLCAweEQwLCAweDRCLCAweDQwLCAweDJGLCAweDAwLCAweEI5LCAweDAzLCAweEM0LCAweDEyLCAweEQwLCAweDBCLCAweDQwLAorMHgyQywgMHgwMCwgMHhCRCwgMHgwMCwgMHhDNCwgMHgwNiwgMHg5MiwgMHgwQiwgMHg0NCwgMHgyRiwgMHgwMCwgMHhCRCwgMHhDMCwKKzB4RjQsIDB4MDIsIDB4RDAsIDB4MUIsIDB4NDAsIDB4MkYsIDB4NDEsIDB4OTEsIDB4MDgsIDB4NjQsIDB4MjIsIDB4RDAsIDB4MDksCisweDQwLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDJBLCAweDIwLCAweDAxLAorMHg4MSwgMHgwNCwgMHgzNCwgMHgxMiwgMHgxOCwgMHgwOCwgMHg1MCwgMHgyMCwgMHgwMCwgMHhCQywgMHgwMCwgMHg4NCwgMHgwMiwKKzB4RDAsIDB4MEEsIDB4NDAsIDB4NkYsIDB4MDAsIDB4QjksIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsIDB4MEEsIDB4NDAsIDB4MkEsCisweDAwLCAweEFELCAweDAxLCAweDg0LCAweDAyLCAweDkwLCAweDFBLCAweDQwLCAweDJCLCAweDAwLCAweEFELCAweDQxLCAweEI0LAorMHgwNiwgMHhEMCwgMHgwQSwgMHg0MCwgMHgyQiwgMHgwMCwgMHg5MSwgMHgwMCwgMHgyNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwKKzB4NTMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTAsIDB4ODYsIDB4MDIsIDB4MTMsCisweDAwLCAweDdDLCAweDI4LCAweDM0LCAweEExLCAweEMwLCAweDg0LCAweDAyLCAweDFGLCAweDBBLCAweDQ0LCAweDI4LCAweEYwLAorMHgwMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgxQiwgMHgwQSwgMHg0QywgMHgyOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NSwgMHgwMiwKKzB4MUYsIDB4MEEsIDB4NEMsIDB4MjgsIDB4QjMsIDB4QTEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MUYsIDB4MEEsIDB4N0MsIDB4MjgsCisweEYwLCAweDAxLCAweEMwLCAweDBGLCAweDEwLCAweDUzLCAweDAwLCAweDZDLCAweDUxLCAweEZBLCAweEExLCAweEMwLCAweDc3LAorMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHg4OCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgwOCwKKzB4N0MsIDB4MjIsIDB4NzgsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MjAsIDB4OUUsIDB4MDAsIDB4NUQsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweDg3LCAweDAwLCAweDVDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3RCwgMHgwMiwgMHg3MSwgMHgwOSwgMHhDMCwgMHgyNywgMHgwOCwgMHg5RiwgMHgyMCwgMHg3QywgMHg4MiwgMHhGMCwKKzB4MDksIDB4QzIsIDB4MjcsIDB4MDAsIDB4QTcsIDB4MDAsIDB4REMsIDB4MDIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4NjcsIDB4MjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDJGLCAweDAxLCAweEIzLCAweDE0LCAweENDLAorMHhCMiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgyRCwgMHgwMCwgMHhCRiwgMHgwOCwgMHhDQywgMHgwMiwgMHgxMCwgMHgwQiwgMHhDMCwKKzB4MkYsIDB4MDIsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MjQsIDB4MDAsIDB4QjMsIDB4MDAsCisweEZDLCAweDIyLCAweEYwLCAweDBCLCAweEMwLCAweDI0LCAweDAwLCAweEIzLCAweDA4LCAweERDLCAweDAyLCAweDMwLCAweDBCLAorMHhDMCwgMHgyRiwgMHgwMCwgMHhCMywgMHgwMCwgMHhGQywgMHg4MiwgMHgzMCwgMHgwQiwgMHhDMCwgMHg2NywgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MEQsIDB4MTEsIDB4MDAsIDB4NDUsIDB4MzAsCisweDEwLCAweDAxLCAweDQzLCAweDA0LCAweDA0LCAweDFELCAweDAwLCAweDA0LCAweDUwLCAweDEwLCAweDAxLCAweDQwLCAweDAzLAorMHgwMSwgMHgxRCwgMHgxMCwgMHg0QywgMHg0MCwgMHgxNCwgMHgwMSwgMHg1MCwgMHgwNCwgMHgwNSwgMHgwMSwgMHgwNCwgMHg3NCwKKzB4MTAsIDB4RDAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MjQsIDB4MDEsIDB4NDAsIDB4NUMsIDB4NTAsIDB4MTAsIDB4MDEsIDB4NDAsCisweDA3LCAweDAwLCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDgxLCAweDQwLCAweDczLCAweDYwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHgwMywgMHg5MSwgMHgyMCwgMHgwNCwgMHgxMiwgMHg5MCwKKzB4NDksIDB4NDAsIDB4MjEsIDB4ODAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDEsCisweDhELCAweDA0LCAweDY1LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDQxLCAweDgxLCAweDE0LCAweDM0LCAweDEyLAorMHhEOCwgMHg0OCwgMHg1MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgxNCwgMHgxMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4ODksIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDgsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDQxLCAweDkxLCAweDAwLCAweDQ0LCAweDAzLCAweDkwLCAweDI5LAorMHg0MCwgMHgyNCwgMHgwMiwgMHg4RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg4RCwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDI0LCAweDAwLCAweEQxLCAweDAwLCAweDU0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDM3LCAweDIwLAorMHg5OSwgMHgwMCwgMHg3NCwgMHgwQSwgMHgxMiwgMHg4OSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MjUsIDB4MDAsIDB4ODMsIDB4ODksIDB4MEMsIDB4MDIsIDB4QjQsIDB4MTgsIDB4QzAsCisweDY1LCAweDIwLCAweDlGLCAweDAwLCAweDRELCAweDAyLCAweDM0LCAweDA5LCAweEMwLCAweDI3LCAweDgwLCAweDlGLCAweDAwLAorMHg2QywgMHgwMiwgMHgzMCwgMHgwOCwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjQsIDB4NDAsIDB4OTMsIDB4MDAsIDB4NUMsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTksCisweDEyLCAweDdDLCAweDAyLCAweDM0LCAweDE5LCAweEMwLCAweDE3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNiwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHg0MSwgMHg3QywgMHgwMiwgMHg3NCwgMHgyOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4NTAsIDB4N0MsIDB4NDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MCwgMHg5NywgMHgxNSwKKzB4N0UsIDB4NTIsIDB4RjAsIDB4MDksIDB4RTAsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDA4LCAweDQxLCAweDQwLCAweDEzLCAweDAwLCAweDdDLCAweDEwLCAweEYwLCAweDQxLCAweEMwLCAweDA3LCAweDAwLAorMHgxRiwgMHgwOCwgMHg0QywgMHgwMCwgMHgzNCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwKKzB4RjAsIDB4MTEsIDB4RjAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MjAsIDB4NEMsIDB4MDQsIDB4RDAsIDB4MDEsIDB4QzAsIDB4MDYsCisweDQwLCAweDEzLCAweDQwLCAweDRDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDAyLCAweDBDLAorMHgwOCwgMHgxNCwgMHgwMSwgMHhDNCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4QTAsIDB4NUMsIDB4MDAsIDB4NTEsIDB4MDAsIDB4RjQsIDB4MDksIDB4RDAsIDB4MjcsIDB4QzAsIDB4MTUsIDB4MDAsIDB4N0QsCisweDAwLCAweEM2LCAweDA1LCAweDUwLCAweDA1LCAweDQwLCAweDVGLCAweDA0LCAweDczLCAweDAyLCAweEI0LCAweDI5LCAweEQxLAorMHgwNywgMHhDMiwgMHgxMiwgMHgwMCwgMHg3RCwgMHg0NSwgMHhDNCwgMHgxNSwgMHhEMCwgMHgwNywgMHhDMCwgMHgxNCwgMHgwMCwKKzB4NzEsIDB4MDIsIDB4Q0MsIDB4MDEsIDB4RDAsIDB4MTUsIDB4NDAsIDB4OUIsIDB4MDgsIDB4NzEsIDB4MDIsIDB4RDQsIDB4MEQsCisweDUwLCAweEY3LCAweDQwLCAweDUwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLAorMHgzMiwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMSwgMHgyMCwgMHhDRCwgMHgwMCwKKzB4NjQsIDB4MEYsIDB4NTAsIDB4MDgsIDB4NDQsIDB4NzMsIDB4MDAsIDB4QzEsIDB4MDQsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MDQsCisweDQwLCAweDMyLCAweDEwLCAweENELCAweDAxLCAweDA1LCAweDAzLCAweDUwLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweEMxLAorMHgwNiwgMHg2NSwgMHgwNywgMHhEMCwgMHg5OCwgMHg0MCwgMHg2MywgMHgwMywgMHg0MSwgMHgwOCwgMHgwNCwgMHgyMywgMHgxMCwKKzB4MEMsIDB4NDAsIDB4NTIsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDgsCisweDA0LCAweEUxLCAweDAwLCAweEI0LCAweDQzLCAweDkwLCAweDBFLCAweDQwLCAweDM5LCAweDAwLCAweDdELCAweDAwLCAweEE1LAorMHgwQiwgMHg1MCwgMHgwRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MSwKKzB4MzgsIDB4MDEsIDB4RUQsIDB4MDEsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MEEsIDB4RTEsIDB4ODMsCisweEE0LCAweDQzLCAweEQwLCAweDBFLCAweDQwLCAweDFGLCAweDAwLCAweDcxLCAweDAxLCAweDE0LCAweDAzLCAweDEwLCAweDEyLAorMHg1OCwgMHgwNiwgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg2MCwgMHgwMCwKKzB4RTMsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RDAsIDB4MUUsIDB4QzAsIDB4NzksIDB4MDAsIDB4RUYsIDB4MDEsIDB4QTQsIDB4MDYsCisweDcwLCAweDFFLCAweEMwLCAweDZCLCAweDQwLCAweEUzLCAweDAxLCAweEIwLCAweDA1LCAweEYwLCAweDFFLCAweDQwLCAweDdBLAorMHgwMCwgMHhFRiwgMHgwMSwgMHg4QywgMHgwNywgMHg3MCwgMHgxRSwgMHhDMCwgMHg3OCwgMHgwNSwgMHhFMywgMHgwMSwgMHhBQywKKzB4MDcsIDB4RjEsIDB4MUUsIDB4QzAsIDB4NkIsIDB4MDAsIDB4NjMsIDB4ODEsIDB4ODQsIDB4MDcsIDB4MzAsIDB4MTgsIDB4QzAsCisweDQ2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDA1LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMSwgMHhDMCwgMHgzNSwgMHgxMCwgMHgwRiwgMHgwMCwgMHg1QywgMHgwMiwgMHhCMCwKKzB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4ODAsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzcsIDB4MDQsCisweDVGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEQwLCAweEI1LCAweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDAxLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzMywgMHgyMCwgMHg0RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MSwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4NEQsIDB4MDAsIDB4RTcsIDB4MjEsCisweENDLCAweDA3LCAweEY4LCAweDg3LCAweEMwLCAweDdDLCAweDAyLCAweEJGLCAweDAxLCAweENDLCAweDA3LCAweDMwLCAweDFGLAorMHhDMCwgMHg3QywgMHgwMCwgMHg3MywgMHgwMSwgMHhFQywgMHgwNSwgMHgzMiwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwNCwgMHhGMywKKzB4MDEsIDB4RkMsIDB4MDQsIDB4QjAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MTAsIDB4QjMsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsCisweDFFLCAweEMwLCAweDNDLCAweDAwLCAweEYzLCAweDA1LCAweENDLCAweDA2LCAweEYwLCAweDEzLCAweDg0LCAweDBCLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHg4RCwgMHgxMCwgMHhFMSwgMHgwOCwgMHg4NCwKKzB4MjEsIDB4NzgsIDB4MEUsIDB4NDQsIDB4MzgsIDB4MDAsIDB4N0QsIDB4MDYsIDB4QzUsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsCisweDI4LCAweDAwLCAweDcxLCAweDQwLCAweDg0LCAweEUwLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEExLCAweDEwLAorMHhCNCwgMHgwMSwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMiwgMHhCQiwgMHgxOCwgMHg4QywgMHgwQSwgMHhEMCwgMHg4RSwKKzB4NDAsIDB4MTksIDB4MDIsIDB4QTEsIDB4MDYsIDB4QUMsIDB4MDMsIDB4RDAsIDB4MjAsIDB4NDAsIDB4NTcsIDB4NjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweEU1LCAweDAwLCAweDg1LCAweDAxLAorMHg1MCwgMHg4NywgMHg0MCwgMHgzOCwgMHg4QywgMHhBRCwgMHgwMCwgMHg4NiwgMHgwMSwgMHg5MCwgMHgwRiwgMHg0MCwgMHgzQSwKKzB4NDAsIDB4RTEsIDB4MDAsIDB4QzQsIDB4MDEsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTEsIDB4MDAsIDB4RjQsCisweDBBLCAweDEwLCAweDBFLCAweDQwLCAweDNGLCAweDAwLCAweDYxLCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLAorMHgyOSwgMHg0MiwgMHg2MSwgMHgwQywgMHg5NCwgMHg0MywgMHhEMCwgMHgwMiwgMHg0MCwgMHgyMywgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MDEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4NTAsCisweDMxLCAweDQwLCAweDcwLCAweDAwLCAweDFELCAweDQxLCAweDAyLCAweDQ1LCAweDkwLCAweDNDLCAweDUwLCAweDgyLCAweDA0LAorMHgwMSwgMHgxMCwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyQywgMHg0MiwgMHg3NywgMHgwMSwgMHgwMSwgMHgwNSwgMHgzMCwgMHgwNCwKKzB4MTAsIDB4RDAsIDB4NDAsIDB4QjMsIDB4MDQsIDB4MDksIDB4MDUsIDB4MDYsIDB4MzQsIDB4RDAsIDB4MUMsIDB4NDAsIDB4OTEsCisweDAwLCAweDgxLCAweDEzLCAweDM0LCAweDBFLCAweEQwLCAweDAwLCAweDQwLCAweDFCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4MCwgMHgwNSwgMHgwMCwgMHhENywgMHgwMCwgMHg0QywgMHgwMywgMHg3MCwgMHhFOSwKKzB4QzAsIDB4NzQsIDB4MDAsIDB4REYsIDB4MDUsIDB4NEMsIDB4MDksIDB4QjAsIDB4MEQsIDB4QzAsIDB4MTYsIDB4MDAsIDB4OTMsCisweDAxLCAweDRDLCAweDA3LCAweDM0LCAweDdDLCAweDQwLCAweEJGLCAweDAwLCAweDEzLCAweDAzLCAweDNDLCAweDAzLCAweDEwLAorMHgyMSwgMHhDMCwgMHgzQiwgMHgwMCwgMHg1MywgMHgwMywgMHg0QywgMHgwOCwgMHhGMCwgMHgzRCwgMHhDMCwgMHhCNSwgMHgwMiwKKzB4NDMsIDB4MTEsIDB4NTAsIDB4MEQsIDB4RjAsIDB4MDksIDB4NDAsIDB4NzcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDQ3LCAweDAwLCAweDlGLCAweDAxLCAweDdDLCAweDgzLCAweDcwLCAweDA5LCAweEQyLAorMHgyNywgMHgwMCwgMHhERiwgMHgwNCwgMHg3QywgMHgyMSwgMHg3MCwgMHg4RCwgMHhDMCwgMHhCNSwgMHgwMiwgMHhERiwgMHgwOCwKKzB4N0MsIDB4OEIsIDB4RjIsIDB4MEQsIDB4QzAsIDB4MzcsIDB4NDIsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjMsIDB4NzAsIDB4MjksCisweEMwLCAweDc3LCAweDAwLCAweDU3LCAweDAyLCAweDVDLCAweDAyLCAweEYwLCAweENELCAweEMwLCAweEY3LCAweDQwLCAweDVGLAorMHg0MCwgMHgyQywgMHgwQiwgMHhGMiwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MDAsIDB4MEIsIDB4NDAsIDB4RTMsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4OEYsIDB4QzAsIDB4M0MsCisweDAwLCAweEZCLCAweDAwLCAweENDLCAweDAyLCAweDMwLCAweDBGLCAweEMxLCAweDBGLCAweDAwLCAweEJGLCAweDA5LCAweEZDLAorMHg0MCwgMHhGMCwgMHgwRiwgMHhDMSwgMHgzQywgMHgwMCwgMHgzMywgMHgwNSwgMHhGQywgMHgwMywgMHhCMCwgMHg0NywgMHhDMCwKKzB4M0QsIDB4MDAsIDB4NzMsIDB4MDAsIDB4Q0MsIDB4MjAsIDB4MzAsIDB4OUYsIDB4QzAsIDB4RkYsIDB4MDAsIDB4QjMsIDB4MDAsCisweENDLCAweDQzLCAweDMyLCAweDBCLCAweEM0LCAweDE3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg4MSwgMHgyMCwgMHhDNiwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwRiwgMHhGMCwgMHgxMSwgMHg2MCwgMHg2MSwgMHgwMiwKKzB4OTEsIDB4MDIsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4ODcsIDB4MDQsIDB4MUQsIDB4MDAsIDB4NUMsIDB4MUUsCisweEQxLCAweDFELCAweDQwLCAweDM0LCAweDA4LCAweDExLCAweDEyLCAweDc0LCAweDAwLCAweDEwLCAweDcxLCAweDQwLCAweDM0LAorMHgwMCwgMHgxMSwgMHgwMiwgMHg0QywgMHgwQywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzMywgMHgwMCwgMHgxMSwgMHgwMSwgMHg0NCwKKzB4MkYsIDB4MTUsIDB4MTksIDB4NDAsIDB4MzcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweEEwLCAweDQ2LCAweDAwLCAweEQxLCAweDA0LCAweDY0LCAweDA0LCAweEQwLCAweDAxLCAweDQwLCAweDM3LCAweDIwLCAweDE5LAorMHgwMCwgMHgwNCwgMHgxMCwgMHgxMCwgMHgxRCwgMHg0OCwgMHgxNywgMHgxMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgwNSwgMHg1MCwKKzB4MUQsIDB4NDQsIDB4MzQsIDB4NDAsIDB4NTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MzYsIDB4MDAsCisweDgxLCAweDAwLCAweDA0LCAweDAxLCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweEQ5LCAweDAxLCAweDY0LCAweEMzLAorMHgxMCwgMHgxOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4MDAsIDB4MTgsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4RDgsIDB4MDgsIDB4NDAsIDB4MjYsIDB4ODAsIDB4NDEsIDB4MDAsCisweDA1LCAweDA0LCAweDE4LCAweDBDLCAweDQwLCAweDIzLCAweDAwLCAweDRELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDFELAorMHg0MCwgMHgzMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHg3NCwgMHgwMSwgMHgxOCwgMHgwOCwgMHg1MCwgMHgzNiwgMHgwMCwgMHg4MSwKKzB4MDAsIDB4MDQsIDB4MDIsIDB4MTQsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MDAsIDB4ODksIDB4MDAsIDB4MDQsIDB4MDMsIDB4MTAsCisweDAwLCAweDQ0LCAweDQzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDA2LAorMHgwMCwgMHhEMywgMHgwMCwgMHg2QywgMHgwMCwgMHhGMCwgMHgwNSwgMHg1MCwgMHgzNywgMHgwMCwgMHgxQiwgMHgwMCwgMHg0QywKKzB4MDAsIDB4MjAsIDB4MEQsIDB4QzAsIDB4MTMsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MEQsIDB4NTAsCisweDM4LCAweDAwLCAweDUzLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDA1LCAweEMwLCAweDNGLCAweDAwLCAweDUzLCAweDAwLAorMHg0QywgMHgwMSwgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgxMCwgMHg5QiwgMHgyMCwgMHg2QywgMHg4MSwgMHgzMCwgMHhBOSwKKzB4QzAsIDB4MDcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MEYsIDB4MDAsCisweEJGLCAweDAwLCAweEZDLCAweDAwLCAweDcwLCAweDAyLCAweEMwLCAweDJELCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLAorMHhGMCwgMHgwRSwgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg0MCwgMHg5QywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4QkMsIDB4MDAsIDB4NzgsIDB4MDMsIDB4QzAsIDB4MzksIDB4MDAsIDB4M0UsIDB4MDAsIDB4REMsCisweDgwLCAweEYwLCAweDBGLCAweEMwLCAweDNCLCAweDAwLCAweEE3LCAweDAwLCAweEZFLCAweDAzLCAweEYwLCAweDRCLCAweEUwLAorMHgxNywgMHgyMiwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHhERiwgMHgwMCwgMHhCMywKKzB4MDgsIDB4RkMsIDB4MDYsIDB4NzAsIDB4OUYsIDB4QzgsIDB4N0UsIDB4MTIsIDB4RjMsIDB4MDksIDB4RUMsIDB4MjcsIDB4MTEsCisweDFGLCAweEMwLCAweDdDLCAweDAwLCAweEUzLCAweDA5LCAweERDLCAweDI3LCAweEYwLCAweDFGLCAweEMwLCAweDdDLCAweDQwLAorMHhGMywgMHgwOSwgMHhCQywgMHgwRiwgMHhGOCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwOSwgMHg5QywgMHgwNywKKzB4RjAsIDB4MUYsIDB4QzAsIDB4NUMsIDB4MDAsIDB4MzMsIDB4MDEsIDB4Q0MsIDB4MDYsIDB4RjAsIDB4MUIsIDB4QzgsIDB4MEQsCisweDA4LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDE4LCAweDI3LCAweDAxLCAweDkxLCAweDIwLAorMHg0NCwgMHg1MywgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNiwgMHgwMCwgMHgxNSwgMHgwMCwgMHg1MCwgMHgwMCwgMHg1MCwgMHgxMSwKKzB4NDAsIDB4NDQsIDB4MDgsIDB4MTUsIDB4MDAsIDB4MDQsIDB4MTAsIDB4RDIsIDB4MDEsIDB4NDEsIDB4NDUsIDB4MDAsIDB4MTEsCisweDgwLCAweDc0LCAweDAwLCAweEQwLCAweDExLCAweDQyLCAweDAzLCAweDI1LCAweDExLCAweDA0LCAweDY0LCAweDA0LCAweEQxLAorMHgxRiwgMHg0OCwgMHg3NCwgMHg0MCwgMHgxNSwgMHg4MSwgMHg1NCwgMHgwMiwgMHhEMiwgMHgwOSwgMHg0MiwgMHgwRiwgMHg2MCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzcsIDB4MDAsIDB4QzEsIDB4NDQsIDB4MTQsCisweDEzLCAweDUwLCAweDRELCAweDQ4LCAweDM3LCAweDExLCAweEQxLCAweDg0LCAweDQ2LCAweDEzLCAweDEwLCAweDBDLCAweDYyLAorMHgzMCwgMHgyMCwgMHhDNSwgMHgwNCwgMHgxNCwgMHgwMywgMHhEMCwgMHg0RCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDOSwgMHg0NCwKKzB4MTQsIDB4MTMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzYsIDB4MTAsIDB4RDUsIDB4MDAsIDB4MTQsIDB4MDMsIDB4NTgsIDB4MEMsCisweDQwLCAweDIxLCAweDAwLCAweDE1LCAweDIwLCAweDE0LCAweDAwLCAweEQ4LCAweDAwLCAweDQwLCAweDRGLCAweDgwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgyNSwgMHgxMCwgMHhEMSwgMHgyMSwgMHg2NCwgMHgwNywKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MTUsIDB4MDAsIDB4NTQsIDB4MDAsIDB4NTAsIDB4MDEsIDB4NzAsIDB4MDQsCisweDAwLCAweDE1LCAweDAwLCAweDU0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA1LCAweDAwLCAweDE5LCAweDAwLCAweDc0LAorMHgwMCwgMHhEMCwgMHgwMSwgMHg0MiwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHhEMCwgMHgwRCwgMHgwMCwKKzB4MjUsIDB4MDAsIDB4MTUsIDB4MDEsIDB4NTQsIDB4NDQsIDB4RDAsIDB4MTEsIDB4NDEsIDB4MEYsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDEzLCAweDAzLCAweEQzLCAweDMxLCAweDdDLCAweDE3LCAweDcwLAorMHgwQywgMHhDMCwgMHgzNywgMHgwMCwgMHhEMywgMHgwMCwgMHgwQywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgzMCwKKzB4RDMsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4MDIsIDB4MzQsIDB4MDAsIDB4REIsIDB4MDAsIDB4N0MsIDB4MDMsCisweEQwLCAweDBELCAweDQwLCAweDM3LCAweDIwLCAweEM3LCAweDQwLCAweDVDLCAweDAzLCAweEYwLCAweDBELCAweEQwLCAweDE1LAorMHgwMCwgMHgwNiwgMHgwMSwgMHg1QywgMHgwRSwgMHhGMCwgMHgzOSwgMHhDMCwgMHgwOSwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MkQsIDB4NDAsIDB4REYsIDB4MDAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MDMsCisweEMwLCAweDBDLCAweDAwLCAweDNGLCAweDgwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDQwLCAweDNCLAorMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwMywgMHgwOCwgMHgwRiwgMHgwMCwgMHgzNywgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4RDAsIDB4MEYsIDB4QzAsIDB4M0UsIDB4ODEsCisweEJCLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHhCNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg0RCwgMHgwMywgMHg3MCwgMHg4RCwgMHhDMCwKKzB4MzcsIDB4MDEsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4OEQsIDB4QzAsIDB4MzcsIDB4MDEsIDB4RDcsIDB4MDAsCisweDRDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAxLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDBELAorMHhDMiwgMHgzNCwgMHgwMCwgMHhENywgMHgwMCwgMHg2QywgMHgxMywgMHhCMCwgMHgwQywgMHhDMCwgMHgyNCwgMHgwMSwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MjEsIDB4NDgsIDB4MkIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEzLCAweEEwLCAweDI0LCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDExLCAweDQwLCAweDAwLAorMHgwNCwgMHgwQiwgMHgwMCwgMHg1QywgMHgwMCwgMHhCMCwgMHgwMCwgMHg0MCwgMHg4MywgMHgwMCwgMHgxQiwgMHgwMCwgMHg2RSwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4QzMsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NUMsIDB4MDAsIDB4MTAsIDB4MDEsIDB4RTgsCisweDAzLCAweDAwLCAweDExLCAweDgwLCAweDQ0LCAweDQwLCAweDEwLCAweDBELCAweEMwLCAweDIwLCAweDAxLCAweDlELCAweDAwLAorMHg1QywgMHgwMCwgMHhEMCwgMHgxMSwgMHg0MSwgMHg0RiwgMHgwOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4MjAsIDB4MjIsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDAsIDB4QjEsIDB4MDAsCisweEM1LCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDFDLCAweDQwLCAweDMzLCAweDAwLCAweEQxLCAweDAwLCAweDA0LCAweDAzLAorMHgxMCwgMHgwQywgMHg0OCwgMHg3MywgMHgwMCwgMHhDOSwgMHgwMCwgMHgzNCwgMHg4MywgMHg5MCwgMHgwQywgMHg0MCwgMHgzMCwKKzB4MDAsIDB4QzUsIDB4MDAsIDB4MjQsIDB4MDcsIDB4ODAsIDB4MEMsIDB4NDAsIDB4RTMsIDB4MDAsIDB4NEQsIDB4MDUsIDB4MzYsCisweDEyLCAweEQwLCAweDQ4LCAweDQwLCAweDRGLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHgwOCwgMHg2QSwgMHgwMCwgMHhFRCwgMHgwOSwgMHg4NiwgMHgwNywgMHgxMCwgMHgxMywgMHg2MCwgMHg0QywgMHgwMCwgMHgyRCwKKzB4MDEsIDB4RDQsIDB4MDQsIDB4OTAsIDB4MTIsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MzgsIDB4MDEsIDB4QTQsIDB4MDQsIDB4MUMsCisweDEyLCAweDQwLCAweDRCLCAweDA0LCAweDJELCAweDAxLCAweEQ0LCAweDA0LCAweDAwLCAweDEzLCAweDQwLCAweDQ5LCAweDAwLAorMHgyMSwgMHgwMSwgMHhDNCwgMHgwNCwgMHg1MCwgMHgxQywgMHg0MCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgxMSwgMHg5NCwgMHgwNywKKzB4RDAsIDB4OUEsIDB4NDAsIDB4MzcsIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsCisweDMyLCAweDAyLCAweDBELCAweDA4LCAweDRDLCAweDAzLCAweDUwLCAweDBDLCAweDQwLCAweDMxLCAweDEyLCAweEQ3LCAweDAwLAorMHgxQywgMHgwMywgMHgzMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDNywgMHgwMCwgMHgwNCwgMHgwMywgMHgzMCwgMHgwQywKKzB4QzAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDgsIDB4MzQsIDB4MTMsIDB4QjAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MDIsIDB4RDcsCisweDAwLCAweDJDLCAweDAzLCAweEIwLCAweDBDLCAweEQwLCAweDIzLCAweDAyLCAweENGLCAweDIwLCAweDNDLCAweDQyLCAweEYwLAorMHg4QywgMHhDMCwgMHg0QiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgyRCwKKzB4MDAsIDB4N0YsIDB4MDgsIDB4RjgsIDB4MDMsIDB4RTAsIDB4MDIsIDB4ODAsIDB4MDksIDB4MDAsIDB4M0IsIDB4MDAsIDB4QTgsCisweDIwLCAweEYyLCAweDgxLCAweEMwLCAweDBCLCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAzLCAweEM4LAorMHgwNywgMHgwMCwgMHgzRiwgMHgyOCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg0MCwKKzB4NTQsIDB4MjQsIDB4MjAsIDB4OUQsIDB4QzAsIDB4MkMsIDB4MDgsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4OEYsCisweEMyLCAweDBCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDI3LCAweDAwLAorMHhERiwgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgxRCwgMHhDMCwgMHgzNSwgMHgwMCwgMHhERSwgMHgwMCwgMHg3QywgMHgwNywKKzB4MzAsIDB4MUQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4M0MsIDB4MDMsIDB4MzAsIDB4MUQsIDB4QzAsIDB4MzQsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDNDLAorMHgwMywgMHhCMCwgMHgwRCwgMHhDNCwgMHgyNCwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHg4MywgMHgzMCwgMHgwRCwgMHhDMiwKKzB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MjksIDB4MDAsIDB4RkQsCisweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDAzLCAweDQwLCAweDA4LCAweDAwLCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweDUwLAorMHgwMiwgMHgwMCwgMHgwOCwgMHg4OCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMCwgMHg1MCwgMHgwMiwgMHg0MCwgMHgwOSwgMHgwMCwKKzB4MkYsIDB4MDAsIDB4QTQsIDB4MDAsIDB4RDEsIDB4MDIsIDB4NDgsIDB4MEIsIDB4MDAsIDB4MkQsIDB4MjAsIDB4QjYsIDB4MDAsCisweDE4LCAweDRFLCAweDQwLCAweDM4LCAweDIwLCAweEVELCAweDAwLCAweEY0LCAweDAxLCAweDEwLCAweDA3LCAweDQwLCAweDRDLAorMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHg2RCwgMHgwMCwKKzB4ODQsIDB4NDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4ODEsIDB4RjQsIDB4MDcsIDB4MTgsIDB4MUYsCisweDQ4LCAweDc4LCAweDgwLCAweEVELCAweDAxLCAweEY2LCAweDA3LCAweDEzLCAweDFGLCAweDQ0LCAweDdCLCAweDgwLCAweEVELAorMHgwMSwgMHhCNCwgMHg4NywgMHg1OCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhGNCwgMHgwNywgMHhEOCwKKzB4REUsIDB4NDAsIDB4NkEsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4MTAsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDIwLCAweDIzLCAweDAwLCAweDRDLCAweDAwLCAweDA0LAorMHgwNSwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHg1MCwgMHgwMCwgMHg0MCwKKzB4MDAsIDB4QTAsIDB4MEQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MTAsIDB4MDUsIDB4MDAsCisweDM0LCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweDBELCAweDIwLCAweDM0LCAweDAwLCAweDUxLCAweDBDLAorMHg1MCwgMHgyMiwgMHgwMCwgMHg4RCwgMHgwRiwgMHg3NCwgMHgwRiwgMHgxQSwgMHg2RCwgMHg0MCwgMHg1OCwgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4MUYsIDB4MDAsIDB4N0YsIDB4MTAsIDB4Q0MsIDB4MEQsCisweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweDMwLCAweDA1LCAweEQwLCAweDE0LAorMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHgzMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RCwgMHgwMCwgMHg3QywKKzB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4M0MsIDB4MDEsIDB4RjAsIDB4MDQsIDB4QzAsCisweDFBLCAweDAwLCAweDdGLCAweDAwLCAweEZDLCAweDBELCAweDM0LCAweDA3LCAweEQwLCAweDVDLCAweDIwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgyMCwgMHg3QywgMHg0MCwgMHhGMiwKKzB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MjAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4OEYsIDB4MDAsCisweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBELCAweDAwLCAweDNELCAweDAwLCAweEU0LCAweDAwLAorMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgyMCwgMHhGQywgMHgwOCwgMHg5MCwgMHgwMSwgMHhDMCwgMHgwNSwKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MjgsIDB4RjAsIDB4ODEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDY1LCAweDAwLCAweDlGLCAweDQwLCAweDdDLCAweDAyLCAweEYwLCAweDE5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMiwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4RTcsIDB4ODAsIDB4OUYsIDB4MDAsIDB4NEQsIDB4MDIsIDB4MzQsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlCLCAweDAwLCAweDdDLCAweDA2LCAweDcyLCAweDA5LCAweEMwLCAweDI0LCAweDAwLAorMHg5MywgMHgwNSwgMHg3QywgMHg0MiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MjgsIDB4NjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDAsCisweDI3LCAweDAwLCAweDhELCAweDAwLCAweDQ0LCAweDAyLCAweEQ4LCAweDE5LCAweDQwLCAweEU3LCAweDIwLCAweDlELCAweDAwLAorMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwNCwgMHg5NywgMHgyMCwgMHg0NCwgMHgwMiwgMHgzMCwgMHgwOSwKKzB4NDAsIDB4MjMsIDB4MDAsIDB4OTEsIDB4MjAsIDB4NzAsIDB4MTYsIDB4MzAsIDB4MEIsIDB4RDAsIDB4MjQsIDB4MDAsIDB4OTEsCisweDAwLCAweDc0LCAweDk2LCAweDUwLCAweDM5LCAweDQwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxQywgMHhBMCwgMHgyNCwgMHgwMiwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHg4OSwgMHg0MCwgMHg2RiwKKzB4MDAsIDB4QkQsIDB4MDAsIDB4RDQsIDB4MDIsIDB4RDAsIDB4QUIsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QkQsIDB4MDAsIDB4RjQsCisweDAyLCAweDEwLCAweDBCLCAweDYwLCAweDJGLCAweDAwLCAweEFELCAweDAwLCAweDg0LCAweDAyLCAweDEwLCAweDBCLCAweDQwLAorMHgyRiwgMHg4MCwgMHhCOSwgMHgwMCwgMHhGNCwgMHgxMiwgMHgxMCwgMHg2OSwgMHg2MCwgMHgzNiwgMHgwMCwgMHhEOSwgMHgwMiwKKzB4NzQsIDB4MDYsIDB4MTAsIDB4MTksIDB4NDEsIDB4NzAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDI4LCAweEEwLCAweDAwLCAweDhELCAweDFDLCAweDM0LCAweDIyLCAweEQwLCAweDJBLCAweDQwLCAweEVCLCAweDAwLAorMHhCRCwgMHgwOCwgMHg4NCwgMHgyMiwgMHhEMCwgMHgwQSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCMCwgMHgyMiwKKzB4MTAsIDB4OEEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4QTUsIDB4ODgsIDB4ODQsIDB4MjIsIDB4MTAsIDB4MEEsIDB4NDAsIDB4MkYsCisweDAyLCAweEExLCAweDA4LCAweEI0LCAweDAyLCAweDE0LCAweDA4LCAweDY0LCAweDI0LCAweDA4LCAweDg5LCAweDAwLCAweDM0LAorMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHg1MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwKKzB4QjAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MDYsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsCisweDAyLCAweDVDLCAweDA4LCAweEQwLCAweDAxLCAweEMwLCAweDE3LCAweDAwLCAweDFELCAweDhBLCAweDdDLCAweDA4LCAweDM0LAorMHgyMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMiwgMHg0NCwgMHgwOCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMCwKKzB4MUIsIDB4MDIsIDB4RkMsIDB4MDAsIDB4NzAsIDB4MTEsIDB4QzAsIDB4MDYsIDB4NDAsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MjgsCisweDMyLCAweEExLCAweEQwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEEwLAorMHg2RiwgMHgwMCwgMHhCRiwgMHgwNCwgMHhGQywgMHgxMiwgMHhGMCwgMHgxOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5RiwgMHg0NCwKKzB4M0MsIDB4MTIsIDB4RjIsIDB4MDgsIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4NDgsCisweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDg0LCAweDdDLCAweDEyLCAweDcwLCAweDA5LCAweEMyLCAweDI3LCAweDAxLCAweDlGLAorMHg4NCwgMHg3QywgMHgwMiwgMHg3MCwgMHgyOCwgMHhDMCwgMHgyRCwgMHgwMCwgMHhCNywgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwKKzB4MEIsIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsCisweDAwLCAweDkzLCAweDJDLCAweDdDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweEFCLCAweDAwLCAweDk3LCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyOCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHgwOSwgMHhDOCwKKzB4MkQsIDB4MDAsIDB4OTMsIDB4MDgsIDB4NUMsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDAsCisweERDLCAweDAyLCAweEIwLCAweDFCLCAweEMzLCAweDJCLCAweDAwLCAweEJGLCAweDYwLCAweEZDLCAweDgyLCAweDMwLCAweDBCLAorMHhDMCwgMHg2MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgxOCwgMHg1NCwgMHg0NSwKKzB4NTEsIDB4NEMsIDB4NzQsIDB4NDAsIDB4RDAsIDB4NTEsIDB4NDEsIDB4NDcsIDB4MDEsIDB4MTEsIDB4MTQsIDB4NzQsIDB4MTAsCisweEQwLCAweDAxLCAweDQwLCAweDA0LCAweDA4LCAweDFELCAweDA1LCAweDc0LCAweDgwLCAweEQyLCAweDQxLCAweDQxLCAweDA0LAorMHgwMCwgMHgxMSwgMHgwNCwgMHg0QywgMHg0MCwgMHgxMCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgxNCwgMHg3NCwKKzB4MDAsIDB4MTAsIDB4MjEsIDB4NDIsIDB4MDcsIDB4MDgsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NTAsIDB4MDUsIDB4NDAsCisweDczLCAweDQwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLCAweDIxLCAweDAwLCAweDgxLAorMHgwNCwgMHgzNCwgMHgxMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMSwgMHg4NSwgMHgwNCwgMHgzNCwgMHg1MiwgMHhEMCwKKzB4MDksIDB4NjIsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MTAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MjUsIDB4MDAsCisweDkxLCAweDA0LCAweDU0LCAweDEyLCAweDUwLCAweDA4LCAweDQ4LCAweDIzLCAweDgwLCAweDhELCAweDA0LCAweDE0LCAweDAyLAorMHhEMiwgMHgwOCwgMHg0OCwgMHgyMywgMHgyMCwgMHg4RCwgMHgyMCwgMHg3NCwgMHgwMiwgMHgxOCwgMHgwOCwgMHg0MCwgMHg0QiwKKzB4MjgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MjUsIDB4MDAsIDB4OTEsIDB4MDAsCisweDc0LCAweDBBLCAweEQwLCAweDA5LCAweDQwLCAweDIzLCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LAorMHgwMCwgMHgyNSwgMHg4MCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwKKzB4MDAsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsCisweDBELCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc2LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHg2RiwgMHgwMCwgMHg5MywgMHgwMiwgMHg3OCwKKzB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsCisweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweDQ4LCAweDIxLCAweDQwLCAweDgxLCAweDAwLAorMHg1NCwgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHgxQywgMHgwMiwgMHhCMCwgMHgwOSwKKzB4QzAsIDB4RTcsIDB4ODEsIDB4OUYsIDB4MDIsIDB4NzgsIDB4NDIsIDB4MzIsIDB4MjksIDB4QzAsIDB4MTcsIDB4MjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweEE1LCAweDAwLCAweDlGLCAweDA0LCAweDdDLCAweDI2LAorMHhGMSwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhEMCwgMHgyNiwKKzB4MjAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDgsIDB4OUYsIDB4MDAsIDB4NEMsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDgwLCAweDdDLCAweDAyLCAweEJDLCAweDA5LCAweEMwLAorMHg2NywgMHgwMSwgMHg5RiwgMHgwOSwgMHg3QywgMHgwMiwgMHhGMSwgMHg0OSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDIsIDB4NEQsIDB4MDAsIDB4RjAsCisweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDEzLCAweDAwLCAweDdFLCAweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLAorMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhFMiwgMHgwNywgMHgwOCwgMHgxQiwgMHgwMCwgMHg0QywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4NDAsIDB4RjAsIDB4NDEsIDB4QzgsIDB4ODcsCisweDQwLCAweDE3LCAweDAwLCAweDdDLCAweDAwLCAweDM0LCAweDAxLCAweDg3LCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHg1NCwgMHg4MCwgMHg1RCwgMHgwMCwgMHg0NCwgMHgwMSwgMHg3MCwgMHg0NSwKKzB4NDAsIDB4MUMsIDB4MDAsIDB4NUIsIDB4MDAsIDB4NzQsIDB4MDEsIDB4NzAsIDB4MDcsIDB4NjAsIDB4OUMsIDB4MDAsIDB4NTEsCisweDAwLCAweDc0LCAweDAxLCAweEQ4LCAweDA1LCAweEMwLCAweDFGLCAweDAwLCAweDU1LCAweDAwLCAweDFFLCAweDAxLCAweDcyLAorMHgwNSwgMHg0MCwgMHgxNywgMHgwOCwgMHg1MywgMHgwMCwgMHhDQywgMHgwRCwgMHhDMCwgMHgwNywgMHhDMCwgMHhERCwgMHgwMSwKKzB4NzAsIDB4MEEsIDB4RjAsIDB4MzUsIDB4MTAsIDB4MTcsIDB4NTAsIDB4NTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDM2LCAweDEwLCAweENELCAweDAwLCAweDE2LCAweDAzLCAweDUwLCAweDBDLCAweDQwLAorMHg2MiwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHg1OCwgMHg5OCwgMHg0OCwgMHhGMywgMHgwNiwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDIsIDB4MEQsIDB4NDAsIDB4QjMsIDB4MDEsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4NTAsIDB4MEMsCisweDQwLCAweDMzLCAweDgwLCAweEM5LCAweDAwLCAweDE0LCAweDBBLCAweDkwLCAweDM0LCAweDQwLCAweEUzLCAweDAxLCAweDgxLAorMHgwMiwgMHg3NCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4ODgsIDB4QjgsIDB4MTEsIDB4RUQsIDB4QTUsIDB4OTYsIDB4MTMsIDB4NTAsIDB4NUUsIDB4NDAsIDB4OUMsCisweDAxLCAweEU5LCAweDA4LCAweEI0LCAweDAzLCAweDUwLCAweDBCLCAweDQwLCAweDVGLCAweDAwLCAweEU5LCAweDA0LCAweEI0LAorMHgxMywgMHhEOCwgMHgwRSwgMHg0MCwgMHgzRCwgMHgwMCwgMHhGNSwgMHgwMCwgMHg5NiwgMHgxMywgMHg1MCwgMHgwRSwgMHg0MCwKKzB4N0YsIDB4MDMsIDB4RTEsIDB4MDUsIDB4OTAsIDB4MEIsIDB4RDAsIDB4MjYsIDB4NjAsIDB4NkQsIDB4MDAsIDB4RTEsIDB4ODIsCisweEI0LCAweDAyLCAweDkwLCAweDFFLCAweDQxLCAweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMSwgMHgxMCwgMHhGOCwgMHgwMCwgMHhGRCwgMHgwNywgMHg5QywgMHgxNywgMHg3MCwgMHgxRiwgMHhDMCwgMHhGQSwgMHgwMSwKKzB4RTMsIDB4MDEsIDB4QjQsIDB4MTcsIDB4NzAsIDB4MUUsIDB4NTAsIDB4NkIsIDB4MDAsIDB4RUQsIDB4MDUsIDB4QkMsIDB4NDcsCisweEQwLCAweDlFLCAweDY4LCAweDdCLCAweDA4LCAweEVCLCAweDAxLCAweDg0LCAweDE3LCAweDcwLCAweDFFLCAweEMwLCAweDdCLAorMHgwMCwgMHhGQiwgMHgwOSwgMHg5QywgMHgwNywgMHhGMCwgMHgxRSwgMHg4MCwgMHg2QiwgMHgwMCwgMHhFNiwgMHgyMSwgMHhGQywKKzB4MDYsIDB4QjAsIDB4MUIsIDB4QzAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEE4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDZDLCAweDAzLCAweDcwLCAweDg5LCAweEMwLCAweDE3LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgyNCwgMHgxOCwgMHhENywgMHgwMCwgMHg3QywgMHhCMywgMHhGMCwKKzB4NEQsIDB4QzIsIDB4MjMsIDB4MDAsIDB4QzcsIDB4OTIsIDB4N0MsIDB4NEIsIDB4NzAsIDB4MEQsIDB4QzAsIDB4QjMsIDB4MDQsCisweERCLCAweDA4LCAweDZDLCAweDAzLCAweEYwLCAweDBELCAweDgwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLAorMHg3MCwgMHgwMSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKzB4NzksIDB4MDAsIDB4RTMsIDB4MDQsIDB4Q0QsIDB4NTMsIDB4NzAsIDB4MUIsIDB4QzAsIDB4N0YsIDB4NDAsIDB4RjIsIDB4MDEsCisweERDLCAweDY3LCAweEYwLCAweDFCLCAweEMwLCAweDZGLCAweDAwLCAweEVGLCAweDE5LCAweENDLCAweDA3LCAweDMwLCAweDFGLAorMHg4NSwgMHg3RiwgMHgwMCwgMHhGMywgMHgxMSwgMHhGQywgMHg2NywgMHg3MCwgMHgxRiwgMHhDMCwgMHg3RCwgMHgwMCwgMHhGNywKKzB4MDEsIDB4Q0QsIDB4MDcsIDB4RjAsIDB4MTcsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4QzEsIDB4RjQsIDB4MDcsIDB4RjIsCisweDFCLCAweEM0LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDE4LCAweDM5LAorMHgwMCwgMHhFMSwgMHgwMCwgMHhBQywgMHgwMywgMHgxMCwgMHgwQSwgMHg0MCwgMHgxQiwgMHgwMCwgMHhFMSwgMHgwOCwgMHhEQywKKzB4QzMsIDB4MTEsIDB4MEEsIDB4QzAsIDB4MDksIDB4MDksIDB4RUQsIDB4MDAsIDB4OTQsIDB4MjMsIDB4NTAsIDB4MEUsIDB4NDIsCisweDFCLCAweDAwLCAweEUxLCAweDA0LCAweERDLCAweDAzLCAweDEwLCAweDhFLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDAwLAorMHg4NCwgMHgyQiwgMHhEMCwgMHg4NiwgMHg0MCwgMHgyQiwgMHgwNiwgMHg2RCwgMHgwOCwgMHhCNCwgMHgxMSwgMHhEMCwgMHg0RiwKKzB4QzAsIDB4NTYsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MkQsIDB4MDAsCisweEYxLCAweDAwLCAweEM0LCAweDIzLCAweDUwLCAweDhFLCAweDQxLCAweDNCLCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDAzLAorMHg1OSwgMHg4QSwgMHg0MSwgMHgyQSwgMHgzMCwgMHhGRCwgMHgxMCwgMHhFNiwgMHgwMywgMHg5MCwgMHgwRSwgMHg0MCwgMHgzRiwKKzB4MDYsIDB4RTEsIDB4MjAsIDB4QTYsIDB4MDMsIDB4NTEsIDB4MEYsIDB4NDAsIDB4MzksIDB4MDIsIDB4RUQsIDB4MDAsIDB4QTQsCisweDQzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAyLCAweEQyLCAweDBBLCAweDQwLAorMHgwMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyMCwgMHgyNSwgMHgwMiwgMHhDMSwKKzB4MDksIDB4MjQsIDB4MDcsIDB4MTAsIDB4MDgsIDB4NjAsIDB4NTMsIDB4MEUsIDB4QzEsIDB4MEEsIDB4MzQsIDB4MDcsIDB4MTIsCisweDA4LCAweDQxLCAweEEzLCAweDIwLCAweENELCAweDAyLCAweDM0LCAweDFGLCAweDUwLCAweDNDLCAweDQwLCAweDQzLCAweDAwLAorMHhEMSwgMHgwQiwgMHgxNCwgMHgzNywgMHgxMCwgMHgzQywgMHg0MCwgMHg3NCwgMHgwMCwgMHhDRCwgMHgwNSwgMHgyNCwgMHgxNywKKzB4RDEsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDAsIDB4NEQsIDB4MjYsIDB4MzQsIDB4MTgsIDB4RDAsIDB4MDAsIDB4NDIsIDB4MTIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDI1LCAweDQwLCAweEYzLCAweDAwLAorMHhDRCwgMHgxQiwgMHg3MCwgMHgyRCwgMHhDMCwgMHhCMywgMHgwMCwgMHhGMywgMHg4QSwgMHhGQywgMHgwQiwgMHg3MCwgMHgxOCwKKzB4QzAsIDB4MjYsIDB4MDQsIDB4RkUsIDB4MDEsIDB4RUMsIDB4NEYsIDB4QjAsIDB4NUYsIDB4QzAsIDB4MjcsIDB4NDAsIDB4RjMsCisweDAwLCAweEZDLCAweDBCLCAweDcwLCAweDlDLCAweEMwLCAweEJELCAweDAyLCAweEU3LCAweDA2LCAweDZDLCAweDBGLCAweEQwLAorMHgwNSwgMHhDMCwgMHhFNywgMHgwMCwgMHg4RCwgMHgwNiwgMHg3RSwgMHgwMCwgMHhGMCwgMHgwMSwgMHhEMCwgMHg1NiwgMHgyMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjcsIDB4MDQsIDB4REYsIDB4MDAsIDB4N0MsCisweDQzLCAweEYwLCAweDBELCAweEMwLCAweEI3LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDAzLCAweDcwLCAweDI5LCAweEMwLAorMHgwNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHhBNywgMHg4OCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4NzIsIDB4OEQsIDB4QzAsIDB4MzcsIDB4ODIsIDB4REYsIDB4MDAsIDB4NUMsIDB4MEIsIDB4QjAsIDB4MjUsCisweDg4LCAweEE3LCAweDA5LCAweDlGLCAweDAyLCAweDdDLCAweDBDLCAweEYwLCAweDAxLCAweEMxLCAweDA1LCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGQiwgMHgwMCwgMHhGQywgMHgwMywKKzB4RjAsIDB4MEYsIDB4QzEsIDB4NUYsIDB4MDgsIDB4RjMsIDB4MDAsIDB4RkMsIDB4NDMsIDB4RjAsIDB4MDMsIDB4QzIsIDB4MkMsCisweDBDLCAweEZGLCAweDEwLCAweEY4LCAweDgzLCAweEYwLCAweDBGLCAweEMxLCAweDBELCAweDA0LCAweEZCLCAweDkwLCAweENDLAorMHgwMywgMHhGMSwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGNywgMHg0MCwgMHhFOCwgMHgwMywgMHhEMCwgMHgyNywgMHhDMCwKKzB4NkYsIDB4MDAsIDB4MzMsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MTMsIDB4MjIsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDIwLCAweDM2LCAweDA4LCAweEQxLCAweDAwLCAweDc0LCAweDgzLCAweEQwLAorMHgwOSwgMHg2MCwgMHgxNiwgMHgwQSwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMiwgMHgxNSwgMHg0MCwgMHg2NCwgMHgwMCwKKzB4REQsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4QzQsIDB4MDQsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDMsCisweEQ4LCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDA3LCAweEMwLCAweDI1LCAweDQyLCAweEUzLAorMHhDMCwgMHgxMywgMHgwNSwgMHg0NCwgMHg0RSwgMHhEMCwgMHgzMSwgMHg0MCwgMHgxNywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTIsIDB4NjQsIDB4MjAsIDB4RDksIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MDksCisweDQ4LCAweDM3LCAweDA0LCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweDUwLCAweDE5LCAweDQxLCAweDQ1LCAweDIwLCAweERELAorMHgwMCwgMHg3NCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwgMHg2NywgMHgwMCwgMHhERCwgMHgwMCwgMHg2NCwgMHgwMywgMHhEMCwKKzB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NzYsIDB4MDcsIDB4RDAsIDB4MDUsIDB4NDAsIDB4QjcsIDB4MDEsCisweDkxLCAweDAxLCAweDQ0LCAweDA0LCAweEQyLCAweDM5LCAweDQyLCAweDA1LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwKKzB4MzMsIDB4MDgsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDksIDB4NDAsIDB4NDAsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDE0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDAwLCAweDAwLCAweENELCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDBELAorMHg0MCwgMHgzMCwgMHgwMCwgMHhEMSwgMHgwMCwgMHgxNiwgMHg4MywgMHhEMCwgMHgwNCwgMHg0MCwgMHgxMywgMHgxMCwgMHgwMSwKKzB4MDAsIDB4MDUsIDB4MDAsIDB4RDAsIDB4MDgsIDB4NjAsIDB4NDMsIDB4QTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEIwLCAweDI2LCAweDAwLCAweERCLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweDQ4LCAweDEzLAorMHg0MCwgMHhEMywgMHg4MCwgMHg3QywgMHgwMywgMHhGMSwgMHgwMSwgMHhEMCwgMHgwNCwgMHgwMCwgMHhERSwgMHgwMCwgMHhGQywKKzB4MDMsIDB4NzIsIDB4MEYsIDB4QzQsIDB4MDUsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzAsCisweDNFLCAweDAwLCAweEU3LCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEM0LCAweDM3LCAweDg4LCAweDExLCAweDAwLAorMHg0QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgwMSwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4QTgsIDB4MkYsIDB4MTAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MUUsIDB4MDAsCisweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDA3LCAweEMwLCAweDBFLCAweDAwLCAweEZGLCAweDAwLCAweDlDLCAweDAzLAorMHhGMCwgMHgwRiwgMHhDOCwgMHgwQiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwRSwgMHg0MCwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4MDEsIDB4RjAsIDB4MEIsIDB4QzIsIDB4MUYsIDB4MDgsIDB4MzcsIDB4MDAsIDB4RkMsCisweDAwLCAweEUxLCAweDAzLCAweEMwLCAweDE3LCAweDIyLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBMCwgMHgyRiwgMHgwMCwgMHgzQiwgMHgxNCwgMHhCQywgMHgwRiwgMHgzNCwgMHgxRiwgMHhDMCwgMHg3RSwgMHgwMiwgMHhGRiwKKzB4MDksIDB4RkMsIDB4MDcsIDB4QjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RjMsIDB4MDksIDB4OEMsIDB4MjcsIDB4NzIsCisweDFGLCAweEM0LCAweDdFLCAweDAyLCAweEZCLCAweDI5LCAweENDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDdDLCAweDIwLAorMHhGMywgMHgwOSwgMHhDQywgMHgyNywgMHgzMCwgMHg4MywgMHhDMiwgMHg3QywgMHgwMiwgMHhGMywgMHgyNCwgMHhFRSwgMHgxQSwKKzB4MzAsIDB4NEIsIDB4QzQsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsCisweDI3LCAweDIwLCAweDAxLCAweDAyLCAweDc0LCAweDEzLCAweDE4LCAweDExLCAweDQwLCAweDAwLCAweDAwLCAweDFELCAweDgwLAorMHg3NCwgMHgwNCwgMHg0MCwgMHgxMSwgMHg0MCwgMHgwMCwgMHgwNCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgxMCwgMHgxMCwgMHg0MCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDQsIDB4NDQsIDB4MDQsIDB4RDAsIDB4MTEsIDB4NDEsIDB4NDQsIDB4MDAsIDB4MTMsCisweDQ0LCAweDQ0LCAweDEwLCAweDMwLCAweDY1LCAweDQwLCAweDM0LCAweDAwLCAweEY1LCAweDBCLCAweDZFLCAweDEwLCAweDEwLAorMHgxMSwgMHg0MCwgMHgwNCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgwMiwKKzB4NDAsIDB4MDEsIDB4NDAsIDB4MzYsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NTAsIDB4MzAsIDB4MDEsIDB4Q0QsIDB4ODQsIDB4MzQsCisweDAzLCAweDgxLCAweDBELCAweDUwLCAweDMwLCAweDAxLCAweEMxLCAweDAwLCAweDI0LCAweDEzLCAweEQwLCAweDBDLCAweDQxLAorMHgzMCwgMHgwMSwgMHhDMSwgMHgwNCwgMHgyNCwgMHgwMywgMHhEMCwgMHg0RCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhDOSwgMHgwNCwKKzB4MjQsIDB4MDMsIDB4MTAsIDB4MjgsIDB4NDAsIDB4MzEsIDB4ODEsIDB4Q0QsIDB4MjAsIDB4MDQsIDB4MUEsIDB4MTEsIDB4ODgsCisweDQwLCAweDQ1LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDE1LCAweDAwLAorMHgxMSwgMHgyMiwgMHgzNCwgMHgwMywgMHg1MCwgMHgwMSwgMHg0NCwgMHgwNCwgMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHg4MCwKKzB4OTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDAsIDB4MDQsCisweDAwLCAweDAxLCAweDAwLCAweDY3LCAweDAwLCAweEQwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAxLCAweDAwLCAweDY0LAorMHgwMCwgMHgxMCwgMHg0RCwgMHg0MiwgMHgzNiwgMHgwOCwgMHhERCwgMHgwMCwgMHg0NywgMHgwNCwgMHgxMCwgMHgxOSwgMHg0MSwKKzB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4NjcsIDB4NDAsIDB4MUIsCisweDAxLCAweDdDLCAweDI3LCAweDUwLCAweDBDLCAweEM4LCAweDM0LCAweDIwLCAweERGLCAweDgwLCAweDNDLCAweDAzLCAweEI0LAorMHgwQywgMHhDMCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg2QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwKKzB4RDMsIDB4MDAsIDB4NkMsIDB4MDMsIDB4RjIsIDB4MEMsIDB4ODAsIDB4MzAsIDB4MDAsIDB4REIsIDB4MDAsIDB4NkQsIDB4MDMsCisweDM0LCAweDAxLCAweEQxLCAweDM1LCAweDAwLCAweERGLCAweDQwLCAweDQ0LCAweDA0LCAweDIyLCAweDMxLCAweEMwLCAweDAxLAorMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg2OSwgMHgwMSwgMHgzRiwgMHgwMywKKzB4RjgsIDB4MDMsIDB4QjAsIDB4MDMsIDB4ODAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4NzAsIDB4MDMsCisweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweERELCAweDAwLCAweDcwLCAweDAzLCAweEQwLCAweDBELCAweDAwLCAweDM3LAorMHgwMCwgMHhEQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDNCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMSwKKzB4MDcsIDB4QzAsIDB4M0QsIDB4MjAsIDB4RjcsIDB4MDAsIDB4RjQsIDB4MDAsIDB4RjUsIDB4MDMsIDB4QzMsIDB4MUUsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDgxLCAweDM3LCAweDBBLCAweDRELAorMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHg3NywgMHg0MSwgMHhEMywgMHgwNSwgMHg1QywgMHgwMywgMHgzMCwgMHg4RCwgMHhDMCwKKzB4MzUsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4MDEsCisweDRDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDM0LCAweDAyLCAweEQ3LCAweDAxLCAweDdDLCAweDAzLCAweEYwLCAweDA5LAorMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgxMCwgMHg3NCwgMHg4QSwgMHgzMywgMHgyMSwgMHhDNCwgMHgwQiwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4QjQsIDB4MDAsIDB4MTEsIDB4ODEsIDB4NDQsIDB4MDMsCisweDEwLCAweDQxLCAweDQ0LCAweDQ3LCAweDAwLCAweDExLCAweDAzLCAweDc0LCAweDAwLCAweEIwLCAweDExLCAweDQwLCAweDA0LAorMHgwMCwgMHgxMSwgMHgyMCwgMHg3NCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0OCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0NCwKKzB4NDQsIDB4RDAsIDB4MTEsIDB4NDAsIDB4NDQsIDB4MDgsIDB4MTEsIDB4MDEsIDB4NjQsIDB4MDAsIDB4RDAsIDB4MEQsIDB4QzAsCisweDM3LCAweDEwLCAweEUwLCAweDEzLCAweDM0LCAweDA0LCAweDEwLCAweDMwLCAweDAwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgyMiwgMHgwMCwgMHg0MSwgMHgwMCwgMHgyNSwgMHgwMywgMHg1MCwKKzB4MUMsIDB4NDAsIDB4QjMsIDB4MDAsIDB4QzksIDB4MDIsIDB4MzQsIDB4NDMsIDB4OTAsIDB4MEMsIDB4NDEsIDB4MzUsIDB4ODAsCisweEMxLCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDM2LCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDA3LAorMHg1MCwgMHg4QywgMHg0MCwgMHg3MSwgMHg4MCwgMHhDOSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwMSwgMHg0MCwgMHgzNiwKKzB4MDgsIDB4QzQsIDB4MDIsIDB4MzQsIDB4MDIsIDB4NTQsIDB4MjgsIDB4MDIsIDB4MUYsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDc4LCAweDQwLCAweDYxLCAweDA5LCAweEU0LCAweDA3LCAweDEwLCAweDEyLAorMHg0MCwgMHg0QiwgMHgwMCwgMHgyOSwgMHgwOSwgMHhCNCwgMHgyNCwgMHg5MCwgMHg5MiwgMHg0MCwgMHg0OCwgMHgwMCwgMHgyMSwKKzB4MDEsIDB4RjYsIDB4MjQsIDB4MTAsIDB4MTIsIDB4NDAsIDB4NEEsIDB4MDAsIDB4MjEsIDB4MDEsIDB4QjQsIDB4MDQsIDB4RDAsCisweDEzLCAweDQwLCAweDRELCAweDA4LCAweDI5LCAweDA5LCAweEE2LCAweDA0LCAweEMwLCAweDEyLCAweDQwLCAweDdCLCAweDMwLAorMHhFOSwgMHgwMSwgMHhCNCwgMHg2NiwgMHg1MCwgMHgxMiwgMHg0MSwgMHgxQiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MDQsIDB4NDAsIDB4NDUsIDB4MDAsIDB4MkMsIDB4MDMsIDB4NzAsIDB4OEMsIDB4QzAsCisweDMzLCAweDAwLCAweENCLCAweDAwLCAweDFDLCAweDIzLCAweDMwLCAweDBDLCAweEMwLCAweDMxLCAweDkwLCAweEMzLCAweDAwLAorMHgzQywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwgMHgzMiwgMHgwMCwgMHhEMywgMHgwMCwgMHgzNCwgMHgwMywgMHg3MCwgMHgwQywKKzB4QzAsIDB4MzEsIDB4MDAsIDB4Q0UsIDB4ODAsIDB4M0UsIDB4MDMsIDB4RjAsIDB4MDAsIDB4QzAsIDB4MzcsIDB4MDAsIDB4QzcsCisweDA4LCAweDNDLCAweDIyLCAweDcwLCAweDA4LCAweEMwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHhCMCwgMHgxRCwgMHgwMCwgMHg3RiwgMHgwMCwgMHhERSwgMHgwMywgMHhGMCwgMHgwMywgMHg2MCwgMHgwRiwKKzB4MDAsIDB4MzcsIDB4MDAsIDB4QkMsIDB4MjAsIDB4RjAsIDB4MDIsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RjQsCisweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBELCAweDAwLCAweDNGLCAweDAwLCAweENELCAweDAwLCAweEYwLCAweDAyLCAweEMwLAorMHgwQSwgMHgwMCwgMHgzNywgMHg4MCwgMHhFRSwgMHgwNCwgMHhGMCwgMHgwMywgMHhDMCwgMHgzRCwgMHg4MiwgMHhGNywgMHgzOCwKKzB4QkMsIDB4MjIsIDB4QjAsIDB4ODksIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweEEwLCAweDM3LCAweDQwLCAweDEzLCAweDAwLCAweDZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDQwLAorMHhEMywgMHgwMSwgMHgwRCwgMHgwMywgMHhCMCwgMHgxQywgMHhEMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHgzQywgMHgwNywKKzB4QjQsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDEsIDB4MEQsIDB4MDcsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDAwLCAweERGLCAweDAxLCAweDZELCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDM3LCAweDgwLCAweERGLCAweDA0LCAweDNDLAorMHgwMCwgMHgzMCwgMHgxOSwgMHhDMCwgMHg1NCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4ODgsIDB4MzksIDB4MDAsIDB4MzEsIDB4MDAsIDB4ODUsIDB4MDMsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MzEsCisweDAwLCAweDg0LCAweDAwLCAweDMwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweDEwLAorMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHgzRCwgMHgwMCwgMHhBNCwgMHgwMCwgMHg3MCwgMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwKKzB4MzcsIDB4MDAsIDB4OEMsIDB4ODAsIDB4RDAsIDB4MEUsIDB4QzAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MTQsIDB4OUMsIDB4MDAsCisweDE0LCAweDAzLCAweEMwLCAweDRBLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLAorMHg3OSwgMHgwMCwgMHgyOSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFMSwgMHgwMSwKKzB4OTQsIDB4MDcsIDB4OTAsIDB4MUYsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4RjQsIDB4MDcsIDB4MTAsIDB4MUUsCisweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEE0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELAorMHgwMSwgMHg4NCwgMHg4NywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHg4NSwgMHg5NCwgMHgwNiwgMHg1NSwKKzB4MUIsIDB4NDAsIDB4MEQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4NzcsCisweDAyLCAweDkxLCAweDEwLCAweDA0LCAweDA2LCAweEQwLCAweDAwLCAweDQwLCAweDA3LCAweDAwLCAweDAxLCAweDAwLCAweDE0LAorMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgzNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKzB4MDMsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MjQsIDB4MDAsIDB4NTAsIDB4MDEsIDB4NDAsIDB4MDMsIDB4MTAsIDB4MDUsIDB4NDAsCisweDA0LCAweDAwLCAweEQwLCAweEVDLCAweDQwLCAweDMxLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDBCLCAweDUwLCAweDhDLAorMHg0MCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHg5RCwgMHgwMCwKKzB4N0IsIDB4ODcsIDB4NkMsIDB4NDEsIDB4RjEsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NUMsIDB4MDEsCisweEI0LCAweDA1LCAweEM4LCAweDE0LCAweDEwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweDMwLCAweDA1LCAweEM0LCAweDE3LAorMHgwMCwgMHg1RiwgMHgwMCwgMHg0NCwgMHgwMSwgMHgzMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg0QywKKzB4MDEsIDB4NzAsIDB4MzcsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4OUUsIDB4MjEsIDB4NTAsIDB4QjcsIDB4NDAsCisweDVELCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDA0LCAweDFGLAorMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg0MCwgMHhFOCwgMHgwMCwgMHg3MCwKKzB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MjAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsCisweDNGLCAweDAwLCAweERDLCAweDAwLCAweDcwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDM3LCAweDIwLCAweERDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhFMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg1RSwgMHg4MCwgMHg5MCwgMHgwMSwgMHg4MCwgMHg0QSwKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjYsIDB4MDIsIDB4OTMsIDB4MDAsCisweDVDLCAweDAyLCAweEYwLCAweDg5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDE2LCAweDMwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywKKzB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4MzAsCisweDA5LCAweEMwLCAweDI0LCAweDEwLCAweDlGLCAweDgwLCAweDdFLCAweDI2LCAweDMwLCAweDg5LCAweEMyLCAweDQzLCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHg2NiwgMHgwMCwgMHg5MSwgMHgyMCwgMHg0NCwKKzB4MDIsIDB4OTAsIDB4MTksIDB4NDQsIDB4QTcsIDB4MDAsIDB4OTEsIDB4MDIsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsCisweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA4LCAweDUwLCAweDIwLCAweDQwLCAweDkxLCAweDAyLAorMHg3NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMiwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDYsIDB4MTQsIDB4MzksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDQwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCMSwgMHgwMCwgMHhGNCwgMHgwMiwgMHgxMCwgMHgwQiwgMHg0MCwgMHgyRiwKKzB4MDAsIDB4QkQsIDB4MDAsIDB4RjQsIDB4ODIsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MkMsIDB4MDAsIDB4QjEsIDB4MDAsIDB4RjQsCisweDIyLCAweEQwLCAweDRCLCAweDQwLCAweDJFLCAweDAxLCAweEJELCAweDAwLCAweEY0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLAorMHgyNCwgMHgwMCwgMHg5RCwgMHgwQSwgMHg1NCwgMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4NDEsIDB4ODEsIDB4MDQsIDB4MDUsIDB4MDIsIDB4OTAsCisweDBBLCAweDQwLCAweDZCLCAweDAwLCAweEExLCAweDAxLCAweEY0LCAweDAyLCAweDE1LCAweDBFLCAweDQyLCAweDJCLCAweDAwLAorMHhBRCwgMHgwMCwgMHhCNCwgMHg4MiwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyQywgMHgwMCwgMHhBMSwgMHgwMSwgMHhCNiwgMHgwMiwKKzB4RDAsIDB4MEEsIDB4NDAsIDB4MjgsIDB4MDAsIDB4QUQsIDB4MDEsIDB4RjQsIDB4MDIsIDB4MTQsIDB4NDgsIDB4NDAsIDB4MjAsCisweDAyLCAweDhELCAweDA0LCAweDM0LCAweDEyLCAweDEwLCAweDRDLCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg4MiwgMHgwMiwgMHgxMywgMHgwQSwgMHg1QywgMHgyOCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4ODcsIDB4NDIsIDB4MTMsIDB4MEEsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MUYsCisweDBBLCAweDdDLCAweDI4LCAweEQwLCAweEExLCAweEMwLCAweDg0LCAweDAyLCAweDEzLCAweDBBLCAweDdDLCAweDAwLCAweEYwLAorMHhBMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwQSwgMHhGQywgMHgyOCwgMHgzMCwgMHhBMSwgMHhEMCwgMHg4NCwgMHgxMCwKKzB4MUYsIDB4MDAsIDB4N0MsIDB4MjgsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDNGLCAweDAyLCAweEJGLCAweDA4LCAweEZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHg4MCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4ODAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDhCLCAweEMwLCAweDI3LCAweDIxLCAweDlGLAorMHgwOCwgMHhGQywgMHgyMywgMHhGOCwgMHg4QiwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTksIDB4QTAsIDB4MkYsIDB4MDUsIDB4QTMsIDB4OEMsIDB4NUMsIDB4MDIsIDB4MzUsIDB4MEIsIDB4QzAsIDB4MkYsCisweDAyLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweDcwLCAweDBCLCAweEUwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDRELAorMHgyMiwgMHhGMSwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCRiwgMHgwOCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwKKzB4MkUsIDB4MDAsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4QzksIDB4RTIsIDB4MjQsIDB4ODAsIDB4QkYsIDB4QTAsCisweEM4LCAweDgzLCAweDMwLCAweDBCLCAweEMwLCAweDY3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxQywgMHgwOCwgMHgwMywgMHgwMSwgMHgxMSwgMHgwQywgMHg0NSwgMHg0MCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwMywgMHgwMCwKKzB4MUQsIDB4MTQsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDQsIDB4MUQsIDB4MTAsIDB4NDQsIDB4MDAsCisweEQwLCAweDQxLCAweDQxLCAweDA0LCAweDAxLCAweDBELCAweDA0LCAweDc0LCAweDAwLCAweEQwLCAweDAxLCAweDQxLCAweDA0LAorMHgxMCwgMHgwRCwgMHg1NCwgMHg3NCwgMHgxMCwgMHg1MCwgMHhDMSwgMHg1MCwgMHgwNCwgMHgyNCwgMHgxRCwgMHgwMCwgMHg0NSwKKzB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4NzMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEEwLCAweDIzLCAweDA1LCAweDgxLCAweDA0LCAweDA0LCAweDEyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDhELAorMHgwNCwgMHgzNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4RCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEMCwKKzB4NDksIDB4NTAsIDB4MjAsIDB4MDUsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjIsIDB4MDAsCisweDhELCAweDA0LCAweDM0LCAweDUyLCAweDUwLCAweDU4LCAweDQwLCAweDIxLCAweDAxLCAweDhELCAweEE4LCAweDA0LCAweDgyLAorMHgxMCwgMHgwOCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwKKzB4MjUsIDB4NDAsIDB4OTEsIDB4MDIsIDB4NDQsIDB4MjIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDAsCisweDc0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDU2LCAweDAyLCAweEMwLCAweDA5LAorMHg0MCwgMHgyNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHhERCwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4NDAsIDB4MDYsIDB4MDIsIDB4MTQsCisweDQ5LCAweDQwLCAweDYzLCAweDI4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweEEzLAorMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4NTAsIDB4MDgsIDB4NTAsIDB4MjUsIDB4MDgsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjIsIDB4MDksIDB4QzgsCisweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI2LCAweDAwLCAweDlELCAweDAwLAorMHg3QywgMHgwMiwgMHgzNCwgMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5RCwgMHg4MCwgMHg0QywgMHgwQSwgMHgyMCwgMHgwOSwKKzB4QzEsIDB4MTcsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4NjUsIDB4MDIsCisweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHhCMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDNCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MTAsIDB4NjQsCisweDAyLCAweEIwLCAweDA4LCAweEMwLCAweDI3LCAweDAwLCAweDhGLCAweDEwLCAweDdDLCAweDBBLCAweEYwLCAweDA5LCAweEMyLAorMHg1MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg4NSwgMHgyMCwgMHgxMywKKzB4NDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4OTAsIDB4RTIsCisweDAxLCAweEMwLCAweDA3LCAweDIwLCAweDFGLCAweDAwLCAweDZDLCAweDAwLCAweEQwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLAorMHgxRiwgMHgwOCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxMywgMHgwMCwgMHg0QywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDgsIDB4MUQsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NTAsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDFDLCAweDAyLCAweDUxLCAweDgxLAorMHg0NSwgMHgwMSwgMHg3MCwgMHgxNSwgMHg0MCwgMHg1RiwgMHgwMSwgMHg3MSwgMHgwMCwgMHg4NCwgMHgwRCwgMHgxMCwgMHg5NywKKzB4NDAsIDB4MTcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzAsIDB4MDEsIDB4OTgsIDB4MDQsIDB4NDAsIDB4MTcsIDB4MDAsIDB4N0QsCisweDAwLCAweDQ0LCAweDAxLCAweDcwLCAweDA1LCAweDQwLCAweDU3LCAweDAwLCAweDdCLCAweDAzLCAweDQ0LCAweDAxLCAweEMwLAorMHgwNSwgMHg0MCwgMHgxNywgMHgxMCwgMHg3QywgMHgwMiwgMHg3NCwgMHgwMSwgMHgxMCwgMHgwNywgMHgwMCwgMHg1MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4NzIsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsCisweDAzLCAweDUwLCAweDg4LCAweDQwLCAweDczLCAweDQwLCAweEM1LCAweDA4LCAweDA0LCAweDBCLCAweDUwLCAweDJDLCAweDQwLAorMHgzMywgMHgwMCwgMHhERCwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMiwgMHgwQywgMHg0NCwgMHgzMywgMHgwMCwgMHhDRCwgMHgxMCwKKzB4MjUsIDB4MDIsIDB4NTAsIDB4MUQsIDB4NDAsIDB4NjMsIDB4MDAsIDB4QzEsIDB4MEEsIDB4MjUsIDB4MDMsIDB4RDAsIDB4MEMsCisweDYwLCAweDMzLCAweDAwLCAweDRELCAweDBCLCAweDM0LCAweDAyLCAweDUwLCAweDBDLCAweDAwLCAweDUwLCAweDAwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHgzOCwgMHgwNCwgMHhCMSwgMHgwMiwgMHg4NCwgMHgzMywKKzB4NTAsIDB4MEUsIDB4NDAsIDB4NUIsIDB4MDAsIDB4NjUsIDB4MDEsIDB4ODQsIDB4NDMsIDB4MTAsIDB4MEEsIDB4NDEsIDB4M0IsCisweDAxLCAweEVELCAweDA0LCAweEI0LCAweDIzLCAweDkwLCAweDBFLCAweDQwLCAweDNCLCAweDEwLCAweEVELCAweDAxLCAweEE0LAorMHgwMywgMHg1MCwgMHgyRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFOSwgMHgyMSwgMHhBNiwgMHgwMywgMHhEMCwgMHg0RSwgMHg0MCwKKzB4M0IsIDB4MDEsIDB4NjksIDB4MDAsIDB4QjQsIDB4MDMsIDB4NTgsIDB4MUMsIDB4NDQsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweDc4LCAweDAyLCAweEUzLCAweDAxLCAweDlDLCAweDI3LCAweDcxLAorMHgxRSwgMHhDMCwgMHg3QiwgMHgyMCwgMHhGNywgMHgwMSwgMHg4RCwgMHgwNiwgMHg3MCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwKKzB4RUQsIDB4MDUsIDB4QUMsIDB4ODcsIDB4RDAsIDB4M0UsIDB4QzAsIDB4N0IsIDB4MDIsIDB4RUYsIDB4MDEsIDB4QUMsIDB4MDcsCisweDcwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweEUzLCAweDAxLCAweEFDLCAweDk3LCAweEYwLCAweDlFLCAweEUwLCAweDdCLAorMHgyMCwgMHg2RCwgMHgyMSwgMHhCQywgMHgwNywgMHg3NCwgMHgxRSwgMHhDMiwgMHg1MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjAsIDB4QkQsIDB4NDAsIDB4OUYsIDB4MDYsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MEQsCisweEMwLCAweDE3LCAweDAwLCAweDVCLCAweDAwLCAweDNDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDM3LCAweDA0LCAweERGLAorMHgwMiwgMHg3QywgMHgwQiwgMHhGMCwgMHgyRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMywgMHg2MCwKKzB4MEQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MEIsIDB4RjAsIDB4QUQsIDB4QzAsIDB4MzcsIDB4MDAsCisweDFGLCAweDAwLCAweDNDLCAweDVCLCAweEIwLCAweDA5LCAweEMyLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg0RiwgMHg0MCwgMHhCMywgMHgwMywgMHhDQywgMHgxMywgMHhGMCwgMHgxRSwgMHhDMCwKKzB4NkMsIDB4MDAsIDB4QkYsIDB4MDEsIDB4OEMsIDB4MDYsIDB4MzAsIDB4MUIsIDB4QzAsIDB4N0IsIDB4MDQsIDB4RjMsIDB4MTMsCisweENDLCAweDBGLCAweDMwLCAweDNGLCAweEMwLCAweDdGLCAweDA0LCAweEZGLCAweDgxLCAweEZDLCAweDg3LCAweEIwLCAweDFGLAorMHhDMCwgMHg3RiwgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHg0RiwgMHhGMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgwNCwgMHg3RiwKKzB4MDksIDB4Q0MsIDB4MDYsIDB4MzAsIDB4OUQsIDB4QzIsIDB4MEIsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweDg4LCAweDA5LCAweDAwLCAweEExLCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDA4LAorMHgwNCwgMHgyRCwgMHg0NCwgMHg4NCwgMHgwMiwgMHgxMCwgMHgwQSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHhDNCwKKzB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4QUQsIDB4MTAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsCisweDNCLCAweDAwLCAweEFELCAweDEwLCAweEJDLCAweDIzLCAweEQwLCAweDBFLCAweEMwLCAweDNBLCAweDAwLCAweDZELCAweDA4LAorMHg4NCwgMHgwMywgMHgxMSwgMHgzRSwgMHg0MCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MTEsIDB4MDAsIDB4ODEsIDB4MDAsIDB4ODQsIDB4NjMsIDB4RDAsIDB4MEYsIDB4NDAsIDB4MkEsIDB4MDAsCisweEFELCAweDAwLCAweEM2LCAweDAyLCAweDEwLCAweDBBLCAweDQwLCAweEJGLCAweDAwLCAweEYxLCAweDAyLCAweDg0LCAweDIzLAorMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHg2RCwgMHgwOCwgMHhGNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwKKzB4MDIsIDB4NkQsIDB4MDgsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzgsIDB4MDIsIDB4Q0QsIDB4NDgsIDB4ODYsCisweDAzLCAweDUwLCAweDhFLCAweDQwLCAweDIzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorMHgyOCwgMHgxMywgMHgwMCwgMHg4MSwgMHg0MiwgMHgwNiwgMHgwNywgMHhEMCwgMHg0QywgMHg0MCwgMHg0MiwgMHgwMSwgMHgwRCwKKzB4MEQsIDB4MDQsIDB4MEUsIDB4MTAsIDB4NjgsIDB4NDAsIDB4NzMsIDB4MDAsIDB4QzEsIDB4MDEsIDB4MDQsIDB4NDMsIDB4MTAsCisweDFDLCAweDQxLCAweDMzLCAweDA0LCAweDBELCAweDA1LCAweDM0LCAweDQzLCAweDE4LCAweDM4LCAweDQwLCAweDczLCAweDAwLAorMHgxRCwgMHgwNSwgMHgxNiwgMHgyQiwgMHhEMSwgMHgwQywgMHg1MCwgMHgzMCwgMHgwOCwgMHgwRCwgMHgwMCwgMHg0MCwgMHgwQiwKKzB4NTgsIDB4MjgsIDB4NDEsIDB4MUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTgsCisweDIxLCAweDExLCAweEQxLCAweDAyLCAweENDLCAweDA3LCAweEYwLCAweDJDLCAweEMwLCAweEY2LCAweDAwLCAweERGLCAweDAyLAorMHg0RCwgMHg0NCwgMHgzNCwgMHgxRCwgMHhDMCwgMHgzRiwgMHgwMCwgMHhFMywgMHgwNCwgMHhDNCwgMHgwNywgMHgzMCwgMHgwRiwKKzB4NDAsIDB4N0IsIDB4MDAsIDB4MUYsIDB4MDMsIDB4M0MsIDB4MEIsIDB4MzAsIDB4OUQsIDB4NDAsIDB4QjcsIDB4MDQsIDB4NUYsCisweDAzLCAweEI0LCAweDA3LCAweEYwLCAweDBGLCAweDAwLCAweDNDLCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDIyLCAweDcyLAorMHgzRCwgMHhDNCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NywKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDhELCAweEMwLCAweDM3LCAweDIyLCAweERGLCAweDAwLCAweDdDLCAweDIzLCAweEYwLCAweDhELCAweEMwLAorMHgzNywgMHgwMiwgMHgxRiwgMHgwMiwgMHg3QywgMHgwNywgMHg3MCwgMHg4RCwgMHhDMCwgMHgzNywgMHgwMSwgMHg1RiwgMHg0MCwKKzB4N0MsIDB4NDMsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDIsIDB4N0MsIDB4MDcsIDB4OTYsIDB4MUQsCisweDQwLCAweDI3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDJGLCAweDgwLAorMHhGMywgMHgxMCwgMHhDQywgMHgwMywgMHhGMCwgMHgxRiwgMHhDMCwgMHg5QywgMHgyMCwgMHg3RiwgMHgwMCwgMHhDQywgMHg1MSwKKzB4NzAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RjMsIDB4MjAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzQsIDB4M0YsCisweDgwLCAweDMzLCAweDAwLCAweEZDLCAweDAzLCAweDMxLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweDdGLCAweDAwLCAweENDLAorMHgwMywgMHgzMCwgMHgwRSwgMHhDMCwgMHgzQywgMHgwMCwgMHhGRiwgMHhBMCwgMHg0QywgMHg4MywgMHgzMCwgMHgxNywgMHhDMiwKKzB4MDcsIDB4MjQsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTEsIDB4MjAsIDB4NDYsIDB4MDEsIDB4QzEsCisweDA5LCAweDQ1LCAweDAzLCAweEQwLCAweDFELCAweDQwLCAweEM0LCAweDEwLCAweDFELCAweDVCLCAweDA0LCAweDFGLCAweDUwLAorMHg3NSwgMHg0MCwgMHgzMywgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MiwgMHgzNywgMHg0MCwKKzB4MTEsIDB4MDIsIDB4NzQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NDgsIDB4MzcsIDB4MjAsIDB4MUQsIDB4MDIsIDB4NkMsIDB4MDMsCisweEIwLCAweDBELCAweDQwLCAweDM1LCAweDEwLCAweDhELCAweDA3LCAweDU0LCAweDAzLCAweDE0LCAweDNELCAweDQwLCAweDg3LAorMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg0NCwgMHgwMCwgMHg5OSwgMHgwMCwKKzB4NDQsIDB4MDMsIDB4RDAsIDB4OEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NDQsIDB4MDMsIDB4NTAsIDB4MUQsCisweDQwLCAweDM3LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweEQxLAorMHgwOCwgMHg3NCwgMHgwNywgMHg5MCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMiwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwKKzB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NjUsIDB4MDIsIDB4MTAsIDB4OEQsIDB4NDAsIDB4MDcsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDA0LCAweDAwLCAweDkxLCAweDgwLCAweDA0LAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNSwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwKKzB4MzcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MDAsIDB4ODEsIDB4MDAsCisweDY0LCAweDAzLCAweDk4LCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDhELCAweDAwLCAweDY1LCAweDAzLCAweDkwLCAweDBDLAorMHg0MCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgxNCwgMHgwMywgMHgxMCwgMHg0QywgMHg0MCwgMHg0MywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4MEUsIDB4MDAsIDB4QkIsIDB4NDAsIDB4Q0MsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDE0LCAweDAwLCAweDRGLCAweDAwLCAweDRDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDNGLAorMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwRiwgMHg0MCwgMHgzRiwgMHgwMCwgMHg1MSwgMHgwMCwgMHg3QywKKzB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MTAsIDB4NUYsIDB4NDAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzAsCisweDM0LCAweDAwLCAweDlGLCAweDIwLCAweENDLCAweDAzLCAweDMwLCAweDA1LCAweEMyLCAweDA3LCAweDQwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4NDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsCisweEVGLCAweDQwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEUwLCAweDNGLCAweDAwLCAweDNGLCAweDgwLCAweEJDLCAweDAzLAorMHg3MCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgxMCwgMHgzRiwgMHg4MCwgMHhEQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwKKzB4MjAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MkYsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdCLCAweDAwLCAweEZGLCAweDAxLCAweENDLCAweDI3LCAweEUwLCAweDFGLAorMHhDMCwgMHg3QywgMHgwMiwgMHhGQiwgMHgwMSwgMHhCRSwgMHgwRiwgMHgxMSwgMHgzRiwgMHhDMCwgMHg3QywgMHg4MiwgMHhGMywKKzB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4RkYsIDB4MDAsIDB4RkIsIDB4MDEsIDB4REMsIDB4MDcsIDB4MzAsCisweDlGLCAweEMwLCAweDVFLCAweDAyLCAweEIzLCAweDg0LCAweEVDLCAweDMxLCAweEYwLCAweDFGLCAweEU0LCAweDdGLCAweDAwLAorMHhGRiwgMHhDMSwgMHhFQywgMHgyNCwgMHhCMCwgMHgxNywgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MTAsIDB4NjksIDB4MDAsIDB4RjEsIDB4MTEsIDB4NDAsCisweDAwLCAweDIwLCAweDExLCAweDAxLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDAwLCAweDAxLCAweDE3LCAweDAxLAorMHg3NCwgMHgwNCwgMHhEMCwgMHgxMSwgMHg0MCwgMHgwNCwgMHgyMCwgMHgxRCwgMHgwMSwgMHg0NCwgMHg4NCwgMHhCMCwgMHgwMSwKKzB4NDAsIDB4MTUsIDB4MDEsIDB4RDUsIDB4MDksIDB4NDQsIDB4QjMsIDB4RDAsIDB4MUYsIDB4NDIsIDB4N0YsIDB4MDAsIDB4RkQsCisweDAxLCAweDA0LCAweDEwLCAweDEwLCAweDE5LCAweDQwLCAweDA1LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwMCwgMHhERCwgMHg4NCwgMHgwMCwgMHgxMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMCwKKzB4MjEsIDB4QzksIDB4MDAsIDB4MzAsIDB4MTMsIDB4MTAsIDB4NEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsCisweDgzLCAweEMwLCAweDBELCAweDAwLCAweDMwLCAweDAxLCAweENELCAweDYwLCAweDQwLCAweDAzLCAweDkyLCAweDRDLCAweDQwLAorMHgyMCwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMSwgMHg1MCwgMHgwQywgMHg0MCwgMHgzMywgMHg4MCwgMHhDNSwgMHgwMCwKKzB4NDQsIDB4MTAsIDB4OTEsIDB4MEQsIDB4NjQsIDB4NDQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEE4LCAweDA1LCAweDAwLCAweDFELCAweDAwLCAweDQ2LCAweDgwLCAweDUwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLAorMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxNSwgMHgwMCwgMHg3NCwgMHgwMCwKKzB4RDAsIDB4MDEsIDB4NTAsIDB4MDQsIDB4MDgsIDB4MUQsIDB4MDAsIDB4NTQsIDB4MDAsIDB4OTgsIDB4MDEsIDB4NDAsIDB4MjEsCisweDAwLCAweDk0LCAweDAwLCAweDY0LCAweDExLCAweEQwLCAweDBELCAweDYwLCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDQ0LAorMHgwNiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODgsIDB4MzcsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDEsIDB4MEMsIDB4RDAsIDB4MzQsIDB4MDAsIDB4REIsCisweDAwLCAweDc0LCAweDAzLCAweDM0LCAweDBDLCAweEQwLCAweDMwLCAweDAwLCAweEQzLCAweDgwLCAweDdDLCAweDAzLCAweEYxLAorMHgwRCwgMHg0MCwgMHgzNiwgMHgwOCwgMHhEQiwgMHgwMCwgMHgxQywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMiwgMHhBNiwgMHgwMCwKKzB4ODcsIDB4MDEsIDB4N0QsIDB4MDEsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MkQsIDB4MDQsCisweEIwLCAweEQ0LCAweDQwLCAweDAwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLAorMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4ODAsIDB4RjQsIDB4MDAsIDB4RjAsIDB4MDMsCisweEMwLCAweDBELCAweDAwLCAweDNELCAweDAwLCAweEVELCAweDQwLCAweEYwLCAweDAzLCAweEMwLCAweDNGLCAweDA4LCAweEZGLAorMHgwNSwgMHhDQywgMHgwMywgMHhGMCwgMHgwRiwgMHg0MCwgMHgzRSwgMHgyMCwgMHhGRiwgMHgwMCwgMHhGRSwgMHgwMCwgMHhGMCwKKzB4MUIsIDB4RDAsIDB4MUUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsCisweDA0LCAweEQzLCAweDAxLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEM4LCAweDM0LCAweDEwLCAweEQ3LCAweDA4LCAweDZFLAorMHhBMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhEQiwgMHg4NCwgMHg3QywgMHg4MywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MDgsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QTYsIDB4MjAsIDB4OTcsIDB4MjQsCisweDZFLCAweDA5LCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDI4LCAweERGLCAweDIwLCAweDdDLCAweDAyLCAweDMwLCAweDJELAorMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHhDNCwgMHgwMSwKKzB4MTEsIDB4MDEsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4RDAsIDB4MDYsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDQsIDB4MDQsCisweDE0LCAweDUxLCAweDQwLCAweDA3LCAweDMwLCAweDExLCAweDEwLCAweDVDLCAweDAwLCAweEQ5LCAweDAwLCAweEMxLCAweDQ1LAorMHgyNCwgMHgwRCwgMHhBQSwgMHg2NCwgMHgwMCwgMHg3MCwgMHg0MSwgMHg0MCwgMHg2NCwgMHgwMCwgMHg5QiwgMHgwNCwgMHg3NCwKKzB4MDEsIDB4RDAsIDB4MEQsIDB4NDgsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDQsIDB4NUMsIDB4NkUsIDB4MTAsIDB4MDksIDB4QzAsCisweDRELCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDMyLCAweDgwLCAweEMxLAorMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHg4QywgMHg0MCwgMHgzNCwgMHgwMCwgMHhDNSwgMHgwMSwgMHg0NCwgMHgwNywgMHg5MiwKKzB4MUMsIDB4MDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MDIsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MUMsIDB4NjAsIDB4NzMsIDB4MjAsCisweENELCAweDIzLCAweDM0LCAweDI3LCAweEQwLCAweDFELCAweDQwLCAweEYwLCAweDA0LCAweDgxLCAweDAzLCAweDM0LCAweDAxLAorMHhEMCwgMHgwQywgMHg0MCwgMHg3MywgMHgwMCwgMHhDRCwgMHgwNSwgMHgzNCwgMHgwRCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgxRiwKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NEMsIDB4MDAsIDB4MjEsIDB4MDEsCisweEI0LCAweDA0LCAweEQwLCAweDEzLCAweDQwLCAweDQ4LCAweDAwLCAweDIxLCAweDAxLCAweEM0LCAweDA0LCAweDk4LCAweDUyLAorMHg0NCwgMHg0QiwgMHgwMCwgMHgyMSwgMHgwNSwgMHg5NCwgMHgwNCwgMHhEMCwgMHgxMiwgMHg2OCwgMHg0QiwgMHgwMCwgMHgyRCwKKzB4MDEsIDB4QjAsIDB4MDQsIDB4NTAsIDB4MTIsIDB4NDAsIDB4NzksIDB4MDAsIDB4RTksIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsCisweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweEExLCAweDk0LCAweDI3LCAweDEwLCAweDlBLCAweDQwLCAweDE5LCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDMywgMHgwMCwgMHgzQywKKzB4MDMsIDB4RjAsIDB4OEMsIDB4NDAsIDB4MzAsIDB4MjAsIDB4QzcsIDB4MDAsIDB4MDUsIDB4MjMsIDB4QjAsIDB4NUMsIDB4QzQsCisweDMzLCAweDAwLCAweEMxLCAweDA1LCAweDNDLCAweDAzLCAweEQwLCAweDBDLCAweEMwLCAweDMzLCAweDIwLCAweENGLCAweDg4LAorMHgzQywgMHgwMywgMHhGMiwgMHgwRCwgMHg1MCwgMHhBMCwgMHgwNCwgMHhDMywgMHgwMCwgMHgzNCwgMHgwMywgMHhGMCwgMHg4QywKKzB4QzAsIDB4MzMsIDB4MDYsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDEsIDB4MzAsIDB4ODgsIDB4QzQsIDB4NEIsIDB4NDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDBELCAweDAwLCAweDNGLCAweDgwLCAweEZDLCAweDAwLAorMHhGMCwgMHg4MiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgyRSwgMHgwOCwgMHhENCwgMHgwMCwgMHg3MSwgMHgwMywgMHhDMCwgMHgwNywKKzB4MDIsIDB4MTcsIDB4MDgsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MEQsIDB4MDAsIDB4MUQsIDB4ODAsIDB4NjQsCisweDAwLCAweEYwLCAweDExLCAweEMwLCAweDIwLCAweDAyLCAweEQ4LCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDFGLCAweEMwLAorMHg3RiwgMHgwOCwgMHhGRiwgMHgwMSwgMHhEQywgMHgwMywgMHhGMCwgMHg4QiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEMwLCAweDM1LCAweDEwLCAweENFLCAweDAxLCAweDZDLCAweDAzLCAweEQwLCAweDBDLCAweEMwLCAweDM0LCAweDIwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHg3MywgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4OEQsIDB4QzAsIDB4MzcsCisweDAyLCAweERGLCAweDAwLCAweDdDLCAweDA3LCAweDMwLCAweDFELCAweEMwLCAweDU0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgwOSwgMHgwMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMCwgMHhDMCwgMHgwMiwKKzB4NDAsIDB4MEIsIDB4MDAsIDB4MkQsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MDksIDB4MDAsIDB4MkQsCisweDAwLCAweEI0LCAweDAwLCAweDUwLCAweDAyLCAweDQwLCAweDBCLCAweDAwLCAweDIxLCAweDAwLCAweEE0LCAweDAwLCAweEQwLAorMHgwMiwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMiwgMHg5QywgMHgxQiwgMHhGMCwgMHg0RSwgMHg0OCwgMHgzQiwgMHgwMSwKKzB4RTksIDB4MDIsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEEsIDB4QzAsIDB4NEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweDAyLCAweDc5LCAweDA4LCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweEMwLCAweDFFLCAweDQwLAorMHg3QiwgMHgwMCwgMHhGRCwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRiwgMHg0MCwgMHg3OCwgMHgxMCwgMHhFNCwgMHgwMSwKKzB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4MDgsIDB4N0YsIDB4MDAsIDB4RTUsIDB4MDEsIDB4QjQsIDB4MDcsIDB4NDAsIDB4MUUsCisweDYwLCAweDZCLCAweDA0LCAweEU1LCAweDA1LCAweDk0LCAweDE3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELAorMHgwNSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0NCwgMHgwRSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MjgsIDB4MDMsIDB4ODAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDQsIDB4MDMsCisweDAwLCAweDBELCAweDAwLCAweDA0LCAweDAwLCAweEQ4LCAweDAxLCAweDQyLCAweDA1LCAweDAwLCAweDA4LCAweDAwLCAweDM0LAorMHg4MCwgMHg1MiwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHg5MCwgMHgwMCwgMHg0MCwKKzB4RTMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzksIDB4MDAsCisweDM0LCAweDBFLCAweDFDLCAweDA4LCAweDQwLCAweDRCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNywgMHhBOCwgMHgxNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwKKzB4NUYsIDB4MDAsIDB4NDUsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NTcsIDB4MDAsIDB4N0MsIDB4MDEsCisweDMwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDU3LCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDFGLAorMHgwMCwgMHg0RiwgMHgwMCwgMHhEQywgMHg4MSwgMHg3OCwgMHgwNSwgMHhDNCwgMHgxNywgMHgwMCwgMHg1RiwgMHg4MCwgMHhGQywKKzB4MjUsIDB4MzAsIDB4NDcsIDB4NDAsIDB4NUUsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDAwLCAweDhGLCAweDIwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYyLCAweDAzLCAweEMwLCAweDBGLCAweDA4LCAweDNGLAorMHgwMCwgMHhEQywgMHgwMCwgMHhGMSwgMHgwMywgMHhDMCwgMHgwRiwgMHgyMCwgMHgzRCwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MDMsIDB4QzgsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4NDAsIDB4ODcsIDB4MDEsCisweDFGLCAweDAwLCAweDVDLCAweDIwLCAweDcwLCAweDAwLCAweEMwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDIwLAorMHhGMCwgMHgwMSwgMHhFMCwgMHg0OSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwKKzB4NjcsIDB4MDAsIDB4OUYsIDB4MDgsIDB4N0MsIDB4MDIsIDB4RjgsIDB4MjksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDQsCisweDdDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLCAweDI0LCAweDIwLCAweDk3LCAweDA5LCAweDRDLCAweDAyLCAweEIwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHg1OSwgMHhDMCwgMHgyNCwgMHgwMSwgMHg5RiwKKzB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MTYsIDB4RjAsCisweDA5LCAweEM4LCAweDQzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweEE2LAorMHgwNiwgMHg5RCwgMHgyMCwgMHg3NCwgMHgwNiwgMHhEOCwgMHgzOSwgMHg0NCwgMHgyMywgMHgyMCwgMHg5MSwgMHgwMSwgMHg3NCwKKzB4MDYsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDgsIDB4ODMsIDB4MDEsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDQsCisweDI3LCAweDAwLCAweDlELCAweDEwLCAweDc0LCAweDA2LCAweEQwLCAweDE4LCAweDUwLCAweEU0LCAweDAwLCAweEJELCAweDAwLAorMHhDNCwgMHgwMiwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyQywgMHgwMSwgMHhCRCwgMHg0MCwgMHg3NCwgMHgwRSwgMHhEMiwgMHgwOSwKKzB4NDIsIDB4MDcsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDgsCisweEJELCAweDAwLCAweEY0LCAweDA2LCAweEQyLCAweDBCLCAweDQwLCAweDJGLCAweDAwLCAweEIxLCAweDQwLCAweEY0LCAweDEyLAorMHg1MCwgMHg4QiwgMHg0MCwgMHgyQywgMHgyMCwgMHhCRCwgMHgwMCwgMHhFNCwgMHgwMiwgMHg5MCwgMHgwQiwgMHg2MCwgMHgyRSwKKzB4MDAsIDB4QjUsIDB4MDEsIDB4RjQsIDB4MEEsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NjQsCisweDEzLCAweEQyLCAweDA5LCAweDQwLCAweDI0LCAweDgwLCAweDlELCAweDAwLCAweDc0LCAweDQzLCAweEQwLCAweDA5LCAweDYwLAorMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMiwgMHgyOCwgMHgwMCwgMHhBRCwKKzB4MDIsIDB4QjQsIDB4MEEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QTEsIDB4MDAsIDB4QjYsIDB4MEEsIDB4RDAsCisweDJBLCAweDUwLCAweDI4LCAweDAyLCAweEJELCAweDAwLCAweEU1LCAweDBBLCAweDEwLCAweDBBLCAweDYwLCAweEFCLCAweDAwLAorMHhBRCwgMHgwMCwgMHhCNiwgMHgwMiwgMHhEMCwgMHgyQiwgMHg2MiwgMHhBMSwgMHgwMCwgMHg4RCwgMHgyMCwgMHgwNCwgMHg4QSwKKzB4RDIsIDB4MjgsIDB4NDAsIDB4MjAsIDB4ODgsIDB4OEQsIDB4ODAsIDB4MzQsIDB4MjIsIDB4RDAsIDB4MjgsIDB4NDAsIDB4NDMsCisweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDFGLCAweDAwLAorMHg3QywgMHgwMCwgMHhEMCwgMHgwMSwgMHhDMCwgMHg4NywgMHg0MiwgMHgxMywgMHgwMCwgMHg3RSwgMHgwMCwgMHg3MCwgMHgwMSwKKzB4QzAsIDB4ODQsIDB4MDAsIDB4NTcsIDB4MDAsIDB4MkMsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MUYsCisweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAzLCAweEMyLCAweDE1LCAweDAwLCAweDFGLCAweDAxLCAweDRELCAweDA0LCAweEUwLAorMHgxMSwgMHhEMCwgMHg0NCwgMHgwMCwgMHgxRCwgMHgwMSwgMHgzQywgMHgwOCwgMHhGMCwgMHgwMCwgMHhFMiwgMHg3NywgMHhDMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MjcsIDB4MEQsIDB4OUYsIDB4MDEsIDB4N0MsCisweDg2LCAweEYyLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlELCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDE5LCAweDQ0LAorMHgyNywgMHgwMSwgMHg5MywgMHgwMCwgMHg1QywgMHgwNiwgMHhFMCwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzgsIDB4NkUsIDB4MDAsIDB4QkYsIDB4MDIsIDB4RjQsIDB4MEUsIDB4RjAsIDB4MzksCisweEMwLCAweEE3LCAweDA4LCAweDlGLCAweDAyLCAweEZDLCAweDEyLCAweEYwLCAweDFGLCAweEMwLCAweDY3LCAweDYwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwgMHgwMCwgMHhCMywgMHgwMiwgMHhGQywgMHgwMiwKKzB4RDEsIDB4MEEsIDB4QzAsIDB4MjcsIDB4MTAsIDB4QkUsIDB4MDAsIDB4RDgsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MjcsCisweDAyLCAweEJGLCAweDAwLCAweDc0LCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweEFGLCAweDAwLCAweEI3LCAweDAwLCAweERDLAorMHgwMiwgMHhDMCwgMHgyQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCMywgMHgwMSwgMHhCQywgMHg0NiwgMHgzMCwgMHhEOSwgMHhDMCwKKzB4NkMsIDB4MDEsIDB4QjMsIDB4MTEsIDB4QzgsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDA1LCAweDFCLCAweDA1LCAweDc0LCAweDE0LCAweEQwLAorMHgwMSwgMHg0MCwgMHgwNywgMHgwNCwgMHgxRCwgMHgwMCwgMHg3NCwgMHg1NCwgMHhEMCwgMHgxMSwgMHg0MCwgMHgwNywgMHgwMSwKKzB4MUQsIDB4MDAsIDB4NzQsIDB4NTQsIDB4RDAsIDB4MDEsIDB4QzAsIDB4NDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsCisweDkwLCAweDUxLCAweDQwLCAweDQ3LCAweDA1LCAweDExLCAweDIwLCAweDc0LCAweDE0LCAweDUwLCAweDMxLCAweDQwLCAweDg1LAorMHgwMCwgMHgxMSwgMHgwMiwgMHg1NCwgMHgwMCwgMHhEMCwgMHg1MCwgMHg0MSwgMHg3MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDEsIDB4ODEsIDB4MDAsIDB4MzQsIDB4NDIsIDB4RDAsIDB4MDgsCisweDQwLCAweDIzLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDAyLCAweEQwLCAweDQ4LCAweDQxLCAweDIzLCAweDIxLCAweDhDLAorMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyNywgMHgyMCwgMHg5NCwgMHgwMCwgMHgxNCwgMHgwMiwgMHg5MCwKKzB4MDgsIDB4NDAsIDB4MjcsIDB4MDAsIDB4ODEsIDB4MDIsIDB4MzQsIDB4NTIsIDB4NTAsIDB4QzgsIDB4NDAsIDB4MjAsIDB4MDIsCisweDg1LCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDQzLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwgMHg5OSwgMHgyMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MTAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4ODAsCisweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDkwLCAweDA5LAorMHgwMCwgMHhBNywgMHgwMSwgMHg5MSwgMHgwMCwgMHg3MCwgMHg0MiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgzNywgMHgwMCwgMHg5NSwKKzB4MDAsIDB4NTYsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA1LCAweDA4LCAweDI1LCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHhGQywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkIsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NUMsIDB4MDIsIDB4OTAsIDB4MEIsIDB4QzAsCisweDJGLCAweEMwLCAweDkzLCAweDAxLCAweEZDLCAweDJBLCAweDcxLCAweDBCLCAweEM4LCAweDIwLCAweDQwLCAweDk3LCAweDQwLAorMHg0QywgMHg5RSwgMHhGMCwgMHgyQiwgMHg0MCwgMHgxNywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4MDAsIDB4MjUsIDB4MDQsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4RTEsIDB4MjcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM0LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDNCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgyMCwgMHg3QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMiwgMHg2NywKKzB4MDAsIDB4OUYsIDB4ODksIDB4NkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUIsIDB4ODAsIDB4N0MsCisweDEyLCAweEYwLCAweDA5LCAweEMwLCAweDUzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzQSwgMHgwMSwgMHhEMCwgMHgwNiwgMHgwMCwgMHgxMywKKzB4MDAsIDB4NkMsIDB4MDAsIDB4RjIsIDB4MDEsIDB4QzAsIDB4MDQsIDB4ODAsIDB4MTMsIDB4MjgsIDB4N0MsIDB4MDAsIDB4QjIsCisweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDEzLCAweDAwLCAweDdDLCAweDQwLCAweEYwLCAweDAxLCAweEMyLCAweDg3LCAweDAwLAorMHgxRiwgMHgwMCwgMHgwQywgMHgwOCwgMHgzMSwgMHgwMSwgMHhEMCwgMHgwNCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0RCwgMHg4OCwKKzB4MzAsIDB4MjEsIDB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsCisweERDLCAweDAwLCAweDVELCAweDQwLCAweDc0LCAweDExLCAweDE1LCAweDU3LCAweEMwLCAweDE0LCAweDEwLCAweDU1LCAweDQwLAorMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNCwgMHgwMCwgMHg3QiwgMHgwMCwgMHg3NCwgMHgwMSwgMHgxMCwgMHgwNSwKKzB4NDAsIDB4NTQsIDB4MDAsIDB4NkIsIDB4MDIsIDB4RjQsIDB4MEQsIDB4MzQsIDB4MDUsIDB4NDAsIDB4OUIsIDB4MDAsIDB4N0QsCisweDAyLCAweDZFLCAweDAxLCAweEIwLCAweDA1LCAweDQwLCAweDlDLCAweDAwLCAweDdCLCAweDFCLCAweEM0LCAweDA1LCAweDEwLAorMHgwNSwgMHhDOCwgMHg1MiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHhGNiwKKzB4ODIsIDB4Q0QsIDB4MDksIDB4MzQsIDB4MDMsIDB4MTAsIDB4MzgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsCisweDAzLCAweEMwLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweDQ1LCAweDA1LCAweDM0LCAweDAzLCAweDkwLCAweDA4LCAweDQwLAorMHgzMiwgMHgwMiwgMHhDMSwgMHgwNCwgMHgzNCwgMHgwMSwgMHgxOCwgMHgwQywgMHg0MCwgMHhFMywgMHgwMywgMHg4RCwgMHgxMCwKKzB4MjQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDQsIDB4QTIsIDB4MDEsIDB4ODksIDB4MDMsIDB4MjQsIDB4MUIsIDB4MUQsIDB4MEMsCisweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDE4LCAweDgwLAorMHhBRCwgMHg0NCwgMHhGNCwgMHgxNywgMHgxMCwgMHgxQSwgMHg0NCwgMHg3QywgMHgwMCwgMHhFNSwgMHgwMCwgMHhCNCwgMHgxMiwKKzB4RDIsIDB4NUEsIDB4NDAsIDB4N0MsIDB4MDEsIDB4RTksIDB4MDAsIDB4RjYsIDB4MTcsIDB4MTAsIDB4MUEsIDB4NDAsIDB4MkEsCisweDAwLCAweEUxLCAweDAwLCAweEY0LCAweDBGLCAweDkwLCAweDBFLCAweDQwLCAweDNCLCAweDAxLCAweDhELCAweDExLCAweEY0LAorMHgwQiwgMHg5MCwgMHg4RSwgMHg0MCwgMHgyOCwgMHgwNCwgMHhBOSwgMHgyMCwgMHhBNCwgMHgwRiwgMHgxMCwgMHg1RSwgMHg0MCwKKzB4MTIsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsCisweDIxLCAweEJDLCAweDFFLCAweDEwLCAweDFFLCAweEMwLCAweDc4LCAweDAyLCAweEUzLCAweDAxLCAweEJDLCAweDA3LCAweEQyLAorMHg1RiwgMHhDMCwgMHg3OCwgMHgwNCwgMHhFNSwgMHgwMSwgMHhCQywgMHg5NywgMHhCMCwgMHgxQSwgMHg2MCwgMHg3RSwgMHgwMCwKKzB4RTEsIDB4MDEsIDB4QkMsIDB4MDcsIDB4MTksIDB4M0UsIDB4QzAsIDB4N0IsIDB4MTEsIDB4QUYsIDB4MDEsIDB4QTYsIDB4MEUsCisweDMwLCAweDFDLCAweDg4LCAweDZBLCAweDAwLCAweEFCLCAweDAxLCAweEVDLCAweDA1LCAweDMwLCAweDNFLCAweEMwLCAweDUwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgxNSwgMHgwOCwgMHg5RiwgMHgwMCwKKzB4M0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzgsIDB4QjEsIDB4MDEsIDB4REYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4ODksCisweERBLCAweDMzLCAweDAyLCAweERDLCAweDAwLCAweDNDLCAweDIzLCAweEYwLCAweDA4LCAweDgwLCAweDI1LCAweDAwLCAweDlGLAorMHgwMCwgMHgzQywgMHgwMywgMHg3MCwgMHgwOSwgMHg4MCwgMHgxNywgMHgxMCwgMHg5RCwgMHgwMCwgMHg2QywgMHgwMiwgMHhDMCwKKzB4MEQsIDB4QzAsIDB4MjEsIDB4MDAsIDB4OEYsIDB4MDAsIDB4NUMsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzgsIDB4NDMsIDB4NjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDdCLCAweDAwLCAweEYzLCAweDExLCAweENDLAorMHgwNywgMHhCOCwgMHgwQiwgMHhDMCwgMHg3RiwgMHgwNCwgMHhGRiwgMHgwMSwgMHhFRCwgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwKKzB4N0YsIDB4MjAsIDB4RUYsIDB4MDksIDB4NEMsIDB4MjcsIDB4MzAsIDB4MUIsIDB4QzAsIDB4N0QsIDB4MDQsIDB4RkIsIDB4MDEsCisweDlDLCAweDA3LCAweEIwLCAweDlFLCAweEMyLCAweDVELCAweDA0LCAweEJGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLAorMHhDOCwgMHg2QywgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRSwgMHhDMCwgMHgwOCwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MTksIDB4MDYsIDB4RjEsIDB4NDAsIDB4QzQsIDB4MTMsCisweDM5LCAweDRBLCAweDQwLCAweDNCLCAweDAxLCAweEVELCAweDAwLCAweEM0LCAweDAyLCAweDEwLCAweDA4LCAweDQ4LCAweDNCLAorMHgwMSwgMHhDNywgMHgwMiwgMHg4NCwgMHg3NywgMHgxMCwgMHgwQSwgMHg0MCwgMHgzQywgMHgwMCwgMHg2MSwgMHgwMCwgMHg4NCwKKzB4MDMsIDB4NDAsIDB4MUUsIDB4NDAsIDB4MzksIDB4MDAsIDB4QUQsIDB4ODQsIDB4QTQsIDB4MTMsIDB4RjAsIDB4MEUsIDB4NDAsCisweDI4LCAweDAwLCAweEU1LCAweDA4LCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCQywgMHgwMCwgMHhBMSwgMHgwOCwgMHg4NCwgMHgwMiwgMHgwMSwKKzB4OEEsIDB4NDEsIDB4M0IsIDB4MTAsIDB4RkQsIDB4MDAsIDB4ODQsIDB4NDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MjAsCisweEVELCAweDAyLCAweDgwLCAweDE3LCAweDEwLCAweDBCLCAweDQxLCAweDI5LCAweDAwLCAweEYxLCAweDAwLCAweDk0LCAweDAzLAorMHgxMCwgMHg0RiwgMHg0MCwgMHgxQSwgMHgwMCwgMHhBRCwgMHg4MCwgMHhCNCwgMHg0MiwgMHhEMCwgMHgxRSwgMHg0MCwgMHgyMCwKKzB4MDAsIDB4RTUsIDB4MDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MUYsIDB4NDAsIDB4MjAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDAzLCAweDAwLCAweDkwLCAweDAyLCAweDQ0LCAweDBFLCAweDEwLCAweDNDLAorMHg0MCwgMHhCMywgMHgwMiwgMHhDRCwgMHgwMiwgMHgwNiwgMHgwRSwgMHgwMCwgMHgzOCwgMHg0MCwgMHhGMywgMHgwMSwgMHhDOSwKKzB4MDgsIDB4MDQsIDB4NEYsIDB4MTEsIDB4NjgsIDB4NDIsIDB4QTUsIDB4MDIsIDB4MDEsIDB4MEIsIDB4MDQsIDB4NEIsIDB4NTAsCisweDA4LCAweDQxLCAweDEzLCAweDIyLCAweDhELCAweDgxLCAweDY2LCAweDFBLCAweDUyLCAweDBDLCAweDQ0LCAweDIwLCAweDAwLAorMHhDNSwgMHg4MCwgMHg3NCwgMHgwOCwgMHhEMCwgMHgwQywgMHg0MCwgMHgxOCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4NjUsIDB4MDAsIDB4RDIsIDB4MDEsIDB4NEMsIDB4NEYsIDB4MzQsIDB4MTgsIDB4QzAsCisweDdGLCAweDAwLCAweERGLCAweDAzLCAweDBDLCAweDA3LCAweDMwLCAweDNELCAweEMxLCAweEJGLCAweDA0LCAweENELCAweDAxLAorMHg0RCwgMHgwQiwgMHgzNiwgMHgyRCwgMHhFNCwgMHhCNSwgMHgwMiwgMHg5MywgMHgwMiwgMHg1NCwgMHg0MiwgMHgxMCwgMHgxOSwKKzB4QzAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDUsIDB4NzQsIDB4MEYsIDB4RDAsIDB4MEQsIDB4RDAsIDB4MzQsIDB4MDAsIDB4OTcsCisweDIwLCAweDdDLCAweDAyLCAweEYyLCAweEJELCAweEQ1LCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHhBNywgMHgyMCwgMHg5RiwgMHgxOCwgMHg3QywgMHgwMywgMHg3MCwgMHgyOSwgMHhDMCwgMHgzNywKKzB4MDEsIDB4REUsIDB4MDgsIDB4N0MsIDB4MDMsIDB4RjQsIDB4NEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDIsIDB4N0MsCisweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDI2LCAweDAwLCAweDk3LCAweDgyLCAweDdDLCAweDBCLCAweDcwLCAweDhELCAweEUwLAorMHgzNSwgMHgwMCwgMHhERiwgMHgwMiwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMiwKKzB4N0MsIDB4MkEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QTcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDgwLCAweDBBLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweENDLCAweDQzLCAweDcwLCAweDBGLCAweEMxLCAweDNDLCAweDAwLAorMHhGRiwgMHgxNSwgMHhEQywgMHg2NiwgMHgzMCwgMHgxQiwgMHhDMCwgMHgzRiwgMHgyMCwgMHhGRiwgMHgwMCwgMHhDQywgMHgwMywKKzB4RjAsIDB4OUYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4MzMsIDB4MTAsIDB4RkMsIDB4MDMsIDB4RTAsIDB4MEIsIDB4QzAsIDB4N0YsCisweDEwLCAweEUzLCAweDQ5LCAweENDLCAweDAzLCAweDMwLCAweDBGLCAweEMwLCAweEJGLCAweDAwLCAweEJGLCAweDIyLCAweEZDLAorMHg0MCwgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNywgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwKKzB4MjAsIDB4NjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4ODMsIDB4MTAsIDB4MkQsIDB4NDAsIDB4MzQsIDB4MDgsIDB4REQsCisweDQwLCAweDc0LCAweDAyLCAweDUwLCAweDA5LCAweDQ0LCAweDM3LCAweDA4LCAweERELCAweDAzLCAweDQ0LCAweDAzLCAweEQwLAorMHgxOSwgMHg2OCwgMHgyNywgMHg4MCwgMHgxNSwgMHgxMywgMHg3NCwgMHg0NywgMHhEMiwgMHg5OSwgMHhDNCwgMHg1MSwgMHgyOCwKKzB4RDEsIDB4MDMsIDB4NkMsIDB4MjcsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDQsIDB4N0MsIDB4MkYsCisweDExLCAweDBELCAweDQwLCAweDA3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLAorMHg0NiwgMHgwNCwgMHhERCwgMHgwMCwgMHg0NCwgMHgxMiwgMHgxMiwgMHgwOSwgMHg0MSwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwKKzB4NzQsIDB4MDMsIDB4MTIsIDB4OEQsIDB4NDIsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDEsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsCisweDQyLCAweDM3LCAweDIwLCAweDkxLCAweDAxLCAweDc0LCAweDA3LCAweEQwLCAweDA5LCAweDQ0LCAweDE3LCAweDAyLCAweDk1LAorMHg1MCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0OCwgMHgzNiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwQSwgMHgxMCwKKzB4MEQsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsCisweDAwLCAweENELCAweDAwLCAweDA1LCAweDAyLCAweDEwLCAweDA4LCAweDUwLCAweDMyLCAweDA4LCAweENELCAweDAwLCAweDc0LAorMHgwMywgMHg1MCwgMHg4QywgMHg0MCwgMHgzMywgMHgwMCwgMHhERCwgMHgwMiwgMHgwNCwgMHgxMywgMHhEMCwgMHgwOCwgMHg0MCwKKzB4MzYsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NjEsIDB4MzUsIDB4NDAsIDB4NDUsIDB4ODAsCisweDI0LCAweDAyLCAweDk4LCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDRELCAweDIwLCAweDM0LCAweDAwLCAweDEwLCAweDBDLAorMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyNiwgMHgwMCwKKzB4OUYsIDB4MjAsIDB4NEMsIDB4MDIsIDB4MzQsIDB4MDEsIDB4QzAsIDB4M0UsIDB4MDAsIDB4REYsIDB4MDAsIDB4NTgsIDB4ODIsCisweDMwLCAweDA5LCAweEMwLCAweDNGLCAweDA4LCAweERGLCAweDAyLCAweDg0LCAweDQzLCAweEYwLCAweDBELCAweDQwLCAweDI3LAorMHgwMCwgMHgxMSwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHg0MCwgMHgxNywgMHg4MCwgMHg5NywgMHg4MCwgMHg0QywKKzB4MDIsIDB4MzAsIDB4MEUsIDB4ODAsIDB4MTcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzQsIDB4MEYsIDB4QzgsCisweDA3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEIwLCAweDJGLCAweDAwLCAweEJGLAorMHg0MCwgMHhGQywgMHgwMiwgMHhCMCwgMHgwNywgMHhDMCwgMHgzRCwgMHgwOCwgMHhFRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwKKzB4NEIsIDB4QzgsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MDAsCisweDJGLCAweDAwLCAweEZDLCAweDAzLCAweEQwLCAweDA5LCAweEMwLCAweDFGLCAweDAwLCAweDdCLCAweDAwLCAweEY4LCAweDAyLAorMHhGMCwgMHgwRiwgMHhDMiwgMHgxRiwgMHgyMCwgMHg3RiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgxNywKKzB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4NkYsIDB4MDAsIDB4MkYsIDB4MDQsCisweENDLCAweDA2LCAweDcwLCAweDQzLCAweEMxLCAweDBGLCAweDAxLCAweEUzLCAweDAxLCAweENDLCAweDEwLCAweDc0LCAweDAzLAorMHhDMCwgMHgwRiwgMHgwMCwgMHgzMywgMHgxMCwgMHhDQywgMHg4MCwgMHgzMCwgMHgwMywgMHhEMCwgMHgwQywgMHgwMCwgMHgzMywKKzB4MDQsIDB4Q0MsIDB4MDAsIDB4MzQsIDB4NDMsIDB4QzgsIDB4N0UsIDB4MDIsIDB4QjMsIDB4MDAsIDB4RkMsIDB4NTMsIDB4RjAsCisweDEyLCAweEMwLCAweDZELCAweDAyLCAweEFGLCAweDAxLCAweEZDLCAweDA2LCAweEYwLCAweDRCLCAweEMwLCAweDBGLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2NywgMHgwMCwgMHgxRCwgMHhBQiwgMHg0NCwKKzB4MDcsIDB4MTAsIDB4MzUsIDB4NDgsIDB4RDcsIDB4MDIsIDB4RDEsIDB4QTEsIDB4NDQsIDB4MEQsIDB4MTAsIDB4MzUsIDB4NDAsCisweDU3LCAweDAyLCAweDUxLCAweDQzLCAweDRDLCAweDBELCAweDEwLCAweEI1LCAweDQwLCAweEQ0LCAweDAyLCAweDUxLCAweDAzLAorMHg0NCwgMHgwRCwgMHgxMCwgMHg5NSwgMHg0MCwgMHgzMywgMHgxMSwgMHhEMSwgMHgwMywgMHg3NCwgMHg4RiwgMHhEMCwgMHgxOSwKKzB4NDAsIDB4MjcsIDB4MDEsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDQsIDB4RDIsIDB4MTEsIDB4NDAsIDB4MDcsIDB4NjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEE4LCAweDIzLCAweDAwLCAweDBELCAweDAwLCAweDQ0LCAweDAzLAorMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHg0MCwgMHhDMSwgMHgwMCwgMHgxNCwgMHgwQSwgMHgxOCwgMHg4OCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MEEsIDB4NTAsIDB4MDgsIDB4NDgsIDB4MjAsIDB4MDAsIDB4ODksIDB4MDgsIDB4MDYsCisweDBBLCAweDEwLCAweDA4LCAweDQwLCAweDMzLCAweDAxLCAweDgxLCAweDAyLCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLAorMHgwMSwgMHgxMCwgMHg4NSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHg0NywgMHg4MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MjUsIDB4MDIsIDB4MUQsIDB4QzAsIDB4NjQsIDB4QzcsIDB4MTAsCisweDA1LCAweDQ0LCAweDM3LCAweDAyLCAweEQxLCAweDAwLCAweDU2LCAweDA4LCAweDEwLCAweDA1LCAweDQwLCAweEI3LCAweDA5LAorMHg5MSwgMHgwMywgMHg2NCwgMHgwMywgMHg1MCwgMHgwOSwgMHg0MCwgMHgzNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwRSwKKzB4MTAsIDB4MDksIDB4NDIsIDB4MzcsIDB4MDEsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MTksIDB4NDAsIDB4NTcsCisweDAwLCAweERELCAweDAxLCAweDc0LCAweDA1LCAweEQwLCAweDE5LCAweDQxLCAweDBGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgyNywgMHgwMCwgMHhERiwgMHg1QSwgMHgwQywgMHgwRiwgMHg3MCwgMHg5MSwKKzB4QzAsIDB4QzcsIDB4MDQsIDB4RDMsIDB4MDEsIDB4NUMsIDB4MjQsIDB4MzAsIDB4MTEsIDB4QzIsIDB4QzcsIDB4MDAsIDB4MTMsCisweDAyLCAweDRDLCAweDAwLCAweDcwLCAweDIxLCAweEMxLCAweEM0LCAweDg2LCAweDEzLCAweDFCLCAweDRDLCAweDA4LCAweDMwLAorMHgwMSwgMHhDMCwgMHgzNiwgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHg1OSwgMHhDMCwgMHhFNSwgMHgwMCwKKzB4OUYsIDB4MDcsIDB4N0MsIDB4MTYsIDB4RjAsIDB4MzksIDB4QzAsIDB4MEIsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDJELCAweDIwLCAweEJGLCAweDAwLCAweERDLCAweDAzLCAweEYwLCAweDE3LCAweEMwLAorMHg0RiwgMHgwMCwgMHhGRCwgMHgwMiwgMHhFQywgMHgwMSwgMHhCMCwgMHgzRiwgMHhDMCwgMHgxQSwgMHg0MCwgMHg2RiwgMHgwMCwKKzB4OUMsIDB4MEQsIDB4QjAsIDB4MDcsIDB4QzAsIDB4NUIsIDB4MjAsIDB4N0YsIDB4MDAsIDB4RkQsIDB4MDEsIDB4RjAsIDB4MDcsCisweEMyLCAweDdGLCAweDQwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweDdGLAorMHgwMCwgMHhGQywgMHgwMSwgMHhGMiwgMHgwMywgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDgsIDB4MjUsIDB4MDAsIDB4RDMsIDB4MTMsIDB4NEMsIDB4MjMsIDB4RjAsIDB4MDksIDB4RDAsIDB4QTAsCisweDAwLCAweERGLCAweDExLCAweDFDLCAweDBBLCAweDcwLCAweDA5LCAweEUwLCAweDI3LCAweDAwLCAweDFGLCAweDAyLCAweDRDLAorMHgyQSwgMHgzMCwgMHgyQywgMHhDMCwgMHhBNywgMHgwMiwgMHg4MywgMHgwMiwgMHgwRCwgMHgwMiwgMHhGMCwgMHgyRCwgMHg0MSwKKzB4NzQsIDB4MDEsIDB4RDMsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MjksIDB4QzAsIDB4OTQsIDB4MDAsIDB4OUYsIDB4MEUsCisweDRDLCAweDBBLCAweEYwLCAweDI5LCAweEMwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMywgMHhBMCwgMHg2NCwgMHgwMSwgMHg4MSwgMHgyMiwgMHg0NCwgMHgwMywgMHhEMCwgMHhCNSwgMHg0MCwgMHhFNCwgMHgwMiwKKzB4Q0QsIDB4MDIsIDB4NDQsIDB4MjgsIDB4RDAsIDB4QUQsIDB4NDEsIDB4QjcsIDB4MDYsIDB4MUQsIDB4MUEsIDB4NDQsIDB4MDcsCisweDEyLCAweEFELCAweDQyLCAweEI3LCAweDAwLCAweDkxLCAweDBCLCAweDZDLCAweDJBLCAweEQwLCAweDBELCAweDQxLCAweEI1LAorMHgwOCwgMHhEMSwgMHgwMSwgMHhDNCwgMHg4MywgMHhEMCwgMHgwRCwgMHhDMCwgMHgxNCwgMHgwMCwgMHhEMSwgMHgwMSwgMHg0NCwKKzB4OTksIDB4RDAsIDB4MTksIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweDIwLCAweEUyLCAweDAxLCAweDAxLCAweDAwLCAweDE0LCAweDEzLCAweEQwLCAweDAwLCAweDQwLCAweDAwLCAweDI4LCAweENELAorMHgwMCwgMHgyMCwgMHgyNCwgMHg4MCwgMHgxMCwgMHg0MCwgMHg0MywgMHgwMCwgMHgwRCwgMHgwMSwgMHgwNiwgMHg5MCwgMHgxMCwKKzB4OTAsIDB4NDAsIDB4NDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MjQsIDB4RDAsIDB4MTAsIDB4NDAsIDB4MzQsIDB4MDAsCisweDgxLCAweDgwLCAweDI0LCAweDgzLCAweDkwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDQyLAorMHhEMSwgMHgwMCwgMHg0MywgMHgwRiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4NkEsIDB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4OTgsIDB4NDMsIDB4NTgsIDB4MDAsIDB4RUQsIDB4MDEsCisweEI0LCAweDA3LCAweEQwLCAweDEyLCAweDQwLCAweDZCLCAweDAwLCAweDRDLCAweDAxLCAweDA0LCAweDA0LCAweDEwLCAweDFFLAorMHg0MCwgMHg2MywgMHgwMCwgMHhDMSwgMHgxMSwgMHg4NCwgMHgwNSwgMHhEMCwgMHgxNCwgMHg1MCwgMHg3OCwgMHgwMCwgMHhFMSwKKzB4MDEsIDB4QTQsIDB4MDcsIDB4RDAsIDB4MEIsIDB4NDAsIDB4N0EsIDB4MTIsIDB4QjEsIDB4MDEsIDB4ODUsIDB4MDYsIDB4RDAsCisweDEyLCAweDQ4LCAweDEzLCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIyLAorMHgwMCwgMHgwMywgMHgwOCwgMHgxQywgMHgwMywgMHhGMCwgMHhBOCwgMHhDOCwgMHgwMCwgMHg4NCwgMHhDRiwgMHgwMCwgMHgzQywKKzB4ODMsIDB4NzAsIDB4MEMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4Q0EsCisweDEzLCAweDEwLCAweDQzLCAweDAwLCAweDI0LCAweDAxLCAweEYwLCAweEUwLCAweEMwLCAweDMwLCAweDQwLCAweDgzLCAweDE4LAorMHgyQywgMHgwMywgMHhGMCwgMHg4OCwgMHhDMCwgMHgyNCwgMHg0MCwgMHg0NywgMHgwOCwgMHgwQywgMHgwMywgMHhGMCwgMHgwMCwKKzB4QzEsIDB4NEIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MzksIDB4NDAsCisweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYxLCAweDhCLCAweEMwLCAweDFGLCAweDIwLCAweEZGLCAweDAwLCAweENDLCAweDAzLAorMHhGOCwgMHgwNywgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHg4QiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDgsIDB4RkMsIDB4MDEsIDB4RjAsIDB4ODMsIDB4RTAsIDB4M0YsIDB4MDAsIDB4QUYsIDB4MDAsIDB4REQsCisweDQzLCAweEYwLCAweDRGLCAweEMwLCAweDFELCAweDAwLCAweDdGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDgzLCAweEMwLAorMHgwQiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHg2NywgMHgwMCwgMHg1MywKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzYsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDkzLCAweDgwLCAweDdDLCAweDA3LCAweDMyLCAweDAxLCAweEMyLCAweDQ0LCAweDAwLAorMHgxMywgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5MywgMHgwMCwgMHg1QywgMHgwMywKKzB4RjAsIDB4MDksIDB4QzAsIDB4NTcsIDB4MDAsIDB4NTMsIDB4ODAsIDB4N0MsIDB4MDEsIDB4MzAsIDB4MTksIDB4QzAsIDB4NDAsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDk4LCAweDM5LCAweDAwLCAweEUxLCAweDAwLAorMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwOCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwQSwKKzB4NDAsIDB4MjMsIDB4NDAsIDB4RTEsIDB4MDAsIDB4MzYsIDB4MDMsIDB4MDQsIDB4MEMsIDB4NDAsIDB4MjgsIDB4NDAsIDB4RTEsCisweDIwLCAweDA0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEU1LCAweDAwLCAweEI0LCAweDEzLCAweEQwLAorMHgwQSwgMHg0MCwgMHgzQiwgMHgwMCwgMHg2MSwgMHgwMCwgMHhGNCwgMHgwMSwgMHhCMSwgMHgwMiwgMHg0MCwgMHg0OCwgMHg2MCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjEsIDB4MDEsIDB4QjQsCisweDA3LCAweEQwLCAweDFDLCAweDQ0LCAweDc4LCAweDAwLCAweEU1LCAweDExLCAweEI2LCAweDA3LCAweDUwLCAweDFFLCAweDQwLAorMHg1QiwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxNiwgMHg0MCwgMHg1MCwgMHgwMCwgMHg0MSwgMHgwMSwKKzB4ODQsIDB4MDcsIDB4MTQsIDB4M0UsIDB4NDAsIDB4N0YsIDB4MDAsIDB4RTEsIDB4MDEsIDB4OTQsIDB4MDcsIDB4RDAsIDB4MUEsCisweDQwLCAweERGLCAweDAwLCAweDYxLCAweDAxLCAweEY0LCAweDA3LCAweDEwLCAweDE4LCAweDUwLCAweDEwLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyMCwgMHgzMywgMHgwMCwgMHhDMSwgMHgxMywgMHgzNCwgMHgwMSwKKzB4RDAsIDB4OUMsIDB4NDAsIDB4QjAsIDB4MDQsIDB4OEQsIDB4MDEsIDB4MzYsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsCisweDAwLCAweEMxLCAweDAyLCAweDM0LCAweDA3LCAweDEwLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDA0LAorMHgwMywgMHgxMCwgMHgyQywgMHg0MCwgMHg2MywgMHgwMiwgMHhDNSwgMHgwOCwgMHgzNCwgMHgwMywgMHhEMCwgMHhBQywgMHg0MSwKKzB4RDMsIDB4MDAsIDB4NDEsIDB4NjIsIDB4MzQsIDB4ODUsIDB4OTAsIDB4MUMsIDB4NDAsIDB4NTgsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDU3LCAweDA0LCAweDczLCAweDA3LCAweEJDLCAweDA5LCAweEYwLAorMHgwNywgMHhEMCwgMHg5RSwgMHgwNCwgMHg1NywgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHg4NywgMHhFMCwgMHgxRiwgMHgwMCwKKzB4NzMsIDB4MDIsIDB4RkMsIDB4MUQsIDB4MzAsIDB4MTcsIDB4RDEsIDB4MUMsIDB4MDAsIDB4NzMsIDB4MDAsIDB4Q0QsIDB4MDEsCisweDMwLCAweDI3LCAweEMwLCAweDE3LCAweDAwLCAweDUzLCAweDAxLCAweDVDLCAweDAxLCAweEYwLCAweDE3LCAweEMwLCAweDFGLAorMHgwMCwgMHg2MywgMHgwNywgMHhCQywgMHgwNSwgMHgzMCwgMHg3NywgMHhDMCwgMHg1QywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDUsIDB4NDAsIDB4MEYsIDB4MDAsIDB4N0MsIDB4NDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLAorMHgwMCwgMHg3QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwNCwgMHhGMCwKKzB4MDEsIDB4QzEsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NDQsCisweDFGLCAweDA2LCAweDdDLCAweDI0LCAweEYwLCAweDQxLCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOCwgMHhFMCwKKzB4MjAsIDB4MDAsIDB4OTMsIDB4MDAsIDB4M0MsIDB4MDIsIDB4MzAsIDB4MDgsIDB4QzAsIDB4MjAsIDB4MDAsIDB4ODMsIDB4MTAsCisweDRDLCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDI0LCAweDAwLCAweDhGLCAweDAwLCAweDBDLCAweDAyLCAweDcwLCAweDA4LAorMHhDMCwgMHg2NCwgMHgwMCwgMHg5MywgMHgwMCwgMHgzQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDgsIDB4NEMsIDB4MjIsIDB4MzAsIDB4NTksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDlELCAweDgwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDEwLCAweDI0LAorMHg0MCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxNCwgMHgwOSwgMHhEMCwgMHgyNCwgMHg1MCwgMHg5MSwgMHg0MCwgMHg0RCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4NTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDUsIDB4MDIsIDB4MTQsIDB4MDksIDB4NTAsCisweDY0LCAweDQyLCAweDkxLCAweDAwLCAweDc0LCAweDA2LCAweDUwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAxLAorMHg1NCwgMHgwNiwgMHg1NCwgMHgyOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsCisweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDAwLCAweDI2LCAweDAwLCAweDk5LCAweDAwLCAweDQ0LCAweDAzLAorMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgwOSwgMHg0MCwgMHgyMCwKKzB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MTIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsCisweDQyLCAweDExLCAweDI5LCAweDQwLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHgyOCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwNCwgMHgwNSwgMHgwMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4MSwKKzB4MDAsIDB4MzQsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NDQsIDB4MjAsIDB4MDEsIDB4ODksIDB4MDQsIDB4MDQsIDB4MTIsIDB4RDAsCisweDQ4LCAweDQwLCAweDIwLCAweDAxLCAweDhELCAweDA0LCAweDA0LCAweDEyLCAweDEwLCAweDQ4LCAweDQwLCAweDYwLCAweDAwLAorMHg4MSwgMHgwNCwgMHgzNCwgMHgxMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHg1NCwgMHgwMiwKKzB4NTAsIDB4NDgsIDB4NDAsIDB4NTMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsCisweDA2LCAweDAwLCAweDFGLCAweDAwLCAweDQ0LCAweDAwLCAweDM0LCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDEzLCAweDAwLAorMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxQiwgMHgyMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4ODQsIDB4MDIsIDB4MTMsCisweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDg3LCAweDAyLCAweDVGLCAweDgwLCAweDRDLCAweDAwLCAweDMyLAorMHgwMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBOCwgMHgyQiwKKzB4MDAsIDB4QkYsIDB4MjgsIDB4RkQsIDB4MDIsIDB4RjEsIDB4OEIsIDB4QzAsIDB4MkYsIDB4MEEsIDB4QkYsIDB4MjAsIDB4RkMsCisweDIyLCAweEYwLCAweDhCLCAweEMwLCAweDJGLCAweDAyLCAweEI3LCAweDA4LCAweERDLCAweDIyLCAweEYyLCAweDhCLCAweEMwLAorMHgyRiwgMHgyMiwgMHhCRiwgMHgwOCwgMHhGQywgMHgyMiwgMHhGMiwgMHg4QiwgMHhDMCwgMHgyQiwgMHgwMCwgMHhCRiwgMHgwOCwKKzB4N0MsIDB4MjIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkIsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjEsIDB4OEIsCisweEMwLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI3LCAweDAwLAorMHg5RiwgMHg4NCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHg1MiwKKzB4MzAsIDB4NDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4NDksIDB4QzAsIDB4MjQsCisweDA1LCAweDlGLCAweDA0LCAweDdDLCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDJDLCAweDAyLCAweEIzLCAweDA0LCAweENDLAorMHgxNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHhCRiwgMHgwMCwgMHhCQywgMHgwMiwgMHhGMiwgMHgwQiwgMHhDMCwKKzB4NjMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MTgsIDB4MDcsIDB4MDAsIDB4MUQsCisweDI4LCAweDc0LCAweDgwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAyLCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweDEwLAorMHg4MSwgMHg0MCwgMHg4NywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHhBMCwgMHgxMiwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwKKzB4MUQsIDB4ODgsIDB4NzQsIDB4MDgsIDB4RDAsIDB4MDMsIDB4NDAsIDB4MDQsIDB4NDAsIDB4MTEsIDB4MjAsIDB4NDUsIDB4MDAsCisweEQwLCAweDAxLCAweDQwLCAweDE2LCAweDE0LCAweDFELCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDczLAorMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyOSwgMHgwMCwgMHhBRCwgMHgwMCwKKzB4QjQsIDB4MDIsIDB4RDAsIDB4OUEsIDB4NDAsIDB4NkIsIDB4MDAsIDB4QTEsIDB4MDAsIDB4QjQsIDB4MDYsIDB4MTAsIDB4MUEsCisweDQwLCAweDZCLCAweDAyLCAweEFELCAweDA5LCAweEI0LCAweDA2LCAweDEwLCAweDlBLCAweDQ4LCAweDY4LCAweDIwLCAweEFELAorMHgwMSwgMHhCMCwgMHgyNiwgMHhEMCwgMHg5QSwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwOCwgMHgwNCwgMHgwQSwgMHhEMCwKKzB4MDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4OEQsIDB4ODAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MTgsIDB4NDAsIDB4NEIsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDIwLCAweDY1LCAweDAwLCAweEJELCAweDAwLCAweEY0LAorMHg4QSwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCMSwgMHgwMCwgMHhGNCwgMHgwMiwgMHgxMCwgMHgwQiwgMHg0MCwKKzB4NkYsIDB4MDAsIDB4QkQsIDB4MDAsIDB4RjQsIDB4MDIsIDB4MTAsIDB4MEIsIDB4NDAsIDB4NkMsIDB4MDAsIDB4QkQsIDB4MDAsCisweEY0LCAweDEyLCAweEQwLCAweDBCLCAweDUwLCAweDI0LCAweDAwLCAweDkxLCAweDA0LCAweDQ0LCAweDAyLCAweEQwLCAweDA5LAorMHg0MCwgMHgyNiwgMHgwMiwgMHg5RCwgMHgwMiwgMHg3NCwgMHgwQSwgMHhEMCwgMHgxOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjYsCisweEYwLCAweDI5LCAweEM4LCAweEE3LCAweDQwLCAweDkxLCAweDAwLCAweDdDLCAweDJBLCAweDM0LCAweDM5LCAweEMwLCAweEE3LAorMHgwMCwgMHg5RiwgMHgwQiwgMHg3QywgMHgwQSwgMHgzNCwgMHhBOSwgMHhEMCwgMHhBNCwgMHgwMCwgMHg5RiwgMHgwMywgMHg3QywKKzB4MEEsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjQsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MzksIDB4QzEsCisweEE3LCAweDAwLCAweDlGLCAweDgyLCAweDdDLCAweDBFLCAweEYwLCAweDI5LCAweEMwLCAweDE3LCAweDIwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgyNSwgMHgwOCwgMHg5RiwgMHgwMCwgMHg3OCwgMHgwNiwgMHhGMCwKKzB4MDksIDB4ODAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDksIDB4N0MsIDB4MDIsIDB4RjAsIDB4NDksIDB4QzAsIDB4MjcsIDB4MDAsCisweDlGLCAweDAxLCAweDNDLCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDA5LCAweDdDLCAweDA2LAorMHhGMCwgMHg5OCwgMHhDMCwgMHgyNywgMHgwMSwgMHg4RiwgMHgwMSwgMHg3QywgMHgwMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MjgsIDB4N0MsIDB4NjYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDBELCAweDAwLCAweDNGLCAweDAwLCAweENDLCAweDAwLCAweEYwLCAweDAzLAorMHhDMCwgMHgwQiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhCQywgMHgwMCwgMHg3MCwgMHgwMywgMHhDMCwgMHgwQywgMHgwMCwgMHgzRiwKKzB4MDAsIDB4RkUsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4QjAsCisweDAzLCAweEMwLCAweDQ0LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLAorMHgxRiwgMHgxMiwgMHg3QywgMHgwOCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MTQsIDB4MDAsIDB4NUQsIDB4MjAsIDB4NDAsIDB4MDEsIDB4NzAsIDB4MDUsIDB4NDAsCisweDE3LCAweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDE0LCAweDAwLCAweDVELCAweDIwLAorMHg3NCwgMHgwMSwgMHhEMiwgMHgwNSwgMHg0OCwgMHgxNywgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHgzMCwgMHgwNSwKKzB4QzAsIDB4MUUsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MTAsIDB4N0QsCisweDAzLCAweEY0LCAweDRELCAweDUwLCAweDE3LCAweDUwLCAweDUxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHhBMCwgMHgwMiwgMHgwMCwgMHgwRCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHg0MCwgMHgwMywKKzB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzYsCisweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweDA5LCAweDAwLCAweDMwLCAweDAwLCAweDE0LCAweDAwLCAweDQwLAorMHgzNCwgMHgwOCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHg0RCwgMHgwMCwKKzB4MzQsIDB4MDksIDB4MTAsIDB4OEMsIDB4NDEsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDg4LCAweDM4LCAweDAwLCAweENELCAweDAxLCAweDg0LCAweDAzLCAweDUwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLAorMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgxRSwgMHg0MCwgMHgzQSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywKKzB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4MzQsIDB4MDcsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MkEsCisweDAwLCAweEFELCAweDAwLCAweEI0LCAweDQyLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweDZELCAweDQyLCAweEI0LAorMHgwNSwgMHg1MCwgMHgxRSwgMHg0MCwgMHgwNSwgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwKKzB4MTAsIDB4NDgsIDB4MDAsIDB4MkYsIDB4MDEsIDB4OEQsIDB4ODQsIDB4NzAsIDB4MTIsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MkYsCisweDAxLCAweEJDLCAweDA0LCAweDcyLCAweDEwLCAweEQwLCAweDRBLCAweDA4LCAweDJELCAweDIxLCAweEI0LCAweDA0LCAweEYwLAorMHgxMiwgMHhDMCwgMHg0QiwgMHgwMCwgMHgyRiwgMHgwMSwgMHhCQywgMHgwNCwgMHgzMCwgMHgxMiwgMHhDMCwgMHg1OCwgMHgwMCwKKzB4QUYsIDB4MDEsIDB4QkMsIDB4MDYsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDMsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDUsCisweDMwLCAweDFFLCAweEMwLCAweDQ0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LAorMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3RSwgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsCisweEM4LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwKKzB4MEMsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NEQsCisweDAwLCAweDNGLCAweDAxLCAweENDLCAweDIwLCAweEYwLCAweDEzLCAweEMwLCAweDRDLCAweDAwLCAweDNGLCAweDAxLCAweENDLAorMHgwNCwgMHhGMCwgMHgxMywgMHhDMCwgMHg0RSwgMHgwMCwgMHgzMywgMHgwMSwgMHhDQywgMHg4NCwgMHhGMCwgMHgxMywgMHhDMiwKKzB4NEYsIDB4MDIsIDB4M0YsIDB4MDksIDB4RkMsIDB4MDQsIDB4RjAsIDB4MTMsIDB4QzAsIDB4N0MsIDB4MDAsIDB4QkYsIDB4MDEsCisweEZDLCAweDA3LCAweEYwLCAweDFFLCAweEMwLCAweDdDLCAweDA0LCAweDczLCAweDAxLCAweDhDLCAweDA3LCAweDMwLCAweDE3LAorMHhDMCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxOCwgMHgzOSwgMHgwOCwKKzB4RUQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RjAsIDB4OEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MzAsIDB4OTQsIDB4MDMsCisweEQwLCAweDBFLCAweDUwLCAweDM4LCAweDQyLCAweEUxLCAweDA4LCAweDg1LCAweDIzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLAorMHgwMCwgMHhFRCwgMHgwOCwgMHhCNCwgMHgwMywgMHhGMCwgMHgwRSwgMHg0MCwgMHgwOCwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCNCwKKzB4MDMsIDB4RjAsIDB4MEUsIDB4QzAsIDB4M0IsIDB4MDAsIDB4MjEsIDB4MDAsIDB4QUMsIDB4MTIsIDB4QjAsIDB4NUUsIDB4NDAsCisweDU3LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDJELAorMHgxOCwgMHg4NCwgMHgyMCwgMHhEOCwgMHgwMCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgzRCwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwKKzB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4OTQsIDB4MDAsIDB4RDAsIDB4MjIsIDB4NDAsIDB4OEIsIDB4MjAsCisweDJELCAweDA4LCAweEI0LCAweDAwLCAweEQwLCAweDEwLCAweDQwLCAweDE4LCAweDA0LCAweEFELCAweDAwLCAweEI0LCAweDAyLAorMHhEMCwgMHgwRiwgMHg0MCwgMHgzOCwgMHgwMCwgMHg2MSwgMHgxMCwgMHg4NCwgMHg0MywgMHgxOCwgMHg0RSwgMHg0MCwgMHgwMywKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MzEsIDB4MDAsIDB4Q0QsIDB4MDYsCisweDA2LCAweDBCLCAweDUwLCAweDJDLCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDBCLCAweEQwLCAweDBDLAorMHg0NCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDIsIDB4MzQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NTAsIDB4NTAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4NTAsCisweDdDLCAweDQwLCAweEYzLCAweDAwLCAweDgxLCAweDAzLCAweDI0LCAweDE2LCAweDkwLCAweDJELCAweDQwLCAweDEzLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMSwgMHg0QywKKzB4MjgsIDB4RDAsIDB4MTEsIDB4RDAsIDB4NDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDQsIDB4RjAsIDB4MzEsIDB4QzAsCisweDQ0LCAweDAwLCAweDEzLCAweDAxLCAweDVDLCAweDA0LCAweEYwLCAweDExLCAweEMwLCAweDQ3LCAweDAwLCAweDFGLCAweDAxLAorMHg3QywgMHgwNCwgMHhEMCwgMHgwMCwgMHhDMCwgMHg3NCwgMHgwMCwgMHhERiwgMHgwMSwgMHgzQywgMHgwMiwgMHhEMCwgMHgwRCwKKzB4QzEsIDB4QjgsIDB4MDEsIDB4NDMsIDB4MDMsIDB4NEMsIDB4MDUsIDB4MzAsIDB4QkQsIDB4QzAsIDB4NTcsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDc3LCAweDAwLCAweERGLCAweDIwLCAweDdELCAweDg3LAorMHhGMCwgMHgxRCwgMHhDMSwgMHg3NywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwNywgMHhGMCwgMHgxRCwgMHhDMCwgMHg3NywKKzB4MTAsIDB4REYsIDB4MDEsIDB4N0MsIDB4MDcsIDB4RjAsIDB4MUQsIDB4QzAsIDB4NzMsIDB4MDAsIDB4REYsIDB4ODEsIDB4N0MsCisweDA3LCAweEYwLCAweDFELCAweEMwLCAweDI3LCAweDEwLCAweDlGLCAweDA4LCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLAorMHgzNSwgMHg0NCwgMHg1RiwgMHgxMCwgMHg3QywgMHgwQiwgMHhGMiwgMHgzRCwgMHhDNCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4MEYsIDB4MDAsIDB4MTMsIDB4MDAsIDB4RkMsIDB4ODAsIDB4MzAsCisweDAzLCAweEMwLCAweDBCLCAweDAwLCAweDMzLCAweDAwLCAweEJDLCAweDQwLCAweDMwLCAweDAyLCAweEMxLCAweDBDLCAweDA4LAorMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzMiwgMHgxMCwgMHhGQywgMHg4MCwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MEMsIDB4MDAsIDB4RUYsIDB4MDksIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MEYsIDB4QzAsIDB4M0YsCisweDAwLCAweEIzLCAweDAwLCAweENDLCAweDAwLCAweDMwLCAweDVGLCAweEMwLCAweDEwLCAweDIyLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgyMCwgMHgzMiwgMHgwMCwgMHhEMSwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MiwgMHgwRCwKKzB4NDIsIDB4MzcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4REQsCisweDAwLCAweDc2LCAweDAzLCAweEQwLCAweDBELCAweDQyLCAweDM3LCAweDQwLCAweEQxLCAweDAwLCAweDY0LCAweDAzLCAweEQyLAorMHgwRCwgMHhDMCwgMHgyNCwgMHgwOCwgMHg5RCwgMHgwMSwgMHg0NCwgMHgwMiwgMHgxNCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwKKzB4OTUsIDB4OTMsIDB4MTQsIDB4MEMsIDB4MTAsIDB4NEQsIDB4NDAsIDB4MTUsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDA0LCAweDAwLCAweDExLCAweDQwLCAweDc0LCAweDAwLCAweDkwLCAweDAxLCAweDQwLAorMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxRCwgMHgwMCwKKzB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MTUsIDB4MDAsIDB4NTQsIDB4MDAsIDB4RDAsIDB4MDEsCisweDQwLCAweDc2LCAweDgwLCAweEQ5LCAweDAwLCAweDQ0LCAweDAzLCAweDE4LCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweEQxLAorMHgyMSwgMHg1NCwgMHgwRCwgMHgxMiwgMHgwRCwgMHg0OCwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjgsIDB4MzQsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTQsIDB4MEMsIDB4NDAsIDB4MzMsCisweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweDE0LCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDM0LAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0OCwKKzB4MDAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDUsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MjAsIDB4MTUsIDB4MDAsCisweDU0LCAweDAyLCAweDExLCAweDBELCAweDQwLCAweDQxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDOCwgMHgwNywgMHg0MCwKKzB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzIsIDB4MDEsIDB4RDAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NzQsIDB4MDAsCisweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDAwLCAweDVDLCAweDAwLCAweEYwLCAweDAxLCAweEQwLCAweDA0LAorMHgxMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwRCwgMHhDMCwgMHgzQiwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywKKzB4MDIsIDB4MzIsIDB4NDUsIDB4QzAsIDB4MDAsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweEEwLCAweDNGLCAweDQwLCAweEZGLCAweDgwLCAweEZDLCAweDAzLCAweDUxLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEVGLAorMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDNCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEQsIDB4MTAsCisweEJELCAweDIwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDQwLCAweEFGLCAweDgwLCAweEZELCAweDAyLAorMHhGMCwgMHgyOSwgMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwKKzB4MkYsIDB4MDEsIDB4NzMsIDB4MDEsIDB4RkMsIDB4MTEsIDB4MzQsIDB4MzMsIDB4QzAsIDB4MUUsIDB4MDEsIDB4QjMsIDB4MTQsCisweENDLCAweDA3LCAweEYwLCAweDBCLCAweEMwLCAweDNDLCAweDAxLCAweEJGLCAweDgwLCAweENDLCAweDI3LCAweEYwLCAweDgzLAorMHhDMCwgMHg3OCwgMHgwMCwgMHgyMywgMHgwMSwgMHhDQywgMHhCMywgMHhGMCwgMHg0QiwgMHhDMCwgMHgxQSwgMHgyMSwgMHg3MywKKzB4MDEsIDB4RUMsIDB4MTAsIDB4RjIsIDB4MTMsIDB4QzAsIDB4M0MsIDB4MDUsIDB4N0YsIDB4MDEsIDB4RkMsIDB4MDUsIDB4RjAsCisweDFGLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDA4LCAweEY3LAorMHgwMCwgMHhEMSwgMHg4MSwgMHg3NCwgMHgyNSwgMHgxMiwgMHgwRCwgMHg0MCwgMHhENCwgMHgwMiwgMHg5MSwgMHgwMywgMHg0NCwKKzB4ODcsIDB4RDAsIDB4MzksIDB4ODAsIDB4RkUsIDB4MDIsIDB4OUQsIDB4MDMsIDB4NDQsIDB4MTMsIDB4RDAsIDB4NjEsIDB4NDAsCisweDM0LCAweDQ0LCAweDEzLCAweDgxLCAweEQ0LCAweDIzLCAweEQwLCAweEI5LCAweDQwLCAweEQ0LCAweDAyLCAweDkxLCAweDAxLAorMHg0NCwgMHgzMSwgMHhEMSwgMHgxMSwgMHg0MCwgMHhGQywgMHgwMCwgMHg5RCwgMHg4MSwgMHgzNCwgMHg4NywgMHhEMCwgMHgxRCwKKzB4NDQsIDB4MEYsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4QTMsIDB4MDAsCisweEMxLCAweDAwLCAweDc0LCAweDAxLCAweDUwLCAweDRDLCAweDQwLCAweDE2LCAweDAwLCAweEM1LCAweDAwLCAweDA0LCAweDAzLAorMHhEMCwgMHgyMCwgMHg0MCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMiwgMHgwNCwgMHgxMywgMHhEMCwgMHgyOCwgMHg0MCwgMHgzMCwKKzB4MDEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MTMsIDB4RDAsIDB4MDgsIDB4NjAsIDB4MTMsIDB4MDAsIDB4ODEsIDB4ODAsIDB4MjQsCisweDQyLCAweEQyLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAyLCAweDUwLCAweDBDLCAweDQwLAorMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHg3NSwgMHgwMCwgMHhEMSwKKzB4MDAsIDB4NzQsIDB4MDEsIDB4MTAsIDB4MUQsIDB4NDAsIDB4MzQsIDB4MDQsIDB4OTUsIDB4MDAsIDB4NDQsIDB4MTMsIDB4RDAsCisweDM5LCAweDYwLCAweDM2LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDAxLCAweDQwLCAweDc0LCAweDAwLAorMHg1OSwgMHgwMCwgMHg1NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgxNSwgMHgwMCwgMHg5MSwgMHgxMCwgMHg0NCwgMHg2MywKKzB4RDAsIDB4MjEsIDB4NDAsIDB4MzYsIDB4MDAsIDB4OUQsIDB4MDYsIDB4NzQsIDB4OUIsIDB4RDgsIDB4MEQsIDB4NDAsIDB4MEYsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweEE4LCAweDIzLCAweDQwLCAweDkzLCAweDQwLAorMHgzQywgMHgzQiwgMHg3MSwgMHgxRCwgMHhDMCwgMHhEMiwgMHgwMCwgMHg5NywgMHgwMCwgMHg0QywgMHgwNywgMHhGMCwgMHgxRCwKKzB4QzAsIDB4MzQsIDB4MDAsIDB4OEYsIDB4MDAsIDB4NEQsIDB4MDMsIDB4RjAsIDB4OTEsIDB4RDAsIDB4MzQsIDB4MDAsIDB4MTEsCisweDA3LCAweDRDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDEzLCAweDQ2LCAweDUzLCAweDAwLCAweDZDLCAweDBDLCAweEYwLAorMHg5OCwgMHhFMCwgMHgzNiwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwNSwgMHhFMCwgMHgwRCwgMHhDMCwgMHgwQiwgMHgyMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MjUsIDB4MDAsIDB4QkYsIDB4NDUsIDB4RkMsCisweDA1LCAweEYwLCAweDBGLCAweEMwLCAweDlGLCAweDQwLCAweEVCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBFLCAweEMwLAorMHgzRiwgMHgxMCwgMHhERiwgMHgwNCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzRiwgMHg0MCwgMHhCNywgMHgwNCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzQsIDB4N0UsIDB4MDAsIDB4RkYsIDB4MDAsIDB4N0MsIDB4ODQsIDB4RjAsIDB4MDMsCisweDcwLCAweDM1LCAweDAwLCAweEJGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDBGLCAweEMwLCAweDFGLCAweDAwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5MywgMHgwMSwgMHg3QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MTcsIDB4MDAsIDB4RDMsIDB4MTAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzQsCisweDAwLCAweDk3LCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDM0LCAweDAwLCAweERCLCAweDEwLCAweDVDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg5NiwgMHg4NCwgMHg5MywgMHgwMiwgMHg3QywgMHgwOCwgMHhCNCwgMHgyRCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4RDcsIDB4MDIsIDB4N0MsIDB4MDIsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MjksIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFCLCAweEEwLCAweEU0LCAweDAxLCAweDkxLCAweDAwLCAweDc2LCAweDA1LCAweEQwLAorMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzRCwgMHgwMSwKKzB4RDEsIDB4MDAsIDB4NDQsIDB4ODMsIDB4REEsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4Q0IsIDB4ODIsIDB4QzQsIDB4NDMsCisweEQxLCAweDBELCAweEMwLCAweDM3LCAweDEwLCAweDhCLCAweDFBLCAweDc2LCAweDAwLCAweDEwLCAweDA1LCAweDQwLCAweDNGLAorMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMywgMHhCMCwgMHgxRCwgMHhDMCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MjIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDUsIDB4RDAsIDB4MEQsCisweDQwLCAweDMzLCAweDAyLCAweDgxLCAweDAyLCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQ0LCAweDMwLCAweDAwLCAweEM1LAorMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwNCwgMHg0MCwgMHgzNCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwNywgMHhDMCwKKzB4MDgsIDB4NDAsIDB4RjAsIDB4MjAsIDB4QzEsIDB4MDMsIDB4MzQsIDB4MDAsIDB4OTAsIDB4MDQsIDB4NDgsIDB4MzMsIDB4MDAsCisweDgwLCAweDAwLCAweDM2LCAweDAyLCAweDUwLCAweDhDLCAweDQwLCAweDRFLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwRCwgMHg4MCwgMHg3OCwgMHgyMCwgMHhFMSwgMHg4MSwgMHhCNCwgMHg0NywgMHhEMCwgMHgxRSwgMHg2MCwKKzB4NUIsIDB4MTAsIDB4QTEsIDB4ODEsIDB4QjQsIDB4MDcsIDB4NTAsIDB4OUIsIDB4NDIsIDB4NzksIDB4MDAsIDB4QTEsIDB4MDEsCisweEE0LCAweDA3LCAweEQ4LCAweDEyLCAweDQwLCAweDdDLCAweDAwLCAweEY5LCAweDAxLCAweEE0LCAweDA3LCAweEQwLCAweDFBLAorMHg0MCwgMHg1RSwgMHgwNCwgMHhBOSwgMHgwMSwgMHhCNCwgMHgwNSwgMHg5MCwgMHg1MiwgMHg0MCwgMHg3QiwgMHgwMCwgMHhBMSwKKzB4MDEsIDB4QjQsIDB4MDYsIDB4OTAsIDB4MUUsIDB4NDAsIDB4MzYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDEwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDAxLCAweEYyLCAweDBDLCAweEUwLCAweDMzLAorMHg0MCwgMHhDMywgMHgwMCwgMHgzQywgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwgMHgzMCwgMHgwMCwgMHhDNiwgMHgyMCwgMHgyNCwKKzB4MDMsIDB4RDAsIDB4NEMsIDB4QzAsIDB4MzAsIDB4MzAsIDB4ODMsIDB4NTgsIDB4MUMsIDB4MDMsIDB4RjAsIDB4MDgsIDB4QzAsCisweDMwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDAyLCAweEI0LCAweDBDLCAweEMwLCAweDMzLCAweDQwLCAweDg3LCAweDAwLAorMHgzQywgMHgwMiwgMHg3MCwgMHgwQywgMHhDNCwgMHg0QiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4QjgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0IsIDB4MDIsCisweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweEIzLCAweDAwLCAweEJGLCAweDAwLCAweDVDLCAweDAzLAorMHhGMCwgMHgwMywgMHhEMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgyMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwRSwgMHhDMCwgMHgxRiwKKzB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjMsIDB4NzAsIDB4NEIsIDB4Q0EsIDB4QkYsIDB4ODIsIDB4QkYsIDB4MDAsIDB4RkMsCisweDAyLCAweEYwLCAweDBFLCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHhBOCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMiwgMHg3NywgMHgwMCwgMHg5MywKKzB4ODAsIDB4NUMsIDB4ODMsIDB4NzAsIDB4MDksIDB4ODAsIDB4QjUsIDB4MjIsIDB4RDMsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsCisweDA1LCAweEMwLCAweDc3LCAweDIwLCAweDUzLCAweDAwLCAweDdDLCAweDMzLCAweEUwLCAweDBELCAweEMwLCAweDM3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3OCwgMHgwMywgMHhCMCwgMHgxRCwgMHhDMCwgMHgzNiwgMHg4MSwgMHhERiwgMHgwMCwgMHg0QywgMHgwMiwKKzB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OTgsCisweEI5LCAweDEwLCAweEFELCAweDQwLCAweDlDLCAweDBCLCAweEQzLCAweDBFLCAweDQwLCAweDEzLCAweDAxLCAweEUxLCAweDAwLAorMHg4NCwgMHgwMywgMHhEMCwgMHgyQSwgMHg0MCwgMHgzMCwgMHgxMSwgMHhFMSwgMHgyMiwgMHhCNCwgMHg4MywgMHhEMCwgMHgwRSwKKzB4NDAsIDB4M0IsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4NTMsIDB4ODAsIDB4MEEsIDB4NDAsIDB4QkIsIDB4MDAsIDB4RUQsCisweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBFLCAweDYwLCAweDM4LCAweDA4LCAweEFELCAweDAwLCAweDk0LCAweDAyLCAweEQwLAorMHgwRSwgMHg0MCwgMHg0RiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3OSwKKzB4MDUsIDB4QUQsIDB4MDMsIDB4QjQsIDB4NTcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDMsIDB4QzEsIDB4MDksIDB4OTYsCisweDQ3LCAweEQwLCAweDdDLCAweDRDLCAweDc5LCAweDYwLCAweEUxLCAweDA1LCAweEI2LCAweDA3LCAweEQwLCAweDFFLCAweDQwLAorMHg3QiwgMHgwMCwgMHhFMSwgMHg4MywgMHhCNCwgMHgwNywgMHhDMCwgMHhERSwgMHgwOCwgMHg3QiwgMHgwMSwgMHhBRCwgMHgwMSwKKzB4QjQsIDB4MDcsIDB4MTAsIDB4MUYsIDB4NDAsIDB4N0EsIDB4OTIsIDB4RUQsIDB4NDMsIDB4ODQsIDB4MDYsIDB4RDAsIDB4MUUsCisweDQwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLCAweDMzLCAweDAwLAorMHg4RCwgMHg0MCwgMHgxNCwgMHgwMiwgMHhEMCwgMHgzRCwgMHg0MSwgMHgyMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwNiwKKzB4RDAsIDB4MUMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4RUMsIDB4NjAsIDB4MjMsCisweDAwLCAweEMxLCAweDA3LCAweDM0LCAweDAzLCAweDkxLCAweDFDLCAweDQwLCAweEEzLCAweDA5LCAweDhELCAweDAwLCAweDM0LAorMHgxRiwgMHgxMCwgMHgzQywgMHg0NCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwKKzB4NUIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4MTEsIDB4MTAsIDB4NkYsCisweDAwLCAweEJDLCAweDIxLCAweEYwLCAweDA3LCAweEMxLCAweDFGLCAweDQwLCAweDUzLCAweDAwLCAweDVDLCAweDAxLCAweDcyLAorMHgxNywgMHhDMiwgMHgxNSwgMHgwMCwgMHg1MiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgzNywgMHhDMCwgMHgxNywgMHgwMCwKKzB4NzMsIDB4MjMsIDB4N0MsIDB4MDEsIDB4RjIsIDB4MTUsIDB4QzMsIDB4OUYsIDB4MDEsIDB4N0YsIDB4MDUsIDB4RkMsIDB4MUQsCisweDM0LCAweDE3LCAweEM1LCAweDE2LCAweDAwLCAweDdGLCAweDQwLCAweENDLCAweDgxLCAweEUwLCAweDA1LCAweEMwLCAweDVGLAorMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4NywgMHgyMCwgMHgxRiwgMHgwNCwKKzB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDIsIDB4MUYsIDB4MDgsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAwLCAweEM4LCAweDA3LCAweDQyLCAweDFGLAorMHgwMiwgMHgzQywgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMiwgMHgwMywgMHgwMCwgMHgxRiwgMHgwMCwgMHgzQywgMHgwMCwgMHg3MCwKKzB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MjAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDI3LCAweDAxLCAweDlCLCAweDAxLCAweDRDLAorMHgyMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMSwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhEMCwKKzB4NjEsIDB4MDAsIDB4OTYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzIsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsCisweDVDLCAweDAyLCAweDc4LCAweDg5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDQ5LAorMHhDOSwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4RUUsIDB4MDAsIDB4OTEsIDB4ODksIDB4QzQsIDB4MDYsCisweDEwLCAweDA5LCAweDQwLCAweDZDLCAweDAwLCAweEFELCAweDAzLCAweDQ0LCAweDAyLCAweEQwLCAweDBCLCAweDQyLCAweDY0LAorMHgwMCwgMHhCMSwgMHgwNywgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHhBNCwgMHg4MiwgMHg4RCwgMHgwMiwgMHg0NCwKKzB4MDIsIDB4MTAsIDB4MEIsIDB4NDgsIDB4MkYsIDB4MDAsIDB4OTEsIDB4NDAsIDB4NzQsIDB4MDIsIDB4QjAsIDB4NzksIDB4NDAsCisweDI3LCAweDAwLCAweDg3LCAweDAwLCAweDJDLCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwNCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxNiwKKzB4MEQsIDB4NjAsIDB4MjQsIDB4MDEsIDB4OUQsIDB4MEEsIDB4NDAsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjQsIDB4MDIsCisweDlELCAweDAwLCAweDc0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweEE0LCAweDIwLCAweDlELCAweDE4LCAweDU0LCAweDAyLAorMHg1MCwgMHgwOSwgMHg0MSwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OTgsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDg4LAorMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwQSwgMHhEMCwgMHgyOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4OSwKKzB4MDAsIDB4MzQsIDB4MjIsIDB4NTAsIDB4ODgsIDB4NDAsIDB4MjAsIDB4MDIsIDB4OEQsIDB4NDAsIDB4MDAsIDB4MEEsIDB4MTAsCisweDA4LCAweDQ4LCAweDIzLCAweDQwLCAweDgxLCAweDAwLCAweDM0LCAweDIyLCAweDk4LCAweDA4LCAweDQwLCAweDIzLCAweDIwLAorMHg5NSwgMHhDMiwgMHg2NCwgMHgwQSwgMHgxMCwgMHgwOCwgMHg0MCwgMHg1MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4NDYsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDQsIDB4MzIsIDB4MjEsIDB4RDAsCisweDQ0LCAweDAwLCAweDFGLCAweDAxLCAweDRELCAweDAwLCAweEYwLCAweDExLCAweEMwLCAweDA1LCAweDE1LCAweDFGLCAweDAxLAorMHg3QywgMHgwOCwgMHg3MCwgMHg2MSwgMHhEMSwgMHg4MCwgMHgwMCwgMHgxRCwgMHgwMCwgMHg1QywgMHg1MCwgMHg1MCwgMHgxMSwKKzB4NDAsIDB4NDcsIDB4MDAsIDB4NTMsIDB4NDAsIDB4NkMsIDB4NTgsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDUsIDB4MEYsCisweDAwLCAweDRELCAweDAwLCAweDM0LCAweDAxLCAweEM0LCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOSwgMHhCOCwgMHhBRiwgMHgwOCwgMHhCRiwgMHgwMCwgMHhGRCwgMHgwQSwgMHhGMCwgMHg0QiwgMHhDMCwgMHhBRiwKKzB4MDAsIDB4QkYsIDB4MDIsIDB4RkMsIDB4MDYsIDB4RjAsIDB4M0IsIDB4QzAsIDB4MjcsIDB4MDAsIDB4QjMsIDB4MDIsIDB4N0MsCisweDEyLCAweEIxLCAweDRCLCAweDgwLCAweDJGLCAweDAxLCAweEJGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDJCLCAweEMwLAorMHhBRiwgMHgwOCwgMHhCRiwgMHgwMCwgMHhGOCwgMHgxMiwgMHhGMiwgMHgwQSwgMHhDNCwgMHgyNywgMHgwMCwgMHhCNywgMHgwMSwKKzB4REMsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweEEwLCAweDZGLCAweDAwLCAweEJGLCAweDQwLCAweEM0LCAweDU2LCAweEYwLCAweDA5LCAweEMwLCAweDZGLCAweDAxLAorMHhCRiwgMHg0MSwgMHg3QywgMHgwMiwgMHgzMCwgMHg3OSwgMHhDMCwgMHgyQywgMHgwMCwgMHhGRiwgMHgzMSwgMHg0QywgMHgyMiwKKzB4RjAsIDB4NDksIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MDIsIDB4QjAsIDB4NUIsIDB4QzEsIDB4NkQsCisweDE0LCAweEIzLCAweDYwLCAweDRDLCAweDUyLCAweDMyLCAweDBCLCAweEMwLCAweDI3LCAweDI4LCAweDlGLCAweDAyLCAweDdDLAorMHgwQSwgMHhGMCwgMHgwQiwgMHhDNiwgMHg2MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywKKzB4MDgsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDgsIDB4RDAsIDB4MDEsIDB4NDMsIDB4OTcsIDB4MDAsIDB4MUQsCisweDAyLCAweDM0LCAweDU0LCAweDUyLCAweDc1LCAweDUwLCAweDg0LCAweDAwLCAweDFELCAweDAyLCAweDU0LCAweDAwLCAweDkwLAorMHg0MSwgMHgxMSwgMHgwNCwgMHg0MSwgMHgxMSwgMHgwMCwgMHg3NCwgMHg5QywgMHgxMCwgMHgyMSwgMHg0MCwgMHg4NCwgMHgwMCwKKzB4NTEsIDB4MDAsIDB4NTQsIDB4MTEsIDB4NTAsIDB4MDUsIDB4MDAsIDB4ODcsIDB4MTAsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDQsCisweEQwLCAweDAxLCAweDQwLCAweDczLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEwLAorMHhBMywgMHg4MCwgMHhERCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHhCMywgMHgzMCwgMHg4QywgMHgwMiwKKzB4MzQsIDB4MDIsIDB4MTAsIDB4QzgsIDB4NDAsIDB4MjIsIDB4MDIsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4NTAsIDB4QzgsCisweDQwLCAweDIwLCAweDI1LCAweDgwLCAweDAwLCAweDM0LCAweDYyLCAweDkyLCAweDA4LCAweDYwLCAweDIzLCAweDAwLCAweDk1LAorMHgwMCwgMHgxNCwgMHg1MiwgMHhEMCwgMHgwOCwgMHg0MiwgMHgyMywgMHg4MiwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwKKzB4MDgsIDB4NDAsIDB4NEIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsCisweDAwLCAweDlELCAweDIyLCAweDU0LCAweDAyLCAweEQwLCAweDY5LCAweDQyLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDM0LAorMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgyNiwgMHg4MCwgMHg5RCwgMHgwMCwgMHg1NCwgMHg4MiwgMHg5MCwgMHgwOCwgMHg0MSwKKzB4MjAsIDB4MDAsIDB4OTEsIDB4MjQsIDB4NzYsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDIsIDB4RDUsIDB4NDgsCisweDE0LCAweDAyLCAweDUwLCAweDA5LCAweDQyLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDFBLCAweEQwLCAweDA5LAorMHg0MCwgMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMCwKKzB4OEYsIDB4ODIsIDB4NUQsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDAsIDB4RkMsIDB4MDIsCisweDMwLCAweEFCLCAweEMwLCAweDI2LCAweDEwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDI5LCAweEMwLCAweDI0LAorMHgwMCwgMHg5MywgMHgwNCwgMHhGQywgMHgwMiwgMHhCMCwgMHgxOCwgMHhDOCwgMHgyNywgMHg0MCwgMHg4NywgMHgwMCwgMHg1QywKKzB4MEEsIDB4NjAsIDB4MjksIDB4QzAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MjQsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsCisweDE3LCAweEEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweDI1LCAweDAwLCAweDlGLAorMHgwMCwgMHg2QywgMHgwRSwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RSwgMHgwOSwgMHg3QywgMHgwRSwgMHhGMCwKKzB4MDgsIDB4QzAsIDB4MjUsIDB4ODAsIDB4OEYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzIsIDB4QTcsIDB4MTQsCisweDlGLCAweDIwLCAweDNDLCAweDAyLCAweDcwLCAweDU5LCAweENBLCAweDI3LCAweDA4LCAweDlCLCAweDExLCAweDdDLCAweDAyLAorMHhGOCwgMHg0OSwgMHhDMCwgMHgyNywgMHg4MCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMiwgMHgwOSwgMHhDMCwgMHg0QiwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDAwLCAweEIwLCAweDAxLCAweEMwLCAweDg3LCAweDAwLCAweDFCLCAweDEwLCAweDdDLCAweDAwLCAweDMwLCAweDIxLAorMHhEMCwgMHgwNCwgMHgwMiwgMHgxRiwgMHgwOCwgMHg0RCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhFMCwgMHgwNCwgMHgwMCwgMHgxNywKKzB4MTAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4NDEsIDB4QzAsIDB4MDIsIDB4NDAsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MDgsIDB4RjIsCisweDAxLCAweEMwLCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDQzLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgxQywgMHgwMCwgMHg1RCwgMHgwMCwgMHg3MCwKKzB4MDEsIDB4MTgsIDB4MDUsIDB4NDgsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzQsIDB4MDEsIDB4MTAsIDB4MDUsIDB4NTAsCisweDU0LCAweDAwLCAweDdDLCAweDAzLCAweDQ0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDlDLCAweDAxLCAweDdELCAweDQxLAorMHg3QywgMHgxMSwgMHg3MCwgMHgwNywgMHhDMCwgMHhERSwgMHgwMSwgMHg3MCwgMHgwMywgMHg2OCwgMHgwMSwgMHgxMCwgMHgzNywKKzB4MDUsIDB4MTQsIDB4ODAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4QzAsIDB4NDUsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDIyLCAweDIwLCAweDhELCAweDAwLCAweDMwLCAweDA2LAorMHgxMCwgMHgwQywgMHg0MCwgMHgyMywgMHgxMCwgMHg4QywgMHgwOCwgMHgzNiwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMCwKKzB4MDAsIDB4OEQsIDB4MTMsIDB4MjQsIDB4MDMsIDB4QzAsIDB4MEMsIDB4NDAsIDB4QjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsCisweDAzLCAweDUwLCAweDM4LCAweDQwLCAweDIwLCAweDI5LCAweEMwLCAweDBBLCAweDA0LCAweDAzLCAweDkwLCAweDM4LCAweDAxLAorMHgzMSwgMHgwMCwgMHhDRCwgMHg4MCwgMHgzNiwgMHgwMywgMHhDMCwgMHgwQywgMHg0MCwgMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4NDAsIDB4QjQsIDB4MEYsIDB4MTAsCisweDBFLCAweDQ4LCAweDNCLCAweDAwLCAweEFELCAweDAwLCAweEI0LCAweDIzLCAweDEwLCAweDRDLCAweDQwLCAweDI4LCAweDAwLAorMHhBRCwgMHgwMCwgMHhBNCwgMHgwMywgMHhEMCwgMHg0RSwgMHg2MCwgMHgzOCwgMHg4MCwgMHhGRCwgMHgwMywgMHhBNCwgMHgyMywKKzB4NTAsIDB4MjgsIDB4NDAsIDB4M0EsIDB4MDAsIDB4RjEsIDB4MDAsIDB4MjYsIDB4MjMsIDB4MTAsIDB4MUIsIDB4NDAsIDB4MzgsCisweDAwLCAweEVELCAweDA0LCAweEI0LCAweDEzLCAweDkwLCAweDBFLCAweDQwLCAweDA3LCAweDIwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHg2OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHgzQywgMHgwNywgMHgzNCwgMHgzRSwKKzB4QzAsIDB4N0IsIDB4MDAsIDB4QUYsIDB4ODEsIDB4QkMsIDB4MDcsIDB4MzQsIDB4N0UsIDB4NDAsIDB4NzgsIDB4MDAsIDB4QUQsCisweDAxLCAweEE0LCAweDFGLCAweEY5LCAweEJGLCAweDQwLCAweDQ4LCAweDAwLCAweEU3LCAweDAxLCAweEFDLCAweDE3LCAweDcwLAorMHgxNiwgMHhFMCwgMHg2OCwgMHgwMCwgMHhFMywgMHgwMSwgMHg4QywgMHg1NywgMHhCMCwgMHgxRSwgMHhFMCwgMHg3OSwgMHgwMCwKKzB4RUQsIDB4MDMsIDB4QkUsIDB4MEYsIDB4RjAsIDB4MUUsIDB4QzQsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDI1LCAweDIwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYxLCAweDBELCAweDQ0LAorMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgxMCwgMHg4RiwgMHgwMCwKKzB4NUMsIDB4NEIsIDB4RjAsIDB4NkQsIDB4RDAsIDB4MDcsIDB4MDAsIDB4MEYsIDB4MDAsIDB4N0MsIDB4ODMsIDB4NzAsIDB4MDUsCisweEMwLCAweDMzLCAweDA4LCAweENGLCAweDAwLCAweDdDLCAweDBCLCAweDcxLCAweDBDLCAweEMwLCAweDM3LCAweDEwLCAweERGLAorMHgwMCwgMHg3NCwgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTAsIDB4NkYsIDB4MDAsIDB4RjMsIDB4MDksIDB4RkMsIDB4ODMsIDB4MzAsIDB4OUYsIDB4QzAsIDB4N0YsCisweDAyLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFFLCAweDgwLCAweDdELCAweDAwLCAweEJGLCAweDAxLCAweEZDLAorMHgyNywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3RSwgMHgyMiwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNiwgMHhGMCwgMHgxRiwgMHhDMCwKKzB4NkMsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4QjAsIDB4MUIsIDB4QzAsIDB4N0YsIDB4MDIsIDB4RUYsIDB4MDksCisweDhDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDAzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHg4OCwgMHgzOSwgMHgwMCwgMHhFMSwgMHg4MCwgMHhCMCwgMHg1MywgMHhCNCwgMHgwRSwgMHg0NiwgMHgzQiwgMHgwMiwKKzB4RTEsIDB4ODAsIDB4QjQsIDB4MDMsIDB4NzAsIDB4NEUsIDB4NDgsIDB4MzksIDB4MDAsIDB4QUQsIDB4MDQsIDB4QjQsIDB4MDMsCisweDEwLCAweDBFLCAweDQxLCAweDM4LCAweDAwLCAweEVELCAweDA2LCAweEI0LCAweDAyLCAweDkwLCAweDBFLCAweEM0LCAweDM5LAorMHgwMCwgMHgyRiwgMHgwMCwgMHhGNCwgMHg4MywgMHgxMCwgMHg0QSwgMHgwMCwgMHgzQiwgMHgwOCwgMHhFRCwgMHgyMCwgMHhBQywKKzB4MDMsIDB4RjAsIDB4MEUsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDI5LCAweDA0LCAweEUxLCAweDAwLCAweDMwLCAweDMzLCAweDE4LCAweDBFLCAweDYwLCAweDMzLCAweEMwLCAweEU5LAorMHgxMCwgMHhCNCwgMHgyNywgMHhEMCwgMHgxRiwgMHg3MiwgMHgzQiwgMHgwMCwgMHhBRCwgMHg4MCwgMHhCNCwgMHgwMywgMHg5OCwKKzB4MEMsIDB4NDAsIDB4MjksIDB4MjAsIDB4RUMsIDB4MTAsIDB4QTQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MkEsIDB4MDAsCisweEVELCAweDAwLCAweEI0LCAweDAzLCAweDUwLCAweDBFLCAweDQ4LCAweDNCLCAweEEwLCAweEZELCAweDExLCAweEM0LCAweDA3LAorMHgxMCwgMHgwRSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwKKzB4NjMsIDB4MDAsIDB4QzEsIDB4MjAsIDB4MzQsIDB4OEIsIDB4OTAsIDB4MUMsIDB4NDAsIDB4QjMsIDB4MDEsIDB4NDksIDB4MjAsCisweDM0LCAweDA3LCAweDUwLCAweDJDLCAweDQwLCAweDMxLCAweDAwLCAweDhELCAweDAxLCAweDM0LCAweDAzLCAweDk0LCAweDFDLAorMHg2NCwgMHg2MSwgMHgwMCwgMHgwRCwgMHgxMywgMHg3NCwgMHg4MiwgMHg5MCwgMHg5QywgMHg0MCwgMHhGMSwgMHgwMCwgMHgwNSwKKzB4MDMsIDB4MzQsIDB4MDMsIDB4MTEsIDB4MUMsIDB4NDAsIDB4MzMsIDB4MTAsIDB4Q0QsIDB4MDMsIDB4MDQsIDB4MEIsIDB4NTgsCisweDBDLCAweDQwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDY1LAorMHgwMCwgMHhDMywgMHgwNCwgMHg3QywgMHgwNywgMHgxMCwgMHgxRiwgMHg0MCwgMHgzNywgMHgwNCwgMHg4QiwgMHgwMSwgMHg3NCwKKzB4MDMsIDB4RjAsIDB4MEQsIDB4RDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MTEsIDB4RkMsIDB4MDMsIDB4QjAsIDB4MkYsIDB4QzAsCisweDM1LCAweDExLCAweDVGLCAweDAzLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweEE2LCAweDA4LCAweDlELCAweDA0LAorMHhGQywgMHgxNywgMHg1NCwgMHg2OCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHhDMywgMHg0NSwgMHgxMywgMHgxNSwgMHgwRCwKKzB4QzAsIDB4NTcsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4NDAsCisweERGLCAweDAwLCAweDdDLCAweDEzLCAweDcwLCAweDhELCAweEMwLCAweDM3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDIzLAorMHhGMCwgMHg0RCwgMHhEMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMiwgMHg3QywgMHgwMywgMHg3MCwgMHgwRCwgMHgwMCwgMHhCNCwKKzB4MDgsIDB4NUYsIDB4ODAsIDB4N0MsIDB4MDIsIDB4QjIsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDYsIDB4OUYsIDB4MDIsIDB4M0MsCisweDAzLCAweDUwLCAweDA5LCAweEMwLCAweDMzLCAweDAwLCAweERFLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDBELCAweEMwLAorMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgyNywgMHgwMCwgMHhGRiwKKzB4OTAsIDB4Q0QsIDB4MDMsIDB4RjEsIDB4MEYsIDB4QzEsIDB4M0UsIDB4MDAsIDB4QkYsIDB4MDEsIDB4Q0UsIDB4MDMsIDB4MzIsCisweDBGLCAweEUwLCAweDJDLCAweDAwLCAweEJGLCAweDAxLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMxLCAweDVGLCAweDAwLAorMHg3RiwgMHgwMSwgMHhGQywgMHgyMywgMHgzOCwgMHgwNSwgMHhFMCwgMHgyQywgMHgwMSwgMHgzOCwgMHg5MCwgMHhGQywgMHgwMywKKzB4MzAsIDB4NEIsIDB4REQsIDB4M0QsIDB4MDAsIDB4RjMsIDB4MTAsIDB4Q0MsIDB4NDMsIDB4NzgsIDB4OUYsIDB4QzAsIDB4MTMsCisweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDU2LCAweDAwLCAweERELCAweDQ5LAorMHg0NCwgMHgwMywgMHg3MCwgMHgwQywgMHg0MCwgMHg3NCwgMHgwOCwgMHg5RCwgMHgwMCwgMHgwNCwgMHgwMywgMHhCMCwgMHgwRCwKKzB4QzAsIDB4NjYsIDB4ODAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzAsIDB4MTUsIDB4MDMsIDB4MUQsCisweDIzLCAweDVDLCAweDAyLCAweEIwLCAweDA0LCAweDQ0LCAweDI1LCAweDAwLCAweDFELCAweDQxLCAweDc0LCAweDAzLCAweDcwLAorMHgwOSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHhEMCwgMHgxRCwgMHg0MCwgMHgxNywgMHgwMiwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4QTQsIDB4MDEsIDB4REQsIDB4MDAsIDB4NDQsCisweDA3LCAweEQwLCAweDBELCAweDYwLCAweDM2LCAweDAyLCAweDlELCAweDA0LCAweDQ0LCAweDAzLCAweDEwLCAweDBDLCAweDQ4LAorMHgzNCwgMHgwMiwgMHhERCwgMHgwNiwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg2MCwgMHgwNywgMHgwMCwgMHg5RCwgMHg0NCwKKzB4NzQsIDB4MDMsIDB4OTMsIDB4MEQsIDB4NDAsIDB4QTQsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MjksCisweDQwLCAweDM0LCAweDAwLCAweEMwLCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDA3LCAweDIwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHhERCwgMHgyMCwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4ODAsIDB4OEQsIDB4MDAsIDB4NDUsIDB4MDMsIDB4OTksIDB4MEMsIDB4NDAsIDB4MzAsCisweDgwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDAxLCAweDAwLCAweDhELCAweDAwLCAweDEwLAorMHgwMiwgMHg5MCwgMHgwQywgMHg2MCwgMHgxMSwgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwMywgMHg1MCwgMHgwOCwgMHg0MCwKKzB4MzAsIDB4NDAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4QTEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEIwLCAweDI2LCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDAzLCAweEY4LAorMHgwRCwgMHhDMCwgMHgzNiwgMHgwMCwgMHhERiwgMHg0MCwgMHhDNiwgMHgwMywgMHgzMiwgMHgwRiwgMHg1MCwgMHgyNCwgMHgyMCwKKzB4NUQsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MDcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzgsIDB4MDMsCisweDkwLCAweDBELCAweDQwLCAweDI0LCAweDA4LCAweDFGLCAweDAwLCAweEZDLCAweDAzLCAweDMxLCAweDA1LCAweEMwLCAweDM1LAorMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwMywgMHhDNCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MUYsIDB4MjAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4N0EsIDB4MEYsCisweEMwLCAweDNGLCAweDAwLCAweDdDLCAweDAwLCAweEZDLCAweDAzLCAweEYzLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweDdGLAorMHgwMCwgMHhGQywgMHg4MywgMHhGMSwgMHgwRiwgMHg4MCwgMHgwRCwgMHgwMCwgMHgzRSwgMHgwMCwgMHhEQywgMHg4MiwgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzAsIDB4MDcsIDB4NDAsIDB4M0YsIDB4MDAsCisweEY3LCAweDAwLCAweEZDLCAweDAzLCAweEY4LCAweDBCLCAweEMwLCAweDE3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHg1RiwgMHgwMCwgMHgzMywgMHg4QywgMHhDQywgMHgxMCwgMHgzMCwgMHgxRiwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4MzMsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MUYsIDB4RTAsIDB4N0YsIDB4MDAsIDB4QkIsIDB4MDEsCisweEY0LCAweDA3LCAweDcwLCAweDBCLCAweEMwLCAweDdDLCAweDA1LCAweEZGLCAweDQyLCAweEZDLCAweDMyLCAweEYwLCAweDRGLAorMHhDOCwgMHgzRiwgMHgwMSwgMHhGRiwgMHgwMSwgMHhGQywgMHgwQywgMHgzMCwgMHg0RiwgMHhDMCwgMHg0RSwgMHgwMCwgMHhCMywKKzB4MDAsIDB4N0MsIDB4NzMsIDB4RjAsIDB4NEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDA4LCAweDc3LCAweDAwLCAweDExLCAweDBFLCAweDZDLCAweDI0LCAweDMwLCAweDFELCAweDQwLCAweDIzLAorMHgwMCwgMHg1MSwgMHgwMywgMHgxNCwgMHgwMiwgMHg1MCwgMHg0RCwgMHg0OSwgMHgzMywgMHgxMCwgMHhDMSwgMHgxMCwgMHg3NCwKKzB4MDQsIDB4MTAsIDB4QjksIDB4RTAsIDB4RkUsIDB4MDAsIDB4RkQsIDB4MEEsIDB4NzQsIDB4MjIsIDB4RDAsIDB4QkYsIDB4NDAsCisweDNGLCAweDBCLCAweENELCAweDAwLCAweDc0LCAweDAwLCAweDUwLCAweDNELCAweDQwLCAweDQ0LCAweDAwLCAweDkxLCAweDBCLAorMHhGNCwgMHgwMywgMHhEMSwgMHgxRiwgMHg0MCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTEsIDB4QTAsIDB4MjcsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDAsCisweDgxLCAweDAyLCAweDA0LCAweDAzLCAweDEwLCAweDRDLCAweDQwLCAweDMzLCAweDAwLCAweEM5LCAweDAwLCAweDc0LCAweDAzLAorMHg1NCwgMHgwNCwgMHg1MCwgMHgzMiwgMHgyMCwgMHhDNSwgMHg4NCwgMHgzNCwgMHgxMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMSwKKzB4MDQsIDB4Q0QsIDB4MDAsIDB4NTQsIDB4MTEsIDB4MTAsIDB4MkMsIDB4NDgsIDB4NDYsIDB4ODAsIDB4QzEsIDB4MDAsIDB4MTQsCisweDEzLCAweEQwLCAweDJDLCAweDQwLCAweDQ3LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBOCwgMHgyNSwgMHgwMiwgMHg1MSwgMHgwMCwgMHg0NCwgMHgwOCwgMHgxMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwMiwgMHg1MSwKKzB4MDAsIDB4NTQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NDgsIDB4MzcsIDB4MDAsIDB4RDksIDB4MDMsIDB4NzQsIDB4MTgsIDB4MTQsCisweDE1LCAweDUwLCAweDM2LCAweDAwLCAweEQ5LCAweDAwLCAweDcwLCAweDIyLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDIwLAorMHhERCwgMHgwMCwgMHg3NCwgMHgwOSwgMHg1MCwgMHgwRCwgMHg0MCwgMHg0NiwgMHg0MCwgMHhEMSwgMHgxMSwgMHg3NCwgMHgwMywKKzB4RDEsIDB4MEQsIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsCisweDUzLCAweDAxLCAweDEzLCAweDEwLCAweDQ0LCAweDBDLCAweDMwLCAweDBELCAweEMwLCAweDI3LCAweDQwLCAweDEzLCAweDgwLAorMHg0NCwgMHgwNiwgMHgzNCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhEQiwgMHgwMSwgMHgzQywgMHgwOSwgMHg3MCwgMHgzMSwKKzB4NDAsIDB4MzYsIDB4MzAsIDB4REYsIDB4MDAsIDB4NzgsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDBDLCAweDMwLCAweDBELCAweEMwLCAweDQyLCAweDEwLCAweEQzLCAweDAxLCAweDdDLCAweDAzLCAweEYxLAorMHgwRCwgMHhDMCwgMHgwMywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg3RCwKKzB4NTAsIDB4RUYsIDB4MTAsIDB4QkMsIDB4MjIsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MkIsIDB4MDAsIDB4OUYsIDB4MDAsIDB4QjgsCisweDI2LCAweEIwLCAweDBGLCAweDg4LCAweDNGLCAweDAwLCAweEY3LCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLAorMHgzRiwgMHgwMCwgMHhGRiwgMHgyMCwgMHhGOCwgMHgwNiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgxMCwKKzB4RkMsIDB4MjQsIDB4RjAsIDB4MEUsIDB4QzAsIDB4MEQsIDB4MjgsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsCisweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDI1LCAweDA4LAorMHgxRiwgMHgwMCwgMHg2QywgMHgyOSwgMHgzMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMSwgMHhDNywgMHg4MCwgMHg0QywgMHgwMywKKzB4MzQsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDIsIDB4NEUsIDB4MDgsIDB4MjIsIDB4MDUsIDB4QzgsIDB4MzQsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweERGLCAweDAwLCAweDZELAorMHgwOSwgMHg3MCwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHhERiwgMHgwQSwgMHg3QywgMHgwMywgMHhGMSwgMHgwRCwgMHhDNCwKKzB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4REQsCisweDAwLCAweDQ1LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweEE3LCAweDAwLCAweEQxLCAweDAwLCAweDRELCAweDAzLCAweDEwLAorMHgwRCwgMHhDMCwgMHg3NiwgMHgwMiwgMHhEMSwgMHgwMCwgMHg0NSwgMHgwMSwgMHhCMCwgMHgwNCwgMHhDMSwgMHgzRSwgMHgwMCwKKzB4RkQsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QzEsIDB4MUYsIDB4QzEsIDB4M0UsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsIDB4MDEsCisweDEwLCAweDBGLCAweEMwLCAweDQ1LCAweDAwLCAweERELCAweDQxLCAweEY0LCAweDgzLCAweEQwLCAweDVGLCAweDQwLCAweDRGLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgyMiwgMHgwMCwgMHg4RCwgMHgwMSwKKzB4MDQsIDB4MDcsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsCisweDQwLCAweEY0LCAweDAwLCAweEM1LCAweDAwLCAweDA0LCAweDA2LCAweDE4LCAweDA4LCAweDQwLCAweDcwLCAweDAwLCAweENELAorMHg4MCwgMHgzNCwgMHgwMywgMHhDMCwgMHgxQywgMHg0MCwgMHgzMCwgMHgwOCwgMHhDRCwgMHhDMCwgMHgwNCwgMHgwMSwgMHg1MCwKKzB4MEMsIDB4NDAsIDB4NTMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MUYsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDY4LCAweDAwLCAweDJELCAweDE5LCAweDA0LAorMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg2QiwgMHgwMCwgMHg2MSwgMHgwMSwgMHhBNCwgMHgyNywgMHg5MCwgMHgxRSwgMHg0MCwKKzB4N0EsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QzQsIDB4MDQsIDB4OTksIDB4OUEsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RUQsIDB4ODEsCisweDk0LCAweDA3LCAweEQwLCAweDlFLCAweDQwLCAweDdBLCAweDAwLCAweEVELCAweDgxLCAweDg0LCAweDA3LCAweDEwLCAweDFFLAorMHg0MCwgMHg0OSwgMHgwMCwgMHg2RCwgMHgwMSwgMHhCNCwgMHgyNywgMHhEMCwgMHgxRSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MjAsIDB4MDAsIDB4REYsIDB4MDAsIDB4MDQsIDB4MDMsCisweDMwLCAweDBDLCAweEMwLCAweDIyLCAweDAyLCAweDg1LCAweDA4LCAweDA0LCAweDIzLCAweEYwLCAweDBELCAweDQwLCAweDMwLAorMHgwNCwgMHhDNywgMHgwOCwgMHgwNCwgMHg0MiwgMHgzMCwgMHgwMCwgMHhDMCwgMHgzMCwgMHgwNCwgMHhDRiwgMHgwMCwgMHgzNCwKKzB4MDIsIDB4RjAsIDB4OEMsIDB4QzAsIDB4MzAsIDB4MDAsIDB4Q0YsIDB4ODAsIDB4NEMsIDB4MDEsIDB4NzAsIDB4MEMsIDB4QzAsCisweDEzLCAweDg0LCAweENGLCAweDAwLCAweDFDLCAweDE3LCAweEYwLCAweDBDLCAweEMwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgyRCwgMHgwMCwgMHg3RiwgMHgwMCwgMHhERCwgMHgwMywgMHhEMCwKKzB4MEYsIDB4QzAsIDB4MkYsIDB4ODAsIDB4N0YsIDB4MDAsIDB4REUsIDB4QTMsIDB4NzAsIDB4MEYsIDB4QzgsIDB4M0YsIDB4MDAsCisweEY3LCAweDAwLCAweEJDLCAweDIyLCAweEYwLCAweDBBLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDA4LCAweEZDLCAweDIyLAorMHhGMCwgMHhBRSwgMHhDMiwgMHgzRiwgMHgyMCwgMHhGRiwgMHgwOCwgMHhEQywgMHgyMSwgMHhGMCwgMHgwRiwgMHhDNCwgMHgwRiwKKzB4MTAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MkYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAwLCAweDMxLCAweDBELAorMHhDMCwgMHgzRiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwNywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDQsIDB4MzAsIDB4MTUsIDB4QzAsIDB4QjUsIDB4MDQsIDB4REYsIDB4MDcsIDB4NkMsIDB4MDMsIDB4RjAsCisweDVELCAweEMwLCAweDM2LCAweDA1LCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEMwLCAweDUzLCAweDAwLAorMHhEMSwgMHg0MCwgMHg3OCwgMHgxNywgMHgzNCwgMHgyRCwgMHhDMCwgMHg1NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4OTgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MTAsIDB4MEUsIDB4NDAsCisweDNCLCAweDkwLCAweEFDLCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDEwLCAweEVELCAweDIwLAorMHhCNCwgMHgwMCwgMHg1MCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMSwgMHhDRCwgMHgxMiwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwKKzB4NDAsIDB4QjgsIDB4MDAsIDB4RTcsIDB4MDAsIDB4OUMsIDB4MDMsIDB4RDAsIDB4NkUsIDB4NDAsIDB4MEIsIDB4MDAsIDB4RTEsCisweDAwLCAweEY0LCAweDJCLCAweDEwLCAweDBFLCAweDQwLCAweDRCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHgwMCwgMHhFOSwgMHgwMCwgMHg4RCwgMHgwMywgMHgyNCwgMHgwNSwgMHg5NCwgMHgxRSwgMHg0MCwgMHg3QiwKKzB4MTAsIDB4RUMsIDB4MDMsIDB4QjQsIDB4MDcsIDB4OTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MjAsIDB4RUQsIDB4MDEsIDB4RjYsCisweDA3LCAweDEwLCAweDE0LCAweDQxLCAweDc5LCAweDAyLCAweEVELCAweDA1LCAweDg0LCAweDA3LCAweDUwLCAweERDLCAweDQwLAorMHg3QSwgMHgwMCwgMHhFRCwgMHgwMSwgMHg5NiwgMHgwNSwgMHhEMCwgMHgxRSwgMHg0MCwgMHg1QiwgMHg4MCwgMHhFMSwgMHg0MSwKKzB4QjQsIDB4MTcsIDB4MTAsIDB4OUUsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDIwLCAweDYzLCAweDAwLCAweENELCAweDAwLCAweDA1LCAweDEzLCAweDkwLCAweDBDLCAweDQwLCAweDMzLCAweDAyLAorMHhDOSwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MiwgMHgzMywgMHgwMCwgMHg0QywgMHgwOCwgMHgzNCwgMHgwQiwKKzB4NTAsIDB4M0MsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MDQsIDB4MDcsIDB4RDEsIDB4MEMsIDB4NDAsIDB4MzIsCisweDIwLCAweEM1LCAweDAwLCAweDU0LCAweDBCLCAweEQwLCAweDBDLCAweDQ0LCAweDIzLCAweDAwLCAweEMxLCAweDA3LCAweDM0LAorMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHg0QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKzB4QTgsIDB4MUQsIDB4MDAsIDB4N0YsIDB4MEEsIDB4RUMsIDB4MUQsIDB4QjAsIDB4MDUsIDB4NDAsIDB4NTcsIDB4MDAsIDB4N0YsCisweDBBLCAweDdDLCAweDAxLCAweEI0LCAweDA1LCAweEMwLCAweDE3LCAweDEwLCAweDdELCAweDAyLCAweEZDLCAweDIxLCAweDMwLAorMHgyNywgMHhDMCwgMHgxNSwgMHgxMCwgMHg1RiwgMHgwMCwgMHg0QywgMHgxNSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNiwgMHg4MCwKKzB4NUYsIDB4QzAsIDB4REMsIDB4MDEsIDB4RjEsIDB4MDUsIDB4QzAsIDB4MUYsIDB4MDIsIDB4NzMsIDB4MDIsIDB4NzQsIDB4MDEsCisweDMwLCAweDA1LCAweEMwLCAweDVGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLAorMHgwNywgMHgwMCwgMHgwRiwgMHgwMiwgMHgzQywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDOCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MTAsIDB4N0MsIDB4MjAsIDB4RjAsIDB4NDEsCisweEMwLCAweDAzLCAweDgwLCAweDFGLCAweDAwLCAweDVELCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDAxLCAweDgwLCAweDFGLAorMHgwMiwgMHg1QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxRiwgMHgwOCwgMHg3QywgMHgwMCwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDIyLCAweDM0LCAweDA5LCAweEMwLCAweDIzLCAweDAwLCAweDgzLCAweDAwLCAweDRDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHhBMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4NjcsIDB4MDAsIDB4OUIsIDB4ODAsIDB4N0MsIDB4MDIsIDB4RDIsIDB4ODksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4ODQsCisweDdDLCAweDAyLCAweEIwLCAweDA4LCAweEMwLCAweDY0LCAweDAwLCAweDhGLCAweDAxLCAweDZDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwKKzB4OUQsIDB4MDMsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NkMsIDB4MjIsCisweEQwLCAweDA5LCAweDQwLCAweEE3LCAweDAwLCAweDhELCAweDAwLCAweDZDLCAweDA2LCAweEQwLCAweDA5LCAweDQwLCAweDI3LAorMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHhDNCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMywgMHg3NCwKKzB4MDIsIDB4NTAsIDB4MDksIDB4QzAsIDB4NjYsIDB4MDIsIDB4OUQsIDB4MDksIDB4NkMsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsCisweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDlELAorMHgwNCwgMHg0NCwgMHgwMiwgMHgxOSwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHg1OCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4MDUsIDB4OUQsIDB4MDAsIDB4NjYsIDB4MDIsIDB4NTIsIDB4OEQsIDB4NDAsIDB4MjcsIDB4MDEsCisweDk5LCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI2LCAweDAwLCAweDkwLCAweDAyLCAweDc0LCAweDAyLAorMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHhDMCwgMHg0NCwgMHg4MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4QTAsIDB4MDAsIDB4OEQsIDB4MDQsCisweDA0LCAweDEyLCAweDEwLCAweDA4LCAweDQwLCAweDMzLCAweDAxLCAweDg1LCAweDA0LCAweDI0LCAweDEyLCAweEQwLCAweDA4LAorMHg0MCwgMHgyMywgMHgwMCwgMHg5RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwgMHgyMywgMHgwMSwgMHg4MSwKKzB4MDQsIDB4MzQsIDB4MTIsIDB4RDAsIDB4MDgsIDB4NDgsIDB4MjEsIDB4MDEsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MjIsIDB4NTAsCisweDA4LCAweDRBLCAweDIyLCAweDAwLCAweDhELCAweDA0LCAweDI2LCAweDEyLCAweEQwLCAweDQ4LCAweDQ4LCAweDQzLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHg1RiwgMHgwQSwgMHg0QywKKzB4MDAsIDB4MzEsIDB4MDEsIDB4NDAsIDB4ODcsIDB4MDIsIDB4MTMsIDB4MDAsIDB4MEMsIDB4MjgsIDB4NzAsIDB4QTEsIDB4QzAsCisweDg3LCAweDAyLCAweDFGLCAweDBBLCAweDY0LCAweDAwLCAweDcwLCAweDAxLCAweEM0LCAweDA3LCAweDAwLCAweDFCLCAweDBBLAorMHg3NCwgMHgyOCwgMHhGMCwgMHg0MSwgMHg0MSwgMHg4NywgMHg0MiwgMHgxMywgMHgwQSwgMHg3QywgMHgwOCwgMHhCMCwgMHg0MSwKKzB4QzEsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MjgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDk4LCAweDZGLCAweDAwLCAweEJGLCAweDI4LCAweEY1LCAweDIyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgyOCwgMHhGQywgMHgyMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4QkUsIDB4NDAsIDB4QkQsIDB4MDIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDgsIDB4RkMsCisweDIyLCAweEYwLCAweDA5LCAweEMyLCAweDI3LCAweDAyLCAweDlGLCAweDAwLCAweEZDLCAweDEyLCAweEYwLCAweDA5LCAweEMwLAorMHgyRiwgMHgwMCwgMHhCRiwgMHgwOCwgMHg3QywgMHgyMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MTQsIDB4Q0MsIDB4MTIsIDB4RjAsCisweDA5LCAweEMwLCAweDJGLCAweDAwLCAweDkzLCAweDAwLCAweEZDLCAweDEyLCAweDcwLCAweDBCLCAweEMwLCAweDJGLCAweDAyLAorMHg4RiwgMHgwMCwgMHhCQywgMHgwMiwgMHgzMiwgMHgwQiwgMHhDMCwgMHgyQywgMHgwMSwgMHg5RiwgMHgxNCwgMHg0QywgMHgzMiwKKzB4MzAsIDB4MEIsIDB4QzAsIDB4MjQsIDB4MDAsIDB4QjMsIDB4MDgsIDB4NEMsIDB4MDIsIDB4RjIsIDB4NDksIDB4QzEsIDB4MkYsCisweDAwLCAweEJGLCAweDAwLCAweDdDLCAweDAyLCAweDIwLCAweDBCLCAweEMwLCAweDYwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHg1NywgMHgwNSwgMHgxRCwgMHgwNCwgMHg0NCwgMHgyMCwgMHhEMCwgMHgwMSwKKzB4NDgsIDB4MDcsIDB4MDQsIDB4MUIsIDB4MDgsIDB4NzQsIDB4NTAsIDB4MTAsIDB4NDEsIDB4NDAsIDB4MDcsIDB4ODEsIDB4MUQsCisweDUwLCAweDc0LCAweDAwLCAweDExLCAweDgxLCAweEMwLCAweDA2LCAweDAwLCAweDFELCAweDA0LCAweDQ1LCAweDMwLCAweEIwLAorMHgyMSwgMHhDMCwgMHgwNiwgMHgwQywgMHgxMSwgMHgwMCwgMHg0NCwgMHg1MCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwKKzB4MUQsIDB4MDIsIDB4NzQsIDB4NDAsIDB4MTAsIDB4MDEsIDB4QzAsIDB4NzIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAwLCAweDhELCAweDE0LCAweDA1LCAweDAyLCAweEQwLCAweDA4LCAweDQwLAorMHgyMywgMHgwMiwgMHg4MSwgMHgwMSwgMHgxNCwgMHgzMiwgMHg1MSwgMHg0OCwgMHg0MSwgMHgyMywgMHgwMSwgMHg4RCwgMHgwNSwKKzB4NzQsIDB4MDMsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDIsIDB4ODksIDB4MTQsIDB4MDQsIDB4MTIsIDB4MTAsIDB4ODgsCisweDQwLCAweDIwLCAweDQyLCAweDgxLCAweDAwLCAweDI0LCAweDEyLCAweDkwLCAweDA4LCAweDQwLCAweDIzLCAweDgwLCAweDhELAorMHgwOSwgMHgzNCwgMHgwMiwgMHgxNCwgMHgwOCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDIsIDB4OUQsIDB4MDQsIDB4NDQsIDB4MTIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAyLCAweDk5LCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LAorMHgwMiwgMHgxMCwgMHgyOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg4RCwgMHgwMCwgMHg0NCwgMHgyMiwgMHg5NCwgMHgwOSwgMHg0MCwKKzB4MjYsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NjQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4QTcsIDB4MDAsIDB4OUQsIDB4MDgsCisweDc0LCAweDAyLCAweDExLCAweDA5LCAweDQwLCAweDYyLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHgwOCwgMHgyRCwgMHgxMCwgMHg5RiwgMHgwMSwgMHg0QywgMHgwNiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwKKzB4OTMsIDB4MDEsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4M0MsIDB4NDYsCisweDM0LCAweDA5LCAweDUwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI0LAorMHgwMCwgMHg5MywgMHgwMCwgMHg2RCwgMHg2RSwgMHhGMCwgMHgwOSwgMHhDMCwgMHhBNywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3OCwKKzB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MTQsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweDAwLCAweDY1LCAweDAwLCAweDlGLCAweDAxLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLAorMHg4MywgMHg3RSwgMHgwRSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwOCwgMHg5RiwgMHg0OSwgMHg3QywgMHgyNiwgMHhGMCwKKzB4NDksIDB4QzAsIDB4MjcsIDB4MDgsIDB4OUYsIDB4MjAsIDB4M0MsIDB4MDYsIDB4NzEsIDB4MDksIDB4QzAsIDB4MjMsIDB4MDAsCisweDlGLCAweDAwLCAweDVDLCAweDgyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAxLCAweDNDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwKKzB4ODUsIDB4MDAsIDB4MEYsIDB4MDEsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDEsIDB4MUYsIDB4MDAsCisweDdFLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDIwLCAweDFCLCAweDAwLCAweDRGLCAweDAwLCAweEIwLCAweDAxLAorMHhDMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMCwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwKKzB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDAxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLCAweDE0LAorMHgwMCwgMHg3RCwgMHgwMCwgMHg3NCwgMHg4MSwgMHhEMCwgMHgwNSwgMHhDMCwgMHg5RCwgMHgwNCwgMHg1RCwgMHgwMCwgMHg3RSwKKzB4MDEsIDB4RDAsIDB4MTUsIDB4NDAsIDB4NUYsIDB4MDEsIDB4NTEsIDB4MDAsIDB4NDQsIDB4MDEsIDB4MTQsIDB4MDQsIDB4RDAsCisweDE2LCAweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweDEwLCAweDQ1LCAweEMwLCAweDE0LCAweDAwLCAweDdELCAweDEwLAorMHg0NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0NCwgMHgxNywgMHgyMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNCwKKzB4NDAsIDB4NTMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsCisweENELCAweDAwLCAweDM0LCAweDAyLCAweERBLCAweDBDLCAweDQ4LCAweDM1LCAweDIwLCAweENELCAweDAwLCAweDc0LCAweDAzLAorMHhEMCwgMHg5QywgMHg0MCwgMHgzMywgMHg4MCwgMHhDOSwgMHgyMCwgMHgxMCwgMHgwMiwgMHg5MCwgMHg4QywgMHg0MCwgMHgyMiwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MzYsIDB4MDMsIDB4MTgsIDB4MDgsIDB4NDAsIDB4MzEsIDB4MDAsIDB4REQsIDB4MDEsIDB4MjQsCisweDgzLCAweEQwLCAweDBDLCAweDQwLCAweDIzLCAweDgyLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLAorMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHg4MSwgMHhFRCwKKzB4MDAsIDB4QjQsIDB4NDMsIDB4RDksIDB4MEUsIDB4NDAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4OTQsIDB4NDMsIDB4RDAsCisweDBFLCAweDQwLCAweDZCLCAweDAxLCAweEYxLCAweDA1LCAweEQ0LCAweDAzLCAweDEwLCAweDBGLCAweDUwLCAweDNBLCAweDAwLAorMHhFRCwgMHgwOCwgMHgzNCwgMHgwMywgMHgxOCwgMHgwRSwgMHg0MCwgMHgzOSwgMHgwOCwgMHhFRCwgMHgwMCwgMHhBNCwgMHgwMywKKzB4QzAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4ODAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MTMsCisweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweEY4LCAweDAwLCAweDJGLCAweDAxLAorMHhCQywgMHgwNywgMHhGMCwgMHgxRSwgMHhDMCwgMHg1OSwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCNCwgMHgwNiwgMHhGMCwgMHgxRSwKKzB4RTQsIDB4RkIsIDB4MDAsIDB4RUIsIDB4MTEsIDB4OTQsIDB4MDcsIDB4QjIsIDB4MUUsIDB4RDAsIDB4N0EsIDB4MDAsIDB4RUYsCisweDE1LCAweEJDLCAweDVGLCAweDcwLCAweDFDLCAweEMwLCAweDc5LCAweDAwLCAweEZGLCAweDAxLCAweEFDLCAweDA3LCAweEUwLAorMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCNCwgMHgzNywgMHhGMCwgMHgxQSwgMHhDMCwgMHg1MywgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDBELCAweEM0LCAweDE1LCAweDEwLCAweERGLCAweDAwLCAweDdDLCAweDBBLCAweEIwLCAweDBELCAweEMwLAorMHgwMywgMHgwMCwgMHhERiwgMHgwOCwgMHg2QywgMHgwMywgMHhGMiwgMHgwQywgMHhEMCwgMHgzNywgMHgwMCwgMHhERiwgMHgyMCwKKzB4N0MsIDB4MDMsIDB4RjQsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDcsIDB4NUYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MEQsCisweEM4LCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDIzLCAweEYwLCAweDBELCAweEMwLCAweDQzLCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg3QiwgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgwNywKKzB4RkEsIDB4OEYsIDB4QzAsIDB4NkYsIDB4MDIsIDB4RjMsIDB4MDksIDB4OEMsIDB4MEYsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsCisweDAwLCAweEYzLCAweDAxLCAweEVDLCAweDA3LCAweDMwLCAweDFFLCAweEMwLCAweDdDLCAweDMwLCAweEY3LCAweDQxLCAweENDLAorMHgwNywgMHg3MCwgMHgxRiwgMHhDNCwgMHg3QywgMHgwMCwgMHhGMywgMHgwMSwgMHhEQywgMHg0NywgMHg3MiwgMHgxRiwgMHhDOCwKKzB4N0IsIDB4MjIsIDB4RjcsIDB4QTEsIDB4RkMsIDB4ODcsIDB4MzIsIDB4MUIsIDB4QzIsIDB4MDgsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDM5LCAweDAwLCAweDYxLCAweDQwLCAweDg0LCAweDAzLCAweDc4LAorMHgwRSwgMHg0NCwgMHgyQiwgMHgxMCwgMHhFMSwgMHgyMCwgMHhBQywgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwKKzB4RjEsIDB4MDAsIDB4ODQsIDB4MTMsIDB4NTAsIDB4NEUsIDB4NDQsIDB4MzksIDB4MDAsIDB4RjEsIDB4MDAsIDB4QzQsIDB4MDMsCisweDEwLCAweDBFLCAweEMwLCAweDNFLCAweDAyLCAweEUxLCAweDAwLCAweDg2LCAweDAzLCAweEYwLCAweDBFLCAweDQwLCAweDNCLAorMHg0MCwgMHhFNSwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N0QsIDB4MDAsIDB4MjUsIDB4MDAsIDB4ODQsIDB4MDMsIDB4NTAsIDB4OEUsCisweDQwLCAweDBCLCAweDAwLCAweEMwLCAweDIwLCAweDg0LCAweDAyLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEUxLAorMHgwMiwgMHhDNCwgMHgwMywgMHgxMiwgMHgwRSwgMHg2MCwgMHgzOCwgMHgwMCwgMHhFNSwgMHgwMCwgMHg4NCwgMHgwMywgMHgxMCwKKzB4MEUsIDB4NDAsIDB4MzksIDB4MDAsIDB4RTEsIDB4MDAsIDB4RDQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0YsIDB4NDAsCisweEVELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHgzMywgMHgwMCwgMHg0MSwgMHgwMywgMHgwNSwgMHgxQiwgMHg1MCwgMHgwQywgMHg0MCwKKzB4NDMsIDB4NDAsIDB4QzEsIDB4MDIsIDB4MjQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4QzEsIDB4NDEsCisweDA0LCAweDAzLCAweDUxLCAweDBDLCAweDYwLCAweDMxLCAweDAwLCAweEMxLCAweDAwLCAweDA1LCAweDAzLCAweDEwLCAweDBDLAorMHg0MCwgMHgzMywgMHgwMCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwQiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMiwgMHg4RCwKKzB4NDIsIDB4MzQsIDB4MDMsIDB4MTQsIDB4MEMsIDB4NTAsIDB4MTgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweEE4LCAweEI1LCAweDQyLCAweEQ3LCAweDA2LCAweDBDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDI3LAorMHgwNCwgMHhEMywgMHgwMCwgMHg0QywgMHgwMiwgMHgzNCwgMHgwRCwgMHhDMCwgMHgzRiwgMHg0MCwgMHhGMSwgMHgwMSwgMHgwQywKKzB4MDcsIDB4MzAsIDB4QUMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4RjcsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsCisweDNELCAweDAwLCAweEQzLCAweDAwLCAweERDLCAweDIzLCAweDcwLCAweDBELCAweDQwLCAweEY3LCAweDQyLCAweERGLCAweDAyLAorMHhGQywgMHgwMywgMHgzMCwgMHgwOSwgMHhDMCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MTAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4QTcsIDB4MDAsCisweERGLCAweDAxLCAweDVDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDA4LCAweDVDLCAweDYzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNiwKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorMHgwOCwgMHgzRiwgMHgwMCwgMHgzMywgMHgwMCwgMHhGQywgMHgwMywgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNywgMHgwMCwgMHhGNywKKzB4MTAsIDB4RkMsIDB4MDIsIDB4MzAsIDB4NUYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4MzAsCisweDlCLCAweEMwLCAweDM0LCAweDAwLCAweEUzLCAweDAwLCAweENDLCAweDAzLCAweDMwLCAweDFELCAweEMwLCAweDNGLCAweDAwLAorMHhCMywgMHgwMSwgMHhGRSwgMHgwMywgMHhGMCwgMHgwRiwgMHhDQSwgMHhCRiwgMHgwMCwgMHhGRSwgMHgxMCwgMHhGNCwgMHgwMywKKzB4MzAsIDB4NUEsIDB4ODAsIDB4MDAsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsCisweDM2LCAweDAwLCAweDk1LCAweDAwLCAweDc0LCAweDA3LCAweDEwLCAweDBELCAweDQwLCAweEM3LCAweDA0LCAweEQxLCAweDAwLAorMHg3NCwgMHgyNiwgMHgxMCwgMHgxRCwgMHg0MCwgMHgwNywgMHgwMCwgMHhEOSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgxRCwKKzB4NTAsIDB4MzUsIDB4MDAsIDB4REIsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4OTEsCisweDAzLCAweDc2LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDIwLCAweERELCAweDA5LCAweDc0LCAweDAzLCAweDEwLAorMHgwOSwgMHhDMCwgMHgwNSwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzMiwKKzB4MDAsIDB4RDEsIDB4MDEsIDB4NzQsIDB4MjMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NjMsIDB4MDAsIDB4RDUsIDB4MDAsIDB4MzQsCisweDAzLCAweDEwLCAweDA5LCAweDQwLCAweDM3LCAweDAyLCAweERELCAweDAwLCAweDc2LCAweDA3LCAweDEwLCAweDBELCAweDQwLAorMHg3NCwgMHgyMCwgMHhEMSwgMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwgMHg0RCwgMHg0MCwgMHgzMywgMHgyOCwgMHhEMSwgMHgwNCwKKzB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4MjQsIDB4MDMsIDB4MDAsIDB4MDksCisweDQwLCAweDA1LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDAwLAorMHgwNSwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgwMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywKKzB4MTAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzAsCisweDAwLCAweEM5LCAweDAwLCAweDA1LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweEMxLCAweDAwLCAweDM0LAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDQywgMHgwMCwgMHgzNCwgMHgyMywgMHgxMCwgMHgwOCwgMHg0MCwKKzB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4M0UsIDB4MDAsIDB4MDMsCisweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweEQ3LCAweDAwLCAweEZDLCAweDAyLCAweDE0LAorMHgwOSwgMHhDMCwgMHgyMywgMHgxMCwgMHhGRiwgMHgwMCwgMHg3QywgMHgwMywgMHgzNCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwKKzB4RjMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QzMsIDB4MjAsIDB4NzQsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweEZDLCAweDAzLCAweDMwLCAweDA5LCAweEMwLCAweDAxLAorMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsCisweDgwLCAweDBGLCAweDAwLCAweEZBLCAweDAwLCAweEJDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLAorMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHg4MCwgMHgzRiwgMHgwOCwgMHhGRiwgMHgwMCwgMHhCMCwgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MTMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MTUsIDB4NjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEJGLCAweDhDLCAweENDLAorMHgxMiwgMHgzMiwgMHhDRiwgMHhDMCwgMHg1RSwgMHgyMiwgMHhCMywgMHgyMSwgMHhGQywgMHgwNiwgMHhGMCwgMHhDRiwgMHhDNCwKKzB4M0QsIDB4MDMsIDB4MjMsIDB4MDEsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MTMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4NEMsCisweENDLCAweDA2LCAweEIwLCAweDE3LCAweEQ4LCAweDVDLCAweDAwLCAweEY3LCAweDA0LCAweEFDLCAweDA0LCAweEIwLCAweDRGLAorMHhDMSwgMHg3QSwgMHgwOCwgMHgzRiwgMHgwMSwgMHhEQywgMHgzMCwgMHhCMCwgMHgxQiwgMHhDNCwgMHgwRiwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4NzcsIDB4MDAsIDB4REQsIDB4MEUsIDB4NDQsIDB4MjYsCisweDEwLCAweEVGLCAweDQwLCAweDI0LCAweDAxLCAweEQxLCAweDA0LCAweDc0LCAweDA1LCAweDcwLCAweDJGLCAweDQwLCAweEJDLAorMHgwMiwgMHg5MSwgMHgwMSwgMHhGNCwgMHgxQiwgMHg5MCwgMHg0MCwgMHg0MCwgMHhGRiwgMHgwMiwgMHhGRCwgMHgwOCwgMHg0NCwKKzB4QzMsIDB4MTAsIDB4MTksIDB4NDAsIDB4MzQsIDB4MDAsIDB4RjEsIDB4MDEsIDB4NDQsIDB4MDUsIDB4MTAsIDB4M0YsIDB4NDAsCisweDc0LCAweDEwLCAweDFELCAweEExLCAweDM0LCAweDM4LCAweEIwLCAweDFDLCAweDQwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwMCwgMHg4RCwgMHgwNCwgMHgwNCwgMHgwMiwgMHgxMCwKKzB4NEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4QzEsIDB4MTAsIDB4MTQsIDB4MDIsIDB4RDAsIDB4NkMsIDB4NDgsIDB4MzMsIDB4MTEsCisweDQ1LCAweDAwLCAweDM0LCAweDBCLCAweEQwLCAweDAwLCAweDQxLCAweDMzLCAweDEwLCAweEM1LCAweDQ0LCAweDA0LCAweDEzLAorMHg5MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwNSwgMHhDOSwgMHgwOCwgMHg2NCwgMHgwMSwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMCwKKzB4MjAsIDB4MDUsIDB4MDAsIDB4MTQsIDB4MDAsIDB4RDAsIDB4MDQsIDB4NDAsIDB4NDcsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDAwLCAweERELCAweDIwLCAweDQ0LCAweDAzLCAweDEwLCAweDBELAorMHg0MCwgMHhBNCwgMHgwQSwgMHhEMSwgMHgwNCwgMHg3NCwgMHgwMSwgMHg1MCwgMHgwRCwgMHg0MCwgMHgzNCwgMHg0MCwgMHg5NSwKKzB4MDIsIDB4NzQsIDB4MDMsIDB4RDEsIDB4MTksIDB4NDIsIDB4MzcsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NDQsIDB4MDMsIDB4OTAsCisweDA4LCAweDQwLCAweEI0LCAweDAxLCAweEQ5LCAweDAwLCAweDY0LCAweDA1LCAweEQwLCAweDBELCAweDUwLCAweDM2LCAweDA0LAorMHgxRCwgMHgxOCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDksIDB4MEMsIDB4MDMsIDB4MzQsIDB4MEQsIDB4QzAsCisweEQ2LCAweDA4LCAweDkzLCAweDAxLCAweDVDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDEwLCAweEQ3LCAweDA5LAorMHg3QywgMHgwMywgMHhGMCwgMHgyMSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHg4MywgMHhCMSwgMHgyNSwKKzB4QzksIDB4MzQsIDB4NDAsIDB4REIsIDB4MDAsIDB4NkMsIDB4MTcsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QTYsIDB4MDAsIDB4MUYsCisweDAyLCAweDVDLCAweDE2LCAweEYwLCAweDM5LCAweEMwLCAweDAzLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHhFRiwgMHhDMSwgMHg3QywgMHgwMiwgMHhGMiwgMHgwRSwgMHhDMCwgMHg2RiwKKzB4MDAsIDB4RkYsIDB4ODAsIDB4RkMsIDB4OEQsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0IsIDB4MDAsIDB4QkIsIDB4MDAsIDB4RkMsCisweDAzLCAweEIwLCAweDBGLCAweEM4LCAweDNGLCAweDAwLCAweEZGLCAweDEwLCAweERELCAweDgzLCAweDcwLCAweDBCLCAweEMwLAorMHgzRiwgMHgwMCwgMHhGNywgMHgwMCwgMHhEQywgMHgwMywgMHgzMCwgMHgwRiwgMHhDMCwgMHgzRCwgMHgwMCwgMHgzRiwgMHgwMSwKKzB4RkMsIDB4MEUsIDB4QjQsIDB4MkYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDA4LCAweDM1LCAweDAxLCAweDkzLCAweDQwLCAweDdDLCAweDAzLCAweDMwLCAweDhELCAweEMwLCAweDM1LCAweDA4LAorMHhERiwgMHgwMCwgMHg0QywgMHgwQiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHg4OCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMywKKzB4NzAsIDB4MjUsIDB4QzAsIDB4MzQsIDB4MDgsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MkQsIDB4RTIsIDB4MjcsCisweDAwLCAweERGLCAweDA0LCAweDdDLCAweDA5LCAweEYwLCAweDBELCAweEMxLCAweDI1LCAweDAwLCAweDU3LCAweDAwLCAweDVDLAorMHgwMiwgMHgzMCwgMHgwNSwgMHhDMCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywKKzB4QTAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDUsIDB4NzQsIDB4ODMsIDB4MTgsIDB4MUYsIDB4NDAsIDB4MjQsIDB4MDAsIDB4REQsCisweDEwLCAweDQ0LCAweDgxLCAweEQwLCAweDBGLCAweEMwLCAweDNFLCAweDg4LCAweDlGLCAweDAwLCAweEM0LCAweDAzLCAweDEwLAorMHgwRCwgMHg0MiwgMHgzQywgMHgwMCwgMHhGRCwgMHgwMCwgMHg3NCwgMHgwMywgMHhCMCwgMHgwOSwgMHg0MCwgMHg3NywgMHgwMCwKKzB4RUQsIDB4MDAsIDB4MzYsIDB4MDUsIDB4MTAsIDB4NkUsIDB4NDAsIDB4QjQsIDB4MDIsIDB4MUIsIDB4MTEsIDB4NEMsIDB4MDMsCisweDQwLCAweDA1LCAweEMwLCAweDRFLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLAorMHhCMiwgMHgwMiwgMHg4MSwgMHgwMCwgMHgzNCwgMHg4MiwgMHgxMCwgMHgxQywgMHg0MCwgMHg2NSwgMHgwMiwgMHhDRCwgMHgwMSwKKzB4MDQsIDB4ODEsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MDgsIDB4MEQsIDB4MDAsIDB4MTQsIDB4MDMsIDB4NTIsIDB4MDAsCisweDQyLCAweDMyLCAweDIwLCAweENELCAweDQzLCAweDc0LCAweDAyLCAweDEwLCAweDBDLCAweDQwLCAweDY3LCAweDAyLCAweENELAorMHgwMywgMHgyNCwgMHgwMywgMHg1OCwgMHgwQywgMHg0NCwgMHgzMSwgMHgwOCwgMHgwNSwgMHgwMSwgMHg1NCwgMHgxMSwgMHgxMCwKKzB4MDQsIDB4NDAsIDB4MUMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NzgsCisweDAwLCAweEExLCAweDAxLCAweEI0LCAweDA2LCAweDEwLCAweDFDLCAweDQwLCAweDY4LCAweDAwLCAweEVELCAweDAxLCAweDg0LAorMHgwNSwgMHhEMCwgMHgxRSwgMHg0OCwgMHg3QSwgMHgwMCwgMHgzNSwgMHgwMSwgMHg4NCwgMHgyNywgMHgxMCwgMHg5NiwgMHg1MCwKKzB4N0EsIDB4MDAsIDB4RUQsIDB4MTksIDB4QjQsIDB4MDMsIDB4MTAsIDB4MUEsIDB4NDAsIDB4NkIsIDB4MDAsIDB4RUQsIDB4MDEsCisweEY0LCAweDA1LCAweDE5LCAweDFDLCAweDQwLCAweDdDLCAweDAwLCAweDM5LCAweDgxLCAweEE0LCAweDI0LCAweDEwLCAweDFFLAorMHg0MCwgMHgxQSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwKKzB4QzMsIDB4MDQsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4QzAsIDB4MzEsIDB4MDAsIDB4REYsIDB4MDAsIDB4MEQsIDB4MDEsCisweEY4LCAweDBELCAweEMwLCAweDMwLCAweDAyLCAweDRELCAweDAwLCAweDVDLCAweDA3LCAweDcwLCAweDJDLCAweEMwLCAweDMyLAorMHgwMiwgMHhDRiwgMHgwMCwgMHg3QywgMHgyMywgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHhDRiwgMHgxNCwgMHgzNCwKKzB4NDMsIDB4NzAsIDB4MEMsIDB4QzAsIDB4MzEsIDB4MDAsIDB4QzcsIDB4MDAsIDB4MUUsIDB4MDMsIDB4MzQsIDB4MDQsIDB4QzIsCisweDQ4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDM5LCAweDQyLCAweEZGLAorMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgyRiwgMHhDMSwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwKKzB4MEYsIDB4ODEsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4N0MsIDB4MkIsIDB4QjAsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MDQsCisweEZGLCAweDEwLCAweEY0LCAweDEzLCAweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDEwLCAweDdDLCAweDIxLAorMHg3MCwgMHgwRiwgMHhDMCwgMHgxRiwgMHgxMCwgMHhFRiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwNywgMHhDMCwgMHgwQiwKKzB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsCisweDRDLCAweDAzLCAweEYwLCAweDZELCAweEMwLCAweDI3LCAweDEwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDBELAorMHhDMCwgMHgzNywgMHgwNSwgMHg1NywgMHgwMCwgMHg1QywgMHgzNywgMHgzNCwgMHgwOCwgMHhDMCwgMHgzNiwgMHgwMSwgMHhERiwKKzB4MTIsIDB4NEQsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjIsCisweDRDLCAweEMxLCAweDY2LCAweDAwLCAweDlCLCAweDAxLCAweDRDLCAweDAxLCAweEIwLCAweDA1LCAweEMwLCAweDU3LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgzOSwgMHgwMCwgMHhCRCwgMHgwNCwgMHg4NSwKKzB4MEEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MkIsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDEsIDB4MTAsIDB4OEUsIDB4NDAsCisweDNCLCAweDAxLCAweDZELCAweDAwLCAweDlDLCAweDEzLCAweDEwLCAweDBFLCAweDQwLCAweDM4LCAweDAzLCAweEU3LCAweDA0LAorMHg4NCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwgMHgyQiwgMHgwOCwgMHhFRCwgMHgxNCwgMHhCNCwgMHgwMywgMHg3MCwgMHg0RSwKKzB4QzIsIDB4M0EsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODUsIDB4MDAsIDB4QjAsIDB4MEUsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDc5LCAweDAwLCAweEVELCAweDA5LCAweEE0LCAweDE3LAorMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHg5MCwgMHg1RSwgMHg0MCwgMHg3QiwKKzB4MDIsIDB4RUQsIDB4MzEsIDB4MTYsIDB4MDcsIDB4MTAsIDB4MUYsIDB4NDIsIDB4N0EsIDB4MDAsIDB4RTUsIDB4MDEsIDB4ODQsCisweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDZCLCAweDAwLCAweEVELCAweDA1LCAweEI0LCAweDA3LCAweDUwLCAweERFLCAweDQwLAorMHg2OSwgMHgwMCwgMHhFOSwgMHg4MSwgMHg4NCwgMHg4NywgMHg5MCwgMHgxNiwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsCisweDBDLCAweDQwLCAweDIzLCAweDIwLCAweERELCAweDQwLCAweDM0LCAweDQ1LCAweDEwLCAweDBDLCAweDQwLCAweDM3LCAweDA4LAorMHhDRCwgMHgwNiwgMHgxNCwgMHgwMywgMHgxMCwgMHhCQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhENSwgMHgyMCwgMHgwNCwgMHgwNywKKzB4RDAsIDB4MTgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDEsIDB4NTAsIDB4MEMsIDB4NDAsIDB4NTMsCisweDMwLCAweEMxLCAweDA4LCAweDA0LCAweDBCLCAweDkwLCAweDA0LCAweDQwLCAweDRCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg4OCwgMHgxNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHg2QywgMHg0MSwgMHhGMCwgMHgwNSwKKzB4QzAsIDB4MUYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4QkMsIDB4NEQsIDB4QjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NkYsCisweDAxLCAweDVDLCAweDAxLCAweDMwLCAweDM3LCAweEMwLCAweDE2LCAweDAwLCAweDU3LCAweDgwLCAweDRDLCAweDkxLCAweEYwLAorMHg0NywgMHhDMCwgMHg5RiwgMHgwMCwgMHg1RiwgMHgwMCwgMHhCQywgMHgxNSwgMHg3MCwgMHgwNCwgMHhDMCwgMHg1RCwgMHgwQywKKzB4N0IsIDB4MDMsIDB4Q0MsIDB4MDksIDB4QTAsIDB4MDcsIDB4QzAsIDB4NUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRiwgMHg0MCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzEsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDA3LCAweDAwLCAweDBGLCAweDAyLCAweDdDLCAweDQwLCAweDcwLCAweDIxLCAweDgwLCAweDg2LCAweDAwLCAweDE3LAorMHgxMiwgMHgzQywgMHgxMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDgsIDB4OEYsIDB4NDAsIDB4NEQsIDB4MTYsIDB4RjAsIDB4OTksIDB4QzAsIDB4RTcsCisweDAwLCAweDkzLCAweDA5LCAweDRELCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDVDLAorMHgwMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgyMywgMHgwMCwgMHg5NywgMHgwMCwgMHg1QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwKKzB4NjQsIDB4MDYsIDB4OTMsIDB4MDMsIDB4NUMsIDB4QTIsIDB4NzEsIDB4OTksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDEsCisweDdDLCAweDA2LCAweDMwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgyMCwgMHhBNiwgMHgwMCwgMHhCRCwgMHg0MCwgMHhDNCwgMHgwNiwgMHg3MCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwKKzB4OTEsIDB4MDEsIDB4NDQsIDB4MDIsIDB4MTgsIDB4MDksIDB4NDQsIDB4MjcsIDB4MDAsIDB4OTksIDB4MDAsIDB4NDQsIDB4MDIsCisweEQwLCAweDI4LCAweDQwLCAweDI0LCAweDA4LCAweDkzLCAweDIwLCAweDA0LCAweDAyLCAweDkwLCAweDA4LCAweDQwLCAweDYwLAorMHgwMCwgMHg5MSwgMHgwNCwgMHg0NCwgMHg0RSwgMHgxMCwgMHgwOSwgMHg1MCwgMHgyNSwgMHgxMCwgMHg5RCwgMHgwNiwgMHg3NCwKKzB4MDYsIDB4NTAsIDB4MDksIDB4NDIsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweEEwLCAweDI0LCAweDEwLCAweDlELCAweDAwLCAweDQ0LCAweDBBLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLAorMHg4MCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg1NCwgMHgwMiwgMHhEMCwKKzB4MjksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NTQsIDB4MDIsIDB4OTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsCisweDkxLCAweDAwLCAweDU0LCAweDAyLCAweDUwLCAweDI5LCAweDQwLCAweDI0LCAweDMwLCAweDlELCAweDA4LCAweDc0LCAweDUyLAorMHgxMCwgMHgwRCwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMiwKKzB4MzAsIDB4MDAsIDB4OEQsIDB4MDIsIDB4MDQsIDB4MDIsIDB4NTgsIDB4NjgsIDB4NDAsIDB4QTcsIDB4MDAsIDB4ODEsIDB4MDIsCisweDQ0LCAweDBBLCAweDEwLCAweDg4LCAweDQwLCAweDIzLCAweDAyLCAweDk5LCAweDAwLCAweDA0LCAweDIyLCAweEQwLCAweDg5LAorMHg0MCwgMHgyMCwgMHgwMCwgMHg4OSwgMHgwOCwgMHg0NCwgMHgyMiwgMHg5MCwgMHgyOSwgMHg0MCwgMHhBNCwgMHgwMCwgMHg4MSwKKzB4MDAsIDB4MDQsIDB4MDIsIDB4MTIsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MjIsIDB4NTQsCisweDI4LCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweDMwLCAweDA2LAorMHgwMCwgMHgxRiwgMHgwMSwgMHg0QywgMHgwNCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxMywgMHgwMCwgMHgwQywKKzB4MDAsIDB4MTQsIDB4NjEsIDB4QzEsIDB4ODcsIDB4MEQsIDB4MTcsIDB4MDAsIDB4NUMsIDB4NTgsIDB4RjEsIDB4MjEsIDB4QzAsCisweDA1LCAweDA1LCAweDA3LCAweDE2LCAweDVDLCAweDg4LCAweDMwLCAweDAxLCAweEQwLCAweDA0LCAweDQwLCAweDEzLCAweDU0LAorMHg1QywgMHg4MCwgMHg3OCwgMHg0MSwgMHhDMSwgMHgxNCwgMHgxMCwgMHgxRiwgMHgwMCwgMHgzQywgMHg1OCwgMHgzMCwgMHgwMSwKKzB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MzgsIDB4MjcsIDB4MDgsCisweEJGLCAweDAzLCAweEZDLCAweDBBLCAweEYwLCAweDk5LCAweEMwLCAweDZGLCAweDA4LCAweEJGLCAweDAxLCAweEZDLCAweDA2LAorMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwOSwgMHhCNywgMHgwMCwgMHg3QywgMHgxMiwgMHhGMCwgMHg0QiwgMHhDMiwgMHgyNSwKKzB4MDAsIDB4OTcsIDB4MDQsIDB4RkMsIDB4MTIsIDB4NzAsIDB4MUIsIDB4QzAsIDB4NkYsIDB4MzAsIDB4OUYsIDB4MDAsIDB4RkMsCisweDAyLCAweEY4LCAweDA5LCAweEQyLCAweDJCLCAweDgwLCAweEFGLCAweDAwLCAweEZDLCAweDEyLCAweEYwLCAweDFCLCAweEMwLAorMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyQiwgMHgwMCwgMHhCRiwKKzB4MTMsIDB4RkMsIDB4NDYsIDB4RjAsIDB4MEIsIDB4QzAsIDB4QUMsIDB4MDAsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4MzAsCisweEM5LCAweEMwLCAweDI2LCAweDAwLCAweDlCLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDBCLCAweEMwLCAweDI0LCAweDA1LAorMHhCRiwgMHgwQywgMHg0OSwgMHgwMiwgMHhGMiwgMHgyOSwgMHhDMiwgMHhBRiwgMHgwMCwgMHhBRiwgMHgwNCwgMHhGQywgMHgwMiwKKzB4RjAsIDB4NEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4QjAsIDB4MDksIDB4QzAsIDB4NjcsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAwLCAweDFELCAweDA3LAorMHg3NCwgMHg4OCwgMHhEMCwgMHg1MSwgMHg0MCwgMHg0NCwgMHgyMCwgMHgxRCwgMHgwNSwgMHg3NCwgMHgwNCwgMHgxMCwgMHhDMSwKKzB4NDgsIDB4ODQsIDB4MDQsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MjAsIDB4RDAsIDB4NDUsIDB4NTMsIDB4MDQsIDB4MDAsIDB4MUQsCisweDBDLCAweDQ0LCAweDQwLCAweEQwLCAweDE0LCAweDQwLCAweDQ3LCAweDAwLCAweDFELCAweDAwLCAweDc0LCAweDAwLCAweDEwLAorMHg4MSwgMHg0MCwgMHgxNCwgMHgyMCwgMHg1RCwgMHgyMCwgMHg3NCwgMHgyMCwgMHgxNCwgMHgxMSwgMHg0MCwgMHg3MywgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsCisweDAyLCAweEQwLCAweDg4LCAweDQxLCAweDIwLCAweDAwLCAweDhELCAweDEwLCAweDM0LCAweDAyLCAweDEwLCAweDQ4LCAweDQwLAorMHgyMiwgMHgwMywgMHg4OSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMSwgMHg0OCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwNCwKKzB4MjYsIDB4MTIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MTAsIDB4OEQsIDB4MDgsIDB4MzQsIDB4MDIsIDB4REMsIDB4MDgsCisweDQwLCAweDIwLCAweDEwLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweDk0LCAweDQ4LCAweDQxLCAweDQzLCAweDgwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgyMCwgMHg3NCwgMHg4MiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDQsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjAsCisweDAwLCAweDkxLCAweDEwLCAweDc0LCAweDAyLCAweEQwLCAweDg4LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDY2LAorMHg4MiwgMHhEMCwgMHg4OSwgMHg2NiwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHg1MSwgMHgwOSwgMHg1OCwKKzB4MjQsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MkEsIDB4MTAsIDB4NjksIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDI4LCAweDI1LCAweDAwLCAweEJGLCAweDAxLCAweDdDLCAweDA2LCAweEYwLAorMHgwQiwgMHhEMCwgMHgyQywgMHgwMywgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHgxMCwgMHgwOSwgMHhDMCwgMHgyNiwgMHgwMCwKKzB4OUIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MzksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4ODAsIDB4NjQsIDB4MjIsCisweEYwLCAweDNCLCAweEMwLCAweDJGLCAweDA4LCAweDlELCAweDAwLCAweDM0LCAweDRBLCAweEYwLCAweDA5LCAweDQwLCAweEE0LAorMHgwMCwgMHg5RiwgMHgwMywgMHg3MCwgMHgwNiwgMHhCMCwgMHgzQiwgMHhDNCwgMHgxNywgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDQsIDB4N0MsIDB4MTIsIDB4RjAsIDB4MDksCisweEM0LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEY0LCAweDA4LCAweEMwLCAweDI3LCAweDEwLCAweDlGLAorMHgwNCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg0MCwgMHg1QywgMHgwNiwgMHhGOCwKKzB4MTksIDB4QzIsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4QjAsIDB4MDksIDB4MDUsIDB4MjcsIDB4ODAsCisweDlFLCAweDEwLCAweDZDLCAweDA2LCAweEYwLCAweDE5LCAweEMwLCAweDUzLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxMywgMHg0MCwgMHg3QywgMHgwMCwgMHhCNCwgMHg4MSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDgsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MTMsIDB4MDIsCisweDdDLCAweDAwLCAweEYwLCAweEExLCAweEQwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLCAweDdDLCAweDAwLCAweEYyLCAweDIxLAorMHhDMCwgMHgwNCwgMHgyMCwgMHgxMywgMHgxMCwgMHg1QywgMHg5OCwgMHhGMCwgMHgwMSwgMHhEMCwgMHg4NCwgMHgwMCwgMHgxRiwKKzB4NDIsIDB4MkMsIDB4MDAsIDB4MzQsIDB4MjEsIDB4RDAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweEEwLCAweDFDLCAweDAxLCAweDUxLCAweDAxLCAweEY0LCAweDFELCAweDEwLCAweDE1LCAweDQwLCAweDE3LAorMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNCwgMHgwMCwgMHg1MSwgMHgwMCwgMHg3NCwKKzB4MDEsIDB4RDAsIDB4OTcsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NzEsIDB4MDMsIDB4NDQsIDB4MDEsIDB4NzAsIDB4MDUsIDB4NDAsCisweDE0LCAweDAwLCAweDcxLCAweDAxLCAweEM0LCAweDA1LCAweEQwLCAweDE2LCAweDQyLCAweDFDLCAweDAwLCAweDdELCAweDAwLAorMHhGNCwgMHgwMSwgMHgxNCwgMHgwNSwgMHg0MCwgMHg1MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4QTAsIDB4NjIsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MUUsIDB4MTAsIDB4MEQsIDB4NDgsIDB4MzMsIDB4MDAsCisweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMxLCAweEMwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLAorMHhEMCwgMHgyQywgMHg0MCwgMHgzMiwgMHg0MCwgMHhDMSwgMHgxMSwgMHgxNCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwgMHgzMiwKKzB4MDIsIDB4ODEsIDB4MDAsIDB4MTQsIDB4MDUsIDB4OTAsIDB4MTgsIDB4NDAsIDB4NjAsIDB4MDEsIDB4QzksIDB4MDIsIDB4MjQsCisweDAzLCAweDE0LCAweDBDLCAweDYwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHg4MCwgMHg2OCwgMHgwMCwgMHhBMSwgMHgwNiwgMHhCNCwgMHgwNiwgMHgxMCwgMHg4RSwgMHg0MCwgMHgzQiwgMHgwMSwgMHhBRCwKKzB4MDQsIDB4QjQsIDB4MTMsIDB4RDAsIDB4OEUsIDB4NDAsIDB4MzgsIDB4ODEsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsCisweDBFLCAweDQwLCAweDc4LCAweDAwLCAweEMxLCAweDEwLCAweDg0LCAweDEzLCAweDUwLCAweDVFLCAweDQwLCAweDdBLCAweDExLAorMHhBMSwgMHgxMSwgMHg4NiwgMHgwOSwgMHhEMCwgMHgyQywgMHg0MiwgMHhBOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHgzNCwgMHgwQiwKKzB4MTAsIDB4NUYsIDB4NjAsIDB4MTQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsCisweDY4LCAweDAwLCAweEUzLCAweDA3LCAweEJDLCAweDA2LCAweDMwLCAweDVBLCAweEMwLCAweEVCLCAweDAwLCAweEVGLCAweDAzLAorMHhCNCwgMHgwRiwgMHhGMCwgMHgxQywgMHhDMCwgMHhGMSwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCQywgMHgxNywgMHhGMCwgMHgxNywKKzB4QzQsIDB4NzIsIDB4MDAsIDB4RTMsIDB4MDEsIDB4OUMsIDB4MTcsIDB4NzAsIDB4M0UsIDB4QzgsIDB4RkUsIDB4NDAsIDB4RTMsCisweDAxLCAweDlDLCAweDA1LCAweEIwLCAweDFBLCAweEMwLCAweDY4LCAweDA4LCAweEVELCAweDAxLCAweEFDLCAweDA1LCAweDMwLAorMHgzRSwgMHhDMCwgMHg1NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgyNSwKKzB4NTAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4ODAsIDB4N0MsCisweDAzLCAweEYwLCAweDBELCAweEMyLCAweEI3LCAweDBELCAweERGLCAweDAwLCAweDdDLCAweDRCLCAweEYwLCAweDA1LCAweEMwLAorMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgyMywgMHg3MiwgMHgwRCwgMHhEMCwgMHgyNSwgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0UsIDB4MDEsIDB4RjAsIDB4MDksIDB4QzQsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjQsIDB4MEMsCisweEMwLCAweDQzLCAweDQwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDZGLCAweDAwLAorMHhGRiwgMHgwOSwgMHhDQywgMHgxMywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3QiwgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgyNywKKzB4MzAsIDB4NUYsIDB4ODAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4NDcsIDB4MzAsIDB4MUIsIDB4QzAsIDB4N0MsCisweDAwLCAweEJGLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDFFLCAweEMwLCAweDY4LCAweDBBLCAweEIxLCAweDBDLCAweEZDLAorMHgyNSwgMHhGMCwgMHgxRiwgMHhDMCwgMHg3OCwgMHg0MiwgMHhGMywgMHgwMSwgMHhGQywgMHgwNiwgMHhGMCwgMHgxRiwgMHhDNCwKKzB4MDgsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODAsIDB4MjksIDB4MDAsIDB4QkQsCisweDE4LCAweDg0LCAweDQzLCAweDExLCAweDBBLCAweDQ4LCAweDNCLCAweDAwLCAweEExLCAweDEwLCAweDg0LCAweDIzLCAweDEwLAorMHgwRSwgMHg0OCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHg4QiwgMHg0MSwgMHgzOCwgMHgwMCwKKzB4N0QsIDB4MDAsIDB4OTQsIDB4MDMsIDB4RDAsIDB4NEUsIDB4NDAsIDB4MzgsIDB4MDMsIDB4QTEsIDB4MDQsIDB4QjQsIDB4MDksCisweEQwLCAweDhFLCAweDQwLCAweDE5LCAweDAyLCAweEUxLCAweDAwLCAweEI0LCAweDBBLCAweEYwLCAweDhFLCAweDQwLCAweDU0LAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhFRCwgMHg0MCwKKzB4QTcsIDB4MjIsIDB4MTQsIDB4MEEsIDB4NDAsIDB4MkYsIDB4MDYsIDB4QjEsIDB4MDgsIDB4QzQsIDB4MDcsIDB4MTIsIDB4NEUsCisweDYwLCAweDNCLCAweDAwLCAweEVELCAweDAyLCAweEI0LCAweDAzLCAweDkwLCAweDAyLCAweDUwLCAweDM4LCAweDAyLCAweEFELAorMHgwMCwgMHhBNCwgMHgwMywgMHhEMCwgMHgxRiwgMHg0OSwgMHgyQywgMHgwNCwgMHhFOSwgMHg4OCwgMHhCNCwgMHgwMSwgMHhEMCwKKzB4MEEsIDB4NDAsIDB4MzgsIDB4ODAsIDB4NjEsIDB4MTAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MUYsIDB4NDAsIDB4NjAsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDI0LAorMHgwNiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg3NywgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgyMywgMHgxMCwgMHgwQywgMHg2MCwKKzB4MzMsIDB4MDAsIDB4Q0QsIDB4MDgsIDB4MzQsIDB4MDMsIDB4OTEsIDB4MDAsIDB4NDEsIDB4MzAsIDB4MDAsIDB4NEQsIDB4MDAsCisweDA2LCAweDAzLCAweEQyLCAweDNDLCAweDQwLCAweDYwLCAweDIwLCAweEM5LCAweDAwLCAweDM0LCAweDA5LCAweEQwLCAweDA4LAorMHg0MCwgMHgzMSwgMHgwMiwgMHgwMSwgMHgwMywgMHgzMCwgMHgwNywgMHg1MCwgMHgwQywgMHg2MCwgMHgxOCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDEsIDB4NkMsIDB4MDIsCisweDMwLCAweDBELCAweDQwLCAweEI3LCAweDQyLCAweEQzLCAweDIxLCAweDRELCAweDAzLCAweDE0LCAweDBGLCAweEMyLCAweDNGLAorMHgwMCwgMHhERiwgMHgwMCwgMHhGNCwgMHgwMywgMHg5MCwgMHgxRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHg1RiwgMHgwMCwgMHhDRCwKKzB4MTcsIDB4RjAsIDB4M0QsIDB4RDAsIDB4RjQsIDB4NDAsIDB4OUEsIDB4MDAsIDB4N0MsIDB4MDksIDB4RjEsIDB4MEQsIDB4QzIsCisweEYwLCAweDAwLCAweEQxLCAweDIzLCAweDc0LCAweDA3LCAweEQwLCAweDJELCAweDUwLCAweDc0LCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhCNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4NDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsCisweERGLCAweDAwLCAweDNDLCAweDAzLCAweDcyLCAweDJELCAweEMwLCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMSwgMHg5NywgMHgyMiwgMHg3QywgMHgwRCwgMHhFMCwgMHgwRCwgMHhDMCwgMHhCNywKKzB4MDQsIDB4REYsIDB4MjAsIDB4N0MsIDB4MjEsIDB4RjAsIDB4Q0QsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDdGLCAweDAyLCAweEZGLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDBCLAorMHhEMCwgMHgyQywgMHgwMCwgMHhGMywgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRSwgMHgwMCwgMHhGRiwKKzB4MDAsIDB4REMsIDB4MDMsIDB4MzAsIDB4OUIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsIDB4MDEsIDB4RUUsIDB4MDMsIDB4RjAsCisweDBGLCAweEMxLCAweDNGLCAweDAwLCAweEVGLCAweDA1LCAweENDLCAweDQxLCAweEYwLCAweDBCLCAweEMwLCAweDNELCAweDAwLAorMHhGQiwgMHgxMCwgMHg4QywgMHgxMCwgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4RDYsIDB4MDAsIDB4REQsIDB4MDksIDB4NzQsIDB4MEEsIDB4RDAsIDB4MEQsIDB4NDAsCisweDY0LCAweDIyLCAweEQxLCAweDIwLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDAwLAorMHg3NCwgMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwgMHgzNywgMHgwMCwgMHg5RCwgMHgwMiwgMHg3RSwgMHgwMywgMHhEMCwgMHgwRCwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4REQsIDB4MDcsIDB4NDQsIDB4MDUsIDB4RDAsIDB4MzgsIDB4QzgsIDB4NzYsIDB4MDEsIDB4ODksCisweDAwLCAweDU0LCAweDBDLCAweDUwLCAweDBELCAweDQyLCAweDA3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHhBMCwgMHgyNCwgMHgwNCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwQiwgMHhEMiwgMHgwRCwgMHg0MiwgMHgzNCwKKzB4NDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsCisweDAzLCAweDEwLCAweDA1LCAweDQxLCAweDM3LCAweDgwLCAweDFELCAweDY2LCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLAorMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg2NCwgMHgwNywgMHhEMiwgMHgzNSwgMHg0MCwgMHg3NSwgMHgwMCwgMHhEMSwgMHgwMCwKKzB4NDQsIDB4MDIsIDB4MTEsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDA4LCAweDMwLCAweDAwLCAweDhELCAweDIwLCAweDM2LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLAorMHg4MSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMiwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywKKzB4MTgsIDB4MDQsIDB4NDAsIDB4MzMsIDB4QTAsIDB4MEQsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDIsIDB4MEMsIDB4NDgsIDB4MzMsCisweDAwLCAweENELCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDVBLCAweDM2LCAweDAwLCAweEQxLCAweDAwLCAweDE0LAorMHgwMCwgMHg1MCwgMHgwQywgMHg0MCwgMHg0MiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MjAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDksIDB4RTgsIDB4MjQsIDB4MDAsIDB4OTMsCisweDQwLCAweEZDLCAweDAzLCAweEYwLCAweDBELCAweDQwLCAweDNGLCAweDAwLCAweERGLCAweDAwLCAweEJDLCAweDIzLCAweDM0LAorMHgwMSwgMHhDMCwgMHgzNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg2NCwgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4NkMsIDB4MDEsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzUsIDB4ODAsIDB4NUIsIDB4ODAsIDB4NEUsIDB4MDAsCisweDMyLCAweDBGLCAweEM4LCAweDA3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LAorMHgxRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhBRiwgMHgyMCwKKzB4QkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDMsCisweEMwLCAweDNGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMyLCAweDJGLCAweDAwLCAweDNGLAorMHgwMCwgMHhEQywgMHgwMCwgMHhGMCwgMHgwQSwgMHhDMCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHg4MCwgMHhGOCwKKzB4MEUsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QjAsIDB4N0YsCisweDAwLCAweDNGLCAweDAwLCAweEVDLCAweDA3LCAweDcwLCAweDAzLCAweEMwLCAweDdELCAweDAyLCAweEYzLCAweDA5LCAweEZDLAorMHgxMCwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzQywgMHgwMSwgMHhCRiwgMHgyMSwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMSwKKzB4M0YsIDB4MDAsIDB4M0YsIDB4MTgsIDB4Q0QsIDB4MDMsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkIsIDB4MDAsCisweEZDLCAweDAzLCAweEUwLCAweDBGLCAweEMwLCAweDRDLCAweDAwLCAweEYzLCAweDAwLCAweENDLCAweDAzLCAweDMwLCAweDBGLAorMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHg3NywgMHgwMCwKKzB4NUQsIDB4MDEsIDB4NDQsIDB4MDcsIDB4MTAsIDB4QjEsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MDQsIDB4NzQsIDB4MDYsCisweEQwLCAweDI5LCAweDQxLCAweDNELCAweDAwLCAweERELCAweDAxLCAweEY0LCAweDA3LCAweEQwLCAweDBFLCAweDQwLCAweDc3LAorMHgwMCwgMHgxRCwgMHg4MiwgMHg0NCwgMHgwNywgMHgxMCwgMHgyRiwgMHg0MCwgMHg2NywgMHgwMCwgMHg1MSwgMHgwMSwgMHg3NCwKKzB4MDcsIDB4RDAsIDB4MTUsIDB4NDAsIDB4NDQsIDB4MDAsIDB4NUIsIDB4MDEsIDB4NDQsIDB4MDUsIDB4MTAsIDB4MUQsIDB4NDAsCisweDA0LCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDAwLCAweDBELAorMHgwOCwgMHgwNCwgMHgwMywgMHg1MCwgMHgxNCwgMHg2OCwgMHgzMSwgMHgwMSwgMHhDMSwgMHgwMCwgMHgzNCwgMHgyMCwgMHhEMCwKKzB4NkMsIDB4NDAsIDB4QjEsIDB4MDQsIDB4Q0QsIDB4MDEsIDB4MzQsIDB4MjMsIDB4RDAsIDB4NEMsIDB4NDEsIDB4MzEsIDB4MDIsCisweDBELCAweDA1LCAweDI0LCAweDAzLCAweDEwLCAweDJDLCAweDQwLCAweDIzLCAweDAwLCAweDg1LCAweDAwLCAweDM0LCAweDAyLAorMHg1MCwgMHgwOCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgyMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHg0NCwKKzB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MzUsIDB4ODAsIDB4NUQsIDB4MTQsCisweDY1LCAweDAzLCAweDEwLCAweDAxLCAweDQwLCAweDM3LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDBELAorMHg0MCwgMHgzNSwgMHgyMCwgMHhERCwgMHgwMSwgMHg3NCwgMHgwMywgMHhEMSwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHgxRCwKKzB4MDAsIDB4NjQsIDB4NDMsIDB4MTAsIDB4MEQsIDB4NDQsIDB4NjcsIDB4MDAsIDB4RDUsIDB4MDYsIDB4NzQsIDB4MDMsIDB4RDEsCisweDBELCAweDUxLCAweDQ1LCAweDQwLCAweERELCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDhELCAweDQwLCAweDBDLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4OCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMSwgMHg2QywKKzB4MDcsIDB4NzAsIDB4MDEsIDB4QzAsIDB4NzUsIDB4NDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MTEsIDB4RjAsIDB4MEQsIDB4QzAsCisweDM1LCAweDAwLCAweERGLCAweDAxLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDVGLCAweDAwLAorMHg2QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHhFNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgzRCwKKzB4QzAsIDB4QzEsIDB4ODQsIDB4RDcsIDB4MDAsIDB4NEMsIDB4MDcsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MDgsIDB4MjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweDZGLCAweDAwLCAweERDLCAweDBCLAorMHhGMCwgMHgwRiwgMHhDMCwgMHg3RiwgMHgwMiwgMHhGRiwgMHgwMCwgMHhGQywgMHgwRiwgMHhGMCwgMHgwRCwgMHhFMCwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzYsIDB4M0YsIDB4ODAsIDB4OUYsIDB4MjgsIDB4REMsCisweDI3LCAweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDQwLCAweDdCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDk2LCAweEMwLAorMHgwRSwgMHgwMCwgMHhFMywgMHgwMCwgMHhCQywgMHgwOSwgMHhGMCwgMHgxRSwgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4OUYsIDB4MDIsIDB4NEMsIDB4MDMsIDB4RjAsCisweDA1LCAweEMwLCAweDM0LCAweDAwLCAweEQzLCAweDAwLCAweDVDLCAweDA1LCAweDcwLCAweDBELCAweEM4LCAweDM1LCAweDA4LAorMHhEMywgMHg4MCwgMHg3QywgMHgwNywgMHhGMSwgMHgwRCwgMHhDMiwgMHgzNCwgMHgwMCwgMHg1RiwgMHgwMCwgMHgwQywgMHgyMywKKzB4MzAsIDB4MEQsIDB4QzAsIDB4QTMsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MjksIDB4QzAsIDB4MDQsCisweDAwLCAweERGLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDJELCAweEMwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwgMHgwMCwgMHg1QywgMHgwMCwgMHgzNCwgMHgzRiwgMHhEMCwgMHgwRCwKKzB4QzAsIDB4NzQsIDB4MDEsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDEsIDB4RDAsIDB4OUMsIDB4NDgsIDB4N0MsIDB4MDEsIDB4RDEsCisweDAwLCAweEY0LCAweDAzLCAweEQwLCAweDBGLCAweDQwLCAweDNDLCAweDAxLCAweDlELCAweDAwLCAweDZFLCAweDAzLCAweEIwLAorMHg0RiwgMHg0MCwgMHgyNywgMHgwOCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHg0RCwgMHhDMCwgMHgwNCwgMHgwMCwKKzB4REQsIDB4MDAsIDB4NDQsIDB4OTMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDMyLCAweDAwLCAweDBELCAweDAwLCAweDM0LCAweDBGLCAweDkwLCAweDA4LCAweDQwLAorMHgzNCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg1MCwgMHgwOCwgMHgwMCwgMHgzMSwgMHgwMCwgMHhDMSwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDgsIDB4MEMsIDB4NDAsIDB4NzAsIDB4MDAsIDB4OUQsIDB4NDAsIDB4MDQsIDB4MDQsIDB4OTAsIDB4MkMsCisweDQxLCAweDIzLCAweDAwLCAweEM1LCAweDAwLCAweDM2LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDQyLCAweDAyLCAweENELAorMHgwMCwgMHgyNCwgMHgwMiwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwQywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4N0EsIDB4MDgsIDB4QUQsIDB4MjEsIDB4QjQsIDB4MDcsIDB4RDIsIDB4MTAsIDB4NDAsIDB4RjgsCisweDAyLCAweEUxLCAweDBCLCAweDk0LCAweDI2LCAweEQwLCAweDFBLCAweDQxLCAweEY4LCAweDAwLCAweEUwLCAweDAxLCAweEI0LAorMHgwNywgMHhEOCwgMHgzRSwgMHg0MCwgMHg3OCwgMHgwMCwgMHg2RCwgMHgwMSwgMHg4NCwgMHgwNiwgMHg5MCwgMHgxRSwgMHg0MCwKKzB4NjMsIDB4ODAsIDB4RTEsIDB4MDEsIDB4MzQsIDB4MjcsIDB4MTAsIDB4MUMsIDB4NDAsIDB4NDgsIDB4MDAsIDB4NEQsIDB4MDEsCisweDI0LCAweDA3LCAweDEwLCAweDE0LCAweDQyLCAweDEwLCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgwMCwgMHgzMiwgMHgwMCwgMHgwRiwgMHgwMCwgMHgzQywgMHgyMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMiwKKzB4QzMsIDB4MDAsIDB4MUMsIDB4MDMsIDB4NzAsIDB4OEMsIDB4NDAsIDB4MzUsIDB4MDAsIDB4QzEsIDB4MDAsIDB4M0MsIDB4MjMsCisweEYwLCAweDBDLCAweEMwLCAweDMwLCAweDAwLCAweDhGLCAweDAwLCAweDA0LCAweDExLCAweDMwLCAweDhDLCAweEMwLCAweEIzLAorMHg4MiwgMHhDNywgMHgwMCwgMHgzQywgMHgwMiwgMHgzMCwgMHgwQywgMHhDMCwgMHgwMiwgMHgwMCwgMHg4RiwgMHgwMCwgMHgyQywKKzB4MDIsIDB4MzAsIDB4MkMsIDB4QzAsIDB4NDgsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweEE4LCAweDNELCAweDAwLCAweEJGLCAweDAwLCAweEZFLCAweEEzLCAweEYwLCAweDgzLCAweEMwLCAweDNGLCAweDkyLCAweEZGLAorMHgwMCwgMHhFQywgMHg4MywgMHhGMCwgMHgwRiwgMHhDMCwgMHhCRiwgMHgwNCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4M0YsIDB4MDQsIDB4N0YsIDB4MDgsIDB4QkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsCisweEZGLCAweDAwLCAweEZDLCAweDAzLCAweDc1LCAweDhGLCAweEQwLCAweDBGLCAweDAwLCAweEZGLCAweDAwLCAweDVDLCAweDAzLAorMHhGMCwgMHgwRiwgMHhFMCwgMHgwQiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDMsIDB4MDEsCisweDBDLCAweDA0LCAweDMwLCAweDBELCAweEMwLCAweEI1LCAweDAxLCAweERCLCAweDAwLCAweDdDLCAweDdCLCAweEYwLCAweEVELAorMHhDMSwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg2QywgMHgwMywgMHhCOCwgMHg4RCwgMHhDMSwgMHgyNywgMHgwMCwgMHhERiwKKzB4MDEsIDB4NEMsIDB4MDUsIDB4MTAsIDB4MEQsIDB4QzQsIDB4MDQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsCisweDE5LCAweEMwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDk4LCAweDM5LAorMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMiwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhGMSwgMHgwMCwgMHg4NSwKKzB4MDIsIDB4NTAsIDB4MEUsIDB4NDAsIDB4MzMsIDB4MDEsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsCisweDM4LCAweDAxLCAweENELCAweDAwLCAweEE0LCAweDgzLCAweDEwLCAweDRFLCAweEMwLCAweDJCLCAweDAwLCAweEVELCAweDAwLAorMHg4NCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgwOCwgMHgwMCwgMHhFRCwgMHg4MCwgMHg4NCwgMHgwMywgMHgxMCwgMHgwRSwKKzB4NDAsIDB4NDgsIDB4NjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsCisweEVELCAweDAxLCAweEI0LCAweDQ3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEUxLCAweDgxLCAweDg0LCAweDA3LAorMHgwMCwgMHgxRSwgMHg0MSwgMHg3QiwgMHgwMCwgMHhFMSwgMHgwMywgMHhCNCwgMHg5NywgMHhEOCwgMHg1RSwgMHg0MCwgMHg3QSwKKzB4MDAsIDB4RUQsIDB4MDEsIDB4MDUsIDB4MDcsIDB4MTQsIDB4NUUsIDB4NDQsIDB4N0IsIDB4MDAsIDB4QzUsIDB4MDEsIDB4MDQsCisweDA3LCAweDkwLCAweDFDLCAweDQwLCAweDRBLCAweDAwLCAweENELCAweDExLCAweDA0LCAweDQ3LCAweDEwLCAweDFDLCAweDQwLAorMHgxMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyMCwgMHgzMywgMHhBMCwgMHhDRCwKKzB4MUEsIDB4MzQsIDB4ODYsIDB4RDAsIDB4MEMsIDB4NDEsIDB4MjMsIDB4MDIsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MjcsIDB4NUIsCisweDFELCAweDQyLCAweDMzLCAweDQwLCAweDQxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBELCAweDUwLCAweDMyLCAweDAwLAorMHhDRCwgMHgwNiwgMHgwNCwgMHgwNywgMHgxMCwgMHgwRCwgMHg0MCwgMHhCMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgwNywKKzB4OTQsIDB4MEMsIDB4NTAsIDB4RjIsIDB4MDQsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MDMsIDB4MTQsIDB4MEMsIDB4NzgsIDB4NUEsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE3LCAweDAwLCAweDdGLCAweDAzLAorMHg3QywgMHgwMSwgMHhGMCwgMHg3NywgMHg0MCwgMHg1NywgMHg0MCwgMHg1MywgMHgwMCwgMHhDQywgMHgwNSwgMHgzMCwgMHgwNSwKKzB4QzAsIDB4MTcsIDB4MDAsIDB4NzMsIDB4QzEsIDB4NzQsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzgsIDB4MTYsIDB4MTAsIDB4N0YsCisweDAyLCAweEVDLCAweDExLCAweEIwLCAweDA1LCAweDQwLCAweDFGLCAweDAwLCAweDdGLCAweDAwLCAweENDLCAweDE1LCAweEIwLAorMHgwNywgMHhDMCwgMHhEQSwgMHgwOSwgMHg3RiwgMHgwMywgMHhDQywgMHgwNSwgMHgzMCwgMHgyNywgMHhDMCwgMHg1RSwgMHgyMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDUsIDB4MDAsIDB4MEYsIDB4MDAsIDB4NzQsCisweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxNywgMHgwMSwgMHgzQywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNSwgMHhBMCwgMHgxQiwgMHgwMCwKKzB4M0UsIDB4MDQsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzQsIDB4MDEsCisweEMwLCAweDg1LCAweDAwLCAweDBGLCAweDAwLCAweDNDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDQ5LCAweDAwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwKKzB4RjAsIDB4MDgsIDB4RDQsIDB4MjQsIDB4MDAsIDB4OTMsIDB4MDIsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjYsCisweDQwLCAweDkzLCAweDAwLCAweDRDLCAweDAyLCAweEIwLCAweDA5LCAweEQwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDRDLAorMHg4MiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHg0MiwgMHhGMCwgMHgwOCwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4OTMsIDB4MTAsIDB4NEMsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzEsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDA2LCAweEQwLAorMHgwOSwgMHg0MCwgMHgyMCwgMHgwMCwgMHg5MSwgMHgxMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0OCwgMHhBNCwgMHgwMCwKKzB4ODEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MjksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsCisweEIwLCAweDA5LCAweEMwLCAweEE2LCAweDAwLCAweDlELCAweDAyLCAweDVDLCAweDBBLCAweEQwLCAweDI5LCAweDQwLCAweDI0LAorMHgwMCwgMHg5MSwgMHgwMiwgMHg0QywgMHgwQSwgMHgxMCwgMHgyOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDYsIDB4RDAsIDB4MDksCisweDQ4LCAweDY0LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDA2LCAweDUwLCAweDg5LCAweDQwLCAweDYyLCAweDg0LCAweDk5LAorMHgwMCwgMHg0NCwgMHgwNiwgMHgxMCwgMHgxOSwgMHg2MywgMHg2NCwgMHg4MCwgMHg4RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwKKzB4MDksIDB4NDIsIDB4MjQsIDB4MDQsIDB4OTEsIDB4MTAsIDB4NzQsIDB4NDIsIDB4RDAsIDB4MDksIDB4NTEsIDB4MjQsIDB4MDAsCisweDk5LCAweDMwLCAweDQ0LCAweEMzLCAweDEwLCAweDA5LCAweDQxLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgyOCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwNCwgMHgwNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwKKzB4MzQsIDB4NDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MTIsIDB4RDAsIDB4NEMsIDB4NDAsIDB4MjAsIDB4ODEsIDB4OTksIDB4MDAsCisweDA0LCAweDEyLCAweDEwLCAweDQ4LCAweDQwLCAweDIwLCAweDIxLCAweDhELCAweDA0LCAweDA2LCAweDEyLCAweDkwLCAweDRDLAorMHg0OCwgMHgyMCwgMHgwMSwgMHg4RCwgMHgwNCwgMHgxNCwgMHgxMiwgMHhEOCwgMHg0OCwgMHg2MCwgMHgyMCwgMHgwMCwgMHg4OSwKKzB4QzQsIDB4MDQsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NjAsIDB4NTMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAxLCAweEYwLCAweDAxLCAweEMwLCAweDgwLAorMHgwMiwgMHgxMywgMHgwQSwgMHg3NCwgMHgwMCwgMHg3MCwgMHhBMSwgMHhDMCwgMHg4NiwgMHgyMiwgMHgxOSwgMHgwMCwgMHg0NSwKKzB4MDAsIDB4MzAsIDB4QTEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MEEsIDB4NEQsIDB4MDAsIDB4MzAsIDB4QTEsIDB4NDAsCisweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYxLCAweDAxLCAweEM4LCAweDE0LCAweDAwLCAweDEzLCAweDAwLAorMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTksIDB4QTgsIDB4MjcsIDB4MDAsIDB4QkYsIDB4ODgsIDB4RkQsIDB4MDIsIDB4RjAsIDB4OEIsIDB4ODAsIDB4MkYsIDB4MDAsCisweDlGLCAweDAwLCAweEZDLCAweEEyLCAweEYwLCAweDhCLCAweEMwLCAweDI3LCAweDQyLCAweEI3LCAweDAwLCAweDdDLCAweDIyLAorMHhGNCwgMHg4OSwgMHhDMCwgMHgyNywgMHgyMiwgMHhCRiwgMHgwOCwgMHhGQywgMHgyMiwgMHg3NCwgMHg4OSwgMHhEMCwgMHgyRiwKKzB4MDIsIDB4QkYsIDB4MDgsIDB4REMsIDB4MjIsIDB4RjEsIDB4OEIsIDB4QzAsIDB4MkYsIDB4NDAsIDB4QjcsIDB4MjgsIDB4REQsCisweDIyLCAweEYwLCAweDhCLCAweEMwLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwNCwgMHhGRSwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCRiwKKzB4MDAsIDB4REMsIDB4NTIsIDB4QjAsIDB4Q0EsIDB4QzgsIDB4MkUsIDB4MDgsIDB4QkYsIDB4QTAsIDB4REMsIDB4ODIsIDB4MzIsCisweDRCLCAweEMyLCAweDZGLCAweDAxLCAweERGLCAweDBDLCAweEZDLCAweDAyLCAweDM0LCAweDBCLCAweEMwLCAweDI2LCAweDAwLAorMHg5MywgMHgwNCwgMHg1QywgMHg1MiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4MzAsIDB4NDksIDB4QzAsIDB4NjMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsCisweDA3LCAweDAwLCAweDFELCAweDA4LCAweDc0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDE0LAorMHg3NCwgMHgwMCwgMHhEMCwgMHhDMSwgMHg0MCwgMHg4NCwgMHgwNCwgMHgxRCwgMHgwMCwgMHg1QywgMHgyMCwgMHgxMCwgMHg0MSwKKzB4NDMsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MEMsIDB4NzQsIDB4MDgsIDB4MTAsIDB4MDEsIDB4NDEsIDB4MDQsIDB4NDIsIDB4MTMsCisweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDgxLCAweDQwLCAweDA0LCAweDAwLCAweDFELCAweDAwLCAweDdDLCAweDIwLCAweDEwLAorMHgwMywgMHg0MCwgMHg3MywgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwKKzB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsCisweDAyLCAweDkwLCAweDQ4LCAweDQwLCAweDIyLCAweDAzLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweDEwLCAweEM4LCAweDQwLAorMHgyMywgMHgwMiwgMHg4RCwgMHg0NCwgMHgzNCwgMHgyMiwgMHgxMiwgMHg4OCwgMHg0OCwgMHgyOCwgMHg4MCwgMHhBMSwgMHgwOSwKKzB4QjQsIDB4MDYsIDB4RDAsIDB4MUEsIDB4NDAsIDB4MjgsIDB4MDAsIDB4QUQsIDB4ODksIDB4QjQsIDB4MDYsIDB4MTAsIDB4OUEsCisweDQwLCAweDRCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDAwLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgwNiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwKKzB4RDAsIDB4MEQsIDB4NjAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDBELCAweDQwLCAweEE0LCAweDAwLCAweEI5LCAweDAwLCAweEU0LAorMHgwMiwgMHhEMCwgMHg0QiwgMHg0MCwgMHgyQywgMHgwMCwgMHhCQywgMHg0MCwgMHhGNCwgMHgwMiwgMHgxMCwgMHg4QiwgMHg0MCwKKzB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsIDB4MDAsIDB4OUYsCisweDAwLCAweDc0LCAweDAyLCAweEYwLCAweDE5LCAweDQwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDZBLCAweDkwLAorMHgwOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4MzAsIDB4MDksIDB4RDAsIDB4NjAsIDB4MDAsIDB4OTMsIDB4MEIsIDB4N0MsIDB4MEEsCisweEYwLCAweDM5LCAweEQwLCAweDY0LCAweDA0LCAweDlGLCAweDAyLCAweDdDLCAweDBBLCAweDM0LCAweDM5LCAweEMwLCAweDE3LAorMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgyMCwKKzB4N0MsIDB4NDIsIDB4RjAsIDB4NDksIDB4QzAsIDB4NjcsIDB4MDIsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RDAsIDB4OTgsCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDA5LCAweDFDLCAweDAyLCAweEY0LCAweDA5LCAweEMwLCAweDI3LCAweDgwLCAweDlGLAorMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMSwgMHg4NywgMHgwMSwgMHg1QywgMHgxNiwgMHhGMCwKKzB4MTksIDB4QzAsIDB4NjcsIDB4MDEsIDB4OUUsIDB4MDUsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsIDB4NEIsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDRDLAorMHg4MCwgMHhGMiwgMHgwMSwgMHhDMiwgMHgwNCwgMHgwNCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHgzMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDQsIDB4MTMsIDB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RDAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsCisweDRDLCAweDgwLCAweEIwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDAwLAorMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHgwQywgMHgwMCwgMHhGMiwgMHgwMSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MTQsIDB4MjAsIDB4NUQsIDB4MDAsIDB4RDAsIDB4MTEsCisweDcwLCAweDA1LCAweDQwLCAweDlDLCAweDAwLCAweDdELCAweDExLCAweDc0LCAweDAxLCAweDAwLCAweDM3LCAweEMxLCAweDVFLAorMHgwMCwgMHg1MSwgMHgwNSwgMHg0MCwgMHgwNSwgMHhEMCwgMHgxNywgMHg0MCwgMHg1NCwgMHgwMCwgMHg1RCwgMHgwMCwgMHg0NCwKKzB4MDEsIDB4MzAsIDB4MDcsIDB4NDAsIDB4MTQsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NzQsIDB4MDEsIDB4NTAsIDB4MDUsIDB4NTAsCisweDE0LCAweDEwLCAweDVELCAweDIxLCAweDU0LCAweDAxLCAweEQwLCAweDE1LCAweDQwLCAweDUzLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwRCwgMHg1MCwKKzB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDYsIDB4MTAsIDB4MzQsIDB4NTEsIDB4NzEsIDB4MDAsCisweDgxLCAweDAxLCAweDM0LCAweDI2LCAweEQwLCAweDFDLCAweDQwLCAweDYwLCAweDAyLCAweENELCAweDAwLCAweDA0LCAweDIyLAorMHgxMCwgMHg4NSwgMHg0MCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMiwKKzB4MDAsIDB4QzksIDB4MDEsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MUMsIDB4NjAsIDB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg4LCAweDM4LCAweDAwLCAweEVELCAweDIxLCAweDg0LCAweDAzLCAweDUwLCAweDFFLAorMHg0MCwgMHgzOCwgMHhBMCwgMHhFRCwgMHgwMCwgMHgzNCwgMHgwRiwgMHgxMCwgMHgwNiwgMHg0MCwgMHg3QSwgMHg0NCwgMHhBMSwKKzB4MDEsIDB4OTQsIDB4MDMsIDB4RDAsIDB4MUUsIDB4NDEsIDB4MzgsIDB4MDAsIDB4Q0QsIDB4MDksIDB4MDQsIDB4MDIsIDB4MTAsCisweDA2LCAweDQwLCAweDMyLCAweDAwLCAweEU5LCAweDAwLCAweEI0LCAweDA3LCAweDUwLCAweDBBLCAweDQwLCAweDJBLCAweDAwLAorMHhDRCwgMHgxMSwgMHg5NCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MSwgMHgwNywgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NzgsIDB4MDAsIDB4Q0YsIDB4MDEsIDB4ODUsIDB4MDcsIDB4NzAsIDB4MUMsIDB4RDAsCisweDU4LCAweDAwLCAweDJGLCAweDAxLCAweEJDLCAweDA3LCAweDM0LCAweDE2LCAweEMwLCAweDVELCAweDAwLCAweEExLCAweDAxLAorMHhCQywgMHgwNywgMHhGMCwgMHgxNywgMHhDMCwgMHg3OCwgMHgwMCwgMHhFRSwgMHgxMSwgMHg4RCwgMHgwNiwgMHgzOSwgMHgxNCwKKzB4QzAsIDB4NUEsIDB4MDAsIDB4NkYsIDB4MDEsIDB4M0MsIDB4MDUsIDB4NzAsIDB4MTQsIDB4QzAsIDB4NUEsIDB4MDAsIDB4NkQsCisweDAxLCAweDhDLCAweDA1LCAweEYwLCAweDE2LCAweEM0LCAweDQ3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHhBOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzgsIDB4MDEsIDB4QzgsIDB4MDcsIDB4MDAsIDB4OEYsIDB4MDAsIDB4NkMsCisweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDgyLCAweDdFLCAweDAyLCAweDc0LCAweDA3LCAweEM0LAorMHgxNSwgMHgwMCwgMHg1NywgMHgwMCwgMHg3QywgMHgwMSwgMHhCNCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHg1RiwgMHgyMCwKKzB4NkQsIDB4MDAsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDIwLCAweDdELCAweDAwLCAweEZGLCAweDAxLCAweDhDLCAweDEzLCAweDcwLCAweDFGLCAweEMwLCAweDdGLCAweDAwLAorMHhGMywgMHgwMSwgMHhDQywgMHgwNywgMHgzMCwgMHgxNywgMHhDMiwgMHg2RiwgMHgxMCwgMHhGMiwgMHgwMSwgMHhGQywgMHgwNywKKzB4RjAsIDB4MUIsIDB4QzAsIDB4N0MsIDB4MjAsIDB4RjcsIDB4ODEsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MTMsIDB4QzIsIDB4NzksCisweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweDMwLCAweDFGLCAweEM4LCAweDdGLCAweDAwLCAweEJCLCAweDAxLCAweENDLAorMHg4NywgMHgzMCwgMHgxQiwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4MTgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDgsIDB4OEMsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MUYsIDB4MDAsIDB4RTEsCisweDA4LCAweDg0LCAweDAzLCAweDE0LCAweDAyLCAweDQwLCAweDFCLCAweDAxLCAweEUxLCAweDAwLCAweEI0LCAweDAzLCAweEQwLAorMHgwQSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgxMCwgMHhCNCwgMHgxMywgMHgxMCwgMHg0MiwgMHg0MCwgMHgzOCwgMHgwMSwKKzB4RTEsIDB4MDAsIDB4OUMsIDB4MDMsIDB4MTAsIDB4NEEsIDB4NDAsIDB4MkIsIDB4MjAsIDB4QTEsIDB4MDAsIDB4QUMsIDB4MDIsCisweDEwLCAweDBBLCAweDQwLCAweDU0LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgzOSwgMHgwMCwgMHhFRCwgMHgxMCwgMHhBNCwgMHgyMywgMHg1MCwgMHgwRSwgMHg0MSwgMHgzQiwgMHg0NCwgMHg2MSwgMHgwMCwKKzB4ODQsIDB4MDMsIDB4NTAsIDB4MDYsIDB4NDAsIDB4MkIsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MjMsIDB4RDAsIDB4MDIsCisweDQwLCAweDM4LCAweDAwLCAweEU1LCAweDAwLCAweDM0LCAweDAyLCAweDUwLCAweDAyLCAweDYwLCAweDE5LCAweDEwLCAweDYxLAorMHgwMCwgMHhCNCwgMHgwMSwgMHg5MCwgMHgwNiwgMHg0NCwgMHgxRiwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4NCwgMHgwMSwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MzEsCisweDIwLCAweENELCAweDAzLCAweDI0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDAzLCAweDAwLCAweDUxLCAweDAwLCAweDA0LAorMHg0QiwgMHg1MCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHhDMSwgMHg0MywgMHgzNiwgMHgwMywgMHhEMCwgMHgwMCwgMHg0MCwKKzB4MzAsIDB4MDAsIDB4QzEsIDB4MDMsIDB4MzQsIDB4MEIsIDB4MTAsIDB4MDAsIDB4NDAsIDB4OTAsIDB4NDAsIDB4NDEsIDB4NDIsCisweDE0LCAweDAxLCAweDkwLCAweDIwLCAweDQwLCAweDgzLCAweDJFLCAweDAxLCAweDAyLCAweDI0LCAweDA4LCAweDEwLCAweDAwLAorMHg0MCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgwMCwKKzB4REYsIDB4MDMsIDB4NkQsIDB4MDMsIDB4NzAsIDB4M0QsIDB4QzAsIDB4NjcsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NEQsIDB4MEIsCisweDcwLCAweDBELCAweEMyLCAweDM3LCAweDQwLCAweDkzLCAweDAxLCAweDNDLCAweDAzLCAweEYwLCAweDBELCAweEQwLCAweDMwLAorMHgwMCwgMHhGNywgMHgyMywgMHg3QywgMHgwQSwgMHg3MCwgMHgwNSwgMHhDMCwgMHhBMSwgMHgwMCwgMHg5MywgMHgwMywgMHg3QywKKzB4MDYsIDB4QjAsIDB4M0QsIDB4QzAsIDB4RjcsIDB4MDAsIDB4RDMsIDB4QTMsIDB4NEQsIDB4OEYsIDB4MzQsIDB4MUQsIDB4RDAsCisweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweERGLAorMHgwNCwgMHg1QywgMHgwRiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwOCwgMHg1RiwgMHgwMCwgMHgzQywgMHgwMywgMHhCMCwKKzB4MDksIDB4QzAsIDB4MzcsIDB4MjAsIDB4OUYsIDB4MDgsIDB4N0MsIDB4ODMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDAsCisweENGLCAweDA0LCAweDdDLCAweDAyLCAweDcwLCAweDIwLCAweEMwLCAweDI3LCAweDA0LCAweDhGLCAweDExLCAweDFDLCAweDQ2LAorMHg3NCwgMHgxOSwgMHhDMSwgMHgyNywgMHgwMCwgMHhENywgMHgwMSwgMHg1QywgMHgwNiwgMHhGMCwgMHgxRCwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4M0YsIDB4MDAsIDB4REYsIDB4MDAsCisweEZDLCAweDAzLCAweEYwLCAweDBFLCAweEMxLCAweDBDLCAweDA4LCAweEJGLCAweDAzLCAweDRDLCAweDAzLCAweDMwLCAweDBFLAorMHhEMCwgMHgxNCwgMHgwMCwgMHhCRiwgMHgxOSwgMHhDQywgMHgxNywgMHgzMCwgMHg4OSwgMHhDMCwgMHgzNCwgMHgwMCwgMHhGNywKKzB4MDAsIDB4Q0MsIDB4NDIsIDB4RjAsIDB4MDUsIDB4QzAsIDB4OEUsIDB4MDAsIDB4MzcsIDB4MDgsIDB4NjgsIDB4MjAsIDB4MzAsCisweDA3LCAweEMwLCAweDFGLCAweDAwLCAweDdGLCAweDEwLCAweDdDLCAweDQxLCAweEYwLCAweDA3LCAweEMwLCAweDEzLCAweDIyLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgwMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwKKzB4MEYsIDB4RDAsIDB4MEQsIDB4QzAsIDB4NDYsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NDQsIDB4MjcsIDB4MTAsIDB4MzEsIDB4NDAsCisweDA0LCAweDAwLCAweDhELCAweDAxLCAweDQ0LCAweDA3LCAweDEwLCAweDAxLCAweDQwLCAweDM0LCAweDAwLCAweERCLCAweDAwLAorMHg0NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0MCwgMHg0NCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwKKzB4NDAsIDB4MDcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDIsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDBGLAorMHhEMCwgMHgwRCwgMHg0MCwgMHgyNCwgMHgwMSwgMHg5RCwgMHgxMCwgMHg1NCwgMHgwMywgMHgxNCwgMHgxRCwgMHg0MCwgMHgyNCwKKzB4MjAsIDB4OUQsIDB4MDAsIDB4NDYsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDEsIDB4MzYsIDB4MDIsIDB4RDAsIDB4MDAsIDB4NDQsCisweDAyLCAweEQ4LCAweDExLCAweDQwLCAweDI3LCAweDAwLCAweDk1LCAweDAwLCAweDc0LCAweDAyLCAweDUwLCAweDBELCAweDQwLAorMHgzNywgMHgwMCwgMHg5OCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4MzAsIDB4ODAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsCisweDBDLCAweDUwLCAweDEyLCAweDAwLCAweDBELCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDA4LCAweDQwLCAweDEwLCAweDAwLAorMHg5RCwgMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgwNCwgMHg0OCwgMHgzMCwgMHgwMCwgMHhDOSwgMHgwMCwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MDAsIDB4NDAsIDB4MjUsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NDAsIDB4MjMsCisweDgwLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDQzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMCwgMHgzNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MjQsIDB4MDAsIDB4OEYsIDB4MDAsIDB4NUQsIDB4MDMsIDB4MTQsIDB4MDUsIDB4QzAsIDB4MjQsIDB4MjAsIDB4OUUsCisweDAwLCAweDRELCAweDAzLCAweDM0LCAweDA5LCAweEQwLCAweDM0LCAweDAwLCAweEY3LCAweDAwLCAweDRELCAweDAyLCAweEYwLAorMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwNSwgMHhDOCwgMHgxNywgMHgxMCwKKzB4MUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDNGLCAweDIwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLAorMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsCisweEMwLCAweDBFLCAweDAwLCAweDNGLCAweDIwLCAweEVDLCAweDAwLCAweEIwLCAweDAzLCAweEMwLCAweDBCLCAweDAwLCAweDNGLAorMHg0MCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgxNywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QTAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4QjAsIDB4MUIsIDB4QzAsIDB4MkYsCisweDIxLCAweEYzLCAweDI0LCAweEVDLCAweDI1LCAweEYwLCAweDFGLCAweEQwLCAweDNDLCAweDAwLCAweEZCLCAweDg4LCAweENDLAorMHg4NCwgMHhCMCwgMHg0RiwgMHhDMCwgMHg3RiwgMHgyMiwgMHgyRiwgMHgwMSwgMHhGNCwgMHgwNSwgMHgzMCwgMHgwQiwgMHhDMSwKKzB4RUYsIDB4MDAsIDB4MkYsIDB4MDEsIDB4RUMsIDB4MDQsIDB4MzAsIDB4MTIsIDB4QzAsIDB4NUUsIDB4MDgsIDB4MkYsIDB4MDEsCisweENFLCAweDBELCAweDMwLCAweDBCLCAweEMwLCAweDBELCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgyNywgMHgxMCwgMHg5RCwgMHgwMSwgMHg0NCwgMHgwRiwgMHgxMCwgMHgxNSwgMHg0MCwgMHg2NywgMHgwMCwKKzB4RDEsIDB4MTQsIDB4NDQsIDB4MDIsIDB4RDAsIDB4NEQsIDB4NDAsIDB4QkMsIDB4MDQsIDB4RjEsIDB4MEUsIDB4NDQsIDB4MDcsCisweDEwLCAweEJGLCAweDQwLCAweDM3LCAweDAwLCAweDE3LCAweDk0LCAweDY0LCAweDA1LCAweDEwLCAweDM5LCAweDQwLCAweDM3LAorMHgxMSwgMHg1RCwgMHgyMSwgMHg0NCwgMHgwNSwgMHg1MSwgMHgxOSwgMHg0MCwgMHg3NSwgMHgzMCwgMHgxRCwgMHgyMSwgMHg0NiwKKzB4MDIsIDB4MTAsIDB4MTEsIDB4QzAsIDB4MEQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsCisweEEwLCAweDIzLCAweDAwLCAweDBELCAweDgwLCAweDA1LCAweDBCLCAweEQ4LCAweDA4LCAweDQwLCAweDIzLCAweDAyLCAweEMxLAorMHgwQywgMHgyNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MSwgMHhCMCwgMHg4MSwgMHhDOSwgMHgwNCwgMHg1NCwgMHgwNywgMHg5MCwKKzB4MEMsIDB4NDAsIDB4MzMsIDB4MTEsIDB4MEQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MEMsIDB4NDQsIDB4MzEsIDB4MDEsCisweDQ5LCAweDAwLCAweDI0LCAweDAwLCAweDEyLCAweDBELCAweDQ0LCAweDMxLCAweDAwLCAweDFELCAweDQwLCAweDY0LCAweDEzLAorMHg5MCwgMHgwOCwgMHg0MCwgMHg0RCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwKKzB4NjUsIDB4MDAsIDB4OUQsIDB4MTEsIDB4NDQsIDB4MDMsIDB4MTgsIDB4NjUsIDB4NDAsIDB4MjcsIDB4MDAsIDB4RDEsIDB4MDAsCisweDQyLCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDM0LCAweDA4LCAweEMxLCAweDAwLCAweDU1LCAweDAzLCAweDEwLCAweDBELAorMHg0MCwgMHgzNywgMHgwMCwgMHg5RCwgMHgxMSwgMHg2NCwgMHgwMCwgMHgxQywgMHgwRCwgMHg0MCwgMHgzNywgMHgxMCwgMHg1RCwKKzB4MTEsIDB4NDQsIDB4NDUsIDB4NTAsIDB4ODksIDB4MDAsIDB4NzUsIDB4MDAsIDB4MUQsIDB4MTAsIDB4NjQsIDB4NDMsIDB4OTYsCisweDExLCAweDQwLCAweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDQ3LAorMHgwNCwgMHg5RiwgMHgyMSwgMHg0NCwgMHgwMywgMHhGMiwgMHgwNSwgMHhDMCwgMHgzMywgMHg0MCwgMHhEMywgMHgwMCwgMHg2QywKKzB4MDMsIDB4RjEsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REIsIDB4MDAsIDB4NTQsIDB4MDQsIDB4QjAsIDB4MEQsIDB4QzAsCisweDM3LCAweDAwLCAweDFGLCAweDAxLCAweDdDLCAweDE0LCAweDMwLCAweDA5LCAweEMwLCAweDM1LCAweDAwLCAweDVCLCAweDAxLAorMHgyQywgMHgwRCwgMHgzMCwgMHgzMSwgMHg4MiwgMHg3NywgMHgwMSwgMHgxRCwgMHgyMiwgMHg2NCwgMHgwRiwgMHhCMSwgMHgzMSwKKzB4QzEsIDB4ODEsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODgsIDB4MkQsIDB4MDAsCisweEFGLCAweDAwLCAweEJDLCAweDAzLCAweEYwLCAweDA3LCAweEMwLCAweDNGLCAweDAyLCAweEVGLCAweDgwLCAweEZDLCAweDgyLAorMHhGMCwgMHg4RiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhFQywgMHhBMCwgMHhGMCwgMHgwRiwgMHhDMiwgMHgzRiwKKzB4MTAsIDB4MzcsIDB4MDAsIDB4RUMsIDB4QTQsIDB4NzAsIDB4OUIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsCisweDAxLCAweEYwLCAweDEzLCAweEMwLCAweDJGLCAweDAwLCAweDNGLCAweDA4LCAweERELCAweDI3LCAweDcwLCAweDAzLCAweEMwLAorMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgwNSwgMHgwMiwgMHgxMywKKzB4MTAsIDB4N0UsIDB4MjMsIDB4QjAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDMsIDB4REYsIDB4ODAsIDB4N0MsIDB4MDMsIDB4RjEsCisweDA5LCAweEMwLCAweDM1LCAweDgwLCAweERGLCAweDA4LCAweDRDLCAweDgwLCAweDcwLCAweDBELCAweEMxLCAweDM3LCAweDAwLAorMHg5MywgMHgwMiwgMHg1QywgMHgwOCwgMHhGOCwgMHgwRCwgMHhDMiwgMHgzNywgMHgwMCwgMHg1RiwgMHgwRSwgMHg3OCwgMHgxQiwKKzB4NzAsIDB4MjUsIDB4QzQsIDB4QTUsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NkMsIDB4NEIsIDB4MzEsIDB4MDksIDB4QzQsIDB4MEIsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweEU0LCAweDAyLCAweDkxLCAweDAwLAorMHhGNCwgMHgwNywgMHgxMCwgMHgwNSwgMHg0MSwgMHg3NywgMHgwMCwgMHhGRCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgxOSwKKzB4QzgsIDB4M0UsIDB4MjAsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MkMsIDB4MTAsIDB4MUYsIDB4NDAsIDB4MzcsIDB4MDAsIDB4OTEsCisweDAwLCAweDA0LCAweDAwLCAweEYwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDRDLCAweDAxLCAweDQ0LCAweDA1LCAweEIwLAorMHgwNCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg0QiwgMHgwNCwgMHgyNCwgMHg4MywgMHgxNCwgMHg3MSwgMHg0MCwgMHg2RiwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsCisweDgzLCAweDE0LCAweDNDLCAweDQxLCAweEEzLCAweDEwLCAweENELCAweDAwLCAweDE0LCAweDAxLCAweEQwLCAweDlDLCAweDQwLAorMHgzNSwgMHgwOCwgMHhDRCwgMHgwMSwgMHgwNCwgMHgwOCwgMHg1MCwgMHhCQywgMHg2MCwgMHgzMiwgMHgwMCwgMHgwNSwgMHgwMCwKKzB4MTQsIDB4MDEsIDB4RDAsIDB4NjgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4NDksIDB4MDMsIDB4MTQsIDB4OEMsIDB4RDEsIDB4QjQsCisweDQxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDIzLCAweDEwLCAweDQ4LCAweDQwLCAweDBGLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg1OCwgMHgwMCwgMHg2MSwgMHgwMSwgMHhCNCwgMHgwNywKKzB4MTAsIDB4MTYsIDB4NDAsIDB4NkIsIDB4MDAsIDB4RUQsIDB4MDEsIDB4OTYsIDB4MDYsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0EsCisweDAwLCAweEM1LCAweDQxLCAweDg0LCAweDQ3LCAweDEwLCAweDFFLCAweDY4LCAweDdCLCAweDAwLCAweEYxLCAweDAwLCAweDg0LAorMHgwNSwgMHg1MCwgMHg5QSwgMHg0MCwgMHg3QiwgMHgwMiwgMHg3RCwgMHgwMSwgMHhDNCwgMHgxNCwgMHg5MCwgMHgxQSwgMHg0OCwKKzB4NzksIDB4MjAsIDB4MzksIDB4MDksIDB4ODUsIDB4MjcsIDB4MTUsIDB4MUEsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweDM0LCAweDAyLCAweDQzLCAweDA0LCAweDM0LCAweDAzLCAweDEwLAorMHgwQywgMHhDMCwgMHgzMywgMHgxMCwgMHhERiwgMHgwMCwgMHgxQywgMHgwMiwgMHhGMCwgMHgwQywgMHhDMCwgMHgzMSwgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MEMsIDB4MDMsIDB4NzAsIDB4Q0MsIDB4QzAsIDB4MzcsIDB4NDIsIDB4MDUsIDB4MDAsIDB4MUMsIDB4MTEsCisweEQwLCAweDA4LCAweEMwLCAweDMzLCAweDAwLCAweDRCLCAweDAwLCAweDFDLCAweDQwLCAweEYwLCAweDhDLCAweEMwLCAweDMxLAorMHgwMiwgMHhDMywgMHgwMCwgMHg2QywgMHgyMywgMHgzMCwgMHg4OCwgMHhFMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4M0QsIDB4NDAsIDB4N0YsIDB4MDAsIDB4QkMsIDB4MDMsIDB4NzAsIDB4MDcsCisweEMwLCAweDNGLCAweDAyLCAweEZGLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDBDLCAweEMwLCAweEJGLCAweDIwLCAweERGLAorMHgwMCwgMHgzQywgMHgwMywgMHhDMCwgMHg4RiwgMHhDOCwgMHgzNywgMHgwOCwgMHhGRiwgMHg4QywgMHg3QywgMHgwMSwgMHhGMCwKKzB4MDksIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4NDgsIDB4MUMsIDB4MTEsIDB4RjAsIDB4ODksIDB4QzAsIDB4M0EsIDB4MDAsCisweEJGLCAweDAwLCAweEZDLCAweDIzLCAweEYyLCAweDBGLCAweEMwLCAweDBCLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgxNywgMHgwMCwgMHhERiwgMHgwMSwgMHg2QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzQsIDB4NzQsIDB4MDMsIDB4RDEsIDB4MEUsCisweDdDLCAweDgwLCAweDcwLCAweDZELCAweEUwLCAweDM3LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDFELAorMHhDMCwgMHgzNiwgMHgwMCwgMHg1QiwgMHgwMCwgMHg3QywgMHgwNCwgMHhCMCwgMHgwNSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5NywKKzB4MDAsIDB4NEMsIDB4MDMsIDB4MzQsIDB4MDEsIDB4QzAsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDgwLCAweDE5LCAweDAwLCAweEVELCAweDAwLCAweDg0LCAweDBCLCAweEMwLCAweDA2LCAweDQwLCAweEFCLAorMHgyMCwgMHhFRCwgMHgwNCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzMSwgMHgwMCwgMHhFMSwgMHgxMCwgMHhCNCwKKzB4MDMsIDB4RDAsIDB4RUUsIDB4QzAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDAsIDB4RDAsIDB4NEUsIDB4NDAsCisweDM4LCAweDAwLCAweDYxLCAweDAwLCAweEE0LCAweDAwLCAweDEwLCAweDBFLCAweDYwLCAweDNCLCAweDAwLCAweDJELCAweDAwLAorMHg4RCwgMHgwMywgMHhCMCwgMHgwNiwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODUsIDB4MTcsIDB4NTAsIDB4MUUsIDB4NDEsIDB4N0IsIDB4MDEsCisweEVELCAweDA5LCAweEI0LCAweDA3LCAweDUwLCAweDFFLCAweDQwLCAweDc4LCAweDQxLCAweEUxLCAweDA1LCAweDk0LCAweDQ3LAorMHg1MCwgMHgxRSwgMHgwMiwgMHg3QiwgMHgxMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNCwgMHhEMiwgMHhEQywgMHgwMCwgMHg3QSwKKzB4MjQsIDB4NkQsIDB4MDEsIDB4RDYsIDB4MEQsIDB4RDgsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDQsIDB4RTUsIDB4MDEsIDB4RjQsCisweDA3LCAweDEwLCAweDFBLCAweDYwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgxQSwgMHgwNCwgMHgwMywgMHhEMCwgMHgxNCwgMHg0MCwgMHg3MywgMHgwMiwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MTMsIDB4RDAsCisweDBDLCAweDQ4LCAweDMwLCAweDAwLCAweERELCAweDAxLCAweDM0LCAweDA2LCAweEQwLCAweDhDLCAweDQwLCAweDMwLCAweDAwLAorMHg0NSwgMHgwOCwgMHgzNCwgMHgwRCwgMHhEMCwgMHg4QywgMHg0MCwgMHg3MywgMHgwMCwgMHhDRCwgMHgwMSwgMHgwNCwgMHgwMywKKzB4MTcsIDB4MEMsIDB4NDAsIDB4NUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsCisweDFELCAweDA2LCAweDdELCAweDAzLCAweDZDLCAweDAxLCAweEYwLCAweDE3LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLAorMHhGNCwgMHgyRCwgMHg3MCwgMHgwNCwgMHhDNCwgMHgxNCwgMHgxMCwgMHg1MywgMHg4MCwgMHhGQywgMHgwRCwgMHg3MSwgMHgwNSwKKzB4QzAsIDB4MTcsIDB4MDAsIDB4N0YsIDB4MDcsIDB4RkMsIDB4MTksIDB4RjAsIDB4MTUsIDB4QzAsIDB4NTYsIDB4MDAsIDB4NkYsCisweDAyLCAweEZDLCAweDA1LCAweEYwLCAweDI3LCAweEM4LCAweDFGLCAweDIwLCAweDY3LCAweDA3LCAweEZDLCAweDAxLCAweDEwLAorMHg5NywgMHhDMiwgMHg1RiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgwNSwKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzEsIDB4ODcsIDB4MDAsIDB4MUYsIDB4ODAsIDB4N0MsCisweDIwLCAweEYyLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFCLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDIxLCAweEMwLAorMHgwNSwgMHgwMCwgMHgxRiwgMHgwNCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxOSwgMHg1MCwKKzB4NkMsIDB4MTgsIDB4MTAsIDB4MjEsIDB4QzEsIDB4QzcsIDB4MDgsIDB4MUIsIDB4MzAsIDB4N0UsIDB4MEMsIDB4RjAsIDB4ODEsCisweEMwLCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY1LCAweDAwLAorMHg5RiwgMHg0NCwgMHg3RSwgMHgwQSwgMHhGMCwgMHgwOSwgMHhEMCwgMHg2NCwgMHgxMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwKKzB4MzAsIDB4MDksIDB4RDAsIDB4MjQsIDB4ODAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzIsIDB4MjcsCisweDAwLCAweDkzLCAweEMwLCAweDRDLCAweDQyLCAweEYwLCAweDI5LCAweEMwLCAweDI2LCAweDAwLCAweDkzLCAweDgwLCAweDVDLAorMHgwQSwgMHhGMCwgMHgxOSwgMHhDMCwgMHg2NSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgyNiwgMHgzMCwgMHgyOSwgMHhDMCwKKzB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDIsIDB4OUQsCisweDQ3LCAweDc0LCAweDA2LCAweEQwLCAweDQ4LCAweDQwLCAweEVDLCAweDEwLCAweDlELCAweDAwLCAweDM0LCAweDI2LCAweDEwLAorMHgwOSwgMHhDMCwgMHgyNiwgMHgxMCwgMHg5RCwgMHgwMiwgMHg3NCwgMHgxQSwgMHhEMCwgMHgwOSwgMHg0NCwgMHgyNywgMHgwMCwKKzB4OTEsIDB4NDAsIDB4NEMsIDB4MDIsIDB4NzgsIDB4MUIsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTEsIDB4MTAsIDB4NDQsIDB4MEUsCisweEQwLCAweDA4LCAweDQyLCAweDIwLCAweDEwLCAweDlCLCAweDQwLCAweDBDLCAweDFFLCAweDU0LCAweDA5LCAweEMwLCAweDA3LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDIsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksCisweDQwLCAweDI0LCAweDAwLCAweDk5LCAweDEwLCAweDc0LCAweDAyLCAweEQwLCAweDI5LCAweDQwLCAweDIzLCAweDAwLCAweDkxLAorMHgwMCwgMHg2NCwgMHgwMiwgMHhEMSwgMHgyOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMSwgMHg1NCwgMHgwMiwgMHg1MCwKKzB4NEQsIDB4NDAsIDB4MjUsIDB4MDIsIDB4OTQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDA1LCAweDhELCAweDE0LCAweDM0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwOCwgMHg3NCwgMHgwQSwgMHgxMCwgMHgyOCwgMHg0MCwKKzB4MjIsIDB4MDIsIDB4OEQsIDB4MDgsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDIsIDB4ODEsIDB4MDgsCisweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDI3LCAweDAyLCAweDkxLCAweDQwLCAweDA0LCAweDAyLCAweEQyLCAweDA5LAorMHg0MCwgMHgyNCwgMHgwMCwgMHg5OSwgMHgwMCwgMHg0NiwgMHgyMiwgMHg1MSwgMHg0OCwgMHg0NCwgMHg0MywgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MDYsIDB4MDEsIDB4MUYsIDB4MDQsIDB4NzQsIDB4RDAsCisweEYwLCAweDAxLCAweEMwLCAweDU0LCAweDEwLCAweDFGLCAweDE2LCAweDdFLCAweDAwLCAweDM0LCAweDAxLCAweDQwLCAweDg0LAorMHgwNSwgMHgxOSwgMHg5NiwgMHg3QywgMHgwMCwgMHhGMCwgMHg0MSwgMHhDMSwgMHg4NywgMHgwMCwgMHgxMywgMHgwMiwgMHg2RCwKKzB4ODAsIDB4RDAsIDB4MTEsIDB4NDAsIDB4ODMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NTQsIDB4MDEsIDB4NzAsIDB4MDUsIDB4QzAsCisweDE1LCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDA4LCAweDMwLCAweDA1LCAweEMwLCAweDc3LCAweEUwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgyRiwgMHgyNSwgMHhBRiwgMHgyMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MEIsIDB4QzgsIDB4QUYsIDB4MDAsIDB4OUQsIDB4MDQsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUIsIDB4QzAsIDB4MjcsIDB4MDksCisweDlGLCAweDA0LCAweEZDLCAweDAyLCAweEYyLCAweDA5LCAweEMyLCAweDI3LCAweDQxLCAweEJGLCAweDA0LCAweEZDLCAweDAyLAorMHg1MCwgMHgyQiwgMHhDMCwgMHgyRiwgMHgwMSwgMHhCRiwgMHgwMCwgMHhCNCwgMHgwMiwgMHhGMiwgMHgwQiwgMHhDMCwgMHgyRiwKKzB4MDAsIDB4QTcsIDB4MDAsIDB4QkMsIDB4MTIsIDB4RjQsIDB4OEIsIDB4QzAsIDB4NzUsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDJGLCAweDA1LCAweEJGLCAweDA0LCAweEZDLCAweDAyLCAweEYwLCAweDBCLAorMHhEMCwgMHg2QywgMHgwNCwgMHg5MSwgMHgyNCwgMHhGQywgMHgwQSwgMHhGMCwgMHgyQiwgMHhEMCwgMHgyNCwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4OUUsIDB4MDIsIDB4RjAsIDB4NEIsIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDgsIDB4N0MsIDB4ODIsIDB4MzQsCisweDVCLCAweEQxLCAweDI0LCAweDAyLCAweEJGLCAweDAwLCAweEVDLCAweDAyLCAweEYyLCAweDBCLCAweEMwLCAweDJFLCAweDgwLAorMHhBNywgMHgwMCwgMHhDRSwgMHg4MywgMHgzMCwgMHgwQiwgMHhDMCwgMHg3NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MTEsIDB4MUQsIDB4MDgsIDB4NzQsIDB4MDgsIDB4RDAsIDB4MDEsIDB4NDAsCisweDg0LCAweDAwLCAweDExLCAweDE0LCAweDc0LCAweDA0LCAweEQwLCAweDUxLCAweDQwLCAweDg0LCAweDA0LCAweDBELCAweDEwLAorMHg3NiwgMHgwMCwgMHhEMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxRCwgMHgwNCwgMHg3NCwgMHgwMCwgMHgxOSwgMHgyMSwKKzB4NDAsIDB4MDQsIDB4MDAsIDB4MTksIDB4MDAsIDB4NUMsIDB4MDAsIDB4RDIsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MTAsIDB4MUQsCisweDAwLCAweDA1LCAweDAwLCAweEI0LCAweDAxLCAweDQwLCAweDYwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHgwNSwgMHg4RCwgMHgwMCwgMHgzNCwgMHgyMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMCwKKzB4MDAsIDB4ODEsIDB4MEMsIDB4MzQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MjAsIDB4ODMsIDB4OEQsIDB4MDgsIDB4MTQsCisweDAyLCAweEQzLCAweDg4LCAweDAwLCAweDIyLCAweDA1LCAweDhELCAweDA0LCAweDc0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLAorMHgyMCwgMHgxMCwgMHg4RCwgMHgwMCwgMHgzNiwgMHg4MiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMiwgMHgwMCwgMHg5NSwgMHgwMCwKKzB4NTQsIDB4MDIsIDB4MTQsIDB4MEMsIDB4NDAsIDB4NDgsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweDJBLCAweDI1LCAweDg2LCAweDlELCAweDIwLCAweDc0LCAweDAyLCAweEQyLCAweDA5LCAweDQwLCAweDI0LCAweDAwLAorMHg5MSwgMHgyMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgxRCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHg0MCwgMHg3NCwgMHg0MiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDQsIDB4MjQsCisweDAxLCAweDlELCAweDAyLCAweDU1LCAweDBCLCAweEQxLCAweDg5LCAweDQwLCAweEU0LCAweDAwLCAweDlELCAweDAzLCAweDU0LAorMHgyQSwgMHg5MCwgMHgyRCwgMHg0MCwgMHg2MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4MDIsIDB4MjUsIDB4MTAsIDB4OUYsIDB4MTIsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTMsCisweDAwLCAweEZDLCAweDIyLCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDJBLCAweEYwLAorMHgwOSwgMHhDMiwgMHgyNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHgzRSwgMHgzQSwgMHgxMCwgMHg5OSwgMHhDOCwgMHgyNCwgMHgyMCwKKzB4OEYsIDB4NEIsIDB4N0MsIDB4MjIsIDB4RjAsIDB4NDksIDB4QzAsIDB4QTYsIDB4ODAsIDB4ODcsIDB4MDEsIDB4NTQsIDB4MDIsCisweDMxLCAweDA5LCAweEUwLCAweDE0LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDA4LAorMHgyNSwgMHgwQywgMHg5RiwgMHg4NCwgMHg3QywgMHgwMiwgMHhGOCwgMHgwOSwgMHhFMCwgMHgyMywgMHg0MSwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsIDB4MTAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDgwLCAweDdDLCAweDA2LCAweEY4LCAweDE5LCAweEM0LCAweDY3LCAweDAwLCAweDlCLAorMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhFOCwgMHgyNywgMHg4OCwgMHg5RiwgMHgwMCwgMHg2QywgMHgwNiwgMHhEMSwKKzB4NDgsIDB4RDgsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsCisweDAwLCAweDFGLCAweDgyLCAweDdDLCAweDgwLCAweEY4LCAweDQxLCAweEQwLCAweDA2LCAweDQwLCAweDEzLCAweDAwLCAweDdDLAorMHgwMCwgMHg3MCwgMHg0MSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwMCwgMHg0RCwgMHhDOCwgMHg3MSwgMHgwMSwgMHg0MSwKKzB4MDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzEsIDB4MDcsIDB4MjAsIDB4MUYsIDB4MzAsCisweDVDLCAweDEwLCAweDcwLCAweEMxLCAweEM4LCAweDg3LCAweDIwLCAweDFGLCAweDEwLCAweDRDLCAweDEwLCAweDMyLCAweDQxLAorMHhDNCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHhEQywgMHgwNCwKKzB4N0QsIDB4MDcsIDB4NzQsIDB4MTUsIDB4NzgsIDB4NzYsIDB4QzAsIDB4MUMsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NzQsIDB4MDEsCisweDEwLCAweDE2LCAweDQ1LCAweDE0LCAweDAwLCAweDcxLCAweDg2LCAweEM0LCAweDA5LCAweDEyLCAweDE2LCAweDQwLCAweDE3LAorMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHg3MCwgMHgzNiwgMHg0MCwgMHgxNywgMHgxMCwgMHg3RCwgMHgwMCwgMHhGMCwKKzB4MEQsIDB4MTIsIDB4MzYsIDB4NDgsIDB4REYsIDB4MDIsIDB4N0QsIDB4MDQsIDB4ODAsIDB4MTUsIDB4NTAsIDB4MDcsIDB4NTAsCisweDQwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweEYyLCAweDAwLCAweDhELAorMHgwNiwgMHgzNCwgMHgwNywgMHg1MCwgMHgxOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNiwgMHgyMywgMHg1MCwKKzB4MDgsIDB4NDAsIDB4MzIsIDB4NDAsIDB4QzksIDB4MDAsIDB4MDQsIDB4MkYsIDB4NTAsIDB4QkMsIDB4NDAsIDB4MzMsIDB4MDAsCisweENELCAweDAwLCAweDE0LCAweDAzLCAweDUwLCAweDI4LCAweDQwLCAweDMzLCAweDgwLCAweDRELCAweDBBLCAweDM0LCAweDJGLAorMHg1MCwgMHgxQywgMHg0MCwgMHhEMywgMHgwMCwgMHhDOSwgMHgwMCwgMHgwNCwgMHgwQiwgMHgxMSwgMHgwQywgMHg0MCwgMHg0MCwKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4ODAsIDB4QUQsIDB4MDAsCisweEI0LCAweDAzLCAweDUwLCAweDAyLCAweDQwLCAweDI4LCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDE3LCAweDE4LCAweDBFLAorMHg0MCwgMHg3MCwgMHgwMiwgMHhFOSwgMHgwMSwgMHhDNCwgMHgwNywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMSwgMHhFRCwKKzB4MDgsIDB4QjQsIDB4MDMsIDB4NTAsIDB4MjIsIDB4NDAsIDB4M0IsIDB4QjAsIDB4NkQsIDB4MDAsIDB4QjYsIDB4MDcsIDB4MTEsCisweDA2LCAweDQwLCAweDFCLCAweDhDLCAweEZELCAweDAwLCAweDg1LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDEwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywKKzB4MDcsIDB4NzAsIDB4MTIsIDB4QzAsIDB4NjgsIDB4MDAsIDB4RTMsIDB4MDEsIDB4RkMsIDB4MEYsIDB4NzAsIDB4MUEsIDB4RDAsCisweDdBLCAweDAxLCAweEU5LCAweDAxLCAweDhDLCAweDA3LCAweDcwLCAweDFFLCAweEU4LCAweDdCLCAweDAzLCAweEVGLCAweDAxLAorMHhCQywgMHgwNywgMHg3MCwgMHgxMiwgMHhDMCwgMHg3QiwgMHgyNSwgMHg2RiwgMHgwMSwgMHg5RSwgMHgwNiwgMHg3MCwgMHgxQSwKKzB4QzAsIDB4NkIsIDB4MDAsIDB4RUYsIDB4MDEsIDB4OEMsIDB4MDYsIDB4MzQsIDB4MUUsIDB4QzAsIDB4NTAsIDB4NjAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDE1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLAorMHg3MCwgMHgwMCwgMHhDMCwgMHgyMSwgMHgwMCwgMHhERiwgMHg0MCwgMHg3QywgMHgwMywgMHhGMiwgMHgwQywgMHhDMCwgMHgzNywKKzB4MjAsIDB4RDcsIDB4ODAsIDB4N0MsIDB4MDEsIDB4RjIsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDIsIDB4REYsIDB4MTAsIDB4NzgsCisweDAzLCAweDcwLCAweDAxLCAweEMyLCAweDM3LCAweDFBLCAweDFGLCAweDgwLCAweDNDLCAweDAyLCAweEYwLCAweDA1LCAweEMwLAorMHgyNywgMHgyMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGNiwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4NUQsIDB4MDAsIDB4QTMsIDB4MDEsIDB4Q0MsIDB4MTMsIDB4RjgsCisweDAzLCAweEMwLCAweDZELCAweDAwLCAweEZGLCAweDExLCAweEJDLCAweDA3LCAweDIwLCAweERCLCAweEMwLCAweDdDLCAweDAwLAorMHg3RiwgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwgMHg5RiwgMHhEMCwgMHg3QywgMHgwMCwgMHhERiwgMHgwOSwgMHhGQywgMHgwNywKKzB4RjAsIDB4MTMsIDB4QzAsIDB4N0YsIDB4MjAsIDB4MkYsIDB4MDksIDB4RUUsIDB4MTcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4NUYsCisweDAwLCAweEZGLCAweDAxLCAweDhDLCAweDA1LCAweDMwLCAweERCLCAweEMwLCAweDE4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgzOSwgMHgwMCwgMHhBMSwgMHgwMCwgMHg4NCwgMHgwMywgMHg3OCwgMHg0MiwKKzB4NDAsIDB4MjgsIDB4MDIsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MTMsIDB4MTAsIDB4OEEsIDB4NTAsIDB4MzgsIDB4MTEsIDB4MkQsCisweDA0LCAweDhDLCAweDFBLCAweEQwLCAweDhBLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDA1LCAweEI0LCAweDAzLCAweDkwLAorMHgwMiwgMHg0MCwgMHgzQiwgMHgwMCwgMHgyRCwgMHgwMCwgMHg5RSwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHg5QiwgMHgyMiwKKzB4QUQsIDB4MDQsIDB4QUMsIDB4MDEsIDB4MTAsIDB4Q0UsIDB4NDgsIDB4NTUsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweEExLCAweDAwLCAweDg1LCAweDIzLCAweDUwLCAweDgyLCAweDQzLAorMHgyOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhGNCwgMHgwMiwgMHgxMCwgMHg0QiwgMHg0OCwgMHgzOCwgMHg4MCwgMHg2RCwgMHg4MCwKKzB4ODQsIDB4MDMsIDB4RDIsIDB4MDYsIDB4MDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDIsCisweDQwLCAweDNCLCAweDAwLCAweDNELCAweDAwLCAweDg0LCAweDEyLCAweEQwLCAweDBBLCAweDQwLCAweDlCLCAweDAwLCAweEY1LAorMHgxMCwgMHhENCwgMHgyMCwgMHgxMCwgMHhDMiwgMHg0NCwgMHg2MCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MjgsIDB4QzMsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4NTAsIDB4MzAsIDB4NDAsIDB4MjAsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDIyLCAweDEwLCAweDA4LCAweDQwLCAweDMwLCAweDAwLCAweDFELCAweDAwLCAweDA0LAorMHg0QywgMHhEMCwgMHgwMCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwNCwgMHgzNCwgMHg0MywgMHhEMCwgMHgwMCwgMHg0MCwKKzB4NzcsIDB4MDAsIDB4MEQsIDB4MTIsIDB4MTQsIDB4QzYsIDB4RDksIDB4OEMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4OEQsIDB4MjMsCisweDA1LCAweDAzLCAweDE0LCAweDI0LCAweDQwLCAweDA5LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHhBMCwgMHhFNSwgMHg0MSwgMHg5MywgMHgwQSwgMHg0QywgMHgwMywgMHg3MCwgMHgzNSwgMHhDMCwgMHgzNSwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MzQsIDB4MDgsIDB4QzAsIDB4M0MsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4NEUsCisweEYwLCAweDA5LCAweEMwLCAweDNDLCAweDAwLCAweEZGLCAweDEzLCAweDdDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDNGLAorMHgwMSwgMHg1RiwgMHgwMSwgMHg0QywgMHgwNywgMHhGMSwgMHhCRCwgMHhDMCwgMHhCNywgMHgwMCwgMHhENywgMHgwMywgMHgxNCwKKzB4NEYsIDB4MzAsIDB4OTQsIDB4QzAsIDB4NTQsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweDA4LCAweDI3LCAweDAwLCAweDlGLCAweDg4LCAweDdDLCAweDAzLCAweDcwLCAweDIxLCAweEMwLCAweEI3LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHg0MiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1RCwgMHgwMiwgMHhGMCwKKzB4MDAsIDB4QzQsIDB4MzcsIDB4MDAsIDB4REYsIDB4MjAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MjUsIDB4RTQsIDB4MzcsIDB4MDAsCisweDVGLCAweDAxLCAweDRELCAweDIzLCAweEYwLCAweDA1LCAweEMwLCAweEY3LCAweDAwLCAweERGLCAweDAyLCAweDdDLCAweDFCLAorMHhGMCwgMHgzRCwgMHhDMCwgMHgzNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwKKzB4MjcsIDB4MDQsIDB4RkYsIDB4MDIsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MTcsIDB4QzEsIDB4NkIsIDB4MDAsIDB4RjcsIDB4MDAsCisweEZDLCAweDA3LCAweEQwLCAweDFCLCAweEMwLCAweDNDLCAweDA4LCAweDFGLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHgzRCwgMHg4MCwgMHhGRiwgMHg4MCwgMHhDQywgMHgwMywgMHhGOCwgMHgxMywgMHhDMCwgMHgzRCwgMHgwMCwgMHhGMywKKzB4MDAsIDB4RkMsIDB4MjYsIDB4RjAsIDB4MDMsIDB4Q0MsIDB4MkYsIDB4MDAsIDB4RjcsIDB4MTAsIDB4Q0MsIDB4MDIsIDB4MzAsCisweDExLCAweEM4LCAweDA0LCAweDI2LCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDY2LAorMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwMSwgMHg0MCwgMHgxNywgMHgwMCwgMHhEMSwgMHg4MCwgMHg3NCwKKzB4MDcsIDB4RDAsIDB4MzksIDB4NTAsIDB4MzQsIDB4MDAsIDB4MUQsIDB4MDksIDB4NDQsIDB4MEMsIDB4RDAsIDB4MTEsIDB4NDAsCisweDM0LCAweDgwLCAweERELCAweDAwLCAweDQ0LCAweDAzLCAweEQ4LCAweDAwLCAweEMxLCAweDM0LCAweDQwLCAweDExLCAweDAzLAorMHg3MiwgMHgwRSwgMHg3MCwgMHgwNSwgMHg0MSwgMHgyMywgMHgwMCwgMHhDQiwgMHgyMiwgMHg0NCwgMHg2NCwgMHgxNCwgMHgzOSwKKzB4QzAsIDB4MDYsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4NDYsIDB4MEMsCisweDlELCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDQ1LCAweDQxLCAweEI3LCAweDAxLCAweEQ1LCAweDAwLCAweDc0LCAweDEyLAorMHhEMCwgMHg4MSwgMHg0MCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMiwgMHg0NCwgMHgwNCwgMHhEMiwgMHgxOSwgMHg0MSwgMHgzNCwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4NDUsIDB4NDAsIDB4MzYsIDB4MjAsIDB4NTEsIDB4MTEsIDB4NjQsCisweDAzLCAweEQwLCAweDE5LCAweDQwLCAweDM3LCAweDAwLCAweDUxLCAweDAyLCAweDQ0LCAweDAxLCAweDEwLCAweDQxLCAweDQwLAorMHgwNCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4RCwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MzIsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsCisweDAwLCAweDQwLCAweDMyLCAweDAwLCAweDhELCAweDAwLCAweDA0LCAweDAwLCAweEQyLCAweDAwLCAweDQwLCAweDMwLCAweDAwLAorMHhDRCwgMHgxMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwNCwgMHg2MCwgMHgzMCwgMHgwMCwgMHg0MSwgMHgyMCwgMHgzNCwgMHgwMSwKKzB4NTAsIDB4MDgsIDB4NDAsIDB4MzcsIDB4ODAsIDB4MDksIDB4MDAsIDB4NDUsIDB4MDAsIDB4MTAsIDB4MEMsIDB4NDQsIDB4NDIsCisweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweERGLCAweDAwLAorMHg3QywgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHgyNywgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMiwgMHgwMSwKKzB4RDAsIDB4MzYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NDUsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RDAsIDB4M0MsIDB4MjAsIDB4RkQsCisweDAwLCAweDRELCAweDAzLCAweEQwLCAweDA1LCAweEMwLCAweDNGLCAweDEwLCAweDUzLCAweDIwLCAweDc0LCAweDgzLCAweEYwLAorMHgwMSwgMHhDOCwgMHgzNywgMHg4MCwgMHg1NywgMHgwMCwgMHg0QywgMHgwMCwgMHgzMSwgMHgwMSwgMHhDMCwgMHgwNCwgMHg0NCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MkYsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsCisweDAyLCAweEYwLCAweDA2LCAweEMwLCAweDFGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDAyLCAweEMwLAorMHgzRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGRCwgMHgwMCwgMHhGMCwgMHgwMywgMHg4MiwgMHgzRiwgMHgxMCwgMHhGRiwgMHg4MCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MDcsIDB4QzAsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDIsIDB4NzAsIDB4MDMsCisweEMwLCAweDNGLCAweDAwLCAweDJELCAweDAwLCAweEZDLCAweDAwLCAweEYyLCAweDAzLCAweDgwLCAweDE0LCAweDIwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhGMywgMHgwOSwgMHg4QywgMHgwNywKKzB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MjcsIDB4RjAsIDB4OUYsIDB4QzAsIDB4N0YsCisweDAyLCAweEZGLCAweDA5LCAweEZDLCAweDI3LCAweEYwLCAweDlGLCAweEMwLCAweDdELCAweDAyLCAweEVGLCAweDAxLCAweENDLAorMHgwNywgMHhGMCwgMHgxRSwgMHg0MCwgMHgzQywgMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgwMywgMHhCMCwgMHgwRiwgMHhDMCwKKzB4M0MsIDB4MDAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQ3LCAweDQwLCAweDExLCAweDAwLCAweDQ1LCAweDA0LCAweEQwLAorMHgxMSwgMHg1MiwgMHgwNCwgMHgwMCwgMHgwRCwgMHgwMCwgMHg3NCwgMHgxMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMSwKKzB4MUQsIDB4MDQsIDB4NzQsIDB4MTAsIDB4RDAsIDB4NDAsIDB4QzAsIDB4MDYsIDB4MDEsIDB4MUQsIDB4ODEsIDB4NDQsIDB4MDQsCisweEQwLCAweDExLCAweDQwLCAweDc0LCAweDA4LCAweDUxLCAweDIxLCAweDQ0LCAweDA3LCAweDEwLCAweDE1LCAweDQyLCAweDc0LAorMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwNywgMHgxMCwgMHgxOSwgMHg0OCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzcsIDB4MDAsIDB4QzEsIDB4MDQsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MEQsCisweDYwLCAweDMwLCAweDA1LCAweENELCAweDE0LCAweDM0LCAweDAzLCAweEQwLCAweDRDLCAweDQwLCAweDMzLCAweDAwLCAweEM1LAorMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwKKzB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4NTAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsCisweEM1LCAweDAwLCAweDQ0LCAweDAyLCAweDE0LCAweDBDLCAweDQwLCAweDQ1LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgwNSwgMHgwMCwgMHgwMSwgMHg0MCwgMHg1NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg2MCwKKzB4MDQsIDB4MzAsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MjAsCisweDc0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDFELCAweDAwLCAweDY0LCAweDgwLCAweEMwLCAweDAxLAorMHg0MCwgMHgzNiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHg0MywgMHhEMCwgMHhBRCwgMHg0MCwgMHgzNiwgMHgwNCwgMHhDNSwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEEwLCAweDMzLCAweDAwLCAweEQzLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM0LAorMHgwMCwgMHhERiwgMHg4MCwgMHg3QywgMHg4MywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDMsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4NDAsCisweDg2LCAweDA0LCAweEQzLCAweDA5LCAweDRDLCAweDI1LCAweEYwLCAweDNELCAweEMwLCAweDI2LCAweDAwLCAweEQ3LCAweDA5LAorMHgwRCwgMHgwMywgMHgzMCwgMHgwOSwgMHhDMCwgMHgwMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDcsIDB4ODgsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsCisweDNGLCAweDAwLCAweEY0LCAweDAwLCAweEYxLCAweDAzLCAweEM4LCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLAorMHhBMCwgMHgwMywgMHhDOCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMSwgMHgwMywgMHhDOCwgMHgxOSwKKzB4MDAsIDB4Q0YsIDB4MjEsIDB4QkMsIDB4MDEsIDB4MzAsIDB4MTYsIDB4QzIsIDB4MzksIDB4MDIsIDB4RkIsIDB4MDAsIDB4RkMsCisweDEzLCAweEYwLCAweDBGLCAweEMwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwNSwgMHg3QywgMHgwMywgMHgzMiwgMHgwRCwgMHhDMiwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4NEMsIDB4MDcsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NzcsIDB4MDAsIDB4REYsIDB4MDEsIDB4N0MsIDB4MDcsIDB4RjAsCisweDBELCAweEMwLCAweDc0LCAweDAwLCAweERGLCAweDAxLCAweDRDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweEI1LCAweDAwLAorMHg5MywgMHgwMCwgMHg0QywgMHgwQSwgMHg3MCwgMHgwRCwgMHhDMiwgMHhBNCwgMHgwMCwgMHhENywgMHgwMCwgMHg0QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsCisweDA0LCAweDEwLCAweDFELCAweDAxLCAweDc0LCAweDAwLCAweDE0LCAweEIwLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDAwLAorMHg0NCwgMHgwNCwgMHhDMSwgMHhBMSwgMHg0MiwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMSwgMHg3NCwgMHg4NCwgMHhEMCwgMHhFMSwKKzB4NDAsIDB4NDQsIDB4MDAsIDB4MEQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4QjAsIDB4MDAsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsCisweDgwLCAweDQ0LCAweDEzLCAweDEwLCAweDBELCAweDQwLCAweDM0LCAweDEwLCAweERELCAweDBBLCAweDQ0LCAweDQ2LCAweEQwLAorMHgxRCwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHgzMCwKKzB4MDAsIDB4Q0QsIDB4MDIsIDB4MzQsIDB4MDMsIDB4MTAsIDB4M0MsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsCisweDFCLCAweEQwLCAweDBDLCAweDQwLCAweDMyLCAweDAwLCAweENELCAweDEwLCAweDM0LCAweDAzLCAweEQwLCAweDBELCAweDQwLAorMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHg1MCwgMHgwQywgMHg0NCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwKKzB4MDQsIDB4ODMsIDB4MTQsIDB4MDgsIDB4NDAsIDB4MTIsIDB4MDAsIDB4QzQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MUMsCisweDQwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQ4LCAweDAwLAorMHgyRCwgMHgwOSwgMHhGNCwgMHgyNCwgMHgxMCwgMHgxMiwgMHg0MCwgMHg0QiwgMHgwMCwgMHgyRCwgMHgwMCwgMHg4NCwgMHgyNCwKKzB4RDAsIDB4MTIsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MkQsIDB4NDEsIDB4QjQsIDB4MEMsIDB4RDAsIDB4MTIsIDB4NjAsIDB4QzgsCisweDAwLCAweDJELCAweDAxLCAweEM0LCAweDA0LCAweEQyLCAweDMyLCAweDQwLCAweDcwLCAweDAwLCAweDYxLCAweDAxLCAweDA1LAorMHgwNywgMHgxMCwgMHgxQywgMHg0MCwgMHg3QSwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMSwgMHgxQSwgMHg2MCwKKzB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MzAsIDB4MDAsIDB4Q0YsCisweDAwLCAweDNDLCAweDAzLCAweDMwLCAweDBDLCAweEMzLCAweDMzLCAweDAyLCAweENGLCAweDA4LCAweDBDLCAweDAzLCAweEYwLAorMHgwQywgMHhDMiwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzQywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMCwKKzB4Q0YsIDB4MDAsIDB4MEMsIDB4MDMsIDB4NzAsIDB4MEMsIDB4QzAsIDB4MzEsIDB4MDAsIDB4QzMsIDB4MDQsIDB4MEMsIDB4MDMsCisweDcwLCAweDBDLCAweEMwLCAweDMyLCAweDAwLCAweEQ3LCAweDAwLCAweDBELCAweDAzLCAweEYyLCAweDhDLCAweDUxLCAweDQ4LAorMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzgsIDB4MEYsIDB4MDgsIDB4M0YsIDB4MDQsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsCisweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLAorMHg0MCwgMHhCQywgMHgwMCwgMHhCMCwgMHgxMywgMHhDNCwgMHgzRiwgMHgwMiwgMHhGRiwgMHgwMCwgMHhGRSwgMHgwMywgMHhGMiwKKzB4MEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEEsIDB4QzIsIDB4MEIsIDB4RTAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDM3LCAweDAwLCAweERGLCAweDAxLCAweDBELAorMHgwNywgMHgzNCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMSwgMHg0QywgMHgwNywgMHgzQywgMHgwRCwgMHhDMCwKKzB4NzcsIDB4MDAsIDB4RDcsIDB4MDEsIDB4NEQsIDB4ODcsIDB4MzQsIDB4MUQsIDB4QzAsIDB4NzUsIDB4NDAsIDB4RDMsIDB4MDAsCisweDdFLCAweDAzLCAweEYwLCAweDFELCAweEMwLCAweDI0LCAweDAwLCAweEQzLCAweDAwLCAweDRDLCAweDAzLCAweEI4LCAweDA5LAorMHhDMCwgMHg1NCwgMHgwMCwgMHhEQiwgMHgwMCwgMHg0RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MSwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTAsIDB4MDgsIDB4MDAsIDB4MkQsIDB4MDAsIDB4ODQsIDB4MDAsCisweDE4LCAweDAyLCAweDQwLCAweDBCLCAweDAwLCAweDNELCAweDAwLCAweEQ0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDBGLAorMHgwMCwgMHgzMSwgMHgwMCwgMHhDNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwQywgMHgwMCwgMHgyMSwgMHgwMCwgMHg5QywKKzB4ODAsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MzksIDB4MDAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDIsCisweDM4LCAweDAwLCAweEYxLCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhDNCwgMHg4NywgMHgxMiwKKzB4MUUsIDB4NjAsIDB4N0IsIDB4ODAsIDB4RTksIDB4MDEsIDB4ODQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDIsIDB4N0IsIDB4MjAsCisweEU1LCAweDAxLCAweEEwLCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEU5LCAweDAxLCAweDk0LCAweDA3LAorMHhEMCwgMHgxRiwgMHg0MCwgMHg3MiwgMHgwOCwgMHhDMSwgMHgwMSwgMHgwNCwgMHgwNywgMHgxMCwgMHgxQywgMHg0MCwgMHg3MCwKKzB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDYsIDB4RDAsIDB4MUEsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDIwLCAweDAzLCAweDAwLCAweDBELCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MjQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4MDAsIDB4MTQsIDB4MDAsIDB4RDAsCisweDAwLCAweDQwLCAweDMzLCAweDQwLCAweEMxLCAweDAwLCAweDA1LCAweDAzLCAweDE0LCAweDBDLCAweDUwLCAweDMwLCAweDUyLAorMHg5MSwgMHg0OCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgxQywgMHg0MCwgMHg1QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTcsIDB4MjgsIDB4MTUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NEMsIDB4MDEsIDB4MzAsIDB4MDUsIDB4QzAsCisweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDRDLCAweDAxLCAweDMwLCAweDA0LCAweEMwLCAweDE3LCAweDEwLCAweDU3LCAweDAwLAorMHg2NCwgMHgwMSwgMHgzMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1QiwgMHgwMCwgMHg1QywgMHgwMSwgMHhGMCwgMHgwNSwKKzB4QzAsIDB4MUUsIDB4MDAsIDB4NzMsIDB4MDIsIDB4Q0MsIDB4MDksIDB4MzAsIDB4MDcsIDB4QzAsIDB4NUMsIDB4MDAsIDB4NTMsCisweDAxLCAweDRDLCAweDAxLCAweEYyLCAweDA1LCAweEMxLCAweDVGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgwMCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgyMywgMHhDMCwgMHgwRiwKKzB4MDAsIDB4M0YsIDB4MjAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4REMsCisweDAwLCAweEYwLCAweDIzLCAweEMwLCAweDBELCAweDIwLCAweDM3LCAweDAyLCAweERDLCAweDAwLCAweEYwLCAweDAzLCAweEUyLAorMHg0MSwgMHgwMCwgMHgwRiwgMHgxMCwgMHg3QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHgwMiwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDA1LCAweDdDLCAweDE2LCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwQSwgMHhGMCwgMHgyOSwgMHhDMCwgMHgyNCwgMHgwMSwgMHg5RiwgMHgwMSwgMHg1QywgMHgwMiwKKzB4RjAsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDIwLCAweDkzLCAweDIwLCAweDBDLCAweDAyLCAweDM0LCAweDA4LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDA1LCAweDRDLAorMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDIsIDB4OTAsIDB4NDksIDB4NDgsIDB4MjcsIDB4MDAsIDB4OUQsCisweDAwLCAweDc0LCAweDBBLCAweEQ5LCAweDM5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAyLCAweDc0LCAweDBBLCAweEQwLAorMHhEOSwgMHg0MCwgMHhBNywgMHg4MCwgMHg5RiwgMHgxMiwgMHgzNCwgMHgwMiwgMHhCMCwgMHgwOSwgMHg0MCwgMHhBNywgMHgyMCwKKzB4OTEsIDB4ODIsIDB4NDQsIDB4MEEsIDB4MzAsIDB4MjksIDB4NDAsIDB4QTQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NDQsIDB4MDYsCisweEQwLCAweDA4LCAweEMwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLAorMHgyNCwgMHgwMCwgMHhCRCwgMHgwMCwgMHhGNCwgMHgwMiwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCNSwgMHgwMCwKKzB4RjQsIDB4MDIsIDB4RDAsIDB4MEIsIDB4NjAsIDB4MkMsIDB4MDAsIDB4QkQsIDB4MDgsIDB4RjYsIDB4MDYsIDB4RDAsIDB4MEIsCisweDQwLCAweDZGLCAweDEwLCAweEJELCAweDAwLCAweEY0LCAweDAyLCAweDUwLCAweDFCLCAweDQyLCAweDI3LCAweDA0LCAweDkxLAorMHgxMCwgMHg2NCwgMHg0MiwgMHgwMCwgMHgwOSwgMHg0MSwgMHgyNCwgMHg4NCwgMHg5RCwgMHgwMCwgMHg2NCwgMHgyMiwgMHhEMCwKKzB4ODksIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjgsCisweDAwLCAweEFELCAweDAxLCAweEI0LCAweDAyLCAweDkxLCAweDBBLCAweDQwLCAweDJCLCAweDAwLCAweEFELCAweDAwLCAweEI0LAorMHgwNiwgMHhEMCwgMHgwQiwgMHg0MiwgMHgyOSwgMHgwMCwgMHhBRCwgMHgwMSwgMHhCNCwgMHgwNiwgMHhEMCwgMHgwQSwgMHg2MCwKKzB4NkIsIDB4MDAsIDB4QTUsIDB4MDAsIDB4RjQsIDB4MDIsIDB4RDIsIDB4MEEsIDB4NjAsIDB4MjMsIDB4NDEsIDB4ODEsIDB4MDQsCisweDI0LCAweDkyLCAweDkwLCAweDQ4LCAweDQwLCAweDIwLCAweDAxLCAweDhELCAweDQwLCAweDI0LCAweDAyLCAweEQwLCAweDA5LAorMHg0MCwgMHg0MiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgwNiwgMHgwMCwKKzB4MEYsIDB4MEEsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MTIsIDB4MTcsIDB4MEEsIDB4N0MsIDB4MjgsCisweEQwLCAweEE1LCAweEQwLCAweDg0LCAweDAyLCAweDFELCAweDBBLCAweDVDLCAweDI4LCAweEYwLCAweEEwLCAweEMwLCAweDg3LAorMHgwMiwgMHgxRCwgMHgwMCwgMHg3QywgMHgwMCwgMHg2MCwgMHgwMywgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwgMHg2NSwKKzB4MDAsIDB4MzIsIDB4MDEsIDB4RDAsIDB4MDQsIDB4MDAsIDB4NUYsIDB4MEEsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDc0LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEIwLCAweDA4LCAweEMwLCAweDJGLCAweDAyLCAweEJGLCAweDA4LCAweERDLCAweDIyLAorMHg3MCwgMHg4QiwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgwMCwgMHhERCwgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHg3NywKKzB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MjcsIDB4MDAsIDB4QjMsIDB4MDAsCisweENDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDI0LCAweDAwLCAweEJGLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDBBLAorMHhDMCwgMHgyRCwgMHgwMiwgMHhCNywgMHgwMCwgMHhGRSwgMHgwMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyRiwgMHgwMCwgMHg5RiwKKzB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkQsIDB4MTIsIDB4MzAsCisweDQ5LCAweEMxLCAweDI0LCAweDAxLCAweEIzLCAweDAwLCAweENDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDczLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgxMSwgMHgwNCwgMHg0NSwKKzB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDUsIDB4NTAsIDB4NzAsIDB4NDEsIDB4NDAsCisweDA0LCAweDAxLCAweDExLCAweDEwLCAweDc0LCAweDQwLCAweEQxLCAweDAxLCAweDQwLCAweDA3LCAweDA1LCAweDFELCAweDAwLAorMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgwOCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwKKzB4NDAsIDB4MEMsIDB4MTIsIDB4MDEsIDB4MTAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NjMsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLCAweDI1LCAweDQwLCAweDgxLCAweDE0LCAweDA0LCAweDAyLAorMHhEMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg5RCwgMHgwMCwgMHgwNCwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0MSwgMHgyMSwKKzB4MjEsIDB4ODUsIDB4MDQsIDB4MzAsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4QUQsIDB4MDAsIDB4QjQsCisweDAzLCAweEQwLCAweDBCLCAweDQwLCAweDZBLCAweDAyLCAweEFELCAweDAxLCAweDg0LCAweDI2LCAweDEwLCAweDFBLCAweDQwLAorMHg2OCwgMHgwMCwgMHg5OSwgMHgwNCwgMHgwNSwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDI0LCAweDgwLCAweDlELCAweDQwLCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLAorMHg5MSwgMHg4MCwgMHg3NCwgMHgwMiwgMHhEMiwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHhGNCwgMHg4MiwKKzB4RDAsIDB4MEIsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QkQsIDB4MDAsIDB4QzQsIDB4MDIsIDB4MTAsIDB4MEIsIDB4NDAsIDB4MkMsCisweDEwLCAweDk5LCAweDAxLCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyNSwgMHgwMCwgMHg5MywgMHgwMCwgMHg0OCwgMHgwMiwgMHhGMCwgMHgwOCwKKzB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MjAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OTUsCisweDAwLCAweDc0LCAweDAyLCAweEUwLCAweDA5LCAweDgwLCAweDI3LCAweDAwLCAweDlGLCAweDQwLCAweDdFLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHhBNiwgMHgwMiwgMHg5RiwgMHgwMywgMHg0QywgMHgyQSwgMHgzNCwgMHhCOSwgMHhDMCwgMHhBNCwgMHgwMCwKKzB4OEIsIDB4QTAsIDB4NEMsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE2LCAweDA4LCAweDI0LCAweDAwLCAweDlGLCAweDgwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEQwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAzLCAweDVDLCAweDA2LCAweEYwLCAweDE5LCAweEQwLCAweDI3LCAweDQwLCAweDk3LAorMHgyMCwgMHg3QywgMHgxMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0UsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsCisweDAwLCAweDEzLCAweDEwLCAweDdDLCAweDAwLCAweEYyLCAweDgxLCAweEQxLCAweDA2LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHg2MCwgMHhGMiwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4M0MsIDB4MDAsIDB4RjAsIDB4MDAsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MUYsIDB4MDAsCisweDRELCAweDA0LCAweEYwLCAweDAxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgyMCwgMHgxMCwgMHgwMCwgMHg3RCwgMHgwMCwgMHg3NiwgMHg0NSwgMHhEMCwgMHgwNywgMHhDMCwgMHgxNSwgMHgyMCwKKzB4NjUsIDB4MDAsIDB4RjQsIDB4MDksIDB4RDAsIDB4MjcsIDB4RDAsIDB4MTYsIDB4MDAsIDB4NzcsIDB4MDAsIDB4RjQsIDB4MDksCisweEQyLCAweDA3LCAweDQwLCAweDFGLCAweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweDE0LCAweDA0LCAweEMwLCAweDE1LAorMHgwMCwgMHg1MSwgMHgwMSwgMHg3NCwgMHgwMSwgMHhEMCwgMHgxNSwgMHg0MCwgMHg1NywgMHgxMCwgMHg3RCwgMHg0MSwgMHhDNCwKKzB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEEwLCAweDMyLCAweDAwLCAweERELCAweDQwLCAweDM0LCAweDA3LCAweEQwLCAweDA0LCAweDQwLCAweDMxLCAweDgwLCAweDQ5LAorMHgwMCwgMHgzNCwgMHg0QiwgMHhEMCwgMHgzRCwgMHg0MCwgMHgzNiwgMHgzMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwNywgMHhEOCwKKzB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MDAsCisweEMxLCAweDIxLCAweDM0LCAweDAzLCAweEQwLCAweDFDLCAweDQwLCAweDczLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDA3LAorMHhEMCwgMHgwQywgMHg0MCwgMHg0MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwKKzB4MzgsIDB4MDAsIDB4NkQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsIDB4NzksIDB4MDIsIDB4NkQsIDB4MTAsCisweEI2LCAweDAzLCAweEQwLCAweDBFLCAweDU4LCAweDJBLCAweDAwLCAweDZELCAweDAwLCAweEI0LCAweDAxLCAweEQ5LCAweDAyLAorMHg0MCwgMHgxQiwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCNCwgMHgwNywgMHgxMCwgMHgwNiwgMHg0MCwgMHg3MSwgMHg0MCwgMHhFMSwKKzB4MTAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDEsIDB4M0IsIDB4MDQsIDB4RUQsIDB4MDIsIDB4ODQsIDB4NDMsIDB4RDAsCisweDBBLCAweDQwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDc4LAorMHgwMCwgMHhBRiwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxNiwgMHhDMCwgMHg3RCwgMHgwMCwgMHg2QiwgMHgwMSwgMHhCQywKKzB4MDYsIDB4RjAsIDB4MTYsIDB4RDAsIDB4N0EsIDB4MDAsIDB4QUYsIDB4MDEsIDB4QjQsIDB4MDYsIDB4RjAsIDB4MUUsIDB4QzAsCisweDZCLCAweDAwLCAweDZGLCAweDAxLCAweEI4LCAweDA3LCAweDMwLCAweDFBLCAweEMwLCAweDU5LCAweDAwLCAweDYzLCAweDAxLAorMHhCQywgMHgwNSwgMHhGMCwgMHgxNiwgMHhDMCwgMHg1QiwgMHgwMCwgMHhFRiwgMHgwMSwgMHg4QywgMHgwNywgMHhGMCwgMHgxRSwKKzB4QzAsIDB4NTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsCisweDFGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDAxLCAweEMwLCAweDc1LCAweDIwLCAweDU3LCAweDAwLCAweDdDLCAweDAwLAorMHhGMCwgMHgwNSwgMHhEMCwgMHgyNywgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzIsIDB4MTUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsCisweDAwLCAweEY4LCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLAorMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHg3RCwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4QkMsIDB4MDcsIDB4RjgsIDB4ODcsIDB4QzAsIDB4N0MsIDB4MDAsIDB4QjMsIDB4ODksIDB4Q0MsIDB4MDUsIDB4QTAsCisweDFCLCAweEMwLCAweDdGLCAweDIwLCAweEYzLCAweDAxLCAweERDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDdDLCAweDAwLAorMHhGMywgMHgwMSwgMHhDQywgMHgwNiwgMHhGMiwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhCRiwgMHgwMSwgMHhDQywgMHgwNywKKzB4RjAsIDB4MUIsIDB4QzAsIDB4NkMsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDUsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MUIsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDM5LCAweDAwLCAweDZELCAweDAwLAorMHg5QywgMHgwMywgMHgxOCwgMHgwQSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhBMSwgMHgwMCwgMHhDNCwgMHgwMywgMHgxMSwgMHgwQSwKKzB4NDAsIDB4MkIsIDB4MDAsIDB4NzEsIDB4MDAsIDB4QzQsIDB4MDIsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MUMsIDB4MDAsIDB4QTEsCisweDAwLCAweDg0LCAweDBBLCAweEQwLCAweDA2LCAweDQwLCAweDNCLCAweDAwLCAweEFELCAweDAwLCAweDg0LCAweDAyLCAweEQwLAorMHgwQSwgMHg0MCwgMHgyOCwgMHgxMiwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMCwgMHhCMCwgMHgwRSwgMHg0MCwgMHg1NywgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4QUQsIDB4MDAsIDB4QjQsCisweDAzLCAweDUwLCAweDg3LCAweDQwLCAweDNDLCAweDAwLCAweEIxLCAweDAwLCAweDg0LCAweDIwLCAweDEwLCAweDAyLCAweDQwLAorMHhCRiwgMHgwMCwgMHhBOSwgMHgwMCwgMHg4NCwgMHgwMSwgMHgxMCwgMHgwRiwgMHg0MCwgMHgyQSwgMHgwMCwgMHg3OSwgMHgwMiwKKzB4ODQsIDB4MDIsIDB4RDAsIDB4MEEsIDB4NDAsIDB4MUIsIDB4MDAsIDB4MEQsIDB4MDAsIDB4ODQsIDB4MDEsIDB4RDAsIDB4ODAsCisweDQwLCAweDAwLCAweDAwLCAweEExLCAweDAwLCAweEY0LCAweDQwLCAweDEwLCAweDBFLCAweDQwLCAweDAzLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHhGMSwgMHgwMCwgMHgxRCwgMHgwMiwgMHgzNCwgMHg0MywKKzB4MTAsIDB4MDAsIDB4NDEsIDB4QjAsIDB4MDQsIDB4ODEsIDB4MDQsIDB4MDQsIDB4MzQsIDB4OTEsIDB4MzgsIDB4NDAsIDB4MjMsCisweDAwLCAweDA5LCAweDBELCAweDA0LCAweDM0LCAweDEwLCAweDAwLCAweDQxLCAweDQyLCAweDQzLCAweDA5LCAweDIwLCAweDA0LAorMHgwNiwgMHhEMCwgMHgxMCwgMHg0MCwgMHgxMywgMHgwMCwgMHgwRCwgMHgxMiwgMHgwNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwKKzB4ODAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MzQsIDB4ODQsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweEI1LCAweDAwLCAweERGLCAweDA1LCAweDdDLCAweDA3LCAweDUwLAorMHgyNCwgMHhDMCwgMHgzOCwgMHgwMCwgMHg5MywgMHgwMiwgMHg0NCwgMHgwQiwgMHhCMCwgMHgwNSwgMHhDMCwgMHg3MywgMHgwMCwKKzB4RDksIDB4MDIsIDB4NDQsIDB4MEIsIDB4MTAsIDB4MkMsIDB4QzAsIDB4QjYsIDB4MDAsIDB4Q0IsIDB4MDAsIDB4MEMsIDB4NjksCisweEYxLCAweDJELCAweDQxLCAweDY3LCAweDAwLCAweERGLCAweDAzLCAweDRELCAweDA3LCAweEYwLCAweEJELCAweEQwLCAweDc0LAorMHg0MCwgMHhEMywgMHgwMCwgMHgzQywgMHgwNSwgMHgzMCwgMHgwRCwgMHhDMCwgMHg1NywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MzcsIDB4MDYsIDB4OUYsIDB4MTAsIDB4NUMsIDB4MjMsIDB4NzAsIDB4MUQsCisweEMwLCAweDc3LCAweDAwLCAweDlGLCAweDAzLCAweDdDLCAweDAyLCAweDcxLCAweDg1LCAweEMwLCAweDM3LCAweDIyLCAweDk3LAorMHgwMiwgMHg3QywgMHgwMSwgMHhGMCwgMHgzRCwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5NywgMHgwOCwgMHg3QywgMHgwMSwgMHhGMCwKKzB4MDUsIDB4QzEsIDB4NjMsIDB4MDAsIDB4REYsIDB4ODEsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MUQsIDB4QzIsIDB4NzcsIDB4MTQsCisweERGLCAweDAzLCAweDdDLCAweDAxLCAweEYwLCAweDhELCAweEMyLCAweDE3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhDQywgMHgwRiwgMHhGMCwgMHgwNywgMHhDMCwKKzB4M0UsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MTcsIDB4MzIsIDB4MDMsIDB4QzUsIDB4MkMsIDB4MDAsIDB4NzMsIDB4MDAsCisweENFLCAweDAyLCAweDMwLCAweDEzLCAweEMwLCAweDFDLCAweDAxLCAweDcyLCAweDAwLCAweENDLCAweDAxLCAweDMwLCAweDBCLAorMHhDMCwgMHgwRiwgMHgwMiwgMHg3MywgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwNywgMHhDMCwgMHgxRiwgMHgwMCwgMHhGRiwKKzB4MDAsIDB4Q0MsIDB4MDEsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDMsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgxLCAweDIwLCAweDM2LCAweDAwLCAweDFELCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDA1LCAweDQwLCAweDM0LAorMHgyMCwgMHg5MSwgMHgwOSwgMHg3NCwgMHgwNCwgMHgxMCwgMHgxMCwgMHg0MSwgMHgyNCwgMHgwMCwgMHgxMSwgMHgwMiwgMHg0NCwKKzB4MDAsIDB4MTAsIDB4MTEsIDB4NDAsIDB4QzQsIDB4MDEsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDksIDB4MTAsIDB4MDEsIDB4QzAsCisweDA1LCAweDAwLCAweDUxLCAweDIwLCAweDc0LCAweDAwLCAweEQwLCAweDA1LCAweDQwLCAweDE3LCAweDEwLCAweERELCAweDAwLAorMHg0NCwgMHgwNSwgMHgxMCwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4QTAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDQsIDB4NDQsIDB4MDIsIDB4RDgsIDB4ODUsIDB4NDAsIDB4MzYsIDB4MDAsCisweDkxLCAweDAyLCAweDE0LCAweDAxLCAweDE4LCAweDE1LCAweDQwLCAweDM0LCAweDgxLCAweEM5LCAweDA2LCAweDA0LCAweDAzLAorMHgxMCwgMHg2RCwgMHg0MCwgMHgzMiwgMHg4MCwgMHhENSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwRCwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4Q0QsIDB4ODYsIDB4NDQsCisweDA0LCAweDEwLCAweDFELCAweDQwLCAweDA3LCAweDA4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwMCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNSwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzNiwgMHgwMCwgMHg4MSwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4MTQsIDB4MEQsIDB4NTAsIDB4MzQsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDUsIDB4MDIsIDB4MTQsCisweDBELCAweDYwLCAweDIyLCAweDQwLCAweDk1LCAweEEwLCAweDA0LCAweDAwLCAweDEwLCAweDA0LCAweDQwLCAweDIzLCAweDQwLAorMHg4MSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwNCwKKzB4MTQsIDB4MEMsIDB4NDAsIDB4NDMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweDM2LCAweDAwLCAweDVGLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDM2LCAweDAwLCAweDkzLCAweDAwLAorMHg3QywgMHgwMSwgMHgzMCwgMHgwMSwgMHhDMCwgMHgyNCwgMHgxMCwgMHg1QiwgMHg4MCwgMHg0NiwgMHg4MSwgMHgzMCwgMHgwMSwKKzB4QzAsIDB4MTYsIDB4MDAsIDB4NTcsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDksIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsCisweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweERGLCAweDAwLCAweDRELCAweDAwLCAweDMwLAorMHgwRCwgMHhDMCwgMHgwMywgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgzRiwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDYsIDB4QzAsIDB4MzksIDB4MDAsIDB4QUYsIDB4ODAsIDB4RkMsCisweDAwLCAweEYwLCAweDBCLCAweEMwLCAweDJCLCAweDgwLCAweDNGLCAweDAwLCAweEZFLCAweDAwLCAweEYwLCAweDAyLCAweEMwLAorMHgwRCwgMHgwMCwgMHgyQiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDAsIDB4RjAsIDB4MEYsCisweEMwLCAweDE3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDJGLCAweDAwLAorMHhGRiwgMHgwMSwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHg1RCwgMHgwMCwgMHg2RiwgMHgwMSwgMHhDQywgMHgwNiwKKzB4RjEsIDB4MEYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4MzMsIDB4MDMsIDB4RUMsIDB4MjQsIDB4QjIsIDB4Q0YsIDB4QzgsIDB4M0MsCisweDIxLCAweEZCLCAweDg0LCAweERDLCAweDg3LCAweEIwLCAweDBGLCAweDQwLCAweDVDLCAweDAyLCAweDNGLCAweDA4LCAweEFDLAorMHg4NSwgMHhCMCwgMHgwRiwgMHhDMiwgMHg1RiwgMHgwMCwgMHgzNywgMHg4MCwgMHhDRCwgMHgwNiwgMHg5MCwgMHgwQiwgMHg4MCwKKzB4MEUsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjcsIDB4MDAsIDB4REQsCisweDAxLCAweDc0LCAweDAwLCAweEQwLCAweDNELCAweDQyLCAweDYwLCAweDAwLCAweDFELCAweDAxLCAweDQ0LCAweDA2LCAweEQyLAorMHgxRCwgMHg0MCwgMHg3QywgMHgwMCwgMHgxMSwgMHgyMCwgMHg0NCwgMHgxMCwgMHgxMCwgMHhBRiwgMHg0MCwgMHg3QywgMHgwMiwKKzB4RjEsIDB4MDIsIDB4NDQsIDB4MDcsIDB4MTQsIDB4NkQsIDB4NDAsIDB4MDQsIDB4MDEsIDB4OUQsIDB4MDQsIDB4NTQsIDB4ODUsCisweDEwLCAweDlGLCAweDAwLCAweDQ3LCAweDQwLCAweDkzLCAweDhCLCAweDQ0LCAweDUyLCAweDEwLCAweDA5LCAweDQwLCAweDBELAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgwMywgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4MDAsIDB4RDAsIDB4MkMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4NEQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MEMsCisweDYwLCAweDMwLCAweDIwLCAweDEwLCAweDA0LCAweDY0LCAweDEwLCAweDkwLCAweDRDLCAweDQ4LCAweDMwLCAweDEwLCAweEM5LAorMHgwOCwgMHgzNCwgMHgwMywgMHgwMiwgMHgyQywgMHg0NSwgMHgxMiwgMHgwMSwgMHgwRCwgMHgwMCwgMHgyNCwgMHgwMSwgMHhEMCwKKzB4MEMsIDB4NDIsIDB4MzMsIDB4MTAsIDB4MDksIDB4MjAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NEQsIDB4ODAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDY0LCAweDAwLCAweERELCAweDAwLCAweDc0LAorMHgwNCwgMHhDMCwgMHgwRCwgMHg2MCwgMHgyNCwgMHgwMCwgMHgxRCwgMHgwNCwgMHg0NSwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MzQsIDB4MDgsIDB4MTEsIDB4MDAsIDB4NjQsIDB4NDQsIDB4MTAsIDB4MEQsIDB4NDgsIDB4MzQsIDB4ODAsIDB4RDEsIDB4MDAsCisweDY0LCAweDAzLCAweDUwLCAweDBELCAweDQwLCAweDA2LCAweDA0LCAweDhELCAweDExLCAweDc0LCAweDg1LCAweDU0LCAweDBELAorMHg0MiwgMHgwNywgMHgwMCwgMHg1NSwgMHgwOCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgxMSwgMHg0MSwgMHgwRCwgMHgyMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4NjYsIDB4MDAsIDB4REYsIDB4MDAsIDB4NzgsIDB4NEUsCisweEUwLCAweDBELCAweEMwLCAweDI1LCAweDEwLCAweDRGLCAweDA3LCAweDRDLCAweDIyLCAweEYwLCAweDlELCAweDQwLCAweDM0LAorMHg0MCwgMHgxMywgMHgwRCwgMHgyQywgMHgwQywgMHhCMiwgMHgwRCwgMHhEMCwgMHgzNCwgMHgxMCwgMHhEQiwgMHgwMCwgMHg3NCwKKzB4MDMsIDB4MzAsIDB4MEQsIDB4NTAsIDB4MDYsIDB4MjgsIDB4OUUsIDB4MDEsIDB4NkMsIDB4MTQsIDB4RjAsIDB4MEQsIDB4QzAsCisweDEzLCAweDAwLCAweDFCLCAweDAzLCAweDRDLCAweDA2LCAweDMwLCAweDE5LCAweEMwLCAweDIxLCAweDgwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHgyRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwKKzB4MEUsIDB4QzAsIDB4MkYsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MEUsIDB4QzAsIDB4M0YsIDB4MDAsCisweEZGLCAweDAwLCAweERDLCAweDAyLCAweDcwLCAweDBFLCAweEMwLCAweDNGLCAweDAwLCAweEVGLCAweDAwLCAweERDLCAweDAzLAorMHhCMCwgMHgwRiwgMHhDMiwgMHgwRCwgMHgxMCwgMHhCRCwgMHgwMCwgMHhEQywgMHgwMSwgMHhCNCwgMHgwRiwgMHhDMCwgMHg4RiwKKzB4NTAsIDB4NkIsIDB4MDAsIDB4RkMsIDB4MjYsIDB4RjQsIDB4MEEsIDB4QzAsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDg1LCAweDAyLCAweERGLCAweDAwLCAweDdDLCAweDQwLCAweDMwLCAweDBELAorMHhDMCwgMHgzNywgMHgwMCwgMHg1NywgMHgwMiwgMHg0QywgMHg0MiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMiwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MzQsIDB4MEEsIDB4REYsIDB4MDAsIDB4NUMsIDB4MjMsIDB4NzAsCisweDBELCAweEMxLCAweDE1LCAweDAwLCAweDEzLCAweDAyLCAweDRDLCAweDAwLCAweDUwLCAweDBELCAweEM5LCAweDM2LCAweDA4LAorMHgxNywgMHgxMiwgMHg0RCwgMHgwMywgMHhGMCwgMHgwOSwgMHg4MiwgMHgyQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4REQsIDB4NjAsIDB4NzAsIDB4MTgsIDB4MTAsIDB4MEYsIDB4NDAsCisweDI3LCAweDAwLCAweDUxLCAweDA1LCAweDQ0LCAweDRFLCAweEQwLCAweDBELCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLAorMHg3NCwgMHgwMiwgMHhEMCwgMHhBRiwgMHg0MCwgMHgzOCwgMHgwMiwgMHhGRCwgMHgwMCwgMHgzNCwgMHgyQiwgMHhCMCwgMHgyRSwKKzB4NDAsIDB4MDQsIDB4NDAsIDB4MTEsIDB4MDgsIDB4MkMsIDB4MDMsIDB4MTAsIDB4MkYsIDB4NDgsIDB4MDQsIDB4MDIsIDB4NTEsCisweDAwLCAweDQ0LCAweDEzLCAweEQwLCAweDA5LCAweDQwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHgyMCwgMHhDMCwgMHgwNCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwRSwgMHg1MCwgMHgwQywgMHg0MCwgMHgxMywKKzB4MDAsIDB4MDUsIDB4MDYsIDB4MDUsIDB4MEUsIDB4RDAsIDB4MDgsIDB4NDAsIDB4RjMsIDB4MDQsIDB4MEQsIDB4MDAsIDB4MzQsCisweDAwLCAweEQwLCAweDBDLCAweDYwLCAweDcwLCAweDAwLCAweENELCAweDA3LCAweDM0LCAweDAzLCAweDEwLCAweDBDLCAweDQ4LAorMHgxMSwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHgzQywgMHg0MCwgMHg5MCwgMHgwMCwgMHg0OSwgMHgwMiwKKzB4NDQsIDB4MTMsIDB4RDEsIDB4NTAsIDB4NDQsIDB4MEYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDAwLCAweDU4LCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDAxLCAweDUwLCAweDFFLCAweDQwLCAweDZCLCAweDAwLAorMHgzMSwgMHgwMSwgMHg4NCwgMHgwNiwgMHhEMCwgMHgxQSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywKKzB4RDAsIDB4MUMsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MzEsIDB4QjQsIDB4MDcsIDB4OTAsIDB4MUUsIDB4NDAsIDB4NDgsCisweDgwLCAweEU1LCAweDAxLCAweEU0LCAweDA0LCAweDEwLCAweDlDLCAweDQwLCAweDRDLCAweDAxLCAweEM5LCAweDAxLCAweDg0LAorMHgxNiwgMHhEOCwgMHg5QSwgMHg0MCwgMHgzRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MUEsIDB4OTAsIDB4MDIsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MjMsIDB4NzAsIDB4MEMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4MDcsCisweDA0LCAweDBDLCAweDAyLCAweEYwLCAweDRDLCAweEMwLCAweDMzLCAweDAxLCAweENELCAweDAwLCAweDNDLCAweDAyLCAweEYwLAorMHg4QywgMHg0MCwgMHgzMCwgMHgwMiwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMywgMHgzMCwgMHhERCwgMHhDMCwgMHgxNSwgMHgyQSwKKzB4NTcsIDB4MjQsIDB4MEMsIDB4NjEsIDB4NzAsIDB4OEMsIDB4QzksIDB4MjIsIDB4OTAsIDB4ODksIDB4MTIsIDB4MEMsIDB4MDMsCisweEYwLCAweDAwLCAweEMxLCAweDRCLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LAorMHgzRCwgMHgwOCwgMHhGRiwgMHgwMCwgMHhGQywgMHgxMywgMHhCMCwgMHgwRiwgMHhDMSwgMHgyRiwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MjIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4NzcsIDB4MDAsIDB4REYsIDB4MDgsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MkQsCisweDUyLCAweDNGLCAweDIwLCAweERGLCAweDAwLCAweDNDLCAweDAzLCAweEY0LCAweDBELCAweEMwLCAweDA3LCAweDIwLCAweERCLAorMHgwMCwgMHg3QywgMHg4MSwgMHhGMCwgMHg4RiwgMHhDMiwgMHgwQiwgMHg4MSwgMHhGNywgMHgwMCwgMHhGMCwgMHgxMiwgMHhGMCwKKzB4MDMsIDB4QzIsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg2QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4QjcsIDB4MDAsIDB4REYsIDB4MDgsIDB4M0MsIDB4MDMsIDB4MzEsIDB4MUQsIDB4QzgsIDB4MDcsIDB4MTAsIDB4OUYsIDB4MDAsCisweDRGLCAweDAwLCAweEYwLCAweDRELCAweEM4LCAweDEwLCAweDA4LCAweDlCLCAweDAwLCAweDRELCAweDgzLCAweDMwLCAweDAxLAorMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgzOSwgMHgwMCwKKzB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDMsIDB4NEUsIDB4NDAsIDB4MkIsIDB4MDAsIDB4MkQsIDB4MDAsIDB4OUMsIDB4MDIsCisweEQwLCAweDBBLCAweDYwLCAweEJCLCAweDEwLCAweEZDLCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDRFLCAweDQwLCAweEJCLAorMHgwNCwgMHhFRCwgMHgwQywgMHhCNCwgMHgwMywgMHg0MCwgMHgyRSwgMHg0MCwgMHgwQiwgMHgwMCwgMHhFRCwgMHgyMCwgMHg4NCwKKzB4MDAsIDB4RDAsIDB4QUUsIDB4NDAsIDB4MDgsIDB4MDAsIDB4RTcsIDB4MDAsIDB4QzQsIDB4ODMsIDB4MTIsIDB4MEYsIDB4NDAsCisweDRDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAyLCAweDU5LCAweDE4LCAweEU1LAorMHgwMSwgMHhCNCwgMHgwNywgMHg1MCwgMHg1RSwgMHg0MCwgMHg3QiwgMHgwMCwgMHgyRCwgMHgwMSwgMHhCNCwgMHgwNiwgMHg1MCwKKzB4MUUsIDB4NDAsIDB4N0IsIDB4MDEsIDB4RUQsIDB4MTEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4REUsIDB4NDAsIDB4N0IsIDB4MDEsCisweEVELCAweDgxLCAweEI0LCAweDA3LCAweDAwLCAweDRFLCAweDQwLCAweDVCLCAweDIwLCAweEVELCAweDAxLCAweDk0LCAweDA0LAorMHhEMSwgMHg1QywgMHg1MCwgMHg2OSwgMHgwMCwgMHg4NSwgMHgwMSwgMHg5NCwgMHgwRiwgMHgxMCwgMHgxNiwgMHg0MCwgMHgxMiwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4QjMsIDB4ODAsIDB4Q0QsIDB4NDAsCisweDM0LCAweDI3LCAweEQwLCAweDBDLCAweDQwLCAweDIzLCAweDExLCAweDhELCAweDAzLCAweDE0LCAweDA3LCAweEQwLCAweDBDLAorMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMSwgMHgwNCwgMHg0NywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4ODMsIDB4MDAsIDB4MEMsIDB4NDQsIDB4QTMsIDB4MDIsIDB4REQsIDB4MDIsIDB4MDQsIDB4MDUsIDB4RDAsCisweDBDLCAweDQ0LCAweDAxLCAweDAwLCAweEM1LCAweDA3LCAweDE0LCAweDg3LCAweDEwLCAweDZDLCAweDQwLCAweDVBLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyMCwgMHgxRCwgMHgwNCwgMHg1RiwgMHgwMCwgMHhGQywKKzB4MDksIDB4RjAsIDB4MDUsIDB4QzAsIDB4REYsIDB4MDEsIDB4N0YsIDB4NDQsIDB4NzQsIDB4NDUsIDB4RjgsIDB4MDUsIDB4QzAsCisweDE3LCAweDAwLCAweDdGLCAweDAyLCAweENELCAweDk1LCAweEYwLCAweDA1LCAweDQwLCAweDE3LCAweDAwLCAweDVGLCAweDgwLAorMHgzQywgMHgwMSwgMHgzMSwgMHgwNSwgMHhDMCwgMHg1RiwgMHgwMCwgMHg3RiwgMHgwMiwgMHg4QywgMHhCRCwgMHhGMSwgMHgwNSwKKzB4QzAsIDB4MUQsIDB4MDAsIDB4NjcsIDB4MDcsIDB4NUMsIDB4MDEsIDB4MzYsIDB4MjcsIDB4QzQsIDB4NUUsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDA1LCAweDA0LCAweDFGLCAweDAwLCAweDdDLCAweDgwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwOCwgMHgxRiwgMHgxMCwgMHg3MCwgMHgwMCwgMHhGOSwgMHgwMSwgMHhDNCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDQsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4NDIsIDB4N0MsCisweDA4LCAweEY0LCAweDAxLCAweEMwLCAweDA3LCAweDAxLCAweDFELCAweDgyLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEEwLAorMHg4NiwgMHgwMCwgMHgxNiwgMHgwMCwgMHg2OCwgMHgwOCwgMHhGMiwgMHgwMSwgMHhEMCwgMHg0OSwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NjUsIDB4MDEsIDB4OTcsIDB4MDAsIDB4N0MsIDB4NEUsIDB4RjgsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDgyLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM4LCAweDI3LCAweDg5LAorMHg5MywgMHg4MCwgMHg3QywgMHgwMiwgMHgzMCwgMHgxOSwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgxNiwKKzB4MzAsIDB4MDgsIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MzksIDB4NEMsIDB4MDIsIDB4MzQsIDB4MjksIDB4RDgsIDB4MjQsCisweDQwLCAweDkxLCAweDA5LCAweDRDLCAweDBFLCAweDM0LCAweDA4LCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHg2NiwgMHgwMSwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwRSwgMHhEMCwgMHgwOSwKKzB4NjAsIDB4MjMsIDB4MjAsIDB4OTEsIDB4MDMsIDB4NzYsIDB4MDYsIDB4RDAsIDB4MDksIDB4NDAsIDB4RUIsIDB4ODEsIDB4OEIsCisweDAwLCAweDZDLCAweDAyLCAweDUwLCAweDE5LCAweEQwLCAweDY0LCAweDEyLCAweDlELCAweDAyLCAweDc0LCAweDAyLCAweEIwLAorMHgwOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHg0MywgMHg0NSwgMHgyRSwgMHgxMCwgMHgzOCwgMHg0OCwgMHhBMCwgMHgxMSwKKzB4OTEsIDB4MDEsIDB4NDQsIDB4MDIsIDB4MTIsIDB4MjksIDB4NDAsIDB4MDUsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDE4LCAweDlELCAweDAwLCAweDU0LCAweDBBLCAweEQwLCAweDA5LCAweDQwLAorMHgyNywgMHgwMCwgMHg5MSwgMHgxMCwgMHg3NCwgMHgwRSwgMHhEMSwgMHgwOSwgMHg0OCwgMHgyNSwgMHg4MCwgMHg5MSwgMHgwMCwKKzB4MTQsIDB4MDIsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NTQsIDB4MEEsIDB4OTAsIDB4MDksCisweDQ0LCAweDI0LCAweDAwLCAweDlELCAweDAyLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDk1LAorMHgwMiwgMHgyNSwgMHgwMiwgMHgxMCwgMHg0OSwgMHg2MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjIsIDB4MjAsIDB4MDUsIDB4OEQsIDB4MDAsIDB4MzQsIDB4NTIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4QTcsCisweDA4LCAweDgxLCAweDAwLCAweDM2LCAweDAyLCAweERBLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDkxLCAweDA4LCAweDA0LAorMHgyMiwgMHgxMCwgMHg4QywgMHg2MCwgMHgyMiwgMHg4MCwgMHg4RCwgMHgyNCwgMHgzNCwgMHgwMiwgMHg5NCwgMHg1OCwgMHg0MCwKKzB4MjIsIDB4MDAsIDB4OEQsIDB4MEMsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjQsIDB4MDAsIDB4ODUsIDB4MDAsCisweDI0LCAweDIyLCAweDEwLCAweDQ4LCAweDQwLCAweDQxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxRCwgMHhCOCwgMHgwNiwgMHgxMSwgMHgxRiwgMHgwMCwgMHg1QywgMHgxMCwgMHhEMCwgMHg0MSwgMHg0MSwgMHgwNywgMHg0MCwKKzB4MTMsIDB4MDAsIDB4NzYsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NDcsIDB4NDAsIDB4MTEsIDB4MDIsIDB4NTQsIDB4MDgsCisweDM0LCAweDYxLCAweEMxLCAweDE0LCAweDE1LCAweDFGLCAweDhBLCAweDdDLCAweDAwLCAweEI0LCAweEExLCAweEM0LCAweDg0LAorMHgwMiwgMHgwRiwgMHgwMiwgMHg0QywgMHgwMCwgMHgzMCwgMHg0MSwgMHhDMSwgMHgwNCwgMHgwMCwgMHgxNSwgMHgxNCwgMHg2QywKKzB4MDksIDB4MzAsIDB4QTUsIDB4QzAsIDB4NzQsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsCisweEI4LCAweDJGLCAweDA1LCAweDlGLCAweDAwLCAweEZDLCAweDUyLCAweEYwLCAweDA5LCAweEMwLCAweDZGLCAweDIwLCAweEJGLAorMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgyQiwgMHhDMCwgMHhBNywgMHgwMCwgMHhCRiwgMHgwNCwgMHhGQywgMHgxMiwgMHhGMCwKKzB4NDksIDB4NDIsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDgsIDB4N0MsIDB4MDIsIDB4RjQsIDB4ODksIDB4QzAsIDB4MkQsIDB4MDAsCisweEJGLCAweDBDLCAweEZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDNGLCAweDAwLCAweEJCLCAweDAwLCAweERDLCAweDEyLAorMHhGMCwgMHg4QiwgMHhDMCwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBOCwKKzB4MkYsIDB4MDEsIDB4OUYsIDB4MDAsIDB4RkMsIDB4MzIsIDB4QjAsIDB4MDksIDB4QzAsIDB4QTcsIDB4MjAsIDB4QkYsIDB4MDAsCisweENELCAweDAyLCAweEYwLCAweDQ5LCAweEM1LCAweDZGLCAweDAwLCAweDlCLCAweDgwLCAweDZFLCAweDAyLCAweDc5LCAweDhCLAorMHhDMCwgMHgyRiwgMHgwMSwgMHhCQiwgMHgxNCwgMHhBQywgMHg4MiwgMHgzMCwgMHgwQiwgMHhDQywgMHgyMSwgMHgwMCwgMHhCRiwKKzB4MjgsIDB4Q0MsIDB4ODIsIDB4MzEsIDB4NEIsIDB4QzEsIDB4MkUsIDB4NjgsIDB4QTMsIDB4MDAsIDB4QkMsIDB4MDIsIDB4RjAsCisweDBGLCAweEMwLCAweDc3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LAorMHgwNSwgMHgxRCwgMHgwMCwgMHg3MCwgMHgzMSwgMHgxNCwgMHgyMSwgMHg0MCwgMHg0NywgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwKKzB4MDAsIDB4RDAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4NUEsIDB4MzAsIDB4NDQsIDB4QzAsIDB4RDgsIDB4ODEsIDB4NDAsCisweDA3LCAweDAwLCAweDExLCAweDA0LCAweDUxLCAweDAwLCAweDEwLCAweDAxLCAweEMwLCAweDA1LCAweDA0LCAweDVELCAweDA4LAorMHg0QywgMHgwMCwgMHgxMSwgMHgwMSwgMHg0MCwgMHgwNywgMHgzMCwgMHgxMSwgMHgwMCwgMHg2NCwgMHg4MCwgMHhEMCwgMHgwMSwKKzB4NDAsIDB4NjMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjEsIDB4MDMsCisweDhELCAweDAwLCAweDM0LCAweDEyLCAweDEwLCAweDg4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDgwLCAweDA0LCAweDgyLAorMHhEMiwgMHgwOCwgMHgwQSwgMHhBMywgMHgwMCwgMHg4OSwgMHgwNCwgMHgwNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMywKKzB4MDIsIDB4ODksIDB4MTQsIDB4MTQsIDB4MDIsIDB4MTQsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDUsCisweDAyLCAweDE4LCAweDA4LCAweDQ4LCAweDI3LCAweDIwLCAweDg1LCAweDAwLCAweDM2LCAweDAyLCAweEQwLCAweDA4LCAweDQwLAorMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyMCwgMHhBNSwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NzQsIDB4MTIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MTAsIDB4NDQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQ4LCAweDI2LCAweDIwLCAweDg5LCAweDAwLCAweDQ0LCAweDAyLCAweEQ4LCAweDA5LCAweDQwLCAweDI3LCAweDAwLAorMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg2OCwgMHgyNSwgMHgxMCwgMHg5RCwgMHgwNCwgMHg0NiwgMHgwMiwKKzB4OTksIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NjQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NDEsIDB4NjMsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDY1LCAweDAwLCAweDlELCAweDAwLAorMHg3QywgMHgwNiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwNiwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUIsIDB4MDIsIDB4NjUsIDB4NDIsIDB4NzIsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDAsIDB4OUIsCisweDAwLCAweDU0LCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI1LCAweDMzLCAweDlGLCAweDIxLCAweDRDLCAweDQ2LCAweDMwLAorMHgwOSwgMHhDMCwgMHgyMiwgMHgwMCwgMHg5NSwgMHhBNywgMHg3RSwgMHg4MiwgMHhFMCwgMHgzOSwgMHhDMCwgMHgxNywgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MjUsIDB4MjUsIDB4OUYsIDB4ODAsIDB4M0MsCisweDA2LCAweDcwLCAweDA5LCAweEUyLCAweDI3LCAweDAwLCAweDlGLCAweDEwLCAweDdDLCAweDI2LCAweEYwLCAweDU5LCAweEMwLAorMHgyNywgMHgwQywgMHg5NywgMHgwMiwgMHg1QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg1MCwKKzB4NUMsIDB4MDIsIDB4MzIsIDB4MDksIDB4RTgsIDB4MjcsIDB4MTAsIDB4OEYsIDB4MDEsIDB4NUMsIDB4MEEsIDB4NzQsIDB4MDksCisweEMxLCAweEE2LCAweDAwLCAweDlCLCAweDA1LCAweDdFLCAweDAyLCAweEYwLCAweDU5LCAweEMwLCAweDVCLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg2QywgMHg0MCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4ODAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDMsCisweDAwLCAweDE3LCAweDAyLCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEMyLCAweDAwLCAweDAxLCAweDFGLCAweDAwLCAweDRDLAorMHgwMCwgMHhCMCwgMHg4MSwgMHhDMSwgMHgwNywgMHg0MCwgMHgxNywgMHgyMiwgMHg1QywgMHgxMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MTMsIDB4MDIsIDB4NEMsIDB4NDAsIDB4MzAsIDB4MDEsIDB4ODIsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDlDLCAweDAwLCAweDVELCAweDQwLCAweEY0LCAweDA1LCAweEQ4LAorMHgwNSwgMHhDMCwgMHgxNSwgMHgyMCwgMHg2QywgMHgwMCwgMHhGNCwgMHg0OSwgMHgxMCwgMHgwNSwgMHg0MCwgMHg5RiwgMHg4MCwKKzB4NUIsIDB4MDAsIDB4NzYsIDB4MDEsIDB4RDAsIDB4ODcsIDB4NDAsIDB4OUMsIDB4MDAsIDB4N0QsIDB4MDIsIDB4ODQsIDB4MDEsCisweEY0LCAweDI3LCAweEMwLCAweDE1LCAweDAwLCAweDcxLCAweDAwLCAweDg0LCAweDg5LCAweDEwLCAweDc3LCAweDQwLCAweERGLAorMHgwMCwgMHg3MCwgMHgwNywgMHhDNCwgMHgwMSwgMHgxNiwgMHg5NywgMHg0MCwgMHg0MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4RjIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MjMsIDB4RDAsIDB4MEMsCisweDQ4LCAweDMxLCAweDAwLCAweDg4LCAweDAyLCAweDM2LCAweDFGLCAweDkwLCAweDBDLCAweDQwLCAweDEzLCAweDEwLCAweEM1LAorMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgzQywgMHg2MCwgMHhCMCwgMHgwMCwgMHhENSwgMHgwQiwgMHgwMCwgMHgwMywgMHg5MSwKKzB4M0MsIDB4NDQsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MDEsIDB4MzQsIDB4MEEsIDB4NTAsIDB4MTQsIDB4NDAsIDB4RjIsIDB4MDEsCisweEMxLCAweDA3LCAweDI0LCAweDBCLCAweDEyLCAweDhDLCAweDQ0LCAweDQzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwNCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwKKzB4MzksIDB4MDEsIDB4NkQsIDB4MTAsIDB4QjQsIDB4MDQsIDB4MTgsIDB4MEUsIDB4NDAsIDB4MUIsIDB4MDAsIDB4RTEsIDB4NDQsCisweEI0LCAweDAzLCAweEQwLCAweDM2LCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDAwLCAweDg1LCAweDAzLCAweEQ0LCAweDA2LAorMHg2MCwgMHg3RCwgMHgwMiwgMHhFMSwgMHgwMiwgMHhFNiwgMHgwMiwgMHgxMCwgMHgwNiwgMHg0MCwgMHhCQiwgMHgyMCwgMHhFMSwKKzB4NjEsIDB4RTUsIDB4OEYsIDB4NTAsIDB4MDYsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweDE4LCAweDc4LCAweDAwLCAweEVGLCAweDAxLCAweEJDLCAweDA1LCAweEQwLCAweDFFLCAweEMwLCAweEY5LAorMHgwMCwgMHgyQiwgMHgwMSwgMHhCQywgMHgwNCwgMHhCMSwgMHgxRSwgMHhDMCwgMHg3MywgMHgwMCwgMHhFNSwgMHgzNSwgMHhCNCwKKzB4MkYsIDB4QjAsIDB4MUYsIDB4RDAsIDB4NzgsIDB4MDAsIDB4Q0YsIDB4NDEsIDB4OEMsIDB4MDUsIDB4QjQsIDB4MTYsIDB4QzAsCisweDc5LCAweDAzLCAweEYzLCAweDAxLCAweEJELCAweDA0LCAweDcwLCAweDE2LCAweEMwLCAweDdCLCAweDQwLCAweDIzLCAweDAxLAorMHhBQywgMHgwNywgMHgzMSwgMHgxRSwgMHhDNCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsCisweDFFLCAweDAwLCAweDNDLCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDEwLCAweERGLCAweDRBLCAweDdDLCAweDFCLAorMHhGMCwgMHgwNSwgMHhDOCwgMHgwNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGNiwgMHgwNSwgMHhDNiwgMHhCNSwKKzB4MDEsIDB4NUUsIDB4MDAsIDB4MUMsIDB4MDAsIDB4NTAsIDB4MDUsIDB4QzAsIDB4MzMsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NUMsCisweDAzLCAweEIwLCAweDA5LCAweEM4LCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorMHgyMCwgMHg1RCwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgyNywgMHhGOCwgMHg4RiwgMHhDMCwgMHg3QiwgMHgwMCwgMHgzQiwKKzB4MDEsIDB4RkMsIDB4MDQsIDB4NzAsIDB4MUYsIDB4QzAsIDB4NUYsIDB4MDAsIDB4RkYsIDB4MDksIDB4RkUsIDB4MjcsIDB4QjAsCisweDFCLCAweEMwLCAweDc2LCAweDAwLCAweEZGLCAweDAxLCAweDhDLCAweDA3LCAweDMwLCAweDkzLCAweEM0LCAweDdGLCAweDAwLAorMHhCMywgMHgwMSwgMHhDQywgMHgxNiwgMHhGOCwgMHg5NywgMHhDMCwgMHg3QiwgMHgwMCwgMHhGQiwgMHg0MSwgMHhGOCwgMHgwNCwKKzB4MzQsIDB4OUIsIDB4QzAsIDB4MTgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsCisweDE5LCAweDIyLCAweEUxLCAweDQwLCAweEI0LCAweDgxLCAweDc4LCAweDBFLCAweDQyLCAweDNCLCAweDAwLCAweDYxLCAweDAwLAorMHhCNCwgMHgwMCwgMHhEMCwgMHgwRSwgMHg0NCwgMHgxQiwgMHgyMSwgMHhFNiwgMHgwOCwgMHhGNCwgMHgyMywgMHgxNCwgMHgwQSwKKzB4NDAsIDB4NzgsIDB4MDAsIDB4QkQsIDB4MDAsIDB4ODQsIDB4MjMsIDB4RjAsIDB4MDAsIDB4NDAsIDB4M0IsIDB4MDEsIDB4QTEsCisweDI0LCAweEFDLCAweDEyLCAweEIwLCAweDA2LCAweEMwLCAweDNCLCAweDA2LCAweEUxLCAweDA4LCAweEI0LCAweDIwLCAweEIwLAorMHgwMywgMHg0OCwgMHg1NSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwKKzB4MDQsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsIDB4NTgsIDB4OEUsIDB4NDAsIDB4N0YsIDB4MDQsIDB4MjEsIDB4MDAsIDB4QjQsCisweDAwLCAweDUwLCAweDBFLCAweDQwLCAweDE5LCAweDA4LCAweEVDLCAweDQyLCAweEI0LCAweDAzLCAweDEwLCAweDAyLCAweDQwLAorMHgzOCwgMHgwMCwgMHg2RCwgMHgwMCwgMHhBNCwgMHgwMSwgMHgxMCwgMHgwMiwgMHg2MCwgMHgzOSwgMHgyNCwgMHhFMSwgMHg4MCwKKzB4QjQsIDB4NzIsIDB4MUMsIDB4MDYsIDB4NDYsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4NDAsIDB4NTAsIDB4MEEsCisweDQyLCAweDIwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDI1LCAweDAwLAorMHhDMSwgMHgyMCwgMHgzNCwgMHgwOCwgMHg1OCwgMHgwQywgMHg0MCwgMHhGMywgMHgwMCwgMHg0OSwgMHgxMSwgMHgzNCwgMHgyMCwKKzB4RDgsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MDEsIDB4NDAsIDB4MDIsCisweDgwLCAweDBELCAweDAwLCAweDI0LCAweDAxLCAweDkwLCAweDAwLCAweDQwLCAweEYzLCAweDAwLCAweDQxLCAweDAxLCAweDM0LAorMHgwNiwgMHg5MCwgMHgwNCwgMHg0MCwgMHhGMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNiwgMHgwNCwgMHgxOCwgMHgzOSwgMHg0MCwKKzB4MDksIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4QTUsIDB4NDAsIDB4RDMsCisweDAwLCAweDdDLCAweDZFLCAweDcwLCAweDBELCAweDQwLCAweEY3LCAweDQwLCAweDBCLCAweDA3LCAweDdDLCAweDAwLCAweDcwLAorMHgwRCwgMHhDMiwgMHgxNSwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGNCwgMHg0RiwgMHgzMCwgMHgwRCwgMHhDMCwgMHgyNCwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4MjQsIDB4MDIsIDB4MzAsIDB4MDEsIDB4QzAsIDB4RjksIDB4MDAsIDB4NTMsIDB4QTMsIDB4M0MsIDB4MDIsCisweDMwLCAweDA0LCAweDQwLCAweDc3LCAweDA4LCAweERGLCAweDI1LCAweDdDLCAweDA3LCAweDUwLCAweDYxLCAweEMwLCAweDU0LAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgyNywgMHgxMSwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MEEsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4NTcsIDB4MDIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MEQsCisweEMwLCAweDE3LCAweDAwLCAweEQ3LCAweDA4LCAweDdDLCAweDQzLCAweDcwLCAweDA1LCAweEQ4LCAweDI1LCAweDEwLCAweDlGLAorMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgyMSwgMHhDMCwgMHgzNywgMHgwNCwgMHhERiwgMHgwOCwgMHg2OCwgMHgwQSwgMHhGOSwKKzB4MjUsIDB4ODAsIDB4MzcsIDB4MDEsIDB4MEUsIDB4MTAsIDB4N0MsIDB4MEIsIDB4RjIsIDB4MjEsIDB4QzAsIDB4QjcsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDA3LCAweDAwLCAweEYzLCAweDAwLCAweEZDLAorMHgwMCwgMHhGMCwgMHgwRSwgMHhDMCwgMHgzRSwgMHgwNCwgMHgzMywgMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwKKzB4N0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4NzAsIDB4MkIsIDB4QzAsIDB4MkIsIDB4MDAsIDB4M0IsIDB4MjAsCisweEZDLCAweDAwLCAweEIwLCAweDAzLCAweEMwLCAweDNGLCAweDAwLCAweDIzLCAweDExLCAweENDLCAweDQyLCAweDc2LCAweDg3LAorMHhDMCwgMHgzQywgMHgwMCwgMHgzRiwgMHgwMiwgMHhDNCwgMHgwNywgMHhGMCwgMHgwMywgMHhDMSwgMHgwNCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4NjYsIDB4MDgsIDB4RDEsIDB4NDAsIDB4NzYsIDB4MDQsCisweEQwLCAweDBELCAweDQ4LCAweDM1LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDE0LCAweEQwLCAweDBELCAweEMwLCAweDI3LAorMHg4MCwgMHhERCwgMHg4MCwgMHg3QywgMHgwMywgMHhEMCwgMHgxMSwgMHg0MCwgMHhDNCwgMHg0NCwgMHg5MSwgMHgyMSwgMHg3QywKKzB4MDcsIDB4QjAsIDB4NTEsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MTEsIDB4MEIsIDB4NDQsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDgsCisweEYwLCAweDAwLCAweDExLCAweDAzLCAweDQ0LCAweDAwLCAweEQyLCAweDMxLCAweDQwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMiwgMHg0NiwgMHgwNCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwRSwgMHhEMCwKKzB4MEQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MTEsIDB4MzAsIDB4NjQsIDB4MDQsIDB4RDAsIDB4MEQsIDB4NDgsIDB4MTcsIDB4MDEsCisweERELCAweDAwLCAweDc0LCAweDAzLCAweEQyLCAweDBELCAweDQwLCAweDQ0LCAweDAwLCAweDkxLCAweDgzLCAweDc2LCAweDQ2LAorMHg5MCwgMHgxMSwgMHg0MCwgMHgzNywgMHgwMCwgMHgxMSwgMHgwMiwgMHg0NiwgMHgwRSwgMHg1MCwgMHgwNSwgMHg0MCwgMHg2NCwKKzB4NDQsIDB4RDEsIDB4MjAsIDB4NTQsIDB4MTgsIDB4RDIsIDB4MzksIDB4NDAsIDB4MDQsIDB4MDgsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDBDLAorMHg0MCwgMHgzMSwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhEMCwgMHgwQywgMHg0MCwgMHgxMSwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NzAsIDB4MDAsIDB4MDEsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4OTksCisweDAwLCAweDQwLCAweDM3LCAweDAwLCAweDgxLCAweDIwLCAweDA0LCAweDAyLCAweDEwLCAweDA0LCAweDQwLCAweDI0LCAweDAwLAorMHgwMSwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDYsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RjAsIDB4MEQsIDB4NDAsCisweDNDLCAweDgwLCAweDEzLCAweDAwLCAweDZDLCAweDAwLCAweEYwLCAweDBELCAweDYwLCAweDE3LCAweDAwLCAweEZELCAweDAwLAorMHhFQywgMHgwMywgMHhGOCwgMHgwMCwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHhCMCwgMHg4MSwKKzB4QzAsIDB4M0IsIDB4NDAsIDB4MDMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MjQsIDB4MTAsIDB4RDMsCisweDAwLCAweDFDLCAweDAwLCAweEYwLCAweDA5LCAweEM0LCAweDA0LCAweDY0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHhCOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMiwgMHgzRCwKKzB4NDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsCisweDAzLCAweEYwLCAweDAzLCAweDAwLCAweDBGLCAweDJBLCAweDNGLCAweDAwLCAweERDLCAweDAzLCAweDcwLCAweDAzLCAweEMwLAorMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwgMHgwNywgMHg0MCwgMHgwRiwgMHg0MCwgMHgzNywgMHgwMCwKKzB4RUMsIDB4MDAsIDB4RjAsIDB4MEIsIDB4QzgsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEE4LCAweDdGLCAweDAwLCAweDNFLCAweDAwLCAweEZDLCAweDA0LCAweDMwLCAweDFGLCAweEMwLCAweDJDLCAweDAwLAorMHhCRiwgMHgyNCwgMHhDQywgMHgwMywgMHhGMCwgMHg0MywgMHhDMSwgMHgzRCwgMHgyMSwgMHgzRiwgMHhBMCwgMHhEQywgMHgxMywKKzB4MzAsIDB4OUUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4OTgsIDB4MTcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4NEMsCisweDAwLCAweEZGLCAweDAzLCAweEZDLCAweDA3LCAweEYwLCAweDRGLCAweEMwLCAweDdFLCAweDAyLCAweEZGLCAweDAwLCAweENDLAorMHgwMywgMHgzMCwgMHg4MywgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MTAsIDB4MzYsIDB4MDUsIDB4MUQsIDB4MDIsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MEQsIDB4NTAsIDB4MjQsIDB4MDgsIDB4OUQsCisweDA4LCAweEM0LCAweDJCLCAweDEwLCAweDM5LCAweDQ0LCAweDdDLCAweDAyLCAweDlELCAweDAxLCAweEM0LCAweDIzLCAweDExLAorMHgxRCwgMHg0MCwgMHhGRiwgMHgwMSwgMHg1RCwgMHgwMSwgMHhDNCwgMHgwRiwgMHhEMCwgMHgwRCwgMHg0MCwgMHg0NCwgMHgwMCwKKzB4REQsIDB4MDAsIDB4NUMsIDB4MDcsIDB4RDAsIDB4QkYsIDB4NDAsIDB4MzQsIDB4MDEsIDB4RjcsIDB4MDMsIDB4QzQsIDB4MkYsCisweDEwLCAweDA5LCAweDQwLCAweDBELCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLAorMHgzMywgMHgwMCwgMHgwRCwgMHgwMywgMHg1NCwgMHgwMCwgMHg5MCwgMHgwQywgMHg0MCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwMCwKKzB4MDQsIDB4ODMsIDB4MTAsIDB4MDEsIDB4NjAsIDB4MzAsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MjQsIDB4MDMsIDB4MTAsIDB4NEMsCisweDQwLCAweDMyLCAweDA2LCAweDg5LCAweDAwLCAweDA1LCAweDIzLCAweEQyLCAweDBDLCAweDQ4LCAweDAwLCAweDIwLCAweENELAorMHgwNCwgMHgzNiwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMSwgMHhDRCwgMHgwMiwgMHgwNSwgMHgwMywgMHgxNCwKKzB4NDAsIDB4NDQsIDB4NEMsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MzUsCisweDAwLCAweDFELCAweDAxLCAweDQ0LCAweDQ2LCAweDk0LCAweDBELCAweDQwLCAweEU1LCAweDAwLCAweDlELCAweDIwLCAweDQ0LAorMHgwMywgMHgxMCwgMHgxOSwgMHg0MCwgMHgzNCwgMHgwMCwgMHgxRCwgMHgwMSwgMHg2NCwgMHgwMywgMHgxMSwgMHgwRCwgMHg0MCwKKzB4MzcsIDB4MjAsIDB4REMsIDB4MTAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4OEMsIDB4NDAsIDB4NDQsIDB4MDAsIDB4REMsIDB4MDAsCisweDU0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweEQ1LCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDQ5LAorMHg0MCwgMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNywgMHgwMCwKKzB4MUYsIDB4MDEsIDB4N0MsIDB4MEMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4NjUsIDB4MDAsIDB4OUYsIDB4ODAsIDB4MEMsIDB4MDMsCisweEI0LCAweDM1LCAweEMwLCAweDM1LCAweDAwLCAweDlGLCAweDAxLCAweDZDLCAweDAzLCAweDM0LCAweDBELCAweEMyLCAweDM2LAorMHgyMCwgMHhEQiwgMHg4MCwgMHg1QywgMHgwMywgMHhFMCwgMHgxRCwgMHg4MCwgMHg0NCwgMHgwNCwgMHg5RiwgMHgwOCwgMHg3QywKKzB4MDcsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MUQsIDB4QzAsCisweDAwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweDJGLAorMHgwMCwgMHhGQywgMHgwMCwgMHg3MCwgMHgwRiwgMHhDMCwgMHgyRSwgMHgwMCwgMHg5RiwgMHgwMCwgMHhGRCwgMHgwMywgMHhCMCwKKzB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QUYsIDB4MDAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MkYsIDB4QzYsIDB4M0YsIDB4MDAsCisweDY5LCAweDA4LCAweEZDLCAweDAzLCAweEYwLCAweDFGLCAweEQwLCAweDBGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDI3LAorMHhGMSwgMHgwRSwgMHhDNCwgMHgzRiwgMHgwMSwgMHhERiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwgMHgxNywgMHhDOCwgMHgxRiwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDQsIDB4MUYsIDB4MjEsCisweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweEE3LCAweDAwLCAweEQzLCAweDAwLCAweDRDLCAweEMzLCAweDMwLCAweDI1LAorMHhDMCwgMHgzNCwgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgxMywgMHhGMCwgMHgwRCwgMHhEMCwgMHgzNCwgMHgwMCwgMHg5RiwKKzB4MjEsIDB4NkMsIDB4NDMsIDB4MzAsIDB4MEQsIDB4RDEsIDB4NDQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEMyLCAweDM2LCAweDAwLCAweENGLCAweDA0LCAweDRDLCAweDEzLCAweEYwLCAweDBELCAweEMwLCAweDhCLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHhCNCwgMHgwMCwgMHgxRCwgMHgwMCwgMHgzNCwKKzB4MTIsIDB4RDAsIDB4QkQsIDB4NDEsIDB4MjcsIDB4MDQsIDB4RDEsIDB4MDAsIDB4RDQsIDB4MTMsIDB4MTAsIDB4MEMsIDB4NDUsCisweDNDLCAweDAwLCAweDFELCAweDAwLCAweEU0LCAweDAzLCAweEQyLCAweDBELCAweDQwLCAweDNDLCAweDAwLCAweERELCAweDAwLAorMHhDNCwgMHgwNywgMHgxMCwgMHgwRCwgMHg0MCwgMHgwNCwgMHgwMCwgMHhEMSwgMHgyMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgxRiwKKzB4NDAsIDB4MzQsIDB4MDAsIDB4RkQsIDB4ODIsIDB4QzQsIDB4MEIsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NkYsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDMwLCAweDAwLCAweDBELCAweDIwLCAweDM0LCAweDAwLAorMHhEMCwgMHgxRCwgMHg0MCwgMHgzMywgMHgwMCwgMHg5NCwgMHg2MCwgMHgyNCwgMHgwMywgMHgxMCwgMHgwNCwgMHg0MCwgMHgzMiwKKzB4MDAsIDB4MEQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsCisweDIzLCAweDUwLCAweDJDLCAweDQwLCAweDAzLCAweDg0LCAweEM1LCAweDEyLCAweDM0LCAweDAzLCAweEQwLCAweDlDLCAweDQwLAorMHgzMCwgMHgwMCwgMHhDOSwgMHg0OSwgMHgyNCwgMHgyNywgMHhEMCwgMHgwNSwgMHg0MCwgMHgxRiwgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzgsIDB4MDAsIDB4MkQsIDB4MjEsIDB4QjQsIDB4MDcsIDB4RDAsCisweDlFLCAweDQwLCAweDZCLCAweDAyLCAweEE0LCAweDAxLCAweEI0LCAweDA3LCAweDEwLCAweDFGLCAweDQwLCAweDdBLCAweDAwLAorMHhFRCwgMHg4MSwgMHhBNCwgMHgwNywgMHhEMCwgMHgxRiwgMHg2MCwgMHg3QSwgMHgwMCwgMHhDOSwgMHgwMywgMHg4NCwgMHgwNywKKzB4NTAsIDB4MUUsIDB4NDAsIDB4NEIsIDB4NTAsIDB4RTUsIDB4ODksIDB4QjQsIDB4MTcsIDB4RDEsIDB4MUMsIDB4NDAsIDB4NzgsCisweDAwLCAweEVELCAweDgxLCAweEE0LCAweDA3LCAweEQwLCAweDlFLCAweDQwLCAweDM3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHgzMCwgMHgwMCwgMHgwRiwgMHgwMCwgMHgzQywgMHgwMCwgMHhGMCwgMHg4QywKKzB4QzAsIDB4MzcsIDB4MDgsIDB4ODcsIDB4MDAsIDB4NkMsIDB4MTMsIDB4MzAsIDB4MDQsIDB4QzAsIDB4MzIsIDB4MDAsIDB4NEYsCisweDAyLCAweDNDLCAweDIzLCAweEYwLCAweDBDLCAweEMwLCAweDMyLCAweDAwLCAweENGLCAweDAwLCAweDJDLCAweDAzLCAweDcwLAorMHgwRCwgMHhDMCwgMHgwMywgMHgwMCwgMHhDNywgMHgwOCwgMHgzQywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMCwKKzB4Q0IsIDB4MDAsIDB4MkMsIDB4MDMsIDB4RjAsIDB4ODQsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDNELCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDIzLCAweEYwLCAweDhGLCAweEU4LAorMHgzRiwgMHg0MCwgMHhCQiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwRSwgMHhDMCwgMHgzRCwgMHgwMiwgMHhGRiwgMHgwMCwKKzB4RUMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MjQsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MjMsIDB4QjIsIDB4MEYsCisweEMwLCAweDA4LCAweDAyLCAweEZCLCAweDI4LCAweEZDLCAweDkzLCAweEYwLCAweDBGLCAweEQwLCAweDNELCAweDAwLCAweEZGLAorMHgwMCwgMHhERCwgMHgwMywgMHhGMiwgMHg4RiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QjAsIDB4MzcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjEsIDB4MUQsIDB4QzAsIDB4MzQsCisweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAzLCAweDcwLCAweDA1LCAweEM0LCAweDc3LCAweDAxLCAweDlCLCAweDAwLCAweDdDLAorMHg0QiwgMHhFMCwgMHgxRCwgMHhDMiwgMHgzNSwgMHgwNSwgMHhDRCwgMHgwMSwgMHg0QywgMHgxQiwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4REYsIDB4MDEsIDB4MUMsIDB4MDcsIDB4NzAsIDB4Q0QsIDB4QzAsIDB4MzcsIDB4MjAsIDB4REYsIDB4MEEsCisweDNDLCAweDRGLCAweDMwLCAweDA5LCAweEMwLCAweDU0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHg4MCwgMHgzOSwgMHgwMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMywgMHg3MCwgMHgwRSwgMHg0MCwgMHgxQywgMHgwMCwKKzB4QTEsIDB4MDAsIDB4QUMsIDB4NTMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4QkIsIDB4MDQsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsCisweEQwLCAweDBFLCAweDQwLCAweDNDLCAweDAxLCAweEUxLCAweDAwLCAweDg0LCAweDUzLCAweEQwLCAweDBFLCAweDQwLCAweDBCLAorMHgwMCwgMHhGRCwgMHgwMCwgMHg4QywgMHgwMywgMHgxMCwgMHg4RSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFNywgMHgxMCwgMHhCNCwKKzB4MTMsIDB4QjAsIDB4MDAsIDB4QzAsIDB4NEUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDAwLCAweDc5LCAweDAwLCAweDZELCAweDAxLCAweDk0LCAweDA2LCAweEQwLCAweDFFLCAweDQwLCAweDc4LCAweDBDLCAweEMxLAorMHgwMSwgMHgwNCwgMHgyNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3MywgMHgwMSwgMHhFMSwgMHgwMSwgMHhCNCwgMHgyNywgMHg1MCwKKzB4M0UsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTUsIDB4MDEsIDB4ODUsIDB4MjcsIDB4RDAsIDB4MUUsIDB4NDMsIDB4NEIsIDB4MDAsCisweEVELCAweDAxLCAweDg0LCAweDA3LCAweDEwLCAweDVFLCAweDQwLCAweDZCLCAweDAwLCAweEU1LCAweDI1LCAweEI2LCAweDM3LAorMHgxMCwgMHgxQSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwKKzB4MzMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MzQsIDB4NEIsIDB4NTAsIDB4MEMsIDB4NjAsIDB4NzAsIDB4MDEsIDB4QzEsIDB4MDEsCisweDI0LCAweDAzLCAweDEwLCAweDBDLCAweDQxLCAweDMzLCAweDgwLCAweEMxLCAweDEwLCAweDM0LCAweDAzLCAweEQwLCAweDE4LAorMHg0MCwgMHgzMiwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwOSwgMHg0MCwgMHhGMywgMHgwMCwgMHhDRCwKKzB4MDEsIDB4MDQsIDB4MDYsIDB4MTQsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MTAsIDB4QzUsIDB4ODAsIDB4MzYsIDB4MDMsIDB4OTAsCisweDQxLCAweDQwLCAweDRBLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDE1LAorMHgwMCwgMHg3RiwgMHgwNSwgMHhGQywgMHgwMSwgMHhGMCwgMHgwNSwgMHhEMCwgMHgxQywgMHgwMCwgMHg1MywgMHg0MSwgMHg0QywKKzB4MDEsIDB4NzAsIDB4MjcsIDB4QzAsIDB4MTcsIDB4NDAsIDB4NzMsIDB4QzIsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsCisweDE3LCAweDEwLCAweDdGLCAweDAwLCAweDRDLCAweDAxLCAweEYwLCAweDE1LCAweEMwLCAweDVGLCAweDAxLCAweDVGLCAweDAxLAorMHg1RCwgMHgxNSwgMHg3MCwgMHgwNCwgMHhDMiwgMHg1NywgMHgwMSwgMHg0NywgMHgwMCwgMHg3QywgMHgwMSwgMHgzMCwgMHgxNywKKzB4QzEsIDB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4ODUsIDB4MDAsCisweDFGLCAweDAxLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDQwLCAweDFGLCAweDA4LCAweDNDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHg4MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNSwKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0UsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDEsIDB4MUYsIDB4MDgsIDB4NUMsCisweDAwLCAweEYyLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEM4LAorMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwKKzB4MDUsIDB4NEMsIDB4MDIsIDB4MzYsIDB4MDksIDB4QzAsIDB4QTMsIDB4NDAsIDB4ODMsIDB4MDUsIDB4NEMsIDB4MDYsIDB4QjAsCisweDA4LCAweEMwLCAweDI2LCAweDAwLCAweDlGLCAweDAwLCAweDc0LCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLAorMHg5QiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNCwgMHgyMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyNiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUMsIDB4MDAsIDB4NDgsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzgsIDB4NDAsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDY0LCAweDAwLCAweDlELCAweDAwLAorMHg0NCwgMHgwMiwgMHgxMCwgMHgxOSwgMHg0MCwgMHgyNywgMHg0MCwgMHg5MSwgMHgwMSwgMHg3QywgMHgyQSwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4RTAsIDB4MjcsIDB4MDAsIDB4OTEsCisweDEwLCAweDc0LCAweDFFLCAweEQxLCAweDk5LCAweDQwLCAweEE0LCAweDAwLCAweDlELCAweDQyLCAweDVDLCAweDAyLCAweEQwLAorMHgwOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5NSwgMHg4MCwgMHg1NCwgMHgxQSwgMHhEMCwgMHgwOSwgMHhDMCwgMHgwNiwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDIsIDB4OEQsIDB4MDAsIDB4MDQsCisweDAyLCAweDE4LCAweDQ5LCAweDQwLCAweDI3LCAweDQwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDkwLCAweDFELCAweDQwLAorMHgyNiwgMHgwMCwgMHg5NSwgMHgwMCwgMHg3NCwgMHgyMiwgMHhEMCwgMHgwOSwgMHg2MCwgMHgyMywgMHgwMCwgMHg5OSwgMHgwMSwKKzB4NzQsIDB4MTIsIDB4RDAsIDB4MjksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDQsIDB4NzQsIDB4MDIsIDB4NTAsIDB4ODksCisweDQwLCAweDI0LCAweDAwLCAweDk1LCAweDE4LCAweDU0LCAweDIyLCAweEQwLCAweDA5LCAweDQwLCAweDYwLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwNCwgMHgwNCwgMHgwMiwKKzB4MTAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDEsIDB4ODEsIDB4MDQsIDB4MTQsIDB4MTMsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MjAsCisweDAxLCAweDhELCAweDA0LCAweDM2LCAweDE2LCAweEQxLCAweDA4LCAweDQyLCAweDIxLCAweDAxLCAweDgxLCAweDA0LCAweDM0LAorMHgxMiwgMHhEOCwgMHgwOCwgMHg0MCwgMHg2MSwgMHg4MCwgMHg4RCwgMHgwMSwgMHgxNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwKKzB4MjIsIDB4MzAsIDB4ODUsIDB4NDQsIDB4MTYsIDB4MTIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4NDIsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEEwLCAweDk2LCAweDAyLCAweDFGLCAweDBBLCAweDRELCAweDI4LCAweDMwLAorMHhBMCwgMHhDMCwgMHg4NywgMHgwMiwgMHgxMywgMHgwQSwgMHg0NCwgMHgyOCwgMHhCMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwKKzB4MTcsIDB4MTAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4QTAsIDB4NDAsIDB4ODcsIDB4MDIsIDB4MUIsIDB4MDAsIDB4NzQsIDB4MDAsCisweEYwLCAweEExLCAweEM4LCAweDA1LCAweDAwLCAweDFGLCAweDBBLCAweDc0LCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDg0LAorMHgwMCwgMHgxNywgMHgwMCwgMHg1QywgMHgwMCwgMHhGMiwgMHgyMSwgMHhDMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4ODgsIDB4MjcsIDB4MDAsIDB4RkYsIDB4MDgsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDJGLCAweDAyLCAweEJGLCAweDQ4LCAweDdDLCAweDIyLCAweEYwLCAweDhCLCAweEM0LCAweDI3LCAweDAyLCAweEJGLAorMHgwMCwgMHg3QywgMHg2MiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNywgMHgwMiwgMHhCRiwgMHgwOCwgMHg3QywgMHgyMiwgMHhGMCwKKzB4MEIsIDB4RDgsIDB4MkUsIDB4MDAsIDB4QkYsIDB4NDAsIDB4REMsIDB4MDIsIDB4RjAsIDB4ODksIDB4QzIsIDB4MkYsIDB4MDQsCisweDkzLCAweDA4LCAweDdDLCAweDIyLCAweEYyLCAweDhCLCAweEMxLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyRCwgMHgwMCwgMHhCRiwgMHgwQywgMHhDQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwKKzB4MkMsIDB4MDIsIDB4QjMsIDB4MDAsIDB4RkMsIDB4NTIsIDB4MzQsIDB4NEYsIDB4ODAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsCisweEY4LCAweDIyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDI1LCAweEJGLCAweDA0LCAweEQ0LCAweDAyLCAweDcwLCAweDBBLAorMHhDMCwgMHgyQywgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHg0QiwgMHhDMCwgMHgyNywgMHgwMCwgMHhBMywKKzB4ODAsIDB4QkMsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4NjEsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDAxLCAweDBELCAweDJDLCAweDQ0LCAweDQxLCAweDEwLCAweDAxLCAweDQxLCAweDE0LAorMHgwMiwgMHgwMSwgMHgxNCwgMHg3NCwgMHgxMCwgMHgxMywgMHg4MSwgMHg0MCwgMHg4NywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwKKzB4MjAsIDB4RDAsIDB4NDEsIDB4NDEsIDB4MDYsIDB4MDEsIDB4MUQsIDB4MDgsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MDEsIDB4NDEsCisweDA0LCAweDAwLCAweDFELCAweDE0LCAweDc0LCAweDAwLCAweEMwLCAweDgxLCAweDQ0LCAweDQ3LCAweDA1LCAweDFCLCAweDAwLAorMHg3NCwgMHgyMCwgMHhEMCwgMHgxMSwgMHg0MCwgMHg3MSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MjAsIDB4MjEsIDB4MDUsIDB4OEQsIDB4MDQsIDB4MDUsIDB4MTIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4NDAsCisweDgxLCAweDA0LCAweDM0LCAweDUyLCAweDEwLCAweDA4LCAweDQ4LCAweDIyLCAweDAyLCAweDg4LCAweDA4LCAweDM0LCAweDAyLAorMHhEMCwgMHg0OCwgMHg0MCwgMHgyMSwgMHgwNSwgMHg4RCwgMHgwMSwgMHgxNCwgMHgyMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg2MSwKKzB4MDAsIDB4OEQsIDB4MDQsIDB4MjQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MDgsIDB4MzQsCisweDAyLCAweEQwLCAweDQ4LCAweDQwLCAweDRCLCAweDg4LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHgyOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg2MCwgMHgyNCwgMHgwMSwgMHhEMSwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MEEsIDB4NzQsIDB4MDIsIDB4RDAsCisweDE5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDA4LCAweDQ0LCAweDAyLCAweDkwLCAweDA4LCAweDUwLCAweDI1LCAweDAxLAorMHg5RCwgMHgwMSwgMHg3NCwgMHgwNiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5OCwgMHgwMCwgMHg3NCwgMHgwMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjAsCisweDI1LCAweDAwLCAweDlGLCAweDAyLCAweDRDLCAweDAyLCAweDMwLCAweDA5LCAweEQwLCAweEU0LCAweDA4LCAweDkzLCAweDAxLAorMHg3QywgMHgwMiwgMHgzNCwgMHg2OSwgMHhDOCwgMHgyNiwgMHgwMCwgMHg5QiwgMHgwMywgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4Q0MsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUUsCisweDAwLCAweDc0LCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkwLCAweDAwLCAweDdDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgxNywgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwgMHgyNSwKKzB4MDAsIDB4OUYsIDB4MDksIDB4N0MsIDB4MDIsIDB4RjQsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDQsIDB4N0MsCisweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAxLCAweDdDLCAweDgyLCAweEYwLCAweDA5LCAweEM4LAorMHgyNywgMHgwMCwgMHg4RiwgMHgwMCwgMHg3QywgMHg0MiwgMHg3MCwgMHg0OSwgMHhDMCwgMHgyNiwgMHgwOCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDgsCisweEMwLCAweDU5LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAxLAorMHgxRiwgMHgwMCwgMHg0QywgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwgMHg4NCwgMHg0MCwgMHgxMywgMHgxMCwgMHg0QywgMHgwMCwKKzB4MzAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4ODAsIDB4RjAsIDB4MDEsIDB4RTAsIDB4MDcsCisweDAwLCAweDFGLCAweDAwLCAweDNDLCAweDAwLCAweEIwLCAweDExLCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHgwMCwgMHhGMCwgMHgxMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwKKzB4NTEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NUMsIDB4MDAsIDB4NUQsCisweDgwLCAweDQ0LCAweDA1LCAweDMwLCAweDA3LCAweDQwLCAweDU0LCAweDQwLCAweDcxLCAweDA1LCAweEM2LCAweDI5LCAweDEwLAorMHgwNSwgMHg0MCwgMHgxNywgMHgwMCwgMHg1RCwgMHgwMCwgMHhGNCwgMHgwOSwgMHhEMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwKKzB4N0QsIDB4MEEsIDB4RjQsIDB4MDEsIDB4NzAsIDB4MTcsIDB4NDAsIDB4OUMsIDB4MDAsIDB4N0QsIDB4MTAsIDB4NUMsIDB4MDEsCisweEQwLCAweDE3LCAweDQwLCAweDE3LCAweDAwLCAweDcxLCAweDA3LCAweEM0LCAweDE5LCAweDUwLCAweDA1LCAweDQ4LCAweDUwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHg3MiwgMHgwMiwgMHhERCwgMHgwMCwKKzB4MDQsIDB4MDMsIDB4NTAsIDB4MTUsIDB4NDksIDB4NzYsIDB4MjAsIDB4QzEsIDB4MDIsIDB4MjQsIDB4MEYsIDB4MTAsIDB4MEMsCisweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDM3LCAweEQwLCAweDBELCAweDQwLCAweDMzLCAweDAwLCAweENELAorMHgwQiwgMHgzNCwgMHgwNywgMHg1MCwgMHg5QywgMHg0MiwgMHhBMCwgMHgwNCwgMHhDRCwgMHgwNSwgMHgzNCwgMHgwMywgMHhEMCwKKzB4MUMsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MDUsIDB4MDQsIDB4MDQsIDB4MTAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NTEsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDE4LCAweDAwLCAweEVELCAweDAwLCAweDg0LAorMHgwQSwgMHgxMCwgMHgyQSwgMHg0MCwgMHgzMiwgMHgyNCwgMHhFMSwgMHgwMSwgMHhBNCwgMHgwQSwgMHgxMCwgMHgyRSwgMHg0OCwKKzB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4ODMsIDB4RDAsIDB4NEUsIDB4NDAsIDB4MzksIDB4MDAsIDB4QUQsIDB4MDAsCisweEI0LCAweDA5LCAweDQwLCAweDBGLCAweDQwLCAweDE4LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLAorMHg0OSwgMHgzQiwgMHgwMCwgMHgyNSwgMHgwMCwgMHg4NCwgMHgwNCwgMHg1MCwgMHgwRSwgMHg0OCwgMHgxMCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NjksIDB4MDAsIDB4RUYsIDB4MDEsIDB4Q0MsIDB4MDcsCisweDcwLCAweDFGLCAweEQwLCAweDdBLCAweDAwLCAweEEzLCAweDAxLCAweEU0LCAweDA3LCAweDM0LCAweDFBLCAweEMwLCAweDdCLAorMHgwMCwgMHhFRCwgMHgwMSwgMHhCQywgMHgwNSwgMHhGMCwgMHg3RSwgMHg0MSwgMHg3QiwgMHgwNSwgMHhBRiwgMHgwMSwgMHhCOCwKKzB4MDUsIDB4NzAsIDB4MUUsIDB4QzAsIDB4NDgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDYsIDB4RjAsIDB4MUUsIDB4QzAsCisweDdGLCAweDAwLCAweEE1LCAweDAwLCAweDhDLCAweDA2LCAweDMwLCAweDFGLCAweEMwLCAweDUxLCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCMCwgMHgwRCwgMHgwMCwgMHg5RiwgMHgwMiwgMHg3RCwgMHgxQSwgMHg3NCwKKzB4NkIsIDB4QzAsIDB4MzUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUQsIDB4MUEsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDgxLAorMHg3MCwgMHgwRCwgMHhEMCwgMHgxNywgMHgwOCwgMHhERiwgMHgwMCwgMHg1QywgMHg4MiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywKKzB4MDAsIDB4REEsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDRELCAweDAwLCAweEY3LCAweDAzLCAweENDLCAweDFCLCAweDcwLCAweDNGLAorMHhDMCwgMHg3QywgMHgwMCwgMHg3MywgMHgwMSwgMHhDRCwgMHgwRiwgMHgzMCwgMHgxQiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGMywKKzB4MDEsIDB4RkMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDQsIDB4QjMsIDB4MDEsIDB4Q0MsIDB4ODUsIDB4RjAsCisweDFGLCAweEMwLCAweDRDLCAweDIwLCAweEZGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDE3LCAweEMwLCAweDdGLCAweDAwLAorMHgyMywgMHgwMSwgMHhDQywgMHgwNSwgMHhGMCwgMHgxRiwgMHhDMCwgMHgwQiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MEQsIDB4MDAsIDB4RjEsIDB4MDgsIDB4ODQsIDB4QzMsIDB4MTgsIDB4MEIsIDB4NDAsCisweDI4LCAweDAwLCAweDcxLCAweDAwLCAweEM0LCAweDIyLCAweDEwLCAweDBBLCAweDQwLCAweDNCLCAweDAwLCAweEUxLCAweDAwLAorMHhCNCwgMHgyMywgMHgxMCwgMHgwRSwgMHhDMCwgMHgzOSwgMHgwMiwgMHhFMSwgMHgwMiwgMHg4NCwgMHgwMCwgMHg3MCwgMHgwNywKKzB4NDAsIDB4MTgsIDB4MjAsIDB4RUQsIDB4ODAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4MjUsCisweDBBLCAweEFDLCAweDI4LCAweEQwLCAweDBFLCAweEMwLCAweDU1LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhDNCwgMHgyMywgMHg1MCwgMHgwQSwgMHg1MCwgMHgyOCwKKzB4MDAsIDB4MjUsIDB4MDgsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MEEsIDB4NDAsIDB4MzMsIDB4MDAsIDB4RTEsIDB4MDAsIDB4MzQsCisweDAyLCAweDEwLCAweDBFLCAweDQwLCAweDMzLCAweDAwLCAweDQxLCAweDAwLCAweEE0LCAweDAxLCAweEQwLCAweDBFLCAweDQwLAorMHg4OCwgMHgwNCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwMiwgMHg0MCwgMHgzRiwgMHgwMCwgMHhBMSwgMHgwMCwKKzB4OTQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDI4LCAweDAxLCAweDAwLCAweDg5LCAweDAwLCAweDQ0LCAweDBCLCAweDEwLCAweDA4LCAweDQwLCAweEU0LCAweDAxLAorMHgwNSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgyOCwgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgxMSwgMHgzNCwgMHgwMiwKKzB4MTAsIDB4MEMsIDB4NjgsIDB4MzEsIDB4MDAsIDB4NDEsIDB4NTIsIDB4MjQsIDB4MDAsIDB4NTAsIDB4MEMsIDB4NDAsIDB4NTAsCisweDAwLCAweERELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDAwLCAweDQwLCAweDczLCAweDAyLCAweDg1LCAweDAwLCAweDM0LAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgxOSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4QTAsIDB4MjUsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEQsIDB4MEIsIDB4NTAsIDB4MDUsIDB4QzAsIDB4NzQsIDB4NDAsIDB4MTcsCisweDAwLCAweDQ0LCAweDAzLCAweDM0LCAweDBDLCAweEMwLCAweDM3LCAweDAwLCAweEQzLCAweDA2LCAweDdDLCAweDAyLCAweDMwLAorMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhEMywgMHgwMiwgMHg2QywgMHgwMSwgMHhGMCwgMHgxRCwgMHhDMCwgMHg0NCwgMHgwMCwKKzB4REYsIDB4NDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NUMsIDB4MDAsCisweEYwLCAweDJGLCAweEMwLCAweDU1LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LAorMHg4NywgMHgwMCwgMHhENywgMHgxMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMiwgMHgxQSwgMHgwMiwKKzB4N0MsIDB4MDIsIDB4RjEsIDB4MDksIDB4QzEsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MUQsCisweEMwLCAweDM3LCAweDIwLCAweDFGLCAweDAzLCAweDVDLCAweDAxLCAweDcwLCAweDhELCAweEMwLCAweDA3LCAweDI4LCAweERGLAorMHgwMiwgMHg3QywgMHgwNiwgMHhGMCwgMHgwNSwgMHhDQSwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMiwgMHgyQywgMHgwQSwgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MEYsCisweDAwLCAweEZGLCAweDAwLCAweENDLCAweDQzLCAweDMwLCAweDBGLCAweEMwLCAweDc0LCAweDAxLCAweDIzLCAweDAxLCAweEM0LAorMHgwMywgMHgzMCwgMHgwQiwgMHhDMCwgMHgzQywgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMCwgMHgzMCwgMHgwRiwgMHhDMCwKKzB4M0IsIDB4MDAsIDB4QjMsIDB4MDAsIDB4OEUsIDB4MDAsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MEQsIDB4MDAsIDB4N0IsIDB4MDAsCisweENDLCAweDAzLCAweDMwLCAweDA3LCAweEMwLCAweDNGLCAweDEwLCAweDdGLCAweDAwLCAweENDLCAweDBDLCAweDMwLCAweDBGLAorMHhDMSwgMHgwMywgMHgyQSwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhDNiwgMHgyNCwKKzB4OEQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MTksIDB4QzAsIDB4MzYsIDB4NDAsIDB4MTEsIDB4MDMsIDB4NTQsIDB4MEUsCisweDUwLCAweDA5LCAweDUwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDRDLCAweDEwLCAweDBELCAweDQwLCAweDM3LAorMHgwMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwQywgMHg1MSwgMHgwOSwgMHg0MCwgMHhDMCwgMHgwMCwgMHhEQiwgMHgwMywgMHgwNCwKKzB4MDcsIDB4MTAsIDB4MTUsIDB4QzAsIDB4MzUsIDB4MDAsIDB4Q0QsIDB4MDgsIDB4NTQsIDB4MDYsIDB4MTAsIDB4MEQsIDB4NDAsCisweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDQ2LCAweDgwLCAweERELAorMHgwMCwgMHg0NCwgMHgwMywgMHg5MCwgMHgxOCwgMHg0MCwgMHgyNSwgMHgwMCwgMHg1MSwgMHg4OCwgMHg1NCwgMHgwNywgMHgxMCwKKzB4ODksIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsCisweDkxLCAweDAwLCAweDQ2LCAweDQ1LCAweDkwLCAweDFDLCAweDQwLCAweDQ0LCAweDQ0LCAweEQ5LCAweDAzLCAweDQ0LCAweDEyLAorMHgxMCwgMHgxMSwgMHg2MCwgMHgzNywgMHgwMCwgMHg1RCwgMHgwMCwgMHg0NCwgMHgwMSwgMHgxMCwgMHgwRCwgMHg0MCwgMHgwNywKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4REQsIDB4MDAsCisweDA0LCAweDAzLCAweDkwLCAweDA4LCAweDQwLCAweDIyLCAweDAwLCAweDQxLCAweDAwLCAweDE0LCAweDAyLCAweDE0LCAweDA4LAorMHg0OCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgyMCwgMHg0MSwKKzB4MDAsIDB4MTYsIDB4MDAsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MDAsIDB4NDAsIDB4QzksIDB4ODAsIDB4NDUsIDB4MDIsIDB4MTQsCisweDEwLCAweDYwLCAweDMxLCAweDAwLCAweDRELCAweDAwLCAweDE0LCAweDAxLCAweDEwLCAweDBDLCAweDQwLCAweDQzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwNiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhDRCwKKzB4MDMsIDB4MzQsIDB4MEIsIDB4QzAsIDB4MjUsIDB4MDAsIDB4MTMsIDB4MDAsIDB4REMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsCisweDM0LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAyLCAweDExLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweDUzLCAweDAwLAorMHg0NCwgMHgwMCwgMHhCMCwgMHgwRCwgMHhDOCwgMHgwNSwgMHg0MCwgMHg5QiwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwMSwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MDMsIDB4NDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDBGLCAweDAwLCAweEJGLCAweDAwLCAweEJDLCAweDAzLAorMHg3MCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGRSwgMHgwMCwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsCisweDAwLCAweDcwLCAweDBGLCAweEMwLCAweDBGLCAweDAwLCAweEJGLCAweDAwLCAweEY0LCAweDAzLCAweEYxLCAweDAzLCAweENBLAorMHgzOSwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4REMsIDB4NTMsIDB4RjAsCisweDAzLCAweEMwLCAweDBGLCAweDAwLCAweEFGLCAweDAxLCAweEZDLCAweDg3LCAweEYwLCAweDFGLCAweEQwLCAweDBDLCAweDAwLAorMHhGRiwgMHgwMSwgMHhDQywgMHgwMywgMHhGMCwgMHg0RiwgMHhDMCwgMHgwRCwgMHgwMiwgMHhCMywgMHgwMSwgMHhFQywgMHgwNywKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDgsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDUsIDB4QjQsIDB4MUEsIDB4QzAsIDB4N0IsCisweDAwLCAweDMzLCAweDA0LCAweEJDLCAweDAyLCAweDIwLCAweDBCLCAweEM4LCAweDBDLCAweDA4LCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMCwgMHgxRCwgMHgwMCwgMHhGNCwgMHgwQiwgMHhEMCwgMHgxMSwKKzB4NDAsIDB4NDcsIDB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4MDcsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjAsIDB4MDEsIDB4Q0MsCisweDEwLCAweEM0LCAweDJCLCAweEQwLCAweDBELCAweDQwLCAweDI3LCAweDAwLCAweEQxLCAweDAxLCAweDQ0LCAweDAzLCAweEQwLAorMHgxMSwgMHg0MiwgMHgwNywgMHgwMCwgMHhERCwgMHgwMSwgMHg3NCwgMHgwNywgMHgxMiwgMHgxOSwgMHg0MCwgMHg1NywgMHgyMCwKKzB4MTUsIDB4ODMsIDB4NzQsIDB4MDYsIDB4NTEsIDB4MDEsIDB4NDAsIDB4MEQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDExLCAweEEwLCAweDAzLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLAorMHgwMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgyMCwgMHgwNCwgMHhDRCwgMHgwNCwKKzB4MDUsIDB4MDMsIDB4RDIsIDB4OEMsIDB4NDIsIDB4MjMsIDB4MDgsIDB4RDEsIDB4ODAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsCisweDQwLCAweDYzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDgxLCAweDEwLCAweDBDLCAweDQwLCAweDI3LCAweDAwLCAweDgxLAorMHgwOCwgMHgzNCwgMHgwMiwgMHgxOSwgMHgwOCwgMHg0MCwgMHg0QywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QTgsIDB4NjUsIDB4MDAsIDB4MUQsIDB4MjEsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MzksIDB4NDAsIDB4NDcsCisweDAwLCAweERELCAweDAxLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweEU0LCAweDAwLCAweENELCAweDIwLCAweDQ0LAorMHgwMywgMHhEMSwgMHgwRCwgMHg0MCwgMHg2MywgMHgwMCwgMHhEMSwgMHgwMywgMHg1NCwgMHgwMywgMHg5MCwgMHgxOSwgMHg0MCwKKzB4NjcsIDB4MTAsIDB4REQsIDB4MDQsIDB4NzQsIDB4MDYsIDB4MTEsIDB4MUQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4NTUsIDB4OTAsCisweDc0LCAweDA2LCAweDU4LCAweDE5LCAweDQyLCAweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhBMCwgMHhFNywgMHgwMCwgMHg5RiwgMHgxMSwgMHg1QywgMHgwMywgMHhGMSwgMHgxOSwgMHhDMCwgMHg2NywgMHgwNCwKKzB4REYsIDB4MDUsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QzQsIDB4MDAsIDB4REYsIDB4MDEsIDB4NEMsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDQ1LCAweDQwLCAweEMzLCAweDAxLCAweDdDLCAweDAzLCAweEYwLCAweDM5LCAweEMxLCAweDY3LAorMHgwMCwgMHhERiwgMHgwMCwgMHgzQywgMHgwRCwgMHhCOCwgMHgzOSwgMHhDMCwgMHgzNywgMHgwMCwgMHg1MywgMHgwMiwgMHg3QywKKzB4MDQsIDB4MzAsIDB4MTEsIDB4QzAsIDB4ODAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisweDg4LCAweDJELCAweDAwLCAweEJGLCAweDgwLCAweDdDLCAweDAzLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweEZGLAorMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHg4RiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMiwgMHhGQywgMHgwMywgMHhGMiwKKzB4MEYsIDB4RTAsIDB4MjcsIDB4ODAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MEYsIDB4MDAsCisweEZGLCAweDAxLCAweEZDLCAweDAzLCAweEYwLCAweDAzLCAweEMwLCAweDdGLCAweDAxLCAweDNGLCAweDA0LCAweEJDLCAweDAyLAorMHhGMCwgMHgwMSwgMHhDMSwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwKKzB4MDUsIDB4MDIsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MjksIDB4QzAsIDB4QTcsIDB4MDAsIDB4REYsIDB4MEEsCisweDZDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweEQzLCAweDA0LCAweDRDLCAweDEzLCAweEYyLCAweDhELAorMHhDMiwgMHhBNywgMHgwMCwgMHhENywgMHgwMywgMHg0QywgMHg0NywgMHhGMCwgMHgyOSwgMHhDMCwgMHgyNCwgMHgwNCwgMHhEQiwKKzB4MDQsIDB4NEMsIDB4MTksIDB4NzAsIDB4MkQsIDB4QzUsIDB4MzQsIDB4MDAsIDB4NTcsIDB4MDIsIDB4N0MsIDB4NjAsIDB4NzQsCisweDAxLCAweEMwLCAweDI4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDI0LAorMHgwMCwgMHg5RCwgMHgxOCwgMHhGNCwgMHgyQiwgMHgxMCwgMHgwMSwgMHg0MCwgMHgyNywgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwKKzB4MDMsIDB4RDAsIDB4OEQsIDB4NDAsIDB4MjcsIDB4MDAsIDB4RDEsIDB4MDIsIDB4QzQsIDB4NEIsIDB4RDAsIDB4MkYsIDB4NDAsCisweDI3LCAweDAwLCAweEQxLCAweDgwLCAweDUwLCAweDBCLCAweEYwLCAweDQ5LCAweDAwLCAweDg1LCAweDAwLCAweERELCAweDQxLAorMHg2QywgMHg0RiwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzMCwgMHgwMiwgMHg1QiwgMHgwMCwgMHg3MCwgMHgwQSwgMHgxMCwgMHgyMSwKKzB4QzAsIDB4NEUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MDAsIDB4MDQsCisweDBELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDAwLCAweDQwLCAweDIzLCAweDAwLCAweENELCAweDAxLCAweDI0LCAweDAzLAorMHg1MCwgMHgzRCwgMHg0MCwgMHgwMywgMHgwMCwgMHhDNSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHg0QywgMHg0MCwgMHgwMiwKKzB4MDAsIDB4QzksIDB4MDAsIDB4MDQsIDB4OEIsIDB4RDAsIDB4MTAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4Q0QsIDB4MDIsIDB4MDQsCisweDBCLCAweDUwLCAweDI4LCAweDQwLCAweDMyLCAweDAwLCAweDBELCAweDA3LCAweDM0LCAweDA0LCAweEQ0LCAweDE5LCAweDQwLAorMHgwQywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg1OCwgMHgwMCwgMHg2RCwKKzB4MDEsIDB4QjQsIDB4MjcsIDB4MTQsIDB4MTYsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RkQsIDB4MDEsIDB4ODQsIDB4ODcsIDB4RDAsCisweDFFLCAweDQwLCAweDdCLCAweDEwLCAweEUxLCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFFLCAweDQ4LCAweDZCLCAweDUwLAorMHhGOSwgMHgwMSwgMHg5NCwgMHg4NywgMHg1OCwgMHgxNiwgMHg1MCwgMHg0OCwgMHgwMiwgMHhGRCwgMHgxMSwgMHhFNCwgMHgxNywKKzB4MTAsIDB4MEYsIDB4NDAsIDB4N0UsIDB4OEMsIDB4QTksIDB4MDEsIDB4QjQsIDB4MjQsIDB4OTAsIDB4MTIsIDB4NDgsIDB4M0UsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDFBLCAweDkwLCAweDAwLCAweENGLCAweDAwLAorMHgzQywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgyQywgMHgwMywgMHg3MCwgMHgwQywKKzB4QzEsIDB4MDMsIDB4NDAsIDB4QzUsIDB4MDAsIDB4MEMsIDB4MjMsIDB4RjAsIDB4MEMsIDB4NDAsIDB4MTIsIDB4MDIsIDB4RDcsCisweDAwLCAweDBDLCAweDAzLCAweEQwLCAweDgwLCAweEMwLCAweDMwLCAweDAyLCAweENGLCAweDAwLCAweDA0LCAweDAzLCAweDcwLAorMHg4QywgMHhDMCwgMHgzMiwgMHgwMCwgMHhDRiwgMHgxMCwgMHgzQywgMHgyMiwgMHhGNCwgMHg4OCwgMHhDOSwgMHg0OCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4MUQsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAzLCAweEYwLCAweDhGLCAweEMwLCAweDNGLCAweDEwLCAweEZGLCAweDA4LCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgxNywgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHg4RiwgMHhDOCwgMHgxRiwgMHgwOCwgMHhGNywgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDIsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MTMsIDB4RjAsIDB4NEYsCisweEUwLCAweDNELCAweDAwLCAweEZFLCAweDA4LCAweEZDLCAweDIzLCAweDc0LCAweDBGLCAweEMwLCAweDBCLCAweDYwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywgMHgwOCwgMHg1RiwgMHgwMSwgMHg0QywgMHgwMywKKzB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MTcsCisweDAwLCAweEQ3LCAweDAwLCAweDVDLCAweDFCLCAweEYwLCAweDBELCAweEMwLCAweDE3LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHgwMywgMHg3MCwgMHgwRCwgMHhDOCwgMHgzNywgMHgwMCwgMHhDMywgMHgwMCwgMHgyQywgMHgwMywgMHhCMCwgMHgwRCwgMHg0MCwKKzB4MzcsIDB4MDAsIDB4OUYsIDB4NDAsIDB4NEMsIDB4ODAsIDB4MjAsIDB4MDksIDB4QzIsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgyLCAweDM5LCAweDAwLCAweDZELCAweDAwLCAweEM0LCAweDJCLCAweDEwLAorMHgwRSwgMHg0MCwgMHgxQiwgMHgwMCwgMHhFOSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwKKzB4RUQsIDB4MDAsIDB4QjQsIDB4MzMsIDB4RDAsIDB4MkUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUYsIDB4MDAsIDB4QjQsIDB4MDMsCisweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDIwLCAweEUxLCAweDAwLCAweDg0LCAweDAzLCAweDUwLCAweDBFLCAweDAwLCAweDNCLAorMHgwMCwgMHg4RCwgMHgwMCwgMHg4NCwgMHgwMSwgMHhCMCwgMHgwMiwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4Q0QsIDB4MDMsIDB4QTUsIDB4MTcsIDB4NTAsIDB4MUUsCisweDQwLCAweDdCLCAweDAwLCAweEVELCAweDExLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQxLCAweDdCLCAweDAwLCAweEVELAorMHgwMSwgMHg5NiwgMHgyNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHg4OCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwKKzB4MzYsIDB4NDAsIDB4NzMsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QTQsIDB4MDcsIDB4OTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsCisweEVELCAweDExLCAweDE0LCAweDQ0LCAweDE5LCAweDNFLCAweDQwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHg3MywgMHgwMCwgMHhDRCwgMHgwMSwgMHgyNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwKKzB4MzMsIDB4MDAsIDB4NDksIDB4MDUsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MTgsIDB4NDAsIDB4RjMsIDB4MDAsIDB4OEQsIDB4MDEsCisweDc0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDczLCAweDAyLCAweDQ1LCAweDFBLCAweDM0LCAweDAzLCAweEQwLCAweDVDLAorMHg0MCwgMHg3NywgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwNywgMHg1MCwgMHgyQywgMHg2MCwgMHhCMywgMHgwMCwgMHhDRCwKKzB4NDcsIDB4MTQsIDB4MDcsIDB4OTAsIDB4MUMsIDB4NDAsIDB4NUIsIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE3LCAweEEwLCAweDFELCAweDAwLCAweDdGLCAweDAyLCAweDZDLCAweDAxLCAweDcwLCAweDI3LCAweEMwLCAweDlGLAorMHgwMCwgMHg3RiwgMHgwMSwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxRiwgMHgwMCwgMHg1RiwgMHgwMSwgMHg1QywKKzB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4REYsIDB4MDAsIDB4N0QsIDB4MDIsIDB4N0MsIDB4ODEsIDB4RjEsIDB4MzcsIDB4QzAsCisweERGLCAweDQwLCAweDQzLCAweDAwLCAweEVDLCAweDAxLCAweEIwLCAweDI3LCAweEMwLCAweDFCLCAweDAxLCAweDdGLCAweDIzLAorMHg5RCwgMHhBNSwgMHgyMCwgMHhCNywgMHhDMCwgMHg1RiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MDgsIDB4NDUsIDB4MDIsIDB4MUYsIDB4MDIsIDB4MUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsCisweDFELCAweDIwLCAweDdDLCAweDAwLCAweEYyLCAweDIxLCAweEM4LCAweDA3LCAweDA2LCAweDFGLCAweDBBLCAweDdDLCAweDAwLAorMHhGMCwgMHgyMSwgMHhDMCwgMHgwNywgMHgwNCwgMHgxRiwgMHg4MCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NywKKzB4MDYsIDB4MUYsIDB4NDIsIDB4N0MsIDB4MjgsIDB4QjAsIDB4NDEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MUYsIDB4MDAsIDB4NjQsCisweDg4LCAweEYwLCAweDIxLCAweEMwLCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgxOSwgMHg3QywgMHgwNiwgMHgzMCwgMHgwOCwgMHhDNSwgMHgyNCwgMHgwNCwgMHg5RiwKKzB4MDgsIDB4NzQsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjMsIDB4MDAsIDB4OUIsIDB4MDEsIDB4N0MsIDB4MDIsIDB4MzAsCisweDA5LCAweEMyLCAweDIzLCAweDgwLCAweDkzLCAweDA0LCAweDRDLCAweDAyLCAweEYwLCAweDU5LCAweEMwLCAweDI3LCAweDAwLAorMHg5MywgMHgwMywgMHg1QywgMHgwMiwgMHg3MSwgMHg1OSwgMHhDMCwgMHhBNywgMHg0MCwgMHg4MywgMHgwMCwgMHg0QywgMHgyMiwKKzB4MzAsIDB4MjgsIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsCisweDY0LCAweDAwLCAweDlELCAweDEyLCAweDc0LCAweDBBLCAweDE0LCAweDA5LCAweDUwLCAweDI0LCAweDAwLCAweDk3LCAweDAxLAorMHg3NCwgMHgwMiwgMHhEOCwgMHg0OSwgMHg0MCwgMHgyNywgMHg0MCwgMHg5MSwgMHgxMSwgMHg3NCwgMHgwQSwgMHg1MCwgMHgyOSwKKzB4NDAsIDB4MjcsIDB4QzAsIDB4OEIsIDB4MDEsIDB4NDQsIDB4NEEsIDB4RDAsIDB4MDksIDB4NDQsIDB4RTcsIDB4NDAsIDB4OTEsCisweDg2LCAweDAwLCAweDEyLCAweDIwLCAweDE5LCAweDQwLCAweEU3LCAweDEwLCAweDkxLCAweDAxLCAweDQ0LCAweDA2LCAweDE0LAorMHgzOSwgMHg0MSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4MCwgMHgyNCwKKzB4MjUsIDB4OUQsIDB4MDAsIDB4NzQsIDB4NjIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsCisweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDA4LCAweDc0LCAweDBBLCAweDEwLCAweDA5LCAweDQwLAorMHgzNywgMHgwOCwgMHg5MSwgMHgwMCwgMHg0NCwgMHg4MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMSwgMHg5OSwgMHgwMCwKKzB4NTAsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4OTksIDB4MDQsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEQsCisweDQwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIyLCAweDIwLCAweDA1LAorMHg4RCwgMHgxNCwgMHgzNiwgMHgxMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4NSwgMHg4MCwgMHgzNCwgMHgwMiwKKzB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4ODEsIDB4MDgsIDB4NzQsIDB4MTIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjMsCisweDAxLCAweDkxLCAweDAwLCAweDA0LCAweDAyLCAweEQyLCAweDQ4LCAweDQwLCAweDMzLCAweDAxLCAweDg5LCAweDAwLCAweDQ0LAorMHgwMiwgMHgxMCwgMHgwOCwgMHg0NCwgMHgzMywgMHgwMCwgMHg4OSwgMHgwMSwgMHgwNSwgMHg5MywgMHgxMCwgMHg0OCwgMHg1MCwKKzB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MDYsIDB4MDEsIDB4MUYsCisweDA0LCAweDdDLCAweDI4LCAweDMwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEQwLAorMHhBMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgxMywgMHgwMiwgMHg3QywgMHgyOCwgMHgzMCwgMHhFNSwgMHhDNSwgMHg4NywgMHgwMiwKKzB4MTEsIDB4MDAsIDB4NEMsIDB4MjgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MjIsIDB4MUIsIDB4MDAsIDB4NUMsIDB4MDAsCisweDcyLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFCLCAweDE0LCAweDRDLCAweDAwLCAweDMwLCAweEExLCAweEMwLCAweDc0LAorMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgyRiwgMHgwNSwgMHhCRiwgMHgxNCwKKzB4NzQsIDB4QTIsIDB4RjIsIDB4OEIsIDB4QzAsIDB4MkYsIDB4MjIsIDB4QkYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEIsCisweEMwLCAweDJGLCAweDBBLCAweEI3LCAweDA0LCAweDdDLCAweDIyLCAweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDAyLCAweEJGLAorMHgwMCwgMHg3RCwgMHgwMiwgMHhGMCwgMHg4RiwgMHgwMCwgMHgyRiwgMHgwMiwgMHhCNywgMHg4MCwgMHhGQywgMHgwMiwgMHg3MCwKKzB4MEIsIDB4QzAsIDB4MkYsIDB4MDgsIDB4RjcsIDB4MDAsIDB4RkQsIDB4MjMsIDB4RjAsIDB4OEIsIDB4QzIsIDB4NzcsIDB4NjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDJGLCAweDA1LCAweEJGLCAweDBDLCAweEZDLAorMHg4MiwgMHgzMiwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCMywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHg4QSwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4MzAsIDB4NEIsIDB4QzAsIDB4MjYsIDB4MDUsIDB4QkYsIDB4MDAsCisweEZDLCAweDAyLCAweDMwLCAweDBCLCAweEUwLCAweDJGLCAweDAyLCAweEZGLCAweDAwLCAweENELCAweDAyLCAweEIwLCAweDBGLAorMHhDMiwgMHgyRiwgMHg0OCwgMHhCMywgMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDNCwgMHg3NCwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MDEsIDB4MUQsIDB4MEMsIDB4NzQsIDB4NDgsCisweDEwLCAweDA1LCAweDQwLCAweDA0LCAweDAyLCAweDUxLCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDQxLCAweDQ4LCAweDg0LAorMHgwNCwgMHgxRCwgMHgxMCwgMHg3NCwgMHgyMCwgMHgxNCwgMHg0MSwgMHg0MSwgMHgwNCwgMHgwMSwgMHg1NywgMHg4MCwgMHg3NCwKKzB4NDAsIDB4MTAsIDB4MDEsIDB4NjAsIDB4MDcsIDB4MDIsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsCisweDE3LCAweDUwLCAweDExLCAweDAwLCAweDQ1LCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDYyLCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHgwNSwgMHg4RCwgMHgwNSwgMHgzNiwgMHgzMiwgMHgxNCwKKzB4ODgsIDB4NDAsIDB4NjIsIDB4NjAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NTAsIDB4MjAsIDB4MDMsCisweDhELCAweDAwLCAweDM0LCAweDAyLCAweDEwLCAweENDLCAweDQwLCAweDIyLCAweDA1LCAweENELCAweDAwLCAweDM2LCAweDEzLAorMHgxMCwgMHg4OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgyNCwgMHgwMiwgMHg5NCwgMHgxOCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4ODUsIDB4NDAsIDB4MTQsIDB4MDIsIDB4RDIsIDB4MDgsIDB4NDAsIDB4NDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDA0LCAweDlELCAweDgwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LAorMHg1MCwgMHgyNiwgMHgwMSwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHhBNCwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4MTEsIDB4MDksIDB4NDAsIDB4NjQsIDB4MTAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDIsIDB4MTAsCisweDA5LCAweDQwLCAweEU3LCAweDEwLCAweDlELCAweDAwLCAweDY0LCAweDEyLCAweDEyLCAweDA5LCAweDQwLCAweDI3LCAweDA4LAorMHhENSwgMHgwNCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgyOSwgMHg0MCwgMHg2MiwgMHgyOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4MjAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsCisweDY2LCAweDAwLCAweDkzLCAweDAzLCAweDdDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLCAweEE0LCAweDAwLCAweDlGLCAweDAxLAorMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHhBNiwgMHgwNCwgMHg5RiwgMHgwMywgMHg3NCwgMHgwMiwgMHgzNCwgMHgyOSwKKzB4NDAsIDB4QTcsIDB4MDAsIDB4OEYsIDB4MDAsIDB4MkMsIDB4ODIsIDB4QjAsIDB4MjksIDB4QzAsIDB4QTMsIDB4MDAsIDB4OTcsCisweDAyLCAweDVDLCAweDA2LCAweEYwLCAweDI5LCAweEMwLCAweDE0LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNiwgMHgwOCwgMHg2NSwgMHgwQSwgMHg5RiwgMHgxNCwgMHg3QywgMHgwMiwgMHhGMiwgMHg0OCwgMHhDMCwgMHgyMSwKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4NTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDMsIDB4N0MsCisweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDgwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweDgyLAorMHgyNywgMHgwMCwgMHg5RiwgMHgxOCwgMHg1QywgMHgwMiwgMHhEMCwgMHg5OSwgMHhDMCwgMHhBNywgMHg2NCwgMHg5QiwgMHgwMCwKKzB4N0MsIDB4OEUsIDB4NzgsIDB4MzgsIDB4QzAsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDA4LCAweDg1LCAweDA0LCAweDFGLCAweDA4LCAweDdDLCAweDQwLCAweEYxLCAweDAxLCAweEMwLCAweDA3LCAweDgwLAorMHgxMywgMHgyMCwgMHg3QywgMHgwMCwgMHhGMiwgMHg0MSwgMHhEMCwgMHg4NCwgMHgwMCwgMHgxRiwgMHgwMCwgMHgwQywgMHgwMCwKKzB4MzAsIDB4MDEsIDB4QzIsIDB4ODcsIDB4MDgsIDB4MUYsIDB4MDIsIDB4N0UsIDB4MDAsIDB4RjIsIDB4MjEsIDB4RjAsIDB4MDQsCisweDBDLCAweDFCLCAweDgwLCAweDdDLCAweDAwLCAweDcwLCAweDAxLCAweEM5LCAweDg3LCAweDAwLCAweDA3LCAweDgwLCAweDRELAorMHgwOCwgMHgzMiwgMHgwMSwgMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4REMsIDB4MjAsIDB4N0QsIDB4MDEsIDB4RjYsIDB4MUQsIDB4NzAsIDB4MDUsIDB4NjAsIDB4MTcsIDB4MDAsIDB4NTEsCisweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA3LCAweEMwLCAweDE2LCAweDAwLCAweDdELCAweDA1LCAweENELCAweDE5LCAweDMwLAorMHgyNywgMHg2MCwgMHgxNywgMHgyMCwgMHg1RCwgMHgwMCwgMHhGQywgMHhBOSwgMHg3MiwgMHg0NSwgMHg2MiwgMHgxQywgMHgxMSwKKzB4NzEsIDB4MjUsIDB4REMsIDB4OEQsIDB4MTQsIDB4MjcsIDB4QzAsIDB4OUQsIDB4MDEsIDB4NzEsIDB4ODksIDB4Q0MsIDB4MDEsCisweDEwLCAweDM3LCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLAorMHhGMiwgMHgwMiwgMHhDRCwgMHgwMiwgMHg3NCwgMHgwMywgMHg1MiwgMHgwQywgMHg0NCwgMHgzMywgMHgwMCwgMHg4MSwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDAsIDB4MkQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MjQsIDB4MUYsIDB4MTAsIDB4MkMsCisweDQ5LCAweDMzLCAweDEwLCAweDhELCAweDAwLCAweDc0LCAweDAzLCAweDUxLCAweDE4LCAweDQwLCAweDMwLCAweDAwLCAweDQxLAorMHgwMSwgMHgzNCwgMHg0MCwgMHgxMCwgMHgwQywgMHg0MCwgMHhBMywgMHgyMCwgMHhDNSwgMHgwOSwgMHgyMCwgMHgwNywgMHgxMCwKKzB4MkMsIDB4NDEsIDB4NDAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsCisweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAxLCAweDUwLCAweDBFLCAweDQwLCAweDMzLCAweDQwLCAweEUxLCAweDgwLCAweEI0LAorMHgwMywgMHhEOCwgMHgwRiwgMHg0MSwgMHgzOCwgMHgwMCwgMHg2RCwgMHgwMSwgMHg4NCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0OCwKKzB4M0IsIDB4MDIsIDB4RUQsIDB4NDAsIDB4QjQsIDB4MDEsIDB4NTAsIDB4MUUsIDB4NDgsIDB4NTksIDB4MDAsIDB4NjEsIDB4ODEsCisweEQ0LCAweDQyLCAweDEwLCAweDA2LCAweDQwLCAweDJELCAweDAwLCAweDYxLCAweDAwLCAweDA0LCAweDQ2LCAweDEwLCAweDBFLAorMHg0MSwgMHgxMCwgMHgwOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OCwgMHgwMCwKKzB4NkYsIDB4MDEsIDB4QjQsIDB4MDcsIDB4NzAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDgsIDB4RTEsIDB4MDEsIDB4QkMsIDB4MDcsCisweEYwLCAweDFFLCAweDQwLCAweDc4LCAweDgxLCAweEJELCAweDAxLCAweEVDLCAweDA1LCAweDM0LCAweDFFLCAweDQwLCAweDdCLAorMHgwMiwgMHhFRiwgMHgwMSwgMHhCNCwgMHgwNywgMHg3MCwgMHgxRSwgMHg0MCwgMHg3QywgMHg0MCwgMHg2QiwgMHgwMCwgMHhCQywKKzB4MDYsIDB4MzAsIDB4MUEsIDB4QzAsIDB4NkIsIDB4MDAsIDB4RTcsIDB4MDEsIDB4QUMsIDB4MDcsIDB4MzQsIDB4MTcsIDB4QzAsCisweDUwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDE1LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHg4MSwgMHg3MCwgMHgwRCwgMHhDOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MzcsIDB4MDQsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzgsIDB4QjcsIDB4MDAsCisweERGLCAweDAwLCAweDVDLCAweDgzLCAweDcyLCAweDBDLCAweEUwLCAweDE2LCAweDA4LCAweERGLCAweDAwLCAweDNDLCAweDAyLAorMHhDNCwgMHgwMSwgMHhDMCwgMHgyMywgMHgwMCwgMHgwRiwgMHgwMCwgMHg3QywgMHg4MywgMHhGMCwgMHgwMSwgMHhEMCwgMHg0MywKKzB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MzAsIDB4N0QsIDB4MDAsIDB4RjMsIDB4MDEsCisweENDLCAweDEzLCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAxLCAweEZGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLAorMHhDMCwgMHg3RiwgMHgwNCwgMHhGMywgMHgwMSwgMHhDQywgMHgxMywgMHgzMCwgMHgxNywgMHhDMCwgMHg3QywgMHgwMiwgMHhGRiwKKzB4ODksIDB4RkMsIDB4ODcsIDB4MzAsIDB4OUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4NzMsIDB4MDEsIDB4RkMsIDB4MjYsIDB4RjAsCisweDE3LCAweEM4LCAweDZCLCAweDIwLCAweEJCLCAweDAxLCAweEZDLCAweDA3LCAweEQwLCAweDEzLCAweEMwLCAweDFCLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgzRCwgMHg1MCwgMHg3MSwgMHgyMCwgMHg4NCwKKzB4ODMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MkEsIDB4NDgsCisweDNGLCAweDAwLCAweDYxLCAweDAwLCAweEQ0LCAweDA4LCAweDExLCAweDBCLCAweEMwLCAweDM4LCAweDAwLCAweEU5LCAweDg4LAorMHhEQywgMHg4MiwgMHgxMCwgMHhDRSwgMHg0MCwgMHgzQiwgMHgwMSwgMHg2MSwgMHgwMCwgMHhCNCwgMHgzMiwgMHhEMCwgMHgwNiwKKzB4NDIsIDB4M0IsIDB4MTIsIDB4MjEsIDB4MzAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4NEEsIDB4NDIsIDB4NTcsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDYxLCAweDAwLCAweDg0LCAweDIwLAorMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwOSwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHg4NiwgMHg0MCwgMHgzQiwKKzB4MDAsIDB4QjEsIDB4MDAsIDB4QTQsIDB4MjEsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MjAsIDB4RUQsIDB4MDgsIDB4QjYsCisweDAzLCAweDEwLCAweDBFLCAweDQ5LCAweDJCLCAweDAwLCAweDYxLCAweDEwLCAweEI0LCAweDAyLCAweEQxLCAweDAyLCAweDQwLAorMHgyRiwgMHgwMCwgMHgyOSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwMiwgMHg0NCwgMHgyMywgMHgwMiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4RTEsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDQsIDB4MDAsIDB4RDAsCisweDBDLCAweDQwLCAweDczLCAweDAwLCAweENELCAweDAzLCAweDM0LCAweDAzLCAweEQxLCAweDAwLCAweDQ0LCAweDMzLCAweDAwLAorMHgxMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg1MCwgMHhCNiwgMHgxMCwgMHhDRCwgMHgwMywgMHgzNCwgMHgwMiwKKzB4MTQsIDB4M0MsIDB4NDAsIDB4QTMsIDB4NDAsIDB4NDEsIDB4MDEsIDB4MzQsIDB4NEEsIDB4RDAsIDB4MjAsIDB4NDAsIDB4MjMsCisweDAyLCAweDAxLCAweDAzLCAweDM0LCAweDZGLCAweEQwLCAweDExLCAweDQxLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHhDNSwgMHgwMCwgMHg5MywgMHgwNCwgMHg0NywgMHgwMiwgMHhGMSwgMHgyRCwKKzB4ODAsIDB4RjcsIDB4MDEsIDB4REYsIDB4MDcsIDB4NzQsIDB4MDMsIDB4RjAsIDB4MDEsIDB4NDAsIDB4M0YsIDB4NDIsIDB4RDMsCisweDAwLCAweDZDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDNDLCAweDAwLCAweERGLCAweDA1LCAweDc0LCAweDAyLCAweDMwLAorMHgxRCwgMHhDNCwgMHgyNywgMHgwMCwgMHg1MywgMHgwMSwgMHg3QywgMHgxMiwgMHhGMCwgMHgyNSwgMHhDMCwgMHg3MywgMHgwMCwKKzB4REIsIDB4MDMsIDB4N0MsIDB4MEIsIDB4RjIsIDB4NjksIDB4NDAsIDB4NTcsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDI3LCAweDAzLCAweDlGLCAweDAwLCAweDdFLCAweDBBLCAweEYwLCAweDFELCAweEMwLAorMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgzOSwgMHhDMCwgMHg3NywgMHgxMCwgMHhERiwgMHgwMywKKzB4NUMsIDB4MEEsIDB4RjAsIDB4MjksIDB4QzAsIDB4MzUsIDB4MDAsIDB4REIsIDB4MTAsIDB4NTQsIDB4ODAsIDB4RjAsIDB4MEQsCisweENELCAweDI3LCAweDAxLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDg1LCAweEMxLCAweEI3LCAweDA0LCAweERGLAorMHgwNCwgMHg3QywgMHgwMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgzNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MDgsIDB4MEIsIDB4MDAsIDB4MzMsIDB4MDAsIDB4RkMsIDB4ODIsIDB4RjAsIDB4MEYsIDB4QzEsIDB4M0YsCisweDI0LCAweEZGLCAweDMwLCAweEZDLCAweDAzLCAweEYyLCAweDAzLCAweEM0LCAweDNCLCAweDAwLCAweDczLCAweDA1LCAweDhELAorMHgwMiwgMHgzMCwgMHgwMywgMHhDMiwgMHgzQywgMHgwNCwgMHhGMywgMHgwNCwgMHhGQywgMHgwMCwgMHhGMSwgMHgwRSwgMHhDMCwKKzB4MDYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDIsIDB4NzAsIDB4MjcsIDB4QzAsIDB4M0MsIDB4NDAsIDB4RjMsIDB4MDIsCisweENDLCAweDAxLCAweEYxLCAweDBCLCAweEMwLCAweDA0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg4MSwgMHgyMCwgMHhDNiwgMHgzNCwgMHg5MSwgMHgxMywgMHg1QywgMHgxNiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwKKzB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDksIDB4MzksIDB4NDAsIDB4MzcsIDB4MDAsIDB4NTEsIDB4MDQsIDB4NDQsIDB4MEUsCisweDEwLCAweDcxLCAweDQwLCAweDM0LCAweDAwLCAweEQzLCAweDAxLCAweDc0LCAweDBDLCAweEQwLCAweDBELCAweDQwLCAweDQ0LAorMHgwMCwgMHg1RCwgMHgwMywgMHgzNCwgMHgxNywgMHgxMSwgMHgzNCwgMHg0MCwgMHhGNCwgMHgwNCwgMHg4MSwgMHgwMCwgMHg0NCwKKzB4MDcsIDB4RDAsIDB4NTksIDB4NDgsIDB4ODQsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweEEwLCAweDQ2LCAweDAwLCAweDkxLCAweDAxLCAweDc0LCAweDA2LCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERELAorMHgwNCwgMHg3NCwgMHg4MywgMHhEMCwgMHgxOSwgMHg0MCwgMHgzNywgMHgwMCwgMHg5MSwgMHg0MCwgMHg0NCwgMHgwNiwgMHg5MCwKKzB4MTEsIDB4NDAsIDB4MzQsIDB4MjAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4NDYsIDB4RDAsIDB4MUQsIDB4NDAsIDB4NjYsIDB4MDQsCisweDVELCAweDExLCAweDc0LCAweDA2LCAweDUwLCAweDI1LCAweDQwLCAweDc0LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDBFLAorMHhEMCwgMHgxMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4MjAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDMzLCAweDQ4LCAweDgxLCAweDAwLCAweDA2LCAweDAwLCAweDkwLCAweDA4LAorMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MiwgMHgyMCwgMHgwMCwgMHg0OSwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4MTgsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4QzEsIDB4MjAsIDB4MDQsIDB4MDIsIDB4RDAsCisweDA4LCAweDQyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorMHg0MCwgMHgxMywgMHg0MCwgMHg3RSwgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgyMCwgMHg3RSwKKzB4MDMsIDB4RDAsIDB4MDEsIDB4QzIsIDB4M0YsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4QjAsIDB4MDEsIDB4QzAsCisweDNDLCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweDA2LCAweDAwLCAweDVGLCAweDAwLAorMHg3QywgMHgwMiwgMHg3MCwgMHgwNSwgMHhEMCwgMHgzNCwgMHgxMCwgMHg1MywgMHgwMCwgMHg0QywgMHgwMCwgMHhGMiwgMHgwMSwKKzB4RDAsIDB4MDQsIDB4NjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MkYsIDB4MTAsCisweEJGLCAweDAwLCAweERFLCAweDAwLCAweEYwLCAweDBGLCAweEM2LCAweDNGLCAweDAwLCAweEZGLCAweDgwLCAweEZDLCAweDAzLAorMHhEMCwgMHgwMywgMHhFMCwgMHgzRiwgMHgwMCwgMHgyRiwgMHgwMCwgMHhGNCwgMHgwMCwgMHg3MCwgMHgwMywgMHhEMCwgMHgzRiwKKzB4MDAsIDB4RjcsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsCisweDAyLCAweEYwLCAweDA3LCAweEM4LCAweDNGLCAweDAwLCAweDNGLCAweEEwLCAweEZELCAweDAyLCAweEYwLCAweDBCLCAweEMwLAorMHgxNywgMHg2MSwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzRiwgMHgwMCwgMHhCMywKKzB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsCisweDBBLCAweEMwLCAweDBDLCAweDAxLCAweDMzLCAweDAwLCAweENDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBCLCAweDAwLAorMHhGQiwgMHgwNiwgMHhFQywgMHgwNSwgMHgzMCwgMHg0RiwgMHhDMSwgMHgyRiwgMHgwMCwgMHhGMywgMHgxNCwgMHhGQywgMHgyMywKKzB4RjAsIDB4MEIsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RjcsIDB4MDQsIDB4Q0MsIDB4MjIsIDB4MzQsIDB4MDMsIDB4QzAsIDB4MEMsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDA3LCAweDEwLCAweDkxLCAweDgwLAorMHg0NCwgMHgwMCwgMHg3MCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHg0MywgMHgxMCwgMHgwOSwKKzB4NDgsIDB4ODQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MjcsIDB4MDAsIDB4RjksCisweDBCLCAweDQ0LCAweDU1LCAweDE1LCAweDJGLCAweDQwLCAweDZGLCAweDAwLCAweEQxLCAweDAzLCAweDcwLCAweDNCLCAweEQwLAorMHgzOSwgMHg0MCwgMHg0NywgMHg0MCwgMHhGMSwgMHgwMCwgMHg2QywgMHgwQSwgMHgxMCwgMHgxNSwgMHg0MCwgMHgwRCwgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MDUsIDB4MDEsIDB4MjAsIDB4MTQsCisweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDIzLCAweDAwLCAweDBELCAweDIwLCAweDE0LCAweDEzLCAweDEwLCAweDAwLCAweDQwLAorMHgwMSwgMHgwMiwgMHgwMSwgMHgyMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MiwgMHgyMywgMHgwMCwgMHhDMSwgMHgwNCwKKzB4MjQsIDB4ODEsIDB4MTAsIDB4MEMsIDB4NEEsIDB4MjcsIDB4MDgsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDEsIDB4ODgsCisweDQwLCAweDAzLCAweDAwLCAweEM1LCAweDA4LCAweDQ0LCAweEEyLCAweDEzLCAweDA4LCAweDQ2LCAweDRDLCAweDgwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgwNSwgMHgxMSwgMHgxMSwgMHgwNCwgMHg1NCwgMHgwNCwKKzB4RDAsIDB4MTEsIDB4NDEsIDB4NDcsIDB4MDAsIDB4MUQsIDB4MTEsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MTUsIDB4NDAsIDB4NDEsCisweDAwLCAweDExLCAweDAxLCAweDQ0LCAweDA0LCAweEQyLCAweDMxLCAweDRDLCAweEU3LCAweDAwLCAweEQxLCAweDAwLCAweDY0LAorMHgyMSwgMHgxMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwMSwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgxOSwgMHg0OCwKKzB4ODcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NjQsIDB4NDYsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDY3LCAweDAwLCAweDkzLCAweDAwLCAweDVELCAweDQ2LCAweEYwLAorMHgzOSwgMHhDMCwgMHg0NywgMHgwMSwgMHgxRiwgMHgwMywgMHg1QywgMHgwMywgMHgxMCwgMHgyOSwgMHhFMSwgMHg0NSwgMHg0MCwKKzB4OTMsIDB4MDUsIDB4NEMsIDB4MEMsIDB4RDAsIDB4MTksIDB4QzAsIDB4QzcsIDB4MDAsIDB4REIsIDB4MDAsIDB4NkMsIDB4MTcsCisweDMwLCAweDBELCAweDYwLCAweDIzLCAweDQwLCAweERGLCAweDgwLCAweDdDLCAweDAzLCAweEYyLCAweDA5LCAweEMwLCAweEM3LAorMHgwMCwgMHhENywgMHgwMCwgMHgwQywgMHgwRSwgMHgzMCwgMHhCMSwgMHg4MSwgMHgwMCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4NjksIDB4NDAsIDB4OUYsIDB4MDEsIDB4RUMsIDB4MDAsIDB4NzAsIDB4MEIsCisweEMwLCAweDBGLCAweDAwLCAweEFGLCAweDIwLCAweDhDLCAweDAzLCAweEYwLCAweDBCLCAweEUyLCAweDBFLCAweDAwLCAweEFGLAorMHgwMCwgMHhGRCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywgMHgwNiwgMHhGOCwKKzB4MEYsIDB4QzEsIDB4NkYsIDB4MDAsIDB4RjIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4NDAsIDB4NEYsIDB4MDIsCisweEZGLCAweDAwLCAweERGLCAweDAyLCAweEYwLCAweDA3LCAweEUwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHg4MywgMHgwMCwgMHg0RCwgMHgwQSwgMHhGMCwgMHgyMSwgMHhDMCwKKzB4MjQsIDB4ODEsIDB4MUYsIDB4MDIsIDB4NUMsIDB4MDMsIDB4MzAsIDB4QTUsIDB4QzAsIDB4NDQsIDB4MDAsIDB4MUIsIDB4MDAsCisweDdDLCAweDBBLCAweDMyLCAweDI5LCAweEM5LCAweEE2LCAweDQyLCAweEMzLCAweDAwLCAweDVDLCAweDAxLCAweDM0LCAweDBELAorMHhDMCwgMHgyNywgMHg4MCwgMHhEMywgMHgwOCwgMHg3QywgMHgwMywgMHgzMCwgMHg0OSwgMHhDMCwgMHgwNywgMHgxMCwgMHhERiwKKzB4MDAsIDB4NEMsIDB4MjIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEzLCAweEEwLCAweDJDLCAweDE0LCAweDkxLCAweDIwLCAweDQ0LCAweDJBLCAweEQwLCAweDg5LCAweDQxLCAweDg0LAorMHgwMCwgMHgxRCwgMHgwOSwgMHhGMCwgMHgwMywgMHgzMCwgMHg4NSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgxMSwgMHgxQSwgMHg3NCwKKzB4ODIsIDB4MzAsIDB4MDEsIDB4NDAsIDB4QTQsIDB4MDAsIDB4RkIsIDB4NDAsIDB4NDQsIDB4MDEsIDB4MTAsIDB4MEYsIDB4NDAsCisweDI3LCAweDAwLCAweEYxLCAweDAxLCAweEY0LCAweDAzLCAweDUwLCAweDc5LCAweDQwLCAweDAzLCAweDAwLCAweEZELCAweDI0LAorMHg1NCwgMHgwMiwgMHhCMCwgMHgxQywgMHg0MCwgMHg2RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4MjAsIDB4MzAsIDB4MDgsIDB4ODEsIDB4MDAsIDB4MjAsIDB4MjYsIDB4RDEsIDB4MzgsIDB4NDAsIDB4NjAsIDB4MjAsCisweDhELCAweDIwLCAweDM0LCAweDAzLCAweDEwLCAweDM5LCAweDQwLCAweDAwLCAweDAwLCAweDA5LCAweDAzLCAweDE2LCAweDAyLAorMHgxMCwgMHgyMCwgMHg0MCwgMHgwNCwgMHgwMSwgMHhDMSwgMHgwMCwgMHg1NCwgMHgwMiwgMHgxMCwgMHgzQywgMHg0MCwgMHgzMSwKKzB4MDAsIDB4QzgsIDB4MDEsIDB4MTQsIDB4MDMsIDB4OTAsIDB4MjgsIDB4NDAsIDB4MTMsIDB4MDAsIDB4RDksIDB4MDAsIDB4MDYsCisweDAzLCAweDEwLCAweDhDLCAweDQwLCAweDVGLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHgwMiwgMHg1MCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhBNCwgMHgwNywgMHhEMCwgMHgxNiwgMHg2MCwgMHg3QSwgMHgyMCwgMHhFRCwKKzB4MDEsIDB4QjQsIDB4MDMsIDB4OTAsIDB4MUUsIDB4NDAsIDB4NDAsIDB4MDAsIDB4RTEsIDB4NDEsIDB4QjYsIDB4MEQsIDB4OTQsCisweDE2LCAweDQyLCAweDRBLCAweDAwLCAweEM5LCAweDAxLCAweDg0LCAweDA1LCAweDEwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLAorMHhFOSwgMHgwMSwgMHhCNCwgMHgyNywgMHhEMCwgMHgxQSwgMHg0MCwgMHg1QiwgMHgwMCwgMHhDRCwgMHgwMSwgMHgxNiwgMHgyNiwKKzB4OTAsIDB4OUEsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsCisweDMwLCAweDAyLCAweDAxLCAweDAwLCAweDBELCAweDAxLCAweEYwLCAweDhELCAweEMwLCAweDMwLCAweDA0LCAweENELCAweDMwLAorMHg3QywgMHgyMywgMHgxMCwgMHgwOCwgMHhDMCwgMHgwMCwgMHgwMSwgMHgwQiwgMHgwMCwgMHg3QywgMHgwQiwgMHgzMCwgMHg4OCwKKzB4QzAsIDB4MTIsIDB4MDIsIDB4QzMsIDB4MDAsIDB4NUMsIDB4MjIsIDB4MzIsIDB4MEMsIDB4QzEsIDB4MjMsIDB4MDAsIDB4QzksCisweDA4LCAweDdDLCAweDAzLCAweDMwLCAweDA4LCAweEMwLCAweDIzLCAweDAwLCAweENGLCAweDAwLCAweDBDLCAweDAzLCAweDMwLAorMHgwNCwgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgxRCwKKzB4MTQsIDB4N0YsIDB4MDAsIDB4REQsIDB4MDEsIDB4RjIsIDB4ODcsIDB4RDAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDgsIDB4RkMsCisweDEzLCAweDcwLCAweDBGLCAweEMwLCAweDBGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAxLCAweDcwLCAweDBGLCAweEM4LAorMHgxRCwgMHg0MCwgMHhGRiwgMHgxMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHhBQiwgMHg0MiwgMHhGNywgMHgyMCwKKzB4RkMsIDB4MDMsIDB4NzAsIDB4MEIsIDB4QzgsIDB4MkYsIDB4MTIsIDB4RkMsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDMsCisweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDI3LCAweDAwLAorMHhERiwgMHgwMCwgMHg0RSwgMHgwMywgMHgzMSwgMHgwRCwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMSwgMHhDQywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MDQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MUYsCisweDIwLCAweERGLCAweDA2LCAweDVDLCAweDAwLCAweEYwLCAweDJELCAweEMxLCAweEI2LCAweDAwLCAweEQzLCAweDAwLCAweDdDLAorMHgwMywgMHhBOCwgMHgxRCwgMHhDMCwgMHgxNSwgMHgwMCwgMHhERiwgMHgwNiwgMHg0RCwgMHgwMSwgMHgzMCwgMHgxRCwgMHhDMCwKKzB4NTQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MjksIDB4MDksIDB4RUQsCisweDIwLCAweEM0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEZELCAweDAwLCAweDg0LCAweDA3LCAweEQwLAorMHgwQywgMHg0MCwgMHgwOCwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEOCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwOCwKKzB4RkQsIDB4MTAsIDB4QUMsIDB4MDAsIDB4RDAsIDB4MkUsIDB4NDQsIDB4M0IsIDB4MDAsIDB4RTEsIDB4MDIsIDB4RjQsIDB4MDMsCisweDEwLCAweDBFLCAweDQwLCAweDE4LCAweDAwLCAweEVELCAweDE2LCAweEM0LCAweDAyLCAweEIwLCAweDBBLCAweEMwLCAweDRFLAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhGOSwgMHgwMCwgMHhFRCwgMHg4MSwKKzB4ODQsIDB4MDcsIDB4MTEsIDB4MUUsIDB4NDgsIDB4RkIsIDB4MDgsIDB4RUQsIDB4MTEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUUsCisweDQwLCAweDQ4LCAweDAwLCAweEUxLCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQxLCAweEZCLCAweDAwLCAweEVELAorMHgwNSwgMHg5NCwgMHg0NCwgMHhEOSwgMHg1RSwgMHg0MCwgMHg3MywgMHgwMCwgMHhFNSwgMHgwNSwgMHhCNCwgMHgwNywgMHg5MCwKKzB4MUMsIDB4NDQsIDB4NzksIDB4MDAsIDB4RUQsIDB4NDEsIDB4ODQsIDB4MDcsIDB4MTAsIDB4MTQsIDB4NDAsIDB4MDQsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweEIzLCAweDA0LCAweENELCAweDAyLCAweDA1LAorMHg4MywgMHgxMiwgMHg2QywgMHg2MCwgMHg3MywgMHgxMCwgMHhDRCwgMHgwMywgMHgwNCwgMHgwMywgMHhEMCwgMHgxQywgMHg1MCwKKzB4MzAsIDB4MDIsIDB4QzEsIDB4MDksIDB4MzQsIDB4MEIsIDB4RDAsIDB4M0MsIDB4NDQsIDB4NzMsIDB4MDEsIDB4Q0QsIDB4NDAsCisweDI0LCAweDA0LCAweEQ4LCAweDBDLCAweDQwLCAweDczLCAweDgwLCAweEM1LCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBDLAorMHg0MiwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwgMHgwMiwgMHg5MCwgMHgwMCwgMHg1MCwgMHg0QSwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4NUQsIDB4MDAsIDB4N0YsIDB4MDAsIDB4Q0MsIDB4MDUsCisweDMwLCAweDI3LCAweEMwLCAweDFGLCAweDAwLCAweDdGLCAweDA4LCAweDRELCAweDAxLCAweEYwLCAweDE3LCAweEMxLCAweDVDLAorMHg0MCwgMHg3MywgMHgwMSwgMHhGQywgMHgwMSwgMHhGMCwgMHgyNywgMHg0MCwgMHg1RiwgMHgwMCwgMHg1RiwgMHgwMCwgMHhEQywKKzB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NTYsIDB4NDEsIDB4NTcsIDB4MDAsIDB4N0MsIDB4MDEsIDB4QjAsIDB4MDUsIDB4QzAsCisweDFELCAweDg5LCAweDVGLCAweDAwLCAweDhDLCAweDAxLCAweDMwLCAweDA3LCAweEMwLCAweDVDLCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHg4MSwgMHgwOCwgMHgxRiwgMHgxMCwgMHg3QywgMHgyNCwgMHhGNCwKKzB4QTEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzQsIDB4NDcsIDB4MDgsCisweDFGLCAweDI2LCAweDdDLCAweDAwLCAweEYwLCAweDQxLCAweEMyLCAweDg3LCAweDAwLCAweDBGLCAweDAwLCAweDdDLCAweDAwLAorMHhGMiwgMHgwMCwgMHhDMCwgMHgwNywgMHgwMCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwMywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4NUMsIDB4MDQsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDgzLCAweDAwLCAweDBDLCAweDAyLCAweDMwLCAweDg5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhEMCwgMHg2MCwgMHgwMiwgMHg5MywKKzB4MDEsIDB4N0MsIDB4NDYsIDB4RjAsIDB4NTksIDB4QzAsIDB4MjMsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NEMsIDB4NDIsIDB4QjAsCisweDA5LCAweEMwLCAweDIyLCAweDAxLCAweDkzLCAweDAwLCAweDNDLCAweDAyLCAweDkwLCAweDQ5LCAweEMwLCAweEE3LCAweDQwLAorMHg5MywgMHgwMCwgMHg0RCwgMHgwMiwgMHgxNCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4RTQsIDB4MjEsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MEUsIDB4MTQsIDB4MjksIDB4QzAsCisweDI1LCAweDAyLCAweDlELCAweDFCLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDk1LCAweDEyLAorMHg1QywgMHgyMiwgMHhEMiwgMHgxOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5MSwgMHg4MCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgyOSwKKzB4NDEsIDB4NjQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4NTAsIDB4MzksIDB4NDEsIDB4NjcsIDB4MDAsIDB4OTEsCisweDAyLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHhBMCwgMHg2NCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgyMiwgMHgxMCwgMHgwOSwgMHg0MSwgMHgyNywKKzB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTksIDB4MDgsIDB4NzQsCisweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAxLCAweDk5LCAweDAwLCAweDA0LCAweDgyLCAweDk0LCAweDA5LCAweDQwLAorMHgyNiwgMHgwMCwgMHg5NSwgMHgwMCwgMHg3NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgyNywgMHgyMCwgMHg4OSwgMHg0MiwKKzB4NDQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDIwLCAweDIwLCAweDAxLCAweDgxLCAweDA0LCAweDA0LCAweDEyLCAweDEwLCAweDA4LCAweDQwLCAweDIxLCAweDgyLAorMHg4RCwgMHgxMCwgMHgzNCwgMHgxMiwgMHhEMCwgMHg1OCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4RCwgMHgxMCwgMHgxNCwgMHg0MiwKKzB4RDAsIDB4NzgsIDB4NDEsIDB4MzMsIDB4MDYsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MjAsCisweDAxLCAweDg1LCAweDA0LCAweDM0LCAweDUyLCAweDU5LCAweDQ4LCAweDQwLCAweDIzLCAweDAxLCAweDg5LCAweDA0LCAweDQ0LAorMHgxMiwgMHg1MCwgMHg0OCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwKKzB4QjgsIDB4ODYsIDB4NDIsIDB4MDMsIDB4MEEsIDB4NDUsIDB4MzEsIDB4MzAsIDB4RTEsIDB4NDAsIDB4OTcsIDB4MDQsIDB4MUYsCisweDA4LCAweDdDLCAweDI4LCAweEYwLCAweEExLCAweEMwLCAweDgwLCAweDAyLCAweDFCLCAweDA2LCAweDdDLCAweDE5LCAweEYwLAorMHgyMSwgMHhDMCwgMHg4NywgMHgwMSwgMHgxQiwgMHgxRSwgMHg0QywgMHgyOCwgMHhCMSwgMHhBMSwgMHhDMCwgMHgwNiwgMHg0MCwKKzB4MTcsIDB4MDAsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MDEsIDB4ODAsIDB4MDcsIDB4MDAsIDB4MEIsIDB4MEEsIDB4NEMsIDB4MjgsCisweDcwLCAweDAxLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LAorMHgyRiwgMHgwQSwgMHhCRiwgMHgwOCwgMHhGQywgMHgwQSwgMHhGMiwgMHhDQiwgMHhDMCwgMHgyRCwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4N0MsIDB4MjIsIDB4RjAsIDB4OEIsIDB4QzgsIDB4MkQsIDB4MDIsIDB4QjcsIDB4MTQsIDB4REMsIDB4NTIsIDB4RjAsIDB4MEIsCisweEMyLCAweDNGLCAweDAwLCAweDlGLCAweDAwLCAweEZELCAweDgzLCAweEYwLCAweDg5LCAweEMwLCAweDJGLCAweDAyLCAweDlCLAorMHgwOCwgMHg3QywgMHgwMiwgMHg3MCwgMHg4QiwgMHhDOCwgMHgyRSwgMHgwMiwgMHg5NywgMHgwOCwgMHhGQywgMHgyMiwgMHhCMCwKKzB4OEIsIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTgsIDB4MkYsCisweDA1LCAweEQzLCAweDRDLCAweENDLCAweDAyLCAweEYxLCAweDBCLCAweEMwLCAweDJGLCAweDAyLCAweEIzLCAweDA0LCAweEZDLAorMHg1MiwgMHgzMCwgMHhDQiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCMywgMHgwMCwgMHhDQywgMHgyMiwgMHhGMCwgMHg0QiwgMHhDMCwKKzB4MkQsIDB4MDUsIDB4OUYsIDB4MEMsIDB4NUMsIDB4MDIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDUsCisweDVDLCAweDE2LCAweEIwLCAweDBGLCAweEMwLCAweDJDLCAweDAwLCAweEJGLCAweDgwLCAweENELCAweDAyLCAweDMxLCAweDBCLAorMHhDMCwgMHg2NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHgwMSwKKzB4MTEsIDB4MEMsIDB4NDUsIDB4NDgsIDB4RDAsIDB4MDEsIDB4NDEsIDB4MDcsIDB4MDIsIDB4MTEsIDB4NTQsIDB4NzQsIDB4MDAsCisweDM4LCAweEMxLCAweEMwLCAweDkwLCAweDA0LCAweDExLCAweDEwLCAweDQ0LCAweDIwLCAweEQyLCAweDQxLCAweDQxLCAweDA3LAorMHgyMSwgMHgxRCwgMHgwQywgMHg0NCwgMHg0MCwgMHg0MCwgMHgwMSwgMHg0MSwgMHgwNCwgMHgwMiwgMHgxQiwgMHgwMCwgMHg3MCwKKzB4NTQsIDB4MTAsIDB4MDEsIDB4QzAsIDB4OTYsIDB4MDAsIDB4MDMsIDB4MTAsIDB4NDUsIDB4MjAsIDB4NTAsIDB4MDEsIDB4NDAsCisweDcxLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIxLCAweDA1LCAweDgxLAorMHgwNCwgMHgwNCwgMHgzMiwgMHhEMCwgMHg4OCwgMHg2MCwgMHgyMywgMHgwMCwgMHg4MSwgMHgyQywgMHgzNiwgMHgwMiwgMHgxOCwKKzB4NEMsIDB4NjIsIDB4MjEsIDB4NEIsIDB4ODAsIDB4MDgsIDB4MjQsIDB4MDIsIDB4RDAsIDB4QzgsIDB4NDAsIDB4MjEsIDB4MkQsCisweDhELCAweDQ0LCAweDc0LCAweDEyLCAweDgwLCAweDg4LCAweDUwLCAweDIwLCAweDAwLCAweDg1LCAweDAyLCAweDE0LCAweDBBLAorMHg1MCwgMHgwQywgMHg0OCwgMHgyMiwgMHgxMiwgMHg4RCwgMHgwOCwgMHgyNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0OCwKKzB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OTEsIDB4ODIsCisweDQ0LCAweDQyLCAweEQwLCAweDBELCAweDQwLCAweDI3LCAweDA1LCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDQ5LAorMHg0MCwgMHgyNSwgMHgwMSwgMHhEMSwgMHgwMCwgMHg2NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMiwgMHg4RCwKKzB4MDAsIDB4NjQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjQsIDB4MDEsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4NTAsCisweDBELCAweDQwLCAweDI2LCAweDAwLCAweDkxLCAweDAwLCAweDY0LCAweDAyLCAweDUwLCAweDI5LCAweDQwLCAweDYxLCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwgMHgyNSwgMHg0MiwgMHg5MywgMHgwMCwgMHg0RCwKKzB4MDIsIDB4RjAsIDB4NzksIDB4QzAsIDB4NjcsIDB4NDAsIDB4OTMsIDB4MTEsIDB4N0MsIDB4MDIsIDB4MzQsIDB4MzksIDB4QzEsCisweDI1LCAweDAwLCAweDkzLCAweDEwLCAweDZELCAweDRFLCAweEYwLCAweDY5LCAweEMwLCAweEU1LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHg4QSwgMHhCMCwgMHgwOSwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5NywgMHgwMCwgMHg1QywgMHgwMiwgMHg3MCwgMHgwOSwKKzB4QzAsIDB4QTYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkQsIDB4MUEsIDB4MzAsIDB4MjksIDB4QzAsIDB4MTQsIDB4QTAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDY1LCAweDAwLCAweDlGLCAweDIwLCAweDdDLCAweDI2LAorMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwNCwgMHgzQywgMHgwMiwgMHhGMCwgMHgxOSwgMHhEMCwgMHgyNCwKKzB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MjYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4ODQsIDB4OUYsIDB4MDAsIDB4NUMsCisweDIyLCAweDcwLCAweDA5LCAweEMwLCAweDY3LCAweDA4LCAweDlCLCAweDAwLCAweDdDLCAweDAyLCAweDM0LCAweDA5LCAweEMwLAorMHg2NywgMHg4MiwgMHg5RiwgMHgwMCwgMHg1RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg1QiwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MEYsIDB4MDAsIDB4NEUsIDB4NDgsIDB4RjIsCisweDQxLCAweEU0LCAweDg3LCAweDAxLCAweDFGLCAweDA4LCAweDdDLCAweDgwLCAweDcwLCAweDAwLCAweEMwLCAweDg0LCAweDAwLAorMHgxMywgMHgwMSwgMHg3QywgMHgwMCwgMHhGOCwgMHgyMSwgMHhDNCwgMHg4NywgMHgwOCwgMHgxRiwgMHgwMCwgMHg1QywgMHgwOCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4NDEsIDB4QzAsIDB4ODcsCisweDQwLCAweDEzLCAweDAwLCAweDBDLCAweDAwLCAweEYwLCAweEEwLCAweEMwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxQywgMHgwMCwgMHg1RCwgMHgyMCwgMHhDNiwgMHgxRCwgMHg3MCwgMHgyNywKKzB4NDAsIDB4NUYsIDB4MDQsIDB4N0QsIDB4MDgsIDB4NzQsIDB4MTUsIDB4RDAsIDB4MjcsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NzEsCisweDAwLCAweERDLCAweDA5LCAweEYwLCAweDM3LCAweDYwLCAweDlGLCAweDAwLCAweDVELCAweDAwLCAweDA0LCAweDAxLCAweDMwLAorMHg0NywgMHg0MCwgMHgxNywgMHg0MCwgMHg1MiwgMHgwMCwgMHg1QywgMHgwMSwgMHhEMCwgMHgyNiwgMHg0MCwgMHgxNywgMHgwNCwKKzB4NzQsIDB4ODIsIDB4NDQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEEwLCAweEYyLCAweDA0LCAweENELCAweDAwLCAweDI0LCAweDBGLCAweDUwLCAweDhDLCAweDQwLAorMHg3NywgMHgwMCwgMHhDRCwgMHgwMywgMHgzNCwgMHgwMywgMHhEMCwgMHgyQywgMHg0MSwgMHgzNiwgMHgwMCwgMHhEMSwgMHgyMCwKKzB4MzQsIDB4NDcsIDB4RDIsIDB4MEMsIDB4NDEsIDB4QjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4NTAsIDB4MUMsCisweDQwLCAweDIzLCAweDA4LCAweDg4LCAweDIwLCAweDc0LCAweDAzLCAweEQwLCAweDIwLCAweDYwLCAweDYzLCAweDAwLCAweDkwLAorMHgxMiwgMHgwNSwgMHgwMywgMHhEMCwgMHgxQywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4ODAsIDB4QTgsIDB4MTAsIDB4RUQsIDB4MDAsIDB4QTQsIDB4MDEsIDB4NTAsIDB4MEUsIDB4NDAsIDB4M0IsCisweDIwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBCLCAweDYwLCAweDI4LCAweDAwLCAweEUxLCAweDAwLCAweDk0LAorMHgwOSwgMHgxMCwgMHgwRSwgMHg0MSwgMHg5QiwgMHgwOCwgMHhDRCwgMHgwNCwgMHhDNCwgMHgxMywgMHgxMiwgMHgwNiwgMHg0MCwKKzB4MkIsIDB4MDAsIDB4RTksIDB4MDAsIDB4QjYsIDB4MDMsIDB4RDAsIDB4MDYsIDB4NDAsIDB4NjMsIDB4MDAsIDB4RTUsIDB4MDAsCisweDg0LCAweDAyLCAweEQwLCAweDBFLCAweDYwLCAweDE0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHgxOCwgMHg0OCwgMHgxMCwgMHhGRiwgMHgwMSwgMHhBNSwgMHgwNywgMHg3MCwgMHgxRSwgMHg0MCwgMHg1QiwgMHgwMCwKKzB4RUQsIDB4MDEsIDB4QkMsIDB4ODcsIDB4RjAsIDB4MTYsIDB4QzAsIDB4N0EsIDB4NDIsIDB4RTEsIDB4MDEsIDB4QkMsIDB4MDcsCisweEQwLCAweDE2LCAweDQwLCAweDdCLCAweDAwLCAweEVGLCAweDA5LCAweDlELCAweDVGLCAweDcwLCAweDE2LCAweEU0LCAweDczLAorMHgwMCwgMHhBQiwgMHgwMSwgMHhCQywgMHgwNywgMHhGMCwgMHgxMiwgMHg4MCwgMHg3QiwgMHgwMCwgMHgyMSwgMHgwMSwgMHg4QywKKzB4MDcsIDB4RjAsIDB4MUUsIDB4RDAsIDB4NTQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEI4LCAweDA1LCAweDAwLCAweERGLCAweDE2LCAweDVDLCAweDAxLCAweDcwLCAweDBELCAweEMwLCAweDE3LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMywgMHhBMSwgMHg0MiwgMHhEMSwgMHgzNywgMHgyMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwKKzB4MDUsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDgsIDB4M0MsIDB4MUIsIDB4NzAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4NDAsCisweEQzLCAweDAwLCAweDVDLCAweDgzLCAweEYwLCAweDBELCAweDgwLCAweDM3LCAweDAwLCAweDVCLCAweDIwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwQywgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwKKzB4NEQsIDB4MDAsIDB4RjcsIDB4MzEsIDB4Q0MsIDB4MTMsIDB4RjAsIDB4OTcsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RkYsIDB4MDEsCisweEZDLCAweDA2LCAweEIwLCAweDlGLCAweEMwLCAweDdDLCAweDAwLCAweDczLCAweDA5LCAweEZDLCAweDI3LCAweEYwLCAweDFGLAorMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHg4MSwgMHhDQywgMHgwNywgMHg3MCwgMHg5RiwgMHhDMCwgMHg2QywgMHg0MCwgMHhCNywKKzB4NDEsIDB4Q0MsIDB4MDcsIDB4QjAsIDB4MUEsIDB4QzAsIDB4NkMsIDB4MjAsIDB4QkYsIDB4MjEsIDB4Q0MsIDB4MDcsIDB4RjAsCisweDFCLCAweEMwLCAweDBCLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDBELAorMHgwMCwgMHhFQiwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHg4RSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwKKzB4MjIsIDB4RDAsIDB4QzYsIDB4NTAsIDB4MjgsIDB4MzAsIDB4NjAsIDB4MTgsIDB4OUMsIDB4MjMsIDB4RDAsIDB4MEUsIDB4QzAsCisweDM5LCAweDAyLCAweEVELCAweDA0LCAweDg0LCAweDEzLCAweDQwLCAweDAzLCAweEMwLCAweDJBLCAweDAwLCAweEU1LCAweDAwLAorMHhBQywgMHgyMywgMHgxMCwgMHgwRSwgMHhDMiwgMHgyQSwgMHgwMCwgMHhFOSwgMHgwMCwgMHg4NSwgMHg0MiwgMHhEMCwgMHgwRSwKKzB4NDAsIDB4NTcsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsCisweEU1LCAweDEwLCAweDg0LCAweDIzLCAweEQwLCAweDA2LCAweDQyLCAweDE4LCAweDA0LCAweDZELCAweDAwLCAweEI0LCAweDAyLAorMHhEMCwgMHgwNiwgMHg0MiwgMHgzOCwgMHgwMCwgMHg2MSwgMHg4MCwgMHhCNCwgMHgwMiwgMHhEMCwgMHg4QSwgMHg0MCwgMHhCQiwKKzB4MDAsIDB4RUQsIDB4MjAsIDB4QzQsIDB4NEIsIDB4NDIsIDB4MDYsIDB4NDAsIDB4MzIsIDB4MDAsIDB4QTUsIDB4MDAsIDB4QTQsCisweDAzLCAweDkwLCAweDAyLCAweDQwLCAweDI4LCAweDAwLCAweEE1LCAweDA4LCAweEE0LCAweDAzLCAweEQwLCAweDBBLCAweDQwLAorMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgwMSwgMHgwMCwgMHhEMSwKKzB4MDEsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MjgsIDB4NTAsIDB4ODAsIDB4MDQsIDB4OEQsIDB4NDcsIDB4MzQsIDB4MDIsIDB4RDAsCisweDA1LCAweDU4LCAweDM0LCAweDQyLCAweDAxLCAweDkxLCAweDE0LCAweENFLCAweEQwLCAweDM5LCAweDQwLCAweDAxLCAweDIwLAorMHhDRCwgMHgwMCwgMHgwNCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMiwgMHg0MCwgMHhDNSwgMHgwMCwgMHgyNCwgMHgwMywKKzB4MTAsIDB4MEMsIDB4NDAsIDB4MjIsIDB4MDAsIDB4QzksIDB4MDAsIDB4MjQsIDB4MEUsIDB4RDAsIDB4OEMsIDB4NDAsIDB4MUIsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDA1LCAweDA2LCAweEY1LCAweDIwLAorMHg0QywgMHgwMiwgMHhGMCwgMHhCOSwgMHhDMSwgMHhBNCwgMHgwMCwgMHgxRiwgMHgwNSwgMHg3NCwgMHg4MiwgMHhCMCwgMHgwOSwKKzB4QzAsIDB4NzQsIDB4MDAsIDB4OTMsIDB4MDMsIDB4N0MsIDB4NDIsIDB4RDAsIDB4MzksIDB4QzEsIDB4QjcsIDB4MDAsIDB4RkYsCisweDAwLCAweENDLCAweDA3LCAweDcwLCAweDA1LCAweEMwLCAweDI2LCAweDQwLCAweDg1LCAweDAwLCAweEVDLCAweDAzLCAweEIwLAorMHgwMSwgMHhDOCwgMHgyNCwgMHgwMCwgMHg1NywgMHg4MCwgMHg2QywgMHgwRSwgMHhGMCwgMHgwRCwgMHhDMCwgMHg1NywgMHgyMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MDcsIDB4MjAsIDB4REYsIDB4MDAsIDB4N0MsCisweDI4LCAweEYwLCAweDIxLCAweEMwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAyLCAweEYyLCAweDE5LCAweEMwLAorMHgyNywgMHgwNCwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMCwgMHhGMCwgMHg0MSwgMHhDMCwgMHgxNywgMHgwMCwgMHhDRiwgMHgwMCwKKzB4N0QsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MjMsIDB4NDAsIDB4OUUsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsCisweEMwLCAweDI3LCAweDAwLCAweDVDLCAweDAwLCAweDFDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgwQiwgMHgwMCwgMHhGQiwgMHgwMCwgMHhDQywgMHg0MiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MkIsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzQsCisweDAwLCAweEIzLCAweDAwLCAweEI0LCAweDAwLCAweDMwLCAweDAzLCAweEMwLCAweDNDLCAweDAwLCAweERGLCAweDAwLCAweENDLAorMHgwMywgMHhGMCwgMHgwNiwgMHhDMCwgMHhFQywgMHgwMCwgMHg5MywgMHgwOCwgMHgwQywgMHgwMywgMHgzNCwgMHg1MywgMHg0MCwKKzB4MzgsIDB4MDAsIDB4RTMsIDB4QzAsIDB4Q0MsIDB4NTYsIDB4MzEsIDB4MEYsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweEM2LCAweDAxLCAweEQxLCAweDAwLCAweDQ0LCAweDE0LCAweEQwLAorMHgzOSwgMHg0MCwgMHg0NywgMHgwMSwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwMiwgMHhDOCwgMHgxMSwgMHg1MCwgMHgzNCwgMHgwMCwKKzB4MUYsIDB4ODMsIDB4NzQsIDB4MEMsIDB4MTIsIDB4MzEsIDB4NDQsIDB4QzQsIDB4MEMsIDB4REYsIDB4MDAsIDB4NTQsIDB4MDMsCisweEYwLCAweDI1LCAweDQ0LCAweDI0LCAweDAwLCAweDkxLCAweDAxLCAweDQ1LCAweDAzLCAweEIwLCAweDA0LCAweDQwLCAweDM1LAorMHgwMCwgMHhEMywgMHgwMywgMHg1NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4NDYsIDB4NDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDQsIDB4RDAsIDB4MTEsCisweDQwLCAweDY3LCAweDAwLCAweDExLCAweDExLCAweDc2LCAweDA2LCAweEQxLCAweDE5LCAweDU0LCAweDM0LCAweDAwLCAweDkxLAorMHgwMSwgMHg3NiwgMHg0NiwgMHgxMCwgMHgzOSwgMHg2MCwgMHg2NCwgMHgxMCwgMHhERCwgMHg0MCwgMHg0NCwgMHgwMywgMHhEMCwKKzB4MjUsIDB4NDAsIDB4MjQsIDB4MTgsIDB4OTEsIDB4NDAsIDB4NTQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MjUsIDB4NDAsCisweEQxLCAweDBBLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhDMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MiwKKzB4MjMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsCisweDM0LCAweDAyLCAweDEwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweEM1LCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDAwLAorMHg1MCwgMHgyMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHgxNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0OCwgMHgyMSwgMHgwMCwgMHhDOSwKKzB4ODAsIDB4MTQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NEMsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweEUzLCAweDAwLCAweDRDLCAweDAyLCAweEQwLCAweDAxLCAweEMyLCAweDI3LAorMHgwMCwgMHgxMywgMHgwMCwgMHg3RSwgMHgwMiwgMHhDMCwgMHgwMywgMHhDMCwgMHgzQywgMHg0MCwgMHg5MSwgMHgwMCwgMHg3QywKKzB4MDAsIDB4MzgsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4RkMsIDB4MDAsIDB4Q0MsIDB4ODMsIDB4RDAsIDB4MDUsIDB4QzAsCisweDI0LCAweDQwLCAweDkzLCAweDQwLCAweDVDLCAweDAzLCAweDEwLCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweEMzLCAweDgwLAorMHg0QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHgwNywgMHg4MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4QjgsIDB4MEQsIDB4MDAsIDB4RjcsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4NDAsCisweEJGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDAzLCAweEMwLCAweDNGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLAorMHhGMCwgMHgwMywgMHhDNCwgMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCOCwgMHgwMywgMHhGMCwgMHgwMywgMHhDNCwgMHgyRiwKKzB4NDAsIDB4QkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RjcsIDB4MDAsIDB4RkMsCisweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDE3LCAweEUwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHg4MCwgMHg3RiwgMHgwMCwgMHhCRiwgMHgyMCwgMHhDQywgMHgxMywgMHg3MCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMiwgMHhGMywKKzB4MDEsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RkYsIDB4MDEsIDB4OEMsIDB4MDcsIDB4MzAsCisweDFGLCAweEMwLCAweDdELCAweDAwLCAweEYzLCAweDAxLCAweENDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDdGLCAweDAwLAorMHhGMywgMHgwMywgMHhFQywgMHgwNywgMHhCMCwgMHgxNiwgMHhDMCwgMHg1QywgMHgwMCwgMHgyQiwgMHgwMSwgMHhFQywgMHgwNSwKKzB4MzAsIDB4MEIsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsCisweDM3LCAweDAwLCAweDlELCAweDAwLCAweEVDLCAweDBCLCAweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAxLCAweDExLCAweDAwLAorMHg0NCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgyMCwgMHg0MCwgMHgwMCwgMHgxMCwgMHgwMSwKKzB4NDAsIDB4MDQsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MTEsCisweDg0LCAweDRDLCAweDA0LCAweDUyLCAweDFELCAweDQwLCAweDU1LCAweDAwLCAweDExLCAweDAxLCAweDU0LCAweDAzLCAweEI0LAorMHgwMSwgMHg0MCwgMHgwRCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywKKzB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MjMsIDB4RDAsIDB4MEMsIDB4NjAsIDB4MzMsIDB4MDEsIDB4QzEsIDB4MDAsIDB4NDQsCisweDgzLCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweERELCAweDAwLCAweDA0LCAweDAzLCAweDEwLCAweDBELCAweDQ4LAorMHgzNCwgMHg4MCwgMHhDMSwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzNSwgMHgwMCwgMHhDMSwgMHgwNCwKKzB4NjQsIDB4MDMsIDB4MTAsIDB4MDQsIDB4NDQsIDB4MTYsIDB4ODAsIDB4NTksIDB4MDAsIDB4NjYsIDB4ODMsIDB4NUMsIDB4MDAsCisweDQ0LCAweDRDLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDAwLAorMHg5RCwgMHgyMSwgMHg0NCwgMHgwMywgMHg5MSwgMHgwMSwgMHg2MCwgMHgwMywgMHgwMCwgMHgxMSwgMHgwMCwgMHg2MCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsCisweDgwLCAweDE5LCAweDIwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA2LCAweDAwLCAweDExLCAweDAwLCAweDQ0LAorMHgwMCwgMHg1MCwgMHgxRCwgMHg0QywgMHgxNywgMHgwNCwgMHg1MSwgMHgxMCwgMHg1NCwgMHgwQiwgMHhEQywgMHgxMSwgMHg0MCwKKzB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MzcsIDB4MDAsIDB4MUYsCisweDMzLCAweDQ0LCAweDAzLCAweEQwLCAweDBELCAweEMwLCAweDM3LCAweDEwLCAweEQzLCAweDAwLCAweDRDLCAweDAzLCAweDMwLAorMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg0RCwgMHgwMywgMHgzNCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMCwKKzB4RDMsIDB4MjAsIDB4MEMsIDB4MDMsIDB4MTAsIDB4MEQsIDB4QzAsIDB4MzEsIDB4MDAsIDB4RDMsIDB4MDAsIDB4MkMsIDB4MDMsCisweEIwLCAweDE4LCAweEMwLCAweDkyLCAweDAwLCAweDlCLCAweDAxLCAweDJDLCAweDBCLCAweDcwLCAweDU5LCAweEMyLCAweDAwLAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgxMCwgMHhBRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4NzIsIDB4MDMsIDB4Q0IsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjAsIDB4MDMsCisweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEM4LCAweDBFLCAweDA0LCAweDM3LAorMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwNCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MEYsIDB4QzAsIDB4OEQsIDB4MTAsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MjMsIDB4QjAsIDB4MDksIDB4QzAsIDB4M0YsIDB4MjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDA2LCAweDFGLCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMSwgMHg3QywgMHg0MywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzQsIDB4MUIsIDB4RDMsIDB4MDAsIDB4NEMsIDB4NDcsIDB4MzAsIDB4MUQsIDB4QzAsIDB4NzcsIDB4MDAsIDB4RDcsIDB4MDEsCisweDdDLCAweDQ3LCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAyLCAweERGLCAweDAwLCAweDRELCAweDQzLCAweDMwLCAweDBELAorMHhDMCwgMHgzNSwgMHgwMCwgMHg5RiwgMHgwNiwgMHg0QywgMHgwQiwgMHgzMCwgMHgwMSwgMHhDMCwgMHgyOSwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4NzQsIDB4MTAsIDB4OUQsIDB4MDgsIDB4RjQsIDB4MDMsCisweEQxLCAweDIxLCAweDQwLCAweDA0LCAweDAwLCAweDFELCAweDAzLCAweDFDLCAweDAwLCAweEQwLCAweDgxLCAweDQwLCAweEM0LAorMHgwMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwQywgMHgxMiwgMHgzMSwgMHg0MCwgMHg0NywgMHgwMCwgMHgxNSwgMHgwMywgMHg3NCwKKzB4MDQsIDB4RDAsIDB4MjEsIDB4NDAsIDB4NDQsIDB4MDAsIDB4MUQsIDB4MEIsIDB4NDYsIDB4NDAsIDB4QjIsIDB4QUQsIDB4NDgsCisweEM0LCAweDIyLCAweDhCLCAweDA3LCAweDZDLCAweDBCLCAweEEwLCAweDkxLCAweEMwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHhGMiwgMHgwMCwgMHgwRCwgMHgwOSwgMHg3NCwgMHgxNywgMHhEMCwKKzB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4REQsIDB4MDQsIDB4MzQsIDB4MEIsIDB4RDAsIDB4MkMsIDB4NDAsIDB4RjAsIDB4MDAsCisweEMxLCAweDBDLCAweDU0LCAweDAzLCAweDE0LCAweDRDLCAweDQwLCAweDMzLCAweDAwLCAweEQ5LCAweDA0LCAweDM0LCAweDBCLAorMHhEMCwgMHg0QywgMHg0MCwgMHhCMCwgMHgyMCwgMHhEOSwgMHgwMCwgMHgwNCwgMHgwQiwgMHgxMCwgMHgyNCwgMHg0MCwgMHg1MywKKzB4MDAsIDB4QzEsIDB4MDEsIDB4MjQsIDB4MjIsIDB4OTAsIDB4OTksIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDc4LCAweDAwLCAweDZELCAweDAxLCAweEI0LCAweDQ3LCAweEQ4LCAweDEzLAorMHg0MCwgMHg0QSwgMHgwMCwgMHgyRCwgMHgwMSwgMHhCNCwgMHgwNCwgMHhEMCwgMHgxMiwgMHg0MCwgMHg0QywgMHgwMCwgMHgyMSwKKzB4MDEsIDB4QzQsIDB4MDQsIDB4MTAsIDB4MTIsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MkQsIDB4MDgsIDB4QjQsIDB4MDAsIDB4RDAsCisweDEyLCAweDQwLCAweDQ4LCAweDAwLCAweDJELCAweDMxLCAweDg0LCAweDA0LCAweDkwLCAweDlGLCAweDQ0LCAweDVFLCAweDA4LAorMHg3OSwgMHgyMSwgMHhBNCwgMHgwRiwgMHg5MCwgMHgxMiwgMHg0OCwgMHgzQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MjMsIDB4RjAsIDB4MEMsIDB4QzAsCisweDMyLCAweDAwLCAweENGLCAweDAwLCAweDNDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDMwLCAweDAwLCAweEQzLCAweDAwLAorMHgxQywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwgMHgzNywgMHg4MCwgMHhDOSwgMHgwMCwgMHgzQywgMHgwMywgMHhEMCwgMHgwRCwKKzB4NDAsIDB4MzAsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsIDB4MjMsIDB4MzAsIDB4MDQsIDB4QzAsIDB4MTMsIDB4MTQsIDB4QzMsCisweDAwLCAweDRDLCAweDIzLCAweEIwLCAweDg4LCAweEM2LCAweDRCLCAweDY4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHhCOCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHg4MywgMHhGMCwgMHgwMiwgMHhDMCwgMHgwRCwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDIsIDB4M0YsIDB4MDgsIDB4N0MsCisweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDM2LCAweDA4LCAweEZDLCAweDEwLCAweEYwLCAweDAxLCAweDgwLAorMHgwRiwgMHgwMCwgMHgzRSwgMHgwMCwgMHhCQywgMHg4NCwgMHhGOSwgMHgwRiwgMHhDOCwgMHgxOSwgMHgwMCwgMHg3RiwgMHgwMCwKKzB4RkMsIDB4MjMsIDB4RjAsIDB4MDMsIDB4QzgsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweEEwLCAweDM3LCAweDEwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwNywgMHgzNCwgMHgxRCwgMHhEMCwgMHgzMCwgMHgwMCwgMHhEMywgMHgwMSwgMHg0RCwgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MUQsIDB4RDAsIDB4MzQsCisweDAwLCAweEQ3LCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDFDLCAweEQwLCAweDU0LCAweDAwLCAweEQzLCAweDAwLCAweDRDLAorMHgwMywgMHhEMSwgMHgwOSwgMHhDMCwgMHg0MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4ODgsIDB4MzksIDB4MDAsIDB4NkQsIDB4MDAsIDB4QjQsIDB4MkIsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4MkQsCisweDAwLCAweEY0LCAweDAwLCAweDEwLCAweDAzLCAweDQwLCAweDA4LCAweDAwLCAweDMxLCAweDAwLCAweDg0LCAweDAwLCAweEQwLAorMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMCwgMHhEMCwgMHgwMywgMHg0MCwgMHgwOCwgMHgxMCwKKzB4MkQsIDB4MDAsIDB4QTQsIDB4MDAsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MTgsIDB4NDAsIDB4RTEsIDB4MDAsIDB4OTQsIDB4MDMsCisweEQwLCAweDBFLCAweDQwLCAweDRGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLAorMHg3OSwgMHgwMCwgMHhFRCwgMHgwMywgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwKKzB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4N0MsIDB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUUsCisweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDc4LCAweDAwLCAweEVELAorMHgwMSwgMHhBNSwgMHgwNywgMHhEMCwgMHgxRiwgMHg0OSwgMHg1OCwgMHg4MCwgMHhGNSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwKKzB4MUUsIDB4NDIsIDB4MTMsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsCisweDAwLCAweERELCAweDAxLCAweDM0LCAweDAzLCAweEQwLCAweDAxLCAweDQwLCAweDAzLCAweDAwLCAweDBELCAweDAwLCAweDM0LAorMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0NCwKKzB4MDcsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MEQsIDB4MDAsCisweDI0LCAweDAwLCAweEQwLCAweDVDLCAweDQ0LCAweEQwLCAweDAxLCAweEM1LCAweDEzLCAweDE0LCAweDRGLCAweEQ4LCAweDVELAorMHg0MCwgMHg1QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNSwgMHgwMCwKKzB4N0YsIDB4MDIsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsCisweDMwLCAweDA1LCAweEMwLCAweDE0LCAweDUwLCAweDUzLCAweDAwLCAweDRDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LAorMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNCwgMHgwMCwgMHg1RiwgMHgwMCwgMHg0NCwKKzB4MDEsIDB4RDAsIDB4MjcsIDB4QzAsIDB4REMsIDB4MDAsIDB4NjcsIDB4MDcsIDB4OEMsIDB4MDEsIDB4RjAsIDB4NTcsIDB4NDQsCisweDVGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDg3LCAweDAwLCAweDFGLAorMHgxMiwgMHg3QywgMHgwMCwgMHhGMiwgMHgyMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMiwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MDMsIDB4QzgsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MjMsIDB4QzAsIDB4MEYsIDB4MDAsCisweDNGLCAweDAyLCAweEZDLCAweDgwLCAweEYzLCAweDIzLCAweEMwLCAweDhGLCAweDAwLCAweDNGLCAweDIyLCAweERDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxQiwgMHgwMCwgMHg3QywgMHgyMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHg0QiwKKzB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDUsCisweDRDLCAweDA2LCAweEYwLCAweDk5LCAweEMwLCAweDI0LCAweDAwLCAweDkzLCAweDA1LCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHg2NywgMHg0MCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgzOSwgMHhDMCwgMHg2NywgMHg0MCwgMHg5MywKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDMsIDB4NEMsIDB4MjIsIDB4RjAsCisweDQ5LCAweEUwLCAweEE3LCAweDAwLCAweDlGLCAweDAwLCAweDVFLCAweDBBLCAweDMwLCAweDA5LCAweEMwLCAweDQwLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHhBNiwgMHgwNCwgMHg5RCwgMHgxMiwgMHg0NCwKKzB4MDIsIDB4RDAsIDB4MjksIDB4NDEsIDB4MjAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MEUsIDB4RDAsIDB4MTksIDB4NDEsCisweDI3LCAweDAwLCAweDkxLCAweDAzLCAweDc0LCAweDAyLCAweEQwLCAweDE5LCAweDQwLCAweDY3LCAweDAwLCAweDkxLCAweDAyLAorMHg3NCwgMHgwMiwgMHhEOCwgMHgzOSwgMHg0MCwgMHgyNywgMHgwMSwgMHg5RCwgMHgwMCwgMHg0NSwgMHg4NiwgMHhEMCwgMHgzOSwKKzB4NDAsIDB4NjcsIDB4MTQsIDB4OTcsIDB4MEEsIDB4NDQsIDB4MEEsIDB4NTYsIDB4NDksIDB4NDAsIDB4MDQsIDB4MDgsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAyLCAweDlELCAweDAwLCAweDY0LCAweDJBLAorMHhEMCwgMHgwOSwgMHg0MCwgMHgyQywgMHgwOCwgMHhCMSwgMHgwMCwgMHhGNCwgMHgwRSwgMHhEMCwgMHgxQiwgMHg0MCwgMHhBRiwKKzB4MDIsIDB4QjEsIDB4MDMsIDB4RjQsIDB4MDIsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MkYsIDB4MDIsIDB4QjEsIDB4MDIsIDB4RjQsCisweDBBLCAweEQxLCAweDFCLCAweDQxLCAweDJGLCAweDAxLCAweEE5LCAweDAwLCAweEM2LCAweDAyLCAweDkxLCAweDA5LCAweDQwLAorMHgyNSwgMHgwMCwgMHg5RCwgMHg0MiwgMHg1NCwgMHgwMiwgMHgxNSwgMHg0OSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MTQsIDB4MjUsIDB4MTIsIDB4RDAsCisweDBBLCAweDQwLCAweDJDLCAweDAwLCAweEUxLCAweDgwLCAweEI0LCAweDAyLCAweEQwLCAweDBBLCAweDRBLCAweDJCLCAweDAwLAorMHhBMSwgMHgwMCwgMHhCNCwgMHgwNiwgMHhEMCwgMHgwRSwgMHg0MCwgMHg2QiwgMHgwMCwgMHhBMSwgMHgwMCwgMHhCNCwgMHgwMiwKKzB4RDIsIDB4MEEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4RUQsIDB4MDgsIDB4ODQsIDB4MDIsIDB4RDIsIDB4MEMsIDB4NEEsIDB4MjMsCisweDAwLCAweDk1LCAweDAwLCAweDY0LCAweDA2LCAweDU4LCAweDQ4LCAweDQwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwNCwgMHg2QywgMHgyOCwgMHhGMCwgMHhBMSwKKzB4QzgsIDB4ODQsIDB4NDIsIDB4MTMsIDB4MEEsIDB4N0MsIDB4MjgsIDB4RjAsIDB4QTEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MTMsCisweDBBLCAweDdDLCAweDI4LCAweEYwLCAweEExLCAweEMwLCAweDg3LCAweDAyLCAweDEzLCAweDBBLCAweDdDLCAweDI4LCAweEQwLAorMHhBMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgwRiwgMHg4MiwgMHhDQywgMHgwMSwgMHhGOCwgMHgwMSwgMHhDQSwgMHgwNSwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4NUMsIDB4MjgsIDB4MzAsIDB4QTEsIDB4QzAsIDB4NzQsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDI3LCAweDA1LCAweEJGLCAweDE0LCAweDVDLCAweDIyLCAweEYwLCAweDA5LCAweEQwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHgyNywgMHgyMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MjAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDA0LCAweDdDLCAweDAyLCAweEUwLCAweDBCLCAweEMwLCAweDJCLCAweDAwLCAweEE3LAorMHg0MCwgMHhEQywgMHgwMiwgMHhGMCwgMHg4QiwgMHhENCwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4ODAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MTQsIDB4RkMsIDB4MzIsIDB4MzAsIDB4MEEsIDB4QzAsIDB4MjQsCisweDAwLCAweEFGLCAweDA4LCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDAyLCAweEIzLCAweDAwLCAweEZDLAorMHgwMiwgMHhGMCwgMHg4QiwgMHhDOCwgMHgyRiwgMHgwOCwgMHhCRiwgMHgwMCwgMHhGQywgMHgyMiwgMHg3MCwgMHgwQiwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4QjMsIDB4MjgsIDB4Q0UsIDB4MDIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkUsIDB4MDAsIDB4QjMsIDB4MDAsCisweEZDLCAweDAyLCAweEMxLCAweDBCLCAweEMyLCAweDc0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxQywgMHgwMCwgMHgwNywgMHgwNSwgMHgxRCwgMHgwNCwgMHg3NCwgMHgzMCwgMHgxMCwgMHgwMSwgMHg0MSwgMHgwNCwgMHgwNCwKKzB4MUQsIDB4MjAsIDB4NzQsIDB4NTAsIDB4RDAsIDB4NDEsIDB4NEMsIDB4MDcsIDB4MDEsIDB4MTEsIDB4MTAsIDB4NzQsIDB4NDAsCisweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDA1LCAweDFELCAweDA0LCAweDc0LCAweDEwLCAweEQwLCAweDAxLCAweDQxLCAweDA3LAorMHgwNCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHhDMCwgMHgxNiwgMHgwMCwgMHgxQiwgMHgwMCwgMHg3NCwKKzB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEEyLCAweDIzLCAweDIxLCAweDhELCAweDE0LCAweDM0LCAweDEyLCAweDEwLCAweDQ4LCAweDQwLCAweDIwLCAweDAwLCAweDhELAorMHgwMCwgMHgzNCwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0MSwgMHgyMywgMHgwMSwgMHg4MSwgMHgwNCwgMHgzNCwgMHgwMiwgMHhEMCwKKzB4MDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4OEQsIDB4MTQsIDB4MzQsIDB4MTIsIDB4NTAsIDB4NDgsIDB4NDAsIDB4MjcsIDB4MDAsCisweDg1LCAweDAwLCAweDA1LCAweDAyLCAweEQwLCAweDA4LCAweDQ0LCAweDI0LCAweDAwLCAweDg1LCAweDQwLCAweDM0LCAweDgyLAorMHhEMSwgMHgwOCwgMHg0MCwgMHg0OCwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwKKzB4MjUsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MDIsIDB4MTIsIDB4MDksIDB4NTAsIDB4MjQsIDB4MjAsIDB4OUQsIDB4MDAsCisweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDQwLCAweDk5LCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgyMCwgMHg5MSwKKzB4MDAsIDB4NjQsIDB4ODIsIDB4RDEsIDB4MTksIDB4NDAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MEEsIDB4RDgsCisweDA5LCAweDQwLCAweDYwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDg4LCAweDI3LAorMHgwMCwgMHg5RCwgMHgwMSwgMHg3QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjEsIDB4MDksIDB4QzAsIDB4MjcsIDB4MjAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4NDAsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAwLAorMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHg4MCwgMHgyMCwgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHg0OSwKKzB4Q0EsIDB4MTQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MjUsIDB4MDAsCisweDlGLCAweDA4LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDQwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDOCwgMHgyNywgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMSwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzYsIDB4MjcsIDB4NTAsIDB4OUYsIDB4ODAsIDB4NUMsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDIwLCAweDlCLCAweDAwLCAweDdFLCAweDEyLCAweEYwLCAweDQ5LCAweEQxLAorMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwKKzB4MDQsIDB4M0MsIDB4NDAsIDB4MzAsIDB4MDEsIDB4RDAsIDB4MDYsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEQsIDB4MDAsIDB4RjAsCisweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDExLCAweEMwLCAweDA2LCAweDAwLAorMHgxRiwgMHgwMSwgMHg3QywgMHgyMCwgMHhGMCwgMHg5MSwgMHhDMCwgMHgwNywgMHgwNCwgMHgxMywgMHg4MCwgMHg3QywgMHg0MCwKKzB4RjAsIDB4MTEsIDB4QzQsIDB4ODQsIDB4MDQsIDB4MUYsIDB4MTAsIDB4NUMsIDB4NDgsIDB4RjAsIDB4MjEsIDB4QzAsIDB4NTMsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDlDLCAweDAwLCAweDdELCAweDEyLAorMHhGNCwgMHgwMSwgMHgxMiwgMHgxNywgMHhDMCwgMHgxNCwgMHgyMCwgMHg3MSwgMHgwQSwgMHhFQywgMHgwMSwgMHhEMCwgMHg4NywKKzB4NDgsIDB4OUYsIDB4ODAsIDB4N0QsIDB4MDAsIDB4RjQsIDB4NkQsIDB4RDAsIDB4MDcsIDB4QzAsIDB4MUUsIDB4MDAsIDB4N0QsCisweDAwLCAweEY0LCAweDI5LCAweDcwLCAweDA3LCAweEMwLCAweDk5LCAweDAwLCAweDcxLCAweDgxLCAweENDLCAweDBELCAweEQxLAorMHgxNiwgMHg0NCwgMHgxQywgMHgyMCwgMHg3RCwgMHgwMiwgMHhDNCwgMHgxNSwgMHhDMCwgMHgyNywgMHg0MCwgMHg0MywgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4RjIsIDB4MDMsIDB4Q0QsIDB4MDEsIDB4MzQsCisweDAzLCAweDEwLCAweDlELCAweDQxLCAweDMwLCAweDAwLCAweEMxLCAweDAyLCAweDA0LCAweDEzLCAweEQwLCAweDJDLCAweDQ4LAorMHhCNywgMHgwMSwgMHhDRCwgMHgxMCwgMHgzNCwgMHgwQiwgMHhEMCwgMHgwQywgMHg0MiwgMHgzMCwgMHgwMSwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4MDcsIDB4RDAsIDB4MUMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4RDEsIDB4MDgsIDB4MTQsIDB4MDksIDB4RDgsIDB4OUMsCisweDQwLCAweDMxLCAweDEwLCAweDBELCAweDAxLCAweDE0LCAweDBGLCAweEQwLCAweDhELCAweDQwLCAweDQzLCAweDAwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHgzNCwgMHgwMSwKKzB4MTAsIDB4MEYsIDB4NDAsIDB4NzgsIDB4NDEsIDB4RjEsIDB4MDEsIDB4ODQsIDB4NDMsIDB4RDAsIDB4MEUsIDB4NDEsIDB4M0IsCisweDEwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDFFLCAweDYwLCAweDM4LCAweDAwLCAweEVELCAweDEwLCAweEI0LAorMHgwMSwgMHg1MCwgMHgwRSwgMHg0MiwgMHgzOSwgMHg0MCwgMHgyMSwgMHgwMCwgMHhBNCwgMHgwOCwgMHhEMCwgMHgwRSwgMHg0MCwKKzB4MjksIDB4MDAsIDB4N0QsIDB4MTEsIDB4ODQsIDB4MDEsIDB4RDAsIDB4MDYsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDU4LCAweDA4LCAweEVGLCAweDAxLCAweEJDLCAweDA3LCAweDMwLAorMHgxRSwgMHhDMCwgMHg3QywgMHgwNSwgMHhFMywgMHgwMSwgMHg4NCwgMHgwNywgMHhGMCwgMHgxNiwgMHhDMCwgMHg3QiwgMHgwMCwKKzB4RUQsIDB4MDEsIDB4QjQsIDB4MDUsIDB4RjAsIDB4MUYsIDB4NDAsIDB4NTgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDcsCisweEYwLCAweDFFLCAweEMwLCAweDdELCAweDAwLCAweEUzLCAweDAxLCAweDlDLCAweDA1LCAweEYwLCAweDBFLCAweEMwLCAweDY5LAorMHgxMCwgMHgyRiwgMHgwMSwgMHg5QywgMHgwNSwgMHhGMiwgMHgxRSwgMHhDNCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QkEsIDB4MTUsIDB4MDAsIDB4REYsIDB4MjAsIDB4N0MsIDB4MDIsIDB4RjQsIDB4MEQsCisweEM4LCAweDM1LCAweDIzLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwOSwgMHhEOCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MEQsIDB4QzQsIDB4MjUsIDB4ODAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDAsIDB4RjIsIDB4MEQsIDB4QzAsIDB4MjYsIDB4MDAsCisweDhGLCAweDIwLCAweDdDLCAweDAwLCAweEYyLCAweDAxLCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHg3RCwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHg4NywgMHhGOSwgMHgwRiwgMHhDMCwKKzB4N0QsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MjUsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RkYsIDB4MDksCisweERDLCAweDA3LCAweEYwLCAweDE3LCAweEMwLCAweDdGLCAweDBBLCAweDdGLCAweDgxLCAweENDLCAweDg3LCAweEYwLCAweDE3LAorMHhDMCwgMHg1RiwgMHgyMiwgMHhGMywgMHgwMSwgMHhDQywgMHgyNSwgMHgzMCwgMHgxQSwgMHhDMCwgMHg3OCwgMHgwMiwgMHgyMywKKzB4MDEsIDB4Q0MsIDB4MDYsIDB4RjAsIDB4OUIsIDB4QzAsIDB4MUIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweDg4LCAweDM5LCAweDIyLCAweDZELCAweDAwLCAweEI0LCAweDE5LCAweEQ4LCAweDQ2LCAweDQwLCAweDNCLAorMHgwNSwgMHhFRCwgMHgwNCwgMHhCNCwgMHg4MywgMHhEMCwgMHg4RSwgMHg0MCwgMHgzOCwgMHgwMCwgMHg2RCwgMHgwMCwgMHhCNCwKKzB4ODgsIDB4RDAsIDB4MkUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4QUQsIDB4MTgsIDB4ODUsIDB4MEEsIDB4RDAsIDB4QUUsIDB4NDAsCisweDFGLCAweDAzLCAweDIxLCAweDg0LCAweEM0LCAweDAxLCAweEIwLCAweDRBLCAweDQwLCAweEE4LCAweDAyLCAweDJGLCAweDAwLAorMHg5NCwgMHgwMiwgMHhEMCwgMHg4QSwgMHg0MCwgMHg1NywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4ODEsIDB4RDAsIDB4OEEsIDB4NDEsIDB4MzksIDB4MjAsCisweDZELCAweDkwLCAweEI0LCAweDA4LCAweEQxLCAweDIzLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDIwLCAweDk2LCAweDIzLAorMHhEMCwgMHgwRSwgMHg0MCwgMHgxQiwgMHgxMCwgMHhGRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgyMiwgMHg0MCwgMHgzQiwKKzB4NjAsIDB4QjEsIDB4MDAsIDB4RDYsIDB4MDEsIDB4MTEsIDB4MEUsIDB4NDgsIDB4MjgsIDB4MDAsIDB4MjUsIDB4MEEsIDB4ODQsCisweDQwLCAweEQwLCAweDhBLCAweDQxLCAweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHgyOCwgMHgwNSwgMHgwMCwgMHg4RCwgMHgwMywgMHg3NCwgMHgwMCwgMHhEMCwgMHgzMCwgMHg0NCwgMHhGMywgMHgwMCwgMHgxRCwKKzB4MDMsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4QzAsIDB4MDAsIDB4MEQsIDB4MDIsIDB4NzQsIDB4MEMsIDB4RDAsCisweDM5LCAweDAwLCAweEU3LCAweDAwLCAweDlELCAweDAyLCAweDQ0LCAweDBFLCAweEQwLCAweDA4LCAweDQwLCAweEUzLCAweDAwLAorMHg4MSwgMHgwMiwgMHgxNCwgMHgwOCwgMHg5MCwgMHgxQywgMHg0NCwgMHgyMCwgMHgwNCwgMHgwRCwgMHgwMCwgMHg1NiwgMHgwQywKKzB4RDAsIDB4MjgsIDB4NDEsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MjgsCisweDI1LCAweDAwLCAweDFGLCAweDA2LCAweDdFLCAweDAyLCAweEQ4LCAweDkxLCAweEM4LCAweEI5LCAweDAwLCAweDFGLCAweDAxLAorMHg3QywgMHgxNiwgMHhGMCwgMHg1OSwgMHhDMCwgMHg4NCwgMHgwNCwgMHgxRCwgMHgwNywgMHg1QywgMHgwNiwgMHhGMCwgMHgxOSwKKzB4QzAsIDB4MjcsIDB4MDQsIDB4OUYsIDB4MDEsIDB4NEMsIDB4MDYsIDB4RjAsIDB4NTgsIDB4QzAsIDB4NjcsIDB4MDIsIDB4QzMsCisweDAwLCAweDFDLCAweDRELCAweDEwLCAweDhDLCAweEQwLCAweEUwLCAweDAxLCAweDE3LCAweDAwLCAweDRDLCAweDBFLCAweEYwLAorMHgwMSwgMHhDMCwgMHg1NywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4ODIsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MTAsIDB4N0MsCisweDBBLCAweEYwLCAweDA5LCAweEMwLCAweDA3LCAweDA4LCAweDFGLCAweDAyLCAweDdDLCAweDZBLCAweEYwLCAweDg5LCAweEMxLAorMHhBNywgMHgwNCwgMHg5RiwgMHgxMCwgMHg3QywgMHg2MCwgMHhGMCwgMHgwOSwgMHhDOCwgMHg4NywgMHgwMiwgMHgxRiwgMHgyMywKKzB4NkMsIDB4MDAsIDB4RjAsIDB4OEQsIDB4QzIsIDB4MjcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDM3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDJELCAweDAwLAorMHgzMywgMHgxMCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhFMiwgMHgzRiwgMHgwNCwgMHhCMywgMHgwMCwgMHhDQywgMHgwMCwKKzB4MzgsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDQsIDB4QkYsIDB4MTAsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MDMsIDB4QzIsIDB4MkMsCisweDgwLCAweDMzLCAweDAwLCAweENDLCAweDAwLCAweDM0LCAweDAzLCAweEMwLCAweDJDLCAweDAwLCAweDdGLCAweDEwLCAweENDLAorMHg0MSwgMHgzMSwgMHgwRiwgMHhDMCwgMHgyRCwgMHgxMCwgMHgzMywgMHgwMCwgMHhGQywgMHg0MiwgMHgzMCwgMHgwQSwgMHhDMCwKKzB4MDQsIDB4MjQsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4RTYsIDB4MDAsIDB4OTEsCisweDA1LCAweDc0LCAweDA2LCAweDEyLCAweDM5LCAweDQwLCAweDM3LCAweDAwLCAweDkxLCAweDgxLCAweDQ0LCAweDA0LCAweEI4LAorMHgxOSwgMHg0NCwgMHg0NywgMHgzMCwgMHg5RCwgMHg0MywgMHg1QywgMHgwRSwgMHgxMCwgMHgzMSwgMHg0MCwgMHg2NSwgMHgwMCwKKzB4MUYsIDB4MDEsIDB4NDQsIDB4MEMsIDB4MTAsIDB4MTEsIDB4NDAsIDB4NDQsIDB4MDEsIDB4NUQsIDB4MDIsIDB4NEMsIDB4MEMsCisweDcwLCAweDNELCAweDQwLCAweEU0LCAweDAwLCAweDk1LCAweDAxLCAweDc0LCAweDBDLCAweDEyLCAweDcxLCAweDQwLCAweDA0LAorMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHhDNCwgMHg0MCwgMHgxMSwgMHgwMSwKKzB4NzQsIDB4MDYsIDB4MTQsIDB4MzksIDB4NDQsIDB4MzcsIDB4MDAsIDB4MTEsIDB4MDMsIDB4NDQsIDB4NDYsIDB4MUEsIDB4MTEsCisweDQxLCAweDY3LCAweDAwLCAweDlELCAweDQzLCAweDc0LCAweDA2LCAweDEwLCAweDExLCAweDQwLCAweDQ0LCAweDA0LCAweDExLAorMHgwMSwgMHg0NCwgMHgwNiwgMHgxMCwgMHgxOSwgMHg2NCwgMHg2NiwgMHgwMCwgMHhERCwgMHgwMiwgMHg0NCwgMHg0NSwgMHgxMCwKKzB4QTUsIDB4NDAsIDB4NjYsIDB4MjAsIDB4MTksIDB4ODEsIDB4NzQsIDB4MEUsIDB4MTEsIDB4MTEsIDB4NTQsIDB4MDQsIDB4MDgsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweDAxLCAweDAwLCAweDM0LAorMHgwMiwgMHgxMCwgMHgwMCwgMHg2OCwgMHgzNywgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNSwgMHgwMiwgMHgxMCwgMHgwMCwgMHg0MCwKKzB4NjMsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NTAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MDAsCisweDA1LCAweDAyLCAweDFDLCAweDA5LCAweDY0LCAweDAyLCAweDAwLCAweDFELCAweDAwLCAweDQ1LCAweDAwLCAweDk0LCAweDBELAorMHg0MCwgMHgwMiwgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwMCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjAsIDB4MDYsIDB4MDAsIDB4MTEsIDB4MDAsIDB4N0MsIDB4MDAsCisweDMwLCAweDA5LCAweDYwLCAweDNGLCAweDQwLCAweDEzLCAweDAwLCAweDRDLCAweDAwLCAweDE0LCAweDAxLCAweEMwLCAweDI3LAorMHgyMCwgMHg5RiwgMHgwMCwgMHg3RSwgMHg4MiwgMHgzMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0QywKKzB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MjYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4RDAsCisweDI3LCAweDA4LCAweDFCLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEQwLCAweDA0LCAweDY0LCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMSwKKzB4MDMsIDB4QzIsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4ODAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsCisweDNGLCAweDAwLCAweERDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDA4LCAweDJGLCAweDAwLCAweEZDLCAweDAwLAorMHhGMCwgMHgwMywgMHhDMCwgMHgwRCwgMHgwMCwgMHgyRiwgMHg0MCwgMHhDQywgMHgwMCwgMHg1OSwgMHgwRiwgMHhDOCwgMHgyRCwKKzB4MDAsIDB4MzcsIDB4ODAsIDB4RkMsIDB4MDIsIDB4RjQsIDB4MEIsIDB4QzgsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDBGLCAweDAwLCAweDNGLCAweDQxLCAweEVDLCAweDAyLCAweEYwLCAweDBGLAorMHhDMCwgMHgyQywgMHgwMCwgMHhCRiwgMHgwMCwgMHhCRSwgMHgwNywgMHhGMCwgMHgwMywgMHhDMSwgMHgzRSwgMHgwMCwgMHhBMywKKzB4MDEsIDB4REMsIDB4MDAsIDB4MzAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4QUMsIDB4MDEsIDB4REMsIDB4MzMsIDB4MzQsCisweDNGLCAweEMwLCAweDJGLCAweDgwLCAweEEzLCAweDAxLCAweEZDLCAweDUzLCAweEYwLCAweDgzLCAweEMwLCAweDRGLCAweDAwLAorMHgzMywgMHgwMSwgMHhCQywgMHgwQywgMHgzMCwgMHgxMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4MDgsIDB4MjcsIDB4MTIsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MEYsIDB4NDQsCisweDA0LCAweDE0LCAweDFELCAweDAwLCAweDU1LCAweDA3LCAweEQwLCAweDIxLCAweDUwLCAweDNDLCAweDAwLCAweDkxLCAweDQxLAorMHg0NCwgMHgwMiwgMHgxMCwgMHgwMSwgMHg0MCwgMHgyNywgMHgyMCwgMHg5RCwgMHgxMSwgMHg1NCwgMHgzQiwgMHgxMCwgMHg0RCwKKzB4NDAsIDB4MjcsIDB4MjAsIDB4OTEsIDB4MTAsIDB4NzQsIDB4MEYsIDB4RDIsIDB4MEIsIDB4NDAsIDB4MDcsIDB4MDgsIDB4MTEsCisweDgwLCAweDc0LCAweDAwLCAweDE0LCAweDA1LCAweDQwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMywgMHhBMCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwMCwgMHgwNSwgMHgwMCwgMHhEMCwgMHgwQywgMHg0MCwgMHgyMCwKKzB4MDgsIDB4OEQsIDB4MDAsIDB4MzUsIDB4MDIsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MTQsCisweDAyLCAweDEwLCAweDA4LCAweDQ0LCAweDAzLCAweDAwLCAweDlELCAweDAwLCAweDE0LCAweDAzLCAweDkwLCAweDBDLCAweDYwLAorMHgyMywgMHgwMCwgMHg4MSwgMHgwNCwgMHgzNCwgMHgwMywgMHhEMCwgMHg1OCwgMHg0OCwgMHgyMywgMHgxNSwgMHg4MSwgMHgxNCwKKzB4MzQsIDB4MTAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweDg4LCAweDY1LCAweDEwLCAweDFELCAweDAzLCAweDQ0LCAweDBDLCAweEQwLCAweDBELCAweDQwLCAweDQ0LCAweDAwLAorMHgxRCwgMHgwMSwgMHg1NCwgMHgxMiwgMHhEMCwgMHgwMCwgMHg0MCwgMHgzNSwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwNiwKKzB4MTQsIDB4MTksIDB4NDAsIDB4NDcsIDB4MTQsIDB4OUQsIDB4MDAsIDB4NTQsIDB4MDMsIDB4OTAsIDB4MEQsIDB4NDAsIDB4MjcsCisweDQyLCAweDkxLCAweDIwLCAweDc0LCAweDAzLCAweEQwLCAweDFELCAweDQwLCAweDIzLCAweDAwLCAweDkxLCAweDAwLCAweDc0LAorMHgwNCwgMHgxMCwgMHgwNSwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODgsIDB4NDcsIDB4MDQsIDB4MUYsIDB4MDEsIDB4NEMsIDB4OEUsIDB4RjEsIDB4MEQsIDB4QzgsIDB4NjQsIDB4MjAsIDB4MEYsCisweDQzLCAweDdELCAweDA3LCAweDcwLCAweDU1LCAweEMwLCAweDM1LCAweDQwLCAweEMzLCAweDAwLCAweDVDLCAweDE0LCAweDMwLAorMHg1OSwgMHhDMCwgMHhFNywgMHgwMCwgMHg4RSwgMHgwMCwgMHg1QywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgyMCwKKzB4RDEsIDB4MjAsIDB4N0MsIDB4MDMsIDB4RjIsIDB4MTksIDB4QzIsIDB4NDcsIDB4MDAsIDB4MTMsIDB4ODEsIDB4M0MsIDB4MDIsCisweDM0LCAweDAxLCAweEMwLCAweDBCLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBGLCAweDgwLAorMHgyRCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGQywgMHg0MiwgMHhGMCwgMHgwRSwgMHhDMCwgMHgyRiwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4ODcsIDB4QzAsIDB4MzgsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4NDIsIDB4RjAsIDB4MEIsCisweEMxLCAweDJGLCAweDAwLCAweEJGLCAweDA0LCAweEJDLCAweDAzLCAweDcwLCAweDBGLCAweEMwLCAweDdCLCAweDIwLCAweEJGLAorMHgwMCwgMHhGQywgMHgwMywgMHhEMCwgMHgwOSwgMHhDMCwgMHg0RiwgMHgwMiwgMHgzRiwgMHgwOSwgMHhGQywgMHgwMiwgMHhGMCwKKzB4MDcsIDB4QzEsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4MDgsIDB4MDUsCisweDAwLCAweDEzLCAweDAyLCAweDVELCAweDBBLCAweEYwLCAweDBELCAweEMwLCAweDI0LCAweDAwLCAweDkzLCAweDAwLCAweDdDLAorMHg4MiwgMHgzMCwgMHgyNywgMHhDMCwgMHgzNCwgMHg0NCwgMHhEMywgMHgwMCwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDNiwKKzB4ODcsIDB4MDQsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDMsIDB4MjAsCisweDRDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDY0LCAweDAwLCAweDkzLCAweDAxLCAweDdDLCAweDAyLCAweDMwLCAweDAxLAorMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgyNCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4NDQsIDB4MDYsIDB4RDAsIDB4MkYsIDB4QzUsIDB4MjYsIDB4MDAsIDB4OUIsIDB4MjAsIDB4NzQsIDB4MDIsCisweEIwLCAweDQ1LCAweDQwLCAweDdDLCAweDQwLCAweEQxLCAweDAxLCAweDZDLCAweDAyLCAweEQwLCAweDI5LCAweDQwLCAweDg3LAorMHgwMCwgMHg5RCwgMHgwMCwgMHhDNCwgMHgwMywgMHgxMiwgMHgwRCwgMHg0MCwgMHhCNywgMHgwNiwgMHg5MSwgMHgwQSwgMHhDNCwKKzB4MDMsIDB4RDAsIDB4MEQsIDB4NTAsIDB4RTQsIDB4MDAsIDB4OTEsIDB4MDMsIDB4NzQsIDB4NDIsIDB4MTAsIDB4MDUsIDB4NDAsCisweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDIyLCAweDgwLCAweDAxLAorMHgxMiwgMHgwNCwgMHgyMCwgMHhEMCwgMHgzQywgMHg0MSwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgyNCwgMHgwMywgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MzAsIDB4MjAsIDB4OEQsIDB4MTMsIDB4MjQsIDB4MDgsIDB4OTAsIDB4MjAsIDB4NDAsIDB4ODMsIDB4MDAsCisweENELCAweDAwLCAweDE0LCAweDAzLCAweDUwLCAweDBDLCAweDAwLCAweDIzLCAweDAwLCAweDgxLCAweDAyLCAweDA0LCAweDAzLAorMHhDMCwgMHgwOCwgMHg0MCwgMHg5MCwgMHgxNCwgMHg0MSwgMHgxMiwgMHgzNCwgMHg4NSwgMHgxMCwgMHgwOCwgMHg0MCwgMHgxRiwKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEYsIDB4ODAsIDB4NjgsIDB4NDAsIDB4MjEsIDB4MDEsCisweDg0LCAweDA3LCAweEQwLCAweDFDLCAweDQwLCAweDVBLCAweDAwLCAweEU5LCAweDAxLCAweEY0LCAweDA3LCAweDkwLCAweDEwLAorMHg1NCwgMHg3MCwgMHgyNiwgMHhBRCwgMHg5MSwgMHhBNCwgMHgwNSwgMHhEMCwgMHgxMiwgMHgwOCwgMHg2QiwgMHgwMiwgMHhGRCwKKzB4MDEsIDB4ODQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NkIsIDB4MDAsIDB4QjUsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsCisweDlBLCAweDQwLCAweDU4LCAweDAyLCAweDYxLCAweDgxLCAweEY0LCAweDBELCAweDEyLCAweDlFLCAweDQwLCAweDEzLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgyNCwgMHgwMiwgMHgxMSwgMHgwMCwgMHgxRCwKKzB4MjEsIDB4RjAsIDB4MEMsIDB4NDAsIDB4QjQsIDB4MDAsIDB4QzMsIDB4MDIsIDB4M0MsIDB4MDMsIDB4MzAsIDB4NDAsIDB4QzAsCisweDMwLCAweDAyLCAweENGLCAweDAwLCAweDJDLCAweDAwLCAweEIzLCAweDg0LCAweEMwLCAweDEzLCAweDhBLCAweENGLCAweDAwLAorMHg1QywgMHgwMywgMHg3MCwgMHgwQywgMHhDMCwgMHgyNywgMHg0MCwgMHg4MywgMHgwOCwgMHgwQywgMHgwMywgMHhGMCwgMHgwQywKKzB4QzAsIDB4MzQsIDB4MDIsIDB4QzMsIDB4MDQsIDB4M0MsIDB4MDEsIDB4MzAsIDB4MDgsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDJELCAweDAwLCAweDdGLCAweDg4LCAweEZDLCAweDAxLAorMHhDMCwgMHgwRiwgMHhDMSwgMHgxRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgyMywgMHhGMCwgMHgwMywgMHhDMCwgMHhCRiwKKzB4MDYsIDB4RjMsIDB4MDgsIDB4RkMsIDB4MjEsIDB4RjAsIDB4OEYsIDB4QzgsIDB4M0YsIDB4QTIsIDB4RkYsIDB4MDgsIDB4RkMsCisweDIzLCAweEYwLCAweDBGLCAweEMwLCAweDNFLCAweDAyLCAweEJCLCAweDIwLCAweEZELCAweDQzLCAweEYwLCAweDBGLCAweEMwLAorMHgzRiwgMHgwMiwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwRiwgMHhDMiwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MkYsIDB4MDAsIDB4MEYsIDB4MDAsIDB4NEMsIDB4MDEsIDB4RjAsCisweDRELCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEY4LCAweDAxLCAweEMwLCAweEI2LCAweDQwLAorMHhEMywgMHgwMSwgMHg3QywgMHg4MSwgMHhGMiwgMHgwNSwgMHhDOCwgMHg3NywgMHgwMCwgMHg5MywgMHgwMCwgMHg2QywgMHgyMywKKzB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MjksIDB4QzAsIDB4NTQsCisweDAwLCAweDUzLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDU2LCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4OCwgMHgyOSwgMHgwMCwgMHgyRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwKKzB4NDEsIDB4M0IsIDB4MDAsIDB4NkQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDMsIDB4NTAsIDB4MzgsIDB4MDEsIDB4RTEsCisweDAwLCAweDg0LCAweDAzLCAweEQxLCAweDBFLCAweDQwLCAweDNGLCAweDAwLCAweEExLCAweDAwLCAweDk0LCAweDgzLCAweDEwLAorMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhBMSwgMHgwMCwgMHhCNiwgMHgxMywgMHhEMCwgMHg4QSwgMHg0MCwgMHgxOSwgMHgwMCwKKzB4NjEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDIsIDB4MEUsIDB4NDAsIDB4NDgsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDY5LCAweDAwLCAweDNELCAweDAxLCAweDg0LCAweDBGLCAweEQxLCAweDVFLCAweDQwLAorMHg3QiwgMHgwMCwgMHhFRCwgMHg4MSwgMHhCNCwgMHgwNywgMHhEMiwgMHgxMiwgMHg0MCwgMHg3MSwgMHgwMCwgMHhFMSwgMHgxMSwKKzB4OTQsIDB4MDcsIDB4RDAsIDB4MTYsIDB4NDAsIDB4N0IsIDB4MDAsIDB4QjksIDB4NDMsIDB4MjQsIDB4MDcsIDB4NTAsIDB4MUUsCisweDQwLCAweDczLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDE3LCAweEQwLCAweDFDLCAweDQxLCAweDc4LCAweDAwLCAweEUxLAorMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxQSwgMHg0MCwgMHgwRSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MjgsIDB4NzMsIDB4MTAsIDB4Q0QsIDB4NDAsIDB4MDQsIDB4MEYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4QjMsCisweDAwLCAweENELCAweDAyLCAweDM0LCAweDAzLCAweEQwLCAweDY5LCAweDQwLCAweDM3LCAweDAwLCAweEMxLCAweDAwLCAweDA2LAorMHgyNywgMHhEMCwgMHg5RCwgMHg0MCwgMHgzMywgMHgwMCwgMHg5OSwgMHgwMCwgMHgxNCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwKKzB4NzcsIDB4MDIsIDB4ODksIDB4MDgsIDB4MzQsIDB4MDMsIDB4RDAsIDB4NkQsIDB4NDIsIDB4MzEsIDB4MDAsIDB4RDEsIDB4MDAsCisweDQ0LCAweDAzLCAweEQwLCAweDBDLCAweDUwLCAweDQ4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNywgMHhBOCwgMHg1RCwgMHgwMSwgMHg3RiwgMHgwMiwgMHhDRCwgMHgwNSwgMHhGMCwgMHgwNSwgMHhDMCwgMHg1RiwgMHgwNCwKKzB4N0QsIDB4MEIsIDB4N0MsIDB4ODEsIDB4RjAsIDB4MzcsIDB4QzAsIDB4MTUsIDB4MDAsIDB4NTMsIDB4MDAsIDB4REMsIDB4MDksCisweEYwLCAweEE3LCAweEMwLCAweDFGLCAweDQxLCAweDVCLCAweDAwLCAweDZDLCAweDAxLCAweDM0LCAweDA1LCAweEMwLCAweDE3LAorMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgzNywgMHhFMCwgMHgxNCwgMHg0MCwgMHg1MywgMHgwMCwgMHg0RCwKKzB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NUUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDAwLCAweDA3LCAweDAwLCAweDFGLCAweDEyLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweENDLCAweDA3LCAweDAwLCAweDFGLAorMHgwQSwgMHg3QywgMHgwMCwgMHhGOCwgMHg4MSwgMHg0MCwgMHgwNCwgMHgxMCwgMHgxRiwgMHgwMiwgMHg1QywgMHg0OCwgMHhGOCwKKzB4MjEsIDB4QzIsIDB4MDcsIDB4MDEsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjEsIDB4MDEsIDB4QzAsIDB4ODcsIDB4NDAsCisweDE3LCAweDAwLCAweDdDLCAweDgwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA0LAorMHhGMCwgMHgwMSwgMHhDOCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwKKzB4MjMsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NEUsIDB4NjIsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDQsIDB4ODcsIDB4MDQsCisweDRDLCAweDgyLCAweEYwLCAweDA5LCAweEM0LCAweDI0LCAweDEwLCAweDkzLCAweDQwLCAweDdDLCAweDAyLCAweEYyLCAweDA5LAorMHhDMCwgMHgyNCwgMHgwMCwgMHg5RSwgMHg4MCwgMHgyQywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHg2NCwgMHgwOCwgMHg5MywKKzB4MDUsIDB4NzgsIDB4MDYsIDB4RjAsIDB4MDksIDB4NDAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NEMsIDB4MDIsIDB4MzAsCisweDM5LCAweEMwLCAweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LAorMHgwMCwgMHg4MSwgMHgwNCwgMHg0NCwgMHgwQSwgMHhEMCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgxMCwgMHg0NCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4QzAsIDB4MjYsIDB4NDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MTYsIDB4RDAsIDB4MTksIDB4NDAsCisweEE0LCAweDAwLCAweDlELCAweDgwLCAweDRDLCAweDgyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDQxLCAweDkxLCAweDAxLAorMHg3NCwgMHgwNiwgMHhEMiwgMHgwOSwgMHg0MCwgMHhBNCwgMHgyMCwgMHg5RCwgMHgwMywgMHg0NCwgMHgwMiwgMHgxMiwgMHgwOCwKKzB4NDAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDgsCisweDk5LCAweDAwLCAweDQ0LCAweDhBLCAweEQwLCAweDY5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDgyLAorMHg1MCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMiwgMHg5OSwgMHgyMSwgMHg1NiwgMHgxMiwgMHg5MCwgMHg2OSwgMHg0MiwgMHgyNCwKKzB4ODYsIDB4OUQsIDB4MDAsIDB4NjQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDIsIDB4OTEsIDB4MDAsIDB4NzQsCisweDIyLCAweEQwLCAweDA5LCAweDQwLCAweDY3LCAweDAwLCAweEJELCAweDA0LCAweEM0LCAweDAyLCAweDFDLCAweDBGLCAweDQwLAorMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMSwgMHg5MSwKKzB4MDAsIDB4MDQsIDB4ODIsIDB4RDAsIDB4NjgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDIsIDB4MDQsIDB4MDIsIDB4RDIsCisweDQ4LCAweDQwLCAweDMwLCAweDAxLCAweEM5LCAweDAwLCAweDM0LCAweDFBLCAweEQ4LCAweDA4LCAweDQxLCAweDIwLCAweDgwLAorMHg4RCwgMHgwMCwgMHgwNCwgMHgyMiwgMHgxMCwgMHgwOCwgMHg1MCwgMHgyMCwgMHgwMSwgMHg4MSwgMHgwMCwgMHgzNCwgMHgxMiwKKzB4RDAsIDB4NDgsIDB4NDAsIDB4NjksIDB4MDAsIDB4QUQsIDB4MDEsIDB4ODQsIDB4MDYsIDB4MDAsIDB4MEIsIDB4NDAsIDB4NDAsCisweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDg2LCAweDIyLCAweDFCLCAweDBBLAorMHg0NSwgMHgxOCwgMHhGMCwgMHgyMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgxRiwgMHgwNiwgMHg0QywgMHgwMCwgMHhGMCwgMHhBMSwKKzB4NTAsIDB4ODQsIDB4MDIsIDB4MUIsIDB4MDAsIDB4NUMsIDB4MDgsIDB4QjAsIDB4NjEsIDB4RDAsIDB4ODQsIDB4MDAsIDB4MUYsCisweDBBLCAweDZDLCAweDU4LCAweDcxLCAweEExLCAweEMwLCAweDg0LCAweDAyLCAweDEzLCAweDBBLCAweDdDLCAweDAwLCAweEYwLAorMHhBMSwgMHhDMCwgMHg4MywgMHgwMiwgMHgwRiwgMHg0QSwgMHg0QywgMHgyOCwgMHgzMCwgMHhBMiwgMHhEMCwgMHg3NCwgMHhDMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MkYsIDB4MTIsIDB4QkYsIDB4MDAsIDB4RkMsCisweDVBLCAweEYwLCAweDg5LCAweEMwLCAweDJGLCAweDAyLCAweEJGLCAweDQ2LCAweEZELCAweDAyLCAweEYwLCAweDhCLCAweEMwLAorMHgyNywgMHgyMiwgMHhBNywgMHgyMCwgMHhGQywgMHgwQSwgMHhGMCwgMHg0QiwgMHhDMywgMHgyRiwgMHgyNywgMHhBRiwgMHgwMCwKKzB4NUMsIDB4MTIsIDB4RjAsIDB4MDksIDB4QzgsIDB4MkYsIDB4MDIsIDB4QkQsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4OEIsCisweEMwLCAweDI2LCAweDAwLCAweDlGLCAweDAwLCAweDdELCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDYwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBMCwgMHgyNywgMHgwNSwgMHhCRiwgMHgwOCwgMHhFQywgMHgwMiwKKzB4MzAsIDB4MEIsIDB4QzAsIDB4MjQsIDB4MDAsIDB4QkYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4MzAsIDB4Q0EsIDB4QzAsIDB4MkMsCisweDAwLCAweDgzLCAweDQwLCAweEQwLCAweDIyLCAweEYwLCAweDRCLCAweEMwLCAweDJGLCAweDA1LCAweDhGLCAweDg4LCAweDVDLAorMHg4MiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCMywgMHgwMCwgMHhGQywgMHgxNiwgMHhGMCwgMHg0OSwgMHhEMCwKKzB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MjIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NjAsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDAzLCAweDAxLCAweDVELCAweDA0LCAweDQ0LCAweDQ4LCAweDE0LAorMHgwMSwgMHg0OSwgMHgwNCwgMHgwMiwgMHgxNywgMHgxNCwgMHg3NCwgMHgwMCwgMHgxNCwgMHhDMSwgMHg0NCwgMHg4MCwgMHgwNCwKKzB4MTEsIDB4MDAsIDB4NDQsIDB4MjAsIDB4RDIsIDB4NDEsIDB4NDksIDB4MDcsIDB4MjEsIDB4MUQsIDB4MDQsIDB4NDQsIDB4NDgsCisweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAyLCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweEQyLCAweDgxLCAweDQwLCAweDE2LAorMHgwNCwgMHg1RCwgMHg5MCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHg3MSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4QTAsIDB4MjMsIDB4MDUsIDB4OEQsIDB4MDQsIDB4MDUsIDB4MzIsIDB4MTAsIDB4ODgsCisweDQwLCAweDIwLCAweDAwLCAweDhELCAweDhELCAweDc0LCAweDAyLCAweDExLCAweDU4LCAweDQwLCAweDIwLCAweDQzLCAweDgxLAorMHg0MCwgMHgxNiwgMHgwMiwgMHhEMCwgMHhDOCwgMHg0MCwgMHgyMywgMHgwNSwgMHg4RCwgMHgyNCwgMHgxNCwgMHgzMiwgMHg5MCwKKzB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MEEsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDEsCisweDhELCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDQwLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwNCwgMHg0NCwgMHg0MiwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4QTQsIDB4MDEsIDB4OTUsIDB4NDAsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MDksIDB4NDIsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDAsCisweDQ2LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHgyNywgMHg0MCwgMHg5MSwgMHgyMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg4RCwKKzB4MjAsIDB4NDUsIDB4MDIsIDB4MDAsIDB4MDksIDB4NDAsIDB4NjEsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA1LCAweEE4LCAweDI3LCAweDAyLCAweDlGLCAweDAxLCAweDQ0LCAweDAyLCAweDMwLCAweDA5LCAweEQwLCAweDI0LAorMHgwMCwgMHg5RiwgMHgwMSwgMHgzQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhGMCwgMHgyNCwgMHgwMCwgMHg4MywgMHgwMSwgMHg1QywKKzB4MUEsIDB4RDIsIDB4MzksIDB4QzUsIDB4MjcsIDB4MjQsIDB4OUUsIDB4MDAsIDB4NUUsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzAsCisweDY3LCAweDQwLCAweDkzLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweEE3LCAweDAwLCAweDlGLCAweDAyLAorMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgxNCwgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTYsIDB4ODAsIDB4NjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4MUMsIDB4MjYsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NjcsIDB4MDAsCisweDk3LCAweDAyLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDgyLCAweDdDLCAweEMyLAorMHhGMCwgMHg0OSwgMHhDMCwgMHhFNywgMHgwMCwgMHg5RCwgMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHhFNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4ODksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4ODAsIDB4N0MsCisweDQyLCAweEY0LCAweDA5LCAweEMwLCAweDUzLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHgwOCwgMHgwNSwgMHgwMCwgMHgxMywgMHgwMCwgMHg0QywgMHg0OCwgMHhGMCwgMHgwMSwgMHhEMywgMHgwNCwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4ODAsIDB4RjAsIDB4ODEsIDB4QzAsIDB4MDQsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDgsIDB4RjMsCisweDIxLCAweEM1LCAweEM3LCAweDAwLCAweDFGLCAweDAwLCAweDVDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLAorMHgxQiwgMHgwMCwgMHg2QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NCwgMHg0MSwgMHgxMywgMHgwMiwgMHg0RCwgMHgwMCwKKzB4RjAsIDB4NDEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsCisweDE0LCAweDAwLCAweDcxLCAweDA3LCAweEM1LCAweDBELCAweDcwLCAweDE3LCAweDQwLCAweDE0LCAweDAwLCAweDdELCAweDA0LAorMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MiwgMHg1OCwgMHgwMCwgMHg1MSwgMHgwMCwgMHhENCwgMHgwOSwgMHhEMCwgMHgyNywKKzB4NDAsIDB4MUYsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NDQsIDB4MDEsIDB4NzgsIDB4MDUsIDB4NDAsIDB4NUYsIDB4MDAsIDB4NzEsCisweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA1LCAweEMwLCAweDFFLCAweDAwLCAweDcxLCAweDExLCAweDg0LCAweDA1LCAweEQyLAorMHgyNywgMHg0MCwgMHg1MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwKKzB4MDAsIDB4OTEsIDB4MDcsIDB4MjQsIDB4MkYsIDB4NTAsIDB4MUMsIDB4NDAsIDB4MzAsIDB4ODAsIDB4NEQsIDB4MTEsIDB4MzQsCisweDAzLCAweEQwLCAweDBELCAweDQwLCAweDMyLCAweDEwLCAweEM5LCAweDA2LCAweDA0LCAweDA3LCAweEQwLCAweDNDLCAweDQwLAorMHgzMywgMHg4MCwgMHhERCwgMHgwMCwgMHgxNCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwgMHgzNywgMHg4NiwgMHg4RCwgMHgwMCwKKzB4MzQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MkYsIDB4RDAsIDB4MDEsCisweDQwLCAweDUzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDc4LCAweDAwLAorMHgyMSwgMHgyNCwgMHg4NCwgMHgwMywgMHg1MCwgMHgwRSwgMHg0MSwgMHgzOCwgMHgwMiwgMHg2RCwgMHgwMCwgMHhCNCwgMHgwMywKKzB4RDAsIDB4MEIsIDB4NTAsIDB4MjgsIDB4MDUsIDB4NjksIDB4MTAsIDB4QjQsIDB4MDksIDB4RDAsIDB4MkUsIDB4NDIsIDB4M0IsCisweDA0LCAweEZELCAweDAwLCAweDg0LCAweDAzLCAweDUxLCAweDBFLCAweDQwLCAweDFCLCAweDAwLCAweDI1LCAweDAwLCAweEI0LAorMHgwMiwgMHhEMiwgMHg0RiwgMHg2NCwgMHg3QSwgMHgyMCwgMHhFMSwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwQSwgMHg2MCwKKzB4MTcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4NzgsIDB4MDAsIDB4MjMsCisweDA3LCAweEFELCAweDA1LCAweDcwLCAweDE0LCAweEMwLCAweDc4LCAweDAxLCAweEVGLCAweDAxLCAweEJDLCAweDA3LCAweEYwLAorMHg5RSwgMHhDMCwgMHg2OCwgMHg0MSwgMHhBOSwgMHgwOSwgMHg4QywgMHgwNywgMHhGMywgMHgxRSwgMHhDMCwgMHg3QiwgMHgxMCwKKzB4RUYsIDB4MDEsIDB4OTQsIDB4MTcsIDB4NzAsIDB4M0UsIDB4ODAsIDB4N0YsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDcsCisweEYwLCAweDVFLCAweDgwLCAweDdDLCAweDAwLCAweEYxLCAweDAxLCAweDhDLCAweDA3LCAweEYwLCAweDE2LCAweEMwLCAweDU3LAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHhCNSwgMHg0MiwgMHgwRiwgMHgwMCwKKzB4N0MsIDB4MDEsIDB4NzIsIDB4MDUsIDB4QzAsIDB4NzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4NDksCisweEQwLCAweDA3LCAweDBBLCAweDE3LCAweDAwLCAweDVDLCAweDAxLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLAorMHgwNiwgMHg3QywgMHgwMywgMHg3MCwgMHgxRCwgMHhDMCwgMHgyNywgMHg0MCwgMHg1QiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MUMsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REUsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4NjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweEZGLCAweDAwLCAweEIzLCAweDAxLCAweENDLAorMHgyMywgMHhGMCwgMHg1RiwgMHhDMiwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwKKzB4NkMsIDB4MDAsIDB4RkIsIDB4NDEsIDB4QzgsIDB4MjcsIDB4MzAsIDB4MTcsIDB4QzAsIDB4NUYsIDB4MjAsIDB4RkYsIDB4MTMsCisweERDLCAweDQ3LCAweEIwLCAweDFGLCAweEM4LCAweDdGLCAweDAwLCAweEJGLCAweDAxLCAweERDLCAweDA2LCAweDMwLCAweDFGLAorMHhEMSwgMHg3QywgMHgwMCwgMHhGRiwgMHg4MSwgMHhGQywgMHg4NywgMHhGMCwgMHgxQiwgMHhDMCwgMHgwMywgMHgwOCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4M0QsIDB4MDAsIDB4QTEsIDB4MEEsIDB4ODQsIDB4MDksCisweDcwLCAweDBFLCAweDQ4LCAweDNCLCAweDA0LCAweEFELCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDBGLCAweDQwLCAweDI4LAorMHgxMCwgMHg2MSwgMHgwNCwgMHhDNCwgMHgyMywgMHgxMCwgMHg4NiwgMHg0MCwgMHgzQiwgMHgwQSwgMHhFRCwgMHgwMCwgMHhDNCwKKzB4MDMsIDB4QjIsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4M0QsIDB4MDAsIDB4ODQsIDB4MDIsIDB4QjAsIDB4MEUsIDB4NDAsCisweDM4LCAweDAwLCAweEFELCAweDg4LCAweEI0LCAweDIyLCAweEQwLCAweDAyLCAweDQwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgzOSwgMHgwMCwgMHgzMSwgMHgwMCwgMHg4NCwgMHgyMywgMHhEOCwKKzB4NDYsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDIsIDB4RjQsIDB4MDMsIDB4OTAsIDB4MkUsIDB4NDAsIDB4MjAsIDB4MDAsCisweEExLCAweDIwLCAweDg2LCAweDIyLCAweDk4LCAweDJBLCAweDQwLCAweDhCLCAweDAwLCAweEVELCAweDAwLCAweDk0LCAweDAzLAorMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHg5NCwgMHgyMywgMHgxMCwgMHgwQywgMHg0MCwgMHgxOCwKKzB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDEsIDB4MDMsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDMzLCAweDA0LCAweDAxLCAweDAzLCAweDQ1LCAweDAwLCAweDUwLCAweDAxLAorMHg0MCwgMHhGMywgMHgwMCwgMHg5RCwgMHg0MCwgMHgzNiwgMHg4MywgMHg5MCwgMHgwQywgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMSwKKzB4MjAsIDB4MDYsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDQsIDB4MjMsIDB4MDgsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDMsIDB4OTAsCisweDBDLCAweDQwLCAweDMzLCAweDAyLCAweDRELCAweDA4LCAweDA0LCAweDAzLCAweDkwLCAweDFDLCAweDQwLCAweDIwLCAweDAwLAorMHhDRCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgxNCwgMHg0MCwgMHgxMywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MUQsIDB4QTAsIDB4QkQsIDB4NDAsIDB4NzMsIDB4MTEsIDB4NEMsIDB4MEEsIDB4RjAsIDB4MDksIDB4QzAsCisweDNGLCAweDEwLCAweDVGLCAweDAzLCAweDc0LCAweDgzLCAweEI0LCAweDA5LCAweDQwLCAweDJDLCAweDAwLCAweEQzLCAweDAwLAorMHg0QywgMHgxQSwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHhGRiwgMHgwMCwgMHhEQywgMHgwMywgMHgzMCwgMHgwRiwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4MUMsIDB4MDIsIDB4MzAsIDB4QkYsIDB4QzEsIDB4MzQsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDE0LCAweEMwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHg3NywgMHgwMCwgMHg1RiwgMHgwNiwgMHg3QywgMHg2MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywKKzB4MDEsIDB4NUYsIDB4MDEsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4RDcsIDB4MDIsIDB4N0QsCisweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYyLCAweDBELCAweEM0LAorMHgyNywgMHgwMCwgMHg1RiwgMHgwMiwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhFMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMiwKKzB4N0MsIDB4MEIsIDB4RjEsIDB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDNGLCAweDAwLCAweDczLCAweDA4LCAweENDLCAweDAwLCAweDMwLCAweDBCLCAweEMyLCAweDM4LCAweDAwLAorMHhGMywgMHgwMCwgMHhDQywgMHgwMywgMHgzMSwgMHgxQiwgMHhDMCwgMHgyRSwgMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHg0MCwKKzB4RjAsIDB4MEEsIDB4QzQsIDB4MDgsIDB4MDAsIDB4RjMsIDB4MDAsIDB4QkMsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MkYsCisweDAwLCAweDdGLCAweDAxLCAweDRDLCAweDA2LCAweDMwLCAweDBFLCAweEM4LCAweDNDLCAweDAwLCAweDdGLCAweDAwLCAweEZDLAorMHgwMywgMHgzMCwgMHg4MywgMHhDMCwgMHgwMCwgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MjAsIDB4MzYsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NDUsIDB4MEMsIDB4MTEsIDB4MzksIDB4NDEsIDB4MzQsIDB4MDAsIDB4RDEsCisweDAxLCAweDJDLCAweDAzLCAweDUwLCAweDA5LCAweDQwLCAweDQ0LCAweDAwLCAweEMxLCAweDAyLCAweDdDLCAweDBDLCAweEQwLAorMHgzMSwgMHhDMCwgMHg0NiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHg1MCwgMHgwRCwgMHhDMCwgMHg2NSwgMHgwMCwKKzB4NUQsIDB4MDIsIDB4NkMsIDB4MDYsIDB4MTQsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDQsIDB4NzAsIDB4MDcsCisweDEwLCAweDA5LCAweDQwLCAweDA0LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEE4LAorMHgzMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwNiwgMHg5MCwgMHgxMSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwMSwKKzB4NDQsIDB4MDMsIDB4MTgsIDB4ODgsIDB4NDAsIDB4MjQsIDB4MDEsIDB4RDEsIDB4MTQsIDB4NDQsIDB4MDYsIDB4RDAsIDB4MTEsCisweDQwLCAweDQ0LCAweDAwLCAweEQxLCAweDAwLCAweDU0LCAweDAzLCAweDkwLCAweDBELCAweDQwLCAweDY3LCAweDA0LCAweDQ5LAorMHgwNiwgMHg0NCwgMHgyMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgyMiwgMHhERCwgMHg0MCwgMHg3NCwgMHgwRiwgMHgxMCwKKzB4MEQsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsCisweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDAyLCAweDkwLCAweDA4LCAweDU2LCAweDMwLCAweDQwLCAweEMxLCAweDAwLCAweDQ1LAorMHgwMywgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEMCwgMHgwMCwgMHg0MCwKKzB4NjAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDIsIDB4MEMsIDB4NDAsIDB4MjEsIDB4MDAsIDB4NEQsIDB4MDAsCisweDI0LCAweDAyLCAweDEwLCAweDBDLCAweDAwLCAweDMwLCAweDA4LCAweDhELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDA1LAorMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhCMCwgMHgzRSwgMHgxMCwKKzB4MTMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4QjAsIDB4MDEsIDB4NDIsIDB4MzQsIDB4MDAsIDB4OTMsIDB4MjAsIDB4NDYsIDB4MDMsCisweDMwLCAweDBCLCAweEMwLCAweDI2LCAweDAwLCAweDUzLCAweDAwLCAweDQ0LCAweDAwLCAweEYxLCAweDA5LCAweDQwLCAweDA0LAorMHg0MCwgMHhFMywgMHgwMCwgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg0QywKKzB4MDIsIDB4MzAsIDB4MEQsIDB4OTAsIDB4MTQsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MDksIDB4RDAsCisweDAwLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDk4LCAweDNGLCAweDAwLCAweDJGLAorMHgwMCwgMHhGQywgMHgwMiwgMHg3MCwgMHgwQiwgMHhDNCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwKKzB4MEIsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzIsIDB4MEYsIDB4MDAsCisweEZGLCAweDIwLCAweEZDLCAweDAzLCAweDcwLCAweDBGLCAweEMwLCAweDJELCAweDAwLCAweDdGLCAweDAwLCAweEZDLCAweDAyLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwOCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwMywgMHhDMCwgMHgxNywKKzB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4RkYsIDB4MDAsIDB4RkYsIDB4MDksCisweEZDLCAweDMyLCAweEYwLCAweDRGLCAweEUxLCAweDJELCAweDIxLCAweEZGLCAweDA5LCAweEZDLCAweDAwLCAweEYwLCAweDBGLAorMHhDMCwgMHgzQywgMHgwMCwgMHhGRiwgMHgxQywgMHhDQywgMHg1MiwgMHhGMCwgMHg0RiwgMHhDMCwgMHg3QywgMHg4MCwgMHhGRiwKKzB4MDAsIDB4Q0MsIDB4MTMsIDB4QjAsIDB4MEYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RkYsIDB4ODQsIDB4QkMsIDB4MDUsIDB4MzAsCisweDFGLCAweEMwLCAweDdDLCAweDQwLCAweEZCLCAweDAxLCAweENDLCAweDA0LCAweEIwLCAweDBCLCAweEMwLCAweDBDLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHhDRCwgMHgwMCwgMHg3NCwKKzB4M0EsIDB4RDAsIDB4M0YsIDB4NDAsIDB4QTcsIDB4MDMsIDB4REQsIDB4MDQsIDB4NzQsIDB4MDYsIDB4RDAsIDB4MkYsIDB4NDAsCisweEZDLCAweDAwLCAweEZELCAweDA2LCAweDQ0LCAweDFBLCAweEQwLCAweEJGLCAweDQ2LCAweDc0LCAweDAwLCAweEZELCAweDA2LAorMHhDNCwgMHgzQiwgMHgzNCwgMHhBRiwgMHg0MCwgMHg3NCwgMHgwMCwgMHhGQywgMHgwMiwgMHg3NCwgMHgwNSwgMHgxMCwgMHgxRCwKKzB4NDAsIDB4NzQsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NTQsIDB4MDMsIDB4NTIsIDB4MDEsIDB4NDAsIDB4MEQsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDAxLCAweENELCAweDAwLCAweDM0LCAweDAwLAorMHhEMCwgMHgwQywgMHg0MCwgMHgwMywgMHgwNCwgMHhDRCwgMHgwNCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg4QywgMHg0MCwgMHgzMiwKKzB4MDIsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4NDAsIDB4RDEsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MTgsIDB4MDQsCisweDQzLCAweDEwLCAweDBDLCAweDQyLCAweDMwLCAweDAwLCAweENELCAweDAyLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDQwLAorMHgzMSwgMHgwMCwgMHg0OSwgMHg4MCwgMHgwNCwgMHgwMSwgMHg4MCwgMHgwOCwgMHg2MCwgMHg0QywgMHg4MCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MEMsIDB4RDAsCisweDBELCAweDQwLCAweDQ3LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDBFLCAweEQwLCAweDBELCAweDQwLCAweDM2LCAweDAwLAorMHhERCwgMHgwMCwgMHg0NSwgMHgwNiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgxMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMywKKzB4MTAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MTQsIDB4REQsIDB4MDAsIDB4NzQsIDB4MjEsIDB4MTAsIDB4MEQsIDB4NjAsIDB4NzQsCisweDkwLCAweDExLCAweDAwLCAweDU2LCAweDAxLCAweDA5LCAweDMxLCAweDQwLCAweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwQywgMHhGMCwgMHgwRCwKKzB4QzAsIDB4NjcsIDB4MDQsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDQsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4REYsCisweDIwLCAweDRDLCAweDFFLCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweDRDLCAweDAzLCAweDMwLAorMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHg4MSwgMHgzMSwgMHgyQywgMHhDMCwgMHhGMCwgMHgwNCwKKzB4REIsIDB4MDAsIDB4NEMsIDB4MTYsIDB4QTAsIDB4MzEsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA3LCAweDg4LCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBGLCAweEMyLAorMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRiwgMHhEMCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwKKzB4RkMsIDB4MDIsIDB4RjAsIDB4MEUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RUYsIDB4MDAsIDB4RkMsIDB4NDMsIDB4RjAsIDB4MEYsCisweEM0LCAweDNGLCAweDAyLCAweEZELCAweDAwLCAweEY4LCAweDAxLCAweEY0LCAweDJGLCAweDQwLCAweDNGLCAweDQwLCAweEZGLAorMHgwMCwgMHhGQywgMHg2NywgMHhGMCwgMHgwMiwgMHhDMiwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4ODAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDgsIDB4MzAsIDB4MEQsIDB4QzAsIDB4QTQsCisweDA4LCAweERGLCAweDAwLCAweDRDLCAweDA4LCAweDMwLCAweDVDLCAweEMwLCAweDM0LCAweDAwLCAweEMzLCAweDQwLCAweDRDLAorMHg0OCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHgzQywgMHg4MywgMHhGMCwgMHgwQywgMHhDMCwKKzB4MzQsIDB4MDQsIDB4RDcsIDB4OTEsIDB4NEMsIDB4MTMsIDB4NzQsIDB4MEQsIDB4QzUsIDB4MzUsIDB4MDAsIDB4REYsIDB4ODQsCisweDRDLCAweDA1LCAweEUwLCAweDI5LCAweDgxLCAweDA5LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMywgMHhBMCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwNCwgMHgxMCwgMHgwRiwgMHg0MCwgMHhFNCwgMHgwMiwKKzB4REQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4QjAsIDB4MkYsIDB4NDAsIDB4M0QsIDB4MDAsIDB4RjEsIDB4MDEsIDB4NDQsIDB4MTYsCisweEQwLCAweDBGLCAweEMwLCAweDM0LCAweDAwLCAweEY3LCAweDA0LCAweEY0LCAweDRCLCAweEQwLCAweEFGLCAweDQwLCAweEI1LAorMHgwMCwgMHhGMCwgMHgwMiwgMHgwNCwgMHgxNSwgMHgxMCwgMHgzRCwgMHg0NCwgMHgzNCwgMHgxMCwgMHhDOSwgMHg4MCwgMHg0NCwKKzB4ODUsIDB4OTAsIDB4MzEsIDB4NDEsIDB4NkQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisweDIwLCAweDMwLCAweDEwLCAweENELCAweDAwLCAweDA0LCAweDRFLCAweDExLCAweDBDLCAweDQ0LCAweDQwLCAweDAwLCAweENELAorMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgyQywgMHg0MCwgMHgzMCwgMHgwOCwgMHhDMSwgMHgwNCwgMHgyNCwgMHgwNCwgMHhEMCwKKzB4MEMsIDB4NTAsIDB4MzIsIDB4MDAsIDB4QzEsIDB4MDcsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4RDAsIDB4MDAsCisweEM1LCAweDAyLCAweDAwLCAweDA5LCAweDEwLCAweDE0LCAweDQwLCAweDgzLCAweDQxLCAweEMxLCAweDAyLCAweDY0LCAweDAwLAorMHhEMCwgMHgxOCwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODUsIDB4MDcsIDB4MTQsIDB4MUMsIDB4NTAsIDB4NzgsIDB4MDQsIDB4RUQsIDB4MDEsCisweDg1LCAweDA2LCAweDEwLCAweDFFLCAweDQwLCAweDc4LCAweDgwLCAweEUxLCAweDExLCAweEE0LCAweDA1LCAweEQwLCAweDFDLAorMHg0MCwgMHg3QywgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg1OSwgMHgwNiwgMHhFNSwKKzB4MDEsIDB4ODQsIDB4MDUsIDB4MTAsIDB4OUUsIDB4NDAsIDB4N0EsIDB4MDcsIDB4QTEsIDB4MDEsIDB4QTQsIDB4MDYsIDB4OTEsCisweDFBLCAweDQwLCAweDdGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDE4LCAweDMwLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgxQywgMHg0MywgMHgzMCwgMHgwQywgMHhDMCwgMHgxMCwgMHgwMCwgMHhERiwgMHgwMCwgMHgwNCwKKzB4MDMsIDB4MTAsIDB4MEQsIDB4QzAsIDB4MzAsIDB4MDAsIDB4QzMsIDB4MDAsIDB4MkMsIDB4MjEsIDB4RjAsIDB4MEMsIDB4QzAsCisweDM2LCAweDAyLCAweEMzLCAweDAwLCAweDNDLCAweDAzLCAweEYyLCAweDBELCAweEUwLCAweDIwLCAweDAwLCAweEQ3LCAweDAwLAorMHgwQywgMHgzMywgMHgzMCwgMHg4QywgMHhDMSwgMHgyMywgMHgwMywgMHg0QiwgMHgyMCwgMHgyQywgMHgyMCwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4NEIsIDB4NjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4M0QsIDB4MTAsCisweEZGLCAweDQ4LCAweEZDLCAweDIzLCAweEY4LCAweDBGLCAweEMwLCAweDFGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgxMCwgMHhGRiwgMHgwMiwgMHg1RCwgMHgyMSwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4RjcsIDB4MTAsIDB4N0MsIDB4NDMsIDB4RjAsIDB4MEQsIDB4QzEsIDB4MkEsIDB4MDAsIDB4RkIsIDB4MDIsIDB4N0MsCisweDIxLCAweEYyLCAweDg4LCAweDAwLCAweDI4LCAweDAzLCAweDJGLCAweDA4LCAweERDLCAweDIyLCAweEYyLCAweDhCLCAweEM0LAorMHgwOSwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywgMHg4MCwgMHhERiwKKzB4MDAsIDB4N0UsIDB4MDEsIDB4MzAsIDB4NEQsIDB4QzEsIDB4MTcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsCisweEFELCAweEQwLCAweDM0LCAweDAxLCAweERGLCAweDAyLCAweDVDLCAweDAzLCAweEYwLCAweENELCAweEMwLCAweDM3LCAweDAwLAorMHhERiwgMHgwNCwgMHg3QywgMHgxQiwgMHhGOCwgMHg2RCwgMHhDMCwgMHgzNywgMHgwMCwgMHhEMywgMHgwRSwgMHg3QywgMHgwMSwKKzB4RjAsIDB4MUQsIDB4QzAsIDB4MjIsIDB4NDAsIDB4Q0IsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MTEsIDB4NDAsIDB4NDAsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDM5LCAweDAwLCAweEVELCAweDAwLAorMHhGNCwgMHgwMywgMHgxMCwgMHg0RSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFQywgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHg4RSwKKzB4NDAsIDB4QjgsIDB4MDUsIDB4RkQsIDB4MDQsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDEsIDB4M0IsIDB4MDAsIDB4RUQsCisweDBDLCAweEI0LCAweDUzLCAweDcwLCAweENFLCAweDQwLCAweDNCLCAweDAwLCAweEU1LCAweDAwLCAweEI0LCAweDAwLCAweEQwLAorMHgwRSwgMHg0MCwgMHgyOCwgMHgwMCwgMHhFQiwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwNiwgMHg0MCwgMHg0QywgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4RTUsIDB4MDEsIDB4QjQsCisweDg3LCAweDkyLCAweERFLCAweDQyLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDVDLCAweDQwLAorMHg3OCwgMHgwMCwgMHhGRCwgMHg0RCwgMHg5NCwgMHgwNywgMHhEMCwgMHg1RSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwNSwKKzB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDQsIDB4N0YsIDB4MDAsIDB4RTEsIDB4MDUsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsCisweDQxLCAweDZFLCAweDgwLCAweEY5LCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFDLCAweDYwLCAweDEwLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHg0MywKKzB4OTQsIDB4MEMsIDB4NDAsIDB4RjMsIDB4MDEsIDB4Q0QsIDB4MDAsIDB4MzYsIDB4M0YsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsCisweDEwLCAweERELCAweDAwLCAweDA0LCAweDQ3LCAweDkwLCAweDBDLCAweDQyLCAweDMzLCAweDAwLCAweERELCAweDAwLCAweDc0LAorMHgwMywgMHg1MiwgMHgwQywgMHg0MCwgMHhCMywgMHgwMiwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHg0QywgMHg0NiwKKzB4NjAsIDB4QTIsIDB4QzksIDB4MDksIDB4NDQsIDB4MDMsIDB4QzAsIDB4MUMsIDB4NDAsIDB4NTgsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDE1LCAweDA4LCAweDVGLCAweDAwLCAweEY0LCAweDE1LCAweEIwLAorMHgwNSwgMHhDMCwgMHg5RiwgMHgwMSwgMHg1RiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMiwgMHgwNSwgMHhDMCwgMHgxNCwgMHgwOCwKKzB4NUYsIDB4MDAsIDB4REMsIDB4MTksIDB4RjMsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsCisweEYwLCAweDA1LCAweEMwLCAweDVGLCAweDIwLCAweDUzLCAweDAwLCAweEZDLCAweDE1LCAweEYwLCAweDA3LCAweENDLCAweDlBLAorMHgyMCwgMHg2QiwgMHgwMiwgMHhDRCwgMHgwOSwgMHhGMCwgMHgzNywgMHhEMCwgMHg1QywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MEEsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDEsCisweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDIwLCAweDFGLAorMHg0MCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwKKzB4MjEsIDB4QzAsIDB4ODcsIDB4MDEsIDB4MUYsIDB4MDIsIDB4N0UsIDB4MDAsIDB4RjIsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDQsCisweDFGLCAweDEwLCAweDdDLCAweDQ4LCAweEIwLCAweEUxLCAweEM4LCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHg4MCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwKKzB4QTcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjUsIDB4ODAsIDB4OUYsIDB4MDgsCisweDBDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDBFLCAweDMwLCAweDA4LAorMHhDMCwgMHgyNCwgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHg4NiwgMHg3MiwgMHgyOSwgMHhDQSwgMHhBNywgMHgwOCwgMHg5NywKKzB4MDUsIDB4NUMsIDB4MDIsIDB4MzAsIDB4MTksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDIwLCAweDI0LCAweDA4LCAweDlELCAweDIwLCAweDQ0LCAweDM2LCAweDA0LCAweDA5LCAweDQ0LCAweEU3LAorMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyNSwgMHg5MCwgMHg5QywgMHgwMSwgMHg0NCwKKzB4MEEsIDB4MTQsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NDUsIDB4MEEsIDB4QTQsIDB4MDksIDB4NTEsCisweEEwLCAweDAwLCAweDkwLCAweDEyLCAweDM0LCAweDI2LCAweDEwLCAweDI5LCAweDQwLCAweDI3LCAweDAwLCAweDk5LCAweDAwLAorMHg2QywgMHg4QSwgMHg1MCwgMHgxOSwgMHg0MSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDUsIDB4MDIsIDB4MDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsCisweDlELCAweDAwLCAweDQwLCAweDAyLCAweEQwLCAweDA5LCAweDAwLCAweDI0LCAweDIwLCAweDlDLCAweDEwLCAweDQ0LCAweDIyLAorMHgxMCwgMHgwOSwgMHg0NCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgxNCwgMHg0NCwgMHg0MiwgMHg5MCwgMHgxOSwgMHg0MCwgMHgyNCwKKzB4MDQsIDB4OTUsIDB4MDAsIDB4NTQsIDB4MDIsIDB4NDAsIDB4MEQsIDB4NDEsIDB4MjYsIDB4MDAsIDB4OUQsIDB4NDIsIDB4NTQsCisweDEyLCAweDEwLCAweDQ5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgyMCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgxMiwgMHgxMSwgMHg0OCwgMHg0MCwgMHgzMywgMHgwMSwgMHg4RCwKKzB4MDAsIDB4MzQsIDB4MTIsIDB4RDAsIDB4NEQsIDB4NEMsIDB4MjEsIDB4MTEsIDB4OEQsIDB4MDQsIDB4MDQsIDB4MTMsIDB4MTAsCisweDQ4LCAweDYwLCAweDIzLCAweDAwLCAweDhELCAweDA0LCAweDA0LCAweDEyLCAweDkwLCAweDQ4LCAweDQ0LCAweDI0LCAweDAwLAorMHg4MSwgMHg4NCwgMHg3NiwgMHgwMiwgMHgxQSwgMHgwOCwgMHg0MCwgMHgyMywgMHg4OCwgMHg4OSwgMHg4MCwgMHgyNCwgMHgwMiwKKzB4NTAsIDB4NDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4MzgsCisweDg2LCAweDBBLCAweDFGLCAweDBBLCAweDRDLCAweDI4LCAweDMwLCAweDAxLCAweEMwLCAweDg3LCAweDAyLCAweDFGLCAweDBBLAorMHg3QywgMHgwMCwgMHhGMCwgMHhBMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRCwgMHgwQSwgMHg0RCwgMHgyOCwgMHgzMiwgMHgwMSwKKzB4QzQsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MEEsIDB4NEMsIDB4MjgsIDB4MzAsIDB4QTEsIDB4NDAsIDB4MDQsIDB4MDgsIDB4MTcsCisweDRBLCAweDVDLCAweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDE3LCAweDAwLCAweDVDLCAweDI5LCAweDMwLAorMHhBMSwgMHhDMCwgMHg3NywgMHg4MCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMiwgMHgyNSwKKzB4MDAsIDB4OUYsIDB4NDAsIDB4RkMsIDB4MjIsIDB4RjAsIDB4ODksIDB4QzAsIDB4MkYsIDB4MDIsIDB4OUYsIDB4MDAsIDB4RkMsCisweDIyLCAweEYwLCAweDg5LCAweEMwLCAweDI3LCAweDAyLCAweDlGLCAweDQ4LCAweEZDLCAweDIyLCAweEYwLCAweDg5LCAweEMyLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwOCwgMHg3QywgMHgyMiwgMHg3MCwgMHg4OSwgMHhDMCwgMHgzQiwgMHgwMCwgMHg5RiwgMHgwOCwKKzB4RkMsIDB4MDIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QjcsIDB4ODAsIDB4REMsIDB4MDIsIDB4RjEsIDB4OEYsCisweEMwLCAweDc3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDgwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwOCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyQywgMHgwMiwgMHg5MywgMHgwMCwgMHg3QywgMHg1MiwKKzB4RjAsIDB4Q0IsIDB4QzAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4QjAsIDB4NDksIDB4QzAsIDB4MjcsCisweDAwLCAweEJGLCAweDBDLCAweEZDLCAweDAyLCAweEUwLCAweDBCLCAweEMwLCAweDJELCAweDAwLCAweEIzLCAweDA0LCAweERDLAorMHgwMiwgMHhCMCwgMHgwQiwgMHhDMCwgMHgyQSwgMHg0MCwgMHhCMywgMHgwMCwgMHhCQywgMHgwMywgMHgzMCwgMHgwQiwgMHhDMCwKKzB4NzcsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MDEsIDB4MUQsCisweDA0LCAweDc0LCAweDQ5LCAweDEwLCAweDAxLCAweDQ0LCAweDE0LCAweDQyLCAweDAxLCAweDE0LCAweDc0LCAweDAwLCAweEQwLAorMHhDMSwgMHg0QywgMHg4NywgMHgxMCwgMHgxRCwgMHg1MCwgMHg3NCwgMHgyMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwKKzB4MUQsIDB4MEMsIDB4NzQsIDB4NDgsIDB4RDAsIDB4MDEsIDB4NDUsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MTQsIDB4NzQsIDB4MDAsCisweEQwLCAweDA1LCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDYzLAorMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHgwNSwgMHg4RCwgMHgwNCwKKzB4MzQsIDB4QjIsIDB4MTQsIDB4ODgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDQsIDB4MzYsIDB4MDIsIDB4RDAsIDB4NDgsCisweDQ4LCAweDIzLCAweDgyLCAweDhELCAweDA4LCAweDM0LCAweDAyLCAweDE0LCAweDg4LCAweDYwLCAweDIzLCAweDAwLCAweDhELAorMHgwNCwgMHgzNCwgMHgzMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwgMHgwQywgMHgzNiwgMHgwMiwgMHg1MiwKKzB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MTQsIDB4MDIsIDB4MTgsIDB4MDgsIDB4NDAsIDB4NEIsIDB4ODAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDAwLCAweDlELCAweDAwLCAweDc0LAorMHgxMiwgMHgxMCwgMHgwOSwgMHg1MCwgMHgyNCwgMHgwMSwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MEIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4REQsIDB4MDAsCisweDc0LCAweDAyLCAweEQ4LCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LAorMHg0MCwgMHgyNywgMHgwNCwgMHg5MSwgMHgwMiwgMHg3MCwgMHgxMiwgMHgxOSwgMHgwOSwgMHg0MCwgMHg2MywgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NzgsIDB4MDYsCisweDMwLCAweDA5LCAweEMwLCAweDY0LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDRFLCAweEYwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhCMiwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjIsIDB4MDksIDB4QzAsIDB4NjcsIDB4NDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4NDIsIDB4QjAsIDB4QjksIDB4QzAsCisweDI3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDQ2LCAweDM0LCAweDE5LCAweEMwLCAweDE3LCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwNiwgMHhGMCwKKzB4MDgsIDB4QzAsIDB4NjcsIDB4MDAsIDB4OUMsIDB4MDAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4MDksIDB4QzEsIDB4MjcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMSwgMHgyNywgMHgwMiwgMHg5RiwgMHhCMCwgMHg3QywgMHg0MiwgMHhGMCwgMHgxOSwgMHgwMiwgMHgyNCwKKzB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4OTksIDB4QzEsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDAxLAorMHhDMCwgMHhDNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwOCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwKKzB4MDEsIDB4N0MsIDB4MzAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDEsIDB4NUMsIDB4MDQsIDB4RjAsCisweDAxLCAweEM4LCAweDg2LCAweDA5LCAweDEzLCAweDA4LCAweDZELCAweDA4LCAweEUwLCAweDQxLCAweEMwLCAweDg0LCAweDAwLAorMHgxNywgMHg0MCwgMHg2QywgMHgxMCwgMHgxMCwgMHhBMSwgMHhDMiwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NUQsIDB4ODAsIDB4RjQsIDB4MUQsIDB4NzAsIDB4MDUsIDB4NDAsCisweDVGLCAweDIwLCAweDVELCAweDAwLCAweDRDLCAweDAxLCAweDEwLCAweDI3LCAweDQwLCAweDE0LCAweDAwLCAweDdELCAweDAwLAorMHhGNCwgMHgwRCwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNywgMHgwMCwgMHg3RCwgMHgwMSwgMHhDNCwgMHgwNSwgMHg3MCwgMHgyNywKKzB4NDAsIDB4MTgsIDB4MDAsIDB4NzEsIDB4ODIsIDB4QzQsIDB4MTksIDB4RDAsIDB4MTYsIDB4NDEsIDB4MTgsIDB4MDEsIDB4NzEsCisweDFCLCAweEU0LCAweDQ1LCAweDEwLCAweDA3LCAweDQwLCAweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgxRiwgMHg1OCwgMHgwQywgMHg0MCwgMHg3NywKKzB4MDAsIDB4QzksIDB4MDAsIDB4MjUsIDB4MDMsIDB4MTQsIDB4MkMsIDB4NTAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4NzQsCisweDA3LCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDAzLCAweDUwLCAweDFDLCAweDUwLAorMHhCMCwgMHg0MiwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgyQywgMHg0MCwgMHg1MCwgMHg0MCwgMHhDNSwgMHgwMiwKKzB4NjQsIDB4MDcsIDB4OTQsIDB4MUMsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDgwLCAweDM4LCAweDAyLCAweEVELCAweDA4LCAweEI0LCAweDAzLCAweDU4LCAweDBFLCAweDQwLCAweDNCLCAweDBDLAorMHhFRCwgMHgwNSwgMHgwNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MSwgMHgzOCwgMHgwMCwgMHg2RCwgMHgxMCwgMHhCNCwgMHgwMywKKzB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDMsIDB4ODQsIDB4MDksIDB4NTAsIDB4MzYsIDB4NDAsIDB4M0MsCisweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDAzLCAweEQwLCAweDBGLCAweDQwLCAweDFDLCAweDAwLCAweEUxLCAweDAwLCAweEU2LAorMHg4MiwgMHg5MCwgMHgxNiwgMHg0MCwgMHgxMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4MTgsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MTEsIDB4QkMsIDB4MDUsIDB4NzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RUYsCisweDg3LCAweEFDLCAweDg3LCAweDMwLCAweDFGLCAweEMwLCAweDc4LCAweDAwLCAweEVELCAweDIxLCAweEJDLCAweDA3LCAweEYwLAorMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhDRiwgMHg4MSwgMHg5QywgMHgwNywgMHg3OCwgMHgxRiwgMHhDMCwgMHg3OCwgMHgwMCwKKzB4QzMsIDB4ODEsIDB4OEMsIDB4MDcsIDB4REEsIDB4MEEsIDB4QzQsIDB4NTgsIDB4MjAsIDB4RTcsIDB4MjEsIDB4QUUsIDB4MDcsCisweEIxLCAweDFCLCAweEM0LCAweDUwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LAorMHgzNSwgMHgwMSwgMHhERiwgMHgwNiwgMHg3RSwgMHgwMSwgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgxNiwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsCisweEMwLCAweDM3LCAweDIwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweDcwLCAweDA1LCAweEMwLCAweDMxLCAweDAwLCAweDVGLAorMHgwMCwgMHg1QywgMHgwMywgMHhGOCwgMHgwQywgMHhDMCwgMHgxNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3MCwgMHgwMiwgMHg3MCwKKzB4MDEsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4RkQsCisweDAyLCAweEYzLCAweDAxLCAweEZDLCAweDIzLCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAwLCAweEYzLCAweDgxLCAweEZDLAorMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMiwgMHhGRiwgMHgwMSwgMHhDQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwKKzB4N0YsIDB4MDAsIDB4RjcsIDB4MDEsIDB4Q0MsIDB4MjcsIDB4MzgsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4NzMsIDB4MDEsCisweDhDLCAweDg3LCAweEI4LCAweDk3LCAweEMwLCAweDVDLCAweDAwLCAweEVGLCAweDIxLCAweENDLCAweDA1LCAweEYwLCAweDE3LAorMHhDMCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgzOSwgMHgwMCwKKzB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDgsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDIsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsCisweEQwLCAweDgyLCAweDQwLCAweDNCLCAweDAwLCAweDdELCAweDA4LCAweEM0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLAorMHgwMCwgMHg3RCwgMHgwNCwgMHg4NCwgMHgwMSwgMHgxNCwgMHg0RSwgMHg0MCwgMHgzQiwgMHgwMSwgMHgzQiwgMHgwMCwgMHg4NSwKKzB4NDMsIDB4MTAsIDB4Q0UsIDB4NDAsIDB4MTgsIDB4MDEsIDB4RUQsIDB4MDgsIDB4OTQsIDB4NjIsIDB4RDAsIDB4NjIsIDB4NDAsCisweDU0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM5LCAweDA4LCAweEUxLAorMHgwMCwgMHhCNCwgMHgyMywgMHhEOCwgMHgwRSwgMHg0MCwgMHg5QiwgMHgwNCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgyMywgMHhEMCwKKzB4MEUsIDB4NDAsIDB4M0IsIDB4ODgsIDB4NkQsIDB4MDAsIDB4ODQsIDB4MDksIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsCisweEU1LCAweDgwLCAweDk0LCAweDAzLCAweDE4LCAweDBBLCAweDRDLCAweDNCLCAweDEwLCAweEUxLCAweDAwLCAweEI0LCAweDAzLAorMHg5MCwgMHgwRiwgMHg0NCwgMHg4OSwgMHgxMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwgMHgwQSwgMHg2MSwgMHg2MCwKKzB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MzUsIDB4MDAsIDB4QzEsIDB4NDAsCisweDM0LCAweDFBLCAweEQwLCAweDBDLCAweDQwLCAweDY3LCAweEMwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDAwLAorMHg0MCwgMHgzMywgMHg4MCwgMHgwRCwgMHgwMCwgMHgwNSwgMHgwMiwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgxMCwgMHg4RCwKKzB4NDAsIDB4NDQsIDB4MDAsIDB4MTgsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4MTAsCisweDJDLCAweDQwLCAweDUwLCAweDEwLCAweENELCAweDAxLCAweDE0LCAweDBBLCAweEQ4LCAweDIwLCAweDQyLCAweDA4LCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgzRCwgMHgwMCwgMHhGMywgMHgwMCwgMHg3QywKKzB4MTYsIDB4RDAsIDB4MEQsIDB4QzQsIDB4NDcsIDB4MDAsIDB4RjMsIDB4MDAsIDB4N0MsIDB4MEIsIDB4RDAsIDB4MDEsIDB4QzAsCisweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDA0LCAweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDE3LCAweDAwLAorMHg1QywgMHgwMiwgMHgzMCwgMHgwOSwgMHgwMCwgMHgzNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg2QywgMHg4QiwgMHhCMCwgMHgyQywKKzB4QzEsIDB4NTAsIDB4MDEsIDB4REYsIDB4MDAsIDB4NDAsIDB4MDgsIDB4RDAsIDB4ODksIDB4QzAsIDB4NzQsIDB4MDAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHg0MywgMHhGMCwgMHgwMSwgMHhDMCwgMHgzMywKKzB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsCisweDBBLCAweEYwLCAweDA5LCAweEUwLCAweEE3LCAweDA4LCAweDlGLCAweDQyLCAweDVDLCAweDQzLCAweEYyLCAweDBELCAweEQwLAorMHhCNywgMHgwOCwgMHhERiwgMHgyQSwgMHg3QywgMHgwOCwgMHhGMCwgMHgyOSwgMHhEMCwgMHgxNywgMHgyMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsCisweDBGLCAweEMwLCAweDI3LCAweDAwLCAweEYzLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDQwLAorMHhCMywgMHgwMCwgMHg5QywgMHgwMiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4QjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MjAsIDB4QUYsIDB4MjAsIDB4REMsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzEsIDB4MUQsCisweDAwLCAweEI2LCAweDAwLCAweENDLCAweDQyLCAweDgwLCAweDA5LCAweEMwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHg0MCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwNCwgMHhEMCwgMHgwRCwKKzB4NjAsIDB4NjcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MzksIDB4NDAsIDB4MzcsIDB4MDAsIDB4OTEsCisweDAzLCAweDVDLCAweDA2LCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDlELCAweDAxLCAweDc0LCAweDQ2LCAweDEwLAorMHgxMSwgMHg0MSwgMHg2NywgMHgwMSwgMHgxOSwgMHgwMSwgMHgwNCwgMHgwNiwgMHhCMCwgMHgzRCwgMHg0MCwgMHg3NCwgMHgwMSwKKzB4MDEsIDB4NDUsIDB4NDQsIDB4NEUsIDB4OTAsIDB4MTksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM0LCAweDAwLCAweEQxLCAweDAwLCAweDc2LCAweDA0LCAweEQwLCAweDBELCAweDRBLAorMHg0NywgMHgwNCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgzOSwgMHg0MCwgMHgzNywgMHgwMCwgMHg5MSwgMHgxMSwKKzB4NzQsIDB4MDQsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDQsIDB4MTAsIDB4MTksCisweDQwLCAweDc3LCAweDAwLCAweDlELCAweDAzLCAweDQwLCAweDQ3LCAweDEwLCAweDhELCAweDAxLCAweDU1LCAweDAwLCAweEQ1LAorMHg4MSwgMHg0NCwgMHg4NCwgMHg5MCwgMHgxMSwgMHg0OCwgMHgwNywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MDMsCisweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDAwLCAweDQwLCAweDMzLCAweDAwLCAweDAxLCAweDAwLCAweDE0LAorMHgwMCwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHg5MCwgMHgwOCwgMHg2NCwKKzB4MzMsIDB4MDAsIDB4ODksIDB4MDAsIDB4NDcsIDB4MDEsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDgsIDB4RDUsIDB4MDAsCisweDA0LCAweDAwLCAweDkwLCAweDAwLCAweDQ0LCAweDQzLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgzOCwgMHgzQSwgMHgwMCwgMHhGMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMCwKKzB4RjMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NUMsIDB4MDAsCisweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDFELCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDAxLCAweEMwLCAweDM3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgxNSwgMHgwOCwgMHhENywgMHgwMCwgMHg0RCwKKzB4ODAsIDB4QjAsIDB4MDksIDB4QzAsIDB4MDcsIDB4NjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweEI4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEM0LCAweDJGLCAweDAwLCAweEZGLAorMHgwMCwgMHhGQywgMHgwMywgMHhGMiwgMHgwMywgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwKKzB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4NzAsIDB4MDMsIDB4QzAsIDB4MUIsIDB4ODAsCisweDNGLCAweDAwLCAweEZDLCAweDAxLCAweEQwLCAweDBFLCAweEMwLCAweDNGLCAweDAwLCAweEZCLCAweDAwLCAweEZFLCAweDAyLAorMHhGMCwgMHgwQiwgMHhDMCwgMHgxNywgMHg0MiwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwKKzB4NkYsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4NDAsIDB4RjAsIDB4MDIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjMsIDB4NDAsCisweEVDLCAweDAyLCAweDcwLCAweDFGLCAweEMwLCAweDJGLCAweDAwLCAweEZCLCAweDEwLCAweEZDLCAweDAyLCAweDMwLCAweDAzLAorMHhDMCwgMHg2OCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhDQywgMHgwNywgMHhCMCwgMHgwRiwgMHhDMCwgMHgzRSwgMHgwOSwgMHhGRiwKKzB4MDEsIDB4QUMsIDB4MDcsIDB4RjAsIDB4NEYsIDB4QzAsIDB4N0IsIDB4MDAsIDB4QjMsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4MzQsCisweDBGLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDA4LCAweDIxLAorMHgwMCwgMHhEMSwgMHgxMCwgMHg1QywgMHgwMCwgMHhEMCwgMHgxMSwgMHg0MCwgMHg2QywgMHgwOCwgMHg5MSwgMHgwQiwgMHg1OCwKKzB4MDAsIDB4MTAsIDB4MUQsIDB4QzAsIDB4QTUsIDB4MDYsIDB4QzEsIDB4MTIsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MTEsIDB4QzgsCisweDY1LCAweDAwLCAweENELCAweDAwLCAweDU0LCAweDA3LCAweDEwLCAweDBELCAweDQwLCAweDc0LCAweDEyLCAweERELCAweDAxLAorMHg1NCwgMHgwNywgMHhEMiwgMHhCRCwgMHg0MCwgMHg3NywgMHg0MCwgMHg5MSwgMHgxMCwgMHg0NCwgMHgwQiwgMHgxMCwgMHgxRCwKKzB4MDAsIDB4MEYsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MjAsIDB4MzMsIDB4MDAsCisweEMxLCAweDAwLCAweDM0LCAweDA0LCAweEQwLCAweDEwLCAweDQwLCAweDIwLCAweDAwLCAweEQxLCAweDAwLCAweDA0LCAweDAwLAorMHg1MCwgMHgwQywgMHg0MCwgMHgyMywgMHgwOSwgMHhDMSwgMHg4NCwgMHgzNCwgMHgwMiwgMHgxMiwgMHgwMCwgMHg0MCwgMHgyMCwKKzB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsCisweDAzLCAweDkwLCAweDBDLCAweDQwLCAweDM1LCAweDgwLCAweDk1LCAweDg0LCAweDA0LCAweDcwLCAweDE0LCAweDBDLCAweDQwLAorMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwgMHgwMCwgMHhEMSwKKzB4MDAsIDB4NzQsIDB4MDQsIDB4RDAsIDB4NDEsIDB4NDAsIDB4NjQsIDB4NDAsIDB4RDEsIDB4MDgsIDB4NzQsIDB4NDQsIDB4MTAsCisweDBELCAweDQwLCAweDI3LCAweDQwLCAweEQxLCAweDAwLCAweDc0LCAweDA2LCAweDEwLCAweDAxLCAweDQwLCAweDI2LCAweDAwLAorMHhERCwgMHgwMCwgMHg1NCwgMHg4MywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHgxRCwgMHgwMSwgMHg1NCwgMHgxMywKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4NDAsIDB4RDUsIDB4MTgsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDgsIDB4MEYsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg4LCAweDM2LCAweDAwLCAweEQzLCAweDAwLAorMHg3QywgMHgwNCwgMHhGMiwgMHgxNCwgMHhEMCwgMHg2NCwgMHgwMCwgMHg4MywgMHg4MCwgMHg0QywgMHgwRSwgMHg3MCwgMHgwRCwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4REIsIDB4MDAsIDB4N0MsIDB4MUUsIDB4MzAsIDB4MTUsIDB4RDAsIDB4MjQsIDB4MDAsIDB4REYsCisweDAwLCAweDBDLCAweDAzLCAweEIxLCAweDBELCAweEMwLCAweDM2LCAweDAwLCAweENGLCAweDgxLCAweDRDLCAweDAzLCAweEYwLAorMHgwRCwgMHhDMCwgMHgzMywgMHgwMCwgMHg4NywgMHgwMywgMHg0QywgMHgyNywgMHgzMCwgMHgwRCwgMHhDMCwgMHgwMywgMHgyMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsCisweDQwLCAweEYwLCAweDA3LCAweEMwLCAweDNGLCAweDA4LCAweEJGLCAweDAwLCAweDlDLCAweDAyLCAweEQwLCAweDBGLCAweEMwLAorMHgyMSwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMiwgMHhGMCwgMHg5NiwgMHhDMCwgMHg2RCwgMHgwMSwgMHhFRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MEUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsIDB4MDcsIDB4RjAsIDB4MEYsCisweEMwLCAweDNGLCAweDAwLCAweEZCLCAweDAxLCAweEZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDFGLCAweDAwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwOCwgMHgzNSwgMHgwMCwgMHhEMywgMHgwMCwgMHg3NCwgMHgwMCwKKzB4MzAsIDB4ODUsIDB4QzAsIDB4MjUsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDAwLCAweERGLCAweDAwLCAweDRDLCAweDNBLCAweEQwLCAweDA1LCAweDQwLCAweDI0LCAweDIwLCAweEQzLCAweDA4LCAweDRELAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMiwgMHg3MCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEQsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjgsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDM0LCAweDAwLCAweEQ1LCAweDA1LCAweDc0LCAweDE0LCAweDEwLAorMHgwNywgMHhDMCwgMHhCMiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgyOCwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwKKzB4RjEsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RDEsIDB4MEQsIDB4NDMsIDB4MjUsIDB4MDAsIDB4RjUsIDB4MDAsIDB4NTQsIDB4MkYsCisweEQwLCAweDBGLCAweDQwLCAweDdDLCAweDAwLCAweDUxLCAweDExLCAweDdDLCAweDAyLCAweDEwLCAweDFGLCAweDQwLCAweDM3LAorMHgwMCwgMHhEMSwgMHgwNCwgMHgyQywgMHgyRiwgMHhEMCwgMHgwRiwgMHg1MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MjYsIDB4MDAsIDB4QzEsIDB4MDEsIDB4MzQsIDB4MEMsIDB4MTgsIDB4MTAsCisweDQwLCAweDIwLCAweDA0LCAweDgxLCAweDAwLCAweDM0LCAweDA2LCAweEQ4LCAweDBDLCAweDQwLCAweDIzLCAweDAwLCAweEM5LAorMHg0MCwgMHgxNCwgMHgwQywgMHhEMCwgMHgwNCwgMHg3MCwgMHgyMCwgMHg0MCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEOCwKKzB4MEMsIDB4NDAsIDB4NzEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTgsIDB4MUMsIDB4NDAsIDB4MzMsIDB4MDAsCisweDg4LCAweDgwLCAweDE0LCAweDA3LCAweEQwLCAweDBDLCAweDQwLCAweDFDLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwRiwgMHg4MCwgMHg2OCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgyNCwgMHgxOCwgMHgzQiwgMHg0MCwKKzB4NjIsIDB4MDAsIDB4QTAsIDB4MDEsIDB4QjQsIDB4NDUsIDB4RDgsIDB4MUUsIDB4NDIsIDB4NkIsIDB4NjAsIDB4RTEsIDB4MDMsCisweEE0LCAweDI2LCAweEQwLCAweDE0LCAweDQwLCAweDZELCAweDAwLCAweEU1LCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDFFLAorMHg0MCwgMHg3OSwgMHgwMCwgMHhFMSwgMHgwMSwgMHhGNCwgMHgwNiwgMHgxMCwgMHgxRSwgMHg0MCwgMHg3RiwgMHg0MCwgMHg0OSwKKzB4ODEsIDB4QjQsIDB4NDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0MsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDA4LCAweEMzLCAweDA4LCAweDdDLCAweDIwLCAweDMwLCAweDAwLCAweDQwLCAweEExLAorMHg0MCwgMHhDMywgMHgwMCwgMHgzQywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgyMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgxQywKKzB4MDMsIDB4RjAsIDB4ODQsIDB4NDIsIDB4MjAsIDB4MDIsIDB4QzMsIDB4MDAsIDB4MEMsIDB4NDMsIDB4RjAsIDB4MEQsIDB4NDgsCisweDMxLCAweDQ0LCAweEMzLCAweDg4LCAweDNFLCAweDAyLCAweDcxLCAweDBDLCAweEMxLCAweDMzLCAweDAwLCAweDBCLCAweDAwLAorMHgxQywgMHgwMSwgMHhGMCwgMHg4QywgMHhDMCwgMHg0OCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4QjgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MjAsIDB4QzQsIDB4OEIsIDB4QzAsIDB4MUYsIDB4MDIsCisweEZGLCAweDAwLCAweEZDLCAweDIzLCAweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweEY3LCAweDEwLCAweEZDLCAweDAzLAorMHhBMCwgMHg4NywgMHhDMCwgMHgyRSwgMHgxMCwgMHhGQiwgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQSwKKzB4MDIsIDB4N0YsIDB4MDgsIDB4REMsIDB4MjIsIDB4RjQsIDB4OEYsIDB4QzAsIDB4MkYsIDB4NDIsIDB4RjcsIDB4MDAsIDB4Q0UsCisweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHhBMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3RSwgMHgwNCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgyQywgMHgwMSwgMHg5MywKKzB4MDAsIDB4RUMsIDB4MDcsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MjYsIDB4MDAsIDB4REYsIDB4MDAsIDB4MUMsIDB4MDIsIDB4MzAsCisweDA1LCAweEMwLCAweDI2LCAweDAwLCAweEZGLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDhELCAweEUwLCAweDM3LCAweDAwLAorMHhEMywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgxRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHgxMywgMHg4MSwgMHg0QywgMHgwNywKKzB4MzQsIDB4MEYsIDB4QzAsIDB4NTcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODgsCisweDM5LCAweDAwLCAweEVELCAweDAwLCAweEI2LCAweDAwLCAweDEyLCAweDYyLCAweEMwLCAweDM4LCAweDA0LCAweEUxLCAweDAwLAorMHhGNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhGQiwgMHgwMSwgMHg4NCwgMHgwMiwgMHgxMCwgMHgwNiwKKzB4NDAsIDB4M0IsIDB4MDAsIDB4RkQsIDB4MDEsIDB4ODUsIDB4MDMsIDB4RDAsIDB4NEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTEsCisweDQwLCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDQwLCAweDM4LCAweDAwLCAweEUxLCAweDAwLCAweEFELCAweDAzLCAweDEwLAorMHgxRSwgMHg0MCwgMHg0RiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3OSwKKzB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4ODYsIDB4MTIsIDB4MTMsIDB4NDAsIDB4NjAsIDB4MDAsIDB4RUQsIDB4MjEsIDB4QjQsCisweDBGLCAweEQwLCAweDFFLCAweDQwLCAweDczLCAweDAwLCAweEU1LCAweDA1LCAweEQ0LCAweDA3LCAweEQ5LCAweDE2LCAweDQxLAorMHg2QiwgMHgwMCwgMHhFRCwgMHgyMSwgMHhBNCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3MiwgMHgyMCwgMHhFMSwgMHgwMywKKzB4QjQsIDB4MDYsIDB4RDAsIDB4MUMsIDB4NDAsIDB4N0UsIDB4MDAsIDB4MjUsIDB4MDMsIDB4ODQsIDB4MDcsIDB4MTAsIDB4MUUsCisweDQwLCAweDA3LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDczLCAweDAyLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHg0OCwgMHgwNiwgMHg1MiwgMHgwMCwgMHhDOSwgMHgwMCwgMHgzNCwgMHhDRiwKKzB4OTAsIDB4MEMsIDB4NDAsIDB4NzMsIDB4MDAsIDB4QzksIDB4MDAsIDB4MDQsIDB4MTMsIDB4OTAsIDB4N0MsIDB4NDAsIDB4MjMsCisweDAwLCAweERELCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDQ5LCAweDAxLCAweDM0LAorMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHg3MCwgMHgwMCwgMHhDNSwgMHgwNCwgMHgyNCwgMHg0QiwgMHgxMCwgMHgwQywgMHg0MCwKKzB4NEIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4NTUsIDB4MDAsIDB4NUYsCisweDAwLCAweEZDLCAweDQ5LCAweDM0LCAweDQ3LCAweEQwLCAweDVDLCAweDQxLCAweDVGLCAweDExLCAweEZDLCAweDAxLCAweEY0LAorMHgwNSwgMHhDMCwgMHg1NywgMHgwMCwgMHg1NywgMHgwMCwgMHhEQywgMHgwMSwgMHhFMCwgMHgyNywgMHhFMCwgMHgxNywgMHgwMCwKKzB4NUYsIDB4MDAsIDB4NkUsIDB4ODEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NjMsIDB4MDEsIDB4M0MsIDB4MTUsCisweEYyLCAweDA1LCAweEYwLCAweDU0LCAweDAxLCAweDc3LCAweDAzLCAweEM0LCAweDFELCAweDMwLCAweDA1LCAweEMwLCAweDVGLAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMiwKKzB4N0MsIDB4QzAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODUsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDgsIDB4NzIsIDB4MDEsCisweEMwLCAweDA3LCAweDAyLCAweDFGLCAweDAyLCAweDdDLCAweDAwLCAweDc0LCAweDAxLCAweEMwLCAweDA3LCAweDAyLCAweDFGLAorMHg0MCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwKKzB4MjEsIDB4RTAsIDB4MDcsIDB4NDAsIDB4MUEsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzgsIDB4NEIsIDB4MDAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDkzLCAweDAyLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHgyMCwgMHgwMCwgMHg4MywgMHgwMywgMHg2QywgMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjMsIDB4NDAsIDB4OTEsIDB4MDAsIDB4MDQsIDB4MjYsIDB4MzQsIDB4MDksIDB4MDAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsCisweDY4LCAweDA2LCAweEQwLCAweDA5LCAweEUwLCAweEU3LCAweDA4LCAweDkzLCAweDQ1LCAweDRDLCAweDA2LCAweDMyLCAweDA5LAorMHhDMCwgMHgyNywgMHgwOCwgMHg5MywgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjIsIDB4NDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4ODIsCisweEQwLCAweDA5LCAweDQwLCAweEE0LCAweDA0LCAweDkxLCAweDAxLCAweDQ0LCAweDM2LCAweEQwLCAweDA5LCAweDQwLCAweDI3LAorMHgwMCwgMHg5NSwgMHgxMiwgMHg2QywgMHgwQSwgMHgxMCwgMHgxOSwgMHg0MiwgMHgyNywgMHgwMCwgMHg5RCwgMHgyMCwgMHg0NCwKKzB4MDYsIDB4RjAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDEsIDB4OUIsIDB4MDEsIDB4NDQsIDB4MDYsIDB4QjAsIDB4MjksIDB4NDQsCisweDIzLCAweDQwLCAweDkzLCAweDBFLCAweDVDLCAweDFFLCAweEQwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgyMCwgMHg5MSwgMHgwMCwgMHg1NCwgMHgwNiwgMHhEMiwKKzB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NjQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsCisweDhELCAweDAxLCAweDc0LCAweDAyLCAweDUwLCAweDg5LCAweDY0LCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc1LCAweDEyLAorMHhEMiwgMHgwOSwgMHgwMCwgMHgyNywgMHg4MCwgMHg5MSwgMHgwMCwgMHg0NSwgMHgxMiwgMHg1MCwgMHg4OSwgMHg0MSwgMHgyNywKKzB4MDAsIDB4OTksIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDIsIDB4MDksIDB4NDQsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIyLCAweDI0LCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDEyLCAweEQwLCAweDQ4LAorMHg1MCwgMHgyMCwgMHgwMSwgMHg4MSwgMHg4NCwgMHgwNCwgMHgwMiwgMHhEOCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMSwgMHg4OSwKKzB4MDQsIDB4MzQsIDB4MTMsIDB4MDAsIDB4NDgsIDB4NjAsIDB4MjMsIDB4MjAsIDB4OEQsIDB4MDQsIDB4MTQsIDB4MDIsIDB4NTAsCisweEM4LCAweDQwLCAweDIzLCAweDAxLCAweDg5LCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDI3LCAweDAwLAorMHg4MSwgMHgwNCwgMHgzNCwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0OCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4ODYsIDB4MDIsIDB4NTMsIDB4MEEsIDB4MUMsIDB4MjgsIDB4RjAsIDB4MDUsIDB4NTAsCisweDA0LCAweDQwLCAweDEzLCAweDAwLCAweDZDLCAweDA4LCAweEYwLCAweDAxLCAweEM0LCAweDg3LCAweDAyLCAweDFELCAweDBBLAorMHg3QywgMHgyOCwgMHg1MCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwQSwgMHg3QywgMHg4MCwgMHhDMiwgMHg2MSwKKzB4NDAsIDB4MDcsIDB4MDUsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsCisweDhBLCAweDM4LCAweDI4LCAweEYwLCAweDAxLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOSwgMHhCOCwgMHgyRiwgMHgwMCwgMHg5RiwgMHgwMCwgMHhGQywgMHgyMiwgMHhGMiwgMHg4QSwgMHhEMCwgMHgyRiwKKzB4MDIsIDB4QkYsIDB4MDgsIDB4RkMsIDB4NjIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDIsIDB4OTcsIDB4MDgsIDB4RUMsCisweDIyLCAweEYyLCAweDhCLCAweEMwLCAweDJGLCAweDAwLCAweDlCLCAweDA4LCAweDZDLCAweDAyLCAweEYwLCAweDI5LCAweENBLAorMHgyNywgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhCMCwgMHg4OSwgMHhDMiwgMHgyQiwgMHgwMCwgMHhBNywgMHgwOCwKKzB4REMsIDB4MjIsIDB4RjAsIDB4ODksIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE5LCAweEEwLCAweDI3LCAweDAwLCAweEJGLCAweDA4LCAweEZDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDJDLCAweDAwLAorMHhCRiwgMHgwNCwgMHhGQywgMHg1MiwgMHhCMCwgMHgwQiwgMHhDMCwgMHgyNywgMHg0MCwgMHhCQiwgMHgwMCwgMHhDOCwgMHgyMiwKKzB4MzQsIDB4NEIsIDB4QzAsIDB4MjQsIDB4MDAsIDB4QkYsIDB4MEMsIDB4REQsIDB4MDIsIDB4QjAsIDB4MTksIDB4QzAsIDB4NkYsCisweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDVCLCAweEMwLCAweDIwLCAweDAwLCAweEIzLCAweDAwLCAweENDLAorMHgyMiwgMHgzMCwgMHg0QiwgMHhDMCwgMHg2NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywKKzB4MDgsIDB4MDcsIDB4MDEsIDB4MUQsIDB4MDQsIDB4MzYsIDB4QzksIDB4MTAsIDB4MDUsIDB4RTIsIDB4MDQsIDB4MDIsIDB4MUQsCisweDAwLCAweDc0LCAweDEwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDEzLCAweDAwLCAweDU0LCAweDIwLCAweDE4LAorMHgwMSwgMHhFMCwgMHgwNiwgMHg4MCwgMHgwRCwgMHgwQywgMHg0NCwgMHgwMCwgMHg1MCwgMHgxMSwgMHg0MCwgMHgwNywgMHgwMiwKKzB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4QTEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NDQsIDB4MjAsCisweDEwLCAweDAxLCAweDQwLCAweDczLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEwLAorMHgyMywgMHgwNSwgMHg4RCwgMHgwNCwgMHgzNCwgMHhCMiwgMHgxMCwgMHg4OCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwOCwKKzB4MzQsIDB4NTIsIDB4RDAsIDB4MDgsIDB4NDIsIDB4MjMsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MDQsIDB4MDIsIDB4NTQsIDB4ODgsCisweDQyLCAweDIyLCAweDAwLCAweDhELCAweDA0LCAweDE0LCAweDAyLCAweDEwLCAweDY4LCAweDQxLCAweDIzLCAweDAwLCAweDgxLAorMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyNiwgMHgxMCwgMHg4NSwgMHg0OCwgMHgwNCwgMHgwNywgMHgxNCwKKzB4ODgsIDB4NDAsIDB4NEIsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsCisweDAwLCAweDlELCAweDAwLCAweDc0LCAweDA2LCAweDE0LCAweDA5LCAweDQwLCAweDI2LCAweDA0LCAweDlELCAweDAxLCAweDc0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg4OSwgMHgwMCwgMHg1NCwgMHg1MiwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4MjYsIDB4MDEsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4NTIsIDB4MDksIDB4NDAsIDB4MjcsIDB4NDAsIDB4OTEsIDB4MDgsCisweDc0LCAweDEyLCAweEQwLCAweDBELCAweDQwLCAweDY2LCAweDQwLCAweDk1LCAweDA0LCAweDA0LCAweDA2LCAweDEwLCAweDA5LAorMHg0MCwgMHg2MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4NzQsIDB4MEUsIDB4MzAsIDB4MjksIDB4NTAsIDB4RTQsIDB4MDAsIDB4OUYsIDB4MDEsIDB4N0MsIDB4NDYsCisweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDk3LCAweDAwLCAweDRDLCAweDAyLCAweDUwLCAweDA5LCAweDQxLCAweDI2LAorMHg4MCwgMHg5RCwgMHgwMCwgMHg1QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MiwgMHgwMywgMHg3QywKKzB4MDYsIDB4RjIsIDB4MDksIDB4RDAsIDB4MjIsIDB4MDAsIDB4OTcsIDB4MDcsIDB4NEQsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsCisweDE3LCAweEEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweDY1LCAweDAyLCAweDlGLAorMHgxMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwNSwgMHg5RiwgMHgwMCwgMHg3QywgMHg0RSwgMHhGMCwKKzB4MDksIDB4QzAsIDB4NjcsIDB4MDIsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDA5LCAweDgwLCAweDIzLCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDA2LAorMHhGMCwgMHgwOCwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5QiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMiwgMHg1QiwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDE4LCAweDk0LCAweDMxLCAweDUwLCAweDA2LCAweDQwLCAweDEzLCAweDAwLCAweDdDLCAweDIwLCAweDcwLCAweDAxLAorMHhDMCwgMHgwNywgMHgwMCwgMHgxRCwgMHg0OCwgMHg3OCwgMHg0OCwgMHgzMiwgMHgyMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwKKzB4MDAsIDB4NEMsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDQxLCAweEMwLCAweDA3LCAweDAwLCAweDAzLCAweDAyLCAweDRDLCAweDA0LCAweDMwLCAweDAxLCAweEMwLCAweDUwLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgxNCwgMHgwMCwgMHg3RCwgMHgwNCwgMHhGNCwKKzB4MDEsIDB4MzAsIDB4NDYsIDB4NDAsIDB4NUMsIDB4MDAsIDB4NTEsIDB4MTEsIDB4RjQsIDB4MDksIDB4NzAsIDB4NTUsIDB4NDAsCisweDE3LCAweDAwLCAweDdELCAweDAwLCAweEY0LCAweDA5LCAweDEwLCAweDE0LCAweDQwLCAweDE3LCAweDAwLCAweDVELCAweDAwLAorMHg4NCwgMHg0MSwgMHg3MCwgMHgwNSwgMHg0MCwgMHgxRiwgMHgwMSwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgyNywKKzB4NDAsIDB4MTcsIDB4MDAsIDB4NzIsIDB4MDAsIDB4QzQsIDB4MDEsIDB4MTQsIDB4MDUsIDB4QzEsIDB4NTIsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAzLCAweDc0LCAweDAzLAorMHgxMCwgMHgxQywgMHg2MCwgMHhCMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwQiwgMHg1OCwgMHgwQywgMHg0MCwgMHgzNywKKzB4MDAsIDB4OEQsIDB4MDEsIDB4NzQsIDB4MDksIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4REQsIDB4MDEsIDB4MTQsCisweDhGLCAweEQwLCAweDBDLCAweDQwLCAweEYzLCAweDAxLCAweDg5LCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDI0LCAweDQwLAorMHgzMywgMHg4MCwgMHg0OSwgMHgwRCwgMHgwNCwgMHgwMiwgMHgxMiwgMHgxOCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODAsIDB4MzgsIDB4MDEsIDB4QTksIDB4MDAsIDB4QjQsIDB4MTgsIDB4MTAsCisweDAyLCAweDQwLCAweDcwLCAweDA0LCAweEUxLCAweDAwLCAweEI0LCAweDAxLCAweDUwLCAweDBFLCAweDQwLCAweDNBLCAweDAxLAorMHgyOSwgMHgwMCwgMHhBNCwgMHgwMCwgMHgxNCwgMHgwQSwgMHg0MSwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMiwgMHg4NCwgMHgwMywKKzB4NDAsIDB4NEUsIDB4NDAsIDB4MkIsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDYsIDB4NDEsIDB4M0YsCisweDAwLCAweDYxLCAweDAwLCAweDg0LCAweDAyLCAweDEwLCAweDE4LCAweDQwLCAweDE2LCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHg3OCwgMHgwMSwgMHhBRCwgMHgwMSwgMHhCQywgMHgwRSwgMHgzMCwgMHgxNCwKKzB4RDAsIDB4NzgsIDB4MDAsIDB4RTMsIDB4NDEsIDB4QkUsIDB4MDcsIDB4NzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDEsIDB4NkQsCisweDAxLCAweDNDLCAweDA1LCAweDMwLCAweDFBLCAweEMwLCAweDdCLCAweDAwLCAweEVGLCAweDAxLCAweDlELCAweDA3LCAweEQwLAorMHg1RSwgMHhDMiwgMHg3QiwgMHgwMCwgMHhBQiwgMHgwMSwgMHhCNCwgMHgwNiwgMHhGMCwgMHgxNiwgMHhDMCwgMHg3QiwgMHgwMCwKKzB4RjksIDB4MDEsIDB4OEQsIDB4MDcsIDB4MzAsIDB4MUEsIDB4QzQsIDB4NTQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweEI4LCAweEI1LCAweDAwLCAweEJGLCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDAxLCAweEMwLAorMHgxNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3RSwgMHgwMywgMHhDMCwgMHgwRCwgMHhDMCwgMHg3NywgMHgwMCwgMHg1RiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDksIDB4ODAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDIsIDB4N0MsIDB4MDMsIDB4NzAsIDB4OEQsCisweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA1LCAweEMwLCAweDM3LCAweDQwLCAweERGLAorMHgwMCwgMHgzQywgMHgwMCwgMHhGNCwgMHgwOSwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4QTAsIDB4RkYsIDB4MDQsIDB4QjMsIDB4MDEsIDB4RkMsIDB4MjMsIDB4MzgsIDB4MDMsIDB4QzAsIDB4NkMsCisweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLCAweDQwLCAweDdGLCAweDA2LCAweEYzLCAweDAxLCAweENDLAorMHg4NSwgMHgzMCwgMHgxQiwgMHhFMCwgMHg3RiwgMHgwMiwgMHhBRiwgMHgwMywgMHhDQywgMHgwNiwgMHhGMCwgMHgxRiwgMHhDMCwKKzB4NEYsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MTYsIDB4QzAsIDB4N0MsIDB4NDAsIDB4RkIsIDB4ODEsCisweEZDLCAweDA2LCAweDMxLCAweDFBLCAweEMwLCAweDA4LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHg4OCwgMHgzRCwgMHgwMCwgMHhBMSwgMHgwMCwgMHhCNCwgMHgxMywgMHgxOCwgMHg0MiwgMHgwMCwgMHgyOCwgMHg0MCwKKzB4RTEsIDB4NTAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0YsIDB4MDAsIDB4NkYsIDB4MDAsIDB4OTQsIDB4MDIsCisweDEwLCAweDBBLCAweEMwLCAweDNCLCAweDAwLCAweEVELCAweDI0LCAweDg0LCAweDAzLCAweEQwLCAweDhFLCAweDQwLCAweDFCLAorMHgwMCwgMHhBRCwgMHgwMCwgMHhCNCwgMHgyMywgMHhEMCwgMHgwNiwgMHhDMCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwKKzB4MDIsIDB4MTAsIDB4MEEsIDB4NDAsIDB4NTUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisweDAwLCAweDM5LCAweDAwLCAweDIxLCAweDAwLCAweEI0LCAweDIyLCAweDE4LCAweDgzLCAweDQwLCAweDIwLCAweDAwLCAweEU5LAorMHgwOCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHg0MCwgMHg2MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHg5MCwKKzB4MEEsIDB4NDAsIDB4M0IsIDB4MjAsIDB4QUQsIDB4NDAsIDB4QTQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MkIsIDB4MDAsCisweEFELCAweDAwLCAweEI0LCAweDAyLCAweEQwLCAweDA2LCAweDQwLCAweDNELCAweDAwLCAweEUxLCAweDAwLCAweDM0LCAweDBCLAorMHgxMCwgMHgwQSwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwKKzB4MzMsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4QzksIDB4MDAsCisweDM0LCAweDI2LCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDRELCAweDAwLCAweDE0LCAweDAwLCAweDkwLCAweDI4LAorMHg0MCwgMHg3MSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDIsIDB4MjQsIDB4MDIsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MzAsIDB4MTAsIDB4ODEsIDB4MDIsIDB4MzQsIDB4MDMsIDB4MTEsCisweDA4LCAweDQwLCAweDE5LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEE4LCAweDNELAorMHg0MCwgMHg5MywgMHgwMCwgMHhGQywgMHgwMywgMHgxNCwgMHgyMSwgMHhDMCwgMHhFNCwgMHgwMiwgMHhEQiwgMHgwMSwgMHg3NCwKKzB4MkEsIDB4RjAsIDB4MEMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDEsIDB4QjQsIDB4MDksIDB4NDAsCisweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDZELCAweDAxLCAweEYwLCAweDBGLCAweEMwLCAweDM3LCAweDAwLCAweDhGLCAweDEzLAorMHg3QywgMHgwMiwgMHhGMCwgMHgwNCwgMHhDMCwgMHgzNCwgMHgwMCwgMHg1MywgMHgwQiwgMHg3QywgMHg4MiwgMHgzMCwgMHgwRCwKKzB4QzAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDIwLCAweEYwLCAweDAwLCAweEQwLCAweEU3LCAweDEwLCAweEQ3LCAweDAwLCAweDdDLCAweDgwLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHgxNywgMHgwMCwgMHgzQywgMHg0MCwgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNywKKzB4MDIsIDB4OUYsIDB4MDAsIDB4NUMsIDB4ODMsIDB4RjIsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA1LCAweEMwLCAweDc1LCAweDAwLCAweDQ3LCAweDgxLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLAorMHgyNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHgzRiwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4OEMsIDB4MjMsIDB4QjAsIDB4MDMsIDB4RDEsIDB4MjgsIDB4MDAsIDB4QjMsIDB4MDUsIDB4RkMsIDB4MDAsIDB4RjAsCisweDBGLCAweEMwLCAweDM4LCAweDAwLCAweDZCLCAweDAwLCAweENDLCAweDAwLCAweEIwLCAweDhCLCAweEUxLCAweDNGLCAweDAwLAorMHhCRiwgMHgwMCwgMHhDQywgMHgwMSwgMHhGMCwgMHgwRiwgMHhDMCwgMHg0RiwgMHgwMCwgMHhCRiwgMHgxNCwgMHhEQywgMHgwRiwKKzB4RjAsIDB4MEYsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RjMsIDB4MDAsIDB4OEMsIDB4MjIsIDB4MTAsIDB4OUYsIDB4QzAsIDB4MDcsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDM2LCAweDAwLCAweDlELCAweDAxLAorMHg0NCwgMHgwNCwgMHg5MCwgMHgxMSwgMHg1OCwgMHg0NCwgMHgwNCwgMHg5MSwgMHgwMCwgMHg3NiwgMHgwNCwgMHhEMCwgMHgwRCwKKzB4RTAsIDB4MzYsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MDksIDB4QzAsIDB4MzYsIDB4MDAsIDB4OUQsCisweDAwLCAweDZDLCAweDQ3LCAweEQwLCAweDBELCAweDQwLCAweDk3LCAweDAyLCAweERELCAweDAxLCAweDZDLCAweDA3LCAweEQwLAorMHgzRCwgMHhDMCwgMHgzMiwgMHgwMCwgMHhEMSwgMHgwMSwgMHg0NCwgMHgwNCwgMHgxMCwgMHgxRCwgMHhDMiwgMHgyNSwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsIDB4MTAsIDB4OUQsIDB4MDEsIDB4NDQsCisweDAzLCAweDkwLCAweDExLCAweDQwLCAweDQ2LCAweDQwLCAweEQxLCAweDAwLCAweDc0LCAweDBFLCAweEQxLCAweDE5LCAweDQyLAorMHgzNCwgMHgwMCwgMHhEOSwgMHgwMCwgMHg0NCwgMHgwNSwgMHg5QSwgMHgwOSwgMHg0MCwgMHgzNywgMHgyMCwgMHg4RCwgMHgwOCwKKzB4NDYsIDB4MDcsIDB4RDAsIDB4MEQsIDB4NDIsIDB4MTcsIDB4MDQsIDB4OUQsIDB4MDAsIDB4NTQsIDB4MDIsIDB4RDAsIDB4MUQsCisweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDAxLCAweDQwLCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwMywKKzB4OTAsIDB4MTAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDIsIDB4MDgsIDB4NDAsIDB4MzIsCisweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDA4LCAweDYwLCAweDMxLCAweDAwLCAweDhELCAweDAwLCAweDA1LAorMHgwMywgMHhEOCwgMHgwQywgMHg0MCwgMHgwMywgMHgwMCwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0OCwKKzB4MzYsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4NDEsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDNFLCAweDAwLCAweDFGLCAweDAwLCAweDA1LCAweDAzLCAweEIwLAorMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHhEMywgMHgwMCwgMHg3NCwgMHgwMiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgzNCwgMHgwMCwKKzB4NEIsIDB4MDAsIDB4NEMsIDB4MDAsIDB4QjAsIDB4MDksIDB4NDQsIDB4MzcsIDB4MDAsIDB4QkYsIDB4MDAsIDB4NDQsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweDlGLCAweDAwLCAweDU0LCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM0LAorMHgwMCwgMHhEMywgMHgwMCwgMHg0RCwgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgwNywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzgsIDB4MDIsCisweEMwLCAweDBELCAweDAwLCAweEZGLCAweDQwLCAweEY2LCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweDdGLAorMHgwMCwgMHhGRCwgMHgwMCwgMHhGMCwgMHgwQiwgMHhDOCwgMHgzRSwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0IsIDB4MDAsCisweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEIwLCAweDBCLCAweEMwLCAweDE1LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMiwgMHhGMywgMHgwMSwgMHhGQywgMHgyNywgMHhGMCwgMHgxRiwgMHhDMCwKKzB4N0YsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDksCisweENDLCAweDA3LCAweEYwLCAweDNGLCAweEMwLCAweDdDLCAweDAyLCAweEZGLCAweDIxLCAweENDLCAweDA3LCAweDMwLCAweDlGLAorMHhDMCwgMHg3OCwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgyMiwgMHhGMCwgMHgzRiwgMHhDMCwgMHg1RSwgMHgxMCwgMHhCQiwKKzB4MDEsIDB4RUMsIDB4ODQsIDB4MzgsIDB4MEIsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDExLCAweDAxLCAweDc0LCAweDEwLCAweEQxLCAweDAxLCAweDQwLCAweDQ3LAorMHgwMCwgMHgxMSwgMHgwNCwgMHg3NCwgMHgwNCwgMHhEMCwgMHgxMSwgMHg0MCwgMHg0NywgMHgwMCwgMHgxRCwgMHgwNCwgMHg0NCwKKzB4ODQsIDB4RDAsIDB4MDEsIDB4NDgsIDB4MDQsIDB4MDEsIDB4MUQsIDB4MDEsIDB4NDQsIDB4MDQsIDB4MTIsIDB4NDEsIDB4NDAsCisweDQ0LCAweDQwLCAweDExLCAweDAxLCAweDc0LCAweDM4LCAweEQwLCAweDBELCAweDQwLCAweDU1LCAweDAwLCAweEQxLCAweDAxLAorMHg1NCwgMHgwMywgMHhCMCwgMHgwMSwgMHg0MCwgMHgwRCwgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTEsIDB4QTAsIDB4MzMsIDB4MTEsIDB4QzEsIDB4MDAsIDB4MzQsIDB4ODMsIDB4RDAsIDB4NEMsIDB4NDEsIDB4MzcsIDB4MDAsCisweEMxLCAweDEwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweERELCAweDAwLCAweDA0LCAweDAzLAorMHhEMCwgMHg0RCwgMHg0MCwgMHgzMCwgMHgwMSwgMHhENSwgMHhBMCwgMHg2NCwgMHg4MywgMHgxMCwgMHg0QywgMHg0MCwgMHgzNSwKKzB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MTAsIDB4RDAsIDB4NEMsIDB4NDAsIDB4MzAsIDB4NjAsIDB4RDksIDB4NDAsIDB4MjQsCisweDAxLCAweDEwLCAweDA4LCAweDQ0LCAweDRDLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBOCwgMHgwNSwgMHg0MCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMiwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxMSwKKzB4MDAsIDB4NzQsIDB4MDAsIDB4RDEsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsCisweDAxLCAweDQ4LCAweDA0LCAweDAwLCAweDFELCAweDAwLCAweDY0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDIwLAorMHgxOSwgMHgwMCwgMHg3NCwgMHgwQywgMHhEMCwgMHgxQywgMHg0MCwgMHg3NSwgMHgwMCwgMHhEMSwgMHgwMSwgMHg1NCwgMHgwQiwKKzB4MTUsIDB4MTksIDB4NDEsIDB4MEQsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsCisweDM3LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDMzLCAweDAwLCAweEQzLCAweDAwLAorMHg3QywgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhDRiwgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwRCwKKzB4RDAsIDB4MzQsIDB4MDAsIDB4RDcsIDB4MDAsIDB4NkMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4RDAsIDB4MzQsIDB4MDAsIDB4REIsCisweDAwLCAweDdDLCAweDBFLCAweEUwLCAweDFELCAweEMwLCAweEMwLCAweDA0LCAweENCLCAweDAxLCAweDZDLCAweDA0LCAweDEwLAorMHgxOSwgMHhDMCwgMHgyMCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHgwRCwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4NDAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsCisweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEM0LAorMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMSwgMHgwMywgMHhDOCwgMHgwRiwgMHgwMCwgMHgzNywgMHg0MCwKKzB4N0MsIDB4NDIsIDB4RjAsIDB4MDcsIDB4QzIsIDB4MUYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4QTQsIDB4RjAsIDB4MDAsCisweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDc1LCAweDAxLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhEMCwgMHg3NCwgMHgwMCwgMHhEMywgMHgwMCwgMHg0RCwgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4NDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDcsIDB4MzAsIDB4OEQsIDB4QzEsIDB4MzcsCisweDE0LCAweERGLCAweDAxLCAweDRDLCAweDIzLCAweEYwLCAweDBELCAweEMwLCAweDc2LCAweDA0LCAweEQzLCAweDQwLCAweDZDLAorMHgyOCwgMHgzMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMSwgMHhEMywgMHgwMCwgMHg3QywgMHhDOCwgMHgyMCwgMHgyOSwgMHhDNiwKKzB4MjgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MUQsCisweDBGLCAweDc0LCAweDEwLCAweDEwLCAweDExLCAweDQyLCAweDA0LCAweDAwLCAweDExLCAweDBBLCAweDQ0LCAweDAwLCAweEQwLAorMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxMSwgMHgxMywgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHhDNywgMHgxMCwKKzB4MEQsIDB4MDAsIDB4MzQsIDB4MDQsIDB4RDAsIDB4MzEsIDB4NDAsIDB4ODMsIDB4MDAsIDB4MTEsIDB4QTUsIDB4NzQsIDB4MDgsCisweDEwLCAweDA1LCAweDQwLCAweDM3LCAweDAwLCAweEQxLCAweDExLCAweDc0LCAweDBFLCAweEIwLCAweDA5LCAweDQwLCAweDRDLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHhCNCwgMHgwMCwgMHhDRCwgMHgwMywKKzB4MzQsIDB4NDMsIDB4MTAsIDB4NkMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDEsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsCisweDQwLCAweDczLCAweDAwLCAweEMxLCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDJDLCAweDQ0LCAweDMzLCAweDAwLCAweENELAorMHgwMCwgMHgzNCwgMHgwNywgMHhEMCwgMHg3RCwgMHg0MCwgMHgzMywgMHg4MCwgMHhDMSwgMHg4MSwgMHgzNCwgMHgwRSwgMHhEMCwKKzB4MEMsIDB4NDAsIDB4QjMsIDB4MDAsIDB4QzEsIDB4MTEsIDB4NjQsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MEMsIDB4MDAsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQ4LCAweDAwLCAweDJELCAweDAxLCAweEY0LAorMHgwNCwgMHgxMCwgMHgxMywgMHg0OCwgMHg0QywgMHgwMCwgMHgyMSwgMHgwMSwgMHg4NCwgMHgwNCwgMHhEMCwgMHgxMiwgMHg0MCwKKzB4NEIsIDB4MDQsIDB4MjEsIDB4MDMsIDB4RjQsIDB4MDQsIDB4MTAsIDB4MTIsIDB4NDAsIDB4NEIsIDB4MTQsIDB4MkQsIDB4MDEsCisweEI0LCAweDA0LCAweEQwLCAweDEyLCAweDQwLCAweDRGLCAweDQwLCAweDIxLCAweDAxLCAweEI0LCAweDA1LCAweEQwLCAweDFFLAorMHg0MCwgMHg3RiwgMHgwMCwgMHg2MSwgMHgwMSwgMHhCNCwgMHhBNywgMHg5MCwgMHgxMiwgMHg0MCwgMHgzQywgMHgyMCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MzAsIDB4OTIsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDMsCisweDMwLCAweDBDLCAweEMxLCAweDMwLCAweDAwLCAweEQzLCAweDEwLCAweDBDLCAweDIzLCAweEYwLCAweDBDLCAweEMwLCAweDMzLAorMHgwMCwgMHhDMywgMHgwMCwgMHgxQywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgxQywKKzB4MDMsIDB4RjAsIDB4MEMsIDB4QzEsIDB4MzMsIDB4MjAsIDB4QzEsIDB4MDAsIDB4M0UsIDB4MjMsIDB4RjQsIDB4MEMsIDB4QzAsCisweDMzLCAweDgwLCAweEMzLCAweDA4LCAweDdDLCAweDYzLCAweDMwLCAweDgwLCAweEQwLCAweDQ4LCAweDQwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhCQywgMHgwMCwgMHhGMCwKKzB4MDIsIDB4QzAsIDB4MEIsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4ODMsIDB4QzAsIDB4MDMsIDB4MDAsCisweDFGLCAweDQwLCAweEJDLCAweDIwLCAweEYyLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLAorMHhGMCwgMHg4MSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxRiwgMHg0MSwgMHhGQywgMHhBMywgMHgyMCwgMHg4RiwgMHhDOCwgMHgzQiwKKzB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELAorMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgxRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MUQsIDB4RDAsIDB4NzQsIDB4NDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDFELCAweEQwLCAweDMwLCAweDAwLCAweEMzLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDgwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MzIsIDB4ODgsIDB4MDksIDB4MDAsIDB4MkQsIDB4MDAsIDB4QjQsIDB4MDAsIDB4RDAsIDB4MDIsIDB4NDAsCisweDBCLCAweDIwLCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweEQwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDJELCAweDAwLAorMHhCNCwgMHgwMCwgMHhEMCwgMHgwMywgMHg0MCwgMHgwQywgMHgwMCwgMHgyMSwgMHgwMCwgMHhCNCwgMHgwMCwgMHhEMCwgMHgwMywKKzB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4ODMsIDB4RDAsIDB4MDYsIDB4NDAsIDB4M0IsIDB4MjAsIDB4NkQsCisweDQwLCAweEY0LCAweDAxLCAweDEwLCAweDAyLCAweDQwLCAweDRGLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwKKzB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUYsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsCisweDg3LCAweEQwLCAweDFFLCAweDQwLCAweDdBLCAweDAwLCAweEUxLCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLAorMHg3OCwgMHgwMCwgMHhGMSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgyMCwgMHhFRCwgMHg1MSwKKzB4QjQsIDB4ODcsIDB4MTAsIDB4MUUsIDB4NDEsIDB4MTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDM2LCAweDI4LCAweDAzLCAweDAwLCAweDBELCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLAorMHgwRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgxMCwgMHgxRCwgMHgyMCwgMHgzNCwgMHgwMCwKKzB4RDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDAsCisweDEwLCAweDAxLCAweDAwLCAweDE0LCAweDlCLCAweEQwLCAweDA0LCAweDQyLCAweDMzLCAweDAwLCAweDRELCAweDAxLCAweDM0LAorMHgwMywgMHgxMSwgMHgyQywgMHg0MSwgMHg1QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKzB4QTAsIDB4MTUsIDB4MDAsIDB4NEYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzQsIDB4MTMsIDB4MDAsIDB4NUYsCisweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEQwLCAweDE2LCAweDAwLCAweDVGLCAweDAwLCAweDc0LCAweDAxLCAweEYwLAorMHgwNSwgMHhDMiwgMHgxNiwgMHgwMCwgMHg1MSwgMHgwMCwgMHgzQywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDNCwgMHgxNCwgMHg0MCwKKzB4NTMsIDB4MDAsIDB4Q0MsIDB4MDksIDB4RDEsIDB4ODcsIDB4NDAsIDB4MUYsIDB4MDAsIDB4N0QsIDB4MDEsIDB4QkMsIDB4MDUsCisweDE0LCAweDI3LCAweEMwLCAweDVGLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDA4LAorMHgwRCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMiwgMHgwMywgMHhDNCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEQsIDB4MjAsIDB4M0YsIDB4ODAsIDB4RkMsIDB4MDAsIDB4QjAsIDB4MDMsCisweEMwLCAweDBELCAweDAwLCAweDNGLCAweDgwLCAweEZDLCAweDAwLCAweEYyLCAweDAzLCAweEM0LCAweDBGLCAweDAwLCAweDNGLAorMHgwMCwgMHg2NSwgMHgyMCwgMHhGMCwgMHg4MSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxRiwgMHgwMCwgMHg3QywgMHgzOCwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsCisweDAyLCAweDlGLCAweDAwLCAweDZDLCAweDBFLCAweEYwLCAweDE5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDA1LCAweDdDLAorMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMiwgMHg5RiwgMHgwOCwgMHg2QywgMHg4MiwgMHhGMCwgMHg0OSwgMHhDMCwKKzB4NjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MTksIDB4QzgsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDUsCisweDBDLCAweDAyLCAweDMyLCAweDA5LCAweEMyLCAweDI3LCAweDAyLCAweDlELCAweDA0LCAweDVDLCAweDAyLCAweDM0LCAweDA5LAorMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHhFNiwgMHgwMCwKKzB4OUQsIDB4MDIsIDB4NDQsIDB4MEUsIDB4RDgsIDB4MjksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUIsIDB4NDMsIDB4MzQsIDB4MDIsCisweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDA4LCAweDlGLCAweDAyLCAweDQ0LCAweDAyLCAweEUwLCAweDI5LCAweDQwLCAweEE3LAorMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhCMCwgMHgyOSwgMHg0MCwgMHgyMywgMHgxMCwgMHg4QiwgMHgwMSwgMHg0NCwKKzB4MTYsIDB4MTAsIDB4MDksIDB4NDgsIDB4QTcsIDB4MDQsIDB4OEQsIDB4MDAsIDB4NkMsIDB4NEUsIDB4MTAsIDB4MDksIDB4NDgsCisweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDgwLCAweDI0LCAweDAwLCAweEJELAorMHg1MCwgMHhFNiwgMHgwMiwgMHhEMCwgMHg4QiwgMHg0MSwgMHg2RiwgMHgwOCwgMHhCNSwgMHg0MCwgMHhGNCwgMHgwMiwgMHgxMCwKKzB4MEIsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QkQsIDB4MTAsIDB4QzQsIDB4MDYsIDB4QzAsIDB4MEIsIDB4NDAsIDB4MkYsIDB4MDEsCisweEJELCAweDA4LCAweEY0LCAweDA2LCAweDEwLCAweDhCLCAweDQwLCAweDJGLCAweDAwLCAweEIxLCAweDAwLCAweDQ1LCAweDIyLAorMHgxOCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHhEQywgMHgwMCwgMHg2NCwgMHgwNiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg3MywKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4NjgsIDB4MDAsIDB4QUQsIDB4MDAsCisweDg2LCAweDg2LCAweEQwLCAweDBBLCAweDQwLCAweDJCLCAweDgwLCAweEExLCAweDAxLCAweEY0LCAweDAyLCAweDEwLCAweDBBLAorMHg0MCwgMHgyQiwgMHgwMCwgMHhBNSwgMHgwMCwgMHg4NCwgMHgwMiwgMHg1MCwgMHgxQSwgMHg0MCwgMHg2QiwgMHgwMCwgMHhBRCwKKzB4MDAsIDB4QjQsIDB4MDIsIDB4OTAsIDB4MUEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4QjksIDB4MDAsIDB4MDQsIDB4MTIsIDB4MTQsCisweDA4LCAweDQwLCAweDIzLCAweDAwLCAweENELCAweDAwLCAweDY0LCAweDAyLCAweDEwLCAweDQ4LCAweDQwLCAweDUzLCAweEEwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg4NiwgMHgwMiwgMHgxRiwgMHgwMCwgMHg2QywKKzB4MjgsIDB4RDAsIDB4QTEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTUsIDB4NEEsIDB4N0MsIDB4MDAsIDB4MzQsIDB4MDEsIDB4QzAsCisweDA3LCAweDAwLCAweDFELCAweDBBLCAweDRELCAweDAwLCAweEQwLCAweEExLCAweEMwLCAweDg3LCAweDAyLCAweDFGLCAweDAwLAorMHg3QywgMHgwMCwgMHgzMCwgMHhBMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgzMywgMHgwMCwgMHg0QywgMHgyOCwgMHgzMCwgMHhBMSwKKzB4QzAsIDB4MDcsIDB4ODAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MjgsIDB4MzksIDB4QTEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEE4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDgyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0OCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMSwgMHgwOCwgMHhDMCwgMHgyNywKKzB4MDgsIDB4OUYsIDB4NDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYyLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweEZDLCAweEEyLCAweEYwLCAweDBCLCAweEMwLAorMHgyRiwgMHgwMCwgMHhCRiwgMHgyMCwgMHhGQywgMHgwMiwgMHhGMCwgMHg4RiwgMHhDMCwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MkYsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MDIsIDB4MzAsCisweDBCLCAweEMyLCAweDJDLCAweDAwLCAweEJGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDI4LAorMHhCRiwgMHgwMCwgMHhEQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhEQywgMHgwMiwKKzB4RjAsIDB4MEIsIDB4ODAsIDB4MkYsIDB4MTAsIDB4QkYsIDB4MDAsIDB4REMsIDB4NTIsIDB4MzAsIDB4ODgsIDB4QzIsIDB4MjksCisweDAwLCAweEIzLCAweDAwLCAweERDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHgwMSwgMHgxMSwgMHgwMCwgMHg3NCwgMHg0MCwgMHgxMiwgMHgwMSwKKzB4NDksIDB4MDQsIDB4MDAsIDB4MUQsIDB4MTQsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDgsIDB4MDcsIDB4MjAsIDB4MTcsCisweDEwLCAweDc0LCAweDAwLCAweDUwLCAweDQxLCAweDQxLCAweDA3LCAweDAxLCAweDFELCAweDgwLCAweDc0LCAweDAwLCAweEQwLAorMHgwMSwgMHg0OSwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgxMCwgMHgxMCwgMHg0MSwgMHg0NCwgMHgwNywgMHgwMCwKKzB4MTEsIDB4MDAsIDB4NUMsIDB4ODEsIDB4RDIsIDB4NDEsIDB4NDUsIDB4NzMsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIxLCAweDA1LCAweDgxLCAweDYwLCAweDE0LCAweDEyLCAweDE0LCAweDA4LCAweDQwLAorMHgyMCwgMHgwMCwgMHg4RCwgMHgwNCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwgMHgwMCwKKzB4MTQsIDB4MDMsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MzMsIDB4ODUsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MDgsCisweDQwLCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDE0LCAweDUyLCAweEQwLCAweDQ4LCAweDQwLCAweDIxLCAweDAwLCAweDg5LAorMHgwMCwgMHgxNCwgMHgwMiwgMHhEOSwgMHg0OCwgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NTAsIDB4MjQsCisweDEwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDk1LCAweDAwLCAweDc0LAorMHgwMiwgMHg1MSwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDYsIDB4RDAsIDB4ODksIDB4NDAsIDB4RTcsIDB4MDAsIDB4OTksIDB4MDEsCisweDUwLCAweDEyLCAweEQwLCAweDA5LCAweDYwLCAweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHgyMCwgMHgyNSwgMHgwMCwgMHg5MywgMHg4MCwgMHg1QywgMHgwMiwgMHgzMSwgMHgwOSwgMHhDMiwgMHgyNCwgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4RTAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4NDAsIDB4NUMsIDB4MDIsCisweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHg4MCwgMHg1QywgMHgxMiwgMHhCNCwgMHgwOSwgMHhDMCwgMHhFMSwgMHg0MCwgMHg5QiwgMHgwMSwgMHg1OCwKKzB4MDYsIDB4RjAsIDB4MDksIDB4QzQsIDB4MTcsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisweDA4LCAweDI1LCAweDQwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYzLCAweDA5LCAweDQwLCAweDI3LCAweDEwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHg4MCwgMHgyNywgMHgwMCwgMHg5NiwgMHgwMCwgMHg3MCwgMHgwMiwgMHg3MCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDQsCisweDlGLCAweEEwLCAweDdDLCAweDAyLCAweDIwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDk2LCAweDAwLCAweDVDLCAweDQyLAorMHhGMSwgMHg0OSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwKKzB4MDUsIDB4MDYsIDB4MUYsIDB4MDEsIDB4NkMsIDB4MTAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsCisweDRDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMywgMHgwNCwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwOCwgMHgxMywKKzB4MDAsIDB4NEMsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDgsIDB4MTcsIDB4MDAsIDB4NkMsIDB4MjgsIDB4RjAsCisweDIxLCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDVDLAorMHgwMCwgMHg3RCwgMHgxMSwgMHhDNCwgMHgwRCwgMHg3MiwgMHg1NywgMHg0MCwgMHgxNCwgMHgwNCwgMHg3RiwgMHg0MSwgMHg0NCwKKzB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4N0QsIDB4MjAsIDB4MzQsIDB4MDEsIDB4NzIsIDB4MDcsIDB4QzksCisweDFFLCAweDAyLCAweDUxLCAweDAwLCAweDc0LCAweDAxLCAweDcwLCAweEQ3LCAweDAwLCAweDlGLCAweDA0LCAweDUxLCAweDAxLAorMHhDNCwgMHgxNSwgMHgwMCwgMHgwNSwgMHg0MCwgMHgxQywgMHgwMCwgMHg3MSwgMHgwNSwgMHhFNCwgMHgwRCwgMHhEMCwgMHgwNSwKKzB4NDAsIDB4NTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4RjYsIDB4MDAsCisweDRELCAweDIxLCAweDY0LCAweDJGLCAweDUwLCAweDRELCAweDQwLCAweDIwLCAweDIwLCAweENELCAweDA0LCAweDA0LCAweDAzLAorMHhEMCwgMHgwQywgMHg0MCwgMHgyMywgMHgwMCwgMHhDRCwgMHgwRCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHhCMCwKKzB4MDAsIDB4ODksIDB4MDAsIDB4MzQsIDB4MDIsIDB4NTAsIDB4MkMsIDB4NDAsIDB4RjMsIDB4MDAsIDB4ODEsIDB4ODksIDB4NDQsCisweDEzLCAweDkxLCAweDBDLCAweDQwLCAweDAxLCAweDAwLCAweDg1LCAweDAxLCAweDI0LCAweDBGLCAweEQwLCAweDBDLCAweDQyLAorMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwMCwgMHhFRCwKKzB4MDEsIDB4ODYsIDB4MDEsIDB4NTAsIDB4MEUsIDB4NTAsIDB4MzgsIDB4MDAsIDB4RjUsIDB4MTEsIDB4ODQsIDB4MDMsIDB4RDAsCisweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDFGLCAweDQwLCAweDVBLCAweDQwLAorMHhFOSwgMHgwMCwgMHhCNCwgMHgwMywgMHg1MCwgMHgwRSwgMHg0MCwgMHg2QiwgMHg0MCwgMHhFMSwgMHgwMSwgMHhDNiwgMHgwMywKKzB4MTAsIDB4NUYsIDB4NDAsIDB4MkMsIDB4MDgsIDB4NjEsIDB4MDAsIDB4QTQsIDB4MDMsIDB4RDIsIDB4NEUsIDB4NjAsIDB4MDcsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDc4LCAweDAwLCAweEVGLCAweDAxLAorMHhBQywgMHgwNywgMHg3MCwgMHgxRiwgMHhDMCwgMHg3OCwgMHgyMCwgMHhFRCwgMHgwMSwgMHg4NSwgMHgwNywgMHhGMCwgMHgxRSwKKzB4QzYsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RUIsCisweDAxLCAweEJDLCAweDA3LCAweDcwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweEUzLCAweDAxLCAweENDLCAweDA1LCAweEIwLAorMHg5RSwgMHhDMCwgMHg3OSwgMHgwMCwgMHg2NSwgMHg0MSwgMHhBQywgMHgwNCwgMHhGMCwgMHg1RSwgMHhDMCwgMHg0NywgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4N0MsCisweDAxLCAweDcxLCAweDBELCAweEM0LCAweDM3LCAweDAwLCAweENGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweDQwLAorMHgzNywgMHgwMCwgMHhERiwgMHg0MCwgMHg3QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgxNywgMHgxMCwgMHhENywgMHg4MCwKKzB4N0MsIDB4ODMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MjMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4OEQsCisweEMwLCAweDM3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDhELCAweEMwLCAweDQzLCAweDYwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHg1RCwgMHgwMCwgMHhGRiwgMHgwMSwgMHhDQywgMHgxMywKKzB4RjAsIDB4NUYsIDB4QzAsIDB4N0IsIDB4NjIsIDB4NzMsIDB4NDEsIDB4QkMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsCisweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDI3LCAweEYwLCAweDE3LCAweEMwLCAweDc4LCAweDAwLCAweEZCLCAweDA5LCAweEVDLAorMHgyNywgMHgzMCwgMHgxRSwgMHhDMCwgMHg3OCwgMHgwMCwgMHhGMywgMHgwMCwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwKKzB4NEMsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MDgsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDE5LCAweDE2LCAweEVELCAweDAwLCAweDg0LCAweDAxLCAweEQwLAorMHgwNiwgMHg0MCwgMHgzQiwgMHgwNiwgMHg2NSwgMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHg4RSwgMHg0MCwgMHgzQiwgMHgwMiwKKzB4NjEsIDB4MDgsIDB4QjQsIDB4MDMsIDB4RDIsIDB4NDcsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTEsIDB4MDgsIDB4ODQsIDB4MDMsCisweDEwLCAweDBFLCAweDQwLCAweDM4LCAweDA0LCAweEU1LCAweDA4LCAweEI0LCAweDI5LCAweEQwLCAweDBGLCAweDQwLCAweDI5LAorMHgwMiwgMHg2RCwgMHgwMCwgMHhCNCwgMHgyMiwgMHhEMCwgMHgwRSwgMHhDMCwgMHg1NiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4MDAsIDB4RkQsIDB4MDAsIDB4ODQsIDB4MjMsIDB4RDAsIDB4NEUsCisweDQ4LCAweDNCLCAweDEyLCAweDYwLCAweDAwLCAweEY0LCAweDAzLCAweDEwLCAweDJFLCAweDQwLCAweDNGLCAweDAwLCAweEUxLAorMHgwMCwgMHhCNCwgMHgwMywgMHhDMSwgMHgwNiwgMHg2MCwgMHg5QywgMHgwMCwgMHhGMSwgMHg4MCwgMHhDNiwgMHgwMywgMHgxMCwKKzB4ODcsIDB4NDAsIDB4QjgsIDB4MDAsIDB4RTEsIDB4MDgsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDAsCisweDZELCAweDAwLCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDQwLCAweDYwLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgwMSwgMHgwMCwgMHhDRCwgMHgxMiwgMHg0NCwgMHgyQywgMHhEMCwgMHhBOCwgMHg0MCwKKzB4QjMsIDB4MDQsIDB4MTEsIDB4MDMsIDB4MzQsIDB4MEIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4QjMsIDB4MDQsIDB4OTEsIDB4MDMsCisweDM0LCAweDBCLCAweDkwLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweEMxLCAweDAyLCAweDA0LCAweDBCLCAweDEwLCAweDA4LAorMHg0MSwgMHgzMCwgMHg0MCwgMHhDNSwgMHgwMSwgMHg3NCwgMHg0MCwgMHhEMCwgMHgxQywgMHg0MCwgMHgzMSwgMHgxMCwgMHg0RCwKKzB4MEEsIDB4MzAsIDB4MDIsIDB4QzEsIDB4MkQsIDB4NDgsIDB4MUEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweEEwLCAweDYxLCAweDAwLCAweENGLCAweDAwLCAweDRDLCAweDIyLCAweEYwLCAweDIxLCAweEMwLCAweEY3LAorMHgwMCwgMHg5MywgMHgxMSwgMHg3QywgMHgwQiwgMHgzNCwgMHg1QywgMHhDMCwgMHgzMywgMHgwMCwgMHgxMywgMHgwMSwgMHg3QywKKzB4MjMsIDB4RjAsIDB4NzksIDB4RDAsIDB4NjQsIDB4MDEsIDB4QzMsIDB4MDgsIDB4NEMsIDB4MjMsIDB4MzAsIDB4NTEsIDB4QzAsCisweDM0LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDVGLCAweEMwLCAweDEwLCAweDIwLCAweENGLCAweDIzLAorMHg3QywgMHgwOCwgMHhDMCwgMHhCRiwgMHg4MCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4MDgsIDB4MjcsIDB4MjAsIDB4REYsIDB4MDEsIDB4N0MsIDB4MDIsIDB4RjEsIDB4MjEsIDB4QzgsIDB4MzcsIDB4MDAsCisweDlGLCAweDAyLCAweDdDLCAweDIzLCAweEYxLCAweDBELCAweEMwLCAweDc3LCAweDAwLCAweDFGLCAweDFBLCAweDdDLCAweDA3LAorMHhGMCwgMHgyOSwgMHhDOCwgMHg4NywgMHgwMCwgMHhERiwgMHgwMSwgMHg3QywgMHgwNywgMHhGMCwgMHgyMSwgMHhDMCwgMHg4NywKKzB4MDAsIDB4REYsIDB4MDgsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDIsIDB4NUYsIDB4MDQsIDB4N0MsCisweDNBLCAweEYxLCAweDhELCAweEMwLCAweDI3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorMHgwOCwgMHgwRiwgMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgwMCwgMHgzMCwgMHgwMywgMHhDMSwgMHg3QywgMHgwOCwgMHgzRiwKKzB4OTAsIDB4Q0MsIDB4NDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0MsIDB4MDAsIDB4MzMsIDB4MDAsIDB4Q0MsIDB4MDcsIDB4MzAsCisweDAzLCAweEMxLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweENDLCAweDA3LCAweEYwLCAweDAzLCAweEMwLCAweDNGLCAweDAwLAorMHhGRiwgMHgxMiwgMHhGQywgMHgwMCwgMHgzMCwgMHgwRiwgMHhDMSwgMHg3RiwgMHgwMSwgMHg3MywgMHgwMSwgMHhDQywgMHgwMCwKKzB4RjEsIDB4MEQsIDB4QzAsIDB4MTQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsCisweEU2LCAweDA5LCAweEQwLCAweDAxLCAweDQ0LCAweDA0LCAweDEyLCAweDMwLCAweDQyLCAweDM0LCAweDA4LCAweDlELCAweDAzLAorMHg0QywgMHgwMywgMHhEMCwgMHgwRCwgMHg2MCwgMHgzNCwgMHgwMCwgMHgxMSwgMHgyNSwgMHgwNCwgMHgwNywgMHgxMiwgMHgzOSwKKzB4NDAsIDB4QzcsIDB4MDAsIDB4REQsIDB4ODAsIDB4NkMsIDB4MDMsIDB4RDAsIDB4MTEsIDB4NDAsIDB4ODcsIDB4MDAsIDB4REQsCisweDAxLCAweDcwLCAweDBDLCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDUxLCAweDA4LCAweDdELCAweDRDLCAweEQyLAorMHgwRCwgMHg0QywgMHgxNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg2NiwKKzB4MDAsIDB4RDEsIDB4MDEsIDB4NDQsIDB4MDYsIDB4OTgsIDB4MTksIDB4NDAsIDB4MzYsIDB4MDEsIDB4OUQsIDB4MTEsIDB4NjQsCisweDAzLCAweEQwLCAweDBELCAweDQwLCAweDc0LCAweDAwLCAweDkwLCAweDAxLCAweDQ0LCAweDIzLCAweDEwLCAweDE5LCAweDQxLAorMHg2NywgMHgwNCwgMHhERCwgMHgwNCwgMHg1NCwgMHhBMywgMHhEMSwgMHgxOSwgMHg0MCwgMHgzNywgMHgwNCwgMHhERCwgMHgwMCwKKzB4NzQsIDB4MDYsIDB4MTgsIDB4MEQsIDB4NDAsIDB4MTcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDQsIDB4RDAsIDB4MEQsCisweDU4LCAweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDI0LCAweDAwLAorMHg5MSwgMHgwMSwgMHgwNCwgMHgwMiwgMHg5NCwgMHgwMSwgMHg1MCwgMHgzMiwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4MDMsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsCisweDAwLCAweENELCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDA4LCAweDQ4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LAorMHgwMiwgMHgxMCwgMHgwQywgMHg0MCwgMHgzNywgMHgwMCwgMHg1MSwgMHgwMCwgMHgyNCwgMHgwMiwgMHg5MCwgMHgwQywgMHg0MCwKKzB4NDAsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDYsIDB4MDAsIDB4RDMsCisweDAwLCAweDRDLCAweDAyLCAweEIwLCAweDA5LCAweEM0LCAweDM2LCAweDAwLCAweDFGLCAweDAwLCAweDZELCAweDAzLCAweEYwLAorMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwMSwgMHhDNCwgMHgyNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjEsIDB4MDEsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsCisweDM0LCAweDBGLCAweEMwLCAweDM3LCAweDAwLCAweDUzLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweDA0LAorMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg5OCwgMHgyRiwgMHgwMCwgMHhBRiwgMHgwMCwKKzB4RjQsIDB4MDIsIDB4NzAsIDB4MEIsIDB4QzQsIDB4M0QsIDB4MTAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsCisweDgwLCAweDNCLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEVGLAorMHgwMCwgMHhCOCwgMHgwMywgMHhGMCwgMHgwQiwgMHhDOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwKKzB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjgsIDB4MEYsIDB4QzAsIDB4MTcsIDB4MjQsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDBCLCAweDgwLCAweDMzLCAweDAwLCAweEZDLAorMHgxMCwgMHgzMCwgMHgwRiwgMHhDMCwgMHgzQywgMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgyNywgMHgzMCwgMHgwMywgMHhDOCwKKzB4MkMsIDB4MDUsIDB4QjUsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4ODMsIDB4QzAsIDB4MkYsIDB4MDMsIDB4MzMsIDB4MDEsCisweENDLCAweDAxLCAweEYwLCAweDFCLCAweEMwLCAweDJGLCAweDAxLCAweDNGLCAweDAxLCAweENDLCAweDI2LCAweEIwLCAweDBCLAorMHhDMCwgMHg3QywgMHgwMCwgMHhCRiwgMHgxNCwgMHhGQywgMHgyNywgMHgzMCwgMHg0RiwgMHhDMSwgMHgwQywgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjcsIDB4MTAsIDB4MTEsIDB4MEEsIDB4NzQsIDB4MjgsCisweDEyLCAweDRGLCAweDQwLCAweDdDLCAweDEwLCAweEQ1LCAweDAxLCAweDA0LCAweDAyLCAweDEwLCAweDAxLCAweDUwLCAweEU0LAorMHgwOCwgMHg5MSwgMHgwOCwgMHg1NCwgMHgwMiwgMHgxMCwgMHgwQiwgMHg0MCwgMHhBRiwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwKKzB4MkMsIDB4RDAsIDB4MTksIDB4NDAsIDB4RTcsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NDQsIDB4MDIsIDB4MTQsIDB4MDgsIDB4NDAsCisweDc0LCAweDAwLCAweDlELCAweDAzLCAweDc0LCAweDAzLCAweDEwLCAweDNELCAweDQwLCAweDA0LCAweDYwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgyMywgMHgwMCwgMHgwMSwgMHgyMCwgMHgzNCwgMHgwMCwgMHg1MCwKKzB4MEMsIDB4NTEsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4MDAsCisweDg1LCAweDAwLCAweDA0LCAweDAyLCAweDE0LCAweDQ4LCAweDQwLCAweEI3LCAweDIwLCAweDkxLCAweDE0LCAweDE2LCAweDgxLAorMHg5MCwgMHgwQywgMHg0MiwgMHhCMywgMHgwMCwgMHgxRCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMCwKKzB4MDAsIDB4MDksIDB4MDEsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NDQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDI1LCAweDAwLCAweDExLCAweDAxLCAweDc0LCAweDQ0LCAweDEwLCAweDhELAorMHg0MCwgMHgzNCwgMHgwMCwgMHhENSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwMSwgMHg0MCwgMHgyNCwgMHgwMSwgMHhEMSwKKzB4MjAsIDB4NTQsIDB4NDYsIDB4MTAsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NTQsIDB4NDAsIDB4RDAsCisweDE1LCAweDQwLCAweDc3LCAweDAwLCAweDFELCAweDExLCAweDY0LCAweDEyLCAweDEwLCAweDA5LCAweDQxLCAweDc0LCAweDAwLAorMHhERCwgMHg0NCwgMHg3NCwgMHgyMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgxQywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDcsIDB4NDIsIDB4MTEsIDB4ODEsIDB4N0MsIDB4MEMsIDB4MzQsIDB4MUQsIDB4QzAsCisweDM0LCAweDAwLCAweEQzLCAweDAwLCAweDQ5LCAweDAzLCAweDMwLCAweDE1LCAweEQwLCAweDI0LCAweDAwLCAweDk3LCAweDgwLAorMHg0QywgMHgwNiwgMHgzMCwgMHgzOSwgMHhDMCwgMHg2MywgMHg0MCwgMHg4MywgMHgwMSwgMHg1RCwgMHgwMSwgMHhGMCwgMHgxOSwKKzB4QzAsIDB4NzcsIDB4MDAsIDB4MEYsIDB4MDEsIDB4MkQsIDB4MDcsIDB4QjAsIDB4MjksIDB4RDAsIDB4MzQsIDB4MDAsIDB4OUYsCisweDAxLCAweDdFLCAweDA2LCAweDMwLCAweDBELCAweEMwLCAweDAwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNywgMHg4OCwgMHg2RCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhCQywgMHgwMCwgMHhFMiwgMHgxRSwgMHhFMSwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RjgsIDB4MDMsIDB4RjAsIDB4NEUsIDB4RTAsIDB4NkIsIDB4MDAsIDB4OEYsIDB4MjAsIDB4N0MsCisweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDY3LCAweDIyLCAweEJGLCAweDEwLCAweEVDLCAweDI1LCAweEYwLCAweDBCLCAweEMwLAorMHgzRiwgMHgwOCwgMHgzRiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHg0NywgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHg4MSwKKzB4RkUsIDB4MDYsIDB4RjQsIDB4MEMsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDA4LCAweDIxLCAweDAwLCAweDEzLCAweDgwLCAweDZDLCAweDE4LCAweDMyLCAweDBELCAweEMwLCAweDczLCAweDAwLAorMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwNSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgzQSwKKzB4MzQsIDB4MkQsIDB4QzAsIDB4M0MsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NzcsCisweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDIzLCAweDMwLCAweDI0LCAweEQwLCAweDM0LCAweDAwLCAweERGLCAweDAwLCAweDRDLAorMHgwMiwgMHhGMCwgMHgwRCwgMHhFMCwgMHgwQSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywKKzB4QTAsIDB4NkMsIDB4MDEsIDB4OTEsIDB4MDEsIDB4NDQsIDB4MEMsIDB4MTAsIDB4MUQsIDB4RTQsIDB4M0YsIDB4MDAsIDB4RTEsCisweDAwLCAweDc0LCAweDA3LCAweDEwLCAweDBELCAweDQ4LCAweDI0LCAweDAwLCAweEQxLCAweDAwLCAweDZDLCAweDBBLCAweDEyLAorMHgwRCwgMHg0OCwgMHgyNCwgMHgzMCwgMHg5QiwgMHgwMCwgMHg3MCwgMHgxNSwgMHgxMSwgMHgwNSwgMHg0MCwgMHgzNCwgMHgwMCwKKzB4MUQsIDB4MDAsIDB4NzQsIDB4MDcsIDB4MTAsIDB4QTUsIDB4NDAsIDB4MzQsIDB4MDAsIDB4REQsIDB4ODQsIDB4NDQsIDB4MDIsCisweEQwLCAweDBGLCAweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDIwLAorMHg0MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHg4NCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMywgMHg0MCwgMHhDMSwgMHg4MCwKKzB4NzQsIDB4MDcsIDB4OTAsIDB4MjAsIDB4NDEsIDB4MjAsIDB4NDAsIDB4ODEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4OTEsIDB4MDgsCisweDQwLCAweDIxLCAweDIwLCAweDgxLCAweDAyLCAweDMwLCAweDQxLCAweDE2LCAweDBDLCAweDUyLCAweDMzLCAweDAwLCAweDRELAorMHgwMCwgMHgzNCwgMHgwNiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMSwgMHg0NCwgMHgwMiwgMHhEMCwKKzB4MEMsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NkMsCisweDAwLCAweDAxLCAweDExLCAweDg0LCAweDY0LCAweDEwLCAweDFFLCAweDQwLCAweDc5LCAweDQwLCAweEUxLCAweDYxLCAweEI0LAorMHg0RSwgMHg5MCwgMHgxMiwgMHg1MCwgMHg3OCwgMHgwMCwgMHhBMSwgMHgxMSwgMHhBNCwgMHgyNiwgMHg5MCwgMHgwQSwgMHg0MCwKKzB4NjksIDB4MDAsIDB4RTksIDB4MDEsIDB4QjQsIDB4MDYsIDB4MTAsIDB4MUYsIDB4NDAsIDB4NUEsIDB4MDAsIDB4NkQsIDB4MDEsCisweEI0LCAweDA2LCAweDEwLCAweDFBLCAweDQwLCAweDc4LCAweDIwLCAweDhELCAweDAxLCAweDg0LCAweDA2LCAweEQwLCAweDFFLAorMHg0MCwgMHgxOSwgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgxOCwgMHgyMCwgMHgwMCwKKzB4MDMsIDB4MjAsIDB4NkUsIDB4MjAsIDB4MzQsIDB4MDgsIDB4NDEsIDB4MzMsIDB4MDAsIDB4QzMsIDB4MDAsIDB4M0MsIDB4MDIsCisweDkwLCAweDAxLCAweEMxLCAweDIwLCAweDAwLCAweDgzLCAweDAwLCAweDBDLCAweDIzLCAweEI0LCAweDg5LCAweEMwLCAweDMxLAorMHgwOSwgMHg4MywgMHgwMCwgMHgzQywgMHgwMCwgMHgzMCwgMHgwQywgMHhDMCwgMHgzMywgMHgwMCwgMHgwRiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4MzQsIDB4MDgsIDB4QzAsIDB4MzAsIDB4MDAsIDB4Q0YsIDB4MDgsIDB4MEQsIDB4MDIsIDB4RjIsIDB4MEMsIDB4RDAsCisweDQ4LCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDJELCAweDQwLCAweDNGLAorMHgwMCwgMHhGNiwgMHgyMCwgMHhGNSwgMHgwRiwgMHhDMCwgMHgzQiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHg1MCwKKzB4MDMsIDB4QzAsIDB4M0IsIDB4MDIsIDB4RkYsIDB4MDgsIDB4RkMsIDB4QTEsIDB4NzAsIDB4Q0IsIDB4RTAsIDB4QkUsIDB4MDAsCisweEJGLCAweDAwLCAweEJDLCAweDAyLCAweEYwLCAweDA2LCAweEMwLCAweDNELCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAyLAorMHhGMCwgMHg4QiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwQSwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsCisweENDLCAweDAwLCAweDMwLCAweDU5LCAweEM4LCAweDMwLCAweDEzLCAweEY3LCAweDAwLCAweDc0LCAweDAzLCAweDcwLCAweDAxLAorMHhDMCwgMHgyNCwgMHgwMCwgMHg5RSwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgyRCwgMHhDMSwgMHhBQywgMHgwMCwgMHg5MywKKzB4MDAsIDB4N0MsIDB4MDEsIDB4QzAsIDB4MUQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4NUIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsCisweDA1LCAweEQwLCAweDMwLCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDA3LCAweDMwLCAweDBELCAweEMwLCAweDUzLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHhBOSwgMHgwMCwgMHgyMSwgMHhDMCwgMHg4NCwKKzB4MDIsIDB4MTEsIDB4MEUsIDB4QzEsIDB4MzgsIDB4MDQsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEYsIDB4NDAsCisweDM4LCAweDAwLCAweEFELCAweDAwLCAweEJDLCAweDAzLCAweDEwLCAweDBFLCAweDQyLCAweDIwLCAweDAwLCAweEUxLCAweEMwLAorMHhCNCwgMHgwMywgMHhDMCwgMHgwRSwgMHhDMCwgMHgzOCwgMHgwMCwgMHg2RCwgMHgwMCwgMHhCNCwgMHgwMiwgMHg1MCwgMHgwQywKKzB4NDAsIDB4MzgsIDB4MDAsIDB4QTUsIDB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NEIsIDB4NjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDY5LCAweDAxLCAweDIxLCAweDAxLCAweDg0LCAweDA3LAorMHgxMCwgMHgxOCwgMHgwMCwgMHg3OCwgMHgwMSwgMHhFNSwgMHgwMSwgMHhCNCwgMHg0NywgMHhEMSwgMHgxMiwgMHg1MCwgMHg2QSwKKzB4MDAsIDB4OEQsIDB4MDEsIDB4MDQsIDB4MDcsIDB4MTAsIDB4MUMsIDB4NDgsIDB4NzgsIDB4MDAsIDB4QTAsIDB4MDEsIDB4QjQsCisweDA1LCAweEQwLCAweDFGLCAweDUwLCAweDc4LCAweDAwLCAweDJELCAweDAxLCAweEI0LCAweDA2LCAweDE4LCAweDFFLCAweDQwLAorMHg2OCwgMHgwMCwgMHhFOSwgMHgwMSwgMHhGNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsIDB4MDAsIDB4RDEsIDB4NTMsIDB4MDQsIDB4MDMsIDB4MTAsCisweDBDLCAweDUwLCAweDMyLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDA3LCAweEQwLCAweDBELCAweDQwLCAweDMyLCAweDAwLAorMHhDRCwgMHg0MCwgMHgzNCwgMHgyQiwgMHgxMCwgMHg1QywgMHg2MCwgMHgzMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgwMywKKzB4RDAsIDB4MDQsIDB4NDAsIDB4RjIsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MjYsIDB4NTAsIDB4N0MsIDB4NDIsIDB4MzAsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDA3LCAweDE0LCAweDBDLCAweDQwLCAweDVCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHgxRCwgMHgwMCwgMHg3MywgMHgyNywgMHhDQywgMHgwRCwgMHgzNCwgMHgwNSwKKzB4QzgsIDB4MTAsIDB4MDAsIDB4NTcsIDB4MjAsIDB4N0MsIDB4MDUsIDB4RjAsIDB4MjcsIDB4QzEsIDB4MTYsIDB4MDAsIDB4NUYsCisweDAwLCAweENDLCAweDA1LCAweDM0LCAweDU3LCAweEQwLCAweDE0LCAweDQwLCAweDczLCAweDAwLCAweEZDLCAweDAxLCAweEYwLAorMHgwNywgMHhDMCwgMHgxQywgMHgwMSwgMHg2QiwgMHgwMCwgMHg3QywgMHgwMSwgMHgzMCwgMHg3NywgMHhEMCwgMHgxNCwgMHgwMCwKKzB4NkIsIDB4MDAsIDB4N0MsIDB4MDEsIDB4MzAsIDB4MDUsIDB4QzAsIDB4NUYsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDA1LCAweDQwLCAweDFGLCAweDAwLCAweDdELCAweDIwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNSwgMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHgwMCwgMHhGMiwgMHgwMSwgMHhDNSwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4NDAsIDB4RjAsIDB4MDAsIDB4QzAsIDB4MDMsIDB4NDAsIDB4MUYsIDB4MDQsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MDEsCisweEMwLCAweDA1LCAweDMwLCAweDFGLCAweDAxLCAweDdDLCAweDAwLCAweEY0LCAweDIxLCAweEM0LCAweDA3LCAweDAwLCAweDE3LAorMHgwMSwgMHg3QywgMHgyMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NEMsIDB4NEEsIDB4MzAsIDB4NTksIDB4QzAsIDB4RTcsCisweDAwLCAweDhCLCAweDAxLCAweDZDLCAweDAyLCAweEYwLCAweDE5LCAweDgwLCAweDI0LCAweDEwLCAweDhGLCAweDg5LCAweDRDLAorMHgwMiwgMHgzOCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwNSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjMsIDB4MDQsIDB4OTMsIDB4MDEsIDB4NkQsIDB4MDIsIDB4MzAsIDB4NTksIDB4NDAsIDB4QTQsIDB4MDAsIDB4OTMsIDB4MDAsCisweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgyMCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwQSwgMHgxMCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwKKzB4OTEsIDB4MDMsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NkMsIDB4MDIsCisweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDAzLCAweDc0LCAweDA2LCAweEQwLCAweDA5LCAweDQwLCAweDI3LAorMHgyMCwgMHg5QiwgMHgwMCwgMHgyQywgMHgxMiwgMHg1MCwgMHg3OSwgMHg1MCwgMHg2MCwgMHgwMCwgMHg5QiwgMHgwMCwgMHg0NCwKKzB4MDIsIDB4RDIsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisweEEwLCAweDIwLCAweDQwLCAweDk1LCAweDIwLCAweDA0LCAweDBBLCAweDU2LCAweDI5LCAweDQwLCAweDI3LCAweDQwLCAweDk5LAorMHhBOCwgMHg2NCwgMHgwNiwgMHhEOCwgMHg4OSwgMHg2MCwgMHgyNSwgMHhBMCwgMHg5RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxNCwKKzB4MEQsIDB4NDAsIDB4MjYsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDYsIDB4RDgsIDB4MDksIDB4NDAsIDB4NzcsIDB4MDAsCisweDkxLCAweDA4LCAweDY2LCAweDkyLCAweDEyLCAweDA4LCAweDQyLCAweDI1LCAweEEwLCAweDk5LCAweDAwLCAweDQ0LCAweDAyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHg3MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4MjAsIDB4MDEsIDB4ODEsIDB4MDQsIDB4MDQsIDB4MTIsIDB4NTAsIDB4NDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4ODEsIDB4MDQsCisweDAwLCAweDA2LCAweEQwLCAweDQ4LCAweDUwLCAweDIxLCAweDAxLCAweDhELCAweDA0LCAweDI1LCAweDEzLCAweDEwLCAweDQ4LAorMHg0MCwgMHgyMiwgMHgxMSwgMHhDMSwgMHgwMCwgMHgzNiwgMHgxMiwgMHhEMCwgMHgwOCwgMHg0MiwgMHgyMywgMHgyMSwgMHg5OSwKKzB4MDAsIDB4NjQsIDB4MDIsIDB4NTAsIDB4NDgsIDB4NDAsIDB4MjUsIDB4MDAsIDB4ODksIDB4MDQsIDB4MDUsIDB4MDIsIDB4RDAsCisweDQ4LCAweDQxLCAweDUzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDgzLAorMHgwMiwgMHgwNywgMHgwQSwgMHgwQywgMHgyOCwgMHg3MiwgMHhBMSwgMHg0MCwgMHgwNywgMHgwMCwgMHg1QiwgMHgwMCwgMHg2QywKKzB4MjgsIDB4RjAsIDB4QTEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MEEsIDB4NEMsIDB4MjgsIDB4MTAsIDB4QTEsIDB4NTAsCisweDg2LCAweDAyLCAweDEzLCAweDBBLCAweDdDLCAweDAxLCAweEQxLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDAwLAorMHg2RCwgMHgyOCwgMHgzMCwgMHhBMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxQiwgMHgwMCwgMHg0QywgMHgwOCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4M0YsIDB4MDIsCisweEJGLCAweDA4LCAweEZELCAweDIyLCAweEIwLCAweDhCLCAweEMwLCAweDI3LCAweDQyLCAweDlGLCAweDA4LCAweEZDLCAweDAyLAorMHhGMCwgMHg4QiwgMHhDOCwgMHgyRSwgMHgxMiwgMHhCRiwgMHg0OCwgMHhGQywgMHgyMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyRCwKKzB4NDIsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MDIsIDB4QkYsIDB4MDAsIDB4QkQsCisweDAyLCAweEYwLCAweDhCLCAweEMwLCAweDJFLCAweDAwLCAweEJGLCAweDA4LCAweEJDLCAweDQyLCAweEYwLCAweDA5LCAweEMwLAorMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgzRiwgMHgwNSwgMHhCMywKKzB4MEMsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QTMsIDB4MDQsIDB4OEMsIDB4MDIsIDB4RjAsCisweENCLCAweEMwLCAweDJDLCAweDAwLCAweEIzLCAweDAwLCAweENDLCAweDIyLCAweEYwLCAweDRCLCAweEMwLCAweDI0LCAweDA1LAorMHhBRiwgMHgwOCwgMHhGQywgMHgxNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwKKzB4RjAsIDB4Q0EsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RjMsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MTksIDB4QzAsIDB4NjcsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDAxLCAweDUxLCAweDBDLAorMHg0QywgMHg0OCwgMHgxNCwgMHgwMSwgMHhDMSwgMHgwNCwgMHgwMiwgMHgxMSwgMHg2MCwgMHg0NCwgMHgxMCwgMHg3MCwgMHhDMCwKKzB4NDAsIDB4MDUsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NDQsIDB4MjAsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MDQsIDB4MDEsIDB4MUQsCisweDA0LCAweDc0LCAweDA4LCAweEMwLCAweDAxLCAweDQwLCAweDA3LCAweDAyLCAweDFELCAweDAwLCAweDc0LCAweDEwLCAweEQyLAorMHhDMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg3NCwgMHgwNCwgMHhEMCwgMHgwMSwgMHg0MCwgMHg3MywgMHg2MCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjEsIDB4MDUsIDB4ODEsIDB4MDQsIDB4MjQsCisweDMyLCAweDEwLCAweDg4LCAweDQwLCAweDIxLCAweDAwLCAweDgxLCAweDA4LCAweDA0LCAweDUyLCAweEQyLCAweDQ4LCAweDQwLAorMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwNiwgMHhEMCwgMHg4OCwgMHg0NCwgMHgyMCwgMHgwNSwgMHg4RCwgMHgwNCwKKzB4MzQsIDB4MjIsIDB4RDgsIDB4MTgsIDB4NDAsIDB4NjMsIDB4MDAsIDB4OEQsIDB4MjAsIDB4MzQsIDB4NTIsIDB4RDAsIDB4NDgsCisweDQwLCAweDIwLCAweDAwLCAweDgxLCAweDA4LCAweDM0LCAweDEyLCAweEQwLCAweDI4LCAweDQwLCAweDRCLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHg2NSwgMHg1OCwgMHg4MSwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MjYsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MTIsIDB4NTAsIDB4MDgsIDB4NTAsIDB4MjUsCisweDAwLCAweDkxLCAweDA0LCAweDQ1LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDIwLCAweDlELCAweDI0LCAweDc0LAorMHg4MywgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwNiwgMHg3NCwgMHgwMiwgMHhEMCwgMHg0OSwgMHg0MSwKKzB4MjQsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDIwLCAweDI1LCAweDAwLCAweDkzLCAweDgyLCAweDZELCAweDFBLCAweDMyLAorMHgwOSwgMHhDMCwgMHgyNSwgMHg0MCwgMHg5MywgMHgwMCwgMHg0QywgMHgwNiwgMHhGMiwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwKKzB4OTMsIDB4MDAsIDB4NEMsIDB4MDYsIDB4RjAsIDB4QjksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDYsIDB4N0MsIDB4MDIsCisweEYwLCAweDA5LCAweEMwLCAweEU3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEQwLCAweDI0LAorMHgwMiwgMHg5MywgMHgwOSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgxNywgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDMsIDB4N0MsIDB4MjYsIDB4RjAsIDB4MDksCisweEMxLCAweDIxLCAweDAwLCAweDhGLCAweDAwLCAweDdDLCAweDQ2LCAweDcwLCAweDA5LCAweDQwLCAweDI2LCAweDQwLCAweDlGLAorMHgwMSwgMHg3QywgMHgwQSwgMHhGMCwgMHgxOCwgMHhEMCwgMHg2NywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgxMiwgMHhGMCwKKzB4MzksIDB4QzAsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MTksIDB4RDAsIDB4MjcsIDB4ODAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg4NSwgMHgwMCwgMHgxMywgMHgwMiwgMHg0QywgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwKKzB4MDQsIDB4NDAsIDB4MTMsIDB4MDQsIDB4NEMsIDB4MjAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4ODAsIDB4MUYsIDB4MDAsCisweDRDLCAweDAwLCAweDM0LCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDEzLCAweDgyLCAweDRDLCAweDg0LCAweEIwLCAweDAxLAorMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDAwLCAweDE0LCAweDQ4LCAweDUxLCAweDAwLCAweEQ0LCAweDAxLCAweDM0LCAweDA3LCAweDQwLCAweDE0LAorMHgwMCwgMHg3MSwgMHgwMCwgMHhDNCwgMHgwMSwgMHgxMCwgMHgwNywgMHg1MCwgMHgxMCwgMHgwMCwgMHg1RCwgMHgxMCwgMHhGQywKKzB4MTEsIDB4MTIsIDB4MDUsIDB4NDAsIDB4MTQsIDB4MDAsIDB4NzEsIDB4MDIsIDB4QzAsIDB4MDUsIDB4MzAsIDB4MDUsIDB4NDAsCisweDU3LCAweDA0LCAweDVELCAweDAxLCAweEY0LCAweDQxLCAweEQwLCAweDA3LCAweDQwLCAweDEwLCAweDAwLCAweDVELCAweDAxLAorMHg3NCwgMHgwMSwgMHgxMCwgMHgwNSwgMHg0MCwgMHg1MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QTAsIDB4MzYsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MkQsIDB4NDAsIDB4MzAsIDB4MDAsCisweDgxLCAweDAwLCAweDA0LCAweDBGLCAweEQ0LCAweDFDLCAweDQwLCAweDMwLCAweDAwLCAweERELCAweDAwLCAweDA0LCAweDA3LAorMHgxMCwgMHgxQywgMHg0MCwgMHgzMCwgMHgyMCwgMHhDMSwgMHgxMiwgMHgwMCwgMHgwMywgMHgwQywgMHgwQywgMHg0MCwgMHgyMywKKzB4MDAsIDB4Q0QsIDB4MDEsIDB4MzQsIDB4MDEsIDB4OTAsIDB4MDksIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsCisweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDUzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHg4MCwgMHgzMCwgMHgwOCwgMHhDMSwgMHgwMCwgMHg5NCwgMHgwMywgMHgxMCwgMHgwMiwgMHg0MCwgMHgzOCwgMHgwMCwgMHhBMSwKKzB4MDIsIDB4QzQsIDB4MDcsIDB4RDAsIDB4MEUsIDB4NDEsIDB4MzgsIDB4MDQsIDB4Q0QsIDB4MDAsIDB4QjQsIDB4MDUsIDB4MTAsCisweDJDLCAweDQwLCAweDdBLCAweDAwLCAweEYxLCAweDAxLCAweDg0LCAweDBGLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLAorMHhFRCwgMHgxMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwMywgMHg0MCwgMHgyOCwgMHgwMCwgMHhBRCwgMHgwMiwgMHhCNCwgMHgwNywKKzB4MTAsIDB4MEUsIDB4NDAsIDB4MDcsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsCisweDc4LCAweDQwLCAweEUzLCAweDAxLCAweENDLCAweDA0LCAweDMzLCAweDEyLCAweDUwLCAweDYwLCAweDIwLCAweDIzLCAweDAxLAorMHg4RCwgMHgwNywgMHhGMCwgMHgxQSwgMHhDMiwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhDOCwgMHg4NSwgMHgzMCwgMHgxRSwKKzB4RDAsIDB4N0MsIDB4NDEsIDB4RTMsIDB4MDEsIDB4OEQsIDB4MDYsIDB4MzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RUYsCisweDAxLCAweEJDLCAweDA3LCAweEYwLCAweDFFLCAweEQwLCAweDc4LCAweDAwLCAweEFELCAweDAxLCAweEZDLCAweDA3LCAweDM0LAorMHgxRSwgMHhDMCwgMHg0NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHhCNSwKKzB4MDUsIDB4REYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDAsIDB4QzAsIDB4MzcsIDB4MDAsIDB4MUMsIDB4MDAsIDB4N0MsCisweDAzLCAweDMwLCAweDI5LCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDgxLCAweEYwLCAweDBELCAweEMwLAorMHgzNSwgMHgwMiwgMHhERiwgMHgwMCwgMHgzRCwgMHgwMCwgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsCisweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDdELCAweDAwLAorMHhGMywgMHgwMywgMHhDQywgMHgxMywgMHgzMCwgMHgxNywgMHhDMCwgMHg3QywgMHgxMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNywKKzB4RjAsIDB4M0YsIDB4QzAsIDB4NzgsIDB4MDAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MDYsIDB4MzAsIDB4MUEsIDB4QzAsIDB4N0QsCisweDAwLCAweEZGLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDAxLCAweEZDLAorMHgyNywgMHhGMCwgMHgxQiwgMHhEMCwgMHg2QywgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwKKzB4MEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MzksIDB4NDAsIDB4RjEsCisweDAwLCAweDg2LCAweDAzLCAweDEwLCAweDAyLCAweDQwLCAweDM4LCAweDAyLCAweEUxLCAweDA0LCAweEI0LCAweDAwLCAweEQwLAorMHg4RSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhCMSwgMHgwMCwgMHg4NCwgMHgwMSwgMHgxMCwgMHg4QSwgMHg0MywgMHgzOCwgMHgwOCwKKzB4RUQsIDB4MDIsIDB4ODQsIDB4MDIsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MjMsCisweEQwLCAweDgyLCAweDQwLCAweDI4LCAweDAwLCAweEVELCAweDA4LCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDU3LAorMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMSwgMHgwMiwgMHhFMSwgMHgwMCwKKzB4ODQsIDB4MjAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MjAsIDB4MDAsIDB4QTksIDB4NDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDgsCisweDQwLCAweDM4LCAweDA2LCAweEExLCAweDAwLCAweDg0LCAweDYwLCAweDEwLCAweDBCLCAweDQwLCAweDM4LCAweDA0LCAweEVELAorMHgwMCwgMHgwNCwgMHgwMCwgMHg1MCwgMHgyRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgyMywgMHhEOCwKKzB4MEUsIDB4NDAsIDB4M0EsIDB4MDAsIDB4QTksIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MjMsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDM1LCAweDAwLCAweEMxLCAweDBBLCAweDQ0LAorMHg0MiwgMHgxMCwgMHgwMCwgMHg0OCwgMHgzMCwgMHgwMCwgMHg4OSwgMHgwMCwgMHgzNCwgMHgwNywgMHhEMCwgMHhCOSwgMHg0MCwKKzB4NzAsIDB4NDgsIDB4OTEsIDB4MDEsIDB4MDQsIDB4MDEsIDB4MTAsIDB4MjgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4REQsIDB4MTAsCisweDA0LCAweDI0LCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDkwLCAweENELCAweDAyLCAweDM0LCAweDAyLCAweEQwLCAweDJELAorMHg0MCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMywgMHgzNCwgMHg4MywgMHhEMiwgMHgwQywgMHg0MCwgMHg1QiwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MjUsIDB4MDAsIDB4RDMsIDB4MDMsIDB4NEQsIDB4MEIsCisweDMwLCAweDEwLCAweEMwLCAweDM0LCAweDUwLCAweDlCLCAweDAwLCAweDdDLCAweDQ3LCAweEYwLCAweDJELCAweEQwLCAweDYwLAorMHgwMCwgMHhEMywgMHgwNSwgMHg0RCwgMHgwRSwgMHgzNCwgMHgxOSwgMHhEMCwgMHg3QywgMHgwMCwgMHhERiwgMHgwMSwgMHg0RCwKKzB4MjIsIDB4NzAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4MDIsIDB4Q0YsIDB4MEEsIDB4N0MsIDB4MDEsIDB4RjAsIDB4RjUsIDB4RDAsCisweDY2LCAweDAwLCAweDlGLCAweDA5LCAweEZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHg3NywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MjEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MjcsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDQwLCAweEYxLCAweDA4LCAweEMxLCAweDM3LCAweDAwLCAweERGLCAweDAxLCAweDdDLCAweDAyLAorMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNSwKKzB4MDIsIDB4OUYsIDB4MDgsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDJGLCAweDQwLCAweEYzLCAweDEwLCAweERDLCAweDA0LCAweDMwLCAweDAzLAorMHhDMCwgMHhGOCwgMHgwMCwgMHgzMywgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMSwgMHhBQywgMHg0MCwgMHhGMywKKzB4MDAsIDB4NEMsIDB4MDQsIDB4RjAsIDB4MEIsIDB4RTAsIDB4M0MsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4RDAsCisweDBGLCAweEMwLCAweDdGLCAweDAxLCAweEI3LCAweDAxLCAweENDLCAweDAzLCAweEYwLCAweDNGLCAweEMwLCAweEVDLCAweDAwLAorMHhCRiwgMHgwMywgMHhDQywgMHgwMywgMHhGMCwgMHgwRiwgMHg0MCwgMHgxNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDIsIDB4MTAsIDB4NzEsIDB4NDAsCisweDc0LCAweDAwLCAweDExLCAweDQwLCAweDc0LCAweDAzLCAweEQwLCAweDMxLCAweDQxLCAweDI0LCAweDUwLCAweEQxLCAweDA4LAorMHg0NCwgMHgwMCwgMHhEMCwgMHg5OSwgMHg0MCwgMHgzNCwgMHgwMCwgMHg5QywgMHgwMywgMHg0NCwgMHgwQywgMHhEMCwgMHgwRCwKKzB4NDgsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDksIDB4NDQsIDB4MDcsIDB4RDAsIDB4MUQsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OEQsCisweDAwLCAweDQ1LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDE3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHhBMCwgMHg2NiwgMHgwMCwgMHhEMSwgMHgwOCwgMHg3NCwgMHgyMywgMHg5MCwgMHgxMSwgMHg0MCwgMHgzNCwKKzB4ODAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MUQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsCisweDEyLCAweEQwLCAweDA5LCAweDQwLCAweDM2LCAweDAwLCAweDVELCAweDAxLCAweDQ0LCAweDA2LCAweEQxLCAweDBELCAweDQwLAorMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwNywgMHhEMCwgMHgwNSwgMHg0MSwgMHgyNCwgMHgwMCwgMHhERCwgMHgwMCwKKzB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDAwLCAweDMwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDAyLCAweDkwLCAweDAwLCAweDQyLCAweDMwLCAweEMwLAorMHhDMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg1MCwgMHgzMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4RDAsIDB4MDgsIDB4NDgsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDgsIDB4MEMsIDB4NDIsIDB4MzMsCisweDAwLCAweENELCAweDgwLCAweDM1LCAweDAzLCAweEQwLCAweDBDLCAweDcwLCAweDIwLCAweDAwLCAweERELCAweDAwLCAweDA0LAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg0MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4MkUsIDB4MDAsIDB4RjMsIDB4MDAsIDB4MUMsIDB4MDAsIDB4QjAsIDB4MDEsIDB4RDAsIDB4MzQsIDB4MDAsIDB4OTMsCisweDAwLCAweDdDLCAweDAzLCAweEYyLCAweDBCLCAweEMwLCAweDM0LCAweDAwLCAweDkzLCAweDgwLCAweDRDLCAweDgwLCAweEYwLAorMHgwOSwgMHhEMCwgMHgzNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0RCwgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgyMCwKKzB4RDcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEMsIDB4RDAsIDB4MjQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDA3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LAorMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHg3MCwgMHgwMywgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4NDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEIsCisweEMwLCAweDNGLCAweDAwLCAweEFGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDIwLCAweEZGLAorMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzgsIDB4MTcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MkYsCisweDAwLCAweEJGLCAweDBDLCAweENDLCAweDEyLCAweEYwLCAweDFGLCAweEMwLCAweEJFLCAweDA5LCAweEJGLCAweEMwLCAweDlELAorMHg0MCwgMHhCMCwgMHg4RiwgMHhDMCwgMHgyRiwgMHgwMSwgMHhCMywgMHgxMCwgMHhEQywgMHhFMiwgMHgzMCwgMHgxRiwgMHhDMCwKKzB4M0YsIDB4MDEsIDB4RjMsIDB4MDIsIDB4Q0MsIDB4MDIsIDB4MzMsIDB4MTYsIDB4QzQsIDB4M0MsIDB4MDAsIDB4RUYsIDB4MDEsCisweENDLCAweDMzLCAweDMwLCAweDFGLCAweEMwLCAweDVBLCAweDAwLCAweEZCLCAweDAxLCAweEFDLCAweDI3LCAweEIwLCAweDBCLAorMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHgwNywgMHgwMCwKKzB4MUQsIDB4MEUsIDB4NDQsIDB4MTIsIDB4RDAsIDB4NEQsIDB4NDAsIDB4M0MsIDB4MDMsIDB4MUQsIDB4MDMsIDB4NDQsIDB4MEYsCisweDEwLCAweDJGLCAweDQwLCAweDI3LCAweDA1LCAweEQxLCAweDA2LCAweDQ0LCAweDEyLCAweDEwLCAweDFELCAweDQ4LCAweEJGLAorMHgwMCwgMHhGMSwgMHgwNiwgMHg0NCwgMHgyQywgMHgxMCwgMHgwNSwgMHg0MSwgMHhCQywgMHgwMiwgMHhERCwgMHgwMSwgMHhENCwKKzB4MEIsIDB4MTAsIDB4MUQsIDB4NDAsIDB4NzQsIDB4MDAsIDB4RDEsIDB4MDEsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MDEsIDB4NDAsCisweDBGLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweEEzLCAweDA1LCAweDhELAorMHgwMSwgMHgwNiwgMHg2MiwgMHhEMCwgMHgwOSwgMHg0MSwgMHgzMCwgMHgyMCwgMHg4RCwgMHgwOCwgMHgxNSwgMHgwMywgMHg5MiwKKzB4Q0MsIDB4NDAsIDB4NDMsIDB4MDMsIDB4QzUsIDB4MTAsIDB4MzQsIDB4MTAsIDB4MTIsIDB4MEMsIDB4NDIsIDB4QjIsIDB4MjUsCisweEMxLCAweDhDLCAweDA0LCAweDA0LCAweDUwLCAweDAxLCAweDUwLCAweDMwLCAweDBDLCAweDVELCAweDAwLCAweDI0LCAweDMzLAorMHgxMCwgMHgwQywgMHg0MCwgMHgwNiwgMHgwMCwgMHhEOSwgMHhBMCwgMHg2NCwgMHgxMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHg0RiwKKzB4ODAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4NjUsIDB4MDAsIDB4MUQsIDB4MDEsCisweDQ0LCAweDA2LCAweEQwLCAweDE5LCAweDUwLCAweDM0LCAweDAwLCAweDlELCAweDAzLCAweDU1LCAweDBGLCAweDEwLCAweDBELAorMHg0MiwgMHg2NywgMHgwMCwgMHhENSwgMHgwMCwgMHg2NCwgMHgwQywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwKKzB4MDAsIDB4NDQsIDB4MDQsIDB4NDAsIDB4MDUsIDB4NDAsIDB4MzQsIDB4MDAsIDB4REQsIDB4ODAsIDB4NzQsIDB4MDMsIDB4MTAsCisweDBELCAweDQwLCAweDc0LCAweDAwLCAweDU5LCAweDAxLCAweDQ0LCAweDAzLCAweDE4LCAweDExLCAweDQxLCAweDBGLCAweEEwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHg2NywgMHgwNCwgMHgxRiwgMHgwMSwgMHg0QywKKzB4MTQsIDB4RjAsIDB4NUMsIDB4QzAsIDB4MzQsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NUQsIDB4MEYsIDB4QjAsIDB4MEQsIDB4QzAsCisweDQ3LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDA2LCAweDMwLCAweDBELCAweEUwLCAweDM3LCAweDAwLCAweEQxLCAweDIwLAorMHg0QywgMHgwNiwgMHg2MCwgMHgwNCwgMHhDMCwgMHgzNCwgMHgwMCwgMHg5RiwgMHgwMSwgMHg2RSwgMHgwMywgMHgzMCwgMHgwQywKKzB4QzAsIDB4NzYsIDB4MDAsIDB4REIsIDB4MDUsIDB4MkMsIDB4MDMsIDB4QjAsIDB4MTksIDB4NDQsIDB4MjMsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDA1LCAweDAwLCAweDFGLCAweDEwLCAweEZDLCAweDAyLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwNCwgMHgzRiwgMHg0MCwgMHhBQywgMHgwMywgMHhGMiwgMHgwRiwgMHhDMCwgMHgwNywKKzB4MEMsIDB4RUIsIDB4MDUsIDB4MUMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4M0MsCisweDAwLCAweEIyLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDg5LCAweDlDLCAweDAzLCAweEYwLCAweDVGLCAweEM4LAorMHgzRiwgMHg0MCwgMHhGNywgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4QTUsIDB4ODAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsCisweDA5LCAweEMwLCAweDM3LCAweDAwLCAweDkzLCAweDgwLCAweDZDLCAweDBCLCAweDNDLCAweDBELCAweEMwLCAweDA0LCAweDAwLAorMHhEMywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwRCwgMHhDMCwgMHgzMiwgMHgwMCwgMHhEQiwgMHgwMCwgMHg0QywgMHgwMiwKKzB4MzEsIDB4MEQsIDB4RTAsIDB4MzQsIDB4MTAsIDB4OTMsIDB4MDIsIDB4NEMsIDB4MDMsIDB4MzQsIDB4NEQsIDB4QzAsIDB4NzQsCisweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgyNCwgMHgxMCwgMHg5QiwgMHgwNiwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4M0YsIDB4MDAsIDB4ODEsIDB4MEIsIDB4NjgsIDB4MDcsIDB4QjAsIDB4MUYsIDB4QzAsIDB4RTQsIDB4MDAsIDB4RDAsCisweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDBELCAweDQ4LCAweDNGLCAweDAwLCAweEZCLCAweDEwLCAweDQ0LCAweDAyLCAweDAwLAorMHgwRCwgMHhDMCwgMHgzRiwgMHgwMCwgMHg4MSwgMHg4MSwgMHhDNCwgMHgyQiwgMHgxMCwgMHgyRCwgMHg0MCwgMHg3MCwgMHgwMCwKKzB4MDUsIDB4MDUsIDB4NkMsIDB4MkYsIDB4MTAsIDB4NDksIDB4QzAsIDB4NkUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDAyLCAweDAwLCAweDkxLCAweDAyLCAweDI0LCAweDAwLCAweEQwLCAweDA4LCAweDY0LAorMHhGMywgMHgwMCwgMHgwMSwgMHgwMywgMHgyMCwgMHgwNywgMHgxMCwgMHg1QywgMHg0OCwgMHhFNCwgMHgwMCwgMHhDNSwgMHgwMCwKKzB4MzQsIDB4MDAsIDB4MTEsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MDIsIDB4RDUsIDB4MDEsIDB4MDQsIDB4MDIsIDB4NTAsIDB4MTQsCisweDQwLCAweDcwLCAweDAxLCAweEMxLCAweDAwLCAweDI0LCAweDIzLCAweDkwLCAweDJDLCAweDQwLCAweDEwLCAweDAwLCAweEMxLAorMHgwMSwgMHgwNCwgMHgwNywgMHg1MCwgMHg2MCwgMHg0NCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4ODAsIDB4NTgsIDB4MDAsIDB4RTksIDB4MDEsIDB4QTQsIDB4MDUsIDB4RDAsIDB4MUEsIDB4NjAsIDB4N0IsCisweDA0LCAweDYxLCAweDAxLCAweEU0LCAweDA3LCAweDk0LCAweDFFLCAweDQwLCAweDc4LCAweDAwLCAweEU1LCAweDAxLCAweEI0LAorMHgwNywgMHgxMCwgMHgxRSwgMHgwMCwgMHhGQiwgMHgwMCwgMHhFRCwgMHgwMywgMHg4NCwgMHgwNywgMHg1OCwgMHgzNywgMHg0MSwKKzB4NzksIDB4MDQsIDB4RjEsIDB4MDAsIDB4QTAsIDB4MDcsIDB4OTEsIDB4MEUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RjUsIDB4MDEsCisweEU0LCAweDI3LCAweDE4LCAweDEyLCAweDQ4LCAweDNFLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgxMCwgMHgxMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgyNCwgMHgwMywgMHhGMCwgMHgwOCwgMHhDMCwgMHgzNywgMHgwMCwKKzB4NDMsIDB4MTQsIDB4MkMsIDB4NDMsIDB4MTAsIDB4OEQsIDB4QzEsIDB4MTAsIDB4MDQsIDB4QzcsIDB4MDAsIDB4MzQsIDB4MjEsCisweDMwLCAweDBDLCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDg4LCAweDBDLCAweDAxLCAweDcwLCAweDAwLCAweDQwLCAweDM0LAorMHgwMCwgMHhDMywgMHgxOCwgMHg2NCwgMHgxMywgMHhCMCwgMHg4QywgMHg0MCwgMHgxMCwgMHgwMCwgMHhDMywgMHgwMCwgMHgwQywKKzB4NDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4NDgsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDk4LCAweDNELCAweDIwLCAweEY3LCAweDAwLCAweERDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDQwLCAweEVGLAorMHgwMCwgMHhGQywgMHgyMywgMHhGNSwgMHgwRiwgMHhDNCwgMHgzNSwgMHgwMCwgMHhGQiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4QkYsIDB4MDIsIDB4RjMsIDB4MDAsIDB4RkMsIDB4MDEsIDB4QjAsIDB4MDcsIDB4QzAsIDB4M0YsIDB4MDAsCisweEZGLCAweDBDLCAweERDLCAweDAzLCAweDcwLCAweDRFLCAweEMwLCAweDNGLCAweDAwLCAweEVGLCAweDAwLCAweEZFLCAweDgzLAorMHg3MCwgMHgwNywgMHhDOCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwKKzB4MzcsIDB4ODAsIDB4NUIsIDB4MDAsIDB4NUMsIDB4MDEsIDB4MzQsIDB4MDksIDB4QzAsIDB4QjcsIDB4MDQsIDB4Q0YsIDB4ODAsCisweDVDLCAweDAzLCAweEY4LCAweDRELCAweEM5LCAweDM3LCAweDAwLCAweERGLCAweDAxLCAweDRDLCAweDAxLCAweEYwLCAweDBELAorMHhDMCwgMHgzNywgMHgwMywgMHhERiwgMHgwMiwgMHg3RSwgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHhCNiwgMHgwMiwgMHhERiwKKzB4MDAsIDB4NUMsIDB4NUIsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MzYsIDB4MDAsIDB4Q0YsIDB4MjAsIDB4NEMsIDB4MDMsIDB4MjIsCisweDAxLCAweEM0LCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDFELAorMHgwOCwgMHg2MywgMHgwMCwgMHhCNCwgMHgwMSwgMHgxMCwgMHgwQSwgMHg0MCwgMHhCQiwgMHgxMSwgMHg2RCwgMHgwMCwgMHg5NCwKKzB4MDMsIDB4MzAsIDB4NkUsIDB4NDgsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsCisweDNCLCAweDAxLCAweEVELCAweDQ4LCAweEI0LCAweDAzLCAweEQwLCAweDBGLCAweDQwLCAweDM4LCAweDA0LCAweEFELCAweDAwLAorMHhCNCwgMHgwQiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHg4MCwgMHhENCwgMHg4MywgMHgxMCwgMHgwNiwKKzB4QzAsIDB4NEUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzksIDB4MDAsCisweEUxLCAweDAxLCAweEI0LCAweDQ3LCAweDEwLCAweDFBLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDExLCAweEQ0LCAweDQ3LAorMHg1MCwgMHgxRSwgMHg0OCwgMHg1QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhBNSwgMHgwNSwgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwKKzB4MDAsIDB4RUQsIDB4MDksIDB4QjQsIDB4MDcsIDB4RDIsIDB4MUUsIDB4NTUsIDB4NzgsIDB4MDAsIDB4QUQsIDB4MDEsIDB4QjQsCisweDA3LCAweEQwLCAweDFCLCAweDQwLCAweDdBLCAweDAwLCAweEY1LCAweDAxLCAweDg0LCAweDA2LCAweDE0LCAweDE4LCAweDQwLAorMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgxMCwgMHhDMSwKKzB4MEQsIDB4MzQsIDB4MDcsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4MTQsIDB4MEIsIDB4OTAsCisweDBDLCAweDQwLCAweEYzLCAweDA0LCAweENELCAweDA4LCAweDA0LCAweDA3LCAweEQwLCAweDBDLCAweDQwLCAweDM3LCAweDIwLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgyNywgMHhEMCwgMHg0QywgMHg0MCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwNCwgMHgzNCwgMHgwMywKKzB4RDAsIDB4MTgsIDB4NDAsIDB4NzAsIDB4MDgsIDB4Q0QsIDB4MDEsIDB4MTQsIDB4MDMsIDB4MTAsIDB4QUQsIDB4NDMsIDB4NUEsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDFELCAweDA0LCAweDczLCAweDAyLAorMHhGQywgMHgwMSwgMHgzMCwgMHgyNywgMHhDMCwgMHgxNywgMHgxMCwgMHg3RiwgMHgwMiwgMHhERCwgMHhBOSwgMHg3NCwgMHgwNSwKKzB4QzAsIDB4OUYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4RUMsIDB4MTUsIDB4RjAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4ODAsIDB4NUYsCisweDAwLCAweEZDLCAweDA5LCAweEYwLCAweDM2LCAweEMwLCAweDE0LCAweDAwLCAweDdGLCAweDAyLCAweDdDLCAweDAxLCAweEY5LAorMHgxNSwgMHhDMiwgMHgxRSwgMHgwNCwgMHg2NywgMHg4MSwgMHg0NCwgMHgwMSwgMHgxMCwgMHgyNywgMHhDMCwgMHg1QywgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4NDcsIDB4NDAsIDB4MUYsIDB4MDAsIDB4N0MsCisweDQwLCAweDcwLCAweDQxLCAweEMwLCAweDgzLCAweDAwLCAweDFGLCAweDEyLCAweDdDLCAweDAwLCAweDc0LCAweDAxLCAweEMwLAorMHgwNywgMHgwMiwgMHgxRiwgMHgwMCwgMHg1QywgMHgwNCwgMHhGMCwgMHgwMSwgMHhDMiwgMHg4NywgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MEEsIDB4N0MsIDB4MDAsIDB4RjAsIDB4ODEsCisweEMwLCAweDA3LCAweDEwLCAweDFGLCAweDA4LCAweDdDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDRCLCAweDIwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHg4MCwgMHg5MywgMHgwNSwgMHgzQywgMHgwMiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDIsIDB4ODMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4QjAsIDB4MjgsIDB4QzAsIDB4NjQsCisweDAxLCAweDlFLCAweDAwLCAweDc4LCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweEE3LCAweDQwLCAweDlCLCAweDAxLCAweDdDLAorMHg0MiwgMHhGMCwgMHg1OSwgMHhDMCwgMHgyMCwgMHgwMSwgMHg5MywgMHg0MiwgMHg3QywgMHg4MiwgMHhGMCwgMHgzOSwgMHhDMCwKKzB4MjcsIDB4MDQsIDB4OTcsIDB4MDgsIDB4NkMsIDB4MTYsIDB4MzAsIDB4ODksIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI2LCAweDAwLCAweDkxLCAweDAxLCAweDc0LCAweDAyLCAweDEwLAorMHgwOSwgMHhDMCwgMHhBNywgMHgwNCwgMHg5MSwgMHg4NiwgMHgwQywgMHgwMiwgMHhCMCwgMHgwOSwgMHg0MCwgMHg2NCwgMHgwMCwKKzB4OUQsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4RTcsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDIsCisweEQwLCAweDQ5LCAweEMwLCAweEU2LCAweDA0LCAweDkxLCAweDIwLCAweDc0LCAweDBFLCAweEQwLCAweDI5LCAweDQwLCAweDIzLAorMHg0MCwgMHg5QiwgMHg0MSwgMHg0NCwgMHg0NiwgMHgxNCwgMHgzOSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksCisweDYwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDY1LCAweDIyLCAweDk0LCAweDA5LCAweDU4LCAweDI2LCAweDAwLCAweDlELAorMHgwMCwgMHgzNiwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwOCwgMHg3NCwgMHgwMiwgMHhEMCwKKzB4MDksIDB4NjAsIDB4MjQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjcsIDB4MDAsCisweDk1LCAweDAwLCAweDA0LCAweDAyLCAweDEyLCAweDI5LCAweDQwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHg4MSwgMHg4MSwgMHgwNSwgMHgzNCwgMHgxMiwgMHgxMCwgMHgwOCwgMHg0MCwKKzB4MjEsIDB4MDksIDB4ODEsIDB4MDQsIDB4NDQsIDB4MTIsIDB4OTAsIDB4NTgsIDB4NDAsIDB4NjIsIDB4MDEsIDB4OEQsIDB4MDQsCisweDE0LCAweDEyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDAxLCAweEMxLCAweDA0LCAweDM0LCAweDEyLCAweEQwLCAweDA5LAorMHg2OCwgMHgyMiwgMHgwMSwgMHhDMSwgMHgwMCwgMHgzNiwgMHgxMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgyMywgMHgwOCwgMHg5OSwKKzB4MDAsIDB4MDUsIDB4MjIsIDB4MTAsIDB4NDgsIDB4NTAsIDB4NDAsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFELCAweEIwLCAweDg2LCAweDAyLCAweDExLCAweDBBLCAweDNDLCAweDI4LCAweDMwLCAweEExLCAweDQwLCAweDg3LAorMHgwMiwgMHgxMywgMHg0MCwgMHg2QywgMHgwMCwgMHhCNCwgMHhBMSwgMHhDOCwgMHg4NiwgMHgwMiwgMHgwRiwgMHgwQSwgMHg3NCwKKzB4MjgsIDB4MzQsIDB4MDEsIDB4ODQsIDB4OTcsIDB4MDIsIDB4MUIsIDB4MEEsIDB4N0MsIDB4MDAsIDB4RDAsIDB4QTEsIDB4QzAsCisweDg0LCAweDQyLCAweDEzLCAweDQwLCAweDdDLCAweDI5LCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDAwLAorMHg0QywgMHgwOCwgMHgzMCwgMHhBMSwgMHhDMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTksIDB4OTgsIDB4MkYsIDB4NEEsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MjIsIDB4RDQsIDB4MEIsIDB4QzAsIDB4MjcsIDB4NjIsCisweEJGLCAweDg4LCAweEJDLCAweDIyLCAweEY0LCAweDg5LCAweEMwLCAweDJELCAweDAyLCAweEJGLCAweDA4LCAweEZDLCAweDIyLAorMHhGMCwgMHgwOSwgMHhDNCwgMHgyNywgMHgwMiwgMHg5RiwgMHgwOCwgMHhGQywgMHgyMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNywKKzB4MDIsIDB4QkYsIDB4NDAsIDB4N0MsIDB4MjIsIDB4RDAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4ODAsIDB4QkYsIDB4MDAsIDB4REUsCisweDkyLCAweEYwLCAweDhCLCAweEMwLCAweDc3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBMCwgMHgyNywgMHgwMSwgMHhCMywgMHgxNCwgMHg3QywgMHgzMiwgMHgzMCwgMHgwOSwgMHhEMCwgMHgyQywgMHg0MCwgMHhBMywKKzB4MDAsIDB4OUMsIDB4MTIsIDB4MzAsIDB4NEIsIDB4QzEsIDB4MkMsIDB4MDMsIDB4OUYsIDB4MjUsIDB4N0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDJELCAweDAxLCAweEJGLCAweDE0LCAweDRDLCAweDEyLCAweDcwLCAweDBCLCAweEMwLCAweDJGLCAweDQwLAorMHhCMywgMHgwMCwgMHhGQywgMHgxMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhBQiwgMHgwMCwgMHg4QywgMHgwMiwKKzB4RjAsIDB4MEIsIDB4QzAsIDB4NzYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsCisweDE3LCAweDBELCAweDExLCAweDQ0LCAweDc0LCAweEIwLCAweDEwLCAweDAwLCAweDQxLCAweDA0LCAweDA0LCAweDExLCAweDA4LAorMHg0NCwgMHgwMCwgMHg5MCwgMHg0MSwgMHg0MCwgMHgwNCwgMHgwMywgMHgxRCwgMHgxQSwgMHg3NCwgMHg0MCwgMHhEMCwgMHgwMSwKKzB4NDAsIDB4MDcsIDB4MDUsIDB4MUQsIDB4MDQsIDB4NDQsIDB4MjAsIDB4RDAsIDB4MDEsIDB4NDMsIDB4MDcsIDB4MDQsIDB4MTEsCisweDAwLCAweDc0LCAweDUwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDExLCAweDQwLCAweDQ1LCAweDAwLCAweEQyLAorMHgwNSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywKKzB4MDMsIDB4ODEsIDB4MzQsIDB4MzQsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MjAsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NTQsCisweDI3LCAweDkwLCAweDQ4LCAweDQxLCAweDIwLCAweDAxLCAweDhELCAweDA0LCAweDM0LCAweDIyLCAweEQwLCAweDA4LCAweDQwLAorMHgyMSwgMHgwMywgMHg4RCwgMHhCNCwgMHgwNCwgMHg4MiwgMHg1MCwgMHg0OCwgMHg0MCwgMHgyMywgMHgwMiwgMHhDNSwgMHgwMCwKKzB4MzQsIDB4MzIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjcsIDB4ODAsIDB4ODksIDB4MDAsIDB4MjQsIDB4ODIsIDB4RDAsIDB4MEMsCisweDQwLCAweDRBLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDQwLAorMHg5MSwgMHgwNiwgMHg3NCwgMHgwMiwgMHgxMCwgMHgyOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwNCwgMHg0NCwgMHgwMiwKKzB4OTAsIDB4MDksIDB4NTAsIDB4MjQsIDB4MDEsIDB4OUQsIDB4MDgsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDBELCAweDQ4LCAweDM3LCAweDAwLCAweDk1LCAweDEwLCAweDc0LAorMHg4MiwgMHhEMCwgMHg4RCwgMHg0NCwgMHg2NywgMHg4OCwgMHg5MSwgMHgwOCwgMHg2NCwgMHg4MiwgMHhEMCwgMHgxOSwgMHg0MCwKKzB4NjIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OTMsCisweDgyLCAweDdDLCAweDFFLCAweDMxLCAweDA5LCAweEMwLCAweDI0LCAweDEwLCAweDkzLCAweDA2LCAweDVDLCAweDBBLCAweDM0LAorMHgwOSwgMHhDNCwgMHgyNCwgMHgwMSwgMHg5RSwgMHgwMCwgMHg3QywgMHgzMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwKKzB4OUYsIDB4MDAsIDB4NEMsIDB4MUUsIDB4NzAsIDB4RTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NzQsIDB4MDIsCisweEYwLCAweDA5LCAweEMwLCAweDIzLCAweDAwLCAweDlCLCAweDA0LCAweDZFLCAweDI2LCAweEQyLCAweDA5LCAweEMwLCAweDE2LAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHhFMSwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MTYsIDB4RjYsIDB4OTksIDB4QzAsIDB4MjMsIDB4MjgsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MTIsIDB4NzAsIDB4MDksCisweEM1LCAweDI3LCAweDBDLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEUwLCAweDI3LCAweEEwLCAweDhGLAorMHgwMCwgMHg3RCwgMHgxMiwgMHhGMCwgMHgxOSwgMHhDMywgMHgyNywgMHgwMCwgMHg5QiwgMHgwMiwgMHg3QywgMHg0MiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUUsIDB4MDYsIDB4RjIsIDB4MDgsIDB4QzAsIDB4NTksIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAyLCAweDdDLAorMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMSwgMHgxRiwgMHgwMiwgMHg2QywgMHgwMCwgMHhCMCwgMHgwMCwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MTMsIDB4MDAsCisweDdDLCAweDA4LCAweEYwLCAweDIxLCAweEMwLCAweDA2LCAweDQxLCAweDEzLCAweDAwLCAweDRDLCAweDAwLCAweDMxLCAweDAxLAorMHhDMSwgMHgwNywgMHgyMCwgMHgxRiwgMHgwMiwgMHg0RCwgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMSwgMHg1MCwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MDIsIDB4NzQsIDB4MDEsCisweDEyLCAweDA1LCAweEMwLCAweDlDLCAweDA0LCAweDZELCAweDIxLCAweDA0LCAweDgxLCAweDEwLCAweDU3LCAweDQwLCAweDVGLAorMHgwMSwgMHg1RCwgMHg4MCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MiwgMHgxRiwgMHgyMCwgMHg3MSwgMHgwOCwgMHg3NCwKKzB4MDEsIDB4RDAsIDB4NTcsIDB4QzAsIDB4MUMsIDB4MDEsIDB4NzEsIDB4MDAsIDB4QzQsIDB4MDUsIDB4MTAsIDB4MjcsIDB4QzEsCisweDlELCAweDA0LCAweDQxLCAweDA1LCAweEM0LCAweEFELCAweDEwLCAweDA3LCAweDUwLCAweDQwLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgxMywgMHg3NCwgMHgwMywgMHgxMCwKKzB4MEQsIDB4NDIsIDB4MzAsIDB4MTAsIDB4Q0QsIDB4MDQsIDB4MjQsIDB4MDIsIDB4OTAsIDB4M0MsIDB4NDAsIDB4NzMsIDB4MDAsCisweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweEYzLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLAorMHhEMCwgMHgwQywgMHg0MCwgMHgzNCwgMHg4MCwgMHg0OSwgMHg1MCwgMHgwNSwgMHgwNywgMHgxMCwgMHgxOCwgMHg0MCwgMHhEMywKKzB4MDEsIDB4QzUsIDB4MDEsIDB4MDQsIDB4MDcsIDB4NTAsIDB4MEMsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDg4LCAweDM4LCAweDAyLCAweEVELCAweDAyLCAweDM0LCAweDAzLCAweDE0LCAweDRFLAorMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMiwgMHhDNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MiwgMHgzQiwgMHgwOCwgMHhFRCwKKzB4MEMsIDB4QjYsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4RjMsIDB4MDAsIDB4RTEsIDB4MTAsIDB4QjQsIDB4MDMsIDB4RDAsCisweDFFLCAweDQwLCAweDM4LCAweDgwLCAweDY5LCAweDAxLCAweDg0LCAweDQ1LCAweDEyLCAweDBBLCAweDQwLCAweDE5LCAweDAwLAorMHhCMSwgMHgwMCwgMHhDNCwgMHg0NSwgMHgxMCwgMHgwQSwgMHg0MiwgMHgxMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4NDcsIDB4MzAsIDB4NUUsIDB4QzIsCisweDc4LCAweDEwLCAweDZGLCAweDAxLCAweEFDLCAweDA3LCAweEIwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweEVGLCAweDAxLAorMHhCNCwgMHgxNywgMHhGMCwgMHgxRSwgMHg4MCwgMHg3QiwgMHg0MCwgMHhFMywgMHgwMSwgMHhCNCwgMHgwNywgMHhGMCwgMHgxNywKKzB4RDAsIDB4NzAsIDB4MDAsIDB4RUIsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzQsIDB4MUEsIDB4QzAsIDB4NUIsIDB4MDAsIDB4RTcsCisweDAxLCAweDhDLCAweDA3LCAweDcwLCAweDE3LCAweEMwLCAweDUwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHhBOCwgMHgzNSwgMHgwNCwgMHhERiwgMHgwMCwgMHg3QywgMHgzMywgMHhGMCwgMHg4RCwgMHhEMCwgMHgxNSwKKzB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzQsIDB4MzcsIDB4MTAsIDB4REYsIDB4MDYsIDB4N0MsCisweDUzLCAweEYwLCAweDBELCAweEM0LCAweDM3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDgzLCAweEYwLCAweDA1LCAweEMwLAorMHgzNSwgMHgwMCwgMHhDNywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwOSwgMHhDNCwgMHgxMywgMHgwMCwgMHg5NywgMHgwMCwKKzB4N0MsIDB4MDEsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEEwLCAweDdGLCAweDAwLCAweDdGLCAweDIxLCAweENDLCAweDA3LCAweEY4LCAweEFFLCAweEMwLCAweDVGLCAweDA4LAorMHhFRiwgMHgwMSwgMHhDQywgMHgwNywgMHg3MCwgMHg5RiwgMHhDNCwgMHg1QywgMHgwMiwgMHhGMywgMHgwQiwgMHhDQywgMHg0NywKKzB4MzEsIDB4MUYsIDB4NDAsIDB4NUYsIDB4MjAsIDB4N0YsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsCisweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDA3LCAweDMxLCAweDlCLCAweEMwLCAweDdGLCAweDAwLCAweEVGLCAweDAxLCAweENGLAorMHgzNiwgMHgzMCwgMHhERiwgMHhEMCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4ODgsIDB4MzksIDB4MDAsIDB4N0QsIDB4MTAsIDB4ODQsIDB4MjMsIDB4RDgsIDB4NEUsIDB4MDQsIDB4QjgsIDB4MDAsIDB4QUQsCisweDA0LCAweDgxLCAweDAzLCAweDEwLCAweEFGLCAweDQwLCAweDFDLCAweDAyLCAweEYxLCAweDIwLCAweEQ1LCAweDAzLCAweDE0LAorMHgwRSwgMHg0MCwgMHgxQSwgMHgwMSwgMHg2RCwgMHgwOCwgMHg4NSwgMHgwMywgMHhEMCwgMHg4RSwgMHgwMCwgMHgzOSwgMHgwMiwKKzB4RUQsIDB4MDAsIDB4QTQsIDB4MTEsIDB4MTAsIDB4OEEsIDB4NDAsIDB4QkIsIDB4MDEsIDB4RUQsIDB4MDQsIDB4REMsIDB4MjAsCisweDEwLCAweENBLCAweDQwLCAweDU0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgzOSwgMHgwMCwgMHg2RCwgMHgwMCwgMHg4NSwgMHgwMywgMHhEMCwgMHg4RiwgMHg0MCwgMHgxOSwgMHgwMCwgMHg2RCwgMHg0MCwKKzB4QzAsIDB4MDMsIDB4NTAsIDB4MEUsIDB4NDIsIDB4MTgsIDB4NjQsIDB4RTEsIDB4MDAsIDB4ODAsIDB4NDMsIDB4MTAsIDB4MEUsCisweDQwLCAweDNBLCAweDA4LCAweENELCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDA3LCAweDQwLCAweDE4LCAweDAwLCAweEVELAorMHgwMCwgMHgzNCwgMHgwMywgMHgxMiwgMHgwQSwgMHg0OCwgMHgzQiwgMHgyNCwgMHhGRCwgMHgyMCwgMHg4NCwgMHg1MiwgMHgxMiwKKzB4Q0EsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4NzMsCisweDEyLCAweDBELCAweDAyLCAweDA0LCAweDRCLCAweEQwLCAweDJDLCAweDQwLCAweDA0LCAweDAwLCAweDBELCAweDA4LCAweDA0LAorMHg2RiwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0MCwgMHgwMCwgMHhDMSwgMHg0MCwgMHgwNCwgMHgwRiwgMHgxMCwgMHgwQywgMHg0MCwKKzB4MjIsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MDQsIDB4MEYsIDB4RDIsIDB4MDAsIDB4NDAsIDB4MjEsIDB4MDAsIDB4Q0QsIDB4ODUsCisweDI0LCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDczLCAweDExLCAweENELCAweDAwLCAweDE0LCAweDA0LCAweDEwLCAweDM4LAorMHg0MCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzRCwgMHgwMCwKKzB4OUYsIDB4MDAsIDB4Q0MsIDB4MUYsIDB4RDAsIDB4MkYsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OEYsIDB4MjAsIDB4NEMsIDB4MEYsCisweDc0LCAweDAxLCAweEQyLCAweEU0LCAweDAwLCAweEYzLCAweDAwLCAweEM0LCAweDA3LCAweDMwLCAweDBELCAweEMwLCAweDI2LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwQiwgMHhGMCwgMHgzOSwgMHhDMSwgMHgwNCwgMHgwMCwgMHg0RiwgMHg0NywgMHg3NCwKKzB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4RjMsIDB4MDAsIDB4REYsIDB4MDAsIDB4NDQsIDB4MDcsIDB4MzQsIDB4MjEsIDB4ODAsCisweDU0LCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDIxLCAweDlGLAorMHgxMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHhBNSwgMHgwMCwgMHg5RiwgMHgxMCwgMHg3RCwgMHgwMywgMHhGMCwKKzB4MDksIDB4QzAsIDB4QTcsIDB4MDQsIDB4REYsIDB4MDEsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4ODYsIDB4MDAsCisweDlGLCAweDAyLCAweDdDLCAweDIzLCAweEYwLCAweDQxLCAweEMwLCAweDg3LCAweDAwLCAweDVGLCAweDQwLCAweDZDLCAweDAyLAorMHhGMCwgMHgyOSwgMHhDMCwgMHhCNywgMHgwMCwgMHg5RiwgMHg5MCwgMHg1QywgMHgwOSwgMHhGMCwgMHhDOSwgMHhDMCwgMHgzNywKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsIDB4ODAsIDB4M0YsIDB4MDAsCisweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMxLCAweDJGLCAweDAwLCAweDMzLCAweDg5LCAweENDLCAweDA3LCAweDEwLCAweDAzLAorMHhDMCwgMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGNCwgMHg0MywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4RkMsIDB4NDMsIDB4QzAsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsIDB4MDIsIDB4RjAsCisweDBCLCAweEMwLCAweDNGLCAweDAwLCAweEI3LCAweDAwLCAweEZDLCAweDA3LCAweDM0LCAweDAxLCAweEM4LCAweDA3LCAweDI0LAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHg4MCwgMHg5RCwgMHgwNywgMHg3NCwKKzB4ODMsIDB4RDAsIDB4MEQsIDB4NDIsIDB4RTcsIDB4MjAsIDB4MTEsIDB4ODcsIDB4MDQsIDB4MDcsIDB4QjAsIDB4MzEsIDB4NDAsCisweEU3LCAweDAwLCAweERELCAweDIwLCAweDY0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDQ2LCAweDAwLCAweDk5LCAweDAxLAorMHg3NCwgMHg4MywgMHg5MSwgMHgzMCwgMHg0MCwgMHhFNSwgMHgwMCwgMHhERCwgMHgwMSwgMHg0NCwgMHgwNiwgMHhEMCwgMHgzOSwKKzB4NDAsIDB4NzcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MzEsIDB4NDQsIDB4ODcsIDB4MDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM2LCAweDIwLCAweDlELCAweDAxLCAweDc0LCAweDAzLAorMHhEMCwgMHgwRCwgMHg2NCwgMHg0NywgMHg0MCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgyMywgMHg1MCwgMHgxMSwgMHg0MCwgMHg2NywKKzB4MDQsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4QzcsIDB4MDAsIDB4MUQsIDB4MDMsIDB4NzQsCisweDAzLCAweEQwLCAweDE5LCAweDQwLCAweDQ3LCAweDAwLCAweDlELCAweDAxLCAweDU0LCAweEM0LCAweEQwLCAweDFELCAweDQwLAorMHg3NywgMHgwMCwgMHhENSwgMHgwMSwgMHgzNCwgMHgxQSwgMHgxMCwgMHgzMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsCisweDBDLCAweDYwLCAweDIzLCAweDAwLCAweDgxLCAweDAwLCAweDQ0LCAweDAzLCAweEQ0LCAweDA4LCAweDQwLCAweDIzLCAweDIwLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgwMywgMHgwMCwgMHgwOSwgMHgwMCwgMHgzNCwgMHgwMywKKzB4OTAsIDB4MDksIDB4NDAsIDB4MDMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsCisweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAxLCAweDEwLCAweDA4LCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzRSwgMHgwMCwgMHgxRCwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwKKzB4QzAsIDB4MDcsIDB4MDgsIDB4OTMsIDB4MDAsIDB4NEQsIDB4MDMsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4RkYsCisweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBELCAweEM0LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgwOSwgMHhEMCwgMHgwNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwKKzB4OTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgyRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhCQywgMHgwMywgMHhBMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRSwgMHgwMCwKKzB4RUMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEUsIDB4MDAsIDB4QkEsIDB4MDAsIDB4RkMsIDB4MDMsIDB4QjAsIDB4MEEsCisweEMwLCAweDJELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDAzLCAweEMyLCAweDJGLCAweDAwLCAweEJGLAorMHgwMCwgMHhGQywgMHgwMCwgMHhGMiwgMHgwQiwgMHhDMCwgMHgxNywgMHg2MSwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QTAsIDB4MkYsIDB4NDAsIDB4MjMsIDB4MTAsIDB4Q0QsIDB4MDAsIDB4MzAsIDB4MDMsIDB4QzAsIDB4NEMsCisweDQwLCAweDMzLCAweDgxLCAweENDLCAweDI0LCAweDMwLCAweDEzLCAweEQwLCAweDJDLCAweDA1LCAweEYzLCAweDA5LCAweERDLAorMHgwMCwgMHgzMCwgMHg0RSwgMHhDMCwgMHgyQywgMHgwMCwgMHgzRiwgMHgwMSwgMHhDRCwgMHgwNCwgMHhGMSwgMHgxMywgMHhDMCwKKzB4NEMsIDB4MDgsIDB4MzMsIDB4MDEsIDB4RkMsIDB4MDQsIDB4QjAsIDB4MTMsIDB4RDQsIDB4NEMsIDB4NDAsIDB4RjMsIDB4MDAsCisweENELCAweDA3LCAweEYwLCAweDRGLCAweEMxLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgyNywgMHgwMCwgMHg1MSwgMHg5MiwgMHgwNCwgMHgwOCwgMHgxMywgMHgwOSwgMHg0MCwgMHgwNCwgMHgwNSwKKzB4MTEsIDB4MTAsIDB4NDQsIDB4MDEsIDB4MTAsIDB4MDEsIDB4NDEsIDB4QTQsIDB4MDUsIDB4QzEsIDB4MDQsIDB4NDQsIDB4MkMsCisweDEwLCAweDNGLCAweEMwLCAweDY0LCAweDAyLCAweDFELCAweDAwLCAweDY0LCAweDA0LCAweEQwLCAweDA1LCAweEMwLCAweDA0LAorMHgyMCwgMHgxMSwgMHgwMSwgMHg3NCwgMHgwNCwgMHgxMCwgMHgwMSwgMHg2MCwgMHgwNCwgMHgwMCwgMHhDMSwgMHgwMCwgMHg0NCwKKzB4MDcsIDB4RDEsIDB4MkQsIDB4NDAsIDB4MEMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsCisweEEwLCAweDI3LCAweDAwLCAweDAxLCAweDA1LCAweDA2LCAweDBDLCAweDEwLCAweDAwLCAweDQwLCAweDIwLCAweDAxLCAweDgxLAorMHgwMCwgMHgxNCwgMHgwMiwgMHgxMCwgMHg0OCwgMHg0OCwgMHgyMSwgMHgwMCwgMHg4MSwgMHgwNCwgMHgzNCwgMHgwMCwgMHhENCwKKzB4OEMsIDB4NDQsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDEsIDB4RDAsIDB4MDAsIDB4NDIsIDB4NDYsIDB4MjAsCisweDBELCAweDAxLCAweDc0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweEM5LCAweDAwLCAweDI0LCAweDAzLAorMHhEMCwgMHgwQywgMHg0MCwgMHg0QywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBOCwKKzB4MjUsIDB4MDIsIDB4NTEsIDB4NDQsIDB4MTQsIDB4MDQsIDB4MTQsIDB4MUQsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsCisweDU1LCAweDAzLCAweDE0LCAweDA5LCAweDQwLCAweDY0LCAweDAwLCAweDUxLCAweDAwLCAweDY0LCAweDBDLCAweEMwLCAweDFELAorMHg0NCwgMHg3NiwgMHgwNCwgMHg4RCwgMHgwMCwgMHg3NCwgMHg4OSwgMHhEMCwgMHgwNSwgMHg1MCwgMHgwNCwgMHgwMCwgMHgxNSwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OTksIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsCisweDFDLCAweDQwLCAweDBDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDQzLAorMHgwMCwgMHgxMywgMHgwMCwgMHg0QywgMHgwNCwgMHgzMCwgMHgzMSwgMHhDMiwgMHgwNCwgMHgwMCwgMHgxMywgMHgwMSwgMHg1QywKKzB4MDAsIDB4MzAsIDB4MTEsIDB4QzAsIDB4RTQsIDB4MDQsIDB4RDMsIDB4MDQsIDB4N0MsIDB4MEMsIDB4RjAsIDB4MzUsIDB4QzAsCisweEU0LCAweDAwLCAweDFGLCAweDAwLCAweDVDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDEyLCAweDAwLCAweDU3LCAweDAwLAorMHgzQywgMHgwMSwgMHhCMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHhEQiwgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgxRCwKKzB4QzAsIDB4MDgsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODgsIDB4NEQsIDB4MDAsCisweDdGLCAweDAwLCAweEVDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDBGLCAweDEyLCAweDNGLCAweDA5LCAweEVDLCAweDAxLAorMHhGMCwgMHg5MywgMHg4MCwgMHgyRiwgMHg1MCwgMHhGRiwgMHgwMCwgMHg1QywgMHgwMCwgMHgzMCwgMHgwNiwgMHhDMCwgMHgyNSwKKzB4MDAsIDB4M0YsIDB4MDgsIDB4Q0MsIDB4MDAsIDB4RjIsIDB4MDcsIDB4QzQsIDB4MUYsIDB4MDAsIDB4N0IsIDB4MDAsIDB4RkMsCisweDgxLCAweEYwLCAweDgzLCAweEMwLCAweDBGLCAweDAyLCAweEU3LCAweDA4LCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEQ0LAorMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgyNSwgMHg0MCwgMHgzMywKKzB4MDAsIDB4NEMsIDB4MDAsIDB4MzIsIDB4MzEsIDB4QzAsIDB4NjQsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NEMsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDUzLCAweDA0LCAweDZDLCAweDg4LCAweEIwLCAweDJELCAweEMwLCAweDM0LCAweDExLAorMHg5NywgMHgwNSwgMHg3QywgMHgwMSwgMHgzMCwgMHg0MSwgMHhDMCwgMHgxNywgMHgwMiwgMHg1QiwgMHgxMCwgMHg0QywgMHgwMywKKzB4MzAsIDB4MTksIDB4QzAsIDB4NjQsIDB4MDAsIDB4OUYsIDB4MDQsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MTUsIDB4QzAsIDB4MDgsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDI0LCAweDIwLCAweDQxLCAweDAxLAorMHg0NCwgMHgxNCwgMHgxMCwgMHhCRCwgMHg0MCwgMHg2NCwgMHgwMCwgMHg5RCwgMHgwQiwgMHg0NCwgMHgyRiwgMHhEMCwgMHhBOCwKKzB4QzIsIDB4MjYsIDB4MDAsIDB4RDEsIDB4ODIsIDB4MDQsIDB4MDAsIDB4MTAsIDB4QUQsIDB4NDAsIDB4QjQsIDB4MDAsIDB4OTEsCisweDAzLCAweDcwLCAweDA5LCAweDExLCAweDM1LCAweDQwLCAweDk3LCAweDAyLCAweDUxLCAweDEzLCAweDQ0LCAweDQzLCAweDEwLAorMHhCOSwgMHg0MCwgMHg2NCwgMHgwMCwgMHg5RCwgMHgwMiwgMHg0NSwgMHgxMywgMHhEMCwgMHgxNSwgMHg0MCwgMHg2QywgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MjAsIDB4MDIsIDB4MDEsIDB4MUEsIDB4MjAsCisweDAwLCAweDE0LCAweDIxLCAweDQwLCAweDEwLCAweDAwLCAweDRELCAweDAwLCAweDYwLCAweDJDLCAweEQwLCAweDE0LCAweDQwLAorMHgzNCwgMHg0MCwgMHhEMSwgMHgwMiwgMHgyNCwgMHgwMCwgMHhEMCwgMHgyQywgMHg0MCwgMHgwMCwgMHgyMCwgMHg0NSwgMHgwMiwKKzB4MzAsIDB4NjIsIDB4MTAsIDB4MTksIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODAsIDB4NDEsIDB4MDQsIDB4MDQsIDB4MTAsIDB4MDQsCisweDQwLCAweDEwLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDA3LCAweEQwLCAweDA4LCAweDQwLCAweDFDLCAweDAwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg2OCwgMHgwMCwgMHgzMSwgMHgwMSwgMHhBNSwgMHgwNCwKKzB4MTAsIDB4MUIsIDB4NDAsIDB4NTgsIDB4MDAsIDB4NkQsIDB4MDEsIDB4QTQsIDB4MDUsIDB4RDAsIDB4MTYsIDB4NDAsIDB4NkEsCisweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDI0LCAweDUwLCAweDlFLCAweDQwLCAweDU4LCAweDAwLCAweDYxLCAweDAxLCAweEI2LAorMHgwNiwgMHgxMCwgMHgxRSwgMHg0MCwgMHg2RiwgMHgwMCwgMHhCMSwgMHg4MSwgMHhDNCwgMHgwNCwgMHgxMCwgMHgxNiwgMHg0MCwKKzB4NTgsIDB4MDAsIDB4RUQsIDB4MDksIDB4ODQsIDB4MDcsIDB4RDAsIDB4MkYsIDB4NDAsIDB4NzQsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweDI0LCAweDAxLCAweDAzLCAweDA4LCAweDI0LCAweDAwLCAweDMwLAorMHg2NCwgMHhDMCwgMHgzMCwgMHgwMCwgMHhERiwgMHgwMCwgMHgyQywgMHgwMiwgMHhGMCwgMHgwQywgMHhDMSwgMHgxNCwgMHgyMCwKKzB4ODMsIDB4MDAsIDB4MkMsIDB4MjAsIDB4RjIsIDB4MDgsIDB4RDAsIDB4MTAsIDB4MDAsIDB4QzcsIDB4MDAsIDB4M0MsIDB4MDMsCisweDMwLCAweDQ4LCAweEMxLCAweDIzLCAweDEwLCAweDgzLCAweDAwLCAweDBDLCAweDAyLCAweDMyLCAweDBELCAweEQwLCAweDMwLAorMHgwMCwgMHg4RiwgMHgwMCwgMHgwRCwgMHgwMywgMHhGMCwgMHg4QywgMHhDOCwgMHg0OCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4M0QsIDB4NDAsIDB4M0YsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjAsIDB4MEUsCisweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDA4LCAweERELCAweDAzLCAweEYyLCAweDhFLCAweEM0LCAweDJGLCAweDIwLCAweEZGLAorMHgwMCwgMHhGQywgMHgyMCwgMHhCMCwgMHgwRiwgMHhDMiwgMHgxRiwgMHgwMiwgMHhGRiwgMHgwOCwgMHhCQywgMHgyMywgMHhGMCwKKzB4MEYsIDB4QzAsIDB4MkIsIDB4MDAsIDB4QTcsIDB4MDAsIDB4QkMsIDB4MDIsIDB4RjEsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsCisweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDRFLCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHgzNCwgMHgwNSwgMHhDMCwKKzB4MTQsIDB4MDAsIDB4NUYsIDB4MDEsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzQsIDB4MDAsIDB4Q0YsIDB4MDAsCisweDRDLCAweDA0LCAweDMwLCAweDRDLCAweEMwLCAweDM0LCAweDAwLCAweDVCLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhEMCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4MEQsIDB4MDMsIDB4MzAsIDB4MEMsIDB4RDAsIDB4NTQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDgwLCAweDBELCAweDEwLCAweDIxLCAweDAwLCAweEY0LCAweDAyLCAweDEwLCAweDBFLCAweDQwLCAweDE4LAorMHgzMCwgMHg2RCwgMHgwMCwgMHg4NCwgMHgwMSwgMHhEMCwgMHgwNiwgMHg0MCwgMHgyOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhBQywKKzB4MDAsIDB4OTAsIDB4MEUsIDB4NDMsIDB4MzgsIDB4NDgsIDB4NjEsIDB4MDAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDIsCisweDM4LCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDA2LCAweDQwLCAweDFCLCAweDAwLCAweEZELCAweDAwLAorMHg4NCwgMHgwMywgMHgxMCwgMHgwRSwgMHg2MCwgMHg0QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4NzksIDB4MDAsIDB4MjEsIDB4MDEsIDB4QjQsIDB4MDQsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4MDAsCisweEVELCAweDAxLCAweDg0LCAweDA2LCAweEQwLCAweDFFLCAweDYwLCAweDc4LCAweDAwLCAweEZELCAweDAxLCAweDA0LCAweDQwLAorMHhEMCwgMHgxQSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFOSwgMHgyMSwgMHhCNiwgMHgwNywgMHhEMCwgMHgxQSwgMHg0MCwgMHg3OCwKKzB4MDAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsCisweDA3LCAweDEwLCAweDE3LCAweDQwLCAweDA0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorMHgyOCwgMHgzMywgMHgwMiwgMHg4MSwgMHgwMCwgMHg3NCwgMHgyNywgMHgxMCwgMHg3QywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NjIsIDB4MjAsIDB4MDEsIDB4Q0QsIDB4ODMsIDB4MjQsIDB4MDcsIDB4RDAsCisweDJDLCAweDQwLCAweDcwLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBELCAweDQyLCAweDM0LCAweDAwLAorMHhDMSwgMHg0MCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwOSwgMHgwNCwgMHgwMywKKzB4MTUsIDB4MDQsIDB4NjAsIDB4NDgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjAsCisweDE5LCAweDQwLCAweDczLCAweDQyLCAweEZDLCAweDA1LCAweDMwLCAweDU3LCAweEQwLCAweDE0LCAweDAwLCAweDVGLCAweDAwLAorMHg0RCwgMHgwMSwgMHhGMCwgMHgwNSwgMHhEMCwgMHgxQywgMHgyMCwgMHg3RiwgMHgwNSwgMHhDQywgMHgwOSwgMHg3NCwgMHgyNywKKzB4QzAsIDB4REMsIDB4MDMsIDB4NUIsIDB4ODAsIDB4M0MsIDB4MDEsIDB4RjEsIDB4MDUsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NTMsCisweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDBDLCAweDAxLCAweDMwLAorMHgyNywgMHhDMCwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHg4NSwKKzB4MTQsIDB4MEYsIDB4MjQsIDB4N0MsIDB4MDQsIDB4RjQsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4ODAsIDB4N0MsCisweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDAzLCAweDAwLCAweDFGLCAweDEwLCAweDdDLCAweDEwLCAweDMwLCAweDYxLCAweEQwLAorMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHhEMSwgMHgwMSwgMHhDOCwgMHgwNywgMHg0MCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMxLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY1LCAweDAwLAorMHg5MywgMHgwMSwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4MzAsIDB4ODksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MEMsIDB4MEEsIDB4MzAsIDB4MjksIDB4QzAsIDB4MjIsCisweDcwLCAweDkzLCAweDgwLCAweDdDLCAweDA2LCAweDMwLCAweDA5LCAweEMwLCAweDY0LCAweDAyLCAweDkzLCAweDA1LCAweDdDLAorMHgwMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwMiwgMHg5RiwgMHgwMSwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwKKzB4NDAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MTAsIDB4OTEsCisweDI4LCAweDQ0LCAweDAyLCAweDEwLCAweDI4LCAweDQwLCAweEE0LCAweDAwLCAweDlELCAweDAyLCAweDc0LCAweDAyLCAweDEwLAorMHgzOSwgMHg0MCwgMHgyNCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg2QywgMHgwMiwgMHgxMCwgMHgyOCwgMHg0MCwgMHhBNCwgMHgwMCwKKzB4OTEsIDB4MDIsIDB4NUMsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4RTQsIDB4MDgsIDB4OTEsIDB4MjEsIDB4NzQsIDB4ODIsCisweEQwLCAweDI5LCAweDQwLCAweEU3LCAweDAwLCAweDlELCAweDAzLCAweDQ1LCAweDAyLCAweDE0LCAweDA5LCAweDQwLCAweDA0LAorMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHg0NiwgMHg5MSwgMHgyMCwKKzB4NDQsIDB4MDIsIDB4MTIsIDB4MjksIDB4NDAsIDB4MjQsIDB4MDEsIDB4QkQsIDB4MDQsIDB4RjQsIDB4MDIsIDB4MTgsIDB4MEEsCisweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDgwLCAweDY0LCAweDAyLCAweDE5LCAweDBELCAweDQwLCAweDI2LCAweDAwLCAweDkxLAorMHgwMCwgMHhGNCwgMHgyMiwgMHgxQywgMHgwRiwgMHg0MCwgMHgyQywgMHgwNCwgMHhCMSwgMHgwMCwgMHhGNCwgMHgwNiwgMHhEMCwKKzB4MEIsIDB4NDAsIDB4MkYsIDB4MDAsIDB4OEQsIDB4MEEsIDB4NjQsIDB4MDIsIDB4MTAsIDB4MTgsIDB4NDAsIDB4NjIsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDI0LCAweDAxLCAweDgxLCAweDA0LCAweDA0LAorMHgxMiwgMHgxMCwgMHg0OCwgMHg1MCwgMHg2OCwgMHgwMCwgMHhBRCwgMHgwMSwgMHhCNCwgMHgwMiwgMHgxMCwgMHgxQSwgMHg0MiwKKzB4MjAsIDB4MDEsIDB4OTEsIDB4MDAsIDB4MjQsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MzIsIDB4MDEsIDB4QTEsIDB4MDEsCisweEQ0LCAweDAzLCAweDEwLCAweDBBLCAweDQwLCAweDI4LCAweDIwLCAweEExLCAweDAxLCAweEI0LCAweDAyLCAweEQwLCAweDFBLAorMHg0MCwgMHg2QiwgMHgwMCwgMHg4RCwgMHgwNCwgMHgyNSwgMHgwMiwgMHgxMCwgMHg1OCwgMHg1MCwgMHg0MiwgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4ODYsIDB4MDIsIDB4NTMsIDB4MEEsIDB4NEQsIDB4MjgsCisweDM0LCAweEEwLCAweDQwLCAweDg0LCAweDAyLCAweDBGLCAweDBBLCAweDdDLCAweDI5LCAweDMwLCAweEEyLCAweDQwLCAweDg0LAorMHgwMiwgMHgxMywgMHgwQSwgMHg2QywgMHgwMCwgMHgzMCwgMHgwNSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwQSwgMHg3QywKKzB4MDAsIDB4MzAsIDB4QTAsIDB4RDAsIDB4ODAsIDB4MDIsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4QTEsIDB4QzAsCisweDhGLCAweDAyLCAweDFGLCAweDBBLCAweDZDLCAweDAwLCAweDMwLCAweEExLCAweEMwLCAweDc2LCAweEMwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgwOCwgMHhGQywgMHgyMiwgMHhGMCwKKzB4OEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjQsIDB4MDksIDB4RDAsIDB4MkYsIDB4NDIsCisweEJGLCAweDgwLCAweEZDLCAweDIyLCAweEYwLCAweDhCLCAweEMwLCAweDI5LCAweDgyLCAweDlGLCAweDAwLCAweDVDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4QkYsIDB4MDgsIDB4NUMsIDB4MDIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4NjUsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDJGLCAweDAxLCAweEEzLCAweDE0LCAweEZDLCAweDMyLCAweEYwLCAweDBCLAorMHhEMCwgMHgyQywgMHgwMCwgMHhCMywgMHgwOCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHgyNiwgMHgxOSwgMHhCMywKKzB4MDAsIDB4Q0MsIDB4MDYsIDB4MzAsIDB4MUIsIDB4QzEsIDB4NkUsIDB4MDQsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4MzAsCisweDBCLCAweEMwLCAweDNDLCAweDAwLCAweEYzLCAweDAwLCAweENDLCAweDAzLCAweDMxLCAweDBCLCAweEMwLCAweDJDLCAweDAyLAorMHhCRiwgMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwgMHg4RiwgMHhDMCwgMHg2MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MTcsIDB4NDUsIDB4MTEsIDB4MDQsIDB4NzQsIDB4MzAsIDB4RDAsIDB4MjAsIDB4NDEsCisweDE0LCAweDQ0LCAweDUxLCAweDAwLCAweDc0LCAweDUwLCAweDEwLCAweDQxLCAweDUwLCAweDA0LCAweDAyLCAweDEzLCAweDAwLAorMHg2QywgMHgyOCwgMHgxNCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHg1RCwgMHgwNCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwKKzB4NDEsIDB4MDQsIDB4MDQsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4NDUsIDB4NDAsIDB4MTQsIDB4MDEsIDB4MUQsCisweDEyLCAweDQ1LCAweDAwLCAweEQwLCAweDgxLCAweDQwLCAweDcwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHg0MywgMHg4MSwgMHgxNCwgMHgzNCwgMHgxMiwgMHhEMCwgMHhDOCwgMHg1MCwgMHgyMCwKKzB4MTAsIDB4ODEsIDB4MDAsIDB4NzQsIDB4MTYsIDB4MTQsIDB4NDgsIDB4NDEsIDB4MjQsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MjQsCisweDAyLCAweDkwLCAweDA4LCAweDQwLCAweDIyLCAweDAwLCAweDhELCAweDk0LCAweDc0LCAweDAyLCAweDk4LCAweDQ5LCAweDQwLAorMHgyMiwgMHgwMCwgMHg5MSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg5MCwgMHg0OCwgMHg0MSwgMHgyMiwgMHgxMSwgMHg4RCwgMHgwQywKKzB4MDQsIDB4MDIsIDB4RDAsIDB4MTgsIDB4NDAsIDB4NDgsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweDI4LCAweDI1LCAweDAwLCAweDkxLCAweDEwLCAweDc0LCAweDAyLCAweEQwLCAweDQ5LCAweDQxLCAweDIwLCAweDAwLAorMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgyOSwgMHg0MCwgMHhBNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg2NCwgMHg2MiwKKzB4OTgsIDB4MTksIDB4NDQsIDB4MjQsIDB4MDIsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4OUMsIDB4MDksIDB4NTAsIDB4MjIsCisweDAwLCAweDkxLCAweDAwLCAweDU0LCAweDAyLCAweDkwLCAweDA4LCAweDUwLCAweDI2LCAweDAwLCAweDlELCAweDA4LCAweDQ0LAorMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg2MCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4MDAsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTQsIDB4MDAsIDB4OTMsCisweDAyLCAweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI0LCAweDQwLCAweDkzLCAweDEwLCAweDZELCAweDBBLCAweEIwLAorMHg3OSwgMHhDMCwgMHgyNiwgMHgxMCwgMHg5RiwgMHgwMiwgMHgzQywgMHgwMiwgMHhCMCwgMHgwOCwgMHhDMiwgMHgyNiwgMHg0MCwKKzB4ODMsIDB4MDAsIDB4NUMsIDB4NDIsIDB4QjQsIDB4MjksIDB4QzAsIDB4QTYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsCisweEYwLCAweDE5LCAweEMwLCAweDE0LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDA4LAorMHhFNSwgMHgwMCwgMHg5RiwgMHgxMCwgMHg3QywgMHhBNiwgMHhGMCwgMHgxOCwgMHhEMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjIsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OTcsIDB4MTUsIDB4N0UsIDB4MDYsIDB4NzAsIDB4MDksCisweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDI2LCAweDcyLCAweDA5LCAweEMxLCAweDI1LCAweDAwLCAweDlGLAorMHgwMCwgMHg2RCwgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwNCwgMHg5RiwgMHgxMCwgMHg3RSwgMHgwMiwgMHhGMCwKKzB4NDksIDB4RDEsIDB4NUIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4ODEsCisweDAxLCAweDEzLCAweDAyLCAweDRDLCAweDIwLCAweDM0LCAweDgxLCAweEMwLCAweDg2LCAweDQ0LCAweDEzLCAweDEyLCAweDZELAorMHgwNCwgMHhGMCwgMHg4MSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMiwgMHg0QywgMHg4OCwgMHgzMCwgMHgyMCwgMHhDMCwKKzB4MDQsIDB4MDgsIDB4MUYsIDB4MDIsIDB4NEQsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MTMsIDB4MDAsCisweDdDLCAweDQwLCAweEYwLCAweDIxLCAweEQwLCAweDg0LCAweDQwLCAweDEzLCAweDA4LCAweDRDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgxQywgMHgwMCwKKzB4NzEsIDB4ODIsIDB4NDQsIDB4MDUsIDB4MTAsIDB4MTcsIDB4QzAsIDB4OUMsIDB4MDAsIDB4NzEsIDB4MDIsIDB4ODQsIDB4MDUsCisweEQwLCAweDE2LCAweDQwLCAweDEwLCAweDAwLCAweDdELCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDM3LCAweDQwLCAweDlDLAorMHgwMCwgMHg3RCwgMHgwMywgMHhDNCwgMHgxMSwgMHhEMCwgMHgxNywgMHhDMCwgMHgxQywgMHgwMCwgMHg3MSwgMHgwMCwgMHhCMCwKKzB4NEQsIDB4RDAsIDB4MDcsIDB4NDAsIDB4MUMsIDB4MDAsIDB4NzEsIDB4MDEsIDB4NDUsIDB4MDEsIDB4RDAsIDB4MTcsIDB4NDEsCisweDUwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDMyLCAweDQwLCAweDgxLAorMHgwMiwgMHgyNCwgMHgwNywgMHgxMCwgMHgwQywgMHg0MCwgMHhCMCwgMHgwMCwgMHhDMSwgMHgwMiwgMHgwNCwgMHgyNywgMHhEMCwKKzB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4NUQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4OTAsIDB4QjgsIDB4NTEsIDB4QjAsIDB4MjEsCisweENELCAweDA1LCAweDAwLCAweDA3LCAweEQwLCAweDJDLCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDEzLCAweDM0LCAweDBCLAorMHhEOCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHg5MSwgMHgwMywgMHgwNCwgMHgwMiwgMHhEMCwgMHgyQywgMHg0MCwgMHg1MCwKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MjgsIDB4MDAsIDB4MzEsIDB4MDEsCisweEE0LCAweDA2LCAweDEwLCAweDA2LCAweDQwLCAweDM4LCAweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDAzLCAweEQwLCAweDBFLAorMHg0MiwgMHgzOCwgMHgyMSwgMHhFRCwgMHgwMCwgMHg5NCwgMHgwMywgMHg5MCwgMHgwOCwgMHg0MCwgMHgxOCwgMHgwNCwgMHhFRCwKKzB4MDMsIDB4ODQsIDB4MDEsIDB4RDEsIDB4MkYsIDB4NTAsIDB4MzgsIDB4MDAsIDB4MjEsIDB4MTAsIDB4QjQsIDB4MDMsIDB4RDAsCisweDBFLCAweDQwLCAweDc4LCAweDAwLCAweEExLCAweDAwLCAweDg0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDE0LCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg1QywgMHgwMiwgMHg2MywgMHgwMSwgMHhFQywKKzB4MDcsIDB4MzAsIDB4MUUsIDB4RDEsIDB4N0MsIDB4MDAsIDB4RjMsIDB4MDEsIDB4OEMsIDB4MDcsIDB4RjAsIDB4MUEsIDB4RDAsCisweEY4LCAweDIxLCAweDNGLCAweDAxLCAweDg0LCAweDA3LCAweEIwLCAweDE2LCAweEMwLCAweDc4LCAweDAwLCAweEZGLCAweDIxLAorMHg4QywgMHgwNywgMHhGMCwgMHgxRSwgMHhDMCwgMHg3QywgMHg0MCwgMHgyMywgMHgwMSwgMHhCQywgMHgwNywgMHhGMCwgMHgxRiwKKzB4QzAsIDB4N0MsIDB4MDAsIDB4NzMsIDB4MDEsIDB4ODQsIDB4MDYsIDB4RjAsIDB4MUUsIDB4RDAsIDB4NTQsIDB4NDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDlELCAweDAwLCAweDFGLCAweDgwLCAweDVELCAweDEyLAorMHhGMCwgMHgwNywgMHhDMCwgMHgzNSwgMHgwOCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMiwgMHgwMCwgMHhDMCwgMHg3NywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDM1LCAweDA4LCAweDFGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLAorMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4N0QsIDB4MDAsIDB4MjMsIDB4MDEsIDB4Q0MsIDB4M0YsIDB4RjgsCisweDhCLCAweEMwLCAweDdDLCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweEIwLCAweDlCLCAweEMwLCAweDdGLCAweDAwLAorMHhFNywgMHgwMSwgMHg4QywgMHg4NywgMHgyNCwgMHgxRSwgMHhDMCwgMHg1RCwgMHgwMCwgMHhGMywgMHgwMSwgMHhENCwgMHgyNSwKKzB4QjAsIDB4MUYsIDB4RDgsIDB4N0MsIDB4MDAsIDB4MzIsIDB4MDEsIDB4RkMsIDB4MDUsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsCisweDAwLCAweDczLCAweDAxLCAweENDLCAweDA2LCAweEYwLCAweDE3LCAweEMwLCAweDAzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgyOSwgMHgwMCwgMHgyMSwgMHg4MiwgMHg4NCwgMHg2MiwgMHgzMCwgMHg0NywKKzB4NDAsIDB4M0MsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QkMsIDB4MDIsIDB4MTAsIDB4Q0UsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUIsCisweDAwLCAweEFDLCAweDEzLCAweDMwLCAweDBFLCAweDQwLCAweDk4LCAweDQwLCAweEUxLCAweDA4LCAweDg0LCAweDAxLCAweDE0LAorMHg0QiwgMHhDMSwgMHgzQywgMHgwMCwgMHgyMSwgMHgwOCwgMHhCNCwgMHgwOCwgMHhEMCwgMHgyRSwgMHg0MCwgMHgzQywgMHgwMCwKKzB4RTEsIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsIDB4ODIsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDYxLCAweDAwLCAweDA0LCAweDEzLCAweDUwLCAweDhBLCAweDUwLAorMHgzOCwgMHgwMCwgMHhFOSwgMHgwMCwgMHhGNCwgMHgwMywgMHgxMCwgMHgwQSwgMHg2MCwgMHgzMywgMHgwMCwgMHhCNSwgMHgwMCwKKzB4QTQsIDB4ODMsIDB4ODAsIDB4MEYsIDB4NTAsIDB4M0IsIDB4MDAsIDB4NjEsIDB4MDAsIDB4OTQsIDB4MDAsIDB4OTQsIDB4MEUsCisweDYwLCAweDM4LCAweDAwLCAweDI5LCAweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDBFLCAweDQwLCAweDM4LCAweDAwLCAweEUxLAorMHgwMCwgMHg4NCwgMHgwMiwgMHhEMCwgMHgwNiwgMHg0MCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MjgsIDB4NTEsIDB4MDAsIDB4MDEsIDB4MDYsIDB4MDUsIDB4MEEsIDB4MTIsIDB4QjUsIDB4NDEsIDB4MzAsCisweDAwLCAweEM5LCAweDAwLCAweDM0LCAweDAyLCAweDEwLCAweDA0LCAweDYwLCAweEYzLCAweDQwLCAweDg5LCAweDAzLCAweDI0LAorMHgyMywgMHgxMCwgMHgxQywgMHg0MCwgMHgzMiwgMHgwMCwgMHhEMSwgMHgwMCwgMHgwNCwgMHgwMSwgMHg5MCwgMHgwOCwgMHg0MCwKKzB4MzAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4RDEsIDB4MDAsCisweDA1LCAweDAyLCAweEQwLCAweDE4LCAweDQwLCAweDEzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHhBMCwgMHg2NSwgMHg0MCwgMHgxMywgMHgwNywgMHg0QywgMHgwRSwgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNCwgMHgwMCwKKzB4REIsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MDgsIDB4QzIsIDB4M0YsIDB4MjAsIDB4MDcsIDB4MEQsIDB4MEMsIDB4MEEsCisweEIwLCAweDVELCAweEMwLCAweDczLCAweDA0LCAweEQzLCAweDAwLCAweDVDLCAweDAyLCAweEIwLCAweDBELCAweEMwLCAweDM0LAorMHgwMCwgMHgwQiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhEMCwgMHgzNCwgMHgwMCwgMHg5MywgMHgwNSwgMHg0QywKKzB4MDMsIDB4RjAsIDB4MEMsIDB4QzEsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweDA4LCAweDI3LCAweDAyLCAweDNGLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDIxLCAweEMwLCAweDI3LCAweDIwLCAweDk3LAorMHgwMCwgMHg1QywgMHgwNywgMHhGMCwgMHgyOSwgMHhDMCwgMHgzNywgMHgwNiwgMHg5NywgMHgwMCwgMHg3QywgMHg0MiwgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MzUsIDB4MjAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzIsIDB4MjUsIDB4QzAsIDB4QTUsIDB4MDAsCisweDEzLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwKKzB4MEYsIDB4NjAsIDB4NzMsIDB4MDAsIDB4QUMsIDB4NDIsIDB4QjAsIDB4MDMsIDB4QzAsIDB4MUMsIDB4MDAsIDB4RkYsIDB4MDAsCisweEZDLCAweDAzLCAweDMwLCAweDRCLCAweEMwLCAweDNFLCAweDAwLCAweDMzLCAweDA1LCAweENDLCAweDA3LCAweDMwLCAweDRGLAorMHg0MCwgMHgzNywgMHgwMCwgMHhGMywgMHgwMCwgMHhFQywgMHgwMiwgMHhFMCwgMHgzRiwgMHhDMCwgMHgxQywgMHgwMCwgMHgzMSwKKzB4MDAsIDB4Q0MsIDB4MDEsIDB4RjAsIDB4MDcsIDB4ODAsIDB4NUMsIDB4MDAsIDB4NTMsIDB4MDAsIDB4Q0MsIDB4MDcsIDB4RjAsCisweDNGLCAweEUwLCAweDAwLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweEM2LAorMHgwMCwgMHgxMSwgMHgyMiwgMHg0NCwgMHgwNiwgMHgxMCwgMHgzMSwgMHg0MCwgMHgxNCwgMHgwMCwgMHg1RCwgMHgwMSwgMHgzNCwKKzB4MDcsIDB4MTAsIDB4NTksIDB4NDIsIDB4MzAsIDB4NDAsIDB4OTEsIDB4NDAsIDB4NTQsIDB4MDMsIDB4MTAsIDB4N0QsIDB4NDAsCisweEY3LCAweDAwLCAweDlCLCAweDAxLCAweDQ0LCAweDA2LCAweEQwLCAweDA1LCAweDUwLCAweDM0LCAweDAwLCAweDExLCAweDA3LAorMHg0QywgMHgwQywgMHhEMCwgMHgzRCwgMHg0MCwgMHhENCwgMHgwMiwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgzOSwKKzB4NTAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4QzIsIDB4MDAsCisweDAxLCAweDAwLCAweDY0LCAweDEzLCAweDkwLCAweDE5LCAweDQxLCAweDc2LCAweDAwLCAweERELCAweDg4LCAweDc0LCAweDA3LAorMHgxNCwgMHgwOSwgMHg0OCwgMHgzNCwgMHgwMCwgMHg5OSwgMHg0MCwgMHg0NiwgMHgxMiwgMHgxMCwgMHgwRCwgMHg0OCwgMHg2NywKKzB4MDAsIDB4RDEsIDB4MDQsIDB4NjQsIDB4MDQsIDB4RDAsIDB4MkMsIDB4NDAsIDB4QjIsIDB4MDEsIDB4MTUsIDB4MDEsIDB4NjQsCisweDA1LCAweEQwLCAweDhELCAweDQwLCAweDMxLCAweDA0LCAweDUxLCAweDAwLCAweDQ0LCAweDEzLCAweEQwLCAweDJELCAweDQwLAorMHgwNiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NTAsIDB4NjIsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDcsIDB4MTQsCisweDA5LCAweDQyLCAweDM0LCAweDAwLCAweDkxLCAweDAwLCAweDE0LCAweDAyLCAweDEwLCAweDBDLCAweDYwLCAweDIzLCAweDQwLAorMHhDOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhEMCwgMHgwQywgMHg0MCwgMHgyMiwgMHg4MCwgMHgwNSwgMHg4MCwgMHgwNCwgMHgwMCwKKzB4RDAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NDAsCisweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDBFLCAweDAwLCAweDUzLCAweDAwLAorMHhFQywgMHgwMywgMHhCMiwgMHgwMywgMHhEMCwgMHgzNiwgMHgwMCwgMHhERiwgMHg4MCwgMHg3QywgMHgwMywgMHgxNCwgMHgwOSwKKzB4RDAsIDB4MzYsIDB4MDAsIDB4OTIsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzQsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MTAsIDB4NDMsCisweDAwLCAweDZDLCAweDAwLCAweEYwLCAweDBELCAweEQwLCAweDE2LCAweDAwLCAweDE3LCAweDAwLCAweDZDLCAweDAxLCAweEYwLAorMHgwNCwgMHhEMCwgMHgzNSwgMHgwMCwgMHhEMywgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgwMCwgMHhDMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MEIsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsCisweDAyLCAweEYxLCAweDAzLCAweEMwLCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDAxLCAweEY0LCAweDBCLCAweEMwLAorMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4QjQsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4M0IsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsCisweEMwLCAweDNFLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDE3LCAweDYwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwMiwKKzB4RjAsIDB4MUYsIDB4QzgsIDB4M0YsIDB4MDEsIDB4QkYsIDB4MjIsIDB4RkMsIDB4MEEsIDB4MzAsIDB4MEIsIDB4QzAsIDB4QkYsCisweDA1LCAweEVGLCAweDA5LCAweEVDLCAweDEwLCAweEIwLCAweDNGLCAweEMwLCAweEJELCAweDAwLCAweEIzLCAweDA0LCAweENDLAorMHg4MiwgMHgzMiwgMHgyRiwgMHhDNCwgMHgyRiwgMHg0MCwgMHhGMiwgMHgwMSwgMHhDQywgMHgxMywgMHhGMCwgMHgxMiwgMHg0NCwKKzB4N0EsIDB4MjAsIDB4MzMsIDB4Q0MsIDB4RUMsIDB4MDYsIDB4OTAsIDB4MUYsIDB4NDAsIDB4MEUsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDA4LCAweDc3LCAweDAwLCAweERELCAweDAxLCAweDc0LCAweDI2LCAweEQwLAorMHgxRCwgMHg0MCwgMHhCRiwgMHgwNSwgMHgxRCwgMHgwMiwgMHg3NCwgMHgzOCwgMHgxMCwgMHhDMSwgMHg0MCwgMHhCRiwgMHgwMCwKKzB4REQsIDB4MDAsIDB4NjQsIDB4MkMsIDB4MDQsIDB4NEQsIDB4NDAsIDB4QkYsIDB4MDgsIDB4MTEsIDB4MTQsIDB4NzQsIDB4NDAsCisweDEwLCAweDZGLCAweDQwLCAweEU3LCAweDAwLCAweEQ1LCAweDAxLCAweEM0LCAweDBGLCAweEQwLCAweDE5LCAweDQwLCAweDc0LAorMHgwMCwgMHgwMSwgMHgyMiwgMHg0NCwgMHgwNiwgMHgxMiwgMHgxRCwgMHg0MCwgMHgwQywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzEsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4ODAsIDB4RDgsIDB4MEMsCisweDQwLCAweEIzLCAweDAwLCAweDhELCAweDI2LCAweDM0LCAweDAyLCAweDEwLCAweDAwLCAweDQxLCAweDMzLCAweDExLCAweENELAorMHg4MCwgMHgyNCwgMHgwMiwgMHgwMCwgMHgwQywgMHg0MCwgMHgzMSwgMHg4MywgMHg4MSwgMHg4QywgMHgwNCwgMHhCMiwgMHgxMiwKKzB4MkMsIDB4NjAsIDB4MDMsIDB4NDIsIDB4RDUsIDB4MDAsIDB4MTQsIDB4MjMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MDAsCisweDQ1LCAweDI2LCAweDY0LCAweDAxLCAweDkwLCAweDBDLCAweDQwLCAweDRFLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHgyOCwgMHgzNSwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwNCwgMHhEMCwgMHgwRCwgMHg0NCwKKzB4MzcsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDQsIDB4MTAsIDB4MTEsIDB4NDQsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsCisweDY2LCAweDg0LCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDkxLCAweDAxLCAweDc0LCAweDA2LCAweDE4LCAweDBELAorMHg0MCwgMHg0NywgMHgwMCwgMHg1NSwgMHgxMSwgMHg1NCwgMHgwMywgMHhEMCwgMHgxOSwgMHg0MywgMHgzNywgMHg4MCwgMHgxMSwKKzB4MTgsIDB4NDQsIDB4MEUsIDB4MTAsIDB4MEQsIDB4NDIsIDB4MEMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDIwLCAweEE4LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDFFLCAweEYwLCAweDBELCAweEMwLCAweDM3LAorMHgwMCwgMHg5RiwgMHg4NywgMHg3QywgMHhDNCwgMHgzMCwgMHgxOSwgMHhDMiwgMHgzNywgMHgxOCwgMHhERiwgMHgwMCwgMHg2QywKKzB4MDQsIDB4MzAsIDB4MEQsIDB4QzQsIDB4MzUsIDB4MDgsIDB4MTMsIDB4MDEsIDB4NEMsIDB4MUUsIDB4MzQsIDB4MEQsIDB4QzIsCisweDY3LCAweDQwLCAweEQ3LCAweDAxLCAweDVDLCAweDAzLCAweEYwLCAweDE5LCAweEMwLCAweDM3LCAweDAwLCAweDk1LCAweDAyLAorMHgyQywgMHgwRSwgMHhCMCwgMHgwRCwgMHhDMCwgMHgyMiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4ODIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4OTAsCisweDNGLCAweDkwLCAweEJDLCAweDAwLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAzLCAweDlDLCAweDQwLAorMHg3MCwgMHgwRiwgMHhDMCwgMHgzNywgMHg0MCwgMHgzRiwgMHg0MCwgMHhGQywgMHgwMCwgMHg3MCwgMHgwRiwgMHhDMCwgMHgyRiwKKzB4MDAsIDB4QkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0MsIDB4MEMsIDB4MkYsIDB4MDEsIDB4RkMsCisweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg5MywKKzB4MDIsIDB4N0MsIDB4MEEsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MzQsIDB4NDAsIDB4RDMsIDB4MDQsIDB4NEUsIDB4MDIsIDB4RjEsCisweDBELCAweEMwLCAweDMwLCAweDAwLCAweDEzLCAweDA4LCAweDdDLCAweDBBLCAweEYwLCAweDBELCAweEMwLCAweDI0LCAweDAwLAorMHhEMywgMHgyMiwgMHg3QywgMHgwMywgMHgzMCwgMHgyOSwgMHhDMCwgMHgzNCwgMHgwMCwgMHgxMywgMHgwMiwgMHg0QywgMHgwRCwKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUIsIDB4QTAsCisweDM0LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDEyLCAweEQxLCAweDBELCAweDAwLCAweDNGLCAweDAwLCAweDkxLCAweDgwLAorMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgzQywgMHgyNCwgMHhEQiwgMHgwMiwgMHg2NiwgMHg0QSwgMHhEMCwgMHgwRCwKKzB4NDgsIDB4QkMsIDB4NDIsIDB4MUIsIDB4OEIsIDB4NzQsIDB4MDIsIDB4RjAsIDB4M0YsIDB4QzEsIDB4NjIsIDB4MDEsIDB4OEEsCisweDA0LCAweEYwLCAweDAzLCAweEIxLCAweEE4LCAweDQwLCAweDMwLCAweDAwLCAweDFCLCAweDBFLCAweDQ0LCAweDBGLCAweEQwLAorMHgwQywgMHg0MCwgMHg2RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgzMiwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsCisweDAyLCAweDEwLCAweDA4LCAweDQwLCAweEYwLCAweDA5LCAweEQxLCAweDgxLCAweDI0LCAweDBFLCAweEQwLCAweDBDLCAweDQ4LAorMHg3MCwgMHgwMCwgMHg4OSwgMHgwMywgMHg3NCwgMHgwMCwgMHhEMCwgMHg2QywgMHg0MiwgMHgwMiwgMHgwMSwgMHhDNSwgMHgzMCwKKzB4MjAsIDB4MDcsIDB4MDAsIDB4QkMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsCisweDQwLCAweDBGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBELCAweDgwLCAweDc4LCAweDAwLAorMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHg2MSwgMHgxMSwgMHhCNCwgMHgwNywKKzB4MTAsIDB4MTYsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QTQsIDB4MjUsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NzgsCisweDAwLCAweDYxLCAweDAxLCAweEI0LCAweDA1LCAweDUwLCAweDFFLCAweDQwLCAweDdBLCAweDAwLCAweEVELCAweDAxLCAweEI0LAorMHgwNywgMHg5MCwgMHgwRiwgMHg0MCwgMHg3OCwgMHgwNCwgMHhFOSwgMHgwMSwgMHg4NCwgMHgwRSwgMHhEMCwgMHgxRSwgMHg0MCwKKzB4M0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4Q0YsCisweDAwLCAweDNDLCAweDAxLCAweEQwLCAweDhDLCAweEMwLCAweDM3LCAweDAwLCAweDQzLCAweDAwLCAweDdDLCAweDAzLCAweDEwLAorMHg4RCwgMHhEMCwgMHgzNCwgMHgyMiwgMHhDMSwgMHg5MCwgMHgwNCwgMHgyQiwgMHhEOCwgMHgwRCwgMHhEMCwgMHgzMCwgMHgwNiwKKzB4QzksIDB4MDAsIDB4M0MsIDB4MDEsIDB4RDAsIDB4NEQsIDB4QzAsIDB4MTIsIDB4MDAsIDB4QzMsIDB4MDQsIDB4MkMsIDB4NTMsCisweDMwLCAweDhDLCAweDgwLCAweDMwLCAweDAwLCAweEMzLCAweEU0LCAweDBDLCAweDgzLCAweEYwLCAweDBDLCAweEMwLCAweDRCLAorMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4MDEsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4NDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjQsIDB4OEYsCisweEMwLCAweDNGLCAweDAyLCAweEZGLCAweDAwLCAweDVELCAweEExLCAweEY4LCAweDBGLCAweEMwLCAweEJGLCAweDAwLCAweEZGLAorMHg4MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMSwgMHgxQiwgMHgwMiwgMHhGQiwgMHgwMCwgMHhCMCwgMHg0QiwgMHhGMCwKKzB4Q0YsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEIsIDB4NjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDM3LCAweDgwLCAweERGLCAweDAwLCAweDdDLAorMHgwMSwgMHg3MCwgMHgwRCwgMHhDNCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwNSwgMHgzMCwgMHgwRCwgMHhDMiwKKzB4QjUsIDB4MDIsIDB4Q0YsIDB4MDAsIDB4NUQsIDB4MDMsIDB4MzgsIDB4MUQsIDB4QzAsIDB4MzUsIDB4MDEsIDB4REYsIDB4MDAsCisweDdDLCAweDAzLCAweEYwLCAweDZELCAweEMwLCAweDEwLCAweDAwLCAweEMzLCAweDAwLCAweDZDLCAweDEzLCAweEYwLCAweDA5LAorMHhDMCwgMHgzNywgMHhBMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwMywgMHhEMCwgMHgwQywgMHhDMCwgMHg0MiwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsCisweEQwLCAweDBFLCAweDAwLCAweDNCLCAweDEzLCAweDZDLCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLAorMHgwNCwgMHhFRCwgMHgwMCwgMHg5NCwgMHgwMywgMHg0MSwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwKKzB4MDEsIDB4RDAsIDB4OEYsIDB4QzAsIDB4M0EsIDB4MDAsIDB4RTUsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDIsCisweDNCLCAweDgwLCAweENELCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDRDLCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3OSwgMHg4OCwgMHhFNSwgMHgyMSwgMHhCNCwgMHg0NywgMHhEMCwKKzB4MUUsIDB4NDQsIDB4N0IsIDB4MTIsIDB4RUMsIDB4MDEsIDB4MzQsIDB4MDcsIDB4OTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDEsCisweEVELCAweDIxLCAweDE0LCAweDA3LCAweDAxLCAweDFFLCAweDRDLCAweDc5LCAweDAyLCAweEVELCAweDAxLCAweEI0LCAweDA3LAorMHhEOCwgMHg1RiwgMHg0MCwgMHg3OCwgMHgwMCwgMHhGNSwgMHgxMSwgMHhCNCwgMHgxNywgMHhEMCwgMHgzQSwgMHg0MCwgMHg3QiwKKzB4MDAsIDB4RUQsIDB4MjEsIDB4ODQsIDB4NDcsIDB4RDAsIDB4MUUsIDB4NDgsIDB4MTIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM2LCAweDBGLCAweEQwLCAweDBDLAorMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMSwgMHgzNCwgMHgwMywgMHgxMCwgMHg5QywgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwKKzB4QTAsIDB4MTUsIDB4MDcsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MTAsIDB4REQsIDB4MDMsIDB4MzQsIDB4MDcsIDB4RDAsCisweDBDLCAweDQwLCAweEYyLCAweDAwLCAweEM1LCAweDAxLCAweDE0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDMzLCAweDgwLAorMHhERCwgMHgwRCwgMHgwNCwgMHgwNywgMHhEMCwgMHgwQywgMHg0MCwgMHg1QSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDgsIDB4NUYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsCisweDE3LCAweDAwLCAweDdGLCAweDBFLCAweEY0LCAweDAxLCAweEIwLCAweEE3LCAweEMyLCAweDE1LCAweDA4LCAweDRGLCAweDA1LAorMHhEQywgMHgxRCwgMHgzNSwgMHgwNSwgMHhDNCwgMHgxNSwgMHgwMCwgMHg3RiwgMHg4NSwgMHhGQywgMHhFRCwgMHhGMCwgMHgwNSwKKzB4QzAsIDB4MUMsIDB4ODEsIDB4NzcsIDB4MDEsIDB4N0MsIDB4MDEsIDB4RjEsIDB4MDYsIDB4QzAsIDB4MTcsIDB4MDgsIDB4N0QsCisweDAyLCAweENELCAweDA1LCAweEYwLCAweDA0LCAweEMwLCAweDVFLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDIsIDB4NzgsIDB4MDQsIDB4NzQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUUsIDB4MDAsIDB4N0QsCisweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDA2LCAweDdDLCAweDAwLCAweEMwLCAweDAwLCAweEMwLAorMHg4NywgMHg4MSwgMHgxRiwgMHgxMCwgMHg2NCwgMHgwOCwgMHhGMiwgMHgyMSwgMHhDMSwgMHg4NywgMHgyMCwgMHgxRiwgMHgwMiwKKzB4N0QsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NDksIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDAyLCAweDMwLCAweDA5LCAweEUwLCAweDI3LCAweDAwLAorMHg4MywgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHgyNiwgMHgwMiwgMHg5RiwgMHgwNCwgMHgwQywgMHgwMiwKKzB4MzQsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDEsIDB4OUMsIDB4MDgsIDB4MEMsIDB4MDIsIDB4MzAsIDB4NTksIDB4QzAsIDB4QTAsCisweDIwLCAweDkzLCAweDAwLCAweDVDLCAweDg2LCAweEYwLCAweDE5LCAweEMwLCAweEE0LCAweDAwLCAweDlGLCAweDAwLCAweDRDLAorMHgwNiwgMHhGMCwgMHgwOSwgMHhEMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTQsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsCisweDAwLCAweDQ1LCAweDAyLCAweEQwLCAweDA5LCAweEQwLCAweEE0LCAweDAwLCAweDlELCAweDAyLCAweDZDLCAweDQyLCAweDUwLAorMHgwOSwgMHg0MCwgMHgyNywgMHgyMSwgMHg5RCwgMHgwMiwgMHg0NSwgMHgwMiwgMHgxNCwgMHgyOSwgMHg1MCwgMHhFNCwgMHg0MCwKKzB4ODEsIDB4MTMsIDB4NDQsIDB4ODYsIDB4RDAsIDB4ODksIDB4NDAsIDB4NjQsIDB4MDgsIDB4OUQsIDB4MDIsIDB4NDQsIDB4MUEsCisweEQwLCAweDE5LCAweDQwLCAweDA0LCAweDgwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLAorMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyMywgMHgwMCwgMHg5MSwgMHgwOCwKKzB4NDQsIDB4MDIsIDB4RDksIDB4MEMsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NjUsIDB4MjIsIDB4OTIsIDB4MDksCisweDQ0LCAweDI3LCAweDAwLCAweERELCAweDAyLCAweDU2LCAweDAyLCAweDUwLCAweDA5LCAweDQ4LCAweDM0LCAweDA0LCAweDkxLAorMHhBNCwgMHg1NCwgMHgyQSwgMHhEMSwgMHgyOSwgMHg1MCwgMHhBNiwgMHgwMCwgMHg5RCwgMHgwQSwgMHg2NCwgMHgyMiwgMHhEMCwKKzB4ODksIDB4NjAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsCisweDAwLCAweDhELCAweDAwLCAweDM0LCAweDEyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDMxLCAweDgxLCAweDA0LCAweDA0LAorMHgxMiwgMHhEOCwgMHg0OCwgMHg0QywgMHgyMCwgMHgwMSwgMHg4RCwgMHgwMSwgMHgyNCwgMHgxMiwgMHg5MCwgMHgwOCwgMHg0MCwKKzB4MjMsIDB4MjEsIDB4OEQsIDB4MjQsIDB4MTYsIDB4MTIsIDB4NTAsIDB4NEMsIDB4MDQsIDB4MjAsIDB4MDEsIDB4OTAsIDB4MjAsCisweDAwLCAweDEyLCAweEQwLCAweDA4LCAweDQwLCAweDIyLCAweDAwLCAweDhELCAweDA4LCAweDI0LCAweDAyLCAweEQwLCAweDA4LAorMHg0MCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MzAsIDB4MDEsIDB4NDAsIDB4ODcsIDB4MEEsIDB4NTMsIDB4MEEsIDB4NEMsIDB4MjgsCisweEYwLCAweEExLCAweEMyLCAweDk0LCAweDAyLCAweDFGLCAweDBBLCAweDZDLCAweDAwLCAweDMwLCAweEEwLCAweEMwLCAweDg3LAorMHgwMiwgMHgxRiwgMHgwQSwgMHg1QywgMHgyOCwgMHg3MCwgMHhBMSwgMHg4MCwgMHgwNCwgMHgxMCwgMHgxMiwgMHgwMCwgMHg1QywKKzB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MUQsIDB4MzYsIDB4NkQsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDc0LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHhGQywgMHgyMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MiwgMHhCRiwgMHgwOCwgMHhGQywgMHgyMiwgMHhGMCwKKzB4OEIsIDB4NDAsIDB4MjcsIDB4MDIsIDB4QkYsIDB4MjAsIDB4RkQsIDB4MjIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDIsCisweEJGLCAweDA4LCAweEU4LCAweDIyLCAweEIwLCAweDg5LCAweEMwLCAweDJGLCAweDAyLCAweEJGLCAweDAwLCAweDdDLCAweDIyLAorMHhGMywgMHgwQiwgMHhDMCwgMHgyNSwgMHgwMCwgMHhCRiwgMHgwNCwgMHhEQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg3NywKKzB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MjAsCisweEZDLCAweDE2LCAweDMwLCAweDA5LCAweEMwLCAweEU3LCAweDIwLCAweEJGLCAweDIxLCAweDZDLCAweDEzLCAweEYwLCAweEQ5LAorMHhDNiwgMHhFRiwgMHgwOCwgMHhCMywgMHgwMiwgMHhDQywgMHgxNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2RiwgMHgwNCwgMHhCMywKKzB4MDcsIDB4NEMsIDB4MUUsIDB4RjAsIDB4NUIsIDB4QzAsIDB4NjgsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MTIsIDB4MzQsCisweDBCLCAweEMyLCAweDJGLCAweDIwLCAweEJGLCAweDAwLCAweEM0LCAweDAyLCAweEI0LCAweDBCLCAweEMwLCAweDc3LCAweDgwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwKKzB4MjgsIDB4MTAsIDB4MDEsIDB4NEMsIDB4NDcsIDB4MDgsIDB4MUMsIDB4MTcsIDB4NDUsIDB4NTEsIDB4RDAsIDB4RjUsIDB4NDAsCisweEM3LCAweDQwLCAweDExLCAweDA1LCAweDU0LCAweDA4LCAweDcwLCAweDUxLCAweDQxLCAweDQ3LCAweDQwLCAweDExLCAweDAzLAorMHg0NSwgMHgwRCwgMHhEMCwgMHg3MSwgMHg1MSwgMHg4NCwgMHg0MCwgMHgxNSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMSwgMHgwMSwKKzB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MjAsIDB4NDQsIDB4MDEsIDB4MTAsIDB4MDEsIDB4NDAsIDB4NjIsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEwLCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAzLAorMHgxMCwgMHgwOCwgMHg0MCwgMHhBMywgMHgwMSwgMHg4RCwgMHgwMiwgMHgwNCwgMHhCMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHhBMywKKzB4MDEsIDB4ODEsIDB4MDAsIDB4MjUsIDB4MEUsIDB4QzEsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDQsIDB4ODEsIDB4MDcsIDB4MjQsCisweDMyLCAweDUwLCAweDg4LCAweDQwLCAweEEyLCAweDIwLCAweDgxLCAweDQwLCAweDM0LCAweDIyLCAweDUwLCAweDA4LCAweDQwLAorMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHg0NiwgMHgwMywgMHhEMSwgMHgwOCwgMHg0MCwgMHg0QiwgMHg4MCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MjIsIDB4MTAsCisweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDE0LCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDM3LCAweDAwLAorMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHg4MCwgMHg5MSwgMHg0MCwgMHg2NCwgMHgxMiwKKzB4RDgsIDB4MDksIDB4NjAsIDB4MjYsIDB4MDEsIDB4OTUsIDB4MDIsIDB4NjQsIDB4MDIsIDB4NTgsIDB4MEQsIDB4NDAsIDB4MjcsCisweDAwLCAweERELCAweDA0LCAweDQ0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDYyLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwQSwgMHgzNCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDgsIDB4OUYsIDB4NDIsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4MjcsIDB4MjAsIDB4OTEsCisweDA4LCAweDZELCAweDBBLCAweEYwLCAweDA5LCAweEMwLCAweDI1LCAweDIwLCAweDkzLCAweDAwLCAweDZDLCAweDA2LCAweDcwLAorMHgwOSwgMHg0MiwgMHhBNiwgMHhBMSwgMHg5MywgMHgyMiwgMHg3NCwgMHgwMiwgMHg3OCwgMHgwOSwgMHhDMSwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDYsIDB4NEQsIDB4MDIsIDB4RjQsIDB4MDksIDB4QzAsIDB4MTcsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDI1LCAweDA4LCAweDlGLCAweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHg4MCwgMHg3QywgMHgyMiwgMHhGMCwgMHg5OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgxMSwKKzB4NUMsIDB4MTYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OEYsIDB4MTMsIDB4NUMsIDB4MDYsIDB4RjAsIDB4MDksCisweEMwLCAweDY1LCAweDgwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEIwLCAweDA5LCAweEMxLCAweDI3LCAweDAwLCAweDlGLAorMHgwMSwgMHg3RSwgMHgyMiwgMHhCNCwgMHgwOSwgMHhDMCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjgsIDB4MDEsIDB4QzAsIDB4MDcsCisweDgwLCAweDEzLCAweDA2LCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEMwLCAweDQ3LCAweDgwLCAweDFGLCAweDAwLCAweDRDLAorMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHg0NywgMHgxMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHgzNCwgMHgxMSwgMHhDMCwKKzB4ODcsIDB4MDQsIDB4MTMsIDB4MjYsIDB4MkMsIDB4MTAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDQsCisweDdDLCAweDQ4LCAweDMwLCAweDgxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHgyMCwgMHgxNCwgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNywgMHhDMCwKKzB4NzAsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4MDAsIDB4NUYsIDB4ODAsIDB4NkYsIDB4NDYsIDB4QzUsIDB4MDUsCisweDcwLCAweDA1LCAweDQwLCAweDFGLCAweDAwLCAweDdELCAweDgxLCAweDc0LCAweDAxLCAweDMwLCAweDQ3LCAweDQwLCAweDFCLAorMHgwMCwgMHg3MSwgMHgwMywgMHhDQywgMHgwOSwgMHg2MCwgMHgzNywgMHg0MCwgMHgxQywgMHhBMCwgMHg3RCwgMHgwMiwgMHhCNCwKKzB4MDksIDB4MTAsIDB4MDUsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDBDLCAweDQwLCAweDMxLCAweDEwLCAweEQxLAorMHgwMywgMHgzNCwgMHgwMywgMHhEMiwgMHgwQywgMHg0OCwgMHg3NywgMHgwQSwgMHhDRCwgMHgwMywgMHgwNCwgMHgwNywgMHhEMywKKzB4MEMsIDB4NDQsIDB4MzcsIDB4MDAsIDB4Q0QsIDB4MDgsIDB4MzYsIDB4MDMsIDB4MTAsIDB4MUQsIDB4NDAsIDB4QjEsIDB4NjAsCisweDAxLCAweDAyLCAweDA0LCAweDIzLCAweEQwLCAweDNDLCAweDQwLCAweDgxLCAweDA0LCAweERELCAweDgwLCAweDM0LCAweDBCLAorMHgwNCwgMHgxQywgMHg2MCwgMHg0MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwKKzB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTEsIDB4MDIsCisweEI2LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEU1LCAweDgwLCAweDg1LCAweDA4LCAweDUwLCAweDBFLAorMHg2MCwgMHg5QiwgMHgwMCwgMHg2RCwgMHg0MCwgMHgzNiwgMHgwNywgMHgxOCwgMHgwRSwgMHg0MCwgMHgzQiwgMHg0MCwgMHgyMSwKKzB4MTAsIDB4ODYsIDB4MDMsIDB4NTAsIDB4MTcsIDB4NDksIDB4MDgsIDB4MDAsIDB4QUQsIDB4MDIsIDB4QjYsIDB4MDMsIDB4MTAsCisweDBFLCAweDYwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDc4LAorMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHgwNiwgMHhEMCwgMHgxRSwgMHhDMiwgMHg3MSwgMHgwMiwgMHg2MSwgMHgwMSwgMHhCQywKKzB4M0YsIDB4RjAsIDB4RkUsIDB4QzAsIDB4NUIsIDB4MDAsIDB4RUQsIDB4MDEsIDB4OEQsIDB4MDUsIDB4NzgsIDB4M0UsIDB4NDEsCisweDdCLCAweDAwLCAweEVELCAweDAxLCAweEJDLCAweDA3LCAweDMwLCAweDFFLCAweEMyLCAweDY5LCAweDAwLCAweDYzLCAweEEwLAorMHg4QywgMHgwNywgMHhEMSwgMHgxMiwgMHhDMCwgMHg0OSwgMHgwMCwgMHhFRCwgMHg4MSwgMHhCQywgMHgwNiwgMHgzOCwgMHgxRSwKKzB4QzAsIDB4NTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjAsIDB4MzUsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweEI3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLAorMHhDMCwgMHgwRCwgMHg0MCwgMHgxNywgMHgwMCwgMHhDRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMSwgMHgyRCwgMHhDMCwgMHgzNywKKzB4MjAsIDB4NUYsIDB4ODAsIDB4N0MsIDB4QjMsIDB4QzAsIDB4MEQsIDB4QzgsIDB4MjcsIDB4MDAsIDB4NEYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDA0LCAweEMwLCAweDE3LCAweDAwLCAweDlELCAweDAwLCAweDNDLCAweDAwLCAweEYxLCAweDBELCAweEM4LAorMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg3RiwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4RkMsIDB4MTMsIDB4RjgsIDB4OEYsIDB4QzAsIDB4N0YsIDB4MDQsIDB4RjcsIDB4MDksIDB4Q0MsIDB4ODcsIDB4RjAsCisweDFGLCAweEMwLCAweDdDLCAweDAwLCAweEVCLCAweDAxLCAweEVDLCAweDA3LCAweEY5LCAweDlGLCAweEMwLCAweDdGLCAweDAwLAorMHhGRiwgMHgwOSwgMHhDQywgMHgwRiwgMHhCMSwgMHgxRiwgMHhDMCwgMHgzQiwgMHgwMCwgMHgzMywgMHgwMSwgMHhFRSwgMHgyNywKKzB4MzAsIDB4MTcsIDB4QzAsIDB4NEYsIDB4MDAsIDB4N0YsIDB4ODEsIDB4Q0MsIDB4MDUsIDB4QzAsIDB4OUEsIDB4QzAsIDB4MUEsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDM5LCAweDAwLCAweEVELCAweDA4LAorMHhCNCwgMHgyMywgMHhEMCwgMHgwRSwgMHg0OCwgMHgzQiwgMHgwMSwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMSwgMHgwRSwKKzB4NEUsIDB4MzgsIDB4NDAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4NzgsIDB4MEUsIDB4NDAsIDB4MUIsIDB4MDgsIDB4RkQsCisweDAwLCAweDg0LCAweDEzLCAweDEwLCAweDBFLCAweDQyLCAweDNCLCAweDAzLCAweEExLCAweDgwLCAweEJDLCAweDAzLCAweDE0LAorMHgwNiwgMHg0MCwgMHgwQiwgMHgwOCwgMHgyRCwgMHg5OCwgMHg4NCwgMHgyMCwgMHg5MCwgMHgwQSwgMHg0MCwgMHg1NCwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsCisweDBCLCAweEQwLCAweDhFLCAweDQwLCAweDNCLCAweDI4LCAweEVELCAweDAwLCAweEE0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLAorMHgxQSwgMHgwMCwgMHhFMSwgMHgwMCwgMHg4NCwgMHg0MSwgMHhEMCwgMHgwRSwgMHg0NCwgMHgxQiwgMHgwMCwgMHhFRCwgMHg5MCwKKzB4QTQsIDB4QzMsIDB4MTgsIDB4ODYsIDB4NDAsIDB4QUIsIDB4MEEsIDB4NjEsIDB4MDgsIDB4QTQsIDB4MDEsIDB4NTQsIDB4MDYsCisweDQwLCAweDBCLCAweDAwLCAweDZELCAweDAwLCAweDg0LCAweDQwLCAweEQwLCAweDBFLCAweDQwLCAweDIyLCAweDAxLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywKKzB4RDAsIDB4MEMsIDB4MDAsIDB4MzMsIDB4MTAsIDB4OUQsIDB4MEIsIDB4MjQsIDB4MkYsIDB4RDAsIDB4MUMsIDB4NUEsIDB4MDIsCisweDAwLCAweEMxLCAweDQwLCAweDA1LCAweDAxLCAweDUwLCAweDBDLCAweDQwLCAweDA3LCAweDAwLCAweDhELCAweDAyLCAweDI0LAorMHgwNywgMHgxQSwgMHgwOCwgMHg0MCwgMHg2MywgMHhDMCwgMHg0MSwgMHgwMCwgMHgxNCwgMHgwMSwgMHg1MCwgMHgyNCwgMHg0MCwKKzB4MTMsIDB4MjAsIDB4MEQsIDB4MDMsIDB4MDUsIDB4MEMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MDgsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDNDLCAweDQyLCAweEQwLAorMHgwRCwgMHhDMCwgMHgzRiwgMHgwMCwgMHg5RiwgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgxRiwgMHhDMCwgMHgyNiwgMHgwMCwKKzB4QzEsIDB4MDAsIDB4NEMsIDB4MjMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4RUMsIDB4MEYsCisweDE0LCAweDAxLCAweEUyLCAweDc3LCAweDA0LCAweDEzLCAweDAyLCAweDY0LCAweDAzLCAweDUwLCAweEE1LCAweDQwLCAweDA3LAorMHgwMCwgMHhERiwgMHgwMywgMHg0QywgMHgwRiwgMHhEMCwgMHgwRCwgMHhDMiwgMHg1NiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjEsIDB4MEQsCisweDQwLCAweDM3LCAweDIwLCAweDlGLCAweDEwLCAweDVDLCAweDAzLCAweEYwLCAweENELCAweEMwLCAweEExLCAweDEwLCAweDk3LAorMHgwMSwgMHg3RCwgMHgwMCwgMHg3MCwgMHgwRCwgMHhDMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwNCwgMHg1QywgMHg0MywgMHg3MiwKKzB4MjEsIDB4RTAsIDB4QTcsIDB4ODAsIDB4MUYsIDB4MjgsIDB4NzQsIDB4MDMsIDB4QTAsIDB4MDUsIDB4QzAsIDB4MDcsIDB4MDAsCisweDlELCAweDA0LCAweDdDLCAweDBCLCAweEIwLCAweDBELCAweEMwLCAweEI3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgyMCwgMHhGQywgMHgwMiwgMHhCMCwgMHgwRiwgMHhFMCwKKzB4M0IsIDB4QTAsIDB4MUIsIDB4MDAsIDB4Q0UsIDB4NDMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MjQsIDB4MDAsIDB4RkIsIDB4MDAsCisweEFDLCAweDAxLCAweEIwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweEEzLCAweDAwLCAweENDLCAweDAzLCAweEYwLCAweDBBLAorMHhDMCwgMHgyOCwgMHgxMCwgMHg3MywgMHg1OSwgMHg4QywgMHgwMywgMHgzMiwgMHg0NywgMHhDMCwgMHgwQywgMHgwMCwgMHhFRCwKKzB4MDIsIDB4Q0MsIDB4NDcsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDIwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweDkwLCAweDBELCAweDQwLCAweDM3LAorMHg5OCwgMHgxMSwgMHgwMSwgMHg0NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MiwgMHg2NCwgMHgwOCwgMHhEMSwgMHgwMSwgMHg2QywKKzB4MDQsIDB4QjAsIDB4MEQsIDB4QzIsIDB4RTcsIDB4MDQsIDB4MTEsIDB4MDEsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MzksIDB4NDQsCisweDY0LCAweDAxLCAweDQxLCAweDAxLCAweDZDLCAweDA3LCAweDEwLCAweDI0LCAweDQwLCAweDg0LCAweDAyLCAweDFELCAweDAwLAorMHgwNSwgMHgwMSwgMHgxMCwgMHgwRCwgMHg0RSwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4QTAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4OTAsIDB4MEQsIDB4NDgsIDB4MzcsIDB4MjAsCisweDExLCAweDAxLCAweDA0LCAweDAzLCAweDEwLCAweDBELCAweDYwLCAweDQ0LCAweDAwLCAweEQxLCAweDExLCAweDY0LCAweDA3LAorMHg5MiwgMHgwRCwgMHg0MiwgMHg2NywgMHg4MCwgMHgxMSwgMHgwMSwgMHg2NCwgMHg4MywgMHg1MCwgMHgxMSwgMHg0MSwgMHg1NiwKKzB4MDAsIDB4MTksIDB4MDAsIDB4NDYsIDB4MDcsIDB4MTAsIDB4MDUsIDB4NDAsIDB4MDQsIDB4MDQsIDB4NUQsIDB4MDAsIDB4NDQsCisweDFCLCAweDE0LCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHg4MSwKKzB4MDEsIDB4MDQsIDB4MDMsIDB4MTQsIDB4MEMsIDB4NjAsIDB4MjAsIDB4MjAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4OTIsCisweDBDLCAweDYwLCAweDAxLCAweDkwLCAweDAxLCAweDAxLCAweDI0LCAweDAzLCAweEQwLCAweDAwLCAweDQyLCAweDIyLCAweDAwLAorMHhDRCwgMHgwMCwgMHgyNCwgMHgwMywgMHgxNCwgMHgwNCwgMHg0MCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMiwKKzB4MTAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDM2LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDBELCAweDQwLCAweDNGLCAweDAwLCAweDExLCAweDIwLAorMHhDNCwgMHgwMywgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNCwgMHgyMCwgMHhEQiwgMHgwMCwgMHg2RCwgMHgwMSwgMHhCMSwgMHgwRiwKKzB4NDAsIDB4MjcsIDB4MTgsIDB4OTMsIDB4MDAsIDB4QUMsIDB4MDMsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MjYsIDB4MDAsIDB4NUIsCisweDAwLCAweDRDLCAweDAxLCAweDMwLCAweDA1LCAweEUwLCAweDA0LCAweDAwLCAweDBGLCAweDAwLCAweDRDLCAweDAzLCAweDMwLAorMHgwRCwgMHhDMiwgMHgwNywgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgzRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzgsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MTAsIDB4QjcsIDB4MDAsIDB4RkMsCisweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDEwLCAweDdGLCAweDAwLCAweEZDLCAweDAwLCAweDcwLCAweDBGLCAweEMwLAorMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRCwgMHgwMCwgMHg3MywgMHgwMCwKKzB4QkMsIDB4MDAsIDB4RjAsIDB4MDcsIDB4MDAsIDB4MEYsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsCisweEMwLCAweDE3LCAweDYxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdCLCAweDAwLAorMHgzMywgMHgwMCwgMHhDQywgMHgwMywgMHgzMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhBMywgMHgwMCwgMHg4QywgMHgwNiwKKzB4QjAsIDB4MDMsIDB4QzAsIDB4NjgsIDB4MDIsIDB4M0YsIDB4MDEsIDB4OEMsIDB4MDQsIDB4NzAsIDB4MUIsIDB4QzAsIDB4M0YsCisweDAwLCAweDMzLCAweDBDLCAweENDLCAweDA0LCAweEIwLCAweDJCLCAweDEwLCAweDRDLCAweDAwLCAweEYzLCAweDAxLCAweENDLAorMHgwMiwgMHgzMCwgMHgwQiwgMHhEMCwgMHg0QywgMHgwMCwgMHhCMywgMHgwMCwgMHhDQywgMHgwNywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MTQsIDB4MTEsCisweDAwLCAweEM0LCAweDAzLCAweDExLCAweDQ5LCAweDQwLCAweDZGLCAweDAwLCAweDkxLCAweDBCLCAweDQ0LCAweDg0LCAweDUwLAorMHgwMSwgMHg0MCwgMHgyNCwgMHgyMSwgMHgxRCwgMHgyMSwgMHg0NCwgMHg4NCwgMHgxMCwgMHgxOSwgMHg0MCwgMHgzRiwgMHgwNCwKKzB4MTEsIDB4MDIsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MkYsIDB4NDIsIDB4MjQsIDB4MTAsIDB4RDEsIDB4MjAsIDB4NDQsIDB4MDIsCisweDEwLCAweDBDLCAweDQxLCAweDQ0LCAweDAwLCAweDhCLCAweDAwLCAweDU0LCAweDA3LCAweEQwLCAweDFELCAweDQwLCAweDBDLAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzNywgMHgyMSwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4MDMsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjMsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDAsCisweDQwLCAweDIwLCAweDEwLCAweDFELCAweDAwLCAweDA1LCAweDAwLCAweDUyLCAweDA4LCAweDQyLCAweDMzLCAweDgyLCAweDgxLAorMHgwMiwgMHgwNCwgMHgwMCwgMHgxMiwgMHg2OCwgMHg2MCwgMHgwMCwgMHgwMCwgMHhEMSwgMHg0MCwgMHgwNCwgMHgwNiwgMHg1MCwKKzB4NTgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NEUsIDB4ODAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDA4LCAweDUxLCAweDAxLCAweDQ0LAorMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwgMHg2NywgMHg0MCwgMHhEMSwgMHgwMCwgMHg0NSwgMHgwMCwgMHg1MCwgMHgxMSwgMHg1MCwKKzB4MzQsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NDQsIDB4NDQsIDB4MTEsIDB4MTksIDB4NDEsIDB4MzcsIDB4MDAsIDB4OTEsIDB4MDAsCisweDQwLCAweDA0LCAweDE4LCAweDBDLCAweDYwLCAweDQwLCAweDQwLCAweEQxLCAweDA0LCAweDQ0LCAweDA2LCAweDUwLCAweDQxLAorMHg0MCwgMHg0NCwgMHgyMCwgMHhEOSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgwRSwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4NzMsIDB4MDAsIDB4MTMsIDB4MTMsIDB4NEQsIDB4MDMsCisweDM0LCAweDAxLCAweEMwLCAweDY3LCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDM5LCAweEM4LCAweDI0LAorMHgxMCwgMHgwRiwgMHgwMywgMHg0QywgMHgwQywgMHg3MCwgMHgxOSwgMHhDOCwgMHgzNywgMHg0MCwgMHgxMywgMHgwNCwgMHg0QywKKzB4MTgsIDB4MzQsIDB4MDksIDB4QzAsIDB4RTQsIDB4MDAsIDB4QzMsIDB4MDAsIDB4NEQsIDB4MDYsIDB4NzAsIDB4MUQsIDB4QzAsCisweEM0LCAweDAwLCAweDkzLCAweDAxLCAweDZDLCAweDAzLCAweEYwLCAweDRELCAweEQwLCAweDAyLCAweDIwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHhGRCwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMSwKKzB4OTMsIDB4QzAsIDB4MzcsIDB4MDAsIDB4QUYsIDB4MDIsIDB4RkMsIDB4MDIsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MkYsIDB4MDAsCisweDNGLCAweDEwLCAweEZDLCAweDgwLCAweEYwLCAweDAzLCAweEM4LCAweDNGLCAweDIwLCAweDNGLCAweDIzLCAweEZDLCAweDAwLAorMHg3MCwgMHg5RCwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhCNCwgMHgxRiwgMHhDMCwgMHgwRiwKKzB4MDAsIDB4QUYsIDB4MDksIDB4REMsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MUQsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDI1LCAweDAwLCAweDUzLCAweDAwLCAweDZELCAweDAzLCAweDMyLCAweDA5LAorMHhEMCwgMHgyNCwgMHgwMCwgMHhEMywgMHg4MCwgMHg0QywgMHgwMywgMHgzNCwgMHg2RCwgMHhDMCwgMHgyNCwgMHgwMCwgMHgxMywKKzB4NDIsIDB4N0MsIDB4MTAsIDB4MzAsIDB4MjksIDB4RDEsIDB4MzAsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NEMsIDB4MTgsIDB4MzAsCisweDA5LCAweEMwLCAweDg0LCAweDAwLCAweEQzLCAweDAwLCAweDNDLCAweDAyLCAweEIwLCAweDExLCAweEMwLCAweDA0LCAweDAwLAorMHhEQiwgMHgwMCwgMHg0RCwgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHhBOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4QzQsIDB4NDMsIDB4MTAsIDB4MDksIDB4NDAsCisweDEwLCAweDAwLCAweEQxLCAweDAwLCAweDA0LCAweDQ2LCAweDEwLCAweDJELCAweDUwLCAweDM0LCAweDAwLCAweDEzLCAweDgyLAorMHgzNCwgMHgwOCwgMHgxMCwgMHg3OSwgMHg0MCwgMHg3QywgMHgwNCwgMHhCNSwgMHgyMCwgMHgyQywgMHgwQywgMHhCMiwgMHhBRCwKKzB4NDAsIDB4QzQsIDB4MDYsIDB4RDEsIDB4MDEsIDB4NzQsIDB4MkEsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NDAsIDB4MDAsIDB4REIsCisweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDAxLCAweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMywgMHgyMCwgMHgzMCwgMHg0MCwgMHg4MSwgMHgyMSwgMHgwNCwgMHgwMywgMHgxNCwgMHgwOCwgMHgwOCwgMHgyMCwKKzB4ODksIDB4ODEsIDB4MDAsIDB4MDYsIDB4MDYsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDgsIDB4MDMsIDB4MzQsCisweDBDLCAweDE4LCAweDA4LCAweDQwLCAweDcwLCAweDAwLCAweDA5LCAweDAwLCAweDE0LCAweDJDLCAweDk0LCAweDhDLCAweDQwLAorMHgwMiwgMHgwMCwgMHhDMSwgMHg0MSwgMHgzNCwgMHgwMiwgMHg5MCwgMHgwQywgMHg0MCwgMHg1MiwgMHg0MCwgMHhDOSwgMHgwMCwKKzB4MDUsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MUMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDAwLCAweDdDLCAweDQwLCAweEYxLCAweDE5LCAweDA0LCAweDA3LCAweDEwLCAweDE4LCAweDQwLCAweDY4LCAweDAwLAorMHhCMSwgMHg4MSwgMHhDNiwgMHgwNCwgMHgxMCwgMHg5NiwgMHg0MCwgMHg2QywgMHg0MCwgMHgyMSwgMHgyMSwgMHhCNCwgMHg0NCwKKzB4MTgsIDB4MTYsIDB4NjIsIDB4NzgsIDB4MTAsIDB4MEQsIDB4MDEsIDB4QjQsIDB4MDQsIDB4OTQsIDB4MUUsIDB4NDAsIDB4NkEsCisweDAwLCAweEUxLCAweDUwLCAweDM2LCAweDA2LCAweDEwLCAweDNFLCAweDUwLCAweDRFLCAweDA0LCAweEU5LCAweDAxLCAweDg2LAorMHgwNywgMHhEMCwgMHgxNiwgMHg2MCwgMHgzQywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MTgsIDB4MzAsIDB4MDAsIDB4ODMsIDB4MDgsIDB4MEQsIDB4MDMsIDB4MTAsIDB4MDgsIDB4QzAsIDB4MjAsIDB4NDAsIDB4QzMsCisweDAwLCAweDBELCAweDIyLCAweDMwLCAweDA0LCAweDQ4LCAweDIwLCAweEIyLCAweDA5LCAweDUyLCAweDNDLCAweDIwLCAweDM0LAorMHg4OCwgMHhDMCwgMHgzMCwgMHgwMCwgMHgwQiwgMHgwMCwgMHgxQywgMHgwMCwgMHg5MCwgMHgwQywgMHhDMCwgMHg4NiwgMHgwMCwKKzB4QzMsIDB4MDAsIDB4M0MsIDB4MDIsIDB4QjAsIDB4MDAsIDB4QzAsIDB4OTIsIDB4MTAsIDB4Q0IsIDB4MDQsIDB4MEMsIDB4MDMsCisweEYwLCAweDBDLCAweEQwLCAweDQ4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LAorMHgzRCwgMHgwMCwgMHhFRiwgMHg2OCwgMHhGRSwgMHgwQiwgMHhGMCwgMHgwRiwgMHhDMCwgMHhCRiwgMHgwMCwgMHhGRiwgMHgwMCwKKzB4RkMsIDB4MDAsIDB4RjAsIDB4MDcsIDB4QzAsIDB4M0YsIDB4MjAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjAsIDB4RjAsIDB4OEUsCisweEMwLCAweDNCLCAweDAwLCAweEI3LCAweDgwLCAweEFELCAweDIyLCAweEYwLCAweDhGLCAweEMwLCAweDJELCAweDQwLCAweEZGLAorMHgwNCwgMHhGQywgMHgwMiwgMHhFMCwgMHgwQiwgMHhFMCwgMHgwOSwgMHg0MCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4MDcsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsCisweDAwLCAweEQ3LCAweDYwLCAweDRDLCAweDBCLCAweDM0LCAweDAxLCAweEMwLCAweDZGLCAweDAwLCAweDk3LCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwOSwgMHhEMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMSwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MzcsIDB4ODEsIDB4MTIsIDB4MDgsIDB4MEMsIDB4MDAsIDB4MzEsIDB4NEQsIDB4QzAsIDB4MjQsIDB4MDAsIDB4RDMsIDB4MDAsCisweDRDLCAweDAyLCAweEIwLCAweDFELCAweEQwLCAweDU0LCAweDAwLCAweEQzLCAweEEwLCAweDRDLCAweDgzLCAweEYwLCAweDBELAorMHhDMCwgMHg1NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgzRCwgMHgwMCwKKzB4RTEsIDB4MDAsIDB4MDYsIDB4MTMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDIsCisweEQwLCAweDBFLCAweDQyLCAweDI4LCAweDIwLCAweEE4LCAweDAwLCAweDg0LCAweDAwLCAweEQwLCAweDBFLCAweDQwLCAweDNGLAorMHgwNSwgMHgzMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHhENCwgMHgwRiwgMHg1MSwgMHgyQywgMHgwMCwgMHhFMSwgMHgwMCwgMHgwNCwKKzB4MDIsIDB4MTQsIDB4MEMsIDB4NDAsIDB4MDgsIDB4NDAsIDB4RjEsIDB4MDAsIDB4OTQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDQsCisweDRGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDAwLCAweEM1LAorMHgwMSwgMHg4NCwgMHgyNywgMHgwMCwgMHgxRSwgMHg0MCwgMHg2MywgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHg0NywgMHhEMCwKKzB4M0MsIDB4NDAsIDB4NjgsIDB4MDgsIDB4QUMsIDB4MTEsIDB4ODQsIDB4MDUsIDB4RDAsIDB4MUEsIDB4NDAsIDB4N0IsIDB4NDMsCisweDI5LCAweDA1LCAweEE1LCAweDA0LCAweDk4LCAweDFFLCAweDQwLCAweDY4LCAweDgwLCAweEUxLCAweDAxLCAweDg0LCAweDA3LAorMHgxMCwgMHgxMiwgMHg2MCwgMHg1QywgMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHgwNywKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4MzMsIDB4MTAsIDB4RDEsIDB4MDAsCisweDA0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDUzLCAweDIyLCAweEM5LCAweDAwLCAweDM0LCAweDBBLCAweEQwLCAweDE1LAorMHg0MCwgMHgzMCwgMHgwMCwgMHhDOSwgMHg4MiwgMHgwNCwgMHg2QiwgMHhEMCwgMHgyQywgMHg0MCwgMHgzMywgMHgwMCwgMHhEOSwKKzB4MDEsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NTAsIDB4RjAsIDB4ODEsIDB4OTEsIDB4MDEsIDB4MDQsIDB4MDcsIDB4MTAsCisweDA4LCAweDYwLCAweDIwLCAweDAwLCAweEMxLCAweDAwLCAweDE0LCAweDAzLCAweEQwLCAweDk4LCAweDQwLCAweDRCLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyMCwgMHgxNSwgMHgwMCwgMHg3NywgMHg4QSwgMHg0RCwKKzB4ODEsIDB4MzAsIDB4NzYsIDB4QzAsIDB4OUYsIDB4MDAsIDB4NUYsIDB4MDEsIDB4RkMsIDB4MEQsIDB4RjEsIDB4QjcsIDB4QzAsCisweDE0LCAweDIwLCAweDdGLCAweDRCLCAweENDLCAweDBELCAweEYwLCAweDI2LCAweEMwLCAweDE3LCAweDEwLCAweDdCLCAweDAxLAorMHhBQywgMHgwNSwgMHgzNCwgMHgwNSwgMHhDMiwgMHg5QywgMHgwNCwgMHg1MywgMHgwMSwgMHhDQywgMHgwOSwgMHgzMCwgMHgwNywKKzB4QzEsIDB4MUMsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NEQsIDB4MDEsIDB4RjIsIDB4MjcsIDB4QzIsIDB4NUYsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDA1LCAweDEwLCAweDFGLCAweDAwLCAweDNDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMSwgMHgwNywgMHgwMCwgMHgxNywgMHgwOCwgMHg3QywgMHgxMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUIsIDB4MDIsIDB4N0QsIDB4MDgsIDB4RjAsIDB4NDEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MTcsIDB4MDgsIDB4NUMsCisweDI4LCAweDcwLCAweDIwLCAweEQwLCAweDA3LCAweDQwLCAweDFGLCAweDA4LCAweDdELCAweDYwLCAweDcwLCAweDExLCAweEMwLAorMHg0NywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMCwgMHhDMSwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MjYsIDB4MzAsCisweDA5LCAweEMwLCAweDI0LCAweDA0LCAweDlGLCAweDAwLCAweDdDLCAweDE2LCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLAorMHg5RiwgMHgwNCwgMHg3QywgMHg4MiwgMHhCMCwgMHgwOSwgMHhDNCwgMHgyNiwgMHg0MCwgMHg5MywgMHgwNCwgMHg0QywgMHgxMiwKKzB4MzQsIDB4MTksIDB4QzAsIDB4MjQsIDB4MDEsIDB4OTMsIDB4MDgsIDB4MEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDAxLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyMiwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMSwgMHgwOSwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4QTksIDB4NDEsIDB4MjQsIDB4MDAsIDB4OUQsCisweDAwLCAweDM0LCAweDBBLCAweDEwLCAweDY5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDAxLCAweDQ0LCAweDE2LCAweDEwLAorMHgxOSwgMHhEMCwgMHgyMiwgMHgwMCwgMHg5MSwgMHgwMiwgMHg0NSwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgyMCwKKzB4OUQsIDB4MDksIDB4NkMsIDB4MDIsIDB4RDAsIDB4MDksIDB4NTAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDQwLCAweDkxLCAweDIwLCAweDQ0LCAweDAyLCAweDExLCAweDA5LCAweDQwLAorMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg1MCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NzQsIDB4MDYsIDB4OTAsIDB4MDksIDB4NDAsIDB4MjIsIDB4MDIsIDB4OTEsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MTQsIDB4NDksCisweDQ4LCAweDI0LCAweDAwLCAweDkxLCAweDAyLCAweDY0LCAweDIyLCAweDE4LCAweDE5LCAweDQwLCAweDI3LCAweDAwLCAweDhELAorMHgwMCwgMHg2NSwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjAsIDB4MjQsIDB4MDAsIDB4ODEsIDB4MDQsIDB4MjQsIDB4MTIsIDB4MTAsIDB4NDksIDB4NDAsIDB4NjEsCisweDkxLCAweDhELCAweDA0LCAweDM0LCAweDAyLCAweEMwLCAweDQ4LCAweDQwLCAweDIxLCAweDAwLCAweDhELCAweDIwLCAweDc0LAorMHgwMiwgMHgwMCwgMHgwOCwgMHg0MiwgMHgyMCwgMHg4OSwgMHg4MSwgMHg0NCwgMHgyNiwgMHgwMiwgMHgxOCwgMHg0OCwgMHg0MCwKKzB4MjYsIDB4NDAsIDB4ODEsIDB4MDAsIDB4MjQsIDB4MTIsIDB4MTQsIDB4NTgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDQsCisweDI0LCAweDAyLCAweEQwLCAweDQ4LCAweDQwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxRCwgMHhCOCwgMHg4NiwgMHgwMiwgMHgxMywgMHgwQSwgMHg0QywgMHgyOCwgMHgzNCwgMHhBMSwgMHhEMCwgMHgwNSwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4QTEsIDB4QzAsIDB4ODUsIDB4MDIsIDB4NUYsIDB4MDAsIDB4NzQsIDB4MDEsCisweEIxLCAweDAxLCAweEM4LCAweDk2LCAweDQyLCAweDEzLCAweDBBLCAweDZELCAweDAwLCAweDMwLCAweEE1LCAweDQwLCAweDg0LAorMHgwQSwgMHgwMywgMHg0QSwgMHg2QywgMHgyOCwgMHgzMCwgMHhBMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwQSwgMHg2RCwKKzB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsCisweEI4LCAweDJGLCAweDEwLCAweEJGLCAweDA4LCAweDVELCAweDIyLCAweEYwLCAweDhCLCAweEMwLCAweDNFLCAweDAyLCAweEJGLAorMHgwOCwgMHhGNCwgMHgwMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyRSwgMHgwMCwgMHhBRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMiwKKzB4MEIsIDB4MDAsIDB4MjcsIDB4MDIsIDB4QkYsIDB4ODgsIDB4REMsIDB4ODIsIDB4RjIsIDB4OEIsIDB4QzAsIDB4M0YsIDB4MDAsCisweEJGLCAweDAwLCAweERDLCAweDIyLCAweEQwLCAweDhCLCAweEMwLCAweDJCLCAweDAwLCAweEJGLCAweDA4LCAweDdDLCAweDAyLAorMHhGMCwgMHg4QiwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBOCwKKzB4M0IsIDB4MDAsIDB4RjIsIDB4MTQsIDB4Q0MsIDB4MzIsIDB4MzQsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4OTMsIDB4MDAsCisweENDLCAweDAyLCAweEYwLCAweDRCLCAweEMxLCAweDI0LCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDAyLCAweDMwLCAweDBCLAorMHhDMCwgMHhFRCwgMHgwMCwgMHhCMywgMHgwMywgMHhDQywgMHgwMiwgMHgzMCwgMHgzQiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCRiwKKzB4ODgsIDB4RkMsIDB4MTIsIDB4MzAsIDB4NEEsIDB4QzEsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDY0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA1LAorMHgwNSwgMHgwMSwgMHgwNCwgMHgwNCwgMHgzMCwgMHgxMSwgMHgyMSwgMHg0MywgMHgwNCwgMHgwOCwgMHgxMSwgMHgwOCwgMHg0NCwKKzB4MDAsIDB4RDAsIDB4NDEsIDB4NTAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsCisweEM0LCAweDA4LCAweDQxLCAweDQzLCAweDQ0LCAweDAxLCAweDEwLCAweDMwLCAweDQwLCAweDAwLCAweDA0LCAweDFELCAweDAwLAorMHg1QywgMHg1MSwgMHgxMCwgMHg0MSwgMHg0MiwgMHgwNCwgMHgwOCwgMHgwQiwgMHgxMiwgMHg1NCwgMHgwMCwgMHhEMCwgMHg4MSwKKzB4NDAsIDB4NzAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjAsIDB4MjUsIDB4MDEsCisweDgxLCAweDk0LCAweDA1LCAweDkyLCAweDkwLCAweENDLCAweDQwLCAweDIwLCAweDAyLCAweDkxLCAweDIwLCAweDA0LCAweDAyLAorMHhEMCwgMHg0OCwgMHg0MSwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMSwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHhBMSwKKzB4MDksIDB4ODEsIDB4MDYsIDB4MDQsIDB4ODIsIDB4MTAsIDB4NjgsIDB4NDgsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsCisweDMyLCAweDEwLCAweDQ4LCAweDUxLCAweDIwLCAweDAwLCAweDg5LCAweDBDLCAweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLAorMHg0OCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHg0QSwgMHg5MSwKKzB4MTAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MzksIDB4NDAsIDB4MjQsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDQwLCAweDc0LCAweDEyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLAorMHg5MSwgMHgwMCwgMHg0NSwgMHgxMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHgxNCwgMHgwMiwKKzB4MTAsIDB4NjksIDB4NDAsIDB4MjQsIDB4MjAsIDB4ODksIDB4MDAsIDB4NTQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjAsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDIxLCAweDAwLCAweDkzLCAweDAwLAorMHg0QywgMHgwMiwgMHhCMCwgMHgyOSwgMHhEMCwgMHhBNCwgMHgwMiwgMHg4MywgMHgwMCwgMHg0RCwgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzksIDB4MjQsIDB4NDAsIDB4OTMsIDB4MDMsIDB4N0MsIDB4NEUsIDB4MzQsIDB4NDgsIDB4QzAsIDB4MjUsIDB4NDAsIDB4OTMsCisweDBCLCAweDRDLCAweDA2LCAweDI0LCAweDA5LCAweEQwLCAweDY0LCAweDAyLCAweDlGLCAweDAwLCAweDdDLCAweDBFLCAweDM0LAorMHgwOSwgMHhDMCwgMHhBNCwgMHgyNCwgMHg5QiwgMHgwMSwgMHg0RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhEMCwgMHgxNCwgMHgyMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NjUsIDB4MTAsIDB4OUYsIDB4MDQsIDB4M0MsCisweDQyLCAweDcwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDlGLCAweDAyLCAweDdDLCAweDAyLCAweEYxLCAweDQ4LCAweEMwLAorMHhFNywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3QywgMHgwNiwgMHhGMSwgMHgwOSwgMHhDOCwgMHgyMywgMHg0MCwgMHg5RiwgMHgwMSwKKzB4N0MsIDB4MDYsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDUsIDB4N0MsIDB4MTIsIDB4RjAsIDB4MTksCisweEMxLCAweDI3LCAweDAwLCAweDlGLCAweDA0LCAweDdELCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDVCLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxMywgMHg4MCwgMHg0QywgMHgwMCwKKzB4MzAsIDB4MDAsIDB4QzAsIDB4ODMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsCisweDAwLCAweDFGLCAweDEwLCAweDdFLCAweDA4LCAweEYyLCAweDAxLCAweEQxLCAweDA2LCAweDAxLCAweDAzLCAweDgyLCAweDRDLAorMHg0MCwgMHgzMSwgMHgwMSwgMHhDMSwgMHhDNiwgMHgwMCwgMHgxMywgMHgwMCwgMHg0QywgMHgwNCwgMHgzMCwgMHgyMCwgMHhDMCwKKzB4ODQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEQsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDE0LCAweDA0LCAweDUxLCAweDAxLCAweEM1LCAweDA5LCAweDEwLAorMHgwNSwgMHhDMCwgMHg1RCwgMHgwMCwgMHg1MSwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgxNywgMHg2MCwgMHgxNCwgMHgwMCwKKzB4N0QsIDB4MDMsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MjcsIDB4NDQsIDB4NUMsIDB4MDAsIDB4NUIsIDB4MTEsIDB4QUMsIDB4MTUsCisweEIxLCAweDU3LCAweEMwLCAweDFFLCAweDQwLCAweDcwLCAweDAwLCAweEM0LCAweDExLCAweDE0LCAweDM3LCAweDQwLCAweDEwLAorMHgwMCwgMHg1RCwgMHgxMSwgMHg0NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg1MCwgMHg1MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzIsIDB4NDAsIDB4RDEsIDB4MDAsIDB4MjQsIDB4MDcsIDB4MTEsIDB4MEMsCisweDQwLCAweDMxLCAweDA0LCAweEMxLCAweDAwLCAweDM0LCAweDA3LCAweEQwLCAweDFDLCAweDQ4LCAweDM0LCAweDAwLCAweENELAorMHgwMiwgMHgzNCwgMHgwMiwgMHhEOCwgMHgyQywgMHg2MCwgMHgzMiwgMHg5MCwgMHhDOSwgMHgyMSwgMHgwNCwgMHg4NywgMHg1OCwKKzB4MEMsIDB4NDIsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MTAsIDB4M0MsIDB4NDAsIDB4MjAsIDB4MDAsCisweENELCAweDAwLCAweDA0LCAweDgzLCAweEQwLCAweDBDLCAweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzQywgMHgyMCwgMHhBMSwgMHgxMCwgMHhBNSwgMHgxQSwgMHgxMCwgMHgwRSwgMHg0MCwKKzB4MzEsIDB4MDQsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MEEsIDB4RDAsIDB4MDQsIDB4NDEsIDB4MzgsIDB4MDEsIDB4NkQsIDB4MDIsCisweEI2LCAweDQwLCAweEQ4LCAweDAzLCAweDQwLCAweEFBLCAweDgyLCAweEU5LCAweDAwLCAweEE0LCAweDAwLCAweEQwLCAweDBFLAorMHg0MCwgMHg3QSwgMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwMywgMHgxMCwgMHgwRiwgMHg0MSwgMHgyOCwgMHgwMCwgMHhFRCwKKzB4MDAsIDB4ODUsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MTQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweDE4LCAweDc4LCAweDAwLCAweEUzLCAweDAxLCAweEFDLCAweDE2LCAweDM0LCAweDFFLCAweEMwLCAweDc5LAorMHgwMCwgMHhFMywgMHgwMSwgMHhCQywgMHgwNiwgMHhEMCwgMHgxNiwgMHg0MCwgMHhGOCwgMHgwMSwgMHgyRCwgMHgwMSwgMHhCNCwKKzB4MDUsIDB4RjAsIDB4MTYsIDB4RDAsIDB4NzIsIDB4MDAsIDB4QUIsIDB4MDEsIDB4OEMsIDB4MDQsIDB4NzQsIDB4OUUsIDB4QzAsCisweDc4LCAweDAwLCAweEYzLCAweDgxLCAweENDLCAweDA3LCAweDM0LCAweDFFLCAweEMwLCAweDY4LCAweDAwLCAweEFGLCAweDAxLAorMHg4NCwgMHgwNywgMHhGMCwgMHgxQywgMHhDMCwgMHg1NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QjgsIDB4MzUsIDB4NDAsIDB4OUYsIDB4MTQsIDB4NUMsIDB4MjIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA1LCAweEQwLCAweDc3LCAweDAwLCAweDVGLCAweDAwLCAweDZDLCAweDAwLAorMHhGMCwgMHgwMCwgMHhEMCwgMHgyNSwgMHgyMCwgMHg5RiwgMHgwMiwgMHgzQywgMHgwMCwgMHhCMSwgMHgwOSwgMHhEMCwgMHgzNywKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0QsIDB4MDMsIDB4RTAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0QsCisweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorMHgyMCwgMHg3RCwgMHgwMCwgMHhGRiwgMHgyMSwgMHg4QywgMHgwNiwgMHgzOCwgMHg4RiwgMHhDMCwgMHg2RCwgMHgwMCwgMHhGMywKKzB4MDEsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MUYsIDB4RDAsIDB4N0MsIDB4MDAsIDB4M0YsIDB4MDEsIDB4RkMsIDB4MDYsIDB4RjAsCisweDEzLCAweEMwLCAweDVGLCAweDIwLCAweEY3LCAweDIzLCAweENDLCAweDA0LCAweDMxLCAweDlGLCAweEMwLCAweDdDLCAweDA4LAorMHhGMywgMHgwMSwgMHg4QywgMHgwNywgMHgzMSwgMHgwQiwgMHhDMCwgMHg2RiwgMHgwMCwgMHhFRiwgMHgwMywgMHhDQywgMHgwNywKKzB4RjIsIDB4MUYsIDB4QzIsIDB4MDgsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsCisweDM5LCAweDAwLCAweEVELCAweDAwLCAweDg0LCAweDAyLCAweDM4LCAweDBGLCAweDQwLCAweDA4LCAweDQwLCAweEUxLCAweDAwLAorMHhCQywgMHgwMiwgMHhEMCwgMHgyNiwgMHg0MCwgMHgzOCwgMHgwMiwgMHg2RCwgMHgxMCwgMHhCNCwgMHhBMCwgMHhEMCwgMHg4MiwKKzB4NDAsIDB4MEYsIDB4MTAsIDB4RTEsIDB4MDQsIDB4OTQsIDB4MTAsIDB4MTAsIDB4RTYsIDB4NDEsIDB4M0MsIDB4MDAsIDB4RjEsCisweDEwLCAweDg0LCAweDgzLCAweDE0LCAweDhBLCAweDQwLCAweDJCLCAweDA0LCAweEVELCAweDA4LCAweDg0LCAweDAzLCAweEQwLAorMHgwRSwgMHg0MCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwKKzB4MDAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDIsIDB4OTAsIDB4OEUsIDB4NDAsIDB4MjksIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsCisweDQyLCAweEQwLCAweDA2LCAweDQwLCAweDM4LCAweDA0LCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweEQwLCAweDAyLCAweDQwLAorMHgyQiwgMHgwMiwgMHhFRCwgMHg4MCwgMHhDNCwgMHgwMCwgMHgxMCwgMHgwNCwgMHg0MCwgMHgzOCwgMHgwNCwgMHg2MSwgMHgwMCwKKzB4RjQsIDB4MDMsIDB4MTAsIDB4OEEsIDB4NDEsIDB4MkIsIDB4MDIsIDB4QUQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MkMsCisweDQwLCAweDIwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDMxLCAweDAwLAorMHhDRCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgxQywgMHg0MCwgMHgwMCwgMHgwNCwgMHhDMSwgMHg0OSwgMHgzNCwgMHgwMiwKKzB4RDAsIDB4MjUsIDB4NDAsIDB4NzAsIDB4MDAsIDB4NEQsIDB4MDEsIDB4MzQsIDB4MDAsIDB4RDIsIDB4MTAsIDB4NDAsIDB4MjMsCisweDAwLCAweEM5LCAweDBBLCAweDE0LCAweEM4LCAweDE0LCAweDA0LCAweDUwLCAweEYwLCAweDAwLCAweDQxLCAweDAwLCAweDM0LAorMHgwQiwgMHgxMCwgMHgxOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg5RCwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwKKzB4NTgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzUsIDB4MDAsIDB4REYsCisweDA3LCAweENDLCAweDAyLCAweEIwLCAweDRELCAweEMwLCAweEU1LCAweDAwLCAweEQzLCAweDAwLCAweDNDLCAweDAyLCAweEYwLAorMHgwNSwgMHhEMCwgMHgzQywgMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHgwOCwgMHhGMCwgMHgyMSwgMHhDMSwgMHgzRiwgMHgwMCwKKzB4REYsIDB4MjMsIDB4MEQsIDB4MDgsIDB4MzAsIDB4MTEsIDB4QzAsIDB4RjQsIDB4MDgsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MjMsCisweDMwLCAweDBELCAweEMwLCAweEI3LCAweDAwLCAweDlGLCAweDAwLCAweDRELCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDc0LAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgzNywgMHgxMCwgMHg5RiwgMHgwMCwKKzB4N0UsIDB4MDIsIDB4NzAsIDB4MEQsIDB4QzIsIDB4NjMsIDB4MTAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4QzUsCisweEMwLCAweDM3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDEwLCAweEYwLCAweDQxLCAweEMwLCAweDM3LCAweDAwLCAweEQ3LAorMHgxMCwgMHg3QywgMHgwQywgMHhGMCwgMHgwMCwgMHhDMCwgMHgzNywgMHgwNCwgMHhERiwgMHgwMCwgMHg0NCwgMHgwQiwgMHhGMCwKKzB4MEMsIDB4QzEsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MUQsIDB4QzIsIDB4MDcsIDB4MDAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLCAweDAwLCAweEVGLCAweDEwLCAweENDLAorMHgwNiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNCwgMHgwMCwgMHhGMywgMHgwMCwgMHhGRSwgMHg1MiwgMHgzMCwgMHgwNSwgMHhDMCwKKzB4M0MsIDB4MDAsIDB4MzcsIDB4MTAsIDB4RkMsIDB4ODAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4N0IsIDB4MDAsIDB4OTMsIDB4MDAsCisweENDLCAweDAwLCAweEIwLCAweDAzLCAweDQwLCAweDJDLCAweDAwLCAweEIzLCAweDAwLCAweENDLCAweDgzLCAweDMyLCAweDhGLAorMHhDMiwgMHhCQywgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwRSwgMHhDMCwgMHgwNCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4OUQsIDB4MjAsIDB4NDQsIDB4MEEsCisweDEwLCAweDBDLCAweDUwLCAweEM0LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDA2LCAweDUwLCAweDE1LCAweDUwLCAweDM1LAorMHgwMCwgMHg1RCwgMHgwNywgMHg3NCwgMHgwQywgMHhEMCwgMHgxMSwgMHhDMCwgMHgzNSwgMHgwMiwgMHg4MSwgMHgwMCwgMHg0NCwKKzB4NEMsIDB4MTEsIDB4MzEsIDB4QzAsIDB4MzYsIDB4MDAsIDB4RDEsIDB4MDIsIDB4NDQsIDB4NDMsIDB4MTAsIDB4MjEsIDB4NDIsCisweDI0LCAweDAwLCAweDlELCAweDA5LCAweDQ0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg2NiwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgyOCwgMHgxMCwKKzB4MTksIDB4NDAsIDB4RTYsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MTEsIDB4NDAsIDB4MzYsIDB4MDAsCisweDFELCAweDAxLCAweDc0LCAweDQ0LCAweEQwLCAweDMxLCAweDQwLCAweDE3LCAweDQwLCAweEQxLCAweDAwLCAweDQ0LCAweDg0LAorMHgxMCwgMHgxMSwgMHgwMiwgMHhEMywgMHgwMCwgMHhDMSwgMHgxMSwgMHgwNiwgMHgwNCwgMHgxMCwgMHgyOSwgMHg0MCwgMHgzNiwKKzB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MDYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweENELCAweDAwLCAweDA1LCAweDAwLCAweDEwLCAweDA5LAorMHg0MCwgMHgwMiwgMHg0MCwgMHhDMSwgMHgwMCwgMHgzNCwgMHg4MiwgMHg1MCwgMHgwMCwgMHg0MCwgMHgzMywgMHgwOCwgMHg0RCwKKzB4NDAsIDB4MzYsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MTEsIDB4ODAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQwLCAweDMzLCAweDAwLCAweEMxLCAweDAwLCAweDA2LCAweDAyLCAweDEwLCAweDA4LCAweDUwLCAweDIyLCAweDAwLAorMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg0MiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MjYsIDB4MDAsIDB4RUYsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzQsIDB4MDksIDB4QzAsCisweDA2LCAweDAwLCAweEQzLCAweDAwLCAweDc0LCAweDAyLCAweDcwLCAweDA1LCAweEMwLCAweDM2LCAweDAwLCAweDE3LCAweDAwLAorMHg3NCwgMHgwMCwgMHhGMiwgMHgwMSwgMHhDMiwgMHgyNywgMHgyMCwgMHhGMywgMHgyMCwgMHg0QywgMHgwMCwgMHhCMCwgMHgwMywKKzB4RDAsIDB4MDcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDEsIDB4MzAsIDB4MDksIDB4QzAsIDB4MzYsIDB4MDAsIDB4QkYsCisweDAwLCAweDRELCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDA2LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHhCOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwQiwgMHhDMCwgMHgwRCwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDcsIDB4QzAsIDB4M0QsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsCisweDAwLCAweEQwLCAweDAzLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEJELCAweDAwLCAweEY0LCAweDAzLCAweEMyLAorMHgzRSwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRCwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MTUsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDI3LCAweDMwLCAweDFGLCAweEM4LCAweDdGLCAweDBBLAorMHhGRiwgMHgwMSwgMHhDQywgMHgyNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgwMCwgMHhGMywgMHgwOSwgMHhGQywgMHgyNywKKzB4RjAsIDB4M0YsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MjcsIDB4MzAsIDB4OUYsIDB4QzAsIDB4NzgsCisweDAwLCAweEZGLCAweDA5LCAweENDLCAweDA3LCAweEIwLCAweDEzLCAweEMwLCAweDdFLCAweDAwLCAweEVGLCAweDAxLCAweEZDLAorMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDgsIDB4NzcsIDB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MDcsIDB4MDEsIDB4MUQsCisweDAxLCAweDQ0LCAweDAwLCAweDkwLCAweDExLCAweDQwLCAweDA0LCAweDAxLCAweDExLCAweDAwLCAweDc0LCAweDEwLCAweEQwLAorMHgwMSwgMHg0MCwgMHg0NywgMHgwMCwgMHgxMSwgMHgwMSwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0OCwgMHg0NCwgMHgwMCwKKzB4MUQsIDB4MDAsIDB4NDQsIDB4ODcsIDB4NTEsIDB4MTEsIDB4NDAsIDB4NzQsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MTMsCisweDEwLCAweDFELCAweDQwLCAweDBGLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLAorMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhERCwgMHgwMCwKKzB4MDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDgsIDB4MzQsIDB4MTQsIDB4QzEsIDB4MjAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4NEMsCisweDQwLCAweDM3LCAweDAwLCAweEQ5LCAweDAwLCAweDY0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDMxLCAweDAwLCAweENELAorMHgwNCwgMHgyNCwgMHgwMywgMHgxMCwgMHgwMSwgMHg0OCwgMHgzMiwgMHg4MCwgMHg4RCwgMHgwMCwgMHgzNCwgMHg0MywgMHgxOSwKKzB4MEMsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsCisweDAwLCAweERELCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDQ0LAorMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg3NCwgMHg4MCwgMHhEMCwgMHgwMSwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MTksIDB4MDAsIDB4NjQsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDIsIDB4MDUsIDB4MDgsIDB4MUQsIDB4MjAsCisweDY0LCAweDA3LCAweDUwLCAweDExLCAweDQxLCAweDM0LCAweDgwLCAweDFELCAweDAxLCAweDM0LCAweDAzLCAweDE4LCAweDBELAorMHg0MiwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgzNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MTgsIDB4Q0YsIDB4MDAsIDB4NEMsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDMzLAorMHgwMCwgMHhDQiwgMHgwMCwgMHg2QywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg2RCwKKzB4MDcsIDB4MzAsIDB4MTAsIDB4QzIsIDB4MzYsIDB4MDAsIDB4OUYsIDB4MTMsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzIsCisweDIzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweEZGLAorMHgwMCwgMHhGQywgMHg0MCwgMHhGMiwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGRCwgMHgwMCwgMHhGMCwKKzB4MDMsIDB4RDIsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkUsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzIsIDB4MEYsIDB4MDAsCisweDM3LCAweDAwLCAweERDLCAweDAwLCAweEY2LCAweDAzLCAweEMwLCAweDBFLCAweDIwLCAweDNGLCAweDAwLCAweERDLCAweDAzLAorMHhGMCwgMHgwNywgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgxRiwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsCisweDdDLCAweDAzLCAweDMwLCAweDhELCAweEMwLCAweDM2LCAweDAwLCAweERGLCAweDAxLCAweDRDLCAweDIzLCAweEYwLCAweDBELAorMHhDMiwgMHgzNCwgMHgwNCwgMHhERiwgMHgwMSwgMHg0QywgMHg0MywgMHhGMCwgMHgwRCwgMHhFMCwgMHgzNywgMHgwMCwgMHhEQiwKKzB4MDEsIDB4NEMsIDB4MTMsIDB4RjAsIDB4OEQsIDB4ODAsIDB4MzQsIDB4MDIsIDB4RDMsIDB4MTgsIDB4NEMsIDB4MEUsIDB4RjAsCisweDAxLCAweEMwLCAweDM3LCAweDAwLCAweDkzLCAweDAyLCAweDRDLCAweDQzLCAweEYwLCAweDBELCAweEMwLCAweDJCLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwKKzB4MDAsIDB4MTEsIDB4MDEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MTAsIDB4NDAsCisweDgwLCAweDAwLCAweDFELCAweDgwLCAweDQ0LCAweDlDLCAweEQwLCAweDUxLCAweDQwLCAweEM3LCAweDBBLCAweDFELCAweDAwLAorMHgwNCwgMHg0OCwgMHhEMCwgMHgyMSwgMHg0MCwgMHg0NCwgMHgyMCwgMHgxMSwgMHhBMCwgMHgyQywgMHgwMiwgMHhEMCwgMHhBNSwKKzB4NDAsIDB4NzcsIDB4MDQsIDB4OTEsIDB4MDAsIDB4NjgsIDB4MDcsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDc0LCAweDBGLAorMHgxMCwgMHgxQywgMHg0MCwgMHgzMiwgMHgwMiwgMHhDRCwgMHgwMCwgMHgwNCwgMHg0MywgMHhEMCwgMHg4QywgMHg0MCwgMHhGMCwKKzB4MDgsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4NEMsIDB4NDAsIDB4NzMsIDB4MDIsIDB4Q0QsIDB4MDAsIDB4MDQsCisweDBGLCAweEQwLCAweDBDLCAweDQwLCAweDcwLCAweDAwLCAweEQxLCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDA0LCAweDQ4LAorMHg3MywgMHgwMCwgMHg4OCwgMHgwMCwgMHgwNCwgMHgyNywgMHhEMCwgMHgwQywgMHg0MCwgMHgwRiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4RjQsIDB4NjQsIDB4MTAsCisweDEyLCAweDQwLCAweEM4LCAweDAwLCAweDNELCAweDAxLCAweDg0LCAweDA0LCAweEQwLCAweDEyLCAweDUwLCAweDQ4LCAweDA0LAorMHgyRCwgMHgwMywgMHg4NCwgMHgwNCwgMHhEMCwgMHgxMiwgMHg0MCwgMHg0QiwgMHgwMiwgMHgzRCwgMHgwMSwgMHg4NCwgMHgwNCwKKzB4RDAsIDB4MzMsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MzEsIDB4MDEsIDB4QTQsIDB4MDcsIDB4RDAsIDB4MTYsIDB4NDAsIDB4M0IsCisweDAwLCAweEI5LCAweDAxLCAweEE0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDNGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMywgMHgzMCwgMHgwQywKKzB4QzAsIDB4MzIsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MEMsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MDIsIDB4REYsCisweDAwLCAweDBDLCAweDAzLCAweEYwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENGLCAweDA0LCAweDBDLCAweDIzLCAweEYyLAorMHgwRCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMywgMHgwMCwgMHgyQywgMHgwQiwgMHhGMCwgMHgwMCwgMHhDMCwgMHgzMywgMHgwMiwKKzB4OEIsIDB4ODAsIDB4MEMsIDB4MjMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDAwLCAweEYwLCAweDgyLCAweDgwLAorMHgwRiwgMHgwMiwgMHgyRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMSwgMHgwMiwgMHhDMCwgMHgwRiwgMHgwOCwgMHgzRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4ODMsIDB4QzAsIDB4MEYsIDB4MDgsIDB4MkYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDMsCisweEQwLCAweDBGLCAweDAwLCAweDJGLCAweDA5LCAweEZDLCAweDAzLCAweEYwLCAweDgzLCAweEM0LCAweDNCLCAweDAxLCAweEI3LAorMHgwMCwgMHhGQywgMHgyMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDcsIDB4MzQsIDB4MEQsIDB4QzAsIDB4NzcsCisweDQwLCAweEQzLCAweDAwLCAweDdDLCAweDA3LCAweDM0LCAweDBELCAweEMwLCAweDM3LCAweDA4LCAweERGLCAweDAwLCAweDdDLAorMHgwNywgMHgzMCwgMHgxRCwgMHhEMCwgMHg3MCwgMHgwMCwgMHhDMywgMHgwMSwgMHg0QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MjAsIDB4REYsIDB4NDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHg4OCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhGNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0OCwgMHgwRiwgMHgwMCwKKzB4MjEsIDB4MDAsIDB4RjQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4MkQsIDB4MDAsIDB4RjQsIDB4MDAsCisweDEzLCAweDAzLCAweDQwLCAweDA4LCAweDAwLCAweDI1LCAweDAwLCAweDg0LCAweDAwLCAweEQwLCAweDAyLCAweDQwLCAweDBCLAorMHgwMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwNiwgMHg0MCwgMHgzOCwgMHgwMCwgMHhBOSwgMHgwMCwgMHhCNCwKKzB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweDAwLCAweDc5LCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweDUwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEUxLAorMHgwMSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHgwMCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHg1NCwKKzB4MUUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsCisweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDEyLCAweDQwLCAweDc4LCAweDgwLCAweEFELCAweDExLCAweEI0LCAweDA3LAorMHhEMCwgMHgxRSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwKKzB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4ODAsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDEsIDB4MDAsCisweDM0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweDBELCAweDAwLCAweDM0LCAweDAwLCAweDUwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgxNiwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHgwRCwKKzB4MDAsIDB4MzQsIDB4MDcsIDB4RDAsIDB4NkMsIDB4NDAsIDB4MzAsIDB4ODAsIDB4ODksIDB4MDEsIDB4MzQsIDB4MDMsIDB4RDAsCisweDBDLCAweDQwLCAweDVCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDI4LCAweDE1LAorMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHg3MCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1MywgMHgwMCwgMHg3QywKKzB4MDEsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4MDUsIDB4QzAsCisweDE0LCAweDAwLCAweDUxLCAweDAwLCAweDRELCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLAorMHhCQywgMHg5NSwgMHhGMCwgMHgyNywgMHhEMCwgMHgxNCwgMHgwMCwgMHg2RiwgMHgwMiwgMHg3QywgMHgwMSwgMHhEMCwgMHgwNSwKKzB4QzAsIDB4NUYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsCisweDFGLCAweDAwLCAweEZDLCAweDAwLCAweDkwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLAorMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg4MCwgMHhGQywgMHgwMCwgMHg5MCwgMHgwMywgMHhDMCwgMHgwRiwKKzB4MDAsIDB4M0YsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0MsIDB4MDAsIDB4N0MsCisweDQwLCAweEUwLCAweDIxLCAweEMwLCAweDA3LCAweDA4LCAweDFGLCAweDEwLCAweDc0LCAweDAwLCAweEYwLCAweDAxLCAweEMwLAorMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDE5LCAweEMwLCAweDI3LCAweDAxLAorMHg5RiwgMHgwMCwgMHg3QywgMHgyNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwKKzB4NzAsIDB4NDksIDB4QzAsIDB4RTUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MTYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDMsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDlELCAweDAwLAorMHg3NCwgMHgwQSwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwNCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgyRSwgMHhEMCwgMHgwOSwKKzB4NDYsIDB4QTcsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NzQsIDB4MkEsIDB4RDAsIDB4MjksIDB4NDAsIDB4NjcsIDB4ODAsIDB4OUQsCisweDAwLCAweDc0LCAweDBBLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDQzLCAweDc0LCAweEEyLCAweDMwLAorMHgzOCwgMHg0MCwgMHgyNCwgMHgwMSwgMHg5RCwgMHg4MCwgMHg2QywgMHgwRSwgMHhEMSwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsCisweDEyLCAweEQwLCAweDRCLCAweDQwLCAweDZGLCAweDAwLCAweEJELCAweDAxLCAweEY0LCAweDAyLCAweEQwLCAweDFCLCAweDQwLAorMHg2RiwgMHgwMCwgMHhCRCwgMHgwOCwgMHhGNCwgMHgwMiwgMHhEMCwgMHg4QiwgMHg0MCwgMHgyRiwgMHgxOCwgMHhCRCwgMHgwMSwKKzB4RjQsIDB4MDIsIDB4RDAsIDB4MUIsIDB4NDEsIDB4NkYsIDB4MDAsIDB4QkQsIDB4MDQsIDB4NjQsIDB4MDIsIDB4NTgsIDB4MDksCisweDQwLCAweDI1LCAweDA4LCAweDlELCAweDAwLCAweDQ0LCAweDBBLCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHhCNCwgMHgwNiwKKzB4RDAsIDB4MEEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QjQsIDB4MDYsIDB4RDIsIDB4MEEsIDB4NDAsIDB4NkIsCisweDAwLCAweEFELCAweDAxLCAweEI0LCAweDA2LCAweEQwLCAweDFBLCAweDQ4LCAweDZCLCAweDIwLCAweEFELCAweEMwLCAweEI0LAorMHgwNiwgMHhEMCwgMHgwQSwgMHg0OCwgMHgyQiwgMHgwMCwgMHhBRCwgMHgwMSwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4MjAsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MjUsIDB4MjIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDI4LCAweEYwLAorMHgwMSwgMHhDMiwgMHg4NywgMHgwMiwgMHgxRiwgMHgwMCwgMHg3QywgMHgyOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgyMiwKKzB4MUYsIDB4MkEsIDB4N0MsIDB4MjgsIDB4RjAsIDB4QTEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4N0MsIDB4MjgsCisweEYwLCAweEExLCAweDQwLCAweDA3LCAweDAwLCAweDNGLCAweDBBLCAweDZDLCAweDAwLCAweDcyLCAweDA1LCAweEMwLCAweDA1LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDOCwgMHg3NywgMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjEsIDB4MDksCisweENBLCAweDI3LCAweDA4LCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3NCwgMHg4MiwgMHhGMSwgMHgwOSwgMHhDMCwgMHgyNywgMHgwOCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4RjgsIDB4MDIsIDB4NzIsIDB4MEIsIDB4QzAsIDB4MjcsIDB4MDAsCisweEJGLCAweDAwLCAweDdDLCAweDEyLCAweEY4LCAweDA5LCAweEMwLCAweDc3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHhGQywgMHgyMiwgMHhGMCwgMHgwQiwgMHhDNiwKKzB4QUMsIDB4MTgsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4QUYsIDB4MjAsIDB4QkYsIDB4MDIsCisweENDLCAweDBBLCAweEYwLCAweDBCLCAweEMwLCAweDJDLCAweDAwLCAweEI3LCAweDAwLCAweEZDLCAweDBBLCAweDMwLCAweDJCLAorMHhDMCwgMHgyQywgMHgyMCwgMHhCRiwgMHg0OCwgMHhCQywgMHgwMiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgyMCwgMHg5RiwKKzB4MDAsIDB4RjQsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4NzcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDc0LCAweDE0LCAweEQwLCAweDAxLCAweDQwLCAweDQ0LAorMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgxNCwgMHhEMCwgMHgwMSwgMHg0OCwgMHg0NywgMHgwMSwgMHgxRCwgMHg4MSwgMHg0NCwKKzB4OTQsIDB4OTAsIDB4MTEsIDB4NTIsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MDQsIDB4MTAsIDB4NTEsIDB4NDAsCisweDA0LCAweDAwLCAweDFELCAweDA1LCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDAwLAorMHg2NCwgMHgwMCwgMHgxNCwgMHgwMSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NTAsIDB4MjEsIDB4MDEsCisweDhELCAweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDBDLCAweDQwLCAweDIzLCAweDAxLCAweEM1LCAweDA0LCAweDE1LCAweDAzLAorMHhEMCwgMHg0RCwgMHg0MSwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgxMywgMHgxMCwgMHgwOCwgMHgxNCwgMHgzMiwKKzB4MjAsIDB4OEQsIDB4MDAsIDB4NzYsIDB4ODIsIDB4NTAsIDB4MDgsIDB4NDgsIDB4MjMsIDB4MTAsIDB4OEQsIDB4MDAsIDB4MzQsCisweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NTQsIDB4MDIsIDB4RDAsCisweDBELCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweEMwLCAweDc0LCAweDAyLCAweDEyLCAweDA5LCAweDAwLCAweDI0LCAweDAwLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgxMiwgMHg1NCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHgyNCwgMHgwMiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5NywgMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjQsIDB4NDAsIDB4OTUsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUYsCisweDAwLCAweDdDLCAweDRFLCAweDcwLCAweDY5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDA1LCAweDdDLCAweDAyLCAweDEwLAorMHgwOSwgMHg0MCwgMHgxNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgyNSwKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjYsIDB4MDQsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDZDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLAorMHgyNywgMHgyMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMiwgMHgyNSwgMHgyMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4QjIsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDQsIDB4OUYsIDB4MDQsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLAorMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3RSwgMHgwMCwKKzB4MzQsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzQsIDB4NDcsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDQxLCAweEMyLCAweDA0LCAweDAwLCAweDEzLCAweDAwLCAweDdDLAorMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgxMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MTQsIDB4MDAsIDB4NUQsCisweDAwLCAweEY0LCAweDAxLCAweEQwLCAweDA0LCAweDQwLCAweDlGLCAweDA0LCAweDVELCAweDAxLCAweEY0LCAweDIxLCAweDEwLAorMHgwNSwgMHgwMCwgMHhERiwgMHgwMiwgMHg3MSwgMHg4OCwgMHhGMCwgMHgwMSwgMHhEMCwgMHg4NiwgMHhDMCwgMHgxOSwgMHgwMSwKKzB4NUQsIDB4MTEsIDB4RjQsIDB4MDksIDB4MTAsIDB4MzcsIDB4NDgsIDB4MTQsIDB4MjAsIDB4N0IsIDB4OTEsIDB4NzQsIDB4MDEsCisweDEwLCAweEI3LCAweDQwLCAweDFGLCAweDAwLCAweDVELCAweDAwLCAweEY0LCAweDQ1LCAweEQwLCAweDA1LCAweDQwLCAweDQzLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4NDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4RjMsIDB4MDAsIDB4OEQsIDB4MDgsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MDgsCisweDQwLCAweEYzLCAweDIwLCAweEQwLCAweDAyLCAweDM0LCAweDEzLCAweEQwLCAweDJDLCAweDQwLCAweDUzLCAweDAwLCAweDhELAorMHg0MCwgMHg3NiwgMHg0MywgMHgxNCwgMHgzRCwgMHg0MCwgMHgyMCwgMHgwMCwgMHhDMSwgMHgwNCwgMHg3NCwgMHgwMiwgMHg1MCwKKzB4MzAsIDB4NDgsIDB4NDMsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4MDAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDM4LCAweDAwLCAweEVELCAweDAwLCAweEI0LAorMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwNywgMHgxMCwgMHgwRSwgMHg0MCwKKzB4N0IsIDB4MTQsIDB4RTEsIDB4NDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsCisweEI0LCAweDAzLCAweDEyLCAweDJFLCAweDUwLCAweDc4LCAweDAwLCAweEU5LCAweDAwLCAweEY0LCAweEMyLCAweDAwLCAweDAyLAorMHg0MSwgMHgwQiwgMHgwNCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDcsCisweEYwLCAweDFFLCAweEMyLCAweDVCLCAweDAwLCAweEVGLCAweDAxLCAweEY0LCAweDA3LCAweDMwLCAweDFFLCAweEM4LCAweDdGLAorMHgxMCwgMHhFMywgMHgwMSwgMHhCQywgMHgwNywgMHhEMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFRiwgMHgwMSwgMHhGQywKKzB4MDcsIDB4MzAsIDB4MTcsIDB4QzgsIDB4NzgsIDB4MDgsIDB4RTMsIDB4MjEsIDB4QkMsIDB4MDcsIDB4NzAsIDB4MTYsIDB4QzAsCisweDRCLCAweDAwLCAweEVGLCAweDIxLCAweEJDLCAweDA1LCAweEYwLCAweDFFLCAweEMwLCAweDUzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MTcsIDB4MDgsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MTcsIDB4MDAsCisweEQ3LCAweDIwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEM0LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLAorMHhGMywgMHgwNSwgMHhDMCwgMHgzMiwgMHgxMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywgMHhFMCwgMHgwNSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjEsIDB4MEQsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDdGLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDA1LCAweEYwLCAweDFGLAorMHhDMCwgMHg3RiwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgwMCwgMHhGRiwKKzB4MjEsIDB4QkMsIDB4ODUsIDB4MzAsIDB4MUYsIDB4QzAsIDB4NzgsIDB4MDIsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDUsIDB4RjAsCisweDVGLCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDA5LCAweEZDLCAweDE2LCAweEYwLCAweDE3LCAweEM0LCAweDZELCAweDAwLAorMHhGRiwgMHgwOSwgMHhGNCwgMHgyNywgMHgzMCwgMHg5RiwgMHhDMCwgMHgxQiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTUsIDB4ODAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDksIDB4RDAsIDB4MEUsIDB4NDAsCisweDNCLCAweDAwLCAweEUxLCAweDI4LCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDA4LAorMHhCNCwgMHgwMywgMHgxMiwgMHgwRiwgMHg0MCwgMHgzOCwgMHgwNiwgMHhFMSwgMHgxOCwgMHhCNCwgMHg0MywgMHhEMCwgMHgwNiwKKzB4NDEsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MEEsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDcsIDB4NDAsIDB4MjgsIDB4MDAsIDB4RUQsCisweDA4LCAweEY0LCAweDBCLCAweDE0LCAweDBFLCAweDQwLCAweDU3LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHg4RSwgMHg0MCwgMHgxRiwKKzB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDksIDB4RDAsIDB4OEYsIDB4NDAsIDB4MzksIDB4MDIsIDB4NkQsIDB4MDIsIDB4RjQsCisweDA5LCAweDEwLCAweDI2LCAweDQwLCAweEJDLCAweDA4LCAweEUxLCAweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDRFLCAweDQwLAorMHgzQiwgMHgwMiwgMHhFRCwgMHg4MCwgMHhCNCwgMHg5MywgMHhEMCwgMHgwNywgMHg0MCwgMHgxOSwgMHgwMCwgMHhFRCwgMHg0MCwKKzB4QjQsIDB4MDEsIDB4MTIsIDB4MEUsIDB4NDAsIDB4MjMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDA4LCAweEQwLCAweDBDLCAweDQxLCAweDA3LCAweDAxLAorMHhDMSwgMHgwMSwgMHgzNCwgMHg4MiwgMHhEMCwgMHgyQywgMHg0RCwgMHg2NSwgMHgwMiwgMHg4RCwgMHg4OCwgMHg3NCwgMHgyNCwKKzB4MTAsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDIsIDB4MzQsIDB4MEMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4NzMsCisweDA0LCAweDlELCAweDBGLCAweDM0LCAweDAyLCAweEQwLCAweDI0LCAweDQwLCAweDAwLCAweDIwLCAweENELCAweDA5LCAweDc0LAorMHgwMCwgMHgxMCwgMHgwQywgMHg2MCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4QTgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MzYsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QTcsIDB4MDAsIDB4QzMsCisweDEyLCAweDNDLCAweDE0LCAweEYwLCAweDJELCAweEMwLCAweDg1LCAweDAwLCAweDBGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLAorMHg1MSwgMHg0MCwgMHg3NCwgMHg4MCwgMHhEMywgMHgwOSwgMHg3NCwgMHgyNiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgzMywgMHgwNCwKKzB4MUUsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MTQsIDB4QzAsIDB4MDUsIDB4MDAsIDB4REYsIDB4MDEsIDB4N0MsIDB4MDIsCisweDMwLCAweDBELCAweEM4LCAweDc3LCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgxRCwgMHhDOCwgMHhDNywgMHgyMCwgMHhERiwgMHgwNCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MUQsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MUQsIDB4ODAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MDEsCisweEQwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDBBLCAweEYwLCAweDA5LCAweDQxLCAweDM3LCAweDIwLCAweDlGLAorMHgwMCwgMHg3OCwgMHgwMiwgMHhDMCwgMHgxNSwgMHhDMCwgMHgwNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwQSwgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MTcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsCisweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDJDLCAweDAwLCAweEYzLCAweDA1LCAweEVDLAorMHgwMCwgMHhCMCwgMHg1RiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgzMywgMHgyMCwgMHhDQywgMHgwMiwgMHgzMCwgMHgwMywgMHhDMCwKKzB4M0YsIDB4MDAsIDB4RkYsIDB4MDQsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MjAsIDB4MzMsIDB4MjAsCisweENDLCAweDE3LCAweEYwLCAweDE3LCAweEQxLCAweDBDLCAweDAwLCAweEZGLCAweDEwLCAweEZDLCAweDAwLCAweDEwLCAweDBGLAorMHhDMiwgMHgyNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHgwMCwKKzB4REQsIDB4MDAsIDB4NzQsIDB4MDYsIDB4RDEsIDB4MEMsIDB4NDAsIDB4NDQsIDB4MDgsIDB4RDEsIDB4MDEsIDB4NDQsIDB4MDQsCisweDEwLCAweDFELCAweDQwLCAweDQ3LCAweDAxLCAweDExLCAweDAxLCAweDQ0LCAweDA2LCAweDEwLCAweDMxLCAweDQwLCAweEY3LAorMHgwNCwgMHhERCwgMHgwMSwgMHg3NCwgMHgxRSwgMHhEMCwgMHg1MSwgMHg0MCwgMHgzNywgMHgyMCwgMHgxMSwgMHgwMywgMHg0NCwKKzB4MDMsIDB4RDAsIDB4QzUsIDB4NDAsIDB4NDQsIDB4MDEsIDB4REQsIDB4MDAsIDB4NzQsIDB4MkMsIDB4MTAsIDB4MEQsIDB4NDYsCisweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM0LCAweDAwLCAweERELAorMHgwMCwgMHg3NCwgMHgwNiwgMHhEMCwgMHgxRCwgMHg0MCwgMHg2NCwgMHgwNCwgMHhEMSwgMHgwMCwgMHg2NCwgMHgwRSwgMHgxMCwKKzB4MEQsIDB4NDAsIDB4NDcsIDB4ODAsIDB4OTEsIDB4MDMsIDB4NDQsIDB4MEMsIDB4MTAsIDB4MTksIDB4NDIsIDB4NzcsIDB4MDAsCisweERELCAweDAwLCAweDc0LCAweDA0LCAweEQwLCAweDE5LCAweDQwLCAweDM3LCAweDA5LCAweDExLCAweDAxLCAweDQ0LCAweDAyLAorMHhEMCwgMHgwNSwgMHg0MCwgMHg0NCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHg4MiwgMHg0MCwgMHgwRCwgMHg0MCwgMHgwNywKKzB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDM0LCAweDAyLCAweEQwLCAweDBELCAweDQwLCAweDIwLCAweDQwLCAweEMxLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDBDLAorMHg0MCwgMHgyMywgMHg2MCwgMHg5MSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxNiwgMHgwOCwgMHg0MCwgMHgzMywgMHgyMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzcsIDB4MDgsIDB4ODEsIDB4MjAsIDB4MDUsIDB4MDIsIDB4RDAsCisweDA0LCAweDQwLCAweDAwLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAwLCAweDUwLCAweDBDLCAweDQwLCAweDQzLCAweDIwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHgzNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDAsIDB4RjAsIDB4MEQsIDB4QzIsIDB4MjQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NkMsIDB4MDAsIDB4MzAsIDB4MEQsIDB4QzAsCisweDA3LCAweDAwLCAweDEzLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLAorMHg3QywgMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHgxMywgMHg0MCwgMHg0QywgMHgwMywgMHhGMCwgMHgwNSwKKzB4QzAsIDB4MDQsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzQsIDB4MEQsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLAorMHhGMCwgMHgwRiwgMHhDOCwgMHgyQiwgMHgwOCwgMHhGRiwgMHgyMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRSwgMHhDMCwgMHgyRiwKKzB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzIsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhCMCwgMHgwRiwgMHhDMCwgMHgxNywgMHgyMiwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4NEYsIDB4MDAsIDB4MzMsIDB4MDEsIDB4Q0MsIDB4MjQsIDB4MzAsCisweDEzLCAweEMwLCAweDJDLCAweDAyLCAweEYzLCAweDAwLCAweDhDLCAweDA3LCAweDMwLCAweENGLCAweEMwLCAweDJDLCAweDQwLAorMHgzMywgMHgwOCwgMHhDQywgMHgyMywgMHg3MiwgMHhDNywgMHhDMCwgMHhDRSwgMHgwMCwgMHgzMywgMHgwNCwgMHhEQywgMHgwMCwKKzB4MzAsIDB4MTMsIDB4QzAsIDB4Q0YsIDB4MDAsIDB4M0YsIDB4MDEsIDB4RUQsIDB4MDQsIDB4MzAsIDB4MTMsIDB4QzAsIDB4NEMsCisweDAwLCAweDMzLCAweDAxLCAweENDLCAweDA0LCAweDMwLCAweDEzLCAweEMwLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgyMSwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwNCwKKzB4NDAsIDB4MjQsIDB4MDksIDB4RjEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MzAsIDB4MjEsIDB4NDAsIDB4QjAsIDB4MDUsIDB4MDEsCisweDI2LCAweDA1LCAweDNCLCAweDMwLCAweEUxLCAweDQwLCAweDA1LCAweDIxLCAweDUxLCAweDBCLCAweDQ0LCAweDE4LCAweDE1LAorMHg0MSwgMHhDMCwgMHgyMywgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHg4MiwgMHgxMCwgMHgwMSwgMHg0MiwgMHg0NCwgMHgwMCwKKzB4MTEsIDB4ODAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDExLCAweEEwLCAweDAzLCAweDA0LCAweDExLCAweDAxLCAweDA0LCAweDEyLCAweDEwLCAweDAwLCAweDQwLAorMHgwMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHg2NCwgMHg1MywgMHg5MCwgMHgzQywgMHg0OCwgMHgyNCwgMHgwMiwgMHgwMSwgMHgwNiwKKzB4MjUsIDB4ODMsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzQsIDB4NDgsIDB4OTAsIDB4MDAsCisweDQxLCAweDAzLCAweDAxLCAweDg5LCAweDAwLCAweDQ0LCAweDAwLCAweDkwLCAweDAxLCAweDQwLCAweDQ2LCAweDAwLCAweDg5LAorMHgwMCwgMHgyNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0NSwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QTgsIDB4MDUsIDB4MDAsIDB4MTEsIDB4NDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDUsIDB4NDAsIDB4MDQsCisweDEyLCAweEMxLCAweDAwLCAweDY0LCAweDAzLCAweDE0LCAweDA5LCAweDQwLCAweDM0LCAweDAyLCAweDExLCAweDAxLCAweDY0LAorMHgwNywgMHgxMCwgMHgwMSwgMHg0MCwgMHg0NSwgMHgwNCwgMHg1OSwgMHgyMCwgMHg2NCwgMHg0NCwgMHg5MiwgMHgxMSwgMHg0MiwKKzB4MjcsIDB4MDAsIDB4OEMsIDB4MDAsIDB4NDQsIDB4MDIsIDB4OTgsIDB4MTEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4ODksIDB4MDAsCisweDI0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhBMCwgMHgzNywgMHg0MCwgMHg0MywgMHgwMCwgMHg0QywgMHgwNCwgMHgzMCwgMHgyMSwgMHhDMSwgMHg2NCwgMHgwMCwKKzB4RDMsIDB4MDAsIDB4MkQsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzQsIDB4QzAsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NkMsIDB4MDcsCisweEYyLCAweDBELCAweEMwLCAweDg0LCAweDQwLCAweDVCLCAweDgxLCAweDdDLCAweDBDLCAweEIxLCAweDUxLCAweEUwLCAweDA3LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMSwgMHhCMCwgMHgwOCwgMHhDMCwgMHgxMiwgMHgxOCwgMHgxQiwgMHgwMSwgMHg2QywKKzB4MDQsIDB4MzAsIDB4MTEsIDB4QzAsIDB4MDksIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisweDg4LCAweDNELCAweDIwLCAweDdGLCAweDAwLCAweEZDLCAweDI0LCAweEYwLCAweDA3LCAweEMwLCAweDczLCAweDAwLCAweEZGLAorMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwgMHgyNiwgMHhDMCwgMHgwRiwgMHgzMCwgMHgzRiwgMHgyMCwgMHg5QywgMHgwMywgMHhGMCwKKzB4MDUsIDB4QzAsIDB4MEQsIDB4MDAsIDB4NzcsIDB4MDMsIDB4REMsIDB4MDAsIDB4NzIsIDB4MDMsIDB4QzAsIDB4MkQsIDB4MDIsCisweDNGLCAweDA4LCAweERDLCAweDAzLCAweDc0LCAweDBCLCAweEMwLCAweDFELCAweDE4LCAweDM2LCAweDQ5LCAweERDLCAweDI0LAorMHhGMCwgMHg5MywgMHhDMCwgMHgxRSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwKKzB4NzUsIDB4MDAsIDB4NTMsIDB4MTAsIDB4NEMsIDB4MDYsIDB4MzIsIDB4MDEsIDB4Q0EsIDB4MjQsIDB4MDAsIDB4RDMsIDB4MDAsCisweDRELCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDI0LCAweDAwLCAweDEzLCAweDAyLCAweDZDLCAweDAyLCAweDMwLCAweDBELAorMHhDMSwgMHg4NiwgMHgwMCwgMHg0RiwgMHg1MCwgMHhDQywgMHgxOCwgMHgzMCwgMHgwMSwgMHhDOCwgMHgwNywgMHg0MCwgMHg5MywKKzB4MDUsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDksIDB4QzAsIDB4MTQsIDB4MDQsIDB4OTMsIDB4MTEsIDB4NEMsIDB4NDYsIDB4MzAsCisweDU5LCAweEMwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDc0LAorMHgwMCwgMHg1MSwgMHg4MCwgMHg0NCwgMHgwNiwgMHgxMiwgMHgwNSwgMHg0MCwgMHgzNCwgMHgwOSwgMHhGMSwgMHgwMCwgMHg0NCwKKzB4MEIsIDB4MTAsIDB4QkQsIDB4NDAsIDB4QTQsIDB4MDIsIDB4MzUsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4N0MsIDB4NDAsCisweDA0LCAweDA2LCAweDVELCAweDExLCAweDJDLCAweDA4LCAweDEwLCAweDExLCAweDAwLCAweDY3LCAweDA4LCAweDlCLCAweDIzLAorMHgzNCwgMHgyQiwgMHhEMCwgMHhBOSwgMHg0MCwgMHg5NCwgMHgwNCwgMHg5MSwgMHgwMywgMHg0NCwgMHgwRSwgMHgxMCwgMHgzOSwKKzB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MDQsIDB4MDAsCisweDg5LCAweDAwLCAweDA0LCAweDAxLCAweDEwLCAweDA5LCAweDQwLCAweDYwLCAweDAwLCAweEMxLCAweDAxLCAweDA0LCAweDRCLAorMHgxNCwgMHgzQywgMHg0MCwgMHhBMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgyNCwgMHgwMywgMHgxOCwgMHgyNCwgMHg0MCwgMHgwNiwKKzB4MDgsIDB4OEQsIDB4MDIsIDB4MTQsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NDgsIDB4NTMsIDB4MDIsIDB4NDUsIDB4MDAsIDB4MzQsCisweDAwLCAweEQwLCAweDA0LCAweDQwLCAweDYxLCAweDAwLCAweDQxLCAweDAyLCAweDA0LCAweDA5LCAweDEwLCAweDA0LCAweDAyLAorMHgxQywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0OCwgMHgwMCwgMHhCOSwKKzB4MDksIDB4ODQsIDB4MEQsIDB4MTAsIDB4MUUsIDB4NDIsIDB4RjgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QzQsIDB4ODcsIDB4MTQsCisweDFDLCAweDQxLCAweDY4LCAweDAyLCAweEE1LCAweDAxLCAweDg0LCAweDA3LCAweDEwLCAweDkyLCAweDUwLCAweDQ4LCAweDIwLAorMHhBRCwgMHgyMSwgMHgzNiwgMHg4NCwgMHgxOCwgMHgxMiwgMHg0MCwgMHg3QiwgMHgwMCwgMHg2RCwgMHgwMSwgMHhCNCwgMHgwNiwKKzB4RDAsIDB4OTcsIDB4NDAsIDB4NkQsIDB4MDAsIDB4NjEsIDB4MDksIDB4ODQsIDB4MjUsIDB4MTAsIDB4MTYsIDB4NDAsIDB4MTAsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweDAwLCAweDQwLCAweDhCLCAweDA4LAorMHg0QywgMHgxMywgMHgzMCwgMHgwOCwgMHhDMCwgMHgwMCwgMHg0MiwgMHhEMywgMHgxMCwgMHgwQywgMHgwMywgMHgzMCwgMHgwQywKKzB4NDAsIDB4MjAsIDB4MDIsIDB4ODMsIDB4MDAsIDB4MkMsIDB4MDMsIDB4MTIsIDB4MDQsIDB4QzIsIDB4MDIsIDB4MDAsIDB4OEYsCisweDA4LCAweDFDLCAweDEyLCAweDMwLCAweDAwLCAweEU1LCAweDEzLCAweDAwLCAweEM3LCAweDAwLCAweDNDLCAweDIwLCAweEYwLAorMHgwNCwgMHhDMCwgMHgyMSwgMHgwMCwgMHhEMywgMHgwOCwgMHg0QywgMHgyMywgMHgzMCwgMHgwRCwgMHhDMCwgMHg0OCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4MEQsIDB4MDAsIDB4QTcsIDB4MDgsIDB4RkMsCisweDAzLCAweEYwLCAweDBGLCAweEM4LCAweDFGLCAweDAwLCAweEZGLCAweDgwLCAweEZELCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgzRiwgMHgwQSwgMHhCRSwgMHg4MCwgMHhGQywgMHgwMywgMHhGNCwgMHgwMywgMHhDMiwgMHgwRiwgMHgwMiwgMHhFRiwgMHgyMCwKKzB4RUMsIDB4MDIsIDB4RjAsIDB4ODMsIDB4QzAsIDB4M0YsIDB4MDIsIDB4RkIsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjEsIDB4MDYsCisweEMwLCAweDJBLCAweDAyLCAweEZGLCAweDA4LCAweEZDLCAweDIzLCAweEYwLCAweDhGLCAweEMwLCAweDBCLCAweDYwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywgMHgwMCwgMHhDRiwgMHgwMCwgMHg1QywgMHgwNSwKKzB4MzAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4REYsIDB4MEQsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsCisweDAwLCAweDEzLCAweDAwLCAweENELCAweDAzLCAweDM0LCAweDBELCAweEQ4LCAweDA1LCAweDEwLCAweDEzLCAweDAwLCAweDdDLAorMHgwMiwgMHg3MCwgMHgwMSwgMHhDNCwgMHgxMywgMHgwMCwgMHg1MywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhEMCwKKzB4MzQsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NEUsIDB4MDEsIDB4MzAsIDB4MTUsIDB4QzAsIDB4NTQsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDM5LCAweDAwLCAweEVELCAweDgwLCAweDg0LCAweDAxLCAweDEwLAorMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhDRCwgMHgxMCwgMHg4NCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgyQiwgMHgxMCwKKzB4ODEsIDB4MDQsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MDQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MjEsIDB4MDAsIDB4QjQsIDB4MDIsCisweDExLCAweDA2LCAweDQ4LCAweDNCLCAweDAwLCAweDYxLCAweDAwLCAweEI0LCAweDAzLCAweEQyLCAweDBGLCAweDQwLCAweDM4LAorMHgyMCwgMHg2RCwgMHgwMCwgMHg4NCwgMHgwMSwgMHgxMCwgMHgwNiwgMHg0MCwgMHg0OCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4OTQsIDB4MDcsIDB4MTAsIDB4MUEsCisweDUwLCAweDY4LCAweDAwLCAweEVELCAweDA1LCAweDg0LCAweDQ3LCAweEQ4LCAweDFFLCAweDQwLCAweDZGLCAweDAwLCAweEExLAorMHgxRCwgMHg4NSwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHhDOSwgMHgxOCwgMHhFMSwgMHgwMSwgMHhGNCwgMHgwRSwgMHg1MCwKKzB4MTIsIDB4NDAsIDB4NUIsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDUsIDB4RDAsIDB4MUUsIDB4NDIsIDB4NzgsIDB4MDAsCisweEVELCAweDAxLCAweDg0LCAweDg3LCAweDEwLCAweDFFLCAweDQwLCAweDBDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHg3MywgMHgwMiwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwKKzB4QjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDcsIDB4RDAsIDB4MEQsIDB4NDAsIDB4QTMsIDB4MDEsIDB4QzEsIDB4NDAsCisweDA0LCAweDA5LCAweDEwLCAweDhELCAweDQwLCAweDc2LCAweDAwLCAweEMxLCAweDAzLCAweDM0LCAweDBGLCAweDEwLCAweDg4LAorMHg0MiwgMHgzMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwNywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NDgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE3LCAweEEwLCAweDk1LCAweDAwLCAweDVGLCAweDAwLCAweDVDLCAweDAxLCAweDM0LCAweDA1LCAweEMwLCAweDFDLAorMHgwMSwgMHg1RiwgMHgwMCwgMHg0QywgMHgwMSwgMHhGMCwgMHgwNywgMHhDMCwgMHhERiwgMHg0NCwgMHg3MywgMHgwMCwgMHhDQywKKzB4MzEsIDB4MzAsIDB4MTcsIDB4QzIsIDB4OUQsIDB4NDAsIDB4NzMsIDB4MDcsIDB4RkMsIDB4MjksIDB4NzIsIDB4MTYsIDB4QzAsCisweDE3LCAweDUwLCAweDUzLCAweDIwLCAweDdDLCAweDAxLCAweEYxLCAweDA1LCAweEMwLCAweDE0LCAweDEwLCAweDVGLCAweDAwLAorMHg0RCwgMHgwMSwgMHgzNCwgMHgwNSwgMHhEMCwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MDgsIDB4MDUsIDB4MDQsIDB4MUQsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjIsIDB4MDEsIDB4QzgsIDB4MDMsIDB4MDQsCisweDFGLCAweDQwLCAweDdELCAweDA4LCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDEwLCAweDFGLCAweDIwLCAweDdDLCAweDAwLAorMHhGMiwgMHgxMSwgMHhEMCwgMHgwNywgMHgwNCwgMHgwRiwgMHgxMiwgMHgzQywgMHgwOCwgMHhGMSwgMHg0MSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MTEsIDB4QzgsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsCisweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMiwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMiwgMHg5MCwKKzB4MDEsIDB4N0MsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsCisweDA5LCAweEMwLCAweDY0LCAweDAwLCAweDkzLCAweDA1LCAweDRDLCAweDA2LCAweDEwLCAweDA5LCAweEM4LCAweDI0LCAweDAwLAorMHg5MywgMHgwMCwgMHg2NCwgMHgwQSwgMHgzMCwgMHgwOSwgMHhDMCwgMHhFNCwgMHgxMCwgMHg5RiwgMHgwMiwgMHg0RCwgMHgwQSwKKzB4MzAsIDB4NTksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweEE2LCAweDEwLCAweDlELCAweDAwLCAweDQ1LCAweDBBLCAweEQwLCAweDA4LCAweEMwLCAweDY2LCAweDAwLCAweDkxLCAweDAxLAorMHgzNCwgMHgxQSwgMHgxMiwgMHgwOSwgMHg0OCwgMHhBNCwgMHgwMiwgMHg5NSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMiwgMHg5OSwKKzB4NTEsIDB4MjQsIDB4MDgsIDB4OTEsIDB4MjUsIDB4NDQsIDB4QTYsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjAsIDB4MDAsIDB4OTEsCisweDAyLCAweDA0LCAweDBBLCAweDEwLCAweDI5LCAweDUwLCAweDY0LCAweDA4LCAweDlELCAweDQyLCAweDQ0LCAweDBBLCAweDEwLAorMHgzOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwKKzB4ODAsIDB4QkQsIDB4MDAsIDB4QzQsIDB4MDIsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MjQsIDB4NDAsIDB4OTUsIDB4MDgsIDB4NzQsCisweDIyLCAweDE0LCAweDA5LCAweDQ4LCAweEIwLCAweDAwLCAweEQ5LCAweDA0LCAweDI0LCAweDAyLCAweDE0LCAweDA5LCAweDQwLAorMHgyNCwgMHg0MiwgMHhEMSwgMHgwMCwgMHg0NSwgMHg0MiwgMHg1MCwgMHgwOSwgMHg1MiwgMHgyNCwgMHg0MCwgMHhBMSwgMHgwMCwKKzB4RjQsIDB4MDIsIDB4MTAsIDB4MkEsIDB4NDIsIDB4MkMsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QTQsIDB4MDIsIDB4MTAsIDB4MEIsCisweDQyLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDY4LCAweDAwLAorMHhFRCwgMHgwMCwgMHg4NCwgMHgwNiwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyMiwgMHgwMSwgMHg4NSwgMHgwNCwgMHg3NCwgMHgwMiwKKzB4MTAsIDB4NDgsIDB4NDAsIDB4MjAsIDB4MDEsIDB4OEQsIDB4MDQsIDB4MjUsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4NjAsCisweDIwLCAweDgxLCAweDg0LCAweDA1LCAweDEyLCAweDE0LCAweDA4LCAweDQwLCAweDJDLCAweDAwLCAweEExLCAweDAxLCAweEQ0LAorMHgwMiwgMHgxMCwgMHgwQSwgMHg0MiwgMHg2OCwgMHg4MCwgMHhBRCwgMHgwMSwgMHhBNCwgMHgwNiwgMHgxMCwgMHgxQSwgMHg0MCwKKzB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4ODYsIDB4MDIsIDB4MUYsCisweDBBLCAweDBELCAweDI4LCAweEYwLCAweEEyLCAweEMwLCAweDk0LCAweDAyLCAweDE3LCAweDBBLCAweDdDLCAweDI4LCAweDMwLAorMHhBNSwgMHhEMCwgMHg4NCwgMHgwMiwgMHgxQiwgMHgwQSwgMHgyQywgMHgyOCwgMHgzMSwgMHhBMSwgMHhEMCwgMHg4MCwgMHgyMiwKKzB4MTMsIDB4MDAsIDB4NEMsIDB4MjgsIDB4NzAsIDB4QTEsIDB4QzAsIDB4ODQsIDB4MDIsIDB4MTMsIDB4MEEsIDB4N0MsIDB4MjksCisweDMwLCAweEExLCAweEMwLCAweDA0LCAweDAwLCAweDBGLCAweDBBLCAweDJDLCAweDI4LCAweDMyLCAweEEyLCAweEMwLCAweDc3LAorMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDIsIDB4OUIsIDB4MDgsIDB4RUMsIDB4MDIsIDB4RjQsIDB4OEIsCisweEM4LCAweDJCLCAweDAyLCAweEI3LCAweDA4LCAweERDLCAweDIzLCAweEYwLCAweDhCLCAweEMyLCAweDJGLCAweDAwLCAweEJGLAorMHg2OCwgMHhCQywgMHgyMiwgMHhGMCwgMHgwQiwgMHhDMiwgMHgyNywgMHgwMCwgMHg5RiwgMHgyMCwgMHg2QywgMHgwMiwgMHhGNCwKKzB4MDksIDB4QzgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjQsIDB4MDksIDB4QzAsIDB4NjcsIDB4NjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDJGLCAweDAwLCAweEYzLCAweDI4LCAweERDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHg0MiwgMHhCMywgMHgwNCwgMHhDQywgMHgwMiwgMHgzMCwgMHhDRiwgMHhDMCwKKzB4MkIsIDB4MDAsIDB4QTMsIDB4MDUsIDB4NEQsIDB4MTYsIDB4MzIsIDB4OUIsIDB4QzAsIDB4QUYsIDB4MTAsIDB4QjMsIDB4MDUsCisweERDLCAweDM2LCAweDMwLCAweDBCLCAweEM0LCAweDJDLCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDhCLAorMHhDMCwgMHgzQywgMHgxOCwgMHhCRiwgMHg0MCwgMHhGQywgMHgyMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHg2MywgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MDEsIDB4MDEsIDB4MDQsIDB4NDQsIDB4NDEsCisweEQwLCAweDAxLCAweDQxLCAweDA3LCAweDAyLCAweDExLCAweDE0LCAweDQ0LCAweDEwLCAweDEwLCAweEMwLCAweDQwLCAweDg3LAorMHg0NCwgMHgxMSwgMHgxNywgMHg0NCwgMHg1QywgMHgxNCwgMHgzMSwgMHg0NCwgMHg0NywgMHgwMCwgMHgxMSwgMHgyMiwgMHg0NCwKKzB4MDQsIDB4MTAsIDB4NTUsIDB4NDEsIDB4NDQsIDB4MDUsIDB4NTEsIDB4MTQsIDB4NzQsIDB4MTAsIDB4RDAsIDB4NDEsIDB4NTAsCisweDA0LCAweDAwLCAweDVELCAweDEwLCAweDc0LCAweDAxLCAweEQwLCAweDQ1LCAweDQxLCAweDczLCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHg0NSwgMHg4MSwgMHgwNCwgMHgxNCwgMHgxMiwgMHhEMCwKKzB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MEMsIDB4MjQsIDB4NTIsIDB4MTAsIDB4NDgsIDB4NDQsIDB4MjMsIDB4MDMsCisweDgxLCAweDA4LCAweDA0LCAweDIyLCAweDEwLCAweDY4LCAweDQwLCAweDI3LCAweDAxLCAweDg5LCAweDA4LCAweDM0LCAweDFBLAorMHgxNCwgMHgwOSwgMHg1MCwgMHgyNCwgMHgwMCwgMHg4OSwgMHgyNCwgMHgzNCwgMHg1MiwgMHhEMSwgMHg0OCwgMHg0MCwgMHgyMCwKKzB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDIxLCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweEQyLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg2NSwgMHgwMiwgMHgxNCwgMHgyOSwgMHg0MCwgMHhBNywgMHgwMSwgMHg5MSwKKzB4MTEsIDB4NDQsIDB4MTIsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjcsIDB4MDAsIDB4OTksIDB4MDYsIDB4NjQsIDB4MEEsIDB4MTAsCisweDE5LCAweDQwLCAweDI0LCAweDQwLCAweDk5LCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4MjAsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NUMsIDB4MEEsIDB4RjAsIDB4MDksIDB4QzAsCisweEE3LCAweDAxLCAweDkzLCAweDAwLCAweDZELCAweDA2LCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAxLAorMHg0QywgMHgwQSwgMHgzMCwgMHg2OSwgMHhDMCwgMHgyMywgMHgyNCwgMHg5QiwgMHgwMCwgMHg3QywgMHgwNiwgMHgzMiwgMHgxOCwKKzB4QzAsIDB4MjQsIDB4MDAsIDB4OUEsIDB4MDIsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4ODAsIDB4OUYsCisweDAyLCAweDdDLCAweDBBLCAweEYwLCAweDI5LCAweEMwLCAweDE3LCAweEEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNiwgMHgwOCwgMHgyNSwgMHgxMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyMywKKzB4MDAsIDB4OEYsIDB4MDAsIDB4NUMsIDB4NEUsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4NDQsIDB4OEYsIDB4NDAsIDB4N0MsCisweDAyLCAweEYyLCAweDA5LCAweEMyLCAweDI3LCAweDQwLCAweDg3LCAweDAxLCAweDU0LCAweENBLCAweEYwLCAweDA5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMSwgMHgwOSwgMHhDMCwgMHgyNywgMHgwQywgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDA4LCAweDA1LCAweDA0LCAweDFGLCAweDA0LCAweDRDLCAweDA4LCAweEI0LCAweDAxLCAweEQwLCAweDA0LCAweDAxLAorMHgxMywgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMiwgMHg0QywgMHgwOCwKKzB4MzAsIDB4MjEsIDB4QzAsIDB4ODQsIDB4MDAsIDB4MTMsIDB4MDEsIDB4MEMsIDB4MDAsIDB4QjQsIDB4MDEsIDB4QzAsIDB4MDcsCisweDAwLCAweDFGLCAweDA2LCAweDRELCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA3LCAweDAyLCAweDFGLCAweDAyLCAweDRELAorMHg0OCwgMHgzNCwgMHgyMSwgMHhEMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4REMsIDB4MDAsIDB4NkQsIDB4MDAsIDB4QzQsIDB4MDUsIDB4MzAsIDB4MDUsIDB4NDAsIDB4MUMsIDB4MDAsIDB4NTEsCisweDAwLCAweEM1LCAweDA1LCAweDEwLCAweDA3LCAweDQ4LCAweDFDLCAweDAwLCAweDUxLCAweDIwLCAweDQ0LCAweDAxLCAweDUwLAorMHg2NywgMHg0MCwgMHgxQywgMHg0OCwgMHg3MSwgMHgxMCwgMHhFQywgMHgwOSwgMHgxMCwgMHgxNSwgMHg0MCwgMHgxMywgMHgwMCwKKzB4N0QsIDB4ODMsIDB4QzQsIDB4MDEsIDB4MDAsIDB4MTcsIDB4NDAsIDB4MUYsIDB4MDAsIDB4N0QsIDB4MDAsIDB4QzQsIDB4MDksCisweDEwLCAweDA3LCAweDQwLCAweDUwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLAorMHhGMiwgMHgwMiwgMHg4RCwgMHgwMiwgMHgwNCwgMHgwNywgMHg1MCwgMHgwQywgMHg0MCwgMHhCMCwgMHg0MCwgMHhDNSwgMHgwMCwKKzB4NDQsIDB4MEYsIDB4MTAsIDB4OEMsIDB4NDAsIDB4MjAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NDUsIDB4MDMsIDB4MTgsIDB4NkMsCisweDQ0LCAweDMwLCAweDIwLCAweEMxLCAweDAxLCAweDA0LCAweDA3LCAweDEwLCAweDE4LCAweDQwLCAweDMzLCAweDA4LCAweENELAorMHgwMywgMHgwNCwgMHgwNSwgMHgxMCwgMHg4OSwgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgwQiwgMHgxMCwKKzB4MEMsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsCisweDEwLCAweDJELCAweDA0LCAweDg0LCAweDQ3LCAweDUwLCAweERGLCAweDQyLCAweDA4LCAweDA0LCAweEU1LCAweDAwLCAweDg0LAorMHg0MSwgMHgxMCwgMHgxRSwgMHg0MCwgMHgyQywgMHgwMCwgMHhGMSwgMHgwMCwgMHg4NCwgMHgxMywgMHg1MCwgMHgxRSwgMHg1MCwKKzB4M0MsIDB4MDUsIDB4NDEsIDB4MjAsIDB4QTQsIDB4MEIsIDB4MTAsIDB4MEUsIDB4NDEsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDMsCisweDg0LCAweDBELCAweDExLCAweDAyLCAweDQwLCAweDBCLCAweDAwLCAweEVELCAweDAxLCAweDg0LCAweDA3LCAweDEwLCAweDFFLAorMHg0NCwgMHgxNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OSwgMHgwMCwKKzB4QUYsIDB4MDcsIDB4Q0QsIDB4MDcsIDB4NzAsIDB4MUUsIDB4QzAsIDB4NDAsIDB4NDAsIDB4ODcsIDB4ODksIDB4OEMsIDB4MDQsCisweDM0LCAweDFFLCAweDEwLCAweDc4LCAweDQwLCAweEUzLCAweDMxLCAweENDLCAweDBGLCAweDM0LCAweDFFLCAweEMwLCAweEU4LAorMHgwMCwgMHg2MywgMHgwMSwgMHgwQywgMHgwNCwgMHgzNCwgMHgxQSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhDQywKKzB4MDYsIDB4MzQsIDB4MTIsIDB4QzAsIDB4NEIsIDB4MDAsIDB4RkQsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsCisweDU0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDAwLCAweDFGLAorMHgyMCwgMHg3QywgMHgwMywgMHgzMCwgMHgyQywgMHhDMCwgMHgwNywgMHgwMCwgMHhEQiwgMHgwNCwgMHgzQywgMHgwMCwgMHhGMiwKKzB4MDUsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDYsIDB4N0MsIDB4NUIsIDB4QjAsIDB4ODgsIDB4QzAsIDB4MTMsIDB4MDAsCisweDVGLCAweDIwLCAweDdDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweEI3LCAweDBELCAweERGLCAweDAwLCAweEZDLCAweDgwLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgwNywgMHgwMCwgMHhERiwgMHgyMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwOSwgMHhDMiwgMHg0MywKKzB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4N0QsIDB4MDAsIDB4MkYsIDB4MDEsCisweERDLCAweDEzLCAweEYwLCAweDNGLCAweEMwLCAweDRDLCAweDEwLCAweEY3LCAweDAxLCAweERDLCAweDA0LCAweDMwLCAweDFGLAorMHhDOCwgMHg2QywgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgwNywgMHgzMSwgMHgxQiwgMHhEMCwgMHg2RCwgMHgwMCwgMHg3MywKKzB4MDEsIDB4OUQsIDB4MDQsIDB4QjIsIDB4NEYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RjMsIDB4MDEsIDB4REMsIDB4MDUsIDB4MzAsCisweDFGLCAweEMwLCAweDRDLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDAzLCAweDA4LAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgzOSwgMHgwMCwgMHgyNywgMHgwMCwgMHg4NCwKKzB4MEEsIDB4RDAsIDB4OEYsIDB4NDEsIDB4MEMsIDB4MDAsIDB4RTEsIDB4MDAsIDB4RUMsIDB4MDAsIDB4MTIsIDB4NEEsIDB4NDAsCisweDA4LCAweDAyLCAweEUwLCAweDAwLCAweDg0LCAweDEzLCAweEExLCAweDBCLCAweDQwLCAweDM4LCAweDAwLCAweDYxLCAweDA4LAorMHg4NCwgMHgwMiwgMHg1MCwgMHgwRiwgMHg0MCwgMHgzQywgMHgwMiwgMHhBNywgMHgwMCwgMHhDNCwgMHgyMSwgMHgxMiwgMHgwNywKKzB4NDAsIDB4MDgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MkUsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweEFELCAweDAwLCAweDk0LCAweDIzLAorMHhEMCwgMHgwRSwgMHg0MCwgMHgwOCwgMHgwMCwgMHg4NSwgMHgwMCwgMHg5NCwgMHg0MCwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQywKKzB4MDAsIDB4RTEsIDB4MDgsIDB4ODQsIDB4MDMsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MjksIDB4MDIsIDB4MjEsIDB4MDAsIDB4RDQsCisweDAwLCAweDE0LCAweDJFLCAweDQwLCAweDM4LCAweDAwLCAweDYxLCAweDAwLCAweDk0LCAweDAyLCAweDEwLCAweDA2LCAweDQwLAorMHgwOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MzUsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsCisweDFDLCAweDQwLCAweDAwLCAweDAwLCAweEMxLCAweDAwLCAweDI0LCAweDAwLCAweDEyLCAweDMxLCAweDQwLCAweDMwLCAweDAwLAorMHhDMSwgMHgwMCwgMHgwNSwgMHg4MywgMHg5MCwgMHgxMCwgMHg0MCwgMHgxMCwgMHgwNCwgMHg0MSwgMHg2MSwgMHgwNCwgMHgwNCwKKzB4NTQsIDB4OUMsIDB4NDQsIDB4MzAsIDB4MDgsIDB4OTUsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MDAsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDEzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgzNSwgMHgwMCwgMHhGRiwgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwgMHgxRiwKKzB4RDAsIDB4MjQsIDB4MDAsIDB4RDcsIDB4MDAsIDB4MUMsIDB4MDQsIDB4MzAsIDB4OEQsIDB4RDUsIDB4NjAsIDB4MDAsIDB4RDMsCisweDBBLCAweENDLCAweDBCLCAweEIwLCAweDgzLCAweEQxLCAweDM5LCAweDQ4LCAweDEzLCAweDEwLCAweDVELCAweDAyLCAweDMwLAorMHgwRCwgMHhDNCwgMHhBNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg1QywgMHgwOSwgMHgzMCwgMHgwRCwgMHhDMCwgMHgwMCwgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDI3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLAorMHgwNywgMHgwMiwgMHhERiwgMHgyMCwgMHg1QywgMHgwOCwgMHhGNCwgMHgyRCwgMHhDMCwgMHhFNywgMHg0MCwgMHhERiwgMHgwOCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDIsIDB4MUYsIDB4MjAsIDB4N0MsIDB4QTIsIDB4NzQsIDB4MEQsCisweEMwLCAweDM3LCAweDAxLCAweEQ3LCAweDQwLCAweDdDLCAweDExLCAweEYwLCAweDJELCAweEMwLCAweDA3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MDgsIDB4MUYsIDB4MDAsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4MDEsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEIsCisweDAwLCAweEIyLCAweDAwLCAweENDLCAweDAwLCAweDMwLCAweDFGLCAweEMwLCAweDJDLCAweDQwLCAweDk3LCAweDAwLCAweDdDLAorMHg0MywgMHgzMiwgMHg1MywgMHhEMCwgMHgyRSwgMHgwMCwgMHgxMywgMHgwMCwgMHhGQywgMHgyMCwgMHgyMCwgMHgxRiwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4RkQsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEMsIDB4MTAsIDB4NzIsIDB4MDAsCisweEZDLCAweDI3LCAweEYwLCAweDA3LCAweEMwLCAweDAzLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg4MSwgMHgwMCwgMHgwNiwgMHgwOCwgMHgxMSwgMHgwMCwgMHg0NSwgMHgwQiwgMHhEMCwgMHgwRCwgMHhDOCwgMHg0NSwgMHgwMCwKKzB4RDEsIDB4MDAsIDB4NDQsIDB4MDQsIDB4MTAsIDB4QkQsIDB4NDEsIDB4NjQsIDB4MjAsIDB4OTEsIDB4MDgsIDB4MzQsIDB4MDMsCisweDEyLCAweDA5LCAweDQwLCAweDE1LCAweDAwLCAweDExLCAweDAxLCAweDdDLCAweDAwLCAweDUwLCAweDFELCAweDQwLCAweDc3LAorMHgwMCwgMHhERCwgMHgwOSwgMHg0NCwgMHgwNCwgMHhEMCwgMHgzRCwgMHg0OCwgMHhDNCwgMHgwNCwgMHhEMSwgMHgwMCwgMHg3NCwKKzB4MDUsIDB4RDAsIDB4QkQsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweEEwLCAweDc2LCAweDAwLCAweDQxLCAweDA4LCAweDQ0LCAweDIzLCAweEQwLCAweDBELCAweDQwLCAweDQ3LCAweDAwLCAweEM1LAorMHgwMCwgMHg0NCwgMHgwQywgMHgxMCwgMHgwRCwgMHg0MCwgMHhFNSwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMiwKKzB4MDAsIDB4NDEsIDB4MjYsIDB4MDAsIDB4MTEsIDB4MjMsIDB4MzQsIDB4MDAsIDB4RDgsIDB4NEQsIDB4NDAsIDB4MjcsIDB4MDEsCisweERELCAweDAwLCAweDY0LCAweDQ0LCAweEQwLCAweDZDLCAweDQwLCAweDQ0LCAweDgwLCAweEQ1LCAweDAxLCAweDc0LCAweDAzLAorMHhEMCwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4NzAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MDEsIDB4MDAsIDB4QzUsIDB4MDAsCisweDA0LCAweDgwLCAweDE0LCAweDBDLCAweDUwLCAweDIxLCAweDAwLCAweEMxLCAweDAwLCAweDc0LCAweDgzLCAweDE4LCAweDA4LAorMHg1MCwgMHgzMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MDAsIDB4ODAsIDB4ODUsIDB4MDEsIDB4MzQsIDB4MDIsIDB4RDAsCisweDBDLCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDM2LAorMHgwMCwgMHg5MywgMHg4MCwgMHg0QywgMHg4MSwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwNywgMHgyMCwgMHhCNywgMHgwMCwgMHg0RCwKKzB4MDAsIDB4MzAsIDB4MEMsIDB4NDQsIDB4MjUsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4MzEsIDB4MDEsIDB4QzQsCisweDIyLCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDBELCAweEMyLCAweDJGLCAweDAwLCAweDRGLCAweDQwLAorMHg2QywgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNCwgMHgwMCwgMHg1NywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwNSwKKzB4QzQsIDB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4M0YsIDB4MDAsCisweDNGLCAweDQwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDBGLCAweDAwLCAweEZCLCAweDQwLCAweEZDLCAweDAwLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgyQSwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwMywgMHg0MCwgMHgxRiwKKzB4NDAsIDB4M0YsIDB4MDAsIDB4RDgsIDB4MDAsIDB4NzIsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAwLCAweEYwLCAweDBGLCAweEM4LCAweDBGLCAweDA4LCAweEZCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLAorMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4RkMsIDB4MTMsIDB4MzIsIDB4OEIsIDB4QzIsIDB4MkMsIDB4MDksIDB4RkYsIDB4MDEsIDB4RkMsIDB4NjMsIDB4MzAsCisweDRCLCAweEMyLCAweDdDLCAweDAwLCAweEJGLCAweDA0LCAweENDLCAweDgyLCAweDMwLCAweDJGLCAweEMxLCAweDdDLCAweDAwLAorMHhGMywgMHgwMSwgMHhGQywgMHg0MywgMHgzMCwgMHg0RiwgMHg1MCwgMHgyOCwgMHgwMCwgMHhGMywgMHgwMSwgMHhGRSwgMHgwNywKKzB4QjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RjksIDB4MDEsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MEYsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDc3LCAweDAwLCAweERELCAweDAxLAorMHhGNCwgMHg2MywgMHgxMCwgMHg4MSwgMHg0NiwgMHhFNCwgMHgwQSwgMHhERCwgMHg0MSwgMHhGNCwgMHgwQiwgMHg1MCwgMHg5MSwKKzB4NDIsIDB4NzQsIDB4MDAsIDB4OUMsIDB4MjIsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MkYsIDB4QzQsIDB4MzQsIDB4MDgsIDB4RDUsCisweDIxLCAweEY0LCAweDBGLCAweDQxLCAweDlGLCAweDQwLCAweEM0LCAweDAyLCAweEQxLCAweDAxLCAweDc0LCAweDA3LCAweDEwLAorMHgxNSwgMHg0MCwgMHg3NCwgMHgwMCwgMHhEOSwgMHgwMSwgMHg3NCwgMHgwNywgMHhEMCwgMHgxRCwgMHg0MCwgMHgwRiwgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MjgsIDB4Q0QsIDB4ODAsIDB4MzQsCisweDEzLCAweDAwLCAweDA4LCAweDQ4LCAweDQwLCAweDIwLCAweENELCAweDgwLCAweDMwLCAweDAzLCAweDEyLCAweDEwLCAweDQwLAorMHgzMCwgMHgxMCwgMHgwRCwgMHgxQywgMHgwNCwgMHg3NiwgMHgxMCwgMHg0QywgMHg0MCwgMHgzMywgMHgwNSwgMHhDMSwgMHg0MCwKKzB4MzQsIDB4ODMsIDB4ODAsIDB4MEMsIDB4NDAsIDB4MjAsIDB4MDgsIDB4QzEsIDB4ODAsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MEQsCisweDQwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDRGLCAweDgwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywKKzB4MTEsIDB4MTEsIDB4NDAsIDB4NjQsIDB4MDAsIDB4REQsIDB4NDAsIDB4NjQsIDB4MDMsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MzQsCisweDIwLCAweDA5LCAweDAzLCAweDA0LCAweDA2LCAweDEwLCAweDBELCAweDQ0LCAweDM1LCAweDAwLCAweEQxLCAweDAwLCAweDc0LAorMHgwMywgMHg5MCwgMHgwRCwgMHg0MCwgMHg2NCwgMHgwNCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHg1MCwgMHgxOSwgMHg0MCwKKzB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4MDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDc0LCAweDAzLCAweDMwLAorMHgzMSwgMHhDMCwgMHg0NCwgMHgwMCwgMHhERiwgMHg0MCwgMHg3QywgMHgwMywgMHgzMiwgMHgxOSwgMHhDMCwgMHgzNCwgMHgwOCwKKzB4OUYsIDB4MDEsIDB4NEMsIDB4MDQsIDB4MzAsIDB4MEQsIDB4QzYsIDB4MzcsIDB4MDAsIDB4RDEsIDB4ODAsIDB4N0MsIDB4ODMsCisweEEwLCAweDBELCAweEMwLCAweDY0LCAweDAwLCAweEQzLCAweDAwLCAweDc0LCAweDAzLCAweEIwLCAweDNELCAweEMxLCAweDM2LAorMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwgMHg4MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDIsCisweEMwLCAweDA3LCAweDAwLCAweEZGLCAweDQwLCAweEZDLCAweDAzLCAweEYwLCAweDAwLCAweDQwLCAweDNGLCAweDAwLCAweDlGLAorMHgyMCwgMHg3QywgMHg4MCwgMHhGMSwgMHgwRiwgMHhDMCwgMHgzRSwgMHgwMCwgMHhGRCwgMHgwMCwgMHhGQywgMHgwMywgMHg3MiwKKzB4MEYsIDB4NDAsIDB4MEIsIDB4MDAsIDB4RkQsIDB4MDAsIDB4RkMsIDB4MDMsIDB4QjAsIDB4MEYsIDB4NDAsIDB4M0QsIDB4MDAsCisweEZCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHgzQywgMHgwMywgMHgzMCwgMHhBOSwgMHhDMCwKKzB4MDQsIDB4MDAsIDB4RDMsIDB4NjAsIDB4MkMsIDB4NjMsIDB4MzAsIDB4MDksIDB4QzAsIDB4MzQsIDB4MDAsIDB4OUIsIDB4MjAsCisweDRDLCAweDAwLCAweDMwLCAweDhDLCAweEMwLCAweDM0LCAweDAwLCAweEQyLCAweDAwLCAweDNDLCAweDAzLCAweDMwLCAweDBDLAorMHhDMCwgMHgyNywgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgyMywgMHhGMSwgMHgyRCwgMHhDMCwgMHgzNywgMHgxMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MkIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEzLCAweEEwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweEY0LCAweDAzLCAweDEwLCAweDMxLCAweDQwLCAweDI0LAorMHgwMCwgMHhEMSwgMHgwMCwgMHhGNCwgMHgwQiwgMHgxMCwgMHgwOSwgMHg0NCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwKKzB4MDIsIDB4MTIsIDB4QUYsIDB4NDAsIDB4NzQsIDB4MjAsIDB4RDEsIDB4MDAsIDB4RjQsIDB4MDMsIDB4MTAsIDB4MEYsIDB4NDAsCisweDI3LCAweDAwLCAweEQxLCAweDgwLCAweDM0LCAweDBGLCAweEQwLCAweDBDLCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDAwLAorMHhGNCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDcsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTQsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDAsCisweEMxLCAweDAwLCAweDM0LCAweDBCLCAweDEwLCAweDA4LCAweDQwLCAweDMwLCAweDAwLCAweDBELCAweDAwLCAweDA0LCAweDAyLAorMHgxMCwgMHgyQywgMHg0MCwgMHgzNCwgMHgwMiwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgwMywKKzB4MDAsIDB4QzUsIDB4MjAsIDB4MzQsIDB4NEYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsCisweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDBGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHg4MCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgyNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFMSwKKzB4MDEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsIDB4MDUsIDB4MTAsCisweDFFLCAweDQwLCAweEY4LCAweDAwLCAweEUxLCAweDAxLCAweEY0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDVCLCAweDAwLAorMHhFMSwgMHgwMSwgMHhCMCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywKKzB4RDAsIDB4MUUsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsCisweDMwLCAweDAwLCAweENGLCAweDAwLCAweDNDLCAweDAzLCAweDMwLCAweDJELCAweEMwLCAweDEwLCAweDA4LCAweEMzLCAweDA4LAorMHg3QywgMHgwMywgMHgzMCwgMHg0NCwgMHhDMCwgMHgzMCwgMHgwMiwgMHg0RiwgMHgwMCwgMHgwQywgMHgwMywgMHgzMCwgMHg4RCwKKzB4RTAsIDB4MzQsIDB4MDAsIDB4QzMsIDB4MDgsIDB4N0MsIDB4MjMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MTMsIDB4MDAsIDB4QzcsCisweDAwLCAweDNDLCAweDAzLCAweEYxLCAweDBDLCAweEMwLCAweDMzLCAweDAwLCAweENGLCAweDAwLCAweDNDLCAweDAzLCAweEYwLAorMHgwQywgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgzNSwKKzB4MTAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEIsIDB4QzAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NzQsCisweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDM3LCAweDIwLCAweERFLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDJELCAweEMwLAorMHgzNywgMHgwMCwgMHhERiwgMHgwOCwgMHg3QywgMHg4MywgMHhCNCwgMHgwRCwgMHhDMSwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsCisweEMwLCAweDBCLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDM3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHhCMywgMHgzMCwgMHgxNSwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHg0QiwKKzB4RjAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4MjgsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4QUQsIDB4QzAsIDB4MzcsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDUzLCAweEYwLCAweDFELCAweEM0LCAweDM0LCAweDEwLCAweEQzLCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MzksIDB4MDAsIDB4RUQsCisweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDEzLCAweEQwLAorMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMywgMHg0RSwgMHg0MCwgMHgzQiwgMHgwMCwKKzB4RUQsIDB4MDAsIDB4QjQsIDB4MUIsIDB4RDAsIDB4NEUsIDB4NDEsIDB4MTgsIDB4MDgsIDB4RTEsIDB4ODAsIDB4QjQsIDB4MDMsCisweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDBCLCAweEQwLCAweDBFLCAweDQwLCAweDRGLAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwMSwKKzB4QjAsIDB4MTcsIDB4MTAsIDB4MUMsIDB4NTEsIDB4NTgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MjcsIDB4RDAsIDB4MUUsCisweDQwLCAweDdCLCAweDAwLCAweDZELCAweDIxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELAorMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxQywgMHg0MCwgMHg3MCwgMHg0MCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwKKzB4MUUsIDB4NDEsIDB4N0IsIDB4ODAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4MTMsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDc0LAorMHg4MywgMHgxMCwgMHgzQywgMHg0NSwgMHhGMCwgMHgwMiwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEOCwgMHhCQywgMHg0MCwKKzB4MzMsIDB4MDAsIDB4REQsIDB4MDEsIDB4MzQsIDB4MkIsIDB4RDEsIDB4MEQsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDcwLCAweDAwLCAweEQxLCAweDgwLCAweDM0LCAweDAzLCAweEQwLCAweDdDLAorMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg2MCwgMHg1QiwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDAsIDB4NUYsIDB4QzAsIDB4N0MsIDB4MDEsCisweDMwLCAweDE3LCAweEMwLCAweERDLCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDE3LCAweEMwLCAweDE3LAorMHgwMCwgMHg3RiwgMHgwNSwgMHhGQywgMHgyNSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywKKzB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NTgsIDB4MDEsIDB4NTMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MzcsIDB4QzAsCisweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDVGLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGNCwKKzB4MDEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzEsIDB4MDYsIDB4MTAsCisweDFGLCAweDQxLCAweDdDLCAweDAwLCAweEUwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhEMCwgMHhDNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDU5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyNiwgMHhGMCwgMHgwOSwgMHhDNCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4OTksIDB4QzAsIDB4NjQsIDB4MDAsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDk3LCAweDAwLCAweDRDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MTksIDB4NDAsCisweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc2LCAweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLAorMHg0NCwgMHgwMiwgMHhEMCwgMHg2OSwgMHhDMCwgMHhBNCwgMHgwMSwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4QTcsIDB4MTIsIDB4OTEsIDB4NDAsIDB4MEMsIDB4OUEsIDB4MTEsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsCisweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OUQsIDB4NDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MjAsIDB4NDQsCisweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDBBLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLAorMHhBNywgMHgwMCwgMHg5NSwgMHgwMCwgMHg0NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDIwLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDEyLCAweDEwLCAweDU4LCAweDQwLCAweDIzLCAweDAxLAorMHg4RCwgMHg0MCwgMHgzNCwgMHgxNiwgMHhEMCwgMHg0OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHg0NCwgMHgwNCwgMHgxMiwKKzB4RDAsIDB4NDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MTIsIDB4RDgsIDB4NDgsIDB4NDAsIDB4MjMsCisweDAxLCAweDkxLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDM0LAorMHgxMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg0MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwKKzB4QjAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4M0MsIDB4MjgsIDB4MzAsIDB4QTEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsCisweDAwLCAweDc0LCAweDI4LCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDBBLCAweDRELCAweDI4LCAweEYxLAorMHhBMSwgMHg0MCwgMHg4NCwgMHgwMiwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwKKzB4MTcsIDB4MDAsIDB4NEQsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsCisweEYwLCAweDAxLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGNCwgMHg4QiwgMHhDMCwgMHgyRiwgMHgwQSwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MjIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4RkYsIDB4MDgsIDB4RkMsIDB4MjIsIDB4RjAsIDB4ODksCisweEQwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDg5LCAweEMwLCAweDJGLCAweDAyLCAweDlGLAorMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4NzcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDFFLCAweEYwLCAweERCLCAweEMwLCAweDY3LCAweDAxLCAweDlGLCAweDAwLCAweEZDLAorMHgzNiwgMHgzNCwgMHg1OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwNywgMHg0QywgMHgxRSwgMHhGMSwgMHg3QiwgMHhEMCwKKzB4QUMsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4NTksIDB4QzAsIDB4NkYsIDB4MDEsIDB4OUIsIDB4MDAsCisweEZDLCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHg3NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMCwKKzB4MUQsIDB4MDAsIDB4NzQsIDB4M0MsIDB4RDAsIDB4RjUsIDB4NDIsIDB4ODcsIDB4MDIsIDB4MUQsIDB4MDAsIDB4NzQsIDB4M0MsCisweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDA1LCAweDQ0LCAweDFELCAweEQwLCAweDcxLCAweDQwLCAweDQ0LAorMHgwMSwgMHgxRCwgMHgwMCwgMHg3NCwgMHgwOCwgMHhEMCwgMHgyMSwgMHg0MCwgMHg5NywgMHgwMiwgMHgxMSwgMHgwMCwgMHg3NCwKKzB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MjAsIDB4RDAsIDB4MDEsIDB4NDAsCisweDYzLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAwLCAweDhELAorMHgwMCwgMHgzNCwgMHgxMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxMCwKKzB4MjgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDYsIDB4MDQsIDB4MEEsIDB4RDAsIDB4MjgsIDB4NDAsIDB4MjAsIDB4MDAsCisweDhELCAweDAwLCAweDM0LCAweDBBLCAweEQwLCAweDg4LCAweDQwLCAweDIzLCAweDAwLCAweDg5LCAweDAwLCAweDM0LCAweDAyLAorMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg0QiwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsCisweDc0LCAweDAyLCAweEQwLCAweDQ5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDY5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4ODAsIDB4NzQsIDB4ODIsIDB4RDAsCisweDg5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTcsIDB4MTYsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MzksIDB4QzAsCisweDI3LCAweDAwLCAweDlGLCAweDA4LCAweDRDLCAweDA2LCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDNCwgMHgyMywgMHgwMCwgMHg5QiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgxOSwKKzB4NDEsIDB4MjcsIDB4MjAsIDB4OUQsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MTcsIDB4ODAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OEYsIDB4MDAsIDB4N0QsIDB4MTYsIDB4RjEsIDB4MDgsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA5LCAweENBLCAweDI3LCAweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3NCwgMHgwMiwgMHhGMCwgMHgwOSwgMHg4MCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDIxLCAweEMwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEM0LCAweDA3LCAweDAwLAorMHgxRiwgMHgwMiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg4MCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDQsIDB4MTcsIDB4MDAsIDB4N0MsIDB4NDAsIDB4RjIsIDB4MjEsIDB4QzAsIDB4MDQsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgxNCwgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgyNywKKzB4NDAsIDB4MTcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4RjQsIDB4MTksIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4NUQsCisweDAwLCAweDc0LCAweDAxLCAweEQwLCAweEM3LCAweDQwLCAweDlGLCAweDgzLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQwLAorMHgwNSwgMHg0MCwgMHg1RiwgMHgwMSwgMHg1MSwgMHgwMCwgMHhGNCwgMHgwMSwgMHg3MCwgMHgwNSwgMHg0MCwgMHgxNCwgMHgwMCwKKzB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDJDLCAweDQxLAorMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHg0NywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDAsIDB4MkMsIDB4NDAsIDB4RjMsIDB4MDAsIDB4Q0QsIDB4NDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsCisweDQwLCAweDUzLCAweDA4LCAweEM1LCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweENELAorMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg0MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsIDB4MEUsIDB4NDEsIDB4M0IsCisweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDA0LCAweEI0LAorMHgxMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwKKzB4MUIsIDB4MDAsIDB4RTEsIDB4NDAsIDB4QjQsIDB4MDksIDB4NTAsIDB4MEYsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsCisweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQyLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHgxMCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHgxNywgMHhGMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwOCwKKzB4RUYsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RjAsIDB4MUUsIDB4QzIsIDB4N0IsIDB4MDAsIDB4RUYsIDB4MEQsIDB4QkMsIDB4MzcsCisweEYwLCAweDE2LCAweEMwLCAweDdCLCAweDAwLCAweEVELCAweDQxLCAweEJDLCAweDA3LCAweEYwLCAweDFFLCAweEMwLCAweDVCLAorMHgwMCwgMHhFNywgMHgwMSwgMHhCQywgMHgwNCwgMHhGMCwgMHgwRSwgMHhDNCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCQywKKzB4MDcsIDB4RjAsIDB4MUUsIDB4QzAsIDB4NTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEI4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDUzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwOCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MDUsIDB4QzQsIDB4MTcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MTMsIDB4MTAsCisweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEM4LCAweDM3LCAweDA4LCAweERGLCAweDAwLCAweDdDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwKKzB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4NjMsIDB4RjAsIDB4MTcsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDksCisweEZDLCAweDI3LCAweEYzLCAweDFGLCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDgxLCAweEY4LCAweDQ3LCAweDMwLCAweDFGLAorMHg0OCwgMHg1RiwgMHgwMiwgMHhGRSwgMHgyMSwgMHhGQywgMHgwNywgMHhEMCwgMHg5RiwgMHg4MCwgMHg1RCwgMHgwMCwgMHhGMywKKzB4MDksIDB4RkMsIDB4MjcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDIsIDB4RkYsIDB4MDksIDB4RkMsIDB4MDcsIDB4RjAsCisweDFGLCAweEMwLCAweDFCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDM5LAorMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHg4NiwgMHg0MSwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwKKzB4MDEsIDB4QzAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDgsIDB4QjQsIDB4MDMsIDB4MTQsIDB4OEUsIDB4NDAsCisweDFBLCAweDAwLCAweEU5LCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBGLCAweDQyLCAweDFDLCAweDA1LCAweEU1LCAweDA4LAorMHhCNCwgMHgwOSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHg4RSwKKzB4NDAsIDB4NTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsCisweEVELCAweDAwLCAweEI0LCAweDIzLCAweDU4LCAweDA2LCAweDQwLCAweDNCLCAweDA2LCAweEVELCAweDgwLCAweEIwLCAweDAzLAorMHhEMSwgMHg4RSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwKKzB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEYsIDB4NDQsIDB4M0QsIDB4MDAsIDB4RTUsIDB4NDAsIDB4QjQsCisweDgxLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDIwLCAweEVELCAweDQwLCAweEI0LCAweDIzLCAweEQwLCAweDBFLCAweDQwLAorMHgyMywgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4QjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NzQsIDB4MDAsIDB4OTAsCisweDFDLCAweDQwLCAweDM3LCAweDEwLCAweENELCAweDAyLCAweDc0LCAweDI3LCAweDEwLCAweDA4LCAweDA4LCAweDAyLCAweDAwLAorMHhDOSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg3MCwgMHgwMCwgMHhDNSwgMHg0MCwgMHgzNCwgMHgwMSwKKzB4RDEsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MEIsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDM1LCAweDAwLCAweERGLCAweDAwLAorMHhGQywgMHgwMywgMHg3MCwgMHgxOSwgMHhDMCwgMHg3NywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgyRCwKKzB4QzMsIDB4MzcsIDB4MDAsIDB4RkYsIDB4NDQsIDB4RkMsIDB4MDMsIDB4MzEsIDB4MDksIDB4ODAsIDB4MjcsIDB4MTAsIDB4REUsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQ1LCAweDAwLCAweEQ3LCAweDQwLCAweDc4LCAweDAxLCAweEQwLAorMHgwRCwgMHhDMSwgMHgzNywgMHgxMCwgMHhERCwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg1NywgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MjAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDQ5LCAweEM0LCAweDM3LCAweDA0LCAweERGLCAweDIwLCAweDdDLCAweDBBLCAweEYwLCAweDBELCAweEM4LAorMHgzNywgMHgxMCwgMHhERiwgMHgxMCwgMHg3QywgMHg0MywgMHhGMCwgMHgyOSwgMHhDNCwgMHgyNiwgMHgyMCwgMHhEQiwgMHg4MCwKKzB4N0MsIDB4MDMsIDB4RjIsIDB4MEQsIDB4QzAsIDB4ODcsIDB4MDQsIDB4REUsIDB4MDAsIDB4N0MsIDB4MDksIDB4RjEsIDB4NEQsCisweEMwLCAweDM3LCAweDEwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywKKzB4RjAsIDB4MDMsIDB4QzAsIDB4M0IsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkMsIDB4MDAsIDB4MzAsIDB4MEYsIDB4QzEsIDB4M0YsCisweDA4LCAweEYzLCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDAzLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEJDLAorMHgwMywgMHgzNCwgMHgwRiwgMHhDMCwgMHg1RiwgMHgwMiwgMHhGRiwgMHgwMCwgMHhGQywgMHgwNSwgMHhEMCwgMHgwRiwgMHhDNCwKKzB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzQsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweEQwLAorMHg3OSwgMHg0OCwgMHgzNywgMHgzMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgxQywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwKKzB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MzEsIDB4NDAsIDB4NjcsIDB4MDQsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsCisweDEwLCAweDBELCAweDQwLCAweDE3LCAweDAxLCAweERELCAweDQwLCAweDc0LCAweDhELCAweEQwLCAweDBDLCAweDQ4LCAweDM0LAorMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0OCwgMHg4NywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MTksCisweDQwLCAweDM3LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDA2LCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDQwLCAweEQxLAorMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgxMSwgMHg0OCwgMHg0NywgMHgyMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHg5MCwKKzB4MEQsIDB4NDAsIDB4MTcsIDB4MDAsIDB4REMsIDB4MDAsIDB4NzQsIDB4MTEsIDB4RDAsIDB4MEQsIDB4NDIsIDB4MzUsIDB4MDAsCisweERELCAweDQwLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDA3LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMiwgMHgwOCwgMHg0MCwKKzB4MzMsIDB4MDAsIDB4QzEsIDB4ODAsIDB4MzQsIDB4MDIsIDB4MTUsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MjAsIDB4QzEsIDB4QzAsCisweDM0LCAweDAzLCAweDE0LCAweDA4LCAweDQ0LCAweDAzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDBDLAorMHg0MCwgMHgxMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMSwgMHhEMCwgMHgwRCwgMHg0NCwgMHgzMCwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDgsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEIwLCAweDM2LCAweDAwLCAweERGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDAxLCAweEM0LCAweDM3LAorMHg0MCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhGMywgMHgwMCwgMHhGQywKKzB4MDMsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsCisweDE3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEY4LCAweDBELCAweEMwLCAweDM1LCAweDgwLCAweERGLCAweDAwLAorMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgwNywgMHg2MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4QjgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4NDAsIDB4M0YsIDB4MjAsCisweEZGLCAweEMwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDgzLAorMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGOCwgMHgwMywgMHg3MCwgMHgwRiwgMHhDMCwgMHgxRiwKKzB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MjAsIDB4RkMsCisweDAzLCAweEYyLCAweDBGLCAweEMwLCAweDE3LCAweDYxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBMCwgMHg3RiwgMHgwMCwgMHhCMywgMHgwMiwgMHhDRCwgMHgyNywgMHgzMCwgMHgwQiwgMHhDMCwgMHgwQywgMHgwNSwgMHgzRiwKKzB4MDQsIDB4RkMsIDB4MDcsIDB4MzAsIDB4NDcsIDB4QzgsIDB4M0YsIDB4MDUsIDB4RkYsIDB4MDQsIDB4QkMsIDB4RDMsIDB4MzAsCisweDlCLCAweEMwLCAweDJDLCAweDAxLCAweDIzLCAweDg5LCAweENDLCAweDEyLCAweEYwLCAweDAzLCAweEM4LCAweDJDLCAweDAyLAorMHgzMywgMHgwNCwgMHhGQywgMHgwNywgMHhGMCwgMHgwRiwgMHhDMCwgMHg3QywgMHgxOCwgMHhCMywgMHgwMCwgMHhDQywgMHgwNCwKKzB4RjAsIDB4MUYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsCisweDM3LCAweDExLCAweDkxLCAweDAyLCAweDQ0LCAweDAzLCAweDEwLCAweDFCLCAweDUwLCAweDg0LCAweDEwLCAweDFELCAweDBCLAorMHg3NCwgMHgwNywgMHgxNCwgMHhCRCwgMHg0MCwgMHhGNywgMHgwMCwgMHhGRCwgMHg0OSwgMHhGNCwgMHgwRiwgMHgxMiwgMHg0OCwKKzB4NTAsIDB4RkMsIDB4NDAsIDB4MTEsIDB4ODQsIDB4NDQsIDB4NEEsIDB4RDAsIDB4MzEsIDB4NDQsIDB4QUMsIDB4MjMsIDB4MTMsCisweDBBLCAweDc0LCAweDAzLCAweEQxLCAweDA0LCAweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDAzLCAweDQ1LCAweDA1LCAweEQwLAorMHgxRCwgMHg0MCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywKKzB4MDQsIDB4OTEsIDB4OEMsIDB4MzQsIDB4MTMsIDB4MTQsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsCisweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDIzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDA4LCAweDQwLAorMHhBMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwNCwgMHgwQSwgMHhEMiwgMHgyMSwgMHg0MCwgMHgyMCwgMHg0MSwgMHg4MSwgMHgwMCwKKzB4MzQsIDB4MDMsIDB4RDgsIDB4MDgsIDB4NjAsIDB4MzIsIDB4MTAsIDB4QzEsIDB4ODIsIDB4MDQsIDB4MDAsIDB4RDAsIDB4MEMsCisweDQwLCAweDQ3LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDQwLAorMHg5MSwgMHgwMSwgMHg2NCwgMHgwMywgMHgxMCwgMHg4OSwgMHg0MCwgMHg2NCwgMHgwMCwgMHgxQywgMHgxMSwgMHg3NCwgMHgwMywKKzB4MTAsIDB4MUQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTQsIDB4MDksIDB4NDAsIDB4MzQsCisweDAwLCAweDE1LCAweDAxLCAweDQ1LCAweDQyLCAweEQwLCAweDQ5LCAweDQwLCAweDIwLCAweEMyLCAweDkxLCAweDAzLCAweDc0LAorMHgwMywgMHhEMCwgMHgwRCwgMHg1MCwgMHgzNiwgMHg0MCwgMHhEMSwgMHgwMSwgMHg0NiwgMHgwNywgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzcsIDB4MDAsIDB4ODMsCisweDAxLCAweDZDLCAweDAzLCAweDMwLCAweDA4LCAweEMwLCAweDQ0LCAweDIwLCAweDFFLCAweDAxLCAweDdDLCAweDAzLCAweDMwLAorMHgzRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHhDMCwgMHg3QywgMHgwMywgMHgzMCwgMHg5OSwgMHhDMCwgMHgyNCwgMHgwMiwKKzB4MTcsIDB4ODEsIDB4NEMsIDB4MDIsIDB4RjEsIDB4MDAsIDB4RDAsIDB4MjQsIDB4MDAsIDB4MTMsIDB4MDEsIDB4N0MsIDB4MDMsCisweEYwLCAweDBELCAweEUwLCAweDM2LCAweDAwLCAweDkzLCAweDAxLCAweDRDLCAweDA0LCAweEYyLCAweDBELCAweEMyLCAweDBCLAorMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHhCRiwgMHgwMCwKKzB4REMsIDB4MDMsIDB4RjAsIDB4MTksIDB4QzAsIDB4MEYsIDB4MTAsIDB4M0YsIDB4MDAsIDB4RjQsIDB4MDMsIDB4RjEsIDB4MEQsCisweEMwLCAweDdGLCAweDEyLCAweEZGLCAweDEwLCAweEJDLCAweDAzLCAweEMwLCAweDBCLCAweEMwLCAweDdGLCAweDIwLCAweDNCLAorMHgwMCwgMHhGOCwgMHgyNiwgMHhFMSwgMHgwMywgMHhDMCwgMHgyNywgMHgwMCwgMHgxNCwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwKKzB4NUYsIDB4QzAsIDB4QkQsIDB4MDAsIDB4RUYsIDB4MDAsIDB4RkMsIDB4ODEsIDB4RjEsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweDkzLCAweDA0LCAweDRDLAorMHgxMywgMHhGMCwgMHgwOSwgMHhDNCwgMHgyNCwgMHgwMCwgMHgxMywgMHgwMiwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4REYsIDB4NDAsIDB4NEMsIDB4MDMsIDB4QjAsIDB4MDksIDB4QzgsIDB4MjAsIDB4NDAsIDB4MTMsIDB4MDIsCisweDZDLCAweDBFLCAweEIwLCAweDAzLCAweEMwLCAweDM3LCAweDAwLCAweDkzLCAweDA2LCAweDZDLCAweDAzLCAweEQwLCAweDA4LAorMHhDMCwgMHgzNCwgMHg4MCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwRCwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MEIsCisweEQwLCAweDA5LCAweDUwLCAweDY0LCAweDA4LCAweDkxLCAweDAwLCAweDM0LCAweDJCLCAweEQwLCAweDBELCAweDQwLCAweEI0LAorMHgwMiwgMHhGRCwgMHgwNiwgMHhDNSwgMHg2RiwgMHgxMCwgMHg0OSwgMHg1NCwgMHhCNCwgMHgwMywgMHgxMCwgMHgyNCwgMHg0NCwKKzB4MDYsIDB4MTAsIDB4QjksIDB4NDUsIDB4MzcsIDB4MDAsIDB4OTEsIDB4ODMsIDB4NDQsIDB4MDMsIDB4RDEsIDB4QUQsIDB4NDAsCisweEI0LCAweDAyLCAweERELCAweDAwLCAweDc0LCAweDQ3LCAweDEwLCAweDFELCAweDQzLCAweDRGLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHg3MiwgMHgwMCwgMHhDMSwgMHgwMiwgMHg0NCwgMHg4QiwgMHhEMCwKKzB4NjgsIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MTIsIDB4MjAsCisweENELCAweDAyLCAweDA0LCAweDAzLCAweDkwLCAweDA5LCAweDQ4LCAweEYwLCAweDEwLCAweDExLCAweDIwLCAweDA0LCAweDRBLAorMHg5MiwgMHgxMCwgMHg0MCwgMHgyMywgMHgyMCwgMHgwOSwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzNiwKKzB4MTAsIDB4QzUsIDB4MDgsIDB4MzQsIDB4MDQsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MUYsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDc4LCAweDQwLCAweEUxLCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDlFLAorMHg0MCwgMHg2OCwgMHgwNCwgMHgyNSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMSwgMHgxQSwgMHg1MCwgMHg1OCwgMHgwMCwgMHhDRCwKKzB4ODksIDB4ODQsIDB4MDcsIDB4MTAsIDB4OUEsIDB4NDAsIDB4NzgsIDB4MDAsIDB4MzEsIDB4MjksIDB4ODUsIDB4MDQsIDB4MTAsCisweDEyLCAweDQwLCAweDZCLCAweDA4LCAweEE5LCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDE2LCAweDUwLCAweDdBLCAweDgwLAorMHhFRCwgMHg0MSwgMHhCNCwgMHgwNSwgMHgxMCwgMHgxRSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDQsIDB4NTMsIDB4MDAsIDB4MEUsIDB4MDMsIDB4RjAsIDB4MDgsIDB4RDAsCisweEE0LCAweDQwLCAweDA3LCAweDA4LCAweDNDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDMwLCAweDAyLCAweENGLCAweDAwLAorMHgwQywgMHgwMywgMHhCMCwgMHgwOCwgMHhDMCwgMHgzMCwgMHgwMCwgMHgwMywgMHg0QSwgMHg2QywgMHgwMiwgMHhCMCwgMHgwMCwKKzB4QzAsIDB4MzMsIDB4NDEsIDB4Q0IsIDB4MTAsIDB4MkMsIDB4MjMsIDB4RjAsIDB4MEMsIDB4RDAsIDB4MzIsIDB4MDIsIDB4Q0YsCisweDAwLCAweDNDLCAweDAwLCAweDM0LCAweDBDLCAweEMwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHhCOCwgMHgzOSwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGRCwgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwKKzB4MTAsIDB4N0IsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjgsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsCisweDAzLCAweEYwLCAweDBCLCAweEM0LCAweDNCLCAweDAwLCAweDNGLCAweDI4LCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLAorMHgzRiwgMHgwMCwgMHhGNywgMHgwMCwgMHhGQywgMHg4MywgMHhGMCwgMHgwRiwgMHhEMCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwOCwKKzB4QkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweEEwLCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDQ5LCAweEQwLCAweDJDLCAweDAwLAorMHgzMywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwNCwgMHg1QywgMHg0RiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4QjUsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NkMsIDB4MDIsIDB4RjIsIDB4MDEsIDB4QzAsIDB4QTcsCisweDAxLCAweEQzLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHg1NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4ODgsIDB4MzksIDB4MDAsIDB4QUQsIDB4NDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4OEMsIDB4NDQsIDB4MjgsIDB4MDAsIDB4MkIsCisweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweENELCAweDBFLCAweDA0LCAweDAzLCAweDEwLAorMHgwRSwgMHg0MCwgMHgzMCwgMHgwMiwgMHg2MSwgMHgwMCwgMHg4NiwgMHgwMCwgMHhEMCwgMHgwMiwgMHg0NCwgMHgyMywgMHgwNCwKKzB4RjEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MTAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDEsCisweEQwLCAweDBFLCAweDQwLCAweDRCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLAorMHg3OSwgMHgwMCwgMHhBRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxQSwgMHg0MCwgMHg2MCwgMHgwMCwgMHhBMSwgMHg0MSwKKzB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDUsIDB4OTQsIDB4MzcsIDB4MTAsIDB4M0IsCisweDQwLCAweDc5LCAweDA4LCAweDI5LCAweDExLCAweDg0LCAweDA2LCAweEQwLCAweDEyLCAweDQwLCAweEZCLCAweDAwLCAweEUxLAorMHg4MSwgMHg5NCwgMHg4NywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNSwgMHhEMCwKKzB4MUUsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsCisweDEwLCAweDhELCAweDA5LCAweDM0LCAweDAzLCAweEQwLCAweDlDLCAweDUwLCAweDcwLCAweDAwLCAweEM5LCAweDA2LCAweDM0LAorMHgwMywgMHhEMCwgMHgzQywgMHg0MCwgMHhCMywgMHgwNCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHgxNCwgMHgxQywgMHg0MCwKKzB4MzAsIDB4QzAsIDB4OTksIDB4MDYsIDB4MDUsIDB4MDEsIDB4RDEsIDB4MEMsIDB4NDQsIDB4NzMsIDB4MjAsIDB4QzEsIDB4MDMsCisweDA0LCAweDAzLCAweEQxLCAweDBELCAweDQxLCAweDYzLCAweDAwLCAweENELCAweDA2LCAweDM0LCAweDA3LCAweEQwLCAweDBDLAorMHg0MCwgMHg0QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNSwgMHgwMCwKKzB4N0YsIDB4MDIsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDQsIDB4QzAsIDB4NTgsIDB4MDEsIDB4NzMsIDB4MDIsIDB4N0MsIDB4MDEsCisweEYwLCAweDE2LCAweEMwLCAweDlGLCAweDEwLCAweDVGLCAweDAwLCAweDVDLCAweDAxLCAweDMwLCAweDA0LCAweEM0LCAweDE1LAorMHgwMCwgMHg3QiwgMHgwMCwgMHhDQywgMHg0NSwgMHhGMSwgMHgwNywgMHhDMCwgMHgxNywgMHg0OCwgMHg3MywgMHgwNSwgMHg1QywKKzB4MDEsIDB4RjAsIDB4MjcsIDB4QzAsIDB4NTcsIDB4MDAsIDB4N0YsIDB4MDIsIDB4RkMsIDB4MDUsIDB4RjAsIDB4MDUsIDB4QzAsCisweDVGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDAwLCAweDFGLAorMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhEMCwgMHgwNywgMHgxMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwKKzB4ODEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsCisweDE3LCAweDAwLCAweDVDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDEwLCAweDdDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgxMiwgMHgxRiwgMHgwMCwgMHg3QywgMHgyMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MTEsCisweDRDLCAweDIyLCAweEYwLCAweDA5LCAweEMwLCAweDY0LCAweDAwLCAweDkzLCAweDAyLCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMSwgMHgyMCwgMHgwMCwgMHg4MywgMHgwMCwgMHg2RCwgMHgwRSwgMHhGMCwgMHg1OSwgMHhDMCwgMHgyMCwgMHgwMCwgMHg5MSwKKzB4NDAsIDB4NEMsIDB4MDIsIDB4MTAsIDB4ODksIDB4QzAsIDB4MjQsIDB4MDAsIDB4ODMsIDB4MDgsIDB4NEMsIDB4MDIsIDB4RjAsCisweDE5LCAweEMwLCAweDY0LCAweDAxLCAweDkwLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDE5LCAweEMwLCAweDQzLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHhBNiwgMHgwMiwgMHg5MSwgMHgwMSwgMHg0NCwKKzB4MDYsIDB4RDAsIDB4MzksIDB4NDEsIDB4NjQsIDB4MTAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NTAsCisweDI0LCAweDQwLCAweDkxLCAweDQwLCAweDQ0LCAweDAyLCAweEQwLCAweDE5LCAweDQ0LCAweEU0LCAweDQwLCAweDkxLCAweDAxLAorMHgwNCwgMHgwMiwgMHgxNSwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg5QiwgMHgwMywgMHg0NCwgMHgwMiwgMHhEMCwgMHgxOSwKKzB4NDAsIDB4MjAsIDB4MjAsIDB4OTEsIDB4MDksIDB4MzQsIDB4MDIsIDB4MTAsIDB4MTksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDIwLCAweDQ0LCAweEMxLCAweDA0LCAweDQ1LCAweDAyLAorMHhEMCwgMHg0OSwgMHg0MCwgMHgyNCwgMHgwMSwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg1MCwgMHgzNCwKKzB4MTAsIDB4OTksIDB4MDAsIDB4NjUsIDB4MDIsIDB4QzAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDEsIDB4OTUsIDB4MDQsIDB4NDQsCisweDEyLCAweDUxLCAweDI5LCAweDUwLCAweDI0LCAweDIwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDQ5LCAweDUwLAorMHgyNCwgMHg0MCwgMHhERCwgMHg4MCwgMHg3NCwgMHgxMiwgMHgxMCwgMHg4OSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDQsIDB4MDQsIDB4MDIsIDB4RDAsCisweDQ4LCAweDQwLCAweDIwLCAweDAxLCAweDgxLCAweDA0LCAweDM0LCAweDAyLCAweEQwLCAweDQ5LCAweDQwLCAweDIwLCAweDAxLAorMHg4OSwgMHgwNCwgMHgwNCwgMHgxMywgMHhEMCwgMHgwOCwgMHg0MCwgMHg2MCwgMHg4MSwgMHg4NSwgMHgyMCwgMHg0NiwgMHgxMiwKKzB4NTAsIDB4NDgsIDB4NDAsIDB4MjQsIDB4MDEsIDB4QzksIDB4MDQsIDB4MDQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MjQsCisweDAwLCAweDhELCAweDA0LCAweDc0LCAweDAyLCAweDE0LCAweDA4LCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg4NiwgMHgwMiwgMHgxMywgMHgwQSwgMHg0QywgMHgyOSwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4ODQsIDB4MDIsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUIsCisweDAwLCAweDZDLCAweDAwLCAweEQyLCAweEExLCAweEMwLCAweDA0LCAweDIwLCAweDA3LCAweDJBLCAweDRDLCAweDI4LCAweDcwLAorMHgwMSwgMHhEMCwgMHg4NCwgMHg0MiwgMHgxMywgMHgwQSwgMHg0RCwgMHgyOCwgMHhGMCwgMHhBMSwgMHhDMCwgMHg4NCwgMHgwMiwKKzB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDI3LCAweDAwLCAweEJGLCAweDA4LCAweDdDLCAweDAyLCAweEYwLCAweDhCLCAweEQwLAorMHgyRiwgMHg0MiwgMHhCRiwgMHgwOCwgMHg3QywgMHgwMiwgMHhGMCwgMHg4QiwgMHhEMCwgMHgyRiwgMHgwMiwgMHg5NywgMHgwOCwKKzB4N0MsIDB4MjIsIDB4RjAsIDB4MEEsIDB4RDAsIDB4MkYsIDB4MjIsIDB4QkIsIDB4MDAsIDB4RkQsIDB4MjIsIDB4QjAsIDB4OEIsCisweEQwLCAweDJGLCAweDAyLCAweEJGLCAweDA4LCAweDdDLCAweDAyLCAweEYwLCAweDhCLCAweEMwLCAweDJGLCAweDEwLCAweEIzLAorMHgwOCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsIDB4MDAsIDB4QjcsIDB4MEMsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkMsCisweDAyLCAweEIzLCAweDA0LCAweDNDLCAweDAyLCAweEYwLCAweDQ5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAxLCAweENDLAorMHgxNiwgMHgzMCwgMHgwQSwgMHhDMCwgMHg2QywgMHgyOCwgMHhCRiwgMHgwMCwgMHhDQywgMHgxRSwgMHgzMCwgMHg1QiwgMHhDMCwKKzB4NkYsIDB4NDEsIDB4QjMsIDB4MDUsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4Q0IsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDAsCisweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDYwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxQywgMHgwOCwgMHgwNywgMHgwMSwgMHgxMSwgMHgwQywgMHg2QywgMHg0MCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMiwKKzB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4ODEsIDB4NDAsIDB4ODQsIDB4MTAsIDB4M0QsIDB4MDIsIDB4NDUsIDB4MDgsCisweEIwLCAweDUxLCAweDQwLCAweDA0LCAweDAwLCAweDFELCAweDE1LCAweDQ1LCAweDE0LCAweDEwLCAweDAxLCAweDQwLCAweEMzLAorMHgxNSwgMHgxMSwgMHgxNCwgMHg0NCwgMHgxMCwgMHhEMSwgMHhDMSwgMHg0MCwgMHgwNCwgMHgwNCwgMHgxMSwgMHgwMCwgMHg3NCwKKzB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NzAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEEwLCAweDIzLCAweDA1LCAweDg1LCAweDA0LCAweDA0LCAweDEyLCAweEQwLCAweDg4LCAweDQwLCAweDcwLCAweDYwLCAweDgxLAorMHgwOCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgxQSwgMHg1MCwgMHg2QSwgMHgwMiwgMHhBRCwgMHgwMiwgMHgwNCwgMHgyMiwgMHgxMCwKKzB4MDgsIDB4NjEsIDB4QTAsIDB4MDAsIDB4OEQsIDB4ODEsIDB4MDQsIDB4MUEsIDB4OTAsIDB4MzgsIDB4NDAsIDB4MjMsIDB4NDIsCisweDgxLCAweDA2LCAweDA0LCAweDUyLCAweEQxLCAweDU4LCAweDQwLCAweDIwLCAweDQxLCAweEMxLCAweDA4LCAweDM0LCAweDA2LAorMHhEMCwgMHgwQywgMHg0MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwKKzB4MjEsIDB4MDAsIDB4OTEsIDB4MTAsIDB4NjQsIDB4MDIsIDB4RDAsIDB4ODksIDB4MTAsIDB4MjAsIDB4MDEsIDB4OTEsIDB4MDQsCisweDc0LCAweDAyLCAweEQwLCAweDBCLCAweDQwLCAweDJFLCAweDAxLCAweEJELCAweDAwLCAweDQ0LCAweDAyLCAweDkwLCAweDA5LAorMHg2MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHg0MCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgwOSwgMHg0MCwgMHgyNywgMHgyMCwgMHg5MSwKKzB4MDQsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MzAsIDB4MDAsIDB4OTEsIDB4MTEsIDB4NzQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDYwLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDI4LCAweDI1LAorMHgwMCwgMHg5NywgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwNSwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4RDAsCisweDI0LCAweDIwLCAweDlGLCAweDAyLCAweDRDLCAweDA2LCAweEIwLCAweDI5LCAweEUwLCAweDY3LCAweDAyLCAweDkzLCAweDA0LAorMHg0RCwgMHgwMiwgMHhGMCwgMHgxOSwgMHhEMCwgMHg2NCwgMHgwMCwgMHg5MywgMHgwMywgMHg3QywgMHgwMiwgMHhGMiwgMHgwOSwKKzB4RDAsIDB4MTQsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjUsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlGLCAweDAxLCAweDdDLCAweDAyLAorMHhGMCwgMHg5OCwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHg0MCwgMHg3QywgMHgwMiwgMHhGMiwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDksIDB4N0MsIDB4MEUsIDB4NzAsIDB4ODksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDM5LCAweEMwLCAweEU3LCAweDAwLCAweDlGLCAweDQwLCAweDdDLCAweDEyLCAweEYwLCAweDA5LCAweEMwLAorMHg1MywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgwRiwKKzB4MDMsIDB4NEQsIDB4MDQsIDB4RjAsIDB4MTEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsCisweDExLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDAwLCAweDJDLCAweDAwLCAweEY4LCAweDAxLCAweEMxLCAweDA2LCAweDA0LAorMHgxMywgMHgwMCwgMHgwQywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMiwgMHgxMywgMHgwMiwgMHg3QywgMHgwMCwKKzB4RjAsIDB4NDEsIDB4QzAsIDB4NDQsIDB4MDIsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NTMsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweERDLCAweDAwLCAweDdELCAweDAxLAorMHhDNCwgMHgxNSwgMHg3MCwgMHgxNiwgMHg0MCwgMHg5QywgMHgwMCwgMHg1MSwgMHgwMSwgMHg3NCwgMHgwMSwgMHgxNCwgMHgwNSwKKzB4NDAsIDB4NTcsIDB4MDAsIDB4NDEsIDB4MDAsIDB4QzQsIDB4NDEsIDB4RDAsIDB4MDcsIDB4NDAsIDB4MUMsIDB4MjAsIDB4NTEsCisweDA0LCAweEM0LCAweDA5LCAweEQxLCAweDU3LCAweDQwLCAweDE0LCAweDEwLCAweDdCLCAweDAwLCAweDc0LCAweDAxLCAweEQwLAorMHgzNywgMHg0MCwgMHgxQywgMHgwMCwgMHg1MSwgMHgwMCwgMHg0NSwgMHgwMSwgMHhEMCwgMHgwNCwgMHg0MCwgMHg1MywgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4RTIsIDB4MDQsIDB4Q0QsIDB4MDEsIDB4MDQsCisweDAzLCAweDUwLCAweDFDLCAweDQwLCAweEIxLCAweDA0LCAweDgxLCAweDAxLCAweDM0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLAorMHg3MywgMHgwMCwgMHhDMSwgMHgwMCwgMHgyNCwgMHgxMywgMHhEMCwgMHgyRCwgMHg0MCwgMHg3MiwgMHgwMCwgMHhEMSwgMHg0MCwKKzB4MDQsIDB4MkEsIDB4NTgsIDB4N0MsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4MzQsIDB4MjcsIDB4RDAsIDB4MEQsCisweDQwLCAweDMwLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDUzLCAweDAwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwNCwgMHhGRCwgMHgxMCwgMHg4NCwgMHgwMywKKzB4NTAsIDB4MDYsIDB4NDEsIDB4MjksIDB4MDEsIDB4QTEsIDB4MTAsIDB4QjQsIDB4MDUsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NTMsCisweDA0LCAweDAxLCAweDAwLCAweDg0LCAweDAwLCAweEQwLCAweDBCLCAweDQwLCAweDRBLCAweEM0LCAweEExLCAweDAwLCAweDg0LAorMHgwNSwgMHhEMCwgMHgxMiwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFOSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgyRSwgMHg0MCwKKzB4MzgsIDB4MDAsIDB4QzEsIDB4MDEsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDY4LCAweDAwLCAweEVGLCAweDAxLCAweDhDLCAweDA3LCAweDcwLAorMHgxMCwgMHhDMCwgMHhGRCwgMHg0MCwgMHhFMywgMHgwMSwgMHhCQywgMHgwNywgMHgzMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHg0MCwKKzB4RTMsIDB4MDEsIDB4QUMsIDB4MDQsIDB4RDAsIDB4MUEsIDB4QzAsIDB4NDIsIDB4MDAsIDB4QTMsIDB4MDEsIDB4OEQsIDB4MDIsCisweDc4LCAweDEwLCAweEMwLCAweDc4LCAweDA0LCAweEUzLCAweDAxLCAweEJDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDdDLAorMHgwMCwgMHhFMSwgMHgwMSwgMHg4QywgMHgwNywgMHhGMCwgMHgxQSwgMHhDMCwgMHg1NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MjUsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MDEsCisweEQwLCAweDI2LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEMwLCAweDE3LCAweDAwLCAweDFGLAorMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwgMHgwNSwgMHgwMCwgMHg4RiwgMHgwMiwgMHhGQywgMHgwMCwgMHhGMCwKKzB4MDEsIDB4RDAsIDB4QjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4RDAsIDB4MzcsIDB4NTAsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg2QiwgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgyMywgMHhCNCwgMHgxMywgMHhDMCwKKzB4NkMsIDB4MjAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MTYsIDB4QzAsIDB4NkMsIDB4MDAsIDB4RjMsIDB4MDEsCisweEJDLCAweDA0LCAweDMwLCAweDFGLCAweEQwLCAweDRELCAweDAwLCAweEYzLCAweDAzLCAweENDLCAweDI0LCAweEYwLCAweDEzLAorMHhDMCwgMHg3RiwgMHgwOCwgMHhGMywgMHgwMSwgMHhEQywgMHgwNiwgMHgzMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgxMCwgMHhGMywKKzB4ODEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweDgwLCAweEI5LCAweDAwLCAweDcxLCAweDAyLCAweDg0LCAweDAzLCAweDEwLCAweDAyLCAweDQwLCAweDI4LAorMHgwMCwgMHhFMSwgMHgwMCwgMHhBQywgMHgwMSwgMHhDMCwgMHgwNiwgMHhDMCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwKKzB4MDgsIDB4MDAsIDB4NEIsIDB4NDAsIDB4MDgsIDB4MDEsIDB4QTUsIDB4MDQsIDB4OTQsIDB4MDAsIDB4RDAsIDB4MDIsIDB4QzAsCisweDM5LCAweDAwLCAweEU1LCAweDAyLCAweEM0LCAweDAyLCAweDUwLCAweDBFLCAweDQwLCAweDFDLCAweDAwLCAweEUxLCAweDE0LAorMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDgsIDB4MDksIDB4MDAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MjIsIDB4MTgsIDB4MDIsIDB4NDEsIDB4MzgsIDB4MDAsCisweEExLCAweDEwLCAweDg0LCAweDAzLCAweEQwLCAweDI2LCAweDQwLCAweDIwLCAweDAwLCAweEMxLCAweDAwLCAweDk0LCAweDAwLAorMHgxMCwgMHgwQSwgMHg0NSwgMHgwOSwgMHgyMCwgMHhFMSwgMHg4MCwgMHg4NCwgMHgwOCwgMHhEOCwgMHgwMiwgMHg0MCwgMHgzMywKKzB4MDAsIDB4RTEsIDB4MDAsIDB4OTQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsCisweDBCLCAweEQwLCAweDBFLCAweDQwLCAweDAzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorMHgyOCwgMHgxMywgMHgwMCwgMHg0MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxNCwgMHgwMCwgMHg0MCwgMHgyMCwgMHgwMiwgMHg4MSwKKzB4MDEsIDB4MjQsIDB4MDEsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MTQsCisweDE4LCAweDQwLCAweDQwLCAweDBBLCAweDgxLCAweDUzLCAweDE0LCAweDA0LCAweEQwLCAweDMwLCAweDQwLCAweDMxLCAweDIwLAorMHhDNSwgMHgwMiwgMHgwNCwgMHgwMiwgMHg1MCwgMHgyQywgMHg0MCwgMHg1MCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgyMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MTMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsCisweDIxLCAweDAwLCAweEQzLCAweDAyLCAweDRDLCAweDAzLCAweDM0LCAweDAxLCAweEQwLCAweDFDLCAweDUwLCAweDgzLCAweDAzLAorMHg0RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg3NCwgMHg0MCwgMHhEMywgMHgwMCwgMHg1QywgMHgwMCwgMHgzMCwgMHgxRCwKKzB4QzgsIDB4NDUsIDB4RTAsIDB4OTMsIDB4MDUsIDB4MEMsIDB4MTIsIDB4RjAsIDB4NjksIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDMsCisweDAyLCAweDVDLCAweDAyLCAweDMxLCAweDBELCAweEM0LCAweDc0LCAweDI0LCAweEQzLCAweDgwLCAweDdDLCAweDA3LCAweEYwLAorMHgwRCwgMHhDMCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhBNywKKzB4NDAsIDB4REYsIDB4NDIsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MDEsIDB4QzAsIDB4OTcsIDB4MDgsIDB4OUYsIDB4MTAsIDB4NUMsCisweDAwLCAweEYwLCAweDA5LCAweEMwLCAweDUxLCAweDAwLCAweDFGLCAweDAwLCAweDVDLCAweDA4LCAweEYwLCAweDBELCAweEMwLAorMHg4MywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4NzUsIDB4RDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsCisweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDZGLCAweDIxLAorMHhCMywgMHg5MCwgMHhDQywgMHgwMywgMHgzMCwgMHgwMCwgMHhDMCwgMHgxQywgMHgwMCwgMHhERiwgMHgwMCwgMHhDQywgMHgwNiwKKzB4RjAsIDB4MEIsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RjMsIDB4MDAsIDB4OEMsIDB4MDQsIDB4MzAsIDB4NEIsIDB4QzgsIDB4MDQsCisweDAwLCAweEJELCAweDA1LCAweEZDLCAweDAyLCAweDEwLCAweDAzLCAweEMxLCAweDdCLCAweDAwLCAweDMzLCAweDE5LCAweENDLAorMHgwMiwgMHhGMCwgMHgwQSwgMHhDMCwgMHgyQywgMHgwMCwgMHhGMSwgMHgxMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4MDMsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4RTYsIDB4NDAsIDB4OTEsCisweDAyLCAweDQ0LCAweDA3LCAweDEwLCAweDExLCAweDQwLCAweDk0LCAweDAyLCAweERELCAweDAwLCAweDQ0LCAweDAwLCAweEQwLAorMHgwOCwgMHg0MCwgMHgxNCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHg0OSwgMHg0MCwgMHhDNCwgMHgwMCwKKzB4OTEsIDB4MDAsIDB4NjQsIDB4MDQsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MzcsIDB4MTIsIDB4RDUsIDB4MDMsIDB4NDQsIDB4MDYsCisweEQwLCAweDExLCAweDUwLCAweEE0LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDA3LAorMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgyNiwgMHgwMCwgMHhDMSwgMHgwMSwKKzB4NDQsIDB4MDcsIDB4OTIsIDB4MTEsIDB4NDAsIDB4QTQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MjIsIDB4NTAsIDB4MTEsCisweDQwLCAweDI0LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDIwLCAweDE0LCAweDA0LCAweDQwLCAweDQ0LCAweDA0LCAweDkxLAorMHgwMCwgMHg3NCwgMHgwNCwgMHhEMCwgMHgxMSwgMHg0NCwgMHgyNywgMHgwMCwgMHhDMSwgMHgwMCwgMHg0NCwgMHgxMiwgMHhEMCwKKzB4NEQsIDB4NTEsIDB4NzAsIDB4MDAsIDB4RDUsIDB4MDEsIDB4NzQsIDB4MDcsIDB4RDAsIDB4MUQsIDB4NDgsIDB4MDcsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweEMxLCAweDAwLCAweDA0LAorMHgwNywgMHg5MCwgMHgxMCwgMHg1MCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwKKzB4MDAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NTAsIDB4MDQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsCisweDY0LCAweDAwLCAweEQwLCAweDAwLCAweDAwLCAweDIzLCAweDQwLCAweEM1LCAweDIwLCAweDA0LCAweDAyLCAweEQwLCAweDBDLAorMHg0OCwgMHgzMCwgMHgwMCwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjYsIDB4MDAsIDB4RDMsIDB4NDAsIDB4NEMsIDB4MDMsCisweEI0LCAweDAxLCAweEMwLCAweDMwLCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweDcwLCAweDAxLCAweEMwLCAweDI0LAorMHgyMCwgMHhEMywgMHgwMCwgMHg0RCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHhBQiwgMHgwMCwgMHg3QywKKzB4MDAsIDB4RjQsIDB4MDEsIDB4QzgsIDB4MkYsIDB4NDAsIDB4MDMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsCisweDM0LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweDgwLCAweDAzLCAweEMwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMSwgMHg3MCwKKzB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsCisweDNGLCAweDAwLCAweEZDLCAweDAwLCAweDkxLCAweDAzLCAweEMwLCAweDBGLCAweDEwLCAweEJCLCAweDAwLCAweEVDLCAweDAwLAorMHgzMCwgMHgwMywgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4RkIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDgwLCAweEMwLCAweDBFLCAweDAyLCAweDNBLCAweDA4LCAweEU4LCAweDI4LAorMHhCOCwgMHhBMywgMHhDMCwgMHg4RSwgMHgwMiwgMHgzQSwgMHgwOCwgMHhFQywgMHgyOCwgMHhBMCwgMHg4MywgMHhFMCwgMHg4RSwKKzB4ODIsIDB4M0IsIDB4MEEsIDB4RUMsIDB4MjgsIDB4QTgsIDB4ODMsIDB4QzAsIDB4OEUsIDB4ODIsIDB4M0IsIDB4MEUsIDB4RTYsCisweDI4LCAweEEwLCAweDgzLCAweEUwLCAweDhFLCAweDgyLCAweDNCLCAweDBBLCAweEVDLCAweDIwLCAweEI4LCAweDgzLCAweEUwLAorMHgwRSwgMHg4MiwgMHgzQSwgMHgwQSwgMHhFRSwgMHgyMCwgMHhCMCwgMHgwMywgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4MjIsIDB4MjAsIDB4OEUsIDB4ODAsIDB4M0IsIDB4MDIsIDB4Q0EsIDB4MDgsIDB4QTgsCisweDIzLCAweEEwLCAweDhFLCAweDgwLCAweDNBLCAweDAyLCAweEU4LCAweDA4LCAweEE4LCAweDIzLCAweEUwLCAweDhFLCAweDAwLAorMHgxMywgMHgwMiwgMHhFOCwgMHgwOCwgMHhBOCwgMHgyMywgMHhBMCwgMHg4NCwgMHgwMCwgMHgzQiwgMHgwMiwgMHhFQywgMHgwOCwKKzB4MjgsIDB4MjMsIDB4RTAsIDB4OEEsIDB4MDAsIDB4MzksIDB4MDIsIDB4RTgsIDB4MDgsIDB4QkEsIDB4MjMsIDB4NDAsIDB4ODQsCisweDgwLCAweDNCLCAweDAwLCAweEVFLCAweDA4LCAweEE4LCAweDAzLCAweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgyMSwgMHg0MCwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0MCwgMHgxMCwgMHgyMCwgMHg0MSwKKzB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4ODQsIDB4MDEsIDB4MTIsCisweDA2LCAweDQ4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA2LCAweDQ4LCAweDEwLCAweDAwLAorMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwKKzB4MTIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgzLCAweDAwLCAweDgwLCAweDBFLCAweDAwLCAweDFBLCAweDAwLCAweDZBLCAweDA4LCAweEEyLCAweDYxLCAweDgwLAorMHg4NiwgMHhBMCwgMHgxQSwgMHgwMCwgMHgyOCwgMHgwOCwgMHhBOCwgMHgwMSwgMHg4MCwgMHgwNiwgMHgwMCwgMHgxQSwgMHg4MCwKKzB4NjgsIDB4MDgsIDB4QUEsIDB4MDEsIDB4ODAsIDB4ODYsIDB4MDEsIDB4MUEsIDB4MDAsIDB4NjgsIDB4MDgsIDB4QTgsIDB4MDAsCisweDgwLCAweDg2LCAweDAwLCAweDNBLCAweDAyLCAweDY4LCAweDAwLCAweEEwLCAweDAxLCAweDgwLCAweDBFLCAweDAwLCAweDBBLAorMHgwNCwgMHg2MCwgMHgwMCwgMHhBMCwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4QTAsIDB4MTIsIDB4QTAsIDB4NEUsIDB4ODAsIDB4M0EsIDB4MDEsIDB4RUEsIDB4MDQsIDB4QTAsIDB4MTMsIDB4QTAsIDB4NEUsCisweDgxLCAweDNBLCAweDAxLCAweEU4LCAweDA0LCAweEE4LCAweDEzLCAweEEwLCAweENFLCAweDgwLCAweDNBLCAweDAxLCAweEU4LAorMHgzNCwgMHhBOCwgMHgxMywgMHhBMCwgMHhDRSwgMHg4MCwgMHgzQSwgMHgwMSwgMHhFQSwgMHgwNCwgMHhBOCwgMHgxMywgMHhBMCwKKzB4NEUsIDB4ODAsIDB4MkEsIDB4MDEsIDB4QTgsIDB4MDQsIDB4QTgsIDB4MTIsIDB4QTAsIDB4NEUsIDB4ODAsIDB4MzIsIDB4MDEsCisweEVBLCAweDA0LCAweEE4LCAweDAzLCAweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLAorMHgwMiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MTgsIDB4MDEsIDB4NjIsIDB4MDAsIDB4ODAsIDB4ODEsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MTgsIDB4MDAsIDB4NDIsIDB4MDAsCisweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDA4LCAweDYwLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LAorMHgwMywgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwKKzB4MDAsIDB4ODAsIDB4MDEsIDB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4ODIsCisweDIwLCAweDA0LCAweDgwLCAweDEwLCAweDAwLCAweDQyLCAweDE0LCAweDAwLCAweDEwLCAweDIwLCAweDg0LCAweDgwLCAweDEwLAorMHgwOCwgMHg0MiwgMHgxMCwgMHgwOCwgMHgxMSwgMHgyMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwQywgMHg0MiwgMHgwOCwgMHgwOCwKKzB4MTEsIDB4MjAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDgsIDB4MTEsIDB4MjAsIDB4MDQsIDB4ODAsCisweDEwLCAweDA0LCAweDQyLCAweDA0LCAweDA4LCAweDAxLCAweDIwLCAweDA0LCAweDgwLCAweDEwLCAweDAxLCAweDQyLCAweDA0LAorMHgwOCwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHhGMiwgMHhBMCwKKzB4MDIsIDB4MDMsIDB4MEEsIDB4MDQsIDB4MjgsIDB4MUMsIDB4QUEsIDB4NTAsIDB4QTAsIDB4MDIsIDB4MDEsIDB4MEEsIDB4MDYsCisweDJBLCAweDEwLCAweEEwLCAweEQwLCAweDgwLCAweDAyLCAweDAxLCAweDBBLCAweDA0LCAweDBBLCAweDMwLCAweEEwLCAweDUwLAorMHhBMCwgMHgwMiwgMHgwMSwgMHgwQSwgMHgwRSwgMHgyOCwgMHgxMCwgMHhBMCwgMHg1MCwgMHg4MCwgMHg4MiwgMHgwMSwgMHgwQSwKKzB4MDQsIDB4MkEsIDB4MTQsIDB4QTAsIDB4NDAsIDB4ODAsIDB4MDIsIDB4MDEsIDB4MkEsIDB4MDUsIDB4MjgsIDB4M0MsIDB4QTgsCisweDAwLCAweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDMwLCAweDgwLCAweEM4LAorMHgwMCwgMHhBMiwgMHgwMywgMHhBOCwgMHgyRSwgMHhBMCwgMHgzMiwgMHg4MCwgMHhFQSwgMHgwMCwgMHhBQSwgMHgwMywgMHgwOCwKKzB4MEMsIDB4QTAsIDB4M0EsIDB4ODAsIDB4NkEsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MDgsIDB4MEMsIDB4MjAsIDB4M0EsIDB4ODAsCisweDZBLCAweDAwLCAweDgyLCAweDAzLCAweDA4LCAweDBDLCAweEEwLCAweDNBLCAweDgwLCAweEVBLCAweDAxLCAweEEyLCAweDAzLAorMHgwOCwgMHgwRSwgMHhBMCwgMHgzQSwgMHg4MCwgMHhFMCwgMHgwMCwgMHhBQSwgMHgwMywgMHgwOCwgMHgxQywgMHgyMCwgMHgwMiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDgsIDB4ODAsCisweDMwLCAweDAxLCAweDIwLCAweDE4LCAweDgwLCAweDAwLCAweDAwLCAweEMyLCAweDAxLCAweDA4LCAweDAyLCAweDAwLCAweDA0LAorMHg4MCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwOCwgMHgwMiwgMHgwMCwgMHg4MiwKKzB4MDAsIDB4MTAsIDB4MDYsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQ0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDgyLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgxNiwgMHg0MCwgMHgxOCwgMHgwMCwgMHg2MSwKKzB4MDAsIDB4MDQsIDB4MjEsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDEsIDB4MDYsIDB4MDEsIDB4MTAsCisweDA0LCAweDQwLCAweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDA2LCAweDAxLCAweDEwLCAweDA2LCAweDQwLCAweDEwLCAweDgwLAorMHg0MSwgMHgwMCwgMHgwNiwgMHgwMSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHgwNiwgMHgwMSwKKzB4MTAsIDB4MDQsIDB4NjAsIDB4MTQsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4ODIsIDB4OEMsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDAyLCAweEEwLCAweDA2LCAweDgwLCAweDlBLCAweDAwLAorMHg2RCwgMHgwMiwgMHhBMCwgMHgwMSwgMHhBMCwgMHgyNiwgMHg0MCwgMHg5QiwgMHgwMCwgMHg0QSwgMHgwMCwgMHhCMCwgMHgwOSwKKzB4ODgsIDB4MjYsIDB4ODAsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDAsIDB4ODAsIDB4MDksIDB4QTAsIDB4MjYsIDB4NDAsIDB4OTIsCisweDAwLCAweDQ4LCAweDAwLCAweEIwLCAweDA5LCAweDgwLCAweDI2LCAweDgwLCAweDlBLCAweDAwLCAweDRBLCAweDAyLCAweEE4LAorMHgwOSwgMHhBMCwgMHgyNCwgMHg4MCwgMHg5QiwgMHgwMCwgMHg0QSwgMHgwMCwgMHhBOCwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MDIsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MUEsIDB4MDEsIDB4NjgsCisweDAwLCAweEIwLCAweDAxLCAweEMwLCAweDQ2LCAweDgwLCAweDFBLCAweDAwLCAweDZFLCAweDA0LCAweEE4LCAweDAxLCAweEMwLAorMHgwNiwgMHg4MCwgMHgxQiwgMHgwMCwgMHg2QSwgMHgwMCwgMHhCMCwgMHgwMSwgMHhFMCwgMHgwNiwgMHg4MCwgMHgxQiwgMHgwMCwKKzB4NkUsIDB4MDQsIDB4QTgsIDB4MDEsIDB4QzgsIDB4MDYsIDB4MDAsIDB4MUEsIDB4MDAsIDB4NkUsIDB4MDAsIDB4QjAsIDB4MDEsCisweEUwLCAweDQ2LCAweDgwLCAweDFBLCAweDAwLCAweDZFLCAweDAwLCAweEIwLCAweDAxLCAweDhDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHg0MiwgMHgyMCwgMHgwQywgMHg4MSwgMHgzMSwgMHgwQywgMHg4MiwgMHgxMCwKKzB4MDgsIDB4NDMsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzAsIDB4MzAsIDB4MDgsIDB4NDMsIDB4MjAsIDB4MEMsCisweDAxLCAweDMwLCAweDBDLCAweEMyLCAweDMwLCAweDEwLCAweDQzLCAweDIwLCAweDBDLCAweDAzLCAweDMwLCAweDBDLCAweEMwLAorMHgzMCwgMHgwOCwgMHg0MywgMHgyMCwgMHgwQywgMHg4MSwgMHgzMCwgMHgwQywgMHhDMCwgMHgxMCwgMHgwOCwgMHg0MywgMHgwMCwKKzB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDgsIDB4MDMsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDAwLCAweDAwLAorMHgwMywgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0QywgMHgwMCwKKzB4MzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDAsCisweDAwLCAweDAzLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDAwLCAweDAwLCAweDEzLCAweDA4LCAweDA4LAorMHgwMCwgMHgyMCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MjEsIDB4NDAsIDB4ODAsIDB4NEMsIDB4MjMsIDB4MzIsIDB4MDQsIDB4Q0EsIDB4MTAsIDB4MjAsIDB4NDMsCisweDgwLCAweDBDLCAweDAzLCAweDMyLCAweDBDLCAweENBLCAweDEwLCAweDIwLCAweDQzLCAweDg4LCAweDRDLCAweDIzLCAweDMyLAorMHgwNSwgMHhDOCwgMHgxNCwgMHgyMCwgMHg0MywgMHg4MCwgMHg0QywgMHg4MSwgMHgzMiwgMHgwNSwgMHhDQSwgMHgxMCwgMHgyMCwKKzB4NDMsIDB4ODAsIDB4NDgsIDB4MDMsIDB4MzIsIDB4MDUsIDB4ODgsIDB4MTAsIDB4MjAsIDB4RDMsIDB4QTAsIDB4MEMsIDB4MDMsCisweDMyLCAweDA0LCAweENBLCAweDEwLCAweDIwLCAweDAzLCAweDg0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhBMiwgMHg0MiwgMHhBMCwgMHgwNiwgMHg4MywgMHgzQSwgMHgwNCwgMHg2QSwgMHgxMCwgMHhBOCwgMHg0MSwgMHhBMCwKKzB4MDYsIDB4ODMsIDB4MUEsIDB4MEMsIDB4NEEsIDB4MzAsIDB4QTgsIDB4NDEsIDB4QTAsIDB4MDYsIDB4ODEsIDB4MUEsIDB4MEMsCisweDRBLCAweDMwLCAweEE4LCAweDQxLCAweDgwLCAweDBFLCAweDgzLCAweDFBLCAweDBDLCAweDRBLCAweDMwLCAweDg4LCAweDQxLAorMHhBMCwgMHgwNiwgMHgwMSwgMHgwQSwgMHgwQywgMHgwOCwgMHgxMCwgMHhBOCwgMHg0MSwgMHhBMCwgMHgwNiwgMHg4MywgMHgxQSwKKzB4MDQsIDB4NkEsIDB4MTAsIDB4QTgsIDB4MDEsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEEzLCAweDQwLCAweDAwLCAweDA0LCAweDAxLCAweDE4LCAweDA0LCAweEMwLCAweDEwLCAweDAwLCAweDQxLCAweDAwLCAweDA0LAorMHgwMSwgMHgyMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwNCwgMHg0MCwKKzB4MTAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDMsIDB4MDAsCisweDAwLCAweDgxLCAweDEwLCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDQxLCAweDAwLCAweDBDLCAweDAxLCAweDMwLCAweDA0LAorMHg0MCwgMHgxMCwgMHgwMCwgMHgwMSwgMHg4QywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywKKzB4NEEsIDB4MjAsIDB4MkMsIDB4ODEsIDB4MTAsIDB4MEMsIDB4ODIsIDB4MTIsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MjYsIDB4ODEsCisweEIwLCAweDA0LCAweDQyLCAweDEwLCAweDA4LCAweDQzLCAweDIwLCAweDI2LCAweDgzLCAweDkwLCAweDA0LCAweDAyLCAweDEyLAorMHgwOCwgMHg0MSwgMHgwMCwgMHgyNiwgMHg4MSwgMHg5MCwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwOCwgMHg0MywgMHgyMCwgMHgyNiwKKzB4ODMsIDB4OTAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4ODgsIDB4QzksIDB4MjAsIDB4MEMsIDB4ODEsIDB4QjAsIDB4MDQsIDB4NjIsCisweDEyLCAweDg4LCAweDAxLCAweDhDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDA2LAorMHgyMCwgMHgxQSwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4OCwgMHgwMSwgMHhBOCwgMHgwNiwgMHhBMCwgMHgxQSwgMHg4MCwgMHg2MiwKKzB4MDAsIDB4ODAsIDB4MDEsIDB4MjgsIDB4MDYsIDB4QTAsIDB4MUEsIDB4ODAsIDB4NDIsIDB4MDAsIDB4MEEsIDB4MDEsIDB4QTAsCisweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDZBLCAweDAwLCAweDg4LCAweDAxLCAweDI4LCAweDA2LCAweEEwLCAweDFBLCAweDgwLAorMHg2QSwgMHg4MCwgMHgwOCwgMHgwMSwgMHhBOCwgMHgwNiwgMHg4MCwgMHgxOCwgMHg4MCwgMHg2MiwgMHgwMCwgMHhBOCwgMHgwMSwKKzB4ODgsIDB4MDIsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODAsCisweDgyLCAweDAxLCAweDBBLCAweDA2LCAweDI4LCAweDE4LCAweEEwLCAweDYwLCAweDgwLCAweDgyLCAweDAxLCAweDBBLCAweDA2LAorMHgyOCwgMHgxOCwgMHhBMCwgMHg2MCwgMHg4MCwgMHg4MiwgMHgwMSwgMHgwQSwgMHgwNiwgMHgyOCwgMHgxOCwgMHhBMCwgMHg2MCwKKzB4QTAsIDB4ODIsIDB4MDEsIDB4MkEsIDB4MDYsIDB4MjgsIDB4MTgsIDB4QTAsIDB4NjAsIDB4ODAsIDB4ODIsIDB4MDEsIDB4MEEsCisweDA2LCAweEFBLCAweDE4LCAweEEwLCAweDYwLCAweDgwLCAweDhBLCAweDAxLCAweDBBLCAweDA2LCAweDI4LCAweDE4LCAweEEwLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0OCwgMHg4MCwgMHgyMCwKKzB4ODEsIDB4MDIsIDB4ODQsIDB4MDgsIDB4MTIsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MjAsIDB4ODEsIDB4ODIsIDB4MDQsIDB4MDgsCisweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDIwLCAweDAxLCAweDgyLCAweDA0LCAweDRBLCAweDEyLCAweDIwLCAweDQwLCAweDgwLAorMHgyMCwgMHgwMSwgMHg4MiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgyMCwgMHgwMSwgMHg4MiwgMHgwNCwKKzB4MDgsIDB4MTAsIDB4MjAsIDB4NDgsIDB4ODAsIDB4MDAsIDB4MDEsIDB4ODIsIDB4MDQsIDB4NDgsIDB4MTIsIDB4MjAsIDB4MDAsCisweDBDLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDYyLCAweEMwLCAweDgwLCAweDAxLAorMHgwMywgMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyQiwgMHgwNiwgMHhBRSwgMHgxOCwKKzB4QjAsIDB4NjIsIDB4QzAsIDB4OEEsIDB4ODEsIDB4MkIsIDB4MDYsIDB4QUMsIDB4MTgsIDB4QTAsIDB4NjIsIDB4QzAsIDB4OEEsCisweDgxLCAweDI5LCAweDA2LCAweEFFLCAweDE4LCAweEIwLCAweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDJCLCAweDA2LCAweEE2LAorMHgxOCwgMHhCMCwgMHg2MiwgMHg2MCwgMHg4QSwgMHgwMSwgMHgyQiwgMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHgwMiwgMHg4QywKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4NjIsIDB4ODAsIDB4OEUsIDB4MDEsIDB4M0EsCisweDA2LCAweEVFLCAweDE4LCAweEE0LCAweDYzLCAweDgwLCAweDhFLCAweDgxLCAweDNBLCAweDA2LCAweEU4LCAweDE4LCAweEIwLAorMHg2MywgMHg4MCwgMHg4RSwgMHgwMSwgMHgzQSwgMHgwNiwgMHhFQSwgMHgxOCwgMHhBOCwgMHg2MywgMHg4MCwgMHg4RSwgMHg4MSwKKzB4M0EsIDB4MDYsIDB4RTAsIDB4MTgsIDB4QjAsIDB4NjMsIDB4ODAsIDB4OEUsIDB4ODEsIDB4M0IsIDB4MDYsIDB4RTgsIDB4MTgsCisweEE4LCAweDYzLCAweDIwLCAweDhFLCAweDgxLCAweDNCLCAweDA2LCAweEVBLCAweDE4LCAweEE4LCAweDAzLCAweDhDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHg2MiwgMHhDMCwgMHg4RSwgMHgwMSwgMHgzQSwgMHgwNiwKKzB4RTgsIDB4MTgsIDB4QjAsIDB4NjMsIDB4QzAsIDB4OEUsIDB4MDEsIDB4M0EsIDB4MDYsIDB4Q0MsIDB4MTgsIDB4QTAsIDB4NjMsCisweEMwLCAweDhFLCAweDAxLCAweDNCLCAweDg2LCAweEVBLCAweDE4LCAweDMwLCAweDYzLCAweEMwLCAweDhFLCAweDAxLCAweDNCLAorMHgwNiwgMHhDQywgMHgxOCwgMHhBMCwgMHg2MywgMHhDMCwgMHg4RSwgMHgwMSwgMHgzQiwgMHgwNiwgMHhFQywgMHgxOCwgMHhCMCwKKzB4NjMsIDB4RTAsIDB4OEUsIDB4ODEsIDB4M0EsIDB4MDYsIDB4RUUsIDB4MTgsIDB4QjAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDYyLCAweEEwLCAweDhFLCAweDgxLCAweDMxLCAweDA2LCAweEMyLAorMHgxOCwgMHhBOCwgMHg2MywgMHhBMCwgMHg4RSwgMHg4MSwgMHgzMCwgMHgwNiwgMHhDMiwgMHgxOCwgMHgwQSwgMHg2MywgMHhBMCwKKzB4OEUsIDB4MDEsIDB4MTAsIDB4MDYsIDB4QzQsIDB4MTgsIDB4MzAsIDB4NjMsIDB4MDAsIDB4OEMsIDB4MjEsIDB4MTAsIDB4MDYsCisweEMwLCAweDE4LCAweDA4LCAweDYxLCAweEEwLCAweDhFLCAweEExLCAweDM4LCAweDg2LCAweDgwLCAweDE4LCAweEE4LCAweDYzLAorMHgwMCwgMHg4NCwgMHg4MSwgMHgzOCwgMHgwNiwgMHhFRSwgMHgxOCwgMHhBOCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MUEsIDB4MDQsIDB4RTgsIDB4MTAsCisweDIwLCAweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDNBLCAweDA0LCAweDQ4LCAweDEwLCAweEEwLCAweDQzLCAweDgwLCAweDA0LAorMHgwMSwgMHgxMiwgMHgwNCwgMHg2OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwKKzB4MTAsIDB4MjAsIDB4NDMsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MzIsIDB4MDQsIDB4NjgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsCisweDA0LCAweDAxLCAweDMyLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4MCwgMHg4NiwgMHgwMSwgMHgxMiwgMHgwNiwgMHg2QSwgMHgxOCwgMHhBMCwKKzB4NjAsIDB4ODgsIDB4ODYsIDB4ODEsIDB4MUEsIDB4MDYsIDB4NDgsIDB4MTgsIDB4QTgsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsCisweDAyLCAweDg2LCAweDQ4LCAweDE4LCAweEEwLCAweDYxLCAweDgwLCAweDg0LCAweDAxLCAweDFBLCAweDA2LCAweDQ4LCAweDE4LAorMHhBOCwgMHg2MSwgMHg4OCwgMHg4NiwgMHgwMSwgMHgxQSwgMHgwNiwgMHg0OCwgMHgxOCwgMHhBMCwgMHg2MSwgMHg4MCwgMHg4NCwKKzB4MDEsIDB4MTgsIDB4MDYsIDB4NjgsIDB4MTgsIDB4QTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEEyLCAweDAyLCAweEEwLCAweDBFLCAweDgwLCAweDNBLCAweDAwLCAweENBLCAweDAwLCAweDI4LCAweDAzLAorMHhBMCwgMHgwQSwgMHg4MCwgMHgzMiwgMHgwMCwgMHhDOCwgMHgwMCwgMHhBOCwgMHgwMiwgMHhBMCwgMHgwQywgMHgwMCwgMHgzMiwKKzB4MDAsIDB4QzgsIDB4MDAsIDB4QTgsIDB4MDMsIDB4QTAsIDB4MEMsIDB4MDAsIDB4MzIsIDB4MDAsIDB4QzgsIDB4MDAsIDB4QTgsCisweDAzLCAweEEwLCAweDBDLCAweDAwLCAweDMyLCAweDAwLCAweEU4LCAweDAwLCAweDI4LCAweDAzLCAweEEwLCAweDBDLCAweDgwLAorMHgzMiwgMHgwMCwgMHhDQSwgMHgwMCwgMHhBOCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QTIsIDB4NDIsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MTgsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsCisweDA2LCAweDAxLCAweDEwLCAweDBDLCAweDQyLCAweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDA0LCAweDgzLCAweDEwLCAweDBDLAorMHg0MCwgMHgxMCwgMHg4MCwgMHhDMSwgMHgwMCwgMHgwNCwgMHg4MywgMHgxMCwgMHgwNCwgMHg0MiwgMHgxMCwgMHg4MCwgMHhDMSwKKzB4MDAsIDB4MDQsIDB4ODMsIDB4MTAsIDB4MEMsIDB4NDIsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDQsIDB4MDMsIDB4MTAsCisweDA0LCAweDYwLCAweDEwLCAweDgwLCAweDAxLCAweDg4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhBMiwgMHg0MiwgMHgyMCwgMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwgMHg2MiwgMHgxMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwNCwKKzB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjAsCisweDEwLCAweDA4LCAweDQxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDYyLCAweDEwLCAweDA4LCAweDQxLCAweDIwLAorMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgxMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNSwKKzB4NDIsIDB4MTAsIDB4MDgsIDB4MDEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsCisweDQyLCAweEEwLCAweDAyLCAweDAxLCAweDBBLCAweDBDLCAweEE4LCAweDMwLCAweEE4LCAweDQyLCAweEEwLCAweDAyLCAweDAzLAorMHgyQSwgMHgwNCwgMHhBQSwgMHgxMCwgMHhBMCwgMHhDMCwgMHhBMCwgMHgwQSwgMHg4MSwgMHgyQSwgMHg4NCwgMHhBMCwgMHgxMCwKKzB4QTAsIDB4NDAsIDB4QTAsIDB4MEEsIDB4ODEsIDB4MkEsIDB4MEMsIDB4QUEsIDB4MTAsIDB4QTAsIDB4NDAsIDB4QTgsIDB4MEEsCisweDgxLCAweDJBLCAweDA0LCAweDJBLCAweDEwLCAweEE4LCAweDQyLCAweEEwLCAweDBBLCAweDgxLCAweDJBLCAweDBDLCAweEE4LAorMHgxMCwgMHhBOCwgMHgwMCwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKzB4ODAsIDB4MEEsIDB4MDEsIDB4MkEsIDB4MEMsIDB4QTgsIDB4MzAsIDB4QTAsIDB4QzIsIDB4ODAsIDB4MEEsIDB4MDMsIDB4MkEsCisweDBDLCAweEE4LCAweDMwLCAweEEwLCAweEMyLCAweDgwLCAweDBBLCAweDAxLCAweDJBLCAweDA0LCAweEE4LCAweDMwLCAweEEwLAorMHhDMiwgMHg4MCwgMHgwQSwgMHgwMSwgMHgyQSwgMHgwQywgMHhBOCwgMHgzMCwgMHhBMCwgMHhDMiwgMHg4MCwgMHgwQSwgMHgwMSwKKzB4MkEsIDB4MDQsIDB4QTgsIDB4MzAsIDB4QTAsIDB4NDIsIDB4ODAsIDB4MEEsIDB4MDMsIDB4MkEsIDB4MDUsIDB4QTgsIDB4MzAsCisweEEwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDEwLCAweDAwLAorMHg0MiwgMHg4MCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgxMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwOCwgMHgwMCwKKzB4MjAsIDB4MDQsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ODAsIDB4MDAsCisweDAwLCAweDAyLCAweDIwLCAweDA4LCAweDAwLCAweDIwLCAweDA0LCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDIwLCAweDA4LAorMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHg2MCwgMHgwNCwgMHg4MCwKKzB4MDEsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4NDIsIDB4NDAsIDB4MDAsCisweDAxLCAweDAxLCAweDA1LCAweDA0LCAweDE0LCAweDEwLCAweDQwLCAweDQwLCAweDQwLCAweDAxLCAweDAxLCAweDBDLCAweDQ0LAorMHgxMCwgMHgxMCwgMHg1MCwgMHg0MCwgMHgwMCwgMHg4MSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg1MCwgMHgwMCwKKzB4MDAsIDB4ODEsIDB4MDEsIDB4MEMsIDB4MDYsIDB4MTAsIDB4MTAsIDB4NTAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDQsCisweDQ2LCAweDE0LCAweDEwLCAweDQwLCAweDYwLCAweDQ0LCAweDAxLCAweDAxLCAweDA0LCAweDA0LCAweDMwLCAweDEwLCAweDAwLAorMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHgwMCwgMHhBMCwgMHgwNiwgMHg4MCwKKzB4MUEsIDB4MDAsIDB4NkUsIDB4MDAsIDB4QTgsIDB4MDEsIDB4ODAsIDB4MDYsIDB4ODAsIDB4MUEsIDB4MDAsIDB4NkEsIDB4MDAsCisweEI4LCAweDAxLCAweEEwLCAweDA2LCAweDgwLCAweDFBLCAweDAwLCAweDZBLCAweDAwLCAweEE4LCAweDAxLCAweEEwLCAweDA2LAorMHg4MCwgMHgxQSwgMHgwMCwgMHg2OCwgMHgwMCwgMHhCMCwgMHgwMSwgMHg4MCwgMHgwNiwgMHg4MCwgMHgxQSwgMHgwMCwgMHg2QSwKKzB4MDAsIDB4QTgsIDB4MDEsIDB4QTAsIDB4MDYsIDB4ODAsIDB4MUIsIDB4MDAsIDB4NkEsIDB4MDAsIDB4QTgsIDB4MDEsIDB4ODgsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDAyLCAweEMwLCAweDA2LCAweDAwLCAweDEyLAorMHgwMCwgMHhFOCwgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHg4MCwgMHgzQSwgMHgwMCwgMHg0QywgMHgwMCwgMHhBMCwKKzB4MDMsIDB4QzAsIDB4MDYsIDB4ODAsIDB4MTMsIDB4MDAsIDB4NEUsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsCisweDEzLCAweDAwLCAweDZFLCAweDAwLCAweEEwLCAweDAzLCAweEMwLCAweDA2LCAweDAwLCAweDFCLCAweDAwLCAweDRDLCAweDAwLAorMHhCMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgzQSwgMHgwMCwgMHg2RSwgMHgwMCwgMHhCMCwgMHgwMSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MEMsIDB4ODAsIDB4MTEsIDB4MDAsCisweDYyLCAweDAwLCAweDA4LCAweDAyLCAweDIwLCAweDBDLCAweDgwLCAweDE4LCAweDAwLCAweDQyLCAweDAwLCAweDhBLCAweDAxLAorMHgyMCwgMHgwQywgMHgwMiwgMHgxMCwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwQywgMHgwMiwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDgsCisweDgzLCAweDAwLCAweDA0LCAweDgwLCAweDE4LCAweDAwLCAweEMyLCAweDAwLCAweDA4LCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyQywgMHgwMCwgMHg5MCwgMHgwMCwgMHg0MCwKKzB4MDIsIDB4MDAsIDB4MEIsIDB4MDAsIDB4MkMsIDB4MDAsIDB4OTAsIDB4MTIsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MjEsIDB4MDAsCisweEE4LCAweDAxLCAweDkwLCAweDEyLCAweDQwLCAweDAyLCAweDAwLCAweDIxLCAweDAyLCAweEFDLCAweDA4LCAweDkwLCAweDIyLAorMHg0MCwgMHgwMiwgMHgwMCwgMHgyMSwgMHgwMCwgMHhBQywgMHgwNSwgMHg5MCwgMHgyMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyQiwKKzB4MDIsIDB4QTQsIDB4MDAsIDB4OTAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDhDLCAweDAwLCAweDMyLCAweDBBLCAweENBLCAweDI4LAorMHgyMiwgMHhBMywgMHg4MCwgMHg4QywgMHgwMiwgMHgzMiwgMHgwNiwgMHg0OCwgMHgyOCwgMHgyOCwgMHhBMiwgMHg4OCwgMHg4QywKKzB4ODIsIDB4MTIsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MjAsIDB4QTEsIDB4ODAsIDB4OEMsIDB4MDMsIDB4MzIsIDB4MDAsIDB4NDgsCisweDI4LCAweDI4LCAweEEyLCAweDgwLCAweDhDLCAweDAwLCAweDIyLCAweDA2LCAweDA4LCAweDM4LCAweDIwLCAweEEzLCAweDgwLAorMHg4NCwgMHg4MiwgMHgzMiwgMHgwMiwgMHhDQSwgMHgwOCwgMHgyMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzQsIDB4QTAsIDB4MTYsIDB4ODMsIDB4NUEsIDB4MEMsIDB4NEEsIDB4MzEsIDB4QTgsCisweEM1LCAweEEwLCAweDE2LCAweDgzLCAweDVBLCAweDBFLCAweDY4LCAweDMxLCAweEE4LCAweDg1LCAweEEwLCAweDE2LCAweDgzLAorMHg1QSwgMHgwQywgMHg2MCwgMHgzMSwgMHhBOCwgMHg4NSwgMHhBMCwgMHgxNiwgMHgwMywgMHg1QSwgMHgwQywgMHg2QSwgMHgzMSwKKzB4QTgsIDB4QzUsIDB4QTAsIDB4MTYsIDB4MDMsIDB4NTgsIDB4MEUsIDB4MjgsIDB4MzEsIDB4QTgsIDB4RTQsIDB4ODAsIDB4MTIsCisweDgyLCAweDVBLCAweDBDLCAweDZBLCAweDMxLCAweEE4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwgMHgwNiwgMHgwMCwgMHgwOSwKKzB4MDAsIDB4NjQsIDB4MDAsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDIsIDB4MDAsIDB4OTEsIDB4MDAsIDB4QTQsIDB4MDAsIDB4OTAsCisweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDkxLCAweDAwLCAweEE0LCAweDgwLCAweDkwLCAweDA4LCAweDQwLCAweDAyLCAweDAwLAorMHgzMSwgMHgwMCwgMHhBNCwgMHg4MCwgMHg4MCwgMHgwMCwgMHg0MiwgMHgwQywgMHgwMCwgMHgwOSwgMHgyMCwgMHg2NCwgMHgwMiwKKzB4OTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIyLCAweDQyLCAweDg4LCAweDE4LCAweDIwLCAweDQyLCAweDgwLCAweDg4LCAweDExLCAweDIyLAorMHgwNiwgMHg4OCwgMHgxOCwgMHgyMCwgMHg2MiwgMHg4NCwgMHg4OCwgMHgwMSwgMHgyMiwgMHgwNiwgMHg4OCwgMHgxOCwgMHgyMCwKKzB4NjAsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MjIsIDB4MDYsIDB4ODgsIDB4MTgsIDB4MjAsIDB4NjIsIDB4ODQsIDB4ODgsIDB4MjEsCisweDI2LCAweDA2LCAweDg4LCAweDE4LCAweDIwLCAweDYyLCAweDgwLCAweDg4LCAweDIxLCAweDIyLCAweDA2LCAweDg4LCAweDE4LAorMHgyMCwgMHg2MiwgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTIsIDB4MEEsIDB4MDgsIDB4MkEsIDB4MjAsIDB4MDgsIDB4MDAsIDB4QTgsIDB4MDIsIDB4QTIsIDB4MEEsCisweDg0LCAweDJBLCAweDIwLCAweEFBLCAweDgwLCAweEEwLCAweDAyLCAweEE2LCAweDBBLCAweDFDLCAweDJBLCAweDI4LCAweEE4LAorMHhDMCwgMHhBMCwgMHgwMiwgMHhBMiwgMHgwQSwgMHg4OCwgMHgyQSwgMHgyMCwgMHhBQSwgMHg4MCwgMHhBMCwgMHgwMiwgMHhBMiwKKzB4MEEsIDB4ODgsIDB4MkEsIDB4QTAsIDB4QUEsIDB4ODAsIDB4QTksIDB4MDIsIDB4QTIsIDB4MEEsIDB4MTgsIDB4MjgsIDB4MjAsCisweEE4LCAweDgwLCAweEE4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHg4NCwgMHg0MiwgMHgxMCwgMHgwQSwgMHg0MSwgMHhBOCwgMHgwNCwgMHhBMCwgMHgxMiwgMHg4MCwgMHg0MiwgMHgxMCwKKzB4MkEsIDB4NDEsIDB4MjgsIDB4ODQsIDB4QTEsIDB4MTAsIDB4ODQsIDB4NEEsIDB4MTAsIDB4MkEsIDB4NjEsIDB4QTgsIDB4MDQsCisweEExLCAweDEwLCAweDg0LCAweDRBLCAweDE4LCAweDJBLCAweDYxLCAweEE4LCAweDQ0LCAweEExLCAweDEwLCAweDg0LCAweDRBLAorMHgxNCwgMHgyQSwgMHg2MSwgMHhBOCwgMHgwNCwgMHhBMSwgMHgxMiwgMHg4NCwgMHg0QSwgMHgxMCwgMHgyQSwgMHgwMSwgMHhBOCwKKzB4MDQsIDB4ODEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisweDgwLCAweDQwLCAweDgxLCAweDAyLCAweDhELCAweDA4LCAweDE0LCAweDAwLCAweDUwLCAweDgwLCAweDQwLCAweDgzLCAweDAyLAorMHgwNSwgMHgwOCwgMHgxNCwgMHgyMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwOCwgMHgxNCwgMHgyMCwKKzB4NTAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDgsIDB4MTQsIDB4MjgsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsCisweDAyLCAweDg1LCAweDAwLCAweDE0LCAweDIwLCAweDUwLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDE0LAorMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhDMCwKKzB4Q0EsIDB4MDAsIDB4MkIsIDB4MDMsIDB4QTQsIDB4MEMsIDB4MTAsIDB4MzIsIDB4QzAsIDB4Q0EsIDB4MDAsIDB4MDEsIDB4MDMsCisweDBDLCAweDBDLCAweEIwLCAweDMyLCAweDQwLCAweEMwLCAweDgwLCAweDIxLCAweDAzLCAweDg2LCAweDBDLCAweEExLCAweDMyLAorMHgwMCwgMHhDOCwgMHg4MCwgMHgwMSwgMHgwMywgMHg4NiwgMHgwQywgMHhBMCwgMHgzMiwgMHg0MCwgMHhDOCwgMHgwMCwgMHgyMCwKKzB4MDMsIDB4ODYsIDB4MEMsIDB4MTAsIDB4MzAsIDB4NjAsIDB4QzgsIDB4MjAsIDB4MjEsIDB4MDMsIDB4ODQsIDB4MEMsIDB4QjAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEyLCAweDRFLAorMHg4MCwgMHgzQSwgMHgwOSwgMHhFRSwgMHgwNCwgMHhBMCwgMHgxMywgMHg4MCwgMHg0RSwgMHg4MiwgMHgzQSwgMHgxMSwgMHhFQSwKKzB4MDQsIDB4QjgsIDB4MTMsIDB4OTAsIDB4NEUsIDB4OTAsIDB4M0EsIDB4MjEsIDB4NkEsIDB4MDQsIDB4QTgsIDB4MTMsIDB4QTAsCisweDRFLCAweDg4LCAweDNBLCAweDIxLCAweENBLCAweDA0LCAweEE4LCAweDEzLCAweDEwLCAweDRDLCAweDg0LCAweDMyLCAweDAxLAorMHhFOCwgMHgwNCwgMHhBOCwgMHgxMywgMHhBMCwgMHg0RSwgMHg4MCwgMHgzQiwgMHgwMSwgMHhFQSwgMHgwNCwgMHhBOSwgMHgwMywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzQsIDB4MTAsIDB4MTIsIDB4MDMsCisweDA4LCAweDhDLCAweDIwLCAweDMyLCAweDgwLCAweEM0LCAweDA4LCAweDAyLCAweDAzLCAweDA4LCAweDBDLCAweDIwLCAweDMxLAorMHg4MiwgMHhDMCwgMHgxOCwgMHgwMiwgMHgwMywgMHgwOCwgMHgwQywgMHgyMCwgMHgzMSwgMHg4MCwgMHhDMCwgMHgxOCwgMHgwMiwKKzB4MDMsIDB4MDgsIDB4MEMsIDB4MjAsIDB4MzEsIDB4ODIsIDB4QzAsIDB4MTgsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MEMsIDB4MjAsCisweDMwLCAweDg2LCAweEMwLCAweDAwLCAweDAyLCAweDIzLCAweDA4LCAweDBDLCAweDIwLCAweDMxLCAweDg0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwKKzB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsCisweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLAorMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwKKzB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjQsIDB4REYsIDB4RDAsIDB4NkMsIDB4NDMsIDB4QjMsIDB4MEQsCisweEVELCAweEJGLCAweDM0LCAweEZCLCAweEQyLCAweEZFLCAweENCLCAweEZGLCAweDBELCAweENELCAweEJFLCAweDdDLCAweERCLAorMHhGMCwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhFRCwgMHhCRiwgMHg3QywgMHhEQiwgMHhGMCwgMHhGRiwgMHhDQiwgMHhGRiwKKzB4MkYsIDB4Q0QsIDB4QkUsIDB4N0MsIDB4REIsIDB4RjAsIDB4RkYsIDB4Q0IsIDB4QjcsIDB4MkYsIDB4REYsIDB4MzYsIDB4N0MsCisweERCLCAweEYwLCAweDZELCAweDQzLCAweEIzLCAweDJGLCAweEVELCAweDM3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDQywgMHgzRiwgMHgzMiwgMHhGMywgMHhDOCwgMHhDQywgMHgyMywgMHhGMywKKzB4QkYsIDB4Q0MsIDB4RkMsIDB4MzIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MjMsIDB4MzMsIDB4QkYsIDB4RkMsIDB4M0MsIDB4RjIsCisweEZGLCAweENCLCAweEZGLCAweDJGLCAweEYzLCAweEJGLCAweEZDLCAweDNDLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLAorMHgzMywgMHhCRiwgMHhGQywgMHgzQywgMHhGMiwgMHhGRiwgMHhDQiwgMHhDRiwgMHgyRiwgMHgzRiwgMHg4RiwgMHhGQywgMHgzQywKKzB4RjIsIDB4RjMsIDB4QzgsIDB4Q0MsIDB4MkYsIDB4RjMsIDB4OEYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweERDLCAweDc4LCAweDcyLCAweDYzLCAweDQ4LCAweEVDLCAweDIxLCAweEIxLCAweDlGLAorMHhEQywgMHg3RSwgMHgxMiwgMHg3QiwgMHg0OCwgMHg4QywgMHgyMSwgMHhCNywgMHg4NywgMHhDNCwgMHg3RSwgMHgxMiwgMHg2MywKKzB4NDgsIDB4OEMsIDB4MjEsIDB4MzcsIDB4ODYsIDB4QzQsIDB4N0UsIDB4MTIsIDB4NjMsIDB4NDgsIDB4OEMsIDB4MjEsIDB4QjcsCisweDg3LCAweEM0LCAweDdFLCAweDEyLCAweDYzLCAweDQ4LCAweDhDLCAweDIxLCAweEIxLCAweDlGLCAweEM0LCAweDE4LCAweDEyLAorMHg3QiwgMHg0OCwgMHg4QywgMHgyNywgMHgzNywgMHg5RSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MEUsIDB4MDIsIDB4MzksIDB4MEEsIDB4RTQsIDB4MjAsIDB4OTAsIDB4ODMsCisweDAwLCAweDBFLCAweDAyLCAweDM5LCAweDA4LCAweEUwLCAweDIwLCAweDgwLCAweDgzLCAweDQwLCAweDBFLCAweDAyLCAweDM5LAorMHgwOCwgMHhFNCwgMHgyMCwgMHg5MCwgMHg4MywgMHgwMCwgMHgwRSwgMHgwMiwgMHgzOCwgMHgwQSwgMHhFNCwgMHgyMCwgMHg4MCwKKzB4ODMsIDB4NDAsIDB4MEUsIDB4MDIsIDB4MzgsIDB4MDYsIDB4RTYsIDB4MjAsIDB4OTAsIDB4QTMsIDB4NDAsIDB4MEUsIDB4MDIsCisweDM5LCAweDA4LCAweEU0LCAweDI4LCAweDkwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgyMCwgMHg2MCwgMHg4RSwgMHgwMCwgMHgzQSwgMHgwMiwgMHhFQSwgMHgwOCwgMHhBMCwgMHgyMywgMHhBMCwKKzB4OEUsIDB4MDAsIDB4M0EsIDB4MDIsIDB4RUEsIDB4MDgsIDB4QjgsIDB4MjMsIDB4QTAsIDB4OEUsIDB4MDAsIDB4M0EsIDB4MDIsCisweEU4LCAweDA4LCAweEEwLCAweDIzLCAweEEwLCAweDhFLCAweDgwLCAweDNBLCAweDAyLCAweEVBLCAweDA4LCAweEE4LCAweDIzLAorMHhBMCwgMHg4RSwgMHg4MCwgMHgzQSwgMHgwMiwgMHhFRSwgMHgwOCwgMHhBOCwgMHgyMywgMHhBMCwgMHg4RSwgMHg4MCwgMHgzQSwKKzB4MDIsIDB4RUEsIDB4MDgsIDB4QTgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDQwLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA2LCAweDQ4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDA0LAorMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwKKzB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsCisweDA0LCAweDAxLCAweDEyLCAweDA2LCAweDQ4LCAweDEwLCAweDIwLCAweDYxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LAorMHg0OCwgMHgxOCwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MjAsIDB4MDYsIDB4MDAsCisweDE4LCAweDAwLCAweDYyLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLAorMHg4MCwgMHgwMSwgMHgyOCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMiwgMHg2MCwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNiwKKzB4ODAsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsCisweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgyMCwgMHg0RSwgMHgwMCwgMHgzOCwgMHgwNSwgMHhFMiwgMHgwNCwgMHg4MCwgMHgxMywgMHgyMCwgMHg0RSwgMHgwMCwgMHgzOCwKKzB4MDksIDB4RTIsIDB4MDQsIDB4ODgsIDB4MTMsIDB4MjAsIDB4NEUsIDB4MDAsIDB4MzgsIDB4MDEsIDB4RTAsIDB4MDQsIDB4ODAsCisweDEzLCAweDIwLCAweDRFLCAweDgyLCAweDM4LCAweDA1LCAweEUyLCAweDA0LCAweDg4LCAweDEyLCAweDIwLCAweDRFLCAweDgwLAorMHgzOCwgMHhBMSwgMHhFMiwgMHgwNCwgMHgyOCwgMHg1MSwgMHgyMCwgMHg0RSwgMHg4MCwgMHgzMCwgMHgwMSwgMHhFMiwgMHgxNCwKKzB4ODgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLAorMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4OCwgMHg4MSwKKzB4MDAsIDB4MDYsIDB4MDIsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsCisweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDA4LCAweDEwLCAweDAwLCAweDYwLCAweDAwLCAweDgwLAorMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgyMCwgMHgyNCwKKzB4ODAsIDB4OTAsIDB4MDEsIDB4NDIsIDB4MDIsIDB4MDgsIDB4MjksIDB4MjAsIDB4MjQsIDB4ODAsIDB4OTAsIDB4MDIsIDB4NDIsCisweDAyLCAweDA4LCAweDExLCAweDIwLCAweDI0LCAweDgwLCAweDkwLCAweDAwLCAweDQyLCAweDAyLCAweDA4LCAweDA5LCAweDIwLAorMHhBNCwgMHg4MCwgMHg5MCwgMHgwMSwgMHg0MiwgMHgwMiwgMHgwOCwgMHgxMSwgMHgyMCwgMHhBNCwgMHg4MCwgMHg5MCwgMHgwMSwKKzB4NDIsIDB4MDQsIDB4MDgsIDB4MzksIDB4MjAsIDB4NDQsIDB4ODAsIDB4MTgsIDB4MDEsIDB4NDIsIDB4MDYsIDB4MDgsIDB4MDEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEM0LCAweDAwLCAweDEyLCAweDgxLAorMHg0OCwgMHgwNSwgMHgyMiwgMHgxMSwgMHg4OCwgMHg0NCwgMHgwMCwgMHgxMiwgMHg4MSwgMHg0OCwgMHgwNCwgMHgyMCwgMHgzMSwKKzB4ODAsIDB4NTQsIDB4MjAsIDB4MTIsIDB4ODEsIDB4NDgsIDB4MDQsIDB4MjIsIDB4MTEsIDB4ODgsIDB4QzQsIDB4MDAsIDB4MTIsCisweDAzLCAweDQ4LCAweDBELCAweDIyLCAweDExLCAweDgwLCAweDU0LCAweDIwLCAweDEyLCAweDAxLCAweDQ4LCAweDA1LCAweDIwLAorMHgxNSwgMHg4OCwgMHg1NCwgMHgyMCwgMHg1MiwgMHg4MSwgMHg2OCwgMHgwRCwgMHgyMiwgMHgxRCwgMHg4OCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MzAsIDB4MDAsIDB4QzgsIDB4MDAsIDB4MDAsCisweDAzLCAweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAwLCAweENBLCAweDAwLCAweDIwLCAweDAzLCAweEEwLCAweDBDLCAweDAwLAorMHgzMiwgMHgwMCwgMHhDMCwgMHgwMiwgMHgwMCwgMHgwMywgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDQSwgMHgwMCwKKzB4MjgsIDB4MDMsIDB4ODAsIDB4MEMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4Q0EsIDB4MDAsIDB4MjgsIDB4MDMsIDB4QTAsIDB4MEMsCisweDgwLCAweDcyLCAweDAwLCAweENBLCAweDAwLCAweDI4LCAweDAzLCAweDgwLCAweDFDLCAweDgwLCAweDAyLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwOCwgMHgyMCwgMHgyQywgMHgwMCwgMHg5MCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4NzgsIDB4MDAsIDB4MjYsIDB4MDAsIDB4OTAsIDB4MDMsIDB4NjAsIDB4MDIsIDB4MDgsIDB4MDMsCisweDAwLCAweDIwLCAweDAwLCAweDkwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDE5LCAweDAwLCAweEUyLCAweDAwLCAweDg4LAorMHgwMCwgMHg4MCwgMHgwNiwgMHg4MCwgMHgwMCwgMHgwMCwgMHhFMiwgMHgwMSwgMHg4OCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwKKzB4MjgsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4ODAsIDB4MEEsIDB4ODAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAzLCAweDAyLCAweDQwLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDA0LAorMHgwMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwKKzB4MDAsIDB4ODIsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDg0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDIsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MDAsCisweDA4LCAweDAxLCAweDYwLCAweDA2LCAweDgwLCAweDEwLCAweDAwLCAweDY2LCAweDAwLCAweDg4LCAweDAxLCAweDIwLCAweDA0LAorMHg4MCwgMHgxMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwOCwgMHgwMSwgMHg0MCwgMHgwNiwgMHg4MCwgMHgxOSwgMHgwMCwgMHg2MiwKKzB4MDAsIDB4OTgsIDB4MDEsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTksIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MjAsCisweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDYyLCAweDAwLCAweDg4LCAweDAxLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg5MCwKKzB4MTEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTksIDB4MDEsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4NDAsIDB4MDYsIDB4MDAsCisweDE5LCAweDAwLCAweDY0LCAweDAwLCAweDkwLCAweDExLCAweDAwLCAweDQ2LCAweDAwLCAweDE4LCAweDAwLCAweDY0LCAweDA0LAorMHg4MCwgMHgwMSwgMHg0MCwgMHg0NiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2NiwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwgMHgwNiwKKzB4MDAsIDB4MTksIDB4MDAsIDB4NjQsIDB4MDAsIDB4OTAsIDB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweEEyLCAweDQyLCAweDYwLCAweDBDLCAweDAxLCAweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDAwLCAweDQzLAorMHgyMCwgMHgwQywgMHgwMSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgxOCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMSwgMHgzMCwKKzB4MDQsIDB4QzAsIDB4MTAsIDB4MDAsIDB4NDMsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDgsCisweDQzLCAweDIwLCAweDBDLCAweDgxLCAweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDA4LCAweDQzLCAweDIwLCAweDBDLCAweDgxLAorMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwOCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsCisweDRDLCAweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAxLAorMHhDMCwgMHgwNCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsCisweDAwLCAweEMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwMCwgMHhEMCwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwNCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhDMywgMHgyMCwgMHg0QywKKzB4MDMsIDB4MzAsIDB4MEMsIDB4QzIsIDB4MzQsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsCisweDM0LCAweDAwLCAweEMzLCAweDIwLCAweDBDLCAweDgzLCAweDMwLCAweDA0LCAweEMwLCAweDMwLCAweDA4LCAweDQzLCAweDAwLAorMHgwQywgMHg4MywgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwMCwgMHg0MywgMHgwMCwgMHgwQywgMHgwMSwgMHgzMCwgMHgwNCwKKzB4QzAsIDB4MTAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsCisweEMyLCAweDIwLCAweDBFLCAweDAzLCAweDEwLCAweDA0LCAweDYyLCAweDMwLCAweDAwLCAweEMxLCAweDIwLCAweDA2LCAweDAzLAorMHgxMCwgMHgwQywgMHg2MiwgMHgzMCwgMHg4OCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMywgMHgxOCwgMHgwQywgMHg0MCwgMHgzMCwKKzB4MDAsIDB4QzEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsIDB4MzAsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MDYsCisweDgzLCAweDE4LCAweDA0LCAweDYwLCAweDEwLCAweDg4LCAweDQxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDYyLAorMHgxMCwgMHg4OCwgMHgwMSwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHg0MiwKKzB4MDAsIDB4MDYsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MDAsIDB4MEMsIDB4ODEsIDB4MTAsCisweDA0LCAweEMwLCAweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDA0LCAweDgxLCAweDEwLCAweDA0LCAweDQyLCAweDEwLCAweDA4LAorMHg0MSwgMHgwMCwgMHgwOCwgMHgwMSwgMHgzMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MywgMHgwMCwgMHgwNCwgMHgwMSwKKzB4MzAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MTAsCisweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDgwLCAweDQyLCAweDIwLAorMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwgMHg2MiwgMHgxMCwgMHgwOCwgMHg0MSwgMHgyMCwgMHgwQywgMHg4MSwgMHgxMCwgMHgwNCwKKzB4QzIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsIDB4NDEsCisweDIwLCAweDBDLCAweDgzLCAweDMwLCAweDA0LCAweDYyLCAweDEwLCAweDA4LCAweDQzLCAweDIwLCAweDA2LCAweDgxLCAweDMwLAorMHgwNCwgMHg2MiwgMHgxMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgxMCwgMHg4OCwKKzB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4MDIsIDB4MDAsIDB4MDgsCisweDgwLCAweDAwLCAweDAwLCAweEEyLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgyMCwgMHgwQSwgMHg4MCwgMHgyMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwOCwgMHgwMiwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4QTIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjAsIDB4MEEsIDB4MDAsIDB4MjAsIDB4MDAsCisweEEwLCAweDAwLCAweDg4LCAweDAyLCAweDIwLCAweDBBLCAweDgwLCAweDI4LCAweDAwLCAweEEyLCAweDAwLCAweDg4LCAweDQyLAorMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MiwgMHgwMSwKKzB4MDgsIDB4MDYsIDB4MjAsIDB4MTgsIDB4ODAsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MDgsIDB4MDYsIDB4MjAsIDB4MTgsCisweDgwLCAweDYwLCAweDAwLCAweDgyLCAweDAxLCAweDA4LCAweDA2LCAweDIwLCAweDE4LCAweDgwLCAweDYwLCAweDAwLCAweDgyLAorMHgwMSwgMHgwOCwgMHgwNiwgMHgyMCwgMHgxOCwgMHg4MCwgMHg2MCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgwOCwgMHgwNiwgMHgyMCwKKzB4MTgsIDB4ODAsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MjgsIDB4MDYsIDB4MjAsIDB4MTgsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDQwLCAweEEwLCAweDAwLCAweDAxLCAweDAyLAorMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyOCwKKzB4NDAsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsCisweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLAorMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4NjIsIDB4QzAsIDB4OEEsIDB4ODEsIDB4MkIsIDB4MDYsCisweEFDLCAweDE4LCAweEI4LCAweDYyLCAweEMwLCAweDhBLCAweDgxLCAweDJCLCAweDA2LCAweEFDLCAweDE4LCAweEIwLCAweDYyLAorMHhDMCwgMHg4QSwgMHg4MSwgMHgyQiwgMHgwNiwgMHhBRSwgMHgxOCwgMHhCOCwgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyQiwKKzB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsIDB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MkIsIDB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsCisweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDI5LCAweDA2LCAweEFDLCAweDE4LCAweEIwLCAweDAyLCAweDg4LCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg2MiwgMHgyMCwgMHg4RSwgMHg4MSwgMHgzOCwgMHgwNiwgMHhFMiwKKzB4MTgsIDB4ODgsIDB4NjMsIDB4NjAsIDB4OEUsIDB4ODEsIDB4MzgsIDB4MDYsIDB4RTYsIDB4MTgsIDB4ODgsIDB4NjMsIDB4MjAsCisweDhFLCAweDgxLCAweDM4LCAweDA2LCAweEUyLCAweDE4LCAweDg4LCAweDYzLCAweDUwLCAweDhFLCAweDgxLCAweDM5LCAweDA2LAorMHhFMiwgMHgxOCwgMHg5OCwgMHg2MywgMHgyMCwgMHg4RSwgMHg4MSwgMHgzOSwgMHgwNCwgMHhFMiwgMHgxOCwgMHg4OCwgMHg2MywKKzB4MjAsIDB4OEUsIDB4ODEsIDB4M0EsIDB4MDYsIDB4RTIsIDB4MTgsIDB4ODgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDYyLCAweDAwLCAweDhFLCAweDAxLCAweDNCLCAweDA2LCAweEU0LCAweDE4LAorMHhCMCwgMHg2MywgMHgwMCwgMHg4RSwgMHgwMSwgMHgzOSwgMHgwNiwgMHhFMCwgMHgxOCwgMHg4MCwgMHg2MywgMHg0MCwgMHg4RSwKKzB4MDEsIDB4MzksIDB4MDYsIDB4RUMsIDB4MTgsIDB4QjAsIDB4NjMsIDB4ODAsIDB4OEUsIDB4MDEsIDB4MzgsIDB4MDYsIDB4RTQsCisweDE4LCAweDgwLCAweDYzLCAweDQwLCAweDhFLCAweDAxLCAweDM4LCAweDA2LCAweEU0LCAweDE4LCAweDkwLCAweDYzLCAweDQwLAorMHgwRSwgMHgwMSwgMHgzOSwgMHgwNiwgMHhFNCwgMHgxOCwgMHg5MCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MEEsIDB4QTIsIDB4NjIsIDB4NjAsIDB4OEMsIDB4MDEsIDB4MzAsIDB4MDYsIDB4RUEsIDB4MTgsIDB4ODAsCisweDYzLCAweDIwLCAweDhDLCAweDAxLCAweDMwLCAweDA2LCAweEMyLCAweDE4LCAweDE4LCAweDYzLCAweEEwLCAweDhFLCAweDAxLAorMHgzMCwgMHgwNiwgMHhDMCwgMHgxOCwgMHgwMCwgMHg2MywgMHgyMCwgMHg4RSwgMHg4MSwgMHgzMCwgMHgwNiwgMHhFQSwgMHgxOCwKKzB4MDgsIDB4NjMsIDB4QTAsIDB4OEUsIDB4ODEsIDB4MzAsIDB4MDYsIDB4RUEsIDB4MTgsIDB4QTgsIDB4NjMsIDB4QTAsIDB4OEUsCisweDgxLCAweDNBLCAweDA2LCAweEVBLCAweDE4LCAweEE4LCAweDQzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyNCwgMHgwMSwgMHg5QSwgMHgwNCwgMHg0OCwgMHgxMiwgMHgyMCwgMHg0OSwKKzB4ODAsIDB4MkUsIDB4MDEsIDB4OTAsIDB4MDQsIDB4RTgsIDB4MTIsIDB4MDAsIDB4NDksIDB4ODAsIDB4MjQsIDB4MDEsIDB4OTAsCisweDA0LCAweDY4LCAweDEyLCAweEEwLCAweDQxLCAweDgwLCAweDJDLCAweDAxLCAweEJBLCAweDA0LCAweDQ4LCAweDEwLCAweEEwLAorMHg0MywgMHg4MCwgMHgyNCwgMHgwMSwgMHhCQSwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0OSwgMHg4MCwgMHgwNCwgMHgwMSwKKzB4OTIsIDB4MDQsIDB4NDgsIDB4MTIsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDAwLCAweDYwLCAweDAwLCAweDg0LCAweDAxLCAweDEwLCAweDA2LCAweDYwLCAweDE4LCAweDAwLCAweDYxLCAweDIwLAorMHg4NiwgMHgwMSwgMHgxMCwgMHgwNiwgMHg2MiwgMHgxOCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg4NiwgMHgwMSwgMHgxMCwgMHgwNiwKKzB4NDAsIDB4MTgsIDB4MDAsIDB4NjEsIDB4MjAsIDB4ODYsIDB4ODEsIDB4MTgsIDB4MDYsIDB4NjAsIDB4MTgsIDB4ODgsIDB4NjEsCisweDAwLCAweDg2LCAweDgxLCAweDU4LCAweDA2LCAweDYwLCAweDE4LCAweDgwLCAweDYxLCAweDAwLCAweDg2LCAweDAxLCAweDE4LAorMHgwNiwgMHg2MCwgMHgxOCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4QTIsIDB4MDYsIDB4MjAsIDB4MUUsIDB4MDAsIDB4NzAsIDB4MDAsIDB4QzIsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MjAsIDB4MUUsCisweDAwLCAweDcwLCAweDAwLCAweEMyLCAweDAxLCAweDg4LCAweDA3LCAweDIwLCAweDFDLCAweDAwLCAweDcwLCAweDAwLCAweEMwLAorMHgwMSwgMHgwMCwgMHgwNywgMHgyMCwgMHgxQywgMHg4MCwgMHg3MCwgMHgwMCwgMHhFMiwgMHgwMSwgMHg4OCwgMHgwNywgMHgyMCwKKzB4MUUsIDB4ODAsIDB4NzgsIDB4MDAsIDB4QzIsIDB4MDEsIDB4ODgsIDB4MDcsIDB4MjAsIDB4MUUsIDB4ODAsIDB4NzgsIDB4MDAsCisweEUyLCAweDAxLCAweDg4LCAweDAzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLAorMHg0QSwgMHgwMCwgMHgyNiwgMHg4MywgMHg5MCwgMHgwNCwgMHg0MCwgMHgxMiwgMHgwOCwgMHg0OSwgMHgwMCwgMHgyNiwgMHg4MSwKKzB4OTAsIDB4MDQsIDB4NDAsIDB4MTIsIDB4ODAsIDB4NDksIDB4MDAsIDB4MjQsIDB4ODEsIDB4OTAsIDB4MDQsIDB4NDIsIDB4MTIsCisweDA4LCAweDQxLCAweDAwLCAweDI0LCAweDAxLCAweDkwLCAweDA0LCAweDYwLCAweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDI2LAorMHgwMSwgMHg5OCwgMHgwNCwgMHg0MCwgMHgxMCwgMHg4MCwgMHg0OSwgMHgwMCwgMHgwNiwgMHgwMSwgMHg5OCwgMHgwNCwgMHg2MCwKKzB4MTIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4NDIsCisweDIwLCAweDA0LCAweDgxLCAweDE4LCAweDA1LCAweDYyLCAweDEwLCAweDg4LCAweDQxLCAweDIwLCAweDA0LCAweDgxLCAweDE4LAorMHgwNCwgMHg2MiwgMHgxMCwgMHgwOCwgMHg1MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgxMCwgMHg4OCwKKzB4NDEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDQsIDB4ODEsCisweDEwLCAweDA0LCAweDYyLCAweDEwLCAweDA4LCAweDQxLCAweDIwLCAweDA0LCAweDgxLCAweDEwLCAweDA0LCAweDQyLCAweDEwLAorMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHg0MiwgMHgwMCwKKzB4MDIsIDB4ODEsIDB4MjgsIDB4MEMsIDB4QTIsIDB4MzAsIDB4ODgsIDB4NDIsIDB4MDAsIDB4MDIsIDB4ODMsIDB4MjgsIDB4MEMsCisweEEwLCAweDEwLCAweDgwLCAweEMwLCAweDIwLCAweDBBLCAweDgzLCAweDI4LCAweDBDLCAweEEyLCAweDMwLCAweDg4LCAweEMyLAorMHgwMCwgMHgwQSwgMHgwMywgMHgyOCwgMHgwNCwgMHgyMiwgMHgxMCwgMHg4MCwgMHg0MCwgMHgyMCwgMHgwMiwgMHgwMSwgMHgwOCwKKzB4MDQsIDB4QTIsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MjAsIDB4MDIsIDB4ODEsIDB4MDgsIDB4MDQsIDB4MjIsIDB4MTAsIDB4ODgsCisweDAwLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLCAweDAwLCAweDBBLAorMHgwMSwgMHgyOCwgMHgwNSwgMHhBMCwgMHgxMCwgMHg4MCwgMHhDMiwgMHgwMCwgMHgwQSwgMHgwMywgMHgyOCwgMHgwQywgMHhBMCwKKzB4MTAsIDB4ODAsIDB4NTIsIDB4MDAsIDB4MEEsIDB4MDEsIDB4MjgsIDB4MDQsIDB4QTAsIDB4MTAsIDB4ODAsIDB4QzIsIDB4MDAsCisweDBBLCAweDAzLCAweDI4LCAweDBDLCAweEEwLCAweDMwLCAweDgwLCAweEMyLCAweDAwLCAweDBBLCAweDAzLCAweDI4LCAweDBDLAorMHg4MCwgMHgzMCwgMHg4MCwgMHhDMiwgMHgwMCwgMHgwQSwgMHgwMywgMHgyOCwgMHgwNCwgMHhBMCwgMHgzMCwgMHg4MCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MDYsIDB4MDAsCisweDA4LCAweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDExLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDA0LAorMHg4OCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4ODAsCisweDA0LCAweDgwLCAweDEwLCAweDAwLCAweDQyLCAweDAwLCAweDA4LCAweDAxLCAweDIwLCAweDA0LCAweDgwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHg0MiwgMHg0MCwgMHgwMCwgMHg4MSwgMHgwMSwKKzB4MDQsIDB4MDQsIDB4MTAsIDB4MTgsIDB4NDAsIDB4NDAsIDB4MDAsIDB4ODMsIDB4MDEsIDB4MDUsIDB4MDQsIDB4MTAsIDB4MTAsCisweDQwLCAweDQwLCAweDAwLCAweDgxLCAweDAxLCAweDA0LCAweDA2LCAweDEwLCAweDE4LCAweDUwLCAweDQwLCAweDQwLCAweDAxLAorMHgwMSwgMHgwQywgMHgwNCwgMHgxMCwgMHgxMCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwNSwgMHg4NCwgMHgxMCwKKzB4MTAsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MTAsIDB4MTAsIDB4MDAsIDB4ODgsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDAyLCAweDIwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLAorMHg2MiwgMHgwMCwgMHg4OCwgMHgwMSwgMHg2MCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2NiwgMHgwMCwgMHg4OCwgMHgwMSwKKzB4MjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODgsIDB4MDEsIDB4NjAsIDB4MDYsIDB4ODAsIDB4MTksCisweDAwLCAweDYyLCAweDAwLCAweDk4LCAweDAxLCAweDIwLCAweDA2LCAweDgwLCAweDE5LCAweDAwLCAweDYyLCAweDAwLCAweDg4LAorMHgwMSwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MjQsIDB4MDAsIDB4OTksIDB4MDAsIDB4NjQsCisweDAyLCAweDEwLCAweDA5LCAweDAwLCAweDJFLCAweDAwLCAweDkxLCAweDAwLCAweEUwLCAweDAwLCAweDAwLCAweDA5LCAweDQwLAorMHgyNiwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHgwMCwgMHgyRSwgMHgwMCwgMHhCOCwgMHgwMCwKKzB4NjQsIDB4MDAsIDB4ODAsIDB4MEIsIDB4NDAsIDB4MjYsIDB4MDAsIDB4QjgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4OTgsIDB4MDksCisweDQwLCAweDI2LCAweDAwLCAweDk5LCAweDAwLCAweDY0LCAweDAwLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHgwNiwgMHg2MCwgMHgxNCwgMHgwMCwgMHg1MCwgMHgwMCwgMHhDMiwgMHgwMSwKKzB4MDAsIDB4MDUsIDB4MjAsIDB4MTYsIDB4MDAsIDB4NTAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4MTgsIDB4MDUsIDB4MjAsIDB4MUMsCisweDAwLCAweDUwLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDA1LCAweDIwLCAweDE2LCAweDgwLCAweDU4LCAweDAwLCAweEMyLAorMHgwMSwgMHg4OCwgMHgwNSwgMHgyOCwgMHgxQywgMHg4MCwgMHg1OCwgMHgwMCwgMHhDMiwgMHgwMSwgMHgwOCwgMHgwNywgMHgyMCwKKzB4MUMsIDB4ODAsIDB4NzAsIDB4MDgsIDB4QzIsIDB4MDEsIDB4MDgsIDB4MDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDBBLCAweDAwLCAweDgwLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDA4LCAweEMwLCAweDIwLCAweDAwLAorMHhBMSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwQywgMHgwMiwKKzB4MTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjAsCisweDAwLCAweEExLCAweDAwLCAweDhDLCAweDAyLCAweDEwLCAweDA4LCAweEMwLCAweDI4LCAweDAwLCAweEUzLCAweDAwLCAweDFDLAorMHgwMiwgMHgzMCwgMHgwQSwgMHhDMCwgMHgyMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4QTQsIDB4MDAsIDB4OTAsIDB4MDIsIDB4QzAsIDB4MEEsIDB4MDAsIDB4QTksCisweDIwLCAweEFDLCAweDAwLCAweEIwLCAweDBBLCAweEMyLCAweDA4LCAweDAwLCAweDI5LCAweDAwLCAweEFDLCAweDAwLCAweEIwLAorMHgwMiwgMHhDMCwgMHgwQSwgMHgwMCwgMHhBQiwgMHgyMCwgMHhBQywgMHg4MiwgMHhCMCwgMHgwNiwgMHhDMCwgMHgyOCwgMHgwOCwKKzB4QUIsIDB4MDAsIDB4QUMsIDB4ODIsIDB4QjAsIDB4MEEsIDB4QzAsIDB4M0EsIDB4MDgsIDB4QUIsIDB4MDAsIDB4QUMsIDB4MDIsCisweEIwLCAweDBFLCAweEMwLCAweDI4LCAweDAwLCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHhBMiwgMHhDMiwgMHgyMCwgMHgwNiwgMHgwMywgMHgxOCwgMHgwQywgMHg2MiwgMHgzMCwgMHg4MCwgMHhFMSwgMHgyMCwKKzB4MDYsIDB4MDMsIDB4MTgsIDB4MEMsIDB4NjIsIDB4MzAsIDB4ODgsIDB4QzEsIDB4MjAsIDB4MDYsIDB4MDMsIDB4MTgsIDB4MEMsCisweDYwLCAweDMwLCAweDgwLCAweEMxLCAweDIwLCAweDA2LCAweDgzLCAweDE4LCAweDBFLCAweDYyLCAweDMwLCAweDg4LCAweEUxLAorMHgyMCwgMHgwNiwgMHg4MywgMHgxOCwgMHgwQywgMHg2MiwgMHgzOCwgMHg4MCwgMHhFMSwgMHgyMCwgMHgwNiwgMHg4MywgMHgxOCwKKzB4MEUsIDB4NjIsIDB4MzAsIDB4ODgsIDB4MDEsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDgwLCAweDAyLCAweDAwLCAweDA0LCAweDgwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDA4LCAweDAxLCAweDAwLCAweDA0LAorMHg4MCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwMCwgMHg0MiwKKzB4MDAsIDB4MDgsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDg0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwKKzB4MTIsIDB4MjIsIDB4MDYsIDB4ODgsIDB4MTgsIDB4MjAsIDB4NjIsIDB4ODAsIDB4ODgsIDB4MTEsIDB4MjAsIDB4MDYsIDB4ODgsCisweDE4LCAweDIwLCAweDYyLCAweDg0LCAweDg4LCAweDAxLCAweDIyLCAweDA2LCAweDg4LCAweDE4LCAweDIwLCAweDYyLCAweDgwLAorMHg4OCwgMHgwMSwgMHgyMiwgMHgwNiwgMHg4OCwgMHgxOCwgMHgwMSwgMHg2MiwgMHg4NCwgMHg4OCwgMHgzMSwgMHgyMCwgMHg0NiwKKzB4ODAsIDB4MTgsIDB4MjAsIDB4NjIsIDB4MDQsIDB4ODAsIDB4MTEsIDB4MjAsIDB4NDYsIDB4ODgsIDB4MTgsIDB4MDEsIDB4NjIsCisweDg0LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDAyLAorMHgwMiwgMHgwQSwgMHg4OCwgMHgyOCwgMHgyMCwgMHhBMiwgMHg4MCwgMHg4OCwgMHgyMiwgMHgwMCwgMHgwQSwgMHg4OCwgMHgyOCwKKzB4MDAsIDB4QTAsIDB4ODAsIDB4ODAsIDB4MDIsIDB4MjIsIDB4MEEsIDB4ODgsIDB4MjgsIDB4MjAsIDB4QTIsIDB4ODAsIDB4ODgsCisweDAyLCAweDAyLCAweDBBLCAweDAwLCAweDI4LCAweDIwLCAweEEyLCAweDgwLCAweDgwLCAweDAyLCAweDIyLCAweDBBLCAweDAyLAorMHgyOCwgMHgyMCwgMHhBMiwgMHg4MCwgMHg4MCwgMHgwMiwgMHgyMCwgMHgwQSwgMHg4OCwgMHgyOCwgMHgyMCwgMHhBMiwgMHgwMCwKKzB4ODgsIDB4MDIsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MTAsIDB4MDQsCisweDQyLCAweDEwLCAweDI4LCAweDAxLCAweEEwLCAweDA0LCAweDgxLCAweDEyLCAweDA0LCAweDQyLCAweDEwLCAweDI4LCAweDQxLAorMHhBMCwgMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwgMHg0QSwgMHgxMCwgMHgyOCwgMHg0MSwgMHhBMCwgMHgwNCwgMHg4MSwgMHgxMiwKKzB4MDQsIDB4NEEsIDB4MTAsIDB4MjgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsCisweDAxLCAweEEwLCAweDA0LCAweDgxLCAweDEwLCAweDAwLCAweDQyLCAweDEwLCAweDA4LCAweDQxLCAweDIwLCAweDA0LCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhBMCwgMHg0MCwKKzB4MDEsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MTQsIDB4MDAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDAsCisweDE0LCAweDI4LCAweDUwLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDE0LCAweDIwLCAweDUwLCAweDAwLAorMHg0MCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgwOCwgMHgzNCwgMHgyMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwNSwKKzB4MDAsIDB4MTQsIDB4MjAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDgsIDB4MTQsIDB4MjAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgyLCAweEIyLCAweEMwLCAweENBLCAweDgyLAorMHgyMSwgMHgwQiwgMHhBNCwgMHgyQywgMHgxOCwgMHhCMiwgMHhDMCwgMHhDQSwgMHgwMiwgMHgyOCwgMHgwQiwgMHg4NCwgMHgyQywKKzB4QjAsIDB4QjIsIDB4NDAsIDB4QzgsIDB4ODIsIDB4MjEsIDB4MEIsIDB4ODYsIDB4MkMsIDB4ODAsIDB4QjIsIDB4NDAsIDB4QzgsCisweDAyLCAweDIxLCAweDBCLCAweEFDLCAweDJDLCAweEIwLCAweEIyLCAweEMwLCAweENBLCAweDAyLCAweDJCLCAweDBCLCAweDg0LAorMHgyQywgMHhCMCwgMHhCMiwgMHhDMCwgMHhDQSwgMHgwMiwgMHgyQiwgMHgwQiwgMHhBQywgMHgyQywgMHhCMCwgMHgwMiwgMHg4OCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MTIsIDB4MjAsIDB4NEUsIDB4ODAsIDB4MzgsCisweDAxLCAweEVBLCAweDA0LCAweDg4LCAweDEzLCAweDYwLCAweDRFLCAweDgwLCAweDNBLCAweDAxLCAweEU2LCAweDA0LCAweDg4LAorMHgxMywgMHgyMCwgMHg0RSwgMHg4MCwgMHgzOCwgMHgwMSwgMHhFMiwgMHgwNCwgMHhBOCwgMHgxMywgMHg2MCwgMHg0RSwgMHgwMCwKKzB4MzksIDB4MDEsIDB4RTIsIDB4MjQsIDB4OTgsIDB4MTMsIDB4MjAsIDB4NEUsIDB4ODIsIDB4MzksIDB4MDEsIDB4RTIsIDB4MDQsCisweDg4LCAweDEzLCAweDIwLCAweDRFLCAweDgyLCAweDM4LCAweDAxLCAweEUyLCAweDA0LCAweDg4LCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDNCwgMHgwMCwgMHgwMiwgMHgwMywgMHgwOCwgMHgwQywKKzB4MjAsIDB4MzAsIDB4ODAsIDB4QzAsIDB4MDAsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MEMsIDB4MjAsIDB4MzEsIDB4ODAsIDB4QzAsCisweDEwLCAweDAyLCAweDAzLCAweDA4LCAweDBDLCAweDIwLCAweDMwLCAweDgwLCAweEMwLCAweDA4LCAweDAyLCAweDAzLCAweDA4LAorMHgwQywgMHgyMCwgMHgzMSwgMHg4MiwgMHhDMCwgMHgxOCwgMHgwMiwgMHg0MywgMHgwOCwgMHgwQywgMHgyMCwgMHgzMCwgMHg4NiwKKzB4QzAsIDB4MDAsIDB4MDIsIDB4NjMsIDB4MDgsIDB4MEMsIDB4MjEsIDB4MzEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLAorMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwKKzB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsCisweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLAorMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHhEQiwgMHhEMCwgMHg2QywgMHg0MywgMHhCMywgMHgyRiwgMHhDRCwgMHgzNiwKKzB4RkMsIDB4REYsIDB4RDAsIDB4NkMsIDB4NDMsIDB4RkIsIDB4MEQsIDB4Q0QsIDB4MzYsIDB4MzQsIDB4REIsIDB4RDAsIDB4NkMsCisweDQzLCAweEIzLCAweDBELCAweENELCAweDM2LCAweDM0LCAweERCLCAweEQwLCAweDdFLCAweEMzLCAweEI3LCAweDJGLCAweENELAorMHgzNiwgMHg3QywgMHhEQiwgMHhGMCwgMHg3RiwgMHg0MywgMHhCMywgMHgyRiwgMHhERiwgMHgzNiwgMHhGQywgMHhGRiwgMHhEMiwKKzB4NkMsIDB4QzMsIDB4QjcsIDB4MEQsIDB4RUQsIDB4QkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweENDLCAweDNDLCAweDMyLCAweEYzLCAweEM4LCAweENDLCAweDJGLCAweDMzLCAweDhGLCAweEZDLAorMHgzRiwgMHgzMiwgMHhGMywgMHhDOCwgMHhGQywgMHgyMywgMHgzMywgMHg4RiwgMHhDQywgMHgzQywgMHgzMiwgMHhGMywgMHhDOCwKKzB4Q0MsIDB4MjMsIDB4MzMsIDB4OEYsIDB4Q0MsIDB4M0MsIDB4MzIsIDB4RkYsIDB4QzgsIDB4Q0YsIDB4MkYsIDB4MzMsIDB4OEYsCisweEZDLCAweDNDLCAweEYyLCAweEZGLCAweEM4LCAweENDLCAweDJGLCAweDNGLCAweDhGLCAweEZDLCAweEZGLCAweDMyLCAweEYzLAorMHhDOCwgMHhDRiwgMHgyMywgMHhGMywgMHhCRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4REMsIDB4MTgsIDB4MTIsIDB4NjMsIDB4NDgsIDB4OEMsIDB4MjcsIDB4MzEsIDB4ODYsIDB4REMsIDB4MUUsCisweDEyLCAweDYzLCAweDQ4LCAweEVDLCAweDIxLCAweDM3LCAweDg2LCAweEM0LCAweDc4LCAweDEyLCAweDYzLCAweDQ4LCAweDhDLAorMHgyMSwgMHgzMSwgMHg4NiwgMHhDNCwgMHgxRSwgMHgxMiwgMHg3QiwgMHhDOCwgMHg4RCwgMHgyNywgMHhCNywgMHg4NywgMHhEQywKKzB4N0UsIDB4NzIsIDB4N0IsIDB4NDgsIDB4OEMsIDB4MjcsIDB4QjcsIDB4OUYsIDB4REMsIDB4N0UsIDB4MTIsIDB4RkIsIDB4QzksCisweDhELCAweDI3LCAweEI3LCAweDlGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg0MCwgMHhFMSwgMHgwQywgMHg4NSwgMHgzMywgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwKKzB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsCisweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweENFLCAweDUwLCAweDA4LCAweDQwLCAweDIxLAorMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHhFMSwgMHgwQywgMHg4NSwgMHgwMCwgMHgxNCwKKzB4MDIsIDB4NTAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLAorMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwKKzB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsCisweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLAorMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MjEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MTEsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsCisweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LAorMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwKKzB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEUwLAorMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHgwMiwgMHgwNCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsCisweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweENFLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgwNCwgMHgwOCwgMHgwMCwgMHhFMCwgMHg0QywgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDA0LCAweDAwLCAweDEwLCAweENDLCAweDQwLCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgzMywgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhDMSwKKzB4MEMsIDB4MDQsIDB4MDAsIDB4MTAsIDB4Q0MsIDB4NDAsIDB4MzAsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweEMxLCAweDBDLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLAorMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsCisweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LAorMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweENDLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MDQsIDB4MzAsIDB4MTMsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwKKzB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsCisweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LAorMHgwMiwgMHg1NCwgMHgwOCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg1MCwKKzB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LAorMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwKKzB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsCisweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLAorMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsCisweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LAorMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwKKzB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsCisweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgzOCwgMHgwMywKKzB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MzMsCisweDAwLCAweDAyLCAweDAwLCAweDM4LCAweDAzLCAweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDA4LAorMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgzOCwgMHgwMywgMHhFMCwgMHgwQywgMHg4MCwKKzB4MDAsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4NDMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDMzLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLAorMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwKKzB4Q0UsIDB4NDAsIDB4MDgsIDB4MDAsIDB4RTEsIDB4MEMsIDB4ODQsIDB4MDAsIDB4MTAsIDB4Q0UsIDB4NDAsIDB4MzgsIDB4MDMsCisweDIxLCAweDAwLCAweDg0LCAweDMzLCAweDEwLCAweENFLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDMzLAorMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAyLAorMHgxMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsCisweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsCisweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDAxLCAweDAwLAorMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsCisweDAwLCAweDAwLCAweDAwLCAweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNDLCAweDNDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGMCwKKzB4RjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsCisweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwKKzB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsCisweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwKKzB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLAorMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsCisweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsCisweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAyLCAweDUwLAorMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwKKzB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsCisweDUwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwKKzB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsCisweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLAorMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjEsCisweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLAorMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwKKzB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsCisweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwKKzB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLAorMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LAorMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwKKzB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsCisweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLAorMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4Q0UsIDB4NTQsCisweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDMzLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDUwLCAweDIxLCAweDQwLAorMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgzOCwgMHg1MywgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwKKzB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsCisweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwKKzB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsCisweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LAorMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwKKzB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLAorMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwKKzB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsCisweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LAorMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MDgsIDB4MDAsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4MDMsIDB4RTAsCisweDBDLCAweDgwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDM4LCAweDAzLCAweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLAorMHgwMiwgMHgwMCwgMHgzOCwgMHgwMywgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgzOCwgMHgwMywKKzB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MzMsCisweDAwLCAweENFLCAweDAwLCAweDM4LCAweDQzLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsCisweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLAorMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwKKzB4MDIsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAxLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzQywgMHgzQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RjAsIDB4RjAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLAorMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywKKzB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsCisweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwKKzB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwNCwgMHg4MCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MjIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwNCwgMHg4MCwgMHg0MCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsCisweDAwLCAweDIyLCAweDI1LCAweDBDLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweEMwLCAweDBDLCAweDAwLAorMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDBDLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDBDLCAweDAwLCAweDA1LCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4NywgMHhFOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQ2MTBfZmlybXdhcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0NjEwX2Zpcm13YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1MGQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0NjEwX2Zpcm13YXJlLmgKQEAgLTAsMCArMSw1NDA5IEBACisvKgorICAgVGhpcyBmaWxlIGlzIGNvcHlyaWdodCBieSBNZWlsaGF1cyBFbGVjdHJvbmljIEdtYkggMjAwMy4KKyAgIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSwgc2VsbCwgbW9kaWZ5LCByZXZlcnNlIGVuZ2luZWVyIG9yIHVzZSB0aGlzCisgICBjb2RlIChvciBwYXJ0cyBvZiBpdCkgZm9yIGFueSBvdGhlciBwdXJwb3NlIG9yIHVuZGVyIGFueSBvdGhlciBjb25kaXRpb25zCisgICB0aGFuIHN0YXRlZCBiZWxvdy4KKworICAgMSkgWW91IGFyZSBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgZmlsZSB0b2dldGhlcgorICAgd2l0aCBkZXZpY2UgZHJpdmVycyBmb3IgdGhlIE1laWxoYXVzIE1FLTQwMDAsIGJvYXJkIGZhbWlseS4KKworICAgMikgRGVyaXZlZCB3b3JrIChkZXZpY2UgZHJpdmVycyB1c2luZyB0aGlzIGZpbGUpIGNhbiBiZSBwdWJsaXNoZWQgdW5kZXIKKyAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gQW55IG90aGVyIGxpY2Vuc2UgdGVybXMgaGF2ZQorICAgdG8gYmUgYWdyZWVkIGJ5IE1laWxoYXVzIEdtYkggaW4gd3JpdHRlbi4KKworICAgMikgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOworICAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIE1laWxoYXVzIGlzIHVuZGVyCisgICBubyBtZWFucyBsaWFibGUgZm9yIHByb2R1Y3RzIHVzaW5nIHRoaXMgZmlsZSBvciBwYXJ0cyBvZiBpdC4KKworICAgMykgVGhlIGNvcHlyaWdodCBvZiB0aGlzIGZpbGUgaGFzIHRvIGJlIG1lbnRpb25lZCBpbiBkZXJpdmVkIHdvcmsuCisKKyAgIDQpIElmIHRoaXMgbGljZW5zZSB0ZXJtcyBhcmUgbm90IHZhbGlkIGR1ZSB0byBhbnkgb3RoZXIgbGF3CisgICBvciByZXN0cmljdGlvbnMgaW1wb3NlZCBvbiB5b3UsIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlCisgICB0aGlzIGZpbGUgaW4gYW55IHdheSBhdCBhbGwuCisgKi8KKworLyogVmVyc2lvbiAwIG9mIE1FLTQ2MTAgZmlybXdhcmUgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHhpbGlueF9maXJtXzQ2MTBbXSA9IHsKKzB4MDAsIDB4MDEsIDB4MTEsIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDQsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDU1LCAweDk5LCAweEFBLCAweDY2LCAweDBDLCAweDAwLAorMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhFMCwgMHgwQywgMHg4MCwgMHgwNiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RDAsIDB4MEMsIDB4ODAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDEsIDB4RkMsIDB4QjQsIDB4MEMsIDB4MDAsIDB4MDMsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDBDLAorMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MEEsIDB4MDAsIDB4N0MsIDB4MjAsIDB4NDAsIDB4NTgsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjAsIDB4MDEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCRiwgMHg1OCwgMHg4MCwgMHg1NCwgMHgwMCwKKzB4NDQsIDB4MDEsIDB4MTgsIDB4MDUsIDB4NjAsIDB4MDQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4MDAsIDB4RDgsIDB4MDAsCisweDYwLCAweDBBLCAweDgwLCAweDJELCAweDAwLCAweEY2LCAweDAwLCAweEQ4LCAweDAzLCAweDYwLCAweDBBLCAweDgwLCAweDY5LAorMHgwMCwgMHhDNiwgMHgwMSwgMHg5OCwgMHgwNSwgMHgyMCwgMHgxNiwgMHhGQywgMHgyMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4RkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4REMsIDB4MzIsIDB4RjAsCisweDEzLCAweEMwLCAweDRGLCAweDAwLCAweEZCLCAweDI4LCAweEJDLCAweDA0LCAweEIwLCAweDE3LCAweEMwLCAweDRFLCAweDEyLAorMHgxQiwgMHgxMCwgMHhGQywgMHgxMywgMHgzMCwgMHg5MywgMHhDMCwgMHg0QiwgMHgwMCwgMHgxRiwgMHgwMSwgMHhGQywgMHgyNCwKKzB4MzAsIDB4Q0YsIDB4RTIsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDA4LCAweDM3LCAweDAxLCAweDlELCAweDA2LCAweDQ0LCAweDMwLCAweEQxLCAweDExLCAweDQwLCAweDQ3LCAweDAwLAorMHhGRCwgMHgwQSwgMHg3NCwgMHgwNiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgxNywgMHgwOSwgMHgxMSwgMHg0MiwgMHhGNCwgMHgwQiwKKzB4NTAsIDB4NDksIDB4NDAsIDB4MDYsIDB4MEMsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4OEYsIDB4NDAsIDB4MDQsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDMzLCAweDAwLAorMHg4RCwgMHgxOCwgMHgwNSwgMHgxNiwgMHhEQSwgMHgwOCwgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHg0MCwgMHg3NCwgMHgwMywKKzB4OTEsIDB4MEMsIDB4NDAsIDB4MzUsIDB4MDEsIDB4MEQsIDB4MjAsIDB4MzQsIDB4QTMsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MDEsCisweDAxLCAweENELCAweEEwLCAweDc0LCAweDEzLCAweEQyLCAweDRDLCAweDQwLCAweDQ0LCAweDgwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMSwgMHg0NCwgMHg4NiwKKzB4RDAsIDB4MzksIDB4NDAsIDB4MDcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NjQsIDB4OEEsIDB4MTAsIDB4ODksIDB4MDIsIDB4MzcsCisweDAwLCAweDE1LCAweDEwLCAweDc0LCAweDAzLCAweDUwLCAweDE5LCAweDA3LCAweDQ3LCAweDIwLCAweDVELCAweDA0LCAweDc0LAorMHhBMywgMHhEQSwgMHgwRCwgMHg0OCwgMHgwQywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTgsIDB4NzcsIDB4MDAsIDB4MUYsIDB4OTEsIDB4NEMsIDB4ODYsIDB4RTAsIDB4MTksIDB4QzAsIDB4NTcsCisweDIxLCAweERCLCAweDAwLCAweDdDLCAweDAxLCAweEIwLCAweDA1LCAweDgwLCAweDA2LCAweDkxLCAweDFCLCAweDBCLCAweDdDLAorMHgwMywgMHgzMSwgMHgzMSwgMHhDMCwgMHg0NywgMHgwMSwgMHg5RiwgMHg0NCwgMHg3QywgMHgwMiwgMHhEMCwgMHgwRCwgMHg2MCwKKzB4MDAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsCisweDAyLCAweDNFLCAweDQwLCAweEU4LCAweDAwLCAweEYwLCAweDBCLCAweDQwLCAweDhGLCAweDAwLCAweEZFLCAweDAwLCAweEY0LAorMHg0OCwgMHhGMCwgMHgwQiwgMHhDMCwgMHgxRiwgMHg4MCwgMHgxQSwgMHgyMCwgMHhCQywgMHgwMywgMHhFMSwgMHgwQiwgMHhDOCwKKzB4MEUsIDB4MDAsIDB4M0UsIDB4MDEsIDB4RjgsIDB4MDIsIDB4MzAsIDB4MEYsIDB4RDEsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweDlGLCAweDAwLCAweDVDLAorMHg0NiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgyMCwgMHg3QywgMHgyMSwgMHgzMCwgMHgwRCwgMHhDNCwKKzB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4ODMsIDB4QjAsIDB4MjksIDB4QzAsIDB4ODQsIDB4MDgsIDB4OUYsIDB4NDQsCisweDdDLCAweDQzLCAweEYwLCAweDBDLCAweEM0LCAweDBBLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwQSwgMHg5MCwgMHgwOSwgMHg0MCwKKzB4NjcsIDB4MDAsIDB4RjAsIDB4ODAsIDB4MzQsIDB4MDQsIDB4QjAsIDB4QjksIDB4NDAsIDB4MzIsIDB4MDAsIDB4RDEsIDB4NDEsCisweEMwLCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDUxLCAweDAwLCAweDM0LCAweDQzLCAweEQwLCAweDNGLAorMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwKKzB4MzIsIDB4MTAsIDB4MUQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4OTAsIDB4MTAsIDB4NDAsIDB4QTMsIDB4ODQsIDB4QzksIDB4MDAsCisweDM0LCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweEMwLCAweDIxLCAweDAwLCAweDAzLCAweDkwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MywgMHgwNCwgMHg4OSwgMHhEOCwgMHgwQywgMHg0MCwgMHgxQywgMHgwMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODIsIDB4NzgsIDB4MDIsIDB4RUMsIDB4ODEsCisweEI0LCAweDA1LCAweDlBLCAweDkyLCAweDYwLCAweDRCLCAweDkwLCAweEUxLCAweEE5LCAweEI2LCAweDA2LCAweDkwLCAweDFBLAorMHg2MCwgMHg3QSwgMHgwMCwgMHhFMSwgMHgxMywgMHhBNCwgMHgwNywgMHhDMCwgMHgxMiwgMHg0MCwgMHg0RiwgMHgwMCwgMHg2MSwKKzB4MzUsIDB4QjQsIDB4MjUsIDB4QzAsIDB4OUYsIDB4NjEsIDB4MTgsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDEwLCAweDRELCAweDAwLCAweDFDLCAweEExLCAweDc4LCAweDgwLAorMHhFMSwgMHgzMywgMHgyNSwgMHhDRiwgMHgyMCwgMHgzQywgMHgyMywgMHgzMCwgMHgyQywgMHhDMSwgMHgzNCwgMHgwOCwgMHgwNywKKzB4MDUsIDB4MEQsIDB4MDMsIDB4QjAsIDB4QzAsIDB4RTgsIDB4MTAsIDB4MjIsIDB4Q0YsIDB4NDEsIDB4M0MsIDB4MTcsIDB4RjIsCisweERELCAweEQwLCAweDQ4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHhCMiwgMHgzRCwgMHgwOCwgMHhGRiwgMHgwMCwgMHhGRSwgMHhBMywgMHg4MCwgMHg4RiwgMHhDMiwgMHgxQiwgMHgwMCwgMHhGRiwKKzB4ODAsIDB4RkUsIDB4MDMsIDB4RjAsIDB4MEIsIDB4NDAsIDB4M0YsIDB4MTAsIDB4MzcsIDB4MDgsIDB4REMsIDB4NjMsIDB4RjAsCisweDg3LCAweEM2LCAweDNGLCAweDA4LCAweERGLCAweDAwLCAweDdDLCAweDIzLCAweEZBLCAweDhGLCAweEMyLCAweDA5LCAweDYwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHg3NywgMHgwMCwgMHg1NywKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MTEsIDB4QzAsIDB4MzUsIDB4MDAsIDB4REYsIDB4MTAsIDB4NUMsIDB4MDEsIDB4RjAsCisweDE4LCAweEMwLCAweDY2LCAweDAwLCAweEQzLCAweDAwLCAweDZDLCAweDEzLCAweEYwLCAweDAxLCAweEM4LCAweDE3LCAweDEwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHgzMiwgMHhCRCwgMHhDNSwgMHg1NCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTgsIDB4M0QsIDB4MDAsIDB4NjEsIDB4ODAsIDB4QjYsIDB4MDEsIDB4RDAsCisweDBBLCAweDQ4LCAweDM4LCAweDAwLCAweEZELCAweDA2LCAweDg0LCAweDAzLCAweEQyLCAweDBBLCAweDQwLCAweDM5LCAweDQwLAorMHhGMSwgMHg4MCwgMHg4NiwgMHg0MywgMHhEMCwgMHgwQSwgMHg0OCwgMHgxQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywKKzB4MTAsIDB4MEYsIDB4NDAsIDB4NDgsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweDAwLCAweDc5LCAweDgwLCAweEU1LCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDE3LCAweDQwLCAweDc5LCAweDA4LAorMHhFQywgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgxRiwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNywKKzB4RDAsIDB4MUUsIDB4NjAsIDB4NzksIDB4MDAsIDB4QUQsIDB4MTEsIDB4QTQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDAsIDB4MEMsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLCAweDIzLCAweDAwLAorMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MiwgMHgzMSwgMHgwMiwgMHhDRCwgMHgwMCwgMHgxNCwgMHg0QiwKKzB4RDEsIDB4MDgsIDB4NDAsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MEQsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NzMsCisweDAxLCAweENELCAweDgwLCAweDc0LCAweDBCLCAweDUwLCAweDBDLCAweDQwLCAweDQ4LCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHgxNCwgMHgwMSwgMHg3NywgMHgwMywgMHhGQywgMHgyOSwKKzB4RDAsIDB4MTcsIDB4QzEsIDB4NUQsIDB4MDAsIDB4NUYsIDB4MDAsIDB4OUMsIDB4MTksIDB4RDAsIDB4MDcsIDB4QzAsIDB4MUUsCisweDAwLCAweDczLCAweDAyLCAweDRDLCAweDAxLCAweEYwLCAweDQ3LCAweEMwLCAweDFGLCAweDhDLCAweDdGLCAweDAwLCAweEZDLAorMHgwOSwgMHg3MiwgMHgwNSwgMHg0MCwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDgsIDB4N0MsIDB4MDAsIDB4RDAsIDB4MTEsIDB4NDAsIDB4NDYsCisweDAwLCAweDBFLCAweDQwLCAweDY4LCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDFGLCAweDQyLCAweDVDLAorMHgwMCwgMHhCMiwgMHgxMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxQiwgMHgxMCwgMHg3QywgMHgxMCwgMHg4MiwgMHgwMSwgMHhDMCwKKzB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjcsCisweDAwLCAweDhGLCAweDEwLCAweDU0LCAweDBBLCAweEYyLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlCLCAweDAwLCAweDRDLAorMHgwNiwgMHhEMCwgMHg5OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg4RiwgMHgwNCwgMHg1QywgMHg4MiwgMHhFMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4ODksIDB4QzIsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDEwLCAweDlDLCAweDAwLCAweDU0LAorMHgwMiwgMHhEMCwgMHhCOSwgMHg0MCwgMHhFNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHg2QSwgMHgxMCwgMHgxOSwgMHgwNCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NDUsIDB4MDIsIDB4QzIsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTAsIDB4MTMsCisweDc0LCAweDIyLCAweDEwLCAweDU5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgwOSwgMHg0MCwKKzB4RTcsIDB4MDAsIDB4OUQsIDB4ODAsIDB4NDUsIDB4MDIsIDB4OTAsIDB4MDksIDB4NDEsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDIsCisweDQ0LCAweDgyLCAweDkwLCAweDA5LCAweDQwLCAweDIzLCAweDAwLCAweDkxLCAweDAxLCAweDc0LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4MjAsIDB4MDIsIDB4OEQsIDB4MTQsIDB4MTQsIDB4NTYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDgsIDB4OEQsIDB4MDAsCisweDA0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDAyLCAweDhELCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDg4LAorMHgwMCwgMHgyMywgMHgwMiwgMHg4MSwgMHgwMCwgMHgzMCwgMHgwMiwgMHgxNCwgMHg0OCwgMHg0OSwgMHg0MywgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4ODYsIDB4MDAsIDB4MUYsIDB4MjQsCisweDRDLCAweDEwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDEwLCAweDFFLCAweDE0LCAweDRDLCAweDAwLCAweEIwLCAweEExLAorMHhDMiwgMHg4MywgMHgwMCwgMHgxRiwgMHgxRSwgMHg0QywgMHg3OCwgMHhGMCwgMHgyMSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxNywKKzB4MEEsIDB4M0MsIDB4ODEsIDB4MzAsIDB4NDEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEIwLCAweDJGLCAweDAxLCAweEJGLCAweDk0LCAweEZDLCAweDUyLCAweEYyLCAweDBBLAorMHhDOCwgMHgyRiwgMHgwMCwgMHg5QywgMHgxNCwgMHhGQywgMHgwMiwgMHhCMCwgMHgxRiwgMHg4MCwgMHgyRiwgMHgwMSwgMHhCRiwKKzB4ODEsIDB4NzAsIDB4MDYsIDB4RjEsIDB4NEYsIDB4QzAsIDB4MkYsIDB4NDEsIDB4QkYsIDB4MDEsIDB4RkMsIDB4NTMsIDB4RjAsCisweDQ5LCAweDQxLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LAorMHg4MCwgMHgyMywgMHgwMCwgMHg5NywgMHgwOCwgMHhGMCwgMHgzNywgMHgzMCwgMHgwQSwgMHhDMCwgMHgyRiwgMHgyMCwgMHg5RiwKKzB4MEMsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4QTIsIDB4MDAsIDB4QkYsIDB4MTAsIDB4NEMsIDB4MDIsIDB4RjAsCisweDI5LCAweEMwLCAweDI1LCAweDAyLCAweEIzLCAweDAwLCAweEZDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDY0LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMSwgMHgwMSwKKzB4MDUsIDB4NzQsIDB4M0QsIDB4QjAsIDB4MDEsIDB4NDAsIDB4MTcsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDEsIDB4RDEsCisweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDBELCAweDAyLCAweDUxLCAweDI4LCAweDkxLCAweDAxLCAweDQwLCAweDE0LCAweDExLAorMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0OCwgMHg3MSwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDQsIDB4ODUsIDB4NDIsIDB4MzQsIDB4MDIsIDB4NTksCisweDA4LCAweDQwLCAweDIzLCAweDA4LCAweDhELCAweDAyLCAweDM0LCAweDAyLCAweEQwLCAweDA5LCAweDQyLCAweDIyLCAweDEwLAorMHg4RCwgMHgwMCwgMHgxNiwgMHg4MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMSwgMHgwMCwgMHhDNSwgMHgyMCwgMHg3NCwgMHgwMiwKKzB4MTEsIDB4MDgsIDB4NTAsIDB4NDAsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweEE4LCAweDIxLCAweDAwLCAweDkxLCAweDA0LCAweDc0LCAweDAzLCAweEQwLCAweDM5LCAweDYwLCAweDI3LCAweDA4LAorMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHg4RCwgMHg0MiwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg1NCwgMHgwMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4NDAsIDB4OTUsIDB4MDQsIDB4NzQsIDB4MDIsIDB4NTIsIDB4MDksIDB4NDAsIDB4NjEsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDI4LCAweDI1LCAweDA4LAorMHg5NywgMHg5MywgMHg3OCwgMHgwQSwgMHg3NCwgMHgxOSwgMHhDMCwgMHhFNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwQSwKKzB4RjAsIDB4MDgsIDB4QzgsIDB4RTYsIDB4MDEsIDB4OUYsIDB4QjgsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MjgsIDB4QzIsIDB4MjUsCisweDAwLCAweDk3LCAweDA0LCAweDNDLCAweDBFLCAweDIwLCAweDA5LCAweEM0LCAweDE0LCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHg2NCwgMHgwMiwgMHg5RiwgMHgwMCwgMHgzQywgMHgxNiwKKzB4QjAsIDB4MDksIDB4QzQsIDB4RTcsIDB4MDAsIDB4OUYsIDB4ODAsIDB4N0MsIDB4MjYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAxLCAweDlGLCAweDAxLCAweDY4LCAweDAyLCAweEIwLCAweDI5LCAweEM0LCAweDI3LCAweDAxLCAweDlCLCAweDAwLCAweDdDLAorMHgwRSwgMHhCNCwgMHgwOCwgMHg0MCwgMHg1MiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MDgsIDB4RjAsIDB4NjEsIDB4QzAsIDB4MDcsCisweDAwLCAweDE3LCAweDAwLCAweDRDLCAweDQwLCAweEYwLCAweDIxLCAweDQwLCAweDA0LCAweDAwLCAweDAzLCAweDQyLCAweDVDLAorMHgwMCwgMHgzMCwgMHgyMSwgMHhDMCwgMHg4NywgMHgxMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhEMSwKKzB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsIDB4MTQsCisweDAwLCAweDUxLCAweDAwLCAweEM0LCAweDBELCAweEQwLCAweDM3LCAweDQwLCAweDFDLCAweDAyLCAweDUxLCAweDIwLCAweENDLAorMHg0MSwgMHhEMiwgMHgwNywgMHg0OCwgMHgxNCwgMHgwMCwgMHg3MSwgMHg0OSwgMHg0NCwgMHg4MSwgMHg1MCwgMHgwNSwgMHg0MCwKKzB4MTcsIDB4MDAsIDB4N0MsIDB4ODIsIDB4QzQsIDB4NjksIDB4RDAsIDB4MDcsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDYwLCAweEMxLCAweDQwLCAweDE0LAorMHhDRiwgMHhDMCwgMHhCNCwgMHg0MCwgMHg3MiwgMHgwMiwgMHhDNSwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHg4QywgMHg0MCwKKzB4MzAsIDB4MTAsIDB4QzEsIDB4MEIsIDB4MjQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MDAsIDB4QzksIDB4MDQsCisweDA0LCAweDgwLCAweEQwLCAweDMwLCAweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHg4MiwgMHgzQywgMHgyMiwgMHhFMSwgMHgwRCwgMHg5NCwgMHg0MywgMHhEMCwgMHgxMiwgMHg0MCwKKzB4N0UsIDB4MDAsIDB4QzEsIDB4MDEsIDB4ODQsIDB4MDEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4N0MsIDB4NDMsIDB4NjEsIDB4MDAsCisweEE0LCAweDI3LCAweDUwLCAweDBFLCAweDQwLCAweDNCLCAweDEwLCAweEFELCAweDIxLCAweDg0LCAweDAxLCAweEQwLCAweDIzLAorMHg0NCwgMHgxMCwgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwKKzB4NzgsIDB4MDEsIDB4RTMsIDB4OTEsIDB4OUQsIDB4MDcsIDB4RjAsIDB4MTYsIDB4QzAsIDB4NEEsIDB4MDAsIDB4RTcsIDB4MDEsCisweEFELCAweDA3LCAweEUxLCAweDEzLCAweEMwLCAweDc4LCAweDAyLCAweEEzLCAweDYxLCAweEZDLCAweDM3LCAweDMwLCAweDVFLAorMHhDMSwgMHg3QiwgMHgwMCwgMHhCQiwgMHgwMSwgMHg4QywgMHgwNiwgMHhGQSwgMHgxQiwgMHhDMCwgMHg1MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjAsIDB4MzUsIDB4MDQsIDB4REYsIDB4NDAsCisweDZDLCAweDAzLCAweEYzLCAweDAxLCAweEMwLCAweDAwLCAweDIwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEQwLCAweDA1LAorMHg5MCwgMHgzNywgMHgwMSwgMHgxRiwgMHgwMCwgMHg1QywgMHg5MywgMHhGMSwgMHhBRCwgMHg4MCwgMHhCNywgMHgwMywgMHg5QywKKzB4NDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDdGLCAweDAwLCAweEZGLCAweDAxLCAweERDLCAweDI1LCAweDMwLCAweDFGLAorMHhDMCwgMHg3RiwgMHgwMCwgMHhGNywgMHgxMSwgMHhGQywgMHgyNiwgMHgxMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgxMCwgMHg3RiwKKzB4MDksIDB4Q0MsIDB4ODcsIDB4MzAsIDB4OUYsIDB4QzAsIDB4RkMsIDB4OEEsIDB4QkYsIDB4MEQsIDB4RUMsIDB4MjQsIDB4RjEsCisweDE3LCAweEMwLCAweDBCLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHg4OCwgMHgzOSwgMHgyNCwgMHhFRCwgMHgwMCwgMHhGNCwgMHgwMywgMHhCMCwgMHg0QSwgMHg0OCwgMHgwQiwgMHgwMCwgMHhFRCwKKzB4MDQsIDB4QjQsIDB4MjEsIDB4MTAsIDB4NEUsIDB4NDIsIDB4N0IsIDB4MDEsIDB4MjksIDB4MDEsIDB4ODQsIDB4MDMsIDB4RjAsCisweDBFLCAweDQ0LCAweDM4LCAweDAwLCAweDhELCAweDQzLCAweDM0LCAweDIxLCAweEQwLCAweDg0LCAweDQwLCAweDU3LCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMCwgMHgzOSwgMHgwMCwgMHhFRCwKKzB4MTAsIDB4OTQsIDB4MDEsIDB4OTgsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDQsIDB4RUQsIDB4ODAsIDB4RjQsIDB4MDAsIDB4OTAsCisweDAyLCAweDQxLCAweDNCLCAweDAxLCAweDBELCAweDA4LCAweDk0LCAweDAzLCAweDEwLCAweDBFLCAweDQ4LCAweDM4LCAweDIwLAorMHgyNSwgMHgwMiwgMHhCNCwgMHgyMCwgMHhEOCwgMHgwRSwgMHg0MCwgMHgyMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4NzQsIDB4NDIsIDB4OTAsCisweDAwLCAweDQwLCAweDAzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDJELCAweDkwLCAweDEwLCAweDQwLCAweDM3LCAweDAwLAorMHgxOSwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgyRCwgMHg0MCwgMHhCMCwgMHgwMCwgMHgwRCwgMHgwOCwgMHgzNCwgMHgwMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweDg4LCAweDNELCAweDAwLCAweEZGLCAweDAxLCAweDVDLCAweDAyLCAweEIwLCAweEE1LCAweEMwLCAweDI3LCAweDkwLAorMHhGNywgMHgwMCwgMHg3QywgMHgyNywgMHhCNiwgMHhCOSwgMHhDOCwgMHgzRiwgMHgwMCwgMHg5RiwgMHgyMCwgMHhEQywgMHgwMywKKzB4MzAsIDB4QUYsIDB4QzgsIDB4M0MsIDB4MDgsIDB4OEYsIDB4MDEsIDB4NkMsIDB4ODMsIDB4RDAsIDB4MEQsIDB4QzgsIDB4NTcsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLAorMHhERiwgMHgxMCwgMHg3QywgMHgyOCwgMHhGMCwgMHgxNSwgMHhDMCwgMHhBNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywKKzB4NzAsIDB4MjEsIDB4QzAsIDB4NzcsIDB4MDAsIDB4MUUsIDB4NDIsIDB4MjUsIDB4ODMsIDB4QjAsIDB4OEQsIDB4QzAsIDB4MzcsCisweDAwLCAweDFELCAweDAyLCAweDdDLCAweDAzLCAweEQwLCAweDBELCAweEM0LCAweDI3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwOCwgMHgzRiwgMHgyOCwgMHhGQiwgMHg0MCwgMHhGQywgMHgwMiwKKzB4MzAsIDB4MzcsIDB4QzAsIDB4MkYsIDB4MDQsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MTYsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsCisweDAwLCAweDMzLCAweDAwLCAweENDLCAweDAzLCAweDcxLCAweDBGLCAweEUwLCAweDNDLCAweDBDLCAweEJGLCAweDIwLCAweERDLAorMHgwMywgMHhGMiwgMHgwQiwgMHhDMiwgMHgwNCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QTEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDYsIDB4QjAsIDB4MDUsIDB4QzAsIDB4RTcsCisweDAwLCAweERELCAweDAwLCAweDc0LCAweDBBLCAweEQwLCAweDExLCAweDQwLCAweDM2LCAweDAwLCAweDFCLCAweDAwLCAweDZDLAorMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNSwgMHgwMCwgMHgxQywgMHgwMywgMHg0MCwgMHgwNCwgMHhEMCwgMHgzNSwgMHg0MCwKKzB4ODQsIDB4MDYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsCisweDAwLCAweERELCAweDAwLCAweDc0LCAweDA0LCAweDE4LCAweDBELCAweDQwLCAweDY3LCAweDA0LCAweERELCAweDAwLCAweDY0LAorMHgwQSwgMHhEMCwgMHgxQiwgMHg0MCwgMHgzNywgMHgwMCwgMHgzMSwgMHgwNiwgMHhDMCwgMHgwMywgMHgwMCwgMHgwRCwgMHg0NCwKKzB4MzYsIDB4MDAsIDB4QkQsIDB4MDEsIDB4NDQsIDB4QTMsIDB4RDAsIDB4NjQsIDB4NTAsIDB4MDQsIDB4MDAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDgwLCAweENELCAweDAwLCAweDM2LAorMHgwMCwgMHgxOCwgMHgwQywgMHg0MCwgMHgwMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMSwgMHgwMCwgMHg0MiwKKzB4MzYsIDB4MjEsIDB4MTksIDB4MjQsIDB4MjQsIDB4MDMsIDB4MTUsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MUQsIDB4MDQsCisweDA0LCAweEE2LCAweEQwLCAweDI4LCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHhCMCwgMHgzRSwgMHgwOCwgMHhGQiwgMHg4MCwgMHg3QywgMHgwMCwgMHgxNCwgMHgwMSwgMHg0MCwKKzB4MjcsIDB4MDgsIDB4REYsIDB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzIsIDB4M0YsIDB4MDUsIDB4MTMsIDB4MTYsCisweDhDLCAweDAzLCAweDcwLCAweDBFLCAweEQwLCAweDNDLCAweDEwLCAweDFGLCAweDFDLCAweDVDLCAweDAxLCAweEYwLCAweDIxLAorMHhDMCwgMHgwNCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCMCwKKzB4M0YsIDB4MDAsIDB4RkYsIDB4NDAsIDB4RkMsIDB4MDIsIDB4RjIsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4NDAsCisweEJDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDM2LCAweDAwLCAweDFGLCAweDE0LCAweEZDLCAweDAzLCAweEYwLCAweDBGLAorMHhDNCwgMHgzRiwgMHgwMCwgMHgxRiwgMHgwNCwgMHhGRCwgMHgxMCwgMHhGMiwgMHg0MywgMHgwMCwgMHgxNywgMHg2MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0QsIDB4MDIsIDB4RkEsIDB4MDAsCisweEZDLCAweDIwLCAweEIwLCAweDBGLCAweEMwLCAweDNGLCAweDIwLCAweEY3LCAweEEwLCAweEVDLCAweDAzLCAweDMwLCAweDRGLAorMHhDNCwgMHgwRCwgMHgxMCwgMHgzMywgMHgwMSwgMHhGQywgMHgyNywgMHhGMSwgMHgzMywgMHhDMCwgMHgzRSwgMHgwMCwgMHgyRiwKKzB4MDEsIDB4NkMsIDB4ODAsIDB4RjIsIDB4MDMsIDB4QzQsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDM3LCAweDIwLCAweEYxLCAweDgyLCAweDM0LCAweDNBLCAweDEwLCAweDNGLAorMHg0MCwgMHhCRSwgMHgxNiwgMHhGMSwgMHg4OSwgMHhGNCwgMHgwRiwgMHgxMCwgMHg5RiwgMHhDOCwgMHg0NSwgMHgzMiwgMHg5NSwKKzB4MDAsIDB4NzQsIDB4MTEsIDB4RDEsIDB4NDEsIDB4NDAsIDB4M0YsIDB4MjAsIDB4MUQsIDB4NTQsIDB4NDQsIDB4MDQsIDB4RDAsCisweDAxLCAweDQwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLAorMHgyMCwgMHgzMywgMHgxMSwgMHhDMSwgMHgzNiwgMHg3NCwgMHgwMywgMHgxMSwgMHgyQywgMHg0NCwgMHgzMywgMHgwMSwgMHhDNSwKKzB4ODAsIDB4MzQsIDB4MjMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MTMsIDB4OTAsCisweDAwLCAweDQwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDI0LCAweDgwLCAweEQ4LCAweDAwLCAweDQwLCAweDQ3LCAweDgwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHg3NSwgMHgyMCwgMHhEMSwKKzB4MDAsIDB4NzQsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MjAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4ODMsIDB4MTAsCisweDBELCAweDQwLCAweDk3LCAweDAwLCAweDk0LCAweDA0LCAweDc0LCAweDIxLCAweEQwLCAweDExLCAweDQzLCAweDNGLCAweDAwLAorMHgxRCwgMHgxMCwgMHhDMCwgMHg2MCwgMHhDMCwgMHgzQiwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MzcsIDB4NDAsIDB4REIsIDB4MDAsIDB4M0MsIDB4MDYsIDB4QjQsCisweDBELCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDAwLCAweDZFLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDgzLCAweDAwLAorMHhEMywgMHg4MCwgMHg3QywgMHg5NywgMHhGMCwgMHgxMSwgMHhDOCwgMHgzNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg2QywgMHgwMCwKKzB4RjEsIDB4MzEsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA3LCAweDgwLCAweDNELCAweDAwLCAweEZGLCAweDgwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDIwLAorMHhERiwgMHgwMCwgMHhGQSwgMHg0MywgMHhGMCwgMHgwRCwgMHhDMiwgMHg0RCwgMHgwMSwgMHhGRiwgMHgwMSwgMHhGQywgMHgwMSwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDksIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4NDAsIDB4MUYsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAxLAorMHhERiwgMHgwOCwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzMywgMHgwMCwgMHhERiwgMHg0MCwgMHgzQywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDgsIDB4REIsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MjEsIDB4QzAsIDB4MzcsCisweDA0LCAweERGLCAweDAyLCAweDRDLCAweDAwLCAweEYwLCAweDA5LCAweEMwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHhGNCwgMHgwOSwgMHhGRCwgMHhDMSwgMHg3NCwgMHg4MywKKzB4NTAsIDB4M0YsIDB4NDQsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MEEsIDB4QzQsIDB4OEYsIDB4RDAsIDB4MEYsIDB4NDEsIDB4MzQsCisweDAwLCAweERELCAweDAxLCAweDc0LCAweDgxLCAweDAwLCAweDAxLCAweDAwLCAweEZGLCAweDAwLCAweDFDLCAweDAwLCAweDQ0LAorMHgxMiwgMHhEMCwgMHgzOSwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDcsIDB4QTAsIDB4NzYsIDB4MDAsIDB4QzksIDB4NDcsIDB4MzQsIDB4MDMsIDB4MTgsIDB4MEMsIDB4NDksIDB4MzMsCisweDAwLCAweENELCAweDAzLCAweDA0LCAweDJGLCAweEQwLCAweDVDLCAweDQwLCAweDMxLCAweDAwLCAweDQ5LCAweDAwLCAweDM0LAorMHgwMiwgMHgxMCwgMHgwMCwgMHg0MCwgMHhGMywgMHgwMCwgMHgxRCwgMHgwMCwgMHgxNCwgMHgwNCwgMHhEMCwgMHgwMCwgMHgwMSwKKzB4MUYsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NzgsCisweDAwLCAweEVELCAweDAxLCAweEI0LCAweDI3LCAweDUwLCAweDlFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDM1LCAweDg1LAorMHgwNywgMHhEMCwgMHg1RSwgMHg0MCwgMHg2OSwgMHg4MCwgMHhFRCwgMHgwMywgMHhGNCwgMHgwNiwgMHg5MCwgMHg5MiwgMHgwMiwKKzB4N0IsIDB4MDAsIDB4M0QsIDB4MDEsIDB4OTYsIDB4MjQsIDB4RDAsIDB4OUEsIDB4NDgsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAyLCAweENGLCAweDA4LCAweDNDLAorMHgwMywgMHgzQSwgMHgwQywgMHhDMSwgMHgzMywgMHgwMCwgMHhDRiwgMHgwRCwgMHgyQywgMHgwMywgMHhGMCwgMHg1QywgMHhDMCwKKzB4MTEsIDB4MDAsIDB4NEIsIDB4MTAsIDB4M0MsIDB4MDYsIDB4MzAsIDB4MDAsIDB4QzIsIDB4MzMsIDB4MDYsIDB4Q0YsIDB4MDAsCisweDFDLCAweDE0LCAweEYwLCAweDAwLCAweEMxLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgzRCwgMHgwMCwgMHhGRSwgMHgwMCwgMHhGOCwgMHgwMywgMHhGOCwgMHgwRiwgMHhDOSwKKzB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzEsIDB4MUMsIDB4MDAsIDB4RkYsIDB4MDgsCisweDNDLCAweDAyLCAweDc1LCAweDA3LCAweEM2LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEVELCAweDIwLCAweEYwLCAweDBCLAorMHhFOCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwKKzB4MzcsIDB4MTAsIDB4REUsIDB4NDQsIDB4N0MsIDB4MDMsIDB4MzAsIDB4NUQsIDB4QzIsIDB4MzQsIDB4MTEsIDB4RDMsIDB4MDQsCisweDdDLCAweDBCLCAweEYzLCAweDNELCAweEQxLCAweDM0LCAweDAwLCAweEQzLCAweDAxLCAweDRDLCAweDAzLCAweEYwLCAweDAxLAorMHhEMCwgMHhCNCwgMHgwNywgMHhDRSwgMHgwMCwgMHg0QywgMHgwNCwgMHgzMiwgMHgxOSwgMHhDMCwgMHg1NCwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MzgsIDB4MDAsIDB4RUQsIDB4OTYsCisweEY0LCAweDAzLCAweEIwLCAweDBDLCAweDU1LCAweDM4LCAweDE0LCAweEUxLCAweDE2LCAweEI0LCAweDVCLCAweEQwLCAweDRDLAorMHg0MCwgMHgyMCwgMHgxMCwgMHhGMSwgMHg4MCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwMiwgMHg0MCwgMHgzOCwgMHgwMSwgMHhFRCwKKzB4MDAsIDB4ODQsIDB4MDIsIDB4MTEsIDB4MEIsIDB4QzAsIDB4NEEsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweDEwLCAweDFFLAorMHg0QSwgMHg3MCwgMHgxMywgMHhFMSwgMHgwMSwgMHhBNCwgMHgwNywgMHhEMCwgMHg1RSwgMHg0MCwgMHg3OCwgMHg0MCwgMHhFMSwKKzB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MTYsIDB4NDMsIDB4NzgsIDB4ODEsIDB4RkQsIDB4MDEsIDB4MDQsIDB4ODQsIDB4MTgsCisweDFBLCAweDQwLCAweDBDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgyOCwgMHgyMywgMHgwMiwgMHhERCwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MiwgMHgwQywgMHg0MCwgMHgzMCwgMHg0MCwgMHhDMSwKKzB4MjAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDgsIDB4MzAsIDB4MDQsIDB4QzEsIDB4MDgsIDB4MDQsIDB4MDcsIDB4RDAsCisweDJDLCAweDQxLCAweDMwLCAweDAwLCAweERELCAweDEwLCAweDA0LCAweDBGLCAweDE4LCAweDNDLCAweDQwLCAweDRBLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHg1NSwgMHgwMCwgMHg1RiwKKzB4ODAsIDB4RkMsIDB4MjksIDB4MzAsIDB4MDUsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NDMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsCisweDA1LCAweDgyLCAweDFDLCAweDAwLCAweDczLCAweDAzLCAweENELCAweDE1LCAweEYwLCAweDM3LCAweEMwLCAweDE0LCAweDAwLAorMHg3RiwgMHgxMiwgMHhDQywgMHgxNSwgMHgzMCwgMHgxNywgMHhDMCwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MjAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDAxLCAweEMwLCAweDA3LCAweDA4LCAweDFGLCAweDAyLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEM4LCAweDg3LCAweDAwLAorMHgxRiwgMHgxMCwgMHg3QywgMHg4MCwgMHhGMywgMHgwMSwgMHhDMCwgMHgwNywgMHgzMCwgMHgxRiwgMHgwMCwgMHg3RCwgMHgxMCwKKzB4RjEsIDB4ODEsIDB4QzEsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDA4LCAweDY3LCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAyLCAweDcwLCAweDE5LCAweEMwLCAweDI3LCAweDAwLAorMHg5NywgMHgwMSwgMHg1QywgMHgyNiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyMywgMHgwMCwgMHg5MCwgMHg4MCwgMHg3QywgMHgwMiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4QTQsIDB4MDAsIDB4OUYsIDB4MDUsIDB4NEMsIDB4MTIsIDB4RjAsIDB4MjksIDB4QzAsIDB4NDMsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweEUyLCAweDIyLAorMHg5MSwgMHgwMCwgMHgxNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMywgMHg0NCwgMHg4QSwKKzB4RDAsIDB4OTksIDB4NDQsIDB4MjcsIDB4MDIsIDB4OTEsIDB4MDIsIDB4NzQsIDB4ODIsIDB4MTIsIDB4MDgsIDB4NDIsIDB4MjQsCisweDAwLCAweDlELCAweDAxLCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHg0NCwgMHg5MSwgMHgyMSwgMHg1NCwgMHgwMywKKzB4NTAsIDB4NDksIDB4NDEsIDB4MjMsIDB4MDAsIDB4OTUsIDB4ODYsIDB4NTQsIDB4MEEsIDB4RDEsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDk1LCAweDAxLCAweDM0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MSwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjAsIDB4MjQsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NTQsIDB4NTIsIDB4NTQsIDB4MDgsIDB4NDAsIDB4MjMsCisweDAyLCAweDgxLCAweDgwLCAweDAwLCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDQwLCAweDg1LCAweDAxLCAweDM0LAorMHgyMiwgMHgxMCwgMHg4OSwgMHg0MiwgMHg2MCwgMHgwMSwgMHg4RCwgMHgwOCwgMHgwNCwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0OCwKKzB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsCisweDAwLCAweDEzLCAweDk0LCAweDVDLCAweDEwLCAweDc0LCAweDQxLCAweEMxLCAweDg3LCAweDA1LCAweDE2LCAweDk0LCAweDVDLAorMHg1MCwgMHhGMSwgMHg0NSwgMHhDMSwgMHgxNywgMHgwNSwgMHgxNywgMHgwQSwgMHg3QywgMHgwOCwgMHgzNCwgMHgyMCwgMHhDMCwKKzB4QzQsIDB4MDIsIDB4MUYsIDB4MDIsIDB4NEQsIDB4MDQsIDB4RjAsIDB4QjEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDJGLCAweDA1LCAweDlGLCAweDM0LCAweEZDLAorMHg1MiwgMHhCMCwgMHgwOSwgMHhDMiwgMHgyNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4QkIsIDB4MDEsIDB4RkMsIDB4MTIsIDB4RjAsIDB4NEIsIDB4RDAsIDB4NjcsIDB4MDIsIDB4QkYsIDB4MDQsCisweEZDLCAweDIyLCAweEYwLCAweDlCLCAweEMyLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwgMHgwMiwgMHhCRiwgMHg4NiwgMHgwQywgMHgxNiwgMHhCMCwgMHg0QiwgMHhDMCwKKzB4MjcsIDB4MDUsIDB4QkIsIDB4MDAsIDB4REMsIDB4ODIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MkQsIDB4MDAsIDB4QkYsIDB4QzAsCisweDdDLCAweDIyLCAweDMwLCAweDI5LCAweEMwLCAweDJGLCAweDAwLCAweEIxLCAweDAyLCAweENDLCAweDAyLCAweEUwLCAweDBCLAorMHhDMCwgMHg2MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwKKzB4NDcsIDB4MDEsIDB4MUQsIDB4MDEsIDB4NDQsIDB4NUMsIDB4MTAsIDB4MDEsIDB4NDAsIDB4ODcsIDB4MDEsIDB4MUQsIDB4MDAsCisweDQ0LCAweDAwLCAweDE0LCAweEExLCAweDQwLCAweDA0LCAweDAwLCAweDBELCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAxLAorMHg0MCwgMHgwNywgMHgwMCwgMHgxNSwgMHgwNCwgMHg0NSwgMHgwMCwgMHhEMiwgMHgwMSwgMHg0OCwgMHg3MCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDYsCisweDA0LCAweDIyLCAweDkyLCAweDI4LCAweDQwLCAweDIzLCAweDA0LCAweDhELCAweDIyLCAweDA0LCAweDhBLCAweDEwLCAweDA4LAorMHg1MCwgMHhBMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgxMiwgMHgxMCwgMHgwOCwgMHg2MCwgMHgyMywgMHgxMCwgMHg4MSwKKzB4MjAsIDB4MDUsIDB4ODMsIDB4RDAsIDB4MDksIDB4NjAsIDB4NDIsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDgwLCAweDlELCAweDAwLCAweDQ1LCAweDAyLCAweDEwLCAweDA5LAorMHg2MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NywgMHgwMiwgMHgxMCwgMHgwOSwgMHgwMCwgMHgyNCwgMHgwMSwgMHg5RCwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4QTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTUsIDB4MTQsIDB4NDUsIDB4MEUsIDB4RDEsCisweDY5LCAweDQwLCAweDYyLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHg4OCwgMHg2NywgMHgwMiwgMHg5RiwgMHgwMCwgMHg0QywgMHgzNiwgMHhCMCwgMHgwOSwgMHhDOCwgMHgyNywgMHgwMCwgMHg5QiwKKzB4NDAsIDB4NUMsIDB4MDIsIDB4MTIsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDEsIDB4OUUsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzQsCisweDI5LCAweEMwLCAweDI3LCAweDAwLCAweDgzLCAweDAxLCAweDRDLCAweDBFLCAweEYyLCAweDI5LCAweEQwLCAweDE2LCAweDIwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHg2NSwgMHgxMCwgMHg5RiwKKzB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4NTAsIDB4M0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI2LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwMSwgMHg3RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg1MSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NEQsIDB4MDAsIDB4NTAsCisweDAxLCAweEMwLCAweDA1LCAweDAwLCAweDAzLCAweDA4LCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMxLCAweDg3LCAweDAxLAorMHgxMywgMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwMSwgMHgwMSwgMHgxMywgMHgwMiwgMHg0QywgMHgwMCwKKzB4MzAsIDB4MjEsIDB4QzEsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweEEwLCAweERDLCAweDAwLCAweDc1LCAweDE5LCAweDQ0LCAweDAxLCAweDUwLCAweDI3LCAweEMwLCAweDE2LCAweDUwLAorMHg3MSwgMHgyMywgMHhGNCwgMHgyMSwgMHhEMCwgMHgwNiwgMHg0MSwgMHgxRiwgMHgyMCwgMHg3NSwgMHgwMSwgMHg0NCwgMHgwMSwKKzB4RDAsIDB4MDUsIDB4NDgsIDB4MUYsIDB4MTgsIDB4NzUsIDB4MEEsIDB4NDQsIDB4MDEsIDB4MTEsIDB4MjcsIDB4QzAsIDB4NTIsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDcyLCAweDgxLAorMHhDOSwgMHgwMywgMHgwNCwgMHgwMywgMHgxMCwgMHg5QywgMHg0MSwgMHgzMywgMHgwMCwgMHg4MSwgMHgwMywgMHgzNCwgMHgyQiwKKzB4RDAsIDB4MkMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzUsIDB4MTEsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4RjEsCisweDgwLCAweEM5LCAweDAxLCAweDA0LCAweDAzLCAweDEyLCAweDhELCAweDQwLCAweDUyLCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHg3OCwgMHgwNCwgMHhFRCwgMHgyMCwgMHhDNCwgMHgwMywKKzB4NTAsIDB4MUEsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjAsIDB4MDEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4N0IsCisweDQ4LCAweEU1LCAweDExLCAweDg0LCAweDIzLCAweEMwLCAweDhFLCAweDQwLCAweDEzLCAweDA0LCAweEVELCAweDEwLCAweEM0LAorMHgwNywgMHgxQywgMHgwQiwgMHg0MCwgMHgxNiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4MTAsIDB4N0MsIDB4MDAsIDB4RkIsIDB4ODEsIDB4OEMsIDB4NDcsIDB4NzQsIDB4MUUsIDB4QzAsIDB4NzMsCisweDAxLCAweEEzLCAweDAxLCAweEJDLCAweDA2LCAweEYwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweDY3LCAweDgxLCAweDg0LAorMHhENywgMHhGMCwgMHgxRSwgMHhDMSwgMHg2OSwgMHgyMCwgMHhCQiwgMHgwMSwgMHg4RCwgMHgwNywgMHgzMCwgMHgxQiwgMHhDMCwKKzB4NTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MTUsCisweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDMzLCAweEYwLCAweDAwLCAweEMwLCAweEI1LCAweDIwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMCwgMHhGMSwgMHgwOSwgMHhDMCwgMHgzMywgMHgwMCwgMHgxQiwgMHgwMCwgMHg3NSwgMHgwMywgMHhGMiwgMHg2RCwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjEsIDB4MDEsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDVGLCAweDAwLCAweDdGLCAweDAxLCAweEZDLAorMHgwNywgMHg3MCwgMHgxRiwgMHhDMCwgMHhGRiwgMHg0NCwgMHhCMywgMHgwOSwgMHg5QywgMHgyNywgMHg3MCwgMHg5RiwgMHhDMCwKKzB4N0YsIDB4MDAsIDB4QTMsIDB4NDEsIDB4RUMsIDB4MDcsIDB4MzEsIDB4MUQsIDB4QzAsIDB4NEYsIDB4MDAsIDB4RjMsIDB4MDEsCisweENDLCAweDA3LCAweDMwLCAweDlCLCAweEMwLCAweDAwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHhCOSwgMHgwMCwgMHg2RCwgMHgwMiwgMHhCNCwgMHgwMywgMHhCMCwgMHgwQSwgMHg2MCwKKzB4M0IsIDB4MDAsIDB4QzEsIDB4MDgsIDB4QjQsIDB4ODIsIDB4MTAsIDB4MDQsIDB4NDgsIDB4M0IsIDB4MDAsIDB4MjEsIDB4MDAsCisweDA0LCAweDM3LCAweDEwLCAweDFFLCAweEMwLCAweDBGLCAweDAwLCAweEZCLCAweDE4LCAweEM0LCAweDIzLCAweEIyLCAweENBLAorMHg1MCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTksIDB4MDAsIDB4NkQsIDB4MDgsIDB4RjQsIDB4MDMsIDB4NTAsIDB4MEEsIDB4NDAsIDB4MzksIDB4MDAsIDB4QTksIDB4ODAsCisweDk0LCAweDAyLCAweDUwLCAweDBFLCAweDYwLCAweDFCLCAweDAyLCAweDM5LCAweDAwLCAweEM0LCAweDEzLCAweDEwLCAweDBFLAorMHg0MSwgMHgwQiwgMHgwMCwgMHhCMSwgMHgwMCwgMHhDNCwgMHg0MywgMHg1MCwgMHgwQSwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4NDMsIDB4MjAsIDB4MEQsIDB4ODAsCisweDM0LCAweDAzLCAweDkwLCAweDAwLCAweDQwLCAweDM3LCAweDA4LCAweDQ5LCAweDQwLCAweDM0LCAweDAyLCAweDEwLCAweDAwLAorMHg0NCwgMHg1MywgMHg0MiwgMHgwOSwgMHgwMiwgMHgwNCwgMHgwMywgMHg5NCwgMHgxRCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg4OSwKKzB4MTAsIDB4MDQsIDB4MDYsIDB4RDgsIDB4NjAsIDB4NDAsIDB4MTEsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDY0LCAweDAxLCAweDlGLCAweDAwLCAweEZDLCAweDAzLCAweDc0LCAweDAxLAorMHhDMCwgMHgzRiwgMHgwMCwgMHg5QiwgMHgwMCwgMHg1QywgMHgwMiwgMHg1MCwgMHgwMSwgMHhDMCwgMHgzNywgMHgwOCwgMHgxMywKKzB4MDIsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4QkYsIDB4NDAsIDB4MzcsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NEQsIDB4QUIsIDB4NTAsCisweDA5LCAweEMxLCAweDU1LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHhBNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHg0MywgMHhGMCwgMHgyMSwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywKKzB4MjAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzMsIDB4MDAsIDB4MTcsIDB4ODIsIDB4NUMsIDB4NDMsIDB4NzAsCisweDBELCAweEMwLCAweDg3LCAweDAwLCAweDVGLCAweEMyLCAweDdDLCAweDAzLCAweEIwLCAweDI5LCAweDg4LCAweDA2LCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgyRiwgMHgyMCwgMHgyRiwKKzB4ODAsIDB4RDQsIDB4MDMsIDB4M0MsIDB4MDIsIDB4QzgsIDB4MzQsIDB4MDAsIDB4QjMsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjAsCisweDJCLCAweEUwLCAweDI0LCAweDIwLCAweDMzLCAweDEwLCAweEY0LCAweDAzLCAweEIwLCAweDBGLCAweEMwLCAweDBDLCAweDAwLAorMHg3RiwgMHgwMCwgMHhDQywgMHgyNywgMHhGMCwgMHgwOSwgMHhDMCwgMHgwMywgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4RTYsIDB4MDAsIDB4OUQsIDB4NDMsIDB4MDYsIDB4MDMsIDB4MTAsCisweDExLCAweDQwLCAweDM0LCAweDAwLCAweDgxLCAweDAwLCAweDQ0LCAweDE0LCAweEQwLCAweDE4LCAweEUwLCAweDI2LCAweDAwLAorMHgxMSwgMHgwNCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwgMHg0NCwgMHgwMSwgMHg0NywgMHg4NSwgMHg3QywgMHgwMiwKKzB4RDAsIDB4NTEsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweEEwLCAweDQ0LCAweDAwLCAweDlELCAweDIxLCAweDQwLCAweDAzLCAweDkyLCAweDM5LCAweDQ0LCAweDM0LCAweDAwLAorMHg5MSwgMHgwMCwgMHg1NiwgMHgwNiwgMHhEMiwgMHgyNSwgMHg0OCwgMHg3NCwgMHgwMCwgMHgzMSwgMHg4NCwgMHg3NCwgMHg4MywKKzB4RDgsIDB4MEQsIDB4NDAsIDB4NEMsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NDUsIDB4MDIsIDB4RDAsIDB4MTMsIDB4NDAsIDB4MDcsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLAorMHg4RCwgMHgyMCwgMHg1NCwgMHgwMywgMHgxMiwgMHgwOCwgMHg0MCwgMHgzMCwgMHgyMCwgMHhDMSwgMHg0MCwgMHgxNiwgMHgwMiwKKzB4RDAsIDB4MjQsIDB4NDQsIDB4MzIsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MzMsIDB4RDgsIDB4MEMsIDB4NDUsIDB4MDAsCisweDEwLCAweDg1LCAweDAwLCAweDM0LCAweDIyLCAweEQwLCAweDAwLCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMCwgMHgwNiwgMHgwOCwgMHgxRiwgMHgwMCwgMHhENCwgMHgwMywKKzB4MzIsIDB4MDksIDB4QzIsIDB4M0MsIDB4MDAsIDB4OTMsIDB4MkEsIDB4NTQsIDB4MDAsIDB4RDksIDB4MEQsIDB4NDAsIDB4MDQsCisweDAwLCAweDEzLCAweDAwLCAweEZDLCAweDlCLCAweEIxLCAweDBGLCAweEMwLCAweDA0LCAweDAwLCAweDlGLCAweDAwLCAweDRDLAorMHgwMiwgMHhGMSwgMHgwMSwgMHhDMCwgMHgwMywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4QjIsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4QUQsIDB4MDMsIDB4RjEsIDB4MDMsIDB4QzAsIDB4M0YsCisweDEwLCAweDdGLCAweDA0LCAweEVDLCAweDAwLCAweEYwLCAweDAzLCAweEM2LCAweDBGLCAweDQwLCAweDNGLCAweDAwLCAweDNDLAorMHgwQiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwRCwgMHgxMCwgMHhCNywgMHgwMCwgMHhGQywgMHgxMiwgMHhGOCwgMHgwMywgMHhDMCwKKzB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MkYsCisweDAxLCAweEJGLCAweDA4LCAweEZDLCAweDQzLCAweDMwLCAweDhGLCAweEMwLCAweDNGLCAweDA1LCAweDNGLCAweDAzLCAweERDLAorMHgyMywgMHhGMCwgMHgzQiwgMHhEMCwgMHgzQywgMHgwMCwgMHhGQiwgMHgwMCwgMHhGQywgMHgxMywgMHgzMCwgMHgxMywgMHhDMCwKKzB4N0MsIDB4MTAsIDB4M0QsIDB4NjEsIDB4Q0MsIDB4MTgsIDB4MzAsIDB4NDMsIDB4QzEsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDEwLCAweDg3LCAweDFELCAweDlELCAweDAyLCAweERDLAorMHgwRiwgMHgwMCwgMHg2RiwgMHg0MCwgMHhCRiwgMHgwMSwgMHgxRCwgMHgwNCwgMHhDNCwgMHgwQiwgMHg3MCwgMHgwRCwgMHg0MCwKKzB4RkMsIDB4MDAsIDB4RjEsIDB4MDMsIDB4RjQsIDB4QTcsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MDQsIDB4MDgsIDB4MUQsIDB4MDAsCisweDA0LCAweEFCLCAweDEwLCAweDI5LCAweDUxLCAweDBDLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgyMSwgMHg4MiwgMHgwRCwgMHgwOCwgMHgxNCwgMHgwMywgMHgxMCwgMHg2QywgMHg0OCwKKzB4MzMsIDB4MTQsIDB4OUQsIDB4MDAsIDB4MTQsIDB4MzMsIDB4RDIsIDB4NDgsIDB4NjAsIDB4MzAsIDB4MEEsIDB4QzksIDB4MDgsCisweDM0LCAweDAzLCAweDEwLCAweDAxLCAweDQwLCAweDMwLCAweDIwLCAweDFELCAweDAwLCAweDA0LCAweDEwLCAweDEwLCAweDQwLAorMHg0MiwgMHg0RCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwKKzB4NDcsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NTQsIDB4ODMsIDB4MTQsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDEsCisweDQ0LCAweDAzLCAweDUwLCAweDBDLCAweDYwLCAweDM0LCAweDEwLCAweEQwLCAweDAwLCAweDc0LCAweDAzLCAweDE0LCAweDE1LAorMHgxOCwgMHgyNCwgMHgwMCwgMHgxRCwgMHgwMSwgMHg0NCwgMHg4MSwgMHgxNiwgMHgwMSwgMHg0MSwgMHgwRCwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4QTgsIDB4QzcsIDB4MDAsIDB4OUYsIDB4MDEsCisweDVDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDBGLCAweDAzLCAweDVDLCAweDgzLCAweEYwLCAweDhELAorMHhDMCwgMHgzMCwgMHgwOCwgMHhEQiwgMHg2MCwgMHgzQywgMHgwMywgMHgzMCwgMHgyMCwgMHhDNCwgMHgzNCwgMHgwMCwgMHgwRiwKKzB4NTMsIDB4NEMsIDB4MjQsIDB4MzAsIDB4MTEsIDB4QzQsIDB4MjksIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDBELCAweDAwLCAweEJGLCAweDAwLCAweERDLCAweDAzLCAweEYxLCAweDBELAorMHhDMCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHhEMCwgMHgxRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwKKzB4NTAsIDB4RjAsIDB4ODMsIDB4RjAsIDB4MDMsIDB4QzgsIDB4OEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4QkMsIDB4QzcsIDB4RjAsCisweDNELCAweEMwLCAweDFFLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLAorMHgwOCwgMHhBNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHgwQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDNCwgMHgzNSwgMHgwMCwgMHgxRiwKKzB4MDIsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDA1LCAweEMwLCAweDM0LCAweDEwLCAweDFGLCAweDAwLCAweDRDLCAweDIyLCAweDM0LCAweDJDLCAweEMwLCAweDI4LCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHg2NCwgMHgwNCwgMHg5RCwKKzB4MDAsIDB4QzQsIDB4M0IsIDB4RDAsIDB4MEYsIDB4NDAsIDB4M0MsIDB4MDAsIDB4OUQsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RDAsCisweDBELCAweDQ4LCAweDNGLCAweDAwLCAweEYxLCAweDAzLCAweEY0LCAweDJCLCAweEQwLCAweEE1LCAweEMwLCAweDI2LCAweDA4LAorMHgxRCwgMHgwMCwgMHg0NCwgMHgwRiwgMHgxMCwgMHgzRCwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4RTIsIDB4MzQsIDB4MEQsIDB4NDAsIDB4MDQsIDB4MDcsIDB4OTAsCisweDBDLCAweDQ0LCAweDMwLCAweDA4LCAweDhDLCAweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDBDLCAweDQ4LCAweDMyLCAweDAwLAorMHhDMCwgMHgwMSwgMHgzNCwgMHgyNywgMHhEMCwgMHgyMCwgMHg0MCwgMHgzMCwgMHgwNCwgMHgwRCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTAsIDB4MDQsIDB4NDEsIDB4MEMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDBELCAweDAyLCAweDdBLCAweDAyLCAweDZELCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDlFLCAweDQyLCAweDc4LCAweDAwLAorMHhBRCwgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3MywgMHgwMiwgMHhFNSwgMHgwMSwgMHhCNCwgMHgwNywKKzB4RDAsIDB4MTcsIDB4NDAsIDB4NUIsIDB4MDQsIDB4M0QsIDB4MDEsIDB4ODQsIDB4MDYsIDB4MTIsIDB4OTIsIDB4NDEsIDB4MzQsCisweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDMyLCAweDAwLAorMHg1RiwgMHgwOCwgMHgwRCwgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzMSwgMHgwMiwgMHg4RiwgMHgwOCwgMHgzNCwgMHgwMywKKzB4RjAsIDB4NEMsIDB4QzAsIDB4MzMsIDB4MEEsIDB4QzcsIDB4MTAsIDB4M0MsIDB4MDMsIDB4RjAsIDB4QTEsIDB4RTAsIDB4MzAsCisweDAwLCAweDVGLCAweDAwLCAweDBDLCAweDgwLCAweDMwLCAweDUwLCAweEQwLCAweDQ4LCAweDQwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCQSwgMHgzRCwgMHgyMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywKKzB4RjAsIDB4MEYsIDB4QzMsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MjgsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MEYsIDB4QzQsIDB4M0YsCisweDAyLCAweERCLCAweDEwLCAweEZDLCAweDIzLCAweEYwLCAweDA3LCAweEUwLCAweDNFLCAweDgwLCAweDdGLCAweDAwLCAweEZDLAorMHgwMCwgMHhGOCwgMHg4MSwgMHhDMiwgMHgwQiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QTAsIDB4NTcsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4NkYsIDB4QjAsIDB4NUQsIDB4RTAsIDB4QjcsCisweDE0LCAweDFGLCAweDAwLCAweDdDLCAweDEzLCAweEYwLCAweDBELCAweEMwLCAweEI3LCAweDAzLCAweEQzLCAweDE1LCAweDRDLAorMHg1MywgMHhGMCwgMHgwNSwgMHhFMCwgMHg3NywgMHgwMCwgMHg1MywgMHgwMCwgMHg3QywgMHgwMSwgMHgzMCwgMHgwRCwgMHhDMCwKKzB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OTgsIDB4MUQsCisweDAwLCAweEVCLCAweDAwLCAweEI0LCAweDAzLCAweDE4LCAweENGLCAweDYwLCAweEI4LCAweDAxLCAweEVELCAweDAwLCAweEI0LAorMHg0QiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMywgMHhDMSwgMHgwNCwgMHg4NCwgMHgxQiwgMHhEMCwgMHgwNiwgMHg0MCwKKzB4MUIsIDB4MjAsIDB4NjEsIDB4MjAsIDB4RjQsIDB4MDMsIDB4MTQsIDB4MEYsIDB4NDAsIDB4NEMsIDB4NjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAyLCAweDc5LCAweDE0LCAweDYxLCAweDIxLCAweDM2LAorMHgwNywgMHgxOCwgMHg1RSwgMHg0QywgMHg3OSwgMHgwMCwgMHg2RCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg2NCwKKzB4NzEsIDB4MDEsIDB4RTEsIDB4NDEsIDB4OTYsIDB4MTcsIDB4RDAsIDB4MTYsIDB4NDAsIDB4N0YsIDB4MDAsIDB4NjUsIDB4MDEsCisweEI2LCAweDA3LCAweDk0LCAweDFFLCAweDQyLCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNiwgMHgyMCwgMHgzMywgMHgwMCwgMHhDOSwgMHgwQiwgMHgzNCwgMHg4MywgMHgxMCwgMHgwQywgMHg0MCwKKzB4MzAsIDB4MDAsIDB4Q0QsIDB4MDcsIDB4NzQsIDB4MDMsIDB4RDAsIDB4OUMsIDB4NjAsIDB4MzMsIDB4NDAsIDB4QzEsIDB4MDAsCisweDE1LCAweDAzLCAweEQxLCAweDFDLCAweDQyLCAweDMzLCAweDAwLCAweEM0LCAweDA2LCAweDM0LCAweDE3LCAweDkwLCAweDlDLAorMHg0MCwgMHg1OCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwKKzB4MUYsIDB4MDAsIDB4NzMsIDB4MDIsIDB4N0MsIDB4MDEsIDB4QjAsIDB4MDUsIDB4QzIsIDB4MTcsIDB4MDAsIDB4N0YsIDB4MTAsCisweDdDLCAweDAxLCAweEYwLCAweDE1LCAweEMwLCAweDEzLCAweDAwLCAweDUxLCAweDAwLCAweDVDLCAweDAxLCAweEYwLCAweDQ2LAorMHhDMCwgMHgxRiwgMHgwMCwgMHg3NywgMHgxMiwgMHhGQSwgMHgxRCwgMHhCMCwgMHhCNywgMHhDNCwgMHg1QywgMHgyMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDQsCisweDdDLCAweDAwLCAweEY0LCAweDAxLCAweEM4LCAweDA3LCAweDAwLCAweDFDLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg2NCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDNCwgMHgwNywgMHg0MCwgMHgxQiwKKzB4MDAsIDB4N0MsIDB4MDgsIDB4NzAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweEU1LCAweDA0LCAweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHhBMCwgMHg0QywgMHgwMiwgMHgzMiwgMHgwOSwgMHhDOCwgMHgyNywgMHgwOSwgMHg5MywKKzB4MDAsIDB4M0MsIDB4OTIsIDB4MzAsIDB4MTksIDB4QzEsIDB4MjYsIDB4MDEsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDYsIDB4MzAsCisweDg5LCAweEMwLCAweDQxLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgyMCwgMHgyNiwgMHgxMCwgMHg5RCwgMHg4MCwgMHg3NCwgMHgzMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDksIDB4OTEsIDB4MjMsIDB4NzQsIDB4NEUsIDB4MTQsCisweDk5LCAweDQyLCAweEE0LCAweDA0LCAweDlELCAweDAwLCAweDc0LCAweDBBLCAweDEwLCAweDI5LCAweDQ0LCAweDA0LCAweDAwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgzNCwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NTQsIDB4MDIsIDB4QzAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NDQsIDB4MDIsIDB4NTAsCisweDA5LCAweDQyLCAweDI1LCAweDQwLCAweDkxLCAweDE4LCAweDc0LCAweDAyLCAweDkwLCAweDI5LCAweDQwLCAweDI2LCAweDAwLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgyMiwgMHgwOCwgMHgwOCwgMHg0MCwgMHg3MSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjgsIDB4MzAsIDB4MDUsIDB4OEQsIDB4NTQsIDB4MzQsIDB4MDIsIDB4RDAsCisweDg4LCAweDQwLCAweDIzLCAweDAyLCAweDhELCAweDg4LCAweDA1LCAweDIyLCAweDEwLCAweDg4LCAweDQwLCAweDIzLCAweDAwLAorMHg4MSwgMHgwMCwgMHgzMCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MiwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNiwgMHgyMywKKzB4MTAsIDB4MDgsIDB4NDAsIDB4NTAsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFELCAweEIwLCAweDA2LCAweDIxLCAweDFGLCAweDI0LCAweDVDLCAweEQwLCAweEYwLCAweDYxLCAweEM1LCAweDg3LCAweDA1LAorMHgxRiwgMHgwMiwgMHg0QywgMHg1OCwgMHg3MCwgMHgyMSwgMHhDMCwgMHgwNSwgMHgwNSwgMHgxMywgMHgzNCwgMHg3QywgMHg1MCwKKzB4MzAsIDB4MDEsIDB4QzAsIDB4ODYsIDB4MDIsIDB4MUYsIDB4MEEsIDB4N0MsIDB4NTgsIDB4MzQsIDB4NDUsIDB4QzEsIDB4NzUsCisweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEEwLCAweDJGLCAweDA1LAorMHhCRiwgMHgzNCwgMHg3QywgMHgwMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwMSwgMHhCRiwgMHgwNCwgMHg3QywgMHgxMiwKKzB4RjQsIDB4NEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4NkIsCisweDAwLCAweEJGLCAweDIxLCAweEZDLCAweDEyLCAweEYwLCAweDRCLCAweEMxLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwgMHgwMCwgMHg5MywgMHgwMiwgMHhEQywgMHgwMiwKKzB4RjAsIDB4ODksIDB4QzAsIDB4QTYsIDB4MTUsIDB4OUIsIDB4MDAsIDB4NUMsIDB4NDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MkUsCisweDA0LCAweEJGLCAweDAwLCAweERDLCAweDAyLCAweEIyLCAweDBCLCAweEMwLCAweDJGLCAweDA4LCAweDlGLCAweDAwLCAweENDLAorMHhDMiwgMHgzMiwgMHgwQiwgMHhEMCwgMHg2MCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUMsIDB4MTgsIDB4MDcsIDB4MDEsIDB4MUIsIDB4NjAsIDB4NzQsIDB4QTgsIDB4RDAsIDB4QTAsIDB4NDIsIDB4ODQsCisweDAwLCAweDExLCAweDIwLCAweDc0LCAweDA4LCAweDEwLCAweDQxLCAweDQwLCAweDg0LCAweDAwLCAweDE3LCAweDRBLCAweDQ0LAorMHgyOCwgMHgxMCwgMHgwMSwgMHg0NCwgMHgwNywgMHgyMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwOCwgMHgxNCwgMHgwMSwgMHg0MCwKKzB4NzAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4QTAsIDB4QTEsCisweDg0LCAweDgxLCAweDAyLCAweDM0LCAweDAyLCAweEQwLCAweDQ4LCAweDQwLCAweDIyLCAweDAxLCAweDg1LCAweDE0LCAweDM0LAorMHg1MiwgMHgxMiwgMHgwOSwgMHg2MSwgMHgyMiwgMHgwMCwgMHg4RCwgMHgwMCwgMHgxNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwKKzB4MzMsIDB4ODAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NjIsIDB4NEEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDIwLCAweDI1LCAweDAwLCAweDk5LCAweDgwLCAweDc0LAorMHgwMiwgMHhDMCwgMHgwOCwgMHg0MCwgMHgyNiwgMHgyMCwgMHg5NSwgMHgwMiwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0QSwKKzB4MjQsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4QTcsIDB4MDAsIDB4OEQsIDB4MTQsCisweDQ1LCAweDAyLCAweDEwLCAweDBELCAweDQwLCAweDYyLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMSwgMHg5MywgMHg4NywgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwKKzB4MjYsIDB4MDgsIDB4OTcsIDB4MDAsIDB4NUUsIDB4MDIsIDB4MTAsIDB4MDgsIDB4QzAsIDB4MjYsIDB4MjAsIDB4OUYsIDB4MjAsCisweDVDLCAweDAyLCAweEIwLCAweDU5LCAweEMwLCAweDI3LCAweDIwLCAweDlFLCAweDIzLCAweDRDLCAweDQyLCAweDMwLCAweDQ5LAorMHhDMCwgMHgxNiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwKKzB4NjEsIDB4MDIsIDB4OUYsIDB4MDUsIDB4N0MsIDB4MDIsIDB4RDAsIDB4MDksIDB4QzAsIDB4MjEsIDB4NDAsIDB4OUIsIDB4ODQsCisweDdDLCAweDAyLCAweEY0LCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDZDLCAweDQyLCAweEQ0LCAweDM5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgyMSwgMHg3QywgMHgwMiwgMHhGMCwgMHg0OCwgMHhDMCwgMHg0OSwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODQsIDB4MDQsIDB4MUYsIDB4MDIsCisweDZDLCAweDAwLCAweEUwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDEzLCAweDgwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLAorMHhDMCwgMHgwNSwgMHgwNCwgMHgxRiwgMHgxMCwgMHg0QywgMHgwMCwgMHg3MCwgMHgxMSwgMHhDMiwgMHgwNywgMHgwMSwgMHgxRiwKKzB4QTIsIDB4M0MsIDB4MjAsIDB4MTAsIDB4NDEsIDB4QzIsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweERDLCAweDAwLCAweDVELCAweDIwLCAweEQ0LCAweDY1LCAweEMwLCAweDA1LAorMHg0MCwgMHgxNCwgMHgwMCwgMHg1MCwgMHgwMCwgMHg3NCwgMHg4MSwgMHgxMCwgMHgwNSwgMHhDMCwgMHgxQywgMHgwMCwgMHg2RCwKKzB4MjAsIDB4ODAsIDB4MEQsIDB4NzAsIDB4MDcsIDB4ODAsIDB4MUQsIDB4MTAsIDB4NUQsIDB4ODAsIDB4RjQsIDB4MDEsIDB4MTAsCisweDM3LCAweDQyLCAweDUzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHhBMCwgMHhGMiwgMHgwMiwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg1MCwgMHgzMCwgMHg4MCwgMHhDMSwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4Q0QsIDB4MEEsIDB4MDAsIDB4MEIsIDB4RDgsCisweDhDLCAweDQ4LCAweEIyLCAweDAwLCAweENDLCAweDAwLCAweDM2LCAweDkzLCAweDkwLCAweDAwLCAweDQ0LCAweDUzLCAweDAwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4OCwgMHgzOCwgMHgwMCwgMHhDRCwKKzB4MDEsIDB4OTQsIDB4MDAsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4QzIsIDB4RTEsIDB4MDQsIDB4QjQsIDB4MjMsIDB4MTEsCisweDBFLCAweDQwLCAweDM4LCAweDgwLCAweDhELCAweDAwLCAweDg1LCAweDBCLCAweEQ4LCAweDA2LCAweDQwLCAweDA5LCAweDIwLAorMHhFRCwgMHgwNCwgMHgzNCwgMHgwMCwgMHg5NCwgMHgwQSwgMHg0MSwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MEQsIDB4ODQsIDB4MDQsIDB4RjAsCisweDFFLCAweEMxLCAweDcwLCAweDA1LCAweEUxLCAweDBELCAweDM0LCAweDU3LCAweDM0LCAweDNGLCAweEMwLCAweDc5LCAweDAwLAorMHhBRiwgMHgwMSwgMHg4QywgMHgwNywgMHg3MCwgMHgxNiwgMHhDMCwgMHg2QiwgMHgwMCwgMHhFRiwgMHgwQiwgMHhCQywgMHgwNywKKzB4QjAsIDB4MTYsIDB4QzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEEyLCAweDE1LCAweDEwLCAweERGLCAweDg0LCAweDVDLCAweDAwLCAweEYwLCAweDRELCAweEMwLCAweDM3LCAweDAwLAorMHhERiwgMHgwNCwgMHg3QywgMHgxQiwgMHhGMCwgMHg2RCwgMHhDOSwgMHgzNywgMHgyMCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4NzgsIDB4MDUsIDB4QzAsIDB4MDcsIDB4MTAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzQsIDB4MEQsIDB4QzAsIDB4NDMsCisweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDdELCAweDAwLAorMHhGRiwgMHgxMSwgMHg4QywgMHgyNCwgMHg3MCwgMHgxRiwgMHhDNSwgMHg3QywgMHgwMCwgMHhGMywgMHgxMSwgMHhGQywgMHgwNywKKzB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDIsIDB4QjcsIDB4MDUsIDB4RkMsIDB4MDcsIDB4RjgsIDB4OTYsIDB4QzAsIDB4NkMsCisweDAyLCAweEYzLCAweDg5LCAweENDLCAweDA3LCAweDI0LCAweDFCLCAweEM0LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwOCwgMHgzOSwgMHgyMCwgMHhFRCwgMHgwNCwgMHg4NCwgMHgwMCwKKzB4MTgsIDB4MEUsIDB4NTAsIDB4MzgsIDB4MjIsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MjMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsCisweDAwLCAweEE3LCAweDAwLCAweEI0LCAweDIzLCAweEQwLCAweDA2LCAweDQ4LCAweDBELCAweDAyLCAweEZCLCAweDQwLCAweDg1LAorMHgwMCwgMHhGMCwgMHg4OCwgMHhFMSwgMHg1NCwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4RUQsIDB4ODAsIDB4QTQsIDB4MDAsIDB4NTgsIDB4MEMsIDB4NDAsIDB4MzksCisweDAwLCAweEU5LCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDFCLCAweDAwLCAweEE1LCAweDA0LCAweEI0LAorMHgwMywgMHhEMCwgMHgwMywgMHg0NiwgMHgwOCwgMHg4MiwgMHhFMSwgMHgwMCwgMHg4NCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4NjEsCisweDAwLCAweENELCAweDQxLCAweDA0LCAweDAwLCAweDEwLCAweDBDLCAweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDQyLCAweDM0LAorMHgwMywgMHgxMiwgMHg4QywgMHg0MCwgMHgxMywgMHgwMCwgMHgwNSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHhCMCwgMHg0NCwKKzB4MDEsIDB4MDAsIDB4QzksIDB4MDIsIDB4MDQsIDB4NDEsIDB4RDAsIDB4MzQsIDB4NTAsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDQ1LCAweDIwLCAweEZGLCAweDlBLCAweDZDLAorMHgwMCwgMHg0MSwgMHgwRiwgMHhDMCwgMHgzRCwgMHgwMCwgMHhGQiwgMHgwMCwgMHhGQywgMHgwMywgMHgzMCwgMHgxRiwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsIDB4NDQsIDB4MDAsIDB4MDYsIDB4RjMsIDB4NDIsCisweDRDLCAweDRCLCAweDMwLCAweDI1LCAweEMwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhBNywgMHgwMSwgMHhERiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MjAsIDB4REYsIDB4MDgsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MzcsIDB4MDAsIDB4OUYsIDB4ODAsCisweDNDLCAweDhCLCAweEYwLCAweDAxLCAweEM4LCAweDg3LCAweDAwLCAweERGLCAweDAwLCAweDNDLCAweDAwLCAweDk2LCAweDY1LAorMHhDMCwgMHgwNSwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwKKzB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RjMsIDB4MTAsCisweDVDLCAweDAzLCAweEUwLCAweDBGLCAweEMwLCAweDJGLCAweDAyLCAweEJGLCAweDAwLCAweEZDLCAweDgzLCAweDMwLCAweDAzLAorMHhDMSwgMHgwRCwgMHgyMCwgMHhGMywgMHgxMCwgMHg3QywgMHgwNywgMHgzMCwgMHg5NywgMHhDMiwgMHgxMywgMHgyMiwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjAsIDB4QzYsIDB4MDQsIDB4REQsIDB4MDAsCisweDc0LCAweDBDLCAweEQwLCAweDBELCAweDUwLCAweDM0LCAweDIwLCAweEQxLCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDBELAorMHg0MCwgMHgyNywgMHgwMCwgMHgxOSwgMHgwMSwgMHg3NCwgMHgxOCwgMHgwMCwgMHgzMSwgMHhDMCwgMHg0NywgMHgwMSwgMHhEMSwKKzB4MDAsIDB4NzQsIDB4MjAsIDB4MTAsIDB4MjksIDB4NDAsIDB4MTcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDQ0LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDQ0LCAweEQwLCAweDBDLAorMHg0MCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHg4MCwgMHgxRCwKKzB4MDMsIDB4NzQsIDB4MTAsIDB4MTAsIDB4MTEsIDB4NDAsIDB4NEYsIDB4MDAsIDB4RjEsIDB4MDAsIDB4NzQsIDB4NDMsIDB4MTksCisweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgyOCwgMHgyMCwgMHgyMCwgMHhDRCwgMHg4MCwgMHgyNCwgMHgwMCwgMHhEMiwgMHgwQywgMHg0MCwgMHgzMCwgMHgyMCwgMHhDMSwKKzB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4ODAsIDB4MDksIDB4MDAsIDB4MzQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQ0LCAweDA3LCAweDQwLCAweEMxLCAweDAwLCAweDM0LCAweDAyLCAweDEzLCAweDg0LCAweDQwLCAweDQzLCAweEEwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMCwgMHgwNiwgMHgwMCwgMHhFRiwKKzB4ODAsIDB4N0MsIDB4ODAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MzgsIDB4MDAsIDB4RjMsIDB4MDAsIDB4QzUsIDB4MDMsIDB4RjAsCisweDBGLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA1LCAweDAwLAorMHhGMywgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwOSwgMHhDOCwgMHgwMywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4QTgsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsCisweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEVDLCAweDgzLCAweEYwLCAweDBGLCAweEMwLCAweDBGLCAweDAwLAorMHgzQiwgMHg0MCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhFOCwgMHgwRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwKKzB4RjAsIDB4NDMsIDB4QzAsIDB4MTcsIDB4MjEsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEE4LCAweDNGLCAweDA0LCAweEIzLCAweDA4LCAweENDLCAweDkzLCAweEYxLCAweENGLCAweEMwLCAweDNDLCAweDQyLAorMHhGMywgMHgwMCwgMHhGQywgMHgwMywgMHgzMCwgMHgxMywgMHhDMCwgMHgzRCwgMHgwNSwgMHhGNywgMHgyQywgMHhGQywgMHgwNCwKKzB4QjAsIDB4MEYsIDB4QzAsIDB4M0UsIDB4MDYsIDB4M0YsIDB4MDQsIDB4RUMsIDB4MDMsIDB4RjAsIDB4ODMsIDB4QzAsIDB4MEYsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDE4LCAweEJGLCAweDAwLAorMHgxQiwgMHgwNCwgMHhDNCwgMHhBRiwgMHhEMCwgMHg2RiwgMHg0MCwgMHhCQywgMHgwMywgMHhGMSwgMHg4NCwgMHhGNCwgMHgwRiwKKzB4MTAsIDB4MDksIDB4QzQsIDB4N0QsIDB4MDgsIDB4RDUsIDB4MDgsIDB4NzQsIDB4MDAsIDB4NTAsIDB4MkYsIDB4NDIsIDB4M0MsCisweDEwLCAweDFELCAweDEyLCAweEM0LCAweDg3LCAweEQwLCAweDQwLCAweDQwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwNCwgMHg4MSwgMHgyMiwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MkMsIDB4NDQsIDB4MzEsIDB4MDEsIDB4QzEsIDB4MTgsIDB4MjQsIDB4MEIsIDB4NTAsIDB4MDQsIDB4NDAsIDB4MzEsCisweDAwLCAweEM1LCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDJDLCAweDQ0LCAweDMzLCAweDAxLCAweDhELCAweDA2LCAweDI0LAorMHgwMywgMHhEMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QTAsIDB4MzQsIDB4MzAsIDB4MDksIDB4NDEsIDB4NDYsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzUsCisweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweDE0LCAweDBELCAweDQwLCAweDM1LCAweDAwLCAweEQ0LCAweDAwLCAweDc0LAorMHgyMiwgMHg1MCwgMHgwRCwgMHg0MCwgMHgzNSwgMHgwMCwgMHhERCwgMHgwMCwgMHhDNCwgMHgwMywgMHhEMCwgMHgzMywgMHg0MCwKKzB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzcsCisweDAwLCAweDkzLCAweDAzLCAweDRDLCAweDgzLCAweEYwLCAweDBELCAweEMwLCAweDM1LCAweDIwLCAweEQzLCAweDgwLCAweDdDLAorMHgwMywgMHg3MiwgMHg5MSwgMHhDOCwgMHgzNSwgMHgwMCwgMHhENywgMHg4MCwgMHg3QywgMHg0NSwgMHhCMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MTgsIDB4MUYsIDB4QTIsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MTEsIDB4QzAsIDB4MDMsIDB4MjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweEJGLCAweDQwLCAweEZELAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMiwgMHgzNiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwgMHgwMywgMHhDMSwKKzB4M0YsIDB4MDAsIDB4RDksIDB4MDAsIDB4RkMsIDB4NDEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4M0UsIDB4MDgsIDB4RkMsIDB4MDksCisweEZDLCAweDAzLCAweEYwLCAweDAzLCAweDgwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzMSwgMHgwMSwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzEsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzUsIDB4MDAsIDB4RDcsIDB4MDAsCisweDRDLCAweDIyLCAweEIwLCAweDBDLCAweEM4LCAweDM0LCAweDA4LCAweDA3LCAweDAwLCAweDVDLCAweDAzLCAweDMwLCAweDIxLAorMHhDMCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwKKzB4RkMsIDB4MEMsIDB4OUQsIDB4MDAsIDB4RkMsIDB4MEYsIDB4RDAsIDB4MEYsIDB4NDQsIDB4M0MsIDB4MDAsIDB4RjEsIDB4MDAsCisweEY0LCAweDA3LCAweEQwLCAweDE1LCAweEMyLCAweDM5LCAweDA4LCAweEYwLCAweDAzLCAweDJDLCAweDhCLCAweEQwLCAweDBGLAorMHg0OCwgMHgzQywgMHgwMCwgMHhENSwgMHgxMCwgMHhDNCwgMHgyRiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MEQsIDB4MDAsCisweDM0LCAweDQzLCAweEQwLCAweDBELCAweDQwLCAweDMxLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDFCLCAweEQyLCAweDE0LAorMHg0OCwgMHgzMiwgMHgwMCwgMHhDOCwgMHg4NywgMHgwNCwgMHgwRCwgMHhEMCwgMHgwQywgMHgwMCwgMHgzMSwgMHgwMCwgMHg0MSwKKzB4MTAsIDB4MTQsIDB4MjMsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MUMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDg4LCAweDc4LCAweDAwLCAweDZELCAweDAxLCAweEI0LCAweDY3LCAweEQwLCAweDlFLAorMHg0MCwgMHg3OCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3MywgMHg0OCwgMHhFRCwKKzB4MDEsIDB4QTQsIDB4MDUsIDB4RDEsIDB4MUUsIDB4NDAsIDB4NzEsIDB4MDAsIDB4RTUsIDB4MDEsIDB4QzQsIDB4MTcsIDB4MTQsCisweDkyLCAweDQwLCAweDE4LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgxMCwgMHgzMCwgMHgwMiwgMHhDRiwgMHgwQywgMHgzNCwgMHgwMywgMHhGMCwgMHgwQywgMHg0OCwgMHgzMSwgMHgwMCwgMHhDMywKKzB4MDAsIDB4M0MsIDB4NDMsIDB4RjAsIDB4MDQsIDB4QzEsIDB4MzIsIDB4MDAsIDB4Q0YsIDB4MTAsIDB4MEMsIDB4MDAsIDB4QjAsCisweDhDLCAweEQwLCAweDMxLCAweEEwLCAweDE3LCAweDIyLCAweDVDLCAweDE3LCAweDMwLCAweDUwLCAweEQwLCAweDQ4LCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgzRCwgMHgwQywgMHhGRiwKKzB4ODgsIDB4REMsIDB4ODMsIDB4RjAsIDB4MkYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4REYsIDB4MDAsIDB4RjQsIDB4MDMsIDB4RjAsCisweDBGLCAweEMwLCAweDNELCAweDMwLCAweEYzLCAweDA4LCAweDdDLCAweDAxLCAweEYwLCAweDBGLCAweEMwLCAweDNFLCAweEEwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHg4OSwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MjQsIDB4NUYsIDB4NDAsIDB4N0MsIDB4NkYsIDB4MzAsCisweEJELCAweEMwLCAweEY0LCAweDA1LCAweEQzLCAweDY4LCAweDFDLCAweDYzLCAweDcwLCAweDAxLCAweEQwLCAweDM2LCAweDAxLAorMHhERiwgMHg0OSwgMHg0QywgMHgwNSwgMHgzMCwgMHg0RCwgMHhDOSwgMHgzNywgMHgwMywgMHgxRiwgMHgwMCwgMHg0RCwgMHg2MywKKzB4RjAsIDB4MTEsIDB4ODQsIDB4NTQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDg4LCAweDM5LCAweDAxLCAweDZELCAweDYwLCAweDM2LCAweDEzLCAweDEwLCAweDRFLCAweDQwLCAweEI4LCAweDAxLAorMHhFMSwgMHgwQywgMHg4NCwgMHgwMywgMHgxMCwgMHgwNywgMHhDMCwgMHhCOCwgMHgwNCwgMHhFRCwgMHg4NCwgMHhBQywgMHgwMSwKKzB4MTAsIDB4NEUsIDB4NDgsIDB4M0IsIDB4MDQsIDB4Q0QsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MDIsIDB4NDAsIDB4NDgsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDc5LCAweDAxLAorMHhFRCwgMHgwMywgMHg5NCwgMHgwNywgMHgxOCwgMHgxRSwgMHg1MCwgMHg3QSwgMHgwMCwgMHhDNSwgMHgwMSwgMHg5NCwgMHgxNywKKzB4NTAsIDB4MTIsIDB4NDEsIDB4NzgsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4QzQsIDB4MDQsIDB4OTIsIDB4OUUsIDB4NDIsIDB4N0IsCisweDAxLCAweDJELCAweDIxLCAweDg0LCAweDA3LCAweEQwLCAweDEwLCAweDQwLCAweDBELCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywKKzB4MTUsIDB4MEMsIDB4NjAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4MTAsIDB4MTQsIDB4NDEsIDB4MzAsCisweDAwLCAweENELCAweDQwLCAweDI0LCAweDIxLCAweDkwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDA0LCAweDA0LAorMHgwMywgMHhEMCwgMHg4QywgMHg0MCwgMHg0OSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDAsIDB4N0YsIDB4MEEsIDB4N0MsIDB4ODEsIDB4MzgsIDB4MDUsIDB4QzAsIDB4MTYsCisweDAwLCAweDUzLCAweDAwLCAweDVDLCAweDAxLCAweDcwLCAweDI3LCAweEMwLCAweDE0LCAweDAwLCAweDVGLCAweDAwLCAweENDLAorMHg4NSwgMHhCMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgxMCwgMHg3RiwgMHgwNCwgMHg0QywgMHgwMSwgMHhGMCwgMHgxNywgMHhDMCwKKzB4NUQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDcsCisweDA4LCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDQwLCAweDFGLCAweDAwLCAweDFDLAorMHgwMCwgMHhGMCwgMHgwMSwgMHhDNCwgMHgwNSwgMHg4MCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3NCwgMHgwMSwgMHhDMiwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MDAsIDB4RjIsIDB4NDEsIDB4ODAsIDB4NEEsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY1LCAweDAwLCAweDlGLCAweDQwLCAweDdDLAorMHgwNiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwOCwgMHg0QywgMHgxNiwgMHgzMCwgMHgzOSwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MTIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjMsIDB4MDAsIDB4OTcsIDB4MDgsCisweDVDLCAweDA2LCAweDMwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHg2NiwgMHgwRSwgMHg5RCwgMHgyMCwgMHg3NCwgMHgwQSwgMHhEMiwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NDQsIDB4MEUsIDB4MTUsIDB4MDgsIDB4NDAsIDB4NjQsIDB4MjAsIDB4OUQsIDB4MUIsCisweDcwLCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDExLCAweDA0LCAweEFFLCAweDEwLCAweDA5LAorMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwKKzB4MjQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4NjIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OEQsIDB4MDIsCisweDQ0LCAweDQyLCAweDExLCAweDA5LCAweDQwLCAweDI3LCAweDA5LCAweDlELCAweDAwLCAweDcwLCAweDQyLCAweEQyLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwgMHgwMCwgMHg1NCwgMHgwQSwgMHgxMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4MjAsIDB4MDUsIDB4OEQsIDB4MTQsCisweDM0LCAweDAyLCAweEQwLCAweDg4LCAweDQwLCAweDIzLCAweDIyLCAweDhELCAweDQ4LCAweDA0LCAweDAyLCAweDExLCAweDA5LAorMHg0MCwgMHgyMSwgMHgxMCwgMHg4RCwgMHgwOCwgMHgzNCwgMHgwMiwgMHhEOCwgMHgwOCwgMHg0MCwgMHgyMywgMHg0MCwgMHg4MSwKKzB4MDgsIDB4MDQsIDB4OTIsIDB4MTAsIDB4NDgsIDB4NDgsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LCAweDAxLCAweDFGLCAweDA0LCAweDdDLCAweDUwLCAweDcwLCAweDYwLAorMHhDMSwgMHg4MywgMHgwNSwgMHgxRiwgMHg5NiwgMHg0QywgMHg1MCwgMHgzMCwgMHhBMSwgMHhEMCwgMHgwNSwgMHgwNSwgMHgxRiwKKzB4MTYsIDB4N0MsIDB4MjgsIDB4RTAsIDB4RTEsIDB4QzksIDB4MDcsIDB4MTUsIDB4MTcsIDB4MTYsIDB4NUMsIDB4MDQsIDB4MzAsCisweDExLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LAorMHhBOCwgMHgyNywgMHgyNSwgMHhCRiwgMHgzNCwgMHg3RSwgMHgwMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwKKzB4MDQsIDB4N0QsIDB4MDIsIDB4RjAsIDB4MUIsIDB4QzAsIDB4MjYsIDB4MjAsIDB4OUYsIDB4MDQsIDB4QkMsIDB4MDcsIDB4RjAsCisweDE5LCAweEMwLCAweDI3LCAweDA1LCAweEJGLCAweDA0LCAweDdDLCAweDIyLCAweEY0LCAweENCLCAweEMxLCAweDY3LCAweDYwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBMCwgMHgyRiwgMHgwMywgMHg5MywKKzB4MDMsIDB4Q0MsIDB4MTIsIDB4NzAsIDB4MjksIDB4QzAsIDB4QTUsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4NDIsIDB4MzAsCisweDBCLCAweEMwLCAweDJFLCAweDAwLCAweEIzLCAweDAwLCAweENDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDI0LCAweDBCLAorMHhCMywgMHg0MCwgMHhDQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4NDcsIDB4MDEsIDB4MUIsIDB4NDMsIDB4NjgsIDB4MjgsIDB4MTAsCisweDAxLCAweDQwLCAweDg0LCAweDAyLCAweDFELCAweDBFLCAweDQ1LCAweDA4LCAweDEwLCAweDAxLCAweDQwLCAweDg1LCAweDAyLAorMHgxMSwgMHgyMCwgMHg0NCwgMHgwMCwgMHgxMywgMHgyMSwgMHhDMCwgMHg0NiwgMHgwMSwgMHgxQiwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4NDQsIDB4NzMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEEyLCAweEEzLCAweDEwLCAweDgxLCAweDA2LCAweDA0LCAweDAyLCAweDUwLCAweDY4LCAweDQwLCAweDIxLCAweDgxLAorMHg4RCwgMHg5MCwgMHgwNiwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyMSwgMHg0MCwgMHg4MSwgMHgxNiwgMHg0NCwgMHgwMiwKKzB4OTAsIDB4MjgsIDB4NDAsIDB4QTAsIDB4MDEsIDB4ODEsIDB4NDAsIDB4MDUsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4NDMsCisweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDIwLAorMHg5OSwgMHgwMiwgMHg2NiwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg4RCwgMHgyMCwgMHg0NiwgMHgwMiwKKzB4MDQsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTgsIDB4MDksIDB4NDAsIDB4MjcsCisweDIwLCAweDg5LCAweDAwLCAweDQ0LCAweDAyLCAweDg0LCAweDY5LCAweDQwLCAweDYzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwgMHgyNSwgMHgyMCwgMHg5MywgMHgyMSwgMHg0QywgMHgwMiwKKzB4NzAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4ODAsIDB4NEMsIDB4MDIsIDB4MzIsIDB4MDksIDB4QzgsIDB4MjcsCisweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAyLCAweEIxLCAweDA5LCAweEM0LCAweDI0LCAweDEwLCAweDkzLCAweDEzLCAweDRDLAorMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgxNywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MDAsIDB4MjEsIDB4MDAsIDB4OEYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDg5LCAweEMwLCAweDIzLCAweDAwLCAweDlGLCAweDAwLCAweDdELAorMHgyNiwgMHhGMSwgMHgwOSwgMHhDNCwgMHgyNiwgMHhBOCwgMHg5RiwgMHgwMywgMHgzQywgMHg4MiwgMHg3MCwgMHgwOSwgMHhDMCwKKzB4NTMsIDB4MDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsCisweDA0LCAweDFGLCAweDQwLCAweDRDLCAweDEwLCAweEYwLCAweDAwLCAweEMwLCAweDA3LCAweDgwLCAweDEzLCAweDEwLCAweDVDLAorMHg4NCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgyMCwgMHg0QywgMHgwOCwgMHgzMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MjYsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MjEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLCAweDVDLCAweDA0LCAweDVELCAweDAwLCAweDg0LAorMHgwMSwgMHhEMCwgMHgwNSwgMHg0NCwgMHgxNywgMHg0MCwgMHg3MSwgMHg4MywgMHhGNCwgMHgwMSwgMHhEMCwgMHgwNywgMHg0MCwKKzB4MTQsIDB4MDAsIDB4N0QsIDB4MDAsIDB4ODQsIDB4QzUsIDB4MzQsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4N0QsIDB4MDEsCisweEM0LCAweDFELCAweDUwLCAweDA1LCAweDQwLCAweDUzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHhCMiwgMHgyMCwgMHhDRCwgMHgyMCwgMHgyNCwgMHgyQiwgMHhEMSwgMHgwQywgMHg0MCwKKzB4MzMsIDB4MDAsIDB4QzksIDB4MDgsIDB4MTQsIDB4MDcsIDB4NTIsIDB4MEQsIDB4MjEsIDB4NzIsIDB4ODAsIDB4Q0QsIDB4MDEsCisweDA0LCAweDA3LCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweENELCAweDAwLCAweDA3LCAweDRGLCAweDUwLCAweDBDLAorMHg0NiwgMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MiwKKzB4MzgsIDB4MDAsIDB4Q0QsIDB4MDQsIDB4QTQsIDB4MDEsIDB4RDAsIDB4NEUsIDB4NDAsIDB4N0IsIDB4MDIsIDB4RTksIDB4MDAsCisweEI0LCAweDBBLCAweEQwLCAweDI3LCAweDQ4LCAweDM4LCAweDA0LCAweEVELCAweDAyLCAweDg0LCAweDAzLCAweDEwLCAweDBFLAorMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHg4MiwgMHhDNCwgMHgwMywgMHg1MCwgMHgwRSwgMHg0MCwgMHgxNywgMHgwOCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDUsCisweEFELCAweDA3LCAweEYwLCAweDVFLCAweEMwLCAweDdGLCAweDAxLCAweDY5LCAweDQxLCAweDlDLCAweDA1LCAweDcwLCAweDFFLAorMHhFMCwgMHg3QSwgMHgwMCwgMHhGRSwgMHgwMSwgMHhDRCwgMHg4NCwgMHgzMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4Q0MsIDB4MDcsIDB4NzAsIDB4OUUsIDB4QzIsIDB4NTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDE1LCAweDAwLCAweERGLCAweDQyLCAweDVDLCAweDAwLCAweEYwLCAweEFELAorMHhDMCwgMHgzNywgMHgwMCwgMHg1NywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwNCwgMHhDMCwgMHgzNSwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzEsIDB4MzcsIDB4MDIsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDRELCAweEMwLCAweDQzLCAweDQwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHhBMCwgMHg1RiwgMHgwMCwgMHhGMywgMHg1MywgMHhGQywgMHgyNiwgMHgzMCwgMHgzRiwgMHhDMCwgMHhGRiwgMHgwMCwgMHhGRiwKKzB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUIsIDB4QzAsIDB4N0YsIDB4MjIsIDB4QkYsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsCisweDFGLCAweEMxLCAweDdDLCAweDAwLCAweEYzLCAweDAxLCAweEVDLCAweDA3LCAweDMwLCAweDFGLCAweEMxLCAweDA4LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHhCRCwgMHgwMCwgMHhFMSwKKzB4MDAsIDB4QjQsIDB4MEEsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MjIsIDB4ODAsIDB4MDIsIDB4RDAsCisweDAyLCAweDQwLCAweDNCLCAweDAwLCAweEFELCAweDA4LCAweDg0LCAweDIzLCAweEQyLCAweDBFLCAweDYwLCAweDNELCAweDAwLAorMHhFQiwgMHgwMCwgMHgwNCwgMHgxNSwgMHgxMCwgMHhERCwgMHg0MCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MTksIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDIsIDB4OTQsCisweDBFLCAweDQwLCAweDNCLCAweDAwLCAweDhELCAweDAwLCAweDg0LCAweDAwLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDgwLAorMHhFRCwgMHgwMCwgMHg4NCwgMHg0MSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgwOCwgMHgyNCwgMHgxMiwKKzB4MTAsIDB4NEUsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA2LCAweDI4LCAweDA3LCAweDEwLCAweEQxLCAweDExLCAweDM2LCAweDAyLCAweDk4LCAweDBDLCAweDQwLCAweDMzLCAweDg4LAorMHg5RCwgMHg0MCwgMHgwNCwgMHgwMiwgMHhEMSwgMHgzMCwgMHg0MCwgMHgzMywgMHgwOCwgMHgxRCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4MDksIDB4MDUsIDB4MDQsIDB4ODAsIDB4MTgsIDB4M0MsIDB4NTAsIDB4NTgsCisweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEE4LCAweDI0LCAweDAwLAorMHhGMywgMHgxMywgMHg3QywgMHgwMiwgMHhCMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHg5RiwgMHg0MCwgMHg0RSwgMHgwMiwKKzB4RjAsIDB4MjksIDB4QzEsIDB4MzcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RDEsIDB4MEYsIDB4NDAsIDB4M0MsCisweDAwLCAweDEzLCAweDEzLCAweDJDLCAweDAzLCAweDMwLCAweDBGLCAweEMxLCAweDc0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHhBNywgMHgwMCwgMHhERiwgMHg4MCwgMHg3QywgMHgwMCwKKzB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4NDIsIDB4M0YsIDB4MDIsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzcsCisweDAwLCAweDVGLCAweDgyLCAweDdDLCAweDAwLCAweEYwLCAweDBELCAweEM4LCAweDM3LCAweDEwLCAweDFGLCAweEEyLCAweDdDLAorMHgwMiwgMHhGNSwgMHg0RCwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODEsIDB4MDksIDB4MkYsIDB4MTAsIDB4RjMsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsCisweDAwLCAweDNGLCAweDA4LCAweENELCAweDAwLCAweDMwLCAweDBCLCAweEMxLCAweDdGLCAweDAwLCAweEZGLCAweDAwLCAweENDLAorMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQiwgMHgwMCwgMHgwMywgMHgwMiwgMHhDQywgMHgyNSwgMHgzMiwgMHgwRiwgMHhDMCwKKzB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4NjYsCisweDAwLCAweEQ1LCAweDAwLCAweDQ0LCAweDBDLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDFELCAweDAyLCAweDQ0LAorMHgwNiwgMHg1MCwgMHgzMSwgMHg0MSwgMHgzNywgMHgwMCwgMHgxRCwgMHgwMiwgMHg0NCwgMHgwQywgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MzcsIDB4MDAsIDB4MTEsIDB4MDIsIDB4NDQsIDB4NDQsIDB4NTAsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDQ2LCAweDAwLCAweEQxLCAweDAwLCAweDU0LAorMHgwNiwgMHhEOCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHg1RCwgMHgwMCwgMHg0NCwgMHg0NCwgMHgxMCwgMHgxMywgMHg0MCwKKzB4MzcsIDB4MTIsIDB4MUQsIDB4MDAsIDB4RTQsIDB4MDYsIDB4RDAsIDB4MEYsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MTEsIDB4NTAsCisweDQ0LCAweDgzLCAweDUwLCAweDBELCAweDQ4LCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHhDNSwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEOCwgMHgwQywgMHg0MCwKKzB4MzMsIDB4MDgsIDB4NEMsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4MEQsIDB4MDAsCisweDA0LCAweDAwLCAweEQwLCAweDBDLCAweDQ4LCAweDMzLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDEwLCAweDUxLCAweDRDLAorMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5MCwKKzB4MDYsIDB4MDAsIDB4RjMsIDB4NDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4MUYsIDB4MDAsCisweDRDLCAweDAwLCAweDMyLCAweDAxLCAweEMwLCAweDI3LCAweDAwLCAweENGLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDBFLAorMHhDNCwgMHgzNywgMHgwMCwgMHgxMywgMHgwMCwgMHg0RCwgMHg2MCwgMHgzMCwgMHhBRiwgMHhDMCwgMHgwNywgMHhDMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MkYsIDB4MjAsIDB4RkYsIDB4MDAsCisweEVDLCAweDAwLCAweEYxLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweDNGLCAweDQwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLAorMHhDMiwgMHgyRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhFMCwgMHgzRiwgMHgwMCwgMHgzRiwKKzB4NDAsIDB4N0MsIDB4MTAsIDB4RTAsIDB4NkQsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDNGLCAweDBCLCAweEZGLCAweDJDLCAweEZDLCAweDBBLCAweEQwLCAweDhGLAorMHhDMCwgMHg0QywgMHgwMCwgMHgzRiwgMHg0OSwgMHhFQywgMHg5MywgMHgzMCwgMHg0RiwgMHhDMCwgMHgwRiwgMHgxMCwgMHgzMywKKzB4MDAsIDB4RkMsIDB4MjQsIDB4QjAsIDB4NEYsIDB4QzAsIDB4NkMsIDB4MDAsIDB4RjMsIDB4MDAsIDB4OEMsIDB4MDMsIDB4QjEsCisweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHgxMCwgMHhCRiwgMHgwMSwgMHhGRCwgMHgwOCwgMHg3NCwgMHg4QSwgMHhEMCwgMHg2RiwgMHg0NCwgMHg2NCwgMHgwMCwgMHgxOSwKKzB4MDAsIDB4RjQsIDB4MEYsIDB4NTEsIDB4QUYsIDB4NDAsIDB4MjcsIDB4MTIsIDB4MTEsIDB4NDEsIDB4NzQsIDB4MTIsIDB4MTAsCisweDlGLCAweDQwLCAweDc0LCAweDAwLCAweEYxLCAweDQyLCAweDQ0LCAweDg3LCAweDEwLCAweDExLCAweDQwLCAweDBGLCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBOCwgMHhCMywgMHgwMSwgMHhDRCwKKzB4MDAsIDB4MzYsIDB4MUEsIDB4RDAsIDB4MkMsIDB4NTAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4NDQsIDB4MjQsIDB4MEIsIDB4MTEsCisweDBDLCAweDQwLCAweDAxLCAweDAwLCAweDA1LCAweDgwLCAweDc0LCAweDkwLCAweDkwLCAweDBDLCAweDQwLCAweDM1LCAweDAwLAorMHhDMSwgMHgwMiwgMHgwNCwgMHgwNywgMHg5MCwgMHgwMCwgMHg0MCwgMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MzUsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDYsIDB4RDAsCisweDBELCAweDQwLCAweEU0LCAweDAwLCAweDE5LCAweDAxLCAweDc0LCAweDAzLCAweDUwLCAweDBELCAweDYwLCAweDA3LCAweDAwLAorMHgzMSwgMHgwMSwgMHg3NCwgMHgwRSwgMHgxMCwgMHgwRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHg4NywKKzB4MDAsIDB4MTEsIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEE4LCAweDM3LCAweDAwLCAweERGLCAweDgwLCAweDdDLCAweDhDLCAweEYwLCAweDBELCAweEMwLCAweEM0LCAweDMwLAorMHg5RiwgMHgwMSwgMHg2QywgMHgwMywgMHgzNCwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMiwgMHgwNSwgMHgzQywgMHgwRSwKKzB4QjEsIDB4MEMsIDB4QzAsIDB4NjAsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NEMsIDB4ODAsIDB4QjAsIDB4MTksIDB4QzAsIDB4MjMsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMiwgMHgwRSwgMHg0MCwgMHgyRiwgMHgwOCwgMHgzRCwgMHg0MCwgMHhGQywgMHgwMywKKzB4QjAsIDB4MEYsIDB4QzAsIDB4NkIsIDB4RDEsIDB4QkYsIDB4NDAsIDB4RkMsIDB4MDIsIDB4RjEsIDB4MEYsIDB4QzAsIDB4MkYsCisweDAwLCAweEVGLCAweDEwLCAweEZELCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwOCwgMHgzNSwgMHgwOCwgMHhERiwgMHgwNSwgMHg3QywgMHgxMCwKKzB4NzAsIDB4MEQsIDB4QzYsIDB4MjUsIDB4MDAsIDB4OUYsIDB4QzAsIDB4M0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDA5LCAweDFGLCAweDEwLCAweDdDLCAweDAyLCAweEYwLCAweDRELCAweEMwLCAweDA2LCAweDAxLCAweEQ3LCAweDAwLCAweDBDLAorMHgwMSwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTMsIDB4QTAsIDB4M0MsIDB4MjAsIDB4RkQsIDB4NDIsIDB4NzQsIDB4MEUsIDB4RDAsIDB4MEYsIDB4NTAsIDB4NjQsCisweDAwLCAweDFELCAweDgwLCAweEYwLCAweDEzLCAweEQwLCAweEFGLCAweDQwLCAweEI3LCAweDAxLCAweDlELCAweDIzLCAweDc0LAorMHgwMiwgMHhEMCwgMHgzRiwgMHg0MCwgMHhBNywgMHg4MCwgMHhGMSwgMHgwMSwgMHg1NCwgMHgwMSwgMHgxNCwgMHgwOSwgMHg0MSwKKzB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MzAsCisweDAwLCAweENELCAweDAyLCAweDM0LCAweDJDLCAweDUwLCAweDBDLCAweDQ4LCAweDAwLCAweDAyLCAweDA5LCAweDQwLCAweDMwLAorMHgwMywgMHhEMCwgMHgxQywgMHg0MCwgMHgxMywgMHgwMCwgMHgwRCwgMHgwQiwgMHgzNCwgMHgwMCwgMHg5MCwgMHgzQywgMHg0QywKKzB4QTIsIDB4MDgsIDB4Q0QsIDB4NDEsIDB4MDQsIDB4MDMsIDB4NTEsIDB4MDgsIDB4NDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFGLCAweDAwLCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweEI0LAorMHgwNSwgMHhEMSwgMHgxQywgMHg0MCwgMHhDOCwgMHgwMCwgMHgyRCwgMHgwMSwgMHhCNiwgMHgwRiwgMHhEMCwgMHgxRSwgMHg0MSwKKzB4N0IsIDB4MDIsIDB4MkQsIDB4MDEsIDB4QjQsIDB4MDQsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0YsIDB4MDAsIDB4RTEsIDB4NDEsCisweEQ0LCAweDJGLCAweDUwLCAweDE2LCAweDYwLCAweDNGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgwMiwgMHgzMCwgMHgwOCwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMywgMHg3MCwgMHg4QywgMHhDMCwKKzB4MDEsIDB4MDAsIDB4OEYsIDB4OEEsIDB4M0UsIDB4MjMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MTMsIDB4MDAsIDB4NEYsIDB4MDAsCisweDNDLCAweDgwLCAweEYxLCAweDBDLCAweEMxLCAweDMyLCAweDAwLCAweEQ3LCAweDEwLCAweDBDLCAweDIzLCAweDcwLCAweDRDLAorMHhDMCwgMHg0QiwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwKKzB4M0QsIDB4MjQsIDB4RkYsIDB4MDAsIDB4RjgsIDB4MDMsIDB4RjAsIDB4MEYsIDB4ODAsIDB4MUYsIDB4MDAsIDB4RkYsIDB4MjgsCisweEZDLCAweDYzLCAweEYwLCAweDBGLCAweEMwLCAweDFGLCAweDgwLCAweDNGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBGLAorMHhFOSwgMHgzQiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgyMywgMHhCNCwgMHgwRCwgMHhFMCwgMHgwQiwgMHg2MCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4RjcsIDB4MDQsIDB4RDcsIDB4MDIsCisweDdDLCAweDA1LCAweDMwLCAweENELCAweEMwLCAweDA3LCAweDAwLCAweDlCLCAweDAwLCAweDdDLCAweDEzLCAweEYxLCAweENELAorMHhEMCwgMHgwNCwgMHg0MCwgMHhEMywgMHgwMSwgMHg0RCwgMHgwMCwgMHhGMCwgMHg2RCwgMHhDMCwgMHgyNywgMHg4MCwgMHhENywKKzB4MDIsIDB4N0MsIDB4MDMsIDB4MzQsIDB4MTgsIDB4QzQsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDgwLCAweDMwLCAweDAwLCAweEUxLCAweDU2LCAweEI0LCAweDAzLCAweEIwLCAweDhFLAorMHg0NCwgMHgyQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgzMywgMHhEMCwgMHgwRiwgMHg0MSwgMHgyQywgMHgwMCwgMHhFMSwKKzB4MDAsIDB4ODQsIDB4MDEsIDB4RDAsIDB4NEUsIDB4NDEsIDB4M0IsIDB4ODAsIDB4RUQsIDB4MEUsIDB4QjQsIDB4MDMsIDB4QjAsCisweDA2LCAweDQwLCAweDRDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHgwMCwgMHg3OCwgMHgwMSwgMHhFRCwgMHgwMSwgMHgzNiwgMHgwNSwgMHgxMCwgMHg1RSwgMHg0MCwgMHg3QiwgMHgxOCwgMHhBRCwKKzB4MDEsIDB4QTQsIDB4MTcsIDB4RDAsIDB4NUUsIDB4NDAsIDB4N0EsIDB4MDAsIDB4QzEsIDB4MDEsIDB4QTQsIDB4MDYsIDB4RDAsCisweDFFLCAweDQwLCAweDVCLCAweDA0LCAweEVELCAweDI1LCAweEI0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDEwLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDOSwKKzB4MDAsIDB4MzQsIDB4NDMsIDB4OTgsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MjIsIDB4Q0QsIDB4MEEsIDB4MzQsIDB4MDMsIDB4RDAsCisweDBDLCAweDQwLCAweEIyLCAweDAzLCAweEMxLCAweDBBLCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDczLCAweDAxLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHg2QywgMHg0MCwgMHg1OCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjgsIDB4MTcsIDB4MTAsIDB4NUYsIDB4MDAsIDB4RkMsIDB4ODEsIDB4MzAsCisweDA1LCAweEUwLCAweDVCLCAweDAwLCAweDdCLCAweDYxLCAweDNDLCAweDAxLCAweEYyLCAweDA1LCAweEMwLCAweERFLCAweDAwLAorMHg3MywgMHgwMSwgMHhFQywgMHgwNSwgMHhGMCwgMHgwNSwgMHhDQSwgMHgxQiwgMHgwMCwgMHg1RiwgMHgwMCwgMHhGQywgMHgwMSwKKzB4MzAsIDB4MDcsIDB4RDQsIDB4NUMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDAwLCAweDA1LCAweDA4LCAweDE3LCAweDAwLCAweDc4LCAweDIwLCAweEYwLCAweDAxLCAweEM2LCAweDQ3LCAweDA4LAorMHgxRiwgMHgxMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgyMCwgMHhDOCwgMHgwMSwgMHgwMCwgMHgxRiwgMHgwNCwgMHg1QywgMHgyNCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDQsIDB4RjEsIDB4MjEsIDB4QzAsIDB4NEIsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAwLAorMHg4RiwgMHgwMSwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMiwgMHg5QiwgMHgyMCwgMHg0QywgMHg4MiwKKzB4QjAsIDB4MTksIDB4ODAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDEsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4RTUsCisweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDAyLCAweDMyLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMywgMHg0NSwgMHg4RSwKKzB4RDAsIDB4MDksIDB4NDAsIDB4RTcsIDB4MTAsIDB4ODAsIDB4MDAsIDB4NDQsIDB4MDYsIDB4MTAsIDB4NDksIDB4NTAsIDB4MjQsCisweDAyLCAweDkxLCAweDAyLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweEE3LCAweDAwLCAweDkxLCAweDBCLCAweDM0LAorMHgwMiwgMHgxNCwgMHgyOSwgMHg0NCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MTgsIDB4NTQsIDB4MkIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDk4LCAweDIwLCAweDQ0LCAweDUyLCAweDkyLCAweDQ5LCAweDQ4LCAweDI1LCAweDA4LCAweDk1LCAweDM4LCAweDM0LAorMHgwMiwgMHgwMCwgMHgwOSwgMHg0MiwgMHgyNywgMHg0MCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwNiwgMHgxQywgMHgyRCwgMHg0MCwKKzB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsCisweDAwLCAweDg5LCAweDE0LCAweDE0LCAweDUyLCAweEQxLCAweDg4LCAweDQwLCAweDIzLCAweDA4LCAweDkxLCAweDQ4LCAweDAwLAorMHgwMiwgMHgwMCwgMHgwOCwgMHg2MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwNCwgMHgzNiwgMHgyMiwgMHgxNCwgMHgwOCwgMHg0MCwKKzB4MjMsIDB4MDAsIDB4QzEsIDB4MTQsIDB4MzQsIDB4NTYsIDB4MTAsIDB4NDgsIDB4NDEsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDA2LCAweDA1LCAweDFGLCAweDA0LCAweDVDLAorMHgxMCwgMHhGMCwgMHg2MSwgMHhDMSwgMHgxNywgMHgwMCwgMHgxQSwgMHgwMiwgMHg0QywgMHg1MCwgMHhCMCwgMHhFMSwgMHhDMSwKKzB4ODUsIDB4NDcsIDB4MTcsIDB4MDEsIDB4N0MsIDB4MDgsIDB4MjAsIDB4NDEsIDB4QzEsIDB4MTUsIDB4MDAsIDB4MTMsIDB4MEUsCisweDdDLCAweDEwLCAweDMwLCAweDQxLCAweEMwLCAweDc3LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgyNywgMHgwNSwgMHg5RiwgMHgxNCwgMHhFQywgMHg1MiwgMHhGMCwgMHg0OSwgMHhDMiwKKzB4MkYsIDB4MTAsIDB4QkYsIDB4NDQsIDB4N0QsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzIsIDB4NkUsIDB4MDAsIDB4QkIsIDB4MDgsCisweEZDLCAweDEyLCAweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDAwLCAweDlGLCAweDgxLCAweEJDLCAweDAyLCAweEYwLCAweDBCLAorMHhDMCwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHgwMCwKKzB4QTcsIDB4MTAsIDB4QkYsIDB4MDYsIDB4Q0MsIDB4NDYsIDB4MTAsIDB4MjksIDB4QzAsIDB4MkQsIDB4MDAsIDB4OUYsIDB4ODIsCisweERDLCAweDEyLCAweEYwLCAweDBCLCAweEMwLCAweDJDLCAweDA1LCAweEIzLCAweDAwLCAweDdDLCAweDgyLCAweDMwLCAweDRCLAorMHhDMSwgMHgyRiwgMHgwMCwgMHhCMywgMHgwMCwgMHhCQywgMHg5MywgMHgzMCwgMHgwQiwgMHhDMCwgMHg3NywgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MTEsIDB4MEEsCisweDQ1LCAweDBDLCAweEIwLCAweEUwLCAweDQwLCAweDA3LCAweDA4LCAweDE3LCAweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweEExLAorMHg0MCwgMHg4NCwgMHgwOCwgMHgxMSwgMHgwMCwgMHg3NCwgMHg1MCwgMHgxMCwgMHgyMSwgMHg0MCwgMHgxNywgMHgwMCwgMHgxMSwKKzB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDQsIDB4NjMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLCAweEExLCAweDAxLCAweDg1LCAweDA0LCAweDA0LCAweDUyLCAweDU4LCAweDQ4LAorMHg0MCwgMHgyMywgMHgwMCwgMHg4OSwgMHgwMCwgMHgxNCwgMHgwQiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4NSwKKzB4ODAsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDIsIDB4MjUsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4OEEsIDB4MTAsCisweDA4LCAweDQwLCAweDRCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHgyOCwgMHgyNSwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMSwgMHgwOSwgMHg0MCwgMHgyNywgMHgwQywgMHg5NSwKKzB4MDQsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4MTAsIDB4MjQsIDB4MTQsIDB4OTQsIDB4MDQsIDB4NzQsIDB4MEEsIDB4MTQsCisweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDEyLCAweDE4LCAweDQ5LCAweDQwLCAweDYzLCAweDI4LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBMiwgMHgyNywgMHgxMCwgMHg5NywKKzB4MDAsIDB4NDgsIDB4MUEsIDB4NzAsIDB4MDksIDB4RTAsIDB4QTUsIDB4MDAsIDB4OUYsIDB4OTMsIDB4NTQsIDB4MDIsIDB4RjAsCisweDA5LCAweEM0LCAweEU0LCAweDQwLCAweDk3LCAweDAwLCAweDdDLCAweDAyLCAweDMzLCAweDA5LCAweEMwLCAweDY3LCAweDAwLAorMHg5MSwgMHgwMCwgMHg3QywgMHgwNiwgMHgzNCwgMHg0OSwgMHg0MiwgMHgxNywgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsIDB4MjAsIDB4MDAsIDB4OUYsIDB4OTAsIDB4N0MsIDB4MTIsIDB4QjAsCisweDA5LCAweEMwLCAweDY3LCAweDA5LCAweDk3LCAweDIxLCAweDdDLCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDIzLCAweDExLAorMHg5QiwgMHgwMCwgMHg3QywgMHgwQSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MSwgMHg5RiwgMHgyMCwgMHg3QywgMHgwNiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDA4LCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDZDLCAweDA4LCAweEYyLCAweDAxLCAweEMwLCAweDg2LCAweDE0LAorMHgxRiwgMHgwMiwgMHg0QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NiwgMHgwMywgMHgxRiwgMHgyOCwgMHg3QywgMHgwMCwKKzB4RjAsIDB4MTEsIDB4QzQsIDB4MDQsIDB4MDEsIDB4MTMsIDB4MTAsIDB4N0MsIDB4NDAsIDB4MzAsIDB4MjEsIDB4QzAsIDB4NTAsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDE0LCAweDAwLAorMHg3RCwgMHg4NSwgMHhDNCwgMHg4MSwgMHhEMCwgMHgwNSwgMHg1OCwgMHhEQywgMHgwMCwgMHg1QywgMHgwMCwgMHhFQywgMHgwMSwKKzB4RDAsIDB4MjcsIDB4NDEsIDB4MUYsIDB4MTAsIDB4N0QsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDcsIDB4NDAsIDB4RDgsCisweDQwLCAweDczLCAweDAyLCAweEI0LCAweDA5LCAweDE1LCAweDA3LCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhERCwgMHgwMywgMHg3NCwgMHgzMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4NzEsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsIDB4MEIsIDB4RDAsIDB4MkMsIDB4NDEsIDB4QjIsCisweDAwLCAweENDLCAweDA0LCAweDc0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDcwLCAweDAwLCAweEMxLCAweDAyLCAweDM0LAorMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHg0MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4OTQsIDB4MDMsIDB4RDEsIDB4OUUsIDB4NDAsIDB4OTksCisweDI4LCAweEZELCAweDA4LCAweEEwLCAweDAzLCAweERBLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI2LAorMHgxMywgMHhEMCwgMHgxRSwgMHg1MCwgMHgzQywgMHgwNCwgMHhBOSwgMHgwMCwgMHhGNCwgMHgwMywgMHg5MCwgMHgxQywgMHg0MSwKKzB4MTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NzgsCisweDEwLCAweEZGLCAweDAxLCAweEJDLCAweDA3LCAweEYxLCAweDVFLCAweEMxLCAweDZCLCAweDAwLCAweEZFLCAweDExLCAweDhDLAorMHgwNiwgMHhDMCwgMHgxMiwgMHhDMCwgMHg2QSwgMHgwMCwgMHhFRiwgMHgyMSwgMHhCQywgMHg0NywgMHhGMCwgMHgxQywgMHhFMiwKKzB4NTgsIDB4MDAsIDB4QTMsIDB4MDEsIDB4QkMsIDB4MDcsIDB4QjAsIDB4MUUsIDB4RDAsIDB4NTAsIDB4NjAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEIwLCAweEI1LCAweDA1LCAweDVGLCAweDAwLCAweDZDLAorMHgwMSwgMHhGMSwgMHgyRCwgMHhDMCwgMHgwNiwgMHgwMCwgMHhERiwgMHgwNiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MjcsIDB4MTAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MkIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MTMsIDB4MDAsIDB4MTcsIDB4NDAsCisweDdDLCAweDAzLCAweDc0LCAweDBELCAweEQwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHg3RCwgMHgwNCwgMHg3MywgMHgwMSwgMHhDRCwgMHgyNywgMHgzMCwgMHgxRiwgMHhDMiwKKzB4N0YsIDB4MDIsIDB4RjcsIDB4MDEsIDB4Q0MsIDB4MDUsIDB4QjQsIDB4OUYsIDB4QzgsIDB4NUYsIDB4OTIsIDB4NkYsIDB4MDksCisweERDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDU4LCAweDQwLCAweEIzLCAweDA5LCAweENDLCAweEE1LCAweDMwLCAweDFGLAorMHhDMCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwOCwKKzB4MzksIDB4QTAsIDB4NjEsIDB4MDAsIDB4QUMsIDB4MDMsIDB4MTAsIDB4NEUsIDB4NDgsIDB4MkIsIDB4ODIsIDB4RTEsIDB4MDAsCisweDg0LCAweDA4LCAweDEwLCAweDA2LCAweDQwLCAweDFCLCAweDAwLCAweEVELCAweDA4LCAweDg0LCAweDAzLCAweEQwLCAweDA2LAorMHg1MCwgMHgxOCwgMHgwMiwgMHhBMSwgMHgwMCwgMHg4NSwgMHgzMywgMHhCMCwgMHgwQSwgMHhDOCwgMHg1NiwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MzksIDB4MDAsIDB4QzEsIDB4MDgsCisweDk0LCAweDQzLCAweDE4LCAweDBFLCAweDYwLCAweDJGLCAweDg0LCAweEU1LCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDA2LAorMHgwOCwgMHgxQiwgMHgwMCwgMHgyRCwgMHgwMCwgMHg5NCwgMHg0MywgMHhEMCwgMHg4RSwgMHg0MCwgMHgwRSwgMHgwMCwgMHg4MSwKKzB4ODAsIDB4QzQsIDB4MDEsIDB4MTgsIDB4MEUsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDM1LCAweDAwLCAweDAxLCAweDAwLCAweDUwLCAweDAyLCAweDE4LCAweDBELAorMHg0NCwgMHg2MywgMHgwMCwgMHhDNSwgMHgwMiwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0NCwgMHg4MywgMHgwMCwgMHg4RCwKKzB4MDIsIDB4MDQsIDB4NEYsIDB4RDAsIDB4MDQsIDB4NDAsIDB4QzIsIDB4MDIsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDEsIDB4OTAsCisweEE4LCAweDQwLCAweDBBLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHhBOCwgMHgzRCwgMHgwMCwgMHg5MywgMHgwMCwgMHg1NCwgMHgyOCwgMHgzMCwgMHgwRiwgMHhDMCwgMHg2NywgMHgwMCwgMHhGNywKKzB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDYsIDB4REMsIDB4MEYsIDB4RjAsCisweDBDLCAweDQwLCAweDYyLCAweDA4LCAweDkxLCAweDAwLCAweDRDLCAweDAzLCAweDExLCAweDNELCAweEM4LCAweDU0LCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgzNywgMHgwMCwgMHg5RiwKKzB4MDIsIDB4NjQsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4ODcsIDB4MjgsIDB4REEsIDB4MTEsIDB4N0MsIDB4MEEsIDB4NzAsCisweDA5LCAweEMwLCAweDg3LCAweDEwLCAweERGLCAweDEwLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEM0LCAweDA1LCAweDA0LAorMHg5RiwgMHhDMCwgMHg2QywgMHgwMywgMHhGMCwgMHgyRCwgMHhDMiwgMHgzNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDgsIDB4M0YsIDB4MDAsIDB4QjMsIDB4ODAsIDB4N0MsIDB4MDAsIDB4MzEsCisweDBGLCAweEUwLCAweDBDLCAweDA0LCAweEY3LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDAzLCAweDQwLCAweDJGLCAweDA0LAorMHgzNywgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwQywgMHg0MCwgMHhCMiwgMHgwMCwgMHhGQywgMHgwMiwKKzB4NzAsIDB4MDUsIDB4QzEsIDB4MDUsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEExLCAweDIwLCAweDM2LCAweDAwLCAweDkxLCAweDAzLCAweDc0LCAweDA0LCAweDEwLCAweDBELCAweDQ4LCAweDQ0LCAweDAxLAorMHhERCwgMHgwMCwgMHg3NCwgMHgwNCwgMHhEMCwgMHgxMSwgMHg0MCwgMHg0NywgMHgwMCwgMHg0RCwgMHgwMCwgMHg2QywgMHgwMywKKzB4RDAsIDB4MDksIDB4NDAsIDB4NDQsIDB4MDAsIDB4MTEsIDB4MDcsIDB4NzQsIDB4MDIsIDB4MTAsIDB4NDQsIDB4NDIsIDB4ODQsCisweDA0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM2LCAweDAwLAorMHgxMSwgMHgwMSwgMHg3NCwgMHgwNCwgMHgxMCwgMHgwRCwgMHg0MCwgMHg2NCwgMHgxOCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwNiwKKzB4RDAsIDB4MUIsIDB4NjAsIDB4Q0YsIDB4MDAsIDB4MUQsIDB4NTgsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MUQsIDB4NzAsIDB4QzQsCisweDAwLCAweDM1LCAweDgxLCAweDc0LCAweDIxLCAweDUwLCAweDBELCAweDQwLCAweDA1LCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMiwKKzB4MTAsIDB4MEMsIDB4NDAsIDB4MjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDIsCisweDIwLCAweENELCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDAwLCAweDQwLCAweDA0LCAweDAwLCAweDA1LCAweDAwLCAweDY0LAorMHg4MywgMHgxNCwgMHgwOCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MTAsIDB4M0EsIDB4MDgsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MEYsIDB4NDAsIDB4MDQsCisweDEwLCAweEU3LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDYwLCAweENDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHg3MSwgMHgwNSwgMHhDMCwKKzB4MDUsIDB4NjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MzgsIDB4M0YsCisweDIwLCAweEJGLCAweDgwLCAweEZFLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDBCLCAweDAwLCAweEZGLCAweDAwLCAweEZDLAorMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHg4MywgMHhGMCwgMHgwMywgMHhDOCwKKzB4MEYsIDB4MDAsIDB4M0IsIDB4MDAsIDB4QkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzIsIDB4MTcsIDB4NjIsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDdGLCAweDAyLCAweEZCLCAweDA5LCAweEFDLAorMHgwNywgMHhCMCwgMHgxRiwgMHhDMCwgMHg3QSwgMHgwMCwgMHhGRCwgMHgyMSwgMHhFQywgMHgwNywgMHhCMCwgMHgxRiwgMHhDMCwKKzB4N0EsIDB4MDgsIDB4RkIsIDB4ODksIDB4Q0MsIDB4MDcsIDB4RjIsIDB4MUYsIDB4QzAsIDB4N0QsIDB4MTIsIDB4RkIsIDB4MDksCisweEVDLCAweDg3LCAweDMzLCAweDFFLCAweEQyLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwNywgMHgwMSwgMHgxMSwgMHgwNCwgMHg0NCwgMHgwNCwgMHgzMCwgMHgxMSwgMHg0MCwKKzB4NDQsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4NDcsIDB4NDQsIDB4MDAsIDB4MEQsIDB4MDAsCisweDQ0LCAweDA0LCAweDEwLCAweDExLCAweEMwLCAweDA1LCAweDM5LCAweDExLCAweDI0LCAweDQ0LCAweDEwLCAweEIyLCAweDExLAorMHg0NCwgMHgwQywgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwKKzB4MzUsIDB4MTgsIDB4RDksIDB4NjAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4RDksIDB4QTAsCisweDY0LCAweDUzLCAweDkyLCAweDBELCAweDQwLCAweDMzLCAweDAwLCAweEQ1LCAweDAwLCAweDQ0LCAweDAzLCAweDkwLCAweDBDLAorMHg0MCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwNCwgMHgzNCwgMHg0MywgMHgxOSwgMHgwQywgMHg0MCwgMHg0QywgMHg4MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTgsIDB4MDcsIDB4MDgsIDB4MTEsIDB4MDAsCisweDQ0LCAweDAwLCAweEQxLCAweDAxLCAweDQwLCAweDA0LCAweDA4LCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLAorMHg0MCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNSwgMHgxOCwgMHgxNSwKKzB4MDAsIDB4MTQsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDMyLCAweDIwLCAweENCLCAweDIwLCAweDZDLCAweDAzLCAweEYwLCAweDBELAorMHhDMCwgMHgzNiwgMHg4MCwgMHhDRiwgMHgwMCwgMHgyQywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwOCwgMHhEQiwKKzB4MDAsIDB4NEMsIDB4MDMsIDB4QjAsIDB4MEMsIDB4ODAsIDB4MzYsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzIsCisweDBDLCAweEM4LCAweDIwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHg4OCwgMHgwRCwgMHgwMCwgMHgzRiwgMHg4MCwgMHhGOCwgMHg0MCwgMHgzMCwgMHgwMywgMHhDMywgMHgwRCwgMHg4MCwgMHgzRSwKKzB4MDAsIDB4RjgsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEUsIDB4MDgsIDB4M0QsIDB4MDAsIDB4RjgsIDB4MDAsIDB4QjAsCisweDAzLCAweDgyLCAweDBGLCAweDAwLCAweDNCLCAweDMwLCAweEU4LCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDFGLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwOCwgMHgzNSwgMHgwMCwgMHhENywKKzB4MDAsIDB4NkMsIDB4MDMsIDB4NzEsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEMwLCAweDM2LCAweDA0LCAweERGLCAweDAwLCAweDVDLCAweDkzLCAweDMxLCAweDBELCAweEMxLCAweDM0LCAweDAyLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMSwgMHgwOSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4ODQsIDB4MDYsIDB4MTEsIDB4NDAsIDB4MzQsIDB4NEMsIDB4MTAsCisweDIwLCAweDQxLCAweDgzLCAweDI0LCAweDEwLCAweDAwLCAweDc0LCAweDA0LCAweDEwLCAweEIwLCAweDAwLCAweDA0LCAweDAwLAorMHgwMiwgMHgwMCwgMHgwNCwgMHgwQywgMHgxMCwgMHgzMSwgMHg0MiwgMHgwMywgMHgwMCwgMHgwQywgMHgwMywgMHg3MCwgMHg4MCwKKzB4MTAsIDB4MjEsIDB4NDAsIDB4NkMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEzLCAweDIwLCAweDcwLCAweDEwLCAweEM1LCAweDgwLCAweDI0LCAweDA3LCAweDQwLCAweDBDLCAweDQwLCAweDMzLCAweDAxLAorMHhDNSwgMHgwMCwgMHgyNCwgMHg0NywgMHg1MCwgMHhBQywgMHg0MCwgMHgzMSwgMHgwOCwgMHhDNCwgMHgwMCwgMHgxNCwgMHgwQiwKKzB4MTQsIDB4M0MsIDB4MDAsIDB4MzAsIDB4MDQsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTgsIDB4MkMsIDB4NDAsIDB4MEYsCisweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBGLCAweDAyLCAweDRDLCAweDBBLAorMHgyMSwgMHgwOSwgMHhGNCwgMHgwNCwgMHgxMCwgMHgxMiwgMHg0MCwgMHg0RiwgMHgwMCwgMHgyNSwgMHgzNywgMHhGNiwgMHgwNCwKKzB4MTIsIDB4MTIsIDB4NjAsIDB4NDksIDB4MDIsIDB4MjEsIDB4MDEsIDB4ODQsIDB4MDQsIDB4MDAsIDB4MTIsIDB4NDEsIDB4NEIsCisweDAyLCAweDJELCAweDExLCAweEI0LCAweDI0LCAweDgwLCAweDEyLCAweDQyLCAweDNFLCAweDIwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHgzMCwgMHgwMCwgMHhDNywgMHgwMCwgMHgyQywgMHgyMywKKzB4NTEsIDB4OEMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDgsIDB4M0MsIDB4NDMsIDB4NzAsIDB4MEMsIDB4QzQsIDB4MzEsCisweDA2LCAweEM3LCAweDAwLCAweDFDLCAweDQzLCAweDMwLCAweDBDLCAweEMwLCAweDMwLCAweDAwLCAweENGLCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwQywgMHhFNCwgMHg0QiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MzgsIDB4MDksIDB4MjAsIDB4M0YsIDB4MDAsIDB4RjAsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzIsIDB4MEYsCisweDAwLCAweDNCLCAweDJDLCAweEJDLCAweDIwLCAweDcwLCAweDAzLCAweEMwLCAweDBDLCAweDAyLCAweDNGLCAweDAwLCAweEJDLAorMHgyMCwgMHhGOCwgMHg4MywgMHhDMCwgMHgwRiwgMHgwMCwgMHgxRiwgMHgwMCwgMHhGQywgMHgwMCwgMHg3MSwgMHgxMSwgMHhDOCwKKzB4MDksIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4NzcsCisweDAwLCAweEMzLCAweDQwLCAweDZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDczLCAweDAwLCAweEM3LCAweDAxLCAweDZDLAorMHgwNywgMHgzNiwgMHgwRCwgMHhDNCwgMHg3MCwgMHgwMCwgMHhEQiwgMHg0MCwgMHg2QywgMHgwMywgMHhGMCwgMHgwQywgMHhEMCwKKzB4MzQsIDB4NDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDk4LCAweDBELCAweDA4LCAweDJCLCAweDAwLCAweDg0LAorMHgwMCwgMHhEMiwgMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHgyMSwgMHg2MCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MiwKKzB4MDgsIDB4MDAsIDB4MzEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4OTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsCisweEI0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDRGLCAweDY4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhGOSwgMHgwMSwgMHhBNiwgMHgwNywgMHhEOSwgMHgxRSwgMHg0MCwKKzB4N0IsIDB4MDAsIDB4RjUsIDB4MDEsIDB4QTQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4MTAsIDB4RTksIDB4MDEsCisweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDYwLCAweDc4LCAweDAwLCAweEUxLCAweDAxLCAweEQ0LCAweDA3LCAweDkwLCAweDFFLAorMHg2MCwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyMCwKKzB4MDMsIDB4MDAsIDB4MTksIDB4MDAsIDB4MDYsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDIsIDB4MDMsIDB4MDAsIDB4MDUsIDB4MDAsCisweDA0LCAweDAwLCAweDE4LCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDkwLCAweDAwLAorMHg2MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg1QiwgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjgsIDB4MTUsIDB4MDAsIDB4NUIsIDB4ODAsCisweDJDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDU3LCAweDQwLCAweDZDLCAweDAxLCAweDMwLCAweDA1LAorMHhDQSwgMHgxNCwgMHgxMCwgMHg1QiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNCwgMHhDMCwgMHgxMCwgMHgwMCwgMHg1MywKKzB4MDAsIDB4N0MsIDB4MDEsIDB4QjAsIDB4MDUsIDB4QzAsIDB4NUYsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDhELCAweDA4LCAweDNGLCAweDAwLCAweEZDLCAweDA4LCAweEUwLCAweDAzLAorMHhDMCwgMHgwRiwgMHgyMCwgMHgzOSwgMHgyMCwgMHhGQywgMHgwOCwgMHhGMCwgMHgwMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgzRiwKKzB4NDAsIDB4RTQsIDB4ODAsIDB4QzIsIDB4MDMsIDB4QzAsIDB4OEYsIDB4MDAsIDB4M0IsIDB4MjAsIDB4RkMsIDB4MDAsIDB4RjAsCisweDAzLCAweEMwLCAweDRCLCAweDA4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgyMiwgMHgzMCwgMHg0OSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwKKzB4QzAsIDB4N0MsIDB4MDIsIDB4RjEsIDB4MDksIDB4ODAsIDB4RTUsIDB4MDgsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4NzAsCisweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDk3LCAweDAxLCAweDdDLCAweDE2LCAweDMwLCAweDA5LCAweDgwLCAweDQxLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhFNCwgMHgyMywgMHg5RCwKKzB4MDAsIDB4NDUsIDB4MEEsIDB4MTAsIDB4MTgsIDB4ODAsIDB4MjYsIDB4MDAsIDB4OUMsIDB4MTEsIDB4NzAsIDB4MDYsIDB4RDAsCisweDI4LCAweDQwLCAweDY0LCAweDA0LCAweDhELCAweDgwLCAweDA0LCAweDAyLCAweDAwLCAweDA5LCAweDQwLCAweDY0LCAweDAzLAorMHg5MSwgMHgwMiwgMHg3NCwgMHgwRSwgMHgxMCwgMHgxOCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4ODAsIDB4QkQsIDB4ODAsIDB4QzQsIDB4MDIsIDB4NTAsCisweDBCLCAweDQwLCAweDJDLCAweDAxLCAweEJDLCAweDA4LCAweEYwLCAweDIyLCAweEQyLCAweDBCLCAweDQxLCAweDJELCAweDAwLAorMHhCRCwgMHgwMCwgMHhENCwgMHgwMiwgMHg0MiwgMHgwQiwgMHg0MCwgMHgyQywgMHgwMCwgMHhCNSwgMHgwQSwgMHhGNCwgMHhDMiwKKzB4MDAsIDB4NEIsIDB4NDAsIDB4NzEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDIwLCAweDI5LCAweDAwLCAweEFELCAweDAwLCAweEQ0LCAweDAzLCAweDU0LCAweDFCLCAweDQwLCAweDZBLCAweDIwLAorMHhBQywgMHhBMCwgMHhCMCwgMHhBMywgMHhEMSwgMHg4QiwgMHg0MCwgMHgyOSwgMHgwMCwgMHhCRCwgMHg2OCwgMHhDNCwgMHgwMiwKKzB4NTEsIDB4MEIsIDB4NDAsIDB4MjgsIDB4MDIsIDB4QTEsIDB4MDgsIDB4QjAsIDB4MjIsIDB4MTEsIDB4MEIsIDB4NDQsIDB4NTEsCisweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA3LCAweDA4LAorMHgxRiwgMHg4MCwgMHg0QywgMHgwMCwgMHg3NCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHgzOCwgMHgwOCwKKzB4RjAsIDB4MjAsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MjIsIDB4NUMsIDB4MDAsIDB4NzIsIDB4MDEsIDB4RDAsIDB4ODAsCisweDAwLCAweDE3LCAweDAyLCAweDc4LCAweDA4LCAweDM0LCAweDAzLCAweEMwLCAweDc1LCAweEMwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgyNywgMHgwNSwgMHg5RiwgMHgxNCwgMHg2QywgMHgwMiwKKzB4QjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4NDksIDB4ODAsIDB4MjYsCisweDAwLCAweDlGLCAweDA0LCAweDdDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDI3LCAweDAxLCAweDlGLCAweDA0LCAweDNDLAorMHgxMiwgMHhGNCwgMHgwOSwgMHhDMCwgMHg2NiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUQsIDB4QTgsIDB4QUYsIDB4MDAsIDB4OUYsIDB4MDIsIDB4RjQsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MkIsCisweDAwLCAweEJGLCAweDgwLCAweENDLCAweDgyLCAweEYwLCAweDBCLCAweEQwLCAweDJDLCAweDAwLCAweDhCLCAweDgyLCAweDhDLAorMHgwMiwgMHhCMCwgMHgwQiwgMHhDMCwgMHgyRSwgMHgwMCwgMHhBRiwgMHgwMCwgMHhDRCwgMHgwQSwgMHhCMCwgMHgwQSwgMHhDMCwKKzB4NjQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MTAsIDB4NDcsCisweDAxLCAweDBELCAweDA1LCAweDc0LCAweDAwLCAweEIwLCAweDAxLCAweDQwLCAweDA3LCAweDA4LCAweDFELCAweDAwLCAweDZDLAorMHgxMCwgMHhEMCwgMHg0MSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwKKzB4MDAsIDB4MDEsIDB4MUQsIDB4MDAsIDB4NDUsIDB4MTAsIDB4MTAsIDB4MDEsIDB4NDIsIDB4NzAsIDB4NjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEyLCAweDIxLCAweDAwLCAweDhELCAweDAwLCAweDM0LAorMHgwMiwgMHgxMCwgMHgwQywgMHg0MCwgMHgyMywgMHgwOCwgMHg5RCwgMHhBMCwgMHgwNCwgMHg0MiwgMHhEMCwgMHgwOCwgMHg0MSwKKzB4MjQsIDB4MDAsIDB4ODksIDB4MDAsIDB4NjQsIDB4MDIsIDB4OTAsIDB4MDksIDB4NDAsIDB4MjIsIDB4MDQsIDB4OEQsIDB4MDAsCisweDQ0LCAweDAyLCAweDkwLCAweDA4LCAweDUwLCAweDQ4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHgyMCwgMHgyNSwgMHgxMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMywgMHg5MCwgMHgwRCwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NjQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDAsCisweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDhDLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHg2MCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwKKzB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MjAsCisweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDIwLCAweDAwLCAweDlCLCAweDAwLCAweDJDLCAweDAyLCAweEIwLCAweDA4LAorMHhDMCwgMHgyNiwgMHgwMCwgMHg5RSwgMHgwMCwgMHg0QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgxNCwgMHgyOCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEY4LCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlGLCAweDAwLCAweDdDLCAweDgyLCAweEYwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1OCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzEsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAxLCAweDFGLCAweDAwLCAweDRELCAweDEwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwNywgMHgwNCwgMHgxNywgMHg0MCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywKKzB4MDAsIDB4NUMsIDB4NDAsIDB4MzAsIDB4ODEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4NUMsIDB4OTAsIDB4MzQsCisweDAxLCAweEMwLCAweDQxLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhBMCwgMHhEQywgMHgwMSwgMHg1RCwgMHgwMCwgMHhDNCwgMHgwNSwgMHhEMCwgMHg4NywgMHg0OCwgMHg1RiwgMHgwNCwgMHg3MSwKKzB4MDcsIDB4RjQsIDB4MDEsIDB4MTAsIDB4MDcsIDB4NDAsIDB4MUYsIDB4MDIsIDB4NTEsIDB4MDAsIDB4QzAsIDB4MTEsIDB4MTAsCisweEI3LCAweDQwLCAweDVGLCAweDAwLCAweDcwLCAweDAxLCAweDg0LCAweDAxLCAweDEwLCAweDA2LCAweDQwLCAweDUwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHhCMiwgMHgwOCwgMHhDRCwKKzB4MDAsIDB4MTQsIDB4MEEsIDB4RDgsIDB4MkMsIDB4NDAsIDB4QjMsIDB4MDAsIDB4RDQsIDB4MTEsIDB4MzQsIDB4MDcsIDB4MTAsCisweDFELCAweDQwLCAweEEzLCAweDAwLCAweEQ1LCAweDAwLCAweDE0LCAweDBFLCAweDE0LCAweDFDLCAweDQwLCAweDYzLCAweDAwLAorMHhDNCwgMHgwNSwgMHgxNCwgMHgyQiwgMHgxNCwgMHgyNCwgMHg0MCwgMHg1MSwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsIDB4MDgsIDB4RDEsCisweDBFLCAweDQwLCAweDdGLCAweDAwLCAweDYxLCAweDgwLCAweEIwLCAweDBGLCAweDEwLCAweDBFLCAweDRELCAweDJGLCAweDAwLAorMHhGMSwgMHgwMCwgMHg4NCwgMHgwMiwgMHgxMCwgMHgwRSwgMHg0MCwgMHg2QiwgMHgwNCwgMHhGNSwgMHgzMCwgMHg4NCwgMHgwMywKKzB4MTQsIDB4MDcsIDB4NDAsIDB4MDQsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDE4LCAweDU5LCAweDAwLCAweEVGLCAweDA5LCAweDlDLCAweDA1LCAweEYxLCAweDFBLCAweEMwLCAweDRCLCAweDAwLAorMHhFNywgMHg0MSwgMHhGQywgMHgwNywgMHgzNCwgMHgxNiwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFNywgMHg3NywgMHg5QywgMHgwNiwKKzB4MzAsIDB4MUUsIDB4QzIsIDB4N0IsIDB4MDAsIDB4NjcsIDB4RTEsIDB4REMsIDB4MDYsIDB4MzAsIDB4MTYsIDB4ODAsIDB4NDUsCisweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDE1LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMiwgMHgwMSwgMHhDNCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4RTAsIDB4MDUsIDB4QzAsIDB4MzMsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MTcsCisweDAwLCAweDVCLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA1LCAweEM4LCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHg3RiwgMHgyMiwgMHhGRiwgMHgxMSwgMHhGOCwgMHgwNCwKKzB4RjAsIDB4OUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4QUYsIDB4MDEsIDB4REMsIDB4ODYsIDB4MzAsIDB4OUYsIDB4QzgsIDB4NkIsCisweDAwLCAweEZCLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDFCLCAweEU0LCAweDZGLCAweDAwLCAweEIzLCAweDA5LCAweEM0LAorMHgwNywgMHgzMCwgMHgxNiwgMHhDOCwgMHgwQSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4MDAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDQsIDB4QkMsIDB4NDAsIDB4RDgsIDB4OEEsIDB4NDAsIDB4MkIsCisweDAxLCAweDJELCAweDAwLCAweDg0LCAweDIyLCAweDEwLCAweDhBLCAweDQyLCAweDJCLCAweDAwLCAweEUxLCAweDA4LCAweDg0LAorMHg0MiwgMHhEMCwgMHgwMiwgMHg0MCwgMHgyQiwgMHgwMSwgMHhCQiwgMHgwQywgMHhDNCwgMHgxMywgMHhCMCwgMHgwRSwgMHg0MCwKKzB4NTQsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDIsIDB4MTksCisweDMwLCAweEVELCAweDQwLCAweEI0LCAweDAxLCAweEQwLCAweDBBLCAweDQ4LCAweDBCLCAweDgwLCAweEVELCAweDAwLCAweEI0LAorMHgwMywgMHg5NCwgMHg4NiwgMHg0NCwgMHgzRiwgMHgwNCwgMHhFOSwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHg4QSwgMHg0MSwKKzB4MkIsIDB4MjQsIDB4MjEsIDB4NDAsIDB4RDUsIDB4MDAsIDB4MTEsIDB4MDcsIDB4NDAsIDB4MjIsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDgzLCAweDAwLCAweENELCAweDA5LCAweDM2LAorMHg4NSwgMHhEMCwgMHhBMCwgMHg0MCwgMHhFMywgMHg4NCwgMHhDRCwgMHgwQywgMHg3NCwgMHgwOCwgMHg5MCwgMHgwMSwgMHg0MCwKKzB4RDMsIDB4MDAsIDB4RDEsIDB4NTIsIDB4MDQsIDB4MDYsIDB4RDAsIDB4MDAsIDB4NDgsIDB4RDMsIDB4ODAsIDB4MDksIDB4MDMsCisweDE0LCAweDI4LCAweDkwLCAweEFDLCAweDQwLCAweDE4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxRCwgMHhBMCwgMHhFNSwgMHgyQywgMHhGRiwgMHgwQiwgMHg3QywgMHgyQywgMHhGMCwgMHgzMCwgMHhDMCwKKzB4NjcsIDB4MDEsIDB4REYsIDB4MDIsIDB4N0MsIDB4MTksIDB4QjAsIDB4RDksIDB4QzAsIDB4QTcsIDB4MDIsIDB4RkIsIDB4ODcsCisweDRGLCAweDAyLCAweEUwLCAweDJDLCAweDAwLCAweDA3LCAweDAyLCAweEQzLCAweDExLCAweDVELCAweDBELCAweDMxLCAweDk1LAorMHhDMCwgMHg1NiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwKKzB4QTcsIDB4MDAsIDB4REUsIDB4NjAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MUYsIDB4MDIsCisweDQwLCAweDAxLCAweDcwLCAweDI1LCAweEMwLCAweDI3LCAweDIwLCAweERGLCAweDgwLCAweDdDLCAweENBLCAweEYwLCAweDA5LAorMHhDOSwgMHgwNywgMHgwMCwgMHhERiwgMHg1MiwgMHg2OCwgMHg0MSwgMHhGMCwgMHgwNSwgMHhDMCwgMHhBNywgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MkYsIDB4MTQsIDB4RkYsIDB4MDAsCisweEZDLCAweDAxLCAweEY4LCAweDAzLCAweEMxLCAweDBFLCAweDAwLCAweEZGLCAweDAxLCAweENDLCAweDQzLCAweDMwLCAweDhCLAorMHhDMCwgMHg2QywgMHgyMCwgMHhGRiwgMHgwMCwgMHhDRCwgMHgwNiwgMHhGMCwgMHg4RiwgMHhDOCwgMHgzQywgMHgwMCwgMHg3NywKKzB4MDUsIDB4RkMsIDB4MDcsIDB4MzQsIDB4MDMsIDB4QzAsIDB4MTUsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDIwLCAweDY2LCAweDAxLCAweERELCAweDAwLCAweDc0LCAweDA4LCAweEQ4LCAweDMxLAorMHg0MCwgMHg2NCwgMHgwMCwgMHg4RCwgMHgwNSwgMHg0NCwgMHgwOCwgMHg1MCwgMHgwNSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhERSwKKzB4MDAsIDB4NDQsIDB4NjIsIDB4RDAsIDB4MTksIDB4NDQsIDB4OTAsIDB4MDAsIDB4OTEsIDB4MDQsIDB4NzQsIDB4NEIsIDB4MzAsCisweDAwLCAweDQwLCAweDE0LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHhBMCwgMHg0NiwgMHgwMCwgMHhERCwgMHg4MCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgxOSwgMHgwMCwgMHg0NiwgMHgwMCwgMHgxRCwKKzB4MDgsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MDksIDB4NDEsIDB4MjUsIDB4MDIsIDB4RDksIDB4MDAsIDB4NjQsIDB4MDMsIDB4RDAsCisweDA5LCAweDQwLCAweDg0LCAweDMwLCAweDk1LCAweDAwLCAweDMwLCAweDIwLCAweDAyLCAweDQ1LCAweDQwLCAweDA1LCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDgsIDB4NDQsIDB4NDAsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NTAsCisweDAwLCAweDUwLCAweDIwLCAweDEwLCAweEM1LCAweDAwLCAweDA0LCAweDAxLCAweEQwLCAweDAxLCAweDEwLCAweDA0LCAweDg4LAorMHg0MSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgxMSwgMHgwQywgMHg0MCwgMHg0MCwgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTksIDB4MDYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RDAsCisweDA5LCAweEMwLCAweDA2LCAweDAwLCAweDVGLCAweDAwLCAweDBDLCAweDAzLCAweDMwLCAweDA5LCAweEMwLCAweDI0LCAweDEwLAorMHhFRCwgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgyMCwgMHgyMCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwKKzB4MzQsIDB4MDEsIDB4QzAsIDB4MDUsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweEI4LCAweDJELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLAorMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDNCwgMHgxRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwKKzB4RjEsIDB4MDMsIDB4RTAsIDB4MUYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4NzAsIDB4MEIsIDB4RDAsIDB4MTcsCisweDI0LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDJGLCAweDA0LAorMHhGRiwgMHgwMSwgMHhFQywgMHg1MiwgMHhEMCwgMHgxRiwgMHhDMCwgMHgzRSwgMHgyMSwgMHgyRiwgMHgwMSwgMHhGQywgMHgxMywKKzB4MzAsIDB4MEQsIDB4QzAsIDB4NTcsIDB4MDAsIDB4OEIsIDB4MjEsIDB4Q0UsIDB4MjMsIDB4QjAsIDB4NkYsIDB4QzAsIDB4QkMsCisweDA5LCAweDNGLCAweDA0LCAweENDLCAweDkzLCAweDMzLCAweDAzLCAweEMyLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwOCwgMHg4NywgMHgxMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwRSwKKzB4RDgsIDB4MUQsIDB4NDAsIDB4N0YsIDB4MEEsIDB4OUQsIDB4MDEsIDB4RjQsIDB4MkYsIDB4MTAsIDB4MkYsIDB4NDQsIDB4NTcsCisweDEwLCAweDkxLCAweDAwLCAweDQ0LCAweDMzLCAweDEwLCAweDJGLCAweDQwLCAweEJDLCAweDAxLCAweDVELCAweDA5LCAweEM0LAorMHhEQiwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTMsIDB4QTAsIDB4MDMsIDB4MDUsIDB4Q0QsIDB4NTQsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsCisweDAwLCAweENELCAweDAxLCAweDM0LCAweDAzLCAweDE4LCAweDJDLCAweDQwLCAweDE0LCAweDAwLCAweERELCAweDAwLCAweDE1LAorMHgxMywgMHhEMCwgMHg2QywgMHg0MCwgMHhCMSwgMHgwOCwgMHg4RCwgMHgwMCwgMHg1NCwgMHgyMywgMHgxMCwgMHgwMCwgMHg0MCwKKzB4NEQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4NDUsCisweDAwLCAweERELCAweDA0LCAweDc0LCAweDg0LCAweEQxLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERDLCAweDAwLCAweDc0LAorMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgxNywgMHgwMCwgMHg5NSwgMHgwMCwgMHg2NCwgMHgwMywgMHg1MCwgMHgwRCwgMHg0QSwKKzB4MzUsIDB4MDAsIDB4REQsIDB4MDAsIDB4NTQsIDB4MDMsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDY3LCAweDAwLCAweERGLCAweDIwLCAweDZDLAorMHgxNCwgMHhEMCwgMHgwRCwgMHhDMCwgMHgzNiwgMHgwMCwgMHg1RiwgMHhFOCwgMHg3QywgMHgwMywgMHgzMSwgMHgwRCwgMHhDMCwKKzB4NDIsIDB4MDAsIDB4OEIsIDB4NDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MzUsIDB4MTAsIDB4NEUsIDB4NTIsCisweDFDLCAweDAzLCAweDE0LCAweDE5LCAweEMwLCAweDIzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwRiwgMHg4MCwgMHgwNSwgMHgwMCwgMHhGRiwgMHg0MSwgMHhGQywgMHgwMiwgMHhGMiwgMHgyRiwgMHhDMSwKKzB4M0YsIDB4MEMsIDB4N0YsIDB4MDEsIDB4QjAsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4NEYsIDB4MDIsIDB4QjgsIDB4NDAsCisweEQ4LCAweDAzLCAweEIwLCAweDBGLCAweEMwLCAweDNFLCAweDAwLCAweEZGLCAweDAzLCAweEVDLCAweDIzLCAweEY0LCAweDAzLAorMHg0MCwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwOCwKKzB4NjUsIDB4MDEsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MEMsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4MDAsIDB4NUIsIDB4MDAsCisweDRDLCAweDQzLCAweEYwLCAweDhELCAweEMwLCAweDk3LCAweDAwLCAweERGLCAweDA4LCAweDVDLCAweDAzLCAweEYxLCAweDBELAorMHhDMCwgMHgzNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg1QywgMHg0MywgMHhGMCwgMHg4OSwgMHhDMCwgMHgyQiwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MDQsIDB4MDAsIDB4RDEsIDB4MEIsCisweDc0LCAweDAwLCAweEQwLCAweDNELCAweDQwLCAweEJGLCAweDI0LCAweDUxLCAweDBBLCAweEM0LCAweDFCLCAweEQwLCAweEJGLAorMHg0MCwgMHgxNywgMHgwNiwgMHg5QywgMHgwMCwgMHhDNCwgMHgwMywgMHhEMCwgMHgwRiwgMHgwNCwgMHgzQywgMHgxMCwgMHhEQywKKzB4MDEsIDB4NDAsIDB4MEIsIDB4MTAsIDB4QjksIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweEEwLCAweDAwLCAweEMxLCAweDAxLCAweDI0LCAweDAyLCAweEQwLCAweDFDLAorMHg0MCwgMHgzMywgMHgwMCwgMHgwOSwgMHgwQiwgMHgzNCwgMHgwMywgMHhEMCwgMHgxQywgMHg2MCwgMHg4MywgMHgwOCwgMHg4OCwKKzB4MDEsIDB4NTQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4NEQsIDB4MTMsIDB4MTAsIDB4MkYsIDB4NTAsCisweDA4LCAweDQwLCAweDBGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBGLAorMHgwMCwgMHg3OCwgMHg0MCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0OSwgMHg3QiwgMHgwMCwgMHhCNSwKKzB4MDksIDB4QTQsIDB4ODcsIDB4RDAsIDB4NUUsIDB4NDAsIDB4NEIsIDB4MDksIDB4QUQsIDB4MjUsIDB4ODAsIDB4MDcsIDB4RDAsCisweDFDLCAweDQwLCAweDc4LCAweDAwLCAweENELCAweDIxLCAweEMwLCAweDI3LCAweDAwLCAweDEyLCAweDQwLCAweDNGLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgxMCwgMHgwMiwgMHhDMywKKzB4MTgsIDB4M0MsIDB4MjMsIDB4RjgsIDB4MEMsIDB4QzAsIDB4MzMsIDB4MDEsIDB4OEIsIDB4MDgsIDB4MkMsIDB4MDMsIDB4RjAsCisweDVDLCAweDgwLCAweDQzLCAweDAxLCAweENGLCAweDA1LCAweDFDLCAweDAzLCAweEYwLCAweDRDLCAweEMwLCAweDMxLCAweDAwLAorMHg0RiwgMHgxMCwgMHg1QywgMHgzNywgMHg3MCwgMHgwQywgMHhDMCwgMHg0QiwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDgsIDB4RkMsIDB4MjMsIDB4RjAsCisweDBGLCAweEM4LCAweDNCLCAweDAwLCAweEZCLCAweDY4LCAweERDLCAweDIzLCAweEYwLCAweDJGLCAweEMxLCAweDBGLCAweDIwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQywgMHgwMCwgMHhGRiwgMHgwOCwgMHg3QywgMHhBQiwKKzB4NTIsIDB4MEYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEE4LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDc4LCAweDAxLCAweEYwLCAweDBELCAweEMwLCAweDM2LCAweDA0LAorMHgxRiwgMHgwMCwgMHg0QywgMHg2MywgMHhGMCwgMHg0RCwgMHhDOCwgMHgwNiwgMHgwOCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMywKKzB4RjEsIDB4RkQsIDB4QzAsIDB4QjYsIDB4MDEsIDB4NUYsIDB4MDEsIDB4NkMsIDB4MEEsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NDAsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDkwLCAweDM5LCAweDAwLAorMHhFRCwgMHg4MCwgMHhCNCwgMHgwMywgMHhDMSwgMHgwRSwgMHhDMCwgMHgzOSwgMHgwMSwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMywKKzB4RDEsIDB4NEUsIDB4NDIsIDB4MEEsIDB4MDAsIDB4QTUsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDEsIDB4MEUsIDB4NDEsIDB4MzgsCisweDBELCAweEVELCAweDAwLCAweDg0LCAweDAyLCAweDEyLCAweDA2LCAweEMwLCAweDRFLCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgyOCwgMHhFRCwgMHgyMSwgMHhCMCwgMHgwNywKKzB4RDksIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDMsIDB4QUQsIDB4MDEsIDB4QTQsIDB4MTcsIDB4RDAsIDB4NUUsIDB4NDAsIDB4NEEsCisweDA4LCAweEUxLCAweDIxLCAweEI0LCAweDI3LCAweEQwLCAweDFDLCAweDQwLCAweDdBLCAweDAyLCAweDdELCAweDAxLCAweEE0LAorMHgwNiwgMHgxMCwgMHgxQywgMHg0MCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTYsIDB4MDAsIDB4MzcsIDB4MDQsIDB4OUQsIDB4NDEsIDB4MzQsIDB4NDcsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzEsCisweDAwLCAweENELCAweDA4LCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDYyLCAweDgwLCAweDg1LCAweDAwLCAweDM0LAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMywgMHgwNCwgMHgwMiwgMHgxMCwgMHgyRCwgMHg0MCwKKzB4NUEsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjgsIDB4OUYsCisweDAwLCAweDVELCAweDAxLCAweEZFLCAweDFELCAweEYwLCAweDE1LCAweEUxLCAweDE2LCAweDAwLCAweDZGLCAweDAzLCAweDZGLAorMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHg1QSwgMHgwNCwgMHg1MywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwKKzB4MTYsIDB4MDAsIDB4N0YsIDB4MTAsIDB4NkMsIDB4NDUsIDB4MzAsIDB4NDcsIDB4QzAsIDB4NUMsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAyLCAweDA1LCAweDAwLCAweDFGLCAweDA4LCAweDdFLAorMHgwMCwgMHhGMCwgMHgwMSwgMHhBMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwNCwgMHg1RSwgMHgwMCwgMHhGMCwgMHgyMCwgMHgwOCwKKzB4MDcsIDB4MDEsIDB4MUYsIDB4ODAsIDB4N0MsIDB4MDAsIDB4RDAsIDB4MDEsIDB4QzAsIDB4MDMsIDB4MjAsIDB4MUQsIDB4MjQsCisweDdDLCAweDAwLCAweEYwLCAweDIxLCAweEQ4LCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg2NSwgMHgwMCwgMHg5MywgMHhDMSwgMHgyQywgMHg4MiwgMHhFMSwgMHgxOSwgMHhDMCwKKzB4MjUsIDB4MDksIDB4OUYsIDB4MDAsIDB4NEMsIDB4OTIsIDB4RDAsIDB4MTksIDB4QzAsIDB4NjQsIDB4MTAsIDB4OTMsIDB4MDgsCisweDNDLCAweDAyLCAweDQwLCAweDA5LCAweEM0LCAweDI3LCAweDAwLCAweDkzLCAweDgwLCAweDdDLCAweDAyLCAweDc1LCAweDA5LAorMHhDMSwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwKKzB4NjYsIDB4MDAsIDB4OTEsIDB4ODEsIDB4NEMsIDB4MDIsIDB4MTAsIDB4OTgsIDB4MDAsIDB4QTUsIDB4MDAsIDB4OUQsIDB4MTgsCisweDQ1LCAweDBBLCAweEQwLCAweEE5LCAweDUwLCAweDI0LCAweDAzLCAweDk1LCAweDAwLCAweDc0LCAweDAyLCAweDEzLCAweDA5LAorMHg0NCwgMHgyNywgMHgwMCwgMHg5MSwgMHgxQiwgMHgzNCwgMHgwNiwgMHgxMiwgMHg2OSwgMHg1MCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MzQsIDB4ODIsIDB4OTksIDB4MDgsCisweDY0LCAweDA2LCAweDEwLCAweDA5LCAweDAwLCAweEE0LCAweDAwLCAweDk5LCAweDAwLCAweDU0LCAweDQyLCAweEQyLCAweDA5LAorMHg0NSwgMHgzNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgyNywgMHg0MCwgMHg5MSwKKzB4MDAsIDB4NzQsIDB4MTIsIDB4NTEsIDB4MEQsIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIyLCAweDMwLCAweDE1LCAweEMxLCAweDAwLCAweDA0LCAweDUyLCAweDEyLCAweDE5LAorMHg0MiwgMHgyMSwgMHg4MCwgMHg4RCwgMHg0MCwgMHgwNiwgMHg4MiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg4NSwKKzB4MDAsIDB4MzQsIDB4MjIsIDB4NTAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NzAsIDB4RDIsIDB4MTAsCisweDQ4LCAweDQxLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELAorMHgzOCwgMHgwNywgMHgwMSwgMHgxQiwgMHgwMCwgMHg2QywgMHgxMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwNSwgMHgxQiwKKzB4NDAsIDB4NDgsIDB4RDAsIDB4RjAsIDB4RTEsIDB4QzEsIDB4MDQsIDB4MDAsIDB4NTMsIDB4MEEsIDB4N0MsIDB4NTgsIDB4NzEsCisweDYxLCAweEMxLCAweDg3LCAweDA1LCAweDEzLCAweDE0LCAweDM4LCAweDExLCAweDcwLCAweDQxLCAweEMwLCAweDc0LCAweEUwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgyRCwgMHg0NSwgMHhCRiwKKzB4MTQsIDB4REMsIDB4MDIsIDB4QjQsIDB4MEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4QUMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDE5LCAweEMwLCAweDJCLCAweDA4LCAweEJGLCAweDAxLCAweDdDLCAweDEyLCAweEIxLCAweDQ5LCAweEMwLCAweDI3LCAweDExLAorMHhBRiwgMHgwMCwgMHhGQywgMHg1MiwgMHhGMCwgMHg0QiwgMHhDMSwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTAsIDB4QkYsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4NTIsIDB4RjAsCisweDBCLCAweEMwLCAweDJELCAweDA1LCAweEIzLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDJDLCAweDAwLAorMHhCRiwgMHg4MCwgMHg2QywgMHgwMiwgMHgxMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMiwKKzB4MzIsIDB4MEIsIDB4RDAsIDB4NzQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweDAwLCAweDg3LCAweDAwLCAweDFCLCAweEE0LCAweDc0LCAweDA4LCAweEQwLCAweDAxLCAweDQwLCAweDg0LCAweDQ4LAorMHgxMSwgMHgyMCwgMHg0NCwgMHgwMCwgMHhEMiwgMHhBMSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgwMCwgMHg0MCwgMHg5MCwKKzB4MTAsIDB4NDEsIDB4NDAsIDB4MDQsIDB4MDEsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4NjAsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEwLCAweEExLCAweDIxLAorMHg4MSwgMHgxMCwgMHgzMCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHhENSwgMHgwMCwgMHgwNCwgMHgwQiwKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4ODAsIDB4MzAsIDB4NEEsIDB4MTEsIDB4MjgsIDB4NDEsIDB4QTIsCisweDA0LCAweDhELCAweDAwLCAweDA1LCAweDgyLCAweDE0LCAweDA4LCAweDQwLCAweDQ5LCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5OSwgMHgwNCwgMHg3NCwgMHgwMiwKKzB4RDAsIDB4NDksIDB4NDAsIDB4MjYsIDB4MDgsIDB4OTUsIDB4MDAsIDB4NDQsIDB4MDIsIDB4QzAsIDB4MDksIDB4NDAsIDB4MjUsCisweDBELCAweDlELCAweDgwLCAweDE0LCAweDAyLCAweDEwLCAweDA4LCAweDQ2LCAweDI2LCAweDAwLCAweDlELCAweDEwLCAweDQ0LAorMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHg2MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4MjAsIDB4RTUsIDB4MDYsIDB4OTMsIDB4NDAsIDB4NzgsIDB4MUEsIDB4RDEsIDB4MDksIDB4QzAsIDB4MjUsCisweDAwLCAweDk3LCAweDBGLCAweDQ1LCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweEE0LCAweDAwLCAweDhGLCAweDgxLCAweDdFLAorMHgwMiwgMHgzNCwgMHgwOSwgMHhEMCwgMHgyNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHg0OSwgMHhDMCwKKzB4MTUsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsIDB4MjQsCisweDAwLCAweDlGLCAweEMwLCAweDdDLCAweDEyLCAweEYwLCAweDA5LCAweEM4LCAweDI1LCAweDAwLCAweDlCLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwNSwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjUsIDB4MDAsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4NDksIDB4QzEsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDEwLCAweDc4LAorMHgwOCwgMHhGMCwgMHgwMSwgMHhDMSwgMHgwMSwgMHgwNCwgMHgxRiwgMHgwNCwgMHg3QywgMHg5MCwgMHhCMCwgMHgwMSwgMHhDMCwKKzB4ODQsIDB4MDAsIDB4MUYsIDB4MTAsIDB4NEMsIDB4MDAsIDB4RjEsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MTAsIDB4MDcsIDB4MTAsCisweDNDLCAweDA0LCAweDMwLCAweDIxLCAweEMwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhEQywgMHgwMSwgMHg3RCwgMHgwNywgMHg3NCwgMHgwMSwgMHgxMCwgMHgyNiwgMHg0MCwKKzB4MUYsIDB4MTksIDB4NkQsIDB4MDAsIDB4RjQsIDB4MDksIDB4MTAsIDB4MDcsIDB4NDAsIDB4REMsIDB4MDIsIDB4N0QsIDB4MDMsCisweDQ0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDE3LCAweDAwLCAweDcxLCAweDQ1LCAweEY0LCAweDQxLCAweDExLCAweDI3LAorMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwKKzB4RjYsIDB4MDEsIDB4Q0QsIDB4MDMsIDB4MzQsIDB4MjIsIDB4NTgsIDB4MkMsIDB4NDgsIDB4NzMsIDB4MDAsIDB4Q0MsIDB4MDAsCisweDM0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDBBLCAweDMyLCAweDAzLCAweEQwLCAweDBDLAorMHg0MCwgMHgzMywgMHg4MCwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwNCwgMHg5MCwgMHhBRCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4MDAsIDB4NkQsIDB4MDAsCisweEI0LCAweDA3LCAweDVBLCAweDJBLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEIwLCAweDA3LCAweDUyLCAweDBBLAorMHg0MCwgMHg5OCwgMHgwMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgxMywgMHhEMCwgMHg0RSwgMHg0MCwgMHg3QiwgMHg4MSwgMHhFMSwKKzB4MDAsIDB4QjQsIDB4MDIsIDB4OTAsIDB4MDQsIDB4NDQsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDc5LCAweDA4LCAweEVGLCAweDAxLCAweEJDLCAweDg3LCAweDcwLCAweDFFLAorMHhDMCwgMHg1QiwgMHgwMCwgMHhFRSwgMHgwMSwgMHhCQywgMHgwNiwgMHhGMCwgMHgxRiwgMHhDMCwgMHg3OCwgMHgwMCwgMHhCRiwKKzB4MDEsIDB4OUMsIDB4MDcsIDB4RjAsIDB4QkUsIDB4QzQsIDB4N0YsIDB4MjEsIDB4RTcsIDB4MDEsIDB4RkMsIDB4MDQsIDB4QjAsCisweDFFLCAweEQwLCAweDUwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhCMiwgMHgzNSwgMHgwMCwgMHg1RiwgMHg2MCwgMHgzQywgMHgwMywgMHgzOCwgMHgwMSwgMHhDOCwgMHgwNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4M0MsIDB4MDAsIDB4QjAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MkIsIDB4RjAsCisweDZELCAweEM4LCAweEI3LCAweDIwLCAweDlELCAweDAwLCAweDdDLCAweDgyLCAweDcxLCAweDA1LCAweEMwLCAweDQzLCAweDYwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHg3RCwgMHgwMiwgMHhGRiwKKzB4ODEsIDB4Q0MsIDB4MTcsIDB4NzEsIDB4MTcsIDB4QzAsIDB4NkYsIDB4MDIsIDB4RkYsIDB4ODEsIDB4RkMsIDB4ODUsIDB4RjAsCisweDlGLCAweDQwLCAweDc4LCAweDAyLCAweEIzLCAweDI5LCAweEZFLCAweDJGLCAweEIwLCAweDFGLCAweEUwLCAweEZGLCAweDA0LAorMHg3MywgMHgwOSwgMHhGQywgMHgyNywgMHhGMSwgMHg1RiwgMHhDMCwgMHgxQiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MTksIDB4MjYsIDB4NkQsIDB4MDgsIDB4QUMsIDB4ODMsIDB4RDAsCisweDIyLCAweDQwLCAweDhCLCAweDAwLCAweDJELCAweDAwLCAweEI0LCAweDA4LCAweEQwLCAweDFBLCAweDQwLCAweDk4LCAweDAwLAorMHhBMSwgMHgwMSwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHhDMCwgMHgzOSwgMHgwMSwgMHhFQiwgMHgwMCwgMHgzNCwgMHgwNywKKzB4RDAsIDB4MEEsIDB4NDAsIDB4NTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDQ4LCAweDA4LCAweDM5LCAweDE4LCAweEZELCAweDAwLCAweEE0LCAweDEzLCAweEQwLCAweDAyLCAweDQwLCAweDBCLCAweDAwLAorMHhFRCwgMHgxMCwgMHhCNCwgMHgyMCwgMHhEMCwgMHgwRSwgMHg0MCwgMHgyQiwgMHg0MCwgMHgyMSwgMHgwMCwgMHhCNCwgMHg4MywKKzB4OTEsIDB4MEUsIDB4NDAsIDB4MzksIDB4MTAsIDB4NjEsIDB4MTAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4NEUsIDB4NDAsIDB4MjMsCisweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDIxLCAweDAwLAorMHgxRCwgMHgwMSwgMHgyNiwgMHgwNywgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwMywgMHgzNCwgMHg4MCwKKzB4RDAsIDB4MDAsIDB4NDAsIDB4QTMsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDgsIDB4MzEsCisweDgwLCAweDg1LCAweDAwLCAweDM0LCAweDgxLCAweEQwLCAweDI5LCAweDQwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgwNCwgMHgwMCwgMHg5RiwgMHgwMSwgMHg2NCwgMHgwQiwKKzB4NzEsIDB4MDksIDB4QzAsIDB4MjcsIDB4OTAsIDB4MUYsIDB4MDMsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MjcsCisweDIwLCAweEQzLCAweDExLCAweEZDLCAweDAzLCAweEIwLCAweDBGLCAweEMwLCAweDNELCAweDAwLCAweDgxLCAweDAxLCAweDdDLAorMHgwMSwgMHhEMCwgMHgyOSwgMHhDMCwgMHg1NywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MEQsIDB4MDAsIDB4ODcsIDB4MDEsIDB4OUYsIDB4MDgsIDB4N0MsIDB4MjMsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjcsCisweDAwLCAweDFGLCAweDMyLCAweDNFLCAweDBBLCAweEYwLCAweDAxLCAweDQwLCAweDE0LCAweEExLCAweDlGLCAweDAwLCAweDcwLAorMHgwMywgMHhEMCwgMHgwRCwgMHhDOCwgMHgzNSwgMHg0MCwgMHg5QiwgMHgxMCwgMHg3NCwgMHgwMSwgMHhFMCwgMHgyMSwgMHhDMCwKKzB4MzcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODksIDB4MDgsIDB4MEIsCisweDAwLCAweEJCLCAweDAwLCAweDhDLCAweDQzLCAweEIwLCAweDBCLCAweEM0LCAweDJCLCAweDAwLCAweEYzLCAweDAwLCAweEZDLAorMHgwMiwgMHgzMiwgMHgwMSwgMHhDNCwgMHgyRiwgMHgwMSwgMHhCRiwgMHg0MCwgMHhFQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDNCwKKzB4M0IsIDB4MDAsIDB4MzcsIDB4MDUsIDB4OTQsIDB4ODEsIDB4MzMsIDB4MDMsIDB4ODEsIDB4MDQsIDB4MjgsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweEM2LCAweDIxLCAweDkxLCAweDA3LCAweDQ0LAorMHg4MywgMHhCMCwgMHgzMSwgMHg0MCwgMHhFNywgMHgwMCwgMHhEMSwgMHgwNiwgMHg3NCwgMHgwNCwgMHgxMCwgMHgzMSwgMHg0OCwKKzB4NzcsIDB4MTAsIDB4OUMsIDB4MDEsIDB4NzQsIDB4MDMsIDB4NzEsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MTEsIDB4MzIsCisweDQ0LCAweDBCLCAweDEwLCAweDMxLCAweDQwLCAweDg1LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg2NCwgMHgwMCwgMHgxOSwgMHgwMSwgMHg1NCwgMHgwNywgMHg5MCwgMHgxOSwgMHgwMCwKKzB4NjYsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MTMsIDB4NDEsIDB4MDcsIDB4MDAsIDB4QjksIDB4MDEsCisweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDU1LCAweDAwLCAweDU0LCAweDQ3LCAweDUwLCAweDE5LAorMHg0MCwgMHgwNSwgMHgwOCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MTQsIDB4MDMsIDB4OTAsIDB4MDgsIDB4NjIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDM0LCAweDAyLCAweDE0LCAweDQwLCAweDQwLCAweDEzLCAweDAwLCAweDhELCAweDA0LCAweDM0LCAweDAzLCAweDUwLCAweDBDLAorMHg0MCwgMHgzMywgMHgwOCwgMHhDMSwgMHgwMCwgMHgxNCwgMHgyMCwgMHgxMCwgMHgwOCwgMHg0MiwgMHg0MSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MjYsIDB4MDgsIDB4OUIsIDB4MDAsCisweDVFLCAweDAzLCAweEIxLCAweDA5LCAweEMwLCAweDI3LCAweDQwLCAweEQxLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDQxLAorMHhDMCwgMHgwNywgMHgxMCwgMHgxRiwgMHgxQywgMHhFQywgMHgwMywgMHhGMSwgMHgwRiwgMHhFNCwgMHgzQiwgMHgwMCwgMHg1NywKKzB4MDAsIDB4NUMsIDB4MTIsIDB4MzQsIDB4MDEsIDB4QzAsIDB4MDUsIDB4NjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweEE4LCAweDJGLCAweDAwLCAweEFGLCAweDAwLCAweEVDLCAweDAzLCAweDcwLCAweDAzLAorMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHhDMSwgMHhDMSwgMHgwRiwgMHgwNCwgMHgxRiwKKzB4MDQsIDB4RkMsIDB4MDMsIDB4NzIsIDB4MEYsIDB4QzQsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4NkMsIDB4MzAsIDB4RjAsCisweDAzLCAweEM0LCAweDE3LCAweDYyLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBMCwgMHgyRCwgMHgxMSwgMHhCRiwgMHgwMCwgMHhGQywgMHgxMywgMHhCMiwgMHg5MywgMHhDOCwgMHgzRCwgMHgxMSwgMHgxMywKKzB4MDgsIDB4REMsIDB4MjIsIDB4MzIsIDB4NEYsIDB4QzgsIDB4MEYsIDB4MjAsIDB4N0IsIDB4NDEsIDB4RUMsIDB4MDMsIDB4RjAsCisweDE3LCAweEMwLCAweDNDLCAweDAwLCAweEJGLCAweDAxLCAweEVDLCAweDAwLCAweDMwLCAweDAzLCAweEM0LCAweDBDLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0NywgMHgwMiwgMHg5QywKKzB4OEMsIDB4RjQsIDB4MjcsIDB4MDQsIDB4MDksIDB4NEMsIDB4N0QsIDB4MjIsIDB4MUQsIDB4MDQsIDB4NzQsIDB4MTIsIDB4NTAsCisweEFGLCAweDQyLCAweDA3LCAweDAwLCAweDk5LCAweDgxLCAweDQ0LCAweDBCLCAweEQwLCAweDA5LCAweDQwLCAweDNDLCAweDEwLAorMHg5RCwgMHg0MCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgxMSwgMHg0MCwgMHgwQywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MjAsIDB4MjEsIDB4MDgsIDB4MEQsIDB4NTAsIDB4MzQsIDB4MDMsIDB4MTgsCisweDUxLCAweDQ0LCAweDMxLCAweDAwLCAweDBELCAweDIwLCAweDc0LCAweDAyLCAweDEwLCAweDBDLCAweDY0LCAweDAxLCAweDAwLAorMHg4OSwgMHgwMCwgMHgyNCwgMHgwQiwgMHhEMCwgMHgwMSwgMHg1MCwgMHgzMCwgMHgwMCwgMHg5RCwgMHgwMCwgMHgyNCwgMHgwMCwKKzB4MTAsIDB4MDAsIDB4NDAsIDB4NEMsIDB4ODAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEE4LCAweDQ3LCAweDgwLCAweDFELCAweDUxLCAweDc0LCAweDAzLCAweDEwLCAweDExLCAweDQwLCAweDM1LCAweDAwLAorMHgzRCwgMHgwMiwgMHhGNCwgMHgwMiwgMHg1MCwgMHgwRCwgMHgwMCwgMHg0RiwgMHgwOCwgMHg4OSwgMHgwOCwgMHg0NCwgMHgwMywKKzB4RDIsIDB4MTksIDB4MDAsIDB4M0MsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MTEsIDB4NDIsIDB4MEMsCisweEEwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDY3LCAweDAwLAorMHg5RiwgMHgwMywgMHg3QywgMHgwMywgMHgzMCwgMHgxOCwgMHhDQywgMHgzNSwgMHgxOCwgMHgxQiwgMHgwMSwgMHg1RSwgMHgwNiwKKzB4MjAsIDB4MEQsIDB4QzAsIDB4QzcsIDB4MDAsIDB4REIsIDB4MDAsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MUMsIDB4QzAsIDB4MzQsCisweDIwLCAweENGLCAweDAxLCAweDZDLCAweDg0LCAweDMwLCAweDExLCAweEMwLCAweDAwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHgyRCwgMHgwMCwgMHhCRiwgMHg4MCwgMHhCQywgMHgwMywKKzB4RjAsIDB4MEIsIDB4QzAsIDB4M0UsIDB4ODAsIDB4MUQsIDB4MDMsIDB4RkMsIDB4MjYsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsCisweDAwLCAweEJGLCAweDAxLCAweEZDLCAweDAzLCAweEYyLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLAorMHgwMCwgMHhGNCwgMHgwOSwgMHhEMCwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDgsIDB4MjUsIDB4MTgsIDB4OTMsIDB4MDEsIDB4N0MsIDB4QTMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NzcsCisweDAwLCAweDFCLCAweDAyLCAweDRDLCAweDQyLCAweEYwLCAweDBELCAweEMwLCAweDg3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMywgMHgzMCwgMHgwOSwgMHg4MCwgMHgzNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMSwKKzB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUIsIDB4QTAsIDB4NjQsCisweDA0LCAweDkxLCAweDAyLCAweEY0LCAweDJGLCAweEQwLCAweDAxLCAweDQwLCAweEJGLCAweDAwLCAweDExLCAweDgwLCAweDQ1LAorMHg0NywgMHhEMSwgMHgwRiwgMHg0NCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHhGNCwgMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwKKzB4M0YsIDB4MDAsIDB4NUQsIDB4MDAsIDB4MzQsIDB4NDQsIDB4MTAsIDB4MzgsIDB4NTgsIDB4NkMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDIwLCAweDAwLCAweDYwLCAweDA4LCAweDMwLCAweDM2LAorMHgwRiwgMHhEOCwgMHgwMCwgMHg0MCwgMHgzMywgMHgwMSwgMHgwOSwgMHgwMCwgMHg1MCwgMHgwRSwgMHhEMCwgMHg5QywgMHgyMiwKKzB4NDMsIDB4MDIsIDB4NEMsIDB4ODAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDYsCisweDM0LCAweDAwLCAweDE0LCAweEEwLCAweDQwLCAweDRDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwRiwgMHgwMCwgMHg1OCwgMHgwMiwgMHhFOSwgMHg4MSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxQSwgMHg0MCwKKzB4N0IsIDB4MDAsIDB4MjEsIDB4MDksIDB4ODQsIDB4MDYsIDB4RDEsIDB4OUUsIDB4NDAsIDB4NUIsIDB4MDAsIDB4QUQsIDB4MDEsCisweEI0LCAweDA3LCAweDEwLCAweDFBLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDQxLCAweEI0LCAweDA3LCAweDE4LCAweDlBLAorMHg0MCwgMHgzQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxQSwKKzB4MzAsIDB4MDAsIDB4NEIsIDB4MDgsIDB4M0MsIDB4MDMsIDB4RjAsIDB4ODAsIDB4QzAsIDB4MzMsIDB4MDAsIDB4MEIsIDB4MDUsCisweDBDLCAweDAyLCAweEYwLCAweDBDLCAweEMwLCAweDQzLCAweDAxLCAweENGLCAweDAwLCAweDdDLCAweDIzLCAweDM0LCAweDAwLAorMHg0MCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMSwgMHgzMCwgMHgwNCwgMHhDOCwgMHg0OCwgMHg2OCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzAsIDB4MTksIDB4MDAsIDB4RjAsIDB4NjAsCisweEZDLCAweDYzLCAweEYwLCAweDBGLCAweEMwLCAweDNCLCAweDAyLCAweEZGLCAweDA4LCAweEYwLCAweDIzLCAweEYwLCAweDBGLAorMHhDNCwgMHgxRiwgMHgwMiwgMHhCRiwgMHgwMCwgMHhGQywgMHg4MywgMHhGMCwgMHgwQiwgMHhDMCwgMHhCRiwgMHgxMCwgMHhGRiwKKzB4MDAsIDB4QkMsIDB4MDMsIDB4RjEsIDB4MEQsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDE3LCAweDEwLCAweDUzLCAweDAwLCAweDc0LCAweDVGLCAweDM0LCAweDA5LAorMHhDMCwgMHgzNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMiwgMHgzMSwgMHg5RCwgMHg4MCwgMHg3NCwgMHgwMCwgMHhEMywKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4ODIsIDB4Q0YsIDB4MDAsIDB4MkMsIDB4MDIsIDB4MzAsCisweDE1LCAweEQwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAorMHg4QSwgMHgzOSwgMHgwMCwgMHhFMSwgMHgwMCwgMHgzNCwgMHgxMywgMHgxMCwgMHgwQSwgMHg0MCwgMHhCQiwgMHgwMywgMHg4RCwKKzB4ODAsIDB4ODQsIDB4MDIsIDB4MTIsIDB4OEMsIDB4NDIsIDB4M0MsIDB4MDgsIDB4QTEsIDB4MDAsIDB4QjQsIDB4MTMsIDB4RDAsCisweDBBLCAweDQwLCAweDNBLCAweDgwLCAweEVELCAweDAwLCAweDg0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDRDLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHg0MCwgMHg2OSwKKzB4MDEsIDB4QjQsIDB4MTcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4NkQsIDB4MTEsIDB4OTQsIDB4NDYsIDB4OTAsCisweDVFLCAweDQwLCAweDY4LCAweDAwLCAweEUxLCAweDAxLCAweEI0LCAweDM3LCAweDkwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLAorMHg3RCwgMHg2MSwgMHhBNCwgMHgwNywgMHgxNCwgMHgxNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4QjMsIDB4MDAsIDB4QzksIDB4MDEsIDB4MzQsIDB4MDMsIDB4NTAsCisweDhDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweEMzLCAweDU0LCAweDA3LCAweDkwLCAweDBDLCAweDUwLCAweDcwLCAweDAxLAorMHg4MSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHg0OCwgMHg0MCwgMHgzNiwgMHgwMCwgMHg0RCwgMHgwOSwgMHgwNCwgMHgwMywKKzB4MTAsIDB4MUMsIDB4NDEsIDB4NTgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE3LCAweEEwLCAweDFGLCAweDIwLCAweDdCLCAweDg1LCAweDdDLCAweDAxLCAweDc4LCAweDE3LCAweEM2LCAweDE3LCAweDA4LAorMHg3RiwgMHgwMywgMHg1QywgMHgwNSwgMHhCNiwgMHgwNSwgMHhDMCwgMHg1QywgMHgwMSwgMHg3MywgMHgwMiwgMHg3QywgMHgwMSwKKzB4QjAsIDB4MzcsIDB4QzEsIDB4MTcsIDB4MDAsIDB4N0YsIDB4MDksIDB4QUMsIDB4MDEsIDB4MzAsIDB4NzcsIDB4QzAsIDB4NUMsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDA1LCAweDI0LAorMHgxNywgMHg0NiwgMHg3QywgMHgwMCwgMHhBMCwgMHgwMSwgMHhFMCwgMHg4MywgMHgyMCwgMHgxRSwgMHhBMCwgMHg2QywgMHgwMCwKKzB4NzAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDQsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDYsCisweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDA0LCAweEYwLCAweDAxLCAweEMwLCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhBMSwgMHgwMCwgMHg5MywgMHgwOCwgMHg3QywgMHg4NiwKKzB4RjAsIDB4MDksIDB4QzEsIDB4MjUsIDB4MDgsIDB4OTMsIDB4MTAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4NjcsCisweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAwLCAweDQ4LAorMHgxNiwgMHgzMCwgMHg0OSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OTUsIDB4MDMsIDB4NzQsIDB4NjYsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsCisweDIwLCAweDkxLCAweDAwLCAweDQ0LCAweDBBLCAweDEwLCAweDM5LCAweDQ0LCAweEE3LCAweDAyLCAweDhELCAweDIwLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg4NSwgMHg0MCwgMHg0NCwgMHg0MiwgMHgxMCwgMHg0OSwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MzQsCisweDAwLCAweDkxLCAweDgyLCAweDc0LCAweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDY3LCAweDAwLCAweDgxLCAweDAwLCAweDU0LAorMHgwQSwgMHgxMCwgMHg0OSwgMHg0OSwgMHhCNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NTUsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweEE1LCAweDg1LCAweDE0LCAweDM0LAorMHg4MiwgMHhEMCwgMHg4OCwgMHg0MCwgMHgzMywgMHg2MCwgMHg4MSwgMHg0QywgMHgwNCwgMHgzMiwgMHgxOCwgMHgwOCwgMHg0MCwKKzB4MjMsIDB4MDEsIDB4OUQsIDB4MDIsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4ODUsIDB4MDAsCisweDE0LCAweEQyLCAweDEwLCAweDQ4LCAweDQxLCAweDQzLCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNywgMHgwMSwgMHgxMywgMHgyNCwgMHg3QywgMHg1MCwgMHhGMCwgMHgyMSwgMHhDNCwKKzB4MDUsIDB4MDUsIDB4MTMsIDB4MDMsIDB4MDksIDB4MEMsIDB4MzAsIDB4RTEsIDB4QzEsIDB4QzcsIDB4MDIsIDB4MUYsIDB4MDAsCisweDRELCAweDc4LCAweEYwLCAweEExLCAweEM4LCAweEM3LCAweDBBLCAweDUzLCAweDAwLCAweDVDLCAweDEwLCAweDMyLCAweDQxLAorMHhDMCwgMHg3NywgMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwKKzB4MkIsIDB4MDAsIDB4QkYsIDB4MTQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4NEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MEMsCisweEZDLCAweDMyLCAweEY0LCAweDE5LCAweEMyLCAweDZGLCAweDAyLCAweEJELCAweDAxLCAweDdDLCAweDA2LCAweEYwLCAweDFCLAorMHhDMCwgMHg2NywgMHgwMiwgMHhGRiwgMHgxNCwgMHhFNCwgMHg1MiwgMHhGNCwgMHgwQiwgMHhDMCwgMHg3NywgMHg0MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTgsIDB4N0YsIDB4MDQsIDB4QkYsIDB4MDIsCisweEZDLCAweDAyLCAweEYwLCAweDI5LCAweEMwLCAweDJELCAweDIwLCAweDlGLCAweDAwLCAweEZDLCAweDBBLCAweDMwLCAweDRCLAorMHhDMCwgMHgyQywgMHgwMCwgMHg5MywgMHgwMiwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCMywKKzB4MDAsIDB4RkMsIDB4MEEsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NzQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDE3LCAweDAwLCAweDFELCAweDAyLCAweDc0LCAweDI4LCAweEQwLCAweDAwLAorMHg0OCwgMHg4NywgMHgwMiwgMHgxRCwgMHgwNCwgMHg1QywgMHgxMCwgMHgxNCwgMHhBMSwgMHg1MCwgMHgwNCwgMHgwMCwgMHgxNSwKKzB4MDEsIDB4NzQsIDB4MjgsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDUsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NzQsIDB4MTAsIDB4MTAsCisweDAxLCAweEMwLCAweDYyLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgwMCwgMHgyMSwgMHgyMCwgMHg4RCwgMHg4NiwgMHgzNCwgMHgwMiwgMHhDMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwKKzB4MTAsIDB4MzAsIDB4MTIsIDB4MTgsIDB4MDgsIDB4NDAsIDB4MjQsIDB4MDAsIDB4ODEsIDB4MDEsIDB4MzQsIDB4MDIsIDB4MTQsCisweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDEzLCAweDEwLCAweDA4LCAweDQ0LCAweDQ4LCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwgMHhERCwKKzB4MEEsIDB4NzQsIDB4MDIsIDB4QzAsIDB4MDksIDB4NDAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDIsIDB4MTQsIDB4MjIsIDB4MTAsCisweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDk1LCAweDAxLCAweDM0LCAweDAyLCAweDEwLCAweDQ5LCAweDQ0LCAweDI1LCAweDAwLAorMHg5OSwgMHgwMCwgMHgzNCwgMHgwNiwgMHgxNCwgMHg0OSwgMHg0MCwgMHg2MiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MEEsIDB4MjUsIDB4MTAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RTAsCisweDI5LCAweEMxLCAweDI3LCAweDAwLCAweDlGLCAweDAyLCAweDdDLCAweDAyLCAweDMwLCAweDA4LCAweEM2LCAweDY0LCAweDAyLAorMHhCMywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwMiwgMHg3QywgMHgwNiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4MTQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE2LCAweDAwLCAweEE1LCAweDIwLCAweDlGLCAweDIxLCAweDdDLCAweDAyLCAweEYwLCAweDM5LCAweEMwLCAweDI3LCAweDA0LAorMHg5RiwgMHgwNCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjIsIDB4MTksIDB4QzAsIDB4MjMsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MDgsIDB4QzAsIDB4NUIsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLAorMHgxRiwgMHgwNCwgMHg2QywgMHgwMCwgMHg3MCwgMHgyMSwgMHhDMCwgMHgwNCwgMHgwMiwgMHgxRiwgMHgwMiwgMHg3QywgMHgwMCwKKzB4MzEsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTMsIDB4NDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsCisweDA4LCAweDEzLCAweDBBLCAweDdDLCAweDA0LCAweDMwLCAweEMxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhEQywgMHgwRSwgMHg3RCwgMHgwNiwgMHhGNCwgMHg0MSwKKzB4MTAsIDB4MDUsIDB4ODAsIDB4NUUsIDB4MDAsIDB4NUQsIDB4NjAsIDB4RjQsIDB4NkQsIDB4MTAsIDB4MzcsIDB4NDAsIDB4MUMsCisweDAwLCAweDUxLCAweDAwLCAweDZDLCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDE3LCAweDAwLCAweDc1LCAweDQwLCAweEY0LAorMHgwMSwgMHgxMCwgMHgxNywgMHg0MCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QTAsIDB4RTIsIDB4MDAsIDB4Q0QsIDB4NDEsIDB4MjQsIDB4MTcsIDB4ODAsIDB4MEMsIDB4NTgsIDB4RjAsCisweDIwLCAweENELCAweDAwLCAweDM0LCAweDBGLCAweDkwLCAweDJDLCAweDQxLCAweDc0LCAweDA0LCAweEMxLCAweDAwLCAweDA0LAorMHgwMywgMHhEMSwgMHgwRCwgMHg0MCwgMHgzMywgMHgwMCwgMHg4MSwgMHgxMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgyQywgMHg0MCwKKzB4NDMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODgsIDB4MjksCisweDgwLCAweEVELCAweDgwLCAweEI0LCAweDA3LCAweDk0LCAweERFLCAweDQwLCAweDI4LCAweDIwLCAweEVDLCAweDA4LCAweDM0LAorMHgwMywgMHg5MCwgMHgyQywgMHg1MCwgMHgyMCwgMHgwNCwgMHhGMSwgMHg0NSwgMHhBNCwgMHgyMywgMHhEMCwgMHgwRSwgMHg0MCwKKzB4M0IsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTIsIDB4MEEsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDc5LCAweDAwLCAweEVGLCAweDAxLCAweEFDLAorMHgwNSwgMHhCMSwgMHg1RSwgMHg0MSwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwNSwgMHhCQywgMHgwNSwgMHhCMCwgMHgxQSwgMHhDMCwKKzB4NzgsIDB4MDAsIDB4RjMsIDB4NDMsIDB4OEMsIDB4NTcsIDB4RjAsIDB4MUUsIDB4QzMsIDB4NzMsIDB4MDAsIDB4QTMsIDB4MDEsCisweEJDLCAweDA3LCAweDM0LCAweDEyLCAweEMwLCAweDUzLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHgzNSwgMHgwMCwgMHg1RiwgMHg0MCwgMHgzQywgMHgwMCwgMHgzMSwgMHg0RCwgMHhDOCwKKzB4MjcsIDB4MDgsIDB4REYsIDB4MTAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4MDksIDB4QzgsIDB4MzcsIDB4NDAsIDB4REYsIDB4MDAsCisweDdDLCAweDEzLCAweEYwLCAweENELCAweEMwLCAweEI3LCAweDAyLCAweDFGLCAweDAwLCAweDdDLCAweDAzLCAweEI0LCAweDA5LAorMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwKKzB4NkQsIDB4MDAsIDB4RkYsIDB4MDEsIDB4Q0MsIDB4MDYsIDB4RjAsIDB4OUYsIDB4QzAsIDB4NUYsIDB4MDIsIDB4RkYsIDB4MDksCisweENDLCAweDI3LCAweEYwLCAweDFCLCAweEMwLCAweDdELCAweDAwLCAweEVGLCAweDQxLCAweENDLCAweDg3LCAweDcwLCAweDFGLAorMHhDMCwgMHhGQywgMHgwMCwgMHhFMywgMHgwMSwgMHhDQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDOCwgMHgxQiwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MjksIDB4MjAsIDB4RkQsIDB4MDAsCisweEFDLCAweDFBLCAweEQyLCAweENFLCAweDQwLCAweDJCLCAweDAwLCAweEZELCAweDAwLCAweDg0LCAweDA0LCAweEQwLCAweDBGLAorMHhDMCwgMHgyMCwgMHgwMSwgMHhFRCwgMHgyNSwgMHhDNCwgMHgwNywgMHg1MCwgMHgwRSwgMHhDMSwgMHgzQSwgMHgyMCwgMHg2QiwKKzB4MDAsIDB4OTQsIDB4MDMsIDB4QjAsIDB4MEEsIDB4NDAsIDB4NTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDI5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAyLCAweEQyLCAweDBFLAorMHg2MCwgMHgwQiwgMHgyMCwgMHhFRCwgMHgwMCwgMHg5NiwgMHgwMywgMHhEMCwgMHgwMiwgMHg0MCwgMHgxQiwgMHg4MCwgMHhGRCwKKzB4MDUsIDB4QzQsIDB4MDMsIDB4MTEsIDB4OEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RjEsIDB4MDAsIDB4ODQsIDB4NDMsIDB4MTAsCisweDJFLCAweDQwLCAweDIzLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgyOCwgMHhGMSwgMHgwNCwgMHg4RCwgMHgxMywgMHgzNCwgMHgwMiwgMHhEMCwgMHgyRCwgMHg0MCwgMHgyMywgMHgwMCwgMHhDOSwKKzB4MDMsIDB4NTQsIDB4MDQsIDB4RDAsIDB4MDAsIDB4NDAsIDB4QzAsIDB4MTAsIDB4Q0QsIDB4MDQsIDB4MDQsIDB4MDMsIDB4NTgsCisweDNDLCAweDQxLCAweDMyLCAweDAwLCAweDU5LCAweDAwLCAweDE0LCAweDA3LCAweDkxLCAweDBDLCAweDQwLCAweDBCLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgyNSwgMHgxMCwgMHgxRiwKKzB4MTIsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MkYsIDB4QzAsIDB4MjcsIDB4MDAsIDB4RkYsIDB4MDUsIDB4NUMsIDB4NDYsIDB4RjAsCisweDA1LCAweEMwLCAweDA3LCAweDAxLCAweERGLCAweDA3LCAweENELCAweDAzLCAweDMyLCAweDBGLCAweDQwLCAweDNDLCAweDAwLAorMHg1MywgMHgwMCwgMHg0QywgMHgwNywgMHgzMCwgMHgyNSwgMHhDMCwgMHg1NywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEQsIDB4MDgsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDAsIDB4NjQsIDB4MDgsIDB4RjAsCisweENELCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDZDLCAweDAyLCAweEYwLCAweDA1LCAweEMwLCAweDg3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhFMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywKKzB4RjAsIDB4MDEsIDB4QzIsIDB4MzcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDg5LCAweDA5LCAweDNGLCAweDEwLCAweDJGLCAweDAwLCAweENDLCAweDgwLCAweEYwLCAweDBGLCAweEMwLCAweDA4LCAweDAwLAorMHhGMywgMHgxMCwgMHhGQywgMHgyMCwgMHgzMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwNCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMywKKzB4MTAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MTAsIDB4RkYsIDB4MDEsIDB4NEMsIDB4NjUsIDB4RjAsIDB4OTcsIDB4QzAsIDB4MDcsCisweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweEI2LCAweDAwLAorMHgxRCwgMHgyMSwgMHg1NCwgMHgwNCwgMHhEMCwgMHgwRCwgMHg0MCwgMHhDNCwgMHgwMCwgMHhEMSwgMHg0MCwgMHg3NCwgMHgwMCwKKzB4MTAsIDB4MjEsIDB4NDAsIDB4QzYsIDB4MDEsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzUsCisweDAwLCAweERELCAweDBCLCAweDU0LCAweDAwLCAweEQwLCAweDJELCAweDQ0LCAweDg3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgyNCwgMHgxNCwgMHgxRCwgMHgwMSwgMHg0NiwgMHgwNiwKKzB4RDAsIDB4MEQsIDB4NDAsIDB4NDQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MTMsIDB4NDEsIDB4NEYsCisweDgwLCAweERELCAweDAwLCAweEY0LCAweDAzLCAweDUwLCAweDBGLCAweDQwLCAweDNGLCAweDAwLCAweDlELCAweDEwLCAweDQ0LAorMHgwMywgMHg5MCwgMHgyNSwgMHg0MCwgMHgwNywgMHgwOCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjIsIDB4MjAsIDB4MDAsIDB4OEQsIDB4ODAsIDB4MTQsIDB4MDAsIDB4RDgsIDB4MEMsIDB4NDAsIDB4MjAsCisweDAwLCAweEMxLCAweDIyLCAweDM0LCAweDQwLCAweDE0LCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweENELCAweDA0LCAweDM0LAorMHgxMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgxNCwgMHgwNywgMHhEMCwgMHgwMCwgMHg0MCwKKzB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjgsIDB4MDYsCisweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDA0LCAweDAwLCAweEYxLCAweDAyLCAweDc0LAorMHgxMywgMHgzMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMiwgMHhGRiwgMHgxMCwgMHhGQywgMHg1MywgMHg3MCwgMHgwRSwgMHhDMCwKKzB4M0IsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDcsIDB4NjAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweEIwLCAweDFGLCAweDAwLCAweEJGLCAweDgwLCAweEY4LAorMHgwMCwgMHhGMCwgMHgwRiwgMHhDMiwgMHgwRiwgMHgwMCwgMHhGRiwgMHgyMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwKKzB4MEUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjEsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4QkYsIDB4MDAsCisweEZDLCAweDgzLCAweEYwLCAweDBGLCAweEMwLCAweDE3LCAweDYxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwOSwgMHhGQywgMHgwMiwgMHgzMCwgMHg0QiwgMHhDMSwKKzB4M0YsIDB4MTMsIDB4RkYsIDB4MDAsIDB4Q0MsIDB4MTMsIDB4NzAsIDB4ODMsIDB4QzAsIDB4M0MsIDB4NDAsIDB4RjMsIDB4MDAsCisweEJDLCAweDA2LCAweEIwLCAweDBGLCAweEMwLCAweDJDLCAweDE3LCAweDNCLCAweDBDLCAweENDLCAweDAwLCAweEIwLCAweDAzLAorMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgxOCwKKzB4MzcsIDB4MDEsIDB4Q0QsIDB4MDQsIDB4NzQsIDB4RUEsIDB4MTAsIDB4NjksIDB4QzgsIDB4QkQsIDB4MjIsIDB4RkQsIDB4REUsCisweEQ0LCAweDJGLCAweDEwLCAweDAxLCAweDQwLCAweEZDLCAweDAwLCAweEQxLCAweDAyLCAweDQ0LCAweDg3LCAweDEwLCAweDFGLAorMHg0MCwgMHhBNSwgMHgwMSwgMHgxMSwgMHgwRSwgMHg0NCwgMHgwOCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwRiwgMHg2MCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzMsIDB4MDQsIDB4Q0QsIDB4MDAsCisweDM0LCAweDEwLCAweDUwLCAweDAwLCAweDQxLCAweDMzLCAweDA5LCAweENELCAweDQ0LCAweDE0LCAweDAzLCAweDEwLCAweDUwLAorMHg2MCwgMHhCMSwgMHgwMCwgMHhDNSwgMHgwMiwgMHgxNCwgMHg4MiwgMHg5MCwgMHgwRCwgMHg2MCwgMHgzNCwgMHgwMSwgMHhDOSwKKzB4MDAsIDB4MDQsIDB4MDgsIDB4MTIsIDB4MDAsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDM1LCAweDAwLCAweERELCAweDA0LCAweDM2LCAweDBFLCAweDU0LCAweDE5LAorMHg0MiwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgxMiwgMHg0MCwgMHgzNSwgMHgwMCwgMHhENSwKKzB4MjAsIDB4NTUsIDB4MDMsIDB4MTAsIDB4MEYsIDB4NDAsIDB4NTUsIDB4MDAsIDB4QzEsIDB4MTgsIDB4NDUsIDB4NjMsIDB4MTAsCisweDExLCAweDQwLCAweDBGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHhBOCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg3QywgMHgwNiwgMHg3MCwgMHgzMSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MTEsIDB4NDAsIDB4MzUsIDB4MDAsIDB4RDYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4QjAsCisweDBELCAweEMwLCAweDY0LCAweDgwLCAweDFCLCAweDAzLCAweDRFLCAweDA3LCAweDMwLCAweDE5LCAweEMwLCAweDJCLCAweDIwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRiwgMHg4MCwgMHhGRCwgMHgyMCwgMHhGRiwKKzB4ODEsIDB4N0UsIDB4MDIsIDB4QjAsIDB4MDEsIDB4QzQsIDB4M0QsIDB4MDAsIDB4REYsIDB4MDAsIDB4QkMsIDB4NDMsIDB4QjAsCisweDBCLCAweEMwLCAweDNFLCAweDEwLCAweEZBLCAweDAwLCAweEVDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLAorMHhGRiwgMHg4MCwgMHg3QywgMHgwMSwgMHg3MCwgMHgwMywgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDgsIDB4MzgsCisweDIxLCAweEMwLCAweDM0LCAweDA4LCAweEQ3LCAweEMwLCAweDRDLCAweDAzLCAweDcwLCAweDAxLCAweEQxLCAweDMwLCAweDAwLAorMHhERiwgMHg4NCwgMHg0RCwgMHg0MiwgMHgzMiwgMHg0RCwgMHhDMCwgMHgyNywgMHgwMCwgMHgxQiwgMHgxMiwgMHgzQywgMHgwMiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4MkIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFCLCAweEEwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweDZDLCAweDgyLCAweDEwLCAweDE5LCAweDQxLCAweDNDLCAweDAwLAorMHhGMSwgMHgwMCwgMHhDNCwgMHg0QiwgMHhEMCwgMHgxOSwgMHg0MCwgMHgzQywgMHgwMSwgMHhFNywgMHgwMSwgMHgwNCwgMHg0NiwKKzB4MTIsIDB4M0YsIDB4QzAsIDB4MTEsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MUIsIDB4MTAsIDB4QjksIDB4NDEsIDB4NEYsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDMyLCAweDAwLAorMHhDRCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgxMCwgMHg1OCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhENSwgMHgwMCwgMHgwNCwgMHgwQiwKKzB4NTAsIDB4MjAsIDB4NDAsIDB4MzIsIDB4MDAsIDB4QzgsIDB4MkIsIDB4MDQsIDB4MEEsIDB4MTIsIDB4MEQsIDB4NDQsIDB4MjMsCisweDEwLCAweDA5LCAweDA4LCAweDM0LCAweDQwLCAweDkwLCAweDE4LCAweDQwLCAweDBFLCAweDAwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRCwgMHgwOCwgMHg3QSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhBNCwgMHgwNSwKKzB4MTAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDEsIDB4NzgsCisweDgwLCAweEU1LCAweDAxLCAweEM0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDc5LCAweDAwLCAweEVELCAweDAxLCAweEI0LAorMHgxNSwgMHg5MCwgMHgxMiwgMHg0MCwgMHgzNywgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MTAsIDB4MzIsIDB4MDAsIDB4Q0UsIDB4NDAsIDB4MkMsIDB4MjEsIDB4MTAsIDB4ODQsIDB4QzAsIDB4MzQsCisweDAyLCAweEM3LCAweDA4LCAweDA2LCAweDAzLCAweDcwLCAweDA1LCAweEMwLCAweDMyLCAweDAwLCAweENGLCAweDQwLCAweDBDLAorMHgwMiwgMHgzMCwgMHgwQywgMHhDMSwgMHgyMywgMHgwMCwgMHgwQiwgMHgwNCwgMHgzQywgMHgwMiwgMHhCMCwgMHgwQywgMHhDMCwKKzB4NEIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4M0QsCisweDIwLCAweEZGLCAweDgwLCAweERELCAweDgxLCAweEYwLCAweDhGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDIwLCAweEZFLAorMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHhCRCwgMHgwNCwgMHhFRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGNSwgMHgwRiwgMHhDMCwKKzB4MUYsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MTMsIDB4NzIsIDB4MEYsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDM3LCAweDIwLCAweERGLCAweDAwLCAweDdDLAorMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMSwgMHhERiwgMHgwNCwgMHg3QywgMHgxMywgMHhEMSwgMHgxMSwgMHhEMCwKKzB4MzAsIDB4MDEsIDB4RDMsIDB4MDgsIDB4NEMsIDB4MDYsIDB4MzAsIDB4NUQsIDB4QzgsIDB4MjAsIDB4MDAsIDB4MTcsIDB4MDAsCisweDVDLCAweDAwLCAweEI0LCAweDBELCAweEMwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMywgMHg4OCwgMHgzOCwgMHgxMCwgMHhFRCwgMHgyMCwgMHhCNiwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwKKzB4QkIsIDB4MDMsIDB4RUQsIDB4MjgsIDB4QjQsIDB4MjMsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTEsIDB4MDAsCisweEFDLCAweDAyLCAweDUwLCAweEFFLCAweDQwLCAweDM4LCAweDAwLCAweEUxLCAweDQwLCAweEI0LCAweDAxLCAweDEwLCAweDA2LAorMHg0MCwgMHg0QywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4NzksIDB4ODAsIDB4RUQsIDB4ODEsIDB4OTQsIDB4MDcsIDB4RDgsIDB4MTYsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDksCisweEI0LCAweDI3LCAweEQwLCAweDE2LCAweDQ5LCAweDc4LCAweDAxLCAweEUxLCAweDA1LCAweDk0LCAweDA2LCAweDkwLCAweDVFLAorMHg1OCwgMHg2QywgMHg0MCwgMHgyMSwgMHgwMywgMHgzNCwgMHgwNiwgMHg1MCwgMHgxQywgMHg0MCwgMHgxMCwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4MjMsIDB4ODAsIDB4OEQsIDB4MDAsCisweDM0LCAweDA3LCAweEQ4LCAweEFDLCAweDQwLCAweDMzLCAweDEwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDJDLAorMHg0MCwgMHgzMCwgMHg4MCwgMHhDMSwgMHgwMCwgMHgzNCwgMHg4NiwgMHhEMCwgMHgwQywgMHg0MCwgMHgxMCwgMHgwMCwgMHhDMSwKKzB4MTAsIDB4NzQsIDB4MkYsIDB4NTAsIDB4MkQsIDB4NDAsIDB4NTgsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE3LCAweDAxLCAweDVGLCAweDAwLCAweEZDLCAweDBELCAweDcyLCAweDE3LAorMHhDQSwgMHgxNywgMHgwOCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNywgMHg0OCwgMHgxNCwgMHgwMCwgMHg0MywKKzB4MDAsIDB4NTQsIDB4MDEsIDB4QjAsIDB4MDUsIDB4QzQsIDB4MUMsIDB4MDEsIDB4NzMsIDB4MDMsIDB4REMsIDB4MkQsIDB4NzAsCisweDQ3LCAweEMwLCAweDVDLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgwMCwgMHgwNSwgMHgyMCwgMHgxRiwgMHgwMCwgMHg3QywgMHg2MCwgMHhGOCwgMHgwMSwgMHhDMSwgMHgwNywgMHgwMCwgMHgwRiwKKzB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4NDEsIDB4QzgsIDB4MDMsIDB4NDAsIDB4MUYsIDB4MDAsIDB4NjQsIDB4MjAsIDB4NzMsCisweDAxLCAweEMwLCAweDA3LCAweDIwLCAweDE5LCAweDAyLCAweDdDLCAweDAwLCAweEIwLCAweDIxLCAweEQwLCAweDRCLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4NzgsIDB4MDIsIDB4RjAsIDB4ODksIDB4QzIsIDB4MjcsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NEMsIDB4MDYsIDB4RjAsCisweDA5LCAweEMwLCAweDI1LCAweDAxLCAweDkzLCAweDA5LCAweDVDLCAweDAyLCAweEYwLCAweDk5LCAweEMwLCAweDIzLCAweDAwLAorMHg5NywgMHgyOCwgMHg0NCwgMHg4MiwgMHgzMSwgMHgwOSwgMHhDMSwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDBFLCAweEQwLCAweDI5LCAweDQwLCAweDI3LCAweDAwLAorMHg5MSwgMHgwMywgMHg0NCwgMHgwMiwgMHhEMCwgMHgzOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwNywgMHg0NCwgMHgwQSwKKzB4MTAsIDB4MjksIDB4NTEsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFDLCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDcwLCAweDAyLCAweEQwLCAweDBELCAweDQwLCAweDI3LCAweDAwLAorMHg5RCwgMHgwMCwgMHg0NCwgMHgxQSwgMHhEMCwgMHgyOSwgMHgwMCwgMHgyNywgMHg0MCwgMHg5MSwgMHgwMiwgMHg1NCwgMHgwMiwKKzB4RDgsIDB4MDksIDB4NDEsIDB4MjcsIDB4MDAsIDB4ODUsIDB4MDAsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NzAsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLCAweDIwLCAweDAwLAorMHg4RCwgMHgwMCwgMHgzNCwgMHg1MiwgMHhEMCwgMHg0QywgMHg0MSwgMHgyMywgMHgwMiwgMHg4RCwgMHgwOCwgMHgwNCwgMHg4MiwKKzB4RDAsIDB4QzgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MTQsIDB4MDQsIDB4MDMsIDB4RDksIDB4NDgsIDB4NDAsIDB4MjMsCisweDAwLCAweDgxLCAweDA4LCAweDE0LCAweDgyLCAweDE0LCAweDQ4LCAweDQxLCAweDUwLCAweEEwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHg0MCwgMHg3QywgMHgxMCwKKzB4RjAsIDB4NDEsIDB4QzAsIDB4ODcsIDB4MDUsIDB4MUIsIDB4MTYsIDB4NEMsIDB4NTAsIDB4RjAsIDB4MzEsIDB4QzAsIDB4MDUsCisweDA1LCAweDAzLCAweDBFLCAweDVDLCAweDAwLCAweEYwLCAweDExLCAweEMwLCAweDg3LCAweDA1LCAweDE3LCAweDE2LCAweDVELAorMHg1MSwgMHgzMCwgMHg0MSwgMHhDMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTksIDB4QjgsIDB4MkYsIDB4MEQsIDB4QkYsIDB4MzQsIDB4RkMsIDB4NTIsIDB4RjAsIDB4NEIsIDB4QzEsIDB4MjcsCisweDAxLCAweDlGLCAweDA0LCAweDdELCAweDgyLCAweEYwLCAweENCLCAweDgwLCAweDI3LCAweDAwLCAweDlGLCAweDAxLCAweEJDLAorMHgwMiwgMHhGMCwgMHg4OCwgMHhDMCwgMHgyRiwgMHgwNCwgMHhCRiwgMHgwNCwgMHhFQywgMHg1MiwgMHhGOCwgMHg0QiwgMHhDMSwKKzB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4QTcsCisweDAwLCAweERGLCAweDAyLCAweDU0LCAweDFFLCAweEYwLCAweDJCLCAweEMwLCAweDI1LCAweDAxLCAweDlGLCAweDU0LCAweEZDLAorMHgxMiwgMHgzMCwgMHg4QiwgMHhDMCwgMHgyRSwgMHgwNSwgMHhCMywgMHgwMSwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwKKzB4QTQsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzIsIDB4MEIsIDB4QzAsIDB4NjAsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDE4LCAweDAzLCAweDIwLCAweDFELCAweDAxLCAweDZFLAorMHgwOCwgMHgxMCwgMHg4NSwgMHg0MCwgMHgwMCwgMHgwNSwgMHgwRCwgMHgwNCwgMHg3NCwgMHg4MCwgMHgxMCwgMHgwMSwgMHg1MCwKKzB4ODQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NTQsIDB4MDEsIDB4MUQsIDB4NDAsCisweDQ0LCAweDAwLCAweEJBLCAweDA1LCAweEMwLCAweDcyLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHhBMCwgMHgyMSwgMHg4MSwgMHg5RCwgMHgwMCwgMHgwNCwgMHhCMiwgMHg1OCwgMHg0OCwgMHg0MCwKKzB4MjEsIDB4MDIsIDB4OEQsIDB4MTQsIDB4MzQsIDB4MEEsIDB4MTIsIDB4NDgsIDB4NDQsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MjIsCisweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDUwLCAweDIxLCAweDAxLCAweDhELCAweDAwLCAweDE0LCAweDAyLCAweDEwLCAweDA4LAorMHg0MCwgMHg0OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyMCwKKzB4MjUsIDB4ODAsIDB4OUQsIDB4MDAsIDB4NjQsIDB4NjIsIDB4NTgsIDB4MEQsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUMsIDB4MDAsCisweDcwLCAweDAyLCAweDAwLCAweDBDLCAweDYwLCAweDI0LCAweDQwLCAweDkxLCAweDAwLCAweDQ1LCAweDAyLCAweEQwLCAweDBELAorMHg0MCwgMHgyNSwgMHgyMiwgMHg5RCwgMHg4MCwgMHg1NCwgMHgyQSwgMHg5MCwgMHgwOSwgMHg0MCwgMHg2MiwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4NjcsIDB4MDAsIDB4OEQsIDB4NDAsCisweDQ0LCAweDA2LCAweDY4LCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDAyLCAweDMwLCAweDE5LAorMHhDNCwgMHgyNiwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5RCwKKzB4MEYsIDB4NUMsIDB4MDYsIDB4MzAsIDB4MjksIDB4QzAsIDB4MTQsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDI0LCAweDAxLCAweDlGLCAweDA0LCAweDNDLCAweDAyLCAweEIwLCAweDU5LAorMHhDMCwgMHgyNywgMHgwOCwgMHg5RiwgMHgwMCwgMHg3RSwgMHgwMiwgMHhGNCwgMHg0OSwgMHhDMCwgMHgyMSwgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NjYsIDB4MDAsIDB4OUYsIDB4MTEsIDB4NkQsIDB4NDIsIDB4RjIsCisweDQ5LCAweEMxLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgwNSwgMHg0OCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMCwgMHhCOCwgMHgyMSwgMHhDMSwgMHgwNywgMHgwMCwgMHgxNywKKzB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NUMsIDB4MjAsIDB4RjAsCisweDExLCAweEMwLCAweDA1LCAweDAwLCAweDA3LCAweDIyLCAweDRDLCAweDA4LCAweEUwLCAweDIxLCAweEQwLCAweDQwLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgxNCwgMHgwMCwgMHg1MSwKKzB4MDAsIDB4NzQsIDB4MDEsIDB4QjgsIDB4MDcsIDB4NDAsIDB4MTcsIDB4MDAsIDB4NTEsIDB4MDAsIDB4QzQsIDB4MDksIDB4RDAsCisweDE3LCAweEMwLCAweDE0LCAweDAwLCAweDczLCAweDgxLCAweEM0LCAweDI5LCAweEQwLCAweDA3LCAweDQwLCAweDE0LCAweDAwLAorMHg3MSwgMHgwMiwgMHhDMCwgMHg0NSwgMHhEMSwgMHgwNywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4QzEsIDB4ODAsIDB4MzQsIDB4MDMsIDB4OTMsCisweDhELCAweDQ2LCAweDMzLCAweDAwLCAweEM1LCAweDAwLCAweDE0LCAweDE3LCAweEQwLCAweDBDLCAweDQwLCAweDIyLCAweDMwLAorMHg1OSwgMHg4RiwgMHgxNCwgMHgwMiwgMHhDOCwgMHgxQywgMHg0MCwgMHgzMSwgMHg4MCwgMHhDNSwgMHgwMywgMHg0NSwgMHgwQiwKKzB4RDAsIDB4OEQsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDg4LCAweDc4LCAweDA5LCAweEUxLCAweDAwLCAweEI0LCAweDEzLCAweDEwLCAweDBFLCAweDQwLCAweDdCLCAweDAzLAorMHhFNCwgMHgwRCwgMHg5MSwgMHg0MywgMHhEMCwgMHgyOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhBNCwgMHgwMSwKKzB4RDEsIDB4MEUsIDB4NDEsIDB4NzgsIDB4MDAsIDB4RTEsIDB4MDIsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MDQsCisweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDEwLCAweDc5LCAweDA0LAorMHhFMywgMHgwRCwgMHhCNCwgMHgwRiwgMHg5MCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwNCwgMHhFNywgMHgxNSwgMHg5QywgMHgwNywKKzB4RjAsIDB4MTYsIDB4RTAsIDB4NkEsIDB4MDAsIDB4MkIsIDB4MDEsIDB4OUMsIDB4MDQsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0QsCisweDAwLCAweDc3LCAweDAxLCAweDhELCAweDA3LCAweEYwLCAweDFFLCAweEM0LCAweDQ0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHgzNSwgMHgyMywgMHhENywgMHg4MCwgMHg3QywgMHg0MywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4MDEsIDB4REIsIDB4MDQsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzIsIDB4MjcsCisweDQwLCAweDFGLCAweDIyLCAweDVDLCAweDAxLCAweEYwLCAweDA4LCAweEMwLCAweDM3LCAweDA4LCAweDVGLCAweDAwLCAweDdDLAorMHgwMSwgMHhGMiwgMHgwNSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MjAsIDB4N0QsIDB4MDAsIDB4RjMsIDB4MTksIDB4RjgsIDB4MjcsIDB4NzgsIDB4OUYsIDB4QzAsIDB4N0QsCisweDAwLCAweEYzLCAweDAxLCAweEJDLCAweDA2LCAweDMwLCAweDFGLCAweEMwLCAweDZGLCAweDAwLCAweDYzLCAweDgzLCAweENDLAorMHgwNCwgMHhGMCwgMHgxNywgMHhDNCwgMHg3OCwgMHgwMCwgMHhCMywgMHgwMSwgMHhDRSwgMHgyNSwgMHgzMCwgMHgxRiwgMHhDMCwKKzB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTgsIDB4MzksCisweDFBLCAweEVCLCAweDM4LCAweEI0LCAweDAzLCAweDcwLCAweDBFLCAweDQwLCAweDM4LCAweDAyLCAweEUxLCAweDAwLCAweEI0LAorMHg4MCwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMSwgMHg2NSwgMHgwMCwgMHg4NCwgMHgwOCwgMHhEMCwgMHg1NiwgMHg0MCwKKzB4MzksIDB4MDAsIDB4QTEsIDB4MDIsIDB4ODQsIDB4MjgsIDB4MTAsIDB4NjIsIDB4QzAsIDB4NTYsIDB4NjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNELCAweDA0LCAweEUxLCAweDg4LCAweEI0LAorMHgwMywgMHhEOCwgMHgwNiwgMHg0NSwgMHgzMSwgMHg0MCwgMHhFOSwgMHgwMCwgMHhCNCwgMHgyMywgMHg5MCwgMHgwNiwgMHg0MCwKKzB4MjMsIDB4ODAsIDB4QTksIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDAsIDB4NEMsIDB4NDAsIDB4M0UsIDB4MDAsIDB4MDUsIDB4MDgsCisweDA1LCAweDgxLCAweDEwLCAweDA2LCAweDQwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHgyMCwgMHg3NSwgMHgwMCwgMHhEOCwgMHgwMCwgMHg3NCwgMHgwNywgMHhEQSwgMHgxOSwgMHg0MSwKKzB4MzAsIDB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MDEsIDB4OTMsIDB4MjUsIDB4NDAsIDB4MjcsIDB4MDAsIDB4MUQsIDB4MDAsCisweDA0LCAweDIwLCAweEQwLCAweDA4LCAweDQwLCAweDcxLCAweDQwLCAweDQ1LCAweDAxLCAweDQ0LCAweDgwLCAweDE4LCAweDIxLAorMHg0MCwgMHgxMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwKKzB4N0QsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MTMsIDB4RjAsIDB4MDEsIDB4QzQsIDB4M0QsIDB4MDAsIDB4RkIsIDB4ODAsCisweDdFLCAweDAxLCAweEIwLCAweDVELCAweEMwLCAweDI3LCAweDAwLCAweDFCLCAweDAwLCAweDRELCAweDg0LCAweEYwLCAweDA5LAorMHhDMCwgMHg3QywgMHgwNCwgMHhENSwgMHgxMywgMHg0QywgMHgzRSwgMHgzNiwgMHgyOSwgMHhDMCwgMHg1NSwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4NDAsCisweDdDLCAweDQzLCAweDcwLCAweDAxLCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDAwLCAweDNFLCAweDA4LCAweDcyLCAweDAxLAorMHhDMCwgMHgzNywgMHgwMCwgMHgxNywgMHgwMiwgMHg3QywgMHgwMSwgMHhGMCwgMHgwMSwgMHhDMCwgMHgzNywgMHgwQywgMHhEQSwKKzB4MDQsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MjksIDB4ODAsIDB4MDYsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LCAweDNGLCAweDAwLCAweEYzLCAweDAwLCAweENFLCAweDgzLCAweDMwLCAweDAxLAorMHhDMCwgMHgzOCwgMHgwMCwgMHhGMywgMHgwMCwgMHhGRSwgMHg4MywgMHgzMiwgMHgxRiwgMHhDMSwgMHgyQywgMHgxMCwgMHgzMywKKzB4MDAsIDB4Q0MsIDB4MTQsIDB4RjAsIDB4MEIsIDB4ODAsIDB4M0IsIDB4MDAsIDB4NjMsIDB4MDgsIDB4Q0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEQxLCAweDEwLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LAorMHgyMCwgMHgzNiwgMHgwMCwgMHhEMSwgMHgyMCwgMHg0NCwgMHgwMywgMHgxOCwgMHgxMSwgMHg0MCwgMHgzNSwgMHgwMCwgMHhEMSwKKzB4MDAsIDB4NzQsIDB4MTIsIDB4NTAsIDB4MjEsIDB4QzAsIDB4MjYsIDB4MDAsIDB4MUIsIDB4MjMsIDB4NkMsIDB4MDksIDB4RDAsCisweDIxLCAweDAwLCAweDM3LCAweDAwLCAweDkxLCAweDAyLCAweDQ0LCAweDA0LCAweDEwLCAweDE5LCAweDQwLCAweDE0LCAweDAwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNCwgMHgxMCwgMHhEMSwKKzB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MTksIDB4NDAsIDB4MzQsIDB4NDAsIDB4RDEsIDB4MDAsIDB4NTQsIDB4MTAsIDB4NTAsCisweDQ5LCAweDQwLCAweDI0LCAweDAwLCAweDMxLCAweDExLCAweDQ0LCAweDAwLCAweEQwLCAweDE1LCAweDQwLCAweDM3LCAweDAwLAorMHg5MSwgMHgwMCwgMHg0NCwgMHg4NiwgMHg1MCwgMHgxOSwgMHg0MCwgMHgwNCwgMHgwOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MkEsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4ODMsIDB4MTAsCisweDA4LCAweDQ4LCAweDMxLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDM2LCAweDgwLAorMHgxOSwgMHgwMCwgMHgyMCwgMHgwMSwgMHhEMCwgMHg0NCwgMHg0NCwgMHgzMywgMHgwMCwgMHgwMSwgMHg2MCwgMHgwNCwgMHg4MiwKKzB4MTIsIDB4MDgsIDB4NDAsIDB4NDAsIDB4QTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDMwLCAweDNDLCAweDA4LCAweEYzLCAweDAwLCAweEM0LCAweDAzLCAweDEwLCAweDAxLCAweDQwLCAweDNDLCAweDAwLAorMHhGMywgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHgzMywgMHgwMCwgMHg0QywgMHgwMCwKKzB4RjEsIDB4NEQsIDB4QzEsIDB4MzcsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDAsCisweEM0LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweEE4LCAweDNCLCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHg0MCwgMHhGNCwgMHgwMCwKKzB4RjEsIDB4MDMsIDB4QzgsIDB4MkYsIDB4MDAsIDB4M0UsIDB4MjAsIDB4RkMsIDB4ODEsIDB4RjAsIDB4MDEsIDB4QzAsIDB4M0YsCisweDIwLCAweDNGLCAweDAwLCAweEZELCAweDAwLCAweEUwLCAweDAzLCAweEMwLCAweDE3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgzQiwgMHgwNCwgMHhGRiwgMHhDMCwgMHhGQywgMHg0MywKKzB4QjIsIDB4NEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4RUYsIDB4MDQsIDB4RUMsIDB4MjMsIDB4RjEsIDB4MTIsIDB4QzAsIDB4MzUsCisweDAzLCAweDdCLCAweDAxLCAweEZDLCAweDQyLCAweEIwLCAweDEzLCAweEMwLCAweDJFLCAweDAwLCAweEJCLCAweDAxLCAweEVDLAorMHg4NiwgMHgzMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDgsIDB4RkYsIDB4MDAsIDB4RkQsIDB4MEMsIDB4RjQsIDB4OEYsIDB4RDAsIDB4OUYsIDB4NDgsIDB4RkMsCisweDIyLCAweERELCAweDAzLCAweEM0LCAweDNCLCAweEQyLCAweDE5LCAweDQwLCAweEI0LCAweDAxLCAweDkxLCAweEUxLCAweDc0LAorMHgwRSwgMHgxMCwgMHgwNSwgMHg0MywgMHg3NCwgMHgwMCwgMHg5MSwgMHgwMSwgMHg0NCwgMHgwMywgMHgxMywgMHgxMSwgMHg0OCwKKzB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsCisweDE4LCAweENELCAweDUwLCAweDM0LCAweDAzLCAweEMwLCAweDBDLCAweDQwLCAweDMyLCAweDAwLCAweENELCAweDQyLCAweDI0LAorMHgxMywgMHhEMiwgMHgwMSwgMHg2MCwgMHhCMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg0MSwgMHg0MCwKKzB4MjIsIDB4MDAsIDB4NEQsIDB4MDAsIDB4NzQsIDB4MDQsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4ODAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM0LCAweDA4LCAweERELCAweDAwLCAweDc0LAorMHg4MywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwOCwgMHhERCwgMHgwMCwgMHg0NCwgMHg4MywgMHhEMCwgMHgxMSwgMHg0OCwKKzB4MzQsIDB4MDgsIDB4OTksIDB4MDAsIDB4NzQsIDB4MDcsIDB4NTEsIDB4ODEsIDB4NDEsIDB4MzQsIDB4MDAsIDB4RDUsIDB4MDgsCisweDU2LCAweDkxLCAweDEwLCAweDE5LCAweDQwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhBMCwgMHgwRCwgMHhDMCwKKzB4MzYsIDB4MjAsIDB4REYsIDB4MjAsIDB4NkMsIDB4MDMsIDB4RjIsIDB4MzgsIDB4QzgsIDB4MzUsIDB4MzAsIDB4REIsIDB4MDgsCisweDdDLCAweDAyLCAweEYwLCAweDM1LCAweDg2LCAweDYyLCAweDAwLCAweENGLCAweDAzLCAweDNDLCAweDA3LCAweDMwLCAweDExLAorMHhDMCwgMHgwMywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwKKzB4M0QsIDB4MjQsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RkYsIDB4MDAsCisweEZDLCAweDAzLCAweEUwLCAweDBCLCAweDgwLCAweDM2LCAweDAwLCAweEI1LCAweDAwLCAweEJDLCAweDQzLCAweEIwLCAweDE3LAorMHhDMCwgMHg3RiwgMHgwQSwgMHhGQiwgMHgwMCwgMHhFQywgMHgwMSwgMHhGMiwgMHgwQiwgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4RDcsIDB4MDQsCisweDdDLCAweDAzLCAweDcxLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDIxLAorMHhDMCwgMHgzNSwgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHgyMSwgMHhDMCwgMHgyNywgMHgwMCwgMHg1RiwKKzB4MDAsIDB4N0MsIDB4MTEsIDB4MzAsIDB4ODEsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDNDLCAweDAwLCAweEYxLCAweDgyLCAweEY0LCAweDhGLCAweDE4LCAweDVFLAorMHg0NCwgMHhGRiwgMHgyNCwgMHhFRCwgMHgwMiwgMHhDNCwgMHgwMywgMHhEMiwgMHg4MSwgMHg0MSwgMHg3QywgMHgwMCwgMHg5QiwKKzB4MDAsIDB4NzQsIDB4MEYsIDB4QzAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REMsIDB4MDksIDB4NDAsIDB4MDksIDB4MTAsCisweDA5LCAweDQwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorMHhBMCwgMHhGMiwgMHgwMCwgMHhDNSwgMHgwMSwgMHgzNCwgMHgxNywgMHg1MSwgMHgwQywgMHg0MCwgMHhCMiwgMHgwNCwgMHhDRCwKKzB4MTAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4MDIsIDB4MDUsIDB4MDAsIDB4MzQsIDB4MEIsIDB4QzAsCisweDAwLCAweDRBLCAweDMzLCAweDEwLCAweDRDLCAweDAxLCAweDE0LCAweDAzLCAweDEwLCAweDAwLCAweDQxLCAweDFGLCAweDAwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg3OCwgMHgwNiwgMHhFMSwKKzB4QjEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MjAsIDB4RUQsIDB4ODksIDB4OTQsIDB4MDcsIDB4RDAsCisweDFFLCAweDQyLCAweDdBLCAweDAxLCAweEE5LCAweDgxLCAweEI0LCAweDg3LCAweEQwLCAweDE2LCAweDQwLCAweDZCLCAweDAwLAorMHg2RCwgMHgzMSwgMHhDMCwgMHgwNywgMHgxMCwgMHgxMiwgMHg0MCwgMHgxQiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4QzcsIDB4MDgsIDB4M0MsIDB4NDMsIDB4NTAsCisweDBDLCAweEMwLCAweDMzLCAweDAwLCAweENGLCAweDIwLCAweDFDLCAweDAzLCAweEYwLCAweDQwLCAweEMwLCAweDczLCAweDgxLAorMHhDNywgMHgwMCwgMHgzQywgMHgzMiwgMHhGMCwgMHg0MCwgMHhDMCwgMHgzMywgMHgwMCwgMHg0RiwgMHgyMiwgMHgxQywgMHgxMiwKKzB4MzAsIDB4ODQsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEI4LCAweDNELCAweDAwLCAweEZGLCAweDQwLCAweEJDLCAweDJCLCAweEIxLCAweDBGLCAweEMwLCAweDNGLCAweDAwLAorMHhGRiwgMHg5MCwgMHhFNCwgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRCwgMHgwMCwgMHhCNywgMHgwMCwgMHhGQywgMHg2MywKKzB4RjAsIDB4MDcsIDB4QzAsIDB4MkYsIDB4MDIsIDB4NkYsIDB4MDAsIDB4MUMsIDB4MDMsIDB4RjAsIDB4OEQsIDB4QzIsIDB4MEIsCisweDQwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDczLCAweDAxLAorMHhEQiwgMHgwQSwgMHg3QywgMHg5NywgMHgzOSwgMHg2RCwgMHhDMSwgMHhCNywgMHgwMSwgMHhERiwgMHgwMCwgMHg1QywgMHg0QiwKKzB4NzEsIDB4MTgsIDB4QzAsIDB4MzYsIDB4MjAsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MzIsCisweDAwLCAweDVCLCAweDAwLCAweDdDLCAweDAzLCAweDM2LCAweDA1LCAweEMwLCAweDU3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHhCOSwgMHgwNSwgMHhFMSwgMHg1NCwgMHhCNCwgMHgxMywKKzB4MTgsIDB4MkUsIDB4NjAsIDB4QkIsIDB4MDMsIDB4RUQsIDB4MDQsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NjAsIDB4MzgsCisweDAxLCAweEE3LCAweDAwLCAweEI0LCAweDEzLCAweEQwLCAweDA3LCAweDQyLCAweDI4LCAweDEwLCAweDYxLCAweDIwLCAweEI0LAorMHgwMSwgMHgxMCwgMHgwRSwgMHg0MCwgMHg0QiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MDAsIDB4NzksIDB4MDAsIDB4RTksIDB4MDUsIDB4MzQsIDB4MjcsIDB4MTIsIDB4NUUsIDB4NDAsIDB4N0IsCisweDAwLCAweENELCAweDA1LCAweDk0LCAweDI3LCAweDUyLCAweDFBLCAweDY0LCAweDdBLCAweDAyLCAweEVELCAweDAxLCAweEI0LAorMHgwRSwgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QSwgMHgyMCwgMHg2RCwgMHgyMSwgMHhGNCwgMHgwNywgMHgxMCwgMHgxNiwgMHg0MCwKKzB4MEYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjAsIDB4MzMsCisweDA4LCAweEMxLCAweDAwLCAweDM0LCAweDgzLCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDEwLCAweENELCAweDIwLCAweDA0LAorMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHg4NSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgyNSwgMHg0MSwKKzB4MjAsIDB4MDAsIDB4NDUsIDB4MDgsIDB4MzQsIDB4OEYsIDB4MTAsIDB4RUMsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDE1LCAweDAwLCAweDVCLCAweDIwLCAweDdDLAorMHgwMSwgMHgzNSwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg1QywgMHgwMSwgMHg3MCwgMHgyNywgMHhDMiwKKzB4MTYsIDB4MDAsIDB4N0YsIDB4MjIsIDB4N0MsIDB4MDEsIDB4RjgsIDB4MjcsIDB4RDMsIDB4MTYsIDB4MjAsIDB4NkYsIDB4MjAsCisweEY0LCAweDBELCAweDMwLCAweDE3LCAweEMyLCAweDVGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHgwOCwgMHhGMCwgMHgyMSwgMHhDNCwKKzB4ODcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MTcsIDB4MDQsCisweDdDLCAweDA4LCAweEYyLCAweDAxLCAweEMwLCAweDg3LCAweDAwLCAweDFBLCAweDAyLCAweDc0LCAweDYwLCAweEYwLCAweDAxLAorMHhDMCwgMHg0QiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4MjcsIDB4MDIsIDB4OUYsIDB4MDksIDB4N0MsIDB4MDYsIDB4RjAsIDB4MTksIDB4QzAsIDB4NjcsIDB4ODAsIDB4ODMsIDB4MDgsCisweDVDLCAweDAyLCAweDMwLCAweDk5LCAweEMzLCAweDIzLCAweDAwLCAweDkyLCAweDAwLCAweDBDLCAweDg2LCAweDcwLCAweDA5LAorMHhDMCwgMHgyMSwgMHgwMSwgMHg5MywgMHgwNCwgMHg1QywgMHgwNiwgMHgzMiwgMHgwOCwgMHhDMiwgMHg0MCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4RTYsIDB4MDAsIDB4OUQsIDB4MDMsCisweDc0LCAweDAyLCAweEQwLCAweEE5LCAweDQxLCAweEUzLCAweDA0LCAweDlCLCAweDAxLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwgMHgwMCwgMHhDNCwgMHgwQSwgMHhCMCwgMHgwOSwgMHg0MCwgMHhBNCwgMHgwMCwgMHg5NSwKKzB4MDAsIDB4MDQsIDB4MEUsIDB4MTAsIDB4MDksIDB4NDAsIDB4MDUsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDg4LCAweDI0LCAweDA0LCAweDlELCAweDEwLCAweDc0LCAweDIyLCAweEQwLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMSwgMHg5MSwgMHgwMCwgMHgxNCwgMHgwMiwgMHgxNCwgMHgwRCwgMHg0MSwgMHgyNywgMHg0MSwgMHg5NSwKKzB4MDAsIDB4NTQsIDB4MTIsIDB4NTAsIDB4MDksIDB4NDAsIDB4QTUsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NTQsIDB4MTIsIDB4MTQsCisweDg5LCAweDQwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgyMCwgMHgyMCwgMHgwNSwgMHg4RCwgMHgzNCwgMHgzNiwgMHg1MiwgMHhEMiwgMHgwOCwgMHg0MCwgMHgyMywgMHg0MCwgMHg4OSwKKzB4QzAsIDB4MDQsIDB4MjIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4QTMsIDB4MDAsIDB4OTUsIDB4MDIsIDB4MTQsIDB4MDMsIDB4OTAsCisweDg4LCAweDQwLCAweDIwLCAweDA1LCAweDk0LCAweDAwLCAweDQ0LCAweDA2LCAweDEwLCAweDQ4LCAweDQxLCAweDQxLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMSwgMHgxRiwKKzB4MjQsIDB4N0MsIDB4OTEsIDB4RjAsIDB4NDEsIDB4QzEsIDB4MDcsIDB4MDUsIDB4MTEsIDB4NTQsIDB4NUMsIDB4NTgsIDB4MzAsCisweDAxLCAweENBLCAweDA3LCAweDA1LCAweDE3LCAweDAwLCAweDVELCAweDA0LCAweDcwLCAweDIxLCAweEMwLCAweDA1LCAweDAxLAorMHg1MywgMHgwMCwgMHg1QywgMHgwMCwgMHgzMCwgMHg0NSwgMHhDMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4NTQsIDB4N0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDEyLCAweEYyLCAweDBCLCAweEMwLCAweDY3LCAweDAwLAorMHhCQiwgMHgwMSwgMHhFQywgMHgwQSwgMHg3MCwgMHg0QiwgMHhDOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhBRSwgMHg1MiwKKzB4RjQsIDB4MEIsIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE5LCAweEE4LCAweDZGLCAweDA0LCAweEJGLCAweDM2LCAweEZDLCAweDQyLCAweEYwLCAweDBBLCAweEMwLCAweDJDLCAweDAwLAorMHhCRiwgMHg5MCwgMHg3RiwgMHgzMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHhBRiwgMHgwNCwgMHg5RiwgMHgwMiwgMHhDRCwgMHg4NiwKKzB4MzQsIDB4ODksIDB4QzAsIDB4MkYsIDB4MDAsIDB4QUYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NjQsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDE4LCAweDA3LCAweDAwLAorMHgxRCwgMHgwMiwgMHg3NCwgMHgwOCwgMHhEMCwgMHhBMSwgMHg1MiwgMHg4NCwgMHgwMiwgMHgxRCwgMHgwMiwgMHg0NCwgMHgwMCwKKzB4NzAsIDB4MDUsIDB4NDAsIDB4QzcsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NDQsIDB4ODgsIDB4MTAsIDB4MDUsIDB4NDgsIDB4MDQsCisweDAwLCAweDFELCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDcwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwNCwgMHgzNCwgMHgwMiwKKzB4RDAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MTQsIDB4MUEsIDB4RDAsIDB4MDgsIDB4NjIsIDB4MjMsCisweDAwLCAweDhELCAweDAwLCAweDA0LCAweDBBLCAweDEwLCAweDQ4LCAweDQwLCAweDIyLCAweDAwLCAweDhELCAweDAwLCAweDc0LAorMHgwMywgMHgxMCwgMHgwOCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4QTAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsCisweDIwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweDUwLCAweDA5LCAweDQ4LCAweDI3LCAweDAwLCAweDhELCAweDAwLCAweDQ0LAorMHgwMiwgMHgxMSwgMHg4OSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgyOSwgMHg0MCwKKzB4NjAsIDB4MjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsCisweDEwLCAweDlGLCAweDAwLCAweDc4LCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDA4LCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCRSwgMHgwNywgMHg0QywgMHgwMiwgMHgzMSwgMHgzOSwgMHhDMiwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MTYsIDB4MjAsIDB4MDksIDB4RDAsIDB4MTQsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDI0LCAweDAwLCAweDlGLCAweDgwLCAweDdDLAorMHg0MiwgMHhGMCwgMHgwOCwgMHhFMCwgMHgyNywgMHgwQywgMHg4RiwgMHgxMCwgMHg3RCwgMHgwMiwgMHhGMCwgMHgzOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4NEEsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MjMsCisweDdDLCAweDE2LCAweEY0LCAweDU5LCAweEMwLCAweDUzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMSwgMHgxRiwgMHgwMCwgMHg0QywgMHgyMCwgMHgzMCwgMHg0MSwgMHhDMCwKKzB4MDQsIDB4MDAsIDB4MTIsIDB4MDAsIDB4NUMsIDB4ODAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDIsCisweDdDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDA3LCAweDI0LCAweDFGLCAweDIyLCAweDVDLCAweDAwLCAweDMwLCAweDQxLAorMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwKKzB4REMsIDB4MDQsIDB4N0QsIDB4MDAsIDB4QzQsIDB4MDksIDB4RjAsIDB4MTcsIDB4NDQsIDB4REQsIDB4NEMsIDB4NzEsIDB4MDMsCisweDQ0LCAweDAxLCAweDEwLCAweDc3LCAweEMwLCAweDU1LCAweDAwLCAweDVCLCAweDAwLCAweEI0LCAweDExLCAweEQwLCAweDA1LAorMHg0MCwgMHg1RiwgMHgwMCwgMHg3RCwgMHgwMywgMHhDNCwgMHgwMSwgMHg1MCwgMHgzNiwgMHg0MCwgMHg1MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4RTIsIDB4MDAsIDB4Q0QsIDB4NDUsCisweDE0LCAweDBBLCAweDEwLCAweDI0LCAweDQwLCAweDcwLCAweDgwLCAweDgxLCAweDAwLCAweDE0LCAweDAzLCAweDEwLCAweDQ4LAorMHg0MCwgMHgzMywgMHgwMCwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MiwgMHhBMywgMHgwMCwgMHg4RCwKKzB4MTIsIDB4MTQsIDB4MDMsIDB4MTAsIDB4OEMsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDAwLCAweEVELCAweDAzLCAweDk0LCAweDA1LCAweDUxLCAweDIyLAorMHg0MCwgMHg2MSwgMHgwMCwgMHg4MSwgMHgxMCwgMHg4NCwgMHgxNywgMHgxNCwgMHgwQSwgMHg0MCwgMHhGRCwgMHgwMSwgMHhFRCwKKzB4MDQsIDB4QjQsIDB4MDIsIDB4RDAsIDB4NEUsIDB4MDAsIDB4MkIsIDB4MDQsIDB4QkQsIDB4MTEsIDB4ODQsIDB4MDMsIDB4NTIsCisweDAwLCAweDQwLCAweDEwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHgxMCwgMHg2OCwgMHgwMCwgMHhDRiwgMHgwMSwgMHgxNSwgMHgwNCwgMHgxMCwgMHgxNiwgMHhFMCwgMHg3OCwgMHg4OCwgMHhBMywKKzB4MDEsIDB4REMsIDB4NDcsIDB4MzAsIDB4MUUsIDB4RTgsIDB4N0YsIDB4MDEsIDB4RTcsIDB4MDMsIDB4QkMsIDB4MDYsIDB4RjAsCisweDFFLCAweEMwLCAweDZCLCAweDAwLCAweEFGLCAweDQxLCAweERDLCAweDA3LCAweDMyLCAweDFFLCAweEMwLCAweDUwLCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHg1RiwKKzB4MDAsIDB4NkMsIDB4MDEsIDB4RjAsIDB4MDEsIDB4QzIsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MjAsIDB4N0UsIDB4MjMsIDB4RjAsCisweDA5LCAweEMwLCAweDM3LCAweDEyLCAweERCLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDhELCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhEMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4NkYsIDB4NDAsIDB4NzMsIDB4ODEsIDB4RTQsIDB4MDQsIDB4RjEsCisweDE3LCAweEMwLCAweDc4LCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFCLCAweEMwLCAweDZGLCAweDgwLAorMHhFNywgMHgwOSwgMHhDQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMiwgMHg3QywgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywKKzB4MzAsIDB4MTcsIDB4QzAsIDB4MDgsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweDg4LCAweDI5LCAweDAwLCAweDYxLCAweDAwLCAweDg0LCAweDEwLCAweDcwLCAweDAyLCAweDQwLCAweDk4LCAweDAyLAorMHhFMSwgMHg4MCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwgMHgyQiwgMHg4MSwgMHhFMSwgMHgwMCwgMHg4NCwgMHgwMiwKKzB4RDAsIDB4OEUsIDB4QzAsIDB4M0EsIDB4MDAsIDB4RUQsIDB4MDAsIDB4RjQsIDB4MjMsIDB4MTgsIDB4MjYsIDB4NDAsIDB4NTQsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLAorMHhFMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMSwgMHgwOCwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgwOCwgMHhCNCwgMHgwMywKKzB4RDAsIDB4MEUsIDB4NDEsIDB4MkIsIDB4MzAsIDB4RjUsIDB4MDEsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEYsIDB4NDAsIDB4MjgsCisweDA0LCAweEFELCAweDAwLCAweEI0LCAweDAyLCAweDUwLCAweDI2LCAweDQwLCAweDIwLCAweDAxLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHgxMywgMHgwMCwgMHgxMSwgMHg0MCwgMHgwNCwgMHgwMSwKKzB4NTAsIDB4MDgsIDB4NEMsIDB4MTAsIDB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MjQsIDB4NDAsIDB4MjMsCisweDAwLCAweEMxLCAweDA0LCAweDA0LCAweDA1LCAweEQwLCAweDJDLCAweDQwLCAweDIyLCAweDgwLCAweDRELCAweDAwLCAweDM2LAorMHgwQywgMHg1MCwgMHgwQywgMHg1MiwgMHgxOCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4QTgsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDUsIDB4QzQsIDB4MTQsCisweDAwLCAweDkzLCAweDAwLCAweEZDLCAweDAzLCAweEQwLCAweDA5LCAweEM0LCAweDM3LCAweDAwLCAweEQ3LCAweDA0LCAweDRELAorMHgxMiwgMHhGMCwgMHgzRiwgMHhDMSwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwQSwgMHg3QywgMHgwQywgMHg3MCwgMHgyOSwgMHhDMCwKKzB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsCisweDEwLCAweDlGLCAweDgyLCAweDVDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDAzLCAweDAwLCAweDk3LCAweDgwLCAweDdFLAorMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMSwKKzB4QTcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4NjAsIDB4QjQsIDB4MjksIDB4QzAsIDB4MjcsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDBBLCAweDJCLCAweDIwLCAweDkzLCAweDgwLCAweENDLAorMHgwMCwgMHgzMCwgMHgwNywgMHhDMCwgMHhBRiwgMHgwMCwgMHhBMywgMHgwOSwgMHg4RCwgMHgwMywgMHgzMiwgMHgwRiwgMHhDMSwKKzB4NzcsIDB4MDAsIDB4RkIsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzQsIDB4MEYsIDB4MDAsIDB4MkUsIDB4MDAsIDB4QkYsIDB4MDAsCisweEZDLCAweDAwLCAweDMwLCAweDA5LCAweEMwLCAweDA3LCAweDJBLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4MSwgMHgyMSwgMHgzNiwgMHgwMCwgMHg5MSwgMHgxMSwgMHgxNCwgMHg0MSwgMHg1MSwgMHg5NSwgMHg0MCwKKzB4QTcsIDB4MDAsIDB4OTEsIDB4MDIsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MDksIDB4NDQsIDB4NjcsIDB4MDIsIDB4REQsIDB4MDAsCisweDA0LCAweDAyLCAweDMwLCAweDBELCAweDQwLCAweDI3LCAweDA0LCAweDlELCAweDAwLCAweDM0LCAweDFDLCAweDEwLCAweEJELAorMHg0NCwgMHg4NywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwKKzB4MjQsIDB4MTAsIDB4MTEsIDB4ODEsIDB4NjQsIDB4ODAsIDB4MTgsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4OTEsIDB4MDIsCisweDQ0LCAweDAzLCAweDE0LCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweENELCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDBELAorMHg0MCwgMHgzNiwgMHgwMiwgMHhERCwgMHgwMCwgMHg3NCwgMHgwNCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDE2LCAweDgwLCAweDUwLCAweDA0LCAweDQwLCAweDEzLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAzLCAweDEwLCAweDA4LAorMHg0OCwgMHhCMywgMHgyMCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgwMiwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDI2LCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHhEMSwgMHgwMCwgMHhDQywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwOCwgMHhGQiwKKzB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MTYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsCisweDAxLCAweEM0LCAweDA3LCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHhBOCwgMHgxRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwQiwgMHhDMCwgMHgwRiwgMHgwMCwgMHg3RiwKKzB4NDAsIDB4RkMsIDB4MDMsIDB4RjEsIDB4MDcsIDB4QzAsIDB4MkYsIDB4MDEsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4NzAsCisweDBFLCAweEMwLCAweDFGLCAweDAwLCAweDdGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDE3LCAweDYwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4OCwgMHg3QiwgMHgyMiwgMHhGQiwKKzB4MjksIDB4RUMsIDB4MjcsIDB4RjAsIDB4OUYsIDB4QzQsIDB4N0MsIDB4MDIsIDB4RUYsIDB4MDksIDB4Q0MsIDB4MDcsIDB4MzAsCisweDlGLCAweEMwLCAweDdDLCAweDAwLCAweEUzLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDlGLCAweEMwLCAweDdDLCAweDAwLAorMHhFRiwgMHgwOSwgMHhDQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTgsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MDQsIDB4NEMsIDB4MDAsIDB4RDEsCisweDAxLCAweDAwLCAweDA0LCAweDMxLCAweDFELCAweDA0LCAweDQ0LCAweDA0LCAweDUwLCAweDQxLCAweDAwLCAweDA1LCAweDA1LAorMHgxMSwgMHgwMCwgMHg1QywgMHgxMCwgMHhEMCwgMHg0MSwgMHg0MCwgMHgwMCwgMHgyNSwgMHgxRCwgMHgwNCwgMHg0NCwgMHgwMCwKKzB4RDAsIDB4MDEsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEzLCAweEEwLCAweDM1LCAweDAwLCAweEQ5LCAweDAwLCAweDI0LCAweDEzLCAweDUyLCAweDRDLCAweDQyLCAweDMxLCAweDAxLAorMHhDRCwgMHgwNCwgMHg0NCwgMHg4MywgMHg1MCwgMHgwRCwgMHgwQSwgMHgzMCwgMHgwMCwgMHhENSwgMHgwMCwgMHgwNCwgMHg0MywKKzB4RDAsIDB4NEMsIDB4NjAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NEQsCisweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDA3LCAweDAwLAorMHgxMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NywgMHgwMCwKKzB4NTAsIDB4MDEsIDB4NDgsIDB4MDEsIDB4NDAsIDB4MTUsIDB4MjAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDgsIDB4MDUsCisweDAwLCAweDBELCAweDAwLCAweDU0LCAweDAwLCAweEMwLCAweDAxLCAweDQwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNiwgMHgwMCwgMHhEQiwgMHgwMCwgMHg2QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsIDB4REYsIDB4NDAsIDB4MEMsIDB4MDMsIDB4NzAsIDB4MEQsIDB4NDAsIDB4MzQsCisweDAwLCAweEQ3LCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweERGLCAweDAwLCAweDRDLAorMHgwMywgMHhFMCwgMHgwRCwgMHhDMCwgMHgwMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDcsIDB4ODAsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4REMsIDB4NDAsIDB4RjMsIDB4MDMsIDB4RDQsIDB4MEUsCisweDEwLCAweDNGLCAweDAwLCAweEY4LCAweDQwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDIwLCAweDNCLCAweDAwLCAweERDLAorMHgwMCwgMHhGMSwgMHgwMywgMHhDMCwgMHgwRSwgMHgwMCwgMHgzRiwgMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwKKzB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsCisweDAwLCAweEQ3LCAweDA0LCAweDdDLCAweDAzLCAweEYwLCAweDRELCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDYwLCAweDVDLAorMHgwNywgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywgMHgwMCwgMHg0QywgMHgxMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzQsIDB4NDAsIDB4RDMsIDB4MDQsIDB4NEMsIDB4NDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QUIsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFCLCAweEEwLCAweDAwLCAweDA2LCAweDAxLCAweDEyLCAweDc0LAorMHgxNCwgMHhEMCwgMHg3MSwgMHg2MCwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg2QywgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKzB4QzcsIDB4MDIsIDB4MEQsIDB4MTEsIDB4NkMsIDB4MTgsIDB4RDIsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MTIsCisweDZDLCAweDAwLCAweEQwLCAweEIxLCAweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHhGMCwgMHgxMCwgMHhDNSwgMHg4MCwgMHgzNCwgMHgwMywgMHhEMSwgMHgwRCwgMHg0MiwKKzB4MzMsIDB4MDAsIDB4REQsIDB4MDAsIDB4MjQsIDB4MEIsIDB4OTAsIDB4MEMsIDB4NDAsIDB4QjMsIDB4MDAsIDB4QzUsIDB4MDEsCisweDA0LCAweDBGLCAweEQ4LCAweDBDLCAweDQwLCAweDMyLCAweDAwLCAweEMxLCAweDAxLCAweDA0LCAweDBCLCAweEQyLCAweDFDLAorMHg0MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRiwgMHgwMiwKKzB4NEMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4QjQsIDB4MDQsIDB4RDksIDB4MTIsIDB4NDAsIDB4NEYsIDB4MDIsIDB4MzksIDB4MDEsCisweEE0LCAweDA0LCAweDEwLCAweDEyLCAweDQwLCAweDRCLCAweDA0LCAweDNELCAweDAxLCAweEE2LCAweDI0LCAweEQwLCAweDEyLAorMHg2OCwgMHg0QSwgMHgwMCwgMHgzMSwgMHgwMSwgMHhBNCwgMHgwNCwgMHhEMCwgMHgxMiwgMHg1MywgMHgzQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4QzcsIDB4MDAsCisweDNDLCAweDAzLCAweEYwLCAweDBDLCAweDQ4LCAweDMzLCAweDEwLCAweENGLCAweDAwLCAweDNDLCAweDAzLCAweEIwLCAweDBDLAorMHg0MCwgMHgzMywgMHgwMCwgMHhDNywgMHgwMCwgMHgwQywgMHhBMywgMHhGMSwgMHgwRCwgMHhDQywgMHgzMiwgMHg4MCwgMHhDMywKKzB4MDAsIDB4MEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDksIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDBELCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEY4LCAweDAzLAorMHg4MCwgMHgwQiwgMHgwOCwgMHgzNiwgMHgwMCwgMHhCQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwKKzB4MDAsIDB4RkMsIDB4MjAsIDB4RDIsIDB4MDMsIDB4QzAsIDB4MEQsIDB4MTAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RkEsCisweDExLCAweEMwLCAweDA5LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhBOCwgMHg3NywgMHgyMCwgMHhENywgMHg0MSwgMHg2QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg3NCwgMHgwMCwgMHhDMywKKzB4MDEsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4RDMsIDB4MDEsIDB4NEQsIDB4MDMsIDB4NzAsCisweDFELCAweEMwLCAweDMwLCAweDAwLCAweEQzLCAweDAxLCAweDRDLCAweDA3LCAweDMwLCAweDFELCAweEQwLCAweDQwLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHgwRCwgMHg0OCwgMHgyMSwKKzB4NDAsIDB4ODQsIDB4MDAsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MDksIDB4MDAsIDB4MjUsIDB4MDAsIDB4OTAsIDB4MDAsIDB4RDAsCisweDAyLCAweDQwLCAweDBCLCAweDAwLCAweDM1LCAweDAwLCAweEM0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA5LCAweDAwLAorMHgyQiwgMHg0MCwgMHg4NCwgMHgwMCwgMHhCMCwgMHgwMywgMHhDMCwgMHg0RSwgMHgwOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4RjksIDB4MDEsIDB4QTQsIDB4MDcsIDB4QzIsCisweDFGLCAweDQwLCAweDdDLCAweDAwLCAweEY1LCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDdGLCAweDAwLAorMHhFMSwgMHgwMSwgMHg5NCwgMHgwNywgMHg1MCwgMHgxRiwgMHg0OCwgMHg3QywgMHg4MCwgMHhFMSwgMHgwMSwgMHhDNCwgMHgwNywKKzB4MTgsIDB4MUUsIDB4NDgsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE2LCAweDI4LCAweDAzLCAweDAwLCAweDA5LCAweDAwLCAweDQwLCAweDAwLCAweEQ4LCAweDAwLCAweDQyLCAweDAxLCAweDAwLAorMHgwNSwgMHgyMCwgMHgxNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwNSwgMHgwMCwgMHgxNCwgMHgwMCwKKzB4NTAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MDgsIDB4MDksIDB4MDAsIDB4MDQsIDB4MDAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NUEsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDI4LCAweDE1LCAweDAwLAorMHg1QiwgMHgwMCwgMHg2QywgMHgwMSwgMHhEMCwgMHgwNCwgMHhDMCwgMHgxNCwgMHgwMCwgMHg1NywgMHgwMCwgMHg0QywgMHgwMSwKKzB4RjAsIDB4MDUsIDB4QzQsIDB4MTcsIDB4MDAsIDB4NTMsIDB4MDAsIDB4MUMsIDB4MDEsIDB4NzAsIDB4MDUsIDB4QzAsIDB4MTQsCisweDA4LCAweDUzLCAweDYwLCAweDRDLCAweDAxLCAweDMwLCAweDA1LCAweDQwLCAweDVDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNywgMHgwMiwgMHhGQywgMHgwMCwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDgsIDB4RjAsIDB4MDMsIDB4QzgsIDB4MEYsCisweDAwLCAweDNGLCAweDAyLCAweEU0LCAweDA4LCAweEIwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDgwLCAweEZELAorMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MTksIDB4NDAsIDB4MjQsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDkzLCAweDAwLCAweDdDLAorMHgxNiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MCwgMHg5MywgMHgwNCwgMHg3OCwgMHgxNiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjQsCisweDAxLCAweDlELCAweDAwLCAweDc0LCAweDQyLCAweDE0LCAweDU5LCAweEMwLCAweDI2LCAweDAwLCAweDlELCAweDAwLCAweDc0LAorMHgwQSwgMHhEMCwgMHgwOSwgMHg0MCwgMHhBNCwgMHgwMCwgMHg5MSwgMHg5QSwgMHg3NCwgMHg4RSwgMHhCMiwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MTAsIDB4OTEsIDB4MDIsIDB4NjQsIDB4MTYsIDB4RDEsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDZDLCAweDgwLCAweEJELCAweDAxLCAweEU0LAorMHgwNiwgMHgxMCwgMHg0QiwgMHg0MCwgMHgyRCwgMHgwMCwgMHhCRCwgMHgwMCwgMHhGNCwgMHgwRSwgMHhEMCwgMHgwQSwgMHg0MCwKKzB4MkMsIDB4MDQsIDB4QjEsIDB4MDAsIDB4RjQsIDB4MDIsIDB4MTAsIDB4MEIsIDB4MDAsIDB4MkYsIDB4MDAsIDB4QjEsIDB4MTAsCisweEY0LCAweDAyLCAweEQwLCAweDBCLCAweDQxLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyOCwgMHgwMCwgMHhFQywgMHgwMCwgMHhCNCwgMHgwMiwgMHgxMCwgMHgwQiwgMHg0MCwKKzB4MkIsIDB4MjIsIDB4QUQsIDB4MDgsIDB4QjQsIDB4ODIsIDB4RDAsIDB4OEEsIDB4NjAsIDB4MjgsIDB4NDIsIDB4QTEsIDB4NDAsCisweEY0LCAweDAyLCAweDkwLCAweDhBLCAweDQwLCAweDJCLCAweDBBLCAweEExLCAweDA4LCAweEE0LCAweDAyLCAweEQwLCAweDBBLAorMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwKKzB4MDYsIDB4MDAsIDB4MUYsIDB4NDAsIDB4NkMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4ODUsIDB4MDAsIDB4MUQsIDB4MDIsCisweDdDLCAweDAwLCAweEYwLCAweDIxLCAweEQwLCAweDg0LCAweDAwLCAweDEzLCAweDBBLCAweDdDLCAweDAxLCAweDMwLCAweDIxLAorMHhDMCwgMHg4NywgMHgwOCwgMHgwMywgMHgyMiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMywgMHhFMCwgMHg3NywgMHhFMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MjcsIDB4MDUsIDB4OEQsIDB4MTQsCisweDdDLCAweDUyLCAweEYwLCAweDQ4LCAweEMxLCAweDIyLCAweDAxLCAweDlGLCAweDA0LCAweDdDLCAweDAyLCAweEYwLCAweDQ5LAorMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwgMHg4MSwgMHg3QywgMHg1MiwgMHhGMCwgMHg0OCwgMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwKKzB4MjQsIDB4M0MsIDB4NTIsIDB4RjAsIDB4NDksIDB4QzEsIDB4NzcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFELCAweEEwLCAweEFGLCAweDAwLCAweEI3LCAweDAyLCAweERDLCAweDBBLCAweEIwLCAweDJCLAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMiwgMHhEQywgMHgwMiwgMHgzMCwgMHg4OSwgMHhDMCwgMHgyRiwgMHgxMCwgMHhCMywKKzB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4QTcsIDB4MTAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4QjAsCisweDBCLCAweEMwLCAweDc3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHgwMCwgMHgwNSwgMHgwMSwgMHgxMSwgMHg4MSwgMHg0NCwgMHgwMCwgMHgxMCwgMHg0MSwgMHg0MCwgMHgwNywgMHgwNSwgMHgxRCwKKzB4MDAsIDB4NDQsIDB4MDAsIDB4NTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDEsIDB4MTEsIDB4MDAsIDB4NzQsIDB4NTAsIDB4RDAsCisweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDQ0LCAweDAwLCAweDUwLCAweDAxLCAweDQwLCAweDYzLCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyMCwgMHgyMSwgMHgwMSwgMHg4NSwKKzB4MDAsIDB4NTQsIDB4MTIsIDB4OTAsIDB4NDgsIDB4NDAsIDB4MjMsIDB4ODAsIDB4OEQsIDB4MDQsIDB4NDQsIDB4MDIsIDB4MTAsCisweDQ4LCAweDQwLCAweDIzLCAweDQ0LCAweDgxLCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDgwLAorMHg4RCwgMHgwMCwgMHgwNiwgMHgwMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MDgsCisweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDhDLCAweDAwLCAweDQ1LCAweDgyLCAweDUwLCAweDA5LCAweDQyLCAweDIzLCAweDA4LAorMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4RDgsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweDIwLCAweDI1LCAweDAwLCAweDk3LCAweDAwLCAweDFDLCAweDAyLCAweEIwLCAweDA5LCAweEM0LCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg1QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzgsIDB4MTcsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDg4LCAweDI1LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGOCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg4MCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDgwLCAweDdELCAweDQyLCAweDcwLCAweDA5LCAweEMwLCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgxMCwgMHg3QywgMHgxMCwKKzB4RDAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NUMsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDQsCisweDAwLCAweDFCLCAweDQ5LCAweDdDLCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHgwMCwgMHhCNCwgMHg0MSwgMHhDMCwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QTAsIDB4REMsIDB4MDAsIDB4N0QsIDB4MjMsIDB4RjQsIDB4OUQsIDB4MTAsIDB4OTcsIDB4NDAsIDB4MTcsCisweDAwLCAweDVELCAweDAwLCAweEI0LCAweDIxLCAweEQwLCAweDA1LCAweDQwLCAweDFDLCAweDAwLCAweDdELCAweDAxLCAweEY0LAorMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNSwgMHgyMCwgMHg3RCwgMHgwMiwgMHhGNCwgMHgwOSwgMHgxMCwgMHgwNywgMHg0MCwKKzB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4QjYsCisweDA2LCAweERELCAweDBCLCAweDM0LCAweDAzLCAweDUwLCAweEFDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDgwLCAweDE0LAorMHg4RiwgMHhEMCwgMHgwQywgMHg1MCwgMHg3MCwgMHg4MCwgMHhDOSwgMHgyMSwgMHgzMiwgMHgyNywgMHhEMCwgMHgwQywgMHg0MCwKKzB4MzIsIDB4MDAsIDB4REQsIDB4MTIsIDB4NzQsIDB4MjMsIDB4MTAsIDB4MUMsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEY0LAorMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMywgMHhFQywgMHgwNCwgMHhCNCwgMHgwQSwgMHhDMCwgMHg1RSwgMHg0MCwKKzB4MzgsIDB4MDQsIDB4RTksIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4NUYsIDB4NDAsIDB4M0IsIDB4MDAsIDB4MkQsIDB4MTAsCisweEI0LCAweDAzLCAweDEwLCAweDJFLCAweDQwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OSwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHgwNywgMHg3MCwgMHgxRSwgMHhDMCwKKzB4N0IsIDB4MDUsIDB4RUIsIDB4ODksIDB4OUMsIDB4MDcsIDB4NzAsIDB4QkYsIDB4QzAsIDB4NzgsIDB4MjAsIDB4MkIsIDB4MjEsCisweEJDLCAweDA3LCAweEYwLCAweDNFLCAweEMwLCAweDdBLCAweDA1LCAweEVGLCAweDAxLCAweEZDLCAweDA3LCAweDMxLCAweDFFLAorMHhDMCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwKKzB4MTUsIDB4MTAsIDB4NUYsIDB4MDAsIDB4M0MsIDB4MDMsIDB4NzAsIDB4MEQsIDB4ODAsIDB4QjcsIDB4MDEsIDB4REYsIDB4MEMsCisweDdDLCAweDAwLCAweEYwLCAweDRELCAweEMwLCAweDE3LCAweDAwLCAweDFGLCAweDIwLCAweDdDLCAweDAzLCAweEYwLCAweDBDLAorMHg0MSwgMHgzNSwgMHgwOCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMSwgMHg3MCwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4N0QsIDB4MDAsIDB4RkYsIDB4ODksCisweEY4LCAweDA1LCAweDcwLCAweDFGLCAweEMyLCAweDdELCAweDAwLCAweEZCLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLAorMHhDMCwgMHg2RiwgMHgwMCwgMHhGNywgMHgwMSwgMHhDRSwgMHgyNSwgMHgzMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwNCwgMHhGMywKKzB4MDEsIDB4OEMsIDB4MjUsIDB4MzAsIDB4MUUsIDB4QzAsIDB4MTgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDA4LCAweDM5LCAweDA0LCAweEVELCAweDA4LCAweEY0LCAweDExLCAweDAwLCAweDBFLAorMHg0MCwgMHgzRiwgMHgwMCwgMHhFMCwgMHgxMCwgMHhCNCwgMHg0MiwgMHhEMCwgMHg4RSwgMHg0MSwgMHgzQiwgMHgwMCwgMHhGNSwKKzB4MDIsIDB4OTQsIDB4MEIsIDB4NTAsIDB4MEUsIDB4QzAsIDB4M0IsIDB4MDAsIDB4M0IsIDB4MDgsIDB4ODUsIDB4MzksIDB4QjAsCisweDBBLCAweDQwLCAweDU1LCAweDQwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LAorMHgwMCwgMHgzOSwgMHgwMiwgMHhFRCwgMHgwOCwgMHhCMCwgMHgwMSwgMHhEMSwgMHgwNiwgMHg0MCwgMHgzOSwgMHgwNCwgMHhFOSwKKzB4MDgsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MkYsIDB4MDAsIDB4NzEsIDB4MDgsIDB4QzQsIDB4MDEsIDB4OTAsCisweDBFLCAweDQwLCAweDNGLCAweDAwLCAweEU5LCAweDAwLCAweEM0LCAweDAwLCAweDE4LCAweDA3LCAweDQwLCAweDIwLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgyMSwgMHgxMCwgMHg5RCwKKzB4MDMsIDB4MzQsIDB4MDAsIDB4OTAsIDB4ODksIDB4NDAsIDB4RjIsIDB4ODAsIDB4QzEsIDB4MDIsIDB4MzQsIDB4MEMsIDB4RDAsCisweDFDLCAweDYwLCAweDU3LCAweDAwLCAweDA1LCAweDA2LCAweDE0LCAweDBFLCAweEQ4LCAweDJDLCAweDQwLCAweEIxLCAweDAwLAorMHhDRCwgMHgwQSwgMHgwMCwgMHhBQywgMHg5OCwgMHgwMCwgMHg0MiwgMHgwOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4QTAsIDB4QzQsIDB4MjAsIDB4MUYsIDB4NTIsIDB4N0MsIDB4MEEsIDB4RDAsCisweEExLCAweEMwLCAweEZELCAweDgwLCAweEZCLCAweDAxLCAweDdDLCAweDJDLCAweEYwLCAweDBGLCAweEM4LCAweEQ3LCAweDAxLAorMHg5MywgMHgxMSwgMHg0QywgMHgxMiwgMHhCMCwgMHgzRiwgMHg0MSwgMHhCRiwgMHgwMCwgMHhDOSwgMHgwOCwgMHg0OCwgMHgwRSwKKzB4MTAsIDB4OTEsIDB4QzAsIDB4NzQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDBELCAweDA4LCAweDI3LCAweDIwLCAweDlGLCAweDg0LCAweDdFLCAweDYwLCAweDcwLCAweDIxLCAweEM4LCAweDM3LCAweDA5LAorMHhERiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwRCwgMHhDMSwgMHhBNiwgMHgwMCwgMHg5RSwgMHg0MCwgMHg3RSwgMHg0MCwKKzB4NzAsIDB4MEQsIDB4QzEsIDB4MzcsIDB4MjIsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MUEsIDB4RjAsIDB4ODksIDB4QzQsIDB4OTcsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDA4LCAweDBCLCAweDg0LAorMHgzMywgMHg4MCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwMywgMHhDMCwgMHgzRSwgMHgwMCwgMHhGNywgMHgxMCwgMHhGOCwgMHgwMCwKKzB4RjIsIDB4MEYsIDB4QzAsIDB4MUMsIDB4MDQsIDB4MzMsIDB4ODAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsCisweDA0LCAweEZGLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDAzLCAweEMwLCAweDA0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHg0NiwgMHgwOCwgMHgxNywgMHgxMSwgMHg0QywgMHgwNiwKKzB4RDAsIDB4MTEsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4ODAsIDB4NzQsIDB4MDQsIDB4RjAsIDB4MEMsIDB4NDAsIDB4ODUsCisweDAyLCAweDExLCAweDAzLCAweDY0LCAweDA2LCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDA4LCAweDFELCAweDExLCAweDZDLAorMHgwNCwgMHhEMCwgMHgzOCwgMHhDOCwgMHgwNiwgMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4QTAsIDB4NDQsIDB4MDQsIDB4MTEsIDB4MjEsIDB4NTQsIDB4MDYsIDB4RDgsIDB4MzksIDB4NjYsIDB4MzIsCisweDAwLCAweEQ1LCAweDAwLCAweDc0LCAweDBFLCAweEQwLCAweDBELCAweDQwLCAweDA0LCAweDA0LCAweDMxLCAweDIxLCAweDc0LAorMHgwNCwgMHhEOCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhERCwgMHgwOCwgMHg0NCwgMHgwNiwgMHhEMCwgMHgzMSwgMHg0MCwKKzB4MDQsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MEEsIDB4MjQsCisweDAwLCAweDg1LCAweDAwLCAweDA1LCAweDAwLCAweEQyLCAweDA4LCAweDYwLCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDM0LAorMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgyMSwgMHgyMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMiwgMHgwQywgMHg0MCwKKzB4MzMsIDB4MDAsIDB4MUQsIDB4MDAsIDB4MjQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDMwLCAweDA2LCAweDAwLCAweDExLCAweDAwLCAweDVDLAorMHg4MiwgMHhGOCwgMHgwMSwgMHhDMCwgMHgzRSwgMHgwMCwgMHhGNiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRiwgMHg0MCwKKzB4MDQsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4OTAsIDB4MUYsIDB4MDAsCisweDRDLCAweDAyLCAweEYwLCAweDAxLCAweEMwLCAweDA0LCAweDYwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4NSwgMHhBOCwgMHgyRiwgMHgwMCwgMHhCNiwgMHgwMCwgMHhDQywgMHgwMiwgMHhGOCwgMHgwQiwgMHhDMCwKKzB4M0YsIDB4MDAsIDB4RkUsIDB4ODAsIDB4RkMsIDB4MDAsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MEIsIDB4NDAsIDB4M0YsIDB4MDAsCisweEE0LCAweDAyLCAweEYyLCAweDBGLCAweEMwLCAweDNCLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLAorMHhDMCwgMHgxNywgMHg2MSwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwKKzB4N0YsIDB4NDAsIDB4RjMsIDB4NDYsIDB4RkMsIDB4MDMsIDB4MzAsIDB4NEYsIDB4QzAsIDB4NEYsIDB4MTIsIDB4M0IsIDB4NEMsCisweENDLCAweDIzLCAweDMwLCAweDRGLCAweEMyLCAweDBDLCAweDgwLCAweDNGLCAweDAxLCAweEZDLCAweDA3LCAweDcxLCAweDhGLAorMHhDMCwgMHgwRiwgMHgwOCwgMHg3MywgMHgwMSwgMHhGQywgMHgwMCwgMHgzMCwgMHgwMywgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTAsIDB4N0QsIDB4MDAsIDB4RTEsIDB4MDgsCisweEY0LCAweEFGLCAweDEwLCAweEJGLCAweDQwLCAweDI3LCAweDAxLCAweDVELCAweDA4LCAweEM0LCAweDNCLCAweDUwLCAweDlGLAorMHg0MCwgMHg0NCwgMHgwMCwgMHg1RCwgMHgwMCwgMHhGNCwgMHgwNywgMHgxMCwgMHgwRiwgMHg0MCwgMHgwNywgMHgwMCwgMHhENSwKKzB4ODEsIDB4NzQsIDB4MDAsIDB4QjEsIDB4MDEsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDIwLCAweDMzLCAweDAwLCAweEM0LCAweDA0LCAweDM0LCAweDAzLCAweDU1LCAweDBDLAorMHg0MCwgMHg0MywgMHgwMSwgMHg4RCwgMHg0NCwgMHgxNCwgMHgwMywgMHg1MCwgMHgwQywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwRCwKKzB4ODAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4NEMsIDB4NDAsIDB4MDcsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsCisweDAwLCAweDQwLCAweDRELCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBMCwgMHgzNSwgMHgwMCwgMHhENSwgMHgwMCwgMHg3MCwgMHgwMywgMHg1MCwgMHgwRCwgMHg0MCwgMHg2NywgMHgwMCwgMHg1RCwKKzB4MTQsIDB4NTQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4MDAsIDB4NkMsIDB4MDAsIDB4NUQsIDB4MTAsIDB4NzQsIDB4MDMsIDB4MTAsCisweDBGLCAweDQwLCAweDZGLCAweDAwLCAweEQ1LCAweDA0LCAweDcwLCAweDA2LCAweEQwLCAweDExLCAweDQwLCAweDBGLCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHgzNiwgMHgwMCwgMHhENywKKzB4MDAsIDB4N0UsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzQsIDB4NDcsIDB4MDAsIDB4MUIsIDB4MDMsIDB4NUQsIDB4MDMsIDB4NzAsCisweDBELCAweDgwLCAweDQ0LCAweDIwLCAweERELCAweDAwLCAweDNDLCAweDAzLCAweDc0LCAweDBELCAweEM0LCAweDQ3LCAweDAwLAorMHg5MywgMHgwNiwgMHg3OCwgMHgwNCwgMHg3MCwgMHg1MSwgMHhDMCwgMHgwMSwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4RkIsIDB4MDAsIDB4QkMsIDB4MDMsIDB4QjAsCisweDBGLCAweEMwLCAweDBGLCAweDAwLCAweDZBLCAweDIwLCAweEVDLCAweDAzLCAweEYwLCAweDBGLCAweDg0LCAweDBGLCAweDA4LAorMHhGQywgMHgwMCwgMHhGRSwgMHgwMywgMHhFMCwgMHgwRiwgMHg4MCwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwMSwgMHhCOCwgMHgwMiwKKzB4QjAsIDB4MDksIDB4QzIsIDB4M0UsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDA4LCAweDMxLCAweDEwLCAweEQzLCAweDQwLCAweDVDLCAweDAzLCAweEYzLCAweDBELCAweEMwLCAweDA2LCAweDAwLAorMHg5RiwgMHgwMiwgMHgyQywgMHgwMywgMHg3MCwgMHg0QywgMHhDMCwgMHgyNiwgMHgwNCwgMHhENywgMHgyMiwgMHg3QywgMHgxMywKKzB4MzAsIDB4MEQsIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDIsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MjgsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFCLCAweEEwLCAweDM0LCAweDAwLAorMHhGMSwgMHgyMCwgMHhDNCwgMHgxNywgMHhEMCwgMHg0RiwgMHg0MCwgMHgyNCwgMHgwMCwgMHg1RCwgMHg0MCwgMHhDMCwgMHgxNywKKzB4MTAsIDB4N0YsIDB4NDAsIDB4RTcsIDB4MDAsIDB4REQsIDB4MDYsIDB4NzAsIDB4MDMsIDB4MTEsIDB4QUYsIDB4MTAsIDB4MjQsCisweDAwLCAweDlELCAweDQ1LCAweDQ0LCAweDQ2LCAweDExLCAweDE5LCAweDExLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHg3MiwgMHg0MCwgMHhDOSwgMHgyMCwgMHgyNCwgMHgwMywKKzB4RDAsIDB4NkMsIDB4NDAsIDB4MjIsIDB4MDAsIDB4MDgsIDB4MjAsIDB4MjAsIDB4MDMsIDB4RDAsIDB4MUMsIDB4NDAsIDB4QzIsCisweDg4LCAweDg0LCAweDIwLCAweDMwLCAweDBCLCAweDEwLCAweDBDLCAweDQwLCAweDA0LCAweDAwLCAweDhELCAweDIxLCAweDI1LAorMHgwNCwgMHgxNCwgMHgxMSwgMHgwMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MEYsIDB4MDAsIDB4NzAsIDB4MDQsIDB4RTksIDB4MDEsIDB4QjQsIDB4MTcsIDB4RDgsIDB4MUUsIDB4NDAsIDB4NkEsCisweDA4LCAweEFELCAweDA1LCAweEE0LCAweDA3LCAweDkwLCAweDFFLCAweDRBLCAweDVCLCAweDBBLCAweEVELCAweDZCLCAweDM0LAorMHgwNywgMHg4MSwgMHg5RSwgMHg0MiwgMHg1OCwgMHgwMCwgMHhBRCwgMHgwMSwgMHhCNiwgMHgwNSwgMHgxMCwgMHhCNiwgMHg0MCwKKzB4M0MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MzAsCisweDAwLCAweENCLCAweDAwLCAweDJDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDIyLCAweDAxLCAweDlGLCAweDAwLCAweDZDLAorMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgwMiwgMHgwNCwgMHg4NywgMHgwNSwgMHgzQywgMHg0MywgMHgyMCwgMHgwRCwgMHhDMCwKKzB4MTAsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NkMsIDB4MDEsIDB4MzAsIDB4MDAsIDB4QzAsIDB4NDgsIDB4NjgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDdELCAweDAwLCAweEY3LCAweDEwLCAweEMxLAorMHg1MywgMHhGMCwgMHgwRSwgMHhDMCwgMHgzRCwgMHgwMCwgMHhCQiwgMHgwNCwgMHhEQywgMHgwQiwgMHg3QSwgMHg4RiwgMHhDMSwKKzB4M0YsIDB4MDgsIDB4RkYsIDB4MjgsIDB4RkMsIDB4MDcsIDB4NzIsIDB4MkYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RUYsIDB4MDAsCisweDRDLCAweDAzLCAweEYwLCAweDA3LCAweEMwLCAweDBCLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMywgMHg1QywgMHg0RiwgMHgzMCwgMHgzRCwgMHhDOSwKKzB4MDQsIDB4MTAsIDB4NUYsIDB4NDAsIDB4NEMsIDB4MzcsIDB4MzAsIDB4MkQsIDB4QzAsIDB4NTYsIDB4NDAsIDB4REIsIDB4MDEsCisweDRDLCAweDAzLCAweEIzLCAweDJELCAweEMyLCAweDE0LCAweDAwLCAweDhGLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDBELAorMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwKKzB4MzksIDB4MDEsIDB4Q0QsIDB4MTQsIDB4MDIsIDB4MTMsIDB4QjAsIDB4NEMsIDB4NEEsIDB4MDgsIDB4MDAsIDB4Q0MsIDB4MDAsCisweDg0LCAweDEzLCAweEIwLCAweDRFLCAweDQxLCAweDFCLCAweDAwLCAweEUxLCAweDAwLCAweDg0LCAweDBCLCAweEQwLCAweDBGLAorMHg0MCwgMHgxOCwgMHgwMCwgMHhBRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwgMHhDMCwgMHg0RSwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDIsIDB4RUQsIDB4MDEsCisweDk0LCAweDE3LCAweDEwLCAweDlFLCAweDQwLCAweDc5LCAweDAwLCAweEVELCAweDAxLCAweDA0LCAweDE3LCAweDEwLCAweDFFLAorMHg0MCwgMHg2MSwgMHg4OCwgMHhFMSwgMHgyMSwgMHg5NiwgMHgxNywgMHhEMCwgMHg5RSwgMHg0NCwgMHg3OCwgMHgwMCwgMHhCRCwKKzB4MDEsIDB4ODUsIDB4MDUsIDB4RDAsIDB4MUMsIDB4NDAsIDB4MTEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDAzLCAweDkwLCAweDBDLAorMHg0MCwgMHg3MSwgMHgwMSwgMHhDRCwgMHg4OCwgMHgwNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwKKzB4M0EsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDIsIDB4RjAsIDB4MDQsIDB4OEQsIDB4MDMsIDB4NDQsIDB4MEIsIDB4RDAsCisweDhELCAweDQwLCAweDVCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LAorMHgyMCwgMHgxNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHg1QywgMHgwMSwgMHgzMCwgMHgwNSwgMHg0MCwgMHhERCwgMHgwMSwgMHg3RiwKKzB4QzEsIDB4NEQsIDB4MDEsIDB4MzEsIDB4MDUsIDB4QzAsIDB4OUUsIDB4MDQsIDB4NzEsIDB4MDMsIDB4NUMsIDB4MDEsIDB4QjAsCisweDA1LCAweEM0LCAweERDLCAweDAxLCAweDdGLCAweDU5LCAweENDLCAweDA5LCAweEYwLCAweEI3LCAweDQwLCAweDVELCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4NjQsIDB4MDAsIDB4RjAsIDB4MjEsIDB4NTAsIDB4MDYsIDB4MjAsIDB4MEIsIDB4ODAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDAxLCAweEMwLCAweDg2LCAweDA0LCAweDE3LCAweDAwLCAweDY4LCAweDA4LCAweEEyLCAweDAxLCAweEQwLCAweDA3LCAweDA4LAorMHgxRiwgMHgyMiwgMHg3QywgMHg0OCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkMsIDB4ODIsIDB4RjAsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDZDLCAweDIyLCAweEYwLCAweDQ5LCAweEM0LCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwQSwgMHhEMCwgMHgyOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg1MCwgMHgwMiwKKzB4MzAsIDB4MDksIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDIwLCAweDJDLCAweDAwLCAweDlELCAweDQwLCAweDc0LCAweDAyLCAweEQwLCAweEE5LCAweDQwLCAweDI3LCAweDEwLAorMHg5NCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgyOSwgMHgwNCwgMHhBNywgMHgwMSwgMHg5RCwgMHgxMSwgMHhGNCwgMHg0RSwKKzB4QzIsIDB4MjksIDB4NTAsIDB4MjQsIDB4MDAsIDB4OEQsIDB4MDQsIDB4NDQsIDB4MkEsIDB4NTAsIDB4MDksIDB4NDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAyLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgyMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMywgMHgwMCwgMHg5MCwgMHg0MCwgMHg2NCwgMHgwMiwKKzB4RDAsIDB4MDksIDB4MDEsIDB4MjYsIDB4ODIsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDIsIDB4QzAsIDB4MjgsIDB4NDAsIDB4MjQsCisweDAwLCAweDlDLCAweDgwLCAweDU0LCAweDAyLCAweDEyLCAweDI5LCAweDQ2LCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMSwgMHgwMCwgMHg4RCwgMHg0OCwgMHgzNCwgMHgwMiwKKzB4RDEsIDB4MDgsIDB4NDAsIDB4MjMsIDB4NjIsIDB4ODEsIDB4MDgsIDB4MDQsIDB4MEEsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsCisweDIxLCAweDhELCAweDIwLCAweDM0LCAweDAyLCAweEQwLCAweEM4LCAweDQwLCAweDIwLCAweDAxLCAweDhELCAweDgwLCAweDEwLAorMHg1MywgMHg1MiwgMHg0OCwgMHg0MSwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUQsIDB4QjgsIDB4NDYsIDB4MDAsIDB4MUYsIDB4MzYsIDB4N0MsIDB4NTAsIDB4RjAsIDB4NDUsIDB4QzEsIDB4ODcsCisweDAwLCAweDEyLCAweDE2LCAweDZDLCAweDUwLCAweEYxLCAweDQxLCAweDgxLCAweDQ2LCAweDAwLCAweDBGLCAweDBBLCAweDdDLAorMHgwNCwgMHhGMCwgMHgzMSwgMHhDNCwgMHhDNCwgMHgwMiwgMHgxRiwgMHgwMCwgMHg1OCwgMHgxMCwgMHgzMCwgMHg0MSwgMHhFMiwKKzB4NzQsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4QTcsCisweDAwLCAweDlGLCAweDI0LCAweDc4LCAweDgyLCAweEYwLCAweDA5LCAweENBLCAweDJGLCAweDAxLCAweEZDLCAweDA0LCAweDdDLAorMHgwNiwgMHhGMSwgMHgwOSwgMHg4MCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgwMSwgMHg3QywgMHgwQSwgMHhCMCwgMHhDOSwgMHhDMCwKKzB4NkYsIDB4MDIsIDB4QkYsIDB4MDAsIDB4RUMsIDB4NTIsIDB4RjAsIDB4NEIsIDB4RDEsIDB4NzcsIDB4NjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEE4LCAweDZGLCAweDAwLCAweDlGLCAweDE2LCAweEZDLAorMHgwMiwgMHgzNCwgMHg0QiwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMiwgMHhGQywgMHgyMiwgMHhGMCwgMHgwQiwgMHhDMCwKKzB4MkMsIDB4NjAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4NDYsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MjQsIDB4MDAsIDB4QjMsIDB4ODAsCisweENELCAweDgyLCAweEYwLCAweDBCLCAweEMwLCAweDc3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4NywgMHgwMCwgMHgxRCwgMHgwMiwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwKKzB4MDQsIDB4MDEsIDB4MEQsIDB4OEEsIDB4NzQsIDB4MDQsIDB4RDAsIDB4QTEsIDB4NDAsIDB4MDQsIDB4MDgsIDB4MTEsIDB4MDAsCisweDc0LCAweDA4LCAweEQwLCAweDQxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweEQxLCAweDAxLAorMHg0MiwgMHg2MywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhBMCwKKzB4QTEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MEEsIDB4MTEsIDB4MkMsIDB4NDAsIDB4MjAsIDB4MjQsIDB4ODksIDB4NDAsCisweDM0LCAweDFBLCAweEQwLCAweDA4LCAweDQwLCAweDIwLCAweDEwLCAweDg1LCAweDAwLCAweDM0LCAweDAyLCAweEQ4LCAweDA4LAorMHg2MSwgMHgyMCwgMHg0MCwgMHg5NSwgMHgwMCwgMHgxNCwgMHgwNiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsCisweDcwLCAweDAyLCAweDEyLCAweDA5LCAweDQwLCAweEE0LCAweDBBLCAweDlELCAweDIwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LAorMHgxMCwgMHgyNCwgMHgxMCwgMHg5NSwgMHgyMCwgMHg3NCwgMHg4MiwgMHhEMCwgMHgwOCwgMHg0QywgMHgyNCwgMHgwNCwgMHg5NSwKKzB4MDgsIDB4NTQsIDB4QTMsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDJBLCAweDI1LCAweDIwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LAorMHhEMCwgMHg2NCwgMHgwMCwgMHg5RiwgMHgwMiwgMHhGQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDNCwgMHhBNCwgMHgwNCwgMHg5NywKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MDksIDB4NTAsIDB4NjQsIDB4MDIsIDB4ODcsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDE3LCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorMHgwMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3RSwgMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHg2NywgMHgyMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzMsIDB4MjcsIDB4MDIsIDB4OUIsIDB4MTAsIDB4N0MsIDB4ODIsIDB4RjAsCisweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDlBLCAweDAwLCAweDZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDVCLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxNywKKzB4MDAsIDB4NEMsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzgsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDIsIDB4NkMsIDB4MjAsIDB4RjAsCisweDgxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAwLCAweDM0LCAweDAxLCAweEMwLCAweDg3LCAweDAwLAorMHgxMywgMHgwNCwgMHg3QywgMHgwNCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MTQsIDB4MDQsIDB4NTEsIDB4MDAsIDB4MkMsIDB4MDEsIDB4RDAsCisweEE3LCAweDQ4LCAweDE3LCAweDA4LCAweDUxLCAweDAwLCAweDQ0LCAweDAxLCAweEQwLCAweDI2LCAweDQwLCAweDVCLCAweDIwLAorMHg3QywgMHg4MywgMHhDNCwgMHgwMSwgMHgxMSwgMHgwNywgMHg0MSwgMHgxNywgMHgwMCwgMHg3MCwgMHgwMCwgMHhGNCwgMHgwMSwKKzB4MTAsIDB4MDcsIDB4NDQsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDgwLCAweDMyLCAweDAwLCAweEM1LCAweDAwLCAweDE0LCAweDI3LCAweDlBLCAweDBDLCAweDQ0LCAweDMzLCAweDAwLAorMHhDMCwgMHgwMCwgMHgyNCwgMHgwNywgMHhEMCwgMHgyQywgMHg0MCwgMHg2MywgMHgyMCwgMHhDRCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4OTAsIDB4NUMsIDB4NDAsIDB4MzcsIDB4MDAsIDB4ODEsIDB4MDMsIDB4MzAsIDB4MDMsIDB4OTQsIDB4MUMsIDB4NDAsIDB4NDMsCisweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDc5LCAweDAwLAorMHhFMSwgMHgwMSwgMHhBNSwgMHgwMywgMHhEMCwgMHgwNiwgMHg0MCwgMHg3QiwgMHgwMiwgMHhFMSwgMHg0OSwgMHg4NCwgMHgwMiwKKzB4RDAsIDB4MDYsIDB4NDAsIDB4QkIsIDB4ODAsIDB4NkQsIDB4MDMsIDB4ODQsIDB4NDYsIDB4OTIsIDB4MDYsIDB4NDAsIDB4MzMsCisweDAwLCAweEUxLCAweDAyLCAweEI0LCAweDA3LCAweDkwLCAweDI2LCAweDQwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OSwgMHgwMCwgMHhGNywgMHgwOSwgMHg5QywgMHgwNiwKKzB4QjAsIDB4MUUsIDB4QzAsIDB4N0YsIDB4NDUsIDB4RTIsIDB4MTUsIDB4QUMsIDB4MDcsIDB4RjAsIDB4MUEsIDB4QzAsIDB4NkIsCisweDIwLCAweEJGLCAweDAxLCAweDhDLCAweDA2LCAweEEwLCAweDFBLCAweEMwLCAweDdCLCAweDA1LCAweEEzLCAweDAxLCAweEZDLAorMHgwNywgMHhCMCwgMHgxRSwgMHhDMCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QjgsIDB4MzEsIDB4MDAsIDB4REYsIDB4MEMsIDB4NUMsIDB4MDIsIDB4RjEsIDB4MDEsIDB4QzAsIDB4QjcsCisweDAxLCAweERGLCAweDg2LCAweDdDLCAweDIyLCAweEYwLCAweDA5LCAweEUwLCAweDI2LCAweDAwLCAweDFGLCAweDAwLCAweDNDLAorMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMSwgMHhERiwgMHg4MCwgMHg3QywgMHgwMiwgMHg3MiwgMHgwNSwgMHhDMCwKKzB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4N0QsCisweDAwLCAweEZGLCAweDAxLCAweERFLCAweDI3LCAweDcwLCAweDlCLCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDIxLCAweERDLAorMHgyNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg2RiwgMHgwMCwgMHg3QiwgMHgwOSwgMHhDQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwKKzB4N0MsIDB4MjYsIDB4QkYsIDB4ODEsIDB4RkMsIDB4MjcsIDB4MzEsIDB4OUYsIDB4QzAsIDB4MTgsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweDg0LAorMHgwMiwgMHhDMCwgMHgyMiwgMHg0MiwgMHgzQiwgMHgwMCwgMHhFOSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhEMCwgMHgyMiwgMHg0MCwKKzB4M0IsIDB4MDAsIDB4MTksIDB4MDEsIDB4OTQsIDB4MEEsIDB4NTAsIDB4MDYsIDB4NDAsIDB4NzksIDB4MEEsIDB4RUQsIDB4MDAsCisweEI0LCAweDMzLCAweDMwLCAweDIyLCAweDQwLCAweDU0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHg5NCwgMHg4MiwgMHg1MCwgMHgwMiwgMHgwMCwKKzB4M0IsIDB4MDAsIDB4RUQsIDB4MDgsIDB4OTQsIDB4MDMsIDB4RDEsIDB4MEEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4MzksIDB4MTAsCisweDI0LCAweDAzLCAweEQwLCAweDA0LCAweDQwLCAweDM4LCAweDAwLCAweEFELCAweDAwLCAweEI0LCAweDA5LCAweDEyLCAweDBFLAorMHg2MCwgMHg2MSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyMCwKKzB4MjEsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDAsIDB4NDAsIDB4RjMsIDB4MDAsIDB4Q0QsIDB4MDIsCisweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQ4LCAweDczLCAweDg0LCAweDA5LCAweDAxLCAweDM0LCAweDAzLCAweEQwLCAweDA0LAorMHg2NCwgMHgzMSwgMHg4MiwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwNCwgMHgxMSwgMHgwMCwgMHg0MCwgMHgwOSwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MzUsIDB4MTAsIDB4RkYsIDB4MDAsCisweDU0LCAweDAzLCAweDcwLCAweDA5LCAweEMwLCAweDNGLCAweDAzLCAweEZGLCAweDAxLCAweDVDLCAweDAzLCAweEYwLCAweDA5LAorMHhDOCwgMHhBNywgMHgwMSwgMHg5QiwgMHgwMSwgMHg2NCwgMHgwMiwgMHhCMCwgMHgwRCwgMHhDQywgMHhGQywgMHgxMiwgMHg5RCwKKzB4MEEsIDB4N0MsIDB4OTAsIDB4MzMsIDB4MTksIDB4QzIsIDB4NzUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDBELCAweDAwLCAweDM3LCAweDIwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDI5LAorMHhDMCwgMHgzNywgMHgwOCwgMHhEQiwgMHgxOCwgMHg3RSwgMHgwMiwgMHhGMiwgMHgwMSwgMHg0MCwgMHgzNywgMHgwMCwgMHgxRSwKKzB4MDAsIDB4NUMsIDB4MEEsIDB4MzgsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4NzQsCisweDgxLCAweDUwLCAweDE2LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLAorMHgwOCwgMHgzRiwgMHgxMCwgMHhERiwgMHgwMCwgMHhGQywgMHgwQiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhERiwKKzB4MDAsIDB4RkMsIDB4MDcsIDB4RjEsIDB4MEEsIDB4QzAsIDB4MkMsIDB4NDAsIDB4MzIsIDB4MDEsIDB4RkMsIDB4MDIsIDB4RjIsCisweDFBLCAweDgwLCAweDNDLCAweDAwLCAweEIzLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMxLCAweDA3LCAweDI2LAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHgwMCwgMHhERCwKKzB4MDAsIDB4NjQsIDB4MDcsIDB4RDAsIDB4MTksIDB4NDIsIDB4MzMsIDB4MDAsIDB4RDEsIDB4ODAsIDB4NzQsIDB4MDcsIDB4RDAsCisweDM5LCAweDQwLCAweDAwLCAweDAwLCAweDExLCAweDA3LCAweDc0LCAweDAwLCAweEQwLCAweDE5LCAweEMwLCAweDM3LCAweDAwLAorMHg5QiwgMHgxOCwgMHg2NCwgMHgwQywgMHhEMCwgMHgzMSwgMHg0MCwgMHgwNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDgsCisweDE5LCAweDQwLCAweDM3LCAweDAwLCAweEQ5LCAweDAwLCAweDc0LCAweDEzLCAweEQwLCAweDExLCAweDQwLCAweEE2LCAweDAwLAorMHgzNSwgMHgwOCwgMHg3NCwgMHgwMywgMHhDOCwgMHg0OSwgMHg0NiwgMHgzOSwgMHgwMCwgMHg5MSwgMHgwMCwgMHg2MCwgMHgwNCwKKzB4RDAsIDB4MTksIDB4NDAsIDB4MDcsIDB4MDgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDIwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDI0LCAweDAyLCAweEQ4LCAweDA4LCAweDQwLCAweDM3LCAweDAwLAorMHhDMSwgMHgwMCwgMHgzNCwgMHg4MiwgMHhEMCwgMHgwMCwgMHg0MCwgMHgzMCwgMHg4MCwgMHgwNSwgMHgwMCwgMHgzNCwgMHgwMiwKKzB4RDAsIDB4MDAsIDB4NDAsIDB4MzIsIDB4MDEsIDB4QzksIDB4QTAsIDB4MjQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4NDMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDk4LCAweDM2LCAweDAwLAorMHhGRiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGQiwgMHgwMCwgMHg3NCwgMHgwMiwKKzB4RDEsIDB4MDEsIDB4QzAsIDB4MjQsIDB4MDAsIDB4MTcsIDB4MDQsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4M0QsCisweDA1LCAweDEzLCAweDQwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMyLCAweDA3LCAweDY0LCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHhCOCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhFQywgMHgwMiwKKzB4RjAsIDB4MDMsIDB4Q0MsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RjgsIDB4MDIsIDB4RjIsIDB4MDMsIDB4ODgsIDB4MUYsCisweDAwLCAweDFCLCAweDE2LCAweEZDLCAweDAxLCAweEYwLCAweDAzLCAweEMwLCAweDM3LCAweDAwLCAweDdGLCAweDAwLCAweEZDLAorMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QUEsIDB4N0IsIDB4MTIsIDB4RUYsIDB4MDksIDB4RUMsIDB4MDcsIDB4QjAsIDB4OUUsIDB4QzAsIDB4N0EsCisweDAwLCAweEY3LCAweDA5LCAweEVDLCAweDA3LCAweEYwLCAweDNGLCAweEMwLCAweDdCLCAweDAwLCAweEY3LCAweDI5LCAweENDLAorMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHhBNywgMHhCMCwgMHgxRiwgMHhDMCwKKzB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTgsIDB4MDcsCisweDAwLCAweDFELCAweDQ0LCAweDQ0LCAweDA0LCAweDMyLCAweDAxLCAweDQwLCAweDQ0LCAweDIwLCAweDExLCAweDA0LCAweDRDLAorMHgxMCwgMHgxMCwgMHgwMSwgMHhDMCwgMHg0NCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgxMCwgMHhEMCwgMHgwMSwgMHg0MCwKKzB4NDQsIDB4MTAsIDB4MTEsIDB4MjAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MTEsIDB4QzAsIDB4MEUsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDMzLCAweDExLCAweERELCAweDAwLCAweDI0LAorMHgwMywgMHg5MSwgMHg0RCwgMHg0MiwgMHgzMywgMHgwMCwgMHhDNSwgMHgwMCwgMHgzNCwgMHg0MywgMHhEMCwgMHg0QywgMHg0MCwKKzB4MzIsIDB4MDAsIDB4QzUsIDB4NDQsIDB4MTQsIDB4NDMsIDB4RDAsIDB4MEMsIDB4NjIsIDB4MzIsIDB4MDAsIDB4QzEsIDB4ODAsCisweDM0LCAweDEzLCAweDkwLCAweDBELCAweDQyLCAweDRELCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgwMCwgMHg1NCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwKKzB4MDUsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsCisweDU0LCAweDAwLCAweERBLCAweDAxLCAweDQ0LCAweDA0LCAweDQwLCAweDExLCAweDAwLCAweDM0LCAweDAwLCAweDExLCAweDAxLAorMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwKKzB4MzcsIDB4MDgsIDB4REYsIDB4ODAsIDB4NkMsIDB4ODMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDYsIDB4MDAsCisweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDMzLCAweDAwLCAweEQ3LCAweDAwLCAweDVDLCAweDAzLCAweEUwLCAweDBELAorMHhDMCwgMHgzMiwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHhCMSwgMHgwQywgMHhDMCwgMHgyMSwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsCisweEVDLCAweDAwLCAweDcwLCAweDAzLCAweEM4LCAweDBFLCAweDIwLCAweDNFLCAweDAwLCAweENDLCAweDAwLCAweEYwLCAweDAzLAorMHhDMCwgMHgwQywgMHgwOCwgMHgzQiwgMHgwMCwgMHhFQywgMHgwMCwgMHhGMiwgMHgwMywgMHhDMCwgMHgwRSwgMHgwMCwgMHgzRiwKKzB4MDAsIDB4RTQsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MUUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDAwLCAweDM1LCAweDIwLCAweEQ3LCAweEM4LCAweDVDLCAweDgzLCAweEMwLCAweDBELAorMHhDMCwgMHgzNSwgMHgwMSwgMHhENywgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwgMHg0RCwgMHhDMCwgMHgzNiwgMHgwMCwgMHhENywKKzB4MDAsIDB4N0MsIDB4MTMsIDB4MzAsIDB4NEQsIDB4QzQsIDB4MzYsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEQwLCAweDI4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAorMHhBMCwgMHhDNCwgMHgwMCwgMHgwMSwgMHg4MywgMHgwNCwgMHgwNCwgMHgxMCwgMHhFMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgxMSwKKzB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MTEsIDB4MDAsIDB4NzQsIDB4NDgsIDB4QjAsCisweDUwLCAweDQwLCAweEM3LCAweDAwLCAweDExLCAweDAwLCAweDcwLCAweDI0LCAweEQxLCAweDAxLCAweDQwLCAweDRELCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgyMCwgMHhCMCwgMHgwNCwgMHhDNSwKKzB4NTMsIDB4MTQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDIsIDB4MzEsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsCisweDBELCAweDAwLCAweDMyLCAweDAwLCAweEM1LCAweDAwLCAweDM0LCAweDBGLCAweDkyLCAweDNDLCAweDQ0LCAweEIyLCAweDA5LAorMHhDNSwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEYsIDB4MDgsIDB4NEMsIDB4MDYsIDB4MzEsIDB4MDEsIDB4QzQsIDB4MDQsIDB4MTEsCisweDEzLCAweDQwLCAweDQ4LCAweDA4LCAweDI1LCAweDAxLCAweDg0LCAweDA0LCAweEQwLCAweDEyLCAweDQwLCAweDRCLCAweDAwLAorMHgyMSwgMHgwMSwgMHhGNCwgMHgwNCwgMHhEMiwgMHg5MiwgMHg0MCwgMHg0QiwgMHgwQywgMHgyMSwgMHgwMSwgMHhCNCwgMHgxNCwKKzB4RDAsIDB4OTIsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDEwLCAweDMwLCAweDAwLCAweEM3LCAweDA4LCAweDFDLCAweDYzLCAweDcyLCAweDBDLCAweEMwLCAweDMxLCAweDAyLAorMHhENSwgMHgwMCwgMHgxQywgMHgxMywgMHhGMCwgMHg0QywgMHhDMCwgMHgzMiwgMHgwMSwgMHhDNywgMHgyOCwgMHgzQywgMHgyMywKKzB4QjAsIDB4OEMsIDB4QzAsIDB4MzIsIDB4MDAsIDB4QzYsIDB4MDAsIDB4M0MsIDB4NjMsIDB4RjIsIDB4OEMsIDB4QzAsIDB4NEEsCisweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDBELCAweDAwLAorMHgzRiwgMHgwMCwgMHhCQywgMHgwMCwgMHg3MCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwQSwgMHgzQiwgMHgwOCwgMHhGQywgMHgwMCwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDgsIDB4QkMsIDB4QTAsIDB4QTAsIDB4ODEsIDB4QzAsIDB4MEIsCisweDEwLCAweDFGLCAweDAwLCAweEZDLCAweDMwLCAweEYwLCAweDkwLCAweEMwLCAweDA5LCAweDYwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywgMHgwMCwgMHhEMywgMHgwMCwgMHg3RSwgMHgwMywKKzB4NzAsIDB4MEQsIDB4ODAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzAsCisweDAwLCAweERBLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDMwLCAweDAwLCAweEQzLCAweDAwLCAweDdDLAorMHgwMywgMHgzNCwgMHgwRCwgMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTMsIDB4ODAsIDB4MEQsIDB4MDgsIDB4MjAsIDB4MDAsIDB4QjIsIDB4MDAsIDB4RDEsIDB4MDIsIDB4NDAsIDB4MEIsCisweDAwLCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweDUwLCAweDAyLCAweEMwLCAweDA5LCAweDAwLCAweDIxLCAweEEwLCAweEI0LAorMHgwMCwgMHhEMCwgMHgwMiwgMHhDNCwgMHgwQSwgMHgwMCwgMHgyQiwgMHg4MCwgMHhCNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHhDMCwKKzB4NEUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDIsIDB4NzksCisweDIwLCAweEU5LCAweDAxLCAweDk0LCAweDg3LCAweEQwLCAweDFFLCAweDYwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEY0LAorMHgwNywgMHhEMCwgMHgxRiwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFOSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRiwgMHg0MCwKKzB4N0UsIDB4MDAsIDB4RTksIDB4MjEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDAyLCAweDAwLCAweDA5LCAweDAwLCAweDM0LAorMHgwMCwgMHhEMiwgMHgwMSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwKKzB4MDEsIDB4ODAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4ODAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4MDAsCisweDM2LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDVBLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHgxMSwgMHgwMCwgMHg1QiwgMHgwMCwgMHg3OCwgMHgwMSwgMHg3MCwgMHgwNSwgMHhFMCwKKzB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0UsIDB4MDEsIDB4QjEsIDB4MDQsIDB4QzAsIDB4MTYsIDB4MDAsIDB4NUIsIDB4MjAsCisweDVDLCAweDAxLCAweEYwLCAweDA1LCAweEM0LCAweDE0LCAweDAwLCAweDVCLCAweDIwLCAweDdDLCAweDAxLCAweDMwLCAweDA1LAorMHhDMCwgMHg1QywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwKKzB4OEYsIDB4NDAsIDB4MzcsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4RTAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsCisweEZBLCAweDAwLCAweDcwLCAweDIzLCAweEMwLCAweDBGLCAweDAwLCAweDMzLCAweDAwLCAweEY0LCAweDA4LCAweEYwLCAweDIzLAorMHhDMCwgMHg4RiwgMHgwMCwgMHgzRiwgMHg0MCwgMHhGNCwgMHgwOCwgMHhGMCwgMHgwMywgMHhDMCwgMHg0QiwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDEsIDB4OTcsIDB4MDAsCisweDdDLCAweDE2LCAweDUwLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlGLCAweEEwLCAweDdDLCAweDAyLCAweDMzLCAweDA5LAorMHhDMiwgMHgyNSwgMHgyMCwgMHg5MywgMHg0MCwgMHg3NCwgMHgwMiwgMHgwMiwgMHgwOSwgMHg1NCwgMHhBNCwgMHgwMCwgMHg5NywKKzB4MDAsIDB4N0MsIDB4MDYsIDB4MzIsIDB4MjksIDB4QzIsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweEU2LCAweDAwLCAweDkxLCAweDA1LCAweDM0LCAweDg2LCAweDEwLCAweDM5LAorMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHgxMCwgMHhBMCwgMHgwNCwgMHg5MSwKKzB4MDAsIDB4MzQsIDB4MDYsIDB4QjIsIDB4MjgsIDB4NDAsIDB4RTAsIDB4MDgsIDB4OTUsIDB4MDAsIDB4MzAsIDB4MDYsIDB4NTEsCisweDA4LCAweDQwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBMCwgMHgyNCwgMHgwMCwgMHhCNSwgMHgwNCwgMHhGNCwgMHgwMiwgMHg1MCwgMHg2QiwgMHg0MCwgMHgyRCwgMHgwMCwgMHhCRCwKKzB4ODAsIDB4RDQsIDB4ODIsIDB4MTgsIDB4MEIsIDB4NDEsIDB4MkMsIDB4QzAsIDB4QjEsIDB4MDAsIDB4RDQsIDB4MTIsIDB4MTAsCisweDJCLCAweDQwLCAweDJELCAweDkwLCAweEIwLCAweDgwLCAweEY0LCAweDIyLCAweDEyLCAweDBCLCAweDQyLCAweDYwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzRCwgMHgwMCwgMHhBMSwKKzB4MDAsIDB4RjQsIDB4MDIsIDB4NTAsIDB4MEEsIDB4NDAsIDB4MjgsIDB4MjAsIDB4QUMsIDB4MjgsIDB4QjQsIDB4MjIsIDB4NTAsCisweDBBLCAweDQwLCAweDI4LCAweDAwLCAweEExLCAweEM4LCAweEY0LCAweDAzLCAweEQwLCAweDBBLCAweDQwLCAweDJELCAweDAwLAorMHhBNCwgMHgwMCwgMHhGNCwgMHgyMywgMHg1MCwgMHgwRSwgMHg0MCwgMHg0MSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4MzgsIDB4MDYsIDB4MDAsIDB4MTcsIDB4ODAsIDB4N0MsIDB4MDAsIDB4NzAsCisweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFDLCAweDAyLCAweDdDLCAweDA4LCAweDMwLCAweDAxLCAweEMwLCAweDA1LCAweDAwLAorMHgxMywgMHgwMiwgMHg1QywgMHgwMCwgMHgzMiwgMHhBMSwgMHhDMCwgMHgxNSwgMHgwMCwgMHgxNywgMHgwQSwgMHgzOCwgMHgwOCwKKzB4MzAsIDB4MDMsIDB4QzgsIDB4NzQsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFELCAweEIwLCAweDI1LCAweDA1LCAweDlGLCAweDM0LCAweDdDLCAweDAyLCAweEIwLCAweDQ5LCAweEMxLCAweDI3LCAweDAwLAorMHg5RiwgMHgwNCwgMHgyQywgMHgxMiwgMHhGMCwgMHg0OCwgMHhDOSwgMHgyNywgMHgwMCwgMHg5RiwgMHgwNCwgMHg3QywgMHg1MiwKKzB4QjAsIDB4MTksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDEsIDB4N0MsIDB4MTIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NzcsCisweDQwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweDgwLCAweDJGLCAweDAwLAorMHhCRiwgMHgwOCwgMHhEQywgMHgwMiwgMHhGOCwgMHgwQiwgMHhDMiwgMHgyRiwgMHgwMCwgMHg4RiwgMHgwMiwgMHg3QywgMHgwMiwKKzB4MzQsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDAsIDB4OTMsIDB4MDAsIDB4RkMsIDB4MEEsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MkMsCisweDQwLCAweDgzLCAweDAwLCAweENDLCAweDAyLCAweEIwLCAweDBCLCAweEMwLCAweDc0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg0NywgMHgwMSwgMHgxRCwgMHgyNSwgMHg0NCwgMHgwMCwKKzB4RDEsIDB4NDEsIDB4NDEsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDQsIDB4NzQsIDB4ODAsIDB4MTAsIDB4MDEsIDB4NDIsIDB4MDUsCisweDA4LCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweEIwLCAweDAxLCAweDQyLCAweDA0LCAweDAwLCAweDExLCAweDQwLCAweDQ0LAorMHgwMCwgMHgxMSwgMHgwMSwgMHg0MCwgMHg2MSwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MDAsIDB4MzEsIDB4MTUsIDB4OEQsIDB4NDQsIDB4MTAsIDB4MDIsIDB4RDgsIDB4MEMsIDB4NDAsIDB4MjMsCisweDAwLCAweDhELCAweDA0LCAweDM0LCAweDQyLCAweDEwLCAweDA5LCAweDQwLCAweDIwLCAweDAwLCAweDgxLCAweDE0LCAweDM0LAorMHgwMiwgMHgxMCwgMHgwOCwgMHg1MCwgMHgyMCwgMHg4MCwgMHg4MSwgMHgyMCwgMHgxNSwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4NDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MkEsIDB4MjUsCisweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LAorMHgwMiwgMHgxMSwgMHgwOSwgMHg0MCwgMHgyNSwgMHgyMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHg5MCwgMHgwOCwgMHg2MCwKKzB4MjQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NTQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjEsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDIyLCAweDI1LCAweDEwLCAweDlGLCAweDAwLCAweDVDLAorMHgwMiwgMHhEMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwKKzB4MjAsIDB4MDgsIDB4OTMsIDB4ODAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjAsIDB4MDAsIDB4OTMsIDB4MDAsCisweDVDLCAweDgyLCAweEYwLCAweDA5LCAweEMwLCAweDE0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4NDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMxLCAweDI3LCAweDA0LCAweDlGLCAweDAwLCAweDZDLCAweDQyLCAweDMwLCAweDA5LAorMHg0MCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwKKzB4MDUsIDB4MDAsIDB4MTcsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4NDEsIDB4QzQsIDB4MDcsIDB4MDEsIDB4MTcsIDB4MDAsCisweDRDLCAweDAwLCAweDcwLCAweDAxLCAweEMzLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDVDLCAweDQwLCAweEIwLCAweDAxLAorMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMSwgMHg1MSwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MUMsIDB4MDIsIDB4N0QsIDB4RDgsCisweDQ0LCAweDAxLCAweDcwLCAweDI3LCAweDQwLCAweDlGLCAweDAwLCAweDUxLCAweDIwLCAweDZDLCAweDAxLCAweEQwLCAweDc2LAorMHg0MiwgMHhERiwgMHgwMCwgMHg1RCwgMHg0MCwgMHhFQywgMHgwRCwgMHgxMSwgMHgyNywgMHg0MCwgMHgxQywgMHgwMCwgMHg1OSwKKzB4MDAsIDB4RDQsIDB4MDEsIDB4MTQsIDB4MDYsIDB4NTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDMyLCAweDAwLCAweEQ1LCAweDQwLCAweDA0LCAweDI2LCAweEQwLCAweDBDLAorMHg0MCwgMHhBMywgMHgwMCwgMHhDNSwgMHgwMCwgMHg0NCwgMHgwMywgMHg1OCwgMHgwQywgMHg0OCwgMHhGMywgMHgwMywgMHhDRCwKKzB4MDAsIDB4NDYsIDB4MDcsIDB4OTAsIDB4MkMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDAsIDB4MEYsIDB4MDAsCisweDNDLCAweDQwLCAweDQwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHg4MCwgMHgzOCwgMHgyMCwgMHhFRCwgMHg0MCwgMHg4NSwgMHgwMywgMHg1OCwgMHgwRSwgMHg2OCwgMHhFRiwgMHgwMCwgMHhGNSwKKzB4MDksIDB4QTQsIDB4MjMsIDB4RDAsIDB4MDYsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RkQsIDB4NDUsIDB4QTQsIDB4MEIsIDB4MTAsCisweDAyLCAweDQxLCAweDJBLCAweDA0LCAweEY5LCAweDA0LCAweDk2LCAweDBCLCAweDEyLCAweDBFLCAweDQ1LCAweDEwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg1OSwgMHgwMCwgMHg3NywKKzB4MDEsIDB4OEMsIDB4MDcsIDB4RjEsIDB4MUUsIDB4NDAsIDB4NkIsIDB4MDAsIDB4RTcsIDB4MTUsIDB4OEMsIDB4MDcsIDB4NzAsCisweDE2LCAweDgwLCAweDdCLCAweDAwLCAweEVGLCAweDAxLCAweERDLCAweDA1LCAweEIwLCAweDFFLCAweEQwLCAweDVBLCAweDA4LAorMHhFRiwgMHgwNywgMHhDQywgMHgwNiwgMHgzMCwgMHgxRSwgMHhDMCwgMHg1MSwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MTUsIDB4MDAsIDB4NUYsIDB4NDAsIDB4N0MsIDB4ODMsIDB4RjAsCisweDBELCAweEMwLCAweDIzLCAweDAwLCAweERCLCAweDA2LCAweDdDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDM3LCAweDAwLAorMHhDRiwgMHgwOCwgMHg3RSwgMHg4MywgMHhGMCwgMHg2MCwgMHhENSwgMHgxNSwgMHgyMCwgMHhEQiwgMHgwNiwgMHg3QywgMHgwMiwKKzB4RDAsIDB4MEMsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA2LCAweDIwLCAweDdELCAweDBBLCAweEZGLCAweDAxLCAweERDLCAweEE3LCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAwLAorMHhFNywgMHgwMSwgMHg4QywgMHgwRiwgMHhCMCwgMHgxMywgMHhDOCwgMHg3QiwgMHgwMCwgMHhGMywgMHgwMywgMHhDQywgMHgwNywKKzB4MzAsIDB4MUIsIDB4RDAsIDB4NzgsIDB4QTIsIDB4RkIsIDB4MDMsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUEsIDB4QzAsIDB4MTgsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDM5LCAweDAwLAorMHhFQywgMHgxOCwgMHhCNCwgMHg4MywgMHhEMCwgMHgwRSwgMHg0MiwgMHgzQiwgMHgyOCwgMHhFMSwgMHgxMCwgMHg5NCwgMHgwMywKKzB4NTAsIDB4MjIsIDB4NDQsIDB4M0IsIDB4MDYsIDB4RTUsIDB4MDAsIDB4RDQsIDB4MDMsIDB4NTAsIDB4NDMsIDB4NDAsIDB4MjgsCisweDAyLCAweEUxLCAweDA0LCAweDg0LCAweDEzLCAweDcxLCAweDRBLCAweDQ4LCAweDU0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMiwgMHgzOSwgMHgxMCwgMHhFRCwgMHgwMCwgMHg5NCwgMHgwMywKKzB4QzAsIDB4MDYsIDB4NDAsIDB4M0IsIDB4MDQsIDB4RjUsIDB4MDAsIDB4RTQsIDB4NDMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4M0YsCisweDAwLCAweEZELCAweDAwLCAweEQ0LCAweDAxLCAweDUwLCAweDBBLCAweDYxLCAweDE4LCAweDg0LCAweEUxLCAweEIwLCAweDg0LAorMHg0MiwgMHhEMiwgMHgwQSwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MjgsIDB4NjUsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzYsIDB4MTMsIDB4RDAsIDB4MzksIDB4NDAsIDB4RjMsCisweDAwLCAweEM1LCAweDAzLCAweDM0LCAweDBCLCAweDUwLCAweEEwLCAweDQwLCAweEYzLCAweDAwLCAweERELCAweDAyLCAweDE0LAorMHgyQSwgMHg1MCwgMHgzOCwgMHg2MiwgMHg0MCwgMHgwNCwgMHhDOSwgMHg1MywgMHgwNSwgMHgwNCwgMHg1MCwgMHgyOCwgMHg0MCwKKzB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTAsIDB4RTUsCisweDEwLCAweDlGLCAweDAxLCAweDVDLCAweDQzLCAweEQwLCAweEExLCAweEM0LCAweDA3LCAweDAyLCAweEY3LCAweDAxLCAweEVDLAorMHgwNywgMHgzMCwgMHhCMSwgMHhDOCwgMHhCNywgMHgwMCwgMHhGRiwgMHgwMSwgMHg1RSwgMHgwRSwgMHgxMCwgMHg5OSwgMHhDNCwKKzB4NDQsIDB4MDAsIDB4RUIsIDB4MDAsIDB4MEMsIDB4ODEsIDB4RjMsIDB4M0QsIDB4QzYsIDB4NTQsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDI3LCAweDA2LCAweDlGLCAweDA0LCAweDdDLAorMHgwMywgMHhGMCwgMHg4MSwgMHhDMCwgMHhBNywgMHgxMCwgMHhEQSwgMHgwMCwgMHg1QywgMHg0MywgMHg3OCwgMHgyMSwgMHg4MCwKKzB4MzcsIDB4MEMsIDB4RDcsIDB4QjgsIDB4NzgsIDB4MDAsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTcsIDB4NDAsIDB4RDcsIDB4MDAsCisweDdDLCAweDgxLCAweDcwLCAweEFELCAweEMxLCAweDM3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4MSwgMHgwOCwgMHgwRiwgMHgwMCwgMHgzQiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwKKzB4MEUsIDB4MDAsIDB4RjMsIDB4MTAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MDMsIDB4NDAsIDB4M0UsIDB4MDAsIDB4RjMsIDB4MDAsCisweEZDLCAweDQwLCAweEYwLCAweDBCLCAweEMwLCAweDBDLCAweDAwLCAweEY3LCAweDAwLCAweEQ0LCAweDU0LCAweDMwLCAweDBGLAorMHhDMCwgMHgwNCwgMHgyOCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwKKzB4QzYsIDB4MDAsIDB4MTEsIDB4MDMsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MTksIDB4NDAsIDB4NjAsIDB4MDEsIDB4REIsIDB4MDAsCisweDU0LCAweDAzLCAweEQwLCAweDExLCAweDQwLCAweEQzLCAweDAwLCAweERCLCAweDAwLCAweDQ0LCAweDBDLCAweEQwLCAweDE4LAorMHhDMCwgMHg4MywgMHgyMCwgMHhEMSwgMHgwMCwgMHg1NCwgMHg4OSwgMHg1MSwgMHg0QywgMHg1MCwgMHg4NCwgMHgwNCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4QzYsIDB4MDAsIDB4MTksIDB4MDMsCisweDc0LCAweDEzLCAweEQ4LCAweDMxLCAweDQwLCAweDY2LCAweDAwLCAweEMxLCAweDgwLCAweDQ0LCAweDAzLCAweEQwLCAweDExLAorMHg0MCwgMHg2NiwgMHgwNCwgMHhEMSwgMHgwMCwgMHg0NCwgMHhDNiwgMHg5MCwgMHgxQiwgMHg0MCwgMHgwNCwgMHgwNiwgMHhGNSwKKzB4MDAsIDB4NDAsIDB4MDksIDB4NTAsIDB4NDUsIDB4NDgsIDB4MDQsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDgzLCAweEQwLCAweDAwLAorMHg0MCwgMHgyNCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgwMCwgMHg0MCwgMHgyNywgMHgwMCwgMHhDOSwKKzB4MDAsIDB4MDQsIDB4ODIsIDB4QzIsIDB4MTksIDB4NDAsIDB4MDIsIDB4QTAsIDB4RDEsIDB4NDAsIDB4NTQsIDB4MDIsIDB4NTAsCisweDA0LCAweDQyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgxOCwgMHgwNiwgMHgxMCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMywgMHhEQSwgMHgwMSwgMHhDMCwgMHgyNiwgMHgwMCwgMHhGMywKKzB4MDAsIDB4QzQsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzQsIDB4MjYsIDB4MDAsIDB4RjMsIDB4MDAsIDB4NUQsIDB4MDAsIDB4RjAsCisweDBCLCAweEMwLCAweDA0LCAweDAwLCAweEU3LCAweDAwLCAweDVDLCAweDAwLCAweDMwLCAweDA5LCAweEQwLCAweDA0LCAweDYwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHhCOCwgMHgyRiwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4RkMsIDB4MDMsIDB4RDAsIDB4MEIsIDB4QzAsIDB4MkIsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RTAsCisweDAzLCAweEMwLCAweDJGLCAweDAwLCAweEVGLCAweDAwLCAweEZDLCAweDAyLCAweEYxLCAweDBCLCAweEMyLCAweDBGLCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwQiwgMHhDNCwgMHgxNywgMHg2MiwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4NkYsIDB4MDAsIDB4QkYsIDB4MTAsIDB4RkMsIDB4MDUsIDB4MzAsCisweDE2LCAweEM4LCAweDNGLCAweDEwLCAweEZGLCAweDE0LCAweEZDLCAweDAwLCAweDMwLCAweDE3LCAweEMwLCAweDJDLCAweDAwLAorMHg2MywgMHgwMSwgMHhGQywgMHgwRiwgMHgzMCwgMHg0QiwgMHhDMCwgMHg1RiwgMHgwMCwgMHhGMywgMHgwMSwgMHhCQywgMHgwMiwKKzB4QjAsIDB4MUYsIDB4QzgsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDY3LCAweDAwLCAweERELCAweDAxLCAweDc0LCAweDA1LCAweDAwLCAweDE5LCAweDQwLCAweEZGLCAweDMwLAorMHhGRCwgMHgwMywgMHg3NCwgMHgwRCwgMHgxMCwgMHgxRCwgMHg0MiwgMHhFNCwgMHgwMCwgMHg5NSwgMHgwMSwgMHhGNCwgMHgxMywKKzB4MTIsIDB4MTksIDB4NDAsIDB4NzcsIDB4MDAsIDB4RjEsIDB4NDEsIDB4NzQsIDB4MDIsIDB4NTAsIDB4MTEsIDB4NDAsIDB4MEYsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDAwLAorMHg4RCwgMHg0MCwgMHg3NCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg0MCwgMHhCMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwOCwKKzB4MTQsIDB4MEQsIDB4NDgsIDB4QjAsIDB4MTAsIDB4ODQsIDB4MDAsIDB4MzQsIDB4MTMsIDB4MTAsIDB4OEMsIDB4NDAsIDB4MjMsCisweDAwLCAweEMxLCAweDAwLCAweDU0LCAweDAyLCAweDkwLCAweDBDLCAweDQwLCAweDRGLCAweDgwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBOCwgMHgzNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgxMCwKKzB4MTgsIDB4MDksIDB4NDAsIDB4MzcsIDB4MjAsIDB4REQsIDB4MDAsIDB4NzYsIDB4MjMsIDB4MTAsIDB4MEQsIDB4NDgsIDB4MzAsCisweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDA0LCAweDIzLCAweDAwLCAweEQxLCAweDQwLCAweDc0LAorMHgwNiwgMHg1MCwgMHgwRCwgMHg0MiwgMHgwRiwgMHhBMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTAsIDB4NzcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4M0MsIDB4MDksIDB4MzAsIDB4MEQsIDB4QzIsIDB4MzcsCisweDAwLCAweERGLCAweDYwLCAweDVDLCAweDEzLCAweDMxLCAweDA4LCAweEM4LCAweDY0LCAweDAyLCAweEQzLCAweDAwLCAweDdDLAorMHgwMywgMHgzNCwgMHgwRCwgMHhDMCwgMHhENywgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgxNywgMHhCMiwgMHg2RCwgMHhDMCwKKzB4MDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODgsIDB4M0QsCisweDIxLCAweDlGLCAweDA0LCAweEZDLCAweDQ1LCAweEY0LCAweDBCLCAweEMyLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLAorMHgwMywgMHhGMCwgMHgyQiwgMHhEMCwgMHgzRiwgMHg0MCwgMHhGRCwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4N0YsIDB4MDEsIDB4RkYsIDB4ODAsIDB4RkMsIDB4MDMsIDB4RjEsIDB4MjMsIDB4QzAsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAxLCAweDlGLCAweDAwLCAweDVDLAorMHgwOSwgMHhCOCwgMHgwRCwgMHhDMSwgMHgzNCwgMHgwMCwgMHhEQiwgMHg1MCwgMHg3QywgMHgwMSwgMHhCMCwgMHgwRCwgMHhDMCwKKzB4MjcsIDB4ODAsIDB4OUUsIDB4MDQsIDB4MEMsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzQsIDB4QjcsIDB4MDgsIDB4REYsIDB4NDAsCisweDdDLCAweDEzLCAweDMyLCAweDBELCAweEMyLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwRCwgMHhGMCwgMHgyOSwgMHg0MCwKKzB4M0MsIDB4MDAsIDB4RkQsIDB4MDEsIDB4MzQsIDB4MEIsIDB4MTAsIDB4MEQsIDB4NDgsIDB4MzcsIDB4ODAsIDB4OUYsIDB4MTIsCisweDQ0LCAweDJCLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDExLCAweDM0LCAweDAzLCAweEIwLCAweDFELAorMHg0MSwgMHg2RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwKKzB4MzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MTQsIDB4MEMsIDB4RDAsIDB4QjQsIDB4NTAsIDB4NzAsIDB4MDEsIDB4Q0QsIDB4MDIsCisweDIwLCAweDEwLCAweDkyLCAweDAwLCAweDRDLCAweDIzLCAweDAwLCAweDRELCAweDAxLCAweDI0LCAweDIzLCAweEQwLCAweDA4LAorMHg0MCwgMHgyMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwOCwgMHgxQywgMHgwQywgMHg0MCwgMHgwRiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsCisweDg0LCAweDQ0LCAweDUwLCAweDFCLCAweDQwLCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweDM0LCAweDA2LCAweDEwLCAweDFBLAorMHg0MCwgMHg3QiwgMHgwMCwgMHhCNSwgMHgwOSwgMHhBNiwgMHg5NywgMHhEMCwgMHgxQSwgMHg0MCwgMHg2QiwgMHgwMCwgMHhFRCwKKzB4MDEsIDB4RjQsIDB4ODYsIDB4OTAsIDB4MTIsIDB4NDAsIDB4N0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweDMwLCAweDA0LCAweENGLCAweDA4LCAweDFDLCAweDAwLCAweERBLCAweDA4LAorMHhDOCwgMHgzMCwgMHgxNCwgMHhDQiwgMHgxMCwgMHgyQywgMHgyMCwgMHhCMCwgMHg0OCwgMHhDMCwgMHgyMywgMHgwMiwgMHg4RCwKKzB4MDAsIDB4MkMsIDB4MjMsIDB4RjAsIDB4OEMsIDB4NDAsIDB4QTMsIDB4MDAsIDB4Q0YsIDB4OEMsIDB4M0UsIDB4MDAsIDB4MzAsCisweDBDLCAweEMwLCAweDRCLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgzOCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwKKzB4MTIsIDB4RjQsIDB4MjMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4REQsIDB4MzcsIDB4RjAsCisweDBGLCAweDAwLCAweDJGLCAweDAwLCAweERGLCAweDI5LCAweDdFLCAweDIyLCAweEY0LCAweDBGLCAweEMwLCAweDBCLCAweDYwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMywgMHgwMCwgMHhEMywKKzB4NDgsIDB4N0MsIDB4MDAsIDB4NjAsIDB4MEMsIDB4QzAsIDB4QjQsIDB4MDQsIDB4REYsIDB4MDQsIDB4NUMsIDB4MDAsIDB4RjAsCisweDA5LCAweEMwLCAweDI0LCAweDAwLCAweEQ3LCAweDAxLCAweDZDLCAweDI3LCAweDMwLCAweDBELCAweEMwLCAweDI3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MzksIDB4MDAsIDB4RTEsIDB4QzAsIDB4QjQsIDB4MDAsIDB4RDAsCisweDBBLCAweDQ0LCAweDM4LCAweDAwLCAweEVELCAweDA0LCAweEI0LCAweDAyLCAweEQwLCAweDBBLCAweDQwLCAweDM4LCAweDAwLAorMHhFRCwgMHgwMCwgMHgwNCwgMHgxMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhFRCwgMHgwNCwgMHhCNCwgMHgwMiwKKzB4NTAsIDB4MDIsIDB4NDAsIDB4NEMsIDB4MDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweDc5LCAweDEwLCAweEUxLCAweDA1LCAweEI0LCAweDQ0LCAweEQ4LCAweDFGLCAweDUxLCAweDc4LCAweDEzLAorMHhFOSwgMHgwNSwgMHg5NCwgMHgyNSwgMHhEMCwgMHgzQSwgMHg0MCwgMHhFOCwgMHgwMiwgMHhBRCwgMHgwMSwgMHhBNCwgMHgwNywKKzB4OTAsIDB4MUUsIDB4NDAsIDB4NkIsIDB4MDQsIDB4RUQsIDB4MDksIDB4RjQsIDB4MEMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MTAsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDMzLCAweDAwLAorMHhDMSwgMHgwMSwgMHgzNCwgMHgxNiwgMHhEMCwgMHgzOCwgMHg0MCwgMHgzMCwgMHgxMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwNywKKzB4RDAsIDB4MTgsIDB4NDEsIDB4NzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4OTAsIDB4OUMsIDB4NDAsIDB4NjMsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDA2LCAweDUwLCAweDhDLCAweDQwLCAweDU4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyMCwgMHgxNSwgMHgwMCwgMHg0MywgMHgxMSwgMHhGQywgMHgwNSwKKzB4RjAsIDB4MzYsIDB4QzAsIDB4MTQsIDB4MjAsIDB4NEYsIDB4MDAsIDB4REMsIDB4MTUsIDB4RjEsIDB4MjcsIDB4RDQsIDB4MTQsCisweDAwLCAweDc3LCAweDFCLCAweDZDLCAweDAxLCAweEI1LCAweDE1LCAweEMwLCAweDFGLCAweDAwLCAweDVGLCAweDAwLCAweEJDLAorMHgwMSwgMHgzNCwgMHgzNywgMHhDNCwgMHg1QywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MDgsIDB4MDUsIDB4NDIsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDcsCisweDIwLCAweDFGLCAweDAwLCAweDcwLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHgwOCwgMHg3MSwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgyMiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMSwKKzB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsCisweDAwLCAweDkzLCAweDAwLCAweDQ1LCAweDA2LCAweDUwLCAweDE5LCAweEQxLCAweDI0LCAweDQwLCAweDkzLCAweDA4LCAweDVDLAorMHg0MiwgMHhGMCwgMHgwOSwgMHg0MCwgMHgyMiwgMHg0MCwgMHg5MywgMHgwMiwgMHg3QywgMHgxNiwgMHhGMCwgMHgyOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OTMsIDB4ODIsIDB4N0MsIDB4MDYsIDB4MzQsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDIwLCAweDAwLCAweEIxLCAweDAzLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyMCwgMHgxMywgMHg5MSwgMHg0MCwgMHhDNCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4MkMsIDB4MDAsIDB4OTEsIDB4NDAsIDB4RjQsIDB4MEUsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjIsIDB4MjAsIDB4QjEsIDB4ODMsCisweDc0LCAweDA2LCAweDEwLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHg0MCwgMHg5MSwgMHgwOCwgMHg1NCwgMHgxQiwgMHhEMCwgMHg2OSwgMHg0MCwKKzB4MjQsIDB4MDAsIDB4OTEsIDB4NTAsIDB4NTAsIDB4MUEsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsCisweDc0LCAweDBBLCAweEQ4LCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDQwLCAweDc0LCAweDUyLCAweDEwLCAweDA5LAorMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwKKzB4MjEsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsCisweDA0LCAweDAyLCAweEQwLCAweDI4LCAweDQwLCAweEEwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDBBLCAweDgwLCAweDA4LAorMHg0MCwgMHhBNiwgMHgwMCwgMHg4MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxNCwgMHgwOCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MDcsIDB4MDAsIDB4NTMsIDB4MDEsCisweDVDLCAweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDA0LCAweDA1LCAweDEyLCAweDE0LCAweDVDLCAweDA0LCAweEYwLCAweDAwLAorMHhDMCwgMHg0NywgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwNCwgMHhGMCwgMHgxMSwgMHhDMCwgMHgwNywgMHg0MCwgMHg1MywKKzB4ODEsIDB4N0MsIDB4MDAsIDB4MzQsIDB4MDEsIDB4QzAsIDB4NzcsIDB4RTAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDJGLCAweDAwLCAweEJGLCAweDAyLCAweEZDLCAweDAyLCAweEYwLCAweDBCLAorMHhDMCwgMHgyNywgMHgwOCwgMHg5RiwgMHg0MCwgMHhGQywgMHgwQSwgMHhGMSwgMHgxQiwgMHhDMCwgMHhFRiwgMHgwMCwgMHhFRiwKKzB4MDAsIDB4N0MsIDB4MEUsIDB4RjAsIDB4MkIsIDB4MDAsIDB4NkUsIDB4MjAsIDB4OUYsIDB4ODIsIDB4QkMsIDB4NUEsIDB4RTAsCisweDBCLCAweEMwLCAweDc3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELAorMHhBMCwgMHgyOSwgMHgwMCwgMHhCRiwgMHgwMSwgMHhDQywgMHgwMiwgMHgzNCwgMHgwQiwgMHhEMCwgMHgyQywgMHg0MCwgMHhBMywKKzB4MDAsIDB4QkMsIDB4NDYsIDB4QjAsIDB4MDksIDB4NDAsIDB4NjcsIDB4MDAsIDB4QkIsIDB4MDAsIDB4QzQsIDB4MTYsIDB4MjQsCisweDVCLCAweEMwLCAweEE3LCAweDEwLCAweEIzLCAweDE1LCAweENELCAweDQyLCAweEIwLCAweDBCLCAweEMwLCAweDc0LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRCwKKzB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDUsIDB4NDAsIDB4ODUsIDB4MDIsIDB4MTEsIDB4NDAsIDB4NzQsIDB4MDgsIDB4MzAsCisweDU1LCAweDQxLCAweEMzLCAweDAxLCAweDExLCAweDAwLCAweDU0LCAweDE0LCAweDEwLCAweDAxLCAweDQwLCAweDQ3LCAweDA4LAorMHgxMSwgMHgwMiwgMHg0NCwgMHgwOCwgMHgxMSwgMHgwMSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjIsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDIsIDB4MTQsIDB4MDIsIDB4OTAsCisweDA4LCAweDY4LCAweDIwLCAweDAwLCAweDgxLCAweDAyLCAweDM0LCAweDAyLCAweDkwLCAweDA4LCAweDQwLCAweEEzLCAweDA0LAorMHg5OSwgMHgwMCwgMHgwNCwgMHg0QSwgMHgxMCwgMHgyOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4MSwgMHgyMCwgMHgwNCwgMHg1MiwKKzB4OTEsIDB4MDksIDB4NDIsIDB4NDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweDI4LCAweDI1LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDY0LCAweDI0LCAweDAwLAorMHg5MCwgMHgwMCwgMHg3NCwgMHgwNiwgMHgxMCwgMHg4OSwgMHg0QywgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHgxNCwgMHgwMiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MjMsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MTksIDB4NDAsIDB4NjAsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDIwLCAweDY1LCAweDAyLAorMHg4RiwgMHgwOSwgMHg1QywgMHgxMiwgMHhCMCwgMHgxOCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHg0QSwKKzB4QjAsIDB4M0IsIDB4QzAsIDB4NkYsIDB4MDAsIDB4OUIsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MTksIDB4QzAsIDB4RUYsCisweDAxLCAweDkzLCAweDgwLCAweDRDLCAweDAyLCAweEIwLCAweDQ5LCAweEQwLCAweDE0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg2RCwgMHgxMiwKKzB4RjAsIDB4NTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjMsCisweDAxLCAweDlGLCAweDAyLCAweDdDLCAweDAyLCAweEYwLCAweDg5LCAweEMwLCAweDY3LCAweDAxLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHg3MSwgMHgwOSwgMHhDMCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MTAsIDB4MTMsIDB4MDgsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDUsCisweEMxLCAweDEzLCAweDA4LCAweDFDLCAweDEwLCAweDM0LCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFCLCAweDAwLCAweDdDLAorMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwOCwgMHg3QywgMHgwMCwgMHgzMSwgMHgwMSwgMHhDMCwKKzB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4REMsCisweDA2LCAweDcxLCAweDAwLCAweEIwLCAweDFELCAweDUwLCAweDA3LCAweDQyLCAweDFCLCAweDgwLCAweDcxLCAweDAxLCAweEM0LAorMHgwRCwgMHgxMCwgMHgwNSwgMHg0MCwgMHgxNywgMHgwMCwgMHg3MSwgMHgwMiwgMHhGNCwgMHg2MSwgMHhCMCwgMHgwNSwgMHg0MCwKKzB4MTcsIDB4MDAsIDB4NkQsIDB4MDAsIDB4RjQsIDB4MDEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweEUyLCAweDAwLCAweDgxLCAweDEwLCAweDM0LAorMHgxRSwgMHgxOCwgMHgwNCwgMHg0MCwgMHgyMywgMHgxMCwgMHg4NSwgMHg1MSwgMHgxNCwgMHgwRCwgMHgxMCwgMHgwQywgMHg0MCwKKzB4MzMsIDB4MDAsIDB4RDksIDB4MTMsIDB4MzQsIDB4MDYsIDB4MTQsIDB4MUMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OEQsIDB4MTAsCisweDc0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDQzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHg4MiwgMHg3QywgMHgwMCwgMHhBMSwgMHgwMCwgMHhGNCwgMHgwMywgMHg1MCwgMHgwNiwgMHg0MCwKKzB4MzMsIDB4MDAsIDB4QTUsIDB4MDEsIDB4ODQsIDB4MDksIDB4MTEsIDB4NEUsIDB4NDAsIDB4M0IsIDB4MDMsIDB4RTEsIDB4MDIsCisweEI0LCAweDMzLCAweDkwLCAweDBFLCAweDYxLCAweDNCLCAweDA5LCAweEVELCAweDAwLCAweEI0LCAweDAyLCAweDEwLCAweDBFLAorMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwKKzB4NjgsIDB4MDAsIDB4QTMsIDB4MDEsIDB4QkMsIDB4MDYsIDB4MzAsIDB4MTYsIDB4QzAsIDB4NkIsIDB4MDAsIDB4RTUsIDB4MDEsCisweDlDLCAweDA1LCAweDMwLCAweDNFLCAweEMwLCAweDdCLCAweDAwLCAweEVCLCAweDAxLCAweEJDLCAweDA3LCAweDMwLCAweDFFLAorMHhDMCwgMHhGQiwgMHgwMCwgMHhBRiwgMHgwMSwgMHgzQywgMHgwMSwgMHgzMCwgMHgxQSwgMHhDMCwgMHg1MywgMHg2MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4NDAsIDB4OUQsIDB4MDAsCisweDNDLCAweDAyLCAweEYwLCAweDA1LCAweEMwLCAweDI3LCAweDAwLCAweERCLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELAorMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHgzQywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDZELCAweDAwLCAweEJCLCAweDIxLCAweEZDLCAweDA2LCAweEYwLCAweDE3LAorMHhDMCwgMHg2RiwgMHgwMCwgMHhCMywgMHgwMSwgMHhERSwgMHgwNywgMHgzMSwgMHg5RSwgMHhDOCwgMHg3QywgMHgwMCwgMHhBRSwKKzB4MDEsIDB4RUMsIDB4MDcsIDB4RjgsIDB4OUYsIDB4QzAsIDB4NzgsIDB4MDAsIDB4QjMsIDB4NDEsIDB4Q0MsIDB4MDYsIDB4MzAsCisweDFCLCAweEMwLCAweDE4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHgxMCwgMHgyOSwgMHgwMCwgMHhBRCwgMHgwOCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwNiwgMHg0MCwgMHgzQiwgMHgwOCwgMHhBMSwKKzB4MDAsIDB4ODQsIDB4MTMsIDB4QjAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDIsIDB4ODQsIDB4MDMsIDB4RDAsCisweDBFLCAweEMwLCAweDNBLCAweDAyLCAweEExLCAweDAwLCAweDk0LCAweDAyLCAweEIwLCAweDBFLCAweDQ0LCAweDU0LCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhBRCwKKzB4MDAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MDYsIDB4NDAsIDB4MjMsIDB4MDAsIDB4QTEsIDB4MDAsIDB4RDQsIDB4MDEsIDB4MTEsCisweDFGLCAweDAwLCAweDc4LCAweDAwLCAweEVELCAweDAwLCAweEE0LCAweDAzLCAweEQwLCAweDBFLCAweDQ0LCAweDdDLCAweDAwLAorMHg4MSwgMHgwMCwgMHg4NCwgMHgwMSwgMHg1MCwgMHgwQiwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDEsIDB4MzQsIDB4NDEsIDB4RDAsCisweDA0LCAweDQwLCAweDAzLCAweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDMzLCAweDkwLCAweDJDLCAweDQxLCAweDMwLCAweDIwLAorMHhDRCwgMHgwQywgMHgwNCwgMHgwMSwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwNCwgMHhDMSwgMHgwMCwgMHg1NCwgMHgwMywKKzB4RDAsIDB4M0MsIDB4NDAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFELCAweEE4LCAweDI1LCAweDEwLCAweERGLCAweDExLCAweDdDLCAweDhBLCAweEYwLCAweDhELCAweEMxLCAweDI3LCAweDAwLAorMHg5MywgMHgwMCwgMHg1QywgMHgwNSwgMHgzMSwgMHgwRCwgMHhEMCwgMHgzNCwgMHgwMSwgMHg0RiwgMHgwMiwgMHg2QywgMHgwMSwKKzB4RjEsIDB4MEMsIDB4QzAsIDB4QjQsIDB4NDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4QUEsIDB4NzAsIDB4MjksIDB4QzAsIDB4NzQsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDM3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgyNSwgMHhDMCwgMHgzNywgMHgwMCwgMHg4RiwgMHgwMCwgMHg3RSwgMHgwMSwKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4ODAsIDB4N0MsIDB4MDksIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDA4LCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEIwLCAweDg5LCAweEMwLCAweDE3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwOCwgMHg2RiwgMHgwMCwgMHhBRiwgMHgwMCwgMHhEQywgMHgwMiwKKzB4MzQsIDB4MUYsIDB4MDAsIDB4NkYsIDB4MDAsIDB4REYsIDB4MDAsIDB4RUMsIDB4ODksIDB4RjEsIDB4MEYsIDB4QzAsIDB4M0YsCisweDAwLCAweDdGLCAweDAwLCAweENDLCAweDAxLCAweDcwLCAweDRELCAweEQwLCAweDNDLCAweDAwLCAweEJGLCAweDAwLCAweENELAorMHgwMCwgMHgzNCwgMHgwQiwgMHhDMSwgMHgwNywgMHgyNiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QTEsIDB4MjAsIDB4MzYsIDB4MTAsIDB4OUQsIDB4MDMsIDB4MDQsIDB4MDIsIDB4MTAsIDB4ODksIDB4NDMsIDB4MzcsCisweDAwLCAweERELCAweDAwLCAweDQ0LCAweDA1LCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDAzLCAweDQ0LAorMHgxOSwgMHgxMCwgMHgwRCwgMHg0MiwgMHgzNCwgMHgwMCwgMHhDRCwgMHgwMiwgMHg0NCwgMHgwNiwgMHgxMCwgMHgxOSwgMHg0MCwKKzB4MjcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4QTYsCisweDAxLCAweERELCAweDA2LCAweDU0LCAweDAyLCAweDEwLCAweDBELCAweDQwLCAweDI3LCAweDAxLCAweDlELCAweDAwLCAweDYwLAorMHgwMywgMHhEMCwgMHgwRCwgMHg0NCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMSwgMHgwNCwgMHg4NSwgMHg1MCwgMHgwRCwgMHg0MCwKKzB4MzQsIDB4MTAsIDB4OUQsIDB4NTAsIDB4NDQsIDB4MDYsIDB4MTAsIDB4NDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDAwLCAweENELCAweDAwLCAweDA0LAorMHgwMywgMHgxMCwgMHgwNCwgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwKKzB4MzMsIDB4ODAsIDB4REQsIDB4QTAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4OEQsIDB4QzAsCisweDQ0LCAweDAyLCAweDEwLCAweDA4LCAweDQ0LCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgxOCwgMHgyNiwgMHgwMCwgMHg1RiwgMHgwMCwgMHg1QywgMHgwMiwgMHgzMCwgMHgwRCwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4REYsIDB4MDAsCisweDRDLCAweDAxLCAweDcwLCAweDA5LCAweDgwLCAweDNDLCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDA5LAorMHhDMCwgMHgwNywgMHg2MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwKKzB4MUYsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MUYsIDB4MDAsIDB4N0YsIDB4MDAsCisweEJDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZELCAweDAxLCAweEQwLCAweDBCLAorMHhDMCwgMHgzRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhCQywgMHgwMiwgMHhGMCwgMHgwQSwgMHhDNCwgMHgxNywgMHg2MiwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0YsIDB4MDAsIDB4QjMsIDB4MEMsCisweERDLCAweDAwLCAweDMwLCAweDRGLCAweEMwLCAweDNDLCAweDAxLCAweEYzLCAweDE4LCAweEZDLCAweDMyLCAweDcwLCAweDE3LAorMHhDMCwgMHg3RiwgMHgwMCwgMHg1QiwgMHgwMSwgMHg4QywgMHgwNiwgMHgzMiwgMHgxQSwgMHhDMiwgMHg3RSwgMHgwMCwgMHgzQiwKKzB4MDgsIDB4Q0QsIDB4MDAsIDB4QjAsIDB4MDMsIDB4QzIsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDE4LCAweDM3LCAweDAxLCAweDkxLCAweDhFLCAweDQ0LCAweDI3LCAweDEwLCAweDNGLAorMHg0MCwgMHhCQywgMHg0MCwgMHhGNSwgMHgyNiwgMHg3NCwgMHgzOCwgMHgxMCwgMHgwNSwgMHg0NCwgMHg3NywgMHgwMCwgMHg1MywKKzB4MDEsIDB4NTQsIDB4MDUsIDB4NTIsIDB4MTksIDB4NDAsIDB4NTUsIDB4MDAsIDB4MTEsIDB4MDYsIDB4NDQsIDB4ODIsIDB4MTAsCisweDAxLCAweEMwLCAweDBFLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAorMHhBMCwgMHgzMywgMHgwNCwgMHg4MSwgMHgwMCwgMHg1NCwgMHgwMywgMHgxMCwgMHgyQywgMHg0NCwgMHhCMiwgMHgwNSwgMHhDMSwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4NTAsIDB4NDQsIDB4NDEsIDB4MzEsIDB4MDAsIDB4NEQsIDB4MDAsIDB4NTQsIDB4MDMsIDB4MTAsCisweDA4LCAweDQwLCAweDIyLCAweDAwLCAweDg5LCAweDAyLCAweDA0LCAweDIxLCAweEQwLCAweDEwLCAweDQyLCAweDRGLCAweDgwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgzMSwgMHgwMCwgMHg5MSwKKzB4MDEsIDB4NDQsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4ODQsIDB4MTAsCisweDA1LCAweDQxLCAweDM3LCAweDAxLCAweDUxLCAweDAxLCAweDU0LCAweDA5LCAweDUwLCAweDFELCAweDAwLCAweDM1LCAweDAwLAorMHgxMSwgMHgwMiwgMHg0NCwgMHg4MywgMHg1MSwgMHgxMSwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODgsIDB4MzYsIDB4MDAsIDB4MTMsIDB4MDcsIDB4MTAsIDB4MTcsIDB4MzAsCisweDBELCAweEMwLCAweDM2LCAweDA4LCAweEQzLCAweDQwLCAweDdDLCAweDQ0LCAweDUwLCAweEIxLCAweEUwLCAweDM1LCAweDIwLAorMHg1QiwgMHgwNywgMHg1QywgMHgwQiwgMHgzMCwgMHgxOCwgMHg4MCwgMHgzNiwgMHgwMCwgMHgxQiwgMHgwMiwgMHg0QywgMHgyOCwKKzB4RjQsIDB4MTksIDB4QzAsIDB4MkIsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDBGLCAweDgwLCAweDNELCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEY0LCAweDBGLCAweEMwLCAweDM5LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHg0MCwgMHhGMCwgMHgxMywgMHhDMCwgMHg3RiwgMHgwMCwgMHg3OSwgMHgxMCwgMHhGQywgMHgxMywKKzB4RTAsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4NUYsIDB4MDIsIDB4QkMsIDB4MDQsIDB4QjAsIDB4MDIsIDB4QzAsIDB4MUUsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLAorMHgxRiwgMHgwNCwgMHg0QywgMHgwMywgMHg3MCwgMHgwQywgMHhFMSwgMHgzNSwgMHgwNCwgMHhENywgMHgwOCwgMHg0QywgMHgwMiwKKzB4NzAsIDB4MjUsIDB4QzAsIDB4MzcsIDB4MDAsIDB4NTcsIDB4MDIsIDB4NUMsIDB4MEIsIDB4QjAsIDB4NDksIDB4QzAsIDB4MzQsCisweDAwLCAweDVCLCAweDAwLCAweDRDLCAweDQ5LCAweDM0LCAweDA5LCAweEMwLCAweDJCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQiwgMHhBMCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMywKKzB4MTEsIDB4MUYsIDB4QzQsIDB4RkMsIDB4MDQsIDB4RjEsIDB4MDAsIDB4NDQsIDB4MTAsIDB4MTAsIDB4MDUsIDB4NDAsIDB4NzAsCisweDAwLCAweDRCLCAweDQxLCAweDY4LCAweDJGLCAweEIwLCAweDJELCAweDQwLCAweEIwLCAweDAxLCAweDUxLCAweDAwLCAweDQ0LAorMHg4OSwgMHgwMCwgMHgxOSwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MjAsIDB4MzIsIDB4MDAsIDB4MUQsIDB4MDAsIDB4MzQsIDB4ODMsIDB4NTAsIDB4MUMsIDB4NDAsIDB4NzMsCisweDgwLCAweEMxLCAweDI2LCAweDY0LCAweDBFLCAweDEwLCAweDAwLCAweDQ4LCAweDMxLCAweDAwLCAweEM1LCAweDAzLCAweDcwLAorMHgwRiwgMHg5MCwgMHgwMCwgMHg0OCwgMHgzMSwgMHgyMSwgMHg1OSwgMHgwRiwgMHgwNCwgMHgyNCwgMHgxMCwgMHgwOCwgMHg2MCwKKzB4MEYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEQsIDB4MDAsIDB4N0EsCisweDgwLCAweDZELCAweDUxLCAweDk1LCAweDQ3LCAweDEwLCAweDlFLCAweDQxLCAweDcwLCAweDgwLCAweEUxLCAweDgxLCAweEE2LAorMHgwNywgMHgxNCwgMHgxMiwgMHgwMCwgMHg3OCwgMHgwMCwgMHg2OSwgMHgwNSwgMHhCNCwgMHg0NywgMHg5OSwgMHhEQSwgMHg0MCwKKzB4NUQsIDB4MDAsIDB4QTEsIDB4NDksIDB4MDQsIDB4MjYsIDB4MTAsIDB4MzIsIDB4NDEsIDB4MzcsIDB4MjAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMyLCAweDAwLCAweENGLCAweDIwLCAweDFDLAorMHgwMywgMHg1MCwgMHg4QywgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgyQywgMHgxMywgMHgzMCwgMHg0MSwgMHhDMCwKKzB4MzMsIDB4MjQsIDB4NDcsIDB4MTUsIDB4M0MsIDB4MDMsIDB4QjAsIDB4NUMsIDB4QzgsIDB4MjEsIDB4MDgsIDB4OEIsIDB4MDUsCisweDBELCAweDA4LCAweDMwLCAweDBDLCAweEMwLCAweDRCLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgzRCwgMHgyMCwgMHhGRiwgMHgwMCwgMHhFOCwgMHgwMywgMHhGMCwgMHhBRSwgMHhDMCwKKzB4M0YsIDB4NDAsIDB4RkIsIDB4MDAsIDB4REQsIDB4MDMsIDB4RjEsIDB4MDMsIDB4QzAsIDB4M0IsIDB4MDAsIDB4NDUsIDB4ODAsCisweEVDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDNBLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweEY0LCAweDhGLAorMHhDMCwgMHgwQiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwKKzB4NzcsIDB4MjAsIDB4NTMsIDB4MjAsIDB4N0UsIDB4ODMsIDB4RjAsIDB4Q0QsIDB4QzAsIDB4MzQsIDB4MTEsIDB4REYsIDB4NDQsCisweDVDLCAweDAxLCAweEYwLCAweDExLCAweEMwLCAweDMyLCAweDAwLCAweDFCLCAweDAwLCAweDFDLCAweDAzLCAweDcwLCAweDBELAorMHhDMiwgMHgzNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg0RCwgMHgwMywgMHgzMCwgMHgwRCwgMHhDMiwgMHg0MCwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OTgsIDB4M0QsIDB4MDAsIDB4NjEsIDB4MDAsCisweEI0LCAweDgzLCAweDE0LCAweDBFLCAweDQwLCAweEI4LCAweDA1LCAweEZELCAweDE2LCAweDg0LCAweDAzLCAweEQwLCAweDAyLAorMHg0MCwgMHgzOCwgMHg4MCwgMHgyNywgMHg0MCwgMHg4NCwgMHgwMywgMHgxMSwgMHgwRSwgMHg0MCwgMHgxOCwgMHgwMCwgMHhFRCwKKzB4MDAsIDB4ODUsIDB4MDMsIDB4MTAsIDB4MDcsIDB4NDAsIDB4NEMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDAwLCAweEUxLCAweDAxLCAweEY2LCAweDg3LCAweEQyLCAweDRFLAorMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgzMywgMHg0MCwgMHg3QiwgMHgwMCwgMHgzMSwKKzB4MDEsIDB4OTQsIDB4MDcsIDB4NTgsIDB4MUYsIDB4NDEsIDB4N0EsIDB4MDAsIDB4RUQsIDB4MDEsIDB4MDQsIDB4MDcsIDB4NTQsCisweDFFLCAweDQwLCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorMHgyMCwgMHgzMywgMHgwMCwgMHhDMSwgMHg0MywgMHgzNiwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhERCwKKzB4MDAsIDB4NDQsIDB4MUYsIDB4RDAsIDB4NDgsIDB4NjAsIDB4MjEsIDB4MDIsIDB4MDUsIDB4MDEsIDB4MDYsIDB4MEYsIDB4MTAsCisweDNDLCAweDQwLCAweDcyLCAweDAwLCAweENELCAweDE5LCAweDA0LCAweDIzLCAweDUwLCAweDJELCAweDQwLCAweDU4LCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNywgMHgwMCwgMHg3MSwKKzB4MDUsIDB4RkMsIDB4NDksIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4REMsIDB4MEQsIDB4RjAsCisweDE3LCAweEMwLCAweDE3LCAweDAwLCAweDYzLCAweDAyLCAweDlDLCAweDZELCAweDcwLCAweDI3LCAweEUwLCAweDFFLCAweDA5LAorMHg3RiwgMHgwMiwgMHhDQywgMHgyNSwgMHg3MCwgMHg4NywgMHhDMCwgMHg1QywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDUsIDB4NDAsIDB4MUYsIDB4MzAsIDB4N0MsIDB4MTAsIDB4NzQsCisweDAxLCAweEMwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdFLCAweDI4LCAweEYwLCAweDAxLCAweEMwLCAweDA2LCAweDA4LAorMHgxNywgMHg1OCwgMHg3QywgMHgwMCwgMHhGMCwgMHg2MSwgMHhDMCwgMHg4NSwgMHgwMCwgMHgxRSwgMHg4MiwgMHgzQywgMHgwMCwKKzB4OTAsIDB4MjEsIDB4RDAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDE5LCAweEMwLCAweDY3LCAweDAxLAorMHg5RiwgMHgwMSwgMHg2OCwgMHgwNiwgMHgzMiwgMHgwOSwgMHhDMiwgMHgyNywgMHgwMCwgMHg5MiwgMHgyMCwgMHg1QywgMHgwNiwKKzB4NzAsIDB4MTksIDB4RDAsIDB4MjQsIDB4MDAsIDB4OEEsIDB4MDUsIDB4NDQsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzIsIDB4NDAsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLAorMHg5RCwgMHgxMSwgMHgzNCwgMHgwMiwgMHgxMCwgMHg1OSwgMHg0MCwgMHhFNywgMHgwMCwgMHg5RCwgMHg4QiwgMHg0NCwgMHgwNiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTEsIDB4MDgsIDB4NDQsIDB4OEEsIDB4MTAsIDB4ODgsIDB4NDAsIDB4RTQsCisweDIwLCAweDlELCAweDA3LCAweDQ0LCAweDBBLCAweDUwLCAweDI5LCAweDQwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwOCwgMHg3NCwgMHgxMiwKKzB4NTAsIDB4ODksIDB4NDIsIDB4MjcsIDB4MDQsIDB4OUQsIDB4MDAsIDB4NzQsIDB4NTIsIDB4NTAsIDB4MDksIDB4NDgsIDB4MjcsCisweDQwLCAweDlELCAweDkwLCAweDU0LCAweEEyLCAweDUzLCAweDBELCAweDYxLCAweDY0LCAweDAwLCAweDk4LCAweDAwLCAweDU0LAorMHgyQSwgMHg1MSwgMHgzOSwgMHg0MCwgMHg3MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MjgsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MTQsIDB4NzQsIDB4NTIsIDB4MTUsIDB4NDgsIDB4NDEsIDB4MjMsCisweDI1LCAweENELCAweDE0LCAweDE0LCAweDUyLCAweDUwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDk1LCAweDAwLCAweDA0LAorMHgwMiwgMHgxMSwgMHgwOCwgMHg2MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwOCwgMHgxNCwgMHgwMiwgMHg1MCwgMHg0OCwgMHg1MSwKKzB4NTAsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4MzAsIDB4MDYsCisweDAwLCAweDFGLCAweDA0LCAweDdDLCAweDEwLCAweDcwLCAweDQxLCAweEM4LCAweDA3LCAweDAxLCAweDFGLCAweDA0LCAweDdDLAorMHgxMCwgMHg3MCwgMHgwMSwgMHhDOCwgMHgwNywgMHgwOCwgMHgxNywgMHgwMCwgMHg1OCwgMHgwMSwgMHg3MiwgMHgwMSwgMHhEMCwKKzB4MTQsIDB4MDAsIDB4MEIsIDB4MTYsIDB4NUMsIDB4NTAsIDB4NzAsIDB4NDEsIDB4QzAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEE4LCAweDI1LCAweDA1LCAweEJGLCAweDM0LCAweEJDLAorMHgwMiwgMHhGNiwgMHgwOCwgMHhDMCwgMHgyNywgMHgwNSwgMHg5RiwgMHgxNCwgMHhFNCwgMHg1MiwgMHhCNCwgMHg0QSwgMHhDMSwKKzB4MkYsIDB4MTAsIDB4QUIsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDQsCisweEVELCAweDUyLCAweEYwLCAweDRCLCAweEMxLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNywgMHgwMCwgMHhCRiwgMHgxMSwgMHhCQywgMHgwMiwgMHhDNCwgMHgwQiwgMHhDMCwKKzB4NkUsIDB4MDEsIDB4QkYsIDB4NTQsIDB4RkMsIDB4MzIsIDB4RjAsIDB4MDksIDB4QzgsIDB4MjksIDB4OTAsIDB4QjMsIDB4MDAsCisweEFELCAweDAyLCAweEIwLCAweDBCLCAweEMwLCAweDJDLCAweDAwLCAweEI3LCAweDAwLCAweENDLCAweDEyLCAweDM2LCAweDBGLAorMHhDMCwgMHg2MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgxOCwKKzB4NDcsIDB4MDUsIDB4MUQsIDB4ODcsIDB4NzQsIDB4MDAsIDB4MTAsIDB4ODEsIDB4NDAsIDB4MDcsIDB4MDUsIDB4MUQsIDB4MDQsCisweDdDLCAweDMwLCAweEQwLCAweDA1LCAweDQwLCAweDA3LCAweDgwLCAweDU1LCAweDQwLCAweDQ0LCAweDAwLCAweDEyLCAweDA1LAorMHg1NCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NSwgMHgyOCwgMHg1NCwgMHgwMSwgMHg0MCwgMHg3MywgMHg2MCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4QTAsIDB4MjEsIDB4MDAsIDB4Q0QsIDB4MTAsCisweDc0LCAweDI3LCAweEMwLCAweDBDLCAweDQwLCAweEEzLCAweDAwLCAweDhELCAweDE0LCAweDM0LCAweDEzLCAweEQyLCAweDA4LAorMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwgMHgwMCwgMHgyNCwgMHgwMywgMHg5MCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg4NSwKKzB4ODAsIDB4MDQsIDB4MDIsIDB4MTgsIDB4MDgsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDIwLCAweDI1LCAweDAwLCAweDlELCAweDAyLCAweDc2LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhDMiwgMHgwOSwgMHg0OCwgMHgyNywgMHgwMSwgMHg5NSwKKzB4MDAsIDB4NDQsIDB4MjIsIDB4MTAsIDB4MDksIDB4NDQsIDB4QTQsIDB4MDIsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MjIsIDB4NTAsCisweDA5LCAweDAwLCAweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHhBOCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMSwgMHgzQywgMHgwQSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNiwgMHgwOCwgMHg5RiwKKzB4NDAsIDB4N0EsIDB4NDIsIDB4RjAsIDB4QjksIDB4QzAsIDB4MjEsIDB4ODAsIDB4OTEsIDB4MDAsIDB4MkMsIDB4MDIsIDB4QjAsCisweDE5LCAweEMwLCAweDY0LCAweDAwLCAweDk3LCAweDA0LCAweDRDLCAweDAyLCAweDMwLCAweDQ5LCAweEMwLCAweDE3LCAweDI4LAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgyNSwgMHgyMCwgMHg5RiwKKzB4MDQsIDB4N0MsIDB4MTYsIDB4RjQsIDB4MDksIDB4QzAsIDB4MjcsIDB4MEMsIDB4OUYsIDB4MjAsIDB4NUUsIDB4NTIsIDB4RjAsCisweDE5LCAweEMwLCAweDI3LCAweDIwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDg5LCAweEMxLCAweDI3LCAweDAwLAorMHg5RiwgMHg1MywgMHg3QywgMHgwMiwgMHhGMCwgMHg0OSwgMHhDMSwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4NDIsIDB4N0MsIDB4MDAsIDB4NzAsCisweDExLCAweENDLCAweDA3LCAweDAwLCAweDFCLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDA3LCAweDAwLAorMHgxMiwgMHgzMCwgMHg0QywgMHg0MCwgMHg3MCwgMHgwMSwgMHhDMCwgMHg4NSwgMHgwOSwgMHgwRiwgMHg4QSwgMHg1QywgMHgwMCwKKzB4MzQsIDB4MjEsIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweEEwLCAweDE0LCAweDAwLCAweDdELCAweDBBLCAweDc0LCAweDAxLCAweDEwLCAweDA3LCAweDQwLCAweDlGLCAweDAwLAorMHg3MSwgMHg4MCwgMHhDNCwgMHgwMSwgMHhEMCwgMHgwNSwgMHhDMCwgMHg5RiwgMHgwMCwgMHg2MSwgMHg0MSwgMHhDNSwgMHgwOSwKKzB4MTAsIDB4MDYsIDB4NDIsIDB4NTgsIDB4MDgsIDB4N0QsIDB4MjEsIDB4QzQsIDB4MDksIDB4MTAsIDB4MDcsIDB4NDAsIDB4NTAsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwMCwgMHg0OCwgMHg3MywgMHg4MCwgMHhDOSwgMHgxMSwgMHgxNCwgMHgwMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4QjMsIDB4MDYsIDB4QzEsIDB4ODgsIDB4MDQsIDB4MDMsIDB4NTEsIDB4MkMsIDB4NDAsIDB4MzEsCisweDAyLCAweENELCAweDAxLCAweDU0LCAweDQzLCAweDkwLCAweDJDLCAweDQwLCAweDUzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4OCwgMHgzOCwgMHgwMSwgMHhFRCwgMHg4MCwgMHhGNCwgMHgwMywKKzB4MTQsIDB4MDIsIDB4NDAsIDB4RkIsIDB4MDAsIDB4RTEsIDB4MDMsIDB4OTQsIDB4MDMsIDB4RDAsIDB4OEUsIDB4NjQsIDB4MkIsCisweDQwLCAweEYxLCAweDAwLCAweDg0LCAweDAzLCAweDEwLCAweDBFLCAweDQ0LCAweDE4LCAweDAwLCAweEFELCAweDAwLCAweEM0LAorMHgwMywgMHg5MSwgMHgxQywgMHg0MCwgMHgwNywgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTEsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4ODEsIDB4QjQsIDB4MDcsIDB4NzAsIDB4MTIsIDB4Q0EsIDB4N0YsCisweDAwLCAweDRCLCAweDAxLCAweDlELCAweDA1LCAweEYyLCAweDFFLCAweEM4LCAweDdCLCAweDgwLCAweDYyLCAweDAxLCAweDhDLAorMHgwNywgMHg3MCwgMHgxRSwgMHhFOCwgMHg2OSwgMHgyMCwgMHhGRiwgMHgwMSwgMHhEQywgMHg4NSwgMHhCMCwgMHgxRSwgMHhEMCwKKzB4NDcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4QjUsCisweDBBLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDAxLCAweEMwLCAweDE3LCAweDAwLCAweERGLCAweDAwLCAweDZDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNSwgMHgwMCwgMHhDRiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwQywgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDksIDB4QzIsIDB4NDAsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweEZELCAweDAwLCAweEZGLCAweDAxLCAweENDLAorMHg4NywgMHhCMCwgMHgxNywgMHg4MCwgMHg1RiwgMHgwMCwgMHhGRiwgMHg0MSwgMHhGQywgMHgwNywgMHhGOSwgMHg5RSwgMHhDMCwKKzB4NTgsIDB4MDAsIDB4NzMsIDB4ODEsIDB4OEMsIDB4ODYsIDB4QjAsIDB4OUUsIDB4QzAsIDB4N0QsIDB4MDgsIDB4REYsIDB4MDEsCisweEZDLCAweDA3LCAweDM0LCAweDE3LCAweEMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNSwgMHgxOCwgMHgzOSwgMHgwMCwgMHg3RCwgMHgwOCwgMHg4NCwgMHgyMywgMHgxMCwgMHg4MiwgMHg0MCwKKzB4MUIsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MEUsIDB4NjIsIDB4MTgsIDB4MDEsIDB4NkIsIDB4MDQsCisweDg0LCAweDIyLCAweDEwLCAweDFDLCAweEMwLCAweDJBLCAweDA0LCAweDhELCAweDBELCAweEI0LCAweDI5LCAweEI0LCAweDA3LAorMHg0MCwgMHg1NCwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QzQsIDB4MDMsIDB4OTAsIDB4MDIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4NkQsIDB4MDAsCisweEI0LCAweDAxLCAweEQwLCAweDBGLCAweDVBLCAweDE4LCAweDIwLCAweDcxLCAweDAwLCAweEY0LCAweDQzLCAweEQwLCAweDRGLAorMHg0MCwgMHgyQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHg5MCwgMHgwRSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MzEsIDB4ODAsIDB4OEQsIDB4MjIsCisweDA0LCAweDBCLCAweDE5LCAweDA4LCAweDQwLCAweDA3LCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDA4LCAweEQxLCAweDJDLAorMHg0MCwgMHg1MCwgMHgwMCwgMHg0OSwgMHgwMCwgMHgzNCwgMHg0QSwgMHg1MSwgMHgzQywgMHg0MCwgMHhFMywgMHgwNCwgMHgwRCwKKzB4MTAsIDB4MzQsIDB4MDAsIDB4OTAsIDB4MjgsIDB4NTEsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDNELCAweDEwLCAweDFGLCAweDAxLCAweDRDLCAweDBCLCAweEIwLCAweDAxLAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgxQSwgMHhGMCwgMHgyRiwgMHhDMCwgMHgzMCwgMHgwNCwgMHhDMSwKKzB4MjAsIDB4N0MsIDB4ODAsIDB4RjAsIDB4MEMsIDB4Q0MsIDB4QTMsIDB4MDAsIDB4NUQsIDB4MjAsIDB4N0MsIDB4MEEsIDB4OTAsCisweDI5LCAweDQ4LCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHgzNywgMHgyOCwgMHg5RiwgMHgwQywgMHg3RCwgMHgyMywgMHhGMCwgMHgwMSwgMHhDMCwgMHgyNywgMHgwMCwgMHgxRiwKKzB4MDIsIDB4N0MsIDB4NEEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4QzAsIDB4RDcsIDB4NTAsIDB4NDksIDB4MEEsIDB4QTAsCisweENELCAweDAwLCAweEE2LCAweDAwLCAweDBGLCAweDA4LCAweDc4LCAweDEyLCAweDc0LCAweDAxLCAweEMwLCAweDA3LCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwgMHgzRiwgMHgxMCwgMHgyRiwKKzB4MDAsIDB4RUMsIDB4NDcsIDB4QjAsIDB4MDIsIDB4RDAsIDB4MkMsIDB4MDAsIDB4MzMsIDB4MDAsIDB4QkMsIDB4ODAsIDB4QjAsCisweDBGLCAweEMzLCAweDNGLCAweDAwLCAweDdGLCAweEMwLCAweEVDLCAweDgwLCAweDcxLCAweDBCLCAweEMwLCAweDJFLCAweDA4LAorMHg3MywgMHgwMCwgMHgwRCwgMHgwMiwgMHgxNCwgMHgwQSwgMHhEMCwgMHgxMSwgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjAsIDB4MzYsIDB4MDAsIDB4OUQsIDB4MjUsIDB4MDQsIDB4MjcsIDB4MTAsCisweDIxLCAweDQwLCAweDY0LCAweDAwLCAweDExLCAweDA1LCAweDc0LCAweDE2LCAweDEyLCAweDBELCAweDQwLCAweDI3LCAweDEwLAorMHhENSwgMHgwMSwgMHgwNCwgMHgyNCwgMHgxMCwgMHgxOSwgMHg0NSwgMHhFNCwgMHgwMSwgMHg1NSwgMHgwQSwgMHg0NCwgMHgwNiwKKzB4NTQsIDB4NzEsIDB4NDIsIDB4MTQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweEEwLCAweDM0LCAweDAwLCAweDFELCAweDgxLCAweDY0LCAweDAzLCAweDkwLCAweDA1LCAweDQ5LCAweEM0LCAweDgwLAorMHg5MSwgMHgwMSwgMHg3NiwgMHgwNiwgMHg5MCwgMHgwRCwgMHg0MCwgMHhCNywgMHgwMCwgMHg1NSwgMHgwMSwgMHg2NiwgMHg4QSwKKzB4NTAsIDB4MUQsIDB4NjAsIDB4NjYsIDB4ODAsIDB4NTUsIDB4MDIsIDB4NDQsIDB4MDYsIDB4NTQsIDB4MTEsIDB4NDAsIDB4MDQsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDI4LCAweDMwLCAweDA4LAorMHgwRCwgMHgwMCwgMHg0NCwgMHgwMywgMHgxNCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0OCwgMHg4MSwgMHg0MCwgMHgzNiwgMHgwMiwKKzB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4MTEsIDB4MDgsIDB4NDQsIDB4MDIsIDB4MTAsIDB4NEQsIDB4NjAsIDB4MDQsCisweEMwLCAweDA1LCAweDA2LCAweDA0LCAweDAwLCAweDU4LCAweDAwLCAweDQwLCAweDQwLCAweEEwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMCwgMHgzRSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg2QywgMHg4MywKKzB4QjAsIDB4MDEsIDB4QzAsIDB4MjQsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4QjAsIDB4MEQsIDB4QzgsIDB4MzcsCisweDQwLCAweDFGLCAweDAyLCAweDZDLCAweDAyLCAweDcwLCAweEU5LCAweEMzLCAweDI2LCAweDgwLCAweDkzLCAweDE2LCAweDRDLAorMHgwMiwgMHg3MCwgMHgwOSwgMHhDMiwgMHgwMSwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODUsIDB4QTAsIDB4M0YsIDB4MjAsIDB4QkYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MkYsCisweDAwLCAweEJGLCAweDQwLCAweEZDLCAweDAyLCAweEYxLCAweDBGLCAweEMwLCAweDNGLCAweDA4LCAweDJGLCAweDAwLCAweEZDLAorMHgwMiwgMHhGMCwgMHg0MSwgMHhDMCwgMHgyRiwgMHgwMCwgMHgzRiwgMHgwNCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwKKzB4MTcsIDB4MjIsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0YsCisweDAwLCAweDYzLCAweDA0LCAweENDLCAweDMyLCAweDcyLCAweDFGLCAweEM4LCAweDJDLCAweDAzLCAweDcyLCAweDAxLCAweENDLAorMHgwNSwgMHg3MCwgMHgwQiwgMHhDMCwgMHgzRCwgMHgwMCwgMHhCQiwgMHg4MCwgMHhFQywgMHgwNCwgMHhEMCwgMHg5QiwgMHhEMCwKKzB4NUMsIDB4NEEsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MTIsIDB4RjEsIDB4MTcsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDdGLCAweDAwLCAweDUxLCAweDAzLCAweDQ0LAorMHhCMiwgMHgxMiwgMHgxRiwgMHg0MCwgMHgyNCwgMHgxMywgMHhEMSwgMHgwMSwgMHg0NCwgMHgwNywgMHgxMCwgMHgzRCwgMHg0MCwKKzB4RkMsIDB4MDAsIDB4QjEsIDB4MDMsIDB4NDQsIDB4ODAsIDB4RDAsIDB4NDUsIDB4NDAsIDB4MDQsIDB4MDEsIDB4RjEsIDB4MjEsCisweDQ0LCAweDI2LCAweEQwLCAweDFELCAweDQwLCAweDA1LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwMCwgMHg1NSwgMHgwMiwgMHgwNCwgMHgxMiwgMHg1MCwgMHgwQywgMHg0MCwKKzB4MjEsIDB4MDEsIDB4OTEsIDB4MDAsIDB4MTYsIDB4MDIsIDB4NTAsIDB4ODgsIDB4NDAsIDB4MzEsIDB4MDIsIDB4ODksIDB4MDgsCisweDI0LCAweDAwLCAweEQ4LCAweDA4LCAweDQwLCAweDMwLCAweDg4LCAweEMxLCAweDAwLCAweDE0LCAweDgyLCAweEQyLCAweDA4LAorMHg0MCwgMHg0NCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBOCwKKzB4MzUsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NDQsIDB4ODIsIDB4NTAsIDB4MEQsIDB4NDAsIDB4MjUsIDB4MDAsIDB4RDEsIDB4MDAsCisweDEwLCAweDIyLCAweDAwLCAweDA5LCAweDQwLCAweDM1LCAweDgwLCAweDk1LCAweDA0LCAweDQ0LCAweDA2LCAweEMwLCAweDgxLAorMHgwMCwgMHgzNCwgMHgwNCwgMHhEMSwgMHg0MCwgMHg1NCwgMHgxMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgwRCwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzMsIDB4NDAsIDB4QzcsIDB4MDAsCisweDRDLCAweDI2LCAweDcxLCAweDBELCAweEQwLCAweDY0LCAweDAwLCAweDgzLCAweDgwLCAweDVDLCAweDA3LCAweDcwLCAweDA1LAorMHhDMCwgMHgzNSwgMHgwMCwgMHg5QiwgMHgwMCwgMHg2QywgMHg0QywgMHhGMCwgMHgwOSwgMHhDOCwgMHgyNCwgMHgwMCwgMHhEMywKKzB4MDAsIDB4NUMsIDB4MDcsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDEwLCAweDdCLCAweDA5LCAweEZDLCAweDAzLCAweEIzLCAweDBGLAorMHhDMCwgMHgzRSwgMHg0MSwgMHhCRiwgMHgwMCwgMHhFRCwgMHg4MywgMHhGMCwgMHg5RiwgMHg4MiwgMHgzNiwgMHgyMCwgMHg5QiwKKzB4MDEsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkQsIDB4ODAsIDB4RUMsIDB4MDIsIDB4RjIsCisweDhGLCAweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwOCwgMHgzNSwgMHgxMiwgMHhERiwgMHgwQSwgMHg0RCwgMHgwMywgMHhGMCwgMHg4QywgMHhDNCwgMHgzNCwgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDAsIDB4QzAsIDB4NzMsIDB4MDAsIDB4OEIsIDB4MDAsIDB4NUMsIDB4MDgsIDB4RjAsCisweDA5LCAweEMwLCAweEE3LCAweDAwLCAweENGLCAweDAwLCAweDdDLCAweDQyLCAweEYyLCAweDA5LCAweEMyLCAweDA4LCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMiwgMHgzNCwgMHgwMCwgMHhERCwKKzB4ODAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NzQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsCisweDBCLCAweDAyLCAweDNGLCAweDAwLCAweDkxLCAweDAxLCAweDQ0LCAweDAyLCAweEQwLCAweDBELCAweDQwLCAweDY3LCAweDA0LAorMHhERCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMiwgMHgwRCwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MzIsIDB4MEMsIDB4NEMsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsCisweDBDLCAweDUxLCAweDM0LCAweDAyLCAweDRELCAweDAwLCAweDMwLCAweDAwLCAweEQwLCAweDA4LCAweDQwLCAweDMyLCAweDAwLAorMHg4MSwgMHgwMCwgMHgxNCwgMHgwMCwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhDRCwgMHgyMCwgMHgzNCwgMHgyRSwKKzB4RDAsIDB4MDAsIDB4NTAsIDB4MUMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDgwLCAweDc4LCAweDAwLCAweDZELCAweDQxLCAweDg0LCAweDQ2LCAweEQwLCAweDFFLCAweDQ4LCAweDY4LCAweDAwLAorMHhFRCwgMHgwMSwgMHhCNCwgMHgwNiwgMHhEMCwgMHgxRSwgMHg0MiwgMHg3QiwgMHg2MCwgMHhBMSwgMHgyMSwgMHg4NCwgMHg4NCwKKzB4RDAsIDB4NUUsIDB4NDEsIDB4NkIsIDB4MDAsIDB4RUMsIDB4ODEsIDB4QjQsIDB4MDcsIDB4RDIsIDB4MUIsIDB4NDAsIDB4MTgsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLAorMHhDRiwgMHgwMCwgMHgwQywgMHgwMiwgMHhGMiwgMHgwQywgMHhDMCwgMHgyMCwgMHgwMCwgMHg4RiwgMHgwMCwgMHgzQywgMHgxMiwKKzB4RjAsIDB4NDgsIDB4QzAsIDB4MzMsIDB4MDAsIDB4ODMsIDB4MTAsIDB4MUMsIDB4ODAsIDB4RjgsIDB4MDgsIDB4RTAsIDB4MzMsCisweDAwLCAweENGLCAweDQ4LCAweDNDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDQ4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHg3RCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHg0MiwKKzB4RjAsIDB4MUUsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsCisweDAwLCAweEI3LCAweDAwLCAweEVDLCAweDIyLCAweEYyLCAweDRCLCAweEMwLCAweDNGLCAweDAwLCAweEZFLCAweDAxLCAweEZDLAorMHg0MywgMHhGMCwgMHgwOSwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTEsIDB4QTAsIDB4MzcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDAwLCAweDlGLCAweDAwLCAweDc4LCAweDAyLCAweEYwLCAweDg1LCAweEMwLCAweEYwLCAweDIyLCAweERCLCAweDE0LCAweDc0LAorMHgwMCwgMHhFMCwgMHgxQywgMHhDMCwgMHgyNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwKKzB4NTcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4QjksCisweDAwLCAweDZELCAweDA0LCAweEI0LCAweDEzLCAweEQwLCAweDRFLCAweDQwLCAweDNCLCAweDAwLCAweEFELCAweDAwLCAweEI2LAorMHgwMiwgMHhEMCwgMHg0RSwgMHg1MCwgMHgzOCwgMHgwNCwgMHhBMSwgMHgwMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwKKzB4MjgsIDB4MDAsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDc5LCAweDg5LCAweEVELCAweDA5LCAweEI0LAorMHgwNywgMHhEMCwgMHg5RSwgMHg0MCwgMHg3OSwgMHgwMywgMHhBRCwgMHgwMSwgMHhCNCwgMHgwNiwgMHhEMCwgMHgxNCwgMHg2MiwKKzB4NzgsIDB4MDEsIDB4RTksIDB4MTEsIDB4QjQsIDB4MDQsIDB4RDAsIDB4MUYsIDB4NDAsIDB4NjksIDB4ODgsIDB4RUQsIDB4MEQsCisweEI0LCAweDU3LCAweEQwLCAweDFBLCAweDQwLCAweDBGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwMCwgMHg4RCwgMHhBMCwgMHgzNCwgMHgwNywgMHhEMCwgMHgwQywgMHg0MCwKKzB4NzMsIDB4MTAsIDB4OEQsIDB4MEIsIDB4MzQsIDB4MkEsIDB4RDAsIDB4MkMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDEsCisweDM0LCAweDAzLCAweEQwLCAweERDLCAweDQwLCAweDIxLCAweDIzLCAweENELCAweDAwLCAweDM0LCAweDA3LCAweEQwLCAweDA4LAorMHg0MSwgMHg0QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwKKzB4MTEsIDB4MDAsIDB4N0YsIDB4MjAsIDB4N0MsIDB4MTEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MjQsIDB4N0YsIDB4MDIsCisweEZDLCAweDBELCAweEYwLCAweDA3LCAweEMwLCAweDE0LCAweDAwLCAweDVCLCAweDAxLCAweEZDLCAweDMxLCAweEYwLCAweDA3LAorMHhEMCwgMHg5RCwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgyNywgMHhDMCwgMHg1RiwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDEsCisweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDEwLCAweDcwLCAweDQwLCAweEYwLCAweDgwLAorMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMSwgMHgwMSwgMHg4MCwgMHgwNiwgMHgyOCwgMHgxRiwKKzB4ODAsIDB4NzgsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDI2LCAweEYwLCAweDM5LAorMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg0RCwgMHgwMiwgMHgzMiwgMHgwOSwgMHhDMywgMHg2NCwgMHgwMCwgMHg4RiwKKzB4MDEsIDB4NEMsIDB4MDIsIDB4RjEsIDB4MjksIDB4QzAsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDYsIDB4MzAsCisweDA5LCAweEMwLCAweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgyMCwgMHgyRSwgMHgwMCwgMHhCMSwgMHgwMywgMHhGNCwgMHgwMiwgMHhEMCwgMHgwQiwgMHg0MCwgMHg2RiwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NDQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDY3LCAweDA4LCAweEJELCAweDAwLCAweDg0LCAweDBFLCAweDEwLCAweDA4LCAweDQwLCAweDA0LCAweDAwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMiwgMHhEMSwKKzB4MDgsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDEsIDB4MjcsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsCisweDA5LCAweDUwLCAweDI0LCAweDAxLCAweDlELCAweDA0LCAweDQ0LCAweDAyLCAweEQwLCAweDBELCAweDQyLCAweDI3LCAweDAwLAorMHg4RCwgMHgwMCwgMHg0NCwgMHgxQSwgMHgxMCwgMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MEEsIDB4RDAsCisweDA4LCAweDQyLCAweEEzLCAweDA4LCAweDhELCAweDAyLCAweDQ0LCAweDBBLCAweDEwLCAweDY4LCAweDQxLCAweDIwLCAweDA1LAorMHg4RCwgMHgxNCwgMHgwNSwgMHgwMiwgMHhEMCwgMHgyOCwgMHg0MCwgMHhBMywgMHgwOCwgMHg4RCwgMHgwMiwgMHgwNSwgMHgwMiwKKzB4MTAsIDB4MjksIDB4NDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFELCAweEIwLCAweDU2LCAweDQwLCAweDUzLCAweDAxLCAweDdDLCAweDA0LCAweEYwLCAweDExLCAweEMwLCAweDQ3LCAweDAwLAorMHgxRiwgMHgwMCwgMHg0QywgMHgwMCwgMHgzNCwgMHg0MSwgMHhDMCwgMHgwNCwgMHgwMSwgMHgxRiwgMHgwNCwgMHg0QywgMHgyOCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDEsIDB4NEMsIDB4MDQsIDB4MzQsIDB4MDEsIDB4RDAsIDB4NzQsCisweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweEE3LCAweDAwLAorMHhCRiwgMHgwMiwgMHhGQywgMHgwRSwgMHhGMCwgMHgyOSwgMHhDMCwgMHhFRiwgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHgwNiwKKzB4RjAsIDB4MUIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4ODAsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MUIsIDB4QzAsIDB4NkYsCisweDA4LCAweDlGLCAweDIzLCAweEZDLCAweDBBLCAweEYwLCAweDFCLCAweEMwLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHg2RiwgMHgwMCwgMHhGQiwgMHgxMSwgMHhDRCwgMHgxNiwKKzB4RjAsIDB4MUIsIDB4QzAsIDB4NkYsIDB4MDEsIDB4OTMsIDB4MDAsIDB4NkMsIDB4MEEsIDB4MjAsIDB4NTksIDB4ODAsIDB4NkQsCisweDAxLCAweEEzLCAweDA1LCAweDBDLCAweDAyLCAweEYwLCAweDJCLCAweEM4LCAweDJCLCAweDAwLCAweDlELCAweDg1LCAweENDLAorMHgwNiwgMHgzMCwgMHgyOSwgMHhDMCwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDAsIDB4MTEsIDB4NDIsIDB4NDQsIDB4MTQsIDB4RDAsIDB4MjEsIDB4NDAsIDB4QzcsCisweDAzLCAweDUxLCAweDE1LCAweDY0LCAweDA0LCAweDEwLCAweDMwLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDU0LAorMHgwMCwgMHhEMCwgMHg1MSwgMHg0MCwgMHg1NywgMHgwMCwgMHgxRCwgMHgwNywgMHg0NCwgMHgyOCwgMHgxMCwgMHgxMSwgMHg0MCwKKzB4NzMsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4QTMsCisweDAwLCAweDg5LCAweDAwLCAweDA0LCAweDRBLCAweEQwLCAweDI4LCAweDQyLCAweDIzLCAweDA0LCAweDgxLCAweDIwLCAweDI0LAorMHgwMiwgMHgxMCwgMHhDOCwgMHg2MSwgMHhBMywgMHgwMCwgMHg4MSwgMHgwMiwgMHgwNCwgMHgwMiwgMHg1MCwgMHg0OCwgMHg2MCwKKzB4MzMsIDB4MDUsIDB4OEQsIDB4MTIsIDB4MTQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAwLCAweDkxLCAweDQwLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MiwgMHgyNywgMHg2MCwgMHg5MSwgMHgwOCwgMHgyNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MiwKKzB4MjYsIDB4MDAsIDB4OTEsIDB4MDQsIDB4NTQsIDB4MEEsIDB4RDAsIDB4ODksIDB4NDIsIDB4MjcsIDB4MDEsIDB4OUQsIDB4MDAsCisweDU0LCAweDA2LCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5QiwgMHgwRSwgMHhDQywgMHgyMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4QjMsIDB4MDMsIDB4RUMsIDB4MTIsIDB4MzAsIDB4MUIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsCisweDRDLCAweDA2LCAweEUwLCAweDFCLCAweEMwLCAweEVGLCAweDIwLCAweEJGLCAweDAwLCAweDVELCAweDAyLCAweEYwLCAweDZCLAorMHhDMCwgMHgxNywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwKKzB4MjUsIDB4MDAsIDB4OUYsIDB4MTAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTcsIDB4MDAsIDB4OUYsIDB4MjEsCisweDdDLCAweDEyLCAweEY0LCAweDM4LCAweEQwLCAweDIxLCAweDQwLCAweDlGLCAweDAwLCAweDdDLCAweDBBLCAweEYyLCAweDA5LAorMHhDMCwgMHg2NywgMHgwOCwgMHg5RiwgMHgwMCwgMHgyQywgMHg4MiwgMHgzNCwgMHgzOSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDEsIDB4MDEsIDB4MEYsIDB4MDAsCisweDRELCAweDgwLCAweDMwLCAweDgxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwNCwgMHgxMCwgMHgxNywgMHgwMCwgMHg0QywgMHgwOCwgMHg3MiwgMHgwMSwgMHhEMCwgMHgwNCwgMHg0MCwgMHgwMywKKzB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLCAweERDLCAweDIwLCAweDdELCAweDAwLCAweDQ0LCAweDA1LCAweDEwLCAweDA3LAorMHg0MCwgMHgxNywgMHgwNCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHhDMCwgMHgxNiwgMHgwMCwgMHg0MSwKKzB4MTEsIDB4NDQsIDB4MDEsIDB4MTAsIDB4MTUsIDB4NDMsIDB4MTQsIDB4MDAsIDB4NTEsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDA1LCAweDQwLCAweDUzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHhBMCwgMHhFMiwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwNywgMHgxMCwgMHgwOCwgMHg0MiwgMHgzNywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzAsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4ODUsIDB4MDEsIDB4MDUsIDB4MDMsIDB4NTAsCisweDBDLCAweDQwLCAweDMyLCAweDAwLCAweEMxLCAweDgwLCAweDM0LCAweDAyLCAweEMwLCAweDBDLCAweDQwLCAweDUzLCAweDAwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHhCOCwgMHgwMCwgMHhBRCwKKzB4MDAsIDB4MDQsIDB4NzcsIDB4MTQsIDB4MEUsIDB4NDAsIDB4MkIsIDB4ODIsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MTMsIDB4RDAsCisweDRFLCAweDQwLCAweDJBLCAweDAwLCAweEY1LCAweDAwLCAweEM0LCAweDA3LCAweDUwLCAweERFLCAweDQwLCAweDdFLCAweDAxLAorMHhFMSwgMHgwQywgMHhCNCwgMHgwMywgMHhEMSwgMHg0RSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NjgsIDB4MDAsIDB4QUYsIDB4MDEsIDB4ODQsIDB4MDYsIDB4MzAsCisweDFBLCAweEMwLCAweDdCLCAweDAxLCAweEVGLCAweDAzLCAweEJDLCAweDBGLCAweEYwLCAweDVFLCAweEMwLCAweDZBLCAweDAwLAorMHhFNywgMHgwMSwgMHg4QywgMHgwNywgMHg3MCwgMHgxRiwgMHg4MCwgMHhGQSwgMHgwMCwgMHhFMywgMHgwMSwgMHhCQywgMHgwNiwKKzB4RjAsIDB4M0UsIDB4QzAsIDB4NTMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEI4LCAweDM1LCAweDAwLCAweDhGLCAweDAwLCAweDdDLCAweDAyLCAweEMwLCAweDBELCAweEMwLCAweDI3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhFMCwgMHg4RCwgMHhDNCwgMHgyMywgMHgwMCwgMHhEQiwgMHgwMCwgMHg3QywgMHg2MywKKzB4QjgsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsCisweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDZGLCAweDAwLAorMHhCMywgMHgwMSwgMHhGQywgMHg4NywgMHgzMCwgMHgxQiwgMHg4MCwgMHg3RiwgMHgwMiwgMHhFMywgMHgwMSwgMHg4QywgMHgwNywKKzB4MzAsIDB4MUYsIDB4NDAsIDB4N0MsIDB4MDEsIDB4RkYsIDB4MDEsIDB4RUMsIDB4MDcsIDB4MzAsIDB4MUIsIDB4QzAsIDB4NzgsCisweDI4LCAweEYzLCAweDIxLCAweEZDLCAweDA2LCAweDMwLCAweDFFLCAweEM4LCAweDA4LCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgyOSwgMHg0MCwgMHhBMSwgMHgwMCwgMHhGNCwgMHgwMywKKzB4MTQsIDB4MEEsIDB4NDAsIDB4MkIsIDB4NDgsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MjMsIDB4MTAsIDB4OEUsIDB4NDAsIDB4MjksCisweDAwLCAweEVELCAweDAwLCAweEM0LCAweDQzLCAweEIwLCAweDBBLCAweEMwLCAweDNBLCAweDAyLCAweEUxLCAweDAwLCAweEI0LAorMHgwQiwgMHgxMCwgMHg4RSwgMHg0MCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4QTEsIDB4MTAsIDB4QjQsIDB4MDIsIDB4MTAsIDB4MEEsIDB4NDAsIDB4M0IsCisweDgwLCAweEYxLCAweDAxLCAweEM0LCAweDA3LCAweDEwLCAweDFGLCAweDQwLCAweDI4LCAweDAxLCAweENELCAweDAwLCAweEE0LAorMHgwMywgMHgxMCwgMHgwQiwgMHg0MSwgMHgzRCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHg2MiwgMHgxNCwgMHgxRiwgMHg0MCwKKzB4MjAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4MTMsCisweDAwLCAweDgxLCAweDAxLCAweDM0LCAweDg2LCAweDEwLCAweDBDLCAweDQwLCAweDYzLCAweDAwLCAweEMxLCAweDA3LCAweDA0LAorMHgwQiwgMHgxOCwgMHgzQywgMHg0MCwgMHgyMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgxNywgMHg5MCwgMHgzQywgMHg0MywKKzB4NjcsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDcsIDB4MTAsIDB4MUMsIDB4NDAsIDB4MTgsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDI1LCAweDAwLCAweEQzLCAweDAzLCAweDdDLAorMHgxMywgMHgzMCwgMHgwOSwgMHhDMiwgMHg3NywgMHgwNCwgMHhEMywgMHgwNCwgMHg0NSwgMHgyQiwgMHgzNCwgMHg2RCwgMHhDMCwKKzB4MjQsIDB4MDAsIDB4REYsIDB4MTEsIDB4RUMsIDB4MDMsIDB4MzAsIDB4M0MsIDB4QzAsIDB4NjUsIDB4NDQsIDB4RDMsIDB4MjAsCisweDNDLCAweDAyLCAweDMwLCAweDZELCAweEQwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHhDRiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgyRCwgMHhDMCwKKzB4MjcsIDB4MDgsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REQsIDB4NDAsCisweDdDLCAweDgzLCAweEYyLCAweDBELCAweEMwLCAweDI2LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDBBLCAweEYwLCAweDRELAorMHhDMCwgMHgyNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwKKzB4MkYsIDB4MDAsIDB4QkYsIDB4MTAsIDB4OEMsIDB4MDYsIDB4MzEsIDB4MEIsIDB4RDAsIDB4QjQsIDB4MDAsIDB4RkYsIDB4MDAsCisweENDLCAweDAzLCAweEYwLCAweDBGLCAweEMxLCAweEVGLCAweDAwLCAweEZGLCAweDg1LCAweENDLCAweDAzLCAweDMwLCAweDRGLAorMHhDMCwgMHhFQywgMHgwMCwgMHhGMywgMHgwMCwgMHg0QywgMHgxNiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNCwgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDMsCisweDQ0LCAweDAyLCAweDExLCAweDI0LCAweDQwLCAweDc0LCAweDAwLCAweERELCAweDQwLCAweDQ0LCAweDAzLCAweEQwLCAweDBELAorMHg0MiwgMHg2NywgMHgyMCwgMHhDRCwgMHgwMSwgMHg0NCwgMHgwMywgMHgxMCwgMHgxOSwgMHg0OCwgMHg3NCwgMHgyMCwgMHhEMSwKKzB4MDAsIDB4NDQsIDB4MDEsIDB4MDAsIDB4MEQsIDB4NDAsIDB4ODQsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDI2LCAweDAwLCAweERELCAweDA2LCAweDQ0LCAweEEzLCAweDE0LCAweDA5LAorMHg0MSwgMHgzNCwgMHgwMCwgMHhDRCwgMHgwMCwgMHg2NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgxMCwgMHhERCwKKzB4MDAsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4NDAsIDB4QzEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsCisweDBDLCAweDQwLCAweDA0LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwMCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MDUsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4ODAsIDB4REQsIDB4NDAsIDB4MDQsIDB4MDMsIDB4MTQsCisweDA5LCAweDUwLCAweDIwLCAweDAwLCAweEMxLCAweDQwLCAweDA0LCAweDAyLCAweDE2LCAweDBDLCAweDU0LCAweDQwLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyNiwgMHgwMCwgMHgxRiwKKzB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MDksIDB4Q0EsIDB4MjQsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsCisweDBGLCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweENELCAweDAzLCAweDMwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLAorMHhGMywgMHgwMCwgMHg0RCwgMHgwMiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgwNCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MUYsIDB4MDAsIDB4N0YsIDB4MDAsIDB4RUQsIDB4MDIsIDB4RjAsCisweDA3LCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBFLCAweEMwLCAweDJGLCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwKKzB4RjAsIDB4MEYsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEY3LCAweDBDLCAweENDLCAweDFCLCAweDcwLCAweDNBLCAweEMwLCAweEVDLCAweDAwLAorMHhCQiwgMHgwNCwgMHhGQywgMHgwMywgMHgzMCwgMHgxRSwgMHhDMCwgMHgzRSwgMHgwMCwgMHhBNywgMHgwMSwgMHg4QywgMHgwNiwKKzB4MzAsIDB4MUIsIDB4QzAsIDB4N0UsIDB4MTIsIDB4QkYsIDB4MDQsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MDMsIDB4QzQsIDB4MEUsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDc3LCAweDAwLAorMHhGMSwgMHg4RSwgMHhDNCwgMHgzQiwgMHgxMCwgMHg0OSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwRSwgMHhGNCwgMHgyRiwKKzB4NTAsIDB4MTksIDB4NDAsIDB4RjQsIDB4MDAsIDB4NUQsIDB4MDEsIDB4NDQsIDB4NTAsIDB4MTAsIDB4MTksIDB4NDAsIDB4MzQsCisweDAwLCAweEM5LCAweDE0LCAweDQ0LCAweDAzLCAweEQwLCAweDE5LCAweDQwLCAweDA0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMiwgMHgzMywgMHgyMCwgMHhDNSwgMHgwNCwgMHgwNCwgMHgxMywKKzB4NTAsIDB4NDksIDB4NDAsIDB4MzAsIDB4MDEsIDB4MDksIDB4MTAsIDB4MTQsIDB4MDMsIDB4MTIsIDB4MDgsIDB4NjAsIDB4MzIsCisweDAyLCAweENELCAweDgwLCAweDQ0LCAweDEwLCAweDEwLCAweDA4LCAweDQwLCAweDMzLCAweDAwLCAweDhELCAweDBDLCAweDA0LAorMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwgMHg0NywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDYsIDB4MDMsIDB4MTAsIDB4MTksIDB4NDEsIDB4NzAsCisweDAwLCAweDExLCAweDAxLCAweDc0LCAweDAzLCAweDEwLCAweDE5LCAweDQwLCAweDM0LCAweDAwLCAweERELCAweDg0LCAweDQ2LAorMHg4NCwgMHgxMCwgMHgwOSwgMHg0MCwgMHgzNSwgMHgwMCwgMHg5OSwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgxOSwgMHg0MSwKKzB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4QTgsIDB4MzYsCisweDA4LCAweEQ3LCAweDAwLCAweDQ4LCAweDAzLCAweDcwLCAweDM5LCAweEMwLCAweDQ0LCAweDAxLCAweDlCLCAweDA1LCAweDVDLAorMHg4MywgMHgzMCwgMHgxOSwgMHhDMCwgMHgzNiwgMHg4MCwgMHhENywgMHgwMCwgMHg0QywgMHg0RSwgMHgzMSwgMHgwOCwgMHhDMCwKKzB4MzcsIDB4MDIsIDB4OUYsIDB4MDAsIDB4NEQsIDB4MDcsIDB4RjAsIDB4MzAsIDB4QzAsIDB4MDMsIDB4MjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgyLCAweDNELCAweDEwLCAweEVGLCAweDAwLCAweEZDLAorMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHg4MCwgMHhGQywgMHg0MywgMHhGMCwgMHgwQiwgMHhDMCwKKzB4M0YsIDB4QTQsIDB4RkYsIDB4MDEsIDB4RkQsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzIsIDB4M0UsIDB4MDAsIDB4RUYsIDB4MDIsCisweEZDLCAweDhGLCAweEYwLCAweDAzLCAweEMwLCAweDFFLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgyMSwgMHhDMCwKKzB4MzUsIDB4MDAsIDB4OTcsIDB4MDgsIDB4MEMsIDB4MDMsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MzQsIDB4MDIsIDB4RDcsIDB4MTAsCisweDRDLCAweDAwLCAweEIxLCAweDBELCAweEMwLCAweDM3LCAweDA0LCAweEQzLCAweDE4LCAweDQ0LCAweDAzLCAweEYwLCAweDIxLAorMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwKKzB4NzAsIDB4MDAsIDB4RkQsIDB4MEYsIDB4RjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NjAsIDB4MzQsIDB4MDAsIDB4OTEsIDB4MDMsCisweEM0LCAweDRGLCAweDMwLCAweEMwLCAweEMwLCAweDNDLCAweDA4LCAweEMxLCAweDExLCAweDJDLCAweDAwLCAweDEwLCAweDhELAorMHg0MCwgMHhGNCwgMHgwMCwgMHhENSwgMHgwMCwgMHg0NCwgMHgwQiwgMHhEMCwgMHhCMSwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4NzIsIDB4MDAsIDB4Q0QsIDB4MDMsCisweDc0LCAweDA3LCAweDUwLCAweDA4LCAweDQ0LCAweDMxLCAweDAwLCAweDA1LCAweDEyLCAweDE0LCAweDBCLCAweEQwLCAweDE4LAorMHg0MCwgMHhGMCwgMHgyMCwgMHhDNSwgMHgwMCwgMHgyNCwgMHgwMiwgMHhEMiwgMHgwMCwgMHgwNiwgMHhGMywgMHgwMCwgMHg4OSwKKzB4MDEsIDB4MDQsIDB4MzcsIDB4RDAsIDB4OTAsIDB4NDAsIDB4MUQsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgyLCAweDc4LCAweDA0LCAweEVELCAweDgxLCAweEI0LCAweDRGLCAweEQwLCAweDFCLAorMHg0OCwgMHg3RCwgMHgwOCwgMHhFMSwgMHgwOSwgMHg5NSwgMHgwNywgMHgwMCwgMHg5QiwgMHg0MCwgMHg3OCwgMHgwMCwgMHg2MSwKKzB4MDEsIDB4RTQsIDB4MDQsIDB4MTAsIDB4OUEsIDB4NDAsIDB4NzgsIDB4MDYsIDB4QUQsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDksCisweDFBLCAweDQ4LCAweDE4LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorMHgxMCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHg3MCwgMHgwOCwgMHg0MCwgMHgzMSwgMHgwMCwgMHg1NywKKzB4MDAsIDB4MUMsIDB4MDMsIDB4RjAsIDB4ODgsIDB4QzAsIDB4MzAsIDB4MDAsIDB4QzcsIDB4MDAsIDB4MkMsIDB4MDAsIDB4QjAsCisweDAwLCAweEMwLCAweDM3LCAweDAwLCAweDhCLCAweDBDLCAweDBDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDQ5LCAweDQ4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCMCwgMHgzRCwgMHgwMCwgMHhGRiwKKzB4MDIsIDB4RkMsIDB4NEIsIDB4RjAsIDB4OEIsIDB4ODAsIDB4M0EsIDB4MDIsIDB4RkYsIDB4MDAsIDB4QUMsIDB4NjMsIDB4RjEsCisweDhCLCAweEQwLCAweDNCLCAweDAwLCAweEZGLCAweDQ4LCAweEZDLCAweDAwLCAweEYwLCAweDBBLCAweEMyLCAweDNGLCAweDAwLAorMHg5NywgMHgyOCwgMHhGRCwgMHgwMywgMHhGMCwgMHg4RSwgMHhDMCwgMHgwOSwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MEMsIDB4N0MsIDB4MEIsIDB4RjAsCisweDA5LCAweEMwLCAweDM0LCAweDAwLCAweDU3LCAweDAxLCAweDRDLCAweDFCLCAweEYxLCAweDA5LCAweEMwLCAweDM0LCAweDEyLAorMHhDRiwgMHgwMCwgMHg0QywgMHgwMywgMHhCMCwgMHgwMSwgMHhDMCwgMHg3NiwgMHg5MCwgMHhEQiwgMHgwMCwgMHg3QywgMHg4MywKKzB4MzAsIDB4MDUsIDB4QzAsIDB4NTQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDg4LCAweDM5LCAweDAwLCAweEVELCAweDA0LCAweEI0LCAweDEzLCAweEQwLCAweDBGLCAweDQ0LCAweDM4LCAweDAwLAorMHhFMSwgMHgwMCwgMHg4NCwgMHgzMywgMHhEOCwgMHgwQSwgMHg0MiwgMHgzOCwgMHgwMCwgMHhFRCwgMHhBMCwgMHg4NCwgMHg4MSwKKzB4MTQsIDB4MEUsIDB4NDQsIDB4MzksIDB4MDAsIDB4RTUsIDB4MDAsIDB4QjQsIDB4MDMsIDB4NTAsIDB4MEUsIDB4NDAsIDB4NDgsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAyLCAweDc5LCAweDAwLAorMHhFRCwgMHgwNSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxQSwgMHg1NCwgMHg3QywgMHgwMCwgMHg0NSwgMHgwMSwgMHg4NCwgMHgxNywKKzB4QzAsIDB4MTMsIDB4NDgsIDB4NzgsIDB4MDEsIDB4RUMsIDB4MDEsIDB4QzUsIDB4MDUsIDB4MTIsIDB4MTYsIDB4NDAsIDB4N0QsCisweDgwLCAweEUxLCAweEExLCAweEY0LCAweDhGLCAweDExLCAweDFDLCAweDYwLCAweDBDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywKKzB4RDgsIDB4MkMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDMsIDB4MDQsIDB4MDMsIDB4RDAsIDB4ODAsIDB4NDAsIDB4MzAsCisweDIwLCAweENELCAweDA1LCAweDA0LCAweDE1LCAweDEwLCAweDBDLCAweDQwLCAweDIxLCAweDAwLCAweEM1LCAweDA4LCAweDc0LAorMHgwNiwgMHg1MCwgMHgyQywgMHg0MSwgMHg0OCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RDAsIDB4NDcsIDB4QzAsIDB4OTgsCisweDAwLCAweDc3LCAweDQ5LCAweDRDLCAweDAxLCAweEYwLCAweEE3LCAweEM4LCAweDE0LCAweDAwLCAweDdGLCAweDA3LCAweDhDLAorMHgxNSwgMHgzMCwgMHg0NywgMHhDMCwgMHg1NSwgMHgwMCwgMHg1QiwgMHgyMSwgMHg3QywgMHgwMSwgMHgxMCwgMHgyNywgMHhEMSwKKzB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsCisweDAwLCAweDFGLCAweDgyLCAweDdDLCAweDAwLCAweEYxLCAweDAxLCAweEMxLCAweDA3LCAweDAxLCAweDFGLCAweEE4LCAweDdELAorMHgwOCwgMHhEMCwgMHgyMSwgMHhENCwgMHg4NywgMHgwMCwgMHgxRiwgMHg0MCwgMHg3QywgMHgwMCwgMHg3MCwgMHgyMSwgMHhDMCwKKzB4MDUsIDB4MDIsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAxLCAweDlGLCAweDAzLCAweDNDLAorMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwOCwgMHg5NywgMHgwMSwgMHg3QywgMHgxMiwgMHhGMiwgMHgyOSwgMHhDMCwKKzB4MjYsIDB4MDAsIDB4OUYsIDB4MDgsIDB4NUMsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OEYsIDB4MDksCisweDRELCAweDAyLCAweDMwLCAweDQ4LCAweEMwLCAweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMywgMHg3NCwgMHgwQSwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4MjQsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MUEsIDB4RDAsIDB4MDgsIDB4NDEsIDB4RTQsIDB4MDEsIDB4OEQsIDB4NjAsCisweDQ0LCAweDAyLCAweDEyLCAweDY4LCAweDQwLCAweDI0LCAweDAzLCAweDlELCAweDAyLCAweDQ0LCAweDAyLCAweDMwLCAweDI5LAorMHg1MCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwKKzB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4NDYsIDB4NTAsIDB4MDgsIDB4NDIsIDB4MjQsIDB4MDAsIDB4OTUsIDB4MDgsCisweDc0LCAweDgyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAyLCAweDlELCAweDAwLCAweDU0LCAweDAyLCAweDUyLCAweDBELAorMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMiwgMHg0NCwgMHgwQSwgMHgxMCwgMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4Q0QsIDB4MTQsCisweDM0LCAweDUyLCAweDU0LCAweDA4LCAweDQwLCAweDI0LCAweDBBLCAweEMxLCAweDk0LCAweDMwLCAweEQyLCAweEQwLCAweDA5LAorMHg0MCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxOSwgMHgwOSwgMHg3MCwgMHgyMCwgMHgxMCwgMHg4RCwKKzB4MDgsIDB4MDQsIDB4MDIsIDB4MTQsIDB4NEMsIDB4NDEsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA3LCAweDAwLCAweDFGLCAweDA0LCAweDdDLCAweDEwLCAweDcwLCAweDAxLAorMHhEMCwgMHg4NCwgMHgwMCwgMHgxNywgMHgwNCwgMHg3OCwgMHgxMCwgMHhGMCwgMHgwMSwgMHhDNCwgMHgwNywgMHgwNSwgMHgxRCwKKzB4NDAsIDB4NUMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MTYsIDB4NEMsIDB4MDAsIDB4MzAsCisweDQxLCAweEMwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LAorMHhCMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgxNCwgMHg3QywgMHg1MiwgMHhCMSwgMHg0QiwgMHhDMSwgMHgyQiwgMHgwMSwgMHhCRiwKKzB4OTQsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MEEsIDB4QzAsIDB4MjYsIDB4MTAsIDB4RkUsIDB4MDAsIDB4QkMsIDB4NTMsIDB4RjAsCisweDBBLCAweEMwLCAweDJCLCAweDE1LCAweEJGLCAweDA0LCAweEJDLCAweDUyLCAweDcwLCAweDBCLCAweEMwLCAweDY3LCAweDYwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBMCwgMHgyRiwgMHgwMCwgMHhCRiwKKzB4MDEsIDB4Q0MsIDB4NUUsIDB4RTAsIDB4MjgsIDB4QzAsIDB4QTcsIDB4MDAsIDB4QjcsIDB4MDksIDB4RUMsIDB4MTIsIDB4NzAsCisweDBBLCAweEMwLCAweDJGLCAweDA0LCAweEFELCAweDAwLCAweDRDLCAweDAyLCAweDMwLCAweDBBLCAweEMwLCAweEFFLCAweDAwLAorMHhCQiwgMHgwMCwgMHhDRCwgMHgwMiwgMHhCMCwgMHgwQiwgMHhDMCwgMHg2NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MEYsIDB4NDQsIDB4MDgsIDB4RDAsCisweDAxLCAweDQwLCAweDA3LCAweDAxLCAweDExLCAweDBCLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDg3LCAweDAwLAorMHgxOSwgMHgwMCwgMHg0NCwgMHgxMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMSwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4NzMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEEwLCAweDIzLCAweDAwLCAweDhELCAweDEwLCAweDA0LCAweDEyLCAweEQwLCAweDQ4LCAweDQwLCAweDY3LCAweDAwLAorMHg4NSwgMHgwNCwgMHgyNCwgMHgwQiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgzMywgMHgwMCwgMHg5OSwgMHgwMCwgMHgwNCwgMHg0MiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MjIsIDB4MDEsIDB4ODksIDB4MDAsIDB4MjQsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4NDMsCisweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAwLAorMHg5RCwgMHg2MCwgMHg0NCwgMHgwMiwgMHhDOCwgMHgwOSwgMHg0MSwgMHgyNywgMHgwMiwgMHg5MSwgMHgwMCwgMHg2NCwgMHgwMiwKKzB4MTAsIDB4MDksIDB4NDQsIDB4MjcsIDB4MDAsIDB4OTksIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTEsIDB4MDksIDB4MDAsIDB4NjQsCisweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDYzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwKKzB4QzEsIDB4MzksIDB4QzgsIDB4NjcsIDB4MDAsIDB4OTUsIDB4NTEsIDB4NkMsIDB4MDIsIDB4NzAsIDB4NzksIDB4QzAsIDB4MjcsCisweDAwLCAweDlCLCAweDAxLCAweDRDLCAweDBFLCAweDMwLCAweDE5LCAweEMwLCAweDI2LCAweDAwLCAweDlCLCAweDAwLCAweDRDLAorMHgwNiwgMHhCMCwgMHgwOSwgMHhDMSwgMHgxNywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4MDAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0QsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4NjcsCisweDAwLCAweDhGLCAweDA1LCAweDFDLCAweDAyLCAweEYwLCAweDk5LCAweEM0LCAweDI3LCAweDI0LCAweDlCLCAweDAzLCAweDdELAorMHgxMiwgMHhGNCwgMHg5OSwgMHhDMywgMHgyNywgMHgwMCwgMHg5RiwgMHgxMywgMHg3QywgMHhENiwgMHhGMCwgMHg0OSwgMHhDMSwKKzB4NTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDQsCisweDAwLCAweDBGLCAweDA0LCAweDdDLCAweDAwLCAweEY0LCAweDIxLCAweEMyLCAweDA0LCAweDQwLCAweDEzLCAweDAwLCAweDZDLAorMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwMiwgMHg1QywgMHgwOCwgMHgzMSwgMHgwMSwgMHhDMCwKKzB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLCAweDU0LCAweDA0LCAweDdELCAweDAwLCAweEY0LAorMHg2MSwgMHgxMCwgMHgwNSwgMHhDMCwgMHgxMiwgMHgwMCwgMHg3MSwgMHgwNywgMHhDNCwgMHgwOSwgMHhEMCwgMHgyNywgMHg0MCwKKzB4MUMsIDB4MDAsIDB4NkQsIDB4NjAsIDB4NDQsIDB4MDEsIDB4MTIsIDB4MzYsIDB4NDEsIDB4MUMsIDB4MDEsIDB4N0QsIDB4NDcsCisweEM0LCAweDg1LCAweDUwLCAweDI3LCAweDQwLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHg4MCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwRiwgMHgxMCwgMHgwQywgMHg0MCwKKzB4MzAsIDB4MDAsIDB4QzEsIDB4MDcsIDB4MjQsIDB4MDksIDB4RDEsIDB4QzQsIDB4NDAsIDB4QjMsIDB4MDAsIDB4OEQsIDB4MDAsCisweDE0LCAweDAzLCAweDEwLCAweDAwLCAweDQ4LCAweDM1LCAweDA5LCAweERELCAweDAzLCAweDQ1LCAweEFGLCAweDEwLCAweEFDLAorMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4OCwKKzB4MjgsIDB4MDAsIDB4NkQsIDB4ODIsIDB4QjQsIDB4MDcsIDB4MTAsIDB4REYsIDB4NDAsIDB4M0EsIDB4MDMsIDB4RTEsIDB4MDAsCisweDg0LCAweDAzLCAweEQwLCAweDEzLCAweDQ4LCAweDM5LCAweDgwLCAweDdELCAweDgwLCAweEQ0LCAweDEzLCAweDFDLCAweDAyLAorMHg0MCwgMHgzOSwgMHgxMCwgMHhFRCwgMHgyMCwgMHhDNCwgMHgwMywgMHg0MSwgMHgxQywgMHg0MCwgMHgxMCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NjgsIDB4MDAsIDB4RUYsIDB4MDEsCisweDNDLCAweDA1LCAweDMwLCAweERFLCAweEMwLCAweDdDLCAweDAwLCAweDczLCAweDAxLCAweEFDLCAweDA3LCAweEYwLCAweDFFLAorMHhDMCwgMHg1QiwgMHgwMCwgMHhBRiwgMHgwMSwgMHg5QywgMHgxNywgMHgzMCwgMHgxMiwgMHhEMCwgMHg3OSwgMHg5MCwgMHhCRiwKKzB4MDEsIDB4Q0MsIDB4MDcsIDB4MjAsIDB4MUUsIDB4QzAsIDB4NTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDI1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweDMxLCAweDBELAorMHhDOCwgMHhCNywgMHgwNSwgMHg1RiwgMHgyMCwgMHg3MCwgMHgwMywgMHhGMSwgMHgwMSwgMHhDMCwgMHgxNiwgMHgwMCwgMHg1RiwKKzB4ODAsIDB4MkMsIDB4NkIsIDB4RjAsIDB4MDEsIDB4RDAsIDB4MzYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsCisweDBELCAweEQwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHhBMCwgMHg2RiwgMHgwMiwgMHhGNywgMHgwOSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3OCwgMHgwMCwgMHhGQiwKKzB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MTcsIDB4QzAsIDB4N0UsIDB4MDAsIDB4QkIsIDB4MDEsIDB4Q0MsIDB4MTcsIDB4QjAsCisweDk3LCAweEMwLCAweDdDLCAweDA4LCAweDdGLCAweDAxLCAweENDLCAweDA1LCAweEYxLCAweDFGLCAweEMwLCAweDBCLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgyOSwgMHgwMCwgMHg2RCwKKzB4NDgsIDB4QjAsIDB4MDMsIDB4RDAsIDB4NEUsIDB4QzAsIDB4M0IsIDB4MDEsIDB4NjEsIDB4MjIsIDB4QjQsIDB4OEIsIDB4RDAsCisweDQ2LCAweDQwLCAweEI4LCAweDA4LCAweDcxLCAweDAwLCAweEZDLCAweDEzLCAweDEwLCAweEM2LCAweDQwLCAweDM4LCAweDAwLAorMHg2RCwgMHg0OCwgMHg4NCwgMHgwMCwgMHhEMCwgMHg0MiwgMHg0MCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjksIDB4MjAsIDB4RTUsIDB4NDAsIDB4QjQsIDB4MDMsIDB4RDAsCisweDBGLCAweDQwLCAweDNDLCAweDEwLCAweEU5LCAweDA4LCAweEI0LCAweDAzLCAweEQwLCAweDA3LCAweDQxLCAweDFCLCAweDAyLAorMHhCOSwgMHgwOCwgMHhBNCwgMHg3MywgMHg5MiwgMHgwNiwgMHg0MSwgMHgxOCwgMHgwMCwgMHgyRCwgMHgwMCwgMHhBNCwgMHg2MSwKKzB4RDAsIDB4MEUsIDB4NjAsIDB4MjMsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA2LCAweDI4LCAweDIzLCAweDAwLCAweDlELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweEVDLCAweDYwLCAweEIyLCAweDA0LAorMHgwOSwgMHgwMSwgMHgzNCwgMHgwMywgMHhEMCwgMHgxMCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MSwgMHgyMywgMHgzNiwgMHgwRiwKKzB4MTIsIDB4MzQsIDB4NDEsIDB4MjAsIDB4MjAsIDB4MEQsIDB4MDksIDB4NjAsIDB4MDQsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MUIsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweEE4LCAweDI1LCAweDAwLAorMHg5NywgMHgwMCwgMHg3NCwgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQywgMHgwMCwgMHg5QiwgMHgwMiwgMHg3QywgMHgwMywKKzB4RjAsIDB4MDUsIDB4ODAsIDB4MzcsIDB4MDAsIDB4NEIsIDB4MDUsIDB4RUMsIDB4MDcsIDB4QjAsIDB4MzQsIDB4RDAsIDB4MDQsCisweDgwLCAweERGLCAweDAxLCAweDZELCAweDA2LCAweEQwLCAweDBELCAweDQ4LCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgwMCwgMHgyNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDgsIDB4OTcsIDB4MEUsIDB4NzQsIDB4MEIsIDB4RTAsIDB4MDEsIDB4QTAsIDB4MzYsCisweDEwLCAweDVGLCAweDAyLCAweDVDLCAweDEzLCAweEYwLCAweDA1LCAweEMwLCAweDg3LCAweDBBLCAweERGLCAweDAyLCAweDVDLAorMHgwMiwgMHhGMCwgMHgwRCwgMHhDOCwgMHgyNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4ODEsIDB4MDgsIDB4QUYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0UsCisweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweEYxLCAweDA3LCAweEM4LCAweDE3LCAweDIwLCAweDNCLCAweDE4LCAweENDLAorMHgwMywgMHhCMiwgMHgwNywgMHhEMCwgMHgwRSwgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHgwMiwgMHgzMCwgMHgyMywgMHhDMSwKKzB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDEsIDB4MjYsCisweDIwLCAweDFELCAweDAxLCAweDQ0LCAweDA0LCAweEQwLCAweDBDLCAweEMwLCAweDM2LCAweDAwLCAweDFELCAweDAxLCAweDc0LAorMHgwRiwgMHhEMCwgMHgzMSwgMHg0MiwgMHhENywgMHgwMCwgMHg1RCwgMHg1MiwgMHgwNCwgMHgwMywgMHgxMCwgMHgzNSwgMHg0MCwKKzB4NDQsIDB4MDQsIDB4MUQsIDB4MDMsIDB4NzQsIDB4OEMsIDB4MTAsIDB4MjEsIDB4NDAsIDB4ODcsIDB4MDIsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDI2LCAweDgwLCAweDlELCAweDMxLCAweDY0LAorMHgwQywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwNywgMHg1MCwgMHgxNSwgMHg0MSwKKzB4NzcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NDcsIDB4MDMsIDB4OTAsIDB4MUQsIDB4NDEsIDB4NjQsIDB4MDAsIDB4NUQsIDB4OTQsCisweDc0LCAweDQ2LCAweDEwLCAweDJELCAweDQ4LCAweDA3LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwRCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MzIsIDB4MDAsIDB4OEQsIDB4MjAsIDB4MzQsIDB4ODMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4MDAsIDB4NEQsIDB4MDAsCisweDQ2LCAweDAzLCAweDEwLCAweDA0LCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDI2LCAweDgyLCAweDFDLCAweDAwLAorMHg0MCwgMHg0MywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwKKzB4MjQsIDB4MDAsIDB4OUYsIDB4ODAsIDB4NkMsIDB4MDAsIDB4RjEsIDB4MEYsIDB4QzAsIDB4M0UsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAzLCAweDcwLCAweDA1LCAweEM0LCAweDE3LCAweDAwLCAweDFCLCAweDAwLCAweENDLCAweDAzLCAweEI0LCAweDA1LAorMHhDMCwgMHgwNCwgMHgwMCwgMHg0RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwMSwgMHhDNCwgMHgwNywgMHg0MCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjAsIDB4MkYsIDB4MDAsIDB4QkUsIDB4MDAsCisweEZDLCAweDAyLCAweEYwLCAweDBFLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDAyLAorMHhDMCwgMHgzRiwgMHgyMCwgMHg3RiwgMHg0MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwNiwgMHhDMCwgMHgyRiwgMHgwMCwgMHgzRiwKKzB4MDAsIDB4RkMsIDB4MDAsIDB4RjIsIDB4MDMsIDB4RTAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEJGLCAweDAxLCAweEVDLCAweDMyLCAweEYyLCAweEM3LAorMHhDOCwgMHg1RiwgMHgwMiwgMHgzMywgMHhBMSwgMHhGQywgMHgwNywgMHgzMCwgMHg2QiwgMHhDOCwgMHgzRiwgMHgwOCwgMHhCMywKKzB4MDAsIDB4RUMsIDB4MDQsIDB4MTAsIDB4MUIsIDB4QzgsIDB4MUYsIDB4MDMsIDB4RkQsIDB4MDksIDB4Q0MsIDB4ODIsIDB4MzIsCisweDFGLCAweEM2LCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgwOCwgMHg3RiwgMHgwMCwgMHhERCwgMHg4MSwgMHg3NCwgMHgzMiwgMHhEMiwgMHhDNSwgMHg0MCwgMHgwNywgMHgxMSwgMHhEMSwKKzB4MDEsIDB4RjQsIDB4MDcsIDB4MTAsIDB4NjksIDB4NDgsIDB4RkYsIDB4MDAsIDB4OTUsIDB4MDMsIDB4NzQsIDB4MDQsIDB4MTAsCisweDFELCAweDQwLCAweDk3LCAweDAxLCAweEVELCAweDA0LCAweDQ0LCAweDBFLCAweDEwLCAweDFGLCAweDQwLCAweDBGLCAweDYwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4NDQsIDB4NDAsIDB4MzcsIDB4MDEsIDB4QzUsIDB4MDEsIDB4MTQsIDB4ODMsIDB4MTAsCisweDI4LCAweDQwLCAweDMzLCAweDBBLCAweDAxLCAweDA4LCAweDc0LCAweDAwLCAweDEwLCAweDBDLCAweDQwLCAweDkzLCAweDAwLAorMHhDRCwgMHgwMCwgMHgxNCwgMHgyMiwgMHgxQSwgMHgwQywgMHg0MCwgMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MzUsIDB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4ODIsIDB4RDAsCisweDY1LCAweDQwLCAweDI3LCAweDAwLCAweEQwLCAweDAxLCAweDc0LCAweDAzLCAweDUwLCAweDBELCAweDQyLCAweDM3LCAweDA4LAorMHg5NSwgMHgyMCwgMHg3NCwgMHgwNCwgMHgxMCwgMHgxRCwgMHg0MiwgMHgzNywgMHgwOSwgMHhEQywgMHgwMCwgMHg1NCwgMHgxMywKKzB4MTAsIDB4MEQsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEE4LCAweDM3LCAweDAwLCAweERGLCAweDA1LCAweDZDLCAweDAyLCAweEYwLCAweDA1LCAweEMwLCAweEIzLCAweDAxLAorMHhENywgMHgyMSwgMHgzQywgMHgwMywgMHgzNCwgMHgxRCwgMHhDMCwgMHgzNywgMHgxMCwgMHg5MywgMHg4MCwgMHgyOCwgMHgwQywKKzB4MzIsIDB4MUQsIDB4QzEsIDB4NTcsIDB4MDAsIDB4REYsIDB4ODAsIDB4NUMsIDB4ODYsIDB4MzEsIDB4MEQsIDB4QzAsIDB4MEIsCisweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLAorMHhGRSwgMHgwMCwgMHhGQywgMHgyMywgMHhGMSwgMHgwRiwgMHhDMCwgMHhCRiwgMHg0MCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywKKzB4QTAsIDB4M0IsIDB4QzAsIDB4MzcsIDB4MDQsIDB4QkYsIDB4MjMsIDB4RjAsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzEsIDB4MUYsCisweDAwLCAweEZGLCAweDAwLCAweDJDLCAweDAyLCAweEYwLCAweDBGLCAweEM0LCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwNywKKzB4NzAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4ODAsIDB4N0MsIDB4NDMsIDB4MzQsIDB4MEQsIDB4QzAsIDB4MzMsCisweDQyLCAweDEzLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweEI3LCAweDA4LCAweEMzLCAweDAwLCAweDRDLAorMHg0MywgMHg3MCwgMHgwRCwgMHhDMSwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTMsIDB4QTAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4QjQsCisweDA4LCAweERBLCAweDAxLCAweDc0LCAweDA3LCAweDAwLCAweDRELCAweDQ2LCAweEJGLCAweDAwLCAweEIxLCAweDAwLCAweDQ0LAorMHg0OCwgMHhEMCwgMHgyRCwgMHg0MCwgMHg3NywgMHgwNCwgMHhEMSwgMHgwMCwgMHg0MCwgMHgwRiwgMHgxMCwgMHgzRCwgMHg0MCwKKzB4NkYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MzIsCisweDAwLCAweEMxLCAweDAwLCAweDIwLCAweDAyLCAweDEwLCAweDlDLCAweDQwLCAweDYwLCAweDI2LCAweEM1LCAweDAxLCAweDI0LAorMHgyNywgMHgxMCwgMHgwOCwgMHgwMCwgMHhGMywgMHgwMCwgMHg4OSwgMHgwMSwgMHgzNSwgMHg0NCwgMHhEMCwgMHgyQywgMHg0MCwKKzB4MzMsIDB4MDAsIDB4QzUsIDB4MjksIDB4MDQsIDB4MkYsIDB4OTAsIDB4QkMsIDB4NDIsIDB4MEYsIDB4MDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDc4LCAweDAwLCAweEUxLCAweDAxLCAweEI2LAorMHgwNiwgMHgxMCwgMHgxNCwgMHg1OCwgMHg2OCwgMHgxMCwgMHhFRCwgMHg1MSwgMHgzNCwgMHgwNywgMHgxMCwgMHgxQSwgMHg0MiwKKzB4N0IsIDB4MTAsIDB4ODksIDB4MDEsIDB4OTQsIDB4MDQsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NUIsIDB4QzIsIDB4RTUsIDB4MDMsCisweDg0LCAweDA2LCAweDkwLCAweDFFLCAweDQwLCAweDc3LCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDNywgMHgwMCwgMHg3RSwgMHgwMiwgMHg3MCwgMHgwNCwgMHhDMCwKKzB4MjAsIDB4ODIsIDB4QzcsIDB4ODAsIDB4MkMsIDB4MTMsIDB4MzgsIDB4MEMsIDB4RTAsIDB4MzMsIDB4MDAsIDB4MEIsIDB4OTAsCisweDFDLCAweDMwLCAweEYwLCAweDBDLCAweEMwLCAweEI3LCAweEEwLCAweEM3LCAweDgwLCAweDBDLCAweDAzLCAweEYwLCAweDBDLAorMHhDMCwgMHg0QiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwKKzB4NzksIDB4QzAsIDB4RkYsIDB4MDAsIDB4RjQsIDB4MDIsIDB4RjgsIDB4MDcsIDB4QzgsIDB4MkIsIDB4MDgsIDB4RkIsIDB4MDgsCisweEZDLCAweDA3LCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEI3LCAweDEwLCAweEVDLCAweEEwLCAweEYwLCAweDBGLAorMHhDMCwgMHgzRiwgMHgwMCwgMHhGQiwgMHgwMSwgMHg3RSwgMHgyMywgMHg3MCwgMHgxRCwgMHhDMSwgMHgwQiwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsCisweDdDLCAweDgzLCAweEYwLCAweDhELCAweDgwLCAweDI3LCAweDAwLCAweERGLCAweDQwLCAweDdFLCAweDgzLCAweEYwLCAweDg5LAorMHg0MCwgMHgzNywgMHgwMywgMHg5RiwgMHgwMCwgMHg2RSwgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgxNywgMHgxMCwgMHhEMywKKzB4MDAsIDB4N0UsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDFCLCAweEQwLCAweDBFLAorMHg0MCwgMHgyQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNiwgMHgwQiwgMHhEMCwgMHg0QSwgMHg0NCwgMHgzQiwgMHgwMiwgMHg4RCwKKzB4MDQsIDB4ODQsIDB4ODAsIDB4RDAsIDB4MEUsIDB4NDAsIDB4OTMsIDB4MDEsIDB4RTEsIDB4MDQsIDB4QjQsIDB4ODIsIDB4RDgsCisweDRDLCAweDQwLCAweDRELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHgwMCwgMHg3OSwgMHgwMiwgMHhFRCwgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg2MCwgMHg2QiwgMHgyNCwgMHhFRCwKKzB4MDEsIDB4QjQsIDB4OTcsIDB4RDAsIDB4NUUsIDB4NjIsIDB4N0IsIDB4MTgsIDB4MkQsIDB4MDEsIDB4QTQsIDB4QzQsIDB4RDIsCisweDFFLCAweDQxLCAweEZCLCAweDAwLCAweEUxLCAweDBELCAweEI0LCAweDJGLCAweEQxLCAweDFFLCAweDQwLCAweDEwLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgxMCwgMHg0RCwKKzB4MDcsIDB4NzQsIDB4MDcsIDB4RDAsIDB4MzgsIDB4NDksIDB4RTMsIDB4MjAsIDB4Q0QsIDB4MDUsIDB4MzQsIDB4MDMsIDB4RDAsCisweDFDLCAweDQwLCAweDMzLCAweDgwLCAweENELCAweDAwLCAweDA0LCAweDBGLCAweEQwLCAweDc0LCAweDQwLCAweDYzLCAweDQwLAorMHhDMSwgMHgwMCwgMHgzNCwgMHgwNywgMHhEMCwgMHgwQywgMHg0MCwgMHg1OSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDAsIDB4N0YsIDB4MTAsIDB4N0MsIDB4NDEsIDB4RjAsCisweDE3LCAweEMwLCAweERGLCAweDAwLCAweDdGLCAweDA0LCAweDNDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLAorMHg3RiwgMHgxMSwgMHhBQywgMHgwNSwgMHhGMCwgMHgyNywgMHhDOCwgMHhERiwgMHgwOCwgMHg1MywgMHg4MCwgMHg3QywgMHgwMSwKKzB4RjEsIDB4MDQsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDAwLCAweDg3LCAweDA4LCAweDFGLCAweDgwLCAweDc4LCAweDAwLCAweEYwLCAweDgxLCAweEM4LCAweDg3LCAweDAwLAorMHgxQywgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHg4MSwgMHg4MiwgMHgwMiwgMHgwMCwgMHgwRiwgMHgwMCwgMHg3QywgMHgxMCwKKzB4RjAsIDB4MjEsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MUYsIDB4MDIsIDB4NzQsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzgsIDB4NEIsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY3LCAweDAyLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwgMHgzMCwgMHg0OSwgMHhDMCwgMHg2NywgMHgwNCwgMHg5RiwgMHhDOCwgMHg3QywgMHgwMiwKKzB4MzEsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEQsIDB4OEEsIDB4MzAsIDB4NDksIDB4QzAsIDB4NjcsCisweDA0LCAweDkzLCAweDA4LCAweDRDLCAweDIyLCAweDMwLCAweDA5LCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHhFRSwgMHgwMCwgMHg5RCwgMHg0MCwgMHhGMCwgMHgwNiwKKzB4MTAsIDB4MEIsIDB4NDAsIDB4QTcsIDB4MDIsIDB4OUQsIDB4MDEsIDB4RjQsIDB4MEEsIDB4MTAsIDB4OUIsIDB4NDAsIDB4MjcsCisweDAxLCAweDlCLCAweDgwLCAweDQ0LCAweDA2LCAweDEwLCAweDI5LCAweDQ0LCAweDJGLCAweDAwLCAweEIxLCAweDAzLCAweDg0LAorMHgwMiwgMHgxMCwgMHgwQiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDQsIDB4OUQsIDB4ODAsIDB4NzAsIDB4MjIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDlELCAweDAwLCAweDc0LCAweDQyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDA4LCAweDQ0LAorMHg0MywgMHgxNCwgMHgyOSwgMHg0MCwgMHgyNywgMHgwMiwgMHg4MCwgMHgwMCwgMHg0NCwgMHhDMiwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4NzAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsCisweDE4LCAweDhELCAweDQyLCAweDM0LCAweDBBLCAweDE0LCAweDI4LCAweDQ0LCAweEIzLCAweDAwLCAweDhELCAweDAwLCAweDM2LAorMHgwMiwgMHgxMSwgMHgyOCwgMHg0MCwgMHgyMywgMHg0NSwgMHg4OSwgMHgxNCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwKKzB4QTMsIDB4MDAsIDB4ODEsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NTAsIDB4QTAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDQ2LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHgwNCwgMHgxMiwgMHgxMSwgMHhDMiwgMHgwNywgMHgxMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwNCwgMHgzNCwgMHgxMSwgMHhDMCwKKzB4MDcsIDB4MDEsIDB4MTMsIDB4MDQsIDB4NEMsIDB4MDAsIDB4MzIsIDB4MDEsIDB4QzAsIDB4NDcsIDB4NDAsIDB4NTMsIDB4MDEsCisweDRDLCAweDA0LCAweDM0LCAweDExLCAweEQwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHhBNywgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHg4RSwgMHhGMCwgMHgzQiwgMHhDMCwKKzB4N0YsIDB4MjAsIDB4QkUsIDB4MDAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4M0IsIDB4QzAsIDB4MjcsIDB4MDAsIDB4RjcsIDB4MDAsCisweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweEVGLCAweDAwLCAweDlDLCAweDIzLCAweEZELCAweDBBLCAweEYwLCAweDI5LAorMHhDMCwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwKKzB4NkIsIDB4MDAsIDB4OTMsIDB4ODIsIDB4RkMsIDB4MTYsIDB4RjAsIDB4N0IsIDB4QzEsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDAsCisweEZDLCAweDA2LCAweEYwLCAweDdCLCAweEMxLCAweDZDLCAweDAxLCAweEJFLCAweDgxLCAweENDLCAweDAyLCAweEYwLCAweDBCLAorMHhEMCwgMHhFQywgMHgwMSwgMHhCRiwgMHgwNywgMHhGQywgMHgxNiwgMHhGMCwgMHgxQiwgMHhDMCwgMHg2MCwgMHgwMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4ODcsIDB4MDAsIDB4NTEsIDB4MDUsCisweDc0LCAweDU0LCAweEQwLCAweDMxLCAweDQwLCAweDQwLCAweDA1LCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweEQxLCAweDMxLAorMHg0NCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgwQSwgMHg0NCwgMHgwMSwgMHhEMCwgMHgwMSwgMHg0MCwgMHg0NCwgMHgyMCwgMHgxRCwKKzB4MDMsIDB4NzQsIDB4MjgsIDB4RDIsIDB4MDEsIDB4NDgsIDB4NzAsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweEEzLCAweDQwLCAweDg1LCAweDQ0LCAweDM2LCAweDBBLCAweEQ4LCAweDQ5LAorMHg0MCwgMHgyMiwgMHgwMCwgMHg4MSwgMHgyMSwgMHgzNCwgMHgwQSwgMHhEMSwgMHg0OCwgMHg0MCwgMHhBMCwgMHgwMCwgMHg4RCwKKzB4QTAsIDB4MDQsIDB4MDIsIDB4RDEsIDB4MDgsIDB4NjAsIDB4QTIsIDB4MTEsIDB4Q0QsIDB4MDYsIDB4MzQsIDB4ODIsIDB4RDAsCisweDI4LCAweDQwLCAweDQ4LCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBOCwgMHgyNSwgMHg4MCwgMHg5NSwgMHgwMSwgMHg3NCwgMHg4MiwgMHhEMCwgMHgxOSwgMHg0MSwgMHgyMiwgMHg0MCwgMHg5MSwKKzB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQxLCAweDI2LCAweDA1LCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYwLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMCwgMHhCNywKKzB4MDAsIDB4RkMsIDB4MDYsIDB4RjIsIDB4MEEsIDB4RDAsIDB4QUUsIDB4MTAsIDB4OTMsIDB4MEIsIDB4N0MsIDB4MDIsIDB4RjAsCisweDBCLCAweEMwLCAweDI0LCAweDIwLCAweDlGLCAweDAzLCAweDRDLCAweDhFLCAweEYwLCAweDA4LCAweEMwLCAweEVFLCAweDAwLAorMHhCRiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgwOCwgMHhEMCwgMHgxNCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUIsIDB4MDAsIDB4N0MsIDB4MEUsIDB4RjAsCisweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDM5LCAweEMwLCAweDI3LCAweDBDLAorMHg4RiwgMHg0OSwgMHg3RCwgMHgxMiwgMHhGMSwgMHg0OSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHg1MiwKKzB4RjAsIDB4MDksIDB4ODEsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDA4LCAweDAxLCAweDAxLCAweDEzLCAweDAyLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLAorMHgxQiwgMHgwOCwgMHg3QywgMHg4MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxNywgMHg4OCwgMHg3QywgMHgwMCwKKzB4RjEsIDB4MjEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUIsIDB4MDQsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NDMsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweERDLCAweDAwLAorMHg1MCwgMHgwMCwgMHg3NCwgMHgwMSwgMHgxMCwgMHgwNSwgMHg0MiwgMHg1QywgMHgwMiwgMHg1MSwgMHgwMCwgMHhGNCwgMHgwNSwKKzB4RDAsIDB4MTUsIDB4NDEsIDB4MUMsIDB4MDAsIDB4NTEsIDB4ODEsIDB4RjQsIDB4MDUsIDB4RDAsIDB4MDcsIDB4NDEsIDB4MTQsCisweDA0LCAweDcxLCAweDQwLCAweEY0LCAweDBELCAweEQwLCAweDI3LCAweDQwLCAweDUzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHhFMiwgMHgwMCwgMHhDOSwgMHgwMCwgMHgzNCwgMHgwNywKKzB4OTAsIDB4OUMsIDB4NDAsIDB4MjAsIDB4MjIsIDB4ODksIDB4MjAsIDB4MzQsIDB4MDYsIDB4RDAsIDB4MEQsIDB4NDAsIDB4QjAsCisweDBBLCAweDg1LCAweDAxLCAweDM0LCAweDIzLCAweEQwLCAweDA4LCAweDQzLCAweDczLCAweDAwLCAweDg5LCAweDAwLCAweDM0LAorMHgwRSwgMHhEMCwgMHhBOCwgMHg0MCwgMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4ODAsIDB4QTgsIDB4MDAsIDB4RTksIDB4MDQsIDB4MzQsIDB4MEUsIDB4OTAsIDB4Q0EsIDB4NTAsIDB4MzgsCisweDAxLCAweEUxLCAweDAwLCAweEI0LCAweDBBLCAweEQwLCAweDBFLCAweDcwLCAweDQ4LCAweDAwLCAweEUxLCAweDAwLCAweEI0LAorMHgwMCwgMHhEMCwgMHgwMiwgMHg0MCwgMHg3QSwgMHgwMCwgMHg2MSwgMHgwMCwgMHhCNCwgMHg0MiwgMHhEMSwgMHgwQSwgMHg2MCwKKzB4MDcsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4NjgsCisweDAwLCAweEVCLCAweDA3LCAweEJDLCAweDA3LCAweEIwLCAweDFDLCAweEMwLCAweEQ4LCAweDAwLCAweEVCLCAweDAxLCAweEJDLAorMHgwNiwgMHhGMCwgMHg1RiwgMHhDMCwgMHg1OCwgMHgwMCwgMHhFNywgMHgwMSwgMHhCQywgMHgwNCwgMHhGMSwgMHgxNiwgMHhDMiwKKzB4NzMsIDB4MDAsIDB4RUIsIDB4MDcsIDB4QkMsIDB4MDYsIDB4RjAsIDB4MUEsIDB4QzAsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDI1LCAweDQwLCAweEQ3LCAweDAwLCAweDdDLAorMHgwMiwgMHg3NCwgMHgwOSwgMHhDMCwgMHgxNywgMHgwMCwgMHhERSwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MDMsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDQsIDB4QzYsIDB4MzUsIDB4MDIsIDB4NUYsIDB4MDAsCisweDdDLCAweDAyLCAweEZBLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHg3RiwgMHgwMCwgMHhGMywgMHgwMSwgMHhEQywgMHg0NywgMHgzMCwgMHgxRiwgMHhDMiwKKzB4NzgsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDcsIDB4MzAsIDB4MUIsIDB4NDEsIDB4NEQsIDB4MDAsIDB4RjEsIDB4MDksCisweENDLCAweDA2LCAweEUwLCAweDE2LCAweEUwLCAweDZDLCAweDAxLCAweEUzLCAweDAxLCAweENDLCAweDA3LCAweDMwLCAweDlCLAorMHhDMiwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwKKzB4QjksIDB4MTAsIDB4RTEsIDB4MTAsIDB4ODQsIDB4MDIsIDB4MTIsIDB4MEIsIDB4NDEsIDB4MzgsIDB4MjAsIDB4RTEsIDB4MDAsCisweEI0LCAweDAyLCAweDEwLCAweDBBLCAweDQwLCAweDA4LCAweDAxLCAweEUxLCAweDA4LCAweDg0LCAweDAwLCAweEQxLCAweDBFLAorMHhEMCwgMHgyQywgMHg0MSwgMHg2MSwgMHgwMCwgMHhDNCwgMHgwMiwgMHgxMCwgMHg4QSwgMHg0MCwgMHg1NywgMHg2MCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4RjksIDB4MDEsCisweDk0LCAweDAzLCAweDE0LCAweDhFLCAweDQwLCAweDFDLCAweDAwLCAweEUxLCAweDAwLCAweDM0LCAweDAzLCAweDkwLCAweDBBLAorMHg0MCwgMHgwOCwgMHgwMCwgMHhGOSwgMHgwMCwgMHhBNCwgMHgwMCwgMHhEMCwgMHg4RSwgMHg0MSwgMHgyOCwgMHgxMywgMHhFMSwKKzB4MDAsIDB4RDQsIDB4MjMsIDB4OTAsIDB4MEEsIDB4NDQsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDIzLCAweDAwLCAweEM5LCAweDAyLCAweDA2LCAweDA2LCAweDEwLCAweDA5LAorMHg0MiwgMHgxMCwgMHgwMCwgMHhDMSwgMHgwNiwgMHgzNCwgMHgwMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhDOSwKKzB4MDEsIDB4MjYsIDB4NEMsIDB4RDAsIDB4MEMsIDB4NDIsIDB4MjAsIDB4MDQsIDB4NDEsIDB4MDAsIDB4MTQsIDB4ODEsIDB4OTAsCisweDA4LCAweDQwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHhBOCwgMHgyNSwgMHgwMCwgMHhEQiwgMHgwMCwgMHg1QywgMHgwMywgMHgzMCwgMHgxRCwgMHhDMCwgMHg3NCwgMHg0OCwgMHhEMywKKzB4MTMsIDB4N0MsIDB4MDIsIDB4QjQsIDB4MUQsIDB4QzAsIDB4MDUsIDB4MDAsIDB4Q0IsIDB4MDEsIDB4NkMsIDB4NDYsIDB4RjAsCisweDFELCAweEUwLCAweDc0LCAweDAwLCAweEQzLCAweDQwLCAweDFELCAweDA2LCAweEIwLCAweDBELCAweEMwLCAweDU3LCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNywgMHg0MCwgMHhENywKKzB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4NDksIDB4RDAsIDB4MzcsIDB4MDIsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4NzAsCisweDhELCAweEQwLCAweDA3LCAweDAwLCAweEQ3LCAweDBDLCAweDVELCAweDAwLCAweEYwLCAweDA1LCAweEM5LCAweDM1LCAweDAyLAorMHg0RiwgMHgwMCwgMHg2NCwgMHgyMiwgMHg3NCwgMHgyOSwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MTAsIDB4NEMsIDB4MEIsIDB4RjAsCisweDBGLCAweEMwLCAweDVDLCAweDAwLCAweEZGLCAweDgwLCAweEVDLCAweDBFLCAweEYwLCAweDhDLCAweEMwLCAweDA0LCAweDAwLAorMHhGRiwgMHgwOCwgMHhDQywgMHgwMCwgMHhGMCwgMHg4NywgMHhDMCwgMHg3RSwgMHgyMCwgMHhGMywgMHgwOCwgMHhDQywgMHgwMiwKKzB4MzMsIDB4MkYsIDB4QzYsIDB4MTMsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDgxLCAweDAwLCAweDI2LCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDg3LCAweEQwLCAweDE5LCAweEMwLCAweEY2LCAweDAwLAorMHhDRCwgMHgwOSwgMHg0NCwgMHgwMCwgMHhEMiwgMHgxOSwgMHg0MCwgMHg0NCwgMHgwNCwgMHhEQywgMHgyMCwgMHg2QywgMHgwNCwKKzB4OTAsIDB4MDQsIDB4NDAsIDB4MjEsIDB4MDAsIDB4RDMsIDB4MDIsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MTksIDB4NDAsIDB4MTcsCisweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM0LCAweDgyLAorMHhDRCwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHg0RCwgMHg1MCwgMHhCNCwgMHgwMiwgMHhERCwgMHgwMCwgMHg2NCwgMHgwMywKKzB4RDgsIDB4MDksIDB4NDAsIDB4NDQsIDB4MjAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDYsIDB4RDAsIDB4MDUsIDB4NDQsIDB4MjQsCisweDAxLCAweEQwLCAweDEwLCAweDQ0LCAweDAzLCAweDEwLCAweDBELCAweDQxLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMiwKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MTIsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MDAsCisweDAwLCAweENELCAweDAwLCAweDI2LCAweDAwLCAweDkwLCAweDBELCAweDQwLCAweDM1LCAweDQwLCAweDQxLCAweDAwLCAweDA1LAorMHgwMiwgMHgxQywgMHgwNCwgMHg0NCwgMHg0MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QjAsIDB4MTYsIDB4MDAsIDB4RkYsIDB4NDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4NDAsIDB4MTQsCisweDIwLCAweERGLCAweDAwLCAweDZDLCAweDAzLCAweEQwLCAweDBELCAweEM0LCAweDA0LCAweDA4LCAweERGLCAweDAwLCAweDRDLAorMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNiwgMHgxMCwgMHg1MywgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMiwKKzB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MUYsCisweDAwLCAweEVGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDFELCAweDAwLCAweEZGLCAweDAwLCAweEZDLAorMHgwMSwgMHhGMCwgMHgwQiwgMHhEMCwgMHgwRiwgMHgwMCwgMHhFRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4NzcsIDB4NDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MTcsIDB4MjIsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDdGLCAweDAwLCAweEVGLCAweDA5LCAweERDLAorMHgwNiwgMHhGMiwgMHgxRiwgMHhDMCwgMHg3RCwgMHgwMCwgMHhFMywgMHgwMSwgMHhEQywgMHgxMiwgMHgzMCwgMHgxMywgMHhDMCwKKzB4NEUsIDB4MTAsIDB4QjMsIDB4MDAsIDB4REMsIDB4MzIsIDB4NzAsIDB4MkIsIDB4QzAsIDB4QkMsIDB4MDAsIDB4QjMsIDB4MjAsCisweEZDLCAweDEwLCAweDMwLCAweDAyLCAweDAwLCAweDBFLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHgxOCwgMHg3NywgMHgwMCwgMHhERCwgMHgwNCwgMHg0NCwgMHgwNiwgMHgxMCwgMHgxRCwgMHg0MCwKKzB4NzQsIDB4MDAsIDB4RDEsIDB4MDEsIDB4NDQsIDB4MEUsIDB4MTAsIDB4MTEsIDB4NDAsIDB4NzQsIDB4MDAsIDB4NTEsIDB4NDMsCisweDQ0LCAweEIyLCAweDEwLCAweEExLCAweDQwLCAweEJDLCAweDAzLCAweDExLCAweDMyLCAweDc0LCAweDI2LCAweDUwLCAweDExLAorMHg0MCwgMHgwQywgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwKKzB4MzMsIDB4MDAsIDB4Q0QsIDB4MDQsIDB4MTQsIDB4MDMsIDB4NTgsIDB4MEMsIDB4NDAsIDB4MjcsIDB4MDAsIDB4RDUsIDB4MDAsCisweDE3LCAweDA4LCAweDEwLCAweDAxLCAweDYwLCAweDA2LCAweDA4LCAweDgxLCAweDI4LCAweDE2LCAweDEyLCAweEQ4LCAweDQwLAorMHg0MCwgMHgzMCwgMHgwMCwgMHgwNSwgMHg4NiwgMHgzNCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg2MCwgMHg0RSwgMHg4MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MzUsIDB4MDAsIDB4REQsIDB4MDQsCisweDU0LCAweDA3LCAweDEwLCAweDBELCAweDQ2LCAweDI2LCAweDAwLCAweEQ1LCAweDExLCAweDQ0LCAweDBDLCAweDEyLCAweDExLAorMHg0MCwgMHg3NCwgMHgwMCwgMHg5MSwgMHgwMSwgMHg0NCwgMHg0NiwgMHgxOCwgMHgxMCwgMHg0MCwgMHgzNiwgMHgwMCwgMHgxNSwKKzB4MDEsIDB4NzQsIDB4NDMsIDB4NTIsIDB4MTksIDB4NDEsIDB4MEMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDM3LCAweDA4LCAweERGLCAweDAwLCAweDFFLCAweDA2LCAweDcwLCAweEQ1LAorMHhDMCwgMHhEMywgMHgwMCwgMHhDNywgMHgwMywgMHg1QywgMHgwQywgMHgzMCwgMHgzMCwgMHhDNCwgMHg1MiwgMHgwNCwgMHg5MiwKKzB4MDcsIDB4NUQsIDB4MDQsIDB4NzAsIDB4MzksIDB4QzAsIDB4MzQsIDB4MDAsIDB4OTcsIDB4NjEsIDB4N0MsIDB4OEQsIDB4MzAsCisweDM5LCAweEMwLCAweDJBLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorMHg4MCwgMHgzRCwgMHgzMCwgMHhGRiwgMHgwMSwgMHhFQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHg3RCwgMHgwMiwgMHhGQiwKKzB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MUYsIDB4MDAsIDB4NkYsIDB4MjAsIDB4QkMsIDB4MDAsIDB4RjAsCisweDAzLCAweEQwLCAweDNELCAweDAwLCAweDNCLCAweDIwLCAweEZDLCAweDI0LCAweEYxLCAweDBCLCAweEMwLCAweDFGLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwOCwgMHgzNSwgMHgwMCwgMHhERiwKKzB4MDAsIDB4NUMsIDB4MDMsIDB4QjAsIDB4NDksIDB4QzAsIDB4QTUsIDB4MDAsIDB4REIsIDB4MDIsIDB4NEMsIDB4MDAsIDB4RjAsCisweDIxLCAweEMwLCAweDE3LCAweDAyLCAweEQ3LCAweDA1LCAweDZDLCAweDAyLCAweEYxLCAweDA5LCAweEMwLCAweDM3LCAweDQ0LAorMHg5MywgMHgwMiwgMHg2QywgMHgwQiwgMHhGMCwgMHgyOSwgMHhDNCwgMHgyQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzQsIDB4MDAsIDB4REQsIDB4NEQsIDB4NDAsIDB4MEYsIDB4MTUsCisweDM4LCAweDQwLCAweDI0LCAweDEwLCAweDkxLCAweDAwLCAweDJDLCAweDQ0LCAweEQxLCAweEIxLCAweDQ0LCAweDU0LCAweDEwLAorMHhEMSwgMHgwMSwgMHg3NCwgMHhCMiwgMHhEMiwgMHgwMSwgMHg0QSwgMHhGRiwgMHgwMCwgMHg5MCwgMHgzMCwgMHgzNCwgMHg4MywKKzB4RDEsIDB4MDgsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEzLCAweEEwLCAweDMyLCAweDAwLCAweERELCAweDAwLCAweDE0LCAweDI2LCAweDEwLCAweDlDLCAweDQ4LCAweDMxLCAweDAwLAorMHhDQywgMHgwOCwgMHgyNSwgMHgwMiwgMHhEMCwgMHgxMCwgMHg0MCwgMHgxMSwgMHgwMCwgMHg4NSwgMHgwMiwgMHgzNCwgMHgwMCwKKzB4RDAsIDB4MDgsIDB4NDIsIDB4MzYsIDB4MDAsIDB4ODUsIDB4MjUsIDB4MjQsIDB4MDAsIDB4RDAsIDB4QjAsIDB4NDEsIDB4MEQsCisweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBELCAweDA4LCAweDdBLCAweDAwLAorMHhGRCwgMHgwMSwgMHhDNCwgMHgxRSwgMHgxOCwgMHg5RiwgMHg0MCwgMHg3QywgMHgxMCwgMHhGNSwgMHg0MSwgMHhCNCwgMHgwNywKKzB4RDAsIDB4MTIsIDB4MDAsIDB4NTgsIDB4MDAsIDB4QTAsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4MDAsIDB4NzMsCisweDA0LCAweEU1LCAweDAxLCAweEI0LCAweDA0LCAweEQxLCAweDE2LCAweDAwLCAweDM0LCAweDIwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDRiwgMHgwMCwgMHgxQywgMHgwMiwKKzB4MzAsIDB4OEMsIDB4QzAsIDB4QjEsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MkMsIDB4MDMsIDB4RjAsIDB4RTAsIDB4QzMsIDB4MTEsCisweDAwLCAweDg3LCAweDAwLCAweDI4LCAweDAxLCAweEYwLCAweDA0LCAweEMwLCAweDMyLCAweDMwLCAweDQ3LCAweDAwLCAweDJDLAorMHgwMywgMHhGMCwgMHgwMCwgMHhDMCwgMHg0OSwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4QTAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MTIsIDB4NzAsIDB4OEUsIDB4QzAsIDB4M0IsCisweDAyLCAweEZCLCAweDg4LCAweEVDLCAweDIzLCAweEYwLCAweDgyLCAweEMwLCAweDE5LCAweDAwLCAweEJCLCAweDAwLCAweEZDLAorMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgyMCwgMHg3QiwgMHg0MCwgMHhGQywgMHgyMywgMHhGMCwgMHg4RiwgMHhDMCwKKzB4MDksIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsCisweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDA2LCAweDcwLCAweDBELCAweEUwLCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDQ0LAorMHgwMSwgMHhCMiwgMHgwNSwgMHhDMiwgMHgxMywgMHgwMCwgMHhDQiwgMHgwMCwgMHg2QywgMHgwNSwgMHg3MiwgMHgwRCwgMHhDMiwKKzB4QjcsIDB4MDMsIDB4REQsIDB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MTUsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDk4LCAweDM5LCAweDEwLCAweEVDLCAweDAwLCAweEI0LAorMHg4MiwgMHgxMCwgMHgwRSwgMHg1MiwgMHgzOCwgMHgwMCwgMHg2RCwgMHgwMCwgMHg5NCwgMHgwMywgMHg5MCwgMHgwNiwgMHg0MCwKKzB4MUIsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QzUsIDB4MDEsIDB4MTAsIDB4MEUsIDB4NDgsIDB4M0IsIDB4MDUsIDB4RUQsIDB4MDAsCisweDg0LCAweDAwLCAweDkwLCAweDBFLCAweDQwLCAweDRDLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgyMCwgMHhBQywgMHg5MSwgMHhCNCwgMHgwNiwgMHhEMCwgMHgxRiwgMHg0OCwKKzB4NzksIDB4MjAsIDB4RkQsIDB4MDEsIDB4QjQsIDB4NDcsIDB4OTAsIDB4MUUsIDB4NjAsIDB4NUIsIDB4MDAsIDB4RTksIDB4MDEsCisweEE0LCAweDA3LCAweDUwLCAweDFFLCAweDQxLCAweDdCLCAweDAwLCAweENELCAweDAzLCAweEI0LCAweDA3LCAweEQ4LCAweDE0LAorMHg2NCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyMCwKKzB4MzMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MzQsIDB4NDAsIDB4RDAsIDB4NUMsIDB4NDAsIDB4MzEsIDB4MDAsIDB4Q0QsIDB4MDUsCisweDM0LCAweDAzLCAweDk4LCAweDI0LCAweDQwLCAweDkzLCAweDA4LCAweEMxLCAweDA4LCAweDA0LCAweDAzLCAweDEwLCAweDJDLAorMHg0MSwgMHgzMywgMHg4OCwgMHhERCwgMHgwMCwgMHgxNCwgMHgxRiwgMHg5MCwgMHgyQywgMHg0MCwgMHg1OCwgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDEsCisweEZDLCAweDA5LCAweEYwLCAweDA3LCAweDQwLCAweDFELCAweDAwLCAweDdGLCAweDAxLCAweEZDLCAweDAxLCAweEIwLCAweDc3LAorMHhDMCwgMHg1QiwgMHgwMCwgMHg2QiwgMHgwMSwgMHhFQywgMHgyOSwgMHg3MCwgMHgwNywgMHhDMCwgMHgxNywgMHgwMCwgMHg3RiwKKzB4MDgsIDB4RkMsIDB4MDEsIDB4RjAsIDB4NDcsIDB4NDAsIDB4NUMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDA1LCAweDAwLCAweDFGLCAweEMyLCAweDdDLCAweDAwLCAweDAwLCAweEExLAorMHg4MCwgMHgwNiwgMHgwMSwgMHgxQywgMHgwOCwgMHg1OCwgMHgwMCwgMHhDMywgMHgwMSwgMHg4OCwgMHgwNywgMHgwMiwgMHgxRiwKKzB4NDIsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MjAsIDB4MUYsIDB4NDAsIDB4NjAsIDB4MjAsIDB4QjAsCisweDAxLCAweEQwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMywgMHg3QywgMHgxMiwgMHhGOSwgMHgwOSwgMHhDOCwgMHgyNSwgMHgwMCwgMHg5RiwKKzB4MDQsIDB4MUMsIDB4NTYsIDB4MzEsIDB4ODksIDB4QzMsIDB4MjcsIDB4MDQsIDB4OTcsIDB4MDUsIDB4NDAsIDB4MDYsIDB4RjAsCisweDA5LCAweEMwLCAweDI3LCAweDAxLCAweDlGLCAweDAwLCAweDRDLCAweDgyLCAweEYzLCAweDM5LCAweEMxLCAweDQzLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwKKzB4MDMsIDB4NzQsIDB4MEEsIDB4RDgsIDB4NDgsIDB4NDAsIDB4MjQsIDB4MTAsIDB4OEQsIDB4MDAsIDB4NDQsIDB4MDYsIDB4MTQsCisweDE5LCAweDQ0LCAweEU3LCAweDgxLCAweDlCLCAweDEyLCAweDQ0LCAweDBFLCAweEQwLCAweDA5LCAweDQwLCAweDY3LCAweDIwLAorMHg5RCwgMHgwRSwgMHg0NCwgMHgwMiwgMHg3OCwgMHgzOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MEIsIDB4OTgsCisweDA5LCAweDQwLCAweDI1LCAweDAwLCAweDlELCAweDAyLCAweDU2LCAweDAyLCAweDUwLCAweDA5LCAweDQ4LCAweDY3LCAweDAwLAorMHg5NSwgMHgwMCwgMHg1NCwgMHgxQSwgMHhEMCwgMHgwRCwgMHg2MCwgMHgyNywgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4NTAsIDB4MjksIDB4NDAsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDI4LCAweDIwLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDIwLCAweDAwLAorMHg4RCwgMHg4MCwgMHgxNCwgMHhEMiwgMHg1MCwgMHgwQywgMHg0MCwgMHgyMywgMHgwMCwgMHg4MSwgMHgwMCwgMHgxMCwgMHg1MiwKKzB4RDAsIDB4NDgsIDB4NjEsIDB4MzMsIDB4MEQsIDB4OEQsIDB4MTQsIDB4MTQsIDB4MDIsIDB4NTAsIDB4NDgsIDB4NDEsIDB4NTMsCisweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweDMwLCAweDA0LCAweDAwLAorMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg5MCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHg4MCwgMHg1QywgMHgxMCwKKzB4NzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MTQsIDB4MTQsIDB4NEQsIDB4MTAsIDB4RjAsIDB4NDEsIDB4QzAsIDB4MDcsCisweDAxLCAweDFGLCAweDA0LCAweDRELCAweDUwLCAweDcwLCAweDQxLCAweEUyLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBMCwgMHgyNywgMHgwMCwgMHhCRiwgMHg5NCwgMHhGQywgMHgwMiwKKzB4QzAsIDB4MEUsIDB4NDAsIDB4M0YsIDB4MDAsIDB4QUYsIDB4ODAsIDB4RUMsIDB4MDIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4MkYsCisweDAwLCAweEJGLCAweDAwLCAweEVDLCAweDUyLCAweEYwLCAweDRCLCAweDQxLCAweDI3LCAweDA1LCAweEJGLCAweDE0LCAweEVDLAorMHgwMiwgMHg3MCwgMHgwQiwgMHhDMCwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MDIsIDB4NzksIDB4MEEsIDB4QzAsIDB4MjUsCisweDAwLCAweEJGLCAweDAwLCAweENDLCAweDA2LCAweEIxLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweERELAorMHgxMiwgMHhGMCwgMHg5OSwgMHhDMCwgMHg2RCwgMHgwMywgMHhCOSwgMHgwRCwgMHhGOCwgMHgwMiwgMHgzMCwgMHgwQiwgMHhDOCwKKzB4NjAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MTgsIDB4MDcsCisweDAwLCAweDFELCAweDQxLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDFELCAweDAwLCAweDQ0LAorMHgyOCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHg0MCwgMHg0NCwgMHgxMCwgMHhEMCwgMHhCMSwgMHg0MCwKKzB4QzQsIDB4MDMsIDB4MTEsIDB4MEYsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NTAsIDB4NzAsIDB4NjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIzLCAweDAwLCAweDhELCAweDA0LCAweDc0LAorMHgwMiwgMHhENCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgyMCwgMHg5RCwgMHgwMCwgMHgxNywgMHgwMiwgMHg5MCwgMHgwOCwgMHg0MCwKKzB4MjMsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MzYsIDB4NjIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODksIDB4MDAsCisweDM0LCAweDAyLCAweDE0LCAweDA4LCAweDQ4LCAweDQ5LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNSwgMHgwMCwgMHg5RCwgMHg4MCwgMHg3NCwgMHg0MiwgMHgxMiwgMHgwOSwgMHg0NCwKKzB4MjQsIDB4MDAsIDB4OUQsIDB4NDAsIDB4NTIsIDB4NDYsIDB4MDAsIDB4MDksIDB4NDEsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsCisweDc0LCAweDhFLCAweEQwLCAweDA5LCAweDYxLCAweDI0LCAweDAwLCAweDkxLCAweDEwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHg2MCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwKKzB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzgsIDB4MEEsIDB4RjIsIDB4MDgsIDB4QzAsIDB4MjUsIDB4ODAsIDB4OUYsIDB4MDQsCisweDVDLCAweDBBLCAweEIyLCAweDA5LCAweEMyLCAweDI3LCAweDA4LCAweDlGLCAweDE5LCAweDdDLCAweDAyLCAweEYwLCAweDM5LAorMHhDMCwgMHgyNSwgMHgyMCwgMHg5QSwgMHgwMywgMHg3RSwgMHgxNiwgMHgyMCwgMHgwOSwgMHhFNSwgMHgxNSwgMHgyMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDEyLCAweEYwLCAweDI5LCAweEMwLCAweEE2LCAweDAwLCAweDlGLCAweDI4LCAweDJDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg5MCwgMHg0QywgMHgwMiwgMHhGMCwgMHg0OCwgMHhDNCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4ODksIDB4N0UsIDB4MjIsIDB4RjIsIDB4MDgsIDB4RTAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDA0LCAweDdDLCAweDE4LCAweEIyLCAweDQxLAorMHhDMCwgMHgwNCwgMHgyMCwgMHgxRiwgMHgwNiwgMHg0QywgMHgyOCwgMHhGMiwgMHg2MSwgMHhDMCwgMHgwNSwgMHgwMiwgMHgxRiwKKzB4MDIsIDB4NkMsIDB4MDgsIDB4QjAsIDB4MjEsIDB4QzIsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MTIsIDB4MUMsIDB4MDgsIDB4MzAsCisweDIxLCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHhBMCwgMHgxNCwgMHgwMCwgMHg3RCwgMHgxMSwgMHhCMCwgMHgwRCwgMHgxMCwgMHgxNywgMHg1OCwgMHgxNCwgMHgwMCwgMHg2RCwKKzB4MDMsIDB4NDUsIDB4MDUsIDB4RDAsIDB4MTcsIDB4NDQsIDB4OUYsIDB4MDIsIDB4NkQsIDB4MDAsIDB4QzAsIDB4MDEsIDB4MTAsCisweDA1LCAweDQwLCAweDlGLCAweDAyLCAweDdELCAweDgwLCAweDQ0LCAweDAxLCAweDEwLCAweDI3LCAweDAwLCAweDUwLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4OEEsIDB4OTAsIDB4QUMsIDB4MDQsIDB4MzAsIDB4MDAsIDB4NDUsIDB4MDIsIDB4MTIsIDB4MDYsIDB4RDEsCisweDJDLCAweDQwLCAweDkxLCAweDAwLCAweENELCAweDIyLCAweDI0LCAweDE3LCAweDkwLCAweDBDLCAweDQwLCAweDM3LCAweEEyLAorMHhDRCwgMHgwOCwgMHgxNiwgMHhBNywgMHgxMCwgMHg0QywgMHg1MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MzgsIDB4MDAsIDB4NkQsIDB4MDAsIDB4RjQsIDB4MEEsIDB4MTAsCisweDBFLCAweDQwLCAweDM4LCAweDAwLCAweDZELCAweDEwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDYxLCAweDFCLCAweDgwLAorMHhGRCwgMHgzMCwgMHhBMCwgMHg0NywgMHg5MCwgMHg0RSwgMHg0MCwgMHgzQiwgMHhBMCwgMHg2RCwgMHgwMSwgMHg4NCwgMHgwMywKKzB4NTAsIDB4MkMsIDB4NDAsIDB4MDQsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDExLCAweDEwLCAweDc4LCAweDAwLCAweEVGLCAweDAxLCAweEJDLCAweDA2LCAweEIwLCAweDFFLCAweEMwLCAweDc4LCAweDIwLAorMHg2RiwgMHgwMSwgMHg5QywgMHgwNywgMHhGMCwgMHgxRSwgMHhFMCwgMHg1OSwgMHgwMCwgMHhFRiwgMHgwMSwgMHhFOCwgMHgwNywKKzB4QjAsIDB4QkUsIDB4QzAsIDB4N0IsIDB4MjAsIDB4RkYsIDB4MjEsIDB4MUMsIDB4MDcsIDB4MzQsIDB4MUUsIDB4QzAsIDB4NDQsCisweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDAwLAorMHhERiwgMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgxMCwgMHg0RiwgMHgwMCwgMHg0RCwgMHg4MywKKzB4RjAsIDB4MEQsIDB4RTAsIDB4MTcsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NUMsIDB4MDMsIDB4NzAsIDB4NkQsIDB4QzQsIDB4MTcsCisweDA4LCAweDVFLCAweDQwLCAweDdDLCAweDAzLCAweEIwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg3RCwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywKKzB4MzAsIDB4MTcsIDB4QzAsIDB4N0QsIDB4MDAsIDB4N0YsIDB4MDEsIDB4REMsIDB4MjcsIDB4RjEsIDB4OUYsIDB4QzAsIDB4NUYsCisweDAwLCAweEVGLCAweDAxLCAweEVDLCAweDg1LCAweEIwLCAweDlGLCAweDAwLCAweDVGLCAweDAyLCAweEYzLCAweDRELCAweEM4LAorMHgwNywgMHgyMCwgMHgxRiwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4MTgsIDB4MzksIDB4MDAsIDB4NkQsIDB4NDIsIDB4QjQsIDB4MTIsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MzgsCisweDAwLCAweDI5LCAweDQ0LCAweDgwLCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDFCLCAweDAwLCAweDZELCAweDAyLCAweDk0LAorMHgwMSwgMHhEMCwgMHgwRSwgMHg0MywgMHgxQSwgMHgwMCwgMHhFMSwgMHgxOCwgMHg4NCwgMHg1MywgMHgxMCwgMHgwNywgMHg0MSwKKzB4NTUsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksCisweDAwLCAweEVELCAweDAwLCAweEY0LCAweDAyLCAweDE4LCAweDJFLCAweDUwLCAweEI5LCAweDAwLCAweDZELCAweEIyLCAweDgwLAorMHg0MywgMHhEMCwgMHgwRSwgMHg0MiwgMHgxQiwgMHgwNCwgMHhFRCwgMHgxOCwgMHg5NSwgMHgwMSwgMHg5MCwgMHgwRSwgMHg0MiwKKzB4M0EsIDB4MzAsIDB4RTEsIDB4NDQsIDB4QjUsIDB4MDMsIDB4MUMsIDB4MEYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDIwLCAweDMwLCAweDAwLCAweDhELCAweDAwLCAweDM0LAorMHgwQSwgMHgxOCwgMHgwQywgMHg1OCwgMHgzMSwgMHgwOCwgMHg0OSwgMHgwMSwgMHgwNCwgMHgwNywgMHhEMCwgMHgwOCwgMHg0MCwKKzB4RDMsIDB4MDAsIDB4NEQsIDB4MDMsIDB4MDQsIDB4OUMsIDB4RDAsIDB4MUQsIDB4NDgsIDB4MDIsIDB4ODAsIDB4OTEsIDB4MDEsCisweDM0LCAweDEzLCAweDEwLCAweDMwLCAweDAwLCAweDExLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3NCwgMHgwQiwgMHgzMCwgMHgyRCwgMHhDMCwKKzB4MzEsIDB4MDAsIDB4Q0YsIDB4MDIsIDB4NEQsIDB4MjMsIDB4RjIsIDB4MEQsIDB4QzAsIDB4RDcsIDB4MDAsIDB4Q0YsIDB4MDksCisweDVDLCAweDFBLCAweEIwLCAweDNGLCAweDQwLCAweDI2LCAweDIwLCAweDkxLCAweDAyLCAweDdDLCAweDAyLCAweDMwLCAweDJELAorMHhDMCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MzcsIDB4MDAsIDB4MUYsIDB4MDEsIDB4N0MsIDB4NDMsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4REIsIDB4MDIsCisweDdDLCAweDAzLCAweEYwLCAweDZELCAweEM0LCAweDE3LCAweDAxLCAweERGLCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDBELAorMHhDMSwgMHgyNiwgMHgwMCwgMHgxRiwgMHgwMiwgMHg0QywgMHgwMiwgMHhGMSwgMHg0RCwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4M0YsIDB4MDgsIDB4M0YsIDB4MDAsCisweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNELCAweDA4LCAweDc3LCAweDAwLCAweENDLCAweDAzLCAweEUwLCAweDlGLAorMHhEMCwgMHgxQywgMHgwMCwgMHhGOSwgMHgwMCwgMHg4RCwgMHgwMiwgMHhCMCwgMHgwRiwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwKKzB4MTAsIDB4NDgsIDB4ODIsIDB4RDAsIDB4MDcsIDB4QzAsIDB4MTMsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDIwLCAweDM2LCAweDAwLCAweDFELCAweDAzLCAweDc0LCAweDg2LCAweEQyLCAweDNDLAorMHg0MSwgMHgzNCwgMHgwMCwgMHg1MSwgMHgyMSwgMHg0NCwgMHgwMywgMHhEMCwgMHg1QywgMHg0MCwgMHg1NCwgMHgwOCwgMHhERCwKKzB4NDMsIDB4NDQsIDB4NEUsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NjQsIDB4MDAsIDB4MUQsIDB4MDcsIDB4NkMsIDB4QTIsIDB4RDIsCisweDAxLCAweDQwLCAweDE3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHhBMCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwNywgMHhEMCwgMHgxRCwgMHg0MCwgMHgzNSwgMHgwMCwgMHg1NSwKKzB4MDMsIDB4NDUsIDB4MDcsIDB4RDIsIDB4MEQsIDB4NDIsIDB4NTUsIDB4MDQsIDB4OUQsIDB4ODEsIDB4NTQsIDB4MDYsIDB4OTAsCisweDBELCAweDUwLCAweEM0LCAweDAwLCAweDFELCAweDAxLCAweDU0LCAweDAzLCAweEQwLCAweDg5LCAweDQxLCAweDA3LCAweDA4LAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyOCwgMHgzMCwgMHgwMCwgMHgwRCwKKzB4MDAsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MDksIDB4NDAsIDB4MzQsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsCisweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDRELCAweDAwLCAweDA0LCAweDAwLCAweDE4LCAweDBDLCAweDQwLCAweDAwLCAweDAwLAorMHgxRCwgMHgwMCwgMHgzNiwgMHg4MywgMHhEMCwgMHgwMCwgMHg0MCwgMHg0MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjEsIDB4MzYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDBELCAweEMwLCAweDM1LCAweDAwLCAweDU3LCAweDAwLCAweDQ4LCAweDAzLCAweEYwLCAweDBELCAweDQwLCAweDM0LCAweDEwLAorMHg1QiwgMHgwMCwgMHg0OCwgMHgwMiwgMHhCMCwgMHgwRiwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwMywKKzB4RjAsIDB4MDEsIDB4QzgsIDB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweEEwLCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEI0LCAweDAwLCAweEYwLCAweDBBLCAweEMwLCAweDNGLCAweDIwLAorMHg2RiwgMHgwMCwgMHhGQywgMHgwMywgMHhFMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHg3RSwgMHgwMCwgMHhGQywgMHgwMiwKKzB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MTcsCisweDIxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDdGLCAweDAwLAorMHhFRiwgMHgwOSwgMHhDQywgMHgyNywgMHhGMiwgMHgxRiwgMHhDMCwgMHg3QywgMHgwMCwgMHhGRiwgMHgwMSwgMHhCQywgMHgyNywKKzB4RjAsIDB4M0YsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RUUsIDB4MDksIDB4Q0MsIDB4MDcsIDB4MzEsIDB4MUUsIDB4QzAsIDB4N0MsCisweDAwLCAweEYzLCAweDA5LCAweEZDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHg0NywgMHgxMCwgMHgxRCwgMHg0NCwgMHg0NCwgMHgxMCwKKzB4RDAsIDB4MTEsIDB4NDAsIDB4NDQsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDAsIDB4RDIsIDB4MDEsIDB4NDgsIDB4NDcsCisweDAwLCAweDFELCAweDQ0LCAweDQ0LCAweDA0LCAweDUwLCAweDExLCAweDQwLCAweDQ0LCAweDAwLCAweDExLCAweDg0LCAweDc0LAorMHgwNCwgMHgxNCwgMHgxMSwgMHg0MCwgMHgwNCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MDAsIDB4REQsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsCisweDA4LCAweENDLCAweDgwLCAweDM2LCAweDEzLCAweEQwLCAweDRDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDA0LAorMHgwMywgMHgxMSwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHg4MCwgMHg3NCwgMHgwMywgMHgxOCwgMHgwQywgMHg0MCwKKzB4NDQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDUsCisweDAwLCAweDFELCAweDAwLCAweDU0LCAweDgwLCAweEQwLCAweDAxLCAweDQwLCAweDA0LCAweDE4LCAweDFELCAweDAwLCAweDc0LAorMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwRCwgMHgwMCwgMHg0NSwgMHgwMCwgMHg1MCwgMHgwMSwgMHg0MCwKKzB4MDQsIDB4MDAsIDB4MTEsIDB4NjAsIDB4NzYsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MEMsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDM3LCAweDAwLCAweERGLCAweDIwLCAweDVDLAorMHgwMywgMHhGMiwgMHgwRCwgMHhEMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4ODMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MDAsIDB4RDMsIDB4MDAsCisweDNDLCAweDgzLCAweDMxLCAweDBELCAweEMwLCAweDAwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwKKzB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjIsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4QjAsCisweEZDLCAweDAwLCAweEYyLCAweDAzLCAweEQwLCAweDBGLCAweDAwLCAweDNGLCAweDgwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLAorMHhEMSwgMHgxRiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MzUsIDB4MDAsIDB4REYsIDB4MDEsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4ODAsCisweDRDLCAweDIzLCAweDM0LCAweDhELCAweEMwLCAweDc0LCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDBELAorMHhDMCwgMHgzNCwgMHgwMSwgMHhEMywgMHgwMCwgMHg0QywgMHg4MywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MEQsIDB4MDAsCisweDQwLCAweDQwLCAweDEwLCAweDEwLCAweDUwLCAweDA0LCAweDAwLCAweDFBLCAweDA1LCAweDQ0LCAweDAwLCAweDEwLCAweDExLAorMHhDMCwgMHg4NiwgMHgwMCwgMHgxRCwgMHgwMywgMHgwNCwgMHgwNCwgMHgxMCwgMHgxMSwgMHg0MCwgMHg4NSwgMHgwOCwgMHgxMSwKKzB4MTEsIDB4NkUsIDB4MkMsIDB4RDAsIDB4MzAsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEE4LCAweDcyLCAweDAyLCAweENELCAweDAwLCAweDA2LCAweDA3LCAweDAwLCAweDlDLAorMHg0MCwgMHg3MCwgMHg4MCwgMHhDMSwgMHgwMSwgMHgyMCwgMHg4NywgMHgxMCwgMHgwQywgMHg0MiwgMHgzMCwgMHgwNCwgMHhDRCwKKzB4MjAsIDB4MDQsIDB4MjMsIDB4MUEsIDB4MUMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4ODEsIDB4MjQsIDB4MDcsIDB4RDAsCisweDNDLCAweDQwLCAweDFGLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHg4MCwgMHg0OCwgMHgwMiwgMHgzRCwgMHgwMSwgMHg4NCwgMHgwNCwgMHgxMCwgMHg5MiwgMHg0MCwgMHg0OCwgMHgwMCwgMHgzOSwKKzB4MDEsIDB4RTQsIDB4MDQsIDB4MTAsIDB4MzMsIDB4NDAsIDB4NEEsIDB4MjAsIDB4MkQsIDB4OTEsIDB4ODUsIDB4MTQsIDB4MTgsCisweDEzLCAweDQxLCAweDQ5LCAweDAwLCAweDIxLCAweDAxLCAweEE0LCAweDQ0LCAweEQwLCAweDEyLCAweDQxLCAweDFCLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDRiwKKzB4ODAsIDB4NDQsIDB4MjMsIDB4MzQsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MjYsIDB4QzMsIDB4MDAsIDB4MkQsIDB4MjMsIDB4MzAsCisweDBDLCAweDQwLCAweDMwLCAweDIwLCAweENGLCAweDQ0LCAweDBFLCAweDAzLCAweDM0LCAweDBDLCAweEMwLCAweDMwLCAweDQwLAorMHhEMywgMHgwOCwgMHgyNSwgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4MEQsIDB4MDgsIDB4M0YsIDB4ODAsIDB4RkQsIDB4MDAsIDB4RjAsCisweDAyLCAweEMwLCAweDBCLCAweDgwLCAweDJGLCAweDAwLCAweERDLCAweDIwLCAweEYwLCAweDgyLCAweEUwLCAweDBGLCAweDAyLAorMHgzRiwgMHgwMCwgMHhCQywgMHgxMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwQiwgMHgwMCwgMHgzRiwgMHgwMCwgMHg1RSwgMHgwMCwKKzB4RjAsIDB4MTMsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweEEwLCAweDMzLCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDgzLCAweEYwLCAweDFELCAweEMwLCAweDM0LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg3MywgMHgwMCwgMHhEMywgMHgwMCwgMHgxQywgMHgwMywKKzB4MzAsIDB4MEQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0UsIDB4MDMsIDB4RjAsIDB4MUQsIDB4QzAsIDB4NTQsCisweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDA5LCAweDIwLAorMHgyMSwgMHgyMCwgMHhCNCwgMHgwMCwgMHhEMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgxMCwgMHgyRCwgMHg0MCwgMHhCNCwgMHgwMCwKKzB4RDAsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4NTIsIDB4MDIsIDB4NDAsIDB4MEIsCisweDAwLCAweDIxLCAweDAwLCAweEI2LCAweDAwLCAweEQxLCAweDAyLCAweDQwLCAweDQ4LCAweDYwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3OSwgMHgwMCwgMHhFNSwgMHhDMSwgMHhCNCwgMHgwNywKKzB4RDgsIDB4MUYsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NEEsIDB4N0IsCisweDg4LCAweEUxLCAweDAxLCAweDk0LCAweDA3LCAweDk0LCAweDFFLCAweDQwLCAweDdGLCAweDAwLCAweEU5LCAweDAxLCAweEI0LAorMHg4NywgMHhEMiwgMHgxRSwgMHg1MiwgMHgwQywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MjgsIDB4MDMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDksIDB4MDAsIDB4NTYsIDB4MDAsCisweDA4LCAweDBELCAweDgwLCAweDc2LCAweDAwLCAweEQwLCAweDAwLCAweDQ0LCAweDAzLCAweDAwLCAweDAxLCAweDQwLCAweDA0LAorMHgwMCwgMHhEMCwgMHgwMCwgMHg0OCwgMHgwMywgMHgwOCwgMHgwOSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwKKzB4NDgsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTEsCisweDAwLCAweDU3LCAweDAwLCAweDNDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDEwLCAweDAwLCAweDVGLCAweDAwLCAweDdDLAorMHgwMSwgMHhGMCwgMHgwNCwgMHhDMCwgMHgxNywgMHg0MCwgMHg0MywgMHgwMCwgMHgxQywgMHgwMSwgMHhCNCwgMHgwNSwgMHhDMCwKKzB4MTcsIDB4MDAsIDB4NUIsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLAorMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGNCwgMHgwMCwgMHhGMCwgMHgwMywgMHhDNCwKKzB4OEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkQsIDB4MDgsIDB4NzAsIDB4MjMsIDB4QzAsIDB4OEYsIDB4NDAsIDB4MzcsIDB4MDAsCisweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5MywgMHgwOSwgMHg3QywgMHgyNiwgMHgzMCwgMHgxOSwgMHhDMCwKKzB4NjcsIDB4MDAsIDB4OTMsIDB4MDgsIDB4N0MsIDB4MEEsIDB4MzEsIDB4MTksIDB4QzgsIDB4NjYsIDB4MDIsIDB4OUYsIDB4ODAsCisweDZDLCAweDAyLCAweDM0LCAweDA5LCAweEMwLCAweDY3LCAweDQwLCAweDkyLCAweDA1LCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwKKzB4MjYsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDIsIDB4NTEsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDEsCisweDc0LCAweDAyLCAweDEwLCAweDg5LCAweDQwLCAweDY0LCAweDAxLCAweDlELCAweDAwLCAweDQ0LCAweDEyLCAweDEwLCAweDM5LAorMHg0OCwgMHgyMywgMHgwMiwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwRSwgMHhEMCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDEsIDB4QjEsIDB4ODAsCisweEY0LCAweDAyLCAweDEwLCAweDhCLCAweDQwLCAweDJGLCAweDAxLCAweEIxLCAweDAwLCAweEY0LCAweDAyLCAweDEwLCAweDBCLAorMHg0MCwgMHgyRSwgMHgyMCwgMHhCRCwgMHgwMCwgMHhDNCwgMHgwMiwgMHgxMCwgMHg4QiwgMHg0MCwgMHgyRiwgMHg4MCwgMHhCNSwKKzB4MDAsIDB4RjQsIDB4NTIsIDB4RDAsIDB4MEIsIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDJDLCAweDAwLCAweEExLCAweDAyLCAweEY0LCAweDBBLCAweDUwLCAweDBBLAorMHg0MCwgMHgyRiwgMHgwMCwgMHhBMSwgMHgwMCwgMHhCNCwgMHgwQSwgMHgwNCwgMHgxQSwgMHg0MCwgMHgyQSwgMHgwMCwgMHhCRCwKKzB4MDAsIDB4ODUsIDB4MDIsIDB4MTgsIDB4MEUsIDB4NDAsIDB4MkIsIDB4MDAsIDB4QTUsIDB4MDIsIDB4QjQsIDB4MDIsIDB4RDAsCisweDBBLCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELAorMHhCMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDOCwgMHgwNywgMHg0MCwgMHgxMywKKzB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MEYsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MzIsCisweDAxLCAweEMyLCAweDE3LCAweDQwLCAweDE3LCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDc3LCAweEMwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHgyNywgMHg0MCwgMHg5RiwKKzB4MDEsIDB4N0MsIDB4ODYsIDB4RjAsIDB4MDgsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjIsCisweDQ5LCAweDQxLCAweDI1LCAweDIwLCAweDlGLCAweDE0LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLAorMHg5QiwgMHgwMSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsCisweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweDMwLCAweDBBLCAweEMwLCAweDJCLCAweDIwLAorMHhBRiwgMHg0MiwgMHg4RCwgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHgyOCwgMHgwMCwgMHhCMywgMHgwMiwgMHhDQywgMHgwMiwKKzB4RjAsIDB4MEEsIDB4QzAsIDB4NjQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFDLCAweDA4LCAweDA3LCAweDAwLCAweDFELCAweDE1LCAweDQ0LCAweDU0LCAweEQwLCAweDAxLCAweDQ4LCAweDA3LCAweDAwLAorMHgxRCwgMHgwMCwgMHg3NCwgMHgxNCwgMHgxMCwgMHg1MSwgMHg0MSwgMHgwNywgMHgwMCwgMHgxRCwgMHg4MSwgMHg0NCwgMHgwMCwKKzB4NTAsIDB4MDEsIDB4NDgsIDB4MDQsIDB4MTAsIDB4MTUsIDB4MDEsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NzEsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAwLAorMHg4RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0OCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHg0MiwKKzB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4QTAsIDB4OEQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MDgsIDB4NTIsIDB4MjAsCisweDAwLCAweEQxLCAweDA0LCAweDA0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDQwLCAweDgwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MTAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTQsIDB4MDksIDB4NDQsIDB4MjcsCisweDAwLCAweDhELCAweDAwLCAweDQ0LCAweDgyLCAweDUwLCAweDA5LCAweDQ2LCAweDI0LCAweDAwLCAweDk1LCAweDAwLCAweDQ0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4MjgsIDB4MjUsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0QsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweEZDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDRDLAorMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyMCwgMHgwOCwgMHhBMywgMHgwMCwgMHg0RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MTQsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjUsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMiwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAyLCAweDFGLCAweDAwLCAweDRDLAorMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhEMCwKKzB4MDQsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MTAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MTMsIDB4MDAsCisweDdDLCAweDA0LCAweDMwLCAweDAxLCAweEMxLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgyMCwgMHgxNCwgMHgwMCwgMHg1RCwgMHgyMCwgMHg0NCwgMHgwMSwgMHhEMSwgMHgwNSwgMHg0MCwKKzB4MTcsIDB4MTAsIDB4NUQsIDB4MDEsIDB4NzAsIDB4MDEsIDB4RDAsIDB4MDcsIDB4NDAsIDB4REMsIDB4MDAsIDB4NzEsIDB4ODEsCisweDk0LCAweDAxLCAweDUwLCAweDE2LCAweDQxLCAweDFGLCAweDAwLCAweDUxLCAweDAwLCAweEY0LCAweDA1LCAweDExLCAweDI2LAorMHg1MCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwKKzB4NjIsIDB4MDAsIDB4REQsIDB4MDgsIDB4MDQsIDB4MDcsIDB4RDAsIDB4ODgsIDB4NDgsIDB4MzMsIDB4MDAsIDB4OEQsIDB4ODAsCisweDc0LCAweDAzLCAweDUwLCAweDA0LCAweDQwLCAweEEwLCAweDA2LCAweEM5LCAweDExLCAweDA2LCAweDAxLCAweDEwLCAweDRDLAorMHg0OCwgMHgzMywgMHgwQywgMHhDMSwgMHg4MCwgMHgzNCwgMHgwNSwgMHg5MCwgMHgxOCwgMHg0NCwgMHg1MCwgMHgwMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDgsCisweDg0LCAweDUzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDEwLCAweEI0LCAweDQzLCAweEQwLCAweDFGLAorMHg0MCwgMHg1QywgMHgyMCwgMHhGOSwgMHg1MCwgMHhENCwgMHg4MCwgMHg1MCwgMHgwQSwgMHg0MCwgMHgxRiwgMHgyMCwgMHhFMSwKKzB4MDgsIDB4RjQsIDB4NDcsIDB4OTEsIDB4MkIsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDc4LCAweDAwLCAweEZGLCAweDA1LCAweDhDLCAweDA3LCAweEYwLCAweDFFLAorMHhDMCwgMHg3QiwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHg4NywgMHg3MCwgMHgxRSwgMHhDMCwgMHg0OCwgMHgwMCwgMHhFQiwKKzB4MDEsIDB4OEMsIDB4MDcsIDB4MzAsIDB4MTIsIDB4QzAsIDB4N0IsIDB4MDAsIDB4QTMsIDB4ODEsIDB4QkMsIDB4MDcsIDB4QjQsCisweDFBLCAweEMwLCAweDUwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhCOCwgMHgzNSwgMHgxMCwgMHhERiwgMHgwMCwgMHg3QywgMHgyMywgMHhGMSwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MDYsIDB4MDAsIDB4RDcsIDB4MDAsIDB4NzgsIDB4MDIsIDB4RjAsCisweDAxLCAweEMwLCAweDM3LCAweDAwLCAweDlELCAweDAwLCAweDNDLCAweDAzLCAweDcwLCAweDA5LCAweEMwLCAweDQzLCAweDYwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHg3RiwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4RkMsIDB4MDYsIDB4MzAsIDB4OUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RTMsIDB4MDEsIDB4OEMsIDB4NDcsIDB4MzAsCisweDE3LCAweEMwLCAweDRGLCAweDAwLCAweDNGLCAweDAxLCAweDlDLCAweDA0LCAweDcwLCAweDE2LCAweEM0LCAweDVDLCAweDAwLAorMHhFRiwgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwgMHgxQiwgMHhDMiwgMHgwQiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTgsIDB4MzksIDB4MDQsIDB4QUQsIDB4MEMsIDB4QjQsIDB4MDIsIDB4MTEsCisweDhFLCAweDQwLCAweDNCLCAweDEwLCAweEUxLCAweDAwLCAweDg0LCAweDIzLCAweDEwLCAweDBFLCAweDQwLCAweDBCLCAweDEwLAorMHg2RCwgMHgwQSwgMHg4NSwgMHg2MCwgMHg1NSwgMHg4NiwgMHhDMCwgMHg5QSwgMHgxMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMywKKzB4RDAsIDB4MEEsIDB4NDQsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDM5LCAweDAwLCAweEFELCAweDA4LCAweEY0LCAweDAyLCAweDEwLCAweDhFLCAweDQwLCAweDNGLCAweDA0LAorMHhFMSwgMHgxMCwgMHhFNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MSwgMHgwQiwgMHgwMCwgMHgyRCwgMHgxMCwgMHg5NCwgMHgwMCwKKzB4RDAsIDB4MDcsIDB4NDEsIDB4M0EsIDB4MDAsIDB4QkQsIDB4MEEsIDB4QTQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDEsIDB4MjMsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDMzLCAweDAwLAorMHg4RCwgMHgwMywgMHg3NCwgMHgwQSwgMHgxMCwgMHg1QywgMHg0MCwgMHhFMywgMHgwMCwgMHhDMSwgMHg0MSwgMHgyNCwgMHgwRSwKKzB4MTAsIDB4MUQsIDB4NDAsIDB4ODMsIDB4MDIsIDB4NUQsIDB4MDMsIDB4MDQsIDB4MDQsIDB4RDAsIDB4MTQsIDB4NDAsIDB4NzIsCisweDEwLCAweDlELCAweDAxLCAweDI0LCAweDBCLCAweEQxLCAweDE4LCAweDQwLCAweDFCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgwMCwgMHhERiwgMHg4OSwgMHg3QywgMHgwMywKKzB4MzAsIDB4MkQsIDB4QzAsIDB4NzcsIDB4NDAsIDB4RDMsIDB4MDEsIDB4NkMsIDB4NDYsIDB4MzQsIDB4MTksIDB4QzAsIDB4ODMsCisweDAwLCAweDVGLCAweDQxLCAweDFDLCAweDA4LCAweEYwLCAweEIxLCAweEMwLCAweDc2LCAweDA0LCAweERGLCAweDExLCAweDJDLAorMHgwMiwgMHhGMCwgMHgxRCwgMHhDMiwgMHg3NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDgsIDB4NzgsIDB4MTcsIDB4RjAsIDB4OEQsIDB4QzAsIDB4MzcsCisweDAwLCAweERGLCAweDEwLCAweDVDLCAweDAyLCAweEYwLCAweDBELCAweEMxLCAweDA3LCAweDA0LCAweERGLCAweDAwLCAweDdDLAorMHg0OCwgMHg2MCwgMHgwMSwgMHhDNCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwRiwgMHhGMCwgMHgyRCwgMHhDMSwKKzB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsCisweDA2LCAweEYzLCAweDA0LCAweEZDLCAweDBCLCAweDMwLCAweDlGLCAweEM4LCAweDNGLCAweDA0LCAweEZGLCAweDgwLCAweENDLAorMHg1NiwgMHhGMCwgMHgwRiwgMHhEMCwgMHgwQywgMHgwMCwgMHg3MywgMHgxMCwgMHhDQywgMHgwMCwgMHhCMCwgMHgwMywgMHhDMCwKKzB4MkYsIDB4MDQsIDB4QjIsIDB4MDMsIDB4QzgsIDB4NDMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDcsIDB4MjQsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDcyLCAweDQwLCAweDkxLCAweDAxLCAweDc0LAorMHgwNiwgMHgxMCwgMHgxRCwgMHg0NCwgMHgzNywgMHgwOCwgMHhDRCwgMHg0MCwgMHg0NCwgMHgwNiwgMHhEMCwgMHgzRCwgMHg0MCwKKzB4NDQsIDB4MzAsIDB4REYsIDB4QzAsIDB4NDUsIDB4MDQsIDB4MTAsIDB4NzEsIDB4NDQsIDB4NjMsIDB4MTAsIDB4RDEsIDB4MDEsCisweDQ0LCAweDE3LCAweEIwLCAweDBELCAweDQwLCAweDI3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNiwgMHgwMCwgMHg5MSwgMHg4MCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwKKzB4MzcsIDB4MDAsIDB4REQsIDB4MDQsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDEsIDB4NDYsIDB4MDAsIDB4MTEsIDB4MDAsCisweDQ0LCAweDBDLCAweDlBLCAweDE1LCAweDQyLCAweDc3LCAweDAwLCAweEQ1LCAweDAwLCAweDc3LCAweDA3LCAweDAwLCAweDQ5LAorMHg0MSwgMHgwNywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4MzQsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTQsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4REQsIDB4MDAsCisweDA2LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDQ0LCAweDI4LCAweDQ1LCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDA0LAorMHg0MCwgMHgzMywgMHg2MCwgMHg4NSwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgwNCwgMHg0MCwgMHg0MywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzYsIDB4MDAsIDB4RDMsIDB4MDAsCisweDdDLCAweDAzLCAweDEwLCAweDBELCAweEMwLCAweDM3LCAweDIwLCAweERGLCAweDAwLCAweDRELCAweDAyLCAweEYwLCAweDBELAorMHhDMCwgMHgwNCwgMHgwMCwgMHgwMSwgMHg4MCwgMHg0QywgMHgwMCwgMHhCNCwgMHgwNSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5NywKKzB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MDksIDB4QzAsIDB4MDcsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEJDLCAweDAyLCAweEYxLCAweDBGLAorMHhDMCwgMHgyQiwgMHgxMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHg4MCwgMHgwRiwgMHgyMCwgMHg3RiwKKzB4MDAsIDB4RkQsIDB4MDAsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkIsIDB4NDAsIDB4Q0MsIDB4ODMsIDB4RjAsCisweDA3LCAweEM0LCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHhBMCwgMHg3RiwgMHgwMCwgMHhFRiwgMHgwMSwgMHg4QywgMHgwNywgMHg3MCwgMHgxQiwgMHhEMCwgMHgyOCwgMHgwMSwgMHhBNywKKzB4MDEsIDB4RkMsIDB4MzIsIDB4MzAsIDB4MUEsIDB4QzAsIDB4M0MsIDB4MDAsIDB4QjMsIDB4MTQsIDB4RUMsIDB4MTIsIDB4MzAsCisweDhCLCAweEMwLCAweDNELCAweDBDLCAweEJGLCAweDA4LCAweENDLCAweDAyLCAweEYxLCAweDBGLCAweEMwLCAweDBGLCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgxOCwgMHg3NywgMHgwMCwgMHg5RCwKKzB4MDEsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MTEsIDB4NDIsIDB4NjQsIDB4MDAsIDB4NTEsIDB4MDEsIDB4NDQsIDB4MEEsIDB4MTAsCisweDE5LCAweDQwLCAweEZDLCAweDEyLCAweDkxLCAweDAyLCAweDQ0LCAweDNBLCAweDEwLCAweDQ5LCAweDQwLCAweEJDLCAweDAwLAorMHg5RCwgMHgwMCwgMHg0NCwgMHgyQSwgMHhEMCwgMHgwRCwgMHg0NCwgMHgwRiwgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzEsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4ODUsIDB4NTAsCisweDA0LCAweDQ4LCAweDAwLCAweDgyLCAweEQ1LCAweDAwLCAweDE0LCAweDE4LCAweDUwLCAweDA5LCAweDQwLCAweDMyLCAweDAwLAorMHg4NSwgMHgwMCwgMHgzNCwgMHg0MCwgMHg1MCwgMHg4OCwgMHg0MiwgMHgzMSwgMHgyNCwgMHgwOSwgMHgwNiwgMHgwNCwgMHgwMCwKKzB4RDAsIDB4MEMsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweEEwLCAweDM3LCAweDAwLCAweERELCAweDExLCAweDQ1LCAweDA1LCAweDEwLCAweDExLCAweDQ0LCAweDQ0LCAweDAwLAorMHhEMSwgMHgwMywgMHgwNCwgMHg4QywgMHgxMSwgMHg4OSwgMHg0MCwgMHgzNiwgMHg4MCwgMHg5NCwgMHg0MSwgMHgxNCwgMHgwNCwKKzB4NTAsIDB4MTksIDB4NDAsIDB4MzQsIDB4MDAsIDB4MEQsIDB4MTEsIDB4NDQsIDB4MEMsIDB4RDAsIDB4MEQsIDB4MjAsIDB4MEYsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDM3LCAweDAwLAorMHhDRiwgMHgwMSwgMHgwQywgMHgwNCwgMHg3MCwgMHgxMCwgMHg0MCwgMHg0NCwgMHgyMCwgMHhDNywgMHgwMywgMHg1QywgMHgwRSwKKzB4NzAsIDB4NDAsIDB4RDAsIDB4MzIsIDB4MDgsIDB4MTcsIDB4QTMsIDB4N0MsIDB4OTYsIDB4NzEsIDB4MTEsIDB4QzAsIDB4MzUsCisweDEwLCAweDFGLCAweDAzLCAweDRFLCAweDBFLCAweEY4LCAweDBELCAweEMwLCAweDBCLCAweDIwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHhGRiwgMHg4MCwgMHhGQywgMHgwMCwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MkIsIDB4MDAsIDB4N0YsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MEIsIDB4QzAsIDB4M0QsCisweDYwLCAweDlCLCAweDAwLCAweEVDLCAweDAyLCAweEIwLCAweDAwLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweEEwLCAweEZGLAorMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MkEsIDB4MDgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDMsIDB4NEMsIDB4MDEsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MDcsCisweDI0LCAweEQzLCAweDA0LCAweDVDLCAweDAyLCAweDMwLCAweDIxLCAweEMwLCAweDM2LCAweDAxLCAweDE3LCAweDAwLCAweDVDLAorMHg4MiwgMHhGMCwgMHgyOSwgMHhDMCwgMHg3NiwgMHgwNCwgMHgxMywgMHgwMiwgMHg3QywgMHgwNiwgMHgzMCwgMHgwRCwgMHhDMiwKKzB4QTksIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzQsCisweDA4LCAweERDLCAweDAxLCAweDQ2LCAweDA1LCAweDEwLCAweDQxLCAweDQ4LCAweDI3LCAweDAwLCAweDUxLCAweDgxLCAweDQ0LAorMHgwMiwgMHgxMCwgMHgxOSwgMHhDNCwgMHhCRSwgMHgwMCwgMHg5QiwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMSwgMHgwOSwgMHg0OCwKKzB4QkMsIDB4MDAsIDB4MTEsIDB4ODAsIDB4NzQsIDB4MjIsIDB4MTAsIDB4MEYsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDMyLCAweDA4LCAweENELCAweDAwLCAweDA2LAorMHgzMywgMHgxMCwgMHgwNCwgMHg0MCwgMHgyMywgMHgwMiwgMHg0OSwgMHgwMiwgMHgxNCwgMHgwMCwgMHgxMCwgMHgyQywgMHg1MSwKKzB4MzMsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4QjIsIDB4MDAsIDB4ODEsIDB4ODAsCisweDM0LCAweDAwLCAweDExLCAweDBDLCAweDQ4LCAweDBGLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwRCwgMHgwOCwgMHg3QSwgMHgwMCwgMHhGRCwgMHgwMSwgMHg4NCwgMHgwNywgMHgxMSwgMHgxMiwgMHg0MCwKKzB4N0IsIDB4MTAsIDB4NzksIDB4MTEsIDB4OTQsIDB4MDcsIDB4MTAsIDB4MUYsIDB4NDEsIDB4N0IsIDB4MDAsIDB4NkMsIDB4MDEsCisweDk0LCAweDA3LCAweEQ4LCAweDFFLCAweDQwLCAweDcwLCAweDQyLCAweEUxLCAweDAxLCAweEI0LCAweDA3LCAweDVDLCAweDFFLAorMHg0MCwgMHgzNywgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwKKzB4MzIsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MDQsIDB4MjEsIDB4MTIsIDB4ODQsIDB4QzAsIDB4MzMsIDB4MDEsIDB4Q0IsIDB4MDAsCisweDFDLCAweDIxLCAweDMwLCAweDRDLCAweEMwLCAweDMzLCAweDAwLCAweEM3LCAweEU4LCAweDFDLCAweDgxLCAweEYwLCAweDI0LAorMHhDMCwgMHgzMiwgMHgwMiwgMHhDMywgMHgwMCwgMHg3QywgMHgxMSwgMHgzMCwgMHgwQywgMHhDMCwgMHg0QiwgMHg0MCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsCisweEZDLCAweDgxLCAweEYwLCAweDgzLCAweEMwLCAweDNGLCAweDAwLCAweEY3LCAweDAwLCAweEVDLCAweDAzLCAweEYwLCAweDBGLAorMHhDQywgMHgzQSwgMHgwMCwgMHhGQiwgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHhCRiwgMHgwMiwgMHhGRiwKKzB4NDgsIDB4RkMsIDB4MDEsIDB4QjAsIDB4MEYsIDB4QzAsIDB4MDgsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEyLCAweDM3LCAweDIwLCAweERGLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDA1LAorMHhDMiwgMHgxMywgMHgwMCwgMHg1NywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgxRCwgMHhDMCwgMHgzNiwgMHgwMCwgMHg1RiwKKzB4NDAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4MTUsIDB4QzAsIDB4MzQsIDB4MDEsIDB4NTMsIDB4MDEsIDB4NEQsIDB4MDEsIDB4MTAsCisweDBELCAweEM0LCAweDQzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAorMHg5OCwgMHgzOSwgMHgwOCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMSwgMHhEMCwgMHgwMiwgMHg0MCwgMHgzQiwgMHgwMCwgMHg2MSwKKzB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0EsIDB4MDQsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsCisweDA3LCAweDUwLCAweEJDLCAweDAwLCAweEYxLCAweDAwLCAweEM0LCAweDAzLCAweDEwLCAweDRFLCAweDQwLCAweDRGLCAweDYwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhGRCwKKzB4MTEsIDB4QTYsIDB4MDUsIDB4RDAsIDB4MTYsIDB4NDAsIDB4NUIsIDB4MDQsIDB4NjUsIDB4MDEsIDB4QjQsIDB4MDUsIDB4RDAsCisweDBBLCAweDUwLCAweDdBLCAweDkzLCAweDZELCAweDAxLCAweEI0LCAweDA1LCAweDUwLCAweDFFLCAweDQwLCAweDc4LCAweDQxLAorMHhFNSwgMHgwMywgMHg4NCwgMHgwNywgMHgxMCwgMHg5RSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjAsIDB4MzMsIDB4MDAsIDB4NEQsIDB4MTIsIDB4MDYsIDB4QkQsIDB4RDAsCisweDIwLCAweDQwLCAweDMzLCAweDAwLCAweDQxLCAweDAxLCAweDc0LCAweDQ3LCAweEQwLCAweEVDLCAweDQwLCAweDMyLCAweDgwLAorMHhDRCwgMHgwQSwgMHgzNCwgMHgyQiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzNCwgMHgwMCwgMHhDNSwgMHgwMCwgMHgwNCwgMHg4QiwKKzB4MTAsIDB4MEMsIDB4NDAsIDB4NUIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE3LCAweEE4LCAweDE3LCAweDAwLCAweDZGLCAweDAyLCAweEVDLCAweDA5LCAweEYyLCAweDA3LCAweEMwLCAweDFCLCAweDBBLAorMHg3NywgMHgwNywgMHhGQywgMHgxNSwgMHhGMCwgMHgwNiwgMHhDMCwgMHgxNiwgMHgwMCwgMHg3RiwgMHgyMSwgMHhGNCwgMHgyRCwKKzB4NzgsIDB4ODcsIDB4QzEsIDB4MTQsIDB4MDAsIDB4NzcsIDB4MDAsIDB4Q0MsIDB4MzksIDB4MzAsIDB4MDUsIDB4QzAsIDB4NUYsCisweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDA1LCAweDAwLAorMHgxRiwgMHg4MiwgMHg3RCwgMHgwMCwgMHhGMywgMHgwMSwgMHgwMSwgMHgwNywgMHgwMCwgMHgxRiwgMHgxMCwgMHg3QywgMHgwMCwKKzB4QzAsIDB4MjEsIDB4QzAsIDB4MDUsIDB4MjAsIDB4MUYsIDB4MTAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsCisweDAwLCAweDE5LCAweDA0LCAweDdDLCAweDA4LCAweEY0LCAweDAxLCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwNCwgMHg1QywgMHgwRSwKKzB4RjAsIDB4NDksIDB4QzQsIDB4MjQsIDB4MDgsIDB4OUIsIDB4MDAsIDB4NEQsIDB4MDIsIDB4MzAsIDB4OTksIDB4MDIsIDB4NjcsCisweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDk3LCAweDgwLCAweDNDLAorMHgwRSwgMHg3MCwgMHg0OSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MUEsIDB4RDAsIDB4NzgsIDB4NDQsIDB4MjQsCisweDEwLCAweDgxLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDI5LCAweDQ0LCAweEE0LCAweDA4LCAweDlELCAweDAwLCAweDc0LAorMHg4MiwgMHhEMSwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5MSwgMHg4MCwgMHg3NCwgMHgwNiwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MjQsCisweDAwLCAweDlELCAweDAwLCAweDU0LCAweDAyLCAweEQwLCAweDBELCAweDQ0LCAweDM0LCAweDIwLCAweDk5LCAweDA4LCAweDQ0LAorMHgwMiwgMHgxMCwgMHgwOSwgMHg2MCwgMHgyNywgMHgwNCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MDEsIDB4OTUsIDB4MDAsIDB4NzQsIDB4NDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI4LCAweDIwLCAweDAwLCAweENELCAweDAwLCAweDA0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0OCwgMHgyMCwgMHgwNSwgMHg4MSwgMHgwMCwgMHgwNCwgMHg1MiwgMHgxMCwgMHgwQywgMHg0MCwKKzB4MjEsIDB4MTUsIDB4OEQsIDB4MTQsIDB4MzQsIDB4NTIsIDB4RDAsIDB4NDgsIDB4NDEsIDB4MzMsIDB4MDUsIDB4ODEsIDB4MTQsCisweDM0LCAweDUyLCAweDEwLCAweDQ4LCAweDQwLCAweDUzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MDQsIDB4MDEsIDB4MUIsIDB4MDAsIDB4NEMsIDB4MTAsIDB4MzQsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MjEsIDB4MUYsIDB4MDYsCisweDdDLCAweDEwLCAweEYwLCAweDQxLCAweEM4LCAweDA3LCAweDAxLCAweDE3LCAweDA0LCAweDdDLCAweDEwLCAweDcwLCAweDAxLAorMHhDNCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBMCwKKzB4MjcsIDB4MDAsIDB4QUYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjIsIDB4MEIsIDB4RDAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsCisweEZDLCAweDUyLCAweEYwLCAweDBBLCAweEMwLCAweDI2LCAweDAwLCAweEJGLCAweDEwLCAweEZDLCAweDUyLCAweEYwLCAweDRCLAorMHhDMSwgMHgyNywgMHgwNSwgMHhCRiwgMHgxNCwgMHhGQywgMHg1MiwgMHhGMCwgMHg2OSwgMHhDMywgMHg2NywgMHgyMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MjUsIDB4MDAsIDB4QkYsIDB4MDAsCisweENDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDZGLCAweDYwLCAweEIzLCAweDAwLCAweDdDLCAweDI2LCAweEYwLCAweDBBLAorMHhDMCwgMHgyRCwgMHgwMCwgMHg5MywgMHgwMiwgMHg3QywgMHg1MiwgMHgzMCwgMHgzOSwgMHhDMSwgMHhBRiwgMHgwMCwgMHg5RiwKKzB4MDksIDB4Q0MsIDB4MDYsIDB4RjAsIDB4NUIsIDB4RTAsIDB4NjMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDE4LCAweDA3LCAweDAwLCAweDVELCAweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDAxLAorMHg0MCwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgyQywgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwKKzB4MDEsIDB4NzQsIDB4MTgsIDB4MTAsIDB4MjEsIDB4NDAsIDB4NDcsIDB4MDksIDB4MUQsIDB4MEIsIDB4NDQsIDB4MDAsIDB4RDAsCisweDAxLCAweDQwLCAweDczLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgyMCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHhBMywgMHgwMCwgMHg4NSwKKzB4MDEsIDB4MzQsIDB4MTIsIDB4RDAsIDB4MDksIDB4NDAsIDB4QTMsIDB4ODAsIDB4ODEsIDB4MjYsIDB4MzQsIDB4NDIsIDB4MTQsCisweDA4LCAweDQwLCAweEEzLCAweDAwLCAweDhELCAweDA0LCAweDA0LCAweDBBLCAweEQwLCAweDY4LCAweDQxLCAweDRCLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyMCwgMHgyNSwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4NDYsIDB4MDYsIDB4RDMsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDQsIDB4OTUsIDB4MDQsIDB4NzYsIDB4MTIsIDB4RDIsCisweDQ5LCAweDQwLCAweDI0LCAweEMwLCAweDkxLCAweDAyLCAweDc0LCAweDgyLCAweDAwLCAweDA5LCAweDQxLCAweDI3LCAweDAwLAorMHg5RCwgMHgwMiwgMHg0NCwgMHgwMiwgMHhEMiwgMHgwOSwgMHg0OCwgMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsIDB4MDAsIDB4OEYsIDB4MDIsIDB4NDQsIDB4MTYsIDB4RjIsCisweDM5LCAweEMxLCAweEE3LCAweDAwLCAweDk3LCAweDAyLCAweDdDLCAweDE2LCAweEYyLCAweDA5LCAweEMwLCAweDI1LCAweDAwLAorMHg5MywgMHhDMiwgMHg3QywgMHgxMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwOSwgMHg0RCwgMHg2RSwKKzB4RDgsIDB4MDksIDB4NDgsIDB4MTcsIDB4MjgsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDgwLCAweDI1LCAweDAwLCAweDlGLCAweDAyLCAweDdELCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDYzLCAweDAyLAorMHg5QiwgMHhBMCwgMHg3QywgMHgwMiwgMHhGMSwgMHgxOSwgMHhDMCwgMHgyNywgMHgyMCwgMHg5RiwgMHgwNSwgMHg3QywgMHgxNiwKKzB4RjAsIDB4NTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OEYsIDB4MDEsIDB4N0MsIDB4NDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NEIsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDA1LCAweDAwLAorMHgxRiwgMHgwNCwgMHg2QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwKKzB4RjAsIDB4MDEsIDB4RDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MjEsIDB4QzIsIDB4MDQsCisweDA0LCAweDFGLCAweDAyLCAweDRDLCAweDA4LCAweDMwLCAweDAxLCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgxNCwgMHgwMCwgMHg3RCwgMHgwMiwgMHhDNCwgMHg0NSwKKzB4QzIsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MjAsIDB4N0QsIDB4MjEsIDB4N0MsIDB4MDEsIDB4RDAsIDB4MTYsIDB4NTgsIDB4MUMsCisweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQxLCAweDA1LCAweEMwLCAweDFFLCAweDA0LCAweDVELCAweDAwLCAweEM0LAorMHg4OSwgMHgxMCwgMHgwNSwgMHg1MCwgMHg1MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4OEQsIDB4OEIsIDB4MjQsIDB4MDYsIDB4QzgsIDB4Q0MsIDB4MDAsIDB4NTMsCisweDA0LCAweDBDLCAweDA1LCAweDM0LCAweDAzLCAweEQxLCAweEQ0LCAweDQwLCAweDQwLCAweDAwLCAweEM1LCAweDAwLCAweDc0LAorMHgwMywgMHhEMCwgMHgwQywgMHg2MCwgMHg3MiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwQiwgMHgxNSwgMHg4QywgMHg0MCwKKzB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MzgsCisweDAwLCAweEFELCAweDAwLCAweDg0LCAweDAyLCAweEQwLCAweDBBLCAweDQwLCAweEJCLCAweDgwLCAweDJELCAweDgyLCAweDk0LAorMHgwMywgMHhEMCwgMHgwNywgMHg0MCwgMHg4OCwgMHgwMCwgMHhFRCwgMHgyNCwgMHhCNCwgMHgyMywgMHhEMCwgMHgxRiwgMHg0MCwKKzB4M0EsIDB4MDAsIDB4RkQsIDB4ODAsIDB4MDQsIDB4MDcsIDB4MTIsIDB4MUUsIDB4NDAsIDB4MDQsIDB4MjAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDEwLCAweDc5LCAweDAwLCAweEFGLCAweDAxLCAweEFDLAorMHgwNiwgMHhGMCwgMHgxQSwgMHhDOCwgMHg1QiwgMHgwMCwgMHgyRiwgMHgwMSwgMHhCMCwgMHgwNywgMHhGMCwgMHgxMiwgMHhDQSwKKzB4NzgsIDB4MDAsIDB4RTcsIDB4QTMsIDB4QkMsIDB4ODcsIDB4RjAsIDB4N0YsIDB4QzQsIDB4NUEsIDB4MDAsIDB4RkYsIDB4MEYsCisweDg5LCAweDA3LCAweDMyLCAweDFGLCAweEMwLCAweDQ0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHg4RiwgMHgwMCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4MUYsIDB4ODAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MTAsIDB4REYsIDB4MDAsCisweDdDLCAweDBCLCAweEYwLCAweDJELCAweEM0LCAweDM3LCAweDAwLCAweERGLCAweEE0LCAweDdDLCAweDAyLCAweEYwLCAweDBELAorMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKzB4N0QsIDB4MDAsIDB4QkYsIDB4MDEsIDB4Q0MsIDB4MjYsIDB4RjAsIDB4OUIsIDB4QzAsIDB4NkYsIDB4MDIsIDB4MzMsIDB4MDksCisweERDLCAweEVGLCAweDczLCAweDE3LCAweEM4LCAweDVDLCAweDIyLCAweEZELCAweDA5LCAweEZDLCAweDBGLCAweEYxLCAweDNGLAorMHhDMCwgMHg3RiwgMHgwMiwgMHhGNywgMHg4MSwgMHhEQywgMHgwNSwgMHgxMCwgMHg5QiwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTgsIDB4MzksIDB4MDAsIDB4QUQsIDB4NDgsCisweDg1LCAweDIyLCAweEQwLCAweDBBLCAweDAwLCAweDNCLCAweDAwLCAweDIxLCAweEMwLCAweDg0LCAweEUzLCAweDEwLCAweDg2LAorMHg0MSwgMHg5OCwgMHgwMCwgMHhFRCwgMHgxOCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFMSwKKzB4MDAsIDB4RjQsIDB4MTEsIDB4MTIsIDB4Q0IsIDB4NDAsIDB4NTUsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDJELCAweDEwLCAweDg0LCAweDJBLCAweEQ4LCAweDBBLAorMHg2MSwgMHgyQiwgMHg2MCwgMHgzMSwgMHg1MCwgMHg5NCwgMHgyMywgMHg1MSwgMHgwNiwgMHg1MCwgMHgzQSwgMHg5OCwgMHhFRCwKKzB4MDgsIDB4QjQsIDB4MjMsIDB4RDAsIDB4MEUsIDB4NDEsIDB4MUIsIDB4MDAsIDB4RTEsIDB4MDAsIDB4OTQsIDB4NDMsIDB4OTksCisweDBGLCAweDQ0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHgyMCwgMHgzMSwgMHgwMCwgMHgwRCwgMHg0NywgMHgwNCwgMHgwMCwgMHhEOCwgMHg1OCwgMHg0MCwgMHhCMywgMHgwMiwgMHgwMSwKKzB4NTMsIDB4MDQsIDB4MDcsIDB4NTgsIDB4MzQsIDB4NDAsIDB4MTIsIDB4ODAsIDB4Q0QsIDB4NDEsIDB4MjQsIDB4MzMsIDB4RDAsCisweDNDLCAweDQwLCAweDIzLCAweDUwLCAweEMxLCAweDQyLCAweDM0LCAweDQ2LCAweDk4LCAweDBDLCAweDQwLCAweDExLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgxMCwgMHg5RCwKKzB4MDAsIDB4NEMsIDB4MDIsIDB4RDAsIDB4MTksIDB4QzAsIDB4OTMsIDB4NDAsIDB4MTMsIDB4MDEsIDB4REMsIDB4MEIsIDB4NzAsCisweDA1LCAweEMwLCAweDA2LCAweDAwLCAweEZGLCAweDAzLCAweEZDLCAweDBCLCAweEY4LCAweDNGLCAweEM0LCAweDI3LCAweDAwLAorMHhGMywgMHgwRiwgMHg1QywgMHgwMiwgMHhCNCwgMHgwRCwgMHg0MCwgMHg1NSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsCisweDA5LCAweEMwLCAweDM3LCAweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDEzLCAweDkwLCAweDQ1LCAweEMwLCAweDA1LCAweDAwLAorMHhERiwgMHgxMCwgMHg3NCwgMHgwMywgMHhGMCwgMHg0RCwgMHhDMCwgMHg4NywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4NzAsIDB4MEQsIDB4ODgsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDg0LCAweDA4LCAweDNFLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweEMwLCAweDAzLCAweEM4LCAweDFGLCAweDAwLAorMHgzQiwgMHgwMiwgMHg3QywgMHgwMywgMHhGMCwgMHgwNywgMHhDMCwgMHgxOCwgMHgwMCwgMHhGQSwgMHgwMCwgMHhBQywgMHgwMywKKzB4QjAsIDB4MEYsIDB4QzgsIDB4MDYsIDB4MTAsIDB4RUYsIDB4MDAsIDB4REMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4ODAsIDB4MTMsCisweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDIwLCAweDM2LCAweDAwLAorMHg5RCwgMHgwMSwgMHg3NCwgMHgwNSwgMHhEMCwgMHgxMSwgMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwgMHg4MywgMHg3NCwgMHgwMywKKzB4RDAsIDB4MTQsIDB4NDAsIDB4OTQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4QzQsCisweDA0LCAweERELCAweDAwLCAweDQ0LCAweDFDLCAweEQyLCAweDBELCAweDQyLCAweDE3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwNiwKKzB4RDAsIDB4NjksIDB4NDAsIDB4MjcsIDB4MDAsIDB4MTksIDB4MTAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MzUsIDB4NjAsIDB4MTQsCisweDAwLCAweEQ1LCAweDAwLCAweDY0LCAweDAzLCAweEQwLCAweDBDLCAweDYwLCAweDY1LCAweDAwLCAweERELCAweDIwLCAweDU0LAorMHgwNCwgMHhEOCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjgsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzMsCisweDAwLCAweDAwLCAweDIwLCAweDM0LCAweDgzLCAweEQwLCAweDA1LCAweDQwLCAweDEwLCAweDAwLCAweEM1LCAweDAwLCAweDM0LAorMHgwMywgMHgxMCwgMHgwQywgMHg2MCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNiwgMHgwMCwgMHhEOCwgMHgwOCwgMHg0MCwKKzB4NDMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjAsIDB4MzYsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDFCLCAweDIwLCAweEZDLAorMHgwMywgMHhGMiwgMHgwNSwgMHhEMCwgMHgxNCwgMHgxMCwgMHhENywgMHgwMCwgMHhFQywgMHgwMywgMHhCMCwgMHgwRiwgMHhDMCwKKzB4MDQsIDB4MTAsIDB4RkYsIDB4MjAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweEE4LCAweDNGLCAweDAwLCAweDJGLCAweDAwLCAweEZDLAorMHg4MCwgMHhGMSwgMHgwQiwgMHhDMCwgMHgzQiwgMHgwMCwgMHgyRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRSwgMHhDMCwKKzB4MUYsIDB4MjAsIDB4RkIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MjAsIDB4RkYsIDB4MDAsCisweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEUwLCAweDE3LCAweDIxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg1RiwgMHg0MCwgMHhCMywgMHgwMCwgMHhGQywgMHgxMiwgMHhGMCwgMHgxNywgMHhDMCwKKzB4N0YsIDB4MDAsIDB4NzMsIDB4ODEsIDB4RkMsIDB4MTAsIDB4RjEsIDB4QzMsIDB4QzAsIDB4MkMsIDB4MDIsIDB4MzMsIDB4ODEsCisweENDLCAweDIzLCAweDMwLCAweDBGLCAweEMwLCAweDQ4LCAweDEwLCAweEJGLCAweDIwLCAweEZDLCAweDA1LCAweDMwLCAweDFGLAorMHhDMCwgMHgwQywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwKKzB4NzcsIDB4MDgsIDB4OTEsIDB4NEIsIDB4NzQsIDB4MkUsIDB4RDIsIDB4MTksIDB4MDAsIDB4N0YsIDB4MDAsIDB4NTEsIDB4MDEsCisweDc0LCAweDJDLCAweEQwLCAweEUxLCAweDQwLCAweEE0LCAweDAxLCAweDExLCAweDAxLCAweEM0LCAweDFCLCAweDUxLCAweEJCLAorMHg0OCwgMHg2NCwgMHgwMCwgMHg4RCwgMHg0RSwgMHg3NCwgMHgwNywgMHgxMCwgMHgwRiwgMHg0OCwgMHgwNCwgMHg2MCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4NDAsCisweDM0LCAweDAyLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDA5LAorMHg0MCwgMHhBMCwgMHg4MCwgMHgxNSwgMHgwMCwgMHgwNCwgMHgxQiwgMHgxMCwgMHgwQywgMHg0MCwgMHgwMCwgMHgwMCwgMHg4RCwKKzB4MTAsIDB4MzQsIDB4ODIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NDQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDI1LCAweDIwLCAweEQxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDBELAorMHg0MCwgMHgzNywgMHgwMCwgMHg5MSwgMHg4MiwgMHg3NCwgMHgwNCwgMHhEMCwgMHgwOSwgMHg0OCwgMHgyNSwgMHg4NCwgMHgxMSwKKzB4MDEsIDB4NDUsIDB4MDcsIDB4NTMsIDB4ODksIDB4NDAsIDB4NjQsIDB4MDAsIDB4OUQsIDB4NDAsIDB4MzQsIDB4NDMsIDB4MTAsCisweDBELCAweDQwLCAweDBDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHg4OCwgMHgyMywgMHgwMCwgMHhEMywgMHgwOCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHg0NCwgMHgzMywgMHg0MCwgMHhEMywKKzB4MDAsIDB4N0MsIDB4MEMsIDB4RjAsIDB4ODgsIDB4QzAsIDB4NjQsIDB4NDAsIDB4MTMsIDB4ODEsIDB4NEMsIDB4MDUsIDB4MzAsCisweDFELCAweDkwLCAweDQ0LCAweDAwLCAweDlFLCAweDQwLCAweDdDLCAweDJELCAweDM0LCAweDBELCAweEMwLCAweDAwLCAweDIwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhBRCwgMHgwMCwgMHhCRiwKKzB4ODEsIDB4RkMsIDB4MTMsIDB4RDAsIDB4NEIsIDB4NDgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDksIDB4N0MsIDB4MDAsIDB4RjAsCisweDFCLCAweEMwLCAweDZFLCAweDJBLCAweDNFLCAweDEwLCAweEJDLCAweDgzLCAweEYwLCAweDA5LCAweEM0LCAweDJGLCAweDI4LAorMHhCRiwgMHgwMCwgMHhGNCwgMHgwMywgMHhGMSwgMHgwRiwgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MjUsIDB4MDIsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEMwLCAweDM3LCAweDAyLCAweDkzLCAweDAyLCAweDdDLCAweDAwLCAweDM0LCAweDA5LCAweEUwLCAweDI0LCAweDIwLAorMHgxQiwgMHgwMSwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDOCwgMHgwNCwgMHg0NCwgMHhEMywgMHgwMCwgMHg0QywgMHgwMiwKKzB4RjAsIDB4MEQsIDB4QzUsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEzLCAweEEwLCAweDI0LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweEMwLCAweDM1LCAweDAyLAorMHg5NSwgMHgwMCwgMHg3NCwgMHgwNCwgMHgxMCwgMHgwQiwgMHg0MiwgMHg2NCwgMHgwNCwgMHgwMSwgMHgwMywgMHg1QywgMHhBRiwKKzB4NTEsIDB4MTgsIDB4QzAsIDB4RTYsIDB4MTgsIDB4RDEsIDB4MDEsIDB4NkMsIDB4MDMsIDB4RDAsIDB4NkQsIDB4NDAsIDB4NEMsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDEyLCAweDA0LAorMHg4MSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwMCwgMHg0MCwgMHgzMywgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgxMCwKKzB4MTIsIDB4MDAsIDB4MDEsIDB4NjQsIDB4ODgsIDB4MDksIDB4MDAsIDB4MzQsIDB4MEYsIDB4NTEsIDB4QkMsIDB4NDEsIDB4ODEsCisweDEwLCAweDg1LCAweDExLCAweDA0LCAweDgyLCAweEQyLCAweDJELCAweDQyLCAweDFDLCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg3OCwgMHg4MiwgMHhBMSwgMHgyMSwgMHhCNCwgMHgxNiwKKzB4RDAsIDB4MUEsIDB4NDAsIDB4NzMsIDB4MDgsIDB4QTUsIDB4MDEsIDB4QjQsIDB4MDQsIDB4MTgsIDB4OTIsIDB4NDAsIDB4NjgsCisweDA4LCAweDI5LCAweDAxLCAweDE0LCAweDI3LCAweDUyLCAweDFFLCAweDY0LCAweDZGLCAweDAwLCAweEE1LCAweDI5LCAweEE0LAorMHgwNiwgMHhEMCwgMHgxRSwgMHg0MCwgMHgxOCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MTAsIDB4MjAsIDB4MDAsIDB4QzMsIDB4MDgsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDgsIDB4NDIsIDB4MzMsCisweDAyLCAweDgzLCAweDAwLCAweDM0LCAweDQ4LCAweDMwLCAweDA4LCAweDQwLCAweDIwLCAweDAxLCAweDBCLCAweDAwLCAweDNDLAorMHg0MywgMHg3MCwgMHgwQywgMHhDMCwgMHgwMSwgMHgwNCwgMHg4NywgMHg1MCwgMHgwQSwgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4NDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4MjksCisweDQwLCAweEZGLCAweDA4LCAweEZDLCAweDEyLCAweEYwLCAweDBCLCAweEMwLCAweDdELCAweDA4LCAweEJGLCAweDAwLCAweEZDLAorMHgwMCwgMHhEMCwgMHgwRSwgMHg1MiwgMHgyQiwgMHgwMCwgMHgzNywgMHgwMCwgMHhGQywgMHgwQiwgMHhGMCwgMHgwRiwgMHhFMCwKKzB4M0UsIDB4MTAsIDB4OUIsIDB4MDAsIDB4RkMsIDB4MjIsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDc3LCAweDAwLCAweDkzLCAweDAwLCAweDdDLAorMHgyMywgMHgzMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHg4MCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MDYsIDB4MTAsIDB4OTMsIDB4ODAsIDB4M0MsIDB4MDgsIDB4MzQsIDB4NEQsIDB4RTEsIDB4MDcsIDB4MDgsIDB4OUYsIDB4MDEsCisweDRDLCAweDAyLCAweEYwLCAweDBELCAweEQwLCAweDU0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgzOSwgMHgwMCwgMHhBMSwgMHgwNCwgMHhCNCwgMHgxMywgMHgxMCwgMHgwQSwgMHg0MCwKKzB4QkIsIDB4MjgsIDB4RUMsIDB4MjAsIDB4QjQsIDB4ODIsIDB4RDAsIDB4NkUsIDB4NDgsIDB4MDgsIDB4MDAsIDB4QTEsIDB4MDAsCisweEI0LCAweDAyLCAweDUwLCAweDBFLCAweDRBLCAweDNCLCAweDAwLCAweEJELCAweDQwLCAweEJDLCAweDAyLCAweEQwLCAweDRFLAorMHg0MCwgMHg0OCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwKKzB4RUQsIDB4MDAsIDB4RTksIDB4MDksIDB4MzQsIDB4MEYsIDB4MTAsIDB4MUEsIDB4NDAsIDB4N0IsIDB4MDEsIDB4QUQsIDB4MDEsCisweEI0LCAweDA0LCAweEQwLCAweDE4LCAweDQwLCAweDQ4LCAweDAwLCAweEExLCAweDAxLCAweEI0LCAweDA3LCAweDkwLCAweDFFLAorMHg0MCwgMHg2QiwgMHgxMCwgMHhFRCwgMHgwMSwgMHhBNCwgMHgwNiwgMHhEMCwgMHg5RSwgMHg1MCwgMHgwQywgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4RTMsIDB4MDAsIDB4QzksIDB4ODgsCisweDM0LCAweDA3LCAweDEwLCAweDI4LCAweDQxLCAweDMzLCAweDAwLCAweDhELCAweDIzLCAweDM0LCAweDA3LCAweEQwLCAweDBELAorMHg0MCwgMHgxNCwgMHgwMiwgMHhDMSwgMHgwMSwgMHgzNCwgMHhDQiwgMHhEMCwgMHgwQywgMHg0MCwgMHg3MywgMHgwNCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NTAsIDB4NDgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweERELCAweDIwLCAweDVCLCAweDIxLCAweDdDLCAweDA1LCAweDM0LCAweDA3LAorMHhDMCwgMHgxNywgMHgwMCwgMHg3RiwgMHgwMywgMHhGQywgMHgwMSwgMHhGMSwgMHgwNywgMHhDMCwgMHg1QywgMHg0MCwgMHg3MywKKzB4MDUsIDB4QkMsIDB4MUQsIDB4QjAsIDB4MDUsIDB4QzQsIDB4REYsIDB4MjEsIDB4NUYsIDB4MDAsIDB4RUMsIDB4MDEsIDB4RjAsCisweDA1LCAweEMwLCAweDVDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgwMCwgMHg4NywgMHg0MSwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwKKzB4MDgsIDB4NkMsIDB4MzAsIDB4RjAsIDB4MzEsIDB4RDAsIDB4NDUsIDB4MDAsIDB4MUYsIDB4MDEsIDB4N0MsIDB4MDAsIDB4NzAsCisweDIxLCAweEMwLCAweDg3LCAweDEwLCAweDFGLCAweDAwLCAweDdFLCAweDAwLCAweEYwLCAweDIxLCAweEM4LCAweDRCLCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg4RiwKKzB4ODAsIDB4NEMsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MTAsIDB4NEMsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDY2LCAweDAxLCAweDlCLCAweDAxLCAweDRDLCAweDAyLCAweEIwLCAweDE5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwNCwgMHg3QywgMHg4MiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4MDEsIDB4QkQsIDB4MDAsIDB4ODUsIDB4MDIsIDB4MTAsCisweDA4LCAweEMwLCAweDJDLCAweDAwLCAweDlELCAweDAwLCAweDU0LCAweDBBLCAweEQyLCAweDI5LCAweDQwLCAweEU0LCAweDIwLAorMHg4MSwgMHg0RiwgMHg1NCwgMHgwMiwgMHhCMCwgMHhEOSwgMHg0NiwgMHhBNywgMHgxRSwgMHg5RCwgMHgwMCwgMHgzNCwgMHgwMiwKKzB4MTAsIDB4NkIsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweEEwLCAweDI0LCAweDgwLCAweDlELCAweDAwLCAweDQ0LCAweDYyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLAorMHg4RCwgMHgwMCwgMHg0MCwgMHgyQSwgMHhEMCwgMHgxOSwgMHg2MCwgMHgyNiwgMHgwMCwgMHhEMSwgMHgyMCwgMHg0NCwgMHgyQSwKKzB4ODAsIDB4MDksIDB4MjAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjAsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDEwLAorMHg4RCwgMHgwMiwgMHgwNCwgMHgwMiwgMHgxMCwgMHgyOSwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMiwgMHgxNCwgMHg1MiwKKzB4RDAsIDB4NDgsIDB4NDEsIDB4MjAsIDB4MEQsIDB4OTEsIDB4MjAsIDB4NTQsIDB4NTIsIDB4OTgsIDB4NDgsIDB4NDksIDB4MjMsCisweDAwLCAweDhELCAweDk1LCAweDc2LCAweDBBLCAweDEwLCAweDA4LCAweDQwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwMSwgMHg0QywgMHg4NCwKKzB4MzAsIDB4MDEsIDB4RDAsIDB4NDQsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NEMsIDB4MTAsIDB4RjAsIDB4NDUsIDB4RDAsIDB4MTIsCisweDAxLCAweDEzLCAweDAwLCAweDRDLCAweDkwLCAweEIwLCAweDQxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDI0LCAweDdDLAorMHgwMCwgMHgzNCwgMHgxMCwgMHhEMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTksIDB4QjgsIDB4M0IsIDB4MTAsIDB4QkYsIDB4MDMsIDB4RkMsIDB4MEEsIDB4QzAsIDB4MUYsIDB4QzAsIDB4QTUsCisweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDAyLCAweEYwLCAweDRCLCAweEMzLCAweDJGLCAweDQ1LCAweEJGLCAweDAwLCAweEZDLAorMHg1MiwgMHg4MCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgxNCwgMHhGQywgMHgwNiwgMHhGMCwgMHg2OSwgMHhDMSwKKzB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsCisweDAwLCAweDlGLCAweDA3LCAweENDLCAweDg2LCAweDM0LCAweDI5LCAweEMwLCAweDZDLCAweDA0LCAweDhGLCAweDAwLCAweEZDLAorMHgwNiwgMHhGMCwgMHg1RiwgMHhDMCwgMHg2QywgMHgwNSwgMHhCQiwgMHg0MCwgMHhDQywgMHgwNiwgMHgzMCwgMHgxQiwgMHhDMiwKKzB4MkMsIDB4MDgsIDB4RjMsIDB4MDUsIDB4NEMsIDB4MEEsIDB4RjAsIDB4N0IsIDB4QzAsIDB4NjQsIDB4MDAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAwLCAweDFELCAweDAxLCAweDQ0LAorMHg4MCwgMHgxMCwgMHgxMSwgMHg1MCwgMHg4NCwgMHgwMCwgMHgxRCwgMHgyMSwgMHg3NCwgMHgyMCwgMHhEMCwgMHg1MCwgMHhDMSwKKzB4NDIsIDB4MDEsIDB4MTEsIDB4MDAsIDB4NDQsIDB4NkQsIDB4NTAsIDB4MDEsIDB4NTAsIDB4MDQsIDB4MDAsIDB4MDEsIDB4NTUsCisweDQ0LCAweDA1LCAweEQwLCAweDYxLCAweDQwLCAweDcwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMiwgMHgwNSwgMHgwQSwgMHgxMCwgMHgwOCwgMHg0MCwKKzB4MjIsIDB4MDAsIDB4OEQsIDB4MTQsIDB4MzQsIDB4MDIsIDB4RDAsIDB4QzgsIDB4NDAsIDB4MjAsIDB4MDUsIDB4ODUsIDB4MDAsCisweDA1LCAweDkyLCAweDU4LCAweDg4LCAweDQwLCAweDYwLCAweDQwLCAweDgxLCAweDA4LCAweDA0LCAweDgyLCAweEQwLCAweDg4LAorMHg0MCwgMHg0MiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwKKzB4MjUsIDB4ODAsIDB4OEQsIDB4MDEsIDB4NDQsIDB4MTIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4ODAsCisweDc0LCAweDIyLCAweEQwLCAweDA5LCAweDUwLCAweDI2LCAweDIwLCAweDk1LCAweDA4LCAweDA0LCAweDAyLCAweDU4LCAweDA5LAorMHg0MCwgMHgzNCwgMHgwMiwgMHg5MSwgMHgwMCwgMHg0NSwgMHgyMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MiwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4NjcsIDB4MDAsIDB4QkYsIDB4ODAsCisweDRDLCAweDA2LCAweDMwLCAweDFCLCAweEMwLCAweDI2LCAweDAwLCAweEJGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDQ5LAorMHhDMCwgMHg2NCwgMHgwMCwgMHg5NywgMHgwMCwgMHg0QywgMHg4NiwgMHg3MiwgMHgwOSwgMHhDQSwgMHg2NCwgMHgyMCwgMHg5MywKKzB4MjEsIDB4Q0MsIDB4MEUsIDB4RjAsIDB4MDksIDB4RDAsIDB4MTYsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDI1LCAweDAyLCAweDlGLCAweDAwLCAweDdDLCAweDQyLCAweEYwLCAweDQ5LAorMHhDMCwgMHgyNSwgMHgwNCwgMHg5RiwgMHgwMywgMHg3QywgMHgwNiwgMHhGMCwgMHg1OCwgMHhEMCwgMHgyNywgMHgwMiwgMHg5MywKKzB4MjAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NjcsIDB4MDAsIDB4OEYsIDB4MDksIDB4N0MsIDB4MDIsIDB4RDAsCisweDA5LCAweEMwLCAweDUxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHgwOCwgMHgwNSwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxMywKKzB4MDIsIDB4NEQsIDB4MDAsIDB4MzIsIDB4MjEsIDB4RjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NDQsIDB4NEMsIDB4MjAsIDB4MzQsCisweDQxLCAweEMwLCAweDA0LCAweDBBLCAweDEzLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDgxLCAweEM2LCAweDUwLCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHg1QywgMHgwMCwgMHg1MSwKKzB4MDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MUYsIDB4ODAsIDB4NTEsIDB4MDAsIDB4QzQsIDB4MDksIDB4NTAsCisweDI3LCAweDUwLCAweDFELCAweDAwLCAweDYxLCAweEQyLCAweEM0LCAweDA1LCAweDIwLCAweDA3LCAweDQwLCAweDE4LCAweDAwLAorMHg3NSwgMHgwOCwgMHg2QywgMHgwMSwgMHhEMCwgMHgxNywgMHhEMCwgMHg1MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4NjIsIDB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsCisweDBDLCAweDQwLCAweDIzLCAweDA4LCAweEMxLCAweDAwLCAweDA0LCAweDRBLCAweDEwLCAweDNDLCAweDQ5LCAweDMwLCAweDAwLAorMHhDMCwgMHgwMSwgMHgwNSwgMHgxNywgMHgxOSwgMHgyOCwgMHg0MCwgMHgzMCwgMHg4NCwgMHhDMSwgMHgwMSwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MTksIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweDgwLCAweEZDLCAweDAwLCAweEU5LCAweDA0LCAweEI0LCAweDQyLCAweEQwLCAweDRFLCAweDQwLCAweEZCLCAweDAwLAorMHhGNSwgMHgyNSwgMHg4NCwgMHg0NiwgMHg1MCwgMHg2RSwgMHg2OCwgMHg2OSwgMHgyMSwgMHgyMSwgMHgyMCwgMHg4NCwgMHgwMSwKKzB4MTgsIDB4MDYsIDB4NDEsIDB4MzgsIDB4MDAsIDB4RTUsIDB4MTAsIDB4QTYsIDB4MTMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MTIsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweDY4LCAweDAwLAorMHhFQiwgMHgwNywgMHhCQywgMHgwNiwgMHhGMCwgMHgzRSwgMHhDMCwgMHg2QiwgMHgwMCwgMHhFMSwgMHgwMywgMHg4QywgMHgwNiwKKzB4MzIsIDB4NzIsIDB4NDAsIDB4MjgsIDB4NDEsIDB4MjMsIDB4MDEsIDB4ODQsIDB4MDcsIDB4MzIsIDB4MTAsIDB4QzAsIDB4NzgsCisweDAwLCAweEUzLCAweDAxLCAweDhDLCAweDBGLCAweEYwLCAweDEwLCAweEMwLCAweDUwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzMSwgMHg0MCwgMHhENywgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4REIsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDEsIDB4RDgsIDB4MjcsCisweDAyLCAweDBGLCAweDIwLCAweDNDLCAweDAwLCAweEYwLCAweDAxLCAweEQyLCAweDMzLCAweDEwLCAweDVGLCAweDEyLCAweDdDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTIsIDB4NkYsIDB4MDAsIDB4RkYsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUUsIDB4QzAsIDB4NkMsCisweDAwLCAweEVGLCAweDAxLCAweENDLCAweDA3LCAweDMyLCAweDFGLCAweEMwLCAweDc4LCAweDEwLCAweDIzLCAweDAxLCAweDhDLAorMHgwNSwgMHgzMCwgMHgxMywgMHhDMCwgMHg3RiwgMHgwOCwgMHg3RiwgMHgwMSwgMHhCQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwKKzB4MEIsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MjksCisweDAwLCAweEVELCAweDAwLCAweDg0LCAweDAzLCAweEQyLCAweDBFLCAweDQwLCAweEE4LCAweDAwLCAweEVELCAweDA4LCAweDg0LAorMHgwMywgMHhCMCwgMHgyRiwgMHg0MCwgMHgyOCwgMHgwMSwgMHgyMSwgMHg4MCwgMHg5NCwgMHgwMCwgMHg1MiwgMHgwMiwgMHg0MCwKKzB4M0IsIDB4MEEsIDB4NkQsIDB4MDQsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDAwLCAweEVELCAweDAxLCAweDg0LAorMHgwMywgMHhEMCwgMHgxRiwgMHg0MCwgMHgyOCwgMHgwMCwgMHhGRCwgMHgwMSwgMHg4NCwgMHgyMiwgMHgxMCwgMHg4RSwgMHg0MCwKKzB4MkMsIDB4MTAsIDB4MzksIDB4MDgsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4MkQsIDB4MDAsCisweEY0LCAweDA3LCAweDEwLCAweDA2LCAweDQwLCAweDYzLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwgMHgyMywgMHgwMSwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwNywgMHhEMCwgMHgwQywgMHg0MSwKKzB4MjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDYsIDB4NDUsIDB4OTAsIDB4MUMsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDksIDB4MDEsCisweDE2LCAweDE5LCAweDUwLCAweDkwLCAweDQwLCAweEIzLCAweDAwLCAweDVELCAweDAwLCAweDM0LCAweDZGLCAweDEwLCAweDBDLAorMHg0MCwgMHgxQiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwKKzB4QTUsIDB4MDAsIDB4REYsIDB4MDQsIDB4NEMsIDB4MTIsIDB4RjAsIDB4MEQsIDB4RDAsIDB4MjQsIDB4MDAsIDB4REYsIDB4MDAsCisweDRELCAweDEyLCAweDMwLCAweDFCLCAweEMwLCAweDNDLCAweDQxLCAweDFCLCAweDA1LCAweDRDLCAweDAxLCAweDM0LCAweDAxLAorMHhDMCwgMHg0NywgMHgxMiwgMHg5RiwgMHgwMCwgMHg3QywgMHgwRiwgMHgzNiwgMHgwMSwgMHhDOCwgMHg1NywgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4QjcsIDB4MDAsIDB4REYsIDB4NDAsCisweDdDLCAweDAyLCAweEYwLCAweDhELCAweEMwLCAweDMzLCAweDEwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDgwLAorMHhDMCwgMHhBNywgMHgwMCwgMHgxNywgMHg0MCwgMHg3QywgMHgwOCwgMHhGMSwgMHgwMCwgMHhDMCwgMHhENywgMHgwMCwgMHgxRiwKKzB4NDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4Q0MsIDB4MjcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDZGLCAweDAwLCAweEVGLCAweDAwLCAweDhDLCAweDBFLCAweDMwLCAweDBGLAorMHhDMCwgMHgyQywgMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwgMHgzMywgMHhDNCwgMHgwQywgMHgwMCwgMHgzMywKKzB4MDAsIDB4QkMsIDB4MDksIDB4MzAsIDB4MDMsIDB4QzAsIDB4MUMsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsCisweDBCLCAweEQwLCAweDA0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLAorMHgyMCwgMHhENiwgMHgxMCwgMHhERCwgMHg0MCwgMHg0NCwgMHg0QSwgMHgxMCwgMHgwRCwgMHg0MCwgMHhGNSwgMHg1MCwgMHhEMSwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MzEsIDB4NDIsIDB4MDEsIDB4MDgsIDB4MTEsIDB4MjMsIDB4NzQsIDB4MEQsIDB4MTAsCisweDUxLCAweEMwLCAweEI2LCAweDAwLCAweDFELCAweDYxLCAweDQ0LCAweDAzLCAweDExLCAweDJELCAweDQwLCAweDA0LCAweDAyLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHhBNCwgMHgwMSwgMHhERCwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjQsIDB4MDIsIDB4QzEsIDB4MjAsIDB4NDQsIDB4MDMsIDB4RDAsCisweDBELCAweDQwLCAweEI0LCAweDkwLCAweDE5LCAweDUxLCAweDc0LCAweDA5LCAweDEwLCAweDExLCAweDAwLCAweDE0LCAweDAyLAorMHgxRCwgMHgwMywgMHgwNSwgMHg4MywgMHgxMCwgMHgyNCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTQsCisweDBDLCAweDQwLCAweDExLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDA0LCAweDQwLCAweDI1LCAweDAwLAorMHgwMSwgMHgwMCwgMHgzNCwgMHgwMSwgMHgxNCwgMHgwMCwgMHg2MCwgMHgzMiwgMHgwMCwgMHgxRCwgMHgwMCwgMHgwNCwgMHgwMywKKzB4MTAsIDB4MEMsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEIwLCAweDI2LCAweDAwLCAweEVGLCAweDAwLCAweDRELCAweDAxLCAweDMwLCAweDBGLCAweEMwLCAweDI0LCAweDAwLAorMHhGMywgMHgwMCwgMHg0NSwgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMSwKKzB4MzAsIDB4MDEsIDB4QzAsIDB4MTQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzQsIDB4MEQsIDB4QzgsIDB4MDQsCisweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDFGLCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHg4MSwgMHhGMCwgMHgwRiwgMHhDMCwgMHgxRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMSwKKzB4RTIsIDB4MDcsIDB4OTgsIDB4MEYsIDB4NDAsIDB4M0YsIDB4NDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsCisweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhGQiwgMHgxMCwgMHg5QywgMHgwNywKKzB4RjAsIDB4MUYsIDB4QzAsIDB4NEYsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RkMsIDB4MDUsIDB4RjAsIDB4MTcsIDB4QzgsIDB4MkUsCisweDEwLCAweEJGLCAweDA0LCAweEZDLCAweDAzLCAweDMwLCAweDFGLCAweEMwLCAweDdGLCAweDA4LCAweEI2LCAweDAwLCAweEZDLAorMHgyNywgMHg3MCwgMHgwMiwgMHhDMCwgMHgwRSwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDgsIDB4NzcsIDB4MDAsIDB4RkQsIDB4MDMsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MUQsIDB4NDAsIDB4NDcsCisweDAwLCAweERELCAweDAxLCAweDc0LCAweDAwLCAweDEwLCAweDFELCAweDQwLCAweEU0LCAweDAyLCAweDFELCAweDA0LCAweEY0LAorMHg1QiwgMHgxMCwgMHgwMSwgMHg0MCwgMHg0NywgMHgwOCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwMywgMHhEMCwgMHgxOSwgMHg0MCwKKzB4MEMsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsCisweDAwLCAweENELCAweDAwLCAweDE0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDAzLCAweDAwLCAweDhELCAweDQwLCAweDc0LAorMHg1MSwgMHg5MCwgMHgwNSwgMHg0OCwgMHgwMiwgMHgwMCwgMHgwRCwgMHgxMiwgMHgzNCwgMHgxQiwgMHgxMCwgMHg0QywgMHg0OSwKKzB4MzMsIDB4MDAsIDB4MEQsIDB4MDIsIDB4MzQsIDB4MTMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4NEUsIDB4ODAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDAwLCAweERELCAweDIwLCAweDQwLAorMHgwNywgMHgxMCwgMHgwRCwgMHg0MCwgMHg2NywgMHgwMCwgMHhERCwgMHgyMywgMHg3NCwgMHg4MSwgMHgxNCwgMHgxRCwgMHg0MSwKKzB4NDQsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDMsIDB4MTQsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDgsIDB4OUQsIDB4NTEsCisweDc0LCAweDAzLCAweEQwLCAweDE5LCAweDQxLCAweDBDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHg4OCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1NCwgMHgxRiwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4NDcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4N0MsIDB4MTksIDB4RjAsIDB4MTQsIDB4QzAsIDB4QzYsIDB4MDAsIDB4OUYsIDB4MDcsCisweDc0LCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDE3LCAweDAxLCAweDdDLCAweDAzLCAweDc5LCAweDM5LAorMHhDMCwgMHgyMiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwKKzB4M0MsIDB4MDAsIDB4RUYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4NDAsCisweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDI3LCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDAzLAorMHhDNCwgMHgwRiwgMHgzMCwgMHgxRiwgMHgyMCwgMHhGRSwgMHhBNywgMHhGMCwgMHgwQiwgMHg0MCwgMHgxRiwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsCisweDdDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAyLCAweDVDLCAweDQ5LCAweEIwLCAweDI1LAorMHhDMCwgMHgwNiwgMHgwMCwgMHg5QiwgMHgwMCwgMHg0RSwgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHgxNywKKzB4MDIsIDB4NEMsIDB4MTMsIDB4RjIsIDB4MjksIDB4QzUsIDB4MjksIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDM0LCAweDAwLCAweEZELCAweDAwLCAweDM0LCAweDA3LCAweDEwLCAweDBELAorMHhDMCwgMHgwNywgMHgwMCwgMHhERCwgMHgwNSwgMHgwNCwgMHgxRCwgMHgxMCwgMHgwRCwgMHg0MCwgMHg2NCwgMHgwMCwgMHgxMSwKKzB4MDAsIDB4RUMsIDB4NjMsIDB4RDAsIDB4NzEsIDB4NDAsIDB4ODQsIDB4MEIsIDB4MTEsIDB4MDEsIDB4NDQsIDB4NDMsIDB4RDAsCisweDE4LCAweEMwLCAweDRFLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgzQiwgMHgxMCwgMHgwQywgMHg0MCwgMHgwMywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MTQsIDB4MEIsIDB4OTQsIDB4MDAsIDB4NDIsIDB4NjIsIDB4MDAsIDB4ODksIDB4ODAsIDB4NTQsIDB4MDcsIDB4RDAsCisweDRDLCAweDQwLCAweEYxLCAweDEwLCAweDg1LCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweEIwLCAweDQwLCAweDBELCAweDAwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg3OCwgMHg4MCwgMHhFRCwKKzB4NDEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NDksIDB4MzAsIDB4RUQsIDB4QzksIDB4OTQsIDB4MDYsIDB4MTAsCisweDE3LCAweDAwLCAweDc4LCAweDAwLCAweEYwLCAweDQ5LCAweEI0LCAweDA3LCAweEQwLCAweDEzLCAweDQwLCAweDQ4LCAweDAwLAorMHhFMSwgMHgxMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxNiwgMHg0MCwgMHgzRSwgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDEsIDB4MzAsCisweDhDLCAweDQwLCAweDAzLCAweDAwLCAweENGLCAweDAwLCAweDVDLCAweDMzLCAweEIwLCAweDAwLCAweEMwLCAweDMyLCAweDA0LAorMHg1QiwgMHg4MCwgMHgxNCwgMHgwMywgMHhGMiwgMHgwQywgMHhEMCwgMHgzMCwgMHgwMywgMHg0NiwgMHgwOCwgMHgwRCwgMHgwMywKKzB4RjAsIDB4MDAsIDB4QzAsIDB4NDksIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEIwLCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDBELCAweEMyLCAweDM3LCAweDAwLAorMHhDRiwgMHgwMCwgMHg2QywgMHhBMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgyMCwgMHg2QywgMHg0MywKKzB4RjAsIDB4ODAsIDB4QzAsIDB4MDMsIDB4MEEsIDB4REYsIDB4MDgsIDB4N0MsIDB4MjMsIDB4RjAsIDB4OEQsIDB4QzAsIDB4MDksCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDM3LCAweDAwLAorMHhERiwgMHgxRSwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDNCwgMHgwNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMSwKKzB4RjAsIDB4MTUsIDB4QzAsIDB4MTQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4NEYsIDB4NzEsIDB4MEQsIDB4QzgsIDB4MzQsCisweDEwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA1LCAweEM0LCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywKKzB4MTAsIDB4MEUsIDB4NDgsIDB4MEIsIDB4MTAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsCisweDA4LCAweEZELCAweDgwLCAweDA0LCAweDAzLCAweDEyLCAweDAyLCAweDQwLCAweDA4LCAweDA0LCAweEVELCAweDAwLCAweEI0LAorMHgwMywgMHhEMCwgMHgwNiwgMHg2MCwgMHg0QywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4RjQsIDB4MDcsIDB4MTQsIDB4MUUsIDB4NDAsIDB4NEIsCisweDAwLCAweEVELCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDE3LCAweDUwLCAweDU4LCAweDAwLCAweEVELCAweDAxLCAweDg1LAorMHgwNywgMHg1MCwgMHgxRiwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHg4NywgMHhEMCwgMHgxQywgMHg0MCwKKzB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDRGLCAweDkwLCAweDBDLCAweDQ4LCAweEMzLCAweDgzLCAweENELCAweDEyLCAweDA0LAorMHg0QiwgMHhEMCwgMHg3QywgMHg0MCwgMHhCMCwgMHgwQywgMHhDRCwgMHgwMiwgMHgwNCwgMHgwMywgMHgxMCwgMHgwMSwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4Q0QsIDB4ODgsIDB4MzAsIDB4MjIsIDB4RDAsIDB4MUMsIDB4NDAsIDB4NTgsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE1LCAweDAwLCAweDVGLCAweDAwLCAweEJDLAorMHg0OSwgMHgzMCwgMHgwNSwgMHhDMiwgMHg5RiwgMHgwMCwgMHg2RiwgMHgwMiwgMHg5QywgMHgwOSwgMHhGMCwgMHgyNywgMHhDOCwKKzB4MUMsIDB4MDAsIDB4N0YsIDB4MDAsIDB4NEMsIDB4MDEsIDB4NzAsIDB4MDUsIDB4RDAsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MjEsCisweDdDLCAweDA1LCAweEQwLCAweDI3LCAweDQwLCAweDVDLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4ODEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MTgsCisweDdDLCAweDAwLCAweEYwLCAweDIzLCAweEMwLCAweDhGLCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweEExLAorMHhEMSwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDgsCisweDZDLCAweDI2LCAweDcxLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlFLCAweDAwLCAweDRDLCAweDE2LCAweEYwLCAweDA5LAorMHhDMCwgMHgyNSwgMHgyMCwgMHg5MywgMHgzOCwgMHg3OCwgMHgwRSwgMHhGMiwgMHgxOCwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDAsCisweDc0LCAweDAyLCAweDExLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDQwLCAweDQ0LCAweDA2LCAweDExLCAweDA5LAorMHg0NCwgMHgyNywgMHgwMCwgMHg5RCwgMHg4MCwgMHg0NCwgMHg4RSwgMHhEMSwgMHgyOSwgMHg0MCwgMHgyMCwgMHgwNCwgMHg5MSwKKzB4MDEsIDB4NzQsIDB4MDYsIDB4RDAsIDB4ODksIDB4NDEsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDEyLCAweDFDLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg2NCwgMHg0MiwgMHg0MCwgMHgwOSwgMHg0MiwgMHgzNywgMHg4MCwgMHg4RCwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDEsIDB4MkQsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4NDIsIDB4RDAsCisweDA5LCAweDQwLCAweDcwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwMCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgxNCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDUsIDB4OEQsIDB4MzQsIDB4MDQsIDB4NTIsIDB4RDAsCisweDBBLCAweDQwLCAweDJDLCAweDIwLCAweDgxLCAweDE0LCAweDM0LCAweDAyLCAweEQwLCAweDQ4LCAweDUxLCAweDUwLCAweEEwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHgzMCwgMHgwNiwgMHgwMCwgMHgxRiwKKzB4MDQsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzgsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NkMsIDB4MDAsIDB4NzAsCisweDAxLCAweEMwLCAweDA3LCAweDIxLCAweDFGLCAweDA0LCAweDRDLCAweDExLCAweEYwLCAweDAxLCAweEMwLCAweDBELCAweDAwLAorMHgxMywgMHhDNCwgMHg3QywgMHgwMCwgMHhGMCwgMHg0MSwgMHhDMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsCisweDA5LCAweEMwLCAweDJGLCAweDAwLCAweEVGLCAweDgwLCAweEZDLCAweDUyLCAweEYwLCAweDBBLCAweEMwLCAweDJGLCAweDAwLAorMHhCRiwgMHgxNCwgMHg3RCwgMHg1MiwgMHhGMCwgMHg0OCwgMHhDNSwgMHgyNywgMHgwMCwgMHhCRiwgMHg0MCwgMHhGQywgMHg1MiwKKzB4RjAsIDB4MEIsIDB4QzAsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweEEwLCAweDI3LCAweDAwLCAweDlGLCAweDAxLCAweEZDLCAweDAyLCAweEIwLCAweDA5LCAweEMwLCAweDI3LCAweDYwLAorMHhCMywgMHgwMCwgMHg5QywgMHgwQSwgMHg3MCwgMHgwOSwgMHhDMCwgMHgzRCwgMHgwMCwgMHg5MywgMHgwMiwgMHhDQywgMHhDNiwKKzB4RjAsIDB4MkIsIDB4QzIsIDB4MkYsIDB4MDAsIDB4QkYsIDB4ODAsIDB4Q0MsIDB4MEEsIDB4RDAsIDB4MEIsIDB4QzAsIDB4NjcsCisweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAwLAorMHgxRCwgMHgwQSwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwNCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MTAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsCisweDAwLCAweDFELCAweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDczLCAweDYwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHg3NCwgMHgwMiwKKzB4OTAsIDB4MDgsIDB4NDAsIDB4MjcsIDB4MDAsIDB4ODEsIDB4MDAsIDB4NTQsIDB4MDIsIDB4NTIsIDB4MDksIDB4NDAsIDB4QTEsCisweDAwLCAweDgxLCAweDIyLCAweDA0LCAweDQyLCAweEQyLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDAyLCAweDA0LAorMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDFBLCAweDEyLCAweDI5LCAweDQyLCAweDI0LCAweDQwLCAweDkxLCAweDgwLCAweDQ1LAorMHg4MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwOCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgyOSwgMHg0MCwKKzB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEIwLCAweDA5LCAweEM0LCAweEUzLCAweDA0LCAweDkzLCAweDAyLCAweDVDLAorMHgwRSwgMHg3MCwgMHgwOCwgMHhDMCwgMHhFNSwgMHgwNCwgMHg5MiwgMHgxQiwgMHg0OCwgMHgwMiwgMHhFMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MTksIDB4NEQsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MTcsIDB4MjgsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDNCwgMHg2NywgMHgwMiwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDEsIDB4OEYsIDB4MjEsIDB4N0MsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MTAsIDB4OEYsIDB4MDEsCisweDdDLCAweDEyLCAweEYwLCAweDA5LCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg2QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4NDAsIDB4MzEsIDB4MjEsIDB4QzgsIDB4ODcsIDB4MDAsIDB4MUUsIDB4MDIsCisweDdDLCAweDAwLCAweDMyLCAweDgxLCAweDgxLCAweDA0LCAweDA0LCAweDFGLCAweDgwLCAweDRDLCAweDAwLCAweDM0LCAweDAxLAorMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwKKzB4MTQsIDB4MDAsIDB4NUQsIDB4MDAsIDB4ODQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MTAsIDB4NkQsIDB4ODAsCisweEI0LCAweDA1LCAweDEwLCAweDA1LCAweDQwLCAweDEzLCAweDAwLCAweDVELCAweDAwLCAweEY0LCAweDAxLCAweDEwLCAweDI3LAorMHg0MCwgMHhEQywgMHgwMCwgMHg1RCwgMHgwNSwgMHhDNCwgMHg2MSwgMHgxMiwgMHgwNywgMHg0MCwgMHg1MywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDI0LCAweDA1LCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDhELCAweDBDLCAweDM0LCAweDBGLCAweDE0LCAweDBDLAorMHg0MCwgMHgzMywgMHgwMiwgMHhDRCwgMHgwMCwgMHgzNCwgMHgxRiwgMHg1MCwgMHgyQywgMHg0NCwgMHhEMCwgMHgyMCwgMHg4RCwKKzB4MDAsIDB4MDQsIDB4MEYsIDB4MTAsIDB4MkMsIDB4NDEsIDB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDM4LCAweDAwLCAweEVELCAweDAxLCAweDg0LCAweDBCLCAweEQwLCAweDBFLAorMHg0MCwgMHgzQiwgMHg4MCwgMHhBRCwgMHgwMCwgMHhGNCwgMHg0MywgMHgxMCwgMHgwRSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhFRCwKKzB4NDgsIDB4QjQsIDB4NDcsIDB4NTAsIDB4MUUsIDB4NTAsIDB4MzgsIDB4MDQsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDUsIDB4MTAsCisweDJFLCAweDQwLCAweDA3LCAweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHgxMCwgMHg3OCwgMHgwMCwgMHhDRiwgMHgwMSwgMHhBQywgMHgwNSwgMHhGMCwgMHgxRSwgMHhDNCwgMHg3QiwgMHgxMCwgMHhBRiwKKzB4MDEsIDB4QkMsIDB4MDcsIDB4MzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RUYsIDB4OEQsIDB4RkMsIDB4MDcsIDB4NzAsCisweDE3LCAweEMwLCAweDc4LCAweDA4LCAweEVFLCAweDAxLCAweENELCAweDA3LCAweDMwLCAweDFFLCAweEMwLCAweDQ3LCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDQyLCAweDdDLCAweDAzLCAweEI0LCAweDBELCAweEMwLCAweDM3LCAweDAwLAorMHhDRiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDOCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4ODUsIDB4RjAsCisweDFGLCAweEMwLCAweDdGLCAweDAyLCAweDJGLCAweDA5LCAweDhDLCAweDA1LCAweEYwLCAweDlGLCAweEMyLCAweDZELCAweDAyLAorMHhGQiwgMHgwOSwgMHhGQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgyMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywKKzB4MzAsIDB4MUYsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE1LCAweDg4LCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLAorMHgyRCwgMHgxMCwgMHg4NCwgMHgwMSwgMHgxMiwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwNCwgMHhFOSwgMHgwMCwgMHg4NCwgMHgxMSwKKzB4MTAsIDB4MDYsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QTQsIDB4MTEsIDB4MTgsIDB4MEEsIDB4NDAsIDB4NTQsCisweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLAorMHhFRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOSwgMHgyMCwgMHgzRCwgMHgwMCwgMHhDNSwgMHgwMSwKKzB4RDAsIDB4MEYsIDB4MDksIDB4MjksIDB4MDAsIDB4RUQsIDB4NDAsIDB4OTYsIDB4ODMsIDB4MTQsIDB4MDYsIDB4NDAsIDB4M0IsCisweDAyLCAweEVELCAweDAwLCAweEY0LCAweDgzLCAweDEwLCAweDBFLCAweDQxLCAweDIyLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHg0MCwgMHgzNCwgMHgwMywKKzB4RDAsIDB4MEMsIDB4NjQsIDB4QjMsIDB4MDQsIDB4MEQsIDB4MDcsIDB4MDQsIDB4MEMsIDB4OTAsIDB4M0MsIDB4NDAsIDB4NzAsCisweDAwLCAweENELCAweDAzLCAweDA0LCAweDAyLCAweDEwLCAweEExLCAweDQ0LCAweDczLCAweDAwLCAweENELCAweDAyLCAweDY0LAorMHgyNCwgMHgxMCwgMHgxMCwgMHg0MCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTUsIDB4QTgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDcsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NzcsCisweDE0LCAweDlGLCAweDAzLCAweDBDLCAweDRFLCAweEYwLCAweDlELCAweEMwLCAweEY1LCAweDAwLCAweEZGLCAweDEyLCAweDc4LAorMHgwMCwgMHgzMCwgMHgzOSwgMHg0MCwgMHg3MywgMHgwMSwgMHhERCwgMHgxMCwgMHg3QywgMHgwMiwgMHgxNCwgMHgxRCwgMHhDMCwKKzB4NTYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDA4LCAweDlGLCAweDAyLCAweDdDLAorMHgwOCwgMHg3MCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHhEQiwgMHgwNCwgMHg3QywgMHgwQSwgMHhGMCwgMHgwOSwgMHhDNCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MzAsIDB4NkMsIDB4ODIsIDB4RjAsIDB4NkQsIDB4QzAsIDB4QTcsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLCAweDAwLCAweEZGLCAweDgwLCAweEZDLAorMHg4MywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwOCwgMHhCRiwgMHgwMCwgMHhEQywgMHg0MiwgMHg3MCwgMHgwRiwgMHhDMCwKKzB4M0QsIDB4MDQsIDB4REYsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RTAsIDB4MDMsIDB4MDEsIDB4M0MsIDB4MjQsIDB4RjIsIDB4ODAsCisweEZDLCAweDAwLCAweDMwLCAweDA5LCAweEUwLCAweDE3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgxRiwgMHhEMCwgMHgwRCwgMHhDMCwKKzB4MzUsIDB4MDAsIDB4OEQsIDB4NDEsIDB4NDYsIDB4MTYsIDB4MTAsIDB4MEMsIDB4NDYsIDB4MjQsIDB4MjAsIDB4REQsIDB4MDAsCisweDc0LCAweDBFLCAweEQwLCAweDE5LCAweEMxLCAweEY2LCAweDAxLCAweEQxLCAweDAwLCAweDc0LCAweDA0LCAweDMwLCAweDQxLAorMHg0MCwgMHgxNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwKKzB4MzQsIDB4ODAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDcsIDB4RDAsIDB4MEQsIDB4NDgsIDB4MzUsIDB4MTAsIDB4OUQsIDB4MDMsCisweDU0LCAweDA2LCAweDUwLCAweDBELCAweDQwLCAweDI1LCAweDAwLCAweERELCAweDAwLCAweDU0LCAweDBDLCAweEQwLCAweDE5LAorMHg2MCwgMHg3NSwgMHgxMCwgMHhENSwgMHgwNCwgMHg3NCwgMHgwNiwgMHgxMCwgMHg4NSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4ODAsIDB4Q0QsIDB4MDAsCisweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQyLCAweDMxLCAweDAwLCAweERELCAweDIwLCAweDQ0LCAweDAwLCAweDE4LCAweDBELAorMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwOSwgMHg0OCwgMHgyNywgMHg4MCwgMHhDNSwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4OTMsIDB4MDAsIDB4NDAsIDB4NDMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEIwLCAweDM2LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELAorMHhDMCwgMHgzNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg1NCwgMHgwMiwgMHg3MCwgMHgwRCwgMHhDMCwgMHgyNSwgMHgyMCwgMHhGRCwKKzB4MDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzUsIDB4ODAsIDB4RDcsIDB4ODAsIDB4N0MsIDB4MDIsIDB4MjQsCisweDAxLCAweEMwLCAweDA3LCAweEM0LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHhCOCwgMHgzRiwgMHgxMCwgMHhGRiwgMHgyMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDNCwgMHgzRCwgMHgwMCwgMHhCRiwKKzB4ODAsIDB4RjQsIDB4MDIsIDB4RjIsIDB4MEUsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsCisweDBCLCAweEMwLCAweDJFLCAweDQwLCAweEZCLCAweDAwLCAweEJDLCAweDAyLCAweDcwLCAweDAzLCAweEM4LCAweDE3LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg1RiwgMHgwMCwgMHg3RiwKKzB4NDEsIDB4RkMsIDB4ODUsIDB4RjAsIDB4MUIsIDB4QzAsIDB4NUMsIDB4MDIsIDB4QUYsIDB4MTQsIDB4Q0MsIDB4MDQsIDB4RjAsCisweEMzLCAweEMwLCAweDBDLCAweDA0LCAweEIzLCAweDEwLCAweENDLCAweDBDLCAweDMwLCAweDhCLCAweEMwLCAweDNGLCAweDAwLAorMHhCMywgMHgxNCwgMHhDQywgMHg1MywgMHgzMCwgMHgwQiwgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4NTcsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDUsIDB4RDEsCisweDE1LCAweDQ0LCAweDE0LCAweDIxLCAweEZELCAweDAzLCAweDQ0LCAweDEwLCAweEQwLCAweEUxLCAweDAwLCAweDg0LCAweDAxLAorMHhBQiwgMHgwNiwgMHg0NCwgMHgwMCwgMHgxMCwgMHhFOSwgMHg0MCwgMHg3NywgMHgwMCwgMHhCNSwgMHgwNiwgMHhENCwgMHgwRiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MDQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDExLCAweEEwLCAweDMzLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDIwLCAweDIwLAorMHhDRCwgMHgwMCwgMHgxNiwgMHg0MCwgMHhEMiwgMHgwMSwgMHg1MCwgMHgwNCwgMHg0NCwgMHg4MSwgMHgxMCwgMHgwNSwgMHgxMCwKKzB4MTAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MTAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4NDgsIDB4NDEsIDB4NDQsCisweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDAxLAorMHg5RCwgMHgwNCwgMHg3NCwgMHgwMiwgMHhEMCwgMHg4NSwgMHg0MCwgMHgyNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg1NSwgMHgwNCwKKzB4RDAsIDB4MDEsIDB4NDYsIDB4NjQsIDB4MDAsIDB4OTksIDB4NDgsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MzEsIDB4NDgsIDB4MzcsCisweDAwLCAweEM1LCAweDAwLCAweDU0LCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweDBDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHhBNywgMHgwMSwgMHhERiwgMHgwMSwgMHg3QywgMHgyNywKKzB4RjAsIDB4MEQsIDB4RDAsIDB4NzQsIDB4MTIsIDB4OEYsIDB4MDAsIDB4NUMsIDB4NDQsIDB4RjAsIDB4MjAsIDB4QzEsIDB4QzAsCisweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDE0LCAweDM0LCAweDFELCAweEMwLCAweDM3LCAweDAwLCAweDkzLCAweDgwLCAweDRDLAorMHgwMywgMHhGNCwgMHgzOSwgMHhEMCwgMHgwOCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDcsIDB4ODAsIDB4NkQsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RjgsIDB4MDcsIDB4RjAsIDB4MEYsIDB4QzgsIDB4M0YsCisweDAwLCAweEY4LCAweDEwLCAweEVDLCAweDAwLCAweEYwLCAweDIzLCAweEMwLCAweDBGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLAorMHg0MCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQiwgMHgxMCwgMHg5RiwgMHgwOSwgMHhCOCwgMHg4MywgMHgzMCwgMHgzQiwgMHhDMCwKKzB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MjUsCisweDAwLCAweDlGLCAweDQwLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDgwLCAweDRDLAorMHgwMCwgMHgzMiwgMHgwMSwgMHhEMCwgMHg4QywgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgyNSwgMHhDMCwKKzB4MzQsIDB4MDAsIDB4RDMsIDB4MDQsIDB4NEQsIDB4MDMsIDB4RjAsIDB4MjgsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDI0LCAweDAwLCAweDlDLCAweDAwLCAweDcwLAorMHgwMiwgMHhEMCwgMHgwQywgMHg2MCwgMHg2NywgMHgwMCwgMHhERCwgMHgwMywgMHg0MCwgMHgyQywgMHgxMCwgMHgwMywgMHg0MCwKKzB4NjQsIDB4MDAsIDB4OTEsIDB4MEYsIDB4NkQsIDB4MDgsIDB4OTEsIDB4QjUsIDB4NDAsIDB4QkMsIDB4NDAsIDB4RDUsIDB4MTMsCisweEM0LCAweDAzLCAweEMwLCAweDQ5LCAweDQwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgyMiwgMHgyMCwgMHg0RCwgMHg4MCwgMHgzNCwgMHgwMiwgMHhDMCwgMHgwNCwgMHg0OCwKKzB4NjMsIDB4MDAsIDB4OEQsIDB4MDEsIDB4MjQsIDB4MDQsIDB4MTAsIDB4MDgsIDB4NDIsIDB4NDAsIDB4MDAsIDB4OTEsIDB4MDEsCisweDQ0LCAweDA0LCAweEQxLCAweDE4LCAweDQwLCAweEIwLCAweDA0LCAweEMxLCAweDAyLCAweDA0LCAweDAzLCAweEQwLCAweDA4LAorMHg0MCwgMHgxRiwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwKKzB4NjgsIDB4MDAsIDB4RUQsIDB4MjEsIDB4QjQsIDB4MDYsIDB4RDAsIDB4MTYsIDB4NDAsIDB4NkIsIDB4MDYsIDB4RUQsIDB4MTEsCisweEE1LCAweDQ0LCAweDE0LCAweDk4LCAweDUwLCAweDZDLCAweDA0LCAweEUxLCAweDA5LCAweEE0LCAweDA0LCAweDkwLCAweDFFLAorMHg0MCwgMHg3OCwgMHgwMiwgMHhFNSwgMHgyMSwgMHg4NCwgMHgwNywgMHhEMSwgMHgxNiwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4OEYsIDB4MDAsCisweDNDLCAweDAyLCAweEYwLCAweDA0LCAweDQwLCAweDIzLCAweDBBLCAweENGLCAweDAwLCAweDZDLCAweDAwLCAweDMyLCAweDg4LAorMHhDOCwgMHg4MCwgMHg0MCwgMHhDMywgMHgwOCwgMHgwQywgMHg0MCwgMHhGMiwgMHg4RCwgMHhEMSwgMHgzMCwgMHgwMiwgMHhDMywKKzB4MDAsIDB4MEQsIDB4MDMsIDB4RjAsIDB4MDQsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDNELCAweDAwLCAweEJGLCAweDgwLCAweEYwLCAweDAyLCAweEYwLCAweDA3LAorMHhDMCwgMHgyRiwgMHgwQSwgMHhGRiwgMHgwMiwgMHhEQywgMHgwMCwgMHhGMCwgMHg4QiwgMHhEMCwgMHgzQiwgMHg0MiwgMHhGRiwKKzB4MDgsIDB4RjQsIDB4MDAsIDB4QjAsIDB4OEYsIDB4QzAsIDB4M0IsIDB4MDIsIDB4RkYsIDB4MDAsIDB4RkMsIDB4NDMsIDB4RjAsCisweDg3LCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorMHhBMCwgMHg2NywgMHgwMCwgMHhEMywgMHgyMCwgMHg3QywgMHgwNywgMHgzNCwgMHgwNSwgMHhDMCwgMHg3MCwgMHgwMCwgMHg5MywKKzB4MDYsIDB4NUMsIDB4MDAsIDB4RjAsIDB4ODEsIDB4RDAsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ODYsIDB4NEQsIDB4MDQsIDB4MzAsCisweDBELCAweEMwLCAweDM3LCAweDAwLCAweEQzLCAweDA0LCAweDBELCAweDEzLCAweDMxLCAweDA1LCAweEMwLCAweDU0LCAweDAwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgyOSwgMHgwMCwgMHhFMSwKKzB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MDYsIDB4QzAsIDB4M0EsIDB4MTAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsCisweDQzLCAweDQwLCAweDI5LCAweDAwLCAweEVCLCAweDA4LCAweDg0LCAweDAxLCAweDUxLCAweDBFLCAweDQwLCAweDNCLCAweDAxLAorMHhGMSwgMHgwOCwgMHg5NCwgMHg0MywgMHgxMCwgMHgwRiwgMHhDMCwgMHg0QSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NkQsIDB4MDAsIDB4QTEsIDB4MDEsIDB4RjYsIDB4MDYsIDB4MTAsCisweDE2LCAweDQwLCAweDZDLCAweDEwLCAweEYwLCAweDAxLCAweEI0LCAweDA0LCAweEQwLCAweDNBLCAweDQwLCAweDRDLCAweDAwLAorMHhDMSwgMHgwMSwgMHhDNiwgMHgwNCwgMHgxMCwgMHgzRSwgMHg0MCwgMHg3MywgMHgwMiwgMHhFOSwgMHgwMSwgMHg4NCwgMHgwMywKKzB4MTAsIDB4MUUsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDI4LCAweDYzLCAweDAwLCAweDgxLCAweDA0LCAweDM2LCAweDE2LCAweDEwLCAweDE0LCAweDQ0LCAweDIyLCAweDAyLAorMHhDMSwgMHgwMCwgMHgyNCwgMHgwQiwgMHhEMSwgMHgwRCwgMHg0MSwgMHgzMCwgMHgwOCwgMHhDOSwgMHgwMCwgMHgwNCwgMHgxRiwKKzB4NTAsIDB4MUQsIDB4NDAsIDB4MzMsIDB4MTAsIDB4RDksIDB4MDAsIDB4MTUsIDB4MDMsIDB4MTAsIDB4RUMsIDB4NDAsIDB4NEEsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDFELCAweDAxLAorMHg3MywgMHg4MCwgMHhGQywgMHgwNSwgMHgzMywgMHhFNywgMHhDQywgMHhEQywgMHg0MCwgMHg1MywgMHhDMCwgMHhCQywgMHgxNSwKKzB4RjEsIDB4MjcsIDB4RDAsIDB4MUMsIDB4MDgsIDB4NTMsIDB4MDAsIDB4Q0QsIDB4MDUsIDB4MzIsIDB4MTcsIDB4QzAsIDB4MTcsCisweDQwLCAweDVCLCAweDAwLCAweDRDLCAweDAxLCAweDMwLCAweDM3LCAweEMwLCAweDVDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHg1NCwgMHgxRiwgMHgwMCwgMHg3QywgMHgyMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MjQsIDB4MUYsIDB4MDIsIDB4NUMsIDB4NDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDMsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDIwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDIwLCAweDdDLAorMHg4MCwgMHhGMCwgMHgwMCwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsCisweDAwLCAweDlGLCAweDA1LCAweDRDLCAweDBFLCAweDMwLCAweDA5LCAweEMwLCAweDY0LCAweDIwLCAweDhBLCAweDAxLCAweDZDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHg2MCwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgyMiwgMHhGMCwgMHg4OSwgMHhDMiwKKzB4NDAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsCisweDAwLCAweDlELCAweDAwLCAweDcwLCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI1LCAweDAwLCAweDhDLCAweDAwLCAweDQ0LAorMHgxMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg2NSwgMHgwOCwgMHg5QiwgMHgwMSwgMHg2QywgMHgwMiwgMHhEMCwgMHhBOSwgMHg0MSwKKzB4RTQsIDB4MDEsIDB4OTEsIDB4MDIsIDB4NDUsIDB4MDYsIDB4RDAsIDB4MTksIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDIwLCAweDcwLAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzNCwgMHgwMCwgMHg5QywgMHgxMCwgMHg0NCwgMHgwMiwgMHgxNCwgMHgwOSwgMHg0MCwKKzB4MjQsIDB4MDIsIDB4OUQsIDB4NDgsIDB4NjUsIDB4MTIsIDB4RDIsIDB4MDksIDB4NDAsIDB4MjQsIDB4NDIsIDB4OTEsIDB4MTQsCisweDQ0LCAweDgyLCAweEQwLCAweDBELCAweDQ0LCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhBMCwgMHgxMCwgMHg4RCwgMHgwMiwgMHgzNCwgMHgwQSwgMHhEMCwgMHgyOCwgMHg0MCwKKzB4MjEsIDB4MTAsIDB4OUQsIDB4MTQsIDB4NDYsIDB4MDIsIDB4MTgsIDB4NDgsIDB4NDUsIDB4MjEsIDB4NDUsIDB4Q0QsIDB4MTQsCisweDI0LCAweDAyLCAweEQwLCAweDQ4LCAweDcxLCAweDIwLCAweDg1LCAweDgxLCAweDE0LCAweDA0LCAweDUyLCAweEQwLCAweDQ4LAorMHg0MSwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwKKzB4MDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MTAsIDB4MUYsIDB4MDQsCisweDRDLCAweDAwLCAweDMwLCAweDQxLCAweEM0LCAweDE0LCAweDIxLCAweDFGLCAweDQ0LCAweDZDLCAweDAwLCAweEYxLCAweDQxLAorMHhDMCwgMHgwNCwgMHgwMSwgMHgxMywgMHhDNCwgMHg0QywgMHgxMCwgMHhGMCwgMHg0MSwgMHhEMCwgMHg3NCwgMHhDMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4N0IsIDB4MDAsIDB4RkYsIDB4MDEsCisweEJDLCAweDA2LCAweEYwLCAweDFCLCAweEMwLCAweDJGLCAweDA1LCAweEFFLCAweDAwLCAweEZELCAweDUyLCAweEYxLCAweDRGLAorMHhDMSwgMHgyRiwgMHg0NSwgMHhCQiwgMHgxNCwgMHhCQywgMHg1MiwgMHhGMCwgMHg0QiwgMHhDMSwgMHgyNywgMHg0MCwgMHhCRiwKKzB4MTQsIDB4N0MsIDB4MDIsIDB4RjIsIDB4NEIsIDB4QzEsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEEwLCAweEE3LCAweDAwLCAweDkzLCAweDAyLCAweDRDLCAweDAyLCAweDMwLCAweDI4LAorMHhDMCwgMHhBRiwgMHgwMCwgMHhBRiwgMHgwMSwgMHhEQywgMHgwQSwgMHhGMCwgMHgzOSwgMHhDMCwgMHhFRCwgMHgwNSwgMHhCMywKKzB4MDMsIDB4REMsIDB4MDIsIDB4MzIsIDB4NUIsIDB4QzEsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDEsIDB4Q0MsIDB4MDYsIDB4MzAsCisweDZBLCAweEMwLCAweDYwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLAorMHgwOCwgMHg0NywgMHgwMSwgMHgxQiwgMHgwMSwgMHg2QywgMHgxNCwgMHhCMCwgMHg1MSwgMHg0MCwgMHg0NywgMHgwMCwgMHgxRCwKKzB4MDIsIDB4NDUsIDB4MDQsIDB4RDEsIDB4MTAsIDB4NDAsIDB4QzAsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDUsIDB4MTQsIDB4MTAsCisweDc1LCAweEMwLCAweDA3LCAweDEwLCAweDExLCAweDA1LCAweDU0LCAweDAwLCAweDEwLCAweDYxLCAweDQwLCAweDcwLCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4MSwKKzB4MjAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDgsIDB4OEQsIDB4MDIsIDB4MTQsIDB4MTIsIDB4RDAsCisweDI4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAyLCAweDE0LCAweDQ2LCAweDEwLCAweDA4LCAweDQ5LCAweDIxLCAweDAwLAorMHg4MSwgMHgxMiwgMHgwNCwgMHgwQSwgMHgxMCwgMHgyOCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjEsIDB4MDAsIDB4ODksIDB4MDAsIDB4MjQsIDB4NDIsIDB4OTAsCisweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDA0LCAweDQ0LCAweDEyLCAweEQwLCAweDE5LCAweDQwLCAweEE0LCAweDAwLAorMHg5NSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MCwgMHgwNCwgMHg1NCwgMHgwMiwKKzB4MTAsIDB4MzksIDB4NDAsIDB4NjAsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweEE4LCAweDJGLCAweDAyLCAweEIzLCAweDAwLCAweENDLCAweDBBLCAweDMwLCAweDBCLCAweEMwLCAweEE3LCAweDA0LAorMHg5RiwgMHgwMSwgMHg1QywgMHgwMiwgMHhGMCwgMHgyOSwgMHhDOCwgMHgyNSwgMHg0MCwgMHg5NywgMHgwMCwgMHg1QywgMHgwQSwKKzB4MzQsIDB4MDksIDB4QzgsIDB4MjUsIDB4NDAsIDB4OTMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4MzQsIDB4MjksIDB4RDAsIDB4MTQsCisweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDY1LCAweDAwLAorMHg5RiwgMHgwMywgMHg3QywgMHgwQSwgMHhFMCwgMHgwOSwgMHhDMCwgMHhBNywgMHgwMCwgMHg4RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDgsIDB4QzQsIDB4MjcsIDB4MDEsIDB4OEIsIDB4NDUsIDB4N0MsIDB4MDIsIDB4RjAsIDB4OTgsIDB4RTAsIDB4MjEsCisweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDUzLCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxMywgMHgwMCwgMHg0RCwgMHgwOCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTMsIDB4MTAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RDAsIDB4MDQsCisweDQwLCAweDEzLCAweDAwLCAweDZDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA0LCAweDA0LCAweDAzLCAweDgwLCAweDdDLAorMHgwMCwgMHgzNCwgMHgyMCwgMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4QTAsIDB4MTQsIDB4MTAsIDB4NTEsIDB4MDAsIDB4NDQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NTQsCisweDAxLCAweDc1LCAweDAyLCAweEM0LCAweDA1LCAweEQwLCAweDA1LCAweDUwLCAweEQ4LCAweDQwLCAweDc1LCAweDAwLCAweEM0LAorMHgxMSwgMHgxMCwgMHg0NywgMHg1MCwgMHgxQywgMHgwMCwgMHg3MSwgMHgwMCwgMHg3NCwgMHgwMSwgMHgxMCwgMHgxNSwgMHg0MCwKKzB4NTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsCisweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDIwLCAweDAwLCAweEMxLCAweDBBLCAweDI0LAorMHgyNiwgMHhEMCwgMHgwQywgMHg0NCwgMHhGMCwgMHg4NiwgMHhDNCwgMHgwOSwgMHg2NSwgMHgwNywgMHg1MCwgMHgwQywgMHgwMCwKKzB4RjAsIDB4MDAsIDB4QzUsIDB4MjAsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MUMsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDNDLCAweDAxLCAweEYxLCAweDA0LCAweDg0LAorMHhBMywgMHhEMCwgMHgxRiwgMHg0MCwgMHg3OCwgMHgwMCwgMHgyNSwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwgMHg0RSwgMHg0MCwKKzB4MjgsIDB4MDAsIDB4NjUsIDB4MDAsIDB4ODUsIDB4MTMsIDB4NTAsIDB4MEEsIDB4NDAsIDB4OTAsIDB4MDAsIDB4QTUsIDB4MDAsCisweEIwLCAweDAyLCAweDEwLCAweDBGLCAweDQxLCAweDE0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHg3OCwgMHgwMCwgMHhFMywgMHgwNywgMHg4QywgMHgxNywgMHhGMCwgMHg3RSwgMHhEMCwKKzB4NkMsIDB4MDAsIDB4QTMsIDB4MDEsIDB4QUMsIDB4MDUsIDB4RjAsIDB4M0UsIDB4QzEsIDB4NjgsIDB4MDAsIDB4NzcsIDB4MDEsCisweEVELCAweDBGLCAweDc0LCAweDEzLCAweDg0LCAweDQ4LCAweDAwLCAweEE3LCAweDAxLCAweDNDLCAweDA2LCAweDMwLCAweDFFLAorMHhDMCwgMHg1NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwKKzB4MzEsIDB4NDAsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4M0YsIDB4MDAsIDB4OUYsIDB4MDAsCisweEZELCAweDAwLCAweEYwLCAweDJELCAweEMwLCAweDI3LCAweDAyLCAweDVELCAweDAwLCAweDdDLCAweDAzLCAweDkwLCAweDAxLAorMHhDMCwgMHgwNywgMHg0MCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhEMCwgMHg0MywgMHg2MCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4N0YsIDB4MDQsIDB4RjMsIDB4MDEsCisweENDLCAweDI3LCAweDNDLCAweDFGLCAweEMwLCAweDdCLCAweDAwLCAweDM3LCAweDAxLCAweERDLCAweDA2LCAweDcyLCAweDFGLAorMHhDMCwgMHg2RCwgMHgwMCwgMHhGNywgMHg4MSwgMHhDQywgMHgwNiwgMHgzMSwgMHgxQiwgMHhDMCwgMHg0QywgMHgxMCwgMHhFMywKKzB4MDEsIDB4Q0MsIDB4MDYsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDM5LCAweDAwLCAweEUxLCAweDAwLCAweEFDLCAweDIzLCAweDE4LCAweDRFLAorMHg0MCwgMHgzQiwgMHgwMCwgMHgyMSwgMHgwNCwgMHg4NCwgMHg4MCwgMHhEMCwgMHg0RSwgMHg0MCwgMHgyQywgMHgwMCwgMHg2MSwKKzB4MDIsIDB4OEMsIDB4MDIsIDB4MTAsIDB4MEEsIDB4NDAsIDB4MDksIDB4MDAsIDB4QUIsIDB4MDAsIDB4OTQsIDB4MDIsIDB4RDAsCisweDBFLCAweDQwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHgwMCwgMHg3OSwgMHgwMCwgMHhFMSwgMHgxMSwgMHg4NCwgMHgwNywgMHgxMiwgMHgxRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHgwNSwKKzB4MDAsIDB4OTAsIDB4MDAsIDB4NTAsIDB4MEUsIDB4NDQsIDB4MDksIDB4MDQsIDB4M0QsIDB4MTAsIDB4ODQsIDB4MDMsIDB4MTAsCisweDAyLCAweDQxLCAweDBBLCAweDAwLCAweEExLCAweDAwLCAweDg0LCAweDAyLCAweEQwLCAweDJFLCAweDQwLCAweDAzLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHgzMywgMHg0MCwgMHhDMSwKKzB4MTAsIDB4MjQsIDB4MDMsIDB4MTEsIDB4OEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MEMsIDB4RDAsCisweDhDLCAweDQwLCAweDgwLCAweDAxLCAweDA5LCAweDQwLCAweDI0LCAweDBGLCAweDExLCAweDExLCAweDQ0LCAweDAzLCAweDAwLAorMHgwOSwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgxMywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QTgsIDB4MzUsIDB4MDAsIDB4RDMsIDB4MDAsIDB4MEMsIDB4MDMsIDB4MzAsCisweDNELCAweEMwLCAweDM3LCAweDAwLCAweDg3LCAweDAwLCAweDVDLCAweDFFLCAweDcwLCAweDFGLCAweEMwLCAweDRELCAweDAwLAorMHg5RiwgMHgwMCwgMHhDRCwgMHgxMywgMHgzNCwgMHgwOSwgMHhDMCwgMHgwNiwgMHgwOCwgMHhEMywgMHgwMCwgMHg0QywgMHgwMywKKzB4RjMsIDB4MEQsIDB4QzQsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMxLCAweDM3LCAweDAwLAorMHgxRiwgMHgwOCwgMHg3QywgMHg0MCwgMHhGMCwgMHgwRCwgMHhDNCwgMHg4MywgMHgwMCwgMHg0NywgMHgwMCwgMHg1QywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4ODUsIDB4MTAsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDMsIDB4RjAsIDB4OEQsIDB4QzQsIDB4MDcsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDNGLCAweDAwLAorMHhGRiwgMHgwMCwgMHhDQywgMHgwMywgMHgzMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhCMywgMHg0MCwgMHhFQywgMHgwMCwKKzB4MzAsIDB4MEQsIDB4QzAsIDB4NEQsIDB4MDAsIDB4QjMsIDB4MDIsIDB4Q0MsIDB4NDMsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsCisweDAwLCAweEJGLCAweDAxLCAweENDLCAweDE2LCAweDMwLCAweDBGLCAweEMwLCAweDAzLCAweDIyLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHgwMCwgMHhDRCwgMHgwMCwgMHg0NCwgMHgwMywKKzB4MTQsIDB4MEQsIDB4NDQsIDB4NzMsIDB4MDIsIDB4OTEsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MTQsIDB4MEQsIDB4NTAsIDB4MDQsCisweDg2LCAweDUxLCAweDAyLCAweDZDLCAweDNDLCAweDUwLCAweDMxLCAweDQwLCAweEM1LCAweDAxLCAweDFELCAweDAxLCAweDQ0LAorMHgwMiwgMHhCMCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsCisweDAwLCAweDExLCAweDAxLCAweDY0LCAweDA2LCAweDEwLCAweDBDLCAweDRBLCAweDA0LCAweDAwLCAweDk1LCAweDAwLCAweDA0LAorMHgwMiwgMHg1MCwgMHgzOSwgMHg0MCwgMHg0NSwgMHgxMCwgMHhERCwgMHgwNCwgMHg0MCwgMHgwMywgMHgxMSwgMHgxRCwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsCisweDAwLCAweERELCAweDAwLCAweDQ1LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDM3LCAweDQwLCAweDAxLCAweDAwLCAweDQ0LAorMHgwMCwgMHgxMCwgMHgwQywgMHg0MCwgMHgwMSwgMHg4MCwgMHg0MSwgMHgwMCwgMHgyNCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwKKzB4MDEsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MDMsIDB4ODAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDNBLCAweDEwLCAweEVGLCAweDAwLCAweDhDLAorMHgwMywgMHgzMCwgMHgwRiwgMHg0MCwgMHgzNywgMHgwMCwgMHgxMywgMHgwMCwgMHg2QywgMHgwMCwgMHgzOCwgMHgwRiwgMHhEMCwKKzB4MDQsIDB4MDAsIDB4OTUsIDB4MDAsIDB4MEQsIDB4MDMsIDB4NjEsIDB4MDEsIDB4ODAsIDB4MDUsIDB4MjAsIDB4OUYsIDB4MDAsCisweDRELCAweDAyLCAweDMwLCAweDBELCAweEMwLCAweDAzLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4M0YsIDB4MjAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjEsIDB4MEYsIDB4QzAsIDB4MEUsIDB4MDAsIDB4MkUsIDB4MDAsCisweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAyLCAweEYxLCAweDBGLAorMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMSwKKzB4ODIsIDB4QzAsIDB4MEUsIDB4MDIsIDB4M0IsIDB4MDgsIDB4RTAsIDB4MjgsIDB4QjAsIDB4ODMsIDB4RTAsIDB4MEUsIDB4ODIsCisweDM4LCAweDA4LCAweEVDLCAweDIwLCAweDkwLCAweDgzLCAweEM4LCAweDBFLCAweDAyLCAweDFCLCAweDA4LCAweEVDLCAweDI4LAorMHhBOCwgMHg4MywgMHhBMCwgMHgwRSwgMHgwMiwgMHgzQSwgMHgwOCwgMHhDQywgMHgyMCwgMHg5OCwgMHgwMywgMHg4QywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MjIsIDB4QTAsIDB4OEUsIDB4QTAsCisweDNBLCAweDAyLCAweEVBLCAweDA4LCAweEEwLCAweDIzLCAweDIwLCAweDhFLCAweEEwLCAweDNCLCAweDAyLCAweEVBLCAweDA4LAorMHhBOCwgMHgyMywgMHhBMCwgMHg4RSwgMHhBMCwgMHgzMiwgMHgwMiwgMHg0QSwgMHgwOCwgMHhBOCwgMHgyMywgMHg4OCwgMHg4RSwKKzB4ODAsIDB4M0EsIDB4MDIsIDB4Q0EsIDB4MDgsIDB4QTgsIDB4MDMsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDQwLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDE4LAorMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwKKzB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTgsIDB4MjAsIDB4NDEsIDB4QTAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsCisweDEwLCAweDIwLCAweDAxLCAweDg0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgyMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgxQSwgMHgwMCwgMHg2OCwgMHgwMCwgMHhBMCwgMHgwMSwgMHhBMCwgMHgwRSwKKzB4MjAsIDB4MUEsIDB4MDAsIDB4NjgsIDB4MDAsIDB4QTAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MjgsCisweDEwLCAweEE4LCAweDAxLCAweDg4LCAweDA2LCAweDgwLCAweDFBLCAweDAwLCAweDY4LCAweDAwLCAweDg4LCAweDAxLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgxMiwgMHhBMCwgMHg0RSwKKzB4ODAsIDB4M0EsIDB4MDEsIDB4RUEsIDB4MTQsIDB4QTAsIDB4MTMsIDB4QTAsIDB4NEEsIDB4ODAsIDB4M0EsIDB4MDEsIDB4RUEsCisweDA0LCAweEE4LCAweDEzLCAweEEwLCAweDRFLCAweDgyLCAweDNBLCAweDAxLCAweEVBLCAweDA0LCAweEEwLCAweDEzLCAweDgwLAorMHg0QSwgMHg4MCwgMHgzQSwgMHgwMSwgMHhFQSwgMHgwQywgMHhBOCwgMHgwMywgMHg4QywgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsCisweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLAorMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwKKzB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEEzLCAweDIwLCAweDIwLCAweDA0LCAweDgwLCAweDEwLCAweDAxLCAweDQyLCAweDAwLCAweDA4LCAweDExLCAweDIwLAorMHgwNCwgMHg4MCwgMHgxMCwgMHgwMSwgMHg0MiwgMHgwNCwgMHgwOCwgMHgxMSwgMHgyMCwgMHhDMCwgMHg4MCwgMHgxMCwgMHgwMSwKKzB4NDIsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MDEsIDB4NDIsIDB4MDQsIDB4MDgsIDB4MDEsCisweDhDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweEQyLCAweEEwLAorMHgwMiwgMHgwMSwgMHgwQSwgMHgwNSwgMHgyQSwgMHgxMCwgMHhBOCwgMHg1MCwgMHg4MCwgMHgwMiwgMHgwMSwgMHgwQSwgMHgwNywKKzB4MkEsIDB4MUMsIDB4QTgsIDB4NTAsIDB4QTAsIDB4NDIsIDB4ODMsIDB4MEEsIDB4MDUsIDB4MkEsIDB4MTAsIDB4QTAsIDB4NTAsCisweDg4LCAweDAyLCAweDAxLCAweDBBLCAweDA1LCAweDJBLCAweDNDLCAweEEwLCAweDAwLCAweDhDLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgzMCwgMHg4MCwgMHhDOCwgMHgwMCwgMHhBQSwgMHgwMywKKzB4QTgsIDB4MEUsIDB4MjAsIDB4MzgsIDB4ODAsIDB4RTAsIDB4MDAsIDB4QUEsIDB4MDcsIDB4MDgsIDB4MUUsIDB4QTAsIDB4MzIsCisweDgwLCAweENBLCAweDAwLCAweDIyLCAweDAzLCAweEE4LCAweDBDLCAweEEwLCAweDNBLCAweEEwLCAweENBLCAweDAwLCAweDJBLAorMHgwMywgMHhBOCwgMHgwQywgMHgyMCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MjEsIDB4NzIsIDB4MDAsIDB4NDgsIDB4MjAsIDB4MTgsIDB4ODAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA4LCAweDQwLCAweDIwLCAweDA4LCAweDAyLCAweDAwLCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDIwLAorMHgwMCwgMHgyMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwOCwgMHg0MiwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMCwgMHgwOCwgMHgwMCwKKzB4ODIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MTYsCisweDQwLCAweDE4LCAweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDAxLCAweDFBLCAweDA0LCAweDQwLCAweDEwLCAweDIwLCAweDQxLAorMHg4MCwgMHgwNCwgMHgwMSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg2MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxMCwKKzB4MDQsIDB4MDgsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4ODIsIDB4OEMsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDAyLCAweEEwLCAweDA2LCAweDgwLCAweDlBLAorMHgwMCwgMHg2QSwgMHgwMiwgMHgyOCwgMHgwOSwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5QiwgMHgwMCwgMHg0OCwgMHgwMiwgMHhBOCwKKzB4MDEsIDB4QTAsIDB4MDYsIDB4MDAsIDB4MUEsIDB4MDAsIDB4NkEsIDB4MDAsIDB4QjgsIDB4MDksIDB4QTAsIDB4MDYsIDB4QTAsCisweDFCLCAweDAwLCAweDZBLCAweDAwLCAweEE4LCAweDAxLCAweDhDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgwMCwgMHhDMCwgMHg0NiwgMHgwMCwgMHgxQSwgMHgwMCwgMHg2QywgMHgwMCwgMHhCQywKKzB4MDEsIDB4OTAsIDB4NDYsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NkMsIDB4MDAsIDB4QTgsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MjAsCisweDFCLCAweDgwLCAweDZDLCAweDA0LCAweEEwLCAweDAxLCAweEU4LCAweDQ2LCAweDAwLCAweDFBLCAweDAwLCAweDZDLCAweDAwLAorMHgzMiwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwKKzB4NDIsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDgsIDB4NDMsIDB4MjAsIDB4MDgsIDB4ODEsCisweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDE4LCAweDQzLCAweDI4LCAweDBDLCAweDAxLCAweDMwLCAweDA0LCAweEMyLCAweDMwLAorMHgwOCwgMHg0MywgMHgyMCwgMHgwQywgMHg4MSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwOCwgMHgwMywgMHg4QywgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MEMsIDB4MDAsCisweDMwLCAweDAwLCAweEMwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAwLCAweDgwLCAweDAwLAorMHgwMCwgMHgwMywgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwOCwKKzB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQwLCAweDgwLCAweDBDLCAweDgzLCAweDMyLCAweDA0LCAweEM4LCAweDM0LAorMHgyOCwgMHg0MywgMHg4MCwgMHgwQywgMHg4MywgMHgzMiwgMHgwNCwgMHhDOCwgMHgxMCwgMHgyMCwgMHg0MywgMHg4MCwgMHgwQywKKzB4MDEsIDB4MzIsIDB4MDQsIDB4QzgsIDB4MTAsIDB4MjgsIDB4NDMsIDB4ODAsIDB4MEMsIDB4ODMsIDB4MzIsIDB4MDQsIDB4QzgsCisweDEwLCAweDIwLCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhBMywgMHg0MiwgMHhBMCwgMHgwNiwgMHg4MywgMHgxQSwgMHgwNCwgMHg2QSwgMHgzMCwgMHhBOCwgMHg0MSwgMHhBMCwgMHgwNiwKKzB4ODMsIDB4MUEsIDB4MDQsIDB4NkEsIDB4MTAsIDB4QTgsIDB4NDEsIDB4QTAsIDB4MDYsIDB4ODEsIDB4MUEsIDB4MDQsIDB4NkEsCisweDMwLCAweEE4LCAweDQxLCAweDgwLCAweDBFLCAweDgzLCAweDBBLCAweDA0LCAweDZBLCAweDEwLCAweEE4LCAweDAxLCAweDhDLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHg0MiwgMHgwMCwgMHgwNCwKKzB4MDEsIDB4MzAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MEMsIDB4MDEsIDB4MzAsIDB4MDQsIDB4QzAsCisweDEwLCAweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDAxLCAweDEwLCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDQzLCAweDAwLAorMHgwMCwgMHgwMSwgMHgzMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4NEEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MzAsIDB4MDQsIDB4NjIsCisweDEyLCAweDA4LCAweDRCLCAweDIwLCAweDA2LCAweDgxLCAweEIwLCAweDA0LCAweDYyLCAweDEyLCAweDg4LCAweDQxLCAweDIwLAorMHgyNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgxMCwgMHgwOCwgMHg0MywgMHgwMCwgMHgwNiwgMHg4MSwgMHgzMCwgMHgwNCwKKzB4NjIsIDB4MTIsIDB4ODgsIDB4MDEsIDB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDIzLCAweDA2LCAweEEwLCAweDFBLCAweDAwLCAweDYyLCAweDAwLCAweEFBLCAweDAxLCAweDIwLCAweDA0LCAweEEwLAorMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4QSwgMHgwMSwgMHhBMCwgMHgwNiwgMHhBMCwgMHgxQSwgMHg4MCwgMHg2QSwgMHg4MCwKKzB4QUEsIDB4MDEsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4QUEsIDB4MDEsIDB4QTgsIDB4MDIsCisweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDYwLCAweDgwLAorMHg4MiwgMHgwMSwgMHgyQSwgMHgwNiwgMHgyOCwgMHgxOCwgMHhBMCwgMHg2MCwgMHg4MCwgMHg4MiwgMHgwMSwgMHgwQSwgMHgwNiwKKzB4MjgsIDB4MTgsIDB4QTAsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MEEsIDB4MDYsIDB4MjgsIDB4MTgsIDB4QTAsIDB4NjAsCisweEEwLCAweDgyLCAweDAxLCAweDBBLCAweDA2LCAweDI4LCAweDE4LCAweEEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0OCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwKKzB4NDgsIDB4MTIsIDB4MjAsIDB4NDksIDB4QTAsIDB4MDAsIDB4MDEsIDB4OTIsIDB4MDQsIDB4NDgsIDB4MTIsIDB4MjgsIDB4NDEsCisweDgwLCAweDIwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDg4LCAweDAwLCAweDAxLCAweDAyLAorMHgwNCwgMHgwOCwgMHgxMiwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTMsIDB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MDEsIDB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsIDB4NjMsCisweEMwLCAweDhBLCAweDAxLCAweDJCLCAweDA2LCAweDhDLCAweDE4LCAweEIwLCAweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDJBLAorMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyQiwgMHgwNiwgMHg4QywgMHgxOCwgMHhCMCwKKzB4MDIsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4NjIsCisweEEwLCAweDhFLCAweDAxLCAweDNCLCAweDA2LCAweEVBLCAweDE4LCAweEE4LCAweDYzLCAweEEwLCAweDhFLCAweDgxLCAweDNBLAorMHgwNiwgMHg2OCwgMHgxOCwgMHg4OCwgMHg2MywgMHhBMCwgMHg4RSwgMHg4MSwgMHgzQSwgMHgwNiwgMHhFQSwgMHgxOCwgMHg5OCwKKzB4NjMsIDB4MjAsIDB4OEUsIDB4ODEsIDB4M0IsIDB4MDYsIDB4Q0EsIDB4MTgsIDB4ODgsIDB4MDMsIDB4OEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDYyLCAweDgwLCAweDhFLCAweDAxLCAweDNBLAorMHgwNiwgMHhFQywgMHgxOCwgMHhBMCwgMHg2MSwgMHhDMCwgMHg4RSwgMHgwMSwgMHgzQSwgMHgwNiwgMHhFOCwgMHgxOCwgMHhBMCwKKzB4NjMsIDB4RTAsIDB4OEUsIDB4MDEsIDB4MUIsIDB4MDYsIDB4RTAsIDB4MTgsIDB4QTAsIDB4NjMsIDB4QzAsIDB4OEUsIDB4MDEsCisweDNBLCAweDA2LCAweEVFLCAweDE4LCAweEIwLCAweDAzLCAweDg4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHg2MiwgMHhBMCwgMHg4RSwgMHg4MSwgMHgzMiwgMHgwNiwgMHhFQSwgMHgxOCwgMHgwOCwKKzB4NjMsIDB4QTAsIDB4OEUsIDB4QTEsIDB4MzgsIDB4ODYsIDB4RUEsIDB4MTgsIDB4MjgsIDB4NjEsIDB4MjAsIDB4OEUsIDB4ODEsCisweDMyLCAweDg2LCAweEU4LCAweDE4LCAweEE4LCAweDYzLCAweEEwLCAweDhFLCAweEExLCAweDMwLCAweDA2LCAweEVBLCAweDE4LAorMHhBOCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4NDAsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MUEsIDB4ODQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsCisweDMyLCAweDA0LCAweDQ4LCAweDEwLCAweDIyLCAweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDEwLAorMHgyMCwgMHg0MSwgMHg4OCwgMHgwNCwgMHgwMSwgMHgzQSwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODAsIDB4ODYsIDB4ODEsCisweDFBLCAweDA2LCAweDY4LCAweDE4LCAweEEwLCAweDYxLCAweDgwLCAweDg2LCAweDgxLCAweDE4LCAweDA2LCAweDY4LCAweDE4LAorMHhBMCwgMHg2MSwgMHg4MCwgMHg4NCwgMHgwMSwgMHgxQSwgMHgwNiwgMHg2OCwgMHgxOCwgMHhBOCwgMHg2MSwgMHg4MCwgMHg4NiwKKzB4ODEsIDB4MUEsIDB4MDYsIDB4NkEsIDB4MTgsIDB4QTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDAyLCAweEEwLCAweDBFLCAweDgwLCAweDNBLCAweDAwLCAweENBLCAweDAwLAorMHgyMiwgMHgwMywgMHhBMCwgMHgwQywgMHg4MCwgMHgzMiwgMHgwMCwgMHhDQSwgMHgwMCwgMHgyOCwgMHgwMywgMHg4MCwgMHgwRSwKKzB4ODAsIDB4MkEsIDB4MDAsIDB4RUEsIDB4MDAsIDB4QTgsIDB4MDMsIDB4QTAsIDB4MEUsIDB4ODAsIDB4M0EsIDB4MDAsIDB4RTgsCisweDAwLCAweEE4LCAweDAzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhBMiwgMHg0MiwgMHgwMCwgMHgwNiwgMHgwMSwgMHgwOCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwOCwgMHg0MSwgMHgwMCwgMHgwNCwKKzB4MDEsIDB4MDAsIDB4MEMsIDB4NDAsIDB4MTAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MTgsIDB4MDQsIDB4NjAsCisweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDA0LCAweDAxLCAweDE4LCAweDA0LCAweDYwLCAweDEwLCAweDgwLCAweDAxLCAweDg4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHg0MiwgMHgyMCwgMHgwNCwKKzB4ODEsIDB4MTAsIDB4MDQsIDB4MjIsIDB4MTAsIDB4ODgsIDB4NTEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDUsIDB4NjIsCisweDEwLCAweDA4LCAweDQxLCAweDAwLCAweDA0LCAweDgxLCAweDEwLCAweDA0LCAweDQyLCAweDEwLCAweDBBLCAweDQxLCAweDIwLAorMHgwNiwgMHg4MSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwOCwgMHgwMSwgMHg4OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4NDIsIDB4QTAsIDB4MDIsIDB4MDEsIDB4MEEsIDB4MEMsIDB4QUEsCisweDMwLCAweEE4LCAweEMyLCAweEEwLCAweDBBLCAweDAzLCAweDJBLCAweDA0LCAweEFBLCAweDMwLCAweEE4LCAweDQyLCAweEEwLAorMHgwMiwgMHg4MSwgMHgwQSwgMHgwNCwgMHgyQSwgMHgxMCwgMHhBMCwgMHhDMCwgMHhBMCwgMHgwMiwgMHgyMSwgMHgwQSwgMHgwNCwKKzB4MjgsIDB4MTAsIDB4QTgsIDB4MDAsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDQwLCAweDgwLCAweDBBLCAweDAzLCAweDJBLCAweDBDLCAweEE4LCAweDEwLCAweEEwLCAweDUyLCAweDgwLAorMHgwQSwgMHgwMywgMHgyQSwgMHgwNSwgMHhBOCwgMHgzMCwgMHhBMCwgMHhDMiwgMHg4MCwgMHgwQSwgMHgwMSwgMHgyQSwgMHgwQywKKzB4QTgsIDB4MzAsIDB4QTAsIDB4QzIsIDB4ODAsIDB4MEEsIDB4MDMsIDB4MkEsIDB4MEMsIDB4QTgsIDB4MTAsIDB4QTAsIDB4MDIsCisweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLAorMHg0MiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHg4MCwKKzB4MjAsIDB4MDAsIDB4ODgsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MjAsIDB4MDgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4ODIsIDB4MDAsCisweDAwLCAweDQyLCAweDAwLCAweDA4LCAweDAxLCAweDIwLCAweDA0LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHg0MiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwNCwKKzB4MDQsIDB4MTAsIDB4MTAsIDB4NDEsIDB4NDAsIDB4NDQsIDB4MDEsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MTQsIDB4MTAsIDB4NDAsCisweDQwLCAweDAwLCAweDAxLCAweDAxLCAweDA0LCAweDAwLCAweDEwLCAweDEwLCAweDUwLCAweDQwLCAweDAwLCAweDAxLCAweDAxLAorMHgwNCwgMHgwNCwgMHgxMCwgMHgxMCwgMHgwMCwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4QTIsIDB4MDIsIDB4RTAsIDB4MDYsIDB4ODAsIDB4MUIsIDB4MDAsIDB4NjgsIDB4MDAsIDB4QTgsIDB4MDEsCisweEEwLCAweDA2LCAweDgwLCAweDFCLCAweDAwLCAweDZFLCAweDAwLCAweEE4LCAweDAxLCAweDgwLCAweDA2LCAweDgwLCAweDFBLAorMHgwMCwgMHg2RSwgMHgwMCwgMHhCOCwgMHgwMSwgMHhBMCwgMHgwNiwgMHg4MCwgMHgxQiwgMHgwMCwgMHg2QSwgMHgwMCwgMHhBOCwKKzB4MDEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MDIsCisweEMwLCAweDA2LCAweDAwLCAweDNCLCAweDAwLCAweDZDLCAweDAwLCAweEEwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDNBLAorMHgwMCwgMHg2OCwgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxQSwgMHgwMCwgMHg2QywgMHgwMCwgMHhBMCwKKzB4MDMsIDB4QzAsIDB4MDYsIDB4MDAsIDB4M0EsIDB4MDAsIDB4NEMsIDB4MDAsIDB4QjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDBDLCAweDgwLCAweDE4LAorMHgwMCwgMHhDMiwgMHgwMCwgMHgwOCwgMHgwMSwgMHgyOCwgMHgwQywgMHg4MCwgMHgxOCwgMHg4MCwgMHhDMCwgMHgwMCwgMHgwOCwKKzB4MDMsIDB4MjAsIDB4MEMsIDB4ODIsIDB4MzgsIDB4MDAsIDB4QzIsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MjAsIDB4MEMsIDB4ODAsCisweDE4LCAweDAwLCAweEMyLCAweDAwLCAweDA4LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyQywgMHgwMCwgMHgxMCwgMHgwMCwgMHhDMCwgMHgwMiwgMHgwMCwKKzB4NjMsIDB4MDAsIDB4MkMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MEMsIDB4MDAsCisweDEwLCAweDAwLCAweEMwLCAweDAyLCAweDAwLCAweDIxLCAweDAwLCAweDJDLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLAorMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MjAsIDB4ODAsIDB4OEMsIDB4ODIsIDB4MzIsIDB4MEEsIDB4QzgsIDB4MDgsIDB4MjAsIDB4MjEsIDB4ODAsIDB4OEMsIDB4ODIsCisweDMyLCAweDAyLCAweDg4LCAweDI4LCAweDIwLCAweEEzLCAweDgwLCAweDhDLCAweDAyLCAweDIyLCAweDBBLCAweEM4LCAweDI4LAorMHgyOCwgMHhBMywgMHg4MCwgMHg4QywgMHg4MiwgMHgzMiwgMHgwQSwgMHhDOCwgMHgwOCwgMHgyMCwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzQsIDB4QTAsIDB4MTYsIDB4ODMsCisweDVBLCAweDBDLCAweDZBLCAweDMxLCAweEEwLCAweEM0LCAweEEwLCAweDE2LCAweDgzLCAweDVBLCAweDBDLCAweDZBLCAweDMxLAorMHhBOCwgMHhDNSwgMHhBMCwgMHgxNiwgMHg4MywgMHg0QSwgMHgwQywgMHg2QSwgMHgzMSwgMHhBOCwgMHhFNSwgMHhBMCwgMHgxNiwKKzB4ODMsIDB4NUEsIDB4MEMsIDB4NkEsIDB4MzEsIDB4QTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDAyLAorMHgwOCwgMHgyMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4OTEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgyMiwgMHg0NiwgMHg4OCwgMHgxOCwgMHgyMSwgMHg2MiwgMHg4MCwgMHg4QSwgMHgwMSwgMHgyNiwgMHgwNiwKKzB4ODgsIDB4MTgsIDB4MjAsIDB4NjIsIDB4ODAsIDB4ODgsIDB4MTEsIDB4MjIsIDB4NDYsIDB4ODgsIDB4MTgsIDB4MjEsIDB4NjIsCisweDg0LCAweDg4LCAweDAxLCAweDIyLCAweDQ2LCAweDg4LCAweDE4LCAweDIxLCAweDYyLCAweDg0LCAweDg4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHgwQSwKKzB4MDgsIDB4MkEsIDB4MjAsIDB4QUEsIDB4ODAsIDB4ODgsIDB4MDIsIDB4QTIsIDB4MEEsIDB4MDgsIDB4MkEsIDB4MjAsIDB4QUEsCisweDAwLCAweEFBLCAweDAyLCAweEEyLCAweDBBLCAweDg4LCAweDI4LCAweDIwLCAweEFBLCAweDgwLCAweEEwLCAweDAyLCAweEE2LAorMHgwQSwgMHgwOCwgMHgyQSwgMHgyMCwgMHhBQSwgMHg4MCwgMHhBOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODQsIDB4NDIsIDB4MTAsIDB4MEEsIDB4NDEsIDB4MjgsCisweDQ0LCAweEExLCAweDEwLCAweDhDLCAweDRBLCAweDEwLCAweDJBLCAweDQxLCAweDI4LCAweDA0LCAweEExLCAweDEwLCAweDA0LAorMHg0MiwgMHgxMCwgMHgwQSwgMHg0MSwgMHgyOCwgMHg4NCwgMHg4MSwgMHgxMCwgMHg4NCwgMHg0QSwgMHgxMCwgMHgwQSwgMHg0MSwKKzB4MjAsIDB4MDQsIDB4QTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDUwLCAweDgwLCAweDQwLCAweDAxLCAweDAyLCAweDA1LCAweDAwLCAweDE0LCAweDAwLCAweDUwLCAweDgwLAorMHg0MCwgMHgwMSwgMHgwMiwgMHgwNSwgMHgwMCwgMHgxNCwgMHgwMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgwMiwgMHgwNSwKKzB4MDgsIDB4MTQsIDB4MjAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDgsIDB4MTQsIDB4MjAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweEMwLAorMHhDQSwgMHgyMCwgMHgyQiwgMHgwMywgMHg4QywgMHgwQywgMHgzMCwgMHgzMiwgMHg0MCwgMHhDMCwgMHgwMCwgMHgwMSwgMHgwMywKKzB4ODgsIDB4MEMsIDB4MzAsIDB4MzIsIDB4QzAsIDB4Q0EsIDB4MDAsIDB4MkIsIDB4MDMsIDB4QUMsIDB4MEMsIDB4QjAsIDB4MzIsCisweDQwLCAweEMwLCAweDAwLCAweDJCLCAweDAzLCAweEFDLCAweDBDLCAweEIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBNCwgMHg0RSwgMHg4MCwgMHgzQSwgMHgwMSwKKzB4RUEsIDB4MDQsIDB4QjgsIDB4MTMsIDB4QTAsIDB4NEUsIDB4ODAsIDB4M0IsIDB4NDEsIDB4RUEsIDB4MDQsIDB4QTgsIDB4MTMsCisweEEwLCAweDRFLCAweDg0LCAweDNCLCAweDAxLCAweEVBLCAweDA0LCAweEI4LCAweDEzLCAweEEwLCAweDRFLCAweDgwLCAweDNCLAorMHgwMSwgMHhFMiwgMHg0NCwgMHhBOCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4QzQsIDB4MTAsIDB4MTIsIDB4MjMsIDB4MDgsIDB4OEMsIDB4MjEsIDB4MzAsIDB4ODAsIDB4QzAsCisweDEwLCAweDAyLCAweDIzLCAweDA4LCAweDBDLCAweDIxLCAweDMwLCAweDg0LCAweEM0LCAweDE4LCAweDEyLCAweDQzLCAweDQ4LAorMHg4QywgMHgyMSwgMHgzMSwgMHg4MiwgMHhDMCwgMHgxOCwgMHgxMiwgMHhBMywgMHg0OCwgMHg4QywgMHgyMSwgMHgzMSwgMHg4NCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsCisweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLAorMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwKKzB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCNCwgMHhERiwgMHhEMCwgMHg2QywgMHg0MywgMHhCMywgMHgwRCwgMHhDRCwgMHhCRSwKKzB4N0MsIDB4REIsIDB4RDAsIDB4NkMsIDB4NDMsIDB4RkIsIDB4MEQsIDB4RUQsIDB4MzcsIDB4MzQsIDB4REIsIDB4RDAsIDB4N0UsCisweDQzLCAweEIzLCAweDBELCAweENELCAweEJFLCAweDdDLCAweERCLCAweEQwLCAweDZDLCAweDQzLCAweEIzLCAweDBELCAweEVELAorMHgzNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4Q0MsIDB4M0YsIDB4MzIsIDB4RjMsIDB4QzgsIDB4Q0MsIDB4MjMsIDB4MzMsIDB4QkYsIDB4RkMsIDB4M0MsIDB4MzIsIDB4RjMsCisweEM4LCAweEZDLCAweDIzLCAweEYzLCAweDhGLCAweENDLCAweDNDLCAweDMyLCAweEZGLCAweEM4LCAweENDLCAweDIzLCAweDMzLAorMHhCRiwgMHhGQywgMHgzQywgMHgzMiwgMHhGMywgMHhDOCwgMHhDQywgMHgyMywgMHhGMywgMHg4RiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4REMsIDB4NzgsIDB4NzIsIDB4N0IsCisweDQ4LCAweEVDLCAweDI3LCAweDMxLCAweDg2LCAweEM0LCAweDc4LCAweDEyLCAweDdCLCAweDQ4LCAweDhDLCAweDI3LCAweEIxLAorMHg5RiwgMHhEQywgMHg3RSwgMHg3MiwgMHhFMywgMHhDOSwgMHhFRCwgMHgyNywgMHhCNywgMHg4NywgMHhDNCwgMHg3RSwgMHg3MiwKKzB4N0IsIDB4QzgsIDB4RUQsIDB4MjcsIDB4MzcsIDB4OUUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDhFLCAweDAyLCAweDM5LCAweDA4LCAweEU0LCAweDIwLAorMHg4MCwgMHg4MywgMHg0MCwgMHgwRSwgMHgwMiwgMHgzOSwgMHgwOCwgMHhFNCwgMHgyMCwgMHg5MCwgMHg4MywgMHg0MCwgMHgwRSwKKzB4MDIsIDB4MzksIDB4MDgsIDB4RTAsIDB4MjAsIDB4OTAsIDB4ODMsIDB4NDAsIDB4OEUsIDB4MDIsIDB4MzksIDB4MEEsIDB4RTAsCisweDI4LCAweDgwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgyMCwgMHhBMCwgMHg4RSwgMHg4MSwgMHgzQSwgMHgwMiwgMHhFQSwgMHgwOCwgMHhBOCwgMHgyMywgMHhBMCwgMHg4RSwKKzB4ODAsIDB4M0EsIDB4MDIsIDB4RUEsIDB4MDgsIDB4QTgsIDB4MjMsIDB4QTAsIDB4OEUsIDB4ODAsIDB4M0EsIDB4MDIsIDB4RUEsCisweDA4LCAweEFBLCAweDIzLCAweEEwLCAweDhFLCAweDgxLCAweDNBLCAweDA2LCAweEVBLCAweDE4LCAweEI4LCAweDAzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwNCwKKzB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsCisweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLAorMHg4NCwgMHgwMSwgMHgxMiwgMHgwNiwgMHg0OCwgMHgxOCwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsCisweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDIwLAorMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwKKzB4NjIsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDRFLCAweDgwLCAweDM4LCAweDAxLCAweEUyLCAweDA0LCAweDg4LCAweDkzLCAweDIwLAorMHg0RSwgMHg4MCwgMHgzOCwgMHgwMSwgMHhFMiwgMHgwNCwgMHg4OCwgMHgxMywgMHgyMCwgMHg0QSwgMHg4MCwgMHgzOCwgMHgwMSwKKzB4RTIsIDB4MDQsIDB4ODgsIDB4MTMsIDB4MjAsIDB4NEUsIDB4ODAsIDB4MzgsIDB4MDEsIDB4RTIsIDB4MDQsIDB4ODgsIDB4MDMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwKKzB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsCisweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDA4LCAweDYwLCAweDI4LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHg2NCwgMHg4MCwgMHgxMCwgMHgwMSwKKzB4NDIsIDB4MEEsIDB4MDgsIDB4MzEsIDB4MjAsIDB4NDQsIDB4ODAsIDB4MTAsIDB4MDEsIDB4NDIsIDB4MEMsIDB4MDgsIDB4MDksCisweDIwLCAweDQ0LCAweDgwLCAweDkwLCAweDAwLCAweDQyLCAweDA0LCAweDA4LCAweDExLCAweDIwLCAweDY0LCAweDgwLCAweDkwLAorMHgwMCwgMHg0MiwgMHgwMiwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RDQsIDB4MjAsIDB4NTIsIDB4ODEsIDB4NDgsIDB4MDUsIDB4MjIsIDB4MTEsIDB4ODAsIDB4NTQsCisweDIwLCAweDUyLCAweDgxLCAweDQ4LCAweDA1LCAweDIyLCAweDE1LCAweDg4LCAweDQ0LCAweDAwLCAweDUyLCAweDgxLCAweDQ4LAorMHgwNCwgMHgyMCwgMHgxNSwgMHg4OCwgMHg1NCwgMHgyMCwgMHg1MiwgMHg4MSwgMHg0OCwgMHgwQywgMHgyMCwgMHgxMSwgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MzAsCisweDAwLCAweEM4LCAweDAwLCAweDI4LCAweDAzLCAweEEwLCAweDNDLCAweDIwLCAweDMwLCAweDAwLCAweENBLCAweDAwLCAweDAwLAorMHgwMywgMHhBMCwgMHgwQywgMHg4MCwgMHgzMiwgMHgwMCwgMHhDQSwgMHgwMCwgMHgyOCwgMHgwMywgMHhBMCwgMHgwQywgMHg4MCwKKzB4MzIsIDB4MDAsIDB4Q0EsIDB4MDAsIDB4MjgsIDB4MDMsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDA4LAorMHgwMCwgMHgyMCwgMHgwRSwgMHg4MCwgMHgyMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHg4MCwKKzB4MTgsIDB4MDAsIDB4MDIsIDB4MDAsIDB4ODgsIDB4MDEsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsCisweDg4LCAweDAxLCAweDIwLCAweDBBLCAweDA4LCAweDAyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgyMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMCwgMHgwMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywKKzB4MDIsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjAsIDB4MDYsIDB4ODAsCisweDEwLCAweDAwLCAweDYyLCAweDAwLCAweDg4LCAweDAxLCAweDIwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDY2LCAweDAwLAorMHg4OCwgMHgwMSwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2NiwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MDYsIDB4MDAsCisweDE5LCAweDAwLCAweDY0LCAweDA0LCAweDgwLCAweDAxLCAweDQwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDY0LCAweDAwLAorMHg5MCwgMHgxMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOSwgMHgwMSwgMHg2MCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwgMHgwNiwKKzB4MDAsIDB4MTksIDB4MDEsIDB4NjIsIDB4MDAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDQyLCAweDIwLCAweDBDLCAweDgxLCAweDMwLCAweDA0LCAweEMyLCAweDEwLAorMHgwOCwgMHg0MywgMHgyMCwgMHgwQywgMHg4MSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwOCwgMHg0MywgMHgyOCwgMHgwQywKKzB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDgsIDB4NDMsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsCisweDEwLCAweDE4LCAweDAzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwQywKKzB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsCisweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwQywKKzB4MDEsIDB4MzAsIDB4MDQsIDB4QzAsIDB4MzAsIDB4MDgsIDB4NDMsIDB4MDAsIDB4MEMsIDB4MDEsIDB4MzAsIDB4MDQsIDB4QzAsCisweDEwLCAweDAwLCAweEMzLCAweDIwLCAweDBDLCAweDAxLCAweDMwLCAweDBDLCAweEMyLCAweDEwLCAweDAwLCAweDQzLCAweDAwLAorMHgwQywgMHgwMSwgMHgzMCwgMHgwQywgMHhDMiwgMHgzNCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4NDIsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsCisweDMwLCAweDg4LCAweDQxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDYyLCAweDEwLCAweDg4LCAweEMxLCAweDIwLAorMHgwNiwgMHg4MSwgMHgxOCwgMHgwQywgMHg2MiwgMHgxMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwQywKKzB4NjAsIDB4MTAsIDB4ODgsIDB4MDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDgwLCAweDQyLCAweDAwLCAweDA0LCAweDAxLCAweDEwLCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDQzLCAweDAwLAorMHgwNCwgMHgwMSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwQywgMHgwMSwgMHgxMCwgMHgwNCwKKzB4QzAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4MDQsIDB4QzAsIDB4MTAsIDB4ODAsIDB4MDEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDgwLCAweDQyLCAweDIwLAorMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgxMCwgMHgwOCwgMHg0MywgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwKKzB4NjIsIDB4MTAsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MTgsIDB4MDQsIDB4QzIsIDB4MTAsIDB4ODgsIDB4NDEsCisweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweEMwLCAweDMwLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHgwMiwgMHgyMCwgMHgwQSwgMHg4MCwgMHgyOCwgMHgwMCwKKzB4QTIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjAsIDB4MEEsIDB4ODAsIDB4MjgsIDB4MDAsIDB4QTIsIDB4MDAsIDB4ODgsIDB4MDIsCisweDAwLCAweDA4LCAweDgwLCAweDI4LCAweDAwLCAweDgwLCAweDAwLCAweDg4LCAweDAyLCAweDIwLCAweDBBLCAweDgwLCAweDI4LAorMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MDgsIDB4MDYsIDB4MjAsIDB4MTgsIDB4ODAsIDB4NjAsCisweDAwLCAweDgyLCAweDAxLCAweDA4LCAweDA2LCAweDIwLCAweDE4LCAweDgwLCAweDYwLCAweDAwLCAweDgyLCAweDAxLCAweDA4LAorMHgwNiwgMHgyMCwgMHgxOCwgMHg4MCwgMHg2MCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgwOCwgMHgwNiwgMHgyMCwgMHgxOCwgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4NDAsCisweDgwLCAweDAwLCAweDAxLCAweDEyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDgxLCAweDAyLAorMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwKKzB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDJCLAorMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyQiwgMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwKKzB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MkIsIDB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsIDB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsCisweDJCLCAweDA2LCAweEFDLCAweDE4LCAweEIwLCAweDAyLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg2MiwgMHgyMCwgMHg4RSwgMHg4MSwgMHgzOCwgMHgwNiwgMHhFMiwgMHgxOCwgMHg5OCwKKzB4NjMsIDB4MjAsIDB4OEUsIDB4ODEsIDB4MzgsIDB4MDYsIDB4RTIsIDB4MTgsIDB4ODgsIDB4NjMsIDB4NDAsIDB4OEUsIDB4ODEsCisweDM4LCAweDA2LCAweEU2LCAweDE4LCAweDg4LCAweDYzLCAweDIwLCAweDhFLCAweDgxLCAweDM4LCAweDg2LCAweEU2LCAweDE4LAorMHg4OCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwKKzB4NjIsIDB4NDAsIDB4OEUsIDB4MDEsIDB4MzksIDB4MDYsIDB4RTAsIDB4MTgsIDB4QTAsIDB4NjMsIDB4NDAsIDB4OEUsIDB4MDEsCisweDM5LCAweDA2LCAweEU0LCAweDE4LCAweDkwLCAweDYzLCAweDAwLCAweDhFLCAweDAxLCAweDM5LCAweDA2LCAweEUwLCAweDE4LAorMHg5MCwgMHg2MywgMHg0MCwgMHg4RSwgMHgwMSwgMHgzOSwgMHgwNiwgMHhFMCwgMHgxOCwgMHg4MCwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4QTIsIDB4NjIsIDB4QTAsIDB4OEUsIDB4ODEsCisweDNBLCAweDA2LCAweEU4LCAweDE4LCAweDg4LCAweDYzLCAweEEwLCAweDhFLCAweEExLCAweDNBLCAweDA2LCAweEVBLCAweDE4LAorMHhBOCwgMHg2MywgMHgyMCwgMHg4QywgMHg4MSwgMHgzQSwgMHgwNiwgMHhDMiwgMHgxOCwgMHhBOCwgMHg2MywgMHhBMCwgMHg4RSwKKzB4ODEsIDB4M0EsIDB4MDYsIDB4QzIsIDB4MTgsIDB4MTgsIDB4NDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQ4LCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDEyLAorMHgyMCwgMHg0QiwgMHg4MCwgMHgyNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMiwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwRSwKKzB4MDEsIDB4MTIsIDB4MDQsIDB4RTgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4RTgsCisweDEyLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHgwMCwgMHg2MCwgMHgwMCwgMHg4NiwgMHgwMSwgMHgxOCwgMHgwNiwgMHg2MCwgMHgxOCwgMHg4OCwgMHg2MSwgMHgwMCwgMHg4NiwKKzB4MDEsIDB4MTgsIDB4MDYsIDB4NjAsIDB4MTgsIDB4ODAsIDB4NjEsIDB4MjAsIDB4ODYsIDB4MDEsIDB4MTgsIDB4MDYsIDB4NjIsCisweDE4LCAweDgwLCAweDYxLCAweDAwLCAweDg2LCAweDAxLCAweDE4LCAweDA2LCAweDYyLCAweDE4LCAweDAwLCAweDAxLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHgwNiwgMHgyMCwgMHgxRSwKKzB4ODAsIDB4NzAsIDB4MDAsIDB4RTIsIDB4MDEsIDB4MDgsIDB4MDcsIDB4MjAsIDB4MUUsIDB4ODAsIDB4NzAsIDB4MDAsIDB4RTIsCisweDAxLCAweDg4LCAweDA3LCAweDIwLCAweDFFLCAweDgwLCAweDc4LCAweDAwLCAweEMyLCAweDAxLCAweDg4LCAweDA3LCAweDIwLAorMHgxRSwgMHg4MCwgMHg3OCwgMHgwMCwgMHhDMiwgMHgwMSwgMHg4OCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4NEEsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MTAsIDB4MDQsIDB4NjAsCisweDEyLCAweDAwLCAweDQ5LCAweDAwLCAweDI2LCAweDAxLCAweDEwLCAweDA0LCAweDYwLCAweDEyLCAweDgwLCAweDQxLCAweDAwLAorMHgwNiwgMHgwMSwgMHgxOCwgMHgwNCwgMHg0MCwgMHgxMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHgwNiwgMHgwMSwgMHgxOCwgMHgwNCwKKzB4NDAsIDB4MTIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDgwLCAweDQyLCAweDIwLCAweDA0LCAweDgxLCAweDE4LCAweDA0LCAweDQyLCAweDEwLCAweDg4LCAweDQxLCAweDIwLAorMHg0NCwgMHg4MSwgMHgxOCwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwOCwgMHg0MSwgMHgyMCwgMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwKKzB4NjIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDQsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NjIsIDB4MTAsIDB4MDgsIDB4MDEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDQyLCAweDIwLAorMHgwMiwgMHg4MywgMHgyOCwgMHgwNCwgMHgyMiwgMHgzMCwgMHg4MCwgMHg0MiwgMHgyMCwgMHgwMiwgMHg4MywgMHgyOCwgMHgwNCwKKzB4MjIsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MDAsIDB4MDIsIDB4ODEsIDB4MDgsIDB4MEMsIDB4QTAsIDB4MTAsIDB4ODgsIDB4NDAsCisweDIwLCAweDAyLCAweDgxLCAweDA4LCAweDBDLCAweEEwLCAweDEwLCAweDgwLCAweDAwLCAweDg4LCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwQSwgMHgwMywgMHgyOCwgMHgwQywKKzB4QTAsIDB4MzAsIDB4ODAsIDB4QzIsIDB4MDAsIDB4NEEsIDB4MDEsIDB4MjgsIDB4MEMsIDB4QTAsIDB4MzAsIDB4ODAsIDB4QzIsCisweDAwLCAweDBBLCAweDAzLCAweDI4LCAweDBDLCAweEEwLCAweDMwLCAweDgwLCAweEMyLCAweDAwLCAweDBBLCAweDAzLCAweDI4LAorMHgwQywgMHhBMCwgMHgxMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MTAsCisweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAxLCAweDIwLCAweDA0LCAweDgwLCAweDEwLCAweDAwLCAweDQyLCAweDAwLCAweDA4LAorMHgwMCwgMHgyMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwNCwgMHg4OCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4NDIsCisweDQwLCAweDQwLCAweDAxLCAweDAxLCAweDA0LCAweDAwLCAweDE0LCAweDEwLCAweDQwLCAweDQwLCAweDAwLCAweDAxLCAweDAxLAorMHgwNCwgMHgwNCwgMHgxMCwgMHgxMCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwNSwgMHgwNCwgMHgxMCwgMHgxMCwKKzB4NDAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MDQsIDB4MTAsIDB4MTAsIDB4MDAsIDB4ODgsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDAyLCAweDIwLCAweDA2LCAweDgwLCAweDE4LAorMHgwMCwgMHg2NiwgMHgwMCwgMHg5OCwgMHgwMSwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4OCwKKzB4MDEsIDB4NjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjYsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MjAsIDB4MDYsIDB4ODAsCisweDE4LCAweDAwLCAweDY2LCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyNiwgMHgwMCwgMHg5OSwgMHgwMCwgMHg2NCwgMHgwMiwgMHg4MCwKKzB4MEIsIDB4NDAsIDB4MjYsIDB4MDAsIDB4OTksIDB4MDAsIDB4NjQsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MEUsIDB4MDAsCisweDk4LCAweDAwLCAweEUwLCAweDAwLCAweDkwLCAweDAxLCAweDQwLCAweDA2LCAweDgwLCAweDk5LCAweDAwLCAweEUwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwKKzB4MDYsIDB4MjAsIDB4MUMsIDB4ODAsIDB4NzAsIDB4MDAsIDB4QzIsIDB4MDEsIDB4ODgsIDB4MDUsIDB4MjAsIDB4MUMsIDB4ODIsCisweDcwLCAweDAwLCAweEMyLCAweDAxLCAweDA4LCAweDA3LCAweDIwLCAweDE2LCAweDAwLCAweDcwLCAweDAwLCAweDYyLCAweDAxLAorMHgwOCwgMHgwNywgMHgyOCwgMHgxQywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MiwgMHgwMSwgMHgxOCwgMHgwMSwgMHg4OCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MEMsIDB4MDIsCisweDMwLCAweDBFLCAweEMwLCAweDIwLCAweDAwLCAweEUxLCAweDAwLCAweDBDLCAweDAyLCAweDMwLCAweDBBLCAweEMwLCAweDIwLAorMHgwMCwgMHg4MywgMHgwMCwgMHgwNCwgMHgwMiwgMHgzMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MywgMHgwMCwgMHgwQywKKzB4MDIsIDB4MzAsIDB4MEEsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDIwLCAweDAwLCAweEFDLCAweDAyLCAweEIwLCAweDBBLCAweEMwLCAweDJBLAorMHgwOCwgMHhBQiwgMHgwMCwgMHhBQywgMHgwMiwgMHhCMCwgMHgwQSwgMHhDMCwgMHgyOCwgMHgwMCwgMHhBMywgMHgyMCwgMHg4QywKKzB4MDIsIDB4QjAsIDB4MEEsIDB4QzIsIDB4MjgsIDB4MDAsIDB4QTMsIDB4MDAsIDB4OEMsIDB4ODIsIDB4QjAsIDB4MUUsIDB4QzIsCisweDA4LCAweDAwLCAweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHhBMiwgMHhDMiwgMHgyMCwgMHgwNiwgMHg4MywgMHgxOCwgMHgwRSwgMHg2MiwgMHgzMCwgMHg4OCwgMHhFMSwgMHgyMCwgMHgwNiwKKzB4ODMsIDB4MTgsIDB4MEUsIDB4NjIsIDB4MzAsIDB4ODgsIDB4QzEsIDB4MjAsIDB4MDYsIDB4ODMsIDB4MTgsIDB4MEMsIDB4NjIsCisweDMwLCAweDg4LCAweEMxLCAweDIwLCAweDA2LCAweDAzLCAweDE4LCAweDFFLCAweDYyLCAweDMwLCAweDg4LCAweDAxLCAweDg4LAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMiwgMHgwMCwgMHg0NCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgwNCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MTIsIDB4MjIsIDB4MDYsIDB4ODgsIDB4MTgsIDB4MDEsIDB4NjIsCisweDgwLCAweDg4LCAweDExLCAweDIwLCAweDA2LCAweDg4LCAweDE4LCAweDAxLCAweDYyLCAweDg0LCAweDg4LCAweDExLCAweDIyLAorMHg0NiwgMHg4OCwgMHgxOCwgMHgyMCwgMHg2MiwgMHg4NCwgMHg4OCwgMHgxMSwgMHgyMiwgMHg0NiwgMHgwOCwgMHgxOCwgMHg0MCwKKzB4NjIsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEEyLCAweDAyLCAweDIyLCAweDBBLCAweDg4LCAweDI4LCAweDIwLCAweEEyLCAweDAwLCAweDgwLCAweDAyLCAweDIwLAorMHgwQSwgMHg4OCwgMHgyOCwgMHgyMCwgMHhBMiwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwMiwgMHgwQSwgMHg4OCwgMHgyOCwgMHgyMCwKKzB4QTAsIDB4ODAsIDB4ODgsIDB4MDIsIDB4MjIsIDB4MEEsIDB4MDgsIDB4MjgsIDB4MjAsIDB4QTAsIDB4NDAsIDB4ODAsIDB4MDIsCisweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDEwLCAweDA0LAorMHg0MiwgMHgwMCwgMHgyOCwgMHg0MSwgMHgyMCwgMHgwNCwgMHg4MSwgMHgxMiwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwQSwgMHg0MSwKKzB4MjAsIDB4MDQsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4QTAsIDB4MDQsIDB4ODEsIDB4MTAsCisweDA0LCAweDQyLCAweDAwLCAweDA4LCAweDAwLCAweEEwLCAweDA0LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNSwKKzB4MDgsIDB4MTQsIDB4MDAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MTQsIDB4MjAsIDB4NTAsCisweDgwLCAweDQwLCAweDAxLCAweDAyLCAweDA1LCAweDAwLCAweDE0LCAweDIwLCAweDUwLCAweDgwLCAweDQwLCAweDAxLCAweDAyLAorMHg2RCwgMHgwMCwgMHg5NCwgMHgyOCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4QTIsIDB4QjIsIDB4QzAsIDB4Q0EsIDB4MDIsIDB4MjEsIDB4MEIsIDB4QUMsIDB4MkMsIDB4MTAsIDB4QjIsCisweEMwLCAweENBLCAweDAyLCAweDIzLCAweDBCLCAweEFDLCAweDJDLCAweEIwLCAweEIyLCAweEMwLCAweENBLCAweDAyLCAweDJBLAorMHgwQiwgMHg4NCwgMHgyQywgMHhCMCwgMHhCMiwgMHhDMCwgMHhDQSwgMHgwMiwgMHgyQSwgMHgyQiwgMHg4NCwgMHg2QywgMHhCMCwKKzB4MDIsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MTIsCisweDIwLCAweDRFLCAweDgwLCAweDM4LCAweDAxLCAweEUyLCAweDA0LCAweDk4LCAweDEzLCAweDIwLCAweDRFLCAweDgwLCAweDM4LAorMHgwMSwgMHhFMiwgMHgwNCwgMHg4MCwgMHgxMywgMHg2MCwgMHg0RSwgMHg4MCwgMHgzOSwgMHgwMSwgMHhFNiwgMHgwNCwgMHg4OCwKKzB4MTMsIDB4MjAsIDB4NEUsIDB4ODAsIDB4MzgsIDB4MDksIDB4RTYsIDB4MDAsIDB4ODksIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEM0LCAweDEwLCAweDAyLCAweDIzLCAweDA4LAorMHg4QywgMHgyMSwgMHgzMCwgMHg4MCwgMHhDMCwgMHgxMCwgMHgwMiwgMHg0MywgMHgwOCwgMHg4QywgMHgyMSwgMHgzMSwgMHg4NCwKKzB4QzQsIDB4MDgsIDB4MTIsIDB4NjMsIDB4MDgsIDB4OEMsIDB4MjAsIDB4MzEsIDB4ODYsIDB4QzQsIDB4MTgsIDB4MTIsIDB4MjMsCisweDA4LCAweDhDLCAweDIwLCAweDMxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwKKzB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsCisweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLAorMHhCRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4REIsIDB4RDAsIDB4RUMsCisweENCLCAweEI3LCAweDBELCAweEVELCAweDM3LCAweEZDLCAweERGLCAweEQwLCAweDZDLCAweEMzLCAweEI3LCAweDBELCAweEVELAorMHgzNywgMHgzNCwgMHhEQiwgMHhEMCwgMHg2QywgMHg0MywgMHhCMywgMHgwRCwgMHhDRCwgMHgzNiwgMHgzNCwgMHhEQiwgMHhEMCwKKzB4RUMsIDB4Q0IsIDB4QjcsIDB4MkYsIDB4RUQsIDB4QkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweENDLCAweDNDLCAweDMyLCAweEYzLCAweENCLCAweENGLCAweDIzLCAweEYzLAorMHg4RiwgMHhGQywgMHgzRiwgMHgzMiwgMHhGMywgMHhDOCwgMHhDRiwgMHgyMywgMHhGMywgMHg4RiwgMHhDQywgMHgzQywgMHgzMiwKKzB4RjMsIDB4QzgsIDB4Q0MsIDB4MjMsIDB4MzMsIDB4OEYsIDB4Q0MsIDB4M0MsIDB4MzIsIDB4RjMsIDB4Q0IsIDB4Q0YsIDB4MkYsCisweEYzLCAweEJGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhEQywgMHg3OCwgMHgxMiwgMHhGQiwgMHhDOSwgMHhFRCwgMHgyNywgMHhCMSwgMHg4NywgMHhEQywgMHg3RSwgMHgxMiwKKzB4RTMsIDB4QzksIDB4RUQsIDB4MjcsIDB4QjcsIDB4OUYsIDB4REMsIDB4MUUsIDB4NzIsIDB4RkIsIDB4NDksIDB4RUMsIDB4MjEsCisweEI3LCAweDlGLCAweERDLCAweDdFLCAweDcyLCAweEZCLCAweDQ5LCAweEVDLCAweDIxLCAweDM3LCAweDg2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMSwgMHgwMCwKKzB4ODUsIDB4MzMsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4Q0UsCisweDUwLCAweDMwLCAweDQzLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDM4LCAweDQzLCAweEUxLAorMHgwQywgMHg4NSwgMHgwMCwgMHgxNCwgMHhDRSwgMHg1MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLAorMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwNCwgMHgwOCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MTgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDIxLCAweDQwLCAweDg0LCAweDAwLCAweDExLCAweDAyLCAweDQ0LCAweDA4LCAweDEwLCAweDIxLAorMHg0MCwgMHg4NCwgMHgwMCwgMHgxMSwgMHgwMiwgMHg0NCwgMHgwOCwgMHgxMCwgMHgyMSwgMHg0MCwgMHg4NCwgMHgwMCwgMHgxMSwKKzB4MDIsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MjEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MTEsIDB4MDIsIDB4NDQsIDB4MTgsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorMHgwMCwgMHg4MCwgMHgzMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwKKzB4Q0UsIDB4MDAsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MDMsCisweEUwLCAweDRDLCAweDgwLCAweDAwLCAweDAxLCAweENFLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwKKzB4Q0MsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MzMsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MzAsIDB4MDMsCisweDAxLCAweDAwLCAweDA0LCAweDMzLCAweDEwLCAweENDLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMCwgMHhDQywgMHg0MCwgMHgzMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsCisweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLAorMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMSwgMHhDQywgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgzMywgMHgwMSwgMHgwMCwgMHgwNCwgMHgzMCwKKzB4MTMsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MzMsIDB4MDEsIDB4Q0MsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsCisweDAwLCAweDAxLCAweENDLCAweDA0LCAweDMwLCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgzOCwKKzB4NTMsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsCisweDMzLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAwLCAweDU0LAorMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsCisweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LAorMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHg4NiwgMHgwNCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsCisweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLAorMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4ODQsIDB4MDAsIDB4MTAsIDB4ODYsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweEUwLCAweDBDLCAweDgwLCAweDAwLCAweDAwLCAweENFLCAweDAwLAorMHgwOCwgMHgwMCwgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgzOCwgMHgwMywgMHhFMCwgMHgwQywKKzB4ODAsIDB4MDAsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MDgsIDB4MDAsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsCisweDAwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4ODQsIDB4MzMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MzgsIDB4MDMsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MzMsIDB4MTAsIDB4Q0UsCisweDQwLCAweDM4LCAweDAzLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDQwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDA4LCAweDAwLCAweDAxLAorMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMywgMHgwMCwKKzB4Q0MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzQywgMHgzQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGMCwgMHhGMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsCisweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIxLAorMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwKKzB4MDIsIDB4NTAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLAorMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMSwKKzB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIxLAorMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgxMCwgMHgyMSwgMHg0MCwgMHg4NCwgMHgwMCwgMHgxMSwKKzB4MDIsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MjEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MTEsIDB4MDIsIDB4NDQsIDB4MDgsIDB4MTAsCisweDIxLCAweDQwLCAweDg0LCAweDAwLCAweDExLCAweDAyLCAweDQ0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsCisweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsCisweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLAorMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwKKzB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsCisweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsCisweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDMzLCAweDE1LCAweDAyLCAweDU0LAorMHgwOCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsCisweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LAorMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwKKzB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLAorMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsCisweDQwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgwOCwgMHgwMCwgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgzOCwgMHgwMywgMHgyMCwgMHgwMCwKKzB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4MDMsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsCisweDAwLCAweDM4LCAweDAzLCAweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDM4LCAweDQzLCAweDIwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsCisweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLAorMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAxLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4M0MsIDB4M0MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RjAsIDB4RjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDA0LCAweDgwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHhDMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwNCwgMHg4MCwgMHg0MCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4QTQsIDB4MDcsIDB4MEMsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEMwLCAweDBDLCAweDAwLCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHgwQywgMHgwMCwgMHgwNSwgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4NUEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOTkzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9LY29uZmlnCkBAIC0wLDAgKzEsMTQgQEAKK2NvbmZpZyBTTElDT1NTCisJdHJpc3RhdGUgIkFsYWNyaXRlY2ggR2lnYWJpdCBJUy1OSUMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBYODYgJiYgTkVUREVWXzEwMDAKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBbGFjcml0ZWNoJ3MgSVMtTklDIGdpZ2FiaXQgZXRoZXJuZXQgY2FyZHMuCisKKwkgIFRoaXMgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBkZXZpY2VzOgorCSAgICBNb2phdmUgY2FyZHMgKHNpbmdsZSBwb3J0IFBDSSBHaWdhYml0KSBib3RoIGNvcHBlciBhbmQgZmliZXIKKwkgICAgT2FzaXMgY2FyZHMgKHNpbmdsZSBhbmQgZHVhbCBwb3J0IFBDSS14IEdpZ2FiaXQpIGNvcHBlciBhbmQgZmliZXIKKwkgICAgS2FsYWhhcmkgY2FyZHMgKGR1YWwgYW5kIHF1YWQgcG9ydCBQQ0ktZSBHaWdhYml0KSBjb3BwZXIgYW5kIGZpYmVyCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNsaWNvc3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYzllOWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfU0xJQ09TUykgKz0gc2xpY29zcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ1YjExMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL1JFQURNRQpAQCAtMCwwICsxLDE5IEBACitUaGlzIGRyaXZlciBpcyBzdXBwb3NlZCB0byBzdXBwb3J0OgorCisJTW9qYXZlIGNhcmRzIChzaW5nbGUgcG9ydCBQQ0kgR2lnYWJpdCkgYm90aCBjb3BwZXIgYW5kIGZpYmVyCisJT2FzaXMgY2FyZHMgKHNpbmdsZSBhbmQgZHVhbCBwb3J0IFBDSS14IEdpZ2FiaXQpIGNvcHBlciBhbmQgZmliZXIKKwlLYWxhaGFyaSBjYXJkcyAoZHVhbCBhbmQgcXVhZCBwb3J0IFBDSS1lIEdpZ2FiaXQpIGNvcHBlciBhbmQgZmliZXIKKworVGhlIGRyaXZlciB3YXMgYWN0dWFsbHkgdGVzdGVkIG9uIE9hc2lzIGFuZCBLYWxhaGFyaSBjYXJkcy4KKworVE9ETzoKKwktIG1vdmUgZmlybXdhcmUgbG9hZGluZyB0byByZXF1ZXN0X2Zpcm13YXJlKCkKKwktIHJlbW92ZSBkaXJlY3QgbWVtb3J5IGFjY2VzcyBvZiBzdHJ1Y3R1cmVzCisJLSBhbnkgcmVtYWluaW5nIHNwYXJzZSBhbmQgY2hlY2twYXRjaC5wbCB3YXJuaW5ncworCS0gYW55IG5ldGRldiByZWNvbW1lbmRlZCBjaGFuZ2VzCisKK1BsZWFzZSBzZW5kIHBhdGNoZXMgdG86CisgICAgICAgIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CithbmQgQ2M6IExpb3IgRG90YW4gPGxpb2RvdEBnbWFpbC5jb20+IGFuZCBDaHJpc3RvcGhlciBIYXJyZXIKKzxjaGFycmVyQGFsYWNyaXRlY2guY29tPiBhcyB3ZWxsIGFzIHRoZXkgYXJlIGFsc28gYWJsZSB0byB0ZXN0IG91dCBhbnkKK2NoYW5nZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9nYmRvd25sb2FkLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9nYmRvd25sb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0NDMyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2diZG93bmxvYWQuaApAQCAtMCwwICsxLDgyMTUgQEAKKyNkZWZpbmUgTU9KQVZFX1VDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCisjZGVmaW5lIE1PSkFWRV9VQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMjoyMiIKKyNkZWZpbmUgTU9KQVZFX1VDT0RFX0hPU1RJRl9JRCAgCTMKKworc3RhdGljIHMzMiBNTnVtU2VjdGlvbnMgPSAweDI7CitzdGF0aWMgdTMyIE1TZWN0aW9uU2l6ZVtdID0KK3sKKwkweDAwMDA4MDAwLCAweDAwMDEwMDAwLAorfTsKKworc3RhdGljIHUzMiBNU2VjdGlvblN0YXJ0W10gPQoreworCTB4MDAwMDAwMDAsIDB4MDAwMDgwMDAsCit9OworCitzdGF0aWMgdTggTW9qYXZlVUNvZGVbMl1bNjU1MzZdID0KK3sKKwl7CisJMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCisJMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHhhMiwgMHg0MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDA5LCAweDAwLCAweGEyLCAweDQ5LCAweGRkLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHhhMiwgMHg0MCwKKwkweDc1LCAweDdkLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDFmLCAweGU5LCAweDE4LCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGU5LAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4NDAsIDB4ZTksIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxNiwgMHgwMCwgMHgyOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MGYsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDI5LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxMSwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDBlLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4ZGQsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MmIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMCwgMHgxNCwgMHhiYywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDAxLCAweDEzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4YjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhkOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGI2LCAweGQzLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDk1LCAweGU4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZTgsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZmLCAweGIzLCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDIyLCAweDUwLAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhhNSwgMHhhNSwgMHgwMCwgMHhhNiwgMHhiNCwgMHhhNywgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHhhMiwgMHg1MCwKKwkweGI1LCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDdmLCAweDAwLCAweDAwLCAweDIwLCAweGY1LCAweGNmLCAweDAxLCAweDAwLCAweDFjLCAweDAxLCAweDAwLCAweGZhLAorCTB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4YTUsIDB4YTUsIDB4MDAsIDB4ZGEsIDB4YjUsIDB4YWIsIDB4MDEsIDB4MDAsCisJMHg5OSwgMHgwMCwgMHhhMiwgMHg1MCwgMHhiNSwgMHg2MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDQ0LCAweGIzLCAweDMzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhlZCwgMHg4YiwgMHgwMSwgMHgwMCwKKwkweGQ1LCAweDAwLCAweDAwLCAweDQ2LCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwgMHhlZiwgMHg4YiwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGUzLCAweDhmLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDQ4LCAweGIzLCAweDMzLCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhkNywgMHg4ZCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhmMSwgMHhkYiwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGU5LCAweDhiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZTksIDB4ZTMsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NGIsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDRjLCAweGIzLCAweDMzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsIDB4ZWIsIDB4ZGIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHhkYSwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLAorCTB4YjUsIDB4ZGIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhkYSwgMHhiNSwgMHhjZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhhNywKKwkweGI0LCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhiNSwgMHg4YiwgMHgwMSwgMHgwMCwKKwkweDYyLCAweDAwLCAweDI2LCAweDRjLCAweGI1LCAweDYzLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGRhLAorCTB4YjUsIDB4Y2YsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZGYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNSwgMHgwMCwgMHgwMCwgMHg1MiwgMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweDRiLCAweDg5LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGRmLCAweGY3LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZWYsIDB4ZGYsIDB4OGIsIDB4MDEsIDB4MDAsIDB4NjksIDB4MDAsIDB4MjIsIDB4NDAsCisJMHhkZiwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkNywgMHhlNSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGIzLCAweDhiLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDksCisJMHhkNSwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjUsIDB4ZjMsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHhkYSwgMHg3YiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGRkLCAweDliLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDVkLCAweGIzLCAweDMzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsIDB4ZTcsIDB4OGIsIDB4MDEsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGU3LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ZTcsIDB4OTcsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg1ZSwKKwkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGU1LCAweDhiLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwgMHhiNSwgMHg4ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY3LCAweGI1LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlNSwgMHg5NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLCAweGRkLCAweDliLCAweDAxLCAweDAwLAorCTB4OTYsIDB4MDAsIDB4MjIsIDB4ZjUsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHhkNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY2LCAweGViLCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY1LAorCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmNywgMHhlMywgMHg5NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwKKwkweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweGVlLCAweGRkLCAweGNiLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ZDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHhlOSwgMHg5NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQ1LCAweDAwLCAweDAwLCAweDRhLCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLAorCTB4ZGQsIDB4ODksIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDlhLCAweDEzLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4YTYsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDJjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweGE2LAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweGQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweGE2LAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhhNiwKKwkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkZiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE2LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NGIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwNCwgMHgwMCwgMHg0MCwgMHhkZCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiNywgMHgwMCwgMHgxMywgMHhiYywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDAwLCAweDQwLCAweGRkLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZGQsIDB4OTEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4OTUsIDB4ZTgsCisJMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhlOSwgMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQyLAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDgwLCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4YjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwOSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGM4LCAweDAwLCAweDA4LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGQ0LCAweDAwLCAweDFmLCAweGZkLAorCTB4ZjksIDB4MzMsIDB4MDAsIDB4MDAsIDB4YzcsIDB4MDAsIDB4OWUsIDB4ZmQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwKKwkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZkLCAweGY3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCisJMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHgwMCwgMHgwYSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQwLCAweGZiLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGZkLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ZjksIDB4ZjMsIDB4OGYsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNywgMHg0MiwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwgMHhkMywgMHgwMCwgMHhhMiwgMHhmZiwKKwkweGY3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4ZmYsIDB4ZmIsIDB4ZWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZmMsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDAwLCAweDA2LCAweGZlLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YjMsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4YjMsIDB4YzMsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4ZCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAorCTB4ZWIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHg5NiwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDI2LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLAorCTB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhiNSwgMHhlYiwgMHgwMSwgMHgwMCwgMHhlNCwgMHgwMCwgMHg4NCwgMHg5NiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGU1LCAweDAwLCAweDAwLCAweDQwLCAweGI1LCAweDkzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDAsIDB4YTIsIDB4NDEsCisJMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDI2LCAweDAxLCAweDAwLCAweDQxLCAweDJkLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YjMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4MDAsIDB4YTIsIDB4NDEsIDB4OGQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHhkYSwgMHhiNSwgMHhiZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRiLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4YjksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiOCwgMHhlMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHhiOSwgMHhlYiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGI4LCAweDk3LCAweDAxLCAweDAwLCAweDE1LCAweDAwLCAweDAwLCAweGRjLAorCTB4YjksIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMSwgMHgwMCwgMHg0MiwKKwkweDJkLCAweDExLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLCAweDJkLCAweDExLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyZCwgMHg5MSwgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI1LCAweDAxLCAweDAwLCAweDQwLCAweDJkLCAweDExLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4ODEsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4NCwgMHg5NiwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHhhMCwgMHhkYywKKwkweGI5LCAweDZiLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweDAwLCAweDQxLCAweDJkLCAweDkxLCAweDAwLCAweDAwLAorCTB4ZjgsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmQsIDB4ODEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHhkYSwgMHg4YiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDExLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweGY0LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMywgMHg0NCwgMHg4OSwgMHhlYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZDksIDB4MDAsIDB4MDAsIDB4NDMsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhiNSwgMHhmMywgMHgwMSwgMHgwMCwgMHgwYywgMHgwMSwgMHhhMCwgMHhkYSwgMHg4YiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDEsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDhhLCAweGY0LCAweDAxLCAweDAwLCAweDEyLCAweDAxLCAweDkwLCAweDQ0LCAweDhhLCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsCisJMHg4YSwgMHhhOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MCwgMHg4YiwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDQwLCAweGY5LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDQwLAorCTB4YjMsIDB4Y2YsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTksIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgxYywgMHgwMSwgMHg0MCwgMHhkYSwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhkYSwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGY5LCAweGMzLCAweDAxLCAweDAwLAorCTB4MTYsIDB4MDEsIDB4OWYsIDB4ZGEsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDAxLCAweDlmLCAweDk0LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OTIsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiNSwgMHhmMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGI0LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGIzLCAweGMzLCAweDAxLCAweDAwLAorCTB4MWQsIDB4MDEsIDB4YTIsIDB4NDEsIDB4OTEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMSwgMHgwMCwgMHg1MSwgMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI5LCAweDAxLCAweDAwLCAweDRkLCAweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDI5LCAweDAxLCAweDAwLCAweDQ5LAorCTB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyOSwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE0LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGExLCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDEsIDB4MjAsIDB4NDgsIDB4YTEsIDB4NTEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMSwgMHgyMiwgMHg0YiwKKwkweDc0LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsCisJMHg3ZSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1MSwgMHgwMSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDRlLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDgwLCAweDQwLAorCTB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhmMywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGFmLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YzUsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMywgMHg5ZiwgMHgwMCwgMHg0MCwgMHhiZiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDVmLCAweDAxLCAweDIyLCAweGNjLCAweDg1LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwKKwkweGEzLCAweGM5LCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDg1LCAweDkzLCAweDAxLCAweDAwLAorCTB4YzUsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGE0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4YmMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKKwkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRkLCAweDgxLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhkLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OGYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQyLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhlMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3ZiwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZjEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgxYSwgMHgwMCwKKwkweDVhLCAweDAxLCAweDUxLCAweDQwLCAweDgxLCAweGIyLCAweDFhLCAweDAwLCAweDVhLCAweDAxLCAweDUyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsCisJMHg1YSwgMHgwMSwgMHg1NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgxYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg5MSwgMHg4MSwKKwkweDgwLCAweDMwLCAweDFhLCAweDAwLCAweDVhLCAweDAxLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDFhLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4OTEsIDB4ODIsIDB4ODAsIDB4MzAsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDQwLAorCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDk0LCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDEsIDB4MjIsIDB4NDAsCisJMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDU1LCAweDAxLCAweDAwLCAweDQxLCAweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTAsIDB4MGYsIDB4YmQsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGI3LCAweDAxLCAweDAwLCAweDQwLCAweDE5LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQyLCAweGZmLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHhmZiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHhhNCwKKwkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweGFjLCAweDAxLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4MDEsIDB4YTIsIDB4NGMsCisJMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMSwgMHgyMiwgMHhkMiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAxLCAweDIyLCAweDQxLCAweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweGEyLCAweGUwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg4OSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MiwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDQsCisJMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhiMywgMHgwMSwgMHgwMCwgMHg0OCwgMHg0OSwgMHhjMSwgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAxLCAweDAwLCAweDViLCAweDg5LCAweDkwLCAweDAwLCAweDAwLCAweGIwLCAweDlmLCAweDAwLCAweGEwLAorCTB4OWUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhjYiwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGJhLCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDhhLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGI2LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4YzMsIDB4MDEsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhjNCwgMHgwMSwgMHg1NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywKKwkweDZmLCAweDkzLCAweDAxLCAweDAwLCAweGYzLCAweDlmLCAweDAwLCAweDUyLCAweDZmLCAweDkzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGM3LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhkMSwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGI2LCAweDlmLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MDEsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4MDEsIDB4NTUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg2ZiwgMHg5MywgMHgwMSwgMHgwMCwKKwkweGYzLCAweDlmLCAweDAwLCAweDUzLCAweDZmLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyMywgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHgwMSwgMHgyMiwgMHhkZSwKKwkweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDEsIDB4YTIsIDB4NDQsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MywgMHhiZiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY4LAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAorCTB4ZTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA1LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRkLAorCTB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlZCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweGRlLCAweGExLCAweGIzLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDU3LCAweDAxLCAweDAwLCAweGRmLCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAorCTB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwgMHhhNSwgMHhlNywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwKKwkweGMxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjcsIDB4MDEsIDB4MjIsIDB4NDQsIDB4YzEsIDB4NTMsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDEsIDB4ODQsIDB4NDEsCisJMHg4MSwgMHg0MCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDQ1LCAweGIxLCAweDAxLCAweDAwLCAweGYxLCAweDAxLCAweDAwLCAweDQxLAorCTB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsIDB4YjEsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHhkZCwKKwkweGExLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4YjEsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwKKwkweGM1LCAweDAyLCAweDAwLCAweGUwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweGEyLCAweGJhLCAweDgwLCAweDA0LCAweDAwLCAweDAwLAorCTB4NjAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4YTgsIDB4YjEsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHg0MCwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGJhLCAweGIzLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NWQsIDB4MDIsIDB4MDAsIDB4NGQsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGUzLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGU1LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhlYiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmNSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGY3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZjksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDIsIDB4MjIsIDB4NDAsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHg3NSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHgwMiwgMHgwMCwgMHhjNywKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDdkLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4NWQsIDB4MDIsIDB4MDAsIDB4NDIsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZTAsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGFiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDI5LCAweDAyLCAweGI4LCAweDQwLCAweDgxLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4MDIsIDB4YjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDAyLCAweGJhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDIsIDB4YmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMSwgMHgwMiwgMHhiYywgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MzMsIDB4MDIsIDB4YmQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMiwgMHhiZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM3LCAweDAyLCAweGJmLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzOSwgMHgwMiwgMHhjOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDNiLCAweDAyLCAweGM5LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4MDIsIDB4Y2EsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDAyLCAweGNiLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4MDIsIDB4Y2MsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MywgMHgwMiwgMHhjZCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4NDUsIDB4MDIsIDB4Y2UsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NywgMHgwMiwgMHhjZiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDA2LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNywgMHgwMSwgMHgwMCwgMHhjNywgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDYzLCAweDAyLCAweDAwLCAweDQ4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4MWEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDQ5LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NDAsIDB4MWMsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0ZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY1LCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4NWMsIDB4MDIsIDB4NGEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsCisJMHg5ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkOCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGExLCAweGQwLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAorCTB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZDQsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhkNiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwKKwkweGRjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGRlLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ZGEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsCisJMHg4ZSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhlNiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LAorCTB4ZmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKKwkweGU0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGU4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZWEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsCisJMHhmNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhmNiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY4LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM3LAorCTB4YTksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4MSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ODUsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDhhLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk1LCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTUsIDB4MDIsIDB4MDAsIDB4NDYsIDB4YTMsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg5OCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5ZSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhjLCAweDAyLCAweDIzLCAweDUwLCAweGE1LCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDIsIDB4MDAsIDB4NDIsCisJMHhhNSwgMHg2MywgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAorCTB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5NCwgMHgwMiwgMHgyMiwgMHg0NCwKKwkweGE1LCAweDUzLCAweDAwLCAweDAwLCAweDkxLCAweDAyLCAweDAwLCAweDQxLCAweGExLCAweGMxLCAweDAwLCAweDAwLAorCTB4NWEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDIsIDB4MDAsIDB4ZGUsCisJMHhhMSwgMHgzMywgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDVhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTIsIDB4ZDIsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDliLCAweDAyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NWEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDIsIDB4MDAsIDB4NTQsCisJMHhhNSwgMHgzMywgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YTksIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NWQsIDB4MDIsIDB4MDAsIDB4NDYsCisJMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LAorCTB4NDMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTksIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwKKwkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsCisJMHhhOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwMiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LAorCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwKKwkweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDAyLCAweDAwLCAweGQ0LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGNjLAorCTB4ODUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjNywgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMiwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDgzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2IsIDB4MDIsIDB4ODAsIDB4YTUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHhhNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLCAweGNkLCAweDAyLCAweDgwLCAweGE1LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhkNiwgMHgwMiwgMHgyMCwgMHg0ZiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGQ2LCAweDAyLCAweDIwLCAweDRiLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4MDIsIDB4MjAsIDB4NDcsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDAzLCAweDkwLCAweDAwLCAweDQxLAorCTB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNCwgMHgyZiwgMHg0YywgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGRhLCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDIsIDB4YTIsIDB4YTUsCisJMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGUwLCAweDAyLCAweDFmLCAweDkxLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhlMywgMHgwMiwgMHgxZiwgMHg5MSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweGE5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4MDIsIDB4MWYsIDB4OTEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDAyLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDY4LCAweDAwLCAweDkwLAorCTB4MjAsIDB4YTksIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIzLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgwLCAweDk4LCAweDAxLCAweDAwLCAweDA2LCAweDA1LCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDcsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAzLCAweDAwLCAweDQwLCAweDg1LCAweDMwLCAweDAxLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMiwgMHhhMiwgMHhmOCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMiwgMHhmMCwKKwkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDIxLCAweDkxLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MGMsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg0ZCwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAzLCAweDAwLCAweDRlLCAweDg1LCAweDEwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDIwLCAweDRmLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4NGYsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHgzOSwgMHgwMywgMHgwMCwgMHgwYywgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgyMCwgMHg0MywKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAzLCAweDIyLCAweGYwLCAweDllLCAweDZlLCAweDAwLCAweDAwLAorCTB4MzksIDB4MDMsIDB4MDAsIDB4NGQsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MjAsIDB4NDIsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMywgMHgyMiwgMHhmMCwgMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwKKwkweDM5LCAweDAzLCAweDAwLCAweDRlLCAweDg1LCAweDEwLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDIwLCAweDQxLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDMsIDB4YTIsIDB4ZjAsIDB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDIwLCAweDk1LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDhkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MjEsIDB4OTUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAzLCAweDAwLCAweDE3LCAweDg1LCAweDMwLCAweDAxLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDU4LAorCTB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4NTksIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgyMCwgMHg0ZiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg1YSwKKwkweDg1LCAweDEwLCAweDAxLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDE3LCAweDg1LCAweDMwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4MTQsIDB4MjAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDMsIDB4MjIsIDB4ZjAsCisJMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg1OCwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDE0LCAweDIwLCAweDQxLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDIzLCAweDAzLCAweDIyLCAweGYwLAorCTB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4NTksIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgxNCwgMHgyMCwgMHg0MiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMywgMHhhMiwgMHhmMCwKKwkweDllLCAweDZlLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDhkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4OCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDAzLCAweGEyLCAweDQyLCAweDIxLCAweDdkLCAweDAwLCAweDAwLCAweGE1LCAweGE1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMywgMHgwMCwgMHg0NCwgMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDIwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDMsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDg3LCAweGI0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDMsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDMsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDg3LCAweGI0LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDMsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2YsIDB4MDMsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQyLCAweDAzLCAweGEyLCAweDQxLCAweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGYyLAorCTB4ODYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg0MSwgMHgwMywgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDgsIDB4ODQsIDB4ODQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg4ZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDQ5LCAweDAzLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4OWYsIDB4MDAsIDB4NDcsIDB4OTgsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwOCwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0NywgMHgwMywgMHgwMCwgMHg1YywKKwkweDhmLCAweDgwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmQsIDB4ZjAsCisJMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LAorCTB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDgyLCAweDk0LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDMsIDB4MjIsIDB4NWYsCisJMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDUzLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHg0MywKKwkweDg2LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQxLCAweDg1LCAweDUwLCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDMsIDB4MDAsIDB4NDEsIDB4ODMsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJmLCAweDQ2LCAweDg0LCAweDk0LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDhiLCAweGYwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDMsIDB4YTAsIDB4NDEsCisJMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMywgMHgwMCwgMHg0MSwgMHg4MiwgMHhlOCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDhlLCAweGMwLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDQxLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEzLCAweDU1LCAweDgxLCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NzMsIDB4MDMsIDB4MDAsIDB4NTAsIDB4ODUsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4MDMsIDB4YTIsIDB4NDEsCisJMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweDAwLCAweDQ0LCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDFhLCAweDE1LCAweDAwLCAweGE2LAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwOCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweGUxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NzAsIDB4MTUsIDB4MDAsIDB4NDMsCisJMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDhhLCAweDAzLCAweDIyLCAweDVhLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDMsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwOCwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4MywgMHgwMywgMHhhMiwgMHg0MSwKKwkweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNywgMHgwZiwgMHgwMCwgMHhiYywKKwkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwl9LAorCXsKKwkweDMxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM0LCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzUsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4MCwgMHg4MSwgMHg4MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGU2LCAweDg5LCAweGEyLCAweDQwLCAweDkxLCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MmUsIDB4YTIsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNCwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDk1LCAweDJhLCAweGM4LCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVlLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHg4MCwgMHgxMSwgMHg4MSwKKwkweDk4LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MWEsIDB4ODAsIDB4MTEsIDB4ODIsIDB4OTgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4OSwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDIzLCAweDgwLCAweGEyLCAweDQyLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MCwgMHgxMSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MCwgMHg1MSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDgwLCAweDExLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODAsIDB4NTIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODAsIDB4MDAsIDB4NDgsCisJMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgyNywgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDI2LCAweDgwLCAweGEyLCAweDUzLCAweDA3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDUzLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgyOSwgMHg4MCwgMHhhMiwgMHg1MiwgMHgwNywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg1MiwKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyZSwgMHhhMiwgMHg1MiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGY0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHg0YywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDUsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGUxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4ZGUsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDliLCAweDliLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4OTksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NSwgMHgyMCwgMHg0NCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGMwLCAweDAwLCAweGE2LCAweDM2LCAweGIxLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzOCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MTgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDksIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDdiLCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHg4NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NzAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhkZCwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg3MSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5NywKKwkweDgwLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJlLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmUsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg5MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDVjLCAweDgxLCAweDAwLCAweDQwLCAweGFmLCAweDMzLCAweDAxLCAweDAwLCAweDYxLCAweDk5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg0OSwgMHg4NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc3LCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAwLCAweDAwLAorCTB4NzEsIDB4ODAsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODAsIDB4NTIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3MywgMHg4MCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDc0LCAweDgwLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDkxLCAweDgxLAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHg0NiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLAorCTB4NWEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDksCisJMHhmZCwgMHg4MywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0YSwgMHhmZCwgMHg4MywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLAorCTB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHhkMCwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDdjLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4MCwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGExLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MDQsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgzZiwgMHg0MiwgMHg5NywgMHhlMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAzLAorCTB4MDIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwgMHg5OSwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywKKwkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDhlLCAweDgwLCAweGEyLCAweDQxLCAweDk3LCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsCisJMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4OTUsIDB4ODAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4MDIsIDB4MDAsIDB4MjAsCisJMHg0MiwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwNSwgMHg2YywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGNiLCAweGRiLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQxLAorCTB4OGIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg5YiwgMHg4MCwgMHhhOCwgMHhiMSwgMHg4YywgMHgzMywgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDlkLCAweDgwLCAweGE4LCAweGIxLCAweDk0LCAweDMzLCAweDAwLCAweDAwLAorCTB4YTMsIDB4ODAsIDB4MTQsIDB4YzYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4YzYsCisJMHg4MywgMHhmNCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMiwgMHg0ZiwgMHg4MywgMHgwNCwgMHgwMCwgMHgwMCwKKwkweDdmLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDAxLCAweDAwLCAweGM2LAorCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTcsIDB4YTMsIDB4MDEsIDB4MDAsCisJMHg3ZiwgMHg4MCwgMHgxZiwgMHg1YywgMHg5NywgMHg1MywgMHgwMCwgMHgwMCwgMHg5ZSwgMHg4MywgMHgxZCwgMHhjNiwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQzLCAweDgxLCAweGYwLCAweDAxLCAweDAwLAorCTB4YTksIDB4ODAsIDB4MDAsIDB4NDAsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDgxLCAweDAwLCAweGNhLCAweDYzLCAweGIzLCAweDAwLCAweDAwLCAweDJkLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODEsIDB4MDAsIDB4NGQsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxZSwgMHg4MSwgMHgwMCwgMHg0ZSwgMHg2MSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwZCwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE0LCAweDgxLCAweDAwLCAweDRjLCAweDgzLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgzZCwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDhkLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBkLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHg5YiwgMHhiMywgMHgwMCwgMHgwMCwgMHg0NiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4NTUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDU5LCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTksIDB4ODEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MywgMHgwMCwgMHhiYiwKKwkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweGRiLCAweDgxLCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLAorCTB4ZDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRhLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4NzcsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg4MSwgMHgwMCwgMHg0ZCwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4MSwgMHgwMCwgMHg0ZSwKKwkweDYxLCAweGIxLCAweDAwLCAweDAwLCAweDBkLCAweDgxLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTUsIDB4ODEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODEsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MCwgMHgwMCwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGUyLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLAorCTB4NGQsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg4ZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxNCwgMHgyZSwgMHhiYiwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVlLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsCisJMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDc1LCAweDgwLCAweDAwLCAweGNhLCAweGE3LCAweDMzLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGUsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg0ZSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHg0YywKKwkweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDA4LCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGU4LCAweDgwLCAweDIyLCAweDQyLAorCTB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ODAsIDB4MjIsIDB4NDEsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg4MCwgMHgxZSwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4MCwgMHgxZiwgMHhjYSwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MDAsIDB4NDIsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0MSwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAorCTB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDhmLCAweGIzLCAweDAwLCAweDAwLAorCTB4NzgsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MmYsIDB4OWMsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4MSwgMHgwMCwgMHg0MCwgMHgzOSwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAwLCAweDJmLCAweDliLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDgxLCAweDAwLCAweDQwLAorCTB4MzcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OWEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNywgMHg4MSwgMHgwMCwgMHg0MCwgMHgzNSwgMHgzMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZiwgMHg5OSwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDgxLCAweDAwLCAweDQwLCAweDMzLCAweDMzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4YWUsIDB4NDcsIDB4YzksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDAwLCAweDQwLAorCTB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg2MywgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MSwgMHgyOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDIsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwKKwkweDA1LCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDgxLCAweDAwLCAweDU4LAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjAsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MSwgMHhhMiwgMHg0MCwKKwkweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHhlMSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwZCwgMHg4MSwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDExLCAweDgxLCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMSwgMHg4MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODEsIDB4MDAsIDB4YmIsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg2MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDE3LCAweDgxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDk1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MWYsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MmYsIDB4NDAsCisJMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4MSwgMHgyMiwgMHg0MCwgMHg5NSwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDg0LCAweDYwLCAweDQwLCAweDk1LCAweDgzLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweGYwLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODEsIDB4MzYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjUsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNywgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDQxLAorCTB4NDMsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg4MSwgMHgwMCwgMHg0MSwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg4MSwgMHhhMiwgMHg0MiwKKwkweDY3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDY3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MmYsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2NSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFhLCAweGNhLCAweDY5LCAweDk3LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDI2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMCwgMHg0MywKKwkweDk1LCAweDZmLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDgwLCAweGNhLCAweDY3LCAweDMzLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MjIsIDB4NDAsIDB4NjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NmYsCisJMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDM1LCAweDgwLCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHg0MiwgMHg4MSwgMHhhMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDk1LCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhjMywgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg4MSwgMHgyMiwgMHg1YiwgMHg5NSwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODEsIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHhmNSwgMHgwMCwgMHhjYSwgMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweGZkLCAweDAwLCAweGNhLCAweDk1LCAweDliLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4N2YsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4Y2EsCisJMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGM1LCAweGIxLCAweDAwLCAweDAwLCAweGRmLCAweDZmLCAweDAwLCAweGNhLAorCTB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjNywgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMiwgMHg1ZiwKKwkweDk1LCAweDdmLCAweDAwLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCisJMHhjNywgMHhiMSwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHhjOSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGNiLCAweGIxLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLAorCTB4Y2QsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg0MiwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDYwLCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2MiwgMHg4MSwgMHg5ZiwgMHg4NSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg4MSwgMHhhMiwgMHg0ZiwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDIsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDAsIDB4NDEsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweGM0LCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAorCTB4NzUsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDcyLCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3ZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDBjLCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAorCTB4N2EsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDAxLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDBjLCAweDAwLCAweDQzLAorCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4N2UsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDdmLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MTMsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODcsIDB4ODEsIDB4MjIsIDB4NDMsCisJMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDg0LCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg4YywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAorCTB4ODksIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4NDEsCisJMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHg4ZiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwKKwkweDA4LCAweGIxLCAweDAwLCAweDAwLCAweGM4LCAweDE0LCAweDJlLCAweGJiLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAorCTB4OTIsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg4MSwgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweGIwLCAweDgxLCAweDIyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDExLCAweDgwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHg4MSwgMHgyMiwgMHg0YSwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDljLCAweDgxLCAweDIyLCAweDRkLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OWUsIDB4ODEsIDB4MjIsIDB4NGYsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDgxLCAweDIyLCAweDRlLCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4YzksIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODEsIDB4MjIsIDB4NDIsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWIsIDB4ODEsIDB4MjIsIDB4NDUsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZCwgMHg4MSwgMHgyMiwgMHg0NCwKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODEsIDB4MjIsIDB4NDMsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgyMiwgMHg0MiwKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM5LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJjLCAweDgxLCAweDIyLCAweDRiLAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGFmLCAweGIzLCAweDAxLCAweDAwLCAweGM1LCAweDgxLCAweDIyLCAweDQwLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAorCTB4YzUsIDB4ODEsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhhZSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGM0LCAweDgxLCAweDIyLCAweDQyLCAweDg3LCAweDdjLCAweDAwLCAweDAwLCAweGM1LCAweDgxLCAweDAwLCAweDBiLAorCTB4N2QsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4N2QsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMiwgMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGE1LCAweGIzLCAweDAxLCAweDAwLCAweDc1LCAweDgwLCAweDAwLCAweGNhLCAweGE3LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhjYSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweGIxLCAweDAxLCAweDAwLCAweGNjLCAweDgxLCAweDlmLCAweDg1LAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhkMSwgMHg4MSwgMHgxNCwgMHhmNywgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg4MSwgMHhhMiwgMHg0OSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4ODEsIDB4MTUsIDB4ZjgsIDB4ODEsIDB4MTQsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ODEsIDB4YTIsIDB4NGEsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweGQ2LCAweDgxLCAweGEyLCAweGM4LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlZiwgMHhiMywgMHgwMSwgMHgwMCwgMHhkOCwgMHg4MSwgMHg0MiwgMHg0MCwKKwkweGYxLCAweDMzLCAweDAwLCAweDAwLCAweDA0LCAweDgxLCAweDAwLCAweDQwLCAweDY4LCAweDk3LCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MDAsIDB4YmIsIDB4NmIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4YmIsCisJMHhiMSwgMHhiMywgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDE0LCAweDJlLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweGEyLAorCTB4YTAsIDB4OGIsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MDAsIDB4NDMsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHhkYSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDg5LCAweGYwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4OCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGQ4LCAweDAwLCAweDAwLCAweDQzLAorCTB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGE1LCAweGMzLCAweDAxLCAweDAwLCAweGY4LCAweDgxLCAweDIyLCAweDQ0LCAweDg5LCAweDUwLCAweDAwLCAweDAwLAorCTB4ZjgsIDB4ODEsIDB4MjIsIDB4NDQsIDB4OGIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODEsIDB4YTIsIDB4NTAsCisJMHhhNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhhNSwgMHhlMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDc1LCAweDgwLCAweDAwLCAweGJiLAorCTB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MTQsIDB4MmUsIDB4ZDIsIDB4OTUsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZjUsIDB4ODEsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODEsIDB4YTIsIDB4ZjIsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg4MSwgMHgwMCwgMHg0MCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4YmIsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGIzLCAweDczLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUwLCAweGI1LCAweGYzLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YjMsIDB4ZjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksCisJMHhiMywgMHhmYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhhNiwgMHhiOCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGYyLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQyLAorCTB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlYiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDksIDB4ODIsIDB4MTAsIDB4ZGEsIDB4YjUsIDB4NmIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MDAsIDB4NDEsCisJMHgyZCwgMHg4MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZCwgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLAorCTB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsCisJMHgwNiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHg0MiwKKwkweDJkLCAweDAxLCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjYsIDB4MDEsIDB4MDAsIDB4NDIsIDB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgxNSwgMHg4MiwgMHgwNCwgMHg0MCwgMHgyZCwgMHgwMSwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDExLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyNSwgMHgwMSwgMHgwMCwgMHg0MiwgMHgyZCwgMHgwMSwgMHgwMSwgMHgwMCwgMHhmMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGI5LCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDJkLCAweDgxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDI5LCAweDgyLCAweGEyLCAweDU0LAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MiwgMHhhMiwgMHgwNiwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDcsIDB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4MiwgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweDNhLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY1LCAweGIxLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsCisJMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsCisJMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQ4LCAweGIyLCAweDMzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDgyLCAweGEyLCAweDQxLCAweDhmLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAorCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ZGEsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZmLCAweDgyLCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDgyLCAweDIyLCAweDQ1LAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NmQsIDB4ODIsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODIsIDB4MjIsIDB4MjAsCisJMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGRiLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcyLCAweDgyLCAweDIyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODIsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MSwgMHgwMCwgMHg1OCwKKwkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDU0LCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDQ2LCAweDAwLCAweDAwLCAweDQwLAorCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NGEsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDk1LCAweGMwLCAweDAxLCAweDAwLCAweDg1LCAweDgyLCAweGEyLCAweDQxLAorCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDc1LCAweDgwLCAweDAwLCAweGJiLCAweDg1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODIsIDB4MjIsIDB4NDUsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4OTYsIDB4ODIsIDB4YTgsIDB4YmIsIDB4ZTEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDk4LCAweDgyLCAweGEyLCAweGYyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweGUxLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OWYsIDB4ODIsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhNywgMHg4MiwgMHhhMiwgMHhmYSwgMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweGZjLCAweDgxLCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLCAweGE3LCAweDgyLCAweGEyLCAweGZhLAorCTB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsCisJMHhhYSwgMHg4MiwgMHgyMiwgMHhmYSwgMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhhNywgMHg4MiwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDY5LCAweDkzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODEsIDB4MDAsIDB4NTgsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGY2LCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDE2LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ZmEsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKKwkweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiNCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGI4LCAweDgyLCAweGEyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLCAweGZjLCAweDE1LCAweDIwLCAweDIwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkYiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4MiwgMHgyMiwgMHg0MCwKKwkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweGJhLCAweDgyLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODEsIDB4MDAsIDB4NTgsCisJMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzIsIDB4ODIsIDB4MjIsIDB4NTAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODEsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDgxLCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4MSwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsCisJMHhiNCwgMHg4YiwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRhLAorCTB4YjQsIDB4ZjcsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4ODIsIDB4MjIsIDB4NTAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ODIsIDB4MDAsIDB4NTAsCisJMHhiNSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgzMSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMiwgMHgzMywgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDM0LCAweDM1LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MzYsIDB4MzcsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzgsIDB4MzksIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0MSwgMHg0MiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQzLCAweDQ0LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQ1LCAweDQ2LCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDcsIDB4NDgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0OSwgMHg0YSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY3LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZTcsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MmUsIDB4MDYsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKKwkweGVhLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlZCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MmQsIDB4MDYsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKKwkweGYzLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGY5LCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDgyLCAweDIyLCAweDcwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHg2NywgMHgwMCwgMHhhNiwgMHhlMCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgyMywgMHgwMCwgMHg3MCwKKwkweGUxLCAweDlhLCAweDAxLCAweDAwLCAweGNkLCAweGVmLCAweDAwLCAweGE2LCAweGUyLCAweGIyLCAweDAxLCAweDAwLAorCTB4ODksIDB4YWIsIDB4MDAsIDB4NzEsIDB4ZTMsIDB4OWEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTgsIDB4MDAsIDB4YTYsCisJMHhlNCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhkYywgMHgwMCwgMHg3MiwgMHhlNSwgMHg5YSwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDEwLCAweDAwLCAweGE2LCAweGU2LCAweGIyLCAweDAxLCAweDAwLCAweDc2LCAweDU0LCAweDAwLCAweDczLAorCTB4ZTcsIDB4OWEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4YzMsIDB4MDAsIDB4YTYsIDB4ZTgsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHhlMSwgMHgwMCwgMHg3NCwgMHhlOSwgMHg5YSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0YSwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZCwgMHg4MywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDE2LCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGZjLCAweDE2LCAweDJhLCAweDQ3LAorCTB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTgsIDB4ZTUsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGEzLCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDNkLCAweDQ2LCAweDhkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCisJMHg0MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDE2LCAweDgzLCAweGEyLCAweDQxLCAweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCTB4ZWIsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhlZiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKKwkweGYxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGYzLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDgzLCAweGEwLCAweDUwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDBkLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsCisJMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsCisJMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweGE0LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg0MSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDA1LCAweDAwLCAweDAwLCAweDc1LCAweDg5LCAweGU0LCAweDAxLCAweDAwLCAweDFiLCAweDAwLCAweDAwLCAweDc1LAorCTB4ODUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgzZCwgMHg4MywgMHhhMywgMHg1MywgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4YiwgMHhhNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDRjLCAweDgzLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NDIsIDB4ODMsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkweDg5LCAweGE0LCAweDAxLCAweDAwLCAweDRjLCAweDgzLCAweDAwLCAweDc4LCAweDg5LCAweGE0LCAweDAwLCAweDAwLAorCTB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4M2YsIDB4ODMsIDB4YWEsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAorCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkweDhiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAorCTB4NGMsIDB4ODMsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDUzLCAweDgzLCAweGEzLCAweDUzLAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODIsIDB4NWEsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg3OSwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4NTgsIDB4ODMsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDksIDB4NmUsIDB4MDAsIDB4YTYsCisJMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHhlYiwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDNiLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODMsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4ZiwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYywgMHhiYywgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NjIsIDB4Y2EsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4YzEsIDB4MDAsIDB4NDIsCisJMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGYzLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlZiwgMHhmNiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGVlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweGVkLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZWEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDgzLCAweDJhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LAorCTB4ZTEsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ZTMsIDB4YzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHhlNSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwKKwkweGU3LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweGU5LCAweGMyLCAweDAxLCAweDAwLAorCTB4MTMsIDB4ODMsIDB4ODEsIDB4NDEsIDB4OGQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4MywgMHhhMiwgMHg0YiwgMHhiNywgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDlkLCAweDgzLCAweGEyLCAweDQxLCAweDJmLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5YywgMHg4MywgMHgyMiwgMHg0MCwKKwkweDhmLCAweDZjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4ZmUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5YywgMHg4MywgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDVlLCAweDE2LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDdjLCAweDE2LCAweDIwLCAweGY2LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg4MywgMHgyMiwgMHg0ZiwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDgyLCAweDgzLCAweDIyLCAweDQwLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ODYsIDB4ODMsIDB4MDAsIDB4NTQsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4ODQsIDB4ODMsIDB4MjIsIDB4NDIsCisJMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDg2LCAweDgzLCAweDIyLCAweDQxLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OWEsIDB4ODMsIDB4MjIsIDB4NTEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgzNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4OTUsIDB4ODMsIDB4YTIsIDB4NDAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0OCwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDRiLAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk5LCAweDgzLCAweDIyLCAweDQwLAorCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4OWQsIDB4ODMsIDB4MDAsIDB4NTQsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhmZSwKKwkweDdmLCAweGQ5LCAweDAxLCAweDAwLCAweDlkLCAweDgzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDQxLCAweDk5LCAweGIzLCAweDAxLCAweDAwLCAweGE4LCAweDgzLCAweDIyLCAweDQ0LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4ODMsIDB4MjIsIDB4NDgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhYSwgMHg4MywgMHgyMiwgMHg0YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNCwgMHg4MywgMHgyMiwgMHg1MCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGI1LCAweDgzLCAweDIyLCAweDU0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4YjcsIDB4ODMsIDB4MjIsIDB4NTgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmMsIDB4ODMsIDB4MjIsIDB4NWMsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLAorCTB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMywgMHg4MywgMHgwMSwgMHgwMCwgMHhhZSwgMHg4MywgMHhhMiwgMHg0MiwKKwkweDA1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MjIsIDB4Y2EsIDB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDUsCisJMHhmMywgMHg5MywgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMCwgMHg0MywgMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDg0LCAweDgwLCAweGNhLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDAxLAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCisJMHg1YywgMHgwMSwgMHgwMCwgMHhiYywgMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywKKwkweGIxLCAweGIzLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4YTIsIDB4NDAsCisJMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDgzLCAweGE4LCAweGIxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweGI4LCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweGNiLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4YmYsIDB4ODMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGNhLCAweDgzLCAweDkxLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhhLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHhjOCwgMHg4MywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MywgMHg1NiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGYzLCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4MywgMHhhMiwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4ODMsIDB4OTEsIDB4ODEsCisJMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI2LCAweDlmLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweGQ4LCAweDgzLCAweGE2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODMsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OWYsIDB4MDAsIDB4NDEsCisJMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDE0LCAweDJmLCAweDQwLCAweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ZjgsIDB4MDAsIDB4NDgsIDB4OTAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4ODMsIDB4MjIsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0NywgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhkLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZjUsIDB4ODMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODMsIDB4YTIsIDB4NDEsCisJMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhlNSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDQ3LCAweDg0LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4OWYsIDB4MDAsIDB4NDcsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHg4MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDUwLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZmIsIDB4ODMsIDB4MjAsIDB4MTgsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLCAweGZlLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDU1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDUwLCAweGQzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NGYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg0ZSwgMHhkMywgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDZjLCAweDAzLCAweDAwLCAweDQyLCAweDgwLCAweDMwLCAweDAxLCAweDAwLCAweGYwLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODQsIDB4MjIsIDB4YTcsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg0OSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4YTAsIDB4OTQsIDB4MmUsIDB4NDMsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHg4NCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDUwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGFjLCAweDk0LCAweDJlLCAweDQzLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwZCwgMHg4NCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweDQwLCAweGEzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU5LCAweDQxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4NDEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0MSwKKwkweDgxLCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MTMsIDB4ODQsIDB4MDAsIDB4NTAsIDB4ODUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODQsIDB4YTIsIDB4NDEsCisJMHgwMSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4NCwgMHgyMiwgMHg1OCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDc4LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDFjLCAweDg0LCAweGE4LCAweGIxLAorCTB4OWMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgwZSwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4NCwgMHgzMywgMHhjNCwKKwkweDgxLCAweDMwLCAweDAwLCAweDAwLCAweDI0LCAweDg0LCAweGExLCAweGFkLCAweDlkLCAweDIwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MTMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NGUsCisJMHg1YSwgMHg4MywgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDJjLCAweDg0LCAweDIyLCAweGFiLCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDJhLCAweDg0LCAweGEyLCAweDQwLAorCTB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODQsIDB4MjIsIDB4NWYsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgyMSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4NCwgMHgyMiwgMHg1ZSwKKwkweDU3LCAweDdkLCAweDAwLCAweDAwLCAweDg0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzEsIDB4ODQsIDB4MjIsIDB4NTQsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYywgMHg4NCwgMHhhOCwgMHhiMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGZhLCAweDg1LCAweGEyLCAweDVmLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDVjLCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzMsIDB4ODQsIDB4YTIsIDB4NWYsIDB4NTksIDB4MjcsIDB4MDAsIDB4MDAsCisJMHgzNSwgMHg4NCwgMHhhMiwgMHg1YywgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4NCwgMHhhMiwgMHg1ZSwKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDQ2LCAweDg0LCAweDIyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4NDcsIDB4ODQsIDB4MzcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg4NCwgMHhhOCwgMHhiMSwgMHgzNiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDM4LCAweDg0LCAweGE4LCAweGIxLAorCTB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgyOSwgMHg4NiwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0NywgMHg4NCwgMHgzNCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4M2QsIDB4ODQsIDB4YTgsIDB4YjEsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODQsIDB4NTIsIDB4MjEsCisJMHgxMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg0MSwgMHgyZiwgMHhjMywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDNmLCAweDAwLCAweDA5LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4MDEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ODcsIDB4ODQsIDB4MDAsIDB4MzQsIDB4MTMsIDB4ODQsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgzZiwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhlNSwgMHg4NCwgMHgwMCwgMHg0MywKKwkweDAxLCAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NDcsIDB4ODQsIDB4MzMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MTMsIDB4NGUsCisJMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwgMHhlNiwgMHg4OSwgMHhhMiwgMHg0OCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDRlLCAweDg0LCAweDIyLCAweDU5LCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDc5LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NGEsIDB4ODQsIDB4MjgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHg0YiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4NCwgMHgyMSwgMHhhYywKKwkweDljLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDFmLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTAsIDB4NWYsIDB4OWQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHg1OCwgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4NCwgMHgyMiwgMHg1YSwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDdhLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDUzLCAweDg0LCAweGE4LCAweGIxLAorCTB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4MTEsIDB4YzksIDB4MDAsIDB4MDAsCisJMHg1YywgMHg4NCwgMHhhMiwgMHg0MCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHg1YywgMHg4NCwgMHgyMiwgMHg0NCwKKwkweDkzLCAweDdmLCAweDAwLCAweDAwLCAweDU4LCAweDg0LCAweDQyLCAweGE1LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4NWIsIDB4ODQsIDB4YTIsIDB4NDAsIDB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ODQsIDB4MWEsIDB4NDAsCisJMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDlhLCAweDgwLCAweGEyLCAweDQwLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDliLCAweDg5LCAweDIyLCAweDQ0LAorCTB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4OTIsIDB4ODksIDB4MjIsIDB4NDAsIDB4NjUsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHg4OSwgMHhhMiwgMHg1YiwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OSwKKwkweDMzLCAweDdkLCAweDAwLCAweDAwLCAweDY2LCAweDg0LCAweDIyLCAweDQ4LCAweDMzLCAweDdkLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4MDEsIDB4MDAsIDB4OTksIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5OCwgMHgyZiwgMHg0MCwgMHgzMywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDY5LCAweDg0LCAweDIyLCAweDQwLAorCTB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NjksIDB4ODQsIDB4MjIsIDB4NDAsIDB4ODEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhlZiwgMHg4OSwgMHgxZiwgMHhhNSwgMHg4MiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDQwLCAweDhiLCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDZjLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZmLCAweDg0LCAweDMzLCAweDQwLAorCTB4MWYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MTMsIDB4NGUsIDB4NWEsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg3MywgMHg4NCwgMHhhMCwgMHhjZSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg4NSwgMHg4NCwgMHhhMCwgMHhjZCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDljLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4ODQsIDB4MjIsIDB4YjUsCisJMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgyZiwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDc3LCAweDg0LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGI0LAorCTB4NjUsIDB4OTcsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTUsIDB4MmUsIDB4NDAsIDB4NjksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDg0LCAweGE4LCAweGExLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4NWMsIDB4ODQsIDB4MDAsIDB4ODgsIDB4OWUsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg1YywgMHg4NCwgMHhhMiwgMHg0MSwgMHg2NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHg1YywgMHg4NCwgMHgwMCwgMHg2ZiwKKwkweGRiLCAweDkxLCAweDAwLCAweDAwLCAweDg1LCAweDg0LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NWMsIDB4ODQsIDB4MWEsIDB4NDAsIDB4OTMsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4MDAsIDB4MDksCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywgMHgwYywgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDg0LCAweGE2LCAweDQyLCAweDEzLCAweDYwLCAweDAwLCAweDAwLCAweDNmLCAweDk3LCAweDAwLCAweDk1LAorCTB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODQsIDB4NDUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YywgMHg4NCwgMHhhOCwgMHhiMSwKKwkweDBjLCAweDMwLCAweDAwLCAweDAwLCAweDQ2LCAweDk3LCAweDFkLCAweDEwLCAweDk0LCAweDMwLCAweDAxLCAweDAwLAorCTB4OTEsIDB4ODQsIDB4MDAsIDB4NTgsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTcsIDB4MDAsIDB4OTUsCisJMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJkLCAweGYwLAorCTB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg5OCwgMHg4NCwgMHgyMywgMHg0YiwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4NCwgMHgyMiwgMHg0YiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4OWIsIDB4ODQsIDB4ODMsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDlkLCAweDg0LCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4NDcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODQsIDB4MjIsIDB4NTUsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MywgMHhkMSwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDk3LCAweGUwLCAweDAxLCAweDAwLAorCTB4YTMsIDB4ODQsIDB4MDAsIDB4NGIsIDB4NDQsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDBhLCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZjAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDI4LCAweDNjLCAweDQ2LCAweDBkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODQsIDB4YTIsIDB4ZjgsCisJMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg4NCwgMHgyMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGFiLCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODQsIDB4YTIsIDB4ZjgsIDB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhYywgMHg4NCwgMHhhMiwgMHhmOCwgMHgxMCwgMHg2YywgMHgwMCwgMHgwMCwgMHhhYywgMHg4NCwgMHhhMiwgMHhmMCwKKwkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweGJkLCAweDg0LCAweDIyLCAweDU4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YjQsIDB4ODQsIDB4NDcsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4NCwgMHhhMiwgMHhmMywgMHg3NCwgMHgwNiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweGU2LCAweDk1LCAweDAxLCAweDAwLCAweGJkLCAweDg0LCAweDFmLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzZiwgMHgwMCwgMHgxZiwgMHhmMywgMHgwYywgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4YmIsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmQsIDB4ODQsIDB4NDcsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNSwgMHg4NCwgMHgxZiwgMHg0MSwgMHgyZCwgMHhjMywgMHgwMCwgMHgwMCwKKwkweGMzLCAweDg0LCAweDIyLCAweDU4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjMSwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjMywgMHg4NCwgMHg0NywgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVjLCAweDg0LCAweDFmLCAweDQxLCAweDJkLCAweGMzLCAweDAwLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTYsIDB4MDAsIDB4MDcsCisJMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMywgMHg4NCwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGNiLCAweDg0LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ODQsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHg5NiwgMHgwMCwgMHg1ZiwgMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkMSwgMHg4NCwgMHgyMiwgMHg0MCwKKwkweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTYsIDB4MDAsIDB4NTIsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGRiLCAweDg0LCAweGEyLCAweDVhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkYiwgMHg4NCwgMHgyMiwgMHgyMCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhkOCwgMHg4NCwgMHg5YywgMHgwZiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTgsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNlLCAweDk5LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODQsIDB4ODIsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg4YiwgMHgwMCwgMHg0NSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhhNiwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGUyLCAweDg0LCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLAorCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NGIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NGIsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5NywgMHgwMCwgMHgwMywgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGU3LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHg1MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTksIDB4ODQsIDB4YTgsIDB4MDAsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWUsIDB4MDcsIDB4MmUsIDB4NDcsIDB4OTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODQsIDB4MjIsIDB4MTcsCisJMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmZCwgMHg4NCwgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGZkLCAweDg0LCAweDIzLCAweGEyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweDUyLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgyZCwgMHgwMCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCisJMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDg1LCAweDAwLCAweDVjLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDExLCAweDg1LCAweDIyLCAweDQzLAorCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHg4NSwgMHgyMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNiwgMHg4NSwgMHg0NSwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDg1LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MWQsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHhmNiwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDBlLCAweDg1LCAweGEyLCAweGE2LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTEsIDB4ODUsIDB4MDAsIDB4ZjIsIDB4M2EsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4ODUsIDB4YTIsIDB4NGIsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDE1LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFjLCAweDg1LCAweDIyLCAweDRhLAorCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODUsIDB4MjIsIDB4NDgsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDg2LCAweDg4LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTQsIDB4M2QsIDB4NDIsCisJMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg4NSwgMHhhMiwgMHg0MiwgMHhlMCwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweGY3LCAweDg1LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxYywgMHg4NSwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywKKwkweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQxLCAweDQ3LCAweGMzLCAweDAxLCAweDAwLAorCTB4MjIsIDB4ODUsIDB4MjIsIDB4YTEsIDB4MDksIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4NSwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDViLCAweDg1LCAweGEzLCAweDkyLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGY0LCAweDk4LCAweDAwLCAweDQwLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgxNSwgMHg4YSwgMHgyMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHg4NSwgMHgyMiwgMHg1YywKKwkweDE3LCAweDdjLCAweDAwLCAweDAwLCAweDI5LCAweDg1LCAweDAwLCAweDAwLCAweDJhLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4NSwgMHhhMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ5LCAweDg1LCAweDAwLCAweDVlLAorCTB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhmOCwgMHg5NywgMHgwMCwgMHg0YywgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDE1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHg4NSwgMHhhOCwgMHg1NCwgMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4NSwgMHgwMCwgMHg1ZSwKKwkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLAorCTB4NDgsIDB4ODUsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4YywgMHhjYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDk4LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwOSwKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDg1LCAweDI4LCAweDU0LCAweDE3LCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTgsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHg0YiwgMHg4NSwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwKKwkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLAorCTB4NGUsIDB4ODUsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDRmLCAweDg1LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4NSwgMHgyMiwgMHg0MywKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsCisJMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1OSwgMHg4NSwgMHhhMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGI5LCAweDk0LCAweDAwLCAweDAxLCAweDM4LCAweDQzLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg1ZCwgMHg4NSwgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4NSwgMHgwMCwgMHg0MSwKKwkweDQzLCAweGMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDI3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWYsIDB4ODUsIDB4MzUsIDB4MDEsCisJMHg4NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDY2LCAweDg1LCAweDI4LCAweGIxLCAweDMwLCAweDMwLCAweDAwLCAweDAwLCAweDYwLCAweDg1LCAweDIyLCAweDRkLAorCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ODUsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwgMHhmMywgMHg4NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NjYsIDB4ODUsIDB4YTgsIDB4YjEsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODUsIDB4YTIsIDB4NDAsCisJMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHg4NSwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNlLCAweDQzLCAweDI3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDg1LCAweGEzLCAweDBiLCAweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLAorCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyZCwgMHg0MCwKKwkweDM5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDg1LCAweGEyLCAweDQwLCAweDI3LCAweDZjLCAweDAwLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDAsCisJMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3ZiwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MjUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyMCwgMHgwMSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDM3LCAweDk4LCAweDAxLCAweDAwLAorCTB4ODQsIDB4ODUsIDB4MjMsIDB4MDEsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4NSwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDhiLCAweDg1LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4NSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWIsIDB4OTUsIDB4MDAsIDB4NDMsIDB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWUsIDB4ODUsIDB4MjIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5NSwgMHg4NSwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MjUsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgyZCwgMHg0YywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDM3LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAorCTB4ODQsIDB4ODUsIDB4MDAsIDB4NDUsIDB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ODUsIDB4YTMsIDB4MTIsCisJMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHhhMSwgMHg4NSwgMHg2OCwgMHgxYiwgMHgyOCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE0LCAweDg1LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4Y2EsIDB4ODUsIDB4MjIsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDJkLCAweDE0LCAweDEyLCAweGMwLCAweDAxLCAweDAwLCAweGMzLCAweDg1LCAweGEyLCAweDE0LAorCTB4MzYsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODUsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4NSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDVjLAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgyYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDM3LCAweDk4LCAweDAxLCAweDAwLCAweGI5LCAweDg1LCAweDIzLCAweDAxLCAweDM2LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzQsIDB4ODUsIDB4MjIsIDB4MWIsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgxNSwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YzAsIDB4ODUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODUsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDg0LCAweDg1LCAweGEyLCAweDQwLCAweDI1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MzksIDB4YzAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MzksIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgyNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDg0LCAweDg1LCAweDAwLCAweGYwLCAweDMwLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDAsIDB4ODUsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGNkLCAweDg1LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyZSwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGQ0LCAweDg1LCAweDIyLCAweDUwLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTcsCisJMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkNywgMHg4NSwgMHhhMiwgMHg0MSwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweGRhLCAweDg1LCAweDIyLCAweDQzLAorCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxNiwgMHgwMCwgMHgyMCwgMHgxZCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYywgMHg4NSwgMHhhMywgMHg0MCwKKwkweDI3LCAweDZjLCAweDAwLCAweDAwLCAweGRlLCAweDg1LCAweDYwLCAweDVmLCAweDE3LCAweDkwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODQsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTMsCisJMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NywgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweDE1LCAweDhhLCAweGEyLCAweDVmLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiOSwgMHg5NCwgMHgwMCwgMHgwMSwgMHgzOCwgMHg0MywgMHgwMSwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU4LCAweDg1LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODUsIDB4MjIsIDB4MTMsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgzZCwgMHg0MywgMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGYwLCAweDg1LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVhLCAweDg1LCAweDAwLCAweDQxLAorCTB4ODMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4NzQsIDB4OTYsIDB4MDAsIDB4NTIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NiwgMHgwMCwgMHgwNywKKwkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweDA1LCAweDg2LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODYsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4NiwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDBkLCAweDg2LCAweGEyLCAweDVhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwZCwgMHg4NiwgMHgyMiwgMHgyMCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYSwgMHg4NiwgMHg5YywgMHgwZiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTgsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNlLCAweDk5LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg4NiwgMHgyMiwgMHgzYSwgMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDQwLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNywgMHg4NiwgMHhhMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDBhLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDQwLAorCTB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzOCwgMHg5NywgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4NiwgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwKKwkweGY1LCAweDk3LCAweDAwLCAweDRiLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDRjLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODYsIDB4ODMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHg4NiwgMHg4NSwgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDQzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YTEsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGU3LCAweDk0LCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmUsIDB4ODYsIDB4NDYsIDB4NDcsCisJMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDg2LCAweGE4LCAweDFiLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDFlLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NCwgMHg4NiwgMHgwMSwgMHhmYiwKKwkweDA4LCAweDMwLCAweDAwLCAweDAwLCAweGE3LCAweDg2LCAweDg3LCAweGZiLCAweDIyLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDk2LCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLCAweDRhLCAweDg2LCAweDIyLCAweDQxLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2UsIDB4ODYsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4NiwgMHgyMiwgMHg1ZiwKKwkweDBmLCAweDdjLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA0LCAweDdlLCAweDg5LCAweDAxLCAweDAwLAorCTB4NDIsIDB4ODYsIDB4YTYsIDB4NWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHgwNSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4ODYsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDUyLCAweDg2LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDRmLCAweDg2LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU2LCAweDg2LCAweDIxLCAweDA0LCAweDgwLCAweDIwLCAweDAwLCAweDAwLCAweDU3LCAweDg2LCAweDAwLCAweDQwLAorCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3NiwgMHg4NiwgMHgwMCwgMHg0MywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg4NiwgMHgwMCwgMHhmYiwKKwkweDIyLCAweGIwLCAweDAwLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjYsIDB4OGIsIDB4MDAsIDB4NGUsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODYsIDB4MDAsIDB4NWEsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4NiwgMHgwMCwgMHg0NywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGE4LCAweDhhLCAweDAwLCAweDUzLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDU2LAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4YiwgMHhhMCwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg2NSwgMHg4NiwgMHhhMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDY0LCAweDg2LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NjYsIDB4OGIsIDB4MDAsIDB4NTMsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NTQsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4NiwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDY4LCAweDg2LCAweGEyLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDVkLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2YywgMHg4NiwgMHhhMCwgMHg5MSwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDY2LCAweDhiLCAweDAwLCAweDVlLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3MCwgMHg4NiwgMHgyMCwgMHg5MSwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDY2LCAweDhiLCAweDAwLCAweDU0LCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHhhMCwgMHgwYSwKKwkweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDhhLCAweGEwLCAweDQyLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDU0LAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAorCTB4ODMsIDB4ODYsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4ODYsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHg5MCwgMHg4NiwgMHhhMiwgMHg1NCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4NiwgMHgyMiwgMHg1NSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4ODAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODYsIDB4MjIsIDB4NTMsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRiLAorCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YmMsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHg4NiwgMHgyMiwgMHg0MywgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDgwLCAweDg2LCAweGEyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLAorCTB4N2MsIDB4OTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTEsIDB4ODYsIDB4NDMsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4NiwgMHhhMCwgMHhmMCwgMHgzMCwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDg2LCAweDg2LCAweDFiLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAorCTB4MzEsIDB4YzMsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg4NiwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDY2LCAweDk2LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDE4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDBjLAorCTB4ZTAsIDB4OTksIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4NiwgMHgzMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4YTEsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweGIxLCAweDg2LCAweDIyLCAweDQ2LCAweDIzLCAweDdjLCAweDAwLCAweDAwLAorCTB4YWQsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4NiwgMHgyMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGIxLCAweDg2LCAweDIyLCAweDQyLAorCTB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhiMSwgMHg4NiwgMHg0NywgMHgxYiwgMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQxLCAweDQxLCAweGMzLCAweDAxLCAweDAwLAorCTB4ZTAsIDB4ODYsIDB4MjMsIDB4OTIsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ODYsIDB4YTIsIDB4NDUsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NiwgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDE3LCAweDAwLCAweDAwLCAweGQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjQsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4NiwgMHgyMiwgMHgwOCwKKwkweDQwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4MDcsIDB4MDAsIDB4MTIsIDB4MjQsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YmEsIDB4ODYsIDB4YWEsIDB4NDEsCisJMHgyNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGRhLCAweDg2LCAweDI2LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweGM3LCAweDg2LCAweGEyLCAweDQwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZDMsIDB4ODYsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDIsCisJMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgyMSwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGNjLCAweDg2LCAweGEyLCAweDQ0LAorCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgyMCwKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4ODYsIDB4YTgsIDB4NDIsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YzUsIDB4ODYsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHg4NiwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZDcsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLAorCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODYsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhYSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDkyLCAweDI1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODYsIDB4MjIsIDB4MDgsCisJMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NiwgMHgwMCwgMHg0MSwgMHgyNywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDgwLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4MGEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGVjLCAweDg2LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgwMCwgMHg0MSwgMHgzZiwgMHhjMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODcsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweGY2LCAweDg2LCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjYsIDB4ODYsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ODYsIDB4YTMsIDB4MDcsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGY5LCAweDg2LCAweGEzLCAweDQwLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAorCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBlLCAweGNjLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGZmLCAweDg2LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMSwgMHgyZCwgMHg0MCwKKwkweDAwLCAweGMwLCAweDAxLCAweDAwLCAweGU3LCAweDg4LCAweDIyLCAweDBmLCAweDQyLCAweDA1LCAweDAwLCAweDAwLAorCTB4MTIsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDEyLCAweDg3LCAweDIyLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg0MiwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLCAweGQxLCAweDg3LCAweGEyLCAweDQ1LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHg1NCwgMHgyOSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHgwYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjQsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmUsIDB4N2YsIDB4MDAsIDB4MDUsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODcsIDB4MjAsIDB4OTQsCisJMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NywgMHgwMCwgMHg5NCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDNkLCAweDg3LCAweDIyLCAweDAxLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDJhLCAweDg3LCAweGEzLCAweDA3LCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MmIsIDB4ODcsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDcsCisJMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzNywgMHg4NywgMHgyMiwgMHg0MCwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDM3LCAweDg3LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDVmLCAweDg3LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDM0LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM5LCAweDg3LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NDIsIDB4ODcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg0MywgMHg4NywgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDg3LCAweDgwLCAweDA4LCAweGYwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHgxZSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgxZiwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4NywgMHhhOCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDdkLCAweDg3LCAweDIyLCAweDBkLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4NTAsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg4NywgMHgwMCwgMHgwZCwgMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorCTB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4NywgMHgyMiwgMHg0MiwKKwkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDVmLCAweDg3LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1NywgMHg4NywgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODcsIDB4MjIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmYiwgMHg5NSwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwZiwKKwkweDFlLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4N2QsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODcsIDB4YTIsIDB4MGQsCisJMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg2YiwgMHg4NywgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjksIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY2LCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDA2LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHg4NywgMHgxZiwgMHhmMCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NywgMHgwMCwgMHg0YywKKwkweDBkLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MjQsIDB4ODcsIDB4MjMsIDB4MDcsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NzksIDB4ODcsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODcsIDB4MDAsIDB4MDMsCisJMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NywgMHgwMCwgMHgwZCwgMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDJlLCAweDE0LCAweDBhLCAweGQwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDUsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgyYSwgMHhmMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHgyMiwgMHg0MCwKKwkweDMxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4ZjYsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg4NywgMHg4NywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDg5LCAweDg3LCAweDIyLCAweDBiLAorCTB4ZWQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDk0LCAweDg4LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRhLCAweDg2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTEsIDB4ODcsIDB4MjIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHg0MywgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDkxLCAweDg3LCAweGEwLCAweDQ2LCAweDBmLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTUsIDB4ODcsIDB4MjIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwZiwgMHhhMiwKKwkweDQyLCAweDMxLCAweDAwLCAweDAwLCAweDk4LCAweDg3LCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg5NSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDliLCAweDg3LCAweGEwLCAweDQxLAorCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHg4NywgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMCwgMHg4NywgMHhhMCwgMHg0MywKKwkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweGEwLCAweDg3LCAweDIwLCAweDQ1LCAweDg5LCAweDZjLCAweDAwLCAweDAwLAorCTB4YTAsIDB4ODcsIDB4YTAsIDB4NDEsIDB4MGUsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDg3LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweGE5LCAweDg3LCAweDIyLCAweDQ4LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTIsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHg0OCwgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhNywgMHg4NywgMHg5MCwgMHg0OCwKKwkweDkyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCisJMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDE0LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4Y2QsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4ODcsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGI5LCAweDg3LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNiwgMHg4NywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YmMsIDB4ODcsIDB4ODcsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5NSwgMHgwMCwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMSwgMHgwMCwKKwkweGJlLCAweDg3LCAweGEyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDUyLCAweDg5LCAweDAwLCAweDE3LAorCTB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjMSwgMHg4NywgMHhhMCwgMHgwNywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YzUsIDB4ODcsIDB4OTAsIDB4ZjIsCisJMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE0LAorCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MmIsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGNmLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjYywgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE3LAorCTB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4NTIsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5MCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkNSwgMHg4NywgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDUsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LCAweDBhLCAweGM4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LAorCTB4MGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4OCwgMHgyMiwgMHgwMSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4YTQsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg4NywgMHhhMywgMHgwNywgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGViLCAweDg3LCAweDY4LCAweDAxLCAweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDA3LAorCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmQsIDB4ODcsIDB4MjIsIDB4NDAsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhmNywgMHg4NywgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgzNywgMHg4OCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmOSwgMHg4NywgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDg4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDg3LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MTksCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDBmLCAweDAwLCAweDAwLCAweGYyLCAweDNhLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4M2IsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg4OCwgMHgyMywgMHgxYSwKKwkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDAzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MzcsIDB4ODgsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MWQsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgzMCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDMxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4OCwgMHgyMiwgMHgxYSwKKwkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDM3LCAweDg4LCAweDAwLCAweDAxLCAweDM0LCAweGMwLCAweDAwLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4MTQsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDE0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4MTQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgxNywgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzNywgMHg4OCwgMHgwMCwgMHgxYSwKKwkweDEwLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4OCwgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDIxLCAweDg4LCAweDY4LCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLAorCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjQsIDB4ODgsIDB4ODAsIDB4MDgsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDFlLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDFmLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDI4LCAweDg4LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODgsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg1NCwgMHg4OCwgMHgyMiwgMHgwZCwgMHgyNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDJmLCAweDg4LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MzcsIDB4ODgsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDg4LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmYiwgMHg5NSwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwZiwKKwkweDFlLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTMsIDB4ODgsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODgsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDg4LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg4OCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDcsIDB4ODgsIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4NywgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwKKwkweDBmLCAweDgwLCAweDAxLCAweDAwLCAweGU0LCAweDg3LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDUwLCAweDg4LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4ODcsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4MDAsIDB4MGQsCisJMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHg4OCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBhLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJkLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MzgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MjAsIDB4NTAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxZCwKKwkweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLAorCTB4NjYsIDB4ODgsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2NCwgMHg4OCwgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDA1LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxOCwKKwkweDkwLCAweGIwLCAweDAxLCAweDAwLCAweDZlLCAweDg4LCAweGEwLCAweGZjLCAweDkwLCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmMsIDB4ODgsIDB4YTIsIDB4NDEsCisJMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwNSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGMwLCAweDAxLCAweDAwLAorCTB4NzYsIDB4ODgsIDB4NDIsIDB4MzAsIDB4M2QsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWUsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0MSwgMHgzZCwgMHhjMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDQyLCAweGVjLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmUsIDB4MWQsIDB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2NiwgMHgxOCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDgwLCAweDg4LCAweGEwLCAweDQxLCAweDgwLCAweDQ0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZSwgMHgzMCwgMHg4MSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDg0LCAweDg4LCAweDkwLCAweDQwLCAweDkyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4OTMsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHgxOSwKKwkweGU4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDE2LCAweGMwLCAweDAxLCAweDAwLAorCTB4OGEsIDB4ODgsIDB4YTAsIDB4MTksIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyZiwgMHgxZSwgMHgzMiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDhmLCAweDg4LCAweGEyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLCAweDhlLCAweDg4LCAweGEwLCAweDFjLAorCTB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHgzOCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDFlLCAweDk4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MWEsIDB4OTgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4OCwgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWIsIDB4ODgsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk4LCAweDg4LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDFhLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTMsIDB4ODgsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMSwgMHg4OCwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YWQsIDB4ODgsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGFhLCAweDg4LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZiLCAweDk1LCAweDAwLCAweDQxLCAweDIzLCAweDQwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAorCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDE3LCAweGYwLCAweDAxLCAweDAwLCAweGI2LCAweDg4LCAweDkwLCAweGYyLCAweDE2LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCisJMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MmIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjMSwgMHg4OCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YmUsIDB4ODgsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE3LCAweDEwLCAweGRjLCAweDAxLCAweDAwLCAweGRlLCAweDg4LCAweDIyLCAweDQwLAorCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzksIDB4ODgsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhjOCwgMHg4OCwgMHgyMiwgMHg5ZiwKKwkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDg4LCAweDFjLCAweGNjLCAweDAxLCAweDAwLAorCTB4NmIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgzZiwgMHhjMywgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDg4LCAweGEyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLAorCTB4M2UsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODgsIDB4MjIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4OCwgMHgyMCwgMHgxZSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKKwkweDNjLCAweGIwLCAweDAxLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDFlLCAweDI0LCAweDMwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4ODgsIDB4MjIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDg4LCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAwLCAweDAwLCAweDZiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkMSwgMHg4OCwgMHhhMiwgMHgwOCwgMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHgxZiwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwNCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGUzLCAweDg4LCAweGEyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4ODgsIDB4MDAsIDB4MWUsIDB4M2UsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsCisJMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDk5LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ZWYsIDB4ODgsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGVmLCAweDg4LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlYywgMHg4OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDg4LCAweDIyLCAweDA3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MiwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4ODgsIDB4MjAsIDB4OTQsCisJMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhmOCwgMHg4OCwgMHgwMCwgMHg5NCwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGZiLCAweDg4LCAweDIyLCAweDQwLAorCTB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDg5LCAweGE4LCAweDQwLAorCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHg1MiwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwZSwgMHg4OSwgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwZiwgMHg4OSwgMHg2OCwgMHgwNywKKwkweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MWYsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4OSwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OSwgMHgyMiwgMHgwZCwKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDFhLCAweDg5LCAweDIyLCAweDBkLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWUsIDB4ODksIDB4MDAsIDB4MGQsCisJMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweGEyLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDIwLAorCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg4OSwgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgyNywgMHg4OSwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjEsIDB4ODksIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGMyLCAweDk0LCAweDAwLCAweDQzLAorCTB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OSwgMHhhMiwgMHgwZCwKKwkweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDMzLCAweDg5LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzMSwgMHg4OSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MmUsIDB4ODksIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDM4LCAweDg5LCAweDFmLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDA5LCAweDg5LCAweDAwLCAweDRjLAorCTB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgwOSwgMHg4OSwgMHgyMywgMHgwNywgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg0MSwgMHg4OSwgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg4OSwgMHgwMCwgMHgwMywKKwkweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDg5LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLAorCTB4NGUsIDB4ODksIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDRlLCAweDg5LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4OSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTQsIDB4MDAsIDB4NDEsCisJMHgyMywgMHg0MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDUyLCAweDg5LCAweDAwLCAweDQwLCAweDJiLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NywgMHg4OSwgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweDZiLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NGUsIDB4OTksIDB4MDAsIDB4NDEsIDB4M2YsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDk5LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLCAweDE1LCAweDhhLCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMSwgMHg4NCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDBiLCAweDk2LCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLAorCTB4NjYsIDB4ODksIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODksIDB4MjIsIDB4NDIsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY1LCAweDg5LCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ODksIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4OSwgMHgyMiwgMHgyMCwKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDZiLCAweDg5LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNlLCAweDk5LCAweDAwLCAweDA3LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGE4LCAweDhhLCAweGEyLCAweDVmLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4YTgsIDB4MDAsIDB4MmQsIDB4NDMsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4ZSwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDkwLCAweDg4LCAweDAxLCAweDAwLCAweDdkLCAweDg5LCAweDIyLCAweDQ4LAorCTB4OGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHg3ZCwgMHg4OSwgMHgxZiwgMHhmMCwKKwkweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDg5LCAweDIzLCAweDQxLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAorCTB4YTgsIDB4OGEsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDgsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDgyLCAweDg5LCAweDIyLCAweDBhLAorCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4OTksIDB4MDAsIDB4NDAsIDB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg4YSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHg0NSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDhlLCAweDg5LCAweDIyLCAweGYwLCAweDJjLCAweDMwLCAweDAwLCAweDAwLAorCTB4YTMsIDB4MDAsIDB4MmQsIDB4MzAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4ZjMsCisJMHg4MiwgMHhlMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4OSwgMHhhMywgMHg0MSwgMHgyYywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDJkLCAweGYwLAorCTB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhhOCwgMHg4YSwgMHgyMCwgMHg0YywKKwkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweDQxLCAweDk4LCAweGU4LCAweDAxLCAweDAwLAorCTB4YTgsIDB4OGEsIDB4MjAsIDB4ZjAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MjIsIDB4MGEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGE4LCAweDhhLCAweDAwLCAweDQ5LAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5NiwgMHg4OSwgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDk3LCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MWEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4OTcsIDB4ODksIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDg5LCAweDlmLCAweDg1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDlkLCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODQsIDB4MjIsIDB4NDAsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4OSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4NDksIDB4ODQsIDB4MWEsIDB4NWIsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4N2IsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4OSwgMHhhOCwgMHhiMSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGM5LCAweDg5LCAweDFkLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDg5LCAweDIyLCAweDQwLAorCTB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4YmEsIDB4ODksIDB4MjIsIDB4NWIsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGE2LCAweDg5LCAweGE4LCAweGIxLCAweDk0LCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOSwgMHg4OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFiLCAweDg5LCAweDQzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI5LCAweDg5LCAweDIyLCAweDU3LAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg4OSwgMHhhOCwgMHhiMSwgMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGFmLCAweDg5LCAweGE4LCAweGIxLCAweDk2LCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4OSwgMHhhOCwgMHg0YSwgMHg4MCwgMHgzMywgMHgwMCwgMHgwMCwKKwkweGI3LCAweDg5LCAweDIyLCAweDVmLCAweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjUsIDB4ODksIDB4YTgsIDB4NGIsIDB4YWMsIDB4MzMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHhhNSwgMHg4MiwgMHhiMywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4OSwgMHgwMCwgMHhiZSwKKwkweDgzLCAweGMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQwLCAweDgxLCAweGIzLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNywgMHg4OSwgMHhhMiwgMHg0MCwgMHg4NiwgMHgwNCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDljLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQwLAorCTB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NTAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjMywgMHg4OSwgMHg1MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQwLCAweDQ3LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDgsCisJMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHgwNSwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDEsIDB4ZTEsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4OSwgMHgyMiwgMHg1NCwKKwkweDgxLCAweDdjLCAweDAwLCAweDAwLCAweGNiLCAweDg5LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4YjQsIDB4NjksIDB4ZGYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweGRlLCAweDg5LCAweDBmLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHhlMywgMHg4OSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg4LCAweGNjLCAweDAxLCAweDAwLCAweGQ2LCAweDg5LCAweDk5LCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4ODksIDB4OWIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweGRhLCAweDg5LCAweDFmLCAweDQ0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQwLAorCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhlMywgMHg4OSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg1OCwKKwkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgyNiwgMHgwNSwgMHg0NywgMHgzMSwgMHgwMCwgMHgwMCwKKwkweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDQsIDB4ZjAsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLCAweDgxLCAweGM4LCAweDAxLCAweDAwLAorCTB4ZTksIDB4ODksIDB4MjIsIDB4NDAsIDB4ZjIsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ODAsIDB4MDAsIDB4NmYsCisJMHg5NywgMHgzMywgMHgwMSwgMHgwMCwgMHhlYiwgMHg4OSwgMHgyMiwgMHg0MCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDliLCAweDgwLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGU2LCAweDg5LCAweDIyLCAweDU5LAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzksIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhlNiwgMHg4OSwgMHgyOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhlYywgMHg4OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGMwLCAweDk1LCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODksIDB4MjIsIDB4NWQsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGYyLCAweDg5LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAorCTB4N2YsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4YzUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY3LCAweDg5LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ZjksIDB4ODksIDB4NDMsIDB4NWYsIDB4N2YsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4YmYsCisJMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg3ZiwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDdmLCAweDkzLCAweDAxLCAweDAwLCAweDc1LCAweDk4LCAweDAwLCAweGJmLAorCTB4YzUsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNiwgMHg4YSwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA2LCAweDhhLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMywgMHg4YSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDk1LCAweDIyLCAweDAyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHg2MiwgMHg5NSwgMHgxYSwgMHgwMiwKKwkweDY4LCAweDk3LCAweDAwLCAweDAwLCAweDExLCAweDhhLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTEsIDB4OGEsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBlLCAweDhhLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2YywgMHg5NSwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4YSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4NmMsIDB4OTUsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MWMsIDB4OGEsIDB4OWMsIDB4MGYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDhhLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxOSwgMHg4YSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDZmLCAweDg0LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWQsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMSwgMHgwMCwKKwkweDZmLCAweDg0LCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LAorCTB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MmYsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2ZCwgMHg4YSwgMHhhMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5NCwgMHgyOSwgMHg0MSwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZCwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHgxMiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAorCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHgxMCwgMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDM0LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1MSwgMHg4YSwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDMyLCAweDhhLCAweDQ0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDA3LAorCTB4ODQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MzksIDB4OGEsIDB4MDUsIDB4YzIsIDB4MjQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg1MSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDZlLCAweDhhLCAweDFjLCAweGYwLCAweDE4LCAweDMwLCAweDAxLCAweDAwLAorCTB4NTEsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4YSwgMHhhMCwgMHg0OCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDFhLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDIsIDB4OGEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxYSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNmLCAweDhhLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4YSwgMHgwMCwgMHhmOCwgMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDQzLCAweDhhLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDEwLAorCTB4MzQsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgxMSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxYSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDRjLCAweDhhLCAweGE4LCAweDA5LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4YSwgMHgyMiwgMHg0MSwKKwkweDBkLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGMwLCAweDAxLCAweDAwLAorCTB4NTksIDB4OGEsIDB4YTAsIDB4YWEsIDB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHgxMiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OGEsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHgwOSwgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4YSwgMHg4MywgMHg0MSwKKwkweDE3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4OGEsIDB4MDAsIDB4NDEsIDB4MWIsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4OGEsIDB4MjMsIDB4NDAsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDFhLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY1LCAweDhhLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg4YSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NmUsIDB4OGEsIDB4MDAsIDB4ZjgsCisJMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YSwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGMwLCAweDAxLCAweDAwLCAweDZiLCAweDhhLCAweGEwLCAweGFhLAorCTB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHg5NCwgMHgyMCwgMHgwNywgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGMsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MGMsCisJMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4YSwgMHgyNiwgMHg1NCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDc2LCAweDhhLCAweDg3LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4NzYsIDB4OGEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3NiwgMHg4YSwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDdiLCAweDhhLCAweDIyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMSwgMHgwMCwKKwkweDc3LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDhhLCAweDIyLCAweDQ5LAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg1NCwKKwkweDc3LCAweDdkLCAweDAxLCAweDAwLCAweDdiLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDk0LCAweDJmLCAweDU1LAorCTB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4YTYsIDB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg4NCwgMHhhMiwgMHg0MSwgMHhlNSwgMHg1MSwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDg4LCAweDhhLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGIsIDB4OGEsIDB4YTIsIDB4OTMsIDB4NTcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg1NywgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHhhYiwgMHgyNywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDZmLCAweDg0LCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDg0LCAweDIyLCAweDUxLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4YTIsIDB4NDEsIDB4MWQsIDB4NTMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OGEsIDB4MjIsIDB4NDAsCisJMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDgxLCAweDAwLCAweDQxLCAweGI1LCAweDUzLCAweDAxLCAweDAwLCAweDZmLCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDgxLCAweDAwLCAweDQwLCAweGI1LCAweDMzLCAweDAxLCAweDAwLCAweDYwLCAweDE2LCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YSwKKwkweGI0LCAweDhiLCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHhiNCwgMHhmNywgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDZmLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MDgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4YWUsIDB4OGEsIDB4MDAsIDB4NGIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4ZDEsIDB4OGQsIDB4MDAsIDB4NDEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OGUsIDB4MDAsIDB4NDEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNywgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDhlLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4NzYsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OGUsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg4ZSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDBiLCAweDkwLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4YWYsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OGUsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4ZiwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDZmLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NmYsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5YiwgMHg4ZiwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiOSwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHg4ZiwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjksIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGUxLCAweDhmLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGYyLCAweDhmLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDhmLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGYsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDhmLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmYywgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBkLCAweDkwLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmQsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTAsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBlLCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4OTAsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2ZCwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHg4ZiwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDZkLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQxLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MCwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5MCwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5MCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhkLCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGEzLCAweDhlLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTAsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGEzLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBiLCAweDkwLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTAsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDczLCAweDhlLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4OTEsIDB4OTAsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4OGUsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgyMCwgMHg0NywKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ3LCAweDk2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OTYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg5NiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDZlLCAweDhiLCAweDAwLCAweDRiLCAweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGJlLCAweDkwLCAweDAwLCAweDQ5LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4OTAsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZCwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDBiLCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDkxLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTEsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg2LCAweDkxLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDkxLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0OSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDRiLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5MSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZTYsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZTYsIDB4OTEsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZSwgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDkxLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg5NCwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkxLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNywgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ODcsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NiwgMHg5MSwgMHgwMCwgMHg0YywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4OTIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg5MiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDkyLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5MSwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHg5MiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjYsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNiwgMHg5MiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNiwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHg5MiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI2LCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDRkLCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDkyLCAweDAwLCAweDQwLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxZSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg5MiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDMsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4OTIsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGMwLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjMCwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU2LCAweDkxLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU2LCAweDkxLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGU2LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NGMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzMSwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4M2QsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDMxLCAweDkyLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMSwgMHg5MiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGQ1LCAweDkyLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NGIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDUsIDB4OTIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGQ1LCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0YywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVmLCAweDkyLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWYsIDB4OTIsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGY2LCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZjYsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE4LCAweDk0LCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTgsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg5MiwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWMsIDB4OTIsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg5MiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWMsIDB4OTIsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5MiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDkyLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWMsIDB4OTIsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5MiwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5MiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZjIsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGI4LCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1ZiwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVmLCAweDk0LCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1ZiwgMHg5NCwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1ZiwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk0LCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5MSwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDZhLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZlLCAweDk0LCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4OTQsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4OTQsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVkLCAweDk0LCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHg5NCwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTQsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg5NCwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MSwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkxLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg5NCwgMHgwMCwgMHg0YSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZiLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZiLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZiLCAweDk0LCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YjYsIDB4OTQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZCwgMHg5NCwgMHgwMCwgMHg0YSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVkLCAweDk0LCAweDAwLCAweDRhLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZSwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDBhLCAweDhhLCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAorCTB4YmEsIDB4OGQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGJhLCAweDhkLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDFmLCAweDAwLCAweDBmLAorCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MjEsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg4ZCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4Y2EsIDB4OGQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGM3LCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODYsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhjYiwgMHg4ZCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAorCTB4MTMsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MmUsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4YSwgMHgwMCwgMHgwNCwgMHhlNiwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDA2LCAweDA3LCAweDQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDcsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4MmUsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKKwkweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0YiwKKwkweDk0LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDk1LCAweGYwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmUsIDB4MzQsCisJMHg5NywgMHg4NCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlNCwgMHhlNSwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDAxLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAorCTB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDQzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgyZSwgMHg0MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYywgMHg4ZCwgMHgyMCwgMHg0YiwKKwkweDk0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjksIDB4OGQsIDB4MDAsIDB4NDEsIDB4OTUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMywgMHg4ZSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDhlLCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OGUsIDB4YTIsIDB4NGMsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwYywgMHg4ZSwgMHgwMCwgMHg0YywgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwZCwgMHg4ZSwgMHgyMCwgMHhmMCwKKwkweDU2LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDU2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4ZSwgMHhhOCwgMHg0NCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDhjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxYiwgMHg4ZSwgMHhhOCwgMHg0NCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDg2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MzgsIDB4MDAsIDB4MmUsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4ZSwgMHgyMiwgMHg0MywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDI2LCAweDhlLCAweDIyLCAweDQ0LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyMCwgMHhhMiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MmEsIDB4OGUsIDB4MjMsIDB4MGIsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDQzLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDJmLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MmUsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDQxLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzYSwgMHg4ZSwgMHhhMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDNlLCAweDhlLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLAorCTB4ODYsIDB4MDAsIDB4MmYsIDB4NDksIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4OGUsIDB4YTIsIDB4ZjIsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDQxLCAweDhlLCAweGEyLCAweDQ2LAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0NSwgMHg4ZSwgMHgwMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgyZiwgMHg0NiwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDQ1LCAweDhlLCAweGEyLCAweGYyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDAwLCAweDJkLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDE2LCAweDg4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDE0LCAweGY0LCAweDAxLCAweDAwLAorCTB4NzAsIDB4OGUsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OGUsIDB4MjIsIDB4MGEsCisJMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLAorCTB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDEzLCAweGMwLCAweDAxLCAweDAwLAorCTB4NTcsIDB4OGUsIDB4YTAsIDB4NDMsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg4ZSwgMHgwMCwgMHg0MSwgMHgxNSwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDcwLCAweDhlLCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLAorCTB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxNSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDY0LCAweDhlLCAweGEwLCAweDQzLAorCTB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHgxMSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4OTcsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk1LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg2YywgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDhlLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NTEsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM0LCAweDAwLCAweDJlLCAweDQxLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NzgsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgzNCwgMHgwMCwgMHgyZSwgMHg0MSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4OGUsIDB4MjIsIDB4NDUsCisJMHgyMywgMHg3YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHhmMCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg4ZSwgMHgyMiwgMHg0OCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhkLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGEsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmEsIDB4NGEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAwLCAweDIwLCAweDFiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKKwkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweDkwLCAweDhlLCAweDIzLCAweDAxLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YywgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDAwLCAweDIwLCAweDQwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDIwLCAweDQxLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMSwgMHg5OSwgMHgwMCwgMHhmMCwgMHgyNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4ZSwgMHhhMiwgMHg0NCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDk3LCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4OGEsIDB4OTYsIDB4MDAsIDB4NDAsIDB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmQsIDB4OGUsIDB4YTIsIDB4MDgsCisJMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJkLCAweDhlLCAweGEyLCAweDA4LAorCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMCwgMHgyMCwgMHgwMSwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDY5LCAweDk2LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDc4LCAweDhlLCAweDIyLCAweDRhLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2OSwgMHg5NiwgMHgwMCwgMHhmMywKKwkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNlLCAweDQzLCAweDk3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4NjAsIDB4MDAsCisJMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHg4NSwgMHgxMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweGYwLAorCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFmLCAweDhlLCAweDAwLCAweDQ5LCAweDE5LCAweDgwLCAweDAwLCAweDAwLAorCTB4YjQsIDB4OGUsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OGEsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHgzYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4ZSwgMHhhMiwgMHgwOCwgMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHg4ZSwgMHhhMiwgMHgwOCwgMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDJkLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHg0NiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDY4LCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgzNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM2LCAweGQwLCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweDQwLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4MSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhjYiwgMHg4ZSwgMHgyMCwgMHg5NCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGI1LCAweDk3LCAweDAwLCAweDk0LCAweGU1LCAweDMxLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDhlLCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAorCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OGUsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkNiwgMHg4ZSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZDMsIDB4OGUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZiLCAweDk1LCAweDAwLCAweDQzLAorCTB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLCAweDFlLCAweDhjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGUsIDB4MjIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMCwgMHg4ZSwgMHhhMywgMHgwMSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKKwkweGUxLCAweDhlLCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OGUsIDB4MjAsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNywgMHg4ZSwgMHgwMCwgMHgwMiwKKwkweGYwLCAweGIxLCAweDAwLCAweDAwLCAweGU2LCAweDhlLCAweGEzLCAweDAxLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZTcsIDB4OGUsIDB4NjgsIDB4MDYsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlOSwgMHg4ZSwgMHg4MCwgMHgwOCwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDExLCAweDFlLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgxZiwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlYiwgMHg4ZSwgMHhhOCwgMHgxMywKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIyLCAweDhmLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAorCTB4NDQsIDB4MDAsIDB4MmQsIDB4MDIsIDB4MGMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OGYsIDB4YTIsIDB4MDIsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4ZSwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGY4LCAweDhlLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4ZSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MmQsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDRjLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJmLCAweGYyLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MjIsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNiwgMHg4ZiwgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDUsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4NGEsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwZiwgMHg4ZiwgMHhhOCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDEzLCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWQsIDB4OGYsIDB4MjIsIDB4MDYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDFiLCAweDhmLCAweGEyLCAweDAyLCAweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDhmLCAweDBkLAorCTB4NDIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDM3LCAweDk4LCAweDAxLCAweDAwLCAweGNmLCAweDhlLCAweDAwLCAweGExLCAweDFhLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGUsIDB4MDAsIDB4MDIsCisJMHgzNiwgMHhkMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDIwLCAweDAxLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyNywgMHg4ZiwgMHgwMCwgMHg1ZiwgMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHg0NiwKKwkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGY0LCAweDAxLCAweDAwLAorCTB4MjYsIDB4OGYsIDB4YTAsIDB4NDMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJkLCAweDhmLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4ZiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmIsIDB4OTUsIDB4MDAsIDB4MTAsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzEsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MzksIDB4OGYsIDB4OTAsIDB4ZjIsCisJMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweGE2LAorCTB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHg0MiwgMHg4ZiwgMHgyMiwgMHg0OSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ZjAsIDB4MDAsIDB4MGMsIDB4MTgsIDB4OGMsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTcsIDB4MDAsIDB4NGMsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4ZiwgMHgwMCwgMHgwMCwgMHg5MiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQ5LCAweDhmLCAweDIyLCAweDQwLCAweGFmLCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDFlLAorCTB4OTQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3MiwgMHg5OCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4ZiwgMHhhMiwgMHg0MCwKKwkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDViLCAweDhmLCAweDAwLCAweDQ3LCAweDE5LCAweDgwLCAweDAwLCAweDAwLAorCTB4NTIsIDB4OGYsIDB4MDAsIDB4MDAsIDB4OTIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OGYsIDB4NDMsIDB4NDgsCisJMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHgxZSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDhmLCAweDI4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDRhLCAweDhmLCAweDIyLCAweDQ4LAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NTEsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1YSwgMHg4ZiwgMHgyOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRlLCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWIsIDB4MDAsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTcsIDB4OGYsIDB4MjIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweGY4LCAweDAwLCAweDMwLCAweDAxLCAweDAwLCAweDU0LCAweDhmLCAweGEyLCAweDQxLAorCTB4M2IsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4OGYsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgxZSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDViLCAweDhmLCAweDAwLCAweDQ5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWIsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4OGYsIDB4MjIsIDB4NWYsCisJMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHg0YiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGFhLCAweDhhLCAweDAwLCAweDAwLCAweDgwLCAweGIwLCAweDAwLCAweDAwLCAweDY1LCAweDhmLCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg2NSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NjIsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NSwgMHg4ZiwgMHg0MCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDA3LCAweDk0LCAweDg5LCAweDAxLCAweDAwLCAweDZiLCAweDhmLCAweDg1LCAweGNhLAorCTB4OTQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTksIDB4MTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCisJMHgwZSwgMHgwMCwgMHgwMCwgMHgwZiwgMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHg3MiwgMHg4OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDE4LCAweDAwLCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGM3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcyLCAweDhmLCAweGEyLCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiNSwgMHg5NywgMHgwMCwgMHg0MCwgMHgwZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDk4LCAweDg4LCAweDAxLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OGYsIDB4OTAsIDB4NGMsCisJMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDdhLCAweDhmLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4ODEsIDB4OGYsIDB4MjQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4MiwgMHg4ZiwgMHgwMCwgMHg5NCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDYyLCAweDQwLCAweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LAorCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTQsIDB4OGYsIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg0MCwgMHgwMCwgMHgwOCwgMHg5NCwgMHhkYywgMHgwMSwgMHgwMCwgMHg3MiwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDkyLCAweDhmLCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGNmLCAweDhkLCAweDAwLCAweDQ3LCAweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDk0LCAweDhmLCAweDQzLCAweDQ4LAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg5YSwgMHg4ZiwgMHgyOCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4ZiwgMHgyMiwgMHg0OCwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDFiLCAweDA4LCAweDAwLCAweDMwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MWIsIDB4NDcsCisJMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDlmLCAweDhmLCAweGEwLCAweDQzLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAorCTB4YWEsIDB4OGYsIDB4YTIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDQsCisJMHg4MywgMHg3MCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDFmLCAweGYwLAorCTB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTksIDB4MDAsIDB4NDgsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhhYSwgMHg4YSwgMHgyMywgMHg0MSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHhhYSwgMHg4YSwgMHgwMCwgMHg0NywKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDk3LCAweDAwLCAweDQ3LCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4OGUsIDB4YTIsIDB4NDAsCisJMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiOCwgMHg4ZiwgMHgyMiwgMHg0NywgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDdlLCAweDhlLCAweDAwLCAweDQ4LCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDI3LCAweDkwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmQsIDB4NWQsIDB4MDUsIDB4YjQsIDB4MDEsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgyZCwgMHhmMywgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDNkLCAweDQzLCAweDgxLCAweGUwLCAweDAxLCAweDAwLAorCTB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDQwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNlLCAweDk0LCAweDAwLCAweDRhLAorCTB4ZjAsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg4ZiwgMHhhMiwgMHg1MCwgMHg4ZiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OGYsIDB4YTAsIDB4NDMsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDAwLCAweDIwLCAweDQ3LCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDIyLCAweDQ3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MGMsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg4ZiwgMHg4NCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4ZiwgMHgyMiwgMHg0NywKKwkweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDgxLCAweGUwLCAweDAxLCAweDAwLAorCTB4ZGUsIDB4OGYsIDB4MWYsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGQ3LCAweDhmLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQ3LCAweDhmLCAweDQyLCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsCisJMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHhkYywgMHg4ZiwgMHgyMywgMHg0MSwgMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGI5LCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDRiLCAweDk5LCAweDAwLCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OGEsIDB4MDAsIDB4NDgsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwMCwgMHgyZCwgMHg0OSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJkLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MiwgMHhmOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweGVkLCAweDhmLCAweGEwLCAweDQwLCAweDgyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MmMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OGYsIDB4YTMsIDB4NDAsCisJMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGVmLCAweDhmLCAweDIwLCAweDRjLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMiwgMHgwMCwgMHgyMCwgMHg0MiwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDUwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDQwLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDYsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDk2LCAweGNjLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweGE2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhmNSwgMHg5NywgMHgwMCwgMHg0NiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDIyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ODYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsCisJMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDRhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGY1LCAweDk3LCAweDAwLCAweDQ3LAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg1ZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDEzLCAweDkwLCAweDkwLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDYyLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MSwKKwkweGU1LCAweGMxLCAweDAwLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDRkLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MjMsIDB4OTAsIDB4ODAsIDB4ZjMsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhlNywgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGNmLCAweDhkLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwgMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM4LCAweDkwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg1MSwgMHg4MywgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODQsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTAsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MzIsIDB4OTAsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMywgMHg5MCwgMHhhOCwgMHg0YiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM1LCAweDkwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MzUsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsCisJMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDIwLCAweDAwLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDJiLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDk4LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NDcsIDB4OTAsIDB4YTAsIDB4MTQsCisJMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg1MCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg1MCwgMHg5MCwgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQzLCAweDg2LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsIDB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NTAsIDB4OTAsIDB4YTQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDZlLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLCAweDNiLCAweDk4LCAweDAwLCAweDMwLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4OTAsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1YiwgMHg5MCwgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1YSwgMHg5MCwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDYxLCAweDkwLCAweDA2LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MjAsIDB4ZjIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDksIDB4NDYsCisJMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDUwLAorCTB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OTAsIDB4OTAsIDB4NGMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg2OCwgMHg5MCwgMHgyMiwgMHg0MywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNlLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDZmLCAweDkwLCAweDI0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHg5MCwgMHgwMCwgMHg5NCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg2MiwgMHg0MCwKKwkweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDgxLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3NiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTAsIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDgsCisJMHg5NCwgMHhkYywgMHgwMSwgMHgwMCwgMHg3MiwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDdiLCAweDkwLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODQsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHg5MCwgMHg0MywgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDgxLCAweDkwLCAweGE4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAorCTB4MzUsIDB4MDAsIDB4MWIsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCisJMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4NywgMHg5MCwgMHhhMCwgMHg0MywgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2OSwgMHg5NiwgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDkwLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE1LCAweDhlLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2OSwgMHg5NiwgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4ZSwgMHgyMiwgMHg0YSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE1LCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCisJMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweGY0LCAweDAxLCAweDAwLCAweDlmLCAweDhlLCAweDIyLCAweDA2LAorCTB4OTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDJhLCAweDUwLCAweGU3LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTAsIDB4YTAsIDB4NDMsCisJMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDk0LCAweDAwLCAweDEwLCAweDg2LCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4OTAsIDB4NDIsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHg5ZiwgMHg4ZSwgMHgxYSwgMHg1ZCwKKwkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDJkLCAweDEwLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDZiLCAweGZiLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGFlLCAweDkwLCAweGEwLCAweDQzLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKKwkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweGIxLCAweDkwLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5NCwgMHgwMCwgMHg0YSwgMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGI0LCAweDkwLCAweDQyLCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAorCTB4YTMsIDB4OGYsIDB4MjIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweGFkLCAweDhmLCAweDAwLCAweGYwLAorCTB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg5MCwgMHg0NywgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGM0LCAweDkwLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NmIsIDB4ODQsIDB4MWYsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmUsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFmLCAweDQyLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTAsIDB4YTgsIDB4YjEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg0NiwgMHg5NywgMHgwMCwgMHgxMCwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MCwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAyLCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLCAweGNkLCAweDkwLCAweDAwLCAweDUwLAorCTB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OTAsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MiwgMHg0YiwgMHgxMiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NGEsCisJMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDVlLCAweDAxLCAweDAwLCAweDRiLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5MCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDksCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlMiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLAorCTB4ZTYsIDB4OTAsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFmLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhlZiwgMHg5MCwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGVkLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTYsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5MCwgMHgyMCwgMHgwOSwgMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGY1LCAweDkwLCAweDFmLCAweDA5LCAweDk2LCAweDI0LCAweDAwLCAweDAwLCAweDZiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg5NywgMHgwMCwgMHg1NywgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmIsIDB4OTAsIDB4MjIsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDIsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDUyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQyLAorCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg1MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4YzksIDB4OTYsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MjIsIDB4NDAsCisJMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNiwgMHg5MSwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDg5LCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwMCwgMHhhNiwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDkxLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDgsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg5NywgMHgwMCwgMHgwOCwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDkxLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDE5LCAweDk4LCAweDAwLCAweDQzLAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4OGQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5OCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDIwLCAweDkxLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg5MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLAorCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDkxLCAweDIyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4M2QsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgyYywgMHg5MSwgMHgwMCwgMHg0MiwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHg0NSwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDg3LCAweDkxLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ODcsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzZiwgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDNiLCAweDkxLCAweGEyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAorCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhlMywgMHg4OSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHg5MSwgMHhhMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTYsIDB4MDAsIDB4MTUsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQyLCAweDkxLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDMsIDB4OTEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDZmLCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDE1LAorCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTEsIDB4YTAsIDB4MGIsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDRiLCAweDkxLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwYiwKKwkweDk5LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZhLCAweDUwLCAweDk5LCAweGMwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MjMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NDEsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0NywKKwkweGU3LCAweGI1LCAweDAxLCAweDAwLCAweDVjLCAweDkxLCAweDIzLCAweDBiLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ZTUsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAyLCAweGQwLCAweDAxLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDAwLAorCTB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MSwgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5MSwgMHgyNiwgMHgxMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDk4LCAweGQwLCAweDAxLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDRjLCAweDAyLCAweDMwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZiwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDE1LCAweGY0LCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZTQsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhmOCwgMHg5NywgMHgwMCwgMHgwMCwgMHgyYSwgMHg0MCwgMHgwMSwgMHgwMCwgMHg3OSwgMHg5MSwgMHgyMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg3YSwgMHg5MSwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDk0LCAweDAwLCAweDQwLCAweDhkLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDYzLCAweDAwLCAweGE2LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg5MSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4N2YsIDB4OTEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDg1LCAweDkxLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg4ZCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MSwgMHgwMCwgMHg0YSwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MmQsIDB4MTUsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwKKwkweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGNiLCAweDkxLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDIwLCAweDBiLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5MSwgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTEsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDlkLCAweDkxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGM0LCAweDkxLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4YjIsIDB4OTEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjEsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDkxLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg5MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZTIsIDB4OTUsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTEsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGIxLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyMSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjUsIDB4OTEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJiLCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQwLAorCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmMsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiZSwgMHg5MSwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjNywgMHg5MSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDExLCAweDMwLCAweDAxLCAweDAwLCAweGM4LCAweDkxLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4OTEsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDhkLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGNlLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGQ2LCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQwLAorCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDcsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHgwYSwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTEsIDB4MDMsIDB4MWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5MSwgMHgwMCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhlMSwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDkxLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGJmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTEsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhjYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDhkLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5OCwgMHgwMCwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGY2LCAweDkxLCAweDIyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTEsIDB4YTIsIDB4NDAsCisJMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDIwLCAweDBiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4ZCwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDkyLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4OTgsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwYywgMHg5MiwgMHgyMCwgMHgwMSwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDA5LCAweDkyLCAweGE4LCAweDAwLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgyZiwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDEsCisJMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDhlLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGUsIDB4OTEsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTYsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDJjLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCisJMHhkYywgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5NywgMHgwMCwgMHg0OCwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjEsIDB4OTIsIDB4YTgsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI3LCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDI2LCAweDkyLCAweDAwLCAweDQwLAorCTB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDkyLCAweDAwLCAweDA5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDg3LCAweDQyLAorCTB4MTksIDB4MTAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHhlNywgMHg5MSwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDNkLCAweDkyLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NTEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MjIsIDB4MDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHg5MiwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDNkLCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHhmMiwKKwkweDAyLCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2UsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDkyLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQzLCAweDkyLCAweGEyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg0NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNlLCAweDkyLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0YywgMHg5MiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZSwgMHg5MiwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTIsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NGQsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDkyLCAweDIyLCAweDQyLCAweDk2LCAweDE0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjgsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MSwgMHg5MiwgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjUsIDB4OTIsIDB4NDcsIDB4ZjIsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg5MiwgMHgyMiwgMHg0NywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDZiLCAweDg0LCAweDFmLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgwOSwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzIsIDB4OTIsIDB4YTgsIDB4NDAsCisJMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDc2LCAweDkyLCAweDQ3LCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdlLCAweDkyLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDBiLAorCTB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg5NiwgMHg5MiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NiwgMHgwMCwgMHg1ZiwKKwkweDAxLCAweDEwLCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OTIsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTYsIDB4MDAsIDB4NTIsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDkyLCAweDIyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDRjLCAweDk3LCAweGYwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMSwgMHg5NywgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTIsIDB4MzAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MGYsIDB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHhkMSwgMHg5OSwgMHgwMCwgMHg1ZiwgMHg5NSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGFhLCAweDkyLCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4YTgsIDB4OTIsIDB4NDMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsCisJMHgzMSwgMHhkMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTUsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJiLCAweDkyLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGI0LCAweDkyLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTIsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiNSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGI4LCAweDkyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY1LCAweDk3LCAweDAwLCAweDRhLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGRjLCAweDk2LCAweDAwLCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjYywgMHg5MiwgMHgyMiwgMHg0NywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDUxLCAweDk1LCAweDAwLCAweDQwLCAweGU3LCAweDMxLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTIsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzcsIDB4OTIsIDB4YTIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3NCwgMHg5NiwgMHgwMCwgMHhmMiwgMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NDgsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTYsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkMSwgMHg5MiwgMHg4NywgMHg0MiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJmLCAweDQ3LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkYywgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGQ4LCAweDk4LCAweDAwLCAweGYwLAorCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg0NSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGU1LCAweDkyLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDk3LCAweDAwLCAweDQ3LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGUxLCAweDAwLCAweGE2LCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwNywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHg0MSwgMHhlNywgMHg0MSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDBhLAorCTB4MmMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwYiwgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg5MywgMHgyNiwgMHg0NywKKwkweDk3LCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4OTMsIDB4MjMsIDB4NGIsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4NGIsCisJMHgwNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzMywgMHg5OCwgMHgwMCwgMHg0YiwgMHgwNCwgMHg1MCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMzLCAweDk4LCAweDAwLCAweDA2LCAweDA0LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4OTMsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OTMsIDB4ODQsIDB4NDgsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDkzLCAweDAwLCAweDBhLCAweGUwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4OTQsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDA5LCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDE2LCAweDkzLCAweDIyLCAweDA2LCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDI0LCAweDk3LCAweDAwLCAweDQ1LAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTIsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEyLCAweDkzLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4OTIsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJkLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhlYSwgMHg5NiwgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MWMsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDkzLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTMsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg0ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5MywgMHhhMiwgMHg0NywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MzQsIDB4OTMsIDB4MjIsIDB4NGEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyYywgMHg5MywgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5MywgMHgyMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzEsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDE2LAorCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTMsIDB4MjIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDQ3LCAweDkzLCAweDIyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLAorCTB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmIsIDB4MDEsCisJMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDA4LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OTMsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgxOSwgMHg5OCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NDAsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk4LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLAorCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTMsIDB4MjAsIDB4MTYsCisJMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDUxLCAweDkzLCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1YiwgMHg5MywgMHg4NCwgMHg0NSwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg5MywgMHgwMCwgMHgwYSwKKwkweGUwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweGIwLCAweDAxLCAweDAwLAorCTB4NWIsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5MywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDczLCAweDkzLCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLAorCTB4NzQsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MmQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAorCTB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YiwgMHg5MywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDFiLCAweDk4LCAweDAxLCAweDAwLCAweDc0LCAweDkzLCAweDAwLCAweDVjLAorCTB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhlMiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDc4LCAweDkzLCAweDIzLCAweDBkLCAweDJjLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTMsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDkzLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg3YywgMHg5MywgMHhhOCwgMHg0NiwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg4NSwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4OGIsIDB4OTMsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5MywgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDhmLCAweDkzLCAweGEyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhhNCwgMHg5MywgMHgyMiwgMHg0YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDk1LCAweDkzLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDkzLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTMsIDB4YTIsIDB4ZjMsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg1LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAorCTB4OWQsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsCisJMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKKwkweGY5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGExLCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDE2LCAweGU0LCAweGIxLCAweDAwLCAweDAwLAorCTB4YTcsIDB4OTMsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGI0LCAweDkzLCAweDIyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjEsIDB4OTMsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhYywgMHg5MywgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGQwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4OTMsIDB4MjIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDJkLCAweDAwLAorCTB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MmQsIDB4ZjAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzZiwgMHg5MSwgMHgwMCwgMHhmMCwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5OCwgMHgwMCwgMHg0MSwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGJiLCAweDkzLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjksIDB4OTMsIDB4MjMsIDB4MGQsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDkzLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4MDEsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLAorCTB4Y2IsIDB4OTMsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHg5MywgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgyMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgyMywgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGNlLCAweDkzLCAweDIzLCAweDBkLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMywgMHg5MywgMHgyMiwgMHg0MCwKKwkweDFiLCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDAxLCAweDg0LCAweDUwLCAweDAxLCAweDAwLAorCTB4ZGIsIDB4OTMsIDB4MjIsIDB4NDAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGExLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZDksIDB4OTMsIDB4YTgsIDB4MTEsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4OTMsIDB4MDAsIDB4NWUsCisJMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg5MywgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxOSwgMHg5OCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5MywgMHgyMiwgMHg0MCwKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg0MywgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhlOCwgMHg5MywgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZWIsIDB4OTMsIDB4YTgsIDB4MGEsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGYyLCAweDkzLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDExLAorCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5OCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NywgMHgwMCwgMHg1ZSwKKwkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHg0MSwKKwkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTQsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAxLCAweDk0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNywgMHg5NCwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHgxYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwZCwgMHg5NCwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDE1LCAweDk0LCAweDIyLCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg5OCwgMHgwMCwgMHg0MSwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg5NCwgMHgyMiwgMHgwOCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJiLCAweDkzLCAweDAwLCAweDAwLCAweDJhLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTQsIDB4MjMsIDB4MGQsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE5LCAweDk0LCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OTUsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDBiLCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDI3LCAweDk0LCAweDI2LCAweDQ3LAorCTB4OTcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgyNywgMHg5NCwgMHgyMywgMHg0YiwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgzMywgMHg5OCwgMHgwMCwgMHg0YiwKKwkweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDk4LCAweDAwLCAweDRiLCAweDA0LCAweDUwLCAweDAxLCAweDAwLCAweDI4LCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyZCwgMHg5NCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJjLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4OTQsIDB4MDAsIDB4MDEsCisJMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDk0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTQsIDB4MjIsIDB4MDYsCisJMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg5NywgMHgwMCwgMHg0NSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKKwkweDFiLCAweDk0LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgzOSwgMHg5NCwgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDFiLCAweDk0LCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg0MiwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4NDgsIDB4OTQsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg5NCwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHg1OSwgMHg5NCwgMHgyMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg1MSwgMHg5NCwgMHhhMiwgMHgxNiwKKwkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDk0LCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwKKwkweDJhLCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4YmEsIDB4OGQsIDB4MDAsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MzUsIDB4OTMsIDB4YTIsIDB4MTYsCisJMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTUsIDB4MDAsIDB4NGEsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHg0OSwgMHg5MywgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDYzLCAweDk0LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjgsIDB4OTQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0NSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZmUsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDkzLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2EsIDB4OTQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLAorCTB4NzMsIDB4OTQsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3NywgMHg5NCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDc0LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzcsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YjYsIDB4OTYsIDB4MDAsIDB4NDcsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJmLCAweDk1LCAweDAwLCAweDQ3LCAweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDhjLCAweDk0LCAweGEyLCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4OTQsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4NzQsIDB4OTYsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGY5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4OTUsIDB4MDAsIDB4MTAsIDB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4MDAsIDB4NDAsCisJMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDljLCAweDk0LCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAorCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5NSwgMHg5NCwgMHgzNywgMHg1YywKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4OTksIDB4OTQsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDE3LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDhlLCAweGIwLCAweDAxLCAweDAwLAorCTB4YjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE3LCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZiwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDNmLCAweDkxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg4NywgMHg5MSwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiMywgMHg5NCwgMHhhMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4ZWYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTYsIDB4MDAsIDB4NGEsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDkzLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZSwgMHg5MSwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDM3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDMzLCAweGMzLCAweDAxLCAweDAwLAorCTB4MzYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NCwgMHg4NSwgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDlmLCAweDQ4LCAweDAzLCAweGQwLCAweDAwLCAweDAwLCAweGMxLCAweDk0LCAweDljLCAweDE3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NGMsIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgzNCwgMHhjMywgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxMSwKKwkweDEwLCAweGMxLCAweDAwLCAweDAwLCAweGM2LCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweGMxLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTQsIDB4MDAsIDB4NTAsIDB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTEsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5NCwgMHgyMiwgMHg0MCwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweGU1LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgyMywgMHhkMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NCwgMHgwMCwgMHg1MCwKKwkweDQzLCAweGQxLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDk1LCAweDAwLCAweDQxLCAweGUxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQ3LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4MDEsIDB4OGMsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLAorCTB4ZTEsIDB4OTQsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlMywgMHg5NCwgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDkwLCAweDAxLCAweDAwLCAweDhkLCAweDk4LCAweDAwLCAweDQ3LAorCTB4MTksIDB4MTAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5OCwgMHgwMCwgMHhmMCwKKwkweDg0LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjgsIDB4OTQsIDB4YTIsIDB4NGIsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTUsIDB4YTIsIDB4NGMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGZiLCAweDk0LCAweGEyLCAweDAxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDQ2LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTQsIDB4MWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmMywgMHg5NCwgMHgyMiwgMHhmMCwKKwkweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDQ4LCAweDk1LCAweDFmLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGYsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDk1LCAweDIwLCAweDQyLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGY3LCAweDk0LCAweDIyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5NCwgMHgyMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVjLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWIsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDk0LCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDA4LCAweDk1LCAweDIzLCAweGYwLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OTUsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0YSwgMHg5NSwgMHhhMiwgMHg0MiwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NSwgMHhhMiwgMHg0MSwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDk1LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NTEsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTIsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5NSwgMHgxZiwgMHgxMiwgMHg4NCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDRhLCAweDk1LCAweGEwLCAweDAxLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzMywgMHg5NSwgMHhhMiwgMHg0NiwgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDIyLCAweGYwLCAweDE0LCAweDMwLCAweDAwLCAweDAwLAorCTB4MTEsIDB4OTUsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OTUsIDB4MDMsIDB4MWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQ0LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4OTUsIDB4MjIsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxOSwgMHg5NSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNSwgMHg5NSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU1LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NTYsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTgsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODIsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg5NSwgMHgyMCwgMHg5MSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgxZSwgMHg5NSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4MjcsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjEsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI0LCAweDk1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyMywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDJlLCAweDk1LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MmIsIDB4OTUsIDB4YTIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmIsIDB4OTUsIDB4YTIsIDB4ZjIsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDk1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyYiwgMHg5NSwgMHhhMCwgMHg5MSwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDI5LCAweDk1LCAweDIyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLAorCTB4MzIsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDNjLCAweDk1LCAweGEyLCAweGYwLAorCTB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzOSwgMHg5NSwgMHhhMiwgMHhmMiwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwKKwkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MmIsIDB4OTUsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjksIDB4OTUsIDB4MjAsIDB4OTEsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHgyYiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDk1LCAweDIwLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDNmLCAweDk1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHg5NSwgMHgyMiwgMHgwYSwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDE5LCAweDk1LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4NDQsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQ3LCAweDk1LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0ZCwgMHg5NSwgMHgwMCwgMHg0MywgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg5NSwgMHgwMCwgMHg0MSwKKwkweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDRkLCAweDk1LCAweDAwLCAweDQyLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NGQsIDB4OTUsIDB4MDAsIDB4NDQsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTUsIDB4MDAsIDB4NGMsCisJMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDk1LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRiLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDU1LCAweDk1LCAweGEyLCAweGYzLCAweDk2LCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MmEsIDB4NDEsCisJMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZCwgMHg0MSwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDAwLCAweGU0LCAweDAxLCAweDAwLCAweDViLCAweDk1LCAweDIyLCAweDVhLAorCTB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg1YywgMHg5NSwgMHgwMCwgMHg1YSwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTAsIDB4YTUsIDB4ODUsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweGYwLAorCTB4OGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjksIDB4OTUsIDB4MjIsIDB4NDAsIDB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NiwgMHg5NSwgMHhhMiwgMHg0YiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDY3LCAweDk1LCAweDIyLCAweGYwLCAweDE4LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4OTYsIDB4MDAsIDB4MDcsCisJMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZiLCAweDk1LCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGI4LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDMyLCAweDk2LCAweDAwLCAweDA3LCAweDEwLCAweDMwLCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDk2LCAweDAwLCAweDA3LCAweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTUsIDB4MzMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3NywgMHg5NSwgMHhhMSwgMHhhZCwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHg5NSwgMHgxMywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDRhLCAweDVhLCAweDgzLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHg1ZSwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg1ZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorCTB4NDgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NGEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg1OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDRlLCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDg2LCAweDAwLCAweDQwLCAweDVkLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDgyLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODYsIDB4OTUsIDB4NDQsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhjMiwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDk1LCAweGEyLCAweDQ1LCAweDI1LCAweDdjLCAweDAwLCAweDAwLAorCTB4OGEsIDB4OTUsIDB4MzEsIDB4MjAsIDB4ODUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4OTUsIDB4MjIsIDB4MTIsCisJMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg1MSwgMHg5OCwgMHgxMSwgMHgxMiwgMHg0OCwgMHgwMywgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHg5NSwgMHgzMSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDkxLCAweDk1LCAweDIyLCAweDEyLCAweDQ4LCAweDdmLCAweDAwLCAweDAwLAorCTB4NTEsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NSwgMHgwYiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDExLCAweDEyLCAweDQ4LCAweDgzLCAweDAxLCAweDAwLCAweDliLCAweDk1LCAweDIyLCAweDUwLAorCTB4ODUsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg1MSwgMHg5NywgMHgwMCwgMHhmMiwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMSwgMHg5OSwgMHgwMCwgMHgxMiwKKwkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsCisJMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgxMCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI3LCAweDNmLCAweDQzLCAweDExLCAweGYwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA4LAorCTB4OGEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTUsIDB4MzAsIDB4YTEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhhNCwgMHg5NSwgMHgyMiwgMHg0NSwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg5NSwgMHgxMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweDQ1LCAweGU2LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4MTIsIDB4NDgsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHg4NSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDVlLCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDUxLCAweDk3LCAweDAwLCAweGYyLAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGFmLCAweDk1LCAweDIyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiMywgMHg5NSwgMHhhOCwgMHgwNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDRiLCAweDk2LCAweGRjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsIDB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweGJjLCAweDk1LCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJkLCAweDk1LCAweDAwLCAweDQyLAorCTB4NjgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiZCwgMHg5NSwgMHgzMSwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg0MiwKKwkweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweGJmLCAweDk1LCAweDM1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTUsIDB4MjgsIDB4YjEsCisJMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg5NSwgMHgyMiwgMHg0ZCwgMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk1LCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTUsIDB4YTgsIDB4YjEsIDB4MTAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGNiLCAweDk1LCAweDI4LCAweGIxLCAweDEwLCAweDMwLCAweDAwLCAweDAwLAorCTB4YzcsIDB4OTUsIDB4OWYsIDB4YmEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyNCwgMHgxMSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjZCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhYywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGQxLCAweDk1LCAweDMyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZDcsIDB4OTUsIDB4MjIsIDB4ZjgsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsCisJMHg5MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDRiLCAweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDkyLCAweDQ4LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkYiwgMHg5NSwgMHgyOCwgMHhiMSwgMHg5MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkNywgMHg5NSwgMHgyMiwgMHg0YywKKwkweDc1LCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDEyLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGIsIDB4OTUsIDB4YTgsIDB4YjEsCisJMHg5MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDkwLCAweGQwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDRiLAorCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5MiwgMHg0OSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDgyLCAweDhjLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsCisJMHgwMCwgMHhlYywgMHgwMCwgMHgwMCwgMHhlOCwgMHg5NSwgMHgyMiwgMHgxYSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDAwLCAweDM0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDE1LCAweDgyLCAweDhjLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsCisJMHgwMCwgMHhlYywgMHgwMCwgMHgwMCwgMHhmMSwgMHg5NSwgMHgyMiwgMHgwZCwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDAwLCAweDFhLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmNiwgMHg5NSwgMHg4MywgMHgxZSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MmQsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4MTEsIDB4MTAsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg1MCwKKwkweDQzLCAweGMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4OTYsIDB4MjIsIDB4NDAsIDB4ZjUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg0MywgMHhkMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHhlNSwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OTYsIDB4MjIsIDB4MTEsIDB4MWUsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHg5NiwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg5NiwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAwLCAweDAwLCAweDA5LCAweDk2LCAweGEwLCAweGY0LCAweDE2LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsCisJMHgyMywgMHhkMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg0MywgMHhkMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDk2LCAweDMwLCAweDQ3LAorCTB4MTcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTYsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5MCwgMHg0MiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDEzLCAweDk2LCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4NDEsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDk2LCAweDQwLCAweDA3LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweGRiLCAweDk5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTYsIDB4YTIsIDB4NDUsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHg5NywgMHgzZiwgMHg0MSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDMxLCAweDk2LCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAwLCAweDAwLCAweDFlLCAweDk2LCAweDMwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4OTYsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHg5NiwgMHhhMiwgMHgwYiwKKwkweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDIsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQxLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjEsIDB4YTIsIDB4OTUsIDB4MjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHg0YSwgMHg0NCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NywgMHgzZSwgMHg0MSwKKwkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGY2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsCisJMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDA3LAorCTB4OTIsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHg0MywKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA4LCAweDgyLCAweDg4LCAweDAxLCAweDAwLAorCTB4MzUsIDB4OTYsIDB4NDAsIDB4MDgsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4OTksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5NiwgMHgyMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDNkLCAweDk2LCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBmLAorCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4M2EsIDB4OTYsIDB4MzEsIDB4NWYsIDB4OTcsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMSwgMHg0YiwgMHg0OCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDZhLCAweGIxLCAweDAxLCAweDAwLCAweDNkLCAweDk2LCAweDMwLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5NiwgMHhhMiwgMHgzYiwKKwkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGEsIDB4OTYsIDB4MTgsIDB4NGEsCisJMHg0NCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDM5LCAweDQ1LCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDRmLCAweDk2LCAweDIyLCAweDVhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4MGYsIDB4OTgsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg1ZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1MSwgMHg5NiwgMHgwMCwgMHgwNSwKKwkweDRhLCAweGIwLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweGE3LCAweDVlLCAweDg0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUyLCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4OTYsIDB4NDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkYiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1OSwgMHg5NiwgMHgyMiwgMHg0NSwKKwkweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4ZDksIDB4OTksIDB4MDAsIDB4NGEsIDB4NDQsIDB4MTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsCisJMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDk3LCAweDNkLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NjEsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTYsIDB4YTIsIDB4M2IsCisJMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGQxLCAweDk5LCAweDAwLCAweDEyLAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4OTYsIDB4MDAsIDB4NWEsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGU2LCAweGM5LCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDJmLCAweDRmLCAweDk1LCAweDg0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4NGIsCisJMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg0MywgMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGUzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJkLCAweDQ0LAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg5NSwgMHgwMCwgMHgxMCwKKwkweDMyLCAweDMwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweGEwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsCisJMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NGMsIDB4MDIsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHg3OCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwKKwkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDg4LCAweDk2LCAweDIyLCAweDQxLCAweDAzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OTYsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDdjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OTYsIDB4MDAsIDB4NWMsCisJMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDY4LCAweDAxLCAweDJkLCAweDA2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGFmLCAweDk2LCAweDIyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDEsCisJMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwgMHg4ZCwgMHg5NiwgMHhhYSwgMHg0MSwgMHgzYiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDQsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHg5NiwgMHgyNiwgMHg0NiwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDY0LCAweDAxLCAweDIwLCAweGYwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YWQsIDB4OTYsIDB4MjIsIDB4NDEsIDB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDIyLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDlmLCAweDk2LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4YWMsIDB4OTYsIDB4MjIsIDB4NDEsIDB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YWEsIDB4OTYsIDB4YTIsIDB4NDEsCisJMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4OTYsIDB4YTgsIDB4NDYsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDQyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OWEsIDB4OTYsIDB4MDAsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDFhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OTYsIDB4MjIsIDB4NDAsIDB4M2IsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg1YywKKwkweDAxLCAweDAwLCAweDAxLCAweDAwLCAweGFmLCAweDk2LCAweDAwLCAweDQxLCAweDNiLCAweGQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4NWYsCisJMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiYiwgMHg5NiwgMHg4YywgMHhmOCwgMHg4ZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LCAweDE0LCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZSwgMHhmOCwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDJhLCAweDRhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjOCwgMHg5NiwgMHgyMCwgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MjAsIDB4ZjAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MjAsIDB4NGEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgyMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGIzLCAweDk2LCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDJkLCAweDQyLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5NiwgMHhhMiwgMHhhNSwKKwkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZDEsIDB4OTYsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLAorCTB4ODMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhkNiwgMHg5NiwgMHhhMCwgMHhhNSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDQxLCAweGU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZGIsIDB4OTYsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHg5OCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg0YywgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDgwLCAweDAwLAorCTB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLCAweDA1LCAweDkwLCAweDAwLCAweDAwLAorCTB4ZTcsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4OTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4OWYsIDB4NDEsCisJMHg4NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4NSwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDJkLCAweDAwLCAweGEwLCAweDQyLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDAwLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4OTcsIDB4NTIsIDB4NDMsIDB4ODEsIDB4NjAsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg5NywgMHgwMCwgMHg0MSwKKwkweDgwLCAweDk0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA1LCAweDk3LCAweDllLCAweGJiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBhLCAweDk3LCAweGEyLCAweDQwLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDJiLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCisJMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDNhLCAweGIwLCAweDAxLCAweDAwLCAweDFmLCAweDk3LCAweDljLCAweDE3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OTcsIDB4YTIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgxZSwKKwkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDEzLCAweDk3LCAweGEyLCAweDQ4LCAweDk5LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTcsIDB4YTIsIDB4OGEsCisJMHhmMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDNlLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGY0LAorCTB4MjgsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHg5NywgMHgyMCwgMHhmMCwgMHgzZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAorCTB4YmYsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjMsCisJMHgzYSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDJhLCAweDBjLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxYywgMHgwMCwgMHgyZCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDYsIDB4MTQsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MmIsIDB4OTcsIDB4MjIsIDB4NDUsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHgwNiwgMHgyYSwgMHhlYywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyYSwgMHg0YywgMHhlMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzUsIDB4OTcsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAxLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTcsIDB4NDUsIDB4NDIsCisJMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDk3LCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlkLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQyLCAweDk3LCAweDQ1LCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDMsIDB4OTcsIDB4YTgsIDB4MDAsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDk3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTcsIDB4NDYsIDB4NDIsCisJMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDk3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDllLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHg1MiwgMHg5NywgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5NywgMHgyMiwgMHhmMywKKwkweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDk0LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTcsIDB4ODUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NTUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU3LCAweDk3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg5NywgMHg4MiwgMHg0MSwKKwkweDIzLCAweDQwLCAweDAwLCAweDAwLCAweDVmLCAweDk3LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4OTQsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NSwgMHg5NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OTcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4NmEsIDB4OTcsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4MDAsIDB4NDMsCisJMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZjLCAweDk3LCAweGEzLCAweDE1LCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDZkLCAweDk3LCAweDAwLCAweDA2LAorCTB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg5NywgMHgyMCwgMHgwMiwgMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDBiLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4NzQsIDB4OTcsIDB4MjYsIDB4NDcsIDB4OTcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NywgMHgyMywgMHg0YiwgMHgwNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDMzLCAweDk4LCAweDAwLCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTcsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg3OCwgMHg5NywgMHhhMiwgMHgwMiwgMHgyYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg5ZSwgMHg5NywgMHhhMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDdhLCAweDk3LCAweDIyLCAweDAyLCAweDBjLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODMsIDB4OTcsIDB4MDAsIDB4MDIsIDB4MTYsIDB4YzAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4OTcsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDgyLCAweDk3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg3ZSwgMHg5NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MjQsIDB4OTcsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTcsIDB4MjIsIDB4MTUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDlkLCAweDk3LCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDhmLCAweDk3LCAweDIyLCAweDQ2LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NzAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5NywgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OGIsIDB4OTcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgyZiwgMHg1YywgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDFiLCAweDk4LCAweDAxLCAweDAwLAorCTB4NWMsIDB4OTcsIDB4MjAsIDB4MTUsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAorCTB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5YSwgMHg5NywgMHhhOCwgMHg0NiwKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDVjLCAweDk3LCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4NWMsIDB4OTcsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OTcsIDB4YTIsIDB4NDQsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweGE3LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MjcsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MSwKKwkweGEzLCAweDQxLCAweDAxLCAweDAwLCAweGFiLCAweDk3LCAweDAwLCAweDQxLCAweDI3LCAweGQwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjIsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHgwNiwKKwkweDE2LCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGM0LCAweDAxLCAweDAwLAorCTB4YmEsIDB4OTcsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDZjLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDQwLAorCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZjAsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjMywgMHg5NywgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0MywKKwkweDg2LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDBiLCAweDE2LCAweGM4LCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTcsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg5NywgMHgyMiwgMHgwNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDk3LCAweGEyLCAweDA2LCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweGNkLCAweDk3LCAweDIyLCAweDQ4LAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OTcsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDMxLCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MmQsIDB4NDgsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MjAsIDB4NDUsCisJMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGQwLCAweDk3LCAweGEwLCAweDQ4LAorCTB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywKKwkweGZjLCAweGM5LCAweDAxLCAweDAwLCAweDNiLCAweDk4LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4OTcsIDB4MjIsIDB4NGEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDAwLCAweDJkLCAweGFiLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhkZiwgMHg5NywgMHg2NCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAwLCAweDAwLCAweGE0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZGYsIDB4OTcsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4YywgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA2LAorCTB4MzAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiYywgMHgwMCwgMHgyZCwgMHg0NiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MTAsIDB4NTAsIDB4MDAsIDB4NDMsIDB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTgsIDB4MDAsIDB4MzAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxOSwgMHhmYywgMHgwMCwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhlZCwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhmMiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywKKwkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDRjLCAweDk1LCAweDYwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGEsIDB4MTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMSwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxNSwKKwkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGZkLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGU4LCAweDVmLCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4N2EsIDB4MDEsIDB4MmUsIDB4ZmUsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgyZCwgMHhmNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYSwgMHg5OCwgMHgyMiwgMHg0MywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4NmUsIDB4MDYsCisJMHg4MiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwZSwgMHg5OCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQ1LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweDRjLAorCTB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHg5OCwgMHg0MiwgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg5ZSwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDk4LCAweDI2LCAweDMwLCAweDkzLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweDk4LCAweDkwLCAweDRjLAorCTB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHg4MCwgMHg0OSwgMHhlYywgMHhhOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDFkLCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmEsIDB4OTgsIDB4MjIsIDB4NWYsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyOSwgMHg5OCwgMHhhMiwgMHg0MCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg5NywgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDk4LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI2LCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MjEsIDB4ODEsIDB4ODQsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHg5OCwgMHhhMiwgMHg1ZiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MywKKwkweDE5LCAweDdjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NiwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwKKwkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDA4LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDM4LCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5OCwgMHgyMCwgMHg0YywKKwkweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDg4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NDEsIDB4OTgsIDB4MjAsIDB4ZjIsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk4LCAweGIwLCAweDAxLCAweDAwLCAweGEzLCAweDAwLCAweDJkLCAweDE0LAorCTB4OTgsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4OTgsIDB4MjAsIDB4NGMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgwLCAweGUwLCAweDAxLCAweDAwLCAweDQ5LCAweDk4LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MTQsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHgwMCwgMHgyNSwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDZlLCAweGYzLCAweDgwLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQyLAorCTB4ODIsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTgsIDB4YTAsIDB4NDAsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwKKwkweDgyLCAweGVjLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweGEwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTIsIDB4OTgsIDB4MDAsIDB4MTIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg0OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDRiLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDRkLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDU0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NTYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NTcsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDViLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDVkLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NWUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg2MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2MiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDY0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4YzAsIDB4NjUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjcsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDZiLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDZjLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NmUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg3MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDczLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4ODAsIDB4NzUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NzcsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg3OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDdhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDdjLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4N2UsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg3MiwgMHg5OCwgMHg0MywgMHg1NywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg5OCwgMHhhMiwgMHg1NywKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdlLCAweDk4LCAweGEyLCAweDQwLCAweDgxLCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NGEsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3NiwgMHg5OCwgMHhhOCwgMHg0YSwgMHg4MCwgMHgzMywgMHgwMCwgMHgwMCwKKwkweDdiLCAweDk4LCAweDIyLCAweDVmLCAweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzksIDB4OTgsIDB4YTgsIDB4NGIsIDB4YWMsIDB4MzMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHhhNSwgMHg4MiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiZSwKKwkweDgzLCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4NGEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTgsIDB4MjgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg5OCwgMHgyMiwgMHg1NywgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDliLCAweDIwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTgsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5YiwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGE4LCAweDAxLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhhNywgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyZCwgMHgxYywgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwKKwkweDhhLCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDhiLCAweGVjLCAweDAwLCAweDAwLAorCTB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgyZCwgMHg0NSwgMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDk3LCAweDk4LCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJlLCAweDAwLCAweDJmLCAweGFiLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OTgsIDB4MDAsIDB4MTQsIDB4ODIsIDB4NTAsIDB4MDEsIDB4MDAsCisJMHg5YywgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5YywgMHg5OCwgMHgyMiwgMHhmMiwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDhjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4OWMsIDB4OTgsIDB4OWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YmUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDljLCAweDAwLCAweDJkLCAweDMwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5NCwgMHgwMCwgMHgyZCwgMHhmMiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5OCwgMHgyMywgMHhmMCwKKwkweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQyLCAweDg4LCAweGY0LCAweDAxLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MjAsIDB4NTAsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTgsIDB4YTMsIDB4OTIsCisJMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHhhNSwgMHg5OCwgMHgwMCwgMHg0NCwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDBhLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA5LAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDgsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgwMCwgMHgwNywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNywKKwkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA3LCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDA2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA2LAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwKKwkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA1LCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MDUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTgsIDB4MDAsIDB4NDQsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwZiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDBlLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBkLAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGMsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywKKwkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBjLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGMsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGMsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgwMCwgMHgwYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYiwKKwkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4YmYsIDB4MDAsIDB4MmQsIDB4NDMsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjMsCisJMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHhjYiwgMHg5OCwgMHgyMywgMHg0MCwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDk0LCAweDAwLCAweDIwLCAweDlkLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OTgsIDB4YTIsIDB4ZjAsIDB4MzgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDEzLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ2LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAorCTB4OWMsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDgyLCAweDg4LCAweDAxLCAweDAwLCAweGQ1LCAweDk4LCAweDIzLCAweDQxLAorCTB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4OSwgMHgwYywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweGYyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4NDEsIDB4MjQsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4OTgsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MiwgMHgzOCwgMHhlYywgMHgwMCwgMHgwMCwKKwkweGRmLCAweDk4LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OTgsIDB4YTMsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGU1LCAweDk4LCAweDIyLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAorCTB4YjQsIDB4MDAsIDB4MjAsIDB4MWQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MmQsIDB4NWYsCisJMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5OCwgMHgyMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDgwLCAweDAwLCAweDIwLCAweDFkLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDIwLCAweDEyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4YTAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4ZWUsIDB4OTgsIDB4OWYsIDB4NDEsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4YywgMHhkMCwgMHgwMSwgMHgwMCwKKwkweGVmLCAweDk4LCAweDAwLCAweDQxLCAweDI0LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZjEsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGY4LCAweDk4LCAweGEyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHg5OCwgMHgyZiwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg0MSwKKwkweDg5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGY4LCAweDNlLCAweGVjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4MTIsIDB4ZTAsIDB4ZWQsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDAsIDB4MjAsIDB4YWIsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHhhMCwgMHgxZiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDk5LCAweGEzLCAweDVmLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ZTcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxNSwgMHg5OSwgMHgyMiwgMHhmMiwgMHg4NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4YjgsIDB4MDAsIDB4MmQsIDB4NDIsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5OSwgMHgxZiwgMHg0MywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDBhLCAweDk5LCAweGEyLCAweDQwLCAweDg3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQxLAorCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4OTksIDB4OWYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyZSwgMHg0MiwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYyLCAweDQwLCAweDg4LCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDk5LCAweDFmLCAweDQ0LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTksIDB4YTIsIDB4NDAsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxOCwgMHg5OSwgMHg2MiwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg2MiwgMHg0MSwKKwkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJjLCAweDAwLCAweDJlLCAweDQzLCAweDg3LCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTksIDB4MjAsIDB4NDMsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg0MywKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDQzLCAweGU0LCAweDMxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDEsIDB4ZTIsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMiwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDljLCAweDAwLCAweDJkLCAweGYwLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg5OSwgMHhhMiwgMHgxMiwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgyZCwgMHhmMiwKKwkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDJiLCAweDk5LCAweGEwLCAweGYyLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MjAsIDB4NDEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgyZCwgMHgxMiwgMHg4NiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDk5LCAweGEzLCAweDQxLCAweGUwLCAweDZkLCAweDAwLCAweDAwLCAweDJmLCAweDk5LCAweDAwLCAweGYwLAorCTB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgyZCwgMHg0MywgMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5OSwgMHg5ZiwgMHg0MiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzQsIDB4OTksIDB4YTMsIDB4NDIsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4OTksIDB4MDAsIDB4MGEsCisJMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDk5LCAweGEwLCAweDE3LCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDE3LAorCTB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTksIDB4MjIsIDB4NDAsIDB4MGQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMCwgMHgwYSwgMHgwYywgMHhlYywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDNjLCAweDk5LCAweGEwLCAweDQxLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHg0OCwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDJhLCAweDBjLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OTksIDB4MjIsIDB4NDksCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweGFhLCAweDk3LCAweDAwLCAweDQwLAorCTB4OGQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTksIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5OCwgMHgwMCwgMHgwOCwKKwkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDU3LCAweDk5LCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4YWEsIDB4OTcsIDB4MDAsIDB4NDYsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5OSwgMHg0MywgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDEwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVkLCAweDk5LCAweDI4LCAweDQwLAorCTB4ODcsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTksIDB4OTksIDB4MjIsIDB4NDgsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhhYSwgMHg5NywgMHgxYiwgMHg0NiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg5OSwgMHgyMiwgMHg1ZiwKKwkweDExLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDE1LCAweDYyLCAweDMxLCAweDAwLCAweDAwLAorCTB4NWUsIDB4OTksIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiMSwgMHg5OSwgMHgwMCwgMHg0OSwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0OSwKKwkweDA2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDAzLCAweDA2LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhhMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDY1LCAweDk5LCAweGEwLCAweDU0LCAweDkzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMiwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDZlLCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDksIDB4YjMsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OTksIDB4MDAsIDB4NDAsCisJMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgyZSwgMHgwOCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDc0LCAweDk5LCAweGEyLCAweDQxLAorCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NywgMHgyZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDc4LCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MmUsIDB4MDUsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDU3LCAweDk1LCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGI4LCAweDk0LCAweDIwLCAweDQxLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAorCTB4YmEsIDB4OTQsIDB4MjAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDg2LCAweDk5LCAweGEyLCAweDQxLAorCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2ZiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDY4LCAweGIxLCAweDAxLCAweDAwLCAweDhhLCAweDk5LCAweDg1LCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTksIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgzOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzNywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MzMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDI5LCAweDliLCAweDAxLCAweDAwLCAweGVlLCAweDA1LCAweDAwLCAweDQwLCAweDI1LCAweDliLCAweDAxLCAweDAwLAorCTB4NDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmIsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlZiwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweGYxLCAweDkzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGE1LCAweDNjLCAweDhiLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4NWIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsCisJMHg0NSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1OSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTMsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhhNywgMHg5OSwgMHhhMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhhNywgMHg5OSwgMHhhMiwgMHg1MSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGE4LCAweDk5LCAweDAwLCAweDQwLCAweDFkLCAweGIzLCAweDAwLCAweDAwLAorCTB4NTAsIDB4NDYsIDB4MDAsIDB4NDAsIDB4MWQsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4YTYsCisJMHg4OCwgMHhiMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHhhNiwgMHgzYSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweGMwLCAweDAwLCAweDlkLCAweDNiLCAweDliLCAweDAxLCAweDAwLCAweGI0LCAweDA1LCAweDAwLCAweDQwLAorCTB4MjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGQsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwYSwgMHgwMCwgMHhhNiwgMHgxNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHg4YSwKKwkweDE1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWUsIDB4NTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgyMCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDQzLCAweDAwLCAweDRiLCAweDk2LCAweGM4LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDEwLAorCTB4MjAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsIDB4MjAsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5OSwgMHgyZSwgMHgwYSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGI3LCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTksIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJiLCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg5OSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGJmLCAweDk5LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDgwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzUsIDB4OTksIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDkwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4OTksIDB4ODUsIDB4NDEsCisJMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGNlLCAweDk5LCAweDQ0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorCTB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4OWMsIDB4NGIsIDB4ODIsIDB4ODksIDB4MDEsIDB4MDAsCisJMHhkMSwgMHg5OSwgMHg0NCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDgwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDljLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OTksIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsCisJMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHhjMiwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDgwLCAweDRiLAorCTB4OTIsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg4MCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwKKwkweDk0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNhLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkZiwgMHg5OSwgMHg4MCwgMHhhNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGUwLCAweDk5LCAweDAwLCAweGE1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OTksIDB4ODAsIDB4YTUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5OSwgMHgyMCwgMHg0ZiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAorCTB4ZWEsIDB4OTksIDB4MjAsIDB4NGIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5OSwgMHgyMCwgMHg0NywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDMsIDB4OTAsIDB4MDAsIDB4NDEsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyZiwgMHg0YywKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZWUsIDB4OTksIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4YTUsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg5OSwgMHhhMiwgMHhhNSwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OTksIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGY3LCAweDk5LCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4YTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5OSwgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGZjLCAweDk5LCAweDFmLCAweDkxLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjgsIDB4MDAsIDB4OTAsIDB4MjAsIDB4YTksIDB4MDEsIDB4MDAsCisJMHhlMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MjMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAzLCAweDAwLCAweDQwLCAweDgwLCAweDk4LCAweDAxLCAweDAwLCAweDA2LCAweDA1LCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDcsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDAyLCAweGEyLCAweGY4LCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIyLCAweGYwLAorCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGEzLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGMxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OWEsIDB4MDAsIDB4NDAsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgyNCwgMHg5YSwgMHgwMCwgMHgwNSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDlhLCAweDAwLCAweDA1LAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzMSwgMHg5YSwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwgMHgzMywgMHg5YSwgMHgwMCwgMHg0NCwKKwkweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweGE0LCAweGU3LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ODEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzEsCisJMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgyOSwgMHg5YSwgMHgyMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDlhLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLCAweGIxLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzUsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg1YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGE0LCAweGU3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDkxLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzksIDB4ZjAsIDB4ODksIDB4MDEsIDB4MDAsIDB4MjksIDB4OWEsIDB4MjIsIDB4NDEsCisJMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg5YSwgMHgwMCwgMHg0MSwgMHhjMSwgMHhjMywgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweGRlLCAweDg1LCAweDg5LCAweDAxLCAweDAwLCAweDI5LCAweDlhLCAweDAwLCAweGMyLAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4OTUsIDB4ODksIDB4MDEsIDB4MDAsCisJMHgyOSwgMHg5YSwgMHgwMCwgMHhjYSwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwKKwkweDgxLCAweGM4LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLCAweGYyLCAweDkzLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwKKwkweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGI2LCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLAorCTB4YjYsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI2LCAweDlmLCAweDQxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI5LCAweDlmLCAweDIyLCAweDQwLAorCTB4N2IsIDB4NmYsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweGM0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLCAweGM2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4YTIsIDB4YzgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MTQsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHg5ZiwgMHgwMCwgMHg0ZCwgMHg5YSwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGMyLCAweDlmLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4OWYsIDB4YTIsIDB4NDEsIDB4OWIsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0OSwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4YzksIDB4OWYsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NGEsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweGM5LCAweDlmLCAweDAwLCAweDQzLCAweGNiLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDksIDB4OWYsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4NGQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywKKwkweDQzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NGYsCisJMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkOSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE5LCAweDlhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzUsIDB4OWEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9nYnJjdnVjb2RlLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9nYnJjdnVjb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhNWE0YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2dicmN2dWNvZGUuaApAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5Ny0yMDAyIEFsYWNyaXRlY2gsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAorICoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBHQl9SQ1ZVQ09ERV9WRVJTX1NUUklORwkiMS4yIgorI2RlZmluZSBHQl9SQ1ZVQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMjoxNSIKKworc3RhdGljIHUzMiBHQlJjdlVDb2RlTGVuID0gNTEyOworCitzdGF0aWMgdTggR0JSY3ZVQ29kZVsyNTYwXSA9Cit7CisweDQ3LCAweDc1LCAweDAxLCAweDAwLCAweDA0LCAweGEwLCAweDEzLCAweDAxLCAweDAwLCAweDFjLCAweGI3LCAweDViLCAweDA5LAorMHgzMCwgMHgwMCwgMHhiNiwgMHg1ZiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgzYiwKKzB4NzgsIDB4M2EsIDB4MDAsIDB4MWMsIDB4YTIsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDcsIDB4MWQsIDB4MDEsIDB4NzAsCisweDE4LCAweGIzLCAweDdiLCAweGE5LCAweGFhLCAweDFlLCAweGI0LCAweDdiLCAweDAxLCAweDBjLCAweDFjLCAweGI1LCAweDdiLAorMHgxZCwgMHgwNiwgMHgxYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2NCwgMHgwOCwgMHgwYywgMHgzMSwgMHg1NiwgMHg3MCwgMHgwNCwKKzB4MGMsIDB4MzEsIDB4NTYsIDB4ODAsIDB4MDQsIDB4MGMsIDB4MzEsIDB4NGEsIDB4OTAsIDB4MDQsIDB4MGMsIDB4MzEsIDB4NDYsCisweGEwLCAweDAwLCAweDA5LCAweDI1LCAweDUxLCAweGMwLCAweDA0LCAweDBjLCAweDMxLCAweDRlLCAweGIwLCAweDAwLCAweGU5LAorMHgyNCwgMHg1MSwgMHhjMCwgMHgwNCwgMHhjYywgMHhiMywgMHgwMCwgMHgxYywgMHgxYywgMHhlYiwgMHgyZCwgMHgwMSwgMHgwMCwKKzB4MWMsIDB4MDYsIDB4NTYsIDB4NDIsIDB4ZDQsIDB4MDgsIDB4MDcsIDB4OWQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsCisweDAyLCAweDAwLCAweDEwLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDA2LCAweDU2LCAweDVhLCAweGMwLCAweDA0LAorMHhhMCwgMHgzMCwgMHg2YywgMHgwMywgMHgwMCwgMHhhYywgMHgzMCwgMHg2ZCwgMHgwMywgMHgwMCwgMHhjZCwgMHgwMywgMHgzYSwKKzB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NjAsIDB4OGUsIDB4NDEsIDB4NTQsIDB4MDksIDB4MjksCisweDI1LCAweDZkLCAweDAzLCAweDAwLCAweDgwLCAweDhlLCAweDQxLCAweDU0LCAweDA5LCAweDhjLCAweDMwLCAweDhkLCAweDAwLAorMHgwNCwgMHg0NywgMHgxYywgMHgwMSwgMHgwMCwgMHgxYywgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHgwMCwgMHgwMCwKKzB4NjAsIDB4MDAsIDB4MDQsIDB4NDcsIDB4MWMsIDB4NjEsIDB4YzAsIDB4MDQsIDB4NDcsIDB4MWMsIDB4NmQsIDB4MDMsIDB4MDAsCisweDZjLCAweDMwLCAweDAxLCAweDAwLCAweDFjLCAweDRkLCAweDM0LCAweDAyLCAweDAwLCAweDFjLCAweDdiLCAweGI3LCAweDAyLAorMHgwMCwgMHgxYywgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhjOCwgMHg4MywgMHgzNywgMHgwMCwgMHgxYywgMHg4MCwKKzB4MDEsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDQsIDB4YTAsIDB4MGYsIDB4NDAsIDB4NTQsCisweDA5LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDdiLCAweGZiLCAweGYyLCAweDAwLCAweDFjLCAweGNjLCAweDMzLAorMHgwZCwgMHgwMCwgMHgxYywgMHhiNCwgMHg3YiwgMHhmZCwgMHgwMywgMHgxYywgMHg4MCwgMHgwZSwgMHg0MCwgMHg1NCwgMHgwOSwKKzB4ZTAsIDB4ZmIsIDB4MDUsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDMsIDB4MDAsIDB4YjMsIDB4MGYsIDB4NDEsCisweDU0LCAweDA5LCAweDAwLCAweDAwLCAweGU4LCAweDcwLCAweDA0LCAweDAwLCAweDAwLCAweGU4LCAweDgwLCAweDA0LCAweDAwLAorMHgwMCwgMHhhMCwgMHg5MywgMHgwMCwgMHg2MSwgMHg3NiwgMHhhMSwgMHhjMywgMHgwNCwgMHhjMCwgMHg4ZCwgMHg0MSwgMHg1NCwKKzB4MDksIDB4ZTAsIDB4N2IsIDB4MDAsIDB4YzAsIDB4MWYsIDB4YTAsIDB4ZmQsIDB4YzEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MzMsCisweDA1LCAweDAwLCAweDFjLCAweGQ0LCAweDAzLCAweDAwLCAweDNjLCAweDFjLCAweGQ0LCAweGQzLCAweDFiLCAweDAwLCAweDFjLAorMHhjMCwgMHhkMywgMHg1MiwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg3NCwgMHgxMywgMHgwNCwgMHg4ZSwgMHg4ZSwgMHg0MiwKKzB4NTQsIDB4MDksIDB4NWIsIDB4ODAsIDB4NzYsIDB4MTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsCisweDAwLCAweDkwLCAweDAxLCAweDAwLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDQxLCAweDU0LAorMHgwOSwgMHhjMCwgMHgwMywgMHhmYywgMHg3ZiwgMHgxYywgMHhhMCwgMHgwMSwgMHg5YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4YTAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YzAsIDB4MDMsIDB4ZmMsIDB4MDMsIDB4MWMsCisweGY1LCAweDc3LCAweDAxLCAweDAwLCAweDFjLCAweDI2LCAweDdhLCAweGY2LCAweDA1LCAweDFjLCAweGEwLCAweDBmLCAweDQxLAorMHg1NCwgMHgwOSwgMHhiMywgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhiNSwgMHgwMiwgMHgwMiwgMHgwMCwgMHgxYywgMHhhMCwKKzB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4N2EsIDB4MDYsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YjUsIDB4MDIsIDB4MDIsIDB4MDAsCisweDFjLCAweDUzLCAweDBmLCAweDQyLCAweDU0LCAweDA5LCAweGFmLCAweDAzLCAweDAxLCAweDAwLCAweDFjLCAweDdhLCAweDBlLAorMHg0MiwgMHg1NCwgMHgwOSwgMHhiNSwgMHgwMiwgMHgwMiwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxYywKKzB4YTAsIDB4M2QsIDB4YTYsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MTEsIDB4MDQsIDB4ZDQsIDB4ZDMsIDB4NTIsCisweDAwLCAweDFjLCAweGI1LCAweDNlLCAweGFlLCAweDAxLCAweDAwLCAweDIwLCAweGZiLCAweGZkLCAweGZmLCAweDFmLCAweDgwLAorMHgyYywgMHg4NCwgMHgwMywgMHgwMCwgMHhiOSwgMHgzYSwgMHg5YSwgMHgwMSwgMHgwMCwgMHg3NSwgMHgzYiwgMHgwMiwgMHgwMCwKKzB4MWMsIDB4YTcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ZGIsIDB4ODMsIDB4MTYsIDB4MDAsIDB4MWMsIDB4YzcsIDB4MWQsCisweDFkLCAweGMxLCAweDA0LCAweGI5LCAweDNiLCAweDg5LCAweGMxLCAweDA0LCAweDhiLCAweDJjLCAweDAxLCAweDAwLCAweDFjLAorMHg2YiwgMHgyYywgMHgzMSwgMHhjMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgxMSwgMHgwMCwgMHhjYiwgMHgyYywgMHg3NSwKKzB4YzEsIDB4MDQsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4NTQsCisweGQwLCAweDAyLCAweDAwLCAweDFjLCAweDQ5LCAweDI1LCAweGFkLCAweDAxLCAweDAwLCAweGFiLCAweDJjLCAweDdkLCAweGMxLAorMHgwNCwgMHhhNywgMHgxZCwgMHg2ZCwgMHgwMywgMHgwMCwgMHhjYywgMHgzMywgMHgwOSwgMHgwMCwgMHgxYywgMHhlYiwgMHgyZCwKKzB4MDEsIDB4MDAsIDB4MWMsIDB4ZWEsIDB4MjksIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksCisweGFlLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGQ0LCAweDA3LCAweGZjLAorMHgwMywgMHgxYywgMHg5OSwgMHgzYSwgMHgwMiwgMHgwMCwgMHgxYywgMHhiYiwgMHgzOCwgMHgwMiwgMHgwMCwgMHgxYywgMHgwMCwKKzB4MzgsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDEsIDB4MDQsIDB4ZGIsIDB4M2IsIDB4N2UsIDB4MDAsCisweDFjLCAweGM3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweDI2LCAweDdhLCAweDBhLCAweDA2LCAweDFjLCAweDI3LCAweDFkLAorMHgwMSwgMHgwMCwgMHgxYywgMHhiMywgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwKKzB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4NDIsCisweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDQyLCAweDU0LCAweDA5LCAweGEwLAorMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwNiwgMHgwMiwgMHgwMCwgMHgxYywgMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwKKzB4MDksIDB4YWYsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsCisweDQyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDQyLCAweDU0LCAweDA5LAorMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHg0MiwKKzB4NTQsIDB4MDksIDB4MDAsIDB4M2QsIDB4MDIsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTIsIDB4MDAsIDB4Y2IsCisweDJjLCAweDAxLCAweDAwLCAweDFjLCAweDc1LCAweDNiLCAweDAyLCAweDAwLCAweDFjLCAweGE3LCAweDFjLCAweDAxLCAweDAwLAorMHgxMCwgMHhhNiwgMHg3YiwgMHhmMSwgMHgwNSwgMHgxYywgMHgwMCwgMHgwMCwgMHg4OCwgMHhjMiwgMHgwNCwgMHhhNiwgMHg3YiwKKzB4ZjEsIDB4MDUsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MDQsIDB4Y2IsIDB4MmYsIDB4MDUsIDB4MDAsIDB4MWMsCisweDYwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweGM3LCAweDFjLCAweGUxLCAweDAyLCAweDAwLCAweDUzLCAweDBmLCAweDQyLAorMHg1NCwgMHgwOSwgMHhjMCwgMHg4MywgMHhmMSwgMHgzMiwgMHgxYywgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHgwNCwgMHg0NiwKKzB4N2EsIDB4ZGEsIDB4MDUsIDB4MWMsIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4YzAsIDB4ODMsIDB4ZjEsIDB4MzIsCisweDFjLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDA0LCAweDQwLCAweGZhLCAweDE1LCAweDAwLCAweDFjLCAweDAwLCAweDAwLAorMHhhMCwgMHgwMiwgMHgwNCwgMHg0NiwgMHg3YSwgMHhkYSwgMHgwNSwgMHgxYywgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwKKzB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4NDEsCisweDU0LCAweDA5LCAweGIzLCAweDdiLCAweDAxLCAweGMwLCAweDFmLCAweDc0LCAweDBlLCAweDQwLCAweDU0LCAweDA5LCAweGMwLAorMHgwMywgMHg5YywgMHgwMCwgMHgxYywgMHg4MCwgMHgwMCwgMHhmMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MTIsIDB4MDUsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4ZDMsCisweDJiLCAweDAwLCAweDFjLCAweGQ0LCAweGQzLCAweDUyLCAweDAwLCAweDFjLCAweDgwLCAweDc2LCAweDk1LCAweDEzLCAweDA0LAorMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHhhNiwgMHg3YiwgMHhhOSwgMHgwMywgMHgxMCwgMHhjNywgMHg5YywgMHgwMCwKKzB4MDAsIDB4MWMsIDB4ODAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDIsIDB4MDQsIDB4MDAsCisweDAwLCAweDZjLCAweGMzLCAweDA0LCAweGFiLCAweDJkLCAweGYxLCAweDEyLCAweDA1LCAweDA3LCAweDFkLCAweGNkLCAweGMyLAorMHgwNCwgMHg4YiwgMHgyZCwgMHgwMSwgMHgwMCwgMHgxYywgMHg2OSwgMHgyNSwgMHgwMSwgMHgwMCwgMHgxYywgMHhhNiwgMHg3YiwKKzB4YTksIDB4MDMsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDksIDB4MDAsIDB4MWMsIDB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsCisweDAwLCAweDAwLCAweDYwLCAweDAzLCAweDAwLCAweDUzLCAweDBmLCAweDQyLCAweDU0LCAweDA5LCAweDQ2LCAweDdhLCAweGRhLAorMHgwNSwgMHgxYywgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg0MCwgMHhmYSwgMHgxNSwgMHgwMCwgMHgxYywgMHgwMCwKKzB4MDAsIDB4MjgsIDB4MDMsIDB4MDQsIDB4NDYsIDB4N2EsIDB4ZGEsIDB4MDUsIDB4MWMsIDB4YjUsIDB4MGYsIDB4NDEsIDB4NTQsCisweDA5LCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDczLCAweGVjLCAweDQyLCAweDAzLCAweDA0LCAweDYwLCAweDJjLAorMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHhjNywgMHgxYywgMHgwMSwgMHgwMCwgMHgxYywKKzB4MDAsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MDUsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YzAsIDB4ZDcsIDB4MjIsCisweDAwLCAweDFjLCAweDc1LCAweDU2LCAweDk2LCAweDEzLCAweDA0LCAweDYwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweGU3LAorMHgxYywgMHg1ZCwgMHgwMywgMHgwNCwgMHhlNywgMHg5YywgMHgwMCwgMHgwMCwgMHgxYywgMHhhNiwgMHg3YiwgMHhhOSwgMHgwMywKKzB4MTAsIDB4ODAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsCisweDZjLCAweGMzLCAweDA0LCAweGI5LCAweDdiLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGEwLCAweGMzLCAweDA0LAorMHhjYiwgMHhhZiwgMHhmYywgMHgwNywgMHgxYywgMHhjYiwgMHgyZiwgMHgwMSwgMHgwNCwgMHgxYywgMHhjNywgMHg5ZiwgMHg4MCwKKzB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4ZmMsIDB4MDcsIDB4MWMsIDB4Y2IsCisweDJmLCAweDBkLCAweDA0LCAweDFjLCAweGM3LCAweDlmLCAweDgwLCAweDAzLCAweDFjLCAweDAwLCAweDAwLCAweGEwLCAweGMzLAorMHgwNCwgMHhjYiwgMHhhZiwgMHgwMCwgMHhmOCwgMHgxZCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgwMCwgMHgxZCwgMHgwMCwgMHgwMCwKKzB4YTAsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MTMsIDB4MDUsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsCisweGMwLCAweDFkLCAweGYwLCAweGQzLCAweDA4LCAweDI3LCAweDlkLCAweGY4LCAweDAzLCAweDAwLCAweGEwLCAweGVlLCAweDU2LAorMHhkNCwgMHgwMCwgMHhmYiwgMHg3NSwgMHgxOSwgMHgxNCwgMHgwNCwgMHgyMCwgMHg3YiwgMHgwNiwgMHgwMCwgMHgxYywgMHhjMCwKKzB4MWMsIDB4MmMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ZDMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ZjQsCisweDAwLCAweGMwLCAweGVmLCAweGYyLCAweDAwLCAweDFjLCAweDIwLCAweDI1LCAweDZjLCAweDE0LCAweDA0LCAweDYwLCAweGI3LAorMHhlNiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgxNSwgMHgwMCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywKKzB4Y2MsIDB4MzMsIDB4MDUsIDB4MDIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YzUsIDB4MDQsIDB4NjAsIDB4YjcsIDB4MWUsCisweDA1LCAweDA0LCAweDAwLCAweDAwLCAweDFjLCAweDE1LCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGM0LCAweDA0LCAweGMwLAorMHgxZCwgMHhhYywgMHhmMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhjNCwgMHgwNCwgMHgwNywgMHg5ZCwgMHgwMCwgMHgwMCwKKzB4MWMsIDB4MWIsIDB4NzQsIDB4MGQsIDB4ZjQsIDB4MDQsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4ZTAsIDB4N2IsCisweDAwLCAweGZjLCAweDFmLCAweDM5LCAweDdmLCAweDAyLCAweDAwLCAweDFjLCAweDA3LCAweDFkLCAweGIxLCAweGMzLCAweDA0LAorMHhhNiwgMHg3YiwgMHhjMSwgMHgwMywgMHgxYywgMHgwMCwgMHgwMCwgMHg3OCwgMHhjNCwgMHgwNCwgMHhlMCwgMHgxYywgMHgwMCwKKzB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4MDAsIDB4ZjgsIDB4MWQsIDB4Y2IsCisweDJmLCAweDAxLCAweDEwLCAweDFkLCAweDAwLCAweDAwLCAweGMwLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweGMwLCAweDAzLAorMHgwNCwgMHhjYiwgMHhhZiwgMHgwMCwgMHhmOCwgMHgxZCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgxOCwgMHgxZCwgMHhjNywgMHg5ZiwKKzB4MDAsIDB4MGIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzMsIDB4MDQsIDB4ZmIsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MWMsCisweDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDAxLAorMHgwMiwgMHgxYywgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMywgMHgwNCwgMHhhMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYywgMHhhMCwKKzB4ZWUsIDB4YjYsIDB4MDMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4ZmMsIDB4MDcsIDB4MWMsIDB4Y2IsIDB4MmYsIDB4MDksIDB4MDQsCisweDFjLCAweGZiLCAweDc1LCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGMwLCAweGMzLCAweDA0LCAweGNjLCAweGIzLAorMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwMSwgMHgwMiwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYywgMHhjNSwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4ODgsIDB4MzQsIDB4MDUsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MTUsCisweDAyLCAweDFjLCAweDQ3LCAweDlkLCAweDY0LCAweGM0LCAweDA0LCAweDAwLCAweDAwLCAweDg4LCAweDQ0LCAweDAwLCAweDgwLAorMHgxZCwgMHg4YywgMHg1NCwgMHgwNCwgMHg4NywgMHgxZCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHhjZSwgMHg3NiwgMHgwMSwgMHgwMCwKKzB4MWMsIDB4ZWYsIDB4NzYsIDB4YWQsIDB4YzQsIDB4MDQsIDB4YTQsIDB4NzcsIDB4OWQsIDB4MjQsIDB4MDksIDB4ZTQsIDB4NzYsCisweDAxLCAweDAwLCAweDFjLCAweGM0LCAweDc2LCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGE4LCAweDU0LCAweDA0LAorMHhkNywgMHg3NiwgMHgwMSwgMHg1MCwgMHgxOCwgMHhmNiwgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MzAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4Y2MsIDB4MzAsIDB4NTEsIDB4YzUsIDB4MDQsIDB4ZWIsCisweDJkLCAweDAxLCAweDAwLCAweDFjLCAweGVhLCAweDI5LCAweDAxLCAweDAwLCAweDFjLCAweGMwLCAweDU5LCAweDAxLCAweDAwLAorMHgxYywgMHhmNSwgMHg3NywgMHgzOSwgMHhjNSwgMHgwNCwgMHhlMCwgMHgzMCwgMHhlYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg0YywKKzB4YzAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NGMsIDB4MDQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4MDAsCisweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDA5LCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGM1LAorMHhjNCwgMHgwNCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgxOSwgMHgwMiwgMHgxYywgMHhlYiwKKzB4MmQsIDB4YzUsIDB4YzQsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MGQsIDB4MDIsCisweDFjLCAweGViLCAweDJkLCAweGM1LCAweGM0LCAweDA0LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLAorMHgxMSwgMHgwMiwgMHgxYywgMHhlYiwgMHgyZCwgMHhjNSwgMHhjNCwgMHgwNCwgMHgwMCwgMHg3YiwgMHgwMCwgMHg4MCwgMHgxYywKKzB4YWUsIDB4NzcsIDB4NTEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4YzAsIDB4MDQsIDB4ZDMsIDB4OGIsIDB4MDAsCisweGZjLCAweDFmLCAweDYwLCAweDdhLCAweDNjLCAweDAwLCAweDFjLCAweDYwLCAweDRjLCAweGQwLCAweDA0LCAweDAwLCAweGMwLAorMHgyZiwgMHgyMCwgMHgwNSwgMHgxZiwgMHhlMCwgMHgzMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgyNSwgMHhjMCwgMHgwNCwKKzB4MDAsIDB4YjUsIDB4NWIsIDB4YzEsIDB4MDQsIDB4MDQsIDB4NjksIDB4MjYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NmEsIDB4MmIsCisweDAxLCAweDAwLCAweDFjLCAweDgwLCAweDFkLCAweDAwLCAweDAwLCAweDFjLCAweGE5LCAweDI1LCAweDUxLCAweDA1LCAweDAwLAorMHhlZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhhZiwgMHg3NywgMHgxMSwgMHgwNSwgMHgwMCwgMHhiNCwgMHg1ZiwgMHgwMSwKKzB4NDAsIDB4MTgsIDB4MDcsIDB4OWQsIDB4NTQsIDB4NTUsIDB4MDQsIDB4YjcsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4OTYsCisweDc2LCAweDAxLCAweDAwLCAweDFjLCAweDQ3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGE0LCAweDMzLCAweDAxLCAweDYwLAorMHgxOCwgMHhhNCwgMHgyZiwgMHgwMSwgMHg2MCwgMHgxOCwgMHg2NCwgMHg3NywgMHgwMSwgMHg2MCwgMHgxOCwgMHgyNCwgMHg3NywKKzB4MDEsIDB4NjAsIDB4MTgsIDB4NDQsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NjQsIDB4ODgsIDB4MDMsIDB4MDAsIDB4MWMsCisweGE0LCAweDNmLCAweDAxLCAweDAwLCAweDFjLCAweGE0LCAweDNiLCAweDAxLCAweDAwLCAweDFjLCAweDUzLCAweDc3LCAweDAxLAorMHgwMCwgMHgxYywgMHhkMywgMHhjZiwgMHgzYiwgMHgwMCwgMHgxYywgMHg1MywgMHg0ZiwgMHgwMiwgMHgwMCwgMHgxYywgMHhkMywKKzB4Y2YsIDB4MDAsIDB4MDAsIDB4MWYsIDB4ZGEsIDB4Y2YsIDB4MGIsIDB4MDAsIDB4MWMsIDB4ZDUsIDB4NTcsIDB4MGYsIDB4MDAsCisweDFjLCAweGQzLCAweGQzLCAweDM3LCAweDAwLCAweDFjLCAweGQ0LCAweDUzLCAweDBmLCAweDAwLCAweDFjLCAweGUwLCAweDI5LAorMHgwMCwgMHgwMCwgMHgxYywgMHhmNSwgMHhkNSwgMHhjMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHg1NSwgMHgwNCwKKzB4NzcsIDB4NTYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NTYsIDB4NTMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDE4LCAweDAwLCAweDAwLCAweDA0LCAweGMwLCAweDA0LCAweGY1LCAweDU1LCAweDAxLCAweDAwLCAweDFjLCAweDAwLAorMHgwMCwgMHhjNCwgMHg1NSwgMHgwNCwgMHg3NywgMHg1NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg1NiwgMHg1MywgMHgwMSwgMHgwMCwKKzB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4YzAsIDB4MDQsIDB4Y2IsIDB4MmYsCisweDAxLCAweDE4LCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDEwLCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDA4LCAweDEwLAorMHhjYiwgMHgyZiwgMHgwMSwgMHgwOCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgyMCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwKKzB4MDAsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MjgsIDB4MTAsIDB4ODksIDB4MjUsIDB4NmQsIDB4YzIsIDB4MDQsIDB4MDAsCisweDAwLCAweDA0LCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLAorMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsCisweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDQwLCAweDFjLCAweDY4LCAweGMwLCAweDA0LCAweDQwLCAweDFjLCAweDk4LAorMHhjMCwgMHgwNCwgMHhhNywgMHg3NywgMHg2ZCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMCwgMHgwNCwgMHgyNywKKzB4MWQsIDB4ZWQsIDB4YzAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsCisweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc2RiZ2Rvd25sb2FkLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc2RiZ2Rvd25sb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5ZTAwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuaApAQCAtMCwwICsxLDY4NTAgQEAKKyNkZWZpbmUgT0FTSVNfVUNPREVfVkVSU19TVFJJTkcJIjEuMiIKKyNkZWZpbmUgT0FTSVNfVUNPREVfVkVSU19EQVRFICAJIjIwMDYvMDMvMjcgMTU6MTE6MjIiCisjZGVmaW5lIE9BU0lTX1VDT0RFX0hPU1RJRl9JRCAgCTMKKworc3RhdGljIHMzMiBPTnVtU2VjdGlvbnMgPSAweDI7CitzdGF0aWMgdTMyIE9TZWN0aW9uU2l6ZVtdID0KK3sKKwkweDAwMDA0MDAwLCAweDAwMDEwMDAwLAorfTsKKworc3RhdGljIHUzMiBPU2VjdGlvblN0YXJ0W10gPQoreworCTB4MDAwMDAwMDAsIDB4MDAwMDgwMDAsCit9OworCitzdGF0aWMgdTggT2FzaXNVQ29kZVsyXVs2NTUzNl0gPQoreworCXsKKwkweDE1LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwKKwkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweGEyLCAweDQwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MDksIDB4MDAsIDB4YTIsIDB4NDksIDB4ZGQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweGEyLCAweDQwLAorCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDhmLCAweDk4LCAweDE4LCAweDMxLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTgsCisJMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDk4LCAweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDQwLCAweDk4LAorCTB4ODAsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgyOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MGUsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDI5LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4ZGQsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYSwgMHgwMCwgMHgxNCwgMHhiYywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZlLCAweDAwLCAweDEzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZmQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZmYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgzMywgMHgwMCwgMHgxOCwgMHhlZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweGEyLCAweDQxLCAweDg5LCAweDUwLCAweDAwLCAweDAwLAorCTB4OTksIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGUwLCAweGIzLCAweDAxLCAweDAwLCAweDM5LCAweDAwLCAweDk4LCAweGVlLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzYiwgMHgwMCwgMHg4MCwgMHhmMywgMHhkZSwgMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDNlLCAweDAwLCAweDgzLCAweGYzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHgyZSwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLAorCTB4MjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MTgsIDB4ZWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHgwMCwgMHg5NSwgMHhlOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhlOCwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHhlYywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZWUsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY3LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDAwLCAweDAwLCAweGYwLCAweGQ2LCAweDhkLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGYwLAorCTB4ZjAsIDB4ZGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ2LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAyLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGY0LCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGY4LCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MjIsIDB4ZmEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGRlLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZDYsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGZhLAorCTB4ZDYsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHhmYiwKKwkweDdhLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGRjLCAweGIxLCAweDAxLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZGQsIDB4OTEsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4OTUsIDB4ZTgsCisJMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhlOSwgMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQyLAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg3YywgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4NSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDgwLCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4ZSwgMHgwMCwgMHgwOSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDhjLCAweDAwLCAweDA4LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweDFmLCAweGZkLAorCTB4ZjksIDB4MzMsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4OWUsIDB4ZmQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwKKwkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZkLCAweGY3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCisJMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHgwMCwgMHgwYSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQwLCAweGZiLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGZkLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ZjksIDB4ZjMsIDB4OGYsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNywgMHg0MiwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwgMHg5NywgMHgwMCwgMHhhMiwgMHhmZiwKKwkweGY3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4ZmYsIDB4ZmIsIDB4ZWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZmMsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGJiLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ZmQsIDB4N2YsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGZkLCAweDdmLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDdmLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDlhLCAweDEzLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDlhLCAweDEzLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDI5LCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg2NywgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDdmLCAweDAwLCAweDQwLCAweDI1LCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ1LCAweDgwLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDYsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweDg4LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHg0NiwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhhNSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweGNlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDhkLCAweGYwLCAweDAxLCAweDAwLAorCTB4YzksIDB4MDAsIDB4ODIsIDB4NDEsIDB4ODksIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0NSwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDA4LCAweDgzLCAweDk4LCAweDAxLCAweDAwLAorCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmIsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDk0LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGE1LCAweGE1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4NGUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4NCwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTYsCisJMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkZiwgMHgwMCwgMHhhMiwgMHg0MSwgMHg4ZCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLAorCTB4MjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODksIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg5NCwKKwkweDhhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwKKwkweGVjLCAweDAwLCAweDA4LCAweDQxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGVkLCAweDAwLCAweDAwLCAweDk0LAorCTB4MjQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MjQsIDB4ZjUsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmMiwgMHgwMCwgMHhhMCwgMHg0NCwKKwkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDJiLCAweDQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWYsIDB4MDAsIDB4MjAsIDB4NDQsCisJMHg4OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDQyLAorCTB4ODksIDB4ZDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDAsIDB4YTAsIDB4ZmEsIDB4OGEsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHgwMCwgMHhhMywgMHg0MiwKKwkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQ1LCAweDg4LCAweDg4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OGEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4OTAsIDB4NDQsCisJMHg4YSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ1LCAweDhhLCAweGE4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUwLAorCTB4OGIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDA4LCAweDgzLCAweDE0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHhmOSwgMHg5YiwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHhmYywgMHgxOSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQwLCAweDk0LCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmOSwgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDJiLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAxLCAweDlmLCAweDk0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDIsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NTEsCisJMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAxLCAweDAwLCAweDQ5LCAweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDEsIDB4YTIsIDB4NDEsIDB4OTMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDczLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc3LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4N2QsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTEsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzYiwgMHgwMSwgMHgyMCwgMHg0OCwgMHhhMSwgMHg1MSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDQ3LCAweDAxLCAweDIyLCAweDRiLAorCTB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKKwkweDdlLCAweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDAxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhhYSwgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDk3LCAweGYwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweGFhLAorCTB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQwLCAweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDIyLCAweGNjLAorCTB4ODUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYzLCAweDAxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGJhLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLAorCTB4YTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YmMsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNCwgMHgyZiwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywKKwkweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweGE5LCAweGIzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg3MywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDg2LCAweDAxLCAweDAwLCAweGRkLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OGIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI2LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjNCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNSwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgyLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ODMsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4YjgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwKKwkweGQ1LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ2LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsCisJMHg3MiwgMHgwMSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgyOCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MSwgMHg0OSwKKwkweGZkLCAweDkzLCAweDI4LCAweDAwLCAweDU1LCAweDAxLCAweDUyLCAweDRhLCAweGZkLCAweDkzLCAweDJhLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NTUsIDB4NDksIDB4ZmQsIDB4ODMsIDB4MmEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTYsIDB4NGEsCisJMHhmZCwgMHg4MywgMHgyYSwgMHgwMCwgMHg1MCwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MCwgMHgzMCwgMHgyYSwgMHgwMCwKKwkweDU1LCAweDAxLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDJhLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgyLAorCTB4ODAsIDB4MzAsIDB4MmEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MmEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4OSwgMHhiMCwgMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLAorCTB4YjMsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDkyLCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MDEsIDB4MjIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHgwMSwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MSwKKwkweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGJmLCAweGIzLCAweDAxLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4YTAsIDB4MGYsIDB4YmQsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweGI1LCAweDAxLCAweDAwLCAweDQwLCAweDE5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmZiwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4ZmYsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHhhNCwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGFhLCAweDAxLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDEsIDB4YTIsIDB4NGMsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHgwMSwgMHgyMiwgMHhkMiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHgwMSwgMHgyMiwgMHg0MSwKKwkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGEyLCAweGUwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHg4OSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MiwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQxLCAweDQzLCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDQsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhiMSwgMHgwMSwgMHgwMCwgMHg0OCwgMHg0OSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHgwMSwgMHgwMCwgMHg1YiwKKwkweDg5LCAweDkwLCAweDAwLCAweDAwLCAweGE4LCAweDlmLCAweDAwLCAweGEwLCAweDllLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGJlLCAweDAxLCAweDIyLCAweGRlLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhiOSwgMHgwMSwgMHhhMiwgMHg0NCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MywKKwkweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZjgsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGQxLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDUzLCAweDAxLCAweDAwLCAweGRlLAorCTB4YTEsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhlNSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUyLCAweDAxLCAweDAwLCAweGRmLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsCisJMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwgMHhhNSwgMHhlNywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGMxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4MDEsIDB4MjIsIDB4NDQsIDB4YzEsIDB4NTMsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwMSwgMHg4NCwgMHg0MSwgMHg4MSwgMHg0MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDUsIDB4MDEsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDAxLCAweDAwLCAweGRkLCAweGExLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywKKwkweGE3LCAweGNiLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweGUwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZGUsCisJMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDUwLCAweDAxLCAweGEyLCAweGJhLAorCTB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhlOCwgMHgwMSwgMHhhOCwgMHhiMSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGJhLCAweGIzLCAweDAxLCAweDAwLAorCTB4NmIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDIsIDB4MDAsIDB4NGQsCisJMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUzLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlYiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGY1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGY3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjksIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZjksIDB4MDEsIDB4MjIsIDB4NDAsCisJMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAyLCAweDAwLCAweGM3LCAweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDIsIDB4MDAsIDB4NDIsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVkLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmEsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAyLCAweGI4LCAweDQwLCAweDgxLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDIsIDB4YjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMiwgMHhiYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDIsIDB4YmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMiwgMHhiYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDE2LCAweDAyLCAweGJkLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMiwgMHhiZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDFhLCAweDAyLCAweGJmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDIsIDB4YzgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDFlLCAweDAyLCAweGM5LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDIsIDB4Y2EsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMiwgMHhjYiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDIsIDB4Y2MsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMiwgMHhjZCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDI4LCAweDAyLCAweGNlLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyYSwgMHgwMiwgMHhjZiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDJjLCAweDAyLCAweGYwLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDIsIDB4ZjEsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAyLCAweGYyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDIsIDB4ZjMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhmNCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MzYsIDB4MDIsIDB4ZjUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMiwgMHhmNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU2LCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDNhLCAweDAyLCAweGY3LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMiwgMHhmOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDNlLCAweDAyLCAweGY5LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ZmEsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDQyLCAweDAyLCAweGZiLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4ZmMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NiwgMHgwMiwgMHhmZCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVkLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDIsIDB4ZmUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0YSwgMHgwMiwgMHhmZiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDA2LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkYiwgMHgwMSwgMHgwMCwgMHhjNywgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY2LCAweDAyLCAweDAwLCAweDQ4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4MWEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDYzLCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDVmLCAweDAyLCAweDQ5LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NDAsIDB4MWMsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0ZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4NWYsIDB4MDIsIDB4NGEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsCisJMHg5ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkOCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGExLCAweGQwLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAorCTB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZDQsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhkNiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwKKwkweGRjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGRlLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ZGEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsCisJMHg4ZSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhlNiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LAorCTB4ZmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKKwkweGU0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGU4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZWEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsCisJMHhmNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhmNiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY4LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM3LAorCTB4YTksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDhkLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk4LCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MDAsIDB4NDYsIDB4YTMsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg5YiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhMSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDAyLCAweDIzLCAweDUwLCAweGE1LCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4MDAsIDB4NDIsCisJMHhhNSwgMHg2MywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAorCTB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5NywgMHgwMiwgMHgyMiwgMHg0NCwKKwkweGE1LCAweDUzLCAweDAwLCAweDAwLCAweDk0LCAweDAyLCAweDAwLCAweDQxLCAweGExLCAweGMxLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4MDAsIDB4ZGUsCisJMHhhMSwgMHgzMywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4ZDIsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDllLCAweDAyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4MDAsIDB4NTQsCisJMHhhNSwgMHgzMywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YWMsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDIsIDB4MDAsIDB4NDYsCisJMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LAorCTB4NDMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTksIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwKKwkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGEzLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGMxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YmQsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhjMywgMHgwMiwgMHgwMCwgMHgwNSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGNiLCAweDAyLCAweDAwLCAweDA1LAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkMCwgMHgwMiwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwgMHhkMiwgMHgwMiwgMHgwMCwgMHg0NCwKKwkweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweGE0LCAweGU3LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ODEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzEsCisJMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgyMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDAyLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLCAweGRhLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGE0LCAweGU3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDkxLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzksIDB4ZjAsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MjIsIDB4NDEsCisJMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHg0MSwgMHhjMSwgMHhjMywgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweGRlLCAweDg1LCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweGMyLAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4OTUsIDB4ODksIDB4MDEsIDB4MDAsCisJMHhjOCwgMHgwMiwgMHgwMCwgMHhjYSwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGUyLCAweDAyLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsCisJMHhhOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGUxLCAweDAyLCAweDAwLCAweGQ0LCAweGUxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhjYywKKwkweDg1LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmEsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZjksIDB4MDIsIDB4YTIsIDB4ZjIsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjYywgMHg4NSwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MSwKKwkweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDBhLCAweDAzLCAweDIyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTIsIDB4MDMsIDB4MjIsIDB4NDgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDMsIDB4MjIsIDB4NGMsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMywgMHgyMiwgMHg1MCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE3LCAweDAzLCAweDIyLCAweDU0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDE5LCAweDAzLCAweDIyLCAweDU4LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MDMsIDB4MjIsIDB4NWMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywKKwkweDA5LCAweGIwLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweGNhLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhmMywgMHg4MywgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMywgMHhhMiwgMHg0MiwgMHgwNSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDIyLCAweGNhLAorCTB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4NDUsIDB4ZjMsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgyMCwgMHg0MywgMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHg4MCwgMHhjYSwKKwkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDIyLCAweDAxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4YmMsCisJMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHhiMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGRkLCAweDlmLCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGNhLAorCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4YTIsIDB4NDAsIDB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYiwgMHgwMywgMHhhOCwgMHhiMSwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDFhLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGNiLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDJkLCAweDAzLCAweDkxLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgyYiwgMHgwMywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDAzLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgzZCwgMHgwMywgMHg5MSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4M2IsIDB4MDMsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2QsIDB4MDMsIDB4NTUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDE0LCAweDJmLCAweDQwLCAweDk5LCAweGIzLCAweDAxLCAweDAwLAorCTB4NTcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweDk4LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYyLCAweDg4LCAweGU0LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDUzLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDMsIDB4MWYsIDB4OTEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDgsIDB4ODQsIDB4ODQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDhmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NWEsIDB4MDMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NDcsCisJMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMywgMHgwMCwgMHg1YywgMHg4ZiwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweGUwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDE1LCAweDJkLCAweDQwLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmQsIDB4ZjAsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LCAweDgyLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg4MiwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg2NSwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MywgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHg0MywgMHg4NiwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE2LCAweDQxLCAweDg1LCAweDUwLCAweDAxLCAweDAwLCAweDcwLCAweDAzLCAweDAwLCAweDQxLAorCTB4ODMsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZiwgMHg0NiwKKwkweDg0LCAweDk0LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQyLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LCAweDgwLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgwMywgMHhhMCwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDgzLCAweDAzLCAweDAwLCAweDQxLCAweDgyLCAweGU4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAorCTB4OGUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MzksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MTUsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MzksIDB4MDAsIDB4NDAsIDB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDk1LCAweDAzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDk3LCAweDAzLCAweDIyLCAweDVhLAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg5OCwgMHgwMywgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDkwLCAweDAzLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDE1LCAweDJkLCAweDQwLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmQsIDB4ZjAsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDkwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweDQ4LCAweDkwLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAzLCAweDIyLCAweDQwLAorCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDhkLCAweGMwLCAweDAxLCAweDAwLCAweGI1LCAweDAzLCAweDIyLCAweDVmLCAweDhkLCAweDZjLCAweDAwLCAweDAwLAorCTB4YTcsIDB4MDMsIDB4YTIsIDB4NDEsIDB4OTMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHg0NywgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGVkLCAweDlmLCAweDAwLCAweDQ3LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDcsIDB4OGUsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDUwLCAweGIzLCAweDAxLCAweDAwLCAweGJiLCAweDAzLCAweDIwLCAweDE4LCAweDg5LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg1NSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGJlLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGE2LAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg1NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDUwLCAweGQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDRmLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NGUsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4NmUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4MiwgMHgwMywgMHgwMCwgMHg0MiwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM3LCAweDAzLCAweDIyLCAweGE3LAorCTB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGM4LCAweDE0LCAweDJlLCAweGJiLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhhMCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGUxLCAweDlmLCAweDAwLCAweGNhLAorCTB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMywgMHgyMiwgMHg0MiwKKwkweDc1LCAweDZmLCAweDAwLCAweDAwLCAweGQ4LCAweDAzLCAweDIyLCAweDQxLCAweDc1LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4MDMsIDB4MWUsIDB4Y2EsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MDMsIDB4MWYsIDB4Y2EsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDlmLCAweDAwLCAweDQyLCAweDc1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4Y2QsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4NDEsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDc1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGE2LCAweGM2LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHgwMSwgMHgwMCwgMHg0YywKKwkweDkzLCAweDMwLCAweDAxLCAweDAwLCAweGVjLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU0LCAweDk1LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDE0LCAweDJlLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAorCTB4YTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDMsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHhkYSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDg5LCAweGYwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4OCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweDE1LCAweDA0LCAweDAwLCAweDQzLAorCTB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGE1LCAweGMzLCAweDAxLCAweDAwLCAweDBiLCAweDA0LCAweDIyLCAweDQ0LCAweDg5LCAweDUwLCAweDAwLCAweDAwLAorCTB4MGIsIDB4MDQsIDB4MjIsIDB4NDQsIDB4OGIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4MDMsIDB4YTIsIDB4NTAsCisJMHhhNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhhNSwgMHhlMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweGUxLCAweDlmLCAweDAwLCAweGJiLAorCTB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MTQsIDB4MmUsIDB4ZDIsIDB4OTUsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDQsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDQsIDB4YTIsIDB4ZjIsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg5NCwgMHhiNCwgMHg4YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ5LAorCTB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NCwKKwkweGI0LCAweGIzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweDI3LCAweGIxLCAweDAxLCAweDAwLCAweDA2LCAweGMwLCAweDAwLCAweDQwLCAweDJkLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHhjNCwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODIsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwNCwgMHg4MCwgMHg5NCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHgyZCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDMxLCAweDA0LCAweDAwLCAweDEyLAorCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg0OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0YiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDRkLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NGYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NTAsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDU0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDU2LCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NTcsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg1OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg1YiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDVkLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4YzAsIDB4NWUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjAsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDY0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDY1LCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjcsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg2OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg2YiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDZjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4ODAsIDB4NmUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NzAsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDczLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDc1LCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NzcsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg3OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg3YSwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDdjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4NDAsIDB4N2UsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU5LCAweDA0LCAweDAwLCAweDEyLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4NCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDg2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDg4LCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4ZSwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDkwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTQsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDlhLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OWMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGFhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGFjLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YWUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiMCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiMiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGI0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGJjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGJlLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MiwgMHgwNCwgMHg4NSwgMHg0MSwKKwkweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDg3LCAweDA0LCAweDg1LCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4NjAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweGYwLCAweDRiLCAweDgyLCAweDg5LCAweDAxLCAweDAwLCAweDkzLCAweDA0LCAweDYwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHhmMCwgMHhhNiwgMHg4MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5NiwgMHgwNCwgMHg2MCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLCAweDg0LCAweDg5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg4MCwgMHg0YiwgMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweGE2LAorCTB4OTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4OTQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHhjYSwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4YTYsIDB4MDQsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZCwgMHgwNCwgMHgyMiwgMHgyMCwgMHg4NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFmLCAweDgwLCAweDg2LCAweGIzLCAweDAxLCAweDAwLCAweGIwLCAweDA0LCAweDIyLCAweDRmLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGIxLCAweDA0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YjgsIDB4MDQsIDB4MjIsIDB4NGIsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGI2LCAweDA0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjMSwgMHgwNCwgMHhhOCwgMHhiMSwgMHg1MiwgMHgzMywgMHgwMCwgMHgwMCwgMHhjNiwgMHgwNCwgMHgyMiwgMHg0YiwKKwkweDUzLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4YzQsIDB4MDQsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4YzEsIDB4MDQsIDB4YTIsIDB4NDEsCisJMHg5OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHg3NywgMHhmZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5OCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDk4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwNCwgMHgwMCwgMHg0YywKKwkweDg4LCAweDk0LCAweDAwLCAweDAwLCAweGQ2LCAweDA0LCAweDQ3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4MDQsIDB4MjIsIDB4MjAsIDB4ODcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxZiwgMHg4MCwgMHg4NiwgMHhiMywgMHgwMSwgMHgwMCwgMHhlMCwgMHgwNCwgMHgyMiwgMHg0ZiwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlMSwgMHgwNCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGU4LCAweDA0LCAweDIyLCAweDRhLCAweDg5LCAweDdjLCAweDAwLCAweDAwLCAweGU2LCAweDA0LCAweDIyLCAweDRmLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNiwgMHgwNCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDIwLCAweDg3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDk5LCAweGIwLCAweDAxLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjEsIDB4MDQsIDB4YTgsIDB4YjEsIDB4NTIsIDB4MzMsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDQsIDB4MjIsIDB4NGEsCisJMHg1MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDA0LCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweGYxLCAweDA0LCAweGEyLCAweDQxLAorCTB4OTksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NGYsIDB4NzcsIDB4ZmQsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2IsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNSwgMHhhOCwgMHhiMSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwNSwgMHgxZCwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDUsIDB4YTIsIDB4NDAsCisJMHg4NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg5ZiwgMHg5YywgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQwLCAweDg4LCAweDg4LCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDUwLAorCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODgsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwNSwgMHg1MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDgsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4MDUsCisJMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDFiLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQxLAorCTB4ZTEsIDB4YzEsIDB4MWEsIDB4MDAsIDB4NzgsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MWIsIDB4MDAsCisJMHgxOSwgMHgwNSwgMHgyMiwgMHg1NCwgMHg4MSwgMHg3YywgMHgxYSwgMHgwMCwgMHgxNCwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDFhLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGIzLCAweDY3LCAweGRmLCAweDFiLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MWIsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgxYiwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDA1LCAweDBmLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLAorCTB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NTAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwgMHgxZiwgMHgwNSwgMHg5OSwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg5LCAweGQwLCAweDAxLCAweDAwLAorCTB4MjEsIDB4MDUsIDB4OWIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNSwgMHgxZiwgMHg0NCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDQwLCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDgsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwNSwgMHgwMCwgMHg1OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDg2LCAweGY0LCAweDAxLCAweDAwLAorCTB4NmYsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MjYsIDB4MDUsCisJMHg0NywgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDQ0LCAweGYwLCAweDQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHhlMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0YywgMHgwMSwgMHgwMCwgMHgwNywKKwkweDkxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDk3LCAweGVjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDUsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwNSwgMHhhMiwgMHg0MCwKKwkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAorCTB4NDUsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLAorCTB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQ4LAorCTB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDUwLCAweDA1LCAweGEyLCAweDQxLCAweDhmLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ZGEsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkYSwKKwkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4N2EsIDB4MDUsIDB4MjIsIDB4NDUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDE1LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDUsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3ZCwgMHgwNSwgMHgyMiwgMHgyMCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDFmLCAweDAwLAorCTB4N2QsIDB4MDUsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MWUsIDB4MDAsIDB4N2EsIDB4MDUsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2NywgMHg5MywgMHgxZiwgMHgwMCwKKwkweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDFlLCAweDAwLCAweDU0LCAweDE2LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MWYsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKKwkweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4NDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NGEsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDk1LCAweGMwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDUsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweGUxLCAweDlmLCAweDAwLCAweGJiLAorCTB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI4LCAweDA1LCAweDIyLCAweDQ1LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGUwLCAweDE1LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhNywgMHgwNSwgMHhhOCwgMHhiYiwgMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweGFhLCAweDA1LCAweGEyLCAweDQxLAorCTB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTksIDB4MDUsIDB4YTIsIDB4ZjIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwNSwgMHhhMiwgMHg0MCwKKwkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAorCTB4YjEsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI4LCAweDA1LCAweGEyLCAweGZhLAorCTB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHgwNSwgMHhhMiwgMHhmYSwgMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwKKwkweGIzLCAweDQzLCAweDAxLCAweDAwLCAweGJiLCAweDA1LCAweDIyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLAorCTB4YjgsIDB4MDUsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHg2NywgMHg5MywgMHgyMSwgMHgwMCwgMHhkZiwgMHg5ZiwgMHgwMCwgMHg1OCwgMHg2NywgMHg5MywgMHgyMCwgMHgwMCwKKwkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDIxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLAorCTB4NDksIDB4MzEsIDB4MjEsIDB4MDAsIDB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MjEsIDB4MDAsCisJMHg1YywgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwKKwkweDhlLCAweGIwLCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4YjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YzksIDB4MDUsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhmYywgMHgxNSwgMHgyMCwgMHgyMCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDI0LCAweDAwLCAweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDI1LCAweDAwLAorCTB4Y2UsIDB4MDUsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MjQsIDB4MDAsIDB4Y2IsIDB4MDUsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2NywgMHg5MywgMHgyNSwgMHgwMCwKKwkweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDI0LCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MjUsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MjUsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMywgMHgwNSwgMHgyMiwgMHg1MCwKKwkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGY4LCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYSwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDRhLCAweGI0LCAweDhiLCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhiNCwgMHhmNywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlOSwgMHgwNSwgMHgyMiwgMHg1MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweGVhLCAweDA1LCAweDAwLCAweDUwLCAweGI1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDMxLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDMzLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MzUsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgzNywgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzOCwgMHgzOSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQxLCAweDQyLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NDMsIDB4NDQsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDUsIDB4NDYsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NywgMHg0OCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDRhLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmYywgMHgwNSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNiwgMHgyZSwgMHgwNiwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDUsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDA2LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNiwgMHgyZCwgMHgwNiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDYsIDB4MjIsIDB4NzAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHg2NywgMHgwMCwgMHhhNiwgMHhlMCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgyMywgMHgwMCwgMHg3MCwKKwkweGUxLCAweDlhLCAweDAxLCAweDAwLCAweGNkLCAweGVmLCAweDAwLCAweGE2LCAweGUyLCAweGIyLCAweDAxLCAweDAwLAorCTB4ODksIDB4YWIsIDB4MDAsIDB4NzEsIDB4ZTMsIDB4OWEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTgsIDB4MDAsIDB4YTYsCisJMHhlNCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhkYywgMHgwMCwgMHg3MiwgMHhlNSwgMHg5YSwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDEwLCAweDAwLCAweGE2LCAweGU2LCAweGIyLCAweDAxLCAweDAwLCAweDc2LCAweDU0LCAweDAwLCAweDczLAorCTB4ZTcsIDB4OWEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4YzMsIDB4MDAsIDB4YTYsIDB4ZTgsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHhlMSwgMHgwMCwgMHg3NCwgMHhlOSwgMHg5YSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0YSwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDE2LCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGZjLCAweDE2LCAweDJhLCAweDQ3LAorCTB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTgsIDB4ZTUsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGEzLCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDNkLCAweDQ2LCAweDhkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCisJMHg0MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDA2LCAweGEyLCAweDQxLCAweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCTB4ZWIsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhlZiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKKwkweGYxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGYzLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDRiLCAweDA2LCAweGEwLCAweDUwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDBkLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsCisJMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsCisJMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweGE0LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg0MSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDA1LCAweDAwLCAweDAwLCAweDc1LCAweDg5LCAweGU0LCAweDAxLCAweDAwLCAweDFiLCAweDAwLCAweDAwLCAweDc1LAorCTB4ODUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHg1NSwgMHgwNiwgMHhhMywgMHg1MywgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4YiwgMHhhNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDA2LCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NWEsIDB4MDYsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkweDg5LCAweGE0LCAweDAxLCAweDAwLCAweDY0LCAweDA2LCAweDAwLCAweDc4LCAweDg5LCAweGE0LCAweDAwLCAweDAwLAorCTB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NTcsIDB4MDYsIDB4YWEsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAorCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkweDhiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDZiLCAweDA2LCAweGEzLCAweDUzLAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODIsIDB4NWEsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg3OSwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4NzAsIDB4MDYsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDksIDB4NmUsIDB4MDAsIDB4YTYsCisJMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHhlYiwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDNiLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDYsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4ZiwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYywgMHhiYywgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NjIsIDB4Y2EsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4YzEsIDB4MDAsIDB4NDIsCisJMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGYzLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlZiwgMHhmNiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGVlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweGVkLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZWEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDA2LCAweDJhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LAorCTB4ZTEsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ZTMsIDB4YzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHhlNSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwKKwkweGU3LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweGU5LCAweGMyLCAweDAxLCAweDAwLAorCTB4MmIsIDB4MDYsIDB4ODEsIDB4NDEsIDB4OGQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDE1LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjksIDB4MDYsIDB4MjIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwNiwgMHhhMiwgMHg0MCwKKwkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDVlLCAweDE2LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4N2MsIDB4MTYsIDB4MjAsIDB4ZjYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgzMSwgMHhiMywgMHgwMSwgMHgwMCwgMHg5ZCwgMHgwNiwgMHgyMiwgMHg0ZiwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDlmLCAweDA2LCAweDIyLCAweDQwLAorCTB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MDAsIDB4NTQsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHhhMSwgMHgwNiwgMHgyMiwgMHg0MiwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGEzLCAweDA2LCAweDIyLCAweDQxLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDYsIDB4MjIsIDB4NTEsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjIsIDB4MDYsIDB4YTIsIDB4NDAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0OCwKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NGIsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YjYsIDB4MDYsIDB4MjIsIDB4NDAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDYsIDB4MDAsIDB4NTQsCisJMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAwLCAweDAwLCAweGZlLCAweDdmLCAweGQ5LCAweDAxLCAweDAwLCAweGJhLCAweDA2LCAweGE2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGU3LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM0LCAweDA2LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlOSwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MGEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDBhLCAweDA3LCAweDIyLCAweDAxLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGQ5LCAweDA2LCAweGEzLCAweDA3LCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4MDYsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDcsCisJMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlYywgMHgwNiwgMHgyMiwgMHg0MCwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGU2LCAweDA2LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDA3LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDA2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU4LCAweDA2LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDYsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4M2EsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHgzYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweGZhLCAweDA2LCAweDIzLCAweDFhLAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MDMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgyMywgMHgwNywgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxZCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGYwLCAweDAwLCAweDAwLCAweGYyLCAweDMwLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MzEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweDAyLCAweDA3LCAweDIyLCAweDFhLAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDE0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MTQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDIzLCAweDA3LCAweDAwLCAweDFhLAorCTB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDBmLCAweDA3LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDcsIDB4NjAsIDB4MDcsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTIsCisJMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZCwgMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDE2LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDcsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNywgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDA3LCAweDIyLCAweDBkLCAweDI0LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDcsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyMywgMHgwNywgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MWYsIDB4MDcsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDA3LCAweGEyLCAweDBkLCAweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDJlLCAweDA3LCAweDIyLCAweDQ2LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDMzLCAweDA3LCAweDFmLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZDMsIDB4MDYsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsCisJMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhkMywgMHgwNiwgMHgyMywgMHgwNywgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzYywgMHgwNywgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweGQzLCAweDA2LCAweDAwLCAweDAzLCAweDBjLCAweGIwLCAweDAwLCAweDAwLCAweGQzLCAweDA2LCAweDAwLCAweDBkLAorCTB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDcsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyZCwgMHgxZCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDA5LCAweDAwLCAweDAwLCAweGYzLCAweDM4LCAweDg4LCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDIwLCAweDUwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4NDAsIDB4M2YsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MWQsCisJMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDUyLCAweDA3LCAweGEwLCAweGZjLCAweDkwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDcsIDB4YTIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDE4LCAweDkwLCAweGIwLCAweDAxLCAweDAwLCAweDVjLCAweDA3LCAweGEwLCAweGZjLAorCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg1YSwgMHgwNywgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MCwgMHhiMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgyZCwgMHgwMCwKKwkweDIyLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGM5LCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorCTB4NDgsIDB4YzEsIDB4MmQsIDB4MDAsIDB4NjQsIDB4MDcsIDB4NDMsIDB4MzAsIDB4M2QsIDB4MDcsIDB4MmMsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwgMHg4NSwgMHhiMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MSwKKwkweDNkLCAweGMzLCAweDJkLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQyLCAweGVjLCAweGIxLCAweDJkLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmUsIDB4MWQsCisJMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgxOCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDZlLCAweDA3LCAweGEwLCAweDQxLAorCTB4ODAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZSwgMHgzMCwKKwkweDgxLCAweDg0LCAweDAxLCAweDAwLCAweDcyLCAweDA3LCAweDkwLCAweDQwLCAweDkyLCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCisJMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDE5LCAweGU4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLAorCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDcsIDB4YTAsIDB4MTksIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyZiwgMHgxZSwKKwkweDMyLCAweGMwLCAweDAxLCAweDAwLCAweDdkLCAweDA3LCAweGEyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLAorCTB4N2MsIDB4MDcsIDB4YTAsIDB4MWMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHgzOCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDFlLAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MWEsIDB4OTgsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwNywgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ODksIDB4MDcsIDB4MjIsIDB4ZjIsCisJMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg2LCAweDA3LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg5MSwgMHgwNywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5YiwgMHgwNywgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4OWIsIDB4MDcsIDB4MjIsIDB4ZjIsCisJMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk4LCAweDA3LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYiwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YTEsIDB4MDcsIDB4OTAsIDB4ZjIsCisJMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE0LAorCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4YWMsIDB4MDcsIDB4MjIsIDB4ZjIsIDB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGE5LCAweDA3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHgwNywgMHgyMiwgMHg0MCwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNCwgMHgwNywgMHhhMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4YjMsIDB4MDcsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHhlNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDNmLCAweGMzLCAweDAxLCAweDAwLCAweGU2LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDcsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHgzZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNywgMHgyMiwgMHg0MCwKKwkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGJhLCAweDA3LCAweDIwLCAweDFlLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OWYsIDB4MDAsIDB4MWUsCisJMHgyNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZiwgMHgwNywgMHgyMiwgMHgwOCwgMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJjLCAweDA3LCAweGEyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDA0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGU4LCAweDlmLCAweDAwLCAweDFmLAorCTB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhlMiwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDA0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4ZTYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4MDcsIDB4YTIsIDB4NDEsCisJMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHhjZiwgMHgwNywgMHgwMCwgMHgxZSwgMHgzZSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlMiwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY3LCAweDA3LCAweDAwLCAweGJjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLAorCX0sCisJeworCTB4MzEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDgwLCAweDgxLCAweDgwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4YTIsIDB4NDAsIDB4OTEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg5MCwgMHhiMywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyZSwgMHhhMiwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGY0LCAweDg5LCAweDAxLCAweDAwLAorCTB4OTAsIDB4OTUsIDB4MmEsIDB4YzgsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDgwLCAweDExLCAweDgxLAorCTB4OTgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgxYSwgMHg4MCwgMHgxMSwgMHg4MiwgMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGU0LCAweDg3LCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLAorCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODAsIDB4YTIsIDB4NDIsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgwLCAweDExLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDIyLCAweDgwLCAweDUxLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4MTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MCwgMHg1MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MCwgMHgwMCwgMHg0OCwKKwkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDI3LCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4ODAsIDB4YTIsIDB4NTMsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NTMsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4MCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDI5LCAweDgwLCAweGEyLCAweDUyLCAweDA3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLCAweDUyLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg4MiwgMHgwNSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MiwgMHgwNSwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4NGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhkZSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAorCTB4OWIsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NSwgMHgyMCwgMHg0NCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4ZWUsCisJMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDgwLCAweGEyLCAweDQzLCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4YTYsIDB4MzYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgxMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDA5LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg4OCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI5LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YjEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGRkLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg1LCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4M2MsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyZiwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweGEyLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDllLCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg4MiwgMHgwMCwgMHg0MSwgMHhlMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDE5LCAweDA1LCAweDIyLCAweDU0LCAweDgxLCAweDdjLCAweDAwLCAweDAwLAorCTB4NmMsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YjQsCisJMHg2OSwgMHhkZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDE4LCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDU1LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDdkLCAweDgwLCAweDIyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2EsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg1OCwKKwkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDU0LCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDQzLCAweDgxLCAweDAwLCAweDU4LAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4ZmEsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzEsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OTYsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5NiwgMHg4MCwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDkzLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODEsIDB4MDAsIDB4NTgsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGQwLCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MywgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQ3LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDcyLCAweDAxLCAweDAwLCAweDQxLAorCTB4ODEsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTEsIDB4NDksIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHg1MiwgMHg0YSwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NSwgMHg0OSwKKwkweGZkLCAweDgzLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDU2LCAweDRhLCAweGZkLCAweDgzLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4OTEsIDB4ODEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDU1LCAweDAxLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4YjQsIDB4ODAsIDB4NDMsIDB4MzAsIDB4M2QsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWUsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MSwgMHgzZCwgMHhjMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDQyLCAweGVjLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAorCTB4OTEsIDB4NmYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4ZDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhjMSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwKKwkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDQwLCAweDhiLCAweGIzLCAweDAwLCAweDAwLAorCTB4YjEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzksIDB4ODAsIDB4YTIsIDB4NDIsCisJMHg5NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhhMSwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDA0LAorCTB4ODAsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTUsIDB4M2YsIDB4NDIsIDB4OTcsIDB4ZTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMywKKwkweDAyLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4OTksIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsCisJMHhmMywgMHg4MywgMHgwMSwgMHgwMCwgMHhkMywgMHg4MCwgMHhhMiwgMHg0MiwgMHg5NywgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNiLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLAorCTB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGRhLCAweDgwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY5LCAweDAyLCAweDAwLCAweDIwLAorCTB4NDIsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MDUsIDB4NmMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwKKwkweDhiLCAweGIzLCAweDAxLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZTAsIDB4ODAsIDB4YTgsIDB4YjEsIDB4OGMsIDB4MzMsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhlMiwgMHg4MCwgMHhhOCwgMHhiMSwgMHg5NCwgMHgzMywgMHgwMCwgMHgwMCwKKwkweGU4LCAweDgwLCAweDE0LCAweGM2LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGM2LAorCTB4ODMsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MjIsIDB4NGYsIDB4ODMsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhjNiwKKwkweDgxLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM2LCAweDk3LCAweGEzLCAweDAxLCAweDAwLAorCTB4YzQsIDB4ODAsIDB4MWYsIDB4NWMsIDB4OTcsIDB4NTMsIDB4MDAsIDB4MDAsIDB4NmQsIDB4ODIsIDB4MWUsIDB4YzYsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHgyMiwgMHg0OCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGYyLCAweDgwLCAweDIyLCAweDU4LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweDIyLCAweDQ4LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODQsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhmMiwgMHg4MCwgMHg5ZiwgMHg0MiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweGM2LCAweDhmLCAweDA2LCAweDAwLCAweDAwLAorCTB4YzQsIDB4ODAsIDB4MWUsIDB4YzYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4NDMsCisJMHg4MSwgMHhmMCwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4MCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwKKwkweDQ0LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDdlLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzksIDB4ODIsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg3NSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHg4MSwgMHgwMCwgMHg0ZCwKKwkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDgxLCAweDAwLCAweDRlLCAweDYxLCAweGIxLCAweDAwLCAweDAwLAorCTB4NGMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ODEsIDB4MDAsIDB4NGMsCisJMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGY4LCAweDgxLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDg2LCAweDgxLCAweDAwLCAweDQwLAorCTB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0YywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLCAweDliLCAweGIzLCAweDAwLCAweDAwLAorCTB4OTAsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OTQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5YiwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDljLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDlkLCAweDgxLCAweDAwLCAweDQwLAorCTB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OWUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg5ZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg4MSwgMHgwMCwgMHg0MSwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDJkLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YWUsIDB4ODIsIDB4MDAsIDB4YmIsIDB4YWIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4ODIsIDB4MDAsIDB4Y2EsCisJMHhjZiwgMHhiMywgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMywgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhlMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwKKwkweDc3LCAweGIzLCAweDAwLCAweDAwLCAweDU2LCAweDgxLCAweDAwLCAweDRkLCAweDgzLCAweGIwLCAweDAwLCAweDAwLAorCTB4NWUsIDB4ODEsIDB4MDAsIDB4NGUsIDB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODEsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHg4MSwgMHgwMCwgMHg0YywgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDgxLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJlLCAweDgxLCAweDAwLCAweGJiLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHg0ZCwgMHhiMywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLAorCTB4MjYsIDB4ODEsIDB4MjIsIDB4NDIsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ODEsIDB4MjIsIDB4NDEsCisJMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyYSwgMHg4MSwgMHgxZSwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDJjLCAweDgxLCAweDFmLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4YzksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDIsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MSwKKwkweDhmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsCisJMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweGE2LCAweGM2LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLAorCTB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgyZiwgMHg5YywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDM5LCAweDMzLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDJmLCAweDliLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OWEsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg4MSwgMHgwMCwgMHg0MCwgMHgzNSwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJmLCAweDk5LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLAorCTB4MzMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YWUsIDB4NDcsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHhhMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsCisJMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweGFlLCAweDYzLCAweGRkLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2UsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLAorCTB4NDQsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODEsIDB4MDAsIDB4NTgsCisJMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMCwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRiLCAweDgxLCAweGEyLCAweDQwLAorCTB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweGUxLCAweGQxLCAweDAxLCAweDAwLCAweDRjLCAweDgxLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTIsIDB4ODEsIDB4MjgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHgyMiwgMHg1YywgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDgwLCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1MiwgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgxNywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU3LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTcsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg2MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg4MCwgMHhhMiwgMHg0MSwgMHg3NiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDU5LCAweDgxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg4MywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1YiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDk1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4NjEsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MmYsIDB4NDAsCisJMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg2NSwgMHg4MSwgMHgyMiwgMHg0MCwgMHg5NSwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDgwLCAweGEyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweDIyLCAweDQwLAorCTB4OTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4NjAsIDB4NDAsIDB4OTUsIDB4ODMsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNCwgMHg4MCwgMHgyMiwgMHg0MCwKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweDQwLCAweDg1LCAweDdjLCAweDAwLCAweDAwLAorCTB4YzQsIDB4ODAsIDB4YTIsIDB4NGUsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjksIDB4ODEsIDB4MzYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmMsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NzQsIDB4ODEsIDB4MjIsIDB4NDEsIDB4NDMsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4Y2EsCisJMHg5NSwgMHhjYiwgMHgwMSwgMHgwMCwgMHg2OCwgMHg4MSwgMHgwMCwgMHg0MSwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDc3LCAweDgxLCAweGEyLCAweDQyLAorCTB4NjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg3NywgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDY1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkzLCAweDgzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4Y2EsIDB4NjksIDB4OTcsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3YywgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweDIwLCAweDQzLAorCTB4OTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4ODAsIDB4Y2EsIDB4NjcsIDB4MzMsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MywgMHgyMiwgMHg0MCwgMHg2NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhjNCwgMHg4MCwgMHhhMiwgMHg0OCwKKwkweGRiLCAweDdkLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDZmLCAweGRiLCAweDkxLCAweDAwLCAweDAwLAorCTB4ODUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzUsIDB4ODAsIDB4MjIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDk1LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OGMsIDB4ODEsIDB4YTIsIDB4NDQsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKKwkweDk1LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDk1LCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YzMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGYsIDB4ODEsIDB4MjIsIDB4NWIsCisJMHg5NSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweGZkLCAweDAwLCAweGNhLAorCTB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4YzUsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwKKwkweGM1LCAweGIxLCAweDAwLCAweDAwLCAweGRmLCAweDZmLCAweDAwLCAweGNhLCAweDk1LCAweDliLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhjNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMiwgMHg1ZiwgMHg5NSwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDBkLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4YzcsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhjOSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwKKwkweGNiLCAweGIxLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLCAweGNkLCAweGIxLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NDIsCisJMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDgzLCAweDAwLCAweGNhLCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhNCwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MSwKKwkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweGE2LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4ODEsIDB4OWYsIDB4ODUsCisJMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHg4MywgMHg4NCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDgxLCAweDIyLCAweDMwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGE3LCAweDgxLCAweGEyLCAweDRmLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQxLCAweDg0LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwgMHg0MSwgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweDk0LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4YzQsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhiZCwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MWMsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YmEsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGNmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQxLCAweDAxLCAweDAwLCAweGE2LAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MGMsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjMiwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIxLCAweGIzLCAweDAxLCAweDAwLCAweGNmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NDEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MGMsIDB4MDAsIDB4NDMsCisJMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDE4LCAweDgwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHg0MSwgMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHg0MSwKKwkweDgyLCAweDhjLCAweDAxLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDQxLCAweDgyLCAweDk4LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhjZCwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgxMywgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkOCwgMHg4MSwgMHgyMiwgMHg0MywKKwkweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGYzLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTksIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHhkYSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHg0MSwKKwkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweGYzLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDgzLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LAorCTB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YzIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDgzLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGMyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHhlYywgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWYsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MDAsIDB4NDEsCisJMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDQxLCAweDJlLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4MSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDA4LCAweGIxLCAweDAwLCAweDAwLAorCTB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjksIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDgyLCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDE3LCAweDgyLCAweDIyLCAweDQ0LAorCTB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZiwgMHg4MiwgMHgyMiwgMHg0YSwKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDMsIDB4ODIsIDB4MjIsIDB4NGQsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MiwgMHgyMiwgMHg0ZiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDgyLCAweDIyLCAweDRlLAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZiwgMHg4MiwgMHgyMiwgMHg0MiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDFjLCAweDgwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHg4MiwgMHgyMiwgMHg0NSwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDgyLCAweDIyLCAweDQ0LCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4ODIsIDB4MjIsIDB4NDMsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweDIyLCAweDQyLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODIsIDB4MjIsIDB4NGIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweGEyLCAweGEwLCAweDhiLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODAsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHgzMywgMHgwMSwgMHgwMCwgMHg0MSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDI5LCAweDgyLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg4MiwgMHg5ZiwgMHg4NSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDMwLCAweDgyLCAweDE0LCAweGY3LCAweDgxLCAweDMwLCAweDAwLCAweDAwLAorCTB4MzAsIDB4ODIsIDB4YTIsIDB4NDksIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgzMywgMHg4MiwgMHgxNSwgMHhmOCwgMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDgyLCAweGEyLCAweDRhLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MzUsIDB4ODIsIDB4YTIsIDB4YzgsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGVmLCAweGIzLCAweDAxLCAweDAwLAorCTB4MzcsIDB4ODIsIDB4NDIsIDB4NDAsIDB4ZjEsIDB4MzMsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhiYiwgMHg2YiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDAwLCAweGJiLCAweGIxLCAweGIzLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDQzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg4MSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4MiwgMHhhMiwgMHg1NCwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTEsIDB4ODIsIDB4YTIsIDB4MDYsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDJlLCAweDA2LAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHg1NywgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGIxLCAweDAxLCAweDAwLAorCTB4NWEsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE2LCAweDJkLCAweDA2LCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHg2MCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweGY5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2YywgMHg4MiwgMHgyMiwgMHg3MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4YzQsIDB4ODAsIDB4YTIsIDB4NDIsIDB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MiwgMHg5OSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDc4LCAweDgyLCAweDIyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDIyLCAweDQ4LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2EsIDB4ODIsIDB4MjIsIDB4NGMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4NSwgMHg4MiwgMHgyMiwgMHg1MCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg4MiwgMHgyMiwgMHg1NCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDg4LCAweDgyLCAweDIyLCAweDU4LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4OGQsIDB4ODIsIDB4MjIsIDB4NWMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDgzLCAweDAwLCAweGNhLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjMsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHg3ZSwgMHg4MiwgMHhhMiwgMHg0MiwgMHgwNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDIyLCAweGNhLCAweDA3LCAweDE0LCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDYsIDB4ZjMsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MjAsIDB4NDMsCisJMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHg4MCwgMHhjYSwgMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDIyLCAweDAxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweDQ4LAorCTB4ZGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCisJMHg1NywgMHgwMSwgMHgwMCwgMHhiYywgMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywKKwkweGIxLCAweGIzLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4YTIsIDB4NDAsCisJMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDhhLCAweDgyLCAweGE4LCAweGIxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDg5LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweGNiLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4OTAsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDliLCAweDgyLCAweDkxLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhhLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg4MiwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5YiwgMHg4MiwgMHg1NiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4MiwgMHhhMiwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWIsIDB4ODIsIDB4OTEsIDB4ODEsCisJMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGFlLCAweDlmLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweGE5LCAweDgyLCAweGE2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ODIsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsCisJMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDE0LCAweDJmLCAweDQwLCAweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDU3LCAweDAxLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OTQsIDB4MmUsIDB4NDMsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4MiwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDUwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YWMsIDB4OTQsIDB4MmUsIDB4NDMsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU5LCAweDQxLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg0MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDQyLAorCTB4ODEsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhiYywgMHg4MiwgMHhhMCwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiYywgMHg4MiwgMHgwMCwgMHg1MCwKKwkweDg1LCAweGMwLCAweDAwLCAweDAwLCAweDAxLCAweDgzLCAweGEyLCAweDQxLCAweDAxLCAweDdkLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4ODIsIDB4MjIsIDB4NTgsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNywgMHg4MiwgMHhhOCwgMHhiMSwgMHg5YywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NWUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwgMHgxZSwgMHhhNCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwZSwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGNmLCAweDgyLCAweDMzLCAweGM0LCAweDgxLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZDIsIDB4ODIsIDB4YTEsIDB4YWQsIDB4OWQsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MTMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0ZSwgMHg1YSwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgwNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MiwgMHgyMiwgMHhhYiwKKwkweDgwLCAweDA0LCAweDAwLCAweDAwLCAweGRiLCAweDgyLCAweGEyLCAweDQwLCAweDAxLCAweDdkLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4ODIsIDB4MjIsIDB4NWYsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ODgsIDB4MDAsIDB4NWYsCisJMHgxZiwgMHhiNCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MiwgMHgyMiwgMHg1ZSwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDdkLCAweDg4LCAweDAwLCAweDVmLCAweDFmLCAweGI0LCAweDAwLCAweDAwLCAweGUzLCAweDgyLCAweDIyLCAweDU0LAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4MiwgMHhhOCwgMHhiMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDFmLCAweGI0LCAweDAxLCAweDAwLCAweGY0LCAweDg0LCAweGEyLCAweDVmLCAweDAxLCAweDdjLCAweDAwLCAweDAwLAorCTB4OTIsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTUsIDB4ODIsIDB4YTIsIDB4NWYsCisJMHg1OSwgMHgyNywgMHgwMCwgMHgwMCwgMHhlNywgMHg4MiwgMHhhMiwgMHg1YywgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweGVlLCAweDgyLCAweGEyLCAweDVlLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweGZhLCAweDgyLCAweDIyLCAweDVjLAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ODIsIDB4MzcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhlOCwgMHg4MiwgMHhhOCwgMHhiMSwKKwkweDM2LCAweDMwLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZWEsIDB4ODIsIDB4YTgsIDB4YjEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4NSwgMHgxNywgMHg1ZiwgMHgxZiwgMHhiNCwgMHgwMCwgMHgwMCwKKwkweGZiLCAweDgyLCAweDM0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZWYsIDB4ODIsIDB4YTgsIDB4YjEsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhmNywgMHg4MiwgMHg1MiwgMHgyMSwgMHgxMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg0MSwKKwkweDJmLCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDFmLCAweGI0LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4M2YsIDB4MDAsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg4MywgMHgwMCwgMHgzNCwgMHgxMywgMHg4NCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDNmLCAweDE0LCAweDA5LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MWYsIDB4YjQsIDB4MDEsIDB4MDAsIDB4YzIsIDB4ODMsIDB4MDAsIDB4NDMsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmYiwgMHg4MiwgMHgzMywgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRlLCAweDVhLCAweDdmLCAweDAwLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgwNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGM2LCAweDgyLCAweDEzLCAweDRlLCAweDVhLCAweDkzLCAweDAwLCAweDAwLCAweGU0LCAweDg3LCAweGEyLCAweDQ4LAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODMsIDB4MDIsIDB4ZTYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNiwgMHg4MywgMHg4MywgMHhlNSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4ZSwgMHg4MiwgMHgwMCwgMHg0MiwKKwkweDk3LCAweGIzLCAweDAwLCAweDAwLCAweDllLCAweDgyLCAweDAwLCAweDQyLCAweDk3LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDksIDB4ODMsIDB4MjIsIDB4NDYsIDB4ZjMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODMsIDB4YTIsIDB4NDEsCisJMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MCwgMHgwMCwgMHg0MiwgMHg5NywgMHgzMywgMHgwMSwgMHgwMCwKKwkweDBjLCAweDgzLCAweDIyLCAweDQ0LCAweGYzLCAweDdmLCAweDAwLCAweDAwLCAweDBjLCAweDgzLCAweGEyLCAweDQxLAorCTB4ZjMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODAsIDB4MDAsIDB4NmYsIDB4OTcsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHhhYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4MywgMHgyMiwgMHg1YSwKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MGUsIDB4ODMsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4Y2YsCisJMHgxMSwgMHhjOSwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MywgMHhhMiwgMHg0MCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDE3LCAweDgzLCAweDIyLCAweDQ0LCAweDkzLCAweDdmLCAweDAwLCAweDAwLCAweDEzLCAweDgzLCAweDQyLCAweGE1LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODMsIDB4YTIsIDB4NDAsIDB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHg4MywgMHgxYSwgMHg0MCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGRmLCAweDgwLCAweGEyLCAweDQwLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4ZGYsIDB4ODcsIDB4MjIsIDB4NDQsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4ODcsIDB4MjIsIDB4NDAsCisJMHg2NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhhMiwgMHg1YiwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQ5LCAweDMzLCAweDdkLCAweDAwLCAweDAwLCAweDIxLCAweDgzLCAweDIyLCAweDQ4LAorCTB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4OTksIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5OCwgMHgyZiwgMHg0MCwKKwkweDMzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUwLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDEsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDVmLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MDAsIDB4NWYsIDB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDgyLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDJjLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMyLCAweDgzLCAweDMzLCAweDQwLCAweDFmLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGUsIDB4NWEsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA2LCAweDZjLCAweDAwLCAweDAwLCAweGM2LCAweDgyLCAweDEzLCAweDRlLAorCTB4NWEsIDB4OTMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4ODMsIDB4YTAsIDB4Y2UsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg0ZCwgMHg4MywgMHhhMCwgMHhjZCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwKKwkweDljLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIxLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4NGQsIDB4ODMsIDB4MjIsIDB4YjUsIDB4ODEsIDB4MTQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTUsIDB4MmYsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4MywgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweGI0LCAweDY1LCAweDk3LCAweDAxLCAweDAwLCAweGQwLCAweDE1LCAweDJlLCAweDQwLAorCTB4NjksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDQsIDB4OTMsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQ4LCAweDgzLCAweGE4LCAweGExLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ODMsIDB4MDAsIDB4ODgsIDB4OWUsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgxNywgMHg4MywgMHhhMiwgMHg0MSwgMHg2NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MywgMHgwMCwgMHg2ZiwKKwkweGRiLCAweDkxLCAweDAwLCAweDAwLCAweDRkLCAweDgzLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTcsIDB4ODMsIDB4MWEsIDB4NDAsIDB4OTMsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAorCTB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4MDAsIDB4MDksIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywgMHgwYywgMHg4OCwgMHgwMSwgMHgwMCwgMHg1YywgMHg4MywgMHhhNiwgMHg0MiwKKwkweDEzLCAweDYwLCAweDAwLCAweDAwLCAweDk1LCAweDk2LCAweDAwLCAweDk1LCAweDAzLCAweDMwLCAweDAxLCAweDAwLAorCTB4NTcsIDB4ODMsIDB4NjEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4MywgMHhhOCwgMHhiMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGEzLCAweDk2LCAweDcxLCAweDEwLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDVkLCAweDgzLCAweDAwLCAweDU4LAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTYsIDB4MDAsIDB4OTUsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJkLCAweGYwLCAweDJlLCAweGIwLCAweDAxLCAweDAwLAorCTB4ODAsIDB4MDQsIDB4MDAsIDB4MTcsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0YSwgMHhjMSwgMHgwMCwgMHgxNywgMHg5NiwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVlLCAweDA3LCAweDAwLCAweDQwLAorCTB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjgsIDB4ODMsIDB4MjMsIDB4NGIsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg2OCwgMHg4MywgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJmLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NmIsIDB4ODMsIDB4ODMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg4MywgMHg4NSwgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDQ3LCAweGMxLCAweDAxLCAweDAwLCAweDcyLCAweDgzLCAweDIyLCAweDU1LAorCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDMsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDczLCAweDgzLCAweDAwLCAweDRiLCAweDQ0LCAweGMxLCAweDAwLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGYwLAorCTB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgyOCwgMHgzYywgMHg0NiwKKwkweDBkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDQ0LCAweDk1LCAweGIwLCAweDAxLCAweDAwLAorCTB4N2YsIDB4ODMsIDB4YTIsIDB4ZjgsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4ODMsIDB4MjIsIDB4NDEsCisJMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg1MCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDdiLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDdjLCAweDgzLCAweGEyLCAweGY4LAorCTB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODMsIDB4YTIsIDB4ZjgsIDB4MTAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YywgMHg4MywgMHhhMiwgMHhmMCwgMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4ZCwgMHg4MywgMHgyMiwgMHg1OCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLAorCTB4ODQsIDB4ODMsIDB4NjUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODMsIDB4YTIsIDB4ZjMsCisJMHg3NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhlNiwgMHg5NSwgMHgwMSwgMHgwMCwKKwkweDhkLCAweDgzLCAweDc1LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2YsIDB4MDAsIDB4NzUsIDB4ZjMsIDB4MGMsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGQsIDB4ODMsIDB4NjcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTUsIDB4ODMsIDB4NzcsIDB4NDEsCisJMHgyZCwgMHhjMywgMHgwMCwgMHgwMCwgMHg5MywgMHg4MywgMHgyMiwgMHg1OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTEsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg5MywgMHg4MywgMHg2NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkMywgMHg4MywgMHg3NywgMHg0MSwKKwkweDJkLCAweGMzLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLAorCTB4MTIsIDB4OTUsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODMsIDB4MjIsIDB4NDEsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg5YiwgMHg4MywgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGE1LCAweDgzLCAweDIyLCAweDVmLAorCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4MDAsIDB4NWYsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHhhMSwgMHg4MywgMHgyMiwgMHg0MCwgMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLAorCTB4OWYsIDB4OTUsIDB4MDAsIDB4NTIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiNSwgMHg4MywgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI1LCAweDgzLCAweDIyLCAweDIwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4ODMsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5NSwgMHgwMCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweGMyLCAweDk3LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDRiLCAweGUxLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiOSwgMHg4MywgMHg4MiwgMHhmMCwgMHgxOCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg0NSwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI4LCAweDIwLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4YmYsIDB4ODMsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDk3LCAweDAwLCAweDRiLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDRiLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTYsIDB4MDAsIDB4MDMsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhhOSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDUwLAorCTB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGNlLCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDAsIDB4ODMsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDQxLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDJlLCAweDQ3LAorCTB4OTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4ODMsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4MywgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4MywgMHgyMywgMHhhMiwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MDAsCisJMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweGE2LCAweDk1LCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMywgMHg4NCwgMHgwMCwgMHg1YywKKwkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGY4LCAweDgzLCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4ODMsIDB4MjIsIDB4NWYsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhlZCwgMHg4MywgMHg2MiwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGVlLCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4NzIsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHhmNiwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweGY1LCAweDgzLCAweGEyLCAweGE2LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDgzLCAweDAwLCAweGYyLAorCTB4M2EsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4ODQsIDB4YTIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMywgMHg4OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDg0LCAweDIyLCAweDRhLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODQsIDB4MjIsIDB4NDgsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweDg4LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQzLAorCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTQsIDB4M2QsIDB4NDIsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4NCwgMHhhMiwgMHg0MiwgMHhlMCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmMSwgMHg4NCwgMHhhMiwgMHg0YiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDMsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA1LCAweDg0LCAweDY5LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLAorCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4NDEsIDB4NDcsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMCwgMHhhMSwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHg4NCwgMHgyMiwgMHhhMSwKKwkweDA5LCAweDZjLCAweDAwLCAweDAwLCAweDI3LCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDgsIDB4ODQsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ODQsIDB4YTMsIDB4OTIsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHgyNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MjcsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxMywgMHg4NCwgMHgyMiwgMHg1YywgMHgxNywgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHg4NCwgMHgwMCwgMHgwMCwKKwkweDJhLCAweGIwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODQsIDB4YTIsIDB4NDMsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg1OCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDg0LCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAxLAorCTB4OGMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NTgsIDB4OTcsIDB4MDAsIDB4NGMsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGNkLCAweDAxLCAweDAwLAorCTB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjEsIDB4ODQsIDB4YTgsIDB4NTQsIDB4MTcsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHgzNCwgMHg4NCwgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDMzLCAweDg0LCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHg3OSwgMHg5NywgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4NCwgMHgyOCwgMHg1NCwgMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc5LCAweDk3LCAweDAwLCAweDQzLAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzYsIDB4ODQsIDB4MjIsIDB4NTAsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgxNywKKwkweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDM5LCAweDg0LCAweGEyLCAweDQxLCAweDk5LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDNhLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg0MSwgMHg4NCwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4ODQsIDB4YTIsIDB4NWYsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MCwgMHg5MywgMHgwMCwgMHgwMSwgMHgzOCwgMHg0MywgMHgwMSwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODQsIDB4YTIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHhlZSwgMHg4NCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDI3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ODQsIDB4MzUsIDB4MDEsCisJMHg4NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDg0LCAweDI4LCAweGIxLCAweDMwLCAweDMwLCAweDAwLCAweDAwLCAweDRjLCAweDg0LCAweDIyLCAweDRkLAorCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhkYiwgMHg4NCwgMHhhNywgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDQzLCAweGMzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDI3LCAweDZjLCAweDAwLCAweDAwLAorCTB4ZWQsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1NCwgMHg4NCwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDVlLCAweDg0LCAweGE3LCAweDQwLAorCTB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDJjLCAweGIwLCAweDAxLCAweDAwLCAweGRlLCAweDA3LCAweDAwLCAweDQzLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4NGMsIDB4ODQsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NjMsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgzZSwgMHg0MywgMHgyNywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg0YywgMHg4NCwgMHhhMywgMHgwYiwgMHg4NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwKKwkweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDMsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzOSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZkLCAweDg0LCAweGEyLCAweDQwLCAweDI3LCAweDZjLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA4LAorCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MTYsIDB4MzAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkZSwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3MCwgMHg4NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHgyNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDAwLCAweDIwLCAweDAxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDAwLCAweDQwLAorCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODQsIDB4MjMsIDB4MDEsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4NCwgMHg4MiwgMHg0MSwKKwkweDIzLCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4N2MsIDB4ODQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDc5LCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OTQsIDB4MDAsIDB4NDMsIDB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4OTEsIDB4ODQsIDB4MjIsIDB4NDUsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDBiLCAweDI1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ODgsIDB4ODQsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDI1LCAweGQwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDRjLAorCTB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzcsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4NCwgMHgwMCwgMHg0NSwKKwkweDFmLCAweDgwLCAweDAwLCAweDAwLCAweDkzLCAweDg0LCAweGEzLCAweDEyLCAweDM2LCAweDZjLCAweDAwLCAweDAwLAorCTB4OTQsIDB4ODQsIDB4NjgsIDB4MWIsIDB4MjgsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsCisJMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg5NywgMHg4NCwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhiZiwgMHg4NCwgMHgyMiwgMHgxNCwKKwkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTQsCisJMHgxMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiNywgMHg4NCwgMHhhMiwgMHgxNCwgMHgzNiwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGE3LCAweDg0LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YTUsIDB4ODQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGEyLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MmIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NTAsIDB4MmIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHhhZCwgMHg4NCwgMHgyMywgMHgwMSwKKwkweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM2LCAweGIwLCAweDAxLCAweDAwLAorCTB4YjgsIDB4ODQsIDB4MjIsIDB4MWIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGI0LCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YjgsIDB4ODQsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4NCwgMHhhMiwgMHg0MCwgMHgyNSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDM5LCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDEzLAorCTB4MzgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MzksIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgyNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDc1LCAweDg0LCAweDAwLCAweGYwLCAweDMwLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDE5LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YzMsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDJiLCAweDMwLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDJlLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4Y2EsIDB4ODQsIDB4MjIsIDB4NTAsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsCisJMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgxNywgMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweGNkLCAweDg0LCAweGEyLCAweDQxLCAweDk5LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4ODQsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNiwgMHgwMCwgMHgyMCwgMHgxZCwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGQyLCAweDg0LCAweGEzLCAweDQwLCAweDI3LCAweDZjLCAweDAwLCAweDAwLAorCTB4ZDQsIDB4ODQsIDB4NjAsIDB4NWYsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MGIsCisJMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMywgMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLAorCTB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4YTIsIDB4NWYsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDkzLCAweDAwLCAweDAxLCAweDM4LCAweDQzLCAweDAxLCAweDAwLAorCTB4MDMsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDMsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0ZCwgMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlMCwgMHg4NCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZTIsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODQsIDB4MjIsIDB4MTMsCisJMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgzZCwgMHg0MywgMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlOCwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGVhLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4ODQsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDk4LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLAorCTB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4NTIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4OCwgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDAxLCAweDgwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDA1LCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4NSwgMHgyMiwgMHg0MSwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODUsIDB4MjIsIDB4NWYsCisJMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDA2LCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NSwgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDE0LCAweDg1LCAweDIyLCAweDIwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ODUsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5NSwgMHgwMCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweGMyLCAweDk3LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDRiLCAweGUxLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxOSwgMHg4NSwgMHgyMiwgMHgzYSwgMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHg4NSwgMHhhMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDBhLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLAorCTB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4ODcsIDB4OTYsIDB4MDAsIDB4OTUsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDAwLCAweDJkLCAweGYwLCAweDJlLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg4NSwgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NywgMHgwMCwgMHg0YiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDRjLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MmQsIDB4ODUsIDB4ODMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgyZiwgMHg4NSwgMHg4NSwgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweGY2LAorCTB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YTEsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHg1NywgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhOSwgMHg5MywgMHgwMCwgMHg0MSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODUsIDB4NjQsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYSwgMHg4NSwgMHhhOCwgMHgxYiwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDc0LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4MDUsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHgwOSwgMHgwMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDZiLCAweDg1LCAweDAxLCAweGZiLAorCTB4MDgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ODUsIDB4ODcsIDB4ZmIsIDB4MjIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLAorCTB4MTIsIDB4OTUsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4ODUsIDB4MjIsIDB4NDEsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg0YiwgMHg4NSwgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDViLCAweDg1LCAweDIyLCAweDVmLAorCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsCisJMHg1MSwgMHg4NSwgMHhhNiwgMHg1ZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYiwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDBhLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4ODUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY5LCAweDg1LCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODUsIDB4MjIsIDB4MjAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2NiwgMHg4NSwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4ODUsIDB4MjEsIDB4MDQsCisJMHg4MCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4NSwgMHgwMCwgMHg0MCwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwKKwkweGExLCAweDg4LCAweDAwLCAweDRiLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDljLCAweDg1LCAweDAwLCAweDQzLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ODUsIDB4MDAsIDB4ZmIsIDB4MjIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhMSwgMHg4OCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg0ZSwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDkxLCAweDg1LCAweDAwLCAweDVhLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4NzYsIDB4ODUsIDB4MDAsIDB4NDcsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NTMsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4OCwgMHgwMCwgMHg1NiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwYSwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDNkLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OGEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4ZjIsCisJMHg4YSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDY5LCAweDg5LCAweGEwLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDg0LCAweDg1LCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODMsIDB4ODUsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg2OSwgMHg4OSwgMHgwMCwgMHg1MywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg1NCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDhkLCAweDg1LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ODcsIDB4ODUsIDB4YTIsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NWQsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDhiLCAweDg1LCAweGEwLCAweDkxLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NWUsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDg1LCAweDIwLCAweDkxLCAweGU1LCAweDZkLCAweDAwLCAweDAwLAorCTB4NjksIDB4ODksIDB4MDAsIDB4NTQsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwYSwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDNkLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4OTksIDB4MDAsIDB4ZjIsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4OSwgMHhhMCwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDI0LCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg4OCwgMHhhMCwgMHg0MiwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDU0LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjMsIDB4NDAsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA5LCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDE2LCAweDg4LCAweDAxLCAweDAwLCAweGFlLCAweDg1LCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxYywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ODUsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHhiYiwgMHg4NSwgMHhhMiwgMHg1NCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhiMywgMHg4NSwgMHgyMiwgMHg1NSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4YWEsIDB4ODUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NTMsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRiLAorCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YmMsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhiYiwgMHg4NSwgMHgyMiwgMHg0MywgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGFhLCAweDg1LCAweGEyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLAorCTB4N2MsIDB4OTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmMsIDB4ODUsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg4NSwgMHhhMCwgMHhmMCwgMHgzMCwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweGIxLCAweDg1LCAweDFlLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLAorCTB4MzEsIDB4YzMsIDB4MDEsIDB4MDAsIDB4NzksIDB4OTQsIDB4MDAsIDB4NDAsIDB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHg4NSwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAorCTB4MTgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MGMsIDB4ZTAsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDg1LCAweDMwLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhhMSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMSwgMHg4OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDI4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg4NSwgMHgyMiwgMHg0NiwgMHgyMywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDg3LCAweDZjLCAweDAwLCAweDAwLCAweGRjLCAweDg1LCAweDIyLCAweDQwLAorCTB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhkZSwgMHg4NSwgMHgyMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGUwLCAweDg1LCAweDIyLCAweDQyLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgwOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMSwgMHg4NSwgMHg2NiwgMHgxYiwgMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDQxLAorCTB4NDEsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODYsIDB4MjMsIDB4OTIsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMywgMHg4NiwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxOSwgMHg4NiwgMHgyMiwgMHg0YiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgyNCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDExLCAweDg2LCAweDIyLCAweDA4LCAweDQwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4MTIsIDB4MjQsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhlYSwgMHg4NSwgMHhhYSwgMHg0MSwgMHgyNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHg0OSwKKwkweDI3LCAweDZjLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDEzLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4MGIsIDB4ODYsIDB4MjYsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGNkLCAweDAxLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODUsIDB4YTIsIDB4NDAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg4NiwgMHgwMCwgMHg0MSwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MiwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDIxLCAweDM4LCAweDk2LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZmQsIDB4ODUsIDB4YTIsIDB4NDQsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDIwLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4NiwgMHhhOCwgMHg0MiwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4NSwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDBiLCAweDg2LCAweDIyLCAweDQwLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDBiLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDE3LCAweDAwLCAweDAwLCAweGQwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDI0LCAweDg2LCAweDAwLCAweDE3LAorCTB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxOSwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiOSwgMHg5NCwgMHgwMCwgMHg5MiwKKwkweDI1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDMxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxOSwgMHg4NiwgMHgyMiwgMHgwOCwgMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDI0LCAweDg2LCAweDAwLCAweDQxLCAweDI3LCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDAwLCAweGE2LAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg3OCwgMHg5OCwgMHgwMCwgMHgwYSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxYywgMHgwZiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4OWYsCisJMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgyMywgMHg4NiwgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDg4LCAweDFjLCAweGNjLCAweDAxLCAweDAwLCAweDI3LCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDEsIDB4M2YsIDB4YzMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDM4LCAweDg2LCAweDJhLCAweDQwLCAweDgxLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4NiwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDJkLCAweDg2LCAweGEyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDJkLCAweDg2LCAweGEzLCAweDA3LAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4NiwgMHhhMywgMHg0MCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDMyLCAweDg2LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZSwgMHhjYywgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzNiwgMHg4NiwgMHhhOCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDMsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAxLCAweDJkLCAweDQwLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDE5LCAweDg3LCAweDIyLCAweDBmLAorCTB4NDIsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODYsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQ2LCAweDg2LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0MywgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDRiLCAweDg2LCAweDIyLCAweDA3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MiwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDYsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg1NCwgMHgyOSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwKKwkweDBmLCAweDdjLCAweDAwLCAweDAwLCAweDNlLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHgwYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjQsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmUsIDB4N2YsIDB4MDAsIDB4MDUsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YTIsCisJMHg4NiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDc5LCAweDg2LCAweDIyLCAweDAxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LAorCTB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4YTQsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4NiwgMHhhMywgMHgwNywKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDY3LCAweDg2LCAweDY4LCAweDAxLCAweDFhLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDcsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCisJMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg3MywgMHg4NiwgMHgyMiwgMHg0MCwgMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg3MywgMHg4NiwgMHgyMiwgMHg0MiwKKwkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4NiwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDcwLCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4NiwgMHhhOCwgMHg0MCwKKwkweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4OTksIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCisJMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDdlLCAweDg2LCAweGEzLCAweDEyLAorCTB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ODYsIDB4NjAsIDB4MDcsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxMiwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZCwKKwkweDE2LCAweDk0LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDE2LCAweGQ4LCAweDAxLCAweDAwLAorCTB4MTQsIDB4OTksIDB4MDAsIDB4MDgsIDB4OTgsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsCisJMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4NywgMHg4NiwgMHhhOCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGI5LCAweDg2LCAweDIyLCAweDBkLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4OGQsIDB4ODYsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MiwgMHg4NiwgMHgwMCwgMHgwZCwgMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDk0LCAweDg2LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4OTksIDB4ODYsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDk1LCAweDg2LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiOSwgMHg4NiwgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4NiwgMHhhMiwgMHgwZCwKKwkweDBlLCAweDUwLCAweDAwLCAweDAwLCAweGE1LCAweDg2LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhMywgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTAsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweGFiLCAweDg2LCAweGEyLCAweDVmLAorCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODYsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4NiwgMHgyMywgMHgwNywKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGI1LCAweDg2LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4NjAsIDB4ODYsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODYsIDB4MDAsIDB4MGQsCisJMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgxNCwgMHgwYSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGNkLCAweDAxLCAweDAwLCAweGZlLCAweDdmLCAweDAwLCAweDA1LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YTQsIDB4ODYsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHhhMSwgMHg4NiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyYSwgMHhmMiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGMxLCAweDg2LCAweDIyLCAweDQwLCAweDMxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhmNiwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweGM1LCAweDg2LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODYsIDB4MjIsIDB4MGIsIDB4ZWQsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGExLCAweDg2LCAweDA2LCAweDAwLCAweDAwLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsCisJMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweGQxLCAweDg2LCAweDIyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4NDMsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhkMSwgMHg4NiwgMHhhMCwgMHg0NiwgMHgwZiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDBmLCAweGMwLCAweDAxLCAweDAwLCAweGQ1LCAweDg2LCAweDIyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGYsIDB4YTIsCisJMHg0MiwgMHgzMSwgMHgwMCwgMHgwMCwgMHhkOCwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDBjLCAweDAwLCAweDAwLCAweGEyLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OTUsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4NiwgMHhhMCwgMHg0MSwKKwkweDkwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZTAsIDB4ODYsIDB4MjIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ODYsIDB4YTAsIDB4NDMsCisJMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHhlMCwgMHg4NiwgMHgyMCwgMHg0NSwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGUwLCAweDg2LCAweGEwLCAweDQxLCAweDBlLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg4NiwgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NiwgMHgyMiwgMHg0OCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ4LCAweDkyLCAweGY0LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDgsIDB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4ODYsIDB4OTAsIDB4NDgsCisJMHg5MiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLAorCTB4OTMsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwKKwkweDQyLCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGExLCAweDg2LCAweDA2LCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OTksIDB4MDAsIDB4MTcsCisJMHg5OCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgxNywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweGUwLCAweGNkLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmNywgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDg3LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LAorCTB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZmUsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDA1LCAweDg3LCAweGEyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA2LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODUsIDB4ODcsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwZCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDg3LCAweGEwLCAweDA3LCAweDE2LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDg3LCAweDkwLCAweGYyLCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDJhLCAweDk0LCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTcsIDB4ODcsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwgMHg4NSwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIxLCAweDg3LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MWUsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNiwgMHg4NywgMHgyMiwgMHgwNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDQyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDIsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTEsCisJMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDJlLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmIsIDB4ODcsIDB4MjIsIDB4NDAsIDB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwKKwkweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODcsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg1MiwKKwkweDExLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAorCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDNmLCAweDg3LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLAorCTB4NDAsIDB4ODcsIDB4NjgsIDB4MDcsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsCisJMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg5OSwgMHgwMCwgMHgwOCwgMHg5OCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4M2UsIDB4OTYsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDcsIDB4ODcsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg4NywgMHgyMiwgMHgwZCwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDRkLCAweDg3LCAweDIyLCAweDBkLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTIsIDB4ODcsIDB4MDAsIDB4MGQsIDB4MjQsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweGEyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsCisJMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg4NywgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDU5LCAweDg3LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg1NSwgMHg4NywgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODcsIDB4YTIsIDB4MGQsCisJMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg2NSwgMHg4NywgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjMsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYwLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDA2LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2YiwgMHg4NywgMHhhMiwgMHg1ZiwKKwkweDBmLCAweDdjLCAweDAwLCAweDAwLCAweDM5LCAweDg3LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODcsIDB4MjMsIDB4MDcsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4NywgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDM5LCAweDg3LCAweDAwLCAweDAzLCAweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDM5LCAweDg3LCAweDAwLCAweDBkLAorCTB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4MywgMHg4NywgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ODMsIDB4ODcsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDgwLCAweDg3LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDJiLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDhjLCAweDg3LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDg4LAorCTB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg5OCwgMHgwMCwgMHg0MSwgMHgzZiwgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4NzgsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMywgMHg4OCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDEsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHg5OCwgMHg4NywgMHgyMiwgMHg1MCwgMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwZCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OTUsIDB4MDAsIDB4MDcsCisJMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhMywgMHg4NywgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDllLCAweDg3LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODcsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4ODcsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDg3LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAorCTB4YWQsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5NSwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKKwkweGMyLCAweDk3LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4YTEsIDB4ODgsIDB4YTIsIDB4NWYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4NDMsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGY0LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLAorCTB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4NDMsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMywgMHg0MywgMHg5MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMSwgMHg4NywgMHgyMiwgMHg0OCwKKwkweDhlLCAweDZjLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4YzEsIDB4ODcsIDB4MWYsIDB4ZjAsCisJMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMCwgMHg4NywgMHgyMywgMHg0MSwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGExLCAweDg4LCAweDAwLCAweDQ3LCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDQ4LAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4NywgMHgyMiwgMHgwYSwKKwkweDkwLCAweDQwLCAweDAwLCAweDAwLCAweDU4LCAweDk4LCAweDAwLCAweDQwLCAweDkxLCAweDMwLCAweDAxLCAweDAwLAorCTB4YTEsIDB4ODgsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4NDUsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4NywgMHgyMiwgMHhmMCwgMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGEzLCAweDAwLCAweDJkLCAweDMwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweGYzLAorCTB4ODIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODcsIDB4YTMsIDB4NDEsIDB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OTgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MjAsIDB4NGMsCisJMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgyZCwgMHg0MSwgMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwKKwkweGExLCAweDg4LCAweDIwLCAweGYwLCAweDk4LCAweDZjLCAweDAwLCAweDAwLCAweGVkLCAweDg3LCAweDIyLCAweDBhLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MGMsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsCisJMHhlZCwgMHg4NywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4OCwgMHgwMCwgMHg0OSwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZGEsIDB4ODcsIDB4MjIsIDB4NDMsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHhkYiwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDFhLCAweDgwLCAweDAwLCAweDQwLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweGRiLCAweDg3LCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4NywgMHg5ZiwgMHg4NSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMSwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFhLCAweDgzLCAweDIyLCAweDQwLCAweDU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTEsIDB4ODcsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAxLCAweDgzLCAweDFhLCAweDViLCAweDY5LCAweDkzLCAweDAwLCAweDAwLCAweGU3LCAweDg3LCAweDIyLCAweDQ2LAorCTB4ZjMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODcsIDB4YTIsIDB4NDEsIDB4ZjMsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg4MCwgMHgwMCwgMHg0MiwgMHg5NywgMHgzMywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwKKwkweDgxLCAweGM4LCAweDAxLCAweDAwLCAweGVhLCAweDg3LCAweDIyLCAweDQwLCAweGYyLCAweDdmLCAweDAwLCAweDAwLAorCTB4YzYsIDB4ODAsIDB4MDAsIDB4NmYsIDB4OTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4ODcsIDB4MjIsIDB4NDAsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MCwgMHgwMCwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweGU0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY0LCAweDg3LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZjEsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg5NCwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGY1LCAweDg3LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MmUsIDB4OTQsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGZmLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmYywgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDk0LCAweDIyLCAweDAyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgzZSwgMHg5NCwgMHgxYSwgMHgwMiwKKwkweDY4LCAweDk3LCAweDAwLCAweDAwLCAweDBhLCAweDg4LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODgsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDA3LCAweDg4LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyZiwgMHg4MywgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4OCwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU2LCAweDk1LCAweDJmLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLAorCTB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjksIDB4NDEsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlZiwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDBjLCAweDU1LCAweDZmLCAweDAwLCAweDAwLAorCTB4MjksIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGQsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxMiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LAorCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTAsIDB4MzQsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgzNCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweDQwLCAweDExLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4YWEsIDB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MywgMHg4OCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDg4LCAweDYwLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDA3LAorCTB4ODQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MmIsIDB4ODgsIDB4MDUsIDB4YzIsIDB4MjQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg1OCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDg4LCAweDcwLCAweGYwLCAweDE4LCAweDMwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDEsCisJMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MywgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDcwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDNhLCAweDg4LCAweGEwLCAweDQ4LAorCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4OCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzEsIDB4ODgsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDYwLCAweDg4LCAweDAwLCAweGY4LAorCTB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4ODgsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHgxMCwgMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDM0LCAweDk0LCAweDAxLCAweDAwLCAweDIwLCAweDE4LCAweDAwLCAweDQwLCAweDExLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MWEsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDFhLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4M2UsIDB4ODgsIDB4YTgsIDB4MDksIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDM1LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDExLCAweGMwLCAweDAxLCAweDAwLAorCTB4NGYsIDB4ODgsIDB4MjIsIDB4NDEsIDB4MGQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4OCwgMHhhMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAorCTB4MTIsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxZiwgMHg4OCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA5LCAweDEyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MWYsIDB4ODgsIDB4ODMsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxZiwgMHg4OCwgMHgwMCwgMHg0MSwgMHgxYiwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDVhLCAweDg4LCAweDIzLCAweDQwLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MzUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1NywgMHg4OCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NTQsIDB4ODgsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDg4LCAweDAwLCAweGY4LCAweDE4LCAweDMwLCAweDAxLCAweDAwLCAweDU4LCAweDg4LCAweGEyLCAweDQxLAorCTB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg1ZCwgMHg4OCwgMHhhMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweGI4LCAweDk0LCAweDIwLCAweDA3LCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYywgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDBjLAorCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4NzksIDB4ODgsIDB4MjYsIDB4NTQsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHg2YywgMHg4OCwgMHg4NywgMHgwYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBjLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2YywgMHg4OCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDY4LCAweDg4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ODgsIDB4MjIsIDB4NDYsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwYywKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc5LCAweDg4LCAweDIyLCAweDQ5LAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1NCwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDc0LCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDc5LCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDk0LCAweDJmLCAweDU1LAorCTB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4YTYsIDB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHg4MywgMHhhMiwgMHg0MSwgMHhlNSwgMHg1MSwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDgxLCAweDg4LCAweDQ0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ODQsIDB4ODgsIDB4YTIsIDB4OTMsIDB4NTcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg1NywgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhhYiwgMHgyNywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDJmLCAweDgzLCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDJmLCAweDgzLCAweDIyLCAweDUxLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MmYsIDB4ODMsIDB4YTIsIDB4NDEsIDB4MWQsIDB4NTMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4ODgsIDB4MjIsIDB4NDAsCisJMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDA0LCAweDAwLCAweDQxLCAweGI1LCAweDUzLCAweDAxLCAweDAwLCAweDJmLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweGI1LCAweDMzLCAweDAxLCAweDAwLCAweDYwLCAweDE2LCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4ODIsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YSwKKwkweGI0LCAweDhiLCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHhiNCwgMHhmNywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHhmMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwMiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MDgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWIsIDB4ODgsIDB4MjIsIDB4NTAsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwZiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDhhLCAweGU0LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA0LAorCTB4OGEsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDgsIDB4MDksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMCwgMHg1NywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLCAweDk2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjEsIDB4ODgsIDB4MDAsIDB4NGIsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhlMSwgMHg4YiwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4YywgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4YywgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDUyLCAweDhjLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDUyLCAweDhjLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OGMsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTksIDB4OGMsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNiLCAweDhlLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OGMsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDk1LCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4OTUsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OGQsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGI1LCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4ZCwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhkLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFmLCAweDhlLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIxLCAweDhlLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDhlLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDJjLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4M2UsIDB4OGUsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4OGUsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHg4ZSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4NDAsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OGUsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MywgMHg4ZCwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDkzLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4OTMsIDB4OGQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0MiwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDQyLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDQ5LCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDRiLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDhlLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGJlLCAweDhlLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzYiwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDhlLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDhjLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4OTMsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzIsIDB4OGUsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDNiLCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMiwKKwkweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQ3LCAweDhhLCAweGU0LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA0LAorCTB4OGEsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NGUsIDB4MDksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDIwLCAweDQ3LCAweGU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg5NiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDdhLCAweDg5LCAweDAwLCAweDRiLAorCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4ZjYsIDB4OGUsIDB4MDAsIDB4NDksIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg4ZiwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ3LCAweDhmLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDY0LCAweDhmLCAweDAwLCAweDRhLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NzEsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4OGYsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQxLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzYSwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4M2EsIDB4OGYsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDNhLCAweDhmLCAweDAwLCAweDQ5LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDRhLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzYSwgMHg4ZiwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0ZCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTAsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDkwLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTAsIDB4MDAsIDB4NGIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg5MCwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDdhLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4OTAsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDBmLCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4OGYsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0NywgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY0LCAweDhmLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OGYsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhmLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4MSwgMHg5MCwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHg5MCwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDgxLCAweDkwLCAweDAwLCAweDRiLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0MSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGFjLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTAsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDhmLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg5MCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGFjLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmIsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiYiwgMHg5MCwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkxLCAweDAwLCAweDQwLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NGUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTEsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NDUsIDB4OTAsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhYiwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg5MCwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDhlLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4OGUsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4OTAsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDhiLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4OTAsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4ZSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZSwgMHg5MCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDlkLCAweDkwLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5MSwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVhLCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1YSwgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NWEsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc3LCAweDkxLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NywgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4OTYsIDB4OTIsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MiwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTIsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiZiwgMHg5MiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGJkLCAweDkyLCAweDAwLCAweDRhLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJmLCAweDkyLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmQsIDB4OTIsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY3LCAweDkxLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTEsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDc0LCAweDkxLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTEsIDB4MDAsIDB4NGIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NzQsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDc0LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0YywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweDkwLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4OTAsIDB4MDAsIDB4NGMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdkLCAweDkzLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5MywgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4OTMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5MywgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg5MywgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5MywgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDUzLCAweDkwLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGYsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDUzLCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MywgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTMsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZlLCAweDkzLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNiwgMHg5MywgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmQsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkzLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZCwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NDQsIDB4OTMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQ0LCAweDkzLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0NywgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZhLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NywgMHg5MywgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4OGYsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0NywgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY3LCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZlLCAweDkzLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDkwLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2ZSwgMHg5MywgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDkzLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4OTMsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGZkLCAweDkyLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NywgMHg5MywgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NzEsIDB4OGYsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NzEsIDB4OGYsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MmUsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4NywgMHgwMCwgMHgwNCwgMHhlNiwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDhiLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgxZiwgMHgwMCwgMHgwZiwKKwkweDFlLCAweDhjLCAweDAxLCAweDAwLCAweDZkLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OGIsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDhiLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkNSwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDg1LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZDksIDB4OGIsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMSwgMHgwMCwKKwkweDFhLCAweDg1LCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNSwgMHgwMCwgMHgyZSwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4NywgMHgwMCwgMHgwNCwKKwkweGU2LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDA2LAorCTB4MDcsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNywgMHhkMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgyZSwgMHg1YywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKKwkweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDRiLAorCTB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTUsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZSwgMHgzNCwKKwkweDk3LCAweDg0LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRiLCAweGU0LCAweGU1LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDEsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDUsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJlLCAweDQwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDBkLCAweDhjLCAweDIwLCAweDRiLAorCTB4OTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHg4YywgMHgwMCwgMHg0MSwgMHg5NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDE0LCAweDhjLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhMSwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDFiLCAweDhjLCAweDQ0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFlLCAweDhjLCAweGEyLCAweDRjLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGMsIDB4MDAsIDB4NGMsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg4YywgMHgyMCwgMHhmMCwgMHg1NiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDU2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGQ4LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQzLAorCTB4ODEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4YywgMHhhOCwgMHg0NCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDhjLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQ2LAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4YywgMHhhOCwgMHg0NCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAorCTB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmUsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHg4YywgMHgyMiwgMHg0MywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAorCTB4M2YsIDB4OGMsIDB4MjIsIDB4NDQsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDY4LCAweDAxLCAweDIwLCAweGEyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDMsIDB4OGMsIDB4MjMsIDB4MGIsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDhjLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1YywgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjIsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHg0MSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDhjLCAweGEyLCAweDQ5LAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg1OSwgMHg4YywgMHgwMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgyZiwgMHg0OSwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDU5LCAweDhjLCAweGEyLCAweGYyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1YywgMHg4YywgMHhhMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDYwLCAweDhjLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MmYsIDB4NDYsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHg4YywgMHhhMiwgMHhmMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGU3LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgwNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDJkLCAweGYwLAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKKwkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDE2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MTQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OGMsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YywgMHgyMiwgMHgwYSwgMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OGMsIDB4YTAsIDB4NDMsCisJMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZiLCAweDhjLCAweDAwLCAweDQxLCAweDE1LCAweGQwLCAweDAwLCAweDAwLCAweDkwLCAweDhjLCAweDIyLCAweDBhLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDgsIDB4MTIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAorCTB4MTUsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDkwLCAweDhjLCAweDIyLCAweDQxLAorCTB4MTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4MywgMHg4YywgMHhhMCwgMHg0MywgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDExLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDA2LCAweDEwLCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDRlLCAweDk3LCAweDAwLCAweDQ3LAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyYiwgMHg5NCwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4OGMsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHg4YywgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDUxLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDJlLCAweDQxLCAweGY1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDgsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5ZCwgMHg4YywgMHgwMCwgMHg0OCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYzLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwgMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4YTQsIDB4OGMsIDB4MjIsIDB4NDUsIDB4MjMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsCisJMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweGYwLAorCTB4OGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZCwgMHhmMywKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OGMsIDB4MjIsIDB4NDgsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDBhLCAweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJhLCAweDRhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsCisJMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHg4YywgMHgyMywgMHgwMSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGMsIDB4MDAsIDB4MjAsIDB4ZjAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0NCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTgsIDB4OTgsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OGMsIDB4YTIsIDB4NDQsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMCwgMHg4YywgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGI2LCAweDk1LCAweDAwLCAweDQwLCAweDNiLCAweDMwLCAweDAxLCAweDAwLCAweGVhLCAweDhjLCAweGEyLCAweDA4LAorCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YzIsIDB4OGMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiOSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlYSwgMHg4YywgMHhhMiwgMHgwOCwKKwkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg4ZiwgMHg5NSwgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4YywgMHgyMiwgMHg0YSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGNlLCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTUsIDB4MDAsIDB4ZjMsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MywgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNlLCAweDQzLCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHg4NSwgMHgxMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHhmMCwgMHg4YywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhkYywgMHg4YywgMHgwMCwgMHg0OSwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHhlMSwgMHg4YywgMHgyMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGI2LCAweDk1LCAweDAwLCAweDQwLCAweDNiLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZTUsIDB4OGMsIDB4YTIsIDB4MDgsIDB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU1LCAweDhjLCAweGEyLCAweDA4LAorCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgyZCwgMHgxMCwKKwkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDU0LCAweDAwLCAweDJkLCAweGYwLCAweDM4LCAweGIwLCAweDAxLCAweDAwLAorCTB4NGUsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MmQsIDB4ZjIsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDhjLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQ2LAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MmQsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHg2OCwgMHhmMiwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MzcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgzNiwgMHhkMCwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHg0MCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ZTQsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4YywgMHhhOCwgMHg0MCwKKwkweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDA4LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OGQsIDB4ODIsIDB4NDEsCisJMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDhkLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDhkLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA4LCAweDhkLCAweGEzLCAweDAxLAorCTB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDksIDB4OGQsIDB4MDAsIDB4MDYsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg4ZCwgMHgyMCwgMHgwMiwKKwkweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MGYsIDB4OGQsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OGQsIDB4YTMsIDB4MDEsCisJMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwZiwgMHg4ZCwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAyLAorCTB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OGQsIDB4YTgsIDB4MTMsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHg1MSwgMHg4ZCwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDQ0LCAweDAwLCAweDJkLCAweDAyLCAweDBjLCAweGQwLCAweDAxLCAweDAwLCAweDNjLCAweDhkLCAweGEyLCAweDAyLAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OGQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4ZCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MWQsIDB4OGQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDQ0LCAweDAwLCAweDJkLCAweDVjLAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0YywgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZiwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDNlLCAweDhkLCAweDIyLCAweDAxLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OGQsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDJmLCAweDhkLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyYywgMHg4ZCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MzgsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4NGEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0NCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4ZCwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDNlLCAweDhkLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorCTB4MzgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0YywgMHg4ZCwgMHgyMiwgMHgwNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDMzLCAweGMwLCAweDAxLCAweDAwLCAweDRhLCAweDhkLCAweGEyLCAweDAyLCAweDM2LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4OGYsIDB4MGQsCisJMHg0MiwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDVjLCAweGUxLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLAorCTB4NmEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDM3LCAweDk4LCAweDAxLCAweDAwLCAweGZhLCAweDhjLCAweDAwLCAweGExLCAweDFhLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OGMsIDB4MDAsIDB4MDIsCisJMHgzNiwgMHhkMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDIwLCAweDAxLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHg4ZCwgMHgwMCwgMHg1ZiwgMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwMiwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAyLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MmQsIDB4NDYsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg1NywgMHg4ZCwgMHhhMCwgMHg0MywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1ZSwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NWIsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY1LCAweDhkLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg4ZCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjAsIDB4MDEsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDhkLCAweDkwLCAweGYyLCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgwMCwgMHhhNiwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDZkLCAweDhkLCAweDQ1LCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZDAsIDB4MDAsIDB4MWUsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NzIsIDB4OGQsIDB4MjgsIDB4NDAsCisJMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4ZCwgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OGQsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3MiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMCwKKwkweDkyLCAweGIwLCAweDAxLCAweDAwLCAweDdkLCAweDhkLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4M2IsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4NDgsCisJMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweGY4LCAweDAwLCAweDMwLCAweDAxLCAweDAwLCAweDdhLCAweDhkLCAweGEyLCAweDQxLAorCTB4M2IsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4OGQsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgxZSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgxLCAweDhkLCAweDAwLCAweDQ5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWQsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODQsIDB4OGQsIDB4MjIsIDB4NWYsCisJMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4NywgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGE3LCAweDg4LCAweDAwLCAweDAwLCAweDgwLCAweGIwLCAweDAwLCAweDAwLCAweDhiLCAweDhkLCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg4YiwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ODgsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YiwgMHg4ZCwgMHg0MCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDA3LCAweDk0LCAweDg5LCAweDAxLCAweDAwLCAweDkxLCAweDhkLCAweDg1LCAweGNhLAorCTB4OTQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTgsIDB4MTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCisJMHgwZSwgMHgwMCwgMHgwMCwgMHgwZiwgMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHhiNCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDE4LCAweDAwLCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk4LCAweDhkLCAweGEyLCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHg5NywgMHgwMCwgMHg0MCwgMHgwZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDk4LCAweDg4LCAweDAxLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OGQsIDB4OTAsIDB4NGMsCisJMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDhkLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDYyLCAweDQwLCAweDdlLCAweGNkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYSwgMHg4ZCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OGQsIDB4NDUsIDB4NDgsCisJMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGI0LCAweDhkLCAweDI4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweGFmLCAweDhkLCAweDIyLCAweDQ4LAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MWQsIDB4MDgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgxZCwgMHg0NywKKwkweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAorCTB4MzUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCisJMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHhhMCwgMHg0MywgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMywgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKKwkweDgyLCAweGNjLCAweDAxLCAweDAwLCAweGM4LCAweDhkLCAweGEyLCAweDQxLCAweDllLCAweDA2LCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MjIsIDB4NDQsIDB4ODMsIDB4NzAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLAorCTB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MWYsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg5OCwgMHgwMCwgMHg0OCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNywgMHg4OCwgMHgyMywgMHg0MSwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGE3LCAweDg4LCAweDAwLCAweDQ3LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsCisJMHhlNiwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwMCwgMHhiZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDRlLCAweDk3LCAweDAwLCAweDQ3LCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLAorCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhNSwgMHg4YywgMHhhMiwgMHg0MCwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhkYiwgMHg4ZCwgMHgyMiwgMHg0NywKKwkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ4LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YTUsIDB4OGMsIDB4MDAsIDB4NDgsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDYsCisJMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg1ZCwgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDJkLCAweDVkLAorCTB4MDUsIDB4YjQsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4ZjMsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg4YywgMHg5MywgMHgwMCwgMHg0YSwgMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDJmLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4ZWYsIDB4OGQsIDB4YTIsIDB4NTAsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGYwLCAweDAwLCAweDAwLCAweDQ3LCAweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg4ZCwgMHhhMCwgMHg0MywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDIwLCAweDQ3LCAweGU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MjIsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg4ZiwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDA5LCAweDhlLCAweDIyLCAweDQ3LCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLAorCTB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDksIDB4OGUsIDB4MWYsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAyLCAweDhlLCAweDQyLCAweDQwLAorCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwNywgMHg4ZSwgMHgyMywgMHg0MSwKKwkweDBkLCAweDZjLCAweDAwLCAweDAwLCAweGRkLCAweDhkLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4ODcsIDB4OTgsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YTcsIDB4ODgsIDB4MDAsIDB4NDgsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MGMsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4YTYsIDB4MDAsIDB4MmQsIDB4NDksIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODIsIDB4ZjgsIDB4MDEsIDB4MDAsIDB4MTksIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgxYSwgMHg4ZSwgMHhhMCwgMHg0MCwgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHgyYywgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDFhLCAweDhlLCAweGEzLCAweDQwLCAweDgyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4OGUsIDB4MjAsIDB4NGMsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDg2LCAweDAwLCAweDIwLCAweDQwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGEyLCAweDAwLCAweDIwLCAweDQyLAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHg5NywgMHgwMCwgMHg1MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHhmMCwKKwkweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLAorCTB4OTYsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHg5NywgMHgwMCwgMHg0YSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5NywgMHgwMCwgMHg0NiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MjIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDRhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTcsIDB4MDAsIDB4NDcsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYiwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg4ZSwgMHg5MCwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDYyLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MjIsIDB4NDAsCisJMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MSwgMHhlNSwgMHhjMSwgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk3LCAweDAwLCAweDRkLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDU2LCAweDhlLCAweDgwLCAweGYzLAorCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4ODEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjMsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2ZSwgMHg4ZSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NTEsIDB4ODMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4NCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDY2LCAweDhlLCAweDlmLCAweDQyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQyLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2OCwgMHg4ZSwgMHgzNywgMHg1YywKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NjksIDB4OGUsIDB4YTgsIDB4NGIsIDB4MTksIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YiwgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGVkLCAweDg3LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgyZCwgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDJkLCAweGYzLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsCisJMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDIwLCAweDAwLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDJiLCAweGIwLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2YsIDB4OGUsIDB4YTAsIDB4MTQsCisJMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg1MCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZSwgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQzLCAweDg2LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsIDB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OGUsIDB4YTQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDZlLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGE4LCAweDk3LCAweDAwLCAweDMwLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OGUsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MywgMHg4ZSwgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MiwgMHg4ZSwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDk5LCAweDhlLCAweDA2LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MjAsIDB4ZjIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDksIDB4NDYsCisJMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDUwLAorCTB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OGUsIDB4OTAsIDB4NGMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4ZSwgMHgyMiwgMHg0MywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDYyLCAweDQwLCAweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LAorCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYSwgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OGUsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4ZSwgMHhhOCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDFkLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4YjUsIDB4OGUsIDB4YTAsIDB4NDMsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYzLAorCTB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ1LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDhmLCAweDk1LCAweDAwLCAweGYzLAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NWQsIDB4OGUsIDB4MjIsIDB4NGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhjZSwgMHg4YywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDhmLCAweDk1LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLAorCTB4OTcsIDB4OGMsIDB4MjIsIDB4NGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OGMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLAorCTB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MGMsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4YywgMHgyMiwgMHgwNiwKKwkweDkwLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGFhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDJmLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDJhLCAweDUwLAorCTB4ZTcsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhkNSwgMHg4ZSwgMHhhMCwgMHg0MywgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDg5LCAweDkzLCAweDAwLCAweDEwLCAweDg2LCAweDMwLCAweDAxLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDcsIDB4OGUsIDB4NDIsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKKwkweGM4LCAweDhjLCAweDFhLCAweDVkLCAweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmQsIDB4MTAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzUsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4ZmIsCisJMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4ZSwgMHhhMCwgMHg0MywgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDM1LCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhlNywgMHg4ZSwgMHhhMCwgMHg0MywgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4OGMsIDB4OTMsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHg4ZSwgMHg0MiwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDVkLAorCTB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMywgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg2MywgMHhmMywKKwkweDgyLCAweGNjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDQxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4YmYsIDB4OGQsIDB4MjIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweGNkLCAweDhkLCAweDAwLCAweGYwLAorCTB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNywgMHg4ZSwgMHg2NSwgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGZjLCAweDhlLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MjcsIDB4ODMsIDB4NzUsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4OGUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc1LCAweDQyLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OGUsIDB4YTgsIDB4YjEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhhMywgMHg5NiwgMHgwMCwgMHgxMCwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAyLCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDA1LCAweDhmLCAweDAwLCAweDUwLAorCTB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OGYsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MiwgMHg0YiwgMHgxMiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NGEsCisJMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDVlLCAweDAxLCAweDAwLCAweDRiLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg4ZiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDksCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxYSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLAorCTB4MWUsIDB4OGYsIDB4NjUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc1LCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyNywgMHg4ZiwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDI1LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTYsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4ZiwgMHgyMCwgMHgwOSwgMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDJkLCAweDhmLCAweDFmLCAweDA5LCAweDk2LCAweDI0LCAweDAwLCAweDAwLCAweDI3LCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHg5NywgMHgwMCwgMHg1NywgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4OGYsIDB4MjIsIDB4ZjMsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHg0MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDUyLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDUyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhiLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDI0LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg0MiwgMHg4ZiwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTgsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg0ZSwgMHg4ZiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4ZiwgMHhhMiwgMHgxNiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGVkLCAweDg3LCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4M2EsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDIzLCAweDAwLCAweGE2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDUxLCAweDhmLCAweDgzLCAweDFlLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NywgMHgwMCwgMHgwOCwKKwkweDgwLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDhmLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLAorCTB4NzksIDB4OTcsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NywgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDVkLCAweDhmLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1YSwgMHg4ZiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2MSwgMHg4ZiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4NjksIDB4OGYsIDB4MjIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHgzZCwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDhmLCAweDAwLCAweDQyLCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRmLAorCTB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgyZCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDAxLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4ZGMsIDB4OGYsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OGYsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODQsIDB4OGYsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4NCwgMHg4ZiwgMHhhMiwgMHgxNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4ZiwgMHhhMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLAorCTB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3ZCwgMHg4ZiwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4M2EsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDg3LCAweDhmLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjMCwgMHg4ZiwgMHgyMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDE1LCAweDk4LCAweGM4LCAweDAxLCAweDAwLAorCTB4YzAsIDB4OGYsIDB4YTAsIDB4MGIsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDQsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTMsIDB4OGYsIDB4YTgsIDB4MDAsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDE1LAorCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmUsIDB4MGIsIDB4OTksIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2YSwgMHg1MCwgMHg5OSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHgwYiwKKwkweDk5LCAweDZjLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDYyLCAweDAxLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNmLCAweDQxLAorCTB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKKwkweDk5LCAweDgwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAwLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MTEsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDAwLCAweDIwLCAweDQ3LCAweGU3LCAweGI1LCAweDAxLCAweDAwLCAweGFiLCAweDhmLCAweDIzLCAweDBiLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ZTUsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGE0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgyYSwgMHg0MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjIsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4YmUsIDB4OGYsIDB4MjYsIDB4MTEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTgsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHg5NywgMHgwMCwgMHg0YywgMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDAzLCAweDk4LCAweDAxLCAweDAwLCAweGM4LCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MmYsIDB4MDgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHhmNCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlNCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGE0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHg5OCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NywgMHgwMCwgMHgwMCwKKwkweDJhLCAweDQwLCAweDAxLCAweDAwLCAweGNkLCAweDhmLCAweDIyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGNlLCAweDhmLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAwLCAweDAwLCAweDk4LCAweDkzLCAweDAwLCAweDQwLAorCTB4OGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjMsIDB4MDAsIDB4YTYsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHg5NywgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGQ2LCAweDhmLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkMywgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweDAwLCAweDVlLAorCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZDksIDB4OGYsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ZGMsIDB4OGYsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsCisJMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmQsIDB4MTUsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDFmLCAweDE1LCAweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHg5NiwgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDI2LCAweDkwLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDAwLCAweDIwLCAweDA2LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGZhLCAweDhmLCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmYSwgMHg4ZiwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4OGYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxZiwgMHg5MCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDBkLCAweDkwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4NmQsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NTQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxYSwgMHg5MCwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDMsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg5MCwgMHgyMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUxLCAweDk0LCAweDAwLCAweDQwLCAweDExLCAweDMwLCAweDAxLCAweDAwLAorCTB4MGEsIDB4OTAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYywgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDgzLCAweDAwLCAweDQwLAorCTB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg0OSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MTAsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5MCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGUxLCAweDk0LCAweDAwLCAweDQwLCAweDExLCAweDMwLCAweDAxLCAweDAwLCAweDE3LCAweDkwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxOSwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDgzLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4OTAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhlMSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMywgMHg5MCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjUsIDB4OTAsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgyZiwgMHg5MCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MmIsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDMzLCAweDkwLCAweDIyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgzNCwgMHg5MCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDBhLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDNhLCAweDkwLCAweDAzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDNiLCAweDkwLCAweDAwLCAweDQxLAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4OTAsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg0MywgMHg5MCwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4YTIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKKwkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAorCTB4NGIsIDB4OTAsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNlLCAweDk3LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5OCwgMHgwMCwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4Y2QsIDB4OGIsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU3LCAweDkwLCAweDIyLCAweDQwLAorCTB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2MiwgMHg5MCwgMHhhMiwgMHg0MCwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhlYywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDIwLCAweDBiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDE0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjZCwgMHg4YiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZWMsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5MCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDk5LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE1LAorCTB4OTgsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTAsIDB4MjAsIDB4MDEsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDZkLCAweDkwLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZiwgMHgxNSwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDEsCisJMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGU2LCAweDhmLCAweDIyLCAweDA5LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OGYsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGM2LCAweDhiLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5NywgMHgwMCwgMHg0OCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OGEsIDB4OTAsIDB4YTgsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg5MCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDhmLCAweDkwLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLAorCTB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4YWQsIDB4OTAsIDB4MDAsIDB4MDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4YiwgMHg4NywgMHg0MiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJmLCAweDQ3LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQwLAorCTB4ZTcsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5MCwgMHgyMiwgMHg0NywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MTcsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTAsIDB4MjIsIDB4MDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MCwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGFiLCAweDkwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHhmMiwKKwkweDAyLCAweDMwLCAweDAxLCAweDAwLCAweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGIyLCAweDkwLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGIxLCAweDkwLCAweGEyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiMiwgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDUxLCAweDkxLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5MCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg5MSwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YzEsIDB4OTAsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzEsIDB4OTAsIDB4YTIsIDB4MTYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHg0ZCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZDIsIDB4OTAsIDB4MjIsIDB4NDIsIDB4OTYsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2OCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDAwLCAweDAwLCAweDRiLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGE2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkMywgMHg5MCwgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDcsIDB4OTAsIDB4NjUsIDB4ZjIsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsCisJMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5MCwgMHgyMiwgMHg0NywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDI3LCAweDgzLCAweDc1LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQ2LCAweDkwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHg3NSwgMHgwOSwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ZTEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGU4LCAweDkwLCAweDY1LCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAorCTB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGYwLCAweDkwLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlZSwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDBiLCAweDE2LCAweGRjLCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsCisJMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDkxLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQ4LCAweDk2LCAweDAwLCAweDVmLAorCTB4MDEsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OTAsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGZlLCAweDkwLCAweGE4LCAweDAwLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4MzEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4NTIsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDkwLCAweDIyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDkwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4NjAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDRjLCAweDk3LCAweGYwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDRkLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDkxLCAweDMwLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwKKwkweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDgxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MTAsIDB4MGYsIDB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4NWYsCisJMHg5NSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDkxLCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDIzLCAweDkxLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTEsIDB4YTIsIDB4NDAsIDB4MzEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgxZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg0MSwKKwkweDMxLCAweGQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhNSwgMHg5NCwgMHgwMCwgMHg0MSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2EsIDB4OTEsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzYSwgMHg5MSwgMHhhMiwgMHgxNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwKKwkweDA0LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGYwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4OTEsIDB4MzcsIDB4NWMsCisJMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDkxLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzNywgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVkLCAweDg3LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NzQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5NywgMHgwMCwgMHg0YSwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE2LCAweDk2LCAweDAwLCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4YzEsIDB4OTAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDRlLCAweDkxLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHhlNywgMHgzMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MSwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQ5LCAweDkxLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweGYyLCAweDAyLCAweDMwLCAweDAxLCAweDAwLAorCTB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5NywgMHgwMCwgMHg0OCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE2LCAweDk2LCAweDAwLCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHg5MSwgMHg4NywgMHg0MiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZiwgMHg0NywKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweDkxLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGNlLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5OCwgMHgwMCwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQ1LAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OTEsIDB4YTIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg2ZCwgMHg5MSwgMHhhMiwgMHgxNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk3LCAweDAwLCAweDQ3LCAweDgwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAorCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhlMSwgMHgwMCwgMHhhNiwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDcsCisJMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhhLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDEsIDB4ZTcsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKKwkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDk3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgwYSwKKwkweDJjLCAweDUwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OWIsIDB4OTcsIDB4MDAsIDB4MDYsCisJMHgwNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YSwgMHg5MSwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDg4LCAweDkxLCAweDg0LCAweDQ4LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGEsIDB4OTEsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHgwMSwKKwkweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OGIsIDB4OTEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTEsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg3MywgMHg5NiwgMHgwMCwgMHg0NSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MywgMHg5MSwgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTEsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDgzLCAweDkxLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDI2LCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTQsIDB4OTEsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5MSwgMHgyMiwgMHg0NCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4YTgsIDB4OTEsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI3LCAweDkxLCAweDIyLCAweDRhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTEsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjMsIDB4OTEsIDB4MjIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGI0LCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHgxNiwKKwkweGU0LCAweGIxLCAweDAwLCAweDAwLCAweGNkLCAweDkxLCAweDIyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGJkLCAweDkxLCAweGEyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweGNlLCAweDkxLCAweDIyLCAweDQwLAorCTB4MmQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJiLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MmIsIDB4MDAsIDB4YTYsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NywgMHgwMCwgMHgwOCwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDkxLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDc5LCAweDk3LCAweDAwLCAweDQzLAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjNywgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTcsIDB4MDAsIDB4MDcsCisJMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwKKwkweDFhLCAweDUwLCAweDAwLCAweDAwLCAweGRjLCAweDkxLCAweDIwLCAweDE2LCAweDFhLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOSwgMHg5MSwgMHhhOCwgMHg0NiwKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJjLCAweGQwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE2LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwKKwkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweGU2LCAweDkxLCAweDg0LCAweDQ1LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4ZTcsIDB4OTEsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5NiwgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjAsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGVjLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5MiwgMHhhMiwgMHgwMiwgMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDA1LCAweDkyLCAweDIyLCAweDQwLCAweDJkLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LCAweGUwLCAweDhkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg5MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDFiLCAweDk4LCAweDAxLCAweDAwLCAweDA1LCAweDkyLCAweDAwLCAweDVjLCAweDExLCAweDgwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsIDB4MWIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCisJMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDBiLCAweDk5LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMywgMHg0MywgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHhlMSwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MGIsIDB4OTIsIDB4MjMsIDB4MGQsIDB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxMywgMHg5MiwgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDcwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEzLCAweDkyLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwZiwgMHg5MiwgMHhhOCwgMHg0NiwKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDI2LCAweDk2LCAweDAwLCAweDQxLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDkyLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDRmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4OTIsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwKKwkweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzgsIDB4OTIsIDB4MjIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjksIDB4OTIsIDB4YTIsIDB4MTYsCisJMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzNCwgMHg5MiwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgyZCwgMHg5MiwgMHhhMiwgMHhmMywKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsCisJMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgzMSwgMHg5MiwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDExLCAweDkwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzNSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4MTYsCisJMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgzYiwgMHg5MiwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0ZSwgMHg5MiwgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHg5MSwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDQ4LCAweDkyLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4NDEsIDB4OTIsIDB4YTIsIDB4ZjMsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDAwLCAweDNlLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDQ1LCAweDkyLCAweDIyLCAweDQwLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MTEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA4LCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDEsIDB4MmQsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MmQsIDB4ZjAsCisJMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI3LCAweDQwLAorCTB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODQsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMywgMHg5MSwgMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHgyNSwgMHg5OCwgMHgwMCwgMHg0MSwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDU3LCAweDkyLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NTcsIDB4OTIsIDB4YTIsIDB4MTYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5MiwgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweGE2LCAweDk1LCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDAxLCAweDE0LCAweGIwLCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MmIsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MmIsIDB4MDAsIDB4YTYsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLCAweDZhLCAweDkyLCAweDIzLCAweDBkLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjMsIDB4OTIsIDB4YTgsIDB4MDAsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgyMywgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDZkLCAweDkyLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5MiwgMHgyMiwgMHg0MCwgMHgxYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDU4LCAweDk3LCAweDAwLCAweDAxLCAweDg0LCAweDUwLCAweDAxLCAweDAwLCAweDdiLCAweDkyLCAweDIyLCAweDQwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGExLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDc4LCAweDkyLCAweGE4LCAweDExLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4YSwgMHg5MiwgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg5MiwgMHgyMywgMHgwZCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTIsIDB4MjIsIDB4NDAsCisJMHgxYiwgMHg2YywgMHgwMCwgMHgwMCwgMHg3OSwgMHg5NywgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDhhLCAweDkyLCAweDIyLCAweDQwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MywgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg5MiwgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OGIsIDB4OTIsIDB4YTgsIDB4MGEsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweDkyLCAweDkyLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NywgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwKKwkweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDBjLCAweDQ3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg5MSwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4YTgsIDB4OTIsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGE0LCAweDkyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYSwgMHg5MiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MWEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YjEsIDB4OTIsIDB4YTIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgyNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweGJhLCAweDkyLCAweDI3LCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmQsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5OCwgMHgwMCwgMHg0MSwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweGI1LCAweDkyLCAweDI3LCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NTcsIDB4OTIsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5MiwgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweGE2LCAweDk1LCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTIsIDB4MDAsIDB4NGEsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDRmLCAweDJiLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4OWIsIDB4OTcsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTIsIDB4YTIsIDB4NDQsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJjLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTMsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMywgMHg5MiwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OTIsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTIsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg3MywgMHg5NiwgMHgwMCwgMHg0NSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjNSwgMHg5MiwgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTIsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM1LCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHg0MSwKKwkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OTIsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGU3LCAweDkyLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlYSwgMHg5MiwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0ZiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg5MiwgMHgyMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGYxLCAweDkyLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwKKwkweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGY1LCAweDkyLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJhLCAweDE1LAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHg5MSwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4Y2QsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ1LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg5NCwgMHgwMCwgMHg0YSwgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MSwgMHgwMCwgMHgxMCwKKwkweDMyLCAweGIwLCAweDAwLCAweDAwLCAweDhhLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4OTMsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDlmLCAweDk1LCAweDAwLCAweDE1LCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweGE2LCAweDk1LCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwZCwgMHg5MywgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQ1LCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OTAsIDB4MDAsIDB4NDUsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGVjLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MSwgMHgwMCwgMHgwMSwKKwkweDJjLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5MywgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDI2LCAweDkzLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAorCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5MywgMHgzNywgMHg1YywKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjMsIDB4OTMsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDkzLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyMCwgMHgxNiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGVjLCAweDk1LCAweDAwLCAweDQ3LCAweDFmLCAweDEwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTMsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MSwgMHgwMCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDcsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHgzZCwgMHg5MywgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZCwgMHg5MywgMHhhMiwgMHgxNiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM5LCAweDkzLCAweGEyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweDE1LAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDksIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRmLAorCTB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmOSwgMHg5NCwgMHgwMCwgMHgxMCwKKwkweDMyLCAweDMwLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAwLCAweDAwLAorCTB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OTMsIDB4YTIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1MiwgMHg5MywgMHhhMiwgMHgxNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg0YSwgMHg5MywgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRmLCAweDkzLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDRmLCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVkLCAweDg3LCAweDE3LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHg0NywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDI2LCAweDk2LCAweDAwLCAweDQxLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMCwgMHg5MSwgMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDkzLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODQsIDB4OGYsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsIDB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDAxLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MiwgMHg5MywgMHhhMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4NzcsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDgsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlYywgMHg5NSwgMHgwMCwgMHg0YSwgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDk3LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTEsIDB4MDAsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwKKwkweDJiLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MSwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ2LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OTAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzNywgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDMzLCAweGMzLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweGNjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZDIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODYsIDB4OTMsIDB4ODUsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0OCwgMHgwMywgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDkzLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDRjLAorCTB4MDMsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MzQsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjYiwgMHg5NCwgMHgwMCwgMHg0MSwgMHhlMSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDQzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweGE1LAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyZiwgMHgwMSwgMHg4YywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHhmMCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGUwLCAweGMxLCAweDAxLCAweDAwLAorCTB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4MDEsCisJMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhhMywgMHg5MywgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDJmLCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTUsIDB4OTMsIDB4MjIsIDB4NDcsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5MCwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5NywgMHgwMCwgMHg0NywKKwkweDE5LCAweDEwLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDJkLCAweDQ0LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTgsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDkzLCAweGEyLCAweDRiLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDBmLCAweDk0LCAweGEyLCAweDRjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OTMsIDB4MWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhiZCwgMHg5MywgMHhhMiwgMHgwMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0NiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGIzLCAweDkzLCAweDFmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAorCTB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjUsIDB4OTMsIDB4MjIsIDB4ZjAsCisJMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHg5NCwgMHgxZiwgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRmLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwZCwgMHg5NCwgMHgyMCwgMHg0MiwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiOSwgMHg5MywgMHgyMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NTgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmMsIDB4OTMsIDB4MjIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDViLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjMSwgMHg5MywgMHhhMiwgMHg0MiwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5MywgMHgyMywgMHhmMCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweGExLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTMsIDB4YTIsIDB4ZjAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg5NCwgMHhhMiwgMHg0MiwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDBlLCAweDk0LCAweGEyLCAweDQxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGM4LCAweDkzLCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTEsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHg5NCwgMHgxZiwgMHgxMiwKKwkweDg0LCAweDUwLCAweDAwLCAweDAwLCAweDBlLCAweDk0LCAweGEwLCAweDAxLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4YmEsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmNywgMHg5MywgMHhhMiwgMHg0NiwgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGU5LCAweDkzLCAweDIyLCAweGYwLAorCTB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTMsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhlNiwgMHg5MywgMHgwMywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkNCwgMHg5MywgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4OTMsIDB4MjIsIDB4MGEsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhkZCwgMHg5MywgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGQ5LCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU1LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTYsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkYywgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5MywgMHgyMCwgMHg5MSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwKKwkweGUyLCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDgwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjcsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlNSwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4ZTgsIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGYyLCAweDkzLCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZWYsIDB4OTMsIDB4YTIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhlZiwgMHg5MywgMHhhMiwgMHhmMiwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwKKwkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZjEsIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGVmLCAweDkzLCAweGEwLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGVkLCAweDkzLCAweDIyLCAweDQzLAorCTB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTQsIDB4YTIsIDB4ZjAsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZCwgMHg5MywgMHhhMiwgMHhmMiwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWYsIDB4OTMsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhlZCwgMHg5MywgMHgyMCwgMHg5MSwgMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhlZiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDk0LCAweDIwLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDMsIDB4OTQsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA5LCAweDk0LCAweDIyLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGRkLCAweDkzLCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OTQsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1NSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDBiLCAweDk0LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHg5NCwgMHgwMCwgMHg0MywgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDExLCAweDk0LCAweDAwLCAweDQxLCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDExLCAweDk0LCAweDAwLCAweDQyLAorCTB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OTQsIDB4MDAsIDB4NDQsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMSwgMHg5NCwgMHgwMCwgMHg0YywgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDRhLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4NTUsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTYsIDB4OTQsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDRjLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg5NCwgMHhhMiwgMHhmMywKKwkweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmEsIDB4NDEsIDB4ZTcsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2QsIDB4NDEsCisJMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDk0LCAweDIyLCAweDVhLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4OTQsIDB4MDAsIDB4NWEsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwKKwkweDg1LCAweGMwLCAweDAxLCAweDAwLCAweDI2LCAweDk0LCAweGEwLCAweGE1LCAweDg1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweGE1LAorCTB4ODUsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweGYwLCAweDhjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OTQsIDB4MjIsIDB4NDAsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYwLAorCTB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywKKwkweDk4LCAweDZjLCAweDAwLCAweDAwLCAweDM4LCAweDk0LCAweGEyLCAweDRiLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MzksIDB4OTQsIDB4MjIsIDB4ZjAsIDB4MTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5NSwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDgzLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDNkLCAweDk0LCAweDIyLCAweDVhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHg4MywgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA3LAorCTB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywgMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwgMHgzZCwgMHg5NSwgMHgwMCwgMHgwNywKKwkweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDJmLCAweDgzLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAorCTB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywgMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywKKwkweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDk2LCAweDZjLCAweDAwLCAweDAwLAorCTB4M2QsIDB4OTUsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg5NCwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDU3LCAweDk0LCAweGExLCAweGFkLCAweDk1LCAweDIwLCAweDAwLCAweDAwLCAweDY5LCAweDk0LCAweDEzLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NGEsIDB4NWEsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgzOSwgMHg0NSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwKKwkweDVmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDVmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4MGYsIDB4NWUsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsCisJMHg1ZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg1ZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorCTB4NDgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NGEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg1OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDRlLCAweGIwLCAweDAxLCAweDAwLCAweDE5LCAweDg1LCAweDAwLCAweDQwLCAweDVkLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4NWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDQxLCAweDk3LCAweGIwLCAweDAwLCAweDAwLCAweDY2LCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgwNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxNSwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZjLCAweDk0LCAweDYwLCAweDA3LCAweDk2LCAweDMwLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4YzIsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3OSwgMHg5NCwgMHhhMiwgMHg0NSwgMHgyNSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDcwLCAweDk0LCAweDMxLCAweDIwLCAweDg1LCAweDMwLCAweDAwLCAweDAwLCAweDdhLCAweDk0LCAweDIyLCAweDEyLAorCTB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDQsIDB4MTEsIDB4MTIsIDB4NDgsIDB4MDMsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDE3LCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NWYsCisJMHg4YiwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDc5LCAweDk0LCAweDMxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2EsIDB4OTQsIDB4MjIsIDB4MTIsIDB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHg1OCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNywgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDEyLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODksIDB4OTQsIDB4MGIsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDg2LCAweDk0LCAweDIyLCAweDUwLCAweDg1LCAweDcwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YWUsIDB4OTYsIDB4MDAsIDB4ZjIsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg5MywgMHgwNCwgMHgwMCwgMHgxMiwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsIDB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHgxMCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGI3LCAweDNmLCAweDQzLCAweDExLCAweGYwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA4LAorCTB4OGEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OTQsIDB4MzAsIDB4YTEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg5MCwgMHg5NCwgMHgyMiwgMHg0NSwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5NCwgMHgxMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweDQ1LCAweGU2LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4MTIsIDB4NDgsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDg1LCAweDgwLCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YWUsIDB4OTYsIDB4MDAsIDB4ZjIsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4OWMsIDB4OTQsIDB4MjIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA5LCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE3LAorCTB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5NCwgMHhhOCwgMHgwNSwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTQsIDB4MDAsIDB4NGIsIDB4OTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsCisJMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDBmLCAweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDQyLAorCTB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OTQsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhYiwgMHg5NCwgMHgwMCwgMHg0MiwgMHg2OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDZhLCAweGIxLCAweDAxLCAweDAwLCAweGFiLCAweDk0LCAweDMxLCAweDVhLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDIsIDB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4NDIsCisJMHg0OCwgMHg5MywgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NCwgMHgzNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGI0LCAweDk0LCAweDI4LCAweGIxLAorCTB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTQsIDB4MjIsIDB4NGQsIDB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg0MCwKKwkweDExLCAweGIwLCAweDAxLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4YjQsIDB4OTQsIDB4YTgsIDB4YjEsIDB4MTAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNywgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdmLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmYsIDB4OTQsIDB4MjgsIDB4YjEsIDB4MTAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhiOSwgMHg5NCwgMHg5ZiwgMHhiYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NWMsCisJMHgxMSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YSwgMHgxMSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDA4LCAweDQ4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDI0LAorCTB4MTEsIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1YSwgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMCwKKwkweDQ4LCAweDA2LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweGJiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM4LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDk0LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MzIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5NCwgMHgyMiwgMHhmOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDkwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDkyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjcsIDB4NDksCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDkyLCAweDQ4LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDZjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTQsIDB4MjgsIDB4YjEsIDB4OTIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5NCwgMHgyMiwgMHg0YywgMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMiwgMHg0MCwKKwkweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OTQsIDB4YTgsIDB4YjEsIDB4OTAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNywgMHg0OCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDAwLCAweDAwLCAweDQ4LCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4OTAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MiwgMHg0OSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAorCTB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHhlYSwgMHg5NCwgMHgyMiwgMHgxYSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHgwMCwKKwkweDM0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDE1LCAweDgyLCAweDhjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDAwLCAweGVjLCAweDAwLCAweDAwLAorCTB4ZjYsIDB4OTQsIDB4MjIsIDB4MGQsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4MDAsCisJMHgxYSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweGYwLCAweDk0LCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4OTQsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyZCwgMHgwMSwKKwkweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsCisJMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDAxLCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHg5NywgMHgyZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDk1LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4NjQsIDB4OTcsIDB4M2UsIDB4NDMsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5NywgMHgzZSwgMHg0MywgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDBiLCAweGU4LCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNmLCAweDQzLAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5NywgMHgzZiwgMHg0MywKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTcsIDB4M2QsIDB4NDMsCisJMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHg4MCwgMHhhMSwgMHgxNiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDE2LCAweDZjLCAweDAwLCAweDAwLCAweDFhLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OGEsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHgwZCwgMHg4YSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDE3LCAweDk1LCAweDMwLCAweDQ3LCAweDE3LCAweDA0LCAweDAwLCAweDAwLAorCTB4MWEsIDB4OTUsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4NDIsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDFlLCAweDk1LCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZiwgMHg5NSwgMHg0MCwgMHgwNywKKwkweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDlkLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjksIDB4OTUsIDB4YTIsIDB4NDUsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTcsIDB4M2YsIDB4NDEsCisJMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNlLCAweDQwLAorCTB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgzYywgMHg5NSwgMHgwMCwgMHgzYiwKKwkweGU3LCAweGIxLCAweDAwLCAweDAwLCAweDI5LCAweDk1LCAweDMwLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzMsIDB4OTUsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyZiwgMHg5NSwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQyLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQxLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjEsIDB4YTIsIDB4OTUsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NGEsCisJMHg0NCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NywgMHgzZSwgMHg0MSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGY2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDA3LCAweDkyLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwOCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDQzLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwKKwkweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDQ0LCAweDk1LCAweDQwLCAweDA4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLAorCTB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OTUsIDB4MjIsIDB4NDUsCisJMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwgMHg0ZCwgMHg5NSwgMHgyMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDBmLCAweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDQ5LCAweDk1LCAweDMxLCAweDVmLAorCTB4OTcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGIsIDB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMSwgMHg0YiwgMHg0OCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDZhLCAweGIxLCAweDAxLCAweDAwLCAweDRkLCAweDk1LCAweDMwLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNmLCAweDQxLAorCTB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5NywgMHgzZCwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHhmMywKKwkweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDViLCAweDk1LCAweGEyLCAweDNiLCAweDg5LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwgMHg0NCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDVjLCAweDk1LCAweDE4LCAweDRhLCAweDQ0LCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4M2YsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgxNiwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4YSwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0YiwKKwkweDhhLCAweDE0LCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDM5LCAweDQ1LCAweDk3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsIDB4NWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NWUsCisJMHg1ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHgyZiwgMHg3ZSwgMHhkOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDY4LCAweDk1LCAweDIyLCAweDVhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4MGYsIDB4OTgsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg1ZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg5NSwgMHgwMCwgMHgwNSwKKwkweDRhLCAweGIwLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweGE3LCAweDVlLCAweDg0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCisJMHg1ZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwOCwgMHg0ZSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg2ZCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMywgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA3LCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4NzIsIDB4OTUsIDB4NDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3NiwgMHg5NSwgMHgyMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRhLAorCTB4NDQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4OWIsIDB4MDQsIDB4MDAsIDB4NGEsIDB4NDQsIDB4MTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NywgMHgzZiwgMHg0MSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNkLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsCisJMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweGFhLAorCTB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MGYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDgyLCAweDk1LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NzgsIDB4OTUsIDB4YTIsIDB4M2IsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsCisJMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA4LAorCTB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4NGEsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0YiwKKwkweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDkzLCAweDA0LCAweDAwLCAweDEyLCAweDk0LCAweDMwLCAweDAxLCAweDAwLAorCTB4M2QsIDB4OTUsIDB4MDAsIDB4NWEsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWEsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0YSwgMHhlNiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDRhLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmYsIDB4NGYsIDB4OTUsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHg0YiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZTMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmQsIDB4NDQsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYyLAorCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTQsIDB4MDAsIDB4MTAsIDB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweGEwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsCisJMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NGMsIDB4MDIsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHhhMywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwKKwkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweGI0LCAweDk1LCAweDIyLCAweDQxLCAweDAzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OTUsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDdjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhNywgMHg5NSwgMHgwMCwgMHg1YywgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MmQsIDB4MDYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZTIsIDB4OTUsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsCisJMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgzYSwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDk5LCAweDAwLCAweDA4LCAweDhhLCAweDMwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQxLAorCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YjksIDB4OTUsIDB4YWEsIDB4NDEsIDB4M2IsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDExLCAweDgwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDQ4LCAweDNiLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDQsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTUsIDB4MjYsIDB4NDYsCisJMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMywgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRjLAorCTB4NDIsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg2NCwgMHgwMSwgMHgyMCwgMHhmMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZiwgMHg5NSwgMHgyMiwgMHg0MSwKKwkweDA1LCAweDUwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4NDQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkMSwgMHg5NSwgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg5NSwgMHgyMiwgMHg0MSwKKwkweDA1LCAweDUwLCAweDAwLCAweDAwLCAweGRjLCAweDk1LCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQ3LCAweDk1LCAweGE4LCAweDQ2LCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDEzLCAweGMwLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDUwLCAweDQ5LCAweGMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHgxYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGUwLCAweDk1LCAweDIyLCAweDQwLAorCTB4M2IsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjMywgMHg5NCwgMHgwMCwgMHg1YywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlMiwgMHg5NSwgMHgwMCwgMHg0MSwKKwkweDNiLCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhkLCAweDQ3LCAweDgwLCAweDMyLCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MmYsIDB4NWYsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsCisJMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweGYwLCAweDhjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweGYxLCAweDk1LCAweDhjLCAweGY4LCAweDhlLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsCisJMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJlLCAweGY4LAorCTB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmEsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyMCwgMHgxYiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGZlLCAweDk1LCAweDIwLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAwLCAweDIwLCAweDRhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDIwLCAweDRiLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMCwgMHgyZCwgMHg0MiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTYsIDB4YTIsIDB4YTUsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDk2LCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwKKwkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MGQsIDB4OTYsIDB4YTAsIDB4YTUsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgyMCwgMHg0MSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDk2LCAweDIyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorCTB4OTgsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg5NiwgMHgwMCwgMHg0MCwgMHgxZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDFlLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhjYiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAorCTB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwKKwkweDA1LCAweDkwLCAweDAwLCAweDAwLCAweDIzLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4Y2IsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgzMywgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKKwkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDgyLCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg5NiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDk2LCAweDlmLCAweDQxLCAweDg1LCAweDUwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE1LAorCTB4ODUsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMywgMHhhNSwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZCwgMHg0MSwKKwkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAorCTB4NDQsIDB4OTYsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsCisJMHg5OSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5OSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDAwLCAweDk4LCAweDZjLCAweDAwLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMSwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDAsIDB4NmEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDAsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg5NiwgMHg1MiwgMHg0MywgMHg4MSwgMHg2MCwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDUwLCAweDk2LCAweDAwLCAweDQxLAorCTB4ODAsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NTEsIDB4OTYsIDB4OWUsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTYsIDB4OTYsIDB4YTIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDE1LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDNjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2EsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4OTYsIDB4OWMsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg2MCwgMHg5NiwgMHhhMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDRjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDFlLAorCTB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NWYsIDB4OTYsIDB4YTIsIDB4NDgsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg5NiwgMHhhMiwgMHg4YSwKKwkweGYxLCAweDZkLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweGNjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4M2UsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHgyOCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDk2LCAweDIwLCAweGYwLCAweDNlLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMywKKwkweDNhLCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsCisJMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDJhLCAweDBjLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxYywgMHgwMCwgMHgyZCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDYsIDB4MTQsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTYsIDB4MjIsIDB4NDUsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHgwNiwgMHgyYSwgMHhlYywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyYSwgMHg0YywgMHhlMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODQsIDB4OTYsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg5NSwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4ZiwgMHg5NiwgMHg2MiwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDkwLCAweDk2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OTIsIDB4OTYsIDB4YTgsIDB4MDAsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDk1LCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg5NiwgMHg2MiwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDllLCAweDk2LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHg5NiwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsCisJMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDA5LCAweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhhYSwgMHg5NiwgMHg2MywgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGM5LCAweDAxLCAweDAwLCAweGFiLCAweDk2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZjMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsCisJMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5NiwgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGI3LCAweDk2LCAweDIyLCAweGYzLCAweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLAorCTB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTcsIDB4ODUsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3NSwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjQsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM3LCAweDk2LCAweDgyLCAweDQxLCAweDIzLCAweDQwLCAweDAwLCAweDAwLCAweGJjLCAweDk2LCAweGEyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTgsIDB4OTMsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NiwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OTYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzcsIDB4OTYsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhlMSwgMHg5NCwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDk2LCAweGEzLCAweDE1LCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2EsIDB4OTYsIDB4MDAsIDB4MDYsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NiwgMHgyMCwgMHgwMiwgMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDliLCAweDk3LCAweDAwLCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OTYsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhkMCwgMHg5NiwgMHhhMiwgMHgwMiwgMHgyYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmNywgMHg5NiwgMHhhMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGQyLCAweDk2LCAweDIyLCAweDAyLCAweDBjLCAweDUwLCAweDAwLCAweDAwLAorCTB4ZGIsIDB4OTYsIDB4MDAsIDB4MDIsIDB4MTYsIDB4YzAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTYsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGRhLCAweDk2LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkNiwgMHg5NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4NzMsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OTYsIDB4MjIsIDB4MTUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGY2LCAweDk2LCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLCAweGU3LCAweDk2LCAweDIyLCAweDQ2LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NzAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhlNywgMHg5NiwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OTYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyZiwgMHg1YywKKwkweDExLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YjksIDB4OTYsIDB4MjAsIDB4MTUsCisJMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGYzLCAweDk2LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4YjksIDB4OTYsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YjksIDB4OTYsIDB4MDAsIDB4MDIsCisJMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg5NiwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDk4LCAweDkzLCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwKKwkweDI3LCAweGVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDEsIDB4YTMsIDB4NDEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTcsIDB4MDAsIDB4NDEsCisJMHgyNywgMHhkMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDk5LCAweDAwLCAweDQwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MTQsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDY0LCAweDk3LCAweDAwLCAweDQwLCAweDJiLCAweDMwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDA2LAorCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YzQsIDB4MDEsIDB4MDAsCisJMHgxOCwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4NDAsCisJMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIxLCAweDk3LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQzLAorCTB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsIDB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgyMSwgMHg5NywgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDQ0LCAweDk3LCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MmYsIDB4OTcsIDB4YTIsIDB4MDYsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTcsIDB4MjIsIDB4NDgsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgyNiwgMHg5NywgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MzEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgyZCwgMHg0OCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDIwLCAweDQ1LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAorCTB4MmYsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyZiwgMHg5NywgMHhhMCwgMHg0OCwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDMsIDB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg5NywgMHgwMCwgMHgzMCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDNhLCAweDk3LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDk3LCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4OTcsIDB4NjQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzZSwgMHg5NywgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAorCTB4OGMsIDB4MDAsIDB4MjAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwNiwgMHgzMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDg2LCAweDBjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ5LAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MmQsIDB4NDYsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDUwLCAweDAwLCAweDQzLCAweGZjLCAweGM5LCAweDAxLCAweDAwLAorCTB4YTgsIDB4OTcsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NGEsCisJMHgxOSwgMHhmYywgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDAwLCAweDJkLCAweGFiLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTcsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDFiLAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg0YywKKwkweDk1LCAweDYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRhLCAweDE4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDEsCisJMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgxNSwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1ZCwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHg1ZiwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDdhLCAweDAxLCAweDJlLCAweGZlLAorCTB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4ZjYsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg5NywgMHgyMiwgMHg0MywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGE2LCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4NmUsIDB4MDYsIDB4ODIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NmUsIDB4OTcsIDB4MjIsIDB4NGEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDZlLCAweDRjLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTcsIDB4NDMsIDB4MzAsIDB4M2QsIDB4MDcsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2NiwgMHg5ZSwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MSwKKwkweDNkLCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDYsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg5NywgMHgyNiwgMHgzMCwgMHg5MywgMHgwNCwgMHgwMCwgMHgwMCwKKwkweDc4LCAweDk3LCAweDkwLCAweDRjLCAweDkyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ODAsIDB4NDksIDB4ZWMsIDB4YTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMSwKKwkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxNSwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDdkLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDIwLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4ZiwgMHg5NywgMHgyMiwgMHg1ZiwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4YywgMHg5NywgMHhhMiwgMHg0MCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5NywgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDhjLCAweDk3LCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg4OCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyNSwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDQwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MjEsIDB4ODEsIDB4ODQsIDB4MDAsIDB4MDAsIDB4OTIsIDB4OTcsIDB4YTIsIDB4NWYsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MywgMHgxOSwgMHg3YywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDI1LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk2LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDk3LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHg5NywgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwNSwgMHgwMCwgMHgwMiwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGFhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDIsCisJMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGYwLCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweGIxLCAweDk3LCAweDIwLCAweDRjLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiMSwgMHg5NywgMHgyMCwgMHhmMiwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDJkLCAweDE0LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDAsIDB4MmQsIDB4MTQsCisJMHg5OCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhiNiwgMHg5NywgMHgyMCwgMHg0YywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDMwLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg5NywgMHgyMywgMHg0MCwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDAwLCAweDIwLCAweDE0LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4OTgsIDB4MDAsIDB4MjUsIDB4NDIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ZjMsCisJMHg4MCwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg0MiwgMHg4MiwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweGMwLCAweDk3LCAweGEwLCAweDQwLCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4ZjAsIDB4ODIsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHg5OCwgMHgwMCwgMHhhMCwgMHg0MSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDM3LCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4OTksIDB4MDAsIDB4MDUsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDAxLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhhNywgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4Y2IsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MWMsCisJMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwgMHg4YSwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDhiLCAweGVjLCAweDAwLCAweDAwLCAweDhhLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhhNCwgMHgwMCwgMHgyZCwgMHg0NSwgMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHhkOSwgMHg5NywgMHg5YywgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YmUsIDB4MDAsIDB4MmYsIDB4YWIsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4OTgsIDB4MDAsIDB4MTQsCisJMHg4MiwgMHg1MCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGRlLCAweDk3LCAweDIyLCAweGYyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDhjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGUsIDB4OTcsIDB4OWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhiZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4OWMsIDB4MDAsIDB4MmQsIDB4MzAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5NCwgMHgwMCwgMHgyZCwgMHhmMiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGYyLCAweDk3LCAweDIzLCAweGYwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweGU2LCAweDk3LCAweDIzLCAweDkyLAorCTB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDQsIDB4MDAsIDB4YTYsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhlOCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDg5LCAweDAwLCAweDRhLCAweDk0LCAweDk4LCAweDAxLCAweDAwLAorCTB4ZTgsIDB4OTcsIDB4NjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHhiZCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhiMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDAwLCAweDJkLCAweDQyLCAweGIyLCAweGIxLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYzLAorCTB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OTcsIDB4ZDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3OCwgMHhkYSwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmNywgMHg5NywgMHgyMywgMHg0MCwKKwkweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDIwLCAweDlkLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjcsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4MDAsIDB4MmQsIDB4NDMsCisJMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMywgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGY3LCAweDk3LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDIwLCAweDlkLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmYiwgMHg5NywgMHhhMiwgMHhmMCwgMHgzOCwgMHg2YywgMHgwMCwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDYsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MjAsIDB4NDIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLAorCTB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDEsIDB4OTgsIDB4MjMsIDB4NDEsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwYywKKwkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDg2LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4YmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4ZjIsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MSwgMHgyNCwgMHhlYywgMHgwMCwgMHgwMCwKKwkweDBkLCAweDk4LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQyLAorCTB4MzgsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTgsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwZiwgMHg5OCwgMHhhMywgMHhmMCwKKwkweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGE0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMywgMHg5OCwgMHgyMiwgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAwLCAweDIwLCAweDFkLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDVmLAorCTB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTgsIDB4MjMsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgyMCwgMHgxZCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgyMCwgMHgxMiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGM0LCAweDAwLCAweGEwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjcsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NDIsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg5OCwgMHg5ZiwgMHg0MSwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDhjLCAweGQwLCAweDAxLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NDEsIDB4MjQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwOCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDJjLCAweDk4LCAweGEyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHg5OCwgMHgyZiwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwKKwkweDg5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDAwLCAweDAwLCAweGExLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4ZjgsCisJMHgzZSwgMHhlYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHgxMiwgMHhlMCwgMHhlZCwgMHgwMCwgMHgwMCwKKwkweGM4LCAweDAwLCAweDIwLCAweGFiLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweGEwLCAweDFmLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHg5OCwgMHhhMywgMHg1ZiwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGU3LCAweGMxLCAweDAxLCAweDAwLCAweGE2LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4NGMsIDB4OTgsIDB4MjIsIDB4ZjIsIDB4ODYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGI4LCAweDAwLCAweDJkLCAweDQyLCAweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQwLAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTgsIDB4MWYsIDB4NDMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg5OCwgMHhhMiwgMHg0MCwgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg0MSwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDQ1LCAweDk4LCAweDlmLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MmUsIDB4NDIsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MiwgMHg0MCwgMHg4OCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg5OCwgMHgxZiwgMHg0NCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDRmLCAweDk4LCAweGEyLCAweDQwLCAweDg5LCAweDZjLCAweDAwLCAweDAwLAorCTB4NGYsIDB4OTgsIDB4NjIsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NjIsIDB4NDEsCisJMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDYyLCAweDQxLCAweDg4LCAweGU0LCAweDAxLCAweDAwLCAweGE0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiYywgMHgwMCwgMHgyZSwgMHg0MywgMHg4NywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDU1LCAweDk4LCAweDIwLCAweDQzLCAweDg3LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4NDMsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg0MywgMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAxLCAweGUyLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMiwKKwkweDJlLCAweGIwLCAweDAxLCAweDAwLCAweDljLCAweDAwLCAweDJkLCAweGYwLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5OCwgMHhhMiwgMHgxMiwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGJjLCAweDAwLCAweDJkLCAweGYyLCAweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDY0LCAweDk4LCAweGEwLCAweGYyLAorCTB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5YywgMHgwMCwgMHgyMCwgMHg0MSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgyZCwgMHgxMiwKKwkweDg2LCAweGQwLCAweDAxLCAweDAwLCAweDY3LCAweDk4LCAweGEzLCAweDQxLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAorCTB4NjgsIDB4OTgsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyZCwgMHg0MywgMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDZiLCAweDk4LCAweDlmLCAweDQyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OTgsIDB4YTMsIDB4NDIsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg2ZSwgMHg5OCwgMHgwMCwgMHgwYSwgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDcwLCAweDk4LCAweGEwLCAweDE3LCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MTcsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTgsIDB4MjIsIDB4NDAsCisJMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwYSwgMHgwYywgMHhlYywgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDc1LCAweDk4LCAweGEwLCAweDQxLAorCTB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4Y2IsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDMsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NDEsIDB4ODcsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLAorCTB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywKKwkweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDk2LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MmEsIDB4MGMsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDNlLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA4LAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTgsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5NSwgMHg5OCwgMHgyOCwgMHg0MCwKKwkweDg3LCAweDMwLCAweDAwLCAweDAwLCAweDkwLCAweDk4LCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTcsIDB4MWQsIDB4NDYsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg5OCwgMHgyMiwgMHg1ZiwgMHgxMSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDE1LCAweDYyLCAweDMxLCAweDAwLCAweDAwLCAweDk2LCAweDk4LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyZiwgMHg0YywKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4OWIsIDB4OTgsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhlZiwgMHg5OCwgMHgwMCwgMHg0OSwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0OSwKKwkweDA2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDAzLCAweDA2LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhhMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGEyLCAweDk4LCAweGEwLCAweDU0LCAweDkzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhhMiwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGFiLCAweDk4LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDksIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI1LCAweDJlLCAweDA4LCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjIsIDB4OTgsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NywgMHgyZSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YjYsIDB4OTgsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOCwgMHgyZSwgMHgwNSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGJhLCAweDk4LCAweGEyLCAweDQxLAorCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4YjgsIDB4OTQsIDB4MjAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTQsIDB4MjAsIDB4NDEsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTgsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDZmLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDY4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YzgsIDB4OTgsIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzOSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MzUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDNmLCAweGIzLCAweDAxLCAweDAwLCAweGVlLCAweDA1LCAweDAwLCAweDQwLCAweDI1LCAweDliLCAweDAxLCAweDAwLAorCTB4NDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmIsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlZiwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweGYxLCAweDkzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGE1LCAweDNjLCAweDhiLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4NWIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsCisJMHg0NSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1OSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTMsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhlNCwgMHg5OCwgMHhhMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg5OCwgMHhhMiwgMHg1MSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGU1LCAweDk4LCAweDAwLCAweDQwLCAweDFkLCAweGIzLCAweDAwLCAweDAwLAorCTB4NTAsIDB4NDYsIDB4MDAsIDB4NDAsIDB4MWQsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4YTYsCisJMHg4OCwgMHhiMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHhhNiwgMHgzYSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweGMwLCAweDAwLCAweDlkLCAweDNiLCAweDliLCAweDAxLCAweDAwLCAweGI0LCAweDA1LCAweDAwLCAweDQwLAorCTB4MjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGQsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwYSwgMHgwMCwgMHhhNiwgMHgxNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHg4YSwKKwkweDE1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWUsCisJMHg1NywgMHhiNSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgyMCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDA2LCAweDAwLCAweDAwLCAweDRiLCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDQzLCAweDAwLCAweDRiLAorCTB4OTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgyMCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NywKKwkweDIxLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDk5LCAweDJlLCAweDBhLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4OTgsIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGE5LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OTgsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmUsIDB4OTgsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTgsIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorCTB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDg4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDgsIDB4OTksIDB4NmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTksIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4OTksIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxMywgMHg5OSwgMHgyMiwgMHg0YSwgMHg4OSwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMSwgMHg5OSwgMHgyMiwgMHg0ZiwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTEsIDB4OTksIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwgMHg5OSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LAorCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwKKwkweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4NDEsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMiwgMHg5ZiwgMHgyMiwgMHg0MCwgMHg3YiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDEsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhjNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweGM2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGEyLCAweGM4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4YTgsIDB4OWYsIDB4MDAsIDB4NGQsCisJMHg5YSwgMHhjYywgMHgwMSwgMHgwMCwgMHhiYiwgMHg5ZiwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGI5LCAweDlmLCAweGEyLCAweDQxLAorCTB4OWIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OWYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MiwgMHg0OSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGMyLCAweDlmLCAweDAwLCAweDQyLCAweGNkLCAweDkzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhjMiwgMHg5ZiwgMHgwMCwgMHg0MywgMHhjYiwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDUwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGQyLCAweDlmLCAweDAwLCAweDQwLAorCTB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDRkLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAorCTB4Y2EsIDB4OWYsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDlhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLAorCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwKKwkweDQ1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDdiLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDgsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwKKwkweDgxLCAweGM4LCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLCAweGYyLCAweDkzLCAweDAwLCAweDAwLAorCTB4NTUsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM2LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiOSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDhkLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc5LCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBhLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzZG93bmxvYWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzZG93bmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDM4YzIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5oCkBAIC0wLDAgKzEsNjg0OCBAQAorI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX1NUUklORwkiMS4yIgorI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMDozNyIKKyNkZWZpbmUgT0FTSVNfVUNPREVfSE9TVElGX0lEICAJMworCitzdGF0aWMgczMyIE9OdW1TZWN0aW9ucyA9IDB4MjsKK3N0YXRpYyB1MzIgT1NlY3Rpb25TaXplW10gPSB7CisJMHgwMDAwNDAwMCwgMHgwMDAxMDAwMCwKK307CisKK3N0YXRpYyB1MzIgT1NlY3Rpb25TdGFydFtdID0geworCTB4MDAwMDAwMDAsIDB4MDAwMDgwMDAsCit9OworCitzdGF0aWMgdTggT2FzaXNVQ29kZVsyXVs2NTUzNl0gPQoreworCXsKKwkweDE1LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwKKwkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweGEyLCAweDQwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MDksIDB4MDAsIDB4YTIsIDB4NDksIDB4ZGQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweGEyLCAweDQwLAorCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDhmLCAweDk4LCAweDE4LCAweDMxLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTgsCisJMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDk4LCAweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDQwLCAweDk4LAorCTB4ODAsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgyOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MGUsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDI5LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4ZGQsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYSwgMHgwMCwgMHgxNCwgMHhiYywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZlLCAweDAwLCAweDEzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZmQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZmYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgzMywgMHgwMCwgMHgxOCwgMHhlZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweGEyLCAweDQxLCAweDg5LCAweDUwLCAweDAwLCAweDAwLAorCTB4OTksIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGUwLCAweGIzLCAweDAxLCAweDAwLCAweDM5LCAweDAwLCAweDk4LCAweGVlLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzYiwgMHgwMCwgMHg4MCwgMHhmMywgMHhkZSwgMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDNlLCAweDAwLCAweDgzLCAweGYzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHgyZSwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLAorCTB4MjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MTgsIDB4ZWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHgwMCwgMHg5NSwgMHhlOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhlOCwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHhlYywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZWUsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY3LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDAwLCAweDAwLCAweGYwLCAweGQ2LCAweDhkLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGYwLAorCTB4ZjAsIDB4ZGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ2LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAyLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGY0LCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGY4LCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MjIsIDB4ZmEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGRlLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZDYsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGZhLAorCTB4ZDYsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHhmYiwKKwkweDdhLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGRjLCAweGIxLCAweDAxLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZGQsIDB4OTEsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4OTUsIDB4ZTgsCisJMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhlOSwgMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQyLAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg3YywgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4NSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDgwLCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4ZSwgMHgwMCwgMHgwOSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDhjLCAweDAwLCAweDA4LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweDFmLCAweGZkLAorCTB4ZjksIDB4MzMsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4OWUsIDB4ZmQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwKKwkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZkLCAweGY3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCisJMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHgwMCwgMHgwYSwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQwLCAweGZiLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGZkLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ZjksIDB4ZjMsIDB4OGYsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNywgMHg0MiwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwgMHg5NywgMHgwMCwgMHhhMiwgMHhmZiwKKwkweGY3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4ZmYsIDB4ZmIsIDB4ZWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZmMsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGJiLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ZmQsIDB4N2YsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGZkLCAweDdmLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDdmLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDlhLCAweDEzLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDlhLCAweDEzLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDI5LCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg2NywgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDdmLCAweDAwLCAweDQwLCAweDI1LCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ1LCAweDgwLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDYsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweDg4LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHg0NiwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhhNSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweGNlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDhkLCAweGYwLCAweDAxLCAweDAwLAorCTB4YzksIDB4MDAsIDB4ODIsIDB4NDEsIDB4ODksIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0NSwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDA4LCAweDgzLCAweDk4LCAweDAxLCAweDAwLAorCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmIsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDk0LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGE1LCAweGE1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4NGUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4NCwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTYsCisJMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkZiwgMHgwMCwgMHhhMiwgMHg0MSwgMHg4ZCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLAorCTB4MjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODksIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg5NCwKKwkweDhhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwKKwkweGVjLCAweDAwLCAweDA4LCAweDQxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGVkLCAweDAwLCAweDAwLCAweDk0LAorCTB4MjQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MjQsIDB4ZjUsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmMiwgMHgwMCwgMHhhMCwgMHg0NCwKKwkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDJiLCAweDQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWYsIDB4MDAsIDB4MjAsIDB4NDQsCisJMHg4OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDQyLAorCTB4ODksIDB4ZDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDAsIDB4YTAsIDB4ZmEsIDB4OGEsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHgwMCwgMHhhMywgMHg0MiwKKwkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQ1LCAweDg4LCAweDg4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OGEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MDAsIDB4OTAsIDB4NDQsCisJMHg4YSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ1LCAweDhhLCAweGE4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUwLAorCTB4OGIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDA4LCAweDgzLCAweDE0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHhmOSwgMHg5YiwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHhmYywgMHgxOSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQwLCAweDk0LCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmOSwgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDJiLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAxLCAweDlmLCAweDk0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDIsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NTEsCisJMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAxLCAweDAwLCAweDQ5LCAweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDEsIDB4YTIsIDB4NDEsIDB4OTMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDczLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc3LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4N2QsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTEsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzYiwgMHgwMSwgMHgyMCwgMHg0OCwgMHhhMSwgMHg1MSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDQ3LCAweDAxLCAweDIyLCAweDRiLAorCTB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKKwkweDdlLCAweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDAxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhhYSwgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDk3LCAweGYwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweGFhLAorCTB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQwLCAweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDIyLCAweGNjLAorCTB4ODUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYzLCAweDAxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGJhLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLAorCTB4YTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YmMsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNCwgMHgyZiwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywKKwkweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweGE5LCAweGIzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg3MywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDg2LCAweDAxLCAweDAwLCAweGRkLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OGIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI2LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjNCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNSwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgyLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ODMsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4YjgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwKKwkweGQ1LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ2LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsCisJMHg3MiwgMHgwMSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgyOCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MSwgMHg0OSwKKwkweGZkLCAweDkzLCAweDI4LCAweDAwLCAweDU1LCAweDAxLCAweDUyLCAweDRhLCAweGZkLCAweDkzLCAweDJhLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NTUsIDB4NDksIDB4ZmQsIDB4ODMsIDB4MmEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTYsIDB4NGEsCisJMHhmZCwgMHg4MywgMHgyYSwgMHgwMCwgMHg1MCwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MCwgMHgzMCwgMHgyYSwgMHgwMCwKKwkweDU1LCAweDAxLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDJhLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgyLAorCTB4ODAsIDB4MzAsIDB4MmEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MmEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4OSwgMHhiMCwgMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLAorCTB4YjMsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDkyLCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MDEsIDB4MjIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHgwMSwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MSwKKwkweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGJmLCAweGIzLCAweDAxLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4YTAsIDB4MGYsIDB4YmQsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweGI1LCAweDAxLCAweDAwLCAweDQwLCAweDE5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHgxOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmZiwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4ZmYsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHhhNCwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGFhLCAweDAxLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDEsIDB4YTIsIDB4NGMsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHgwMSwgMHgyMiwgMHhkMiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHgwMSwgMHgyMiwgMHg0MSwKKwkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGEyLCAweGUwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHg4OSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MiwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQxLCAweDQzLCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDQsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhiMSwgMHgwMSwgMHgwMCwgMHg0OCwgMHg0OSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHgwMSwgMHgwMCwgMHg1YiwKKwkweDg5LCAweDkwLCAweDAwLCAweDAwLCAweGE4LCAweDlmLCAweDAwLCAweGEwLCAweDllLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGJlLCAweDAxLCAweDIyLCAweGRlLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhiOSwgMHgwMSwgMHhhMiwgMHg0NCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MywKKwkweGJmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZjgsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGQxLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDUzLCAweDAxLCAweDAwLCAweGRlLAorCTB4YTEsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhlNSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUyLCAweDAxLCAweDAwLCAweGRmLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsCisJMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwgMHhhNSwgMHhlNywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGMxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4MDEsIDB4MjIsIDB4NDQsIDB4YzEsIDB4NTMsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwMSwgMHg4NCwgMHg0MSwgMHg4MSwgMHg0MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDUsIDB4MDEsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDAxLCAweDAwLCAweGRkLCAweGExLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywKKwkweGE3LCAweGNiLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweGUwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZGUsCisJMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDUwLCAweDAxLCAweGEyLCAweGJhLAorCTB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhlOCwgMHgwMSwgMHhhOCwgMHhiMSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGJhLCAweGIzLCAweDAxLCAweDAwLAorCTB4NmIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDIsIDB4MDAsIDB4NGQsCisJMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUzLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlYiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGY1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGY3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjksIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZjksIDB4MDEsIDB4MjIsIDB4NDAsCisJMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAyLCAweDAwLCAweGM3LCAweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDIsIDB4MDAsIDB4NDIsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVkLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmEsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAyLCAweGI4LCAweDQwLCAweDgxLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDIsIDB4YjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMiwgMHhiYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDIsIDB4YmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMiwgMHhiYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDE2LCAweDAyLCAweGJkLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMiwgMHhiZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDFhLCAweDAyLCAweGJmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDIsIDB4YzgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDFlLCAweDAyLCAweGM5LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDIsIDB4Y2EsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMiwgMHhjYiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDIsIDB4Y2MsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMiwgMHhjZCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDI4LCAweDAyLCAweGNlLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyYSwgMHgwMiwgMHhjZiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDJjLCAweDAyLCAweGYwLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDIsIDB4ZjEsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAyLCAweGYyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDIsIDB4ZjMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhmNCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MzYsIDB4MDIsIDB4ZjUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMiwgMHhmNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU2LCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDNhLCAweDAyLCAweGY3LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMiwgMHhmOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDNlLCAweDAyLCAweGY5LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ZmEsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDQyLCAweDAyLCAweGZiLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4ZmMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NiwgMHgwMiwgMHhmZCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVkLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDIsIDB4ZmUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0YSwgMHgwMiwgMHhmZiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDA2LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkYiwgMHgwMSwgMHgwMCwgMHhjNywgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY2LCAweDAyLCAweDAwLCAweDQ4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4MWEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDYzLCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDVmLCAweDAyLCAweDQ5LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NDAsIDB4MWMsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0ZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4NWYsIDB4MDIsIDB4NGEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsCisJMHg5ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkOCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGExLCAweGQwLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAorCTB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZDQsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhkNiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwKKwkweGRjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGRlLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ZGEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsCisJMHg4ZSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhlNiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LAorCTB4ZmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKKwkweGU0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGU4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZWEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsCisJMHhmNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhmNiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY4LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM3LAorCTB4YTksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDhkLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk4LCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MDAsIDB4NDYsIDB4YTMsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg5YiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhMSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDAyLCAweDIzLCAweDUwLCAweGE1LCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4MDAsIDB4NDIsCisJMHhhNSwgMHg2MywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAorCTB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5NywgMHgwMiwgMHgyMiwgMHg0NCwKKwkweGE1LCAweDUzLCAweDAwLCAweDAwLCAweDk0LCAweDAyLCAweDAwLCAweDQxLCAweGExLCAweGMxLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4MDAsIDB4ZGUsCisJMHhhMSwgMHgzMywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4ZDIsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDllLCAweDAyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4MDAsIDB4NTQsCisJMHhhNSwgMHgzMywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJkLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YWMsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDIsIDB4MDAsIDB4NDYsCisJMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LAorCTB4NDMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTksIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwKKwkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgyZSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGEzLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGMxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YmQsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhjMywgMHgwMiwgMHgwMCwgMHgwNSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGNiLCAweDAyLCAweDAwLCAweDA1LAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkMCwgMHgwMiwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwgMHhkMiwgMHgwMiwgMHgwMCwgMHg0NCwKKwkweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweGE0LCAweGU3LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ODEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzEsCisJMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgyMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDAyLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLCAweGRhLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGE0LCAweGU3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDkxLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzksIDB4ZjAsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MjIsIDB4NDEsCisJMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHg0MSwgMHhjMSwgMHhjMywgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweGRlLCAweDg1LCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweGMyLAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4OTUsIDB4ODksIDB4MDEsIDB4MDAsCisJMHhjOCwgMHgwMiwgMHgwMCwgMHhjYSwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGUyLCAweDAyLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsCisJMHhhOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGUxLCAweDAyLCAweDAwLCAweGQ0LCAweGUxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhjYywKKwkweDg1LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmEsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZjksIDB4MDIsIDB4YTIsIDB4ZjIsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjYywgMHg4NSwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MSwKKwkweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDBhLCAweDAzLCAweDIyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTIsIDB4MDMsIDB4MjIsIDB4NDgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDMsIDB4MjIsIDB4NGMsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMywgMHgyMiwgMHg1MCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE3LCAweDAzLCAweDIyLCAweDU0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDE5LCAweDAzLCAweDIyLCAweDU4LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MDMsIDB4MjIsIDB4NWMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywKKwkweDA5LCAweGIwLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweGNhLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhmMywgMHg4MywgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMywgMHhhMiwgMHg0MiwgMHgwNSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDIyLCAweGNhLAorCTB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4NDUsIDB4ZjMsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgyMCwgMHg0MywgMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHg4MCwgMHhjYSwKKwkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDIyLCAweDAxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4YmMsCisJMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHhiMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGRkLCAweDlmLCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGNhLAorCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4YTIsIDB4NDAsIDB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYiwgMHgwMywgMHhhOCwgMHhiMSwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDFhLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGNiLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDJkLCAweDAzLCAweDkxLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgyYiwgMHgwMywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDAzLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgzZCwgMHgwMywgMHg5MSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4M2IsIDB4MDMsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2QsIDB4MDMsIDB4NTUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDE0LCAweDJmLCAweDQwLCAweDk5LCAweGIzLCAweDAxLCAweDAwLAorCTB4NTcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweDk4LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYyLCAweDg4LCAweGU0LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDUzLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDMsIDB4MWYsIDB4OTEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDgsIDB4ODQsIDB4ODQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDhmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NWEsIDB4MDMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NDcsCisJMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMywgMHgwMCwgMHg1YywgMHg4ZiwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweGUwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDE1LCAweDJkLCAweDQwLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmQsIDB4ZjAsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LCAweDgyLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg4MiwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg2NSwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MywgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHg0MywgMHg4NiwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE2LCAweDQxLCAweDg1LCAweDUwLCAweDAxLCAweDAwLCAweDcwLCAweDAzLCAweDAwLCAweDQxLAorCTB4ODMsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZiwgMHg0NiwKKwkweDg0LCAweDk0LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQyLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LCAweDgwLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgwMywgMHhhMCwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDgzLCAweDAzLCAweDAwLCAweDQxLCAweDgyLCAweGU4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAorCTB4OGUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MzksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MTUsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MzksIDB4MDAsIDB4NDAsIDB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDk1LCAweDAzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDk3LCAweDAzLCAweDIyLCAweDVhLAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg5OCwgMHgwMywgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDkwLCAweDAzLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDE1LCAweDJkLCAweDQwLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmQsIDB4ZjAsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDkwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweDQ4LCAweDkwLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAzLCAweDIyLCAweDQwLAorCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDhkLCAweGMwLCAweDAxLCAweDAwLCAweGI1LCAweDAzLCAweDIyLCAweDVmLCAweDhkLCAweDZjLCAweDAwLCAweDAwLAorCTB4YTcsIDB4MDMsIDB4YTIsIDB4NDEsIDB4OTMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHg0NywgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGVkLCAweDlmLCAweDAwLCAweDQ3LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDcsIDB4OGUsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDUwLCAweGIzLCAweDAxLCAweDAwLCAweGJiLCAweDAzLCAweDIwLCAweDE4LCAweDg5LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg1NSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGJlLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGE2LAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg1NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDUwLCAweGQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDRmLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NGUsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4NmUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4MiwgMHgwMywgMHgwMCwgMHg0MiwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM3LCAweDAzLCAweDIyLCAweGE3LAorCTB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGM4LCAweDE0LCAweDJlLCAweGJiLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhhMCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGUxLCAweDlmLCAweDAwLCAweGNhLAorCTB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMywgMHgyMiwgMHg0MiwKKwkweDc1LCAweDZmLCAweDAwLCAweDAwLCAweGQ4LCAweDAzLCAweDIyLCAweDQxLCAweDc1LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4MDMsIDB4MWUsIDB4Y2EsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MDMsIDB4MWYsIDB4Y2EsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDlmLCAweDAwLCAweDQyLCAweDc1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4Y2QsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4NDEsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDc1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGE2LCAweGM2LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHgwMSwgMHgwMCwgMHg0YywKKwkweDkzLCAweDMwLCAweDAxLCAweDAwLCAweGVjLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU0LCAweDk1LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDE0LCAweDJlLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAorCTB4YTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDMsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHhkYSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDg5LCAweGYwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4OCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweDE1LCAweDA0LCAweDAwLCAweDQzLAorCTB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGE1LCAweGMzLCAweDAxLCAweDAwLCAweDBiLCAweDA0LCAweDIyLCAweDQ0LCAweDg5LCAweDUwLCAweDAwLCAweDAwLAorCTB4MGIsIDB4MDQsIDB4MjIsIDB4NDQsIDB4OGIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4MDMsIDB4YTIsIDB4NTAsCisJMHhhNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhhNSwgMHhlMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweGUxLCAweDlmLCAweDAwLCAweGJiLAorCTB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MTQsIDB4MmUsIDB4ZDIsIDB4OTUsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDQsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDQsIDB4YTIsIDB4ZjIsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg5NCwgMHhiNCwgMHg4YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ5LAorCTB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NCwKKwkweGI0LCAweGIzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweDI3LCAweGIxLCAweDAxLCAweDAwLCAweDA2LCAweGMwLCAweDAwLCAweDQwLCAweDJkLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHhjNCwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODIsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwNCwgMHg4MCwgMHg5NCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHgyZCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDMxLCAweDA0LCAweDAwLCAweDEyLAorCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg0OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0YiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDRkLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NGYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NTAsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDU0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDU2LCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NTcsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg1OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg1YiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDVkLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4YzAsIDB4NWUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjAsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDY0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDY1LCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjcsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg2OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg2YiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDZjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4ODAsIDB4NmUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NzAsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDczLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDc1LCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NzcsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg3OSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg3YSwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDdjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4NDAsIDB4N2UsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU5LCAweDA0LCAweDAwLCAweDEyLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4NCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDg2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDg4LCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4ZSwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDkwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTQsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDlhLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OWMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGFhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGFjLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YWUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiMCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiMiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGI0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGJjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGJlLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MiwgMHgwNCwgMHg4NSwgMHg0MSwKKwkweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDg3LCAweDA0LCAweDg1LCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4NjAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweGYwLCAweDRiLCAweDgyLCAweDg5LCAweDAxLCAweDAwLCAweDkzLCAweDA0LCAweDYwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHhmMCwgMHhhNiwgMHg4MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5NiwgMHgwNCwgMHg2MCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLCAweDg0LCAweDg5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg4MCwgMHg0YiwgMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweGE2LAorCTB4OTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4OTQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHhjYSwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4YTYsIDB4MDQsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZCwgMHgwNCwgMHgyMiwgMHgyMCwgMHg4NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFmLCAweDgwLCAweDg2LCAweGIzLCAweDAxLCAweDAwLCAweGIwLCAweDA0LCAweDIyLCAweDRmLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGIxLCAweDA0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YjgsIDB4MDQsIDB4MjIsIDB4NGIsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGI2LCAweDA0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjMSwgMHgwNCwgMHhhOCwgMHhiMSwgMHg1MiwgMHgzMywgMHgwMCwgMHgwMCwgMHhjNiwgMHgwNCwgMHgyMiwgMHg0YiwKKwkweDUzLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4YzQsIDB4MDQsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4YzEsIDB4MDQsIDB4YTIsIDB4NDEsCisJMHg5OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHg3NywgMHhmZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5OCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDk4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwNCwgMHgwMCwgMHg0YywKKwkweDg4LCAweDk0LCAweDAwLCAweDAwLCAweGQ2LCAweDA0LCAweDQ3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4MDQsIDB4MjIsIDB4MjAsIDB4ODcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxZiwgMHg4MCwgMHg4NiwgMHhiMywgMHgwMSwgMHgwMCwgMHhlMCwgMHgwNCwgMHgyMiwgMHg0ZiwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlMSwgMHgwNCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGU4LCAweDA0LCAweDIyLCAweDRhLCAweDg5LCAweDdjLCAweDAwLCAweDAwLCAweGU2LCAweDA0LCAweDIyLCAweDRmLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNiwgMHgwNCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDIwLCAweDg3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDk5LCAweGIwLCAweDAxLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjEsIDB4MDQsIDB4YTgsIDB4YjEsIDB4NTIsIDB4MzMsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDQsIDB4MjIsIDB4NGEsCisJMHg1MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDA0LCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweGYxLCAweDA0LCAweGEyLCAweDQxLAorCTB4OTksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NGYsIDB4NzcsIDB4ZmQsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2IsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNSwgMHhhOCwgMHhiMSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwNSwgMHgxZCwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDUsIDB4YTIsIDB4NDAsCisJMHg4NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg5ZiwgMHg5YywgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQwLCAweDg4LCAweDg4LCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDUwLAorCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODgsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwNSwgMHg1MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDgsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4MDUsCisJMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDFiLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQxLAorCTB4ZTEsIDB4YzEsIDB4MWEsIDB4MDAsIDB4NzgsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MWIsIDB4MDAsCisJMHgxOSwgMHgwNSwgMHgyMiwgMHg1NCwgMHg4MSwgMHg3YywgMHgxYSwgMHgwMCwgMHgxNCwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDFhLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGIzLCAweDY3LCAweGRmLCAweDFiLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MWIsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgxYiwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDA1LCAweDBmLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLAorCTB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NTAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwgMHgxZiwgMHgwNSwgMHg5OSwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg5LCAweGQwLCAweDAxLCAweDAwLAorCTB4MjEsIDB4MDUsIDB4OWIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNSwgMHgxZiwgMHg0NCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDQwLCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDgsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwNSwgMHgwMCwgMHg1OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDg2LCAweGY0LCAweDAxLCAweDAwLAorCTB4NmYsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MjYsIDB4MDUsCisJMHg0NywgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDQ0LCAweGYwLCAweDQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHhlMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0YywgMHgwMSwgMHgwMCwgMHgwNywKKwkweDkxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDk3LCAweGVjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDUsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwNSwgMHhhMiwgMHg0MCwKKwkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAorCTB4NDUsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLAorCTB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQ4LAorCTB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDUwLCAweDA1LCAweGEyLCAweDQxLCAweDhmLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ZGEsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhkYSwKKwkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4N2EsIDB4MDUsIDB4MjIsIDB4NDUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDE1LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDUsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3ZCwgMHgwNSwgMHgyMiwgMHgyMCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDFmLCAweDAwLAorCTB4N2QsIDB4MDUsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MWUsIDB4MDAsIDB4N2EsIDB4MDUsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2NywgMHg5MywgMHgxZiwgMHgwMCwKKwkweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDFlLCAweDAwLCAweDU0LCAweDE2LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MWYsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKKwkweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4NDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NGEsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDk1LCAweGMwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDUsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweGUxLCAweDlmLCAweDAwLCAweGJiLAorCTB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI4LCAweDA1LCAweDIyLCAweDQ1LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGUwLCAweDE1LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhNywgMHgwNSwgMHhhOCwgMHhiYiwgMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweGFhLCAweDA1LCAweGEyLCAweDQxLAorCTB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTksIDB4MDUsIDB4YTIsIDB4ZjIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwNSwgMHhhMiwgMHg0MCwKKwkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAorCTB4YjEsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI4LCAweDA1LCAweGEyLCAweGZhLAorCTB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHgwNSwgMHhhMiwgMHhmYSwgMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwKKwkweGIzLCAweDQzLCAweDAxLCAweDAwLCAweGJiLCAweDA1LCAweDIyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLAorCTB4YjgsIDB4MDUsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHg2NywgMHg5MywgMHgyMSwgMHgwMCwgMHhkZiwgMHg5ZiwgMHgwMCwgMHg1OCwgMHg2NywgMHg5MywgMHgyMCwgMHgwMCwKKwkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDIxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLAorCTB4NDksIDB4MzEsIDB4MjEsIDB4MDAsIDB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MjEsIDB4MDAsCisJMHg1YywgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwKKwkweDhlLCAweGIwLCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4YjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YzksIDB4MDUsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhmYywgMHgxNSwgMHgyMCwgMHgyMCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDI0LCAweDAwLCAweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDI1LCAweDAwLAorCTB4Y2UsIDB4MDUsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MjQsIDB4MDAsIDB4Y2IsIDB4MDUsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2NywgMHg5MywgMHgyNSwgMHgwMCwKKwkweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDI0LCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MjUsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MjUsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMywgMHgwNSwgMHgyMiwgMHg1MCwKKwkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGY4LCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYSwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDRhLCAweGI0LCAweDhiLCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhiNCwgMHhmNywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlOSwgMHgwNSwgMHgyMiwgMHg1MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweGVhLCAweDA1LCAweDAwLCAweDUwLCAweGI1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDMxLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDMzLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MzUsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgzNywgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzOCwgMHgzOSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQxLCAweDQyLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NDMsIDB4NDQsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDUsIDB4NDYsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NywgMHg0OCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDRhLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmYywgMHgwNSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNiwgMHgyZSwgMHgwNiwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDUsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDA2LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNiwgMHgyZCwgMHgwNiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDYsIDB4MjIsIDB4NzAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHg2NywgMHgwMCwgMHhhNiwgMHhlMCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgyMywgMHgwMCwgMHg3MCwKKwkweGUxLCAweDlhLCAweDAxLCAweDAwLCAweGNkLCAweGVmLCAweDAwLCAweGE2LCAweGUyLCAweGIyLCAweDAxLCAweDAwLAorCTB4ODksIDB4YWIsIDB4MDAsIDB4NzEsIDB4ZTMsIDB4OWEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTgsIDB4MDAsIDB4YTYsCisJMHhlNCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmZSwgMHhkYywgMHgwMCwgMHg3MiwgMHhlNSwgMHg5YSwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDEwLCAweDAwLCAweGE2LCAweGU2LCAweGIyLCAweDAxLCAweDAwLCAweDc2LCAweDU0LCAweDAwLCAweDczLAorCTB4ZTcsIDB4OWEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4YzMsIDB4MDAsIDB4YTYsIDB4ZTgsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHhlMSwgMHgwMCwgMHg3NCwgMHhlOSwgMHg5YSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0YSwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDE2LCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGZjLCAweDE2LCAweDJhLCAweDQ3LAorCTB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTgsIDB4ZTUsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGEzLCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDNkLCAweDQ2LCAweDhkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCisJMHg0MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDA2LCAweGEyLCAweDQxLCAweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCTB4ZWIsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhlZiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKKwkweGYxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGYzLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDRiLCAweDA2LCAweGEwLCAweDUwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDBkLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsCisJMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsCisJMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4OTksIDB4ODQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NiwgMHhhNCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDQwLCAweGE0LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg0MSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDA1LCAweDAwLCAweDAwLCAweDc1LCAweDg5LCAweGU0LCAweDAxLCAweDAwLCAweDFiLCAweDAwLCAweDAwLCAweDc1LAorCTB4ODUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHg1NSwgMHgwNiwgMHhhMywgMHg1MywgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4YiwgMHhhNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDA2LCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NWEsIDB4MDYsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkweDg5LCAweGE0LCAweDAxLCAweDAwLCAweDY0LCAweDA2LCAweDAwLCAweDc4LCAweDg5LCAweGE0LCAweDAwLCAweDAwLAorCTB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NTcsIDB4MDYsIDB4YWEsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweDg5LCAweDg0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAorCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKKwkweDhiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDZiLCAweDA2LCAweGEzLCAweDUzLAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODIsIDB4NWEsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg3OSwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4NzAsIDB4MDYsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDksIDB4NmUsIDB4MDAsIDB4YTYsCisJMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHhlYiwgMHgwMCwgMHg0MiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDNiLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDYsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4ZiwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYywgMHhiYywgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NjIsIDB4Y2EsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4YzEsIDB4MDAsIDB4NDIsCisJMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGYzLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlZiwgMHhmNiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGVlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweGVkLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZWEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDA2LCAweDJhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc1LAorCTB4ZTEsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ZTMsIDB4YzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHhlNSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwKKwkweGU3LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweGU5LCAweGMyLCAweDAxLCAweDAwLAorCTB4MmIsIDB4MDYsIDB4ODEsIDB4NDEsIDB4OGQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDE1LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjksIDB4MDYsIDB4MjIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwNiwgMHhhMiwgMHg0MCwKKwkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDVlLCAweDE2LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4N2MsIDB4MTYsIDB4MjAsIDB4ZjYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgzMSwgMHhiMywgMHgwMSwgMHgwMCwgMHg5ZCwgMHgwNiwgMHgyMiwgMHg0ZiwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDlmLCAweDA2LCAweDIyLCAweDQwLAorCTB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MDAsIDB4NTQsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHhhMSwgMHgwNiwgMHgyMiwgMHg0MiwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGEzLCAweDA2LCAweDIyLCAweDQxLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDYsIDB4MjIsIDB4NTEsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjIsIDB4MDYsIDB4YTIsIDB4NDAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0OCwKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NGIsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4YjUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YjYsIDB4MDYsIDB4MjIsIDB4NDAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDYsIDB4MDAsIDB4NTQsCisJMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAwLCAweDAwLCAweGZlLCAweDdmLCAweGQ5LCAweDAxLCAweDAwLCAweGJhLCAweDA2LCAweGE2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGU3LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM0LCAweDA2LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlOSwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MGEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDBhLCAweDA3LCAweDIyLCAweDAxLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGQ5LCAweDA2LCAweGEzLCAweDA3LCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4MDYsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDcsCisJMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlYywgMHgwNiwgMHgyMiwgMHg0MCwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGU2LCAweDA2LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDA3LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDA2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU4LCAweDA2LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDYsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4M2EsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHgzYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweGZhLCAweDA2LCAweDIzLCAweDFhLAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MDMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgyMywgMHgwNywgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxZCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGYwLCAweDAwLCAweDAwLCAweGYyLCAweDMwLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MzEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweDAyLCAweDA3LCAweDIyLCAweDFhLAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDE0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MTQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDIzLCAweDA3LCAweDAwLCAweDFhLAorCTB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDBmLCAweDA3LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDcsIDB4NjAsIDB4MDcsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTIsCisJMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZCwgMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDE2LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDcsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNywgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDA3LCAweDIyLCAweDBkLCAweDI0LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDcsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyMywgMHgwNywgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MWYsIDB4MDcsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDA3LCAweGEyLCAweDBkLCAweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDJlLCAweDA3LCAweDIyLCAweDQ2LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDMzLCAweDA3LCAweDFmLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZDMsIDB4MDYsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsCisJMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhkMywgMHgwNiwgMHgyMywgMHgwNywgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzYywgMHgwNywgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweGQzLCAweDA2LCAweDAwLCAweDAzLCAweDBjLCAweGIwLCAweDAwLCAweDAwLCAweGQzLCAweDA2LCAweDAwLCAweDBkLAorCTB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDcsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyZCwgMHgxZCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDA5LCAweDAwLCAweDAwLCAweGYzLCAweDM4LCAweDg4LCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDIwLCAweDUwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4NDAsIDB4M2YsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MWQsCisJMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDUyLCAweDA3LCAweGEwLCAweGZjLCAweDkwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDcsIDB4YTIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDE4LCAweDkwLCAweGIwLCAweDAxLCAweDAwLCAweDVjLCAweDA3LCAweGEwLCAweGZjLAorCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg1YSwgMHgwNywgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MCwgMHhiMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgyZCwgMHgwMCwKKwkweDIyLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGM5LCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorCTB4NDgsIDB4YzEsIDB4MmQsIDB4MDAsIDB4NjQsIDB4MDcsIDB4NDMsIDB4MzAsIDB4M2QsIDB4MDcsIDB4MmMsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwgMHg4NSwgMHhiMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MSwKKwkweDNkLCAweGMzLCAweDJkLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQyLCAweGVjLCAweGIxLCAweDJkLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmUsIDB4MWQsCisJMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgxOCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDZlLCAweDA3LCAweGEwLCAweDQxLAorCTB4ODAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZSwgMHgzMCwKKwkweDgxLCAweDg0LCAweDAxLCAweDAwLCAweDcyLCAweDA3LCAweDkwLCAweDQwLCAweDkyLCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCisJMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDE5LCAweGU4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLAorCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDcsIDB4YTAsIDB4MTksIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyZiwgMHgxZSwKKwkweDMyLCAweGMwLCAweDAxLCAweDAwLCAweDdkLCAweDA3LCAweGEyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLAorCTB4N2MsIDB4MDcsIDB4YTAsIDB4MWMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHgzOCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDFlLAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MWEsIDB4OTgsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwNywgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ODksIDB4MDcsIDB4MjIsIDB4ZjIsCisJMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg2LCAweDA3LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg5MSwgMHgwNywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5YiwgMHgwNywgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4OWIsIDB4MDcsIDB4MjIsIDB4ZjIsCisJMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk4LCAweDA3LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYiwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YTEsIDB4MDcsIDB4OTAsIDB4ZjIsCisJMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE0LAorCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4YWMsIDB4MDcsIDB4MjIsIDB4ZjIsIDB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGE5LCAweDA3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHgwNywgMHgyMiwgMHg0MCwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNCwgMHgwNywgMHhhMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4YjMsIDB4MDcsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHhlNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDNmLCAweGMzLCAweDAxLCAweDAwLCAweGU2LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDcsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHgzZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNywgMHgyMiwgMHg0MCwKKwkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGJhLCAweDA3LCAweDIwLCAweDFlLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OWYsIDB4MDAsIDB4MWUsCisJMHgyNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZiwgMHgwNywgMHgyMiwgMHgwOCwgMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJjLCAweDA3LCAweGEyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDA0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGU4LCAweDlmLCAweDAwLCAweDFmLAorCTB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhlMiwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDA0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4ZTYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4MDcsIDB4YTIsIDB4NDEsCisJMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHhjZiwgMHgwNywgMHgwMCwgMHgxZSwgMHgzZSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlMiwgMHg5ZiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY3LCAweDA3LCAweDAwLCAweGJjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLAorCX0sCisJeworCTB4MzEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDgwLCAweDgxLCAweDgwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ODcsIDB4YTIsIDB4NDAsIDB4OTEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg5MCwgMHhiMywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyZSwgMHhhMiwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGY0LCAweDg5LCAweDAxLCAweDAwLAorCTB4OTAsIDB4OTUsIDB4MmEsIDB4YzgsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDgwLCAweDExLCAweDgxLAorCTB4OTgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgxYSwgMHg4MCwgMHgxMSwgMHg4MiwgMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBlLCAweDg3LCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLAorCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODAsIDB4YTIsIDB4NDIsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgwLCAweDExLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDIyLCAweDgwLCAweDUxLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4MTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MCwgMHg1MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MCwgMHgwMCwgMHg0OCwKKwkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDI3LCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4ODAsIDB4YTIsIDB4NTMsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NTMsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4MCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDI5LCAweDgwLCAweGEyLCAweDUyLCAweDA3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLCAweDUyLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwNSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwNSwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4NGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhkZSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAorCTB4OWIsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NSwgMHgyMCwgMHg0NCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4ZWUsCisJMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDgwLCAweGEyLCAweDQzLCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4YTYsIDB4MzYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgxMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDA5LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg4OCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGEyLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4OWEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGRkLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDI3LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgyZiwgMHg4MSwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGU1LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg0MSwgMHhlMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDE5LCAweDA1LCAweDIyLCAweDU0LCAweDgxLCAweDdjLCAweDAwLCAweDAwLAorCTB4NmMsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YjQsCisJMHg2OSwgMHhkZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDE4LCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDdkLCAweDgwLCAweDIyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2EsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg1OCwKKwkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDU0LCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDU4LAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4ZmEsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzEsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OTYsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5NiwgMHg4MCwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDkzLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NTgsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGQwLCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MywgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQ3LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDcyLCAweDAxLCAweDAwLCAweDQxLAorCTB4ODEsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTEsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHg1MiwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NSwgMHg0OSwKKwkweGZkLCAweDgzLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDU2LCAweDRhLCAweGZkLCAweDgzLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4OTEsIDB4ODEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDU1LCAweDAxLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4YjQsIDB4ODAsIDB4NDMsIDB4MzAsIDB4M2QsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWUsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MSwgMHgzZCwgMHhjMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDQyLCAweGVjLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweGQwLCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweGJmLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweGM3LCAweDgwLCAweGEyLCAweDQyLCAweDk3LCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4YTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgwNCwgMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDE1LCAweDNmLCAweDQyLCAweDk3LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwKKwkweDk5LCAweGNiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweGYzLCAweDgzLCAweDAxLCAweDAwLAorCTB4ZDEsIDB4ODAsIDB4YTIsIDB4NDIsIDB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsCisJMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4ODAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwMiwgMHgwMCwgMHgyMCwgMHg0MiwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDA1LCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNiLAorCTB4ZGIsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4MCwgMHhhOCwgMHhiMSwKKwkweDhjLCAweDMzLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZTAsIDB4ODAsIDB4YTgsIDB4YjEsIDB4OTQsIDB4MzMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4ODAsIDB4MTQsIDB4YzYsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MywgMHhmNCwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDgyLCAweDIyLCAweDRmLCAweDgzLCAweDA0LCAweDAwLCAweDAwLCAweGMyLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4YzYsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NywgMHhhMywgMHgwMSwgMHgwMCwgMHhjMiwgMHg4MCwgMHgxZiwgMHg1YywKKwkweDk3LCAweDUzLCAweDAwLCAweDAwLCAweDU4LCAweDgyLCAweDFlLCAweGM2LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4NDMsIDB4ODEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgzOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI0LCAweDgyLCAweDAwLCAweGNhLAorCTB4NjMsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NjEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0OCwgMHg4MSwgMHgwMCwgMHg0ZCwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4MSwgMHgwMCwgMHg0ZSwKKwkweDYxLCAweGIxLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NDgsIDB4ODEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg4MSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDcxLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLCAweGRmLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwKKwkweDliLCAweGIzLCAweDAwLCAweDAwLCAweDdiLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4N2YsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDg5LCAweDgxLCAweDAwLCAweDQwLAorCTB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4YSwgMHg4MSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk3LCAweDgyLCAweDAwLCAweGJiLCAweGFiLCAweGIzLCAweDAwLCAweDAwLAorCTB4MjUsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDI2LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHg3NywgMHhiMywgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHgwMCwgMHg0ZCwKKwkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweDAwLCAweDRlLCAweDYxLCAweGIxLCAweDAwLCAweDAwLAorCTB4NDEsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODEsIDB4MDAsIDB4NGMsCisJMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI0LCAweDgxLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4NGQsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg3MCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDFjLCAweDgxLCAweDIyLCAweDQyLCAweDhmLCAweDZmLCAweDAwLCAweDAwLAorCTB4MWUsIDB4ODEsIDB4MjIsIDB4NDEsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODEsIDB4MWUsIDB4Y2EsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MSwgMHgxZiwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQyLAorCTB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2QsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHg0MSwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweGNmLCAweGIxLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQwLCAweDhmLCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDgyLCAweDAwLCAweDQwLCAweDhmLCAweGIzLCAweDAwLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLAorCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MmYsIDB4OWMsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzYiwgMHg4MSwgMHgwMCwgMHg0MCwgMHgzOSwgMHgzMywgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyZiwgMHg5YiwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDNiLCAweDgxLCAweDAwLCAweDQwLCAweDM3LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4OWEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2IsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHgzNSwgMHgzMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZiwgMHg5OSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNiLCAweDgxLCAweDAwLCAweDQwLCAweDMzLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGFlLAorCTB4NDcsIDB4YzksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDAwLCAweDQwLCAweGUxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YWUsCisJMHg2MywgMHhkZCwgMHgwMSwgMHgwMCwgMHgzNiwgMHg4MSwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDgxLCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHgzOSwgMHg4MSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDU4LCAweDY5LCAweDkzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhhMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4ZTEsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHg0MSwgMHg4MSwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDQ1LCAweDgxLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDgyLCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg2MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRiLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDUwLCAweDk1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDUzLCAweDgxLCAweDAwLCAweGJiLAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MmYsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1NSwgMHg4MSwgMHgyMiwgMHg0MCwgMHg5NSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHg2MCwgMHg0MCwKKwkweDk1LCAweDgzLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4NTYsIDB4ODEsIDB4MzYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NywgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDU5LCAweDgxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1YiwgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweDQxLCAweDQzLCAweDUxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDgsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4NTYsIDB4ODEsIDB4MDAsIDB4NDEsCisJMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg4MSwgMHhhMiwgMHg0MiwgMHg2NywgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDY3LCAweGIzLCAweDAxLCAweDAwLCAweDYzLCAweDgxLCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHhjYSwKKwkweDY5LCAweDk3LCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NjgsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MWEsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgyMCwgMHg0MywgMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDgyLCAweDgwLCAweGNhLCAweDY3LCAweDMzLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweDQwLAorCTB4NjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NmYsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCisJMHg4NSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MCwgMHgyMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHg3NywgMHg4MSwgMHhhMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAorCTB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjMywgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YSwgMHg4MSwgMHgyMiwgMHg1YiwKKwkweDk1LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZmQsIDB4MDAsIDB4Y2EsCisJMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMSwgMHgwMCwgMHhjYSwgMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLAorCTB4YzUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4NmYsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweGM3LCAweGIxLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweDVmLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAorCTB4MGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjNywgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLAorCTB4Y2IsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4Y2QsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0MiwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDk4LCAweDE0LCAweDAwLCAweDQwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDhmLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTEsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHg4MSwgMHg5ZiwgMHg4NSwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDgzLCAweDg0LCAweDAxLCAweDAwLAorCTB4YzgsIDB4ODEsIDB4MjIsIDB4MzAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTIsIDB4ODEsIDB4YTIsIDB4NGYsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAyLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODQsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAweDQxLCAweDg2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHhjNCwgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxYywgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhhNSwgMHg4MSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAorCTB4YmEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDEsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwYywgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGFkLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwYywgMHgwMCwgMHg0MywKKwkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGJhLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQxLCAweDgyLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDQxLAorCTB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGI4LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDEzLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLCAweGMzLCAweDgxLCAweDIyLCAweDQzLAorCTB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhjMCwgMHg4MSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZGUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGM1LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgzLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCisJMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhjMiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4ODMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YzIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGQ3LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkYSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMywgMHgwMCwgMHg0MSwKKwkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweGUxLCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhjOCwgMHgxNCwgMHgyZSwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4MSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZjMsIDB4ODEsIDB4MjIsIDB4NDMsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODIsIDB4MjIsIDB4NDQsCisJMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBhLCAweDgyLCAweDIyLCAweDRhLAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhlZSwgMHg4MSwgMHgyMiwgMHg0ZCwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweGYwLCAweDgxLCAweDIyLCAweDRmLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjIsIDB4ODEsIDB4MjIsIDB4NGUsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBhLCAweDgyLCAweDIyLCAweDQyLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGZkLCAweDgxLCAweDIyLCAweDQ1LCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODEsIDB4MjIsIDB4NDQsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MiwgMHgyMiwgMHg0MywKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MGEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MjIsIDB4NDIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHg4MiwgMHgyMiwgMHg0YiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsIDB4YTAsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MCwgMHgwMCwgMHhjYSwKKwkweGE3LCAweDMzLCAweDAxLCAweDAwLCAweDM2LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODIsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDE2LCAweDgyLCAweDlmLCAweDg1LCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODIsIDB4MTQsIDB4ZjcsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4MiwgMHhhMiwgMHg0OSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDFlLCAweDgyLCAweDE1LCAweGY4LCAweDgxLCAweDE0LCAweDAwLCAweDAwLAorCTB4MWUsIDB4ODIsIDB4YTIsIDB4NGEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgyMCwgMHg4MiwgMHhhMiwgMHhjOCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZWYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg4MiwgMHg0MiwgMHg0MCwgMHhmMSwgMHgzMywgMHgwMCwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDY4LCAweDk3LCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGJiLCAweDZiLCAweGIzLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4YmIsIDB4YjEsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDM1LCAweDgyLCAweGEyLCAweDU0LAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzYywgMHg4MiwgMHhhMiwgMHgwNiwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MmUsIDB4MDYsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKKwkweDQyLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MmQsIDB4MDYsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKKwkweDRiLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGY5LCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDgyLCAweDIyLCAweDcwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MiwKKwkweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDYyLCAweDgyLCAweDIyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODIsIDB4MjIsIDB4NDgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODIsIDB4MjIsIDB4NGMsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4MiwgMHgyMiwgMHg1MCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDZmLCAweDgyLCAweDIyLCAweDU0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDcxLCAweDgyLCAweDIyLCAweDU4LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ODIsIDB4MjIsIDB4NWMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywKKwkweDA5LCAweGIwLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhmMywgMHg4MywgMHgwMSwgMHgwMCwgMHg2OCwgMHg4MiwgMHhhMiwgMHg0MiwgMHgwNSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweGNhLAorCTB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDYsIDB4ZjMsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgyMCwgMHg0MywgMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHg4MCwgMHhjYSwKKwkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDIyLCAweDAxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4YmMsCisJMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHhiMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGNmLCAweGIzLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGNhLAorCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4YTIsIDB4NDAsIDB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3MywgMHg4MiwgMHhhOCwgMHhiMSwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDcyLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhjYiwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDc5LCAweDgyLCAweGEyLCAweDQxLAorCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4MiwgMHg5MSwgMHg4MiwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhhLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ODIsIDB4ODIsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4NCwgMHg4MiwgMHg1NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwKKwkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg4OSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4OTQsIDB4ODIsIDB4OTEsIDB4ODEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDkyLCAweDgyLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OTQsIDB4ODIsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgxNCwgMHgyZiwgMHg0MCwKKwkweDk5LCAweGIzLCAweDAxLCAweDAwLCAweDU3LCAweDAxLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLAorCTB4YTAsIDB4OTQsIDB4MmUsIDB4NDMsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDUwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGFjLCAweDk0LCAweDJlLCAweDQzLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5ZiwgMHg4MiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweDQwLCAweGEzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU5LCAweDQxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4NDEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg0MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDQyLCAweDgxLCAweDZjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ODIsIDB4YTAsIDB4NDIsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhNSwgMHg4MiwgMHgwMCwgMHg1MCwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweGRkLCAweDgyLCAweGEyLCAweDQxLCAweDAxLCAweDdkLCAweDAwLCAweDAwLCAweGI1LCAweDgyLCAweDIyLCAweDU4LAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiMCwgMHg4MiwgMHhhOCwgMHhiMSwgMHg5YywgMHgzMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDBlLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4YjUsIDB4ODIsIDB4MzMsIDB4YzQsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODIsIDB4YTEsIDB4YWQsCisJMHg5ZCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgxMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEzLCAweDRlLCAweDVhLCAweDgzLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODIsIDB4MjIsIDB4YWIsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHhiZSwgMHg4MiwgMHhhMiwgMHg0MCwgMHgwMSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg4MiwgMHgyMiwgMHg1ZiwKKwkweDU3LCAweDdkLCAweDAwLCAweDAwLCAweDM2LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YzAsIDB4ODIsIDB4MjIsIDB4NWUsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OTksIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNSwgMHg4MiwgMHgyMiwgMHg1NCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDc0LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGMwLCAweDgyLCAweGE4LCAweGIxLAorCTB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODQsIDB4YTIsIDB4NWYsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjYSwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNywgMHg4MiwgMHhhMiwgMHg1ZiwKKwkweDU5LCAweDI3LCAweDAwLCAweDAwLCAweGM5LCAweDgyLCAweGEyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4ZDAsIDB4ODIsIDB4YTIsIDB4NWUsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODIsIDB4MjIsIDB4NWMsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhkYiwgMHg4MiwgMHgzNywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGNhLCAweDgyLCAweGE4LCAweGIxLAorCTB4MzYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjYywgMHg4MiwgMHhhOCwgMHhiMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDg4LCAweDAxLCAweDAwLCAweGI5LCAweDg0LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZGIsIDB4ODIsIDB4MzQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkMSwgMHg4MiwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGQ4LCAweDgyLCAweDUyLCAweDIxLCAweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQxLAorCTB4MmYsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHg4MywgMHgwMCwgMHgzNCwKKwkweDEzLCAweDg0LCAweDAwLCAweDAwLCAweGZmLCAweDNmLCAweDE0LCAweDA5LCAweDAwLCAweDhjLCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODMsIDB4MDAsIDB4NDMsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4MiwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDEzLCAweDRlLCAweDVhLCAweDkzLCAweDAwLCAweDAwLCAweDBlLCAweDg3LCAweGEyLCAweDQ4LAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YWMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhlMywgMHg4MiwgMHgyMiwgMHg1YSwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGUwLCAweDgyLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4MTEsIDB4YzksIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODIsIDB4YTIsIDB4NDAsCisJMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHgyMiwgMHg0NCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGU1LCAweDgyLCAweDQyLCAweGE1LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGU4LCAweDgyLCAweGEyLCAweDQwLAorCTB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ODIsIDB4MWEsIDB4NDAsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4MCwgMHhhMiwgMHg0MCwKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDA5LCAweDg3LCAweDIyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODcsIDB4MjIsIDB4NDAsIDB4NjUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4YTIsIDB4NWIsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OSwgMHgzMywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweGYzLCAweDgyLCAweDIyLCAweDQ4LCAweDMzLCAweDdkLCAweDAwLCAweDAwLCAweGZmLCAweDAxLCAweDAwLCAweDk5LAorCTB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg5OCwgMHgyZiwgMHg0MCwgMHgzMywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGRkLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY2LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MzMsIDB4NDAsIDB4MWYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgxMywgMHg0ZSwgMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwgMHhmZCwgMHg4MiwgMHhhMCwgMHhjZSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDBmLCAweDgzLCAweGEwLCAweGNkLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHg4MywgMHgyMiwgMHhiNSwgMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDE1LCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDgzLCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YjQsIDB4NjUsIDB4OTcsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNSwgMHgyZSwgMHg0MCwgMHg2OSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwKKwkweDkzLCAweDgzLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweGRjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODMsIDB4YTgsIDB4YTEsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhlOSwgMHg4MiwgMHgwMCwgMHg4OCwgMHg5ZSwgMHhiMywgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHhhMiwgMHg0MSwKKwkweDY3LCAweDZmLCAweDAwLCAweDAwLCAweGU5LCAweDgyLCAweDAwLCAweDZmLCAweGRiLCAweDkxLCAweDAwLCAweDAwLAorCTB4MGYsIDB4ODMsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODIsIDB4MWEsIDB4NDAsCisJMHg5MywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHgwOSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDFhLCAweDgzLCAweGE2LCAweDQyLAorCTB4MTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTQsIDB4MDAsIDB4OTUsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgxNSwgMHg4MywgMHg2MSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDE2LCAweDgzLCAweGE4LCAweGIxLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAorCTB4MWYsIDB4OTQsIDB4NzEsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODMsIDB4MDAsIDB4NTgsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg5NCwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMywgMHg0YiwKKwkweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyNSwgMHg4MywgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDI3LCAweDgzLCAweDg1LCAweDE3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDcsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgyYywgMHg4MywgMHgyMiwgMHg1NSwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDQzLCAweGQxLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4ODMsIDB4MDAsIDB4NGIsCisJMHg0NCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweGY2LCAweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweGExLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyOCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MjgsIDB4M2MsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NDQsCisJMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4MywgMHhhMiwgMHhmOCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDQ5LCAweDgzLCAweDIyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDUwLAorCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MzUsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHg4MywgMHhhMiwgMHhmOCwgMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNiwgMHg4MywgMHhhMiwgMHhmOCwKKwkweDEwLCAweDZjLCAweDAwLCAweDAwLCAweDM2LCAweDgzLCAweGEyLCAweGYwLCAweDFhLCAweDZjLCAweDAwLCAweDAwLAorCTB4NDcsIDB4ODMsIDB4MjIsIDB4NTgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsCisJMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4MywgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQyLCAweDgzLCAweGEyLCAweGYzLCAweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorCTB4ZTYsIDB4OTUsIDB4MDEsIDB4MDAsIDB4NDcsIDB4ODMsIDB4NzUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHg3NSwgMHhmMywKKwkweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDUsIDB4ODMsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MywgMHg2NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDRmLCAweDgzLCAweDc3LCAweDQxLCAweDJkLCAweGMzLCAweDAwLCAweDAwLCAweDRkLCAweDgzLCAweDIyLCAweDU4LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4MywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRkLCAweDgzLCAweDY3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4N2MsIDB4ODMsIDB4NzcsIDB4NDEsIDB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDVkLCAweDgzLCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDgzLCAweDIyLCAweDQyLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1YywgMHg4MywgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5MywgMHgwMCwgMHg1ZiwKKwkweDAxLCAweDEwLCAweDAxLCAweDAwLCAweDViLCAweDgzLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjUsIDB4ODMsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg1MywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2NSwgMHg4MywgMHgyMiwgMHgyMCwKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDYyLCAweDgzLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTMsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg5NSwgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2OCwgMHg4MywgMHg4MiwgMHhmMCwgMHgxOCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0NSwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI4LCAweDIwLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4NmMsIDB4ODMsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NGIsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0YiwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGQ4LCAweDkzLCAweDAwLCAweDAzLCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweGI0LCAweDkxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg1MCwKKwkweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg3NywgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGM5LCAweDAxLCAweDAwLCAweDc5LCAweDgzLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDJlLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg0MSwgMHgwMCwgMHhhNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgyZSwgMHg0NywKKwkweDk3LCAweDkwLCAweDAxLCAweDAwLCAweDhmLCAweDgzLCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLAorCTB4OGQsIDB4ODMsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4OGQsIDB4ODMsIDB4MjMsIDB4YTIsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDAwLAorCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4ODMsIDB4MDAsIDB4NWMsCisJMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4MywgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDlhLCAweDgzLCAweDIyLCAweDVmLAorCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4OTYsIDB4ODMsIDB4NjIsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5NywgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDcyLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MGYsIDB4MDAsIDB4ZjYsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg5ZSwgMHg4MywgMHhhMiwgMHhhNiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhMSwgMHg4MywgMHgwMCwgMHhmMiwKKwkweDNhLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDg0LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhYywgMHg4MywgMHgyMiwgMHg0YSwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGFjLCAweDgzLCAweDIyLCAweDQ4LCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDBhLCAweDAwLCAweDJkLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDk4LCAweDk0LCAweDNkLCAweDQyLCAweDgxLCAweGUwLCAweDAxLCAweDAwLAorCTB4YWMsIDB4ODMsIDB4YTIsIDB4NDIsIDB4ZTAsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ODcsIDB4ODQsIDB4YTIsIDB4NGIsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDJhLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDgzLCAweDY5LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3OSwgMHg0MSwgMHg0NywgMHhjMywgMHgwMSwgMHgwMCwgMHhiMiwgMHg4MywgMHgyMiwgMHhhMSwKKwkweDA5LCAweDZjLCAweDAwLCAweDAwLCAweGY1LCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODMsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ODMsIDB4YTMsIDB4OTIsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg3ZCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAxLCAweDAwLCAweDJhLCAweDg3LCAweDIyLCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODMsIDB4MjIsIDB4NWMsIDB4MTcsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhiOSwgMHg4MywgMHgwMCwgMHgwMCwgMHgyYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4YmQsIDB4ODMsIDB4YTIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkOSwgMHg4MywgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDhjLCAweGNjLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDRjLAorCTB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGM2LCAweDgzLCAweGE4LCAweDU0LAorCTB4MTcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ODMsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg4MywgMHgyMiwgMHg0MywKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDhjLCAweGNjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OTQsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZDksIDB4ODMsIDB4MjgsIDB4NTQsCisJMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGVkLCAweDk0LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGRiLCAweDgzLCAweDIyLCAweDUwLAorCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgxNywgMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4MywgMHhhMiwgMHg0MSwKKwkweDk5LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDE3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkZiwgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4ODMsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxNiwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAorCTB4ZTksIDB4ODMsIDB4YTIsIDB4NWYsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTEsIDB4MDAsIDB4MDEsCisJMHgzOCwgMHg0MywgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDJhLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGVkLCAweDgzLCAweGEyLCAweDRiLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODQsIDB4ODQsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDExLCAweGIwLCAweDAxLCAweDAwLCAweGVmLCAweDgzLCAweDM1LCAweDAxLCAweDg2LCAweDMwLCAweDAwLCAweDAwLAorCTB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjYsIDB4ODMsIDB4MjgsIDB4YjEsCisJMHgzMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MywgMHgyMiwgMHg0ZCwgMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDc0LCAweDg0LCAweGEyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ODMsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4MywgMHhhOCwgMHhiMSwKKwkweDEyLCAweDMwLCAweDAwLCAweDAwLCAweGZmLCAweDgzLCAweGEyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCisJMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDA3LCAweDAwLCAweDQzLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweGYwLCAweDgzLCAweGFhLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgzZSwgMHg0MywgMHgyNywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4YTMsIDB4MGIsCisJMHg4NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLAorCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MmQsIDB4NDAsIDB4MzksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4NCwgMHhhMiwgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweGRlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLAorCTB4MGYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwgMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NCwgMHgyMywgMHgwMSwKKwkweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MWYsIDB4ODQsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5MiwgMHgwMCwgMHg0MywKKwkweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDg0LCAweDIyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MjUsIDB4ODQsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDI1LCAweGQwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDRjLAorCTB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzcsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NCwgMHgwMCwgMHg0NSwKKwkweDFmLCAweDgwLCAweDAwLCAweDAwLCAweDMwLCAweDg0LCAweGEzLCAweDEyLCAweDM2LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzEsIDB4ODQsIDB4NjgsIDB4MWIsIDB4MjgsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsCisJMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgzNCwgMHg4NCwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHg1YSwgMHg4NCwgMHgyMiwgMHgxNCwKKwkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTQsCisJMHgxMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MywgMHg4NCwgMHhhMiwgMHgxNCwgMHgzNiwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDQ0LCAweDg0LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDIsIDB4ODQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNmLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MmIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg0OSwgMHg4NCwgMHgyMywgMHgwMSwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDU0LCAweDg0LCAweDIyLCAweDFiLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDE1LAorCTB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1MCwgMHg4NCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDU0LCAweDg0LCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODQsIDB4YTIsIDB4NDAsCisJMHgyNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzOSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDNkLCAweDQzLCAweDM5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4MjUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4NCwgMHgwMCwgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDYwLCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDkyLCAweDAwLCAweDQwLAorCTB4MmIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHg4NCwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwKKwkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLAorCTB4NjcsIDB4ODQsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDE2LCAweDAwLCAweDIwLCAweDFkLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmMsIDB4ODQsIDB4YTMsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg2ZSwgMHg4NCwgMHg2MCwgMHg1ZiwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwYiwKKwkweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDEzLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAorCTB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4YTIsIDB4NWYsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDkxLCAweDAwLCAweDAxLAorCTB4MzgsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NzYsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3OCwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDgzLCAweDg0LCAweDIyLCAweDEzLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNkLCAweDQzLAorCTB4ODMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDdlLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3YSwgMHg4NCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGE2LAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAorCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTIsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg5NSwgMHg4NCwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg5MywgMHg4NCwgMHgyMiwgMHg0MiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4OTQsIDB4ODQsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg4NCwgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDUzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDlkLCAweDg0LCAweDIyLCAweDIwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OWEsIDB4ODQsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMywgMHg5MywgMHgwMCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweGEzLCAweDg0LCAweDIyLCAweDNhLAorCTB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YTcsIDB4ODQsIDB4YTIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA1LCAweDk0LCAweDAwLCAweDk1LAorCTB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDJlLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDIwLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4YjAsIDB4ODQsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NGIsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0YywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGIyLCAweDg0LCAweDgzLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjQsIDB4ODQsIDB4ODUsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwKKwkweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweGExLCAweDJhLCAweGM4LCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTEsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGJlLCAweDg0LCAweDY0LCAweDQ3LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmYsIDB4ODQsIDB4YTgsIDB4MWIsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHg3NCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGUwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODQsIDB4MDEsIDB4ZmIsIDB4MDgsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgzNywgMHg4NSwgMHg4NywgMHhmYiwgMHgyMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTIsIDB4MDAsIDB4MDcsCisJMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg4NCwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGNlLCAweDg0LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ODQsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4NCwgMHhhNiwgMHg1ZiwKKwkweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDkyLCAweDAwLCAweDQwLCAweDA1LCAweDMwLCAweDAxLCAweDAwLAorCTB4ZDcsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGUyLCAweDg0LCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4NTMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4ODQsIDB4MjIsIDB4MjAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhkZiwgMHg4NCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDMzLCAweDkzLCAweDAwLCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4OTUsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4ODQsIDB4MjEsIDB4MDQsCisJMHg4MCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg4NCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwKKwkweGJkLCAweDg3LCAweDAwLCAweDRiLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDA2LCAweDg1LCAweDAwLCAweDQzLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODUsIDB4MDAsIDB4ZmIsIDB4MjIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiZCwgMHg4NywgMHgwMCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0ZSwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDAyLCAweDg1LCAweDAwLCAweDVhLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWYsIDB4ODQsIDB4MDAsIDB4NDcsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmQsIDB4ODcsIDB4MDAsIDB4NTMsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg1NiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweGEwLCAweDBhLAorCTB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ODQsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg4NCwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg1MywKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDU0LCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmUsIDB4ODQsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODQsIDB4YTIsIDB4MGEsCisJMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg1ZCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODQsIDB4YTAsIDB4OTEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YiwgMHg4OCwgMHgwMCwgMHg1ZSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODUsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NTQsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4YTAsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODcsIDB4YTAsIDB4NDIsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg1NCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAorCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4NSwgMHgyMiwgMHgwYiwKKwkweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDg1LCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGEyLCAweDU0LAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODUsIDB4MjIsIDB4NTUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHg4MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDg1LCAweDIyLCAweDUzLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweGJjLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDIwLCAweDg1LCAweDIyLCAweDQzLAorCTB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg4NSwgMHhhMiwgMHg0MywgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YywgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDIxLCAweDg1LCAweDQ2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjQsIDB4ODUsIDB4YTAsIDB4ZjAsIDB4MzAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODUsIDB4MWUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg0MSwgMHgzMSwgMHhjMywgMHgwMSwgMHgwMCwKKwkweDVkLCAweDkyLCAweDAwLCAweDQwLCAweDI1LCAweDMwLCAweDAxLCAweDAwLCAweDI5LCAweDg1LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzMywgMHg5MywgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxOCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwYywgMHhlMCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDA0LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhhMSwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MSwgMHg4NSwgMHgyMiwgMHg0NiwgMHgyMywgMHg3YywgMHgwMCwgMHgwMCwgMHgzZCwgMHg4NSwgMHgyMiwgMHg0MCwKKwkweDg3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4M2YsIDB4ODUsIDB4MjIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg4NSwgMHgyMiwgMHg0MiwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDQxLCAweDg1LCAweDY2LCAweDFiLAorCTB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3NiwgMHg0MSwgMHg0MSwgMHhjMywgMHgwMSwgMHgwMCwgMHg3MCwgMHg4NSwgMHgyMywgMHg5MiwKKwkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDg1LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4NzQsIDB4ODUsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDBhLCAweDI0LCAweGM4LCAweDAxLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLAorCTB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4ODUsIDB4MjIsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHgxMiwKKwkweDI0LCAweGNjLCAweDAxLCAweDAwLCAweDRhLCAweDg1LCAweGFhLCAweDQxLCAweDI3LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODUsIDB4MjYsIDB4NDAsCisJMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAwLCAweDAwLCAweDAzLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1NywgMHg4NSwgMHhhMiwgMHg0MCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg2MywgMHg4NSwgMHgwMCwgMHg0MSwKKwkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQyLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MjEsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHg1YywgMHg4NSwgMHhhMiwgMHg0NCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVmLCAweDg1LCAweGE4LCAweDQyLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDg1LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDZhLCAweDg1LCAweDIyLCAweDQwLAorCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2NywgMHg4NSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsCisJMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDdkLCAweDg1LCAweDAwLCAweDE3LCAweDEwLCAweGIwLCAweDAwLCAweDAwLCAweDdlLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzQsIDB4ODUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg5MiwgMHgwMCwgMHg5MiwgMHgyNSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDMxLCAweGIwLCAweDAxLCAweDAwLCAweDc0LCAweDg1LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAorCTB4N2QsIDB4ODUsIDB4MDAsIDB4NDEsIDB4MjcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDk1LCAweDAwLCAweDBhLCAweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg3YywgMHg4NSwgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGY1LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDEsIDB4M2YsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDkxLCAweDg1LCAweDJhLCAweDQwLCAweDgxLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4NiwgMHg4NSwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg4NSwgMHhhMiwgMHg0NywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDg1LCAweGEzLCAweDA3LCAweDAzLCAweDZjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODksIDB4ODUsIDB4YTMsIDB4NDAsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDg1LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGUsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4NSwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDEsIDB4MmQsIDB4NDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg1YiwgMHg4NiwgMHgyMiwgMHgwZiwgMHg0MiwgMHgwNSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4NSwgMHg5YywgMHgwZiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODUsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDlhLCAweDg1LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhMiwgMHg4NSwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTEsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwNiwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDU0LAorCTB4MjksIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAzLCAweDBhLCAweGM4LCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4Y2IsIDB4ODUsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCisJMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGI4LCAweDg1LCAweGEzLCAweDA3LAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjksIDB4ODUsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKKwkweDAyLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGM1LCAweDg1LCAweDIyLCAweDQwLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGM1LCAweDg1LCAweDIyLCAweDQyLAorCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGU5LCAweDg1LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YzIsIDB4ODUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGM3LCAweDg1LCAweGE4LCAweDQwLAorCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlOSwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKKwkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4ODUsIDB4YTMsIDB4MTIsCisJMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHhkMSwgMHg4NSwgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLAorCTB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDg1LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDg2LCAweDIyLCAweDBkLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlMiwgMHg4NSwgMHgwMCwgMHgwZCwKKwkweDI0LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGU0LCAweDg1LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweGU5LCAweDg1LCAweDAwLCAweDQxLAorCTB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg4NSwgMHhhOCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODYsIDB4MjIsIDB4MGQsCisJMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4NiwgMHhhMiwgMHgwZCwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGY1LCAweDg1LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhmMywgMHg4NSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4ODUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA2LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg4NSwgMHgxZiwgMHhmMCwKKwkweDBlLCAweDMwLCAweDAwLCAweDAwLCAweGIyLCAweDg1LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4YjIsIDB4ODUsIDB4MjMsIDB4MDcsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODYsIDB4YTgsIDB4NDYsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhiMiwgMHg4NSwgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGIyLCAweDg1LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDE0LAorCTB4MGEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyYSwgMHhmMiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDg2LCAweDIyLCAweDQwLCAweDMxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhmNiwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDExLCAweDg2LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODYsIDB4MjIsIDB4MGIsIDB4ZWQsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLCAweDk0LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NiwgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDFmLCAweDQzLCAweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDFiLCAweDg2LCAweGEwLCAweDQ2LAorCTB4MGYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg4NiwgMHgyMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDBmLCAweGEyLCAweDQyLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDk1LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4ODYsIDB4YTAsIDB4NDEsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NiwgMHgyMiwgMHg0NywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDJhLCAweDg2LCAweGEwLCAweDQzLCAweDg5LCAweDZjLCAweDAwLCAweDAwLAorCTB4MmEsIDB4ODYsIDB4MjAsIDB4NDUsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MmEsIDB4ODYsIDB4YTAsIDB4NDEsCisJMHgwZSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg5LCAweGMwLCAweDAxLCAweDAwLCAweDIyLCAweDg2LCAweGEyLCAweDQxLAorCTB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4ODYsIDB4MjIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0OCwKKwkweDkwLCAweDg4LCAweDAxLCAweDAwLCAweDMxLCAweDg2LCAweDkwLCAweDQ4LCAweDkyLCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDE0LAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQwLCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4NiwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGNjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGMwLCAweDg2LCAweDAwLCAweDE3LAorCTB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4NiwgMHhhMCwgMHgwNywKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg4NiwgMHg5MCwgMHhmMiwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLAorCTB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NTksIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDU2LCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2MywgMHg4NiwgMHg5YywgMHgwZiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjMsIDB4ODYsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYwLCAweDg2LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2OCwgMHg4NiwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTEsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDZkLCAweDg2LCAweDIyLCAweDQwLAorCTB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDcyLCAweDg2LCAweGE4LCAweDQwLAorCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHg1MiwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg4NiwgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4MSwgMHg4NiwgMHg2OCwgMHgwNywKKwkweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsCisJMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg4NiwgMHg4NiwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHg4NiwgMHgyMiwgMHgwZCwKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDhjLCAweDg2LCAweDIyLCAweDBkLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4ODYsIDB4MDAsIDB4MGQsCisJMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweGEyLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDIwLAorCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg5MiwgMHg4NiwgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHg5NywgMHg4NiwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTMsIDB4ODYsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBkLAorCTB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODYsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhhMywgMHg4NiwgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4YTEsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDllLCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4ODYsIDB4MWYsIDB4ZjAsCisJMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4NiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDdiLCAweDg2LCAweDIzLCAweDA3LAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGIxLCAweDg2LCAweGE4LCAweDQ2LAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODYsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3YiwgMHg4NiwgMHgwMCwgMHgwZCwgMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHhiZSwgMHg4NiwgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YmIsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDg2LCAweDAwLCAweDQwLCAweDJiLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNSwgMHg4NiwgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDg4LCAweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGY1LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDcsIDB4OTUsIDB4MDAsIDB4NDEsIDB4M2YsIDB4NDMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLAorCTB4MmEsIDB4ODcsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweGQ4LCAweDkyLCAweDAwLCAweDA3LAorCTB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4ODYsIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkMiwgMHg4NiwgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQzLCAweDg2LCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4ODYsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg1MywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGRjLCAweDg2LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweGQ5LCAweDg2LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzMywgMHg5MywgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg5NSwgMHgwMCwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGJkLCAweDg3LCAweGEyLCAweDVmLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4NDMsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDhlLCAweGY0LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDkwLCAweDg4LCAweDAxLCAweDAwLAorCTB4ZWIsIDB4ODYsIDB4MjIsIDB4NDgsIDB4OGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKKwkweGViLCAweDg2LCAweDFmLCAweGYwLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweGVhLCAweDg2LCAweDIzLCAweDQxLAorCTB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmQsIDB4ODcsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiZCwgMHg4NywgMHgwMCwgMHg0OCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4ODYsIDB4MjIsIDB4MGEsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4YWEsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg5MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJkLCAweDQ1LCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGZjLCAweDg2LCAweDIyLCAweGYwLAorCTB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDAsIDB4MmQsIDB4MzAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgyZCwgMHhmMywgMHg4MiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4NiwgMHhhMywgMHg0MSwKKwkweDJjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4OTgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwKKwkweGJkLCAweDg3LCAweDIwLCAweDRjLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweDQxLAorCTB4OTgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODcsIDB4MjAsIDB4ZjAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywKKwkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YmQsIDB4ODcsIDB4MDAsIDB4NDksIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4NywgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDgwLCAweDAwLCAweDQwLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDA1LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHg4NywgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA4LCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDg3LCAweDlmLCAweDg1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MGIsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4ODIsIDB4MjIsIDB4NDAsCisJMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDg3LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODIsIDB4MWEsIDB4NWIsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwgMHg4MSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgxMSwgMHg4NywgMHgyMiwgMHg0MCwKKwkweGYyLCAweDdmLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweDAwLCAweDZmLCAweDk3LCAweDMzLCAweDAxLCAweDAwLAorCTB4MTMsIDB4ODcsIDB4MjIsIDB4NDAsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODAsIDB4MDAsIDB4NDEsCisJMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwZSwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg3LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE4LCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTIsIDB4MjIsIDB4MDIsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYywgMHg4NywgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDJmLCAweDkyLCAweDFhLCAweDAyLAorCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MjYsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNiwgMHg4NywgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDM5LCAweDkyLCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI3LCAweDg3LCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgzOSwgMHg5MiwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgzMSwgMHg4NywgMHg5YywgMHgwZiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MzEsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzMiwgMHg4NywgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAorCTB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyZiwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDgyLCAweDg3LCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGI4LCAweDk0LCAweDI5LCAweDQxLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZWYsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBkLCAweDk4LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDEwLCAweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgxMSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY2LCAweDg3LCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4NDcsIDB4ODcsIDB4NjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCisJMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg4NywgMHgwNSwgMHhjMiwgMHgyNCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODMsIDB4ODcsIDB4NzAsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDVkLCAweDg3LCAweGEwLCAweDQ4LCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1NywgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDFhLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTQsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDgzLCAweDg3LCAweDAwLCAweGY4LCAweDE4LCAweDMwLCAweDAxLCAweDAwLAorCTB4NTgsIDB4ODcsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTAsCisJMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgzNCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDE4LCAweDAwLCAweDQwLCAweDExLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDFhLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NjEsIDB4ODcsIDB4YTgsIDB4MDksIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDcyLCAweDg3LCAweDIyLCAweDQxLAorCTB4MGQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg2ZSwgMHg4NywgMHhhMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHg4NywgMHgwMCwgMHg0MSwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAyLCAweDAwLCAweDA5LCAweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDQ1LCAweDg3LCAweDgzLCAweDQxLAorCTB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHg4NywgMHgwMCwgMHg0MSwgMHgxYiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHg4NywgMHgyMywgMHg0MCwKKwkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4N2EsIDB4ODcsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDc3LCAweDg3LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHgwMCwgMHhmOCwKKwkweDE4LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg3LCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODcsIDB4YTAsIDB4YWEsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDk0LCAweDIwLCAweDA3LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHgwYywgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgwYywKKwkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDk1LCAweDg3LCAweDI2LCAweDU0LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4OGIsIDB4ODcsIDB4ODcsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YiwgMHg4NywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDg3LCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDg3LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ODcsIDB4MjIsIDB4NDYsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAorCTB4OGMsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTUsIDB4ODcsIDB4MjIsIDB4NDksCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LAorCTB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsIDB4OTAsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAorCTB4OTUsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MmYsIDB4NTUsCisJMHhmMSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY5LCAweDgyLCAweGEyLCAweDQxLCAweGU1LCAweDUxLCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODcsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHg4NywgMHhhMiwgMHg5MywgMHg1NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDU3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGFiLCAweDI3LCAweGIzLCAweDAxLCAweDAwLAorCTB4ZjksIDB4ODIsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MjIsIDB4NTEsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHhhMiwgMHg0MSwgMHgxZCwgMHg1MywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDQ2LCAweDAwLCAweDQwLCAweDFkLCAweDliLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhhYywgMHg4NywgMHgyMiwgMHg0MCwKKwkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4YjUsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTYsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MiwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRhLAorCTB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDQwLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhjMywgMHg4NywgMHgwMCwgMHg0YiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhlNiwgMHg4YSwgMHgwMCwgMHg0MSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4YiwgMHgwMCwgMHg0MSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4YiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDRjLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NGMsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OGIsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHg4YiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg4YiwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDhiLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDMsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNCwgMHg4YiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4YiwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDczLCAweDhjLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3MywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDkzLCAweDhjLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGIxLCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGIxLCAweDhjLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHg4YywgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4OGMsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWEsIDB4OGMsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4OGMsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg4YywgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWMsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGMsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmNSwgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4ZCwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDcxLCAweDhjLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDcxLCAweDhjLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA3LCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDhkLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBlLCAweDhkLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDFjLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4N2IsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OGIsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDgzLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4YjgsIDB4OGIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGQsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4ZCwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4OGIsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3ZiwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4YiwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDA4LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDIwLCAweDQ3LAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4ODMsIDB4ODgsIDB4MDAsIDB4NGIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4YWMsIDB4OGQsIDB4MDAsIDB4NDksCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNSwgMHg4ZCwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGViLCAweDhkLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZjksIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTUsIDB4OGUsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg4ZSwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OGUsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVlLCAweDhkLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZSwgMHg4ZCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQ5LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NGIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVlLCAweDhkLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg4ZSwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVjLCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OGUsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4ZCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDhlLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3NSwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDhlLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA5LCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDksIDB4OGYsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVlLCAweDhkLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE0LCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4OWQsIDB4OGYsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDBjLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBjLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjMSwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMSwgMHg4ZiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YWUsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFlLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDQsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OGUsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OGUsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0YywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFmLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyYiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGYsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFmLCAweDhmLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjMywgMHg4ZiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGYsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4ZiwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGQ4LCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkOCwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg5MCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmEsIDB4OTAsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGZiLCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmYSwgMHg5MCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGNlLCAweDhmLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDhmLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDhlLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlMCwgMHg4ZSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4OGYsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDM2LCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDM2LCAweDkxLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDM2LCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzYsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUwLCAweDhlLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUwLCAweDhlLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTEsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHg5MSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDU2LCAweDkxLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NywgMHg5MSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDY3LCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDhlLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OGUsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4ZCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg1LCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NDIsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM0LCAweDkxLCAweDAwLCAweDRhLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhkLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OTEsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4OGUsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4OGUsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDJlLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODcsIDB4MDAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHgzYSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4OGEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MWYsIDB4MDAsIDB4MGYsCisJMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHhlZSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGRmLCAweDhhLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhkZiwgMHg4YSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZGMsIDB4OGEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg4NCwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGUwLCAweDhhLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDEsIDB4MDAsCisJMHhhMywgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyZSwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDFmLCAweDg3LCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweGExLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4MDYsIDB4MDcsIDB4NDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNywgMHhkMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgyZSwgMHg1YywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKKwkweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDRiLAorCTB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTUsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZSwgMHgzNCwKKwkweDk3LCAweDg0LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRiLCAweGU0LCAweGU1LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDEsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDksIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJlLCAweDQwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDhiLCAweDIwLCAweDRiLAorCTB4OTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwZSwgMHg4YiwgMHgwMCwgMHg0MSwgMHg5NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDE4LCAweDhiLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MWQsIDB4OGIsIDB4NDQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4YiwgMHhhMiwgMHg0YywgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDIxLCAweDhiLCAweDAwLCAweDRjLCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDIyLCAweDhiLCAweDIwLCAweGYwLAorCTB4NTYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4NTYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDI4LCAweDhiLCAweGE4LCAweDQ0LAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHg0NiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDhiLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgzOCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDhiLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4M2IsIDB4OGIsIDB4MjIsIDB4NDQsCisJMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDIwLCAweGEyLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzZiwgMHg4YiwgMHgyMywgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgyZSwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDRmLCAweDhiLCAweGEyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTMsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHgwMCwgMHgyZiwgMHg0OSwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg1MywgMHg4YiwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OGIsIDB4YTIsIDB4NDYsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDVhLCAweDhiLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDJmLCAweDQ2LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NWEsIDB4OGIsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCisJMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLAorCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MTQsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg4NSwgMHg4YiwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg2ZCwgMHg4YiwgMHgyMiwgMHgwYSwKKwkweDE2LCAweDZjLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg2YywgMHg4YiwgMHhhMCwgMHg0MywgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDYyLCAweDhiLCAweDAwLCAweDQxLCAweDE1LCAweGQwLCAweDAwLCAweDAwLAorCTB4ODUsIDB4OGIsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCisJMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDg1LCAweDhiLCAweDIyLCAweDQxLCAweDE1LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzksIDB4OGIsIDB4YTAsIDB4NDMsCisJMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDExLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NCwgMHgwMCwgMHg0NywKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MmMsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDgxLCAweDhiLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4OGIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg1MSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg4YiwgMHgwMCwgMHg0OCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDM0LCAweDAwLCAweDJlLCAweDQxLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MiwgMHg4YiwgMHgyMiwgMHg0NSwKKwkweDIzLCAweDdjLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNlLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDk3LCAweDhiLCAweDIyLCAweDQ4LAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwYSwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyYSwgMHg0YSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LAorCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGIsIDB4MjMsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDRjLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4NDQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MjAsIDB4NDEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGFhLCAweDk1LCAweDAwLCAweGYwLCAweDI0LCAweDMwLCAweDAxLCAweDAwLCAweGFlLCAweDhiLCAweGEyLCAweDQ0LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OGIsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg1NywgMHg5MywgMHgwMCwgMHg0MCwgMHgzYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4YiwgMHhhMiwgMHgwOCwKKwkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweGFlLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OGIsIDB4YTIsIDB4MDgsCisJMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDIwLCAweDAxLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MzYsIDB4OTMsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OGIsIDB4MjIsIDB4NGEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDM2LCAweDkzLCAweDAwLCAweGYzLAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHg2MCwgMHgwMCwKKwkweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDg1LCAweDExLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsCisJMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4OGIsIDB4MDAsIDB4NDksIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCisJMHhjOSwgMHg4YiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg1NywgMHg5MywgMHgwMCwgMHg0MCwKKwkweDNiLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGNkLCAweDhiLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4YywgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDQ2LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDJkLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NjgsIDB4ZjIsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDM3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MmUsIDB4NDAsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDgxLCAweGQwLCAweDAxLCAweDAwLCAweDg5LCAweDk0LCAweDAwLCAweDQwLAorCTB4ZTQsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkZSwgMHg4YiwgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhjZSwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ2LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZWMsIDB4OGIsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlOSwgMHg4YiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4YiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGYwLCAweDhiLCAweGEzLCAweDAxLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweGYxLCAweDhiLCAweDAwLCAweDA2LAorCTB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmMywgMHg4YiwgMHgyMCwgMHgwMiwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGY3LCAweDhiLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAwLCAweDAwLAorCTB4ZjYsIDB4OGIsIDB4YTMsIDB4MDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4OGIsIDB4MDAsIDB4MDYsCisJMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDE2LCAweDk0LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBiLAorCTB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4M2UsIDB4OTYsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZmMsIDB4OGIsIDB4YTgsIDB4MTMsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OGMsIDB4MjIsIDB4MDIsCisJMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMCwgMHgyZCwgMHgwMiwgMHgwYywgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDhjLCAweGEyLCAweDAyLCAweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDBhLCAweDhjLCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwOSwgMHg4YywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDUsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDAwLCAweDJkLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDJkLCAweGYwLAorCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzOCwgMHgwMCwgMHgyZiwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHg4YywgMHgyMiwgMHgwMSwKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDE3LCAweDhjLCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNiwgMHg4YywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHhlMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDIyLCAweDRhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDQ0LCAweDAwLCAweDAwLCAweDA1LAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MjAsIDB4OGMsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4OGMsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDhjLCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4OGMsIDB4YTIsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHg4ZiwgMHgwZCwgMHg0MiwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4OGIsIDB4MDAsIDB4YTEsCisJMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDhiLCAweDAwLCAweDAyLCAweDM2LCAweGQwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0ZSwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDhjLCAweDAwLCAweDVmLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MmQsIDB4NDYsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgzNywgMHg4YywgMHhhMCwgMHg0MywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgzZSwgMHg4YywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4M2IsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQ1LCAweDhjLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4YywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjAsIDB4MDEsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDRhLCAweDhjLCAweDkwLCAweGYyLCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgwMCwgMHhhNiwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDRkLCAweDhjLCAweDQ1LCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZDAsIDB4MDAsIDB4MWUsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OGMsIDB4MjgsIDB4NDAsCisJMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4YywgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDU1LCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWUsIDB4OGMsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1MiwgMHg4YywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMCwKKwkweDkyLCAweGIwLCAweDAxLCAweDAwLCAweDViLCAweDhjLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4ZjgsCisJMHgwMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4YywgMHhhMiwgMHg0MSwgMHgzYiwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDhjLCAweDAwLCAweDQ5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDFlLAorCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg1ZiwgMHg4YywgMHgwMCwgMHg0OSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg0NywKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDYyLCAweDhjLCAweDIyLCAweDVmLCAweDAxLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZDQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmYsIDB4ODcsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4YywgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY5LCAweDhjLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjksIDB4OGMsIDB4NDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCisJMHg5NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4YywgMHg4NSwgMHhjYSwgMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDk1LCAweDE4LCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAorCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgxOCwgMHgwMCwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NywKKwkweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE5LCAweDgwLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MjIsIDB4NDcsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3NiwgMHg4YywgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDg5LCAweDk0LCAweDAwLCAweDQwLAorCTB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHg1MCwKKwkweDE3LCAweGYwLCAweDAxLCAweDAwLCAweDdjLCAweDhjLCAweDkwLCAweDRjLCAweDE2LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2UsIDB4OGMsIDB4MjIsIDB4NDMsCisJMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MmUsIDB4ZjIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHg2MiwgMHg0MCwgMHg3ZSwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywKKwkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDhjLCAweDhjLCAweDQ1LCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4NTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OGMsIDB4MjgsIDB4NDAsCisJMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4ZCwgMHg4YywgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDk5LCAweDkyLCAweDFkLCAweDA4LCAweDAwLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MWQsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDk3LCAweDhjLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLCAweGEyLCAweDhjLCAweGEyLCAweDQxLAorCTB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDQsIDB4ODMsIDB4NzAsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywKKwkweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDFmLCAweGYwLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAorCTB4ZDQsIDB4OTUsIDB4MDAsIDB4NDgsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmYsIDB4ODcsIDB4MjMsIDB4NDEsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHhiZiwgMHg4NywgMHgwMCwgMHg0NywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NCwgMHgwMCwgMHg0NywKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTMsIDB4OGIsIDB4YTIsIDB4NDAsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhiMCwgMHg4YywgMHgyMiwgMHg0NywgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5MywgMHg4YiwgMHgwMCwgMHg0OCwKKwkweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDFmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzYsIDB4MDAsIDB4MmQsIDB4NWQsIDB4MDUsIDB4YjQsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4ZjMsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDVjLCAweDAwLCAweDNkLCAweDQzLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweGYwLAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhkYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDliLCAweDkxLCAweDAwLCAweDRhLCAweGYwLCAweDMxLCAweDAxLCAweDAwLAorCTB4MzYsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YmUsIDB4OGMsIDB4YTIsIDB4NTAsCisJMHg4ZiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQxLAorCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzEsIDB4OGMsIDB4YTAsIDB4NDMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyMCwgMHg0NywKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDIyLCAweDQ3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MGMsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg4ZiwgMHg4NCwgMHgwMSwgMHgwMCwgMHhkNiwgMHg4YywgMHgyMiwgMHg0NywgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGQ2LCAweDhjLCAweDFmLCAweGYwLAorCTB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YywgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OGMsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNmLCAweDhjLCAweDQyLCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4YywgMHgyMywgMHg0MSwgMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMSwgMHg4YywgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGQ0LCAweDk1LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAorCTB4YmYsIDB4ODcsIDB4MDAsIDB4NDgsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDAsCisJMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGEyLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhNiwgMHgwMCwgMHgyZCwgMHg0OSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MiwgMHhmOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGU1LCAweDhjLCAweGEwLCAweDQwLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDJjLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OGMsIDB4YTMsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNywgMHg4YywgMHgyMCwgMHg0YywKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4ODYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MjAsIDB4NDIsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDgzLCAweDk0LCAweDAwLCAweDUwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsCisJMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDYsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwKKwkweDk2LCAweGNjLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDYsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDhhLCAweDIyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0YSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM5LCAweDk0LCAweDAwLCAweDQ3LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg4ZCwgMHg5MCwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDYyLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDAsCisJMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MSwgMHhlNSwgMHhjMSwgMHgwMCwgMHgwMCwKKwkweDgzLCAweDk0LCAweDAwLCAweDRkLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDFiLCAweDhkLCAweDgwLCAweGYzLAorCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4ODEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg1YywKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDhkLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg1MSwgMHg4MywgMHhkMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDg0LCAweGNjLCAweDAxLCAweDAwLAorCTB4MjgsIDB4OGQsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDIsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDJhLCAweDhkLCAweDM3LCAweDVjLAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg4ZCwgMHhhOCwgMHg0YiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGFjLCAweDAwLCAweDJkLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJkLCAweGYwLAorCTB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDIwLCAweDAwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDk0LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OGQsIDB4YTAsIDB4MTQsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGY4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDAsCisJMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4ZCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDMwLCAweDAwLCAweDQzLCAweDg2LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDBiLAorCTB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OGQsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg0MywKKwkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweDBmLCAweDk1LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4NGMsIDB4OGQsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MywgMHg4ZCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg1MiwgMHg4ZCwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NDEsCisJMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDU5LCAweDhkLCAweDA2LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDIwLCAweGYyLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDksIDB4NDYsIDB4MTksIDB4MTAsIDB4MDAsIDB4MDAsCisJMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwKKwkweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAorCTB4NWUsIDB4OGQsIDB4OTAsIDB4NGMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4ZCwgMHgyMiwgMHg0MywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLAorCTB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHg2MiwgMHg0MCwKKwkweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDgxLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4NmUsIDB4OGQsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDgsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDM1LCAweDAwLCAweDFkLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OGQsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzYsIDB4OTMsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg4ZCwgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4YiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MzYsIDB4OTMsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGEsIDB4OGIsIDB4MjIsIDB4NGEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4YiwgMHgyMiwgMHgwNiwKKwkweDkwLCAweDZjLCAweDAwLCAweDAwLCAweDVjLCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLAorCTB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmYsIDB4ZjAsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyYSwgMHg1MCwgMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDhmLCAweDhkLCAweGEwLCAweDQzLAorCTB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg5MSwgMHgwMCwgMHgxMCwgMHg4NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkxLCAweDhkLCAweDQyLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OGIsIDB4MWEsIDB4NWQsCisJMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZCwgMHgxMCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDVjLCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweGYwLAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg2YiwgMHhmYiwgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg5YywgMHg4ZCwgMHhhMCwgMHg0MywKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCisJMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg4ZCwgMHhhMCwgMHg0MywgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTEsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4ZCwgMHg0MiwgMHgwNSwKKwkweDQ4LCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDliLCAweDhjLCAweDIyLCAweDQxLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhNSwgMHg4YywgMHgwMCwgMHhmMCwKKwkweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YWQsIDB4OGQsIDB4NjUsIDB4ZjIsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsCisJMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4ZCwgMHgyMiwgMHg0NywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweGY1LCAweDgyLCAweDc1LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGFjLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3NSwgMHg0MiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGI0LCAweDhkLCAweGE4LCAweGIxLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAorCTB4MWYsIDB4OTQsIDB4MDAsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGMwLCAweGE4LCAweDNkLCAweDQ2LCAweDBkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmUsIDB4OGQsIDB4MjIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMiwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHhiYiwgMHg4ZCwgMHgwMCwgMHg1MCwKKwkweDQzLCAweGMxLCAweDAwLCAweDAwLCAweGNhLCAweDhkLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjIsIDB4NGIsIDB4MTIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDk0LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDRhLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1ZSwgMHgwMSwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwMCwgMHgwNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OGQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDA5LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDhkLCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLAorCTB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3NSwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGQ4LCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGQsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDk3LCAweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk2LAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OGQsIDB4MjAsIDB4MDksIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhlMywgMHg4ZCwgMHgxZiwgMHgwOSwgMHg5NiwgMHgyNCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGRlLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ODMsIDB4OTQsIDB4MDAsIDB4NTcsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGU5LCAweDhkLCAweDIyLCAweGYzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDQyLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg1MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MiwKKwkweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NTIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk2LCAweDkzLCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDIyLCAweDQwLAorCTB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGQsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4NTIsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQwLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OGQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MDAsIDB4YTYsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4ZSwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDA4LCAweDAwLCAweDBiLCAweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4MDgsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwNiwgMHg4ZSwgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGE3LCAweDkxLCAweDAwLCAweDQwLCAweDhkLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OTQsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwZSwgMHg4ZSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OGUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwKKwkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MTIsIDB4OGUsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxOSwgMHg4ZSwgMHgyMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDNkLCAweDgwLCAweDAxLCAweDAwLAorCTB4MWEsIDB4OGUsIDB4MDAsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmQsIDB4NDUsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4ZSwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDhlLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OGUsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyOSwgMHg4ZSwgMHhhMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwKKwkweDA0LCAweGRjLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OGUsIDB4YTIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDE1LAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg4ZSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMxLCAweDhlLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg1ZCwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDVkLCAweDhlLCAweGEwLCAweDBiLCAweDk5LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzOSwgMHg4ZSwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmUsIDB4MGIsCisJMHg5OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg1MCwgMHg5OSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDAwLCAweDYyLCAweDAxLCAweDgwLCAweGNjLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDIzLCAweDgwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNmLCAweDQxLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDcsCisJMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4ZSwgMHgyMywgMHgwYiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweGU1LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHgwMCwKKwkweDJhLCAweDQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OGUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OGUsIDB4MjYsIDB4MTEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg5OCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHg0YywgMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDk4LCAweDAxLCAweDAwLCAweDYyLCAweDhlLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmYsIDB4MDgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhmNCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGU0LCAweGNkLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDk4LCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4NjcsIDB4OGUsIDB4MjIsIDB4NDQsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjgsIDB4OGUsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDAsIDB4MDAsCisJMHhhNywgMHg5MSwgMHgwMCwgMHg0MCwgMHg4ZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MywgMHgwMCwgMHhhNiwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweGQ0LCAweDk0LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NzAsIDB4OGUsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDZkLCAweDhlLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg3MywgMHg4ZSwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NzUsIDB4OGUsIDB4MDAsIDB4NGEsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDJkLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDJkLCAweGYwLAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgyZiwgMHhmMiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGUwLCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsCisJMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDM0LCAweDk0LCAweDAwLCAweDQwLAorCTB4MzUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiOSwgMHg4ZSwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyMCwgMHgwYiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGYsIDB4OGUsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDhmLCAweDhlLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg4ZSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4ZSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGEwLCAweDhlLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGVlLCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg4ZSwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4OTYsIDB4OGUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5YywgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGFmLCAweDkyLCAweDAwLCAweDQwLCAweDExLCAweDMwLCAweDAxLCAweDAwLCAweDlkLCAweDhlLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg5ZiwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGEzLCAweDhlLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhOSwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDExLCAweDMwLCAweDAxLCAweDAwLCAweGFhLCAweDhlLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OGUsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YjUsIDB4OGUsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiNiwgMHg4ZSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI4LCAweDhlLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiYywgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDExLCAweDMwLCAweDAxLCAweDAwLCAweGM1LCAweDhlLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4MGEsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNhLCAweDhlLCAweDAzLCAweDFlLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4OGUsIDB4MDAsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGUsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4ZSwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk0LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4YTIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGQ4LCAweDhlLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZCwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDAwLCAweDJkLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTUsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4ZSwgMHgyMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGVjLCAweDhlLCAweGEyLCAweDQwLAorCTB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgyMCwgMHgwYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyMCwgMHgxMywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDIwLCAweDA2LCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4OGEsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhmYSwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweDk5LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE1LCAweDk4LCAweDUwLCAweDAwLCAweDAwLAorCTB4ZmEsIDB4OGUsIDB4MjAsIDB4MDEsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmNywgMHg4ZSwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YWMsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZiwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLAorCTB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg3YywgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAxLCAweDAwLCAweDdjLCAweDhlLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweGYwLAorCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgyYywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQyLCAweDE5LCAweDgwLCAweDAwLCAweDAwLAorCTB4YTksIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDgsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBmLCAweDhmLCAweGE4LCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg4ZiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4ZiwgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyZCwgMHg4ZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4YSwgMHg4NywgMHg0MiwKKwkweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDJmLCAweDQ3LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4ZiwgMHgyMiwgMHg0NywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDkyLCAweDAwLCAweDQwLCAweGU3LCAweDMxLCAweDAxLCAweDAwLCAweDJiLCAweDhmLCAweDIyLCAweDAwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OGYsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4ZjIsCisJMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDJjLCAweDhmLCAweDAwLCAweDQwLAorCTB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHg4ZiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMSwgMHg4ZiwgMHhhMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDk2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzIsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiYywgMHg4ZiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM3LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4OGYsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDRkLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg4ZiwgMHgyMiwgMHg0MiwgMHg5NiwgMHgxNCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDY4LCAweDQwLAorCTB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NGIsIDB4OGYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OGYsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDUzLCAweDhmLCAweDY1LCAweGYyLCAweDEyLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4OGYsIDB4MjIsIDB4NDcsCisJMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4MiwgMHg3NSwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDUyLCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzUsIDB4MDksIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDhmLCAweGE4LCAweDQwLAorCTB4ZTEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHg2NCwgMHg4ZiwgMHg2NSwgMHgwNSwKKwkweDQ4LCAweDMxLCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg2YywgMHg4ZiwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwYiwKKwkweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ODQsIDB4OGYsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTMsIDB4MDAsIDB4NWYsCisJMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc2LCAweDhmLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2ZSwgMHg4ZiwgMHgyMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4ZiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDk0LCAweDAwLCAweDQwLCAweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDE3LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MGMsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0YywgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDhlLCAweDhmLCAweDMwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU2LCAweDgxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDBmLCAweDk0LCAweGY0LCAweDAxLCAweDAwLAorCTB4OTMsIDB4MDQsIDB4MDAsIDB4NWYsIDB4OTUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MjIsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5OCwgMHg4ZiwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDk2LCAweDhmLCAweDQ2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLAorCTB4MzEsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDg1LCAweDkyLCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhOSwgMHg4ZiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhhMiwgMHg4ZiwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGE2LCAweDhmLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YTMsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg3LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDAwLCAweDIyLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHg5NCwgMHgwMCwgMHg0YSwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhOSwgMHg5MywgMHgwMCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDQwLCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGYsIDB4MjIsIDB4NDcsCisJMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg5MiwgMHgwMCwgMHg0MCwgMHhlNywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDhmLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGI1LCAweDhmLCAweGEyLCAweDQwLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDEsIDB4OTMsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM5LCAweDk0LCAweDAwLCAweDQ4LCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGE5LCAweDkzLCAweDAwLCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGYsIDB4ODcsIDB4NDIsIDB4MTksIDB4MTAsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgyZiwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YTksIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweGJhLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MSwgMHg5NSwgMHgwMCwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MjIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkMywgMHg4ZiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHg0NywKKwkweDgwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhlMSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDcsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhhLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4NDEsIDB4ZTcsIDB4NDEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgwYSwKKwkweDJjLCAweDUwLCAweDAwLCAweDAwLCAweDA3LCAweDk1LCAweDAwLCAweDA2LCAweDA0LCAweDMwLCAweDAxLCAweDAwLAorCTB4ZWEsIDB4OGYsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4OGYsIDB4ODQsIDB4NDgsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGVhLCAweDhmLCAweDAwLCAweDBhLCAweGUwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTEsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGViLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGY4LCAweDhmLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweGYxLCAweDkzLCAweDAwLCAweDQ1LAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OGYsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY0LCAweDhmLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OGYsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJkLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiNywgMHg5MywgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZmUsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4OTAsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg0ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHg5MCwgMHhhMiwgMHg0NywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MTYsIDB4OTAsIDB4MjIsIDB4NGEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHg5MCwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg5MCwgMHgyMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MTMsIDB4OTAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDE2LAorCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjgsIDB4OTAsIDB4MjIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3ZCwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDI5LCAweDkwLCAweDIyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLAorCTB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmIsIDB4MDEsCisJMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDA4LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjEsIDB4OTAsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MjIsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDk0LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLAorCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTAsIDB4MjAsIDB4MTYsCisJMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDMzLCAweDkwLCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzZCwgMHg5MCwgMHg4NCwgMHg0NSwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHg5MCwgMHgwMCwgMHgwYSwKKwkweGUwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MzQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5MCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDIsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDkwLCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLAorCTB4NTYsIDB4OTAsIDB4MjIsIDB4NDAsIDB4MmQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAorCTB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDFiLCAweDk4LCAweDAxLCAweDAwLCAweDU2LCAweDkwLCAweDAwLCAweDVjLAorCTB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg5MiwgMHgwMCwgMHg0MCwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDVhLCAweDkwLCAweDIzLCAweDBkLCAweDJjLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OTAsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDYyLCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg1ZSwgMHg5MCwgMHhhOCwgMHg0NiwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI3LCAweDkzLCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg2NywgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4NmQsIDB4OTAsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg3MSwgMHg5MCwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk0LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDcxLCAweDkwLCAweGEyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg4NiwgMHg5MCwgMHgyMiwgMHg0YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDc3LCAweDkwLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDgyLCAweDkwLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2IsIDB4OTAsIDB4YTIsIDB4ZjMsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg1LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAorCTB4N2YsIDB4OTAsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsCisJMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgzLCAweDkwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDE2LCAweGU0LCAweGIxLCAweDAwLCAweDAwLAorCTB4ODksIDB4OTAsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkNiwgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDk2LCAweDkwLCAweDIyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OTAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4ZSwgMHg5MCwgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGQwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OTAsIDB4MjIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDJkLCAweDAwLAorCTB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MmQsIDB4ZjAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyZCwgMHg4ZSwgMHgwMCwgMHhmMCwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHg5NSwgMHgwMCwgMHg0MSwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDlkLCAweDkwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTAsIDB4MjMsIDB4MGQsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGQ2LCAweDkwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4MDEsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLAorCTB4YWQsIDB4OTAsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhNiwgMHg5MCwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgyMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgyMywgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGIwLCAweDkwLCAweDIzLCAweDBkLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNSwgMHg5MCwgMHgyMiwgMHg0MCwKKwkweDFiLCAweDZjLCAweDAwLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDAxLCAweDg0LCAweDUwLCAweDAxLCAweDAwLAorCTB4YmQsIDB4OTAsIDB4MjIsIDB4NDAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGExLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YmIsIDB4OTAsIDB4YTgsIDB4MTEsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTAsIDB4MDAsIDB4NWUsCisJMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg5MCwgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YzUsIDB4OTAsIDB4MjIsIDB4NDAsIDB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhjYywgMHg5MCwgMHgyMiwgMHg0MCwKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg0MywgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg5MCwgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4Y2QsIDB4OTAsIDB4YTgsIDB4MGEsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDkwLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDExLAorCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg5NCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwKKwkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTMsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MSwKKwkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDNjLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZTcsIDB4OTAsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGUzLCAweDkwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlOSwgMHg5MCwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHgxYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhlZiwgMHg5MCwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDdkLCAweDk1LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGY3LCAweDkwLCAweDIyLCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHg3ZCwgMHg5NSwgMHgwMCwgMHg0MSwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmMiwgMHg5MCwgMHgyMiwgMHgwOCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDlkLCAweDkwLCAweDAwLCAweDAwLCAweDJhLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTAsIDB4MjMsIDB4MGQsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4MywgMHg5NCwgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZiLCAweDkwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4YzEsIDB4OTIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDk1LCAweDAwLCAweDA2LCAweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDkxLCAweGEyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgyYywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweGE3LCAweDkxLCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTEsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDA3LCAweDkxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDkxLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAorCTB4ZjEsIDB4OTMsIDB4MDAsIDB4NDUsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZmQsIDB4OTAsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEwLCAweDkxLCAweGE4LCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZCwgMHg5MCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4NDEsCisJMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE5LCAweDkxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHg5MSwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4MjIsIDB4OTEsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NGYsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDMwLCAweDkxLCAweDIyLCAweDRhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjgsIDB4OTEsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MjIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk2LCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHgxNiwKKwkweGU0LCAweGIxLCAweDAwLCAweDAwLCAweDE3LCAweDkwLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGMxLCAweDkyLCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDJiLCAweDkwLCAweDAwLCAweDEwLAorCTB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzYSwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDNkLCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NDEsIDB4OTMsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDkxLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlYywgMHg4ZSwgMHgwMCwgMHg0NSwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4MDEsCisJMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDUxLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAorCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5MSwgMHgzNywgMHg1YywKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NGUsIDB4OTEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDg3LCAweDE3LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MjAsIDB4MDgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHgwMSwgMHgyMCwgMHgxNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg5MywgMHgwMCwgMHg0NywKKwkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDNjLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmIsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg2MywgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDkxLCAweGEyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAorCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHgxNSwKKwkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MjAsIDB4MDgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHgwMSwgMHgyMCwgMHgxNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMSwgMHg5MiwgMHgwMCwgMHgxMCwKKwkweDMyLCAweDMwLCAweDAxLCAweDAwLCAweDJiLCAweDkwLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAwLCAweDAwLAorCTB4OGMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzMsIDB4OTEsIDB4YTIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmMsIDB4OTEsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5MSwgMHgyOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDZkLCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4OTEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAorCTB4YjcsIDB4OTMsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDgyLCAweDkxLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg3ZSwgMHg5MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MmQsIDB4OGUsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDAwLCAweDJkLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDhlLCAweDAwLCAweDQ0LAorCTB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4OTEsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLAorCTB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4MDEsCisJMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDkwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDhlLCAweDAwLCAweDQ1LAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MzcsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzMywgMHhjMywgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OTYsIDB4OTEsIDB4ODUsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDgsCisJMHgwMywgMHhkMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg5MSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDlmLCAweDRjLCAweDAzLCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLAorCTB4MzQsIDB4YzMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4OWQsIDB4OTIsIDB4MDAsIDB4NDEsIDB4ZTEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YTQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHgwMSwgMHg4YywgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHg5MSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4NCwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDkxLCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OTUsIDB4MDAsIDB4NDcsCisJMHgxOSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgyZCwgMHg0NCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDYxLCAweDk1LCAweDAwLCAweGYwLAorCTB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjNSwgMHg5MSwgMHhhMiwgMHg0YiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxOCwgMHg5MiwgMHhhMiwgMHg0YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGM1LCAweDkxLCAweDFmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAorCTB4YzgsIDB4OTEsIDB4YTIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4NDYsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg5MSwgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGMwLCAweDkxLCAweDIyLCAweGYwLAorCTB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MWYsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0ZiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDhhLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MTYsIDB4OTIsIDB4MjAsIDB4NDIsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YzQsIDB4OTEsIDB4MjIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDU4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGM3LCAweDkxLCAweDIyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1YiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTEsIDB4YTIsIDB4NDIsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTEsIDB4MjMsIDB4ZjAsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhkMiwgMHg5MSwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDE3LCAweDkyLCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDE3LCAweDkyLCAweGEyLCAweDQxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4OTEsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1MSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDE3LCAweDkyLCAweDFmLCAweDEyLCAweDg0LCAweDUwLCAweDAwLCAweDAwLAorCTB4MTcsIDB4OTIsIDB4YTAsIDB4MDEsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzUsIDB4OTEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDkyLCAweGEyLCAweDQ2LCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjIsIDB4OTEsIDB4MjIsIDB4ZjAsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkZSwgMHg5MSwgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhlZiwgMHg5MSwgMHgwMywgMHgxZSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGRkLCAweDkxLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5MSwgMHgyMiwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGU2LCAweDkxLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUyLCAweDkxLCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5MSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweGVjLCAweDkxLCAweDIwLCAweDkxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGViLCAweDkxLCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyNywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhlZSwgMHg5MSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTEsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4OTEsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmOCwgMHg5MSwgMHhhMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MSwgMHhhMiwgMHhmMiwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OTEsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGY4LCAweDkxLCAweGEwLCAweDkxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4OTEsIDB4MjIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHg5MSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDksIDB4OTIsIDB4YTIsIDB4ZjAsCisJMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA2LCAweDkyLCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmOCwgMHg5MSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg5MSwgMHgyMCwgMHg5MSwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MGQsIDB4OTIsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OTIsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDkyLCAweDIyLCAweDBhLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxMSwgMHg5MiwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NSwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU2LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4OTIsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDkyLCAweDAwLCAweDQzLCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDkyLCAweDAwLCAweDQxLAorCTB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OTIsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxYSwgMHg5MiwgMHgwMCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg5MiwgMHgwMCwgMHg0YywKKwkweDk1LCAweGIwLCAweDAwLCAweDAwLCAweGM5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MWQsIDB4OTIsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4OTIsIDB4YTIsIDB4ZjMsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyYSwgMHg0MSwKKwkweGU3LCAweGQxLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNkLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4OTIsIDB4MjIsIDB4NWEsCisJMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDkyLCAweDAwLCAweDVhLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMCwgMHhhNSwgMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4ZjAsCisJMHg4YywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MiwgMHgyMiwgMHg0MCwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDMzLCAweDkyLCAweGEyLCAweDRiLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OTIsIDB4MjIsIDB4ZjAsIDB4MTgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5MiwgMHgwMCwgMHgwNywKKwkweDEwLCAweDMwLCAweDAxLCAweDAwLCAweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzgsIDB4OTIsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODUsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OTIsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4OTIsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MiwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQ0LCAweDkyLCAweGExLCAweGFkLCAweDk1LCAweDIwLCAweDAwLCAweDAwLCAweDUyLCAweDkyLCAweDEzLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NGEsIDB4NWEsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgzOSwgMHg0NSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwZiwKKwkweDVlLCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDVmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisJMHg0OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDU4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorCTB4NGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4NWQsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQxLCAweDk3LCAweGIwLCAweDAwLCAweDAwLAorCTB4NGYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MywgMHg5MiwgMHg2MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDRiLCAweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweGMyLAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWQsIDB4OTIsIDB4YTIsIDB4NDUsIDB4MjUsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg1NywgMHg5MiwgMHgzMSwgMHgyMCwgMHg4NSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg5MiwgMHgyMiwgMHgxMiwKKwkweDQ4LCAweDdmLCAweDAwLCAweDAwLCAweDU4LCAweDA0LCAweDExLCAweDEyLCAweDQ4LCAweDAzLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDVkLCAweDkyLCAweDMxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4OTIsIDB4MjIsIDB4MTIsIDB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHg1OCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDZiLCAweDkyLCAweDBiLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTEsIDB4MTIsIDB4NDgsIDB4ODMsIDB4MDEsIDB4MDAsIDB4NjgsIDB4OTIsIDB4MjIsIDB4NTAsCisJMHg4NSwgMHg3MCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDJhLCAweDk0LCAweDAwLCAweGYyLCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDkzLCAweDA0LCAweDAwLCAweDEyLAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKKwkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQyLCAweDEwLCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjcsIDB4M2YsIDB4NDMsIDB4MTEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4YSwgMHg4OCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg5MiwgMHgzMCwgMHhhMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDcxLCAweDkyLCAweDIyLCAweDQ1LCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDVlLCAweDkyLCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDUsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDg1LCAweDgwLCAweDAxLCAweDAwLAorCTB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmEsIDB4OTQsIDB4MDAsIDB4ZjIsCisJMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OTIsIDB4MjIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDkyLCAweGE4LCAweDA1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEyLAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NGIsIDB4OTYsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwKKwkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDQyLCAweDg0LCAweDg4LCAweDAxLCAweDAwLAorCTB4ODksIDB4OTIsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4OTIsIDB4MDAsIDB4NDIsCisJMHg2OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2YSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDhhLCAweDkyLCAweDMxLCAweDVhLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDQyLAorCTB4NDgsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MzUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg5MiwgMHgyOCwgMHhiMSwKKwkweDJjLCAweDMwLCAweDAwLCAweDAwLCAweDhkLCAweDkyLCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg5MiwgMHhhOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdmLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTIsIDB4MjgsIDB4YjEsIDB4MTAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg5MiwgMHg5ZiwgMHhiYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDExLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDI0LCAweDExLCAweDg0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDlhLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDk0LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTIsIDB4MzIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhNCwgMHg5MiwgMHgyMiwgMHhmOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKKwkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDkyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4OTIsIDB4NDgsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDkyLCAweDI4LCAweGIxLCAweDkyLCAweDMwLCAweDAwLCAweDAwLCAweGE0LCAweDkyLCAweDIyLCAweDRjLAorCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTIsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5MiwgMHhhOCwgMHhiMSwKKwkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQ4LCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDkyLCAweDQ5LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGI1LCAweDkyLCAweDIyLCAweDFhLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiMSwgMHg5MiwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGJlLCAweDkyLCAweDIyLCAweDBkLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5MiwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGMzLCAweDkyLCAweDgzLCAweDFlLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgyZCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4OTIsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg2NCwgMHg5NywgMHgzZSwgMHg0MywgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNlLCAweDQzLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGIsIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2YsIDB4NDMsCisJMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNmLCAweDQzLAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNywgMHgzZCwgMHg0MywKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDgwLCAweGExLCAweDE2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDksIDB4OTIsIDB4MzAsIDB4NDcsCisJMHgxNywgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg5MiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDkwLCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTIsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4ZTEsIDB4OTIsIDB4NDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlYiwgMHg5MiwgMHhhMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAxLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4ZmUsIDB4OTIsIDB4MDAsIDB4M2IsIDB4ZTcsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4OTIsIDB4MzAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5MiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweGYxLCAweDkyLCAweGEyLCAweDBiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5OCwgMHg0MiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDEsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMSwgMHhhMiwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDRhLCAweDQ0LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNlLCAweDQxLAorCTB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCisJMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDQzLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5MywgMHg0MCwgMHgwOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDkzLCAweDIyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAorCTB4MGEsIDB4OTMsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5MywgMHgzMSwgMHg1ZiwgMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDExLCAweDRiLCAweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4OTMsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZCwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDE2LCAweDkzLCAweGEyLCAweDNiLAorCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNywgMHg5MywgMHgxOCwgMHg0YSwKKwkweDQ0LCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4OTMsIDB4MjIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDVlLCAweDk0LCAweDAxLCAweDAwLCAweDFlLCAweDkzLCAweDAwLCAweDA1LAorCTB4NGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4YTcsIDB4NWUsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg5MywgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDlkLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI2LCAweDkzLCAweDIyLCAweDQ1LAorCTB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg5YiwgMHgwNCwgMHgwMCwgMHg0YSwgMHg0NCwgMHgxMywgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NywgMHgzZiwgMHg0MSwKKwkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsCisJMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyZSwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNywgMHg5MywgMHhhMiwgMHgzYiwKKwkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MTIsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5MiwgMHgwMCwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZTYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmYsIDB4NGYsIDB4OTUsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHg0YiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZTMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmQsIDB4NDQsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYyLCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDEwLAorCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0YywgMHgwMiwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTMsIDB4MjIsIDB4NDEsIDB4MDMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MywgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHg1YywKKwkweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MmQsIDB4MDYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MSwKKwkweDgyLCAweGNjLCAweDAxLCAweDAwLCAweDVhLCAweDkzLCAweGFhLCAweDQxLCAweDNiLCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDdiLCAweDkzLCAweDI2LCAweDQ2LCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAzLAorCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDEsIDB4MjAsIDB4ZjAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3YSwgMHg5MywgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NmMsIDB4OTMsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHg3OSwgMHg5MywgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3NywgMHg5MywgMHhhMiwgMHg0MSwKKwkweDIzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5MywgMHhhOCwgMHg0NiwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg2NywgMHg5MywgMHgwMCwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4MWEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5MywgMHgyMiwgMHg0MCwgMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDVjLAorCTB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OTMsIDB4MDAsIDB4NDEsIDB4M2IsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHg0NywgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHg1ZiwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDg4LCAweDkzLCAweDhjLCAweGY4LCAweDhlLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJlLCAweGY4LCAweDBjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MmEsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDk1LCAweDkzLCAweDIwLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMCwgMHg0YSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDIwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTMsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MmQsIDB4NDIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDliLCAweDkzLCAweGEyLCAweGE1LAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5ZSwgMHg5MywgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsCisJMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGEzLCAweDkzLCAweGEwLCAweGE1LCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4NDEsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg5MywgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKwkweDk4LCAweGRjLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDRjLCAweGU0LCAweGY1LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4ODAsIDB4MDAsCisJMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweGMzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg5NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHhjYiwgMHg5MywgMHg5ZiwgMHg0MSwKKwkweDg1LCAweDUwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGNjLCAweDAxLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4YTAsIDB4NDIsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDAsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MywgMHg1MiwgMHg0MywgMHg4MSwgMHg2MCwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweGQxLCAweDkzLCAweDAwLCAweDQxLAorCTB4ODAsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDIsIDB4OTMsIDB4OWUsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDcsIDB4OTMsIDB4YTIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDE1LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDNjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2EsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OTMsIDB4OWMsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMSwgMHg5MywgMHhhMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDRjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDFlLAorCTB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTMsIDB4YTIsIDB4NDgsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5MywgMHhhMiwgMHg4YSwKKwkweGYxLCAweDZkLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweGNjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4M2UsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHgyOCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGViLCAweDkzLCAweDIwLCAweGYwLCAweDNlLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMywKKwkweDNhLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweGYwLAorCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNiwgMHgxNCwgMHhlYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHgyMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDA2LCAweDJhLCAweGVjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJhLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5NCwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg5NCwgMHg2MiwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBkLCAweDk0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwZiwgMHg5NCwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxOSwgMHg5NCwgMHg2MiwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFhLCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4OTQsIDB4YTgsIDB4MDAsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDRhLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDk3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTQsIDB4NjMsIDB4NDIsCisJMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg5NCwgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMywgMHg5NCwgMHgyMiwgMHhmMywKKwkweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDk0LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZTcsIDB4ODUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4NTUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MywgMHg5NCwgMHg4MiwgMHg0MSwKKwkweDIzLCAweDQwLCAweDAwLCAweDAwLCAweDM4LCAweDk0LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YTcsIDB4OTEsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzZSwgMHg5NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4NDMsIDB4OTQsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTIsIDB4MDAsIDB4NDMsCisJMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDk0LCAweGEzLCAweDE1LCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDQ2LCAweDk0LCAweDAwLCAweDA2LAorCTB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHg5NCwgMHgyMCwgMHgwMiwgMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDk1LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAorCTB4NzIsIDB4OTQsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OTQsIDB4YTIsIDB4MDIsCisJMHgyYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg5NCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDRlLCAweDk0LCAweDIyLCAweDAyLCAweDBjLCAweDUwLCAweDAwLCAweDAwLCAweDU3LCAweDk0LCAweDAwLCAweDAyLAorCTB4MTYsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4OTQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTIsIDB4OTQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGYxLCAweDkzLCAweDAwLCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzIsIDB4OTQsIDB4MjIsIDB4MTUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3MSwgMHg5NCwgMHhhMiwgMHgwMiwKKwkweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDYzLCAweDk0LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4NzAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg2MywgMHg5NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NWYsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MmYsIDB4NWMsCisJMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKKwkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDFiLCAweDk4LCAweDAxLCAweDAwLCAweDM1LCAweDk0LCAweDIwLCAweDE1LAorCTB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LCAweGUwLCAweDhkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg5NCwgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDM1LCAweDk0LCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDM1LCAweDk0LCAweDAwLCAweDAyLAorCTB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTQsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhNywgMHg5MSwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKKwkweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MjcsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MSwgMHhhMywgMHg0MSwgMHgwMSwgMHgwMCwKKwkweDdmLCAweDk0LCAweDAwLCAweDQxLCAweDI3LCAweGQwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ODYsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHgwNiwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGM0LCAweDAxLCAweDAwLCAweDhlLCAweDk0LCAweGEwLCAweGYwLAorCTB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwZSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwKKwkweDMwLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4ZjAsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OTQsIDB4MjIsIDB4NGEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0MywgMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDMwLCAweDAwLCAweDBiLCAweDE2LCAweGM4LCAweDAxLCAweDAwLCAweDk3LCAweDk0LCAweGE0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHg5NCwgMHgyMiwgMHgwNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhNCwgMHg5NCwgMHhhMiwgMHgwNiwKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDk0LCAweDIyLCAweDQ4LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4OWMsIDB4OTQsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDQ4LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MjAsIDB4NDUsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHhhNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGE0LCAweDk0LCAweGEwLCAweDQ4LCAweDE3LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywgMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDBmLCAweDk1LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTQsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4YWUsIDB4OTQsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhiMywgMHg5NCwgMHg2NCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGE0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGIzLCAweDk0LCAweGEyLCAweGYyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4YywgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA2LCAweDMwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MmQsIDB4NDYsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDUwLCAweDAwLCAweDQzLAorCTB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGYsIDB4OTUsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxOSwgMHhmYywgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLCAweGY5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzEsIDB4OTQsIDB4YTAsIDB4ZjAsCisJMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGU0LCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE2LCAweDRjLCAweDk1LCAweDYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRhLAorCTB4MTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwMSwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxNSwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGQxLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHg1ZiwKKwkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4N2EsIDB4MDEsIDB4MmUsIDB4ZmUsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4ZjYsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5NCwgMHgyMiwgMHg0MywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGE2LAorCTB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4NmUsIDB4MDYsIDB4ODIsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhlMiwgMHg5NCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDQ1LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweDRjLCAweDgzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OTQsIDB4NDMsIDB4MzAsCisJMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg5ZSwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFiLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhlYywgMHg5NCwgMHgyNiwgMHgzMCwKKwkweDkzLCAweDA0LCAweDAwLCAweDAwLCAweGVjLCAweDk0LCAweDkwLCAweDRjLCAweDkyLCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ODAsIDB4NDksCisJMHhlYywgMHhhOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxNSwKKwkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGYxLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZmUsIDB4OTQsIDB4MjIsIDB4NWYsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4OTQsIDB4YTIsIDB4NDAsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTcsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZCwgMHg5NCwgMHgyOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZhLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MjEsIDB4ODEsIDB4ODQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTUsIDB4YTIsIDB4NWYsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MywgMHgxOSwgMHg3YywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwKKwkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDBjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxNSwgMHg5NSwgMHgyMCwgMHg0YywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDg4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDE1LCAweDk1LCAweDIwLCAweGYyLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5OCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweGEzLCAweDAwLCAweDJkLCAweDE0LCAweDk4LCAweGQwLCAweDAxLCAweDAwLAorCTB4MWEsIDB4OTUsIDB4MjAsIDB4NGMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDFkLCAweDk1LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MTQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5OCwgMHgwMCwgMHgyNSwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmMywKKwkweDgwLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQyLCAweDgyLCAweGMwLCAweDAwLCAweDAwLAorCTB4MjMsIDB4OTUsIDB4YTAsIDB4NDAsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwgMHg4MiwgMHhlYywgMHgwMCwgMHgwMCwKKwkweDk4LCAweDAwLCAweGEwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYSwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGE4LCAweDAwLCAweDJkLCAweDFjLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLAorCTB4OGEsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OGIsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGE0LCAweDAwLCAweDJkLCAweDQ1LCAweGUwLCAweGQxLCAweDAxLCAweDAwLAorCTB4MzcsIDB4OTUsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmUsIDB4MDAsIDB4MmYsIDB4YWIsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg5NSwgMHgwMCwgMHgxNCwgMHg4MiwgMHg1MCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDNjLCAweDk1LCAweDIyLCAweGYyLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzYywgMHg5NSwgMHg5ZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDg4LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YTgsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4MzAsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk0LCAweDAwLCAweDJkLCAweGYyLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDRmLCAweDk1LCAweDIzLCAweGYwLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTUsIDB4MjMsIDB4OTIsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhjOSwgMHgwNCwgMHgwMCwgMHhhNiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4NjAsIDB4ODksIDB4MDAsIDB4NGEsIDB4OTQsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDYsIDB4OTUsIDB4NjgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhiMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDAwLCAweDJkLCAweDQyLCAweGIyLCAweGIxLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYzLAorCTB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4OTUsIDB4ZDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3OCwgMHhkYSwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg5NSwgMHgyMywgMHg0MCwKKwkweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDIwLCAweDlkLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4MDAsIDB4MmQsIDB4NDMsCisJMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMywgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDk1LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDIwLCAweDlkLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHg5NSwgMHhhMiwgMHhmMCwgMHgzOCwgMHg2YywgMHgwMCwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDYsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MjAsIDB4NDIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLAorCTB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4NWUsIDB4OTUsIDB4MjMsIDB4NDEsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwYywKKwkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4YTAsIDB4ZjIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDEsCisJMHgyNCwgMHhlYywgMHgwMCwgMHgwMCwgMHg2OCwgMHg5NSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDlmLCAweDQyLCAweDM4LCAweGVjLCAweDAwLCAweDAwLCAweDY4LCAweDk1LCAweGE2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg5NSwgMHhhMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NmUsIDB4OTUsIDB4MjIsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MjAsIDB4MWQsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyZCwgMHg1ZiwgMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDZlLCAweDk1LCAweDIzLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDIwLCAweDFkLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwMCwgMHhhMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzcsIDB4OTUsIDB4OWYsIDB4NDEsCisJMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDhjLCAweGQwLCAweDAxLCAweDAwLCAweDc4LCAweDk1LCAweDAwLCAweDQxLAorCTB4MjQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDgxLCAweDk1LCAweGEyLCAweDQwLAorCTB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgyZiwgMHg0MCwKKwkweDExLCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4ZjgsIDB4M2UsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4MTIsCisJMHhlMCwgMHhlZCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMCwgMHgyMCwgMHhhYiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDAwLCAweGEwLCAweDFmLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDhhLCAweDk1LCAweGEzLCAweDVmLAorCTB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTcsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhhNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NSwgMHgyMiwgMHhmMiwKKwkweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweGY0LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MmQsIDB4NDIsCisJMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg0MCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDkyLCAweDk1LCAweDFmLCAweDQzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDkzLCAweDk1LCAweGEyLCAweDQwLAorCTB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5NywgMHg5NSwgMHg5ZiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg0LCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDAwLCAweDJlLCAweDQyLCAweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQwLAorCTB4ODgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OTUsIDB4MWYsIDB4NDQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMSwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhMSwgMHg5NSwgMHg2MiwgMHg0MSwKKwkweDg5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDYyLCAweDQxLCAweDg2LCAweGU0LCAweDAxLCAweDAwLAorCTB4YjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4NDEsCisJMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEyLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDJlLCAweDQzLAorCTB4ODcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhhNywgMHg5NSwgMHgyMCwgMHg0MywgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDQzLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4NDMsIDB4ZTQsIDB4MzEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDEsIDB4ZTIsIDB4NDAsCisJMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDAwLCAweDJkLCAweGYyLCAweDJlLCAweGIwLCAweDAxLCAweDAwLCAweDljLCAweDAwLCAweDJkLCAweGYwLAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg5NSwgMHhhMiwgMHgxMiwKKwkweDk4LCAweDZjLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDJkLCAweGYyLCAweDk4LCAweGIwLCAweDAxLCAweDAwLAorCTB4YjQsIDB4OTUsIDB4YTAsIDB4ZjIsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGI0LCAweDAwLCAweDJkLCAweDEyLCAweDg2LCAweGQwLCAweDAxLCAweDAwLCAweGI3LCAweDk1LCAweGEzLCAweDQxLAorCTB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTUsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyZCwgMHg0MywKKwkweDg0LCAweGQwLCAweDAxLCAweDAwLCAweGJiLCAweDk1LCAweDlmLCAweDQyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmQsIDB4OTUsIDB4YTMsIDB4NDIsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhiZSwgMHg5NSwgMHgwMCwgMHgwYSwgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDk1LCAweGEwLCAweDE3LAorCTB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTcsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjNSwgMHg5NSwgMHgyMiwgMHg0MCwgMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwYSwKKwkweDBjLCAweGVjLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGY0LCAweDAxLCAweDAwLAorCTB4YzUsIDB4OTUsIDB4YTAsIDB4NDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ZjAsCisJMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDlkLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwKKwkweDg3LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNywgMHg5NSwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDEwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGRjLCAweDk1LCAweDI4LCAweDQwLAorCTB4ODcsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4OTUsIDB4MjIsIDB4NDgsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg3ZSwgMHg5NCwgMHgxZCwgMHg0NiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZiwgMHg5NSwgMHgyMiwgMHg1ZiwKKwkweDExLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDE1LCAweDYyLCAweDMxLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OTUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE0LCAweDJmLCAweDRjLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg5NiwgMHgwMCwgMHg0OSwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDQ5LCAweDA2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDAzLAorCTB4MDYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhhMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDkzLCAweGMwLCAweDAxLCAweDAwLCAweGU5LCAweDk1LCAweGEwLCAweDU0LCAweDkzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAyLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGYyLCAweDk1LCAweGEyLCAweDQxLAorCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgzYiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhjOCwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDJlLCAweDA4LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjksIDB4OTUsIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOCwgMHgyZSwgMHgwNSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDEsIDB4OTYsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTYsIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDZmLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4OTYsIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDM5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgzMywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDNmLCAweGIzLCAweDAxLCAweDAwLCAweGVlLCAweDA1LCAweDAwLCAweDQwLAorCTB4MjUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NGIsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDJkLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyYiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlZiwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweGYxLCAweDkzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGE1LAorCTB4M2MsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4NWIsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg0NSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDU5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg1MywgMHhiMywgMHgwMSwgMHgwMCwgMHgyYiwgMHg5NiwgMHhhMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDJiLCAweDk2LCAweGEyLCAweDUxLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDJjLCAweDk2LCAweDAwLCAweDQwLAorCTB4MWQsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDYsIDB4MDAsIDB4NDAsIDB4MWQsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwgMHg4OCwgMHhiMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHhhNiwKKwkweDNhLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDlkLCAweDNiLCAweDliLCAweDAxLCAweDAwLAorCTB4YjQsIDB4MDUsIDB4MDAsIDB4NDAsIDB4MjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0ZCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwYSwgMHgwMCwgMHhhNiwgMHgxNCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAxLCAweDAwLCAweDhhLCAweDE1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LAorCTB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWUsIDB4NTcsIDB4YjUsIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgyMCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDQzLCAweDAwLCAweDRiLCAweDk2LCAweGM4LCAweDAxLCAweDAwLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgyMCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NywgMHgyMSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk5LCAweDJlLCAweDBhLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTYsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4OTYsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDQ0LCAweDk2LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTYsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LAorCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwKKwkweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4NDEsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMiwgMHg5ZiwgMHgyMiwgMHg0MCwgMHg3YiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDEsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhjNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweGM2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGEyLCAweGM4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4YTgsIDB4OWYsIDB4MDAsIDB4NGQsCisJMHg5YSwgMHhjYywgMHgwMSwgMHgwMCwgMHhiYiwgMHg5ZiwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGI5LCAweDlmLCAweGEyLCAweDQxLAorCTB4OWIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OWYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MiwgMHg0OSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGMyLCAweDlmLCAweDAwLCAweDQyLCAweGNkLCAweDkzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhjMiwgMHg5ZiwgMHgwMCwgMHg0MywgMHhjYiwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDUwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGQyLCAweDlmLCAweDAwLCAweDQwLAorCTB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDRkLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAorCTB4Y2EsIDB4OWYsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDlhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLAorCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwKKwkweDQ1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDdiLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDgsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwKKwkweDgxLCAweGM4LCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweDQwLCAweGYyLCAweDkzLCAweDAwLCAweDAwLAorCTB4NDAsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQ3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDVkLCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzMywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNiwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQwLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OWEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzcmN2dWNvZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzcmN2dWNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjM1MzFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5oCkBAIC0wLDAgKzEsMjA1IEBACisjZGVmaW5lIE9BU0lTX1JDVlVDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCisjZGVmaW5lIE9BU0lTX1JDVlVDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEwOjI4IgorCitzdGF0aWMgdTMyIE9hc2lzUmN2VUNvZGVMZW4gPSA1MTI7CisKK3N0YXRpYyB1OCBPYXNpc1JjdlVDb2RlWzI1NjBdID0KK3sKKzB4NDcsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MDQsIDB4YTAsIDB4MTMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YjcsIDB4NWIsIDB4MDksCisweDMwLCAweDAwLCAweGI2LCAweDVmLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDNiLAorMHg3OCwgMHgzYSwgMHgwMCwgMHgxYywgMHhhMiwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHgwNywgMHgxZCwgMHgwMSwgMHg3MCwKKzB4MTgsIDB4YWQsIDB4N2IsIDB4ZjEsIDB4ZmYsIDB4MWMsIDB4YjMsIDB4N2IsIDB4YTksIDB4YWEsIDB4MWUsIDB4YjQsIDB4N2IsCisweDAxLCAweDBjLCAweDFjLCAweGI1LCAweDdiLCAweDBkLCAweDA2LCAweDFjLCAweDAwLCAweDAwLCAweDMwLCAweDY0LCAweDA4LAorMHgwYywgMHgzMSwgMHg1YSwgMHg3MCwgMHgwNCwgMHgwYywgMHgzMSwgMHg1YSwgMHg4MCwgMHgwNCwgMHgwYywgMHgzMSwgMHg0ZSwKKzB4OTAsIDB4MDQsIDB4MGMsIDB4MzEsIDB4NGEsIDB4YTAsIDB4MDAsIDB4MDksIDB4MjUsIDB4NTUsIDB4YzAsIDB4MDQsIDB4MGMsCisweDMxLCAweDUyLCAweGIwLCAweDAwLCAweGU5LCAweDI0LCAweDU1LCAweGMwLCAweDA0LCAweGNjLCAweGIzLCAweDAwLCAweDFjLAorMHgxYywgMHhlYiwgMHgyZCwgMHgwMSwgMHgwMCwgMHgxYywgMHgwNiwgMHg1NiwgMHgzMiwgMHhkNCwgMHgwOCwgMHgwNywgMHg5ZCwKKzB4MDAsIDB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsIDB4MDIsIDB4MDAsIDB4MTAsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksCisweDA2LCAweDU2LCAweDVlLCAweGMwLCAweDA0LCAweGEwLCAweDMwLCAweDU0LCAweDAzLCAweDAwLCAweGFjLCAweDMwLCAweDU1LAorMHgwMywgMHgwMCwgMHhjZCwgMHgwMywgMHgzYSwgMHgwMCwgMHgxYywgMHg3YiwgMHhiNywgMHgwMiwgMHgwMCwgMHgxYywgMHg2MCwKKzB4OGUsIDB4MzEsIDB4NTQsIDB4MDksIDB4MjksIDB4MjUsIDB4NTUsIDB4MDMsIDB4MDAsIDB4ODAsIDB4OGUsIDB4MzEsIDB4NTQsCisweDA5LCAweDhjLCAweDMwLCAweDkxLCAweDAwLCAweDA0LCAweDQ3LCAweDFjLCAweDAxLCAweDAwLCAweDFjLCAweGEwLCAweDBmLAorMHgzMSwgMHg1NCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwNCwgMHg0NywgMHgxYywgMHg2NSwgMHhjMCwgMHgwNCwKKzB4NDcsIDB4MWMsIDB4NTUsIDB4MDMsIDB4MDAsIDB4NmMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NGQsIDB4MzQsIDB4MDIsCisweDAwLCAweDFjLCAweDdiLCAweGI3LCAweDAyLCAweDAwLCAweDFjLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGM4LAorMHg4MywgMHgzNywgMHgwMCwgMHgxYywgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMCwKKzB4MDQsIDB4YTAsIDB4MGYsIDB4MzAsIDB4NTQsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4N2IsIDB4ZmIsCisweGYyLCAweDAwLCAweDFjLCAweGNjLCAweDMzLCAweDBkLCAweDAwLCAweDFjLCAweGI0LCAweDdiLCAweGZkLCAweDAzLCAweDFjLAorMHg4MCwgMHgwZSwgMHgzMCwgMHg1NCwgMHgwOSwgMHhlMCwgMHhmYiwgMHgwNSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg4YywKKzB4MDMsIDB4MDAsIDB4YjMsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4MDAsIDB4MDAsIDB4ZWMsIDB4NzAsIDB4MDQsIDB4MDAsCisweDAwLCAweGVjLCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDhjLCAweDkzLCAweDAwLCAweDYxLCAweDc2LCAweDhkLCAweGMzLAorMHgwNCwgMHhjMCwgMHg4ZCwgMHgzMSwgMHg1NCwgMHgwOSwgMHhlMCwgMHg3YiwgMHgwMCwgMHhjMCwgMHgxZiwgMHhhMCwgMHhmZCwKKzB4YzUsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MzMsIDB4MDUsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4MDMsIDB4MDAsIDB4M2MsIDB4MWMsCisweGQ0LCAweGQzLCAweDFiLCAweDAwLCAweDFjLCAweGMwLCAweGQzLCAweDUyLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDVjLAorMHgxMywgMHgwNCwgMHg4ZSwgMHg4ZSwgMHgzMiwgMHg1NCwgMHgwOSwgMHg1YiwgMHg4MCwgMHg1ZSwgMHgxMywgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsCisweDA5LCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGMwLCAweDAzLCAweGZjLCAweDdmLCAweDFjLCAweGEwLCAweDAxLAorMHhhMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwKKzB4YzAsIDB4MDMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4ZjUsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MjYsIDB4N2EsIDB4ZTYsCisweDA1LCAweDFjLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGIzLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGI1LAorMHgwMiwgMHgwMiwgMHgwMCwgMHgxYywgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHg3YSwgMHg3ZSwgMHgwMiwgMHgwMCwKKzB4MWMsIDB4YjUsIDB4MDIsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4YWYsIDB4MDMsCisweDAxLCAweDAwLCAweDFjLCAweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LCAweGI1LCAweDAyLCAweDAyLCAweDAwLCAweDFjLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxYywgMHhhMCwgMHgzZCwgMHhhYSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhYywKKzB4MTEsIDB4MDQsIDB4ZDQsIDB4ZDMsIDB4NTIsIDB4MDAsIDB4MWMsIDB4YjUsIDB4M2UsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MjAsCisweGZiLCAweGZkLCAweGZmLCAweDFmLCAweDgwLCAweDJjLCAweDZjLCAweDAzLCAweDAwLCAweGI5LCAweDNhLCAweDllLCAweDAxLAorMHgwMCwgMHg3NSwgMHgzYiwgMHgwMiwgMHgwMCwgMHgxYywgMHhhNywgMHgxYywgMHgwMSwgMHgwMCwgMHgxMCwgMHhkYiwgMHg4MywKKzB4MTYsIDB4MDAsIDB4MWMsIDB4YzcsIDB4MWQsIDB4MjEsIDB4YzEsIDB4MDQsIDB4YjksIDB4M2IsIDB4OGQsIDB4YzEsIDB4MDQsCisweDhiLCAweDJjLCAweDAxLCAweDAwLCAweDFjLCAweDZiLCAweDJjLCAweDM1LCAweGMxLCAweDA0LCAweDAwLCAweDAwLCAweDc4LAorMHgxMSwgMHgwMCwgMHhjYiwgMHgyYywgMHg3OSwgMHhjMSwgMHgwNCwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhMCwKKzB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4NTQsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NDksIDB4MjUsIDB4YjEsIDB4MDEsCisweDAwLCAweGFiLCAweDJjLCAweDgxLCAweGMxLCAweDA0LCAweGE3LCAweDFkLCAweDU1LCAweDAzLCAweDAwLCAweGNjLCAweDMzLAorMHgwOSwgMHgwMCwgMHgxYywgMHhlYiwgMHgyZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhlYSwgMHgyOSwgMHgwMSwgMHgwMCwgMHgxYywKKzB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YWUsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4MzEsCisweDU0LCAweDA5LCAweGQ0LCAweDA3LCAweGZjLCAweDAzLCAweDFjLCAweDk5LCAweDNhLCAweDAyLCAweDAwLCAweDFjLCAweGJiLAorMHgzOCwgMHgwMiwgMHgwMCwgMHgxYywgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhmYywgMHgwMSwKKzB4MDQsIDB4ZGIsIDB4M2IsIDB4N2UsIDB4MDAsIDB4MWMsIDB4YzcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MjYsIDB4N2EsCisweGZhLCAweDA1LCAweDFjLCAweDI3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGIzLCAweDBmLCAweDMxLCAweDU0LCAweDA5LAorMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHgzMiwKKzB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4NTMsCisweDBmLCAweDMyLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweDdhLCAweDA2LCAweDAyLCAweDAwLAorMHgxYywgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHhhZiwgMHgwMywgMHgwMSwgMHgwMCwgMHgxYywgMHg3YSwgMHgwZSwKKzB4MzIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksCisweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDMyLAorMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwgMHgwMCwgMHgzZCwgMHgwMiwgMHgwMCwgMHgxYywgMHgwMCwKKzB4MDAsIDB4NTgsIDB4MTIsIDB4MDAsIDB4Y2IsIDB4MmMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NzUsIDB4M2IsIDB4MDIsIDB4MDAsCisweDFjLCAweGE3LCAweDFjLCAweDAxLCAweDAwLCAweDEwLCAweGNiLCAweDJmLCAweDA1LCAweDAwLCAweDFjLCAweDYwLCAweDJjLAorMHgwMCwgMHgwMCwgMHgxYywgMHhjNywgMHgxYywgMHhjOSwgMHgwMiwgMHgwMCwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwKKzB4NTMsIDB4MDcsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NDYsIDB4N2EsIDB4Y2EsIDB4MDUsIDB4MWMsIDB4N2EsIDB4MGUsIDB4MzIsCisweDU0LCAweDA5LCAweDQwLCAweGZhLCAweDE5LCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDg4LCAweDAyLCAweDA0LCAweDQ2LAorMHg3YSwgMHhjYSwgMHgwNSwgMHgxYywgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwKKzB4MDksIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YjMsIDB4N2IsCisweDAxLCAweGMwLCAweDFmLCAweDc0LCAweDBlLCAweDMwLCAweDU0LCAweDA5LCAweGMwLCAweDAzLCAweDljLCAweDAwLCAweDFjLAorMHg4MCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhYywKKzB4MTIsIDB4MDUsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4ZDMsIDB4MmIsIDB4MDAsIDB4MWMsIDB4ZDQsCisweGQzLCAweDUyLCAweDAwLCAweDFjLCAweDgwLCAweDc2LCAweDdkLCAweDEzLCAweDA0LCAweDAwLCAweDAwLCAweGUwLCAweDAyLAorMHgwMCwgMHhhNiwgMHg3YiwgMHg5NSwgMHgwMywgMHgxMCwgMHhjNywgMHg5YywgMHgwMCwgMHgwMCwgMHgxYywgMHg4MCwgMHgyYywKKzB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsCisweGFiLCAweDJkLCAweGQ5LCAweDEyLCAweDA1LCAweDA3LCAweDFkLCAweGI1LCAweGMyLCAweDA0LCAweDhiLCAweDJkLCAweDAxLAorMHgwMCwgMHgxYywgMHg2OSwgMHgyNSwgMHgwMSwgMHgwMCwgMHgxYywgMHhhNiwgMHg3YiwgMHg5NSwgMHgwMywgMHgxMCwgMHhjYiwKKzB4MmYsIDB4MDksIDB4MDAsIDB4MWMsIDB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDMsCisweDAwLCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweDQ2LCAweDdhLCAweGNhLCAweDA1LCAweDFjLCAweDdhLCAweDBlLAorMHgzMiwgMHg1NCwgMHgwOSwgMHg0MCwgMHhmYSwgMHgxOSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgwNCwKKzB4NDYsIDB4N2EsIDB4Y2EsIDB4MDUsIDB4MWMsIDB4YjUsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4MzEsCisweDU0LCAweDA5LCAweDczLCAweGVjLCAweDJhLCAweDAzLCAweDA0LCAweDYwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweDAwLAorMHgwMCwgMHgyOCwgMHgwMywgMHgwMCwgMHhjNywgMHgxYywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgyOCwgMHgxMywKKzB4MDUsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YzAsIDB4ZDcsIDB4MjIsIDB4MDAsIDB4MWMsIDB4NzUsIDB4NTYsCisweDdlLCAweDEzLCAweDA0LCAweDYwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweGU3LCAweDFjLCAweDQ1LCAweDAzLCAweDA0LAorMHhlNywgMHg5YywgMHgwMCwgMHgwMCwgMHgxYywgMHhhNiwgMHg3YiwgMHg5NSwgMHgwMywgMHgxMCwgMHg4MCwgMHgyYywgMHgwMCwKKzB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4YjksCisweDdiLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDhjLCAweGMzLCAweDA0LCAweGNiLCAweGFmLCAweGZjLCAweDA3LAorMHgxYywgMHhjYiwgMHgyZiwgMHgwMSwgMHgwNCwgMHgxYywgMHhjNywgMHg5ZiwgMHg4MCwgMHgwMywgMHgxYywgMHgwMCwgMHgwMCwKKzB4OGMsIDB4YzMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4ZmMsIDB4MDcsIDB4MWMsIDB4Y2IsIDB4MmYsIDB4MGQsIDB4MDQsIDB4MWMsCisweGM3LCAweDlmLCAweDgwLCAweDAzLCAweDFjLCAweDAwLCAweDAwLCAweDhjLCAweGMzLCAweDA0LCAweGNiLCAweGFmLCAweDAwLAorMHhmOCwgMHgxZCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgwMCwgMHgxZCwgMHhhNiwgMHg3YiwgMHg5NSwgMHgwMywgMHgxYywgMHhjNywKKzB4OWMsIDB4OGMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MTMsIDB4MDUsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsCisweDFjLCAweGMwLCAweDFkLCAweGRjLCAweGQzLCAweDA4LCAweDI3LCAweDlkLCAweGU0LCAweDAzLCAweDAwLCAweGEwLCAweGVlLAorMHg0NiwgMHhkNCwgMHgwMCwgMHhmYiwgMHg3NSwgMHgwOSwgMHgxNCwgMHgwNCwgMHgyMCwgMHg3YiwgMHgwNiwgMHgwMCwgMHgxYywKKzB4YzAsIDB4MWMsIDB4MWMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4ZDMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweGY0LCAweDAwLCAweGMwLCAweGVmLCAweGYyLCAweDAwLCAweDFjLCAweDIwLCAweDI1LCAweDVjLCAweDE0LCAweDA0LCAweDYwLAorMHhiNywgMHhkMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgxNSwgMHgwMCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywKKzB4MWMsIDB4Y2MsIDB4MzMsIDB4MDUsIDB4MDIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YzUsIDB4MDQsIDB4NjAsIDB4YjcsCisweDBlLCAweDA1LCAweDA0LCAweDAwLCAweDAwLCAweDBjLCAweDE1LCAweDA0LCAweDAwLCAweDAwLCAweDVjLCAweGM0LCAweDA0LAorMHhjMCwgMHgxZCwgMHg5OCwgMHhmMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhjNCwgMHgwNCwgMHgwNywgMHg5ZCwgMHgwMCwKKzB4MDAsIDB4MWMsIDB4MWIsIDB4NzQsIDB4ZmQsIDB4ZjMsIDB4MDQsIDB4YTYsIDB4N2IsIDB4ZjEsIDB4MDMsIDB4MWMsIDB4YTAsCisweDBmLCAweDY5LCAweDU0LCAweDA5LCAweGUwLCAweDdiLCAweDAwLCAweGZjLCAweDFmLCAweDM5LCAweDdmLCAweDAyLCAweDAwLAorMHgxYywgMHgwNywgMHgxZCwgMHg5ZCwgMHhjMywgMHgwNCwgMHhhNiwgMHg3YiwgMHhhZCwgMHgwMywgMHgxYywgMHgwMCwgMHgwMCwKKzB4NjgsIDB4YzQsIDB4MDQsIDB4ZTAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDQsCisweGNiLCAweGFmLCAweDAwLCAweGY4LCAweDFkLCAweGNiLCAweDJmLCAweDAxLCAweDEwLCAweDFkLCAweDAwLCAweDAwLCAweGFjLAorMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMywgMHgwNCwgMHhjYiwgMHhhZiwgMHgwMCwgMHhmOCwgMHgxZCwgMHhjYiwKKzB4MmYsIDB4MDEsIDB4MTgsIDB4MWQsIDB4YzcsIDB4OWYsIDB4MDAsIDB4MGIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YWMsIDB4YzMsCisweDA0LCAweGZiLCAweDc1LCAweDAxLCAweDAwLCAweDFjLCAweDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGNjLCAweGIzLAorMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwMSwgMHgwMiwgMHgxYywgMHgwMCwgMHgwMCwgMHhhYywgMHhjMywgMHgwNCwKKzB4YTAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YTAsIDB4ZWUsIDB4YTIsIDB4MDMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4ZmMsCisweDA3LCAweDFjLCAweGNiLCAweDJmLCAweDA5LCAweDA0LCAweDFjLCAweGZiLCAweDc1LCAweDAxLCAweDAwLCAweDFjLCAweDAwLAorMHgwMCwgMHhhYywgMHhjMywgMHgwNCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwMSwgMHgwMiwKKzB4MWMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YzUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MzQsIDB4MDUsIDB4Y2MsIDB4YjMsCisweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDE1LCAweDAyLCAweDFjLCAweDQ3LCAweDlkLCAweDU0LCAweGM0LCAweDA0LAorMHgwMCwgMHgwMCwgMHg3OCwgMHg0NCwgMHgwMCwgMHg4MCwgMHgxZCwgMHg3YywgMHg1NCwgMHgwNCwgMHg4NywgMHgxZCwgMHg4ZCwKKzB4MDQsIDB4MDAsIDB4Y2UsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZWYsIDB4NzYsIDB4OWQsIDB4YzQsIDB4MDQsIDB4YTQsCisweDc3LCAweDhkLCAweDI0LCAweDA5LCAweGU0LCAweDc2LCAweDAxLCAweDAwLCAweDFjLCAweGM0LCAweDc2LCAweDAxLCAweDAwLAorMHgxYywgMHgwMCwgMHgwMCwgMHg5OCwgMHg1NCwgMHgwNCwgMHhkNywgMHg3NiwgMHgwMSwgMHg1MCwgMHgxOCwgMHhmNiwgMHg3NiwKKzB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweGNjLCAweDMwLCAweDQ1LCAweGM1LCAweDA0LCAweGViLCAweDJkLCAweDAxLCAweDAwLCAweDFjLCAweGVhLCAweDI5LCAweDAxLAorMHgwMCwgMHgxYywgMHhjMCwgMHg1OSwgMHgwMSwgMHgwMCwgMHgxYywgMHhmNSwgMHg3NywgMHgyOSwgMHhjNSwgMHgwNCwgMHhlMCwKKzB4MzAsIDB4ZGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NGMsIDB4YjAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NGMsIDB4ZjQsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDA0LCAweDAwLCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLAorMHgwOSwgMHgwMiwgMHgxYywgMHhlYiwgMHgyZCwgMHhiNSwgMHhjNCwgMHgwNCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywKKzB4Y2MsIDB4MzMsIDB4MTksIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YjUsIDB4YzQsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4ZmMsCisweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDBkLCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGI1LCAweGM0LCAweDA0LCAweGNjLAorMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgxMSwgMHgwMiwgMHgxYywgMHhlYiwgMHgyZCwgMHhiNSwgMHhjNCwKKzB4MDQsIDB4MDAsIDB4N2IsIDB4MDAsIDB4ODAsIDB4MWMsIDB4YWUsIDB4NzcsIDB4NDUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweGMwLCAweDA0LCAweGQzLCAweDhiLCAweDAwLCAweGZjLCAweDFmLCAweDYwLCAweDdhLCAweDNjLCAweDAwLCAweDFjLAorMHg2MCwgMHg0YywgMHhjMCwgMHgwNCwgMHgwMCwgMHhjMCwgMHgyZiwgMHgyMCwgMHgwNSwgMHgxZiwgMHhlMCwgMHgzMCwgMHhiMCwKKzB4MDQsIDB4MDAsIDB4ODAsIDB4MjUsIDB4YjAsIDB4MDQsIDB4MDAsIDB4YjUsIDB4NWIsIDB4YjEsIDB4MDQsIDB4MDQsIDB4NjksCisweDI2LCAweDAxLCAweDAwLCAweDFjLCAweDZhLCAweDJiLCAweDAxLCAweDAwLCAweDFjLCAweDgwLCAweDFkLCAweDAwLCAweDAwLAorMHgxYywgMHhhOSwgMHgyNSwgMHg0NSwgMHgwNSwgMHgwMCwgMHhlZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhhZiwgMHg3NywKKzB4MDEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MjQsIDB4MDQsIDB4YjQsIDB4NWYsIDB4MDEsIDB4NDAsIDB4MTgsCisweDA3LCAweDlkLCAweDQ4LCAweDU1LCAweDA0LCAweGI3LCAweDc2LCAweDAxLCAweDAwLCAweDFjLCAweDk2LCAweDc2LCAweDAxLAorMHgwMCwgMHgxYywgMHg0NywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhhNCwgMHgzMywgMHgwMSwgMHg2MCwgMHgxOCwgMHhhNCwKKzB4MmYsIDB4MDEsIDB4NjAsIDB4MTgsIDB4NjQsIDB4NzcsIDB4MDEsIDB4NjAsIDB4MTgsIDB4MjQsIDB4NzcsIDB4MDEsIDB4NjAsCisweDE4LCAweDQ0LCAweDc3LCAweDAxLCAweDAwLCAweDFjLCAweDY0LCAweDg4LCAweDAzLCAweDAwLCAweDFjLCAweGE0LCAweDNmLAorMHgwMSwgMHgwMCwgMHgxYywgMHhhNCwgMHgzYiwgMHgwMSwgMHgwMCwgMHgxYywgMHg1MywgMHg3YiwgMHgwMCwgMHhjMCwgMHgxYywKKzB4ZDMsIDB4Y2YsIDB4MWIsIDB4MDAsIDB4MWMsIDB4NTMsIDB4NGYsIDB4MDIsIDB4MDAsIDB4MWMsIDB4ZGEsIDB4Y2YsIDB4MDAsCisweGMwLCAweDFmLCAweGQ1LCAweDU3LCAweDBmLCAweDAwLCAweDFjLCAweGQzLCAweGQzLCAweDM3LCAweDAwLCAweDFjLCAweGQ0LAorMHg1MywgMHgwZiwgMHgwMCwgMHgxYywgMHhlMCwgMHgyOSwgMHgwMCwgMHgwMCwgMHgxYywgMHhmNSwgMHhkNSwgMHhiMCwgMHgwNSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4NTUsIDB4MDQsIDB4NzcsIDB4NTYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NTYsIDB4NTMsCisweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDE4LCAweDAwLCAweDAwLCAweDA0LCAweGMwLCAweDA0LAorMHhmNSwgMHg1NSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhiNCwgMHg1NSwgMHgwNCwgMHg3NywgMHg1NiwgMHgwMSwKKzB4MDAsIDB4MWMsIDB4NTYsIDB4NTMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MTgsIDB4MDAsCisweDAwLCAweDA0LCAweGMwLCAweDA0LCAweGNiLCAweDJmLCAweDAxLCAweDE4LCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDEwLAorMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgwOCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgwOCwgMHgxMCwgMHhjYiwgMHgyZiwKKzB4MDEsIDB4MjAsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MjgsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDAsIDB4MTAsCisweDg5LCAweDI1LCAweDYxLCAweGMyLCAweDA0LCAweDAwLCAweDAwLCAweGVjLCAweGMyLCAweDA0LCAweDAwLCAweDAwLCAweDU0LAorMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHgwMCwKKzB4MDAsIDB4NjAsIDB4YzIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4YzIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsCisweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDQwLCAweDFjLAorMHg2YywgMHhjMCwgMHgwNCwgMHg0MCwgMHgxYywgMHg5YywgMHhjMCwgMHgwNCwgMHhhNywgMHg3NywgMHg1NSwgMHhjMywgMHgwNCwKKzB4MDAsIDB4MDAsIDB4YzQsIDB4YzAsIDB4MDQsIDB4MjcsIDB4MWQsIDB4ZjEsIDB4YzAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsCisweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDAwLAorMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDVkYzI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oCkBAIC0wLDAgKzEsNTk4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHNsaWMuaAorICoKKyAqIFRoaXMgaXMgdGhlIGJhc2Ugc2V0IG9mIGhlYWRlciBkZWZpbml0aW9ucyBmb3IgdGhlIFNMSUNPU1MgZHJpdmVyLgorICovCisjaWZuZGVmIF9fU0xJQ19EUklWRVJfSF9fCisjZGVmaW5lIF9fU0xJQ19EUklWRVJfSF9fCisKKworc3RydWN0IHNsaWNfc3BpbmxvY2sgeworCXNwaW5sb2NrX3QJbG9jazsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworfTsKKworI2RlZmluZSBTTElDX1JTUFFfUEFHRVNfR0IgICAgICAgIDEwCisjZGVmaW5lIFNMSUNfUlNQUV9CVUZTSU5QQUdFICAgICAgKFBBR0VfU0laRSAvIFNMSUNfUlNQQlVGX1NJWkUpCisKK3N0cnVjdCBzbGljX3JzcHF1ZXVlIHsKKyAgICB1MzIgICAgICAgICAgICAgb2Zmc2V0OworICAgIHUzMiAgICAgICAgICAgICBwYWdlaW5kZXg7CisgICAgdTMyICAgICAgICAgICAgIG51bV9wYWdlczsKKyAgICBzdHJ1Y3Qgc2xpY19yc3BidWYgKnJzcGJ1ZjsKKyAgICB1MzIgKnZhZGRyW1NMSUNfUlNQUV9QQUdFU19HQl07CisgICAgZG1hX2FkZHJfdCAgICAgICAgICBwYWRkcltTTElDX1JTUFFfUEFHRVNfR0JdOworfTsKKworI2RlZmluZSBTTElDX1JDVlFfRVhQQU5TSU9OICAgICAgICAgMQorI2RlZmluZSBTTElDX1JDVlFfRU5UUklFUyAgICAgICAgICAgKDI1NiAqIFNMSUNfUkNWUV9FWFBBTlNJT04pCisjZGVmaW5lIFNMSUNfUkNWUV9NSU5FTlRSSUVTICAgICAgICAoU0xJQ19SQ1ZRX0VOVFJJRVMgLyAyKQorI2RlZmluZSBTTElDX1JDVlFfTUFYX1BST0NFU1NfSVNSICAgKChTTElDX1JDVlFfRU5UUklFUyAqIDQpKQorI2RlZmluZSBTTElDX1JDVlFfUkNWQlVGU0laRSAgICAgICAgMjA0OAorI2RlZmluZSBTTElDX1JDVlFfRklMTEVOVFJJRVMgICAgICAgKDE2ICogU0xJQ19SQ1ZRX0VYUEFOU0lPTikKKyNkZWZpbmUgU0xJQ19SQ1ZRX0ZJTExUSFJFU0ggICAgICAgIChTTElDX1JDVlFfRU5UUklFUyAtIFNMSUNfUkNWUV9GSUxMRU5UUklFUykKKworc3RydWN0IHNsaWNfcmN2cXVldWUgeworICAgIHN0cnVjdCBza19idWZmICAgICpoZWFkOworICAgIHN0cnVjdCBza19idWZmICAgICp0YWlsOworICAgIHUzMiAgICAgICAgICAgIGNvdW50OworICAgIHUzMiAgICAgICAgICAgIHNpemU7CisgICAgdTMyICAgICAgICAgICAgZXJyb3JzOworfTsKKworc3RydWN0IHNsaWNfcmN2YnVmX2luZm8geworICAgIHUzMiAgICAgaWQ7CisgICAgdTMyICAgICBzdGFydHRpbWU7CisgICAgdTMyICAgICBzdG9wdGltZTsKKyAgICB1MzIgICAgIHNsaWN3b3JsZDsKKyAgICB1MzIgICAgIGxhc3R0aW1lOworICAgIHUzMiAgICAgbGFzdGlkOworfTsKKy8qCisgU0xJQyBIYW5kbGUgc3RydWN0dXJlLiAgVXNlZCB0byByZXN0cmljdCBoYW5kbGUgdmFsdWVzIHRvCisgMzIgYml0cyBieSB1c2luZyBhbiBpbmRleCByYXRoZXIgdGhhbiBhbiBhZGRyZXNzLgorIFNpbXBsaWZpZXMgdWNvZGUgaW4gNjQtYml0IHN5c3RlbXMKKyovCitzdHJ1Y3Qgc2xpY19oYW5kbGVfd29yZCB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdXNob3J0ICAgICAgaW5kZXg7CisJCQl1c2hvcnQgICAgICBib3R0b21iaXRzOyAvKiB0byBkZW5vdGUgbnVtIGJ1ZnMgdG8gY2FyZCAqLworCQl9ICBwYXJ0czsKKwkJdTMyICAgICAgICAgd2hvbGU7CisJfSAgaGFuZGxlOworfTsKKworc3RydWN0IHNsaWNfaGFuZGxlIHsKKyAgICBzdHJ1Y3Qgc2xpY19oYW5kbGVfd29yZCAgdG9rZW47ICAvKiB0b2tlbiBwYXNzZWQgYmV0d2VlbiBob3N0IGFuZCBjYXJkKi8KKyAgICB1c2hvcnQgICAgICAgICAgICAgICAgICAgICAgdHlwZTsKKyAgICB2b2lkICphZGRyZXNzOyAgICAvKiBhY3R1YWwgYWRkcmVzcyBvZiB0aGUgb2JqZWN0Ki8KKyAgICB1c2hvcnQgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OworICAgIHN0cnVjdCBzbGljX2hhbmRsZSAgICAgICAqb3RoZXJfaGFuZGxlOworICAgIHN0cnVjdCBzbGljX2hhbmRsZSAgICAgICAqbmV4dDsKK307CisKKyNkZWZpbmUgU0xJQ19IQU5ETEVfRlJFRSAgICAgICAgMHgwMDAwCisjZGVmaW5lIFNMSUNfSEFORExFX0RBVEEgICAgICAgIDB4MDAwMQorI2RlZmluZSBTTElDX0hBTkRMRV9DTUQgICAgICAgICAweDAwMDIKKyNkZWZpbmUgU0xJQ19IQU5ETEVfQ09OVEVYVCAgICAgMHgwMDAzCisjZGVmaW5lIFNMSUNfSEFORExFX1RFQU0gICAgICAgIDB4MDAwNAorCisjZGVmaW5lIGhhbmRsZV9pbmRleCAgICAgICAgaGFuZGxlLnBhcnRzLmluZGV4CisjZGVmaW5lIGhhbmRsZV9ib3R0b20gICAgICAgaGFuZGxlLnBhcnRzLmJvdHRvbWJpdHMKKyNkZWZpbmUgaGFuZGxlX3Rva2VuICAgICAgICBoYW5kbGUud2hvbGUKKworI2RlZmluZSBTTElDX0hPU1RDTURfU0laRSAgICA1MTIKKworc3RydWN0IHNsaWNfaG9zdGNtZCB7CisgICAgc3RydWN0IHNsaWNfaG9zdDY0X2NtZCAgY21kNjQ7CisgICAgdTMyICAgICAgICAgICAgICAgICAgICB0eXBlOworICAgIHN0cnVjdCBza19idWZmICAgICAgICAgICAgKnNrYjsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgIHBhZGRybDsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgIHBhZGRyaDsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgIGJ1c3k7CisgICAgdTMyICAgICAgICAgICAgICAgICAgICBjbWRzaXplOworICAgIHVzaG9ydCAgICAgICAgICAgICAgICAgICAgIG51bWJ1ZnM7CisgICAgc3RydWN0IHNsaWNfaGFuZGxlICAgICpwc2xpY19oYW5kbGU7LyogaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCBjb21tYW5kICovCisgICAgc3RydWN0IHNsaWNfaG9zdGNtZCAgICAqbmV4dDsKKyAgICBzdHJ1Y3Qgc2xpY19ob3N0Y21kICAgICpuZXh0X2FsbDsKK307CisKKyNkZWZpbmUgU0xJQ19DTURRX0NNRFNJTlBBR0UgICAgKFBBR0VfU0laRSAvIFNMSUNfSE9TVENNRF9TSVpFKQorI2RlZmluZSBTTElDX0NNRF9EVU1CICAgICAgICAgICAgMworI2RlZmluZSBTTElDX0NNRFFfSU5JVENNRFMgICAgICAgMjU2CisjZGVmaW5lIFNMSUNfQ01EUV9NQVhDTURTICAgICAgICAyNTYKKyNkZWZpbmUgU0xJQ19DTURRX01BWE9VVFNUQU5EICAgIFNMSUNfQ01EUV9NQVhDTURTCisjZGVmaW5lIFNMSUNfQ01EUV9NQVhQQUdFUyAgICAgICAoU0xJQ19DTURRX01BWENNRFMgLyBTTElDX0NNRFFfQ01EU0lOUEFHRSkKKyNkZWZpbmUgU0xJQ19DTURRX0lOSVRQQUdFUyAgICAgIChTTElDX0NNRFFfSU5JVENNRFMgLyBTTElDX0NNRFFfQ01EU0lOUEFHRSkKKworc3RydWN0IHNsaWNfY21kcW1lbSB7CisJaW50IHBhZ2VjbnQ7CisJdTMyICpwYWdlc1tTTElDX0NNRFFfTUFYUEFHRVNdOworCWRtYV9hZGRyX3QgZG1hX3BhZ2VzW1NMSUNfQ01EUV9NQVhQQUdFU107Cit9OworCitzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSB7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqaGVhZDsKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICp0YWlsOworCWludCBjb3VudDsKKwlzdHJ1Y3Qgc2xpY19zcGlubG9jayBsb2NrOworfTsKKworI2lmZGVmIFNUQVRVU19TVUNDRVNTCisjdW5kZWYgU1RBVFVTX1NVQ0NFU1MKKyNlbmRpZgorCisjZGVmaW5lIFNUQVRVU19TVUNDRVNTICAgICAgICAgICAgICAwCisjZGVmaW5lIFNUQVRVU19QRU5ESU5HICAgICAgICAgICAgICAwCisjZGVmaW5lIFNUQVRVU19GQUlMVVJFICAgICAgICAgICAgIC0xCisjZGVmaW5lIFNUQVRVU19FUlJPUiAgICAgICAgICAgICAgIC0yCisjZGVmaW5lIFNUQVRVU19OT1RfU1VQUE9SVEVEICAgICAgIC0zCisjZGVmaW5lIFNUQVRVU19CVUZGRVJfVE9PX1NIT1JUICAgIC00CisKKyNkZWZpbmUgU0xJQ19NQVhfQ0FSRFMgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFNMSUNfTUFYX1BPUlRTICAgICAgICAgICAgICA0ICAgICAgICAvKiBNYXggIyBvZiBwb3J0cyBwZXIgY2FyZCAgICovCisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKKy8qCitEdW1wIGJ1ZmZlciBzaXplCisKK1RoaXMgY2Fubm90IGJlIGJpZ2dlciB0aGFuIHRoZSBtYXggRE1BIHNpemUgdGhlIGNhcmQgc3VwcG9ydHMsCitnaXZlbiB0aGUgY3VycmVudCBjb2RlIHN0cnVjdHVyZSBpbiB0aGUgaG9zdCBhbmQgdWNvZGUuCitNb2phdmUgc3VwcG9ydHMgMTZLLCBPYXNpcyBzdXBwb3J0cyAxNkstMSwgc28KK2p1c3Qgc2V0IHRoaXMgYXQgMTVLLCBzaG91bGRudCBtYWtlIHRoYXQgbXVjaCBvZiBhIGRpZmYuCisqLworI2RlZmluZSBEVU1QX0JVRl9TSVpFICAgICAgICAgICAgICAgMHgzQzAwCisjZW5kaWYKKworCitzdHJ1Y3QgbWNhc3RfYWRkcmVzcyB7CisJdW5zaWduZWQgY2hhciBhZGRyZXNzWzZdOworCXN0cnVjdCBtY2FzdF9hZGRyZXNzICpuZXh0OworfTsKKworI2RlZmluZSBDQVJEX0RPV04gICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQ0FSRF9VUCAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENBUkRfRkFJTCAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDQVJEX0RJQUcgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQ0FSRF9TTEVFUCAgICAgICAweDAwMDAwMDA0CisKKyNkZWZpbmUgQURBUFRfRE9XTiAgICAgICAgICAgICAweDAwCisjZGVmaW5lIEFEQVBUX1VQICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBBREFQVF9GQUlMICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQURBUFRfUkVTRVQgICAgICAgICAgICAweDAzCisjZGVmaW5lIEFEQVBUX1NMRUVQICAgICAgICAgICAgMHgwNAorCisjZGVmaW5lIEFEQVBUX0ZMQUdTX0JPT1RUSU1FICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEFEQVBUX0ZMQUdTX0lTNjRCSVQgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEFEQVBUX0ZMQUdTX1BFTkRJTkdMSU5LRE9XTiAgICAgMHgwMDA0CisjZGVmaW5lIEFEQVBUX0ZMQUdTX0ZJQkVSTUVESUEgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIEFEQVBUX0ZMQUdTX0xPQ0tTX0FMTE9DRUQgICAgICAgMHgwMDEwCisjZGVmaW5lIEFEQVBUX0ZMQUdTX0lOVF9SRUdJU1RFUkVEICAgICAgMHgwMDIwCisjZGVmaW5lIEFEQVBUX0ZMQUdTX0xPQURfVElNRVJfU0VUICAgICAgMHgwMDQwCisjZGVmaW5lIEFEQVBUX0ZMQUdTX1NUQVRTX1RJTUVSX1NFVCAgICAgMHgwMDgwCisjZGVmaW5lIEFEQVBUX0ZMQUdTX1JFU0VUX1RJTUVSX1NFVCAgICAgMHgwMTAwCisKKyNkZWZpbmUgTElOS19ET1dOICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIExJTktfQ09ORklHICAgICAgICAgICAgMHgwMQorI2RlZmluZSBMSU5LX1VQICAgICAgICAgICAgICAgIDB4MDIKKworI2RlZmluZSBMSU5LXzEwTUIgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTElOS18xMDBNQiAgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTktfQVVUT1NQRUVEICAgICAgICAgMHgwMgorI2RlZmluZSBMSU5LXzEwMDBNQiAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgTElOS18xMDAwME1CICAgICAgICAgICAweDA0CisKKyNkZWZpbmUgTElOS19IQUxGRCAgICAgICAgICAgICAweDAwCisjZGVmaW5lIExJTktfRlVMTEQgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBMSU5LX0FVVE9EICAgICAgICAgICAgIDB4MDIKKworI2RlZmluZSBNQUNfRElSRUNURUQgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUFDX0JDQVNUICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE1BQ19NQ0FTVCAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNQUNfUFJPTUlTQyAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTUFDX0xPT1BCQUNLICAgICAweDAwMDAwMDEwCisjZGVmaW5lIE1BQ19BTExNQ0FTVCAgICAgMHgwMDAwMDAyMAorCisjZGVmaW5lIFNMSUNfRFVQTEVYKHgpICAgICgoeCA9PSBMSU5LX0ZVTExEKSA/ICJGRFgiIDogIkhEWCIpCisjZGVmaW5lIFNMSUNfU1BFRUQoeCkgICAgICgoeCA9PSBMSU5LXzEwME1CKSA/ICIxMDBNYiIgOiAoKHggPT0gTElOS18xMDAwTUIpID9cCisJCQkJIjEwMDBNYiIgOiAiIDEwTWIiKSkKKyNkZWZpbmUgU0xJQ19MSU5LU1RBVEUoeCkgKCh4ID09IExJTktfRE9XTikgPyAiRG93biIgOiAiVXAgICIpCisjZGVmaW5lIFNMSUNfQURBUFRFUl9TVEFURSh4KSAoKHggPT0gQURBUFRfVVApID8gIlVQIiA6ICJEb3duIikKKyNkZWZpbmUgU0xJQ19DQVJEX1NUQVRFKHgpICAgICgoeCA9PSBDQVJEX1VQKSA/ICJVUCIgOiAiRG93biIpCisKK3N0cnVjdCBzbGljX2lmYWNlX3N0YXRzIHsKKyAgICAvKgorICAgICAqIFN0YXRzCisgICAgICovCisgICAgdTY0ICAgICAgICB4bXRfYnl0ZXM7CisgICAgdTY0ICAgICAgICB4bXRfdWNhc3Q7CisgICAgdTY0ICAgICAgICB4bXRfbWNhc3Q7CisgICAgdTY0ICAgICAgICB4bXRfYmNhc3Q7CisgICAgdTY0ICAgICAgICB4bXRfZXJyb3JzOworICAgIHU2NCAgICAgICAgeG10X2Rpc2NhcmRzOworICAgIHU2NCAgICAgICAgeG1pdF9jb2xsaXNpb25zOworICAgIHU2NCAgICAgICAgeG1pdF9leGNlc3NfeG1pdF9jb2xsaXNpb25zOworICAgIHU2NCAgICAgICAgcmN2X2J5dGVzOworICAgIHU2NCAgICAgICAgcmN2X3VjYXN0OworICAgIHU2NCAgICAgICAgcmN2X21jYXN0OworICAgIHU2NCAgICAgICAgcmN2X2JjYXN0OworICAgIHU2NCAgICAgICAgcmN2X2Vycm9yczsKKyAgICB1NjQgICAgICAgIHJjdl9kaXNjYXJkczsKK307CisKK3N0cnVjdCBzbGljY3Bfc3RhdHMgeworICAgIHU2NCAgICAgICAgeG1pdF90Y3Bfc2VnczsKKyAgICB1NjQgICAgICAgIHhtaXRfdGNwX2J5dGVzOworICAgIHU2NCAgICAgICAgcmN2X3RjcF9zZWdzOworICAgIHU2NCAgICAgICAgcmN2X3RjcF9ieXRlczsKK307CisKK3N0cnVjdCBzbGljbmV0X3N0YXRzIHsKKyAgICBzdHJ1Y3Qgc2xpY2NwX3N0YXRzICAgICAgICB0Y3A7CisgICAgc3RydWN0IHNsaWNfaWZhY2Vfc3RhdHMgICAgICBpZmFjZTsKK307CisKKyNkZWZpbmUgU0xJQ19MT0FEVElNRVJfUEVSSU9EICAgICAxCisjZGVmaW5lIFNMSUNfSU5UQUdHX0RFRkFVTFQgICAgICAgMjAwCisjZGVmaW5lIFNMSUNfTE9BRF8wICAgICAgICAgICAgICAgMAorI2RlZmluZSBTTElDX0lOVEFHR18wICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0xJQ19MT0FEXzEgICAgICAgICAgICAgICA4MDAwCisjZGVmaW5lIFNMSUNfTE9BRF8yICAgICAgICAgICAgICAgMTAwMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzMgICAgICAgICAgICAgICAxMjAwMAorI2RlZmluZSBTTElDX0xPQURfNCAgICAgICAgICAgICAgIDE0MDAwCisjZGVmaW5lIFNMSUNfTE9BRF81ICAgICAgICAgICAgICAgMTYwMDAKKyNkZWZpbmUgU0xJQ19JTlRBR0dfMSAgICAgICAgICAgICA1MAorI2RlZmluZSBTTElDX0lOVEFHR18yICAgICAgICAgICAgIDEwMAorI2RlZmluZSBTTElDX0lOVEFHR18zICAgICAgICAgICAgIDE1MAorI2RlZmluZSBTTElDX0lOVEFHR180ICAgICAgICAgICAgIDIwMAorI2RlZmluZSBTTElDX0lOVEFHR181ICAgICAgICAgICAgIDI1MAorI2RlZmluZSBTTElDX0xPQURfMUdCICAgICAgICAgICAgIDMwMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzJHQiAgICAgICAgICAgICA2MDAwCisjZGVmaW5lIFNMSUNfTE9BRF8zR0IgICAgICAgICAgICAgMTIwMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzRHQiAgICAgICAgICAgICAyNDAwMAorI2RlZmluZSBTTElDX0xPQURfNUdCICAgICAgICAgICAgIDQ4MDAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzFHQiAgICAgICAgICAgNTAKKyNkZWZpbmUgU0xJQ19JTlRBR0dfMkdCICAgICAgICAgICA3NQorI2RlZmluZSBTTElDX0lOVEFHR18zR0IgICAgICAgICAgIDEwMAorI2RlZmluZSBTTElDX0lOVEFHR180R0IgICAgICAgICAgIDEwMAorI2RlZmluZSBTTElDX0lOVEFHR181R0IgICAgICAgICAgIDEwMAorCitzdHJ1Y3QgZXRoZXJfaGVhZGVyIHsKKyAgICB1bnNpZ25lZCBjaGFyICAgIGV0aGVyX2Rob3N0WzZdOworICAgIHVuc2lnbmVkIGNoYXIgICAgZXRoZXJfc2hvc3RbNl07CisgICAgdXNob3J0ICAgZXRoZXJfdHlwZTsKK307CisKK3N0cnVjdCBzbGljY2FyZCB7CisgICAgdWludCAgICAgICAgICAgICAgYnVzbnVtYmVyOworICAgIHVpbnQgICAgICAgICAgICAgIHNsb3RudW1iZXI7CisgICAgdWludCAgICAgICAgICAgICAgc3RhdGU7CisgICAgdWludCAgICAgICAgICAgICAgY2FyZG51bTsKKyAgICB1aW50ICAgICAgICAgICAgICBjYXJkX3NpemU7CisgICAgdWludCAgICAgICAgICAgICAgYWRhcHRlcnNfYWN0aXZhdGVkOworICAgIHVpbnQgICAgICAgICAgICAgIGFkYXB0ZXJzX2FsbG9jYXRlZDsKKyAgICB1aW50ICAgICAgICAgICAgICBhZGFwdGVyc19zbGVlcGluZzsKKyAgICB1aW50ICAgICAgICAgICAgICBnZW5udW1iZXI7CisgICAgdTMyICAgICAgICAgICBldmVudHM7CisgICAgdTMyICAgICAgICAgICBsb2FkbGV2ZWxfY3VycmVudDsKKyAgICB1MzIgICAgICAgICAgIGxvYWQ7CisgICAgdWludCAgICAgICAgICAgICAgcmVzZXRfaW5fcHJvZ3Jlc3M7CisgICAgdTMyICAgICAgICAgICBwaW5nc3RhdHVzOworICAgIHUzMiAgICAgICAgICAgYmFkX3BpbmdzdGF0dXM7CisgICAgc3RydWN0IHRpbWVyX2xpc3QgbG9hZHRpbWVyOworICAgIHUzMiAgICAgICAgICAgbG9hZHRpbWVyc2V0OworICAgIHVpbnQgICAgICAgICAgICAgIGNvbmZpZ19zZXQ7CisgICAgc3RydWN0IHNsaWNfY29uZmlnICBjb25maWc7CisgICAgc3RydWN0IGRlbnRyeSAgICAgICpkZWJ1Z2ZzX2RpcjsKKyAgICBzdHJ1Y3QgZGVudHJ5ICAgICAgKmRlYnVnZnNfY2FyZGluZm87CisgICAgc3RydWN0IGFkYXB0ZXIgICptYXN0ZXI7CisgICAgc3RydWN0IGFkYXB0ZXIgICphZGFwdGVyW1NMSUNfTUFYX1BPUlRTXTsKKyAgICBzdHJ1Y3Qgc2xpY2NhcmQgKm5leHQ7CisgICAgdTMyICAgICAgICAgICAgIGVycm9yX2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIGVycm9yX3JtaXNzX2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIHJjdl9pbnRlcnJ1cHRzOworICAgIHUzMiAgICAgICAgICAgICB4bWl0X2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIG51bV9pc3JzOworICAgIHUzMiAgICAgICAgICAgICBmYWxzZV9pbnRlcnJ1cHRzOworICAgIHUzMiAgICAgICAgICAgICBtYXhfaXNyX3JjdnM7CisgICAgdTMyICAgICAgICAgICAgIG1heF9pc3JfeG1pdHM7CisgICAgdTMyICAgICAgICAgICAgIHJjdl9pbnRlcnJ1cHRfeWllbGRzOworICAgIHUzMiAgICAgICAgICAgICB0eF9wYWNrZXRzOworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisgICAgdTMyICAgICAgICAgICAgIGR1bXBzdGF0dXM7ICAgICAgICAgICAvKiBSZXN1bHQgb2YgZHVtcCBVUFIgKi8KKyAgICB2b2lkICpjbWRidWZmZXI7CisKKyAgICB1bG9uZyAgICAgICAgICAgICAgIGNtZGJ1ZmZlcl9waHlzOworICAgIHUzMiAgICAgICAgICAgICBjbWRidWZmZXJfcGh5c2w7CisgICAgdTMyICAgICAgICAgICAgIGNtZGJ1ZmZlcl9waHlzaDsKKworICAgIHUzMiAgICAgICAgICAgICBkdW1wX2NvdW50OworICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqZHVtcF90YXNrX2lkOworICAgIHUzMiAgICAgICAgICAgICBkdW1wX3dhaXRfY291bnQ7CisgICAgdWludCAgICAgICAgICAgICAgICBkdW1wdGhyZWFkX3J1bm5pbmc7IC8qIGhhcyBhIGR1bXAgdGhyZWFkIGJlZW4gaW5pdCdkICAqLworICAgIHVpbnQgICAgICAgICAgICAgICAgZHVtcF9yZXF1ZXN0ZWQ7ICAgICAvKiAwIG5vLCAxID0gcmVxc3RkIDI9Y3VyciAzPWRvbmUgKi8KKyAgICB1MzIgICAgICAgICAgICAgZHVtcHRpbWVfc3RhcnQ7CisgICAgdTMyICAgICAgICAgICAgIGR1bXB0aW1lX2NvbXBsZXRlOworICAgIHUzMiAgICAgICAgICAgICBkdW1wdGltZV9kZWx0YTsKKyAgICB2b2lkICpkdW1wYnVmZmVyOworICAgIHVsb25nICAgICAgICAgICAgICAgZHVtcGJ1ZmZlcl9waHlzOworICAgIHUzMiAgICAgICAgICAgICBkdW1wYnVmZmVyX3BoeXNsOworICAgIHUzMiAgICAgICAgICAgICBkdW1wYnVmZmVyX3BoeXNoOworICAgIHdhaXRfcXVldWVfaGVhZF90ICAgZHVtcF93cTsKKyAgICBzdHJ1Y3QgZmlsZSAgICAgICAgKmR1bXBoYW5kbGU7CisgICAgbW1fc2VnbWVudF90ICAgICAgICBkdW1wZmlsZV9mczsKKyNlbmRpZgorICAgIHUzMiAgICAgICAgICAgICBkZWJ1Z19peDsKKyAgICB1c2hvcnQgICAgICAgICAgICAgIHJlZ190eXBlWzMyXTsKKyAgICB1c2hvcnQgICAgICAgICAgICAgIHJlZ19vZmZzZXRbMzJdOworICAgIHUzMiAgICAgICAgICAgICByZWdfdmFsdWVbMzJdOworICAgIHUzMiAgICAgICAgICAgICByZWdfdmFsdWVoWzMyXTsKK307CisKKyNkZWZpbmUgTlVNX0NGR19TUEFDRVMgICAgICAyCisjZGVmaW5lIE5VTV9DRkdfUkVHUyAgICAgICAgNjQKKyNkZWZpbmUgTlVNX0NGR19SRUdfVUxPTkdTICAoTlVNX0NGR19SRUdTIC8gc2l6ZW9mKHUzMikpCisKK3N0cnVjdCBwaHlzY2FyZCB7CisgICAgc3RydWN0IGFkYXB0ZXIgICphZGFwdGVyW1NMSUNfTUFYX1BPUlRTXTsKKyAgICBzdHJ1Y3QgcGh5c2NhcmQgKm5leHQ7CisgICAgdWludCAgICAgICAgICAgICAgICBhZGFwdGVyc19hbGxvY2Q7CisKKyAvKiAgdGhlIGZvbGxvd2luZyBpcyBub3QgY3VycmVudGx5IG5lZWRlZAorICAgIHUzMiAgICAgICAgICAgICAgIGJyaWRnZV9idXNudW07CisgICAgdTMyICAgICAgICAgICAgICAgYnJpZGdlX2NmZ1tOVU1fQ0ZHX1NQQUNFU11bTlVNX0NGR19SRUdfVUxPTkdTXTsKKyAqLworfTsKKworc3RydWN0IGJhc2VfZHJpdmVyIHsKKyAgICBzdHJ1Y3Qgc2xpY19zcGlubG9jayBkcml2ZXJfbG9jazsKKyAgICB1MzIgICAgICAgICAgICAgIG51bV9zbGljX2NhcmRzOworICAgIHUzMiAgICAgICAgICAgICAgbnVtX3NsaWNfcG9ydHM7CisgICAgdTMyICAgICAgICAgICAgICBudW1fc2xpY19wb3J0c19hY3RpdmU7CisgICAgdTMyICAgICAgICAgICAgICBkeW5hbWljX2ludGFnZzsKKyAgICBzdHJ1Y3Qgc2xpY2NhcmQgICpzbGljX2NhcmQ7CisgICAgc3RydWN0IHBoeXNjYXJkICAqcGh5c19jYXJkOworICAgIHVpbnQgICAgICAgICAgICAgICAgIGNhcmRudW1pbnVzZVtTTElDX01BWF9DQVJEU107Cit9OworCitzdHJ1Y3Qgc2xpY19zaG1lbSB7CisgICAgdm9sYXRpbGUgdTMyICAgICAgICAgIGlzcjsKKyAgICB2b2xhdGlsZSB1MzIgICAgICAgICAgbGlua3N0YXR1czsKKyAgICB2b2xhdGlsZSBzdHJ1Y3Qgc2xpY19zdGF0cyAgICAgaW5pY3N0YXRzOworfTsKKworc3RydWN0IHNsaWNfcmVnX3BhcmFtcyB7CisgICAgdTMyICAgICAgIGxpbmtzcGVlZDsKKyAgICB1MzIgICAgICAgbGlua2R1cGxleDsKKyAgICB1MzIgICAgICAgZmFpbF9vbl9iYWRfZWVwcm9tOworfTsKKworc3RydWN0IHNsaWNfdXByIHsKKyAgICB1aW50ICAgICAgICAgICAgICAgYWRhcHRlcjsKKyAgICB1MzIgICAgICAgICAgICB1cHJfcmVxdWVzdDsKKyAgICB1MzIgICAgICAgICAgICB1cHJfZGF0YTsKKyAgICB1MzIgICAgICAgICAgICB1cHJfZGF0YV9oOworICAgIHUzMiAgICAgICAgICAgIHVwcl9idWZmZXI7CisgICAgdTMyICAgICAgICAgICAgdXByX2J1ZmZlcl9oOworICAgIHN0cnVjdCBzbGljX3VwciAqbmV4dDsKK307CisKK3N0cnVjdCBzbGljX2lmZXZlbnRzIHsKKyAgICB1aW50ICAgICAgICBvZmxvdzgwMjsKKyAgICB1aW50ICAgICAgICB1ZmxvdzgwMjsKKyAgICB1aW50ICAgICAgICBUcHJ0b2Zsb3c7CisgICAgdWludCAgICAgICAgcmN2ZWFybHk7CisgICAgdWludCAgICAgICAgQnVmb3Y7CisgICAgdWludCAgICAgICAgQ2FycmU7CisgICAgdWludCAgICAgICAgTG9uZ2U7CisgICAgdWludCAgICAgICAgSW52cDsKKyAgICB1aW50ICAgICAgICBDcmM7CisgICAgdWludCAgICAgICAgRHJibDsKKyAgICB1aW50ICAgICAgICBDb2RlOworICAgIHVpbnQgICAgICAgIElwSGxlbjsKKyAgICB1aW50ICAgICAgICBJcExlbjsKKyAgICB1aW50ICAgICAgICBJcENzdW07CisgICAgdWludCAgICAgICAgVHBDc3VtOworICAgIHVpbnQgICAgICAgIFRwSGxlbjsKK307CisKK3N0cnVjdCBhZGFwdGVyIHsKKyAgICB2b2lkICppZnA7CisgICAgc3RydWN0IHNsaWNjYXJkICpjYXJkOworICAgIHVpbnQgICAgICAgICAgICAgICAgcG9ydDsKKyAgICBzdHJ1Y3QgcGh5c2NhcmQgKnBoeXNjYXJkOworICAgIHVpbnQgICAgICAgICAgICAgICAgcGh5c3BvcnQ7CisgICAgdWludCAgICAgICAgICAgICAgICBjYXJkaW5kZXg7CisgICAgdWludCAgICAgICAgICAgICAgICBjYXJkX3NpemU7CisgICAgdWludCAgICAgICAgICAgICAgICBjaGlwaWQ7CisgICAgc3RydWN0IG5ldF9kZXZpY2UgICpuZXRkZXY7CisgICAgc3RydWN0IG5ldF9kZXZpY2UgICpuZXh0X25ldGRldmljZTsKKyAgICBzdHJ1Y3Qgc2xpY19zcGlubG9jayAgICAgYWRhcHRlcl9sb2NrOworICAgIHN0cnVjdCBzbGljX3NwaW5sb2NrICAgICByZXNldF9sb2NrOworICAgIHN0cnVjdCBwY2lfZGV2ICAgICAqcGNpZGV2OworICAgIHVpbnQgICAgICAgICAgICAgICAgYnVzbnVtYmVyOworICAgIHVpbnQgICAgICAgICAgICAgICAgc2xvdG51bWJlcjsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGZ1bmN0aW9ubnVtYmVyOworICAgIHVzaG9ydCAgICAgICAgICAgICAgdmVuZGlkOworICAgIHVzaG9ydCAgICAgICAgICAgICAgZGV2aWQ7CisgICAgdXNob3J0ICAgICAgICAgICAgICBzdWJzeXNpZDsKKyAgICB1MzIgICAgICAgICAgICAgaXJxOworICAgIHZvaWQgX19pb21lbSAqbWVtb3J5YmFzZTsKKyAgICB1MzIgICAgICAgICAgICAgbWVtb3J5bGVuZ3RoOworICAgIHUzMiAgICAgICAgICAgICBkcmFtYmFzZTsKKyAgICB1MzIgICAgICAgICAgICAgZHJhbWxlbmd0aDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIHF1ZXVlc19pbml0aWFsaXplZDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGFsbG9jYXRlZDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGFjdGl2YXRlZDsKKyAgICB1MzIgICAgICAgICAgICAgaW50cnJlZ2lzdGVyZWQ7CisgICAgdWludCAgICAgICAgICAgICAgICBpc3BfaW5pdGlhbGl6ZWQ7CisgICAgdWludCAgICAgICAgICAgICAgICBnZW5udW1iZXI7CisgICAgdTMyICAgICAgICAgICAgIGN1cmFkZHJ1cHBlcjsKKyAgICBzdHJ1Y3Qgc2xpY19zaG1lbSAgICAgICpwc2htZW07CisgICAgZG1hX2FkZHJfdCAgICAgICAgICBwaHlzX3NobWVtOworICAgIHUzMiAgICAgICAgICAgICBpc3Jjb3B5OworICAgIF9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAgICAgICAqc2xpY19yZWdzOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBzdGF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbGlua3N0YXRlOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBsaW5rc3BlZWQ7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGxpbmtkdXBsZXg7CisgICAgdWludCAgICAgICAgICAgICAgICBmbGFnczsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbWFjYWRkcls2XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgY3Vycm1hY2FkZHJbNl07CisgICAgdTMyICAgICAgICAgICAgIG1hY29wdHM7CisgICAgdXNob3J0ICAgICAgICAgICAgICBkZXZmbGFnc19wcmV2OworICAgIHU2NCAgICAgICAgICAgICBtY2FzdG1hc2s7CisgICAgc3RydWN0IG1jYXN0X2FkZHJlc3MgICAqbWNhc3RhZGRyczsKKyAgICBzdHJ1Y3Qgc2xpY191cHIgICAqdXByX2xpc3Q7CisgICAgdWludCAgICAgICAgICAgICAgICB1cHJfYnVzeTsKKyAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgIHBpbmd0aW1lcjsKKyAgICB1MzIgICAgICAgICAgICAgcGluZ3RpbWVyc2V0OworICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgc3RhdHN0aW1lcjsKKyAgICB1MzIgICAgICAgICAgICAgc3RhdHN0aW1lcnNldDsKKyAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgIGxvYWR0aW1lcjsKKyAgICB1MzIgICAgICAgICAgICAgbG9hZHRpbWVyc2V0OworICAgIHN0cnVjdCBkZW50cnkgICAgICAqZGVidWdmc19lbnRyeTsKKyAgICBzdHJ1Y3Qgc2xpY19zcGlubG9jayAgICAgdXByX2xvY2s7CisgICAgc3RydWN0IHNsaWNfc3BpbmxvY2sgICAgIGJpdDY0cmVnbG9jazsKKyAgICBzdHJ1Y3Qgc2xpY19yc3BxdWV1ZSAgICAgcnNwcXVldWU7CisgICAgc3RydWN0IHNsaWNfcmN2cXVldWUgICAgIHJjdnF1ZXVlOworICAgIHN0cnVjdCBzbGljX2NtZHF1ZXVlICAgICBjbWRxX2ZyZWU7CisgICAgc3RydWN0IHNsaWNfY21kcXVldWUgICAgIGNtZHFfZG9uZTsKKyAgICBzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSAgICAgY21kcV9hbGw7CisgICAgc3RydWN0IHNsaWNfY21kcW1lbSAgICAgIGNtZHFtZW07CisgICAgLyoKKyAgICAgKiAgU0xJQyBIYW5kbGVzCisgICAgKi8KKyAgICBzdHJ1Y3Qgc2xpY19oYW5kbGUgc2xpY19oYW5kbGVzW1NMSUNfQ01EUV9NQVhDTURTKzFdOyAvKiBPYmplY3QgaGFuZGxlcyovCisgICAgc3RydWN0IHNsaWNfaGFuZGxlICpwZnJlZV9zbGljX2hhbmRsZXM7ICAgICAgICAgIC8qIEZyZWUgb2JqZWN0IGhhbmRsZXMqLworICAgIHN0cnVjdCBzbGljX3NwaW5sb2NrICAgICBoYW5kbGVfbG9jazsgICAgICAgICAgIC8qIE9iamVjdCBoYW5kbGUgbGlzdCBsb2NrKi8KKyAgICB1c2hvcnQgICAgICAgICAgICAgIHNsaWNfaGFuZGxlX2l4OworCisgICAgdTMyICAgICAgICAgICAgIHhtaXRxX2Z1bGw7CisgICAgdTMyICAgICAgICAgICAgIGFsbF9yZWdfd3JpdGVzOworICAgIHUzMiAgICAgICAgICAgICBpY3JfcmVnX3dyaXRlczsKKyAgICB1MzIgICAgICAgICAgICAgaXNyX3JlZ193cml0ZXM7CisgICAgdTMyICAgICAgICAgICAgIGVycm9yX2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIGVycm9yX3JtaXNzX2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIHJ4X2Vycm9yczsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X2Ryb3BzOworICAgIHUzMiAgICAgICAgICAgICByY3ZfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgeG1pdF9pbnRlcnJ1cHRzOworICAgIHUzMiAgICAgICAgICAgICBsaW5rZXZlbnRfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgdXByX2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIG51bV9pc3JzOworICAgIHUzMiAgICAgICAgICAgICBmYWxzZV9pbnRlcnJ1cHRzOworICAgIHUzMiAgICAgICAgICAgICB0eF9wYWNrZXRzOworICAgIHUzMiAgICAgICAgICAgICB4bWl0X2NvbXBsZXRlczsKKyAgICB1MzIgICAgICAgICAgICAgdHhfZHJvcHM7CisgICAgdTMyICAgICAgICAgICAgIHJjdl9icm9hZGNhc3RzOworICAgIHUzMiAgICAgICAgICAgICByY3ZfbXVsdGljYXN0czsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X3VuaWNhc3RzOworICAgIHUzMiAgICAgICAgICAgICBtYXhfaXNyX3JjdnM7CisgICAgdTMyICAgICAgICAgICAgIG1heF9pc3JfeG1pdHM7CisgICAgdTMyICAgICAgICAgICAgIHJjdl9pbnRlcnJ1cHRfeWllbGRzOworICAgIHUzMiAgICAgICAgICAgICBpbnRhZ2dfcGVyaW9kOworICAgIHN0cnVjdCBpbmljcG1fc3RhdGUgICAgKmluaWNwbV9pbmZvOworICAgIHZvaWQgKnBpbmljcG1faW5mbzsKKyAgICBzdHJ1Y3Qgc2xpY19yZWdfcGFyYW1zICAgcmVnX3BhcmFtczsKKyAgICBzdHJ1Y3Qgc2xpY19pZmV2ZW50cyAgaWZfZXZlbnRzOworICAgIHN0cnVjdCBzbGljX3N0YXRzICAgICAgICBpbmljc3RhdHNfcHJldjsKKyAgICBzdHJ1Y3Qgc2xpY25ldF9zdGF0cyAgICAgc2xpY19zdGF0czsKKyAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKK307CisKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorI2RlZmluZSBTTElDX0RVTVBfUkVRVUVTVEVEICAgICAgMQorI2RlZmluZSBTTElDX0RVTVBfSU5fUFJPR1JFU1MgICAgMgorI2RlZmluZSBTTElDX0RVTVBfRE9ORSAgICAgICAgICAgMworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1pY3JvY29kZSBjcmFzaCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuICBUaGlzCisgKiBzdHJ1Y3R1cmUgaXMgd3JpdHRlbiBvdXQgdG8gdGhlIGNhcmQncyBTUkFNIHdoZW4gdGhlIG1pY3JvY29kZSBwYW5pYydzLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IHNsaWNfY3Jhc2hfaW5mbyB7CisgICAgdXNob3J0ICBjcHVfaWQ7CisgICAgdXNob3J0ICBjcmFzaF9wYzsKK307CisKKyNkZWZpbmUgQ1JBU0hfSU5GT19PRkZTRVQgICAweDE1NUMKKworI2VuZGlmCisKKyNkZWZpbmUgVVBEQVRFX1NUQVRTKGxhcmdlc3RhdCwgbmV3c3RhdCwgb2xkc3RhdCkgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgobmV3c3RhdCkgPCAob2xkc3RhdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkobGFyZ2VzdGF0KSArPSAoKG5ld3N0YXQpICsgKDB4RkZGRkZGRkYgLSBvbGRzdGF0ICsgMSkpOyAgICAgICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKGxhcmdlc3RhdCkgKz0gKChuZXdzdGF0KSAtIChvbGRzdGF0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgVVBEQVRFX1NUQVRTX0dCKGxhcmdlc3RhdCwgbmV3c3RhdCwgb2xkc3RhdCkgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChsYXJnZXN0YXQpICs9ICgobmV3c3RhdCkgLSAob2xkc3RhdCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBFVEhFUl9FUV9BRERSKF9BZGRyQSwgX0FkZHJCLCBfUmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX1Jlc3VsdCA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgqKHUzMiAqKShfQWRkckEpICE9ICoodTMyICopKF9BZGRyQikpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJX1Jlc3VsdCA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCoodTE2ICopKCYoKF9BZGRyQSlbNF0pKSAhPSAqKHUxNiAqKSgmKChfQWRkckIpWzRdKSkpICAgICAgICBcCisJX1Jlc3VsdCA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX0lBNjQpCisjZGVmaW5lICAgU0xJQ19HRVRfQUREUl9MT1coX2FkZHIpICAodTMyKSgodTY0KShfYWRkcikgJiBcCisJMHgwMDAwMDAwMEZGRkZGRkZGKQorI2RlZmluZSAgIFNMSUNfR0VUX0FERFJfSElHSChfYWRkcikgICh1MzIpKCgodTY0KShfYWRkcikgPj4gMzIpICYgXAorCTB4MDAwMDAwMDBGRkZGRkZGRikKKyNlbHNlCisjZGVmaW5lICAgU0xJQ19HRVRfQUREUl9MT1coX2FkZHIpICAgKHUzMilfYWRkcgorI2RlZmluZSAgIFNMSUNfR0VUX0FERFJfSElHSChfYWRkcikgICh1MzIpMAorI2VuZGlmCisKKyNkZWZpbmUgRkxVU0ggICAgICAgVFJVRQorI2RlZmluZSBET05UX0ZMVVNIICBGQUxTRQorCisjZGVmaW5lIFNJT0NTTElDRFVNUENBUkQgICAgICAgICAoU0lPQ0RFVlBSSVZBVEUrOSkKKyNkZWZpbmUgU0lPQ1NMSUNTRVRJTlRBR0cgICAgICAgIChTSU9DREVWUFJJVkFURSsxMCkKKyNkZWZpbmUgU0lPQ1NMSUNUUkFDRURVTVAgICAgICAgIChTSU9DREVWUFJJVkFURSsxMSkKKworI2VuZGlmIC8qICBfX1NMSUNfRFJJVkVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY19vcy5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY19vcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YzY3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljX29zLmgKQEAgLTAsMCArMSw4NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IChjKTIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHNsaWNfb3MuaAorICoKKyAqIFRoZXNlIGFyZSB0aGUgTGludXgtc3BlY2lmaWMgZGVmaW5pdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBTTElDT1NTCisgKiBkcml2ZXIsIHdoaWNoIHNob3VsZCBhbGxvdyBmb3IgZ3JlYXRlciBwb3J0YWJpbGl0eSB0byBvdGhlciBPU2VzLgorICovCisjaWZuZGVmIF9TTElDX09TX1NQRUNJRklDX0hfCisjZGVmaW5lIF9TTElDX09TX1NQRUNJRklDX0hfCisKKyNkZWZpbmUgRkFMU0UgICAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgVFJVRSAgICAgICAgICAgICAgICAoMSkKKworI2RlZmluZSBTTElDX1NFQ1NfVE9fSklGRlMoeCkgICgoeCkgKiBIWikKKyNkZWZpbmUgU0xJQ19NU19UT19KSUZGSUVTKHgpICAoU0xJQ19TRUNTX1RPX0pJRkZTKCh4KSkgLyAxMDAwKQorCisjaWZkZWYgREVCVUdfUkVHSVNURVJfVFJBQ0UKKyNkZWZpbmUgV1JJVEVfUkVHKHJlZywgdmFsdWUsIGZsdXNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJYWRhcHRlci0+Y2FyZC0+cmVnX3R5cGVbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXhdID0gMDsgICBcCisJCWFkYXB0ZXItPmNhcmQtPnJlZ19vZmZzZXRbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXhdID0gXAorCQkoKHVuc2lnbmVkIGNoYXIgKikoJnJlZykpIC0gXAorCQkoKHVuc2lnbmVkIGNoYXIgKilhZGFwdGVyLT5zbGljX3JlZ3MpOyBcCisJCWFkYXB0ZXItPmNhcmQtPnJlZ192YWx1ZVthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCsrXSA9IHZhbHVlOyAgXAorCQlpZiAoYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXggPT0gMzIpIFwKKwkJCWFkYXB0ZXItPmNhcmQtPmRlYnVnX2l4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgXAorCQlzbGljX3JlZzMyX3dyaXRlKCgmcmVnKSwgKHZhbHVlKSwgKGZsdXNoKSk7ICAgICAgICAgICAgXAorCX0KKyNkZWZpbmUgV1JJVEVfUkVHNjQoYSwgcmVnLCB2YWx1ZSwgcmVnaCwgdmFsaCwgZmx1c2gpICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJYWRhcHRlci0+Y2FyZC0+cmVnX3R5cGVbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXhdID0gMTsgICAgICAgIFwKKwkJYWRhcHRlci0+Y2FyZC0+cmVnX29mZnNldFthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peF0gPSBcCisJCSgodW5zaWduZWQgY2hhciAqKSgmcmVnKSkgLSBcCisJCSgodW5zaWduZWQgY2hhciAqKWFkYXB0ZXItPnNsaWNfcmVncyk7IFwKKwkJYWRhcHRlci0+Y2FyZC0+cmVnX3ZhbHVlW2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4XSA9IHZhbHVlOyAgIFwKKwkJYWRhcHRlci0+Y2FyZC0+cmVnX3ZhbHVlaFthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCsrXSA9IHZhbGg7ICBcCisJCWlmIChhZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCA9PSAzMikgXAorCQkJYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXggPSAwOyAgICAgICAgICAgICAgICAgICAgICBcCisJCXNsaWNfcmVnNjRfd3JpdGUoKGEpLCAoJnJlZyksICh2YWx1ZSksICgmcmVnaCksICh2YWxoKSwgXAorCQkJCShmbHVzaCkpO1wKKwl9CisjZWxzZQorI2RlZmluZSBXUklURV9SRUcocmVnLCB2YWx1ZSwgZmx1c2gpIFwKKwlzbGljX3JlZzMyX3dyaXRlKCgmcmVnKSwgKHZhbHVlKSwgKGZsdXNoKSkKKyNkZWZpbmUgV1JJVEVfUkVHNjQoYSwgcmVnLCB2YWx1ZSwgcmVnaCwgdmFsaCwgZmx1c2gpIFwKKwlzbGljX3JlZzY0X3dyaXRlKChhKSwgKCZyZWcpLCAodmFsdWUpLCAoJnJlZ2gpLCAodmFsaCksIChmbHVzaCkpCisjZW5kaWYKKworI2VuZGlmICAvKiBfU0xJQ19PU19TUEVDSUZJQ19IXyAgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2J1aWxkLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljYnVpbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTA1ZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2J1aWxkLmgKQEAgLTAsMCArMSw5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZworICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiBzbGljYnVpbGQuaAorICoKKyAqIFRoZSBmb2xsb3dpbmcgY29udGFpbnMgdGhlIGNvbXBpbGVyIGRpcmVjdGl2ZSBzd2l0Y2hlcyB1c2VkIGZvcgorICogZGlmZmVyZW50IFNMSUMgYnVpbGQgb3B0aW9ucy4gIFRoZXkgY2FuIGFsbCBiZSBzZXQgaW4gdGhlIE1ha2VmaWxlCisgKiBidXQgdGhlIGRlZmF1bHRzIGFyZSBkZWZpbmVkIGhlcmUuCisgKi8KKyNpZm5kZWYgX1NMSUNfQlVJTERfSF8KKyNkZWZpbmUgX1NMSUNfQlVJTERfSF8KKworI2lmbmRlZiBTTElDX1BST0RVQ1RJT05fQlVJTEQKKyNkZWZpbmUgU0xJQ19QUk9EVUNUSU9OX0JVSUxECQkJMQorI2VuZGlmCisjaWZuZGVmIFNMSUNfRkFJTFVSRV9SRVNFVAorI2RlZmluZSBTTElDX0ZBSUxVUkVfUkVTRVQJCQkxCisjZW5kaWYKKyNkZWZpbmUgREJHICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNpZm5kZWYgU0xJQ19BU1NFUlRfRU5BQkxFRAorI2RlZmluZSBTTElDX0FTU0VSVF9FTkFCTEVECQkJMQorI2VuZGlmCisjaWZuZGVmIFNMSUNfTUNBU1RfRU5BQkxFRAorI2RlZmluZSBTTElDX01DQVNUX0VOQUJMRUQJCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAorI2RlZmluZSBTTElDX0dFVF9TVEFUU19FTkFCTEVECQkJMQorI2VuZGlmCisjaWZuZGVmIFNMSUNfR0VUX1NUQVRTX1RJTUVSX0VOQUJMRUQKKyNkZWZpbmUgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAkJMAorI2VuZGlmCisjaWZuZGVmIFNMSUNfUElOR19USU1FUl9FTkFCTEVECisjZGVmaW5lIFNMSUNfUElOR19USU1FUl9FTkFCTEVECQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19JT0NUTF9TVVBQT1JUX0VOQUJMRUQKKyNkZWZpbmUgU0xJQ19JT0NUTF9TVVBQT1JUX0VOQUJMRUQJCTEKKyNlbmRpZgorI2lmbmRlZiBBVEtfREVCVUcKKyNkZWZpbmUgQVRLX0RFQlVHCQkJCTEKKyNlbmRpZgorI2lmbmRlZiBTTElDX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAorI2RlZmluZSBTTElDX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAkJMAorI2VuZGlmCisjaWZuZGVmIFNMSUNfSU5URVJSVVBUX1BST0NFU1NfTElNSVQKKyNkZWZpbmUgU0xJQ19JTlRFUlJVUFRfUFJPQ0VTU19MSU1JVAkJMQorI2VuZGlmCisjaWZuZGVmIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCisjZGVmaW5lIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19PRkZMT0FEX0lQX0NIRUNLU1VNCisjZGVmaW5lIFNMSUNfT0ZGTE9BRF9JUF9DSEVDS1NVTQkJMQorI2VuZGlmCisjaWZuZGVmIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECisjZGVmaW5lIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECQkwCisjZW5kaWYKKyNpZm5kZWYgU1RBVFNfVElNRVJfSU5URVJWQUwKKyNkZWZpbmUgU1RBVFNfVElNRVJfSU5URVJWQUwJCQkyCisjZW5kaWYKKyNpZm5kZWYgUElOR19USU1FUl9JTlRFUlZBTAorI2RlZmluZSBQSU5HX1RJTUVSX0lOVEVSVkFMCQkJMQorI2VuZGlmCisKKyNlbmRpZiAgIC8qIF9TTElDX0JVSUxEX0hfICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2RiZy5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2RiZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NGU0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZGJnLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc2xpY2RiZy5oCisgKgorICogQWxsIGRlYnVnIGFuZCBhc3NlcnRpb24tYmFzZWQgZGVmaW5pdGlvbnMgYW5kIG1hY3JvcyBhcmUgaW5jbHVkZWQKKyAqIGluIHRoaXMgZmlsZSBmb3IgdGhlIFNMSUNPU1MgZHJpdmVyLgorICovCisjaWZuZGVmIF9TTElDX0RFQlVHX0hfCisjZGVmaW5lIF9TTElDX0RFQlVHX0hfCisKKyNpZmRlZiBTTElDX0RFRkFVTFRfTE9HX0xFVkVMCisjZWxzZQorI2RlZmluZSBTTElDTEVWRUwgICBLRVJOX0RFQlVHCisjZW5kaWYKKyNkZWZpbmUgU0xJQ19ESVNQTEFZICAgICAgICAgICAgICBwcmludGsKKyNkZWZpbmUgREJHX0VSUk9SKG4sIGFyZ3MuLi4pICAgU0xJQ19ESVNQTEFZKEtFUk5fRU1FUkcgbiwgIyNhcmdzKQorCisjZGVmaW5lIFNMSUNfREVCVUdfTUVTU0FHRSAxCisjaWYgU0xJQ19ERUJVR19NRVNTQUdFCisvKiNkZWZpbmUgREJHX01TRyhuLCBhcmdzLi4uKSAgICAgIFNMSUNfRElTUExBWShTTElDTEVWRUwgbiwgIyNhcmdzKSovCisjZGVmaW5lIERCR19NU0cobiwgYXJncy4uLikKKyNlbHNlCisjZGVmaW5lIERCR19NU0cobiwgYXJncy4uLikKKyNlbmRpZgorCisjaWZkZWYgQVNTRVJUCisjdW5kZWYgQVNTRVJUCisjZW5kaWYKKworI2lmIFNMSUNfQVNTRVJUX0VOQUJMRUQKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIFZBTElEX0FERFJFU1MocCkgICgxKQorI2Vsc2UKKyNkZWZpbmUgVkFMSURfQUREUkVTUyhwKSAgKCgodTMyKShwKSAmIDB4ODAwMDAwMDApIHx8ICgodTMyKShwKSA9PSAwKSkKKyNlbmRpZgorI2lmbmRlZiBBU1NFUlQKKyNkZWZpbmUgQVNTRVJUKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlEQkdfRVJST1IoIkFTU0VSVCgpIEZhaWx1cmU6IGZpbGUgJXMsIGZ1bmN0aW9uICVzICBsaW5lICVkXG4iLFwKKwkJX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCXNsaWNfYXNzZXJ0X2ZhaWwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKyNlbmRpZgorI2lmbmRlZiBBU1NFUlRNU0cKKyNkZWZpbmUgQVNTRVJUTVNHKGEsbXNnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKCEoYSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlEQkdfRVJST1IoIkFTU0VSVCgpIEZhaWx1cmU6IGZpbGUgJXMsIGZ1bmN0aW9uICVzIlwKKwkJCSJsaW5lICVkOiAlc1xuIixcCisJCQlfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fLCAobXNnKSk7ICAgICAgICAgICAgXAorCQlzbGljX2Fzc2VydF9mYWlsKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorI2VuZGlmCisjZWxzZQorI2lmbmRlZiBBU1NFUlQKKyNkZWZpbmUgQVNTRVJUKGEpCisjZW5kaWYKKyNpZm5kZWYgQVNTRVJUTVNHCisjZGVmaW5lIEFTU0VSVE1TRyhhLCBtc2cpCisjZW5kaWYKKyNlbmRpZiAvKiBTTElDX0FTU0VSVF9FTkFCTEVEICAqLworCisjZW5kaWYgIC8qICBfU0xJQ19ERUJVR19IXyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkdW1wLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZHVtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYTliNDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZHVtcC5oCkBAIC0wLDAgKzEsMjc4IEBACisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIE5PIExJQ0VOU0UgVE8gQU5ZIEFMQUNSSVRFQ0ggUEFURU5UIENMQUlNIElTIEdSQU5URUQgQlkgQU5ZIENPUFlSSUdIVAorICogTElDRU5TRSBUTyBUSElTIE9SIE9USEVSIFNPRlRXQVJFLiBUSElTIFNPRlRXQVJFIE1BWSBCRSBDT1ZFUkVEIEJZCisgKiBBTEFDUklURUNIIFBBVEVOVFMgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBVLlMuIFBBVEVOVCBOT1MuIDYsMjI2LDY4MCwKKyAqIDYsMjQ3LDA2MCwgNiwzMzQsMTUzLCA2LDM4OSw0NzksIDYsMzkzLDQ4NywgNiw0MjcsMTcxLCA2LDQyNywxNzMKKyAqIGFuZCA2LDQzNCw2MjAuCisgKiBUSElTIFNPRlRXQVJFIElTIE5PVCBTVUJKRUNUIFRPIFRIRSBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSAoR1BMKS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kCisgKiBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZQorICogaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIKKyAqIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKi8KKyNpZm5kZWYgX1NMSUNfRFVNUF9IXworI2RlZmluZSBfU0xJQ19EVU1QX0hfCisKKyNkZWZpbmUgREVCVUdfU1VDQ0VTUyAgIDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVXRpbGl0eSBwcm9jZXNzb3IgcmVnaXN0ZXIgbG9jYXRpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFVUSUxJVFlfUkVTRVQgICAgICAgMHgwCisjZGVmaW5lIFVUSUxJVFlfSVNQX0FERFIgICAgMHg0ICAgICAvKiBJbnRlcnJ1cHQgc3RhdHVzIFBvaW50ZXIgKi8KKyNkZWZpbmUgVVRJTElUWV9JU1JfQUREUiAgICAweDggICAgIC8qIEludGVycnVwdCBzdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVRJTElUWV9JQ1JfQUREUiAgICAweGMgICAgIC8qIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVUSUxJVFlfQ1BSX0FERFIgICAgMHgxMCAgICAvKiBDb21tYW5kIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVRJTElUWV9EUFJfQUREUiAgICAweDE0ICAgIC8qIERhdGEgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBVVElMSVRZX0RNUF9UUlEgICAgIDB4MTggICAgLyogRHVtcCBxdWV1ZSBvbnRvIEFMVSBmb3IgYW5hbHlzZXIgKi8KKyNkZWZpbmUgVVRJTElUWV9VUFBfQUREUiAgICAweDFjICAgIC8qIEJpdHMgNjMtMzIgb2YgY21kL2RhdGEgcG9pbnRlciAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBJTklDIHN0YXR1cyByZWdpc3RlciBiaXRzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTTElDX0lTUl9DQyAgICAgICAgIDB4MTAwMDAwMDAgIC8qIENvbW1hbmQgY29tcGxldGUgLSBzeW5jaHJvbm91cyAqLworI2RlZmluZSBTTElDX0lTUl9FUlIgICAgICAgIDB4MDEwMDAwMDAgIC8qIENvbW1hbmQgRXJyb3IgLSBzeW5jaHJvbm91cyAqLworI2RlZmluZSBTTElDX0lTUl9DTURfTUFTSyAgIDB4MTEwMDAwMDAgIC8qIENvbW1hbmQgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgU0xJQ19JU1JfVFBIICAgICAgICAweDAwMDgwMDAwICAvKiBUcmFuc21pdCBwcm9jZXNzb3IgaGFsdGVkIC0gYXN5bmMgKi8KKyNkZWZpbmUgU0xJQ19JU1JfUlBIICAgICAgICAweDAwMDQwMDAwICAvKiBSZWNlaXZlIHByb2Nlc3NvciBoYWx0ZWQgLSBhc3luYyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBJTklDIENvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTTElDX0lDUl9PRkYgICAgICAgIDAgICAgICAgICAgIC8qIEludGVycnVwdHMgZGlzYWJsZWQgKi8KKyNkZWZpbmUgU0xJQ19JQ1JfT04gICAgICAgICAxICAgICAgICAgICAvKiBJbnRlcnJ1cHRzIGVuYWJsZWQgKi8KKyNkZWZpbmUgU0xJQ19JQ1JfTUFTSyAgICAgICAyICAgICAgICAgICAvKiBJbnRlcnJ1cHRzIG1hc2tlZCAqLworCisjZGVmaW5lIFdSSVRFX0RSRUcocmVnLCB2YWx1ZSwgZmx1c2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3cml0ZWwoKHZhbHVlKSwgKHJlZykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChmbHVzaCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwltYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb21tYW5kIEZvcm1hdAorICoKKyAqIEVhY2ggY29tbWFuZCBjb250YWlucyBhIGNvbW1hbmQgYnl0ZSB3aGljaCBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6CisgKgorICogIGJpdHM6ICAgNy0zICAgICAyICAgICAgIDEtMAorICogICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgIGNvbW1hbmQgICAgIEFsdC4gUHJvYyAgIFByb2Nlc3NvcgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBNYWNybyB0byBjcmVhdGUgdGhlIGNvbW1hbmQgYnl0ZSBnaXZlbiB0aGUgY29tbWFuZCwgQWx0LiBQcm9jLCBhbmQKKyAqIFByb2Nlc3NvciB2YWx1ZXMuICBOb3RlIHRoYXQgdGhlIG1hY3JvIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWVzIGFyZQorICogcHJlc2hpZnRlZC4gIFRoYXQgaXMsIHRoZSB2YWx1ZXMgZm9yIGFsdC4gcHJvYyBhcmUgMCBmb3IgdHJhbnNtaXQgYW5kCisgKiA0IGZvciByZWNlaXZlLgorICovCisjZGVmaW5lIENPTU1BTkRfQllURShjb21tYW5kLCBhbHRfcHJvYywgcHJvYykgKChjb21tYW5kKSB8IChhbHRfcHJvYykgfCAocHJvYykpCisKKy8qCisgKiBDb21tYW5kIHZhbHVlcworICovCisjZGVmaW5lIENNRF9IQUxUICAgICAgICAweDAgICAgIC8qIFNlbmQgYSBoYWx0IHRvIHRoZSBJTklDICovCisjZGVmaW5lIENNRF9SVU4gICAgICAgICAweDggICAgIC8qIFN0YXJ0IHRoZSBoYWx0ZWQgSU5JQyAqLworI2RlZmluZSBDTURfU1RFUCAgICAgICAgMHgxMCAgICAvKiBTaW5nbGUgc3RlcCB0aGUgaW5pYyAqLworI2RlZmluZSBDTURfQlJFQUsgICAgICAgMHgxOCAgICAvKiBTZXQgYSBicmVha3BvaW50IC0gOCBieXRlIGNvbW1hbmQgKi8KKyNkZWZpbmUgQ01EX1JFU0VUX0JSRUFLIDB4MjAgICAgLyogUmVzZXQgYSBicmVha3BvaW50IC0gOCBieXRlIGNtZCAqLworI2RlZmluZSBDTURfRFVNUCAgICAgICAgMHgyOCAgICAvKiBEdW1wIElOSUMgbWVtb3J5IC0gOCBieXRlIGNvbW1hbmQgKi8KKyNkZWZpbmUgQ01EX0xPQUQgICAgICAgIDB4MzAgICAgLyogTG9hZCBJTklDIG1lbW9yeSAtIDggYnl0ZSBjb21tYW5kICovCisjZGVmaW5lIENNRF9NQVAgICAgICAgICAweDM4ICAgIC8qIE1hcCBvdXQgYSBST00gaW5zdHJ1Y3Rpb24gLSA4IEJDICovCisjZGVmaW5lIENNRF9DQU1fT1BTICAgICAweDM4ICAgIC8qIHBlcmZvcm0gb3BzIG9uIHNwZWNpZmljIENBTSAqLworI2RlZmluZSBDTURfWE1UICAgICAgICAgMHg0MCAgICAvKiBUcmFuc21pdCBmcmFtZSAqLworI2RlZmluZSBDTURfUkNWICAgICAgICAgMHg0OCAgICAvKiBSZWNlaXZlIGZyYW1lICovCisKKy8qCisgKiBBbHQuIFByb2MgdmFsdWVzCisgKgorICogV2hlbiB0aGUgcHJvYyB2YWx1ZSBpcyBzZXQgdG8gdGhlIHV0aWxpdHkgcHJvY2Vzc29yLCB0aGUgQWx0LiBQcm9jCisgKiBzcGVjaWZpZXMgd2hpY2ggcHJvY2Vzc29yIGhhbmRsZXMgdGhlIGRlYnVnZ2luZy4KKyAqLworI2RlZmluZSBBTFRfUFJPQ19UUkFOU01JVCAgIDB4MAorI2RlZmluZSBBTFRfUFJPQ19SRUNFSVZFICAgIDB4NAorCisvKgorICogUHJvYyB2YWx1ZXMKKyAqLworI2RlZmluZSBQUk9DX0lOVkFMSUQgICAgICAgIDB4MAorI2RlZmluZSBQUk9DX05PTkUgICAgICAgICAgIDB4MCAgLyogR2lnYWJpdCB1c2UgKi8KKyNkZWZpbmUgUFJPQ19UUkFOU01JVCAgICAgICAweDEKKyNkZWZpbmUgUFJPQ19SRUNFSVZFICAgICAgICAweDIKKyNkZWZpbmUgUFJPQ19VVElMSVRZICAgICAgICAweDMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIDggYnl0ZSBjb21tYW5kIHN0cnVjdHVyZSBkZWZpbml0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBCcmVhayBhbmQgUmVzZXQgQnJlYWsgY29tbWFuZCBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IEJSRUFLIHsKKyAgICB1bnNpZ25lZCBjaGFyICAgICBjb21tYW5kOyAgICAvKiBDb21tYW5kIHdvcmQgZGVmaW5lZCBhYm92ZSAqLworICAgIHVuc2lnbmVkIGNoYXIgICAgIHJlc3ZkOworICAgIHVzaG9ydCAgICBjb3VudDsgICAgICAvKiBOdW1iZXIgb2YgZXhlY3V0aW9ucyBiZWZvcmUgYnJlYWsgKi8KKyAgICB1MzIgICBhZGRyOyAgICAgICAvKiBBZGRyZXNzIG9mIGJyZWFrIHBvaW50ICovCit9OworCisvKgorICogRHVtcCBhbmQgTG9hZCBjb21tYW5kIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgZHVtcF9jbWQgeworICAgIHVuc2lnbmVkIGNoYXIgICAgIGNtZDsgICAgICAgIC8qIENvbW1hbmQgd29yZCBkZWZpbmVkIGFib3ZlICovCisgICAgdW5zaWduZWQgY2hhciAgICAgZGVzYzsgICAgICAgLyogRGVzY3JpcHRvciB2YWx1ZXMgLSBkZWZpbmVkIGJlbG93ICovCisgICAgdXNob3J0ICAgIGNvdW50OyAgICAgIC8qIG51bWJlciBvZiA0IGJ5dGUgd29yZHMgdG8gYmUgdHJhbnNmZXJyZWQgKi8KKyAgICB1MzIgICBhZGRyOyAgICAgICAvKiBzdGFydCBhZGRyZXNzIG9mIGR1bXAgb3IgbG9hZCAqLworfTsKKworLyoKKyAqIFJlY2VpdmUgb3IgVHJhbnNtaXQgYSBmcmFtZS4KKyAqLworc3RydWN0IFJDVl9PUl9YTVRfRlJBTUUgeworICAgIHVuc2lnbmVkIGNoYXIgICAgIGNvbW1hbmQ7ICAgIC8qIENvbW1hbmQgd29yZCBkZWZpbmVkIGFib3ZlICovCisgICAgdW5zaWduZWQgY2hhciAgICAgTWFjSWQ7ICAgICAgLyogTWFjIElEIG9mIGludGVyZmFjZSAtIHRyYW5zbWl0IG9ubHkgKi8KKyAgICB1c2hvcnQgICAgY291bnQ7ICAgICAgLyogTGVuZ3RoIG9mIGZyYW1lIGluIGJ5dGVzICovCisgICAgdTMyICAgcGFkOyAgICAgICAgLyogbm90IHVzZWQgKi8KK307CisKKy8qCisgKiBWYWx1ZXMgb2YgZGVzYyBmaWVsZCBpbiBEVU1QX09SX0xPQUQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgREVTQ19SRklMRSAgICAgICAgICAweDAgICAgIC8qIFJlZ2lzdGVyIGZpbGUgKi8KKyNkZWZpbmUgREVTQ19TUkFNICAgICAgICAgICAweDEgICAgIC8qIFNSQU0gKi8KKyNkZWZpbmUgREVTQ19EUkFNICAgICAgICAgICAweDIgICAgIC8qIERSQU0gKi8KKyNkZWZpbmUgREVTQ19RVUVVRSAgICAgICAgICAweDMgICAgIC8qIHF1ZXVlcyAqLworI2RlZmluZSBERVNDX1JFRyAgICAgICAgICAgIDB4NCAgICAgLyogR2VuZXJhbCByZWdpc3RlcnMgKHBjLCBzdGF0dXMsIGV0YykgKi8KKyNkZWZpbmUgREVTQ19TRU5TRSAgICAgICAgICAweDUgICAgIC8qIFNlbnNlIHJlZ2lzdGVyICovCisKKy8qIERlc2NyaXB0b3IgZmllbGQgZGVmaW5pdGlvbnMgZm9yIENNRF9EVU1QX0NBTSAqLworI2RlZmluZSBEVU1QX0NBTV9BICAgICAgICAgICAgICAwCisjZGVmaW5lIERVTVBfQ0FNX0IgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAvKiB1bnVzZWQgYXQgcHJlc2VudCAqLworI2RlZmluZSBEVU1QX0NBTV9DICAgICAgICAgICAgICAyCisjZGVmaW5lIERVTVBfQ0FNX0QgICAgICAgICAgICAgIDMKKyNkZWZpbmUgU0VBUkNIX0NBTV9BICAgICAgICAgICAgNAorI2RlZmluZSBTRUFSQ0hfQ0FNX0MgICAgICAgICAgICA1CisKKy8qCisgKiBNYXAgY29tbWFuZCB0byByZXBsYWNlIGEgY29tbWFuZCBpbiBST00gd2l0aCBhIGNvbW1hbmQgaW4gV0NTCisgKi8KK3N0cnVjdCBNQVAgeworICAgIHVuc2lnbmVkIGNoYXIgICBjb21tYW5kOyAgICAvKiBDb21tYW5kIHdvcmQgZGVmaW5lZCBhYm92ZSAqLworICAgIHVuc2lnbmVkIGNoYXIgICBub3RfdXNlZFszXTsKKyAgICB1c2hvcnQgIG1hcF90bzsgICAgIC8qIEluc3RydWN0aW9uIGFkZHJlc3MgaW4gV0NTICovCisgICAgdXNob3J0ICBtYXBfb3V0OyAgICAvKiBJbnN0cnVjdGlvbiBhZGRyZXNzIGluIFJPTSAqLworfTsKKworLyoKKyAqIE1pc2MgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBTTElDX01BWF9RVUVVRSAgICAgICAzMiAvKiBUb3RhbCAjIG9mIHF1ZXVlcyBvbiB0aGUgSU5JQyAoMC0zMSkqLworI2RlZmluZSBTTElDXzRNQVhfUkVHICAgICAgIDUxMiAvKiBUb3RhbCAjIG9mIDQtcG9ydCBmaWxlLXJlZ2lzdGVycyAgICAqLworI2RlZmluZSBTTElDXzFNQVhfUkVHICAgICAgIDM4NCAvKiBUb3RhbCAjIG9mIGZpbGUtcmVnaXN0ZXJzICAgICAgICAgICAqLworI2RlZmluZSBTTElDX0dCTUFYX1JFRyAgICAgMTAyNCAvKiBUb3RhbCAjIG9mIEdiaXQgZmlsZS1yZWdpc3RlcnMgICAgICAqLworI2RlZmluZSBTTElDX05VTV9SRUcgICAgICAgICAzMiAvKiBub24tZmlsZS1yZWdpc3RlcnMgPSBOVU1fUkVHIGluIHRtLXNpbWJhLmggKi8KKyNkZWZpbmUgU0xJQ19HQl9DQU1BX1NaRSAgICAgMzIKKyNkZWZpbmUgU0xJQ19HQl9DQU1CX1NaRSAgICAgMTYKKyNkZWZpbmUgU0xJQ19HQl9DQU1BQl9TWkUgICAgMzIKKyNkZWZpbmUgU0xJQ19HQl9DQU1DX1NaRSAgICAgMTYKKyNkZWZpbmUgU0xJQ19HQl9DQU1EX1NaRSAgICAgMTYKKyNkZWZpbmUgU0xJQ19HQl9DQU1DRF9TWkUgICAgMzIKKworLyoKKyAqIENvcmVkdW1wIGhlYWRlciBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IENPUkVfUSB7CisgICAgdTMyICAgcXVldWVPZmY7ICAgICAgICAgICAvKiBPZmZzZXQgb2YgcXVldWUgKi8KKyAgICB1MzIgICBxdWV1ZXNpemU7ICAgICAgICAgIC8qIHNpemUgb2YgcXVldWUgKi8KK307CisKKyNkZWZpbmUgRFJJVkVSX05BTUVfU0laRSAgICAzMgorCitzdHJ1Y3Qgc2xpY2NvcmVfaGRyIHsKKyAgICB1bnNpZ25lZCBjaGFyIGRyaXZlcl92ZXJzaW9uW0RSSVZFUl9OQU1FX1NJWkVdOyAvKiBEcml2ZXIgdmVyc2lvbiBzdHJpbmcgKi8KKyAgICB1MzIgICBSY3ZSZWdPZmY7ICAgICAgICAgIC8qIE9mZnNldCBvZiByZWNlaXZlIHJlZ2lzdGVycyAqLworICAgIHUzMiAgIFJjdlJlZ3NpemU7ICAgICAgICAgLyogc2l6ZSBvZiByZWNlaXZlIHJlZ2lzdGVycyAqLworICAgIHUzMiAgIFhtdFJlZ09mZjsgICAgICAgICAgLyogT2Zmc2V0IG9mIHRyYW5zbWl0IHJlZ2lzdGVycyAqLworICAgIHUzMiAgIFhtdFJlZ3NpemU7ICAgICAgICAgLyogc2l6ZSBvZiB0cmFuc21pdCByZWdpc3RlcnMgKi8KKyAgICB1MzIgICBGaWxlUmVnT2ZmOyAgICAgICAgIC8qIE9mZnNldCBvZiByZWdpc3RlciBmaWxlICovCisgICAgdTMyICAgRmlsZVJlZ3NpemU7ICAgICAgICAvKiBzaXplIG9mIHJlZ2lzdGVyIGZpbGUgKi8KKyAgICB1MzIgICBTcmFtT2ZmOyAgICAgICAgICAgIC8qIE9mZnNldCBvZiBTcmFtICovCisgICAgdTMyICAgU3JhbXNpemU7ICAgICAgICAgICAvKiBzaXplIG9mIFNyYW0gKi8KKyAgICB1MzIgICBEcmFtT2ZmOyAgICAgICAgICAgIC8qIE9mZnNldCBvZiBEcmFtICovCisgICAgdTMyICAgRHJhbXNpemU7ICAgICAgICAgICAvKiBzaXplIG9mIERyYW0gKi8KKyAgICBDT1JFX1EgICAgcXVldWVzW1NMSUNfTUFYX1FVRVVFXTsgLyogc2l6ZSBhbmQgb2Zmc2V0cyBvZiBxdWV1ZXMgKi8KKyAgICB1MzIgICBDYW1BTU9mZjsgICAgICAgICAgIC8qIE9mZnNldCBvZiBDQU0gQSBjb250ZW50cyAqLworICAgIHUzMiAgIENhbUFTaXplOyAgICAgICAgICAgLyogU2l6ZSBvZiBDYW0gQSAqLworICAgIHUzMiAgIENhbUJNT2ZmOyAgICAgICAgICAgLyogT2Zmc2V0IG9mIENBTSBCIGNvbnRlbnRzICovCisgICAgdTMyICAgQ2FtQlNpemU7ICAgICAgICAgICAvKiBTaXplIG9mIENhbSBCICovCisgICAgdTMyICAgQ2FtQ01PZmY7ICAgICAgICAgICAvKiBPZmZzZXQgb2YgQ0FNIEMgY29udGVudHMgKi8KKyAgICB1MzIgICBDYW1DU2l6ZTsgICAgICAgICAgIC8qIFNpemUgb2YgQ2FtIEMgKi8KKyAgICB1MzIgICBDYW1ETU9mZjsgICAgICAgICAgIC8qIE9mZnNldCBvZiBDQU0gRCBjb250ZW50cyAqLworICAgIHUzMiAgIENhbURTaXplOyAgICAgICAgICAgLyogU2l6ZSBvZiBDYW0gRCAqLworfTsKKworLyoKKyAqIGRlZmluaXRpb25zIG5lZWRlZCBmb3Igb3VyIGtlcm5lbC1tb2RlIGdkYiBzdHViLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBEZWZpbml0aW9ucyAmIFR5cGVkZWZzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEJVRk1BWCAgICAgIDB4MjAwMDAgLyogMTI4ayAtIHNpemUgb2YgaW5wdXQvb3V0cHV0IGJ1ZmZlciAqLworI2RlZmluZSBCVUZNQVhQMiAgICA1ICAgICAgIC8qIDIqKjUgKDMyKSA0SyBwYWdlcyAqLworCisjZGVmaW5lIElPQ1RMX1NJTUJBX0JSRUFLICAgICAgICAgICBfSU9XKCdzJywgMCwgdW5zaWduZWQgbG9uZykKKy8qICNkZWZpbmUgSU9DVExfU0lNQkFfSU5JVCAgICAgICAgICAgIF9JT1coJ3MnLCAxLCB1bnNpZ25lZCBsb25nKSAqLworI2RlZmluZSBJT0NUTF9TSU1CQV9LSUxMX1RHVF9QUk9DICAgX0lPVygncycsIDIsIHVuc2lnbmVkIGxvbmcpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEdsb2JhbCB2YXJpYWJsZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgVEhSRUFEUkVDRUlWRSAgIDEgICAvKiBiaXQgMCBvZiBTdG9wcGVkVGhyZWFkcyAqLworI2RlZmluZSBUSFJFQURUUkFOU01JVCAgMiAgIC8qIGJpdCAxIG9mIFN0b3BwZWRUaHJlYWRzICovCisjZGVmaW5lIFRIUkVBREJPVEggICAgICAzICAgLyogYml0IDAgYW5kIDEuLiAqLworCisjZW5kaWYgIC8qICBfU0xJQ19EVU1QX0ggICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaHcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwM2U5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaHcuaApAQCAtMCwwICsxLDg0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZworICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiBzbGljaHcuaAorICoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgdGhhdCBhcmUgY29tbW9uIHRvIG91ciBoYXJkd2FyZS4KKyAqLworI2lmbmRlZiBfX1NMSUNIV19IX18KKyNkZWZpbmUgX19TTElDSFdfSF9fCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTEFDUklURUNIICAgIDB4MTM5QQorI2RlZmluZSBTTElDXzFHQl9ERVZJQ0VfSUQgICAgICAgICAgMHgwMDA1CisjZGVmaW5lIFNMSUNfMkdCX0RFVklDRV9JRCAgICAgICAgICAweDAwMDcgIC8qT2FzaXMgRGV2aWNlIElEICovCisKKyNkZWZpbmUgU0xJQ18xR0JfQ0lDQURBX1NVQlNZU19JRCAgIDB4MDAwOAorCisjZGVmaW5lIFNMSUNfTkJSX01BQ1MgICAgICA0CisKKyNkZWZpbmUgU0xJQ19SQ1ZCVUZfU0laRSAgICAgICAgMjA0OAorI2RlZmluZSBTTElDX1JDVkJVRl9IRUFEU0laRSAgICAzNAorI2RlZmluZSBTTElDX1JDVkJVRl9UQUlMU0laRSAgICAwCisjZGVmaW5lIFNMSUNfUkNWQlVGX0RBVEFTSVpFICAgIChTTElDX1JDVkJVRl9TSVpFIC0gKFNMSUNfUkNWQlVGX0hFQURTSVpFICtcCisJCQkJCVNMSUNfUkNWQlVGX1RBSUxTSVpFKSkKKworI2RlZmluZSBWR0JTVEFUX1hQRVJSICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFZHQlNUQVRfWEVSUlNIRlQgICAgICAgIDI1CisjZGVmaW5lIFZHQlNUQVRfWENTRVJSICAgICAgICAgIDB4MjMKKyNkZWZpbmUgVkdCU1RBVF9YVUZMT1cgICAgICAgICAgMHgyMgorI2RlZmluZSBWR0JTVEFUX1hITEVOICAgICAgICAgICAweDIwCisjZGVmaW5lIFZHQlNUQVRfTkVURVJSICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgVkdCU1RBVF9ORVJSU0hGVCAgICAgICAgMTYKKyNkZWZpbmUgVkdCU1RBVF9ORVJSTVNLICAgICAgICAgMHgxZmYKKyNkZWZpbmUgVkdCU1RBVF9OQ1NFUlIgICAgICAgICAgMHgxMDMKKyNkZWZpbmUgVkdCU1RBVF9OVUZMT1cgICAgICAgICAgMHgxMDIKKyNkZWZpbmUgVkdCU1RBVF9OSExFTiAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgVkdCU1RBVF9MTktFUlIgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBWR0JTVEFUX0xFUlJNU0sgICAgICAgICAweGZmCisjZGVmaW5lIFZHQlNUQVRfTERFQVJMWSAgICAgICAgIDB4ODYKKyNkZWZpbmUgVkdCU1RBVF9MQk9GTE8gICAgICAgICAgMHg4NQorI2RlZmluZSBWR0JTVEFUX0xDT0RFUlIgICAgICAgICAweDg0CisjZGVmaW5lIFZHQlNUQVRfTERCTE5CTCAgICAgICAgIDB4ODMKKyNkZWZpbmUgVkdCU1RBVF9MQ1JDRVJSICAgICAgICAgMHg4MgorI2RlZmluZSBWR0JTVEFUX0xPRkxPICAgICAgICAgICAweDgxCisjZGVmaW5lIFZHQlNUQVRfTFVGTE8gICAgICAgICAgIDB4ODAKKyNkZWZpbmUgSVJIRERSX0ZMRU5fTVNLICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBJUkhERFJfU1ZBTElEICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIElSSEREUl9FUlIgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVF84MDJPRSAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBWUkhTVEFUX1RQT0ZMTyAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCXzgwMlVFICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfUkNWRSAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9CVUZGICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0NBUlJFICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfTE9OR0UgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9QUkVBICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0NSQyAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfRFJCTCAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9DT0RFICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX1RQQ1NVTSAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfVFBITEVOICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBWUkhTVEFUQl9JUENTVU0gICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0lQTEVSUiAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfSVBIRVJSICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBTTElDX01BWDY0X0JDTlQgICAgICAgICAyMworI2RlZmluZSBTTElDX01BWDMyX0JDTlQgICAgICAgICAyNgorI2RlZmluZSBJSENNRF9YTVRfUkVRICAgICAgICAgICAweDAxCisjZGVmaW5lIElIRkxHX0lGU0hGVCAgICAgICAgICAgIDIKKyNkZWZpbmUgU0xJQ19SU1BCVUZfU0laRSAgICAgICAgMzIKKworI2RlZmluZSBTTElDX1JFU0VUX01BR0lDICAgICAgICAweERFQUQKKyNkZWZpbmUgSUNSX0lOVF9PRkYgICAgICAgICAgICAgMAorI2RlZmluZSBJQ1JfSU5UX09OICAgICAgICAgICAgICAxCisjZGVmaW5lIElDUl9JTlRfTUFTSyAgICAgICAgICAgIDIKKworI2RlZmluZSBJU1JfRVJSICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIElTUl9SQ1YgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgSVNSX0NNRCAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBJU1JfSU8gICAgICAgICAgICAgICAgICAweDYwMDAwMDAwCisjZGVmaW5lIElTUl9VUEMgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgSVNSX0xFVkVOVCAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBJU1JfUk1JU1MgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIElTUl9VUENFUlIgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSVNSX1hEUk9QICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBJU1JfVVBDQlNZICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElTUl9FVk1TSyAgICAgICAgICAgICAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgSVNSX1BJTkdNQVNLICAgICAgICAgICAgMHgwMDcwMDAwMAorI2RlZmluZSBJU1JfUElOR0RTTUFTSyAgICAgICAgICAweDAwNzEwMDAwCisjZGVmaW5lIElTUl9VUENNQVNLICAgICAgICAgICAgIDB4MTEwMDAwMDAKKyNkZWZpbmUgU0xJQ19XQ1NfU1RBUlQgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBTTElDX1dDU19DT01QQVJFICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFNMSUNfUkNWV0NTX0JFR0lOICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgU0xJQ19SQ1ZXQ1NfRklOSVNIICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBTTElDX1BNX01BWFBBVFRFUk5TICAgICA2CisjZGVmaW5lIFNMSUNfUE1fUEFUVEVSTlNJWkUgICAgIDEyOAorI2RlZmluZSBTTElDX1BNQ0FQU19XQUtFT05MQU4gICAweDAwMDAwMDAxCisjZGVmaW5lIE1JSUNSX1JFR19QQ1IgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgTUlJQ1JfUkVHXzQgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBNSUlDUl9SRUdfOSAgICAgICAgICAgICAweDAwMDkwMDAwCisjZGVmaW5lIE1JSUNSX1JFR18xNiAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgUENSX1JFU0VUICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFBDUl9QT1dFUkRPV04gICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBQQ1JfU1BFRURfMTAwICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgUENSX1NQRUVEXzEwMDAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFBDUl9BVVRPTkVHICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBQQ1JfQVVUT05FR19SU1QgICAgICAgICAweDAyMDAKKyNkZWZpbmUgUENSX0RVUExFWF9GVUxMICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFBTUl9MSU5LVVAgICAgICAgICAgICAgIDB4MDAwNAorCisjZGVmaW5lIFBBUl9BRFYxMDBGRCAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBQQVJfQURWMTAwSEQgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgUEFSX0FEVjEwRkQgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFBBUl9BRFYxMEhEICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBQQVJfQVNZTVBBVVNFICAgICAgICAgICAweDBDMDAKKyNkZWZpbmUgUEFSXzgwMl8zICAgICAgICAgICAgICAgMHgwMDAxCisKKyNkZWZpbmUgUEFSX0FEVjEwMDBYRkQgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFBBUl9BRFYxMDAwWEhEICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBQQVJfQVNZTVBBVVNFX0ZJQkVSICAgICAweDAxODAKKworI2RlZmluZSBQR0NfQURWMTAwMEZEICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgUEdDX0FEVjEwMDBIRCAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFNFRVFfTElOS0ZBSUwgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBTRUVRX1NQRUVEICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgU0VFUV9EVVBMRVggICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFRES19EVVBMRVggICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBUREtfU1BFRUQgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgTVJWX1JFRzE2X1hPVkVST04gICAgICAgMHgwMDY4CisjZGVmaW5lIE1SVl9SRUcxNl9YT1ZFUk9GRiAgICAgIDB4MDAwOAorI2RlZmluZSBNUlZfU1BFRURfMTAwMCAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgTVJWX1NQRUVEXzEwMCAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIE1SVl9TUEVFRF8xMCAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBNUlZfRlVMTERVUExFWCAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgTVJWX0xJTktVUCAgICAgICAgICAgICAgMHgwNDAwCisKKyNkZWZpbmUgR0lHX0xJTktVUCAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdJR19GVUxMRFVQTEVYICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBHSUdfU1BFRURfTUFTSyAgICAgICAgICAweDAwMEMKKyNkZWZpbmUgR0lHX1NQRUVEXzEwMDAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIEdJR19TUEVFRF8xMDAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBHSUdfU1BFRURfMTAgICAgICAgICAgICAweDAwMDAKKworI2RlZmluZSBNQ1JfUkVTRVQgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIE1DUl9DUkNFTiAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgTUNSX0ZVTExEICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBNQ1JfUEFEICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIE1DUl9SRVRSWUxBVEUgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgTUNSX0JPTF9TSElGVCAgICAgICAgICAgMjEKKyNkZWZpbmUgTUNSX0lQRzFfU0hJRlQgICAgICAgICAgMTQKKyNkZWZpbmUgTUNSX0lQRzJfU0hJRlQgICAgICAgICAgNworI2RlZmluZSBNQ1JfSVBHM19TSElGVCAgICAgICAgICAwCisjZGVmaW5lIEdNQ1JfUkVTRVQgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgR01DUl9HQklUICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBHTUNSX0ZVTExEICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEdNQ1JfR0FQQkJfU0hJRlQgICAgICAgIDE0CisjZGVmaW5lIEdNQ1JfR0FQUjFfU0hJRlQgICAgICAgIDcKKyNkZWZpbmUgR01DUl9HQVBSMl9TSElGVCAgICAgICAgMAorI2RlZmluZSBHTUNSX0dBUEJCXzEwMDAgICAgICAgICAweDYwCisjZGVmaW5lIEdNQ1JfR0FQUjFfMTAwMCAgICAgICAgIDB4MkMKKyNkZWZpbmUgR01DUl9HQVBSMl8xMDAwICAgICAgICAgMHg0MAorI2RlZmluZSBHTUNSX0dBUEJCXzEwMCAgICAgICAgICAweDcwCisjZGVmaW5lIEdNQ1JfR0FQUjFfMTAwICAgICAgICAgIDB4MkMKKyNkZWZpbmUgR01DUl9HQVBSMl8xMDAgICAgICAgICAgMHg0MAorI2RlZmluZSBYQ1JfUkVTRVQgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFhDUl9YTVRFTiAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgWENSX1BBVVNFRU4gICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBYQ1JfTE9BRFJORyAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFJDUl9SRVNFVCAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgUkNSX1JDVkVOICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBSQ1JfUkNWQUxMICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFJDUl9SQ1ZCQUQgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgUkNSX0NUTEVOICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBSQ1JfQUREUkFFTiAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEdYQ1JfUkVTRVQgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgR1hDUl9YTVRFTiAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHWENSX1BBVVNFRU4gICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEdSQ1JfUkVTRVQgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgR1JDUl9SQ1ZFTiAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBHUkNSX1JDVkFMTCAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEdSQ1JfUkNWQkFEICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR1JDUl9DVExFTiAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBHUkNSX0FERFJBRU4gICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEdSQ1JfSEFTSFNJWkVfU0hJRlQgICAgIDE3CisjZGVmaW5lIEdSQ1JfSEFTSFNJWkUgICAgICAgICAgIDE0CisKKyNkZWZpbmUgU0xJQ19FRVBST01fSUQgICAgICAgIDB4QTVBNQorI2RlZmluZSBTTElDX1NSQU1fU0laRTJHQiAgICAgKDY0ICogMTAyNCkKKyNkZWZpbmUgU0xJQ19TUkFNX1NJWkUxR0IgICAgICgzMiAqIDEwMjQpCisjZGVmaW5lIFNMSUNfSE9TVElEX0RFRkFVTFQgICAweEZGRkYgICAgICAvKiB1bmluaXRpYWxpemVkIGhvc3RpZCAqLworI2RlZmluZSBTTElDX05CUl9NQUNTICAgICAgICAgNAorCisjaWZuZGVmIEZBTFNFCisjZGVmaW5lIEZBTFNFICAwCisjZWxzZQorI3VuZGVmICBGQUxTRQorI2RlZmluZSBGQUxTRSAgMAorI2VuZGlmCisKKyNpZm5kZWYgVFJVRQorI2RlZmluZSBUUlVFICAgMQorI2Vsc2UKKyN1bmRlZiAgVFJVRQorI2RlZmluZSBUUlVFICAgMQorI2VuZGlmCisKK3N0cnVjdCBzbGljX3JjdmJ1ZiB7CisgICAgdW5zaWduZWQgY2hhciAgICAgcGFkMVs2XTsKKyAgICB1c2hvcnQgICAgcGFkMjsKKyAgICB1MzIgICBwYWQzOworICAgIHUzMiAgIHBhZDQ7CisgICAgdTMyICAgYnVmZmVyOworICAgIHUzMiAgIGxlbmd0aDsKKyAgICB1MzIgICBzdGF0dXM7CisgICAgdTMyICAgcGFkNTsKKyAgICB1c2hvcnQgICAgcGFkNjsKKyAgICB1bnNpZ25lZCBjaGFyICAgICBkYXRhW1NMSUNfUkNWQlVGX0RBVEFTSVpFXTsKK307CisKKyBzdHJ1Y3Qgc2xpY19oZGRyX3dkcyB7CisgIHVuaW9uIHsKKyAgICBzdHJ1Y3QgeworCXUzMiAgICBmcmFtZV9zdGF0dXM7CisJdTMyICAgIGZyYW1lX3N0YXR1c19iOworCXUzMiAgICB0aW1lX3N0YW1wOworCXUzMiAgICBjaGVja3N1bTsKKyAgICB9IGhkcnNfMTRwb3J0OworICAgIHN0cnVjdCB7CisJdTMyICAgIGZyYW1lX3N0YXR1czsKKwl1c2hvcnQgICAgIEJ5dGVDbnQ7CisJdXNob3J0ICAgICBUcENoa3N1bTsKKwl1c2hvcnQgICAgIEN0eEhhc2g7CisJdXNob3J0ICAgICBNYWNIYXNoOworCXUzMiAgICBCdWZMbms7CisgICAgfSBoZHJzX2diaXQ7CisgIH0gdTA7Cit9OworCisjZGVmaW5lIGZyYW1lX3N0YXR1czE0ICAgICAgICB1MC5oZHJzXzE0cG9ydC5mcmFtZV9zdGF0dXMKKyNkZWZpbmUgZnJhbWVfc3RhdHVzX2IxNCAgICAgIHUwLmhkcnNfMTRwb3J0LmZyYW1lX3N0YXR1c19iCisjZGVmaW5lIGZyYW1lX3N0YXR1c0dCICAgICAgICB1MC5oZHJzX2diaXQuZnJhbWVfc3RhdHVzCisKK3N0cnVjdCBzbGljX2hvc3Q2NHNnIHsKKwl1MzIgICAgICAgIHBhZGRybDsKKwl1MzIgICAgICAgIHBhZGRyaDsKKwl1MzIgICAgICAgIGxlbmd0aDsKK307CisKK3N0cnVjdCBzbGljX2hvc3Q2NF9jbWQgeworICAgIHUzMiAgICAgICBob3N0aGFuZGxlOworICAgIHUzMiAgICAgICBSU1ZEOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICBjb21tYW5kOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICBmbGFnczsKKyAgICB1bmlvbiB7CisJdXNob3J0ICAgICAgICAgIHJzdjE7CisJdXNob3J0ICAgICAgICAgIHJzdjI7CisgICAgfSB1MDsKKyAgICB1bmlvbiB7CisJc3RydWN0IHsKKwkJdTMyICAgICAgICAgICAgdG90bGVuOworCQlzdHJ1Y3Qgc2xpY19ob3N0NjRzZyAgICBidWZzW1NMSUNfTUFYNjRfQkNOVF07CisJfSBzbGljX2J1ZmZlcnM7CisgICAgfSB1OworfTsKKworc3RydWN0IHNsaWNfcnNwYnVmIHsKKyAgICB1MzIgICBob3N0aGFuZGxlOworICAgIHUzMiAgIHBhZDA7CisgICAgdTMyICAgcGFkMTsKKyAgICB1MzIgICBzdGF0dXM7CisgICAgdTMyICAgcGFkMls0XTsKKworfTsKKworc3RydWN0IHNsaWNfcmVncyB7CisJdTMyCXNsaWNfcmVzZXQ7CQkvKiBSZXNldCBSZWdpc3RlciAqLworCXUzMglwYWQwOworCisJdTMyCXNsaWNfaWNyOwkJLyogSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1MzIJcGFkMjsKKyNkZWZpbmUgU0xJQ19JQ1IJCTB4MDAwOAorCisJdTMyCXNsaWNfaXNwOwkJLyogSW50ZXJydXB0IHN0YXR1cyBwb2ludGVyICovCisJdTMyCXBhZDE7CisjZGVmaW5lIFNMSUNfSVNQCQkweDAwMTAKKworICAgIHUzMglzbGljX2lzcjsJCS8qIEludGVycnVwdCBzdGF0dXMgKi8KKwl1MzIJcGFkMzsKKyNkZWZpbmUgU0xJQ19JU1IJCTB4MDAxOAorCisgICAgdTMyCXNsaWNfaGJhcjsJCS8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyByZWcgKi8KKwl1MzIJCXBhZDQ7CisJLyogMzEtOCAtIHBoeSBhZGRyIG9mIHNldCBvZiBjb250aWd1b3VzIGhkciBidWZmZXJzCisJICAgIDctMCAtIG51bWJlciBvZiBidWZmZXJzIHBhc3NlZAorCSAgIEJ1ZmZlcnMgYXJlIDI1NiBieXRlcyBsb25nIG9uIDI1Ni1ieXRlIGJvdW5kYXJpZXMuICovCisjZGVmaW5lIFNMSUNfSEJBUgkJMHgwMDIwCisjZGVmaW5lIFNMSUNfSEJBUl9DTlRfTVNLCTB4MDAwMDAwRkYKKworICAgIHUzMglzbGljX2RiYXI7CS8qIERhdGEgYnVmZmVyIGhhbmRsZSAmIGFkZHJlc3MgcmVnICovCisJdTMyCQlwYWQ1OworCisJLyogNCBzZXRzIG9mIHJlZ2lzdGVyczsgQnVmZmVycyBhcmUgMksgYnl0ZXMgbG9uZyAyIHBlciA0SyBwYWdlLiAqLworI2RlZmluZSBTTElDX0RCQVIJCTB4MDAyOAorI2RlZmluZSBTTElDX0RCQVJfU0laRQkJMjA0OAorCisgICAgdTMyCXNsaWNfY2JhcjsJCSAJLyogWG10IENtZCBidWYgYWRkciByZWdzLiovCisJLyogMSBwZXIgWE1UIGludGVyZmFjZQorCSAgIDMxLTUgLSBwaHkgYWRkciBvZiBob3N0IGNvbW1hbmQgYnVmZmVyCisJICAgIDQtMCAtIGxlbmd0aCBvZiBjbWQgaW4gbXVsdGlwbGVzIG9mIDMyIGJ5dGVzCisJICAgQnVmZmVycyBhcmUgMzIgYnl0ZXMgdXAgdG8gNTEyIGJ5dGVzIGxvbmcgKi8KKyNkZWZpbmUgU0xJQ19DQkFSCQkweDAwMzAKKyNkZWZpbmUgU0xJQ19DQkFSX0xFTl9NU0sJMHgwMDAwMDAxRgorI2RlZmluZSBTTElDX0NCQVJfQUxJR04JCTB4MDAwMDAwMjAKKworCXUzMglzbGljX3djczsJCS8qIHdyaXRlIGNvbnRyb2wgc3RvcmUqLworI2RlZmluZQlTTElDX1dDUwkJMHgwMDM0CisjZGVmaW5lIFNMSUNfV0NTX1NUQVJUCQkweDgwMDAwMDAwCS8qU3RhcnQgdGhlIFNMSUMgKEp1bXAgdG8gV0NTKSovCisjZGVmaW5lIFNMSUNfV0NTX0NPTVBBUkUJMHg0MDAwMDAwMAkvKiBDb21wYXJlIHdpdGggdmFsdWUgaW4gV0NTKi8KKworICAgIHUzMglzbGljX3JiYXI7CQkvKiBSZXNwb25zZSBidWZmZXIgYWRkcmVzcyByZWcuKi8KKwl1MzIJCXBhZDc7CisJIC8qMzEtOCAtIHBoeSBhZGRyIG9mIHNldCBvZiBjb250aWd1b3VzIHJlc3BvbnNlIGJ1ZmZlcnMKKwkgIDctMCAtIG51bWJlciBvZiBidWZmZXJzIHBhc3NlZAorCSBCdWZmZXJzIGFyZSAzMiBieXRlcyBsb25nIG9uIDMyLWJ5dGUgYm91bmRhcmllcy4qLworI2RlZmluZSBTTElDX1JCQVIJCTB4MDAzOAorI2RlZmluZSBTTElDX1JCQVJfQ05UX01TSwkweDAwMDAwMEZGCisjZGVmaW5lIFNMSUNfUkJBUl9TSVpFCQkzMgorCisJdTMyCXNsaWNfc3RhdHM7CQkvKiByZWFkIHN0YXRpc3RpY3MgKFVQUikgKi8KKwl1MzIJCXBhZDg7CisjZGVmaW5lCVNMSUNfUlNUQVQJCTB4MDA0MAorCisJdTMyCXNsaWNfcmxzcjsJCQkvKiByZWFkIGxpbmsgc3RhdHVzICovCisJdTMyCQlwYWQ5OworI2RlZmluZSBTTElDX0xTVEFUCQkweDAwNDgKKworCXUzMglzbGljX3dtY2ZnOwkJCS8qIFdyaXRlIE1hYyBDb25maWcgKi8KKwl1MzIJCXBhZDEwOworI2RlZmluZQlTTElDX1dNQ0ZHCQkweDAwNTAKKworCXUzMglzbGljX3dwaHk7CQkJLyogV3JpdGUgcGh5IHJlZ2lzdGVyICovCisJdTMyCQlwYWQxMTsKKyNkZWZpbmUgU0xJQ19XUEhZCQkweDAwNTgKKworCXUzMglzbGljX3JjYmFyOwkJCS8qUmN2IENtZCBidWYgYWRkciByZWcqLworCXUzMgkJcGFkMTI7CisjZGVmaW5lCVNMSUNfUkNCQVIJCTB4MDA2MAorCisJdTMyCXNsaWNfcmNvbmZpZzsJCS8qIFJlYWQgU0xJQyBDb25maWcqLworCXUzMgkJcGFkMTM7CisjZGVmaW5lIFNMSUNfUkNPTkZJRwkweDAwNjgKKworCXUzMglzbGljX2ludGFnZzsJCS8qIEludGVycnVwdCBhZ2dyZWdhdGlvbiB0aW1lKi8KKwl1MzIJCXBhZDE0OworI2RlZmluZSBTTElDX0lOVEFHRwkJMHgwMDcwCisKKwl1MzIJc2xpY193eGNmZzsJCS8qIFdyaXRlIFhNSVQgY29uZmlnIHJlZyovCisJdTMyCQlwYWQxNjsKKyNkZWZpbmUJU0xJQ19XWENGRwkJMHgwMDc4CisKKwl1MzIJc2xpY193cmNmZzsJCS8qIFdyaXRlIFJDViBjb25maWcgcmVnKi8KKwl1MzIJCXBhZDE3OworI2RlZmluZQlTTElDX1dSQ0ZHCQkweDAwODAKKworCXUzMglzbGljX3dyYWRkcmFsOwkJLyogV3JpdGUgcmN2IGFkZHIgYSBsb3cqLworCXUzMgkJcGFkMTg7CisjZGVmaW5lCVNMSUNfV1JBRERSQUwJMHgwMDg4CisKKwl1MzIJc2xpY193cmFkZHJhaDsJCS8qIFdyaXRlIHJjdiBhZGRyIGEgaGlnaCovCisJdTMyCQlwYWQxOTsKKyNkZWZpbmUJU0xJQ19XUkFERFJBSAkweDAwOTAKKworCXUzMglzbGljX3dyYWRkcmJsOwkJLyogV3JpdGUgcmN2IGFkZHIgYiBsb3cqLworCXUzMgkJcGFkMjA7CisjZGVmaW5lCVNMSUNfV1JBRERSQkwJMHgwMDk4CisKKwl1MzIJc2xpY193cmFkZHJiaDsJCS8qIFdyaXRlIHJjdiBhZGRyIGIgaGlnaCovCisJdTMyCQlwYWQyMTsKKyNkZWZpbmUJU0xJQ19XUkFERFJCSAkweDAwYTAKKworCXUzMglzbGljX21jYXN0bG93OwkJLyogTG93IGJpdHMgb2YgbWNhc3QgbWFzayovCisJdTMyCQlwYWQyMjsKKyNkZWZpbmUJU0xJQ19NQ0FTVExPVwkweDAwYTgKKworCXUzMglzbGljX21jYXN0aGlnaDsJCS8qIEhpZ2ggYml0cyBvZiBtY2FzdCBtYXNrKi8KKwl1MzIJCXBhZDIzOworI2RlZmluZQlTTElDX01DQVNUSElHSAkweDAwYjAKKworCXUzMglzbGljX3Bpbmc7CQkJLyogUGluZyB0aGUgY2FyZCovCisJdTMyCQlwYWQyNDsKKyNkZWZpbmUgU0xJQ19QSU5HCQkweDAwYjgKKworCXUzMglzbGljX2R1bXBfY21kOwkJLyogRHVtcCBjb21tYW5kICovCisJdTMyCQlwYWQyNTsKKyNkZWZpbmUgU0xJQ19EVU1QX0NNRAkweDAwYzAKKworCXUzMglzbGljX2R1bXBfZGF0YTsJCS8qIER1bXAgZGF0YSBwb2ludGVyICovCisJdTMyCQlwYWQyNjsKKyNkZWZpbmUgU0xJQ19EVU1QX0RBVEEJMHgwMGM4CisKKwl1MzIJc2xpY19wY2lzdGF0dXM7CS8qIFJlYWQgY2FyZCdzIHBjaV9zdGF0dXMgcmVnaXN0ZXIgKi8KKwl1MzIJCXBhZDI3OworI2RlZmluZQlTTElDX1BDSVNUQVRVUwkweDAwZDAKKworCXUzMglzbGljX3dyaG9zdGlkOwkJLyogV3JpdGUgaG9zdGlkIGZpZWxkICovCisJdTMyCQlwYWQyODsKKyNkZWZpbmUgU0xJQ19XUkhPU1RJRAkJIDB4MDBkOAorI2RlZmluZSBTTElDX1JESE9TVElEXzFHQgkgMHgxNTU0CisjZGVmaW5lIFNMSUNfUkRIT1NUSURfMkdCCSAweDE1NTQKKworCXUzMglzbGljX2xvd19wb3dlcjsJLyogUHV0IGNhcmQgaW4gYSBsb3cgcG93ZXIgc3RhdGUgKi8KKwl1MzIJCXBhZDI5OworI2RlZmluZSBTTElDX0xPV19QT1dFUgkweDAwZTAKKworCXUzMglzbGljX3F1aWVzY2U7CS8qIGZvcmNlIHNsaWMgaW50byBxdWllc2NlbnQgc3RhdGUKKwkJCQkJIGJlZm9yZSBzb2Z0IHJlc2V0ICovCisJdTMyCQlwYWQzMDsKKyNkZWZpbmUgU0xJQ19RVUlFU0NFCTB4MDBlOAorCisJdTMyCXNsaWNfcmVzZXRfaWZhY2U7CS8qIHJlc2V0IGludGVyZmFjZSBxdWV1ZXMgKi8KKwl1MzIJCXBhZDMxOworI2RlZmluZSBTTElDX1JFU0VUX0lGQUNFIDB4MDBmMAorCisgICAgdTMyCXNsaWNfYWRkcl91cHBlcjsJLyogQml0cyA2My0zMiBmb3IgaG9zdCBpL2YgYWRkcnMgKi8KKwl1MzIJCXBhZDMyOworI2RlZmluZSBTTElDX0FERFJfVVBQRVIJMHgwMGY4IC8qUmVnaXN0ZXIgaXMgb25seSB3cml0dGVuIHdoZW4gaXQgaGFzIGNoYW5nZWQqLworCisgICAgdTMyCXNsaWNfaGJhcjY0OwkJLyogNjQgYml0IEhlYWRlciBidWZmZXIgYWRkcmVzcyByZWcgKi8KKwl1MzIJCXBhZDMzOworI2RlZmluZSBTTElDX0hCQVI2NAkJMHgwMTAwCisKKyAgICB1MzIJc2xpY19kYmFyNjQ7CS8qIDY0IGJpdCBEYXRhIGJ1ZmZlciBoYW5kbGUgJiBhZGRyZXNzIHJlZyAqLworCXUzMgkJcGFkMzQ7CisjZGVmaW5lIFNMSUNfREJBUjY0CQkweDAxMDgKKworICAgIHUzMglzbGljX2NiYXI2NDsJIAkvKiA2NCBiaXQgWG10IENtZCBidWYgYWRkciByZWdzLiAqLworCXUzMgkJcGFkMzU7CisjZGVmaW5lIFNMSUNfQ0JBUjY0CQkweDAxMTAKKworICAgIHUzMglzbGljX3JiYXI2NDsJCS8qIDY0IGJpdCBSZXNwb25zZSBidWZmZXIgYWRkcmVzcyByZWcuKi8KKwl1MzIJCXBhZDM2OworI2RlZmluZSBTTElDX1JCQVI2NAkJMHgwMTE4CisKKwl1MzIJc2xpY19yY2JhcjY0OwkJLyogNjQgYml0IFJjdiBDbWQgYnVmIGFkZHIgcmVnKi8KKwl1MzIJCXBhZDM3OworI2RlZmluZQlTTElDX1JDQkFSNjQJMHgwMTIwCisKKwl1MzIJc2xpY19zdGF0czY0OwkJLypyZWFkIHN0YXRpc3RpY3MgKDY0IGJpdCBVUFIpKi8KKwl1MzIJCXBhZDM4OworI2RlZmluZQlTTElDX1JTVEFUNjQJMHgwMTI4CisKKwl1MzIJc2xpY19yY3Zfd2NzOwkvKkRvd25sb2FkIEdpZ2FiaXQgUkNWIHNlcXVlbmNlciB1Y29kZSovCisJdTMyCQlwYWQzOTsKKyNkZWZpbmUgU0xJQ19SQ1ZfV0NTCTB4MDEzMAorI2RlZmluZSBTTElDX1JDVldDU19CRUdJTgkweDQwMDAwMDAwCisjZGVmaW5lIFNMSUNfUkNWV0NTX0ZJTklTSAkweDgwMDAwMDAwCisKKwl1MzIJc2xpY193cnZsYW5pZDsJCS8qIFdyaXRlIFZsYW5JZCBmaWVsZCAqLworCXUzMgkJcGFkNDA7CisjZGVmaW5lIFNMSUNfV1JWTEFOSUQJMHgwMTM4CisKKwl1MzIJc2xpY19yZWFkX3hmX2luZm87ICAvKiBSZWFkIFRyYW5zZm9ybWVyIGluZm8gKi8KKwl1MzIJCXBhZDQxOworI2RlZmluZSBTTElDX1JFQURfWEZfSU5GTyAJMHgwMTQwCisKKwl1MzIJc2xpY193cml0ZV94Zl9pbmZvOyAvKiBXcml0ZSBUcmFuc2Zvcm1lciBpbmZvICovCisJdTMyCQlwYWQ0MjsKKyNkZWZpbmUgU0xJQ19XUklURV9YRl9JTkZPIAkweDAxNDgKKworCXUzMglSU1ZEMTsgICAgICAgICAgICAgIC8qIFRPRSBPbmx5ICovCisJdTMyCQlwYWQ0MzsKKworCXUzMglSU1ZEMjsgCSAgICAgICAgICAgIC8qIFRPRSBPbmx5ICovCisJdTMyCQlwYWQ0NDsKKworCXUzMglSU1ZEMzsgICAgICAgICAgICAgIC8qIFRPRSBPbmx5ICovCisJdTMyCQlwYWQ0NTsKKworCXUzMglSU1ZENDsgICAgICAgICAgICAgIC8qIFRPRSBPbmx5ICovCisJdTMyCQlwYWQ0NjsKKworCXUzMglzbGljX3RpY2tzX3Blcl9zZWM7IC8qIFdyaXRlIGNhcmQgdGlja3MgcGVyIHNlY29uZCAqLworCXUzMgkJcGFkNDc7CisjZGVmaW5lIFNMSUNfVElDS1NfUEVSX1NFQwkweDAxNzAKKworfTsKKworZW51bSBVUFJfUkVRVUVTVCB7CisgICAgU0xJQ19VUFJfU1RBVFMsCisgICAgU0xJQ19VUFJfUkxTUiwKKyAgICBTTElDX1VQUl9XQ0ZHLAorICAgIFNMSUNfVVBSX1JDT05GSUcsCisgICAgU0xJQ19VUFJfUlBIWSwKKyAgICBTTElDX1VQUl9FTkxCLAorICAgIFNMSUNfVVBSX0VOQ1QsCisgICAgU0xJQ19VUFJfUERXTiwKKyAgICBTTElDX1VQUl9QSU5HLAorICAgIFNMSUNfVVBSX0RVTVAsCit9OworCitzdHJ1Y3QgaW5pY3BtX3dha2VwYXR0ZXJuIHsKKyAgICB1MzIgICAgcGF0dGVybmxlbmd0aDsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgcGF0dGVybltTTElDX1BNX1BBVFRFUk5TSVpFXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgbWFza1tTTElDX1BNX1BBVFRFUk5TSVpFXTsKK307CisKK3N0cnVjdCBpbmljcG1fc3RhdGUgeworICAgIHUzMiAgICAgICAgICAgICAgICAgcG93ZXJjYXBzOworICAgIHUzMiAgICAgICAgICAgICAgICAgcG93ZXJzdGF0ZTsKKyAgICB1MzIgICAgICAgICAgICAgICAgIHdha2VfbGlua3N0YXR1czsKKyAgICB1MzIgICAgICAgICAgICAgICAgIHdha2VfbWFnaWNwYWNrZXQ7CisgICAgdTMyICAgICAgICAgICAgICAgICB3YWtlX2ZyYW1lcGF0dGVybjsKKyAgICBzdHJ1Y3QgaW5pY3BtX3dha2VwYXR0ZXJuICAgIHdha2VwYXR0ZXJuW1NMSUNfUE1fTUFYUEFUVEVSTlNdOworfTsKKworc3RydWN0IHNsaWNwbV9wYWNrZXRfcGF0dGVybiB7CisgICAgdTMyICAgICBwcmlvcml0eTsKKyAgICB1MzIgICAgIHJlc2VydmVkOworICAgIHUzMiAgICAgbWFza3NpemU7CisgICAgdTMyICAgICBwYXR0ZXJub2Zmc2V0OworICAgIHUzMiAgICAgcGF0dGVybnNpemU7CisgICAgdTMyICAgICBwYXR0ZXJuZmxhZ3M7Cit9OworCitlbnVtIHNsaWNwbV9wb3dlcl9zdGF0ZSB7CisgICAgc2xpY3BtX3N0YXRlX3Vuc3BlY2lmaWVkID0gMCwKKyAgICBzbGljcG1fc3RhdGVfZDAsCisgICAgc2xpY3BtX3N0YXRlX2QxLAorICAgIHNsaWNwbV9zdGF0ZV9kMiwKKyAgICBzbGljcG1fc3RhdGVfZDMsCisgICAgc2xpY3BtX3N0YXRlX21heGltdW0KK307CisKK3N0cnVjdCBzbGljcG1fd2FrZXVwX2NhcGFiaWxpdGllcyB7CisgICAgZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgIG1pbl9tYWdpY19wYWNrZXRfd2FrZXVwOworICAgIGVudW0gc2xpY3BtX3Bvd2VyX3N0YXRlICBtaW5fcGF0dGVybl93YWtldXA7CisgICAgZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgIG1pbl9saW5rX2NoYW5nZV93YWtldXA7Cit9OworCitzdHJ1Y3Qgc2xpY19wbnBfY2FwYWJpbGl0aWVzIHsKKwl1MzIgZmxhZ3M7CisJc3RydWN0IHNsaWNwbV93YWtldXBfY2FwYWJpbGl0aWVzIHdha2V1cF9jYXBhYmlsaXRpZXM7Cit9OworCitzdHJ1Y3QgeG10X3N0YXRzIHsKKwl1MzIgeG1pdF90Y3BfYnl0ZXM7CisJdTMyIHhtaXRfdGNwX3NlZ3M7CisJdTMyIHhtaXRfYnl0ZXM7CisJdTMyIHhtaXRfY29sbGlzaW9uczsKKwl1MzIgeG1pdF91bmljYXN0czsKKwl1MzIgeG1pdF9vdGhlcl9lcnJvcjsKKwl1MzIgeG1pdF9leGNlc3NfY29sbGlzaW9uczsKK307CisKK3N0cnVjdCByY3Zfc3RhdHMgeworCXUzMiByY3ZfdGNwX2J5dGVzOworCXUzMiByY3ZfdGNwX3NlZ3M7CisJdTMyIHJjdl9ieXRlczsKKwl1MzIgcmN2X3VuaWNhc3RzOworCXUzMiByY3Zfb3RoZXJfZXJyb3I7CisJdTMyIHJjdl9kcm9wczsKK307CisKK3N0cnVjdCB4bXRfc3RhdHNnYiB7CisJdTY0IHhtaXRfdGNwX2J5dGVzOworCXU2NCB4bWl0X3RjcF9zZWdzOworCXU2NCB4bWl0X2J5dGVzOworCXU2NCB4bWl0X2NvbGxpc2lvbnM7CisJdTY0IHhtaXRfdW5pY2FzdHM7CisJdTY0IHhtaXRfb3RoZXJfZXJyb3I7CisJdTY0IHhtaXRfZXhjZXNzX2NvbGxpc2lvbnM7Cit9OworCitzdHJ1Y3QgcmN2X3N0YXRzZ2IgeworCXU2NCByY3ZfdGNwX2J5dGVzOworCXU2NCByY3ZfdGNwX3NlZ3M7CisJdTY0IHJjdl9ieXRlczsKKwl1NjQgcmN2X3VuaWNhc3RzOworCXU2NCByY3Zfb3RoZXJfZXJyb3I7CisJdTY0IHJjdl9kcm9wczsKK307CisKK3N0cnVjdCBzbGljX3N0YXRzIHsKKyAgICB1bmlvbiB7CisJc3RydWN0IHsKKwkJc3RydWN0IHhtdF9zdGF0cyAgeG10MTAwOworCQlzdHJ1Y3QgcmN2X3N0YXRzICByY3YxMDA7CisJfSBzdGF0c18xMDA7CisJc3RydWN0IHsKKwkJc3RydWN0IHhtdF9zdGF0c2diICAgICB4bXRHQjsKKwkJc3RydWN0IHJjdl9zdGF0c2diICAgICByY3ZHQjsKKwl9IHN0YXRzX0dCOworICAgIH0gdTsKK307CisKKyNkZWZpbmUgeG1pdF90Y3Bfc2VnczEwMCAgICAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfdGNwX3NlZ3MKKyNkZWZpbmUgeG1pdF90Y3BfYnl0ZXMxMDAgICAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfdGNwX2J5dGVzCisjZGVmaW5lIHhtaXRfYnl0ZXMxMDAgICAgICAgICAgICAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X2J5dGVzCisjZGVmaW5lIHhtaXRfY29sbGlzaW9uczEwMCAgICAgICAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X2NvbGxpc2lvbnMKKyNkZWZpbmUgeG1pdF91bmljYXN0czEwMCAgICAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfdW5pY2FzdHMKKyNkZWZpbmUgeG1pdF9vdGhlcl9lcnJvcjEwMCAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfb3RoZXJfZXJyb3IKKyNkZWZpbmUgeG1pdF9leGNlc3NfY29sbGlzaW9uczEwMCAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfZXhjZXNzX2NvbGxpc2lvbnMKKyNkZWZpbmUgcmN2X3RjcF9zZWdzMTAwICAgICAgICAgICAgdS5zdGF0c18xMDAucmN2MTAwLnJjdl90Y3Bfc2VncworI2RlZmluZSByY3ZfdGNwX2J5dGVzMTAwICAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X3RjcF9ieXRlcworI2RlZmluZSByY3ZfYnl0ZXMxMDAgICAgICAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X2J5dGVzCisjZGVmaW5lIHJjdl91bmljYXN0czEwMCAgICAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfdW5pY2FzdHMKKyNkZWZpbmUgcmN2X290aGVyX2Vycm9yMTAwICAgICAgICAgdS5zdGF0c18xMDAucmN2MTAwLnJjdl9vdGhlcl9lcnJvcgorI2RlZmluZSByY3ZfZHJvcHMxMDAgICAgICAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X2Ryb3BzCisjZGVmaW5lIHhtaXRfdGNwX3NlZ3NfZ2IgICAgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF90Y3Bfc2VncworI2RlZmluZSB4bWl0X3RjcF9ieXRlc19nYiAgICAgICAgICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfdGNwX2J5dGVzCisjZGVmaW5lIHhtaXRfYnl0ZXNfZ2IgICAgICAgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF9ieXRlcworI2RlZmluZSB4bWl0X2NvbGxpc2lvbnNfZ2IgICAgICAgICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfY29sbGlzaW9ucworI2RlZmluZSB4bWl0X3VuaWNhc3RzX2diICAgICAgICAgICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfdW5pY2FzdHMKKyNkZWZpbmUgeG1pdF9vdGhlcl9lcnJvcl9nYiAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X290aGVyX2Vycm9yCisjZGVmaW5lIHhtaXRfZXhjZXNzX2NvbGxpc2lvbnNfZ2IgIHUuc3RhdHNfR0IueG10R0IueG1pdF9leGNlc3NfY29sbGlzaW9ucworCisjZGVmaW5lIHJjdl90Y3Bfc2Vnc19nYiAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X3RjcF9zZWdzCisjZGVmaW5lIHJjdl90Y3BfYnl0ZXNfZ2IgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X3RjcF9ieXRlcworI2RlZmluZSByY3ZfYnl0ZXNfZ2IgICAgICAgICAgICAgICB1LnN0YXRzX0dCLnJjdkdCLnJjdl9ieXRlcworI2RlZmluZSByY3ZfdW5pY2FzdHNfZ2IgICAgICAgICAgICB1LnN0YXRzX0dCLnJjdkdCLnJjdl91bmljYXN0cworI2RlZmluZSByY3Zfb3RoZXJfZXJyb3JfZ2IgICAgICAgICB1LnN0YXRzX0dCLnJjdkdCLnJjdl9vdGhlcl9lcnJvcgorI2RlZmluZSByY3ZfZHJvcHNfZ2IgICAgICAgICAgICAgICB1LnN0YXRzX0dCLnJjdkdCLnJjdl9kcm9wcworCitzdHJ1Y3Qgc2xpY19jb25maWdfbWFjIHsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBtYWNhZGRyQVs2XTsKK307CisKKyNkZWZpbmUgQVRLX0ZSVV9GT1JNQVQgICAgICAgIDB4MDAKKyNkZWZpbmUgVkVORE9SMV9GUlVfRk9STUFUICAgIDB4MDEKKyNkZWZpbmUgVkVORE9SMl9GUlVfRk9STUFUICAgIDB4MDIKKyNkZWZpbmUgVkVORE9SM19GUlVfRk9STUFUICAgIDB4MDMKKyNkZWZpbmUgVkVORE9SNF9GUlVfRk9STUFUICAgIDB4MDQKKyNkZWZpbmUgTk9fRlJVX0ZPUk1BVCAgICAgICAgIDB4RkYKKworc3RydWN0IGF0a19mcnUgeworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGFzc2VtYmx5WzZdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHJldmlzaW9uWzJdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHNlcmlhbFsxNF07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFkWzNdOworfTsKKworc3RydWN0IHZlbmRvcjFfZnJ1IHsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBjb21tb2RpdHk7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgYXNzZW1ibHlbNF07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgcmV2aXNpb25bMl07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgc3VwcGxpZXJbMl07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgZGF0ZVsyXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBzZXF1ZW5jZVszXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYWRbMTNdOworfTsKKworc3RydWN0IHZlbmRvcjJfZnJ1IHsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYXJ0WzhdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHN1cHBsaWVyWzVdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGRhdGVbM107CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgc2VxdWVuY2VbNF07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFkWzddOworfTsKKworc3RydWN0IHZlbmRvcjNfZnJ1IHsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBhc3NlbWJseVs2XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICByZXZpc2lvblsyXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBzZXJpYWxbMTRdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhZFszXTsKK307CisKK3N0cnVjdCB2ZW5kb3I0X2ZydSB7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgbnVtYmVyWzhdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhcnRbOF07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgdmVyc2lvbls4XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYWRbM107Cit9OworCit1bmlvbiBvZW1mcnUgeworICAgIHN0cnVjdCB2ZW5kb3IxX2ZydSAgIHZlbmRvcjFfZnJ1OworICAgIHN0cnVjdCB2ZW5kb3IyX2ZydSAgIHZlbmRvcjJfZnJ1OworICAgIHN0cnVjdCB2ZW5kb3IzX2ZydSAgIHZlbmRvcjNfZnJ1OworICAgIHN0cnVjdCB2ZW5kb3I0X2ZydSAgIHZlbmRvcjRfZnJ1OworfTsKKworLyoKKyAgIFNMSUMgRUVQUk9NIHN0cnVjdHVyZSBmb3IgTW9qYXZlCisqLworc3RydWN0IHNsaWNfZWVwcm9tIHsKKwl1c2hvcnQJCUlkOwkJLyogMDAgRUVQUk9NL0ZMQVNIIE1hZ2ljIGNvZGUgJ0E1QTUnKi8KKwl1c2hvcnQJCUVlY29kZVNpemU7CS8qIDAxIFNpemUgb2YgRUVQUk9NIENvZGVzIChieXRlcyAqIDQpKi8KKwl1c2hvcnQJCUZsYXNoU2l6ZTsJLyogMDIgRmxhc2ggc2l6ZSAqLworCXVzaG9ydAkJRWVwcm9tU2l6ZTsJLyogMDMgRUVQUk9NIFNpemUgKi8KKwl1c2hvcnQJCVZlbmRvcklkOwkvKiAwNCBWZW5kb3IgSUQgKi8KKwl1c2hvcnQJCURldmljZUlkOwkvKiAwNSBEZXZpY2UgSUQgKi8KKwl1bnNpZ25lZCBjaGFyCQlSZXZpc2lvbklkOwkvKiAwNiBSZXZpc2lvbiBJRCAqLworCXVuc2lnbmVkIGNoYXIJCUNsYXNzQ29kZVszXTsJLyogMDcgQ2xhc3MgQ29kZSAqLworCXVuc2lnbmVkIGNoYXIJCURiZ0ludFBpbjsJLyogMDggRGVidWcgSW50ZXJydXB0IHBpbiAqLworCXVuc2lnbmVkIGNoYXIJCU5ldEludFBpbjA7CS8qICAgIE5ldHdvcmsgSW50ZXJydXB0IFBpbiAqLworCXVuc2lnbmVkIGNoYXIJCU1pbkdyYW50OwkvKiAwOSBNaW5pbXVtIGdyYW50ICovCisJdW5zaWduZWQgY2hhcgkJTWF4TGF0OwkJLyogICAgTWF4aW11bSBMYXRlbmN5ICovCisJdXNob3J0CQlQY2lTdGF0dXM7CS8qIDEwIFBDSSBTdGF0dXMgKi8KKwl1c2hvcnQJCVN1YlN5c1ZJZDsJLyogMTEgU3Vic3lzdGVtIFZlbmRvciBJZCAqLworCXVzaG9ydAkJU3ViU3lzSWQ7CS8qIDEyIFN1YnN5c3RlbSBJRCAqLworCXVzaG9ydAkJRGJnRGV2SWQ7CS8qIDEzIERlYnVnIERldmljZSBJZCAqLworCXVzaG9ydAkJRHJhbVJvbUZuOwkvKiAxNCBEcmFtL1JvbSBmdW5jdGlvbiAqLworCXVzaG9ydAkJRFNpemUyUGNpOwkvKiAxNSBEUkFNIHNpemUgdG8gUENJIChieXRlcyAqIDY0SykgKi8KKwl1c2hvcnQJUlNpemUyUGNpOwkvKiAxNiBST00gZXh0ZW5zaW9uIHNpemUgdG8gUENJIChieXRlcyAqIDRrKSAqLworCXVuc2lnbmVkIGNoYXIgTmV0SW50UGluMTsvKiAxNyBOZXR3b3JrIEludGVyZmFjZSBQaW4gMQorCQkJCSAgICAoc2ltYmEvbGVvbmUgb25seSkgKi8KKwl1bnNpZ25lZCBjaGFyIE5ldEludFBpbjI7IC8qTmV0d29yayBJbnRlcmZhY2UgUGluIDIgKHNpbWJhL2xlb25lIG9ubHkpKi8KKwl1bmlvbiB7CisJCXVuc2lnbmVkIGNoYXIgTmV0SW50UGluMzsvKjE4IE5ldHdvcmsgSW50ZXJmYWNlIFBpbiAzCisJCQkJCSAgIChzaW1iYSBvbmx5KSovCisJCXVuc2lnbmVkIGNoYXIgRnJlZVRpbWU7LypGcmVlVGltZSBzZXR0aW5nIChsZW9uZS9tb2phdmUgb25seSkgKi8KKwl9IHUxOworCXVuc2lnbmVkIGNoYXIJVEJJY3RsOwkvKiAgICAxMC1iaXQgaW50ZXJmYWNlIGNvbnRyb2wgKE1vamF2ZSBvbmx5KSAqLworCXVzaG9ydAkJRHJhbVNpemU7CS8qIDE5IERSQU0gc2l6ZSAoYnl0ZXMgKiA2NGspICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJLyogTWFjIEludGVyZmFjZSBTcGVjaWZpYyBwb3J0aW9ucyAqLworCQkJc3RydWN0IHNsaWNfY29uZmlnX21hYwlNYWNJbmZvW1NMSUNfTkJSX01BQ1NdOworCQl9IG1hYzsJCQkJLyogTUFDIGFjY2VzcyBmb3IgYWxsIGJvYXJkcyAqLworCQlzdHJ1Y3QgeworCQkJLyogdXNlIGFib3ZlIHN0cnVjdCBmb3IgTUFDIGFjY2VzcyAqLworCQkJc3RydWN0IHNsaWNfY29uZmlnX21hYwlwYWRbU0xJQ19OQlJfTUFDUyAtIDFdOworCQkJdXNob3J0CQlEZXZpY2VJZDI7CS8qIERldmljZSBJRCBmb3IgMm5kCisJCQkJCQkJCVBDSSBmdW5jdGlvbiAqLworCQkJdW5zaWduZWQgY2hhcglJbnRQaW4yOwkvKiBJbnRlcnJ1cHQgcGluIGZvcgorCQkJCQkJCSAgIDJuZCBQQ0kgZnVuY3Rpb24gKi8KKwkJCXVuc2lnbmVkIGNoYXIJQ2xhc3NDb2RlMlszXTsJLyogQ2xhc3MgQ29kZSBmb3IgMm5kCisJCQkJCQkJCVBDSSBmdW5jdGlvbiAqLworCQl9IG1vamF2ZTsJLyogMm5kIGZ1bmN0aW9uIGFjY2VzcyBmb3IgZ2lnYWJpdCBib2FyZCAqLworCX0gdTI7CisJdXNob3J0CQlDZmdCeXRlNjsJLyogQ29uZmlnIEJ5dGUgNiAqLworCXVzaG9ydAkJUE1FQ2FwYWI7CS8qIFBvd2VyIE1nbWVudCBjYXBhYmlsaXRpZXMgKi8KKwl1c2hvcnQJCU53Q2xrQ3RybHM7CS8qIE5ldHdvcmtDbG9ja0NvbnRyb2xzICovCisJdW5zaWduZWQgY2hhcglGcnVGb3JtYXQ7CS8qIEFsYWNyaXRlY2ggRlJVIGZvcm1hdCB0eXBlICovCisJc3RydWN0IGF0a19mcnUgICBBdGtGcnU7CS8qIEFsYWNyaXRlY2ggRlJVIGluZm9ybWF0aW9uICovCisJdW5zaWduZWQgY2hhcglPZW1GcnVGb3JtYXQ7CS8qIG9wdGlvbmFsIE9FTSBGUlUgZm9ybWF0IHR5cGUgKi8KKwl1bmlvbiBvZW1mcnUgICAgT2VtRnJ1OyAgICAgICAgIC8qIG9wdGlvbmFsIE9FTSBGUlUgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyCVBhZFs0XTsJLyogUGFkIHRvIDEyOCBieXRlcyAtIGluY2x1ZGVzIDIgY2tzdW0gYnl0ZXMKKwkJCQkgKihpZiBPRU0gRlJVIGluZm8gZXhpc3RzKSBhbmQgdHdvIHVudXNhYmxlCisJCQkJICogYnl0ZXMgYXQgdGhlIGVuZCAqLworfTsKKworLyogU0xJQyBFRVBST00gc3RydWN0dXJlIGZvciBPYXNpcyAqLworc3RydWN0IG9zbGljX2VlcHJvbSB7CisJdXNob3J0CQlJZDsJCS8qIDAwIEVFUFJPTS9GTEFTSCBNYWdpYyBjb2RlICdBNUE1JyAqLworCXVzaG9ydAkJRWVjb2RlU2l6ZTsJLyogMDEgU2l6ZSBvZiBFRVBST00gQ29kZXMgKGJ5dGVzICogNCkqLworCXVzaG9ydAkJRmxhc2hDb25maWcwOwkvKiAwMiBGbGFzaCBDb25maWcgZm9yIFNQSSBkZXZpY2UgMCAqLworCXVzaG9ydAkJRmxhc2hDb25maWcxOwkvKiAwMyBGbGFzaCBDb25maWcgZm9yIFNQSSBkZXZpY2UgMSAqLworCXVzaG9ydAkJVmVuZG9ySWQ7CS8qIDA0IFZlbmRvciBJRCAqLworCXVzaG9ydAkJRGV2aWNlSWQ7CS8qIDA1IERldmljZSBJRCAoZnVuY3Rpb24gMCkgKi8KKwl1bnNpZ25lZCBjaGFyCVJldmlzaW9uSWQ7CS8qIDA2IFJldmlzaW9uIElEICovCisJdW5zaWduZWQgY2hhcglDbGFzc0NvZGVbM107CS8qIDA3IENsYXNzIENvZGUgZm9yIFBDSSBmdW5jdGlvbiAwICovCisJdW5zaWduZWQgY2hhcglJbnRQaW4xOwkvKiAwOCBJbnRlcnJ1cHQgcGluIGZvciBQQ0kgZnVuY3Rpb24gMSovCisJdW5zaWduZWQgY2hhcglDbGFzc0NvZGUyWzNdOwkvKiAwOSBDbGFzcyBDb2RlIGZvciBQQ0kgZnVuY3Rpb24gMSAqLworCXVuc2lnbmVkIGNoYXIJSW50UGluMjsJLyogMTAgSW50ZXJydXB0IHBpbiBmb3IgUENJIGZ1bmN0aW9uIDIqLworCXVuc2lnbmVkIGNoYXIJSW50UGluMDsJLyogICAgSW50ZXJydXB0IHBpbiBmb3IgUENJIGZ1bmN0aW9uIDAqLworCXVuc2lnbmVkIGNoYXIJCU1pbkdyYW50OwkvKiAxMSBNaW5pbXVtIGdyYW50ICovCisJdW5zaWduZWQgY2hhcgkJTWF4TGF0OwkJLyogICAgTWF4aW11bSBMYXRlbmN5ICovCisJdXNob3J0CQlTdWJTeXNWSWQ7CS8qIDEyIFN1YnN5c3RlbSBWZW5kb3IgSWQgKi8KKwl1c2hvcnQJCVN1YlN5c0lkOwkvKiAxMyBTdWJzeXN0ZW0gSUQgKi8KKwl1c2hvcnQJCUZsYXNoU2l6ZTsJLyogMTQgRmxhc2ggc2l6ZSAoYnl0ZXMgLyA0SykgKi8KKwl1c2hvcnQJCURTaXplMlBjaTsJLyogMTUgRFJBTSBzaXplIHRvIFBDSSAoYnl0ZXMgLyA2NEspICovCisJdXNob3J0CQlSU2l6ZTJQY2k7CS8qIDE2IEZsYXNoIChST00gZXh0ZW5zaW9uKSBzaXplIHRvCisJCQkJCQlQQ0kgKGJ5dGVzIC8gNEspICovCisJdXNob3J0CQlEZXZpY2VJZDE7CS8qIDE3IERldmljZSBJZCAoZnVuY3Rpb24gMSkgKi8KKwl1c2hvcnQJCURldmljZUlkMjsJLyogMTggRGV2aWNlIElkIChmdW5jdGlvbiAyKSAqLworCXVzaG9ydAkJQ2ZnQnl0ZTY7CS8qIDE5IERldmljZSBTdGF0dXMgQ29uZmlnIEJ5dGVzIDYtNyAqLworCXVzaG9ydAkJUE1FQ2FwYWI7CS8qIDIwIFBvd2VyIE1nbWVudCBjYXBhYmlsaXRpZXMgKi8KKwl1bnNpZ25lZCBjaGFyCQlNU0lDYXBhYjsJLyogMjEgTVNJIGNhcGFiaWxpdGllcyAqLworCXVuc2lnbmVkIGNoYXIJCUNsb2NrRGl2aWRlcjsJLyogICAgQ2xvY2sgZGl2aWRlciAqLworCXVzaG9ydAkJUGNpU3RhdHVzTG93OwkvKiAyMiBQQ0kgU3RhdHVzIGJpdHMgMTU6MCAqLworCXVzaG9ydAkJUGNpU3RhdHVzSGlnaDsJLyogMjMgUENJIFN0YXR1cyBiaXRzIDMxOjE2ICovCisJdXNob3J0CQlEcmFtQ29uZmlnTG93OwkvKiAyNCBEUkFNIENvbmZpZ3VyYXRpb24gYml0cyAxNTowICovCisJdXNob3J0CQlEcmFtQ29uZmlnSGlnaDsJLyogMjUgRFJBTSBDb25maWd1cmF0aW9uIGJpdHMgMzE6MTYgKi8KKwl1c2hvcnQJCURyYW1TaXplOwkvKiAyNiBEUkFNIHNpemUgKGJ5dGVzIC8gNjRLKSAqLworCXVzaG9ydAkJR3Bpb1RiaUN0bDsvKiAyNyBHUElPL1RCSSBjb250cm9scyBmb3IgZnVuY3Rpb25zIDEvMCAqLworCXVzaG9ydAkJRWVwcm9tU2l6ZTsJCS8qIDI4IEVFUFJPTSBTaXplICovCisJc3RydWN0IHNsaWNfY29uZmlnX21hYyBNYWNJbmZvWzJdOwkvKiAyOSBNQUMgYWRkcmVzc2VzICgyIHBvcnRzKSAqLworCXVuc2lnbmVkIGNoYXIJRnJ1Rm9ybWF0OwkvKiAzNSBBbGFjcml0ZWNoIEZSVSBmb3JtYXQgdHlwZSAqLworCXN0cnVjdCBhdGtfZnJ1CUF0a0ZydTsJLyogQWxhY3JpdGVjaCBGUlUgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyCU9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLworCXVuaW9uIG9lbWZydSAgICBPZW1GcnU7ICAgICAgICAgLyogb3B0aW9uYWwgT0VNIEZSVSBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGNoYXIJUGFkWzRdOwkvKiBQYWQgdG8gMTI4IGJ5dGVzIC0gaW5jbHVkZXMgMiBjaGVja3N1bSBieXRlcworCQkJCSAqIChpZiBPRU0gRlJVIGluZm8gZXhpc3RzKSBhbmQgdHdvIHVudXNhYmxlCisJCQkJICogYnl0ZXMgYXQgdGhlIGVuZAorCQkJCSAqLworfTsKKworI2RlZmluZQlNQVhfRUVDT0RFX1NJWkUJc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSkKKyNkZWZpbmUgTUlOX0VFQ09ERV9TSVpFCTB4NjIJLyogY29kZSBzaXplIHdpdGhvdXQgb3B0aW9uYWwgT0VNIEZSVSBzdHVmZiAqLworCisvKiBTTElDIENPTkZJRyBzdHJ1Y3R1cmUKKworIFRoaXMgc3RydWN0dXJlIGxpdmVzIGluIHRoZSBDQVJEIHN0cnVjdHVyZSBhbmQgaXMgdmFsaWQgZm9yIGFsbAorIGJvYXJkIHR5cGVzLiAgSXQgaXMgZmlsbGVkIGluIGZyb20gdGhlIGFwcHJvcHJpYXRlIEVFUFJPTSBzdHJ1Y3R1cmUKKyBieSBTbGljR2V0Q29uZmlnRGF0YSgpLgorKi8KK3N0cnVjdCBzbGljX2NvbmZpZyB7CisJYm9vbCBFZXByb21WYWxpZDsJLyogVmFsaWQgRUVQUk9NIGZsYWcgKGNoZWNrc3VtIGdvb2Q/KSAqLworCXVzaG9ydAkJRHJhbVNpemU7CS8qIERSQU0gc2l6ZSAoYnl0ZXMgLyA2NEspICovCisJc3RydWN0IHNsaWNfY29uZmlnX21hYyBNYWNJbmZvW1NMSUNfTkJSX01BQ1NdOyAvKiBNQUMgYWRkcmVzc2VzICovCisJdW5zaWduZWQgY2hhcgkJRnJ1Rm9ybWF0OwkvKiBBbGFjcml0ZWNoIEZSVSBmb3JtYXQgdHlwZSAqLworCXN0cnVjdCBhdGtfZnJ1CUF0a0ZydTsJLyogQWxhY3JpdGVjaCBGUlUgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyCU9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLworCXVuaW9uIHsKKwkJc3RydWN0IHZlbmRvcjFfZnJ1ICAgdmVuZG9yMV9mcnU7CisJCXN0cnVjdCB2ZW5kb3IyX2ZydSAgIHZlbmRvcjJfZnJ1OworCQlzdHJ1Y3QgdmVuZG9yM19mcnUgICB2ZW5kb3IzX2ZydTsKKwkJc3RydWN0IHZlbmRvcjRfZnJ1ICAgdmVuZG9yNF9mcnU7CisJfSBPZW1GcnU7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNpbmMuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNpbmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTI4OGM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2luYy5oCkBAIC0wLDAgKzEsMTg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHNsaWNpbmMuaAorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgb3RoZXIgaW5jbHVkZSBmaWxlcyBhbmQgcHJvdG90eXBlIGRlZmluaXRpb25zCisgKiBmb3IgdGhlIFNMSUNPU1MgZHJpdmVyLgorICovCisjaWZuZGVmIF9TTElDX0lOQ0xVREVfSF8KKyNkZWZpbmUgX1NMSUNfSU5DTFVERV9IXworCisjaW5jbHVkZSAic2xpY19vcy5oIgorI2luY2x1ZGUgInNsaWNkYmcuaCIKKyNpbmNsdWRlICJzbGljaHcuaCIKKyNpbmNsdWRlICJzbGljLmgiCisKK3N0YXRpYyBpbnQgc2xpY19lbnRyeV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAgICAgKnBjaWRldiwKKwkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICAqZW50KTsKK3N0YXRpYyB2b2lkIHNsaWNfZW50cnlfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpOworCitzdGF0aWMgdm9pZCBzbGljX2luaXRfZHJpdmVyKHZvaWQpOworc3RhdGljIGludCAgc2xpY19lbnRyeV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCAgc2xpY19lbnRyeV9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCAgc2xpY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKK3N0YXRpYyBpbnQgIHNsaWNfeG1pdF9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIHNsaWNfeG1pdF9mYWlsKHN0cnVjdCBhZGFwdGVyICAgICphZGFwdGVyLAorCQkJc3RydWN0IHNrX2J1ZmYgICAqc2tiLAorCQkJdm9pZCAqY21kLAorCQkJdTMyICAgICAgICAgICBza2J0eXBlLAorCQkJdTMyICAgICAgICAgICBzdGF0dXMpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfcGNpKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpOworc3RhdGljIHN0cnVjdCBza19idWZmICpzbGljX3JjdnF1ZXVlX2dldG5leHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2xpY19yZWczMl93cml0ZSh2b2lkIF9faW9tZW0gKnJlZywgdTMyIHZhbHVlLCB1aW50IGZsdXNoKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGljX3JlZzY0X3dyaXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB2b2lkIF9faW9tZW0gKnJlZywKKwl1MzIgdmFsdWUsIHZvaWQgX19pb21lbSAqcmVnaCwgdTMyIHBhZGRyaCwgdWludCBmbHVzaCk7CisKKyNpZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNsaWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgc2xpY19tYWNfc2V0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcHRyKTsKK3N0YXRpYyB2b2lkIHNsaWNfcmN2X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY194bWl0X2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpc3IpOworc3RhdGljIGludCAgIHNsaWNfcnNwcXVldWVfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50ICAgc2xpY19yc3BxdWV1ZV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCAgc2xpY19yc3BxdWV1ZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBzdHJ1Y3Qgc2xpY19yc3BidWYgKnNsaWNfcnNwcXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCAgc2xpY19jbWRxbWVtX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgIHNsaWNfY21kcW1lbV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB1MzIgKnNsaWNfY21kcW1lbV9hZGRwYWdlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgICBzbGljX2NtZHFfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCAgc2xpY19jbWRxX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgIHNsaWNfY21kcV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCAgc2xpY19jbWRxX2FkZGNtZHBhZ2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqcGFnZSk7CitzdGF0aWMgdm9pZCAgc2xpY19jbWRxX2dldGRvbmUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgIHNsaWNfY21kcV9wdXRkb25lX2lycShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJCXN0cnVjdCBzbGljX2hvc3RjbWQgKmNtZCk7CitzdGF0aWMgc3RydWN0IHNsaWNfaG9zdGNtZCAqc2xpY19jbWRxX2dldGZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCAgIHNsaWNfcmN2cXVldWVfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50ICAgc2xpY19yY3ZxdWV1ZV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50ICAgc2xpY19yY3ZxdWV1ZV9maWxsKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB1MzIgc2xpY19yY3ZxdWV1ZV9yZWluc2VydChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitzdGF0aWMgdm9pZCAgc2xpY19yY3ZxdWV1ZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfcmN2X2hhbmRsZV9lcnJvcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJc3RydWN0IHNsaWNfcmN2YnVmICpyY3ZidWYpOworc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX3NldF9od2FkZHIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBzbGljX2NhcmRfaW5pdChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfaW50YWdnX3NldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIHZhbHVlKTsKK3N0YXRpYyBpbnQgIHNsaWNfY2FyZF9kb3dubG9hZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdTMyIHNsaWNfY2FyZF9sb2NhdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworCitzdGF0aWMgdm9pZCBzbGljX2lmX3N0b3BfcXVldWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19pZl9zdGFydF9xdWV1ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50ICBzbGljX2lmX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCAgc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfYWRhcHRlcl9mcmVlcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfbGlua19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBsaW5rc3BlZWQsCisJCQl1MzIgbGlua2R1cGxleCk7CitzdGF0aWMgdm9pZCBzbGljX3VubWFwX21taW9fc3BhY2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jYXJkX2NsZWFudXAoc3RydWN0IHNsaWNjYXJkICpjYXJkKTsKK3N0YXRpYyB2b2lkIHNsaWNfaW5pdF9jbGVhbnVwKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfc29mdF9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgYm9vbCBzbGljX21hY19maWx0ZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQlzdHJ1Y3QgZXRoZXJfaGVhZGVyICpldGhlcl9mcmFtZSk7CitzdGF0aWMgdm9pZCBzbGljX21hY19hZGRyZXNzX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX21hY19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19tY2FzdF9zZXRfbWFzayhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IHNsaWNfbWNhc3RfYWRkX2xpc3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmFkZHJlc3MpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2xpY19tY2FzdF9nZXRfbWFjX2hhc2goY2hhciAqbWFjYWRkcik7CitzdGF0aWMgdm9pZCAgc2xpY19tY2FzdF9zZXRfYml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBjaGFyICphZGRyZXNzKTsKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX3NldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgYm9vbCBsaW5rY2hhbmdlKTsKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX2NsZWFyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfY29uZmlnX2dldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGNvbmZpZywKKwkJCXUzMiBjb25maWdoKTsKK3N0YXRpYyB2b2lkIHNsaWNfdGltZXJfbG9hZF9jaGVjayh1bG9uZyBjb250ZXh0KTsKK3N0YXRpYyB2b2lkIHNsaWNfdGltZXJfcGluZyh1bG9uZyBkZXYpOworc3RhdGljIHZvaWQgc2xpY19hc3NlcnRfZmFpbCh2b2lkKTsKK3N0YXRpYyB1c2hvcnQgc2xpY19lZXByb21fY2tzdW0oY2hhciAqbSwgaW50IGxlbik7CisvKiB1cHIgKi8KK3N0YXRpYyB2b2lkIHNsaWNfdXByX3N0YXJ0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfbGlua191cHJfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBJc3IpOworc3RhdGljIGludCAgc2xpY191cHJfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAgICAqYWRhcHRlciwKKwkJCXUzMiAgICAgICAgICAgIHVwcl9yZXF1ZXN0LAorCQkJdTMyICAgICAgICAgICAgdXByX2RhdGEsCisJCQl1MzIgICAgICAgICAgICB1cHJfZGF0YV9oLAorCQkJdTMyICAgICAgICAgICAgdXByX2J1ZmZlciwKKwkJCXUzMiAgICAgICAgICAgIHVwcl9idWZmZXJfaCk7CitzdGF0aWMgaW50ICBzbGljX3Vwcl9xdWV1ZV9yZXF1ZXN0KHN0cnVjdCBhZGFwdGVyICAgICAgKmFkYXB0ZXIsCisJCQkJdTMyICAgICAgICAgICAgdXByX3JlcXVlc3QsCisJCQkJdTMyICAgICAgICAgICAgdXByX2RhdGEsCisJCQkJdTMyICAgICAgICAgICAgdXByX2RhdGFfaCwKKwkJCQl1MzIgICAgICAgICAgICB1cHJfYnVmZmVyLAorCQkJCXUzMiAgICAgICAgICAgIHVwcl9idWZmZXJfaCk7CitzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgc2xpY19tY2FzdF9pbml0X2NyYzMyKHZvaWQpOworCisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKK3N0YXRpYyBpbnQgICBzbGljX2R1bXBfdGhyZWFkKHZvaWQgKmNvbnRleHQpOworc3RhdGljIHVpbnQgIHNsaWNfaW5pdF9kdW1wX3RocmVhZChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2xpY19nZXRfZHVtcF9pbmRleChjaGFyICpwYXRoKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2NhcmQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCBib29sIHJlc3VtZSk7CitzdGF0aWMgdTMyIHNsaWNfZHVtcF9oYWx0KHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdW5zaWduZWQgY2hhciBwcm9jKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX3JlZyhzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYyk7CitzdGF0aWMgdTMyIHNsaWNfZHVtcF9kYXRhKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdTMyIGFkZHIsCisJCQl1c2hvcnQgY291bnQsIHVuc2lnbmVkIGNoYXIgZGVzYyk7CitzdGF0aWMgdTMyIHNsaWNfZHVtcF9xdWV1ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBidWZfcGh5cywKKwkJCXUzMiBidWZfcGh5c2gsIHUzMiBxdWV1ZSk7CitzdGF0aWMgdTMyIHNsaWNfZHVtcF9sb2FkX3F1ZXVlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdTMyIGRhdGEsCisJCQkJdTMyIHF1ZXVlKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2NhbShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBhZGRyLAorCQkJdTMyIGNvdW50LCB1bnNpZ25lZCBjaGFyIGRlc2MpOworCitzdGF0aWMgdTMyIHNsaWNfZHVtcF9yZXN1bWUoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1bnNpZ25lZCBjaGFyIHByb2MpOworc3RhdGljIHUzMiBzbGljX2R1bXBfc2VuZF9jbWQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1MzIgY21kX3BoeXMsCisJCQkJdTMyIGNtZF9waHlzaCwgdTMyIGJ1Zl9waHlzLAorCQkJCXUzMiBidWZfcGh5c2gpOworCisjZGVmaW5lIGNyZWF0ZV9maWxlKHgpICAgICAgICAgU1RBVFVTX1NVQ0NFU1MKKyNkZWZpbmUgd3JpdGVfZmlsZSh3LCB4LCB5LCB6KSBTVEFUVVNfU1VDQ0VTUworI2RlZmluZSBjbG9zZV9maWxlKHgpICAgICAgICAgIFNUQVRVU19TVUNDRVNTCisjZGVmaW5lIHJlYWRfZmlsZSh3LCB4LCB5LCB6KSAgU1RBVFVTX1NVQ0NFU1MKKyNkZWZpbmUgb3Blbl9maWxlKHgpICAgICAgICAgICBTVEFUVVNfU1VDQ0VTUworCisvKiBQQUdFX1NJWkUgKiAxNiAqLworI2RlZmluZSBEVU1QX1BBR0VfU0laRSAgICAgICAgIDB4RkZGRgorI2RlZmluZSBEVU1QX1BBR0VfU0laRV9IQUxGICAgIDB4N0ZGRQorI2VuZGlmCisKKyNlbmRpZiAvKiBfU0xJQ19JTkNMVURFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxYWM0YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYwpAQCAtMCwwICsxLDU5MzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAgMjAwMC0yMDA2IEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc2xpY29zcy5jCisgKgorICogVGhlIFNMSUNPU1MgZHJpdmVyIGZvciBBbGFjcml0ZWNoJ3MgSVMtTklDIHByb2R1Y3RzLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIHN1cHBvcnQ6CisgKgorICogICAgICBNb2phdmUgY2FyZHMgKHNpbmdsZSBwb3J0IFBDSSBHaWdhYml0KSBib3RoIGNvcHBlciBhbmQgZmliZXIKKyAqICAgICAgT2FzaXMgY2FyZHMgKHNpbmdsZSBhbmQgZHVhbCBwb3J0IFBDSS14IEdpZ2FiaXQpIGNvcHBlciBhbmQgZmliZXIKKyAqICAgICAgS2FsYWhhcmkgY2FyZHMgKGR1YWwgYW5kIHF1YWQgcG9ydCBQQ0ktZSBHaWdhYml0KSBjb3BwZXIgYW5kIGZpYmVyCisgKgorICogVGhlIGRyaXZlciB3YXMgYWN1dGFsbHkgdGVzdGVkIG9uIE9hc2lzIGFuZCBLYWxhaGFyaSBjYXJkcy4KKyAqCisgKgorICogTk9URTogVGhpcyBpcyB0aGUgc3RhbmRhcmQsIG5vbi1hY2NlbGVyYXRlZCB2ZXJzaW9uIG9mIEFsYWNyaXRlY2gncworICogICAgICAgSVMtTklDIGRyaXZlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjZGVmaW5lIFNMSUNfRFVNUF9FTkFCTEVEICAgICAgICAgICAgICAgMAorI2RlZmluZSBLTFVER0VfRk9SXzRHQl9CT1VOREFSWSAgICAgICAgIDEKKyNkZWZpbmUgREVCVUdfTUlDUk9DT0RFICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNMSUNfUFJPRFVDVElPTl9CVUlMRAkgICAgICAgIDEKKyNkZWZpbmUgU0xJQ19GQUlMVVJFX1JFU0VUCSAgICAgICAgICAgIDEKKyNkZWZpbmUgREJHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNMSUNfQVNTRVJUX0VOQUJMRUQJCSAgICAgICAgMQorI2RlZmluZSBTTElDX0dFVF9TVEFUU19FTkFCTEVECQkJMQorI2RlZmluZSBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECTAKKyNkZWZpbmUgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQJCSAgICAxCisjZGVmaW5lIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECTAKKyNkZWZpbmUgU0xJQ19JTlRFUlJVUFRfUFJPQ0VTU19MSU1JVAkxCisjZGVmaW5lIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCTEKKyNkZWZpbmUgU0xJQ19PRkZMT0FEX0lQX0NIRUNLU1VNCQkxCisjZGVmaW5lIFNUQVRTX1RJTUVSX0lOVEVSVkFMCQkJMgorI2RlZmluZSBQSU5HX1RJTUVSX0lOVEVSVkFMCQkJICAgIDEKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNkZWZpbmUgU0xJQ19FVEhUT09MX1NVUFBPUlQgICAgIDEKKworI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJzbGljaW5jLmgiCisjaW5jbHVkZSAiZ2Jkb3dubG9hZC5oIgorI2luY2x1ZGUgImdicmN2dWNvZGUuaCIKKyNpbmNsdWRlICJvYXNpc3JjdnVjb2RlLmgiCisKKyNpZmRlZiBERUJVR19NSUNST0NPREUKKyNpbmNsdWRlICJvYXNpc2RiZ2Rvd25sb2FkLmgiCisjZWxzZQorI2luY2x1ZGUgIm9hc2lzZG93bmxvYWQuaCIKKyNlbmRpZgorCisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKKyNpbmNsdWRlICJzbGljZHVtcC5oIgorI2VuZGlmCisKKyNkZWZpbmUgU0xJQ19QT1dFUl9NQU5BR0VNRU5UICAwCisKK3N0YXRpYyB1aW50IHNsaWNfZmlyc3RfaW5pdCA9IDE7CitzdGF0aWMgY2hhciAqc2xpY19iYW5uZXIgPSAiQWxhY3JpdGVjaCBTTElDIFRlY2hub2xvZ3kodG0pIFNlcnZlciAiXAorCQkiYW5kIFN0b3JhZ2UgQWNjZWxlcmF0b3IgKE5vbi1BY2NlbGVyYXRlZClcbiI7CisKK3N0YXRpYyBjaGFyICpzbGljX3Byb2NfdmVyc2lvbiA9ICIyLjAuMzUxICAyMDA2LzA3LzE0IDEyOjI2OjAwIjsKK3N0YXRpYyBjaGFyICpzbGljX3Byb2R1Y3RfbmFtZSA9ICJTTElDIFRlY2hub2xvZ3kodG0pIFNlcnZlciAiXAorCQkiYW5kIFN0b3JhZ2UgQWNjZWxlcmF0b3IgKE5vbi1BY2NlbGVyYXRlZCkiOworc3RhdGljIGNoYXIgKnNsaWNfdmVuZG9yID0gIkFsYWNyaXRlY2gsIEluYy4iOworCitzdGF0aWMgaW50IHNsaWNfZGVidWcgPSAxOworc3RhdGljIGludCBkZWJ1ZyA9IC0xOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpoZWFkX25ldGRldmljZTsKKworc3RhdGljIHN0cnVjdCBiYXNlX2RyaXZlciBzbGljX2dsb2JhbCA9IHsge30sIDAsIDAsIDAsIDEsIE5VTEwsIE5VTEwgfTsKK3N0YXRpYyBpbnQgaW50YWdnX2RlbGF5ID0gMTAwOworc3RhdGljIHUzMiBkeW5hbWljX2ludGFnZzsKK3N0YXRpYyBpbnQgZXJyb3Jtc2c7CitzdGF0aWMgaW50IGdvb2Rtc2c7CitzdGF0aWMgdW5zaWduZWQgaW50IHJjdl9jb3VudDsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzbGljX2RlYnVnZnM7CisKKyNkZWZpbmUgRFJWX05BTUUgICAgICAgICAgInNsaWNvc3MiCisjZGVmaW5lIERSVl9WRVJTSU9OICAgICAgICIyLjAuMSIKKyNkZWZpbmUgRFJWX0FVVEhPUiAgICAgICAgIkFsYWNyaXRlY2gsIEluYy4gRW5naW5lZXJpbmciCisjZGVmaW5lIERSVl9ERVNDUklQVElPTiAgICJBbGFjcml0ZWNoIFNMSUMgVGVjaG9ub2xvZ3kodG0pICJcCisJCSJOb24tQWNjZWxlcmF0ZWQgRHJpdmVyIgorI2RlZmluZSBEUlZfQ09QWVJJR0hUICAgICAiQ29weXJpZ2h0ICAyMDAwLTIwMDYgQWxhY3JpdGVjaCwgSW5jLiAiXAorCQkiQWxsIHJpZ2h0cyByZXNlcnZlZC4iCisjZGVmaW5lIFBGWAkJICAgRFJWX05BTUUgIiAiCisKK01PRFVMRV9BVVRIT1IoRFJWX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKKworbW9kdWxlX3BhcmFtKGR5bmFtaWNfaW50YWdnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkeW5hbWljX2ludGFnZywgIkR5bmFtaWMgSW50ZXJydXB0IEFnZ3JlZ2F0aW9uIFNldHRpbmciKTsKK21vZHVsZV9wYXJhbShpbnRhZ2dfZGVsYXksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGludGFnZ19kZWxheSwgInVTZWMgSW50ZXJydXB0IEFnZ3JlZ2F0aW9uIERlbGF5Iik7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbGljX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0geworCXtQQ0lfVkVORE9SX0lEX0FMQUNSSVRFQ0gsCisJIFNMSUNfMUdCX0RFVklDRV9JRCwKKwkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAorCXtQQ0lfVkVORE9SX0lEX0FMQUNSSVRFQ0gsCisJIFNMSUNfMkdCX0RFVklDRV9JRCwKKwkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAorCXswLH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzbGljX3BjaV90YmwpOworCisjZGVmaW5lIFNMSUNfR0VUX1NMSUNfSEFORExFKF9hZGFwdGVyLCBfcHNsaWNfaGFuZGxlKSAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJl9hZGFwdGVyLT5oYW5kbGVfbG9jay5sb2NrLCAgICAgICAgICAgICAgICAgICAgICBcCisJCQlfYWRhcHRlci0+aGFuZGxlX2xvY2suZmxhZ3MpOyAgICAgICAgICAgICAgICAgICBcCisgICAgX3BzbGljX2hhbmRsZSAgPSAgX2FkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlczsgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKF9wc2xpY19oYW5kbGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJQVNTRVJUKF9wc2xpY19oYW5kbGUtPnR5cGUgPT0gU0xJQ19IQU5ETEVfRlJFRSk7ICAgICAgICAgICAgICAgIFwKKwlfYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzID0gX3BzbGljX2hhbmRsZS0+bmV4dDsgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJl9hZGFwdGVyLT5oYW5kbGVfbG9jay5sb2NrLCAgICAgICAgICAgICAgICAgXAorCQkJX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmZsYWdzKTsgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFNMSUNfRlJFRV9TTElDX0hBTkRMRShfYWRhcHRlciwgX3BzbGljX2hhbmRsZSkgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX3BzbGljX2hhbmRsZS0+dHlwZSA9IFNMSUNfSEFORExFX0ZSRUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJl9hZGFwdGVyLT5oYW5kbGVfbG9jay5sb2NrLCAgICAgICAgICAgICAgICAgICAgICBcCisJCQlfYWRhcHRlci0+aGFuZGxlX2xvY2suZmxhZ3MpOyAgICAgICAgICAgICAgICAgICBcCisgICAgX3BzbGljX2hhbmRsZS0+bmV4dCA9IF9hZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXM7ICAgICAgICAgICAgICAgICBcCisgICAgX2FkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlcyA9IF9wc2xpY19oYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmxvY2ssICAgICAgICAgICAgICAgICBcCisJCQlfYWRhcHRlci0+aGFuZGxlX2xvY2suZmxhZ3MpOyAgICAgICAgICAgICAgICAgICBcCit9CisKK3N0YXRpYyB2b2lkIHNsaWNfZGVidWdfaW5pdCh2b2lkKTsKK3N0YXRpYyB2b2lkIHNsaWNfZGVidWdfY2xlYW51cCh2b2lkKTsKK3N0YXRpYyB2b2lkIHNsaWNfZGVidWdfYWRhcHRlcl9jcmVhdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19hZGFwdGVyX2Rlc3Ryb3koc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19jYXJkX2NyZWF0ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpOworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19jYXJkX2Rlc3Ryb3koc3RydWN0IHNsaWNjYXJkICpjYXJkKTsKKworc3RhdGljIGlubGluZSB2b2lkIHNsaWNfcmVnMzJfd3JpdGUodm9pZCBfX2lvbWVtICpyZWcsIHUzMiB2YWx1ZSwgdWludCBmbHVzaCkKK3sKKwl3cml0ZWwodmFsdWUsIHJlZyk7CisJaWYgKGZsdXNoKQorCQltYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2xpY19yZWc2NF93cml0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICB2b2lkIF9faW9tZW0gKnJlZywKKwkJCSAgICAgICB1MzIgdmFsdWUsCisJCQkgICAgICAgdm9pZCBfX2lvbWVtICpyZWdoLCB1MzIgcGFkZHJoLCB1aW50IGZsdXNoKQoreworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKKwkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOworCWlmIChwYWRkcmggIT0gYWRhcHRlci0+Y3VyYWRkcnVwcGVyKSB7CisJCWFkYXB0ZXItPmN1cmFkZHJ1cHBlciA9IHBhZGRyaDsKKwkJd3JpdGVsKHBhZGRyaCwgcmVnaCk7CisJfQorCXdyaXRlbCh2YWx1ZSwgcmVnKTsKKwlpZiAoZmx1c2gpCisJCW1iKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCisJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc2xpY19pbml0X2RyaXZlcih2b2lkKQoreworCWlmIChzbGljX2ZpcnN0X2luaXQpIHsKKwkJREJHX01TRygic2xpY29zczogJXMgc2xpY19maXJzdF9pbml0IHNldCBqaWZmaWVzWyVseF1cbiIsCisJCQlfX2Z1bmNfXywgamlmZmllcyk7CisJCXNsaWNfZmlyc3RfaW5pdCA9IDA7CisJCXNwaW5fbG9ja19pbml0KCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrKTsKKwkJc2xpY19kZWJ1Z19pbml0KCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzbGljX2RiZ19tYWNhZGRycyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlEQkdfTVNHKCIgICglcykgY3VyciAlMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWFxuIiwKKwkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5jdXJybWFjYWRkclswXSwKKwkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdLAorCQlhZGFwdGVyLT5jdXJybWFjYWRkclszXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNF0sCisJCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzVdKTsKKwlEQkdfTVNHKCIgICglcykgbWFjICAlMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWFxuIiwKKwkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5tYWNhZGRyWzBdLAorCQlhZGFwdGVyLT5tYWNhZGRyWzFdLCBhZGFwdGVyLT5tYWNhZGRyWzJdLAorCQlhZGFwdGVyLT5tYWNhZGRyWzNdLCBhZGFwdGVyLT5tYWNhZGRyWzRdLCBhZGFwdGVyLT5tYWNhZGRyWzVdKTsKKwlyZXR1cm47Cit9CisKKyNpZmRlZiBERUJVR19SRUdJU1RFUl9UUkFDRQorc3RhdGljIHZvaWQgc2xpY19kYmdfcmVnaXN0ZXJfdHJhY2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCXN0cnVjdCBzbGljY2FyZCAqY2FyZCkKK3sKKwl1aW50IGk7CisKKwlEQkdfRVJST1IoIkR1bXAgUmVnaXN0ZXIgV3JpdGUgVHJhY2U6IGN1cnJfaXggPT0gJWRcbiIsIGNhcmQtPmRlYnVnX2l4KTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlEQkdfRVJST1IoIiUyZCAlZCAlNHggJXggJXhcbiIsCisJCQkgIGksIGNhcmQtPnJlZ190eXBlW2ldLCBjYXJkLT5yZWdfb2Zmc2V0W2ldLAorCQkJICBjYXJkLT5yZWdfdmFsdWVbaV0sIGNhcmQtPnJlZ192YWx1ZWhbaV0pOworCX0KK30KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzbGljX2luaXRfYWRhcHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaWRldiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfdGJsX2VudHJ5LAorCQkJICAgICAgdm9pZCBfX2lvbWVtICptZW1hZGRyLCBpbnQgY2hpcF9pZHgpCit7CisJdXNob3J0IGluZGV4OworCXN0cnVjdCBzbGljX2hhbmRsZSAqcHNsaWNfaGFuZGxlOworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKy8qCisgICAgREJHX01TRygic2xpY29zczogJXMgKCVzKVxuICAgIG5ldGRldiBbJXBdXG4gICAgYWRhcHRlclslcF1cbiAgICAiCisJICAgICJwY2lkZXYgWyVwXVxuIiwgX19mdW5jX18sIG5ldGRldi0+bmFtZSwgbmV0ZGV2LCBhZGFwdGVyLCBwY2lkZXYpOyovCisvKglhZGFwdGVyLT5wY2lkZXYgPSBwY2lkZXY7Ki8KKwlhZGFwdGVyLT52ZW5kaWQgPSBwY2lfdGJsX2VudHJ5LT52ZW5kb3I7CisJYWRhcHRlci0+ZGV2aWQgPSBwY2lfdGJsX2VudHJ5LT5kZXZpY2U7CisJYWRhcHRlci0+c3Vic3lzaWQgPSBwY2lfdGJsX2VudHJ5LT5zdWJkZXZpY2U7CisJYWRhcHRlci0+YnVzbnVtYmVyID0gcGNpZGV2LT5idXMtPm51bWJlcjsKKwlhZGFwdGVyLT5zbG90bnVtYmVyID0gKChwY2lkZXYtPmRldmZuID4+IDMpICYgMHgxRik7CisJYWRhcHRlci0+ZnVuY3Rpb25udW1iZXIgPSAocGNpZGV2LT5kZXZmbiAmIDB4Nyk7CisJYWRhcHRlci0+bWVtb3J5bGVuZ3RoID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCWFkYXB0ZXItPnNsaWNfcmVncyA9IChfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKiltZW1hZGRyOworCWFkYXB0ZXItPmlycSA9IHBjaWRldi0+aXJxOworLyoJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OyovCisJYWRhcHRlci0+bmV4dF9uZXRkZXZpY2UgPSBoZWFkX25ldGRldmljZTsKKwloZWFkX25ldGRldmljZSA9IG5ldGRldjsKKwlhZGFwdGVyLT5jaGlwaWQgPSBjaGlwX2lkeDsKKwlhZGFwdGVyLT5wb3J0ID0gMDsJLyphZGFwdGVyLT5mdW5jdGlvbm51bWJlcjsqLworCWFkYXB0ZXItPmNhcmRpbmRleCA9IGFkYXB0ZXItPnBvcnQ7CisJYWRhcHRlci0+bWVtb3J5YmFzZSA9IG1lbWFkZHI7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jay5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+cmVzZXRfbG9jay5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+aGFuZGxlX2xvY2subG9jayk7CisKKwlhZGFwdGVyLT5jYXJkX3NpemUgPSAxOworCS8qCisJICBJbml0aWFsaXplIHNsaWNfaGFuZGxlIGFycmF5CisJKi8KKwlBU1NFUlQoU0xJQ19DTURRX01BWENNRFMgPD0gMHhGRkZGKTsKKwkvKgorCSBTdGFydCB3aXRoIDEuICAwIGlzIGFuIGludmFsaWQgaG9zdCBoYW5kbGUuCisJKi8KKwlmb3IgKGluZGV4ID0gMSwgcHNsaWNfaGFuZGxlID0gJmFkYXB0ZXItPnNsaWNfaGFuZGxlc1sxXTsKKwkgICAgIGluZGV4IDwgU0xJQ19DTURRX01BWENNRFM7IGluZGV4KyssIHBzbGljX2hhbmRsZSsrKSB7CisKKwkJcHNsaWNfaGFuZGxlLT50b2tlbi5oYW5kbGVfaW5kZXggPSBpbmRleDsKKwkJcHNsaWNfaGFuZGxlLT50eXBlID0gU0xJQ19IQU5ETEVfRlJFRTsKKwkJcHNsaWNfaGFuZGxlLT5uZXh0ID0gYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzOworCQlhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXMgPSBwc2xpY19oYW5kbGU7CisJfQorLyoKKyAgICBEQkdfTVNHKCIuLi4uLi4uLi5cbml4WyVkXSBwaGFuZGxlWyVwXSBwZnJlZVslcF0gbmV4dFslcF1cbiIsCisJaW5kZXgsIHBzbGljX2hhbmRsZSwgYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzLCBwc2xpY19oYW5kbGUtPm5leHQpOyovCisJYWRhcHRlci0+cHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopCisJCQkJCXBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBzbGljX3NobWVtICopLAorCQkJCQkmYWRhcHRlci0+CisJCQkJCXBoeXNfc2htZW0pOworLyoKKyAgICAgIERCR19NU0coInNsaWNvc3M6ICVzICglcylcbiAgIHBzaG1lbSAgICBbJXBdXG4gICBwaHlzX3NobWVtWyVwXVxuIlwKKwkJInNsaWNfcmVncyBbJXBdXG4iLCBfX2Z1bmNfXywgbmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5wc2htZW0sCisJCSh2b2lkICopYWRhcHRlci0+cGh5c19zaG1lbSwgYWRhcHRlci0+c2xpY19yZWdzKTsKKyovCisJQVNTRVJUKGFkYXB0ZXItPnBzaG1lbSk7CisKKwltZW1zZXQoYWRhcHRlci0+cHNobWVtLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfc2htZW0pKTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc2xpY19lbnRyeV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfdGJsX2VudHJ5KQoreworCXN0YXRpYyBpbnQgY2FyZHNfZm91bmQ7CisJc3RhdGljIGludCBkaWRfdmVyc2lvbjsKKwlpbnQgZXJyOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXI7CisJdm9pZCBfX2lvbWVtICptZW1tYXBwZWRfaW9hZGRyID0gTlVMTDsKKwl1MzIgc3RhdHVzID0gMDsKKwl1bG9uZyBtbWlvX3N0YXJ0ID0gMDsKKwl1bG9uZyBtbWlvX2xlbiA9IDA7CisJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gTlVMTDsKKworCURCR19NU0coInNsaWNvc3M6ICVzIDIuNiBWRVJTSU9OIEVOVEVSIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsCisJCV9fZnVuY19fLCBqaWZmaWVzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJc2xpY19nbG9iYWwuZHluYW1pY19pbnRhZ2cgPSBkeW5hbWljX2ludGFnZzsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaWRldik7CisKKwlEQkdfTVNHKCJDYWxsIHBjaV9lbmFibGVfZGV2aWNlKCVwKSAgc3RhdHVzWyV4XVxuIiwgcGNpZGV2LCBlcnIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoc2xpY19kZWJ1ZyA+IDAgJiYgZGlkX3ZlcnNpb24rKyA9PSAwKSB7CisJCXByaW50ayhzbGljX2Jhbm5lcik7CisJCXByaW50ayhzbGljX3Byb2NfdmVyc2lvbik7CisJfQorCisJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwY2lkZXYsIERNQV82NEJJVF9NQVNLKTsKKwlpZiAoIWVycikgeworCQlEQkdfTVNHKCJwY2lfc2V0X2RtYV9tYXNrKERNQV82NEJJVF9NQVNLKSBzdWNjZXNzZnVsXG4iKTsKKwl9IGVsc2UgeworCQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BXzMyQklUX01BU0spOworCQlpZiAoZXJyKSB7CisJCQlEQkdfTVNHCisJCQkgICAgKCJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nICBlcnJbJXhdXG4iLAorCQkJICAgICBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlEQkdfTVNHKCJwY2lfc2V0X2RtYV9tYXNrKERNQV8zMkJJVF9NQVNLKSBzdWNjZXNzZnVsXG4iKTsKKwl9CisKKwlEQkdfTVNHKCJDYWxsIHBjaV9yZXF1ZXN0X3JlZ2lvbnNcbiIpOworCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2lkZXYsIERSVl9OQU1FKTsKKwlpZiAoZXJyKSB7CisJCURCR19NU0coInBjaV9yZXF1ZXN0X3JlZ2lvbnMgRkFJTEVEIGVyclsleF1cbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJREJHX01TRygiY2FsbCBwY2lfc2V0X21hc3RlclxuIik7CisJcGNpX3NldF9tYXN0ZXIocGNpZGV2KTsKKworCURCR19NU0coImNhbGwgYWxsb2NfZXRoZXJkZXZcbiIpOworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgYWRhcHRlcikpOworCWlmICghbmV0ZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9leGl0X3NsaWNfcHJvYmU7CisJfQorCURCR19NU0coImFsbG9jX2V0aGVyZGV2IGZvciBzbGljIG5ldGRldlslcF1cbiIsIG5ldGRldik7CisKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwY2lkZXYtPmRldik7CisKKwlwY2lfc2V0X2RydmRhdGEocGNpZGV2LCBuZXRkZXYpOworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKKwlhZGFwdGVyLT5wY2lkZXYgPSBwY2lkZXY7CisKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CisJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CisKKwlEQkdfTVNHKCJzbGljb3NzOiBjYWxsIGlvcmVtYXAobW1pb19zdGFydFslbHhdLCBtbWlvX2xlblslbHhdKVxuIiwKKwkJbW1pb19zdGFydCwgbW1pb19sZW4pOworCisvKiAgbWVtbWFwcGVkX2lvYWRkciA9ICAodTMyKWlvcmVtYXBfbm9jYWNoZShtbWlvX3N0YXJ0LCBtbWlvX2xlbik7Ki8KKwltZW1tYXBwZWRfaW9hZGRyID0gaW9yZW1hcChtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisJREJHX01TRygic2xpY29zczogJXMgTUVNTUFQUEVEX0lPQUREUiBbJXBdXG4iLCBfX2Z1bmNfXywKKwkJbWVtbWFwcGVkX2lvYWRkcik7CisJaWYgKCFtZW1tYXBwZWRfaW9hZGRyKSB7CisJCURCR19FUlJPUigiJXMgY2Fubm90IHJlbWFwIE1NSU8gcmVnaW9uICVseCBAICVseFxuIiwKKwkJCSAgX19mdW5jX18sIG1taW9fbGVuLCBtbWlvX3N0YXJ0KTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb247CisJfQorCisJREJHX01TRworCSAgICAoInNsaWNvc3M6ICVzIGZvdW5kIEFsYWNyaXRlY2ggU0xJQ09TUyBQQ0ksIE1NSU8gYXQgJXAsICJcCisJICAgICJzdGFydFslbHhdIGxlblslbHhdLCBJUlEgJWQuXG4iLAorCSAgICAgX19mdW5jX18sIG1lbW1hcHBlZF9pb2FkZHIsIG1taW9fc3RhcnQsIG1taW9fbGVuLCBwY2lkZXYtPmlycSk7CisKKwlzbGljX2NvbmZpZ19wY2kocGNpZGV2KTsKKworCXNsaWNfaW5pdF9kcml2ZXIoKTsKKworCXNsaWNfaW5pdF9hZGFwdGVyKG5ldGRldiwKKwkJCSAgcGNpZGV2LCBwY2lfdGJsX2VudHJ5LCBtZW1tYXBwZWRfaW9hZGRyLCBjYXJkc19mb3VuZCk7CisKKwlzdGF0dXMgPSBzbGljX2NhcmRfbG9jYXRlKGFkYXB0ZXIpOworCWlmIChzdGF0dXMpIHsKKwkJREJHX0VSUk9SKCIlcyBjYW5ub3QgbG9jYXRlIGNhcmRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb247CisJfQorCisJY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisKKwlpZiAoIWFkYXB0ZXItPmFsbG9jYXRlZCkgeworCQljYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQrKzsKKwkJYWRhcHRlci0+YWxsb2NhdGVkID0gMTsKKwl9CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAgICBjYXJkOiAgICAgICAgICAgICAlcFxuIiwgX19mdW5jX18sCisJCWFkYXB0ZXItPmNhcmQpOworCURCR19NU0coInNsaWNvc3M6ICVzICAgIGNhcmQtPmFkYXB0ZXJbJWRdID09IFslcF1cbiIsIF9fZnVuY19fLAorCQkodWludCkgYWRhcHRlci0+cG9ydCwgYWRhcHRlcik7CisJREJHX01TRygic2xpY29zczogJXMgICAgY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkIFslZF1cbiIsIF9fZnVuY19fLAorCQljYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQpOworCURCR19NU0coInNsaWNvc3M6ICVzICAgIGNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCBbJWRdXG4iLCBfX2Z1bmNfXywKKwkJY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKTsKKworCXN0YXR1cyA9IHNsaWNfY2FyZF9pbml0KGNhcmQsIGFkYXB0ZXIpOworCisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQljYXJkLT5zdGF0ZSA9IENBUkRfRkFJTDsKKwkJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9GQUlMOworCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CisJCURCR19FUlJPUigic2xpY19jYXJkX2luaXQgRkFJTEVEIHN0YXR1c1sleF1cbiIsIHN0YXR1cyk7CisJfSBlbHNlIHsKKwkJc2xpY19hZGFwdGVyX3NldF9od2FkZHIoYWRhcHRlcik7CisJfQorCisJbmV0ZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylhZGFwdGVyLT5tZW1vcnliYXNlOworCW5ldGRldi0+aXJxID0gYWRhcHRlci0+aXJxOworCW5ldGRldi0+b3BlbiA9IHNsaWNfZW50cnlfb3BlbjsKKwluZXRkZXYtPnN0b3AgPSBzbGljX2VudHJ5X2hhbHQ7CisJbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzbGljX3htaXRfc3RhcnQ7CisJbmV0ZGV2LT5kb19pb2N0bCA9IHNsaWNfaW9jdGw7CisJbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBzbGljX21hY19zZXRfYWRkcmVzczsKKyNpZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECisJbmV0ZGV2LT5nZXRfc3RhdHMgPSBzbGljX2dldF9zdGF0czsKKyNlbmRpZgorCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2xpY19tY2FzdF9zZXRfbGlzdDsKKworCXNsaWNfZGVidWdfYWRhcHRlcl9jcmVhdGUoYWRhcHRlcik7CisKKwlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlpZiAoZXJyKSB7CisJCURCR19FUlJPUigiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX291dF91bm1hcDsKKwl9CisKKwlEQkdfTVNHCisJICAgICgic2xpY29zczogYWRkciAweCVseCwgaXJxICVkLCBNQUMgYWRkciAiXAorCSAgICAgIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAorCSAgICAgbW1pb19zdGFydCwgLypwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKSwgKi8gcGNpZGV2LT5pcnEsCisJICAgICBuZXRkZXYtPmRldl9hZGRyWzBdLCBuZXRkZXYtPmRldl9hZGRyWzFdLCBuZXRkZXYtPmRldl9hZGRyWzJdLAorCSAgICAgbmV0ZGV2LT5kZXZfYWRkclszXSwgbmV0ZGV2LT5kZXZfYWRkcls0XSwgbmV0ZGV2LT5kZXZfYWRkcls1XSk7CisKKwljYXJkc19mb3VuZCsrOworCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVQgc3RhdHVzWyV4XSBqaWZmaWVzWyVseF0gY3B1ICVkXG4iLAorCQlfX2Z1bmNfXywgc3RhdHVzLCBqaWZmaWVzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJcmV0dXJuIHN0YXR1czsKKworZXJyX291dF91bm1hcDoKKwlpb3VubWFwKG1lbW1hcHBlZF9pb2FkZHIpOworCitlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb246CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKworZXJyX291dF9leGl0X3NsaWNfcHJvYmU6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lkZXYpOworCURCR19FUlJPUigiJXMgRVhJVCBqaWZmaWVzWyVseF0gY3B1ICVkXG4iLCBfX2Z1bmNfXywgamlmZmllcywKKwkJICBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19lbnRyeV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCXUzMiBsb2NrZWQgPSAwOworCWludCBzdGF0dXM7CisKKwlBU1NFUlQoYWRhcHRlcik7CisJQVNTRVJUKGNhcmQpOworCURCR19NU0cKKwkgICAgKCJzbGljb3NzOiAlcyBhZGFwdGVyLT5hY3RpdmF0ZWRbJWRdIGNhcmQtPmFkYXB0ZXJzWyV4XSAiXAorCSAgICAgImFsbG9jZFsleF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5hY3RpdmF0ZWQsCisJICAgICBjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQsCisJICAgICBjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQpOworCURCR19NU0cKKwkgICAgKCJzbGljb3NzOiAlcyAoJXMpOiBbamlmZmllc1slbHhdIGNwdSAlZF0gZGV2WyVwXSBhZGFwdFslcF0gIlwKKwkgICAgICJwb3J0WyVkXSBjYXJkWyVwXVxuIiwKKwkgICAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSwKKwkgICAgIGFkYXB0ZXItPm5ldGRldiwgYWRhcHRlciwgYWRhcHRlci0+cG9ydCwgY2FyZCk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKKwkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CisJbG9ja2VkID0gMTsKKwlpZiAoIWFkYXB0ZXItPmFjdGl2YXRlZCkgeworCQljYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQrKzsKKwkJc2xpY19nbG9iYWwubnVtX3NsaWNfcG9ydHNfYWN0aXZlKys7CisJCWFkYXB0ZXItPmFjdGl2YXRlZCA9IDE7CisJfQorCXN0YXR1cyA9IHNsaWNfaWZfaW5pdChhZGFwdGVyKTsKKworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJaWYgKGFkYXB0ZXItPmFjdGl2YXRlZCkgeworCQkJY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkLS07CisJCQlzbGljX2dsb2JhbC5udW1fc2xpY19wb3J0c19hY3RpdmUtLTsKKwkJCWFkYXB0ZXItPmFjdGl2YXRlZCA9IDA7CisJCX0KKwkJaWYgKGxvY2tlZCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKKwkJCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKKwkJCWxvY2tlZCA9IDA7CisJCX0KKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJREJHX01TRygic2xpY29zczogJXMgc2V0IGNhcmQtPm1hc3RlclslcF0gYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLAorCQljYXJkLT5tYXN0ZXIsIGFkYXB0ZXIpOworCWlmICghY2FyZC0+bWFzdGVyKQorCQljYXJkLT5tYXN0ZXIgPSBhZGFwdGVyOworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisJaWYgKCEoY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nKSkKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FyZC0+ZHVtcF93cSk7CisjZW5kaWYKKworCWlmIChsb2NrZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKKwkJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCQlsb2NrZWQgPSAwOworCX0KKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorCWlmICghKGNhcmQtPmR1bXB0aHJlYWRfcnVubmluZykpIHsKKwkJREJHX01TRygiYXR0ZW1wdCB0byBpbml0aWFsaXplIGR1bXAgdGhyZWFkXG4iKTsKKwkJc3RhdHVzID0gc2xpY19pbml0X2R1bXBfdGhyZWFkKGNhcmQpOworCQkvKgorCQlFdmVuIGlmIHRoZSBkdW1wIHRocmVhZCBmYWlscywgd2Ugd2lsbCBjb250aW51ZSBhdCB0aGlzIHBvaW50CisJCSovCisJfQorI2VuZGlmCisKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbGljX2VudHJ5X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpZGV2KTsKKwl1MzIgbW1pb19zdGFydCA9IDA7CisJdWludCBtbWlvX2xlbiA9IDA7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7CisKKwlBU1NFUlQoYWRhcHRlcik7CisJREJHX01TRygic2xpY29zczogJXMgRU5URVIgZGV2WyVwXSBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGRldiwKKwkJYWRhcHRlcik7CisJc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoYWRhcHRlcik7CisJc2xpY191bm1hcF9tbWlvX3NwYWNlKGFkYXB0ZXIpOworCURCR19NU0coInNsaWNvc3M6ICVzIHVucmVnaXN0ZXJfbmV0ZGV2XG4iLCBfX2Z1bmNfXyk7CisJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKTsKKwltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKKworCURCR19NU0coInNsaWNvc3M6ICVzIHJlbF9yZWdpb24oMCkgc3RhcnRbJXhdIGxlblsleF1cbiIsIF9fZnVuY19fLAorCQltbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKworCURCR19NU0coInNsaWNvc3M6ICVzIGlvdW5tYXAgZGV2LT5iYXNlX2FkZHJbJXhdXG4iLCBfX2Z1bmNfXywKKwkJKHVpbnQpIGRldi0+YmFzZV9hZGRyKTsKKwlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilkZXYtPmJhc2VfYWRkcik7CisJQVNTRVJUKGFkYXB0ZXItPmNhcmQpOworCWNhcmQgPSBhZGFwdGVyLT5jYXJkOworCUFTU0VSVChjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQpOworCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZC0tOworCWFkYXB0ZXItPmFsbG9jYXRlZCA9IDA7CisJREJHX01TRworCSAgICAoInNsaWNvc3M6ICVzIGluaXRbJXhdIGFsbG9jWyV4XSBjYXJkWyVwXSBhZGFwdGVyWyVwXVxuIiwKKwkgICAgIF9fZnVuY19fLCBjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQsIGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCwKKwkgICAgIGNhcmQsIGFkYXB0ZXIpOworCWlmICghY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkKSB7CisJCXN0cnVjdCBzbGljY2FyZCAqY3Vycl9jYXJkID0gc2xpY19nbG9iYWwuc2xpY19jYXJkOworCQlpZiAoY3Vycl9jYXJkID09IGNhcmQpIHsKKwkJCXNsaWNfZ2xvYmFsLnNsaWNfY2FyZCA9IGNhcmQtPm5leHQ7CisJCX0gZWxzZSB7CisJCQl3aGlsZSAoY3Vycl9jYXJkLT5uZXh0ICE9IGNhcmQpCisJCQkJY3Vycl9jYXJkID0gY3Vycl9jYXJkLT5uZXh0OworCQkJQVNTRVJUKGN1cnJfY2FyZCk7CisJCQljdXJyX2NhcmQtPm5leHQgPSBjYXJkLT5uZXh0OworCQl9CisJCUFTU0VSVChzbGljX2dsb2JhbC5udW1fc2xpY19jYXJkcyk7CisJCXNsaWNfZ2xvYmFsLm51bV9zbGljX2NhcmRzLS07CisJCXNsaWNfY2FyZF9jbGVhbnVwKGNhcmQpOworCX0KKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBkZWFsbG9jYXRlIGRldmljZVxuIiwgX19mdW5jX18pOworCWtmcmVlKGRldik7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lkZXYpOworCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIGludCBzbGljX2VudHJ5X2hhbHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKKwlBU1NFUlQoY2FyZCk7CisJREJHX01TRygic2xpY29zczogJXMgKCVzKSBFTlRFUlxuIiwgX19mdW5jX18sIGRldi0+bmFtZSk7CisJREJHX01TRygic2xpY29zczogJXMgKCVzKSBhY3R2dGRbJWRdIGFsbG9jWyVkXSBzdGF0ZVsleF0gYWRhcHRbJXBdXG4iLAorCQlfX2Z1bmNfXywgZGV2LT5uYW1lLCBjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQsCisJCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCwgY2FyZC0+c3RhdGUsIGFkYXB0ZXIpOworCXNsaWNfaWZfc3RvcF9xdWV1ZShhZGFwdGVyKTsKKwlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX0RPV047CisJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19ET1dOOworCWFkYXB0ZXItPnVwcl9saXN0ID0gTlVMTDsKKwlhZGFwdGVyLT51cHJfYnVzeSA9IDA7CisJYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiA9IDA7CisJREJHX01TRygic2xpY29zczogJXMgKCVzKSBzZXQgYWRhcHRlclslcF0gc3RhdGUgdG8gQURBUFRfRE9XTiglZClcbiIsCisJCV9fZnVuY19fLCBkZXYtPm5hbWUsIGFkYXB0ZXIsIGFkYXB0ZXItPnN0YXRlKTsKKwlBU1NFUlQoY2FyZC0+YWRhcHRlclthZGFwdGVyLT5jYXJkaW5kZXhdID09IGFkYXB0ZXIpOworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09GRiwgRkxVU0gpOworCWFkYXB0ZXItPmFsbF9yZWdfd3JpdGVzKys7CisJYWRhcHRlci0+aWNyX3JlZ193cml0ZXMrKzsKKwlzbGljX2NvbmZpZ19jbGVhcihhZGFwdGVyKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIGRldlslcF0gYWRhcHRbJXBdIGNhcmRbJXBdXG4iLAorCQlfX2Z1bmNfXywgZGV2LT5uYW1lLCBkZXYsIGFkYXB0ZXIsIGNhcmQpOworCWlmIChhZGFwdGVyLT5hY3RpdmF0ZWQpIHsKKwkJY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkLS07CisJCXNsaWNfZ2xvYmFsLm51bV9zbGljX3BvcnRzX2FjdGl2ZS0tOworCQlhZGFwdGVyLT5hY3RpdmF0ZWQgPSAwOworCX0KKyNpZmRlZiBBVVRPTUFUSUNfUkVTRVQKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3Jlc2V0X2lmYWNlLCAwLCBGTFVTSCk7CisjZW5kaWYKKwkvKgorCSAqICBSZXNldCB0aGUgYWRhcHRlcidzIHJzcCwgY21kLCBhbmQgcmN2IHF1ZXVlcworCSAqLworCXNsaWNfY21kcV9yZXNldChhZGFwdGVyKTsKKwlzbGljX3JzcHF1ZXVlX3Jlc2V0KGFkYXB0ZXIpOworCXNsaWNfcmN2cXVldWVfcmVzZXQoYWRhcHRlcik7CisKKyNpZmRlZiBBVVRPTUFUSUNfUkVTRVQKKwlpZiAoIWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCkgeworCisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKKwkJaWYgKGNhcmQtPmR1bXB0aHJlYWRfcnVubmluZykgeworCQkJdWludCBzdGF0dXM7CisJCQlEQkdfTVNHKCJhdHRlbXB0IHRvIHRlcm1pbmF0ZSBkdW1wIHRocmVhZCBwaWRbJXhdXG4iLAorCQkJCWNhcmQtPmR1bXBfdGFza19pZCk7CisJCQlzdGF0dXMgPSBraWxsX3Byb2MoY2FyZC0+ZHVtcF90YXNrX2lkLT5waWQsIFNJR0tJTEwsIDEpOworCisJCQlpZiAoIXN0YXR1cykgeworCQkJCWludCBjb3VudCA9IDEwICogMTAwOworCQkJCXdoaWxlIChjYXJkLT5kdW1wdGhyZWFkX3J1bm5pbmcgJiYgLS1jb3VudCkgeworCQkJCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwkJCQl9CisKKwkJCQlpZiAoIWNvdW50KSB7CisJCQkJCURCR19NU0cKKwkJCQkJICAgICgic2xpY21vbiB0aHJlYWQgY2xlYW51cCBGQUlMRUQgXAorCQkJCQkgICAgIHBpZFsleF1cbiIsCisJCQkJCSAgICAgY2FyZC0+ZHVtcF90YXNrX2lkLT5waWQpOworCQkJCX0KKwkJCX0KKwkJfQorI2VuZGlmCisJCURCR19NU0coInNsaWNvc3M6ICVzICglcykgaW5pdGlhdGUgQ0FSRF9IQUxUXG4iLCBfX2Z1bmNfXywKKwkJCWRldi0+bmFtZSk7CisKKwkJc2xpY19jYXJkX2luaXQoY2FyZCwgYWRhcHRlcik7CisJfQorI2VuZGlmCisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVYSVRcbiIsIF9fZnVuY19fLCBkZXYtPm5hbWUpOworCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCUFTU0VSVChycSk7CisvKgorICAgICAgREJHX01TRygic2xpY29zczogJXMgY21kWyV4XSBycVslcF0gZGV2WyVwXVxuIiwgX19mdW5jX18sIGNtZCwgcnEsIGRldik7CisqLworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DU0xJQ1NFVElOVEFHRzoKKwkJeworCQkJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKikKKwkJCQkJCQluZXRkZXZfcHJpdihkZXYpOworCQkJdTMyIGRhdGFbN107CisJCQl1MzIgaW50YWdnOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgcnEtPmlmcl9kYXRhLCAyOCkpIHsKKwkJCQlEQkdfRVJST1IKKwkJCQkgICAgKCJjb3B5X2Zyb21fdXNlciBGQUlMRUQgZ2V0dGluZyBpbml0aWFsIFwKKwkJCQkgICAgIHBhcmFtc1xuIik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCQlpbnRhZ2cgPSBkYXRhWzBdOworCQkJcHJpbnRrKEtFUk5fRU1FUkcKKwkJCSAgICAgICAiJXM6IHNldCBpbnRlcnJ1cHQgYWdncmVnYXRpb24gdG8gJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGludGFnZyk7CisJCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgaW50YWdnKTsKKwkJCXJldHVybiAwOworCQl9CisjaWZkZWYgU0xJQ19VU0VSX1JFUVVFU1RfRFVNUF9FTkFCTEVECisJY2FzZSBTSU9DU0xJQ0RVTVBDQVJEOgorCQl7CisJCQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKQorCQkJCQkJCWRldi0+cHJpdjsKKwkJCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKKworCQkJQVNTRVJUKGFkYXB0ZXIpOworCQkJQVNTRVJUKGFkYXB0ZXItPmNhcmQpCisJCQljYXJkID0gYWRhcHRlci0+Y2FyZDsKKworCQkJREJHX0lPQ1RMKCJzbGljX2lvY3RsICBTSU9DU0xJQ19EVU1QX0NBUkRcbiIpOworCisJCQlpZiAoY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPT0gU0xJQ19EVU1QX0RPTkUpIHsKKwkJCQlwcmludGsoU0xJQ0xFVkVMCisJCQkJICAgICAgICJTTElDIENhcmQgZHVtcCB0byBiZSBvdmVyd3JpdHRlblxuIik7CisJCQkJY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPSBTTElDX0RVTVBfUkVRVUVTVEVEOworCQkJfSBlbHNlIGlmICgoY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPT0gU0xJQ19EVU1QX1JFUVVFU1RFRCkKKwkJCQkgICB8fCAoY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPT0KKwkJCQkgICAgICAgU0xJQ19EVU1QX0lOX1BST0dSRVNTKSkgeworCQkJCXByaW50ayhTTElDTEVWRUwKKwkJCQkgICAgICAgIlNMSUMgQ2FyZCBkdW1wIFJlcXVlc3RlZCBidXQgYWxyZWFkeSBcCisJCQkJCWluIHByb2dyZXNzLi4uIGlnbm9yZVxuIik7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhTTElDTEVWRUwKKwkJCQkgICAgICAgIlNMSUMgQ2FyZCAjJWQgRHVtcCBSZXF1ZXN0ZWRcbiIsCisJCQkJICAgICAgIGNhcmQtPmNhcmRudW0pOworCQkJCWNhcmQtPmR1bXBfcmVxdWVzdGVkID0gU0xJQ19EVU1QX1JFUVVFU1RFRDsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisjZW5kaWYKKworI2lmZGVmIFNMSUNfVFJBQ0VfRFVNUF9FTkFCTEVECisJY2FzZSBTSU9DU0xJQ1RSQUNFRFVNUDoKKwkJeworCQkJdWxvbmcgZGF0YVs3XTsKKwkJCXVsb25nIHZhbHVlOworCisJCQlEQkdfSU9DVEwoInNsaWNfaW9jdGwgIFNJT0NTTElDX1RSQUNFX0RVTVBcbiIpOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgcnEtPmlmcl9kYXRhLCAyOCkpIHsKKwkJCQlQUklOVF9FUlJPUgorCQkJCSAgICAoInNsaWM6IGNvcHlfZnJvbV91c2VyIEZBSUxFRCBnZXR0aW5nIFwKKwkJCQkgICAgIGluaXRpYWwgc2ltYmEgcGFyYW1cbiIpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCisJCQl2YWx1ZSA9IGRhdGFbMF07CisJCQlpZiAodHJhY2Vtb25fcmVxdWVzdCA9PSBTTElDX0RVTVBfRE9ORSkgeworCQkJCVBSSU5UX0VSUk9SCisJCQkJICAgICgiQVRLIERpYWdub3N0aWMgVHJhY2UgRHVtcCBSZXF1ZXN0ZWRcbiIpOworCQkJCXRyYWNlbW9uX3JlcXVlc3QgPSBTTElDX0RVTVBfUkVRVUVTVEVEOworCQkJCXRyYWNlbW9uX3JlcXVlc3RfdHlwZSA9IHZhbHVlOworCQkJCXRyYWNlbW9uX3RpbWVzdGFtcCA9IGppZmZpZXM7CisJCQl9IGVsc2UgaWYgKCh0cmFjZW1vbl9yZXF1ZXN0ID09IFNMSUNfRFVNUF9SRVFVRVNURUQpIHx8CisJCQkJICAgKHRyYWNlbW9uX3JlcXVlc3QgPT0KKwkJCQkgICAgU0xJQ19EVU1QX0lOX1BST0dSRVNTKSkgeworCQkJCVBSSU5UX0VSUk9SCisJCQkJICAgICgiQVRLIERpYWdub3N0aWMgVHJhY2UgRHVtcCBSZXF1ZXN0ZWQgYnV0IFwKKwkJCQkgICAgIGFscmVhZHkgaW4gcHJvZ3Jlc3MuLi4gaWdub3JlXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJUFJJTlRfRVJST1IKKwkJCQkgICAgKCJBVEsgRGlhZ25vc3RpYyBUcmFjZSBEdW1wIFJlcXVlc3RlZFxuIik7CisJCQkJdHJhY2Vtb25fcmVxdWVzdCA9IFNMSUNfRFVNUF9SRVFVRVNURUQ7CisJCQkJdHJhY2Vtb25fcmVxdWVzdF90eXBlID0gdmFsdWU7CisJCQkJdHJhY2Vtb25fdGltZXN0YW1wID0gamlmZmllczsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisjZW5kaWYKKyNpZiBTTElDX0VUSFRPT0xfU1VQUE9SVAorCWNhc2UgU0lPQ0VUSFRPT0w6CisJCXsKKwkJCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopCisJCQkJCQkJbmV0ZGV2X3ByaXYoZGV2KTsKKwkJCXN0cnVjdCBldGh0b29sX2NtZCBkYXRhOworCQkJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CisKKwkJCUFTU0VSVChhZGFwdGVyKTsKKy8qICAgICAgICAgICAgICAgICAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIFNJT0NFVEhUT09MXG4iLCBfX2Z1bmNfXyk7ICovCisJCQlpZiAoY29weV9mcm9tX3VzZXIoJmVjbWQsIHJxLT5pZnJfZGF0YSwgc2l6ZW9mKGVjbWQpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJaWYgKGVjbWQuY21kID09IEVUSFRPT0xfR1NFVCkgeworCQkJCWRhdGEuc3VwcG9ydGVkID0KKwkJCQkgICAgKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJCSAgICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkJICAgICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CisJCQkJICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CisJCQkJICAgICBTVVBQT1JURURfQXV0b25lZyB8IFNVUFBPUlRFRF9NSUkpOworCQkJCWRhdGEucG9ydCA9IFBPUlRfTUlJOworCQkJCWRhdGEudHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCQkJCWRhdGEucGh5X2FkZHJlc3MgPSAwOworCQkJCWlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xMDBNQikKKwkJCQkJZGF0YS5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCQllbHNlIGlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xME1CKQorCQkJCQlkYXRhLnNwZWVkID0gU1BFRURfMTA7CisJCQkJZWxzZQorCQkJCQlkYXRhLnNwZWVkID0gMDsKKworCQkJCWlmIChhZGFwdGVyLT5saW5rZHVwbGV4ID09IExJTktfRlVMTEQpCisJCQkJCWRhdGEuZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCQkJZWxzZQorCQkJCQlkYXRhLmR1cGxleCA9IERVUExFWF9IQUxGOworCisJCQkJZGF0YS5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CisJCQkJZGF0YS5tYXh0eHBrdCA9IDE7CisJCQkJZGF0YS5tYXhyeHBrdCA9IDE7CisJCQkJaWYgKGNvcHlfdG9fdXNlcgorCQkJCSAgICAocnEtPmlmcl9kYXRhLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCX0gZWxzZSBpZiAoZWNtZC5jbWQgPT0gRVRIVE9PTF9TU0VUKSB7CisJCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJCQlyZXR1cm4gLUVQRVJNOworCisJCQkJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwME1CKQorCQkJCQlkYXRhLnNwZWVkID0gU1BFRURfMTAwOworCQkJCWVsc2UgaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwTUIpCisJCQkJCWRhdGEuc3BlZWQgPSBTUEVFRF8xMDsKKwkJCQllbHNlCisJCQkJCWRhdGEuc3BlZWQgPSAwOworCisJCQkJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKKwkJCQkJZGF0YS5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCQllbHNlCisJCQkJCWRhdGEuZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisKKwkJCQlkYXRhLmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwkJCQlkYXRhLm1heHR4cGt0ID0gMTsKKwkJCQlkYXRhLm1heHJ4cGt0ID0gMTsKKwkJCQlpZiAoKGVjbWQuc3BlZWQgIT0gZGF0YS5zcGVlZCkgfHwKKwkJCQkgICAgKGVjbWQuZHVwbGV4ICE9IGRhdGEuZHVwbGV4KSkgeworCQkJCQl1MzIgc3BlZWQ7CisJCQkJCXUzMiBkdXBsZXg7CisKKwkJCQkJaWYgKGVjbWQuc3BlZWQgPT0gU1BFRURfMTApIHsKKwkJCQkJCXNwZWVkID0gMDsKKwkJCQkJCVNMSUNfRElTUExBWQorCQkJCQkJICAgICgiJXM6IHNsaWMgRVRIVE9PTCBzZXQgXAorCQkJCQkJICAgICBsaW5rIHNwZWVkPT0xME1CIiwKKwkJCQkJCSAgICAgZGV2LT5uYW1lKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXNwZWVkID0gUENSX1NQRUVEXzEwMDsKKwkJCQkJCVNMSUNfRElTUExBWQorCQkJCQkJICAgICgiJXM6IHNsaWMgRVRIVE9PTCBzZXQgXAorCQkJCQkJICAgIGxpbmsgc3BlZWQ9PTEwME1CIiwKKwkJCQkJCSAgICAgZGV2LT5uYW1lKTsKKwkJCQkJfQorCQkJCQlpZiAoZWNtZC5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpIHsKKwkJCQkJCWR1cGxleCA9IFBDUl9EVVBMRVhfRlVMTDsKKwkJCQkJCVNMSUNfRElTUExBWQorCQkJCQkJICAgICgiOiBkdXBsZXg9PUZVTExcbiIpOworCQkJCQl9IGVsc2UgeworCQkJCQkJZHVwbGV4ID0gMDsKKwkJCQkJCVNMSUNfRElTUExBWQorCQkJCQkJICAgICgiOiBkdXBsZXg9PUhBTEZcbiIpOworCQkJCQl9CisJCQkJCXNsaWNfbGlua19jb25maWcoYWRhcHRlciwKKwkJCQkJCQkgc3BlZWQsIGR1cGxleCk7CisJCQkJCXNsaWNfbGlua19ldmVudF9oYW5kbGVyKGFkYXB0ZXIpOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisjZW5kaWYKKwlkZWZhdWx0OgorLyogICAgICAgICAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIFVOU1VQUE9SVEVEWyV4XVxuIiwgX19mdW5jX18sIGNtZCk7ICovCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CisKKyNkZWZpbmUgIFhNSVRfRkFJTF9MSU5LX1NUQVRFICAgICAgICAgICAgICAgMQorI2RlZmluZSAgWE1JVF9GQUlMX1pFUk9fTEVOR1RIICAgICAgICAgICAgICAyCisjZGVmaW5lICBYTUlUX0ZBSUxfSE9TVENNRF9GQUlMICAgICAgICAgICAgIDMKKworc3RhdGljIHZvaWQgc2xpY194bWl0X2J1aWxkX3JlcXVlc3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgIHN0cnVjdCBzbGljX2hvc3RjbWQgKmhjbWQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNsaWNfaG9zdDY0X2NtZCAqaWhjbWQ7CisJdWxvbmcgcGh5c19hZGRyOworCisJaWhjbWQgPSAmaGNtZC0+Y21kNjQ7CisKKwlpaGNtZC0+ZmxhZ3MgPSAoYWRhcHRlci0+cG9ydCA8PCBJSEZMR19JRlNIRlQpOworCWloY21kLT5jb21tYW5kID0gSUhDTURfWE1UX1JFUTsKKwlpaGNtZC0+dS5zbGljX2J1ZmZlcnMudG90bGVuID0gc2tiLT5sZW47CisJcGh5c19hZGRyID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGNpZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJUENJX0RNQV9UT0RFVklDRSk7CisJaWhjbWQtPnUuc2xpY19idWZmZXJzLmJ1ZnNbMF0ucGFkZHJsID0gU0xJQ19HRVRfQUREUl9MT1cocGh5c19hZGRyKTsKKwlpaGNtZC0+dS5zbGljX2J1ZmZlcnMuYnVmc1swXS5wYWRkcmggPSBTTElDX0dFVF9BRERSX0hJR0gocGh5c19hZGRyKTsKKwlpaGNtZC0+dS5zbGljX2J1ZmZlcnMuYnVmc1swXS5sZW5ndGggPSBza2ItPmxlbjsKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCisJaGNtZC0+Y21kc2l6ZSA9ICh1MzIpICgoKCh1NjQpJmloY21kLT51LnNsaWNfYnVmZmVycy5idWZzWzFdIC0KKwkJCQkgICAgICh1NjQpIGhjbWQpICsgMzEpID4+IDUpOworI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQorCWhjbWQtPmNtZHNpemUgPSAoKCgodTMyKSAmaWhjbWQtPnUuc2xpY19idWZmZXJzLmJ1ZnNbMV0gLQorCQkJICAgKHUzMikgaGNtZCkgKyAzMSkgPj4gNSk7CisjZWxzZQorCVN0b3AgQ29tcGlsYXRpb247CisjZW5kaWYKK30KKworI2RlZmluZSBOT1JNQUxfRVRIRlJBTUUgICAgIDAKKworc3RhdGljIGludCBzbGljX3htaXRfc3RhcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzbGljX2hvc3RjbWQgKmhjbWQgPSBOVUxMOworCXUzMiBzdGF0dXMgPSAwOworCXUzMiBza2J0eXBlID0gTk9STUFMX0VUSEZSQU1FOworCXZvaWQgKm9mZmxvYWRjbWQgPSBOVUxMOworCisJY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJQVNTRVJUKGNhcmQpOworLyoKKyAgICBEQkdfRVJST1IoInhtaXRfc3RhcnQgKCVzKSBFTlRFUiBza2JbJXBdIGxlblslZF0gbGlua3N0YXRlWyV4XSBzdGF0ZVsleF1cbiIsCisJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBza2IsIHNrYi0+bGVuLCBhZGFwdGVyLT5saW5rc3RhdGUsCisJIGFkYXB0ZXItPnN0YXRlKTsKKyovCisJaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgIT0gTElOS19VUCkgfHwKKwkgICAgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX1VQKSB8fCAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9VUCkpIHsKKwkJc3RhdHVzID0gWE1JVF9GQUlMX0xJTktfU1RBVEU7CisJCWdvdG8geG1pdF9mYWlsOworCisJfSBlbHNlIGlmIChza2ItPmxlbiA9PSAwKSB7CisJCXN0YXR1cyA9IFhNSVRfRkFJTF9aRVJPX0xFTkdUSDsKKwkJZ290byB4bWl0X2ZhaWw7CisJfQorCisJaWYgKHNrYnR5cGUgPT0gTk9STUFMX0VUSEZSQU1FKSB7CisJCWhjbWQgPSBzbGljX2NtZHFfZ2V0ZnJlZShhZGFwdGVyKTsKKwkJaWYgKCFoY21kKSB7CisJCQlhZGFwdGVyLT54bWl0cV9mdWxsID0gMTsKKwkJCXN0YXR1cyA9IFhNSVRfRkFJTF9IT1NUQ01EX0ZBSUw7CisJCQlnb3RvIHhtaXRfZmFpbDsKKwkJfQorCQlBU1NFUlQoaGNtZC0+cHNsaWNfaGFuZGxlKTsKKwkJQVNTRVJUKGhjbWQtPmNtZDY0Lmhvc3RoYW5kbGUgPT0KKwkJICAgICAgIGhjbWQtPnBzbGljX2hhbmRsZS0+dG9rZW4uaGFuZGxlX3Rva2VuKTsKKwkJaGNtZC0+c2tiID0gc2tiOworCQloY21kLT5idXN5ID0gMTsKKwkJaGNtZC0+dHlwZSA9IFNMSUNfQ01EX0RVTUI7CisJCWlmIChza2J0eXBlID09IE5PUk1BTF9FVEhGUkFNRSkKKwkJCXNsaWNfeG1pdF9idWlsZF9yZXF1ZXN0KGFkYXB0ZXIsIGhjbWQsIHNrYik7CisJfQorCWFkYXB0ZXItPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlhZGFwdGVyLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKworI2lmZGVmIERFQlVHX0RVTVAKKwlpZiAoYWRhcHRlci0+a2lsbF9jYXJkKSB7CisJCXN0cnVjdCBzbGljX2hvc3Q2NF9jbWQgaWhjbWQ7CisKKwkJaWhjbWQgPSAmaGNtZC0+Y21kNjQ7CisKKwkJaWhjbWQtPmZsYWdzIHw9IDB4NDA7CisJCWFkYXB0ZXItPmtpbGxfY2FyZCA9IDA7CS8qIG9ubHkgZG8gdGhpcyBvbmNlICovCisJfQorI2VuZGlmCisJaWYgKGhjbWQtPnBhZGRyaCA9PSAwKSB7CisJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfY2JhciwKKwkJCSAgKGhjbWQtPnBhZGRybCB8IGhjbWQtPmNtZHNpemUpLCBET05UX0ZMVVNIKTsKKwl9IGVsc2UgeworCQlXUklURV9SRUc2NChhZGFwdGVyLAorCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19jYmFyNjQsCisJCQkgICAgKGhjbWQtPnBhZGRybCB8IGhjbWQtPmNtZHNpemUpLAorCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJICAgIGhjbWQtPnBhZGRyaCwgRE9OVF9GTFVTSCk7CisJfQoreG1pdF9kb25lOgorCXJldHVybiAwOworeG1pdF9mYWlsOgorCXNsaWNfeG1pdF9mYWlsKGFkYXB0ZXIsIHNrYiwgb2ZmbG9hZGNtZCwgc2tidHlwZSwgc3RhdHVzKTsKKwlnb3RvIHhtaXRfZG9uZTsKK30KKworc3RhdGljIHZvaWQgc2xpY194bWl0X2ZhaWwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgdm9pZCAqY21kLCB1MzIgc2tidHlwZSwgdTMyIHN0YXR1cykKK3sKKwlpZiAoYWRhcHRlci0+eG1pdHFfZnVsbCkKKwkJc2xpY19pZl9zdG9wX3F1ZXVlKGFkYXB0ZXIpOworCWlmICgoY21kID09IE5VTEwpICYmIChzdGF0dXMgPD0gWE1JVF9GQUlMX0hPU1RDTURfRkFJTCkpIHsKKwkJc3dpdGNoIChzdGF0dXMpIHsKKwkJY2FzZSBYTUlUX0ZBSUxfTElOS19TVEFURToKKwkJCURCR19FUlJPUgorCQkJICAgICgiKCVzKSByZWplY3QgeG1pdCBza2JbJXA6ICV4XSBsaW5rc3RhdGVbJXNdIFwKKwkJCSAgICAgYWRhcHRlclslczolZF0gY2FyZFslczolZF1cbiIsCisJCQkgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgc2tiLCBza2ItPnBrdF90eXBlLAorCQkJICAgICBTTElDX0xJTktTVEFURShhZGFwdGVyLT5saW5rc3RhdGUpLAorCQkJICAgICBTTElDX0FEQVBURVJfU1RBVEUoYWRhcHRlci0+c3RhdGUpLCBhZGFwdGVyLT5zdGF0ZSwKKwkJCSAgICAgU0xJQ19DQVJEX1NUQVRFKGFkYXB0ZXItPmNhcmQtPnN0YXRlKSwKKwkJCSAgICAgYWRhcHRlci0+Y2FyZC0+c3RhdGUpOworCQkJYnJlYWs7CisJCWNhc2UgWE1JVF9GQUlMX1pFUk9fTEVOR1RIOgorCQkJREJHX0VSUk9SCisJCQkgICAgKCJ4bWl0X3N0YXJ0IHNrYi0+bGVuID09IDAgc2tiWyVwXSB0eXBlWyV4XSEhISEgXG4iLAorCQkJICAgICBza2IsIHNrYi0+cGt0X3R5cGUpOworCQkJYnJlYWs7CisJCWNhc2UgWE1JVF9GQUlMX0hPU1RDTURfRkFJTDoKKwkJCURCR19FUlJPUgorCQkJICAgICgieG1pdF9zdGFydCBza2JbJXBdIHR5cGVbJXhdIE5vIGhvc3QgY29tbWFuZHMgXAorCQkJICAgICBhdmFpbGFibGUgISEhISBcbiIsCisJCQkgICAgIHNrYiwgc2tiLT5wa3RfdHlwZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUFTU0VSVCgwKTsKKwkJfQorCX0KKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJYWRhcHRlci0+c3RhdHMudHhfZHJvcHBlZCsrOworfQorCitzdGF0aWMgdm9pZCBzbGljX3Jjdl9oYW5kbGVfZXJyb3Ioc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmKQoreworCXN0cnVjdCBzbGljX2hkZHJfd2RzICpoZHIgPSAoc3RydWN0IHNsaWNfaGRkcl93ZHMgKilyY3ZidWYtPmRhdGE7CisKKwlpZiAoYWRhcHRlci0+ZGV2aWQgIT0gU0xJQ18xR0JfREVWSUNFX0lEKSB7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1czE0ICYgVlJIU1RBVF84MDJPRSkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5vZmxvdzgwMisrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXMxNCAmIFZSSFNUQVRfVFBPRkxPKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwcnRvZmxvdysrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfODAyVUUpCisJCQlhZGFwdGVyLT5pZl9ldmVudHMudWZsb3c4MDIrKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX1JDVkUpIHsKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5yY3ZlYXJseSsrOworCQkJYWRhcHRlci0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJfQorCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfQlVGRikgeworCQkJYWRhcHRlci0+aWZfZXZlbnRzLkJ1Zm92Kys7CisJCQlhZGFwdGVyLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQl9CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9DQVJSRSkgeworCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNhcnJlKys7CisJCQlhZGFwdGVyLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9MT05HRSkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5Mb25nZSsrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfUFJFQSkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JbnZwKys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9DUkMpIHsKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5DcmMrKzsKKwkJCWFkYXB0ZXItPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJfQorCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfRFJCTCkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5EcmJsKys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9DT0RFKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNvZGUrKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX1RQQ1NVTSkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcENzdW0rKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX1RQSExFTikKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcEhsZW4rKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0lQQ1NVTSkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcENzdW0rKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0lQTEVSUikKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcExlbisrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfSVBIRVJSKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwSGxlbisrOworCX0gZWxzZSB7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c0dCICYgVkdCU1RBVF9YUEVSUikgeworCQkJdTMyIHhlcnIgPSBoZHItPmZyYW1lX3N0YXR1c0dCID4+IFZHQlNUQVRfWEVSUlNIRlQ7CisKKwkJCWlmICh4ZXJyID09IFZHQlNUQVRfWENTRVJSKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcENzdW0rKzsKKwkJCWlmICh4ZXJyID09IFZHQlNUQVRfWFVGTE9XKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcHJ0b2Zsb3crKzsKKwkJCWlmICh4ZXJyID09IFZHQlNUQVRfWEhMRU4pCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwSGxlbisrOworCQl9CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c0dCICYgVkdCU1RBVF9ORVRFUlIpIHsKKwkJCXUzMiBuZXJyID0KKwkJCSAgICAoaGRyLT4KKwkJCSAgICAgZnJhbWVfc3RhdHVzR0IgPj4gVkdCU1RBVF9ORVJSU0hGVCkgJgorCQkJICAgIFZHQlNUQVRfTkVSUk1TSzsKKwkJCWlmIChuZXJyID09IFZHQlNUQVRfTkNTRVJSKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcENzdW0rKzsKKwkJCWlmIChuZXJyID09IFZHQlNUQVRfTlVGTE9XKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcExlbisrOworCQkJaWYgKG5lcnIgPT0gVkdCU1RBVF9OSExFTikKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMuSXBIbGVuKys7CisJCX0KKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzR0IgJiBWR0JTVEFUX0xOS0VSUikgeworCQkJdTMyIGxlcnIgPSBoZHItPmZyYW1lX3N0YXR1c0dCICYgVkdCU1RBVF9MRVJSTVNLOworCisJCQlpZiAobGVyciA9PSBWR0JTVEFUX0xERUFSTFkpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLnJjdmVhcmx5Kys7CisJCQlpZiAobGVyciA9PSBWR0JTVEFUX0xCT0ZMTykKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMuQnVmb3YrKzsKKwkJCWlmIChsZXJyID09IFZHQlNUQVRfTENPREVSUikKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ29kZSsrOworCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MREJMTkJMKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5EcmJsKys7CisJCQlpZiAobGVyciA9PSBWR0JTVEFUX0xDUkNFUlIpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNyYysrOworCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MT0ZMTykKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMub2Zsb3c4MDIrKzsKKwkJCWlmIChsZXJyID09IFZHQlNUQVRfTFVGTE8pCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLnVmbG93ODAyKys7CisJCX0KKwl9CisJcmV0dXJuOworfQorCisjZGVmaW5lIFRDUF9PRkZMT0FEX0ZSQU1FX1BVU0hGTEFHICAweDEwMDAwMDAwCisjZGVmaW5lIE1fRkFTVF9QQVRIICAgICAgICAgICAgICAgICAweDAwNDAKKworc3RhdGljIHZvaWQgc2xpY19yY3ZfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmOworCXUzMiBmcmFtZXMgPSAwOworCisJd2hpbGUgKChza2IgPSBzbGljX3JjdnF1ZXVlX2dldG5leHQoYWRhcHRlcikpKSB7CisJCXUzMiByeF9ieXRlczsKKworCQlBU1NFUlQoc2tiLT5oZWFkKTsKKwkJcmN2YnVmID0gKHN0cnVjdCBzbGljX3JjdmJ1ZiAqKXNrYi0+aGVhZDsKKwkJYWRhcHRlci0+Y2FyZC0+ZXZlbnRzKys7CisJCWlmIChyY3ZidWYtPnN0YXR1cyAmIElSSEREUl9FUlIpIHsKKwkJCWFkYXB0ZXItPnJ4X2Vycm9ycysrOworCQkJc2xpY19yY3ZfaGFuZGxlX2Vycm9yKGFkYXB0ZXIsIHJjdmJ1Zik7CisJCQlzbGljX3JjdnF1ZXVlX3JlaW5zZXJ0KGFkYXB0ZXIsIHNrYik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghc2xpY19tYWNfZmlsdGVyKGFkYXB0ZXIsIChzdHJ1Y3QgZXRoZXJfaGVhZGVyICopCisJCQkJCXJjdmJ1Zi0+ZGF0YSkpIHsKKyNpZiAwCisJCQlEQkdfTVNHCisJCQkgICAgKCJzbGljb3NzOiAlcyAoJXMpIGRyb3AgZnJhbWUgZHVlIHRvIG1hYyBmaWx0ZXJcbiIsCisJCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworI2VuZGlmCisJCQlzbGljX3JjdnF1ZXVlX3JlaW5zZXJ0KGFkYXB0ZXIsIHNrYik7CisJCQljb250aW51ZTsKKwkJfQorCQlza2JfcHVsbChza2IsIFNMSUNfUkNWQlVGX0hFQURTSVpFKTsKKwkJcnhfYnl0ZXMgPSAocmN2YnVmLT5sZW5ndGggJiBJUkhERFJfRkxFTl9NU0spOworCQlza2JfcHV0KHNrYiwgcnhfYnl0ZXMpOworCQlhZGFwdGVyLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWFkYXB0ZXItPnN0YXRzLnJ4X2J5dGVzICs9IHJ4X2J5dGVzOworI2lmIFNMSUNfT0ZGTE9BRF9JUF9DSEVDS1NVTQorCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworI2VuZGlmCisKKwkJc2tiLT5kZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHNrYi0+ZGV2KTsKKwkJbmV0aWZfcngoc2tiKTsKKworCQkrK2ZyYW1lczsKKyNpZiBTTElDX0lOVEVSUlVQVF9QUk9DRVNTX0xJTUlUCisJCWlmIChmcmFtZXMgPj0gU0xJQ19SQ1ZRX01BWF9QUk9DRVNTX0lTUikgeworCQkJYWRhcHRlci0+cmN2X2ludGVycnVwdF95aWVsZHMrKzsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKwl9CisJYWRhcHRlci0+bWF4X2lzcl9yY3ZzID0gbWF4KGFkYXB0ZXItPm1heF9pc3JfcmN2cywgZnJhbWVzKTsKK30KKworc3RhdGljIHZvaWQgc2xpY194bWl0X2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljX2hvc3RjbWQgKmhjbWQ7CisJc3RydWN0IHNsaWNfcnNwYnVmICpyc3BidWY7CisJdTMyIGZyYW1lcyA9IDA7CisJc3RydWN0IHNsaWNfaGFuZGxlX3dvcmQgc2xpY19oYW5kbGVfd29yZDsKKworCWRvIHsKKwkJcnNwYnVmID0gc2xpY19yc3BxdWV1ZV9nZXRuZXh0KGFkYXB0ZXIpOworCQlpZiAoIXJzcGJ1ZikKKwkJCWJyZWFrOworCQlhZGFwdGVyLT54bWl0X2NvbXBsZXRlcysrOworCQlhZGFwdGVyLT5jYXJkLT5ldmVudHMrKzsKKwkJLyoKKwkJIEdldCB0aGUgY29tcGxldGUgaG9zdCBjb21tYW5kIGJ1ZmZlcgorCQkqLworCQlzbGljX2hhbmRsZV93b3JkLmhhbmRsZV90b2tlbiA9IHJzcGJ1Zi0+aG9zdGhhbmRsZTsKKwkJQVNTRVJUKHNsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX2luZGV4KTsKKwkJQVNTRVJUKHNsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX2luZGV4IDw9IFNMSUNfQ01EUV9NQVhDTURTKTsKKwkJaGNtZCA9CisJCSAgICAoc3RydWN0IHNsaWNfaG9zdGNtZCAqKQorCQkJYWRhcHRlci0+c2xpY19oYW5kbGVzW3NsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX2luZGV4XS4KKwkJCQkJCQkJCWFkZHJlc3M7CisvKiAgICAgIGhjbWQgPSAoc3RydWN0IHNsaWNfaG9zdGNtZCAqKSByc3BidWYtPmhvc3RoYW5kbGU7ICovCisJCUFTU0VSVChoY21kKTsKKwkJQVNTRVJUKGhjbWQtPnBzbGljX2hhbmRsZSA9PQorCQkgICAgICAgJmFkYXB0ZXItPnNsaWNfaGFuZGxlc1tzbGljX2hhbmRsZV93b3JkLmhhbmRsZV9pbmRleF0pOworLyoKKyAgICAgIERCR19FUlJPUigieG1pdF9jb21wbGV0ZSAoJXMpICAgaGNtZFslcF0gIGhvc3RoYW5kbGVbJXhdXG4iLAorCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGhjbWQsIGhjbWQtPmNtZDY0Lmhvc3RoYW5kbGUpOworICAgICAgREJHX0VSUk9SKCIgICAgc2tiWyVwXSBsZW4gJWQgIGhjbWR0eXBlWyV4XVxuIiwgaGNtZC0+c2tiLAorCQloY21kLT5za2ItPmxlbiwgaGNtZC0+dHlwZSk7CisqLworCQlpZiAoaGNtZC0+dHlwZSA9PSBTTElDX0NNRF9EVU1CKSB7CisJCQlpZiAoaGNtZC0+c2tiKQorCQkJCWRldl9rZnJlZV9za2JfaXJxKGhjbWQtPnNrYik7CisJCQlzbGljX2NtZHFfcHV0ZG9uZV9pcnEoYWRhcHRlciwgaGNtZCk7CisJCX0KKwkJcnNwYnVmLT5zdGF0dXMgPSAwOworCQlyc3BidWYtPmhvc3RoYW5kbGUgPSAwOworCQlmcmFtZXMrKzsKKwl9IHdoaWxlICgxKTsKKwlhZGFwdGVyLT5tYXhfaXNyX3htaXRzID0gbWF4KGFkYXB0ZXItPm1heF9pc3JfeG1pdHMsIGZyYW1lcyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzbGljX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CisJdTMyIGlzcjsKKworCWlmICgoYWRhcHRlci0+cHNobWVtKSAmJiAoYWRhcHRlci0+cHNobWVtLT5pc3IpKSB7CisJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX01BU0ssIEZMVVNIKTsKKwkJaXNyID0gYWRhcHRlci0+aXNyY29weSA9IGFkYXB0ZXItPnBzaG1lbS0+aXNyOworCQlhZGFwdGVyLT5wc2htZW0tPmlzciA9IDA7CisJCWFkYXB0ZXItPm51bV9pc3JzKys7CisJCXN3aXRjaCAoYWRhcHRlci0+Y2FyZC0+c3RhdGUpIHsKKwkJY2FzZSBDQVJEX1VQOgorCQkJaWYgKGlzciAmIH5JU1JfSU8pIHsKKwkJCQlpZiAoaXNyICYgSVNSX0VSUikgeworCQkJCQlhZGFwdGVyLT5lcnJvcl9pbnRlcnJ1cHRzKys7CisJCQkJCWlmIChpc3IgJiBJU1JfUk1JU1MpIHsKKwkJCQkJCWludCBjb3VudDsKKwkJCQkJCWludCBwcmVfY291bnQ7CisJCQkJCQlpbnQgZXJyb3JzOworCisJCQkJCQlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9CisJCQkJCQkgICAgJmFkYXB0ZXItPnJjdnF1ZXVlOworCisJCQkJCQlhZGFwdGVyLT4KKwkJCQkJCSAgICBlcnJvcl9ybWlzc19pbnRlcnJ1cHRzKys7CisJCQkJCQlpZiAoIXJjdnEtPmVycm9ycykKKwkJCQkJCQlyY3ZfY291bnQgPSByY3ZxLT5jb3VudDsKKwkJCQkJCXByZV9jb3VudCA9IHJjdnEtPmNvdW50OworCQkJCQkJZXJyb3JzID0gcmN2cS0+ZXJyb3JzOworCisJCQkJCQl3aGlsZSAocmN2cS0+Y291bnQgPAorCQkJCQkJICAgICAgIFNMSUNfUkNWUV9GSUxMVEhSRVNIKSB7CisJCQkJCQkJY291bnQgPQorCQkJCQkJCSAgICBzbGljX3JjdnF1ZXVlX2ZpbGwKKwkJCQkJCQkgICAgKGFkYXB0ZXIpOworCQkJCQkJCWlmICghY291bnQpCisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJREJHX01TRworCQkJCQkJICAgICgiKCVzKTogWyV4XSBJU1JfUk1JU1MgXAorCQkJCQkJICAgICBpbml0aWFsWyV4XSBwcmVbJXhdIFwKKwkJCQkJCSAgICAgZXJyb3JzWyV4XSBcCisJCQkJCQkgICAgIHBvc3RfY291bnRbJXhdXG4iLAorCQkJCQkJICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkJCQkgICAgIGlzciwgcmN2X2NvdW50LCBwcmVfY291bnQsCisJCQkJCQkgICAgIGVycm9ycywgcmN2cS0+Y291bnQpOworCQkJCQl9IGVsc2UgaWYgKGlzciAmIElTUl9YRFJPUCkgeworCQkJCQkJREJHX0VSUk9SCisJCQkJCQkgICAgKCJpc3IgJiBJU1JfRVJSIFsleF0gXAorCQkJCQkJICAgICBJU1JfWERST1AgXG4iLAorCQkJCQkJICAgICBpc3IpOworCQkJCQl9IGVsc2UgeworCQkJCQkJREJHX0VSUk9SCisJCQkJCQkgICAgKCJpc3IgJiBJU1JfRVJSIFsleF1cbiIsCisJCQkJCQkgICAgIGlzcik7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoaXNyICYgSVNSX0xFVkVOVCkgeworCQkJCQkvKkRCR19NU0coIiVzICglcykgIElTUl9MRVZFTlQgXG4iLAorCQkJCQkgICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsqLworCQkJCQlhZGFwdGVyLT5saW5rZXZlbnRfaW50ZXJydXB0cysrOworCQkJCQlzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihhZGFwdGVyKTsKKwkJCQl9CisKKwkJCQlpZiAoKGlzciAmIElTUl9VUEMpIHx8CisJCQkJICAgIChpc3IgJiBJU1JfVVBDRVJSKSB8fCAoaXNyICYgSVNSX1VQQ0JTWSkpIHsKKwkJCQkJYWRhcHRlci0+dXByX2ludGVycnVwdHMrKzsKKwkJCQkJc2xpY191cHJfcmVxdWVzdF9jb21wbGV0ZShhZGFwdGVyLCBpc3IpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGlzciAmIElTUl9SQ1YpIHsKKwkJCQlhZGFwdGVyLT5yY3ZfaW50ZXJydXB0cysrOworCQkJCXNsaWNfcmN2X2hhbmRsZXIoYWRhcHRlcik7CisJCQl9CisKKwkJCWlmIChpc3IgJiBJU1JfQ01EKSB7CisJCQkJYWRhcHRlci0+eG1pdF9pbnRlcnJ1cHRzKys7CisJCQkJc2xpY194bWl0X2NvbXBsZXRlKGFkYXB0ZXIpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBDQVJEX0RPV046CisJCQlpZiAoKGlzciAmIElTUl9VUEMpIHx8CisJCQkgICAgKGlzciAmIElTUl9VUENFUlIpIHx8IChpc3IgJiBJU1JfVVBDQlNZKSkgeworCQkJCWFkYXB0ZXItPnVwcl9pbnRlcnJ1cHRzKys7CisJCQkJc2xpY191cHJfcmVxdWVzdF9jb21wbGV0ZShhZGFwdGVyLCBpc3IpOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJYWRhcHRlci0+aXNyY29weSA9IDA7CisJCWFkYXB0ZXItPmFsbF9yZWdfd3JpdGVzICs9IDI7CisJCWFkYXB0ZXItPmlzcl9yZWdfd3JpdGVzKys7CisJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaXNyLCAwLCBGTFVTSCk7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+ZmFsc2VfaW50ZXJydXB0cysrOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBzbGljX2xpbmtfZXZlbnRfaGFuZGxlciAtCisgKgorICogSW5pdGlhdGUgYSBsaW5rIGNvbmZpZ3VyYXRpb24gc2VxdWVuY2UuICBUaGUgbGluayBjb25maWd1cmF0aW9uIGJlZ2lucworICogYnkgaXNzdWluZyBhIFJFQURfTElOS19TVEFUVVMgY29tbWFuZCB0byB0aGUgVXRpbGl0eSBQcm9jZXNzb3Igb24gdGhlCisgKiBTTElDLiAgU2luY2UgdGhlIGNvbW1hbmQgZmluaXNoZXMgYXN5bmNocm9ub3VzbHksIHRoZSBzbGljX3Vwcl9jb21sZXRlCisgKiByb3V0aW5lIHdpbGwgZm9sbG93IGl0IHVwIHdpdGhhIFVQIGNvbmZpZ3VyYXRpb24gd3JpdGUgY29tbWFuZCwgd2hpY2gKKyAqIHdpbGwgYWxzbyBjb21wbGV0ZSBhc3luY2hyb25vdXNseS4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHNsaWNfbGlua19ldmVudF9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWludCBzdGF0dXM7CisJc3RydWN0IHNsaWNfc2htZW0gKnBzaG1lbTsKKworCWlmIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9VUCkgeworCQkvKiBBZGFwdGVyIGlzIG5vdCBvcGVyYXRpb25hbC4gIElnbm9yZS4gICovCisJCXJldHVybjsKKwl9CisKKwlwc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKilhZGFwdGVyLT5waHlzX3NobWVtOworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorLyoKKyAgICBEQkdfTVNHKCJzbGljX2V2ZW50X2hhbmRsZXIgIHBzaG1lbS0+bGlua3N0YXR1c1sleF0gIHBzaG1lbVslcF1cbiAgIFwKKwkmbGlua3N0YXR1c1slcF0gJmlzclslcF1cbiIsIGFkYXB0ZXItPnBzaG1lbS0+bGlua3N0YXR1cywgcHNobWVtLAorCSZwc2htZW0tPmxpbmtzdGF0dXMsICZwc2htZW0tPmlzcik7CisqLworCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKKwkJCQkgIFNMSUNfVVBSX1JMU1IsCisJCQkJICBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5saW5rc3RhdHVzKSwKKwkJCQkgIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5saW5rc3RhdHVzKSwKKwkJCQkgIDAsIDApOworI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQorCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwgU0xJQ19VUFJfUkxTUiwKKwkJKHUzMikgJnBzaG1lbS0+bGlua3N0YXR1cywJLyogbm8gNEdCIHdyYXAgZ3VhcmFudGVlZCAqLworCQkJCSAgMCwgMCwgMCk7CisjZWxzZQorCVN0b3AgY29tcGlsYXRpb247CisjZW5kaWYKKwlBU1NFUlQoKHN0YXR1cyA9PSBTVEFUVVNfU1VDQ0VTUykgfHwgKHN0YXR1cyA9PSBTVEFUVVNfUEVORElORykpOworfQorCitzdGF0aWMgdm9pZCBzbGljX2luaXRfY2xlYW51cChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBhZGFwdGVyWyVwXSAiLCBfX2Z1bmNfXywgYWRhcHRlcik7CisJaWYgKGFkYXB0ZXItPmludHJyZWdpc3RlcmVkKSB7CisJCURCR19NU0coIkZSRUVfSVJRICIpOworCQlhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCA9IDA7CisJCWZyZWVfaXJxKGFkYXB0ZXItPm5ldGRldi0+aXJxLCBhZGFwdGVyLT5uZXRkZXYpOworCisJfQorCWlmIChhZGFwdGVyLT5wc2htZW0pIHsKKwkJREJHX01TRygiRlJFRV9TSE1FTSAiKTsKKwkJREJHX01TRygiYWRhcHRlclslcF0gcG9ydCAlZCBwc2htZW1bJXBdIEZyZWVTaG1lbSAiLAorCQkJYWRhcHRlciwgYWRhcHRlci0+cG9ydCwgKHZvaWQgKikgYWRhcHRlci0+cHNobWVtKTsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2xpY19zaG1lbSAqKSwKKwkJCQkgICAgYWRhcHRlci0+cHNobWVtLCBhZGFwdGVyLT5waHlzX3NobWVtKTsKKwkJYWRhcHRlci0+cHNobWVtID0gTlVMTDsKKwkJYWRhcHRlci0+cGh5c19zaG1lbSA9IChkbWFfYWRkcl90KSBOVUxMOworCX0KKyNpZiBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECisJaWYgKGFkYXB0ZXItPnN0YXRzdGltZXJzZXQpIHsKKwkJREJHX01TRygic3RhdHN0aW1lciAiKTsKKwkJYWRhcHRlci0+c3RhdHN0aW1lcnNldCA9IDA7CisJCWRlbF90aW1lcigmYWRhcHRlci0+c3RhdHN0aW1lcik7CisJfQorI2VuZGlmCisjaWYgIVNMSUNfRFVNUF9FTkFCTEVEICYmIFNMSUNfUElOR19USU1FUl9FTkFCTEVECisvKiNpZiBTTElDX0RVTVBfRU5BQkxFRCAmJiBTTElDX1BJTkdfVElNRVJfRU5BQkxFRCovCisJaWYgKGFkYXB0ZXItPnBpbmd0aW1lcnNldCkgeworCQlEQkdfTVNHKCJwaW5ndGltZXIgIik7CisJCWFkYXB0ZXItPnBpbmd0aW1lcnNldCA9IDA7CisJCWRlbF90aW1lcigmYWRhcHRlci0+cGluZ3RpbWVyKTsKKwl9CisjZW5kaWYKKwlzbGljX3JzcHF1ZXVlX2ZyZWUoYWRhcHRlcik7CisJc2xpY19jbWRxX2ZyZWUoYWRhcHRlcik7CisJc2xpY19yY3ZxdWV1ZV9mcmVlKGFkYXB0ZXIpOworCisJREJHX01TRygiXG4iKTsKK30KKworI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2xpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOworCisJQVNTRVJUKGFkYXB0ZXIpOworCXN0YXRzID0gJmFkYXB0ZXItPnN0YXRzOworCXN0YXRzLT5jb2xsaXNpb25zID0gYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS54bWl0X2NvbGxpc2lvbnM7CisJc3RhdHMtPnJ4X2Vycm9ycyA9IGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UucmN2X2Vycm9yczsKKwlzdGF0cy0+dHhfZXJyb3JzID0gYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS54bXRfZXJyb3JzOworCXN0YXRzLT5yeF9taXNzZWRfZXJyb3JzID0gYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS5yY3ZfZGlzY2FyZHM7CisJc3RhdHMtPnR4X2hlYXJ0YmVhdF9lcnJvcnMgPSAwOworCXN0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyA9IDA7CisJc3RhdHMtPnR4X3dpbmRvd19lcnJvcnMgPSAwOworCXN0YXRzLT50eF9maWZvX2Vycm9ycyA9IDA7CisJc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyA9IDA7CisJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgPSAwOworCXJldHVybiAmYWRhcHRlci0+c3RhdHM7Cit9CisjZW5kaWYKKworLyoKKyAqICBBbGxvY2F0ZSBhIG1jYXN0X2FkZHJlc3Mgc3RydWN0dXJlIHRvIGhvbGQgdGhlIG11bHRpY2FzdCBhZGRyZXNzLgorICogIExpbmsgaXQgaW4uCisgKi8KK3N0YXRpYyBpbnQgc2xpY19tY2FzdF9hZGRfbGlzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgY2hhciAqYWRkcmVzcykKK3sKKwlzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAqbWNhZGRyLCAqbWxpc3Q7CisJYm9vbCBlcXVhbGFkZHI7CisKKwkvKiBDaGVjayB0byBzZWUgaWYgaXQgYWxyZWFkeSBleGlzdHMgKi8KKwltbGlzdCA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7CisJd2hpbGUgKG1saXN0KSB7CisJCUVUSEVSX0VRX0FERFIobWxpc3QtPmFkZHJlc3MsIGFkZHJlc3MsIGVxdWFsYWRkcik7CisJCWlmIChlcXVhbGFkZHIpCisJCQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CisJCW1saXN0ID0gbWxpc3QtPm5leHQ7CisJfQorCisJLyogRG9lc24ndCBhbHJlYWR5IGV4aXN0LiAgQWxsb2NhdGUgYSBzdHJ1Y3R1cmUgdG8gaG9sZCBpdCAqLworCW1jYWRkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtY2FzdF9hZGRyZXNzKSwgR0ZQX0FUT01JQyk7CisJaWYgKG1jYWRkciA9PSBOVUxMKQorCQlyZXR1cm4gMTsKKworCW1lbWNweShtY2FkZHItPmFkZHJlc3MsIGFkZHJlc3MsIDYpOworCisJbWNhZGRyLT5uZXh0ID0gYWRhcHRlci0+bWNhc3RhZGRyczsKKwlhZGFwdGVyLT5tY2FzdGFkZHJzID0gbWNhZGRyOworCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCisvKgorICogRnVuY3Rpb25zIHRvIG9idGFpbiB0aGUgQ1JDIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzLgorICogVGhpcyBpcyBhIHN0YW5kYXJkIGV0aGVybmV0IENSQyBpbiB0aGF0IGl0IGlzIGEgMzItYml0LCByZWZsZWN0ZWQgQ1JDIHVzaW5nCisgKiB0aGUgcG9seW5vbWlhbDoKKyAqICAgeF4zMiArIHheMjYgKyB4XjIzICsgeF4yMiArIHheMTYgKyB4XjEyICsgeF4xMSArIHheMTAgKyB4XjggKyB4XjcgKyB4XjUgKworICogICB4XjQgKyB4XjIgKyB4XjEuCisgKgorICogQWZ0ZXIgdGhlIENSQyBmb3IgdGhlIDYgYnl0ZXMgaXMgZ2VuZXJhdGVkIChidXQgYmVmb3JlIHRoZSB2YWx1ZSBpcworICogY29tcGxlbWVudGVkKSwKKyAqIHdlIG11c3QgdGhlbiB0cmFuc3Bvc2UgdGhlIHZhbHVlIGFuZCByZXR1cm4gYml0cyAzMC0yMy4KKyAqCisgKi8KK3N0YXRpYyB1MzIgc2xpY19jcmNfdGFibGVbMjU2XTsJLyogVGFibGUgb2YgQ1JDcyBmb3IgYWxsIHBvc3NpYmxlIGJ5dGUgdmFsdWVzICovCitzdGF0aWMgdTMyIHNsaWNfY3JjX2luaXQ7CS8qIElzIHRhYmxlIGluaXRpYWxpemVkICovCisKKy8qCisgKiAgQ29udHJ1Y3QgdGhlIENSQzMyIHRhYmxlCisgKi8KK3N0YXRpYyB2b2lkIHNsaWNfbWNhc3RfaW5pdF9jcmMzMih2b2lkKQoreworCXUzMiBjOwkJLyogIENSQyBzaGl0IHJlZyAgICAgICAgICAgICAgICAgKi8KKwl1MzIgZSA9IDA7CQkvKiAgUG9seSBYLW9yIHBhdHRlcm4gICAgICAgICAgICAqLworCWludCBpOwkJCS8qICBjb3VudGVyICAgICAgICAgICAgICAgICAgICAgICovCisJaW50IGs7CQkJLyogIGJ5dGUgYmVpbmcgc2hpZnRlZCBpbnRvIGNyYyAgKi8KKworCXN0YXRpYyBpbnQgcFtdID0geyAwLCAxLCAyLCA0LCA1LCA3LCA4LCAxMCwgMTEsIDEyLCAxNiwgMjIsIDIzLCAyNiB9OworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihwKSAvIHNpemVvZihpbnQpOyBpKyspCisJCWUgfD0gMUwgPDwgKDMxIC0gcFtpXSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgMjU2OyBpKyspIHsKKwkJYyA9IGk7CisJCWZvciAoayA9IDg7IGs7IGstLSkKKwkJCWMgPSBjICYgMSA/IChjID4+IDEpIF4gZSA6IGMgPj4gMTsKKwkJc2xpY19jcmNfdGFibGVbaV0gPSBjOworCX0KK30KKworLyoKKyAqICBSZXR1cm4gdGhlIE1BQyBoYXN0IGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2xpY19tY2FzdF9nZXRfbWFjX2hhc2goY2hhciAqbWFjYWRkcikKK3sKKwl1MzIgY3JjOworCWNoYXIgKnA7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBtYWNoYXNoID0gMDsKKworCWlmICghc2xpY19jcmNfaW5pdCkgeworCQlzbGljX21jYXN0X2luaXRfY3JjMzIoKTsKKwkJc2xpY19jcmNfaW5pdCA9IDE7CisJfQorCisJY3JjID0gMHhGRkZGRkZGRjsJLyogUHJlbG9hZCBzaGlmdCByZWdpc3RlciwgcGVyIGNyYy0zMiBzcGVjICovCisJZm9yIChpID0gMCwgcCA9IG1hY2FkZHI7IGkgPCA2OyArK3AsICsraSkKKwkJY3JjID0gKGNyYyA+PiA4KSBeIHNsaWNfY3JjX3RhYmxlWyhjcmMgXiAqcCkgJiAweEZGXTsKKworCS8qIFJldHVybiBiaXRzIDEtOCwgdHJhbnNwb3NlZCAqLworCWZvciAoaSA9IDE7IGkgPCA5OyBpKyspCisJCW1hY2hhc2ggfD0gKCgoY3JjID4+IGkpICYgMSkgPDwgKDggLSBpKSk7CisKKwlyZXR1cm4gbWFjaGFzaDsKK30KKworc3RhdGljIHZvaWQgc2xpY19tY2FzdF9zZXRfYml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBjaGFyICphZGRyZXNzKQoreworCXVuc2lnbmVkIGNoYXIgY3JjcG9seTsKKworCS8qIEdldCB0aGUgQ1JDIHBvbHlub21pYWwgZm9yIHRoZSBtYWMgYWRkcmVzcyAqLworCWNyY3BvbHkgPSBzbGljX21jYXN0X2dldF9tYWNfaGFzaChhZGRyZXNzKTsKKworCS8qIFdlIG9ubHkgaGF2ZSBzcGFjZSBvbiB0aGUgU0xJQyBmb3IgNjQgZW50cmllcy4gIExvcAorCSAqIG9mZiB0aGUgdG9wIHR3byBiaXRzLiAoMl42ID0gNjQpCisJICovCisJY3JjcG9seSAmPSAweDNGOworCisJLyogT1IgaW4gdGhlIG5ldyBiaXQgaW50byBvdXIgNjQgYml0IG1hc2suICovCisJYWRhcHRlci0+bWNhc3RtYXNrIHw9ICh1NjQpIDEgPDwgY3JjcG9seTsKK30KKworc3RhdGljIHZvaWQgc2xpY19tY2FzdF9zZXRfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisJaW50IGk7CisJY2hhciAqYWRkcmVzc2VzOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCA9IGRldi0+bWNfbGlzdDsKKwlpbnQgbWNfY291bnQgPSBkZXYtPm1jX2NvdW50OworCisJQVNTRVJUKGFkYXB0ZXIpOworCisJZm9yIChpID0gMTsgaSA8PSBtY19jb3VudDsgaSsrKSB7CisJCWFkZHJlc3NlcyA9IChjaGFyICopICZtY19saXN0LT5kbWlfYWRkcjsKKwkJaWYgKG1jX2xpc3QtPmRtaV9hZGRybGVuID09IDYpIHsKKwkJCXN0YXR1cyA9IHNsaWNfbWNhc3RfYWRkX2xpc3QoYWRhcHRlciwgYWRkcmVzc2VzKTsKKwkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJc2xpY19tY2FzdF9zZXRfYml0KGFkYXB0ZXIsIGFkZHJlc3Nlcyk7CisJCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OworCX0KKworCURCR19NU0coIiVzIGEtPmRldmZsYWdzX3ByZXZbJXhdIGRldi0+ZmxhZ3NbJXhdIHN0YXR1c1sleF1cbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLT5kZXZmbGFnc19wcmV2LCBkZXYtPmZsYWdzLCBzdGF0dXMpOworCWlmIChhZGFwdGVyLT5kZXZmbGFnc19wcmV2ICE9IGRldi0+ZmxhZ3MpIHsKKwkJYWRhcHRlci0+bWFjb3B0cyA9IE1BQ19ESVJFQ1RFRDsKKwkJaWYgKGRldi0+ZmxhZ3MpIHsKKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19CQ0FTVDsKKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfUFJPTUlTQzsKKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQorCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0FMTE1DQVNUOworCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKQorCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX01DQVNUOworCQl9CisJCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOworCQlEQkdfTVNHKCIlcyBjYWxsIHNsaWNfY29uZmlnX3NldCBhZGFwdGVyLT5tYWNvcHRzWyV4XVxuIiwKKwkJCV9fZnVuY19fLCBhZGFwdGVyLT5tYWNvcHRzKTsKKwkJc2xpY19jb25maWdfc2V0KGFkYXB0ZXIsIFRSVUUpOworCX0gZWxzZSB7CisJCWlmIChzdGF0dXMgPT0gU1RBVFVTX1NVQ0NFU1MpCisJCQlzbGljX21jYXN0X3NldF9tYXNrKGFkYXB0ZXIpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfbWNhc3Rfc2V0X21hc2soc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisKKwlEQkdfTVNHKCIlcyBFTlRFUiAoJXMpIG1hY29wdHNbJXhdIG1hc2tbJWxseF1cbiIsIF9fZnVuY19fLAorCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsICh1aW50KSBhZGFwdGVyLT5tYWNvcHRzLAorCQlhZGFwdGVyLT5tY2FzdG1hc2spOworCisJaWYgKGFkYXB0ZXItPm1hY29wdHMgJiAoTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0MpKSB7CisJCS8qIFR1cm4gb24gYWxsIG11bHRpY2FzdCBhZGRyZXNzZXMuIFdlIGhhdmUgdG8gZG8gdGhpcyBmb3IKKwkJICogcHJvbWlzY3VvdXMgbW9kZSBhcyB3ZWxsIGFzIEFMTE1DQVNUIG1vZGUuICBJdCBzYXZlcyB0aGUKKwkJICogTWljcm9jb2RlIGZyb20gaGF2aW5nIHRvIGtlZXAgc3RhdGUgYWJvdXQgdGhlIE1BQworCQkgKiBjb25maWd1cmF0aW9uLgorCQkgKi8KKy8qICAgICAgICAgICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBtYWNvcHRzID0gTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0NcblwKKwkJU0xVVCBNT0RFISEhXG4iLF9fZnVuY19fKTsgKi8KKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19tY2FzdGxvdywgMHhGRkZGRkZGRiwgRkxVU0gpOworCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX21jYXN0aGlnaCwgMHhGRkZGRkZGRiwgRkxVU0gpOworLyogICAgICAgIERCR19NU0coIiVzICglcykgV1JJVEUgdG8gc2xpY19yZWdzIHNsaWNfbWNhc3Rsb3cmaGlnaCAweEZGRkZGRkZGXG4iLAorCQlfZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOyAqLworCX0gZWxzZSB7CisJCS8qIENvbW1pdCBvdXIgbXVsdGljYXN0IG1hc3QgdG8gdGhlIFNMSUMgYnkgd3JpdGluZyB0byB0aGUKKwkJICogbXVsdGljYXN0IGFkZHJlc3MgbWFzayByZWdpc3RlcnMKKwkJICovCisJCURCR19NU0coIiVzICglcykgV1JJVEUgbWNhc3Rsb3dbJXhdIG1jYXN0aGlnaFsleF1cbiIsCisJCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJKCh1bG9uZykgKGFkYXB0ZXItPm1jYXN0bWFzayAmIDB4RkZGRkZGRkYpKSwKKwkJCSgodWxvbmcpICgoYWRhcHRlci0+bWNhc3RtYXNrID4+IDMyKSAmIDB4RkZGRkZGRkYpKSk7CisKKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19tY2FzdGxvdywKKwkJCSAgKHUzMikgKGFkYXB0ZXItPm1jYXN0bWFzayAmIDB4RkZGRkZGRkYpLCBGTFVTSCk7CisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfbWNhc3RoaWdoLAorCQkJICAodTMyKSAoKGFkYXB0ZXItPm1jYXN0bWFzayA+PiAzMikgJiAweEZGRkZGRkZGKSwKKwkJCSAgRkxVU0gpOworCX0KK30KKworc3RhdGljIHZvaWQgc2xpY190aW1lcl9waW5nKHVsb25nIGRldikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7CisKKwlBU1NFUlQoZGV2KTsKKwlhZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopKChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXYpLT5wcml2OworCUFTU0VSVChhZGFwdGVyKTsKKwljYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlBU1NFUlQoY2FyZCk7CisjaWYgIVNMSUNfRFVNUF9FTkFCTEVECisvKiNpZiBTTElDX0RVTVBfRU5BQkxFRCovCisJaWYgKChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9VUCkgJiYgKGNhcmQtPnN0YXRlID09IENBUkRfVVApKSB7CisJCWludCBzdGF0dXM7CisKKwkJaWYgKGNhcmQtPnBpbmdzdGF0dXMgIT0gSVNSX1BJTkdNQVNLKSB7CisJCQlpZiAoZXJyb3Jtc2crKyA8IDUpIHsKKwkJCQlEQkdfTVNHCisJCQkJICAgICgiJXMgKCVzKSBDQVJEIEhBUyBDUkFTSEVEICBQSU5HX3N0YXR1cyA9PSBcCisJCQkJICAgICAleCBFUlJPUk1TRyMgJWRcbiIsCisJCQkJICAgICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJCSAgICAgY2FyZC0+cGluZ3N0YXR1cywgZXJyb3Jtc2cpOworCQkJfQorCQkJLyogICBBU1NFUlQoY2FyZC0+cGluZ3N0YXR1cyA9PSBJU1JfUElOR01BU0spOyAqLworCQl9IGVsc2UgeworCQkJaWYgKGdvb2Rtc2crKyA8IDUpIHsKKwkJCQlEQkdfTVNHCisJCQkJICAgICgic2xpY29zczogJXMgKCVzKSBQSU5HX3N0YXR1cyA9PSAleCBcCisJCQkJICAgICBHT09EISEhISEhISEgbXNnIyAlZFxuIiwKKwkJCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkJICAgICBjYXJkLT5waW5nc3RhdHVzLCBlcnJvcm1zZyk7CisJCQl9CisJCX0KKwkJY2FyZC0+cGluZ3N0YXR1cyA9IDA7CisJCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwgU0xJQ19VUFJfUElORywgMCwgMCwgMCwgMCk7CisKKwkJQVNTRVJUKHN0YXR1cyA9PSAwKTsKKwl9IGVsc2UgeworCQlEQkdfTVNHKCJzbGljb3NzICVzICglcykgYWRhcHRlclslcF0gTk9UIFVQISEhIVxuIiwKKwkJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIpOworCX0KKyNlbmRpZgorCWFkYXB0ZXItPnBpbmd0aW1lci5leHBpcmVzID0KKwkgICAgamlmZmllcyArIFNMSUNfU0VDU19UT19KSUZGUyhQSU5HX1RJTUVSX0lOVEVSVkFMKTsKKwlhZGRfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfaWZfc3RvcF9xdWV1ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfaWZfc3RhcnRfcXVldWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbmV0aWZfc3RhcnRfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKK30KKworLyoKKyAqICBzbGljX2lmX2luaXQKKyAqCisgKiAgUGVyZm9ybSBpbml0aWFsaXphdGlvbiBvZiBvdXIgc2xpYyBpbnRlcmZhY2UuCisgKgorICovCitzdGF0aWMgaW50IHNsaWNfaWZfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisJc3RydWN0IHNsaWNfc2htZW0gKnBzaG1lbTsKKwlpbnQgc3RhdHVzID0gMDsKKworCUFTU0VSVChjYXJkKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVOVEVSIHN0YXRlc1slZDolZDolZDolZF0gZmxhZ3NbJXhdXG4iLAorCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQlhZGFwdGVyLT5xdWV1ZXNfaW5pdGlhbGl6ZWQsIGFkYXB0ZXItPnN0YXRlLCBhZGFwdGVyLT5saW5rc3RhdGUsCisJCWNhcmQtPnN0YXRlLCBkZXYtPmZsYWdzKTsKKworCS8qIGFkYXB0ZXIgc2hvdWxkIGJlIGRvd24gYXQgdGhpcyBwb2ludCAqLworCWlmIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9ET1dOKSB7CisJCURCR19FUlJPUigic2xpY19pZl9pbml0IGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX0RPV05cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJQVNTRVJUKGFkYXB0ZXItPmxpbmtzdGF0ZSA9PSBMSU5LX0RPV04pOworCisJYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiA9IGRldi0+ZmxhZ3M7CisJYWRhcHRlci0+bWFjb3B0cyA9IE1BQ19ESVJFQ1RFRDsKKwlpZiAoZGV2LT5mbGFncykgeworCQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIFNldCBNQUMgb3B0aW9uczogIiwgX19mdW5jX18sCisJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpIHsKKwkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0JDQVNUOworCQkJREJHX01TRygiQkNBU1QgIik7CisJCX0KKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfUFJPTUlTQzsKKwkJCURCR19NU0coIlBST01JU0MgIik7CisJCX0KKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0FMTE1DQVNUOworCQkJREJHX01TRygiQUxMX01DQVNUICIpOworCQl9CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgeworCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfTUNBU1Q7CisJCQlEQkdfTVNHKCJNQ0FTVCAiKTsKKwkJfQorCQlEQkdfTVNHKCJcbiIpOworCX0KKwlzdGF0dXMgPSBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoYWRhcHRlcik7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlEQkdfRVJST1IKKwkJICAgICgic2xpY19pZl9pbml0OiBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMgRkFJTEVEICV4XG4iLAorCQkgICAgIHN0YXR1cyk7CisJCXNsaWNfYWRhcHRlcl9mcmVlcmVzb3VyY2VzKGFkYXB0ZXIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWlmICghYWRhcHRlci0+cXVldWVzX2luaXRpYWxpemVkKSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzIGNhbGwgc2xpY19yc3BxdWV1ZV9pbml0XG4iLCBfX2Z1bmNfXyk7CisJCWlmIChzbGljX3JzcHF1ZXVlX2luaXQoYWRhcHRlcikpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJREJHX01TRworCQkgICAgKCJzbGljb3NzOiAlcyBjYWxsIHNsaWNfY21kcV9pbml0IGFkYXB0ZXJbJXBdIHBvcnQgJWQgXG4iLAorCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5wb3J0KTsKKwkJaWYgKHNsaWNfY21kcV9pbml0KGFkYXB0ZXIpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCURCR19NU0cKKwkJICAgICgic2xpY29zczogJXMgY2FsbCBzbGljX3JjdnF1ZXVlX2luaXQgYWRhcHRlclslcF0gXAorCQkgICAgIHBvcnQgJWQgXG4iLCBfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+cG9ydCk7CisJCWlmIChzbGljX3JjdnF1ZXVlX2luaXQoYWRhcHRlcikpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJYWRhcHRlci0+cXVldWVzX2luaXRpYWxpemVkID0gMTsKKwl9CisJREJHX01TRygic2xpY29zczogJXMgZGlzYWJsZSBpbnRlcnJ1cHRzKHNsaWMpXG4iLCBfX2Z1bmNfXyk7CisKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PRkYsIEZMVVNIKTsKKwltZGVsYXkoMSk7CisKKwlpZiAoIWFkYXB0ZXItPmlzcF9pbml0aWFsaXplZCkgeworCQlwc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKilhZGFwdGVyLT5waHlzX3NobWVtOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKKwkJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJICBTTElDX0dFVF9BRERSX0hJR0goJnBzaG1lbS0+aXNyKSwgRE9OVF9GTFVTSCk7CisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaXNwLAorCQkJICBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5pc3IpLCBGTFVTSCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19YODYpCisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgKHUzMikgMCwgRE9OVF9GTFVTSCk7CisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaXNwLCAodTMyKSAmcHNobWVtLT5pc3IsIEZMVVNIKTsKKyNlbHNlCisJCVN0b3AgQ29tcGlsYXRpb25zCisjZW5kaWYKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCisJCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7CisJCWFkYXB0ZXItPmlzcF9pbml0aWFsaXplZCA9IDE7CisJfQorCisJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9VUDsKKwlpZiAoIWNhcmQtPmxvYWR0aW1lcnNldCkgeworCQlpbml0X3RpbWVyKCZjYXJkLT5sb2FkdGltZXIpOworCQljYXJkLT5sb2FkdGltZXIuZXhwaXJlcyA9CisJCSAgICBqaWZmaWVzICsgU0xJQ19TRUNTX1RPX0pJRkZTKFNMSUNfTE9BRFRJTUVSX1BFUklPRCk7CisJCWNhcmQtPmxvYWR0aW1lci5kYXRhID0gKHVsb25nKSBjYXJkOworCQljYXJkLT5sb2FkdGltZXIuZnVuY3Rpb24gPSAmc2xpY190aW1lcl9sb2FkX2NoZWNrOworCQlhZGRfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7CisKKwkJY2FyZC0+bG9hZHRpbWVyc2V0ID0gMTsKKwl9CisjaWYgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAorCWlmICghYWRhcHRlci0+c3RhdHN0aW1lcnNldCkgeworCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBzdGFydCBnZXRzdGF0c190aW1lcihzbGljKVxuIiwKKwkJCV9fZnVuY19fKTsKKwkJaW5pdF90aW1lcigmYWRhcHRlci0+c3RhdHN0aW1lcik7CisJCWFkYXB0ZXItPnN0YXRzdGltZXIuZXhwaXJlcyA9CisJCSAgICBqaWZmaWVzICsgU0xJQ19TRUNTX1RPX0pJRkZTKFNUQVRTX1RJTUVSX0lOVEVSVkFMKTsKKwkJYWRhcHRlci0+c3RhdHN0aW1lci5kYXRhID0gKHVsb25nKSBhZGFwdGVyLT5uZXRkZXY7CisJCWFkYXB0ZXItPnN0YXRzdGltZXIuZnVuY3Rpb24gPSAmc2xpY190aW1lcl9nZXRfc3RhdHM7CisJCWFkZF90aW1lcigmYWRhcHRlci0+c3RhdHN0aW1lcik7CisJCWFkYXB0ZXItPnN0YXRzdGltZXJzZXQgPSAxOworCX0KKyNlbmRpZgorI2lmICFTTElDX0RVTVBfRU5BQkxFRCAmJiBTTElDX1BJTkdfVElNRVJfRU5BQkxFRAorLyojaWYgU0xJQ19EVU1QX0VOQUJMRUQgJiYgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQqLworCWlmICghYWRhcHRlci0+cGluZ3RpbWVyc2V0KSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzIHN0YXJ0IGNhcmRfcGluZ190aW1lcihzbGljKVxuIiwKKwkJCV9fZnVuY19fKTsKKwkJaW5pdF90aW1lcigmYWRhcHRlci0+cGluZ3RpbWVyKTsKKwkJYWRhcHRlci0+cGluZ3RpbWVyLmV4cGlyZXMgPQorCQkgICAgamlmZmllcyArIFNMSUNfU0VDU19UT19KSUZGUyhQSU5HX1RJTUVSX0lOVEVSVkFMKTsKKwkJYWRhcHRlci0+cGluZ3RpbWVyLmRhdGEgPSAodWxvbmcpIGRldjsKKwkJYWRhcHRlci0+cGluZ3RpbWVyLmZ1bmN0aW9uID0gJnNsaWNfdGltZXJfcGluZzsKKwkJYWRkX3RpbWVyKCZhZGFwdGVyLT5waW5ndGltZXIpOworCQlhZGFwdGVyLT5waW5ndGltZXJzZXQgPSAxOworCQlhZGFwdGVyLT5jYXJkLT5waW5nc3RhdHVzID0gSVNSX1BJTkdNQVNLOworCX0KKyNlbmRpZgorCisJLyoKKwkgKiAgICBjbGVhciBhbnkgcGVuZGluZyBldmVudHMsIHRoZW4gZW5hYmxlIGludGVycnVwdHMKKwkgKi8KKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTkFCTEUgaW50ZXJydXB0cyhzbGljKVxuIiwgX19mdW5jX18pOworCWFkYXB0ZXItPmlzcmNvcHkgPSAwOworCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2lzciwgMCwgRkxVU0gpOworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09OLCBGTFVTSCk7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBjYWxsIHNsaWNfbGlua19jb25maWcoc2xpYylcbiIsIF9fZnVuY19fKTsKKwlzbGljX2xpbmtfY29uZmlnKGFkYXB0ZXIsIExJTktfQVVUT1NQRUVELCBMSU5LX0FVVE9EKTsKKwlzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihhZGFwdGVyKTsKKworCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfdW5tYXBfbW1pb19zcGFjZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKyNpZiBMSU5VWF9GUkVFU19BREFQVEVSX1JFU09VUkNFUworCWlmIChhZGFwdGVyLT5zbGljX3JlZ3MpCisJCWlvdW5tYXAoYWRhcHRlci0+c2xpY19yZWdzKTsKKwlhZGFwdGVyLT5zbGljX3JlZ3MgPSBOVUxMOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWlmICghYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQpIHsKKwkJaW50IHJldHZhbDsKKworCQlEQkdfTVNHCisJCSAgICAoInNsaWNvc3M6ICVzIEFsbG9jQWRhcHRSc3JjcyBhZGFwdGVyWyVwXSBzaG1lbVslcF0gXAorCQkgICAgIHBoeXNfc2htZW1bJXBdIGRldi0+aXJxWyV4XSAleFxuIiwKKwkJICAgICBfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+cHNobWVtLAorCQkgICAgICh2b2lkICopYWRhcHRlci0+cGh5c19zaG1lbSwgYWRhcHRlci0+bmV0ZGV2LT5pcnEsCisJCSAgICAgTlJfSVJRUyk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKKwkJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCisJCXJldHZhbCA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPm5ldGRldi0+aXJxLAorCQkJCSAgICAgJnNsaWNfaW50ZXJydXB0LAorCQkJCSAgICAgSVJRRl9TSEFSRUQsCisJCQkJICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPm5ldGRldik7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCisJCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKKworCQlpZiAocmV0dmFsKSB7CisJCQlEQkdfRVJST1IoInNsaWNvc3M6IHJlcXVlc3RfaXJxICglcykgRkFJTEVEIFsleF1cbiIsCisJCQkJICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIHJldHZhbCk7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCWFkYXB0ZXItPmludHJyZWdpc3RlcmVkID0gMTsKKwkJREJHX01TRworCQkgICAgKCJzbGljb3NzOiAlcyBBbGxvY0FkYXB0UnNyY3MgYWRhcHRlclslcF0gc2htZW1bJXBdIFwKKwkJICAgICBwc2htZW1bJXBdIGRldi0+aXJxWyV4XVxuIiwKKwkJICAgICBfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+cHNobWVtLAorCQkgICAgICh2b2lkICopYWRhcHRlci0+cHNobWVtLCBhZGFwdGVyLT5uZXRkZXYtPmlycSk7CisJfQorCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgc2xpY19jb25maWdfcGNpKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJdTE2IHBjaV9jb21tYW5kOworCXUxNiBuZXdfY29tbWFuZDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaWRldiwgUENJX0NPTU1BTkQsICZwY2lfY29tbWFuZCk7CisJREJHX01TRygic2xpY29zczogJXMgIFBDSSBjb21tYW5kWyU0LjR4XVxuIiwgX19mdW5jX18sIHBjaV9jb21tYW5kKTsKKworCW5ld19jb21tYW5kID0gcGNpX2NvbW1hbmQgfCBQQ0lfQ09NTUFORF9NQVNURVIKKwkgICAgfCBQQ0lfQ09NTUFORF9NRU1PUlkKKwkgICAgfCBQQ0lfQ09NTUFORF9JTlZBTElEQVRFCisJICAgIHwgUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfU0VSUiB8IFBDSV9DT01NQU5EX0ZBU1RfQkFDSzsKKwlpZiAocGNpX2NvbW1hbmQgIT0gbmV3X2NvbW1hbmQpIHsKKwkJREJHX01TRygiJXMgLS0gVXBkYXRpbmcgUENJIENPTU1BTkQgcmVnaXN0ZXIgJTQuNHgtPiU0LjR4LlxuIiwKKwkJCV9fZnVuY19fLCBwY2lfY29tbWFuZCwgbmV3X2NvbW1hbmQpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGNpZGV2LCBQQ0lfQ09NTUFORCwgbmV3X2NvbW1hbmQpOworCX0KK30KKworc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJREJHX01TRygic2xpY29zczogJXMgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKKwlzbGljX2luaXRfY2xlYW51cChhZGFwdGVyKTsKKwltZW1zZXQoJmFkYXB0ZXItPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKKwlhZGFwdGVyLT5lcnJvcl9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT5yY3ZfaW50ZXJydXB0cyA9IDA7CisJYWRhcHRlci0+eG1pdF9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT5saW5rZXZlbnRfaW50ZXJydXB0cyA9IDA7CisJYWRhcHRlci0+dXByX2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPm51bV9pc3JzID0gMDsKKwlhZGFwdGVyLT54bWl0X2NvbXBsZXRlcyA9IDA7CisJYWRhcHRlci0+cmN2X2Jyb2FkY2FzdHMgPSAwOworCWFkYXB0ZXItPnJjdl9tdWx0aWNhc3RzID0gMDsKKwlhZGFwdGVyLT5yY3ZfdW5pY2FzdHMgPSAwOworCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKK30KKworLyoKKyAqICBzbGljX2xpbmtfY29uZmlnCisgKgorICogIFdyaXRlIHBoeSBjb250cm9sIHRvIGNvbmZpZ3VyZSBsaW5rIGR1cGxleC9zcGVlZAorICoKKyAqLworc3RhdGljIHZvaWQgc2xpY19saW5rX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJICAgICAgdTMyIGxpbmtzcGVlZCwgdTMyIGxpbmtkdXBsZXgpCit7CisJdTMyIHNwZWVkOworCXUzMiBkdXBsZXg7CisJdTMyIHBoeV9jb25maWc7CisJdTMyIHBoeV9hZHZyZWc7CisJdTMyIHBoeV9nY3RscmVnOworCisJaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX1VQKSB7CisJCURCR19NU0cKKwkJICAgICgiJXMgKCVzKSBBREFQVCBOb3QgdXAgeWV0LCBSZXR1cm4hIHNwZWVkWyV4XSBkdXBsZXhbJXhdXG4iLAorCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGxpbmtzcGVlZCwKKwkJICAgICBsaW5rZHVwbGV4KTsKKwkJcmV0dXJuOworCX0KKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIHNsaWNfbGlua19jb25maWc6IHNwZWVkWyV4XSBkdXBsZXhbJXhdXG4iLAorCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBsaW5rc3BlZWQsIGxpbmtkdXBsZXgpOworCisJQVNTRVJUKChhZGFwdGVyLT5kZXZpZCA9PSBTTElDXzFHQl9ERVZJQ0VfSUQpCisJICAgICAgIHx8IChhZGFwdGVyLT5kZXZpZCA9PSBTTElDXzJHQl9ERVZJQ0VfSUQpKTsKKworCWlmIChsaW5rc3BlZWQgPiBMSU5LXzEwMDBNQikKKwkJbGlua3NwZWVkID0gTElOS19BVVRPU1BFRUQ7CisJaWYgKGxpbmtkdXBsZXggPiBMSU5LX0FVVE9EKQorCQlsaW5rZHVwbGV4ID0gTElOS19BVVRPRDsKKworCWlmICgobGlua3NwZWVkID09IExJTktfQVVUT1NQRUVEKSB8fCAobGlua3NwZWVkID09IExJTktfMTAwME1CKSkgeworCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBBREFQVF9GTEFHU19GSUJFUk1FRElBKSB7CisJCQkvKiAgV2UndmUgZ290IGEgZmliZXIgZ2lnYWJpdCBpbnRlcmZhY2UsIGFuZCByZWdpc3RlcgorCQkJICogIDQgaXMgZGlmZmVyZW50IGluIGZpYmVyIG1vZGUgdGhhbiBpbiBjb3BwZXIgbW9kZQorCQkJICovCisKKwkJCS8qIGFkdmVydGlzZSBGRCBvbmx5IEAxMDAwIE1iICovCisJCQlwaHlfYWR2cmVnID0gKE1JSUNSX1JFR180IHwgKFBBUl9BRFYxMDAwWEZEKSk7CisJCQkvKiBlbmFibGUgUEFVU0UgZnJhbWVzICAgICAgICAqLworCQkJcGh5X2FkdnJlZyB8PSBQQVJfQVNZTVBBVVNFX0ZJQkVSOworCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfYWR2cmVnLAorCQkJCSAgRkxVU0gpOworCisJCQlpZiAobGlua3NwZWVkID09IExJTktfQVVUT1NQRUVEKSB7CisJCQkJLyogcmVzZXQgcGh5LCBlbmFibGUgYXV0by1uZWcgICovCisJCQkJcGh5X2NvbmZpZyA9CisJCQkJICAgIChNSUlDUl9SRUdfUENSIHwKKwkJCQkgICAgIChQQ1JfUkVTRVQgfCBQQ1JfQVVUT05FRyB8CisJCQkJICAgICAgUENSX0FVVE9ORUdfUlNUKSk7CisJCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LAorCQkJCQkgIHBoeV9jb25maWcsIEZMVVNIKTsKKwkJCX0gZWxzZSB7CS8qIGZvcmNlZCAxMDAwIE1iIEZEKi8KKwkJCQkvKiBwb3dlciBkb3duIHBoeSB0byBicmVhayBsaW5rCisJCQkJICAgdGhpcyBtYXkgbm90IHdvcmspICovCisJCQkJcGh5X2NvbmZpZyA9IChNSUlDUl9SRUdfUENSIHwgUENSX1BPV0VSRE9XTik7CisJCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LAorCQkJCQkgIHBoeV9jb25maWcsIEZMVVNIKTsKKwkJCQkvKiB3YWl0LCBNYXJ2ZWxsIHNheXMgMSBzZWMsCisJCQkJICAgdHJ5IHRvIGdldCBhd2F5IHdpdGggMTAgbXMgICovCisJCQkJbWRlbGF5KDEwKTsKKworCQkJCS8qIGRpc2FibGUgYXV0by1uZWcsIHNldCBzcGVlZC9kdXBsZXgsCisJCQkJICAgc29mdCByZXNldCBwaHksIHBvd2VydXAgKi8KKwkJCQlwaHlfY29uZmlnID0KKwkJCQkgICAgKE1JSUNSX1JFR19QQ1IgfAorCQkJCSAgICAgKFBDUl9SRVNFVCB8IFBDUl9TUEVFRF8xMDAwIHwKKwkJCQkgICAgICBQQ1JfRFVQTEVYX0ZVTEwpKTsKKwkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCisJCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJfQorCQl9IGVsc2UgewkvKiBjb3BwZXIgZ2lnYWJpdCAqLworCisJCQkvKiBBdXRvLU5lZ290aWF0ZSBvciAxMDAwIE1iIG11c3QgYmUgYXV0byBuZWdvdGlhdGVkCisJCQkgKiBXZSd2ZSBnb3QgYSBjb3BwZXIgZ2lnYWJpdCBpbnRlcmZhY2UsIGFuZAorCQkJICogcmVnaXN0ZXIgNCBpcyBkaWZmZXJlbnQgaW4gY29wcGVyIG1vZGUgdGhhbgorCQkJICogaW4gZmliZXIgbW9kZQorCQkJICovCisJCQlpZiAobGlua3NwZWVkID09IExJTktfQVVUT1NQRUVEKSB7CisJCQkJLyogYWR2ZXJ0aXNlIDEwLzEwMCBNYiBtb2RlcyAgICovCisJCQkJcGh5X2FkdnJlZyA9CisJCQkJICAgIChNSUlDUl9SRUdfNCB8CisJCQkJICAgICAoUEFSX0FEVjEwMEZEIHwgUEFSX0FEVjEwMEhEIHwgUEFSX0FEVjEwRkQKKwkJCQkgICAgICB8IFBBUl9BRFYxMEhEKSk7CisJCQl9IGVsc2UgeworCQkJLyogbGlua3NwZWVkID09IExJTktfMTAwME1CIC0KKwkJCSAgIGRvbid0IGFkdmVydGlzZSAxMC8xMDAgTWIgbW9kZXMgICovCisJCQkJcGh5X2FkdnJlZyA9IE1JSUNSX1JFR180OworCQkJfQorCQkJLyogZW5hYmxlIFBBVVNFIGZyYW1lcyAgKi8KKwkJCXBoeV9hZHZyZWcgfD0gUEFSX0FTWU1QQVVTRTsKKwkJCS8qIHJlcXVpcmVkIGJ5IHRoZSBDaWNhZGEgUEhZICAqLworCQkJcGh5X2FkdnJlZyB8PSBQQVJfODAyXzM7CisJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9hZHZyZWcsCisJCQkJICBGTFVTSCk7CisJCQkvKiBhZHZlcnRpc2UgRkQgb25seSBAMTAwMCBNYiAgKi8KKwkJCXBoeV9nY3RscmVnID0gKE1JSUNSX1JFR185IHwgKFBHQ19BRFYxMDAwRkQpKTsKKwkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2djdGxyZWcsCisJCQkJICBGTFVTSCk7CisKKwkJCWlmIChhZGFwdGVyLT5zdWJzeXNpZCAhPSBTTElDXzFHQl9DSUNBREFfU1VCU1lTX0lEKSB7CisJCQkJLyogaWYgYSBNYXJ2ZWxsIFBIWQorCQkJCSAgIGVuYWJsZSBhdXRvIGNyb3Nzb3ZlciAqLworCQkJCXBoeV9jb25maWcgPQorCQkJCSAgICAoTUlJQ1JfUkVHXzE2IHwgKE1SVl9SRUcxNl9YT1ZFUk9OKSk7CisJCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LAorCQkJCQkgIHBoeV9jb25maWcsIEZMVVNIKTsKKworCQkJCS8qIHJlc2V0IHBoeSwgZW5hYmxlIGF1dG8tbmVnICAqLworCQkJCXBoeV9jb25maWcgPQorCQkJCSAgICAoTUlJQ1JfUkVHX1BDUiB8CisJCQkJICAgICAoUENSX1JFU0VUIHwgUENSX0FVVE9ORUcgfAorCQkJCSAgICAgIFBDUl9BVVRPTkVHX1JTVCkpOworCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwKKwkJCQkJICBwaHlfY29uZmlnLCBGTFVTSCk7CisJCQl9IGVsc2UgewkvKiBpdCdzIGEgQ2ljYWRhIFBIWSAgKi8KKwkJCQkvKiBlbmFibGUgYW5kIHJlc3RhcnQgYXV0by1uZWcgKGRvbid0IHJlc2V0KSAgKi8KKwkJCQlwaHlfY29uZmlnID0KKwkJCQkgICAgKE1JSUNSX1JFR19QQ1IgfAorCQkJCSAgICAgKFBDUl9BVVRPTkVHIHwgUENSX0FVVE9ORUdfUlNUKSk7CisJCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LAorCQkJCQkgIHBoeV9jb25maWcsIEZMVVNIKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qIEZvcmNlZCAxMC8xMDAgICovCisJCWlmIChsaW5rc3BlZWQgPT0gTElOS18xME1CKQorCQkJc3BlZWQgPSAwOworCQllbHNlCisJCQlzcGVlZCA9IFBDUl9TUEVFRF8xMDA7CisJCWlmIChsaW5rZHVwbGV4ID09IExJTktfSEFMRkQpCisJCQlkdXBsZXggPSAwOworCQllbHNlCisJCQlkdXBsZXggPSBQQ1JfRFVQTEVYX0ZVTEw7CisKKwkJaWYgKGFkYXB0ZXItPnN1YnN5c2lkICE9IFNMSUNfMUdCX0NJQ0FEQV9TVUJTWVNfSUQpIHsKKwkJCS8qIGlmIGEgTWFydmVsbCBQSFkKKwkJCSAgIGRpc2FibGUgYXV0byBjcm9zc292ZXIgICovCisJCQlwaHlfY29uZmlnID0gKE1JSUNSX1JFR18xNiB8IChNUlZfUkVHMTZfWE9WRVJPRkYpKTsKKwkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2NvbmZpZywKKwkJCQkgIEZMVVNIKTsKKwkJfQorCisJCS8qIHBvd2VyIGRvd24gcGh5IHRvIGJyZWFrIGxpbmsgKHRoaXMgbWF5IG5vdCB3b3JrKSAgKi8KKwkJcGh5X2NvbmZpZyA9IChNSUlDUl9SRUdfUENSIHwgKFBDUl9QT1dFUkRPV04gfCBzcGVlZCB8IGR1cGxleCkpOworCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKKworCQkvKiB3YWl0LCBNYXJ2ZWxsIHNheXMgMSBzZWMsIHRyeSB0byBnZXQgYXdheSB3aXRoIDEwIG1zICovCisJCW1kZWxheSgxMCk7CisKKwkJaWYgKGFkYXB0ZXItPnN1YnN5c2lkICE9IFNMSUNfMUdCX0NJQ0FEQV9TVUJTWVNfSUQpIHsKKwkJCS8qIGlmIGEgTWFydmVsbCBQSFkKKwkJCSAgIGRpc2FibGUgYXV0by1uZWcsIHNldCBzcGVlZCwKKwkJCSAgIHNvZnQgcmVzZXQgcGh5LCBwb3dlcnVwICovCisJCQlwaHlfY29uZmlnID0KKwkJCSAgICAoTUlJQ1JfUkVHX1BDUiB8IChQQ1JfUkVTRVQgfCBzcGVlZCB8IGR1cGxleCkpOworCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfY29uZmlnLAorCQkJCSAgRkxVU0gpOworCQl9IGVsc2UgewkvKiBpdCdzIGEgQ2ljYWRhIFBIWSAgKi8KKwkJCS8qIGRpc2FibGUgYXV0by1uZWcsIHNldCBzcGVlZCwgcG93ZXJ1cCAgKi8KKwkJCXBoeV9jb25maWcgPSAoTUlJQ1JfUkVHX1BDUiB8IChzcGVlZCB8IGR1cGxleCkpOworCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfY29uZmlnLAorCQkJCSAgRkxVU0gpOworCQl9CisJfQorCisJREJHX01TRworCSAgICAoInNsaWNvc3M6ICVzICglcykgRVhJVCBzbGljX2xpbmtfY29uZmlnIDogc3RhdGVbJWRdIFwKKwkgICAgcGh5X2NvbmZpZ1sleF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPnN0YXRlLAorCSAgICBwaHlfY29uZmlnKTsKK30KKworc3RhdGljIHZvaWQgc2xpY19jYXJkX2NsZWFudXAoc3RydWN0IHNsaWNjYXJkICpjYXJkKQoreworCURCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSXG4iLCBfX2Z1bmNfXyk7CisKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorCWlmIChjYXJkLT5kdW1wYnVmZmVyKSB7CisJCWNhcmQtPmR1bXBidWZmZXJfcGh5cyA9IDA7CisJCWNhcmQtPmR1bXBidWZmZXJfcGh5c2wgPSAwOworCQljYXJkLT5kdW1wYnVmZmVyX3BoeXNoID0gMDsKKwkJa2ZyZWUoY2FyZC0+ZHVtcGJ1ZmZlcik7CisJCWNhcmQtPmR1bXBidWZmZXIgPSBOVUxMOworCX0KKwlpZiAoY2FyZC0+Y21kYnVmZmVyKSB7CisJCWNhcmQtPmNtZGJ1ZmZlcl9waHlzID0gMDsKKwkJY2FyZC0+Y21kYnVmZmVyX3BoeXNsID0gMDsKKwkJY2FyZC0+Y21kYnVmZmVyX3BoeXNoID0gMDsKKwkJa2ZyZWUoY2FyZC0+Y21kYnVmZmVyKTsKKwkJY2FyZC0+Y21kYnVmZmVyID0gTlVMTDsKKwl9CisjZW5kaWYKKworCWlmIChjYXJkLT5sb2FkdGltZXJzZXQpIHsKKwkJY2FyZC0+bG9hZHRpbWVyc2V0ID0gMDsKKwkJZGVsX3RpbWVyKCZjYXJkLT5sb2FkdGltZXIpOworCX0KKworCXNsaWNfZGVidWdfY2FyZF9kZXN0cm95KGNhcmQpOworCisJa2ZyZWUoY2FyZCk7CisJREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgaW50IHNsaWNfY2FyZF9kb3dubG9hZF9nYnJjdihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKwl1MzIgY29kZWFkZHI7CisJdW5zaWduZWQgY2hhciAqaW5zdHJ1Y3Rpb24gPSBOVUxMOworCXUzMiByY3Z1Y29kZWxlbiA9IDA7CisKKwlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7CisJY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6CisJCWluc3RydWN0aW9uID0gKHVuc2lnbmVkIGNoYXIgKikmT2FzaXNSY3ZVQ29kZVswXTsKKwkJcmN2dWNvZGVsZW4gPSBPYXNpc1JjdlVDb2RlTGVuOworCQlicmVhazsKKwljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKKwkJaW5zdHJ1Y3Rpb24gPSAodW5zaWduZWQgY2hhciAqKSZHQlJjdlVDb2RlWzBdOworCQlyY3Z1Y29kZWxlbiA9IEdCUmN2VUNvZGVMZW47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUFTU0VSVCgwKTsKKwkJYnJlYWs7CisJfQorCisJLyogc3RhcnQgZG93bmxvYWQgKi8KKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsIFNMSUNfUkNWV0NTX0JFR0lOLCBGTFVTSCk7CisKKwkvKiBkb3dubG9hZCB0aGUgcmN2IHNlcXVlbmNlciB1Y29kZSAqLworCWZvciAoY29kZWFkZHIgPSAwOyBjb2RlYWRkciA8IHJjdnVjb2RlbGVuOyBjb2RlYWRkcisrKSB7CisJCS8qIHdyaXRlIG91dCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgY29kZWFkZHIsIEZMVVNIKTsKKworCQkvKiB3cml0ZSBvdXQgdGhlIGluc3RydWN0aW9uIGRhdGEgbG93IGFkZHIgKi8KKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19yY3Zfd2NzLAorCQkJICAodTMyKSAqKHUzMiAqKSBpbnN0cnVjdGlvbiwgRkxVU0gpOworCQlpbnN0cnVjdGlvbiArPSA0OworCisJCS8qIHdyaXRlIG91dCB0aGUgaW5zdHJ1Y3Rpb24gZGF0YSBoaWdoIGFkZHIgKi8KKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19yY3Zfd2NzLCAodTMyKSAqaW5zdHJ1Y3Rpb24sCisJCQkgIEZMVVNIKTsKKwkJaW5zdHJ1Y3Rpb24gKz0gMTsKKwl9CisKKwkvKiBkb3dubG9hZCBmaW5pc2hlZCAqLworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgU0xJQ19SQ1ZXQ1NfRklOSVNILCBGTFVTSCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbGljX2NhcmRfZG93bmxvYWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHNlY3Rpb247CisJaW50IHRoaXNzZWN0aW9uc2l6ZTsKKwlpbnQgY29kZWFkZHI7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisJdTMyICppbnN0cnVjdGlvbiA9IE5VTEw7CisJdTMyICpsYXN0aW5zdHJ1Y3QgPSBOVUxMOworCXUzMiAqc3RhcnRpbnN0cnVjdCA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqbmV4dGluc3RydWN0OworCXUzMiBiYXNlYWRkcmVzczsKKwl1MzIgZmFpbHVyZTsKKwl1MzIgaTsKKwl1MzIgbnVtc2VjdHMgPSAwOworCXUzMiBzZWN0c2l6ZVszXTsKKwl1MzIgc2VjdHN0YXJ0WzNdOworCisvKiAgICAgIERCR19NU0cgKCJzbGljb3NzOiAlcyAoJXMpIGFkYXB0ZXJbJXBdIGNhcmRbJXBdIGRldmlkWyV4XSBcCisJamlmZmllc1slbHhdIGNwdSAlZFxuIiwgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlciwKKwkgICAgYWRhcHRlci0+Y2FyZCwgYWRhcHRlci0+ZGV2aWQsamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsgKi8KKworCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKKwljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKKy8qICAgICAgREJHX01TRyAoInNsaWNvc3M6ICVzIGRldmlkPT1TTElDXzJHQl9ERVZJQ0VfSUQgc2VjdGlvbnNbJXhdXG4iLAorCV9fZnVuY19fLCAodWludCkgT051bVNlY3Rpb25zKTsgKi8KKwkJbnVtc2VjdHMgPSBPTnVtU2VjdGlvbnM7CisJCWZvciAoaSA9IDA7IGkgPCBudW1zZWN0czsgaSsrKSB7CisJCQlzZWN0c2l6ZVtpXSA9IE9TZWN0aW9uU2l6ZVtpXTsKKwkJCXNlY3RzdGFydFtpXSA9IE9TZWN0aW9uU3RhcnRbaV07CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTTElDXzFHQl9ERVZJQ0VfSUQ6CisvKiAgICAgICAgICAgICAgREJHX01TRyAoInNsaWNvc3M6ICVzIGRldmlkPT1TTElDXzFHQl9ERVZJQ0VfSUQgc2VjdGlvbnNbJXhdXG4iLAorCQlfX2Z1bmNfXywgKHVpbnQpIE1OdW1TZWN0aW9ucyk7ICovCisJCW51bXNlY3RzID0gTU51bVNlY3Rpb25zOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtc2VjdHM7IGkrKykgeworCQkJc2VjdHNpemVbaV0gPSBNU2VjdGlvblNpemVbaV07CisJCQlzZWN0c3RhcnRbaV0gPSBNU2VjdGlvblN0YXJ0W2ldOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUFTU0VSVCgwKTsKKwkJYnJlYWs7CisJfQorCisJQVNTRVJUKG51bXNlY3RzIDw9IDMpOworCisJZm9yIChzZWN0aW9uID0gMDsgc2VjdGlvbiA8IG51bXNlY3RzOyBzZWN0aW9uKyspIHsKKwkJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgeworCQljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKKwkJCWluc3RydWN0aW9uID0gKHUzMiAqKSAmT2FzaXNVQ29kZVtzZWN0aW9uXVswXTsKKwkJCWJhc2VhZGRyZXNzID0gc2VjdHN0YXJ0W3NlY3Rpb25dOworCQkJdGhpc3NlY3Rpb25zaXplID0gc2VjdHNpemVbc2VjdGlvbl0gPj4gMzsKKwkJCWxhc3RpbnN0cnVjdCA9CisJCQkgICAgKHUzMiAqKSAmT2FzaXNVQ29kZVtzZWN0aW9uXVtzZWN0c2l6ZVtzZWN0aW9uXSAtCisJCQkJCQkJICAgICA4XTsKKwkJCWJyZWFrOworCQljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKKwkJCWluc3RydWN0aW9uID0gKHUzMiAqKSAmTW9qYXZlVUNvZGVbc2VjdGlvbl1bMF07CisJCQliYXNlYWRkcmVzcyA9IHNlY3RzdGFydFtzZWN0aW9uXTsKKwkJCXRoaXNzZWN0aW9uc2l6ZSA9IHNlY3RzaXplW3NlY3Rpb25dID4+IDM7CisJCQlsYXN0aW5zdHJ1Y3QgPQorCQkJICAgICh1MzIgKikgJk1vamF2ZVVDb2RlW3NlY3Rpb25dW3NlY3RzaXplW3NlY3Rpb25dCisJCQkJCQkJICAgICAgLSA4XTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQVNTRVJUKDApOworCQkJYnJlYWs7CisJCX0KKworCQliYXNlYWRkcmVzcyA9IHNlY3RzdGFydFtzZWN0aW9uXTsKKwkJdGhpc3NlY3Rpb25zaXplID0gc2VjdHNpemVbc2VjdGlvbl0gPj4gMzsKKworCQlmb3IgKGNvZGVhZGRyID0gMDsgY29kZWFkZHIgPCB0aGlzc2VjdGlvbnNpemU7IGNvZGVhZGRyKyspIHsKKwkJCXN0YXJ0aW5zdHJ1Y3QgPSBpbnN0cnVjdGlvbjsKKwkJCW5leHRpbnN0cnVjdCA9ICgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uKSArIDg7CisJCQkvKiBXcml0ZSBvdXQgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLworCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsIGJhc2VhZGRyZXNzICsgY29kZWFkZHIsCisJCQkJICBGTFVTSCk7CisJCQkvKiBXcml0ZSBvdXQgaW5zdHJ1Y3Rpb24gdG8gbG93IGFkZHIgKi8KKwkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd2NzLCAqaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCQlpbnN0cnVjdGlvbiA9ICh1MzIgKikoKHVuc2lnbmVkIGNoYXIgKilpbnN0cnVjdGlvbiArIDQpOworI2Vsc2UKKwkJCWluc3RydWN0aW9uKys7CisjZW5kaWYKKwkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiB0byBoaWdoIGFkZHIgKi8KKwkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd2NzLCAqaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCQlpbnN0cnVjdGlvbiA9ICh1MzIgKikoKHVuc2lnbmVkIGNoYXIgKilpbnN0cnVjdGlvbiArIDQpOworI2Vsc2UKKwkJCWluc3RydWN0aW9uKys7CisjZW5kaWYKKwkJfQorCX0KKworCWZvciAoc2VjdGlvbiA9IDA7IHNlY3Rpb24gPCBudW1zZWN0czsgc2VjdGlvbisrKSB7CisJCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKKwkJY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6CisJCQlpbnN0cnVjdGlvbiA9ICh1MzIgKikmT2FzaXNVQ29kZVtzZWN0aW9uXVswXTsKKwkJCWJyZWFrOworCQljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKKwkJCWluc3RydWN0aW9uID0gKHUzMiAqKSZNb2phdmVVQ29kZVtzZWN0aW9uXVswXTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQVNTRVJUKDApOworCQkJYnJlYWs7CisJCX0KKworCQliYXNlYWRkcmVzcyA9IHNlY3RzdGFydFtzZWN0aW9uXTsKKwkJaWYgKGJhc2VhZGRyZXNzIDwgMHg4MDAwKQorCQkJY29udGludWU7CisJCXRoaXNzZWN0aW9uc2l6ZSA9IHNlY3RzaXplW3NlY3Rpb25dID4+IDM7CisKKy8qICAgICAgICBEQkdfTVNHICgic2xpY29zczogQ09NUEFSRSBzZWN0b25bJXhdIGJhc2VhZGRyWyV4XSBzZWN0bnNpemVbJXhdXG4iLAorCQkodWludClzZWN0aW9uLGJhc2VhZGRyZXNzLHRoaXNzZWN0aW9uc2l6ZSk7Ki8KKworCQlmb3IgKGNvZGVhZGRyID0gMDsgY29kZWFkZHIgPCB0aGlzc2VjdGlvbnNpemU7IGNvZGVhZGRyKyspIHsKKwkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCisJCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3djcywKKwkJCQkgIFNMSUNfV0NTX0NPTVBBUkUgfCAoYmFzZWFkZHJlc3MgKyBjb2RlYWRkciksCisJCQkJICBGTFVTSCk7CisJCQkvKiBXcml0ZSBvdXQgaW5zdHJ1Y3Rpb24gdG8gbG93IGFkZHIgKi8KKwkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd2NzLCAqaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCQlpbnN0cnVjdGlvbiA9ICh1MzIgKikoKHVuc2lnbmVkIGNoYXIgKilpbnN0cnVjdGlvbiArIDQpOworI2Vsc2UKKwkJCWluc3RydWN0aW9uKys7CisjZW5kaWYKKwkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiB0byBoaWdoIGFkZHIgKi8KKwkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd2NzLCAqaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCQlpbnN0cnVjdGlvbiA9ICh1MzIgKikoKHVuc2lnbmVkIGNoYXIgKilpbnN0cnVjdGlvbiArIDQpOworI2Vsc2UKKwkJCWluc3RydWN0aW9uKys7CisjZW5kaWYKKwkJCS8qIENoZWNrIFNSQU0gbG9jYXRpb24gemVyby4gSWYgaXQgaXMgbm9uLXplcm8uIEFib3J0LiovCisJCQlmYWlsdXJlID0gcmVhZGwoKHUzMiBfX2lvbWVtICopJnNsaWNfcmVncy0+c2xpY19yZXNldCk7CisJCQlpZiAoZmFpbHVyZSkgeworCQkJCURCR19NU0cKKwkJCQkgICAgKCJzbGljb3NzOiAlcyBGQUlMVVJFIEVYSVQgY29kZWFkZHJbJXhdIFwKKwkJCQkgICAgdGhpc3NlY3Rpb25zaXplWyV4XSBmYWlsdXJlWyV4XVxuIiwKKwkJCQkgICAgIF9fZnVuY19fLCBjb2RlYWRkciwgdGhpc3NlY3Rpb25zaXplLAorCQkJCSAgICAgZmFpbHVyZSk7CisKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfQorCX0KKy8qICAgIERCR19NU0cgKCJzbGljb3NzOiBDb21wYXJlIGRvbmVcbiIpOyovCisKKwkvKiBFdmVyeXRoaW5nIE9LLCBraWNrIG9mZiB0aGUgY2FyZCAqLworCW1kZWxheSgxMCk7CisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsIFNMSUNfV0NTX1NUQVJULCBGTFVTSCk7CisKKwkvKiBzdGFsbCBmb3IgMjAgbXMsIGxvbmcgZW5vdWdoIGZvciB1Y29kZSB0byBpbml0IGNhcmQKKwkgICBhbmQgcmVhY2ggbWFpbmxvb3AgKi8KKwltZGVsYXkoMjApOworCisJREJHX01TRygic2xpY29zczogJXMgKCVzKSBFWElUIGFkYXB0ZXJbJXBdIGNhcmRbJXBdXG4iLAorCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLCBhZGFwdGVyLT5jYXJkKTsKKworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX3NldF9od2FkZHIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKworLyogIERCR19NU0cgKCIlcyBFTlRFUiBjYXJkLT5jb25maWdfc2V0WyV4XSBwb3J0WyVkXSBwaHlzcG9ydFslZF0gZnVuY3QjWyVkXVxuIiwKKyAgICBfX2Z1bmNfXywgY2FyZC0+Y29uZmlnX3NldCwgYWRhcHRlci0+cG9ydCwgYWRhcHRlci0+cGh5c3BvcnQsCisgICAgYWRhcHRlci0+ZnVuY3Rpb25udW1iZXIpOworCisgICAgc2xpY19kYmdfbWFjYWRkcnMoYWRhcHRlcik7ICovCisKKwlpZiAoKGFkYXB0ZXItPmNhcmQpICYmIChjYXJkLT5jb25maWdfc2V0KSkgeworCQltZW1jcHkoYWRhcHRlci0+bWFjYWRkciwKKwkJICAgICAgIGNhcmQtPmNvbmZpZy5NYWNJbmZvW2FkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyXS5tYWNhZGRyQSwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xpY19jb25maWdfbWFjKSk7CisvKiAgICAgIERCR19NU0cgKCIlcyBBRlRFUiBjb3B5aW5nIGZyb20gY29uZmlnLm1hY2luZm8gaW50byBjdXJybWFjYWRkclxuIiwKKwlfX2Z1bmNfXyk7CisJc2xpY19kYmdfbWFjYWRkcnMoYWRhcHRlcik7Ki8KKwkJaWYgKCEoYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0gfHwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0gfHwKKwkJICAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0gfHwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10gfHwKKwkJICAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNF0gfHwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNV0pKSB7CisJCQltZW1jcHkoYWRhcHRlci0+Y3Vycm1hY2FkZHIsIGFkYXB0ZXItPm1hY2FkZHIsIDYpOworCQl9CisJCWlmIChhZGFwdGVyLT5uZXRkZXYpIHsKKwkJCW1lbWNweShhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5jdXJybWFjYWRkciwKKwkJCSAgICAgICA2KTsKKwkJfQorCX0KKy8qICBEQkdfTVNHICgiJXMgRVhJVCBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+cG9ydCk7CisgICAgc2xpY19kYmdfbWFjYWRkcnMoYWRhcHRlcik7ICovCit9CisKK3N0YXRpYyB2b2lkIHNsaWNfaW50YWdnX3NldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIHZhbHVlKQoreworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pbnRhZ2csIHZhbHVlLCBGTFVTSCk7CisJYWRhcHRlci0+Y2FyZC0+bG9hZGxldmVsX2N1cnJlbnQgPSB2YWx1ZTsKK30KKworc3RhdGljIGludCBzbGljX2NhcmRfaW5pdChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCXN0cnVjdCBzbGljX2VlcHJvbSAqcGVlcHJvbTsKKwlzdHJ1Y3Qgb3NsaWNfZWVwcm9tICpwT2VlcHJvbTsKKwlkbWFfYWRkcl90IHBoeXNfY29uZmlnOworCXUzMiBwaHlzX2NvbmZpZ2g7CisJdTMyIHBoeXNfY29uZmlnbDsKKwl1MzIgaSA9IDA7CisJc3RydWN0IHNsaWNfc2htZW0gKnBzaG1lbTsKKwlpbnQgc3RhdHVzOworCXVpbnQgbWFjYWRkcnMgPSBjYXJkLT5jYXJkX3NpemU7CisJdXNob3J0IGVlY29kZXNpemU7CisJdXNob3J0IGRyYW1zaXplOworCXVzaG9ydCBlZV9jaGtzdW07CisJdXNob3J0IGNhbGNfY2hrc3VtOworCXN0cnVjdCBzbGljX2NvbmZpZ19tYWMgKnBtYWM7CisJdW5zaWduZWQgY2hhciBmcnVmb3JtYXQ7CisJdW5zaWduZWQgY2hhciBvZW1mcnVmb3JtYXQ7CisJc3RydWN0IGF0a19mcnUgKnBhdGtmcnU7CisJdW5pb24gb2VtZnJ1ICpwb2VtZnJ1OworCisJREJHX01TRworCSAgICAoInNsaWNvc3M6ICVzIEVOVEVSIGNhcmRbJXBdIGFkYXB0ZXJbJXBdIGNhcmQtPnN0YXRlWyV4XSBcCisJICAgIHNpemVbJWRdXG4iLCBfX2Z1bmNfXywgY2FyZCwgYWRhcHRlciwgY2FyZC0+c3RhdGUsIGNhcmQtPmNhcmRfc2l6ZSk7CisKKwkvKiBSZXNldCBldmVyeXRoaW5nIGV4Y2VwdCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSAqLworCXNsaWNfc29mdF9yZXNldChhZGFwdGVyKTsKKworCS8qIERvd25sb2FkIHRoZSBtaWNyb2NvZGUgKi8KKwlzdGF0dXMgPSBzbGljX2NhcmRfZG93bmxvYWQoYWRhcHRlcik7CisKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCURCR19FUlJPUigiU0xJQyBkb3dubG9hZCBmYWlsZWQgYnVzICVkIHNsb3QgJWRcbiIsCisJCQkgICh1aW50KSBhZGFwdGVyLT5idXNudW1iZXIsCisJCQkgICh1aW50KSBhZGFwdGVyLT5zbG90bnVtYmVyKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlpZiAoIWNhcmQtPmNvbmZpZ19zZXQpIHsKKwkJcGVlcHJvbSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xpY19lZXByb20pLAorCQkJCQkgICAgICAgJnBoeXNfY29uZmlnKTsKKworCQlwaHlzX2NvbmZpZ2wgPSBTTElDX0dFVF9BRERSX0xPVyhwaHlzX2NvbmZpZyk7CisJCXBoeXNfY29uZmlnaCA9IFNMSUNfR0VUX0FERFJfSElHSChwaHlzX2NvbmZpZyk7CisKKwkJREJHX01TRygic2xpY29zczogJXMgRWVwcm9tIGluZm8gIGFkYXB0ZXIgWyVwXVxuICAgICIKKwkJCSJzaXplICAgICAgICBbJXhdXG4gICAgcGVlcHJvbSAgICAgWyVwXVxuICAgICIKKwkJCSJwaHlzX2NvbmZpZyBbJXBdXG4gICAgcGh5c19jb25maWdsWyV4XVxuICAgICIKKwkJCSJwaHlzX2NvbmZpZ2hbJXhdXG4iLAorCQkJX19mdW5jX18sIGFkYXB0ZXIsCisJCQkodTMyKXNpemVvZihzdHJ1Y3Qgc2xpY19lZXByb20pLAorCQkJcGVlcHJvbSwgKHZvaWQgKikgcGh5c19jb25maWcsIHBoeXNfY29uZmlnbCwKKwkJCXBoeXNfY29uZmlnaCk7CisJCWlmICghcGVlcHJvbSkgeworCQkJREJHX0VSUk9SCisJCQkgICAgKCJTTElDIGVlcHJvbSByZWFkIGZhaWxlZCB0byBnZXQgbWVtb3J5IGJ1cyAlZCBcCisJCQkgICAgc2xvdCAlZFxuIiwKKwkJCSAgICAgKHVpbnQpIGFkYXB0ZXItPmJ1c251bWJlciwKKwkJCSAgICAgKHVpbnQpIGFkYXB0ZXItPnNsb3RudW1iZXIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQltZW1zZXQocGVlcHJvbSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSkpOworCQl9CisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09GRiwgRkxVU0gpOworCQltZGVsYXkoMSk7CisJCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAorCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOworCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIDAsIERPTlRfRkxVU0gpOworCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2lzcCwKKwkJCSAgU0xJQ19HRVRfQUREUl9MT1coJnBzaG1lbS0+aXNyKSwgRkxVU0gpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKKwkJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKKworCQlzbGljX2NvbmZpZ19nZXQoYWRhcHRlciwgcGh5c19jb25maWdsLCBwaHlzX2NvbmZpZ2gpOworCisJCWZvciAoOzspIHsKKwkJCWlmIChhZGFwdGVyLT5wc2htZW0tPmlzcikgeworCQkJCURCR19NU0coIiVzIHNobWVtWyVwXSBzaG1lbS0+aXNyWyV4XVxuIiwKKwkJCQkJX19mdW5jX18sIGFkYXB0ZXItPnBzaG1lbSwKKwkJCQkJYWRhcHRlci0+cHNobWVtLT5pc3IpOworCisJCQkJaWYgKGFkYXB0ZXItPnBzaG1lbS0+aXNyICYgSVNSX1VQQykgeworCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzciA9IDA7CisJCQkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2lzcCwKKwkJCQkJCSAgICAwLAorCQkJCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCQkJICAgIDAsIEZMVVNIKTsKKwkJCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3IsIDAsCisJCQkJCQkgIEZMVVNIKTsKKworCQkJCQlzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKGFkYXB0ZXIsIDApOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzciA9IDA7CisJCQkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaXNyLCAwLAorCQkJCQkJICBGTFVTSCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQltZGVsYXkoMSk7CisJCQkJaSsrOworCQkJCWlmIChpID4gNTAwMCkgeworCQkJCQlEQkdfRVJST1IKKwkJCQkJICAgICgiU0xJQzogJWQgY29uZmlnIGRhdGEgZmV0Y2ggdGltZWRcCisJCQkJCSAgICAgIG91dCFcbiIsIGFkYXB0ZXItPnBvcnQpOworCQkJCQlEQkdfTVNHKCIlcyBzaG1lbVslcF0gc2htZW0tPmlzclsleF1cbiIsCisJCQkJCQlfX2Z1bmNfXywgYWRhcHRlci0+cHNobWVtLAorCQkJCQkJYWRhcHRlci0+cHNobWVtLT5pc3IpOworCQkJCQlXUklURV9SRUc2NChhZGFwdGVyLAorCQkJCQkJICAgIHNsaWNfcmVncy0+c2xpY19pc3AsIDAsCisJCQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCQkgICAgMCwgRkxVU0gpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQl9CisJCX0KKworCQlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7CisJCS8qIE9hc2lzIGNhcmQgKi8KKwkJY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6CisJCQkvKiBleHRyYWN0IEVFUFJPTSBkYXRhIGFuZCBwb2ludGVycyB0byBFRVBST00gZGF0YSAqLworCQkJcE9lZXByb20gPSAoc3RydWN0IG9zbGljX2VlcHJvbSAqKSBwZWVwcm9tOworCQkJZWVjb2Rlc2l6ZSA9IHBPZWVwcm9tLT5FZWNvZGVTaXplOworCQkJZHJhbXNpemUgPSBwT2VlcHJvbS0+RHJhbVNpemU7CisJCQlwbWFjID0gcE9lZXByb20tPk1hY0luZm87CisJCQlmcnVmb3JtYXQgPSBwT2VlcHJvbS0+RnJ1Rm9ybWF0OworCQkJcGF0a2ZydSA9ICZwT2VlcHJvbS0+QXRrRnJ1OworCQkJb2VtZnJ1Zm9ybWF0ID0gcE9lZXByb20tPk9lbUZydUZvcm1hdDsKKwkJCXBvZW1mcnUgPSAmcE9lZXByb20tPk9lbUZydTsKKwkJCW1hY2FkZHJzID0gMjsKKwkJCS8qIE1pbm9yIGtsdWRnZSBmb3IgT2FzaXMgY2FyZAorCQkJICAgICBnZXQgMiBNQUMgYWRkcmVzc2VzIGZyb20gdGhlCisJCQkgICAgIEVFUFJPTSB0byBlbnN1cmUgdGhhdCBmdW5jdGlvbiAxCisJCQkgICAgIGdldHMgdGhlIFBvcnQgMSBNQUMgYWRkcmVzcyAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBleHRyYWN0IEVFUFJPTSBkYXRhIGFuZCBwb2ludGVycyB0byBFRVBST00gZGF0YSAqLworCQkJZWVjb2Rlc2l6ZSA9IHBlZXByb20tPkVlY29kZVNpemU7CisJCQlkcmFtc2l6ZSA9IHBlZXByb20tPkRyYW1TaXplOworCQkJcG1hYyA9IHBlZXByb20tPnUyLm1hYy5NYWNJbmZvOworCQkJZnJ1Zm9ybWF0ID0gcGVlcHJvbS0+RnJ1Rm9ybWF0OworCQkJcGF0a2ZydSA9ICZwZWVwcm9tLT5BdGtGcnU7CisJCQlvZW1mcnVmb3JtYXQgPSBwZWVwcm9tLT5PZW1GcnVGb3JtYXQ7CisJCQlwb2VtZnJ1ID0gJnBlZXByb20tPk9lbUZydTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FyZC0+Y29uZmlnLkVlcHJvbVZhbGlkID0gRkFMU0U7CisKKwkJLyogIHNlZSBpZiB0aGUgRUVQUk9NIGlzIHZhbGlkIGJ5IGNoZWNraW5nIGl0J3MgY2hlY2tzdW0gKi8KKwkJaWYgKChlZWNvZGVzaXplIDw9IE1BWF9FRUNPREVfU0laRSkgJiYKKwkJICAgIChlZWNvZGVzaXplID49IE1JTl9FRUNPREVfU0laRSkpIHsKKworCQkJZWVfY2hrc3VtID0KKwkJCSAgICAqKHUxNiAqKSAoKGNoYXIgKikgcGVlcHJvbSArIChlZWNvZGVzaXplIC0gMikpOworCQkJLyoKKwkJCSAgICBjYWxjdWxhdGUgdGhlIEVFUFJPTSBjaGVja3N1bQorCQkJKi8KKwkJCWNhbGNfY2hrc3VtID0KKwkJCSAgICB+c2xpY19lZXByb21fY2tzdW0oKGNoYXIgKikgcGVlcHJvbSwKKwkJCQkJICAgICAgIChlZWNvZGVzaXplIC0gMikpOworCQkJLyoKKwkJCSAgICBpZiB0aGUgdWNkb2UgY2hrc3VtIGZsYWcgYml0IHdvcmtlZCwKKwkJCSAgICB3ZSB3b3VsZG4ndCBuZWVkIHRoaXMgc2hpdAorCQkJKi8KKwkJCWlmIChlZV9jaGtzdW0gPT0gY2FsY19jaGtzdW0pCisJCQkJY2FyZC0+Y29uZmlnLkVlcHJvbVZhbGlkID0gVFJVRTsKKwkJfQorCQkvKiAgY29weSBpbiB0aGUgRFJBTSBzaXplICovCisJCWNhcmQtPmNvbmZpZy5EcmFtU2l6ZSA9IGRyYW1zaXplOworCisJCS8qICBjb3B5IGluIHRoZSBNQUMgYWRkcmVzcyhlcykgKi8KKwkJZm9yIChpID0gMDsgaSA8IG1hY2FkZHJzOyBpKyspIHsKKwkJCW1lbWNweSgmY2FyZC0+Y29uZmlnLk1hY0luZm9baV0sCisJCQkgICAgICAgJnBtYWNbaV0sIHNpemVvZihzdHJ1Y3Qgc2xpY19jb25maWdfbWFjKSk7CisJCX0KKy8qICAgICAgREJHX01TRyAoIiVzIEVFUFJPTSBDaGVja3N1bSBHb29kPyAlZCAgTWFjQWRkcmVzc1xuIixfX2Z1bmNfXywKKwkJY2FyZC0+Y29uZmlnLkVlcHJvbVZhbGlkKTsgKi8KKworCQkvKiAgY29weSB0aGUgQWxhY3JpdGVjaCBGUlUgaW5mb3JtYXRpb24gKi8KKwkJY2FyZC0+Y29uZmlnLkZydUZvcm1hdCA9IGZydWZvcm1hdDsKKwkJbWVtY3B5KCZjYXJkLT5jb25maWcuQXRrRnJ1LCBwYXRrZnJ1LAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBhdGtfZnJ1KSk7CisKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2xpY19lZXByb20pLAorCQkJCSAgICBwZWVwcm9tLCBwaHlzX2NvbmZpZyk7CisJCURCR19NU0cKKwkJICAgICgic2xpY29zczogJXMgYWRhcHRlciVkIFslcF0gc2l6ZVsleF0gRlJFRSBwZWVwcm9tWyVwXSBcCisJCSAgICAgcGh5c19jb25maWdbJXBdXG4iLAorCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLT5wb3J0LCBhZGFwdGVyLAorCQkgICAgICh1MzIpIHNpemVvZihzdHJ1Y3Qgc2xpY19lZXByb20pLCBwZWVwcm9tLAorCQkgICAgICh2b2lkICopIHBoeXNfY29uZmlnKTsKKworCQlpZiAoKCFjYXJkLT5jb25maWcuRWVwcm9tVmFsaWQpICYmCisJCSAgICAoYWRhcHRlci0+cmVnX3BhcmFtcy5mYWlsX29uX2JhZF9lZXByb20pKSB7CisJCQlXUklURV9SRUc2NChhZGFwdGVyLAorCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfaXNwLAorCQkJCSAgICAwLCBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgMCwgRkxVU0gpOworCQkJREJHX0VSUk9SCisJCQkgICAgKCJ1bnN1cHBvcnRlZCBDT05GSUdVUkFUSU9OICBFRVBST00gaW52YWxpZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWNhcmQtPmNvbmZpZ19zZXQgPSAxOworCX0KKworCWlmIChzbGljX2NhcmRfZG93bmxvYWRfZ2JyY3YoYWRhcHRlcikpIHsKKwkJREJHX0VSUk9SKCIlcyB1bmFibGUgdG8gZG93bmxvYWQgR0IgcmVjZWl2ZSBtaWNyb2NvZGVcbiIsCisJCQkgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHNsaWNfZ2xvYmFsLmR5bmFtaWNfaW50YWdnKSB7CisJCURCR19NU0cKKwkJICAgICgiRHluYW1pYyBJbnRlcnJ1cHQgQWdncmVnYXRpb25bRU5BQkxFRF06IHNsaWMlZCBcCisJCSAgICAgU0VUIGludGFnZyB0byAlZFxuIiwKKwkJICAgICBjYXJkLT5jYXJkbnVtLCAwKTsKKwkJc2xpY19pbnRhZ2dfc2V0KGFkYXB0ZXIsIDApOworCX0gZWxzZSB7CisJCXNsaWNfaW50YWdnX3NldChhZGFwdGVyLCBpbnRhZ2dfZGVsYXkpOworCQlEQkdfTVNHCisJCSAgICAoIkR5bmFtaWMgSW50ZXJydXB0IEFnZ3JlZ2F0aW9uW0RJU0FCTEVEXTogc2xpYyVkIFwKKwkJICAgICBTRVQgaW50YWdnIHRvICVkXG4iLAorCQkgICAgIGNhcmQtPmNhcmRudW0sIGludGFnZ19kZWxheSk7CisJfQorCisJLyoKKwkgKiAgSW5pdGlhbGl6ZSBwaW5nIHN0YXR1cyB0byAib2siCisJICovCisJY2FyZC0+cGluZ3N0YXR1cyA9IElTUl9QSU5HTUFTSzsKKworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisJaWYgKCFjYXJkLT5kdW1wYnVmZmVyKSB7CisJCWNhcmQtPmR1bXBidWZmZXIgPSBrbWFsbG9jKERVTVBfUEFHRV9TSVpFLCBHRlBfQVRPTUlDKTsKKworCQlBU1NFUlQoY2FyZC0+ZHVtcGJ1ZmZlcik7CisJCWlmIChjYXJkLT5kdW1wYnVmZmVyID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyoKKwkgKiAgU21lYXIgdGhlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIGFuZCB0aGVuIG9idGFpbgorCSAqICB0aGUgUEhZU0lDQUwgYWRkcmVzcyBvZiB0aGlzIHN0cnVjdHVyZQorCSAqLworCW1lbXNldChjYXJkLT5kdW1wYnVmZmVyLCAwLCBEVU1QX1BBR0VfU0laRSk7CisJY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzID0gdmlydF90b19idXMoY2FyZC0+ZHVtcGJ1ZmZlcik7CisJY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzaCA9IFNMSUNfR0VUX0FERFJfSElHSChjYXJkLT5kdW1wYnVmZmVyX3BoeXMpOworCWNhcmQtPmR1bXBidWZmZXJfcGh5c2wgPSBTTElDX0dFVF9BRERSX0xPVyhjYXJkLT5kdW1wYnVmZmVyX3BoeXMpOworCisJLyoKKwkgKiAgQWxsb2NhdGUgQ09NTUFORCBCVUZGRVIKKwkgKi8KKwlpZiAoIWNhcmQtPmNtZGJ1ZmZlcikgeworCQljYXJkLT5jbWRidWZmZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHVtcF9jbWQpLCBHRlBfQVRPTUlDKTsKKworCQlBU1NFUlQoY2FyZC0+Y21kYnVmZmVyKTsKKwkJaWYgKGNhcmQtPmNtZGJ1ZmZlciA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8qCisJICogIFNtZWFyIHRoZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBhbmQgdGhlbiBvYnRhaW4KKwkgKiAgdGhlIFBIWVNJQ0FMIGFkZHJlc3Mgb2YgdGhpcyBzdHJ1Y3R1cmUKKwkgKi8KKwltZW1zZXQoY2FyZC0+Y21kYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGR1bXBfY21kKSk7CisJY2FyZC0+Y21kYnVmZmVyX3BoeXMgPSB2aXJ0X3RvX2J1cyhjYXJkLT5jbWRidWZmZXIpOworCWNhcmQtPmNtZGJ1ZmZlcl9waHlzaCA9IFNMSUNfR0VUX0FERFJfSElHSChjYXJkLT5jbWRidWZmZXJfcGh5cyk7CisJY2FyZC0+Y21kYnVmZmVyX3BoeXNsID0gU0xJQ19HRVRfQUREUl9MT1coY2FyZC0+Y21kYnVmZmVyX3BoeXMpOworI2VuZGlmCisKKwkvKgorCSAqIExhc3RseSwgbWFyayBvdXIgY2FyZCBzdGF0ZSBhcyB1cCBhbmQgcmV0dXJuIHN1Y2Nlc3MKKwkgKi8KKwljYXJkLT5zdGF0ZSA9IENBUkRfVVA7CisJY2FyZC0+cmVzZXRfaW5fcHJvZ3Jlc3MgPSAwOworCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVQgY2FyZFslcF0gYWRhcHRlclslcF0gY2FyZC0+c3RhdGVbJXhdXG4iLAorCQlfX2Z1bmNfXywgY2FyZCwgYWRhcHRlciwgY2FyZC0+c3RhdGUpOworCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgdTMyIHNsaWNfY2FyZF9sb2NhdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gc2xpY19nbG9iYWwuc2xpY19jYXJkOworCXN0cnVjdCBwaHlzY2FyZCAqcGh5c2NhcmQgPSBzbGljX2dsb2JhbC5waHlzX2NhcmQ7CisJdXNob3J0IGNhcmRfaG9zdGlkOworCXUxNiBfX2lvbWVtICpob3N0aWRfcmVnOworCXVpbnQgaTsKKwl1aW50IHJkaG9zdGlkX29mZnNldCA9IDA7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBhZGFwdGVyWyVwXSBzbG90WyV4XSBidXNbJXhdIHBvcnRbJXhdXG4iLAorCQlfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+c2xvdG51bWJlciwgYWRhcHRlci0+YnVzbnVtYmVyLAorCQlhZGFwdGVyLT5wb3J0KTsKKworCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKKwljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKKwkJcmRob3N0aWRfb2Zmc2V0ID0gU0xJQ19SREhPU1RJRF8yR0I7CisJCWJyZWFrOworCWNhc2UgU0xJQ18xR0JfREVWSUNFX0lEOgorCQlyZGhvc3RpZF9vZmZzZXQgPSBTTElDX1JESE9TVElEXzFHQjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQVNTRVJUKDApOworCQlicmVhazsKKwl9CisKKwlob3N0aWRfcmVnID0KKwkgICAgKHUxNiBfX2lvbWVtICopICgoKHU4IF9faW9tZW0gKikgKGFkYXB0ZXItPnNsaWNfcmVncykpICsKKwkgICAgcmRob3N0aWRfb2Zmc2V0KTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAqaG9zdGlkX3JlZ1slcF0gPT0gIiwgX19mdW5jX18sIGhvc3RpZF9yZWcpOworCisJLyogcmVhZCB0aGUgMTYgYml0IGhvc3RpZCBmcm9tIFNSQU0gKi8KKwljYXJkX2hvc3RpZCA9ICh1c2hvcnQpIHJlYWR3KGhvc3RpZF9yZWcpOworCURCR19NU0coIiBjYXJkX2hvc3RpZFsleF1cbiIsIGNhcmRfaG9zdGlkKTsKKworCS8qIEluaXRpYWxpemUgYSBuZXcgY2FyZCBzdHJ1Y3R1cmUgaWYgbmVlZCBiZSAqLworCWlmIChjYXJkX2hvc3RpZCA9PSBTTElDX0hPU1RJRF9ERUZBVUxUKSB7CisJCWNhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2xpY2NhcmQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGNhcmQgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWNhcmQtPm5leHQgPSBzbGljX2dsb2JhbC5zbGljX2NhcmQ7CisJCXNsaWNfZ2xvYmFsLnNsaWNfY2FyZCA9IGNhcmQ7CisjaWYgREJHCisJCWlmIChhZGFwdGVyLT5kZXZpZCA9PSBTTElDXzJHQl9ERVZJQ0VfSUQpIHsKKwkJCURCR19NU0cKKwkJCSAgICAoIlNMSUNPU1MgPT0+IEluaXRpYWxpemUgMiBQb3J0IEdpZ2FiaXQgU2VydmVyIFwKKwkJCSAgICAgYW5kIFN0b3JhZ2UgQWNjZWxlcmF0b3JcbiIpOworCQl9IGVsc2UgeworCQkJREJHX01TRworCQkJICAgICgiU0xJQ09TUyA9PT4gSW5pdGlhbGl6ZSAxIFBvcnQgR2lnYWJpdCBTZXJ2ZXIgXAorCQkJICAgICBhbmQgU3RvcmFnZSBBY2NlbGVyYXRvclxuIik7CisJCX0KKyNlbmRpZgorCQljYXJkLT5idXNudW1iZXIgPSBhZGFwdGVyLT5idXNudW1iZXI7CisJCWNhcmQtPnNsb3RudW1iZXIgPSBhZGFwdGVyLT5zbG90bnVtYmVyOworCisJCS8qIEZpbmQgYW4gYXZhaWxhYmxlIGNhcmRudW0gKi8KKwkJZm9yIChpID0gMDsgaSA8IFNMSUNfTUFYX0NBUkRTOyBpKyspIHsKKwkJCWlmIChzbGljX2dsb2JhbC5jYXJkbnVtaW51c2VbaV0gPT0gMCkgeworCQkJCXNsaWNfZ2xvYmFsLmNhcmRudW1pbnVzZVtpXSA9IDE7CisJCQkJY2FyZC0+Y2FyZG51bSA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc2xpY19nbG9iYWwubnVtX3NsaWNfY2FyZHMrKzsKKwkJREJHX01TRygiXG5DQVJETlVNID09ICVkICBUb3RhbCAlZCAgQ2FyZFslcF1cblxuIiwKKwkJCWNhcmQtPmNhcmRudW0sIHNsaWNfZ2xvYmFsLm51bV9zbGljX2NhcmRzLCBjYXJkKTsKKworCQlzbGljX2RlYnVnX2NhcmRfY3JlYXRlKGNhcmQpOworCX0gZWxzZSB7CisJCURCR19NU0cKKwkJICAgICgic2xpY29zczogJXMgQ0FSRCBhbHJlYWR5IGFsbG9jYXRlZCwgZmluZCB0aGUgXAorCQkgICAgIGNvcnJlY3QgY2FyZFxuIiwgX19mdW5jX18pOworCQkvKiBDYXJkIGV4aXN0cywgZmluZCB0aGUgY2FyZCB0aGlzIGFkYXB0ZXIgYmVsb25ncyB0byAqLworCQl3aGlsZSAoY2FyZCkgeworCQkJREJHX01TRworCQkJICAgICgic2xpY29zczogJXMgY2FyZFslcF0gc2xvdFsleF0gYnVzWyV4XSBcCisJCQkgICAgICBhZGFwdHBvcnRbJXBdIGhvc3RpZFsleF0gY2FyZG51bVsleF1cbiIsCisJCQkgICAgIF9fZnVuY19fLCBjYXJkLCBjYXJkLT5zbG90bnVtYmVyLAorCQkJICAgICBjYXJkLT5idXNudW1iZXIsIGNhcmQtPmFkYXB0ZXJbYWRhcHRlci0+cG9ydF0sCisJCQkgICAgIGNhcmRfaG9zdGlkLCBjYXJkLT5jYXJkbnVtKTsKKworCQkJaWYgKGNhcmQtPmNhcmRudW0gPT0gY2FyZF9ob3N0aWQpCisJCQkJYnJlYWs7CisJCQljYXJkID0gY2FyZC0+bmV4dDsKKwkJfQorCX0KKworCUFTU0VSVChjYXJkKTsKKwlpZiAoIWNhcmQpCisJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKKwkvKiBQdXQgdGhlIGFkYXB0ZXIgaW4gdGhlIGNhcmQncyBhZGFwdGVyIGxpc3QgKi8KKwlBU1NFUlQoY2FyZC0+YWRhcHRlclthZGFwdGVyLT5wb3J0XSA9PSBOVUxMKTsKKwlpZiAoIWNhcmQtPmFkYXB0ZXJbYWRhcHRlci0+cG9ydF0pIHsKKwkJY2FyZC0+YWRhcHRlclthZGFwdGVyLT5wb3J0XSA9IGFkYXB0ZXI7CisJCWFkYXB0ZXItPmNhcmQgPSBjYXJkOworCX0KKworCWNhcmQtPmNhcmRfc2l6ZSA9IDE7CS8qIG9uZSBwb3J0IHBlciAqbG9naWNhbCogY2FyZCAqLworCisJd2hpbGUgKHBoeXNjYXJkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBTTElDX01BWF9QT1JUUzsgaSsrKSB7CisJCQlpZiAoIXBoeXNjYXJkLT5hZGFwdGVyW2ldKQorCQkJCWNvbnRpbnVlOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJCUFTU0VSVChpICE9IFNMSUNfTUFYX1BPUlRTKTsKKwkJaWYgKHBoeXNjYXJkLT5hZGFwdGVyW2ldLT5zbG90bnVtYmVyID09IGFkYXB0ZXItPnNsb3RudW1iZXIpCisJCQlicmVhazsKKwkJcGh5c2NhcmQgPSBwaHlzY2FyZC0+bmV4dDsKKwl9CisJaWYgKCFwaHlzY2FyZCkgeworCQkvKiBubyBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGZvciB0aGlzIHBoeXNpY2FsIGNhcmQgeWV0ICovCisJCXBoeXNjYXJkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBoeXNjYXJkICopLCBHRlBfQVRPTUlDKTsKKwkJQVNTRVJUKHBoeXNjYXJkKTsKKwkJbWVtc2V0KHBoeXNjYXJkLCAwLCBzaXplb2Yoc3RydWN0IHBoeXNjYXJkICopKTsKKworCQlEQkdfTVNHCisJCSAgICAoIlxuJXMgQWxsb2NhdGUgYSBQSFlTSUNBTGNhcmQ6XG4gICAgUEhZU0lDQUxfQ2FyZFslcF1cblwKKwkJICAgICBMb2dpY2FsQ2FyZCAgWyVwXVxuICAgIGFkYXB0ZXIgICAgICBbJXBdXG4iLAorCQkgICAgIF9fZnVuY19fLCBwaHlzY2FyZCwgY2FyZCwgYWRhcHRlcik7CisKKwkJcGh5c2NhcmQtPm5leHQgPSBzbGljX2dsb2JhbC5waHlzX2NhcmQ7CisJCXNsaWNfZ2xvYmFsLnBoeXNfY2FyZCA9IHBoeXNjYXJkOworCQlwaHlzY2FyZC0+YWRhcHRlcnNfYWxsb2NkID0gMTsKKwl9IGVsc2UgeworCQlwaHlzY2FyZC0+YWRhcHRlcnNfYWxsb2NkKys7CisJfQorCS8qIE5vdGUgLSB0aGlzIGlzIFpFUk8gcmVsYXRpdmUgKi8KKwlhZGFwdGVyLT5waHlzcG9ydCA9IHBoeXNjYXJkLT5hZGFwdGVyc19hbGxvY2QgLSAxOworCisJQVNTRVJUKHBoeXNjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBoeXNwb3J0XSA9PSBOVUxMKTsKKwlwaHlzY2FyZC0+YWRhcHRlclthZGFwdGVyLT5waHlzcG9ydF0gPSBhZGFwdGVyOworCWFkYXB0ZXItPnBoeXNjYXJkID0gcGh5c2NhcmQ7CisJREJHX01TRygiICAgIFBIWVNJQ0FMX1BvcnQgJWQgICAgTG9naWNhbF9Qb3J0ICAlZFxuIiwgYWRhcHRlci0+cGh5c3BvcnQsCisJCWFkYXB0ZXItPnBvcnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfc29mdF9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+Y2FyZC0+c3RhdGUgPT0gQ0FSRF9VUCkgeworCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBRVUlFU0NFIGFkYXB0ZXJbJXBdIGNhcmRbJXBdIGRldmlkWyV4XVxuIiwKKwkJCV9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5jYXJkLCBhZGFwdGVyLT5kZXZpZCk7CisJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfcXVpZXNjZSwgMCwgRkxVU0gpOworCQltZGVsYXkoMSk7CisJfQorLyogICAgICBEQkdfTVNHICgic2xpY29zczogJXMgKCVzKSBhZGFwdGVyWyVwXSBjYXJkWyVwXSBkZXZpZFsleF1cbiIsCisJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlciwgYWRhcHRlci0+Y2FyZCwKKwkgICBhZGFwdGVyLT5kZXZpZCk7ICovCisKKwlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3Jlc2V0LCBTTElDX1JFU0VUX01BR0lDLCBGTFVTSCk7CisJbWRlbGF5KDEpOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19zZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgbGlua2NoYW5nZSkKK3sKKwl1MzIgdmFsdWU7CisJdTMyIFJjclJlc2V0OworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCisJREJHX01TRygic2xpY29zczogJXMgKCVzKSBzbGljX2ludGVyZmFjZV9lbmFibGVbJXBdKCVkKVxuIiwKKwkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlciwKKwkJYWRhcHRlci0+Y2FyZGluZGV4KTsKKworCWlmIChsaW5rY2hhbmdlKSB7CisJCS8qIFNldHVwIE1BQyAqLworCQlzbGljX21hY19jb25maWcoYWRhcHRlcik7CisJCVJjclJlc2V0ID0gR1JDUl9SRVNFVDsKKwl9IGVsc2UgeworCQlzbGljX21hY19hZGRyZXNzX2NvbmZpZyhhZGFwdGVyKTsKKwkJUmNyUmVzZXQgPSAwOworCX0KKworCWlmIChhZGFwdGVyLT5saW5rZHVwbGV4ID09IExJTktfRlVMTEQpIHsKKwkJLyogc2V0dXAgeG10Y2ZnICovCisJCXZhbHVlID0gKEdYQ1JfUkVTRVQgfAkvKiBBbHdheXMgcmVzZXQgICAgICovCisJCQkgR1hDUl9YTVRFTiB8CS8qIEVuYWJsZSB0cmFuc21pdCAgKi8KKwkJCSBHWENSX1BBVVNFRU4pOwkvKiBFbmFibGUgcGF1c2UgICAgICovCisKKwkJREJHX01TRygic2xpY29zczogRkRYIGFkYXB0WyVwXSBzZXQgeG10Y2ZnIHRvIFsleF1cbiIsIGFkYXB0ZXIsCisJCQl2YWx1ZSk7CisJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CisKKwkJLyogU2V0dXAgcmN2Y2ZnIGxhc3QgKi8KKwkJdmFsdWUgPSAoUmNyUmVzZXQgfAkvKiBSZXNldCwgaWYgbGlua2NoYW5nZSAqLworCQkJIEdSQ1JfQ1RMRU4gfAkvKiBFbmFibGUgQ1RMIGZyYW1lcyAgICAqLworCQkJIEdSQ1JfQUREUkFFTiB8CS8qIEFkZHJlc3MgQSBlbmFibGUgICAgICovCisJCQkgR1JDUl9SQ1ZCQUQgfAkvKiBSY3YgYmFkIGZyYW1lcyAgICAgICAqLworCQkJIChHUkNSX0hBU0hTSVpFIDw8IEdSQ1JfSEFTSFNJWkVfU0hJRlQpKTsKKwl9IGVsc2UgeworCQkvKiBzZXR1cCB4bXRjZmcgKi8KKwkJdmFsdWUgPSAoR1hDUl9SRVNFVCB8CS8qIEFsd2F5cyByZXNldCAgICAgKi8KKwkJCSBHWENSX1hNVEVOKTsJLyogRW5hYmxlIHRyYW5zbWl0ICAqLworCisJCURCR19NU0coInNsaWNvc3M6IEhEWCBhZGFwdFslcF0gc2V0IHhtdGNmZyB0byBbJXhdXG4iLCBhZGFwdGVyLAorCQkJdmFsdWUpOworCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3d4Y2ZnLCB2YWx1ZSwgRkxVU0gpOworCisJCS8qIFNldHVwIHJjdmNmZyBsYXN0ICovCisJCXZhbHVlID0gKFJjclJlc2V0IHwJLyogUmVzZXQsIGlmIGxpbmtjaGFuZ2UgKi8KKwkJCSBHUkNSX0FERFJBRU4gfAkvKiBBZGRyZXNzIEEgZW5hYmxlICAgICAqLworCQkJIEdSQ1JfUkNWQkFEIHwJLyogUmN2IGJhZCBmcmFtZXMgICAgICAgKi8KKwkJCSAoR1JDUl9IQVNIU0laRSA8PCBHUkNSX0hBU0hTSVpFX1NISUZUKSk7CisJfQorCisJaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX0RPV04pIHsKKwkJLyogT25seSBlbmFibGUgcmVjZWl2ZSBpZiB3ZSBhcmUgcmVzdGFydGluZyBvciBydW5uaW5nICovCisJCXZhbHVlIHw9IEdSQ1JfUkNWRU47CisJfQorCisJaWYgKGFkYXB0ZXItPm1hY29wdHMgJiBNQUNfUFJPTUlTQykKKwkJdmFsdWUgfD0gR1JDUl9SQ1ZBTEw7CisKKwlEQkdfTVNHKCJzbGljb3NzOiBhZGFwdFslcF0gc2V0IHJjdmNmZyB0byBbJXhdXG4iLCBhZGFwdGVyLCB2YWx1ZSk7CisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193cmNmZywgdmFsdWUsIEZMVVNIKTsKK30KKworLyoKKyAqICBUdXJuIG9mZiBSQ1YgYW5kIFhNVCwgcG93ZXIgZG93biBQSFkKKyAqLworc3RhdGljIHZvaWQgc2xpY19jb25maWdfY2xlYXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHZhbHVlOworCXUzMiBwaHlfY29uZmlnOworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCisJLyogU2V0dXAgeG10Y2ZnICovCisJdmFsdWUgPSAoR1hDUl9SRVNFVCB8CS8qIEFsd2F5cyByZXNldCAqLworCQkgR1hDUl9QQVVTRUVOKTsJLyogRW5hYmxlIHBhdXNlICovCisKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3d4Y2ZnLCB2YWx1ZSwgRkxVU0gpOworCisJdmFsdWUgPSAoR1JDUl9SRVNFVCB8CS8qIEFsd2F5cyByZXNldCAgICAgICovCisJCSBHUkNSX0NUTEVOIHwJLyogRW5hYmxlIENUTCBmcmFtZXMgKi8KKwkJIEdSQ1JfQUREUkFFTiB8CS8qIEFkZHJlc3MgQSBlbmFibGUgICovCisJCSAoR1JDUl9IQVNIU0laRSA8PCBHUkNSX0hBU0hTSVpFX1NISUZUKSk7CisKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyY2ZnLCB2YWx1ZSwgRkxVU0gpOworCisJLyogcG93ZXIgZG93biBwaHkgKi8KKwlwaHlfY29uZmlnID0gKE1JSUNSX1JFR19QQ1IgfCAoUENSX1BPV0VSRE9XTikpOworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19nZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjb25maWcsCisJCQkJCQkJdTMyIGNvbmZpZ19oKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBzbGljX3Vwcl9yZXF1ZXN0KGFkYXB0ZXIsCisJCQkJICBTTElDX1VQUl9SQ09ORklHLAorCQkJCSAgKHUzMikgY29uZmlnLCAodTMyKSBjb25maWdfaCwgMCwgMCk7CisJQVNTRVJUKHN0YXR1cyA9PSAwKTsKK30KKworc3RhdGljIHZvaWQgc2xpY19tYWNfYWRkcmVzc19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHZhbHVlOworCXUzMiB2YWx1ZTI7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisKKwl2YWx1ZSA9ICoodTMyICopICZhZGFwdGVyLT5jdXJybWFjYWRkclsyXTsKKwl2YWx1ZSA9IG50b2hsKHZhbHVlKTsKKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dyYWRkcmFsLCB2YWx1ZSwgRkxVU0gpOworCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYmwsIHZhbHVlLCBGTFVTSCk7CisKKwl2YWx1ZTIgPSAodTMyKSAoKGFkYXB0ZXItPmN1cnJtYWNhZGRyWzBdIDw8IDggfAorCQkJICAgICBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSkgJiAweEZGRkYpOworCisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193cmFkZHJhaCwgdmFsdWUyLCBGTFVTSCk7CisJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193cmFkZHJiaCwgdmFsdWUyLCBGTFVTSCk7CisKKwlEQkdfTVNHKCIlcyB2YWx1ZTFbJXhdIHZhbHVlMlsleF0gQ2FsbCBzbGljX21jYXN0X3NldF9tYXNrXG4iLAorCQlfX2Z1bmNfXywgdmFsdWUsIHZhbHVlMik7CisJc2xpY19kYmdfbWFjYWRkcnMoYWRhcHRlcik7CisKKwkvKiBXcml0ZSBvdXIgbXVsdGljYXN0IG1hc2sgb3V0IHRvIHRoZSBjYXJkLiAgVGhpcyBpcyBkb25lICovCisJLyogaGVyZSBpbiBhZGRpdGlvbiB0byB0aGUgc2xpY19tY2FzdF9hZGRyX3NldCByb3V0aW5lICAgICAqLworCS8qIGJlY2F1c2UgQUxMX01DQVNUIG1heSBoYXZlIGJlZW4gZW5hYmxlZCBvciBkaXNhYmxlZCAgICAgKi8KKwlzbGljX21jYXN0X3NldF9tYXNrKGFkYXB0ZXIpOworfQorCitzdGF0aWMgdm9pZCBzbGljX21hY19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHZhbHVlOworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworCisJLyogU2V0dXAgR01BQyBnYXBzICovCisJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwMDBNQikgeworCQl2YWx1ZSA9ICgoR01DUl9HQVBCQl8xMDAwIDw8IEdNQ1JfR0FQQkJfU0hJRlQpIHwKKwkJCSAoR01DUl9HQVBSMV8xMDAwIDw8IEdNQ1JfR0FQUjFfU0hJRlQpIHwKKwkJCSAoR01DUl9HQVBSMl8xMDAwIDw8IEdNQ1JfR0FQUjJfU0hJRlQpKTsKKwl9IGVsc2UgeworCQl2YWx1ZSA9ICgoR01DUl9HQVBCQl8xMDAgPDwgR01DUl9HQVBCQl9TSElGVCkgfAorCQkJIChHTUNSX0dBUFIxXzEwMCA8PCBHTUNSX0dBUFIxX1NISUZUKSB8CisJCQkgKEdNQ1JfR0FQUjJfMTAwIDw8IEdNQ1JfR0FQUjJfU0hJRlQpKTsKKwl9CisKKwkvKiBlbmFibGUgR01JSSAqLworCWlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xMDAwTUIpCisJCXZhbHVlIHw9IEdNQ1JfR0JJVDsKKworCS8qIGVuYWJsZSBmdWxsZHVwbGV4ICovCisJaWYgKChhZGFwdGVyLT5saW5rZHVwbGV4ID09IExJTktfRlVMTEQpCisJICAgIHx8IChhZGFwdGVyLT5tYWNvcHRzICYgTUFDX0xPT1BCQUNLKSkgeworCQl2YWx1ZSB8PSBHTUNSX0ZVTExEOworCX0KKworCS8qIHdyaXRlIG1hYyBjb25maWcgKi8KKwlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dtY2ZnLCB2YWx1ZSwgRkxVU0gpOworCisJLyogc2V0dXAgbWFjIGFkZHJlc3NlcyAqLworCXNsaWNfbWFjX2FkZHJlc3NfY29uZmlnKGFkYXB0ZXIpOworfQorCitzdGF0aWMgYm9vbCBzbGljX21hY19maWx0ZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQlzdHJ1Y3QgZXRoZXJfaGVhZGVyICpldGhlcl9mcmFtZSkKK3sKKwl1MzIgb3B0cyA9IGFkYXB0ZXItPm1hY29wdHM7CisJdTMyICpkaG9zdDQgPSAodTMyICopJmV0aGVyX2ZyYW1lLT5ldGhlcl9kaG9zdFswXTsKKwl1MTYgKmRob3N0MiA9ICh1MTYgKikmZXRoZXJfZnJhbWUtPmV0aGVyX2Rob3N0WzRdOworCWJvb2wgZXF1YWxhZGRyOworCisJaWYgKG9wdHMgJiBNQUNfUFJPTUlTQykgeworCQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIFBST01JU0NVT1VTLiBBY2NlcHQgZnJhbWVcbiIsCisJCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJaWYgKCgqZGhvc3Q0ID09IDB4RkZGRkZGRkYpICYmICgqZGhvc3QyID09IDB4RkZGRikpIHsKKwkJaWYgKG9wdHMgJiBNQUNfQkNBU1QpIHsKKwkJCWFkYXB0ZXItPnJjdl9icm9hZGNhc3RzKys7CisJCQlyZXR1cm4gVFJVRTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCX0KKworCWlmIChldGhlcl9mcmFtZS0+ZXRoZXJfZGhvc3RbMF0gJiAweDAxKSB7CisJCWlmIChvcHRzICYgTUFDX0FMTE1DQVNUKSB7CisJCQlhZGFwdGVyLT5yY3ZfbXVsdGljYXN0cysrOworCQkJYWRhcHRlci0+c3RhdHMubXVsdGljYXN0Kys7CisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCQlpZiAob3B0cyAmIE1BQ19NQ0FTVCkgeworCQkJc3RydWN0IG1jYXN0X2FkZHJlc3MgKm1jYWRkciA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7CisKKwkJCXdoaWxlIChtY2FkZHIpIHsKKwkJCQlFVEhFUl9FUV9BRERSKG1jYWRkci0+YWRkcmVzcywKKwkJCQkJICAgICAgZXRoZXJfZnJhbWUtPmV0aGVyX2Rob3N0LAorCQkJCQkgICAgICBlcXVhbGFkZHIpOworCQkJCWlmIChlcXVhbGFkZHIpIHsKKwkJCQkJYWRhcHRlci0+cmN2X211bHRpY2FzdHMrKzsKKwkJCQkJYWRhcHRlci0+c3RhdHMubXVsdGljYXN0Kys7CisJCQkJCXJldHVybiBUUlVFOworCQkJCX0KKwkJCQltY2FkZHIgPSBtY2FkZHItPm5leHQ7CisJCQl9CisJCQlyZXR1cm4gRkFMU0U7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gRkFMU0U7CisJCX0KKwl9CisJaWYgKG9wdHMgJiBNQUNfRElSRUNURUQpIHsKKwkJYWRhcHRlci0+cmN2X3VuaWNhc3RzKys7CisJCXJldHVybiBUUlVFOworCX0KKwlyZXR1cm4gRkFMU0U7CisKK30KKworc3RhdGljIGludCBzbGljX21hY19zZXRfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwdHIpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHB0cjsKKworCURCR19NU0coIiVzIEVOVEVSICglcylcbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FQlVTWTsKKwlpZiAoIWFkYXB0ZXIpCisJCXJldHVybiAtRUJVU1k7CisJREJHX01TRygic2xpY29zczogJXMgKCVzKSBjdXJyICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5jdXJybWFjYWRkclswXSwKKwkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdLAorCQlhZGFwdGVyLT5jdXJybWFjYWRkclszXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNF0sCisJCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzVdKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5KGFkYXB0ZXItPmN1cnJtYWNhZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIG5ldyAlMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWFxuIiwKKwkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0sCisJCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdLCBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSwKKwkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdLAorCQlhZGFwdGVyLT5jdXJybWFjYWRkcls1XSk7CisKKwlzbGljX2NvbmZpZ19zZXQoYWRhcHRlciwgVFJVRSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgc2xpY190aW1lcl9nZXRfc3RhdHMKKyAqCisgKiBUaW1lciBmdW5jdGlvbiB1c2VkIHRvIHN1Y2sgdGhlIHN0YXRpc3RpY3Mgb3V0IG9mIHRoZSBjYXJkIGV2ZXJ5CisgKiA1MCBzZWNvbmRzIG9yIHdoYXRldmVyIFNUQVRTX1RJTUVSX0lOVEVSVkFMIGlzIHNldCB0by4KKyAqCisgKi8KKyNpZiBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECitzdGF0aWMgdm9pZCBzbGljX3RpbWVyX2dldF9zdGF0cyh1bG9uZyBkZXYpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IHNsaWNjYXJkICpjYXJkOworCXN0cnVjdCBzbGljX3NobWVtICpwc2htZW07CisKKwlBU1NFUlQoZGV2KTsKKwlhZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopKChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldiktPnByaXY7CisJQVNTRVJUKGFkYXB0ZXIpOworCWNhcmQgPSBhZGFwdGVyLT5jYXJkOworCUFTU0VSVChjYXJkKTsKKworCWlmICgoY2FyZC0+c3RhdGUgPT0gQ0FSRF9VUCkgJiYKKwkgICAgKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX1VQKSAmJiAoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfVVApKSB7CisJCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQlzbGljX3Vwcl9yZXF1ZXN0KGFkYXB0ZXIsCisJCQkJIFNMSUNfVVBSX1NUQVRTLAorCQkJCSBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5pbmljc3RhdHMpLAorCQkJCSBTTElDX0dFVF9BRERSX0hJR0goJnBzaG1lbS0+aW5pY3N0YXRzKSwgMCwgMCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19YODYpCisJCXNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKKwkJCQkgU0xJQ19VUFJfU1RBVFMsCisJCQkJICh1MzIpICZwc2htZW0tPmluaWNzdGF0cywgMCwgMCwgMCk7CisjZWxzZQorCQlTdG9wIGNvbXBpbGF0aW9uOworI2VuZGlmCisJfSBlbHNlIHsKKy8qCQlEQkdfTVNHICgic2xpY29zczogJXMgYWRhcHRlclslcF0gbGlua3N0YXRlWyV4XSBOT1QgVVAhXG4iLAorCQkJX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPmxpbmtzdGF0ZSk7ICovCisJfQorCWFkYXB0ZXItPnN0YXRzdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKworCSAgICBTTElDX1NFQ1NfVE9fSklGRlMoU1RBVFNfVElNRVJfSU5URVJWQUwpOworCWFkZF90aW1lcigmYWRhcHRlci0+c3RhdHN0aW1lcik7Cit9CisjZW5kaWYKK3N0YXRpYyB2b2lkIHNsaWNfdGltZXJfbG9hZF9jaGVjayh1bG9uZyBjYXJkYWRkcikKK3sKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSAoc3RydWN0IHNsaWNjYXJkICopY2FyZGFkZHI7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjYXJkLT5tYXN0ZXI7CisJdTMyIGxvYWQgPSBjYXJkLT5ldmVudHM7CisJdTMyIGxldmVsID0gMDsKKworCWlmICgoYWRhcHRlcikgJiYgKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX1VQKSAmJgorCSAgICAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9VUCkgJiYgKHNsaWNfZ2xvYmFsLmR5bmFtaWNfaW50YWdnKSkgeworCQlpZiAoYWRhcHRlci0+ZGV2aWQgPT0gU0xJQ18xR0JfREVWSUNFX0lEKSB7CisJCQlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwME1CKQorCQkJCWxldmVsID0gMTAwOworCQkJZWxzZSB7CisJCQkJaWYgKGxvYWQgPiBTTElDX0xPQURfNSkKKwkJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR181OworCQkJCWVsc2UgaWYgKGxvYWQgPiBTTElDX0xPQURfNCkKKwkJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR180OworCQkJCWVsc2UgaWYgKGxvYWQgPiBTTElDX0xPQURfMykKKwkJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR18zOworCQkJCWVsc2UgaWYgKGxvYWQgPiBTTElDX0xPQURfMikKKwkJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR18yOworCQkJCWVsc2UgaWYgKGxvYWQgPiBTTElDX0xPQURfMSkKKwkJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR18xOworCQkJCWVsc2UKKwkJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR18wOworCQkJfQorCQkJaWYgKGNhcmQtPmxvYWRsZXZlbF9jdXJyZW50ICE9IGxldmVsKSB7CisJCQkJY2FyZC0+bG9hZGxldmVsX2N1cnJlbnQgPSBsZXZlbDsKKwkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2ludGFnZywKKwkJCQkJICBsZXZlbCwgRkxVU0gpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGxvYWQgPiBTTElDX0xPQURfNSkKKwkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzU7CisJCQllbHNlIGlmIChsb2FkID4gU0xJQ19MT0FEXzQpCisJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR180OworCQkJZWxzZSBpZiAobG9hZCA+IFNMSUNfTE9BRF8zKQorCQkJCWxldmVsID0gU0xJQ19JTlRBR0dfMzsKKwkJCWVsc2UgaWYgKGxvYWQgPiBTTElDX0xPQURfMikKKwkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzI7CisJCQllbHNlIGlmIChsb2FkID4gU0xJQ19MT0FEXzEpCisJCQkJbGV2ZWwgPSBTTElDX0lOVEFHR18xOworCQkJZWxzZQorCQkJCWxldmVsID0gU0xJQ19JTlRBR0dfMDsKKwkJCWlmIChjYXJkLT5sb2FkbGV2ZWxfY3VycmVudCAhPSBsZXZlbCkgeworCQkJCWNhcmQtPmxvYWRsZXZlbF9jdXJyZW50ID0gbGV2ZWw7CisJCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pbnRhZ2csCisJCQkJCSAgbGV2ZWwsIEZMVVNIKTsKKwkJCX0KKwkJfQorCX0KKwljYXJkLT5ldmVudHMgPSAwOworCWNhcmQtPmxvYWR0aW1lci5leHBpcmVzID0KKwkgICAgamlmZmllcyArIFNMSUNfU0VDU19UT19KSUZGUyhTTElDX0xPQURUSU1FUl9QRVJJT0QpOworCWFkZF90aW1lcigmY2FyZC0+bG9hZHRpbWVyKTsKK30KKworc3RhdGljIHZvaWQgc2xpY19hc3NlcnRfZmFpbCh2b2lkKQoreworCXUzMiBjcHVpZDsKKwl1MzIgY3Vycl9waWQ7CisJY3B1aWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJY3Vycl9waWQgPSBjdXJyZW50LT5waWQ7CisKKwlEQkdfRVJST1IoIiVzIENQVSAjICVkIC0tLS0gUElEICMgJWRcbiIsIF9fZnVuY19fLCBjcHVpZCwgY3Vycl9waWQpOworfQorCitzdGF0aWMgaW50IHNsaWNfdXByX3F1ZXVlX3JlcXVlc3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICB1MzIgdXByX3JlcXVlc3QsCisJCQkgICB1MzIgdXByX2RhdGEsCisJCQkgICB1MzIgdXByX2RhdGFfaCwKKwkJCSAgIHUzMiB1cHJfYnVmZmVyLCB1MzIgdXByX2J1ZmZlcl9oKQoreworCXN0cnVjdCBzbGljX3VwciAqdXByOworCXN0cnVjdCBzbGljX3VwciAqdXBycXVldWU7CisKKwl1cHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2xpY191cHIpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXVwcikgeworCQlEQkdfTVNHKCIlcyBDT1VMRCBOT1QgQUxMT0NBVEUgVVBSIE1FTVxuIiwgX19mdW5jX18pOworCisJCXJldHVybiAtRU5PTUVNOworCX0KKwl1cHItPmFkYXB0ZXIgPSBhZGFwdGVyLT5wb3J0OworCXVwci0+dXByX3JlcXVlc3QgPSB1cHJfcmVxdWVzdDsKKwl1cHItPnVwcl9kYXRhID0gdXByX2RhdGE7CisJdXByLT51cHJfYnVmZmVyID0gdXByX2J1ZmZlcjsKKwl1cHItPnVwcl9kYXRhX2ggPSB1cHJfZGF0YV9oOworCXVwci0+dXByX2J1ZmZlcl9oID0gdXByX2J1ZmZlcl9oOworCXVwci0+bmV4dCA9IE5VTEw7CisJaWYgKGFkYXB0ZXItPnVwcl9saXN0KSB7CisJCXVwcnF1ZXVlID0gYWRhcHRlci0+dXByX2xpc3Q7CisKKwkJd2hpbGUgKHVwcnF1ZXVlLT5uZXh0KQorCQkJdXBycXVldWUgPSB1cHJxdWV1ZS0+bmV4dDsKKwkJdXBycXVldWUtPm5leHQgPSB1cHI7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+dXByX2xpc3QgPSB1cHI7CisJfQorCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBzbGljX3Vwcl9yZXF1ZXN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkgICAgIHUzMiB1cHJfcmVxdWVzdCwKKwkJICAgICB1MzIgdXByX2RhdGEsCisJCSAgICAgdTMyIHVwcl9kYXRhX2gsCisJCSAgICAgdTMyIHVwcl9idWZmZXIsIHUzMiB1cHJfYnVmZmVyX2gpCit7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT51cHJfbG9jay5sb2NrLCBhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7CisJc3RhdHVzID0gc2xpY191cHJfcXVldWVfcmVxdWVzdChhZGFwdGVyLAorCQkJCQl1cHJfcmVxdWVzdCwKKwkJCQkJdXByX2RhdGEsCisJCQkJCXVwcl9kYXRhX2gsIHVwcl9idWZmZXIsIHVwcl9idWZmZXJfaCk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT51cHJfbG9jay5sb2NrLAorCQkJCQlhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCXNsaWNfdXByX3N0YXJ0KGFkYXB0ZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssCisJCQkJYWRhcHRlci0+dXByX2xvY2suZmxhZ3MpOworCXJldHVybiBTVEFUVVNfUEVORElORzsKK30KKworc3RhdGljIHZvaWQgc2xpY191cHJfcmVxdWVzdF9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGlzcikKK3sKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCXN0cnVjdCBzbGljX3VwciAqdXByOworCisvKiAgICBpZiAoY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQpIHsKKwlEQkdfTVNHKCJFTlRFUiBzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlIER1bXAgaW4gcHJvZ3Jlc3MgSVNSWyV4XVxuIiwKKwkJaXNyKTsKKyAgICAgIH0gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+dXByX2xvY2subG9jaywgYWRhcHRlci0+dXByX2xvY2suZmxhZ3MpOworCXVwciA9IGFkYXB0ZXItPnVwcl9saXN0OworCWlmICghdXByKSB7CisJCUFTU0VSVCgwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dXByX2xvY2subG9jaywKKwkJCQkJYWRhcHRlci0+dXByX2xvY2suZmxhZ3MpOworCQlyZXR1cm47CisJfQorCWFkYXB0ZXItPnVwcl9saXN0ID0gdXByLT5uZXh0OworCXVwci0+bmV4dCA9IE5VTEw7CisJYWRhcHRlci0+dXByX2J1c3kgPSAwOworCUFTU0VSVChhZGFwdGVyLT5wb3J0ID09IHVwci0+YWRhcHRlcik7CisJc3dpdGNoICh1cHItPnVwcl9yZXF1ZXN0KSB7CisJY2FzZSBTTElDX1VQUl9TVEFUUzoKKwkJeworI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKKwkJCXN0cnVjdCBzbGljX3N0YXRzICpzbGljc3RhdHMgPQorCQkJICAgIChzdHJ1Y3Qgc2xpY19zdGF0cyAqKSAmYWRhcHRlci0+cHNobWVtLT5pbmljc3RhdHM7CisJCQlzdHJ1Y3Qgc2xpY19zdGF0cyAqbmV3c3RhdHMgPSBzbGljc3RhdHM7CisJCQlzdHJ1Y3Qgc2xpY19zdGF0cyAgKm9sZCA9ICZhZGFwdGVyLT5pbmljc3RhdHNfcHJldjsKKwkJCXN0cnVjdCBzbGljbmV0X3N0YXRzICpzdHN0ID0gJmFkYXB0ZXItPnNsaWNfc3RhdHM7CisjZW5kaWYKKwkJCWlmIChpc3IgJiBJU1JfVVBDRVJSKSB7CisJCQkJREJHX0VSUk9SCisJCQkJICAgICgiU0xJQ19VUFJfU1RBVFMgY29tbWFuZCBmYWlsZWQgaXNyWyV4XVxuIiwKKwkJCQkgICAgIGlzcik7CisKKwkJCQlicmVhazsKKwkJCX0KKyNpZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECisvKgkJCURCR19NU0cgKCJzbGljb3NzOiAlcyByY3YgJWx4OiVseDolbHg6JWx4OiVseCAlbHggJWx4ICIKKwkJCQkieG10ICVseDolbHg6JWx4OiVseDolbHggJWx4ICVseFxuIiwKKwkJCQkgX19mdW5jX18sCisJCQkgICAgIHNsaWNzdGF0cy0+cmN2X3VuaWNhc3RzMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnJjdl9ieXRlczEwMCwKKwkJCSAgICAgc2xpY3N0YXRzLT5yY3ZfYnl0ZXMxMDAsCisJCQkgICAgIHNsaWNzdGF0cy0+cmN2X3RjcF9ieXRlczEwMCwKKwkJCSAgICAgc2xpY3N0YXRzLT5yY3ZfdGNwX3NlZ3MxMDAsCisJCQkgICAgIHNsaWNzdGF0cy0+cmN2X290aGVyX2Vycm9yMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnJjdl9kcm9wczEwMCwKKwkJCSAgICAgc2xpY3N0YXRzLT54bWl0X3VuaWNhc3RzMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnhtaXRfYnl0ZXMxMDAsCisJCQkgICAgIHNsaWNzdGF0cy0+eG1pdF9ieXRlczEwMCwKKwkJCSAgICAgc2xpY3N0YXRzLT54bWl0X3RjcF9ieXRlczEwMCwKKwkJCSAgICAgc2xpY3N0YXRzLT54bWl0X3RjcF9zZWdzMTAwLAorCQkJICAgICBzbGljc3RhdHMtPnhtaXRfb3RoZXJfZXJyb3IxMDAsCisJCQkgICAgIHNsaWNzdGF0cy0+eG1pdF9jb2xsaXNpb25zMTAwKTsqLworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPnRjcC54bWl0X3RjcF9zZWdzLAorCQkJCQluZXdzdGF0cy0+eG1pdF90Y3Bfc2Vnc19nYiwKKwkJCQkJb2xkLT54bWl0X3RjcF9zZWdzX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPnRjcC54bWl0X3RjcF9ieXRlcywKKwkJCQkJbmV3c3RhdHMtPnhtaXRfdGNwX2J5dGVzX2diLAorCQkJCQlvbGQtPnhtaXRfdGNwX2J5dGVzX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPnRjcC5yY3ZfdGNwX3NlZ3MsCisJCQkJCW5ld3N0YXRzLT5yY3ZfdGNwX3NlZ3NfZ2IsCisJCQkJCW9sZC0+cmN2X3RjcF9zZWdzX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPnRjcC5yY3ZfdGNwX2J5dGVzLAorCQkJCQluZXdzdGF0cy0+cmN2X3RjcF9ieXRlc19nYiwKKwkJCQkJb2xkLT5yY3ZfdGNwX2J5dGVzX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPmlmYWNlLnhtdF9ieXRlcywKKwkJCQkJbmV3c3RhdHMtPnhtaXRfYnl0ZXNfZ2IsCisJCQkJCW9sZC0+eG1pdF9ieXRlc19nYik7CisKKwkJCVVQREFURV9TVEFUU19HQihzdHN0LT5pZmFjZS54bXRfdWNhc3QsCisJCQkJCW5ld3N0YXRzLT54bWl0X3VuaWNhc3RzX2diLAorCQkJCQlvbGQtPnhtaXRfdW5pY2FzdHNfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+aWZhY2UucmN2X2J5dGVzLAorCQkJCQluZXdzdGF0cy0+cmN2X2J5dGVzX2diLAorCQkJCQlvbGQtPnJjdl9ieXRlc19nYik7CisKKwkJCVVQREFURV9TVEFUU19HQihzdHN0LT5pZmFjZS5yY3ZfdWNhc3QsCisJCQkJCW5ld3N0YXRzLT5yY3ZfdW5pY2FzdHNfZ2IsCisJCQkJCW9sZC0+cmN2X3VuaWNhc3RzX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPmlmYWNlLnhtdF9lcnJvcnMsCisJCQkJCW5ld3N0YXRzLT54bWl0X2NvbGxpc2lvbnNfZ2IsCisJCQkJCW9sZC0+eG1pdF9jb2xsaXNpb25zX2diKTsKKworCQkJVVBEQVRFX1NUQVRTX0dCKHN0c3QtPmlmYWNlLnhtdF9lcnJvcnMsCisJCQkJCW5ld3N0YXRzLT54bWl0X2V4Y2Vzc19jb2xsaXNpb25zX2diLAorCQkJCQlvbGQtPnhtaXRfZXhjZXNzX2NvbGxpc2lvbnNfZ2IpOworCisJCQlVUERBVEVfU1RBVFNfR0Ioc3RzdC0+aWZhY2UueG10X2Vycm9ycywKKwkJCQkJbmV3c3RhdHMtPnhtaXRfb3RoZXJfZXJyb3JfZ2IsCisJCQkJCW9sZC0+eG1pdF9vdGhlcl9lcnJvcl9nYik7CisKKwkJCVVQREFURV9TVEFUU19HQihzdHN0LT5pZmFjZS5yY3ZfZXJyb3JzLAorCQkJCQluZXdzdGF0cy0+cmN2X290aGVyX2Vycm9yX2diLAorCQkJCQlvbGQtPnJjdl9vdGhlcl9lcnJvcl9nYik7CisKKwkJCVVQREFURV9TVEFUU19HQihzdHN0LT5pZmFjZS5yY3ZfZGlzY2FyZHMsCisJCQkJCW5ld3N0YXRzLT5yY3ZfZHJvcHNfZ2IsCisJCQkJCW9sZC0+cmN2X2Ryb3BzX2diKTsKKworCQkJaWYgKG5ld3N0YXRzLT5yY3ZfZHJvcHNfZ2IgPiBvbGQtPnJjdl9kcm9wc19nYikgeworCQkJCWFkYXB0ZXItPnJjdl9kcm9wcyArPQorCQkJCSAgICAobmV3c3RhdHMtPnJjdl9kcm9wc19nYiAtCisJCQkJICAgICBvbGQtPnJjdl9kcm9wc19nYik7CisJCQl9CisJCQltZW1jcHkob2xkLCBuZXdzdGF0cywgc2l6ZW9mKHN0cnVjdCBzbGljX3N0YXRzKSk7CisjZW5kaWYKKwkJCWJyZWFrOworCQl9CisJY2FzZSBTTElDX1VQUl9STFNSOgorCQlzbGljX2xpbmtfdXByX2NvbXBsZXRlKGFkYXB0ZXIsIGlzcik7CisJCWJyZWFrOworCWNhc2UgU0xJQ19VUFJfUkNPTkZJRzoKKwkJYnJlYWs7CisJY2FzZSBTTElDX1VQUl9SUEhZOgorCQlBU1NFUlQoMCk7CisJCWJyZWFrOworCWNhc2UgU0xJQ19VUFJfRU5MQjoKKwkJQVNTRVJUKDApOworCQlicmVhazsKKwljYXNlIFNMSUNfVVBSX0VOQ1Q6CisJCUFTU0VSVCgwKTsKKwkJYnJlYWs7CisJY2FzZSBTTElDX1VQUl9QRFdOOgorCQlBU1NFUlQoMCk7CisJCWJyZWFrOworCWNhc2UgU0xJQ19VUFJfUElORzoKKwkJY2FyZC0+cGluZ3N0YXR1cyB8PSAoaXNyICYgSVNSX1BJTkdEU01BU0spOworCQlicmVhazsKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorCWNhc2UgU0xJQ19VUFJfRFVNUDoKKwkJY2FyZC0+ZHVtcHN0YXR1cyB8PSAoaXNyICYgSVNSX1VQQ01BU0spOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCUFTU0VSVCgwKTsKKwl9CisJa2ZyZWUodXByKTsKKwlzbGljX3Vwcl9zdGFydChhZGFwdGVyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT51cHJfbG9jay5sb2NrLAorCQkJCWFkYXB0ZXItPnVwcl9sb2NrLmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc2xpY191cHJfc3RhcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfdXByICp1cHI7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisvKgorICAgIGNoYXIgKiBwdHIxOworICAgIGNoYXIgKiBwdHIyOworICAgIHVpbnQgY21kb2Zmc2V0OworKi8KKwl1cHIgPSBhZGFwdGVyLT51cHJfbGlzdDsKKwlpZiAoIXVwcikKKwkJcmV0dXJuOworCWlmIChhZGFwdGVyLT51cHJfYnVzeSkKKwkJcmV0dXJuOworCWFkYXB0ZXItPnVwcl9idXN5ID0gMTsKKworCXN3aXRjaCAodXByLT51cHJfcmVxdWVzdCkgeworCWNhc2UgU0xJQ19VUFJfU1RBVFM6CisJCWlmICh1cHItPnVwcl9kYXRhX2ggPT0gMCkgeworCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19zdGF0cywgdXByLT51cHJfZGF0YSwgRkxVU0gpOworCQl9IGVsc2UgeworCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJCQkgICAgc2xpY19yZWdzLT5zbGljX3N0YXRzNjQsCisJCQkJICAgIHVwci0+dXByX2RhdGEsCisJCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCSAgICB1cHItPnVwcl9kYXRhX2gsIEZMVVNIKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU0xJQ19VUFJfUkxTUjoKKwkJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJCSAgICBzbGljX3JlZ3MtPnNsaWNfcmxzciwKKwkJCSAgICB1cHItPnVwcl9kYXRhLAorCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCB1cHItPnVwcl9kYXRhX2gsIEZMVVNIKTsKKwkJYnJlYWs7CisKKwljYXNlIFNMSUNfVVBSX1JDT05GSUc6CisJCURCR19NU0coIiVzIFNMSUNfVVBSX1JDT05GSUchISEhXG4iLCBfX2Z1bmNfXyk7CisJCURCR19NU0coIldSSVRFX1JFRzY0IGFkYXB0ZXJbJXBdXG4iCisJCQkiICAgIGEtPnNsaWNfcmVnc1slcF0gc2xpY19yZWdzWyVwXVxuIgorCQkJIiAgICAmc2xpY19yY29uZmlnWyVwXSAmc2xpY19hZGRyX3VwcGVyWyVwXVxuIgorCQkJIiAgICB1cHJbJXBdXG4iCisJCQkiICAgIHVwcmRhdGFbJXhdIHVwcmRhdGFoWyV4XVxuIiwKKwkJCWFkYXB0ZXIsIGFkYXB0ZXItPnNsaWNfcmVncywgc2xpY19yZWdzLAorCQkJJnNsaWNfcmVncy0+c2xpY19yY29uZmlnLCAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQl1cHIsIHVwci0+dXByX2RhdGEsIHVwci0+dXByX2RhdGFfaCk7CisJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkgICAgc2xpY19yZWdzLT5zbGljX3Jjb25maWcsCisJCQkgICAgdXByLT51cHJfZGF0YSwKKwkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgdXByLT51cHJfZGF0YV9oLCBGTFVTSCk7CisJCWJyZWFrOworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisJY2FzZSBTTElDX1VQUl9EVU1QOgorI2lmIDAKKwkJREJHX01TRygiJXMgU0xJQ19VUFJfRFVNUCEhISFcbiIsIF9fZnVuY19fKTsKKwkJREJHX01TRygiV1JJVEVfUkVHNjQgYWRhcHRlclslcF1cbiIKKwkJCSAiICAgIHVwcl9idWZmZXJbJXhdICAgdXByX2J1ZmZlcmhbJXhdXG4iCisJCQkgIiAgICB1cHJfZGF0YVsleF0gICAgIHVwcl9kYXRhaFsleF1cbiIKKwkJCSAiICAgIGNtZGJ1ZmZbJXBdIGNtZGJ1ZmZQWyVwXVxuIgorCQkJICIgICAgZHVtcGJ1ZmZbJXBdIGR1bXBidWZmUFslcF1cbiIsCisJCQkgYWRhcHRlciwgdXByLT51cHJfYnVmZmVyLCB1cHItPnVwcl9idWZmZXJfaCwKKwkJCSB1cHItPnVwcl9kYXRhLCB1cHItPnVwcl9kYXRhX2gsCisJCQkgYWRhcHRlci0+Y2FyZC0+Y21kYnVmZmVyLAorCQkJICh2b2lkICopYWRhcHRlci0+Y2FyZC0+Y21kYnVmZmVyX3BoeXMsCisJCQkgYWRhcHRlci0+Y2FyZC0+ZHVtcGJ1ZmZlciwgKAorCQkJIHZvaWQgKilhZGFwdGVyLT5jYXJkLT5kdW1wYnVmZmVyX3BoeXMpOworCisJCXB0cjEgPSAoY2hhciAqKXNsaWNfcmVnczsKKwkJcHRyMiA9IChjaGFyICopKCZzbGljX3JlZ3MtPnNsaWNfZHVtcF9jbWQpOworCQljbWRvZmZzZXQgPSBwdHIyIC0gcHRyMTsKKwkJREJHX01TRygic2xpY19kdW1wX2NtZCByZWdpc3RlciBvZmZzZXQgWyV4XVxuIiwgY21kb2Zmc2V0KTsKKyNlbmRpZgorCQlpZiAodXByLT51cHJfYnVmZmVyIHx8IHVwci0+dXByX2J1ZmZlcl9oKSB7CisJCQlXUklURV9SRUc2NChhZGFwdGVyLAorCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfZHVtcF9kYXRhLAorCQkJCSAgICB1cHItPnVwcl9idWZmZXIsCisJCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCSAgICB1cHItPnVwcl9idWZmZXJfaCwgRkxVU0gpOworCQl9CisJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkgICAgc2xpY19yZWdzLT5zbGljX2R1bXBfY21kLAorCQkJICAgIHVwci0+dXByX2RhdGEsCisJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOworCQlicmVhazsKKyNlbmRpZgorCWNhc2UgU0xJQ19VUFJfUElORzoKKwkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19waW5nLCAxLCBGTFVTSCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUFTU0VSVCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfbGlua191cHJfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpc3IpCit7CisJdTMyIGxpbmtzdGF0dXMgPSBhZGFwdGVyLT5wc2htZW0tPmxpbmtzdGF0dXM7CisJdWludCBsaW5rdXA7CisJdW5zaWduZWQgY2hhciBsaW5rc3BlZWQ7CisJdW5zaWduZWQgY2hhciBsaW5rZHVwbGV4OworCisJREJHX01TRygiJXM6ICVzIElTUlsleF0gbGlua3N0YXR1c1sleF1cbiAgIGFkYXB0ZXJbJXBdKCVkKVxuIiwKKwkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgaXNyLCBsaW5rc3RhdHVzLCBhZGFwdGVyLAorCQlhZGFwdGVyLT5jYXJkaW5kZXgpOworCisJaWYgKChpc3IgJiBJU1JfVVBDRVJSKSB8fCAoaXNyICYgSVNSX1VQQ0JTWSkpIHsKKwkJc3RydWN0IHNsaWNfc2htZW0gKnBzaG1lbTsKKworCQlwc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKilhZGFwdGVyLT5waHlzX3NobWVtOworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKwkJc2xpY191cHJfcXVldWVfcmVxdWVzdChhZGFwdGVyLAorCQkJCSAgICAgICBTTElDX1VQUl9STFNSLAorCQkJCSAgICAgICBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5saW5rc3RhdHVzKSwKKwkJCQkgICAgICAgU0xJQ19HRVRfQUREUl9ISUdIKCZwc2htZW0tPmxpbmtzdGF0dXMpLAorCQkJCSAgICAgICAwLCAwKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKKwkJc2xpY191cHJfcXVldWVfcmVxdWVzdChhZGFwdGVyLAorCQkJCSAgICAgICBTTElDX1VQUl9STFNSLAorCQkJCSAgICAgICAodTMyKSAmcHNobWVtLT5saW5rc3RhdHVzLAorCQkJCSAgICAgICBTTElDX0dFVF9BRERSX0hJR0gocHNobWVtKSwgMCwgMCk7CisjZWxzZQorCQlTdG9wIENvbXBpbGF0aW9uOworI2VuZGlmCisJCXJldHVybjsKKwl9CisJaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX1VQKQorCQlyZXR1cm47CisKKwlBU1NFUlQoKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMUdCX0RFVklDRV9JRCkKKwkgICAgICAgfHwgKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMkdCX0RFVklDRV9JRCkpOworCisJbGlua3VwID0gbGlua3N0YXR1cyAmIEdJR19MSU5LVVAgPyBMSU5LX1VQIDogTElOS19ET1dOOworCWlmIChsaW5rc3RhdHVzICYgR0lHX1NQRUVEXzEwMDApIHsKKwkJbGlua3NwZWVkID0gTElOS18xMDAwTUI7CisJCURCR19NU0coInNsaWNvc3M6ICVzICglcykgR0lHQUJJVCBTcGVlZD09MTAwME1CICAiLAorCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJfSBlbHNlIGlmIChsaW5rc3RhdHVzICYgR0lHX1NQRUVEXzEwMCkgeworCQlsaW5rc3BlZWQgPSBMSU5LXzEwME1COworCQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEdJR0FCSVQgU3BlZWQ9PTEwME1CICAiLCBfX2Z1bmNfXywKKwkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJfSBlbHNlIHsKKwkJbGlua3NwZWVkID0gTElOS18xME1COworCQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEdJR0FCSVQgU3BlZWQ9PTEwTUIgICIsIF9fZnVuY19fLAorCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwl9CisJaWYgKGxpbmtzdGF0dXMgJiBHSUdfRlVMTERVUExFWCkgeworCQlsaW5rZHVwbGV4ID0gTElOS19GVUxMRDsKKwkJREJHX01TRygiIER1cGxleCA9PSBGVUxMXG4iKTsKKwl9IGVsc2UgeworCQlsaW5rZHVwbGV4ID0gTElOS19IQUxGRDsKKwkJREJHX01TRygiIER1cGxleCA9PSBIQUxGXG4iKTsKKwl9CisKKwlpZiAoKGFkYXB0ZXItPmxpbmtzdGF0ZSA9PSBMSU5LX0RPV04pICYmIChsaW5rdXAgPT0gTElOS19ET1dOKSkgeworCQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIHBoeXNwb3J0KCVkKSBsaW5rIHN0aWxsIGRvd25cbiIsCisJCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5waHlzcG9ydCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBsaW5rIHVwIGV2ZW50LCBidXQgbm90aGluZyBoYXMgY2hhbmdlZCAqLworCWlmICgoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfVVApICYmCisJICAgIChsaW5rdXAgPT0gTElOS19VUCkgJiYKKwkgICAgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBsaW5rc3BlZWQpICYmCisJICAgIChhZGFwdGVyLT5saW5rZHVwbGV4ID09IGxpbmtkdXBsZXgpKSB7CisJCURCR19NU0coInNsaWNvc3M6ICVzICglcykgcG9ydCglZCkgbGluayBzdGlsbCB1cFxuIiwKKwkJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPnBoeXNwb3J0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIGxpbmsgaGFzIGNoYW5nZWQgYXQgdGhpcyBwb2ludCAqLworCisJLyogbGluayBoYXMgZ29uZSBmcm9tIHVwIHRvIGRvd24gKi8KKwlpZiAobGlua3VwID09IExJTktfRE9XTikgeworCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CisJCURCR19NU0coInNsaWNvc3M6ICVzICVkIExpbmtEb3duIVxuIiwgX19mdW5jX18sCisJCQlhZGFwdGVyLT5waHlzcG9ydCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBsaW5rIGhhcyBnb25lIGZyb20gZG93biB0byB1cCAqLworCWFkYXB0ZXItPmxpbmtzcGVlZCA9IGxpbmtzcGVlZDsKKwlhZGFwdGVyLT5saW5rZHVwbGV4ID0gbGlua2R1cGxleDsKKworCWlmIChhZGFwdGVyLT5saW5rc3RhdGUgIT0gTElOS19VUCkgeworCQkvKiBzZXR1cCB0aGUgbWFjICovCisJCURCR19NU0coIiVzIGNhbGwgc2xpY19jb25maWdfc2V0XG4iLCBfX2Z1bmNfXyk7CisJCXNsaWNfY29uZmlnX3NldChhZGFwdGVyLCBUUlVFKTsKKwkJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19VUDsKKwkJREJHX01TRygiXG4oJXMpIExpbmsgVVA6IENBTEwgc2xpY19pZl9zdGFydF9xdWV1ZSIsCisJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlzbGljX2lmX3N0YXJ0X3F1ZXVlKGFkYXB0ZXIpOworCX0KKyNpZiAxCisJc3dpdGNoIChsaW5rc3BlZWQpIHsKKwljYXNlIExJTktfMTAwME1COgorCQlEQkdfTVNHCisJCSAgICAoIlxuKCVzKSBMSU5LIFVQITogR0lHQUJJVCBTUEVFRCA9PSAxMDAwTUIgIGR1cGxleFsleF1cbiIsCisJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5saW5rZHVwbGV4KTsKKwkJYnJlYWs7CisJY2FzZSBMSU5LXzEwME1COgorCQlEQkdfTVNHKCJcbiglcykgTElOSyBVUCE6IFNQRUVEID09IDEwME1CICBkdXBsZXhbJXhdXG4iLAorCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5saW5rZHVwbGV4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREJHX01TRygiXG4oJXMpIExJTksgVVAhOiBTUEVFRCA9PSAxME1CICBkdXBsZXhbJXhdXG4iLAorCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5saW5rZHVwbGV4KTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCit9CisKKy8qCisgKiAgdGhpcyBpcyBoZXJlIHRvIGNoZWNrc3VtIHRoZSBlZXByb20sIHRoZXJlIGlzIHNvbWUgdWNvZGUgYnVnCisgKiAgd2hpY2ggcHJldmVucyB1cyBmcm9tIHVzaW5nIHRoZSB1Y29kZSByZXN1bHQuCisgKiAgcmVtb3ZlIHRoaXMgb25jZSB1Y29kZSBpcyBmaXhlZC4KKyAqLworc3RhdGljIHVzaG9ydCBzbGljX2VlcHJvbV9ja3N1bShjaGFyICptLCBpbnQgbGVuKQoreworI2RlZmluZSBBRERDQVJSWSh4KSAgKHggPiA2NTUzNSA/IHggLT0gNjU1MzUgOiB4KQorI2RlZmluZSBSRURVQ0Uge2xfdXRpbC5sID0gc3VtOyBzdW0gPSBsX3V0aWwuc1swXSArIGxfdXRpbC5zWzFdOyBBRERDQVJSWShzdW0pO1wKKwkJfQorCisJdTE2ICp3OworCXUzMiBzdW0gPSAwOworCXUzMiBieXRlX3N3YXBwZWQgPSAwOworCXUzMiB3X2ludDsKKworCXVuaW9uIHsKKwkJY2hhciBjWzJdOworCQl1c2hvcnQgczsKKwl9IHNfdXRpbDsKKworCXVuaW9uIHsKKwkJdXNob3J0IHNbMl07CisJCWludCBsOworCX0gbF91dGlsOworCisJbF91dGlsLmwgPSAwOworCXNfdXRpbC5zID0gMDsKKworCXcgPSAodTE2ICopbTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJd19pbnQgPSAodTMyKSAoKHVsb25nKSB3ICYgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKyNlbHNlCisJd19pbnQgPSAodTMyKSAodyk7CisjZW5kaWYKKwlpZiAoKDEgJiB3X2ludCkgJiYgKGxlbiA+IDApKSB7CisJCVJFRFVDRTsKKwkJc3VtIDw8PSA4OworCQlzX3V0aWwuY1swXSA9ICoodW5zaWduZWQgY2hhciAqKXc7CisJCXcgPSAodTE2ICopKChjaGFyICopdyArIDEpOworCQlsZW4tLTsKKwkJYnl0ZV9zd2FwcGVkID0gMTsKKwl9CisKKwkvKiBVbnJvbGwgdGhlIGxvb3AgdG8gbWFrZSBvdmVyaGVhZCBmcm9tIGJyYW5jaGVzICZjIHNtYWxsLiAqLworCXdoaWxlICgobGVuIC09IDMyKSA+PSAwKSB7CisJCXN1bSArPSB3WzBdOworCQlzdW0gKz0gd1sxXTsKKwkJc3VtICs9IHdbMl07CisJCXN1bSArPSB3WzNdOworCQlzdW0gKz0gd1s0XTsKKwkJc3VtICs9IHdbNV07CisJCXN1bSArPSB3WzZdOworCQlzdW0gKz0gd1s3XTsKKwkJc3VtICs9IHdbOF07CisJCXN1bSArPSB3WzldOworCQlzdW0gKz0gd1sxMF07CisJCXN1bSArPSB3WzExXTsKKwkJc3VtICs9IHdbMTJdOworCQlzdW0gKz0gd1sxM107CisJCXN1bSArPSB3WzE0XTsKKwkJc3VtICs9IHdbMTVdOworCQl3ID0gKHUxNiAqKSgodWxvbmcpIHcgKyAxNik7CS8qIHZlcmlmeSAqLworCX0KKwlsZW4gKz0gMzI7CisJd2hpbGUgKChsZW4gLT0gOCkgPj0gMCkgeworCQlzdW0gKz0gd1swXTsKKwkJc3VtICs9IHdbMV07CisJCXN1bSArPSB3WzJdOworCQlzdW0gKz0gd1szXTsKKwkJdyA9ICh1MTYgKikoKHVsb25nKSB3ICsgNCk7CS8qIHZlcmlmeSAqLworCX0KKwlsZW4gKz0gODsKKwlpZiAobGVuICE9IDAgfHwgYnl0ZV9zd2FwcGVkICE9IDApIHsKKwkJUkVEVUNFOworCQl3aGlsZSAoKGxlbiAtPSAyKSA+PSAwKQorCQkJc3VtICs9ICp3Kys7CS8qIHZlcmlmeSAqLworCQlpZiAoYnl0ZV9zd2FwcGVkKSB7CisJCQlSRURVQ0U7CisJCQlzdW0gPDw9IDg7CisJCQlieXRlX3N3YXBwZWQgPSAwOworCQkJaWYgKGxlbiA9PSAtMSkgeworCQkJCXNfdXRpbC5jWzFdID0gKihjaGFyICopIHc7CisJCQkJc3VtICs9IHNfdXRpbC5zOworCQkJCWxlbiA9IDA7CisJCQl9IGVsc2UgeworCQkJCWxlbiA9IC0xOworCQkJfQorCisJCX0gZWxzZSBpZiAobGVuID09IC0xKSB7CisJCQlzX3V0aWwuY1swXSA9ICooY2hhciAqKSB3OworCQl9CisKKwkJaWYgKGxlbiA9PSAtMSkgeworCQkJc191dGlsLmNbMV0gPSAwOworCQkJc3VtICs9IHNfdXRpbC5zOworCQl9CisJfQorCVJFRFVDRTsKKwlyZXR1cm4gKHVzaG9ydCkgc3VtOworfQorCitzdGF0aWMgaW50IHNsaWNfcnNwcXVldWVfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc2xpY19yc3BxdWV1ZSAqcnNwcSA9ICZhZGFwdGVyLT5yc3BxdWV1ZTsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKwl1MzIgcGFkZHJoID0gMDsKKworCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLAorCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIpOworCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKKwltZW1zZXQocnNwcSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX3JzcHF1ZXVlKSk7CisKKwlyc3BxLT5udW1fcGFnZXMgPSBTTElDX1JTUFFfUEFHRVNfR0I7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnNwcS0+bnVtX3BhZ2VzOyBpKyspIHsKKwkJcnNwcS0+dmFkZHJbaV0gPQorCQkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LCBQQUdFX1NJWkUsCisJCQkJCSAmcnNwcS0+cGFkZHJbaV0pOworCQlpZiAoIXJzcHEtPnZhZGRyW2ldKSB7CisJCQlEQkdfRVJST1IKKwkJCSAgICAoInJzcHF1ZXVlX2luaXRfZmFpbGVkICBwY2lfYWxsb2NfY29uc2lzdGVudFxuIik7CisJCQlzbGljX3JzcHF1ZXVlX2ZyZWUoYWRhcHRlcik7CisJCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CisJCX0KKyNpZm5kZWYgQ09ORklHX1g4Nl82NAorCQlBU1NFUlQoKCh1MzIpIHJzcHEtPnZhZGRyW2ldICYgMHhGRkZGRjAwMCkgPT0KKwkJICAgICAgICh1MzIpIHJzcHEtPnZhZGRyW2ldKTsKKwkJQVNTRVJUKCgodTMyKSByc3BxLT5wYWRkcltpXSAmIDB4RkZGRkYwMDApID09CisJCSAgICAgICAodTMyKSByc3BxLT5wYWRkcltpXSk7CisjZW5kaWYKKwkJbWVtc2V0KHJzcHEtPnZhZGRyW2ldLCAwLCBQQUdFX1NJWkUpOworLyogICAgICAgICAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIFVQTE9BRCBSU1BCVUZGIFBhZ2UgcGFnZWl4WyV4XSBwYWRkclslcF0gIgorCQkJInZhZGRyWyVwXVxuIiwKKwkJCV9fZnVuY19fLCBpLCAodm9pZCAqKXJzcHEtPnBhZGRyW2ldLCByc3BxLT52YWRkcltpXSk7ICovCisKKwkJaWYgKHBhZGRyaCA9PSAwKSB7CisJCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3JiYXIsCisJCQkJICAocnNwcS0+cGFkZHJbaV0gfCBTTElDX1JTUFFfQlVGU0lOUEFHRSksCisJCQkJICBET05UX0ZMVVNIKTsKKwkJfSBlbHNlIHsKKwkJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkJICAgIHNsaWNfcmVncy0+c2xpY19yYmFyNjQsCisJCQkJICAgIChyc3BxLT5wYWRkcltpXSB8IFNMSUNfUlNQUV9CVUZTSU5QQUdFKSwKKwkJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJICAgIHBhZGRyaCwgRE9OVF9GTFVTSCk7CisJCX0KKwl9CisJcnNwcS0+b2Zmc2V0ID0gMDsKKwlyc3BxLT5wYWdlaW5kZXggPSAwOworCXJzcHEtPnJzcGJ1ZiA9IChzdHJ1Y3Qgc2xpY19yc3BidWYgKilyc3BxLT52YWRkclswXTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVYSVQgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLAorCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIpOworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBzbGljX3JzcHF1ZXVlX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljX3JzcHF1ZXVlICpyc3BxID0gJmFkYXB0ZXItPnJzcHF1ZXVlOworCisJREJHX01TRygic2xpY29zczogJXMgKCVzKSBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sCisJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlcik7CisJQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOworCUFTU0VSVChyc3BxKTsKKworCURCR19NU0coInNsaWNvc3M6IE5vdGhpbmcgdG8gZG8uIHJzcHFbJXBdXG4iCisJCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFsleF1cbiIKKwkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZWl4WyV4XVxuIgorCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3BidWZbJXBdXG4iLAorCQlyc3BxLCByc3BxLT5vZmZzZXQsIHJzcHEtPnBhZ2VpbmRleCwgcnNwcS0+cnNwYnVmKTsKKworCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRVhJVCBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sCisJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlcik7CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZCBzbGljX3JzcHF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJc3RydWN0IHNsaWNfcnNwcXVldWUgKnJzcHEgPSAmYWRhcHRlci0+cnNwcXVldWU7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBhZGFwdGVyWyVwXSBwb3J0ICVkIHJzcHFbJXBdIEZyZWVSU1BRXG4iLAorCQlfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+cGh5c3BvcnQsIHJzcHEpOworCWZvciAoaSA9IDA7IGkgPCByc3BxLT5udW1fcGFnZXM7IGkrKykgeworCQlpZiAocnNwcS0+dmFkZHJbaV0pIHsKKwkJCURCR19NU0cKKwkJCSAgICAoInNsaWNvc3M6ICBwY2lfZnJlZV9jb25zaXN0ZW50IHJzcHEtPnZhZGRyWyVwXSBcCisJCQkgICAgcGFkZHJbJXBdXG4iLAorCQkJICAgICByc3BxLT52YWRkcltpXSwgKHZvaWQgKikgcnNwcS0+cGFkZHJbaV0pOworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIFBBR0VfU0laRSwKKwkJCQkJICAgIHJzcHEtPnZhZGRyW2ldLCByc3BxLT5wYWRkcltpXSk7CisJCX0KKwkJcnNwcS0+dmFkZHJbaV0gPSBOVUxMOworCQlyc3BxLT5wYWRkcltpXSA9IDA7CisJfQorCXJzcHEtPm9mZnNldCA9IDA7CisJcnNwcS0+cGFnZWluZGV4ID0gMDsKKwlyc3BxLT5yc3BidWYgPSBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHNsaWNfcnNwYnVmICpzbGljX3JzcHF1ZXVlX2dldG5leHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfcnNwcXVldWUgKnJzcHEgPSAmYWRhcHRlci0+cnNwcXVldWU7CisJc3RydWN0IHNsaWNfcnNwYnVmICpidWY7CisKKwlpZiAoIShyc3BxLT5yc3BidWYtPnN0YXR1cykpCisJCXJldHVybiBOVUxMOworCisJYnVmID0gcnNwcS0+cnNwYnVmOworI2lmbmRlZiBDT05GSUdfWDg2XzY0CisJQVNTRVJUKChidWYtPnN0YXR1cyAmIDB4RkZGRkZGRTApID09IDApOworI2VuZGlmCisJQVNTRVJUKGJ1Zi0+aG9zdGhhbmRsZSk7CisJaWYgKCsrcnNwcS0+b2Zmc2V0IDwgU0xJQ19SU1BRX0JVRlNJTlBBR0UpIHsKKwkJcnNwcS0+cnNwYnVmKys7CisjaWZuZGVmIENPTkZJR19YODZfNjQKKwkJQVNTRVJUKCgodTMyKSByc3BxLT5yc3BidWYgJiAweEZGRkZGRkUwKSA9PQorCQkgICAgICAgKHUzMikgcnNwcS0+cnNwYnVmKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCUFTU0VSVChyc3BxLT5vZmZzZXQgPT0gU0xJQ19SU1BRX0JVRlNJTlBBR0UpOworCQlXUklURV9SRUc2NChhZGFwdGVyLAorCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19yYmFyNjQsCisJCQkgICAgKHJzcHEtPgorCQkJICAgICBwYWRkcltyc3BxLT5wYWdlaW5kZXhdIHwgU0xJQ19SU1BRX0JVRlNJTlBBR0UpLAorCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBET05UX0ZMVVNIKTsKKwkJcnNwcS0+cGFnZWluZGV4ID0gKCsrcnNwcS0+cGFnZWluZGV4KSAlIHJzcHEtPm51bV9wYWdlczsKKwkJcnNwcS0+b2Zmc2V0ID0gMDsKKwkJcnNwcS0+cnNwYnVmID0gKHN0cnVjdCBzbGljX3JzcGJ1ZiAqKQorCQkJCQkJcnNwcS0+dmFkZHJbcnNwcS0+cGFnZWluZGV4XTsKKyNpZm5kZWYgQ09ORklHX1g4Nl82NAorCQlBU1NFUlQoKCh1MzIpIHJzcHEtPnJzcGJ1ZiAmIDB4RkZGRkYwMDApID09CisJCSAgICAgICAodTMyKSByc3BxLT5yc3BidWYpOworI2VuZGlmCisJfQorI2lmbmRlZiBDT05GSUdfWDg2XzY0CisJQVNTRVJUKCgodTMyKSBidWYgJiAweEZGRkZGRkUwKSA9PSAodTMyKSBidWYpOworI2VuZGlmCisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIHZvaWQgc2xpY19jbWRxbWVtX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfY21kcW1lbSAqY21kcW1lbSA9ICZhZGFwdGVyLT5jbWRxbWVtOworCisJbWVtc2V0KGNtZHFtZW0sIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19jbWRxbWVtKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfY21kcW1lbV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljX2NtZHFtZW0gKmNtZHFtZW0gPSAmYWRhcHRlci0+Y21kcW1lbTsKKwlpbnQgaTsKKworCURCR19NU0coInNsaWNvc3M6ICglcykgYWRhcHRlclslcF0gcG9ydCAlZCByc3BxWyVwXSBGcmVlIENNRFEgTWVtb3J5XG4iLAorCQlfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+cGh5c3BvcnQsIGNtZHFtZW0pOworCWZvciAoaSA9IDA7IGkgPCBTTElDX0NNRFFfTUFYUEFHRVM7IGkrKykgeworCQlpZiAoY21kcW1lbS0+cGFnZXNbaV0pIHsKKwkJCURCR19NU0coInNsaWNvc3M6ICVzIERlYWxsb2NhdGUgcGFnZSAgQ21kUVBhZ2VbJXBdXG4iLAorCQkJCV9fZnVuY19fLCAodm9pZCAqKSBjbWRxbWVtLT5wYWdlc1tpXSk7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJICAgIFBBR0VfU0laRSwKKwkJCQkJICAgICh2b2lkICopIGNtZHFtZW0tPnBhZ2VzW2ldLAorCQkJCQkgICAgY21kcW1lbS0+ZG1hX3BhZ2VzW2ldKTsKKwkJfQorCX0KKwltZW1zZXQoY21kcW1lbSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHFtZW0pKTsKK30KKworc3RhdGljIHUzMiAqc2xpY19jbWRxbWVtX2FkZHBhZ2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfY21kcW1lbSAqY21kcW1lbSA9ICZhZGFwdGVyLT5jbWRxbWVtOworCXUzMiAqcGFnZWFkZHI7CisKKwlpZiAoY21kcW1lbS0+cGFnZWNudCA+PSBTTElDX0NNRFFfTUFYUEFHRVMpCisJCXJldHVybiBOVUxMOworCXBhZ2VhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQlQQUdFX1NJWkUsCisJCQkJCSZjbWRxbWVtLT5kbWFfcGFnZXNbY21kcW1lbS0+cGFnZWNudF0pOworCWlmICghcGFnZWFkZHIpCisJCXJldHVybiBOVUxMOworI2lmbmRlZiBDT05GSUdfWDg2XzY0CisJQVNTRVJUKCgodTMyKSBwYWdlYWRkciAmIDB4RkZGRkYwMDApID09ICh1MzIpIHBhZ2VhZGRyKTsKKyNlbmRpZgorCWNtZHFtZW0tPnBhZ2VzW2NtZHFtZW0tPnBhZ2VjbnRdID0gcGFnZWFkZHI7CisJY21kcW1lbS0+cGFnZWNudCsrOworCXJldHVybiBwYWdlYWRkcjsKK30KKworc3RhdGljIGludCBzbGljX2NtZHFfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKwl1MzIgKnBhZ2VhZGRyOworCisJREJHX01TRygic2xpY29zczogJXMgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKKwlBU1NFUlQoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfRE9XTik7CisJbWVtc2V0KCZhZGFwdGVyLT5jbWRxX2FsbCwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHF1ZXVlKSk7CisJbWVtc2V0KCZhZGFwdGVyLT5jbWRxX2ZyZWUsIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSkpOworCW1lbXNldCgmYWRhcHRlci0+Y21kcV9kb25lLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcXVldWUpKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+Y21kcV9hbGwubG9jay5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+Y21kcV9mcmVlLmxvY2subG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmNtZHFfZG9uZS5sb2NrLmxvY2spOworCXNsaWNfY21kcW1lbV9pbml0KGFkYXB0ZXIpOworCWFkYXB0ZXItPnNsaWNfaGFuZGxlX2l4ID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgU0xJQ19DTURRX0lOSVRQQUdFUzsgaSsrKSB7CisJCXBhZ2VhZGRyID0gc2xpY19jbWRxbWVtX2FkZHBhZ2UoYWRhcHRlcik7CisjaWZuZGVmIENPTkZJR19YODZfNjQKKwkJQVNTRVJUKCgodTMyKSBwYWdlYWRkciAmIDB4RkZGRkYwMDApID09ICh1MzIpIHBhZ2VhZGRyKTsKKyNlbmRpZgorCQlpZiAoIXBhZ2VhZGRyKSB7CisJCQlzbGljX2NtZHFfZnJlZShhZGFwdGVyKTsKKwkJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKKwkJfQorCQlzbGljX2NtZHFfYWRkY21kcGFnZShhZGFwdGVyLCBwYWdlYWRkcik7CisJfQorCWFkYXB0ZXItPnNsaWNfaGFuZGxlX2l4ID0gMTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyByZXNldCBzbGljX2hhbmRsZV9peCB0byBPTkVcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgc2xpY19jbWRxX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqY21kOworCisJREJHX01TRygic2xpY29zczogJXMgYWRhcHRlclslcF0gcG9ydCAlZCBGcmVlQ29tbWFuZHNGcm9tIENNRFFcbiIsCisJCV9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5waHlzcG9ydCk7CisJY21kID0gYWRhcHRlci0+Y21kcV9hbGwuaGVhZDsKKwl3aGlsZSAoY21kKSB7CisJCWlmIChjbWQtPmJ1c3kpIHsKKwkJCXN0cnVjdCBza19idWZmICp0ZW1wc2tiOworCisJCQl0ZW1wc2tiID0gY21kLT5za2I7CisJCQlpZiAodGVtcHNrYikgeworCQkJCWNtZC0+c2tiID0gTlVMTDsKKwkJCQlkZXZfa2ZyZWVfc2tiX2lycSh0ZW1wc2tiKTsKKwkJCX0KKwkJfQorCQljbWQgPSBjbWQtPm5leHRfYWxsOworCX0KKwltZW1zZXQoJmFkYXB0ZXItPmNtZHFfYWxsLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcXVldWUpKTsKKwltZW1zZXQoJmFkYXB0ZXItPmNtZHFfZnJlZSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHF1ZXVlKSk7CisJbWVtc2V0KCZhZGFwdGVyLT5jbWRxX2RvbmUsIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSkpOworCXNsaWNfY21kcW1lbV9mcmVlKGFkYXB0ZXIpOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NtZHFfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqaGNtZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUzMiBvdXRzdGFuZGluZzsKKworCURCR19NU0coIiVzIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmxvY2ssCisJCQlhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5mbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZHFfZG9uZS5sb2NrLmxvY2ssCisJCQlhZGFwdGVyLT5jbWRxX2RvbmUubG9jay5mbGFncyk7CisJb3V0c3RhbmRpbmcgPSBhZGFwdGVyLT5jbWRxX2FsbC5jb3VudCAtIGFkYXB0ZXItPmNtZHFfZG9uZS5jb3VudDsKKwlvdXRzdGFuZGluZyAtPSBhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQ7CisJaGNtZCA9IGFkYXB0ZXItPmNtZHFfYWxsLmhlYWQ7CisJd2hpbGUgKGhjbWQpIHsKKwkJaWYgKGhjbWQtPmJ1c3kpIHsKKwkJCXNrYiA9IGhjbWQtPnNrYjsKKwkJCUFTU0VSVChza2IpOworCQkJREJHX01TRygic2xpY29zczogJXMgaGNtZFslcF0gc2tiWyVwXSAiLCBfX2Z1bmNfXywKKwkJCQloY21kLCBza2IpOworCQkJaGNtZC0+YnVzeSA9IDA7CisJCQloY21kLT5za2IgPSBOVUxMOworCQkJREJHX01TRygiIEZyZWUgU0tCXG4iKTsKKwkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCX0KKwkJaGNtZCA9IGhjbWQtPm5leHRfYWxsOworCX0KKwlhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQgPSAwOworCWFkYXB0ZXItPmNtZHFfZnJlZS5oZWFkID0gTlVMTDsKKwlhZGFwdGVyLT5jbWRxX2ZyZWUudGFpbCA9IE5VTEw7CisJYWRhcHRlci0+Y21kcV9kb25lLmNvdW50ID0gMDsKKwlhZGFwdGVyLT5jbWRxX2RvbmUuaGVhZCA9IE5VTEw7CisJYWRhcHRlci0+Y21kcV9kb25lLnRhaWwgPSBOVUxMOworCWFkYXB0ZXItPmNtZHFfZnJlZS5oZWFkID0gYWRhcHRlci0+Y21kcV9hbGwuaGVhZDsKKwloY21kID0gYWRhcHRlci0+Y21kcV9hbGwuaGVhZDsKKwl3aGlsZSAoaGNtZCkgeworCQlhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQrKzsKKwkJaGNtZC0+bmV4dCA9IGhjbWQtPm5leHRfYWxsOworCQloY21kID0gaGNtZC0+bmV4dF9hbGw7CisJfQorCWlmIChhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQgIT0gYWRhcHRlci0+Y21kcV9hbGwuY291bnQpIHsKKwkJREJHX0VSUk9SKCIlcyBmcmVlX2NvdW50ICVkICE9IGFsbCBjb3VudCAlZFxuIiwgX19mdW5jX18sCisJCQkgIGFkYXB0ZXItPmNtZHFfZnJlZS5jb3VudCwgYWRhcHRlci0+Y21kcV9hbGwuY291bnQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRxX2RvbmUubG9jay5sb2NrLAorCQkJCWFkYXB0ZXItPmNtZHFfZG9uZS5sb2NrLmZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5sb2NrLAorCQkJCWFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmZsYWdzKTsKKwlEQkdfTVNHKCIlcyBFWElUIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfY21kcV9hZGRjbWRwYWdlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgKnBhZ2UpCit7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqY21kOworCXN0cnVjdCBzbGljX2hvc3RjbWQgKnByZXY7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqdGFpbDsKKwlzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSAqY21kcTsKKwlpbnQgY21kY250OworCXZvaWQgKmNtZGFkZHI7CisJdWxvbmcgcGh5c19hZGRyOworCXUzMiBwaHlzX2FkZHJsOworCXUzMiBwaHlzX2FkZHJoOworCXN0cnVjdCBzbGljX2hhbmRsZSAqcHNsaWNfaGFuZGxlOworCisJY21kYWRkciA9IHBhZ2U7CisJY21kID0gKHN0cnVjdCBzbGljX2hvc3RjbWQgKiljbWRhZGRyOworLyogIERCR19NU0coIkNNRFEgUGFnZSBhZGRyWyVwXSBpeFslZF0gcGZyZWVbJXBdXG4iLCBjbWRhZGRyLCBzbGljX2hhbmRsZV9peCwKKyAgICBhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXMpOyAqLworCWNtZGNudCA9IDA7CisKKwlwaHlzX2FkZHIgPSB2aXJ0X3RvX2J1cygodm9pZCAqKXBhZ2UpOworCXBoeXNfYWRkcmwgPSBTTElDX0dFVF9BRERSX0xPVyhwaHlzX2FkZHIpOworCXBoeXNfYWRkcmggPSBTTElDX0dFVF9BRERSX0hJR0gocGh5c19hZGRyKTsKKworCXByZXYgPSBOVUxMOworCXRhaWwgPSBjbWQ7CisJd2hpbGUgKChjbWRjbnQgPCBTTElDX0NNRFFfQ01EU0lOUEFHRSkgJiYKKwkgICAgICAgKGFkYXB0ZXItPnNsaWNfaGFuZGxlX2l4IDwgMjU2KSkgeworCQkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIFNMSUNfSEFORExFIGZvciB0aGlzIGNvbW1hbmQgKi8KKwkJU0xJQ19HRVRfU0xJQ19IQU5ETEUoYWRhcHRlciwgcHNsaWNfaGFuZGxlKTsKKwkJaWYgKHBzbGljX2hhbmRsZSA9PSBOVUxMKQorCQkJQVNTRVJUKDApOworCQlBU1NFUlQocHNsaWNfaGFuZGxlID09CisJCSAgICAgICAmYWRhcHRlci0+c2xpY19oYW5kbGVzW3BzbGljX2hhbmRsZS0+dG9rZW4uCisJCQkJCSAgICAgIGhhbmRsZV9pbmRleF0pOworCQlwc2xpY19oYW5kbGUtPnR5cGUgPSBTTElDX0hBTkRMRV9DTUQ7CisJCXBzbGljX2hhbmRsZS0+YWRkcmVzcyA9ICh2b2lkICopIGNtZDsKKwkJcHNsaWNfaGFuZGxlLT5vZmZzZXQgPSAodXNob3J0KSBhZGFwdGVyLT5zbGljX2hhbmRsZV9peCsrOworCQlwc2xpY19oYW5kbGUtPm90aGVyX2hhbmRsZSA9IE5VTEw7CisJCXBzbGljX2hhbmRsZS0+bmV4dCA9IE5VTEw7CisKKwkJY21kLT5wc2xpY19oYW5kbGUgPSBwc2xpY19oYW5kbGU7CisJCWNtZC0+Y21kNjQuaG9zdGhhbmRsZSA9IHBzbGljX2hhbmRsZS0+dG9rZW4uaGFuZGxlX3Rva2VuOworCQljbWQtPmJ1c3kgPSBGQUxTRTsKKwkJY21kLT5wYWRkcmwgPSBwaHlzX2FkZHJsOworCQljbWQtPnBhZGRyaCA9IHBoeXNfYWRkcmg7CisJCWNtZC0+bmV4dF9hbGwgPSBwcmV2OworCQljbWQtPm5leHQgPSBwcmV2OworCQlwcmV2ID0gY21kOworCQlwaHlzX2FkZHJsICs9IFNMSUNfSE9TVENNRF9TSVpFOworCQljbWRhZGRyICs9IFNMSUNfSE9TVENNRF9TSVpFOworCisJCWNtZCA9IChzdHJ1Y3Qgc2xpY19ob3N0Y21kICopY21kYWRkcjsKKwkJY21kY250Kys7CisJfQorCisJY21kcSA9ICZhZGFwdGVyLT5jbWRxX2FsbDsKKwljbWRxLT5jb3VudCArPSBjbWRjbnQ7CS8qICBTTElDX0NNRFFfQ01EU0lOUEFHRTsgICBtb29rdG9kbyAqLworCXRhaWwtPm5leHRfYWxsID0gY21kcS0+aGVhZDsKKwlBU1NFUlQoVkFMSURfQUREUkVTUyhwcmV2KSk7CisJY21kcS0+aGVhZCA9IHByZXY7CisJY21kcSA9ICZhZGFwdGVyLT5jbWRxX2ZyZWU7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNtZHEtPmxvY2subG9jaywgY21kcS0+bG9jay5mbGFncyk7CisJY21kcS0+Y291bnQgKz0gY21kY250OwkvKiAgU0xJQ19DTURRX0NNRFNJTlBBR0U7ICAgbW9va3RvZG8gKi8KKwl0YWlsLT5uZXh0ID0gY21kcS0+aGVhZDsKKwlBU1NFUlQoVkFMSURfQUREUkVTUyhwcmV2KSk7CisJY21kcS0+aGVhZCA9IHByZXY7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21kcS0+bG9jay5sb2NrLCBjbWRxLT5sb2NrLmZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBzbGljX2hvc3RjbWQgKnNsaWNfY21kcV9nZXRmcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljX2NtZHF1ZXVlICpjbWRxID0gJmFkYXB0ZXItPmNtZHFfZnJlZTsKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpjbWQgPSBOVUxMOworCitsb2NrX2FuZF9yZXRyeToKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY21kcS0+bG9jay5sb2NrLCBjbWRxLT5sb2NrLmZsYWdzKTsKK3JldHJ5OgorCWNtZCA9IGNtZHEtPmhlYWQ7CisJaWYgKGNtZCkgeworCQljbWRxLT5oZWFkID0gY21kLT5uZXh0OworCQljbWRxLT5jb3VudC0tOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbWRxLT5sb2NrLmxvY2ssIGNtZHEtPmxvY2suZmxhZ3MpOworCX0gZWxzZSB7CisJCXNsaWNfY21kcV9nZXRkb25lKGFkYXB0ZXIpOworCQljbWQgPSBjbWRxLT5oZWFkOworCQlpZiAoY21kKSB7CisJCQlnb3RvIHJldHJ5OworCQl9IGVsc2UgeworCQkJdTMyICpwYWdlYWRkcjsKKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21kcS0+bG9jay5sb2NrLAorCQkJCQkJY21kcS0+bG9jay5mbGFncyk7CisJCQlwYWdlYWRkciA9IHNsaWNfY21kcW1lbV9hZGRwYWdlKGFkYXB0ZXIpOworCQkJaWYgKHBhZ2VhZGRyKSB7CisJCQkJc2xpY19jbWRxX2FkZGNtZHBhZ2UoYWRhcHRlciwgcGFnZWFkZHIpOworCQkJCWdvdG8gbG9ja19hbmRfcmV0cnk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGNtZDsKK30KKworc3RhdGljIHZvaWQgc2xpY19jbWRxX2dldGRvbmUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfY21kcXVldWUgKmRvbmVfY21kcSA9ICZhZGFwdGVyLT5jbWRxX2RvbmU7CisJc3RydWN0IHNsaWNfY21kcXVldWUgKmZyZWVfY21kcSA9ICZhZGFwdGVyLT5jbWRxX2ZyZWU7CisKKwlBU1NFUlQoZnJlZV9jbWRxLT5oZWFkID09IE5VTEwpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkb25lX2NtZHEtPmxvY2subG9jaywgZG9uZV9jbWRxLT5sb2NrLmZsYWdzKTsKKwlBU1NFUlQoVkFMSURfQUREUkVTUyhkb25lX2NtZHEtPmhlYWQpKTsKKworCWZyZWVfY21kcS0+aGVhZCA9IGRvbmVfY21kcS0+aGVhZDsKKwlmcmVlX2NtZHEtPmNvdW50ID0gZG9uZV9jbWRxLT5jb3VudDsKKwlkb25lX2NtZHEtPmhlYWQgPSBOVUxMOworCWRvbmVfY21kcS0+dGFpbCA9IE5VTEw7CisJZG9uZV9jbWRxLT5jb3VudCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9uZV9jbWRxLT5sb2NrLmxvY2ssIGRvbmVfY21kcS0+bG9jay5mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfY21kcV9wdXRkb25lX2lycShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCQlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpjbWQpCit7CisJc3RydWN0IHNsaWNfY21kcXVldWUgKmNtZHEgPSAmYWRhcHRlci0+Y21kcV9kb25lOworCisJc3Bpbl9sb2NrKCZjbWRxLT5sb2NrLmxvY2spOworCWNtZC0+YnVzeSA9IDA7CisJQVNTRVJUKFZBTElEX0FERFJFU1MoY21kcS0+aGVhZCkpOworCWNtZC0+bmV4dCA9IGNtZHEtPmhlYWQ7CisJQVNTRVJUKFZBTElEX0FERFJFU1MoY21kKSk7CisJY21kcS0+aGVhZCA9IGNtZDsKKwljbWRxLT5jb3VudCsrOworCWlmICgoYWRhcHRlci0+eG1pdHFfZnVsbCkgJiYgKGNtZHEtPmNvdW50ID4gMTApKQorCQluZXRpZl93YWtlX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CisJc3Bpbl91bmxvY2soJmNtZHEtPmxvY2subG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19yY3ZxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWludCBpLCBjb3VudDsKKwlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKKworCURCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7CisJQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOworCXJjdnEtPnRhaWwgPSBOVUxMOworCXJjdnEtPmhlYWQgPSBOVUxMOworCXJjdnEtPnNpemUgPSBTTElDX1JDVlFfRU5UUklFUzsKKwlyY3ZxLT5lcnJvcnMgPSAwOworCXJjdnEtPmNvdW50ID0gMDsKKwlpID0gKFNMSUNfUkNWUV9FTlRSSUVTIC8gU0xJQ19SQ1ZRX0ZJTExFTlRSSUVTKTsKKwljb3VudCA9IDA7CisJd2hpbGUgKGkpIHsKKwkJY291bnQgKz0gc2xpY19yY3ZxdWV1ZV9maWxsKGFkYXB0ZXIpOworCQlpLS07CisJfQorCWlmIChyY3ZxLT5jb3VudCA8IFNMSUNfUkNWUV9NSU5FTlRSSUVTKSB7CisJCXNsaWNfcmN2cXVldWVfZnJlZShhZGFwdGVyKTsKKwkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOworCX0KKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgaW50IHNsaWNfcmN2cXVldWVfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfcmN2cXVldWUgKnJjdnEgPSAmYWRhcHRlci0+cmN2cXVldWU7CisKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOworCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKKwlBU1NFUlQocmN2cSk7CisKKwlEQkdfTVNHKCJzbGljb3NzOiBOb3RoaW5nIHRvIGRvLiByY3ZxWyVwXVxuIgorCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudFsleF1cbiIKKwkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFslcF1cbiIKKwkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbFslcF1cbiIsCisJCXJjdnEsIHJjdnEtPmNvdW50LCByY3ZxLT5oZWFkLCByY3ZxLT50YWlsKTsKKworCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVQgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfcmN2cXVldWVfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJd2hpbGUgKHJjdnEtPmhlYWQpIHsKKwkJc2tiID0gcmN2cS0+aGVhZDsKKwkJcmN2cS0+aGVhZCA9IHJjdnEtPmhlYWQtPm5leHQ7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwl9CisJcmN2cS0+dGFpbCA9IE5VTEw7CisJcmN2cS0+aGVhZCA9IE5VTEw7CisJcmN2cS0+Y291bnQgPSAwOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNsaWNfcmN2cXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmOworCWludCBjb3VudDsKKworCWlmIChyY3ZxLT5jb3VudCkgeworCQlza2IgPSByY3ZxLT5oZWFkOworCQlyY3ZidWYgPSAoc3RydWN0IHNsaWNfcmN2YnVmICopc2tiLT5oZWFkOworCQlBU1NFUlQocmN2YnVmKTsKKworCQlpZiAocmN2YnVmLT5zdGF0dXMgJiBJUkhERFJfU1ZBTElEKSB7CisJCQlyY3ZxLT5oZWFkID0gcmN2cS0+aGVhZC0+bmV4dDsKKwkJCXNrYi0+bmV4dCA9IE5VTEw7CisJCQlyY3ZxLT5jb3VudC0tOworCQl9IGVsc2UgeworCQkJc2tiID0gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCURCR19FUlJPUigiUmN2USBFbXB0eSEhIGFkYXB0ZXJbJXBdIHJjdnFbJXBdIGNvdW50WyV4XVxuIiwKKwkJCSAgYWRhcHRlciwgcmN2cSwgcmN2cS0+Y291bnQpOworCQlza2IgPSBOVUxMOworCX0KKwl3aGlsZSAocmN2cS0+Y291bnQgPCBTTElDX1JDVlFfRklMTFRIUkVTSCkgeworCQljb3VudCA9IHNsaWNfcmN2cXVldWVfZmlsbChhZGFwdGVyKTsKKwkJaWYgKCFjb3VudCkKKwkJCWJyZWFrOworCX0KKwlpZiAoc2tiKQorCQlyY3ZxLT5lcnJvcnMgPSAwOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19yY3ZxdWV1ZV9maWxsKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXZvaWQgKnBhZGRyOworCXUzMiBwYWRkcmw7CisJdTMyIHBhZGRyaDsKKwlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKKwlpbnQgaSA9IDA7CisKKwl3aGlsZSAoaSA8IFNMSUNfUkNWUV9GSUxMRU5UUklFUykgeworCQlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1ZjsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKyNpZmRlZiBLTFVER0VfRk9SXzRHQl9CT1VOREFSWQorcmV0cnlfcmN2cWZpbGw6CisjZW5kaWYKKwkJc2tiID0gYWxsb2Nfc2tiKFNMSUNfUkNWUV9SQ1ZCVUZTSVpFLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHNrYikgeworCQkJcGFkZHIgPSAodm9pZCAqKXBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJCQkgIHNrYi0+ZGF0YSwKKwkJCQkJCQkgIFNMSUNfUkNWUV9SQ1ZCVUZTSVpFLAorCQkJCQkJCSAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXBhZGRybCA9IFNMSUNfR0VUX0FERFJfTE9XKHBhZGRyKTsKKwkJCXBhZGRyaCA9IFNMSUNfR0VUX0FERFJfSElHSChwYWRkcik7CisKKwkJCXNrYi0+bGVuID0gU0xJQ19SQ1ZCVUZfSEVBRFNJWkU7CisJCQlyY3ZidWYgPSAoc3RydWN0IHNsaWNfcmN2YnVmICopc2tiLT5oZWFkOworCQkJcmN2YnVmLT5zdGF0dXMgPSAwOworCQkJc2tiLT5uZXh0ID0gTlVMTDsKKyNpZmRlZiBLTFVER0VfRk9SXzRHQl9CT1VOREFSWQorCQkJaWYgKHBhZGRybCA9PSAwKSB7CisJCQkJREJHX0VSUk9SCisJCQkJICAgICgiJXM6IExPVyAzMmJpdHMgUEhZU0lDQUwgQUREUkVTUyA9PSAwICIKKwkJCQkgICAgICJza2JbJXBdICAgUFJPQkxFTVxuIgorCQkJCSAgICAgIiAgICAgICAgIHNrYmRhdGFbJXBdXG4iCisJCQkJICAgICAiICAgICAgICAgc2tibGVuWyV4XVxuIgorCQkJCSAgICAgIiAgICAgICAgIHBhZGRyWyVwXVxuIgorCQkJCSAgICAgIiAgICAgICAgIHBhZGRybFsleF1cbiIKKwkJCQkgICAgICIgICAgICAgICBwYWRkcmhbJXhdXG4iLCBfX2Z1bmNfXywgc2tiLAorCQkJCSAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiwgcGFkZHIsIHBhZGRybCwKKwkJCQkgICAgIHBhZGRyaCk7CisJCQkJREJHX0VSUk9SKCIgICAgICAgICByY3ZxLT5oZWFkWyVwXVxuIgorCQkJCQkgICIgICAgICAgICByY3ZxLT50YWlsWyVwXVxuIgorCQkJCQkgICIgICAgICAgICByY3ZxLT5jb3VudFsleF1cbiIsCisJCQkJCSAgcmN2cS0+aGVhZCwgcmN2cS0+dGFpbCwgcmN2cS0+Y291bnQpOworCQkJCURCR19FUlJPUigiU0tJUCBUSElTIFNLQiEhISEhISEhXG4iKTsKKwkJCQlnb3RvIHJldHJ5X3JjdnFmaWxsOworCQkJfQorI2Vsc2UKKwkJCWlmIChwYWRkcmwgPT0gMCkgeworCQkJCURCR19FUlJPUgorCQkJCSAgICAoIlxuXG4lczogTE9XIDMyYml0cyBQSFlTSUNBTCBBRERSRVNTID09IDAgIgorCQkJCSAgICAgInNrYlslcF0gIEdJVkUgVE8gQ0FSRCBBTllXQVlcbiIKKwkJCQkgICAgICIgICAgICAgICBza2JkYXRhWyVwXVxuIgorCQkJCSAgICAgIiAgICAgICAgIHBhZGRyWyVwXVxuIgorCQkJCSAgICAgIiAgICAgICAgIHBhZGRybFsleF1cbiIKKwkJCQkgICAgICIgICAgICAgICBwYWRkcmhbJXhdXG4iLCBfX2Z1bmNfXywgc2tiLAorCQkJCSAgICAgc2tiLT5kYXRhLCBwYWRkciwgcGFkZHJsLCBwYWRkcmgpOworCQkJfQorI2VuZGlmCisJCQlpZiAocGFkZHJoID09IDApIHsKKwkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2hiYXIsCisJCQkJCSAgKHUzMikgcGFkZHJsLCBET05UX0ZMVVNIKTsKKwkJCX0gZWxzZSB7CisJCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19oYmFyNjQsCisJCQkJCSAgICAodTMyKSBwYWRkcmwsCisJCQkJCSAgICBhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkJICAgICh1MzIpIHBhZGRyaCwgRE9OVF9GTFVTSCk7CisJCQl9CisJCQlpZiAocmN2cS0+aGVhZCkKKwkJCQlyY3ZxLT50YWlsLT5uZXh0ID0gc2tiOworCQkJZWxzZQorCQkJCXJjdnEtPmhlYWQgPSBza2I7CisJCQlyY3ZxLT50YWlsID0gc2tiOworCQkJcmN2cS0+Y291bnQrKzsKKwkJCWkrKzsKKwkJfSBlbHNlIHsKKwkJCURCR19FUlJPUgorCQkJICAgICgiJXMgc2xpY19yY3ZxdWV1ZV9maWxsIGNvdWxkIG9ubHkgZ2V0IFslZF0gIgorCQkJICAgICAic2tidWZmc1xuIiwKKwkJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBpOworfQorCitzdGF0aWMgdTMyIHNsaWNfcmN2cXVldWVfcmVpbnNlcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNsaWNfcmN2cXVldWUgKnJjdnEgPSAmYWRhcHRlci0+cmN2cXVldWU7CisJdm9pZCAqcGFkZHI7CisJdTMyIHBhZGRybDsKKwl1MzIgcGFkZHJoOworCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmID0gKHN0cnVjdCBzbGljX3JjdmJ1ZiAqKXNrYi0+aGVhZDsKKworCUFTU0VSVChza2ItPmxlbiA9PSBTTElDX1JDVkJVRl9IRUFEU0laRSk7CisKKwlwYWRkciA9ICh2b2lkICopcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGNpZGV2LCBza2ItPmhlYWQsCisJCQkJICBTTElDX1JDVlFfUkNWQlVGU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlyY3ZidWYtPnN0YXR1cyA9IDA7CisJc2tiLT5uZXh0ID0gTlVMTDsKKworCXBhZGRybCA9IFNMSUNfR0VUX0FERFJfTE9XKHBhZGRyKTsKKwlwYWRkcmggPSBTTElDX0dFVF9BRERSX0hJR0gocGFkZHIpOworCisJaWYgKHBhZGRybCA9PSAwKSB7CisJCURCR19FUlJPUgorCQkgICAgKCIlczogTE9XIDMyYml0cyBQSFlTSUNBTCBBRERSRVNTID09IDAgc2tiWyVwXSAgIFBST0JMRU1cbiIKKwkJICAgICAiICAgICAgICAgc2tiZGF0YVslcF1cbiIgIiAgICAgICAgIHNrYmxlblsleF1cbiIKKwkJICAgICAiICAgICAgICAgcGFkZHJbJXBdXG4iICIgICAgICAgICBwYWRkcmxbJXhdXG4iCisJCSAgICAgIiAgICAgICAgIHBhZGRyaFsleF1cbiIsIF9fZnVuY19fLCBza2IsIHNrYi0+ZGF0YSwKKwkJICAgICBza2ItPmxlbiwgcGFkZHIsIHBhZGRybCwgcGFkZHJoKTsKKwkJREJHX0VSUk9SKCIgICAgICAgICByY3ZxLT5oZWFkWyVwXVxuIgorCQkJICAiICAgICAgICAgcmN2cS0+dGFpbFslcF1cbiIKKwkJCSAgIiAgICAgICAgIHJjdnEtPmNvdW50WyV4XVxuIiwgcmN2cS0+aGVhZCwgcmN2cS0+dGFpbCwKKwkJCSAgcmN2cS0+Y291bnQpOworCX0KKwlpZiAocGFkZHJoID09IDApIHsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19oYmFyLCAodTMyKSBwYWRkcmwsCisJCQkgIERPTlRfRkxVU0gpOworCX0gZWxzZSB7CisJCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2hiYXI2NCwKKwkJCSAgICBwYWRkcmwsCisJCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkgICAgcGFkZHJoLCBET05UX0ZMVVNIKTsKKwl9CisJaWYgKHJjdnEtPmhlYWQpCisJCXJjdnEtPnRhaWwtPm5leHQgPSBza2I7CisJZWxzZQorCQlyY3ZxLT5oZWFkID0gc2tiOworCXJjdnEtPnRhaWwgPSBza2I7CisJcmN2cS0+Y291bnQrKzsKKwlyZXR1cm4gcmN2cS0+Y291bnQ7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19kZWJ1Z19jYXJkX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisjaWZkZWYgTU9PS1RPRE8KKwlpbnQgaTsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IHNsaWNfY29uZmlnICpjb25maWcgPSAmY2FyZC0+Y29uZmlnOworCXVuc2lnbmVkIGNoYXIgKmZydSA9ICh1bnNpZ25lZCBjaGFyICopKCZjYXJkLT5jb25maWcuYXRrX2ZydSk7CisJdW5zaWduZWQgY2hhciAqb2VtZnJ1ID0gKHVuc2lnbmVkIGNoYXIgKikoJmNhcmQtPmNvbmZpZy5PZW1GcnUpOworI2VuZGlmCisKKwlzZXFfcHJpbnRmKHNlcSwgImRyaXZlcl92ZXJzaW9uICAgICAgICAgICA6ICVzIiwgc2xpY19wcm9jX3ZlcnNpb24pOworCXNlcV9wcmludGYoc2VxLCAiTWljcm9jb2RlIHZlcnNpb25zOiAgICAgICAgICAgXG4iKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgICBHaWdhYml0IChnYikgICAgICAgICA6ICVzICVzXG4iLAorCQkgICAgTU9KQVZFX1VDT0RFX1ZFUlNfU1RSSU5HLCBNT0pBVkVfVUNPREVfVkVSU19EQVRFKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgICBHaWdhYml0IFJlY2VpdmVyICAgICA6ICVzICVzXG4iLAorCQkgICAgR0JfUkNWVUNPREVfVkVSU19TVFJJTkcsIEdCX1JDVlVDT0RFX1ZFUlNfREFURSk7CisJc2VxX3ByaW50ZihzZXEsICJWZW5kb3IgICAgICAgICAgICAgICAgICAgOiAlc1xuIiwgc2xpY192ZW5kb3IpOworCXNlcV9wcmludGYoc2VxLCAiUHJvZHVjdCBOYW1lICAgICAgICAgICAgIDogJXNcbiIsIHNsaWNfcHJvZHVjdF9uYW1lKTsKKyNpZmRlZiBNT09LVE9ETworCXNlcV9wcmludGYoc2VxLCAiVmVuZG9ySWQgICAgICAgICAgICAgICAgIDogJTQuNFhcbiIsCisJCSAgICBjb25maWctPlZlbmRvcklkKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkRldmljZUlkICAgICAgICAgICAgICAgICA6ICU0LjRYXG4iLAorCQkgICAgY29uZmlnLT5EZXZpY2VJZCk7CisJc2VxX3ByaW50ZihzZXEsICJSZXZpc2lvbklkICAgICAgICAgICAgICAgOiAlMi4yeFxuIiwKKwkJICAgIGNvbmZpZy0+UmV2aXNpb25JZCk7CisJc2VxX3ByaW50ZihzZXEsICJCdXMgICAgIyAgICAgICAgICAgICAgICAgOiAlZFxuIiwgY2FyZC0+YnVzbnVtYmVyKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkRldmljZSAjICAgICAgICAgICAgICAgICA6ICVkXG4iLCBjYXJkLT5zbG90bnVtYmVyKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkludGVyZmFjZXMgICAgICAgICAgICAgICA6ICVkXG4iLCBjYXJkLT5jYXJkX3NpemUpOworCXNlcV9wcmludGYoc2VxLCAiICAgICBJbml0aWFsaXplZCAgICAgICAgIDogJWRcbiIsCisJCSAgICBjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQpOworCXNlcV9wcmludGYoc2VxLCAiICAgICBBbGxvY2F0ZWQgICAgICAgICAgIDogJWRcbiIsCisJCSAgICBjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQpOworCUFTU0VSVChjYXJkLT5jYXJkX3NpemUgPD0gU0xJQ19OQlJfTUFDUyk7CisJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7CisJCXNlcV9wcmludGYoc2VxLAorCQkJICAgIiAgICAgTUFDJWQgOiAlMi4yWCAlMi4yWCAlMi4yWCAlMi4yWCAlMi4yWCAlMi4yWFxuIiwKKwkJCSAgIGksIGNvbmZpZy0+bWFjaW5mb1tpXS5tYWNhZGRyQVswXSwKKwkJCSAgIGNvbmZpZy0+bWFjaW5mb1tpXS5tYWNhZGRyQVsxXSwKKwkJCSAgIGNvbmZpZy0+bWFjaW5mb1tpXS5tYWNhZGRyQVsyXSwKKwkJCSAgIGNvbmZpZy0+bWFjaW5mb1tpXS5tYWNhZGRyQVszXSwKKwkJCSAgIGNvbmZpZy0+bWFjaW5mb1tpXS5tYWNhZGRyQVs0XSwKKwkJCSAgIGNvbmZpZy0+bWFjaW5mb1tpXS5tYWNhZGRyQVs1XSk7CisJfQorCXNlcV9wcmludGYoc2VxLCAiICAgICBJRiAgSW5pdCBTdGF0ZSBEdXBsZXgvU3BlZWQgaXJxXG4iKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJZm9yIChpID0gMDsgaSA8IGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZDsgaSsrKSB7CisJCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOworCisJCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyW2ldOworCQlpZiAoYWRhcHRlcikgeworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgICVkICAgJWQgICAlcyAgJXMgICVzICAgIDB4JVhcbiIsCisJCQkJICAgIGFkYXB0ZXItPnBoeXNwb3J0LCBhZGFwdGVyLT5zdGF0ZSwKKwkJCQkgICAgU0xJQ19MSU5LU1RBVEUoYWRhcHRlci0+bGlua3N0YXRlKSwKKwkJCQkgICAgU0xJQ19EVVBMRVgoYWRhcHRlci0+bGlua2R1cGxleCksCisJCQkJICAgIFNMSUNfU1BFRUQoYWRhcHRlci0+bGlua3NwZWVkKSwKKwkJCQkgICAgKHVpbnQpIGFkYXB0ZXItPmlycSk7CisJCX0KKwl9CisJc2VxX3ByaW50ZihzZXEsICJHZW5lcmF0aW9uICMgICAgICAgICAgICAgOiAlNC40WFxuIiwgY2FyZC0+Z2VubnVtYmVyKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlJjdlEgbWF4IGVudHJpZXMgICAgICAgICA6ICU0LjRYXG4iLAorCQkgICAgU0xJQ19SQ1ZRX0VOVFJJRVMpOworCXNlcV9wcmludGYoc2VxLCAiUGluZyBTdGF0dXMgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCSAgICBjYXJkLT5waW5nc3RhdHVzKTsKKwlzZXFfcHJpbnRmKHNlcSwgIk1pbmltdW0gZ3JhbnQgICAgICAgICAgICA6ICUyLjJ4XG4iLAorCQkgICAgY29uZmlnLT5NaW5HcmFudCk7CisJc2VxX3ByaW50ZihzZXEsICJNYXhpbXVtIExhdGVuY3kgICAgICAgICAgOiAlMi4yeFxuIiwgY29uZmlnLT5NYXhMYXQpOworCXNlcV9wcmludGYoc2VxLCAiUGNpU3RhdHVzICAgICAgICAgICAgICAgIDogJTQuNHhcbiIsCisJCSAgICBjb25maWctPlBjaXN0YXR1cyk7CisJc2VxX3ByaW50ZihzZXEsICJEZWJ1ZyBEZXZpY2UgSWQgICAgICAgICAgOiAlNC40eFxuIiwKKwkJICAgIGNvbmZpZy0+RGJnRGV2SWQpOworCXNlcV9wcmludGYoc2VxLCAiRFJBTSBST00gRnVuY3Rpb24gICAgICAgIDogJTQuNHhcbiIsCisJCSAgICBjb25maWctPkRyYW1Sb21Gbik7CisJc2VxX3ByaW50ZihzZXEsICJOZXR3b3JrIGludGVyZmFjZSBQaW4gMSAgOiAlMi4yeFxuIiwKKwkJICAgIGNvbmZpZy0+TmV0SW50UGluMSk7CisJc2VxX3ByaW50ZihzZXEsICJOZXR3b3JrIGludGVyZmFjZSBQaW4gMiAgOiAlMi4yeFxuIiwKKwkJICAgIGNvbmZpZy0+TmV0SW50UGluMSk7CisJc2VxX3ByaW50ZihzZXEsICJOZXR3b3JrIGludGVyZmFjZSBQaW4gMyAgOiAlMi4yeFxuIiwKKwkJICAgIGNvbmZpZy0+TmV0SW50UGluMSk7CisJc2VxX3ByaW50ZihzZXEsICJQTSBjYXBhYmlsaXRpZXMgICAgICAgICAgOiAlNC40WFxuIiwKKwkJICAgIGNvbmZpZy0+UE1FQ2FwYWIpOworCXNlcV9wcmludGYoc2VxLCAiTmV0d29yayBDbG9jayBDb250cm9scyAgIDogJTQuNFhcbiIsCisJCSAgICBjb25maWctPk53Q2xrQ3RybHMpOworCisJc3dpdGNoIChjb25maWctPkZydUZvcm1hdCkgeworCWNhc2UgQVRLX0ZSVV9GT1JNQVQ6CisJCXsKKwkJCXNlcV9wcmludGYoc2VxLAorCQkJICAgICJWZW5kb3IgICAgICAgICAgICAgICAgICAgOiBBbGFjcml0ZWNoLCBJbmMuXG4iKTsKKwkJCXNlcV9wcmludGYoc2VxLAorCQkJICAgICJBc3NlbWJseSAjICAgICAgICAgICAgICAgOiAlYyVjJWMlYyVjJWNcbiIsCisJCQkJICAgIGZydVswXSwgZnJ1WzFdLCBmcnVbMl0sIGZydVszXSwgZnJ1WzRdLAorCQkJCSAgICBmcnVbNV0pOworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJICAgICJSZXZpc2lvbiAjICAgICAgICAgICAgICAgOiAlYyVjXG4iLAorCQkJCSAgICBmcnVbNl0sIGZydVs3XSk7CisKKwkJCWlmIChjb25maWctPk9FTUZydUZvcm1hdCA9PSBWRU5ET1I0X0ZSVV9GT1JNQVQpIHsKKwkJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkJICAgICJTZXJpYWwgICAjICAgICAgICAgICAgICAgOiAiCisJCQkJCSAgICAiJWMlYyVjJWMlYyVjJWMlYyVjJWMlYyVjXG4iLAorCQkJCQkgICAgZnJ1WzhdLCBmcnVbOV0sIGZydVsxMF0sCisJCQkJCSAgICBmcnVbMTFdLCBmcnVbMTJdLCBmcnVbMTNdLAorCQkJCQkgICAgZnJ1WzE2XSwgZnJ1WzE3XSwgZnJ1WzE4XSwKKwkJCQkJICAgIGZydVsxOV0sIGZydVsyMF0sIGZydVsyMV0pOworCQkJfSBlbHNlIHsKKwkJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkJICAgICJTZXJpYWwgICAjICAgICAgICAgICAgICAgOiAiCisJCQkJCSAgICAiJWMlYyVjJWMlYyVjJWMlYyVjJWMlYyVjJWMlY1xuIiwKKwkJCQkJICAgIGZydVs4XSwgZnJ1WzldLCBmcnVbMTBdLAorCQkJCQkgICAgZnJ1WzExXSwgZnJ1WzEyXSwgZnJ1WzEzXSwKKwkJCQkJICAgIGZydVsxNF0sIGZydVsxNV0sIGZydVsxNl0sCisJCQkJCSAgICBmcnVbMTddLCBmcnVbMThdLCBmcnVbMTldLAorCQkJCQkgICAgZnJ1WzIwXSwgZnJ1WzIxXSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJeworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkgICAgIlZlbmRvciAgICAgICAgICAgICAgICAgICA6IEFsYWNyaXRlY2gsIEluYy5cbiIpOworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkgICAgIlNlcmlhbCAgICMgICAgICAgICAgICAgICA6IEVtcHR5IEZSVVxuIik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXN3aXRjaCAoY29uZmlnLT5PRU1GcnVGb3JtYXQpIHsKKwljYXNlIFZFTkRPUjFfRlJVX0ZPUk1BVDoKKwkJeworCQkJc2VxX3ByaW50ZihzZXEsICJGUlUgSW5mb3JtYXRpb246XG4iKTsKKwkJCXNlcV9wcmludGYoc2VxLCAiICAgIENvbW1vZGl0eSAjICAgICAgICAgIDogJWNcbiIsCisJCQkJICAgIG9lbWZydVswXSk7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAgIiAgICBBc3NlbWJseSAjICAgICAgICAgICA6ICVjJWMlYyVjXG4iLAorCQkJCSAgICBvZW1mcnVbMV0sIG9lbWZydVsyXSwgb2VtZnJ1WzNdLCBvZW1mcnVbNF0pOworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgUmV2aXNpb24gIyAgICAgICAgICAgOiAlYyVjXG4iLAorCQkJCSAgICBvZW1mcnVbNV0sIG9lbWZydVs2XSk7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAgIiAgICBTdXBwbGllciAjICAgICAgICAgICA6ICVjJWNcbiIsCisJCQkJICAgIG9lbWZydVs3XSwgb2VtZnJ1WzhdKTsKKwkJCXNlcV9wcmludGYoc2VxLAorCQkJCSAgICAiICAgIERhdGUgICAgICAgICAgICAgICAgIDogJWMlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzldLCBvZW1mcnVbMTBdKTsKKwkJCXNlcV9zcHJpbnRmKHNlcSwKKwkJCQkgICAgIiAgICBTZXF1ZW5jZSAjICAgICAgICAgICA6ICVjJWMlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzExXSwgb2VtZnJ1WzEyXSwgb2VtZnJ1WzEzXSk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBWRU5ET1IyX0ZSVV9GT1JNQVQ6CisJCXsKKwkJCXNlcV9wcmludGYoc2VxLCAiRlJVIEluZm9ybWF0aW9uOlxuIik7CisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAgIiAgICBQYXJ0ICAgICAjICAgICAgICAgICA6ICIKKwkJCQkgICAgIiVjJWMlYyVjJWMlYyVjJWNcbiIsCisJCQkJICAgIG9lbWZydVswXSwgb2VtZnJ1WzFdLCBvZW1mcnVbMl0sCisJCQkJICAgIG9lbWZydVszXSwgb2VtZnJ1WzRdLCBvZW1mcnVbNV0sCisJCQkJICAgIG9lbWZydVs2XSwgb2VtZnJ1WzddKTsKKwkJCXNlcV9wcmludGYoc2VxLAorCQkJCSAgICAiICAgIFN1cHBsaWVyICMgICAgICAgICAgIDogJWMlYyVjJWMlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzhdLCBvZW1mcnVbOV0sIG9lbWZydVsxMF0sCisJCQkJICAgIG9lbWZydVsxMV0sIG9lbWZydVsxMl0pOworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgRGF0ZSAgICAgICAgICAgICAgICAgOiAlYyVjJWNcbiIsCisJCQkJICAgIG9lbWZydVsxM10sIG9lbWZydVsxNF0sIG9lbWZydVsxNV0pOworCQkJc2VxX3NwcmludGYoc2VxLAorCQkJCSAgICAiICAgIFNlcXVlbmNlICMgICAgICAgICAgIDogJWMlYyVjJWNcbiIsCisJCQkJICAgIG9lbWZydVsxNl0sIG9lbWZydVsxN10sIG9lbWZydVsxOF0sCisJCQkJICAgIG9lbWZydVsxOV0pOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgVkVORE9SM19GUlVfRk9STUFUOgorCQl7CisJCQlzZXFfcHJpbnRmKHNlcSwgIkZSVSBJbmZvcm1hdGlvbjpcbiIpOworCQl9CisKKwljYXNlIFZFTkRPUjRfRlJVX0ZPUk1BVDoKKwkJeworCQkJc2VxX3ByaW50ZihzZXEsICJGUlUgSW5mb3JtYXRpb246XG4iKTsKKwkJCXNlcV9wcmludGYoc2VxLAorCQkJCSAgICAiICAgIEZSVSBOdW1iZXIgICAgICAgICAgIDogIgorCQkJCSAgICAiJWMlYyVjJWMlYyVjJWMlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzBdLCBvZW1mcnVbMV0sIG9lbWZydVsyXSwKKwkJCQkgICAgb2VtZnJ1WzNdLCBvZW1mcnVbNF0sIG9lbWZydVs1XSwKKwkJCQkgICAgb2VtZnJ1WzZdLCBvZW1mcnVbN10pOworCQkJc2VxX3NwcmludGYoc2VxLAorCQkJCSAgICAiICAgIFBhcnQgTnVtYmVyICAgICAgICAgIDogIgorCQkJCSAgICAiJWMlYyVjJWMlYyVjJWMlY1xuIiwKKwkJCQkgICAgb2VtZnJ1WzhdLCBvZW1mcnVbOV0sIG9lbWZydVsxMF0sCisJCQkJICAgIG9lbWZydVsxMV0sIG9lbWZydVsxMl0sIG9lbWZydVsxM10sCisJCQkJICAgIG9lbWZydVsxNF0sIG9lbWZydVsxNV0pOworCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJICAgICIgICAgRUMgTGV2ZWwgICAgICAgICAgICAgOiAiCisJCQkJICAgICIlYyVjJWMlYyVjJWMlYyVjXG4iLAorCQkJCSAgICBvZW1mcnVbMTZdLCBvZW1mcnVbMTddLCBvZW1mcnVbMThdLAorCQkJCSAgICBvZW1mcnVbMTldLCBvZW1mcnVbMjBdLCBvZW1mcnVbMjFdLAorCQkJCSAgICBvZW1mcnVbMjJdLCBvZW1mcnVbMjNdKTsKKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNsaWNfZGVidWdfYWRhcHRlcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gc2VxLT5wcml2YXRlOworCisJaWYgKChhZGFwdGVyLT5uZXRkZXYpICYmIChhZGFwdGVyLT5uZXRkZXYtPm5hbWUpKSB7CisJCXNlcV9wcmludGYoc2VxLCAiaW5mbzogaW50ZXJmYWNlICAgICAgICAgIDogJXNcbiIsCisJCQkgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKwl9CisJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBzdGF0dXMgICAgICAgICAgICAgOiAlc1xuIiwKKwkJU0xJQ19MSU5LU1RBVEUoYWRhcHRlci0+bGlua3N0YXRlKSk7CisJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBwb3J0ICAgICAgICAgICAgICAgOiAlZFxuIiwKKwkJYWRhcHRlci0+cGh5c3BvcnQpOworCXNlcV9wcmludGYoc2VxLCAiaW5mbzogc3BlZWQgICAgICAgICAgICAgIDogJXNcbiIsCisJCVNMSUNfU1BFRUQoYWRhcHRlci0+bGlua3NwZWVkKSk7CisJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBkdXBsZXggICAgICAgICAgICAgOiAlc1xuIiwKKwkJU0xJQ19EVVBMRVgoYWRhcHRlci0+bGlua2R1cGxleCkpOworCXNlcV9wcmludGYoc2VxLCAiaW5mbzogaXJxICAgICAgICAgICAgICAgIDogMHglWFxuIiwKKwkJKHVpbnQpIGFkYXB0ZXItPmlycSk7CisJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBJbnRlcnJ1cHQgQWdnIERlbGF5OiAlZCB1c2VjXG4iLAorCQlhZGFwdGVyLT5jYXJkLT5sb2FkbGV2ZWxfY3VycmVudCk7CisJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBSY3ZRIG1heCBlbnRyaWVzICAgOiAlNC40WFxuIiwKKwkJU0xJQ19SQ1ZRX0VOVFJJRVMpOworCXNlcV9wcmludGYoc2VxLCAiaW5mbzogUmN2USBjdXJyZW50ICAgICAgIDogJTQuNFhcbiIsCisJCSAgICBhZGFwdGVyLT5yY3ZxdWV1ZS5jb3VudCk7CisJc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogcGFja2V0cyAgICAgICAgICAgICAgICAgIDogJTguOGxYXG4iLAorCQkgICAgYWRhcHRlci0+c3RhdHMucnhfcGFja2V0cyk7CisJc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogYnl0ZXMgICAgICAgICAgICAgICAgICAgIDogJTguOGxYXG4iLAorCQkgICAgYWRhcHRlci0+c3RhdHMucnhfYnl0ZXMpOworCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IGJyb2FkY2FzdHMgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkgICAgYWRhcHRlci0+cmN2X2Jyb2FkY2FzdHMpOworCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IG11bHRpY2FzdHMgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkgICAgYWRhcHRlci0+cmN2X211bHRpY2FzdHMpOworCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IHVuaWNhc3RzICAgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkgICAgYWRhcHRlci0+cmN2X3VuaWNhc3RzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInJ4IHN0YXRzOiBlcnJvcnMgICAgICAgICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJICAgICh1MzIpIGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UucmN2X2Vycm9ycyk7CisJc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogTWlzc2VkIGVycm9ycyAgICAgICAgICAgIDogJTguOFhcbiIsCisJCSAgICAodTMyKSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnJjdl9kaXNjYXJkcyk7CisJc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogZHJvcHMgICAgICAgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCQkodTMyKSBhZGFwdGVyLT5yY3ZfZHJvcHMpOworCXNlcV9wcmludGYoc2VxLCAidHggc3RhdHM6IHBhY2tldHMgICAgICAgICAgICAgICAgICA6ICU4LjhsWFxuIiwKKwkJCWFkYXB0ZXItPnN0YXRzLnR4X3BhY2tldHMpOworCXNlcV9wcmludGYoc2VxLCAidHggc3RhdHM6IGJ5dGVzICAgICAgICAgICAgICAgICAgICA6ICU4LjhsWFxuIiwKKwkJCWFkYXB0ZXItPnN0YXRzLnR4X2J5dGVzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInR4IHN0YXRzOiBlcnJvcnMgICAgICAgICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCSh1MzIpIGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UueG10X2Vycm9ycyk7CisJc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogbXVsdGljYXN0cyAgICAgICAgICAgICAgIDogJTguOGxYXG4iLAorCQkJYWRhcHRlci0+c3RhdHMubXVsdGljYXN0KTsKKwlzZXFfcHJpbnRmKHNlcSwgInR4IHN0YXRzOiBjb2xsaXNpb24gZXJyb3JzICAgICAgICAgOiAlOC44WFxuIiwKKwkJCSh1MzIpIGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UueG1pdF9jb2xsaXNpb25zKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IE1heCByY3YgZnJhbWVzL2lzciAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPm1heF9pc3JfcmN2cyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBSY3YgaW50ZXJydXB0IHlpZWxkcyAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5yY3ZfaW50ZXJydXB0X3lpZWxkcyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBNYXggeG1pdCBjb21wbGV0ZS9pc3IgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5tYXhfaXNyX3htaXRzKTsKKwlzZXFfcHJpbnRmKHNlcSwgInBlcmY6IGVycm9yIGludGVycnVwdHMgICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmVycm9yX2ludGVycnVwdHMpOworCXNlcV9wcmludGYoc2VxLCAicGVyZjogZXJyb3Igcm1pc3MgaW50ZXJydXB0cyAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+ZXJyb3Jfcm1pc3NfaW50ZXJydXB0cyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiByY3YgaW50ZXJydXB0cyAgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5yY3ZfaW50ZXJydXB0cyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiB4bWl0IGludGVycnVwdHMgICAgICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT54bWl0X2ludGVycnVwdHMpOworCXNlcV9wcmludGYoc2VxLCAicGVyZjogbGluayBldmVudCBpbnRlcnJ1cHRzICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+bGlua2V2ZW50X2ludGVycnVwdHMpOworCXNlcV9wcmludGYoc2VxLCAicGVyZjogVVBSIGludGVycnVwdHMgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+dXByX2ludGVycnVwdHMpOworCXNlcV9wcmludGYoc2VxLCAicGVyZjogaW50ZXJydXB0IGNvdW50ICAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+bnVtX2lzcnMpOworCXNlcV9wcmludGYoc2VxLCAicGVyZjogZmFsc2UgaW50ZXJydXB0cyAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+ZmFsc2VfaW50ZXJydXB0cyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBBbGwgcmVnaXN0ZXIgd3JpdGVzICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5hbGxfcmVnX3dyaXRlcyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBJQ1IgcmVnaXN0ZXIgd3JpdGVzICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pY3JfcmVnX3dyaXRlcyk7CisJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBJU1IgcmVnaXN0ZXIgd3JpdGVzICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pc3JfcmVnX3dyaXRlcyk7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogb3ZlcmZsb3cgODAyIGVycm9ycyAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMub2Zsb3c4MDIpOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IHRyYW5zcG9ydCBvdmVyZmxvdyBlcnJvcnM6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwcnRvZmxvdyk7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogdW5kZXJmbG93IGVycm9ycyAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMudWZsb3c4MDIpOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IHJlY2VpdmUgZWFybHkgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLnJjdmVhcmx5KTsKKwlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBidWZmZXIgb3ZlcmZsb3dzICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5CdWZvdik7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogY2FycmllciBlcnJvcnMgICAgICAgICAgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ2FycmUpOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IExvbmcgICAgICAgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkxvbmdlKTsKKwlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBpbnZhbGlkIHByZWFtYmxlcyAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JbnZwKTsKKwlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBDUkMgZXJyb3JzICAgICAgICAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5DcmMpOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IGRyaWJibGUgbmliYmxlcyAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkRyYmwpOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IENvZGUgdmlvbGF0aW9ucyAgICAgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNvZGUpOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IFRDUCBjaGVja3N1bSBlcnJvcnMgICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwQ3N1bSk7CisJc2VxX3ByaW50ZihzZXEsICJpZmV2ZW50czogVENQIGhlYWRlciBzaG9ydCBlcnJvcnMgIDogJTguOFhcbiIsCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBIbGVuKTsKKwlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBJUCBjaGVja3N1bSBlcnJvcnMgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcENzdW0pOworCXNlcV9wcmludGYoc2VxLCAiaWZldmVudHM6IElQIGZyYW1lIGluY29tcGxldGVzICAgICA6ICU4LjhYXG4iLAorCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwTGVuKTsKKwlzZXFfcHJpbnRmKHNlcSwgImlmZXZlbnRzOiBJUCBoZWFkZXJzIHNob3J0cyAgICAgICAgOiAlOC44WFxuIiwKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcEhsZW4pOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IHNsaWNfZGVidWdfYWRhcHRlcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzbGljX2RlYnVnX2FkYXB0ZXJfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19kZWJ1Z19jYXJkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNsaWNfZGVidWdfY2FyZF9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2xpY19kZWJ1Z19hZGFwdGVyX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHNsaWNfZGVidWdfYWRhcHRlcl9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbGljX2RlYnVnX2NhcmRfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gc2xpY19kZWJ1Z19jYXJkX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIHNsaWNfZGVidWdfYWRhcHRlcl9jcmVhdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGRlbnRyeSAqZDsKKwljaGFyICAgIG5hbWVbN107CisJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKworCWlmICghY2FyZC0+ZGVidWdmc19kaXIpCisJCXJldHVybjsKKworCXNwcmludGYobmFtZSwgInBvcnQlZCIsIGFkYXB0ZXItPnBvcnQpOworCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIFNfSVJVR08sCisJCQkJY2FyZC0+ZGVidWdmc19kaXIsIGFkYXB0ZXIsCisJCQkJJnNsaWNfZGVidWdfYWRhcHRlcl9mb3BzKTsKKwlpZiAoIWQgfHwgSVNfRVJSKGQpKQorCQlwcl9pbmZvKFBGWCAiJXM6IGRlYnVnZnMgY3JlYXRlIGZhaWxlZFxuIiwgbmFtZSk7CisJZWxzZQorCQlhZGFwdGVyLT5kZWJ1Z2ZzX2VudHJ5ID0gZDsKK30KKworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19hZGFwdGVyX2Rlc3Ryb3koc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPmRlYnVnZnNfZW50cnkpIHsKKwkJZGVidWdmc19yZW1vdmUoYWRhcHRlci0+ZGVidWdmc19lbnRyeSk7CisJCWFkYXB0ZXItPmRlYnVnZnNfZW50cnkgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19jYXJkX2NyZWF0ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpCit7CisJc3RydWN0IGRlbnRyeSAqZDsKKwljaGFyICAgIG5hbWVbSUZOQU1TSVpdOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAic2xpYyVkIiwgY2FyZC0+Y2FyZG51bSk7CisJZCA9IGRlYnVnZnNfY3JlYXRlX2RpcihuYW1lLCBzbGljX2RlYnVnZnMpOworCWlmICghZCB8fCBJU19FUlIoZCkpCisJCXByX2luZm8oUEZYICIlczogZGVidWdmcyBjcmVhdGUgZGlyIGZhaWxlZFxuIiwKKwkJCQluYW1lKTsKKwllbHNlIHsKKwkJY2FyZC0+ZGVidWdmc19kaXIgPSBkOworCQlkID0gZGVidWdmc19jcmVhdGVfZmlsZSgiY2FyZGluZm8iLCBTX0lSVUdPLAorCQkJCXNsaWNfZGVidWdmcywgY2FyZCwKKwkJCQkmc2xpY19kZWJ1Z19jYXJkX2ZvcHMpOworCQlpZiAoIWQgfHwgSVNfRVJSKGQpKQorCQkJcHJfaW5mbyhQRlggIiVzOiBkZWJ1Z2ZzIGNyZWF0ZSBmYWlsZWRcbiIsCisJCQkJCW5hbWUpOworCQllbHNlCisJCQljYXJkLT5kZWJ1Z2ZzX2NhcmRpbmZvID0gZDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfZGVidWdfY2FyZF9kZXN0cm95KHN0cnVjdCBzbGljY2FyZCAqY2FyZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5jYXJkX3NpemU7IGkrKykgeworCQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKKworCQlhZGFwdGVyID0gY2FyZC0+YWRhcHRlcltpXTsKKwkJaWYgKGFkYXB0ZXIpCisJCQlzbGljX2RlYnVnX2FkYXB0ZXJfZGVzdHJveShhZGFwdGVyKTsKKwl9CisJaWYgKGNhcmQtPmRlYnVnZnNfY2FyZGluZm8pIHsKKwkJZGVidWdmc19yZW1vdmUoY2FyZC0+ZGVidWdmc19jYXJkaW5mbyk7CisJCWNhcmQtPmRlYnVnZnNfY2FyZGluZm8gPSBOVUxMOworCX0KKwlpZiAoY2FyZC0+ZGVidWdmc19kaXIpIHsKKwkJZGVidWdmc19yZW1vdmUoY2FyZC0+ZGVidWdmc19kaXIpOworCQljYXJkLT5kZWJ1Z2ZzX2RpciA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICplbnQ7CisKKwllbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInNsaWMiLCBOVUxMKTsKKwlpZiAoIWVudCB8fCBJU19FUlIoZW50KSkgeworCQlwcl9pbmZvKFBGWCAiZGVidWdmcyBjcmVhdGUgZGlyZWN0b3J5IGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzbGljX2RlYnVnZnMgPSBlbnQ7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfZGVidWdfY2xlYW51cCh2b2lkKQoreworCWlmIChzbGljX2RlYnVnZnMpIHsKKwkJZGVidWdmc19yZW1vdmUoc2xpY19kZWJ1Z2ZzKTsKKwkJc2xpY19kZWJ1Z2ZzID0gTlVMTDsKKwl9Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgPT09ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0KKyAgPT09ICAgICAgIFNMSUMgIERVTVAgIE1BTkFHRU1FTlQgICAgICAgIFNFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0KKyAgPT09ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0KKyAgPT09ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0KKyAgPT09IER1bXAgcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0KKyAgPT09ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0KKyAgPT09ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK3ZvaWQgKnNsaWNfZHVtcF9oYW5kbGU7CQkvKiB0aHJlYWQgaGFuZGxlICovCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIG9ubHkgdGhpbmdzIHlvdSBzaG91bGQgZG8gb24gYSBjb3JlLWZpbGU6IHVzZSBvbmx5IHRoZXNlCisgKiBmdW5jdGlvbnMgdG8gd3JpdGUgb3V0IGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8uCisgKi8KK3N0YXRpYyBpbnQgc2xpY19kdW1wX3NlZWsoc3RydWN0IGZpbGUgKlNMSUNoYW5kbGUsIHUzMiBmaWxlX29mZnNldCkKK3sKKwlpZiAoU0xJQ2hhbmRsZS0+Zl9wb3MgIT0gZmlsZV9vZmZzZXQpIHsKKwkJLypEQkdfTVNHKCJzbGljX2R1bXBfc2VlayAgbm93IG5lZWRlZCBbJXggOiAleF1cbiIsCisJCQkodTMyKVNMSUNoYW5kbGUtPmZfcG9zLCAodTMyKWZpbGVfb2Zmc2V0KTsgKi8KKwkJaWYgKFNMSUNoYW5kbGUtPmZfb3AtPmxsc2VlaykgeworCQkJaWYgKFNMSUNoYW5kbGUtPmZfb3AtPgorCQkJICAgIGxsc2VlayhTTElDaGFuZGxlLCBmaWxlX29mZnNldCwgMCkgIT0gZmlsZV9vZmZzZXQpCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlTTElDaGFuZGxlLT5mX3BvcyA9IGZpbGVfb2Zmc2V0OworCQl9CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNsaWNfZHVtcF93cml0ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsCisJCQkgICBjb25zdCB2b2lkICphZGRyLCBpbnQgc2l6ZSwgdTMyIGZpbGVfb2Zmc2V0KQoreworCWludCByID0gMTsKKwl1MzIgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgZmlsZSAqU0xJQ2hhbmRsZSA9IGNhcmQtPmR1bXBoYW5kbGU7CisKKyNpZmRlZiBISVNUT1JJQ0FMCQkvKiBsZWdhY3kgKi8KKwlkb3duKCZTTElDaGFuZGxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworI2VuZGlmCisJaWYgKHNpemUpIHsKKwkJc2xpY19kdW1wX3NlZWsoU0xJQ2hhbmRsZSwgZmlsZV9vZmZzZXQpOworCisJCXJlc3VsdCA9CisJCSAgICBTTElDaGFuZGxlLT5mX29wLT53cml0ZShTTElDaGFuZGxlLCBhZGRyLCBzaXplLAorCQkJCQkgICAgJlNMSUNoYW5kbGUtPmZfcG9zKTsKKworCQlyID0gcmVzdWx0ID09IHNpemU7CisJfQorCisJY2FyZC0+ZHVtcHRpbWVfY29tcGxldGUgPSBqaWZmaWVzOworCWNhcmQtPmR1bXB0aW1lX2RlbHRhID0gY2FyZC0+ZHVtcHRpbWVfY29tcGxldGUgLSBjYXJkLT5kdW1wdGltZV9zdGFydDsKKwljYXJkLT5kdW1wdGltZV9zdGFydCA9IGppZmZpZXM7CisKKyNpZmRlZiBISVNUT1JJQ0FMCisJdXAoJlNMSUNoYW5kbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisjZW5kaWYKKwlpZiAoIXIpIHsKKwkJREJHX0VSUk9SKCIlczogYWRkclslcF0gc2l6ZVsleF0gcmVzdWx0WyV4XSBmaWxlX29mZnNldFsleF1cbiIsCisJCQkgIF9fZnVuY19fLCBhZGRyLCBzaXplLCByZXN1bHQsIGZpbGVfb2Zmc2V0KTsKKwl9CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB1aW50IHNsaWNfaW5pdF9kdW1wX3RocmVhZChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpCit7CisJY2FyZC0+ZHVtcF90YXNrX2lkID0ga3RocmVhZF9ydW4oc2xpY19kdW1wX3RocmVhZCwgKHZvaWQgKiljYXJkLCAwKTsKKworLyogIERCR19NU0coImNyZWF0ZSBzbGljX2R1bXBfdGhyZWFkIGR1bXBfcGlkWyV4XVxuIiwgY2FyZC0+ZHVtcF9waWQpOyAqLworCWlmIChJU19FUlIoY2FyZC0+ZHVtcF90YXNrX2lkKSkgeworCQlEQkdfTVNHKCJjcmVhdGUgc2xpY19kdW1wX3RocmVhZCBGQUlMRUQgXG4iKTsKKwkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOworCX0KKworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludCBzbGljX2R1bXBfdGhyZWFkKHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gKHN0cnVjdCBzbGljY2FyZCAqKWNvbnRleHQ7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IGFkYXB0ZXIgKmR1bXBfYWRhcHRlciA9IE5VTEw7CisJdTMyIGR1bXBfY29tcGxldGUgPSAwOworCXUzMiBkZWxheSA9IFNMSUNfU0VDU19UT19KSUZGUyhQSU5HX1RJTUVSX0lOVEVSVkFMKTsKKwlzdHJ1Y3Qgc2xpY19yZWdzICpwcmVnczsKKwl1MzIgaTsKKwlzdHJ1Y3Qgc2xpY191cHIgKnVwciwgKnVwcm5leHQ7CisJdTMyIGR1bXBfY2FyZDsKKworCUFTU0VSVChjYXJkKTsKKworCWNhcmQtPmR1bXB0aHJlYWRfcnVubmluZyA9IDE7CisKKyNpZmRlZiBISVNUT1JJQ0FMCisJbG9ja19rZXJuZWwoKTsKKwkvKgorCSAqIFRoaXMgdGhyZWFkIGRvZXNuJ3QgbmVlZCBhbnkgdXNlci1sZXZlbCBhY2Nlc3MsCisJICogc28gZ2V0IHJpZCBvZiBhbGwgb3VyIHJlc291cmNlcworCSAqLworCWV4aXRfZmlsZXMoY3VycmVudCk7CS8qIGRhZW1vbml6ZSBkb2Vzbid0IGRvIGV4aXRfZmlsZXMgKi8KKwljdXJyZW50LT5maWxlcyA9IGluaXRfdGFzay5maWxlczsKKwlhdG9taWNfaW5jKCZjdXJyZW50LT5maWxlcy0+Y291bnQpOworI2VuZGlmCisKKwlkYWVtb25pemUoIiVzIiwgInNsaWNtb24iKTsKKworCS8qIFNldHVwIGEgbmljZSBuYW1lICovCisJc3RyY3B5KGN1cnJlbnQtPmNvbW0sICJzbGljbW9uIik7CisJREJHX0VSUk9SCisJICAgICgic2xpY19kdW1wX3RocmVhZFtzbGljbW9uXSBkYWVtb24gaXMgYWxpdmUgY2FyZFslcF0gcGlkWyV4XVxuIiwKKwkgICAgIGNhcmQsIGNhcmQtPmR1bXBfdGFza19pZC0+cGlkKTsKKworCS8qCisJICogICAgU2VuZCBtZSBhIHNpZ25hbCB0byBnZXQgbWUgdG8gZGllIChmb3IgZGVidWdnaW5nKQorCSAqLworCWRvIHsKKwkJLyoKKwkJICogSWYgY2FyZCBzdGF0ZSBpcyBub3Qgc2V0IHRvIHVwLCBza2lwCisJCSAqLworCQlpZiAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9VUCkgeworCQkJaWYgKGNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCkKKwkJCQlnb3RvIHdhaXQ7CisJCQllbHNlCisJCQkJZ290byBlbmRfdGhyZWFkOworCQl9CisJCS8qCisJCSAqICAgIENoZWNrIHRoZSByZXN1bHRzIG9mIG91ciBsYXN0IHBpbmcuCisJCSAqLworCQlkdW1wX2NhcmQgPSAwOworI2lmZGVmIFNMSUNfRkFJTFVSRV9EVU1QCisJCWlmIChjYXJkLT5waW5nc3RhdHVzICE9IElTUl9QSU5HTUFTSykgeworCQkJREJHX01TRworCQkJICAgICgiXG5bc2xpY21vbl0gIENBUkQgIyVkIFRJTUVEIE9VVCAtIHN0YXR1cyAiCisJCQkgICAgICIleDogRFVNUCBUSEUgQ0FSRCFcbiIsCisJCQkgICAgIGNhcmQtPmNhcmRudW0sIGNhcmQtPnBpbmdzdGF0dXMpOworCQkJZHVtcF9jYXJkID0gMTsKKwkJfQorI2Vsc2UKKwkJLyoKKwkJICogIENhdXNlIGEgY2FyZCBSRVNFVCBpbnN0ZWFkPworCQkgKi8KKwkJaWYgKGNhcmQtPnBpbmdzdGF0dXMgIT0gSVNSX1BJTkdNQVNLKSB7CisJCQkvKiB0b2RvLiBkbyB3ZSB3YW50IHRvIHJlc2V0IHRoZSBjYXJkIGluIHByb2R1Y3Rpb24gKi8KKwkJCS8qIERCR19NU0coIlxuW3NsaWNtb25dICBDQVJEICMlZCBUSU1FRCBPVVQgLSAiCisJCQkgICBzdGF0dXMgJXg6IFJFU0VUIFRIRSBDQVJEIVxuIiwgY2FyZC0+Y2FyZG51bSwKKwkJCSAgIGNhcmQtPnBpbmdzdGF0dXMpOyAqLworCQkJREJHX0VSUk9SCisJCQkgICAgKCJcbltzbGljbW9uXSAgQ0FSRCAjJWQgVElNRUQgT1VUIC0gc3RhdHVzICV4OiAiCisJCQkgICAgICJEVU1QIFRIRSBDQVJEIVxuIiwKKwkJCSAgICAgY2FyZC0+Y2FyZG51bSwgY2FyZC0+cGluZ3N0YXR1cyk7CisJCQlkdW1wX2NhcmQgPSAxOworCQl9CisjZW5kaWYKKwkJaWYgKChkdW1wX2NhcmQpCisJCSAgICB8fCAoY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPT0gU0xJQ19EVU1QX1JFUVVFU1RFRCkpIHsKKwkJCWlmIChjYXJkLT5kdW1wX3JlcXVlc3RlZCA9PSBTTElDX0RVTVBfUkVRVUVTVEVEKSB7CisJCQkJREJHX0VSUk9SCisJCQkgICAgKCJbc2xpY21vbl06IER1bXAgY2FyZCBSZXF1ZXN0ZWQ6IENhcmQgJXhcbiIsCisJCQkJICAgICBjYXJkLT5jYXJkbnVtKTsKKwkJCX0KKwkJCWlmIChjYXJkLT5waW5nc3RhdHVzICE9IElTUl9QSU5HTUFTSykgeworCQkJCXVzaG9ydCBjcHVpZCA9IDA7CisJCQkJdXNob3J0IGNyYXNocGMgPSAwOworCisJCQkJaWYgKGNhcmQtPmFkYXB0ZXJbMF0pIHsKKwkJCQkJaWYgKChjYXJkLT5hZGFwdGVyWzBdKS0+bWVtb3J5bGVuZ3RoID49CisJCQkJCSAgICBDUkFTSF9JTkZPX09GRlNFVCArCisJCQkJCSAgICBzaXplb2Yoc2xpY19jcmFzaF9pbmZvKSkgeworCQkJCQkJY2hhciAqY3Jhc2hwdHI7CisJCQkJCQlwX3NsaWNfY3Jhc2hfaW5mbyBjcmFzaGluZm87CisKKwkJCQkJCWNyYXNocHRyID0KKwkJCQkJCSAgICAoKGNoYXIgKiljYXJkLT5hZGFwdGVyWzBdLT4KKwkJCQkJCSAgICAgc2xpY19yZWdzKSArCisJCQkJCQkgICAgQ1JBU0hfSU5GT19PRkZTRVQ7CisJCQkJCQljcmFzaGluZm8gPQorCQkJCQkJICAgIChwX3NsaWNfY3Jhc2hfaW5mbykKKwkJCQkJCSAgICBjcmFzaHB0cjsKKwkJCQkJCWNwdWlkID0gY3Jhc2hpbmZvLT5jcHVfaWQ7CisJCQkJCQljcmFzaHBjID0gY3Jhc2hpbmZvLT5jcmFzaF9wYzsKKwkJCQkJfQorCQkJCX0KKwkJCQlEQkdfRVJST1IKKwkJCQkgICAgKCJbc2xpY21vbl06IER1bXAgY2FyZDogQ2FyZCAleCBjcmFzaGVkICIKKwkJCQkgICAgICJhbmQgZmFpbGVkIHRvIGFuc3dlciBQSU5HLiAiCisJCQkJICAgICAiQ1BVSURbJXhdIFBDWyV4XVxuICIsCisJCQkJICAgICBjYXJkLT5jYXJkbnVtLCBjcHVpZCwgY3Jhc2hwYyk7CisJCQl9CisKKwkJCWNhcmQtPmR1bXBfcmVxdWVzdGVkID0gU0xJQ19EVU1QX0lOX1BST0dSRVNTOworCisJCQkvKgorCQkJICogU2V0IHRoZSBjYXJkIHN0YXRlIHRvIERPV04gYW5kIHRoZSBhZGFwdGVyIHN0YXRlcworCQkJICogdG8gUkVTRVQuVGhleSB3aWxsIGNoZWNrIHRoaXMgaW4gU2ltYmFDaGVja0ZvckhhbmcKKwkJCSAqIGFuZCBpbml0aWF0ZSBpbnRlcmZhY2UgcmVzZXQgKHdoaWNoIGluIHR1cm4gd2lsbAorCQkJICogcmVpbml0aWFsaXplIHRoZSBjYXJkKS4KKwkJCSAqLworCQkJY2FyZC0+c3RhdGUgPSBDQVJEX0RPV047CisKKwkJCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5jYXJkX3NpemU7IGkrKykgeworCQkJCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyW2ldOworCQkJCWlmIChhZGFwdGVyKSB7CisJCQkJCXNsaWNfaWZfc3RvcF9xdWV1ZShhZGFwdGVyKTsKKworCQkJCQlpZiAoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfVVApIHsKKwkJCQkJCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfUkVTRVQ7CisJCQkJCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CisJCQkJCQlEQkdfRVJST1IKKwkJCQkJCSAgICAoIltzbGljbW9uXTogU0xJQyBDYXJkWyVkXSAiCisJCQkJCQkgICAgICJQb3J0WyVkXSBhZGFwdGVyWyVwXSAiCisJCQkJCQkgICAgICJkb3duXG4iLAorCQkJCQkJICAgICAodWludCkgY2FyZC0+Y2FyZG51bSwKKwkJCQkJCSAgICAgKHVpbnQpIGksIGFkYXB0ZXIpOworCQkJCQl9CisjaWYgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAorCQkJCQkvKiBmcmVlIHN0YXRzIHRpbWVyICovCisJCQkJCWlmIChhZGFwdGVyLT5zdGF0c3RpbWVyc2V0KSB7CisJCQkJCQlhZGFwdGVyLT5zdGF0c3RpbWVyc2V0ID0gMDsKKwkJCQkJCWRlbF90aW1lcigmYWRhcHRlci0+c3RhdHN0aW1lcik7CisJCQkJCX0KKyNlbmRpZgorCQkJCX0KKwkJCX0KKworCQkJZm9yIChpID0gMDsgaSA8IGNhcmQtPmNhcmRfc2l6ZTsgaSsrKSB7CisJCQkJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXJbaV07CisJCQkJaWYgKChhZGFwdGVyKSAmJiAoYWRhcHRlci0+YWN0aXZhdGVkKSkgeworCQkJCQlwcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKwkJCQkJZHVtcF9hZGFwdGVyID0gYWRhcHRlcjsKKworCQkJCQkvKgorCQkJCQkgKiBJZiB0aGUgZHVtcCBzdGF0dXMgaXMgemVybywgdGhlbgorCQkJCQkgKiB0aGUgdXRpbGl0eSBwcm9jZXNzb3IgaGFzIGNyYXNoZWQuCisJCQkJCSAqIElmIHRoaXMgaXMgdGhlIGNhc2UsIGFueSBwZW5kaW5nCisJCQkJCSAqIHV0aWxpdHlwcm9jZXNzb3IgcmVxdWVzdHMgd2lsbCBub3QKKwkJCQkJICogY29tcGxldGUgYW5kIG91ciBkdW1wIGNvbW1hbmRzIHdpbGwKKwkJCQkJICogbm90IGJlIGlzc3VlZC4KKwkJCQkJICoKKwkJCQkJICogVG8gYXZvaWQgdGhpcyB3ZSB3aWxsIGNsZWFyIGFueQorCQkJCQkgKiBwZW5kaW5nIHV0aWxpdHkgcHJvY2Vzc29yIHJlcXVlc3RzCisJCQkJCSAqIG5vdy4KKwkJCQkJICovCisJCQkJCWlmICghY2FyZC0+cGluZ3N0YXR1cykgeworCQkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoCisJCQkJCQkgICAgJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssCisJCQkJCQkgICAgYWRhcHRlci0+dXByX2xvY2suZmxhZ3MpOworCQkJCQkJdXByID0gYWRhcHRlci0+dXByX2xpc3Q7CisJCQkJCQl3aGlsZSAodXByKSB7CisJCQkJCQkJdXBybmV4dCA9IHVwci0+bmV4dDsKKwkJCQkJCQlrZnJlZSh1cHIpOworCQkJCQkJCXVwciA9IHVwcm5leHQ7CisJCQkJCQl9CisJCQkJCQlhZGFwdGVyLT51cHJfbGlzdCA9IDA7CisJCQkJCQlhZGFwdGVyLT51cHJfYnVzeSA9IDA7CisJCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAorCQkJCQkJICAgICZhZGFwdGVyLT51cHJfbG9jay5sb2NrLAorCQkJCQkJICAgIGFkYXB0ZXItPnVwcl9sb2NrLmZsYWdzKTsKKwkJCQkJfQorCisJCQkJCXNsaWNfZHVtcF9jYXJkKGNhcmQsIEZBTFNFKTsKKwkJCQkJZHVtcF9jb21wbGV0ZSA9IDE7CisJCQkJfQorCisJCQkJaWYgKGR1bXBfY29tcGxldGUpIHsKKwkJCQkJREJHX0VSUk9SKCJTTElDIER1bXAgQ29tcGxldGVcbiIpOworCQkJCQkvKiAgT25seSBkdW1wIHRoZSBjYXJkIG9uZSB0aW1lICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGR1bXBfYWRhcHRlcikgeworCQkJCURCR19FUlJPUgorCQkJCSAgICAoInNsaWMgZHVtcCBjb21wbGV0ZWQuICIKKwkJCQkgICAgICJSZWVuYWJsZSBpbnRlcmZhY2VzXG4iKTsKKwkJCQlzbGljX2NhcmRfaW5pdChjYXJkLCBkdW1wX2FkYXB0ZXIpOworCisJCQkJLyoKKwkJCQkgKiAgUmVlbmFibGUgdGhlIGFkYXB0ZXJzIHRoYXQgd2VyZSByZXNldAorCQkJCSAqLworCQkJCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5jYXJkX3NpemU7IGkrKykgeworCQkJCQlhZGFwdGVyID0gY2FyZC0+YWRhcHRlcltpXTsKKwkJCQkJaWYgKGFkYXB0ZXIpIHsKKwkJCQkJCWlmIChhZGFwdGVyLT5zdGF0ZSA9PQorCQkJCQkJICAgIEFEQVBUX1JFU0VUKSB7CisJCQkJCQkJREJHX0VSUk9SCisJCQkJCQkJICAgICgic2xpY2R1bXA6IFNMSUMgIgorCQkJCQkgICAiQ2FyZFslZF0gUG9ydFslZF0gYWRhcHRlclslcF0gIgorCQkJCQkgICAiYnJpbmcgVVBcbiIsCisJCQkJCQkJICAgICAodWludCkgY2FyZC0+CisJCQkJCQkJICAgICBjYXJkbnVtLCAodWludCkgaSwKKwkJCQkJCQkgICAgIGFkYXB0ZXIpOworCQkJCQkJCWFkYXB0ZXItPnN0YXRlID0KKwkJCQkJCQkgICAgQURBUFRfRE9XTjsKKwkJCQkJCQlhZGFwdGVyLT5saW5rc3RhdGUgPQorCQkJCQkJCSAgICBMSU5LX0RPV047CisJCQkJCQkJc2xpY19lbnRyeV9vcGVuCisJCQkJCQkJICAgIChhZGFwdGVyLT5uZXRkZXYpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPSBTTElDX0RVTVBfRE9ORTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJLyogaWYgcGluZ3N0YXR1cyAhPSBJU1JfUElOR01BU0spIHx8IGR1bXBfcmVxdWVzdGVkLi4uRUxTRQorCQkgKiAgICBXZSByZWNlaXZlZCBhIHZhbGlkIHBpbmcgcmVzcG9uc2UuCisJCSAqICAgIENsZWFyIHRoZSBQaW5nc3RhdHVzIGZpZWxkLCBmaW5kIGEgdmFsaWQgYWRhcHRlcgorCQkgKiAgICBzdHJ1Y3R1cmUgYW5kIHNlbmQgYW5vdGhlciBwaW5nLgorCQkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5jYXJkX3NpemU7IGkrKykgeworCQkJCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyW2ldOworCQkJCWlmIChhZGFwdGVyICYmIChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9VUCkpIHsKKwkJCQkJY2FyZC0+cGluZ3N0YXR1cyA9IDA7CisJCQkJCXNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwgU0xJQ19VUFJfUElORywKKwkJCQkJCQkgMCwgMCwgMCwgMCk7CisJCQkJCWJyZWFrOwkvKiBPbmx5IGlzc3VlIG9uZSBwZXIgY2FyZCAqLworCQkJCX0KKwkJCX0KKwkJfQord2FpdDoKKwkJU0xJQ19JTlRFUlJVUFRJQkxFX1NMRUVQX09OX1RJTUVPVVQoY2FyZC0+ZHVtcF93cSwgZGVsYXkpOworCX0gd2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSk7CisKK2VuZF90aHJlYWQ6CisvKiAgREJHX01TRygiW3NsaWNtb25dIHNsaWNfZHVtcF90aHJlYWQgY2FyZFslcF0gcGlkWyV4XSBFTkRJTkdcbiIsCisgICAgY2FyZCwgY2FyZC0+ZHVtcF9waWQpOyAqLworCWNhcmQtPmR1bXB0aHJlYWRfcnVubmluZyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgYSBzaW5nbGUgYnl0ZSBmcm9tIG91ciBkdW1wIGluZGV4IGZpbGUuICBUaGlzCisgKiB2YWx1ZSBpcyB1c2VkIGFzIG91ciBzdWZmaXggZm9yIG91ciBkdW1wIHBhdGguICBUaGUKKyAqIHZhbHVlIGlzIGluY3JlbWVudGVkIGFuZCB3cml0dGVuIGJhY2sgdG8gdGhlIGZpbGUKKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2xpY19nZXRfZHVtcF9pbmRleChjaGFyICpwYXRoKQoreworCXVuc2lnbmVkIGNoYXIgaW5kZXggPSAwOworI2lmZGVmIFNMSUNfRFVNUF9JTkRFWF9TVVBQT1JUCisJdTMyIHN0YXR1czsKKwl2b2lkICpGaWxlSGFuZGxlOworCXUzMiBvZmZzZXQ7CisKKwlvZmZzZXQgPSAwOworCisJLyoKKwkgKiBPcGVuIHRoZSBpbmRleCBmaWxlLiAgSWYgb25lIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdAorCSAqLworCXN0YXR1cyA9IGNyZWF0ZV9maWxlKCZGaWxlSGFuZGxlKTsKKworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiAodW5zaWduZWQgY2hhcikgMDsKKworCXN0YXR1cyA9IHJlYWRfZmlsZShGaWxlSGFuZGxlLCAmaW5kZXgsIDEsICZvZmZzZXQpOworCisJaW5kZXgrKzsKKworCXN0YXR1cyA9IHdyaXRlX2ZpbGUoRmlsZUhhbmRsZSwgJmluZGV4LCAxLCAmb2Zmc2V0KTsKKworCWNsb3NlX2ZpbGUoRmlsZUhhbmRsZSk7CisjZWxzZQorCWluZGV4ID0gMDsKKyNlbmRpZgorCXJldHVybiBpbmRleDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlICpzbGljX2R1bXBfb3Blbl9maWxlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgZmlsZSAqU0xJQ2hhbmRsZSA9IE5VTEw7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKKwljaGFyIFNMSUNmaWxlWzUwXTsKKworCWNhcmQtPmR1bXBmaWxlX2ZzID0gZ2V0X2ZzKCk7CisKKwlzZXRfZnMoS0VSTkVMX0RTKTsKKworCW1lbXNldChTTElDZmlsZSwgMCwgc2l6ZW9mKFNMSUNmaWxlKSk7CisJc3ByaW50ZihTTElDZmlsZSwgIi92YXIvdG1wL3NsaWMlZC1kdW1wLSVkIiwgY2FyZC0+Y2FyZG51bSwKKwkJKHVpbnQpIGNhcmQtPmR1bXBfY291bnQpOworCWNhcmQtPmR1bXBfY291bnQrKzsKKworCVNMSUNoYW5kbGUgPQorCSAgICBmaWxwX29wZW4oU0xJQ2ZpbGUsIE9fQ1JFQVQgfCBPX1JEV1IgfCBPX1NZTkMgfCBPX0xBUkdFRklMRSwgMDY2Nik7CisKKwlEQkdfTVNHKCJbc2xpY21vbl06IER1bXAgQ2FyZCAjJWQgdG8gZmlsZTogJXMgXG4iLCBjYXJkLT5jYXJkbnVtLAorCQlTTElDZmlsZSk7CisKKy8qICBEQkdfTVNHKCJbc2xpY21vbl0gZmlscF9vcGVuICVzIFNMSUNoYW5kbGVbJXBdXG4iLCBTTElDZmlsZSwgU0xJQ2hhbmRsZSk7Ki8KKworCWlmIChJU19FUlIoU0xJQ2hhbmRsZSkpCisJCWdvdG8gZW5kX3NsaWNkdW1wOworCisJZGVudHJ5ID0gU0xJQ2hhbmRsZS0+Zl9kZW50cnk7CisJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisKKy8qICBEQkdfTVNHKCJbc2xpY21vbl0gaW5vZGVbJXBdIGlfbmxpbmtbJXhdIGlfbW9kZVsleF0gaV9vcFslcF0gaV9mb3BbJXBdXG4iCisJCSJmX29wLT53cml0ZVslcF1cbiIsCisJCWlub2RlLCBpbm9kZS0+aV9ubGluaywgaW5vZGUtPmlfbW9kZSwgaW5vZGUtPmlfb3AsCisJCWlub2RlLT5pX2ZvcCwgU0xJQ2hhbmRsZS0+Zl9vcC0+d3JpdGUpOyAqLworCWlmIChpbm9kZS0+aV9ubGluayA+IDEpCisJCWdvdG8gY2xvc2Vfc2xpY2R1bXA7CS8qIG11bHRpcGxlIGxpbmtzIC0gZG9uJ3QgZHVtcCAqLworI2lmZGVmIEhJU1RPUklDQUwKKwlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCWdvdG8gY2xvc2Vfc2xpY2R1bXA7CisjZW5kaWYKKwlpZiAoIWlub2RlLT5pX29wIHx8ICFpbm9kZS0+aV9mb3ApCisJCWdvdG8gY2xvc2Vfc2xpY2R1bXA7CisKKwlpZiAoIVNMSUNoYW5kbGUtPmZfb3AtPndyaXRlKQorCQlnb3RvIGNsb3NlX3NsaWNkdW1wOworCisJLyoKKwkgKiAgSWYgd2UgZ290IGhlcmUgd2UgaGF2ZSBTVUNDRVNTRlVMTFkgT1BFTkVEIHRoZSBkdW1wIGZpbGUKKwkgKi8KKy8qICBEQkdfTVNHKCJvcGVuZWQgJXMgU0xJQ2hhbmRsZVslcF1cbiIsIFNMSUNmaWxlLCBTTElDaGFuZGxlKTsgKi8KKwlyZXR1cm4gU0xJQ2hhbmRsZTsKKworY2xvc2Vfc2xpY2R1bXA6CisJREJHX01TRygiW3NsaWNtb25dIHNsaWNfZHVtcF9vcGVuX2ZpbGUgZmFpbGVkIGNsb3NlIFNMSUNoYW5kbGVbJXBdXG4iLAorCQlTTElDaGFuZGxlKTsKKwlmaWxwX2Nsb3NlKFNMSUNoYW5kbGUsIE5VTEwpOworCitlbmRfc2xpY2R1bXA6CisJc2V0X2ZzKGNhcmQtPmR1bXBmaWxlX2ZzKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBzbGljX2R1bXBfY2xvc2VfZmlsZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpCit7CisKKy8qICBEQkdfTVNHKCJbc2xpY21vbl0gc2xpY19kdW1wX0NMT1NFX2ZpbGUgY2xvc2UgU0xJQ2hhbmRsZVslcF1cbiIsCisgICBjYXJkLT5kdW1waGFuZGxlKTsgKi8KKworCWZpbHBfY2xvc2UoY2FyZC0+ZHVtcGhhbmRsZSwgTlVMTCk7CisKKwlzZXRfZnMoY2FyZC0+ZHVtcGZpbGVfZnMpOworfQorCitzdGF0aWMgdTMyIHNsaWNfZHVtcF9jYXJkKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgYm9vbCByZXN1bWUpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjYXJkLT5tYXN0ZXI7CisJdTMyIHN0YXR1czsKKwl1MzIgcXVldWU7CisJdTMyIGxlbiwgb2Zmc2V0OworCXUzMiBzcmFtX3NpemUsIGRyYW1fc2l6ZSwgcmVnczsKKwlzdHJ1Y3Qgc2xpY2NvcmVfaGRyIGNvcmVoZHI7CisJdTMyIGZpbGVfb2Zmc2V0OworCWNoYXIgKm5hbWVzdHI7CisJdTMyIGk7CisJdTMyIG1heF9xdWV1ZXMgPSAwOworCXUzMiByZXN1bHQ7CisKKwljYXJkLT5kdW1waGFuZGxlID0gc2xpY19kdW1wX29wZW5fZmlsZShjYXJkKTsKKworCWlmIChjYXJkLT5kdW1waGFuZGxlID09IE5VTEwpIHsKKwkJREJHX01TRygiW3NsaWNtb25dIENhbnQgY3JlYXRlIER1bXAgZmlsZSAtIGR1bXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmICghY2FyZC0+ZHVtcGJ1ZmZlcikgeworCQlEQkdfTVNHKCJbc2xpY21vbl0gSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgZHVtcFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpZiAoIWNhcmQtPmNtZGJ1ZmZlcikgeworCQlEQkdfTVNHKCJbc2xpY21vbl0gSW5zdWZmaWNpZW50IGNtZCBtZW1vcnkgZm9yIGR1bXBcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKgorCSAqIFdyaXRlIHRoZSBmaWxlIHZlcnNpb24gdG8gdGhlIGNvcmUgaGVhZGVyLgorCSAqLworCW5hbWVzdHIgPSBzbGljX3Byb2NfdmVyc2lvbjsKKwlmb3IgKGkgPSAwOyBpIDwgKERSSVZFUl9OQU1FX1NJWkUgLSAxKTsgaSsrLCBuYW1lc3RyKyspIHsKKwkJaWYgKCFuYW1lc3RyKQorCQkJYnJlYWs7CisJCWNvcmVoZHIuZHJpdmVyX3ZlcnNpb25baV0gPSAqbmFtZXN0cjsKKwl9CisJY29yZWhkci5kcml2ZXJfdmVyc2lvbltpXSA9IDA7CisKKwlmaWxlX29mZnNldCA9IHNpemVvZihzdHJ1Y3Qgc2xpY2NvcmVfaGRyKTsKKworCS8qCisJICogSXNzdWUgdGhlIGZvbGxvd2luZyBkZWJ1ZyBjb21tYW5kcyB0byB0aGUgU0xJQzoKKwkgKiAgICAgICAgLSBIYWx0IGJvdGggcmVjZWl2ZSBhbmQgdHJhbnNtaXQKKwkgKiAgICAgICAgLSBEdW1wIHJlY2VpdmUgcmVnaXN0ZXJzCisJICogICAgICAgIC0gRHVtcCB0cmFuc21pdCByZWdpc3RlcnMKKwkgKiAgICAgICAgLSBEdW1wIHNyYW0KKwkgKiAgICAgICAgLSBEdW1wIGRyYW0KKwkgKiAgICAgICAgLSBEdW1wIHF1ZXVlcworCSAqLworCURCR19NU0coInNsaWNEdW1wIEhBTFQgUmVjZWl2ZSBQcm9jZXNzb3JcbiIpOworCWNhcmQtPmR1bXB0aW1lX3N0YXJ0ID0gamlmZmllczsKKworCXN0YXR1cyA9IHNsaWNfZHVtcF9oYWx0KGNhcmQsIFBST0NfUkVDRUlWRSk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlEQkdfRVJST1IKKwkJICAgICgiQ2FudCBoYWx0IHJlY2VpdmUgc2VxdWVuY2VyIC0gZHVtcCBmYWlsZWQgc3RhdHVzWyV4XVxuIiwKKwkJICAgICBzdGF0dXMpOworCQlnb3RvIGRvbmU7CisJfQorCisJREJHX01TRygic2xpY0R1bXAgSEFMVCBUcmFuc21pdCBQcm9jZXNzb3JcbiIpOworCXN0YXR1cyA9IHNsaWNfZHVtcF9oYWx0KGNhcmQsIFBST0NfVFJBTlNNSVQpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJREJHX0VSUk9SKCJDYW50IGhhbHQgdHJhbnNtaXQgc2VxdWVuY2VyIC0gZHVtcCBmYWlsZWRcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogRHVtcCByZWNlaXZlIHJlZ3MgKi8KKwlzdGF0dXMgPSBzbGljX2R1bXBfcmVnKGNhcmQsIFBST0NfUkVDRUlWRSk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlEQkdfRVJST1IoIkNhbnQgZHVtcCByZWNlaXZlIHJlZ2lzdGVycyAtIGR1bXAgZmFpbGVkXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCURCR19NU0coInNsaWNEdW1wIFdyaXRlIFJlY2VpdmUgUkVHUyBsZW5bJXhdIG9mZnNldFsleF1cbiIsCisJCShTTElDX05VTV9SRUcgKiA0KSwgZmlsZV9vZmZzZXQpOworCisJcmVzdWx0ID0KKwkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIFNMSUNfTlVNX1JFRyAqIDQsCisJCQkgICAgZmlsZV9vZmZzZXQpOworCWlmICghcmVzdWx0KSB7CisJCURCR19FUlJPUgorCQkgICAgKCJDYW50IHdyaXRlIHJjdiByZWdpc3RlcnMgdG8gZHVtcCBmaWxlIC0gZHVtcCBmYWlsZWRcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJY29yZWhkci5SY3ZSZWdPZmYgPSBmaWxlX29mZnNldDsKKwljb3JlaGRyLlJjdlJlZ3NpemUgPSBTTElDX05VTV9SRUcgKiA0OworCWZpbGVfb2Zmc2V0ICs9IFNMSUNfTlVNX1JFRyAqIDQ7CisKKwkvKiBEdW1wIHRyYW5zbWl0IHJlZ3MgKi8KKwlzdGF0dXMgPSBzbGljX2R1bXBfcmVnKGNhcmQsIFBST0NfVFJBTlNNSVQpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJREJHX0VSUk9SKCJDYW50IGR1bXAgdHJhbnNtaXQgcmVnaXN0ZXJzIC0gZHVtcCBmYWlsZWRcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJREJHX01TRygic2xpY0R1bXAgV3JpdGUgWE1JVCBSRUdTIGxlblsleF0gb2Zmc2V0WyV4XVxuIiwKKwkJKFNMSUNfTlVNX1JFRyAqIDQpLCBmaWxlX29mZnNldCk7CisKKwlyZXN1bHQgPQorCSAgICBzbGljX2R1bXBfd3JpdGUoY2FyZCwgY2FyZC0+ZHVtcGJ1ZmZlciwgU0xJQ19OVU1fUkVHICogNCwKKwkJCSAgICBmaWxlX29mZnNldCk7CisJaWYgKCFyZXN1bHQpIHsKKwkJREJHX0VSUk9SCisJCSAgICAoIkNhbnQgd3JpdGUgeG10IHJlZ2lzdGVycyB0byBkdW1wIGZpbGUgLSBkdW1wIGZhaWxlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwljb3JlaGRyLlhtdFJlZ09mZiA9IGZpbGVfb2Zmc2V0OworCWNvcmVoZHIuWG10UmVnc2l6ZSA9IFNMSUNfTlVNX1JFRyAqIDQ7CisJZmlsZV9vZmZzZXQgKz0gU0xJQ19OVU1fUkVHICogNDsKKworCXJlZ3MgPSBTTElDX0dCTUFYX1JFRzsKKworCWNvcmVoZHIuRmlsZVJlZ09mZiA9IGZpbGVfb2Zmc2V0OworCWNvcmVoZHIuRmlsZVJlZ3NpemUgPSByZWdzICogNDsKKworCWZvciAob2Zmc2V0ID0gMDsgcmVnczspIHsKKwkJbGVuID0gTUlOKHJlZ3MsIDE2KTsJLyogQ2FuIG9ubHkgeGZyIDE2IHJlZ3MgYXQgYSB0aW1lICovCisKKwkJc3RhdHVzID0gc2xpY19kdW1wX2RhdGEoY2FyZCwgb2Zmc2V0LCAodXNob3J0KSBsZW4sIERFU0NfUkZJTEUpOworCisJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCURCR19FUlJPUigiQ2FudCBkdW1wIHJlZ2lzdGVyIGZpbGUgLSBkdW1wIGZhaWxlZFxuIik7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlEQkdfTVNHKCJzbGljRHVtcCBXcml0ZSBSZWdpc3RlckZpbGUgbGVuWyV4XSBvZmZzZXRbJXhdXG4iLAorCQkJKGxlbiAqIDQpLCBmaWxlX29mZnNldCk7CisKKwkJcmVzdWx0ID0KKwkJICAgIHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBsZW4gKiA0LAorCQkJCSAgICBmaWxlX29mZnNldCk7CisJCWlmICghcmVzdWx0KSB7CisJCQlEQkdfRVJST1IKKwkJCSAgICAoIkNhbnQgd3JpdGUgcmVnaXN0ZXIgZmlsZSB0byBkdW1wIGZpbGUgLSAiCisJCQkgICAgICJkdW1wIGZhaWxlZFxuIik7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlmaWxlX29mZnNldCArPSBsZW4gKiA0OworCQlvZmZzZXQgKz0gbGVuOworCQlyZWdzIC09IGxlbjsKKwl9CisKKwlkcmFtX3NpemUgPSBjYXJkLT5jb25maWcuRHJhbVNpemUgKiAweDEwMDAwOworCisJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgeworCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgorCQlzcmFtX3NpemUgPSBTTElDX1NSQU1fU0laRTJHQjsKKwkJYnJlYWs7CisJY2FzZSBTTElDXzFHQl9ERVZJQ0VfSUQ6CisJCXNyYW1fc2l6ZSA9IFNMSUNfU1JBTV9TSVpFMUdCOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzcmFtX3NpemUgPSAwOworCQlBU1NFUlQoMCk7CisJCWJyZWFrOworCX0KKworCWNvcmVoZHIuU3JhbU9mZiA9IGZpbGVfb2Zmc2V0OworCWNvcmVoZHIuU3JhbXNpemUgPSBzcmFtX3NpemU7CisKKwlmb3IgKG9mZnNldCA9IDA7IHNyYW1fc2l6ZTspIHsKKwkJbGVuID0gTUlOKHNyYW1fc2l6ZSwgRFVNUF9CVUZfU0laRSk7CisJCXN0YXR1cyA9IHNsaWNfZHVtcF9kYXRhKGNhcmQsIG9mZnNldCwgKHVzaG9ydCkgbGVuLCBERVNDX1NSQU0pOworCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCQlEQkdfRVJST1IKKwkJCSAgICAoIltzbGljbW9uXSBDYW50IGR1bXAgU1JBTSBhdCBvZmZzZXQgJXggLSAiCisJCQkgICAgICJkdW1wIGZhaWxlZFxuIiwgKHVpbnQpIG9mZnNldCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlEQkdfTVNHKCJbc2xpY21vbl0gc2xpY0R1bXAgV3JpdGUgU1JBTSAgbGVuWyV4XSBvZmZzZXRbJXhdXG4iLAorCQkJbGVuLCBmaWxlX29mZnNldCk7CisKKwkJcmVzdWx0ID0KKwkJICAgIHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBsZW4sIGZpbGVfb2Zmc2V0KTsKKwkJaWYgKCFyZXN1bHQpIHsKKwkJCURCR19FUlJPUgorCQkJICAgICgiW3NsaWNtb25dIENhbnQgd3JpdGUgU1JBTSB0byBkdW1wIGZpbGUgLSAiCisJCQkgICAgICJkdW1wIGZhaWxlZFxuIik7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlmaWxlX29mZnNldCArPSBsZW47CisJCW9mZnNldCArPSBsZW47CisJCXNyYW1fc2l6ZSAtPSBsZW47CisJfQorCisJY29yZWhkci5EcmFtT2ZmID0gZmlsZV9vZmZzZXQ7CisJY29yZWhkci5EcmFtc2l6ZSA9IGRyYW1fc2l6ZTsKKworCWZvciAob2Zmc2V0ID0gMDsgZHJhbV9zaXplOykgeworCQlsZW4gPSBNSU4oZHJhbV9zaXplLCBEVU1QX0JVRl9TSVpFKTsKKworCQlzdGF0dXMgPSBzbGljX2R1bXBfZGF0YShjYXJkLCBvZmZzZXQsICh1c2hvcnQpIGxlbiwgREVTQ19EUkFNKTsKKwkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQkJREJHX0VSUk9SCisJCQkgICAgKCJbc2xpY21vbl0gQ2FudCBkdW1wIGRyYW0gYXQgb2Zmc2V0ICV4IC0gIgorCQkJICAgICAiZHVtcCBmYWlsZWRcbiIsICh1aW50KSBvZmZzZXQpOworCQkJZ290byBkb25lOworCQl9CisKKwkJREJHX01TRygic2xpY0R1bXAgV3JpdGUgRFJBTSAgbGVuWyV4XSBvZmZzZXRbJXhdXG4iLCBsZW4sCisJCQlmaWxlX29mZnNldCk7CisKKwkJcmVzdWx0ID0KKwkJICAgIHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBsZW4sIGZpbGVfb2Zmc2V0KTsKKwkJaWYgKCFyZXN1bHQpIHsKKwkJCURCR19FUlJPUgorCQkJICAgICgiW3NsaWNtb25dIENhbnQgd3JpdGUgRFJBTSB0byBkdW1wIGZpbGUgLSAiCisJCQkgICAgICJkdW1wIGZhaWxlZFxuIik7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlmaWxlX29mZnNldCArPSBsZW47CisJCW9mZnNldCArPSBsZW47CisJCWRyYW1fc2l6ZSAtPSBsZW47CisJfQorCisJbWF4X3F1ZXVlcyA9IFNMSUNfTUFYX1FVRVVFOworCisJZm9yIChxdWV1ZSA9IDA7IHF1ZXVlIDwgbWF4X3F1ZXVlczsgcXVldWUrKykgeworCQl1MzIgKnFhcnJheSA9ICh1MzIgKikgY2FyZC0+ZHVtcGJ1ZmZlcjsKKwkJdTMyIHFhcnJheV9waHlzbCA9IGNhcmQtPmR1bXBidWZmZXJfcGh5c2w7CisJCXUzMiBxYXJyYXlfcGh5c2ggPSBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoOworCQl1MzIgcXN0YXJ0OworCQl1MzIgcWRlbHRhOworCQl1MzIgcXRvdGFsID0gMDsKKworCQlEQkdfTVNHKCJbc2xpY21vbl0gU3RhcnQgRHVtcCBvZiBRVUVVRSAjMHgleFxuIiwgKHVpbnQpIHF1ZXVlKTsKKworCQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IChEVU1QX0JVRl9TSVpFID4+IDIpOyBvZmZzZXQrKykgeworCQkJcXN0YXJ0ID0gamlmZmllczsKKwkJCXFkZWx0YSA9IDA7CisKKwkJCXN0YXR1cyA9IHNsaWNfZHVtcF9xdWV1ZShjYXJkLAorCQkJCQkJIHFhcnJheV9waHlzbCwKKwkJCQkJCSBxYXJyYXlfcGh5c2gsIHF1ZXVlKTsKKwkJCXFhcnJheV9waHlzbCArPSA0OworCisJCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQorCQkJCWJyZWFrOworCisJCQlpZiAoamlmZmllcyA+IHFzdGFydCkgeworCQkJCXFkZWx0YSA9IGppZmZpZXMgLSBxc3RhcnQ7CisJCQkJcXRvdGFsICs9IHFkZWx0YTsKKwkJCX0KKwkJfQorCisJCWlmIChvZmZzZXQpCisJCQlxZGVsdGEgPSBxdG90YWwgLyBvZmZzZXQ7CisJCWVsc2UKKwkJCXFkZWx0YSA9IDA7CisKKy8qICAgICAgICBEQkdfTVNHKCIgICBzbGljRHVtcCBXcml0ZSBRVUVVRSAjMHgleCBsZW5bJXhdIG9mZnNldFsleF0gIgorCQkiYXZnamlmZnNbJXhdXG4iLCBxdWV1ZSwgKG9mZnNldCo0KSwgZmlsZV9vZmZzZXQsIHFkZWx0YSk7ICovCisKKwkJcmVzdWx0ID0KKwkJICAgIHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBvZmZzZXQgKiA0LAorCQkJCSAgICBmaWxlX29mZnNldCk7CisKKwkJaWYgKCFyZXN1bHQpIHsKKwkJCURCR19FUlJPUgorCQkJICAgICgiW3NsaWNtb25dIENhbnQgd3JpdGUgUVVFVUVTIHRvIGR1bXAgZmlsZSAtICIKKwkJCSAgICAgImR1bXAgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWNvcmVoZHIucXVldWVzW3F1ZXVlXS5xdWV1ZU9mZiA9IGZpbGVfb2Zmc2V0OworCQljb3JlaGRyLnF1ZXVlc1txdWV1ZV0ucXVldWVzaXplID0gb2Zmc2V0ICogNDsKKwkJZmlsZV9vZmZzZXQgKz0gb2Zmc2V0ICogNDsKKworLyogICAgICBEQkdfTVNHKCIgICAgUmVsb2FkIFFVRVVFICMweCV4IGVsZW1lbnRzWyV4XVxuIiwgKHVpbnQpcXVldWUsIG9mZnNldCk7Ki8KKwkJLyoKKwkJICogRmlsbCB0aGUgcXVldWUgYmFjayB1cAorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7CisJCQlxc3RhcnQgPSBqaWZmaWVzOworCQkJcWRlbHRhID0gMDsKKworCQkJc3RhdHVzID0gc2xpY19kdW1wX2xvYWRfcXVldWUoY2FyZCwgcWFycmF5W2ldLCBxdWV1ZSk7CisJCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQorCQkJCWJyZWFrOworCisJCQlpZiAoamlmZmllcyA+IHFzdGFydCkgeworCQkJCXFkZWx0YSA9IGppZmZpZXMgLSBxc3RhcnQ7CisJCQkJcXRvdGFsICs9IHFkZWx0YTsKKwkJCX0KKwkJfQorCisJCWlmIChvZmZzZXQpCisJCQlxZGVsdGEgPSBxdG90YWwgLyBvZmZzZXQ7CisJCWVsc2UKKwkJCXFkZWx0YSA9IDA7CisKKy8qICAgICAgREJHX01TRygiICAgUmVsb2FkIERPTkUgYXZnamlmZnNbJXhdXG4iLCBxZGVsdGEpOyAqLworCisJCXJlc3VtZSA9IDE7CisJfQorCisJbGVuID0gU0xJQ19HQl9DQU1BQl9TWkUgKiA0OworCXN0YXR1cyA9IHNsaWNfZHVtcF9jYW0oY2FyZCwgMCwgbGVuLCBEVU1QX0NBTV9BKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCURCR19FUlJPUigiW3NsaWNtb25dIENhbid0IGR1bXAgQ0FNX0EgLSBkdW1wIGZhaWxlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlyZXN1bHQgPSBzbGljX2R1bXBfd3JpdGUoY2FyZCwgY2FyZC0+ZHVtcGJ1ZmZlciwgbGVuLCBmaWxlX29mZnNldCk7CisJaWYgKHJlc3VsdCkgeworCQlEQkdfRVJST1IKKwkJICAgICgiW3NsaWNtb25dIENhbid0IHdyaXRlIENBTV9BIGRhdGEgdG8gZHVtcCBmaWxlIC0gIgorCQkgICAgICJkdW1wIGZhaWxlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisJY29yZWhkci5DYW1BTU9mZiA9IGZpbGVfb2Zmc2V0OworCWNvcmVoZHIuQ2FtQVNpemUgPSBsZW47CisJZmlsZV9vZmZzZXQgKz0gbGVuOworCisJbGVuID0gU0xJQ19HQl9DQU1DRF9TWkUgKiA0OworCXN0YXR1cyA9IHNsaWNfZHVtcF9jYW0oY2FyZCwgMCwgbGVuLCBEVU1QX0NBTV9DKTsKKwlpZiAoc3RhdHVzKSB7CisJCURCR19FUlJPUigiW3NsaWNtb25dIENhbid0IGR1bXAgQ0FNX0MgLSBkdW1wIGZhaWxlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlyZXN1bHQgPSBzbGljX2R1bXBfd3JpdGUoY2FyZCwgY2FyZC0+ZHVtcGJ1ZmZlciwgbGVuLCBmaWxlX29mZnNldCk7CisJaWYgKHJlc3VsdCkgeworCQlEQkdfRVJST1IKKwkJICAgICgiW3NsaWNtb25dIENhbid0IHdyaXRlIENBTV9DIGRhdGEgdG8gZHVtcCBmaWxlIC0gIgorCQkgICAgICJkdW1wIGZhaWxlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisJY29yZWhkci5DYW1DTU9mZiA9IGZpbGVfb2Zmc2V0OworCWNvcmVoZHIuQ2FtQ1NpemUgPSBsZW47CisJZmlsZV9vZmZzZXQgKz0gbGVuOworCitkb25lOgorCS8qCisJICogV3JpdGUgb3V0IHRoZSBjb3JlIGhlYWRlcgorCSAqLworCWZpbGVfb2Zmc2V0ID0gMDsKKwlEQkdfTVNHKCJbc2xpY21vbl0gV3JpdGUgQ29yZUhlYWRlciBsZW5bJXhdIG9mZnNldFsleF1cbiIsCisJCSh1aW50KSBzaXplb2Yoc3RydWN0IHNsaWNjb3JlX2hkciksIGZpbGVfb2Zmc2V0KTsKKworCXJlc3VsdCA9CisJICAgIHNsaWNfZHVtcF93cml0ZShjYXJkLCAmY29yZWhkciwgc2l6ZW9mKHN0cnVjdCBzbGljY29yZV9oZHIpLAorCQkJICAgIGZpbGVfb2Zmc2V0KTsKKwlEQkdfTVNHKCJbc2xpY21vbl0gY29yZWhkciAgeG9mZlsleF0geHN6WyV4XVxuIgorCQkiICAgIHJvZmZbJXhdIHJzelsleF0gZmlsZW9mZlsleF0gZmlsZXN6WyV4XVxuIgorCQkiICAgIHNyYW1vZmZbJXhdIHNyYW1zelsleF0sIGRyYW1vZmZbJXhdIGRyYW1zelsleF1cbiIKKwkJIiAgICBjb3JlaGRyX29mZnNldFsleF1cbiIsIGNvcmVoZHIuWG10UmVnT2ZmLAorCQljb3JlaGRyLlhtdFJlZ3NpemUsIGNvcmVoZHIuUmN2UmVnT2ZmLCBjb3JlaGRyLlJjdlJlZ3NpemUsCisJCWNvcmVoZHIuRmlsZVJlZ09mZiwgY29yZWhkci5GaWxlUmVnc2l6ZSwgY29yZWhkci5TcmFtT2ZmLAorCQljb3JlaGRyLlNyYW1zaXplLCBjb3JlaGRyLkRyYW1PZmYsIGNvcmVoZHIuRHJhbXNpemUsCisJCSh1aW50KSBzaXplb2Yoc3RydWN0IHNsaWNjb3JlX2hkcikpOworCWZvciAoaSA9IDA7IGkgPCBtYXhfcXVldWVzOyBpKyspIHsKKwkJREJHX01TRygiW3NsaWNtb25dICBRVUVVRSAweCV4ICBvZmZzZXRbJXhdIHNpemVbJXhdXG4iLAorCQkJKHVpbnQpIGksIGNvcmVoZHIucXVldWVzW2ldLnF1ZXVlT2ZmLAorCQkJY29yZWhkci5xdWV1ZXNbaV0ucXVldWVzaXplKTsKKworCX0KKworCXNsaWNfZHVtcF9jbG9zZV9maWxlKGNhcmQpOworCisJaWYgKHJlc3VtZSkgeworCQlEQkdfTVNHKCJzbGljRHVtcCBSRVNUQVJUIFJFQ0VJVkUgYW5kIFhNSVQgUFJPQ0VTU09SU1xuXG4iKTsKKwkJc2xpY19kdW1wX3Jlc3VtZShjYXJkLCBQUk9DX1JFQ0VJVkUpOworCQlzbGljX2R1bXBfcmVzdW1lKGNhcmQsIFBST0NfVFJBTlNNSVQpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2hhbHQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1bnNpZ25lZCBjaGFyIHByb2MpCit7CisJdW5zaWduZWQgY2hhciAqY21kID0gY2FyZC0+Y21kYnVmZmVyOworCisJKmNtZCA9IENPTU1BTkRfQllURShDTURfSEFMVCwgMCwgcHJvYyk7CisKKwlyZXR1cm4gc2xpY19kdW1wX3NlbmRfY21kKGNhcmQsCisJCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNsLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzaCwgMCwgMCk7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX3Jlc3VtZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYykKK3sKKwl1bnNpZ25lZCBjaGFyICpjbWQgPSBjYXJkLT5jbWRidWZmZXI7CisKKwkqY21kID0gQ09NTUFORF9CWVRFKENNRF9SVU4sIDAsIHByb2MpOworCisJcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsIDAsIDApOworfQorCitzdGF0aWMgdTMyIHNsaWNfZHVtcF9yZWcoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1bnNpZ25lZCBjaGFyIHByb2MpCit7CisJc3RydWN0IGR1bXBfY21kICpkdW1wID0gKHN0cnVjdCBkdW1wX2NtZCAqKWNhcmQtPmNtZGJ1ZmZlcjsKKworCWR1bXAtPmNtZCA9IENPTU1BTkRfQllURShDTURfRFVNUCwgMCwgcHJvYyk7CisJZHVtcC0+ZGVzYyA9IERFU0NfUkVHOworCWR1bXAtPmNvdW50ID0gMDsKKwlkdW1wLT5hZGRyID0gMDsKKworCXJldHVybiBzbGljX2R1bXBfc2VuZF9jbWQoY2FyZCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2wsCisJCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNoLAorCQkJCSAgIGNhcmQtPmR1bXBidWZmZXJfcGh5c2wsCisJCQkJICAgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzaCk7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2RhdGEoc3RydWN0IHNsaWNjYXJkICpjYXJkLAorCQkgICAgICAgdTMyIGFkZHIsIHVzaG9ydCBjb3VudCwgdW5zaWduZWQgY2hhciBkZXNjKQoreworCXN0cnVjdCBkdW1wX2NtZCAqZHVtcCA9IChzdHJ1Y3QgZHVtcF9jbWQgKiljYXJkLT5jbWRidWZmZXI7CisKKwlkdW1wLT5jbWQgPSBDT01NQU5EX0JZVEUoQ01EX0RVTVAsIDAsIFBST0NfUkVDRUlWRSk7CisJZHVtcC0+ZGVzYyA9IGRlc2M7CisJZHVtcC0+Y291bnQgPSBjb3VudDsKKwlkdW1wLT5hZGRyID0gYWRkcjsKKworCXJldHVybiBzbGljX2R1bXBfc2VuZF9jbWQoY2FyZCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2wsCisJCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNoLAorCQkJCSAgIGNhcmQtPmR1bXBidWZmZXJfcGh5c2wsCisJCQkJICAgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzaCk7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX3F1ZXVlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwKKwkJCXUzMiBhZGRyLCB1MzIgYnVmX3BoeXNoLCB1MzIgcXVldWUpCit7CisJc3RydWN0IGR1bXBfY21kICpkdW1wID0gKHN0cnVjdCBkdW1wX2NtZCAqKWNhcmQtPmNtZGJ1ZmZlcjsKKworCWR1bXAtPmNtZCA9IENPTU1BTkRfQllURShDTURfRFVNUCwgMCwgUFJPQ19SRUNFSVZFKTsKKwlkdW1wLT5kZXNjID0gREVTQ19RVUVVRTsKKwlkdW1wLT5jb3VudCA9IDE7CisJZHVtcC0+YWRkciA9IHF1ZXVlOworCisJcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAorCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsCisJCQkJICAgYWRkciwgY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzaCk7Cit9CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2xvYWRfcXVldWUoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1MzIgZGF0YSwKKwkJCQl1MzIgcXVldWUpCit7CisJc3RydWN0IGR1bXBfY21kICpsb2FkID0gKHN0cnVjdCBkdW1wX2NtZCAqKSBjYXJkLT5jbWRidWZmZXI7CisKKwlsb2FkLT5jbWQgPSBDT01NQU5EX0JZVEUoQ01EX0xPQUQsIDAsIFBST0NfUkVDRUlWRSk7CisJbG9hZC0+ZGVzYyA9IERFU0NfUVVFVUU7CisJbG9hZC0+Y291bnQgPSAodXNob3J0KSBxdWV1ZTsKKwlsb2FkLT5hZGRyID0gZGF0YTsKKworCXJldHVybiBzbGljX2R1bXBfc2VuZF9jbWQoY2FyZCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2wsCisJCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNoLCAwLCAwKTsKK30KKworc3RhdGljIHUzMiBzbGljX2R1bXBfY2FtKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwKKwkJICAgICAgdTMyIGFkZHIsIHUzMiBjb3VudCwgdW5zaWduZWQgY2hhciBkZXNjKQoreworCXN0cnVjdCBkdW1wX2NtZCAqZHVtcCA9IChzdHJ1Y3QgZHVtcF9jbWQgKiljYXJkLT5jbWRidWZmZXI7CisKKwlkdW1wLT5jbWQgPSBDT01NQU5EX0JZVEUoQ01EX0NBTV9PUFMsIDAsIFBST0NfTk9ORSk7CisJZHVtcC0+ZGVzYyA9IGRlc2M7CisJZHVtcC0+Y291bnQgPSBjb3VudDsKKwlkdW1wLT5hZGRyID0gMDsKKworCXJldHVybiBzbGljX2R1bXBfc2VuZF9jbWQoY2FyZCwKKwkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2wsCisJCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNoLAorCQkJCSAgIGFkZHIsIGNhcmQtPmR1bXBidWZmZXJfcGh5c2gpOworfQorCitzdGF0aWMgdTMyIHNsaWNfZHVtcF9zZW5kX2NtZChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsCisJCQkgICB1MzIgY21kX3BoeXNsLAorCQkJICAgdTMyIGNtZF9waHlzaCwKKwkJCSAgIHUzMiBidWZfcGh5c2wsIHUzMiBidWZfcGh5c2gpCit7CisJdWxvbmcgdGltZW91dCA9IFNMSUNfTVNfVE9fSklGRklFUyg1MDApOwkvKiA1MDAgbXNlYyAqLworCXUzMiBhdHRlbXB0cyA9IDU7CisJdTMyIGRlbGF5ID0gU0xJQ19NU19UT19KSUZGSUVTKDEwKTsJLyogMTAgbXNlYyAqLworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gY2FyZC0+bWFzdGVyOworCisJQVNTRVJUKGFkYXB0ZXIpOworCWRvIHsKKwkJLyoKKwkJICogWmVybyB0aGUgRHVtcHN0YXR1cyBmaWVsZCBvZiB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKwkJICovCisJCWNhcmQtPmR1bXBzdGF0dXMgPSAwOworCQkvKgorCQkgKiBJc3N1ZSB0aGUgZHVtcCBjb21tYW5kIHZpYSBhIHV0aWxpdHkgcHJvY2Vzc29yIHJlcXVlc3QuCisJCSAqCisJCSAqIEtsdWRnZTogV2UgdXNlIHRoZSBJbmZvcm1hdGlvbmJ1ZmZlciBwYXJhbWV0ZXIgdG8gaG9sZAorCQkgKiB0aGUgYnVmZmVyIGFkZHJlc3MKKwkJICovCisJCXNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwgU0xJQ19VUFJfRFVNUCwgY21kX3BoeXNsLCBjbWRfcGh5c2gsCisJCQkJIGJ1Zl9waHlzbCwgYnVmX3BoeXNoKTsKKworCQl0aW1lb3V0ICs9IGppZmZpZXM7CisJCS8qCisJCSAqIFNwaW4gdW50aWwgY29tcGxldGlvbiBvciB0aW1lb3V0LgorCQkgKi8KKwkJd2hpbGUgKCFjYXJkLT5kdW1wc3RhdHVzKSB7CisJCQlpbnQgbnVtX3NsZWVwcyA9IDA7CisKKwkJCWlmIChqaWZmaWVzID4gdGltZW91dCkgeworCQkJCS8qCisJCQkJICogIENvbXBsZXRlIHRoZSB0aW1lZC1vdXQgRFVNUCBVUFIgcmVxdWVzdC4KKwkJCQkgKi8KKwkJCQlzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKGFkYXB0ZXIsIDApOworCQkJCURCR19FUlJPUgorCQkJCSAgICAoIiVzOiBUSU1FRCBPVVQgbnVtX3NsZWVwc1sleF0gIgorCQkJCSAgICAgInN0YXR1c1sleF1cbiIsCisJCQkJICAgICBfX2Z1bmNfXywgbnVtX3NsZWVwcywgU1RBVFVTX0ZBSUxVUkUpOworCisJCQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOworCQkJfQorCQkJbnVtX3NsZWVwcysrOworCQkJU0xJQ19JTlRFUlJVUFRJQkxFX1NMRUVQX09OX1RJTUVPVVQoY2FyZC0+ZHVtcF93cSwKKwkJCQkJCQkgICAgZGVsYXkpOworCQl9CisKKwkJaWYgKGNhcmQtPmR1bXBzdGF0dXMgJiBJU1JfVVBDRVJSKSB7CisJCQkvKgorCQkJICogRXJyb3IgKG9yIHF1ZXVlIGVtcHR5KQorCQkJICovCisvKiAgICAgICAgICBEQkdfRVJST1IoIltzbGljbW9uXSAlczogRFVNUF9TVEFUVVMgJiBJU1JfVVBDRVJSIHN0YXR1c1sleF1cbiIsCisJCV9fZnVuY19fLCBTVEFUVVNfRkFJTFVSRSk7ICovCisKKwkJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKKwkJfSBlbHNlIGlmIChjYXJkLT5kdW1wc3RhdHVzICYgSVNSX1VQQ0JTWSkgeworCQkJLyoKKwkJCSAqIFJldHJ5CisJCQkgKi8KKwkJCURCR19FUlJPUigiJXM6IElTUl9VUENCVVNZIGF0dGVtcHRbJXhdXG4iLCBfX2Z1bmNfXywKKwkJCQkgIGF0dGVtcHRzKTsKKworCQkJYXR0ZW1wdHMtLTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBzdWNjZXNzCisJCQkgKi8KKwkJCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKKwkJfQorCisJfSB3aGlsZSAoYXR0ZW1wdHMpOworCisJREJHX0VSUk9SKCIlczogR0FWRSBVUCBBRlRFUiBTRVZFUkFMIEFUVEVNUFRTIHN0YXR1c1sleF1cbiIsCisJCSAgX19mdW5jX18sIFNUQVRVU19GQUlMVVJFKTsKKworCS8qCisJICogR2F2ZSB1cCBhZnRlciBzZXZlcmFsIGF0dGVtcHRzCisJICovCisJcmV0dXJuIFNUQVRVU19GQUlMVVJFOworfQorCisjZW5kaWYKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgPT09ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0KKyAgPT09ICAgICAgKioqIEVORCAqKioqIEVORCAqKioqIEVORCAqKioqIEVORCAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0KKyAgPT09ICAgICAgIFNMSUMgIERVTVAgIE1BTkFHRU1FTlQgICAgICAgIFNFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0KKyAgPT09ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0KKyAgPT09ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0KKyAgPT09ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKiAgIE1PRFVMRSBJTklUSUFUSU9OIC8gVEVSTUlOQVRJT04gRlVOQ1RJT05TICAgKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNsaWNfZHJpdmVyID0geworCS5uYW1lID0gRFJWX05BTUUsCisJLmlkX3RhYmxlID0gc2xpY19wY2lfdGJsLAorCS5wcm9iZSA9IHNsaWNfZW50cnlfcHJvYmUsCisJLnJlbW92ZSA9IHNsaWNfZW50cnlfcmVtb3ZlLAorI2lmIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECisJLnN1c3BlbmQgPSBzbGljcG1fc3VzcGVuZCwKKwkucmVzdW1lID0gc2xpY3BtX3Jlc3VtZSwKKyNlbmRpZgorLyogICAgLnNodXRkb3duICAgPSAgICAgc2xpY19zaHV0ZG93biwgIE1PT0tfSU5WRVNUSUdBVEUgKi8KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNsaWNfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpZGV2OworCWludCByZXQ7CisKKy8qICAgICAgREJHX01TRygic2xpY29zczogJXMgRU5URVIgY3B1ICVkXG4iLCBfX2Z1bmNfXywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsgKi8KKworCXNsaWNfaW5pdF9kcml2ZXIoKTsKKworCWlmIChkZWJ1ZyA+PSAwICYmIHNsaWNfZGVidWcgIT0gZGVidWcpCisJCXByaW50ayhTTElDTEVWRUwgInNsaWNvc3M6IGRlYnVnIGxldmVsIGlzICVkLlxuIiwgZGVidWcpOworCWlmIChkZWJ1ZyA+PSAwKQorCQlzbGljX2RlYnVnID0gZGVidWc7CisKKwlwY2lkZXYgPSAoc3RydWN0IHBjaV9kZXZpY2VfaWQgKilzbGljX2RyaXZlci5pZF90YWJsZTsKKy8qICAgICAgREJHX01TRygic2xpY29zczogJXMgY2FsbCBwY2lfbW9kdWxlX2luaXQgamlmZmllc1slbHhdIGNwdSAjJWRcbiIsCisJX19mdW5jX18sIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7ICovCisKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzbGljX2RyaXZlcik7CisKKy8qICBEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUIGFmdGVyIGNhbGwgcGNpX21vZHVsZV9pbml0IGppZmZpZXNbJWx4XSAiCisJICAgICJjcHUgIyVkIHN0YXR1c1sleF1cbiIsX19mdW5jX18sIGppZmZpZXMsCisJICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgcmV0KTsgKi8KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbGljX21vZHVsZV9jbGVhbnVwKHZvaWQpCit7CisvKiAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSXG4iLCBfX2Z1bmNfXyk7ICovCisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzbGljX2RyaXZlcik7CisJc2xpY19kZWJ1Z19jbGVhbnVwKCk7CisvKiAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsgKi8KK30KKworbW9kdWxlX2luaXQoc2xpY19tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChzbGljX21vZHVsZV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGFnaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3RhZ2luZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzM2U1ODkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RhZ2luZy5jCkBAIC0wLDAgKzEsMTkgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK3N0YXRpYyBpbnQgX19pbml0IHN0YWdpbmdfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc3RhZ2luZ19leGl0KHZvaWQpCit7Cit9CisKK21vZHVsZV9pbml0KHN0YWdpbmdfaW5pdCk7Cittb2R1bGVfZXhpdChzdGFnaW5nX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJHcmVnIEtyb2FoLUhhcnRtYW4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3RhZ2luZyBDb3JlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2Y2YwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvS2NvbmZpZwpAQCAtMCwwICsxLDExIEBACitjb25maWcgU1hHCisJdHJpc3RhdGUgIkFsYWNyaXRlY2ggU0xJQyBUZWNobm9sb2d5IE5vbi1BY2NlbGVyYXRlZCAxMEdiZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIE5FVERFVl8xMDAwMAorCWRlcGVuZHMgb24gWDg2CisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEFsYWNyaXRlY2ggU0xJQyBUZWNobm9sb2d5IE5vbi1BY2NlbGVyYXRlZAorCSAgMTBHYmUgbmV0d29yayBjYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlCisJICBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3hnLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0OGZhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX1NYRykJKz0gc3hnLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQxZGRiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvUkVBRE1FCkBAIC0wLDAgKzEsMTMgQEAKK1RoaXMgaXMgdGhlIHJvdWdoIGN1dCBhdCBhIGRyaXZlciBmb3IgdGhlIEFsYWNyaXRlY2ggU0xJQyBUZWNobm9sb2d5CitOb24tQWNjZWxlcmF0ZWQgMTBHYmUgbmV0d29yayBkcml2ZXIuCisKK1RPRE86CisJLSBsaW5kZW50IHRoZSBjb2RlCisJLSByZW1vdmUgdHlwZWRlZnMKKwktIHJlbW92ZSB3cmFwcGVycworCS0gY2hlY2twYXRjaC5wbCBjbGVhbnVwcworCS0gbmV3IGZ1bmN0aW9uYWxpdHkgdGhhdCB0aGUgY2FyZCBuZWVkcworCitQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvOgorICAgICAgICBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorZm9yIGFueSBjbGVhbnVwcyB0aGF0IHlvdSBkbyB0byB0aGlzIGRyaXZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc2FoYXJhZGJnZG93bmxvYWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc2FoYXJhZGJnZG93bmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODg2NWJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zYWhhcmFkYmdkb3dubG9hZC5oCkBAIC0wLDAgKzEsNDg1NCBAQAorI2RlZmluZSBTQUhBUkFfVUNPREVfVkVSU19TVFJJTkcJIiRSZXZpc2lvbjogMS4xICQiCisjZGVmaW5lIFNBSEFSQV9VQ09ERV9WRVJTX0RBVEUgIAkiJERhdGU6IDIwMDgvMDYvMjcgMTI6NTg6MjcgJCIKKyNkZWZpbmUgU0FIQVJBX1VDT0RFX0hPU1RJRl9JRCAgCTMKKworc3RhdGljIHUzMiBTTnVtU2VjdGlvbnMgPSAweDI7CitzdGF0aWMgdTMyIFNTZWN0aW9uU2l6ZVtdID0KK3sKKwkweDAwMDBlMjc0LCAweDAwMDAwMDBjLAorfTsKKworc3RhdGljIHUzMiBTU2VjdGlvblN0YXJ0W10gPQoreworCTB4MDAwMDAwMDAsIDB4MDAwMDFmZmYsCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBTYWhhcmFVQ29kZVsyXVs1Nzk3Ml0gPQoreworeworCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4NGQsIDB4MjksIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhiMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4ZmUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg0MCwgMHgyYiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDI3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDJhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MWUsIDB4ODAsIDB4ZTksIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDgwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4YzAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHgwMCwgMHgwMiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDQwLCAweDAyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4ODAsIDB4MDIsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDAwLCAweDAzLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4NDAsIDB4MDMsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg4MCwgMHgwMywgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweGMwLCAweDAzLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NWYsIDB4M2YsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MiwgMHhmZiwgMHhmYywgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDEyLCAweDgwLCAweGZkLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHg4YSwgMHgxMSwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHhmZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDEyLCAweDgwLCAweGZkLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4YzAsIDB4MDEsIDB4MzIsCisJMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4MiwgMHg0ZCwgMHgyOCwgMHgxYSwKKwkweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDVmLCAweDBhLCAweGY2LCAweDk0LAorCTB4MDAsIDB4MDAsIDB4NGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDQ5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDBlLCAweDgwLCAweDE4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZDIsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4YzAsIDB4MjAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDQwLCAweDIxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODUsIDB4MjEsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYywgMHgwMiwgMHhjMCwgMHgyMiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDQzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4NDAsIDB4MTgsIDB4OWQsCisJMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhiLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweDAwLCAweDAwLCAweDQ4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4MDAsIDB4OTAsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhiMiwgMHgwMCwgMHhlOSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDdjLCAweDFlLCAweGMwLCAweGU3LCAweDlhLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhiOCwgMHgwMSwgMHgwMCwgMHg5NCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxNywgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDY5LCAweDA1LCAweDAwLCAweDEwLCAweDAxLCAweGY4LCAweDAyLCAweDAwLCAweDZlLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgyNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQwLCAweDE4LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDEsIDB4MDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1NywgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MSwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDJiLCAweGJjLAorCTB4MDIsIDB4MDAsIDB4NTcsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4YjksCisJMHgwMCwgMHgwMCwgMHg1YSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHhiMCwgMHhiYywKKwkweDAwLCAweDAwLCAweDYwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4NGEsIDB4ZDAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweGNkLCAweDRhLCAweGQwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4ZmEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiYywKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MDMsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4NDAsIDB4MTgsIDB4YmQsCisJMHgwOCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMywgMHg0MCwgMHgwMSwgMHg5OSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDE2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NjcsIDB4MDAsIDB4MDMsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmQsCisJMHgwMCwgMHgwMCwgMHg3NiwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweDM5LAorCTB4NzYsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg2YiwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDY1LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDg1LCAweDgwLCAweGJjLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCisJMHg2MywgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDY4LCAweDhiLCAweDgwLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4YjgsIDB4ZmYsIDB4ODUsIDB4MzAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgyMSwgMHhmZiwgMHgzOCwKKwkweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg3LCAweDRkLCAweDgwLCAweDNhLAorCTB4MmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4MGQsIDB4ODAsIDB4M2EsCisJMHgwMCwgMHhjNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDU0LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg0OCwgMHg0MSwgMHg4MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDg2LCAweDk4LCAweDY3LCAweGMwLCAweDgyLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4YiwgMHg4MCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDEyLCAweDgwLCAweDJkLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDgsIDB4ODAsIDB4NzAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHg5MCwgMHg5OSwgMHg4NiwgMHgyYywgMHgyOCwgMHhkZSwgMHg4MiwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDE4LCAweGMwLCAweDgyLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDgsIDB4YzUsIDB4ODIsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjNSwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDYzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDY4LCAweDhiLCAweDgwLCAweDk0LAorCTB4MDgsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4NDAsIDB4MDEsIDB4OTksCisJMHgwOCwgMHgwMCwgMHgzOCwgMHgwMywgMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg1MywgMHg0MCwgMHgwMSwgMHhiOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA1LCAweDgwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgzZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDdlLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDU5LCAweDAwLCAweDgwLCAweGQ3LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgzYSwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweDNhLCAweDgwLCAweGJjLAorCTB4MDAsIDB4OTAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4MGQsIDB4ODAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDIsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4MGQsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMiwgMHhhNCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAyLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDA4LCAweDAwLCAweDM3LCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwNCwgMHgwOCwgMHg4MCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDk2LCAweDAwLCAweDlmLCAweDAwLCAweDAwLCAweDVjLCAweDA4LCAweDAwLCAweDcyLCAweGIyLAorCTB4ODcsIDB4MDAsIDB4OTUsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhkOCwgMHhjMSwgMHg4MiwgMHg5NCwKKwkweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDg4LCAweGMxLCAweDgyLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4OWUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTIsIDB4N2QsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDA1LCAweDgwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDQzLCAweDYwLCAweDNkLCAweGIzLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCisJMHg5YSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDBmLCAweDk3LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDg1LCAweGIwLAorCTB4MTAsIDB4MDAsIDB4YTUsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NzksIDB4MjEsIDB4MTYsIDB4YjgsCisJMHgwMSwgMHgwMCwgMHhhNSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKKwkweDg3LCAweDAwLCAweGFmLCAweDAwLCAweDg3LCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweGNkLCAweDg1LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhkOCwgMHhjMSwgMHg4MiwgMHg5NCwKKwkweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDg4LCAweGMxLCAweDgyLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YWYsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzAsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg5OCwgMHhjMSwgMHg4MiwgMHg5NCwKKwkweDAwLCAweDAwLCAweGFkLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweGMxLCAweDgyLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YWYsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4ZmMsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHhhOCwgMHg0MiwgMHgzZCwgMHg3MiwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDE4LCAweDk5LCAweGIxLCAweGYyLCAweGMwLCAweDdjLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGMxLCAweDgyLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YTksIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4ZmMsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDgwLCAweDAwLCAweDgwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGMyLCAweGNkLCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHhjZCwgMHg4NSwgMHgzMCwKKwkweDgwLCAweDAwLCAweGM2LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDk3LCAweGJjLAorCTB4YTAsIDB4MDAsIDB4YzYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDg3LCAweDAwLCAweGJkLCAweDAwLCAweDg3LCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweGNkLCAweDg1LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4YjksIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweGJkLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NzksIDB4NjEsIDB4MTYsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweGQ2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGI4LCAweGMxLCAweDgyLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NTIsIDB4ODAsIDB4ZmMsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHhlMSwgMHgxNiwgMHgzOCwKKwkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzgsIDB4YzEsIDB4ODIsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOCwgMHgwMCwgMHgwNCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGQ2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGE4LCAweGMxLCAweDgyLCAweDk0LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NzksIDB4MjEsIDB4MTcsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweGQ2LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDgsIDB4ODksIDB4OGQsIDB4NzIsIDB4MzAsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhOSwgMHhkYywgMHgxNywgMHgzOCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDIyLCAweDAwLCAweDkwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4ODAsIDB4MDAsIDB4ODYsIDB4ODAsIDB4MjIsIDB4MjQsIDB4N2MsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwNSwgMHg4MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDA1LCAweDgwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg0MywgMHg2MCwgMHgzZCwgMHhiMywKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAorCTB4ZDIsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDU5LCAweDAwLCAweDgwLCAweGQ3LAorCTB4MDAsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHhjMCwgMHhmNSwgMHg5YSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NDMsIDB4NjAsIDB4M2QsIDB4YjMsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKKwkweGUwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4ZjQsIDB4MDAsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMiwgMHgwMCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDQwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwNSwgMHg4MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweDA1LCAweDgwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDAwLCAweDI5LCAweGMxLCAweDcyLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjAsIDB4OTAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHhjMSwgMHg4MiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDU3LCAweDAwLCAweDgwLCAweDk3LAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YTAsIDB4MDQsIDB4MzksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDA1LCAweDgwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDUsIDB4ODAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwNSwgMHg4MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweDA4LCAweGU4LCAweDgxLCAweDgwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0NSwgMHg5MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDAwLCAweDI4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MTEsIDB4MDEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg1OSwgMHhjMCwgMHg2ZSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDc4LCAweDE5LCAweGMwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4MDQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YmQsIDB4OTcsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgxZSwgMHg0MCwgMHhlZiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDA5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg3NywgMHhjMCwgMHgyOSwgMHgzNywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDE3LCAweDNkLCAweDkwLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ZjQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4ODMsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg3MiwgMHgwMCwgMHgyYiwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDNkLCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDEsIDB4ODAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4MjIsIDB4YzAsIDB4NzIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgyNywgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMiwgMHgwMCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDJjLCAweDAxLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweDA4LCAweDgwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDIsIDB4ODAsIDB4MmMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxZiwgMHg4MCwgMHhmZiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDcyLCAweDAwLCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4ODksIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NDMsIDB4NjAsIDB4M2QsIDB4YjMsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKKwkweDI4LCAweDAxLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4Y2QsIDB4ODUsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDcyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MjgsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHhiZCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDgsIDB4ODAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzZCwgMHgwMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg2MiwgMHhhMCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDNjLCAweDAwLCAweDE0LCAweDI4LCAweDgwLCAweDcyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDYsIDB4MzIsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg3NywgMHg0YSwgMHgwOSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NjQsIDB4MDEsIDB4MDQsIDB4MzgsIDB4MDAsIDB4NzgsIDB4ZDksIDB4YzUsIDB4NzIsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg0MSwgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5NywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4NDMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4ODAsIDB4OTcsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJkLCAweGJjLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4M2MsIDB4YjgsIDB4MWMsIDB4MTcsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgyOCwgMHhjMCwgMHg4MywgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDJjLCAweDA4LCAweGMwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YjgsIDB4ZTAsIDB4ODMsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHgyOSwgMHgwMCwgMHgyMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDYzLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4NzgsIDB4YTAsIDB4ODEsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhkOCwgMHhlMCwgMHg4MSwgMHgzYywKKwkweDAwLCAweDAwLCAweDUxLCAweDAxLCAweDA2LCAweDNhLCAweDAwLCAweDgwLCAweGIyLCAweDVjLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4ODksIDB4YzEsIDB4NzIsIDB4MzcsCisJMHgwNywgMHgwMCwgMHg1MCwgMHgwMSwgMHgyYiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg3OSwgMHgwYSwgMHgwNCwgMHhiOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDAwLCAweDAwLCAweDA0LCAweDE5LCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MmMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMCwgMHgyYywgMHhkNywgMHhlMCwgMHg3MiwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg2NCwgMHg4MywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDczLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDI4LCAweGQ4LCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKKwkweDAwLCAweDAwLCAweGQ3LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY5LCAweDQxLCAweDkwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4NjEsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZDgsIDB4YTAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHg5YSwKKwkweDAwLCAweDAwLCAweDg0LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NDksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHgxOSwgMHgwMCwgMHgyMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDA3LCAweDAwLCAweDY2LCAweDAxLCAweDJiLCAweDAxLCAweDAwLCAweDA0LCAweDc5LCAweDBhLCAweDAyLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDEsIDB4OTAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHhhMCwgMHg4MSwgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDczLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDI4LCAweGQ4LCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4NjAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDcwLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg3MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKKwkweDAwLCAweDAwLCAweGQ3LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY5LCAweDQxLCAweDkwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjksIDB4NDEsIDB4OTAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg4MCwgMHg3MywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDA4LCAweDg5LCAweDgwLCAweDczLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHg0MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHg4YywgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDdmLCAweDAxLCAweDI5LCAweDA4LCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDg1LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MjgsIDB4MTAsIDB4MDAsIDB4OGMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4MywgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4NCwgMHgwNywgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDhjLCAweGY3LCAweGUwLCAweDgyLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MjgsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4MywgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4NCwgMHgwNywgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDI3LCAweGU0LCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NzIsIDB4MDAsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4NywgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg0MywgMHg2MCwgMHgzZCwgMHhiMywKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAorCTB4ODMsIDB4MDEsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDUyLCAweDgxLCAweDJjLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4ODksIDB4MDEsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgzOCwgMHg4MSwgMHg4MCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLCAweGY0LCAweDFlLCAweDQwLCAweGVmLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDEsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhlLCAweDAxLCAweGI5LCAweDAwLCAweDAwLCAweDc4LCAweGM5LCAweDNiLCAweDNhLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OTIsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweGUyLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MGUsIDB4MDAsIDB4M2EsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGJhLCAweDgzLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YmQsIDB4OTcsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhmNCwgMHhiZCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDk3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MGUsIDB4ODAsIDB4ODMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMiwgMHg3YSwgMHhlOCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGU4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4YzAsIDB4MjksIDB4MzcsCisJMHg2MCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwZCwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGU4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ZTgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NzgsIDB4MDgsIDB4ODAsIDB4NzIsIDB4MzIsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHg1NCwgMHhhOCwgMHg1YywgMHgxNiwgMHgzOCwKKwkweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDJjLCAweGE4LCAweGRjLCAweDE2LCAweDM4LAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODgsIDB4NGQsIDB4ODUsIDB4M2EsCisJMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDM4LCAweDAwLCAweDE0LCAweGE5LCAweDljLCAweDg3LCAweGQ5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyNCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg3MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4M2MsIDB4MDAsIDB4MTQsIDB4MTgsIDB4ODAsIDB4NzIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhiYiwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDYsIDB4MzIsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg3NywgMHg0YSwgMHgwOSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NzgsIDB4YzAsIDB4MjksIDB4MzcsCisJMHgwMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHg4OCwgMHg0ZCwgMHg4NiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHhhMCwgMHg4MSwgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDg2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDFjLCAweGQ4LCAweGUwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHhkOCwgMHg2MCwgMHg4NiwgMHgzYSwKKwkweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhkMCwgMHgwMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4Y2IsIDB4MDEsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGQ4LCAweGUwLCAweDg2LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4MzIsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhkYywgMHgwMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MDEsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGU4LCAweDAxLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDg0LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgyMiwgMHg0MCwgMHg4NSwgMHgzYSwKKwkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDQwLCAweDg4LCAweGNkLCAweDc0LCAweDM2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjgsIDB4MDAsIDB4ODQsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDE0LCAweDAwLCAweGU4LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDFjLCAweDg4LCAweDBkLCAweDg0LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHg2MSwgMHg4NSwgMHgzYSwKKwkweDgwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZDgsIDB4NjAsIDB4ODYsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGVhLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZDgsIDB4ZTAsIDB4ODYsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgzMiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgyMiwgMHhjMCwgMHg4MiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweGI4LCAweDYwLCAweDg1LCAweDNjLAorCTB4MDQsIDB4MDAsIDB4ZjIsIDB4MDEsIDB4ODEsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODgsIDB4Y2QsIDB4NzQsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyOCwgMHhmOCwgMHhhMCwgMHg3NSwgMHgzYywKKwkweDAwLCAweDAwLCAweGYzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDc0LCAweDA4LCAweDgwLCAweDc1LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjgsIDB4ZjgsIDB4YTAsIDB4NzUsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHhhMSwgMHg4MiwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGYyLCAweDYwLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MDAsIDB4NzUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3YywgMHgwOCwgMHg4MCwgMHg3NSwgMHgzMiwKKwkweDA5LCAweDAwLCAweGY5LCAweDAxLCAweDA0LCAweDFhLCAweDAwLCAweDcwLCAweDg4LCAweGNkLCAweDc0LCAweGIwLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4NGMsIDB4ODcsIDB4Y2QsIDB4NzQsIDB4MzEsCisJMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHg4OCwgMHg0ZCwgMHg4NiwgMHgzMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDI4LCAweDQwLCAweDg2LCAweDNhLAorCTB4MjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg4MiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEyLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDI3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhjZCwgMHg4NSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGU4LCAweGExLCAweDgyLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MjIsIDB4YzAsIDB4ODIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHhlMSwgMHg4MSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDBiLCAweDAyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDAwLCAweDg2LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NTgsIDB4MDcsIDB4NDAsIDB4ODcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwYSwgMHgwMiwgMHg4ZiwgMHgwMSwgMHgwMCwgMHg3NCwgMHgxOCwgMHg0MCwgMHg4NywgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NTgsIDB4ZjcsIDB4YTAsIDB4ODYsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhmOSwgMHhhMCwgMHg4NiwgMHgzYSwKKwkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDU4LCAweDg3LCAweDhkLCAweDk3LCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MjIsIDB4NDAsIDB4ODUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg1MCwgMHgwNywgMHg4MCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDExLCAweDAyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4NGMsIDB4YzcsIDB4ZTEsIDB4NzQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg3OCwgMHhhMCwgMHg4NCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDE0LCAweDAyLCAweDkwLCAweDAxLCAweDAwLCAweDc4LCAweGY5LCAweGExLCAweDg2LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MTksIDB4ODAsIDB4OTcsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1OCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDU4LCAweGExLCAweDg2LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHg2MCwgMHg4NSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0YywgMHgwMiwgMHhjMCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg1NywgMHgyMSwgMHg4MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDU3LCAweDYxLCAweDg2LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4MDIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweGMwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHgxOSwgMHgwMCwgMHgyMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDIxLCAweDgwLCAweDNhLAorCTB4MDcsIDB4MDAsIDB4MjcsIDB4MDIsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4NzksIDB4MGEsIDB4MDIsIDB4YjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGEwLCAweDgxLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHg0MSwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxYywgMHhkOCwgMHhlMCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDYwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjAsIDB4ODAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgzMiwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweDEyLCAweGU0LCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4M2YsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmOSwgMHg0MSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweDEyLCAweGU0LCAweDM4LCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgzZCwgMHgwMiwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDNhLCAweDAyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDM1LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHg2NywgMHgwMCwgMHgwMCwgMHg4MCwgMHgxOCwgMHgwMCwgMHg4OCwgMHhiYywKKwkweDAwLCAweDAwLCAweDM1LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHhjMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDMyLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MjUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmOSwgMHg0MSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweDEyLCAweGU0LCAweDM4LCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NDMsIDB4MDIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDRiLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDE4LCAweDAwLCAweDg4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDMsIDB4MDIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NGYsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4MDAsIDB4ODYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDg5LCAweDgwLCAweDcxLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg4MCwgMHg3MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDUzLCAweDAyLCAweDkwLCAweDE5LCAweDAwLCAweDA0LCAweGU5LCAweDVjLCAweDkwLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDAsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNywgMHg4MCwgMHg4NiwgMHgzMiwKKwkweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDhjLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4YzAsIDB4ODUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg4YywgMHgwNywgMHg0MCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDgwLCAweDA3LCAweDQ1LCAweDkwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4NWEsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4MDAsIDB4ODYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg1YiwgMHgwMiwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4NCwgMHgyNywgMHhlNCwgMHg4MiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDIsIDB4MjcsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MiwgMHg2MCwgMHgzZCwgMHhiMywKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAorCTB4NWIsIDB4MDIsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDUyLCAweDgxLCAweDJjLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NjcsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ZDgsIDB4YTAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzMiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGZkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZmQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZDgsIDB4ZTAsIDB4ODYsIDB4OWEsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMSwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDE5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4ODEsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg0NSwgMHg4MSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHg4MCwgMHgwMSwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NzIsIDB4MDIsIDB4MDQsIDB4MDYsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwNiwgMHgwMSwgMHhlYywgMHg1NiwgMHhlMCwgMHg2ZSwgMHg5YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDA3LCAweDAxLCAweGVjLCAweDU2LCAweGUwLCAweDZlLCAweDNhLAorCTB4MDgsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAzLCAweGI4LCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDZlLCAweGJkLAorCTB4NzcsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4MGQsIDB4OTAsIDB4M2EsCisJMHgyZSwgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MmIsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgzNywgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDM4LCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDg2LCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDUyLCAweDQwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4NDAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNSwgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDgsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxNCwgMHg1OSwgMHhjMCwgMHg2ZSwgMHhkNywKKwkweDAyLCAweDAwLCAweDhmLCAweDAyLCAweDA0LCAweGI4LCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDZlLCAweGJjLAorCTB4MDgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4YjksIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAxLCAweGVjLCAweDA2LCAweDQwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OTEsIDB4MDIsIDB4YjUsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHgwMCwgMHg4MCwgMHhhMCwgMHgzNiwgMHgwYiwgMHg2YSwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDAxLCAweGU4LCAweDA2LCAweGMwLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4NSwgMHgyZiwgMHgzMCwKKwkweDAwLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4NjAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4OGQsIDB4MmYsIDB4YjAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQwLCAweDgxLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDIsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCisJMHgxNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweGI4LCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDZlLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAyLCAweDA0LCAweDAyLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4ZTAsIDB4NmUsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMywgMHgwMSwgMHhlYywgMHg1NiwgMHhlMCwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDIwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDM5LCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDZlLCAweGJjLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhkMiwKKwkweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MTQsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZDIsCisJMHgxYiwgMHgwMCwgMHhhZiwgMHgwMiwgMHgzOCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHhiMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDMwLCAweDAxLCAweDE0LCAweDA5LCAweDAwLCAweDZlLCAweGQyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg3OSwgMHgwYiwgMHgxNCwgMHgzOCwKKwkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDUwLCAweDAxLCAweDE0LCAweGE5LCAweDViLCAweDkxLCAweGQ5LAorCTB4MDAsIDB4MDAsIDB4YmUsIDB4MDIsIDB4MzgsIDB4MjgsIDB4MDAsIDB4MTgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwMiwgMHgwNCwgMHgyMSwgMHgwMSwgMHgwOCwgMHg2OSwgMHgyNCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHgwMiwgMHgwMiwgMHgzMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweGI5LCAweDAyLCAweDA2LCAweDAzLCAweDAxLCAweDgwLCAweDEyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwNSwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDMwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YmQsIDB4MDIsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwYSwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDBiLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YzEsIDB4MDIsIDB4MDQsIDB4MjEsIDB4MDEsIDB4MDgsIDB4NjksIDB4MjQsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAzLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YzMsIDB4MDIsIDB4MDIsIDB4MzAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTAsIDB4YmMsCisJMHgwNCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweGM1LCAweDAyLCAweDlmLCAweDMxLCAweDAxLCAweDBjLCAweDY5LCAweDI0LCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjOSwgMHgwMiwgMHgwNCwgMHgzMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDA2LCAweDAzLCAweDAxLCAweDgwLCAweDEyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MjAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgyMSwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweGNkLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDMyLCAweGE0LCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgyMiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDIzLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4Y2YsIDB4MDIsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgyMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDIxLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjMsIDB4NDAsIDB4MDEsIDB4YjksCisJMHgxMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHhjNSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMiwgMHgyMCwgMHgxNSwgMHg5OCwKKwkweDA4LCAweDAwLCAweDM4LCAweDAzLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDQzLCAweDQwLCAweDAxLCAweGI5LAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzUsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MjAsIDB4MTUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NTksIDB4MDAsIDB4ODAsIDB4ZDcsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDgsIDB4MDUsIDB4ODAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGZhLCAweDg1LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ZmEsIDB4ODUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhkZiwgMHgwMiwgMHgzNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDBlLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDIsIDB4MDAsIDB4YTksIDB4ZGIsIDB4ODUsIDB4MzksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMiwgMHhhNCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAyLCAweDhjLCAweDA4LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4OTQsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMiwgMHg5OCwgMHgyOCwgMHg4MCwgMHg2ZSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDM4LCAweDIyLCAweDE0LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MDIsIDB4MDQsIDB4MzAsIDB4MDAsIDB4MjgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHgxNCwgMHgwOCwgMHg4MCwgMHg2ZSwgMHgzMiwKKwkweDA1LCAweDAwLCAweGVlLCAweDAyLCAweDAwLCAweDMwLCAweDAyLCAweDAwLCAweDc4LCAweGUxLCAweDZlLCAweDk5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg3OCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweGExLCAweDk3LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4ZjAsIDB4MDIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MTQsIDB4MTAsIDB4ZjQsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4MGQsIDB4NzIsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHgwMiwgMHhmMiwKKwkweDBkLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDksIDB4MDAsIDB4ODAsIDB4NTIsIDB4YmQsIDB4NzIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhmYiwgMHgwMiwgMHgzMywgMHgxNSwgMHgwMCwgMHhhNCwgMHgwMiwgMHhjMCwgMHg3MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGIyLCAweDAxLCAweDcyLCAweGI2LAorCTB4MDEsIDB4MDEsIDB4MDgsIDB4MGEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4ODAsIDB4YzIsIDB4MGQsIDB4NzQsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgzMywgMHgwMywgMHgwYiwgMHgzMSwgMHgwMCwgMHg3YywgMHgwOCwgMHgwMCwgMHg3NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDlmLCAweGYwLCAweDAxLCAweDgwLCAweDgyLCAweGRiLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZmMsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MDAsIDB4ODgsIDB4MTgsIDB4MDAsIDB4NzUsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHgzMywgMHgwMywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMiwgMHgwMSwgMHg3MiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQ4LCAweDA4LCAweDAwLCAweDc1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NzAsIDB4MDgsIDB4MDAsIDB4NzUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHg3NCwgMHgzOCwgMHhhMiwgMHg3NSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAxLCAweDAzLCAweDgzLCAweDFiLCAweDAwLCAweDc4LCAweDA4LCAweGMwLCAweDc0LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YzIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4MCwgMHg4NywgMHhiNiwKKwkweDJmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4ODQsIDB4ZDIsCisJMHgzNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDg3LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4OWYsIDB4NzgsIDB4MDEsIDB4ODAsIDB4YzIsIDB4MjEsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwYSwgMHgwMywgMHg5ZiwgMHg5OSwgMHgwMSwgMHg2NCwgMHg4OCwgMHgxYiwgMHg4NywgMHhiYywKKwkweDAwLCAweDAwLCAweDE2LCAweDAzLCAweDlmLCAweDY4LCAweDAxLCAweDY0LCAweDg4LCAweDViLCAweDg2LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHhhNCwgMHgwMiwgMHhjMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweGE0LCAweGIyLCAweDViLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDIsIDB4NzgsIDB4MDksIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgxNywgMHgwMywgMHgwOCwgMHgwMSwgMHgwMCwgMHgwNCwgMHhlOCwgMHhhNSwgMHg3NSwgMHhiYywKKwkweDBmLCAweDAwLCAweDMzLCAweDAzLCAweDBiLCAweDAxLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDQsIDB4YTEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4OWIsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHg5ZiwgMHg5OCwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDlkLCAweDA1LCAweDA2LCAweGIxLCAweDAxLCAweDgwLCAweDgyLCAweDViLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzIsIDB4MDMsIDB4MGIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMiwgMHhkNCwgMHgwMSwgMHg4MCwgMHg5MiwgMHhmYiwgMHg2ZSwgMHhiYywKKwkweDE1LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MTYsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgxYywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI4LCAweDcyLCAweDYxLCAweDgwLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MDMsIDB4MDQsIDB4YTEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4OWIsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgyMSwgMHgwMywgMHgwNiwgMHhhOCwgMHgwMSwgMHg4MCwgMHg4MiwgMHg1YiwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDFlLCAweDAzLCAweDA0LCAweGE5LCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzEsIDB4MDMsIDB4MDQsIDB4YTksIDB4MDEsIDB4ODAsIDB4ODIsIDB4OWIsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzMSwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHg4MCwgMHhiYywKKwkweDEzLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzEsIDB4MDMsIDB4OWYsIDB4YTAsIDB4MDEsIDB4NzgsIDB4MjksIDB4MjEsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzMSwgMHgwMywgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHhhMCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDE1LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MmMsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMiwgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDI3LCAweDAzLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDYwLCAweDgwLCAweGJjLAorCTB4MDYsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MmMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4YjIsCisJMHgwMCwgMHhjMCwgMHgyOSwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDA2LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjksIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4NjAsIDB4ODAsIDB4YmMsCisJMHgwOSwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDJiLCAweDAzLCAweDA2LCAweDAzLCAweDAxLCAweDgwLCAweDEyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDcsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAyLCAweDAwLCAweDlkLCAweDA1LCAweDM4LCAweDAxLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDMsIDB4MDIsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4NWIsIDB4ODAsIDB4YmMsCisJMHgxZiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDFlLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDM0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDkyLCAweGQyLAorCTB4MGQsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDEwLCAweDAwLCAweDhhLCAweDExLCAweDJhLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDIwLCAweDE1LCAweGI4LAorCTB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4MCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgxZCwgMHgwMCwgMHg0OSwgMHgwMywgMHg4MCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhlMCwgMHgwMCwgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MWQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDE0LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YTgsIDB4MDUsIDB4MjgsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHgyYywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MzUsIDB4MDAsIDB4NTQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDgxLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgyYiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1YSwgMHgwMywgMHgxZCwgMHg0MSwgMHgwMiwgMHg1YywgMHhmOCwgMHgwMSwgMHg2OCwgMHhiNCwKKwkweDQxLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweDkxLAorCTB4MzUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg1OSwgMHhjMCwgMHg4NSwgMHhkNywKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDJjLCAweDAyLCAweDAwLCAweGE5LCAweGRiLCAweDg1LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4ZTEsIDB4MDIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NTQsIDB4MDIsIDB4YTQsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDY0LCAweDAzLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTEsIDB4MDAsIDB4NzgsIDB4MDEsIDB4NjAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgyZiwgMHgwMCwgMHg5MywgMHgwNSwgMHhkNywgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDY1LCAweDAzLCAweDA2LCAweGE5LCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NmQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3MCwgMHgwMywgMHgwNCwgMHhhOCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAyLCAweDA4LCAweDg5LCAweDliLCAweDkwLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDEsIDB4MDgsIDB4ODksIDB4OWIsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg3MCwgMHgwMywgMHg5ZiwgMHg4OCwgMHgwMSwgMHgwOCwgMHg4OSwgMHg5YiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAyLCAweDA0LCAweGY5LCAweGJhLCAweDZlLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4MDMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4YTQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgxOSwgMHg4MCwgMHg5MCwgMHgzNywKKwkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDAyLCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAorCTB4MzAsIDB4MDAsIDB4OTMsIDB4MDUsIDB4ZDcsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3MCwgMHgwMywgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDEyLCAweDcwLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MzEsIDB4MDAsIDB4OTMsIDB4MDUsIDB4ZDcsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDgsIDB4YzAsIDB4NzQsIDB4MDIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjMCwgMHg4MSwgMHhkMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDgwLCAweDAxLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDJiLCAweDAwLCAweDlkLCAweDA1LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODksIDB4NGQsIDB4ODEsIDB4ZDcsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHgyYywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4NjAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4OGQsIDB4MmYsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHg4MCwgMHgwMSwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MDMsIDB4MDQsIDB4MjAsIDB4MDEsIDB4ODAsIDB4NTIsIDB4MjAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDI1LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MjQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg5MywgMHgwMywgMHgwNCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxZSwgMHg4MCwgMHhlZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhjLCAweDAzLCAweGI3LCAweDAwLCAweDAwLCAweGQ4LCAweDBlLCAweGMwLCAweGVkLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGYsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4M2IsIDB4ZWUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgxZSwgMHgwMCwgMHhlZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweGQwLCAweDBlLCAweDAwLCAweGVlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODAsIDB4ZmMsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg5MywgMHgwMywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDkzLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweGIwLCAweDFlLCAweDAwLCAweGViLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ODYsIDB4Y2MsIDB4MDIsIDB4ODAsIDB4NmMsIDB4MzIsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDk3LCAweDAzLCAweDgwLCAweDAxLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAorCTB4MzUsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg5OSwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHhjNSwgMHgyYywgMHhiYywKKwkweDAwLCAweDAwLCAweDlhLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MTIsIDB4YzAsIDB4MmMsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg5NSwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweDg2LCAweGM4LCAweDA2LCAweGMwLCAweDJjLCAweDMyLAorCTB4MDgsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YzMsIDB4NDAsIDB4MDEsIDB4OTksCisJMHgwMCwgMHgwMCwgMHg5ZiwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDU1LCAweDAxLCAweDgwLCAweGIyLCAweDFiLCAweDJiLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDksIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEzLCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NTUsIDB4MDEsIDB4ODAsIDB4YjIsIDB4MWIsIDB4MmIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGFkLCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkMiwKKwkweDAwLCAweDAwLCAweGFkLCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4MzksCisJMHhiMCwgMHgwMywgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDIsIDB4OTksCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAyLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweGFhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MDMsIDB4OGIsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MTIsIDB4MDAsIDB4MmEsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzUsIDB4MDMsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjOCwgMHgwMywgMHg4NSwgMHgwMSwgMHgwMCwgMHg5YywgMHgxMiwgMHhjMCwgMHgyOSwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDEzLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwYywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDA2LCAweDMyLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDBkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweGI3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MTUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDA0LCAweDMyLAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHg3MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDFmLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweGUwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MTcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDFiLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxYywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDAwLCAweDMyLAorCTB4MTYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDFhLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxOSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDBjLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4ZmUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAzLCAweDY0LCAweDAyLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4ZmIsIDB4MDMsIDB4ODUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4OTAsIDB4YmEsCisJMHgyNSwgMHgyNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhmMywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YzMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg1MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDQzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4ODAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgzZiwgMHg4MCwgMHhmYywgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHg0YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAzLCAweDQwLCAweDM4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4MDEsIDB4MzAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgxMywgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxMiwgMHgwMCwgMHgyZCwgMHhiYywKKwkweDUwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4ZTQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MTIsIDB4MDAsIDB4MmQsIDB4M2EsCisJMHg0YywgMHgwMCwgMHgxYSwgMHgwNCwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHgyZCwgMHhiYywKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGFlLCAweDBkLCAweDAyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4NiwgMHhjYywgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhhLCAweDg2LCAweGNjLCAweDA3LCAweDgwLCAweDAwLCAweDNhLAorCTB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI5LCAweDQwLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MjYsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHg5NywgMHhiNiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDc4LCAweGU5LCAweGU1LCAweDAwLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4NDUsIDB4OTAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgyNCwgMHgwNCwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MiwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgwNCwgMHg4ZSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDI2LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGQyLAorCTB4MGUsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MGUsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhiOSwgMHgwNSwgMHgzNiwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDczLCAweDgwLCAweDk3LCAweDM0LAorCTB4MDksIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDBhLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4NzMsIDB4ODAsIDB4OTcsIDB4MzQsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweGZlLCAweGNhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzYiwgMHgwNCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDM5LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4M2IsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgzZSwgMHgwNCwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDNkLCAweDA0LCAweDEyLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MDIsIDB4MDAsIDB4MzksIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4MjQsIDB4MTcsIDB4YjgsCisJMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHg2NCwgMHgxNiwgMHgzOCwKKwkweDAwLCAweDAwLCAweDM5LCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDk3LCAweGJjLAorCTB4ZmUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHhmZSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMywgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NDQsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg0NywgMHgwNCwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDQ2LCAweDA0LCAweDEyLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDIsIDB4MDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDYsIDB4MDAsIDB4NTksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDksIDB4NjQsIDB4MTYsIDB4OTgsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDk3LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDkwLCAweDkyLAorCTB4MzMsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgxMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDM5LCAweDAwLCAweDc0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3ZiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDdmLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDkwLCAweDkyLAorCTB4NWEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4OTAsIDB4M2EsCisJMHgwZCwgMHgwMCwgMHg3YywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHg5OCwKKwkweDBkLCAweDAwLCAweDhlLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweGU0LCAweDE2LCAweDk4LAorCTB4MGQsIDB4MDAsIDB4OTcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4OTgsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGFkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDkwLCAweDlkLAorCTB4MDAsIDB4MDAsIDB4YjMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGM3LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4OTAsIDB4OWQsCisJMHgwMCwgMHgwMCwgMHhkOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGUxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDkwLCAweDlkLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGYzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDAwLCAweDkyLAorCTB4ZDgsIDB4MDAsIDB4ZjUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MGYsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZWQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MzksIDB4NDAsIDB4OTAsIDB4OTcsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYywgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGVmLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDBlLCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg1LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwOCwgMHgwMCwgMHgxNSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxZiwgMHgyNCwgMHgxNiwgMHg5OCwKKwkweDAwLCAweDAwLCAweDI3LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MGQsIDB4MDAsIDB4MzIsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4OTgsCisJMHgwMCwgMHgwMCwgMHgzMywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODksIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4NDUsIDB4OTAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDNmLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDAwLCAweGIwLAorCTB4MDIsIDB4MDAsIDB4ODAsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4YjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg2YiwgMHg0MSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGIwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4YjAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDIyLCAweDAwLCAweDJiLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4MDEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHgyYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweDM5LAorCTB4YjAsIDB4MDMsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHg5OSwKKwkweDAwLCAweDAwLCAweDkxLCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKKwkweDAyLCAweDAwLCAweDkxLCAweDA0LCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweDNiLCAweDQwLCAweGIwLCAweDMxLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MmIsIDB4YmMsCisJMHhmMSwgMHgwZiwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwZSwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDIsIDB4MDAsIDB4OTgsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4YjksCisJMHgwMCwgMHgwMCwgMHg5YiwgMHgwNCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHhiMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDNiLCAweDQwLCAweGIwLCAweDMzLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDBjLCAweDFiLCAweGU0LCAweGIwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiMiwKKwkweDFmLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDExLCAweDQwLCAweDAwLCAweDk5LAorCTB4MDAsIDB4MDAsIDB4YTAsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ZjgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweGZjLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODUsIDB4OTAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDA5LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDBmLCAweDgxLCAweGZjLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4NDIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg0MiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweDY0LCAweDkwLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4NzMsIDB4MDAsIDB4OTAsIDB4M2MsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YjYsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODUsIDB4OTAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MGYsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MGYsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4NSwgMHg5MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwZSwgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDkwLCAweDMyLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGNhLCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDg1LCAweDkwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDkwLCAweDMyLAorCTB4MDYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwZiwgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDBmLCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NDIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHg2NCwgMHg5MCwgMHhiNSwKKwkweDAwLCAweDAwLCAweGQ1LCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDQyLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHg5MCwgMHgzMiwKKwkweDEyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4NDAsIDB4OTAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHhkYiwgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4NSwgMHg5MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0MiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweDY0LCAweDkwLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4ZTUsIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NDIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDkwLCAweDMyLAorCTB4MTEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgxZiwgMHg0MCwgMHg5MCwgMHg5YywKKwkweDAwLCAweDAwLCAweGViLCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDBlLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MCwgMHg5MCwgMHgzNywKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDBmLCAweGE0LCAweDk3LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGUsIDB4ODAsIDB4ZWUsIDB4OWQsCisJMHgwMCwgMHgwMCwgMHhmMiwgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MWUsIDB4NDAsIDB4OTAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgyMiwgMHgwMCwgMHg5MCwgMHgzNywKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDg2LCAweGMwLCAweDA3LCAweDQwLCAweDkwLCAweDkyLAorCTB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4MzgsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGZhLCAweDA0LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDI0LCAweGY2LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4M2YsIDB4ODAsIDB4ZmMsIDB4MzQsCisJMHg0MCwgMHg4MCwgMHhmYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4NzksIDB4MDEsIDB4MDAsIDB4MzQsCisJMHgwMiwgMHgwMCwgMHhmYywgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDBjLCAweGFiLCAweGU0LCAweGIwLCAweDMyLAorCTB4MWYsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTEsIDB4NDAsIDB4MDAsIDB4OTksCisJMHhlYSwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0ZCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDBmLCAweDAwLCAweDE1LCAweDMyLAorCTB4MDAsIDB4ZmUsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHhmMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDk4LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MGIsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4NGYsIDB4ODAsIDB4ZmMsIDB4OTUsCisJMHgzNiwgMHgyMywgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0ZCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDBmLCAweDgwLCAweDE0LCAweDMyLAorCTB4MDAsIDB4ZjgsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHhjMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDk4LCAweDI3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4NGYsIDB4ODAsIDB4ZmMsIDB4MzQsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg4ZiwgMHg0ZCwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDYwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4N2EsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhhOSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MTIsIDB4MDUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4OTAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg2ZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDAwLCAweDAwLCAweDE0LCAweDA1LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweDkwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4NWYsIDB4ODAsIDB4ZmMsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDE3LCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDQwLCAweDkwLCAweGIwLAorCTB4ODAsIDB4MDEsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OGYsIDB4OGQsIDB4ZmMsIDB4OTEsCisJMHgwMCwgMHgwMCwgMHgxOSwgMHgwNSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHg5MCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDFhLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDdmLCAweDgwLCAweGZjLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4N2YsIDB4ODAsIDB4ZmMsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgxYywgMHgwNSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDFkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDhmLCAweDgwLCAweGZjLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OGYsIDB4ODAsIDB4ZmMsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgyMCwgMHgwNSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMiwgMHg0MCwgMHg5MCwgMHhiNiwKKwkweGYxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDBlLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MWYsIDB4ODEsIDB4ZmMsIDB4OTUsCisJMHgwZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwZSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDFmLCAweDgxLCAweGZjLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MDIsIDB4ZjUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMywgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwMCwgMHhmNSwgMHhiZCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDI1LCAweGY1LCAweGI1LAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MWYsIDB4MjQsIDB4MTYsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxZiwgMHgwMCwgMHhmNSwgMHg5YywKKwkweDgwLCAweDAxLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweGZjLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MmIsIDB4MDUsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4ZjUsIDB4M2EsCisJMHg4YywgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYywgMHgwMywgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDUsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhlNCwgMHg2ZSwgMHgzYSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4NjksIDB4MDUsIDB4MTcsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwNiwgMHgwMCwgMHgzZiwgMHgwNSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4ZDMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4MzYsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDQ2LCAweDA1LCAweDA0LCAweDE5LCAweDg2LCAweDgwLCAweDAyLCAweDgwLCAweDZjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMxLCAweDA4LCAweDAwLCAweDA0LCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MTUsIDB4ODYsIDB4MmMsIDB4MDksIDB4YzAsIDB4NmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwNSwgMHgyMiwgMHgxZCwgMHg4NiwgMHhjOCwgMHgwNiwgMHhjMCwgMHg5MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDRjLCAweDA1LCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDQwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMyLCAweDQ4LCAweDAwLCAweDA0LCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MTYsIDB4ODYsIDB4MmMsIDB4MDksIDB4YzAsIDB4NmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwNSwgMHgyMSwgMHgxZCwgMHg4NiwgMHhjOCwgMHgwNiwgMHhjMCwgMHg5MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwNSwgMHgwNCwgMHgwMiwgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweGQzLCAweDBlLCAweDAwLCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGRjLAorCTB4MDAsIDB4MDAsIDB4NTIsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwNSwgMHg4MSwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MCwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDU0LCAweDA1LCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDQwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NTQsIDB4MDUsIDB4ODIsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4ODAsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4NiwgMHhjOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDBhLCAweDMyLAorCTB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweGMwLCAweDY5LCAweDA1LCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweGNkLCAweDNlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODYsIDB4MDQsIDB4MTksIDB4ODAsIDB4NmMsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHgwYywgMHhmNywgMHg3ZiwgMHg5MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDEwLCAweDg2LCAweDgwLCAweDcyLCAweDgyLCAweDZjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODYsIDB4YTgsIDB4NDIsIDB4ODAsIDB4NmMsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHg3OCwgMHgwNSwgMHgxMiwgMHgwMCwgMHg3MCwgMHgzOCwgMHgwMiwgMHgwMCwgMHg3YywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDNjLCAweDAyLCAweDAwLCAweDdlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg3ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDZiLCAweDA1LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweGIyLCAweDgyLCAweDJhLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwNiwgMHgwMCwgMHgzZiwgMHgwNSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDAwLCAweDAwLCAweDM5LCAweDA1LCAweDA0LCAweDAzLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4MmYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHhhMiwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDdhLCAweDA1LCAweDA0LCAweDAzLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ODMsIDB4MDUsIDB4MDAsIDB4MTAsIDB4ODYsIDB4YzgsIDB4NDYsIDB4ODAsIDB4MmEsIDB4OTYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjOCwgMHg0NiwgMHg4MCwgMHgyYSwgMHgzNiwKKwkweDAwLCAweDAwLCAweDdlLCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDMsIDB4MDAsIDB4ODAsIDB4MDUsIDB4MjIsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4OGQsIDB4MmYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHgwMCwgMHgxOCwgMHg4NiwgMHhjOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDgzLCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzIsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODAsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHhjMCwgMHhkMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgzNiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDNjLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHgyZiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweGEyLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MDUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4YzAsIDB4ZWQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwZSwgMHg4MCwgMHgwMiwgMHgzMiwKKwkweDQwLCAweDdlLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDBlLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MGUsIDB4ODAsIDB4MDcsIDB4MzIsCisJMHg2NCwgMHgwMCwgMHg4ZiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwZSwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDY0LCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGVkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MGUsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHhhMCwgMHg4YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwZSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDBlLCAweGMwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MGUsIDB4ODAsIDB4MDIsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgzMywgMHg3YiwgMHhlYywgMHgzOSwKKwkweDFlLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4NmUsIDB4YzAsIDB4ZWMsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZSwgMHhjMCwgMHhlZCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxYywgMHgwMSwgMHg4MCwgMHg1MiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDJiLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAorCTB4M2QsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCisJMHgzNSwgMHgwMCwgMHg5YywgMHgwNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKKwkweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MmIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODksIDB4Y2QsIDB4ODEsIDB4M2MsCisJMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgxYywgMHgwMSwgMHgxNCwgMHg1OSwgMHhlNCwgMHg2ZSwgMHhkOSwKKwkweGE0LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDgyLCAweGNkLCAweDgxLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg2NSwgMHgwMSwgMHg4MCwgMHhhMiwgMHhkYiwgMHgyYywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDE4LCAweDAxLCAweDgwLCAweDkyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MmIsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDE4LCAweDAxLCAweDE0LCAweDc5LCAweGUwLCAweDZlLCAweGQ5LAorCTB4YTQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4M2EsCisJMHhlMSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGVhLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4ZjMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhmYywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDA1LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MGUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgxNywgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MjksIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgzMiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDNiLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NDQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg0ZCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDU2LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NWYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg2OCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDcxLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4N2EsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg4MywgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDhjLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4OTUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGE3LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4YjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhiOSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGMyLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4Y2IsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhkNCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGRkLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4ZTYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhlZiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGY4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MDEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgwYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDEzLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MWMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgyNSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDJlLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MzcsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg0MCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDQ5LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NTcsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDUyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NTcsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg1YywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDYxLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NjYsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg2YiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDcwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NzUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg3YSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDdmLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4ODQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg4OSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDhlLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4OTMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg5OCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDlkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3MSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDNiLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NzksIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4OCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZGEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZGEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg2LCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdkLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdkLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDBjLCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZTksIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZTksIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGI4LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YzEsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YzEsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDgxLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDgxLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDc2LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NzYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NzYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjOSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGIwLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NGIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NGIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGIwLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDUxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDY4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDY0LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NjQsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NjQsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDdlLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhmLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEwLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEwLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhiNSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGI1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3NSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDc1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjYywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4OCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4OCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MmEsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MmEsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgzMSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGFiLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGYzLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGI2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhiNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGMzLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YzMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlNSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGVhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhlYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGMyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhmOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDJlLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwZiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDcsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDIyLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlZiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGVmLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgxOCwgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHg5OSwKKwkweDA4LCAweDAwLCAweDlkLCAweDAzLCAweDAwLCAweDE4LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDk5LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwOCwgMHgwMCwgMHhhNywgMHgwNywgMHgxZCwgMHgxOSwgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHhiOSwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDgsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4OTksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4NmUsIDB4MzUsCisJMHg1NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAorCTB4YjQsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHhjMCwgMHgyYywgMHgzNywKKwkweGI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweDhkLCAweDk3LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4YmYsIDB4OTcsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhiNywgMHgwNywgMHhiNywgMHgxMCwgMHgwMiwgMHhlMCwgMHgwNiwgMHg4MCwgMHg5NywgMHhiMiwKKwkweDAwLCAweDAwLCAweGJhLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGYyLCAweDgwLCAweGZjLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YmIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ZmYsIDB4ODAsIDB4ZmMsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhiYywgMHgwNywgMHg5ZiwgMHg5OSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgxYiwgMHhlZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweGUwLCAweDBlLCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAyLCAweDFjLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4NDAsIDB4MDAsIDB4YzEsIDB4MDcsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4OTEsIDB4YmMsCisJMHgwMCwgMHg0MCwgMHhjMiwgMHgwNywgMHgwMCwgMHgxOCwgMHgwMiwgMHhlMCwgMHhhNiwgMHhjZCwgMHgyYywgMHg5MiwKKwkweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDksIDB4ODAsIDB4MDMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNSwgMHgwNywgMHg4MCwgMHhkNywgMHgwMSwgMHg4MCwgMHgzMiwgMHhjMCwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ5LCAweDAwLCAweDkyLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MTgsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMiwgMHgyNCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDI4LCAweDA5LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZDMsIDB4MDcsIDB4ODAsIDB4MGUsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YjYsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhlYywgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweDAxLCAweDkyLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4Y2YsIDB4MDcsIDB4ODAsIDB4ZDYsIDB4MDEsIDB4ODAsIDB4NDIsIDB4YzAsIDB4NmUsIDB4YjYsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhhNiwgMHhjZCwgMHg5MSwgMHgzMiwKKwkweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDAyLCAweGU4LCAweDA2LCAweDAwLCAweDM2LCAweDMyLAorCTB4MjgsIDB4MDAsIDB4ZGQsIDB4MDcsIDB4MDAsIDB4MzIsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHgwMSwgMHgwMCwgMHgxYywgMHhkOSwgMHhjMSwgMHg5MSwgMHgzNCwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDkxLCAweDMyLAorCTB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgzNCwgMHgwMCwgMHhkZCwgMHgwNywgMHgwMCwgMHgzMiwgMHgwMiwgMHhlYywgMHgwNiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDMyLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODksIDB4MGQsIDB4OTIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhkOSwgMHgwNywgMHg4MCwgMHhkNiwgMHgwMSwgMHg4MCwgMHg0MiwgMHhjMCwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDkxLCAweDMyLAorCTB4MDQsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxNCwgMHgwMCwgMHhkZCwgMHgwNywgMHgwMCwgMHgzMiwgMHgwMiwgMHhlYywgMHgwNiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweDAxLCAweDAwLCAweDFjLCAweGQ5LCAweGMxLCAweDkxLCAweDM0LAorCTB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4OTEsIDB4MzIsCisJMHgwNCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHhlOCwgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDIwLCAweDAwLCAweGRkLCAweDA3LCAweDAwLCAweDMyLCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4ZWMsIDB4ODYsIDB4Y2QsIDB4OTEsIDB4M2EsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMiwgMHhlOCwgMHg4NiwgMHgyNCwgMHg5MCwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAyLCAweGUwLCAweDk2LCAweDI0LCAweDE0LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMywgMHgwNywgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4MDAsIDB4MmQsIDB4MzcsCisJMHgwMCwgMHhjZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDk5LCAweGMwLCAweDJjLCAweDM3LAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4OTcsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4NywgMHhiZiwgMHg5NywgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4YzksIDB4MDEsIDB4ODAsIDB4MDIsIDB4ODAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHg4MywgMHgzMiwKKwkweDAxLCAweDAwLCAweGFhLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4ZjksIDB4MDcsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDJjLCAweDAwLCAweDlkLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDA4LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NTAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHg4MCwgMHhkNywgMHgwMSwgMHgyYywgMHgwOSwgMHhjMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGQ3LCAweDAxLCAweGVjLCAweDA2LCAweGMwLCAweDZlLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweGMwLCAweDkyLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwNCwgMHgwNiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgzYiwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDBhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4YTAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDExLCAweDAwLCAweDc4LCAweDAxLCAweDYwLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MGYsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDFlLCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweDA4LCAweDgwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDIsIDB4ODAsIDB4MmMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MWYsIDB4ODAsIDB4ZmYsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgxNywgMHgwOCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDNiLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgxNCwgMHgwOCwgMHg4MCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDEyLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhhMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJkLCAweGJjLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4MDAsIDB4NzgsIDB4ZTEsIDB4NmUsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDc4LCAweGNhLCAweGU5LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4MzIsCisJMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgyZiwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAyLCAweDQ0LCAweGUyLCAweDI1LCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4OTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHgzYywKKwkweDAwLCAweDAwLCAweDgyLCAweDA4LCAweDA0LCAweGIwLCAweDAwLCAweGUwLCAweGQ2LCAweDIwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg1MCwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhkOCwgMHhlMCwgMHg4MywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlMiwgMHhlMCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDQxLCAweDA4LCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjksIDB4ODEsIDB4ODMsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlMiwgMHhlNSwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDM5LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NWMsIDB4MTAsIDB4MDAsIDB4YTAsIDB4MDEsIDB4NTAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDNiLCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgwOCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4M2EsIDB4MDgsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg0NiwgMHgwOCwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDQ1LCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGYwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MTgsIDB4ODEsIDB4ODMsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDA4LCAweGEwLCAweDI4LCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweGNkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhmOSwgMHg4MSwgMHg4MywgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweGUyLCAweGU1LCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZDgsIDB4ZTAsIDB4ODYsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHg1YiwgMHgxMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDU4LCAweDA4LCAweDFkLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4NWMsIDB4MDgsIDB4MDQsIDB4YTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDkwLCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4MDgsIDB4MDAsIDB4OTgsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODQsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg2MiwgMHgwOCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDVmLCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHg2MiwgMHgwOCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NWUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhlMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGU4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4ZjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2YSwgMHgwOCwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDA4LCAweGEwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweGNkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDkwLCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4NDAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg3NCwgMHgwOCwgMHgyYSwgMHg1ZCwgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHhlZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDcxLCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHg3NCwgMHgwOCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4OTQsCisJMHgxMCwgMHgwNCwgMHg3NywgMHgwOCwgMHgzNywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHhiMSwKKwkweDNiLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxYywgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHgzOSwKKwkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4N2QsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg3YywgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDAwLCAweDAzLCAweGJjLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4NjcsIDB4YTEsIDB4NzMsIDB4MzksCisJMHgzMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHhhMiwgMHg4ZCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4ZTAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgyYSwgMHgwMCwgMHgwMCwgMHg3OCwgMHhmOSwgMHg4MSwgMHg4MywgMHhiNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweGUyLCAweGU1LCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgwOCwgMHgxZCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgxOCwgMHg4MSwgMHg4MywgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhkLCAweDA4LCAweDA0LCAweDA2LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwOCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDkwLCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NWMsIDB4MTAsIDB4MDAsIDB4YTAsIDB4MDEsIDB4NTAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDkyLCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhhZSwgMHgwOCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDk1LCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweGFjLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDYxLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDgsIDB4ODAsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4NmUsIDB4YjIsCisJMHg0MCwgMHgwMCwgMHg5YywgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHg5MCwgMHhiYywKKwkweDgwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OWMsIDB4MDgsIDB4MDIsIDB4YjAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MWIsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDA3LCAweDAxLCAweDgwLCAweDEyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHhkNiwgMHgwMSwgMHg4MCwgMHg1MiwgMHhjMCwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweGVjLCAweDU2LCAweGMwLCAweDZlLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MDAsIDB4ODYsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNywgMHgwMSwgMHg3OCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg2LCAweDMyLAorCTB4NDAsIDB4MDAsIDB4YWUsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhhMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAxLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweGZhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MTgsIDB4MjAsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhiMCwgMHgwMCwgMHgzYywgMHg4OCwgMHhkYiwgMHg4MywgMHhiZSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDAxLCAweDc4LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjcsIDB4MjAsIDB4NzgsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg3OCwgMHgwMSwgMHhlMCwgMHhmNiwgMHgyMCwgMHg4NiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDI1LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY4LCAweDYwLCAweDgwLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyZSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4MDAsIDB4MDMsIDB4YmMsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgxOCwgMHgwMCwgMHg4MCwgMHg2NywgMHhhMSwgMHg3MywgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDVjLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweGVlLCAweDMyLAorCTB4MzAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4YTIsIDB4OGQsIDB4MmMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YzIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhiOCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGJiLCAweDA4LCAweDAwLCAweGQwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YzIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHhiYiwgMHgwOCwgMHgwNCwgMHhkMSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweGVjLCAweDI2LCAweGMwLCAweDZlLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4YmQsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjMCwgMHgwOCwgMHgwMCwgMHhjOCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4YzAsIDB4MDgsIDB4MDQsIDB4YzksIDB4MDEsIDB4ODAsIDB4MDIsIDB4ODAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHgzNCwKKwkweDEwLCAweDAwLCAweGFhLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDEyLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YzcsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDFmLCAweDgwLCAweGZmLCAweDlhLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NzksIDB4MjEsIDB4MmYsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhmOSwgMHg4MSwgMHg5NywgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAyLCAweDQ0LCAweGUyLCAweDI1LCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDEsIDB4NTAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMSwgMHg2MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAyLCAweDBjLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDEsIDB4MWMsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg3NywgMHgxMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4NWMsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ODAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA4LCAweDIzLCAweDI5LCAweDAyLCAweDA0LCAweDA5LCAweDgwLCAweDZlLCAweGIyLAorCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwOCwgMHgwMCwgMHhkOCwgMHgwOCwgMHgxZCwgMHgxYywgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHhiOSwKKwkweDAwLCAweDAwLCAweGQ4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MDgsIDB4OWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDcsIDB4YzAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg5MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweGVlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4YzAsIDB4ODUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg4MCwgMHgwNywgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDgwLCAweDg3LCAweDhkLCAweDg1LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUzLCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgzMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHhhMiwgMHg4ZCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MTIsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMSwgMHg3OCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweGRjLCAweGQxLCAweDAxLCAweGU4LCAweDA2LCAweDgwLCAweDk3LCAweDkyLAorCTB4MTIsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDRmLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDA5LCAweDQwLCAweDgxLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MGUsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MjAsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDMwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgzNSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgxMiwgMHg4MSwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhmNiwgMHgwOCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDQ3LCAweDEwLCAweDAwLCAweDk4LCAweDAxLCAweDI4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHgwOCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGZmLCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDQyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHgyZiwgMHhkMiwKKwkweDAwLCAweDAwLCAweGZmLCAweDA4LCAweDA4LCAweDViLCAweDAxLCAweGVjLCAweDA2LCAweGZiLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgzNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDA2LCAweDA5LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YzIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwZCwgMHgwOSwgMHgwOCwgMHhjOSwgMHgwMSwgMHhlOCwgMHgwNiwgMHhiYiwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MzIsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgwMSwgMHhmMiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MGQsIDB4MDksIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDBkLCAweDA5LCAweDA4LCAweGQxLCAweDAxLCAweGU4LCAweDA2LCAweGJiLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgzMiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweGMwLCAweDAxLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDE3LCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgxMywgMHgwOSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMiwgMHgwMCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDE2LCAweDA5LCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweDA4LCAweDgwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDIsIDB4ODAsIDB4MmMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxZiwgMHg4MCwgMHhmZiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDlkLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDcyLCAweGUwLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgyZiwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDk3LCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4NDQsIDB4ZTIsIDB4MjUsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRiLCAweDc5LCAweDAxLCAweDYwLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NWMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDFmLCAweDA5LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgzMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHhhMiwgMHg4ZCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDA3LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ZGEsIDB4NWMsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ODAsIDB4ZWUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHg5ZiwgMHg0MSwgMHgwMSwgMHg4MCwgMHg1MiwgMHgyMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDJkLCAweDA5LCAweDlmLCAweDk4LCAweDAxLCAweDgwLCAweDUyLCAweDIwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweGMwLCAweDJiLCAweDA5LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4YWEsIDB4MDcsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDNhLCAweDAwLCAweGFhLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg0NywgMHgxMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHgyOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ZDUsIDB4NDEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTEsIDB4MDAsIDB4NzgsIDB4MDEsIDB4NjAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAyLCAweDc4LCAweDA5LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzUsIDB4MDksIDB4MDQsIDB4ZDQsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOSwgMHg4MCwgMHg5NywgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDAxLCAweGUwLCAweGU2LCAweDI1LCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHgzOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDkwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDgwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDIsIDB4MDAsIDB4M2YsIDB4MDksIDB4MDQsIDB4YjksIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0MSwgMHgwOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4MDksIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4ZmMsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg0NCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweGY1LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDIsIDB4YmQsIDB4OTcsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5OSwgMHhiMSwgMHhmMiwgMHhjMCwgMHg3YywgMHgzMCwKKwkweDAwLCAweGMwLCAweDQ4LCAweDA5LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1MCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDA3LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4YTIsIDB4MDAsIDB4MmQsIDB4MzcsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDk5LCAweGUxLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NGQsIDB4MDksIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MTksIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMiwgMHgwMCwgMHg1OSwgMHgwOSwgMHgwNCwgMHhiOSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGQ2LCAweDAxLCAweDAwLCAweDc4LCAweGM5LCAweGNkLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4MDksIDB4YjYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHg4MCwgMHg5NywgMHhiMiwKKwkweDAwLCAweDAwLCAweDUzLCAweDA5LCAweDEyLCAweDA4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NTQsIDB4MDksIDB4MTIsIDB4MTgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1NSwgMHgwOSwgMHgxMiwgMHgxMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDU0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDJiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwZSwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgwMCwgMHg5NCwKKwkweDAwLCAweDIwLCAweDAwLCAweDRjLCAweGQ2LCAweDAxLCAweDAwLCAweDc4LCAweGM5LCAweGNkLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NWEsIDB4MDksIDB4YjYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHg4MCwgMHg5NywgMHhiMiwKKwkweDAwLCAweDAwLCAweDVjLCAweDA5LCAweDEyLCAweDA4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NWQsIDB4MDksIDB4MTIsIDB4MzAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1ZSwgMHgwOSwgMHgxMiwgMHgzOCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVmLCAweDA5LCAweDEyLCAweDQwLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MDksIDB4MTIsIDB4NDgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2MSwgMHgwOSwgMHgxMiwgMHgxMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDYyLCAweDA5LCAweDEyLCAweDE4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4MDksIDB4MTIsIDB4MjAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwOSwgMHgxMiwgMHgyOCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDU0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDJiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMywgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwZSwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NmIsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4ODAsIDB4M2QsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDZlLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDUzLCAweDYwLCAweDNkLCAweGIzLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCisJMHg2YSwgMHgwOSwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHg3NCwgMHgwOSwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MTQsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDJjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4N2QsIDB4MDksIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgyOSwgMHgwMCwgMHhhMiwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MmMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDksIDB4YzAsIDB4ODUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDIzLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4M2MsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDJjLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDA5LCAweGMwLCAweDg1LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg4YywgMHgwOSwgMHgzOCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhjLCAweDA5LCAweDFlLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OWMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhmLCAweDA5LCAweDEyLCAweDAxLCAweDAwLCAweDYwLCAweDA4LCAweDQwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4ODIsIDB4OWMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweGMwLCAweDk5LCAweDA5LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMiwgMHgwMCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDQwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MDAsIDB4ODYsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAxLCAweDBlLCAweDAwLCAweDMwLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweGZhLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDksIDB4MzgsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ZjgsIDB4MDEsIDB4MGIsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwOSwgMHgwMiwgMHgwZCwgMHgwMiwgMHg4MCwgMHhhMiwgMHg1YiwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGM4LCAweGMxLCAweDgyLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzYiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGE3LCAweDA5LCAweDI3LCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZTgsIDB4YzAsIDB4ODIsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKKwkweDA4LCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDE4LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhYiwgMHgwOSwgMHgyMywgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDksIDB4MWQsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweGIwLCAweDA5LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDEwLCAweDAwLCAweGI2LCAweDA5LCAweDJjLCAweDMwLCAweDAwLCAweDAwLCAweDE3LCAweGUwLCAweDJjLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4YjgsIDB4MDksIDB4OGUsIDB4MzksIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhiOCwgMHgwOSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NywgMHg5MiwKKwkweDAwLCAweDAwLCAweGI4LCAweDA5LCAweDhlLCAweDM5LCAweDAwLCAweDAwLCAweGI3LCAweGMxLCAweDgyLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHgwOSwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4YzAsIDB4MDksIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YjgsIDB4MDksIDB4OWYsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGM4LCAweDA5LCAweDFlLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OWMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweGE4LCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgzYiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4Y2UsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWMsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDYsIDB4YzAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MmMsIDB4MTAsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDksIDB4YzAsIDB4ODUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHhkMiwgMHgwMSwgMHgwMCwgMHg5NCwgMHgxZSwgMHg0MCwgMHhlOSwgMHg5YSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhlZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NTEsIDB4MDEsIDB4ODAsIDB4MDIsIDB4ODAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMSwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTQsIDB4MDksIDB4MWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhlMSwgMHgwOSwgMHg5ZSwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MmEsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHgzOSwKKwkweGE0LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwYywgMHgwMCwgMHhlYiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweGViLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA4LCAweDAwLCAweDAwLCAweDkyLAorCTB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjUsIDB4MGEsIDB4MzgsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDgsIDB4ODAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgwYSwgMHgwNCwgMHgyOCwgMHgwMSwgMHgwNCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA4LCAweDUwLCAweDAxLCAweDA0LCAweGE4LCAweDViLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDBhLCAweDBhLCAweDA4LCAweDAxLCAweDAwLCAweDI4LCAweDE4LCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4YTYsIDB4MjAsIDB4MDAsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweGMwLCAweGZiLCAweDA5LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgzZCwgMHgwMCwgMHgwYywgMHgwNywgMHg4MCwgMHg4MywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDgsIDB4MGEsIDB4MDQsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHgzYSwKKwkweDAwLCAweGMwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDZjLCAweDE4LCAweDIwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwZiwgMHgwYSwgMHgwMCwgMHgzOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDE4LCAweDIwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgxMSwgMHgwYSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg2OCwgMHg2MCwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDFhLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDE4LCAweDIwLCAweDAwLCAweDljLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgxNCwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NzAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg2MCwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODAsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHhhMCwgMHgwZCwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4MGEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgxZiwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhhMCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODAsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHhhMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4NDAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgyNywgMHgwYSwgMHgwMCwgMHgxOCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDJhLCAweDBhLCAweDAwLCAweDUwLCAweDAxLCAweDNjLCAweGE4LCAweDViLCAweDgwLCAweDljLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwYSwgMHgzZSwgMHg1MSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgxYiwgMHg4MCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweGY4LCAweGYyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg4NywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MGYsIDB4NjAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg3YiwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzYSwgMHgwYSwgMHgwNCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM5LCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZiwgMHgwMCwgMHgwMCwgMHhhNCwgMHhhOCwgMHg2MCwgMHg4YSwgMHgzYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4YzAsIDB4M2UsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4MDAsIDB4MDAsIDB4YTQsIDB4YTgsIDB4NjAsIDB4OGEsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4YTgsIDB4MDEsIDB4MjAsIDB4OTksIDB4MjIsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMiwgMHg4MCwgMHg4MiwgMHgxYiwgMHg5MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDQyLCAweDBhLCAweDJmLCAweDIwLCAweDAxLCAweGUwLCAweDk2LCAweDIyLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg0YSwgMHgwYSwgMHgxZiwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDQ1LCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NGEsIDB4MGEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4ZjYsIDB4NjAsIDB4ODAsIDB4OWMsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg3OCwgMHgzOSwgMHg5YSwgMHhmZSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwOCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHg0MCwgMHgwMiwgMHgxNCwgMHgzOSwgMHg5YSwgMHhmZSwgMHhkOCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDY4LCAweDEyLCAweDlhLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGEsIDB4MmEsIDB4YTksIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4OTIsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDRmLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4NGIsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NTIsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHg2MSwgMHgwYSwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDgyLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDE4LCAweDAwLCAweDVhLCAweDBhLCAweDJlLCAweDQ5LCAweDAxLCAweGUwLCAweGU2LCAweGEwLCAweDgyLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4NWIsIDB4MGEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4ZWMsIDB4NzYsIDB4MDAsIDB4MDAsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDIwLCAweDgwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAorCTB4MWIsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwYywgMHgwMCwgMHhhMSwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg4NSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDMwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg5ZSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHg4MCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDY3LCAweDBhLCAweDBiLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4MGEsIDB4M2QsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHgwYSwgMHgzNCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHg4MSwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg3MiwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDJhLCAweDAwLCAweDc4LCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3NSwgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDc4LCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3OCwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4NSwgMHhiYywKKwkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4OWUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4ODAsIDB4ODUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDMxLCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OWIsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHhhMCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNlLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4ODYsIDB4MGEsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhmLCAweDBhLCAweDNmLCAweDAwLCAweDAwLCAweDNjLCAweDA4LCAweDQwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGYsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHgwMCwgMHgwMCwgMHhmOCwgMHhmMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweGVjLCAweDA2LCAweGMwLCAweGVlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhkOCwgMHhhMCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZDgsIDB4YTAsIDB4ODEsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhkOCwgMHhlMCwgMHg4MywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OWIsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMiwgMHhjMCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGFlLCAweDBhLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwYSwgMHgyOCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGE1LCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MGEsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhhNSwgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweGE1LCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGEsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHgzYywKKwkweDAwLCAweDAwLCAweDNjLCAweDBlLCAweGRhLCAweDViLCAweDAxLCAweGVjLCAweDA2LCAweDQwLCAweGVkLCAweGYyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhhYywgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YTcsIDB4MGEsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHhmYSwKKwkweDAwLCAweDAwLCAweDkwLCAweDBhLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDllLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhiYywgMHgwYSwgMHgyOCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGJhLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YjYsIDB4MGEsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweGJhLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4YjgsIDB4MGEsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHgzYywKKwkweDAwLCAweDAwLCAweDNjLCAweDBlLCAweGRhLCAweDViLCAweDAxLCAweGVjLCAweDA2LCAweDQwLCAweGVkLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZTAsIDB4MGEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjMCwgMHgwYSwgMHgwNCwgMHgyMSwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGFmLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweDA4LCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGM2LCAweDBhLCAweDJhLCAweDExLCAweDAwLCAweGUwLCAweGQ2LCAweGUwLCAweDg2LCAweGJhLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHhjNiwgMHgwYSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweGMyLCAweDBhLCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDE4LCAweDAwLCAweDg4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDgsIDB4MDAsIDB4Y2EsIDB4MGEsIDB4MjMsIDB4MTksIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4YjksCisJMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGNlLCAweDBhLCAweDFkLCAweDE4LCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg0LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4Y2UsIDB4MGEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHhkMywgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg4OCwgMHhiYywKKwkweDAwLCAweDAwLCAweGQyLCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NzgsIDB4MTksIDB4MjAsIDB4NmUsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHhhNSwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ODgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlNCwgMHgwYSwgMHgwNCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweGMwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZTUsIDB4MGEsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGVmLCAweDBhLCAweDI4LCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhlYSwgMHgwYSwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGVlLCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhlYywgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDNjLCAweDBlLCAweGRhLCAweDViLCAweDAxLCAweGVjLCAweDA2LCAweDQwLCAweGVkLCAweGYyLAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4ZGYsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhmMywgMHgwYSwgMHgzZCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGYzLCAweDBhLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhjYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MSwgMHgyZiwgMHhmNSwKKwkweDA4LCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDE4LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhmOCwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZmQsIDB4MGEsIDB4MjksIDB4MDgsIDB4MDEsIDB4ZTQsIDB4MDYsIDB4YzAsIDB4MmQsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMiwgMHgwYiwgMHgxZCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAyLCAweDBiLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweGZmLCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHgwMSwgMHgwYiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweGZlLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweDljLAorCTB4MmEsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjNywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweDA1LCAweDBiLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgxLCAweGJjLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OWIsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHhhMCwgMHg4MiwgMHhiYywKKwkweDI1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4YTksIDB4NjAsIDB4ODAsIDB4ZDksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweGMwLCAweDE1LCAweDBiLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4OWMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweDMxLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDIwLCAweDBiLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTgsIDB4NjAsIDB4ODAsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwOCwgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDNiLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA4LCAweDgwLCAweDgyLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MjEsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDIwLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MjYsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4NjgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGFmLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4MTcsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MGIsIDB4M2QsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgwYiwgMHgzNCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHg4MSwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDgsIDB4ODAsIDB4ODYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgzYywgMHgwYiwgMHgwNCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiYywKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4M2EsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MzgsIDB4ODAsIDB4ODcsIDB4ZjUsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhNSwgMHgwMiwgMHgyMywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDMyLCAweDgwLCAweDJmLCAweDM1LAorCTB4M2MsIDB4MDAsIDB4YTUsIDB4MDIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4M2YsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMSwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDQxLCAweDBiLCAweDEyLCAweDAxLCAweDAwLCAweDYwLCAweDA4LCAweDQwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4ODIsIDB4NGIsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4YTgsIDB4OGQsIDB4ODAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwOCwgMHgwMCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDIwLCAweDA4LCAweGMwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4ODAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweGMwLCAweDVjLCAweDBiLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4YTgsIDB4OGQsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDUzLCAweDBiLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGIsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg1MywgMHgwYiwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDUzLCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4MGIsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgzOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDgxLCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZTAsIDB4MmMsIDB4MzksCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg2YSwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YzMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHgwYiwgMHgxZCwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDcxLCAweDBiLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3MSwgMHgwYiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweDc0LCAweDBiLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweGNhLCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg3YSwgMHgwYiwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDdlLCAweDBiLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHg3YywgMHgwYiwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDg2LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MGEsIDB4MTEsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDg3LCAweDBiLCAweDMzLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ODcsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4NzIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4NywgMHgwYiwgMHg5ZiwgMHhmMCwgMHgwMSwgMHg4MCwgMHg4MiwgMHhkYiwgMHg4NywgMHhiYywKKwkweDAwLCAweDAwLCAweDg3LCAweDBiLCAweDlmLCAweGY4LCAweDAxLCAweDgwLCAweDIyLCAweDIxLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NywgMHgzMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwYiwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNkLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDM0LAorCTB4M2IsIDB4MDAsIDB4OGQsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDlkLCAweDBiLCAweDI3LCAweDA5LCAweDAxLCAweGU0LCAweDA2LCAweGMwLCAweDJkLCAweGIyLAorCTB4MDAsIDB4YzAsIDB4OTUsIDB4MGIsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAorCTB4MjAsIDB4ODAsIDB4YTQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4OTIsCisJMHgyYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDk4LCAweDAxLCAweDE0LCAweDA5LCAweDAwLCAweDZlLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDJjLCAweDMyLAorCTB4MDAsIDB4NDAsIDB4MDAsIDB4ODAsIDB4Y2EsIDB4MzksIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MGIsIDB4MWQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwYiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhjNywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhhZSwgMHgwYiwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MTAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDA4LCAweDgwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweGI2LCAweDBiLCAweDAwLCAweDUwLCAweDAxLCAweDNjLCAweGE4LCAweDViLCAweDgwLCAweDljLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgxYiwgMHg4MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGVlLCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDI4LCAweGQ4LCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHgzYywKKwkweDAwLCAweDAwLCAweGQ0LCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjNSwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweDAyLCAweGMwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MGIsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4Y2IsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGM2LCAweDBiLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZDIsIDB4MGIsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjAsIDB4ODAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweGI3LCAweDBlLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGIsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4OWUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MWQsIDB4MDAsIDB4ZGIsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGQ1LCAweDBiLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDc4LCAweDM5LCAweDlhLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDA4LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDQwLCAweDAyLCAweDE0LCAweDM5LCAweDlhLCAweGZlLCAweGQ4LAorCTB4MDgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4NDAsIDB4MDIsIDB4NjgsIDB4MTIsIDB4OWEsIDB4ZmUsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZDgsIDB4ZTAsIDB4ODYsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGU2LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDA4LCAweDQwLCAweDgwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhiOSwgMHgwYiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweGVjLCAweDBiLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHhiNywgMHgwZSwgMHgwMCwgMHg2MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweGJhLCAweDBiLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDllLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhmNiwgMHgwYiwgMHgwNCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM5LCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweDNhLAorCTB4MDAsIDB4YzAsIDB4ZjcsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MjAsIDB4OTksIDB4MjIsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMiwgMHg4MCwgMHg4MiwgMHgxYiwgMHg5MiwgMHhiYywKKwkweDAwLCAweDAwLCAweGZiLCAweDBiLCAweDJmLCAweDIwLCAweDAxLCAweGUwLCAweDk2LCAweDIyLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhkOCwgMHhlMCwgMHg4MywgMHhiYywKKwkweDAwLCAweDAwLCAweGZlLCAweDBiLCAweDlmLCAweDMxLCAweDAxLCAweGUwLCAweDk2LCAweDIyLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwNywgMHgwYywgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHhmNiwgMHg2MCwgMHg4MCwgMHg5YywKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDc4LCAweDM5LCAweDlhLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDA4LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDQwLCAweDAyLCAweDE0LCAweDM5LCAweDlhLCAweGZlLCAweGQ4LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NjgsIDB4MTIsIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHgwNiwgMHgwYywgMHg5ZiwgMHgzMSwgMHgwMSwgMHhlMCwgMHg5NiwgMHgyMiwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MiwgMHgzMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MWQsIDB4MDAsIDB4MGMsIDB4MGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHgwOCwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4Y2IsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MGMsIDB4MjMsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmEsCisJMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4MGMsIDB4MGIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgxYywgMHgwYywgMHgzZCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDFjLCAweDBjLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDIwLCAweDBjLCAweDI5LCAweDMxLCAweDAxLCAweDBjLCAweDA5LCAweDAwLCAweDZlLCAweGIyLAorCTB4MmEsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDI3LCAweDBlLCAweDAwLCAweDBjLCAweDAyLCAweDAwLCAweDA5LCAweDgwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MjQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMiwgMHhlNCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MGMsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOSwgMHg0MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDRmLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MGUsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MjAsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHgwYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDI3LCAweDBlLCAweDAwLCAweDBjLCAweDAyLCAweDAwLCAweDA5LCAweDgwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NzgsIDB4MGIsIDB4MTYsIDB4MzgsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHg3OCwgMHgwYiwgMHgxNiwgMHgzOCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweGE4LCAweDAwLCAweDJkLCAweDM3LAorCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4ODgsIDB4MGQsIDB4OGIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhiNCwgMHgwOCwgMHg4MCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDQ1LCAweDBjLCAweDA0LCAweDMxLCAweDAxLCAweDkwLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4OGQsIDB4OGEsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHhjMiwgMHhhMiwgMHgyYywgMHgzYSwKKwkweDE4LCAweDAwLCAweDQzLCAweDBjLCAweDg2LCAweDQxLCAweDAyLCAweDc4LCAweDg4LCAweDBkLCAweDc4LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ZTIsIDB4OGEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhiMiwgMHgzZiwgMHg3OCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDNjLCAweDBjLCAweDlmLCAweDAxLCAweDAwLCAweGE4LCAweDE4LCAweDgwLCAweDhhLCAweGJjLAorCTB4YjcsIDB4MDAsIDB4M2MsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwNCwgMHhiOCwgMHgzZiwgMHg3OCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDU4LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGQ4LCAweDYyLCAweDgwLCAweDljLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4MWIsIDB4ODksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweDhkLCAweDhhLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4YzIsIDB4YTIsIDB4MmMsIDB4M2EsCisJMHgxOCwgMHgwMCwgMHg0ZSwgMHgwYywgMHg4NiwgMHg0MSwgMHgwMiwgMHg3OCwgMHg4OCwgMHgwZCwgMHg3OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweGUyLCAweDhhLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDEsIDB4MDIsIDB4ODAsIDB4YjIsIDB4M2YsIDB4NzgsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg0NywgMHgwYywgMHg5ZiwgMHgwMSwgMHgwMCwgMHhhOCwgMHgxOCwgMHg4MCwgMHg4YSwgMHhiYywKKwkweGI3LCAweDAwLCAweDQ3LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4MGMsIDB4MjgsIDB4NDAsIDB4MDIsIDB4MDQsIDB4YjgsIDB4M2YsIDB4NzgsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwNCwgMHhkOCwgMHg2MiwgMHg4MCwgMHgzYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NTUsIDB4MGMsIDB4MDIsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MTgsIDB4MjAsIDB4ODksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDQ3LCAweDBjLCAweDlmLCAweDAxLCAweDAwLCAweGE4LCAweDE4LCAweDgwLCAweDhhLCAweGJjLAorCTB4YjcsIDB4MDAsIDB4NDcsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgxOCwgMHgyMCwgMHg4OSwgMHhiYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDA0LCAweDQ4LCAweDYyLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OTAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4NDgsIDB4NjIsIDB4OGIsIDB4YmEsCisJMHgwMywgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgxZSwgMHhmZiwgMHhiOCwKKwkweDAwLCAweDAwLCAweDYwLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIyLCAweDgwLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4ODksIDB4MGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ZTIsIDB4OGEsIDB4YmMsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4MiwgMHg4ZCwgMHg4YSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweGMyLCAweGEyLCAweDJjLCAweDNhLAorCTB4MTgsIDB4MDAsIDB4ODcsIDB4MGMsIDB4ODYsIDB4NDAsIDB4MDIsIDB4NzgsIDB4ODgsIDB4MGQsIDB4NzgsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHgwNCwgMHhiOCwgMHgzZiwgMHg3OCwgMHhiMCwKKwkweDAzLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDAwLCAweDA4LCAweDFlLCAweGZmLCAweGI4LAorCTB4MzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4MCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDY3LCAweDBjLCAweDEyLCAweDAxLCAweDAwLCAweDYwLCAweDA4LCAweDQwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDcyLCAweGUwLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwOCwgMHgwMCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDIwLCAweDA4LCAweGMwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4ODAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4NzIsIDB4MGMsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKKwkweDIwLCAweDgwLCAweDY0LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHgwMCwgMHhiOCwgMHgxYiwgMHg4MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDMwLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDE3LCAweGUwLCAweDJjLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDEsIDB4MGIsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4MSwgMHgwYywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg4NywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweGI3LCAweDAxLCAweDcwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg5MywgMHgwYywgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHgxYiwgMHg4OSwgMHhiYywKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4NWEsIDB4MGMsIDB4OWYsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MTgsIDB4ODAsIDB4OGEsIDB4YmMsCisJMHhiNywgMHgwMCwgMHg1YSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDI3LCAweDAwLCAweDhjLCAweDBjLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4NzgsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHhhMiwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhlLCAweDBjLCAweDIzLCAweDU1LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweGIyLAorCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg5MCwgMHgwYywgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4YzcsIDB4MDEsIDB4NzAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDA4LCAweDAwLCAweDk3LCAweDBjLCAweDIzLCAweDE5LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGI5LAorCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg5OSwgMHgwYywgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDljLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4OWMsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGEwLCAweDBjLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweGNhLCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4YWQsIDB4MGMsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg4MiwgMHhiNiwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHhlYywgMHg2NiwgMHgwMCwgMHgwMCwgMHgzNCwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAxLCAweGUwLCAweGU2LCAweGEwLCAweDgyLCAweDM5LAorCTB4MWIsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDIwLCAweDAwLCAweDg0LCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhiNiwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAyLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4YmQsIDB4MGMsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MjgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweGM3LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGM2LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDg1LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg0MSwgMHgwMiwgMHg4MCwgMHgwNiwgMHhjMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFjLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDRjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHgwZCwgMHgxZiwgMHgyMCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDFhLCAweDBkLCAweDA0LCAweDMwLCAweDAxLCAweDA4LCAweDg5LCAweDliLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDIsIDB4MGMsIDB4MDQsIDB4MzEsIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGQwLCAweDBjLCAweDAwLCAweDUwLCAweDAxLCAweDQ4LCAweDA4LCAweDgwLCAweDZlLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwgMHg2MSwgMHg4MCwgMHgzYywKKwkweDAwLCAweDAwLCAweGViLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDIxLCAweDgwLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgzMCwgMHgwMSwgMHg0OCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweGQ2LCAweDBjLCAweDAwLCAweDUwLCAweDAxLCAweDA0LCAweGE4LCAweDViLCAweDgwLCAweDljLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgxYiwgMHg4MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweGU4LCAweDBjLCAweDA3LCAweDAwLCAweDAwLCAweDQ4LCAweDE4LCAweGEwLCAweDg0LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhhMCwgMHhmZSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwNSwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhhMCwgMHhmZSwgMHhkOCwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGEwLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHhlMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MGMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MTgsIDB4YTAsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGEwLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDA1LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGEwLCAweGZlLCAweGQ4LAorCTB4MDUsIDB4MDAsIDB4ZGUsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTAsIDB4ZmUsIDB4OTgsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgxOCwgMHhhMCwgMHg4NCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDYxLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjEsIDB4ODAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGY0LCAweDBjLCAweDEyLCAweDAxLCAweDAwLCAweDYwLCAweDA4LCAweDQwLCAweDIzLCAweGIyLAorCTB4MDMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MWEsIDB4ZmYsIDB4YjgsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHg2MCwgMHg4MCwgMHgzOSwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDQxLCAweDAyLCAweDhjLCAweGU2LCAweGExLCAweDk3LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4ODAsIDB4ODQsIDB4MzIsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDI4LCAweDAwLCAweGExLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwOCwgMHgwMCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDIwLCAweDA4LCAweGMwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4ODAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweGMwLCAweGZlLCAweDBjLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMiwgMHgwMCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDQwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZWQsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MDAsIDB4ODYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDgxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhlMCwgMHgyYywgMHgzOSwKKwkweDAwLCAweDAwLCAweDBkLCAweDBkLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwZSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDEwLCAweDAwLCAweDg4LCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwNSwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhhMCwgMHhmZSwgMHhkOCwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGEwLCAweGZlLCAweDM4LAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTAsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDIyLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwNSwgMHgwMCwgMHgxZCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhhMCwgMHhmZSwgMHg5OCwKKwkweDAwLCAweDAwLCAweDIyLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDUsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YTAsIDB4ZmUsIDB4ZDgsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhhMCwgMHhmZSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwZCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4NGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKKwkweGI0LCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4YzAsIDB4MmMsIDB4MzcsCisJMHhiNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDEwLCAweDAwLCAweDAwLCAweDg3LCAweGJmLCAweDk3LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDJiLCAweDBkLCAweGI2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MjAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjQsIDB4YTIsIDB4Y2QsIDB4MmMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDMwLCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MGQsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDI4LCAweDAwLCAweGExLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwOCwgMHgwMCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDIwLCAweDA4LCAweGMwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4ODAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweGMwLCAweDQzLCAweDBkLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMiwgMHgwMCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDQwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZWQsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MDAsIDB4ODYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDA4LCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NDYsIDB4MGQsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDAyLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MmIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMiwgMHhmMiwKKwkweDAwLCAweDAwLCAweDRmLCAweDBkLCAweDlhLCAweDAxLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4MzEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHg2ZSwgMHgzNCwKKwkweDJkLCAweDAwLCAweGEyLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhhOSwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVhLCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NTYsIDB4MGQsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg1YSwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDVhLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgwZCwgMHgwNCwgMHg5OCwgMHgwMSwgMHg2NCwgMHg4OCwgMHgxYiwgMHg4NywgMHhiYywKKwkweDAwLCAweDAwLCAweDBhLCAweDExLCAweDAwLCAweDkwLCAweDAxLCAweDA4LCAweDA5LCAweDgwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4M2YsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAorCTB4MzAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDZjLCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGQsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg2YywgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDZjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4NmEsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDM2LCAweDAwLCAweGE0LCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDc5LCAweDBkLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4N2QsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweDdiLCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4ODgsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDgyLCAweDBkLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweDg0LCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MzAsIDB4MDAsIDB4ODgsIDB4MGQsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGQ1LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDkzLCAweDBkLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg1OCwgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDA4LCAweDU5LCAweDAxLCAweGVjLCAweDA2LCAweGZiLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweGMwLCAweDljLCAweDBkLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ZmIsIDB4NmUsIDB4M2EsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDlkLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDcyLCAweGUwLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MSwgMHgyZiwgMHhmNCwKKwkweDAwLCAweDAwLCAweDlmLCAweDBkLCAweDA2LCAweDAzLCAweDAxLCAweDgwLCAweDEyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MTgsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgxOSwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHgzMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHhhZCwgMHgwZCwgMHgwNCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM5LCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHhjMCwgMHhhZCwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhhZCwgMHgwZCwgMHg5ZiwgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweGIyLCAweDBkLCAweDNkLCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YjIsIDB4MGQsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCisJMHgzNCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MmEsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweGMwLCAweGJjLCAweDBkLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4ZGYsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMSwgMHgzOCwgMHg4OCwgMHgxYiwgMHgxNiwgMHgzOCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDQ4LCAweDAxLCAweDI4LCAweDg4LCAweDA0LCAweDZlLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4YzEsIDB4MGQsIDB4ODAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4NzIsIDB4YzAsIDB4NmUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjMywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MCwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweGMzLCAweDBkLCAweDgwLCAweDVmLCAweDAxLCAweDgwLCAweDYyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4YTksIDB4ODEsIDB4OTIsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhjYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGM2LCAweDBkLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjOSwgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGM5LCAweDBkLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwNCwgMHgzMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDJhLCAweDAwLCAweGE0LCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4ZDIsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDFkLCAweDAwLCAweGExLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4MDEsIDB4NzgsIDB4MDksIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDEwLCAweDAwLCAweGEwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwYywgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4ZjAsIDB4ZTEsIDB4MGQsIDB4MWQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4YTgsIDB4MGQsIDB4NjgsIDB4YjEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFlLCAweDQwLCAweDAyLCAweDg0LCAweDA2LCAweDAwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDUsIDB4ODAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHhkZSwgMHgwZCwgMHhiNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweGMwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweGEyLCAweDBkLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZGEsIDB4MGQsIDB4YTYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlMSwgMHgwZCwgMHhiNSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDAwLCAweDgwLCAweGEwLCAweDM2LCAweDBiLCAweDZhLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4ZTYsIDB4MGQsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhlOSwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweGVmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDM5LCAweDBiLCAweDJlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ZjMsIDB4ODEsIDB4OTcsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhmMSwgMHgwZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4MDUsIDB4MzAsIDB4MzAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHhhNCwgMHgwMywgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweDMzLCAweDBiLCAweDJmLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDA1LCAweDMwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDgwLCAweDk3LCAweDMyLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjMCwgMHgyOSwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwMCwgMHgyYywgMHgzMiwKKwkweGQ5LCAweDAyLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDk3LCAweGJjLAorCTB4NDYsIDB4MDMsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGYxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MTgsIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4NDIsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgxOCwgMHgwZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDE4LCAweDBlLCAweDFmLCAweDQwLCAweDAyLCAweDA4LCAweGI5LCAweGJmLCAweDY4LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDgsIDB4MGUsIDB4ODAsIDB4NDEsIDB4MDIsIDB4ODAsIDB4ZTIsIDB4ODEsIDB4NjgsIDB4YjYsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg3OSwgMHg2MSwgMHg4MCwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDIxLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDIsIDB4ODgsIDB4ZTYsIDB4MjEsIDB4OTEsIDB4NzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgxOSwgMHhhMCwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDE4LCAweDBlLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweGZmLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MGMsIDB4MGUsIDB4MmMsIDB4NDEsIDB4MDIsIDB4NzgsIDB4ZjksIDB4ODEsIDB4NjgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhiOSwgMHg4MSwgMHg5NywgMHgzNCwKKwkweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NTksIDB4YzAsIDB4ODUsIDB4ZDcsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgyOSwgMHgxYSwgMHhmZiwgMHgzOCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDAwLCAweGI5LCAweDFiLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDEsIDB4MDIsIDB4ODgsIDB4MTYsIDB4YTAsIDB4OTcsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgyNywgMHgyNCwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDhhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NTgsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4NzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDA4LCAweDAwLCAweDIzLCAweDBlLCAweDFlLCAweDAxLCAweDAwLCAweDM0LCAweDc5LCAweDYxLCAweDgwLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MzgsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MWYsIDB4NDAsIDB4ZjUsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwOSwgMHg0MCwgMHg2OCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGI5LCAweDNmLCAweDkwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4MjYsIDB4MjQsIDB4NmUsIDB4M2EsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhhNCwgMHhmZSwgMHhiOCwKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDkwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4OTAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwNSwgMHg5MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHgyMSwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHgzYSwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLCAweDAyLCAweDg0LCAweGU2LCAweDYxLCAweDkzLCAweDc5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDIwLCAweDAxLCAweDgwLCAweDgyLCAweGRiLCAweDkwLCAweDdjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDBjLCAweDAyLCAweDgwLCAweGEyLCAweGRiLCAweDkwLCAweDdjLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MGUsIDB4MDYsIDB4MjEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4MWIsIDB4OTAsIDB4YmMsCisJMHgyNiwgMHgwMCwgMHgyZSwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDI3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4MDAsIDB4MmMsIDB4M2EsCisJMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDkyLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhhMCwgMHgwMSwgMHg3OCwgMHg4OSwgMHgxYiwgMHg5MiwgMHg3YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDc4LCAweDg5LCAweDliLCAweDk3LCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDAsIDB4ZjksIDB4YmEsIDB4NmUsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgzOSwgMHgwZSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDM5LCAweDBlLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4OTcsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMSwgMHgwMiwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5NywgMHg3YywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweGYyLCAweDgwLCAweDJmLCAweDc0LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg1YiwgMHgwMSwgMHhlYywgMHgwNiwgMHg0MCwgMHhlZCwgMHgzMiwKKwkweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4ODksIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHg0MiwgMHgwZSwgMHgwOCwgMHg1ZCwgMHgwMSwgMHhlYywgMHgxNiwgMHg0MCwgMHg4OSwgMHhiYywKKwkweDAwLCAweDAwLCAweDQyLCAweDBlLCAweDBiLCAweDVkLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NDIsIDB4MGUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4NzgsIDB4ODksIDB4MWIsIDB4ODcsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhhMSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDQ3LCAweDBlLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDg2LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MGEsIDB4MTEsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDgwLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4M2YsIDB4MTEsIDB4OWYsIDB4ZjAsIDB4MDEsIDB4ODAsIDB4ODIsIDB4ZGIsIDB4ODcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHg5ZiwgMHhmOCwgMHgwMSwgMHg4MCwgMHgyMiwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweGVlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTEsIDB4YmMsCisJMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDUwLCAweDAxLCAweDE0LCAweGE5LCAweDliLCAweDkxLCAweGQ5LAorCTB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgxNCwgMHg4OSwgMHgwZCwgMHg2ZSwgMHgzNywKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDMwLCAweDAxLCAweDE0LCAweDg5LCAweDViLCAweDkxLCAweGQyLAorCTB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjMCwgMHgyZCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDIxLCAweDAxLCAweDgwLCAweDgyLCAweDliLCAweDkxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4NzgsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMiwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDcxLCAweDBlLCAweDA0LCAweDIxLCAweDAxLCAweDMwLCAweDY5LCAweDI0LCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4YTksIDB4OWIsIDB4OTEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg2NiwgMHgwZSwgMHgxZiwgMHg0MCwgMHgwMiwgMHgyNCwgMHgwOSwgMHg0MCwgMHg2OCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVjLCAweDBlLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDQxLCAweDkyLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4YjksIDB4N2YsIDB4OTIsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgyNCwgMHg5MCwgMHgzYywKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDk5LCAweGE0LCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDA4LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDk5LCAweGE0LCAweGZlLCAweGQ4LAorCTB4MDgsIDB4MDAsIDB4NWMsIDB4MGUsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4OTIsIDB4YTQsIDB4ZmUsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NmIsIDB4MGUsIDB4MzgsIDB4NTAsIDB4MDEsIDB4NzgsIDB4MDksIDB4ODAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2YiwgMHgwZSwgMHgwNCwgMHgyOCwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDI4LCAweDAxLCAweDc4LCAweGU5LCAweDI1LCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4NjksIDB4YTQsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHhlMCwgMHg2NiwgMHgyNCwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDZlLCAweDBlLCAweDM4LCAweDIwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NmYsIDB4MGUsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHgwMCwgMHgwMCwgMHg3NywgMHgwZSwgMHgzOCwgMHg1MSwgMHgwMSwgMHgwMCwgMHhhOSwgMHg5YiwgMHg5MSwgMHhiYSwKKwkweDAwLCAweDAwLCAweDc1LCAweDBlLCAweDA0LCAweDQxLCAweDAyLCAweDA4LCAweGI5LCAweGZmLCAweDY4LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4NDEsIDB4MDIsIDB4ODAsIDB4ZTIsIDB4YzEsIDB4NjgsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg3MiwgMHgwZSwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDg0LCAweDBlLCAweDlmLCAweDMxLCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4MSwgMHgwZSwgMHgwNCwgMHgyOCwgMHgwMSwgMHgwNCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDUwLCAweDAxLCAweDgwLCAweGEyLCAweDViLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4N2YsIDB4MGUsIDB4OWYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MjQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHhlMCwgMHg2NiwgMHgyNCwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAxLCAweGUwLCAweDA2LCAweDI0LCAweDAwLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZSwgMHgwZSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDg0LCAweDBlLCAweDA0LCAweDQxLCAweDAyLCAweDA4LCAweGI5LCAweGZmLCAweDY4LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4NDEsIDB4MDIsIDB4ODAsIDB4ZTIsIDB4YzEsIDB4NjgsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4MSwgMHgwZSwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDg4LCAweDBlLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweDI0LCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGUsIDB4MGUsIDB4ODAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4NjgsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4YywgMHhiNiwgMHhjMSwgMHg2OCwgMHgzNSwKKwkweDAwLCAweDAwLCAweDhlLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTcsIDB4ZDIsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHhiOCwKKwkweDAwLCAweDAwLCAweDgxLCAweDBlLCAweDA0LCAweDAxLCAweDAwLCAweDAwLCAweDI5LCAweDI0LCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg3OSwgMHgwYiwgMHgxNiwgMHgzOCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDc5LCAweDBiLCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ZTQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDg5LCAweDRkLCAweDkwLCAweDNhLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4ODIsIDB4MGQsIDB4OTEsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxMiwgMHhhNCwgMHgyYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDk5LCAweDBlLCAweDgwLCAweDQwLCAweDAyLCAweDgwLCAweGUyLCAweDAxLCAweDdjLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4NzgsIDB4YjksIDB4M2YsIDB4N2MsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOSwgMHhhNSwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDliLCAweDBlLCAweDlmLCAweDAxLCAweDAwLCAweDEwLCAweDE5LCAweDAwLCAweDkxLCAweGJjLAorCTB4YjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5NCwgMHgwZSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHhlNCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGM5LCAweDI0LCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4YTQsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHhlMCwgMHg2NiwgMHgyNCwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4OTMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MTgsIDB4MDAsIDB4YTUsIDB4MGUsIDB4MWYsIDB4NDEsIDB4MDIsIDB4NzgsIDB4ODgsIDB4Y2QsIDB4NjgsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxMiwgMHgwMCwgMHgyYywgMHgzYSwKKwkweDAwLCAweDAwLCAweGE4LCAweDBlLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDEsIDB4MDIsIDB4ODAsIDB4YjIsIDB4ZmYsIDB4NjgsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHg5MiwKKwkweDAzLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDAwLCAweDM4LCAweDFhLCAweGZmLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4NDAsIDB4MDIsIDB4MDQsIDB4YjgsIDB4ZmYsIDB4NjgsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHgwMCwgMHhiOCwgMHgxYiwgMHg4MCwgMHgzYSwKKwkweDJlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YjYsIDB4MGUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiMywgMHgwZSwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCisJMHgxZCwgMHgwMCwgMHhiNiwgMHgwZSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweGIwLCAweDBlLCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDE4LCAweDAwLCAweDg4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDY4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NzAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweGE5LCAweDYwLCAweDgxLCAweGQ5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4YTAsIDB4ODEsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGMxLCAweDBlLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwZSwgMHgxYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweGUwLCAweDgzLCAweDdjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweDcyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAxLCAweGU0LCAweDA2LCAweGMwLCAweDJkLCAweDMyLAorCTB4ZWUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4ODYsIDB4OGQsIDB4MmYsIDB4MzEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhiMywgMHhlNCwgMHgzOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGNkLCAweDBlLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhiOSwgMHgwNSwgMHgzMCwgMHgzMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUzLCAweGE1LCAweDAzLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MzMsIDB4MGIsIDB4MmYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHg3NiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YjksIDB4MDUsIDB4MzAsIDB4MzAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHhlMywgMHhhNSwgMHgwMywgMHg3OSwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZDgsIDB4MGUsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MmMsIDB4MDksIDB4YzAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkOSwgMHgwZSwgMHgwMCwgMHgxNiwgMHg4NiwgMHhjYywgMHgwNiwgMHhjMCwgMHg5MiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDg2LCAweGNjLCAweDA2LCAweGMwLCAweDkyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NjIsIDB4OGUsIDB4OTIsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZGYsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4MCwgMHg5NywgMHhiYywKKwkweGRmLCAweDBlLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4NjAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmYsIDB4YjEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMywgMHgwMCwgMHgzOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAyLCAweDAwLCAweDMwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ZDgsIDB4MDEsIDB4MzAsIDB4YjYsCisJMHhlNCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHg0ZCwgMHg4MiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4ZGYsIDB4MGUsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGVjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ4LCAweDA1LCAweDMwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmNywgMHgwZSwgMHgzMiwgMHgwZiwgMHgwMSwgMHhiYywgMHgwOCwgMHhjMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAxLCAweGRjLCAweDAyLCAweDQwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZjAsIDB4MGUsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhmNiwgMHgwZSwgMHgxZCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweGUwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4MDAsIDB4MmQsIDB4MzcsCisJMHgyMCwgMHhjZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHg5NywgMHgzYSwKKwkweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDg3LCAweGEwLCAweGVhLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ZWEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGUwLCAweDI2LCAweDAxLCAweDZlLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4ZmIsIDB4MGUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4OGIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwZSwgMHg4MiwgMHgzMiwKKwkweDAwLCAweGUwLCAweDAzLCAweDBmLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGEyLCAweDBkLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweGI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4MDAsIDB4MmQsIDB4MzcsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDk5LCAweDAwLCAweDgyLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4YmYsIDB4OTcsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4OSwgMHg2MCwgMHgzOCwgMHgzMiwKKwkweDFkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGE0LCAweDE3LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MDksIDB4MGYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4OGIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwYSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMywgMHg0MSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDBmLCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwNSwgMHgzMCwgMHgzMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAzLCAweGE0LCAweDAzLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4Y2UsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHhlMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHgwZCwgMHg5MCwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4ZGMsIDB4MDIsIDB4NDAsIDB4NmUsIDB4MzIsCisJMHgxZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhhNCwgMHgxNywgMHgzOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MTAsIDB4MDEsIDB4ODAsIDB4MjIsIDB4MDEsIDB4NmUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgxOCwgMHgwZiwgMHgxZiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDIwLCAweDBmLCAweDFkLCAweDEwLCAweDAxLCAweGY4LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4ZTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDIwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4OGIsIDB4ZWEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHhlYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhmOCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweGVlLCAweGZmLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhlZSwgMHhmZiwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHgwZCwgMHg2ZSwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGY4LCAweDAyLCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDEsIDB4ZGMsIDB4MDIsIDB4NDAsIDB4NmUsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODksIDB4NGQsIDB4MGQsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgwYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyYiwgMHgwZiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0YywgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MmMsIDB4MGYsIDB4MTIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHgwMiwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDI4LCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDA0LCAweDE5LCAweDQwLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDNiLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MzUsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDNhLCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxOCwgMHgwMCwgMHg4OCwgMHhiYywKKwkweDAwLCAweDAwLCAweDM1LCAweDBmLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg2YywgMHg4OCwgMHgxYywgMHg4MywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4NTAsIDB4MDAsIDB4MTgsIDB4YzgsIDB4MjAsIDB4NzIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg4MSwgMHg3YywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODgsIDB4MDEsIDB4ODIsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDA2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4YmMsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg3NywgMHg0YSwgMHgwOSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDcyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGEzLCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDI4LCAweGQ4LCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHgzYywKKwkweDAwLCAweDAwLCAweDY3LCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweDAyLCAweGMwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MGYsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4NWUsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDU5LCAweDBmLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NjUsIDB4MGYsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjAsIDB4ODAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweGI3LCAweDBlLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NGQsIDB4MGYsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4OWUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MWQsIDB4MDAsIDB4NmUsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDY4LCAweDBmLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDc4LCAweDM5LCAweDlhLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDk3LCAweGQyLAorCTB4MDgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4NDAsIDB4MDIsIDB4NjgsIDB4MTIsIDB4OWEsIDB4ZmUsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGYsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZDgsIDB4ZTAsIDB4ODYsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDc5LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDA4LCAweDQwLCAweDgwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg4NywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4NCwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDgzLCAweDBmLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YjcsIDB4MGUsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg0ZCwgMHgwZiwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHg5ZSwKKwkweDAwLCAweDAwLCAweDg5LCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YTcsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGE4LCAweDYwLCAweDhhLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4NWIsIDB4OGEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwZiwgMHgyZiwgMHhhOCwgMHgwMSwgMHgyMCwgMHg5OSwgMHgyMiwgMHg2ZSwgMHhiYSwKKwkweDAwLCAweDAwLCAweDJmLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDIsIDB4ODAsIDB4ODIsIDB4MWIsIDB4OTIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OTIsIDB4MGYsIDB4MjMsIDB4MjEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDQsIDB4MjEsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDlhLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OTksIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHhiNywgMHgwZSwgMHgwMCwgMHg2MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4NDAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweDE5LCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg0LCAweDcyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4NzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHhkOCwgMHhlMCwgMHg4MywgMHgzYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDEyLCAweDAwLCAweDJjLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHhlZSwgMHgwNSwgMHhhZiwgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0ZCwgMHhmNSwgMHhiYywKKwkweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YjEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4MDksIDB4OTIsCisJMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDgwLCAweDA5LCAweDMyLAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YzAsIDB4ODcsIDB4Y2QsIDB4MDAsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg2MCwgMHhjMCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKKwkweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweDhkLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NTIsIDB4ODEsIDB4OTcsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgyNCwgMHg5MCwgMHgzYSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweDBkLCAweDkwLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDAsIDB4OTAsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1MiwgMHg4MiwgMHgyYSwgMHgzYSwKKwkweDAwLCAweDA4LCAweGIxLCAweDBmLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJhLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MGYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgyMCwgMHhiMiwKKwkweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDg3LCAweGNkLCAweDAwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4YzAsIDB4MDcsIDB4ODAsIDB4OTcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHg1MiwgMHg4MSwgMHgyYSwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDI0LCAweDkwLCAweDNhLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHhiYiwgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MCwgMHg5MCwgMHhiYywKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweDBkLCAweDkwLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGUsIDB4ODAsIDB4OTcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHg4MCwgMHg5NywgMHhiMiwKKwkweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweDg5LCAweDBkLCAweDkwLCAweDM2LAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODksIDB4NGQsIDB4OTIsIDB4M2MsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4MiwgMHg0ZCwgMHg5MiwgMHgzNiwKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDg5LCAweDRkLCAweDkyLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MTgsIDB4OWIsIDB4ODEsIDB4YjIsIDB4ZTQsIDB4NzgsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5YiwgMHg4ZCwgMHhiNywgMHhlNCwgMHg3OCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBlLCAweDgwLCAweDk3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MjQsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg1OSwgMHgwMCwgMHg5MCwgMHgzNiwKKwkweDAwLCAweDAwLCAweGM0LCAweDBmLCAweDk1LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDI0LCAweDkwLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGVjLCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4MjksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHhiMiwgMHg0NSwgMHgyOCwgMHgzMCwKKwkweDAwLCAweDAwLCAweGRkLCAweDBmLCAweDg2LCAweDAxLCAweDAwLCAweDA4LCAweDA5LCAweDgwLCAweDJmLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDksIDB4NDAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDIsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHg4MCwgMHg5MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGRjLCAweDBmLCAweDA0LCAweDA3LCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZTcsIDB4MGYsIDB4YzMsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4YjYsIDB4ZTQsIDB4NmUsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHhlNywgMHgwZiwgMHgwMCwgMHgwNiwgMHgwMSwgMHhlYywgMHhiNiwgMHhlNCwgMHg2ZSwgMHg5YSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDkwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDksIDB4MDUsIDB4ODAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDIsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHg4MCwgMHg5MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDkyLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ZmEsIDB4OTIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhmYSwgMHg5MiwgMHhiYywKKwkweDQ0LCAweDAwLCAweDJjLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweGQyLAorCTB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjMCwgMHg5MiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHhiMiwgMHg0NSwgMHgyOCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweDdjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweGU4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDIsIDB4YzAsIDB4ZTgsIDB4MzIsCisJMHgwMiwgMHgwMCwgMHhmMSwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGFiLCAweGU0LCAweGIwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZjYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4NGEsIDB4ZDAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDAsIDB4MDAsIDB4ZjksIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ZjgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA0LCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDM0LCAweGIwLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4NGEsIDB4ZDAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhmZCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweGNkLCAweDRhLCAweGQwLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgyMiwgMHgwMCwgMHgyYiwgMHhiNywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDg0LCAweGMwLCAweDM3LCAweGFjLCAweGIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHg0ZCwgMHhiMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDA4LCAweDEwLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGIwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4YjAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg2OSwgMHg4MSwgMHg5NywgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LCAweDBiLCAweDAwLCAweDdjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4MjUsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHgyYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGIwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHg1NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MGUsIDB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhhYiwgMHhlNCwgMHhiMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDEzLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGQwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweDE2LCAweDEwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweGY4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweDBkLCAweDQwLCAweGQwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ZDAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgxZCwgMHgxMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgzNCwgMHhiMCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGQwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwZCwgMHg0MCwgMHhkMCwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4MWQsIDB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHg4NCwgMHhjMCwgMHgzNywgMHhhYywgMHhiMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDBjLCAweDBiLCAweDAwLCAweDAwLCAweDMyLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4NGQsIDB4YjAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhiMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweGIwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NjksIDB4ODEsIDB4OTcsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwgMHgwYiwgMHgwMCwgMHg3YywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LCAweDI1LCAweDAxLCAweDMyLAorCTB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4MmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhiMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGQwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4NTQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDEsIDB4MDIsIDB4ODAsIDB4MDYsIDB4YzAsIDB4OTIsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg5MiwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg5NywgMHhkMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDkyLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHhjMCwgMHhmNSwgMHgzYSwKKwkweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4OTIsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDUyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzOCwgMHg4MCwgMHg4NywgMHgzNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNjLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZTksIDB4ZTUsIDB4ODMsIDB4MzksCisJMHgxOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHg0MSwgMHgwMiwgMHg4NCwgMHhlNiwgMHhhMSwgMHg5NywgMHhiOSwKKwkweDAwLCAweDAwLCAweDQzLCAweDEwLCAweDM2LCAweDUxLCAweDAxLCAweGU4LCAweDE2LCAweGUwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDMsIDB4MTAsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDQ1LCAweDEwLCAweDM4LCAweDIxLCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMSwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg5MiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDkyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHg0MCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDQxLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDkyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHg3NCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDkyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgzZCwgMHgwMCwgMHgwYywgMHgwNywgMHg4MCwgMHg4MywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweDcyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDU3LCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweDdjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ODAsIDB4OTIsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOSwgMHhhMCwgMHgyYywgMHhkOSwKKwkweDAwLCAweDAwLCAweDYwLCAweDEwLCAweDlkLCAweDExLCAweDAyLCAweDBjLCAweDA5LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NjEsIDB4MTAsIDB4MDAsIDB4ZjAsIDB4MDEsIDB4MWMsIDB4MDksIDB4MDAsIDB4NmUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHgwMSwgMHgxYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDYzLCAweDEwLCAweDJjLCAweGNkLCAweDAxLCAweDE4LCAweDA5LCAweDgwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YzksIDB4YzEsIDB4OTAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg2NywgMHgxMCwgMHgzYiwgMHgyOSwgMHgwMiwgMHgwNCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweGQ2LCAweDAxLCAweDgwLCAweDUyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4YzAsIDB4NmUsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhiOSwgMHhjMSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDc3LCAweDEwLCAweDAwLCAweGE4LCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NmIsIDB4MTAsIDB4OWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTcsIDB4ZTAsIDB4OTAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg5MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDZlLCAweDEwLCAweDAwLCAweDM4LCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweGVlLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4MTAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4OTEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NzEsIDB4MTAsIDB4MzksIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4YzAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweGM5LCAweDAxLCAweGU4LCAweDA2LCAweDgwLCAweDkxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MTEsIDB4MDAsIDB4ODAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg3NCwgMHgxMCwgMHgzYiwgMHgyMSwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRiLCAweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDAwLCAweDg2LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NzgsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4ODYsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHg4NSwgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4N2IsIDB4MTAsIDB4MDIsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4OWIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg3OCwgMHgyOSwgMHgwMCwgMHg2ZSwgMHgzNiwKKwkweDAwLCAweDAwLCAweDdiLCAweDEwLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweGE1LCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMSwgMHg3OCwgMHg0OSwgMHgyMSwgMHg2ZSwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU5LCAweGE1LCAweDkwLCAweDNmLAorCTB4MDAsIDB4MDAsIDB4ODIsIDB4MTAsIDB4MDQsIDB4MjAsIDB4MDIsIDB4MDgsIDB4ODksIDB4OWIsIDB4OTAsIDB4YmUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMiwgMHg1OCwgMHhiOCwgMHg5YiwgMHg5MCwgMHgzNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDQ5LCAweGExLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4ODgsIDB4MDEsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTcsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHg5NywgMHg3MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAyLCAweDU4LCAweGI4LCAweDliLCAweDkwLCAweDc2LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YiwgMHgxMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDg5LCAweDEwLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhiLCAweDEwLCAweGNhLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDkyLAorCTB4MTUsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZTksIDB4NjUsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg2YywgMHg4OCwgMHgxYywgMHg4MywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4NTAsIDB4MDAsIDB4MTgsIDB4YzgsIDB4MjAsIDB4NzIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg2MiwgMHhhMCwgMHg4MiwgMHg3YywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODgsIDB4MDEsIDB4ODIsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDA2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4YmMsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg3NywgMHg0YSwgMHgwOSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDcyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDg1LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4MTAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgxMCwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGE2LCAweDEwLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgxMCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHhjMCwgMHhmNSwgMHg3YSwKKwkweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweDcwLAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHg3NCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4ODAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmYsIDB4NzAsCisJMHgwMCwgMHgwMCwgMHhiNywgMHgxMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MTAsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDNiLCAweDAwLCAweGJhLCAweDEwLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHgxMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDMwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YmQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgxMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhiMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDM0LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHg3MCwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweDcwLAorCTB4M2EsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgxMiwgMHg4MSwgMHgyZiwgMHg3NCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg2NSwgMHgwMSwgMHg4MCwgMHhhMiwgMHhkYiwgMHgyYywgMHhiYywKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDM5LAorCTB4ZWUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4OGQsIDB4MmYsIDB4NzEsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MTAsIDB4MDQsIDB4MzgsIDB4MDEsIDB4NzgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgxMCwgMHgyZSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5NywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGU5LCAweDgxLCAweDkyLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4ZDUsIDB4MTAsIDB4MjcsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM3LCAweDAwLCAweDAwLCAweDI4LCAweGU5LCAweDgwLCAweDkyLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODcsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHgwMCwgMHhlNywgMHhhMCwgMHg5MiwgMHg3OSwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg5MCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweDEyLCAweGU0LCAweDM4LCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhkZiwgMHgxMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZGEsIDB4MTAsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDFiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDc5LCAweDBhLCAweDkxLCAweDM5LAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzksIDB4MGIsIDB4OTEsIDB4MzksCisJMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg1OSwgMHgwYSwgMHg5MSwgMHgzOSwKKwkweDA5LCAweDAwLCAweGU1LCAweDEwLCAweGYxLCAweDAxLCAweDAwLCAweDEwLCAweDY5LCAweDBiLCAweDkxLCAweGI5LAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODYsIDB4YTgsIDB4ODIsIDB4OGQsIDB4NmMsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhlMCwgMHgwNywgMHgwMCwgMHg5MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweGUwLCAweDA3LCAweDQwLCAweDkxLCAweDMyLAorCTB4MDAsIDB4ODAsIDB4ZWIsIDB4MTAsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhlYywgMHgxMCwgMHhlMSwgMHgyNCwgMHg4NiwgMHhjOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGUxLCAweDI0LCAweDg2LCAweGM4LCAweDg2LCAweDhkLCAweDJhLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGY0LCAweDEwLCAweDA0LCAweDMwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgzYywgMHgwMCwgMHgxNCwgMHgyOCwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODAsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHhhMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGY2LCAweDEwLCAweDgwLCAweDM5LCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODAsIDB4NmUsIDB4YjYsCisJMHgwMCwgMHhlMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDAwLCAweGUwLCAweGZkLCAweDEwLCAweDA0LCAweDM4LCAweDAwLCAweDc4LCAweDg5LCAweDhkLCAweDZlLCAweGIwLAorCTB4MTAsIDB4MDAsIDB4ZmQsIDB4MTAsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4YTUsIDB4MmYsIDB4YjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHhlZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDAwLCAweDE4LCAweDA5LCAweDAwLCAweDZlLCAweDcyLAorCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4YTksIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MSwgMHg3YywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4YmMsIDB4MDAsIDB4MTQsIDB4MjgsIDB4ODAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDgsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4NzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg5MCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDBmLCAweDExLCAweDMzLCAweGNkLCAweDAxLCAweGJjLCAweDA4LCAweDgwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NGUsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjksIDB4MjIsIDB4ZWUsIDB4ZGMsCisJMHgwMCwgMHgwMCwgMHgxNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDE0LCAweDExLCAweDA0LCAweGI4LCAweDAxLCAweDI4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MTEsIDB4OWYsIDB4NzEsIDB4MDEsIDB4ODAsIDB4YzIsIDB4MjEsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhhOSwgMHgyNCwgMHhlZSwgMHgzYywKKwkweDAwLCAweDAwLCAweDRlLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDE5LCAweDgwLCAweDkyLCAweGRmLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgyOCwgMHgxMSwgMHgwNiwgMHg4MCwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkwLCAweGJjLAorCTB4ZWUsIDB4MDUsIDB4MjAsIDB4MTEsIDB4MDYsIDB4MGMsIDB4MDIsIDB4ODAsIDB4ODIsIDB4OGQsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHg5MCwgMHg0YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDFhLCAweDExLCAweGI4LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MTgsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMywgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAxLCAweGUwLCAweDk2LCAweDIxLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjEsIDB4OTgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAwLCAweDAwLCAweDc4LCAweDQ5LCAweDQwLCAweDNjLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTksIDB4YTUsIDB4OTAsIDB4OWEsCisJMHg2MCwgMHg4OSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDIzLCAweDExLCAweGI4LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MjEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMywgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAxLCAweGUwLCAweDk2LCAweDIxLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjEsIDB4OTgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDJkLCAweDExLCAweGE4LCAweDAwLCAweDAwLCAweDA4LCAweDE5LCAweDhmLCAweDkwLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4YTEsIDB4ODksIDB4M2UsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOSwgMHhhNSwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAxLCAweGUwLCAweDk2LCAweDIxLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjEsIDB4OTgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDMwLCAweDExLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweGEyLCAweDkwLCAweGJjLAorCTB4MDAsIDB4YzAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4ODAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHhjMCwgMHg4OSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDM2LCAweDExLCAweDA0LCAweDc5LCAweDAxLCAweDgwLCAweDgyLCAweDFiLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MTEsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDkyLCAweDgxLCAweDJmLCAweDc1LAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgzYywgMHgxMSwgMHhkNSwgMHg0MSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHg5MiwKKwkweDAwLCAweDAwLCAweDM5LCAweDExLCAweDNjLCAweDkwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHhlOCwgMHgwNiwgMHhjMCwgMHg4YiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk1LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJmLCAweDcyLAorCTB4MDAsIDB4MDAsIDB4M2QsIDB4MTEsIDB4OWYsIDB4NDEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4MWIsIDB4ODcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDkwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NzIsIDB4ODAsIDB4MmYsIDB4NzQsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDI3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4ODcsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHg0NywgMHgxMSwgMHg5ZiwgMHhkOCwgMHgwMSwgMHg4MCwgMHgyMiwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MTEsIDB4OWYsIDB4ZTAsIDB4MDEsIDB4ODAsIDB4YzIsIDB4MjEsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweDAwLCAweDAwLCAweDQ3LCAweDExLCAweDlmLCAweGIwLCAweDAxLCAweDgwLCAweGQyLCAweDIxLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHgwMCwgMHgwMCwgMHg0OSwgMHgxMSwgMHgwNiwgMHg2OCwgMHgwMSwgMHg4MCwgMHg4MiwgMHg1YiwgMHg4NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDg3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NGIsIDB4MTEsIDB4MzcsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODcsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODcsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA4LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NWIsIDB4MTEsIDB4MDQsIDB4YzEsIDB4MDEsIDB4ODQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHhlOCwgMHg4NiwgMHg4ZCwgMHg5MiwgMHgzNywKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAxLCAweGU4LCAweDg2LCAweDhkLCAweDkyLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgyYywgMHg4OSwgMHg4ZCwgMHg2ZSwgMHgzNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAxLCAweDJjLCAweGE5LCAweGRiLCAweDkyLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MjksIDB4YzAsIDB4OTIsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgxOSwgMHhmYiwgMHg5MiwgMHgzZiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDI5LCAweDgwLCAweDkyLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YTksIDB4ZTQsIDB4OTIsIDB4M2YsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZiwgMHhjYywgMHgwMSwgMHhlOCwgMHgyNiwgMHhmYiwgMHg5MiwgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI5LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDIsIDB4ODAsIDB4OTIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHgyOCwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDZmLCAweGNjLCAweDAxLCAweGU4LCAweDg2LCAweGNkLCAweDJhLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4YmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHhiYywgMHg4OCwgMHhkYiwgMHg4YiwgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAxLCAweGJjLCAweDg4LCAweGRiLCAweDhiLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NmEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4YmMsIDB4ODgsIDB4ZTEsIDB4OGIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg2YSwgMHgxMSwgMHgwNCwgMHgwYywgMHgwMiwgMHg0MCwgMHhhOCwgMHhkYiwgMHg4YiwgMHhiZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDA0LCAweDg4LCAweDFiLCAweDg0LCAweDNlLAorCTB4MDAsIDB4MDAsIDB4NjksIDB4MTEsIDB4MDQsIDB4YjEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NWIsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MCwgMHgyZiwgMHg3NCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDBjLCAweDAyLCAweDgwLCAweGEyLCAweDViLCAweDgwLCAweDdjLAorCTB4MjksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjMCwgMHg4YiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDEyLCAweDAwLCAweDJjLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg2NSwgMHgwMSwgMHg4MCwgMHhhMiwgMHhkYiwgMHgyYywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4MzksCisJMHhlZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHg3MSwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZDksIDB4NGEsIDB4OTEsIDB4MzksCisJMHgzOSwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQ1LCAweDkxLCAweDMwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ODksIDB4NGQsIDB4OTEsIDB4MzYsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4OSwgMHhjZCwgMHg5MywgMHgzYywKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweGNkLCAweDkzLCAweDM2LAorCTB4MDcsIDB4MDAsIDB4NzksIDB4MTEsIDB4ZjMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODksIDB4Y2QsIDB4OTMsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxOCwgMHg5YiwgMHg4MSwgMHgwMiwgMHhlNSwgMHg3OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDE4LCAweDliLCAweDhkLCAweDA3LCAweGU1LCAweDc4LCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweGQ5LCAweDRhLCAweDkxLCAweDM5LAorCTB4M2EsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0NSwgMHg5MSwgMHgzMCwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDg5LCAweDRkLCAweDkxLCAweDM2LAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ODksIDB4Y2QsIDB4OTMsIDB4M2MsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4MiwgMHhjZCwgMHg5MywgMHgzNiwKKwkweDA3LCAweDAwLCAweDg0LCAweDExLCAweGYzLCAweDAxLCAweDAwLCAweDQwLCAweDg5LCAweGNkLCAweDkzLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MTksIDB4OWIsIDB4ODEsIDB4MDIsIDB4ZTUsIDB4NzgsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHgxOCwgMHg5YiwgMHg4ZCwgMHgwNywgMHhlNSwgMHg3OCwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwZiwgMHg0MCwgMHhmYiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDBmLCAweDQwLCAweDJiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MGYsIDB4MDAsIDB4MjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgwZiwgMHgwMCwgMHgyOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweDBmLCAweDQwLCAweDE4LCAweDMyLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHg1ZiwgMHhjYSwgMHhmOSwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDAzLCAweGMwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHg0MSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDAwLCAweDMyLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwZiwgMHg4MCwgMHgyYSwgMHgzMiwKKwkweDRjLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4OTgsIDB4MTEsIDB4OTcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MGYsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAxLCAweDg0LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM2LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4ODAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDdlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDBmLCAweDAwLCAweDdlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4YzAsIDB4ZmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHhmOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweGZhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4ZmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhYywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHhmYSwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweGZiLCAweDMyLAorCTB4MDEsIDB4MDAsIDB4Y2YsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OGYsIDB4NGQsIDB4ZmIsIDB4YjAsCisJMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhhYiwgMHhjZCwgMHhiMCwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDViLCAweGNhLCAweGIwLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MmIsIDB4ZmUsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGJlLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4MDAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgzZiwgMHg1MiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAyLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NTMsIDB4MGEsIDB4MTYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBmLCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGYsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHhhMiwgMHg2MCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweGI5LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4MGQsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MywgMHgwZCwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDUzLCAweDBhLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHhmOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDAwLCAweGZhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4ZmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjOSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4YzAsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4YjAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgzYiwgMHg0MCwgMHhiMCwgMHgzMywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGNkLCAweDRhLCAweGQwLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHgzOSwKKwkweDAwLCAweDAwLCAweGM0LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDZiLCAweDQxLCAweDkwLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjNSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweGU0LCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4YzksIDB4MTEsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjOCwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMiwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhiYywgMHgwZiwgMHgyNCwgMHgxNywgMHhiOCwKKwkweDA2LCAweDAwLCAweGMyLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweGJjLCAweDBmLCAweDY0LCAweDE2LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YmQsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4YzAsIDB4ZmIsIDB4YmMsCisJMHgyMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmYiwgMHhiYywKKwkweDAwLCAweDAwLCAweGQ3LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4ZDEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhiNywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGY3LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZjgsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmYywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDA0LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NWQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMywgMHgzMiwKKwkweDQwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZGUsIDB4MTEsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGRlLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMCwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDdlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGZhLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHg0YywgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDJhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHhiMywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGNiLCAweGMxLCAweGIwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGVmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweGMwLCAweGIwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhlZiwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAyLCAweDAwLCAweGYyLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGI0LCAweDhmLCAweDRkLCAweGZiLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDFmLCAweDQwLCAweGZiLCAweDM1LAorCTB4ZmUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweGViLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDhiLCAweGMxLCAweGIwLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YmIsIDB4MTIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZmEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhZCwgMHgxMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmYSwgMHhkMiwKKwkweDAwLCAweDAwLCAweGY5LCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4YjQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweGIwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MTIsIDB4MDAsIDB4MmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHhiYywKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwYywgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhmYSwgMHhiMiwKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MGUsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDNjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDgsIDB4MTIsIDB4OGUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MjgsIDB4YjIsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGY3LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4OGYsIDB4NGQsIDB4ZmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhmNywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDA4LCAweDAwLCAweDEwLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGY5LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwZSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDIwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MGIsIDB4MDAsIDB4MTQsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4YmMsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDBmLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgyNywgMHgwMCwgMHgxOCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmOSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDIwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MjAsIDB4MDAsIDB4MWQsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweGMwLCAweGY5LCAweDMyLAorCTB4MGQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHhjMCwgMHhmYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDNlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MWYsIDB4YzAsIDB4ZjksIDB4NWEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHhjMCwgMHhmOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDNlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MWYsIDB4YzAsIDB4ZjksIDB4M2EsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhhYywgMHg4ZiwgMHhjZCwgMHhmOSwgMHg1MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDJiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgzZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDEyLCAweDAwLCAweDJiLCAweDNhLAorCTB4MGYsIDB4MDAsIDB4MmIsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4MmIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgzZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweGMwLCAweGY5LCAweDUyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4M2EsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgzYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4M2EsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgyYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4M2QsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgzZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDM2LCAweDEyLCAweDg0LCAweDAxLCAweDAwLCAweGIwLCAweDEyLCAweDAwLCAweDJiLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4YzAsIDB4ZjksIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDczLCAweDNlLCAweDAwLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MzAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHgzYSwKKwkweDcwLCAweDAwLCAweDNiLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGY5LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAzLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MzAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBmLCAweGMwLCAweDI5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4YzAsIDB4ZjksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwZiwgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweGZhLCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4NzMsIDB4N2UsIDB4ZmEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDQ0LCAweDEyLCAweDg1LCAweDAxLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDI1LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MGUsIDB4MDAsIDB4NTMsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZmEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg0ZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgzZiwgMHhjMCwgMHhmOSwgMHg5YSwKKwkweDFjLCAweDAwLCAweDRkLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZhLCAweGJjLAorCTB4MDIsIDB4MDAsIDB4MjUsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4OGYsIDB4Y2QsIDB4ZjksIDB4ZGEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjUsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwZSwgMHgwMCwgMHg1YiwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmYSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NTcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MWYsIDB4YzAsIDB4ZjksIDB4OWEsCisJMHgyNiwgMHgwMCwgMHg1NywgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmYSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MGYsIDB4NDAsIDB4MjksIDB4MzIsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDRjLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4NTYsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHgyOSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDE4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHhhMiwgMHg2MCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDZiLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2YiwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgzLCAweDNlLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODMsIDB4M2UsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg1MywgMHgwYSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDZjLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDBmLCAweDQwLCAweDJiLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MGYsIDB4MDAsIDB4MjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgwZiwgMHgwMCwgMHgyOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDBmLCAweDgwLCAweDJhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4YzAsIDB4ZjksIDB4MzIsCisJMHg3MSwgMHgxMiwgMHg5NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwZiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDA3LCAweDAwLCAweDc0LCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweDI5LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MWYsIDB4MDAsIDB4ZmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHg4MCwgMHgyYSwgMHg5MiwKKwkweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4NCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDFmLCAweDAwLCAweDdhLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDI5LCAweGJjLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OGYsIDB4Y2QsIDB4ZmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg3NiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxMiwgMHhjMCwgMHgyOSwgMHg5YSwKKwkweDAwLCAweDAwLCAweDNhLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4MiwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4YSwgMHhmYSwgMHhiYywKKwkweGEyLCAweDYwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4ODIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhMywgMHgzZSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGEzLCAweDNlLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NTMsIDB4MGEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGY3LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDIsIDB4YzAsIDB4ZmEsIDB4MzIsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDBmLCAweDQwLCAweDJmLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGIsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MWYsIDB4YzAsIDB4ZjksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDg3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDJjLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgyZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDJkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgyZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweGZiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MmYsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMiwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNmLCAweDUyLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHhmOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDI4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4ZjgsIDB4MzIsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDBmLCAweGMwLCAweDJiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTAsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MWYsIDB4YzAsIDB4ZjksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5ZiwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHgyYiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDljLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OWMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHhmOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDI5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MjksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgyOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDJhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHhmOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDJhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgyYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDJiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4ZmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwMCwgMHhmYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhiMSwgMHgxMiwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDkwLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg5MCwgMHg1MiwKKwkweDAwLCAweDAwLCAweGIzLCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweGYyLCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhiNSwgMHgxMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MGYsIDB4NDAsIDB4ZmIsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDRjLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweGIzLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4Y2IsIDB4YzEsIDB4YjAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4YjAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhiZSwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweGMyLCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4YzgsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MzQsIDB4YjAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDIyLCAweDAwLCAweDJiLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4YzAsIDB4MzcsIDB4YWMsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDRkLCAweGIwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4YjAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjZCwgMHgxMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGNlLCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MTIsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkMCwgMHgxMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDBkLCAweDAwLCAweGNkLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGU0LCAweDE2LCAweGI4LAorCTB4MDIsIDB4MDAsIDB4Y2QsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MGYsIDB4MjQsIDB4MTcsIDB4YjgsCisJMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwZiwgMHg2NCwgMHgxNiwgMHgzOCwKKwkweDAwLCAweDAwLCAweGNkLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweGMwLCAweGZiLCAweGJjLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgzYiwgMHg0MCwgMHhiMCwgMHgzMywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGNkLCAweDRhLCAweGQwLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4MjUsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHgyYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGIwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHg1NCwKKwkweDAwLCAweDAwLCAweGRjLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCit9LAoreworCTB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCit9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjY2JlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5jCkBAIC0wLDAgKzEsMzYyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDggQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHN4Zy5jCisgKgorICogVGhlIFNYRyBkcml2ZXIgZm9yIEFsYWNyaXRlY2gncyAxMEdiZSBwcm9kdWN0cy4KKyAqCisgKiBOT1RFOiBUaGlzIGlzIHRoZSBzdGFuZGFyZCwgbm9uLWFjY2VsZXJhdGVkIHZlcnNpb24gb2YgQWxhY3JpdGVjaCdzCisgKiAgICAgICBJUy1OSUMgZHJpdmVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisKKyNkZWZpbmUgU0xJQ19EVU1QX0VOQUJMRUQJCTAKKyNkZWZpbmUgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAkJMAorI2RlZmluZSBMSU5VWF9GUkVFU19BREFQVEVSX1JFU09VUkNFUwkxCisjZGVmaW5lIFNYR19PRkZMT0FEX0lQX0NIRUNLU1VNCQkwCisjZGVmaW5lIFNYR19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQJMAorI2RlZmluZSBWUENJCQkJCTAKKyNkZWZpbmUgREJHCQkJCTEKKyNkZWZpbmUgQVRLX0RFQlVHCQkJMQorCisjaW5jbHVkZSAic3hnX29zLmgiCisjaW5jbHVkZSAic3hnaHcuaCIKKyNpbmNsdWRlICJzeGdoaWYuaCIKKyNpbmNsdWRlICJzeGcuaCIKKyNpbmNsdWRlICJzeGdkYmcuaCIKKworI2luY2x1ZGUgInN4Z3BoeWNvZGUuaCIKKyNpbmNsdWRlICJzYWhhcmFkYmdkb3dubG9hZC5oIgorCitzdGF0aWMgaW50IHN4Z19hbGxvY2F0ZV9idWZmZXJfbWVtb3J5KHBfYWRhcHRlcl90IGFkYXB0ZXIsIHUzMiBTaXplLAorCQkJCSAgICAgIFNYR19CVUZGRVJfVFlQRSBCdWZmZXJUeXBlKTsKK3N0YXRpYyB2b2lkIHN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLCB2b2lkICpSY3ZCbG9jaywKKwkJCQkJICAgZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MsCisJCQkJCSAgIHUzMiBMZW5ndGgpOworc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX3NnbF9idWZmZXJfY29tcGxldGUocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCQkJICAgICBQU1hHX1NDQVRURVJfR0FUSEVSIFN4Z1NnbCwKKwkJCQkJICAgICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKKwkJCQkJICAgICB1MzIgTGVuZ3RoKTsKKworc3RhdGljIHZvaWQgc3hnX21jYXN0X2luaXRfY3JjMzIodm9pZCk7CisKK3N0YXRpYyBpbnQgc3hnX2VudHJ5X29wZW4ocF9uZXRfZGV2aWNlIGRldik7CitzdGF0aWMgaW50IHN4Z19lbnRyeV9oYWx0KHBfbmV0X2RldmljZSBkZXYpOworc3RhdGljIGludCBzeGdfaW9jdGwocF9uZXRfZGV2aWNlIGRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CitzdGF0aWMgaW50IHN4Z19zZW5kX3BhY2tldHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgcF9uZXRfZGV2aWNlIGRldik7CitzdGF0aWMgaW50IHN4Z190cmFuc21pdF9wYWNrZXQocF9hZGFwdGVyX3QgYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitzdGF0aWMgdm9pZCBzeGdfZHVtYl9zZ2woUFNDQVRURVJfR0FUSEVSX0xJU1QgcFNnbCwgUFNYR19TQ0FUVEVSX0dBVEhFUiBTeGdTZ2wpOworCitzdGF0aWMgdm9pZCBzeGdfaGFuZGxlX2ludGVycnVwdChwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKK3N0YXRpYyBpbnQgc3hnX3Byb2Nlc3NfaXNyKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHUzMiBNZXNzYWdlSWQpOworc3RhdGljIHUzMiBzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLCB1MzIgUnNzSWQpOworc3RhdGljIHZvaWQgc3hnX2NvbXBsZXRlX3Nsb3dfc2VuZChwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc3hnX3Nsb3dfcmVjZWl2ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLCBQU1hHX0VWRU5UIEV2ZW50KTsKK3N0YXRpYyB2b2lkIHN4Z19wcm9jZXNzX3Jjdl9lcnJvcihwX2FkYXB0ZXJfdCBhZGFwdGVyLCB1MzIgRXJyb3JTdGF0dXMpOworc3RhdGljIGJvb2wgc3hnX21hY19maWx0ZXIocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCSAgIHBfZXRoZXJfaGVhZGVyIEV0aGVySGRyLCB1c2hvcnQgbGVuZ3RoKTsKKworI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3hnX2dldF9zdGF0cyhwX25ldF9kZXZpY2UgZGV2KTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHN4Z19tYWNfc2V0X2FkZHJlc3MocF9uZXRfZGV2aWNlIGRldiwgdm9pZCAqcHRyKTsKKworc3RhdGljIHZvaWQgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkcihwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKKworc3RhdGljIHZvaWQgc3hnX3VubWFwX21taW9fc3BhY2UocF9hZGFwdGVyX3QgYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzeGdfbWNhc3Rfc2V0X21hc2socF9hZGFwdGVyX3QgYWRhcHRlcik7CisKK3N0YXRpYyBpbnQgc3hnX2luaXRpYWxpemVfYWRhcHRlcihwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHN4Z19zdG9ja19yY3ZfYnVmZmVycyhwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHN4Z19jb21wbGV0ZV9kZXNjcmlwdG9yX2Jsb2NrcyhwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJCQkgICB1bnNpZ25lZCBjaGFyIEluZGV4KTsKK3N0YXRpYyBpbnQgc3hnX2luaXRpYWxpemVfbGluayhwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKK3N0YXRpYyBpbnQgc3hnX3BoeV9pbml0KHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIHZvaWQgc3hnX2xpbmtfZXZlbnQocF9hZGFwdGVyX3QgYWRhcHRlcik7CitzdGF0aWMgU1hHX0xJTktfU1RBVEUgc3hnX2dldF9saW5rX3N0YXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIHZvaWQgc3hnX2xpbmtfc3RhdGUocF9hZGFwdGVyX3QgYWRhcHRlciwgU1hHX0xJTktfU1RBVEUgTGlua1N0YXRlKTsKK3N0YXRpYyBpbnQgc3hnX3dyaXRlX21kaW9fcmVnKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkgICAgICB1MzIgRGV2QWRkciwgdTMyIFJlZ0FkZHIsIHUzMiBWYWx1ZSk7CitzdGF0aWMgaW50IHN4Z19yZWFkX21kaW9fcmVnKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkgICAgIHUzMiBEZXZBZGRyLCB1MzIgUmVnQWRkciwgdTMyICpwVmFsdWUpOworc3RhdGljIHZvaWQgc3hnX21jYXN0X3NldF9saXN0KHBfbmV0X2RldmljZSBkZXYpOworCisjZGVmaW5lIFhYWFRPRE8gMAorCitzdGF0aWMgdW5zaWduZWQgaW50IHN4Z19maXJzdF9pbml0ID0gMTsKK3N0YXRpYyBjaGFyICpzeGdfYmFubmVyID0KKyAgICAiQWxhY3JpdGVjaCBTTElDIFRlY2hub2xvZ3kodG0pIFNlcnZlciBhbmQgU3RvcmFnZSAxMEdiZSBBY2NlbGVyYXRvciAoTm9uLUFjY2VsZXJhdGVkKVxuIjsKKworc3RhdGljIGludCBzeGdfZGVidWcgPSAxOworc3RhdGljIGludCBkZWJ1ZyA9IC0xOworc3RhdGljIHBfbmV0X2RldmljZSBoZWFkX25ldGRldmljZSA9IE5VTEw7CisKK3N0YXRpYyBzeGdiYXNlX2RyaXZlcl90IHN4Z19nbG9iYWwgPSB7CisJLmR5bmFtaWNfaW50YWdnID0gMSwKK307CitzdGF0aWMgaW50IGludGFnZ19kZWxheSA9IDEwMDsKK3N0YXRpYyB1MzIgZHluYW1pY19pbnRhZ2cgPSAwOworCisjZGVmaW5lIERSVl9OQU1FCSJzeGciCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAuMSIKKyNkZWZpbmUgRFJWX0FVVEhPUgkiQWxhY3JpdGVjaCwgSW5jLiBFbmdpbmVlcmluZyIKKyNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJBbGFjcml0ZWNoIFNMSUMgVGVjaG9ub2xvZ3kodG0pIE5vbi1BY2NlbGVyYXRlZCAxMEdiZSBEcml2ZXIiCisjZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodCAyMDAwLTIwMDggQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4iCisKK01PRFVMRV9BVVRIT1IoRFJWX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGR5bmFtaWNfaW50YWdnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkeW5hbWljX2ludGFnZywgIkR5bmFtaWMgSW50ZXJydXB0IEFnZ3JlZ2F0aW9uIFNldHRpbmciKTsKK21vZHVsZV9wYXJhbShpbnRhZ2dfZGVsYXksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGludGFnZ19kZWxheSwgInVTZWMgSW50ZXJydXB0IEFnZ3JlZ2F0aW9uIERlbGF5Iik7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzeGdfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CisJe1BDSV9ERVZJQ0UoU1hHX1ZFTkRPUl9JRCwgU1hHX0RFVklDRV9JRCl9LAorCXswLH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzeGdfcGNpX3RibCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc3hnX3JlZzMyX3dyaXRlKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUsIGJvb2wgZmx1c2gpCit7CisJd3JpdGVsKHZhbHVlLCByZWcpOworCWlmIChmbHVzaCkKKwkJbWIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN4Z19yZWc2NF93cml0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLCB2b2lkIF9faW9tZW0gKnJlZywKKwkJCQkgICB1NjQgdmFsdWUsIHUzMiBjcHUpCit7CisJdTMyIHZhbHVlX2hpZ2ggPSAodTMyKSAodmFsdWUgPj4gMzIpOworCXUzMiB2YWx1ZV9sb3cgPSAodTMyKSAodmFsdWUgJiAweDAwMDAwMDAwRkZGRkZGRkYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Qml0NjRSZWdMb2NrLCBmbGFncyk7CisJd3JpdGVsKHZhbHVlX2hpZ2gsICh2b2lkIF9faW9tZW0gKikoJmFkYXB0ZXItPlVjb2RlUmVnc1tjcHVdLlVwcGVyKSk7CisJd3JpdGVsKHZhbHVlX2xvdywgcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5CaXQ2NFJlZ0xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc3hnX2luaXRfZHJpdmVyKHZvaWQpCit7CisJaWYgKHN4Z19maXJzdF9pbml0KSB7CisJCURCR19FUlJPUigic3hnOiAlcyBzeGdfZmlyc3RfaW5pdCBzZXQgamlmZmllc1slbHhdXG4iLAorCQkJICBfX0ZVTkNUSU9OX18sIGppZmZpZXMpOworCQlzeGdfZmlyc3RfaW5pdCA9IDA7CisJCXNwaW5fbG9ja19pbml0KCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19kYmdfbWFjYWRkcnMocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlEQkdfRVJST1IoIiAgKCVzKSBjdXJyICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0sCisJCSAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdLAorCQkgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzNdLCBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSwKKwkJICBhZGFwdGVyLT5jdXJybWFjYWRkcls1XSk7CisJREJHX0VSUk9SKCIgICglcykgbWFjICAlMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWFxuIiwKKwkJICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPm1hY2FkZHJbMF0sCisJCSAgYWRhcHRlci0+bWFjYWRkclsxXSwgYWRhcHRlci0+bWFjYWRkclsyXSwKKwkJICBhZGFwdGVyLT5tYWNhZGRyWzNdLCBhZGFwdGVyLT5tYWNhZGRyWzRdLAorCQkgIGFkYXB0ZXItPm1hY2FkZHJbNV0pOworCXJldHVybjsKK30KKworLy8gU1hHIEdsb2JhbHMKK3N0YXRpYyBTWEdfRFJJVkVSIFN4Z0RyaXZlcjsKKworI2lmZGVmICBBVEtEQkcKK3N0YXRpYyBzeGdfdHJhY2VfYnVmZmVyX3QgTFN4Z1RyYWNlQnVmZmVyOworI2VuZGlmIC8qIEFUS0RCRyAqLworc3RhdGljIHN4Z190cmFjZV9idWZmZXJfdCAqU3hnVHJhY2VCdWZmZXIgPSBOVUxMOworCisvKgorICogc3hnX2Rvd25sb2FkX21pY3JvY29kZQorICoKKyAqIERvd25sb2FkIE1pY3JvY29kZSB0byBTYWhhcmEgYWRhcHRlcgorICoKKyAqIEFyZ3VtZW50cyAtCisgKgkJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgkJVWNvZGVTZWwJLSBtaWNyb2NvZGUgZmlsZSBzZWxlY3Rpb24KKyAqCisgKiBSZXR1cm4KKyAqCWludAorICovCitzdGF0aWMgYm9vbCBzeGdfZG93bmxvYWRfbWljcm9jb2RlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIFNYR19VQ09ERV9TRUwgVWNvZGVTZWwpCit7CisJUFNYR19IV19SRUdTIEh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwl1MzIgU2VjdGlvbjsKKwl1MzIgVGhpc1NlY3Rpb25TaXplOworCXUzMiAqSW5zdHJ1Y3Rpb24gPSBOVUxMOworCXUzMiBCYXNlQWRkcmVzcywgQWRkcmVzc09mZnNldCwgQWRkcmVzczsKKy8vICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIEZhaWx1cmU7CisJdTMyIFZhbHVlUmVhZDsKKwl1MzIgaTsKKwl1MzIgbnVtU2VjdGlvbnMgPSAwOworCXUzMiBzZWN0aW9uU2l6ZVsxNl07CisJdTMyIHNlY3Rpb25TdGFydFsxNl07CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEbmxkVWNvZCIsCisJCSAgYWRhcHRlciwgMCwgMCwgMCk7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSXG4iLCBfX0ZVTkNUSU9OX18pOworCisJc3dpdGNoIChVY29kZVNlbCkgeworCWNhc2UgU1hHX1VDT0RFX1NBSEFSQToJLy8gU2FoYXJhIG9wZXJhdGlvbmFsIHVjb2RlCisJCW51bVNlY3Rpb25zID0gU051bVNlY3Rpb25zOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtU2VjdGlvbnM7IGkrKykgeworCQkJc2VjdGlvblNpemVbaV0gPSBTU2VjdGlvblNpemVbaV07CisJCQlzZWN0aW9uU3RhcnRbaV0gPSBTU2VjdGlvblN0YXJ0W2ldOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogV29haCwgYmlnIGVycm9yIHdpdGggdGhlIG1pY3JvY29kZSFcbiIpOworCQlicmVhazsKKwl9CisKKwlEQkdfRVJST1IoInN4ZzogUkVTRVQgVEhFIENBUkRcbiIpOworCS8vIEZpcnN0LCByZXNldCB0aGUgY2FyZAorCVdSSVRFX1JFRyhId1JlZ3MtPlJlc2V0LCAweERFQUQsIEZMVVNIKTsKKworCS8vIERvd25sb2FkIGVhY2ggc2VjdGlvbiBvZiB0aGUgbWljcm9jb2RlIGFzIHNwZWNpZmllZCBpbgorCS8vIGl0cyBkb3dubG9hZCBmaWxlLiAgVGhlICpkb3dubG9hZC5jIGZpbGUgaXMgZ2VuZXJhdGVkIHVzaW5nCisJLy8gdGhlIHNhaGFyYW9ianRvYyBmYWNpbGl0eSB3aGljaCBjb252ZXJ0cyB0aGUgbWV0YXN0ZXAgLm9iagorCS8vIGZpbGUgdG8gYSAuYyBmaWxlIHdoaWNoIGNvbnRhaW5zIGEgdHdvIGRpbWVudGlvbmFsIGFycmF5LgorCWZvciAoU2VjdGlvbiA9IDA7IFNlY3Rpb24gPCBudW1TZWN0aW9uczsgU2VjdGlvbisrKSB7CisJCURCR19FUlJPUigic3hnOiBTRUNUSU9OICMgJWRcbiIsIFNlY3Rpb24pOworCQlzd2l0Y2ggKFVjb2RlU2VsKSB7CisJCWNhc2UgU1hHX1VDT0RFX1NBSEFSQToKKwkJCUluc3RydWN0aW9uID0gKHUzMiAqKSAmIFNhaGFyYVVDb2RlW1NlY3Rpb25dWzBdOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlBU1NFUlQoMCk7CisJCQlicmVhazsKKwkJfQorCQlCYXNlQWRkcmVzcyA9IHNlY3Rpb25TdGFydFtTZWN0aW9uXTsKKwkJVGhpc1NlY3Rpb25TaXplID0gc2VjdGlvblNpemVbU2VjdGlvbl0gLyAxMjsJLy8gU2l6ZSBpbiBpbnN0cnVjdGlvbnMKKwkJZm9yIChBZGRyZXNzT2Zmc2V0ID0gMDsgQWRkcmVzc09mZnNldCA8IFRoaXNTZWN0aW9uU2l6ZTsKKwkJICAgICBBZGRyZXNzT2Zmc2V0KyspIHsKKwkJCUFkZHJlc3MgPSBCYXNlQWRkcmVzcyArIEFkZHJlc3NPZmZzZXQ7CisJCQlBU1NFUlQoKEFkZHJlc3MgJiB+TUlDUk9DT0RFX0FERFJFU1NfTUFTSykgPT0gMCk7CisJCQkvLyBXcml0ZSBpbnN0cnVjdGlvbiBiaXRzIDMxIC0gMAorCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhTG93LCAqSW5zdHJ1Y3Rpb24sIEZMVVNIKTsKKwkJCS8vIFdyaXRlIGluc3RydWN0aW9uIGJpdHMgNjMtMzIKKwkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YU1pZGRsZSwgKihJbnN0cnVjdGlvbiArIDEpLAorCQkJCSAgRkxVU0gpOworCQkJLy8gV3JpdGUgaW5zdHJ1Y3Rpb24gYml0cyA5NS02NAorCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhSGlnaCwgKihJbnN0cnVjdGlvbiArIDIpLAorCQkJCSAgRkxVU0gpOworCQkJLy8gV3JpdGUgaW5zdHJ1Y3Rpb24gYWRkcmVzcyB3aXRoIHRoZSBXUklURSBiaXQgc2V0CisJCQlXUklURV9SRUcoSHdSZWdzLT5VY29kZUFkZHIsCisJCQkJICAoQWRkcmVzcyB8IE1JQ1JPQ09ERV9BRERSRVNTX1dSSVRFKSwgRkxVU0gpOworCQkJLy8gU2FoYXJhIGJ1ZyBpbiB0aGUgdWNvZGUgZG93bmxvYWQgbG9naWMgLSB0aGUgd3JpdGUgdG8gRGF0YUxvdworCQkJLy8gZm9yIHRoZSBuZXh0IGluc3RydWN0aW9uIGNvdWxkIGdldCBjb3JydXB0ZWQuICBUbyBhdm9pZCB0aGlzLAorCQkJLy8gd3JpdGUgdG8gRGF0YUxvdyBhZ2FpbiBmb3IgdGhpcyBpbnN0cnVjdGlvbiAod2hpY2ggbWF5IGdldAorCQkJLy8gY29ycnVwdGVkLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIpLCB0aGVuIGluY3JlbWVudCB0aGUgYWRkcmVzcworCQkJLy8gYW5kIHdyaXRlIHRoZSBkYXRhIGZvciB0aGUgbmV4dCBpbnN0cnVjdGlvbiB0byBEYXRhTG93LiAgVGhhdAorCQkJLy8gd3JpdGUgc2hvdWxkIHN1Y2NlZWQuCisJCQlXUklURV9SRUcoSHdSZWdzLT5VY29kZURhdGFMb3csICpJbnN0cnVjdGlvbiwgVFJVRSk7CisJCQkvLyBBZHZhbmNlIDMgdTMyUyB0byBzdGFydCBvZiBuZXh0IGluc3RydWN0aW9uCisJCQlJbnN0cnVjdGlvbiArPSAzOworCQl9CisJfQorCS8vIE5vdyByZXBlYXQgdGhlIGVudGlyZSBvcGVyYXRpb24gcmVhZGluZyB0aGUgaW5zdHJ1Y3Rpb24gYmFjayBhbmQKKwkvLyBjaGVja2luZyBmb3IgcGFyaXR5IGVycm9ycworCWZvciAoU2VjdGlvbiA9IDA7IFNlY3Rpb24gPCBudW1TZWN0aW9uczsgU2VjdGlvbisrKSB7CisJCURCR19FUlJPUigic3hnOiBjaGVjayBTRUNUSU9OICMgJWRcbiIsIFNlY3Rpb24pOworCQlzd2l0Y2ggKFVjb2RlU2VsKSB7CisJCWNhc2UgU1hHX1VDT0RFX1NBSEFSQToKKwkJCUluc3RydWN0aW9uID0gKHUzMiAqKSAmIFNhaGFyYVVDb2RlW1NlY3Rpb25dWzBdOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlBU1NFUlQoMCk7CisJCQlicmVhazsKKwkJfQorCQlCYXNlQWRkcmVzcyA9IHNlY3Rpb25TdGFydFtTZWN0aW9uXTsKKwkJVGhpc1NlY3Rpb25TaXplID0gc2VjdGlvblNpemVbU2VjdGlvbl0gLyAxMjsJLy8gU2l6ZSBpbiBpbnN0cnVjdGlvbnMKKwkJZm9yIChBZGRyZXNzT2Zmc2V0ID0gMDsgQWRkcmVzc09mZnNldCA8IFRoaXNTZWN0aW9uU2l6ZTsKKwkJICAgICBBZGRyZXNzT2Zmc2V0KyspIHsKKwkJCUFkZHJlc3MgPSBCYXNlQWRkcmVzcyArIEFkZHJlc3NPZmZzZXQ7CisJCQkvLyBXcml0ZSB0aGUgYWRkcmVzcyB3aXRoIHRoZSBSRUFEIGJpdCBzZXQKKwkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlQWRkciwKKwkJCQkgIChBZGRyZXNzIHwgTUlDUk9DT0RFX0FERFJFU1NfUkVBRCksIEZMVVNIKTsKKwkJCS8vIFJlYWQgaXQgYmFjayBhbmQgY2hlY2sgcGFyaXR5IGJpdC4KKwkJCVJFQURfUkVHKEh3UmVncy0+VWNvZGVBZGRyLCBWYWx1ZVJlYWQpOworCQkJaWYgKFZhbHVlUmVhZCAmIE1JQ1JPQ09ERV9BRERSRVNTX1BBUklUWSkgeworCQkJCURCR19FUlJPUigic3hnOiAlcyBQQVJJVFkgRVJST1JcbiIsCisJCQkJCSAgX19GVU5DVElPTl9fKTsKKworCQkJCXJldHVybiAoRkFMU0UpOwkvLyBQYXJpdHkgZXJyb3IKKwkJCX0KKwkJCUFTU0VSVCgoVmFsdWVSZWFkICYgTUlDUk9DT0RFX0FERFJFU1NfTUFTSykgPT0gQWRkcmVzcyk7CisJCQkvLyBSZWFkIHRoZSBpbnN0cnVjdGlvbiBiYWNrIGFuZCBjb21wYXJlCisJCQlSRUFEX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUxvdywgVmFsdWVSZWFkKTsKKwkJCWlmIChWYWx1ZVJlYWQgIT0gKkluc3RydWN0aW9uKSB7CisJCQkJREJHX0VSUk9SKCJzeGc6ICVzIE1JU0NPTVBBUkUgTE9XXG4iLAorCQkJCQkgIF9fRlVOQ1RJT05fXyk7CisJCQkJcmV0dXJuIChGQUxTRSk7CS8vIE1pc2NvbXBhcmUKKwkJCX0KKwkJCVJFQURfUkVHKEh3UmVncy0+VWNvZGVEYXRhTWlkZGxlLCBWYWx1ZVJlYWQpOworCQkJaWYgKFZhbHVlUmVhZCAhPSAqKEluc3RydWN0aW9uICsgMSkpIHsKKwkJCQlEQkdfRVJST1IoInN4ZzogJXMgTUlTQ09NUEFSRSBNSURETEVcbiIsCisJCQkJCSAgX19GVU5DVElPTl9fKTsKKwkJCQlyZXR1cm4gKEZBTFNFKTsJLy8gTWlzY29tcGFyZQorCQkJfQorCQkJUkVBRF9SRUcoSHdSZWdzLT5VY29kZURhdGFIaWdoLCBWYWx1ZVJlYWQpOworCQkJaWYgKFZhbHVlUmVhZCAhPSAqKEluc3RydWN0aW9uICsgMikpIHsKKwkJCQlEQkdfRVJST1IoInN4ZzogJXMgTUlTQ09NUEFSRSBISUdIXG4iLAorCQkJCQkgIF9fRlVOQ1RJT05fXyk7CisJCQkJcmV0dXJuIChGQUxTRSk7CS8vIE1pc2NvbXBhcmUKKwkJCX0KKwkJCS8vIEFkdmFuY2UgMyB1MzJTIHRvIHN0YXJ0IG9mIG5leHQgaW5zdHJ1Y3Rpb24KKwkJCUluc3RydWN0aW9uICs9IDM7CisJCX0KKwl9CisKKwkvLyBFdmVyeXRoaW5nIE9LLCBHby4KKwlXUklURV9SRUcoSHdSZWdzLT5VY29kZUFkZHIsIE1JQ1JPQ09ERV9BRERSRVNTX0dPLCBGTFVTSCk7CisKKwkvLyBQb2xsIHRoZSBDYXJkVXAgcmVnaXN0ZXIgdG8gd2FpdCBmb3IgbWljcm9jb2RlIHRvIGluaXRpYWxpemUKKwkvLyBHaXZlIHVwIGFmdGVyIDEwLDAwMCBhdHRlbXBzICg1MDBtcykuCisJZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKwkJdWRlbGF5KDUwKTsKKwkJUkVBRF9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkNhcmRVcCwgVmFsdWVSZWFkKTsKKwkJaWYgKFZhbHVlUmVhZCA9PSAweENBRkUpIHsKKwkJCURCR19FUlJPUigic3hnOiAlcyBCT08gWUEgMHhDQUZFXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gMTAwMDApIHsKKwkJREJHX0VSUk9SKCJzeGc6ICVzIFRJTUVPVVRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkJcmV0dXJuIChGQUxTRSk7CS8vIFRpbWVvdXQKKwl9CisJLy8gTm93IHdyaXRlIHRoZSBMb2FkU3luYyByZWdpc3Rlci4gIFRoaXMgaXMgdXNlZCB0bworCS8vIHN5bmNocm9uaXplIHdpdGggdGhlIGNhcmQgc28gaXQgY2FuIHNjcmliYmxlIG9uIHRoZSBtZW1vcnkKKwkvLyB0aGF0IGNvbnRhaW5lZCAweENBRkUgZnJvbSB0aGUgIkNhcmRVcCIgc3RlcCBhYm92ZQorCWlmIChVY29kZVNlbCA9PSBTWEdfVUNPREVfU0FIQVJBKSB7CisJCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uTG9hZFN5bmMsIDAsIEZMVVNIKTsKKwl9CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYRG5sZFVjZCIsCisJCSAgYWRhcHRlciwgMCwgMCwgMCk7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gKFRSVUUpOworfQorCisvKgorICogc3hnX2FsbG9jYXRlX3Jlc291cmNlcyAtIEFsbG9jYXRlIG1lbW9yeSBhbmQgbG9ja3MKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuCisgKglpbnQKKyAqLworc3RhdGljIGludCBzeGdfYWxsb2NhdGVfcmVzb3VyY2VzKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJaW50IHN0YXR1czsKKwl1MzIgaTsKKwl1MzIgUnNzSWRzLCBJc3JDb3VudDsKKy8vICAgICAgUFNYR19YTVRfUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG10UmluZzsKKy8vICAgICAgUFNYR19SQ1ZfUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmN2UmluZzsKKworCURCR19FUlJPUigiJXMgRU5URVJcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbGxvY1JlcyIsCisJCSAgYWRhcHRlciwgMCwgMCwgMCk7CisKKwkvLyBXaW5kb3dzIHRlbGxzIHVzIGhvdyBtYW55IENQVXMgaXQgcGxhbnMgdG8gdXNlIGZvcgorCS8vIFJTUworCVJzc0lkcyA9IFNYR19SU1NfQ1BVX0NPVU5UKGFkYXB0ZXIpOworCUlzckNvdW50ID0gYWRhcHRlci0+TXNpRW5hYmxlZCA/IFJzc0lkcyA6IDE7CisKKwlEQkdfRVJST1IoIiVzIFNldHVwIHRoZSBzcGlubG9ja3NcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvLyBBbGxvY2F0ZSBzcGlubG9ja3MgYW5kIGluaXRpYWxpemUgbGlzdGhlYWRzIGZpcnN0LgorCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPlNnbFFMb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+WG10WmVyb0xvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5CaXQ2NFJlZ0xvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisKKwlEQkdfRVJST1IoIiVzIFNldHVwIHRoZSBsaXN0c1xuIiwgX19GVU5DVElPTl9fKTsKKworCUluaXRpYWxpemVMaXN0SGVhZCgmYWRhcHRlci0+RnJlZVJjdkJ1ZmZlcnMpOworCUluaXRpYWxpemVMaXN0SGVhZCgmYWRhcHRlci0+RnJlZVJjdkJsb2Nrcyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5BbGxSY3ZCbG9ja3MpOworCUluaXRpYWxpemVMaXN0SGVhZCgmYWRhcHRlci0+RnJlZVNnbEJ1ZmZlcnMpOworCUluaXRpYWxpemVMaXN0SGVhZCgmYWRhcHRlci0+QWxsU2dsQnVmZmVycyk7CisKKwkvLyBNYXJrIHRoZXNlIGJhc2ljIGFsbG9jYXRpb25zIGRvbmUuICBUaGlzIGZsYWdzIGVzc2VudGlhbGx5CisJLy8gdGVsbHMgdGhlIFN4Z0ZyZWVSZXNvdXJjZXMgcm91dGluZSB0aGF0IGl0IGNhbiBncmFiIHNwaW5sb2NrcworCS8vIGFuZCByZWZlcmVuY2UgbGlzdGhlYWRzLgorCWFkYXB0ZXItPkJhc2ljQWxsb2NhdGlvbnMgPSBUUlVFOworCS8vIE1haW4gYWxsb2NhdGlvbiBsb29wLiAgU3RhcnQgd2l0aCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYnkKKwkvLyB0aGUgbWljcm9jb2RlIGFuZCBiYWNrIG9mZiBpZiBtZW1vcnkgYWxsb2NhdGlvbgorCS8vIGZhaWxzLiAgSWYgd2UgaGl0IGEgbWluaW11bSwgZmFpbC4KKworCWZvciAoOzspIHsKKwkJREJHX0VSUk9SKCIlcyBBbGxvY2F0ZSBYbXRSaW5ncyBzaXplWyVseF1cbiIsIF9fRlVOQ1RJT05fXywKKwkJCSAgKHNpemVvZihTWEdfWE1UX1JJTkcpICogMSkpOworCisJCS8vIFN0YXJ0IHdpdGggYmlnIGl0ZW1zIGZpcnN0IC0gcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmluZ3MuICBBdCB0aGUgbW9tZW50CisJCS8vIEknbSBnb2luZyB0byBrZWVwIHRoZSByaW5nIHNpemUgZml4ZWQgYW5kIGFkanVzdCB0aGUgbnVtYmVyIG9mCisJCS8vIFRDQnMgaWYgd2UgZmFpbC4gIExhdGVyIHdlIG1pZ2h0IGNvbnNpZGVyIHJlZHVjaW5nIHRoZSByaW5nIHNpemUgYXMgd2VsbC4uCisJCWFkYXB0ZXItPlhtdFJpbmdzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkJCSBzaXplb2YoU1hHX1hNVF9SSU5HKSAqCisJCQkJCQkJIDEsCisJCQkJCQkJICZhZGFwdGVyLT5QWG10UmluZ3MpOworCQlEQkdfRVJST1IoIiVzIFhtdFJpbmdzWyVwXVxuIiwgX19GVU5DVElPTl9fLCBhZGFwdGVyLT5YbXRSaW5ncyk7CisKKwkJaWYgKCFhZGFwdGVyLT5YbXRSaW5ncykgeworCQkJZ290byBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOworCQl9CisJCW1lbXNldChhZGFwdGVyLT5YbXRSaW5ncywgMCwgc2l6ZW9mKFNYR19YTVRfUklORykgKiAxKTsKKworCQlEQkdfRVJST1IoIiVzIEFsbG9jYXRlIFJjdlJpbmdzIHNpemVbJWx4XVxuIiwgX19GVU5DVElPTl9fLAorCQkJICAoc2l6ZW9mKFNYR19SQ1ZfUklORykgKiAxKSk7CisJCWFkYXB0ZXItPlJjdlJpbmdzID0KKwkJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJIHNpemVvZihTWEdfUkNWX1JJTkcpICogMSwKKwkJCQkJICZhZGFwdGVyLT5QUmN2UmluZ3MpOworCQlEQkdfRVJST1IoIiVzIFJjdlJpbmdzWyVwXVxuIiwgX19GVU5DVElPTl9fLCBhZGFwdGVyLT5SY3ZSaW5ncyk7CisJCWlmICghYWRhcHRlci0+UmN2UmluZ3MpIHsKKwkJCWdvdG8gcGVyX3RjYl9hbGxvY2F0aW9uX2ZhaWxlZDsKKwkJfQorCQltZW1zZXQoYWRhcHRlci0+UmN2UmluZ3MsIDAsIHNpemVvZihTWEdfUkNWX1JJTkcpICogMSk7CisJCWJyZWFrOworCisJICAgICAgcGVyX3RjYl9hbGxvY2F0aW9uX2ZhaWxlZDoKKwkJLy8gYW4gYWxsb2NhdGlvbiBmYWlsZWQuICBGcmVlIGFueSBzdWNjZXNzZnVsIGFsbG9jYXRpb25zLgorCQlpZiAoYWRhcHRlci0+WG10UmluZ3MpIHsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkgICAgc2l6ZW9mKFNYR19YTVRfUklORykgKiA0MDk2LAorCQkJCQkgICAgYWRhcHRlci0+WG10UmluZ3MsCisJCQkJCSAgICBhZGFwdGVyLT5QWG10UmluZ3MpOworCQkJYWRhcHRlci0+WG10UmluZ3MgPSBOVUxMOworCQl9CisJCWlmIChhZGFwdGVyLT5SY3ZSaW5ncykgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCSAgICBzaXplb2YoU1hHX1JDVl9SSU5HKSAqIDQwOTYsCisJCQkJCSAgICBhZGFwdGVyLT5SY3ZSaW5ncywKKwkJCQkJICAgIGFkYXB0ZXItPlBSY3ZSaW5ncyk7CisJCQlhZGFwdGVyLT5SY3ZSaW5ncyA9IE5VTEw7CisJCX0KKwkJLy8gTG9vcCBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4uLi4KKwl9CisKKwlEQkdfRVJST1IoIiVzIEluaXRpYWxpemUgUkNWIFpFUk8gYW5kIFhNVCBaRVJPIHJpbmdzXG4iLCBfX0ZVTkNUSU9OX18pOworCS8vIEluaXRpYWxpemUgcmN2IHplcm8gYW5kIHhtdCB6ZXJvIHJpbmdzCisJU1hHX0lOSVRJQUxJWkVfUklORyhhZGFwdGVyLT5SY3ZSaW5nWmVyb0luZm8sIFNYR19SQ1ZfUklOR19TSVpFKTsKKwlTWEdfSU5JVElBTElaRV9SSU5HKGFkYXB0ZXItPlhtdFJpbmdaZXJvSW5mbywgU1hHX1hNVF9SSU5HX1NJWkUpOworCisJLy8gU2FuaXR5IGNoZWNrIHJlY2VpdmUgZGF0YSBzdHJ1Y3R1cmUgZm9ybWF0CisJQVNTRVJUKChhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9PSBTWEdfUkNWX0RBVEFfQlVGRkVSX1NJWkUpIHx8CisJICAgICAgIChhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9PSBTWEdfUkNWX0pVTUJPX0JVRkZFUl9TSVpFKSk7CisJQVNTRVJUKHNpemVvZihTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0spID09CisJICAgICAgIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19TSVpFKTsKKworCS8vIEFsbG9jYXRlIHJlY2VpdmUgZGF0YSBidWZmZXJzLiAgV2UgYWxsb2NhdGUgYSBibG9jayBvZiBidWZmZXJzIGFuZAorCS8vIGEgY29ycmVzcG9uZGluZyBkZXNjcmlwdG9yIGJsb2NrIGF0IG9uY2UuICBTZWUgc3hnaHcuaDpTWEdfUkNWX0JMT0NLCisJZm9yIChpID0gMDsgaSA8IFNYR19JTklUSUFMX1JDVl9EQVRBX0JVRkZFUlM7CisJICAgICBpICs9IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLKSB7CisJCXN4Z19hbGxvY2F0ZV9idWZmZXJfbWVtb3J5KGFkYXB0ZXIsCisJCQkJCSAgIFNYR19SQ1ZfQkxPQ0tfU0laRShhZGFwdGVyLT4KKwkJCQkJCQkgICAgICBSZWNlaXZlQnVmZmVyU2l6ZSksCisJCQkJCSAgIFNYR19CVUZGRVJfVFlQRV9SQ1YpOworCX0KKwkvLyBOQkwgcmVzb3VyY2UgYWxsb2NhdGlvbiBjYW4gZmFpbCBpbiB0aGUgJ0FsbG9jYXRlQ29tcGxldGUnIHJvdXRpbmUsIHdoaWNoCisJLy8gZG9lc24ndCByZXR1cm4gc3RhdHVzLiAgTWFrZSBzdXJlIHdlIGdvdCB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgd2UgcmVxdWVzdGVkCisJaWYgKGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCA8IFNYR19JTklUSUFMX1JDVl9EQVRBX0JVRkZFUlMpIHsKKwkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFSZXNGNiIsCisJCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCwgU1hHX01BWF9FTlRSSUVTLAorCQkJICAwKTsKKwkJcmV0dXJuIChTVEFUVVNfUkVTT1VSQ0VTKTsKKwl9CisKKwlEQkdfRVJST1IoIiVzIEFsbG9jYXRlIEV2ZW50UmluZ3Mgc2l6ZVslbHhdXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgKHNpemVvZihTWEdfRVZFTlRfUklORykgKiBSc3NJZHMpKTsKKworCS8vIEFsbG9jYXRlIGV2ZW50IHF1ZXVlcy4KKwlhZGFwdGVyLT5FdmVudFJpbmdzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkJICAgc2l6ZW9mKFNYR19FVkVOVF9SSU5HKSAqCisJCQkJCQkgICBSc3NJZHMsCisJCQkJCQkgICAmYWRhcHRlci0+UEV2ZW50UmluZ3MpOworCisJaWYgKCFhZGFwdGVyLT5FdmVudFJpbmdzKSB7CisJCS8vIENhbGxlciB3aWxsIGNhbGwgU3hnRnJlZUFkYXB0ZXIgdG8gY2xlYW4gdXAgYWJvdmUgYWxsb2NhdGlvbnMKKwkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFSZXNGOCIsCisJCQkgIGFkYXB0ZXIsIFNYR19NQVhfRU5UUklFUywgMCwgMCk7CisJCXN0YXR1cyA9IFNUQVRVU19SRVNPVVJDRVM7CisJCWdvdG8gcGVyX3RjYl9hbGxvY2F0aW9uX2ZhaWxlZDsKKwl9CisJbWVtc2V0KGFkYXB0ZXItPkV2ZW50UmluZ3MsIDAsIHNpemVvZihTWEdfRVZFTlRfUklORykgKiBSc3NJZHMpOworCisJREJHX0VSUk9SKCIlcyBBbGxvY2F0ZSBJU1Igc2l6ZVsleF1cbiIsIF9fRlVOQ1RJT05fXywgSXNyQ291bnQpOworCS8vIEFsbG9jYXRlIElTUgorCWFkYXB0ZXItPklzciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJICAgIElzckNvdW50LCAmYWRhcHRlci0+UElzcik7CisJaWYgKCFhZGFwdGVyLT5Jc3IpIHsKKwkJLy8gQ2FsbGVyIHdpbGwgY2FsbCBTeGdGcmVlQWRhcHRlciB0byBjbGVhbiB1cCBhYm92ZSBhbGxvY2F0aW9ucworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0Y5IiwKKwkJCSAgYWRhcHRlciwgU1hHX01BWF9FTlRSSUVTLCAwLCAwKTsKKwkJc3RhdHVzID0gU1RBVFVTX1JFU09VUkNFUzsKKwkJZ290byBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOworCX0KKwltZW1zZXQoYWRhcHRlci0+SXNyLCAwLCBzaXplb2YodTMyKSAqIElzckNvdW50KTsKKworCURCR19FUlJPUigiJXMgQWxsb2NhdGUgc2hhcmVkIFhNVCByaW5nIHplcm8gaW5kZXggbG9jYXRpb24gc2l6ZVslbHhdXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgc2l6ZW9mKHUzMikpOworCisJLy8gQWxsb2NhdGUgc2hhcmVkIFhNVCByaW5nIHplcm8gaW5kZXggbG9jYXRpb24KKwlhZGFwdGVyLT5YbXRSaW5nWmVyb0luZGV4ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkJCSBzaXplb2YodTMyKSwKKwkJCQkJCQkgJmFkYXB0ZXItPgorCQkJCQkJCSBQWG10UmluZ1plcm9JbmRleCk7CisJaWYgKCFhZGFwdGVyLT5YbXRSaW5nWmVyb0luZGV4KSB7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBUmVzRjEwIiwKKwkJCSAgYWRhcHRlciwgU1hHX01BWF9FTlRSSUVTLCAwLCAwKTsKKwkJc3RhdHVzID0gU1RBVFVTX1JFU09VUkNFUzsKKwkJZ290byBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOworCX0KKwltZW1zZXQoYWRhcHRlci0+WG10UmluZ1plcm9JbmRleCwgMCwgc2l6ZW9mKHUzMikpOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFsY1Jlc1MiLAorCQkgIGFkYXB0ZXIsIFNYR19NQVhfRU5UUklFUywgMCwgMCk7CisKKwlEQkdfRVJST1IoIiVzIEVYSVRcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKKy8qCisgKiBzeGdfY29uZmlnX3BjaSAtCisgKgorICogU2V0IHVwIFBDSSBDb25maWd1cmF0aW9uIHNwYWNlCisgKgorICogQXJndW1lbnRzIC0KKyAqCQlwY2lkZXYJCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19jb25maWdfcGNpKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJdTE2IHBjaV9jb21tYW5kOworCXUxNiBuZXdfY29tbWFuZDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaWRldiwgUENJX0NPTU1BTkQsICZwY2lfY29tbWFuZCk7CisJREJHX0VSUk9SKCJzeGc6ICVzICBQQ0kgY29tbWFuZFslNC40eF1cbiIsIF9fRlVOQ1RJT05fXywgcGNpX2NvbW1hbmQpOworCS8vIFNldCB0aGUgY29tbWFuZCByZWdpc3RlcgorCW5ld19jb21tYW5kID0gcGNpX2NvbW1hbmQgfCAoUENJX0NPTU1BTkRfTUVNT1JZIHwJLy8gTWVtb3J5IFNwYWNlIEVuYWJsZQorCQkJCSAgICAgUENJX0NPTU1BTkRfTUFTVEVSIHwJLy8gQnVzIG1hc3RlciBlbmFibGUKKwkJCQkgICAgIFBDSV9DT01NQU5EX0lOVkFMSURBVEUgfAkvLyBNZW1vcnkgd3JpdGUgYW5kIGludmFsaWRhdGUKKwkJCQkgICAgIFBDSV9DT01NQU5EX1BBUklUWSB8CS8vIFBhcml0eSBlcnJvciByZXNwb25zZQorCQkJCSAgICAgUENJX0NPTU1BTkRfU0VSUiB8CS8vIFN5c3RlbSBFUlIKKwkJCQkgICAgIFBDSV9DT01NQU5EX0ZBU1RfQkFDSyk7CS8vIEZhc3QgYmFjay10by1iYWNrCisJaWYgKHBjaV9jb21tYW5kICE9IG5ld19jb21tYW5kKSB7CisJCURCR19FUlJPUigiJXMgLS0gVXBkYXRpbmcgUENJIENPTU1BTkQgcmVnaXN0ZXIgJTQuNHgtPiU0LjR4LlxuIiwKKwkJCSAgX19GVU5DVElPTl9fLCBwY2lfY29tbWFuZCwgbmV3X2NvbW1hbmQpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGNpZGV2LCBQQ0lfQ09NTUFORCwgbmV3X2NvbW1hbmQpOworCX0KK30KKworc3RhdGljIGludCBzeGdfZW50cnlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfdGJsX2VudHJ5KQoreworCXN0YXRpYyBpbnQgZGlkX3ZlcnNpb24gPSAwOworCWludCBlcnI7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlwX2FkYXB0ZXJfdCBhZGFwdGVyOworCXZvaWQgX19pb21lbSAqbWVtbWFwcGVkX2lvYWRkcjsKKwl1MzIgc3RhdHVzID0gMDsKKwl1bG9uZyBtbWlvX3N0YXJ0ID0gMDsKKwl1bG9uZyBtbWlvX2xlbiA9IDA7CisKKwlEQkdfRVJST1IoInN4ZzogJXMgMi42IFZFUlNJT04gRU5URVIgamlmZmllc1slbHhdIGNwdSAlZFxuIiwKKwkJICBfX0ZVTkNUSU9OX18sIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwkvLyBJbml0aWFsaXplIHRyYWNlIGJ1ZmZlcgorI2lmZGVmIEFUS0RCRworCVN4Z1RyYWNlQnVmZmVyID0gJkxTeGdUcmFjZUJ1ZmZlcjsKKwlTWEdfVFJBQ0VfSU5JVChTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1kpOworI2VuZGlmCisKKwlzeGdfZ2xvYmFsLmR5bmFtaWNfaW50YWdnID0gZHluYW1pY19pbnRhZ2c7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2lkZXYpOworCisJREJHX0VSUk9SKCJDYWxsIHBjaV9lbmFibGVfZGV2aWNlKCVwKSAgc3RhdHVzWyV4XVxuIiwgcGNpZGV2LCBlcnIpOworCWlmIChlcnIpIHsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoc3hnX2RlYnVnID4gMCAmJiBkaWRfdmVyc2lvbisrID09IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIHN4Z19iYW5uZXIpOworCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgRFJWX1ZFUlNJT04pOworCX0KKworCWlmICghKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfNjRCSVRfTUFTSykpKSB7CisJCURCR19FUlJPUigicGNpX3NldF9kbWFfbWFzayhETUFfNjRCSVRfTUFTSykgc3VjY2Vzc2Z1bFxuIik7CisJfSBlbHNlIHsKKwkJaWYgKChlcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BXzMyQklUX01BU0spKSkgeworCQkJREJHX0VSUk9SCisJCQkgICAgKCJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nICBlcnJbJXhdXG4iLAorCQkJICAgICBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlEQkdfRVJST1IoInBjaV9zZXRfZG1hX21hc2soRE1BXzMyQklUX01BU0spIHN1Y2Nlc3NmdWxcbiIpOworCX0KKworCURCR19FUlJPUigiQ2FsbCBwY2lfcmVxdWVzdF9yZWdpb25zXG4iKTsKKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpZGV2LCBEUlZfTkFNRSk7CisJaWYgKGVycikgeworCQlEQkdfRVJST1IoInBjaV9yZXF1ZXN0X3JlZ2lvbnMgRkFJTEVEIGVyclsleF1cbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJREJHX0VSUk9SKCJjYWxsIHBjaV9zZXRfbWFzdGVyXG4iKTsKKwlwY2lfc2V0X21hc3RlcihwY2lkZXYpOworCisJREJHX0VSUk9SKCJjYWxsIGFsbG9jX2V0aGVyZGV2XG4iKTsKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoYWRhcHRlcl90KSk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2V4aXRfc3hnX3Byb2JlOworCX0KKwlEQkdfRVJST1IoImFsbG9jX2V0aGVyZGV2IGZvciBzbGljIG5ldGRldlslcF1cbiIsIG5ldGRldik7CisKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwY2lkZXYtPmRldik7CisKKwlwY2lfc2V0X2RydmRhdGEocGNpZGV2LCBuZXRkZXYpOworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKKwlhZGFwdGVyLT5wY2lkZXYgPSBwY2lkZXY7CisKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CisJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CisKKwlEQkdfRVJST1IoInN4ZzogY2FsbCBpb3JlbWFwKG1taW9fc3RhcnRbJWx4XSwgbW1pb19sZW5bJWx4XSlcbiIsCisJCSAgbW1pb19zdGFydCwgbW1pb19sZW4pOworCisJbWVtbWFwcGVkX2lvYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCURCR19FUlJPUigic3hnOiAlcyBNRU1NQVBQRURfSU9BRERSIFslcF1cbiIsIF9fRlVOQ1RJT05fXywKKwkJICBtZW1tYXBwZWRfaW9hZGRyKTsKKwlpZiAoIW1lbW1hcHBlZF9pb2FkZHIpIHsKKwkJREJHX0VSUk9SKCIlcyBjYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWx4IEAgJWx4XG4iLAorCQkJICBfX0ZVTkNUSU9OX18sIG1taW9fbGVuLCBtbWlvX3N0YXJ0KTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb247CisJfQorCisJREJHX0VSUk9SCisJICAgICgic3hnOiAlcyBmb3VuZCBBbGFjcml0ZWNoIFNYRyBQQ0ksIE1NSU8gYXQgJXAsIHN0YXJ0WyVseF0gbGVuWyVseF0sIElSUSAlZC5cbiIsCisJICAgICBfX2Z1bmNfXywgbWVtbWFwcGVkX2lvYWRkciwgbW1pb19zdGFydCwgbW1pb19sZW4sIHBjaWRldi0+aXJxKTsKKworCWFkYXB0ZXItPkh3UmVncyA9ICh2b2lkICopbWVtbWFwcGVkX2lvYWRkcjsKKwlhZGFwdGVyLT5iYXNlX2FkZHIgPSBtZW1tYXBwZWRfaW9hZGRyOworCisJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDIpOworCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDIpOworCisJREJHX0VSUk9SKCJzeGc6IGNhbGwgaW9yZW1hcChtbWlvX3N0YXJ0WyVseF0sIG1taW9fbGVuWyVseF0pXG4iLAorCQkgIG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKworCW1lbW1hcHBlZF9pb2FkZHIgPSBpb3JlbWFwKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgTUVNTUFQUEVEX0lPQUREUiBbJXBdXG4iLCBfX2Z1bmNfXywKKwkJICBtZW1tYXBwZWRfaW9hZGRyKTsKKwlpZiAoIW1lbW1hcHBlZF9pb2FkZHIpIHsKKwkJREJHX0VSUk9SKCIlcyBjYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWx4IEAgJWx4XG4iLAorCQkJICBfX0ZVTkNUSU9OX18sIG1taW9fbGVuLCBtbWlvX3N0YXJ0KTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb247CisJfQorCisJREJHX0VSUk9SKCJzeGc6ICVzIGZvdW5kIEFsYWNyaXRlY2ggU1hHIFBDSSwgTU1JTyBhdCAlcCwgIgorCQkgICJzdGFydFslbHhdIGxlblslbHhdLCBJUlEgJWQuXG4iLCBfX2Z1bmNfXywKKwkJICBtZW1tYXBwZWRfaW9hZGRyLCBtbWlvX3N0YXJ0LCBtbWlvX2xlbiwgcGNpZGV2LT5pcnEpOworCisJYWRhcHRlci0+VWNvZGVSZWdzID0gKHZvaWQgKiltZW1tYXBwZWRfaW9hZGRyOworCisJYWRhcHRlci0+U3RhdGUgPSBTWEdfU1RBVEVfSU5JVElBTElaSU5HOworCS8vIE1haW50YWluIGEgbGlzdCBvZiBhbGwgYWRhcHRlcnMgYW5jaG9yZWQgYnkKKwkvLyB0aGUgZ2xvYmFsIFN4Z0RyaXZlciBzdHJ1Y3R1cmUuCisJYWRhcHRlci0+TmV4dCA9IFN4Z0RyaXZlci5BZGFwdGVyczsKKwlTeGdEcml2ZXIuQWRhcHRlcnMgPSBhZGFwdGVyOworCWFkYXB0ZXItPkFkYXB0ZXJJRCA9ICsrU3hnRHJpdmVyLkFkYXB0ZXJJRDsKKworCS8vIEluaXRpYWxpemUgQ1JDIHRhYmxlIHVzZWQgdG8gZGV0ZXJtaW5lIG11bHRpY2FzdCBoYXNoCisJc3hnX21jYXN0X2luaXRfY3JjMzIoKTsKKworCWFkYXB0ZXItPkp1bWJvRW5hYmxlZCA9IEZBTFNFOworCWFkYXB0ZXItPlJzc0VuYWJsZWQgPSBGQUxTRTsKKwlpZiAoYWRhcHRlci0+SnVtYm9FbmFibGVkKSB7CisJCWFkYXB0ZXItPkZyYW1lU2l6ZSA9IEpVTUJPTUFYRlJBTUU7CisJCWFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID0gU1hHX1JDVl9KVU1CT19CVUZGRVJfU0laRTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5GcmFtZVNpemUgPSBFVEhFUk1BWEZSQU1FOworCQlhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9IFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRTsKKwl9CisKKy8vICAgIHN0YXR1cyA9IFNYR19SRUFEX0VFUFJPTShhZGFwdGVyKTsKKy8vICAgIGlmICghc3RhdHVzKSB7CisvLyAgICAgICAgZ290byBzeGdfaW5pdF9iYWQ7CisvLyAgICB9CisKKwlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2NvbmZpZ19wY2lcbiIsIF9fRlVOQ1RJT05fXyk7CisJc3hnX2NvbmZpZ19wY2kocGNpZGV2KTsKKwlEQkdfRVJST1IoInN4ZzogJXMgRVhJVCBzeGdfY29uZmlnX3BjaVxuIiwgX19GVU5DVElPTl9fKTsKKworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfaW5pdF9kcml2ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJc3hnX2luaXRfZHJpdmVyKCk7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX2luaXRfZHJpdmVyXG4iLCBfX0ZVTkNUSU9OX18pOworCisJYWRhcHRlci0+dmVuZGlkID0gcGNpX3RibF9lbnRyeS0+dmVuZG9yOworCWFkYXB0ZXItPmRldmlkID0gcGNpX3RibF9lbnRyeS0+ZGV2aWNlOworCWFkYXB0ZXItPnN1YnN5c2lkID0gcGNpX3RibF9lbnRyeS0+c3ViZGV2aWNlOworCWFkYXB0ZXItPmJ1c251bWJlciA9IHBjaWRldi0+YnVzLT5udW1iZXI7CisJYWRhcHRlci0+c2xvdG51bWJlciA9ICgocGNpZGV2LT5kZXZmbiA+PiAzKSAmIDB4MUYpOworCWFkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyID0gKHBjaWRldi0+ZGV2Zm4gJiAweDcpOworCWFkYXB0ZXItPm1lbW9yeWxlbmd0aCA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKKwlhZGFwdGVyLT5pcnEgPSBwY2lkZXYtPmlycTsKKwlhZGFwdGVyLT5uZXh0X25ldGRldmljZSA9IGhlYWRfbmV0ZGV2aWNlOworCWhlYWRfbmV0ZGV2aWNlID0gbmV0ZGV2OworLy8gICAgICBhZGFwdGVyLT5jaGlwaWQgPSBjaGlwX2lkeDsKKwlhZGFwdGVyLT5wb3J0ID0gMDsJLy9hZGFwdGVyLT5mdW5jdGlvbm51bWJlcjsKKwlhZGFwdGVyLT5jYXJkaW5kZXggPSBhZGFwdGVyLT5wb3J0OworCisJLy8gQWxsb2NhdGUgbWVtb3J5IGFuZCBvdGhlciByZXNvdXJjZXMKKwlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2FsbG9jYXRlX3Jlc291cmNlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlzdGF0dXMgPSBzeGdfYWxsb2NhdGVfcmVzb3VyY2VzKGFkYXB0ZXIpOworCURCR19FUlJPUigic3hnOiAlcyBFWElUIHN4Z19hbGxvY2F0ZV9yZXNvdXJjZXMgc3RhdHVzICV4XG4iLAorCQkgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCWdvdG8gZXJyX291dF91bm1hcDsKKwl9CisKKwlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2Rvd25sb2FkX21pY3JvY29kZVxuIiwgX19GVU5DVElPTl9fKTsKKwlpZiAoc3hnX2Rvd25sb2FkX21pY3JvY29kZShhZGFwdGVyLCBTWEdfVUNPREVfU0FIQVJBKSkgeworCQlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkclxuIiwKKwkJCSAgX19GVU5DVElPTl9fKTsKKwkJc3hnX2FkYXB0ZXJfc2V0X2h3YWRkcihhZGFwdGVyKTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX0ZBSUw7CisJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKKwkJREJHX0VSUk9SKCJzeGdfZG93bmxvYWRfbWljcm9jb2RlIEZBSUxFRCBzdGF0dXNbJXhdXG4iLCBzdGF0dXMpOworCX0KKworCW5ldGRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlci0+YmFzZV9hZGRyOworCW5ldGRldi0+aXJxID0gYWRhcHRlci0+aXJxOworCW5ldGRldi0+b3BlbiA9IHN4Z19lbnRyeV9vcGVuOworCW5ldGRldi0+c3RvcCA9IHN4Z19lbnRyeV9oYWx0OworCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gc3hnX3NlbmRfcGFja2V0czsKKwluZXRkZXYtPmRvX2lvY3RsID0gc3hnX2lvY3RsOworI2lmIFhYWFRPRE8KKwluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHN4Z19tYWNfc2V0X2FkZHJlc3M7CisjaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAorCW5ldGRldi0+Z2V0X3N0YXRzID0gc3hnX2dldF9zdGF0czsKKyNlbmRpZgorCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc3hnX21jYXN0X3NldF9saXN0OworI2VuZGlmCisKKwlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKKy8vICBzdHJjcHkobmV0ZGV2LT5uYW1lLCBwY2lfbmFtZShwY2lkZXYpKTsKKwlpZiAoKGVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpKSkgeworCQlEQkdfRVJST1IoIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy4gJXNcbiIsCisJCQkgIG5ldGRldi0+bmFtZSk7CisJCWdvdG8gZXJyX291dF91bm1hcDsKKwl9CisKKwlEQkdfRVJST1IKKwkgICAgKCJzeGc6ICVzIGFkZHIgMHglbHgsIGlycSAlZCwgTUFDIGFkZHIgJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCisJICAgICBuZXRkZXYtPm5hbWUsIG5ldGRldi0+YmFzZV9hZGRyLCBwY2lkZXYtPmlycSwgbmV0ZGV2LT5kZXZfYWRkclswXSwKKwkgICAgIG5ldGRldi0+ZGV2X2FkZHJbMV0sIG5ldGRldi0+ZGV2X2FkZHJbMl0sIG5ldGRldi0+ZGV2X2FkZHJbM10sCisJICAgICBuZXRkZXYtPmRldl9hZGRyWzRdLCBuZXRkZXYtPmRldl9hZGRyWzVdKTsKKworLy9zeGdfaW5pdF9iYWQ6CisJQVNTRVJUKHN0YXR1cyA9PSBGQUxTRSk7CisvLyAgICAgIHN4Z19mcmVlX2FkYXB0ZXIoYWRhcHRlcik7CisKKwlEQkdfRVJST1IoInN4ZzogJXMgRVhJVCBzdGF0dXNbJXhdIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsIF9fRlVOQ1RJT05fXywKKwkJICBzdGF0dXMsIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIHN0YXR1czsKKworICAgICAgZXJyX291dF91bm1hcDoKKwlpb3VubWFwKCh2b2lkICopbWVtbWFwcGVkX2lvYWRkcik7CisKKyAgICAgIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOworCisgICAgICBlcnJfb3V0X2V4aXRfc3hnX3Byb2JlOgorCisJREJHX0VSUk9SKCIlcyBFWElUIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsIF9fRlVOQ1RJT05fXywgamlmZmllcywKKwkJICBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTElORSBCQVNFIEludGVycnVwdCByb3V0aW5lcy4uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoKKyAqIHN4Z19kaXNhYmxlX2ludGVycnVwdAorICoKKyAqIERpc2FibGVJbnRlcnJ1cHQgSGFuZGxlcgorICoKKyAqIEFyZ3VtZW50czoKKyAqCisgKiAgIGFkYXB0ZXI6CU91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIAlOb25lLgorICovCitzdGF0aWMgdm9pZCBzeGdfZGlzYWJsZV9pbnRlcnJ1cHQocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEaXNJbnRyIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5JbnRlcnJ1cHRzRW5hYmxlZCwgMCwgMCk7CisJLy8gRm9yIG5vdywgUlNTIGlzIGRpc2FibGVkIHdpdGggbGluZSBiYXNlZCBpbnRlcnJ1cHRzCisJQVNTRVJUKGFkYXB0ZXItPlJzc0VuYWJsZWQgPT0gRkFMU0UpOworCUFTU0VSVChhZGFwdGVyLT5Nc2lFbmFibGVkID09IEZBTFNFKTsKKwkvLworCS8vIFR1cm4gb2ZmIGludGVycnVwdHMgYnkgd3JpdGluZyB0byB0aGUgaWNyIHJlZ2lzdGVyLgorCS8vCisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5JY3IsIFNYR19JQ1IoMCwgU1hHX0lDUl9ESVNBQkxFKSwgVFJVRSk7CisKKwlhZGFwdGVyLT5JbnRlcnJ1cHRzRW5hYmxlZCA9IDA7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYRGlzSW50ciIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+SW50ZXJydXB0c0VuYWJsZWQsIDAsIDApOworfQorCisvKgorICoKKyAqIHN4Z19lbmFibGVfaW50ZXJydXB0CisgKgorICogRW5hYmxlSW50ZXJydXB0IEhhbmRsZXIKKyAqCisgKiBBcmd1bWVudHM6CisgKgorICogICBhZGFwdGVyOglPdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiAJTm9uZS4KKyAqLworc3RhdGljIHZvaWQgc3hnX2VuYWJsZV9pbnRlcnJ1cHQocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJFbkludHIiLAorCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPkludGVycnVwdHNFbmFibGVkLCAwLCAwKTsKKwkvLyBGb3Igbm93LCBSU1MgaXMgZGlzYWJsZWQgd2l0aCBsaW5lIGJhc2VkIGludGVycnVwdHMKKwlBU1NFUlQoYWRhcHRlci0+UnNzRW5hYmxlZCA9PSBGQUxTRSk7CisJQVNTRVJUKGFkYXB0ZXItPk1zaUVuYWJsZWQgPT0gRkFMU0UpOworCS8vCisJLy8gVHVybiBvbiBpbnRlcnJ1cHRzIGJ5IHdyaXRpbmcgdG8gdGhlIGljciByZWdpc3Rlci4KKwkvLworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSWNyLCBTWEdfSUNSKDAsIFNYR19JQ1JfRU5BQkxFKSwgVFJVRSk7CisKKwlhZGFwdGVyLT5JbnRlcnJ1cHRzRW5hYmxlZCA9IDE7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYRW5JbnRyIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKK30KKworLyoKKyAqCisgKiBzeGdfaXNyIC0gUHJvY2VzcyBhbiBsaW5lLWJhc2VkIGludGVycnVwdAorICoKKyAqIEFyZ3VtZW50czoKKyAqIAkJQ29udGV4dAkJCS0gT3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgkJUXVldWVEZWZhdWx0IAktIE91dHB1dCBwYXJhbWV0ZXIgdG8gcXVldWUgdG8gZGVmYXVsdCBDUFUKKyAqCQlUYXJnZXRDcHVzCQktIE91dHB1dCBiaXRtYXAgdG8gc2NoZWR1bGUgRFBDJ3MKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiAJVFJVRSBpZiBvdXIgaW50ZXJydXB0CisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBzeGdfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlwX25ldF9kZXZpY2UgZGV2ID0gKHBfbmV0X2RldmljZSkgZGV2X2lkOworCXBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7CisvLyAgICAgIHUzMiAgICAgICAgICAgICAgICAgQ3B1TWFzayA9IDAsIGk7CisKKwlhZGFwdGVyLT5TdGF0cy5OdW1JbnRzKys7CisJaWYgKGFkYXB0ZXItPklzclswXSA9PSAwKSB7CisJCS8vIFRoZSBTTElDIGRyaXZlciB1c2VkIHRvIGV4cGVyaWVuY2UgYSBudW1iZXIgb2Ygc3B1cmlvdXMgaW50ZXJydXB0cworCQkvLyBkdWUgdG8gdGhlIGRlbGF5IGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFza2luZyBvZiB0aGUgaW50ZXJydXB0CisJCS8vICh3ZSdkIGJvdW5jZSBiYWNrIGluIGhlcmUpLiAgSWYgd2Ugc2VlIHRoYXQgYWdhaW4gd2l0aCBTYWhhcmEsCisJCS8vIGFkZCBhIFJFQURfUkVHIG9mIHRoZSBJY3IgcmVnaXN0ZXIgYWZ0ZXIgdGhlIFdSSVRFX1JFRyBiZWxvdy4KKwkJYWRhcHRlci0+U3RhdHMuRmFsc2VJbnRzKys7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisJLy8KKwkvLyBNb3ZlIHRoZSBJc3IgY29udGVudHMgYW5kIGNsZWFyIHRoZSB2YWx1ZSBpbgorCS8vIHNoYXJlZCBtZW1vcnksIGFuZCBtYXNrIGludGVycnVwdHMKKwkvLworCWFkYXB0ZXItPklzckNvcHlbMF0gPSBhZGFwdGVyLT5Jc3JbMF07CisJYWRhcHRlci0+SXNyWzBdID0gMDsKKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkljciwgU1hHX0lDUigwLCBTWEdfSUNSX01BU0spLCBUUlVFKTsKKy8vICAgICAgQVNTRVJUKGFkYXB0ZXItPklzckRwY3NQZW5kaW5nID09IDApOworI2lmIFhYWFRPRE8JCQkvLyBSU1MgU3R1ZmYKKwkvLyBJZiBSU1MgaXMgZW5hYmxlZCBhbmQgdGhlIElTUiBzcGVjaWZpZXMKKwkvLyBTWEdfSVNSX0VWRU5ULCB0aGVuIHNjaGVkdWxlIERQQydzCisJLy8gYmFzZWQgb24gZXZlbnQgcXVldWVzLgorCWlmIChhZGFwdGVyLT5Sc3NFbmFibGVkICYmIChhZGFwdGVyLT5Jc3JDb3B5WzBdICYgU1hHX0lTUl9FVkVOVCkpIHsKKwkJZm9yIChpID0gMDsKKwkJICAgICBpIDwgYWRhcHRlci0+UnNzU3lzdGVtSW5mby0+UHJvY2Vzc29ySW5mby5Sc3NDcHVDb3VudDsKKwkJICAgICBpKyspIHsKKwkJCVBTWEdfRVZFTlRfUklORyBFdmVudFJpbmcgPSAmYWRhcHRlci0+RXZlbnRSaW5nc1tpXTsKKwkJCVBTWEdfRVZFTlQgRXZlbnQgPQorCQkJICAgICZFdmVudFJpbmctPlJpbmdbYWRhcHRlci0+TmV4dEV2ZW50W2ldXTsKKwkJCXVuc2lnbmVkIGNoYXIgQ3B1ID0KKwkJCSAgICBhZGFwdGVyLT5Sc3NTeXN0ZW1JbmZvLT5Sc3NJZFRvQ3B1W2ldOworCQkJaWYgKEV2ZW50LT5TdGF0dXMgJiBFVkVOVF9TVEFUVVNfVkFMSUQpIHsKKwkJCQlhZGFwdGVyLT5Jc3JEcGNzUGVuZGluZysrOworCQkJCUNwdU1hc2sgfD0gKDEgPDwgQ3B1KTsKKwkJCX0KKwkJfQorCX0KKwkvLyBOb3csIGVpdGhlciBzY2hlZHVsZSB0aGUgQ1BVcyBzcGVjaWZpZWQgYnkgdGhlIENwdU1hc2ssCisJLy8gb3IgcXVldWUgZGVmYXVsdAorCWlmIChDcHVNYXNrKSB7CisJCSpRdWV1ZURlZmF1bHQgPSBGQUxTRTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5Jc3JEcGNzUGVuZGluZyA9IDE7CisJCSpRdWV1ZURlZmF1bHQgPSBUUlVFOworCX0KKwkqVGFyZ2V0Q3B1cyA9IENwdU1hc2s7CisjZW5kaWYKKwkvLworCS8vICBUaGVyZSBhcmUgbm8gRFBDcyBpbiBMaW51eCwgc28gY2FsbCB0aGUgaGFuZGxlciBub3cKKwkvLworCXN4Z19oYW5kbGVfaW50ZXJydXB0KGFkYXB0ZXIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBzeGdfaGFuZGxlX2ludGVycnVwdChwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworLy8gICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgUnNzSWQgICA9IDA7CisJdTMyIE5ld0lzcjsKKworCWlmIChhZGFwdGVyLT5TdGF0cy5SY3ZOb0J1ZmZlciA8IDUpIHsKKwkJREJHX0VSUk9SKCJFbnRlciBzeGdfaGFuZGxlX2ludGVycnVwdCBJU1JbJXhdXG4iLAorCQkJICBhZGFwdGVyLT5Jc3JDb3B5WzBdKTsKKwl9CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSG5kbEludHIiLAorCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPklzckNvcHlbMF0sIDAsIDApOworCS8vIEZvciBub3csIFJTUyBpcyBkaXNhYmxlZCB3aXRoIGxpbmUgYmFzZWQgaW50ZXJydXB0cworCUFTU0VSVChhZGFwdGVyLT5Sc3NFbmFibGVkID09IEZBTFNFKTsKKwlBU1NFUlQoYWRhcHRlci0+TXNpRW5hYmxlZCA9PSBGQUxTRSk7CisJQVNTRVJUKGFkYXB0ZXItPklzckNvcHlbMF0pOworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCS8vIEFsd2F5cyBwcm9jZXNzIHRoZSBldmVudCBxdWV1ZS4KKwlzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZShhZGFwdGVyLAorCQkJCShhZGFwdGVyLT5Sc3NFbmFibGVkID8gLypSc3NJZCAqLyAwIDogMCkpOworCisjaWYgWFhYVE9ETwkJCS8vIFJTUyBzdHVmZgorCWlmICgtLWFkYXB0ZXItPklzckRwY3NQZW5kaW5nKSB7CisJCS8vIFdlJ3JlIGRvbmUuCisJCUFTU0VSVChhZGFwdGVyLT5Sc3NFbmFibGVkKTsKKwkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRFBDc1BlbmQiLAorCQkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCS8vCisJLy8gTGFzdCAob3Igb25seSkgRFBDIHByb2Nlc3NlcyB0aGUgSVNSIGFuZCBjbGVhcnMgdGhlIGludGVycnVwdC4KKwkvLworCU5ld0lzciA9IHN4Z19wcm9jZXNzX2lzcihhZGFwdGVyLCAwKTsKKwkvLworCS8vIFJlZW5hYmxlIGludGVycnVwdHMKKwkvLworCWFkYXB0ZXItPklzckNvcHlbMF0gPSAwOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkNsZWFySXNyIiwKKwkJICBhZGFwdGVyLCBOZXdJc3IsIDAsIDApOworCisJaWYgKGFkYXB0ZXItPlN0YXRzLlJjdk5vQnVmZmVyIDwgNSkgeworCQlEQkdfRVJST1IKKwkJICAgICgiRXhpdCBzeGdfaGFuZGxlX2ludGVycnVwdDIgYWZ0ZXIgZW5hYmxpbmcgaW50ZXJydXB0XG4iKTsKKwl9CisKKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLklzciwgTmV3SXNyLCBUUlVFKTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhIbmRsSW50IiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKK30KKworLyoKKyAqCisgKiBzeGdfcHJvY2Vzc19pc3IgLSBQcm9jZXNzIGFuIGludGVycnVwdC4gIENhbGxlZCBmcm9tIHRoZSBsaW5lLWJhc2VkIGFuZAorICoJCQltZXNzYWdlIGJhc2VkIGludGVycnVwdCBEUEMgcm91dGluZXMKKyAqCisgKiBBcmd1bWVudHM6CisgKiAJCWFkYXB0ZXIJCQktIE91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJCVF1ZXVlCQkJLSBUaGUgSVNSIHRoYXQgbmVlZHMgcHJvY2Vzc2luZworICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIAlOb25lCisgKi8KK3N0YXRpYyBpbnQgc3hnX3Byb2Nlc3NfaXNyKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHUzMiBNZXNzYWdlSWQpCit7CisJdTMyIElzciA9IGFkYXB0ZXItPklzckNvcHlbTWVzc2FnZUlkXTsKKwl1MzIgTmV3SXNyID0gMDsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlByb2NJc3IiLAorCQkgIGFkYXB0ZXIsIElzciwgMCwgMCk7CisKKwkvLyBFcnJvcgorCWlmIChJc3IgJiBTWEdfSVNSX0VSUikgeworCQlpZiAoSXNyICYgU1hHX0lTUl9QRFFGKSB7CisJCQlhZGFwdGVyLT5TdGF0cy5QZHFGdWxsKys7CisJCQlEQkdfRVJST1IoIiVzOiBTWEdfSVNSX0VSUiAgUERRRiEhXG4iLCBfX0ZVTkNUSU9OX18pOworCQl9CisJCS8vIE5vIGhvc3QgYnVmZmVyCisJCWlmIChJc3IgJiBTWEdfSVNSX1JNSVNTKSB7CisJCQkvLyBUaGVyZSBpcyBhIGJ1bmNoIG9mIGNvZGUgaW4gdGhlIFNMSUMgZHJpdmVyIHdoaWNoCisJCQkvLyBhdHRlbXB0cyB0byBwcm9jZXNzIG1vcmUgcmVjZWl2ZSBldmVudHMgcGVyIERQQworCQkJLy8gaWYgd2Ugc3RhcnQgdG8gZmFsbCBiZWhpbmQuICBXZSdsbCBwcm9iYWJseQorCQkJLy8gbmVlZCB0byBkbyBzb21ldGhpbmcgc2ltaWxhciBoZXJlLCBidXQgaG9sZAorCQkJLy8gb2ZmIGZvciBub3cuICBJIGRvbid0IHdhbnQgdG8gbWFrZSB0aGUgY29kZSBtb3JlCisJCQkvLyBjb21wbGljYXRlZCB0aGFuIHN0cmljdGx5IG5lZWRlZC4KKwkJCWFkYXB0ZXItPlN0YXRzLlJjdk5vQnVmZmVyKys7CisJCQlpZiAoYWRhcHRlci0+U3RhdHMuUmN2Tm9CdWZmZXIgPCA1KSB7CisJCQkJREJHX0VSUk9SKCIlczogU1hHX0lTUl9FUlIgIFJNSVNTISFcbiIsCisJCQkJCSAgX19GVU5DVElPTl9fKTsKKwkJCX0KKwkJfQorCQkvLyBDYXJkIGNyYXNoCisJCWlmIChJc3IgJiBTWEdfSVNSX0RFQUQpIHsKKwkJCS8vIFNldCBhc2lkZSB0aGUgY3Jhc2ggaW5mbyBhbmQgc2V0IHRoZSBhZGFwdGVyIHN0YXRlIHRvIFJFU0VUCisJCQlhZGFwdGVyLT5DcmFzaENwdSA9CisJCQkgICAgKHVuc2lnbmVkIGNoYXIpKChJc3IgJiBTWEdfSVNSX0NQVSkgPj4KKwkJCQkJICAgIFNYR19JU1JfQ1BVX1NISUZUKTsKKwkJCWFkYXB0ZXItPkNyYXNoTG9jYXRpb24gPSAodXNob3J0KSAoSXNyICYgU1hHX0lTUl9DUkFTSCk7CisJCQlhZGFwdGVyLT5EZWFkID0gVFJVRTsKKwkJCURCR19FUlJPUigiJXM6IElTUl9ERUFEICV4LCBDUFU6ICVkXG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJICBhZGFwdGVyLT5DcmFzaExvY2F0aW9uLCBhZGFwdGVyLT5DcmFzaENwdSk7CisJCX0KKwkJLy8gRXZlbnQgcmluZyBmdWxsCisJCWlmIChJc3IgJiBTWEdfSVNSX0VSRlVMTCkgeworCQkJLy8gU2FtZSBpc3N1ZSBhcyBSTUlTUywgcmVhbGx5LiAgVGhpcyBtZWFucyB0aGUKKwkJCS8vIGhvc3QgaXMgZmFsbGluZyBiZWhpbmQgdGhlIGNhcmQuICBOZWVkIHRvIGluY3JlYXNlCisJCQkvLyBldmVudCByaW5nIHNpemUsIHByb2Nlc3MgbW9yZSBldmVudHMgcGVyIGludGVycnVwdCwKKwkJCS8vIGFuZC9vciByZWR1Y2UvcmVtb3ZlIGludGVycnVwdCBhZ2dyZWdhdGlvbi4KKwkJCWFkYXB0ZXItPlN0YXRzLkV2ZW50UmluZ0Z1bGwrKzsKKwkJCURCR19FUlJPUigiJXM6IFNYR19JU1JfRVJSICBFVkVOVCBSSU5HIEZVTEwhIVxuIiwKKwkJCQkgIF9fRlVOQ1RJT05fXyk7CisJCX0KKwkJLy8gVHJhbnNtaXQgZHJvcCAtIG5vIERSQU0gYnVmZmVycyBvciBYTVQgZXJyb3IKKwkJaWYgKElzciAmIFNYR19JU1JfWERST1ApIHsKKwkJCWFkYXB0ZXItPlN0YXRzLlhtdERyb3BzKys7CisJCQlhZGFwdGVyLT5TdGF0cy5YbXRFcnJvcnMrKzsKKwkJCURCR19FUlJPUigiJXM6IFNYR19JU1JfRVJSICBYRFJPUCEhXG4iLCBfX0ZVTkNUSU9OX18pOworCQl9CisJfQorCS8vIFNsb3dwYXRoIHNlbmQgY29tcGxldGlvbnMKKwlpZiAoSXNyICYgU1hHX0lTUl9TUFNFTkQpIHsKKwkJc3hnX2NvbXBsZXRlX3Nsb3dfc2VuZChhZGFwdGVyKTsKKwl9CisJLy8gRHVtcAorCWlmIChJc3IgJiBTWEdfSVNSX1VQQykgeworCQlBU1NFUlQoYWRhcHRlci0+RHVtcENtZFJ1bm5pbmcpOwkvLyBNYXliZSBjaGFuZ2Ugd2hlbiBkZWJ1ZyBpcyBhZGRlZC4uCisJCWFkYXB0ZXItPkR1bXBDbWRSdW5uaW5nID0gRkFMU0U7CisJfQorCS8vIExpbmsgZXZlbnQKKwlpZiAoSXNyICYgU1hHX0lTUl9MSU5LKSB7CisJCXN4Z19saW5rX2V2ZW50KGFkYXB0ZXIpOworCX0KKwkvLyBEZWJ1ZyAtIGJyZWFrcG9pbnQgaGl0CisJaWYgKElzciAmIFNYR19JU1JfQlJFQUspIHsKKwkJLy8gQXQgdGhlIG1vbWVudCBBR0RCIGlzbid0IHdyaXR0ZW4gdG8gc3VwcG9ydCBpbnRlcmFjdGl2ZQorCQkvLyBkZWJ1ZyBzZXNzaW9ucy4gIFdoZW4gaXQgaXMsIHRoaXMgaW50ZXJydXB0IHdpbGwgYmUgdXNlZAorCQkvLyB0byBzaWduYWwgQUdEQiB0aGF0IGl0IGhhcyBoaXQgYSBicmVha3BvaW50LiAgRm9yIG5vdywgQVNTRVJULgorCQlBU1NFUlQoMCk7CisJfQorCS8vIEhlYXJ0YmVhdCByZXNwb25zZQorCWlmIChJc3IgJiBTWEdfSVNSX1BJTkcpIHsKKwkJYWRhcHRlci0+UGluZ091dHN0YW5kaW5nID0gRkFMU0U7CisJfQorCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhQcm9jSXNyIiwKKwkJICBhZGFwdGVyLCBJc3IsIE5ld0lzciwgMCk7CisKKwlyZXR1cm4gKE5ld0lzcik7Cit9CisKKy8qCisgKgorICogc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUgLSBQcm9jZXNzIG91ciBldmVudCBxdWV1ZQorICoKKyAqIEFyZ3VtZW50czoKKyAqIAkJLSBhZGFwdGVyCS0gQWRhcHRlciBzdHJ1Y3R1cmUKKyAqCQktIFJzc0lkCQktIFRoZSBldmVudCBxdWV1ZSByZXF1aXJpbmcgcHJvY2Vzc2luZworICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIAlOb25lLgorICovCitzdGF0aWMgdTMyIHN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHUzMiBSc3NJZCkKK3sKKwlQU1hHX0VWRU5UX1JJTkcgRXZlbnRSaW5nID0gJmFkYXB0ZXItPkV2ZW50UmluZ3NbUnNzSWRdOworCVBTWEdfRVZFTlQgRXZlbnQgPSAmRXZlbnRSaW5nLT5SaW5nW2FkYXB0ZXItPk5leHRFdmVudFtSc3NJZF1dOworCXUzMiBFdmVudHNQcm9jZXNzZWQgPSAwLCBCYXRjaGVzID0gMDsKKwl1MzIgbnVtX3NrYnMgPSAwOworCXN0cnVjdCBza19idWZmICpza2I7CisjaWZkZWYgTElOVVhfSEFORExFU19SQ1ZfSU5ESUNBVElPTl9MSVNUUworCXN0cnVjdCBza19idWZmICpwcmV2X3NrYiA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKkluZGljYXRpb25MaXN0W1NYR19SQ1ZfQVJSQVlTSVpFXTsKKwl1MzIgSW5kZXg7CisJUFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSIFJjdkRhdGFCdWZmZXJIZHI7CisjZW5kaWYKKwl1MzIgUmV0dXJuU3RhdHVzID0gMDsKKworCUFTU0VSVCgoYWRhcHRlci0+U3RhdGUgPT0gU1hHX1NUQVRFX1JVTk5JTkcpIHx8CisJICAgICAgIChhZGFwdGVyLT5TdGF0ZSA9PSBTWEdfU1RBVEVfUEFVU0lORykgfHwKKwkgICAgICAgKGFkYXB0ZXItPlN0YXRlID09IFNYR19TVEFURV9QQVVTRUQpIHx8CisJICAgICAgIChhZGFwdGVyLT5TdGF0ZSA9PSBTWEdfU1RBVEVfSEFMVElORykpOworCS8vIFdlIG1heSBzdGlsbCBoYXZlIHVucHJvY2Vzc2VkIGV2ZW50cyBvbiB0aGUgcXVldWUgaWYKKwkvLyB0aGUgY2FyZCBjcmFzaGVkLiAgRG9uJ3QgcHJvY2VzcyB0aGVtLgorCWlmIChhZGFwdGVyLT5EZWFkKSB7CisJCXJldHVybiAoMCk7CisJfQorCS8vIEluIHRoZW9yeSB0aGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBwcm9jZXNzb3IgdGhhdAorCS8vIGFjY2Vzc2VzIHRoaXMgcXVldWUsIGFuZCBvbmx5IGF0IGludGVycnVwdC1EUEMgdGltZS4gIFNvCisJLy8gd2Ugc2hvdWxkbid0IG5lZWQgYSBsb2NrIGZvciBhbnkgb2YgdGhpcy4KKwl3aGlsZSAoRXZlbnQtPlN0YXR1cyAmIEVWRU5UX1NUQVRVU19WQUxJRCkgeworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJFdmVudCIsCisJCQkgIEV2ZW50LCBFdmVudC0+Q29kZSwgRXZlbnQtPlN0YXR1cywKKwkJCSAgYWRhcHRlci0+TmV4dEV2ZW50KTsKKwkJc3dpdGNoIChFdmVudC0+Q29kZSkgeworCQljYXNlIEVWRU5UX0NPREVfQlVGRkVSUzoKKwkJCUFTU0VSVCghKEV2ZW50LT5Db21tYW5kSW5kZXggJiAweEZGMDApKTsJLy8gU1hHX1JJTkdfSU5GTyBIZWFkICYgVGFpbCA9PSB1bnNpZ25lZCBjaGFyCisJCQkvLworCQkJc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKGFkYXB0ZXIsCisJCQkJCQkgICAgICAgRXZlbnQtPkNvbW1hbmRJbmRleCk7CisJCQkvLworCQkJYnJlYWs7CisJCWNhc2UgRVZFTlRfQ09ERV9TTE9XUkNWOgorCQkJLS1hZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkOworCQkJaWYgKChza2IgPSBzeGdfc2xvd19yZWNlaXZlKGFkYXB0ZXIsIEV2ZW50KSkpIHsKKwkJCQl1MzIgcnhfYnl0ZXM7CisjaWZkZWYgTElOVVhfSEFORExFU19SQ1ZfSU5ESUNBVElPTl9MSVNUUworCQkJCS8vIEFkZCBpdCB0byBvdXIgaW5kaWNhdGlvbiBsaXN0CisJCQkJU1hHX0FERF9SQ1ZfUEFDS0VUKGFkYXB0ZXIsIHNrYiwgcHJldl9za2IsCisJCQkJCQkgICBJbmRpY2F0aW9uTGlzdCwgbnVtX3NrYnMpOworCQkJCS8vICBJbiBMaW51eCwgd2UganVzdCBwYXNzIHVwIGVhY2ggc2tiIHRvIHRoZSBwcm90b2NvbCBhYm92ZSBhdCB0aGlzIHBvaW50LAorCQkJCS8vICB0aGVyZSBpcyBubyBjYXBhYmlsaXR5IG9mIGFuIGluZGljYXRpb24gbGlzdC4KKyNlbHNlCisvLyBDSEVDSyAgICAgICAgICAgIHNrYl9wdWxsKHNrYiwgSU5JQ19SQ1ZCVUZfSEVBRFNJWkUpOworCQkJCXJ4X2J5dGVzID0gRXZlbnQtPkxlbmd0aDsJLy8gKHJjdmJ1Zi0+bGVuZ3RoICYgSVJIRERSX0ZMRU5fTVNLKTsKKwkJCQlza2JfcHV0KHNrYiwgcnhfYnl0ZXMpOworCQkJCWFkYXB0ZXItPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQlhZGFwdGVyLT5zdGF0cy5yeF9ieXRlcyArPSByeF9ieXRlczsKKyNpZiBTWEdfT0ZGTE9BRF9JUF9DSEVDS1NVTQorCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisjZW5kaWYKKwkJCQlza2ItPmRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwkJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBza2ItPmRldik7CisJCQkJbmV0aWZfcngoc2tiKTsKKyNlbmRpZgorCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEQkdfRVJST1IoIiVzOiBFUlJPUiAgSW52YWxpZCBFdmVudENvZGUgJWRcbiIsCisJCQkJICBfX0ZVTkNUSU9OX18sIEV2ZW50LT5Db2RlKTsKKy8vICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKwkJfQorCQkvLyBTZWUgaWYgd2UgbmVlZCB0byByZXN0b2NrIGNhcmQgcmVjZWl2ZSBidWZmZXJzLgorCQkvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0byBub3RlIGhlcmU6CisJCS8vICAgICAgRmlyc3QgLSBUaGlzIHRlc3QgaXMgbm90IFNNUCBzYWZlLiAgVGhlCisJCS8vICAgICAgICAgICAgICBhZGFwdGVyLT5CdWZmZXJzT25DYXJkIGZpZWxkIGlzIHByb3RlY3RlZCB2aWEgYXRvbWljIGludGVybG9ja2VkIGNhbGxzLCBidXQKKwkJLy8gICAgICAgICAgICAgIHdlIGRvIG5vdCBwcm90ZWN0IGl0IHdpdGggcmVzcGVjdCB0byB0aGVzZSB0ZXN0cy4gIFRoZSBvbmx5IHdheSB0byBkbyB0aGF0CisJCS8vICAgICAgaXMgd2l0aCBhIGxvY2ssIGFuZCBJIGRvbid0IHdhbnQgdG8gZ3JhYiBhIGxvY2sgZXZlcnkgdGltZSB3ZSBhZGp1c3QgdGhlCisJCS8vICAgICAgQnVmZmVyc09uQ2FyZCBjb3VudC4gIEluc3RlYWQsIHdlIGFsbG93IHRoZSBidWZmZXIgcmVwbGVuaXNobWVudCB0byBiZSBvZmYKKwkJLy8gICAgICBvbmNlIGluIGEgd2hpbGUuICBUaGUgd29yc3QgdGhhdCBjYW4gaGFwcGVuIGlzIHRoZSBjYXJkIGlzIGdpdmVuIG9uZQorCQkvLyAgICAgIG1vcmUtb3ItbGVzcyBkZXNjcmlwdG9yIGJsb2NrIHRoYW4gdGhlIGFyYml0cmFyeSB2YWx1ZSB3ZSd2ZSBjaG9zZW4uCisJCS8vICAgICAgTm8gYmlnIGRlYWwKKwkJLy8gICAgICBJbiBzaG9ydCBETyBOT1QgQUREIEEgTE9DSyBIRVJFLCBPUiBXSEVSRSBSY3ZCdWZmZXJzT25DYXJkIGlzIGFkanVzdGVkLgorCQkvLyAgICAgIFNlY29uZCAtIFdlIGV4cGVjdCB0aGlzIHRlc3QgdG8gcmFyZWx5IGV2YWx1YXRlIHRvIHRydWUuICBXZSBhdHRlbXB0IHRvCisJCS8vICAgICAgcmVmaWxsIGRlc2NyaXB0b3IgYmxvY2tzIGFzIHRoZXkgYXJlIHJldHVybmVkIHRvIHVzCisJCS8vICAgICAgKHN4Z19jb21wbGV0ZV9kZXNjcmlwdG9yX2Jsb2NrcyksIHNvIFRoZSBvbmx5IHRpbWUgdGhpcyBzaG91bGQgZXZhbHVhdGUKKwkJLy8gICAgICB0byB0cnVlIGlzIHdoZW4gc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzIGZhaWxlZCB0byBhbGxvY2F0ZQorCQkvLyAgICAgICAgICAgICAgcmVjZWl2ZSBidWZmZXJzLgorCQlpZiAoYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCA8IFNYR19SQ1ZfREFUQV9CVUZGRVJTKSB7CisJCQlzeGdfc3RvY2tfcmN2X2J1ZmZlcnMoYWRhcHRlcik7CisJCX0KKwkJLy8gSXQncyBtb3JlIGVmZmljaWVudCB0byBqdXN0IHNldCB0aGlzIHRvIHplcm8uCisJCS8vIEJ1dCBjbGVhcmluZyB0aGUgdG9wIGJpdCBzYXZlcyBwb3RlbnRpYWwgZGVidWcgaW5mby4uLgorCQlFdmVudC0+U3RhdHVzICY9IH5FVkVOVF9TVEFUVVNfVkFMSUQ7CisJCS8vIEFkdmFuY3QgdG8gdGhlIG5leHQgZXZlbnQKKwkJU1hHX0FEVkFOQ0VfSU5ERVgoYWRhcHRlci0+TmV4dEV2ZW50W1Jzc0lkXSwgRVZFTlRfUklOR19TSVpFKTsKKwkJRXZlbnQgPSAmRXZlbnRSaW5nLT5SaW5nW2FkYXB0ZXItPk5leHRFdmVudFtSc3NJZF1dOworCQlFdmVudHNQcm9jZXNzZWQrKzsKKwkJaWYgKEV2ZW50c1Byb2Nlc3NlZCA9PSBFVkVOVF9SSU5HX0JBVENIKSB7CisJCQkvLyBSZWxlYXNlIGEgYmF0Y2ggb2YgZXZlbnRzIGJhY2sgdG8gdGhlIGNhcmQKKwkJCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbUnNzSWRdLkV2ZW50UmVsZWFzZSwKKwkJCQkgIEVWRU5UX1JJTkdfQkFUQ0gsIEZBTFNFKTsKKwkJCUV2ZW50c1Byb2Nlc3NlZCA9IDA7CisJCQkvLyBJZiB3ZSd2ZSBwcm9jZXNzZWQgb3VyIGJhdGNoIGxpbWl0LCBicmVhayBvdXQgb2YgdGhlCisJCQkvLyBsb29wIGFuZCByZXR1cm4gU1hHX0lTUl9FVkVOVCB0byBhcnJhbmdlIGZvciB1cyB0bworCQkJLy8gYmUgY2FsbGVkIGFnYWluCisJCQlpZiAoQmF0Y2hlcysrID09IEVWRU5UX0JBVENIX0xJTUlUKSB7CisJCQkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsCisJCQkJCSAgVFJBQ0VfTk9JU1ksICJFdnRMaW1pdCIsIEJhdGNoZXMsCisJCQkJCSAgYWRhcHRlci0+TmV4dEV2ZW50LCAwLCAwKTsKKwkJCQlSZXR1cm5TdGF0dXMgPSBTWEdfSVNSX0VWRU5UOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorI2lmZGVmIExJTlVYX0hBTkRMRVNfUkNWX0lORElDQVRJT05fTElTVFMKKwkvLworCS8vIEluZGljYXRlIGFueSByZWNlaXZlZCBkdW1iLW5pYyBmcmFtZXMKKwkvLworCVNYR19JTkRJQ0FURV9QQUNLRVRTKGFkYXB0ZXIsIEluZGljYXRpb25MaXN0LCBudW1fc2ticyk7CisjZW5kaWYKKwkvLworCS8vIFJlbGVhc2UgZXZlbnRzIGJhY2sgdG8gdGhlIGNhcmQuCisJLy8KKwlpZiAoRXZlbnRzUHJvY2Vzc2VkKSB7CisJCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbUnNzSWRdLkV2ZW50UmVsZWFzZSwKKwkJCSAgRXZlbnRzUHJvY2Vzc2VkLCBGQUxTRSk7CisJfQorCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhQcmNFdm50IiwKKwkJICBCYXRjaGVzLCBFdmVudHNQcm9jZXNzZWQsIGFkYXB0ZXItPk5leHRFdmVudCwgbnVtX3NrYnMpOworCisJcmV0dXJuIChSZXR1cm5TdGF0dXMpOworfQorCisvKgorICogc3hnX2NvbXBsZXRlX3Nsb3dfc2VuZCAtIENvbXBsZXRlIHNsb3dwYXRoIG9yIGR1bWItbmljIHNlbmRzCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorCisgKiBSZXR1cm4KKyAqCU5vbmUKKyAqLworc3RhdGljIHZvaWQgc3hnX2NvbXBsZXRlX3Nsb3dfc2VuZChwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCVBTWEdfWE1UX1JJTkcgWG10UmluZyA9ICZhZGFwdGVyLT5YbXRSaW5nc1swXTsKKwlQU1hHX1JJTkdfSU5GTyBYbXRSaW5nSW5mbyA9ICZhZGFwdGVyLT5YbXRSaW5nWmVyb0luZm87CisJdTMyICpDb250ZXh0VHlwZTsKKwlQU1hHX0NNRCBYbXRDbWQ7CisKKwkvLyBOT1RFIC0gVGhpcyBsb2NrIGlzIGRyb3BwZWQgYW5kIHJlZ3JhYmJlZCBpbiB0aGlzIGxvb3AuCisJLy8gVGhpcyBtZWFucyB0d28gZGlmZmVyZW50IHByb2Nlc3NvcnMgY2FuIGJvdGggYmUgcnVubmluZworCS8vIHRocm91Z2ggdGhpcyBsb29wLiBCZSAqdmVyeSogY2FyZWZ1bC4KKwlzcGluX2xvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbXBTbmRzIiwKKwkJICBhZGFwdGVyLCBYbXRSaW5nSW5mby0+SGVhZCwgWG10UmluZ0luZm8tPlRhaWwsIDApOworCisJd2hpbGUgKFhtdFJpbmdJbmZvLT5UYWlsICE9ICphZGFwdGVyLT5YbXRSaW5nWmVyb0luZGV4KSB7CisJCS8vIExvY2F0ZSB0aGUgY3VycmVudCBDbWQgKHJpbmcgZGVzY3JpcHRvciBlbnRyeSksIGFuZAorCQkvLyBhc3NvY2lhdGVkIFNHTCwgYW5kIGFkdmFuY2UgdGhlIHRhaWwKKwkJU1hHX1JFVFVSTl9DTUQoWG10UmluZywgWG10UmluZ0luZm8sIFhtdENtZCwgQ29udGV4dFR5cGUpOworCQlBU1NFUlQoQ29udGV4dFR5cGUpOworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbXBTbmQiLAorCQkJICBYbXRSaW5nSW5mby0+SGVhZCwgWG10UmluZ0luZm8tPlRhaWwsIFhtdENtZCwgMCk7CisJCS8vIENsZWFyIHRoZSBTR0wgZmllbGQuCisJCVhtdENtZC0+U2dsID0gMDsKKworCQlzd2l0Y2ggKCpDb250ZXh0VHlwZSkgeworCQljYXNlIFNYR19TR0xfRFVNQjoKKwkJCXsKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQkJCS8vIER1bWItbmljIHNlbmQuICBDb21tYW5kIGNvbnRleHQgaXMgdGhlIGR1bWItbmljIFNHTAorCQkJCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKUNvbnRleHRUeXBlOworCQkJCS8vIENvbXBsZXRlIHRoZSBzZW5kCisJCQkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsCisJCQkJCSAgVFJBQ0VfSU1QT1JUQU5ULCAiRG1TbmRDbXAiLCBza2IsIDAsCisJCQkJCSAgMCwgMCk7CisJCQkJQVNTRVJUKGFkYXB0ZXItPlN0YXRzLlhtdFFMZW4pOworCQkJCWFkYXB0ZXItPlN0YXRzLlhtdFFMZW4tLTsJLy8gd2l0aGluIFhtdFplcm9Mb2NrCisJCQkJYWRhcHRlci0+U3RhdHMuWG10T2srKzsKKwkJCQkvLyBOb3cgZHJvcCB0aGUgbG9jayBhbmQgY29tcGxldGUgdGhlIHNlbmQgYmFjayB0bworCQkJCS8vIE1pY3Jvc29mdC4gIFdlIG5lZWQgdG8gZHJvcCB0aGUgbG9jayBiZWNhdXNlCisJCQkJLy8gTWljcm9zb2Z0IGNhbiBjb21lIGJhY2sgd2l0aCBhIGNoaW1uZXkgc2VuZCwgd2hpY2gKKwkJCQkvLyByZXN1bHRzIGluIGEgZG91YmxlIHRyaXAgaW4gU3hnVGNwT3VwdXQKKwkJCQlzcGluX3VubG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCQkJCVNYR19DT01QTEVURV9EVU1CX1NFTkQoYWRhcHRlciwgc2tiKTsKKwkJCQkvLyBhbmQgcmVhY3F1aXJlLi4KKwkJCQlzcGluX2xvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQVNTRVJUKDApOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQ21wU25kIiwKKwkJICBhZGFwdGVyLCBYbXRSaW5nSW5mby0+SGVhZCwgWG10UmluZ0luZm8tPlRhaWwsIDApOworfQorCisvKgorICogc3hnX3Nsb3dfcmVjZWl2ZQorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCUV2ZW50CQktIFJlY2VpdmUgZXZlbnQKKyAqCisgKiBSZXR1cm4KKyAqCSBza2IKKyAqLworc3RhdGljIHN0cnVjdCBza19idWZmICpzeGdfc2xvd19yZWNlaXZlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIFBTWEdfRVZFTlQgRXZlbnQpCit7CisJUFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSIFJjdkRhdGFCdWZmZXJIZHI7CisJc3RydWN0IHNrX2J1ZmYgKlBhY2tldDsKKworCVJjdkRhdGFCdWZmZXJIZHIgPSAoUFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSKSBFdmVudC0+SG9zdEhhbmRsZTsKKwlBU1NFUlQoUmN2RGF0YUJ1ZmZlckhkcik7CisJQVNTRVJUKFJjdkRhdGFCdWZmZXJIZHItPlN0YXRlID09IFNYR19CVUZGRVJfT05DQVJEKTsKKwlBU1NFUlQoU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSA9PQorCSAgICAgICBSY3ZEYXRhQnVmZmVySGRyLT5WaXJ0dWFsQWRkcmVzcyk7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX0lNUE9SVEFOVCwgIlNsb3dSY3YiLCBFdmVudCwKKwkJICBSY3ZEYXRhQnVmZmVySGRyLCBSY3ZEYXRhQnVmZmVySGRyLT5TdGF0ZSwKKwkJICBSY3ZEYXRhQnVmZmVySGRyLT5WaXJ0dWFsQWRkcmVzcyk7CisJLy8gRHJvcCByY3YgZnJhbWVzIGluIG5vbi1ydW5uaW5nIHN0YXRlCisJc3dpdGNoIChhZGFwdGVyLT5TdGF0ZSkgeworCWNhc2UgU1hHX1NUQVRFX1JVTk5JTkc6CisJCWJyZWFrOworCWNhc2UgU1hHX1NUQVRFX1BBVVNJTkc6CisJY2FzZSBTWEdfU1RBVEVfUEFVU0VEOgorCWNhc2UgU1hHX1NUQVRFX0hBTFRJTkc6CisJCWdvdG8gZHJvcDsKKwlkZWZhdWx0OgorCQlBU1NFUlQoMCk7CisJCWdvdG8gZHJvcDsKKwl9CisKKwkvLyBDaGFuZ2UgYnVmZmVyIHN0YXRlIHRvIFVQU1RSRUFNCisJUmN2RGF0YUJ1ZmZlckhkci0+U3RhdGUgPSBTWEdfQlVGRkVSX1VQU1RSRUFNOworCWlmIChFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX1JDVkVSUikgeworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJSY3ZFcnJvciIsCisJCQkgIEV2ZW50LCBFdmVudC0+U3RhdHVzLCBFdmVudC0+SG9zdEhhbmRsZSwgMCk7CisJCS8vIFhYWFRPRE8gLSBSZW1vdmUgdGhpcyBwcmludCBsYXRlcgorCQlEQkdfRVJST1IoIlNYRzogUmVjZWl2ZSBlcnJvciAleFxuIiwgKih1MzIgKikKKwkJCSAgU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSk7CisJCXN4Z19wcm9jZXNzX3Jjdl9lcnJvcihhZGFwdGVyLCAqKHUzMiAqKQorCQkJCSAgICAgIFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04KKwkJCQkgICAgICAoUmN2RGF0YUJ1ZmZlckhkcikpOworCQlnb3RvIGRyb3A7CisJfQorI2lmIFhYWFRPRE8JCQkvLyBWTEFOIHN0dWZmCisJLy8gSWYgdGhlcmUncyBhIFZMQU4gdGFnLCBleHRyYWN0IGl0IGFuZCB2YWxpZGF0ZSBpdAorCWlmICgoKHBfZXRoZXJfaGVhZGVyKSAoU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSkpLT4KKwkgICAgRXRoZXJUeXBlID09IEVUSEVSVFlQRV9WTEFOKSB7CisJCWlmIChTeGdFeHRyYWN0VmxhbkhlYWRlcihhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyLCBFdmVudCkgIT0KKwkJICAgIFNUQVRVU19TVUNDRVNTKSB7CisJCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksCisJCQkJICAiQmFkVmxhbiIsIEV2ZW50LAorCQkJCSAgU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSwKKwkJCQkgIEV2ZW50LT5MZW5ndGgsIDApOworCQkJZ290byBkcm9wOworCQl9CisJfQorI2VuZGlmCisJLy8KKwkvLyBEdW1iLW5pYyBmcmFtZS4gIFNlZSBpZiBpdCBwYXNzZXMgb3VyIG1hYyBmaWx0ZXIgYW5kIHVwZGF0ZSBzdGF0cworCS8vCisJaWYgKCFzeGdfbWFjX2ZpbHRlcihhZGFwdGVyLCAocF9ldGhlcl9oZWFkZXIpCisJCQkgICAgU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSwKKwkJCSAgICBFdmVudC0+TGVuZ3RoKSkgeworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJSY3ZGaWx0ciIsCisJCQkgIEV2ZW50LCBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpLAorCQkJICBFdmVudC0+TGVuZ3RoLCAwKTsKKwkJZ290byBkcm9wOworCX0KKworCVBhY2tldCA9IFJjdkRhdGFCdWZmZXJIZHItPlN4Z0R1bWJSY3ZQYWNrZXQ7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfSU1QT1JUQU5ULCAiRHVtYlJjdiIsCisJCSAgUmN2RGF0YUJ1ZmZlckhkciwgUGFja2V0LCBFdmVudC0+TGVuZ3RoLCAwKTsKKwkvLworCS8vIExhc3RseSBhZGp1c3QgdGhlIHJlY2VpdmUgcGFja2V0IGxlbmd0aC4KKwkvLworCVNYR19BREpVU1RfUkNWX1BBQ0tFVChQYWNrZXQsIFJjdkRhdGFCdWZmZXJIZHIsIEV2ZW50KTsKKworCXJldHVybiAoUGFja2V0KTsKKworICAgICAgZHJvcDoKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEcm9wUmN2IiwKKwkJICBSY3ZEYXRhQnVmZmVySGRyLCBFdmVudC0+TGVuZ3RoLCAwLCAwKTsKKwlhZGFwdGVyLT5TdGF0cy5SY3ZEaXNjYXJkcysrOworCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCVNYR19GUkVFX1JDVl9EQVRBX0JVRkZFUihhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCXJldHVybiAoTlVMTCk7Cit9CisKKy8qCisgKiBzeGdfcHJvY2Vzc19yY3ZfZXJyb3IgLSBwcm9jZXNzIHJlY2VpdmUgZXJyb3IgYW5kIHVwZGF0ZQorICogc3RhdHMKKyAqCisgKiBBcmd1bWVudHM6CisgKgkJYWRhcHRlcgkJLSBBZGFwdGVyIHN0cnVjdHVyZQorICoJCUVycm9yU3RhdHVzCS0gNC1ieXRlIHJlY2VpdmUgZXJyb3Igc3RhdHVzCisgKgorICogUmV0dXJuIFZhbHVlOgorICogCU5vbmUKKyAqLworc3RhdGljIHZvaWQgc3hnX3Byb2Nlc3NfcmN2X2Vycm9yKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHUzMiBFcnJvclN0YXR1cykKK3sKKwl1MzIgRXJyb3I7CisKKwlhZGFwdGVyLT5TdGF0cy5SY3ZFcnJvcnMrKzsKKworCWlmIChFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9FUlJPUikgeworCQlFcnJvciA9IEVycm9yU3RhdHVzICYgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX01BU0s7CisJCXN3aXRjaCAoRXJyb3IpIHsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfQ1NVTToKKwkJCWFkYXB0ZXItPlN0YXRzLlRyYW5zcG9ydENzdW0rKzsKKwkJCWJyZWFrOworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9VRkxPVzoKKwkJCWFkYXB0ZXItPlN0YXRzLlRyYW5zcG9ydFVmbG93Kys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfSERSTEVOOgorCQkJYWRhcHRlci0+U3RhdHMuVHJhbnNwb3J0SGRyTGVuKys7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoRXJyb3JTdGF0dXMgJiBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0VSUk9SKSB7CisJCUVycm9yID0gRXJyb3JTdGF0dXMgJiBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX01BU0s7CisJCXN3aXRjaCAoRXJyb3IpIHsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0NTVU06CisJCQlhZGFwdGVyLT5TdGF0cy5OZXR3b3JrQ3N1bSsrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19VRkxPVzoKKwkJCWFkYXB0ZXItPlN0YXRzLk5ldHdvcmtVZmxvdysrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19IRFJMRU46CisJCQlhZGFwdGVyLT5TdGF0cy5OZXR3b3JrSGRyTGVuKys7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoRXJyb3JTdGF0dXMgJiBTWEdfUkNWX1NUQVRVU19QQVJJVFkpIHsKKwkJYWRhcHRlci0+U3RhdHMuUGFyaXR5Kys7CisJfQorCWlmIChFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX0xJTktfRVJST1IpIHsKKwkJRXJyb3IgPSBFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX0xJTktfTUFTSzsKKwkJc3dpdGNoIChFcnJvcikgeworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX0xJTktfUEFSSVRZOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua1Bhcml0eSsrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19FQVJMWToKKwkJCWFkYXB0ZXItPlN0YXRzLkxpbmtFYXJseSsrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19CVUZPRkxPVzoKKwkJCWFkYXB0ZXItPlN0YXRzLkxpbmtCdWZPZmxvdysrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19DT0RFOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua0NvZGUrKzsKKwkJCWJyZWFrOworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX0xJTktfRFJJQkJMRToKKwkJCWFkYXB0ZXItPlN0YXRzLkxpbmtEcmliYmxlKys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19MSU5LX0NSQzoKKwkJCWFkYXB0ZXItPlN0YXRzLkxpbmtDcmMrKzsKKwkJCWJyZWFrOworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX0xJTktfT0ZMT1c6CisJCQlhZGFwdGVyLT5TdGF0cy5MaW5rT2Zsb3crKzsKKwkJCWJyZWFrOworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX0xJTktfVUZMT1c6CisJCQlhZGFwdGVyLT5TdGF0cy5MaW5rVWZsb3crKzsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogc3hnX21hY19maWx0ZXIKKyAqCisgKiBBcmd1bWVudHM6CisgKgkJYWRhcHRlcgkJLSBBZGFwdGVyIHN0cnVjdHVyZQorICoJCXBldGhlcgkJLSBFdGhlcm5ldCBoZWFkZXIKKyAqCQlsZW5ndGgJCS0gRnJhbWUgbGVuZ3RoCisgKgorICogUmV0dXJuIFZhbHVlOgorICogCVRSVUUgaWYgdGhlIGZyYW1lIGlzIHRvIGJlIGFsbG93ZWQKKyAqLworc3RhdGljIGJvb2wgc3hnX21hY19maWx0ZXIocF9hZGFwdGVyX3QgYWRhcHRlciwgcF9ldGhlcl9oZWFkZXIgRXRoZXJIZHIsCisJCQkgICB1c2hvcnQgbGVuZ3RoKQoreworCWJvb2wgRXF1YWxBZGRyOworCisJaWYgKFNYR19NVUxUSUNBU1RfUEFDS0VUKEV0aGVySGRyKSkgeworCQlpZiAoU1hHX0JST0FEQ0FTVF9QQUNLRVQoRXRoZXJIZHIpKSB7CisJCQkvLyBicm9hZGNhc3QKKwkJCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfQkNBU1QpIHsKKwkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2QmNhc3RQa3RzKys7CisJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJjYXN0Qnl0ZXMgKz0gbGVuZ3RoOworCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZQa3RzKys7CisJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJ5dGVzICs9IGxlbmd0aDsKKwkJCQlyZXR1cm4gKFRSVUUpOworCQkJfQorCQl9IGVsc2UgeworCQkJLy8gbXVsdGljYXN0CisJCQlpZiAoYWRhcHRlci0+TWFjRmlsdGVyICYgTUFDX0FMTE1DQVNUKSB7CisJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdk1jYXN0UGt0cysrOworCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZNY2FzdEJ5dGVzICs9IGxlbmd0aDsKKwkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2UGt0cysrOworCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCeXRlcyArPSBsZW5ndGg7CisJCQkJcmV0dXJuIChUUlVFKTsKKwkJCX0KKwkJCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfTUNBU1QpIHsKKwkJCQlQU1hHX01VTFRJQ0FTVF9BRERSRVNTIE11bHRpY2FzdEFkZHJzID0KKwkJCQkgICAgYWRhcHRlci0+TXVsdGljYXN0QWRkcnM7CisJCQkJd2hpbGUgKE11bHRpY2FzdEFkZHJzKSB7CisJCQkJCUVUSEVSX0VRX0FERFIoTXVsdGljYXN0QWRkcnMtPkFkZHJlc3MsCisJCQkJCQkgICAgICBFdGhlckhkci0+ZXRoZXJfZGhvc3QsCisJCQkJCQkgICAgICBFcXVhbEFkZHIpOworCQkJCQlpZiAoRXF1YWxBZGRyKSB7CisJCQkJCQlhZGFwdGVyLT5TdGF0cy4KKwkJCQkJCSAgICBEdW1iUmN2TWNhc3RQa3RzKys7CisJCQkJCQlhZGFwdGVyLT5TdGF0cy4KKwkJCQkJCSAgICBEdW1iUmN2TWNhc3RCeXRlcyArPSBsZW5ndGg7CisJCQkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2UGt0cysrOworCQkJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJ5dGVzICs9CisJCQkJCQkgICAgbGVuZ3RoOworCQkJCQkJcmV0dXJuIChUUlVFKTsKKwkJCQkJfQorCQkJCQlNdWx0aWNhc3RBZGRycyA9IE11bHRpY2FzdEFkZHJzLT5OZXh0OworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAoYWRhcHRlci0+TWFjRmlsdGVyICYgTUFDX0RJUkVDVEVEKSB7CisJCS8vIE5vdCBicm9hZGNhc3Qgb3IgbXVsdGljYXN0LiAgTXVzdCBiZSBkaXJlY3RlZCBhdCB1cyBvcgorCQkvLyB0aGUgY2FyZCBpcyBpbiBwcm9taXNjdW91cyBtb2RlLiAgRWl0aGVyIHdheSwgY29uc2lkZXIgaXQKKwkJLy8gb3VycyBpZiBNQUNfRElSRUNURUQgaXMgc2V0CisJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZVY2FzdFBrdHMrKzsKKwkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlVjYXN0Qnl0ZXMgKz0gbGVuZ3RoOworCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2UGt0cysrOworCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2Qnl0ZXMgKz0gbGVuZ3RoOworCQlyZXR1cm4gKFRSVUUpOworCX0KKwlpZiAoYWRhcHRlci0+TWFjRmlsdGVyICYgTUFDX1BST01JU0MpIHsKKwkJLy8gV2hhdGV2ZXIgaXQgaXMsIGtlZXAgaXQuCisJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZQa3RzKys7CisJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCeXRlcyArPSBsZW5ndGg7CisJCXJldHVybiAoVFJVRSk7CisJfQorCWFkYXB0ZXItPlN0YXRzLlJjdkRpc2NhcmRzKys7CisJcmV0dXJuIChGQUxTRSk7Cit9CisKK3N0YXRpYyBpbnQgc3hnX3JlZ2lzdGVyX2ludGVycnVwdChwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCWlmICghYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQpIHsKKwkJaW50IHJldHZhbDsKKworCQlEQkdfRVJST1IKKwkJICAgICgic3hnOiAlcyBBbGxvY0FkYXB0UnNyY3MgYWRhcHRlclslcF0gZGV2LT5pcnFbJXhdICV4XG4iLAorCQkgICAgIF9fRlVOQ1RJT05fXywgYWRhcHRlciwgYWRhcHRlci0+bmV0ZGV2LT5pcnEsIE5SX0lSUVMpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2ssCisJCQkJICAgICAgIHN4Z19nbG9iYWwuZmxhZ3MpOworCisJCXJldHZhbCA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPm5ldGRldi0+aXJxLAorCQkJCSAgICAgJnN4Z19pc3IsCisJCQkJICAgICBJUlFGX1NIQVJFRCwKKwkJCQkgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bmV0ZGV2KTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jaywgc3hnX2dsb2JhbC5mbGFncyk7CisKKwkJaWYgKHJldHZhbCkgeworCQkJREJHX0VSUk9SKCJzeGc6IHJlcXVlc3RfaXJxICglcykgRkFJTEVEIFsleF1cbiIsCisJCQkJICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIHJldHZhbCk7CisJCQlyZXR1cm4gKHJldHZhbCk7CisJCX0KKwkJYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQgPSAxOworCQlhZGFwdGVyLT5JbnRSZWdpc3RlcmVkID0gVFJVRTsKKwkJLy8gRGlzYWJsZSBSU1Mgd2l0aCBsaW5lLWJhc2VkIGludGVycnVwdHMKKwkJYWRhcHRlci0+TXNpRW5hYmxlZCA9IEZBTFNFOworCQlhZGFwdGVyLT5Sc3NFbmFibGVkID0gRkFMU0U7CisJCURCR19FUlJPUigic3hnOiAlcyBBbGxvY0FkYXB0UnNyY3MgYWRhcHRlclslcF0gZGV2LT5pcnFbJXhdXG4iLAorCQkJICBfX0ZVTkNUSU9OX18sIGFkYXB0ZXIsIGFkYXB0ZXItPm5ldGRldi0+aXJxKTsKKwl9CisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19kZXJlZ2lzdGVyX2ludGVycnVwdChwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19GVU5DVElPTl9fLCBhZGFwdGVyKTsKKyNpZiBYWFhUT0RPCisJc2xpY19pbml0X2NsZWFudXAoYWRhcHRlcik7CisjZW5kaWYKKwltZW1zZXQoJmFkYXB0ZXItPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKKwlhZGFwdGVyLT5lcnJvcl9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT5yY3ZfaW50ZXJydXB0cyA9IDA7CisJYWRhcHRlci0+eG1pdF9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT5saW5rZXZlbnRfaW50ZXJydXB0cyA9IDA7CisJYWRhcHRlci0+dXByX2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPm51bV9pc3JzID0gMDsKKwlhZGFwdGVyLT54bWl0X2NvbXBsZXRlcyA9IDA7CisJYWRhcHRlci0+cmN2X2Jyb2FkY2FzdHMgPSAwOworCWFkYXB0ZXItPnJjdl9tdWx0aWNhc3RzID0gMDsKKwlhZGFwdGVyLT5yY3ZfdW5pY2FzdHMgPSAwOworCURCR19FUlJPUigic3hnOiAlcyBFWElUXG4iLCBfX0ZVTkNUSU9OX18pOworfQorCisvKgorICogIHN4Z19pZl9pbml0CisgKgorICogIFBlcmZvcm0gaW5pdGlhbGl6YXRpb24gb2Ygb3VyIHNsaWMgaW50ZXJmYWNlLgorICoKKyAqLworc3RhdGljIGludCBzeGdfaWZfaW5pdChwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCXBfbmV0X2RldmljZSBkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBFTlRFUiBzdGF0ZXNbJWQ6JWQ6JWRdIGZsYWdzWyV4XVxuIiwKKwkJICBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKKwkJICBhZGFwdGVyLT5xdWV1ZXNfaW5pdGlhbGl6ZWQsIGFkYXB0ZXItPnN0YXRlLAorCQkgIGFkYXB0ZXItPmxpbmtzdGF0ZSwgZGV2LT5mbGFncyk7CisKKwkvKiBhZGFwdGVyIHNob3VsZCBiZSBkb3duIGF0IHRoaXMgcG9pbnQgKi8KKwlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTikgeworCQlEQkdfRVJST1IoInN4Z19pZl9pbml0IGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX0RPV05cbiIpOworCQlyZXR1cm4gKC1FSU8pOworCX0KKwlBU1NFUlQoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfRE9XTik7CisKKwlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gZGV2LT5mbGFnczsKKwlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOworCWlmIChkZXYtPmZsYWdzKSB7CisJCURCR19FUlJPUigic3hnOiAlcyAoJXMpIFNldCBNQUMgb3B0aW9uczogIiwgX19GVU5DVElPTl9fLAorCQkJICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpIHsKKwkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0JDQVNUOworCQkJREJHX0VSUk9SKCJCQ0FTVCAiKTsKKwkJfQorCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOworCQkJREJHX0VSUk9SKCJQUk9NSVNDICIpOworCQl9CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19BTExNQ0FTVDsKKwkJCURCR19FUlJPUigiQUxMX01DQVNUICIpOworCQl9CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgeworCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfTUNBU1Q7CisJCQlEQkdfRVJST1IoIk1DQVNUICIpOworCQl9CisJCURCR19FUlJPUigiXG4iKTsKKwl9CisJc3RhdHVzID0gc3hnX3JlZ2lzdGVyX2ludGVycnVwdChhZGFwdGVyKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCURCR19FUlJPUigic3hnX2lmX2luaXQ6IHN4Z19yZWdpc3Rlcl9pbnRlcnJ1cHQgRkFJTEVEICV4XG4iLAorCQkJICBzdGF0dXMpOworCQlzeGdfZGVyZWdpc3Rlcl9pbnRlcnJ1cHQoYWRhcHRlcik7CisJCXJldHVybiAoc3RhdHVzKTsKKwl9CisKKwlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX1VQOworCisJLyoKKwkgKiAgICBjbGVhciBhbnkgcGVuZGluZyBldmVudHMsIHRoZW4gZW5hYmxlIGludGVycnVwdHMKKwkgKi8KKwlEQkdfRVJST1IoInN4ZzogJXMgRU5BQkxFIGludGVycnVwdHMoc2xpYylcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworc3RhdGljIGludCBzeGdfZW50cnlfb3BlbihwX25ldF9kZXZpY2UgZGV2KQoreworCXBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7CisJaW50IHN0YXR1czsKKworCUFTU0VSVChhZGFwdGVyKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgYWRhcHRlci0+YWN0aXZhdGVkWyVkXVxuIiwgX19GVU5DVElPTl9fLAorCQkgIGFkYXB0ZXItPmFjdGl2YXRlZCk7CisJREJHX0VSUk9SCisJICAgICgic3hnOiAlcyAoJXMpOiBbamlmZmllc1slbHhdIGNwdSAlZF0gZGV2WyVwXSBhZGFwdFslcF0gcG9ydFslZF1cbiIsCisJICAgICBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpLAorCSAgICAgYWRhcHRlci0+bmV0ZGV2LCBhZGFwdGVyLCBhZGFwdGVyLT5wb3J0KTsKKworCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKKwlpZiAoIWFkYXB0ZXItPmFjdGl2YXRlZCkgeworCQlzeGdfZ2xvYmFsLm51bV9zeGdfcG9ydHNfYWN0aXZlKys7CisJCWFkYXB0ZXItPmFjdGl2YXRlZCA9IDE7CisJfQorCS8vIEluaXRpYWxpemUgdGhlIGFkYXB0ZXIKKwlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2luaXRpYWxpemVfYWRhcHRlclxuIiwgX19GVU5DVElPTl9fKTsKKwlzdGF0dXMgPSBzeGdfaW5pdGlhbGl6ZV9hZGFwdGVyKGFkYXB0ZXIpOworCURCR19FUlJPUigic3hnOiAlcyBFWElUIHN4Z19pbml0aWFsaXplX2FkYXB0ZXIgc3RhdHVzWyV4XVxuIiwKKwkJICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisKKwlpZiAoc3RhdHVzID09IFNUQVRVU19TVUNDRVNTKSB7CisJCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfaWZfaW5pdFxuIiwgX19GVU5DVElPTl9fKTsKKwkJc3RhdHVzID0gc3hnX2lmX2luaXQoYWRhcHRlcik7CisJCURCR19FUlJPUigic3hnOiAlcyBFWElUIHN4Z19pZl9pbml0IHN0YXR1c1sleF1cbiIsIF9fRlVOQ1RJT05fXywKKwkJCSAgc3RhdHVzKTsKKwl9CisKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCWlmIChhZGFwdGVyLT5hY3RpdmF0ZWQpIHsKKwkJCXN4Z19nbG9iYWwubnVtX3N4Z19wb3J0c19hY3RpdmUtLTsKKwkJCWFkYXB0ZXItPmFjdGl2YXRlZCA9IDA7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jaywKKwkJCQkgICAgICAgc3hnX2dsb2JhbC5mbGFncyk7CisJCXJldHVybiAoc3RhdHVzKTsKKwl9CisJREJHX0VSUk9SKCJzeGc6ICVzIEVOQUJMRSBBTEwgSU5URVJSVVBUU1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8vIEVuYWJsZSBpbnRlcnJ1cHRzCisJU1hHX0VOQUJMRV9BTExfSU5URVJSVVBUUyhhZGFwdGVyKTsKKworCURCR19FUlJPUigic3hnOiAlcyBFWElUXG4iLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jaywgc3hnX2dsb2JhbC5mbGFncyk7CisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc3hnX2VudHJ5X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQoreworCXBfbmV0X2RldmljZSBkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpZGV2KTsKKwl1MzIgbW1pb19zdGFydCA9IDA7CisJdW5zaWduZWQgaW50IG1taW9fbGVuID0gMDsKKwlwX2FkYXB0ZXJfdCBhZGFwdGVyID0gKHBfYWRhcHRlcl90KSBuZXRkZXZfcHJpdihkZXYpOworCisJQVNTRVJUKGFkYXB0ZXIpOworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBkZXZbJXBdIGFkYXB0ZXJbJXBdXG4iLCBfX0ZVTkNUSU9OX18sIGRldiwKKwkJICBhZGFwdGVyKTsKKwlzeGdfZGVyZWdpc3Rlcl9pbnRlcnJ1cHQoYWRhcHRlcik7CisJc3hnX3VubWFwX21taW9fc3BhY2UoYWRhcHRlcik7CisJREJHX0VSUk9SKCJzeGc6ICVzIHVucmVnaXN0ZXJfbmV0ZGV2XG4iLCBfX0ZVTkNUSU9OX18pOworCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CisJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CisKKwlEQkdfRVJST1IoInN4ZzogJXMgcmVsX3JlZ2lvbigwKSBzdGFydFsleF0gbGVuWyV4XVxuIiwgX19GVU5DVElPTl9fLAorCQkgIG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOworCisJREJHX0VSUk9SKCJzeGc6ICVzIGlvdW5tYXAgZGV2LT5iYXNlX2FkZHJbJXhdXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgKHVuc2lnbmVkIGludClkZXYtPmJhc2VfYWRkcik7CisJaW91bm1hcCgoY2hhciAqKWRldi0+YmFzZV9hZGRyKTsKKworCURCR19FUlJPUigic3hnOiAlcyBkZWFsbG9jYXRlIGRldmljZVxuIiwgX19GVU5DVElPTl9fKTsKKwlrZnJlZShkZXYpOworCURCR19FUlJPUigic3hnOiAlcyBFWElUXG4iLCBfX0ZVTkNUSU9OX18pOworfQorCitzdGF0aWMgaW50IHN4Z19lbnRyeV9oYWx0KHBfbmV0X2RldmljZSBkZXYpCit7CisJcF9hZGFwdGVyX3QgYWRhcHRlciA9IChwX2FkYXB0ZXJfdCkgbmV0ZGV2X3ByaXYoZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBFTlRFUlxuIiwgX19GVU5DVElPTl9fLCBkZXYtPm5hbWUpOworCisJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfRE9XTjsKKwlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CisJYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiA9IDA7CisJREJHX0VSUk9SKCJzeGc6ICVzICglcykgc2V0IGFkYXB0ZXJbJXBdIHN0YXRlIHRvIEFEQVBUX0RPV04oJWQpXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgZGV2LT5uYW1lLCBhZGFwdGVyLCBhZGFwdGVyLT5zdGF0ZSk7CisKKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBFWElUXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+bmFtZSk7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fRlVOQ1RJT05fXyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jaywgc3hnX2dsb2JhbC5mbGFncyk7CisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKK3N0YXRpYyBpbnQgc3hnX2lvY3RsKHBfbmV0X2RldmljZSBkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJQVNTRVJUKHJxKTsKKy8vICAgICAgREJHX0VSUk9SKCJzeGc6ICVzIGNtZFsleF0gcnFbJXBdIGRldlslcF1cbiIsIF9fRlVOQ1RJT05fXywgY21kLCBycSwgZGV2KTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ1NMSUNTRVRJTlRBR0c6CisJCXsKKy8vICAgICAgICAgICAgICAgICAgICAgIHBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7CisJCQl1MzIgZGF0YVs3XTsKKwkJCXUzMiBpbnRhZ2c7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkgeworCQkJCURCR19FUlJPUgorCQkJCSAgICAoImNvcHlfZnJvbV91c2VyIEZBSUxFRCAgZ2V0dGluZyBpbml0aWFsIHBhcmFtc1xuIik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCQlpbnRhZ2cgPSBkYXRhWzBdOworCQkJcHJpbnRrKEtFUk5fRU1FUkcKKwkJCSAgICAgICAiJXM6IHNldCBpbnRlcnJ1cHQgYWdncmVnYXRpb24gdG8gJWRcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCBpbnRhZ2cpOworCQkJcmV0dXJuIDA7CisJCX0KKworCWRlZmF1bHQ6CisvLyAgICAgICAgICAgICAgREJHX0VSUk9SKCJzeGc6ICVzIFVOU1VQUE9SVEVEWyV4XVxuIiwgX19GVU5DVElPTl9fLCBjbWQpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXJldHVybiAwOworfQorCisjZGVmaW5lIE5PUk1BTF9FVEhGUkFNRSAgICAgMAorCisvKgorICoKKyAqIHN4Z19zZW5kX3BhY2tldHMgLSBTZW5kIGEgc2tiIHBhY2tldAorICoKKyAqIEFyZ3VtZW50czoKKyAqCQkJc2tiICAgICAgICAgICAgICAgICAgICAgLSBUaGUgcGFja2V0IHRvIHNlbmQKKyAqCQkJZGV2ICAgICAgICAgICAgICAgICAgICAgLSBPdXIgbGludXggbmV0IGRldmljZSB0aGF0IHJlZnMgb3VyIGFkYXB0ZXIKKyAqCisgKiBSZXR1cm46CisgKgkJMCAgIHJlZ2FyZGxlc3Mgb2Ygb3V0Y29tZSAgICBYWFhUT0RPIHJlZmVyIHRvIGUxMDAwIGRyaXZlcgorICovCitzdGF0aWMgaW50IHN4Z19zZW5kX3BhY2tldHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgcF9uZXRfZGV2aWNlIGRldikKK3sKKwlwX2FkYXB0ZXJfdCBhZGFwdGVyID0gKHBfYWRhcHRlcl90KSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfc2VuZF9wYWNrZXRzIHNrYlslcF1cbiIsIF9fRlVOQ1RJT05fXywKKwkJICBza2IpOworCS8vIENoZWNrIHRoZSBhZGFwdGVyIHN0YXRlCisJc3dpdGNoIChhZGFwdGVyLT5TdGF0ZSkgeworCWNhc2UgU1hHX1NUQVRFX0lOSVRJQUxJWklORzoKKwljYXNlIFNYR19TVEFURV9IQUxURUQ6CisJY2FzZSBTWEdfU1RBVEVfU0hVVERPV046CisJCUFTU0VSVCgwKTsJLy8gdW5leHBlY3RlZAorCQkvLyBmYWxsIHRocm91Z2gKKwljYXNlIFNYR19TVEFURV9SRVNFVFRJTkc6CisJY2FzZSBTWEdfU1RBVEVfU0xFRVA6CisJY2FzZSBTWEdfU1RBVEVfQk9PVERJQUc6CisJY2FzZSBTWEdfU1RBVEVfRElBRzoKKwljYXNlIFNYR19TVEFURV9IQUxUSU5HOgorCQlzdGF0dXMgPSBTVEFUVVNfRkFJTFVSRTsKKwkJYnJlYWs7CisJY2FzZSBTWEdfU1RBVEVfUlVOTklORzoKKwkJaWYgKGFkYXB0ZXItPkxpbmtTdGF0ZSAhPSBTWEdfTElOS19VUCkgeworCQkJc3RhdHVzID0gU1RBVFVTX0ZBSUxVUkU7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQVNTRVJUKDApOworCQlzdGF0dXMgPSBTVEFUVVNfRkFJTFVSRTsKKwl9CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlnb3RvIHhtaXRfZmFpbDsKKwl9CisJLy8gc2VuZCBhIHBhY2tldAorCXN0YXR1cyA9IHN4Z190cmFuc21pdF9wYWNrZXQoYWRhcHRlciwgc2tiKTsKKwlpZiAoc3RhdHVzID09IFNUQVRVU19TVUNDRVNTKSB7CisJCWdvdG8geG1pdF9kb25lOworCX0KKworICAgICAgeG1pdF9mYWlsOgorCS8vIHJlamVjdCAmIGNvbXBsZXRlIGFsbCB0aGUgcGFja2V0cyBpZiB0aGV5IGNhbnQgYmUgc2VudAorCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKyNpZiBYWFhUT0RPCisvLyAgICAgIHN4Z19zZW5kX3BhY2tldHNfZmFpbChhZGFwdGVyLCBza2IsIHN0YXR1cyk7CisjZWxzZQorCQlTWEdfRFJPUF9EVU1CX1NFTkQoYWRhcHRlciwgc2tiKTsKKwkJYWRhcHRlci0+c3RhdHMudHhfZHJvcHBlZCsrOworI2VuZGlmCisJfQorCURCR19FUlJPUigic3hnOiAlcyBFWElUIHN4Z19zZW5kX3BhY2tldHMgc3RhdHVzWyV4XVxuIiwgX19GVU5DVElPTl9fLAorCQkgIHN0YXR1cyk7CisKKyAgICAgIHhtaXRfZG9uZToKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHN4Z190cmFuc21pdF9wYWNrZXQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRyYW5zbWl0cyBhIHNpbmdsZSBwYWNrZXQuCisgKgorICogQXJndW1lbnRzIC0KKyAqCQlhZGFwdGVyCQkJLSBQb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICogICAgICBza2IgICAgICAgICAgICAgLSBUaGUgcGFja2V0IHRvIGJlIHNlbnQKKyAqCisgKiBSZXR1cm4gLQorICogCQlTVEFUVVMgb2Ygc2VuZAorICovCitzdGF0aWMgaW50IHN4Z190cmFuc21pdF9wYWNrZXQocF9hZGFwdGVyX3QgYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlQU0NBVFRFUl9HQVRIRVJfTElTVCBwU2dsOworCVBTWEdfU0NBVFRFUl9HQVRIRVIgU3hnU2dsOworCXZvaWQgKlNnbEJ1ZmZlcjsKKwl1MzIgU2dsQnVmZmVyTGVuZ3RoOworCisJLy8gVGhlIHZhc3QgbWFqb3JpdHkgb2Ygd29yayBpcyBkb25lIGluIHRoZSBzaGFyZWQKKwkvLyBzeGdfZHVtYl9zZ2wgcm91dGluZS4KKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iU2VuZCIsCisJCSAgYWRhcHRlciwgc2tiLCAwLCAwKTsKKworCS8vIEFsbG9jYXRlIGEgU0dMIGJ1ZmZlcgorCVNYR19HRVRfU0dMX0JVRkZFUihhZGFwdGVyLCBTeGdTZ2wpOworCWlmICghU3hnU2dsKSB7CisJCWFkYXB0ZXItPlN0YXRzLk5vU2dsQnVmKys7CisJCWFkYXB0ZXItPlN0YXRzLlhtdEVycm9ycysrOworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJTbmRQa3RGMSIsCisJCQkgIGFkYXB0ZXIsIHNrYiwgMCwgMCk7CisJCXJldHVybiAoU1RBVFVTX1JFU09VUkNFUyk7CisJfQorCUFTU0VSVChTeGdTZ2wtPmFkYXB0ZXIgPT0gYWRhcHRlcik7CisJU2dsQnVmZmVyID0gU1hHX1NHTF9CVUZGRVIoU3hnU2dsKTsKKwlTZ2xCdWZmZXJMZW5ndGggPSBTWEdfU0dMX0JVRl9TSVpFOworCVN4Z1NnbC0+VmxhblRhZy5WbGFuVGNpID0gMDsKKwlTeGdTZ2wtPlZsYW5UYWcuVmxhblRwaWQgPSAwOworCVN4Z1NnbC0+VHlwZSA9IFNYR19TR0xfRFVNQjsKKwlTeGdTZ2wtPkR1bWJQYWNrZXQgPSBza2I7CisJcFNnbCA9IE5VTEw7CisKKwkvLyBDYWxsIHRoZSBjb21tb24gc3hnX2R1bWJfc2dsIHJvdXRpbmUgdG8gY29tcGxldGUgdGhlIHNlbmQuCisJc3hnX2R1bWJfc2dsKHBTZ2wsIFN4Z1NnbCk7CisJLy8gUmV0dXJuIHN1Y2Nlc3MgICBzeGdfZHVtYl9zZ2wgKG9yIHNvbWV0aGluZyBsYXRlcikgd2lsbCBjb21wbGV0ZSBpdC4KKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworLyoKKyAqIHN4Z19kdW1iX3NnbAorICoKKyAqIEFyZ3VtZW50czoKKyAqCQlwU2dsICAgICAtCisgKgkJU3hnU2dsICAgLSBTWEdfU0NBVFRFUl9HQVRIRVIKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiAJTm9uZS4KKyAqLworc3RhdGljIHZvaWQgc3hnX2R1bWJfc2dsKFBTQ0FUVEVSX0dBVEhFUl9MSVNUIHBTZ2wsIFBTWEdfU0NBVFRFUl9HQVRIRVIgU3hnU2dsKQoreworCXBfYWRhcHRlcl90IGFkYXB0ZXIgPSBTeGdTZ2wtPmFkYXB0ZXI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IFN4Z1NnbC0+RHVtYlBhY2tldDsKKwkvLyBGb3Igbm93LCBhbGwgZHVtYi1uaWMgc2VuZHMgZ28gb24gUlNTIHF1ZXVlIHplcm8KKwlQU1hHX1hNVF9SSU5HIFhtdFJpbmcgPSAmYWRhcHRlci0+WG10UmluZ3NbMF07CisJUFNYR19SSU5HX0lORk8gWG10UmluZ0luZm8gPSAmYWRhcHRlci0+WG10UmluZ1plcm9JbmZvOworCVBTWEdfQ01EIFhtdENtZCA9IE5VTEw7CisvLyAgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCA9IDA7CisJdTMyIERhdGFMZW5ndGggPSBza2ItPmxlbjsKKy8vICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZkxlbjsKKy8vICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIFNnbE9mZnNldDsKKwl1NjQgcGh5c19hZGRyOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRHVtYlNnbCIsCisJCSAgcFNnbCwgU3hnU2dsLCAwLCAwKTsKKworCS8vIFNldCBhc2lkZSBhIHBvaW50ZXIgdG8gdGhlIHNnbAorCVN4Z1NnbC0+cFNnbCA9IHBTZ2w7CisKKwkvLyBTYW5pdHkgY2hlY2sgdGhhdCBvdXIgU0dMIGZvcm1hdCBpcyBhcyB3ZSBleHBlY3QuCisJQVNTRVJUKHNpemVvZihTWEdfWDY0X1NHRSkgPT0gc2l6ZW9mKFNDQVRURVJfR0FUSEVSX0VMRU1FTlQpKTsKKwkvLyBTaG91bGRuJ3QgYmUgYSB2bGFuIHRhZyBvbiB0aGlzIGZyYW1lCisJQVNTRVJUKFN4Z1NnbC0+VmxhblRhZy5WbGFuVGNpID09IDApOworCUFTU0VSVChTeGdTZ2wtPlZsYW5UYWcuVmxhblRwaWQgPT0gMCk7CisKKwkvLyBGcm9tIGhlcmUgYmVsb3cgd2Ugd29yayB3aXRoIHRoZSBTR0wgcGxhY2VkIGluIG91cgorCS8vIGJ1ZmZlci4KKworCVN4Z1NnbC0+U2dsLk51bWJlck9mRWxlbWVudHMgPSAxOworCisJLy8gR3JhYiB0aGUgc3BpbmxvY2sgYW5kIGFjcXVpcmUgYSBjb21tYW5kCisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJU1hHX0dFVF9DTUQoWG10UmluZywgWG10UmluZ0luZm8sIFhtdENtZCwgU3hnU2dsKTsKKwlpZiAoWG10Q21kID09IE5VTEwpIHsKKwkJLy8gQ2FsbCBzeGdfY29tcGxldGVfc2xvd19zZW5kIHRvIHNlZSBpZiB3ZSBjYW4KKwkJLy8gZnJlZSB1cCBhbnkgWG10UmluZ1plcm8gZW50cmllcyBhbmQgdGhlbiB0cnkgYWdhaW4KKwkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwkJc3hnX2NvbXBsZXRlX3Nsb3dfc2VuZChhZGFwdGVyKTsKKwkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJCVNYR19HRVRfQ01EKFhtdFJpbmcsIFhtdFJpbmdJbmZvLCBYbXRDbWQsIFN4Z1NnbCk7CisJCWlmIChYbXRDbWQgPT0gTlVMTCkgeworCQkJYWRhcHRlci0+U3RhdHMuWG10WmVyb0Z1bGwrKzsKKwkJCWdvdG8gYWJvcnRjbWQ7CisJCX0KKwl9CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRHVtYkNtZCIsCisJCSAgWG10Q21kLCBYbXRSaW5nSW5mby0+SGVhZCwgWG10UmluZ0luZm8tPlRhaWwsIDApOworCS8vIFVwZGF0ZSBzdGF0cworCWFkYXB0ZXItPlN0YXRzLkR1bWJYbXRQa3RzKys7CisJYWRhcHRlci0+U3RhdHMuRHVtYlhtdEJ5dGVzICs9IERhdGFMZW5ndGg7CisjaWYgWFhYVE9ETwkJCS8vIFN0YXRzIHN0dWZmCisJaWYgKFNYR19NVUxUSUNBU1RfUEFDS0VUKEV0aGVySGRyKSkgeworCQlpZiAoU1hHX0JST0FEQ0FTVF9QQUNLRVQoRXRoZXJIZHIpKSB7CisJCQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10QmNhc3RQa3RzKys7CisJCQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10QmNhc3RCeXRlcyArPSBEYXRhTGVuZ3RoOworCQl9IGVsc2UgeworCQkJYWRhcHRlci0+U3RhdHMuRHVtYlhtdE1jYXN0UGt0cysrOworCQkJYWRhcHRlci0+U3RhdHMuRHVtYlhtdE1jYXN0Qnl0ZXMgKz0gRGF0YUxlbmd0aDsKKwkJfQorCX0gZWxzZSB7CisJCWFkYXB0ZXItPlN0YXRzLkR1bWJYbXRVY2FzdFBrdHMrKzsKKwkJYWRhcHRlci0+U3RhdHMuRHVtYlhtdFVjYXN0Qnl0ZXMgKz0gRGF0YUxlbmd0aDsKKwl9CisjZW5kaWYKKwkvLyBGaWxsIGluIHRoZSBjb21tYW5kCisJLy8gQ29weSBvdXQgdGhlIGZpcnN0IFNHRSB0byB0aGUgY29tbWFuZCBhbmQgYWRqdXN0IGZvciBvZmZzZXQKKwlwaHlzX2FkZHIgPQorCSAgICBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wY2lkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwlYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUFkZHJlc3MgPSBTWEdfR0VUX0FERFJfSElHSChwaHlzX2FkZHIpOworCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9IFhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA8PCAzMjsKKwlYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUFkZHJlc3MgPQorCSAgICBYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUFkZHJlc3MgfCBTWEdfR0VUX0FERFJfTE9XKHBoeXNfYWRkcik7CisvLyAgICAgIFhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9IFN4Z1NnbC0+U2dsLkVsZW1lbnRzW0luZGV4XS5BZGRyZXNzOworLy8gICAgICBYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUFkZHJlc3MuTG93UGFydCArPSBNZGxPZmZzZXQ7CisJWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VMZW5ndGggPSBEYXRhTGVuZ3RoOworCS8vIFNldCBhIHBvaW50ZXIgdG8gdGhlIHJlbWFpbmluZyBTR0wgZW50cmllcworLy8gICAgICBYbXRDbWQtPlNnbCA9IFN4Z1NnbC0+UGh5c2ljYWxBZGRyZXNzOworCS8vIEFkdmFuY2UgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIFN4Z1NnbCBzdHJ1Y3R1cmUgdG8KKwkvLyB0aGUgc2Vjb25kIFNHRQorLy8gICAgICBTZ2xPZmZzZXQgPSAodTMyKSgodTMyICopKCZTeGdTZ2wtPlNnbC5FbGVtZW50c1tJbmRleCsxXSkgLQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMiAqKVN4Z1NnbCk7CisvLyAgICAgIFhtdENtZC0+U2dsLkxvd1BhcnQgKz0gU2dsT2Zmc2V0OworCVhtdENtZC0+QnVmZmVyLlNnZU9mZnNldCA9IDA7CisJLy8gTm90ZSAtIFRvdGFsTGVuZ3RoIG1pZ2h0IGJlIG92ZXJ3cml0dGVuIHdpdGggTVNTIGJlbG93Li4KKwlYbXRDbWQtPkJ1ZmZlci5Ub3RhbExlbmd0aCA9IERhdGFMZW5ndGg7CisJWG10Q21kLT5TZ0VudHJpZXMgPSAxOwkvLyh1c2hvcnQpKFN4Z1NnbC0+U2dsLk51bWJlck9mRWxlbWVudHMgLSBJbmRleCk7CisJWG10Q21kLT5GbGFncyA9IDA7CisJLy8KKwkvLyBBZHZhbmNlIHRyYW5zbWl0IGNtZCBkZXNjcmlwdGVyIGJ5IDEuCisJLy8gTk9URSAtIFNlZSBjb21tZW50cyBpbiBTeGdUY3BPdXRwdXQgd2hlcmUgd2Ugd3JpdGUKKwkvLyB0byB0aGUgWG10Q21kIHJlZ2lzdGVyIHJlZ2FyZGluZyBDUFUgSUQgdmFsdWVzIGFuZC9vcgorCS8vIG11bHRpcGxlIGNvbW1hbmRzLgorCS8vCisJLy8KKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLlhtdENtZCwgMSwgVFJVRSk7CisJLy8KKwkvLworCWFkYXB0ZXItPlN0YXRzLlhtdFFMZW4rKzsJLy8gU3RhdHMgd2l0aGluIGxvY2sKKwlzcGluX3VubG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhEdW1TZ2wyIiwKKwkJICBYbXRDbWQsIHBTZ2wsIFN4Z1NnbCwgMCk7CisJcmV0dXJuOworCisgICAgICBhYm9ydGNtZDoKKwkvLyBOT1RFIC0gT25seSBqdW1wIHRvIHRoaXMgbGFiZWwgQUZURVIgZ3JhYmJpbmcgdGhlCisJLy8gWG10WmVyb0xvY2ssIGFuZCBETyBOT1QgRFJPUCBJVCBiZXR3ZWVuIHRoZQorCS8vIGNvbW1hbmQgYWxsb2NhdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBhYm9ydC4KKwlpZiAoWG10Q21kKSB7CisJCVNYR19BQk9SVF9DTUQoWG10UmluZ0luZm8pOworCX0KKwlzcGluX3VubG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCisvLyBmYWlsc2dsOgorCS8vIEp1bXAgdG8gdGhpcyBsYWJlbCBpZiBmYWlsdXJlIG9jY3VycyBiZWZvcmUgdGhlCisJLy8gWG10WmVyb0xvY2sgaXMgZ3JhYmJlZAorCWFkYXB0ZXItPlN0YXRzLlhtdEVycm9ycysrOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJEdW1TR0ZhbCIsCisJCSAgcFNnbCwgU3hnU2dsLCBYbXRSaW5nSW5mby0+SGVhZCwgWG10UmluZ0luZm8tPlRhaWwpOworCisJU1hHX0NPTVBMRVRFX0RVTUJfU0VORChhZGFwdGVyLCBTeGdTZ2wtPkR1bWJQYWNrZXQpOwkvLyBTeGdTZ2wtPkR1bWJQYWNrZXQgaXMgdGhlIHNrYgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMaW5rIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc3hnX2luaXRpYWxpemVfbGluayAtIEluaXRpYWxpemUgdGhlIGxpbmsgc3R1ZmYKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuCisgKglzdGF0dXMKKyAqLworc3RhdGljIGludCBzeGdfaW5pdGlhbGl6ZV9saW5rKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJUFNYR19IV19SRUdTIEh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwl1MzIgVmFsdWU7CisJdTMyIENvbmZpZ0RhdGE7CisJdTMyIE1heEZyYW1lOworCWludCBzdGF0dXM7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJJbml0TGluayIsCisJCSAgYWRhcHRlciwgMCwgMCwgMCk7CisKKwkvLyBSZXNldCBQSFkgYW5kIFhHWFMgbW9kdWxlCisJV1JJVEVfUkVHKEh3UmVncy0+TGlua1N0YXR1cywgTFNfU0VSREVTX1BPV0VSX0RPV04sIFRSVUUpOworCisJLy8gUmVzZXQgdHJhbnNtaXQgY29uZmlndXJhdGlvbiByZWdpc3RlcgorCVdSSVRFX1JFRyhId1JlZ3MtPlhtdENvbmZpZywgWE1UX0NPTkZJR19SRVNFVCwgVFJVRSk7CisKKwkvLyBSZXNldCByZWNlaXZlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKKwlXUklURV9SRUcoSHdSZWdzLT5SY3ZDb25maWcsIFJDVl9DT05GSUdfUkVTRVQsIFRSVUUpOworCisJLy8gUmVzZXQgYWxsIE1BQyBtb2R1bGVzCisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQ29uZmlnMCwgQVhHTUFDX0NGRzBfU1VCX1JFU0VULCBUUlVFKTsKKworCS8vIExpbmsgYWRkcmVzcyAwCisJLy8gWFhYVE9ETyAtIFRoaXMgYXNzdW1lcyB0aGUgTUFDIGFkZHJlc3MgKDBhOjBiOjBjOjBkOjBlOjBmKQorCS8vIGlzIHN0b3JlZCB3aXRoIHRoZSBmaXJzdCBuaWJibGUgKDBhKSBpbiB0aGUgYnl0ZSAwCisJLy8gb2YgdGhlIE1hYyBhZGRyZXNzLiAgUG9zc2libHkgcmV2ZXJzZT8KKwlWYWx1ZSA9ICoodTMyICopIGFkYXB0ZXItPk1hY0FkZHI7CisJV1JJVEVfUkVHKEh3UmVncy0+TGlua0FkZHJlc3MwTG93LCBWYWx1ZSwgVFJVRSk7CisJLy8gYWxzbyB3cml0ZSB0aGUgTUFDIGFkZHJlc3MgdG8gdGhlIE1BQy4gIEVuZGlhbiBpcyByZXZlcnNlZC4KKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBZGRyZXNzTG93LCBudG9obChWYWx1ZSksIFRSVUUpOworCVZhbHVlID0gKCoodTE2ICopICYgYWRhcHRlci0+TWFjQWRkcls0XSAmIDB4MDAwMEZGRkYpOworCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtBZGRyZXNzMEhpZ2gsIFZhbHVlIHwgTElOS19BRERSRVNTX0VOQUJMRSwgVFJVRSk7CisJLy8gZW5kaWFuIHN3YXAgZm9yIHRoZSBNQUMgKHB1dCBoaWdoIGJ5dGVzIGluIGJpdHMgWzMxOjE2XSwgc3dhcHBlZCkKKwlWYWx1ZSA9IG50b2hsKFZhbHVlKTsKKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBZGRyZXNzSGlnaCwgVmFsdWUsIFRSVUUpOworCS8vIExpbmsgYWRkcmVzcyAxCisJV1JJVEVfUkVHKEh3UmVncy0+TGlua0FkZHJlc3MxTG93LCAwLCBUUlVFKTsKKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rQWRkcmVzczFIaWdoLCAwLCBUUlVFKTsKKwkvLyBMaW5rIGFkZHJlc3MgMgorCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtBZGRyZXNzMkxvdywgMCwgVFJVRSk7CisJV1JJVEVfUkVHKEh3UmVncy0+TGlua0FkZHJlc3MySGlnaCwgMCwgVFJVRSk7CisJLy8gTGluayBhZGRyZXNzIDMKKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rQWRkcmVzczNMb3csIDAsIFRSVUUpOworCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtBZGRyZXNzM0hpZ2gsIDAsIFRSVUUpOworCisJLy8gRW5hYmxlIE1BQyBtb2R1bGVzCisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQ29uZmlnMCwgMCwgVFJVRSk7CisKKwkvLyBDb25maWd1cmUgTUFDCisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQ29uZmlnMSwgKEFYR01BQ19DRkcxX1hNVF9QQVVTRSB8CS8vIEFsbG93IHNlbmRpbmcgb2YgcGF1c2UKKwkJCQkgICAgICAgQVhHTUFDX0NGRzFfWE1UX0VOIHwJLy8gRW5hYmxlIFhNVAorCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9SQ1ZfUEFVU0UgfAkvLyBFbmFibGUgZGV0ZWN0aW9uIG9mIHBhdXNlCisJCQkJICAgICAgIEFYR01BQ19DRkcxX1JDVl9FTiB8CS8vIEVuYWJsZSByZWNlaXZlCisJCQkJICAgICAgIEFYR01BQ19DRkcxX1NIT1JUX0FTU0VSVCB8CS8vIHNob3J0IGZyYW1lIGRldGVjdGlvbgorCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9DSEVDS19MRU4gfAkvLyBWZXJpZnkgZnJhbWUgbGVuZ3RoCisJCQkJICAgICAgIEFYR01BQ19DRkcxX0dFTl9GQ1MgfAkvLyBHZW5lcmF0ZSBGQ1MKKwkJCQkgICAgICAgQVhHTUFDX0NGRzFfUEFEXzY0KSwJLy8gUGFkIGZyYW1lcyB0byA2NCBieXRlcworCQkgIFRSVUUpOworCisJLy8gU2V0IEFYR01BQyBtYXggZnJhbWUgbGVuZ3RoIGlmIGp1bWJvLiAgTm90IG5lZWRlZCBmb3Igc3RhbmRhcmQgTVRVCisJaWYgKGFkYXB0ZXItPkp1bWJvRW5hYmxlZCkgeworCQlXUklURV9SRUcoSHdSZWdzLT5NYWNNYXhGcmFtZUxlbiwgQVhHTUFDX01BWEZSQU1FX0pVTUJPLCBUUlVFKTsKKwl9CisJLy8gQU1JSU0gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAtCisJLy8gVGhlIHZhbHVlIHBsYWNlZCBpbiB0aGUgQVhHTUFDX0FNSUlNX0NGR19IQUxGX0NMT0NLIHBvcnRpb24KKwkvLyAoYm90dG9tIGJpdHMpIG9mIHRoaXMgcmVnaXN0ZXIgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlCisJLy8gTURDIGZyZXF1ZW5jeSBhcyBzcGVjaWZpZWQgaW4gdGhlIEEtWEdNQUMgRGVzaWduIERvY3VtZW50LgorCS8vIFRoaXMgdmFsdWUgbXVzdCBub3QgYmUgemVyby4gIFRoZSBmb2xsb3dpbmcgdmFsdWUgKDYyIG9yIDB4M0UpCisJLy8gaXMgYmFzZWQgb24gb3VyIE1BQyB0cmFuc21pdCBjbG9jayBmcmVxdWVuY3kgKE1UQ0xLKSBvZiAzMTIuNSBNSHouCisJLy8gR2l2ZW4gYSBtYXhpbXVtIE1ESU8gY2xvY2sgZnJlcXVlbmN5IG9mIDIuNSBNSHogKHNlZSB0aGUgUEhZIHNwZWMpLAorCS8vIHdlIGdldDogIDMxMi41LygyKihYKzEpKSA8IDIuNSAgPT0+IFggPSA2Mi4KKwkvLyBUaGlzIHZhbHVlIGhhcHBlbnMgdG8gYmUgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcmVnaXN0ZXIsCisJLy8gc28gd2UgcmVhbGx5IGRvbid0IGhhdmUgdG8gZG8gdGhpcy4KKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUNvbmZpZywgMHgwMDAwMDAzRSwgVFJVRSk7CisKKwkvLyBQb3dlciB1cCBhbmQgZW5hYmxlIFBIWSBhbmQgWEFVSS9YR1hTL1NlcmRlcyBsb2dpYworCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtTdGF0dXMsCisJCSAgKExTX1BIWV9DTFJfUkVTRVQgfAorCQkgICBMU19YR1hTX0VOQUJMRSB8CisJCSAgIExTX1hHWFNfQ1RMIHwgTFNfUEhZX0NMS19FTiB8IExTX0FUVE5fQUxBUk0pLCBUUlVFKTsKKwlEQkdfRVJST1IoIkFmdGVyIFBvd2VyIFVwIGFuZCBlbmFibGUgUEhZIGluIHN4Z19pbml0aWFsaXplX2xpbmtcbiIpOworCisJLy8gUGVyIGluZm9ybWF0aW9uIGdpdmVuIGJ5IEFlbHVyb3MsIHdhaXQgMTAwIG1zIGFmdGVyIHJlbW92aW5nIHJlc2V0LgorCS8vIEl0J3Mgbm90IGVub3VnaCB0byB3YWl0IGZvciB0aGUgc2VsZi1jbGVhcmluZyByZXNldCBiaXQgaW4gcmVnIDAgdG8gY2xlYXIuCisJbWRlbGF5KDEwMCk7CisKKwkvLyBWZXJpZnkgdGhlIFBIWSBoYXMgY29tZSB1cCBieSBjaGVja2luZyB0aGF0IHRoZSBSZXNldCBiaXQgaGFzIGNsZWFyZWQuCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLy8gUEhZIFBNQS9QTUQgbW9kdWxlCisJCQkJICAgUEhZX1BNQV9DT05UUk9MMSwJLy8gUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyCisJCQkJICAgJlZhbHVlKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQorCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwlpZiAoVmFsdWUgJiBQTUFfQ09OVFJPTDFfUkVTRVQpCS8vIHJlc2V0IGNvbXBsZXRlIGlmIGJpdCBpcyAwCisJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCisJLy8gVGhlIFNFUkRFUyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYnkgbm93IC0gY29uZmlybQorCVJFQURfUkVHKEh3UmVncy0+TGlua1N0YXR1cywgVmFsdWUpOworCWlmIChWYWx1ZSAmIExTX1NFUkRFU19ET1dOKQkvLyB2ZXJpZnkgU0VSREVTIGlzIGluaXRpYWxpemVkCisJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCisJLy8gVGhlIFhBVUkgbGluayBzaG91bGQgYWxzbyBiZSB1cCAtIGNvbmZpcm0KKwlpZiAoIShWYWx1ZSAmIExTX1hBVUlfTElOS19VUCkpCS8vIHZlcmlmeSBYQVVJIGxpbmsgaXMgdXAKKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisKKwkvLyBJbml0aWFsaXplIHRoZSBQSFkKKwlzdGF0dXMgPSBzeGdfcGh5X2luaXQoYWRhcHRlcik7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisKKwkvLyBFbmFibGUgdGhlIExpbmsgQWxhcm0KKwlzdGF0dXMgPSBzeGdfd3JpdGVfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLy8gUEhZIFBNQS9QTUQgbW9kdWxlCisJCQkJICAgIExBU0lfQ09OVFJPTCwJLy8gTEFTSSBjb250cm9sIHJlZ2lzdGVyCisJCQkJICAgIExBU0lfQ1RMX0xTX0FMQVJNX0VOQUJMRSk7CS8vIGVuYWJsZSBsaW5rIGFsYXJtIGJpdAorCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCisJLy8gWFhYVE9ETyAtIHRlbXBvcmFyeSAtIHZlcmlmeSBiaXQgaXMgc2V0CisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLy8gUEhZIFBNQS9QTUQgbW9kdWxlCisJCQkJICAgTEFTSV9DT05UUk9MLAkvLyBMQVNJIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCQkgICAmVmFsdWUpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCWlmICghKFZhbHVlICYgTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFKSkgeworCQlEQkdfRVJST1IoIkVycm9yISAgTEFTSSBDb250cm9sIEFsYXJtIEVuYWJsZSBiaXQgbm90IHNldCFcbiIpOworCX0KKwkvLyBFbmFibGUgcmVjZWl2ZQorCU1heEZyYW1lID0gYWRhcHRlci0+SnVtYm9FbmFibGVkID8gSlVNQk9NQVhGUkFNRSA6IEVUSEVSTUFYRlJBTUU7CisJQ29uZmlnRGF0YSA9IChSQ1ZfQ09ORklHX0VOQUJMRSB8CisJCSAgICAgIFJDVl9DT05GSUdfRU5QQVJTRSB8CisJCSAgICAgIFJDVl9DT05GSUdfUkNWQkFEIHwKKwkJICAgICAgUkNWX0NPTkZJR19SQ1ZQQVVTRSB8CisJCSAgICAgIFJDVl9DT05GSUdfVFpJUFY2IHwKKwkJICAgICAgUkNWX0NPTkZJR19UWklQVjQgfAorCQkgICAgICBSQ1ZfQ09ORklHX0hBU0hfMTYgfAorCQkgICAgICBSQ1ZfQ09ORklHX1NPQ0tFVCB8IFJDVl9DT05GSUdfQlVGU0laRShNYXhGcmFtZSkpOworCVdSSVRFX1JFRyhId1JlZ3MtPlJjdkNvbmZpZywgQ29uZmlnRGF0YSwgVFJVRSk7CisKKwlXUklURV9SRUcoSHdSZWdzLT5YbXRDb25maWcsIFhNVF9DT05GSUdfRU5BQkxFLCBUUlVFKTsKKworCS8vIE1hcmsgdGhlIGxpbmsgYXMgZG93bi4gIFdlJ2xsIGdldCBhIGxpbmsgZXZlbnQgd2hlbiBpdCBjb21lcyB1cC4KKwlzeGdfbGlua19zdGF0ZShhZGFwdGVyLCBTWEdfTElOS19ET1dOKTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhJbml0TG5rIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworLyoKKyAqIHN4Z19waHlfaW5pdCAtIEluaXRpYWxpemUgdGhlIFBIWQorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCXN0YXR1cworICovCitzdGF0aWMgaW50IHN4Z19waHlfaW5pdChwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCXUzMiBWYWx1ZTsKKwlQUEhZX1VDT0RFIHA7CisJaW50IHN0YXR1czsKKworCURCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvLyBSZWFkIGEgcmVnaXN0ZXIgdG8gaWRlbnRpZnkgdGhlIFBIWSB0eXBlCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLy8gUEhZIFBNQS9QTUQgbW9kdWxlCisJCQkJICAgMHhDMjA1LAkvLyBQSFkgSUQgcmVnaXN0ZXIgKD8pCisJCQkJICAgJlZhbHVlKTsJLy8gICAgWFhYVE9ETyAtIGFkZCBkZWYKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQorCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKworCWlmIChWYWx1ZSA9PSAweDAwMTIpIHsJLy8gMHgwMDEyID09IEFFTDIwMDVDIFBIWSg/KSAtIFhYWFRPRE8gLSBhZGQgZGVmCisJCURCR19FUlJPUgorCQkgICAgKCJBRUwyMDA1QyBQSFkgZGV0ZWN0ZWQuICBEb3dubG9hZGluZyBQSFkgbWljcm9jb2RlLlxuIik7CisKKwkJLy8gSW5pdGlhbGl6ZSBBRUwyMDA1QyBQSFkgYW5kIGRvd25sb2FkIFBIWSBtaWNyb2NvZGUKKwkJZm9yIChwID0gUGh5VWNvZGU7IHAtPkFkZHIgIT0gMHhGRkZGOyBwKyspIHsKKwkJCWlmIChwLT5BZGRyID09IDApIHsKKwkJCQkvLyBpZiBhZGRyZXNzID09IDAsIGRhdGEgPT0gc2xlZXAgdGltZSBpbiBtcworCQkJCW1kZWxheShwLT5EYXRhKTsKKwkJCX0gZWxzZSB7CisJCQkJLy8gd3JpdGUgdGhlIGdpdmVuIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBhZGRyZXNzCisJCQkJc3RhdHVzID0gc3hnX3dyaXRlX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCS8vIFBIWSBQTUEvUE1EIG1vZHVsZQorCQkJCQkJCSAgICBwLT5BZGRyLAkvLyBQSFkgYWRkcmVzcworCQkJCQkJCSAgICBwLT5EYXRhKTsJLy8gUEhZIGRhdGEKKwkJCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQorCQkJCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwkJCX0KKwkJfQorCX0KKwlEQkdfRVJST1IoIkVYSVQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworLyoKKyAqIHN4Z19saW5rX2V2ZW50IC0gUHJvY2VzcyBhIGxpbmsgZXZlbnQgbm90aWZpY2F0aW9uIGZyb20gdGhlIGNhcmQKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuCisgKglOb25lCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19saW5rX2V2ZW50KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJUFNYR19IV19SRUdTIEh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwlTWEdfTElOS19TVEFURSBMaW5rU3RhdGU7CisJaW50IHN0YXR1czsKKwl1MzIgVmFsdWU7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJMaW5rRXZudCIsCisJCSAgYWRhcHRlciwgMCwgMCwgMCk7CisJREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8vIENoZWNrIHRoZSBMaW5rIFN0YXR1cyByZWdpc3Rlci4gIFdlIHNob3VsZCBoYXZlIGEgTGluayBBbGFybS4KKwlSRUFEX1JFRyhId1JlZ3MtPkxpbmtTdGF0dXMsIFZhbHVlKTsKKwlpZiAoVmFsdWUgJiBMU19MSU5LX0FMQVJNKSB7CisJCS8vIFdlIGdvdCBhIExpbmsgU3RhdHVzIGFsYXJtLiAgRmlyc3QsIHBhdXNlIHRvIGxldCB0aGUKKwkJLy8gbGluayBzdGF0ZSBzZXR0bGUgKGl0IGNhbiBib3VuY2UgYSBudW1iZXIgb2YgdGltZXMpCisJCW1kZWxheSgxMCk7CisKKwkJLy8gTm93IGNsZWFyIHRoZSBhbGFybSBieSByZWFkaW5nIHRoZSBMQVNJIHN0YXR1cyByZWdpc3Rlci4KKwkJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLy8gUEhZIFBNQS9QTUQgbW9kdWxlCisJCQkJCSAgIExBU0lfU1RBVFVTLAkvLyBMQVNJIHN0YXR1cyByZWdpc3RlcgorCQkJCQkgICAmVmFsdWUpOworCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCQlEQkdfRVJST1IoIkVycm9yIHJlYWRpbmcgTEFTSSBTdGF0dXMgTURJTyByZWdpc3RlciFcbiIpOworCQkJc3hnX2xpbmtfc3RhdGUoYWRhcHRlciwgU1hHX0xJTktfRE9XTik7CisvLyAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoMCk7CisJCX0KKwkJQVNTRVJUKFZhbHVlICYgTEFTSV9TVEFUVVNfTFNfQUxBUk0pOworCisJCS8vIE5vdyBnZXQgYW5kIHNldCB0aGUgbGluayBzdGF0ZQorCQlMaW5rU3RhdGUgPSBzeGdfZ2V0X2xpbmtfc3RhdGUoYWRhcHRlcik7CisJCXN4Z19saW5rX3N0YXRlKGFkYXB0ZXIsIExpbmtTdGF0ZSk7CisJCURCR19FUlJPUigiU1hHOiBMaW5rIEFsYXJtIG9jY3VycmVkLiAgTGluayBpcyAlc1xuIiwKKwkJCSAgKChMaW5rU3RhdGUgPT0gU1hHX0xJTktfVVApID8gIlVQIiA6ICJET1dOIikpOworCX0gZWxzZSB7CisJCS8vIFhYWFRPRE8gLSBBc3N1bWluZyBMaW5rIEF0dGVudGlvbiBpcyBvbmx5IGJlaW5nIGdlbmVyYXRlZCBmb3IgdGhlCisJCS8vIExpbmsgQWxhcm0gcGluIChhbmQgbm90IGZvciBhIFhBVUkgTGluayBTdGF0dXMgY2hhbmdlKSwgdGhlbiBpdCdzCisJCS8vIGltcG9zc2libGUgdG8gZ2V0IGhlcmUuICBZZXQgd2UndmUgZ290dGVuIGhlcmUgdHdpY2UgKHVuZGVyIGV4dHJlbWUKKwkJLy8gY29uZGl0aW9ucyAtIGJvdW5jaW5nIHRoZSBsaW5rIHVwIGFuZCBkb3duIG1hbnkgdGltZXMgYSBzZWNvbmQpLgorCQkvLyBOZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCisJCURCR19FUlJPUigiU1hHOiBzeGdfbGlua19ldmVudDogQ2FuJ3QgZ2V0IGhlcmUhXG4iKTsKKwkJREJHX0VSUk9SKCJTWEc6IExpbmsgU3RhdHVzID09IDB4JTA4WC5cbiIsIFZhbHVlKTsKKy8vICAgICAgICAgICAgICBBU1NFUlQoMCk7CisJfQorCURCR19FUlJPUigiRVhJVCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworfQorCisvKgorICogc3hnX2dldF9saW5rX3N0YXRlIC0gRGV0ZXJtaW5lIGlmIHRoZSBsaW5rIGlzIHVwIG9yIGRvd24KKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuCisgKglMaW5rIFN0YXRlCisgKi8KK3N0YXRpYyBTWEdfTElOS19TVEFURSBzeGdfZ2V0X2xpbmtfc3RhdGUocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzOworCXUzMiBWYWx1ZTsKKworCURCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJHZXRMaW5rIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKworCS8vIFBlciB0aGUgWGVucGFrIHNwZWMgKGFuZCB0aGUgSUVFRSAxMEdiIHNwZWM/KSwgdGhlIGxpbmsgaXMgdXAgaWYKKwkvLyB0aGUgZm9sbG93aW5nIDMgYml0cyAoZnJvbSAzIGRpZmZlcmVudCBNRElPIHJlZ2lzdGVycykgYXJlIGFsbCB0cnVlLgorCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCS8vIFBIWSBQTUEvUE1EIG1vZHVsZQorCQkJCSAgIFBIWV9QTUFfUkNWX0RFVCwJLy8gUE1BL1BNRCBSZWNlaXZlIFNpZ25hbCBEZXRlY3QgcmVnaXN0ZXIKKwkJCQkgICAmVmFsdWUpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gYmFkOworCisJLy8gSWYgUE1BL1BNRCByZWNlaXZlIHNpZ25hbCBkZXRlY3QgaXMgMCwgdGhlbiB0aGUgbGluayBpcyBkb3duCisJaWYgKCEoVmFsdWUgJiBQTUFfUkNWX0RFVEVDVCkpCisJCXJldHVybiAoU1hHX0xJTktfRE9XTik7CisKKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUENTLAkvLyBQSFkgUENTIG1vZHVsZQorCQkJCSAgIFBIWV9QQ1NfMTBHX1NUQVRVUzEsCS8vIFBDUyAxMEdCQVNFLVIgU3RhdHVzIDEgcmVnaXN0ZXIKKwkJCQkgICAmVmFsdWUpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gYmFkOworCisJLy8gSWYgUENTIGlzIG5vdCBsb2NrZWQgdG8gcmVjZWl2ZSBibG9ja3MsIHRoZW4gdGhlIGxpbmsgaXMgZG93bgorCWlmICghKFZhbHVlICYgUENTXzEwQl9CTE9DS19MT0NLKSkKKwkJcmV0dXJuIChTWEdfTElOS19ET1dOKTsKKworCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9YUywJLy8gUEhZIFhTIG1vZHVsZQorCQkJCSAgIFBIWV9YU19MQU5FX1NUQVRVUywJLy8gWFMgTGFuZSBTdGF0dXMgcmVnaXN0ZXIKKwkJCQkgICAmVmFsdWUpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gYmFkOworCisJLy8gSWYgWFMgdHJhbnNtaXQgbGFuZXMgYXJlIG5vdCBhbGlnbmVkLCB0aGVuIHRoZSBsaW5rIGlzIGRvd24KKwlpZiAoIShWYWx1ZSAmIFhTX0xBTkVfQUxJR04pKQorCQlyZXR1cm4gKFNYR19MSU5LX0RPV04pOworCisJLy8gQWxsIDMgYml0cyBhcmUgdHJ1ZSwgc28gdGhlIGxpbmsgaXMgdXAKKwlEQkdfRVJST1IoIkVYSVQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gKFNYR19MSU5LX1VQKTsKKworICAgICAgYmFkOgorCS8vIEFuIGVycm9yIG9jY3VycmVkIHJlYWRpbmcgYW4gTURJTyByZWdpc3Rlci4gIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4KKwlEQkdfRVJST1IoIkVycm9yIHJlYWRpbmcgYW4gTURJTyByZWdpc3RlciFcbiIpOworCUFTU0VSVCgwKTsKKwlyZXR1cm4gKFNYR19MSU5LX0RPV04pOworfQorCitzdGF0aWMgdm9pZCBzeGdfaW5kaWNhdGVfbGlua19zdGF0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJCSAgICBTWEdfTElOS19TVEFURSBMaW5rU3RhdGUpCit7CisJaWYgKGFkYXB0ZXItPkxpbmtTdGF0ZSA9PSBTWEdfTElOS19VUCkgeworCQlEQkdfRVJST1IoIiVzOiBMSU5LIG5vdyBVUCwgY2FsbCBuZXRpZl9zdGFydF9xdWV1ZVxuIiwKKwkJCSAgX19GVU5DVElPTl9fKTsKKwkJbmV0aWZfc3RhcnRfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKwl9IGVsc2UgeworCQlEQkdfRVJST1IoIiVzOiBMSU5LIG5vdyBET1dOLCBjYWxsIG5ldGlmX3N0b3BfcXVldWVcbiIsCisJCQkgIF9fRlVOQ1RJT05fXyk7CisJCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKwl9Cit9CisKKy8qCisgKiBzeGdfbGlua19zdGF0ZSAtIFNldCB0aGUgbGluayBzdGF0ZSBhbmQgaWYgbmVjZXNzYXJ5LCBpbmRpY2F0ZS4KKyAqCVRoaXMgcm91dGluZSB0aGUgY2VudHJhbCBwb2ludCBvZiBwcm9jZXNzaW5nIGZvciBhbGwgbGluayBzdGF0ZSBjaGFuZ2VzLgorICoJTm90aGluZyBlbHNlIGluIHRoZSBkcml2ZXIgc2hvdWxkIGFsdGVyIHRoZSBsaW5rIHN0YXRlIG9yIHBlcmZvcm0KKyAqCWxpbmsgc3RhdGUgaW5kaWNhdGlvbnMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKglMaW5rU3RhdGUgCS0gVGhlIGxpbmsgc3RhdGUKKyAqCisgKiBSZXR1cm4KKyAqCU5vbmUKKyAqLworc3RhdGljIHZvaWQgc3hnX2xpbmtfc3RhdGUocF9hZGFwdGVyX3QgYWRhcHRlciwgU1hHX0xJTktfU1RBVEUgTGlua1N0YXRlKQoreworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJMbmtJTkRDVCIsCisJCSAgYWRhcHRlciwgTGlua1N0YXRlLCBhZGFwdGVyLT5MaW5rU3RhdGUsIGFkYXB0ZXItPlN0YXRlKTsKKworCURCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvLyBIb2xkIHRoZSBhZGFwdGVyIGxvY2sgZHVyaW5nIHRoaXMgcm91dGluZS4gIE1heWJlIG1vdmUKKwkvLyB0aGUgbG9jayB0byB0aGUgY2FsbGVyLgorCXNwaW5fbG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCWlmIChMaW5rU3RhdGUgPT0gYWRhcHRlci0+TGlua1N0YXRlKSB7CisJCS8vIE5vdGhpbmcgY2hhbmdlZC4uCisJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisJCURCR19FUlJPUigiRVhJVCAjMCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwkvLyBTYXZlIHRoZSBhZGFwdGVyIHN0YXRlCisJYWRhcHRlci0+TGlua1N0YXRlID0gTGlua1N0YXRlOworCisJLy8gRHJvcCB0aGUgbG9jayBhbmQgaW5kaWNhdGUgbGluayBzdGF0ZQorCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisJREJHX0VSUk9SKCJFWElUICMxICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJc3hnX2luZGljYXRlX2xpbmtfc3RhdGUoYWRhcHRlciwgTGlua1N0YXRlKTsKK30KKworLyoKKyAqIHN4Z193cml0ZV9tZGlvX3JlZyAtIFdyaXRlIHRvIGEgcmVnaXN0ZXIgb24gdGhlIE1ESU8gYnVzCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICogIERldkFkZHIgICAgIC0gTURJTyBkZXZpY2UgbnVtYmVyIGJlaW5nIGFkZHJlc3NlZAorICogIFJlZ0FkZHIgICAgIC0gcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhlIHNwZWNpZmllZCBNRElPIGRldmljZQorICogIFZhbHVlCQktIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBNRElPIHJlZ2lzdGVyCisgKgorICogUmV0dXJuCisgKglzdGF0dXMKKyAqLworc3RhdGljIGludCBzeGdfd3JpdGVfbWRpb19yZWcocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCSAgICAgIHUzMiBEZXZBZGRyLCB1MzIgUmVnQWRkciwgdTMyIFZhbHVlKQoreworCVBTWEdfSFdfUkVHUyBId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7CisJdTMyIEFkZHJPcDsJCS8vIEFkZHJlc3Mgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKQorCXUzMiBXcml0ZU9wOwkJLy8gV3JpdGUgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKQorCXUzMiBDbWQ7CQkvLyBDb21tYW5kICh3cml0dGVuIHRvIE1JSU0gY29tbWFuZCByZWcpCisJdTMyIFZhbHVlUmVhZDsKKwl1MzIgVGltZW91dDsKKworLy8gIERCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJXcnRNRElPIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKworCS8vIEVuc3VyZSB2YWx1ZXMgZG9uJ3QgZXhjZWVkIGZpZWxkIHdpZHRoCisJRGV2QWRkciAmPSAweDAwMUY7CS8vIDUtYml0IGZpZWxkCisJUmVnQWRkciAmPSAweEZGRkY7CS8vIDE2LWJpdCBmaWVsZAorCVZhbHVlICY9IDB4RkZGRjsJLy8gMTYtYml0IGZpZWxkCisKKwkvLyBTZXQgTUlJTSBmaWVsZCByZWdpc3RlciBiaXRzIGZvciBhbiBNSUlNIGFkZHJlc3Mgb3BlcmF0aW9uCisJQWRkck9wID0gKE1JSU1fUE9SVF9OVU0gPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX1BPUlRfU0hJRlQpIHwKKwkgICAgKERldkFkZHIgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9TSElGVCkgfAorCSAgICAoTUlJTV9UQV8xMEdCIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9UQV9TSElGVCkgfAorCSAgICAoTUlJTV9PUF9BRERSIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9PUF9TSElGVCkgfCBSZWdBZGRyOworCisJLy8gU2V0IE1JSU0gZmllbGQgcmVnaXN0ZXIgYml0cyBmb3IgYW4gTUlJTSB3cml0ZSBvcGVyYXRpb24KKwlXcml0ZU9wID0gKE1JSU1fUE9SVF9OVU0gPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX1BPUlRfU0hJRlQpIHwKKwkgICAgKERldkFkZHIgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9TSElGVCkgfAorCSAgICAoTUlJTV9UQV8xMEdCIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9UQV9TSElGVCkgfAorCSAgICAoTUlJTV9PUF9XUklURSA8PCBBWEdNQUNfQU1JSU1fRklFTERfT1BfU0hJRlQpIHwgVmFsdWU7CisKKwkvLyBTZXQgTUlJTSBjb21tYW5kIHJlZ2lzdGVyIGJpdHMgdG8gZXhlY3V0ZSBhbiBNSUlNIGNvbW1hbmQKKwlDbWQgPSBBWEdNQUNfQU1JSU1fQ01EX1NUQVJUIHwgQVhHTUFDX0FNSUlNX0NNRF8xMEdfT1BFUkFUSU9OOworCisJLy8gUmVzZXQgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgY29tbWFuZCBiaXQgKGluIGNhc2UgaXQncyBub3QgMCkKKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUNtZCwgMCwgVFJVRSk7CisKKwkvLyBNSUlNIHdyaXRlIHRvIHNldCB0aGUgYWRkcmVzcyBvZiB0aGUgc3BlY2lmaWVkIE1ESU8gcmVnaXN0ZXIKKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUZpZWxkLCBBZGRyT3AsIFRSVUUpOworCisJLy8gV3JpdGUgdG8gTUlJTSBDb21tYW5kIFJlZ2lzdGVyIHRvIGV4ZWN1dGUgdG8gYWRkcmVzcyBvcGVyYXRpb24KKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUNtZCwgQ21kLCBUUlVFKTsKKworCS8vIFBvbGwgQU1JSU0gSW5kaWNhdG9yIHJlZ2lzdGVyIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24KKwlUaW1lb3V0ID0gU1hHX0xJTktfVElNRU9VVDsKKwlkbyB7CisJCXVkZWxheSgxMDApOwkvLyBUaW1lb3V0IGluIDEwMHVzIHVuaXRzCisJCVJFQURfUkVHKEh3UmVncy0+TWFjQW1paW1JbmRpY2F0b3IsIFZhbHVlUmVhZCk7CisJCWlmICgtLVRpbWVvdXQgPT0gMCkgeworCQkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisJCX0KKwl9IHdoaWxlIChWYWx1ZVJlYWQgJiBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZKTsKKworCS8vIFJlc2V0IHRoZSBjb21tYW5kIHJlZ2lzdGVyIGNvbW1hbmQgYml0CisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1DbWQsIDAsIFRSVUUpOworCisJLy8gTUlJTSB3cml0ZSB0byBzZXQgdXAgYW4gTURJTyB3cml0ZSBvcGVyYXRpb24KKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUZpZWxkLCBXcml0ZU9wLCBUUlVFKTsKKworCS8vIFdyaXRlIHRvIE1JSU0gQ29tbWFuZCBSZWdpc3RlciB0byBleGVjdXRlIHRoZSB3cml0ZSBvcGVyYXRpb24KKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUNtZCwgQ21kLCBUUlVFKTsKKworCS8vIFBvbGwgQU1JSU0gSW5kaWNhdG9yIHJlZ2lzdGVyIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24KKwlUaW1lb3V0ID0gU1hHX0xJTktfVElNRU9VVDsKKwlkbyB7CisJCXVkZWxheSgxMDApOwkvLyBUaW1lb3V0IGluIDEwMHVzIHVuaXRzCisJCVJFQURfUkVHKEh3UmVncy0+TWFjQW1paW1JbmRpY2F0b3IsIFZhbHVlUmVhZCk7CisJCWlmICgtLVRpbWVvdXQgPT0gMCkgeworCQkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisJCX0KKwl9IHdoaWxlIChWYWx1ZVJlYWQgJiBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZKTsKKworLy8gIERCR19FUlJPUigiRVhJVCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogc3hnX3JlYWRfbWRpb19yZWcgLSBSZWFkIGEgcmVnaXN0ZXIgb24gdGhlIE1ESU8gYnVzCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICogIERldkFkZHIgICAgIC0gTURJTyBkZXZpY2UgbnVtYmVyIGJlaW5nIGFkZHJlc3NlZAorICogIFJlZ0FkZHIgICAgIC0gcmVnaXN0ZXIgYWRkcmVzcyBmb3IgdGhlIHNwZWNpZmllZCBNRElPIGRldmljZQorICogIHBWYWx1ZQkJLSBwb2ludGVyIHRvIHdoZXJlIHRvIHB1dCBkYXRhIHJlYWQgZnJvbSB0aGUgTURJTyByZWdpc3RlcgorICoKKyAqIFJldHVybgorICoJc3RhdHVzCisgKi8KK3N0YXRpYyBpbnQgc3hnX3JlYWRfbWRpb19yZWcocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCSAgICAgdTMyIERldkFkZHIsIHUzMiBSZWdBZGRyLCB1MzIgKnBWYWx1ZSkKK3sKKwlQU1hHX0hXX1JFR1MgSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCXUzMiBBZGRyT3A7CQkvLyBBZGRyZXNzIG9wZXJhdGlvbiAod3JpdHRlbiB0byBNSUlNIGZpZWxkIHJlZykKKwl1MzIgUmVhZE9wOwkJLy8gUmVhZCBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpCisJdTMyIENtZDsJCS8vIENvbW1hbmQgKHdyaXR0ZW4gdG8gTUlJTSBjb21tYW5kIHJlZykKKwl1MzIgVmFsdWVSZWFkOworCXUzMiBUaW1lb3V0OworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiV3J0TURJTyIsCisJCSAgYWRhcHRlciwgMCwgMCwgMCk7CisvLyAgREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8vIEVuc3VyZSB2YWx1ZXMgZG9uJ3QgZXhjZWVkIGZpZWxkIHdpZHRoCisJRGV2QWRkciAmPSAweDAwMUY7CS8vIDUtYml0IGZpZWxkCisJUmVnQWRkciAmPSAweEZGRkY7CS8vIDE2LWJpdCBmaWVsZAorCisJLy8gU2V0IE1JSU0gZmllbGQgcmVnaXN0ZXIgYml0cyBmb3IgYW4gTUlJTSBhZGRyZXNzIG9wZXJhdGlvbgorCUFkZHJPcCA9IChNSUlNX1BPUlRfTlVNIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9QT1JUX1NISUZUKSB8CisJICAgIChEZXZBZGRyIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9ERVZfU0hJRlQpIHwKKwkgICAgKE1JSU1fVEFfMTBHQiA8PCBBWEdNQUNfQU1JSU1fRklFTERfVEFfU0hJRlQpIHwKKwkgICAgKE1JSU1fT1BfQUREUiA8PCBBWEdNQUNfQU1JSU1fRklFTERfT1BfU0hJRlQpIHwgUmVnQWRkcjsKKworCS8vIFNldCBNSUlNIGZpZWxkIHJlZ2lzdGVyIGJpdHMgZm9yIGFuIE1JSU0gcmVhZCBvcGVyYXRpb24KKwlSZWFkT3AgPSAoTUlJTV9QT1JUX05VTSA8PCBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9TSElGVCkgfAorCSAgICAoRGV2QWRkciA8PCBBWEdNQUNfQU1JSU1fRklFTERfREVWX1NISUZUKSB8CisJICAgIChNSUlNX1RBXzEwR0IgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBX1NISUZUKSB8CisJICAgIChNSUlNX09QX1JFQUQgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX09QX1NISUZUKTsKKworCS8vIFNldCBNSUlNIGNvbW1hbmQgcmVnaXN0ZXIgYml0cyB0byBleGVjdXRlIGFuIE1JSU0gY29tbWFuZAorCUNtZCA9IEFYR01BQ19BTUlJTV9DTURfU1RBUlQgfCBBWEdNQUNfQU1JSU1fQ01EXzEwR19PUEVSQVRJT047CisKKwkvLyBSZXNldCB0aGUgY29tbWFuZCByZWdpc3RlciBjb21tYW5kIGJpdCAoaW4gY2FzZSBpdCdzIG5vdCAwKQorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCAwLCBUUlVFKTsKKworCS8vIE1JSU0gd3JpdGUgdG8gc2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBzcGVjaWZpZWQgTURJTyByZWdpc3RlcgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltRmllbGQsIEFkZHJPcCwgVFJVRSk7CisKKwkvLyBXcml0ZSB0byBNSUlNIENvbW1hbmQgUmVnaXN0ZXIgdG8gZXhlY3V0ZSB0byBhZGRyZXNzIG9wZXJhdGlvbgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCBDbWQsIFRSVUUpOworCisJLy8gUG9sbCBBTUlJTSBJbmRpY2F0b3IgcmVnaXN0ZXIgdG8gd2FpdCBmb3IgY29tcGxldGlvbgorCVRpbWVvdXQgPSBTWEdfTElOS19USU1FT1VUOworCWRvIHsKKwkJdWRlbGF5KDEwMCk7CS8vIFRpbWVvdXQgaW4gMTAwdXMgdW5pdHMKKwkJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUluZGljYXRvciwgVmFsdWVSZWFkKTsKKwkJaWYgKC0tVGltZW91dCA9PSAwKSB7CisJCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwkJfQorCX0gd2hpbGUgKFZhbHVlUmVhZCAmIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kpOworCisJLy8gUmVzZXQgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgY29tbWFuZCBiaXQKKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUNtZCwgMCwgVFJVRSk7CisKKwkvLyBNSUlNIHdyaXRlIHRvIHNldCB1cCBhbiBNRElPIHJlZ2lzdGVyIHJlYWQgb3BlcmF0aW9uCisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1GaWVsZCwgUmVhZE9wLCBUUlVFKTsKKworCS8vIFdyaXRlIHRvIE1JSU0gQ29tbWFuZCBSZWdpc3RlciB0byBleGVjdXRlIHRoZSByZWFkIG9wZXJhdGlvbgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCBDbWQsIFRSVUUpOworCisJLy8gUG9sbCBBTUlJTSBJbmRpY2F0b3IgcmVnaXN0ZXIgdG8gd2FpdCBmb3IgY29tcGxldGlvbgorCVRpbWVvdXQgPSBTWEdfTElOS19USU1FT1VUOworCWRvIHsKKwkJdWRlbGF5KDEwMCk7CS8vIFRpbWVvdXQgaW4gMTAwdXMgdW5pdHMKKwkJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUluZGljYXRvciwgVmFsdWVSZWFkKTsKKwkJaWYgKC0tVGltZW91dCA9PSAwKSB7CisJCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwkJfQorCX0gd2hpbGUgKFZhbHVlUmVhZCAmIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kpOworCisJLy8gUmVhZCB0aGUgTURJTyByZWdpc3RlciBkYXRhIGJhY2sgZnJvbSB0aGUgZmllbGQgcmVnaXN0ZXIKKwlSRUFEX1JFRyhId1JlZ3MtPk1hY0FtaWltRmllbGQsICpwVmFsdWUpOworCSpwVmFsdWUgJj0gMHhGRkZGOwkvLyBkYXRhIGlzIGluIHRoZSBsb3dlciAxNiBiaXRzCisKKy8vICBEQkdfRVJST1IoIkVYSVQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworLyoKKyAqICBBbGxvY2F0ZSBhIG1jYXN0X2FkZHJlc3Mgc3RydWN0dXJlIHRvIGhvbGQgdGhlIG11bHRpY2FzdCBhZGRyZXNzLgorICogIExpbmsgaXQgaW4uCisgKi8KK3N0YXRpYyBpbnQgc3hnX21jYXN0X2FkZF9saXN0KHBfYWRhcHRlcl90IGFkYXB0ZXIsIGNoYXIgKmFkZHJlc3MpCit7CisJcF9tY2FzdF9hZGRyZXNzX3QgbWNhZGRyLCBtbGlzdDsKKwlib29sIGVxdWFsYWRkcjsKKworCS8qIENoZWNrIHRvIHNlZSBpZiBpdCBhbHJlYWR5IGV4aXN0cyAqLworCW1saXN0ID0gYWRhcHRlci0+bWNhc3RhZGRyczsKKwl3aGlsZSAobWxpc3QpIHsKKwkJRVRIRVJfRVFfQUREUihtbGlzdC0+YWRkcmVzcywgYWRkcmVzcywgZXF1YWxhZGRyKTsKKwkJaWYgKGVxdWFsYWRkcikgeworCQkJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7CisJCX0KKwkJbWxpc3QgPSBtbGlzdC0+bmV4dDsKKwl9CisKKwkvKiBEb2Vzbid0IGFscmVhZHkgZXhpc3QuICBBbGxvY2F0ZSBhIHN0cnVjdHVyZSB0byBob2xkIGl0ICovCisJbWNhZGRyID0ga21hbGxvYyhzaXplb2YobWNhc3RfYWRkcmVzc190KSwgR0ZQX0FUT01JQyk7CisJaWYgKG1jYWRkciA9PSBOVUxMKQorCQlyZXR1cm4gMTsKKworCW1lbWNweShtY2FkZHItPmFkZHJlc3MsIGFkZHJlc3MsIDYpOworCisJbWNhZGRyLT5uZXh0ID0gYWRhcHRlci0+bWNhc3RhZGRyczsKKwlhZGFwdGVyLT5tY2FzdGFkZHJzID0gbWNhZGRyOworCisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKKy8qCisgKiBGdW5jdGlvbnMgdG8gb2J0YWluIHRoZSBDUkMgY29ycmVzcG9uZGluZyB0byB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3MuCisgKiBUaGlzIGlzIGEgc3RhbmRhcmQgZXRoZXJuZXQgQ1JDIGluIHRoYXQgaXQgaXMgYSAzMi1iaXQsIHJlZmxlY3RlZCBDUkMgdXNpbmcKKyAqIHRoZSBwb2x5bm9taWFsOgorICogICB4XjMyICsgeF4yNiArIHheMjMgKyB4XjIyICsgeF4xNiArIHheMTIgKyB4XjExICsgeF4xMCArIHheOCArIHheNyArIHheNSArIHheNCArIHheMiArIHheMS4KKyAqCisgKiBBZnRlciB0aGUgQ1JDIGZvciB0aGUgNiBieXRlcyBpcyBnZW5lcmF0ZWQgKGJ1dCBiZWZvcmUgdGhlIHZhbHVlIGlzIGNvbXBsZW1lbnRlZCksCisgKiB3ZSBtdXN0IHRoZW4gdHJhbnNwb3NlIHRoZSB2YWx1ZSBhbmQgcmV0dXJuIGJpdHMgMzAtMjMuCisgKgorICovCitzdGF0aWMgdTMyIHN4Z19jcmNfdGFibGVbMjU2XTsJLyogVGFibGUgb2YgQ1JDJ3MgZm9yIGFsbCBwb3NzaWJsZSBieXRlIHZhbHVlcyAqLworc3RhdGljIHUzMiBzeGdfY3JjX2luaXQ7CS8qIElzIHRhYmxlIGluaXRpYWxpemVkICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyoKKyAqICBDb250cnVjdCB0aGUgQ1JDMzIgdGFibGUKKyAqLworc3RhdGljIHZvaWQgc3hnX21jYXN0X2luaXRfY3JjMzIodm9pZCkKK3sKKwl1MzIgYzsJCQkvKiAgQ1JDIHNoaXQgcmVnICAgICAgICAgICAgICAgICAqLworCXUzMiBlID0gMDsJCS8qICBQb2x5IFgtb3IgcGF0dGVybiAgICAgICAgICAgICovCisJaW50IGk7CQkJLyogIGNvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgKi8KKwlpbnQgazsJCQkvKiAgYnl0ZSBiZWluZyBzaGlmdGVkIGludG8gY3JjICAqLworCisJc3RhdGljIGludCBwW10gPSB7IDAsIDEsIDIsIDQsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDE2LCAyMiwgMjMsIDI2IH07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHApIC8gc2l6ZW9mKGludCk7IGkrKykgeworCQllIHw9IDFMIDw8ICgzMSAtIHBbaV0pOworCX0KKworCWZvciAoaSA9IDE7IGkgPCAyNTY7IGkrKykgeworCQljID0gaTsKKwkJZm9yIChrID0gODsgazsgay0tKSB7CisJCQljID0gYyAmIDEgPyAoYyA+PiAxKSBeIGUgOiBjID4+IDE7CisJCX0KKwkJc3hnX2NyY190YWJsZVtpXSA9IGM7CisJfQorfQorCisvKgorICogIFJldHVybiB0aGUgTUFDIGhhc3QgYXMgZGVzY3JpYmVkIGFib3ZlLgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBzeGdfbWNhc3RfZ2V0X21hY19oYXNoKGNoYXIgKm1hY2FkZHIpCit7CisJdTMyIGNyYzsKKwljaGFyICpwOworCWludCBpOworCXVuc2lnbmVkIGNoYXIgbWFjaGFzaCA9IDA7CisKKwlpZiAoIXN4Z19jcmNfaW5pdCkgeworCQlzeGdfbWNhc3RfaW5pdF9jcmMzMigpOworCQlzeGdfY3JjX2luaXQgPSAxOworCX0KKworCWNyYyA9IDB4RkZGRkZGRkY7CS8qIFByZWxvYWQgc2hpZnQgcmVnaXN0ZXIsIHBlciBjcmMtMzIgc3BlYyAqLworCWZvciAoaSA9IDAsIHAgPSBtYWNhZGRyOyBpIDwgNjsgKytwLCArK2kpIHsKKwkJY3JjID0gKGNyYyA+PiA4KSBeIHN4Z19jcmNfdGFibGVbKGNyYyBeICpwKSAmIDB4RkZdOworCX0KKworCS8qIFJldHVybiBiaXRzIDEtOCwgdHJhbnNwb3NlZCAqLworCWZvciAoaSA9IDE7IGkgPCA5OyBpKyspIHsKKwkJbWFjaGFzaCB8PSAoKChjcmMgPj4gaSkgJiAxKSA8PCAoOCAtIGkpKTsKKwl9CisKKwlyZXR1cm4gKG1hY2hhc2gpOworfQorCitzdGF0aWMgdm9pZCBzeGdfbWNhc3Rfc2V0X2JpdChwX2FkYXB0ZXJfdCBhZGFwdGVyLCBjaGFyICphZGRyZXNzKQoreworCXVuc2lnbmVkIGNoYXIgY3JjcG9seTsKKworCS8qIEdldCB0aGUgQ1JDIHBvbHlub21pYWwgZm9yIHRoZSBtYWMgYWRkcmVzcyAqLworCWNyY3BvbHkgPSBzeGdfbWNhc3RfZ2V0X21hY19oYXNoKGFkZHJlc3MpOworCisJLyogV2Ugb25seSBoYXZlIHNwYWNlIG9uIHRoZSBTTElDIGZvciA2NCBlbnRyaWVzLiAgTG9wCisJICogb2ZmIHRoZSB0b3AgdHdvIGJpdHMuICgyXjYgPSA2NCkKKwkgKi8KKwljcmNwb2x5ICY9IDB4M0Y7CisKKwkvKiBPUiBpbiB0aGUgbmV3IGJpdCBpbnRvIG91ciA2NCBiaXQgbWFzay4gKi8KKwlhZGFwdGVyLT5NdWx0aWNhc3RNYXNrIHw9ICh1NjQpIDEgPDwgY3JjcG9seTsKK30KKworc3RhdGljIHZvaWQgc3hnX21jYXN0X3NldF9saXN0KHBfbmV0X2RldmljZSBkZXYpCit7CisjaWYgWFhYVE9ETworCXBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7CisJaW50IHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCWludCBpOworCWNoYXIgKmFkZHJlc3NlczsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3QgPSBkZXYtPm1jX2xpc3Q7CisJaW50IG1jX2NvdW50ID0gZGV2LT5tY19jb3VudDsKKworCUFTU0VSVChhZGFwdGVyKTsKKworCWZvciAoaSA9IDE7IGkgPD0gbWNfY291bnQ7IGkrKykgeworCQlhZGRyZXNzZXMgPSAoY2hhciAqKSZtY19saXN0LT5kbWlfYWRkcjsKKwkJaWYgKG1jX2xpc3QtPmRtaV9hZGRybGVuID09IDYpIHsKKwkJCXN0YXR1cyA9IHN4Z19tY2FzdF9hZGRfbGlzdChhZGFwdGVyLCBhZGRyZXNzZXMpOworCQkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXN4Z19tY2FzdF9zZXRfYml0KGFkYXB0ZXIsIGFkZHJlc3Nlcyk7CisJCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OworCX0KKworCURCR19FUlJPUigiJXMgYS0+ZGV2ZmxhZ3NfcHJldlsleF0gZGV2LT5mbGFnc1sleF0gc3RhdHVzWyV4XVxuIiwKKwkJICBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPmRldmZsYWdzX3ByZXYsIGRldi0+ZmxhZ3MsIHN0YXR1cyk7CisJaWYgKGFkYXB0ZXItPmRldmZsYWdzX3ByZXYgIT0gZGV2LT5mbGFncykgeworCQlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOworCQlpZiAoZGV2LT5mbGFncykgeworCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKSB7CisJCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQkNBU1Q7CisJCQl9CisJCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfUFJPTUlTQzsKKwkJCX0KKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQUxMTUNBU1Q7CisJCQl9CisJCQlpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpIHsKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19NQ0FTVDsKKwkJCX0KKwkJfQorCQlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gZGV2LT5mbGFnczsKKwkJREJHX0VSUk9SKCIlcyBjYWxsIHN4Z19jb25maWdfc2V0IGFkYXB0ZXItPm1hY29wdHNbJXhdXG4iLAorCQkJICBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPm1hY29wdHMpOworCQlzeGdfY29uZmlnX3NldChhZGFwdGVyLCBUUlVFKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdHVzID09IFNUQVRVU19TVUNDRVNTKSB7CisJCQlzeGdfbWNhc3Rfc2V0X21hc2soYWRhcHRlcik7CisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfbWFzayhwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCVBTWEdfVUNPREVfUkVHUyBzeGdfcmVncyA9IGFkYXB0ZXItPlVjb2RlUmVnczsKKworCURCR19FUlJPUigiJXMgRU5URVIgKCVzKSBtYWNvcHRzWyV4XSBtYXNrWyVsbHhdXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCAodW5zaWduZWQgaW50KWFkYXB0ZXItPk1hY0ZpbHRlciwKKwkJICBhZGFwdGVyLT5NdWx0aWNhc3RNYXNrKTsKKworCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiAoTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0MpKSB7CisJCS8qIFR1cm4gb24gYWxsIG11bHRpY2FzdCBhZGRyZXNzZXMuIFdlIGhhdmUgdG8gZG8gdGhpcyBmb3IgcHJvbWlzY3VvdXMKKwkJICogbW9kZSBhcyB3ZWxsIGFzIEFMTE1DQVNUIG1vZGUuICBJdCBzYXZlcyB0aGUgTWljcm9jb2RlIGZyb20gaGF2aW5nCisJCSAqIHRvIGtlZXAgc3RhdGUgYWJvdXQgdGhlIE1BQyBjb25maWd1cmF0aW9uLgorCQkgKi8KKy8vICAgICAgICAgICAgICBEQkdfRVJST1IoInN4ZzogJXMgbWFjb3B0cyA9IE1BQ19BTExNQ0FTVCB8IE1BQ19QUk9NSVNDXG4gICAgICBTTFVUIE1PREUhISFcbiIsX19GVU5DVElPTl9fKTsKKwkJV1JJVEVfUkVHKHN4Z19yZWdzLT5NY2FzdExvdywgMHhGRkZGRkZGRiwgRkxVU0gpOworCQlXUklURV9SRUcoc3hnX3JlZ3MtPk1jYXN0SGlnaCwgMHhGRkZGRkZGRiwgRkxVU0gpOworLy8gICAgICAgIERCR19FUlJPUigiJXMgKCVzKSBXUklURSB0byBzbGljX3JlZ3Mgc2xpY19tY2FzdGxvdyZoaWdoIDB4RkZGRkZGRkZcbiIsX19GVU5DVElPTl9fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCisJfSBlbHNlIHsKKwkJLyogQ29tbWl0IG91ciBtdWx0aWNhc3QgbWFzdCB0byB0aGUgU0xJQyBieSB3cml0aW5nIHRvIHRoZSBtdWx0aWNhc3QKKwkJICogYWRkcmVzcyBtYXNrIHJlZ2lzdGVycworCQkgKi8KKwkJREJHX0VSUk9SKCIlcyAoJXMpIFdSSVRFIG1jYXN0bG93WyVseF0gbWNhc3RoaWdoWyVseF1cbiIsCisJCQkgIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJICAoKHVsb25nKSAoYWRhcHRlci0+TXVsdGljYXN0TWFzayAmIDB4RkZGRkZGRkYpKSwKKwkJCSAgKCh1bG9uZykKKwkJCSAgICgoYWRhcHRlci0+TXVsdGljYXN0TWFzayA+PiAzMikgJiAweEZGRkZGRkZGKSkpOworCisJCVdSSVRFX1JFRyhzeGdfcmVncy0+TWNhc3RMb3csCisJCQkgICh1MzIpIChhZGFwdGVyLT5NdWx0aWNhc3RNYXNrICYgMHhGRkZGRkZGRiksIEZMVVNIKTsKKwkJV1JJVEVfUkVHKHN4Z19yZWdzLT5NY2FzdEhpZ2gsCisJCQkgICh1MzIpICgoYWRhcHRlci0+CisJCQkJICBNdWx0aWNhc3RNYXNrID4+IDMyKSAmIDB4RkZGRkZGRkYpLCBGTFVTSCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzeGdfdW5tYXBfbW1pb19zcGFjZShwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworI2lmIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCisvLyAgICAgIGlmIChhZGFwdGVyLT5SZWdzKSB7CisvLyAgICAgICAgICAgICAgaW91bm1hcChhZGFwdGVyLT5SZWdzKTsKKy8vICAgICAgfQorLy8gICAgICBhZGFwdGVyLT5zbGljX3JlZ3MgPSBOVUxMOworI2VuZGlmCit9CisKKyNpZiBYWFhUT0RPCisvKgorICogU3hnRnJlZVJlc291cmNlcyAtIEZyZWUgZXZlcnl0aGluZyBhbGxvY2F0ZWQgaW4gU3hnQWxsb2NhdGVSZXNvdXJjZXMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuCisgKglub25lCisgKi8KK3ZvaWQgU3hnRnJlZVJlc291cmNlcyhwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCXUzMiBSc3NJZHMsIElzckNvdW50OworCVBUQ1BfT0JKRUNUIFRjcE9iamVjdDsKKwl1MzIgaTsKKwlCT09MRUFOIFRpbWVyQ2FuY2VsbGVkOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRnJlZVJlcyIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+TWF4VGNicywgMCwgMCk7CisKKwlSc3NJZHMgPSBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsKKwlJc3JDb3VudCA9IGFkYXB0ZXItPk1zaUVuYWJsZWQgPyBSc3NJZHMgOiAxOworCisJaWYgKGFkYXB0ZXItPkJhc2ljQWxsb2NhdGlvbnMgPT0gRkFMU0UpIHsKKwkJLy8gTm8gYWxsb2NhdGlvbnMgaGF2ZSBiZWVuIG1hZGUsIGluY2x1ZGluZyBzcGlubG9ja3MsCisJCS8vIG9yIGxpc3RoZWFkIGluaXRpYWxpemF0aW9ucy4gIFJldHVybi4KKwkJcmV0dXJuOworCX0KKworCWlmICghKElzTGlzdEVtcHR5KCZhZGFwdGVyLT5BbGxSY3ZCbG9ja3MpKSkgeworCQlTeGdGcmVlUmN2QmxvY2tzKGFkYXB0ZXIpOworCX0KKwlpZiAoIShJc0xpc3RFbXB0eSgmYWRhcHRlci0+QWxsU2dsQnVmZmVycykpKSB7CisJCVN4Z0ZyZWVTZ2xCdWZmZXJzKGFkYXB0ZXIpOworCX0KKwkvLyBGcmVlIGV2ZW50IHF1ZXVlcy4KKwlpZiAoYWRhcHRlci0+RXZlbnRSaW5ncykgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkgICAgc2l6ZW9mKFNYR19FVkVOVF9SSU5HKSAqIFJzc0lkcywKKwkJCQkgICAgYWRhcHRlci0+RXZlbnRSaW5ncywgYWRhcHRlci0+UEV2ZW50UmluZ3MpOworCX0KKwlpZiAoYWRhcHRlci0+SXNyKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCSAgICBzaXplb2YodTMyKSAqIElzckNvdW50LAorCQkJCSAgICBhZGFwdGVyLT5Jc3IsIGFkYXB0ZXItPlBJc3IpOworCX0KKwlpZiAoYWRhcHRlci0+WG10UmluZ1plcm9JbmRleCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkgICAgc2l6ZW9mKHUzMiksCisJCQkJICAgIGFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgsCisJCQkJICAgIGFkYXB0ZXItPlBYbXRSaW5nWmVyb0luZGV4KTsKKwl9CisJaWYgKGFkYXB0ZXItPkluZGlyZWN0aW9uVGFibGUpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJICAgIFNYR19NQVhfUlNTX1RBQkxFX1NJWkUsCisJCQkJICAgIGFkYXB0ZXItPkluZGlyZWN0aW9uVGFibGUsCisJCQkJICAgIGFkYXB0ZXItPlBJbmRpcmVjdGlvblRhYmxlKTsKKwl9CisKKwlTWEdfRlJFRV9QQUNLRVRfUE9PTChhZGFwdGVyLT5QYWNrZXRQb29sSGFuZGxlKTsKKwlTWEdfRlJFRV9CVUZGRVJfUE9PTChhZGFwdGVyLT5CdWZmZXJQb29sSGFuZGxlKTsKKworCS8vIFVubWFwIHJlZ2lzdGVyIHNwYWNlcworCVN4Z1VubWFwUmVzb3VyY2VzKGFkYXB0ZXIpOworCisJLy8gRGVyZWdpc3RlciBETUEKKwlpZiAoYWRhcHRlci0+RG1hSGFuZGxlKSB7CisJCVNYR19ERVJFR0lTVEVSX0RNQShhZGFwdGVyLT5EbWFIYW5kbGUpOworCX0KKwkvLyBEZXJlZ2lzdGVyIGludGVycnVwdAorCVN4Z0RlcmVnaXN0ZXJJbnRlcnJ1cHQoYWRhcHRlcik7CisKKwkvLyBQb3NzaWJseSBmcmVlIHN5c3RlbSBpbmZvICg1LjIgb25seSkKKwlTWEdfUkVMRUFTRV9TWVNURU1fSU5GTyhhZGFwdGVyKTsKKworCVN4Z0RpYWdGcmVlUmVzb3VyY2VzKGFkYXB0ZXIpOworCisJU3hnRnJlZU1DYXN0QWRkcnMoYWRhcHRlcik7CisKKwlpZiAoU1hHX1RJTUVSX0FMTE9DQVRFRChhZGFwdGVyLT5SZXNldFRpbWVyKSkgeworCQlTWEdfQ0FOQ0VMX1RJTUVSKGFkYXB0ZXItPlJlc2V0VGltZXIsIFRpbWVyQ2FuY2VsbGVkKTsKKwkJU1hHX0ZSRUVfVElNRVIoYWRhcHRlci0+UmVzZXRUaW1lcik7CisJfQorCWlmIChTWEdfVElNRVJfQUxMT0NBVEVEKGFkYXB0ZXItPlJzc1RpbWVyKSkgeworCQlTWEdfQ0FOQ0VMX1RJTUVSKGFkYXB0ZXItPlJzc1RpbWVyLCBUaW1lckNhbmNlbGxlZCk7CisJCVNYR19GUkVFX1RJTUVSKGFkYXB0ZXItPlJzc1RpbWVyKTsKKwl9CisJaWYgKFNYR19USU1FUl9BTExPQ0FURUQoYWRhcHRlci0+T2ZmbG9hZFRpbWVyKSkgeworCQlTWEdfQ0FOQ0VMX1RJTUVSKGFkYXB0ZXItPk9mZmxvYWRUaW1lciwgVGltZXJDYW5jZWxsZWQpOworCQlTWEdfRlJFRV9USU1FUihhZGFwdGVyLT5PZmZsb2FkVGltZXIpOworCX0KKworCWFkYXB0ZXItPkJhc2ljQWxsb2NhdGlvbnMgPSBGQUxTRTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhGcmVlUmVzIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5NYXhUY2JzLCAwLCAwKTsKK30KKyNlbmRpZgorCisvKgorICogc3hnX2FsbG9jYXRlX2NvbXBsZXRlIC0KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gYSBtZW1vcnkgYWxsb2NhdGlvbiBoYXMgY29tcGxldGVkLgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglwX2FkYXB0ZXJfdCAgICAJLSBPdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCVZpcnR1YWxBZGRyZXNzCS0gTWVtb3J5IHZpcnR1YWwgYWRkcmVzcworICoJUGh5c2ljYWxBZGRyZXNzCS0gTWVtb3J5IHBoeXNpY2FsIGFkZHJlc3MKKyAqCUxlbmd0aAkJLSBMZW5ndGggb2YgbWVtb3J5IGFsbG9jYXRlZCAob3IgMCkKKyAqCUNvbnRleHQJCS0gVGhlIHR5cGUgb2YgYnVmZmVyIGFsbG9jYXRlZAorICoKKyAqIFJldHVybgorICoJTm9uZS4KKyAqLworc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX2NvbXBsZXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJICB2b2lkICpWaXJ0dWFsQWRkcmVzcywKKwkJCQkgIGRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzLAorCQkJCSAgdTMyIExlbmd0aCwgU1hHX0JVRkZFUl9UWVBFIENvbnRleHQpCit7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxsb2NDbXAiLAorCQkgIGFkYXB0ZXIsIFZpcnR1YWxBZGRyZXNzLCBMZW5ndGgsIENvbnRleHQpOworCUFTU0VSVChhZGFwdGVyLT5BbGxvY2F0aW9uc1BlbmRpbmcpOworCS0tYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nOworCisJc3dpdGNoIChDb250ZXh0KSB7CisKKwljYXNlIFNYR19CVUZGRVJfVFlQRV9SQ1Y6CisJCXN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZShhZGFwdGVyLAorCQkJCQkgICAgICAgVmlydHVhbEFkZHJlc3MsCisJCQkJCSAgICAgICBQaHlzaWNhbEFkZHJlc3MsIExlbmd0aCk7CisJCWJyZWFrOworCWNhc2UgU1hHX0JVRkZFUl9UWVBFX1NHTDoKKwkJc3hnX2FsbG9jYXRlX3NnbF9idWZmZXJfY29tcGxldGUoYWRhcHRlciwgKFBTWEdfU0NBVFRFUl9HQVRIRVIpCisJCQkJCQkgVmlydHVhbEFkZHJlc3MsCisJCQkJCQkgUGh5c2ljYWxBZGRyZXNzLCBMZW5ndGgpOworCQlicmVhazsKKwl9CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFsb2NDbXAiLAorCQkgIGFkYXB0ZXIsIFZpcnR1YWxBZGRyZXNzLCBMZW5ndGgsIENvbnRleHQpOworfQorCisvKgorICogc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkgLSBTaGFyZWQgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZSB1c2VkIGZvcgorICoJCXN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgYnVmZmVyIGFsbG9jYXRpb25zCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJU2l6ZQkJLSBibG9jayBzaXplIHRvIGFsbG9jYXRlCisgKglCdWZmZXJUeXBlCS0gVHlwZSBvZiBidWZmZXIgdG8gYWxsb2NhdGUKKyAqCisgKiBSZXR1cm4KKyAqCWludAorICovCitzdGF0aWMgaW50IHN4Z19hbGxvY2F0ZV9idWZmZXJfbWVtb3J5KHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJICAgICAgdTMyIFNpemUsIFNYR19CVUZGRVJfVFlQRSBCdWZmZXJUeXBlKQoreworCWludCBzdGF0dXM7CisJdm9pZCAqQnVmZmVyOworCWRtYV9hZGRyX3QgcEJ1ZmZlcjsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkFsbG9jTWVtIiwKKwkJICBhZGFwdGVyLCBTaXplLCBCdWZmZXJUeXBlLCAwKTsKKwkvLyBHcmFiIHRoZSBhZGFwdGVyIGxvY2sgYW5kIGNoZWNrIHRoZSBzdGF0ZS4KKwkvLyBJZiB3ZSdyZSBpbiBhbnl0aGluZyBvdGhlciB0aGFuIElOSVRJQUxJWklORyBvcgorCS8vIFJVTk5JTkcgc3RhdGUsIGZhaWwuICBUaGlzIGlzIHRvIHByZXZlbnQKKwkvLyBhbGxvY2F0aW9ucyBpbiBhbiBpbXByb3BlciBkcml2ZXIgc3RhdGUKKwlzcGluX2xvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKworCS8vIEluY3JlbWVudCB0aGUgQWxsb2NhdGlvbnNQZW5kaW5nIGNvdW50IHdoaWxlIGhvbGRpbmcKKwkvLyB0aGUgbG9jay4gIFBhdXNlIHByb2Nlc3NpbmcgcmVsaWVzIG9uIHRoaXMKKwkrK2FkYXB0ZXItPkFsbG9jYXRpb25zUGVuZGluZzsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCisJLy8gQXQgaW5pdGlhbGl6YXRpb24gdGltZSBhbGxvY2F0ZSByZXNvdXJjZXMgc3luY2hyb25vdXNseS4KKwlCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIFNpemUsICZwQnVmZmVyKTsKKwlpZiAoQnVmZmVyID09IE5VTEwpIHsKKwkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisJCS8vIERlY3JlbWVudCB0aGUgQWxsb2NhdGlvbnNQZW5kaW5nIGNvdW50IHdoaWxlIGhvbGRpbmcKKwkJLy8gdGhlIGxvY2suICBQYXVzZSBwcm9jZXNzaW5nIHJlbGllcyBvbiB0aGlzCisJCS0tYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nOworCQlzcGluX3VubG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbGNNZW1GMSIsCisJCQkgIGFkYXB0ZXIsIFNpemUsIEJ1ZmZlclR5cGUsIDApOworCQlyZXR1cm4gKFNUQVRVU19SRVNPVVJDRVMpOworCX0KKwlzeGdfYWxsb2NhdGVfY29tcGxldGUoYWRhcHRlciwgQnVmZmVyLCBwQnVmZmVyLCBTaXplLCBCdWZmZXJUeXBlKTsKKwlzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBbG9jTWVtIiwKKwkJICBhZGFwdGVyLCBTaXplLCBCdWZmZXJUeXBlLCBzdGF0dXMpOworCXJldHVybiAoc3RhdHVzKTsKK30KKworLyoKKyAqIHN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZSAtIENvbXBsZXRlIGEgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrIGFsbG9jYXRpb24KKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCVJjdkJsb2NrCQkJLSByZWNlaXZlIGJsb2NrIHZpcnR1YWwgYWRkcmVzcworICoJUGh5c2ljYWxBZGRyZXNzCQktIFBoeXNpY2FsIGFkZHJlc3MKKyAqCUxlbmd0aAkJCQktIE1lbW9yeSBsZW5ndGgKKyAqCisgKiBSZXR1cm4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJCQkgICB2b2lkICpSY3ZCbG9jaywKKwkJCQkJICAgZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MsCisJCQkJCSAgIHUzMiBMZW5ndGgpCit7CisJdTMyIGk7CisJdTMyIEJ1ZmZlclNpemUgPSBhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZTsKKwl1NjQgUGFkZHI7CisJUFNYR19SQ1ZfQkxPQ0tfSERSIFJjdkJsb2NrSGRyOworCXVuc2lnbmVkIGNoYXIgKlJjdkRhdGFCdWZmZXI7CisJUFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSIFJjdkRhdGFCdWZmZXJIZHI7CisJUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyBSY3ZEZXNjcmlwdG9yQmxvY2s7CisJUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgUmN2RGVzY3JpcHRvckJsb2NrSGRyOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxSY3ZCbGsiLAorCQkgIGFkYXB0ZXIsIFJjdkJsb2NrLCBMZW5ndGgsIDApOworCWlmIChSY3ZCbG9jayA9PSBOVUxMKSB7CisJCWdvdG8gZmFpbDsKKwl9CisJbWVtc2V0KFJjdkJsb2NrLCAwLCBMZW5ndGgpOworCUFTU0VSVCgoQnVmZmVyU2l6ZSA9PSBTWEdfUkNWX0RBVEFfQlVGRkVSX1NJWkUpIHx8CisJICAgICAgIChCdWZmZXJTaXplID09IFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkUpKTsKKwlBU1NFUlQoTGVuZ3RoID09IFNYR19SQ1ZfQkxPQ0tfU0laRShCdWZmZXJTaXplKSk7CisJLy8gRmlyc3QsIGluaXRpYWxpemUgdGhlIGNvbnRhaW5lZCBwb29sIG9mIHJlY2VpdmUgZGF0YQorCS8vIGJ1ZmZlcnMuICBUaGlzIGluaXRpYWxpemF0aW9uIHJlcXVpcmVzIE5CTC9OQi9NREwgYWxsb2NhdGlvbnMsCisJLy8gSWYgYW55IG9mIHRoZW0gZmFpbCwgZnJlZSB0aGUgYmxvY2sgYW5kIHJldHVybiB3aXRob3V0CisJLy8gcXVldWVpbmcgdGhlIHNoYXJlZCBtZW1vcnkKKwlSY3ZEYXRhQnVmZmVyID0gUmN2QmxvY2s7CisjaWYgMAorCWZvciAoaSA9IDAsIFBhZGRyID0gKlBoeXNpY2FsQWRkcmVzczsKKwkgICAgIGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKKwkgICAgIGkrKywgUGFkZHIuTG93UGFydCArPSBCdWZmZXJTaXplLCBSY3ZEYXRhQnVmZmVyICs9IEJ1ZmZlclNpemUpCisjZW5kaWYKKwkJZm9yIChpID0gMCwgUGFkZHIgPSBQaHlzaWNhbEFkZHJlc3M7CisJCSAgICAgaSA8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLOworCQkgICAgIGkrKywgUGFkZHIgKz0gQnVmZmVyU2l6ZSwgUmN2RGF0YUJ1ZmZlciArPSBCdWZmZXJTaXplKSB7CisJCQkvLworCQkJUmN2RGF0YUJ1ZmZlckhkciA9CisJCQkgICAgKFBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUikgKFJjdkRhdGFCdWZmZXIgKworCQkJCQkJCVNYR19SQ1ZfREFUQV9CVUZGRVJfSERSX09GRlNFVAorCQkJCQkJCShCdWZmZXJTaXplKSk7CisJCQlSY3ZEYXRhQnVmZmVySGRyLT5WaXJ0dWFsQWRkcmVzcyA9IFJjdkRhdGFCdWZmZXI7CisJCQlSY3ZEYXRhQnVmZmVySGRyLT5QaHlzaWNhbEFkZHJlc3MgPSBQYWRkcjsKKwkJCVJjdkRhdGFCdWZmZXJIZHItPlN0YXRlID0gU1hHX0JVRkZFUl9VUFNUUkVBTTsJLy8gRm9yIEZSRUUgbWFjcm8gYXNzZXJ0aW9uCisJCQlSY3ZEYXRhQnVmZmVySGRyLT5TaXplID0KKwkJCSAgICBTWEdfUkNWX0JVRkZFUl9EQVRBX1NJWkUoQnVmZmVyU2l6ZSk7CisKKwkJCVNYR19BTExPQ0FURV9SQ1ZfUEFDS0VUKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOworCQkJaWYgKFJjdkRhdGFCdWZmZXJIZHItPlN4Z0R1bWJSY3ZQYWNrZXQgPT0gTlVMTCkKKwkJCQlnb3RvIGZhaWw7CisKKwkJfQorCisJLy8gUGxhY2UgdGhpcyBlbnRpcmUgYmxvY2sgb2YgbWVtb3J5IG9uIHRoZSBBbGxSY3ZCbG9ja3MgcXVldWUgc28gaXQgY2FuIGJlCisJLy8gZnJlZSBsYXRlcgorCVJjdkJsb2NrSGRyID0KKwkgICAgKFBTWEdfUkNWX0JMT0NLX0hEUikgKCh1bnNpZ25lZCBjaGFyICopUmN2QmxvY2sgKworCQkJCSAgU1hHX1JDVl9CTE9DS19IRFJfT0ZGU0VUKEJ1ZmZlclNpemUpKTsKKwlSY3ZCbG9ja0hkci0+VmlydHVhbEFkZHJlc3MgPSBSY3ZCbG9jazsKKwlSY3ZCbG9ja0hkci0+UGh5c2ljYWxBZGRyZXNzID0gUGh5c2ljYWxBZGRyZXNzOworCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCWFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQrKzsKKwlJbnNlcnRUYWlsTGlzdCgmYWRhcHRlci0+QWxsUmN2QmxvY2tzLCAmUmN2QmxvY2tIZHItPkFsbExpc3QpOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisKKwkvLyBOb3cgZnJlZSB0aGUgY29udGFpbmVkIHJlY2VpdmUgZGF0YSBidWZmZXJzIHRoYXQgd2UgaW5pdGlhbGl6ZWQgYWJvdmUKKwlSY3ZEYXRhQnVmZmVyID0gUmN2QmxvY2s7CisJZm9yIChpID0gMCwgUGFkZHIgPSBQaHlzaWNhbEFkZHJlc3M7CisJICAgICBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7CisJICAgICBpKyssIFBhZGRyICs9IEJ1ZmZlclNpemUsIFJjdkRhdGFCdWZmZXIgKz0gQnVmZmVyU2l6ZSkgeworCQlSY3ZEYXRhQnVmZmVySGRyID0gKFBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUikgKFJjdkRhdGFCdWZmZXIgKworCQkJCQkJCSAgICAgICBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUl9PRkZTRVQKKwkJCQkJCQkgICAgICAgKEJ1ZmZlclNpemUpKTsKKwkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJCVNYR19GUkVFX1JDVl9EQVRBX0JVRkZFUihhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyKTsKKwkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwl9CisKKwkvLyBMb2NhdGUgdGhlIGRlc2NyaXB0b3IgYmxvY2sgYW5kIHB1dCBpdCBvbiBhIHNlcGFyYXRlIGZyZWUgcXVldWUKKwlSY3ZEZXNjcmlwdG9yQmxvY2sgPQorCSAgICAoUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykgKCh1bnNpZ25lZCBjaGFyICopUmN2QmxvY2sgKworCQkJCQkgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX09GRlNFVAorCQkJCQkgKEJ1ZmZlclNpemUpKTsKKwlSY3ZEZXNjcmlwdG9yQmxvY2tIZHIgPQorCSAgICAoUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIpICgodW5zaWduZWQgY2hhciAqKVJjdkJsb2NrICsKKwkJCQkJICAgICBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSX09GRlNFVAorCQkJCQkgICAgIChCdWZmZXJTaXplKSk7CisJUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5WaXJ0dWFsQWRkcmVzcyA9IFJjdkRlc2NyaXB0b3JCbG9jazsKKwlSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlBoeXNpY2FsQWRkcmVzcyA9IFBhZGRyOworCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCVNYR19GUkVFX1JDVl9ERVNDUklQVE9SX0JMT0NLKGFkYXB0ZXIsIFJjdkRlc2NyaXB0b3JCbG9ja0hkcik7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxSQmxrIiwKKwkJICBhZGFwdGVyLCBSY3ZCbG9jaywgTGVuZ3RoLCAwKTsKKwlyZXR1cm47CisgICAgICBmYWlsOgorCS8vIEZyZWUgYW55IGFsbG9jYXRlZCByZXNvdXJjZXMKKwlpZiAoUmN2QmxvY2spIHsKKwkJUmN2RGF0YUJ1ZmZlciA9IFJjdkJsb2NrOworCQlmb3IgKGkgPSAwOyBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7CisJCSAgICAgaSsrLCBSY3ZEYXRhQnVmZmVyICs9IEJ1ZmZlclNpemUpIHsKKwkJCVJjdkRhdGFCdWZmZXJIZHIgPQorCQkJICAgIChQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIpIChSY3ZEYXRhQnVmZmVyICsKKwkJCQkJCQlTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUl9PRkZTRVQKKwkJCQkJCQkoQnVmZmVyU2l6ZSkpOworCQkJU1hHX0ZSRUVfUkNWX1BBQ0tFVChSY3ZEYXRhQnVmZmVySGRyKTsKKwkJfQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkgICAgTGVuZ3RoLCBSY3ZCbG9jaywgUGh5c2ljYWxBZGRyZXNzKTsKKwl9CisJREJHX0VSUk9SKCIlczogT1VUIE9GIFJFU09VUkNFU1xuIiwgX19GVU5DVElPTl9fKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfSU1QT1JUQU5ULCAiUmN2QUZhaWwiLAorCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCwKKwkJICBhZGFwdGVyLT5GcmVlUmN2QmxvY2tDb3VudCwgYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCk7CisJYWRhcHRlci0+U3RhdHMuTm9NZW0rKzsKK30KKworLyoKKyAqIHN4Z19hbGxvY2F0ZV9zZ2xfYnVmZmVyX2NvbXBsZXRlIC0gQ29tcGxldGUgYSBTR0wgYnVmZmVyIGFsbG9jYXRpb24KKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCVN4Z1NnbAkJCQktIFNYR19TQ0FUVEVSX0dBVEhFUiBidWZmZXIKKyAqCVBoeXNpY2FsQWRkcmVzcwkJLSBQaHlzaWNhbCBhZGRyZXNzCisgKglMZW5ndGgJCQkJLSBNZW1vcnkgbGVuZ3RoCisgKgorICogUmV0dXJuCisgKgorICovCitzdGF0aWMgdm9pZCBzeGdfYWxsb2NhdGVfc2dsX2J1ZmZlcl9jb21wbGV0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJCQkgICAgIFBTWEdfU0NBVFRFUl9HQVRIRVIgU3hnU2dsLAorCQkJCQkgICAgIGRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzLAorCQkJCQkgICAgIHUzMiBMZW5ndGgpCit7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxTZ2xDbXAiLAorCQkgIGFkYXB0ZXIsIFN4Z1NnbCwgTGVuZ3RoLCAwKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPlNnbFFMb2NrKTsKKwlhZGFwdGVyLT5BbGxTZ2xCdWZmZXJDb3VudCsrOworCW1lbXNldChTeGdTZ2wsIDAsIHNpemVvZihTWEdfU0NBVFRFUl9HQVRIRVIpKTsKKwlTeGdTZ2wtPlBoeXNpY2FsQWRkcmVzcyA9IFBoeXNpY2FsQWRkcmVzczsJLyogKlBoeXNpY2FsQWRkcmVzczsgKi8KKwlTeGdTZ2wtPmFkYXB0ZXIgPSBhZGFwdGVyOwkvLyBJbml0aWFsaXplIGJhY2twb2ludGVyIG9uY2UKKwlJbnNlcnRUYWlsTGlzdCgmYWRhcHRlci0+QWxsU2dsQnVmZmVycywgJlN4Z1NnbC0+QWxsTGlzdCk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlNnbFFMb2NrKTsKKwlTeGdTZ2wtPlN0YXRlID0gU1hHX0JVRkZFUl9CVVNZOworCVNYR19GUkVFX1NHTF9CVUZGRVIoYWRhcHRlciwgU3hnU2dsLCBOVUxMKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxTZ2wiLAorCQkgIGFkYXB0ZXIsIFN4Z1NnbCwgTGVuZ3RoLCAwKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdGVtcF9tYWNfYWRkcmVzc1s2XSA9CisgICAgeyAweDAwLCAweGFiLCAweGNkLCAweGVmLCAweDEyLCAweDY5IH07CisKK3N0YXRpYyB2b2lkIHN4Z19hZGFwdGVyX3NldF9od2FkZHIocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKy8vICBEQkdfRVJST1IgKCIlcyBFTlRFUiBjYXJkLT5jb25maWdfc2V0WyV4XSBwb3J0WyVkXSBwaHlzcG9ydFslZF0gZnVuY3QjWyVkXVxuIiwgX19GVU5DVElPTl9fLAorLy8gICAgICAgICAgICAgY2FyZC0+Y29uZmlnX3NldCwgYWRhcHRlci0+cG9ydCwgYWRhcHRlci0+cGh5c3BvcnQsIGFkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyKTsKKy8vCisvLyAgc3hnX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsKKworCW1lbWNweShhZGFwdGVyLT5tYWNhZGRyLCB0ZW1wX21hY19hZGRyZXNzLCBzaXplb2YoU1hHX0NPTkZJR19NQUMpKTsKKy8vICAgICAgREJHX0VSUk9SICgiJXMgQUZURVIgY29weWluZyBmcm9tIGNvbmZpZy5tYWNpbmZvIGludG8gY3Vycm1hY2FkZHJcbiIsIF9fRlVOQ1RJT05fXyk7CisvLyAgICAgIHN4Z19kYmdfbWFjYWRkcnMoYWRhcHRlcik7CisJaWYgKCEoYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0gfHwKKwkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSB8fAorCSAgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdIHx8CisJICAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10gfHwKKwkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSB8fCBhZGFwdGVyLT5jdXJybWFjYWRkcls1XSkpIHsKKwkJbWVtY3B5KGFkYXB0ZXItPmN1cnJtYWNhZGRyLCBhZGFwdGVyLT5tYWNhZGRyLCA2KTsKKwl9CisJaWYgKGFkYXB0ZXItPm5ldGRldikgeworCQltZW1jcHkoYWRhcHRlci0+bmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+Y3Vycm1hY2FkZHIsIDYpOworCX0KKy8vICBEQkdfRVJST1IgKCIlcyBFWElUIHBvcnQgJWRcbiIsIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+cG9ydCk7CisJc3hnX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsKKworfQorCitzdGF0aWMgaW50IHN4Z19tYWNfc2V0X2FkZHJlc3MocF9uZXRfZGV2aWNlIGRldiwgdm9pZCAqcHRyKQoreworI2lmIFhYWFRPRE8KKwlwX2FkYXB0ZXJfdCBhZGFwdGVyID0gKHBfYWRhcHRlcl90KSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHB0cjsKKworCURCR19FUlJPUigiJXMgRU5URVIgKCVzKVxuIiwgX19GVU5DVElPTl9fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAoIWFkYXB0ZXIpIHsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJREJHX0VSUk9SKCJzeGc6ICVzICglcykgY3VyciAlMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWFxuIiwKKwkJICBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0sCisJCSAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdLAorCQkgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzNdLCBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSwKKwkJICBhZGFwdGVyLT5jdXJybWFjYWRkcls1XSk7CisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCW1lbWNweShhZGFwdGVyLT5jdXJybWFjYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisJREJHX0VSUk9SKCJzeGc6ICVzICglcykgbmV3ICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5jdXJybWFjYWRkclswXSwKKwkJICBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0sCisJCSAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdLAorCQkgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzVdKTsKKworCXN4Z19jb25maWdfc2V0KGFkYXB0ZXIsIFRSVUUpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqICBTWEcgRFJJVkVSIEZVTkNUSU9OUyAgKGJlbG93KSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHN4Z19pbml0aWFsaXplX2FkYXB0ZXIgLSBJbml0aWFsaXplIGFkYXB0ZXIKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuCisgKglpbnQKKyAqLworc3RhdGljIGludCBzeGdfaW5pdGlhbGl6ZV9hZGFwdGVyKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJdTMyIFJzc0lkcywgSXNyQ291bnQ7CisJdTMyIGk7CisJaW50IHN0YXR1czsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkluaXRBZHB0IiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKworCVJzc0lkcyA9IDE7CQkvLyAgWFhYVE9ETyAgU1hHX1JTU19DUFVfQ09VTlQoYWRhcHRlcik7CisJSXNyQ291bnQgPSBhZGFwdGVyLT5Nc2lFbmFibGVkID8gUnNzSWRzIDogMTsKKworCS8vIFNhbml0eSBjaGVjayBTWEdfVUNPREVfUkVHUyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiB0bworCS8vIG1ha2Ugc3VyZSB0aGUgbGVuZ3RoIGlzIGNvcnJlY3QKKwlBU1NFUlQoc2l6ZW9mKFNYR19VQ09ERV9SRUdTKSA9PSBTWEdfUkVHSVNURVJfU0laRV9QRVJfQ1BVKTsKKworCS8vIERpc2FibGUgaW50ZXJydXB0cworCVNYR19ESVNBQkxFX0FMTF9JTlRFUlJVUFRTKGFkYXB0ZXIpOworCisJLy8gU2V0IE1UVQorCUFTU0VSVCgoYWRhcHRlci0+RnJhbWVTaXplID09IEVUSEVSTUFYRlJBTUUpIHx8CisJICAgICAgIChhZGFwdGVyLT5GcmFtZVNpemUgPT0gSlVNQk9NQVhGUkFNRSkpOworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uTGlua010dSwgYWRhcHRlci0+RnJhbWVTaXplLCBUUlVFKTsKKworCS8vIFNldCBldmVudCByaW5nIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZQorCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCSAgICBhZGFwdGVyLT5VY29kZVJlZ3NbMF0uRXZlbnRCYXNlLCBhZGFwdGVyLT5QRXZlbnRSaW5ncywgMCk7CisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5FdmVudFNpemUsIEVWRU5UX1JJTkdfU0laRSwgVFJVRSk7CisKKwkvLyBQZXItSVNSIGluaXRpYWxpemF0aW9uCisJZm9yIChpID0gMDsgaSA8IElzckNvdW50OyBpKyspIHsKKwkJdTY0IEFkZHI7CisJCS8vIFNldCBpbnRlcnJ1cHQgc3RhdHVzIHBvaW50ZXIKKwkJQWRkciA9IGFkYXB0ZXItPlBJc3IgKyAoaSAqIHNpemVvZih1MzIpKTsKKwkJV1JJVEVfUkVHNjQoYWRhcHRlciwgYWRhcHRlci0+VWNvZGVSZWdzW2ldLklzcCwgQWRkciwgaSk7CisJfQorCisJLy8gWE1UIHJpbmcgemVybyBpbmRleAorCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCSAgICBhZGFwdGVyLT5VY29kZVJlZ3NbMF0uU1BTZW5kSW5kZXgsCisJCSAgICBhZGFwdGVyLT5QWG10UmluZ1plcm9JbmRleCwgMCk7CisKKwkvLyBQZXItUlNTIGluaXRpYWxpemF0aW9uCisJZm9yIChpID0gMDsgaSA8IFJzc0lkczsgaSsrKSB7CisJCS8vIFJlbGVhc2UgYWxsIGV2ZW50IHJpbmcgZW50cmllcyB0byB0aGUgTWljcm9jb2RlCisJCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbaV0uRXZlbnRSZWxlYXNlLCBFVkVOVF9SSU5HX1NJWkUsCisJCQkgIFRSVUUpOworCX0KKworCS8vIFRyYW5zbWl0IHJpbmcgYmFzZSBhbmQgc2l6ZQorCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCisJCSAgICBhZGFwdGVyLT5VY29kZVJlZ3NbMF0uWG10QmFzZSwgYWRhcHRlci0+UFhtdFJpbmdzLCAwKTsKKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLlhtdFNpemUsIFNYR19YTVRfUklOR19TSVpFLCBUUlVFKTsKKworCS8vIFJlY2VpdmUgcmluZyBiYXNlIGFuZCBzaXplCisJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJICAgIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5SY3ZCYXNlLCBhZGFwdGVyLT5QUmN2UmluZ3MsIDApOworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uUmN2U2l6ZSwgU1hHX1JDVl9SSU5HX1NJWkUsIFRSVUUpOworCisJLy8gUG9wdWxhdGUgdGhlIGNhcmQgd2l0aCByZWNlaXZlIGJ1ZmZlcnMKKwlzeGdfc3RvY2tfcmN2X2J1ZmZlcnMoYWRhcHRlcik7CisKKwkvLyBJbml0aWFsaXplIGNoZWNrc3VtIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiAgQXQgdGhlIG1vbWVudAorCS8vIHdlIGFsd2F5cyBlbmFibGUgSVAgYW5kIFRDUCByZWNlaXZlIGNoZWNrc3VtcyBvbiB0aGUgY2FyZC4KKwkvLyBEZXBlbmRpbmcgb24gdGhlIGNoZWNrc3VtIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIGJ5IHRoZQorCS8vIHVzZXIsIHdlIGNhbiBjaG9vc2UgdG8gcmVwb3J0IG9yIGlnbm9yZSB0aGUgY2hlY2tzdW0KKwkvLyBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSB0aGUgY2FyZC4KKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLlJlY2VpdmVDaGVja3N1bSwKKwkJICBTWEdfUkNWX1RDUF9DU1VNX0VOQUJMRUQgfCBTWEdfUkNWX0lQX0NTVU1fRU5BQkxFRCwgVFJVRSk7CisKKwkvLyBJbml0aWFsaXplIHRoZSBNQUMsIFhBVUkKKwlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2luaXRpYWxpemVfbGlua1xuIiwgX19GVU5DVElPTl9fKTsKKwlzdGF0dXMgPSBzeGdfaW5pdGlhbGl6ZV9saW5rKGFkYXB0ZXIpOworCURCR19FUlJPUigic3hnOiAlcyBFWElUIHN4Z19pbml0aWFsaXplX2xpbmsgc3RhdHVzWyV4XVxuIiwgX19GVU5DVElPTl9fLAorCQkgIHN0YXR1cyk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlyZXR1cm4gKHN0YXR1cyk7CisJfQorCS8vIEluaXRpYWxpemUgRGVhZCB0byBGQUxTRS4KKwkvLyBTbGljQ2hlY2tGb3JIYW5nIG9yIFNsaWNEdW1wVGhyZWFkIHdpbGwgdGFrZSBpdCBmcm9tIGhlcmUuCisJYWRhcHRlci0+RGVhZCA9IEZBTFNFOworCWFkYXB0ZXItPlBpbmdPdXRzdGFuZGluZyA9IEZBTFNFOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEluaXQiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogc3hnX2ZpbGxfZGVzY3JpcHRvcl9ibG9jayAtIFBvcHVsYXRlIGEgZGVzY3JpcHRvciBibG9jayBhbmQgZ2l2ZSBpdCB0bworICogdGhlIGNhcmQuICBUaGUgY2FsbGVyIHNob3VsZCBob2xkIHRoZSBSY3ZRTG9jaworICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqICBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIJLSBEZXNjcmlwdG9yIGJsb2NrIHRvIGZpbGwKKyAqCisgKiBSZXR1cm4KKyAqCXN0YXR1cworICovCitzdGF0aWMgaW50IHN4Z19maWxsX2Rlc2NyaXB0b3JfYmxvY2socF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCQkgICAgIFBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSCisJCQkJICAgICBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpCit7CisJdTMyIGk7CisJUFNYR19SSU5HX0lORk8gUmN2UmluZ0luZm8gPSAmYWRhcHRlci0+UmN2UmluZ1plcm9JbmZvOworCVBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiBSY3ZEYXRhQnVmZmVySGRyOworCVBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgUmN2RGVzY3JpcHRvckJsb2NrOworCVBTWEdfQ01EIFJpbmdEZXNjcmlwdG9yQ21kOworCVBTWEdfUkNWX1JJTkcgUmluZ1plcm8gPSAmYWRhcHRlci0+UmN2UmluZ3NbMF07CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJGaWxCbGsiLAorCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQsCisJCSAgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LCBhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50KTsKKworCUFTU0VSVChSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCisJLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcmVzb3VyY2VzIHRvIGZpbGwgdGhlIGRlc2NyaXB0b3IgYmxvY2ssCisJLy8gcmV0dXJuIGZhaWx1cmUKKwlpZiAoKGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCA8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLKSB8fAorCSAgICBTWEdfUklOR19GVUxMKFJjdlJpbmdJbmZvKSkgeworCQlhZGFwdGVyLT5TdGF0cy5Ob01lbSsrOworCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwl9CisJLy8gR2V0IGEgcmluZyBkZXNjcmlwdG9yIGNvbW1hbmQKKwlTWEdfR0VUX0NNRChSaW5nWmVybywKKwkJICAgIFJjdlJpbmdJbmZvLCBSaW5nRGVzY3JpcHRvckNtZCwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKTsKKwlBU1NFUlQoUmluZ0Rlc2NyaXB0b3JDbWQpOworCVJjdkRlc2NyaXB0b3JCbG9ja0hkci0+U3RhdGUgPSBTWEdfQlVGRkVSX09OQ0FSRDsKKwlSY3ZEZXNjcmlwdG9yQmxvY2sgPQorCSAgICAoUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykgUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5WaXJ0dWFsQWRkcmVzczsKKworCS8vIEZpbGwgaW4gdGhlIGRlc2NyaXB0b3IgYmxvY2sKKwlmb3IgKGkgPSAwOyBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7IGkrKykgeworCQlTWEdfR0VUX1JDVl9EQVRBX0JVRkZFUihhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyKTsKKwkJQVNTRVJUKFJjdkRhdGFCdWZmZXJIZHIpOworCQlTWEdfUkVJTklBVElBTElaRV9QQUNLRVQoUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldCk7CisJCVJjdkRhdGFCdWZmZXJIZHItPlN0YXRlID0gU1hHX0JVRkZFUl9PTkNBUkQ7CisJCVJjdkRlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcnNbaV0uVmlydHVhbEFkZHJlc3MgPQorCQkgICAgKHZvaWQgKilSY3ZEYXRhQnVmZmVySGRyOworCQlSY3ZEZXNjcmlwdG9yQmxvY2stPkRlc2NyaXB0b3JzW2ldLlBoeXNpY2FsQWRkcmVzcyA9CisJCSAgICBSY3ZEYXRhQnVmZmVySGRyLT5QaHlzaWNhbEFkZHJlc3M7CisJfQorCS8vIEFkZCB0aGUgZGVzY3JpcHRvciBibG9jayB0byByZWNlaXZlIGRlc2NyaXB0b3IgcmluZyAwCisJUmluZ0Rlc2NyaXB0b3JDbWQtPlNnbCA9IFJjdkRlc2NyaXB0b3JCbG9ja0hkci0+UGh5c2ljYWxBZGRyZXNzOworCisJLy8gUmN2QnVmZmVyc09uQ2FyZCBpcyBub3QgcHJvdGVjdGVkIHZpYSB0aGUgcmVjZWl2ZSBsb2NrIChzZWUKKwkvLyBzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZSkgV2UgZG9uJ3Qgd2FudCB0byBncmFwIGEgbG9jayBldmVyeSB0aW1lIGEKKwkvLyBidWZmZXIgaXMgcmV0dXJuZWQgdG8gdXMsIHNvIHdlIHVzZSBhdG9taWMgaW50ZXJsb2NrZWQgZnVuY3Rpb25zCisJLy8gaW5zdGVhZC4KKwlhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkICs9IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRHNjQmxrIiwKKwkJICBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIsCisJCSAgUmluZ0Rlc2NyaXB0b3JDbWQsIFJjdlJpbmdJbmZvLT5IZWFkLCBSY3ZSaW5nSW5mby0+VGFpbCk7CisKKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLlJjdkNtZCwgMSwgdHJ1ZSk7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEZpbEJsayIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCwKKwkJICBhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQsIGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQpOworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogc3hnX3N0b2NrX3Jjdl9idWZmZXJzIC0gU3RvY2sgdGhlIGNhcmQgd2l0aCByZWNlaXZlIGJ1ZmZlcnMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuCisgKglOb25lCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19zdG9ja19yY3ZfYnVmZmVycyhwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCVBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSIFJjdkRlc2NyaXB0b3JCbG9ja0hkcjsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlN0b2NrQnVmIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkLAorCQkgIGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCwgYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCk7CisJLy8gRmlyc3QsIHNlZSBpZiB3ZSd2ZSBnb3QgbGVzcyB0aGFuIG91ciBtaW5pbXVtIHRocmVzaG9sZCBvZgorCS8vIHJlY2VpdmUgYnVmZmVycywgdGhlcmUgaXNuJ3QgYW4gYWxsb2NhdGlvbiBpbiBwcm9ncmVzcywgYW5kCisJLy8gd2UgaGF2ZW4ndCBleGNlZWRlZCBvdXIgbWF4aW11bS4uIGdldCBhbm90aGVyIGJsb2NrIG9mIGJ1ZmZlcnMKKwkvLyBOb25lIG9mIHRoaXMgbmVlZHMgdG8gYmUgU01QIHNhZmUuICBJdCdzIHJvdW5kIG51bWJlcnMuCisJaWYgKChhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQgPCBTWEdfTUlOX1JDVl9EQVRBX0JVRkZFUlMpICYmCisJICAgIChhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50IDwgU1hHX01BWF9SQ1ZfQkxPQ0tTKSAmJgorCSAgICAoYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nID09IDApKSB7CisJCXN4Z19hbGxvY2F0ZV9idWZmZXJfbWVtb3J5KGFkYXB0ZXIsCisJCQkJCSAgIFNYR19SQ1ZfQkxPQ0tfU0laRShhZGFwdGVyLT4KKwkJCQkJCQkgICAgICBSZWNlaXZlQnVmZmVyU2l6ZSksCisJCQkJCSAgIFNYR19CVUZGRVJfVFlQRV9SQ1YpOworCX0KKwkvLyBOb3cgZ3JhYiB0aGUgUmN2UUxvY2sgbG9jayBhbmQgcHJvY2VlZAorCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCXdoaWxlIChhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkIDwgU1hHX1JDVl9EQVRBX0JVRkZFUlMpIHsKKwkJUExJU1RfRU5UUlkgX3BsZTsKKworCQkvLyBHZXQgYSBkZXNjcmlwdG9yIGJsb2NrCisJCVJjdkRlc2NyaXB0b3JCbG9ja0hkciA9IE5VTEw7CisJCWlmIChhZGFwdGVyLT5GcmVlUmN2QmxvY2tDb3VudCkgeworCQkJX3BsZSA9IFJlbW92ZUhlYWRMaXN0KCZhZGFwdGVyLT5GcmVlUmN2QmxvY2tzKTsKKwkJCVJjdkRlc2NyaXB0b3JCbG9ja0hkciA9CisJCQkgICAgY29udGFpbmVyX29mKF9wbGUsIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIsCisJCQkJCSBGcmVlTGlzdCk7CisJCQlhZGFwdGVyLT5GcmVlUmN2QmxvY2tDb3VudC0tOworCQkJUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfQlVTWTsKKwkJfQorCisJCWlmIChSY3ZEZXNjcmlwdG9yQmxvY2tIZHIgPT0gTlVMTCkgeworCQkJLy8gQmFpbCBvdXQuLgorCQkJYWRhcHRlci0+U3RhdHMuTm9NZW0rKzsKKwkJCWJyZWFrOworCQl9CisJCS8vIEZpbGwgaW4gdGhlIGRlc2NyaXB0b3IgYmxvY2sgYW5kIGdpdmUgaXQgdG8gdGhlIGNhcmQKKwkJaWYgKHN4Z19maWxsX2Rlc2NyaXB0b3JfYmxvY2soYWRhcHRlciwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKSA9PQorCQkgICAgU1RBVFVTX0ZBSUxVUkUpIHsKKwkJCS8vIEZyZWUgdGhlIGRlc2NyaXB0b3IgYmxvY2sKKwkJCVNYR19GUkVFX1JDVl9ERVNDUklQVE9SX0JMT0NLKGFkYXB0ZXIsCisJCQkJCQkgICAgICBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYRmlsQmxrcyIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCwKKwkJICBhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQsIGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQpOworfQorCisvKgorICogc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzIC0gUmV0dXJuIGRlc2NyaXB0b3IgYmxvY2tzIHRoYXQgaGF2ZSBiZWVuCisgKiBjb21wbGV0ZWQgYnkgdGhlIG1pY3JvY29kZQorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCUluZGV4CQktIFdoZXJlIHRoZSBtaWNyb2NvZGUgaXMgdXAgdG8KKyAqCisgKiBSZXR1cm4KKyAqCU5vbmUKKyAqLworc3RhdGljIHZvaWQgc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJCSAgIHVuc2lnbmVkIGNoYXIgSW5kZXgpCit7CisJUFNYR19SQ1ZfUklORyBSaW5nWmVybyA9ICZhZGFwdGVyLT5SY3ZSaW5nc1swXTsKKwlQU1hHX1JJTkdfSU5GTyBSY3ZSaW5nSW5mbyA9ICZhZGFwdGVyLT5SY3ZSaW5nWmVyb0luZm87CisJUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgUmN2RGVzY3JpcHRvckJsb2NrSGRyOworCVBTWEdfQ01EIFJpbmdEZXNjcmlwdG9yQ21kOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQ21wUkJsa3MiLAorCQkgIGFkYXB0ZXIsIEluZGV4LCBSY3ZSaW5nSW5mby0+SGVhZCwgUmN2UmluZ0luZm8tPlRhaWwpOworCisJLy8gTm93IGdyYWIgdGhlIFJjdlFMb2NrIGxvY2sgYW5kIHByb2NlZWQKKwlzcGluX2xvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwlBU1NFUlQoSW5kZXggIT0gUmN2UmluZ0luZm8tPlRhaWwpOworCXdoaWxlIChSY3ZSaW5nSW5mby0+VGFpbCAhPSBJbmRleCkgeworCQkvLworCQkvLyBMb2NhdGUgdGhlIGN1cnJlbnQgQ21kIChyaW5nIGRlc2NyaXB0b3IgZW50cnkpLCBhbmQKKwkJLy8gYXNzb2NpYXRlZCByZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2ssIGFuZCBhZHZhbmNlCisJCS8vIHRoZSB0YWlsCisJCS8vCisJCVNYR19SRVRVUk5fQ01EKFJpbmdaZXJvLAorCQkJICAgICAgIFJjdlJpbmdJbmZvLAorCQkJICAgICAgIFJpbmdEZXNjcmlwdG9yQ21kLCBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbXBSQmxrIiwKKwkJCSAgUmN2UmluZ0luZm8tPkhlYWQsIFJjdlJpbmdJbmZvLT5UYWlsLAorCQkJICBSaW5nRGVzY3JpcHRvckNtZCwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKTsKKworCQkvLyBDbGVhciB0aGUgU0dMIGZpZWxkCisJCVJpbmdEZXNjcmlwdG9yQ21kLT5TZ2wgPSAwOworCQkvLyBBdHRlbXB0IHRvIHJlZmlsbCBpdCBhbmQgaGFuZCBpdCByaWdodCBiYWNrIHRvIHRoZQorCQkvLyBjYXJkLiAgSWYgd2UgZmFpbCB0byByZWZpbGwgaXQsIGZyZWUgdGhlIGRlc2NyaXB0b3IgYmxvY2sKKwkJLy8gaGVhZGVyLiAgVGhlIGNhcmQgd2lsbCBiZSByZXN0b2NrZWQgbGF0ZXIgdmlhIHRoZQorCQkvLyBSY3ZCdWZmZXJzT25DYXJkIHRlc3QKKwkJaWYgKHN4Z19maWxsX2Rlc2NyaXB0b3JfYmxvY2soYWRhcHRlciwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKSA9PQorCQkgICAgU1RBVFVTX0ZBSUxVUkUpIHsKKwkJCVNYR19GUkVFX1JDVl9ERVNDUklQVE9SX0JMT0NLKGFkYXB0ZXIsCisJCQkJCQkgICAgICBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWENSQmxrcyIsCisJCSAgYWRhcHRlciwgSW5kZXgsIFJjdlJpbmdJbmZvLT5IZWFkLCBSY3ZSaW5nSW5mby0+VGFpbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzeGdfZHJpdmVyID0geworCS5uYW1lID0gRFJWX05BTUUsCisJLmlkX3RhYmxlID0gc3hnX3BjaV90YmwsCisJLnByb2JlID0gc3hnX2VudHJ5X3Byb2JlLAorCS5yZW1vdmUgPSBzeGdfZW50cnlfcmVtb3ZlLAorI2lmIFNYR19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQKKwkuc3VzcGVuZCA9IHN4Z3BtX3N1c3BlbmQsCisJLnJlc3VtZSA9IHN4Z3BtX3Jlc3VtZSwKKyNlbmRpZgorLyogICAgLnNodXRkb3duICAgPSAgICAgc2xpY19zaHV0ZG93biwgIE1PT0tfSU5WRVNUSUdBVEUgKi8KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN4Z19tb2R1bGVfaW5pdCh2b2lkKQoreworCXN4Z19pbml0X2RyaXZlcigpOworCisJaWYgKGRlYnVnID49IDApCisJCXN4Z19kZWJ1ZyA9IGRlYnVnOworCisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnN4Z19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc3hnX21vZHVsZV9jbGVhbnVwKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzeGdfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc3hnX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHN4Z19tb2R1bGVfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5oIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDRjYTU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuaApAQCAtMCwwICsxLDc3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IKkgMjAwMC0yMDA4IEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogJElkOiBzeGcuaCx2IDEuMyAyMDA4LzA3LzI0IDE3OjI1OjA4IGNocmlzIEV4cCAkCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZworICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiBzeGcuaAorICoKKyAqIFRoaXMgaXMgdGhlIGJhc2Ugc2V0IG9mIGhlYWRlciBkZWZpbml0aW9ucyBmb3IgdGhlIFNYRyBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX19TWEdfRFJJVkVSX0hfXworI2RlZmluZSBfX1NYR19EUklWRVJfSF9fCisKKyNkZWZpbmUgcF9uZXRfZGV2aWNlIHN0cnVjdCBuZXRfZGV2aWNlICoKKy8vIFNYR19TVEFUUyAtIFByb2JhYmx5IG1vdmUgdGhlc2UgdG8gc29tZXBsYWNlIHdoZXJlCisvLyB0aGUgc2xpY3N0YXQgKHN4Z3N0YXQ/KSBwcm9ncmFtIGNhbiBnZXQgdGhlbS4KK3R5cGVkZWYgc3RydWN0IF9TWEdfU1RBVFMgeworCS8vIFhtdAorCXUzMgkJCQlYbXROQkw7CQkJCS8vIE9mZmxvYWQgc2VuZCBOQkwgY291bnQKKwl1NjQJCQkJRHVtYlhtdEJ5dGVzOwkJLy8gRHVtYm5pYyBzZW5kIGJ5dGVzCisJdTY0CQkJCVNsb3dYbXRCeXRlczsJCS8vIFNsb3dwYXRoIHNlbmQgYnl0ZXMKKwl1NjQJCQkJRmFzdFhtdEJ5dGVzOwkJLy8gRmFzdHBhdGggc2VuZCBieXRlcworCXU2NAkJCQlEdW1iWG10UGt0czsJCS8vIER1bWJuaWMgc2VuZCBwYWNrZXRzCisJdTY0CQkJCVNsb3dYbXRQa3RzOwkJLy8gU2xvd3BhdGggc2VuZCBwYWNrZXRzCisJdTY0CQkJCUZhc3RYbXRQa3RzOwkJLy8gRmFzdHBhdGggc2VuZCBwYWNrZXRzCisgICAgdTY0CQkJCUR1bWJYbXRVY2FzdFBrdHM7CS8vIGRpcmVjdGVkIHBhY2tldHMKKyAgICB1NjQJCQkJRHVtYlhtdE1jYXN0UGt0czsJLy8gTXVsdGljYXN0IHBhY2tldHMKKyAgICB1NjQJCQkJRHVtYlhtdEJjYXN0UGt0czsJLy8gT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1JDVgorICAgIHU2NAkJCQlEdW1iWG10VWNhc3RCeXRlczsJLy8gT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19YTUlUCisgICAgdTY0CQkJCUR1bWJYbXRNY2FzdEJ5dGVzOwkvLyBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19YTUlUCisgICAgdTY0CQkJCUR1bWJYbXRCY2FzdEJ5dGVzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19YTUlUCisgICAgdTY0CQkJCVhtdEVycm9yczsJCQkvLyBPSURfR0VOX1hNSVRfRVJST1IKKyAgICB1NjQJCQkJWG10RGlzY2FyZHM7CQkvLyBPSURfR0VOX1hNSVRfRElTQ0FSRFMKKwl1NjQJCQkJWG10T2s7CQkJCS8vIE9JRF9HRU5fWE1JVF9PSworCXU2NAkJCQlYbXRRTGVuOwkJCS8vIE9JRF9HRU5fVFJBTlNNSVRfUVVFVUVfTEVOR1RICisJdTY0CQkJCVhtdFplcm9GdWxsOwkJLy8gVHJhbnNtaXQgcmluZyB6ZXJvIGZ1bGwKKwkvLyBSY3YKKwl1MzIJCQkJUmN2TkJMOwkJCQkvLyBPZmZsb2FkIHJlY2lldmUgTkJMIGNvdW50CisJdTY0CQkJCUR1bWJSY3ZCeXRlczsJCS8vIGR1bWJuaWMgcmVjdiBieXRlcworICAgIHU2NCAgICAgICAgICAgICBEdW1iUmN2VWNhc3RCeXRlczsJLy8gT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19SQ1YKKyAgICB1NjQgICAgICAgICAgICAgRHVtYlJjdk1jYXN0Qnl0ZXM7CS8vIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDVgorICAgIHU2NCAgICAgICAgICAgICBEdW1iUmN2QmNhc3RCeXRlczsJLy8gT0lEX0dFTl9CUk9BRENBU1RfQllURVNfUkNWCisJdTY0CQkJCVNsb3dSY3ZCeXRlczsJCS8vIFNsb3dwYXRoIHJlY3YgYnl0ZXMKKwl1NjQJCQkJRmFzdFJjdkJ5dGVzOwkJLy8gRmFzdHBhdGggcmVjdiBieXRlcworICAgIHU2NAkJCQlEdW1iUmN2UGt0czsJCS8vIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1JDVgorCXU2NAkJCQlEdW1iUmN2VGNwUGt0czsJCS8vIFNlZSBTeGdDb2xsZWN0U3RhdHMKKyAgICB1NjQJCQkJRHVtYlJjdlVjYXN0UGt0czsJLy8gZGlyZWN0ZWQgcGFja2V0cworICAgIHU2NAkJCQlEdW1iUmN2TWNhc3RQa3RzOwkvLyBNdWx0aWNhc3QgcGFja2V0cworICAgIHU2NAkJCQlEdW1iUmN2QmNhc3RQa3RzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWCisJdTY0CQkJCVNsb3dSY3ZQa3RzOwkJLy8gT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWCisgICAgdTY0CQkJCVJjdkVycm9yczsJCQkvLyBPSURfR0VOX1JDVl9FUlJPUgorICAgIHU2NAkJCQlSY3ZEaXNjYXJkczsJCS8vIE9JRF9HRU5fUkNWX0RJU0NBUkRTCisJdTY0CQkJCVJjdk5vQnVmZmVyOwkJLy8gT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSCisgICAgdTY0IAkJCVBkcUZ1bGw7CQkJLy8gUHJvY2Vzc2VkIERhdGEgUXVldWUgRnVsbAorCXU2NAkJCQlFdmVudFJpbmdGdWxsOwkJLy8gRXZlbnQgcmluZyBmdWxsCisJLy8gVmVyYm9zZSBzdGF0cworCXU2NAkJCQlNYXhTZW5kczsJCQkvLyBNYXggc2VuZHMgb3V0c3RhbmRpbmcKKwl1NjQJCQkJTm9TZ2xCdWY7CQkJLy8gU0dMIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWx1cmUKKwl1NjQJCQkJU2dsRmFpbDsJCQkvLyBORElTIFNHTCBmYWlsdXJlCisJdTY0CQkJCVNnbEFzeW5jOwkJCS8vIE5ESVMgU0dMIGZhaWx1cmUKKwl1NjQJCQkJTm9NZW07CQkJCS8vIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUKKwl1NjQJCQkJTnVtSW50czsJCQkvLyBJbnRlcnJ1cHRzCisJdTY0CQkJCUZhbHNlSW50czsJCQkvLyBJbnRlcnJ1cHQgd2l0aCBJU1IgPT0gMAorCXU2NAkJCQlYbXREcm9wczsJCQkvLyBObyBzYWhhcmEgRFJBTSBidWZmZXIgZm9yIHhtdAorCS8vIFNhaGFyYSByZWNlaXZlIHN0YXR1cworCXU2NAkJCQlUcmFuc3BvcnRDc3VtOwkJLy8gU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0NTVU0KKwl1NjQJCQkJVHJhbnNwb3J0VWZsb3c7CQkvLyBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfVUZMT1cKKwl1NjQJCQkJVHJhbnNwb3J0SGRyTGVuOwkvLyBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfSERSTEVOCisJdTY0CQkJCU5ldHdvcmtDc3VtOwkJLy8gU1hHX1JDVl9TVEFUVVNfTkVUV09SS19DU1VNOgorCXU2NAkJCQlOZXR3b3JrVWZsb3c7CQkvLyBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VGTE9XOgorCXU2NAkJCQlOZXR3b3JrSGRyTGVuOwkJLy8gU1hHX1JDVl9TVEFUVVNfTkVUV09SS19IRFJMRU46CisJdTY0CQkJCVBhcml0eTsJCQkJLy8gU1hHX1JDVl9TVEFUVVNfUEFSSVRZCisJdTY0CQkJCUxpbmtQYXJpdHk7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19QQVJJVFk6CisJdTY0CQkJCUxpbmtFYXJseTsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZOgorCXU2NAkJCQlMaW5rQnVmT2Zsb3c7CQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0JVRk9GTE9XOgorCXU2NAkJCQlMaW5rQ29kZTsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0NPREU6CisJdTY0CQkJCUxpbmtEcmliYmxlOwkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19EUklCQkxFOgorCXU2NAkJCQlMaW5rQ3JjOwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ1JDOgorCXU2NAkJCQlMaW5rT2Zsb3c7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19PRkxPVzoKKwl1NjQJCQkJTGlua1VmbG93OwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfVUZMT1c6Cit9IFNYR19TVEFUUywgKlBTWEdfU1RBVFM7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERVTUItTklDIFNlbmQgcGF0aCBkZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgU1hHX0NPTVBMRVRFX0RVTUJfU0VORChfcEFkYXB0LCBfc2tiKSB7ICAgICAgICAgICAgICAgICAgICAgCQkgICAgCVwKKwlBU1NFUlQoX3NrYik7CQkJCQkJCQkJCQkJCSAgICAJCQlcCisgICAgZGV2X2tmcmVlX3NrYl9pcnEoX3NrYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgU1hHX0RST1BfRFVNQl9TRU5EKF9wQWRhcHQsIF9za2IpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICAJXAorCUFTU0VSVChfc2tiKTsJCQkJCQkJCQkJCQkJICAgIAkJCVwKKyAgICBkZXZfa2ZyZWVfc2tiKF9za2IpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLy8gTG9jYXRlIGN1cnJlbnQgcmVjZWl2ZSBoZWFkZXIgYnVmZmVyIGxvY2F0aW9uLiAgVXNlIHRoaXMKKy8vIGluc3RlYWQgb2YgUmN2RGF0YUhkci0+VmlydHVhbEFkZHJlc3Mgc2luY2UgdGhlIGRhdGEKKy8vIG1heSBoYXZlIGJlZW4gb2Zmc2V0IGJ5IFNYR19BRFZBTkNFX01ETF9PRkZTRVQKKyNkZWZpbmUgU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihfUmN2RGF0YUhkcikgICAgICAgIChfUmN2RGF0YUhkciktPnNrYi0+ZGF0YQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEdW1iLU5JQyByZWNlaXZlIHByb2Nlc3NpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBEZWZpbmUgYW4gU1hHX1BBQ0tFVCBhcyBhbiBORElTX1BBQ0tFVAorI2RlZmluZSBQU1hHX1BBQ0tFVCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqCisvLyBJbmRpY2F0aW9ucyBhcnJheSBzaXplCisjZGVmaW5lIFNYR19SQ1ZfQVJSQVlTSVpFCTY0CisKKyNkZWZpbmUgU1hHX0FMTE9DQVRFX1JDVl9QQUNLRVQoX3BBZGFwdCwgX1JjdkRhdGFCdWZmZXJIZHIpIHsJCQkJXAorCXN0cnVjdCBza19idWZmICogc2tiOwkJCQkJCQkJCQkJCSAgICBcCisgICAgc2tiID0gYWxsb2Nfc2tiKDIwNDgsIEdGUF9BVE9NSUMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChza2IpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAJKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiID0gc2tiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNrYi0+bmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAJKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFNYR19GUkVFX1JDVl9QQUNLRVQoX1JjdkRhdGFCdWZmZXJIZHIpIHsJCQkJCQkJXAorCWlmKChfUmN2RGF0YUJ1ZmZlckhkciktPnNrYikgewkJCQkJCQkJCQkJXAorCQlkZXZfa2ZyZWVfc2tiKChfUmN2RGF0YUJ1ZmZlckhkciktPnNrYik7CQkJCQkJICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKy8vIE1hY3JvIHRvIGFkZCBhIE5ESVNfUEFDS0VUIHRvIGFuIGluZGljYXRpb24gYXJyYXkKKy8vIElmIHdlIGZpbGwgdXAgb3VyIGFycmF5IG9mIHBhY2tldCBwb2ludGVycywgdGhlbiBpbmRpY2F0ZSB0aGlzCisvLyBibG9jayB1cCBub3cgYW5kIHN0YXJ0IG9uIGEgbmV3IG9uZS4KKyNkZWZpbmUJU1hHX0FERF9SQ1ZfUEFDS0VUKF9wQWRhcHQsIF9QYWNrZXQsIF9QcmV2UGFja2V0LCBfSW5kaWNhdGlvbkxpc3QsIF9OdW1QYWNrZXRzKSB7IFwKKwkoX0luZGljYXRpb25MaXN0KVtfTnVtUGFja2V0c10gPSAoX1BhY2tldCk7CQkJCQkJCQkJCVwKKwkoX051bVBhY2tldHMpKys7CQkJCQkJCQkJCQkJCQkJCVwKKwlpZigoX051bVBhY2tldHMpID09IFNYR19SQ1ZfQVJSQVlTSVpFKSB7CQkJCQkJCQkJCVwKKwkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5kaWNSY3YiLAkJCQlcCisJCQkJICAgKF9OdW1QYWNrZXRzKSwgMCwgMCwgMCk7CQkJCQkJCQkJCQlcCisgICAgICAgIG5ldGlmX3J4KChfSW5kaWNhdGlvbkxpc3QpLChfTnVtUGFja2V0cykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCShfTnVtUGFja2V0cykgPSAwOwkJCQkJCQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQkJCQlcCit9CisKKyNkZWZpbmUgU1hHX0lORElDQVRFX1BBQ0tFVFMoX3BBZGFwdCwgX0luZGljYXRpb25MaXN0LCBfTnVtUGFja2V0cykgewkJCVwKKwlpZihfTnVtUGFja2V0cykgewkJCQkJCQkJCQkJCQkJCVwKKwkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5kaWNSY3YiLAkJCVwKKwkJCQkgICAoX051bVBhY2tldHMpLCAwLCAwLCAwKTsJCQkJCQkJCQkJXAorICAgICAgICBuZXRpZl9yeCgoX0luZGljYXRpb25MaXN0KSwoX051bVBhY2tldHMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCShfTnVtUGFja2V0cykgPSAwOwkJCQkJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCQkJXAorfQorCisjZGVmaW5lIFNYR19SRUlOSUFUSUFMSVpFX1BBQ0tFVChfUGFja2V0KQkJCQkJCQkJCQlcCisJe30gIC8qX05kaXNSZWluaXRpYWxpemVQYWNrZXQoX1BhY2tldCkqLyAgLyogIHRoaXMgaXMgbm90IG5lY2Vzc2FyeSB3aXRoIGFuIHNrYiAqLworCisvLyBEZWZpbml0aW9ucyB0byBpbml0aWFsaXplIER1bWItbmljIFJlY2VpdmUgTkJMcworI2RlZmluZSBTWEdfUkNWX1BBQ0tFVF9CVUZGRVJfSERSKF9QYWNrZXQpICgoKFBTWEdfUkNWX05CTF9SRVNFUlZFRCkoKF9QYWNrZXQpLT5NaW5pcG9ydFJlc2VydmVkRXgpKS0+UmN2RGF0YUJ1ZmZlckhkcikKKworI2RlZmluZSBTWEdfUkNWX1NFVF9DSEVDS1NVTV9JTkZPKF9QYWNrZXQsIF9DcGkpCVwKKwlORElTX1BFUl9QQUNLRVRfSU5GT19GUk9NX1BBQ0tFVCgoX1BhY2tldCksIFRjcElwQ2hlY2tzdW1QYWNrZXRJbmZvKSA9IChQVk9JRCkoX0NwaSkKKworI2RlZmluZSBTWEdfUkNWX1NFVF9UT0VQTElUWihfUGFja2V0LCBfVG9lcGxpdHosIF9UeXBlLCBfRnVuY3Rpb24pIHsJCVwKKwlORElTX1BBQ0tFVF9TRVRfSEFTSF9WQUxVRSgoX1BhY2tldCksIChfVG9lcGxpdHopKTsJCQkJCQlcCisJTkRJU19QQUNLRVRfU0VUX0hBU0hfVFlQRSgoX1BhY2tldCksIChfVHlwZSkpOwkJCQkJCQlcCisJTkRJU19QQUNLRVRfU0VUX0hBU0hfRlVOQ1RJT04oKF9QYWNrZXQpLCAoX0Z1bmN0aW9uKSk7CQkJCQlcCit9CisKKyNkZWZpbmUgU1hHX1JDVl9TRVRfVkxBTl9JTkZPKF9QYWNrZXQsIF9WbGFuSWQsIF9Qcmlvcml0eSkgewkJCQkJXAorCU5ESVNfUEFDS0VUXzgwMjFRX0lORk8JX1BhY2tldDgwMjFxSW5mbzsJCQkJCQkJCQlcCisJX1BhY2tldDgwMjFxSW5mby5UYWdIZWFkZXIuVmxhbklkID0gKF9WbGFuSWQpOwkJCQkJCQkJXAorCV9QYWNrZXQ4MDIxcUluZm8uVGFnSGVhZGVyLlVzZXJQcmlvcml0eSA9IChfUHJpb3JpdHkpOwkJCQkJCVwKKwlORElTX1BFUl9QQUNLRVRfSU5GT19GUk9NX1BBQ0tFVCgoX1BhY2tldCksIEllZWU4MDIxUU5ldEJ1ZmZlckxpc3RJbmZvKSA9IAlcCisJCV9QYWNrZXQ4MDIxcUluZm8uVmFsdWU7CQkJCQkJCQkJCQkJCVwKK30KKworI2RlZmluZSBTWEdfQURKVVNUX1JDVl9QQUNLRVQoX1BhY2tldCwgX1JjdkRhdGFCdWZmZXJIZHIsIF9FdmVudCkgewkJCVwKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iUmN2IiwJCQlcCisJCQkgICAoX1JjdkRhdGFCdWZmZXJIZHIpLCAoX1BhY2tldCksCQkJCQkJCQlcCisJCQkgICAoX0V2ZW50KS0+U3RhdHVzLCAwKTsJICAgICAgICAgICAgICAgICAgICAJCQkJXAorCUFTU0VSVCgoX0V2ZW50KS0+TGVuZ3RoIDw9IChfUmN2RGF0YUJ1ZmZlckhkciktPlNpemUpOwkJCQkJXAorICAgIFBhY2tldC0+bGVuID0gKF9FdmVudCktPkxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTWFjcm9zIHRvIGZyZWUgYSByZWNlaXZlIGRhdGEgYnVmZmVyIGFuZCByZWNlaXZlIGRhdGEgZGVzY3JpcHRvciBibG9jaworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTk9URSAtIExvY2sgbXVzdCBiZSBoZWxkIHdpdGggUkNWIG1hY3JvcworI2RlZmluZSBTWEdfR0VUX1JDVl9EQVRBX0JVRkZFUihfcEFkYXB0LCBfSGRyKSB7CQkJCQkJCQlcCisJUExJU1RfRU5UUlkgICAgIAkJCQlfcGxlOwkJCQkJCQkJCQlcCisJX0hkciA9IE5VTEw7CQkJCQkJCQkJCQkJCQkJCVwKKwlpZigoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCkgewkJCQkJCQkJCQkJXAorCQlBU1NFUlQoIShJc0xpc3RFbXB0eSgmKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVycykpKTsJCQkJCQlcCisJCV9wbGUgPSBSZW1vdmVIZWFkTGlzdCgmKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVycyk7CSAgICAJCQkJXAorCQkoX0hkcikgPSBjb250YWluZXJfb2YoX3BsZSwgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIsIEZyZWVMaXN0KTsJICAgICAgICBcCisJCShfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50LS07CQkJCQkJCQkJCVwKKwkJQVNTRVJUKChfSGRyKS0+U3RhdGUgPT0gU1hHX0JVRkZFUl9GUkVFKTsJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQkJCVwKK30KKworI2RlZmluZSBTWEdfRlJFRV9SQ1ZfREFUQV9CVUZGRVIoX3BBZGFwdCwgX0hkcikgewkJCQkJCQlcCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiUnRuREhkciIsCQkJXAorCQkJICAgKF9IZHIpLCAoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCwJCQkJCQlcCisJCQkgICAoX0hkciktPlN0YXRlLCAoX0hkciktPlZpcnR1YWxBZGRyZXNzKTsJCQkJCQlcCisvKglTWEdfUkVTVE9SRV9NRExfT0ZGU0VUKF9IZHIpOwkqLwkJCQkJCQkJCQlcCisJKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQrKzsJCQkJCQkJCQkJXAorCUFTU0VSVCgoKF9wQWRhcHQpLT5BbGxSY3ZCbG9ja0NvdW50ICogU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spID49IChfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50KTsgXAorCUFTU0VSVCgoX0hkciktPlN0YXRlICE9IFNYR19CVUZGRVJfRlJFRSk7CQkJCQkJCQlcCisJKF9IZHIpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCQkJCQkJCQkJXAorCUluc2VydFRhaWxMaXN0KCYoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJzLCAmKChfSGRyKS0+RnJlZUxpc3QpKTsJCVwKK30KKworI2RlZmluZSBTWEdfRlJFRV9SQ1ZfREVTQ1JJUFRPUl9CTE9DSyhfcEFkYXB0LCBfSGRyKSB7CQkJCQkJXAorCUFTU0VSVCgoX0hkciktPlN0YXRlICE9IFNYR19CVUZGRVJfRlJFRSk7CQkJCQkJCQlcCisJKF9IZHIpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCQkJCQkJCQkJXAorCShfcEFkYXB0KS0+RnJlZVJjdkJsb2NrQ291bnQrKzsJCQkJCQkJCQkJCVwKKwlBU1NFUlQoKF9wQWRhcHQpLT5BbGxSY3ZCbG9ja0NvdW50ID49IChfcEFkYXB0KS0+RnJlZVJjdkJsb2NrQ291bnQpOwlcCisJSW5zZXJ0VGFpbExpc3QoJihfcEFkYXB0KS0+RnJlZVJjdkJsb2NrcywgJihfSGRyKS0+RnJlZUxpc3QpOwkJCVwKK30KKworLy8gU0dMIG1hY3JvcworI2RlZmluZSBTWEdfRlJFRV9TR0xfQlVGRkVSKF9wQWRhcHQsIF9TZ2wsIF9OQikgewlcCisJc3Bpbl9sb2NrKCYoX3BBZGFwdCktPlNnbFFMb2NrKTsJCVwKKwkoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJDb3VudCsrOwkJXAorCUFTU0VSVCgoX3BBZGFwdCktPkFsbFNnbEJ1ZmZlckNvdW50ID49IChfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlckNvdW50KTtcCisJQVNTRVJUKCEoKF9TZ2wpLT5TdGF0ZSAmIFNYR19CVUZGRVJfRlJFRSkpOwlcCisJKF9TZ2wpLT5TdGF0ZSA9IFNYR19CVUZGRVJfRlJFRTsJCVwKKwlJbnNlcnRUYWlsTGlzdCgmKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVycywgJihfU2dsKS0+RnJlZUxpc3QpOwlcCisJc3Bpbl91bmxvY2soJihfcEFkYXB0KS0+U2dsUUxvY2spOwkJXAorfQorCisvLyBHZXQgYW4gU0dMIGJ1ZmZlciBmcm9tIHRoZSBmcmVlIHF1ZXVlLiAgVGhlIGZpcnN0IHBhcnQgb2YgdGhpcyBtYWNybworLy8gYXR0ZW1wdHMgdG8ga2VlcCBhaGVhZCBvZiBidWZmZXIgZGVwbGV0aW9uIGJ5IGFsbG9jYXRpbmcgbW9yZSB3aGVuCisvLyB3ZSBoaXQgYSBtaW5pbXVtIHRocmVzaG9sZC4gIE5vdGUgdGhhdCB3ZSBkb24ndCBncmFiIHRoZSBsb2NrCisvLyB1bnRpbCBhZnRlciB0aGF0LiAgV2UncmUgZGVhbGluZyB3aXRoIHJvdW5kIG51bWJlcnMgaGVyZSwgc28gd2UgZG9uJ3QgbmVlZCB0bywKKy8vIGFuZCBub3QgZ3JhYmJpbmcgaXQgYXZvaWRzIGEgcG9zc2libGUgZG91YmxlLXRyaXAuCisjZGVmaW5lIFNYR19HRVRfU0dMX0JVRkZFUihfcEFkYXB0LCBfU2dsKSB7CQkJCVwKKwlQTElTVF9FTlRSWSBfcGxlOwkJCQkJCVwKKwlpZiAoKF9wQWRhcHQtPkZyZWVTZ2xCdWZmZXJDb3VudCA8IFNYR19NSU5fU0dMX0JVRkZFUlMpICYmCVwKKwkgICAoX3BBZGFwdC0+QWxsU2dsQnVmZmVyQ291bnQgPCBTWEdfTUFYX1NHTF9CVUZGRVJTKSAmJglcCisJICAgKF9wQWRhcHQtPkFsbG9jYXRpb25zUGVuZGluZyA9PSAwKSkgewkJCVwKKwkJc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkoX3BBZGFwdCwJCQlcCisJCQkoc2l6ZW9mKFNYR19TQ0FUVEVSX0dBVEhFUikgKyBTWEdfU0dMX0JVRl9TSVpFKSxcCisJCQlTWEdfQlVGRkVSX1RZUEVfU0dMKTsJCQkJXAorCX0JCQkJCQkJCVwKKwlfU2dsID0gTlVMTDsJCQkJCQkJXAorCXNwaW5fbG9jaygmKF9wQWRhcHQpLT5TZ2xRTG9jayk7CQkJCVwKKwlpZigoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJDb3VudCkgewkJCQlcCisJCUFTU0VSVCghKElzTGlzdEVtcHR5KCYoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJzKSkpOwlcCisJCV9wbGUgPSBSZW1vdmVIZWFkTGlzdCgmKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVycyk7CVwKKwkJKF9TZ2wpID0gY29udGFpbmVyX29mKF9wbGUsIFNYR19TQ0FUVEVSX0dBVEhFUiwgRnJlZUxpc3QpOyBcCisgICAgICAgICAgICAoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJDb3VudC0tOwkJCQlcCisJCUFTU0VSVCgoX1NnbCktPlN0YXRlID09IFNYR19CVUZGRVJfRlJFRSk7CQlcCisJCShfU2dsKS0+U3RhdGUgPSBTWEdfQlVGRkVSX0JVU1k7CQkJXAorCQkoX1NnbCktPnBTZ2wgPSBOVUxMOwkJCQkJXAorCX0JCQkJCQkJCVwKKwlzcGluX3VubG9jaygmKF9wQWRhcHQpLT5TZ2xRTG9jayk7CQkJCVwKK30KKworLy8KKy8vIFNYR19NVUxUSUNBU1RfQUREUkVTUworLy8KKy8vIExpbmtlZCBsaXN0IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMuCit0eXBlZGVmIHN0cnVjdCBfU1hHX01VTFRJQ0FTVF9BRERSRVNTIHsKKwl1bnNpZ25lZCBjaGFyCQkJCQkJCUFkZHJlc3NbNl07CisJc3RydWN0IF9TWEdfTVVMVElDQVNUX0FERFJFU1MJKk5leHQ7Cit9IFNYR19NVUxUSUNBU1RfQUREUkVTUywgKlBTWEdfTVVMVElDQVNUX0FERFJFU1M7CisKKy8vIFN0cnVjdHVyZSB0byBtYWludGFpbiBjaGltbmV5IHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVyIHF1ZXVlcy4KKy8vIFRoaXMgc3RydWN0dXJlIG1haW50YWlucyBORVRfQlVGRkVSX0xJU1QgcXVldWVzIHRoYXQgYXJlCisvLyBnaXZlbiB0byB1cyB2aWEgdGhlIENoaW1uZXkgTWluaXBvcnRUY3BPZmZsb2FkU2VuZCBhbmQKKy8vIE1pbmlwb3J0VGNwT2ZmbG9hZFJlY2VpdmUgcm91dGluZXMuICBUaGlzIHN0cnVjdHVyZSBET0VTIE5PVAorLy8gbWFuYWdlIG91ciBkYXRhIGJ1ZmZlciBxdWV1ZQordHlwZWRlZiBzdHJ1Y3QgX1NYR19CVUZGRVJfUVVFVUUgeworCXUzMgkJCQkJCVR5cGU7CQkJLy8gU2xvdyBvciBmYXN0IC0gU2VlIGJlbG93CisJdTMyCQkJCQkJRGlyZWN0aW9uOwkJLy8gWG10IG9yIFJjdgorCXUzMgkJCQkJCUJ5dGVzOwkJCS8vIEJ5dGUgY291bnQKKwl1MzIgKiAgICAgICAgCQkJSGVhZDsJCQkvLyBTZW5kIHF1ZXVlIGhlYWQKKwl1MzIgKiAgICAgICAgCQkJVGFpbDsJCQkvLyBTZW5kIHF1ZXVlIHRhaWwKKy8vCVBORVRfQlVGRkVSX0xJU1QJCQlOZXh0TkJMOwkJLy8gU2hvcnQgY3V0IC0gbmV4dCBOQkwKKy8vCVBORVRfQlVGRkVSCQkJCQlOZXh0TkI7CQkJLy8gU2hvcnQgY3V0IC0gbmV4dCBOQgorfSBTWEdfQlVGRkVSX1FVRVVFLCAqUFNYR19CVUZGRVJfUVVFVUU7CisKKyNkZWZpbmUJCVNYR19TTE9XX1NFTkRfQlVGRkVSCTAKKyNkZWZpbmUJCVNYR19GQVNUX1NFTkRfQlVGRkVSCTEKKyNkZWZpbmUgCVNYR19SRUNFSVZFX0JVRkZFUgkJMgorCisjZGVmaW5lIFNYR19JTklUX0JVRkZFUihfQnVmZmVyLCBfVHlwZSkgeyAJCQkJCQlcCisJKF9CdWZmZXIpLT5UeXBlID0gKF9UeXBlKTsJCQkJCQkJCQlcCisJaWYoKF9UeXBlKSA9PSBTWEdfUkVDRUlWRV9CVUZGRVIpIHsJCQkJCQkJXAorCQkoX0J1ZmZlciktPkRpcmVjdGlvbiA9IDA7CQkJCQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJCQkJCQkJXAorCQkoX0J1ZmZlciktPkRpcmVjdGlvbiA9IE5ESVNfU0dfTElTVF9XUklURV9UT19ERVZJQ0U7CVwKKwl9CQkJCQkJCQkJCQkJCQkJXAorCShfQnVmZmVyKS0+Qnl0ZXMgPSAwOwkJCQkJCQkJCQlcCisJKF9CdWZmZXIpLT5IZWFkID0gTlVMTDsJCQkJCQkJCQkJXAorCShfQnVmZmVyKS0+VGFpbCA9IE5VTEw7CQkJCQkJCQkJCVwKK30KKworCisjZGVmaW5lIFNYR19SU1NfQ1BVX0NPVU5UKF9wQWRhcHQpIAkJCQkJCQkJXAorCSgoX3BBZGFwdCktPlJzc0VuYWJsZWQgCT8gIE5SX0NQVVMgOiAxKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRFJJVkVSIGFuZCBBREFQVEVSIHN0cnVjdHVyZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBBZGFwdGVyIHN0YXRlcyAtIFRoZXNlIHN0YXRlcyBjbG9zZWx5IG1hdGNoIHRoZSBhZGFwdGVyIHN0YXRlcworLy8gZG9jdW1lbnRlZCBpbiB0aGUgRERLICh3aXRoIGEgZmV3IGV4Y2VwdGlvbnMpLgordHlwZWRlZiBlbnVtIF9TWEdfU1RBVEUgeworCVNYR19TVEFURV9JTklUSUFMSVpJTkcsCQkJLy8gSW5pdGlhbGl6aW5nCisJU1hHX1NUQVRFX0JPT1RESUFHLAkJCQkvLyBCb290LURpYWdub3N0aWMgbW9kZQorCVNYR19TVEFURV9QQVVTSU5HLAkJCQkvLyBQYXVzaW5nCisJU1hHX1NUQVRFX1BBVVNFRCwJCQkJLy8gUGF1c2VkCisJU1hHX1NUQVRFX1JVTk5JTkcsCQkJCS8vIFJ1bm5pbmcKKwlTWEdfU1RBVEVfUkVTRVRUSU5HLAkJCS8vIFJlc2V0IGluIHByb2dyZXNzCisJU1hHX1NUQVRFX1NMRUVQLAkJCQkvLyBTbGVlcGluZworCVNYR19TVEFURV9ESUFHLAkJCQkJLy8gRGlhZ25vc3RpYyBtb2RlCisJU1hHX1NUQVRFX0hBTFRJTkcsCQkJCS8vIEhhbHRpbmcKKwlTWEdfU1RBVEVfSEFMVEVELAkJCQkvLyBEb3duIG9yIG5vdC1pbml0aWFsaXplZAorCVNYR19TVEFURV9TSFVURE9XTgkJCQkvLyBzaHV0ZG93bgorfSBTWEdfU1RBVEUsICpQU1hHX1NUQVRFOworCisvLyBMaW5rIHN0YXRlCit0eXBlZGVmIGVudW0gX1NYR19MSU5LX1NUQVRFIHsKKwlTWEdfTElOS19ET1dOLAorCVNYR19MSU5LX1VQCit9IFNYR19MSU5LX1NUQVRFLCAqUFNYR19MSU5LX1NUQVRFOworCisvLyBMaW5rIGluaXRpYWxpemF0aW9uIHRpbWVvdXQgaW4gMTAwdXMgdW5pdHMKKyNkZWZpbmUgU1hHX0xJTktfVElNRU9VVAkxMDAwMDAJCS8vIDEwIFNlY29uZHMgLSBSRURVQ0UhCisKKworLy8gTWljcm9jb2RlIGZpbGUgc2VsZWN0aW9uIGNvZGVzCit0eXBlZGVmIGVudW0gX1NYR19VQ09ERV9TRUwgeworCVNYR19VQ09ERV9TQUhBUkEsCQkJCS8vIFNhaGFyYSB1Y29kZQorCVNYR19VQ09ERV9TRElBR0NQVSwJCQkJLy8gU2FoYXJhIENQVSBkaWFnbm9zdGljIHVjb2RlCisJU1hHX1VDT0RFX1NESUFHU1lTCQkJCS8vIFNhaGFyYSBzeXN0ZW0gZGlhZ25vc3RpYyB1Y29kZQorfSBTWEdfVUNPREVfU0VMOworCisKKyNkZWZpbmUgU1hHX0RJU0FCTEVfQUxMX0lOVEVSUlVQVFMoX3BhZGFwdCkgc3hnX2Rpc2FibGVfaW50ZXJydXB0KF9wYWRhcHQpCisjZGVmaW5lIFNYR19FTkFCTEVfQUxMX0lOVEVSUlVQVFMoX3BhZGFwdCkgc3hnX2VuYWJsZV9pbnRlcnJ1cHQoX3BhZGFwdCkKKworLy8gVGhpcyBwcm9iYWJseSBsaXZlcyBpbiBhIHByb3RvLmggZmlsZS4gIE1vdmUgbGF0ZXIKKyNkZWZpbmUgU1hHX01VTFRJQ0FTVF9QQUNLRVQoX3BldGhlcikgKChfcGV0aGVyKS0+ZXRoZXJfZGhvc3RbMF0gJiAweDAxKQorI2RlZmluZSBTWEdfQlJPQURDQVNUX1BBQ0tFVChfcGV0aGVyKSAoKCoodTMyICopKF9wZXRoZXIpLT5ldGhlcl9kaG9zdCA9PSAweEZGRkZGRkZGKSAmJiBcCisJCQkJKCoodTE2ICopJihfcGV0aGVyKS0+ZXRoZXJfZGhvc3RbNF0gPT0gMHhGRkZGKSkKKworLy8gRm9yIERiZ1ByaW50cworI2RlZmluZSBTWEdfSUQgICAgICBEUEZMVFJfSUhWTkVUV09SS19JRAorI2RlZmluZSBTWEdfRVJST1IgICBEUEZMVFJfRVJST1JfTEVWRUwKKworLy8KKy8vIFNYR19EUklWRVIgc3RydWN0dXJlIC0KKy8vCisvLyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3hnIGRyaXZlci4gIFRoZXJlIGlzIG9ubHkKKy8vIG9uZSBvZiB0aGVzZSwgYW5kIGl0IGlzIGRlZmluZWQgYXMgYSBnbG9iYWwuCit0eXBlZGVmIHN0cnVjdCBfU1hHX0RSSVZFUiB7CisJc3RydWN0IF9hZGFwdGVyX3QJKkFkYXB0ZXJzOwkJLy8gTGlua2VkIGxpc3Qgb2YgYWRhcHRlcnMKKwl1c2hvcnQJCQkJQWRhcHRlcklEOwkJLy8gTWFpbnRhaW4gdW5pcXVlIGFkYXB0ZXIgSUQKK30gU1hHX0RSSVZFUiwgKlBTWEdfRFJJVkVSOworCisjaWZkZWYgU1RBVFVTX1NVQ0NFU1MKKyN1bmRlZiBTVEFUVVNfU1VDQ0VTUworI2VuZGlmCisKKyNkZWZpbmUgU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1RBVFVTX1BFTkRJTkcgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgICAgLTEKKyNkZWZpbmUgU1RBVFVTX0VSUk9SICAgICAgICAgICAgICAgLTIKKyNkZWZpbmUgU1RBVFVTX05PVF9TVVBQT1JURUQgICAgICAgLTMKKyNkZWZpbmUgU1RBVFVTX0JVRkZFUl9UT09fU0hPUlQgICAgLTQKKyNkZWZpbmUgU1RBVFVTX1JFU09VUkNFUyAgICAgICAgICAgLTUKKworI2RlZmluZSBTTElDX01BWF9DQVJEUyAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgU0xJQ19NQVhfUE9SVFMgICAgICAgICAgICAgIDQgICAgICAgIC8qIE1heCAjIG9mIHBvcnRzIHBlciBjYXJkICAgKi8KKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorLy8gRHVtcCBidWZmZXIgc2l6ZQorLy8KKy8vIFRoaXMgY2Fubm90IGJlIGJpZ2dlciB0aGFuIHRoZSBtYXggRE1BIHNpemUgdGhlIGNhcmQgc3VwcG9ydHMsCisvLyBnaXZlbiB0aGUgY3VycmVudCBjb2RlIHN0cnVjdHVyZSBpbiB0aGUgaG9zdCBhbmQgdWNvZGUuCisvLyBNb2phdmUgc3VwcG9ydHMgMTZLLCBPYXNpcyBzdXBwb3J0cyAxNkstMSwgc28KKy8vIGp1c3Qgc2V0IHRoaXMgYXQgMTVLLCBzaG91bGRudCBtYWtlIHRoYXQgbXVjaCBvZiBhIGRpZmYuCisjZGVmaW5lIERVTVBfQlVGX1NJWkUgICAgICAgICAgICAgICAweDNDMDAKKyNlbmRpZgorCisjZGVmaW5lIE1JTihhLCBiKSAoKHUzMikoYSkgPCAodTMyKShiKSA/IChhKSA6IChiKSkKKyNkZWZpbmUgTUFYKGEsIGIpICgodTMyKShhKSA+ICh1MzIpKGIpID8gKGEpIDogKGIpKQorCit0eXBlZGVmIHN0cnVjdCBfbWNhc3RfYWRkcmVzc190Cit7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NbNl07CisgICAgc3RydWN0IF9tY2FzdF9hZGRyZXNzX3QgICAqbmV4dDsKK30gIG1jYXN0X2FkZHJlc3NfdCwgKnBfbWNhc3RfYWRkcmVzc190OworCisjZGVmaW5lIENBUkRfRE9XTiAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBDQVJEX1VQICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0FSRF9GQUlMICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENBUkRfRElBRyAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBDQVJEX1NMRUVQICAgICAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBBREFQVF9ET1dOICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQURBUFRfVVAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFEQVBUX0ZBSUwgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBREFQVF9SRVNFVCAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgQURBUFRfU0xFRVAgICAgICAgICAgICAweDA0CisKKyNkZWZpbmUgQURBUFRfRkxBR1NfQk9PVFRJTUUgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgQURBUFRfRkxBR1NfSVM2NEJJVCAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgQURBUFRfRkxBR1NfUEVORElOR0xJTktET1dOICAgICAweDAwMDQKKyNkZWZpbmUgQURBUFRfRkxBR1NfRklCRVJNRURJQSAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQURBUFRfRkxBR1NfTE9DS1NfQUxMT0NFRCAgICAgICAweDAwMTAKKyNkZWZpbmUgQURBUFRfRkxBR1NfSU5UX1JFR0lTVEVSRUQgICAgICAweDAwMjAKKyNkZWZpbmUgQURBUFRfRkxBR1NfTE9BRF9USU1FUl9TRVQgICAgICAweDAwNDAKKyNkZWZpbmUgQURBUFRfRkxBR1NfU1RBVFNfVElNRVJfU0VUICAgICAweDAwODAKKyNkZWZpbmUgQURBUFRfRkxBR1NfUkVTRVRfVElNRVJfU0VUICAgICAweDAxMDAKKworI2RlZmluZSBMSU5LX0RPV04gICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTElOS19DT05GSUcgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTktfVVAgICAgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIExJTktfMTBNQiAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBMSU5LXzEwME1CICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTElOS19BVVRPU1BFRUQgICAgICAgICAweDAyCisjZGVmaW5lIExJTktfMTAwME1CICAgICAgICAgICAgMHgwMworI2RlZmluZSBMSU5LXzEwMDAwTUIgICAgICAgICAgIDB4MDQKKworI2RlZmluZSBMSU5LX0hBTEZEICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTElOS19GVUxMRCAgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTktfQVVUT0QgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIE1BQ19ESVJFQ1RFRCAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNQUNfQkNBU1QgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTUFDX01DQVNUICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1BQ19QUk9NSVNDICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNQUNfTE9PUEJBQ0sgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTUFDX0FMTE1DQVNUICAgICAweDAwMDAwMDIwCisKKyNkZWZpbmUgU0xJQ19EVVBMRVgoeCkgICAgKCh4PT1MSU5LX0ZVTExEKSA/ICJGRFgiIDogIkhEWCIpCisjZGVmaW5lIFNMSUNfU1BFRUQoeCkgICAgICgoeD09TElOS18xMDBNQikgPyAiMTAwTWIiIDogKCh4PT1MSU5LXzEwMDBNQikgPyAiMTAwME1iIiA6ICIgMTBNYiIpKQorI2RlZmluZSBTTElDX0xJTktTVEFURSh4KSAoKHg9PUxJTktfRE9XTikgPyAiRG93biIgOiAiVXAgICIpCisjZGVmaW5lIFNMSUNfQURBUFRFUl9TVEFURSh4KSAoKHg9PUFEQVBUX1VQKSA/ICJVUCIgOiAiRG93biIpCisjZGVmaW5lIFNMSUNfQ0FSRF9TVEFURSh4KSAgICAoKHg9PUNBUkRfVVApID8gIlVQIiA6ICJEb3duIikKKworCit0eXBlZGVmIHN0cnVjdCBfZXRoZXJfaGVhZGVyCit7CisgICAgdW5zaWduZWQgY2hhciAgICBldGhlcl9kaG9zdFs2XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgIGV0aGVyX3Nob3N0WzZdOworICAgIHVzaG9ydCAgIGV0aGVyX3R5cGU7Cit9IGV0aGVyX2hlYWRlciwgKnBfZXRoZXJfaGVhZGVyOworCisKKyNkZWZpbmUgTlVNX0NGR19TUEFDRVMgICAgICAyCisjZGVmaW5lIE5VTV9DRkdfUkVHUyAgICAgICAgNjQKKwordHlwZWRlZiBzdHJ1Y3QgX3BoeXNjYXJkX3QKK3sKKyAgICBzdHJ1Y3QgX2FkYXB0ZXJfdCAgKmFkYXB0ZXJbU0xJQ19NQVhfUE9SVFNdOworICAgIHN0cnVjdCBfcGh5c2NhcmRfdCAqbmV4dDsKKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgYWRhcHRlcnNfYWxsb2NkOworfSBwaHlzY2FyZF90LCAqcF9waHlzY2FyZF90OworCit0eXBlZGVmIHN0cnVjdCBfc3hnYmFzZV9kcml2ZXIKK3sKKwlzcGlubG9ja190CWRyaXZlcl9sb2NrOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CS8qIGlycXNhdmUgZm9yIHNwaW5sb2NrICovCisJdTMyCQludW1fc3hnX2NhcmRzOworCXUzMgkJbnVtX3N4Z19wb3J0czsKKwl1MzIJCW51bV9zeGdfcG9ydHNfYWN0aXZlOworCXUzMgkJZHluYW1pY19pbnRhZ2c7CisJcF9waHlzY2FyZF90CXBoeXNfY2FyZDsKK30gc3hnYmFzZV9kcml2ZXJfdDsKKworCit0eXBlZGVmIHN0cnVjdCBfYWRhcHRlcl90Cit7CisJdm9pZCAqICAgICAgICAgICAgICAgaWZwOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBwb3J0OworCXBfcGh5c2NhcmRfdCAgICAgICAgcGh5c2NhcmQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIHBoeXNwb3J0OworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBjYXJkaW5kZXg7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGNhcmRfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgY2hpcGlkOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBidXNudW1iZXI7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIHNsb3RudW1iZXI7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGZ1bmN0aW9ubnVtYmVyOworCXVzaG9ydCAgICAgICAgICAgICAgdmVuZGlkOworCXVzaG9ydCAgICAgICAgICAgICAgZGV2aWQ7CisJdXNob3J0ICAgICAgICAgICAgICBzdWJzeXNpZDsKKwl1MzIgICAgICAgICAgICAgaXJxOworCisJdm9pZCAqICAgICAgICAgICAgICAgc3hnX2FkYXB0ZXI7CisJdTMyICAgICAgICAgICAgIG5CdXN5U2VuZDsKKworCXZvaWQgX19pb21lbSAqCWJhc2VfYWRkcjsKKwl1MzIgICAgICAgICAgICAgbWVtb3J5bGVuZ3RoOworCXUzMiAgICAgICAgICAgICBkcmFtYmFzZTsKKwl1MzIgICAgICAgICAgICAgZHJhbWxlbmd0aDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgcXVldWVzX2luaXRpYWxpemVkOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBhbGxvY2F0ZWQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGFjdGl2YXRlZDsKKwl1MzIgICAgICAgICAgICAgaW50cnJlZ2lzdGVyZWQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGlzcF9pbml0aWFsaXplZDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgZ2VubnVtYmVyOworCXUzMiAgICAgICAgICAgICBjdXJhZGRydXBwZXI7CisJdTMyICAgICAgICAgICAgIGlzcmNvcHk7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIHN0YXRlOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBsaW5rc3RhdGU7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGxpbmtzcGVlZDsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbGlua2R1cGxleDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgZmxhZ3M7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIG1hY2FkZHJbNl07CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGN1cnJtYWNhZGRyWzZdOworCXUzMiAgICAgICAgICAgICBtYWNvcHRzOworCXVzaG9ydCAgICAgICAgICAgICAgZGV2ZmxhZ3NfcHJldjsKKwl1NjQgICAgICAgICAgICAgbWNhc3RtYXNrOworCXBfbWNhc3RfYWRkcmVzc190ICAgbWNhc3RhZGRyczsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAgIHBpbmd0aW1lcjsKKwl1MzIgICAgICAgICAgICAgcGluZ3RpbWVyc2V0OworCXN0cnVjdCB0aW1lcl9saXN0ICAgc3RhdHN0aW1lcjsKKwl1MzIgICAgICAgICAgICAgc3RhdHN0aW1lcnNldDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAgIHZwY2lfdGltZXI7CisJdTMyICAgICAgICAgICAgIHZwY2lfdGltZXJzZXQ7CisJc3RydWN0IHRpbWVyX2xpc3QgICBsb2FkdGltZXI7CisJdTMyICAgICAgICAgICAgIGxvYWR0aW1lcnNldDsKKworCXUzMiAgICAgICAgICAgICB4bWl0cV9mdWxsOworCXUzMiAgICAgICAgICAgICBhbGxfcmVnX3dyaXRlczsKKwl1MzIgICAgICAgICAgICAgaWNyX3JlZ193cml0ZXM7CisJdTMyICAgICAgICAgICAgIGlzcl9yZWdfd3JpdGVzOworCXUzMiAgICAgICAgICAgICBlcnJvcl9pbnRlcnJ1cHRzOworCXUzMiAgICAgICAgICAgICBlcnJvcl9ybWlzc19pbnRlcnJ1cHRzOworCXUzMiAgICAgICAgICAgICByeF9lcnJvcnM7CisJdTMyICAgICAgICAgICAgIHJjdl9kcm9wczsKKwl1MzIgICAgICAgICAgICAgcmN2X2ludGVycnVwdHM7CisJdTMyICAgICAgICAgICAgIHhtaXRfaW50ZXJydXB0czsKKwl1MzIgICAgICAgICAgICAgbGlua2V2ZW50X2ludGVycnVwdHM7CisJdTMyICAgICAgICAgICAgIHVwcl9pbnRlcnJ1cHRzOworCXUzMiAgICAgICAgICAgICBudW1faXNyczsKKwl1MzIgICAgICAgICAgICAgZmFsc2VfaW50ZXJydXB0czsKKwl1MzIgICAgICAgICAgICAgdHhfcGFja2V0czsKKwl1MzIgICAgICAgICAgICAgeG1pdF9jb21wbGV0ZXM7CisJdTMyICAgICAgICAgICAgIHR4X2Ryb3BzOworCXUzMiAgICAgICAgICAgICByY3ZfYnJvYWRjYXN0czsKKwl1MzIgICAgICAgICAgICAgcmN2X211bHRpY2FzdHM7CisJdTMyICAgICAgICAgICAgIHJjdl91bmljYXN0czsKKwl1MzIgICAgICAgICAgICAgbWF4X2lzcl9yY3ZzOworCXUzMiAgICAgICAgICAgICBtYXhfaXNyX3htaXRzOworCXUzMiAgICAgICAgICAgICByY3ZfaW50ZXJydXB0X3lpZWxkczsKKwl1MzIgICAgICAgICAgICAgaW50YWdnX3BlcmlvZDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwl1MzIgKgkJCQkJTWluaXBvcnRIYW5kbGU7CQkvLyBPdXIgbWluaXBvcnQgaGFuZGxlCisJU1hHX1NUQVRFCQkJCQlTdGF0ZTsJCQkJLy8gQWRhcHRlciBzdGF0ZQorCVNYR19MSU5LX1NUQVRFCQkJCUxpbmtTdGF0ZTsJCQkvLyBMaW5rIHN0YXRlCisJdTY0CQkJCQkJTGlua1NwZWVkOwkJCS8vIExpbmsgU3BlZWQKKwl1MzIJCQkJCQlQb3dlclN0YXRlOwkJCS8vIE5ESVMgcG93ZXIgc3RhdGUKKwlzdHJ1Y3QgX2FkYXB0ZXJfdCAgIAkJKk5leHQ7CQkJCS8vIExpbmtlZCBsaXN0CisJdXNob3J0CQkJCQkJQWRhcHRlcklEOwkJCS8vIDEuLm4KKwl1bnNpZ25lZCBjaGFyCQkJCQkJTWFjQWRkcls2XTsJCQkvLyBPdXIgcGVybWFuZW50IEhXIG1hYyBhZGRyZXNzCisJdW5zaWduZWQgY2hhcgkJCQkJCUN1cnJNYWNBZGRyWzZdOwkJLy8gT3VyIEN1cnJlbnQgbWFjIGFkZHJlc3MKKwlwX25ldF9kZXZpY2UgICAgICAgICAgICAgICAgbmV0ZGV2OworCXBfbmV0X2RldmljZSAgICAgICAgICAgICAgICBuZXh0X25ldGRldmljZTsKKwlzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAgICogcGNpZGV2OworCisJUFNYR19NVUxUSUNBU1RfQUREUkVTUwkJTXVsdGljYXN0QWRkcnM7CQkvLyBNdWx0aWNhc3QgbGlzdAorCXU2NCAgICAgCQkJCU11bHRpY2FzdE1hc2s7CQkvLyBNdWx0aWNhc3QgbWFzaworCXUzMiAqCQkJCQlJbnRlcnJ1cHRIYW5kbGU7CS8vIFJlZ2lzdGVyIEludGVycnVwdCBoYW5kbGUKKwl1MzIJCQkJCQlJbnRlcnJ1cHRMZXZlbDsJCS8vIEZyb20gUmVzb3VyY2UgbGlzdAorCXUzMgkJCQkJCUludGVycnVwdFZlY3RvcjsJLy8gRnJvbSBSZXNvdXJjZSBsaXN0CisJc3BpbmxvY2tfdAlBZGFwdGVyTG9jazsJLyogU2VyaWFsaXplIGFjY2VzcyBhZGFwdGVyIHJvdXRpbmVzICovCisJc3BpbmxvY2tfdAlCaXQ2NFJlZ0xvY2s7CS8qIEZvciB3cml0aW5nIDY0LWJpdCBhZGRyZXNzZXMgKi8KKwlQU1hHX0hXX1JFR1MJCQkJSHdSZWdzOwkJCQkvLyBTYWhhcmEgSFcgUmVnaXN0ZXIgTWVtb3J5IChCQVIwLzEpCisJUFNYR19VQ09ERV9SRUdTCQkJCVVjb2RlUmVnczsJCQkvLyBNaWNyb2NvZGUgUmVnaXN0ZXIgTWVtb3J5IChCQVIyLzMpCisJUFNYR19UQ0JfUkVHUwkJCQlUY2JSZWdzOwkJCS8vIFNhbWUgYXMgVWNvZGUgcmVncyAtIFNlZSBzeGdody5oCisJdXNob3J0CQkJCQkJUmVzZXREcGNDb3VudDsJCS8vIEZvciB0aW1lb3V0CisJdXNob3J0CQkJCQkJUnNzRHBjQ291bnQ7CQkvLyBGb3IgdGltZW91dAorCXVzaG9ydAkJCQkJCVZlbmRvcklEOwkJCS8vIFZlbmRvciBJRAorCXVzaG9ydAkJCQkJCURldmljZUlEOwkJCS8vIERldmljZSBJRAorCXVzaG9ydAkJCQkJCVN1YlN5c3RlbUlEOwkJLy8gU3ViLVN5c3RlbSBJRAorCXVzaG9ydAkJCQkJCUZyYW1lU2l6ZTsJCQkvLyBNYXhpbXVtIGZyYW1lIHNpemUKKwl1MzIgKgkJCQkJRG1hSGFuZGxlOwkJCS8vIE5ESVMgRE1BIGhhbmRsZQorCXUzMiAqCQkJCQlQYWNrZXRQb29sSGFuZGxlOwkvLyBVc2VkIHdpdGggTkRJUyA1LjIgb25seS4gIERvbid0IGlmZGVmIG91dAorCXUzMiAqCQkJCQlCdWZmZXJQb29sSGFuZGxlOwkvLyBVc2VkIHdpdGggTkRJUyA1LjIgb25seS4gIERvbid0IGlmZGVmIG91dAorCXUzMgkJCQkJCU1hY0ZpbHRlcjsJCQkvLyBORElTIE1BQyBGaWx0ZXIKKwl1c2hvcnQJCQkJCQlJcElkOwkJCQkvLyBGb3Igc2xvd3BhdGgKKwlQU1hHX0VWRU5UX1JJTkcJCQkJRXZlbnRSaW5nczsJCQkvLyBIb3N0IGV2ZW50IHJpbmdzLiAgMS9DUFUgdG8gMTYgbWF4CisJZG1hX2FkZHJfdCAgICAgICAgICAgICAgCVBFdmVudFJpbmdzOwkJLy8gUGh5c2ljYWwgYWRkcmVzcworCXUzMgkJCQkJCU5leHRFdmVudFtTWEdfTUFYX1JTU107CS8vIEN1cnJlbnQgbG9jYXRpb24gaW4gcmluZworCWRtYV9hZGRyX3QgICAgICAgICAgCQlQVGNiQnVmZmVyczsJCS8vIFRDQiBCdWZmZXJzIC0gcGh5c2ljYWwgYWRkcmVzcworCWRtYV9hZGRyX3QJICAgICAgICAgICAgCVBUY2JDb21wQnVmZmVyczsJLy8gVENCIENvbXBvc2l0ZSBCdWZmZXJzIC0gcGh5cyBhZGRyCisJUFNYR19YTVRfUklORwkJCQlYbXRSaW5nczsJCQkvLyBUcmFuc21pdCByaW5ncworCWRtYV9hZGRyX3QJCSAgICAgICAgICAgIFBYbXRSaW5nczsJCQkvLyBUcmFuc21pdCByaW5ncyAtIHBoeXNpY2FsIGFkZHJlc3MKKwlTWEdfUklOR19JTkZPCQkJCVhtdFJpbmdaZXJvSW5mbzsJLy8gVHJhbnNtaXQgcmluZyAwIGluZm8KKwlzcGlubG9ja190CVhtdFplcm9Mb2NrOwkvKiBUcmFuc21pdCByaW5nIDAgbG9jayAqLworCXUzMiAqCQkJCQlYbXRSaW5nWmVyb0luZGV4OwkvLyBTaGFyZWQgWE1UIHJpbmcgMCBpbmRleAorCWRtYV9hZGRyX3QgICAgICAgICAgCQlQWG10UmluZ1plcm9JbmRleDsJLy8gU2hhcmVkIFhNVCByaW5nIDAgaW5kZXggLSBwaHlzaWNhbAorCUxJU1RfRU5UUlkJCQkJCUZyZWVQcm90b2NvbEhlYWRlcnM7Ly8gRnJlZSBwcm90b2NvbCBoZWFkZXJzCisJdTMyCQkJCQkJRnJlZVByb3RvSGRyQ291bnQ7CS8vIENvdW50CisJdm9pZCAqCQkJCQkJUHJvdG9jb2xIZWFkZXJzOwkvLyBCbG9jayBvZiBwcm90b2NvbCBoZWFkZXIKKwlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQUHJvdG9jb2xIZWFkZXJzOwkvLyBCbG9jayBvZiBwcm90b2NvbCBoZWFkZXJzIC0gcGh5cworCisJUFNYR19SQ1ZfUklORwkJCQlSY3ZSaW5nczsJCQkvLyBSZWNlaXZlIHJpbmdzCisJZG1hX2FkZHJfdAkgICAgICAgICAgICAJUFJjdlJpbmdzOwkJCS8vIFJlY2VpdmUgcmluZ3MgLSBwaHlzaWNhbCBhZGRyZXNzCisJU1hHX1JJTkdfSU5GTwkJCQlSY3ZSaW5nWmVyb0luZm87CS8vIFJlY2VpdmUgcmluZyAwIGluZm8KKworCXUzMiAqCQkJCQlJc3I7CQkJCS8vIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIKKwlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQSXNyOwkJCQkvLyBJU1IgLSBwaHlzaWNhbCBhZGRyZXNzCisJdTMyCQkJCQkJSXNyQ29weVtTWEdfTUFYX1JTU107CS8vIENvcHkgb2YgSVNSCisJdXNob3J0CQkJCQkJSW50ZXJydXB0c0VuYWJsZWQ7CS8vIEJpdG1hc2sgb2YgZW5hYmxlZCB2ZWN0b3JzCisJdW5zaWduZWQgY2hhciAqCQkJCQkJSW5kaXJlY3Rpb25UYWJsZTsJLy8gUlNTIGluZGlyZWN0aW9uIHRhYmxlCisJZG1hX2FkZHJfdAkgICAgICAgICAgICAJUEluZGlyZWN0aW9uVGFibGU7CS8vIFBoeXNpY2FsIGFkZHJlc3MKKwl1c2hvcnQJCQkJCQlSc3NUYWJsZVNpemU7CQkvLyBGcm9tIE5ESVNfUkVDRUlWRV9TQ0FMRV9QQVJBTUVURVJTCisJdXNob3J0CQkJCQkJSGFzaEtleVNpemU7CQkvLyBGcm9tIE5ESVNfUkVDRUlWRV9TQ0FMRV9QQVJBTUVURVJTCisJdW5zaWduZWQgY2hhcgkJCQkJCUhhc2hTZWNyZXRLZXlbNDBdOwkvLyByc3Mga2V5CisJdTMyCQkJCQkJSGFzaEluZm9ybWF0aW9uOworCS8vIFJlY2VpdmUgYnVmZmVyIHF1ZXVlcworCXNwaW5sb2NrX3QJUmN2UUxvY2s7CS8qIFJlY2VpdmUgUXVldWUgTG9jayAqLworCUxJU1RfRU5UUlkJCQkJCUZyZWVSY3ZCdWZmZXJzOwkJLy8gRnJlZSBTWEdfREFUQV9CVUZGRVIgcXVldWUKKwlMSVNUX0VOVFJZCQkJCQlGcmVlUmN2QmxvY2tzOwkJLy8gRnJlZSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgUQorCUxJU1RfRU5UUlkJCQkJCUFsbFJjdkJsb2NrczsJCS8vIEFsbCBTWEdfUkNWX0JMT0NLcworCXVzaG9ydAkJCQkJCUZyZWVSY3ZCdWZmZXJDb3VudDsJLy8gTnVtYmVyIG9mIGZyZWUgcmN2IGRhdGEgYnVmZmVycworCXVzaG9ydAkJCQkJCUZyZWVSY3ZCbG9ja0NvdW50OwkvLyAjIG9mIGZyZWUgcmN2IGRlc2NyaXB0b3IgYmxvY2tzCisJdXNob3J0CQkJCQkJQWxsUmN2QmxvY2tDb3VudDsJLy8gTnVtYmVyIG9mIHRvdGFsIHJlY2VpdmUgYmxvY2tzCisJdXNob3J0CQkJCQkJUmVjZWl2ZUJ1ZmZlclNpemU7CS8vIFNYR19SQ1ZfREFUQS9KVU1CT19CVUZGRVJfU0laRSBvbmx5CisJdTMyCQkJCQkJQWxsb2NhdGlvbnNQZW5kaW5nOwkvLyBSZWNlaXZlIGFsbG9jYXRpb24gcGVuZGluZworCXUzMgkJCQkJCVJjdkJ1ZmZlcnNPbkNhcmQ7CS8vIFNYR19EQVRBX0JVRkZFUlMgb3duZWQgYnkgY2FyZAorCS8vIFNHTCBidWZmZXJzCisJc3BpbmxvY2tfdAlTZ2xRTG9jazsJLyogU0dMIFF1ZXVlIExvY2sgKi8KKwlMSVNUX0VOVFJZCQkJCQlGcmVlU2dsQnVmZmVyczsJCS8vIEZyZWUgU1hHX1NDQVRURVJfR0FUSEVSCisJTElTVF9FTlRSWQkJCQkJQWxsU2dsQnVmZmVyczsJCS8vIEFsbCBTWEdfU0NBVFRFUl9HQVRIRVIKKwl1c2hvcnQJCQkJCQlGcmVlU2dsQnVmZmVyQ291bnQ7CS8vIE51bWJlciBvZiBmcmVlIFNHTCBidWZmZXJzCisJdXNob3J0CQkJCQkJQWxsU2dsQnVmZmVyQ291bnQ7CS8vIE51bWJlciBvZiB0b3RhbCBTR0wgYnVmZmVycworCXUzMgkJCQkJCUN1cnJlbnRUaW1lOwkJLy8gVGljayBjb3VudAorCXUzMgkJCQkJCUZhc3RwYXRoQ29ubmVjdGlvbnM7Ly8gIyBvZiBmYXN0cGF0aCBjb25uZWN0aW9ucworCS8vIFZhcmlvdXMgc2luZ2xlLWJpdCBmbGFnczoKKwl1MzIJCQkJCQlCYXNpY0FsbG9jYXRpb25zOjE7CS8vIExvY2tzIGFuZCBsaXN0aGVhZHMKKwl1MzIJCQkJCQlJbnRSZWdpc3RlcmVkOjE7CS8vIEludGVycnVwdCByZWdpc3RlcmVkCisJdTMyCQkJCQkJUGluZ091dHN0YW5kaW5nOjE7CS8vIFBpbmcgb3V0c3RhbmRpbmcgdG8gY2FyZAorCXUzMgkJCQkJCURlYWQ6MTsJCQkJLy8gQ2FyZCBkZWFkCisJdTMyCQkJCQkJRHVtcERyaXZlcjoxOwkJLy8gT0lEX1NMSUNfRFJJVkVSX0RVTVAgcmVxdWVzdAorCXUzMgkJCQkJCUR1bXBDYXJkOjE7CQkJLy8gT0lEX1NMSUNfQ0FSRF9EVU1QIHJlcXVlc3QKKwl1MzIJCQkJCQlEdW1wQ21kUnVubmluZzoxOwkvLyBEdW1wIGNvbW1hbmQgaW4gcHJvZ3Jlc3MKKwl1MzIJCQkJCQlEZWJ1Z1J1bm5pbmc6MTsJCS8vIEFHREIgZGVidWcgaW4gcHJvZ3Jlc3MKKwl1MzIJCQkJCQlKdW1ib0VuYWJsZWQ6MTsJCS8vIEp1bWJvIGZyYW1lcyBlbmFibGVkCisJdTMyCQkJCQkJTXNpRW5hYmxlZDoxOwkJLy8gTVNJIGludGVycnVwdCBlbmFibGVkCisJdTMyCQkJCQkJUnNzRW5hYmxlZDoxOwkJLy8gUlNTIEVuYWJsZWQKKwl1MzIJCQkJCQlGYWlsT25CYWRFZXByb206MTsJLy8gRmFpbCBvbiBCYWQgRWVwcm9tCisJdTMyCQkJCQkJRGlhZ1N0YXJ0OjE7CQkvLyBJbml0IGFkYXB0ZXIgZm9yIGRpYWdub3N0aWMgc3RhcnQKKwkvLyBTdGF0cworCXUzMgkJCQkJCVBlbmRpbmdSY3ZDb3VudDsJLy8gT3V0c3RhbmRpbmcgcmN2IGluZGljYXRpb25zCisJdTMyCQkJCQkJUGVuZGluZ1htdENvdW50OwkvLyBPdXRzdGFuZGluZyBzZW5kIHJlcXVlc3RzCisJU1hHX1NUQVRTCQkJCQlTdGF0czsJCQkJLy8gU3RhdGlzdGljcworCXUzMgkJCQkJCVJlYXNzQnVmczsJCQkvLyBOdW1iZXIgb2YgcmVhc3NlbWJseSBidWZmZXJzCisJLy8gQ2FyZCBDcmFzaCBJbmZvCisJdXNob3J0CQkJCQkJQ3Jhc2hMb2NhdGlvbjsJCS8vIE1pY3JvY29kZSBjcmFzaCBsb2NhdGlvbgorCXVuc2lnbmVkIGNoYXIJCQkJCQlDcmFzaENwdTsJCQkvLyBTYWhhcmEgQ1BVIElECisJLy8gRGlhZ25vc3RpY3MKKwkvLwlQRElBR19DTUQJCQkJCURpYWdDbWRzOwkJCS8vIExpc3Qgb2YgZnJlZSBkaWFnbm9zdGljIGNvbW1hbmRzCisJLy8JUERJQUdfQlVGRkVSCQkJCURpYWdCdWZmZXJzOwkJLy8gTGlzdCBvZiBmcmVlIGRpYWdub3N0aWMgYnVmZmVycworCS8vCVBESUFHX1JFUQkJCQkJRGlhZ1JlcVE7CQkJLy8gTGlzdCBvZiBvdXRzdGFuZGluZyAoYXN5bmNocm9ub3VzKSBkaWFnIHJlcXVlc3RzCisJLy8JdTMyCQkJCQkJRGlhZ0NtZFRpbWVvdXQ7CQkvLyBUaW1lIG91dCBmb3IgZGlhZyBjbWRzIChzZWNvbmRzKSBYWFhUT0RPIC0gcmVwbGFjZSB3aXRoIFNYR19QQVJBTSB2YXI/CisJLy8JdW5zaWduZWQgY2hhcgkJCQkJCURpYWdEbWFEZXNjW0RNQV9DUFVfQ1RYU107CQkvLyBGcmVlIERNQSBkZXNjcmlwdG9ycyBiaXQgZmllbGQgKDMyIENQVSBjdHggKiA4IERNQSBjdHgpCisKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkvLyBQdXQgcHJlcHJvY2Vzc29yLWNvbmRpdGlvbmFsIGZpZWxkcyBhdCB0aGUgZW5kIHNvIHdlIGRvbid0CisJLy8gaGF2ZSB0byByZWNvbXBpbGUgc3hnZGJnIGV2ZXJ5dGltZSB3ZSByZWNvbmZpZ3VyZSB0aGUgZHJpdmVyCisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJdm9pZCAqCQkJCQkJUGVuZGluZ1NldFJzczsJCS8vIFBlbmRpbmcgUlNTIHBhcmFtZXRlciBjaGFuZ2UKKwl1MzIJCQkJCQlJUHY0SGRyU2l6ZTsJCS8vIFNoYXJlZCA1LjIvNi4wIGVuY2FwIHBhcmFtCisJdW5zaWduZWQgY2hhciAqICAgICAgICAgIAkJCUludGVycnVwdEluZm87CQkvLyBBbGxvY2F0ZWQgYnkgdXMgZHVyaW5nIEFkZERldmljZQorI2lmIGRlZmluZWQoQ09ORklHX1g4NikKKwl1MzIJCQkJCQlBZGRyVXBwZXI7CQkJLy8gVXBwZXIgMzIgYml0cyBvZiA2NC1iaXQgcmVnaXN0ZXIKKyNlbmRpZgorCS8vI2lmIFNYR19GQUlMVVJFX0RVTVAKKwkvLwlORElTX0VWRU5UCQkJCQlEdW1wVGhyZWFkRXZlbnQ7CS8vIHN5bmNyb25pemUgZHVtcCB0aHJlYWQKKwkvLwlCT09MRUFOCQkJCQkJRHVtcFRocmVhZFJ1bm5pbmc7CS8vIHRlcm1pbmF0aW9uIGZsYWcKKwkvLwlQU1hHX0RVTVBfQ01ECQkJCUR1bXBCdWZmZXI7CQkJLy8gNjhrIC0gQ21kIGFuZCBCdWZmZXIKKwkvLwlkbWFfYWRkcl90CQlQRHVtcEJ1ZmZlcjsJCS8vIFBoeXNpY2FsIGFkZHJlc3MKKwkvLyNlbmRpZiAvLyBTWEdfRkFJTFVSRV9EVU1QCisKK30gYWRhcHRlcl90LCAqcF9hZGFwdGVyX3Q7CisKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorI2RlZmluZSBTTElDX0RVTVBfUkVRVUVTVEVEICAgICAgMQorI2RlZmluZSBTTElDX0RVTVBfSU5fUFJPR1JFU1MgICAgMgorI2RlZmluZSBTTElDX0RVTVBfRE9ORSAgICAgICAgICAgMworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1pY3JvY29kZSBjcmFzaCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuICBUaGlzCisgKiBzdHJ1Y3R1cmUgaXMgd3JpdHRlbiBvdXQgdG8gdGhlIGNhcmQncyBTUkFNIHdoZW4gdGhlIG1pY3JvY29kZSBwYW5pYydzLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QgX3NsaWNfY3Jhc2hfaW5mbyB7CisgICAgdXNob3J0ICBjcHVfaWQ7CisgICAgdXNob3J0ICBjcmFzaF9wYzsKK30gc2xpY19jcmFzaF9pbmZvLCAqcF9zbGljX2NyYXNoX2luZm87CisKKyNkZWZpbmUgQ1JBU0hfSU5GT19PRkZTRVQgICAweDE1NUMKKworI2VuZGlmCisKKyNkZWZpbmUgVVBEQVRFX1NUQVRTKGxhcmdlc3RhdCwgbmV3c3RhdCwgb2xkc3RhdCkgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgobmV3c3RhdCkgPCAob2xkc3RhdCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGxhcmdlc3RhdCkgKz0gKChuZXdzdGF0KSArICgweEZGRkZGRkZGIC0gb2xkc3RhdCArIDEpKTsgICAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAobGFyZ2VzdGF0KSArPSAoKG5ld3N0YXQpIC0gKG9sZHN0YXQpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBVUERBVEVfU1RBVFNfR0IobGFyZ2VzdGF0LCBuZXdzdGF0LCBvbGRzdGF0KSAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGxhcmdlc3RhdCkgKz0gKChuZXdzdGF0KSAtIChvbGRzdGF0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEVUSEVSX0VRX0FERFIoX0FkZHJBLCBfQWRkckIsIF9SZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfUmVzdWx0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCoodTMyICopKF9BZGRyQSkgIT0gKih1MzIgKikoX0FkZHJCKSkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKih1MTYgKikoJigoX0FkZHJBKVs0XSkpICE9ICoodTE2ICopKCYoKF9BZGRyQilbNF0pKSkgICAgICAgIFwKKyAgICAgICAgX1Jlc3VsdCA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgRVRIRVJNQVhGUkFNRSAgIDE1MTQKKyNkZWZpbmUgSlVNQk9NQVhGUkFNRSAgIDkwMTQKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKKyNkZWZpbmUgICBTWEdfR0VUX0FERFJfTE9XKF9hZGRyKSAgKHUzMikoKHU2NCkoX2FkZHIpICYgMHgwMDAwMDAwMEZGRkZGRkZGKQorI2RlZmluZSAgIFNYR19HRVRfQUREUl9ISUdIKF9hZGRyKSAgKHUzMikoKCh1NjQpKF9hZGRyKSA+PiAzMikgJiAweDAwMDAwMDAwRkZGRkZGRkYpCisjZWxzZQorI2RlZmluZSAgIFNYR19HRVRfQUREUl9MT1coX2FkZHIpICAgKHUzMilfYWRkcgorI2RlZmluZSAgIFNYR19HRVRfQUREUl9ISUdIKF9hZGRyKSAgKHUzMikwCisjZW5kaWYKKworI2RlZmluZSBGTFVTSCAgICAgICBUUlVFCisjZGVmaW5lIERPTlRfRkxVU0ggIEZBTFNFCisKKyNkZWZpbmUgU0lPQ1NMSUNEVU1QQ0FSRCAgICAgICAgIFNJT0NERVZQUklWQVRFKzkKKyNkZWZpbmUgU0lPQ1NMSUNTRVRJTlRBR0cgICAgICAgIFNJT0NERVZQUklWQVRFKzEwCisjZGVmaW5lIFNJT0NTTElDVFJBQ0VEVU1QICAgICAgICBTSU9DREVWUFJJVkFURSsxMQorCisjZW5kaWYgLyogIF9fU1hHX0RSSVZFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX29zLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19vcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZmIwZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19vcy5oCkBAIC0wLDAgKzEsMTU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc3hnX29zLmgKKyAqCisgKiBUaGVzZSBhcmUgdGhlIExpbnV4LXNwZWNpZmljIGRlZmluaXRpb25zIHJlcXVpcmVkIGZvciB0aGUgU0xJQ09TUworICogZHJpdmVyLCB3aGljaCBzaG91bGQgYWxsb3cgZm9yIGdyZWF0ZXIgcG9ydGFiaWxpdHkgdG8gb3RoZXIgT1Nlcy4KKyAqLworI2lmbmRlZiBfU0xJQ19PU19TUEVDSUZJQ19IXworI2RlZmluZSBfU0xJQ19PU19TUEVDSUZJQ19IXworCisjZGVmaW5lIEZBTFNFCSgwKQorI2RlZmluZSBUUlVFCSgxKQorCisKK3R5cGVkZWYgc3RydWN0IF9MSVNUX0VOVFJZIHsKKwlzdHJ1Y3QgX0xJU1RfRU5UUlkgKm5sZV9mbGluazsKKwlzdHJ1Y3QgX0xJU1RfRU5UUlkgKm5sZV9ibGluazsKK30gbGlzdF9lbnRyeSwgTElTVF9FTlRSWSwgKlBMSVNUX0VOVFJZOworCisjZGVmaW5lIEluaXRpYWxpemVMaXN0SGVhZChsKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChsKS0+bmxlX2ZsaW5rID0gKGwpLT5ubGVfYmxpbmsgPSAobCkKKworI2RlZmluZSBJc0xpc3RFbXB0eShoKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKGgpLT5ubGVfZmxpbmsgPT0gKGgpKQorCisjZGVmaW5lIFJlbW92ZUVudHJ5TGlzdChlKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbGlzdF9lbnRyeSAgICAgICAgICAgICAgKmI7ICAgICBcCisgICAgICAgICAgICAgICAgbGlzdF9lbnRyeSAgICAgICAgICAgICAgKmY7ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZiA9IChlKS0+bmxlX2ZsaW5rOyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYiA9IChlKS0+bmxlX2JsaW5rOyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYi0+bmxlX2ZsaW5rID0gZjsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZi0+bmxlX2JsaW5rID0gYjsgICAgICAgICAgICAgICBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKy8qIFRoZXNlIHR3byBoYXZlIHRvIGJlIGlubGluZWQgc2luY2UgdGhleSByZXR1cm4gdGhpbmdzLiAqLworCitzdGF0aWMgX19pbmxpbmUgUExJU1RfRU5UUlkKK1JlbW92ZUhlYWRMaXN0KGxpc3RfZW50cnkgKmwpCit7CisgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpmOworICAgICAgICBsaXN0X2VudHJ5ICAgICAgICAgICAgICAqZTsKKworICAgICAgICBlID0gbC0+bmxlX2ZsaW5rOworICAgICAgICBmID0gZS0+bmxlX2ZsaW5rOworICAgICAgICBsLT5ubGVfZmxpbmsgPSBmOworICAgICAgICBmLT5ubGVfYmxpbmsgPSBsOworCisgICAgICAgIHJldHVybiAoZSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBQTElTVF9FTlRSWQorUmVtb3ZlVGFpbExpc3QobGlzdF9lbnRyeSAqbCkKK3sKKyAgICAgICAgbGlzdF9lbnRyeSAgICAgICAgICAgICAgKmI7CisgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICplOworCisgICAgICAgIGUgPSBsLT5ubGVfYmxpbms7CisgICAgICAgIGIgPSBlLT5ubGVfYmxpbms7CisgICAgICAgIGwtPm5sZV9ibGluayA9IGI7CisgICAgICAgIGItPm5sZV9mbGluayA9IGw7CisKKyAgICAgICAgcmV0dXJuIChlKTsKK30KKworCisjZGVmaW5lIEluc2VydFRhaWxMaXN0KGwsIGUpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbGlzdF9lbnRyeSAgICAgICAgICAgICAgKmI7ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYiA9IChsKS0+bmxlX2JsaW5rOyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKGUpLT5ubGVfZmxpbmsgPSAobCk7ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKGUpLT5ubGVfYmxpbmsgPSBiOyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYi0+bmxlX2ZsaW5rID0gKGUpOyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKGwpLT5ubGVfYmxpbmsgPSAoZSk7ICAgICAgICAgICBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSW5zZXJ0SGVhZExpc3QobCwgZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICAgICAgICAgICAgICAqZjsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBmID0gKGwpLT5ubGVfZmxpbms7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoZSktPm5sZV9mbGluayA9IGY7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoZSktPm5sZV9ibGluayA9IGw7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBmLT5ubGVfYmxpbmsgPSAoZSk7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAobCktPm5sZV9mbGluayA9IChlKTsgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIEFUS19ERUJVRyAgMQorCisjaWYgQVRLX0RFQlVHCisjZGVmaW5lIFNMSUNfVElNRVNUQU1QKHZhbHVlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdGltZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHZhbHVlID0gdGltZXYudHZfc2VjKjEwMDAwMDAgKyB0aW1ldi50dl91c2VjOyAgICAgICAgICAgICAgICAgICAgICAgXAorfQorI2Vsc2UKKyNkZWZpbmUgU0xJQ19USU1FU1RBTVAodmFsdWUpCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqICBTWEcgREVGSU5FUyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiAgQVRLREJHCisjZGVmaW5lIFNYR19USU1FU1RBTVAodmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0cnVjdCB0aW1ldmFsICB0aW1ldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkb19nZXR0aW1lb2ZkYXkoJnRpbWV2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdmFsdWUgPSB0aW1ldi50dl9zZWMqMTAwMDAwMCArIHRpbWV2LnR2X3VzZWM7ICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZWxzZQorI2RlZmluZSBTWEdfVElNRVNUQU1QKHZhbHVlKQorI2VuZGlmCisKKyNkZWZpbmUgV1JJVEVfUkVHKHJlZyx2YWx1ZSxmbHVzaCkgICAgICAgICAgICAgICAgICBzeGdfcmVnMzJfd3JpdGUoKCZyZWcpLCAodmFsdWUpLCAoZmx1c2gpKQorI2RlZmluZSBXUklURV9SRUc2NChhLHJlZyx2YWx1ZSxjcHUpICAgICAgICAgICAgICAgIHN4Z19yZWc2NF93cml0ZSgoYSksKCZyZWcpLCh2YWx1ZSksKGNwdSkpCisjZGVmaW5lIFJFQURfUkVHKHJlZyx2YWx1ZSkgICAodmFsdWUpID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKSgmcmVnKSkKKworI2VuZGlmICAvKiBfU0xJQ19PU19TUEVDSUZJQ19IXyAgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdkYmcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnZGJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZiNmM3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnZGJnLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCCpIDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICRJZDogc3hnZGJnLmgsdiAxLjEgMjAwOC8wNi8yNyAxMjo0OToyOCBtb29rIEV4cCAkCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZworICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiBzeGdkYmcuaAorICoKKyAqIEFsbCBkZWJ1ZyBhbmQgYXNzZXJ0aW9uLWJhc2VkIGRlZmluaXRpb25zIGFuZCBtYWNyb3MgYXJlIGluY2x1ZGVkCisgKiBpbiB0aGlzIGZpbGUgZm9yIHRoZSBTWEdPU1MgZHJpdmVyLgorICovCisjaWZuZGVmIF9TWEdfREVCVUdfSF8KKyNkZWZpbmUgX1NYR19ERUJVR19IXworCisjZGVmaW5lIEFUS0RCRyAgMQorI2RlZmluZSBBVEtfVFJBQ0VfRU5BQkxFRCAxCisKKyNkZWZpbmUgREJHX0VSUk9SKG4sIGFyZ3MuLi4pCXByaW50ayhLRVJOX0VNRVJHIG4sICMjYXJncykKKworI2lmZGVmIEFTU0VSVAorI3VuZGVmIEFTU0VSVAorI2VuZGlmCisKKyNpZmRlZiBTWEdfQVNTRVJUX0VOQUJMRUQKKyNpZm5kZWYgQVNTRVJUCisjZGVmaW5lIEFTU0VSVChhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEoYSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBEQkdfRVJST1IoIkFTU0VSVCgpIEZhaWx1cmU6IGZpbGUgJXMsIGZ1bmN0aW9uICVzICBsaW5lICVkXG4iLFwKKyAgICAgICAgICAgICAgICBfX0ZJTEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKyNlbmRpZgorI2Vsc2UKKyNpZm5kZWYgQVNTRVJUCisjZGVmaW5lIEFTU0VSVChhKQorI2VuZGlmCisjZW5kaWYgLyogU1hHX0FTU0VSVF9FTkFCTEVEICAqLworCisKKyNpZmRlZiBBVEtEQkcKKy8qCisgKiAgR2xvYmFsIGZvciB0aW1lciBncmFudWxhcml0eTsgZXZlcnkgZHJpdmVyIG11c3QgaGF2ZSBhbiBpbnN0YW5jZQorICogIG9mIHRoaXMgaW5pdGlhbGl6ZWQgdG8gMAorICovCisKK2V4dGVybiB1bG9uZyBBVEtUaW1lckRpdjsKKworLyoKKyAqIHRyYWNlX2VudHJ5X3QgLQorICoKKyAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgYW4gZW50cnkgaW4gdGhlIHRyYWNlIGJ1ZmZlci4gIFRoZQorICogZmlyc3QgZmV3IGZpZWxkcyBtZWFuIHRoZSBzYW1lIGZyb20gZW50cnkgdG8gZW50cnksIHdoaWxlCisgKiB0aGUgbWVhbmluZyBvZiBsYXN0IHNldmVyYWwgZmllbGRzIGNoYW5nZSB0byBzdWl0IHRoZQorICogbmVlZHMgb2YgdGhlIHRyYWNlIGVudHJ5LiAgVHlwaWNhbGx5IHRoZXkgYXJlIGZ1bmN0aW9uIGNhbGwKKyAqIHBhcmFtZXRlcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IF90cmFjZV9lbnRyeV9zIHsKKyAgICAgICAgY2hhciAgICAgIG5hbWVbOF07ICAgICAgICAvKiA4IGNoYXJhY3RlciBuYW1lIC0gbGlrZSAncydpJ20nYidhJ3InYyd2JyAqLworICAgICAgICB1MzIgICB0aW1lOyAgICAgICAgICAgLyogQ3VycmVudCBjbG9jayB0aWMgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgICAgY3B1OyAgICAgICAgICAgIC8qIEN1cnJlbnQgQ1BVICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICAgIGlycWw7ICAgICAgICAgICAvKiBDdXJyZW50IElSUUwgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgICAgZHJpdmVyOyAgICAgICAgIC8qIFRoZSBkcml2ZXIgd2hpY2ggYWRkZWQgdGhlIHRyYWNlIGNhbGwgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgICAgcGFkMjsgICAgICAgICAgIC8qIHBhZCB0byA0IGJ5dGUgYm91bmRhcnkgLSB3aWxsIHByb2JhYmx5IGdldCB1c2VkICovCisgICAgICAgIHUzMiAgIGFyZzE7ICAgICAgICAgICAvKiBDYWxsZXIgYXJnMSAqLworICAgICAgICB1MzIgICBhcmcyOyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzIgKi8KKyAgICAgICAgdTMyICAgYXJnMzsgICAgICAgICAgIC8qIENhbGxlciBhcmczICovCisgICAgICAgIHUzMiAgIGFyZzQ7ICAgICAgICAgICAvKiBDYWxsZXIgYXJnNCAqLworfSB0cmFjZV9lbnRyeV90LCAqcHRyYWNlX2VudHJ5X3Q7CisKKy8qCisgKiBEcml2ZXIgdHlwZXMgZm9yIGRyaXZlciBmaWVsZCBpbiB0cmFjZV9lbnRyeV90CisgKi8KKyNkZWZpbmUgVFJBQ0VfU1hHICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFJBQ0VfVlBDSSAgICAgICAgICAgIDIKKyNkZWZpbmUgVFJBQ0VfU0xJQyAgICAgICAgICAgIDMKKworI2RlZmluZSBUUkFDRV9FTlRSSUVTICAgMTAyNAorCit0eXBlZGVmIHN0cnVjdCBfc3hnX3RyYWNlX2J1ZmZlcl90Cit7CisgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgICAgICAgICAvKiBhaWQgZm9yIHdpbmRiZyBleHRlbnNpb24gKi8KKyAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICBpbjsgICAgICAgICAgICAgICAgICAgIC8qIFdoZXJlIHRvIGFkZCAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIGxldmVsOyAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBUcmFjZSBsZXZlbCAqLworCXNwaW5sb2NrX3QJbG9jazsgICAgICAgICAgICAgICAgICAvKiBGb3IgTVAgdHJhY2luZyAqLworICAgICAgICB0cmFjZV9lbnRyeV90ICAgICAgICAgICBlbnRyaWVzW1RSQUNFX0VOVFJJRVNdOy8qIFRoZSBjaXJjdWxhciBidWZmZXIgKi8KK30gc3hnX3RyYWNlX2J1ZmZlcl90OworCisvKgorICogVGhlIHRyYWNlIGxldmVscworICoKKyAqIFhYWCBBdCB0aGUgbW9tZW50IEkgYW0gb25seSBkZWZpbmluZyBjcml0aWNhbCwgaW1wb3J0YW50LCBhbmQgbm9pc3kuCisgKiBJIGFtIGxlYXZpbmcgcm9vbSBmb3IgbW9yZSBpZiBhbnlvbmUgd2FudHMgdGhlbS4KKyAqLworI2RlZmluZSBUUkFDRV9OT05FICAgICAgICAgICAgICAwICAgLyogRm9yIHRyYWNlIGxldmVsIC0gaWYgbm8gdHJhY2luZyB3YW50ZWQgKi8KKyNkZWZpbmUgVFJBQ0VfQ1JJVElDQUwgICAgICAgICAgMSAgIC8qIG1pbmltYWwgdHJhY2luZyAtIG9ubHkgY3JpdGljYWwgc3R1ZmYgKi8KKyNkZWZpbmUgVFJBQ0VfSU1QT1JUQU5UICAgICAgICAgNSAgIC8qIG1vcmUgdHJhY2luZyAtIGFueXRoaW5nIGltcG9ydGFudCAqLworI2RlZmluZSBUUkFDRV9OT0lTWSAgICAgICAgICAgICAxMCAgLyogRXZlcnl0aGluZyBpbiB0aGUgd29ybGQgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoZSBtYWNyb3MgdGhlbXNlbHZlcyAtCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBBVEtfVFJBQ0VfRU5BQkxFRAorI2RlZmluZSBTWEdfVFJBQ0VfSU5JVChidWZmZXIsIHRsZXZlbCkJCQkJXAorewkJCQkJCQkJXAorCW1lbXNldCgoYnVmZmVyKSwgMCwgc2l6ZW9mKHN4Z190cmFjZV9idWZmZXJfdCkpOwlcCisJKGJ1ZmZlciktPmxldmVsID0gKHRsZXZlbCk7CQkJCVwKKwkoYnVmZmVyKS0+c2l6ZSA9IFRSQUNFX0VOVFJJRVM7CQkJCVwKKwlzcGluX2xvY2tfaW5pdCgmKGJ1ZmZlciktPmxvY2spOwkJCVwKK30KKyNlbHNlCisjZGVmaW5lIFNYR19UUkFDRV9JTklUKGJ1ZmZlciwgdGxldmVsKQorI2VuZGlmCisKKy8qCisgKiBUaGUgdHJhY2UgbWFjcm8uICBUaGlzIGlzIGFjdGl2ZSBvbmx5IGlmIEFUS19UUkFDRV9FTkFCTEVEIGlzIHNldC4KKyAqLworI2lmIEFUS19UUkFDRV9FTkFCTEVECisjZGVmaW5lIFNYR19UUkFDRSh0ZHJpdmVyLCBidWZmZXIsIHRsZXZlbCwgdG5hbWUsIGExLCBhMiwgYTMsIGE0KSB7ICAgICAgICBcCisgICAgICAgIGlmICgoYnVmZmVyKSAmJiAoKGJ1ZmZlciktPmxldmVsID49ICh0bGV2ZWwpKSkgeyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgdHJhY2VfaXJxbCA9IDA7ICAgIC8qID8/Pz8/PyBGSVggVEhJUyAgKi8gICAgXAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIHRyYWNlX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBwdHJhY2VfZW50cnlfdCAgdHJhY2VfZW50cnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICB0aW1ldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBzcGluX2xvY2soJihidWZmZXIpLT5sb2NrKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeSA9ICYoYnVmZmVyKS0+ZW50cmllc1soYnVmZmVyKS0+aW5dOyAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGRvX2dldHRpbWVvZmRheSgmdGltZXYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBtZW1zZXQodHJhY2VfZW50cnktPm5hbWUsIDAsIDgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2xlbiA9IHN0cmxlbih0bmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfbGVuID0gdHJhY2VfbGVuID4gOCA/IDggOiB0cmFjZV9sZW47ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBtZW1jcHkodHJhY2VfZW50cnktPm5hbWUsICh0bmFtZSksIHRyYWNlX2xlbik7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT50aW1lID0gdGltZXYudHZfdXNlYzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmNwdSA9ICh1bnNpZ25lZCBjaGFyKShzbXBfcHJvY2Vzc29yX2lkKCkgJiAweEZGKTsgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5kcml2ZXIgPSAodGRyaXZlcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmlycWwgPSB0cmFjZV9pcnFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+YXJnMSA9ICh1bG9uZykoYTEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5hcmcyID0gKHVsb25nKShhMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmFyZzMgPSAodWxvbmcpKGEzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+YXJnNCA9ICh1bG9uZykoYTQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKGJ1ZmZlciktPmluKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoKGJ1ZmZlciktPmluID09IFRSQUNFX0VOVFJJRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlciktPmluID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmKGJ1ZmZlciktPmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZWxzZQorI2RlZmluZSBTWEdfVFJBQ0UodGRyaXZlciwgYnVmZmVyLCB0bGV2ZWwsIHRuYW1lLCBhMSwgYTIsIGEzLCBhNCkKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmICAvKiAgX1NYR19ERUJVR19IXyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaGlmLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2hpZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMjZjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2hpZi5oCkBAIC0wLDAgKzEsODYxIEBACisvKgorICogQ29weXJpZ2h0IKkgMTk5Ny0yMDA3IEFsYWNyaXRlY2gsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAorICoKKyAqICRJZDogc3hnaGlmLmgsdiAxLjUgMjAwOC8wNy8yNCAxOToxODoyMiBjaHJpcyBFeHAgJAorICoKKyAqIHN4Z2hpZi5oOgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBmb3IgdGhlCisgKiBBbGFjcml0ZWNoIFNhaGFyYSBob3N0IGludGVyZmFjZQorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVQ09ERSBSZWdpc3RlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QgX1NYR19VQ09ERV9SRUdTIHsKKwkvLyBBZGRyZXNzIDAgLSAweDNGID0gQ29tbWFuZCBjb2RlcyAwLTE1IGZvciBUQ0IgMC4gIEV4Y29kZSAwCisJdTMyCQlJY3I7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMCAtIEludCBjb250cm9sCisJdTMyCQlSc3ZkUmVnMTsJCS8vIENvZGUgPSAxIC0gVE9FIC1OQQorCXUzMgkJUnN2ZFJlZzI7CQkvLyBDb2RlID0gMiAtIFRPRSAtTkEKKwl1MzIJCVJzdmRSZWczOwkJLy8gQ29kZSA9IDMgLSBUT0UgLU5BCisJdTMyCQlSc3ZkUmVnNDsJCS8vIENvZGUgPSA0IC0gVE9FIC1OQQorCXUzMgkJUnN2ZFJlZzU7CQkvLyBDb2RlID0gNSAtIFRPRSAtTkEKKwl1MzIJCUNhcmRVcDsJCQkvLyBDb2RlID0gNiAtIE1pY3JvY29kZSBpbml0aWFsaXplZCB3aGVuIDEKKwl1MzIJCVJzdmRSZWc3OwkJLy8gQ29kZSA9IDcgLSBUT0UgLU5BCisJdTMyCQlDb2RlTm90VXNlZFs4XTsJCS8vIENvZGVzIDgtMTUgbm90IHVzZWQuICBFeENvZGUgPSAwCisJLy8gVGhpcyBicmluZ3MgdXMgdG8gRXhDb2RlIDEgYXQgYWRkcmVzcyAweDQwID0gSW50ZXJydXB0IHN0YXR1cyBwb2ludGVyCisJdTMyCQlJc3A7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMQorCXUzMgkJUGFkRXgxWzE1XTsJCS8vIENvZGVzIDEtMTUgbm90IHVzZWQgd2l0aCBleHRlbmRlZCBjb2RlcworCS8vIEV4Q29kZSAyID0gSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorCXUzMgkJSXNyOwkJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIKKwl1MzIJCVBhZEV4MlsxNV07CisJLy8gRXhDb2RlIDMgPSBFdmVudCBiYXNlIHJlZ2lzdGVyLiAgTG9jYXRpb24gb2YgZXZlbnQgcmluZ3MKKwl1MzIJCUV2ZW50QmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMKKwl1MzIJCVBhZEV4M1sxNV07CisJLy8gRXhDb2RlIDQgPSBFdmVudCByaW5nIHNpemUKKwl1MzIJCUV2ZW50U2l6ZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDQKKwl1MzIJCVBhZEV4NFsxNV07CisJLy8gRXhDb2RlIDUgPSBUQ0IgQnVmZmVycyBiYXNlIGFkZHJlc3MKKwl1MzIJCVRjYkJhc2U7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA1CisJdTMyCQlQYWRFeDVbMTVdOworCS8vIEV4Q29kZSA2ID0gVENCIENvbXBvc2l0ZSBCdWZmZXJzIGJhc2UgYWRkcmVzcworCXUzMgkJVGNiQ29tcEJhc2U7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA2CisJdTMyCQlQYWRFeDZbMTVdOworCS8vIEV4Q29kZSA3ID0gVHJhbnNtaXQgcmluZyBiYXNlIGFkZHJlc3MKKwl1MzIJCVhtdEJhc2U7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA3CisJdTMyCQlQYWRFeDdbMTVdOworCS8vIEV4Q29kZSA4ID0gVHJhbnNtaXQgcmluZyBzaXplCisJdTMyCQlYbXRTaXplOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gOAorCXUzMgkJUGFkRXg4WzE1XTsKKwkvLyBFeENvZGUgOSA9IFJlY2VpdmUgcmluZyBiYXNlIGFkZHJlc3MKKwl1MzIJCVJjdkJhc2U7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA5CisJdTMyCQlQYWRFeDlbMTVdOworCS8vIEV4Q29kZSAxMCA9IFJlY2VpdmUgcmluZyBzaXplCisJdTMyCQlSY3ZTaXplOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTAKKwl1MzIJCVBhZEV4MTBbMTVdOworCS8vIEV4Q29kZSAxMSA9IFJlYWQgRUVQUk9NIENvbmZpZworCXUzMgkJQ29uZmlnOwkJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDExCisJdTMyCQlQYWRFeDExWzE1XTsKKwkvLyBFeENvZGUgMTIgPSBNdWx0aWNhc3QgYml0cyAzMTowCisJdTMyCQlNY2FzdExvdzsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDEyCisJdTMyCQlQYWRFeDEyWzE1XTsKKwkvLyBFeENvZGUgMTMgPSBNdWx0aWNhc3QgYml0cyA2MzozMgorCXUzMgkJTWNhc3RIaWdoOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTMKKwl1MzIJCVBhZEV4MTNbMTVdOworCS8vIEV4Q29kZSAxNCA9IFBpbmcKKwl1MzIJCVBpbmc7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTQKKwl1MzIJCVBhZEV4MTRbMTVdOworCS8vIEV4Q29kZSAxNSA9IExpbmsgTVRVCisJdTMyCQlMaW5rTXR1OwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTUKKwl1MzIJCVBhZEV4MTVbMTVdOworCS8vIEV4Q29kZSAxNiA9IERvd25sb2FkIHN5bmNocm9uaXphdGlvbgorCXUzMgkJTG9hZFN5bmM7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNgorCXUzMgkJUGFkRXgxNlsxNV07CisJLy8gRXhDb2RlIDE3ID0gVXBwZXIgRFJBTSBhZGRyZXNzIGJpdHMgb24gMzItYml0IHN5c3RlbXMKKwl1MzIJCVVwcGVyOwkJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE3CisJdTMyCQlQYWRFeDE3WzE1XTsKKwkvLyBFeENvZGUgMTggPSBTbG93cGF0aCBTZW5kIEluZGV4IEFkZHJlc3MKKwl1MzIJCVNQU2VuZEluZGV4OwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTgKKwl1MzIJCVBhZEV4MThbMTVdOworCXUzMgkJUnN2ZFhGOwkJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE5CisJdTMyCQlQYWRFeDE5WzE1XTsKKwkvLyBFeENvZGUgMjAgPSBBZ2dyZWdhdGlvbgorCXUzMgkJQWdncmVnYXRpb247CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyMAorCXUzMgkJUGFkRXgyMFsxNV07CisJLy8gRXhDb2RlIDIxID0gUmVjZWl2ZSBNREwgcHVzaCB0aW1lcgorCXUzMgkJUHVzaFRpY2tzOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjEKKwl1MzIJCVBhZEV4MjFbMTVdOworCS8vIEV4Q29kZSAyMiA9IFRPRSBOQQorCXUzMgkJQWNrRnJlcXVlbmN5OwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjIKKwl1MzIJCVBhZEV4MjJbMTVdOworCS8vIEV4Q29kZSAyMyA9IFRPRSBOQQorCXUzMgkJUnN2ZFJlZzIzOworCXUzMgkJUGFkRXgyM1sxNV07CisJLy8gRXhDb2RlIDI0ID0gVE9FIE5BCisJdTMyCQlSc3ZkUmVnMjQ7CisJdTMyCQlQYWRFeDI0WzE1XTsKKwkvLyBFeENvZGUgMjUgPSBUT0UgTkEKKwl1MzIJCVJzdmRSZWcyNTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI1CisJdTMyCQlQYWRFeDI1WzE1XTsKKwkvLyBFeENvZGUgMjYgPSBSZWNlaXZlIGNoZWNrc3VtIHJlcXVpcmVtZW50cworCXUzMgkJUmVjZWl2ZUNoZWNrc3VtOwkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyNgorCXUzMgkJUGFkRXgyNlsxNV07CisJLy8gRXhDb2RlIDI3ID0gUlNTIFJlcXVpcmVtZW50cworCXUzMgkJUnNzOwkJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI3CisJdTMyCQlQYWRFeDI3WzE1XTsKKwkvLyBFeENvZGUgMjggPSBSU1MgVGFibGUKKwl1MzIJCVJzc1RhYmxlOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjgKKwl1MzIJCVBhZEV4MjhbMTVdOworCS8vIEV4Q29kZSAyOSA9IEV2ZW50IHJpbmcgcmVsZWFzZSBlbnRyaWVzCisJdTMyCQlFdmVudFJlbGVhc2U7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyOQorCXUzMgkJUGFkRXgyOVsxNV07CisJLy8gRXhDb2RlIDMwID0gTnVtYmVyIG9mIHJlY2VpdmUgYnVmZmVybGlzdCBjb21tYW5kcyBvbiByaW5nIDAKKwl1MzIJCVJjdkNtZDsJCQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzMAorCXUzMgkJUGFkRXgzMFsxNV07CisJLy8gRXhDb2RlIDMxID0gc2xvd3BhdGggdHJhbnNtaXQgY29tbWFuZCAtIERhdGFbMzE6MF0gPSAxCisJdTMyCQlYbXRDbWQ7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMzEKKwl1MzIJCVBhZEV4MzFbMTVdOworCS8vIEV4Q29kZSAzMiA9IER1bXAgY29tbWFuZAorCXUzMgkJRHVtcENtZDsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMyCisJdTMyCQlQYWRFeDMyWzE1XTsKKwkvLyBFeENvZGUgMzMgPSBEZWJ1ZyBjb21tYW5kCisJdTMyCQlEZWJ1Z0NtZDsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMzCisJdTMyCQlQYWRFeDMzWzE1XTsKKwkvLyBUaGVyZSBhcmUgMTI4IHBvc3NpYmxlIGV4dGVuZGVkIGNvbW1hbmRzIC0gZWFjaCBvZiBhY2NvdW50IGZvciAxNgorCS8vIHdvcmRzIChpbmNsdWRpbmcgdGhlIG5vbi1yZWxldmVudCBiYXNlIGNvbW1hbmQgY29kZXMgMS0xNSkuCisJLy8gUGFkIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZXNlIGhlcmUgdG8gYnJpbmcgdXMgdG8gdGhlIG5leHQgQ1BVCisJLy8gYmFzZS4gIEFzIGV4dGVuZGVkIGNvZGVzIGFyZSBhZGRlZCwgcmVkdWNlIHRoZSBmaXJzdCBhcnJheSB2YWx1ZSBpbgorCS8vIHRoZSBmb2xsb3dpbmcgZmllbGQKKwl1MzIJCVBhZFRvTmV4dENwdVs5NF1bMTZdOwkvLyA5NCA9IDEyOCAtIDM0ICgzNCA9IEV4Y29kZXMgMCAtIDMzKQorfSBTWEdfVUNPREVfUkVHUywgKlBTWEdfVUNPREVfUkVHUzsKKworLy8gSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKDApIHZhbHVlcworI2RlZmluZSBTWEdfSUNSX0RJU0FCTEUJCQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU1hHX0lDUl9FTkFCTEUJCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU1hHX0lDUl9NQVNLCQkJCQkweDAwMDAwMDAyCisjZGVmaW5lIFNYR19JQ1JfTVNHSURfTUFTSwkJCQkweEZGRkYwMDAwCisjZGVmaW5lIFNYR19JQ1JfTVNHSURfU0hJRlQJCQkxNgorI2RlZmluZSBTWEdfSUNSKF9NZXNzYWdlSWQsIF9EYXRhKQlcCisJKCgoKF9NZXNzYWdlSWQpIDw8IFNYR19JQ1JfTVNHSURfU0hJRlQpICYJXAorCSAgU1hHX0lDUl9NU0dJRF9NQVNLKSB8IChfRGF0YSkpCisKKy8vIFRoZSBNaWNyb2NvZGUgc3VwcG9ydHMgdXAgdG8gMTYgUlNTIHF1ZXVlcworI2RlZmluZSBTWEdfTUFYX1JTUwkJCQkxNgorI2RlZmluZSBTWEdfTUFYX1JTU19UQUJMRV9TSVpFCTI1NgkJLy8gMjU2LWJ5dGUgbWF4CisKKyNkZWZpbmUgU1hHX1JTU19UQ1A2CQkJCTB4MDAwMDAwMDEJLy8gUlNTIFRDUCBvdmVyIElQdjYKKyNkZWZpbmUgU1hHX1JTU19UQ1A0CQkJCTB4MDAwMDAwMDIJLy8gUlNTIFRDUCBvdmVyIElQdjQKKyNkZWZpbmUgU1hHX1JTU19MRUdBQ1kJCQkJMHgwMDAwMDAwNAkvLyBMaW5lLWJhc2UgaW50ZXJydXB0cworI2RlZmluZSBTWEdfUlNTX1RBQkxFX1NJWkUJCQkweDAwMDBGRjAwCS8vIFRhYmxlIHNpemUgbWFzaworI2RlZmluZSBTWEdfUlNTX1RBQkxFX1NISUZUCQkJOAorI2RlZmluZQlTWEdfUlNTX0JBU0VfQ1BVCQkJMHgwMEZGMDAwMAkvLyBCYXNlIENQVSAobm90IHVzZWQpCisjZGVmaW5lIFNYR19SU1NfQkFTRV9TSElGVAkJCTE2CisKKyNkZWZpbmUgU1hHX1JDVl9JUF9DU1VNX0VOQUJMRUQJCTB4MDAwMDAwMDEJLy8gRXhDb2RlIDI2IChSZWNlaXZlQ2hlY2tzdW0pCisjZGVmaW5lIFNYR19SQ1ZfVENQX0NTVU1fRU5BQkxFRAkweDAwMDAwMDAyCS8vIEV4Q29kZSAyNiAoUmVjZWl2ZUNoZWNrc3VtKQorCisjZGVmaW5lIFNYR19YTVRfQ1BVSURfU0hJRlQJCQkxNgorCisjaWYgVlBDSQorI2RlZmluZSBTWEdfQ0hFQ0tfRk9SX0hBTkdfVElNRQkJMzAwMAorI2Vsc2UKKyNkZWZpbmUgU1hHX0NIRUNLX0ZPUl9IQU5HX1RJTUUJCTUKKyNlbmRpZgorCisvKgorICogVENCIHJlZ2lzdGVycyAtIFRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIHJlZ2lzdGVyIG1lbW9yeSBhcmVhIGFzIFVDT0RFX1JFR1MKKyAqIGFib3ZlLCBidXQgZGVmaW5lZCBkaWZmZXJlbnRseS4gIEJpdHMgMTc6MDYgb2YgdGhlIGFkZHJlc3MgZGVmaW5lIHRoZSBUQ0IsCisgKiB3aGljaCBtZWFucyBlYWNoIFRDQiBhcmVhIG9jY3VwaWVzIDB4NDAgKDY0KSBieXRlcywgb3IgMTYgdTMyUy4gIFdoYXQgcmVhbGx5CisgKiBpcyBoYXBwZW5pbmcgaXMgdGhhdCB0aGVzZSByZWdpc3RlcnMgb2NjdXB5IHRoZSAiUGFkRXhbMTVdIiBhcmVhcyBpbiB0aGUKKyAqIFNYR19VQ09ERV9SRUdTIGRlZmluaXRpb24gYWJvdmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX1NYR19UQ0JfUkVHUyB7CisJdTMyCQlFeENvZGU7CQkvKiBFeHRlbmRlZCBjb2RlcyAtIHNlZSBTWEdfVUNPREVfUkVHUyAqLworCXUzMgkJWG10OwkJLyogQ29kZSA9IDEgLSAjIG9mIFhtdCBkZXNjcmlwdG9ycyBhZGRlZCB0byByaW5nICovCisJdTMyCQlSY3Y7CQkvKiBDb2RlID0gMiAtICMgb2YgUmN2IGRlc2NyaXB0b3JzIGFkZGVkIHRvIHJpbmcgKi8KKwl1MzIJCVJzdmQxOwkJLyogQ29kZSA9IDMgLSBUT0UgTkEgKi8KKwl1MzIJCVJzdmQyOwkJLyogQ29kZSA9IDQgLSBUT0UgTkEgKi8KKwl1MzIJCVJzdmQzOwkJLyogQ29kZSA9IDUgLSBUT0UgTkEgKi8KKwl1MzIJCUludmFsaWQ7CS8qIENvZGUgPSA2IC0gUmVzZXJ2ZWQgZm9yICJDYXJkVXAiIHNlZSBhYm92ZSAqLworCXUzMgkJUnN2ZDQ7CQkvKiBDb2RlID0gNyAtIFRPRSBOQSAqLworCXUzMgkJUnN2ZDU7CQkvKiBDb2RlID0gOCAtIFRPRSBOQSAqLworCXUzMgkJUGFkWzddOwkJLyogQ29kZXMgOC0xNSAtIE5vdCB1c2VkLiAqLworfSBTWEdfVENCX1JFR1MsICpQU1hHX1RDQl9SRUdTOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJU1IgRm9ybWF0CisgKiAgICAgICAgICAgICAgICAzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorICogICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICogICAgICAgICAgICAgICAgfCAgICB8ICAgIHwgICAgfCAgICB8ICAgIHwgICAgfCAgICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgIHxfX19ffF9fX198X19fX3xfX19ffF9fX198X19fX3xfX19ffF9fX198CisgKiAgICAgICAgICAgICAgICAgXl5eXiBeXl5eIF5eXl4gXl5eXiBcICAgICAgICAgICAgICAgICAvCisgKiAgICAgICAgICAgRVJSIC0tfHx8fCB8fHx8IHx8fHwgfHx8fCAgLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgRVZFTlQgLS0tfHx8IHx8fHwgfHx8fCB8fHx8ICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgLS0tLXx8IHx8fHwgfHx8fCB8fHx8ICAgICAgICAgIHwtLSBDcmFzaCBBZGRyZXNzCisgKiAgICAgICAgICAgVVBDIC0tLS0tfCB8fHx8IHx8fHwgfHx8fAorICogICAgICAgIExFVkVOVCAtLS0tLS0tfHx8fCB8fHx8IHx8fHwKKyAqICAgICAgICAgIFBEUUYgLS0tLS0tLS18fHwgfHx8fCB8fHx8CisgKiAgICAgICAgIFJNSVNTIC0tLS0tLS0tLXx8IHx8fHwgfHx8fAorICogICAgICAgICBCUkVBSyAtLS0tLS0tLS0tfCB8fHx8IHx8fHwKKyAqICAgICAgIEhCRUFUT0sgLS0tLS0tLS0tLS0tfHx8fCB8fHx8CisgKiAgICAgICBOT0hCRUFUIC0tLS0tLS0tLS0tLS18fHwgfHx8fAorICogICAgICAgIEVSRlVMTCAtLS0tLS0tLS0tLS0tLXx8IHx8fHwKKyAqICAgICAgICAgWERST1AgLS0tLS0tLS0tLS0tLS0tfCB8fHx8CisgKiAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tfHx8fAorICogICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLXx8fHwtLVwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwtLS18LUNwdUlkIG9mIGNyYXNoCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU1hHX0lTUl9FUlIJCTB4ODAwMDAwMDAJLy8gRXJyb3IKKyNkZWZpbmUgU1hHX0lTUl9FVkVOVAkJMHg0MDAwMDAwMAkvLyBFdmVudCByaW5nIGV2ZW50CisjZGVmaW5lIFNYR19JU1JfTk9ORTEJCTB4MjAwMDAwMDAJLy8gTm90IHVzZWQKKyNkZWZpbmUgU1hHX0lTUl9VUEMJCTB4MTAwMDAwMDAJLy8gRHVtcC9kZWJ1ZyBjb21tYW5kIGNvbXBsZXRlCisjZGVmaW5lIFNYR19JU1JfTElOSwkJMHgwODAwMDAwMAkvLyBMaW5rIGV2ZW50CisjZGVmaW5lIFNYR19JU1JfUERRRgkJMHgwNDAwMDAwMAkvLyBQcm9jZXNzZWQgZGF0YSBxdWV1ZSBmdWxsCisjZGVmaW5lIFNYR19JU1JfUk1JU1MJCTB4MDIwMDAwMDAJLy8gRHJvcCAtIG5vIGhvc3QgYnVmCisjZGVmaW5lIFNYR19JU1JfQlJFQUsJCTB4MDEwMDAwMDAJLy8gQnJlYWtwb2ludCBoaXQKKyNkZWZpbmUgU1hHX0lTUl9QSU5HCQkweDAwODAwMDAwCS8vIEhlYXJ0YmVhdCByZXNwb25zZQorI2RlZmluZSBTWEdfSVNSX0RFQUQJCTB4MDA0MDAwMDAJLy8gQ2FyZCBjcmFzaAorI2RlZmluZSBTWEdfSVNSX0VSRlVMTAkJMHgwMDIwMDAwMAkvLyBFdmVudCByaW5nIGZ1bGwKKyNkZWZpbmUgU1hHX0lTUl9YRFJPUAkJMHgwMDEwMDAwMAkvLyBYTVQgRHJvcCAtIG5vIERSQU0gYnVmcyBvciBYTVQgZXJyCisjZGVmaW5lIFNYR19JU1JfU1BTRU5ECQkweDAwMDgwMDAwCS8vIFNsb3cgc2VuZCBjb21wbGV0ZQorI2RlZmluZSBTWEdfSVNSX0NQVQkJMHgwMDA3MDAwMAkvLyBEZWFkIENQVSBtYXNrCisjZGVmaW5lIFNYR19JU1JfQ1BVX1NISUZUCQkxNgkvLyBEZWFkIENQVSBzaGlmdAorI2RlZmluZSBTWEdfSVNSX0NSQVNICQkweDAwMDBGRkZGCS8vIENyYXNoIGFkZHJlc3MgbWFzaworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRXZlbnQgUmluZyBlbnRyeQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogIDMxICAgICAgICAgICAgICAgICAgMTUgICAgICAgICAgICAgICAgIDAKKyAqICAuX19fX19fX19fX19fX19fX19fXy5fX19fX19fX19fX19fX19fX19fLgorICogIHw8LS0tLS0tLS0tLS0tICAgIFBhZCAwICAgIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wwCQkweDAwCisgKiAgfDwtLS0tLS0tLS0tLS0gICAgUGFkIDEgICAgLS0tLS0tLS0tLS0tPnwKKyAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDQJCTB4MDQKKyAqICB8PC0tLS0tLS0tLS0tLSAgICBQYWQgMiAgICAtLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198OCAJCTB4MDgKKyAqICB8PC0tLS0tLS0tLS0tIEV2ZW50IFdvcmQgMCAtLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198MTIJCTB4MGMKKyAqICB8PC0tLS0tLS0tLS0tIEV2ZW50IFdvcmQgMSAtLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198MTYJCTB4MTAKKyAqICB8PC0tLS0tLS0tLS0tLS0gVG9lcGxpdHogICAtLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198MjAJCTB4MTQKKyAqICB8PC0tLS0tIExlbmd0aCAtLS0tPnw8LS0tLS0tIFRDQiBJZCAtLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198MjQJCTB4MTgKKyAqICB8PC0tLS0tIFN0YXR1cyAtLS0tPnxFdm50IENvZGV8RmxzaCBDb2RlfAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198MjgJCTB4MWMKKyAqICAgXiAgICAgICAgICAgICAgICAgICBeXl5eIF5eXl4KKyAqICAgfC0gVkFMSUQgICAgICAgICAgICB8fHx8IHx8fHwtIFJCVUZDCisgKiAgICAgICAgICAgICAgICAgICAgICAgfHx8fCB8fHwtLSBTTE9XUgorICogICAgICAgICAgICAgICAgICAgICAgIHx8fHwgfHwtLS0gVU5VU0VECisgKiAgICAgICAgICAgICAgICAgICAgICAgfHx8fCB8LS0tLSBGQVNUQworICogICAgICAgICAgICAgICAgICAgICAgIHx8fHwtLS0tLS0gRkFTVFIKKyAqICAgICAgICAgICAgICAgICAgICAgICB8fHwtLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgfHwtLS0tLS0tLQorICogICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0KKyAqCisgKiBTbG93cGF0aCBzdGF0dXM6CisgKiAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICogIHw8LS0tLS0gU3RhdHVzIC0tLS0+fEV2bnQgQ29kZXxGbHNoIENvZGV8CisgKiAgfF9fX19fX19fX3xDbWQgSW5kZXh8X19fX19fX19ffF9fX19fX19fX3wyOAkJMHgxYworICogICAgXl5eIF5eXl4KKyAqICAgIHx8fCB8fHx8LSBJU1RDUElQNgorICogICAgfHx8IHx8fC0tIElQT05MWQorICogICAgfHx8IHx8LS0tIFJDVkVSUgorICogICAgfHx8IHwtLS0tIElQQ0JBRAorICogICAgfHx8LS0tLS0tIFRDUENCQUQKKyAqICAgIHx8LS0tLS0tLSBJU1RDUElQCisgKiAgICB8LS0tLS0tLS0gU0NFUlIKKyAqCisgKi8KKyNwcmFnbWEgcGFjayhwdXNoLCAxKQordHlwZWRlZiBzdHJ1Y3QgX1NYR19FVkVOVCB7CisJdTMyCQkJUGFkWzFdOwkJLy8gbm90IHVzZWQKKwl1MzIJCQlTbmRVbmE7CQkvLyBTbmRVbmEgdmFsdWUKKwl1MzIJCQlSZXNpZDsJCS8vIHJlY2VpdmUgTURMIHJlc2lkCisJdW5pb24geworCQl2b2lkICoJCUhvc3RIYW5kbGU7CS8vIFJlY2VpdmUgaG9zdCBoYW5kbGUKKwkJdTMyCQlSc3ZkMTsJCS8vIFRPRSBOQQorCQlzdHJ1Y3QgeworCQkJdTMyCU5vdFVzZWQ7CisJCQl1MzIJUnN2ZDI7CQkvLyBUT0UgTkEKKwkJfSBGbHVzaDsKKwl9OworCXUzMgkJCVRvZXBsaXR6OwkvLyBSU1MgVG9lcGxpdHogaGFzaAorCXVuaW9uIHsKKwkJdXNob3J0CQlSc3ZkMzsJCS8vIFRPRSBOQQorCQl1c2hvcnQJCUhkck9mZnNldDsJLy8gU2xvd3BhdGgKKwl9OworCXVzaG9ydAkJCUxlbmd0aDsJCS8vCisJdW5zaWduZWQgY2hhciAJCVJzdmQ0OwkJLy8gVE9FIE5BCisJdW5zaWduZWQgY2hhciAJCUNvZGU7CQkvLyBFdmVudCBjb2RlCisJdW5zaWduZWQgY2hhcgkJQ29tbWFuZEluZGV4OwkvLyBOZXcgcmluZyBpbmRleAorCXVuc2lnbmVkIGNoYXIJCVN0YXR1czsJCS8vIEV2ZW50IHN0YXR1cworfSBTWEdfRVZFTlQsICpQU1hHX0VWRU5UOworI3ByYWdtYSBwYWNrKHBvcCkKKworLy8gRXZlbnQgY29kZSBkZWZpbml0aW9ucworI2RlZmluZSBFVkVOVF9DT0RFX0JVRkZFUlMJMHgwMQkvLyBSZWNlaXZlIGJ1ZmZlciBsaXN0IGNvbW1hbmQgKHJpbmcgMCkKKyNkZWZpbmUgRVZFTlRfQ09ERV9TTE9XUkNWCTB4MDIJLy8gU2xvd3BhdGggcmVjZWl2ZQorI2RlZmluZSBFVkVOVF9DT0RFX1VOVVNFRAkweDA0CS8vIFdhcyBzbG93cGF0aCBjb21tYW5kcyBjb21wbGV0ZQorCisvLyBTdGF0dXMgdmFsdWVzCisjZGVmaW5lIEVWRU5UX1NUQVRVU19WQUxJRAkweDgwCS8vIEVudHJ5IHZhbGlkCisKKy8vIFNsb3dwYXRoIHN0YXR1cworI2RlZmluZSBFVkVOVF9TVEFUVVNfRVJST1IJMHg0MAkvLyBDb21wbGV0ZWQgd2l0aCBlcnJvci4gSW5kZXggaW4gbmV4dCBieXRlCisjZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BJUDQJMHgyMAkvLyBUQ1BJUHY0IGZyYW1lCisjZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BCQUQJMHgxMAkvLyBCYWQgVENQIGNoZWNrc3VtCisjZGVmaW5lIEVWRU5UX1NUQVRVU19JUEJBRAkweDA4CS8vIEJhZCBJUCBjaGVja3N1bQorI2RlZmluZSBFVkVOVF9TVEFUVVNfUkNWRVJSCTB4MDQJLy8gU2xvd3BhdGggcmVjZWl2ZSBlcnJvcgorI2RlZmluZSBFVkVOVF9TVEFUVVNfSVBPTkxZCTB4MDIJLy8gSVAgZnJhbWUKKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUElQNgkweDAxCS8vIFRDUElQdjYgZnJhbWUKKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUElQCTB4MjEJLy8gQ29tYmluYXRpb24gb2YgdjQgYW5kIHY2CisKKy8vIEV2ZW50IHJpbmcKKy8vIFNpemUgbXVzdCBiZSBwb3dlciBvZiAyLCBiZXR3ZWVuIDEyOCBhbmQgMTZrCisjZGVmaW5lIEVWRU5UX1JJTkdfU0laRQkJNDA5NgkvLyA/PworI2RlZmluZSBFVkVOVF9SSU5HX0JBVENICTE2CQkvLyBIYW5kIGVudHJpZXMgYmFjayAxNiBhdCBhIHRpbWUuCisjZGVmaW5lIEVWRU5UX0JBVENIX0xJTUlUCTI1NgkgICAgLy8gU3RvcCBwcm9jZXNzaW5nIGV2ZW50cyBhZnRlciAyNTYgKDE2ICogMTYpCisKK3R5cGVkZWYgc3RydWN0IF9TWEdfRVZFTlRfUklORyB7CisJU1hHX0VWRU5UCVJpbmdbRVZFTlRfUklOR19TSVpFXTsKK31TWEdfRVZFTlRfUklORywgKlBTWEdfRVZFTlRfUklORzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRDQiBCdWZmZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIE1heGltdW0gbnVtYmVyIG9mIFRDQlMgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlL21pY3JvY29kZQorI2RlZmluZSBTWEdfTUFYX1RDQgkJNDA5NgorLy8gTWluaW11bSBUQ0JzIGJlZm9yZSB3ZSBmYWlsIGluaXRpYWxpemF0aW9uCisjZGVmaW5lIFNYR19NSU5fVENCCQk1MTIKKy8vIFRDQiBIYXNoCisvLyBUaGUgYnVja2V0IGlzIGRldGVybWluZWQgYnkgYml0cyAxMTo0IG9mIHRoZSB0b2VwbGl0eiBpZiB3ZSBzdXBwb3J0IDRrCisvLyBvZmZsb2FkZWQgY29ubmVjdGlvbnMsIDEwOjQgaWYgd2Ugc3VwcG9ydCAyayBhbmQgc28gb24uCisjZGVmaW5lIFNYR19UQ0JfQlVDS0VUX1NISUZUCTQKKyNkZWZpbmUgU1hHX1RDQl9QRVJfQlVDS0VUCQkxNgorI2RlZmluZSBTWEdfVENCX0JVQ0tFVF9NQVNLCQkweEZGMAkvLyBCdWNrZXQgcG9ydGlvbiBvZiBUQ0IgSUQKKyNkZWZpbmUgU1hHX1RDQl9FTEVNRU5UX01BU0sJMHgwMEYJLy8gRWxlbWVudCB3aXRoaW4gYnVja2V0CisjZGVmaW5lIFNYR19UQ0JfQlVDS0VUUwkJCTI1NgkJLy8gMjU2ICogMTYgPSA0aworCisjZGVmaW5lIFNYR19UQ0JfQlVGRkVSX1NJWkUJNTEyCS8vIEFTU0VSVCBmb3JtYXQgaXMgY29ycmVjdAorCisjZGVmaW5lIFNYR19UQ0JfUkNWUV9TSVpFCQk3MzYKKworI2RlZmluZSBTWEdfVENCX0NPTVBPU0lURV9CVUZGRVJfU0laRQkxMDI0CisKKyNkZWZpbmUgU1hHX0xPQ0FURV9UQ1BfRlJBTUVfSERSKF9UY3BPYmplY3QsIF9JUHY2KQkJCQkJCQlcCisJKCgoX1RjcE9iamVjdCktPlZsYW5JZCkgPwkJCQkJCQkJCQkJCVwKKwkgKChfSVB2NikgPwkJLyogVmxhbiBmcmFtZSBoZWFkZXIgPSB5ZXMgKi8JCQkJCQkJXAorCSAgJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuSGFzVmxhbi5UY3BJcDYuU3hnVGNwCQkJOglcCisJICAmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwLlN4Z1RjcCkJCQk6IAlcCisJICgoX0lQdjYpID8JCS8qIFZsYW4gZnJhbWUgaGVhZGVyID0gTm8gKi8JCQkJCQkJXAorCSAgJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuTm9WbGFuLlRjcElwNi5TeGdUY3AJCQkJOiAJXAorCSAgJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuTm9WbGFuLlRjcElwLlN4Z1RjcCkpCisKKyNkZWZpbmUgU1hHX0xPQ0FURV9JUF9GUkFNRV9IRFIoX1RjcE9iamVjdCkJCQkJCQkJCQlcCisJKF9UY3BPYmplY3QpLT5WbGFuSWQgPwkJCQkJCQkJCQkJCQlcCisJJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuSGFzVmxhbi5UY3BJcC5JcAkJCQk6IAkJXAorCSYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLk5vVmxhbi5UY3BJcC5JcAorCisjZGVmaW5lIFNYR19MT0NBVEVfSVA2X0ZSQU1FX0hEUihfVGNwT2JqZWN0KQkJCQkJCQkJXAorCShfVGNwT2JqZWN0KS0+VmxhbklkID8JCQkJCQkJCQkJCQkJXAorCSYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXA2LklwCQkJCToJCVwKKwkmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5Ob1ZsYW4uVGNwSXA2LklwCisKKworI2lmIERCRworLy8gSG9ycmlibGUga2x1ZGdlIHRvIGRpc3Rpbmd1aXNoIGR1bWItbmljLCBzbG93cGF0aCwgYW5kCisvLyBmYXN0cGF0aCB0cmFmZmljLiAgRGVjcmVtZW50IHRoZSBIb3BMaW1pdCBieSBvbmUKKy8vIGZvciBzbG93cGF0aCwgdHdvIGZvciBmYXN0cGF0aC4gIFRoaXMgYXNzdW1lcyB0aGUgbGltaXQgaXMgbWVhc3VyYWJseQorLy8gZ3JlYXRlciB0aGFuIHR3bywgd2hpY2ggSSB0aGluayBpcyByZWFzb25hYmxlLgorLy8gT2J2aW91c2x5IHRoaXMgaXMgREJHIG9ubHkuICBNYXliZSByZW1vdmUgbGF0ZXIsIG9yICNpZiAwIHNvIHdlCisvLyBjYW4gc2V0IGl0IHdoZW4gbmVlZGVkCisjZGVmaW5lIFNYR19EQkdfSE9QX0xJTUlUKF9UY3BPYmplY3QsIF9GYXN0UGF0aCkgewkJCQkJCQkJXAorCVBJUFY2X0hEUgkJX0lwNkZyYW1lSGRyOwkJCQkJCQkJCQkJCVwKKwlpZigoX1RjcE9iamVjdCktPklQdjYpIHsJCQkJCQkJCQkJCQkJXAorCQlfSXA2RnJhbWVIZHIgPSBTWEdfTE9DQVRFX0lQNl9GUkFNRV9IRFIoKF9UY3BPYmplY3QpKTsJCQkJCVwKKwkJaWYoX0Zhc3RQYXRoKSB7CQkJCQkJCQkJCQkJCQkJXAorCQkJX0lwNkZyYW1lSGRyLT5Ib3BMaW1pdCA9IChfVGNwT2JqZWN0KS0+Q2FjaGVkLlR0bE9ySG9wTGltaXQgLSAyOwlcCisJCX0gZWxzZSB7CQkJCQkJCQkJCQkJCQkJCVwKKwkJCV9JcDZGcmFtZUhkci0+SG9wTGltaXQgPSAoX1RjcE9iamVjdCktPkNhY2hlZC5UdGxPckhvcExpbWl0IC0gMTsJXAorCQl9CQkJCQkJCQkJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCQkJXAorfQorI2Vsc2UKKy8vIERvIG5vdGhpbmcgd2l0aCBmcmVlIGJ1aWxkCisjZGVmaW5lIFNYR19EQkdfSE9QX0xJTUlUKF9UY3BPYmplY3QsIF9GYXN0UGF0aCkKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZWNlaXZlIGFuZCB0cmFuc21pdCByaW5ncworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU1hHX01BWF9SSU5HX1NJWkUJMjU2CisjZGVmaW5lIFNYR19YTVRfUklOR19TSVpFCTEyOAkJLy8gU3RhcnQgd2l0aCAxMjgKKyNkZWZpbmUgU1hHX1JDVl9SSU5HX1NJWkUJMTI4CQkvLyBTdGFydCB3aXRoIDEyOAorI2RlZmluZSBTWEdfTUFYX0VOVFJJRVMgICAgIDQwOTYKKworLy8gU3RydWN0dXJlIGFuZCBtYWNyb3MgdG8gbWFuYWdlIGEgcmluZwordHlwZWRlZiBzdHJ1Y3QgX1NYR19SSU5HX0lORk8geworCXVuc2lnbmVkIGNoYXIJCQlIZWFkOwkJLy8gV2hlcmUgd2UgYWRkIGVudHJpZXMgLSBOb3RlIHVuc2lnbmVkIGNoYXI6UklOR19TSVpFCisJdW5zaWduZWQgY2hhcgkJCVRhaWw7CQkvLyBXaGVyZSB3ZSBwdWxsIG9mZiBjb21wbGV0ZWQgZW50cmllcworCXVzaG9ydAkJCVNpemU7CQkvLyBSaW5nIHNpemUgLSBNdXN0IGJlIG11bHRpcGxlIG9mIDIKKwl2b2lkICoJCQlDb250ZXh0W1NYR19NQVhfUklOR19TSVpFXTsJLy8gU2hhZG93IHJpbmcKK30gU1hHX1JJTkdfSU5GTywgKlBTWEdfUklOR19JTkZPOworCisjZGVmaW5lIFNYR19JTklUSUFMSVpFX1JJTkcoX3JpbmcsIF9zaXplKSB7CQkJCQkJCVwKKwkoX3JpbmcpLkhlYWQgPSAwOwkJCQkJCQkJCQkJCVwKKwkoX3JpbmcpLlRhaWwgPSAwOwkJCQkJCQkJCQkJCVwKKwkoX3JpbmcpLlNpemUgPSAoX3NpemUpOwkJCQkJCQkJCQkJXAorfQorI2RlZmluZSBTWEdfQURWQU5DRV9JTkRFWChfaW5kZXgsIF9zaXplKSAoKF9pbmRleCkgPSAoKF9pbmRleCkgKyAxKSAmICgoX3NpemUpIC0gMSkpCisjZGVmaW5lIFNYR19QUkVWSU9VU19JTkRFWChfaW5kZXgsIF9zaXplKSAoKChfaW5kZXgpIC0gMSkgJigoX3NpemUpIC0gMSkpCisjZGVmaW5lIFNYR19SSU5HX0VNUFRZKF9yaW5nKSAoKF9yaW5nKS0+SGVhZCA9PSAoX3JpbmcpLT5UYWlsKQorI2RlZmluZSBTWEdfUklOR19GVUxMKF9yaW5nKSAoKCgoX3JpbmcpLT5IZWFkICsgMSkgJiAoKF9yaW5nKS0+U2l6ZSAtIDEpKSA9PSAoX3JpbmcpLT5UYWlsKQorI2RlZmluZSBTWEdfUklOR19BRFZBTkNFX0hFQUQoX3JpbmcpIFNYR19BRFZBTkNFX0lOREVYKChfcmluZyktPkhlYWQsICgoX3JpbmcpLT5TaXplKSkKKyNkZWZpbmUgU1hHX1JJTkdfUkVUUkVBVF9IRUFEKF9yaW5nKSAoKF9yaW5nKS0+SGVhZCA9CQkJCVwKKwkJCQkJCQkJCSAgU1hHX1BSRVZJT1VTX0lOREVYKChfcmluZyktPkhlYWQsIChfcmluZyktPlNpemUpKQorI2RlZmluZSBTWEdfUklOR19BRFZBTkNFX1RBSUwoX3JpbmcpIHsJCQkJCQkJCVwKKwlBU1NFUlQoKF9yaW5nKS0+VGFpbCAhPSAoX3JpbmcpLT5IZWFkKTsJCQkJCQkJXAorCVNYR19BRFZBTkNFX0lOREVYKChfcmluZyktPlRhaWwsICgoX3JpbmcpLT5TaXplKSk7CQkJCVwKK30KKy8vIFNldCBjbWQgdG8gdGhlIG5leHQgYXZhaWxhYmxlIHJpbmcgZW50cnksIHNldCB0aGUgc2hhZG93IGNvbnRleHQKKy8vIGVudHJ5IGFuZCBhZHZhbmNlIHRoZSByaW5nLgorLy8gVGhlIGFwcHJvcHJpYXRlIGxvY2sgbXVzdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIG1hY3JvCisjZGVmaW5lIFNYR19HRVRfQ01EKF9yaW5nLCBfcmluZ2luZm8sIF9jbWQsIF9jb250ZXh0KSB7CQkJCVwKKwlpZihTWEdfUklOR19GVUxMKF9yaW5naW5mbykpIHsJCQkJCQkJCQlcCisJCShfY21kKSA9IE5VTEw7CQkJCQkJCQkJCQkJXAorCX0gZWxzZSB7CQkJCQkJCQkJCQkJCQlcCisJCShfY21kKSA9ICYoX3JpbmcpLT5EZXNjcmlwdG9yc1soX3JpbmdpbmZvKS0+SGVhZF07CQkJXAorCQkoX3JpbmdpbmZvKS0+Q29udGV4dFsoX3JpbmdpbmZvKS0+SGVhZF0gPSAodm9pZCAqKShfY29udGV4dCk7XAorCQlTWEdfUklOR19BRFZBTkNFX0hFQUQoX3JpbmdpbmZvKTsJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJXAorfQorCisvLyBBYm9ydCB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgY29tbWFuZCBieSByZXRyZWF0aW5nIHRoZSBoZWFkLgorLy8gTk9URSAtIFRoZSBhcHBvcHJpYXRlIGxvY2sgTVVTVCBOT1QgQkUgRFJPUFBFRCBiZXR3ZWVuIHRoZSBTWEdfR0VUX0NNRAorLy8gYW5kIFNYR19BQk9SVF9DTUQgY2FsbHMuCisjZGVmaW5lIFNYR19BQk9SVF9DTUQoX3JpbmdpbmZvKSB7CQkJCQkJCQkJXAorCUFTU0VSVCghKFNYR19SSU5HX0VNUFRZKF9yaW5naW5mbykpKTsJCQkJCQkJXAorCVNYR19SSU5HX1JFVFJFQVRfSEVBRChfcmluZ2luZm8pOwkJCQkJCQkJXAorCShfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5IZWFkXSA9IE5VTEw7CQkJCQlcCit9CisKKy8vIEZvciB0aGUgZ2l2ZW4gcmluZywgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdGFpbCBjbWQgYW5kIGNvbnRleHQsCisvLyBjbGVhciB0aGUgY29udGV4dCBhbmQgYWR2YW5jZSB0aGUgdGFpbAorI2RlZmluZSBTWEdfUkVUVVJOX0NNRChfcmluZywgX3JpbmdpbmZvLCBfY21kLCBfY29udGV4dCkgewkJCVwKKwkoX2NtZCkgPSAmKF9yaW5nKS0+RGVzY3JpcHRvcnNbKF9yaW5naW5mbyktPlRhaWxdOwkJCQlcCisJKF9jb250ZXh0KSA9IChfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5UYWlsXTsgICAgICAgCVwKKwkoX3JpbmdpbmZvKS0+Q29udGV4dFsoX3JpbmdpbmZvKS0+VGFpbF0gPSBOVUxMOwkJCQkJXAorCVNYR19SSU5HX0FEVkFOQ0VfVEFJTChfcmluZ2luZm8pOwkJCQkJCQkJXAorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogSG9zdCBDb21tYW5kIEJ1ZmZlciAtIGNvbW1hbmRzIHRvIElOSUMgdmlhIHRoZSBDbWQgUmluZ3MKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICAzMSAgICAgICAgICAgICAgICAgIDE1ICAgICAgICAgICAgICAgICAwCisgKiAgLl9fX19fX19fX19fX19fX19fX18uX19fX19fX19fX19fX19fX19fXy4KKyAqICB8PC0tLS0tLS0tLS0tLS0tIFNnbCBMb3cgLS0tLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198MAkJMHgwMAorICogIHw8LS0tLS0tLS0tLS0tLS0gU2dsIEhpZ2ggLS0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3w0CQkweDA0CisgKiAgfDwtLS0tLS0tLS0tLS0tICBTZ2UgMCBMb3cgIC0tLS0tLS0tLS0tPnwKKyAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDggCQkweDA4CisgKiAgfDwtLS0tLS0tLS0tLS0tICBTZ2UgMCBIaWdoIC0tLS0tLS0tLS0tPnwKKyAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDEyCQkweDBjCisgKiAgfDwtLS0tLS0tLS0tLS0gIFNnZSAwIExlbmd0aCAtLS0tLS0tLS0tPnwKKyAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDE2CQkweDEwCisgKiAgfDwtLS0tLS0tLS0tLSBXaW5kb3cgVXBkYXRlIC0tLS0tLS0tLS0tPnwKKyAqICB8PC0tLS0tLS0tIFNQIDFzdCBTR0Ugb2Zmc2V0IC0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198MjAJCTB4MTQKKyAqICB8PC0tLS0tLS0tLS0tIFRvdGFsIExlbmd0aCAtLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198MjQJCTB4MTgKKyAqICB8PC0tLS0tIExDbnQgLS0tLS0tPnw8LS0tLS0gRmxhZ3MgLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198MjgJCTB4MWMKKyAqLworI3ByYWdtYSBwYWNrKHB1c2gsIDEpCit0eXBlZGVmIHN0cnVjdCBfU1hHX0NNRCB7CisJZG1hX2FkZHJfdCAgICAgICAgICAgICAJCQlTZ2w7CQkJLy8gUGh5c2ljYWwgYWRkcmVzcyBvZiBTR0wKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlkbWE2NF9hZGRyX3QgICAgICAgICAgCUZpcnN0U2dlQWRkcmVzczsvLyBBZGRyZXNzIG9mIGZpcnN0IFNHRQorCQkJdTMyCQkJCQlGaXJzdFNnZUxlbmd0aDsJLy8gTGVuZ3RoIG9mIGZpcnN0IFNHRQorCQkJdW5pb24geworCQkJCXUzMgkJCQlSc3ZkMTsJICAgICAgICAvLyBUT0UgTkEKKwkJCQl1MzIJCQkJU2dlT2Zmc2V0OwkJLy8gU2xvd3BhdGggLSAybmQgU0dFIG9mZnNldAorCQkJCXUzMgkJCQlSZXNpZDsJCQkvLyBNREwgY29tcGxldGlvbiAtIGNsb2JiZXJzIHVwZGF0ZQorCQkJfTsKKwkJCXVuaW9uIHsKKwkJCQl1MzIJCQkJVG90YWxMZW5ndGg7CS8vIFRvdGFsIHRyYW5zZmVyIGxlbmd0aAorCQkJCXUzMgkJCQlNc3M7CQkJLy8gTFNPIE1TUworCQkJfTsKKwkJfSBCdWZmZXI7CisJfTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBjaGFyCQkJCQlGbGFnczo0OwkJLy8gc2xvd3BhdGggZmxhZ3MKKwkJCXVuc2lnbmVkIGNoYXIJCQkJCUlwSGw6NDsJCQkvLyBJcCBoZWFkZXIgbGVuZ3RoICg+PjIpCisJCQl1bnNpZ25lZCBjaGFyCQkJCQlNYWNMZW47CQkJLy8gTWFjIGhlYWRlciBsZW4KKwkJfSBDc3VtRmxhZ3M7CisJCXN0cnVjdCB7CisJCQl1c2hvcnQJCQkJCUZsYWdzOjQ7CQkvLyBzbG93cGF0aCBmbGFncworCQkJdXNob3J0CQkJCQlUY3BIZHJPZmY6NzsJLy8gVENQCisJCQl1c2hvcnQJCQkJCU1hY0xlbjo1OwkJLy8gTWFjIGhlYWRlciBsZW4KKwkJfSBMc29GbGFnczsKKwkJdXNob3J0CQkJCQkJRmxhZ3M7CQkJLy8gZmxhZ3MKKwl9OworCXVuaW9uIHsKKwkJdXNob3J0CQkJCQkJU2dFbnRyaWVzOwkJLy8gU0cgZW50cnkgY291bnQgaW5jbHVkaW5nIGZpcnN0IHNnZQorCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgY2hhcgkJCQkJU3RhdHVzOwkJICAgIC8vIENvcGllZCBmcm9tIGV2ZW50IHN0YXR1cworCQkJdW5zaWduZWQgY2hhcgkJCQkJTm90VXNlZDsKKwkJfSBTdGF0dXM7CisJfTsKK30gU1hHX0NNRCwgKlBTWEdfQ01EOworI3ByYWdtYSBwYWNrKHBvcCkKKworI3ByYWdtYSBwYWNrKHB1c2gsIDEpCit0eXBlZGVmIHN0cnVjdCBfVkxBTl9IRFIgeworCXVzaG9ydAlWbGFuVGNpOworCXVzaG9ydAlWbGFuVHBpZDsKK30gVkxBTl9IRFIsICpQVkxBTl9IRFI7CisjcHJhZ21hIHBhY2socG9wKQorCisvKgorICogU2xvd3BhdGggRmxhZ3M6CisgKgorICoKKyAqIExTUyBGbGFnczoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy4tLS0gVENQIExhcmdlIHNlZ21lbnQgc2VuZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLi0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLi0tLQorICogIDMgICAgICAgICAgICAgICAgICAgMSAgICAgMSAgICAgICAvLy8vCisgKiAgMSAgICAgICAgICAgICAgICAgICA1ICAgICAwICAgICAgfHx8fAorICogIC5fX19fX19fX19fX19fX19fX19fLl9fX19fX19fX19fX3Z2dnYuCisgKiAgfCAgICAgICAgICAgICAgICAgICB8TUFDIHwgIFRDUCB8ICAgIHwKKyAqICB8ICAgICAgTENudCAgICAgICAgIHxobGVufGhkcm9mZnxGbGdzfAorICogIHxfX19fX19fX19fX19fX19fX19ffHx8fHx8fHx8fHx8fF9fX198CisgKgorICoKKyAqIENoZWNrc3VtIEZsYWdzCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLi0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLi0tLSBDaGVja3N1bSBUQ1AKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy4tLS0gQ2hlY2tzdW0gSVAKKyAqICAzICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgLy8vLyBObyBiaXRzIC0gbm9ybWFsIHNlbmQKKyAqICAxICAgICAgICAgICAgICAgICAgIDUgICAgICAgICAgNyAgICB8fHx8CisgKiAgLl9fX19fX19fX19fX19fX19fX18uX19fX19fX19fX19fX19fdnZ2di4KKyAqICB8ICAgICAgICAgICAgICAgICAgIHwgT2ZmbG9hZCB8IElQIHwgICAgfAorICogIHwgICAgICBMQ250ICAgICAgICAgfE1BQyBobGVuIHxIbGVufEZsZ3N8CisgKiAgfF9fX19fX19fX19fX19fX19fX198X19fX3xfX19ffF9fX198X19fX3wKKyAqCisgKi8KKy8vIFNsb3dwYXRoIENNRCBmbGFncworI2RlZmluZSBTWEdfU0xPV0NNRF9DU1VNX0lQCQkJMHgwMQkJLy8gQ2hlY2tzdW0gSVAKKyNkZWZpbmUgU1hHX1NMT1dDTURfQ1NVTV9UQ1AJCTB4MDIJCS8vIENoZWNrc3VtIFRDUAorI2RlZmluZSBTWEdfU0xPV0NNRF9MU08JCQkJMHgwNAkJLy8gTGFyZ2Ugc2VnbWVudCBzZW5kCisKK3R5cGVkZWYgc3RydWN0IF9TWEdfWE1UX1JJTkcgeworCVNYR19DTUQJCURlc2NyaXB0b3JzW1NYR19YTVRfUklOR19TSVpFXTsKK30gU1hHX1hNVF9SSU5HLCAqUFNYR19YTVRfUklORzsKKwordHlwZWRlZiBzdHJ1Y3QgX1NYR19SQ1ZfUklORyB7CisJU1hHX0NNRAkJRGVzY3JpcHRvcnNbU1hHX1JDVl9SSU5HX1NJWkVdOworfSBTWEdfUkNWX1JJTkcsICpQU1hHX1JDVl9SSU5HOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTaGFyZSBtZW1vcnkgYnVmZmVyIHR5cGVzIC0gVXNlZCB0byBpZGVudGlmeSBhc3luY2hyb25vdXMKKyAqIHNoYXJlZCBtZW1vcnkgYWxsb2NhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bSB7CisJU1hHX0JVRkZFUl9UWVBFX1JDViwJCS8vIFJlY2VpdmUgYnVmZmVyCisJU1hHX0JVRkZFUl9UWVBFX1NHTAkJCS8vIFNHTCBidWZmZXIKK30gU1hHX0JVRkZFUl9UWVBFOworCisvLyBTdGF0ZSBmb3IgU1hHIGJ1ZmZlcnMKKyNkZWZpbmUgU1hHX0JVRkZFUl9GUkVFCQkweDAxCisjZGVmaW5lIFNYR19CVUZGRVJfQlVTWQkJMHgwMgorI2RlZmluZSBTWEdfQlVGRkVSX09OQ0FSRAkweDA0CisjZGVmaW5lIFNYR19CVUZGRVJfVVBTVFJFQU0JMHgwOAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZWNlaXZlIGRhdGEgYnVmZmVycworICoKKyAqIFJlY2VpdmUgZGF0YSBidWZmZXJzIGFyZSBnaXZlbiB0byB0aGUgU2FoYXJhIGNhcmQgMTI4IGF0IGEgdGltZS4KKyAqIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IGZpbGxpbmcgaW4gYSAicmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrIgorICogd2l0aCAxMjggInJlY2VpdmUgZGVzY3JpcHRvcnMiLiAgRWFjaCBkZXNjcmlwdG9yIGNvbnNpc3RzIG9mCisgKiBhIHBoeXNpY2FsIGFkZHJlc3MsIHdoaWNoIHRoZSBjYXJkIHVzZXMgYXMgdGhlIGFkZHJlc3MgdG8KKyAqIERNQSBkYXRhIGludG8sIGFuZCBhIHZpcnR1YWwgYWRkcmVzcywgd2hpY2ggaXMgZ2l2ZW4gYmFjaworICogdG8gdGhlIGhvc3QgaW4gdGhlICJIb3N0SGFuZGxlIiBwb3J0aW9uIG9mIGFuIGV2ZW50LgorICogVGhlIHJlY2VpdmUgZGVzY3JpcHRvciBkYXRhIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGJlbG93CisgKiBhcyBTWEdfUkNWX0RBVEFfREVTQ1JJUFRPUiwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGJsb2NrCisgKiBpcyBkZWZpbmVkIGFzIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSy4KKyAqCisgKiBUaGlzIHJlY2VpdmUgZGVzY3JpcHRvciBibG9jayBpcyBnaXZlbiB0byB0aGUgY2FyZCBieSBmaWxsaW5nCisgKiBpbiB0aGUgU2dsIGZpZWxkIG9mIGEgU1hHX0NNRCBlbnRyeSBmcm9tIHBBZGFwdC0+UmN2UmluZ3NbMF0KKyAqIHdpdGggdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBibG9jay4KKyAqCisgKiBCb3RoIHRoZSByZWNlaXZlIGJ1ZmZlcnMgYW5kIHRoZSByZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2tzCisgKiByZXF1aXJlIGFkZGl0aW9uYWwgZGF0YSBzdHJ1Y3R1cmVzIHRvIG1haW50YWluIHRoZW0KKyAqIG9uIGEgZnJlZSBxdWV1ZSBhbmQgY29udGFpbiBvdGhlciBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlbS4KKyAqIFRob3NlIGRhdGEgc3RydWN0dXJlcyBhcmUgZGVmaW5lZCBhcyB0aGUgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIKKyAqIGFuZCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSIHJlc3BlY3RpdmVseS4KKyAqCisgKiBTaW5jZSBib3RoIHRoZSByZWNlaXZlIGJ1ZmZlcnMgYW5kIHRoZSByZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2sKKyAqIG11c3QgYmUgYWNjZXNzaWJsZSBieSB0aGUgY2FyZCwgYm90aCBtdXN0IGJlIGFsbG9jYXRlZCBvdXQgb2YKKyAqIHNoYXJlZCBtZW1vcnkuICBUbyBlbnN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIGRlc2NyaXB0b3IKKyAqIGJsb2NrIGF2YWlsYWJsZSBmb3IgZXZlcnkgMTI4IGJ1ZmZlcnMsIHdlIGFsbG9jYXRlIGFsbCBvZgorICogdGhlc2UgcmVzb3VyY2VzIHRvZ2V0aGVyIGluIGEgc2luZ2xlIGJsb2NrLiAgVGhpcyBlbnRpcmUKKyAqIGJsb2NrIGlzIG1hbmFnZWQgYnkgYSBTWEdfUkNWX0JMT0NLX0hEUiwgd2hvJ3Mgc29sZSBwdXJwb3NlCisgKiBpcyB0byBtYWludGFpbiBhZGRyZXNzIGluZm9ybWF0aW9uIHNvIHRoYXQgdGhlIGVudGlyZSBibG9jaworICogY2FuIGJlIGZyZWUgbGF0ZXIuCisgKgorICogRnVydGhlciBjb21wbGljYXRpbmcgbWF0dGVycyBpcyB0aGUgZmFjdCB0aGF0IHRoZSByZWNlaXZlCisgKiBidWZmZXJzIG11c3QgYmUgdmFyaWFibGUgaW4gbGVuZ3RoIGluIG9yZGVyIHRvIGFjY29tb2RhdGUKKyAqIGp1bWJvIGZyYW1lIGNvbmZpZ3VyYXRpb25zLiAgV2UgY29uZmlndXJlIHRoZSBidWZmZXIKKyAqIGxlbmd0aCBzbyB0aGF0IHRoZSBidWZmZXIgYW5kIGl0J3MgY29ycmVzcG9uZGluZyBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUgorICogc3RydWN0dXJlIGFkZCB1cCB0byBhbiBldmVuIGJvdW5kYXJ5LiAgVGhlbiB3ZSBwbGFjZSB0aGUKKyAqIHJlbWFpbmluZyBkYXRhIHN0cnVjdHVyZXMgYWZ0ZXIgMTI4IG9mIHRoZW0gYXMgc2hvd24gaW4KKyAqIHRoZSBmb2xsb3dpbmcgZGlhZ3JhbToKKyAqCisgKiAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgVmFyaWFibGUgbGVuZ3RoIHJlY2VpdmUgYnVmZmVyICMxICAgIHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICAgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgIzEgICAgICAgIHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wgPD09IEV2ZW4gMmsgb3IgMTBrIGJvdW5kYXJ5CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiB8ICAgICAgICAgLi4uIHJlcGVhdCAyLTEyOCAuLiAgICAgICAgICAgICB8CisgKiB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiB8ICAgICAgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLICAgICAgICAgICB8CisgKiB8ICBDb250YWlucyBTWEdfUkNWX0RBVEFfREVTQ1JJUFRPUiAqIDEyOCB8CisgKiB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiB8ICAgICAgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiAgICAgICB8CisgKiB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiB8ICAgICAgICAgIFNYR19SQ1ZfQkxPQ0tfSERSICAgICAgICAgICAgICB8CisgKiB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CisgKgorICogTWVtb3J5IGNvbnN1bXB0aW9uOgorICoJICBOb24tanVtYm86CisgKiAgICAgIEJ1ZmZlcnMgYW5kIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSID0gMmsgKiAxMjggPSAyNTZrCisgKiAgICArIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyA9IDJrCisgKiAgICArIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgPSB+MzIKKyAqICAgICsgU1hHX1JDVl9CTE9DS19IRFIgPSB+MzIKKyAqICAgID0+IFRvdGFsID0gfjI1OGsvYmxvY2sKKyAqCisgKgkgIEp1bWJvOgorICogICAgICBCdWZmZXJzIGFuZCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiA9IDEwayAqIDEyOCA9IDEyODBrCisgKiAgICArIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyA9IDJrCisgKiAgICArIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgPSB+MzIKKyAqICAgICsgU1hHX1JDVl9CTE9DS19IRFIgPSB+MzIKKyAqICAgID0+IFRvdGFsID0gfjEyODJrL2Jsb2NrCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU1hHX1JDVl9EQVRBX0JVRkZFUlMJCQk0MDk2CS8vIEFtb3VudCB0byBnaXZlIHRvIHRoZSBjYXJkCisjZGVmaW5lIFNYR19JTklUSUFMX1JDVl9EQVRBX0JVRkZFUlMJODE5MgkvLyBJbml0aWFsIHBvb2wgb2YgYnVmZmVycworI2RlZmluZSBTWEdfTUlOX1JDVl9EQVRBX0JVRkZFUlMJCTIwNDgJLy8gTWluaW11bSBhbW91bnQgYW5kIHdoZW4gdG8gZ2V0IG1vcmUKKyNkZWZpbmUgU1hHX01BWF9SQ1ZfQkxPQ0tTCQkJCTEyOAkJLy8gPSAxNjM4NCByZWNlaXZlIGJ1ZmZlcnMKKworLy8gUmVjZWl2ZSBidWZmZXIgaGVhZGVyCit0eXBlZGVmIHN0cnVjdCBfU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgeworCWRtYV9hZGRyX3QgICAgICAgICAgCQkJUGh5c2ljYWxBZGRyZXNzOwkvLyBCdWZmZXIgcGh5c2ljYWwgYWRkcmVzcworCS8vIE5vdGUgLSBETyBOT1QgVVNFIHRoZSBWaXJ0dWFsQWRkcmVzcyBmaWVsZCB0byBsb2NhdGUgZGF0YS4KKwkvLyBVc2UgdGhlIHN4Zy5oOlNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04gbWFjcm8gaW5zdGVhZC4KKwl2b2lkICpWaXJ0dWFsQWRkcmVzczsJCS8vIFN0YXJ0IG9mIGJ1ZmZlcgorCUxJU1RfRU5UUlkJCQkJCQlGcmVlTGlzdDsJCQkvLyBGcmVlIHF1ZXVlIG9mIGJ1ZmZlcnMKKwlzdHJ1Y3QgX1NYR19SQ1ZfREFUQV9CVUZGRVJfSERSCSpOZXh0OwkJCQkvLyBGYXN0cGF0aCBkYXRhIGJ1ZmZlciBxdWV1ZQorCXUzMgkJCQkJCQlTaXplOwkJCQkvLyBCdWZmZXIgc2l6ZQorCXUzMgkJCQkJCQlCeXRlT2Zmc2V0OwkJCS8vIFNlZSBTWEdfUkVTVE9SRV9NRExfT0ZGU0VUCisJdW5zaWduZWQgY2hhcgkJCQkJCQlTdGF0ZTsJCQkJLy8gU2VlIFNYR19CVUZGRVIgc3RhdGUgYWJvdmUKKwl1bnNpZ25lZCBjaGFyCQkJCQkJCVN0YXR1czsJCQkJLy8gRXZlbnQgc3RhdHVzICh0byBsb2cgUFVTSCkKKwlzdHJ1Y3Qgc2tfYnVmZiAgICAgICAgICAgICAgICAqIHNrYjsJCQkJLy8gRG91YmxlIG1hcHBlZCAobmJsIGFuZCBwa3QpCit9IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSLCAqUFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSOworCisvLyBTeGdTbG93UmVjZWl2ZSB1c2VzIHRoZSBQQUNLRVQgKHNrYikgY29udGFpbmVkCisvLyBpbiB0aGUgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgd2hlbiBpbmRpY2F0aW5nIGR1bWItbmljIGRhdGEKKyNkZWZpbmUgU3hnRHVtYlJjdlBhY2tldAkgICAgICAgIHNrYgorCisjZGVmaW5lIFNYR19SQ1ZfREFUQV9IRFJfU0laRQkJCTI1NgkJLy8gU3BhY2UgZm9yIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSCisjZGVmaW5lIFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRQkJMjA0OAkvLyBOb24ganVtYm8gPSAyayBpbmNsdWRpbmcgSERSCisjZGVmaW5lIFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkUJCTEwMjQwCS8vIGp1bWJvID0gMTBrIGluY2x1ZGluZyBIRFIKKworLy8gUmVjZWl2ZSBkYXRhIGRlc2NyaXB0b3IKK3R5cGVkZWYgc3RydWN0IF9TWEdfUkNWX0RBVEFfREVTQ1JJUFRPUiB7CisJdW5pb24geworCQlzdHJ1Y3Qgc2tfYnVmZiAgICAqCVZpcnR1YWxBZGRyZXNzOwkJCS8vIEhvc3QgaGFuZGxlCisJCXU2NCAJCQlGb3JjZVRvOEJ5dGVzOwkJCS8vIEZvcmNlIHg4NiB0byA4LWJ5dGUgYm91bmRhcnkKKwl9OworCWRtYV9hZGRyX3QgICAgICAgICAgICAgCVBoeXNpY2FsQWRkcmVzczsKK30gU1hHX1JDVl9EQVRBX0RFU0NSSVBUT1IsICpQU1hHX1JDVl9EQVRBX0RFU0NSSVBUT1I7CisKKy8vIFJlY2VpdmUgZGVzY3JpcHRvciBibG9jaworI2RlZmluZSBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSwkJMTI4CisjZGVmaW5lIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19TSVpFCQkyMDQ4CS8vIEZvciBzYW5pdHkgY2hlY2sKK3R5cGVkZWYgc3RydWN0IF9TWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgeworCVNYR19SQ1ZfREFUQV9ERVNDUklQVE9SCQlEZXNjcmlwdG9yc1tTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DS107Cit9IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSywgKlBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0s7CisKKy8vIFJlY2VpdmUgZGVzY3JpcHRvciBibG9jayBoZWFkZXIKK3R5cGVkZWYgc3RydWN0IF9TWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSIHsKKwl2b2lkICoJCQkJCVZpcnR1YWxBZGRyZXNzOwkJCS8vIFN0YXJ0IG9mIDJrIGJ1ZmZlcgorCWRtYV9hZGRyX3QJICAgICAgICAgICAgUGh5c2ljYWxBZGRyZXNzOwkJLy8gLi5hbmQgaXQncyBwaHlzaWNhbCBhZGRyZXNzCisJTElTVF9FTlRSWQkJCQlGcmVlTGlzdDsJCQkJLy8gRnJlZSBxdWV1ZSBvZiBkZXNjcmlwdG9yIGJsb2NrcworCXVuc2lnbmVkIGNoYXIJCQkJCVN0YXRlOwkJCQkJLy8gU2VlIFNYR19CVUZGRVIgc3RhdGUgYWJvdmUKK30gU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiwgKlBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSOworCisvLyBSZWNlaXZlIGJsb2NrIGhlYWRlcgordHlwZWRlZiBzdHJ1Y3QgX1NYR19SQ1ZfQkxPQ0tfSERSIHsKKwl2b2lkICoJCQkJCVZpcnR1YWxBZGRyZXNzOwkJCS8vIFN0YXJ0IG9mIHZpcnR1YWwgbWVtb3J5CisJZG1hX2FkZHJfdAkgICAgICAgICAgICBQaHlzaWNhbEFkZHJlc3M7CQkvLyAuLmFuZCBpdCdzIHBoeXNpY2FsIGFkZHJlc3MKKwlMSVNUX0VOVFJZCQkJCUFsbExpc3Q7CQkJCS8vIFF1ZXVlIG9mIGFsbCBTWEdfUkNWX0JMT0NLUworfSBTWEdfUkNWX0JMT0NLX0hEUiwgKlBTWEdfUkNWX0JMT0NLX0hEUjsKKworLy8gTWFjcm9zIHRvIGRldGVybWluZSBkYXRhIHN0cnVjdHVyZSBvZmZzZXRzIGludG8gcmVjZWl2ZSBibG9jaworI2RlZmluZSBTWEdfUkNWX0JMT0NLX1NJWkUoX0J1ZmZlcnNpemUpIAkJCQkJXAorCSgoKF9CdWZmZXJzaXplKSAqIFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLKSArCQlcCisJIChzaXplb2YoU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLKSkgICAgICAgICAgICAgICsJCVwKKwkgKHNpemVvZihTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSKSkgICAgICAgICAgKwkJXAorCSAoc2l6ZW9mKFNYR19SQ1ZfQkxPQ0tfSERSKSkpCisjZGVmaW5lIFNYR19SQ1ZfQlVGRkVSX0RBVEFfU0laRShfQnVmZmVyc2l6ZSkJCQkJXAorCSgoX0J1ZmZlcnNpemUpIC0gU1hHX1JDVl9EQVRBX0hEUl9TSVpFKQorI2RlZmluZSBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCQkJXAorCSgoX0J1ZmZlcnNpemUpIC0gU1hHX1JDVl9EQVRBX0hEUl9TSVpFKQorI2RlZmluZSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfT0ZGU0VUKF9CdWZmZXJzaXplKQkJXAorCSgoX0J1ZmZlcnNpemUpICogU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spCisjZGVmaW5lIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFJfT0ZGU0VUKF9CdWZmZXJzaXplKQlcCisJKCgoX0J1ZmZlcnNpemUpICogU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spICsJCVwKKwkgKHNpemVvZihTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0spKSkKKyNkZWZpbmUgU1hHX1JDVl9CTE9DS19IRFJfT0ZGU0VUKF9CdWZmZXJzaXplKQkJCQlcCisJKCgoX0J1ZmZlcnNpemUpICogU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spICsJCVwKKwkgKHNpemVvZihTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0spKSAgICAgICAgICAgICAgKwkJXAorCSAoc2l6ZW9mKFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIpKSkKKworLy8gVXNlIHRoZSBtaW5pcG9ydCByZXNlcnZlZCBwb3J0aW9uIG9mIHRoZSBOQkwgdG8gbG9jYXRlCisvLyBvdXIgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgc3RydWN0dXJlLgordHlwZWRlZiBzdHJ1Y3QgX1NYR19SQ1ZfTkJMX1JFU0VSVkVEIHsKKwlQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIJUmN2RGF0YUJ1ZmZlckhkcjsKKwl2b2lkICoJCQkJCQlBdmFpbGFibGU7Cit9IFNYR19SQ1ZfTkJMX1JFU0VSVkVELCAqUFNYR19SQ1ZfTkJMX1JFU0VSVkVEOworCisjZGVmaW5lIFNYR19SQ1ZfTkJMX0JVRkZFUl9IRFIoX05CTCkgKCgoUFNYR19SQ1ZfTkJMX1JFU0VSVkVEKU5FVF9CVUZGRVJfTElTVF9NSU5JUE9SVF9SRVNFUlZFRChfTkJMKSktPlJjdkRhdGFCdWZmZXJIZHIpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNjYXR0ZXIgZ2F0aGVyIGxpc3QgYnVmZmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTWEdfSU5JVElBTF9TR0xfQlVGRkVSUwkJODE5MgkvLyBJbml0aWFsIHBvb2wgb2YgU0dMIGJ1ZmZlcnMKKyNkZWZpbmUgU1hHX01JTl9TR0xfQlVGRkVSUwkJCTIwNDgJLy8gTWluaW11bSBhbW91bnQgYW5kIHdoZW4gdG8gZ2V0IG1vcmUKKyNkZWZpbmUgU1hHX01BWF9TR0xfQlVGRkVSUwkJCTE2Mzg0CS8vIE1heGltdW0gdG8gYWxsb2NhdGUgKG5vdGUgQURBUFQ6dXNob3J0KQorCisKKy8vIFNlbGYgaWRlbnRpZnlpbmcgc3RydWN0dXJlIHR5cGUKK3R5cGVkZWYgZW51bSBfU1hHX1NHTF9UWVBFIHsKKwlTWEdfU0dMX0RVTUIsCQkJCS8vIER1bWIgTklDIFNHTAorCVNYR19TR0xfU0xPVywJCQkJLy8gU2xvd3BhdGggcHJvdG9jb2wgaGVhZGVyIC0gc2VlIGJlbG93CisJU1hHX1NHTF9DSElNTkVZCQkJCS8vIENoaW1uZXkgb2ZmbG9hZCBTR0wKK30gU1hHX1NHTF9UWVBFLCBQU1hHX1NHTF9UWVBFOworCisvLyBOb3RlIC0gdGhlIGRlc2NyaXB0aW9uIGJlbG93IGlzIE1pY3Jvc29mdCBzcGVjaWZpYworLy8KKy8vIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiBzcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IHRvIGFsbG9jYXRlCisvLyBmb3IgdGhlIFNDQVRURVJfR0FUSEVSX0xJU1QgcG9ydGlvbiBvZiB0aGUgU1hHX1NDQVRURVJfR0FUSEVSIGRhdGEgc3RydWN0dXJlLgorLy8gVGhlIGZvbGxvd2luZyBjb25zaWRlcmF0aW9ucyBhcHBseSB3aGVuIHNldHRpbmcgdGhpcyB2YWx1ZToKKy8vIC0gRmlyc3QsIHRoZSBTYWhhcmEgY2FyZCBpcyBkZXNpZ25lZCB0byByZWFkIHRoZSBNaWNyb3NvZnQgU0dMIHN0cnVjdHVyZQorLy8gCSBzdHJhaWdodCBvdXQgb2YgaG9zdCBtZW1vcnkuICBUaGlzIG1lYW5zIHRoYXQgdGhlIFNHTCBtdXN0IHJlc2lkZSBpbgorLy8JIHNoYXJlZCBtZW1vcnkuICBJZiB0aGUgbGVuZ3RoIGhlcmUgaXMgc21hbGxlciB0aGFuIHRoZSBTR0wgZm9yIHRoZQorLy8JIE5FVF9CVUZGRVIsIHRoZW4gTkRJUyB3aWxsIGFsbG9jYXRlIGl0cyBvd24gYnVmZmVyLiAgVGhlIGJ1ZmZlcgorLy8JIHRoYXQgTkRJUyBhbGxvY2F0ZXMgaXMgbm90IGluIHNoYXJlZCBtZW1vcnksIHNvIHdoZW4gdGhpcyBoYXBwZW5zLAorLy8JIHRoZSBTR0wgd2lsbCBuZWVkIHRvIGJlIGNvcGllZCB0byBhIHNldCBvZiBTWEdfU0NBVFRFUl9HQVRIRVIgYnVmZmVycy4KKy8vCSBJbiBvdGhlciB3b3Jkcy4uIHdlIGRvbid0IHdhbnQgdGhpcyB2YWx1ZSB0byBiZSB0b28gc21hbGwuCisvLyAtIE9uIHRoZSBvdGhlciBoYW5kLi4gd2UncmUgYWxsb2NhdGluZyB1cCB0byAxNmsgb2YgdGhlc2UgdGhpbmdzLiAgSWYKKy8vCSB3ZSBtYWtlIHRoaXMgdG9vIGJpZywgd2Ugc3RhcnQgdG8gY29uc3VtZSBhIHRvbiBvZiBtZW1vcnkuLgorLy8gQXQgdGhlIG1vbWVudCwgSSdtIGdvaW5nIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgU0cgZW50cmllcyB0byAxNTAuCisvLyBJZiBlYWNoIGVudHJ5IG1hcHMgcm91Z2hseSA0aywgdGhlbiB0aGlzIHNob3VsZCBjb3ZlciByb3VnaGx5IDYwMGtCCisvLyBORVRfQlVGRkVScy4gIEZ1cnRoZXJtb3JlLCBzaW5jZSBlYWNoIGVudHJ5IGlzIDI0IGJ5dGVzLCB0aGUgdG90YWwKKy8vIFNHRSBwb3J0aW9uIG9mIHRoZSBzdHJ1Y3R1cmUgY29uc3VtZXMgMzYwMCBieXRlcywgd2hpY2ggc2hvdWxkIGFsbG93CisvLyB0aGUgZW50aXJlIFNYR19TQ0FUVEVSX0dBVEhFUiBzdHJ1Y3R1cmUgdG8gcmVzaWRlIGNvbWZvcnRhYmx5IHdpdGhpbgorLy8gYSA0ayBibG9jaywgcHJvdmlkaW5nIHRoZSByZW1haW5pbmcgZmllbGRzIHN0YXkgdW5kZXIgNTAwIGJ5dGVzLgorLy8KKy8vIFNvIHdpdGggMTUwIGVudHJpZXMsIHRoZSBTWEdfU0NBVFRFUl9HQVRIRVIgc3RydWN0dXJlIGJlY29tZXMgcm91Z2hseQorLy8gNGsuICBBdCAxNmsgb2YgdGhlbSwgdGhhdCBhbW91bnRzIHRvIDY0TSBvZiBzaGFyZWQgbWVtb3J5LiAgQSB0b24sIGJ1dAorLy8gbWFuYWdlYWJsZS4KKyNkZWZpbmUgU1hHX1NHTF9FTlRSSUVTCQkxNTAKKworLy8gVGhlIHVjb2RlIGV4cGVjdHMgYW4gTkRJUyBTR0wgc3RydWN0dXJlIHRoYXQKKy8vIGlzIGZvcm1hdHRlZCBmb3IgYW4geDY0IHN5c3RlbS4gIFdoZW4gcnVubmluZworLy8gb24gYW4geDY0IHN5c3RlbSwgd2UgY2FuIHNpbXBseSBoYW5kIHRoZSBORElTIFNHTAorLy8gdG8gdGhlIGNhcmQgZGlyZWN0bHkuICBGb3IgeDg2IHN5c3RlbXMgd2UgbXVzdCByZWNvbnN0cnVjdAorLy8gdGhlIFNHTC4gIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGRlZmluZXMgYW4geDY0CisvLyBmb3JtYXR0ZWQgU0dMIGVudHJ5Cit0eXBlZGVmIHN0cnVjdCBfU1hHX1g2NF9TR0UgeworICAgIGRtYTY0X2FkZHJfdCAgICAgIAlBZGRyZXNzOwkvLyBzYW1lIGFzIHdkbS5oCisgICAgdTMyCQkJCUxlbmd0aDsJCS8vIHNhbWUgYXMgd2RtLmgKKwl1MzIJCQkJQ29tcGlsZXJQYWQ7Ly8gVGhlIGNvbXBpbGVyIHBhZHMgdG8gOC1ieXRlcworICAgIHU2NCAJCQlSZXNlcnZlZDsJLy8gdTMyICogaW4gd2RtLmguICBGb3JjZSB0byA4IGJ5dGVzCit9IFNYR19YNjRfU0dFLCAqUFNYR19YNjRfU0dFOworCit0eXBlZGVmIHN0cnVjdCBfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCB7CisgICAgZG1hNjRfYWRkcl90ICAgICAgCUFkZHJlc3M7CS8vIHNhbWUgYXMgd2RtLmgKKyAgICB1MzIJCQkJTGVuZ3RoOwkJLy8gc2FtZSBhcyB3ZG0uaAorCXUzMgkJCQlDb21waWxlclBhZDsvLyBUaGUgY29tcGlsZXIgcGFkcyB0byA4LWJ5dGVzCisgICAgdTY0IAkJCVJlc2VydmVkOwkvLyB1MzIgKiBpbiB3ZG0uaC4gIEZvcmNlIHRvIDggYnl0ZXMKK30gU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCwgKlBTQ0FUVEVSX0dBVEhFUl9FTEVNRU5UOworCisKK3R5cGVkZWYgc3RydWN0IF9TQ0FUVEVSX0dBVEhFUl9MSVNUIHsKKyAgICB1MzIJCQkJCU51bWJlck9mRWxlbWVudHM7CisgICAgdTMyICoJCQkJUmVzZXJ2ZWQ7CisgICAgU0NBVFRFUl9HQVRIRVJfRUxFTUVOVAlFbGVtZW50c1tdOworfSBTQ0FUVEVSX0dBVEhFUl9MSVNULCAqUFNDQVRURVJfR0FUSEVSX0xJU1Q7CisKKy8vIFRoZSBjYXJkIGRvZXNuJ3QgY2FyZSBhYm91dCBhbnl0aGluZyBleGNlcHQgZWxlbWVudHMsIHNvCisvLyB3ZSBjYW4gbGVhdmUgdGhlIHUzMiAqIHJlc2VydmVkIGZpZWxkIGFsb25lIGluIHRoZSBmb2xsb3dpbmcKKy8vIFNHTCBzdHJ1Y3R1cmUuICBCdXQgcmVkZWZpbmUgZnJvbSB3ZG0uaDpTQ0FUVEVSX0dBVEhFUl9MSVNUIHNvCisvLyB3ZSBjYW4gc3BlY2lmeSBTWEdfWDY0X1NHRSBhbmQgZGVmaW5lIGEgZml4ZWQgbnVtYmVyIG9mIGVsZW1lbnRzCit0eXBlZGVmIHN0cnVjdCBfU1hHX1g2NF9TR0wgeworICAgIHUzMgkJCQkJTnVtYmVyT2ZFbGVtZW50czsKKyAgICB1MzIgKgkJCQlSZXNlcnZlZDsKKyAgICBTWEdfWDY0X1NHRQkJCQlFbGVtZW50c1tTWEdfU0dMX0VOVFJJRVNdOworfSBTWEdfWDY0X1NHTCwgKlBTWEdfWDY0X1NHTDsKKwordHlwZWRlZiBzdHJ1Y3QgX1NYR19TQ0FUVEVSX0dBVEhFUiB7CisJU1hHX1NHTF9UWVBFCQkJCQkJVHlwZTsJCQkvLyBGSVJTVCEgRHVtYi1uaWMgb3Igb2ZmbG9hZAorCXZvaWQgKiAgIAkJCQkJCQlhZGFwdGVyOwkJLy8gQmFjayBwb2ludGVyIHRvIGFkYXB0ZXIKKwlMSVNUX0VOVFJZCQkJCQkJCUZyZWVMaXN0OwkJLy8gRnJlZSBTWEdfU0NBVFRFUl9HQVRIRVIgYmxvY2tzCisJTElTVF9FTlRSWQkJCQkJCQlBbGxMaXN0OwkJLy8gQWxsIFNYR19TQ0FUVEVSX0dBVEhFUiBibG9ja3MKKwlkbWFfYWRkcl90CQkJCSAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzczsvLyBwaHlzaWNhbCBhZGRyZXNzCisJdW5zaWduZWQgY2hhcgkJCQkJCQkJU3RhdGU7CQkJLy8gU2VlIFNYR19CVUZGRVIgc3RhdGUgYWJvdmUKKwl1bnNpZ25lZCBjaGFyCQkJCQkJCQlDbWRJbmRleDsJCS8vIENvbW1hbmQgcmluZyBpbmRleAorCXN0cnVjdCBza19idWZmICAgICAgICAgICAgICAgICAgICAqCUR1bWJQYWNrZXQ7CQkvLyBBc3NvY2lhdGVkIFBhY2tldAorCXUzMgkJCQkJCQkJRGlyZWN0aW9uOwkJLy8gRm9yIGFzeW5jaHJvbm91cyBjb21wbGV0aW9ucworCXUzMgkJCQkJCQkJQ3VyT2Zmc2V0OwkJLy8gQ3VycmVudCBTR0wgb2Zmc2V0CisJdTMyCQkJCQkJCQlTZ2xSZWY7CQkJLy8gU0dMIHJlZmVyZW5jZSBjb3VudAorCVZMQU5fSERSCQkJCQkJCVZsYW5UYWc7CQkvLyBWTEFOIHRhZyB0byBiZSBpbnNlcnRlZCBpbnRvIFNHTAorCVBTQ0FUVEVSX0dBVEhFUl9MSVNUICAgCQkJCXBTZ2w7CQkJLy8gU0dMIEFkZHIuIFBvc3NpYmx5ICZTZ2wKKwlTWEdfWDY0X1NHTAkJCQkJCQlTZ2w7CQkJLy8gU0dMIGhhbmRlZCB0byBjYXJkCit9IFNYR19TQ0FUVEVSX0dBVEhFUiwgKlBTWEdfU0NBVFRFUl9HQVRIRVI7CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCisjZGVmaW5lIFNYR19TR0xfQlVGRkVSKF9TeGdTZ2wpCQkoJl9TeGdTZ2wtPlNnbCkKKyNkZWZpbmUgU1hHX1NHTF9CVUZfU0laRQkJCXNpemVvZihTWEdfWDY0X1NHTCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKKy8vIEZvcmNlIE5ESVMgdG8gZ2l2ZSB1cyBpdCdzIG93biBidWZmZXIgc28gd2UgY2FuIHJlZm9ybWF0IHRvIG91ciBvd24KKyNkZWZpbmUgU1hHX1NHTF9CVUZGRVIoX1N4Z1NnbCkJCU5VTEwKKyNkZWZpbmUgU1hHX1NHTF9CVUZfU0laRQkJCTAKKyNlbHNlCisgICAgU3RvcCBDb21waWxhdGlvbjsKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2h3LmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0ZjZlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaHcuaApAQCAtMCwwICsxLDczNCBAQAorLyoKKyAqIENvcHlyaWdodCCpIDE5OTctMjAwNyBBbGFjcml0ZWNoLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiAkSWQ6IHN4Z2h3LmgsdiAxLjIgMjAwOC8wNy8yNCAxNzoyNDoyMyBjaHJpcyBFeHAgJAorICoKKyAqIHN4Z2h3Lmg6CisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGUKKyAqIEFsYWNyaXRlY2ggU2FoYXJhIGhhcmR3YXJlCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29uZmlndXJhdGlvbiBzcGFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyAgUENJIFZlbmRvciBJRAorI2RlZmluZSBTWEdfVkVORE9SX0lECQkJMHgxMzlBCS8vIEFsYWNyaXRlY2gncyBWZW5kb3IgSUQKKworLy8gIFBDSSBEZXZpY2UgSUQKKyNkZWZpbmUgU1hHX0RFVklDRV9JRAkJCTB4MDAwOQkvLyBTYWhhcmEgRGV2aWNlIElECisKKy8vCisvLyBTdWJzeXN0ZW0gSURzLgorLy8KKy8vIFRoZSBzdWJzeXN0ZW0gSUQgdmFsdWUgaXMgYnJva2VuIGludG8gYml0IGZpZWxkcyBhcyBmb2xsb3dzOgorLy8JCUJpdHMgWzE1OjEyXSAtIEZ1bmN0aW9uCisvLwkJQml0cyBbMTE6OF0gIC0gT0VNIGFuZC9vciBvcGVyYXRpbmcgc3lzdGVtLgorLy8JCUJpdHMgWzc6MF0gICAtIEJhc2UgU0lELgorLy8KKy8vIFNTSUQgZmllbGQgKGJpdCkgbWFza3MKKyNkZWZpbmUgU1NJRF9CQVNFX01BU0sJCQkJCTB4MDBGRgkvLyBCYXNlIHN1YnN5c3RlbSBJRCBtYXNrCisjZGVmaW5lIFNTSURfT0VNX01BU0sJCQkJCTB4MEYwMAkvLyBTdWJzeXN0ZW0gT0VNIG1hc2sKKyNkZWZpbmUgU1NJRF9GVU5DX01BU0sJCQkJCTB4RjAwMAkvLyBTdWJzeXN0ZW0gZnVuY3Rpb24gbWFzaworCisvLyBCYXNlIFNTSUQncworI2RlZmluZSBTU0lEX1NBSEFSQV9QUk9UTwkJCQkweDAwMTgJLy8gMTAwMDIyIFNhaGFyYSBwcm90b3R5cGUgKFhlblBhaykgYm9hcmQKKyNkZWZpbmUgU1NJRF9TQUhBUkFfRklCRVIJCQkJMHgwMDE5CS8vIDEwMDAyMyBTYWhhcmEgMS1wb3J0IGZpYmVyIGJvYXJkCisjZGVmaW5lIFNTSURfU0FIQVJBX0NPUFBFUgkJCQkweDAwMUEJLy8gMTAwMDI0IFNhaGFyYSAxLXBvcnQgY29wcGVyIGJvYXJkCisKKy8vIFVzZWZ1bCBTU0lEIG1hY3JvcworI2RlZmluZQlTU0lEX0JBU0Uoc3NpZCkJCQkoKHNzaWQpICYgU1NJRF9CQVNFX01BU0spCQkvLyBpc29sYXRlIGJhc2UgU1NJRCBiaXRzCisjZGVmaW5lCVNTSURfT0VNKHNzaWQpCQkJKChzc2lkKSAmIFNTSURfT0VNX01BU0spCQkvLyBpc29sYXRlIFNTSUQgT0VNIGJpdHMKKyNkZWZpbmUJU1NJRF9GVU5DKHNzaWQpCQkJKChzc2lkKSAmIFNTSURfRlVOQ19NQVNLKQkJLy8gaXNvbGF0ZSBTU0lEIGZ1bmN0aW9uIGJpdHMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhXIFJlZ2lzdGVyIFNwYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU1hHX0hXUkVHX01FTVNJWkUJMHg0MDAwCQkvLyAxNmsKKworI3ByYWdtYSBwYWNrKHB1c2gsIDEpCit0eXBlZGVmIHN0cnVjdCBfU1hHX0hXX1JFR1MgeworCXUzMgkJUmVzZXQ7CQkJCS8vIFdyaXRlIDB4ZGVhZCB0byBpbnZva2Ugc29mdCByZXNldAorCXUzMgkJUGFkMTsJCQkJLy8gTm8gcmVnaXN0ZXIgZGVmaW5lZCBhdCBvZmZzZXQgNAorCXUzMgkJSW50ZXJydXB0TWFzazA7CQkvLyBEZWFzc2VydCBsZWdhY3kgaW50ZXJydXB0IG9uIGZ1bmN0aW9uIDAKKwl1MzIJCUludGVycnVwdE1hc2sxOwkJLy8gRGVhc3NlcnQgbGVnYWN5IGludGVycnVwdCBvbiBmdW5jdGlvbiAxCisJdTMyCQlVY29kZURhdGFMb3c7CQkvLyBTdG9yZSBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb24gYml0cyAzMS0wCisJdTMyCQlVY29kZURhdGFNaWRkbGU7CS8vIFN0b3JlIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBiaXRzIDYzLTMyCisJdTMyCQlVY29kZURhdGFIaWdoOwkJLy8gU3RvcmUgbWljcm9jb2RlIGluc3RydWN0aW9uIGJpdHMgOTUtNjQKKwl1MzIJCVVjb2RlQWRkcjsJCQkvLyBTdG9yZSBtaWNyb2NvZGUgYWRkcmVzcyAtIFNlZSBmbGFncyBiZWxvdworCXUzMgkJUGFkVG8weDgwWzI0XTsJCS8vIFBhZCB0byBYY3YgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKwl1MzIJCU1hY0NvbmZpZzA7CQkJLy8gMHg4MCAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAKKwl1MzIJCU1hY0NvbmZpZzE7CQkJLy8gMHg4NCAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKwl1MzIJCU1hY0NvbmZpZzI7CQkJLy8gMHg4OCAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIKKwl1MzIJCU1hY0NvbmZpZzM7CQkJLy8gMHg4QyAtIEFYR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMKKwl1MzIJCU1hY0FkZHJlc3NMb3c7CQkvLyAweDkwIC0gQVhHTUFDIE1BQyBTdGF0aW9uIEFkZHJlc3MgLSBvY3RldHMgMS00CisJdTMyCQlNYWNBZGRyZXNzSGlnaDsJCS8vIDB4OTQgLSBBWEdNQUMgTUFDIFN0YXRpb24gQWRkcmVzcyAtIG9jdGV0cyA1LTYKKwl1MzIJCU1hY1Jlc2VydmVkMVsyXTsJLy8gMHg5OCAtIEFYR01BQyBSZXNlcnZlZAorCXUzMgkJTWFjTWF4RnJhbWVMZW47CQkvLyAweEEwIC0gQVhHTUFDIE1heGltdW0gRnJhbWUgTGVuZ3RoCisJdTMyCQlNYWNSZXNlcnZlZDJbMl07CS8vIDB4QTQgLSBBWEdNQUMgUmVzZXJ2ZWQKKwl1MzIJCU1hY1JldmlzaW9uOwkJLy8gMHhBQyAtIEFYR01BQyBSZXZpc2lvbiBMZXZlbCBSZWdpc3RlcgorCXUzMgkJTWFjUmVzZXJ2ZWQzWzRdOwkvLyAweEIwIC0gQVhHTUFDIFJlc2VydmVkCisJdTMyCQlNYWNBbWlpbUNtZDsJCS8vIDB4QzAgLSBBWEdNQUMgQU1JSU0gQ29tbWFuZCBSZWdpc3RlcgorCXUzMgkJTWFjQW1paW1GaWVsZDsJCS8vIDB4QzQgLSBBWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKKwl1MzIJCU1hY0FtaWltQ29uZmlnOwkJLy8gMHhDOCAtIEFYR01BQyBBTUlJTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisJdTMyCQlNYWNBbWlpbUxpbms7CQkvLyAweENDIC0gQVhHTUFDIEFNSUlNIExpbmsgRmFpbCBWZWN0b3IgUmVnaXN0ZXIKKwl1MzIJCU1hY0FtaWltSW5kaWNhdG9yOwkvLyAweEQwIC0gQVhHTUFDIEFNSUlNIEluZGljYXRvciBSZWdpc3RvcgorCXUzMgkJUGFkVG8weDEwMFsxMV07CQkvLyAweEQ0IC0gMHgxMDAgLSBQYWQKKwl1MzIJCVhtdENvbmZpZzsJCQkvLyAweDEwMCAtIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKwl1MzIJCVJjdkNvbmZpZzsJCQkvLyAweDEwNCAtIFJlY2VpdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisJdTMyCQlMaW5rQWRkcmVzczBMb3c7CS8vIDB4MTA4IC0gTGluayBhZGRyZXNzIDAKKwl1MzIJCUxpbmtBZGRyZXNzMEhpZ2g7CS8vIDB4MTBDIC0gTGluayBhZGRyZXNzIDAKKwl1MzIJCUxpbmtBZGRyZXNzMUxvdzsJLy8gMHgxMTAgLSBMaW5rIGFkZHJlc3MgMQorCXUzMgkJTGlua0FkZHJlc3MxSGlnaDsJLy8gMHgxMTQgLSBMaW5rIGFkZHJlc3MgMQorCXUzMgkJTGlua0FkZHJlc3MyTG93OwkvLyAweDExOCAtIExpbmsgYWRkcmVzcyAyCisJdTMyCQlMaW5rQWRkcmVzczJIaWdoOwkvLyAweDExQyAtIExpbmsgYWRkcmVzcyAyCisJdTMyCQlMaW5rQWRkcmVzczNMb3c7CS8vIDB4MTIwIC0gTGluayBhZGRyZXNzIDMKKwl1MzIJCUxpbmtBZGRyZXNzM0hpZ2g7CS8vIDB4MTI0IC0gTGluayBhZGRyZXNzIDMKKwl1MzIJCVRvZXBsaXR6S2V5WzEwXTsJLy8gMHgxMjggLSAweDE1MCAtIFRvZXBsaXR6IGtleQorCXUzMgkJU29ja2V0S2V5WzEwXTsJCS8vIDB4MTUwIC0gMHgxNzggLSBTb2NrZXQgS2V5CisJdTMyCQlMaW5rU3RhdHVzOwkJCS8vIDB4MTc4IC0gTGluayBzdGF0dXMKKwl1MzIJCUNsZWFyU3RhdHM7CQkJLy8gMHgxN0MgLSBDbGVhciBTdGF0cworCXUzMgkJWG10RXJyb3JzTG93OwkJLy8gMHgxODAgLSBUcmFuc21pdCBzdGF0cyAtIGVycm9ycworCXUzMgkJWG10RXJyb3JzSGlnaDsJCS8vIDB4MTg0IC0gVHJhbnNtaXQgc3RhdHMgLSBlcnJvcnMKKwl1MzIJCVhtdEZyYW1lc0xvdzsJCS8vIDB4MTg4IC0gVHJhbnNtaXQgc3RhdHMgLSBmcmFtZSBjb3VudAorCXUzMgkJWG10RnJhbWVzSGlnaDsJCS8vIDB4MThDIC0gVHJhbnNtaXQgc3RhdHMgLSBmcmFtZSBjb3VudAorCXUzMgkJWG10Qnl0ZXNMb3c7CQkvLyAweDE5MCAtIFRyYW5zbWl0IHN0YXRzIC0gYnl0ZSBjb3VudAorCXUzMgkJWG10Qnl0ZXNIaWdoOwkJLy8gMHgxOTQgLSBUcmFuc21pdCBzdGF0cyAtIGJ5dGUgY291bnQKKwl1MzIJCVhtdFRjcFNlZ21lbnRzTG93OwkvLyAweDE5OCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIHNlZ21lbnRzCisJdTMyCQlYbXRUY3BTZWdtZW50c0hpZ2g7CS8vIDB4MTlDIC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1Agc2VnbWVudHMKKwl1MzIJCVhtdFRjcEJ5dGVzTG93OwkJLy8gMHgxQTAgLSBUcmFuc21pdCBzdGF0cyAtIFRDUCBieXRlcworCXUzMgkJWG10VGNwQnl0ZXNIaWdoOwkvLyAweDFBNCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIGJ5dGVzCisJdTMyCQlSY3ZFcnJvcnNMb3c7CQkvLyAweDFBOCAtIFJlY2VpdmUgc3RhdHMgLSBlcnJvcnMKKwl1MzIJCVJjdkVycm9yc0hpZ2g7CQkvLyAweDFBQyAtIFJlY2VpdmUgc3RhdHMgLSBlcnJvcnMKKwl1MzIJCVJjdkZyYW1lc0xvdzsJCS8vIDB4MUIwIC0gUmVjZWl2ZSBzdGF0cyAtIGZyYW1lIGNvdW50CisJdTMyCQlSY3ZGcmFtZXNIaWdoOwkJLy8gMHgxQjQgLSBSZWNlaXZlIHN0YXRzIC0gZnJhbWUgY291bnQKKwl1MzIJCVJjdkJ5dGVzTG93OwkJLy8gMHgxQjggLSBSZWNlaXZlIHN0YXRzIC0gYnl0ZSBjb3VudAorCXUzMgkJUmN2Qnl0ZXNIaWdoOwkJLy8gMHgxQkMgLSBSZWNlaXZlIHN0YXRzIC0gYnl0ZSBjb3VudAorCXUzMgkJUmN2VGNwU2VnbWVudHNMb3c7CS8vIDB4MUMwIC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBzZWdtZW50cworCXUzMgkJUmN2VGNwU2VnbWVudHNIaWdoOwkvLyAweDFDNCAtIFJlY2VpdmUgc3RhdHMgLSBUQ1Agc2VnbWVudHMKKwl1MzIJCVJjdlRjcEJ5dGVzTG93OwkJLy8gMHgxQzggLSBSZWNlaXZlIHN0YXRzIC0gVENQIGJ5dGVzCisJdTMyCQlSY3ZUY3BCeXRlc0hpZ2g7CS8vIDB4MUNDIC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBieXRlcworCXUzMgkJUGFkVG8weDIwMFsxMl07CQkvLyAweDFEMCAtIDB4MjAwIC0gUGFkCisJdTMyCQlTb2Z0d2FyZVsxOTIwXTsJCS8vIDB4MjAwIC0gMHgyMDAwIC0gU29mdHdhcmUgZGVmaW5lZCAobm90IHVzZWQpCisJdTMyCQlNc2l4VGFibGVbMTAyNF07CS8vIDB4MjAwMCAtIDB4MzAwMCAtIE1TSVggVGFibGUKKwl1MzIJCU1zaXhCaXRBcnJheVsxMDI0XTsJLy8gMHgzMDAwIC0gMHg0MDAwIC0gTVNJWCBQZW5kaW5nIEJpdCBBcnJheQorfSBTWEdfSFdfUkVHUywgKlBTWEdfSFdfUkVHUzsKKyNwcmFnbWEgcGFjayhwb3ApCisKKy8vIE1pY3JvY29kZSBBZGRyZXNzIEZsYWdzCisjZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX0dPCQkweDgwMDAwMDAwCS8vIFN0YXJ0IG1pY3JvY29kZQorI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19XUklURQkJMHg0MDAwMDAwMAkvLyBTdG9yZSBtaWNyb2NvZGUKKyNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfUkVBRAkJMHgyMDAwMDAwMAkvLyBSZWFkIG1pY3JvY29kZQorI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19QQVJJVFkJMHgxMDAwMDAwMAkvLyBQYXJpdHkgZXJyb3IgZGV0ZWN0ZWQKKyNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfTUFTSwkJMHgwMDAwMUZGRgkvLyBBZGRyZXNzIGJpdHMKKworLy8gTGluayBBZGRyZXNzIFJlZ2lzdGVycworI2RlZmluZSBMSU5LX0FERFJFU1NfRU5BQkxFCQkJMHg4MDAwMDAwMAkvLyBBcHBsaWVkIHRvIGxpbmsgYWRkcmVzcyBoaWdoCisKKy8vIE1pY3Jvc29mdCByZWdpc3RlciBzcGFjZSBzaXplCisjZGVmaW5lIFNYR19VQ09ERVJFR19NRU1TSVpFCTB4NDAwMDAJCS8vIDI1NmsKKworLy8gU2FoYXJhIG1pY3JvY29kZSByZWdpc3RlciBhZGRyZXNzIGZvcm1hdC4gIFRoZSBjb21tYW5kIGNvZGUsCisvLyBleHRlbmRlZCBjb21tYW5kIGNvZGUsIGFuZCBhc3NvY2lhdGVkIHByb2Nlc3NvciBhcmUgZW5jb2RlZCBpbgorLy8gdGhlIGFkZHJlc3MgYml0cyBhcyBmb2xsb3dzCisjZGVmaW5lIFNYR19BRERSRVNTX0NPREVfU0hJRlQJCTIJCQkvLyBCYXNlIGNvbW1hbmQgY29kZQorI2RlZmluZSBTWEdfQUREUkVTU19DT0RFX01BU0sJCTB4MDAwMDAwM0MKKyNkZWZpbmUgU1hHX0FERFJFU1NfRVhDT0RFX1NISUZUCTYJCQkvLyBFeHRlbmRlZCAob3Igc3ViKSBjb21tYW5kIGNvZGUKKyNkZWZpbmUgU1hHX0FERFJFU1NfRVhDT0RFX01BU0sJCTB4MDAwMDFGQzAKKyNkZWZpbmUJU1hHX0FERFJFU1NfQ1BVSURfU0hJRlQJCTEzCQkJLy8gQ1BVCisjZGVmaW5lIFNYR19BRERSRVNTX0NQVUlEX01BU0sJCTB4MDAwM0UwMDAKKyNkZWZpbmUgU1hHX1JFR0lTVEVSX1NJWkVfUEVSX0NQVQkweDAwMDAyMDAwCS8vIFVzZWQgdG8gc2FuaXR5IGNoZWNrIFVDT0RFX1JFR1Mgc3RydWN0dXJlCisKKy8vIFNhaGFyYSByZWNlaXZlIHNlcXVlbmNlciBzdGF0dXMgdmFsdWVzCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FUVE4JCQkJCTB4ODAwMDAwMDAJLy8gQXR0ZW50aW9uCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9NQVNLCQkweDNGMDAwMDAwCS8vIFRyYW5zcG9ydCBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9FUlJPUgkJMHgyMDAwMDAwMAkvLyBUcmFuc3BvcnQgZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0NTVU0JCTB4MjMwMDAwMDAJLy8gVHJhbnNwb3J0IGNrc3VtIGVycm9yCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9VRkxPVwkJMHgyMjAwMDAwMAkvLyBUcmFuc3BvcnQgdW5kZXJmbG93CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IRFJMRU4JCTB4MjAwMDAwMDAJLy8gVHJhbnNwb3J0IGhlYWRlciBsZW5ndGgKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0ZMQUdTCQkweDEwMDAwMDAwCS8vIFRyYW5zcG9ydCBmbGFncyBkZXRlY3RlZAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfT1BUUwkJMHgwODAwMDAwMAkvLyBUcmFuc3BvcnQgb3B0aW9ucyBkZXRlY3RlZAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfU0VTU19NQVNLCTB4MDcwMDAwMDAJLy8gVHJhbnNwb3J0IEREUAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRERQCQkweDA2MDAwMDAwCS8vIFRyYW5zcG9ydCBERFAKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX2lTQ1NJCQkweDA1MDAwMDAwCS8vIFRyYW5zcG9ydCBpU0NTSQorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfTkZTCQkweDA0MDAwMDAwCS8vIFRyYW5zcG9ydCBORlMKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0ZUUAkJMHgwMzAwMDAwMAkvLyBUcmFuc3BvcnQgRlRQCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IVFRQCQkweDAyMDAwMDAwCS8vIFRyYW5zcG9ydCBIVFRQCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9TTUIJCTB4MDEwMDAwMDAJLy8gVHJhbnNwb3J0IFNNQgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX01BU0sJCQkweDAwRkYwMDAwCS8vIE5ldHdvcmsgbWFzaworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0VSUk9SCQkweDAwODAwMDAwCS8vIE5ldHdvcmsgZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19DU1VNCQkJMHgwMDgzMDAwMAkvLyBOZXR3b3JrIGNrc3VtIGVycm9yCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVUZMT1cJCTB4MDA4MjAwMDAJLy8gTmV0d29yayB1bmRlcmZsb3cgZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19IRFJMRU4JCTB4MDA4MDAwMDAJLy8gTmV0d29yayBoZWFkZXIgbGVuZ3RoCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfT0ZMT1cJCTB4MDA0MDAwMDAJLy8gTmV0d29yayBvdmVyZmxvdyBkZXRlY3RlZAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX01DQVNUCQkweDAwMjAwMDAwCS8vIE5ldHdvcmsgbXVsdGljYXN0IGRldGVjdGVkCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfT1BUSU9OUwkJMHgwMDEwMDAwMAkvLyBOZXR3b3JrIG9wdGlvbnMgZGV0ZWN0ZWQKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19PRkZTRVQJCTB4MDAwODAwMDAJLy8gTmV0d29yayBvZmZzZXQgZGV0ZWN0ZWQKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19GUkFHTUVOVAkJMHgwMDA0MDAwMAkvLyBOZXR3b3JrIGZyYWdtZW50IGRldGVjdGVkCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVFJBTlNfTUFTSwkweDAwMDMwMDAwCS8vIE5ldHdvcmsgdHJhbnNwb3J0IHR5cGUgbWFzaworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VEUAkJCTB4MDAwMjAwMDAJLy8gVURQCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVENQCQkJMHgwMDAxMDAwMAkvLyBUQ1AKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfSVBPTkxZCQkJCTB4MDAwMDgwMDAJLy8gSVAtb25seSBub3QgVENQCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1BLVF9QUkkJCQkJMHgwMDAwNjAwMAkvLyBSZWNlaXZlIHByaW9yaXR5CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1BLVF9QUklfU0hGVAkJCQkJMTMJLy8gUmVjZWl2ZSBwcmlvcml0eSBzaGlmdAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19QQVJJVFkJCQkJMHgwMDAwMTAwMAkvLyBNQUMgUmVjZWl2ZSBSQU0gcGFyaXR5IGVycm9yCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfTUFTSwkJCTB4MDAwMDBGMDAJLy8gTGluayBhZGRyZXNzIGRldGVjdGlvbiBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfRAkJCTB4MDAwMDBCMDAJLy8gTGluayBhZGRyZXNzIEQKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19DCQkJMHgwMDAwMEEwMAkvLyBMaW5rIGFkZHJlc3MgQworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0IJCQkweDAwMDAwOTAwCS8vIExpbmsgYWRkcmVzcyBCCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQQkJCTB4MDAwMDA4MDAJLy8gTGluayBhZGRyZXNzIEEKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19CQ0FTVAkJMHgwMDAwMDMwMAkvLyBMaW5rIGFkZHJlc3MgYnJvYWRjYXN0CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfTUNBU1QJCTB4MDAwMDAyMDAJLy8gTGluayBhZGRyZXNzIG11bHRpY2FzdAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0NNQ0FTVAkJMHgwMDAwMDEwMAkvLyBMaW5rIGNvbnRyb2wgbXVsdGljYXN0CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfTUFTSwkJCTB4MDAwMDAwRkYJLy8gTGluayBzdGF0dXMgbWFzaworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VSUk9SCQkJMHgwMDAwMDA4MAkvLyBMaW5rIGVycm9yCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfTUFTSwkJCTB4MDAwMDAwRkYJLy8gTGluayBzdGF0dXMgbWFzaworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1BBUklUWQkJCTB4MDAwMDAwODcJLy8gUmN2TWFjUSBwYXJpdHkgZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19FQVJMWQkJCTB4MDAwMDAwODYJLy8gRGF0YSBlYXJseQorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0JVRk9GTE9XCQkweDAwMDAwMDg1CS8vIEJ1ZmZlciBvdmVyZmxvdworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0NPREUJCQkweDAwMDAwMDg0CS8vIExpbmsgY29kZSBlcnJvcgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0RSSUJCTEUJCQkweDAwMDAwMDgzCS8vIERyaWJibGUgbmliYmxlCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ1JDCQkJCTB4MDAwMDAwODIJLy8gQ1JDIGVycm9yCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfT0ZMT1cJCQkweDAwMDAwMDgxCS8vIExpbmsgb3ZlcmZsb3cKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19VRkxPVwkJCTB4MDAwMDAwODAJLy8gTGluayB1bmRlcmZsb3cKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS184MDIzCQkJMHgwMDAwMDAyMAkvLyA4MDIuMworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1NOQVAJCQkweDAwMDAwMDEwCS8vIFNuYXAKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19WTEFOCQkJMHgwMDAwMDAwOAkvLyBWTEFOCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfVFlQRV9NQVNLCQkweDAwMDAwMDA3CS8vIE5ldHdvcmsgdHlwZSBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09OVFJPTAkJCTB4MDAwMDAwMDMJLy8gQ29udHJvbCBwYWNrZXQKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19JUFY2CQkJMHgwMDAwMDAwMgkvLyBJUHY2IHBhY2tldAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0lQVjQJCQkweDAwMDAwMDAxCS8vIElQdjQgcGFja2V0CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNhaGFyYSByZWNlaXZlIGFuZCB0cmFuc21pdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19SRVNFVAkJCTB4ODAwMDAwMDAJLy8gUmN2Q29uZmlnIHJlZ2lzdGVyIHJlc2V0CisjZGVmaW5lCVJDVl9DT05GSUdfRU5BQkxFCQkJMHg0MDAwMDAwMAkvLyBFbmFibGUgdGhlIHJlY2VpdmUgbG9naWMKKyNkZWZpbmUJUkNWX0NPTkZJR19FTlBBUlNFCQkJMHgyMDAwMDAwMAkvLyBFbmFibGUgdGhlIHJlY2VpdmUgcGFyc2VyCisjZGVmaW5lCVJDVl9DT05GSUdfU09DS0VUCQkJMHgxMDAwMDAwMAkvLyBFbmFibGUgdGhlIHNvY2tldCBkZXRlY3RvcgorI2RlZmluZQlSQ1ZfQ09ORklHX1JDVkJBRAkJCTB4MDgwMDAwMDAJLy8gUmVjZWl2ZSBhbGwgYmFkIGZyYW1lcworI2RlZmluZQlSQ1ZfQ09ORklHX0NPTlRST0wJCQkweDA0MDAwMDAwCS8vIFJlY2VpdmUgYWxsIGNvbnRyb2wgZnJhbWVzCisjZGVmaW5lCVJDVl9DT05GSUdfUkNWUEFVU0UJCQkweDAyMDAwMDAwCS8vIEVuYWJsZSBwYXVzZSB0cmFuc21pdCB3aGVuIGF0dG4KKyNkZWZpbmUJUkNWX0NPTkZJR19UWklQVjYJCQkweDAxMDAwMDAwCS8vIEluY2x1ZGUgVENQIHBvcnQgdy8gSVB2NiB0b2VwbGl0egorI2RlZmluZQlSQ1ZfQ09ORklHX1RaSVBWNAkJCTB4MDA4MDAwMDAJLy8gSW5jbHVkZSBUQ1AgcG9ydCB3LyBJUHY0IHRvZXBsaXR6CisjZGVmaW5lCVJDVl9DT05GSUdfRkxVU0gJCQkweDAwNDAwMDAwCS8vIEZsdXNoIGJ1ZmZlcnMKKyNkZWZpbmUJUkNWX0NPTkZJR19QUklPUklUWV9NQVNLCTB4MDAzMDAwMDAJLy8gUHJpb3JpdHkgbGV2ZWwKKyNkZWZpbmUJUkNWX0NPTkZJR19IQVNIX01BU0sJCTB4MDAwMzAwMDAJLy8gSGFzaCBkZXB0aAorI2RlZmluZQlSQ1ZfQ09ORklHX0hBU0hfOAkJCTB4MDAwMDAwMDAJLy8gSGFzaCBkZXB0aCA4CisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF8xNgkJCTB4MDAwMTAwMDAJLy8gSGFzaCBkZXB0aCAxNgorI2RlZmluZQlSQ1ZfQ09ORklHX0hBU0hfNAkJCTB4MDAwMjAwMDAJLy8gSGFzaCBkZXB0aCA0CisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF8yCQkJMHgwMDAzMDAwMAkvLyBIYXNoIGRlcHRoIDIKKyNkZWZpbmUJUkNWX0NPTkZJR19CVUZMRU5fTUFTSwkJMHgwMDAwRkZGMAkvLyBCdWZmZXIgbGVuZ3RoIGJpdHMgMTU6NC4gaWUgbXVsdGlwbGUgb2YgMTYuCisjZGVmaW5lIFJDVl9DT05GSUdfU0tUX0RJUwkJCTB4MDAwMDAwMDgJLy8gRGlzYWJsZSBzb2NrZXQgZGV0ZWN0aW9uIG9uIGF0dG4KKy8vIE1hY3JvIHRvIGRldGVybWluZSBSQ1ZfQ09ORklHX0JVRkxFTiBiYXNlZCBvbiBtYXhpbXVtIGZyYW1lIHNpemUuCisvLyBXZSBhZGQgMTggYnl0ZXMgZm9yIFNhaGFyYSByZWNlaXZlIHN0YXR1cyBhbmQgcGFkZGluZywgcGx1cyA0IGJ5dGVzIGZvciBDUkMsCisvLyBhbmQgcm91bmQgdXAgdG8gbmVhcmVzdCAxNiBieXRlIGJvdW5kYXJ5CisjZGVmaW5lIFJDVl9DT05GSUdfQlVGU0laRShfTWF4RnJhbWUpICgoKChfTWF4RnJhbWUpICsgMjIpICsgMTUpICYgUkNWX0NPTkZJR19CVUZMRU5fTUFTSykKKworI2RlZmluZQlYTVRfQ09ORklHX1JFU0VUCQkJMHg4MDAwMDAwMAkvLyBYbXRDb25maWcgcmVnaXN0ZXIgcmVzZXQKKyNkZWZpbmUJWE1UX0NPTkZJR19FTkFCTEUJCQkweDQwMDAwMDAwCS8vIEVuYWJsZSB0cmFuc21pdCBsb2dpYworI2RlZmluZQlYTVRfQ09ORklHX01BQ19QQVJJVFkJCTB4MjAwMDAwMDAJLy8gSW5oaWJpdCBNQUMgUkFNIHBhcml0eSBlcnJvcgorI2RlZmluZQlYTVRfQ09ORklHX0JVRl9QQVJJVFkJCTB4MTAwMDAwMDAJLy8gSW5oaWJpdCBEMkYgYnVmZmVyIHBhcml0eSBlcnJvcgorI2RlZmluZQlYTVRfQ09ORklHX01FTV9QQVJJVFkJCTB4MDgwMDAwMDAJLy8gSW5oaWJpdCAxVCBTUkFNIHBhcml0eSBlcnJvcgorI2RlZmluZQlYTVRfQ09ORklHX0lOVkVSVF9QQVJJVFkJMHgwNDAwMDAwMAkvLyBJbnZlcnQgTUFDIFJBTSBwYXJpdHkKKyNkZWZpbmUJWE1UX0NPTkZJR19JTklUSUFMX0lQSUQJCTB4MDAwMEZGRkYJLy8gSW5pdGlhbCBJUElECisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEEtWEdNQUMgUmVnaXN0ZXJzIC0gT2NjdXB5IDB4ODAgLSAweEQ0IG9mIHRoZSBTWEdfSFdfUkVHUworICoKKyAqIEZ1bGwgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBheGdtYWMucGRmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gQS1YR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAKKyNkZWZpbmUgQVhHTUFDX0NGRzBfU1VCX1JFU0VUCQkweDgwMDAwMDAwCQkvLyBTdWIgbW9kdWxlIHJlc2V0CisjZGVmaW5lIEFYR01BQ19DRkcwX1JDTlRSTF9SRVNFVAkweDAwNDAwMDAwCQkvLyBSZWNlaXZlIGNvbnRyb2wgcmVzZXQKKyNkZWZpbmUgQVhHTUFDX0NGRzBfUkZVTkNfUkVTRVQJCTB4MDAyMDAwMDAJCS8vIFJlY2VpdmUgZnVuY3Rpb24gcmVzZXQKKyNkZWZpbmUgQVhHTUFDX0NGRzBfVENOVFJMX1JFU0VUCTB4MDAwNDAwMDAJCS8vIFRyYW5zbWl0IGNvbnRyb2wgcmVzZXQKKyNkZWZpbmUgQVhHTUFDX0NGRzBfVEZVTkNfUkVTRVQJCTB4MDAwMjAwMDAJCS8vIFRyYW5zbWl0IGZ1bmN0aW9uIHJlc2V0CisjZGVmaW5lIEFYR01BQ19DRkcwX01JSV9SRVNFVAkJMHgwMDAxMDAwMAkJLy8gTUlJIE1hbmFnZW1lbnQgcmVzZXQKKworLy8gQS1YR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE1UX1BBVVNFCQkweDgwMDAwMDAwCQkvLyBBbGxvdyB0aGUgc2VuZGluZyBvZiBQYXVzZSBmcmFtZXMKKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE1UX0VOCQkJMHg0MDAwMDAwMAkJLy8gRW5hYmxlIHRyYW5zbWl0CisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9QQVVTRQkJMHgyMDAwMDAwMAkJLy8gQWxsb3cgdGhlIGRldGVjdGlvbiBvZiBQYXVzZSBmcmFtZXMKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0VOCQkJMHgxMDAwMDAwMAkJLy8gRW5hYmxlIHJlY2VpdmUKKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE1UX1NUQVRFCQkweDA0MDAwMDAwCQkvLyBDdXJyZW50IHRyYW5zbWl0IHN0YXRlIC0gUkVBRCBPTkxZCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9TVEFURQkJMHgwMTAwMDAwMAkJLy8gQ3VycmVudCByZWNlaXZlIHN0YXRlIC0gUkVBRCBPTkxZCisjZGVmaW5lIEFYR01BQ19DRkcxX1hPRkZfU0hPUlQJCTB4MDAwMDEwMDAJCS8vIE9ubHkgcGF1c2UgZm9yIDY0IHNsb3Qgb24gWE9GRgorI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMQkJMHgwMDAwMDQwMAkJLy8gRGVsYXkgdHJhbnNtaXQgRkNTIDEgNC1ieXRlIHdvcmQKKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE1HX0ZDUzIJCTB4MDAwMDA4MDAJCS8vIERlbGF5IHRyYW5zbWl0IEZDUyAyIDQtYnl0ZSB3b3JkcworI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMwkJMHgwMDAwMEMwMAkJLy8gRGVsYXkgdHJhbnNtaXQgRkNTIDMgNC1ieXRlIHdvcmRzCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MxCQkweDAwMDAwMTAwCQkvLyBEZWxheSByZWNlaXZlIEZDUyAxIDQtYnl0ZSB3b3JkCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MyCQkweDAwMDAwMjAwCQkvLyBEZWxheSByZWNlaXZlIEZDUyAyIDQtYnl0ZSB3b3JkcworI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfRkNTMwkJMHgwMDAwMDMwMAkJLy8gRGVsYXkgcmVjZWl2ZSBGQ1MgMyA0LWJ5dGUgd29yZHMKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEtUX09WRVJSSURFCTB4MDAwMDAwODAJCS8vIFBlci1wYWNrZXQgb3ZlcnJpZGUgZW5hYmxlCisjZGVmaW5lIEFYR01BQ19DRkcxX1NXQVAJCQkweDAwMDAwMDQwCQkvLyBCeXRlIHN3YXAgZW5hYmxlCisjZGVmaW5lIEFYR01BQ19DRkcxX1NIT1JUX0FTU0VSVAkweDAwMDAwMDIwCQkvLyBBU1NFUlQgc3JkcnBmcm0gb24gc2hvcnQgZnJhbWUgKDw2NCkKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX1NUUklDVAkJMHgwMDAwMDAxMAkJLy8gUkNWIG9ubHkgODAyLjNBRSB3aGVuIENMRUFSCisjZGVmaW5lIEFYR01BQ19DRkcxX0NIRUNLX0xFTgkJMHgwMDAwMDAwOAkJLy8gVmVyaWZ5IGZyYW1lIGxlbmd0aAorI2RlZmluZSBBWEdNQUNfQ0ZHMV9HRU5fRkNTCQkJMHgwMDAwMDAwNAkJLy8gR2VuZXJhdGUgRkNTCisjZGVmaW5lIEFYR01BQ19DRkcxX1BBRF9NQVNLCQkweDAwMDAwMDAzCQkvLyBNYXNrIGZvciBwYWQgYml0cworI2RlZmluZSBBWEdNQUNfQ0ZHMV9QQURfNjQJCQkweDAwMDAwMDAxCQkvLyBQYWQgZnJhbWVzIHRvIDY0IGJ5dGVzCisjZGVmaW5lIEFYR01BQ19DRkcxX1BBRF9WTEFOCQkweDAwMDAwMDAyCQkvLyBEZXRlY3QgVkxBTiBhbmQgcGFkIHRvIDY4IGJ5dGVzCisjZGVmaW5lIEFYR01BQ19DRkcxX1BBRF82OAkJCTB4MDAwMDAwMDMJCS8vIFBhZCB0byA2OCBieXRlcworCisvLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMgorI2RlZmluZSBBWEdNQUNfQ0ZHMl9HRU5fUEFVU0UJCTB4ODAwMDAwMDAJCS8vIEdlbmVyYXRlIHNpbmdsZSBwYXVzZSBmcmFtZSAodGVzdCkKKyNkZWZpbmUgQVhHTUFDX0NGRzJfTEZfTUFOVUFMCQkweDA4MDAwMDAwCQkvLyBNYW51YWwgbGluayBmYXVsdCBzZXF1ZW5jZQorI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9BVVRPCQkJMHgwNDAwMDAwMAkJLy8gQXV0byBsaW5rIGZhdWx0IHNlcXVlbmNlCisjZGVmaW5lIEFYR01BQ19DRkcyX0xGX1JFTU9URQkJMHgwMjAwMDAwMAkJLy8gUmVtb3RlIGxpbmsgZmF1bHQgKFJFQUQgT05MWSkKKyNkZWZpbmUgQVhHTUFDX0NGRzJfTEZfTE9DQUwJCTB4MDEwMDAwMDAJCS8vIExvY2FsIGxpbmsgZmF1bHQgKFJFQUQgT05MWSkKKyNkZWZpbmUgQVhHTUFDX0NGRzJfSVBHX01BU0sJCTB4MDAxRjAwMDAJCS8vIEludGVyIHBhY2tldCBnYXAKKyNkZWZpbmUgQVhHTUFDX0NGRzJfSVBHX1NISUZUCQkxNgorI2RlZmluZSBBWEdNQUNfQ0ZHMl9QQVVTRV9YTVQJCTB4MDAwMDgwMDAJCS8vIFBhdXNlIHRyYW5zbWl0IG1vZHVsZQorI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfRVhURU4JCTB4MDAwMDAwMjAJCS8vIEVuYWJsZSBJUEcgZXh0ZW5zaW9uIGFsZ29yaXRobQorI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdFWF9NQVNLCQkweDAwMDAwMDFGCQkvLyBJUEcgZXh0ZW5zaW9uCisKKy8vIEEtWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAzCisjZGVmaW5lIEFYR01BQ19DRkczX1JDVl9EUk9QCQkweEZGRkYwMDAwCQkvLyBSZWNlaXZlIGZyYW1lIGRyb3AgZmlsdGVyCisjZGVmaW5lIEFYR01BQ19DRkczX1JDVl9ET05UX0NBUkUJMHgwMDAwRkZGRgkJLy8gUmVjZWl2ZSBmcmFtZSBkb24ndCBjYXJlIGZpbHRlcgorCisvLyBBLVhHTUFDIFN0YXRpb24gQWRkcmVzcyBSZWdpc3RlciAtIE9jdGV0cyAxLTQKKyNkZWZpbmUgQVhHTUFDX1NBUkxPV19PQ1RFVF9PTkUJCTB4RkYwMDAwMDAJCS8vIEZpcnN0IG9jdGV0CisjZGVmaW5lIEFYR01BQ19TQVJMT1dfT0NURVRfVFdPCQkweDAwRkYwMDAwCQkvLyBTZWNvbmQgb2N0ZXQKKyNkZWZpbmUgQVhHTUFDX1NBUkxPV19PQ1RFVF9USFJFRQkweDAwMDBGRjAwCQkvLyBUaGlyZCBvY3RldAorI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX0ZPVVIJMHgwMDAwMDBGRgkJLy8gRm91cnRoIG9jdGV0CisKKy8vIEEtWEdNQUMgU3RhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0gT2N0ZXRzIDUtNgorI2RlZmluZSBBWEdNQUNfU0FSSElHSF9PQ1RFVF9GSVZFCTB4RkYwMDAwMDAJCS8vIEZpZnRoIG9jdGV0CisjZGVmaW5lIEFYR01BQ19TQVJISUdIX09DVEVUX1NJWAkweDAwRkYwMDAwCQkvLyBTaXh0aCBvY3RldAorCisvLyBBLVhHTUFDIE1heGltdW0gZnJhbWUgbGVuZ3RoIHJlZ2lzdGVyCisjZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9YTVQJCQkweDNGRkYwMDAwCQkvLyBNYXhpbXVtIHRyYW5zbWl0IGZyYW1lIGxlbmd0aAorI2RlZmluZSBBWEdNQUNfTUFYRlJBTUVfWE1UX1NISUZUCTE2CisjZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9SQ1YJCQkweDAwMDBGRkZGCQkvLyBNYXhpbXVtIHJlY2VpdmUgZnJhbWUgbGVuZ3RoCisvLyBUaGlzIHJlZ2lzdGVyIGRvZXNuJ3QgbmVlZCB0byBiZSB3cml0dGVuIGZvciBzdGFuZGFyZCBNVFUuCisvLyBGb3IganVtYm8sIEknbGwganVzdCBzdGF0aWNhbGx5IGRlZmluZSB0aGUgdmFsdWUgaGVyZS4gIFRoaXMKKy8vIHZhbHVlIHNldHMgdGhlIHJlY2VpdmUgYnl0ZSBjb3VudCB0byA5MDM2ICgweDIzNEMpIGFuZCB0aGUKKy8vIHRyYW5zbWl0IFdPUkQgY291bnQgdG8gMjI1OSAoMHg4RDMpLiAgVGhlc2UgdmFsdWVzIGluY2x1ZGUgMjIKKy8vIGJ5dGVzIG9mIHBhZGRpbmcgYmV5b25kIHRoZSBqdW1ibyBNVFUgb2YgOTAxNAorI2RlZmluZSBBWEdNQUNfTUFYRlJBTUVfSlVNQk8JCTB4MDhEMzIzNEMKKworLy8gQS1YR01BQyBSZXZpc2lvbiBsZXZlbAorI2RlZmluZSBBWEdNQUNfUkVWSVNJT05fTUFTSwkJMHgwMDAwRkZGRgkJLy8gUmV2aXNpb24gbGV2ZWwKKworLy8gQS1YR01BQyBBTUlJTSBDb21tYW5kIFJlZ2lzdGVyCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfU1RBUlQJCTB4MDAwMDAwMDgJCS8vIENvbW1hbmQgc3RhcnQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9NQVNLCQkweDAwMDAwMDA3CQkvLyBDb21tYW5kCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTEVHQUNZX1dSSVRFCQkxCQkvLyAxMC8xMDAvMTAwMCBNYnBzIFBoeSBXcml0ZQorI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX0xFR0FDWV9SRUFECQkyCQkvLyAxMC8xMDAvMTAwMCBNYnBzIFBoeSBSZWFkCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTU9OSVRPUl9TSU5HTEUJCTMJCS8vIE1vbml0b3Igc2luZ2xlIFBIWQorI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX01PTklUT1JfTVVMVElQTEUJNAkJLy8gTW9uaXRvciBtdWx0aXBsZSBjb250aWd1b3VzIFBIWXMKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF8xMEdfT1BFUkFUSU9OCQk1CQkvLyBQcmVzZW50IEFNSUlNIEZpZWxkIFJlZworI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX0NMRUFSX0xJTktfRkFJTAk2CQkvLyBDbGVhciBMaW5rIEZhaWwgQml0IGluIE1JSU0KKworLy8gQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfU1QJCTB4QzAwMDAwMDAJCS8vIDItYml0IFNUIGZpZWxkCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9TVF9TSElGVAkJCTMwCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9PUAkJMHgzMDAwMDAwMAkJLy8gMi1iaXQgT1AgZmllbGQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX09QX1NISUZUCQkJMjgKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1BPUlRfQUREUiAweDBGODAwMDAwCQkvLyBQb3J0IGFkZHJlc3MgZmllbGQgKGhzdHBoeWFkeCBpbiBzcGVjKQorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9TSElGVAkJMjMKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9BRERSCTB4MDA3QzAwMDAJCS8vIERldmljZSBhZGRyZXNzIGZpZWxkIChoc3RyZWdhZHggaW4gc3BlYykKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9TSElGVAkJMTgKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBCQkweDAwMDMwMDAwCQkvLyAyLWJpdCBUQSBmaWVsZAorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfVEFfU0hJRlQJCQkxNgorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREFUQQkJMHgwMDAwRkZGRgkJLy8gRGF0YSBmaWVsZAorCisvLyBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfT1AgZmllbGQgaW4gdGhlIEEtWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKKyNkZWZpbmUJTUlJTV9PUF9BRERSCQkJCQkJMAkJLy8gTUlJTSBBZGRyZXNzIHNldCBvcGVyYXRpb24KKyNkZWZpbmUJTUlJTV9PUF9XUklURQkJCQkJCTEJCS8vIE1JSU0gV3JpdGUgcmVnaXN0ZXIgb3BlcmF0aW9uCisjZGVmaW5lCU1JSU1fT1BfUkVBRAkJCQkJCTIJCS8vIE1JSU0gUmVhZCByZWdpc3RlciBvcGVyYXRpb24KKyNkZWZpbmUJTUlJTV9PUF9BRERSX1NISUZUCShNSUlNX09QX0FERFIgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX09QX1NISUZUKQorCisvLyBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9BRERSIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyCisjZGVmaW5lCU1JSU1fUE9SVF9OVU0JCQkJCQkxCQkvLyBBbGwgU2FoYXJhIE1JSU0gbW9kdWxlcyB1c2UgcG9ydCAxCisKKy8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9ERVZfQUREUiBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgorI2RlZmluZQlNSUlNX0RFVl9QSFlfUE1BCQkJCQkxCQkvLyBQSFkgUE1BL1BNRCBtb2R1bGUgTUlJTSBkZXZpY2UgbnVtYmVyCisjZGVmaW5lCU1JSU1fREVWX1BIWV9QQ1MJCQkJCTMJCS8vIFBIWSBQQ1MgbW9kdWxlIE1JSU0gZGV2aWNlIG51bWJlcgorI2RlZmluZQlNSUlNX0RFVl9QSFlfWFMJCQkJCQk0CQkvLyBQSFkgWFMgbW9kdWxlIE1JSU0gZGV2aWNlIG51bWJlcgorI2RlZmluZQlNSUlNX0RFVl9YR1hTCQkJCQkJNQkJLy8gWEdYUyBNSUlNIGRldmljZSBudW1iZXIKKworLy8gVmFsdWVzIGZvciB0aGUgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyCisjZGVmaW5lCU1JSU1fVEFfMTBHQgkJCQkJCTIJCS8vIHNldCB0byAyIGZvciAxMCBHQiBvcGVyYXRpb24KKworLy8gQS1YR01BQyBBTUlJTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DRkdfTk9QUkVBTQkweDAwMDAwMDgwCQkvLyBCeXBhc3MgcHJlYW1ibGUgb2YgbW5nbXQgZnJhbWUKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NGR19IQUxGX0NMT0NLCTB4MDAwMDAwN0YJCS8vIGhhbGYtY2xvY2sgZHVyYXRpb24gb2YgTURDIG91dHB1dAorCisvLyBBLVhHTUFDIEFNSUlNIEluZGljYXRvciBSZWdpc3RlcgorI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19MSU5LCQkweDAwMDAwMDEwCQkvLyBMaW5rIHN0YXR1cyBmcm9tIGxlZ2FjeSBQSFkgb3IgTU1ECisjZGVmaW5lIEFYR01BQ19BTUlJTV9JTkRDX01QSFkJCTB4MDAwMDAwMDgJCS8vIE11bHRpcGxlIHBoeSBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfU1BIWQkJMHgwMDAwMDAwNAkJLy8gU2luZ2xlIHBoeSBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfTU9OCQkweDAwMDAwMDAyCQkvLyBTaW5nbGUgb3IgbXVsdGlwbGUgbW9uaXRvciBjbWQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfQlVTWQkJMHgwMDAwMDAwMQkJLy8gU2V0IHVudGlsIGNtZCBvcGVyYXRpb24gY29tcGxldGUKKworLy8gTGluayBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXIKKyNkZWZpbmUJTFNfUEhZX0NMUl9SRVNFVAkJCTB4ODAwMDAwMDAJCS8vIENsZWFyIHJlc2V0IHNpZ25hbCB0byBQSFkKKyNkZWZpbmUJTFNfU0VSREVTX1BPV0VSX0RPV04JCTB4NDAwMDAwMDAJCS8vIFBvd2VyIGRvd24gdGhlIFNhaGFyYSBTZXJkZXMKKyNkZWZpbmUJTFNfWEdYU19FTkFCTEUJCQkJMHgyMDAwMDAwMAkJLy8gRW5hYmxlIHRoZSBYQVVJIFhHWFMgbG9naWMKKyNkZWZpbmUJTFNfWEdYU19DVEwJCQkJCTB4MTAwMDAwMDAJCS8vIEhvbGQgWEFVSSBYR1hTIGxvZ2ljIHJlc2V0IHVudGlsIFNlcmRlcyBpcyB1cAorI2RlZmluZQlMU19TRVJERVNfRE9XTgkJCQkweDA4MDAwMDAwCQkvLyBXaGVuIDAsIFhBVUkgU2VyZGVzIGlzIHVwIGFuZCBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZQorI2RlZmluZQlMU19UUkFDRV9ET1dOCQkJCTB4MDQwMDAwMDAJCS8vIFdoZW4gMCwgVHJhY2UgU2VyZGVzIGlzIHVwIGFuZCBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZQorI2RlZmluZQlMU19QSFlfQ0xLXzI1TUhaCQkJMHgwMjAwMDAwMAkJLy8gU2V0IFBIWSBjbG9jayB0byAyNSBNSHogKGVsc2UgMTU2LjEyNSBNSHopCisjZGVmaW5lCUxTX1BIWV9DTEtfRU4JCQkJMHgwMTAwMDAwMAkJLy8gRW5hYmxlIGNsb2NrIHRvIFBIWQorI2RlZmluZQlMU19YQVVJX0xJTktfVVAJCQkJMHgwMDAwMDAxMAkJLy8gWEFVSSBsaW5rIGlzIHVwCisjZGVmaW5lCUxTX1hBVUlfTElOS19DSE5HCQkJMHgwMDAwMDAwOAkJLy8gWEFVSSBsaW5rIHN0YXR1cyBoYXMgY2hhbmdlZAorI2RlZmluZQlMU19MSU5LX0FMQVJNCQkJCTB4MDAwMDAwMDQJCS8vIExpbmsgYWxhcm0gcGluCisjZGVmaW5lCUxTX0FUVE5fQ1RSTF9NQVNLCQkJMHgwMDAwMDAwMwkJLy8gTWFzayBsaW5rIGF0dGVudGlvbiBjb250cm9sIGJpdHMKKyNkZWZpbmUJTFNfQVRUTl9BTEFSTQkJCQkweDAwMDAwMDAwCQkvLyAwMCA9PiBBdHRuIG9uIGxpbmsgYWxhcm0KKyNkZWZpbmUJTFNfQVRUTl9BTEFSTV9PUl9TVEFUX0NITkcJMHgwMDAwMDAwMQkJLy8gMDEgPT4gQXR0biBvbiBsaW5rIGFsYXJtIG9yIHN0YXR1cyBjaGFuZ2UKKyNkZWZpbmUJTFNfQVRUTl9TVEFUX0NITkcJCQkweDAwMDAwMDAyCQkvLyAxMCA9PiBBdHRuIG9uIGxpbmsgc3RhdHVzIGNoYW5nZQorI2RlZmluZQlMU19BVFROX05PTkUJCQkJMHgwMDAwMDAwMwkJLy8gMTEgPT4gbm8gQXR0bgorCisvLyBMaW5rIEFkZHJlc3MgSGlnaCBSZWdpc3RlcnMKKyNkZWZpbmUJTElOS19BRERSX0VOQUJMRQkJCTB4ODAwMDAwMDAJCS8vIEVuYWJsZSB0aGlzIGxpbmsgYWRkcmVzcworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFhHWFMgWEFVSSBYR01JSSBFeHRlbmRlciByZWdpc3RlcnMKKyAqCisgKiBGdWxsIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gbXhneHMucGRmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gWEdYUyBSZWdpc3RlciBNYXAKKyNkZWZpbmUgWEdYU19BRERSRVNTX0NPTlRST0wxCQkweDAwMDAJCQkvLyBYUyBDb250cm9sIDEKKyNkZWZpbmUgWEdYU19BRERSRVNTX1NUQVRVUzEJCTB4MDAwMQkJCS8vIFhTIFN0YXR1cyAxCisjZGVmaW5lIFhHWFNfQUREUkVTU19ERVZJRF9MT1cJCTB4MDAwMgkJCS8vIFhTIERldmljZSBJRCAobG93KQorI2RlZmluZSBYR1hTX0FERFJFU1NfREVWSURfSElHSAkJMHgwMDAzCQkJLy8gWFMgRGV2aWNlIElEIChoaWdoKQorI2RlZmluZSBYR1hTX0FERFJFU1NfU1BFRUQJCQkweDAwMDQJCQkvLyBYUyBTcGVlZCBhYmlsaXR5CisjZGVmaW5lIFhHWFNfQUREUkVTU19ERVZfTE9XCQkweDAwMDUJCQkvLyBYUyBEZXZpY2VzIGluIHBhY2thZ2UKKyNkZWZpbmUgWEdYU19BRERSRVNTX0RFVl9ISUdICQkweDAwMDYJCQkvLyBYUyBEZXZpY2VzIGluIHBhY2thZ2UKKyNkZWZpbmUgWEdYU19BRERSRVNTX1NUQVRVUzIJCTB4MDAwOAkJCS8vIFhTIFN0YXR1cyAyCisjZGVmaW5lIFhHWFNfQUREUkVTU19QS0dJRF9sT1cJCTB4MDAwRQkJCS8vIFhTIFBhY2thZ2UgSWRlbnRpZmllcgorI2RlZmluZSBYR1hTX0FERFJFU1NfUEtHSURfSElHSAkJMHgwMDBGCQkJLy8gWFMgUGFja2FnZSBJZGVudGlmaWVyCisjZGVmaW5lIFhHWFNfQUREUkVTU19MQU5FX1NUQVRVUwkweDAwMTgJCQkvLyAxMEcgWEdYUyBMYW5lIFN0YXR1cworI2RlZmluZSBYR1hTX0FERFJFU1NfVEVTVF9DVFJMCQkweDAwMTkJCQkvLyAxMEcgWEdYUyBUZXN0IENvbnRyb2wKKyNkZWZpbmUgWEdYU19BRERSRVNTX1JFU0VUX0xPMQkJMHg4MDAwCQkJLy8gVmVuZG9yLVNwZWNpZmljIFJlc2V0IExvIDEKKyNkZWZpbmUgWEdYU19BRERSRVNTX1JFU0VUX0xPMgkJMHg4MDAxCQkJLy8gVmVuZG9yLVNwZWNpZmljIFJlc2V0IExvIDIKKyNkZWZpbmUgWEdYU19BRERSRVNTX1JFU0VUX0hJMQkJMHg4MDAyCQkJLy8gVmVuZG9yLVNwZWNpZmljIFJlc2V0IEhpIDEKKyNkZWZpbmUgWEdYU19BRERSRVNTX1JFU0VUX0hJMgkJMHg4MDAzCQkJLy8gVmVuZG9yLVNwZWNpZmljIFJlc2V0IEhpIDIKKworLy8gWFMgQ29udHJvbCAxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZSBYR1hTX0NPTlRST0wxX1JFU0VUCQkJMHg4MDAwCQkJLy8gUmVzZXQgLSBzZWxmIGNsZWFyaW5nCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfTE9PUEJBQ0sJCTB4NDAwMAkJCS8vIEVuYWJsZSBsb29wYmFjaworI2RlZmluZSBYR1hTX0NPTlRST0wxX1NQRUVEMQkJMHgyMDAwCQkJLy8gMCA9IHVuc3BlY2lmaWVkLCAxID0gMTBHYisKKyNkZWZpbmUgWEdYU19DT05UUk9MMV9MT1dQT1dFUgkJMHgwNDAwCQkJLy8gMSA9IExvdyBwb3dlciBtb2RlCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfU1BFRUQyCQkweDAwNDAJCQkvLyBTYW1lIGFzIFNQRUVEMSAoPykKKyNkZWZpbmUgWEdYU19DT05UUk9MMV9TUEVFRAkJCTB4MDAzQwkJCS8vIEV2ZXJ5dGhpbmcgcmVzZXJ2ZWQgZXhjZXB0IHplcm8gKD8pCisKKy8vIFhTIFN0YXR1cyAxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZSBYR1hTX1NUQVRVUzFfRkFVTFQJCQkweDAwODAJCQkvLyBGYXVsdCBkZXRlY3RlZAorI2RlZmluZSBYR1hTX1NUQVRVUzFfTElOSwkJCTB4MDAwNAkJCS8vIDEgPSBMaW5rIHVwCisjZGVmaW5lIFhHWFNfU1RBVFVTMV9MT1dQT1dFUgkJMHgwMDAyCQkJLy8gMSA9IExvdyBwb3dlciBzdXBwb3J0ZWQKKworLy8gWFMgU3BlZWQgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lIFhHWFNfU1BFRURfMTBHCQkJCTB4MDAwMQkJCS8vIDEgPSAxMEcgY2FwYWJsZQorCisvLyBYUyBEZXZpY2VzIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZSBYR1hTX0RFVklDRVNfRFRFCQkJMHgwMDIwCQkJLy8gRFRFIFhTIFByZXNlbnQKKyNkZWZpbmUgWEdYU19ERVZJQ0VTX1BIWQkJCTB4MDAxMAkJCS8vIFBIWSBYUyBQcmVzZW50CisjZGVmaW5lIFhHWFNfREVWSUNFU19QQ1MJCQkweDAwMDgJCQkvLyBQQ1MgUHJlc2VudAorI2RlZmluZSBYR1hTX0RFVklDRVNfV0lTCQkJMHgwMDA0CQkJLy8gV0lTIFByZXNlbnQKKyNkZWZpbmUgWEdYU19ERVZJQ0VTX1BNRAkJCTB4MDAwMgkJCS8vIFBNRC9QTUEgUHJlc2VudAorI2RlZmluZSBYR1hTX0RFVklDRVNfQ0xBVVNFMjIJCTB4MDAwMQkJCS8vIENsYXVzZSAyMiByZWdpc3RlcnMgcHJlc2VudAorCisvLyBYUyBEZXZpY2VzIEhpZ2ggcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lIFhHWFNfREVWSUNFU19WRU5ET1IyCQkweDgwMDAJCQkvLyBWZW5kb3Igc3BlY2lmaWMgZGV2aWNlIDIKKyNkZWZpbmUgWEdYU19ERVZJQ0VTX1ZFTkRPUjEJCTB4NDAwMAkJCS8vIFZlbmRvciBzcGVjaWZpYyBkZXZpY2UgMQorCisvLyBYUyBTdGF0dXMgMiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19TVEFUVVMyX0RFVl9NQVNLCQkweEMwMDAJCQkvLyBEZXZpY2UgcHJlc2VudCBtYXNrCisjZGVmaW5lIFhHWFNfU1RBVFVTMl9ERVZfUkVTUE9ORAkweDgwMDAJCQkvLyBEZXZpY2UgcmVzcG9uZGluZworI2RlZmluZSBYR1hTX1NUQVRVUzJfWE1UX0ZBVUxUCQkweDA4MDAJCQkvLyBUcmFuc21pdCBmYXVsdAorI2RlZmluZSBYR1hTX1NUQVRVUzJfUkNWX0ZBVUxUCQkweDA0MDAJCQkvLyBSZWNlaXZlIGZhdWx0CisKKy8vIFhTIFBhY2thZ2UgSUQgSGlnaCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX09SRwkJCTB4RkMwMAkJCS8vIE9yZ2FuaXphdGlvbmFsbHkgVW5pcXVlCisjZGVmaW5lIFhHWFNfUEtHSURfSElHSF9NRkcJCQkweDAzRjAJCQkvLyBNYW51ZmFjdHVyZXIgTW9kZWwKKyNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX1JFVgkJCTB4MDAwRgkJCS8vIFJldmlzaW9uIE51bWJlcgorCisvLyBYUyBMYW5lIFN0YXR1cyByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19MQU5FX1BIWQkJCQkweDEwMDAJCQkvLyBQSFkvRFRFIGxhbmUgYWxpZ25tZW50IHN0YXR1cworI2RlZmluZSBYR1hTX0xBTkVfUEFUVEVSTgkJCTB4MDgwMAkJCS8vIFBhdHRlcm4gdGVzdGluZyBhYmlsaXR5CisjZGVmaW5lIFhHWFNfTEFORV9MT09QQkFDSwkJCTB4MDQwMAkJCS8vIFBIWSBsb29wYmFjayBhYmlsaXR5CisjZGVmaW5lIFhHWFNfTEFORV9TWU5DMwkJCQkweDAwMDgJCQkvLyBMYW5lIDMgc3luYworI2RlZmluZSBYR1hTX0xBTkVfU1lOQzIJCQkJMHgwMDA0CQkJLy8gTGFuZSAyIHN5bmMKKyNkZWZpbmUgWEdYU19MQU5FX1NZTkMxCQkJCTB4MDAwMgkJCS8vIExhbmUgMSBzeW5jCisjZGVmaW5lIFhHWFNfTEFORV9TWU5DMAkJCQkweDAwMDEJCQkvLyBMYW5lIDAgc3luYworCisvLyBYUyBUZXN0IENvbnRyb2wgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX0VOQUJMRQkweDAwMDQJCQkvLyBUZXN0IHBhdHRlcm4gZW5hYmxlZAorI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9NQVNLCQkweDAwMDMJCQkvLyBUZXN0IHBhdHRlcm5zCisjZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX1JTVkQJCTB4MDAwMwkJCS8vIFRlc3QgcGF0dGVybiAtIHJlc2VydmVkCisjZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX01JWAkJMHgwMDAyCQkJLy8gVGVzdCBwYXR0ZXJuIC0gbWl4ZWQKKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fTE9XCQkweDAwMDEJCQkvLyBUZXN0IHBhdHRlcm4gLSBsb3cKKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fSElHSAkJMHgwMDAxCQkJLy8gVGVzdCBwYXR0ZXJuIC0gaGlnaAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFeHRlcm5hbCBNRElPIEJ1cyBSZWdpc3RlcnMKKyAqCisgKiBGdWxsIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gUEhZL1hFTlBBSy9JRUVFIHNwZWNzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gTEFTSSAoTGluayBBbGFybSBTdGF0dXMgSW50ZXJydXB0KSBSZWdpc3RlcnMgKGxvY2F0ZWQgaW4gTUlJTV9ERVZfUEhZX1BNQSBkZXZpY2UpCisjZGVmaW5lIExBU0lfUlhfQUxBUk1fQ09OVFJPTAkJMHg5MDAwCQkJLy8gTEFTSSBSWF9BTEFSTSBDb250cm9sCisjZGVmaW5lIExBU0lfVFhfQUxBUk1fQ09OVFJPTAkJMHg5MDAxCQkJLy8gTEFTSSBUWF9BTEFSTSBDb250cm9sCisjZGVmaW5lIExBU0lfQ09OVFJPTAkJCQkweDkwMDIJCQkvLyBMQVNJIENvbnRyb2wKKyNkZWZpbmUgTEFTSV9SWF9BTEFSTV9TVEFUVVMJCTB4OTAwMwkJCS8vIExBU0kgUlhfQUxBUk0gU3RhdHVzCisjZGVmaW5lIExBU0lfVFhfQUxBUk1fU1RBVFVTCQkweDkwMDQJCQkvLyBMQVNJIFRYX0FMQVJNIFN0YXR1cworI2RlZmluZSBMQVNJX1NUQVRVUwkJCQkJMHg5MDA1CQkJLy8gTEFTSSBTdGF0dXMKKworLy8gTEFTSV9DT05UUk9MIGJpdCBkZWZpbml0aW9ucworI2RlZmluZQlMQVNJX0NUTF9SWF9BTEFSTV9FTkFCTEUJMHgwMDA0CQkJLy8gRW5hYmxlIFJYX0FMQVJNIGludGVycnVwdHMKKyNkZWZpbmUJTEFTSV9DVExfVFhfQUxBUk1fRU5BQkxFCTB4MDAwMgkJCS8vIEVuYWJsZSBUWF9BTEFSTSBpbnRlcnJ1cHRzCisjZGVmaW5lCUxBU0lfQ1RMX0xTX0FMQVJNX0VOQUJMRQkweDAwMDEJCQkvLyBFbmFibGUgTGluayBTdGF0dXMgaW50ZXJydXB0cworCisvLyBMQVNJX1NUQVRVUyBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUJTEFTSV9TVEFUVVNfUlhfQUxBUk0JCTB4MDAwNAkJCS8vIFJYX0FMQVJNIHN0YXR1cworI2RlZmluZQlMQVNJX1NUQVRVU19UWF9BTEFSTQkJMHgwMDAyCQkJLy8gVFhfQUxBUk0gc3RhdHVzCisjZGVmaW5lCUxBU0lfU1RBVFVTX0xTX0FMQVJNCQkweDAwMDEJCQkvLyBMaW5rIFN0YXR1cworCisvLyBQSFkgcmVnaXN0ZXJzIC0gUE1BL1BNRCAoZGV2aWNlIDEpCisjZGVmaW5lCVBIWV9QTUFfQ09OVFJPTDEJCQkweDAwMDAJCQkvLyBQTUEvUE1EIENvbnRyb2wgMQorI2RlZmluZQlQSFlfUE1BX1NUQVRVUzEJCQkJMHgwMDAxCQkJLy8gUE1BL1BNRCBTdGF0dXMgMQorI2RlZmluZQlQSFlfUE1BX1JDVl9ERVQJCQkJMHgwMDBBCQkJLy8gUE1BL1BNRCBSZWNlaXZlIFNpZ25hbCBEZXRlY3QKKwkJLy8gb3RoZXIgUE1BL1BNRCByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZAorCisvLyBQSFkgcmVnaXN0ZXJzIC0gUENTIChkZXZpY2UgMykKKyNkZWZpbmUJUEhZX1BDU19DT05UUk9MMQkJCTB4MDAwMAkJCS8vIFBDUyBDb250cm9sIDEKKyNkZWZpbmUJUEhZX1BDU19TVEFUVVMxCQkJCTB4MDAwMQkJCS8vIFBDUyBTdGF0dXMgMQorI2RlZmluZQlQSFlfUENTXzEwR19TVEFUVVMxCQkJMHgwMDIwCQkJLy8gUENTIDEwR0JBU0UtUiBTdGF0dXMgMQorCQkvLyBvdGhlciBQQ1MgcmVnaXN0ZXJzIGV4aXN0IGFuZCBjYW4gYmUgZGVmaW5lZCBhcyBuZWVkZWQKKworLy8gUEhZIHJlZ2lzdGVycyAtIFhTIChkZXZpY2UgNCkKKyNkZWZpbmUJUEhZX1hTX0NPTlRST0wxCQkJCTB4MDAwMAkJCS8vIFhTIENvbnRyb2wgMQorI2RlZmluZQlQSFlfWFNfU1RBVFVTMQkJCQkweDAwMDEJCQkvLyBYUyBTdGF0dXMgMQorI2RlZmluZQlQSFlfWFNfTEFORV9TVEFUVVMJCQkweDAwMTgJCQkvLyBYUyBMYW5lIFN0YXR1cworCQkvLyBvdGhlciBYUyByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZAorCisvLyBQSFlfUE1BX0NPTlRST0wxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZQlQTUFfQ09OVFJPTDFfUkVTRVQJCQkweDgwMDAJCQkvLyBQTUEvUE1EIHJlc2V0CisKKy8vIFBIWV9QTUFfUkNWX0RFVCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUJUE1BX1JDVl9ERVRFQ1QJCQkJMHgwMDAxCQkJLy8gUE1BL1BNRCByZWNlaXZlIHNpZ25hbCBkZXRlY3QKKworLy8gUEhZX1BDU18xMEdfU1RBVFVTMSByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUJUENTXzEwQl9CTE9DS19MT0NLCQkJMHgwMDAxCQkJLy8gUENTIDEwR0JBU0UtUiBsb2NrZWQgdG8gcmVjZWl2ZSBibG9ja3MKKworLy8gUEhZX1hTX0xBTkVfU1RBVFVTIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZQlYU19MQU5FX0FMSUdOCQkJCTB4MTAwMAkJCS8vIFhTIHRyYW5zbWl0IGxhbmVzIGFsaWduZWQKKworLy8gUEhZIE1pY3JvY29kZSBkb3dubG9hZCBkYXRhIHN0cnVjdHVyZQordHlwZWRlZiBzdHJ1Y3QgX1BIWV9VQ09ERSB7CisJdXNob3J0CUFkZHI7CisJdXNob3J0CURhdGE7Cit9IFBIWV9VQ09ERSwgKlBQSFlfVUNPREU7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUcmFuc21pdCBTZXF1ZW5jZXIgQ29tbWFuZCBEZXNjcmlwdG9yIGRlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIFRoaXMgZGVzY3JpcHRvciBtdXN0IGJlIHBsYWNlZCBpbiBHUkFNLiAgVGhlIGFkZHJlc3Mgb2YgdGhpcyBkZXNjcmlwdG9yCisvLyAoYWxvbmcgd2l0aCBhIGNvdXBsZSBvZiBjb250cm9sIGJpdHMpIGlzIHB1c2hlZCBvbnRvIHRoZSBQeGhDbWRRIG9yIFB4bENtZFEKKy8vIChQcm94eSBoaWdoIG9yIGxvdyBjb21tYW5kIHF1ZXVlKS4gIFRoaXMgZGF0YSBpcyByZWFkIGJ5IHRoZSBQcm94eSBTZXF1ZW5jZXIsCisvLyB3aGljaCBwdXNoZXMgaXQgb250byB0aGUgWG10Q21kUSwgd2hpY2ggaXMgKGV2ZW50dWFsbHkpIHJlYWQgYnkgdGhlIFRyYW5zbWl0CisvLyBTZXF1ZW5jZXIsIGNhdXNpbmcgYSBwYWNrZXQgdG8gYmUgdHJhbnNtaXR0ZWQuICBOb3QgYWxsIGZpZWxkcyBhcmUgdmFsaWQgZm9yCisvLyBhbGwgY29tbWFuZHMgLSBzZWUgdGhlIFNhaGFyYSBzcGVjIGZvciBkZXRhaWxzLiAgTm90ZSB0aGF0IHRoaXMgc3RydWN0dXJlIGlzCisvLyBvbmx5IHZhbGlkIHdoZW4gY29tcGlsZWQgb24gYSBsaXR0bGUgZW5kaWFuIG1hY2hpbmUuCisjcHJhZ21hIHBhY2socHVzaCwgMSkKK3R5cGVkZWYgc3RydWN0IF9YTVRfREVTQyB7CisJdXNob3J0CVhtdExlbjsJCQkvLyB3b3JkIDAsIGJpdHMgWzE1OjBdIC0gIHRyYW5zbWl0IGxlbmd0aAorCXVuc2lnbmVkIGNoYXIJWG10Q3RsOwkJCS8vIHdvcmQgMCwgYml0cyBbMjM6MTZdIC0gdHJhbnNtaXQgY29udHJvbCBieXRlCisJdW5zaWduZWQgY2hhcglDbWQ7CQkJLy8gd29yZCAwLCBiaXRzIFszMToyNF0gLSB0cmFuc21pdCBjb21tYW5kIHBsdXMgbWlzYy4KKwl1MzIJWG10QnVmSWQ7CQkvLyB3b3JkIDEsIGJpdHMgWzMxOjBdIC0gIHRyYW5zbWl0IGJ1ZmZlciBJRAorCXVuc2lnbmVkIGNoYXIJVGNwU3RydDsJCS8vIHdvcmQgMiwgYml0cyBbNzowXSAtICAgYnl0ZSBhZGRyZXNzIG9mIFRDUCBoZWFkZXIKKwl1bnNpZ25lZCBjaGFyCUlwU3RydDsJCQkvLyB3b3JkIDIsIGJpdHMgWzE1OjhdIC0gIGJ5dGUgYWRkcmVzcyBvZiBJUCBoZWFkZXIKKwl1c2hvcnQJSXBDa1N1bTsJCS8vIHdvcmQgMiwgYml0cyBbMzE6MTZdIC0gcGFydGlhbCBJUCBjaGVja3N1bQorCXVzaG9ydAlUY3BDa1N1bTsJCS8vIHdvcmQgMywgYml0cyBbMTU6MF0gLSAgcGFydGlhbCBUQ1AgY2hlY2tzdW0KKwl1c2hvcnQJUnN2ZDE7CQkJLy8gd29yZCAzLCBiaXRzIFszMToxNl0gLSBQQUQKKwl1MzIJUnN2ZDI7CQkJLy8gd29yZCA0LCBiaXRzIFszMTowXSAtICBQQUQKKwl1MzIJUnN2ZDM7CQkJLy8gd29yZCA1LCBiaXRzIFszMTowXSAtICBQQUQKKwl1MzIJUnN2ZDQ7CQkgICAgLy8gd29yZCA2LCBiaXRzIFszMTowXSAtICBQQUQKKwl1MzIJUnN2ZDU7CQkgICAgLy8gd29yZCA3LCBiaXRzIFszMTowXSAtICBQQUQKK30gWE1UX0RFU0MsICpQWE1UX0RFU0M7CisjcHJhZ21hIHBhY2socG9wKQorCisvLyBYTVRfREVTQyBDbWQgYnl0ZSBkZWZpbml0aW9ucworCQkvLyBjb21tYW5kIGNvZGVzCisjZGVmaW5lIFhNVF9ERVNDX0NNRF9SQVdfU0VORAkJMAkJLy8gcmF3IHNlbmQgZGVzY3JpcHRvcgorI2RlZmluZSBYTVRfREVTQ19DTURfQ1NVTV9JTlNFUlQJMQkJLy8gY2hlY2tzdW0gaW5zZXJ0IGRlc2NyaXB0b3IKKyNkZWZpbmUgWE1UX0RFU0NfQ01EX0ZPUk1BVAkJCTIJCS8vIGZvcm1hdCBkZXNjcmlwdG9yCisjZGVmaW5lIFhNVF9ERVNDX0NNRF9QUklNRQkJCTMJCS8vIHByaW1lIGRlc2NyaXB0b3IKKyNkZWZpbmUgWE1UX0RFU0NfQ01EX0NPREVfU0hGVAkJNgkJLy8gY29tYW5kIGNvZGUgc2hpZnQgKHNoaWZ0IHRvIGJpdHMgWzMxOjMwXSBpbiB3b3JkIDApCisJCS8vIHNoaWZ0ZWQgY29tbWFuZCBjb2RlcworI2RlZmluZSBYTVRfUkFXX1NFTkQJCShYTVRfREVTQ19DTURfUkFXX1NFTkQgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKKyNkZWZpbmUgWE1UX0NTVU1fSU5TRVJUCQkoWE1UX0RFU0NfQ01EX0NTVU1fSU5TRVJUIDw8IFhNVF9ERVNDX0NNRF9DT0RFX1NIRlQpCisjZGVmaW5lIFhNVF9GT1JNQVQJCQkoWE1UX0RFU0NfQ01EX0ZPUk1BVCAgICAgIDw8IFhNVF9ERVNDX0NNRF9DT0RFX1NIRlQpCisjZGVmaW5lIFhNVF9QUklNRQkJCShYTVRfREVTQ19DTURfUFJJTUUgICAgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKKworLy8gWE1UX0RFU0MgQ29udHJvbCBCeXRlIChYbXRDdGwpIGRlZmluaXRpb25zCisvLyBOT1RFOiAgVGhlc2UgYml0cyBkbyBub3Qgd29yayBvbiBTYWhhcmEgKFJldiBBKSEKKyNkZWZpbmUJWE1UX0NUTF9QQVVTRV9GUkFNRQkJCTB4ODAJLy8gY3VycmVudCBmcmFtZSBpcyBhIHBhdXNlIGNvbnRyb2wgZnJhbWUgKGZvciBzdGF0aXN0aWNzKQorI2RlZmluZQlYTVRfQ1RMX0NPTlRST0xfRlJBTUUJCTB4NDAJLy8gY3VycmVudCBmcmFtZSBpcyBhIGNvbnRyb2wgZnJhbWUgKGZvciBzdGF0aXN0aWNzKQorI2RlZmluZQlYTVRfQ1RMX1BFUl9QS1RfUVVBTAkJMHgyMAkvLyBwZXIgcGFja2V0IHF1YWxpZmllcgorI2RlZmluZQlYTVRfQ1RMX1BBRF9NT0RFX05PTkUJCTB4MDAJLy8gZG8gbm90IHBhZCBmcmFtZQorI2RlZmluZQlYTVRfQ1RMX1BBRF9NT0RFXzY0CQkJMHgwOAkvLyBwYWQgZnJhbWUgdG8gNjQgYnl0ZXMKKyNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV9WTEFOXzY4CTB4MTAJLy8gcGFkIGZyYW1lIHRvIDY0IGJ5dGVzLCBhbmQgVkxBTiBmcmFtZXMgdG8gNjggYnl0ZXMKKyNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV82OAkJCTB4MTgJLy8gcGFkIGZyYW1lIHRvIDY4IGJ5dGVzCisjZGVmaW5lCVhNVF9DVExfR0VOX0ZDUwkJCQkweDA0CS8vIGdlbmVyYXRlIEZDUyAoQ1JDKSBmb3IgdGhpcyBmcmFtZQorI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18wCQkJMHgwMAkvLyBkbyBub3QgZGVsYXkgRkNTIGNhbGN1dGlvbgorI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18xCQkJMHgwMQkvLyBkZWxheSBGQ1MgY2FsY3VsYXRpb24gYnkgMSAoNC1ieXRlKSB3b3JkCisjZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzIJCQkweDAyCS8vIGRlbGF5IEZDUyBjYWxjdWxhdGlvbiBieSAyICg0LWJ5dGUpIHdvcmRzCisjZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzMJCQkweDAzCS8vIGRlbGF5IEZDUyBjYWxjdWxhdGlvbiBieSAzICg0LWJ5dGUpIHdvcmRzCisKKy8vIFhNVF9ERVNDIFhtdEJ1ZklkIGRlZmluaXRpb24KKyNkZWZpbmUgWE1UX0JVRl9JRF9TSEZUCQk4CQkJLy8gVGhlIFhtdCBidWZmZXIgSUQgaXMgZm9ybWVkIGJ5IGRpdmlkaW5nCisJCQkJCQkJCQkJLy8gdGhlIGJ1ZmZlciAoRFJBTSkgYWRkcmVzcyBieSAyNTYgKG9yIDw8IDgpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmVjZWl2ZXIgU2VxdWVuY2VyIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIFJlY2VpdmUgRXZlbnQgUXVldWUgKHF1ZXVlcyAzIC0gNikgYml0IGRlZmluaXRpb25zCisjZGVmaW5lCVJDVl9FVlRRX1JCRklEX01BU0sJCTB4MDAwMEZGRkYJLy8gYml0IG1hc2sgZm9yIHRoZSBSZWNlaXZlIEJ1ZmZlciBJRAorCisvLyBSZWNlaXZlIEJ1ZmZlciBJRCBkZWZpbml0aW9uCisjZGVmaW5lIFJDVl9CVUZfSURfU0hGVAkJNQkJCS8vIFRoZSBSY3YgYnVmZmVyIElEIGlzIGZvcm1lZCBieSBkaXZpZGluZworCQkJCQkJCQkJCS8vIHRoZSBidWZmZXIgKERSQU0pIGFkZHJlc3MgYnkgMzIgKG9yIDw8IDUpCisKKy8vIEZvcm1hdCBvZiB0aGUgMTggYnl0ZSBSZWNlaXZlIEJ1ZmZlciByZXR1cm5lZCBieSB0aGUKKy8vIFJlY2VpdmUgU2VxdWVuY2VyIGZvciByZWNlaXZlZCBwYWNrZXRzCisjcHJhZ21hIHBhY2socHVzaCwgMSkKK3R5cGVkZWYgc3RydWN0IF9SQ1ZfQlVGX0hEUiB7CisJdTMyCVN0YXR1czsJCQkJLy8gU3RhdHVzIHdvcmQgZnJvbSBSY3YgU2VxIFBhcnNlcgorCXVzaG9ydAlMZW5ndGg7CQkJCS8vIFJjdiBwYWNrZXQgYnl0ZSBjb3VudAorCXVuaW9uIHsKKwkJdXNob3J0CQlUY3BDc3VtOwkvLyBUQ1AgY2hlY2tzdW0KKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGNoYXIJVGNwQ3N1bUw7CS8vIGxvd2VyIDggYml0cyBvZiB0aGUgVENQIGNoZWNrc3VtCisJCQl1bnNpZ25lZCBjaGFyCUxpbmtIYXNoOwkvLyBMaW5rIGhhc2ggKG11bHRpY2FzdCBmcmFtZXMgb25seSkKKwkJfTsKKwl9OworCXVzaG9ydAlTa3RIYXNoOwkJCS8vIFNvY2tldCBoYXNoCisJdW5zaWduZWQgY2hhcglUY3BIZHJPZmZzZXQ7CQkvLyBUQ1AgaGVhZGVyIG9mZnNldCBpbnRvIHBhY2tldAorCXVuc2lnbmVkIGNoYXIJSXBIZHJPZmZzZXQ7CQkvLyBJUCBoZWFkZXIgb2Zmc2V0IGludG8gcGFja2V0CisJdTMyCVRwekhhc2g7CQkJLy8gVG9lcGxpdHogaGFzaAorCXVzaG9ydAlSZXNlcnZlZDsJCQkvLyBSZXNlcnZlZAorfSBSQ1ZfQlVGX0hEUiwgKlBSQ1ZfQlVGX0hEUjsKKyNwcmFnbWEgcGFjayhwb3ApCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBRdWV1ZSBkZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBJbmdyZXNzIChyZWFkIG9ubHkpIHF1ZXVlIG51bWJlcnMKKyNkZWZpbmUgUFhZX0JVRl9RCQkwCQkvLyBQcm94eSBCdWZmZXIgUXVldWUKKyNkZWZpbmUgSFNUX0VWVF9RCQkxCQkvLyBIb3N0IEV2ZW50IFF1ZXVlCisjZGVmaW5lIFhNVF9CVUZfUQkJMgkJLy8gVHJhbnNtaXQgQnVmZmVyIFF1ZXVlCisjZGVmaW5lIFNLVF9FVkxfUQkJMwkJLy8gUmN2U3FyIFNvY2tldCBFdmVudCBMb3cgUHJpb3JpdHkgUXVldWUKKyNkZWZpbmUgUkNWX0VWTF9RCQk0CQkvLyBSY3ZTcXIgUmN2IEV2ZW50IExvdyBQcmlvcml0eSBRdWV1ZQorI2RlZmluZSBTS1RfRVZIX1EJCTUJCS8vIFJjdlNxciBTb2NrZXQgRXZlbnQgSGlnaCBQcmlvcml0eSBRdWV1ZQorI2RlZmluZSBSQ1ZfRVZIX1EJCTYJCS8vIFJjdlNxciBSY3YgRXZlbnQgSGlnaCBQcmlvcml0eSBRdWV1ZQorI2RlZmluZSBETUFfUlNQX1EJCTcJCS8vIERtYSBSZXNwb25zZSBRdWV1ZSAtIG9uZSBwZXIgQ1BVIGNvbnRleHQKKy8vIExvY2FsIChyZWFkL3dyaXRlKSBxdWV1ZSBudW1iZXJzCisjZGVmaW5lIExPQ0FMX0FfUQkJOAkJLy8gU3BhcmUgbG9jYWwgUXVldWUKKyNkZWZpbmUgTE9DQUxfQl9RCQk5CQkvLyBTcGFyZSBsb2NhbCBRdWV1ZQorI2RlZmluZSBMT0NBTF9DX1EJCTEwCQkvLyBTcGFyZSBsb2NhbCBRdWV1ZQorI2RlZmluZSBGU01fRVZUX1EJCTExCQkvLyBGaW5pdGUtU3RhdGUtTWFjaGluZSBFdmVudCBRdWV1ZQorI2RlZmluZSBTQkZfUEFMX1EJCTEyCQkvLyBTeXN0ZW0gQnVmZmVyIFBoeXNpY2FsIEFkZHJlc3MgKGxvdykgUXVldWUKKyNkZWZpbmUgU0JGX1BBSF9RCQkxMwkJLy8gU3lzdGVtIEJ1ZmZlciBQaHlzaWNhbCBBZGRyZXNzIChoaWdoKSBRdWV1ZQorI2RlZmluZSBTQkZfVkFMX1EJCTE0CQkvLyBTeXN0ZW0gQnVmZmVyIFZpcnR1YWwgQWRkcmVzcyAobG93KSBRdWV1ZQorI2RlZmluZSBTQkZfVkFIX1EJCTE1CQkvLyBTeXN0ZW0gQnVmZmVyIFZpcnR1YWwgQWRkcmVzcyAoaGlnaCkgUXVldWUKKy8vIEVncmVzcyAod3JpdGUgb25seSkgcXVldWUgbnVtYmVycworI2RlZmluZSBIMkdfQ01EX1EJCTE2CQkvLyBIb3N0IHRvIEdsYlJhbSBETUEgQ29tbWFuZCBRdWV1ZQorI2RlZmluZSBIMkRfQ01EX1EJCTE3CQkvLyBIb3N0IHRvIERSQU0gRE1BIENvbW1hbmQgUXVldWUKKyNkZWZpbmUgRzJIX0NNRF9RCQkxOAkJLy8gR2xiUmFtIHRvIEhvc3QgRE1BIENvbW1hbmQgUXVldWUKKyNkZWZpbmUgRzJEX0NNRF9RCQkxOQkJLy8gR2xiUmFtIHRvIERSQU0gRE1BIENvbW1hbmQgUXVldWUKKyNkZWZpbmUgRDJIX0NNRF9RCQkyMAkJLy8gRFJBTSB0byBIb3N0IERNQSBDb21tYW5kIFF1ZXVlCisjZGVmaW5lIEQyR19DTURfUQkJMjEJCS8vIERSQU0gdG8gR2xiUmFtIERNQSBDb21tYW5kIFF1ZXVlCisjZGVmaW5lIEQyRF9DTURfUQkJMjIJCS8vIERSQU0gdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZQorI2RlZmluZSBQWExfQ01EX1EJCTIzCQkvLyBMb3cgUHJpb3JpdHkgUHJveHkgQ29tbWFuZCBRdWV1ZQorI2RlZmluZSBQWEhfQ01EX1EJCTI0CQkvLyBIaWdoIFByaW9yaXR5IFByb3h5IENvbW1hbmQgUXVldWUKKyNkZWZpbmUgUlNRX0NNRF9RCQkyNQkJLy8gUmVjZWl2ZSBTZXF1ZW5jZXIgQ29tbWFuZCBRdWV1ZQorI2RlZmluZSBSQ1ZfQlVGX1EJCTI2CQkvLyBSZWNlaXZlIEJ1ZmZlciBRdWV1ZQorCisvLyBCaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBQcm94eSBDb21tYW5kIHF1ZXVlcyAoUFhMX0NNRF9RIGFuZCBQWEhfQ01EX1EpCisjZGVmaW5lIFBYWV9DT1BZX0VOCQkweDAwMjAwMDAwCQkvLyBlbmFibGUgY29weSBvZiB4bXQgZGVzY3JpcHRvciB0byB4bXQgY29tbWFuZCBxdWV1ZQorI2RlZmluZSBQWFlfU0laRV8xNgkJMHgwMDAwMDAwMAkJLy8gY29weSAxNiBieXRlcworI2RlZmluZSBQWFlfU0laRV8zMgkJMHgwMDEwMDAwMAkJLy8gY29weSAzMiBieXRlcworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNYRyBFRVBST00vRmxhc2ggQ29uZmlndXJhdGlvbiBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI3ByYWdtYSBwYWNrKHB1c2gsIDEpCisKKy8vCit0eXBlZGVmIHN0cnVjdCBfSFdfQ0ZHX0RBVEEgeworCXVzaG9ydAkJQWRkcjsKKwl1bmlvbiB7CisJCXVzaG9ydAlEYXRhOworCQl1c2hvcnQJQ2hlY2tzdW07CisJfTsKK30gSFdfQ0ZHX0RBVEEsICpQSFdfQ0ZHX0RBVEE7CisKKy8vCisjZGVmaW5lCU5VTV9IV19DRkdfRU5UUklFUwkoKDEyOC9zaXplb2YoSFdfQ0ZHX0RBVEEpKSAtIDQpCisKKy8vIE1BQyBhZGRyZXNzCit0eXBlZGVmIHN0cnVjdCBfU1hHX0NPTkZJR19NQUMgeworCXVuc2lnbmVkIGNoYXIJCU1hY0FkZHJbNl07CQkJLy8gTUFDIEFkZHJlc3MKK30gU1hHX0NPTkZJR19NQUMsICpQU1hHX0NPTkZJR19NQUM7CisKKy8vCit0eXBlZGVmIHN0cnVjdCBfQVRLX0ZSVSB7CisJdW5zaWduZWQgY2hhcgkJUGFydE51bVs2XTsKKwl1bnNpZ25lZCBjaGFyCQlSZXZpc2lvblsyXTsKKwl1bnNpZ25lZCBjaGFyCQlTZXJpYWxbMTRdOworfSBBVEtfRlJVLCAqUEFUS19GUlU7CisKKy8vIE9FTSBGUlUgRm9ybWF0IHR5cGVzCisjZGVmaW5lCUFUS19GUlVfRk9STUFUCQkweDAwMDAKKyNkZWZpbmUgQ1BRX0ZSVV9GT1JNQVQJCTB4MDAwMQorI2RlZmluZSBERUxMX0ZSVV9GT1JNQVQJCTB4MDAwMgorI2RlZmluZSBIUF9GUlVfRk9STUFUCQkweDAwMDMKKyNkZWZpbmUgSUJNX0ZSVV9GT1JNQVQJCTB4MDAwNAorI2RlZmluZSBFTUNfRlJVX0ZPUk1BVAkJMHgwMDA1CisjZGVmaW5lIE5PX0ZSVV9GT1JNQVQJCTB4RkZGRgorCisvLyBFRVBST00vRmxhc2ggRm9ybWF0Cit0eXBlZGVmIHN0cnVjdCBfU1hHX0NPTkZJRyB7CisJLy8KKwkvLyBTZWN0aW9uIDEgKDEyOCBieXRlcykKKwkvLworCXVzaG9ydAkJCU1hZ2ljV29yZDsJCQkvLyBFRVBST00vRkxBU0ggTWFnaWMgY29kZSAnQTVBNScKKwl1c2hvcnQJCQlTcGlDbGtzOwkJCS8vIFNQSSBidXMgY2xvY2sgZGl2aWRlcnMKKwlIV19DRkdfREFUQQkJSHdDZmdbTlVNX0hXX0NGR19FTlRSSUVTXTsKKwkvLworCS8vCisJLy8KKwl1c2hvcnQJCQlWZXJzaW9uOwkJCS8vIEVFUFJPTSBmb3JtYXQgdmVyc2lvbgorCVNYR19DT05GSUdfTUFDCU1hY0FkZHJbNF07CQkJLy8gc3BhY2UgZm9yIDQgTUFDIGFkZHJlc3NlcworCUFUS19GUlUJCQlBdGtGcnU7CQkJCS8vIEZSVSBpbmZvcm1hdGlvbgorCXVzaG9ydAkJCU9lbUZydUZvcm1hdDsJCS8vIE9FTSBGUlUgZm9ybWF0IHR5cGUKKwl1bnNpZ25lZCBjaGFyCQkJT2VtRnJ1Wzc2XTsJCQkvLyBPRU0gRlJVIGluZm9ybWF0aW9uIChvcHRpb25hbCkKKwl1c2hvcnQJCQlDaGVja3N1bTsJCQkvLyBDaGVja3N1bSBvZiBzZWN0aW9uIDIKKwkvLyBDUyBpbmZvIFhYWFRPRE8KK30gU1hHX0NPTkZJRywgKlBTWEdfQ09ORklHOworI3ByYWdtYSBwYWNrKHBvcCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNaXNjZWxsYW5lb3VzIEhhcmR3YXJlIGRlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIFNhaGFyYSAoQVNJQyBsZXZlbCkgZGVmaW5lcworI2RlZmluZSBTQUhBUkFfR1JBTV9TSVpFCQkJMHgwMjAwMDAJCS8vIEdSQU0gc2l6ZSAtIDEyOCBLQgorI2RlZmluZSBTQUhBUkFfRFJBTV9TSVpFCQkJMHgyMDAwMDAJCS8vIERSQU0gc2l6ZSAtIDIgTUIKKyNkZWZpbmUgU0FIQVJBX1FSQU1fU0laRQkJCTB4MDA0MDAwCQkvLyBRUkFNIHNpemUgLSAxNksgZW50cmllcyAoNjQgS0IpCisjZGVmaW5lIFNBSEFSQV9XQ1NfU0laRQkJCQkweDAwMjAwMAkJLy8gV0NTIC0gOEsgaW5zdHJ1Y3Rpb25zICh4IDEwOCBiaXRzKQorCisvLyBBcmFiaWEgKGJvYXJkIGxldmVsKSBkZWZpbmVzCisjZGVmaW5lCUZMQVNIX1NJWkUJCQkJMHgwODAwMDAJCS8vIDUxMiBLQiAoNCBNYikKKyNkZWZpbmUJRUVQUk9NX1NJWkVfWEZNUgkJNTEyCQkJCS8vIHRydWUgRUVQUk9NIHNpemUgKGJ5dGVzKSwgaW5jbHVkaW5nIHhmbXIgYXJlYQorI2RlZmluZQlFRVBST01fU0laRV9OT19YRk1SCQkyNTYJCQkJLy8gRUVQUk9NIHNpemUgZXhjbHVkaW5nIHhmbXIgYXJlYQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdwaHljb2RlLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z3BoeWNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmIzNmM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdwaHljb2RlLmgKQEAgLTAsMCArMSwzNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwOCBBbGFjcml0ZWNoLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiBzeGdwaHljb2RlLmg6CisgKgorICogVGhpcyBmaWxlIFBIWSBtaWNyb2NvZGUgYW5kIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIGRhdGEuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBIWSBNaWNyb2NvZGUKKyAqCisgKiBUaGUgZm9sbG93aW5nIGNvbnRhaW5zIGJvdGggUEhZIG1pY3JvY29kZSBhbmQgUEhZIHJlZ2lzdGVyCisgKiBpbml0aWFsaXphdGlvbiBkYXRhLiAgSXQgaXMgc3BlY2lmaWMgdG8gYm90aCB0aGUgUEhZIGFuZCB0aGUKKyAqIHR5cGUgb2YgdHJhbnNjZWl2ZXIuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBEb3dubG9hZCBmb3IgQUVMMjAwNUMgUEhZIHdpdGggU1IvTFIgdHJhbnNjZWl2ZXIgKDEwR0JBU0UtU1Igb3IgMTBHQkFTRS1MUikKKyAqLworc3RhdGljIFBIWV9VQ09ERSBQaHlVY29kZVtdID0geworCS8qCisJICogTk9URTogIEFuIGFkZHJlc3Mgb2YgMCBpcyBhIHNwZWNpYWwgY2FzZS4gIFdoZW4gdGhlIGRvd25sb2FkIHJvdXRpbmUKKwkgKiBzZWVzIGFuIGFkZHJlc3Mgb2YgMCwgaXQgZG9lcyBub3Qgd3JpdGUgdG8gdGhlIFBIWS4gIEluc3RlYWQsIGl0CisJICogZGVsYXlzIHRoZSBkb3dubG9hZC4gIFRoZSBsZW5ndGggb2YgdGhlIGRlbGF5IChpbiBtcykgaXMgZ2l2ZW4gaW4KKwkgKiB0aGUgZGF0YSBmaWVsZC4KKwkgKgorCSAqIERlbGF5cyBhcmUgcmVxdWlyZWQgYXQgY2VydGFpbiBwb2ludHMuCisJICovCisKKwkvKgorCSAqIFBsYXRmb3JtLXNwZWNpZmljIE1ESU8gUGF0Y2hlczoKKwkgKiAoaW5jbHVkZSBwYXRjaGVzIGZvciAxMEcgUlggcG9sYXJpdHkgZmxpcCwgNTBNaHogU3ludGgsIGV0YykKKwkgKi8KKwkvKiBBZGRyLCBEYXRhICovCisJezB4YzAxNywgMHhmZWIwfSwJLyogZmxpcCBSWF9MT1MgcG9sYXJpdHkgKG1hbmRhdG9yeSAqLworCQkJCS8qICBwYXRjaCBmb3IgU0ZQKyBhcHBsaWNhdGlvbnMpICovCisJezB4QzAwMSwgMHgwNDI4fSwJLyogZmxpcCBSWCBzZXJpYWwgcG9sYXJpdHkgKi8KKworCXsweGMwMTMsIDB4ZjM0MX0sCS8qIGludmVydCBseG1pdCBjbG9jayAobWFuZGF0b3J5IHBhdGNoKSAqLworCXsweGMyMTAsIDB4ODAwMH0sCS8qIHJlc2V0IGRhdGFwYXRoIChtYW5kYXRvcnkgcGF0Y2gpICovCisJezB4YzIxMCwgMHg4MTAwfSwJLyogcmVzZXQgZGF0YXBhdGggKG1hbmRhdG9yeSBwYXRjaCkgKi8KKwl7MHhjMjEwLCAweDgwMDB9LAkvKiByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKSAqLworCXsweGMyMTAsIDB4MDAwMH0sCS8qIHJlc2V0IGRhdGFwYXRoIChtYW5kYXRvcnkgcGF0Y2gpICovCisJezB4MDAwMCwgMHgwMDMyfSwJLyogd2FpdCBmb3IgNTBtcyBmb3IgZGF0YXBhdGggcmVzZXQgdG8gKi8KKwkJCQkvKiBjb21wbGV0ZS4gKG1hbmRhdG9yeSBwYXRjaCkgKi8KKworCS8qIENvbmZpZ3VyZSB0aGUgTEVEJ3MgKi8KKwl7MHhjMjE0LCAweDAwOTl9LAkvKiBjb25maWd1cmUgdGhlIExFRCBkcml2ZXJzICovCisJezB4YzIxNiwgMHg1ZjVmfSwJLyogY29uZmlndXJlIHRoZSBBY3Rpdml0eSBMRUQgKi8KKwl7MHhjMjE3LCAweDMzZmZ9LAkvKiBjb25maWd1cmUgdGhlIExpbmsgTEVEICovCisKKwkvKiBUcmFuc2NlaXZlci1zcGVjaWZpYyBNRElPIFBhdGNoZXM6ICovCisJezB4YzAxMCwgMHg0NDhhfSwJLyogKGJpdCAxNCkgbWFzayBvdXQgaGlnaCBCRVIgaW5wdXQgZnJvbSB0aGUgKi8KKwkJCQkvKiBMT1Mgc2lnbmFsIGluIDEuMDAwQSAqLworCQkJCS8qIChtYW5kYXRvcnkgcGF0Y2ggZm9yIFNSIGNvZGUpKi8KKwl7MHhjMDAzLCAweDAxODF9LAkvKiAoYml0IDcpIGVuYWJsZSB0aGUgQ0RSIGluYyBzZXR0aW5nIGluICovCisJCQkJLyogMS5DMDA1IChtYW5kYXRvcnkgcGF0Y2ggZm9yIFNSIGNvZGUpICovCisKKwkvKiBUcmFuc2NlaXZlci1zcGVjaWZpYyBNaWNyb2NvbnRyb2xsZXIgSW5pdGlhbGl6YXRpb246ICovCisJezB4YzA0YSwgMHg1MjAwfSwJLyogYWN0aXZhdGUgbWljcm9jb250cm9sbGVyIGFuZCBwYXVzZSAqLworCXsweDAwMDAsIDB4MDAzMn0sCS8qIHdhaXQgNTBtcyBmb3IgbWljcm9jb250cm9sbGVyIGJlZm9yZSAqLworCQkJCS8qIHdyaXRpbmcgaW4gY29kZS4gKi8KKworCS8qIGNvZGUgYmxvY2sgc3RhcnRzIGhlcmU6ICovCisJezB4Y2MwMCwgMHgyMDA5fSwKKwl7MHhjYzAxLCAweDMwMDl9LAorCXsweGNjMDIsIDB4MjdmZn0sCisJezB4Y2MwMywgMHgzMDBmfSwKKwl7MHhjYzA0LCAweDIwMGN9LAorCXsweGNjMDUsIDB4MzAwY30sCisJezB4Y2MwNiwgMHgyMGM0fSwKKwl7MHhjYzA3LCAweDNjMDR9LAorCXsweGNjMDgsIDB4NjQzN30sCisJezB4Y2MwOSwgMHgyMGM0fSwKKwl7MHhjYzBhLCAweDNjMDR9LAorCXsweGNjMGIsIDB4NjQzN30sCisJezB4Y2MwYywgMHgyNWM0fSwKKwl7MHhjYzBkLCAweDNjNTR9LAorCXsweGNjMGUsIDB4NjcyNH0sCisJezB4Y2MwZiwgMHgyNWM0fSwKKwl7MHhjYzEwLCAweDNjNTR9LAorCXsweGNjMTEsIDB4NjcyNH0sCisJezB4Y2MxMiwgMHgyMDQyfSwKKwl7MHhjYzEzLCAweDMwMTJ9LAorCXsweGNjMTQsIDB4MTAwMn0sCisJezB4Y2MxNSwgMHgyNDgyfSwKKwl7MHhjYzE2LCAweDMwMTJ9LAorCXsweGNjMTcsIDB4MTAwMn0sCisJezB4Y2MxOCwgMHgyYTMyfSwKKwl7MHhjYzE5LCAweDMwMDJ9LAorCXsweGNjMWEsIDB4MTAwMn0sCisJezB4Y2MxYiwgMHgyMDBkfSwKKwl7MHhjYzFjLCAweDMwNGR9LAorCXsweGNjMWQsIDB4Mjg2Mn0sCisJezB4Y2MxZSwgMHgzMDEyfSwKKwl7MHhjYzFmLCAweDEwMDJ9LAorCXsweGNjMjAsIDB4Mjk4Mn0sCisJezB4Y2MyMSwgMHgzMDAyfSwKKwl7MHhjYzIyLCAweDEwMDJ9LAorCXsweGNjMjMsIDB4NjI4Zn0sCisJezB4Y2MyNCwgMHgyMGE0fSwKKwl7MHhjYzI1LCAweDMwMDR9LAorCXsweGNjMjYsIDB4NjQzOH0sCisJezB4Y2MyNywgMHgyMGE0fSwKKwl7MHhjYzI4LCAweDMwMDR9LAorCXsweGNjMjksIDB4NjQzOH0sCisJezB4Y2MyYSwgMHgyMDE1fSwKKwl7MHhjYzJiLCAweDMwMDV9LAorCXsweGNjMmMsIDB4NTg1M30sCisJezB4Y2MyZCwgMHgyYmQyfSwKKwl7MHhjYzJlLCAweDMwMDJ9LAorCXsweGNjMmYsIDB4MTM0Mn0sCisJezB4Y2MzMCwgMHgyMDBjfSwKKwl7MHhjYzMxLCAweDMwMGN9LAorCXsweGNjMzIsIDB4MmZmN30sCisJezB4Y2MzMywgMHgzMGY3fSwKKwl7MHhjYzM0LCAweDIwYzR9LAorCXsweGNjMzUsIDB4M2MwNH0sCisJezB4Y2MzNiwgMHg2NzI0fSwKKwl7MHhjYzM3LCAweDIwYzR9LAorCXsweGNjMzgsIDB4M2MwNH0sCisJezB4Y2MzOSwgMHg2NzI0fSwKKwl7MHhjYzNhLCAweDJkMzJ9LAorCXsweGNjM2IsIDB4MzAwMn0sCisJezB4Y2MzYywgMHgxMDAyfSwKKwl7MHhjYzNkLCAweDIwMDh9LAorCXsweGNjM2UsIDB4MzAwOH0sCisJezB4Y2MzZiwgMHg1YzgzfSwKKwl7MHhjYzQwLCAweDJkNTJ9LAorCXsweGNjNDEsIDB4MzAwMn0sCisJezB4Y2M0MiwgMHgxMzUyfSwKKwl7MHhjYzQzLCAweDIwMDh9LAorCXsweGNjNDQsIDB4MzAwOH0sCisJezB4Y2M0NSwgMHg1YzgzfSwKKwl7MHhjYzQ2LCAweDJkMzJ9LAorCXsweGNjNDcsIDB4MzAwMn0sCisJezB4Y2M0OCwgMHgxMzUyfSwKKwl7MHhjYzQ5LCAweDIwMWN9LAorCXsweGNjNGEsIDB4MzAwY30sCisJezB4Y2M0YiwgMHgyMDBkfSwKKwl7MHhjYzRjLCAweDMxMGR9LAorCXsweGNjNGQsIDB4Mjg2Mn0sCisJezB4Y2M0ZSwgMHgzMDEyfSwKKwl7MHhjYzRmLCAweDEwMDJ9LAorCXsweGNjNTAsIDB4MmVkMn0sCisJezB4Y2M1MSwgMHgzMDAyfSwKKwl7MHhjYzUyLCAweDEzNDJ9LAorCXsweGNjNTMsIDB4NmY3Mn0sCisJezB4Y2M1NCwgMHgxMDAyfSwKKwl7MHhjYzU1LCAweDYyOGZ9LAorCXsweGNjNTYsIDB4MjUxNH0sCisJezB4Y2M1NywgMHgzYzY0fSwKKwl7MHhjYzU4LCAweDY0MzZ9LAorCXsweGNjNTksIDB4MjUxNH0sCisJezB4Y2M1YSwgMHgzYzY0fSwKKwl7MHhjYzViLCAweDY0MzZ9LAorCXsweGNjNWMsIDB4MmZhNH0sCisJezB4Y2M1ZCwgMHgzY2Q0fSwKKwl7MHhjYzVlLCAweDY2MjR9LAorCXsweGNjNWYsIDB4MmZhNH0sCisJezB4Y2M2MCwgMHgzY2Q0fSwKKwl7MHhjYzYxLCAweDY2MjR9LAorCXsweGNjNjIsIDB4MmY0NX0sCisJezB4Y2M2MywgMHgzMDE1fSwKKwl7MHhjYzY0LCAweDU2NTN9LAorCXsweGNjNjUsIDB4MmViMn0sCisJezB4Y2M2NiwgMHgzMDAyfSwKKwl7MHhjYzY3LCAweDEzZDJ9LAorCXsweGNjNjgsIDB4MmVkMn0sCisJezB4Y2M2OSwgMHgzMDAyfSwKKwl7MHhjYzZhLCAweDEwMDJ9LAorCXsweGNjNmIsIDB4NmY3Mn0sCisJezB4Y2M2YywgMHgxMDAyfSwKKwl7MHhjYzZkLCAweDYyOGZ9LAorCXsweGNjNmUsIDB4MjYwMn0sCisJezB4Y2M2ZiwgMHgzMDEyfSwKKwl7MHhjYzcwLCAweDEwMDJ9LAorCXsweGNjNzEsIDB4MjAwZH0sCisJezB4Y2M3MiwgMHgzMjBkfSwKKwl7MHhjYzczLCAweDI4NjJ9LAorCXsweGNjNzQsIDB4MzAxMn0sCisJezB4Y2M3NSwgMHgxMDAyfSwKKwl7MHhjYzc2LCAweDI1YzR9LAorCXsweGNjNzcsIDB4M2M1NH0sCisJezB4Y2M3OCwgMHg2NDM3fSwKKwl7MHhjYzc5LCAweDI1YzR9LAorCXsweGNjN2EsIDB4M2M1NH0sCisJezB4Y2M3YiwgMHg2NDM3fSwKKwl7MHhjYzdjLCAweDIwYzR9LAorCXsweGNjN2QsIDB4M2MwNH0sCisJezB4Y2M3ZSwgMHg2NzI0fSwKKwl7MHhjYzdmLCAweDIwYzR9LAorCXsweGNjODAsIDB4M2MwNH0sCisJezB4Y2M4MSwgMHg2NzI0fSwKKwl7MHhjYzgyLCAweDZmNzJ9LAorCXsweGNjODMsIDB4MTAwMn0sCisJezB4Y2M4NCwgMHg2MjhmfSwKKwl7MHhjYzg1LCAweDI2ZjJ9LAorCXsweGNjODYsIDB4MzAxMn0sCisJezB4Y2M4NywgMHgxMDAyfSwKKwl7MHhjYzg4LCAweGM1MDN9LAorCXsweGNjODksIDB4ZDVkNX0sCisJezB4Y2M4YSwgMHhjNjAwfSwKKwl7MHhjYzhiLCAweDJhNmR9LAorCXsweGNjOGMsIDB4YzYwMX0sCisJezB4Y2M4ZCwgMHgyYTRjfSwKKwl7MHhjYzhlLCAweGM2MDJ9LAorCXsweGNjOGYsIDB4MDExMX0sCisJezB4Y2M5MCwgMHhjNjBjfSwKKwl7MHhjYzkxLCAweDU5MDB9LAorCXsweGNjOTIsIDB4YzcxMH0sCisJezB4Y2M5MywgMHgwNzAwfSwKKwl7MHhjYzk0LCAweGM3MTh9LAorCXsweGNjOTUsIDB4MDcwMH0sCisJezB4Y2M5NiwgMHhjNzIwfSwKKwl7MHhjYzk3LCAweDQ3MDB9LAorCXsweGNjOTgsIDB4YzgwMX0sCisJezB4Y2M5OSwgMHg3ZjUwfSwKKwl7MHhjYzlhLCAweGM4MDJ9LAorCXsweGNjOWIsIDB4Nzc2MH0sCisJezB4Y2M5YywgMHhjODAzfSwKKwl7MHhjYzlkLCAweDdmY2V9LAorCXsweGNjOWUsIDB4YzgwNH0sCisJezB4Y2M5ZiwgMHg1NzAwfSwKKwl7MHhjY2EwLCAweGM4MDV9LAorCXsweGNjYTEsIDB4NWYxMX0sCisJezB4Y2NhMiwgMHhjODA2fSwKKwl7MHhjY2EzLCAweDQ3NTF9LAorCXsweGNjYTQsIDB4YzgwN30sCisJezB4Y2NhNSwgMHg1N2UxfSwKKwl7MHhjY2E2LCAweGM4MDh9LAorCXsweGNjYTcsIDB4MjcwMH0sCisJezB4Y2NhOCwgMHhjODA5fSwKKwl7MHhjY2E5LCAweDAwMDB9LAorCXsweGNjYWEsIDB4YzgyMX0sCisJezB4Y2NhYiwgMHgwMDAyfSwKKwl7MHhjY2FjLCAweGM4MjJ9LAorCXsweGNjYWQsIDB4MDAxNH0sCisJezB4Y2NhZSwgMHhjODMyfSwKKwl7MHhjY2FmLCAweDExODZ9LAorCXsweGNjYjAsIDB4Yzg0N30sCisJezB4Y2NiMSwgMHgxZTAyfSwKKwl7MHhjY2IyLCAweGMwMTN9LAorCXsweGNjYjMsIDB4ZjM0MX0sCisJezB4Y2NiNCwgMHhjMDFhfSwKKwl7MHhjY2I1LCAweDA0NDZ9LAorCXsweGNjYjYsIDB4YzAyNH0sCisJezB4Y2NiNywgMHgxMDAwfSwKKwl7MHhjY2I4LCAweGMwMjV9LAorCXsweGNjYjksIDB4MGEwMH0sCisJezB4Y2NiYSwgMHhjMDI2fSwKKwl7MHhjY2JiLCAweDBjMGN9LAorCXsweGNjYmMsIDB4YzAyN30sCisJezB4Y2NiZCwgMHgwYzBjfSwKKwl7MHhjY2JlLCAweGMwMjl9LAorCXsweGNjYmYsIDB4MDBhMH0sCisJezB4Y2NjMCwgMHhjMDMwfSwKKwl7MHhjY2MxLCAweDBhMDB9LAorCXsweGNjYzIsIDB4YzAzY30sCisJezB4Y2NjMywgMHgwMDFjfSwKKwl7MHhjY2M0LCAweGMwMDV9LAorCXsweGNjYzUsIDB4N2EwNn0sCisJezB4Y2NjNiwgMHgwMDAwfSwKKwl7MHhjY2M3LCAweDAwMDB9LAorCXsweGNjYzgsIDB4NjI4Zn0sCisJezB4Y2NjOSwgMHgyNmYyfSwKKwl7MHhjY2NhLCAweDMwMTJ9LAorCXsweGNjY2IsIDB4MTAwMn0sCisJezB4Y2NjYywgMHhjNjIwfSwKKwl7MHhjY2NkLCAweDAwMDB9LAorCXsweGNjY2UsIDB4YzYyMX0sCisJezB4Y2NjZiwgMHgwMDNmfSwKKwl7MHhjY2QwLCAweGM2MjJ9LAorCXsweGNjZDEsIDB4MDAwMH0sCisJezB4Y2NkMiwgMHhjNjIzfSwKKwl7MHhjY2QzLCAweDAwMDB9LAorCXsweGNjZDQsIDB4YzYyNH0sCisJezB4Y2NkNSwgMHgwMDAwfSwKKwl7MHhjY2Q2LCAweGM2MjV9LAorCXsweGNjZDcsIDB4MDAwMH0sCisJezB4Y2NkOCwgMHhjNjI3fSwKKwl7MHhjY2Q5LCAweDAwMDB9LAorCXsweGNjZGEsIDB4YzYyOH0sCisJezB4Y2NkYiwgMHgwMDAwfSwKKwl7MHhjY2RjLCAweGM2MmN9LAorCXsweGNjZGQsIDB4MDAwMH0sCisJezB4Y2NkZSwgMHgwMDAwfSwKKwl7MHhjY2RmLCAweDAwMDB9LAorCXsweGNjZTAsIDB4NjI4Zn0sCisJezB4Y2NlMSwgMHhkMDE5fSwKKwl7MHhjY2UyLCAweDI2ZjJ9LAorCXsweGNjZTMsIDB4MzAxMn0sCisJezB4Y2NlNCwgMHgxMDAyfSwKKwl7MHhjY2U1LCAweGMyMTB9LAorCXsweGNjZTYsIDB4ODAwMH0sCisJezB4Y2NlNywgMHhjMjEwfSwKKwl7MHhjY2U4LCAweDgwMTB9LAorCXsweGNjZTksIDB4YzIxMH0sCisJezB4Y2NlYSwgMHg4MDAwfSwKKwl7MHhjY2ViLCAweGMyMTB9LAorCXsweGNjZWMsIDB4MDAwMH0sCisJezB4Y2NlZCwgMHgwMDAwfSwKKwl7MHhjY2VlLCAweDAwMDB9LAorCXsweGNjZWYsIDB4ODIyMX0sCisJezB4Y2NmMCwgMHgyNzUyfSwKKwl7MHhjY2YxLCAweDMwMTJ9LAorCXsweGNjZjIsIDB4MTAwMn0sCisJezB4Y2NmMywgMHg2ZjcyfSwKKwl7MHhjY2Y0LCAweDEwMDJ9LAorCXsweGNjZjUsIDB4MjgwNn0sCisJezB4Y2NmNiwgMHgzMDA2fSwKKwl7MHhjY2Y3LCAweDIwMDd9LAorCXsweGNjZjgsIDB4M2NjN30sCisJezB4Y2NmOSwgMHhlMTYxfSwKKwl7MHhjY2ZhLCAweGMxNzF9LAorCXsweGNjZmIsIDB4NjEzNH0sCisJezB4Y2NmYywgMHg2MTM1fSwKKwl7MHhjY2ZkLCAweDU0NTN9LAorCXsweGNjZmUsIDB4Mjg1OH0sCisJezB4Y2NmZiwgMHgzMDE4fSwKKwl7MHhjZDAwLCAweDEzNDh9LAorCXsweGNkMDEsIDB4NjUyNH0sCisJezB4Y2QwMiwgMHgyN2I4fSwKKwl7MHhjZDAzLCAweDMwMTh9LAorCXsweGNkMDQsIDB4MTAwOH0sCisJezB4Y2QwNSwgMHgxMDAyfSwKKwl7MHhjZDA2LCAweDYyOGZ9LAorCXsweGNkMDcsIDB4NWRkM30sCisJezB4Y2QwOCwgMHgyOTA2fSwKKwl7MHhjZDA5LCAweDMwMTZ9LAorCXsweGNkMGEsIDB4MTMwNn0sCisJezB4Y2QwYiwgMHgyZmY3fSwKKwl7MHhjZDBjLCAweDMwZjd9LAorCXsweGNkMGQsIDB4NjBiN30sCisJezB4Y2QwZSwgMHhkZmZkfSwKKwl7MHhjZDBmLCAweDAwMDh9LAorCXsweGNkMTAsIDB4NmY3Mn0sCisJezB4Y2QxMSwgMHgxMDAyfSwKKwl7MHhjZDEyLCAweDAwMDB9LAorCXsweGNkZmYsIDB4MGEwMX0sCisJLyogZW5kIG9mIGNvZGUgYmxvY2sgKi8KKworCS8qIFVucGF1c2UgdGhlIG1pY3JvY29udHJvbGxlciB0byBzdGFydCBwcm9ncmFtICovCisJezB4Y2EwMCwgMHgwMDgwfSwKKwl7MHhjYTEyLCAweDAwMDB9LAorCXsweDAwMDAsIDB4MDAwQX0sCS8qIHdhaXQgMTBtcyBqdXN0IHRvIGJlIHNhZmUgKi8KKwl7MHhmZmZmLCAweGZmZmZ9CS8qIHRhYmxlIHRlcm1pbmF0b3IgKi8KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MjYyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvS2NvbmZpZwpAQCAtMCwwICsxLDM2IEBACitjb25maWcgVVNCX0lQX0NPTU1PTgorCXRyaXN0YXRlICJVU0IgSVAgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJICBUaGlzIGVuYWJsZXMgcHVzaGluZyBVU0IgcGFja2V0cyBvdmVyIElQIHRvIGFsbG93IHJlbW90ZQorCSAgbWFjaGluZXMgYWNjZXNzIHRvIFVTQiBkZXZpY2VzIGRpcmVjdGx5LiAgRm9yIG1vcmUgZGV0YWlscywKKwkgIGFuZCBsaW5rcyB0byB0aGUgdXNlcnNwYWNlIHV0aWxpdHkgcHJvZ3JhbXMgdG8gbGV0IHRoaXMgd29yaworCSAgcHJvcGVybHksIHNlZSBodHRwOi8vdXNiaXAubmFpc3QuanAvCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmlwX2NvbW1vbl9tb2QuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBVU0JfSVBfVkhDSV9IQ0QKKwl0cmlzdGF0ZSAiVVNCIElQIGNsaWVudCBkcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfSVBfQ09NTU9OCisJZGVmYXVsdCBOCisJLS0taGVscC0tLQorCSBUaGlzIGVuYWJsZXMgdGhlIFVTQiBJUCBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIHdoaWNoIHdpbGwKKwkgcnVuIG9uIHRoZSBjbGllbnQgbWFjaGluZS4KKworCSBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZoY2lfaGNkLgorCitjb25maWcgVVNCX0lQX0hPU1QKKwl0cmlzdGF0ZSAiVVNCIElQIGhvc3QgZHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX0lQX0NPTU1PTgorCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgVGhpcyBlbmFibGVzIHRoZSBVU0IgSVAgZGV2aWNlIGRyaXZlciB3aGljaCB3aWxsIHJ1biBvbiB0aGUKKwkgaG9zdCBtYWNoaW5lLgorCisJIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNiaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5ZjQyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9NYWtlZmlsZQpAQCAtMCwwICsxLDEyIEBACitvYmotJChDT05GSUdfVVNCX0lQX0NPTU1PTikgKz0gdXNiaXBfY29tbW9uX21vZC5vCit1c2JpcF9jb21tb25fbW9kLW9ianMgOj0gdXNiaXBfY29tbW9uLm8gdXNiaXBfZXZlbnQubworCitvYmotJChDT05GSUdfVVNCX0lQX1ZIQ0lfSENEKSArPSB2aGNpLWhjZC5vCit2aGNpLWhjZC1vYmpzIDo9IHZoY2lfc3lzZnMubyB2aGNpX3R4Lm8gdmhjaV9yeC5vIHZoY2lfaGNkLm8KKworb2JqLSQoQ09ORklHX1VTQl9JUF9IT1NUKSArPSB1c2JpcC5vCit1c2JpcC1vYmpzIDo9IHN0dWJfZGV2Lm8gc3R1Yl9tYWluLm8gc3R1Yl9yeC5vIHN0dWJfdHgubworCitpZmVxICgkKENPTkZJR19VU0JfREVCVUcpLHkpCisJRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTFiZTU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL1JFQURNRQpAQCAtMCwwICsxLDYgQEAKK1RPRE86CisJLSBtb3JlIGRpc2N1c3Npb24gYWJvdXQgdGhlIHByb3RvY29sCisJLSB0ZXN0aW5nCisJLSByZXZpZXcgb2YgdGhlIHVzZXJzcGFjZSBpbnRlcmZhY2UKKworUGxlYXNlIHNlbmQgcGF0Y2hlcyBmb3IgdGhpcyBjb2RlIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTQxYTNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorCitzdHJ1Y3Qgc3R1Yl9kZXZpY2UgeworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJc3RydWN0IHVzYmlwX2RldmljZSB1ZDsKKwlfX3UzMiBkZXZpZDsKKworCS8qCisJICogc3R1Yl9wcml2IHByZXNlcnZlcyBwcml2YXRlIGRhdGEgb2YgZWFjaCB1cmIuCisJICogSXQgaXMgYWxsb2NhdGVkIGFzIHN0dWJfcHJpdl9jYWNoZSBhbmQgYXNzaWduZWQgdG8gdXJiLT5jb250ZXh0LgorCSAqCisJICogc3R1Yl9wcml2IGlzIGFsd2F5cyBsaW5rZWQgdG8gYW55IG9uZSBvZiAzIGxpc3RzOworCSAqCXByaXZfaW5pdDogbGlua2VkIHRvIHRoaXMgdW50aWwgdGhlIGNvbWxldGlvbiBvZiBhIHVyYi4KKwkgKglwcml2X3R4ICA6IGxpbmtlZCB0byB0aGlzIGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mIGEgdXJiLgorCSAqCXByaXZfZnJlZTogbGlua2VkIHRvIHRoaXMgYWZ0ZXIgdGhlIHNlbmRpbmcgb2YgdGhlIHJlc3VsdC4KKwkgKgorCSAqIEFueSBvZiB0aGVzZSBsaXN0IG9wZXJhdGlvbnMgc2hvdWxkIGJlIGxvY2tlZCBieSBwcml2X2xvY2suCisJICovCisJc3BpbmxvY2tfdCBwcml2X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBwcml2X2luaXQ7CisJc3RydWN0IGxpc3RfaGVhZCBwcml2X3R4OworCXN0cnVjdCBsaXN0X2hlYWQgcHJpdl9mcmVlOworCisJLyogc2VlIGNvbW1lbnRzIGZvciB1bmxpbmtpbmcgaW4gc3R1Yl9yeC5jICovCisJc3RydWN0IGxpc3RfaGVhZCB1bmxpbmtfdHg7CisJc3RydWN0IGxpc3RfaGVhZCB1bmxpbmtfZnJlZTsKKworCisJd2FpdF9xdWV1ZV9oZWFkX3QgdHhfd2FpdHE7Cit9OworCisvKiBwcml2YXRlIGRhdGEgaW50byB1cmItPnByaXYgKi8KK3N0cnVjdCBzdHViX3ByaXYgeworCXVuc2lnbmVkIGxvbmcgc2VxbnVtOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXY7CisJc3RydWN0IHVyYiAqdXJiOworCisJaW50IHVubGlua2luZzsKK307CisKK3N0cnVjdCBzdHViX3VubGluayB7CisJdW5zaWduZWQgbG9uZyBzZXFudW07CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCV9fdTMyIHN0YXR1czsKK307CisKKworZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpzdHViX3ByaXZfY2FjaGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHByb3RvdHlwZSBkZWNsYXJhdGlvbnMgKi8KKworLyogc3R1Yl90eC5jICovCit2b2lkIHN0dWJfY29tcGxldGUoc3RydWN0IHVyYiAqKTsKK3ZvaWQgc3R1Yl90eF9sb29wKHN0cnVjdCB1c2JpcF90YXNrICopOworCisvKiBzdHViX2Rldi5jICovCitleHRlcm4gc3RydWN0IHVzYl9kcml2ZXIgc3R1Yl9kcml2ZXI7CisKKy8qIHN0dWJfcnguYyAqLwordm9pZCBzdHViX3J4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKik7Cit2b2lkIHN0dWJfZW5xdWV1ZV9yZXRfdW5saW5rKHN0cnVjdCBzdHViX2RldmljZSAqLCBfX3UzMiwgX191MzIpOworCisvKiBzdHViX21haW4uYyAqLworaW50IG1hdGNoX2J1c2lkKGNoYXIgKmJ1c2lkKTsKK3ZvaWQgc3R1Yl9kZXZpY2VfY2xlYW51cF91cmJzKHN0cnVjdCBzdHViX2RldmljZSAqc2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDU1YTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYwpAQCAtMCwwICsxLDQ4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgorI2luY2x1ZGUgInN0dWIuaCIKKworCisKK3N0YXRpYyBpbnQgc3R1Yl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCBzdHViX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CisKKworLyoKKyAqIERlZmluZSBkZXZpY2UgSURzIGhlcmUgaWYgeW91IHdhbnQgdG8gZXhwbGljaXRseSBsaW1pdCBleHBvcnRhYmxlIGRldmljZXMuCisgKiBJbiB0aGUgbW9zdCBjYXNlcywgd2lsZCBjYXJkIG1hdGNoaW5nIHdpbGwgYmUgb2sgYmVjYXVzZSBkcml2ZXIgYmluZGluZyBjYW4KKyAqIGJlIGNoYW5nZWQgZHluYW1pY2FsbHkgYnkgYSB1c2VybGFuZCBwcm9ncmFtLgorICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc3R1Yl90YWJsZVtdID0geworI2lmIDAKKwkvKiBqdXN0IGFuIGV4YW1wbGUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNWFjLCAweDAzMDEpIH0sICAgLyogTWFjIDEgYnV0dG9uIG1vdXNlICovCisJeyBVU0JfREVWSUNFKDB4MDQzMCwgMHgwMDA5KSB9LCAgIC8qIFBsYXQgSG9tZSBLZXlib2FyZCAqLworCXsgVVNCX0RFVklDRSgweDA1OWIsIDB4MDAwMSkgfSwgICAvKiBJb21lZ2EgVVNCIFppcCAxMDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGIzLCAweDQ0MjcpIH0sICAgLyogSUJNIFVTQiBDRC1ST00gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNWE5LCAweGE1MTEpIH0sICAgLyogTGlmZVZpZXcgVVNCIGNhbSAqLworCXsgVVNCX0RFVklDRSgweDU1YWEsIDB4MDIwMSkgfSwgICAvKiBJbWF0aW9uIGNhcmQgcmVhZGVyICovCisJeyBVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwODcwKSB9LCAgIC8qIFFjYW0gRXhwcmVzcyhRVi0zMCkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDAxMDEpIH0sICAgLyogSU8tREFUQSBIRCAxMjBHQiAqLworCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDkwNCkgfSwgICAvKiBJTy1EQVRBIFVTQi1FVC9UWCAqLworCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDIwMSkgfSwgICAvKiBJTy1EQVRBIFVTQi1FVC9UWCAqLworCXsgVVNCX0RFVklDRSgweDA4YmIsIDB4MjcwMikgfSwgICAvKiBPTktZTyBVU0IgU3BlYWtlciAqLworCXsgVVNCX0RFVklDRSgweDA0NmQsIDB4MDhiMikgfSwgICAvKiBMb2dpY29vbCBRY2FtIDQwMDAgUHJvICovCisjZW5kaWYKKwkvKiBtYWdpYyBmb3Igd2lsZCBjYXJkICovCisJeyAuZHJpdmVyX2luZm8gPSAxIH0sCisJeyAwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHN0dWJfdGFibGUpOworCitzdHJ1Y3QgdXNiX2RyaXZlciBzdHViX2RyaXZlciA9IHsKKwkubmFtZQkJPSAidXNiaXAiLAorCS5wcm9iZQkJPSBzdHViX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gc3R1Yl9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IHN0dWJfdGFibGUsCit9OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIERlZmluZSBzeXNmcyBlbnRyaWVzIGZvciBhIHVzYmlwLWJvdW5kIGRldmljZSAqLworCisKKy8qCisgKiB1c2JpcF9zdGF0dXMgc2hvd3Mgc3RhdHVzIG9mIHVzYmlwIGFzIGxvbmcgYXMgdGhpcyBkcml2ZXIgaXMgYm91bmQgdG8gdGhlCisgKiB0YXJnZXQgZGV2aWNlLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBzdGF0dXM7CisKKwlpZiAoIXNkZXYpIHsKKwkJZGV2X2VycihkZXYsICJzZGV2IGlzIG51bGxcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzcGluX2xvY2soJnNkZXYtPnVkLmxvY2spOworCXN0YXR1cyA9IHNkZXYtPnVkLnN0YXR1czsKKwlzcGluX3VubG9jaygmc2Rldi0+dWQubG9jayk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgc3RhdHVzKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUih1c2JpcF9zdGF0dXMsIFNfSVJVR08sIHNob3dfc3RhdHVzLCBOVUxMKTsKKworLyoKKyAqIHVzYmlwX3NvY2tmZCBnZXRzIGEgc29ja2V0IGRlc2NyaXB0b3Igb2YgYW4gZXN0YWJsaXNoZWQgVENQIGNvbm5lY3Rpb24gdGhhdAorICogaXMgdXNlZCB0byB0cmFuc2ZlciB1c2JpcCByZXF1ZXN0cyBieSBrZXJuZWwgdGhyZWFkcy4gLTEgaXMgYSBtYWdpYyBudW1iZXIKKyAqIGJ5IHdoaWNoIHVzYmlwIGNvbm5lY3Rpb24gaXMgZmluaXNoZWQuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3NvY2tmZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBzb2NrZmQgPSAwOworCXN0cnVjdCBzb2NrZXQgKnNvY2tldDsKKworCWlmICghc2RldikgeworCQlkZXZfZXJyKGRldiwgInNkZXYgaXMgbnVsbFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNzY2FuZihidWYsICIlZCIsICZzb2NrZmQpOworCisJaWYgKHNvY2tmZCAhPSAtMSkgeworCQlkZXZfaW5mbyhkZXYsICJzdHViIHVwXG4iKTsKKworCQlzcGluX2xvY2soJnNkZXYtPnVkLmxvY2spOworCisJCWlmIChzZGV2LT51ZC5zdGF0dXMgIT0gU0RFVl9TVF9BVkFJTEFCTEUpIHsKKwkJCWRldl9lcnIoZGV2LCAibm90IHJlYWR5XG4iKTsKKwkJCXNwaW5fdW5sb2NrKCZzZGV2LT51ZC5sb2NrKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJc29ja2V0ID0gc29ja2ZkX3RvX3NvY2tldChzb2NrZmQpOworCQlpZiAoIXNvY2tldCkgeworCQkJc3Bpbl91bmxvY2soJnNkZXYtPnVkLmxvY2spOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworI2lmIDAKKwkJc2V0bm9kZWxheShzb2NrZXQpOworCQlzZXRrZWVwYWxpdmUoc29ja2V0KTsKKwkJc2V0cmV1c2Uoc29ja2V0KTsKKyNlbmRpZgorCisJCXNkZXYtPnVkLnRjcF9zb2NrZXQgPSBzb2NrZXQ7CisKKwkJc3Bpbl91bmxvY2soJnNkZXYtPnVkLmxvY2spOworCisJCXVzYmlwX3N0YXJ0X3RocmVhZHMoJnNkZXYtPnVkKTsKKworCQlzcGluX2xvY2soJnNkZXYtPnVkLmxvY2spOworCQlzZGV2LT51ZC5zdGF0dXMgPSBTREVWX1NUX1VTRUQ7CisJCXNwaW5fdW5sb2NrKCZzZGV2LT51ZC5sb2NrKTsKKworCX0gZWxzZSB7CisJCWRldl9pbmZvKGRldiwgInN0dWIgZG93blxuIik7CisKKwkJc3Bpbl9sb2NrKCZzZGV2LT51ZC5sb2NrKTsKKwkJaWYgKHNkZXYtPnVkLnN0YXR1cyAhPSBTREVWX1NUX1VTRUQpIHsKKwkJCXNwaW5fdW5sb2NrKCZzZGV2LT51ZC5sb2NrKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXNwaW5fdW5sb2NrKCZzZGV2LT51ZC5sb2NrKTsKKworCQl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLCBTREVWX0VWRU5UX0RPV04pOworCX0KKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUih1c2JpcF9zb2NrZmQsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX3NvY2tmZCk7CisKK3N0YXRpYyBpbnQgc3R1Yl9hZGRfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBlcnIgPSAwOworCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3VzYmlwX3N0YXR1cyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfc3RhdHVzOworCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3VzYmlwX3NvY2tmZCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfc29ja2ZkOworCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3VzYmlwX2RlYnVnKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9kZWJ1ZzsKKworCXJldHVybiAwOworCitlcnJfZGVidWc6CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3VzYmlwX3NvY2tmZCk7CisKK2Vycl9zb2NrZmQ6CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3VzYmlwX3N0YXR1cyk7CisKK2Vycl9zdGF0dXM6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgc3R1Yl9yZW1vdmVfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KQoreworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl91c2JpcF9zdGF0dXMpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl91c2JpcF9zb2NrZmQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl91c2JpcF9kZWJ1Zyk7Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFdmVudCBoYW5kbGVyIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYW4gZXZlbnQgaGFuZGxlciB0aHJlYWQgKi8KKworc3RhdGljIHZvaWQgc3R1Yl9zaHV0ZG93bl9jb25uZWN0aW9uKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHN0dWJfZGV2aWNlLCB1ZCk7CisKKwkvKgorCSAqIFdoZW4gcmVtb3ZpbmcgYW4gZXhwb3J0ZWQgZGV2aWNlLCBrZXJuZWwgcGFuaWMgc29tZXRpbWVzIG9jY3VycmVkCisJICogYW5kIHRoZW4gRUlQIHdhcyBza193YWl0X2RhdGEgb2Ygc3R1Yl9yeCB0aHJlYWQuIElzIHRoaXMgYmVjYXVzZQorCSAqIHNrX3dhaXRfZGF0YSByZXR1cm5lZCB0aG91Z2ggc3R1Yl9yeCB0aHJlYWQgd2FzIGFscmVhZHkgZmluaXNoZWQgYnkKKwkgKiBzdGVwIDE/CisJICovCisJaWYgKHVkLT50Y3Bfc29ja2V0KSB7CisJCXVkYmcoInNodXRkb3duIHRjcF9zb2NrZXQgJXBcbiIsIHVkLT50Y3Bfc29ja2V0KTsKKwkJa2VybmVsX3NvY2tfc2h1dGRvd24odWQtPnRjcF9zb2NrZXQsIFNIVVRfUkRXUik7CisJfQorCisJLyogMS4gc3RvcCB0aHJlYWRzICovCisJdXNiaXBfc3RvcF90aHJlYWRzKHVkKTsKKworCS8qIDIuIGNsb3NlIHRoZSBzb2NrZXQgKi8KKwkvKgorCSAqIHRjcF9zb2NrZXQgaXMgZnJlZWQgYWZ0ZXIgdGhyZWFkcyBhcmUga2lsbGVkLgorCSAqIFNvIHVzYmlwX3htaXQgZG8gbm90IHRvdWNoIE5VTEwgc29ja2V0LgorCSAqLworCWlmICh1ZC0+dGNwX3NvY2tldCkgeworCQlzb2NrX3JlbGVhc2UodWQtPnRjcF9zb2NrZXQpOworCQl1ZC0+dGNwX3NvY2tldCA9IE5VTEw7CisJfQorCisJLyogMy4gZnJlZSB1c2VkIGRhdGEgKi8KKwlzdHViX2RldmljZV9jbGVhbnVwX3VyYnMoc2Rldik7CisKKwkvKiA0LiBmcmVlIHN0dWJfdW5saW5rICovCisJeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzdHJ1Y3Qgc3R1Yl91bmxpbmsgKnVubGluaywgKnRtcDsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmc2Rldi0+dW5saW5rX3R4LCBsaXN0KSB7CisJCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKKwkJCWtmcmVlKHVubGluayk7CisJCX0KKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsCisJCQkJCQkgJnNkZXYtPnVubGlua19mcmVlLCBsaXN0KSB7CisJCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKKwkJCWtmcmVlKHVubGluayk7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0dWJfZGV2aWNlX3Jlc2V0KHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHN0dWJfZGV2aWNlLCB1ZCk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHNkZXYtPmludGVyZmFjZSk7CisJaW50IHJldDsKKworCXVkYmcoImRldmljZSByZXNldCIpOworCXJldCA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQodWRldiwgc2Rldi0+aW50ZXJmYWNlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJsb2NrIGZvciByZXNldFxuIik7CisKKwkJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisJCXVkLT5zdGF0dXMgPSBTREVWX1NUX0VSUk9SOworCQlzcGluX3VubG9jaygmdWQtPmxvY2spOworCisJCXJldHVybjsKKwl9CisKKwkvKiB0cnkgdG8gcmVzZXQgdGhlIGRldmljZSAqLworCXJldCA9IHVzYl9yZXNldF9kZXZpY2UodWRldik7CisKKwl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKworCXNwaW5fbG9jaygmdWQtPmxvY2spOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAiZGV2aWNlIHJlc2V0XG4iKTsKKwkJdWQtPnN0YXR1cyA9IFNERVZfU1RfRVJST1I7CisKKwl9IGVsc2UgeworCQlkZXZfaW5mbygmdWRldi0+ZGV2LCAiZGV2aWNlIHJlc2V0XG4iKTsKKwkJdWQtPnN0YXR1cyA9IFNERVZfU1RfQVZBSUxBQkxFOworCisJfQorCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHN0dWJfZGV2aWNlX3VudXNhYmxlKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCXNwaW5fbG9jaygmdWQtPmxvY2spOworCXVkLT5zdGF0dXMgPSBTREVWX1NUX0VSUk9SOworCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBzdHViX2RldmljZV9hbGxvYyAtIGFsbG9jYXRlIGEgbmV3IHN0dWJfZGV2aWNlIHN0cnVjdAorICogQGludGVyZmFjZTogdXNiX2ludGVyZmFjZSBvZiBhIG5ldyBkZXZpY2UKKyAqCisgKiBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEgbmV3IHN0dWJfZGV2aWNlIHN0cnVjdC4KKyAqLworc3RhdGljIHN0cnVjdCBzdHViX2RldmljZSAqc3R1Yl9kZXZpY2VfYWxsb2Moc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXY7CisJaW50IGJ1c251bSA9IGludGVyZmFjZV90b19idXNudW0oaW50ZXJmYWNlKTsKKwlpbnQgZGV2bnVtID0gaW50ZXJmYWNlX3RvX2Rldm51bShpbnRlcmZhY2UpOworCisJZGV2X2RiZygmaW50ZXJmYWNlLT5kZXYsICJhbGxvY2F0aW5nIHN0dWIgZGV2aWNlIik7CisKKwkvKiB5ZXMsIGl0J3MgYSBuZXcgZGV2aWNlICovCisJc2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHViX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghc2RldikgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIm5vIG1lbW9yeSBmb3Igc3R1Yl9kZXZpY2VcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzZGV2LT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisKKwkvKgorCSAqIGRldmlkIGlzIGRlZmluZWQgd2l0aCBkZXZudW0gd2hlbiB0aGlzIGRyaXZlciBpcyBmaXJzdCBhbGxvY2F0ZWQuCisJICogZGV2bnVtIG1heSBjaGFuZ2UgbGF0ZXIgaWYgYSBkZXZpY2UgaXMgcmVzZXQuIEhvd2V2ZXIsIGRldmlkIG5ldmVyCisJICogY2hhbmdlcyBkdXJpbmcgYSB1c2JpcCBjb25uZWN0aW9uLgorCSAqLworCXNkZXYtPmRldmlkICAgICA9IChidXNudW0gPDwgMTYpIHwgZGV2bnVtOworCisJdXNiaXBfdGFza19pbml0KCZzZGV2LT51ZC50Y3BfcngsICJzdHViX3J4Iiwgc3R1Yl9yeF9sb29wKTsKKwl1c2JpcF90YXNrX2luaXQoJnNkZXYtPnVkLnRjcF90eCwgInN0dWJfdHgiLCBzdHViX3R4X2xvb3ApOworCisJc2Rldi0+dWQuc2lkZSA9IFVTQklQX1NUVUI7CisJc2Rldi0+dWQuc3RhdHVzID0gU0RFVl9TVF9BVkFJTEFCTEU7CisJLyogc2Rldi0+dWQubG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgKi8KKwlzcGluX2xvY2tfaW5pdCgmc2Rldi0+dWQubG9jayk7CisJc2Rldi0+dWQudGNwX3NvY2tldCA9IE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmc2Rldi0+cHJpdl9pbml0KTsKKwlJTklUX0xJU1RfSEVBRCgmc2Rldi0+cHJpdl90eCk7CisJSU5JVF9MSVNUX0hFQUQoJnNkZXYtPnByaXZfZnJlZSk7CisJSU5JVF9MSVNUX0hFQUQoJnNkZXYtPnVubGlua19mcmVlKTsKKwlJTklUX0xJU1RfSEVBRCgmc2Rldi0+dW5saW5rX3R4KTsKKwkvKiBzZGV2LT5wcml2X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7ICovCisJc3Bpbl9sb2NrX2luaXQoJnNkZXYtPnByaXZfbG9jayk7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZGV2LT50eF93YWl0cSk7CisKKwlzZGV2LT51ZC5laF9vcHMuc2h1dGRvd24gPSBzdHViX3NodXRkb3duX2Nvbm5lY3Rpb247CisJc2Rldi0+dWQuZWhfb3BzLnJlc2V0ICAgID0gc3R1Yl9kZXZpY2VfcmVzZXQ7CisJc2Rldi0+dWQuZWhfb3BzLnVudXNhYmxlID0gc3R1Yl9kZXZpY2VfdW51c2FibGU7CisKKwl1c2JpcF9zdGFydF9laCgmc2Rldi0+dWQpOworCisJdWRiZygicmVnaXN0ZXIgbmV3IGludGVyZmFjZVxuIik7CisJcmV0dXJuIHNkZXY7Cit9CisKK3N0YXRpYyBpbnQgc3R1Yl9kZXZpY2VfZnJlZShzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpCit7CisJaWYgKCFzZGV2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWtmcmVlKHNkZXYpOworCXVkYmcoImtmcmVlIHVkZXYgb2tcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIElmIGEgdXNiIGRldmljZSBoYXMgbXVsdGlwbGUgYWN0aXZlIGludGVyZmFjZXMsIHRoaXMgZHJpdmVyIGlzIGJvdW5kIHRvIGFsbAorICogdGhlIGFjdGl2ZSBpbnRlcmZhY2VzLiBIb3dldmVyLCB1c2JpcCBleHBvcnRzICphKiB1c2IgZGV2aWNlIChpLmUuLCBub3QgKmFuKgorICogYWN0aXZlIGludGVyZmFjZSkuIEN1cnJlbnRseSwgYSB1c2VybGFuZCBwcm9ncmFtIG11c3QgZW5zdXJlIHRoYXQgaXQKKyAqIGxvb2tzIGF0IHRoZSB1c2JpcCdzIHN5c2ZzIGVudHJpZXMgb2Ygb25seSB0aGUgZmlyc3QgYWN0aXZlIGludGVyZmFjZS4KKyAqCisgKiBUT0RPOiB1c2UgInN0cnVjdCB1c2JfZGV2aWNlX2RyaXZlciIgdG8gYmluZCBhIHVzYiBkZXZpY2UuCisgKiBIb3dldmVyLCBpdCBzZWVtcyBpdCBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIGluIG1haW5saW5lIGtlcm5lbCB5ZXQKKyAqICgyLjYuMTkuMikuCisgKi8KK3N0YXRpYyBpbnQgc3R1Yl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gTlVMTDsKKwljaGFyICp1ZGV2X2J1c2lkID0gaW50ZXJmYWNlLT5kZXYucGFyZW50LT5idXNfaWQ7CisJaW50IGVyciA9IDA7CisKKwlkZXZfZGJnKCZpbnRlcmZhY2UtPmRldiwgIkVudGVyXG4iKTsKKworCS8qIGNoZWNrIHdlIHNob3VsZCBjbGFpbSBvciBub3QgYnkgYnVzaWRfdGFibGUgKi8KKwlpZiAobWF0Y2hfYnVzaWQodWRldl9idXNpZCkpIHsKKwkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LAorCQkJICJ0aGlzIGRldmljZSAlcyBpcyBub3QgaW4gbWF0Y2hfYnVzaWQgdGFibGUuIHNraXAhXG4iLAorCQkJIHVkZXZfYnVzaWQpOworCisJCS8qCisJCSAqIFJldHVybiB2YWx1ZSBzaG91bGQgYmUgRU5PREVWIG9yIEVOT1hJTyB0byBjb250aW51ZSB0cnlpbmcKKwkJICogb3RoZXIgbWF0Y2hlZCBkcml2ZXJzIGJ5IHRoZSBkcml2ZXIgY29yZS4KKwkJICogU2VlIGRyaXZlcl9wcm9iZV9kZXZpY2UoKSBpbiBkcml2ZXIvYmFzZS9kZC5jCisJCSAqLworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAodWRldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MgPT0gIFVTQl9DTEFTU19IVUIpIHsKKwkJdWRiZygidGhpcyBkZXZpY2UgJXMgaXMgYSB1c2IgaHViIGRldmljZS4gc2tpcCFcbiIsCisJCQkJCQkJCXVkZXZfYnVzaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIXN0cmNtcCh1ZGV2LT5idXMtPmJ1c19uYW1lLCAidmhjaV9oY2QiKSkgeworCQl1ZGJnKCJ0aGlzIGRldmljZSAlcyBpcyBhdHRhY2hlZCBvbiB2aGNpX2hjZC4gc2tpcCFcbiIsCisJCQkJCQkJCXVkZXZfYnVzaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBvay4gdGhpcyBpcyBteSBkZXZpY2UuICovCisJc2RldiA9IHN0dWJfZGV2aWNlX2FsbG9jKGludGVyZmFjZSk7CisJaWYgKCFzZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQi9JUCBTdHViOiByZWdpc3RlciBhIG5ldyBpbnRlcmZhY2UgIgorCQkgIihidXMgJXUgZGV2ICV1IGlmbiAldSlcbiIsIHVkZXYtPmJ1cy0+YnVzbnVtLCB1ZGV2LT5kZXZudW0sCisJCSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCisJLyogc2V0IHByaXZhdGUgZGF0YSB0byB1c2JfaW50ZXJmYWNlICovCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHNkZXYpOworCisJZXJyID0gc3R1Yl9hZGRfZmlsZXMoJmludGVyZmFjZS0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiY3JlYXRlIHN5c2ZzIGZpbGVzIGZvciAlc1xuIiwKKwkJCXVkZXZfYnVzaWQpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBjYWxsZWQgaW4gdXNiX2Rpc2Nvbm5lY3QoKSBvciB1c2JfZGVyZWdpc3RlcigpCisgKiBidXQgb25seSBpZiBhY3Rjb25maWcoYWN0aXZlIGNvbmZpZ3VyYXRpb24pIGV4aXN0cworICovCitzdGF0aWMgdm9pZCBzdHViX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwl1ZGJnKCJFbnRlclxuIik7CisKKwkvKiBnZXQgc3R1Yl9kZXZpY2UgKi8KKwlpZiAoIXNkZXYpIHsKKwkJZXJyKCIgY291bGQgbm90IGdldCBkZXZpY2UgZnJvbSBpbnRlZmFjZSBkYXRhIik7CisJCS8qIEJVRygpOyAqLworCQlyZXR1cm47CisJfQorCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisKKwkvKgorCSAqIE5PVEU6CisJICogcngvdHggdGhyZWFkcyBhcmUgaW52b2tlZCBmb3IgZWFjaCB1c2JfZGV2aWNlLgorCSAqLworCXN0dWJfcmVtb3ZlX2ZpbGVzKCZpbnRlcmZhY2UtPmRldik7CisKKwkvKiAxLiBzaHV0ZG93biB0aGUgY3VycmVudCBjb25uZWN0aW9uICovCisJdXNiaXBfZXZlbnRfYWRkKCZzZGV2LT51ZCwgU0RFVl9FVkVOVF9SRU1PVkVEKTsKKworCS8qIDIuIHdhaXQgZm9yIHRoZSBzdG9wIG9mIHRoZSBldmVudCBoYW5kbGVyICovCisJdXNiaXBfc3RvcF9laCgmc2Rldi0+dWQpOworCisJLyogMy4gZnJlZSBzZGV2ICovCisJc3R1Yl9kZXZpY2VfZnJlZShzZGV2KTsKKworCisJdWRiZygiYnllXG4iKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjY1ZDdmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfbWFpbi5jCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJzdHViLmgiCisKKy8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVGFrYWhpcm8gSGlyb2Z1Y2hpIgorI2RlZmluZSBEUklWRVJfREVTQyAiU3R1YiBEcml2ZXIgZm9yIFVTQi9JUCIKKworLyogc3R1Yl9wcml2IGlzIGFsbG9jYXRlZCBmcm9tIHN0dWJfcHJpdl9jYWNoZSAqLworc3RydWN0IGttZW1fY2FjaGUgKnN0dWJfcHJpdl9jYWNoZTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRGVmaW5lIHN5c2ZzIGVudHJpZXMgZm9yIHRoZSB1c2JpcCBkcml2ZXIgKi8KKworCisvKgorICogYnVzaWRfdGFibGVzIGRlZmluZXMgbWF0Y2hpbmcgYnVzaWRzIHRoYXQgdXNiaXAgY2FuIGdyYWIuIEEgdXNlciBjYW4gY2hhbmdlCisgKiBkeW5hbWljYWxseSB3aGF0IGRldmljZSBpcyBsb2NhbGx5IHVzZWQgYW5kIHdoYXQgZGV2aWNlIGlzIGV4cG9ydGVkIHRvIGEKKyAqIHJlbW90ZSBob3N0LgorICovCisjZGVmaW5lIE1BWF9CVVNJRCAxNgorc3RhdGljIGNoYXIgYnVzaWRfdGFibGVbTUFYX0JVU0lEXVtCVVNfSURfU0laRV07CitzdGF0aWMgc3BpbmxvY2tfdCBidXNpZF90YWJsZV9sb2NrOworCisKK2ludCBtYXRjaF9idXNpZChjaGFyICpidXNpZCkKK3sKKwlpbnQgaTsKKworCXNwaW5fbG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVU0lEOyBpKyspCisJCWlmIChidXNpZF90YWJsZVtpXVswXSkKKwkJCWlmICghc3RybmNtcChidXNpZF90YWJsZVtpXSwgYnVzaWQsIEJVU19JRF9TSVpFKSkgeworCQkJCS8qIGFscmVhZHkgcmVnaXN0ZXJkICovCisJCQkJc3Bpbl91bmxvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCQkJCXJldHVybiAwOworCQkJfQorCisJc3Bpbl91bmxvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbWF0Y2hfYnVzaWQoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY2hhciAqYnVmKQoreworCWludCBpOworCWNoYXIgKm91dCA9IGJ1ZjsKKworCXNwaW5fbG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVU0lEOyBpKyspCisJCWlmIChidXNpZF90YWJsZVtpXVswXSkKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgIiVzICIsIGJ1c2lkX3RhYmxlW2ldKTsKKworCXNwaW5fdW5sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIlxuIik7CisKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCitzdGF0aWMgaW50IGFkZF9tYXRjaF9idXNpZChjaGFyICpidXNpZCkKK3sKKwlpbnQgaTsKKworCWlmICghbWF0Y2hfYnVzaWQoYnVzaWQpKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVU0lEOyBpKyspCisJCWlmICghYnVzaWRfdGFibGVbaV1bMF0pIHsKKwkJCXN0cm5jcHkoYnVzaWRfdGFibGVbaV0sIGJ1c2lkLCBCVVNfSURfU0laRSk7CisJCQlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJc3Bpbl91bmxvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGRlbF9tYXRjaF9idXNpZChjaGFyICpidXNpZCkKK3sKKwlpbnQgaTsKKworCXNwaW5fbG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVU0lEOyBpKyspCisJCWlmICghc3RybmNtcChidXNpZF90YWJsZVtpXSwgYnVzaWQsIEJVU19JRF9TSVpFKSkgeworCQkJLyogZm91bmQgKi8KKwkJCW1lbXNldChidXNpZF90YWJsZVtpXSwgMCwgQlVTX0lEX1NJWkUpOworCQkJc3Bpbl91bmxvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKworCXNwaW5fdW5sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbWF0Y2hfYnVzaWQoc3RydWN0IGRldmljZV9kcml2ZXIgKmRldiwgY29uc3QgY2hhciAqYnVmLAorCQlzaXplX3QgY291bnQpCit7CisJaW50IGxlbjsKKwljaGFyIGJ1c2lkW0JVU19JRF9TSVpFXTsKKworCWlmIChjb3VudCA8IDUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogc3RybmxlbigpIGRvZXMgbm90IGluY2x1ZGUgXDAgKi8KKwlsZW4gPSBzdHJubGVuKGJ1ZiArIDQsIEJVU19JRF9TSVpFKTsKKworCS8qIGJ1c2lkIG5lZWRzIHRvIGluY2x1ZGUgXDAgdGVybWluYXRpb24gKi8KKwlpZiAoIShsZW4gPCBCVVNfSURfU0laRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RybmNweShidXNpZCwgYnVmICsgNCwgQlVTX0lEX1NJWkUpOworCisKKwlpZiAoIXN0cm5jbXAoYnVmLCAiYWRkICIsIDQpKSB7CisJCWlmIChhZGRfbWF0Y2hfYnVzaWQoYnVzaWQpIDwgMCkKKwkJCXJldHVybiAtRU5PTUVNOworCQllbHNlIHsKKwkJCXVkYmcoImFkZCBidXNpZCAlc1xuIiwgYnVzaWQpOworCQkJcmV0dXJuIGNvdW50OworCQl9CisJfSBlbHNlIGlmICghc3RybmNtcChidWYsICJkZWwgIiwgNCkpIHsKKwkJaWYgKGRlbF9tYXRjaF9idXNpZChidXNpZCkgPCAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWVsc2UgeworCQkJdWRiZygiZGVsIGJ1c2lkICVzXG4iLCBidXNpZCk7CisJCQlyZXR1cm4gY291bnQ7CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBEUklWRVJfQVRUUihtYXRjaF9idXNpZCwgU19JUlVTUnxTX0lXVVNSLCBzaG93X21hdGNoX2J1c2lkLAorCQkJCQkJCXN0b3JlX21hdGNoX2J1c2lkKTsKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIENsZWFudXAgZnVuY3Rpb25zIHVzZWQgdG8gZnJlZSBwcml2YXRlIGRhdGEgKi8KKworc3RhdGljIHN0cnVjdCBzdHViX3ByaXYgKnN0dWJfcHJpdl9wb3BfZnJvbV9saXN0aGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0aGVhZCkKK3sKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2LCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXYsIHRtcCwgbGlzdGhlYWQsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnByaXYtPmxpc3QpOworCQlyZXR1cm4gcHJpdjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBzdHViX3ByaXYgKnN0dWJfcHJpdl9wb3Aoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHN0dWJfcHJpdiAqcHJpdjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCXByaXYgPSBzdHViX3ByaXZfcG9wX2Zyb21fbGlzdGhlYWQoJnNkZXYtPnByaXZfaW5pdCk7CisJaWYgKHByaXYpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJCXJldHVybiBwcml2OworCX0KKworCXByaXYgPSBzdHViX3ByaXZfcG9wX2Zyb21fbGlzdGhlYWQoJnNkZXYtPnByaXZfdHgpOworCWlmIChwcml2KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcHJpdjsKKwl9CisKKwlwcml2ID0gc3R1Yl9wcml2X3BvcF9mcm9tX2xpc3RoZWFkKCZzZGV2LT5wcml2X2ZyZWUpOworCWlmIChwcml2KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcHJpdjsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBzdHViX2RldmljZV9jbGVhbnVwX3VyYnMoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBzdHViX3ByaXYgKnByaXY7CisKKwl1ZGJnKCJmcmVlIHNkZXYgJXBcbiIsIHNkZXYpOworCisJd2hpbGUgKChwcml2ID0gc3R1Yl9wcml2X3BvcChzZGV2KSkpIHsKKwkJc3RydWN0IHVyYiAqdXJiID0gcHJpdi0+dXJiOworCisJCXVkYmcoIiAgIGZyZWUgdXJiICVwXG4iLCB1cmIpOworCQl1c2Jfa2lsbF91cmIodXJiKTsKKworCQlrbWVtX2NhY2hlX2ZyZWUoc3R1Yl9wcml2X2NhY2hlLCBwcml2KTsKKworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgIT0gTlVMTCkKKwkJCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCQlpZiAodXJiLT5zZXR1cF9wYWNrZXQgIT0gTlVMTCkKKwkJCWtmcmVlKHVyYi0+c2V0dXBfcGFja2V0KTsKKworCQl1c2JfZnJlZV91cmIodXJiKTsKKwl9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgdXNiX3N0dWJfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlzdHViX3ByaXZfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgic3R1Yl9wcml2IiwKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc3R1Yl9wcml2KSwgMCwKKwkJCQkJICAgIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CisKKwlpZiAoIXN0dWJfcHJpdl9jYWNoZSkgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6IGNyZWF0ZSBzdHViX3ByaXZfY2FjaGUgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnN0dWJfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiB1c2JfcmVnaXN0ZXIgZmFpbGVkICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwkJZ290byBlcnJvcl91c2JfcmVnaXN0ZXI7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIjoiIERSSVZFUl9WRVJTSU9OICJcbiIpOworCisJbWVtc2V0KGJ1c2lkX3RhYmxlLCAwLCBzaXplb2YoYnVzaWRfdGFibGUpKTsKKwlzcGluX2xvY2tfaW5pdCgmYnVzaWRfdGFibGVfbG9jayk7CisKKwlyZXQgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJnN0dWJfZHJpdmVyLmRydndyYXAuZHJpdmVyLAorCQkJCSAmZHJpdmVyX2F0dHJfbWF0Y2hfYnVzaWQpOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogY3JlYXRlIGRyaXZlciBzeXNmc1xuIik7CisJCWdvdG8gZXJyb3JfY3JlYXRlX2ZpbGU7CisJfQorCisJcmV0dXJuIHJldDsKK2Vycm9yX2NyZWF0ZV9maWxlOgorCXVzYl9kZXJlZ2lzdGVyKCZzdHViX2RyaXZlcik7CitlcnJvcl91c2JfcmVnaXN0ZXI6CisJa21lbV9jYWNoZV9kZXN0cm95KHN0dWJfcHJpdl9jYWNoZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9zdHViX2V4aXQodm9pZCkKK3sKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJnN0dWJfZHJpdmVyLmRydndyYXAuZHJpdmVyLAorCQkJICAgJmRyaXZlcl9hdHRyX21hdGNoX2J1c2lkKTsKKworCS8qCisJICogZGVyZWdpc3RlcigpIGNhbGxzIHN0dWJfZGlzY29ubmVjdCgpIGZvciBhbGwgZGV2aWNlcy4gRGV2aWNlCisJICogc3BlY2lmaWMgZGF0YSBpcyBjbGVhcmVkIGluIHN0dWJfZGlzY29ubmVjdCgpLgorCSAqLworCXVzYl9kZXJlZ2lzdGVyKCZzdHViX2RyaXZlcik7CisKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koc3R1Yl9wcml2X2NhY2hlKTsKK30KKworbW9kdWxlX2luaXQodXNiX3N0dWJfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2Jfc3R1Yl9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmNlODk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYwpAQCAtMCwwICsxLDYxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgorI2luY2x1ZGUgInN0dWIuaCIKKyNpbmNsdWRlICIuLi8uLi91c2IvY29yZS9oY2QuaCIKKworCitzdGF0aWMgaW50IGlzX2NsZWFyX2hhbHRfY21kKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisKKwlyZXEgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKworCSByZXR1cm4gKHJlcS0+YlJlcXVlc3QgPT0gVVNCX1JFUV9DTEVBUl9GRUFUVVJFKSAmJgorCQkgKHJlcS0+YlJlcXVlc3RUeXBlID09IFVTQl9SRUNJUF9FTkRQT0lOVCkgJiYKKwkJIChyZXEtPndWYWx1ZSA9PSBVU0JfRU5EUE9JTlRfSEFMVCk7Cit9CisKK3N0YXRpYyBpbnQgaXNfc2V0X2ludGVyZmFjZV9jbWQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcTsKKworCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCisJcmV0dXJuIChyZXEtPmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0lOVEVSRkFDRSkgJiYKKwkJICAgKHJlcS0+YlJlcXVlc3RUeXBlID09IFVTQl9SRUNJUF9JTlRFUkZBQ0UpOworfQorCitzdGF0aWMgaW50IGlzX3NldF9jb25maWd1cmF0aW9uX2NtZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOworCisJcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisKKwlyZXR1cm4gKHJlcS0+YlJlcXVlc3QgPT0gVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTikgJiYKKwkJICAgKHJlcS0+YlJlcXVlc3RUeXBlID09IFVTQl9SRUNJUF9ERVZJQ0UpOworfQorCitzdGF0aWMgaW50IGlzX3Jlc2V0X2RldmljZV9jbWQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcTsKKwlfX3UxNiB2YWx1ZTsKKwlfX3UxNiBpbmRleDsKKworCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCXZhbHVlID0gbGUxNl90b19jcHUocmVxLT53VmFsdWUpOworCWluZGV4ID0gbGUxNl90b19jcHUocmVxLT53SW5kZXgpOworCisJaWYgKChyZXEtPmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0ZFQVRVUkUpICYmCisJCQkocmVxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JUX1BPUlQpICYmCisJCQkodmFsdWUgPSBVU0JfUE9SVF9GRUFUX1JFU0VUKSkgeworCQlkYmdfc3R1Yl9yeCgicmVzZXRfZGV2aWNlX2NtZCwgcG9ydCAldVxuIiwgaW5kZXgpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHdlYWtfY2xlYXJfaGFsdF9jbWQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcTsKKwlpbnQgdGFyZ2V0X2VuZHA7CisJaW50IHRhcmdldF9kaXI7CisJaW50IHRhcmdldF9waXBlOworCWludCByZXQ7CisKKwlyZXEgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKworCS8qCisJICogVGhlIHN0YWxsZWQgZW5kcG9pbnQgaXMgc3BlY2lmaWVkIGluIHRoZSB3SW5kZXggdmFsdWUuIFRoZSBlbmRwb2ludAorCSAqIG9mIHRoZSB1cmIgaXMgdGhlIHRhcmdldCBvZiB0aGlzIGNsZWFyX2hhbHQgcmVxdWVzdCAoaS5lLiwgY29udHJvbAorCSAqIGVuZHBvaW50KS4KKwkgKi8KKwl0YXJnZXRfZW5kcCA9IGxlMTZfdG9fY3B1KHJlcS0+d0luZGV4KSAmIDB4MDAwZjsKKworCS8qIHRoZSBzdGFsbGVkIGVuZHBvaW50IGRpcmVjdGlvbiBpcyBJTiBvciBPVVQ/LiBVU0JfRElSX0lOIGlzIDB4ODAuICAqLworCXRhcmdldF9kaXIgPSBsZTE2X3RvX2NwdShyZXEtPndJbmRleCkgJiAweDAwODA7CisKKwlpZiAodGFyZ2V0X2RpcikKKwkJdGFyZ2V0X3BpcGUgPSB1c2JfcmN2Y3RybHBpcGUodXJiLT5kZXYsIHRhcmdldF9lbmRwKTsKKwllbHNlCisJCXRhcmdldF9waXBlID0gdXNiX3NuZGN0cmxwaXBlKHVyYi0+ZGV2LCB0YXJnZXRfZW5kcCk7CisKKwlyZXQgPSB1c2JfY2xlYXJfaGFsdCh1cmItPmRldiwgdGFyZ2V0X3BpcGUpOworCWlmIChyZXQgPCAwKQorCQl1aW5mbygiY2xlYXJfaGFsdCBlcnJvcjogZGV2bnVtICVkIGVuZHAgJWQsICVkXG4iLAorCQkJCXVyYi0+ZGV2LT5kZXZudW0sIHRhcmdldF9lbmRwLCByZXQpOworCWVsc2UKKwkJdWluZm8oImNsZWFyX2hhbHQgZG9uZTogZGV2bnVtICVkIGVuZHAgJWRcbiIsCisJCQkJdXJiLT5kZXYtPmRldm51bSwgdGFyZ2V0X2VuZHApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0d2Vha19zZXRfaW50ZXJmYWNlX2NtZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOworCV9fdTE2IGFsdGVybmF0ZTsKKwlfX3UxNiBpbnRlcmZhY2U7CisJaW50IHJldDsKKworCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCWFsdGVybmF0ZSA9IGxlMTZfdG9fY3B1KHJlcS0+d1ZhbHVlKTsKKwlpbnRlcmZhY2UgPSBsZTE2X3RvX2NwdShyZXEtPndJbmRleCk7CisKKwlkYmdfc3R1Yl9yeCgic2V0X2ludGVyZmFjZTogaW5mICV1IGFsdCAldVxuIiwgaW50ZXJmYWNlLCBhbHRlcm5hdGUpOworCisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UodXJiLT5kZXYsIGludGVyZmFjZSwgYWx0ZXJuYXRlKTsKKwlpZiAocmV0IDwgMCkKKwkJdWluZm8oInNldF9pbnRlcmZhY2UgZXJyb3I6IGluZiAldSBhbHQgJXUsICVkXG4iLAorCQkJCWludGVyZmFjZSwgYWx0ZXJuYXRlLCByZXQpOworCWVsc2UKKwkJdWluZm8oInNldF9pbnRlcmZhY2UgZG9uZTogaW5mICV1IGFsdCAldVxuIiwKKwkJCQkJCQlpbnRlcmZhY2UsCisJCQkJCQkJYWx0ZXJuYXRlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHdlYWtfc2V0X2NvbmZpZ3VyYXRpb25fY21kKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisJX191MTYgY29uZmlnOworCisJcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJY29uZmlnID0gbGUxNl90b19jcHUocmVxLT53VmFsdWUpOworCisJLyoKKwkgKiBJIGhhdmUgbmV2ZXIgc2VlbiBhIG11bHRpLWNvbmZpZyBkZXZpY2UuIFZlcnkgcmFyZS4KKwkgKiBGb3IgbW9zdCBkZXZpY2VzLCB0aGlzIHdpbGwgYmUgY2FsbGVkIHRvIGNob29zZSBhIGRlZmF1bHQKKwkgKiBjb25maWd1cmF0aW9uIG9ubHkgb25jZSBpbiBhbiBpbml0aWFsaXphdGlvbiBwaGFzZS4KKwkgKgorCSAqIHNldF9jb25maWd1cmF0aW9uIG1heSBjaGFuZ2UgYSBkZXZpY2UgY29uZmlndXJhdGlvbiBhbmQgaXRzIGRldmljZQorCSAqIGRyaXZlcnMgd2lsbCBiZSB1bmJvdW5kIGFuZCBhc3NpZ25lZCBmb3IgYSBuZXcgZGV2aWNlIGNvbmZpZ3VyYXRpb24uCisJICogVGhpcyBtZWFucyB0aGlzIHVzYmlwIGRyaXZlciB3aWxsIGJlIGFsc28gdW5ib3VuZCB3aGVuIGNhbGxlZCwgdGhlbgorCSAqIGV2ZW50dWFsbHkgcmVhc3NpZ25lZCB0byB0aGUgZGV2aWNlIGFzIGZhciBhcyBkcml2ZXIgbWF0Y2hpbmcKKwkgKiBjb25kaXRpb24gaXMga2VwdC4KKwkgKgorCSAqIFVuZm9ydHVuYXRlbGx5LCBhbiBleGlzdGluZyB1c2JpcCBjb25uZWN0aW9uIHdpbGwgYmUgZHJvcHBlZAorCSAqIGR1ZSB0byB0aGlzIGRyaXZlciB1bmJpbmRpbmcuIFNvLCBza2lwIGhlcmUuCisJICogQSB1c2VyIG1heSBuZWVkIHRvIHNldCBhIHNwZWNpYWwgY29uZmlndXJhdGlvbiB2YWx1ZSBiZWZvcmUKKwkgKiBleHBvcnRpbmcgdGhlIGRldmljZS4KKwkgKi8KKwl1aW5mbygic2V0X2NvbmZpZ3VyYXRpb24gKCVkKSB0byAlc1xuIiwgY29uZmlnLCB1cmItPmRldi0+ZGV2LmJ1c19pZCk7CisJdWluZm8oImJ1dCwgc2tpcCFcbiIpOworCisJcmV0dXJuIDA7CisJLyogcmV0dXJuIHVzYl9kcml2ZXJfc2V0X2NvbmZpZ3VyYXRpb24odXJiLT5kZXYsIGNvbmZpZyk7ICovCit9CisKK3N0YXRpYyBpbnQgdHdlYWtfcmVzZXRfZGV2aWNlX2NtZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOworCV9fdTE2IHZhbHVlOworCV9fdTE2IGluZGV4OworCWludCByZXQ7CisKKwlyZXEgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwl2YWx1ZSA9IGxlMTZfdG9fY3B1KHJlcS0+d1ZhbHVlKTsKKwlpbmRleCA9IGxlMTZfdG9fY3B1KHJlcS0+d0luZGV4KTsKKworCXVpbmZvKCJyZXNldF9kZXZpY2UgKHBvcnQgJWQpIHRvICVzXG4iLCBpbmRleCwgdXJiLT5kZXYtPmRldi5idXNfaWQpOworCisJLyogYWxsIGludGVyZmFjZXMgc2hvdWxkIGJlIG93bmVkIGJ5IHVzYmlwIGRyaXZlciwgc28ganVzdCByZXNldCBpdC4gICovCisJcmV0ID0gdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCh1cmItPmRldiwgTlVMTCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgImxvY2sgZm9yIHJlc2V0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiB0cnkgdG8gcmVzZXQgdGhlIGRldmljZSAqLworCXJldCA9IHVzYl9yZXNldF9kZXZpY2UodXJiLT5kZXYpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiZGV2aWNlIHJlc2V0XG4iKTsKKworCXVzYl91bmxvY2tfZGV2aWNlKHVyYi0+ZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBjbGVhcl9oYWx0LCBzZXRfaW50ZXJmYWNlLCBhbmQgc2V0X2NvbmZpZ3VyYXRpb24gcmVxdWlyZSBzcGVjaWFsIHRyaWNrcy4KKyAqLworc3RhdGljIHZvaWQgdHdlYWtfc3BlY2lhbF9yZXF1ZXN0cyhzdHJ1Y3QgdXJiICp1cmIpCit7CisJaWYgKCF1cmIgfHwgIXVyYi0+c2V0dXBfcGFja2V0KQorCQlyZXR1cm47CisKKwlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgIT0gUElQRV9DT05UUk9MKQorCQlyZXR1cm47CisKKwlpZiAoaXNfY2xlYXJfaGFsdF9jbWQodXJiKSkKKwkJLyogdHdlYWsgY2xlYXJfaGFsdCAqLworCQkgdHdlYWtfY2xlYXJfaGFsdF9jbWQodXJiKTsKKworCWVsc2UgaWYgKGlzX3NldF9pbnRlcmZhY2VfY21kKHVyYikpCisJCS8qIHR3ZWFrIHNldF9pbnRlcmZhY2UgKi8KKwkJdHdlYWtfc2V0X2ludGVyZmFjZV9jbWQodXJiKTsKKworCWVsc2UgaWYgKGlzX3NldF9jb25maWd1cmF0aW9uX2NtZCh1cmIpKQorCQkvKiB0d2VhayBzZXRfY29uZmlndXJhdGlvbiAqLworCQl0d2Vha19zZXRfY29uZmlndXJhdGlvbl9jbWQodXJiKTsKKworCWVsc2UgaWYgKGlzX3Jlc2V0X2RldmljZV9jbWQodXJiKSkKKwkJdHdlYWtfcmVzZXRfZGV2aWNlX2NtZCh1cmIpOworCWVsc2UKKwkJZGJnX3N0dWJfcngoIm5vIG5lZWQgdG8gdHdlYWtcbiIpOworfQorCisvKgorICogc3R1Yl9yZWN2X3VubGluaygpIHVubGlua3MgdGhlIFVSQiBieSBhIGNhbGwgdG8gdXNiX3VubGlua191cmIoKS4KKyAqIEJ5IHVubGlua2luZyB0aGUgdXJiIGFzeW5jaHJvbm91c2x5LCBzdHViX3J4IGNhbiBjb250aW51b3VzbHkKKyAqIHByb2Nlc3MgY29taW5nIHVyYnMuICBFdmVuIGlmIHRoZSB1cmIgaXMgdW5saW5rZWQsIGl0cyBjb21wbGV0aW9uCisgKiBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGFuZCBzdHViX3R4IHdpbGwgc2VuZCBhIHJldHVybiBwZHUuCisgKgorICogU2VlIGFsc28gY29tbWVudHMgYWJvdXQgdW5saW5raW5nIHN0cmF0ZWd5IGluIHZoY2lfaGNkLmMuCisgKi8KK3N0YXRpYyBpbnQgc3R1Yl9yZWN2X2NtZF91bmxpbmsoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2LAorCQkJCQkJc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RoZWFkID0gJnNkZXYtPnByaXZfaW5pdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN0cnVjdCBzdHViX3ByaXYgKnByaXY7CisKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCWZvciAocHRyID0gbGlzdGhlYWQtPm5leHQ7IHB0ciAhPSBsaXN0aGVhZDsgcHRyID0gcHRyLT5uZXh0KSB7CisJCXByaXYgPSBsaXN0X2VudHJ5KHB0ciwgc3RydWN0IHN0dWJfcHJpdiwgbGlzdCk7CisJCWlmIChwcml2LT5zZXFudW0gPT0gcGR1LT51LmNtZF91bmxpbmsuc2VxbnVtKSB7CisJCQlpbnQgcmV0OworCisJCQlkZXZfaW5mbygmcHJpdi0+dXJiLT5kZXYtPmRldiwgInVubGluayB1cmIgJXBcbiIsCisJCQkJIHByaXYtPnVyYik7CisKKwkJCS8qCisJCQkgKiBUaGlzIG1hdGNoZWQgdXJiIGlzIG5vdCBjb21wbGV0ZWQgeWV0IChpLmUuLCBiZSBpbgorCQkJICogZmxpZ2h0IGluIHVzYiBoY2QgaGFyZHdhcmUvZHJpdmVyKS4gTm93IHdlIGFyZQorCQkJICogY2FuY2VsbGluZyBpdC4gVGhlIHVubGlua2luZyBmbGFnIG1lYW5zIHRoYXQgd2UgYXJlCisJCQkgKiBub3cgbm90IGdvaW5nIHRvIHJldHVybiB0aGUgbm9ybWFsIHJlc3VsdCBwZHUgb2YgYQorCQkJICogc3VibWlzc2lvbiByZXF1ZXN0LCBidXQgZ29pbmcgdG8gcmV0dXJuIGEgcmVzdWx0IHBkdQorCQkJICogb2YgdGhlIHVubGluayByZXF1ZXN0LgorCQkJICovCisJCQlwcml2LT51bmxpbmtpbmcgPSAxOworCisJCQkvKgorCQkJICogSW4gdGhlIGNhc2UgdGhhdCB1bmxpbmtpbmcgZmxhZyBpcyBvbiwgcHJldi0+c2VxbnVtCisJCQkgKiBpcyBjaGFuZ2VkIGZyb20gdGhlIHNlcW51bSBvZiB0aGUgY2FuY2VsbGluZyB1cmIgdG8KKwkJCSAqIHRoZSBzZXFudW0gb2YgdGhlIHVubGluayByZXF1ZXN0LiBUaGlzIHdpbGwgYmUgdXNlZAorCQkJICogdG8gbWFrZSB0aGUgcmVzdWx0IHBkdSBvZiB0aGUgdW5saW5rIHJlcXVlc3QuCisJCQkgKi8KKwkJCXByaXYtPnNlcW51bSA9IHBkdS0+YmFzZS5zZXFudW07CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJCQkvKgorCQkJICogdXNiX3VubGlua191cmIoKSBpcyBub3cgb3V0IG9mIHNwaW5sb2NraW5nIHRvIGF2b2lkCisJCQkgKiBzcGlubG9jayByZWN1cnNpb24gc2luY2Ugc3R1Yl9jb21wbGV0ZSgpIGlzCisJCQkgKiBzb21ldGltZXMgY2FsbGVkIGluIHRoaXMgY29udGV4dCBidXQgbm90IGluIHRoZQorCQkJICogaW50ZXJydXB0IGNvbnRleHQuICBJZiBzdHViX2NvbXBsZXRlKCkgaXMgZXhlY3V0ZWQKKwkJCSAqIGJlZm9yZSB3ZSBjYWxsIHVzYl91bmxpbmtfdXJiKCksIHVzYl91bmxpbmtfdXJiKCkKKwkJCSAqIHdpbGwgcmV0dXJuIGFuIGVycm9yIHZhbHVlLiBJbiB0aGlzIGNhc2UsIHN0dWJfdHgKKwkJCSAqIHdpbGwgcmV0dXJuIHRoZSByZXN1bHQgcGR1IG9mIHRoaXMgdW5saW5rIHJlcXVlc3QKKwkJCSAqIHRob3VnaCBzdWJtaXNzaW9uIGlzIGNvbXBsZXRlZCBhbmQgYWN0dWFsIHVubGlua2luZworCQkJICogaXMgbm90IGV4ZWN1dGVkLiBPSz8KKwkJCSAqLworCQkJLyogSW4gdGhlIGFib3ZlIGNhc2UsIHVyYi0+c3RhdHVzIGlzIG5vdCAtRUNPTk5SRVNFVCwKKwkJCSAqIHNvIGEgZHJpdmVyIGluIGEgY2xpZW50IGhvc3Qgd2lsbCBrbm93IHRoZSBmYWlsdXJlCisJCQkgKiBvZiB0aGUgdW5saW5rIHJlcXVlc3QgPworCQkJICovCisJCQlyZXQgPSB1c2JfdW5saW5rX3VyYihwcml2LT51cmIpOworCQkJaWYgKHJldCAhPSAtRUlOUFJPR1JFU1MpCisJCQkJZGV2X2VycigmcHJpdi0+dXJiLT5kZXYtPmRldiwKKwkJCQkJImZhaWxlZCB0byB1bmxpbmsgYSB1cmIgJXAsIHJldCAlZFxuIiwKKwkJCQkJcHJpdi0+dXJiLCByZXQpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlkYmdfc3R1Yl9yeCgic2VxbnVtICVkIGlzIG5vdCBwZW5kaW5nXG4iLCBwZHUtPnUuY21kX3VubGluay5zZXFudW0pOworCisJLyoKKwkgKiBUaGUgdXJiIG9mIHRoZSB1bmxpbmsgdGFyZ2V0IGlzIG5vdCBmb3VuZCBpbiBwcml2X2luaXQgcXVldWUuIEl0IHdhcworCSAqIGFscmVhZHkgY29tcGxldGVkIGFuZCBpdHMgcmVzdWx0cyBpcy93YXMgZ29pbmcgdG8gYmUgc2VudCBieSBhCisJICogQ01EX1JFVCBwZHUuIEluIHRoaXMgY2FzZSwgdXNiX3VubGlua191cmIoKSBpcyBub3QgbmVlZGVkLiBXZSBvbmx5CisJICogcmV0dXJuIHRoZSBjb21wbGV0ZW5lc3Mgb2YgdGhpcyB1bmxpbmsgcmVxdWVzdCB0byB2aGNpX2hjZC4KKwkgKi8KKwlzdHViX2VucXVldWVfcmV0X3VubGluayhzZGV2LCBwZHUtPmJhc2Uuc2VxbnVtLCAwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2YWxpZF9yZXF1ZXN0KHN0cnVjdCBzdHViX2RldmljZSAqc2Rldiwgc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQoreworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gJnNkZXYtPnVkOworCisJaWYgKHBkdS0+YmFzZS5kZXZpZCA9PSBzZGV2LT5kZXZpZCkgeworCQlzcGluX2xvY2soJnVkLT5sb2NrKTsKKwkJaWYgKHVkLT5zdGF0dXMgPT0gU0RFVl9TVF9VU0VEKSB7CisJCQkvKiBBIHJlcXVlc3QgaXMgdmFsaWQuICovCisJCQlzcGluX3VubG9jaygmdWQtPmxvY2spOworCQkJcmV0dXJuIDE7CisJCX0KKwkJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzdHViX3ByaXYgKnN0dWJfcHJpdl9hbGxvYyhzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYsCisJCQkJCSBzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpCit7CisJc3RydWN0IHN0dWJfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9ICZzZGV2LT51ZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJcHJpdiA9IGttZW1fY2FjaGVfYWxsb2Moc3R1Yl9wcml2X2NhY2hlLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXByaXYpIHsKKwkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsICJhbGxvYyBzdHViX3ByaXZcbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCXJldHVybiBOVUxMOworCX0KKworCW1lbXNldChwcml2LCAwLCBzaXplb2Yoc3RydWN0IHN0dWJfcHJpdikpOworCisJcHJpdi0+c2VxbnVtID0gcGR1LT5iYXNlLnNlcW51bTsKKwlwcml2LT5zZGV2ID0gc2RldjsKKworCS8qCisJICogQWZ0ZXIgYSBzdHViX3ByaXYgaXMgbGlua2VkIHRvIGEgbGlzdF9oZWFkLAorCSAqIG91ciBlcnJvciBoYW5kbGVyIGNhbiBmcmVlIGFsbG9jYXRlZCBkYXRhLgorCSAqLworCWxpc3RfYWRkX3RhaWwoJnByaXYtPmxpc3QsICZzZGV2LT5wcml2X2luaXQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcHJpdjsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpnZXRfZXBfZnJvbV9lcG51bShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJaW50IGVwbnVtMCkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnICpjb25maWc7CisJaW50IGkgPSAwLCBqID0gMDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwID0gTlVMTDsKKwlpbnQgZXBudW07CisJaW50IGZvdW5kID0gMDsKKworCWlmIChlcG51bTAgPT0gMCkKKwkJcmV0dXJuICZ1ZGV2LT5lcDA7CisKKwljb25maWcgPSB1ZGV2LT5hY3Rjb25maWc7CisJaWYgKCFjb25maWcpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CisJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKnNldHRpbmc7CisKKwkJc2V0dGluZyA9IGNvbmZpZy0+aW50ZXJmYWNlW2ldLT5jdXJfYWx0c2V0dGluZzsKKworCQlmb3IgKGogPSAwOyBqIDwgc2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBqKyspIHsKKwkJCWVwID0gJnNldHRpbmctPmVuZHBvaW50W2pdOworCQkJZXBudW0gPSAoZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4N2YpOworCisJCQlpZiAoZXBudW0gPT0gZXBudW0wKSB7CisJCQkJLyogdWluZm8oImZvdW5kIGVwbnVtICVkXG4iLCBlcG51bTApOyAqLworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmb3VuZCkKKwkJcmV0dXJuIGVwOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIGludCBnZXRfcGlwZShzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYsIGludCBlcG51bSwgaW50IGRpcikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoc2Rldi0+aW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkID0gTlVMTDsKKworCWVwID0gZ2V0X2VwX2Zyb21fZXBudW0odWRldiwgZXBudW0pOworCWlmICghZXApIHsKKwkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsICJubyBzdWNoIGVuZHBvaW50PywgJWRcbiIsCisJCQllcG51bSk7CisJCUJVRygpOworCX0KKworCWVwZCA9ICZlcC0+ZGVzYzsKKworCisjaWYgMAorCS8qIGVwbnVtIDAgaXMgYWx3YXlzIGNvbnRyb2wgKi8KKwlpZiAoZXBudW0gPT0gMCkgeworCQlpZiAoZGlyID09IFVTQklQX0RJUl9PVVQpCisJCQlyZXR1cm4gdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApOworCQllbHNlCisJCQlyZXR1cm4gdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApOworCX0KKyNlbmRpZgorCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woZXBkKSkgeworCQlpZiAoZGlyID09IFVTQklQX0RJUl9PVVQpCisJCQlyZXR1cm4gdXNiX3NuZGN0cmxwaXBlKHVkZXYsIGVwbnVtKTsKKwkJZWxzZQorCQkJcmV0dXJuIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCBlcG51bSk7CisJfQorCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXBkKSkgeworCQlpZiAoZGlyID09IFVTQklQX0RJUl9PVVQpCisJCQlyZXR1cm4gdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIGVwbnVtKTsKKwkJZWxzZQorCQkJcmV0dXJuIHVzYl9yY3ZidWxrcGlwZSh1ZGV2LCBlcG51bSk7CisJfQorCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpKSB7CisJCWlmIChkaXIgPT0gVVNCSVBfRElSX09VVCkKKwkJCXJldHVybiB1c2Jfc25kaW50cGlwZSh1ZGV2LCBlcG51bSk7CisJCWVsc2UKKwkJCXJldHVybiB1c2JfcmN2aW50cGlwZSh1ZGV2LCBlcG51bSk7CisJfQorCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZXBkKSkgeworCQlpZiAoZGlyID09IFVTQklQX0RJUl9PVVQpCisJCQlyZXR1cm4gdXNiX3NuZGlzb2NwaXBlKHVkZXYsIGVwbnVtKTsKKwkJZWxzZQorCQkJcmV0dXJuIHVzYl9yY3Zpc29jcGlwZSh1ZGV2LCBlcG51bSk7CisJfQorCisJLyogTk9UIFJFQUNIRUQgKi8KKwlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgImdldCBwaXBlLCBlcG51bSAlZFxuIiwgZXBudW0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdHViX3JlY3ZfY21kX3N1Ym1pdChzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYsCisJCQkJIHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzdHViX3ByaXYgKnByaXY7CisJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSAmc2Rldi0+dWQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHNkZXYtPmludGVyZmFjZSk7CisJaW50IHBpcGUgPSBnZXRfcGlwZShzZGV2LCBwZHUtPmJhc2UuZXAsIHBkdS0+YmFzZS5kaXJlY3Rpb24pOworCisKKwlwcml2ID0gc3R1Yl9wcml2X2FsbG9jKHNkZXYsIHBkdSk7CisJaWYgKCFwcml2KQorCQlyZXR1cm47CisKKwkvKiBzZXR1cCBhIHVyYiAqLworCWlmICh1c2JfcGlwZWlzb2MocGlwZSkpCisJCXByaXYtPnVyYiA9IHVzYl9hbGxvY191cmIocGR1LT51LmNtZF9zdWJtaXQubnVtYmVyX29mX3BhY2tldHMsCisJCQkJCQkJCUdGUF9LRVJORUwpOworCWVsc2UKKwkJcHJpdi0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKworCWlmICghcHJpdi0+dXJiKSB7CisJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LCAibWFsbG9jIHVyYlxuIik7CisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgU0RFVl9FVkVOVF9FUlJPUl9NQUxMT0MpOworCQlyZXR1cm47CisJfQorCisJLyogc2V0IHByaXYtPnVyYi0+dHJhbnNmZXJfYnVmZmVyICovCisJaWYgKHBkdS0+dS5jbWRfc3VibWl0LnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAwKSB7CisJCXByaXYtPnVyYi0+dHJhbnNmZXJfYnVmZmVyID0KKwkJCWt6YWxsb2MocGR1LT51LmNtZF9zdWJtaXQudHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdi0+dXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LCAibWFsbG9jIHhfYnVmZlxuIik7CisJCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIHNldCBwcml2LT51cmItPnNldHVwX3BhY2tldCAqLworCXByaXYtPnVyYi0+c2V0dXBfcGFja2V0ID0ga3phbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPnVyYi0+c2V0dXBfcGFja2V0KSB7CisJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LCAiYWxsb2NhdGUgc2V0dXBfcGFja2V0XG4iKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCXJldHVybjsKKwl9CisJbWVtY3B5KHByaXYtPnVyYi0+c2V0dXBfcGFja2V0LCAmcGR1LT51LmNtZF9zdWJtaXQuc2V0dXAsIDgpOworCisJLyogc2V0IG90aGVyIG1lbWJlcnMgZnJvbSB0aGUgYmFzZSBoZWFkZXIgb2YgcGR1ICovCisJcHJpdi0+dXJiLT5jb250ZXh0ICAgICAgICAgICAgICAgID0gKHZvaWQgKikgcHJpdjsKKwlwcml2LT51cmItPmRldiAgICAgICAgICAgICAgICAgICAgPSB1ZGV2OworCXByaXYtPnVyYi0+cGlwZSAgICAgICAgICAgICAgICAgICA9IHBpcGU7CisJcHJpdi0+dXJiLT5jb21wbGV0ZSAgICAgICAgICAgICAgID0gc3R1Yl9jb21wbGV0ZTsKKworCXVzYmlwX3BhY2tfcGR1KHBkdSwgcHJpdi0+dXJiLCBVU0JJUF9DTURfU1VCTUlULCAwKTsKKworCisJaWYgKHVzYmlwX3JlY3ZfeGJ1ZmYodWQsIHByaXYtPnVyYikgPCAwKQorCQlyZXR1cm47CisKKwlpZiAodXNiaXBfcmVjdl9pc28odWQsIHByaXYtPnVyYikgPCAwKQorCQlyZXR1cm47CisKKwkvKiBubyBuZWVkIHRvIHN1Ym1pdCBhbiBpbnRlcmNlcHRlZCByZXF1ZXN0LCBidXQgaGFybWxlc3M/ICovCisJdHdlYWtfc3BlY2lhbF9yZXF1ZXN0cyhwcml2LT51cmIpOworCisJLyogdXJiIGlzIG5vdyByZWFkeSB0byBzdWJtaXQgKi8KKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT51cmIsIEdGUF9LRVJORUwpOworCisJaWYgKHJldCA9PSAwKQorCQlkYmdfc3R1Yl9yeCgic3VibWl0IHVyYiBvaywgc2VxbnVtICV1XG4iLCBwZHUtPmJhc2Uuc2VxbnVtKTsKKwllbHNlIHsKKwkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsICJzdWJtaXRfdXJiIGVycm9yLCAlZFxuIiwgcmV0KTsKKwkJdXNiaXBfZHVtcF9oZWFkZXIocGR1KTsKKwkJdXNiaXBfZHVtcF91cmIocHJpdi0+dXJiKTsKKworCQkvKgorCQkgKiBQZXNzaW1pc3RpYy4KKwkJICogVGhpcyBjb25uZWN0aW9uIHdpbGwgYmUgZGlzY2FyZGVkLgorCQkgKi8KKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX1NVQk1JVCk7CisJfQorCisJZGJnX3N0dWJfcngoIkxlYXZlXG4iKTsKKwlyZXR1cm47Cit9CisKKy8qIHJlY3YgYSBwZHUgKi8KK3N0YXRpYyB2b2lkIHN0dWJfcnhfcGR1KHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCWludCByZXQ7CisJc3RydWN0IHVzYmlwX2hlYWRlciBwZHU7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gY29udGFpbmVyX29mKHVkLCBzdHJ1Y3Qgc3R1Yl9kZXZpY2UsIHVkKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2Rldi0+aW50ZXJmYWNlLT5kZXY7CisKKwlkYmdfc3R1Yl9yeCgiRW50ZXJcbiIpOworCisJbWVtc2V0KCZwZHUsIDAsIHNpemVvZihwZHUpKTsKKworCS8qIDEuIHJlY2VpdmUgYSBwZHUgaGVhZGVyICovCisJcmV0ID0gdXNiaXBfeG1pdCgwLCB1ZC0+dGNwX3NvY2tldCwgKGNoYXIgKikgJnBkdSwgc2l6ZW9mKHBkdSksIDApOworCWlmIChyZXQgIT0gc2l6ZW9mKHBkdSkpIHsKKwkJZGV2X2VycihkZXYsICJyZWN2IGEgaGVhZGVyLCAlZFxuIiwgcmV0KTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCXJldHVybjsKKwl9CisKKwl1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4oJnBkdSwgMCk7CisKKwlpZiAoZGJnX2ZsYWdfc3R1Yl9yeCkKKwkJdXNiaXBfZHVtcF9oZWFkZXIoJnBkdSk7CisKKwlpZiAoIXZhbGlkX3JlcXVlc3Qoc2RldiwgJnBkdSkpIHsKKwkJZGV2X2VycihkZXYsICJyZWN2IGludmFsaWQgcmVxdWVzdFxuIik7CisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgU0RFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChwZHUuYmFzZS5jb21tYW5kKSB7CisJY2FzZSBVU0JJUF9DTURfVU5MSU5LOgorCQlzdHViX3JlY3ZfY21kX3VubGluayhzZGV2LCAmcGR1KTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQklQX0NNRF9TVUJNSVQ6CisJCXN0dWJfcmVjdl9jbWRfc3VibWl0KHNkZXYsICZwZHUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIE5PVFJFQUNIRUQgKi8KKwkJZGV2X2VycihkZXYsICJ1bmtub3duIHBkdVxuIik7CisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgU0RFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQlyZXR1cm47CisJfQorCit9CisKK3ZvaWQgc3R1Yl9yeF9sb29wKHN0cnVjdCB1c2JpcF90YXNrICp1dCkKK3sKKwlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9IGNvbnRhaW5lcl9vZih1dCwgc3RydWN0IHVzYmlwX2RldmljZSwgdGNwX3J4KTsKKworCXdoaWxlICgxKSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJZGJnX3N0dWJfcngoInNpZ25hbCBjYXVnaHQhXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHVzYmlwX2V2ZW50X2hhcHBlbmQodWQpKQorCQkJYnJlYWs7CisKKwkJc3R1Yl9yeF9wZHUodWQpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl90eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NTYzY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl90eC5jCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCisjaW5jbHVkZSAic3R1Yi5oIgorCisKK3N0YXRpYyB2b2lkIHN0dWJfZnJlZV9wcml2X2FuZF91cmIoc3RydWN0IHN0dWJfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSBwcml2LT51cmI7CisKKwlrZnJlZSh1cmItPnNldHVwX3BhY2tldCk7CisJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWxpc3RfZGVsKCZwcml2LT5saXN0KTsKKwlrbWVtX2NhY2hlX2ZyZWUoc3R1Yl9wcml2X2NhY2hlLCBwcml2KTsKKwl1c2JfZnJlZV91cmIodXJiKTsKK30KKworLyogYmUgaW4gc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpICovCit2b2lkIHN0dWJfZW5xdWV1ZV9yZXRfdW5saW5rKHN0cnVjdCBzdHViX2RldmljZSAqc2RldiwgX191MzIgc2VxbnVtLAorCQkJICAgICBfX3UzMiBzdGF0dXMpCit7CisJc3RydWN0IHN0dWJfdW5saW5rICp1bmxpbms7CisKKwl1bmxpbmsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R1Yl91bmxpbmspLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXVubGluaykgeworCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgImFsbG9jIHN0dWJfdW5saW5rXG4iKTsKKwkJdXNiaXBfZXZlbnRfYWRkKCZzZGV2LT51ZCwgVkRFVl9FVkVOVF9FUlJPUl9NQUxMT0MpOworCQlyZXR1cm47CisJfQorCisJdW5saW5rLT5zZXFudW0gPSBzZXFudW07CisJdW5saW5rLT5zdGF0dXMgPSBzdGF0dXM7CisKKwlsaXN0X2FkZF90YWlsKCZ1bmxpbmstPmxpc3QsICZzZGV2LT51bmxpbmtfdHgpOworfQorCisvKioKKyAqIHN0dWJfY29tcGxldGUgLSBjb21wbGV0aW9uIGhhbmRsZXIgb2YgYSB1c2JpcCB1cmIKKyAqIEB1cmI6IHBvaW50ZXIgdG8gdGhlIHVyYiBjb21wbGV0ZWQKKyAqIEByZWdzOgorICoKKyAqIFdoZW4gYSB1cmIgaGFzIGNvbXBsZXRlZCwgdGhlIFVTQiBjb3JlIGRyaXZlciBjYWxscyB0aGlzIGZ1bmN0aW9uIG1vc3RseSBpbgorICogdGhlIGludGVycnVwdCBjb250ZXh0LiBUbyByZXR1cm4gdGhlIHJlc3VsdCBvZiBhIHVyYiwgdGhlIGNvbXBsZXRlZCB1cmIgaXMKKyAqIGxpbmtlZCB0byB0aGUgcGVuZGluZyBsaXN0IG9mIHJldHVybmluZy4KKyAqCisgKi8KK3ZvaWQgc3R1Yl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHN0dWJfcHJpdiAqcHJpdiA9IChzdHJ1Y3Qgc3R1Yl9wcml2ICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYgPSBwcml2LT5zZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmdfc3R1Yl90eCgiY29tcGxldGUhIHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOworCisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBPSyAqLworCQlicmVhazsKKwljYXNlIC1FTk9FTlQ6CisJCXVpbmZvKCJzdG9wcGVkIGJ5IGEgY2FsbCBvZiB1c2Jfa2lsbF91cmIoKSBiZWNhdXNlIG9mIgorCQkJCQkiY2xlYW5pbmcgdXAgYSB2aXJ0dWFsIGNvbm5lY3Rpb25cbiIpOworCQlyZXR1cm47CisJY2FzZSAtRUNPTk5SRVNFVDoKKwkJdWluZm8oInVubGlua2VkIGJ5IGEgY2FsbCBvZiB1c2JfdW5saW5rX3VyYigpXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAtRVBJUEU6CisJCXVpbmZvKCJlbmRwb2ludCAlZCBpcyBzdGFsbGVkXG4iLCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSkpOworCQlicmVhazsKKwljYXNlIC1FU0hVVERPV046CisJCXVpbmZvKCJkZXZpY2UgcmVtb3ZlZD9cbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl1aW5mbygidXJiIGNvbXBsZXRpb24gd2l0aCBub24temVybyBzdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwl9CisKKwkvKiBsaW5rIGEgdXJiIHRvIHRoZSBxdWV1ZSBvZiB0eC4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlpZiAocHJpdi0+dW5saW5raW5nKSB7CisJCXN0dWJfZW5xdWV1ZV9yZXRfdW5saW5rKHNkZXYsIHByaXYtPnNlcW51bSwgdXJiLT5zdGF0dXMpOworCQlzdHViX2ZyZWVfcHJpdl9hbmRfdXJiKHByaXYpOworCX0gZWxzZQorCQlsaXN0X21vdmVfdGFpbCgmcHJpdi0+bGlzdCwgJnNkZXYtPnByaXZfdHgpOworCisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCS8qIHdha2UgdXAgdHhfdGhyZWFkICovCisJd2FrZV91cCgmc2Rldi0+dHhfd2FpdHEpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBmaWxsIFBEVSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfYmFzZV9wZHUoc3RydWN0IHVzYmlwX2hlYWRlcl9iYXNpYyAqYmFzZSwKKwkJX191MzIgY29tbWFuZCwgX191MzIgc2VxbnVtKQoreworCWJhc2UtPmNvbW1hbmQgPSBjb21tYW5kOworCWJhc2UtPnNlcW51bSAgPSBzZXFudW07CisJYmFzZS0+ZGV2aWQgICA9IDA7CisJYmFzZS0+ZXAgICAgICA9IDA7CisJYmFzZS0+ZGlyZWN0aW9uICAgPSAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9yZXRfc3VibWl0X3BkdShzdHJ1Y3QgdXNiaXBfaGVhZGVyICpycGR1LCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHN0dWJfcHJpdiAqcHJpdiA9IChzdHJ1Y3Qgc3R1Yl9wcml2ICopIHVyYi0+Y29udGV4dDsKKworCXNldHVwX2Jhc2VfcGR1KCZycGR1LT5iYXNlLCBVU0JJUF9SRVRfU1VCTUlULCBwcml2LT5zZXFudW0pOworCisJdXNiaXBfcGFja19wZHUocnBkdSwgdXJiLCBVU0JJUF9SRVRfU1VCTUlULCAxKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfcmV0X3VubGlua19wZHUoc3RydWN0IHVzYmlwX2hlYWRlciAqcnBkdSwKKwkJc3RydWN0IHN0dWJfdW5saW5rICp1bmxpbmspCit7CisJc2V0dXBfYmFzZV9wZHUoJnJwZHUtPmJhc2UsIFVTQklQX1JFVF9VTkxJTkssIHVubGluay0+c2VxbnVtKTsKKworCXJwZHUtPnUucmV0X3VubGluay5zdGF0dXMgPSB1bmxpbmstPnN0YXR1czsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogc2VuZCBSRVRfU1VCTUlUICovCisKK3N0YXRpYyBzdHJ1Y3Qgc3R1Yl9wcml2ICpkZXF1ZXVlX2Zyb21fcHJpdl90eChzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2LCAqdG1wOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXYsIHRtcCwgJnNkZXYtPnByaXZfdHgsIGxpc3QpIHsKKwkJbGlzdF9tb3ZlX3RhaWwoJnByaXYtPmxpc3QsICZzZGV2LT5wcml2X2ZyZWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHByaXY7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBzdHViX3NlbmRfcmV0X3N1Ym1pdChzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2LCAqdG1wOworCisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGt2ZWMgaW92WzNdOworCXNpemVfdCB0eHNpemU7CisKKwlzaXplX3QgdG90YWxfc2l6ZSA9IDA7CisKKwl3aGlsZSAoKHByaXYgPSBkZXF1ZXVlX2Zyb21fcHJpdl90eChzZGV2KSkgIT0gTlVMTCkgeworCQlpbnQgcmV0OworCQlzdHJ1Y3QgdXJiICp1cmIgPSBwcml2LT51cmI7CisJCXN0cnVjdCB1c2JpcF9oZWFkZXIgcGR1X2hlYWRlcjsKKwkJdm9pZCAqaXNvX2J1ZmZlciA9IE5VTEw7CisKKwkJdHhzaXplID0gMDsKKwkJbWVtc2V0KCZwZHVfaGVhZGVyLCAwLCBzaXplb2YocGR1X2hlYWRlcikpOworCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCQltZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOworCisJCWRiZ19zdHViX3R4KCJzZXR1cCB0eGRhdGEgdXJiICVwXG4iLCB1cmIpOworCisKKwkJLyogMS4gc2V0dXAgdXNiaXBfaGVhZGVyICovCisJCXNldHVwX3JldF9zdWJtaXRfcGR1KCZwZHVfaGVhZGVyLCB1cmIpOworCQl1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4oJnBkdV9oZWFkZXIsIDEpOworCisJCWlvdlswXS5pb3ZfYmFzZSA9ICZwZHVfaGVhZGVyOworCQlpb3ZbMF0uaW92X2xlbiAgPSBzaXplb2YocGR1X2hlYWRlcik7CisJCXR4c2l6ZSArPSBzaXplb2YocGR1X2hlYWRlcik7CisKKwkJLyogMi4gc2V0dXAgdHJhbnNmZXIgYnVmZmVyICovCisJCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkgeworCQkJaW92WzFdLmlvdl9iYXNlID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCQlpb3ZbMV0uaW92X2xlbiAgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCQl0eHNpemUgKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQl9CisKKwkJLyogMy4gc2V0dXAgaXNvX3BhY2tldF9kZXNjcmlwdG9yICovCisJCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisJCQlzc2l6ZV90IGxlbiA9IDA7CisKKwkJCWlzb19idWZmZXIgPSB1c2JpcF9hbGxvY19pc29fZGVzY19wZHUodXJiLCAmbGVuKTsKKwkJCWlmICghaXNvX2J1ZmZlcikgeworCQkJCXVzYmlwX2V2ZW50X2FkZCgmc2Rldi0+dWQsCisJCQkJCQlTREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlpb3ZbMl0uaW92X2Jhc2UgPSBpc29fYnVmZmVyOworCQkJaW92WzJdLmlvdl9sZW4gID0gbGVuOworCQkJdHhzaXplICs9IGxlbjsKKwkJfQorCisJCXJldCA9IGtlcm5lbF9zZW5kbXNnKHNkZXYtPnVkLnRjcF9zb2NrZXQsICZtc2csIGlvdiwKKwkJCQkgICAgIDMsIHR4c2l6ZSk7CisJCWlmIChyZXQgIT0gdHhzaXplKSB7CisJCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwKKwkJCQkic2VuZG1zZyBmYWlsZWQhLCByZXR2YWwgJWQgZm9yICV6ZFxuIiwKKwkJCQlyZXQsIHR4c2l6ZSk7CisJCQlrZnJlZShpc29fYnVmZmVyKTsKKwkJCXVzYmlwX2V2ZW50X2FkZCgmc2Rldi0+dWQsIFNERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWtmcmVlKGlzb19idWZmZXIpOworCQlkYmdfc3R1Yl90eCgic2VuZCB0eGRhdGFcbiIpOworCisJCXRvdGFsX3NpemUgKz0gdHhzaXplOworCX0KKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXYsIHRtcCwgJnNkZXYtPnByaXZfZnJlZSwgbGlzdCkgeworCQlzdHViX2ZyZWVfcHJpdl9hbmRfdXJiKHByaXYpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHRvdGFsX3NpemU7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHNlbmQgUkVUX1VOTElOSyAqLworCitzdGF0aWMgc3RydWN0IHN0dWJfdW5saW5rICpkZXF1ZXVlX2Zyb21fdW5saW5rX3R4KHN0cnVjdCBzdHViX2RldmljZSAqc2RldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzdHViX3VubGluayAqdW5saW5rLCAqdG1wOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmc2Rldi0+dW5saW5rX3R4LCBsaXN0KSB7CisJCWxpc3RfbW92ZV90YWlsKCZ1bmxpbmstPmxpc3QsICZzZGV2LT51bmxpbmtfZnJlZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gdW5saW5rOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIGludCBzdHViX3NlbmRfcmV0X3VubGluayhzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc3R1Yl91bmxpbmsgKnVubGluaywgKnRtcDsKKworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBrdmVjIGlvdlsxXTsKKwlzaXplX3QgdHhzaXplOworCisJc2l6ZV90IHRvdGFsX3NpemUgPSAwOworCisJd2hpbGUgKCh1bmxpbmsgPSBkZXF1ZXVlX2Zyb21fdW5saW5rX3R4KHNkZXYpKSAhPSBOVUxMKSB7CisJCWludCByZXQ7CisJCXN0cnVjdCB1c2JpcF9oZWFkZXIgcGR1X2hlYWRlcjsKKworCQl0eHNpemUgPSAwOworCQltZW1zZXQoJnBkdV9oZWFkZXIsIDAsIHNpemVvZihwZHVfaGVhZGVyKSk7CisJCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisJCW1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7CisKKwkJZGJnX3N0dWJfdHgoInNldHVwIHJldCB1bmxpbmsgJWx1XG4iLCB1bmxpbmstPnNlcW51bSk7CisKKwkJLyogMS4gc2V0dXAgdXNiaXBfaGVhZGVyICovCisJCXNldHVwX3JldF91bmxpbmtfcGR1KCZwZHVfaGVhZGVyLCB1bmxpbmspOworCQl1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4oJnBkdV9oZWFkZXIsIDEpOworCisJCWlvdlswXS5pb3ZfYmFzZSA9ICZwZHVfaGVhZGVyOworCQlpb3ZbMF0uaW92X2xlbiAgPSBzaXplb2YocGR1X2hlYWRlcik7CisJCXR4c2l6ZSArPSBzaXplb2YocGR1X2hlYWRlcik7CisKKwkJcmV0ID0ga2VybmVsX3NlbmRtc2coc2Rldi0+dWQudGNwX3NvY2tldCwgJm1zZywgaW92LAorCQkJCSAgICAgMSwgdHhzaXplKTsKKwkJaWYgKHJldCAhPSB0eHNpemUpIHsKKwkJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LAorCQkJCSJzZW5kbXNnIGZhaWxlZCEsIHJldHZhbCAlZCBmb3IgJXpkXG4iLAorCQkJCXJldCwgdHhzaXplKTsKKwkJCXVzYmlwX2V2ZW50X2FkZCgmc2Rldi0+dWQsIFNERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisKKwkJZGJnX3N0dWJfdHgoInNlbmQgdHhkYXRhXG4iKTsKKworCQl0b3RhbF9zaXplICs9IHR4c2l6ZTsKKwl9CisKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgJnNkZXYtPnVubGlua19mcmVlLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOworCQlrZnJlZSh1bmxpbmspOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHRvdGFsX3NpemU7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBzdHViX3R4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KQoreworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gY29udGFpbmVyX29mKHV0LCBzdHJ1Y3QgdXNiaXBfZGV2aWNlLCB0Y3BfdHgpOworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHN0dWJfZGV2aWNlLCB1ZCk7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCWRiZ19zdHViX3R4KCJzaWduYWwgY2F0Y2hlZFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh1c2JpcF9ldmVudF9oYXBwZW5kKHVkKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIHNlbmRfcmV0X3N1Ym1pdCBjb21lcyBlYXJsaWVyIHRoYW4gc2VuZF9yZXRfdW5saW5rLiAgc3R1Yl9yeAorCQkgKiBsb29rcyBhdCBvbmx5IHByaXZfaW5pdCBxdWV1ZS4gSWYgdGhlIGNvbXBsZXRpb24gb2YgYSBVUkIgaXMKKwkJICogZWFybGllciB0aGFuIHRoZSByZWNlaXZlIG9mIENNRF9VTkxJTkssIHByaXYgaXMgbW92ZWQgdG8KKwkJICogcHJpdl90eCBxdWV1ZSBhbmQgc3R1Yl9yeCBkb2VzIG5vdCBmaW5kIHRoZSB0YXJnZXQgcHJpdi4gSW4KKwkJICogdGhpcyBjYXNlLCB2aGNpX3J4IHJlY2VpdmVzIHRoZSByZXN1bHQgb2YgdGhlIHN1Ym1pdCByZXF1ZXN0CisJCSAqIGFuZCB0aGVuIHJlY2VpdmVzIHRoZSByZXN1bHQgb2YgdGhlIHVubGluayByZXF1ZXN0LiBUaGUKKwkJICogcmVzdWx0IG9mIHRoZSBzdWJtaXQgaXMgZ2l2ZW4gYmFjayB0byB0aGUgdXNiY29yZSBhcyB0aGUKKwkJICogY29tcGxldGlvbiBvZiB0aGUgdW5saW5rIHJlcXVlc3QuIFRoZSByZXF1ZXN0IG9mIHRoZQorCQkgKiB1bmxpbmsgaXMgaWdub3JlZC4gVGhpcyBpcyBvayBiZWNhdXNlIGEgZHJpdmVyIHdobyBjYWxscworCQkgKiB1c2JfdW5saW5rX3VyYigpIHVuZGVyc3RhbmRzIHRoZSB1bmxpbmsgd2FzIHRvbyBsYXRlIGJ5CisJCSAqIGdldHRpbmcgdGhlIHN0YXR1cyBvZiB0aGUgZ2l2ZW4tYmFja2VkIFVSQiB3aGljaCBoYXMgdGhlCisJCSAqIHN0YXR1cyBvZiB1c2Jfc3VibWl0X3VyYigpLgorCQkgKi8KKwkJaWYgKHN0dWJfc2VuZF9yZXRfc3VibWl0KHNkZXYpIDwgMCkKKwkJCWJyZWFrOworCisJCWlmIChzdHViX3NlbmRfcmV0X3VubGluayhzZGV2KSA8IDApCisJCQlicmVhazsKKworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc2Rldi0+dHhfd2FpdHEsCisJCQkJKCFsaXN0X2VtcHR5KCZzZGV2LT5wcml2X3R4KSB8fAorCQkJCSAhbGlzdF9lbXB0eSgmc2Rldi0+dW5saW5rX3R4KSkpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjQ5MThmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5jCkBAIC0wLDAgKzEsOTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCisKKy8qIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVGFrYWhpcm8gSGlyb2Z1Y2hpIDxoaXJvZnVjaGkgX2F0XyB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IgorI2RlZmluZSBEUklWRVJfREVTQyAidXNiaXAgY29tbW9uIGRyaXZlciIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIGRlYnVnIHJvdXRpbmVzICovCisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCit1bnNpZ25lZCBsb25nIHVzYmlwX2RlYnVnX2ZsYWcgPSAweGZmZmZmZmZmOworI2Vsc2UKK3Vuc2lnbmVkIGxvbmcgdXNiaXBfZGVidWdfZmxhZzsKKyNlbmRpZgorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfZGVidWdfZmxhZyk7CisKKworLyogRklYTUUgKi8KK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX3VzYmlwX2RlYnVnOworRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2F0dHJfdXNiaXBfZGVidWcpOworCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmxhZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJCQljaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx4XG4iLCB1c2JpcF9kZWJ1Z19mbGFnKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfZmxhZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisKKwlzc2NhbmYoYnVmLCAiJWx4IiwgJmZsYWcpOworCXVzYmlwX2RlYnVnX2ZsYWcgPSBmbGFnOworCisJcmV0dXJuIGNvdW50OworfQorREVWSUNFX0FUVFIodXNiaXBfZGVidWcsIChTX0lSVUdPIHwgU19JV1VTUiksIHNob3dfZmxhZywgc3RvcmVfZmxhZyk7CisKK3N0YXRpYyB2b2lkIHVzYmlwX2R1bXBfYnVmZmVyKGNoYXIgKmJ1ZmYsIGludCBidWZmbGVuKQoreworCWludCBpOworCisJaWYgKGJ1ZmZsZW4gPiAxMjgpIHsKKwkJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CisJCQlpZiAoaSUyNCA9PSAwKQorCQkJCXByaW50aygiICAgIik7CisJCQlwcmludGsoIiUwMnggIiwgKHVuc2lnbmVkIGNoYXIpIGJ1ZmZbaV0pOworCQkJaWYgKGklNCA9PSAzKQorCQkJCXByaW50aygifCAiKTsKKwkJCWlmIChpJTI0ID09IDIzKQorCQkJCXByaW50aygiXG4iKTsKKwkJfQorCQlwcmludGsoIi4uLiAoJWQgYnl0ZSlcbiIsIGJ1ZmZsZW4pOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IGJ1ZmZsZW47IGkrKykgeworCQlpZiAoaSUyNCA9PSAwKQorCQkJcHJpbnRrKCIgICAiKTsKKwkJcHJpbnRrKCIlMDJ4ICIsICh1bnNpZ25lZCBjaGFyKSBidWZmW2ldKTsKKwkJaWYgKGklNCA9PSAzKQorCQkJcHJpbnRrKCJ8ICIpOworCQlpZiAoaSUyNCA9PSAyMykKKwkJCXByaW50aygiXG4iKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCit9CisKK3N0YXRpYyB2b2lkIHVzYmlwX2R1bXBfcGlwZSh1bnNpZ25lZCBpbnQgcCkKK3sKKwl1bnNpZ25lZCBjaGFyIHR5cGUgPSB1c2JfcGlwZXR5cGUocCk7CisJdW5zaWduZWQgY2hhciBlcCA9IHVzYl9waXBlZW5kcG9pbnQocCk7CisJdW5zaWduZWQgY2hhciBkZXYgPSB1c2JfcGlwZWRldmljZShwKTsKKwl1bnNpZ25lZCBjaGFyIGRpciA9IHVzYl9waXBlaW4ocCk7CisKKwlwcmludGsoImRldiglZCkgIiwgZGV2KTsKKwlwcmludGsoImVwKCVkKSAiLCAgZXApOworCXByaW50aygiJXMgIiwgZGlyID8gIklOIiA6ICJPVVQiKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwkJcHJpbnRrKCIlcyAiLCAiSVNPIik7CisJCWJyZWFrOworCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCXByaW50aygiJXMgIiwgIklOVCIpOworCQlicmVhazsKKwljYXNlIFBJUEVfQ09OVFJPTDoKKwkJcHJpbnRrKCIlcyAiLCAiQ1RMIik7CisJCWJyZWFrOworCWNhc2UgUElQRV9CVUxLOgorCQlwcmludGsoIiVzICIsICJCTEsiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJFUlIiKTsKKwl9CisKKwlwcmludGsoIlxuIik7CisKK30KKworc3RhdGljIHZvaWQgdXNiaXBfZHVtcF91c2JfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1ZGV2LT5kZXY7CisJaW50IGk7CisKKwlkZXZfZGJnKGRldiwgIiAgICAgICBkZXZudW0oJWQpIGRldnBhdGgoJXMpIiwKKwkJdWRldi0+ZGV2bnVtLCB1ZGV2LT5kZXZwYXRoKTsKKworCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQlwcmludGsoIiBTUERfSElHSCIpOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQlwcmludGsoIiBTUERfRlVMTCIpOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9MT1c6CisJCXByaW50aygiIFNQRF9MT1ciKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfVU5LTk9XTjoKKwkJcHJpbnRrKCIgU1BEX1VOS05PV04iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCIgU1BEX0VSUk9SIik7CisJfQorCisJcHJpbnRrKCIgdHQgJXAsIHR0cG9ydCAlZCIsIHVkZXYtPnR0LCB1ZGV2LT50dHBvcnQpOworCXByaW50aygiXG4iKTsKKworCWRldl9kYmcoZGV2LCAiICAgICAgICAgICAgICAgICAgICAiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJcHJpbnRrKCIgJTJ1IiwgaSk7CisJcHJpbnRrKCJcbiIpOworCisJZGV2X2RiZyhkZXYsICIgICAgICAgdG9nZ2xlMChJTikgOiIpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQlwcmludGsoIiAlMnUiLCAodWRldi0+dG9nZ2xlWzBdICYgKDEgPDwgaSkpID8gMSA6IDApOworCXByaW50aygiXG4iKTsKKworCWRldl9kYmcoZGV2LCAiICAgICAgIHRvZ2dsZTEoT1VUKToiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJcHJpbnRrKCIgJTJ1IiwgKHVkZXYtPnRvZ2dsZVsxXSAmICgxIDw8IGkpKSA/IDEgOiAwKTsKKwlwcmludGsoIlxuIik7CisKKworCWRldl9kYmcoZGV2LCAiICAgICAgIGVwbWF4cF9pbiAgIDoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlpZiAodWRldi0+ZXBfaW5baV0pCisJCQlwcmludGsoIiAlMnUiLAorCQkJICAgICBsZTE2X3RvX2NwdSh1ZGV2LT5lcF9pbltpXS0+ZGVzYy53TWF4UGFja2V0U2l6ZSkpOworCX0KKwlwcmludGsoIlxuIik7CisKKwlkZXZfZGJnKGRldiwgIiAgICAgICBlcG1heHBfb3V0ICA6Iik7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJaWYgKHVkZXYtPmVwX291dFtpXSkKKwkJCXByaW50aygiICUydSIsCisJCQkgICAgIGxlMTZfdG9fY3B1KHVkZXYtPmVwX291dFtpXS0+ZGVzYy53TWF4UGFja2V0U2l6ZSkpOworCX0KKwlwcmludGsoIlxuIik7CisKKwlkZXZfZGJnKGRldiwgInBhcmVudCAlcCwgYnVzICVwXG4iLCB1ZGV2LT5wYXJlbnQsIHVkZXYtPmJ1cyk7CisKKwlkZXZfZGJnKGRldiwgImRlc2NyaXB0b3IgJXAsIGNvbmZpZyAlcCwgYWN0Y29uZmlnICVwLCAiCisJCSJyYXdkZXNjcmlwdG9ycyAlcFxuIiwgJnVkZXYtPmRlc2NyaXB0b3IsIHVkZXYtPmNvbmZpZywKKwkJdWRldi0+YWN0Y29uZmlnLCB1ZGV2LT5yYXdkZXNjcmlwdG9ycyk7CisKKwlkZXZfZGJnKGRldiwgImhhdmVfbGFuZ2lkICVkLCBzdHJpbmdfbGFuZ2lkICVkXG4iLAorCQl1ZGV2LT5oYXZlX2xhbmdpZCwgdWRldi0+c3RyaW5nX2xhbmdpZCk7CisKKwlkZXZfZGJnKGRldiwgIm1heGNoaWxkICVkLCBjaGlsZHJlbiAlcFxuIiwKKwkJdWRldi0+bWF4Y2hpbGQsIHVkZXYtPmNoaWxkcmVuKTsKK30KKworc3RhdGljIHZvaWQgdXNiaXBfZHVtcF9yZXF1ZXN0X3R5cGUoX191OCBydCkKK3sKKwlzd2l0Y2ggKHJ0ICYgVVNCX1JFQ0lQX01BU0spIHsKKwljYXNlIFVTQl9SRUNJUF9ERVZJQ0U6CisJCXByaW50aygiREVWSUNFIik7CisJCWJyZWFrOworCWNhc2UgVVNCX1JFQ0lQX0lOVEVSRkFDRToKKwkJcHJpbnRrKCJJTlRFUkYiKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUkVDSVBfRU5EUE9JTlQ6CisJCXByaW50aygiRU5EUE9JIik7CisJCWJyZWFrOworCWNhc2UgVVNCX1JFQ0lQX09USEVSOgorCQlwcmludGsoIk9USEVSICIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIi0tLS0tLSIpOworCX0KK30KKworc3RhdGljIHZvaWQgdXNiaXBfZHVtcF91c2JfY3RybHJlcXVlc3Qoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY21kKQoreworCWlmICghY21kKSB7CisJCXByaW50aygiICAgICAgJXMgOiBudWxsIHBvaW50ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGsoIiAgICAgICAiKTsKKwlwcmludGsoImJSZXF1ZXN0VHlwZSglMDJYKSAiLCBjbWQtPmJSZXF1ZXN0VHlwZSk7CisJcHJpbnRrKCJiUmVxdWVzdCglMDJYKSAiICwgY21kLT5iUmVxdWVzdCk7CisJcHJpbnRrKCJ3VmFsdWUoJTA0WCkgIiwgY21kLT53VmFsdWUpOworCXByaW50aygid0luZGV4KCUwNFgpICIsIGNtZC0+d0luZGV4KTsKKwlwcmludGsoIndMZW5ndGgoJTA0WCkgIiwgY21kLT53TGVuZ3RoKTsKKworCXByaW50aygiXG4gICAgICAgIik7CisKKwlpZiAoKGNtZC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX1RZUEVfU1RBTkRBUkQpIHsKKwkJcHJpbnRrKCJTVEFOREFSRCAiKTsKKwkJc3dpdGNoIChjbWQtPmJSZXF1ZXN0KSB7CisJCWNhc2UgVVNCX1JFUV9HRVRfU1RBVFVTOgorCQkJcHJpbnRrKCJHRVRfU1RBVFVTIik7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6CisJCQlwcmludGsoIkNMRUFSX0ZFQVQiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJCQlwcmludGsoIlNFVF9GRUFUICAiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCQlwcmludGsoIlNFVF9BRERSUlMiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisJCQlwcmludGsoIkdFVF9ERVNDUkkiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfU0VUX0RFU0NSSVBUT1I6CisJCQlwcmludGsoIlNFVF9ERVNDUkkiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT046CisJCQlwcmludGsoIkdFVF9DT05GSUciKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CisJCQlwcmludGsoIlNFVF9DT05GSUciKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfR0VUX0lOVEVSRkFDRToKKwkJCXByaW50aygiR0VUX0lOVEVSRiIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9TRVRfSU5URVJGQUNFOgorCQkJcHJpbnRrKCJTRVRfSU5URVJGIik7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUkVRX1NZTkNIX0ZSQU1FOgorCQkJcHJpbnRrKCJTWU5DX0ZSQU1FIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiUkVRKCUwMlgpICIsIGNtZC0+YlJlcXVlc3QpOworCQl9CisKKwkJcHJpbnRrKCIgIik7CisJCXVzYmlwX2R1bXBfcmVxdWVzdF90eXBlKGNtZC0+YlJlcXVlc3RUeXBlKTsKKworCX0gZWxzZSBpZiAoKGNtZC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX1RZUEVfQ0xBU1MpCisJCXByaW50aygiQ0xBU1MgICAiKTsKKworCWVsc2UgaWYgKChjbWQtPmJSZXF1ZXN0VHlwZSAmIFVTQl9UWVBFX01BU0spID09IFVTQl9UWVBFX1ZFTkRPUikKKwkJcHJpbnRrKCJWRU5ET1IgICIpOworCisJZWxzZSBpZiAoKGNtZC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX1RZUEVfUkVTRVJWRUQpCisJCXByaW50aygiUkVTRVJWRUQiKTsKKworCXByaW50aygiXG4iKTsKK30KKwordm9pZCB1c2JpcF9kdW1wX3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJaWYgKCF1cmIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6JXM6IHVyYjogbnVsbCBwb2ludGVyISFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghdXJiLT5kZXYpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6JXM6IHVyYi0+ZGV2OiBudWxsIHBvaW50ZXIhIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCWRldiA9ICZ1cmItPmRldi0+ZGV2OworCisJZGV2X2RiZyhkZXYsICIgICB1cmIgICAgICAgICAgICAgICAgICAgOiVwXG4iLCB1cmIpOworCWRldl9kYmcoZGV2LCAiICAgZGV2ICAgICAgICAgICAgICAgICAgIDolcFxuIiwgdXJiLT5kZXYpOworCisJdXNiaXBfZHVtcF91c2JfZGV2aWNlKHVyYi0+ZGV2KTsKKworCWRldl9kYmcoZGV2LCAiICAgcGlwZSAgICAgICAgICAgICAgICAgIDolMDh4ICIsIHVyYi0+cGlwZSk7CisKKwl1c2JpcF9kdW1wX3BpcGUodXJiLT5waXBlKTsKKworCWRldl9kYmcoZGV2LCAiICAgc3RhdHVzICAgICAgICAgICAgICAgIDolZFxuIiwgdXJiLT5zdGF0dXMpOworCWRldl9kYmcoZGV2LCAiICAgdHJhbnNmZXJfZmxhZ3MgICAgICAgIDolMDhYXG4iLCB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKKwlkZXZfZGJnKGRldiwgIiAgIHRyYW5zZmVyX2J1ZmZlciAgICAgICA6JXBcbiIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlkZXZfZGJnKGRldiwgIiAgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg6JWRcbiIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJZGV2X2RiZyhkZXYsICIgICBhY3R1YWxfbGVuZ3RoICAgICAgICAgOiVkXG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCWRldl9kYmcoZGV2LCAiICAgc2V0dXBfcGFja2V0ICAgICAgICAgIDolcFxuIiwgdXJiLT5zZXR1cF9wYWNrZXQpOworCisJaWYgKHVyYi0+c2V0dXBfcGFja2V0ICYmIHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCkKKwkJCXVzYmlwX2R1bXBfdXNiX2N0cmxyZXF1ZXN0KAorCQkJKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKil1cmItPnNldHVwX3BhY2tldCk7CisKKwlkZXZfZGJnKGRldiwgIiAgIHN0YXJ0X2ZyYW1lICAgICAgICAgICA6JWRcbiIsIHVyYi0+c3RhcnRfZnJhbWUpOworCWRldl9kYmcoZGV2LCAiICAgbnVtYmVyX29mX3BhY2tldHMgICAgIDolZFxuIiwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7CisJZGV2X2RiZyhkZXYsICIgICBpbnRlcnZhbCAgICAgICAgICAgICAgOiVkXG4iLCB1cmItPmludGVydmFsKTsKKwlkZXZfZGJnKGRldiwgIiAgIGVycm9yX2NvdW50ICAgICAgICAgICA6JWRcbiIsIHVyYi0+ZXJyb3JfY291bnQpOworCWRldl9kYmcoZGV2LCAiICAgY29udGV4dCAgICAgICAgICAgICAgIDolcFxuIiwgdXJiLT5jb250ZXh0KTsKKwlkZXZfZGJnKGRldiwgIiAgIGNvbXBsZXRlICAgICAgICAgICAgICA6JXBcbiIsIHVyYi0+Y29tcGxldGUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfZHVtcF91cmIpOworCit2b2lkIHVzYmlwX2R1bXBfaGVhZGVyKHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKK3sKKwl1ZGJnKCJCQVNFOiBjbWQgJXUgc2VxICV1IGRldmlkICV1IGRpciAldSBlcCAldVxuIiwKKwkJCXBkdS0+YmFzZS5jb21tYW5kLAorCQkJcGR1LT5iYXNlLnNlcW51bSwKKwkJCXBkdS0+YmFzZS5kZXZpZCwKKwkJCXBkdS0+YmFzZS5kaXJlY3Rpb24sCisJCQlwZHUtPmJhc2UuZXApOworCisJc3dpdGNoIChwZHUtPmJhc2UuY29tbWFuZCkgeworCWNhc2UgVVNCSVBfQ01EX1NVQk1JVDoKKwkJdWRiZygiQ01EX1NVQk1JVDogeF9mbGFncyAldSB4X2xlbiAldSBzZiAldSAjcCAldSBpdiAldVxuIiwKKwkJCQlwZHUtPnUuY21kX3N1Ym1pdC50cmFuc2Zlcl9mbGFncywKKwkJCQlwZHUtPnUuY21kX3N1Ym1pdC50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCXBkdS0+dS5jbWRfc3VibWl0LnN0YXJ0X2ZyYW1lLAorCQkJCXBkdS0+dS5jbWRfc3VibWl0Lm51bWJlcl9vZl9wYWNrZXRzLAorCQkJCXBkdS0+dS5jbWRfc3VibWl0LmludGVydmFsKTsKKwkJCQlicmVhazsKKwljYXNlIFVTQklQX0NNRF9VTkxJTks6CisJCXVkYmcoIkNNRF9VTkxJTks6IHNlcSAldVxuIiwgcGR1LT51LmNtZF91bmxpbmsuc2VxbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JJUF9SRVRfU1VCTUlUOgorCQl1ZGJnKCJSRVRfU1VCTUlUOiBzdCAlZCBhbCAldSBzZiAlZCBlYyAlZFxuIiwKKwkJCQlwZHUtPnUucmV0X3N1Ym1pdC5zdGF0dXMsCisJCQkJcGR1LT51LnJldF9zdWJtaXQuYWN0dWFsX2xlbmd0aCwKKwkJCQlwZHUtPnUucmV0X3N1Ym1pdC5zdGFydF9mcmFtZSwKKwkJCQlwZHUtPnUucmV0X3N1Ym1pdC5lcnJvcl9jb3VudCk7CisJY2FzZSBVU0JJUF9SRVRfVU5MSU5LOgorCQl1ZGJnKCJSRVRfVU5MSU5LOiBzdGF0dXMgJWRcbiIsIHBkdS0+dS5yZXRfdW5saW5rLnN0YXR1cyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE5PVCBSRUFDSEVEICovCisJCXVkYmcoIlVOS05PV05cbiIpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX2R1bXBfaGVhZGVyKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogdGhyZWFkIHJvdXRpbmVzICovCisKK2ludCB1c2JpcF90aHJlYWQodm9pZCAqcGFyYW0pCit7CisJc3RydWN0IHVzYmlwX3Rhc2sgKnV0ID0gcGFyYW07CisKKwlpZiAoIXV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2tfa2VybmVsKCk7CisJZGFlbW9uaXplKHV0LT5uYW1lKTsKKwlhbGxvd19zaWduYWwoU0lHS0lMTCk7CisJdXQtPnRocmVhZCA9IGN1cnJlbnQ7CisJdW5sb2NrX2tlcm5lbCgpOworCisJLyogc3J2LnJiIG11c3Qgd2FpdCBmb3IgcnhfdGhyZWFkIHN0YXJ0aW5nICovCisJY29tcGxldGUoJnV0LT50aHJlYWRfZG9uZSk7CisKKwkvKiBzdGFydCBvZiB3aGlsZSBsb29wICovCisJdXQtPmxvb3Bfb3BzKHV0KTsKKworCS8qIGVuZCBvZiBsb29wICovCisJdXQtPnRocmVhZCA9IE5VTEw7CisKKwljb21wbGV0ZV9hbmRfZXhpdCgmdXQtPnRocmVhZF9kb25lLCAwKTsKK30KKwordm9pZCB1c2JpcF9zdGFydF90aHJlYWRzKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCS8qCisJICogdGhyZWFkcyBhcmUgaW52b2tlZCBwZXIgb25lIGRldmljZSAocGVyIG9uZSBjb25uZWN0aW9uKS4KKwkgKi8KKwlrZXJuZWxfdGhyZWFkKHVzYmlwX3RocmVhZCwgKHZvaWQgKikmdWQtPnRjcF9yeCwgMCk7CisJa2VybmVsX3RocmVhZCh1c2JpcF90aHJlYWQsICh2b2lkICopJnVkLT50Y3BfdHgsIDApOworCisJLyogY29uZmlybSB0aHJlYWRzIGFyZSBzdGFydGluZyAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnVkLT50Y3BfcngudGhyZWFkX2RvbmUpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnVkLT50Y3BfdHgudGhyZWFkX2RvbmUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfc3RhcnRfdGhyZWFkcyk7CisKK3ZvaWQgdXNiaXBfc3RvcF90aHJlYWRzKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCS8qIGtpbGwgdGhyZWFkcyByZWxhdGVkIHRvIHRoaXMgc2RldiwgaWYgdi5jLiBleGlzdHMgKi8KKwlpZiAodWQtPnRjcF9yeC50aHJlYWQgIT0gTlVMTCkgeworCQlzZW5kX3NpZyhTSUdLSUxMLCB1ZC0+dGNwX3J4LnRocmVhZCwgMSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnVkLT50Y3BfcngudGhyZWFkX2RvbmUpOworCQl1ZGJnKCJyeF90aHJlYWQgZm9yIHVkICVwIGhhcyBmaW5pc2hlZFxuIiwgdWQpOworCX0KKworCWlmICh1ZC0+dGNwX3R4LnRocmVhZCAhPSBOVUxMKSB7CisJCXNlbmRfc2lnKFNJR0tJTEwsIHVkLT50Y3BfdHgudGhyZWFkLCAxKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmdWQtPnRjcF90eC50aHJlYWRfZG9uZSk7CisJCXVkYmcoInR4X3RocmVhZCBmb3IgdWQgJXAgaGFzIGZpbmlzaGVkXG4iLCB1ZCk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfc3RvcF90aHJlYWRzKTsKKwordm9pZCB1c2JpcF90YXNrX2luaXQoc3RydWN0IHVzYmlwX3Rhc2sgKnV0LCBjaGFyICpuYW1lLAorCQl2b2lkICgqbG9vcF9vcHMpKHN0cnVjdCB1c2JpcF90YXNrICopKQoreworCXV0LT50aHJlYWQgPSBOVUxMOworCWluaXRfY29tcGxldGlvbigmdXQtPnRocmVhZF9kb25lKTsKKwl1dC0+bmFtZSA9IG5hbWU7CisJdXQtPmxvb3Bfb3BzID0gbG9vcF9vcHM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF90YXNrX2luaXQpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBzb2NrZXQgcm91dGluZXMgKi8KKworIC8qICBTZW5kL3JlY2VpdmUgbWVzc2FnZXMgb3ZlciBUQ1AvSVAuIEkgcmVmZXIgZHJpdmVycy9ibG9jay9uYmQuYyAqLworaW50IHVzYmlwX3htaXQoaW50IHNlbmQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNoYXIgKmJ1ZiwKKwkgICAgICAgaW50IHNpemUsIGludCBtc2dfZmxhZ3MpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3Qga3ZlYyBpb3Y7CisJaW50IHRvdGFsID0gMDsKKworCS8qIGZvciBibG9ja3Mgb2YgaWYgKGRiZ19mbGFnX3htaXQpICovCisJY2hhciAqYnAgPSBidWY7CisJaW50IG9zaXplID0gc2l6ZTsKKworCWRiZ194bWl0KCJlbnRlclxuIik7CisKKwlpZiAoIXNvY2sgfHwgIWJ1ZiB8fCAhc2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIGFyZywgc29jayAlcCBidWZmICVwIHNpemUgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc29jaywgYnVmLCBzaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisKKwlpZiAoZGJnX2ZsYWdfeG1pdCkgeworCQlpZiAoc2VuZCkgeworCQkJaWYgKCFpbl9pbnRlcnJ1cHQoKSkKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJS0xMHM6IiwgY3VycmVudC0+Y29tbSk7CisJCQllbHNlCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgImludGVydXB0ICA6Iik7CisKKwkJCXByaW50aygiJXM6IHNlbmRpbmcuLi4gLCBzb2NrICVwLCBidWYgJXAsICIKKwkJCSAgICAgICAic2l6ZSAlZCwgbXNnX2ZsYWdzICVkXG4iLCBfX2Z1bmNfXywKKwkJCSAgICAgICBzb2NrLCBidWYsIHNpemUsIG1zZ19mbGFncyk7CisJCQl1c2JpcF9kdW1wX2J1ZmZlcihidWYsIHNpemUpOworCQl9CisJfQorCisKKwlkbyB7CisJCXNvY2stPnNrLT5za19hbGxvY2F0aW9uID0gR0ZQX05PSU87CisJCWlvdi5pb3ZfYmFzZSAgICA9IGJ1ZjsKKwkJaW92Lmlvdl9sZW4gICAgID0gc2l6ZTsKKwkJbXNnLm1zZ19uYW1lICAgID0gTlVMTDsKKwkJbXNnLm1zZ19uYW1lbGVuID0gMDsKKwkJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKwkJbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKwkJbXNnLm1zZ19uYW1lbGVuICAgID0gMDsKKwkJbXNnLm1zZ19mbGFncyAgICAgID0gbXNnX2ZsYWdzIHwgTVNHX05PU0lHTkFMOworCisJCWlmIChzZW5kKQorCQkJcmVzdWx0ID0ga2VybmVsX3NlbmRtc2coc29jaywgJm1zZywgJmlvdiwgMSwgc2l6ZSk7CisJCWVsc2UKKwkJCXJlc3VsdCA9IGtlcm5lbF9yZWN2bXNnKHNvY2ssICZtc2csICZpb3YsIDEsIHNpemUsCisJCQkJCQkJCU1TR19XQUlUQUxMKTsKKworCQlpZiAocmVzdWx0IDw9IDApIHsKKwkJCXVkYmcoInVzYmlwX3htaXQ6ICVzIHNvY2sgJXAgYnVmICVwIHNpemUgJXUgcmV0ICVkIgorCQkJCQkiIHRvdGFsICVkXG4iLAorCQkJCQlzZW5kID8gInNlbmQiIDogInJlY2VpdmUiLCBzb2NrLCBidWYsCisJCQkJCXNpemUsIHJlc3VsdCwgdG90YWwpOworCQkJZ290byBlcnI7CisJCX0KKworCQlzaXplIC09IHJlc3VsdDsKKwkJYnVmICs9IHJlc3VsdDsKKwkJdG90YWwgKz0gcmVzdWx0OworCisJfSB3aGlsZSAoc2l6ZSA+IDApOworCisKKwlpZiAoZGJnX2ZsYWdfeG1pdCkgeworCQlpZiAoIXNlbmQpIHsKKwkJCWlmICghaW5faW50ZXJydXB0KCkpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiUtMTBzOiIsIGN1cnJlbnQtPmNvbW0pOworCQkJZWxzZQorCQkJCXByaW50ayhLRVJOX0RFQlVHICJpbnRlcnVwdCAgOiIpOworCisJCQlwcmludGsoInVzYmlwX3htaXQ6IHJlY2VpdmluZy4uLi5cbiIpOworCQkJdXNiaXBfZHVtcF9idWZmZXIoYnAsIG9zaXplKTsKKwkJCXByaW50aygidXNiaXBfeG1pdDogcmVjZWl2ZWQsIG9zaXplICVkIHJldCAlZCBzaXplICVkICIKKwkJCQkJInRvdGFsICVkXG4iLCBvc2l6ZSwgcmVzdWx0LCBzaXplLAorCQkJCQl0b3RhbCk7CisJCX0KKworCQlpZiAoc2VuZCkKKwkJCXByaW50aygidXNiaXBfeG1pdDogc2VuZCwgdG90YWwgJWRcbiIsIHRvdGFsKTsKKwl9CisKKwlyZXR1cm4gdG90YWw7CisKK2VycjoKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfeG1pdCk7CisKKworLyogbm93IGEgdXNybGFuZCB1dGlsaXR5IHNob3VsZCBzZXQgb3B0aW9ucy4gKi8KKyNpZiAwCitpbnQgc2V0cXVpY2thY2soc3RydWN0IHNvY2tldCAqc29ja2V0KQoreworCW1tX3NlZ21lbnRfdCBvbGRmczsKKwlpbnQgdmFsID0gMTsKKwlpbnQgcmV0OworCisJb2xkZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoZ2V0X2RzKCkpOworCXJldCA9IHNvY2tldC0+b3BzLT5zZXRzb2Nrb3B0KHNvY2tldCwgU09MX1RDUCwgVENQX1FVSUNLQUNLLAorCQkJKGNoYXIgX191c2VyICopICZ2YWwsIHNpemVvZihyZXQpKTsKKwlzZXRfZnMob2xkZnMpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHNldG5vZGVsYXkoc3RydWN0IHNvY2tldCAqc29ja2V0KQoreworCW1tX3NlZ21lbnRfdCBvbGRmczsKKwlpbnQgdmFsID0gMTsKKwlpbnQgcmV0OworCisJb2xkZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoZ2V0X2RzKCkpOworCXJldCA9IHNvY2tldC0+b3BzLT5zZXRzb2Nrb3B0KHNvY2tldCwgU09MX1RDUCwgVENQX05PREVMQVksCisJCQkoY2hhciBfX3VzZXIgKikgJnZhbCwgc2l6ZW9mKHJldCkpOworCXNldF9mcyhvbGRmcyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc2V0a2VlcGFsaXZlKHN0cnVjdCBzb2NrZXQgKnNvY2tldCkKK3sKKwltbV9zZWdtZW50X3Qgb2xkZnM7CisJaW50IHZhbCA9IDE7CisJaW50IHJldDsKKworCW9sZGZzID0gZ2V0X2ZzKCk7CisJc2V0X2ZzKGdldF9kcygpKTsKKwlyZXQgPSBzb2NrZXQtPm9wcy0+c2V0c29ja29wdChzb2NrZXQsIFNPTF9TT0NLRVQsIFNPX0tFRVBBTElWRSwKKwkJCShjaGFyIF9fdXNlciAqKSAmdmFsLCBzaXplb2YocmV0KSk7CisJc2V0X2ZzKG9sZGZzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgc2V0cmV1c2Uoc3RydWN0IHNvY2tldCAqc29ja2V0KQoreworCXNvY2tldC0+c2stPnNrX3JldXNlID0gMTsKK30KKyNlbmRpZgorCitzdHJ1Y3Qgc29ja2V0ICpzb2NrZmRfdG9fc29ja2V0KHVuc2lnbmVkIGludCBzb2NrZmQpCit7CisJc3RydWN0IHNvY2tldCAqc29ja2V0OworCXN0cnVjdCBmaWxlICpmaWxlOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlmaWxlID0gZmdldChzb2NrZmQpOworCWlmICghZmlsZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHNvY2tmZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCisJaWYgKCFpbm9kZSB8fCAhU19JU1NPQ0soaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybiBOVUxMOworCisJc29ja2V0ID0gU09DS0VUX0koaW5vZGUpOworCisJcmV0dXJuIHNvY2tldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNvY2tmZF90b19zb2NrZXQpOworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHBkdSByb3V0aW5lcyAqLworCisvKiB0aGVyZSBtYXkgYmUgbW9yZSBjYXNlcyB0byB0d2VhayB0aGUgZmxhZ3MuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHR3ZWFrX3RyYW5zZmVyX2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncykKK3sKKworCWlmIChmbGFncyAmIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQKQorCQkvKgorCQkgKiB2aGNpX2hjZCBkb2VzIG5vdCBwcm92aWRlIERNQS1tYXBwZWQgSS9PLiBUaGUgdXBwZXIKKwkJICogZHJpdmVyIGRvZXMgbm90IG5lZWQgdG8gc2V0IHRoaXMgZmxhZy4gVGhlIHJlbW90ZQorCQkgKiB1c2JpcC5rbyBkb2VzIG5vdCBzdGlsbCBwZXJmb3JtIERNQS1tYXBwZWQgSS9PIGZvcgorCQkgKiBETUEtY2FwbGFibGUgaG9zdCBjb250cm9sbGVycy4gU28sIGNsZWFyIHRoaXMgZmxhZy4KKwkJICovCisJCWZsYWdzICY9IH5VUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCWlmIChmbGFncyAmIFVSQl9OT19TRVRVUF9ETUFfTUFQKQorCQlmbGFncyAmPSB+VVJCX05PX1NFVFVQX0RNQV9NQVA7CisKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmlwX3BhY2tfY21kX3N1Ym1pdChzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUsIHN0cnVjdCB1cmIgKnVyYiwKKwkJCQkJCQkJaW50IHBhY2spCit7CisJc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfc3VibWl0ICpzcGR1ID0gJnBkdS0+dS5jbWRfc3VibWl0OworCisJLyoKKwkgKiBTb21lIG1lbWJlcnMgYXJlIG5vdCBzdGlsbCBpbXBsZW1lbnRlZCBpbiB1c2JpcC4gSSBob3BlIHRoaXMgaXNzdWUKKwkgKiB3aWxsIGJlIGRpc2N1c3NlZCB3aGVuIHVzYmlwIGlzIHBvcnRlZCB0byBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KKwkgKi8KKwlpZiAocGFjaykgeworCQkvKiB2aGNpX3R4LmMgKi8KKwkJc3BkdS0+dHJhbnNmZXJfZmxhZ3MgPQorCQkJCXR3ZWFrX3RyYW5zZmVyX2ZsYWdzKHVyYi0+dHJhbnNmZXJfZmxhZ3MpOworCQlzcGR1LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQlzcGR1LT5zdGFydF9mcmFtZQkJPSB1cmItPnN0YXJ0X2ZyYW1lOworCQlzcGR1LT5udW1iZXJfb2ZfcGFja2V0cwkJPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCQlzcGR1LT5pbnRlcnZhbAkJCT0gdXJiLT5pbnRlcnZhbDsKKwl9IGVsc2UgIHsKKwkJLyogc3R1Yl9yeC5jICovCisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgICAgICAgICA9IHNwZHUtPnRyYW5zZmVyX2ZsYWdzOworCisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNwZHUtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCXVyYi0+c3RhcnRfZnJhbWUgICAgICAgICAgICA9IHNwZHUtPnN0YXJ0X2ZyYW1lOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzICAgICAgPSBzcGR1LT5udW1iZXJfb2ZfcGFja2V0czsKKwkJdXJiLT5pbnRlcnZhbCAgICAgICAgICAgICAgID0gc3BkdS0+aW50ZXJ2YWw7CisJfQorfQorCitzdGF0aWMgdm9pZCB1c2JpcF9wYWNrX3JldF9zdWJtaXQoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1LCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkJCQkJCWludCBwYWNrKQoreworCXN0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3N1Ym1pdCAqcnBkdSA9ICZwZHUtPnUucmV0X3N1Ym1pdDsKKworCWlmIChwYWNrKSB7CisJCS8qIHN0dWJfdHguYyAqLworCisJCXJwZHUtPnN0YXR1cwkJPSB1cmItPnN0YXR1czsKKwkJcnBkdS0+YWN0dWFsX2xlbmd0aAk9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJcnBkdS0+c3RhcnRfZnJhbWUJPSB1cmItPnN0YXJ0X2ZyYW1lOworCQlycGR1LT5lcnJvcl9jb3VudAk9IHVyYi0+ZXJyb3JfY291bnQ7CisJfSBlbHNlIHsKKwkJLyogdmhjaV9yeC5jICovCisKKwkJdXJiLT5zdGF0dXMJCT0gcnBkdS0+c3RhdHVzOworCQl1cmItPmFjdHVhbF9sZW5ndGgJPSBycGR1LT5hY3R1YWxfbGVuZ3RoOworCQl1cmItPnN0YXJ0X2ZyYW1lCT0gcnBkdS0+c3RhcnRfZnJhbWU7CisJCXVyYi0+ZXJyb3JfY291bnQJPSBycGR1LT5lcnJvcl9jb3VudDsKKwl9Cit9CisKKwordm9pZCB1c2JpcF9wYWNrX3BkdShzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGNtZCwKKwkJCQkJCQkJaW50IHBhY2spCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFVTQklQX0NNRF9TVUJNSVQ6CisJCXVzYmlwX3BhY2tfY21kX3N1Ym1pdChwZHUsIHVyYiwgcGFjayk7CisJCWJyZWFrOworCWNhc2UgVVNCSVBfUkVUX1NVQk1JVDoKKwkJdXNiaXBfcGFja19yZXRfc3VibWl0KHBkdSwgdXJiLCBwYWNrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJ1bmtub3duIGNvbW1hbmQiKTsKKwkJLyogTk9UUkVBQ0hFRCAqLworCQkvKiBCVUcoKTsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9wYWNrX3BkdSk7CisKKworc3RhdGljIHZvaWQgY29ycmVjdF9lbmRpYW5fYmFzaWMoc3RydWN0IHVzYmlwX2hlYWRlcl9iYXNpYyAqYmFzZSwgaW50IHNlbmQpCit7CisJaWYgKHNlbmQpIHsKKwkJYmFzZS0+Y29tbWFuZAk9IGNwdV90b19iZTMyKGJhc2UtPmNvbW1hbmQpOworCQliYXNlLT5zZXFudW0JPSBjcHVfdG9fYmUzMihiYXNlLT5zZXFudW0pOworCQliYXNlLT5kZXZpZAk9IGNwdV90b19iZTMyKGJhc2UtPmRldmlkKTsKKwkJYmFzZS0+ZGlyZWN0aW9uCT0gY3B1X3RvX2JlMzIoYmFzZS0+ZGlyZWN0aW9uKTsKKwkJYmFzZS0+ZXAJPSBjcHVfdG9fYmUzMihiYXNlLT5lcCk7CisJfSBlbHNlIHsKKwkJYmFzZS0+Y29tbWFuZAk9IGJlMzJfdG9fY3B1KGJhc2UtPmNvbW1hbmQpOworCQliYXNlLT5zZXFudW0JPSBiZTMyX3RvX2NwdShiYXNlLT5zZXFudW0pOworCQliYXNlLT5kZXZpZAk9IGJlMzJfdG9fY3B1KGJhc2UtPmRldmlkKTsKKwkJYmFzZS0+ZGlyZWN0aW9uCT0gYmUzMl90b19jcHUoYmFzZS0+ZGlyZWN0aW9uKTsKKwkJYmFzZS0+ZXAJPSBiZTMyX3RvX2NwdShiYXNlLT5lcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjb3JyZWN0X2VuZGlhbl9jbWRfc3VibWl0KHN0cnVjdCB1c2JpcF9oZWFkZXJfY21kX3N1Ym1pdCAqcGR1LAorCQkJCQkJCQlpbnQgc2VuZCkKK3sKKwlpZiAoc2VuZCkgeworCQlwZHUtPnRyYW5zZmVyX2ZsYWdzID0gY3B1X3RvX2JlMzIocGR1LT50cmFuc2Zlcl9mbGFncyk7CisKKwkJY3B1X3RvX2JlMzJzKCZwZHUtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+c3RhcnRfZnJhbWUpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+bnVtYmVyX29mX3BhY2tldHMpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+aW50ZXJ2YWwpOworCX0gZWxzZSB7CisJCXBkdS0+dHJhbnNmZXJfZmxhZ3MgPSBiZTMyX3RvX2NwdShwZHUtPnRyYW5zZmVyX2ZsYWdzKTsKKworCQliZTMyX3RvX2NwdXMoJnBkdS0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5zdGFydF9mcmFtZSk7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5udW1iZXJfb2ZfcGFja2V0cyk7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5pbnRlcnZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjb3JyZWN0X2VuZGlhbl9yZXRfc3VibWl0KHN0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3N1Ym1pdCAqcGR1LAorCQkJCQkJCQlpbnQgc2VuZCkKK3sKKwlpZiAoc2VuZCkgeworCQljcHVfdG9fYmUzMnMoJnBkdS0+c3RhdHVzKTsKKwkJY3B1X3RvX2JlMzJzKCZwZHUtPmFjdHVhbF9sZW5ndGgpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+c3RhcnRfZnJhbWUpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+ZXJyb3JfY291bnQpOworCX0gZWxzZSB7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5zdGF0dXMpOworCQliZTMyX3RvX2NwdXMoJnBkdS0+YWN0dWFsX2xlbmd0aCk7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5zdGFydF9mcmFtZSk7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5lcnJvcl9jb3VudCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjb3JyZWN0X2VuZGlhbl9jbWRfdW5saW5rKHN0cnVjdCB1c2JpcF9oZWFkZXJfY21kX3VubGluayAqcGR1LAorCQkJCQkJCQlpbnQgc2VuZCkKK3sKKwlpZiAoc2VuZCkKKwkJcGR1LT5zZXFudW0gPSBjcHVfdG9fYmUzMihwZHUtPnNlcW51bSk7CisJZWxzZQorCQlwZHUtPnNlcW51bSA9IGJlMzJfdG9fY3B1KHBkdS0+c2VxbnVtKTsKK30KKworc3RhdGljIHZvaWQgY29ycmVjdF9lbmRpYW5fcmV0X3VubGluayhzdHJ1Y3QgdXNiaXBfaGVhZGVyX3JldF91bmxpbmsgKnBkdSwKKwkJCQkJCQkJaW50IHNlbmQpCit7CisJaWYgKHNlbmQpCisJCWNwdV90b19iZTMycygmcGR1LT5zdGF0dXMpOworCWVsc2UKKwkJYmUzMl90b19jcHVzKCZwZHUtPnN0YXR1cyk7Cit9CisKK3ZvaWQgdXNiaXBfaGVhZGVyX2NvcnJlY3RfZW5kaWFuKHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSwgaW50IHNlbmQpCit7CisJX191MzIgY21kID0gMDsKKworCWlmIChzZW5kKQorCQljbWQgPSBwZHUtPmJhc2UuY29tbWFuZDsKKworCWNvcnJlY3RfZW5kaWFuX2Jhc2ljKCZwZHUtPmJhc2UsIHNlbmQpOworCisJaWYgKCFzZW5kKQorCQljbWQgPSBwZHUtPmJhc2UuY29tbWFuZDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBVU0JJUF9DTURfU1VCTUlUOgorCQljb3JyZWN0X2VuZGlhbl9jbWRfc3VibWl0KCZwZHUtPnUuY21kX3N1Ym1pdCwgc2VuZCk7CisJCWJyZWFrOworCWNhc2UgVVNCSVBfUkVUX1NVQk1JVDoKKwkJY29ycmVjdF9lbmRpYW5fcmV0X3N1Ym1pdCgmcGR1LT51LnJldF9zdWJtaXQsIHNlbmQpOworCQlicmVhazsKKwljYXNlIFVTQklQX0NNRF9VTkxJTks6CisJCWNvcnJlY3RfZW5kaWFuX2NtZF91bmxpbmsoJnBkdS0+dS5jbWRfdW5saW5rLCBzZW5kKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JJUF9SRVRfVU5MSU5LOgorCQljb3JyZWN0X2VuZGlhbl9yZXRfdW5saW5rKCZwZHUtPnUucmV0X3VubGluaywgc2VuZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE5PVFJFQUNIRUQgKi8KKwkJZXJyKCJ1bmtub3duIGNvbW1hbmQgaW4gcGR1IGhlYWRlcjogJWQiLCBjbWQpOworCQkvKiBCVUcoKTsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4pOworCitzdGF0aWMgdm9pZCB1c2JpcF9pc29fcGFrY2V0X2NvcnJlY3RfZW5kaWFuKAorCQkJCXN0cnVjdCB1c2JpcF9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmlzbywKKwkJCQlpbnQgc2VuZCkKK3sKKwkvKiBkb2VzIG5vdCBuZWVkIGFsbCBtZW1iZXJzLiBidXQgY29weSBhbGwgc2ltcGx5LiAqLworCWlmIChzZW5kKSB7CisJCWlzby0+b2Zmc2V0CT0gY3B1X3RvX2JlMzIoaXNvLT5vZmZzZXQpOworCQlpc28tPmxlbmd0aAk9IGNwdV90b19iZTMyKGlzby0+bGVuZ3RoKTsKKwkJaXNvLT5zdGF0dXMJPSBjcHVfdG9fYmUzMihpc28tPnN0YXR1cyk7CisJCWlzby0+YWN0dWFsX2xlbmd0aCA9IGNwdV90b19iZTMyKGlzby0+YWN0dWFsX2xlbmd0aCk7CisJfSBlbHNlIHsKKwkJaXNvLT5vZmZzZXQJPSBiZTMyX3RvX2NwdShpc28tPm9mZnNldCk7CisJCWlzby0+bGVuZ3RoCT0gYmUzMl90b19jcHUoaXNvLT5sZW5ndGgpOworCQlpc28tPnN0YXR1cwk9IGJlMzJfdG9fY3B1KGlzby0+c3RhdHVzKTsKKwkJaXNvLT5hY3R1YWxfbGVuZ3RoID0gYmUzMl90b19jcHUoaXNvLT5hY3R1YWxfbGVuZ3RoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVzYmlwX3BhY2tfaXNvKHN0cnVjdCB1c2JpcF9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmlzbywKKwkJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKnVpc28sIGludCBwYWNrKQoreworCWlmIChwYWNrKSB7CisJCWlzby0+b2Zmc2V0CQk9IHVpc28tPm9mZnNldDsKKwkJaXNvLT5sZW5ndGgJCT0gdWlzby0+bGVuZ3RoOworCQlpc28tPnN0YXR1cwkJPSB1aXNvLT5zdGF0dXM7CisJCWlzby0+YWN0dWFsX2xlbmd0aAk9IHVpc28tPmFjdHVhbF9sZW5ndGg7CisJfSBlbHNlIHsKKwkJdWlzby0+b2Zmc2V0CQk9IGlzby0+b2Zmc2V0OworCQl1aXNvLT5sZW5ndGgJCT0gaXNvLT5sZW5ndGg7CisJCXVpc28tPnN0YXR1cwkJPSBpc28tPnN0YXR1czsKKwkJdWlzby0+YWN0dWFsX2xlbmd0aAk9IGlzby0+YWN0dWFsX2xlbmd0aDsKKwl9Cit9CisKKworLyogbXVzdCBmcmVlIGJ1ZmZlciAqLwordm9pZCAqdXNiaXBfYWxsb2NfaXNvX2Rlc2NfcGR1KHN0cnVjdCB1cmIgKnVyYiwgc3NpemVfdCAqYnVmZmxlbikKK3sKKwl2b2lkICpidWZmOworCXN0cnVjdCB1c2JpcF9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmlzbzsKKwlpbnQgbnAgPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCXNzaXplX3Qgc2l6ZSA9IG5wICogc2l6ZW9mKCppc28pOworCWludCBpOworCisJYnVmZiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBucDsgaSsrKSB7CisJCWlzbyA9IGJ1ZmYgKyAoaSAqIHNpemVvZigqaXNvKSk7CisKKwkJdXNiaXBfcGFja19pc28oaXNvLCAmdXJiLT5pc29fZnJhbWVfZGVzY1tpXSwgMSk7CisJCXVzYmlwX2lzb19wYWtjZXRfY29ycmVjdF9lbmRpYW4oaXNvLCAxKTsKKwl9CisKKwkqYnVmZmxlbiA9IHNpemU7CisKKwlyZXR1cm4gYnVmZjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX2FsbG9jX2lzb19kZXNjX3BkdSk7CisKKy8qIHNvbWUgbWVtYmVycyBvZiB1cmIgbXVzdCBiZSBzdWJzdGl0dXRlZCBiZWZvcmUuICovCitpbnQgdXNiaXBfcmVjdl9pc28oc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl2b2lkICpidWZmOworCXN0cnVjdCB1c2JpcF9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmlzbzsKKwlpbnQgbnAgPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCWludCBzaXplID0gbnAgKiBzaXplb2YoKmlzbyk7CisJaW50IGk7CisJaW50IHJldDsKKworCWlmICghdXNiX3BpcGVpc29jKHVyYi0+cGlwZSkpCisJCXJldHVybiAwOworCisJLyogbXkgQmx1ZXRvb3RoIGRvbmdsZSBnZXRzIElTTyBVUkJzIHdoaWNoIGFyZSBucCA9IDAgKi8KKwlpZiAobnAgPT0gMCkgeworCQkvKiB1aW5mbygiaXNvIG5wID09IDBcbiIpOyAqLworCQkvKiB1c2JpcF9kdW1wX3VyYih1cmIpOyAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlidWZmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiaXBfeG1pdCgwLCB1ZC0+dGNwX3NvY2tldCwgYnVmZiwgc2l6ZSwgMCk7CisJaWYgKHJldCAhPSBzaXplKSB7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICJyZWN2IGlzb19mcmFtZV9kZXNjcmlwdG9yLCAlZFxuIiwKKwkJCXJldCk7CisJCWtmcmVlKGJ1ZmYpOworCisJCWlmICh1ZC0+c2lkZSA9PSBVU0JJUF9TVFVCKQorCQkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCWVsc2UKKwkJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCisJCXJldHVybiAtRVBJUEU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5wOyBpKyspIHsKKwkJaXNvID0gYnVmZiArIChpICogc2l6ZW9mKCppc28pKTsKKworCQl1c2JpcF9pc29fcGFrY2V0X2NvcnJlY3RfZW5kaWFuKGlzbywgMCk7CisJCXVzYmlwX3BhY2tfaXNvKGlzbywgJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0sIDApOworCX0KKworCisJa2ZyZWUoYnVmZik7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfcmVjdl9pc28pOworCisKKy8qIHNvbWUgbWVtYmVycyBvZiB1cmIgbXVzdCBiZSBzdWJzdGl0dXRlZCBiZWZvcmUuICovCitpbnQgdXNiaXBfcmVjdl94YnVmZihzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgc3RydWN0IHVyYiAqdXJiKQoreworCWludCByZXQ7CisJaW50IHNpemU7CisKKwlpZiAodWQtPnNpZGUgPT0gVVNCSVBfU1RVQikgeworCQkvKiBzdHViX3J4LmMgKi8KKwkJLyogdGhlIGRpcmVjdGlvbiBvZiB1cmIgbXVzdCBiZSBPVVQuICovCisJCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkpCisJCQlyZXR1cm4gMDsKKworCQlzaXplID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCX0gZWxzZSB7CisJCS8qIHZoY2lfcnguYyAqLworCQkvKiB0aGUgZGlyZWN0aW9uIG9mIHVyYiBtdXN0IGJlIElOLiAqLworCQlpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSkKKwkJCXJldHVybiAwOworCisJCXNpemUgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJfQorCisJLyogbm8gbmVlZCB0byByZWN2IHhidWZmICovCisJaWYgKCEoc2l6ZSA+IDApKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHVzYmlwX3htaXQoMCwgdWQtPnRjcF9zb2NrZXQsIChjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgc2l6ZSwgMCk7CisJaWYgKHJldCAhPSBzaXplKSB7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICJyZWN2IHhidWYsICVkXG4iLCByZXQpOworCQlpZiAodWQtPnNpZGUgPT0gVVNCSVBfU1RVQikgeworCQkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCX0gZWxzZSB7CisJCQl1c2JpcF9ldmVudF9hZGQodWQsIFZERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJCXJldHVybiAtRVBJUEU7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfcmVjdl94YnVmZik7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgdXNiaXBfY29tbW9uX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX0RFU0MgIiIgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JpcF9jb21tb25fZXhpdCh2b2lkKQoreworCXJldHVybjsKK30KKworCisKKworbW9kdWxlX2luaXQodXNiaXBfY29tbW9uX2luaXQpOworbW9kdWxlX2V4aXQodXNiaXBfY29tbW9uX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDE4NmI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oCkBAIC0wLDAgKzEsNDA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisjaWZuZGVmIF9fVkhDSV9DT01NT05fSAorI2RlZmluZSBfX1ZIQ0lfQ09NTU9OX0gKKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogZGVmaW5lIG1hY3JvcyB0byBwcmludCBtZXNzYWdlcworICovCisKKy8qKgorICogdWRiZyAtIHByaW50IGRlYnVnIG1lc3NhZ2VzIGlmIENPTkZJR19VU0JfREVCVUcgaXMgZGVmaW5lZAorICogQGZtdDoKKyAqIEBhcmdzOgorICovCisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisKKyNkZWZpbmUgdWRiZyhmbXQsIGFyZ3MuLi4pCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiUtMTBzOiglcywlZCkgJXM6ICIgZm10LAkJXAorCQkJKGluX2ludGVycnVwdCgpID8gImludGVycnVwdCIgOiAoY3VycmVudCktPmNvbW0pLFwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sICMjYXJncyk7CVwKKwl9IHdoaWxlICgwKQorCisjZWxzZSAgLyogQ09ORklHX1VTQl9ERUJVRyAqLworCisjZGVmaW5lIHVkYmcoZm10LCBhcmdzLi4uKQkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogQ09ORklHX1VTQl9ERUJVRyAqLworCisKK2VudW0geworCXVzYmlwX2RlYnVnX3htaXQJPSAoMSA8PCAwKSwKKwl1c2JpcF9kZWJ1Z19zeXNmcwk9ICgxIDw8IDEpLAorCXVzYmlwX2RlYnVnX3VyYgkJPSAoMSA8PCAyKSwKKwl1c2JpcF9kZWJ1Z19laAkJPSAoMSA8PCAzKSwKKworCXVzYmlwX2RlYnVnX3N0dWJfY21wCT0gKDEgPDwgOCksCisJdXNiaXBfZGVidWdfc3R1Yl9kZXYJPSAoMSA8PCA5KSwKKwl1c2JpcF9kZWJ1Z19zdHViX3J4CT0gKDEgPDwgMTApLAorCXVzYmlwX2RlYnVnX3N0dWJfdHgJPSAoMSA8PCAxMSksCisKKwl1c2JpcF9kZWJ1Z192aGNpX3JoCT0gKDEgPDwgOCksCisJdXNiaXBfZGVidWdfdmhjaV9oYwk9ICgxIDw8IDkpLAorCXVzYmlwX2RlYnVnX3ZoY2lfcngJPSAoMSA8PCAxMCksCisJdXNiaXBfZGVidWdfdmhjaV90eAk9ICgxIDw8IDExKSwKKwl1c2JpcF9kZWJ1Z192aGNpX3N5c2ZzICA9ICgxIDw8IDEyKQorfTsKKworI2RlZmluZSBkYmdfZmxhZ194bWl0CQkodXNiaXBfZGVidWdfZmxhZyAmIHVzYmlwX2RlYnVnX3htaXQpCisjZGVmaW5lIGRiZ19mbGFnX3ZoY2lfcmgJKHVzYmlwX2RlYnVnX2ZsYWcgJiB1c2JpcF9kZWJ1Z192aGNpX3JoKQorI2RlZmluZSBkYmdfZmxhZ192aGNpX2hjCSh1c2JpcF9kZWJ1Z19mbGFnICYgdXNiaXBfZGVidWdfdmhjaV9oYykKKyNkZWZpbmUgZGJnX2ZsYWdfdmhjaV9yeAkodXNiaXBfZGVidWdfZmxhZyAmIHVzYmlwX2RlYnVnX3ZoY2lfcngpCisjZGVmaW5lIGRiZ19mbGFnX3ZoY2lfdHgJKHVzYmlwX2RlYnVnX2ZsYWcgJiB1c2JpcF9kZWJ1Z192aGNpX3R4KQorI2RlZmluZSBkYmdfZmxhZ192aGNpX3N5c2ZzCSh1c2JpcF9kZWJ1Z19mbGFnICYgdXNiaXBfZGVidWdfdmhjaV9zeXNmcykKKyNkZWZpbmUgZGJnX2ZsYWdfc3R1Yl9yeAkodXNiaXBfZGVidWdfZmxhZyAmIHVzYmlwX2RlYnVnX3N0dWJfcngpCisjZGVmaW5lIGRiZ19mbGFnX3N0dWJfdHgJKHVzYmlwX2RlYnVnX2ZsYWcgJiB1c2JpcF9kZWJ1Z19zdHViX3R4KQorCitleHRlcm4gdW5zaWduZWQgbG9uZyB1c2JpcF9kZWJ1Z19mbGFnOworZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX3VzYmlwX2RlYnVnOworCisjZGVmaW5lIGRiZ193aXRoX2ZsYWcoZmxhZywgZm10LCBhcmdzLi4uKQkJXAorCWRvIHsJCQkJCQlcCisJCWlmIChmbGFnICYgdXNiaXBfZGVidWdfZmxhZykJCVwKKwkJCXVkYmcoZm10ICwgIyNhcmdzKTsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGRiZ19zeXNmcyhmbXQsIGFyZ3MuLi4pCQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z19zeXNmcywgZm10ICwgIyNhcmdzKQorI2RlZmluZSBkYmdfeG1pdChmbXQsIGFyZ3MuLi4pCQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z194bWl0LCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ191cmIoZm10LCBhcmdzLi4uKQkJXAorCWRiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfdXJiLCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ19laChmbXQsIGFyZ3MuLi4pCQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z19laCwgZm10ICwgIyNhcmdzKQorCisjZGVmaW5lIGRiZ192aGNpX3JoKGZtdCwgYXJncy4uLikJXAorCWRiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfdmhjaV9yaCwgZm10ICwgIyNhcmdzKQorI2RlZmluZSBkYmdfdmhjaV9oYyhmbXQsIGFyZ3MuLi4pCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3ZoY2lfaGMsIGZtdCAsICMjYXJncykKKyNkZWZpbmUgZGJnX3ZoY2lfcngoZm10LCBhcmdzLi4uKQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z192aGNpX3J4LCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ192aGNpX3R4KGZtdCwgYXJncy4uLikJXAorCWRiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfdmhjaV90eCwgZm10ICwgIyNhcmdzKQorI2RlZmluZSBkYmdfdmhjaV9zeXNmcyhmbXQsIGFyZ3MuLi4pCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3ZoY2lfc3lzZnMsIGZtdCAsICMjYXJncykKKworI2RlZmluZSBkYmdfc3R1Yl9jbXAoZm10LCBhcmdzLi4uKQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z19zdHViX2NtcCwgZm10ICwgIyNhcmdzKQorI2RlZmluZSBkYmdfc3R1Yl9yeChmbXQsIGFyZ3MuLi4pCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3N0dWJfcngsIGZtdCAsICMjYXJncykKKyNkZWZpbmUgZGJnX3N0dWJfdHgoZm10LCBhcmdzLi4uKQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z19zdHViX3R4LCBmbXQgLCAjI2FyZ3MpCisKKworLyoqCisgKiB1ZXJyIC0gcHJpbnQgZXJyb3IgbWVzc2FnZXMKKyAqIEBmbXQ6CisgKiBAYXJnczoKKyAqLworI2RlZmluZSB1ZXJyKGZtdCwgYXJncy4uLikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIiUtMTBzOiAqKipFUlJPUioqKiAoJXMsJWQpICVzOiAiIGZtdCwJXAorCQkJKGluX2ludGVycnVwdCgpID8gImludGVycnVwdCIgOiAoY3VycmVudCktPmNvbW0pLFwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sICMjYXJncyk7CVwKKwl9IHdoaWxlICgwKQorCisvKioKKyAqIHVpbmZvIC0gcHJpbnQgaW5mb3JtYXRpb24gbWVzc2FnZXMKKyAqIEBmbXQ6CisgKiBAYXJnczoKKyAqLworI2RlZmluZSB1aW5mbyhmbXQsIGFyZ3MuLi4pCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCXByaW50ayhLRVJOX0lORk8gInVzYmlwOiAiIGZtdCAsICMjIGFyZ3MpOwlcCisJfSB3aGlsZSAoMCkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVVNCL0lQIHJlcXVlc3QgaGVhZGVycy4KKyAqIEN1cnJlbnRseSwgd2UgZGVmaW5lIDQgcmVxdWVzdCB0eXBlczoKKyAqCisgKiAgLSBDTURfU1VCTUlUIHRyYW5zZmVycyBhIFVTQiByZXF1ZXN0LCBjb3JyZXNwb25kaW5nIHRvIHVzYl9zdWJtaXRfdXJiKCkuCisgKiAgICAoY2xpZW50IHRvIHNlcnZlcikKKyAqICAtIFJFVF9SRVRVUk4gdHJhbnNmZXJzIHRoZSByZXN1bHQgb2YgQ01EX1NVQk1JVC4KKyAqICAgIChzZXJ2ZXIgdG8gY2xpZW50KQorICogIC0gQ01EX1VOTElOSyB0cmFuc2ZlcnMgYW4gdW5saW5rIHJlcXVlc3Qgb2YgYSBwZW5kaW5nIFVTQiByZXF1ZXN0LgorICogICAgKGNsaWVudCB0byBzZXJ2ZXIpCisgKiAgLSBSRVRfVU5MSU5LIHRyYW5zZmVycyB0aGUgcmVzdWx0IG9mIENNRF9VTkxJTksuCisgKiAgICAoc2VydmVyIHRvIGNsaWVudCkKKyAqCisgKiBOb3RlOiBUaGUgYmVsb3cgcmVxdWVzdCBmb3JtYXRzIGFyZSBiYXNlZCBvbiB0aGUgVVNCIHN1YnN5c3RlbSBvZiBMaW51eC4gSXRzCisgKiBkZXRhaWxzIHdpbGwgYmUgZGVmaW5lZCB3aGVuIG90aGVyIGltcGxlbWVudGF0aW9ucyBjb21lLgorICoKKyAqCisgKi8KKworLyoKKyAqIEEgYmFzaWMgaGVhZGVyIGZvbGxvd2VkIGJ5IG90aGVyIGFkZGl0aW9uYWwgaGVhZGVycy4KKyAqLworc3RydWN0IHVzYmlwX2hlYWRlcl9iYXNpYyB7CisjZGVmaW5lIFVTQklQX0NNRF9TVUJNSVQJMHgwMDAxCisjZGVmaW5lIFVTQklQX0NNRF9VTkxJTksJMHgwMDAyCisjZGVmaW5lIFVTQklQX1JFVF9TVUJNSVQJMHgwMDAzCisjZGVmaW5lIFVTQklQX1JFVF9VTkxJTksJMHgwMDA0CisJX191MzIgY29tbWFuZDsKKworCSAvKiBzZXF1ZW5jaWFsIG51bWJlciB3aGljaCBpZGVudGlmaWVzIHJlcXVlc3RzLgorCSAgKiBpbmNyZW1lbnRlZCBwZXIgY29ubmVjdGlvbnMgKi8KKwlfX3UzMiBzZXFudW07CisKKwkvKiBkZXZpZCBpcyB1c2VkIHRvIHNwZWNpZnkgYSByZW1vdGUgVVNCIGRldmljZSB1bmlxdWVseSBpbnN0ZWFkCisJICogb2YgYnVzbnVtIGFuZCBkZXZudW0gaW4gTGludXguIEluIHRoZSBjYXNlIG9mIExpbnV4IHN0dWJfZHJpdmVyLAorCSAqIHRoaXMgdmFsdWUgaXMgKChidXNudW0gPDwgMTYpIHwgZGV2bnVtKSAqLworCV9fdTMyIGRldmlkOworCisjZGVmaW5lIFVTQklQX0RJUl9PVVQJMAorI2RlZmluZSBVU0JJUF9ESVJfSU4gCTEKKwlfX3UzMiBkaXJlY3Rpb247CisJX191MzIgZXA7ICAgICAvKiBlbmRwb2ludCBudW1iZXIgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogQW4gYWRkaXRpb25hbCBoZWFkZXIgZm9yIGEgQ01EX1NVQk1JVCBwYWNrZXQuCisgKi8KK3N0cnVjdCB1c2JpcF9oZWFkZXJfY21kX3N1Ym1pdCB7CisJLyogdGhlc2UgdmFsdWVzIGFyZSBiYXNpY2FsbHkgdGhlIHNhbWUgYXMgaW4gYSBVUkIuICovCisKKwkvKiB0aGUgc2FtZSBpbiBhIFVSQi4gKi8KKwlfX3UzMiB0cmFuc2Zlcl9mbGFnczsKKworCS8qIHNldCB0aGUgZm9sbG93aW5nIGRhdGEgc2l6ZSAob3V0KSwKKwkgKiBvciBleHBlY3RlZCByZWFkaW5nIGRhdGEgc2l6ZSAoaW4pICovCisJX19zMzIgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKworCS8qIGl0IGlzIGRpZmZpY3VsdCBmb3IgdXNiaXAgdG8gc3luYyBmcmFtZXMgKHJlc2VydmVkIG9ubHk/KSAqLworCV9fczMyIHN0YXJ0X2ZyYW1lOworCisJLyogdGhlIG51bWJlciBvZiBpc28gZGVzY3JpcHRvcnMgdGhhdCBmb2xsb3dzIHRoaXMgaGVhZGVyICovCisJX19zMzIgbnVtYmVyX29mX3BhY2tldHM7CisKKwkvKiB0aGUgbWF4aW11bSB0aW1lIHdpdGhpbiB3aGljaCB0aGlzIHJlcXVlc3Qgd29ya3MgaW4gYSBob3N0CisJICogY29udHJvbGxlciBvZiBhIHNlcnZlciBzaWRlICovCisJX19zMzIgaW50ZXJ2YWw7CisKKwkvKiBzZXQgc2V0dXAgcGFja2V0IGRhdGEgZm9yIGEgQ1RSTCByZXF1ZXN0ICovCisJdW5zaWduZWQgY2hhciBzZXR1cFs4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogQW4gYWRkaXRpb25hbCBoZWFkZXIgZm9yIGEgUkVUX1NVQk1JVCBwYWNrZXQuCisgKi8KK3N0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3N1Ym1pdCB7CisJX19zMzIgc3RhdHVzOworCV9fczMyIGFjdHVhbF9sZW5ndGg7IC8qIHJldHVybmVkIGRhdGEgbGVuZ3RoICovCisJX19zMzIgc3RhcnRfZnJhbWU7IC8qIElTTyBhbmQgSU5UICovCisJX19zMzIgbnVtYmVyX29mX3BhY2tldHM7ICAvKiBJU08gb25seSAqLworCV9fczMyIGVycm9yX2NvdW50OyAvKiBJU08gb25seSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBBbiBhZGRpdGlvbmFsIGhlYWRlciBmb3IgYSBDTURfVU5MSU5LIHBhY2tldC4KKyAqLworc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfdW5saW5rIHsKKwlfX3UzMiBzZXFudW07IC8qIFVSQidzIHNlcW51bSB3aGljaCB3aWxsIGJlIHVubGlua2VkICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgorICogQW4gYWRkaXRpb25hbCBoZWFkZXIgZm9yIGEgUkVUX1VOTElOSyBwYWNrZXQuCisgKi8KK3N0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3VubGluayB7CisJX19zMzIgc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworLyogdGhlIHNhbWUgYXMgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciBidXQgcGFja2VkIGZvciBwZHUgKi8KK3N0cnVjdCB1c2JpcF9pc29fcGFja2V0X2Rlc2NyaXB0b3IgeworCV9fdTMyIG9mZnNldDsKKwlfX3UzMiBsZW5ndGg7ICAgICAgICAgICAgLyogZXhwZWN0ZWQgbGVuZ3RoICovCisJX191MzIgYWN0dWFsX2xlbmd0aDsKKwlfX3UzMiBzdGF0dXM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgorICogQWxsIHVzYmlwIHBhY2tldHMgdXNlIGEgY29tbW9uIGhlYWRlciB0byBrZWVwIGNvZGUgc2ltcGxlLgorICovCitzdHJ1Y3QgdXNiaXBfaGVhZGVyIHsKKwlzdHJ1Y3QgdXNiaXBfaGVhZGVyX2Jhc2ljIGJhc2U7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB1c2JpcF9oZWFkZXJfY21kX3N1Ym1pdAljbWRfc3VibWl0OworCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyX3JldF9zdWJtaXQJcmV0X3N1Ym1pdDsKKwkJc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfdW5saW5rCWNtZF91bmxpbms7CisJCXN0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3VubGluawlyZXRfdW5saW5rOworCX0gdTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKK2ludCB1c2JpcF94bWl0KGludCwgc3RydWN0IHNvY2tldCAqLCBjaGFyICosIGludCwgaW50KTsKK2ludCB1c2JpcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IG1zZ2hkciAqLCBpbnQpOworCisKK3N0YXRpYyBpbmxpbmUgaW50IGludGVyZmFjZV90b19idXNudW0oc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlyZXR1cm4gdWRldi0+YnVzLT5idXNudW07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGludGVyZmFjZV90b19kZXZudW0oc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlyZXR1cm4gdWRldi0+ZGV2bnVtOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbnRlcmZhY2VfdG9faW5mbnVtKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJcmV0dXJuIGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKK30KKworI2lmIDAKK2ludCBzZXRub2RlbGF5KHN0cnVjdCBzb2NrZXQgKik7CitpbnQgc2V0cXVpY2thY2soc3RydWN0IHNvY2tldCAqKTsKK2ludCBzZXRrZWVwYWxpdmUoc3RydWN0IHNvY2tldCAqc29ja2V0KTsKK3ZvaWQgc2V0cmV1c2Uoc3RydWN0IHNvY2tldCAqKTsKKyNlbmRpZgorCitzdHJ1Y3Qgc29ja2V0ICpzb2NrZmRfdG9fc29ja2V0KHVuc2lnbmVkIGludCk7CitpbnQgc2V0X3NvY2thZGRyKHN0cnVjdCBzb2NrZXQgKnNvY2tldCwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNzKTsKKwordm9pZCB1c2JpcF9kdW1wX3VyYihzdHJ1Y3QgdXJiICpwdXJiKTsKK3ZvaWQgdXNiaXBfZHVtcF9oZWFkZXIoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KTsKKworCitzdHJ1Y3QgdXNiaXBfZGV2aWNlOworCitzdHJ1Y3QgdXNiaXBfdGFzayB7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7CisJc3RydWN0IGNvbXBsZXRpb24gdGhyZWFkX2RvbmU7CisJY2hhciAqbmFtZTsKKwl2b2lkICgqbG9vcF9vcHMpKHN0cnVjdCB1c2JpcF90YXNrICopOworfTsKKworZW51bSB1c2JpcF9zaWRlIHsKKwlVU0JJUF9WSENJLAorCVVTQklQX1NUVUIsCit9OworCitlbnVtIHVzYmlwX3N0YXR1cyB7CisJLyogc2RldiBpcyBhdmFpbGFibGUuICovCisJU0RFVl9TVF9BVkFJTEFCTEUgPSAweDAxLAorCS8qIHNkZXYgaXMgbm93IHVzZWQuICovCisJU0RFVl9TVF9VU0VELAorCS8qIHNkZXYgaXMgdW51c2FibGUgYmVjYXVzZSBvZiBhIGZhdGFsIGVycm9yLiAqLworCVNERVZfU1RfRVJST1IsCisKKwkvKiB2ZGV2IGRvZXMgbm90IGNvbm5lY3QgYSByZW1vdGUgZGV2aWNlLiAqLworCVZERVZfU1RfTlVMTCwKKwkvKiB2ZGV2IGlzIHVzZWQsIGJ1dCB0aGUgVVNCIGFkZHJlc3MgaXMgbm90IGFzc2lnbmVkIHlldCAqLworCVZERVZfU1RfTk9UQVNTSUdORUQsCisJVkRFVl9TVF9VU0VELAorCVZERVZfU1RfRVJST1IKK307CisKKy8qIGEgY29tbW9uIHN0cnVjdHVyZSBmb3Igc3R1Yl9kZXZpY2UgYW5kIHZoY2lfZGV2aWNlICovCitzdHJ1Y3QgdXNiaXBfZGV2aWNlIHsKKwllbnVtIHVzYmlwX3NpZGUgc2lkZTsKKworCWVudW0gdXNiaXBfc3RhdHVzIHN0YXR1czsKKworCS8qIGxvY2sgZm9yIHN0YXR1cyAqLworCXNwaW5sb2NrX3QgbG9jazsKKworCXN0cnVjdCBzb2NrZXQgKnRjcF9zb2NrZXQ7CisKKwlzdHJ1Y3QgdXNiaXBfdGFzayB0Y3Bfcng7CisJc3RydWN0IHVzYmlwX3Rhc2sgdGNwX3R4OworCisJLyogZXZlbnQgaGFuZGxlciAqLworI2RlZmluZSBVU0JJUF9FSF9TSFVURE9XTgkoMSA8PCAwKQorI2RlZmluZSBVU0JJUF9FSF9CWUUJCSgxIDw8IDEpCisjZGVmaW5lIFVTQklQX0VIX1JFU0VUCQkoMSA8PCAyKQorI2RlZmluZSBVU0JJUF9FSF9VTlVTQUJMRQkoMSA8PCAzKQorCisjZGVmaW5lIFNERVZfRVZFTlRfUkVNT1ZFRAkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9SRVNFVCB8IFVTQklQX0VIX0JZRSkKKyNkZWZpbmUJU0RFVl9FVkVOVF9ET1dOCQkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9SRVNFVCkKKyNkZWZpbmUJU0RFVl9FVkVOVF9FUlJPUl9UQ1AJKFVTQklQX0VIX1NIVVRET1dOIHwgVVNCSVBfRUhfUkVTRVQpCisjZGVmaW5lCVNERVZfRVZFTlRfRVJST1JfU1VCTUlUCShVU0JJUF9FSF9TSFVURE9XTiB8IFVTQklQX0VIX1JFU0VUKQorI2RlZmluZQlTREVWX0VWRU5UX0VSUk9SX01BTExPQwkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9VTlVTQUJMRSkKKworI2RlZmluZQlWREVWX0VWRU5UX1JFTU9WRUQJKFVTQklQX0VIX1NIVVRET1dOIHwgVVNCSVBfRUhfQllFKQorI2RlZmluZQlWREVWX0VWRU5UX0RPV04JCShVU0JJUF9FSF9TSFVURE9XTiB8IFVTQklQX0VIX1JFU0VUKQorI2RlZmluZQlWREVWX0VWRU5UX0VSUk9SX1RDUAkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9SRVNFVCkKKyNkZWZpbmUJVkRFVl9FVkVOVF9FUlJPUl9NQUxMT0MJKFVTQklQX0VIX1NIVVRET1dOIHwgVVNCSVBfRUhfVU5VU0FCTEUpCisKKwl1bnNpZ25lZCBsb25nIGV2ZW50OworCXN0cnVjdCB1c2JpcF90YXNrIGVoOworCXdhaXRfcXVldWVfaGVhZF90IGVoX3dhaXRxOworCisJc3RydWN0IGVoX29wcyB7CisJCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHVzYmlwX2RldmljZSAqKTsKKwkJdm9pZCAoKnJlc2V0KShzdHJ1Y3QgdXNiaXBfZGV2aWNlICopOworCQl2b2lkICgqdW51c2FibGUpKHN0cnVjdCB1c2JpcF9kZXZpY2UgKik7CisJfSBlaF9vcHM7Cit9OworCisKK3ZvaWQgdXNiaXBfdGFza19pbml0KHN0cnVjdCB1c2JpcF90YXNrICp1dCwgY2hhciAqLAorCQkJCXZvaWQgKCpsb29wX29wcykoc3RydWN0IHVzYmlwX3Rhc2sgKikpOworCit2b2lkIHVzYmlwX3N0YXJ0X3RocmVhZHMoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpOwordm9pZCB1c2JpcF9zdG9wX3RocmVhZHMoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpOworaW50IHVzYmlwX3RocmVhZCh2b2lkICpwYXJhbSk7CisKK3ZvaWQgdXNiaXBfcGFja19wZHUoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1LCBzdHJ1Y3QgdXJiICp1cmIsIGludCBjbWQsCisJCQkJCQkJCWludCBwYWNrKTsKKwordm9pZCB1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4oc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1LCBpbnQgc2VuZCk7CisvKiBzb21lIG1lbWJlcnMgb2YgdXJiIG11c3QgYmUgc3Vic3RpdHV0ZWQgYmVmb3JlLiAqLworaW50IHVzYmlwX3JlY3ZfeGJ1ZmYoc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHN0cnVjdCB1cmIgKnVyYik7CisvKiBzb21lIG1lbWJlcnMgb2YgdXJiIG11c3QgYmUgc3Vic3RpdHV0ZWQgYmVmb3JlLiAqLworaW50IHVzYmlwX3JlY3ZfaXNvKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkLCBzdHJ1Y3QgdXJiICp1cmIpOwordm9pZCAqdXNiaXBfYWxsb2NfaXNvX2Rlc2NfcGR1KHN0cnVjdCB1cmIgKnVyYiwgc3NpemVfdCAqYnVmZmxlbik7CisKKworLyogdXNiaXBfZXZlbnQuYyAqLwordm9pZCB1c2JpcF9zdGFydF9laChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCk7Cit2b2lkIHVzYmlwX3N0b3BfZWgoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpOwordm9pZCB1c2JpcF9ldmVudF9hZGQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQpOworaW50IHVzYmlwX2V2ZW50X2hhcHBlbmQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2V2ZW50LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzE4NTUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2V2ZW50LmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKworc3RhdGljIGludCBldmVudF9oYW5kbGVyKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCWRiZ19laCgiZW50ZXJcbiIpOworCisJLyoKKwkgKiBFdmVudHMgYXJlIGhhbmRsZWQgYnkgb25seSB0aGlzIHRocmVhZC4KKwkgKi8KKwl3aGlsZSAodXNiaXBfZXZlbnRfaGFwcGVuZCh1ZCkpIHsKKwkJZGJnX2VoKCJwZW5kaW5nIGV2ZW50ICVseFxuIiwgdWQtPmV2ZW50KTsKKworCQkvKgorCQkgKiBOT1RFOiBzaHV0ZG93biBtdXN0IGNvbWUgZmlyc3QuCisJCSAqIFNodXRkb3duIHRoZSBkZXZpY2UuCisJCSAqLworCQlpZiAodWQtPmV2ZW50ICYgVVNCSVBfRUhfU0hVVERPV04pIHsKKwkJCXVkLT5laF9vcHMuc2h1dGRvd24odWQpOworCisJCQl1ZC0+ZXZlbnQgJj0gflVTQklQX0VIX1NIVVRET1dOOworCisJCQlicmVhazsKKwkJfQorCisJCS8qIFN0b3AgdGhlIGVycm9yIGhhbmRsZXIuICovCisJCWlmICh1ZC0+ZXZlbnQgJiBVU0JJUF9FSF9CWUUpCisJCQlyZXR1cm4gLTE7CisKKwkJLyogUmVzZXQgdGhlIGRldmljZS4gKi8KKwkJaWYgKHVkLT5ldmVudCAmIFVTQklQX0VIX1JFU0VUKSB7CisJCQl1ZC0+ZWhfb3BzLnJlc2V0KHVkKTsKKworCQkJdWQtPmV2ZW50ICY9IH5VU0JJUF9FSF9SRVNFVDsKKworCQkJYnJlYWs7CisJCX0KKworCQkvKiBNYXJrIHRoZSBkZXZpY2UgYXMgdW51c2FibGUuICovCisJCWlmICh1ZC0+ZXZlbnQgJiBVU0JJUF9FSF9VTlVTQUJMRSkgeworCQkJdWQtPmVoX29wcy51bnVzYWJsZSh1ZCk7CisKKwkJCXVkLT5ldmVudCAmPSB+VVNCSVBfRUhfVU5VU0FCTEU7CisKKwkJCWJyZWFrOworCQl9CisKKwkJLyogTk9UUkVBQ0hFRCAqLworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIGV2ZW50XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXZlbnRfaGFuZGxlcl9sb29wKHN0cnVjdCB1c2JpcF90YXNrICp1dCkKK3sKKwlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9IGNvbnRhaW5lcl9vZih1dCwgc3RydWN0IHVzYmlwX2RldmljZSwgZWgpOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlkYmdfZWgoInNpZ25hbCBjYXRjaGVkIVxuIik7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChldmVudF9oYW5kbGVyKHVkKSA8IDApCisJCQlicmVhazsKKworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodWQtPmVoX3dhaXRxLCB1c2JpcF9ldmVudF9oYXBwZW5kKHVkKSk7CisJCWRiZ19laCgid2FrZXVwXG4iKTsKKwl9Cit9CisKK3ZvaWQgdXNiaXBfc3RhcnRfZWgoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJc3RydWN0IHVzYmlwX3Rhc2sgKmVoID0gJnVkLT5laDsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVkLT5laF93YWl0cSk7CisJdWQtPmV2ZW50ID0gMDsKKworCXVzYmlwX3Rhc2tfaW5pdChlaCwgInVzYmlwX2VoIiwgZXZlbnRfaGFuZGxlcl9sb29wKTsKKworCWtlcm5lbF90aHJlYWQodXNiaXBfdGhyZWFkLCAodm9pZCAqKWVoLCAwKTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmVoLT50aHJlYWRfZG9uZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9zdGFydF9laCk7CisKK3ZvaWQgdXNiaXBfc3RvcF9laChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlzdHJ1Y3QgdXNiaXBfdGFzayAqZWggPSAmdWQtPmVoOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmZWgtPnRocmVhZF9kb25lKTsKKwlkYmdfZWgoInVzYmlwX2VoIGhhcyBmaW5pc2hlZFxuIik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9zdG9wX2VoKTsKKwordm9pZCB1c2JpcF9ldmVudF9hZGQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQpCit7CisJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisKKwl1ZC0+ZXZlbnQgfD0gZXZlbnQ7CisKKwl3YWtlX3VwKCZ1ZC0+ZWhfd2FpdHEpOworCisJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX2V2ZW50X2FkZCk7CisKK2ludCB1c2JpcF9ldmVudF9oYXBwZW5kKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCWludCBoYXBwZW5kID0gMDsKKworCXNwaW5fbG9jaygmdWQtPmxvY2spOworCisJaWYgKHVkLT5ldmVudCAhPSAwKQorCQloYXBwZW5kID0gMTsKKworCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7CisKKwlyZXR1cm4gaGFwcGVuZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX2V2ZW50X2hhcHBlbmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2kuaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzNzUxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlICIuLi8uLi91c2IvY29yZS9oY2QuaCIKKworCitzdHJ1Y3QgdmhjaV9kZXZpY2UgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJLyoKKwkgKiBkZXZpZCBzcGVjaWZpZXMgYSByZW1vdGUgdXNiIGRldmljZSB1bmlxdWVseSBpbnN0ZWFkCisJICogb2YgY29tYmluYXRpb24gb2YgYnVzbnVtIGFuZCBkZXZudW0uCisJICovCisJX191MzIgZGV2aWQ7CisKKwkvKiBzcGVlZCBvZiBhIHJlbW90ZSBkZXZpY2UgKi8KKwllbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQ7CisKKwkvKiAgdmhjaSByb290LWh1YiBwb3J0IHRvIHdoaWNoIHRoaXMgZGV2aWNlIGlzIGF0dGFjaGVkICAqLworCV9fdTMyIHJocG9ydDsKKworCXN0cnVjdCB1c2JpcF9kZXZpY2UgdWQ7CisKKworCS8qIGxvY2sgZm9yIHRoZSBiZWxvdyBsaW5rIGxpc3RzICovCisJc3BpbmxvY2tfdCBwcml2X2xvY2s7CisKKwkvKiB2aGNpX3ByaXYgaXMgbGlua2VkIHRvIG9uZSBvZiB0aGVtLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgcHJpdl90eDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHByaXZfcng7CisKKwkvKiB2aGNpX3VubGluayBpcyBsaW5rZWQgdG8gb25lIG9mIHRoZW0gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHVubGlua190eDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHVubGlua19yeDsKKworCS8qIHZoY2lfdHggdGhyZWFkIHNsZWVwcyBmb3IgdGhpcyBxdWV1ZSAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxX3R4OworfTsKKworCisvKiB1cmItPmhjcHJpdiwgdXNlIGNvbnRhaW5lcl9vZigpICovCitzdHJ1Y3QgdmhjaV9wcml2IHsKKwl1bnNpZ25lZCBsb25nIHNlcW51bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXY7CisJc3RydWN0IHVyYiAqdXJiOworfTsKKworCitzdHJ1Y3QgdmhjaV91bmxpbmsgeworCS8qIHNlcW51bSBvZiB0aGlzIHJlcXVlc3QgKi8KKwl1bnNpZ25lZCBsb25nIHNlcW51bTsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIHNlcW51bSBvZiB0aGUgdW5saW5rIHRhcmdldCAqLworCXVuc2lnbmVkIGxvbmcgdW5saW5rX3NlcW51bTsKK307CisKKy8qCisgKiBUaGUgbnVtYmVyIG9mIHBvcnRzIGlzIGxlc3MgdGhhbiAxNiA/CisgKiBVU0JfTUFYQ0hJTERSRU4gaXMgc3RhdGljYWxseSBkZWZpbmVkIHRvIDE2IGluIHVzYi5oLiAgSXRzIG1heGltdW0gdmFsdWUKKyAqIHdvdWxkIGJlIDMxIGJlY2F1c2UgdGhlIGV2ZW50X2JpdHNbMV0gb2Ygc3RydWN0IHVzYl9odWIgaXMgZGVmaW5lZCBhcworICogdW5zaWduZWQgbG9uZyBpbiBodWIuaAorICovCisjZGVmaW5lIFZIQ0lfTlBPUlRTIDgKKworLyogZm9yIHVzYl9idXMuaGNwcml2ICovCitzdHJ1Y3QgdmhjaV9oY2QgeworCXNwaW5sb2NrX3QJbG9jazsKKworCXUzMglwb3J0X3N0YXR1c1tWSENJX05QT1JUU107CisKKwl1bnNpZ25lZAlyZXN1bWluZzoxOworCXVuc2lnbmVkIGxvbmcJcmVfdGltZW91dDsKKworCWF0b21pY190IHNlcW51bTsKKworCS8qCisJICogTk9URToKKwkgKiB3SW5kZXggc2hvd3MgdGhlIHBvcnQgbnVtYmVyIGFuZCBiZWdpbnMgZnJvbSAxLgorCSAqIEJ1dCwgdGhlIGluZGV4IG9mIHRoaXMgYXJyYXkgYmVnaW5zIGZyb20gMC4KKwkgKi8KKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgdmRldltWSENJX05QT1JUU107CisKKwkvKiB2aGNpX2RldmljZSB3aGljaCBoYXMgbm90IGJlZW4gYXNzaWdlZCBpdHMgYWRkcmVzcyB5ZXQgKi8KKwlpbnQgcGVuZGluZ19wb3J0OworfTsKKworCitleHRlcm4gc3RydWN0IHZoY2lfaGNkICp0aGVfY29udHJvbGxlcjsKK2V4dGVybiBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRldl9hdHRyX2dyb3VwOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBwcm90b3R5cGUgZGVjbGFyYXRpb24gKi8KKworLyogdmhjaV9oY2QuYyAqLwordm9pZCByaF9wb3J0X2Nvbm5lY3QoaW50IHJocG9ydCwgZW51bSB1c2JfZGV2aWNlX3NwZWVkIHNwZWVkKTsKK3ZvaWQgcmhfcG9ydF9kaXNjb25uZWN0KGludCByaHBvcnQpOwordm9pZCB2aGNpX3J4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KTsKK3ZvaWQgdmhjaV90eF9sb29wKHN0cnVjdCB1c2JpcF90YXNrICp1dCk7CisKKyNkZWZpbmUgaGFyZHdhcmUJCSgmdGhlX2NvbnRyb2xsZXItPnBkZXYuZGV2KQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2aGNpX2RldmljZSAqcG9ydF90b192ZGV2KF9fdTMyIHBvcnQpCit7CisJcmV0dXJuICZ0aGVfY29udHJvbGxlci0+dmRldltwb3J0XTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmhjaV9oY2QgKmhjZF90b192aGNpKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJcmV0dXJuIChzdHJ1Y3QgdmhjaV9oY2QgKikgKGhjZC0+aGNkX3ByaXYpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfaGNkICp2aGNpX3RvX2hjZChzdHJ1Y3QgdmhjaV9oY2QgKnZoY2kpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZigodm9pZCAqKSB2aGNpLCBzdHJ1Y3QgdXNiX2hjZCwgaGNkX3ByaXYpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKnZoY2lfZGV2KHN0cnVjdCB2aGNpX2hjZCAqdmhjaSkKK3sKKwlyZXR1cm4gdmhjaV90b19oY2QodmhjaSktPnNlbGYuY29udHJvbGxlcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1YTJlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jCkBAIC0wLDAgKzEsMTI3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworCisjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCisjaW5jbHVkZSAidmhjaS5oIgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRha2FoaXJvIEhpcm9mdWNoaSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlZpcnR1YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBEcml2ZXIgZm9yIFVTQi9JUCIKKyNkZWZpbmUgRFJJVkVSX0xJQ0VOQ0UgIkdQTCIKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOQ0UpOworCisKKworLyoKKyAqIFRPRE8KKyAqCS0gdXBkYXRlIHJvb3QgaHViIGVtdWxhdGlvbgorICoJLSBtb3ZlIHRoZSBlbXVsYXRpb24gY29kZSB0byB1c2VybGFuZCA/CisgKgkJcG9ydGluZyB0byBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcworICoJCW1pbmltaXplIGtlcm5lbCBjb2RlCisgKgktIGFkZCBzdXNwZW5kL3Jlc3VtZSBjb2RlCisgKgktIGNsZWFuIHVwIGV2ZXJ5dGhpbmcKKyAqLworCisKKy8qIFNlZSB1c2IgZ2FkZ2V0IGR1bW15IGhjZCAqLworCisKK3N0YXRpYyBpbnQgdmhjaV9odWJfc3RhdHVzKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZmYpOworc3RhdGljIGludCB2aGNpX2h1Yl9jb250cm9sKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUxNiB0eXBlUmVxLCB1MTYgd1ZhbHVlLAorCQl1MTYgd0luZGV4LCBjaGFyICpidWZmLCB1MTYgd0xlbmd0aCk7CitzdGF0aWMgaW50IHZoY2lfdXJiX2VucXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLAorCQkJCQkJCWdmcF90IG1lbV9mbGFncyk7CitzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsKK3N0YXRpYyBpbnQgdmhjaV9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqdmhjaV9oY2QpOworc3RhdGljIHZvaWQgdmhjaV9zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpOworc3RhdGljIGludCB2aGNpX2dldF9mcmFtZV9udW1iZXIoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW10gPSAidmhjaV9oY2QiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX2Rlc2NbXSA9ICJVU0IvSVAgVmlydHVhbCBIb3N0IENvbnRvcm9sbGVyIjsKKworc3RydWN0IHZoY2lfaGNkICp0aGVfY29udHJvbGxlcjsKKworc3RhdGljIGNvbnN0IGNoYXIgKmJpdF9kZXNjW10gPSB7CisJIkNPTk5FQ1RJT04iLAkJLyowKi8KKwkiRU5BQkxFIiwJCS8qMSovCisJIlNVU1BFTkQiLAkJLyoyKi8KKwkiT1ZFUl9DVVJSRU5UIiwJCS8qMyovCisJIlJFU0VUIiwJCS8qNCovCisJIlI1IiwJCS8qNSovCisJIlI2IiwJCS8qNiovCisJIlI3IiwJCS8qNyovCisJIlBPV0VSIiwJCS8qOCovCisJIkxPV1NQRUVEIiwJCS8qOSovCisJIkhJR0hTUEVFRCIsCQkvKjEwKi8KKwkiUE9SVF9URVNUIiwJCS8qMTEqLworCSJJTkRJQ0FUT1IiLAkJLyoxMiovCisJIlIxMyIsCQkvKjEzKi8KKwkiUjE0IiwJCS8qMTQqLworCSJSMTUiLAkJLyoxNSovCisJIkNfQ09OTkVDVElPTiIsCQkvKjE2Ki8KKwkiQ19FTkFCTEUiLAkJLyoxNyovCisJIkNfU1VTUEVORCIsCQkvKjE4Ki8KKwkiQ19PVkVSX0NVUlJFTlQiLAkvKjE5Ki8KKwkiQ19SRVNFVCIsCQkvKjIwKi8KKwkiUjIxIiwJCS8qMjEqLworCSJSMjIiLAkJLyoyMiovCisJIlIyMyIsCQkvKjIzKi8KKwkiUjI0IiwJCS8qMjQqLworCSJSMjUiLAkJLyoyNSovCisJIlIyNiIsCQkvKjI2Ki8KKwkiUjI3IiwJCS8qMjcqLworCSJSMjgiLAkJLyoyOCovCisJIlIyOSIsCQkvKjI5Ki8KKwkiUjMwIiwJCS8qMzAqLworCSJSMzEiLAkJLyozMSovCit9OworCisKK3N0YXRpYyB2b2lkIGR1bXBfcG9ydF9zdGF0dXModTMyIHN0YXR1cykKK3sKKwlpbnQgaSA9IDA7CisKKwlwcmludGsoS0VSTl9ERUJVRyAic3RhdHVzICUwOHg6Iiwgc3RhdHVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAoc3RhdHVzICYgKDEgPDwgaSkpCisJCQlwcmludGsoIiAlcyIsIGJpdF9kZXNjW2ldKTsKKwl9CisKKwlwcmludGsoIlxuIik7Cit9CisKKworCit2b2lkIHJoX3BvcnRfY29ubmVjdChpbnQgcmhwb3J0LCBlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQpCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWRiZ192aGNpX3JoKCJyaF9wb3J0X2Nvbm5lY3QgJWRcbiIsIHJocG9ydCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKworCXRoZV9jb250cm9sbGVyLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9IFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTgorCQl8ICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKTsKKworCXN3aXRjaCAoc3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQl0aGVfY29udHJvbGxlci0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PSBVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQ7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJdGhlX2NvbnRyb2xsZXItPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0gVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qIHNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPnZkZXZbcmhwb3J0XS51ZC5sb2NrKTsKKwkgKiB0aGVfY29udHJvbGxlci0+dmRldltyaHBvcnRdLnVkLnN0YXR1cyA9IFZERVZfQ09OTkVDVDsKKwkgKiBzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPnZkZXZbcmhwb3J0XS51ZC5sb2NrKTsgKi8KKworCXRoZV9jb250cm9sbGVyLT5wZW5kaW5nX3BvcnQgPSByaHBvcnQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyh2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlcikpOworfQorCit2b2lkIHJoX3BvcnRfZGlzY29ubmVjdChpbnQgcmhwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmdfdmhjaV9yaCgicmhfcG9ydF9kaXNjb25uZWN0ICVkXG4iLCByaHBvcnQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJLyogc3RvcF9hY3Rpdml0eShkdW0sIGRyaXZlcik7ICovCisJdGhlX2NvbnRyb2xsZXItPnBvcnRfc3RhdHVzW3JocG9ydF0gJj0gflVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTjsKKwl0aGVfY29udHJvbGxlci0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkoMSA8PCBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTik7CisKKworCS8qIG5vdCB5ZXQgY29tcGxldGUgdGhlIGRpc2Nvbm5lY3Rpb24KKwkgKiBzcGluX2xvY2soJnZkZXYtPnVkLmxvY2spOworCSAqIHZkZXYtPnVkLnN0YXR1cyA9IFZIQ19TVF9ESVNDT05ORUNUOworCSAqIHNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsgKi8KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFBPUlRfQ19NQVNLIFwKKwkoKFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OIFwKKwkgIHwgVVNCX1BPUlRfU1RBVF9DX0VOQUJMRSBcCisJICB8IFVTQl9QT1JUX1NUQVRfQ19TVVNQRU5EIFwKKwkgIHwgVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UIFwKKwkgIHwgVVNCX1BPUlRfU1RBVF9DX1JFU0VUKSA8PCAxNikKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxtb3N0bHkgdGhlIHNhbWUgYXMgZHVtbXlfaGNkLmM6ZHVtbXlfaHViX3N0YXR1cygpIHdpdGhvdXQKKyAqIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQuIEJ1dCwgaXQgaXMgbW9kaWZpZWQgdG8gcHJvdmlkZSBtdWx0aXBsZSBwb3J0cy4KKyAqCisgKiBAYnVmOiBhIGJpdG1hcCB0byBzaG93IHdoaWNoIHBvcnQgc3RhdHVzIGhhcyBiZWVuIGNoYW5nZWQuCisgKiAgYml0ICAwOiByZXNlcnZlZCBvciB1c2VkIGZvciBhbm90aGVyIHB1cnBvc2U/CisgKiAgYml0ICAxOiB0aGUgc3RhdHVzIG9mIHBvcnQgMCBoYXMgYmVlbiBjaGFuZ2VkLgorICogIGJpdCAgMjogdGhlIHN0YXR1cyBvZiBwb3J0IDEgaGFzIGJlZW4gY2hhbmdlZC4KKyAqICAuLi4KKyAqICBiaXQgIDc6IHRoZSBzdGF0dXMgb2YgcG9ydCA2IGhhcyBiZWVuIGNoYW5nZWQuCisgKiAgYml0ICA4OiB0aGUgc3RhdHVzIG9mIHBvcnQgNyBoYXMgYmVlbiBjaGFuZ2VkLgorICogIC4uLgorICogIGJpdCAxNTogdGhlIHN0YXR1cyBvZiBwb3J0IDE0IGhhcyBiZWVuIGNoYW5nZWQuCisgKgorICogU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb3J0cyBpcyAzMSAoIHBvcnQgMCB0byBwb3J0IDMwKSA/CisgKgorICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgYWN0dWFsIHRyYW5zZmVyZWQgbGVuZ3RoIGluIGJ5dGUuIElmIG5vdGhpbmcgaGFzCisgKiBiZWVuIGNoYW5nZWQsIHJldHVybiAwLiBJbiB0aGUgY2FzZSB0aGF0IHRoZSBudW1iZXIgb2YgcG9ydHMgaXMgbGVzcyB0aGFuIG9yCisgKiBlcXVhbCB0byA2IChWSENJX05QT1JUUz09NyksIHJldHVybiAxLgorICoKKyAqLworc3RhdGljIGludCB2aGNpX2h1Yl9zdGF0dXMoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB2aGNpX2hjZAkqdmhjaTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJcmV0dmFsID0gMDsKKworCS8qIHRoZSBlbm91Z2ggYnVmZmVyIGlzIGFsbG9jYXRlZCBhY2NvcmRpbmcgdG8gVVNCX01BWENISUxEUkVOICovCisJdW5zaWduZWQgbG9uZwkqZXZlbnRfYml0cyA9ICh1bnNpZ25lZCBsb25nICopIGJ1ZjsKKwlpbnQJCXJocG9ydDsKKwlpbnQJCWNoYW5nZWQgPSAwOworCisKKwkqZXZlbnRfYml0cyA9IDA7CisKKwl2aGNpID0gaGNkX3RvX3ZoY2koaGNkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aGNpLT5sb2NrLCBmbGFncyk7CisJaWYgKCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpIHsKKwkJZGJnX3ZoY2lfcmgoImh3IGFjY2Vzc2libGUgZmxhZyBpbiBvbj9cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogY2hlY2sgcHNldWRvIHN0YXR1cyByZWdpc3RlciBmb3IgZWFjaCBwb3J0ICovCisJZm9yIChyaHBvcnQgPSAwOyByaHBvcnQgPCBWSENJX05QT1JUUzsgcmhwb3J0KyspIHsKKwkJaWYgKCh2aGNpLT5wb3J0X3N0YXR1c1tyaHBvcnRdICYgUE9SVF9DX01BU0spKSB7CisJCQkvKiBUaGUgc3RhdHVzIG9mIGEgcG9ydCBoYXMgYmVlbiBjaGFuZ2VkLCAqLworCQkJZGJnX3ZoY2lfcmgoInBvcnQgJWQgaXMgY2hhbmdlZFxuIiwgcmhwb3J0KTsKKworCQkJKmV2ZW50X2JpdHMgfD0gMSA8PCAocmhwb3J0ICsgMSk7CisJCQljaGFuZ2VkID0gMTsKKwkJfQorCX0KKworCXVpbmZvKCJjaGFuZ2VkICVkXG4iLCBjaGFuZ2VkKTsKKworCWlmIChoY2QtPnN0YXRlID09IEhDX1NUQVRFX1NVU1BFTkRFRCkKKwkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaGNkKTsKKworCWlmIChjaGFuZ2VkKQorCQlyZXR2YWwgPSAxICsgKFZIQ0lfTlBPUlRTIC8gOCk7CisJZWxzZQorCQlyZXR2YWwgPSAwOworCitkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZoY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBTZWUgaHViX2NvbmZpZ3VyZSBpbiBodWIuYyAqLworc3RhdGljIGlubGluZSB2b2lkIGh1Yl9kZXNjcmlwdG9yKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykpOworCWRlc2MtPmJEZXNjcmlwdG9yVHlwZSA9IDB4Mjk7CisJZGVzYy0+YkRlc2NMZW5ndGggPSA5OworCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSAoX19mb3JjZSBfX3UxNikKKwkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKSk7CisJZGVzYy0+Yk5iclBvcnRzID0gVkhDSV9OUE9SVFM7CisJZGVzYy0+Yml0bWFwWzBdID0gMHhmZjsKKwlkZXNjLT5iaXRtYXBbMV0gPSAweGZmOworfQorCitzdGF0aWMgaW50IHZoY2lfaHViX2NvbnRyb2woc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVSZXEsIHUxNiB3VmFsdWUsCisJCQkgICAgdTE2IHdJbmRleCwgY2hhciAqYnVmLCB1MTYgd0xlbmd0aCkKK3sKKwlzdHJ1Y3QgdmhjaV9oY2QJKmR1bTsKKwlpbnQgICAgICAgICAgICAgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJaW50CQlyaHBvcnQ7CisKKwl1MzIgcHJldl9wb3J0X3N0YXR1c1tWSENJX05QT1JUU107CisKKwlpZiAoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKSkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkvKgorCSAqIE5PVEU6CisJICogd0luZGV4IHNob3dzIHRoZSBwb3J0IG51bWJlciBhbmQgYmVnaW5zIGZyb20gMS4KKwkgKi8KKwlkYmdfdmhjaV9yaCgidHlwZVJlcSAleCB3VmFsdWUgJXggd0luZGV4ICV4XG4iLCB0eXBlUmVxLCB3VmFsdWUsCisJCQkJCQkJCXdJbmRleCk7CisJaWYgKHdJbmRleCA+IFZIQ0lfTlBPUlRTKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIHBvcnQgbnVtYmVyICVkXG4iLCBfX2Z1bmNfXywgd0luZGV4KTsKKwlyaHBvcnQgPSAoKF9fdTgpKHdJbmRleCAmIDB4MDBmZikpIC0gMTsKKworCWR1bSA9IGhjZF90b192aGNpKGhjZCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHVtLT5sb2NrLCBmbGFncyk7CisKKwkvKiBzdG9yZSBvbGQgc3RhdHVzIGFuZCBjb21wYXJlIG5vdyBhbmQgb2xkIGxhdGVyICovCisJaWYgKGRiZ19mbGFnX3ZoY2lfcmgpIHsKKwkJaW50IGkgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgVkhDSV9OUE9SVFM7IGkrKykKKwkJCXByZXZfcG9ydF9zdGF0dXNbaV0gPSBkdW0tPnBvcnRfc3RhdHVzW2ldOworCX0KKworCXN3aXRjaCAodHlwZVJlcSkgeworCWNhc2UgQ2xlYXJIdWJGZWF0dXJlOgorCQlkYmdfdmhjaV9yaCgiIENsZWFySHViRmVhdHVyZVxuIik7CisJCWJyZWFrOworCWNhc2UgQ2xlYXJQb3J0RmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlpZiAoZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdICYgVVNCX1BPUlRfU1RBVF9TVVNQRU5EKSB7CisJCQkJLyogMjBtc2VjIHNpZ25hbGluZyAqLworCQkJCWR1bS0+cmVzdW1pbmcgPSAxOworCQkJCWR1bS0+cmVfdGltZW91dCA9CisJCQkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQlkYmdfdmhjaV9yaCgiIENsZWFyUG9ydEZlYXR1cmU6IFVTQl9QT1JUX0ZFQVRfUE9XRVJcbiIpOworCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdID0gMDsKKwkJCS8qIGR1bS0+YWRkcmVzcyA9IDA7ICovCisJCQkvKiBkdW0tPmhkZXYgPSAwOyAqLworCQkJZHVtLT5yZXN1bWluZyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfUkVTRVQ6CisJCQlkYmdfdmhjaV9yaCgiIENsZWFyUG9ydEZlYXR1cmU6ICIKKwkJCQkJIlVTQl9QT1JUX0ZFQVRfQ19SRVNFVFxuIik7CisJCQlzd2l0Y2ggKGR1bS0+dmRldltyaHBvcnRdLnNwZWVkKSB7CisJCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkJVVNCX1BPUlRfU1RBVF9ISUdIX1NQRUVEOworCQkJCWJyZWFrOworCQkJY2FzZSBVU0JfU1BFRURfTE9XOgorCQkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkJVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQlkZWZhdWx0OgorCQkJZGJnX3ZoY2lfcmgoIiBDbGVhclBvcnRGZWF0dXJlOiBkZWZhdWx0ICV4XG4iLCB3VmFsdWUpOworCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdICY9IH4oMSA8PCB3VmFsdWUpOworCQl9CisJCWJyZWFrOworCWNhc2UgR2V0SHViRGVzY3JpcHRvcjoKKwkJZGJnX3ZoY2lfcmgoIiBHZXRIdWJEZXNjcmlwdG9yXG4iKTsKKwkJaHViX2Rlc2NyaXB0b3IoKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKikgYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRIdWJTdGF0dXM6CisJCWRiZ192aGNpX3JoKCIgR2V0SHViU3RhdHVzXG4iKTsKKwkJKihfX2xlMzIgKikgYnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigwKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRQb3J0U3RhdHVzOgorCQlkYmdfdmhjaV9yaCgiIEdldFBvcnRTdGF0dXMgcG9ydCAleFxuIiwgd0luZGV4KTsKKwkJaWYgKHdJbmRleCA+IFZIQ0lfTlBPUlRTIHx8IHdJbmRleCA8IDEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgcG9ydCBudW1iZXIgJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHdJbmRleCk7CisJCQlyZXR2YWwgPSAtRVBJUEU7CisJCX0KKworCQkvKiB3ZSBkbyBubyBjYXJlIG9mIHJlc3VtZS4gKi8KKworCQkvKiB3aG9ldmVyIHJlc2V0cyBvciByZXN1bWVzIG11c3QgR2V0UG9ydFN0YXR1cyB0bworCQkgKiBjb21wbGV0ZSBpdCEhCisJCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQlpZiAoZHVtLT5yZXN1bWluZyAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIGR1bS0+cmVfdGltZW91dCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vdCB5ZXRcbiIsIF9fZnVuY19fKTsKKwkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkoMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCk7CisJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gJj0KKwkJCQkJfigxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CisJCQlkdW0tPnJlc3VtaW5nID0gMDsKKwkJCWR1bS0+cmVfdGltZW91dCA9IDA7CisJCQkvKiBpZiAoZHVtLT5kcml2ZXIgJiYgZHVtLT5kcml2ZXItPnJlc3VtZSkgeworCQkJICoJc3Bpbl91bmxvY2sgKCZkdW0tPmxvY2spOworCQkJICoJZHVtLT5kcml2ZXItPnJlc3VtZSAoJmR1bS0+Z2FkZ2V0KTsKKwkJCSAqCXNwaW5fbG9jayAoJmR1bS0+bG9jayk7CisJCQkgKiB9ICovCisJCX0KKworCQlpZiAoKGR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfUkVTRVQpKSAhPQorCQkJCTAgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBkdW0tPnJlX3RpbWVvdXQpKSB7CisJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0KKwkJCQkJCSgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19SRVNFVCk7CisJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gJj0KKwkJCQkJCX4oMSA8PCBVU0JfUE9SVF9GRUFUX1JFU0VUKTsKKwkJCWR1bS0+cmVfdGltZW91dCA9IDA7CisKKwkJCWlmIChkdW0tPnZkZXZbcmhwb3J0XS51ZC5zdGF0dXMgPT0KKwkJCQkJCQlWREVWX1NUX05PVEFTU0lHTkVEKSB7CisJCQkJZGJnX3ZoY2lfcmgoIiBlbmFibGUgcmhwb3J0ICVkIChzdGF0dXMgJXUpXG4iLAorCQkJCQkJcmhwb3J0LAorCQkJCQkJZHVtLT52ZGV2W3JocG9ydF0udWQuc3RhdHVzKTsKKwkJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0KKwkJCQkJCQlVU0JfUE9SVF9TVEFUX0VOQUJMRTsKKwkJCX0KKyNpZiAwCisJCQlpZiAoZHVtLT5kcml2ZXIpIHsKKworCQkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkJCVVTQl9QT1JUX1NUQVRfRU5BQkxFOworCQkJCS8qIGdpdmUgaXQgdGhlIGJlc3Qgc3BlZWQgd2UgYWdyZWUgb24gKi8KKwkJCQlkdW0tPmdhZGdldC5zcGVlZCA9IGR1bS0+ZHJpdmVyLT5zcGVlZDsKKwkJCQlkdW0tPmdhZGdldC5lcDAtPm1heHBhY2tldCA9IDY0OworCQkJCXN3aXRjaCAoZHVtLT5nYWRnZXQuc3BlZWQpIHsKKwkJCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0KKwkJCQkJVVNCX1BPUlRfU1RBVF9ISUdIX1NQRUVEOworCQkJCQlicmVhazsKKwkJCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQkJCWR1bS0+Z2FkZ2V0LmVwMC0+bWF4cGFja2V0ID0gODsKKwkJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCVVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlkdW0tPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisjZW5kaWYKKworCQl9CisJCSgodTE2ICopIGJ1ZilbMF0gPSBjcHVfdG9fbGUxNihkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0pOworCQkoKHUxNiAqKSBidWYpWzFdID0KKwkJCQljcHVfdG9fbGUxNihkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gPj4gMTYpOworCisJCWRiZ192aGNpX3JoKCIgR2V0UG9ydFN0YXR1cyBieWUgJXggJXhcbiIsICgodTE2ICopYnVmKVswXSwKKwkJCQkJCQkoKHUxNiAqKWJ1ZilbMV0pOworCQlicmVhazsKKwljYXNlIFNldEh1YkZlYXR1cmU6CisJCWRiZ192aGNpX3JoKCIgU2V0SHViRmVhdHVyZVxuIik7CisJCXJldHZhbCA9IC1FUElQRTsKKwkJYnJlYWs7CisJY2FzZSBTZXRQb3J0RmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlkYmdfdmhjaV9yaCgiIFNldFBvcnRGZWF0dXJlOiAiCisJCQkJCSJVU0JfUE9SVF9GRUFUX1NVU1BFTkRcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm90IHlldFxuIiwgX19mdW5jX18pOworI2lmIDAKKwkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkJKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKTsKKwkJCWlmIChkdW0tPmRyaXZlci0+c3VzcGVuZCkgeworCQkJCXNwaW5fdW5sb2NrKCZkdW0tPmxvY2spOworCQkJCWR1bS0+ZHJpdmVyLT5zdXNwZW5kKCZkdW0tPmdhZGdldCk7CisJCQkJc3Bpbl9sb2NrKCZkdW0tPmxvY2spOworCQkJfQorI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgorCQkJZGJnX3ZoY2lfcmgoIiBTZXRQb3J0RmVhdHVyZTogVVNCX1BPUlRfRkVBVF9SRVNFVFxuIik7CisJCQkvKiBpZiBpdCdzIGFscmVhZHkgcnVubmluZywgZGlzY29ubmVjdCBmaXJzdCAqLworCQkJaWYgKGR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKSB7CisJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdICY9CisJCQkJCQl+KFVTQl9QT1JUX1NUQVRfRU5BQkxFIHwKKwkJCQkJCSAgVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQgfAorCQkJCQkJICBVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQpOworI2lmIDAKKwkJCQlpZiAoZHVtLT5kcml2ZXIpIHsKKwkJCQkJZGV2X2RiZyhoYXJkd2FyZSwgImRpc2Nvbm5lY3RcbiIpOworCQkJCQlzdG9wX2FjdGl2aXR5KGR1bSwgZHVtLT5kcml2ZXIpOworCQkJCX0KKyNlbmRpZgorCisJCQkJLyogRklYTUUgdGVzdCB0aGF0IGNvZGUgcGF0aCEgKi8KKwkJCX0KKwkJCS8qIDUwbXNlYyByZXNldCBzaWduYWxpbmcgKi8KKwkJCWR1bS0+cmVfdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwKTsKKworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJZGVmYXVsdDoKKwkJCWRiZ192aGNpX3JoKCIgU2V0UG9ydEZlYXR1cmU6IGRlZmF1bHQgJWRcbiIsIHdWYWx1ZSk7CisJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0gKDEgPDwgd1ZhbHVlKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRlZmF1bHQ6IG5vIHN1Y2ggcmVxdWVzdFxuIiwgX19mdW5jX18pOworCQkvKiBkZXZfZGJnIChoYXJkd2FyZSwKKwkJICoJCSJodWIgY29udHJvbCByZXElMDR4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJICoJCXR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LCB3TGVuZ3RoKTsgKi8KKworCQkvKiAicHJvdG9jb2wgc3RhbGwiIG9uIGVycm9yICovCisJCXJldHZhbCA9IC1FUElQRTsKKwl9CisKKwlpZiAoZGJnX2ZsYWdfdmhjaV9yaCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAicG9ydCAlZFxuIiwgcmhwb3J0KTsKKwkJZHVtcF9wb3J0X3N0YXR1cyhwcmV2X3BvcnRfc3RhdHVzW3JocG9ydF0pOworCQlkdW1wX3BvcnRfc3RhdHVzKGR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSk7CisJfQorCWRiZ192aGNpX3JoKCIgYnllXG4iKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR1bS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgdmhjaV9kZXZpY2UgKmdldF92ZGV2KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCBpOworCisJaWYgKCF1ZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBWSENJX05QT1JUUzsgaSsrKQorCQlpZiAodGhlX2NvbnRyb2xsZXItPnZkZXZbaV0udWRldiA9PSB1ZGV2KQorCQkJcmV0dXJuIHBvcnRfdG9fdmRldihpKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCB2aGNpX3R4X3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0gZ2V0X3ZkZXYodXJiLT5kZXYpOworCXN0cnVjdCB2aGNpX3ByaXYgKnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCisJaWYgKCF2ZGV2KSB7CisJCWVycigiY291bGQgbm90IGdldCB2aXJ0dWFsIGRldmljZSIpOworCQkvKiBCVUcoKTsgKi8KKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWcpOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aGNpX3ByaXYpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXByaXYpIHsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIm1hbGxvYyB2aGNpX3ByaXZcbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWcpOworCQl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCXJldHVybjsKKwl9CisKKwlwcml2LT5zZXFudW0gPSBhdG9taWNfaW5jX3JldHVybigmdGhlX2NvbnRyb2xsZXItPnNlcW51bSk7CisJaWYgKHByaXYtPnNlcW51bSA9PSAweGZmZmYpCisJCXVpbmZvKCJzZXFudW0gbWF4XG4iKTsKKworCXByaXYtPnZkZXYgPSB2ZGV2OworCXByaXYtPnVyYiA9IHVyYjsKKworCXVyYi0+aGNwcml2ID0gKHZvaWQgKikgcHJpdjsKKworCisJbGlzdF9hZGRfdGFpbCgmcHJpdi0+bGlzdCwgJnZkZXYtPnByaXZfdHgpOworCisJd2FrZV91cCgmdmRldi0+d2FpdHFfdHgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZyk7Cit9CisKK3N0YXRpYyBpbnQgdmhjaV91cmJfZW5xdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkgICAgZ2ZwX3QgbWVtX2ZsYWdzKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1cmItPmRldi0+ZGV2OworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmdfdmhjaV9oYygiZW50ZXIsIHVzYl9oY2QgJXAgdXJiICVwIG1lbV9mbGFncyAlZFxuIiwKKwkJICAgIGhjZCwgdXJiLCBtZW1fZmxhZ3MpOworCisJLyogcGF0Y2ggdG8gdXNiX3NnX2luaXQoKSBpcyBpbiAyLjUuNjAgKi8KKwlCVUdfT04oIXVyYi0+dHJhbnNmZXJfYnVmZmVyICYmIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKworCS8qIGNoZWNrIEhDIGlzIGFjdGl2ZSBvciBub3QgKi8KKwlpZiAoIUhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpIHsKKwkJZGV2X2VycihkZXYsICJIQyBpcyBub3QgcnVubmluZ1xuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICh1cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJZGV2X2VycihkZXYsICJVUkIgYWxyZWFkeSB1bmxpbmtlZCEsIHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gdXJiLT5zdGF0dXM7CisJfQorCisJcmV0ID0gdXNiX2hjZF9saW5rX3VyYl90b19lcChoY2QsIHVyYik7CisJaWYgKHJldCkKKwkJZ290byBub19uZWVkX3VubGluazsKKworCS8qCisJICogVGhlIGVudW1lbGF0aW9uIHByb2Nlc3MgaXMgYXMgZm9sbG93czsKKwkgKgorCSAqICAxLiBHZXRfRGVzY3JpcHRvciByZXF1ZXN0IHRvIERldkFkZHJzKDApIEVuZFBvaW50KDApCisJICogICAgIHRvIGdldCBtYXggcGFja2V0IGxlbmd0aCBvZiBkZWZhdWx0IHBpcGUKKwkgKgorCSAqICAyLiBTZXRfQWRkcmVzcyByZXF1ZXN0IHRvIERldkFkZHIoMCkgRW5kUG9pbnQoMCkKKwkgKgorCSAqLworCisJaWYgKHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSkgPT0gMCkgeworCQlfX3U4IHR5cGUgPSB1c2JfcGlwZXR5cGUodXJiLT5waXBlKTsKKwkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybHJlcSA9CisJCQkJKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9CisJCQkJcG9ydF90b192ZGV2KHRoZV9jb250cm9sbGVyLT5wZW5kaW5nX3BvcnQpOworCisJCWlmICh0eXBlICE9IFBJUEVfQ09OVFJPTCB8fCAhY3RybHJlcSkgeworCQkJZGV2X2VycihkZXYsICJpbnZhbGlkIHJlcXVlc3QgdG8gZGV2bnVtIDBcbiIpOworCQkJcmV0ID0gRUlOVkFMOworCQkJZ290byBub19uZWVkX3htaXQ7CisJCX0KKworCQlzd2l0Y2ggKGN0cmxyZXEtPmJSZXF1ZXN0KSB7CisJCWNhc2UgVVNCX1JFUV9TRVRfQUREUkVTUzoKKwkJCS8qIHNldF9hZGRyZXNzIG1heSBjb21lIHdoZW4gYSBkZXZpY2UgaXMgcmVzZXQgKi8KKwkJCWRldl9pbmZvKGRldiwgIlNldEFkZHJlc3MgUmVxdWVzdCAoJWQpIHRvIHBvcnQgJWRcbiIsCisJCQkJIGN0cmxyZXEtPndWYWx1ZSwgdmRldi0+cmhwb3J0KTsKKworCQkJdmRldi0+dWRldiA9IHVyYi0+ZGV2OworCisJCQlzcGluX2xvY2soJnZkZXYtPnVkLmxvY2spOworCQkJdmRldi0+dWQuc3RhdHVzID0gVkRFVl9TVF9VU0VEOworCQkJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOworCisJCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQkJLyogVGhpcyByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuICovCisJCQkJLyogSWYgbm90IC1FSU5QUk9HUkVTUywgcG9zc2libHkgdW5saW5rZWQuICovCisJCQkJdXJiLT5zdGF0dXMgPSAwOworCQkJfQorCisJCQlnb3RvIG5vX25lZWRfeG1pdDsKKworCQljYXNlIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisJCQlpZiAoY3RybHJlcS0+d1ZhbHVlID09IChVU0JfRFRfREVWSUNFIDw8IDgpKQorCQkJCWRiZ192aGNpX2hjKCJOb3QgeWV0PzogIgorCQkJCQkJIkdldF9EZXNjcmlwdG9yIHRvIGRldmljZSAwICIKKwkJCQkJCSIoZ2V0IG1heCBwaXBlIHNpemUpXG4iKTsKKworCQkJLyogRklYTUU6IHJlZmVyZW5jZSBjb3VudD8gKHVzYl9nZXRfZGV2KCkpICovCisJCQl2ZGV2LT51ZGV2ID0gdXJiLT5kZXY7CisJCQlnb3RvIG91dDsKKworCQlkZWZhdWx0OgorCQkJLyogTk9UIFJFQUNIRUQgKi8KKwkJCWRldl9lcnIoZGV2LCAiaW52YWxpZCByZXF1ZXN0IHRvIGRldm51bSAwIGJSZXF1ZXN0ICV1LCAiCisJCQkJIndWYWx1ZSAldVxuIiwgY3RybHJlcS0+YlJlcXVlc3QsCisJCQkJY3RybHJlcS0+d1ZhbHVlKTsKKwkJCXJldCA9ICAtRUlOVkFMOworCQkJZ290byBub19uZWVkX3htaXQ7CisJCX0KKworCX0KKworb3V0OgorCXZoY2lfdHhfdXJiKHVyYik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CisKK25vX25lZWRfeG1pdDoKKwl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7Citub19uZWVkX3VubGluazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJdXNiX2hjZF9naXZlYmFja191cmIodmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpLCB1cmIsIHVyYi0+c3RhdHVzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogdmhjaV9yeCBnaXZlcyBiYWNrIHRoZSB1cmIgYWZ0ZXIgcmVjZWl2aW5nIHRoZSByZXBseSBvZiB0aGUgdXJiLiAgSWYgYW4KKyAqIHVubGluayBwZHUgaXMgc2VudCBvciBub3QsIHZoY2lfcnggcmVjZWl2ZXMgYSBub3JtYWwgcmV0dXJuIHBkdSBhbmQgZ2l2ZXMKKyAqIGJhY2sgaXRzIHVyYi4gRm9yIHRoZSBkcml2ZXIgdW5saW5raW5nIHRoZSB1cmIsIHRoZSBjb250ZW50IG9mIHRoZSB1cmIgaXMKKyAqIG5vdCBpbXBvcnRhbnQsIGJ1dCB0aGUgY2FsbGluZyB0byBpdHMgY29tcGxldGlvbiBoYW5kbGVyIGlzIGltcG9ydGFudDsgdGhlCisgKiBjb21wbGV0aW9uIG9mIHVubGlua2luZyBpcyBub3RpZmllZCBieSB0aGUgY29tcGxldGlvbiBoYW5kbGVyLgorICoKKyAqCisgKiBDTElFTlQgU0lERQorICoKKyAqIC0gV2hlbiB2aGNpX2hjZCByZWNlaXZlcyBSRVRfU1VCTUlULAorICoKKyAqCS0gY2FzZSAxYSkuIHRoZSB1cmIgb2YgdGhlIHBkdSBpcyBub3QgdW5saW5raW5nLgorICoJCS0gbm9ybWFsIGNhc2UKKyAqCQk9PiBqdXN0IGdpdmUgYmFjayB0aGUgdXJiCisgKgorICoJLSBjYXNlIDFiKS4gdGhlIHVyYiBvZiB0aGUgcGR1IGlzIHVubGlua2luZy4KKyAqCQktIHVzYmlwLmtvIHdpbGwgcmV0dXJuIGEgcmVwbHkgb2YgdGhlIHVubGlua2luZyByZXF1ZXN0LgorICoJCT0+IGdpdmUgYmFjayB0aGUgdXJiIG5vdyBhbmQgZ28gdG8gY2FzZSAyYikuCisgKgorICogLSBXaGVuIHZoY2lfaGNkIHJlY2VpdmVzIFJFVF9VTkxJTkssCisgKgorICoJLSBjYXNlIDJhKS4gYSBzdWJtaXQgcmVxdWVzdCBpcyBzdGlsbCBwZW5kaW5nIGluIHZoY2lfaGNkLgorICoJCS0gdXJiIHdhcyByZWFsbHkgcGVuZGluZyBpbiB1c2JpcC5rbyBhbmQgdXJiX3VubGlua191cmIoKSB3YXMKKyAqCQkgIGNvbXBsZXRlZCB0aGVyZS4KKyAqCQk9PiBmcmVlIGEgcGVuZGluZyBzdWJtaXQgcmVxdWVzdAorICoJCT0+IG5vdGlmeSB1bmxpbmsgY29tcGxldGVuZXNzIGJ5IGdpdmluZyBiYWNrIHRoZSB1cmIKKyAqCisgKgktIGNhc2UgMmIpLiBhIHN1Ym1pdCByZXF1ZXN0IGlzICpub3QqIHBlbmRpbmcgaW4gdmhjaV9oY2QuCisgKgkJLSB1cmIgd2FzIGFscmVhZHkgZ2l2ZW4gYmFjayB0byB0aGUgY29yZSBkcml2ZXIuCisgKgkJPT4gZG8gbm90IGdpdmUgYmFjayB0aGUgdXJiCisgKgorICoKKyAqIFNFUlZFUiBTSURFCisgKgorICogLSBXaGVuIHVzYmlwIHJlY2VpdmVzIENNRF9VTkxJTkssCisgKgorICoJLSBjYXNlIDNhKS4gdGhlIHVyYiBvZiB0aGUgdW5saW5rIHJlcXVlc3QgaXMgbm93IGluIHN1Ym1pc3Npb24uCisgKgkJPT4gZG8gdXNiX3VubGlua191cmIoKS4KKyAqCQk9PiBhZnRlciB0aGUgdW5saW5rIGlzIGNvbXBsZXRlZCwgc2VuZCBSRVRfVU5MSU5LLgorICoKKyAqCS0gY2FzZSAzYikuIHRoZSB1cmIgb2YgdGhlIHVubGluayByZXF1ZXN0IGlzIG5vdCBpbiBzdWJtaXNzaW9uLgorICoJCS0gbWF5IGJlIGFscmVhZHkgY29tcGxldGVkIG9yIG5ldmVyIGJlIHJlY2VpdmVkCisgKgkJPT4gc2VuZCBSRVRfVU5MSU5LCisgKgorICovCitzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHZoY2lfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXY7CisKKwl1aW5mbygidmhjaV9oY2Q6IGRlcXVldWUgYSB1cmIgJXBcbiIsIHVyYik7CisKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJcHJpdiA9IHVyYi0+aGNwcml2OworCWlmICghcHJpdikgeworCQkvKiBVUkIgd2FzIG5ldmVyIGxpbmtlZCEgb3Igd2lsbCBiZSBzb29uIGdpdmVuIGJhY2sgYnkKKwkJICogdmhjaV9yeC4gKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJeworCQlpbnQgcmV0ID0gMDsKKwkJcmV0ID0gdXNiX2hjZF9jaGVja191bmxpbmtfdXJiKGhjZCwgdXJiLCBzdGF0dXMpOworCQlpZiAocmV0KSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkgLyogc2VuZCB1bmxpbmsgcmVxdWVzdCBoZXJlPyAqLworCXZkZXYgPSBwcml2LT52ZGV2OworCisJaWYgKCF2ZGV2LT51ZC50Y3Bfc29ja2V0KSB7CisJCS8qIHRjcCBjb25uZWN0aW9uIGlzIGNsb3NlZCAqLworCQl1bnNpZ25lZCBsb25nIGZsYWdzMjsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFnczIpOworCisJCXVpbmZvKCJ2aGNpX2hjZDogZGV2aWNlICVwIHNlZW1zIHRvIGJlIGRpc2Nvbm5lY3RlZFxuIiwgdmRldik7CisJCWxpc3RfZGVsKCZwcml2LT5saXN0KTsKKwkJa2ZyZWUocHJpdik7CisJCXVyYi0+aGNwcml2ID0gTlVMTDsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzMik7CisKKwl9IGVsc2UgeworCQkvKiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSAqLworCQl1bnNpZ25lZCBsb25nIGZsYWdzMjsKKwkJc3RydWN0IHZoY2lfdW5saW5rICp1bmxpbms7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MyKTsKKworCQkvKiBzZXR1cCBDTURfVU5MSU5LIHBkdSAqLworCQl1bmxpbmsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmhjaV91bmxpbmspLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCF1bmxpbmspIHsKKwkJCXVlcnIoIm1hbGxvYyB2aGNpX3VubGlua1xuIik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzMik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCQkJdXNiaXBfZXZlbnRfYWRkKCZ2ZGV2LT51ZCwgVkRFVl9FVkVOVF9FUlJPUl9NQUxMT0MpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQl1bmxpbmstPnNlcW51bSA9IGF0b21pY19pbmNfcmV0dXJuKCZ0aGVfY29udHJvbGxlci0+c2VxbnVtKTsKKwkJaWYgKHVubGluay0+c2VxbnVtID09IDB4ZmZmZikKKwkJCXVpbmZvKCJzZXFudW0gbWF4XG4iKTsKKworCQl1bmxpbmstPnVubGlua19zZXFudW0gPSBwcml2LT5zZXFudW07CisKKwkJdWluZm8oInZoY2lfaGNkOiBkZXZpY2UgJXAgc2VlbXMgdG8gYmUgc3RpbGwgY29ubmVjdGVkXG4iLAorCQkJCQkJCQkJdmRldik7CisKKwkJLyogc2VuZCBjbWRfdW5saW5rIGFuZCB0cnkgdG8gY2FuY2VsIHRoZSBwZW5kaW5nIFVSQiBpbiB0aGUKKwkJICogcGVlciAqLworCQlsaXN0X2FkZF90YWlsKCZ1bmxpbmstPmxpc3QsICZ2ZGV2LT51bmxpbmtfdHgpOworCQl3YWtlX3VwKCZ2ZGV2LT53YWl0cV90eCk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFnczIpOworCX0KKworCisJLyoKKwkgKiBJZiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSwgd2UgaGF2ZSBzZW50IENNRF9VTkxJTksuCisJICogdmhjaV9yeCB3aWxsIHJlY2VpdmUgUkVUX1VOTElOSyBhbmQgZ2l2ZSBiYWNrIHRoZSBVUkIuCisJICogT3RoZXJ3aXNlLCB3ZSBnaXZlIGJhY2sgaXQgaGVyZS4KKwkgKi8KKwlpZiAoIXZkZXYtPnVkLnRjcF9zb2NrZXQpIHsKKwkJLyogdGNwIGNvbm5lY3Rpb24gaXMgY2xvc2VkICovCisJCXVpbmZvKCJ2aGNpX2hjZDogdmhjaV91cmJfZGVxdWV1ZSgpIGdpdmVzIGJhY2sgdXJiICVwXG4iLCB1cmIpOworCisJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCQl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYiwKKwkJCQkJCQkJdXJiLT5zdGF0dXMpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJZGJnX3ZoY2lfaGMoImxlYXZlXG4iKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCB2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHZoY2lfdW5saW5rICp1bmxpbmssICp0bXA7CisKKwlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZ2ZGV2LT51bmxpbmtfdHgsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CisJCWtmcmVlKHVubGluayk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmdmRldi0+dW5saW5rX3J4LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOworCQlrZnJlZSh1bmxpbmspOworCX0KKworCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworfQorCisvKgorICogVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IG9ubHkgb25lIGNvbnRleHQgYmVnaW5zIGNsZWFudXAuCisgKiBUaGlzIGlzIHdoeSBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCBiZWNvbWUgc2ltcGxlLgorICogV2UgZG8gbm90IHdhbnQgdG8gY29uc2lkZXIgcmFjZSBjb25kaXRpb24gYXMgcG9zc2libGUuCisgKi8KK3N0YXRpYyB2b2lkIHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbihzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSBjb250YWluZXJfb2YodWQsIHN0cnVjdCB2aGNpX2RldmljZSwgdWQpOworCisJLyogbmVlZCB0aGlzPyBzZWUgc3R1Yl9kZXYuYyAqLworCWlmICh1ZC0+dGNwX3NvY2tldCkgeworCQl1ZGJnKCJzaHV0ZG93biB0Y3Bfc29ja2V0ICVwXG4iLCB1ZC0+dGNwX3NvY2tldCk7CisJCWtlcm5lbF9zb2NrX3NodXRkb3duKHVkLT50Y3Bfc29ja2V0LCBTSFVUX1JEV1IpOworCX0KKworCXVzYmlwX3N0b3BfdGhyZWFkcygmdmRldi0+dWQpOworCXVpbmZvKCJzdG9wIHRocmVhZHNcbiIpOworCisJLyogYWN0aXZlIGNvbm5lY3Rpb24gaXMgY2xvc2VkICovCisJaWYgKHZkZXYtPnVkLnRjcF9zb2NrZXQgIT0gTlVMTCkgeworCQlzb2NrX3JlbGVhc2UodmRldi0+dWQudGNwX3NvY2tldCk7CisJCXZkZXYtPnVkLnRjcF9zb2NrZXQgPSBOVUxMOworCX0KKwl1aW5mbygicmVsZWFzZSBzb2NrZXRcbiIpOworCisJdmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAodmRldik7CisKKwkvKgorCSAqIHJoX3BvcnRfZGlzY29ubmVjdCgpIGlzIGEgdHJpZ2dlciBvZiAuLi4KKwkgKiAgIHVzYl9kaXNhYmxlX2RldmljZSgpOgorCSAqCWRpc2FibGUgYWxsIHRoZSBlbmRwb2ludHMgZm9yIGEgVVNCIGRldmljZS4KKwkgKiAgIHVzYl9kaXNhYmxlX2VuZHBvaW50KCk6CisJICoJZGlzYWJsZSBlbmRwb2ludHMuIHBlbmRpbmcgdXJicyBhcmUgdW5saW5rZWQoZGVxdWV1ZWQpLgorCSAqCisJICogTk9URTogQWZ0ZXIgY2FsbGluZyByaF9wb3J0X2Rpc2Nvbm5lY3QoKSwgdGhlIFVTQiBkZXZpY2UgZHJpdmVycyBvZiBhCisJICogZGV0ZWNoZWQgZGV2aWNlIHNob3VsZCByZWxlYXNlIHVzZWQgdXJicyBpbiBhIGNsZWFudXAgZnVuY3Rpb24oaS5lLgorCSAqIHh4eF9kaXNjb25uZWN0KCkpLiBUaGVyZWZvcmUsIHZoY2lfaGNkIGRvZXMgbm90IG5lZWQgdG8gcmVsZWFzZQorCSAqIHB1c2hlZCB1cmJzIGFuZCB0aGVpciBwcml2YXRlIGRhdGEgaW4gdGhpcyBmdW5jdGlvbi4KKwkgKgorCSAqIE5PVEU6IHZoY2lfZGVxdWV1ZSgpIG11c3QgYmUgY29uc2lkZXJlZCBjYXJlZnVsbHkuIFdoZW4gc2h1dGRvd25pbmcKKwkgKiBhIGNvbm5lY3Rpb24sIHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbigpIGV4cGVjdHMgdmhjaV9kZXF1ZXVlKCkKKwkgKiBnaXZlcyBiYWNrIHB1c2hlZCB1cmJzIGFuZCBmcmVlcyB0aGVpciBwcml2YXRlIGRhdGEgYnkgcmVxdWVzdCBvZgorCSAqIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIG9mIGEgVVNCIGRyaXZlci4gV2hlbiB1bmxpbmtpbmcgYSB1cmIgd2l0aCBhbgorCSAqIGFjdGl2ZSBjb25uZWN0aW9uLCB2aGNpX2RlcXVldWUoKSBkb2VzIG5vdCBnaXZlIGJhY2sgdGhlIHVyYiB3aGljaAorCSAqIGlzIGFjdHVhbGx5IGdpdmVuIGJhY2sgYnkgdmhjaV9yeCBhZnRlciByZWNlaXZpbmcgaXRzIHJldHVybiBwZHUuCisJICoKKwkgKi8KKwlyaF9wb3J0X2Rpc2Nvbm5lY3QodmRldi0+cmhwb3J0KTsKKworCXVpbmZvKCJkaXNjb25uZWN0IGRldmljZVxuIik7Cit9CisKKworc3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0gY29udGFpbmVyX29mKHVkLCBzdHJ1Y3QgdmhjaV9kZXZpY2UsIHVkKTsKKworCXNwaW5fbG9jaygmdWQtPmxvY2spOworCisJdmRldi0+c3BlZWQgID0gMDsKKwl2ZGV2LT5kZXZpZCAgPSAwOworCisJdWQtPnRjcF9zb2NrZXQgPSBOVUxMOworCisJdWQtPnN0YXR1cyA9IFZERVZfU1RfTlVMTDsKKworCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHZoY2lfZGV2aWNlX3VudXNhYmxlKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCXNwaW5fbG9jaygmdWQtPmxvY2spOworCisJdWQtPnN0YXR1cyA9IFZERVZfU1RfRVJST1I7CisKKwlzcGluX3VubG9jaygmdWQtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCB2aGNpX2RldmljZV9pbml0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwltZW1zZXQodmRldiwgMCwgc2l6ZW9mKCp2ZGV2KSk7CisKKwl1c2JpcF90YXNrX2luaXQoJnZkZXYtPnVkLnRjcF9yeCwgInZoY2lfcngiLCB2aGNpX3J4X2xvb3ApOworCXVzYmlwX3Rhc2tfaW5pdCgmdmRldi0+dWQudGNwX3R4LCAidmhjaV90eCIsIHZoY2lfdHhfbG9vcCk7CisKKwl2ZGV2LT51ZC5zaWRlICAgPSBVU0JJUF9WSENJOworCXZkZXYtPnVkLnN0YXR1cyA9IFZERVZfU1RfTlVMTDsKKwkvKiB2ZGV2LT51ZC5sb2NrICAgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7ICovCisJc3Bpbl9sb2NrX2luaXQoJnZkZXYtPnVkLmxvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJnZkZXYtPnByaXZfcngpOworCUlOSVRfTElTVF9IRUFEKCZ2ZGV2LT5wcml2X3R4KTsKKwlJTklUX0xJU1RfSEVBRCgmdmRldi0+dW5saW5rX3R4KTsKKwlJTklUX0xJU1RfSEVBRCgmdmRldi0+dW5saW5rX3J4KTsKKwkvKiB2ZGV2LT5wcml2X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7ICovCisJc3Bpbl9sb2NrX2luaXQoJnZkZXYtPnByaXZfbG9jayk7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ2ZGV2LT53YWl0cV90eCk7CisKKwl2ZGV2LT51ZC5laF9vcHMuc2h1dGRvd24gPSB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb247CisJdmRldi0+dWQuZWhfb3BzLnJlc2V0ID0gdmhjaV9kZXZpY2VfcmVzZXQ7CisJdmRldi0+dWQuZWhfb3BzLnVudXNhYmxlID0gdmhjaV9kZXZpY2VfdW51c2FibGU7CisKKwl1c2JpcF9zdGFydF9laCgmdmRldi0+dWQpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdmhjaV9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB2aGNpX2hjZCAqdmhjaSA9IGhjZF90b192aGNpKGhjZCk7CisJaW50IHJocG9ydDsKKwlpbnQgZXJyID0gMDsKKworCWRiZ192aGNpX2hjKCJlbnRlciB2aGNpX3N0YXJ0XG4iKTsKKworCisJLyogaW5pdGlhbGl6ZSBwcml2YXRlIGRhdGEgb2YgdXNiX2hjZCAqLworCisJZm9yIChyaHBvcnQgPSAwOyByaHBvcnQgPCBWSENJX05QT1JUUzsgcmhwb3J0KyspIHsKKwkJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0gJnZoY2ktPnZkZXZbcmhwb3J0XTsKKwkJdmhjaV9kZXZpY2VfaW5pdCh2ZGV2KTsKKwkJdmRldi0+cmhwb3J0ID0gcmhwb3J0OworCX0KKworCWF0b21pY19zZXQoJnZoY2ktPnNlcW51bSwgMCk7CisJc3Bpbl9sb2NrX2luaXQoJnZoY2ktPmxvY2spOworCisKKworCWhjZC0+cG93ZXJfYnVkZ2V0ID0gMDsgLyogbm8gbGltaXQgKi8KKwloY2QtPnN0YXRlICA9IEhDX1NUQVRFX1JVTk5JTkc7CisJaGNkLT51c2VzX25ld19wb2xsaW5nID0gMTsKKworCisJLyogdmhjaV9oY2QgaXMgbm93IHJlYWR5IHRvIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCBzeXNmcyAqLworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmdmhjaV9kZXYodmhjaSktPmtvYmosICZkZXZfYXR0cl9ncm91cCk7CisJaWYgKGVycikgeworCQl1ZXJyKCJjcmVhdGUgc3lzZnMgZmlsZXNcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2aGNpX3N0b3Aoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdmhjaV9oY2QgKnZoY2kgPSBoY2RfdG9fdmhjaShoY2QpOworCWludCByaHBvcnQgPSAwOworCisJZGJnX3ZoY2lfaGMoInN0b3AgVkhDSSBjb250cm9sbGVyXG4iKTsKKworCisJLyogMS4gcmVtb3ZlIHRoZSB1c2VybGFuZCBpbnRlcmZhY2Ugb2YgdmhjaV9oY2QgKi8KKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnZoY2lfZGV2KHZoY2kpLT5rb2JqLCAmZGV2X2F0dHJfZ3JvdXApOworCisJLyogMi4gc2h1dGRvd24gYWxsIHRoZSBwb3J0cyBvZiB2aGNpX2hjZCAqLworCWZvciAocmhwb3J0ID0gMCA7IHJocG9ydCA8IFZIQ0lfTlBPUlRTOyByaHBvcnQrKykgeworCQlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSAmdmhjaS0+dmRldltyaHBvcnRdOworCisJCXVzYmlwX2V2ZW50X2FkZCgmdmRldi0+dWQsIFZERVZfRVZFTlRfUkVNT1ZFRCk7CisJCXVzYmlwX3N0b3BfZWgoJnZkZXYtPnVkKTsKKwl9CisKKworCXVpbmZvKCJ2aGNpX3N0b3AgZG9uZVxuIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdmhjaV9nZXRfZnJhbWVfbnVtYmVyKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJdWVycigiTm90IHlldCBpbXBsZW1lbnRlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKKworI2lmZGVmIENPTkZJR19QTQorCisvKiBGSVhNRTogc3VzcGVuZC9yZXN1bWUgKi8KK3N0YXRpYyBpbnQgdmhjaV9idXNfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB2aGNpX2hjZCAqdmhjaSA9IGhjZF90b192aGNpKGhjZCk7CisKKwlkZXZfZGJnKCZoY2QtPnNlbGYucm9vdF9odWItPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzcGluX2xvY2tfaXJxKCZ2aGNpLT5sb2NrKTsKKwkvKiB2aGNpLT5yaF9zdGF0ZSA9IERVTU1ZX1JIX1NVU1BFTkRFRDsKKwkgKiBzZXRfbGlua19zdGF0ZSh2aGNpKTsgKi8KKwloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOworCXNwaW5fdW5sb2NrX2lycSgmdmhjaS0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aGNpX2J1c19yZXN1bWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgdmhjaV9oY2QgKnZoY2kgPSBoY2RfdG9fdmhjaShoY2QpOworCWludCByYyA9IDA7CisKKwlkZXZfZGJnKCZoY2QtPnNlbGYucm9vdF9odWItPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzcGluX2xvY2tfaXJxKCZ2aGNpLT5sb2NrKTsKKwlpZiAoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKSkgeworCQlyYyA9IC1FU0hVVERPV047CisJfSBlbHNlIHsKKwkJLyogdmhjaS0+cmhfc3RhdGUgPSBEVU1NWV9SSF9SVU5OSU5HOworCQkgKiBzZXRfbGlua19zdGF0ZSh2aGNpKTsKKwkJICogaWYgKCFsaXN0X2VtcHR5KCZ2aGNpLT51cmJwX2xpc3QpKQorCQkgKgltb2RfdGltZXIoJnZoY2ktPnRpbWVyLCBqaWZmaWVzKTsgKi8KKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmdmhjaS0+bG9jayk7CisJcmV0dXJuIHJjOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgdmhjaV9idXNfc3VzcGVuZCAgICAgIE5VTEwKKyNkZWZpbmUgdmhjaV9idXNfcmVzdW1lICAgICAgIE5VTEwKKyNlbmRpZgorCisKKworc3RhdGljIHN0cnVjdCBoY19kcml2ZXIgdmhjaV9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uCT0gZHJpdmVyX25hbWUsCisJLnByb2R1Y3RfZGVzYwk9IGRyaXZlcl9kZXNjLAorCS5oY2RfcHJpdl9zaXplCT0gc2l6ZW9mKHN0cnVjdCB2aGNpX2hjZCksCisKKwkuZmxhZ3MJCT0gSENEX1VTQjIsCisKKwkuc3RhcnQJCT0gdmhjaV9zdGFydCwKKwkuc3RvcCAJCT0gdmhjaV9zdG9wLAorCisJLnVyYl9lbnF1ZXVlCT0gdmhjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUJPSB2aGNpX3VyYl9kZXF1ZXVlLAorCisJLmdldF9mcmFtZV9udW1iZXIgPSB2aGNpX2dldF9mcmFtZV9udW1iZXIsCisKKwkuaHViX3N0YXR1c19kYXRhID0gdmhjaV9odWJfc3RhdHVzLAorCS5odWJfY29udHJvbCAgICA9IHZoY2lfaHViX2NvbnRyb2wsCisJLmJ1c19zdXNwZW5kCT0gdmhjaV9idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZQk9IHZoY2lfYnVzX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgdmhjaV9oY2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlpbnQJCQlyZXQ7CisKKwl1aW5mbygicHJvdmluZy4uLlxuIik7CisKKwlkYmdfdmhjaV9oYygibmFtZSAlcyBpZCAlZFxuIiwgcGRldi0+bmFtZSwgcGRldi0+aWQpOworCisJLyogd2lsbCBiZSByZW1vdmVkICovCisJaWYgKHBkZXYtPmRldi5kbWFfbWFzaykgeworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidmhjaV9oY2QgRE1BIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGhjZC4KKwkgKiBPdXIgcHJpdmF0ZSBkYXRhIGlzIGFsc28gYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkuCisJICovCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnZoY2lfaGNfZHJpdmVyLCAmcGRldi0+ZGV2LCBwZGV2LT5kZXYuYnVzX2lkKTsKKwlpZiAoIWhjZCkgeworCQl1ZXJyKCJjcmVhdGUgaGNkIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCisJLyogdGhpcyBpcyBwcml2YXRlIGRhdGEgZm9yIHZoY2lfaGNkICovCisJdGhlX2NvbnRyb2xsZXIgPSBoY2RfdG9fdmhjaShoY2QpOworCisJLyoKKwkgKiBGaW5pc2ggZ2VuZXJpYyBIQ0Qgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3Rlci4KKwkgKiBDYWxsIHRoZSBkcml2ZXIncyByZXNldCgpIGFuZCBzdGFydCgpIHJvdXRpbmVzLgorCSAqLworCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgMCwgMCk7CisJaWYgKHJldCAhPSAwKSB7CisJCXVlcnIoInVzYl9hZGRfaGNkIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJdXNiX3B1dF9oY2QoaGNkKTsKKwkJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKworCisJZGJnX3ZoY2lfaGMoImJ5ZVxuIik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB2aGNpX2hjZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkOworCisJaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaWYgKCFoY2QpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBEaXNjb25uZWN0cyB0aGUgcm9vdCBodWIsCisJICogdGhlbiByZXZlcnNlcyB0aGUgZWZmZWN0cyBvZiB1c2JfYWRkX2hjZCgpLAorCSAqIGludm9raW5nIHRoZSBIQ0QncyBzdG9wKCkgbWV0aG9kcy4KKwkgKi8KKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCXVzYl9wdXRfaGNkKGhjZCk7CisJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOworCisKKwlyZXR1cm4gMDsKK30KKworCisKKyNpZmRlZiBDT05GSUdfUE0KKworLyogd2hhdCBzaG91bGQgaGFwcGVuIGZvciBVU0IvSVAgdW5kZXIgc3VzcGVuZC9yZXN1bWU/ICovCitzdGF0aWMgaW50IHZoY2lfaGNkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJaW50IHJocG9ydCA9IDA7CisJaW50IGNvbm5lY3RlZCA9IDA7CisJaW50IHJldCA9IDA7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzcGluX2xvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKworCWZvciAocmhwb3J0ID0gMDsgcmhwb3J0IDwgVkhDSV9OUE9SVFM7IHJocG9ydCsrKQorCQlpZiAodGhlX2NvbnRyb2xsZXItPnBvcnRfc3RhdHVzW3JocG9ydF0gJgorCQkJCQkJVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKQorCQkJY29ubmVjdGVkICs9IDE7CisKKwlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJaWYgKGNvbm5lY3RlZCA+IDApIHsKKwkJdWluZm8oIldlIGhhdmUgJWQgYWN0aXZlIGNvbm5lY3Rpb24lcy4gRG8gbm90IHN1c3BlbmQuXG4iLAorCQkJCWNvbm5lY3RlZCwgKGNvbm5lY3RlZCA9PSAxID8gIiIgOiAicyIpKTsKKwkJcmV0ID0gIC1FQlVTWTsKKwl9IGVsc2UgeworCQl1aW5mbygic3VzcGVuZCB2aGNpX2hjZCIpOworCQljbGVhcl9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmhjaV9oY2RfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzZXRfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKTsKKwl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKGhjZCk7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworI2RlZmluZSB2aGNpX2hjZF9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgdmhjaV9oY2RfcmVzdW1lCQlOVUxMCisKKyNlbmRpZgorCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZoY2lfZHJpdmVyID0geworCS5wcm9iZQk9IHZoY2lfaGNkX3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcCh2aGNpX2hjZF9yZW1vdmUpLAorCS5zdXNwZW5kID0gdmhjaV9oY2Rfc3VzcGVuZCwKKwkucmVzdW1lCT0gdmhjaV9oY2RfcmVzdW1lLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gKGNoYXIgKikgZHJpdmVyX25hbWUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVGhlIFZIQ0kgJ2RldmljZScgaXMgJ3ZpcnR1YWwnOyBub3QgYSByZWFsIHBsdWcmcGxheSBoYXJkd2FyZS4KKyAqIFdlIG5lZWQgdG8gYWRkIHRoaXMgdmlydHVhbCBkZXZpY2UgYXMgYSBwbGF0Zm9ybSBkZXZpY2UgYXJiaXRyYXJpbHk6CisgKgkxLiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoKQorICovCitzdGF0aWMgdm9pZCB0aGVfcGRldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRoZV9wZGV2ID0geworCS8qIHNob3VsZCBiZSB0aGUgc2FtZSBuYW1lIGFzIGRyaXZlcl9uYW1lICovCisJLm5hbWUgPSAoY2hhciAqKSBkcml2ZXJfbmFtZSwKKwkuaWQgPSAtMSwKKwkuZGV2ID0geworCQkvKiAuZHJpdmVyID0gJnZoY2lfZHJpdmVyLCAqLworCQkucmVsZWFzZSA9IHRoZV9wZGV2X3JlbGVhc2UsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZoY2lfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlkYmdfdmhjaV9oYygiZW50ZXJcbiIpOworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICVzLCAlc1xuIiwgZHJpdmVyX25hbWUsCisJICAgICAgIERSSVZFUl9WRVJTSU9OKTsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdmhjaV9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9kcml2ZXJfcmVnaXN0ZXI7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnRoZV9wZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyOworCisJZGJnX3ZoY2lfaGMoImJ5ZVxuIik7CisJcmV0dXJuIHJldDsKKworCS8qIGVycm9yIG9jY3VycmVkICovCitlcnJfcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2aGNpX2RyaXZlcik7CisKK2Vycl9kcml2ZXJfcmVnaXN0ZXI6CisJZGJnX3ZoY2lfaGMoImJ5ZVxuIik7CisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KHZoY2lfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2aGNpX2NsZWFudXAodm9pZCkKK3sKKwlkYmdfdmhjaV9oYygiZW50ZXJcbiIpOworCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnRoZV9wZGV2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmhjaV9kcml2ZXIpOworCisJZGJnX3ZoY2lfaGMoImJ5ZVxuIik7Cit9Cittb2R1bGVfZXhpdCh2aGNpX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzY2NhZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJ2aGNpLmgiCisKKworLyogZ2V0IFVSQiBmcm9tIHRyYW5zbWl0dGVkIHVyYiBxdWV1ZSAqLworc3RhdGljIHN0cnVjdCB1cmIgKnBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdihzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsCisJCQkJCSAgICBfX3UzMiBzZXFudW0pCit7CisJc3RydWN0IHZoY2lfcHJpdiAqcHJpdiwgKnRtcDsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCAmdmRldi0+cHJpdl9yeCwgbGlzdCkgeworCQlpZiAocHJpdi0+c2VxbnVtID09IHNlcW51bSkgeworCQkJdXJiID0gcHJpdi0+dXJiOworCQkJc3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwkJCWRiZ192aGNpX3J4KCJmaW5kIHVyYiAlcCB2dXJiICVwIHNlcW51bSAldVxuIiwKKwkJCQkgICAgdXJiLCBwcml2LCBzZXFudW0pOworCisJCQkvKiBUT0RPOiBmaXggbG9naWMgaGVyZSB0byBpbXByb3ZlIGluZGVudCBzaXR1dGF0aW9uICovCisJCQlpZiAoc3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQkJCWlmIChzdGF0dXMgPT0gLUVOT0VOVCB8fAorCQkJCSAgICAgc3RhdHVzID09IC1FQ09OTlJFU0VUKQorCQkJCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwKKwkJCQkJCSAidXJiICVwIHdhcyB1bmxpbmtlZCAiCisJCQkJCQkgIiVzc3luY2hyb251b3VzbHkuXG4iLCB1cmIsCisJCQkJCQkgc3RhdHVzID09IC1FTk9FTlQgPyAiIiA6ICJhIik7CisJCQkJZWxzZQorCQkJCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwKKwkJCQkJCSAidXJiICVwIG1heSBiZSBpbiBhIGVycm9yLCAiCisJCQkJCQkgInN0YXR1cyAlZFxuIiwgdXJiLCBzdGF0dXMpOworCQkJfQorCisJCQlsaXN0X2RlbCgmcHJpdi0+bGlzdCk7CisJCQlrZnJlZShwcml2KTsKKwkJCXVyYi0+aGNwcml2ID0gTlVMTDsKKworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKworCXJldHVybiB1cmI7Cit9CisKK3N0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfc3VibWl0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKKwkJCQkJCXN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKK3sKKwlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9ICZ2ZGV2LT51ZDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKworCXVyYiA9IHBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdih2ZGV2LCBwZHUtPmJhc2Uuc2VxbnVtKTsKKworCisJaWYgKCF1cmIpIHsKKwkJdWVycigiY2Fubm90IGZpbmQgYSB1cmIgb2Ygc2VxbnVtICV1XG4iLCBwZHUtPmJhc2Uuc2VxbnVtKTsKKwkJdWluZm8oIm1heCBzZXFudW0gJWRcbiIsIGF0b21pY19yZWFkKCZ0aGVfY29udHJvbGxlci0+c2VxbnVtKSk7CisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQlyZXR1cm47CisJfQorCisKKwkvKiB1bnBhY2sgdGhlIHBkdSB0byBhIHVyYiAqLworCXVzYmlwX3BhY2tfcGR1KHBkdSwgdXJiLCBVU0JJUF9SRVRfU1VCTUlULCAwKTsKKworCisJLyogcmVjdiB0cmFuc2ZlciBidWZmZXIgKi8KKwlpZiAodXNiaXBfcmVjdl94YnVmZih1ZCwgdXJiKSA8IDApCisJCXJldHVybjsKKworCisJLyogcmVjdiBpc29fcGFja2V0X2Rlc2NyaXB0b3IgKi8KKwlpZiAodXNiaXBfcmVjdl9pc28odWQsIHVyYikgPCAwKQorCQlyZXR1cm47CisKKworCWlmIChkYmdfZmxhZ192aGNpX3J4KQorCQl1c2JpcF9kdW1wX3VyYih1cmIpOworCisKKwlkYmdfdmhjaV9yeCgibm93IGdpdmViYWNrIHVyYiAlcFxuIiwgdXJiKTsKKworCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSwgdXJiKTsKKwlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJdXNiX2hjZF9naXZlYmFja191cmIodmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpLCB1cmIsIHVyYi0+c3RhdHVzKTsKKworCisJZGJnX3ZoY2lfcngoIkxlYXZlXG4iKTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgc3RydWN0IHZoY2lfdW5saW5rICpkZXF1ZXVlX3BlbmRpbmdfdW5saW5rKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKKwkJc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQoreworCXN0cnVjdCB2aGNpX3VubGluayAqdW5saW5rLCAqdG1wOworCisJc3Bpbl9sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmdmRldi0+dW5saW5rX3J4LCBsaXN0KSB7CisJCXVpbmZvKCJ1bmxpbmstPnNlcW51bSAlbHVcbiIsIHVubGluay0+c2VxbnVtKTsKKwkJaWYgKHVubGluay0+c2VxbnVtID09IHBkdS0+YmFzZS5zZXFudW0pIHsKKwkJCWRiZ192aGNpX3J4KCJmb3VuZCBwZW5kaW5nIHVubGluaywgJWx1XG4iLAorCQkJCQkJCXVubGluay0+c2VxbnVtKTsKKwkJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOworCisJCQlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKwkJCXJldHVybiB1bmxpbms7CisJCX0KKwl9CisKKwlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfdW5saW5rKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKKwkJCQkJCXN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKK3sKKwlzdHJ1Y3QgdmhjaV91bmxpbmsgKnVubGluazsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwl1c2JpcF9kdW1wX2hlYWRlcihwZHUpOworCisJdW5saW5rID0gZGVxdWV1ZV9wZW5kaW5nX3VubGluayh2ZGV2LCBwZHUpOworCWlmICghdW5saW5rKSB7CisJCXVpbmZvKCJjYW5ub3QgZmluZCB0aGUgcGVuZGluZyB1bmxpbmsgJXVcbiIsIHBkdS0+YmFzZS5zZXFudW0pOworCQlyZXR1cm47CisJfQorCisJdXJiID0gcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHZkZXYsIHVubGluay0+dW5saW5rX3NlcW51bSk7CisJaWYgKCF1cmIpIHsKKwkJLyoKKwkJICogSSBnZXQgdGhlIHJlc3VsdCBvZiBhIHVubGluayByZXF1ZXN0LiBCdXQsIGl0IHNlZW1zIHRoYXQgSQorCQkgKiBhbHJlYWR5IHJlY2VpdmVkIHRoZSByZXN1bHQgb2YgaXRzIHN1Ym1pdCByZXN1bHQgYW5kIGdhdmUKKwkJICogYmFjayB0aGUgVVJCLgorCQkgKi8KKwkJdWluZm8oInRoZSB1cmIgKHNlcW51bSAlZCkgd2FzIGFscmVhZHkgZ2l2ZW4gYmFja2VkXG4iLAorCQkJCQkJCXBkdS0+YmFzZS5zZXFudW0pOworCX0gZWxzZSB7CisJCWRiZ192aGNpX3J4KCJub3cgZ2l2ZWJhY2sgdXJiICVwXG4iLCB1cmIpOworCisJCS8qIElmIHVubGluayBpcyBzdWNjZWVkLCBzdGF0dXMgaXMgLUVDT05OUkVTRVQgKi8KKwkJdXJiLT5zdGF0dXMgPSBwZHUtPnUucmV0X3VubGluay5zdGF0dXM7CisJCXVpbmZvKCIlZFxuIiwgdXJiLT5zdGF0dXMpOworCisJCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYik7CisJCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwkJdXNiX2hjZF9naXZlYmFja191cmIodmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpLCB1cmIsCisJCQkJCQkJCXVyYi0+c3RhdHVzKTsKKwl9CisKKwlrZnJlZSh1bmxpbmspOworCisJcmV0dXJuOworfQorCisvKiByZWN2IGEgcGR1ICovCitzdGF0aWMgdm9pZCB2aGNpX3J4X3BkdShzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB1c2JpcF9oZWFkZXIgcGR1OworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHZoY2lfZGV2aWNlLCB1ZCk7CisKKworCWRiZ192aGNpX3J4KCJFbnRlclxuIik7CisKKwltZW1zZXQoJnBkdSwgMCwgc2l6ZW9mKHBkdSkpOworCisKKwkvKiAxLiByZWNlaXZlIGEgcGR1IGhlYWRlciAqLworCXJldCA9IHVzYmlwX3htaXQoMCwgdWQtPnRjcF9zb2NrZXQsIChjaGFyICopICZwZHUsIHNpemVvZihwZHUpLCAwKTsKKwlpZiAocmV0ICE9IHNpemVvZihwZHUpKSB7CisJCXVlcnIoInJlY2VpdmluZyBwZHUgZmFpbGVkISBzaXplIGlzICVkLCBzaG91bGQgYmUgJWRcbiIsCisJCQkJcmV0LCBzaXplb2YocGR1KSk7CisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQlyZXR1cm47CisJfQorCisJdXNiaXBfaGVhZGVyX2NvcnJlY3RfZW5kaWFuKCZwZHUsIDApOworCisJaWYgKGRiZ19mbGFnX3ZoY2lfcngpCisJCXVzYmlwX2R1bXBfaGVhZGVyKCZwZHUpOworCisJc3dpdGNoIChwZHUuYmFzZS5jb21tYW5kKSB7CisJY2FzZSBVU0JJUF9SRVRfU1VCTUlUOgorCQl2aGNpX3JlY3ZfcmV0X3N1Ym1pdCh2ZGV2LCAmcGR1KTsKKwkJYnJlYWs7CisJY2FzZSBVU0JJUF9SRVRfVU5MSU5LOgorCQl2aGNpX3JlY3ZfcmV0X3VubGluayh2ZGV2LCAmcGR1KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTk9UUkVBQ0hFRCAqLworCQl1ZXJyKCJ1bmtub3duIHBkdSAldVxuIiwgcGR1LmJhc2UuY29tbWFuZCk7CisJCXVzYmlwX2R1bXBfaGVhZGVyKCZwZHUpOworCQl1c2JpcF9ldmVudF9hZGQodWQsIFZERVZfRVZFTlRfRVJST1JfVENQKTsKKwl9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCB2aGNpX3J4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KQoreworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gY29udGFpbmVyX29mKHV0LCBzdHJ1Y3QgdXNiaXBfZGV2aWNlLCB0Y3BfcngpOworCisKKwl3aGlsZSAoMSkgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCWRiZ192aGNpX3J4KCJzaWduYWwgY2F0Y2hlZCFcbiIpOworCQkJYnJlYWs7CisJCX0KKworCisJCWlmICh1c2JpcF9ldmVudF9oYXBwZW5kKHVkKSkKKwkJCWJyZWFrOworCisJCXZoY2lfcnhfcGR1KHVkKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YzI4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCisjaW5jbHVkZSAidmhjaS5oIgorCisjaW5jbHVkZSA8bGludXgvaW4uaD4KKworLyogVE9ETzogcmVmaW5lIGxvY2tpbmcgPyovCisKKy8qIFN5c2ZzIGVudHJ5IHRvIHNob3cgcG9ydCBzdGF0dXMgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjaGFyICpvdXQpCit7CisJY2hhciAqcyA9IG91dDsKKwlpbnQgaSA9IDA7CisKKwlpZiAoIXRoZV9jb250cm9sbGVyIHx8ICFvdXQpCisJCUJVRygpOworCisJc3Bpbl9sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwkvKgorCSAqIG91dHB1dCBleGFtcGxlOgorCSAqIHBydCBzdGEgc3BkIGRldiBzb2NrZXQgICAgICAgICAgIGxvY2FsX2J1c2lkCisJICogMDAwIDAwNCAwMDAgMDAwICAgICAgICAgYzVhN2JiODAgMS0yLjMKKwkgKiAwMDEgMDA0IDAwMCAwMDAgICAgICAgICBkOGNlZTk4MCAyLTMuNAorCSAqCisJICogSVAgYWRkcmVzcyBjYW4gYmUgcmV0cmlldmVkIGZyb20gYSBzb2NrZXQgcG9pbnRlciBhZGRyZXNzIGJ5IGxvb2tpbmcKKwkgKiB1cCAvcHJvYy9uZXQve3RjcCx0Y3A2fS4gQWxzbywgYSB1c2VybGFuZCBwcm9ncmFtIG1heSByZW1lbWJlciBhCisJICogcG9ydCBudW1iZXIgYW5kIGl0cyBwZWVyIElQIGFkZHJlc3MuCisJICovCisJb3V0ICs9IHNwcmludGYob3V0LCAicHJ0IHN0YSBzcGQgYnVzIGRldiBzb2NrZXQgICAgICAgICAgICIKKwkJICAgICAgICJsb2NhbF9idXNpZFxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgVkhDSV9OUE9SVFM7IGkrKykgeworCQlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSBwb3J0X3RvX3ZkZXYoaSk7CisKKwkJc3Bpbl9sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKworCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlMDN1ICUwM3UgIiwgaSwgdmRldi0+dWQuc3RhdHVzKTsKKworCQlpZiAodmRldi0+dWQuc3RhdHVzID09IFZERVZfU1RfVVNFRCkgeworCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJTAzdSAlMDh4ICIsCisJCQkJCXZkZXYtPnNwZWVkLCB2ZGV2LT5kZXZpZCk7CisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlMTZwICIsIHZkZXYtPnVkLnRjcF9zb2NrZXQpOworCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJXMiLCB2ZGV2LT51ZGV2LT5kZXYuYnVzX2lkKTsKKworCQl9IGVsc2UKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgIjAwMCAwMDAgMDAwIDAwMDAwMDAwMDAwMDAwMDAgMC0wIik7CisKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiXG4iKTsKKworCQlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisJfQorCisJc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKworCXJldHVybiBvdXQgLSBzOworfQorc3RhdGljIERFVklDRV9BVFRSKHN0YXR1cywgU19JUlVHTywgc2hvd19zdGF0dXMsIE5VTEwpOworCisvKiBTeXNmcyBlbnRyeSB0byBzaHV0ZG93biBhIHZpcnR1YWwgY29ubmVjdGlvbiAqLworc3RhdGljIGludCB2aGNpX3BvcnRfZGlzY29ubmVjdChfX3UzMiByaHBvcnQpCit7CisJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2OworCisJZGJnX3ZoY2lfc3lzZnMoImVudGVyXG4iKTsKKworCS8qIGxvY2sgKi8KKwlzcGluX2xvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKworCXZkZXYgPSBwb3J0X3RvX3ZkZXYocmhwb3J0KTsKKworCXNwaW5fbG9jaygmdmRldi0+dWQubG9jayk7CisJaWYgKHZkZXYtPnVkLnN0YXR1cyA9PSBWREVWX1NUX05VTEwpIHsKKwkJdWVycigibm90IGNvbm5lY3RlZCAlZFxuIiwgdmRldi0+dWQuc3RhdHVzKTsKKworCQkvKiB1bmxvY2sgKi8KKwkJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOworCQlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHVubG9jayAqLworCXNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJdXNiaXBfZXZlbnRfYWRkKCZ2ZGV2LT51ZCwgVkRFVl9FVkVOVF9ET1dOKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9kZXRhY2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgZXJyOworCV9fdTMyIHJocG9ydCA9IDA7CisKKwlzc2NhbmYoYnVmLCAiJXUiLCAmcmhwb3J0KTsKKworCS8qIGNoZWNrIHJocG9ydCAqLworCWlmIChyaHBvcnQgPj0gVkhDSV9OUE9SVFMpIHsKKwkJdWVycigiaW52YWxpZCBwb3J0ICV1XG4iLCByaHBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnIgPSB2aGNpX3BvcnRfZGlzY29ubmVjdChyaHBvcnQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRiZ192aGNpX3N5c2ZzKCJMZWF2ZVxuIik7CisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIERFVklDRV9BVFRSKGRldGFjaCwgU19JV1VTUiwgTlVMTCwgc3RvcmVfZGV0YWNoKTsKKworLyogU3lzZnMgZW50cnkgdG8gZXN0YWJsaXNoIGEgdmlydHVhbCBjb25uZWN0aW9uICovCitzdGF0aWMgaW50IHZhbGlkX2FyZ3MoX191MzIgcmhwb3J0LCBlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQpCit7CisJLyogY2hlY2sgcmhwb3J0ICovCisJaWYgKChyaHBvcnQgPCAwKSB8fCAocmhwb3J0ID49IFZIQ0lfTlBPUlRTKSkgeworCQl1ZXJyKCJwb3J0ICV1XG4iLCByaHBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjaGVjayBzcGVlZCAqLworCXN3aXRjaCAoc3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9MT1c6CisJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgorCWNhc2UgVVNCX1NQRUVEX1ZBUklBQkxFOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQl1ZXJyKCJzcGVlZCAlZFxuIiwgc3BlZWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRvIHN0YXJ0IGEgbmV3IFVTQi9JUCBhdHRhY2htZW50LCBhIHVzZXJsYW5kIHByb2dyYW0gbmVlZHMgdG8gc2V0dXAgYSBUQ1AKKyAqIGNvbm5lY3Rpb24gYW5kIHRoZW4gd3JpdGUgaXRzIHNvY2tldCBkZXNjcmlwdG9yIHdpdGggcmVtb3RlIGRldmljZQorICogaW5mb3JtYXRpb24gaW50byB0aGlzIHN5c2ZzIGZpbGUuCisgKgorICogQSByZW1vdGUgZGV2aWNlIGlzIHZpcnR1YWxseSBhdHRhY2hlZCB0byB0aGUgcm9vdC1odWIgcG9ydCBvZiBAcmhwb3J0IHdpdGgKKyAqIEBzcGVlZC4gQGRldmlkIGlzIGVtYmVkZGVkIGludG8gYSByZXF1ZXN0IHRvIHNwZWNpZnkgdGhlIHJlbW90ZSBkZXZpY2UgaW4gYQorICogc2VydmVyIGhvc3QuCisgKgorICogd3JpdGUoKSByZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqLworc3RhdGljIHNzaXplX3Qgc3RvcmVfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2OworCXN0cnVjdCBzb2NrZXQgKnNvY2tldDsKKwlpbnQgc29ja2ZkID0gMDsKKwlfX3UzMiByaHBvcnQgPSAwLCBkZXZpZCA9IDAsIHNwZWVkID0gMDsKKworCS8qCisJICogQHJocG9ydDogcG9ydCBudW1iZXIgb2YgdmhjaV9oY2QKKwkgKiBAc29ja2ZkOiBzb2NrZXQgZGVzY3JpcHRvciBvZiBhbiBlc3RhYmxpc2hlZCBUQ1AgY29ubmVjdGlvbgorCSAqIEBkZXZpZDogdW5pcXVlIGRldmljZSBpZGVudGlmaWVyIGluIGEgcmVtb3RlIGhvc3QKKwkgKiBAc3BlZWQ6IHVzYiBkZXZpY2Ugc3BlZWQgaW4gYSByZW1vdGUgaG9zdAorCSAqLworCXNzY2FuZihidWYsICIldSAldSAldSAldSIsICZyaHBvcnQsICZzb2NrZmQsICZkZXZpZCwgJnNwZWVkKTsKKworCWRiZ192aGNpX3N5c2ZzKCJyaHBvcnQoJXUpIHNvY2tmZCgldSkgZGV2aWQoJXUpIHNwZWVkKCV1KVxuIiwKKwkJCXJocG9ydCwgc29ja2ZkLCBkZXZpZCwgc3BlZWQpOworCisKKwkvKiBjaGVjayByZWNlaXZlZCBwYXJhbWV0ZXJzICovCisJaWYgKHZhbGlkX2FyZ3Mocmhwb3J0LCBzcGVlZCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGNoZWNrIHNvY2tmZCAqLworCXNvY2tldCA9IHNvY2tmZF90b19zb2NrZXQoc29ja2ZkKTsKKwlpZiAoIXNvY2tldCkKKwkJcmV0dXJuICAtRUlOVkFMOworCisJLyogbm93IG5lZWQgbG9jayB1bnRpbCBzZXR0aW5nIHZkZXYgc3RhdHVzIGFzIHVzZWQgKi8KKworCS8qIGJlZ2luIGEgbG9jayAqLworCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJdmRldiA9IHBvcnRfdG9fdmRldihyaHBvcnQpOworCisJc3Bpbl9sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKworCWlmICh2ZGV2LT51ZC5zdGF0dXMgIT0gVkRFVl9TVF9OVUxMKSB7CisJCS8qIGVuZCBvZiB0aGUgbG9jayAqLworCQlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisJCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwkJdWVycigicG9ydCAlZCBhbHJlYWR5IHVzZWRcbiIsIHJocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXVpbmZvKCJyaHBvcnQoJXUpIHNvY2tmZCglZCkgZGV2aWQoJXUpIHNwZWVkKCV1KVxuIiwKKwkJCXJocG9ydCwgc29ja2ZkLCBkZXZpZCwgc3BlZWQpOworCisJdmRldi0+ZGV2aWQgICAgICAgICA9IGRldmlkOworCXZkZXYtPnNwZWVkICAgICAgICAgPSBzcGVlZDsKKwl2ZGV2LT51ZC50Y3Bfc29ja2V0ID0gc29ja2V0OworCXZkZXYtPnVkLnN0YXR1cyAgICAgPSBWREVWX1NUX05PVEFTU0lHTkVEOworCisJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOworCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisJLyogZW5kIHRoZSBsb2NrICovCisKKwkvKgorCSAqIHRoaXMgZnVuY3Rpb24gd2lsbCBzbGVlcCwgc28gc2hvdWxkIGJlIG91dCBvZiB0aGUgbG9jay4gYnV0LCBpdCdzIG9rCisJICogYmVjYXVzZSB3ZSBhbHJlYWR5IG1hcmtlZCB2ZGV2IGFzIGJlaW5nIHVzZWQuIHJlYWxseT8KKwkgKi8KKwl1c2JpcF9zdGFydF90aHJlYWRzKCZ2ZGV2LT51ZCk7CisKKwlyaF9wb3J0X2Nvbm5lY3Qocmhwb3J0LCBzcGVlZCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoYXR0YWNoLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9hdHRhY2gpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3N0YXR1cy5hdHRyLAorCSZkZXZfYXR0cl9kZXRhY2guYXR0ciwKKwkmZGV2X2F0dHJfYXR0YWNoLmF0dHIsCisJJmRldl9hdHRyX3VzYmlwX2RlYnVnLmF0dHIsCisJTlVMTCwKK307CisKK3N0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGV2X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gZGV2X2F0dHJzLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV90eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTUyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV90eC5jCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCisjaW5jbHVkZSAidmhjaS5oIgorCisKK3N0YXRpYyB2b2lkIHNldHVwX2NtZF9zdWJtaXRfcGR1KHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdXAsICBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHZoY2lfcHJpdiAqcHJpdiA9ICgoc3RydWN0IHZoY2lfcHJpdiAqKXVyYi0+aGNwcml2KTsKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSBwcml2LT52ZGV2OworCisJZGJnX3ZoY2lfdHgoIlVSQiwgbG9jYWwgZGV2bnVtICV1LCByZW1vdGUgZGV2aWQgJXVcbiIsCisJCQkJdXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwgdmRldi0+ZGV2aWQpOworCisJcGR1cC0+YmFzZS5jb21tYW5kID0gVVNCSVBfQ01EX1NVQk1JVDsKKwlwZHVwLT5iYXNlLnNlcW51bSAgPSBwcml2LT5zZXFudW07CisJcGR1cC0+YmFzZS5kZXZpZCAgID0gdmRldi0+ZGV2aWQ7CisJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkKKwkJcGR1cC0+YmFzZS5kaXJlY3Rpb24gPSBVU0JJUF9ESVJfSU47CisJZWxzZQorCQlwZHVwLT5iYXNlLmRpcmVjdGlvbiA9IFVTQklQX0RJUl9PVVQ7CisJcGR1cC0+YmFzZS5lcCAgICAgID0gdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpOworCisJdXNiaXBfcGFja19wZHUocGR1cCwgdXJiLCBVU0JJUF9DTURfU1VCTUlULCAxKTsKKworCWlmICh1cmItPnNldHVwX3BhY2tldCkKKwkJbWVtY3B5KHBkdXAtPnUuY21kX3N1Ym1pdC5zZXR1cCwgdXJiLT5zZXR1cF9wYWNrZXQsIDgpOworfQorCitzdGF0aWMgc3RydWN0IHZoY2lfcHJpdiAqZGVxdWV1ZV9mcm9tX3ByaXZfdHgoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHZoY2lfcHJpdiAqcHJpdiwgKnRtcDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsICZ2ZGV2LT5wcml2X3R4LCBsaXN0KSB7CisJCWxpc3RfbW92ZV90YWlsKCZwcml2LT5saXN0LCAmdmRldi0+cHJpdl9yeCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcHJpdjsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBOVUxMOworfQorCisKKworc3RhdGljIGludCB2aGNpX3NlbmRfY21kX3N1Ym1pdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHZoY2lfcHJpdiAqcHJpdiA9IE5VTEw7CisKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3Qga3ZlYyBpb3ZbM107CisJc2l6ZV90IHR4c2l6ZTsKKworCXNpemVfdCB0b3RhbF9zaXplID0gMDsKKworCXdoaWxlICgocHJpdiA9IGRlcXVldWVfZnJvbV9wcml2X3R4KHZkZXYpKSAhPSBOVUxMKSB7CisJCWludCByZXQ7CisJCXN0cnVjdCB1cmIgKnVyYiA9IHByaXYtPnVyYjsKKwkJc3RydWN0IHVzYmlwX2hlYWRlciBwZHVfaGVhZGVyOworCQl2b2lkICppc29fYnVmZmVyID0gTlVMTDsKKworCQl0eHNpemUgPSAwOworCQltZW1zZXQoJnBkdV9oZWFkZXIsIDAsIHNpemVvZihwZHVfaGVhZGVyKSk7CisJCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisJCW1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7CisKKwkJZGJnX3ZoY2lfdHgoInNldHVwIHR4ZGF0YSB1cmIgJXBcbiIsIHVyYik7CisKKworCQkvKiAxLiBzZXR1cCB1c2JpcF9oZWFkZXIgKi8KKwkJc2V0dXBfY21kX3N1Ym1pdF9wZHUoJnBkdV9oZWFkZXIsIHVyYik7CisJCXVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbigmcGR1X2hlYWRlciwgMSk7CisKKwkJaW92WzBdLmlvdl9iYXNlID0gJnBkdV9oZWFkZXI7CisJCWlvdlswXS5pb3ZfbGVuICA9IHNpemVvZihwZHVfaGVhZGVyKTsKKwkJdHhzaXplICs9IHNpemVvZihwZHVfaGVhZGVyKTsKKworCQkvKiAyLiBzZXR1cCB0cmFuc2ZlciBidWZmZXIgKi8KKwkJaWYgKCF1c2JfcGlwZWluKHVyYi0+cGlwZSkgJiYgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMCkgeworCQkJaW92WzFdLmlvdl9iYXNlID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCQlpb3ZbMV0uaW92X2xlbiAgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCQl0eHNpemUgKz0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQl9CisKKwkJLyogMy4gc2V0dXAgaXNvX3BhY2tldF9kZXNjcmlwdG9yICovCisJCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisJCQlzc2l6ZV90IGxlbiA9IDA7CisKKwkJCWlzb19idWZmZXIgPSB1c2JpcF9hbGxvY19pc29fZGVzY19wZHUodXJiLCAmbGVuKTsKKwkJCWlmICghaXNvX2J1ZmZlcikgeworCQkJCXVzYmlwX2V2ZW50X2FkZCgmdmRldi0+dWQsCisJCQkJCQlTREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlpb3ZbMl0uaW92X2Jhc2UgPSBpc29fYnVmZmVyOworCQkJaW92WzJdLmlvdl9sZW4gID0gbGVuOworCQkJdHhzaXplICs9IGxlbjsKKwkJfQorCisJCXJldCA9IGtlcm5lbF9zZW5kbXNnKHZkZXYtPnVkLnRjcF9zb2NrZXQsICZtc2csIGlvdiwgMywgdHhzaXplKTsKKwkJaWYgKHJldCAhPSB0eHNpemUpIHsKKwkJCXVlcnIoInNlbmRtc2cgZmFpbGVkISwgcmV0dmFsICVkIGZvciAlemRcbiIsIHJldCwKKwkJCQkJCQkJdHhzaXplKTsKKwkJCWtmcmVlKGlzb19idWZmZXIpOworCQkJdXNiaXBfZXZlbnRfYWRkKCZ2ZGV2LT51ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJa2ZyZWUoaXNvX2J1ZmZlcik7CisJCWRiZ192aGNpX3R4KCJzZW5kIHR4ZGF0YVxuIik7CisKKwkJdG90YWxfc2l6ZSArPSB0eHNpemU7CisJfQorCisJcmV0dXJuIHRvdGFsX3NpemU7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB2aGNpX3VubGluayAqZGVxdWV1ZV9mcm9tX3VubGlua190eChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdmhjaV91bmxpbmsgKnVubGluaywgKnRtcDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgJnZkZXYtPnVubGlua190eCwgbGlzdCkgeworCQlsaXN0X21vdmVfdGFpbCgmdW5saW5rLT5saXN0LCAmdmRldi0+dW5saW5rX3J4KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJCXJldHVybiB1bmxpbms7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCB2aGNpX3NlbmRfY21kX3VubGluayhzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHZoY2lfdW5saW5rICp1bmxpbmsgPSBOVUxMOworCisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGt2ZWMgaW92WzNdOworCXNpemVfdCB0eHNpemU7CisKKwlzaXplX3QgdG90YWxfc2l6ZSA9IDA7CisKKwl3aGlsZSAoKHVubGluayA9IGRlcXVldWVfZnJvbV91bmxpbmtfdHgodmRldikpICE9IE5VTEwpIHsKKwkJaW50IHJldDsKKwkJc3RydWN0IHVzYmlwX2hlYWRlciBwZHVfaGVhZGVyOworCisJCXR4c2l6ZSA9IDA7CisJCW1lbXNldCgmcGR1X2hlYWRlciwgMCwgc2l6ZW9mKHBkdV9oZWFkZXIpKTsKKwkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkJbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKKworCQlkYmdfdmhjaV90eCgic2V0dXAgY21kIHVubGluaywgJWx1IFxuIiwgdW5saW5rLT5zZXFudW0pOworCisKKwkJLyogMS4gc2V0dXAgdXNiaXBfaGVhZGVyICovCisJCXBkdV9oZWFkZXIuYmFzZS5jb21tYW5kID0gVVNCSVBfQ01EX1VOTElOSzsKKwkJcGR1X2hlYWRlci5iYXNlLnNlcW51bSAgPSB1bmxpbmstPnNlcW51bTsKKwkJcGR1X2hlYWRlci5iYXNlLmRldmlkCT0gdmRldi0+ZGV2aWQ7CisJCXBkdV9oZWFkZXIuYmFzZS5lcAk9IDA7CisJCXBkdV9oZWFkZXIudS5jbWRfdW5saW5rLnNlcW51bSA9IHVubGluay0+dW5saW5rX3NlcW51bTsKKworCQl1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4oJnBkdV9oZWFkZXIsIDEpOworCisJCWlvdlswXS5pb3ZfYmFzZSA9ICZwZHVfaGVhZGVyOworCQlpb3ZbMF0uaW92X2xlbiAgPSBzaXplb2YocGR1X2hlYWRlcik7CisJCXR4c2l6ZSArPSBzaXplb2YocGR1X2hlYWRlcik7CisKKwkJcmV0ID0ga2VybmVsX3NlbmRtc2codmRldi0+dWQudGNwX3NvY2tldCwgJm1zZywgaW92LCAxLCB0eHNpemUpOworCQlpZiAocmV0ICE9IHR4c2l6ZSkgeworCQkJdWVycigic2VuZG1zZyBmYWlsZWQhLCByZXR2YWwgJWQgZm9yICV6ZFxuIiwgcmV0LAorCQkJCQkJCQl0eHNpemUpOworCQkJdXNiaXBfZXZlbnRfYWRkKCZ2ZGV2LT51ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQkJcmV0dXJuIC0xOworCQl9CisKKworCQlkYmdfdmhjaV90eCgic2VuZCB0eGRhdGFcbiIpOworCisJCXRvdGFsX3NpemUgKz0gdHhzaXplOworCX0KKworCXJldHVybiB0b3RhbF9zaXplOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgdmhjaV90eF9sb29wKHN0cnVjdCB1c2JpcF90YXNrICp1dCkKK3sKKwlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9IGNvbnRhaW5lcl9vZih1dCwgc3RydWN0IHVzYmlwX2RldmljZSwgdGNwX3R4KTsKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSBjb250YWluZXJfb2YodWQsIHN0cnVjdCB2aGNpX2RldmljZSwgdWQpOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQl1aW5mbygidmhjaV90eCBzaWduYWwgY2F0Y2hlZFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh2aGNpX3NlbmRfY21kX3N1Ym1pdCh2ZGV2KSA8IDApCisJCQlicmVhazsKKworCQlpZiAodmhjaV9zZW5kX2NtZF91bmxpbmsodmRldikgPCAwKQorCQkJYnJlYWs7CisKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHZkZXYtPndhaXRxX3R4LAorCQkJCSghbGlzdF9lbXB0eSgmdmRldi0+cHJpdl90eCkgfHwKKwkJCQkgIWxpc3RfZW1wdHkoJnZkZXYtPnVubGlua190eCkpKTsKKworCQlkYmdfdmhjaV90eCgicGVuZGluZyB1cmJzID8sIG5vdyB3YWtlIHVwXG4iKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGQ3MmJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZwpAQCAtMCwwICsxLDcgQEAKK2NvbmZpZyBXMzVVTkQKKwl0cmlzdGF0ZSAiV2luYm9uZCBkcml2ZXIiCisJZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTCAmJiAhNEtTVEFDS1MKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGhpZ2hseSBleHBlcmltZW50YWwgZHJpdmVyIGZvciB3aW5ib25kIHdpZmkgY2FyZCBvbiBzb21lIEtvaGppbnNoYSBub3RlYm9va3MKKwkgIENoZWNrIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC93aW5ib25kcG9ydC8gZm9yIG5ldyB2ZXJzaW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Yzk4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisJRFJJVkVSX0RJUj0uL2xpbnV4CisKK3czNXVuZC1vYmpzIDo9ICQoRFJJVkVSX0RJUikvd2J1c2IubyAkKERSSVZFUl9ESVIpL3diMzVyZWcubyAkKERSSVZFUl9ESVIpL3diMzVyeC5vICQoRFJJVkVSX0RJUikvd2IzNXR4Lm8gXAorCW1kcy5vIFwKKwltbG1ldHhyeC5vIFwKKwltdG8ubwlcCisJcGh5X2NhbGlicmF0aW9uLm8JXAorCXJlZy5vCQkJXAorCXJ4aXNyLm8JCQlcCisJc21lX2FwaS5vCQlcCisJd2JoYWwubwkJCVwKKwl3YmxpbnV4Lm8JCVwKKworCitvYmotJChDT05GSUdfVzM1VU5EKSArPSB3MzV1bmQubworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwN2I2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9SRUFETUUKQEAgLTAsMCArMSwxMCBAQAorVE9ETzoKKwktIHNwYXJzZSBjbGVhbnVwcworCS0gY2hlY2twYXRjaCBjbGVhbnVwcworCS0ga2VybmVsZG9jIGNsZWFudXBzCisJLSByZW1vdmUgdHlwZWRlZnMKKwktIHJlbW92ZSB1bnVzZWQgaW9jdGxzCisJLSB1c2UgY2ZnODAyMTEgZm9yIHJlZ3VsYXRvcnkgc3R1ZmYKKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQKK1BhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2FkYXB0ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2FkYXB0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDk3MDFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYWRhcHRlci5oCkBAIC0wLDAgKzEsMjMgQEAKKy8vCisvLyBBREFQVEVSLkggLQorLy8gV2luZG93cyBORElTIGdsb2JhbCB2YXJpYWJsZSAnQWRhcHRlcicgdHlwZWRlZgorLy8KKyNkZWZpbmUgTUFYX0FOU0lfU1RSSU5HCQk0MAordHlwZWRlZiBzdHJ1Y3QgV0IzMl9BREFQVEVSCit7CisJdTMyIEFkYXB0ZXJJbmRleDsgLy8gMjAwNjA3MDMuNCBBZGQgZm9yIHVzaW5nIHBBZGFwdGVyQ29udGV4dCBnbG9iYWwgQWRhcHRlciBwb2ludAorCisJV0JfTE9DQUxERVNDUklQVAlzTG9jYWxQYXJhOwkJLy8gTXlzZWxmIGNvbm5lY3RlZCBwYXJhbWV0ZXJzCisJUFdCX0JTU0RFU0NSSVBUSU9OCWFzQlNTRGVzY3JpcHRFbGVtZW50OworCisJTUxNRV9GUkFNRQkJc01sbWVGcmFtZTsJCS8vIGNvbm5lY3QgdG8gcGVlclNUQSBwYXJhbWV0ZXJzCisKKwlNVE9fUEFSQU1FVEVSUwkJc010b1BhcmE7IC8vIE1UT19zdHJ1Y3QgLi4uCisJaHdfZGF0YV90CQkJc0h3RGF0YTsgLy9Gb3IgSEFMCisJTURTCQkJCQlNZHM7CisKKwlXQkxJTlVYCQlXYkxpbnV4OworICAgICAgICBzdHJ1Y3QgaXdfc3RhdGlzdGljcyBpd19zdGF0czsKKworCXU4CUxpbmtOYW1lW01BWF9BTlNJX1NUUklOR107Cit9IFdCMzJfQURBUFRFUiwgQURBUFRFUiwgKlBXQjMyX0FEQVBURVIsICpQQURBUFRFUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc19mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9ic3NfZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NTdiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9ic3NfZi5oCkBAIC0wLDAgKzEsNTkgQEAKKy8vCisvLyBCU1MgZGVzY3JpcHRvciBEYXRhQmFzZSBtYW5hZ2VtZW50IGdsb2JhbCBmdW5jdGlvbgorLy8KKwordm9pZCB2QlNTZGVzY3JpcHRpb25Jbml0KFBXQjMyX0FEQVBURVIgQWRhcHRlcik7Cit2b2lkIHZCU1Nmb3VuZExpc3QoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3U4IGJvQ2hhbkZpbHRlcihQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHU4IENoYW5Obyk7Cit1MTYgd0JTU2FsbG9jYXRlRW50cnkoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3UxNiB3QlNTR2V0RW50cnkoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3ZvaWQgdlNpbXBsZUhvdXNlS2VlcGluZyhQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordTE2IHdCU1Nob3VzZUtlZXBpbmcoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3ZvaWQgQ2xlYXJCU1NkZXNjcHQoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1MTYgaSk7Cit1MTYgd0JTU2ZpbmRCc3NJRChQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHU4ICpwYkJzc2lkKTsKK3UxNiB3QlNTZmluZERlZGljYXRlQ2FuZGlkYXRlKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgc3RydWN0IFNTSURfRWxlbWVudCAqcHNTc2lkLCB1OCAqcGJCc3NpZCk7Cit1MTYgd0JTU2ZpbmRNQUNhZGRyKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTggKnBiTWFjQWRkcik7Cit1MTYgd0JTU3NlYXJjaE1BQ2FkZHIoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1OCAqcGJNYWNBZGRyLCB1OCBiYW5kKTsKK3UxNiB3QlNTYWRkU2NhbkRhdGEoUFdCMzJfQURBUFRFUiwgdTE2LCBwc1JYREFUQSk7Cit1MTYgd0JTU1VwZGF0ZVNjYW5EYXRhKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTE2IHdCc3NJZHgsIHBzUlhEQVRBIHBzUmN2RGF0YSk7Cit1MTYgd0JTU2NyZWF0ZUlCU1NkYXRhKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgUFdCX0JTU0RFU0NSSVBUSU9OIHBzRGVzRGF0YSk7Cit2b2lkIERlc2lyZWRSYXRlMkJTU2Rlc2NyaXB0b3IoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhLAorCQkJCQkJCSB1OCAqcEJhc2ljUmF0ZVNldCwgdTggQmFzaWNSYXRlQ291bnQsCisJCQkJCQkJIHU4ICpwT3BlcmF0aW9uUmF0ZVNldCwgdTggT3BlcmF0aW9uUmF0ZUNvdW50KTsKK3ZvaWQgRGVzaXJlZFJhdGUySW5mb0VsZW1lbnQoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1OAkqYWRkciwgdTE2ICppRmlsZE9mZnNldCwKKwkJCQkJCQkgdTggKnBCYXNpY1JhdGVTZXQsIHU4IEJhc2ljUmF0ZUNvdW50LAorCQkJCQkJCSB1OCAqcE9wZXJhdGlvblJhdGVTZXQsIHU4IE9wZXJhdGlvblJhdGVDb3VudCk7Cit2b2lkIEJTU0FkZElCU1NkYXRhKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgUFdCX0JTU0RFU0NSSVBUSU9OIHBzRGVzRGF0YSk7Cit1bnNpZ25lZCBjaGFyIGJvQ21wTWFjQWRkciggUFVDSEFSLCBQVUNIQVIgKTsKK3Vuc2lnbmVkIGNoYXIgYm9DbXBTU0lEKHN0cnVjdCBTU0lEX0VsZW1lbnQgKnBzU1NJRDEsIHN0cnVjdCBTU0lEX0VsZW1lbnQgKnBzU1NJRDIpOwordTE2IHdCU1NmaW5kU1NJRChQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHN0cnVjdCBTU0lEX0VsZW1lbnQgKnBzU3NpZCk7Cit1MTYgd1JvYW1pbmdRdWVyeShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCB2UmF0ZVRvQml0bWFwKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTE2IGluZGV4KTsKK3U4IGJSYXRlVG9CaXRtYXBJbmRleChQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHU4IGJSYXRlKTsKK3U4IGJCaXRtYXBUb1JhdGUodTggaSk7Cit1bnNpZ25lZCBjaGFyIGJvSXNFUlBzdGEoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1MTYgaSk7Cit1bnNpZ25lZCBjaGFyIGJvQ2hlY2tDb25uZWN0KFBXQjMyX0FEQVBURVIgQWRhcHRlcik7Cit1bnNpZ25lZCBjaGFyIGJvQ2hlY2tTaWduYWwoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3ZvaWQgQWRkSUJTU0llKFBXQjMyX0FEQVBURVIgQWRhcHRlcixQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhICk7Ly9hZGRlZCBieSB3cyBmb3IgV1BBX05vbmUwNi8wMS8wNAordm9pZCBCc3NTY2FuVXBUb0RhdGUoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3ZvaWQgQnNzVXBUb0RhdGUoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3ZvaWQgUmF0ZVNvcnQodTggKlJhdGVBcnJheSwgdTggbnVtLCB1OCBtb2RlKTsKK3ZvaWQgUmF0ZVJlU29ydEZvclNSYXRlKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTggKlJhdGVBcnJheSwgdTggbnVtKTsKK3ZvaWQgQXNzZW1ibGVfSUUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1MTYgd0Jzc0lkeCk7Cit2b2lkIFNldE1heFR4UmF0ZShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOworCit2b2lkIENyZWF0ZVdwYUlFKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTE2KiBpRmlsZE9mZnNldCwgUFVDSEFSIG1zZywgc3RydWN0ICBNYW5hZ2VtZW50X0ZyYW1lKiBtc2dIZWFkZXIsCisJCQkJIHN0cnVjdCBBc3NvY2lhdGlvbl9SZXF1ZXN0X0ZyYW1lX0JvZHkqIG1zZ0JvZHksIHUxNiBpTVNpbmRleCk7IC8vYWRkZWQgYnkgV1MgMDUvMTQvMDUKKworI2lmZGVmIF9XUEEyXwordm9pZCBDcmVhdGVSc25JRShQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHUxNiogaUZpbGRPZmZzZXQsIFBVQ0hBUiBtc2csIHN0cnVjdCAgTWFuYWdlbWVudF9GcmFtZSogbXNnSGVhZGVyLAorCQkJCSBzdHJ1Y3QgQXNzb2NpYXRpb25fUmVxdWVzdF9GcmFtZV9Cb2R5KiBtc2dCb2R5LCB1MTYgaU1TaW5kZXgpOy8vYWRkZWQgYnkgV1MgMDUvMTQvMDUKKwordTE2IFNlYXJjaFBta2lkKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgc3RydWN0ICBNYW5hZ2VtZW50X0ZyYW1lKiBtc2dIZWFkZXIsCisJCQkJICAgc3RydWN0IFBNS0lEX0luZm9ybWF0aW9uX0VsZW1lbnQgKiBBc3NvUmVxX1BNS0lEICk7CisjZW5kaWYKKworCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9ic3Nkc2NwdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzZHNjcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzE1MGEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzZHNjcHQuaApAQCAtMCwwICsxLDE1NiBAQAorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworLy8JYnNzZHNjcHQuYworLy8JCUJTUyBkZXNjcmlwdG9yIGRhdGEgYmFzZQorLy8JaGlzdG9yeSA6CisvLworLy8JRGVzY3JpcHRpb246CisvLwkJQlNTIGRlc2NyaXB0b3IgZGF0YSBiYXNlIHdpbGwgc3RvcmUgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBzdGF0aW9ucyBhdCB0aGUKKy8vCQlzdXJyb3VuZGluZyBlbnZpcm9ubWVudC4gVGhlIGZpcnN0IGVudHJ5KCBwc0JTUygwKSApIHdpbGwgbm90IGJlIHVzZWQgYW5kIHRoZQorLy8JCXNlY29uZCBvbmUoIHBzQlNTKDEpICkgd2lsbCBiZSB1c2VkIGZvciB0aGUgYnJvYWRjYXN0IGFkZHJlc3MuCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKKy8vI2RlZmluZSBNQVhfQUNDX1JTU0lfQ09VTlQJCTEwCisjZGVmaW5lIE1BWF9BQ0NfUlNTSV9DT1VOVAkJNgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBCU1MgRGVzY3JpcHRpb24gc2V0IEVsZW1lbnQgLCB0byBzdG9yZSBzY2FuIHJlY2VpdmVkIEJlYWNvbiBpbmZvcm1hdGlvbgorLy8KKy8vIE91cidzIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSB0aGUgc3BlY3MuIFRoZSBzcGVjaWZ5IGEgUEhZX1BhcmFtZXRlcl9TZXQuCisvLyBTaW5jZSB3ZSdyZSBvbmx5IGRvaW5nIGEgRFMgZGVzaWduIHJpZ2h0IG5vdywgd2UganVzdCBoYXZlIGEgRFMgc3RydWN0dXJlLgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit0eXBlZGVmIHN0cnVjdCBCU1NEZXNjcmlwdGlvbkVsZW1lbnQKK3sKKwl1MzIJCVNsb3RWYWxpZDsKKwl1MzIJCVBvd2VyU2F2ZU1vZGU7CisJUlhMQVlFUjEJUnhMYXllcjE7CisKKyAgICB1OAkJYWJQZWVyQWRkcmVzc1sgTUFDX0FERFJfTEVOR1RIICsgMiBdOyAvLyBwZWVyIE1BQyBBZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uIDYtT0NURVQgdmFsdWUKKyAgICB1MzIJCWR3QmdTY2FuU3RhbXA7CQkvLyBCZ1NjYW4gU2VxdWVuY2UgQ291bnRlciBzdGFtcCwgcmVjb3JkIHBzUk9BTS0+ZHdTY2FuQ291bnRlci4KKworCXUxNgkJQmVhY29uX1BlcmlvZDsKKwl1MTYJCXdBVElNX1dpbmRvdzsKKworICAgIHU4CQlhYkJzc0lEWyBNQUNfQUREUl9MRU5HVEggKyAyIF07CQkJCS8vIDZCCisKKyAgICB1OAkJYkJzc1R5cGU7CisgICAgdTgJCURUSU1fUGVyaW9kOyAgICAgICAgLy8gMSBvY3RldCB1c3VhbGx5IGZyb20gVElNIGVsZW1lbnQsIGlmIHByZXNlbnQKKwl1OAkJYm9JblRpbWVySGFuZGxlcjsKKwl1OAkJYm9FUlA7CQkJLy8gYW5hbHlzaXMgRVJQIG9yIChleHRlbmRlZCkgc3VwcG9ydGVkIHJhdGUgZWxlbWVudAorCisJdTgJCVRpbWVzdGFtcFs4XTsKKwl1OAkJQmFzaWNSYXRlWzMyXTsKKwl1OAkJT3BlcmF0aW9uYWxSYXRlWzMyXTsKKwl1MzIJCWR3QmFzaWNSYXRlQml0bWFwOwkJCS8vYml0IG1hcCwgcmV0cmlldmUgZnJvbSBTdXBwb3J0ZWRSYXRlU2V0CisJdTMyCQlkd09wZXJhdGlvbmFsUmF0ZUJpdG1hcDsJLy9iaXQgbWFwLCByZXRyaWV2ZSBmcm9tIFN1cHBvcnRlZFJhdGVTZXQgYW5kCisJCQkJCQkJCQkJLy8gRXh0ZW5kZWRTdXBwb3J0ZWRSYXRlU2V0CisJLy8gRm9yIFJTU0kgY2FsY3VsYXRpbmcKKwl1MzIJCUhhbFJzc2lbTUFYX0FDQ19SU1NJX0NPVU5UXTsgLy8gRW5jb2RlLiBJdCBtdXN0IHVzZSBNQUNSTyBvZiBIQUwgdG8gZ2V0IHRoZSBMTkEgYW5kIEFHQyBkYXRhCisJdTMyCQlIYWxSc3NpSW5kZXg7CisKKwkvLy8vRnJvbSBiZWFjb24vcHJvYmUgcmVzcG9uc2UKKyAgICBzdHJ1Y3QgU1NJRF9FbGVtZW50IFNTSUQ7CQkJCS8vIDM0QgorCXU4CXJlc2VydmVkXzFbIDIgXTsKKworICAgIHN0cnVjdCBDYXBhYmlsaXR5X0luZm9ybWF0aW9uX0VsZW1lbnQgICBDYXBhYmlsaXR5SW5mb3JtYXRpb247ICAvLyAyQgorCXU4CXJlc2VydmVkXzJbIDIgXTsKKworICAgIHN0cnVjdCBDRl9QYXJhbWV0ZXJfU2V0X0VsZW1lbnQgICAgQ0ZfUGFyYW1ldGVyX1NldDsJCS8vIDhCCisgICAgc3RydWN0IElCU1NfUGFyYW1ldGVyX1NldF9FbGVtZW50ICBJQlNTX1BhcmFtZXRlcl9TZXQ7CQkvLyA0QgorICAgIHN0cnVjdCBUSU1fRWxlbWVudCAgICAgICAgICAgICAgICAgVElNX0VsZW1lbnRfU2V0OyAJCQkvLyAyNTZCCisKKyAgICBzdHJ1Y3QgRFNfUGFyYW1ldGVyX1NldF9FbGVtZW50ICAgIERTX1BhcmFtZXRlcl9TZXQ7CQkvLyAzQgorCXU4CXJlc2VydmVkXzM7CisKKwlzdHJ1Y3QgRVJQX0luZm9ybWF0aW9uX0VsZW1lbnQJCUVSUF9JbmZvcm1hdGlvbl9TZXQ7CS8vIDNCCisJdTgJcmVzZXJ2ZWRfNDsKKworICAgIHN0cnVjdCBTdXBwb3J0ZWRfUmF0ZXNfRWxlbWVudCAgICAgU3VwcG9ydGVkUmF0ZVNldDsJCQkvLyAxMEIKKwl1OAlyZXNlcnZlZF81WzJdOworCisJc3RydWN0IEV4dGVuZGVkX1N1cHBvcnRlZF9SYXRlc19FbGVtZW50CUV4dGVuZGVkU3VwcG9ydGVkUmF0ZVNldDsJLy8gMjU3QgorCXU4CXJlc2VydmVkXzZbM107CisKKwl1OAliYW5kOworCXU4CXJlc2VydmVkXzdbM107CisKKwkvLyBmb3IgTUxNRSBtb2R1bGUKKyAgICB1MTYJCXdTdGF0ZTsJCQkvLyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3lzdGVtCisJdTE2CQl3SW5kZXg7CQkJLy8gVEhJUyBCU1MgZWxlbWVudCBlbnRyeSBpbmRleAorCisJdm9pZCoJcHNBZGFwdGVyOwkJLy8gcG9pbnRlciB0byBUSElTIEFkYXB0ZXIKKwlPU19USU1FUgluVGltZXI7ICAvLyBNTE1FIHRpbWVyCisKKyAgICAvLyBBdXRoZW50aWNhdGlvbgorICAgIHUxNgkJd0F1dGhBbGdvOyAgICAgIC8vIHBlZXIgTUFDIE1MTUUgdXNlIEF1dGggYWxnb3JpdGhtLCBkZWZhdWx0IE9QRU5fQVVUSAorICAgIHUxNgkJd0F1dGhTZXFOdW07ICAgIC8vIGN1cnJlbnQgbG9jYWwgTUFDIHNlbmRvdXQgQXV0aFJlcSBzZXF1ZW5jZSBudW1iZXIKKworCXU4CQlhdXRoX2NoYWxsZW5nZVRleHRbMTI4XTsKKworCS8vLy9Gb3IgWFA6CisgICAgdTMyCQlpZXNfbGVuOwkJLy8gaW5mb3JtYXRpb24gZWxlbWVudCBsZW5ndGgKKyAgICB1OAkJaWVzWzI1Nl07CQkvLyBpbmZvcm1hdGlvbiBlbGVtZW50CisKKwkvLy8vRm9yIFdQQQorCXU4CVJzbkllX1R5cGVbMl07CQkvL2FkZGVkIGJ5IHdzIGZvciBkaXN0aW5ndWlzaCBXUEEgYW5kIFdQQTIgMDUvMTQvMDQKKwl1OAlSc25JZV9sZW47CisgICAgdTgJUnNuX051bTsKKworICAgIC8vIHRvIHJlY29yZCB0aGUgcnNuIGNpcGhlciBzdWl0ZXMsYWRkZGVkIGJ5IHdzIDA5LzA1LzA0CisJU1VJVEVfU0VMRUNUT1IJCQlncm91cF9jaXBoZXI7IC8vIDRCCisJU1VJVEVfU0VMRUNUT1IJCQlwYWlyd2lzZV9rZXlfY2lwaGVyX3N1aXRlc1tXTEFOX01BWF9QQUlSV0lTRV9DSVBIRVJfU1VJVEVfQ09VTlRdOworCVNVSVRFX1NFTEVDVE9SCQkJYXV0aF9rZXlfbWd0X3N1aXRlc1tXTEFOX01BWF9BVVRIX0tFWV9NR1RfU1VJVEVfTElTVF9DT1VOVF07CisKKwl1MTYJCQkJCXBhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVfY291bnQ7CisJdTE2CQkJCQlhdXRoX2tleV9tZ3Rfc3VpdGVfY291bnQ7CisKKwl1OAkJCQkJcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9zZWxlY3RlZDsKKwl1OAkJCQkJYXV0aF9rZXlfbWd0X3N1aXRlX3NlbGVjdGVkOworCXU4CQkJCQlyZXNlcnZlZF84WzJdOworCisJc3RydWN0IFJTTl9DYXBhYmlsaXR5X0VsZW1lbnQgIHJzbl9jYXBhYmlsaXRpZXM7IC8vIDJCCisJdTgJCQkJCXJlc2VydmVkXzlbMl07CisKKyAgICAvL3RvIHJlY29yZCB0aGUgcnNuIGNpcGhlciBzdWl0ZXMgZm9yIFdQQTIKKyAgICAjaWZkZWYgX1dQQTJfCisJdTMyCQkJCQlwcmVfYXV0aDsJCS8vYWRkZWQgYnkgV1MgZm9yIGRpc3Rpbmd1aXNoIGZvciAwNS8wNC8wNAorICAgIFNVSVRFX1NFTEVDVE9SCQkJd3BhMl9ncm91cF9jaXBoZXI7IC8vIDRCCisJU1VJVEVfU0VMRUNUT1IJCQl3cGEyX3BhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVzW1dMQU5fTUFYX1BBSVJXSVNFX0NJUEhFUl9TVUlURV9DT1VOVF07CisJU1VJVEVfU0VMRUNUT1IJCQl3cGEyX2F1dGhfa2V5X21ndF9zdWl0ZXNbV0xBTl9NQVhfQVVUSF9LRVlfTUdUX1NVSVRFX0xJU1RfQ09VTlRdOworCisJdTE2CQkJCQl3cGEyX3BhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVfY291bnQ7CisJdTE2CQkJCQl3cGEyX2F1dGhfa2V5X21ndF9zdWl0ZV9jb3VudDsKKworCXU4CQkJCQl3cGEyX3BhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVfc2VsZWN0ZWQ7CisJdTgJCQkJCXdwYTJfYXV0aF9rZXlfbWd0X3N1aXRlX3NlbGVjdGVkOworCXU4CQkJCQlyZXNlcnZlZF8xMFsyXTsKKworCXN0cnVjdCBSU05fQ2FwYWJpbGl0eV9FbGVtZW50ICB3cGEyX3Jzbl9jYXBhYmlsaXRpZXM7IC8vIDJCCisJdTgJCQkJCXJlc2VydmVkXzExWzJdOworICAgICNlbmRpZiAvL2VuZGlmIF9XUEEyXworCisJLy9Gb3IgUmVwbGF5IHByb3RlY3Rpb24KKy8vCXU4CQlQYWlyd2lzZVRTQ1s2XTsKKy8vCXU4CQlHcm91cFRTQ1s2XTsKKworCS8vLy9Gb3IgdXAtdG8tZGF0ZQorCXUzMgkJU2NhblRpbWVTdGFtcDsJLy9mb3IgdGhlIGRlY2lzaW9uIHdoZXRoZXIgdGhlIHN0YXRpb24vQVAobWF5IGV4aXN0IGF0CisJCQkJCQkJLy9kaWZmZXJlbnQgY2hhbm5lbHMpIGhhcyBsZWZ0LiBJdCBtdXN0IGJlIGRldGVjdGVkIGJ5CisJCQkJCQkJLy9zY2FubmluZy4gTG9jYWwgZGV2aWNlIG1heSBjb25uZWN0ZWQgb3IgZGlzY29ubmVjdGVkLgorCXUzMgkJQnNzVGltZVN0YW1wOwkvL09ubHkgZm9yIHRoZSBkZWNpc2lvbiB3aGV0aGVyIHRoZSBzdGF0aW9uL0FQKGV4aXN0IGluCisJCQkJCQkJLy90aGUgc2FtZSBjaGFubmVsLCBhbmQgbm8gc2Nhbm5pbmcpIGlmIGxvY2FsIGRldmljZSBoYXMKKwkJCQkJCQkvL2Nvbm5lY3RlZCBzdWNjZXNzZnVsbHkuCisKKwkvLyAyMDA2MTEwOCBBZGQgZm9yIHN0b3JpbmcgV1BTX0lFLiBbRSBpZF1bTGVuZ3RoXVtPVUldW0RhdGFdCisJdTgJCVdQU19JRV9EYXRhW01BWF9JRV9BUFBFTkRfU0laRV07CisJdTE2CQlXUFNfSUVfbGVuZ3RoOworCXUxNgkJV1BTX0lFX2xlbmd0aF90bXA7IC8vIEZvciB2ZXJpZnkgdGhlcmUgaXMgYW4gV1BTX0lFIGluIEJlYWNvbiBvciBwcm9iZSByZXNwb25zZQorCit9IFdCX0JTU0RFU0NSSVBUSU9OLCAqUFdCX0JTU0RFU0NSSVBUSU9OOworCisjZGVmaW5lIHdCU1NDb25uZWN0ZWRTVEEoQWRhcHRlcikgICAgICAgICAgICAgXAorICAgICgodTE2KShBZGFwdGVyKS0+c0xvY2FsUGFyYS53Q29ubmVjdGVkU1RBaW5kZXgpCisKKyNkZWZpbmUgcHNCU1MoaSkJCQkoJihBZGFwdGVyLT5hc0JTU0Rlc2NyaXB0RWxlbWVudFsoaSldKSkKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9kc190a2lwLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9kc190a2lwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjllNTA1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2RzX3RraXAuaApAQCAtMCwwICsxLDMzIEBACisvLyBSb3RhdGlvbiBmdW5jdGlvbnMgb24gMzIgYml0IHZhbHVlcworI2RlZmluZSBST0wzMiggQSwgbiApIFwKKyAgICAoICgoQSkgPDwgKG4pKSB8ICggKChBKT4+KDMyLShuKSkpICAmICggKDFVTCA8PCAobikpIC0gMSApICkgKQorCisjZGVmaW5lIFJPUjMyKCBBLCBuICkgICBST0wzMiggKEEpLCAzMi0obikgKQorCisKK3R5cGVkZWYgc3RydWN0IHRraXAKK3sKKyAgICB1MzIJSzAsIEsxOwkJLy8gS2V5CisJdW5pb24KKwl7CisJCXN0cnVjdCAvLyBDdXJyZW50IHN0YXRlCisJCXsKKwkJCXUzMglMOworCQkJdTMyCVI7CisJCX07CisJCXU4CUxSWzhdOworCX07CisJdW5pb24KKwl7CisJCXUzMglNOwkJLy8gTWVzc2FnZSBhY2N1bXVsYXRvciAoc2luZ2xlIHdvcmQpCisJCXU4CU1iWzRdOworCX07CisJczMyCQlieXRlc19pbl9NOwkvLyAjIGJ5dGVzIGluIE0KK30gdGtpcF90OworCisvL3ZvaWQgX2FwcGVuZF9kYXRhKCBQVUNIQVIgcERhdGEsIHUxNiBzaXplLCB0a2lwX3QgKnAgKTsKK3ZvaWQgTWRzX01pY0dldCggIHZvaWQqIEFkYXB0ZXIsICB2b2lkKiBwUnhMYXllcjEsICBQVUNIQVIgcEtleSwgIFBVQ0hBUiBwTWljICk7Cit2b2lkIE1kc19NaWNGaWxsKCAgdm9pZCogQWRhcHRlciwgIHZvaWQqIHBEZXMsICBQVUNIQVIgWG1pdEJ1ZkFkZHJlc3MgKTsKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2dsXzgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9nbF84MDIxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDZkODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9nbF84MDIxMS5oCkBAIC0wLDAgKzEsMTI1IEBACisKKyNpZm5kZWYgX19HTF84MDIxMV9IX18KKyNkZWZpbmUgX19HTF84MDIxMV9IX18KKworLyoqKioqKioqKioqKioqKioqKiBDT05TVEFOVCBBTkQgTUFDUk8gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJTUyBUeXBlICovCitlbnVtIHsKKyAgICBXTEFOX0JTU1RZUEVfSU5GUkFTVFJVQ1RVUkUgICAgICAgICA9IDAsCisgICAgV0xBTl9CU1NUWVBFX0lOREVQRU5ERU5ULAorICAgIFdMQU5fQlNTVFlQRV9BTllfQlNTLAorfTsKKworCisKKy8qIFByZWFtYmxlX1R5cGUsIHNlZSA8U0ZTLTgwMi4xMUctTUlCLTIwMz4gKi8KK3R5cGVkZWYgZW51bSBwcmVhbWJsZV90eXBlIHsKKyAgICBXTEFOX1BSRUFNQkxFX1RZUEVfU0hPUlQsCisgICAgV0xBTl9QUkVBTUJMRV9UWVBFX0xPTkcsCit9ICAgIHByZWFtYmxlX3R5cGVfZTsKKworCisvKiBTbG90X1RpbWVfVHlwZSwgc2VlIDxTRlMtODAyLjExRy1NSUItMjA4PiAqLwordHlwZWRlZiBlbnVtIHNsb3RfdGltZV90eXBlIHsKKyAgICBXTEFOX1NMT1RfVElNRV9UWVBFX0xPTkcsCisgICAgV0xBTl9TTE9UX1RJTUVfVFlQRV9TSE9SVCwKK30gICAgc2xvdF90aW1lX3R5cGVfZTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBFbmNyeXB0aW9uIE1vZGUgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgV0VQX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKKyAgICBXRVBfNjQsCisgICAgV0VQXzEyOCwKKworICAgIEVOQ1JZUFRfRElTQUJMRSwKKyAgICBFTkNSWVBUX1dFUCwKKyAgICBFTkNSWVBUX1dFUF9OT0tFWSwKKyAgICBFTkNSWVBUX1RLSVAsCisgICAgRU5DUllQVF9US0lQX05PS0VZLAorICAgIEVOQ1JZUFRfQ0NNUCwKKyAgICBFTkNSWVBUX0NDTVBfTk9LRVksCit9ICAgIGVuY3J5cHRpb25fbW9kZV9lOworCit0eXBlZGVmIGVudW0gX1dMQU5fUkFESU8geworICAgIFdMQU5fUkFESU9fT04sCisgICAgV0xBTl9SQURJT19PRkYsCisgICAgV0xBTl9SQURJT19NQVgsIC8vIG5vdCBhIHJlYWwgdHlwZSwgZGVmaW5lZCBhcyBhbiB1cHBlciBib3VuZAorfSBXTEFOX1JBRElPOworCit0eXBlZGVmIHN0cnVjdCBfV0xBTl9SQURJT19TVEFUVVMgeworCVdMQU5fUkFESU8gSFdTdGF0dXM7CisJV0xBTl9SQURJTyBTV1N0YXR1czsKK30gV0xBTl9SQURJT19TVEFUVVM7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gMjAwNDEwMjEgMS4xLjgxLjEwMDAgeWJqaWFuZworLy8gYWRkIGZvciByYWRpbyBub3RpZmljYXRpb24KK3R5cGVkZWYKK3ZvaWQgKCpSQURJT19OT1RJRklDQVRJT05fSEFORExFUikoCisJdm9pZCAqRGF0YSwKKwl2b2lkICpSYWRpb1N0YXR1c0J1ZmZlciwKKwl1MzIgUmFkaW9TdGF0dXNCdWZmZXJMZW4KKwkpOworCit0eXBlZGVmIHN0cnVjdCBfV0xBTl9SQURJT19OT1RJRklDQVRJT04KK3sKKyAgICBSQURJT19OT1RJRklDQVRJT05fSEFORExFUiBSYWRpb0NoYW5nZUhhbmRsZXI7CisgICAgdm9pZCAqRGF0YTsKK30gV0xBTl9SQURJT19OT1RJRklDQVRJT047CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gMjAwNDExMDIgMS4xLjkxLjEwMDAgeWJqaWFuZworLy8gYWRkIGZvciBPSURfODAyXzExX0NVU1RfUkVHSU9OX0NBUEFCSUxJVElFUyBhbmQgT0lEXzgwMl8xMV9PSURfUkVHSU9OCit0eXBlZGVmIGVudW0gX1dMQU5fUkVHSU9OX0NPREUKK3sKKwlXTEFOX1JFR0lPTl9VTktOT1dOLAorCVdMQU5fUkVHSU9OX0VVUk9QRSwKKwlXTEFOX1JFR0lPTl9KQVBBTiwKKwlXTEFOX1JFR0lPTl9VU0EsCisJV0xBTl9SRUdJT05fRlJBTkNFLAorCVdMQU5fUkVHSU9OX1NQQUlOLAorCVdMQU5fUkVHSU9OX0lTUkFFTCwKKwlXTEFOX1JFR0lPTl9NQVgsIC8vIG5vdCBhIHJlYWwgdHlwZSwgZGVmaW5lZCBhcyBhbiB1cHBlciBib3VuZAorfSBXTEFOX1JFR0lPTl9DT0RFOworCisjZGVmaW5lIFJFR0lPTl9OQU1FX01BWF9MRU5HVEggICAyNTYKKwordHlwZWRlZiBzdHJ1Y3QgX1dMQU5fUkVHSU9OX0NIQU5ORUxTCit7CisJdTMyIExlbmd0aDsKKwl1MzIgTmFtZUxlbmd0aDsKKwl1OCBOYW1lW1JFR0lPTl9OQU1FX01BWF9MRU5HVEhdOworCVdMQU5fUkVHSU9OX0NPREUgQ29kZTsKKwl1MzIgRnJlcXVlbmN5WzFdOworfSBXTEFOX1JFR0lPTl9DSEFOTkVMUzsKKwordHlwZWRlZiBzdHJ1Y3QgX1dMQU5fUkVHSU9OX0NBUEFCSUxJVElFUworeworCXUzMiBOdW1iZXJPZkl0ZW1zOworCVdMQU5fUkVHSU9OX0NIQU5ORUxTIFJlZ2lvblsxXTsKK30gV0xBTl9SRUdJT05fQ0FQQUJJTElUSUVTOworCit0eXBlZGVmIHN0cnVjdCBfcmVnaW9uX25hbWVfbWFwIHsKKwlXTEFOX1JFR0lPTl9DT0RFIHJlZ2lvbjsKKwl1OCAqbmFtZTsKKwl1MzIgKmNoYW5uZWxzOworfSByZWdpb25fbmFtZV9tYXA7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBNQUMyU1RSKGEpIChhKVswXSwgKGEpWzFdLCAoYSlbMl0sIChhKVszXSwgKGEpWzRdLCAoYSlbNV0KKyNkZWZpbmUgTUFDU1RSICIlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCIKKworLy8gVE9ETzogMDYyNyBrZXZpbgorI2RlZmluZSBNSUMyU1RSKGEpIChhKVswXSwgKGEpWzFdLCAoYSlbMl0sIChhKVszXSwgKGEpWzRdLCAoYSlbNV0sIChhKVs2XSwgKGEpWzddCisjZGVmaW5lIE1JQ1NUUiAiJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYIgorCisjZGVmaW5lIE1JQ0tFWTJTVFIoYSkgICBNSUMyU1RSKGEpCisjZGVmaW5lIE1JQ0tFWVNUUiAgICAgICBNSUNTVFIKKworCisjZW5kaWYgLyogX19HTF84MDIxMV9IX18gKi8KKy8qKiogZW5kIG9mIGZpbGUgKioqLworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2lvY3Rscy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvaW9jdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiMzVkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2lvY3Rscy5oCkBAIC0wLDAgKzEsNjc4IEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBJT0NUTFMuSCAtCisvLworLy8gIERlc2NyaXB0aW9uOgorLy8gICAgRGVmaW5lIHRoZSBJT0NUTCBjb2Rlcy4KKy8vCisvLyAgUmV2aXNpb24gaGlzdG9yeToKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyNpZm5kZWYgX0lPQ1RMU19ICisjZGVmaW5lIF9JT0NUTFNfSAorCisvLyBQRDQzIEtlZXAgaXQgLSBVc2VkIHdpdGggdGhlIFdpbjMzIGFwcGxpY2F0aW9uCisvLyAjaW5jbHVkZSA8d2luaW9jdGwuaD4KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gMjAwNDAxMDggQUREIHRoZSBmb2xsb3cgZm9yIHRlc3QKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgSU5GT1JNQVRJT05fTEVOR1RIIHNpemVvZih1bnNpZ25lZCBpbnQpCisKKyNkZWZpbmUgV0IzMl9JT0NUTF9JTkRFWCAgMHgwOTAwIC8vwq3Dl8KnxI/EvUjFpEvFucWwxb1lLy8KKworI2RlZmluZSBXYjMyX1JlZ2lzdGVyUmVhZAkJCUNUTF9DT0RFKAlcCisJCQlGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMCwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzJfUmVnaXN0ZXJXcml0ZQkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMSwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzJfU2VuZFBhY2tldAkJCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDIsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjMyX1F1ZXJ5U2VuZFJlc3VsdAkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAzLAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzMl9TZXRGcmFnbWVudFRocmVzaG9sZAlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDQsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjMyX1NldExpbmtTdGF0dXMJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgNSwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzJfU2V0QnVsa0luCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA2LAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzMl9Mb29wYmFja1Rlc3QJCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDcsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjM1X0VFUHJvbVJlYWQJCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA4LAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzNV9FRVByb21Xcml0ZQkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgOSwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzVfRmxhc2hSZWFkRGF0YQkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTAsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjM1X0ZsYXNoV3JpdGUJCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxMSwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzVfRmxhc2hXcml0ZUJ1cnN0CQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDEyLAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzNV9UeEJ1cnN0U3RhcnQJCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDEzLAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzNV9UeEJ1cnN0U3RvcAkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTQsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjM1X1R4QnVyc3RTdGF0dXMJCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDE1LAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIEZvciBJT0NUTCBpbnRlcmZhY2UKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIExJTktOQU1FX1NUUklORyAgICAgIlxcRG9zRGV2aWNlc1xcVzM1VU5EIgorI2RlZmluZSBOVERFVklDRV9TVFJJTkcgICAgICJcXERldmljZVxcVzM1VU5EIgorI2RlZmluZSBBUFBMSUNBVElPTl9MSU5LCSJcXFxcLlxcVzM1VU5EIgorCisjZGVmaW5lIFdCX0lPQ1RMX0lOREVYICAgICAgMHgwODAwCisjZGVmaW5lIFdCX0lPQ1RMX1RTX0lOREVYICAgV0JfSU9DVExfSU5ERVggKyA2MAorI2RlZmluZSBXQl9JT0NUTF9EVVRfSU5ERVggIFdCX0lPQ1RMX1RTX0lOREVYICsgNDAKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSU9DVExTIGRlZmluZWQgZm9yIERVVCAoRGV2aWNlIFVuZGVyIFRlc3QpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfTUFDX0FERFJFU1MKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGRvdDExU3RhdGlvbklECisvLyBTZXQgIDogU2V0IHRoZSBkb3QxMVN0YXRpb25JRC4gRGVtbyBvbmx5LgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9NQUNfQUREUkVTUyAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEsICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTX0RFU0NSSVBUSU9OCisvLyBRdWVyeTogUmV0dXJuIHRoZSBpbmZvLiBvZiB0aGUgY3VycmVudCBjb25uZWN0ZWQgQlNTLgorLy8gU2V0ICA6IE5vbmUuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0JTU19ERVNDUklQVElPTiAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDIsICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEUKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGN1cnJlbnQgdHJhbnNtaXNzaW9uIHJhdGUuCisvLyBTZXQgIDogU2V0IHRoZSB0cmFuc21pc3Npb24gcmF0ZSBvZiB0aGUgVHggcGFja2V0cy4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURSAgICAgICAgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDMsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9DVVJSRU5UX1NUQV9TVEFURQorLy8gUXVlcnk6IFJldHVybiB0aGUgY3VycmVudCBTVEEgc3RhdGUuIChXQl9TVEFTVEFURSB0eXBlKQorLy8gU2V0ICA6IE5vbmUuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0NVUlJFTlRfU1RBX1NUQVRFICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA0LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vLy8vLy8vLy8vIDEwLzMxLzAyJyBBZGRlZCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9TVEFSVF9JQlNTX1JFUVVFU1QKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IFN0YXJ0IGEgbmV3IElCU1MKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfU1RBUlRfSUJTU19SRVFVRVNUICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDUsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9KT0lOX1JFUVVFU1QKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IFN5bmNocm9uaXplIHdpdGggdGhlIHNlbGVjdGVkIEJTUworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9KT0lOX1JFUVVFU1QgICAgICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgNiwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0FVVEhFTl9SRVFVRVNUCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOiBBdXRoZW50aWNhdGUgd2l0aCB0aGUgQlNTCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0FVVEhFTl9SRVFVRVNUICAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA3LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfREVBVVRIRU5fUkVRVUVTVAorLy8gUXVlcnk6IE5vbmUuCisvLyBTZXQgIDogRGVBdXRoZW50aWNhdGUgd2l0aGUgdGhlIEJTUworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9ERUFVVEhFTl9SRVFVRVNUICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgOCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0FTU09DX1JFUVVFU1QKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IEFzc29jaWF0ZSB3aXRoZSB0aGUgQlNTCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0FTU09DX1JFUVVFU1QgICAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA5LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfUkVBU1NPQ19SRVFVRVNUCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOiBSZUFzc29jaWF0ZSB3aXRoZSB0aGUgQlNTCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1JFQVNTT0NfUkVRVUVTVCAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxMCwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9ESVNBU1NPQ19SRVFVRVNUCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOiBEaXNBc3NvY2lhdGUgd2l0aGUgdGhlIEJTUworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9ESVNBU1NPQ19SRVFVRVNUICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTEsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0ZSQUdfVEhSRVNIT0xECisvLyBRdWVyeTogUmV0dXJuIHRoZSBkb3QxMUZyYWdtZW50VGhyZXNob2xkCisvLyBTZXQgIDogU2V0IHRoZSBkb3QxMUZyYWdtZW50VGhyZXNob2xkCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0ZSQUdfVEhSRVNIT0xEICAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxMiwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfUlRTX1RIUkVTSE9MRAorLy8gUXVlcnk6IFJldHVybiB0aGUgZG90MTFSVFNUaHJlc2hvbGQKKy8vIFNldCAgOiBTZXQgdGhlIGRvdDExUlRTVGhyZXNvbGQKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUlRTX1RIUkVTSE9MRCAgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEzLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZTU9ERQorLy8gUXVlcnk6IEdldCB0aGUgV0VQIGtleSBtb2RlLgorLy8gU2V0ICA6IFNldCB0aGUgV0VQIGtleSBtb2RlOiBkaXNhYmxlLzY0IGJpdHMvMTI4IGJpdHMKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfV0VQX0tFWU1PREUgICAgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE0LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZVkFMVUUKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IGZpbGwgaW4gdGhlIFdFUCBrZXkgdmFsdWUKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfV0VQX0tFWVZBTFVFICAgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE1LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9SRVNFVAorLy8gUXVlcnk6IE5vbmUuCisvLyBTZXQgIDogUmVzZXQgUy9XIGFuZCBIL1cKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUkVTRVQgICAgICAgICAgQ1RMX0NPREUoICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE2LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9QT1dFUl9TQVZFCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOiBTZXQgUG93ZXIgU2F2ZSBNb2RlCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1BPV0VSX1NBVkUgICAgQ1RMX0NPREUoICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxNywgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTSURfTElTVF9TQ0FOCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9CU1NJRF9MSVNUX1NDQU4gQ1RMX0NPREUoICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTgsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0JTU0lEX0xJU1QKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIEJTUyBpbmZvIG9mIEJTU3MgaW4gdGhlIGxhc3Qgc2Nhbm5pbmcgcHJvY2VzcworLy8gU2V0ICA6IE5vbmUuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0JTU0lEX0xJU1QgICAgQ1RMX0NPREUoICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxOSwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfU1RBVElTVElDUworLy8gUXVlcnk6IFJldHVybiB0aGUgc3RhdGlzdGljcyBvZiBUeC9SeC4KKy8vIFNldCAgOiBOb25lLgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9TVEFUSVNUSUNTICAgIENUTF9DT0RFKCAgICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjAsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0FDQ0VQVF9CRUFDT04KKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGN1cnJlbnQgbW9kZSB0byBhY2NlcHQgYmVhY29uIG9yIG5vdC4KKy8vIFNldCAgOiBFbmFibGUgb3IgZGlzYWJsZSBhbGxvd2luZyB0aGUgSFctTUFDIHRvIHBhc3MgdGhlIGJlYWNvbiB0byB0aGUgU1ctTUFDCisvLyBBcmd1bWVudHM6IHVuc2lnbmVkIGNoYXIKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQUNDRVBUX0JFQUNPTiAgQ1RMX0NPREUoICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDIxLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9ST0FNSU5HCisvLyBRdWVyeTogUmV0dXJuIHRoZSByb2FtaW5nIGZ1bmN0aW9uIHN0YXR1cworLy8gU2V0ICA6IEVuYWJsZS9EaXNhYmxlIHRoZSByb2FtaW5nIGZ1bmN0aW9uLgorI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1JPQU1JTkcgICAgICAgIENUTF9DT0RFKCAgICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyMiwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfRFRPCisvLyBRdWVyeTogUmV0dXJuIHRoZSBEVE8oRGF0YSBUaHJvdWdocHV0IE9wdGltaXphdGlvbikKKy8vICAgICAgICBmdW5jdGlvbiBzdGF0dXMgKFRSVUUgb3IgRkFMU0UpCisvLyBTZXQgIDogRW5hYmxlL0Rpc2FibGUgdGhlIERUTyBmdW5jdGlvbi4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRFRPICAgICAgICAgICAgQ1RMX0NPREUoICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDIzLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9BTlRFTk5BX0RJVkVSU0lUWQorLy8gUXVlcnk6IFJldHVybiB0aGUgYW50ZW5uYSBkaXZlcnNpdHkgc3RhdHVzLiAoVFJVRS9PTiBvciBGQUxTRS9PRkYpCisvLyBTZXQgIDogRW5hYmxlL0Rpc2FibGUgdGhlIGFudGVubmEgZGl2ZXJzaXR5LgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9BTlRFTk5BX0RJVkVSU0lUWSBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjQsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLy0tLS0tLS0tLS0tLS0tIG5ldyBhZGRlZCBmb3IgYStiK2cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX01BQ19PUEVSQVRJT05fTU9ERQorLy8gUXVlcnk6IFJldHVybiB0aGUgTUFDIG9wZXJhdGlvbiBtb2RlLiAoTU9ERV84MDJfMTFfQkcsIE1PREVfODAyXzExX0EsCisvLwkJCSBNT0RFXzgwMl8xMV9BQkcsIE1PREVfODAyXzExX0JHX0lCU1MpCisvLyBTZXQgIDogU2V0IHRoZSBNQUMgb3BlcmF0aW9uIG1vZGUuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX01BQ19PUEVSQVRJT05fTU9ERSBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjUsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEVfUkVERUZJTkVECisvLyBRdWVyeTogUmV0dXJuIHRoZSBjdXJyZW50IHR4IHJhdGUgd2hpY2ggZm9sbG93cyB0aGUgZGVmaW5pdGlvbiBpbiBzcGVjLiAoZm9yCisvLwkJCWV4YW1wbGUsIDUuNU0gPT4gMHgwYikKKy8vIFNldCAgOiBOb25lCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEVfUkVERUZJTkVEIENUTF9DT0RFKCAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyNiwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfUFJFQU1CTEVfTU9ERQorLy8gUXVlcnk6IFJldHVybiB0aGUgcHJlYW1ibGUgbW9kZS4gKGF1dG8gb3IgbG9uZykKKy8vIFNldCAgOiBTZXQgdGhlIHByZWFtYmxlIG1vZGUuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1BSRUFNQkxFX01PREUgQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDI3LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9TTE9UX1RJTUVfTU9ERQorLy8gUXVlcnk6IFJldHVybiB0aGUgc2xvdCB0aW1lIG1vZGUuIChhdXRvIG9yIGxvbmcpCisvLyBTZXQgIDogU2V0IHRoZSBzbG90IHRpbWUgbW9kZS4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfU0xPVF9USU1FX01PREUgQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDI4LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQURWQU5DRV9TVEFUVVMKKy8vIFF1ZXJ5OgorLy8gU2V0ICA6IE5PTkUKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQURWQU5DRV9TVEFUVVMgQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDI5LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9UWF9SQVRFX01PREUKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIHR4IHJhdGUgbW9kZS4gKFJBVEVfQVVUTywgUkFURV8xTSwgLi4sIFJBVEVfNTRNLCBSQVRFX01BWCkKKy8vIFNldCAgOiBTZXQgdGhlIHR4IHJhdGUgbW9kZS4gIChSQVRFX0FVVE8sIFJBVEVfMU0sIC4uLCBSQVRFXzU0TSwgUkFURV9NQVgpCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEVfTU9ERSBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzAsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0RUT19QQVJBCisvLyBRdWVyeTogUmV0dXJuIHRoZSBEVE8gcGFyYW1ldGVycworLy8gU2V0ICA6IFNldCB0aGUgRFRPIHBhcmFtZXRlcnMKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRFRPX1BBUkEgQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDMxLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9FVkVOVF9MT0cKKy8vIFF1ZXJ5OiBSZXR1cm4gZXZlbnQgbG9nCisvLyBTZXQgIDogUmVzZXQgZXZlbnQgbG9nCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0VWRU5UX0xPRyBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzIsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0NXTUlOCisvLyBRdWVyeTogTk9ORShJdCB3aWxsIGJlIG9idGFpbmVkIGJ5IElPQ1RMX1dCXzgwMl8xMV9EVVRfQURWQU5DRV9TVEFUVVMpCisvLyBTZXQgIDogU2V0IENXTWluIHZhbHVlCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0NXTUlOIENUTF9DT0RFKCAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAzMywgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNQVgKKy8vIFF1ZXJ5OiBOT05FKEl0IHdpbGwgYmUgb2J0YWluZWQgYnkgSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUykKKy8vIFNldCAgOiBTZXQgQ1dNYXggdmFsdWUKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNQVggQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDM0LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIElPQ1RMcyBmb3IgVGVzdGluZworCisvLyBJT0NUTF9XQl84MDJfMTFfVFNfU0VUX0NYWF9SRUcKKy8vIFF1ZXJ5OiBOb25lCisvLyBTZXQgIDogV3JpdGUgdGhlIHZhbHVlIHRvIG9uZSBvZiBDeHggcmVnaXN0ZXIuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfU0VUX0NYWF9SRUcgIENUTF9DT0RFKCAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9UU19HRVRfQ1hYX1JFRworLy8gUXVlcnk6IFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIEN4eCByZWdpc3Rlci4KKy8vIFNldCAgOiBXcml0ZSB0aGUgcmVnIG5vLiAoMHgwMCwgMHgwNCwgMHgwOCBldGMpCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfR0VUX0NYWF9SRUcgIENUTF9DT0RFKCAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfRFhYX1JFRworLy8gUXVlcnk6IE5vbmUKKy8vIFNldCAgOiBXcml0ZSB0aGUgdmFsdWUgdG8gb25lIG9mIER4eCByZWdpc3Rlci4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfRFhYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX1RTX0dFVF9EWFhfUkVHCisvLyBRdWVyeTogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgRHh4IHJlZ2lzdGVyLgorLy8gU2V0ICA6IFdyaXRlIHRoZSByZWcgbm8uICgweDAwLCAweDA0LCAweDA4IGV0YykKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19HRVRfRFhYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMywgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFtUU10KKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfVFhfUkFURSAgICAgICAgICAgICAgQ1RMX0NPREUoICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19DVVJSRU5UX0NIQU5ORUwgICAgICBDVExfQ09ERSggICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDUsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0VOQUJMRV9TRVFOTyAgICAgICAgIENUTF9DT0RFKCAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgNiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfRU5BTEJFX0FDS0VEUEFDS0VUICAgQ1RMX0NPREUoICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA3LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19JTkhJQklUX0NSQyAgICAgICAgICBDVExfQ09ERSggICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDgsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1JFU0VUX1JDVl9DT1VOVEVSICAgIENUTF9DT0RFKCAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgOSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfU0VUX1RYX1RSSUdHRVIgICAgICAgQ1RMX0NPREUoICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxMCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19GQUlMRURfVFhfQ09VTlQgICAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDExLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIFtUUzFdCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19UWF9QT1dFUiAgICAgICAgICAgICBDVExfQ09ERSggICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEyLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX01PREVfRU5BQkxFCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxMywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19NT0RFX0RJU0FCTEUJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE0LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0FOVEVOTkEJCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxNSwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19BREFQVEVSX0lORk8JCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE2LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX01BQ19BRERSRVNTCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxNywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19CU1NJRAkJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE4LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1JGX1BBUkFNRVRFUgkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTksICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfRklMVEVSCQkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjAsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfQ0FMSUJSQVRJT04JCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDIxLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0JTU19NT0RFCQkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfU0VUX1NTSUQJCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyMywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19JQlNTX0NIQU5ORUwJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDI0LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIHNldC9xdWVyeSB0aGUgc2xvdCB0aW1lIHZhbHVlKHNob3J0IG9yIGxvbmcgc2xvdCB0aW1lKQorI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfU0xPVF9USU1FCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyNSwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TTE9UX1RJTUUJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDI1LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1JYX1NUQVRJU1RJQ1MJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjYsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2VuZGlmICAvLyAjaWZuZGVmIF9JT0NUTFNfSAorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIwMGJhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L2NvbW1vbi5oCkBAIC0wLDAgKzEsMTQzIEBACisvLworLy8gY29tbW9uLmgKKy8vCisvLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIE9TIGRlcGVuZGFudCBkZWZpbml0aW9uIGFuZCBmdW5jdGlvbi4KKy8vIEV2ZXJ5IE9TIGhhcyB0aGlzIGZpbGUgaW5kaXZpZHVhbC4KKy8vCisKKyNkZWZpbmUgRGVidWdVc2JkU3RhdHVzSW5mb3JtYXRpb24oIF9BICkKKworI2lmbmRlZiBDT01NT05fREVGCisjZGVmaW5lIENPTU1PTl9ERUYKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4gLy9uZWVkIGZvciBrZXJuZWwgYWxlcnQKKyNpbmNsdWRlIDxsaW51eC9hdXRvY29uZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPiAvL21lbW9yeSBhbGxvY2F0ZQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPi8vbmVlZCBmb3IgaW5pdCBhbmQgZXhpdCBtb2R1bGVzIG1hcmNvCisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisKKy8vI2RlZmluZSBERUJVR19FTkFCTEVEICAxCisKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29tbW9uIHR5cGUgZGVmaW5pdGlvbgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwordHlwZWRlZiB1OCogICAgICAgICAgICBQVUNIQVI7Cit0eXBlZGVmIHM4KiAgICAgICAgICAgIFBDSEFSOwordHlwZWRlZiB1OCogICAgICAgICAgICBQQk9PTEVBTjsKK3R5cGVkZWYgdTE2KiAgICAgICAgICAgUFVTSE9SVDsKK3R5cGVkZWYgdTMyKiAgICAgICAgICAgUFVMT05HOwordHlwZWRlZiBzMTYqICAgUFNIT1JUOworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBJR05PUkUgICAgICAyCisjZGVmaW5lCVNVQ0NFU1MgICAgIDEKKyNkZWZpbmUJRkFJTFVSRSAgICAgMAorCisKKyNpZm5kZWYgdHJ1ZQorI2RlZmluZSB0cnVlICAgICAgICAxCisjZW5kaWYKKworI2lmbmRlZiBmYWxzZQorI2RlZmluZSBmYWxzZSAgICAgICAwCisjZW5kaWYKKworLy8gUEQ0MyAyMDAyMTEwOAorI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgICAgICAgIDEKKyNlbmRpZgorCisjaWZuZGVmIEZBTFNFCisjZGVmaW5lIEZBTFNFICAgICAgIDAKKyNlbmRpZgorCisjZGVmaW5lIFNUQVRVU19NRURJQV9DT05ORUNUIDEKKyNkZWZpbmUgU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QgMAorCisjaWZuZGVmIEJJVAorI2RlZmluZSBCSVQoeCkgICAgICAgICAgICAgICAgICAoMSA8PCAoeCkpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgdXJiICogUFVSQjsKKworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENvbW1vbiBmdW5jdGlvbiBkZWZpbml0aW9uCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaWZuZGVmIGFicworI2RlZmluZSBhYnMoX1QpCQkJCQkJCSgoX1QpIDwgMCA/IC1fVCA6IF9UKQorI2VuZGlmCisjZGVmaW5lIERFQlVHX0VOQUJMRUQKKyNkZWZpbmUgRVRIX0xFTkdUSF9PRl9BRERSRVNTCTYKKyNpZmRlZiBERUJVR19FTkFCTEVECisjZGVmaW5lIFdCREVCVUcoIF9NICkJcHJpbnRrIF9NCisjZWxzZQorI2RlZmluZSBXQkRFQlVHKCBfTSApCTAKKyNlbmRpZgorCisjZGVmaW5lIE9TX0RJU0NPTk5FQ1RFRAkwCisjZGVmaW5lIE9TX0NPTk5FQ1RFRAkxCisKKworI2RlZmluZSBPU19FVkVOVF9JTkRJQ0FURSggX0EsIF9CLCBfRiApCisjZGVmaW5lIE9TX1BNS0lEX1NUQVRVU19FVkVOVCggX0EgKQorCisKKy8qIFVmZiwgbm8sIGxvbmdzIGFyZSBub3QgYXRvbWljIG9uIGFsbCBhcmNoaXRlY3R1cmVzIExpbnV4CisgKiBzdXBwb3J0cy4gVGhpcyBzaG91bGQgcmVhbGx5IHVzZSBhdG9taWNfdCAqLworCisjZGVmaW5lIE9TX0FUT01JQwkJCXUzMgorI2RlZmluZSBPU19BVE9NSUNfUkVBRCggX0EsIF9WICkJX1YKKyNkZWZpbmUgT1NfQVRPTUlDX0lOQyggX0EsIF9WICkJCUVuY2FwQXRvbWljSW5jKCBfQSwgKHZvaWQqKV9WICkKKyNkZWZpbmUgT1NfQVRPTUlDX0RFQyggX0EsIF9WICkJCUVuY2FwQXRvbWljRGVjKCBfQSwgKHZvaWQqKV9WICkKKyNkZWZpbmUgT1NfTUVNT1JZX0NMRUFSKCBfQSwgX1MgKQltZW1zZXQoIChQVUNIQVIpX0EsMCxfUykKKyNkZWZpbmUgT1NfTUVNT1JZX0NPTVBBUkUoIF9BLCBfQiwgX1MgKQkobWVtY21wKF9BLF9CLF9TKT8gMCA6IDEpIC8vIERlZmluaXRpb24gaXMgcmV2ZXJzZSB3aXRoIE5kaXMgMTogdGhlIHNhbWUgMDogZGlmZmVyZW50CisKKworI2RlZmluZSBPU19TUElOX0xPQ0sJCQkJc3BpbmxvY2tfdAorI2RlZmluZSBPU19TUElOX0xPQ0tfQUxMT0NBVEUoIF9TICkJCXNwaW5fbG9ja19pbml0KCBfUyApOworI2RlZmluZSBPU19TUElOX0xPQ0tfRlJFRSggX1MgKQorI2RlZmluZSBPU19TUElOX0xPQ0tfQUNRVUlSRUQoIF9TICkJCXNwaW5fbG9ja19pcnEoIF9TICkKKyNkZWZpbmUgT1NfU1BJTl9MT0NLX1JFTEVBU0VEKCBfUyApCQlzcGluX3VubG9ja19pcnEoIF9TICk7CisKKyNkZWZpbmUgT1NfVElNRVIJc3RydWN0IHRpbWVyX2xpc3QKKyNkZWZpbmUgT1NfVElNRVJfSU5JVElBTCggX1QsIF9GLCBfUCApCQkJXAorewkJCQkJCQlcCisJaW5pdF90aW1lciggX1QgKTsJCQkJXAorCShfVCktPmZ1bmN0aW9uID0gKHZvaWQgKilfRiMjXzFhOwkJXAorCShfVCktPmRhdGEgPSAodW5zaWduZWQgbG9uZylfUDsJCQlcCit9CisKKy8vIF9TIDogTWlsbGlzZWNvbmQKKy8vIDIwMDYwNDIwIEF0IGxlYXN0IDEgbGFyZ2UgdGhhbiBqaWZmaWVzCisjZGVmaW5lIE9TX1RJTUVSX1NFVCggX1QsIF9TICkJCQkJCVwKK3sJCQkJCQkJCVwKKwkoX1QpLT5leHBpcmVzID0gamlmZmllcyArICgoX1MqSForOTk5KS8xMDAwKTtcCisJYWRkX3RpbWVyKCBfVCApOwkJCQkJXAorfQorI2RlZmluZSBPU19USU1FUl9DQU5DRUwoIF9ULCBfQiApCQlkZWxfdGltZXJfc3luYyggX1QgKQorI2RlZmluZSBPU19USU1FUl9HRVRfU1lTX1RJTUUoIF9UICkJCSgqX1Q9amlmZmllcykKKworCisjZW5kaWYgLy8gQ09NTU9OX0RFRgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC9zeXNkZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3N5c2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NmQ2M2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC9zeXNkZWYuaApAQCAtMCwwICsxLDczIEBACisKKworLy8KKy8vIFdpbmJvbmQgV0xBTiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBkZWZpbmVzCisvLworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ3VycmVudCBkaXJlY3RvcnkgaXMgTGludXgKKy8vIFRoZSBkZWZpbml0aW9uIFdCX0xJTlVYIGlzIGEga2V5d29yZCBmb3IgdGhpcyBPUworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNpZm5kZWYgU1lTX0RFRl9ICisjZGVmaW5lIFNZU19ERUZfSAorI2RlZmluZSBXQl9MSU5VWAorI2RlZmluZSBXQl9MSU5VWF9XUEFfUFNLCisKKworLy8jZGVmaW5lIF9JQlNTX0JFQUNPTl9TRVFfU1RJQ0tfCisjZGVmaW5lIF9VU0VfRkFMTEJBQ0tfUkFURV8KKy8vI2RlZmluZSBBTlRESVZfREVGQVVMVF9PTgorCisjZGVmaW5lIF9XUEEyXwkvLyAyMDA2MTEyMiBJdCdzIG5lZWRlZCBmb3IgY3VycmVudCBMaW51eCBkcml2ZXIKKworCisjaWZuZGVmIF9XUEFfUFNLX0RFQlVHCisjdW5kZWYgIF9XUEFfUFNLX0RFQlVHCisjZW5kaWYKKworLy8gZGVidWcgcHJpbnQgb3B0aW9ucywgbWFyayB3aGF0IGRlYnVnIHlvdSBkb24ndCBuZWVkCisKKyNpZmRlZiBGVUxMX0RFQlVHCisjZGVmaW5lIF9QRV9TVEFURV9EVU1QXworI2RlZmluZSBfUEVfVFhfRFVNUF8KKyNkZWZpbmUgX1BFX1JYX0RVTVBfCisjZGVmaW5lIF9QRV9PSURfRFVNUF8KKyNkZWZpbmUgX1BFX0RUT19EVU1QXworI2RlZmluZSBfUEVfUkVHX0RVTVBfCisjZGVmaW5lIF9QRV9VU0JfSU5JX0RVTVBfCisjZW5kaWYKKworCisKKyNpbmNsdWRlICJjb21tb24uaCIJLy8gSW5kaXZpZHVhbCBmaWxlIGRlcGVuZHMgb24gT1MKKworI2luY2x1ZGUgIi4uL3diMzVfdmVyLmgiCisjaW5jbHVkZSAiLi4vbWFjX3N0cnVjdHVyZXMuaCIKKyNpbmNsdWRlICIuLi9kc190a2lwLmgiCisjaW5jbHVkZSAiLi4vbG9jYWxwYXJhLmgiCisjaW5jbHVkZSAiLi4vc21lX3MuaCIKKyNpbmNsdWRlICIuLi9zY2FuX3MuaCIKKyNpbmNsdWRlICIuLi9tZHNfcy5oIgorI2luY2x1ZGUgIi4uL21sbWVfcy5oIgorI2luY2x1ZGUgIi4uL2Jzc2RzY3B0LmgiCisjaW5jbHVkZSAiLi4vc21lX2FwaS5oIgorI2luY2x1ZGUgIi4uL2dsXzgwMjExLmgiCisjaW5jbHVkZSAiLi4vbXRvLmgiCisjaW5jbHVkZSAiLi4vd2JsaW51eF9zLmgiCisjaW5jbHVkZSAiLi4vd2JoYWxfcy5oIgorCisKKyNpbmNsdWRlICIuLi9hZGFwdGVyLmgiCisKKyNpbmNsdWRlICIuLi9tbG1lX21pYi5oIgorI2luY2x1ZGUgIi4uL21kc19mLmgiCisjaW5jbHVkZSAiLi4vYnNzX2YuaCIKKyNpbmNsdWRlICIuLi9tbG1ldHhyeF9mLmgiCisjaW5jbHVkZSAiLi4vbXRvX2YuaCIKKyNpbmNsdWRlICIuLi93YmhhbF9mLmgiCisjaW5jbHVkZSAiLi4vd2JsaW51eF9mLmgiCisvLyBLZXJuZWwgVGltZXIgcmVzb2x1dGlvbiwgTkRJUyBpcyAxMG1zLCAxMDAwMHVzCisjZGVmaW5lIE1JTl9USU1FT1VUX1ZBTAkoMTApIC8vbXMKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyZWcuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzBiNDU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZy5jCkBAIC0wLDAgKzEsNzQ3IEBACisjaW5jbHVkZSAic3lzZGVmLmgiCisKK2V4dGVybiB2b2lkIHBoeV9jYWxpYnJhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpOworCisvLyBUUlVFICA6IHJlYWQgY29tbWFuZCBwcm9jZXNzIHN1Y2Nlc3NmdWxseQorLy8gRkFMU0UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAorLy8gUmVnaXN0ZXJObyA6IHN0YXJ0IGJhc2UKKy8vIHBSZWdpc3RlckRhdGEgOiBkYXRhIHBvaW50CisvLyBOdW1iZXJPZkRhdGEgOiBudW1iZXIgb2YgcmVnaXN0ZXIgZGF0YQorLy8gRmxhZyA6IEFVVE9fSU5DUkVNRU5UIC0gUmVnaXN0ZXJObyB3aWxsIGF1dG8gaW5jcmVtZW50IDQKKy8vCQkgIE5PX0lOQ1JFTUVOVCAtIEZ1bmN0aW9uIHdpbGwgd3JpdGUgZGF0YSBpbnRvIHRoZSBzYW1lIHJlZ2lzdGVyCit1bnNpZ25lZCBjaGFyCitXYjM1UmVnX0J1cnN0V3JpdGUocGh3X2RhdGFfdCBwSHdEYXRhLCB1MTYgUmVnaXN0ZXJObywgUFVMT05HIHBSZWdpc3RlckRhdGEsIHU4IE51bWJlck9mRGF0YSwgdTggRmxhZykKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCVBVUkIJCXBVcmIgPSBOVUxMOworCVBSRUdfUVVFVUUJcFJlZ1F1ZXVlID0gTlVMTDsKKwl1MTYJCVVyYlNpemU7CisJc3RydWN0ICAgICAgdXNiX2N0cmxyZXF1ZXN0ICpkcjsKKwl1MTYJCWksIERhdGFTaXplID0gTnVtYmVyT2ZEYXRhKjQ7CisKKwkvLyBNb2R1bGUgc2h1dGRvd24KKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCisJCXJldHVybiBGQUxTRTsKKworCS8vIFRyeWluZyB0byB1c2UgYnVyc3Qgd3JpdGUgZnVuY3Rpb24gaWYgdXNlIG5ldyBoYXJkd2FyZQorCVVyYlNpemUgPSBzaXplb2YoUkVHX1FVRVVFKSArIERhdGFTaXplICsgc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpOworCU9TX01FTU9SWV9BTExPQyggKHZvaWQqICopJnBSZWdRdWV1ZSwgVXJiU2l6ZSApOworCXBVcmIgPSB3Yl91c2JfYWxsb2NfdXJiKDApOworCWlmKCBwVXJiICYmIHBSZWdRdWV1ZSApIHsKKwkJcFJlZ1F1ZXVlLT5ESVJFQ1QgPSAyOy8vIGJ1cnN0IHdyaXRlIHJlZ2lzdGVyCisJCXBSZWdRdWV1ZS0+SU5ERVggPSBSZWdpc3Rlck5vOworCQlwUmVnUXVldWUtPnBCdWZmZXIgPSAoUFVMT05HKSgoUFVDSEFSKXBSZWdRdWV1ZSArIHNpemVvZihSRUdfUVVFVUUpKTsKKwkJbWVtY3B5KCBwUmVnUXVldWUtPnBCdWZmZXIsIHBSZWdpc3RlckRhdGEsIERhdGFTaXplICk7CisJCS8vdGhlIGZ1bmN0aW9uIGZvciByZXZlcnNpbmcgcmVnaXN0ZXIgZGF0YSBmcm9tIGxpdHRsZSBlbmRpYW4gdG8gYmlnIGVuZGlhbgorCQlmb3IoIGk9MDsgaTxOdW1iZXJPZkRhdGEgOyBpKysgKQorCQkJcFJlZ1F1ZXVlLT5wQnVmZmVyW2ldID0gY3B1X3RvX2xlMzIoIHBSZWdRdWV1ZS0+cEJ1ZmZlcltpXSApOworCisJCWRyID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikoKFBVQ0hBUilwUmVnUXVldWUgKyBzaXplb2YoUkVHX1FVRVVFKSArIERhdGFTaXplKTsKKwkJZHItPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRTsKKwkJZHItPmJSZXF1ZXN0ID0gMHgwNDsgLy8gVVNCIG9yIHZlbmRvci1kZWZpbmVkIHJlcXVlc3QgY29kZSwgYnVyc3QgbW9kZQorCQlkci0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoIEZsYWcgKTsgLy8gMDogUmVnaXN0ZXIgbnVtYmVyIGF1dG8taW5jcmVtZW50LCAxOiBObyBhdXRvIGluY3JlbWVudAorCQlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoIFJlZ2lzdGVyTm8gKTsKKwkJZHItPndMZW5ndGggPSBjcHVfdG9fbGUxNiggRGF0YVNpemUgKTsKKwkJcFJlZ1F1ZXVlLT5OZXh0ID0gTlVMTDsKKwkJcFJlZ1F1ZXVlLT5wVXNiUmVxID0gZHI7CisJCXBSZWdRdWV1ZS0+cFVyYiA9IHBVcmI7CisKKwkJT1NfU1BJTl9MT0NLX0FDUVVJUkVEKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCQlpZiAocFdiMzVSZWctPnBSZWdGaXJzdCA9PSBOVUxMKQorCQkJcFdiMzVSZWctPnBSZWdGaXJzdCA9IHBSZWdRdWV1ZTsKKwkJZWxzZQorCQkJcFdiMzVSZWctPnBSZWdMYXN0LT5OZXh0ID0gcFJlZ1F1ZXVlOworCQlwV2IzNVJlZy0+cFJlZ0xhc3QgPSBwUmVnUXVldWU7CisKKwkJT1NfU1BJTl9MT0NLX1JFTEVBU0VEKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCisJCS8vIFN0YXJ0IEVQMFZNCisJCVdiMzVSZWdfRVAwVk1fc3RhcnQocEh3RGF0YSk7CisKKwkJcmV0dXJuIFRSVUU7CisJfSBlbHNlIHsKKwkJaWYgKHBVcmIpCisJCQl1c2JfZnJlZV91cmIocFVyYik7CisJCWlmIChwUmVnUXVldWUpCisJCQlrZnJlZShwUmVnUXVldWUpOworCQlyZXR1cm4gRkFMU0U7CisJfQorICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkCitXYjM1UmVnX1VwZGF0ZShwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJc3dpdGNoIChSZWdpc3Rlck5vKSB7CisJY2FzZSAweDNiMDogcFdiMzVSZWctPlUxQjAgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4M2JjOiBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4NDAwOiBwV2IzNVJlZy0+RDAwX0RtYUNvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODAwOiBwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODA0OiBwV2IzNVJlZy0+TTA0X011bHRpY2FzdEFkZHJlc3MxID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDgwODogcFdiMzVSZWctPk0wOF9NdWx0aWNhc3RBZGRyZXNzMiA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4MjQ6IHBXYjM1UmVnLT5NMjRfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4Mjg6IHBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4MmM6IHBXYjM1UmVnLT5NMkNfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4Mzg6IHBXYjM1UmVnLT5NMzhfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4NDA6IHBXYjM1UmVnLT5NNDBfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4NDQ6IHBXYjM1UmVnLT5NNDRfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4NDg6IHBXYjM1UmVnLT5NNDhfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4NGM6IHBXYjM1UmVnLT5NNENfTWFjU3RhdHVzID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg2MDogcFdiMzVSZWctPk02MF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg2ODogcFdiMzVSZWctPk02OF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg3MDogcFdiMzVSZWctPk03MF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg3NDogcFdiMzVSZWctPk03NF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg3ODogcFdiMzVSZWctPk03OF9FUlBJbmZvcm1hdGlvbiA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4N0M6IHBXYjM1UmVnLT5NN0NfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4ODA6IHBXYjM1UmVnLT5NODBfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4ODQ6IHBXYjM1UmVnLT5NODRfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4ODg6IHBXYjM1UmVnLT5NODhfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4OTg6IHBXYjM1UmVnLT5NOThfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHgxMDBjOiBwV2IzNVJlZy0+QkIwQyA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHgxMDJjOiBwV2IzNVJlZy0+QkIyQyA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHgxMDMwOiBwV2IzNVJlZy0+QkIzMCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHgxMDNjOiBwV2IzNVJlZy0+QkIzQyA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHgxMDQ4OiBwV2IzNVJlZy0+QkI0OCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHgxMDRjOiBwV2IzNVJlZy0+QkI0QyA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHgxMDUwOiBwV2IzNVJlZy0+QkI1MCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHgxMDU0OiBwV2IzNVJlZy0+QkI1NCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHgxMDU4OiBwV2IzNVJlZy0+QkI1OCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHgxMDVjOiBwV2IzNVJlZy0+QkI1QyA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHgxMDYwOiBwV2IzNVJlZy0+QkI2MCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCX0KK30KKworLy8gVFJVRSAgOiByZWFkIGNvbW1hbmQgcHJvY2VzcyBzdWNjZXNzZnVsbHkKKy8vIEZBTFNFIDogcmVnaXN0ZXIgbm90IHN1cHBvcnQKK3Vuc2lnbmVkIGNoYXIKK1diMzVSZWdfV3JpdGVTeW5jKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApCit7CisJUFdCMzVSRUcgcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlpbnQgcmV0ID0gLTE7CisKKwkvLyBNb2R1bGUgc2h1dGRvd24KKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCisJCXJldHVybiBGQUxTRTsKKworCVJlZ2lzdGVyVmFsdWUgPSBjcHVfdG9fbGUzMihSZWdpc3RlclZhbHVlKTsKKworCS8vIHVwZGF0ZSB0aGUgcmVnaXN0ZXIgYnkgc2VuZCB1c2IgbWVzc2FnZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXBXYjM1UmVnLT5TeW5jSW9QYXVzZSA9IDE7CisKKwkvLyAyMDA2MDcxNy41IFdhaXQgdW50aWwgRVAwVk0gc3RvcAorCXdoaWxlIChwV2IzNVJlZy0+RVAwdm1fc3RhdGUgIT0gVk1fU1RPUCkKKwkJT1NfU0xFRVAoMTAwMDApOworCisJLy8gU3luYyBJb0NhbGxEcml2ZXIKKwlwV2IzNVJlZy0+RVAwdm1fc3RhdGUgPSBWTV9SVU5OSU5HOworCXJldCA9IHVzYl9jb250cm9sX21zZyggcEh3RGF0YS0+V2JVc2IudWRldiwKKwkJCSAgICAgICB1c2Jfc25kY3RybHBpcGUoIHBId0RhdGEtPldiVXNiLnVkZXYsIDAgKSwKKwkJCSAgICAgICAweDAzLCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9PVVQsCisJCQkgICAgICAgMHgwLFJlZ2lzdGVyTm8sICZSZWdpc3RlclZhbHVlLCA0LCBIWioxMDAgKTsKKwlwV2IzNVJlZy0+RVAwdm1fc3RhdGUgPSBWTV9TVE9QOworCXBXYjM1UmVnLT5TeW5jSW9QYXVzZSA9IDA7CisKKwlXYjM1UmVnX0VQMFZNX3N0YXJ0KHBId0RhdGEpOworCisJaWYgKHJldCA8IDApIHsKKwkJI2lmZGVmIF9QRV9SRUdfRFVNUF8KKwkJV0JERUJVRygoIkVQMCBXcml0ZSByZWdpc3RlciB1c2IgbWVzc2FnZSBzZW5kaW5nIGVycm9yXG4iKSk7CisJCSNlbmRpZgorCisJCXBId0RhdGEtPlN1cnByaXNlUmVtb3ZlID0gMTsgLy8gMjAwNjA3MDQuMgorCQlyZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKy8vIFRSVUUgIDogcmVhZCBjb21tYW5kIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5CisvLyBGQUxTRSA6IHJlZ2lzdGVyIG5vdCBzdXBwb3J0Cit1bnNpZ25lZCBjaGFyCitXYjM1UmVnX1dyaXRlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpkcjsKKwlQVVJCCQlwVXJiID0gTlVMTDsKKwlQUkVHX1FVRVVFCXBSZWdRdWV1ZSA9IE5VTEw7CisJdTE2CQlVcmJTaXplOworCisKKwkvLyBNb2R1bGUgc2h1dGRvd24KKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCisJCXJldHVybiBGQUxTRTsKKworCS8vIHVwZGF0ZSB0aGUgcmVnaXN0ZXIgYnkgc2VuZCB1cmIgcmVxdWVzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVVyYlNpemUgPSBzaXplb2YoUkVHX1FVRVVFKSArIHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KTsKKwlPU19NRU1PUllfQUxMT0MoICh2b2lkKiAqKSZwUmVnUXVldWUsIFVyYlNpemUgKTsKKwlwVXJiID0gd2JfdXNiX2FsbG9jX3VyYigwKTsKKwlpZiAocFVyYiAmJiBwUmVnUXVldWUpIHsKKwkJcFJlZ1F1ZXVlLT5ESVJFQ1QgPSAxOy8vIGJ1cnN0IHdyaXRlIHJlZ2lzdGVyCisJCXBSZWdRdWV1ZS0+SU5ERVggPSBSZWdpc3Rlck5vOworCQlwUmVnUXVldWUtPlZBTFVFID0gY3B1X3RvX2xlMzIoUmVnaXN0ZXJWYWx1ZSk7CisJCXBSZWdRdWV1ZS0+UkVTRVJWRURfVkFMSUQgPSBGQUxTRTsKKwkJZHIgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSgoUFVDSEFSKXBSZWdRdWV1ZSArIHNpemVvZihSRUdfUVVFVUUpKTsKKwkJZHItPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX1ZFTkRPUnxVU0JfRElSX09VVCB8VVNCX1JFQ0lQX0RFVklDRTsKKwkJZHItPmJSZXF1ZXN0ID0gMHgwMzsgLy8gVVNCIG9yIHZlbmRvci1kZWZpbmVkIHJlcXVlc3QgY29kZSwgYnVyc3QgbW9kZQorCQlkci0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoMHgwKTsKKwkJZHItPndJbmRleCA9IGNwdV90b19sZTE2KFJlZ2lzdGVyTm8pOworCQlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KDQpOworCisJCS8vIEVudGVyIHRoZSBzZW5kaW5nIHF1ZXVlCisJCXBSZWdRdWV1ZS0+TmV4dCA9IE5VTEw7CisJCXBSZWdRdWV1ZS0+cFVzYlJlcSA9IGRyOworCQlwUmVnUXVldWUtPnBVcmIgPSBwVXJiOworCisJCU9TX1NQSU5fTE9DS19BQ1FVSVJFRCgmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCQlpZiAocFdiMzVSZWctPnBSZWdGaXJzdCA9PSBOVUxMKQorCQkJcFdiMzVSZWctPnBSZWdGaXJzdCA9IHBSZWdRdWV1ZTsKKwkJZWxzZQorCQkJcFdiMzVSZWctPnBSZWdMYXN0LT5OZXh0ID0gcFJlZ1F1ZXVlOworCQlwV2IzNVJlZy0+cFJlZ0xhc3QgPSBwUmVnUXVldWU7CisKKwkJT1NfU1BJTl9MT0NLX1JFTEVBU0VEKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCisJCS8vIFN0YXJ0IEVQMFZNCisJCVdiMzVSZWdfRVAwVk1fc3RhcnQocEh3RGF0YSk7CisKKwkJcmV0dXJuIFRSVUU7CisJfSBlbHNlIHsKKwkJaWYgKHBVcmIpCisJCQl1c2JfZnJlZV91cmIocFVyYik7CisJCWtmcmVlKHBSZWdRdWV1ZSk7CisJCXJldHVybiBGQUxTRTsKKwl9Cit9CisKKy8vVGhpcyBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgd2l0aCBhIHVzZXIgZGVmaW5lZCB2YWx1ZS4gV2hlbiBpdCBjb21wbGV0ZXMsCisvL3RoaXMgdmFsdWUgaXMgdXNlZnVsLiBGb3IgZXhhbXBsZSwgaGFsX3NldF9jdXJyZW50X2NoYW5uZWwgd2lsbCB1c2UgaXQuCisvLyBUUlVFICA6IHJlYWQgY29tbWFuZCBwcm9jZXNzIHN1Y2Nlc3NmdWxseQorLy8gRkFMU0UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAordW5zaWduZWQgY2hhcgorV2IzNVJlZ19Xcml0ZVdpdGhDYWxsYmFja1ZhbHVlKCBwaHdfZGF0YV90IHBId0RhdGEsIHUxNiBSZWdpc3Rlck5vLCB1MzIgUmVnaXN0ZXJWYWx1ZSwKKwkJCQlQQ0hBUiBwVmFsdWUsIHM4IExlbikKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyOworCVBVUkIJCXBVcmIgPSBOVUxMOworCVBSRUdfUVVFVUUJcFJlZ1F1ZXVlID0gTlVMTDsKKwl1MTYJCVVyYlNpemU7CisKKwkvLyBNb2R1bGUgc2h1dGRvd24KKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCisJCXJldHVybiBGQUxTRTsKKworCS8vIHVwZGF0ZSB0aGUgcmVnaXN0ZXIgYnkgc2VuZCB1cmIgcmVxdWVzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVVyYlNpemUgPSBzaXplb2YoUkVHX1FVRVVFKSArIHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KTsKKwlPU19NRU1PUllfQUxMT0MoKHZvaWQqICopICZwUmVnUXVldWUsIFVyYlNpemUgKTsKKwlwVXJiID0gd2JfdXNiX2FsbG9jX3VyYigwKTsKKwlpZiAocFVyYiAmJiBwUmVnUXVldWUpIHsKKwkJcFJlZ1F1ZXVlLT5ESVJFQ1QgPSAxOy8vIGJ1cnN0IHdyaXRlIHJlZ2lzdGVyCisJCXBSZWdRdWV1ZS0+SU5ERVggPSBSZWdpc3Rlck5vOworCQlwUmVnUXVldWUtPlZBTFVFID0gY3B1X3RvX2xlMzIoUmVnaXN0ZXJWYWx1ZSk7CisJCS8vTk9URSA6IFVzZXJzIG11c3QgZ3VhcmFudGVlIHRoZSBzaXplIG9mIHZhbHVlIHdpbGwgbm90IGV4Y2VlZCB0aGUgYnVmZmVyIHNpemUuCisJCW1lbWNweShwUmVnUXVldWUtPlJFU0VSVkVELCBwVmFsdWUsIExlbik7CisJCXBSZWdRdWV1ZS0+UkVTRVJWRURfVkFMSUQgPSBUUlVFOworCQlkciA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopKChQVUNIQVIpcFJlZ1F1ZXVlICsgc2l6ZW9mKFJFR19RVUVVRSkpOworCQlkci0+YlJlcXVlc3RUeXBlID0gVVNCX1RZUEVfVkVORE9SfFVTQl9ESVJfT1VUIHxVU0JfUkVDSVBfREVWSUNFOworCQlkci0+YlJlcXVlc3QgPSAweDAzOyAvLyBVU0Igb3IgdmVuZG9yLWRlZmluZWQgcmVxdWVzdCBjb2RlLCBidXJzdCBtb2RlCisJCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNigweDApOworCQlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoUmVnaXN0ZXJObyk7CisJCWRyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoNCk7CisKKwkJLy8gRW50ZXIgdGhlIHNlbmRpbmcgcXVldWUKKwkJcFJlZ1F1ZXVlLT5OZXh0ID0gTlVMTDsKKwkJcFJlZ1F1ZXVlLT5wVXNiUmVxID0gZHI7CisJCXBSZWdRdWV1ZS0+cFVyYiA9IHBVcmI7CisJCU9TX1NQSU5fTE9DS19BQ1FVSVJFRCAoJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKwkJaWYoIHBXYjM1UmVnLT5wUmVnRmlyc3QgPT0gTlVMTCApCisJCQlwV2IzNVJlZy0+cFJlZ0ZpcnN0ID0gcFJlZ1F1ZXVlOworCQllbHNlCisJCQlwV2IzNVJlZy0+cFJlZ0xhc3QtPk5leHQgPSBwUmVnUXVldWU7CisJCXBXYjM1UmVnLT5wUmVnTGFzdCA9IHBSZWdRdWV1ZTsKKworCQlPU19TUElOX0xPQ0tfUkVMRUFTRUQgKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCisJCS8vIFN0YXJ0IEVQMFZNCisJCVdiMzVSZWdfRVAwVk1fc3RhcnQocEh3RGF0YSk7CisJCXJldHVybiBUUlVFOworCX0gZWxzZSB7CisJCWlmIChwVXJiKQorCQkJdXNiX2ZyZWVfdXJiKHBVcmIpOworCQlrZnJlZShwUmVnUXVldWUpOworCQlyZXR1cm4gRkFMU0U7CisJfQorfQorCisvLyBUUlVFICA6IHJlYWQgY29tbWFuZCBwcm9jZXNzIHN1Y2Nlc3NmdWxseQorLy8gRkFMU0UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAorLy8gcFJlZ2lzdGVyVmFsdWUgOiBJdCBtdXN0IGJlIGEgcmVzaWRlbnQgYnVmZmVyIGR1ZSB0byBhc3luY2hyb25vdXMgcmVhZCByZWdpc3Rlci4KK3Vuc2lnbmVkIGNoYXIKK1diMzVSZWdfUmVhZFN5bmMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgICBQVUxPTkcgcFJlZ2lzdGVyVmFsdWUgKQoreworCVBXQjM1UkVHIHBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJUFVMT05HCXBsdG1wID0gcFJlZ2lzdGVyVmFsdWU7CisJaW50IHJldCA9IC0xOworCisJLy8gTW9kdWxlIHNodXRkb3duCisJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlKQorCQlyZXR1cm4gRkFMU0U7CisKKwkvLyBSZWFkIHRoZSByZWdpc3RlciBieSBzZW5kIHVzYiBtZXNzYWdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlwV2IzNVJlZy0+U3luY0lvUGF1c2UgPSAxOworCisJLy8gMjAwNjA3MTcuNSBXYWl0IHVudGlsIEVQMFZNIHN0b3AKKwl3aGlsZSAocFdiMzVSZWctPkVQMHZtX3N0YXRlICE9IFZNX1NUT1ApCisJCU9TX1NMRUVQKDEwMDAwKTsKKworCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKCBwSHdEYXRhLT5XYlVzYi51ZGV2LAorCQkJICAgICAgIHVzYl9yY3ZjdHJscGlwZShwSHdEYXRhLT5XYlVzYi51ZGV2LCAwKSwKKwkJCSAgICAgICAweDAxLCBVU0JfVFlQRV9WRU5ET1J8VVNCX1JFQ0lQX0RFVklDRXxVU0JfRElSX0lOLAorCQkJICAgICAgIDB4MCwgUmVnaXN0ZXJObywgcGx0bXAsIDQsIEhaKjEwMCApOworCisJKnBSZWdpc3RlclZhbHVlID0gY3B1X3RvX2xlMzIoKnBsdG1wKTsKKworCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1NUT1A7CisKKwlXYjM1UmVnX1VwZGF0ZSggcEh3RGF0YSwgUmVnaXN0ZXJObywgKnBSZWdpc3RlclZhbHVlICk7CisJcFdiMzVSZWctPlN5bmNJb1BhdXNlID0gMDsKKworCVdiMzVSZWdfRVAwVk1fc3RhcnQoIHBId0RhdGEgKTsKKworCWlmIChyZXQgPCAwKSB7CisJCSNpZmRlZiBfUEVfUkVHX0RVTVBfCisJCVdCREVCVUcoKCJFUDAgUmVhZCByZWdpc3RlciB1c2IgbWVzc2FnZSBzZW5kaW5nIGVycm9yXG4iKSk7CisJCSNlbmRpZgorCisJCXBId0RhdGEtPlN1cnByaXNlUmVtb3ZlID0gMTsgLy8gMjAwNjA3MDQuMgorCQlyZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKy8vIFRSVUUgIDogcmVhZCBjb21tYW5kIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5CisvLyBGQUxTRSA6IHJlZ2lzdGVyIG5vdCBzdXBwb3J0CisvLyBwUmVnaXN0ZXJWYWx1ZSA6IEl0IG11c3QgYmUgYSByZXNpZGVudCBidWZmZXIgZHVlIHRvIGFzeW5jaHJvbm91cyByZWFkIHJlZ2lzdGVyLgordW5zaWduZWQgY2hhcgorV2IzNVJlZ19SZWFkKHBod19kYXRhX3QgcEh3RGF0YSwgdTE2IFJlZ2lzdGVyTm8sICBQVUxPTkcgcFJlZ2lzdGVyVmFsdWUgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqIGRyOworCVBVUkIJCXBVcmI7CisJUFJFR19RVUVVRQlwUmVnUXVldWU7CisJdTE2CQlVcmJTaXplOworCisJLy8gTW9kdWxlIHNodXRkb3duCisJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlKQorCQlyZXR1cm4gRkFMU0U7CisKKwkvLyB1cGRhdGUgdGhlIHZhcmlhYmxlIGJ5IHNlbmQgVXJiIHRvIHJlYWQgcmVnaXN0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVXJiU2l6ZSA9IHNpemVvZihSRUdfUVVFVUUpICsgc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpOworCU9TX01FTU9SWV9BTExPQyggKHZvaWQqICopJnBSZWdRdWV1ZSwgVXJiU2l6ZSApOworCXBVcmIgPSB3Yl91c2JfYWxsb2NfdXJiKDApOworCWlmKCBwVXJiICYmIHBSZWdRdWV1ZSApCisJeworCQlwUmVnUXVldWUtPkRJUkVDVCA9IDA7Ly8gcmVhZCByZWdpc3RlcgorCQlwUmVnUXVldWUtPklOREVYID0gUmVnaXN0ZXJObzsKKwkJcFJlZ1F1ZXVlLT5wQnVmZmVyID0gcFJlZ2lzdGVyVmFsdWU7CisJCWRyID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikoKFBVQ0hBUilwUmVnUXVldWUgKyBzaXplb2YoUkVHX1FVRVVFKSk7CisJCWRyLT5iUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9WRU5ET1J8VVNCX1JFQ0lQX0RFVklDRXxVU0JfRElSX0lOOworCQlkci0+YlJlcXVlc3QgPSAweDAxOyAvLyBVU0Igb3IgdmVuZG9yLWRlZmluZWQgcmVxdWVzdCBjb2RlLCBidXJzdCBtb2RlCisJCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNigweDApOworCQlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTYgKFJlZ2lzdGVyTm8pOworCQlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2ICg0KTsKKworCQkvLyBFbnRlciB0aGUgc2VuZGluZyBxdWV1ZQorCQlwUmVnUXVldWUtPk5leHQgPSBOVUxMOworCQlwUmVnUXVldWUtPnBVc2JSZXEgPSBkcjsKKwkJcFJlZ1F1ZXVlLT5wVXJiID0gcFVyYjsKKwkJT1NfU1BJTl9MT0NLX0FDUVVJUkVEICggJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKwkJaWYoIHBXYjM1UmVnLT5wUmVnRmlyc3QgPT0gTlVMTCApCisJCQlwV2IzNVJlZy0+cFJlZ0ZpcnN0ID0gcFJlZ1F1ZXVlOworCQllbHNlCisJCQlwV2IzNVJlZy0+cFJlZ0xhc3QtPk5leHQgPSBwUmVnUXVldWU7CisJCXBXYjM1UmVnLT5wUmVnTGFzdCA9IHBSZWdRdWV1ZTsKKworCQlPU19TUElOX0xPQ0tfUkVMRUFTRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkJLy8gU3RhcnQgRVAwVk0KKwkJV2IzNVJlZ19FUDBWTV9zdGFydCggcEh3RGF0YSApOworCisJCXJldHVybiBUUlVFOworCX0gZWxzZSB7CisJCWlmIChwVXJiKQorCQkJdXNiX2ZyZWVfdXJiKCBwVXJiICk7CisJCWtmcmVlKHBSZWdRdWV1ZSk7CisJCXJldHVybiBGQUxTRTsKKwl9Cit9CisKKwordm9pZAorV2IzNVJlZ19FUDBWTV9zdGFydCggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSRUcgcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmIChPU19BVE9NSUNfSU5DKCBwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVSZWctPlJlZ0ZpcmVDb3VudCkgPT0gMSkgeworCQlwV2IzNVJlZy0+RVAwdm1fc3RhdGUgPSBWTV9SVU5OSU5HOworCQlXYjM1UmVnX0VQMFZNKHBId0RhdGEpOworCX0gZWxzZQorCQlPU19BVE9NSUNfREVDKCBwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVSZWctPlJlZ0ZpcmVDb3VudCApOworfQorCit2b2lkCitXYjM1UmVnX0VQMFZNKHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlQVVJCCQlwVXJiOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyOworCVBVTE9ORwkJcEJ1ZmZlcjsKKwlpbnQJCQlyZXQgPSAtMTsKKwlQUkVHX1FVRVVFCXBSZWdRdWV1ZTsKKworCisJaWYgKHBXYjM1UmVnLT5TeW5jSW9QYXVzZSkKKwkJZ290byBjbGVhbnVwOworCisJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlKQorCQlnb3RvIGNsZWFudXA7CisKKwkvLyBHZXQgdGhlIHJlZ2lzdGVyIGRhdGEgYW5kIHNlbmQgdG8gVVNCIHRocm91Z2ggSXJwCisJT1NfU1BJTl9MT0NLX0FDUVVJUkVEKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCXBSZWdRdWV1ZSA9IHBXYjM1UmVnLT5wUmVnRmlyc3Q7CisJT1NfU1BJTl9MT0NLX1JFTEVBU0VEKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCisJaWYgKCFwUmVnUXVldWUpCisJCWdvdG8gY2xlYW51cDsKKworCS8vIEdldCBhbiBVcmIsIHNlbmQgaXQKKwlwVXJiID0gKFBVUkIpcFJlZ1F1ZXVlLT5wVXJiOworCisJZHIgPSBwUmVnUXVldWUtPnBVc2JSZXE7CisJcFVyYiA9IHBSZWdRdWV1ZS0+cFVyYjsKKwlwQnVmZmVyID0gcFJlZ1F1ZXVlLT5wQnVmZmVyOworCWlmIChwUmVnUXVldWUtPkRJUkVDVCA9PSAxKSAvLyBvdXRwdXQKKwkJcEJ1ZmZlciA9ICZwUmVnUXVldWUtPlZBTFVFOworCisJdXNiX2ZpbGxfY29udHJvbF91cmIoIHBVcmIsIHBId0RhdGEtPldiVXNiLnVkZXYsCisJCQkgICAgICBSRUdfRElSRUNUSU9OKHBId0RhdGEtPldiVXNiLnVkZXYscFJlZ1F1ZXVlKSwKKwkJCSAgICAgIChQVUNIQVIpZHIscEJ1ZmZlcixjcHVfdG9fbGUxNihkci0+d0xlbmd0aCksCisJCQkgICAgICBXYjM1UmVnX0VQMFZNX2NvbXBsZXRlLCAodm9pZCopcEh3RGF0YSk7CisKKwlwV2IzNVJlZy0+RVAwdm1fc3RhdGUgPSBWTV9SVU5OSU5HOworCisJcmV0ID0gd2JfdXNiX3N1Ym1pdF91cmIoIHBVcmIgKTsKKworCWlmIChyZXQgPCAwKSB7CisjaWZkZWYgX1BFX1JFR19EVU1QXworCQlXQkRFQlVHKCgiRVAwIElycCBzZW5kaW5nIGVycm9yXG4iKSk7CisjZW5kaWYKKwkJZ290byBjbGVhbnVwOworCX0KKworCXJldHVybjsKKworIGNsZWFudXA6CisJcFdiMzVSZWctPkVQMHZtX3N0YXRlID0gVk1fU1RPUDsKKwlPU19BVE9NSUNfREVDKCBwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVSZWctPlJlZ0ZpcmVDb3VudCApOworfQorCisKK3ZvaWQKK1diMzVSZWdfRVAwVk1fY29tcGxldGUoUFVSQiBwVXJiKQoreworCXBod19kYXRhX3QgIHBId0RhdGEgPSAocGh3X2RhdGFfdClwVXJiLT5jb250ZXh0OworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJUFJFR19RVUVVRQlwUmVnUXVldWU7CisKKworCS8vIFZhcmlhYmxlIHNldHRpbmcKKwlwV2IzNVJlZy0+RVAwdm1fc3RhdGUgPSBWTV9DT01QTEVURUQ7CisJcFdiMzVSZWctPkVQMFZNX3N0YXR1cyA9IHBVcmItPnN0YXR1czsKKworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkgeyAvLyBMZXQgV2JXbGFuSGFsdCB0byBoYW5kbGUgc3VycHJpc2UgcmVtb3ZlCisJCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1NUT1A7CisJCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJlZy0+UmVnRmlyZUNvdW50ICk7CisJfSBlbHNlIHsKKwkJLy8gQ29tcGxldGUgdG8gc2VuZCwgcmVtb3ZlIHRoZSBVUkIgZnJvbSB0aGUgZmlyc3QKKwkJT1NfU1BJTl9MT0NLX0FDUVVJUkVEKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCQlwUmVnUXVldWUgPSBwV2IzNVJlZy0+cFJlZ0ZpcnN0OworCQlpZiAocFJlZ1F1ZXVlID09IHBXYjM1UmVnLT5wUmVnTGFzdCkKKwkJCXBXYjM1UmVnLT5wUmVnTGFzdCA9IE5VTEw7CisJCXBXYjM1UmVnLT5wUmVnRmlyc3QgPSBwV2IzNVJlZy0+cFJlZ0ZpcnN0LT5OZXh0OworCQlPU19TUElOX0xPQ0tfUkVMRUFTRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkJaWYgKHBXYjM1UmVnLT5FUDBWTV9zdGF0dXMpIHsKKyNpZmRlZiBfUEVfUkVHX0RVTVBfCisJCQlXQkRFQlVHKCgiRVAwIElvQ29tcGxldGVSb3V0aW5lIHJldHVybiBlcnJvclxuIikpOworCQkJRGVidWdVc2JkU3RhdHVzSW5mb3JtYXRpb24oIHBXYjM1UmVnLT5FUDBWTV9zdGF0dXMgKTsKKyNlbmRpZgorCQkJcFdiMzVSZWctPkVQMHZtX3N0YXRlID0gVk1fU1RPUDsKKwkJCXBId0RhdGEtPlN1cnByaXNlUmVtb3ZlID0gMTsKKwkJfSBlbHNlIHsKKwkJCS8vIFN1Y2Nlc3MuIFVwZGF0ZSB0aGUgcmVzdWx0CisKKwkJCS8vIFN0YXJ0IHRoZSBuZXh0IHNlbmQKKwkJCVdiMzVSZWdfRVAwVk0ocEh3RGF0YSk7CisJCX0KKworICAgCQlrZnJlZShwUmVnUXVldWUpOworCX0KKworCXVzYl9mcmVlX3VyYihwVXJiKTsKK30KKworCit2b2lkCitXYjM1UmVnX2Rlc3Ryb3kocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJUFVSQgkJcFVyYjsKKwlQUkVHX1FVRVVFCXBSZWdRdWV1ZTsKKworCisJVXh4X3Bvd2VyX29mZl9wcm9jZWR1cmUocEh3RGF0YSk7CisKKwkvLyBXYWl0IGZvciBSZWcgb3BlcmF0aW9uIGNvbXBsZXRlZAorCWRvIHsKKwkJT1NfU0xFRVAoMTAwMDApOyAvLyBEZWxheSBmb3Igd2FpdGluZyBmdW5jdGlvbiBlbnRlciA5NDA2MjMuMS5hCisJfSB3aGlsZSAocFdiMzVSZWctPkVQMHZtX3N0YXRlICE9IFZNX1NUT1ApOworCU9TX1NMRUVQKDEwMDAwKTsgIC8vIERlbGF5IGZvciB3YWl0aW5nIGZ1bmN0aW9uIGVudGVyIDk0MDYyMy4xLmIKKworCS8vIFJlbGVhc2UgYWxsIHRoZSBkYXRhIGluIFJlZ1F1ZXVlCisJT1NfU1BJTl9MT0NLX0FDUVVJUkVEKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCXBSZWdRdWV1ZSA9IHBXYjM1UmVnLT5wUmVnRmlyc3Q7CisJd2hpbGUgKHBSZWdRdWV1ZSkgeworCQlpZiAocFJlZ1F1ZXVlID09IHBXYjM1UmVnLT5wUmVnTGFzdCkKKwkJCXBXYjM1UmVnLT5wUmVnTGFzdCA9IE5VTEw7CisJCXBXYjM1UmVnLT5wUmVnRmlyc3QgPSBwV2IzNVJlZy0+cFJlZ0ZpcnN0LT5OZXh0OworCisJCXBVcmIgPSBwUmVnUXVldWUtPnBVcmI7CisJCU9TX1NQSU5fTE9DS19SRUxFQVNFRCggJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKwkJaWYgKHBVcmIpIHsKKwkJCXVzYl9mcmVlX3VyYihwVXJiKTsKKwkJCWtmcmVlKHBSZWdRdWV1ZSk7CisJCX0gZWxzZSB7CisJCQkjaWZkZWYgX1BFX1JFR19EVU1QXworCQkJV0JERUJVRygoIkVQMCBxdWV1ZSByZWxlYXNlIGVycm9yXG4iKSk7CisJCQkjZW5kaWYKKwkJfQorCQlPU19TUElOX0xPQ0tfQUNRVUlSRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkJcFJlZ1F1ZXVlID0gcFdiMzVSZWctPnBSZWdGaXJzdDsKKwl9CisJT1NfU1BJTl9MT0NLX1JFTEVBU0VEKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCisJLy8gRnJlZSByZXNvdXJjZQorCU9TX1NQSU5fTE9DS19GUkVFKCAgJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFRoZSBmdW5jdGlvbiBjYW4gYmUgcnVuIGluIHBhc3NpdmUtbGV2ZWwgb25seS4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfaW5pdGlhbChwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVSRUcgcFdiMzVSZWc9JnBId0RhdGEtPldiMzVSZWc7CisJdTMyIGx0bXA7CisJdTMyIFNvZnR3YXJlU2V0LCBWQ09fdHJpbSwgVHhWZ2EsIFJlZ2lvbl9TY2FuSW50ZXJ2YWw7CisKKwkvLyBTcGluIGxvY2sgaXMgYWNxdWlyZWQgZm9yIHJlYWQgYW5kIHdyaXRlIElSUCBjb21tYW5kCisJT1NfU1BJTl9MT0NLX0FMTE9DQVRFKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCisJLy8gR2V0dGluZyBSRiBtb2R1bGUgdHlwZSBmcm9tIEVFUFJPTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2I0LCAweDA4MGQwMDAwICk7IC8vIFN0YXJ0IEVFUFJPTSBhY2Nlc3MgKyBSZWFkICsgYWRkcmVzcygweDBkKQorCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNiNCwgJmx0bXAgKTsKKworCS8vVXBkYXRlIFJGIG1vZHVsZSB0eXBlIGFuZCBkZXRlcm1pbmUgdGhlIFBIWSB0eXBlIGJ5IGluZiBvciBFRVBST00KKwlwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZSA9ICh1OCkoIGx0bXAgJiAweGZmICk7CisJLy8gMCBWIE1BWDI4MjUsIDEgViBNQVgyODI3LCAyIFYgTUFYMjgyOCwgMyBWIE1BWDI4MjkKKwkvLyAxNlYgQUwyMjMwLCAxNyAtIEFMNzIzMCwgMTggLSBBTDIyMzBTCisJLy8gMzIgUmVzZXJ2ZWQKKwkvLyAzMyAtIFc4OVJGMjQyKFR4VkdBIDB+MTkpLCAzNCAtIFc4OVJGMjQyKFR4VkdBIDB+MzQpCisJaWYgKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlICE9IFJGX0RFQ0lERV9CWV9JTkYpIHsKKwkJaWYoIChwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZSA9PSBSRl9NQVhJTV8yODI1KQl8fAorCQkJKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX01BWElNXzI4MjcpCXx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfTUFYSU1fMjgyOCkJfHwKKwkJCShwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZSA9PSBSRl9NQVhJTV8yODI5KQl8fAorCQkJKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX01BWElNX1YxKQl8fAorCQkJKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX0FJUk9IQV8yMjMwKQl8fAorCQkJKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX0FJUk9IQV8yMjMwUykgICAgfHwKKwkJCShwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZSA9PSBSRl9BSVJPSEFfNzIzMCkJfHwKKwkJCShwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZSA9PSBSRl9XQl8yNDIpCQl8fAorCQkJKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX1dCXzI0Ml8xKSkKKwkJCXBId0RhdGEtPnBoeV90eXBlID0gcFdiMzVSZWctPkVFUFJPTVBoeVR5cGU7CisJfQorCisJLy8gUG93ZXIgT24gcHJvY2VkdXJlIHJ1bm5pbmcuIFRoZSByZWxhdGl2ZSBwYXJhbWV0ZXIgd2lsbCBiZSBzZXQgYWNjb3JkaW5nIHRvIHBoeV90eXBlCisJVXh4X3Bvd2VyX29uX3Byb2NlZHVyZSggcEh3RGF0YSApOworCisJLy8gUmVhZGluZyBNQUMgYWRkcmVzcworCVV4eF9SZWFkRXRoZXJuZXRBZGRyZXNzKCBwSHdEYXRhICk7CisKKwkvLyBSZWFkIFZDTyB0cmltIGZvciBSRiBwYXJhbWV0ZXIKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2I0LCAweDA4MjAwMDAwICk7CisJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmVkNPX3RyaW0gKTsKKworCS8vIFJlYWQgQW50ZW5uYSBPbi9PZmYgb2Ygc29mdHdhcmUgZmxhZworCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgyMTAwMDAgKTsKKwlXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDAzYjQsICZTb2Z0d2FyZVNldCApOworCisJLy8gUmVhZCBUWFZHQQorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgxMDAwMDAgKTsKKwlXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDAzYjQsICZUeFZnYSApOworCisJLy8gR2V0IFNjYW4gaW50ZXJ2YWwgc2V0dGluZyBmcm9tIEVFUFJPTSBvZmZzZXQgMHgxYworCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgxZDAwMDAgKTsKKwlXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDAzYjQsICZSZWdpb25fU2NhbkludGVydmFsICk7CisKKwkvLyBVcGRhdGUgRXRoZXJuZXQgYWRkcmVzcworCW1lbWNweSggcEh3RGF0YS0+Q3VycmVudE1hY0FkZHJlc3MsIHBId0RhdGEtPlBlcm1hbmVudE1hY0FkZHJlc3MsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyApOworCisJLy8gVXBkYXRlIHNvZnR3YXJlIHZhcmlhYmxlCisJcEh3RGF0YS0+U29mdHdhcmVTZXQgPSAodTE2KShTb2Z0d2FyZVNldCAmIDB4ZmZmZik7CisJVHhWZ2EgJj0gMHgwMDAwMDBmZjsKKwlwSHdEYXRhLT5Qb3dlckluZGV4RnJvbUVFUFJPTSA9ICh1OClUeFZnYTsKKwlwSHdEYXRhLT5WQ09fdHJpbSA9ICh1OClWQ09fdHJpbSAmIDB4ZmY7CisJaWYgKHBId0RhdGEtPlZDT190cmltID09IDB4ZmYpCisJCXBId0RhdGEtPlZDT190cmltID0gMHgyODsKKworCXBXYjM1UmVnLT5FRVBST01SZWdpb24gPSAodTgpKFJlZ2lvbl9TY2FuSW50ZXJ2YWw+PjgpOyAvLyAyMDA2MDcyMAorCWlmKCBwV2IzNVJlZy0+RUVQUk9NUmVnaW9uPDEgfHwgcFdiMzVSZWctPkVFUFJPTVJlZ2lvbj42ICkKKwkJcFdiMzVSZWctPkVFUFJPTVJlZ2lvbiA9IFJFR0lPTl9BVVRPOworCisJLy9Gb3IgR2V0IFR4IFZHQSBmcm9tIEVFUFJPTSAyMDA2MDMxNS41IG1vdmUgaGVyZQorCUdldFR4VmdhRnJvbUVFUFJPTSggcEh3RGF0YSApOworCisJLy8gU2V0IFNjYW4gSW50ZXJ2YWwKKwlwSHdEYXRhLT5TY2FuX0ludGVydmFsID0gKHU4KShSZWdpb25fU2NhbkludGVydmFsICYgMHhmZikgKiAxMDsKKwlpZiAoKHBId0RhdGEtPlNjYW5fSW50ZXJ2YWwgPT0gMjU1MCkgfHwgKHBId0RhdGEtPlNjYW5fSW50ZXJ2YWwgPCAxMCkpIC8vIElzIGRlZmF1bHQgc2V0dGluZyAweGZmICogMTAKKwkJcEh3RGF0YS0+U2Nhbl9JbnRlcnZhbCA9IFNDQU5fTUFYX0NITkxfVElNRTsKKworCS8vIEluaXRpYWwgcmVnaXN0ZXIKKwlSRlN5bnRoZXNpemVyX2luaXRpYWwocEh3RGF0YSk7CisKKwlCQlByb2Nlc3Nvcl9pbml0aWFsKHBId0RhdGEpOyAvLyBBc3luYyB3cml0ZSwgbXVzdCB3YWl0IHVudGlsIGNvbXBsZXRlCisKKwlXYjM1UmVnX3BoeV9jYWxpYnJhdGlvbihwSHdEYXRhKTsKKworCU14eF9pbml0aWFsKHBId0RhdGEpOworCUR4eF9pbml0aWFsKHBId0RhdGEpOworCisJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlKQorCQlyZXR1cm4gRkFMU0U7CisJZWxzZQorCQlyZXR1cm4gVFJVRTsgLy8gSW5pdGlhbCBmYWlsCit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBDYXJkQ29tcHV0ZUNyYyAtLQorLy8KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgIFJ1bnMgdGhlIEFVVE9ESU4gSUkgQ1JDIGFsZ29yaXRobSBvbiBidWZmZXIgQnVmZmVyIG9mIGxlbmd0aCwgTGVuZ3RoLgorLy8KKy8vICBBcmd1bWVudHM6CisvLyAgICBCdWZmZXIgLSB0aGUgaW5wdXQgYnVmZmVyCisvLyAgICBMZW5ndGggLSB0aGUgbGVuZ3RoIG9mIEJ1ZmZlcgorLy8KKy8vICBSZXR1cm4gVmFsdWU6CisvLyAgICBUaGUgMzItYml0IENSQyB2YWx1ZS4KKy8vCisvLyAgTm90ZToKKy8vICAgIFRoaXMgaXMgYWRhcHRlZCBmcm9tIHRoZSBjb21tZW50cyBpbiB0aGUgYXNzZW1ibHkgbGFuZ3VhZ2UKKy8vICAgIHZlcnNpb24gaW4gX0dFTlJFUS5BU00gb2YgdGhlIERXQiBORTEwMDAvMjAwMCBkcml2ZXIuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3UzMgorQ2FyZENvbXB1dGVDcmMoUFVDSEFSIEJ1ZmZlciwgdTMyIExlbmd0aCkKK3sKKyAgICB1MzIgQ3JjLCBDYXJyeTsKKyAgICB1MzIgIGksIGo7CisgICAgdTggQ3VyQnl0ZTsKKworICAgIENyYyA9IDB4ZmZmZmZmZmY7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTGVuZ3RoOyBpKyspIHsKKworICAgICAgICBDdXJCeXRlID0gQnVmZmVyW2ldOworCisgICAgICAgIGZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKworICAgICAgICAgICAgQ2FycnkgICAgID0gKChDcmMgJiAweDgwMDAwMDAwKSA/IDEgOiAwKSBeIChDdXJCeXRlICYgMHgwMSk7CisgICAgICAgICAgICBDcmMgICAgIDw8PSAxOworICAgICAgICAgICAgQ3VyQnl0ZSA+Pj0gMTsKKworICAgICAgICAgICAgaWYgKENhcnJ5KSB7CisgICAgICAgICAgICAgICAgQ3JjID0oQ3JjIF4gMHgwNGMxMWRiNikgfCBDYXJyeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBDcmM7Cit9CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEJpdFJldmVyc2UgLS0KKy8vICAgUmV2ZXJzZSB0aGUgYml0cyBpbiB0aGUgaW5wdXQgYXJndW1lbnQsIGR3RGF0YSwgd2hpY2ggaXMKKy8vICAgcmVnYXJkZWQgYXMgYSBzdHJpbmcgb2YgYml0cyB3aXRoIHRoZSBsZW5ndGgsIERhdGFMZW5ndGguCisvLworLy8gQXJndW1lbnRzOgorLy8gICBkd0RhdGEgICAgIDoKKy8vICAgRGF0YUxlbmd0aCA6CisvLworLy8gUmV0dXJuOgorLy8gICBUaGUgY29udmVydGVkIHZhbHVlLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3UzMiBCaXRSZXZlcnNlKCB1MzIgZHdEYXRhLCB1MzIgRGF0YUxlbmd0aCkKK3sKKwl1MzIgICBIYWxmTGVuZ3RoLCBpLCBqOworCXUzMiAgIEJpdEEsIEJpdEI7CisKKwlpZiAoIERhdGFMZW5ndGggPD0gMCkgICAgICAgcmV0dXJuIDA7ICAgLy8gTm8gY29udmVyc2lvbiBpcyBkb25lLgorCWR3RGF0YSA9IGR3RGF0YSAmICgweGZmZmZmZmZmID4+ICgzMiAtIERhdGFMZW5ndGgpKTsKKworCUhhbGZMZW5ndGggPSBEYXRhTGVuZ3RoIC8gMjsKKwlmb3IgKCBpID0gMCwgaiA9IERhdGFMZW5ndGgtMSA7IGkgPCBIYWxmTGVuZ3RoOyBpKyssIGotLSkKKwl7CisJCUJpdEEgPSBHZXRCaXQoIGR3RGF0YSwgaSk7CisJCUJpdEIgPSBHZXRCaXQoIGR3RGF0YSwgaik7CisJCWlmIChCaXRBICYmICFCaXRCKSB7CisJCQlkd0RhdGEgPSBDbGVhckJpdCggZHdEYXRhLCBpKTsKKwkJCWR3RGF0YSA9IFNldEJpdCggZHdEYXRhLCBqKTsKKwkJfSBlbHNlIGlmICghQml0QSAmJiBCaXRCKSB7CisJCQlkd0RhdGEgPSBTZXRCaXQoIGR3RGF0YSwgaSk7CisJCQlkd0RhdGEgPSBDbGVhckJpdCggZHdEYXRhLCBqKTsKKwkJfSBlbHNlCisJCXsKKwkJCS8vIERvIG5vdGhpbmcgc2luY2UgdGhlc2UgdHdvIGJpdHMgYXJlIG9mIHRoZSBzYXZlIHZhbHVlcy4KKwkJfQorCX0KKworCXJldHVybiBkd0RhdGE7Cit9CisKK3ZvaWQgV2IzNVJlZ19waHlfY2FsaWJyYXRpb24oICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCXUzMiBCQjNjLCBCQjU0OworCisJaWYgKChwSHdEYXRhLT5waHlfdHlwZSA9PSBSRl9XQl8yNDIpIHx8CisJCShwSHdEYXRhLT5waHlfdHlwZSA9PSBSRl9XQl8yNDJfMSkpIHsKKwkJcGh5X2NhbGlicmF0aW9uX3dpbmJvbmQgKCBwSHdEYXRhLCAyNDEyICk7IC8vIFN5bmMgb3BlcmF0aW9uCisJCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MTAzYywgJkJCM2MgKTsKKwkJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgxMDU0LCAmQkI1NCApOworCisJCXBId0RhdGEtPkJCM2NfY2FsID0gQkIzYzsKKwkJcEh3RGF0YS0+QkI1NF9jYWwgPSBCQjU0OworCisJCVJGU3ludGhlc2l6ZXJfaW5pdGlhbChwSHdEYXRhKTsKKwkJQkJQcm9jZXNzb3JfaW5pdGlhbChwSHdEYXRhKTsgLy8gQXN5bmMgb3BlcmF0aW9uCisKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MTAzYywgQkIzYyApOworCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgxMDU0LCBCQjU0ICk7CisJfQorfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyZWdfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZ19mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhlMjkwNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyZWdfZi5oCkBAIC0wLDAgKzEsNTYgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBJbnRlcmZhY2UgZnVuY3Rpb24gZGVjbGFyZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIFV4eF9wb3dlcl9vbl9wcm9jZWR1cmUoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgVXh4X3Bvd2VyX29mZl9wcm9jZWR1cmUoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgVXh4X1JlYWRFdGhlcm5ldEFkZHJlc3MoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgRHh4X2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgTXh4X2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgUkZTeW50aGVzaXplcl9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisvL3ZvaWQgUkZTeW50aGVzaXplcl9Td2l0Y2hpbmdDaGFubmVsKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgczggQ2hhbm5lbCApOwordm9pZCBSRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsICk7Cit2b2lkIEJCUHJvY2Vzc29yX2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgQkJQcm9jZXNzb3JfUmF0ZUNoYW5naW5nKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggcmF0ZSApOyAvLyAyMDA2MDYxMy4xCisvL3ZvaWQgUkZfUmF0ZUNoYW5naW5nKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggcmF0ZSApOyAvLyAyMDA2MDYyNi41LmMgQWRkCit1OCBSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXgoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBQb3dlckluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyOF8yNFBvd2VyKCAgcGh3X2RhdGFfdCwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyOF81MFBvd2VyKCAgcGh3X2RhdGFfdCwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN18yNFBvd2VyKCAgcGh3X2RhdGFfdCwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN181MFBvd2VyKCAgcGh3X2RhdGFfdCwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyNVBvd2VyKCAgcGh3X2RhdGFfdCwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTIyMzBQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwordTggUkZTeW50aGVzaXplcl9TZXRBaXJvaGE3MjMwUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0V2luYm9uZDI0MlBvd2VyKCAgcGh3X2RhdGFfdCwgIHU4IGluZGV4ICk7Cit2b2lkIEdldFR4VmdhRnJvbUVFUFJPTSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBFRVBST01UeFZnYUFkanVzdCggIHBod19kYXRhX3QgcEh3RGF0YSApOyAvLyAyMDA2MDYxOS41IEFkZAorCisjZGVmaW5lIFJGV3JpdGVDb250cm9sRGF0YSggX0EsIF9WICkgV2IzNVJlZ19Xcml0ZSggX0EsIDB4MDg2NCwgX1YgKQorCit2b2lkIFdiMzVSZWdfZGVzdHJveSggIHBod19kYXRhX3QgcEh3RGF0YSApOworCit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfUmVhZCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgIFBVTE9ORyBwUmVnaXN0ZXJWYWx1ZSApOwordW5zaWduZWQgY2hhciBXYjM1UmVnX1JlYWRTeW5jKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICAgUFVMT05HIHBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGVTeW5jKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApOwordW5zaWduZWQgY2hhciBXYjM1UmVnX1dyaXRlV2l0aENhbGxiYWNrVmFsdWUoICBwaHdfZGF0YV90IHBId0RhdGEsCisJCQkJCQkJCSB1MTYgUmVnaXN0ZXJObywKKwkJCQkJCQkJIHUzMiBSZWdpc3RlclZhbHVlLAorCQkJCQkJCQkgUENIQVIgcFZhbHVlLAorCQkJCQkJCQkgczgJTGVuKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19CdXJzdFdyaXRlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICBQVUxPTkcgcFJlZ2lzdGVyRGF0YSwgIHU4IE51bWJlck9mRGF0YSwgIHU4IEZsYWcgKTsKKwordm9pZCBXYjM1UmVnX0VQMFZNKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIFdiMzVSZWdfRVAwVk1fc3RhcnQoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVJlZ19FUDBWTV9jb21wbGV0ZSggIFBVUkIgcFVyYiApOworCit1MzIgQml0UmV2ZXJzZSggdTMyIGR3RGF0YSwgdTMyIERhdGFMZW5ndGgpOworCit2b2lkIENhcmRHZXRNdWx0aWNhc3RCaXQoICAgdTggQWRkcmVzc1tNQUNfQUREUl9MRU5HVEhdLCAgdTggKkJ5dGUsICB1OCAqVmFsdWUgKTsKK3UzMiBDYXJkQ29tcHV0ZUNyYyggIFBVQ0hBUiBCdWZmZXIsICB1MzIgTGVuZ3RoICk7CisKK3ZvaWQgV2IzNVJlZ19waHlfY2FsaWJyYXRpb24oICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVJlZ19VcGRhdGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIGFkanVzdF9UWFZHQV9mb3JfaXFfbWFnKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZ19zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cmVnX3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzU5NWIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZ19zLmgKQEAgLTAsMCArMSwxNzAgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvKgorCQkJCUhBTCBzZXR0aW5nIGZ1bmN0aW9uCisKKwkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQl8VXh4fCAJfER4eHwJfE14eHwJfEJCfAl8UkZ8CisJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCXwJCQkJCXwKKwkJV2IzNVJlZ19SZWFkCQlXYjM1UmVnX1dyaXRlCisKKwkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCVdiVXNiX0NhbGxVU0JEQVN5bmMJCQkJCXN1cHBsaWVkIEJ5IFdiVXNiIG1vZHVsZQorKi8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyNkZWZpbmUgICAgIEdldEJpdCggZHdEYXRhLCBpKSAgICAgICggZHdEYXRhICYgKDB4MDAwMDAwMDEgPDwgaSkpCisjZGVmaW5lICAgICBTZXRCaXQoIGR3RGF0YSwgaSkgICAgICAoIGR3RGF0YSB8ICgweDAwMDAwMDAxIDw8IGkpKQorI2RlZmluZSAgICAgQ2xlYXJCaXQoIGR3RGF0YSwgaSkgICAgKCBkd0RhdGEgJiB+KDB4MDAwMDAwMDEgPDwgaSkpCisKKyNkZWZpbmUJCUlHTk9SRV9JTkNSRU1FTlQJMAorI2RlZmluZQkJQVVUT19JTkNSRU1FTlQJCTAKKyNkZWZpbmUJCU5PX0lOQ1JFTUVOVAkJMQorI2RlZmluZSBSRUdfRElSRUNUSU9OKF94LF95KSAgICgoX3kpLT5ESVJFQ1QgPT0wID8gdXNiX3JjdmN0cmxwaXBlKF94LDApIDogdXNiX3NuZGN0cmxwaXBlKF94LDApKQorI2RlZmluZSBSRUdfQlVGX1NJWkUoX3gpICAgICAgICgoX3gpLT5iUmVxdWVzdD09IDB4MDQgPyBjcHVfdG9fbGUxNigoX3gpLT53TGVuZ3RoKSA6IDQpCisKKy8vIDIwMDYwNjEzLjIgQWRkIHRoZSBmb2xsb3cgZGVmaW5pdGlvbgorI2RlZmluZSBCQjQ4X0RFRkFVTFRfQUwyMjMwXzExQgkJMHgwMDMzNDQ3YworI2RlZmluZSBCQjRDX0RFRkFVTFRfQUwyMjMwXzExQgkJMHgwQTAwRkVGRgorI2RlZmluZSBCQjQ4X0RFRkFVTFRfQUwyMjMwXzExRwkJMHgwMDMzMkMxQgorI2RlZmluZSBCQjRDX0RFRkFVTFRfQUwyMjMwXzExRwkJMHgwQTAwRkVGRgorCisKKyNkZWZpbmUgQkI0OF9ERUZBVUxUX1dCMjQyXzExQgkJMHgwMDI5MjMxNQkvL2JhY2tvZmYgIDJkQgorI2RlZmluZSBCQjRDX0RFRkFVTFRfV0IyNDJfMTFCCQkweDA4MDBGRUZGCS8vYmFja29mZiAgMmRCCisvLyNkZWZpbmUgQkI0OF9ERUZBVUxUX1dCMjQyXzExQgkJMHgwMDIwMUIxMQkvL2JhY2tvZmYgIDRkQgorLy8jZGVmaW5lIEJCNENfREVGQVVMVF9XQjI0Ml8xMUIJCTB4MDYwMEZGMDAJLy9iYWNrb2ZmICA0ZEIKKyNkZWZpbmUgQkI0OF9ERUZBVUxUX1dCMjQyXzExRwkJMHgwMDQ1M0IyNAorI2RlZmluZSBCQjRDX0RFRkFVTFRfV0IyNDJfMTFHCQkweDBFMDBGRUZGCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBEZWZhdWx0IHNldHRpbmcgZm9yIE14eAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgREVGQVVMVF9DV01JTgkJCQkJMzEJCS8vKE0yQykgQ1dtaW4uIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC0zMS4KKyNkZWZpbmUgREVGQVVMVF9DV01BWAkJCQkJMTAyMwkvLyhNMkMpIENXbWF4LiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtMTAyMy4KKyNkZWZpbmUgREVGQVVMVF9BSUQJCQkJCQkxCQkvLyhNMzQpIEFJRC4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAxLTIwMDcuCisKKyNpZmRlZiBfVVNFX0ZBTExCQUNLX1JBVEVfCisjZGVmaW5lIERFRkFVTFRfUkFURV9SRVRSWV9MSU1JVAkJMgkJLy8oTTM4KSBhcyBuYW1lZAorI2Vsc2UKKyNkZWZpbmUgREVGQVVMVF9SQVRFX1JFVFJZX0xJTUlUCQk3CQkvLyhNMzgpIGFzIG5hbWVkCisjZW5kaWYKKworI2RlZmluZSBERUZBVUxUX0xPTkdfUkVUUllfTElNSVQJCTcJCS8vKE0zOCkgTG9uZ1JldHJ5TGltaXQuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC0xNS4KKyNkZWZpbmUgREVGQVVMVF9TSE9SVF9SRVRSWV9MSU1JVAkJNwkJLy8oTTM4KSBTaG9ydFJldHJ5TGltaXQuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC0xNS4KKyNkZWZpbmUgREVGQVVMVF9QSUZTVAkJCQkJMjUJCS8vKE0zQykgUElGUyBUaW1lLiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtNjU1MzUuCisjZGVmaW5lIERFRkFVTFRfRUlGU1QJCQkJCTM1NAkJLy8oTTNDKSBFSUZTIFRpbWUuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC0xMDQ4NTc1LgorI2RlZmluZSBERUZBVUxUX0RJRlNUCQkJCQk0NQkJLy8oTTNDKSBESUZTIFRpbWUuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC02NTUzNS4KKyNkZWZpbmUgREVGQVVMVF9TSUZTVAkJCQkJNQkJLy8oTTNDKSBTSUZTIFRpbWUuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC02NTUzNS4KKyNkZWZpbmUgREVGQVVMVF9PU0lGU1QJCQkJCTEwCQkvLyhNM0MpIE9yaWdpbmFsIFNJRlMgVGltZS4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTE1LgorI2RlZmluZSBERUZBVUxUX0FUSU1XRAkJCQkJMAkJLy8oTTQwKSBBVElNIFdpbmRvdy4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTY1NTM1LgorI2RlZmluZSBERUZBVUxUX1NMT1RfVElNRQkJCQkyMAkJLy8oTTQwKSAoJCkgU2xvdFRpbWUuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC0yNTUuCisjZGVmaW5lIERFRkFVTFRfTUFYX1RYX01TRFVfTElGRV9USU1FCTUxMgkvLyhNNDQpIE1heFR4TVNEVUxpZmVUaW1lLiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtNDI5NDk2NzI5NS4KKyNkZWZpbmUgREVGQVVMVF9CRUFDT05fSU5URVJWQUwJCQk1MDAJCS8vKE00OCkgQmVhY29uIEludGVydmFsLiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtNjU1MzUuCisjZGVmaW5lIERFRkFVTFRfUFJPQkVfREVMQVlfVElNRQkJMjAwCQkvLyhNNDgpIFByb2JlIERlbGF5IFRpbWUuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC02NTUzNS4KKyNkZWZpbmUgREVGQVVMVF9QUk9UT0NPTF9WRVJTSU9OCQkwCQkvLyhNNEMpCisjZGVmaW5lIERFRkFVTFRfTUFDX1BPV0VSX1NUQVRFCQkJMgkJLy8oTTRDKSAyOiBNQUMgYXQgcG93ZXIgYWN0aXZlCisjZGVmaW5lIERFRkFVTFRfRFRJTV9BTEVSVF9USU1FCQkJMAorCisKK3R5cGVkZWYgc3RydWN0IF9SRUdfUVVFVUUKK3sKKyAgICBzdHJ1Y3QgIHVyYiAqcFVyYjsKKwl2b2lkKglwVXNiUmVxOworCXZvaWQqCU5leHQ7CisJdW5pb24KKwl7CisJCXUzMglWQUxVRTsKKwkJUFVMT05HCXBCdWZmZXI7CisJfTsKKwl1OAlSRVNFUlZFRFs0XTsvLyBzcGFjZSByZXNlcnZlZCBmb3IgY29tbXVuaWNhdGlvbgorCisgICAgdTE2CUlOREVYOyAvLyBGb3Igc3RvcmluZyB0aGUgcmVnaXN0ZXIgaW5kZXgKKyAgICB1OAlSRVNFUlZFRF9WQUxJRDsJLy9JbmRpY2F0ZSB3aGV0aGVyIHRoZSBSRVNFUlZFRCBzcGFjZSBpcyB2YWxpZCBhdCB0aGlzIGNvbW1hbmQuCisJdTgJRElSRUNUOyAvLyAwOkluICAgMTpPdXQKKworfSBSRUdfUVVFVUUsICpQUkVHX1FVRVVFOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSW50ZXJuYWwgdmFyaWFibGUgZm9yIG1vZHVsZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgTUFYX1NRM19GSUxURVJfU0laRQkJNQordHlwZWRlZiBzdHJ1Y3QgX1dCMzVSRUcKK3sKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBSZWdpc3RlciBCYW5rIGJhY2t1cAorCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCXUzMglVMUIwOwkJCS8vYml0MTYgcmVjb3JkIHRoZSBoL3cgcmFkaW8gb24vb2ZmIHN0YXR1cworCXUzMglVMUJDX0xFRENvbmZpZ3VyZTsKKwl1MzIJRDAwX0RtYUNvbnRyb2w7CisJdTMyCU0wMF9NYWNDb250cm9sOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMglNMDRfTXVsdGljYXN0QWRkcmVzczE7CisJCQl1MzIJTTA4X011bHRpY2FzdEFkZHJlc3MyOworCQl9OworCQl1OAkJTXVsdGljYXN0WzhdOwkvLyBjb250ZW50cyBvZiBjYXJkIG11bHRpY2FzdCByZWdpc3RlcnMKKwl9OworCisJdTMyCU0yNF9NYWNDb250cm9sOworCXUzMglNMjhfTWFjQ29udHJvbDsKKwl1MzIJTTJDX01hY0NvbnRyb2w7CisJdTMyCU0zOF9NYWNDb250cm9sOworCXUzMglNM0NfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTQwX01hY0NvbnRyb2w7CisJdTMyCU00NF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNNDhfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTRDX01hY1N0YXR1czsKKwl1MzIJTTYwX01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU02OF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNNzBfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTc0X01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU03OF9FUlBJbmZvcm1hdGlvbjsvLzkzMDIwNi4yLmIKKwl1MzIJTTdDX01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU04MF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNODRfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTg4X01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU05OF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCisJLy9bMjAwNDA3MjIgV0tdCisJLy9CYXNlYmFuZCByZWdpc3RlcgorCXUzMglCQjBDOwkvLyBVc2VkIGZvciBMTkEgY2FsY3VsYXRpb24KKwl1MzIJQkIyQzsJLy8KKwl1MzIJQkIzMDsJLy8xMWIgYWNxdWlzaXRpb24gY29udHJvbCByZWdpc3RlcgorCXUzMglCQjNDOworCXUzMglCQjQ4OwkvLyAyMDA1MTIyMS4xLmEgMjAwNjA2MTMuMSBGaXggT0JXIGlzc3VlIG9mIDExYi8xMWcgcmF0ZQorCXUzMglCQjRDOwkvLyAyMDA2MDYxMy4xICBGaXggT0JXIGlzc3VlIG9mIDExYi8xMWcgcmF0ZQorCXUzMglCQjUwOwkvL21vZGUgY29udHJvbCByZWdpc3RlcgorCXUzMglCQjU0OworCXUzMiAJQkI1ODsJLy9JUV9BTFBIQQorCXUzMglCQjVDOwkvLyBGb3IgdGVzdAorCXUzMglCQjYwOwkvLyBmb3IgV1RPIHJlYWQgdmFsdWUKKworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIFZNCisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tCisJT1NfU1BJTl9MT0NLCUVQMFZNX3NwaW5fbG9jazsgLy8gNEIKKwl1MzIJICAgICAgICBFUDBWTV9zdGF0dXM7Ly8kJAorCVBSRUdfUVVFVUUJICAgIHBSZWdGaXJzdDsKKwlQUkVHX1FVRVVFCSAgICBwUmVnTGFzdDsKKwlPU19BVE9NSUMgICAgICAgUmVnRmlyZUNvdW50OworCisJLy8gSGFyZHdhcmUgc3RhdHVzCisJdTgJRVAwdm1fc3RhdGU7CisJdTgJbWFjX3Bvd2VyX3NhdmU7CisJdTgJRUVQUk9NUGh5VHlwZTsgLy8gMCB+IDE1IGZvciBNYXhpbSAoMCDEhFYgTUFYMjgyNSwgMSDEhFYgTUFYMjgyNywgMiDEhFYgTUFYMjgyOCwgMyDEhFYgTUFYMjgyOSksCisJCQkJCQkgICAvLyAxNiB+IDMxIGZvciBBaXJvaGEgKDE2IMSEViBBTDIyMzAsIDExIC0gQUw3MjMwKQorCQkJCQkJICAgLy8gMzIgfiBSZXNlcnZlZAorCQkJCQkJICAgLy8gMzMgfiA0NyBGb3IgV0IyNDIgKCAzMyAtIFdCMjQyLCAzNCAtIFdCMjQyIHdpdGggbmV3IFR4dmdhIDAuNSBkYiBzdGVwKQorCQkJCQkJICAgLy8gNDggfiAyNTUgQVJFIFJFU0VSVkVELgorCXU4CUVFUFJPTVJlZ2lvbjsJLy9SZWdpb24gc2V0dGluZyBpbiBFRVBST00KKworCXUzMglTeW5jSW9QYXVzZTsgLy8gSWYgdXNlciB1c2UgdGhlIFN5bmMgSW8gdG8gYWNjZXNzIEh3LCB0aGVuIHBhdXNlIHRoZSBhc3luYyBhY2Nlc3MKKworCXU4CUxOQVZhbHVlWzRdOyAvL1RhYmxlIGZvciBzcGVlZCB1cCBydW5uaW5nCisJdTMyCVNRM19maWx0ZXJbTUFYX1NRM19GSUxURVJfU0laRV07CisJdTMyCVNRM19pbmRleDsKKworfSBXQjM1UkVHLCAqUFdCMzVSRUc7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjE1N2ViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJ4LmMKQEAgLTAsMCArMSwzMzcgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIENvcHlyaWdodCAoYykgMTk5Ni0yMDAyIFdpbmJvbmQgRWxlY3Ryb25pYyBDb3Jwb3JhdGlvbgorLy8KKy8vICBNb2R1bGUgTmFtZToKKy8vICAgIFdiMzVSeC5jCisvLworLy8gIEFic3RyYWN0OgorLy8gICAgUHJvY2Vzc2luZyB0aGUgUnggbWVzc2FnZSBmcm9tIGRvd24gbGF5ZXIKKy8vCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNpbmNsdWRlICJzeXNkZWYuaCIKKworCit2b2lkIFdiMzVSeF9zdGFydChwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVSWCBwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKworCS8vIEFsbG93IG9ubHkgb25lIHRocmVhZCB0byBydW4gaW50byB0aGUgV2IzNVJ4KCkgZnVuY3Rpb24KKwlpZiAoT1NfQVRPTUlDX0lOQyhwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVSeC0+UnhGaXJlQ291bnRlcikgPT0gMSkgeworCQlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CisJCVdiMzVSeChwSHdEYXRhKTsKKwl9IGVsc2UKKwkJT1NfQVRPTUlDX0RFQyhwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVSeC0+UnhGaXJlQ291bnRlcik7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gY2Fubm90IHJlZW50cmFpbgordm9pZCBXYjM1UngoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCVBXQjM1UlgJcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisJUFVDSEFSCXBSeEJ1ZmZlckFkZHJlc3M7CisJUFVSQglwVXJiID0gKFBVUkIpcFdiMzVSeC0+UnhVcmI7CisJaW50CXJldHY7CisJdTMyCVJ4QnVmZmVySWQ7CisKKwkvLworCS8vIElzc3VpbmcgVVJCCisJLy8KKwlkbyB7CisJCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSB8fCBwSHdEYXRhLT5Id1N0b3ApCisJCQlicmVhazsKKworCQlpZiAocFdiMzVSeC0+cnhfaGFsdCkKKwkJCWJyZWFrOworCisJCS8vIEdldCBSeEJ1ZmZlcidzIElECisJCVJ4QnVmZmVySWQgPSBwV2IzNVJ4LT5SeEJ1ZmZlcklkOworCQlpZiAoIXBXYjM1UngtPlJ4T3duZXJbUnhCdWZmZXJJZF0pIHsKKwkJCS8vIEl0J3MgaW1wb3NzaWJsZSB0byBydW4gaGVyZS4KKwkJCSNpZmRlZiBfUEVfUlhfRFVNUF8KKwkJCVdCREVCVUcoKCJSeCBkcml2ZXIgZmlmbyB1bmF2YWlsYWJsZVxuIikpOworCQkJI2VuZGlmCisJCQlicmVhazsKKwkJfQorCisJCS8vIFVwZGF0ZSBidWZmZXIgcG9pbnQsIHRoZW4gc3RhcnQgdG8gYnVsa2luIHRoZSBkYXRhIGZyb20gVVNCCisJCXBXYjM1UngtPlJ4QnVmZmVySWQrKzsKKwkJcFdiMzVSeC0+UnhCdWZmZXJJZCAlPSBNQVhfVVNCX1JYX0JVRkZFUl9OVU1CRVI7CisKKwkJcFdiMzVSeC0+Q3VycmVudFJ4QnVmZmVySWQgPSBSeEJ1ZmZlcklkOworCisJCWlmICgxICE9IE9TX01FTU9SWV9BTExPQygodm9pZCogKikmcFdiMzVSeC0+cERSeCwgTUFYX1VTQl9SWF9CVUZGRVIpKSB7CisJCQlwcmludGsoInczNXVuZDogUnggbWVtb3J5IGFsbG9jIGZhaWxlZFxuIik7CisJCQlicmVhazsKKwkJfQorCQlwUnhCdWZmZXJBZGRyZXNzID0gcFdiMzVSeC0+cERSeDsKKworCQl1c2JfZmlsbF9idWxrX3VyYihwVXJiLCBwSHdEYXRhLT5XYlVzYi51ZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKHBId0RhdGEtPldiVXNiLnVkZXYsIDMpLAorCQkJCSAgcFJ4QnVmZmVyQWRkcmVzcywgTUFYX1VTQl9SWF9CVUZGRVIsCisJCQkJICBXYjM1UnhfQ29tcGxldGUsIHBId0RhdGEpOworCisJCXBXYjM1UngtPkVQM3ZtX3N0YXRlID0gVk1fUlVOTklORzsKKworCQlyZXR2ID0gd2JfdXNiX3N1Ym1pdF91cmIocFVyYik7CisKKwkJaWYgKHJldHYgIT0gMCkgeworCQkJcHJpbnRrKCJSeCBVUkIgc2VuZGluZyBlcnJvclxuIik7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm47CisJfSB3aGlsZShGQUxTRSk7CisKKwkvLyBWTSBzdG9wCisJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9TVE9QOworCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJ4LT5SeEZpcmVDb3VudGVyICk7Cit9CisKK3ZvaWQgV2IzNVJ4X0NvbXBsZXRlKFBVUkIgcFVyYikKK3sKKwlwaHdfZGF0YV90CXBId0RhdGEgPSBwVXJiLT5jb250ZXh0OworCVBXQjM1UlgJCXBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCVBVQ0hBUgkJcFJ4QnVmZmVyQWRkcmVzczsKKwl1MzIJCVNpemVDaGVjazsKKwl1MTYJCUJ1bGtMZW5ndGg7CisJdTMyCQlSeEJ1ZmZlcklkOworCVIwMF9ERVNDUklQVE9SIAlSMDA7CisKKwkvLyBWYXJpYWJsZSBzZXR0aW5nCisJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9DT01QTEVURUQ7CisJcFdiMzVSeC0+RVAzVk1fc3RhdHVzID0gcFVyYi0+c3RhdHVzOy8vU3RvcmUgdGhlIGxhc3QgcmVzdWx0IG9mIElycAorCisJZG8geworCQlSeEJ1ZmZlcklkID0gcFdiMzVSeC0+Q3VycmVudFJ4QnVmZmVySWQ7CisKKwkJcFJ4QnVmZmVyQWRkcmVzcyA9IHBXYjM1UngtPnBEUng7CisJCUJ1bGtMZW5ndGggPSAodTE2KXBVcmItPmFjdHVhbF9sZW5ndGg7CisKKwkJLy8gVGhlIElSUCBpcyBjb21wbGV0ZWQKKwkJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9DT01QTEVURUQ7CisKKwkJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlIHx8IHBId0RhdGEtPkh3U3RvcCkgLy8gTXVzdCBiZSBoZXJlLCBvciBSeEJ1ZmZlcklkIGlzIGludmFsaWQKKwkJCWJyZWFrOworCisJCWlmIChwV2IzNVJ4LT5yeF9oYWx0KQorCQkJYnJlYWs7CisKKwkJLy8gU3RhcnQgdG8gcHJvY2VzcyB0aGUgZGF0YSBvbmx5IGluIHN1Y2Nlc3NmdWwgY29uZGl0aW9uCisJCXBXYjM1UngtPlJ4T3duZXJbIFJ4QnVmZmVySWQgXSA9IDA7IC8vIFNldCB0aGUgb3duZXIgdG8gZHJpdmVyCisJCVIwMC52YWx1ZSA9IGxlMzJfdG9fY3B1KCooUFVMT05HKXBSeEJ1ZmZlckFkZHJlc3MpOworCisJCS8vIFRoZSBVUkIgaXMgY29tcGxldGVkLCBjaGVjayB0aGUgcmVzdWx0CisJCWlmIChwV2IzNVJ4LT5FUDNWTV9zdGF0dXMgIT0gMCkgeworCQkJI2lmZGVmIF9QRV9VU0JfU1RBVEVfRFVNUF8KKwkJCVdCREVCVUcoKCJFUDMgSW9Db21wbGV0ZVJvdXRpbmUgcmV0dXJuIGVycm9yXG4iKSk7CisJCQlEZWJ1Z1VzYmRTdGF0dXNJbmZvcm1hdGlvbiggcFdiMzVSeC0+RVAzVk1fc3RhdHVzICk7CisJCQkjZW5kaWYKKwkJCXBXYjM1UngtPkVQM3ZtX3N0YXRlID0gVk1fU1RPUDsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gMjAwNjAyMjAgRm9yIHJlY292ZXJpbmcuIGNoZWNrIGlmIG9wZXJhdGluZyBpbiBzaW5nbGUgVVNCIG1vZGUKKwkJaWYgKCFIQUxfVVNCX01PREVfQlVSU1QocEh3RGF0YSkpIHsKKwkJCVNpemVDaGVjayA9IFIwMC5SMDBfcmVjZWl2ZV9ieXRlX2NvdW50OyAgLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCQkJaWYgKChTaXplQ2hlY2sgJiAweDAzKSA+IDApCisJCQkJU2l6ZUNoZWNrIC09IDQ7CisJCQlTaXplQ2hlY2sgPSAoU2l6ZUNoZWNrICsgMykgJiB+MHgwMzsKKwkJCVNpemVDaGVjayArPSAxMjsgLy8gOCArIDQgYmFkYmVlZgorCQkJaWYgKChCdWxrTGVuZ3RoID4gMTYwMCkgfHwKKwkJCQkoU2l6ZUNoZWNrID4gMTYwMCkgfHwKKwkJCQkoQnVsa0xlbmd0aCAhPSBTaXplQ2hlY2spIHx8CisJCQkJKEJ1bGtMZW5ndGggPT0gMCkpIHsgLy8gQWRkIGZvciBmYWlsIFVyYgorCQkJCXBXYjM1UngtPkVQM3ZtX3N0YXRlID0gVk1fU1RPUDsKKwkJCQlwV2IzNVJ4LT5FcDNFcnJvckNvdW50MisrOworCQkJfQorCQl9CisKKwkJLy8gSW5kaWNhdGluZyB0aGUgcmVjZWl2aW5nIGRhdGEKKwkJcFdiMzVSeC0+Qnl0ZVJlY2VpdmVkICs9IEJ1bGtMZW5ndGg7CisJCXBXYjM1UngtPlJ4QnVmZmVyU2l6ZVsgUnhCdWZmZXJJZCBdID0gQnVsa0xlbmd0aDsKKworCQlpZiAoIXBXYjM1UngtPlJ4T3duZXJbIFJ4QnVmZmVySWQgXSkKKwkJCVdiMzVSeF9pbmRpY2F0ZShwSHdEYXRhKTsKKworCQlrZnJlZShwV2IzNVJ4LT5wRFJ4KTsKKwkJLy8gRG8gdGhlIG5leHQgcmVjZWl2ZQorCQlXYjM1UngocEh3RGF0YSk7CisJCXJldHVybjsKKworCX0gd2hpbGUoRkFMU0UpOworCisJcFdiMzVSeC0+UnhPd25lclsgUnhCdWZmZXJJZCBdID0gMTsgLy8gU2V0IHRoZSBvd25lciB0byBoYXJkd2FyZQorCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJ4LT5SeEZpcmVDb3VudGVyICk7CisJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9TVE9QOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3Vuc2lnbmVkIGNoYXIgV2IzNVJ4X2luaXRpYWwocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1UlggcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisKKwkvLyBJbml0aWFsIHRoZSBCdWZmZXIgUXVldWUKKwlXYjM1UnhfcmVzZXRfZGVzY3JpcHRvciggcEh3RGF0YSApOworCisJcFdiMzVSeC0+UnhVcmIgPSB3Yl91c2JfYWxsb2NfdXJiKDApOworCXJldHVybiAoISFwV2IzNVJ4LT5SeFVyYik7Cit9CisKK3ZvaWQgV2IzNVJ4X3N0b3AocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1UlggcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisKKwkvLyBDYW5jZWxpbmcgdGhlIElycCBpZiBhbHJlYWR5IHNlbmRzIGl0IG91dC4KKwlpZiAocFdiMzVSeC0+RVAzdm1fc3RhdGUgPT0gVk1fUlVOTklORykgeworCQl1c2JfdW5saW5rX3VyYiggcFdiMzVSeC0+UnhVcmIgKTsgLy8gT25seSB1c2UgdW5saW5rLCBsZXQgV2IzNVJ4X2Rlc3Ryb3kgdG8gZnJlZSB0aGVtCisJCSNpZmRlZiBfUEVfUlhfRFVNUF8KKwkJV0JERUJVRygoIkVQMyBSeCBzdG9wXG4iKSk7CisJCSNlbmRpZgorCX0KK30KKworLy8gTmVlZHMgcHJvY2VzcyBjb250ZXh0Cit2b2lkIFdiMzVSeF9kZXN0cm95KHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJYIHBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCisJZG8geworCQlPU19TTEVFUCgxMDAwMCk7IC8vIERlbGF5IGZvciB3YWl0aW5nIGZ1bmN0aW9uIGVudGVyIDk0MDYyMy4xLmEKKwl9IHdoaWxlIChwV2IzNVJ4LT5FUDN2bV9zdGF0ZSAhPSBWTV9TVE9QKTsKKwlPU19TTEVFUCgxMDAwMCk7IC8vIERlbGF5IGZvciB3YWl0aW5nIGZ1bmN0aW9uIGV4aXQgOTQwNjIzLjEuYgorCisJaWYgKHBXYjM1UngtPlJ4VXJiKQorCQl1c2JfZnJlZV91cmIoIHBXYjM1UngtPlJ4VXJiICk7CisJI2lmZGVmIF9QRV9SWF9EVU1QXworCVdCREVCVUcoKCJXYjM1UnhfZGVzdHJveSBPS1xuIikpOworCSNlbmRpZgorfQorCit2b2lkIFdiMzVSeF9yZXNldF9kZXNjcmlwdG9yKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJYIHBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCXUzMglpOworCisJcFdiMzVSeC0+Qnl0ZVJlY2VpdmVkID0gMDsKKwlwV2IzNVJ4LT5SeFByb2Nlc3NJbmRleCA9IDA7CisJcFdiMzVSeC0+UnhCdWZmZXJJZCA9IDA7CisJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9TVE9QOworCXBXYjM1UngtPnJ4X2hhbHQgPSAwOworCisJLy8gSW5pdGlhbCB0aGUgUXVldWUuIFRoZSBsYXN0IGJ1ZmZlciBpcyByZXNlcnZlZCBmb3IgdXNlZCBpZiB0aGUgUnggcmVzb3VyY2UgaXMgdW5hdmFpbGFibGUuCisJZm9yKCBpPTA7IGk8TUFYX1VTQl9SWF9CVUZGRVJfTlVNQkVSOyBpKysgKQorCQlwV2IzNVJ4LT5SeE93bmVyW2ldID0gMTsKK30KKwordm9pZCBXYjM1UnhfYWRqdXN0KFBERVNDUklQVE9SIHBSeERlcykKK3sKKwlQVUxPTkcJcFJ4QnVmZmVyQWRkcmVzczsKKwl1MzIJRGVjcnlwdGlvbk1ldGhvZDsKKwl1MzIJaTsKKwl1MTYJQnVmZmVyU2l6ZTsKKworCURlY3J5cHRpb25NZXRob2QgPSBwUnhEZXMtPlIwMS5SMDFfZGVjcnlwdGlvbl9tZXRob2Q7CisJcFJ4QnVmZmVyQWRkcmVzcyA9IHBSeERlcy0+YnVmZmVyX2FkZHJlc3NbMF07CisJQnVmZmVyU2l6ZSA9IHBSeERlcy0+YnVmZmVyX3NpemVbMF07CisKKwkvLyBBZGp1c3QgdGhlIGxhc3QgcGFydCBvZiBkYXRhLiBPbmx5IGRhdGEgbGVmdAorCUJ1ZmZlclNpemUgLT0gNDsgLy8gRm9yIENSQy0zMgorCWlmIChEZWNyeXB0aW9uTWV0aG9kKQorCQlCdWZmZXJTaXplIC09IDQ7CisJaWYgKERlY3J5cHRpb25NZXRob2QgPT0gMykgLy8gRm9yIENDTVAKKwkJQnVmZmVyU2l6ZSAtPSA0OworCisJLy8gQWRqdXN0IHRoZSBJViBmaWVsZCB3aGljaCBhZnRlciA4MDIuMTEgaGVhZGVyIGFuZCBJQ1YgZmllbGQuCisJaWYgKERlY3J5cHRpb25NZXRob2QgPT0gMSkgLy8gRm9yIFdFUAorCXsKKwkJZm9yKCBpPTY7IGk+MDsgaS0tICkKKwkJCXBSeEJ1ZmZlckFkZHJlc3NbaV0gPSBwUnhCdWZmZXJBZGRyZXNzW2ktMV07CisJCXBSeERlcy0+YnVmZmVyX2FkZHJlc3NbMF0gPSBwUnhCdWZmZXJBZGRyZXNzICsgMTsKKwkJQnVmZmVyU2l6ZSAtPSA0OyAvLyA0IGJ5dGUgZm9yIElWCisJfQorCWVsc2UgaWYoIERlY3J5cHRpb25NZXRob2QgKSAvLyBGb3IgVEtJUCBhbmQgQ0NNUAorCXsKKwkJZm9yIChpPTc7IGk+MTsgaS0tKQorCQkJcFJ4QnVmZmVyQWRkcmVzc1tpXSA9IHBSeEJ1ZmZlckFkZHJlc3NbaS0yXTsKKwkJcFJ4RGVzLT5idWZmZXJfYWRkcmVzc1swXSA9IHBSeEJ1ZmZlckFkZHJlc3MgKyAyOy8vVXBkYXRlIHRoZSBkZXNjcmlwdG9yLCBzaGlmdCA4IGJ5dGUKKwkJQnVmZmVyU2l6ZSAtPSA4OyAvLyA4IGJ5dGUgZm9yIElWICsgSUNWCisJfQorCXBSeERlcy0+YnVmZmVyX3NpemVbMF0gPSBCdWZmZXJTaXplOworfQorCitleHRlcm4gdm9pZCBwYWNrZXRfY2FtZShjaGFyICpwUnhCdWZmZXJBZGRyZXNzLCBpbnQgUGFja2V0U2l6ZSk7CisKKwordTE2IFdiMzVSeF9pbmRpY2F0ZShwaHdfZGF0YV90IHBId0RhdGEpCit7CisJREVTQ1JJUFRPUglSeERlczsKKwlQV0IzNVJYCXBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCVBVQ0hBUgkJcFJ4QnVmZmVyQWRkcmVzczsKKwl1MTYJCVBhY2tldFNpemU7CisJdTE2CQlzdG1wLCBCdWZmZXJTaXplLCBzdG1wMiA9IDA7CisJdTMyCQlSeEJ1ZmZlcklkOworCisJLy8gT25seSBvbmUgdGhyZWFkIGJlIGFsbG93ZWQgdG8gcnVuIGludG8gdGhlIGZvbGxvd2luZworCWRvIHsKKwkJUnhCdWZmZXJJZCA9IHBXYjM1UngtPlJ4UHJvY2Vzc0luZGV4OworCQlpZiAocFdiMzVSeC0+UnhPd25lclsgUnhCdWZmZXJJZCBdKSAvL093bmVyIGJ5IFZNCisJCQlicmVhazsKKworCQlwV2IzNVJ4LT5SeFByb2Nlc3NJbmRleCsrOworCQlwV2IzNVJ4LT5SeFByb2Nlc3NJbmRleCAlPSBNQVhfVVNCX1JYX0JVRkZFUl9OVU1CRVI7CisKKwkJcFJ4QnVmZmVyQWRkcmVzcyA9IHBXYjM1UngtPnBEUng7CisJCUJ1ZmZlclNpemUgPSBwV2IzNVJ4LT5SeEJ1ZmZlclNpemVbIFJ4QnVmZmVySWQgXTsKKworCQkvLyBQYXJzZSB0aGUgYnVsa2luIGJ1ZmZlcgorCQl3aGlsZSAoQnVmZmVyU2l6ZSA+PSA0KSB7CisJCQlpZiAoKGNwdV90b19sZTMyKCooUFVMT05HKXBSeEJ1ZmZlckFkZHJlc3MpICYgMHgwZmZmZmZmZikgPT0gUlhfRU5EX1RBRykgLy9JcyBlbmRpbmc/IDkyMTAwMi45LmEKKwkJCQlicmVhazsKKworCQkJLy8gR2V0IHRoZSBSMDAgUjAxIGZpcnN0CisJCQlSeERlcy5SMDAudmFsdWUgPSBsZTMyX3RvX2NwdSgqKFBVTE9ORylwUnhCdWZmZXJBZGRyZXNzKTsKKwkJCVBhY2tldFNpemUgPSAodTE2KVJ4RGVzLlIwMC5SMDBfcmVjZWl2ZV9ieXRlX2NvdW50OworCQkJUnhEZXMuUjAxLnZhbHVlID0gbGUzMl90b19jcHUoKigoUFVMT05HKShwUnhCdWZmZXJBZGRyZXNzKzQpKSk7CisJCQkvLyBGb3IgbmV3IERNQSA0aworCQkJaWYgKChQYWNrZXRTaXplICYgMHgwMykgPiAwKQorCQkJCVBhY2tldFNpemUgLT0gNDsKKworCQkJLy8gQmFzaWMgY2hlY2sgZm9yIFJ4IGxlbmd0aC4gSXMgbGVuZ3RoIHZhbGlkPworCQkJaWYgKFBhY2tldFNpemUgPiBNQVhfUEFDS0VUX1NJWkUpIHsKKwkJCQkjaWZkZWYgX1BFX1JYX0RVTVBfCisJCQkJV0JERUJVRygoIlNlcmlvdXMgRVJST1IgOiBSeCBkYXRhIHNpemUgdG9vIGxvbmcsIHNpemUgPSVkXG4iLCBQYWNrZXRTaXplKSk7CisJCQkJI2VuZGlmCisKKwkJCQlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX1NUT1A7CisJCQkJcFdiMzVSeC0+RXAzRXJyb3JDb3VudDIrKzsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLy8gU3RhcnQgdG8gcHJvY2VzcyBSeCBidWZmZXIKKy8vCQkJUnhEZXMuRGVzY3JpcHRvcl9JRCA9IFJ4QnVmZmVySWQ7IC8vIER1ZSB0byBzeW5jaHJvbm91cyBpbmRpY2F0ZSwgdGhlIGZpZWxkIGRvZXNuJ3QgbmVjZXNzYXJ5IHRvIHVzZS4KKwkJCUJ1ZmZlclNpemUgLT0gODsgLy9zdWJ0cmFjdCA4IGJ5dGUgZm9yIDM1J3MgVVNCIGhlYWRlciBsZW5ndGgKKwkJCXBSeEJ1ZmZlckFkZHJlc3MgKz0gODsKKworCQkJUnhEZXMuYnVmZmVyX2FkZHJlc3NbMF0gPSBwUnhCdWZmZXJBZGRyZXNzOworCQkJUnhEZXMuYnVmZmVyX3NpemVbMF0gPSBQYWNrZXRTaXplOworCQkJUnhEZXMuYnVmZmVyX251bWJlciA9IDE7CisJCQlSeERlcy5idWZmZXJfc3RhcnRfaW5kZXggPSAwOworCQkJUnhEZXMuYnVmZmVyX3RvdGFsX3NpemUgPSBSeERlcy5idWZmZXJfc2l6ZVswXTsKKwkJCVdiMzVSeF9hZGp1c3QoJlJ4RGVzKTsKKworCQkJcGFja2V0X2NhbWUocFJ4QnVmZmVyQWRkcmVzcywgUGFja2V0U2l6ZSk7CisKKwkJCS8vIE1vdmUgUnhCdWZmZXIgcG9pbnQgdG8gdGhlIG5leHQKKwkJCXN0bXAgPSBQYWNrZXRTaXplICsgMzsKKwkJCXN0bXAgJj0gfjB4MDM7IC8vIDRuIGFsaWdubWVudAorCQkJcFJ4QnVmZmVyQWRkcmVzcyArPSBzdG1wOworCQkJQnVmZmVyU2l6ZSAtPSBzdG1wOworCQkJc3RtcDIgKz0gc3RtcDsKKwkJfQorCisJCS8vIFJlY2xhaW0gcmVzb3VyY2UKKwkJcFdiMzVSeC0+UnhPd25lclsgUnhCdWZmZXJJZCBdID0gMTsKKwl9IHdoaWxlKFRSVUUpOworCisJcmV0dXJuIHN0bXAyOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeF9mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cnhfZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYTNlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cnhfZi5oCkBAIC0wLDAgKzEsMTcgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBJbnRlcmZhY2UgZnVuY3Rpb24gZGVjbGFyZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQJCVdiMzVSeF9yZXNldF9kZXNjcmlwdG9yKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit1bnNpZ25lZCBjaGFyCQlXYjM1UnhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZAkJV2IzNVJ4X2Rlc3Ryb3koICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQJCVdiMzVSeF9zdG9wKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit1MTYJCVdiMzVSeF9pbmRpY2F0ZSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZAkJV2IzNVJ4X2FkanVzdCggIFBERVNDUklQVE9SIHBSeERlcyApOwordm9pZAkJV2IzNVJ4X3N0YXJ0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisKK3ZvaWQJCVdiMzVSeCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZAkJV2IzNVJ4X0NvbXBsZXRlKCAgUFVSQiBwVXJiICk7CisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeF9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cnhfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYjgzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cnhfcy5oCkBAIC0wLDAgKzEsNDggQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gd2IzNXJ4LmggLS0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvLyBEZWZpbml0aW9uIGZvciB0aGlzIG1vZHVsZSB1c2VkCisjZGVmaW5lIE1BWF9VU0JfUlhfQlVGRkVSCTQwOTYJLy8gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSA0MDk2IDkzMTEzMC40LmYKKworI2RlZmluZSBNQVhfVVNCX1JYX0JVRkZFUl9OVU1CRVIJRVRIRVJORVRfUlhfREVTQ1JJUFRPUlMJCS8vIE1heGltdW0gMjU0LCAyNTUgaXMgUkVTRVJWRUQgSUQKKyNkZWZpbmUgUlhfSU5URVJGQUNFCQkJCTAJLy8gSW50ZXJmYWNlIDEKKyNkZWZpbmUgUlhfUElQRQkJCQkJCTIJLy8gUGlwZSAzCisjZGVmaW5lIE1BWF9QQUNLRVRfU0laRQkJCQkxNjAwIC8vMTU2OAkvLyA4ICsgMTUzMiArIDQgKyAyNChJViBFSVYgTUlDIElDViBDUkMpIGZvciBjaGVjayBETUEgZGF0YSA5MzExMzAuNC5nCisjZGVmaW5lIFJYX0VORF9UQUcJCQkJCTB4MGJhZGJlZWYKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSW50ZXJuYWwgdmFyaWFibGUgZm9yIG1vZHVsZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3R5cGVkZWYgc3RydWN0IF9XQjM1UlgKK3sKKwl1MzIJCQlCeXRlUmVjZWl2ZWQ7Ly8gRm9yIGNhbGN1bGF0aW5nIHRocm91Z2hwdXQgb2YgQnVsa0luCisJT1NfQVRPTUlDCQlSeEZpcmVDb3VudGVyOy8vIERvZXMgV2IzNVJ4IG1vZHVsZSBmaXJlPworCisJdTgJUnhCdWZmZXJbIE1BWF9VU0JfUlhfQlVGRkVSX05VTUJFUiBdWyAoKE1BWF9VU0JfUlhfQlVGRkVSKzMpICYgfjB4MDMgKSBdOworCXUxNglSeEJ1ZmZlclNpemVbICgoTUFYX1VTQl9SWF9CVUZGRVJfTlVNQkVSKzEpICYgfjB4MDEpIF07CisJdTgJUnhPd25lclsgKChNQVhfVVNCX1JYX0JVRkZFUl9OVU1CRVIrMykgJiB+MHgwMyApIF07Ly9Pd25lcnNoaXAgb2YgYnVmZmVyICAwOiBTVyAxOkhXCisKKwl1MzIJUnhQcm9jZXNzSW5kZXg7Ly9UaGUgbmV4dCBpbmRleCB0byBwcm9jZXNzCisJdTMyCVJ4QnVmZmVySWQ7CisJdTMyCUVQM3ZtX3N0YXRlOworCisJdTMyCXJ4X2hhbHQ7IC8vIEZvciBWTSBzdG9wcGluZworCisJdTE2CU1vcmVEYXRhU2l6ZTsKKwl1MTYJUGFja2V0U2l6ZTsKKworCXUzMglDdXJyZW50UnhCdWZmZXJJZDsgLy8gRm9yIGNvbXBsZXRlIHJvdXRpbmUgdXNhZ2UKKwl1MzIJUngzVXJiQ2FuY2VsOworCisJdTMyCUxhc3RSMTsgLy8gRm9yIFJTU0kgcmVwb3J0aW5nCisJc3RydWN0IHVyYiAqCQkJCVJ4VXJiOworCXUzMgkJRXAzRXJyb3JDb3VudDI7IC8vIDIwMDYwNjI1LjEgVXNiZCBmb3IgUnggRE1BIGVycm9yIGNvdW50CisKKwlpbnQJCUVQM1ZNX3N0YXR1czsKKwlQVUNIQVIJcERSeDsKKworfSBXQjM1UlgsICpQV0IzNVJYOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eC5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXR4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YxOWMzYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eC5jCkBAIC0wLDAgKzEsMzEzIEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwMiBXaW5ib25kIEVsZWN0cm9uaWMgQ29ycG9yYXRpb24KKy8vCisvLyAgTW9kdWxlIE5hbWU6CisvLyAgICBXYjM1VHguYworLy8KKy8vICBBYnN0cmFjdDoKKy8vICAgIFByb2Nlc3NpbmcgdGhlIFR4IG1lc3NhZ2UgYW5kIHB1dCBpbnRvIGRvd24gbGF5ZXIKKy8vCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNpbmNsdWRlICJzeXNkZWYuaCIKKworCit1bnNpZ25lZCBjaGFyCitXYjM1VHhfZ2V0X3R4X2J1ZmZlcihwaHdfZGF0YV90IHBId0RhdGEsIFBVQ0hBUiAqcEJ1ZmZlciApCit7CisJUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKworCSpwQnVmZmVyID0gcFdiMzVUeC0+VHhCdWZmZXJbMF07CisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgV2IzNVR4X3N0YXJ0KHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCisJLy8gQWxsb3cgb25seSBvbmUgdGhyZWFkIHRvIHJ1biBpbnRvIGZ1bmN0aW9uCisJaWYgKE9TX0FUT01JQ19JTkMocEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1VHgtPlR4RmlyZUNvdW50ZXIpID09IDEpIHsKKwkJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9SVU5OSU5HOworCQlXYjM1VHgocEh3RGF0YSk7CisJfSBlbHNlCisJCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVR4LT5UeEZpcmVDb3VudGVyICk7Cit9CisKKwordm9pZCBXYjM1VHgocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFgJCXBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCVBBREFQVEVSCUFkYXB0ZXIgPSBwSHdEYXRhLT5BZGFwdGVyOworCVBVQ0hBUgkJcFR4QnVmZmVyQWRkcmVzczsKKwlQTURTCQlwTWRzID0gJkFkYXB0ZXItPk1kczsKKwlzdHJ1Y3QgdXJiICoJcFVyYiA9IChzdHJ1Y3QgdXJiICopcFdiMzVUeC0+VHg0VXJiOworCWludCAgICAgICAgIAlyZXR2OworCXUzMgkJU2VuZEluZGV4OworCisKKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgfHwgcEh3RGF0YS0+SHdTdG9wKQorCQlnb3RvIGNsZWFudXA7CisKKwlpZiAocFdiMzVUeC0+dHhfaGFsdCkKKwkJZ290byBjbGVhbnVwOworCisJLy8gT3duZXJzaGlwIGNoZWNraW5nCisJU2VuZEluZGV4ID0gcFdiMzVUeC0+VHhTZW5kSW5kZXg7CisJaWYgKCFwTWRzLT5UeE93bmVyW1NlbmRJbmRleF0pIC8vTm8gbW9yZSBkYXRhIG5lZWQgdG8gYmUgc2VudCwgcmV0dXJuIGltbWVkaWF0ZWx5CisJCWdvdG8gY2xlYW51cDsKKworCXBUeEJ1ZmZlckFkZHJlc3MgPSBwV2IzNVR4LT5UeEJ1ZmZlcltTZW5kSW5kZXhdOworCS8vCisJLy8gSXNzdWluZyBVUkIKKwkvLworCXVzYl9maWxsX2J1bGtfdXJiKHBVcmIsIHBId0RhdGEtPldiVXNiLnVkZXYsCisJCQkgIHVzYl9zbmRidWxrcGlwZShwSHdEYXRhLT5XYlVzYi51ZGV2LCA0KSwKKwkJCSAgcFR4QnVmZmVyQWRkcmVzcywgcE1kcy0+VHhCdWZmZXJTaXplWyBTZW5kSW5kZXggXSwKKwkJCSAgV2IzNVR4X2NvbXBsZXRlLCBwSHdEYXRhKTsKKworCXBXYjM1VHgtPkVQNHZtX3N0YXRlID0gVk1fUlVOTklORzsKKwlyZXR2ID0gd2JfdXNiX3N1Ym1pdF91cmIoIHBVcmIgKTsKKwlpZiAocmV0djwwKSB7CisJCXByaW50aygiRVA0IFR4IElycCBzZW5kaW5nIGVycm9yXG4iKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8vIENoZWNrIGlmIGRyaXZlciBuZWVkcyBpc3N1ZSBJcnAgZm9yIEVQMgorCXBXYjM1VHgtPlR4RmlsbENvdW50ICs9IHBNZHMtPlR4Q291bnRJbkJ1ZmZlcltTZW5kSW5kZXhdOworCWlmIChwV2IzNVR4LT5UeEZpbGxDb3VudCA+IDEyKQorCQlXYjM1VHhfRVAyVk1fc3RhcnQoIHBId0RhdGEgKTsKKworCXBXYjM1VHgtPkJ5dGVUcmFuc2ZlciArPSBwTWRzLT5UeEJ1ZmZlclNpemVbU2VuZEluZGV4XTsKKwlyZXR1cm47CisKKyBjbGVhbnVwOgorCXBXYjM1VHgtPkVQNHZtX3N0YXRlID0gVk1fU1RPUDsKKwlPU19BVE9NSUNfREVDKCBwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVUeC0+VHhGaXJlQ291bnRlciApOworfQorCisKK3ZvaWQgV2IzNVR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKiBwVXJiKQoreworCXBod19kYXRhX3QJcEh3RGF0YSA9IHBVcmItPmNvbnRleHQ7CisJUEFEQVBURVIJQWRhcHRlciA9IChQQURBUFRFUilwSHdEYXRhLT5BZGFwdGVyOworCVBXQjM1VFgJCXBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCVBNRFMJCXBNZHMgPSAmQWRhcHRlci0+TWRzOworCisJcHJpbnRrKCJ3YjM1OiB0eCBjb21wbGV0ZVxuIik7CisJLy8gVmFyaWFibGUgc2V0dGluZworCXBXYjM1VHgtPkVQNHZtX3N0YXRlID0gVk1fQ09NUExFVEVEOworCXBXYjM1VHgtPkVQNFZNX3N0YXR1cyA9IHBVcmItPnN0YXR1czsgLy9TdG9yZSB0aGUgbGFzdCByZXN1bHQgb2YgSXJwCisJcE1kcy0+VHhPd25lclsgcFdiMzVUeC0+VHhTZW5kSW5kZXggXSA9IDA7Ly8gU2V0IHRoZSBvd25lci4gRnJlZSB0aGUgb3duZXIgYml0IGFsd2F5cy4KKwlwV2IzNVR4LT5UeFNlbmRJbmRleCsrOworCXBXYjM1VHgtPlR4U2VuZEluZGV4ICU9IE1BWF9VU0JfVFhfQlVGRkVSX05VTUJFUjsKKworCWRvIHsKKwkJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlIHx8IHBId0RhdGEtPkh3U3RvcCkgLy8gTGV0IFdiV2xhbkhhbHQgdG8gaGFuZGxlIHN1cnByaXNlIHJlbW92ZQorCQkJYnJlYWs7CisKKwkJaWYgKHBXYjM1VHgtPnR4X2hhbHQpCisJCQlicmVhazsKKworCQkvLyBUaGUgVVJCIGlzIGNvbXBsZXRlZCwgY2hlY2sgdGhlIHJlc3VsdAorCQlpZiAocFdiMzVUeC0+RVA0Vk1fc3RhdHVzICE9IDApIHsKKwkJCXByaW50aygiVVJCIHN1Ym1pc3Npb24gZmFpbGVkXG4iKTsKKwkJCXBXYjM1VHgtPkVQNHZtX3N0YXRlID0gVk1fU1RPUDsKKwkJCWJyZWFrOyAvLyBFeGl0IHdoaWxlKEZBTFNFKTsKKwkJfQorCisJCU1kc19UeChBZGFwdGVyKTsKKwkJV2IzNVR4KHBId0RhdGEpOworCQlyZXR1cm47CisJfSB3aGlsZShGQUxTRSk7CisKKwlPU19BVE9NSUNfREVDKCBwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVUeC0+VHhGaXJlQ291bnRlciApOworCXBXYjM1VHgtPkVQNHZtX3N0YXRlID0gVk1fU1RPUDsKK30KKwordm9pZCBXYjM1VHhfcmVzZXRfZGVzY3JpcHRvciggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKworCXBXYjM1VHgtPlR4U2VuZEluZGV4ID0gMDsKKwlwV2IzNVR4LT50eF9oYWx0ID0gMDsKK30KKwordW5zaWduZWQgY2hhciBXYjM1VHhfaW5pdGlhbChwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKworCXBXYjM1VHgtPlR4NFVyYiA9IHdiX3VzYl9hbGxvY191cmIoMCk7CisJaWYgKCFwV2IzNVR4LT5UeDRVcmIpCisJCXJldHVybiBGQUxTRTsKKworCXBXYjM1VHgtPlR4MlVyYiA9IHdiX3VzYl9hbGxvY191cmIoMCk7CisJaWYgKCFwV2IzNVR4LT5UeDJVcmIpCisJeworCQl1c2JfZnJlZV91cmIoIHBXYjM1VHgtPlR4NFVyYiApOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2b2lkIFdiMzVUeF9zdG9wKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCisJLy8gVHJ5aW5nIHRvIGNhbmNlbGluZyB0aGUgVHJwIG9mIEVQMgorCWlmIChwV2IzNVR4LT5FUDJ2bV9zdGF0ZSA9PSBWTV9SVU5OSU5HKQorCQl1c2JfdW5saW5rX3VyYiggcFdiMzVUeC0+VHgyVXJiICk7IC8vIE9ubHkgdXNlIHVubGluaywgbGV0IFdiMzVUeF9kZXN0cm90IHRvIGZyZWUgdGhlbQorCSNpZmRlZiBfUEVfVFhfRFVNUF8KKwlXQkRFQlVHKCgiRVAyIFR4IHN0b3BcbiIpKTsKKwkjZW5kaWYKKworCS8vIFRyeWluZyB0byBjYW5jZWxpbmcgdGhlIElycCBvZiBFUDQKKwlpZiAocFdiMzVUeC0+RVA0dm1fc3RhdGUgPT0gVk1fUlVOTklORykKKwkJdXNiX3VubGlua191cmIoIHBXYjM1VHgtPlR4NFVyYiApOyAvLyBPbmx5IHVzZSB1bmxpbmssIGxldCBXYjM1VHhfZGVzdHJvdCB0byBmcmVlIHRoZW0KKwkjaWZkZWYgX1BFX1RYX0RVTVBfCisJV0JERUJVRygoIkVQNCBUeCBzdG9wXG4iKSk7CisJI2VuZGlmCit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2b2lkIFdiMzVUeF9kZXN0cm95KHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCisJLy8gV2FpdCBmb3IgVk0gc3RvcAorCWRvIHsKKwkJT1NfU0xFRVAoMTAwMDApOyAgLy8gRGVsYXkgZm9yIHdhaXRpbmcgZnVuY3Rpb24gZW50ZXIgOTQwNjIzLjEuYQorCX0gd2hpbGUoIChwV2IzNVR4LT5FUDJ2bV9zdGF0ZSAhPSBWTV9TVE9QKSAmJiAocFdiMzVUeC0+RVA0dm1fc3RhdGUgIT0gVk1fU1RPUCkgKTsKKwlPU19TTEVFUCgxMDAwMCk7ICAvLyBEZWxheSBmb3Igd2FpdGluZyBmdW5jdGlvbiBlbnRlciA5NDA2MjMuMS5iCisKKwlpZiAocFdiMzVUeC0+VHg0VXJiKQorCQl1c2JfZnJlZV91cmIoIHBXYjM1VHgtPlR4NFVyYiApOworCisJaWYgKHBXYjM1VHgtPlR4MlVyYikKKwkJdXNiX2ZyZWVfdXJiKCBwV2IzNVR4LT5UeDJVcmIgKTsKKworCSNpZmRlZiBfUEVfVFhfRFVNUF8KKwlXQkRFQlVHKCgiV2IzNVR4X2Rlc3Ryb3kgT0tcbiIpKTsKKwkjZW5kaWYKK30KKwordm9pZCBXYjM1VHhfQ3VycmVudFRpbWUocGh3X2RhdGFfdCBwSHdEYXRhLCB1MzIgVGltZUNvdW50KQoreworCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJdW5zaWduZWQgY2hhciBUcmlnZ2VyID0gRkFMU0U7CisKKwlpZiAocFdiMzVUeC0+VHhUaW1lciA+IFRpbWVDb3VudCkKKwkJVHJpZ2dlciA9IFRSVUU7CisJZWxzZSBpZiAoVGltZUNvdW50ID4gKHBXYjM1VHgtPlR4VGltZXIrNTAwKSkKKwkJVHJpZ2dlciA9IFRSVUU7CisKKwlpZiAoVHJpZ2dlcikgeworCQlwV2IzNVR4LT5UeFRpbWVyID0gVGltZUNvdW50OworCQlXYjM1VHhfRVAyVk1fc3RhcnQoIHBId0RhdGEgKTsKKwl9Cit9CisKK3ZvaWQgV2IzNVR4X0VQMlZNX3N0YXJ0KHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCisJLy8gQWxsb3cgb25seSBvbmUgdGhyZWFkIHRvIHJ1biBpbnRvIGZ1bmN0aW9uCisJaWYgKE9TX0FUT01JQ19JTkMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVR4LT5UeFJlc3VsdENvdW50ICkgPT0gMSkgeworCQlwV2IzNVR4LT5FUDJ2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CisJCVdiMzVUeF9FUDJWTSggcEh3RGF0YSApOworCX0KKwllbHNlCisJCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVR4LT5UeFJlc3VsdENvdW50ICk7Cit9CisKKwordm9pZCBXYjM1VHhfRVAyVk0ocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJc3RydWN0IHVyYiAqCXBVcmIgPSAoc3RydWN0IHVyYiAqKXBXYjM1VHgtPlR4MlVyYjsKKwlQVUxPTkcJcGx0bXAgPSAoUFVMT05HKXBXYjM1VHgtPkVQMl9idWY7CisJaW50CQlyZXR2OworCisJZG8geworCQlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgfHwgcEh3RGF0YS0+SHdTdG9wKQorCQkJYnJlYWs7CisKKwkJaWYgKHBXYjM1VHgtPnR4X2hhbHQpCisJCQlicmVhazsKKworCQkvLworCQkvLyBJc3N1aW5nIFVSQgorCQkvLworCQl1c2JfZmlsbF9pbnRfdXJiKCBwVXJiLCBwSHdEYXRhLT5XYlVzYi51ZGV2LCB1c2JfcmN2aW50cGlwZShwSHdEYXRhLT5XYlVzYi51ZGV2LDIpLAorCQkJCSAgcGx0bXAsIE1BWF9JTlRFUlJVUFRfTEVOR1RILCBXYjM1VHhfRVAyVk1fY29tcGxldGUsIHBId0RhdGEsIDMyKTsKKworCQlwV2IzNVR4LT5FUDJ2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CisJCXJldHYgPSB3Yl91c2Jfc3VibWl0X3VyYiggcFVyYiApOworCisJCWlmKHJldHYgPCAwKSB7CisJCQkjaWZkZWYgX1BFX1RYX0RVTVBfCisJCQlXQkRFQlVHKCgiRVAyIFR4IElycCBzZW5kaW5nIGVycm9yXG4iKSk7CisJCQkjZW5kaWYKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0dXJuOworCisJfSB3aGlsZShGQUxTRSk7CisKKwlwV2IzNVR4LT5FUDJ2bV9zdGF0ZSA9IFZNX1NUT1A7CisJT1NfQVRPTUlDX0RFQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1VHgtPlR4UmVzdWx0Q291bnQgKTsKK30KKworCit2b2lkIFdiMzVUeF9FUDJWTV9jb21wbGV0ZShzdHJ1Y3QgdXJiICogcFVyYikKK3sKKwlwaHdfZGF0YV90CXBId0RhdGEgPSBwVXJiLT5jb250ZXh0OworCVQwMl9ERVNDUklQVE9SCVQwMiwgVFNUQVRVUzsKKwlQQURBUFRFUglBZGFwdGVyID0gKFBBREFQVEVSKXBId0RhdGEtPkFkYXB0ZXI7CisJUFdCMzVUWAkJcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJUFVMT05HCQlwbHRtcCA9IChQVUxPTkcpcFdiMzVUeC0+RVAyX2J1ZjsKKwl1MzIJCWk7CisJdTE2CQlJbnRlcnJ1cHRJbkxlbmd0aDsKKworCisJLy8gVmFyaWFibGUgc2V0dGluZworCXBXYjM1VHgtPkVQMnZtX3N0YXRlID0gVk1fQ09NUExFVEVEOworCXBXYjM1VHgtPkVQMlZNX3N0YXR1cyA9IHBVcmItPnN0YXR1czsKKworCWRvIHsKKwkJLy8gRm9yIExpbnV4IDIuNC4gSW50ZXJydXB0IHdpbGwgYWx3YXlzIHRyaWdnZXIKKwkJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlIHx8IHBId0RhdGEtPkh3U3RvcCApIC8vIExldCBXYldsYW5IYWx0IHRvIGhhbmRsZSBzdXJwcmlzZSByZW1vdmUKKwkJCWJyZWFrOworCisJCWlmKCBwV2IzNVR4LT50eF9oYWx0ICkKKwkJCWJyZWFrOworCisJCS8vVGhlIFVyYiBpcyBjb21wbGV0ZWQsIGNoZWNrIHRoZSByZXN1bHQKKwkJaWYgKHBXYjM1VHgtPkVQMlZNX3N0YXR1cyAhPSAwKSB7CisJCQlXQkRFQlVHKCgiRVAyIElvQ29tcGxldGVSb3V0aW5lIHJldHVybiBlcnJvclxuIikpOworCQkJcFdiMzVUeC0+RVAydm1fc3RhdGU9IFZNX1NUT1A7CisJCQlicmVhazsgLy8gRXhpdCB3aGlsZShGQUxTRSk7CisJCX0KKworCQkvLyBVcGRhdGUgdGhlIFR4IHJlc3VsdAorCQlJbnRlcnJ1cHRJbkxlbmd0aCA9IHBVcmItPmFjdHVhbF9sZW5ndGg7CisJCS8vIE1vZGlmeSBmb3IgbWluaW11bSBtZW1vcnkgYWNjZXNzIGFuZCBEV09SRCBhbGlnbm1lbnQuCisJCVQwMi52YWx1ZSA9IGNwdV90b19sZTMyKHBsdG1wWzBdKSA+PiA4OyAvLyBbMzE6OF0gLT4gWzI0OjBdCisJCUludGVycnVwdEluTGVuZ3RoIC09IDE7Ly8gMjAwNTEyMjEuMS5jIE1vZGlmeSB0aGUgZm9sbG93IGZvciBtb3JlIHN0YWJsZQorCQlJbnRlcnJ1cHRJbkxlbmd0aCA+Pj0gMjsgLy8gSW50ZXJydXB0SW5MZW5ndGgvNAorCQlmb3IgKGk9MTsgaTw9SW50ZXJydXB0SW5MZW5ndGg7IGkrKykgeworCQkJVDAyLnZhbHVlIHw9ICgoY3B1X3RvX2xlMzIocGx0bXBbaV0pICYgMHhmZikgPDwgMjQpOworCisJCQlUU1RBVFVTLnZhbHVlID0gVDAyLnZhbHVlOyAgLy8yMDA2MTAwOSBhbnNvbidzIGVuZGlhbgorCQkJTWRzX1NlbmRDb21wbGV0ZSggQWRhcHRlciwgJlRTVEFUVVMgKTsKKwkJCVQwMi52YWx1ZSA9IGNwdV90b19sZTMyKHBsdG1wW2ldKSA+PiA4OworCQl9CisKKwkJcmV0dXJuOworCX0gd2hpbGUoRkFMU0UpOworCisJT1NfQVRPTUlDX0RFQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1VHgtPlR4UmVzdWx0Q291bnQgKTsKKwlwV2IzNVR4LT5FUDJ2bV9zdGF0ZSA9IFZNX1NUT1A7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1dHhfZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MDVhODQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1dHhfZi5oCkBAIC0wLDAgKzEsMjAgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBJbnRlcmZhY2UgZnVuY3Rpb24gZGVjbGFyZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3Vuc2lnbmVkIGNoYXIgV2IzNVR4X2luaXRpYWwoCSBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVR4X2Rlc3Ryb3koICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVR4X2dldF90eF9idWZmZXIoICBwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgKnBCdWZmZXIgKTsKKwordm9pZCBXYjM1VHhfRVAyVk0oICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVR4X0VQMlZNX3N0YXJ0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIFdiMzVUeF9FUDJWTV9jb21wbGV0ZSggIFBVUkIgcHVyYiApOworCit2b2lkIFdiMzVUeF9zdGFydCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1VHhfc3RvcCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1VHgoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVR4X2NvbXBsZXRlKCAgUFVSQiBwdXJiICk7Cit2b2lkIFdiMzVUeF9yZXNldF9kZXNjcmlwdG9yKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisKK3ZvaWQgV2IzNVR4X0N1cnJlbnRUaW1lKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIFRpbWVDb3VudCApOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1dHhfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNDMyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1dHhfcy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBJUzg5QzM1IFR4IHJlbGF0ZWQgZGVmaW5pdGlvbgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgVFhfSU5URVJGQUNFCQkJMAkvLyBJbnRlcmZhY2UgMQorI2RlZmluZSBUWF9QSVBFCQkJCQkzCS8vIGVuZHBvaW50IDQKKyNkZWZpbmUgVFhfSU5URVJSVVBUCQkJMQkvLyBlbmRwb2ludCAyCisjZGVmaW5lIE1BWF9JTlRFUlJVUFRfTEVOR1RICTY0CS8vIEl0IG11c3QgYmUgNjQgZm9yIEVQMiBoYXJkd2FyZQorCisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEludGVybmFsIHZhcmlhYmxlIGZvciBtb2R1bGUKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwordHlwZWRlZiBzdHJ1Y3QgX1dCMzVUWAoreworCS8vIEZvciBUeCBidWZmZXIKKwl1OAlUeEJ1ZmZlclsgTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSIF1bIE1BWF9VU0JfVFhfQlVGRkVSIF07CisKKwkvLyBGb3IgSW50ZXJydXB0IHBpcGUKKwl1OAlFUDJfYnVmW01BWF9JTlRFUlJVUFRfTEVOR1RIXTsKKworCU9TX0FUT01JQwlUeFJlc3VsdENvdW50Oy8vIEZvciB0aHJlYWQgY29udHJvbCBvZiBFUDIgOTMxMTMwLjQubQorCU9TX0FUT01JQwlUeEZpcmVDb3VudGVyOy8vIEZvciB0aHJlYWQgY29udHJvbCBvZiBFUDQgOTMxMTMwLjQubgorCXUzMgkJCUJ5dGVUcmFuc2ZlcjsKKworCXUzMgkgICAgVHhTZW5kSW5kZXg7Ly8gVGhlIG5leHQgaW5kZXggb2YgTWRzIGFycmF5IHRvIGJlIHNlbnQKKwl1MzIJICAgIEVQMnZtX3N0YXRlOyAvLyBmb3IgRVAydm0gc3RhdGUKKwl1MzIJICAgIEVQNHZtX3N0YXRlOyAvLyBmb3IgRVA0dm0gc3RhdGUKKwl1MzIJICAgIHR4X2hhbHQ7IC8vIFN0b3BwaW5nIFZNCisKKwlzdHJ1Y3QgdXJiICoJCQkJVHg0VXJiOworCXN0cnVjdCB1cmIgKgkJCQlUeDJVcmI7CisKKwlpbnQJCUVQMlZNX3N0YXR1czsKKwlpbnQJCUVQNFZNX3N0YXR1czsKKworCXUzMglUeEZpbGxDb3VudDsgLy8gMjAwNjA5MjgKKwl1MzIJVHhUaW1lcjsgLy8gMjAwNjA5MjggQWRkIGlmIHNlbmRpbmcgcGFja2V0IG5vdCBncmVhdCB0aGFuIDEzCisKK30gV0IzNVRYLCAqUFdCMzVUWDsKKworCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YnVzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmFkNWZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2IuYwpAQCAtMCwwICsxLDQwNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KKyAqCisgKiBEaXN0cmlidXRlIHVuZGVyIEdQTHYyLgorICovCisjaW5jbHVkZSAic3lzZGVmLmgiCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oIjAuMSIpOworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyB2ZW5kb3IgSUQgYW5kIHByb2R1Y3QgSUQgY2FuIGludG8gaGVyZSBmb3Igb3RoZXJzCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIElkX1RhYmxlW10gPQoreworICB7VVNCX0RFVklDRSggMHgwNDE2LCAweDAwMzUgKX0sCisgIHtVU0JfREVWSUNFKCAweDE4RTgsIDB4NjIwMSApfSwKKyAge1VTQl9ERVZJQ0UoIDB4MThFOCwgMHg2MjA2ICl9LAorICB7VVNCX0RFVklDRSggMHgxOEU4LCAweDYyMTcgKX0sCisgIHtVU0JfREVWSUNFKCAweDE4RTgsIDB4NjIzMCApfSwKKyAge1VTQl9ERVZJQ0UoIDB4MThFOCwgMHg2MjMzICl9LAorICB7VVNCX0RFVklDRSggMHgxMTMxLCAweDIwMzUgKX0sCisgIHsgIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBJZF9UYWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB3YjM1X2RyaXZlciA9IHsKKwkubmFtZSA9CQkidzM1dW5kIiwKKwkucHJvYmUgPQl3YjM1X3Byb2JlLAorCS5kaXNjb25uZWN0ID0gd2IzNV9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IElkX1RhYmxlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSB3YnNvZnRfcmF0ZXNbXSA9IHsKKwl7IC5iaXRyYXRlID0gMTAsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHdic29mdF9jaGFubmVsc1tdID0geworCXsgLmNlbnRlcl9mcmVxID0gMjQxMn0sCit9OworCitpbnQgd2Jzb2Z0X2VuYWJsZWQ7CitzdHJ1Y3QgaWVlZTgwMjExX2h3ICpteV9kZXY7CitQQURBUFRFUiBteV9hZGFwdGVyOworCitzdGF0aWMgaW50IHdic29mdF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJcHJpbnRrKCJ3YnNvZnRfYWRkIGludGVyZmFjZSBjYWxsZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3YnNvZnRfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlwcmludGsoIndic29mdF9yZW1vdmUgaW50ZXJmYWNlIGNhbGxlZFxuIik7Cit9CisKK3N0YXRpYyBpbnQgd2Jzb2Z0X25vcCh2b2lkKQoreworCXByaW50aygid2Jzb2Z0X25vcCBjYWxsZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3YnNvZnRfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQkgICAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCisJCQkJICAgICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQoreworCXVuc2lnbmVkIGludCBiaXRfbnIsIG5ld19mbGFnczsKKwl1MzIgbWNfZmlsdGVyWzJdOworCWludCBpOworCisJbmV3X2ZsYWdzID0gMDsKKworCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpIHsKKwkJbmV3X2ZsYWdzIHw9IEZJRl9QUk9NSVNDX0lOX0JTUzsKKwkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gfjA7CisJfSBlbHNlIGlmICgoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB8fCAobWNfY291bnQgPiAzMikpIHsKKwkJbmV3X2ZsYWdzIHw9IEZJRl9BTExNVUxUSTsKKwkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gfjA7CisJfSBlbHNlIHsKKwkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG1jX2NvdW50OyBpKyspIHsKKwkJCWlmICghbWNsaXN0KQorCQkJCWJyZWFrOworCQkJcHJpbnRrKCJTaG91bGQgY2FsbCBldGhlcl9jcmMgaGVyZVxuIik7CisJCQkvL2JpdF9uciA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjY7CisJCQliaXRfbnIgPSAwOworCisJCQliaXRfbnIgJj0gMHgzRjsKKwkJCW1jX2ZpbHRlcltiaXRfbnIgPj4gNV0gfD0gMSA8PCAoYml0X25yICYgMzEpOworCQkJbWNsaXN0ID0gbWNsaXN0LT5uZXh0OworCQl9CisJfQorCisJZGV2LT5mbGFncyAmPSB+SUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUzsKKworCSp0b3RhbF9mbGFncyA9IG5ld19mbGFnczsKK30KKworc3RhdGljIGludCB3YnNvZnRfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wpCit7CisJY2hhciAqYnVmZmVyID0ga21hbGxvYyhza2ItPmxlbiwgR0ZQX0FUT01JQyk7CisJcHJpbnRrKCJTZW5kaW5nIGZyYW1lICVkIGJ5dGVzXG4iLCBza2ItPmxlbik7CisJbWVtY3B5KGJ1ZmZlciwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJaWYgKDEgPT0gTUxNRVNlbmRGcmFtZShteV9hZGFwdGVyLCBidWZmZXIsIHNrYi0+bGVuLCBGUkFNRV9UWVBFXzgwMl8xMV9NQU5BR0VNRU5UKSkKKwkJcHJpbnRrKCJmcmFtZSBzZW50IG9rICglZCBieXRlcyk/XG4iLCBza2ItPmxlbik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworCitzdGF0aWMgaW50IHdic29mdF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJd2Jzb2Z0X2VuYWJsZWQgPSAxOworCXByaW50aygid2Jzb2Z0X3N0YXJ0IGNhbGxlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2Jzb2Z0X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlDaGFuSW5mbyBjaDsKKwlwcmludGsoIndic29mdF9jb25maWcgY2FsbGVkXG4iKTsKKworCWNoLmJhbmQgPSAxOworCWNoLkNoYW5ObyA9IDE7CS8qIFNob3VsZCB1c2UgY2hhbm5lbF9udW0sIG9yIHNvbWV0aGluZywgYXMgdGhhdCBpcyBhbHJlYWR5IHByZS10cmFuc2xhdGVkICovCisKKworCWhhbF9zZXRfY3VycmVudF9jaGFubmVsKCZteV9hZGFwdGVyLT5zSHdEYXRhLCBjaCk7CisJaGFsX3NldF9iZWFjb25fcGVyaW9kKCZteV9hZGFwdGVyLT5zSHdEYXRhLCBjb25mLT5iZWFjb25faW50KTsKKy8vCWhhbF9zZXRfY2FwX2luZm8oJm15X2FkYXB0ZXItPnNId0RhdGEsID8/ICk7CisvLyBoYWxfc2V0X3NzaWQocGh3X2RhdGFfdCBwSHdEYXRhLCAgUFVDSEFSIHBzc2lkLCAgdTggc3NpZF9sZW4pOyA/PworCWhhbF9zZXRfYWNjZXB0X2Jyb2FkY2FzdCgmbXlfYWRhcHRlci0+c0h3RGF0YSwgMSk7CisJaGFsX3NldF9hY2NlcHRfcHJvbWlzY3VvdXMoJm15X2FkYXB0ZXItPnNId0RhdGEsICAxKTsKKwloYWxfc2V0X2FjY2VwdF9tdWx0aWNhc3QoJm15X2FkYXB0ZXItPnNId0RhdGEsICAxKTsKKwloYWxfc2V0X2FjY2VwdF9iZWFjb24oJm15X2FkYXB0ZXItPnNId0RhdGEsICAxKTsKKwloYWxfc2V0X3JhZGlvX21vZGUoJm15X2FkYXB0ZXItPnNId0RhdGEsICAwKTsKKwkvL2hhbF9zZXRfYW50ZW5uYV9udW1iZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IG51bWJlciApCisJLy9oYWxfc2V0X3JmX3Bvd2VyKHBod19kYXRhX3QgcEh3RGF0YSwgdTggUG93ZXJJbmRleCkKKworCisvLwloYWxfc3RhcnRfYnNzKCZteV9hZGFwdGVyLT5zSHdEYXRhLCBXTEFOX0JTU1RZUEVfSU5GUkFTVFJVQ1RVUkUpOwk/PworCisvL3ZvaWQgaGFsX3NldF9yYXRlcyhwaHdfZGF0YV90IHBId0RhdGEsIFBVQ0hBUiBwYnNzX3JhdGVzLAorLy8JCSAgIHU4IGxlbmd0aCwgdW5zaWduZWQgY2hhciBiYXNpY19yYXRlX3NldCkKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdic29mdF9jb25maWdfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9jb25mICpjb25mKQoreworCXByaW50aygid2Jzb2Z0X2NvbmZpZ19pbnRlcmZhY2UgY2FsbGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCB3YnNvZnRfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJcHJpbnRrKCJ3YnNvZnRfZ2V0X3RzZiBjYWxsZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgd2Jzb2Z0X29wcyA9IHsKKwkudHgJCQk9IHdic29mdF90eCwKKwkuc3RhcnQJCQk9IHdic29mdF9zdGFydCwJCS8qIFN0YXJ0IGNhbiBiZSBwcmV0dHkgbXVjaCBlbXB0eSBhcyB3ZSBkbyBXYldMYW5Jbml0aWFsaXplKCkgZHVyaW5nIHByb2JlPyAqLworCS5zdG9wCQkJPSB3YnNvZnRfbm9wLAorCS5hZGRfaW50ZXJmYWNlCQk9IHdic29mdF9hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlCT0gd2Jzb2Z0X3JlbW92ZV9pbnRlcmZhY2UsCisJLmNvbmZpZwkJCT0gd2Jzb2Z0X2NvbmZpZywKKwkuY29uZmlnX2ludGVyZmFjZQk9IHdic29mdF9jb25maWdfaW50ZXJmYWNlLAorCS5jb25maWd1cmVfZmlsdGVyCT0gd2Jzb2Z0X2NvbmZpZ3VyZV9maWx0ZXIsCisJLmdldF9zdGF0cwkJPSB3YnNvZnRfbm9wLAorCS5nZXRfdHhfc3RhdHMJCT0gd2Jzb2Z0X25vcCwKKwkuZ2V0X3RzZgkJPSB3YnNvZnRfZ2V0X3RzZiwKKy8vIGNvbmZfdHg6IGhhbF9zZXRfY3dtaW4oKS9oYWxfc2V0X2N3bWF4OworfTsKKworc3RydWN0IHdic29mdF9wcml2IHsKK307CisKKworaW50IF9faW5pdCB3YjM1X2luaXQodm9pZCkKK3sKKwlwcmludGsoIlt3MzV1bmRdZHJpdmVyIGluaXRcbiIpOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJndiMzVfZHJpdmVyKTsKK30KKwordm9pZCBfX2V4aXQgd2IzNV9leGl0KHZvaWQpCit7CisJcHJpbnRrKCJbdzM1dW5kXWRyaXZlciBleGl0XG4iKTsKKwl1c2JfZGVyZWdpc3RlciggJndiMzVfZHJpdmVyICk7Cit9CisKK21vZHVsZV9pbml0KHdiMzVfaW5pdCk7Cittb2R1bGVfZXhpdCh3YjM1X2V4aXQpOworCisvLyBVc2Iga2VybmVsIHN1YnN5c3RlbSB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIGEgbmV3IGRldmljZSBpcyBwbHVnZ2VkIGludG8uCitpbnQgd2IzNV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlKQoreworCVBBREFQVEVSCUFkYXB0ZXI7CisJUFdCTElOVVgJcFdiTGludXg7CisJUFdCVVNCCQlwV2JVc2I7CisgICAgICAgIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCWludAlpLCByZXQgPSAtMTsKKwl1MzIJbHRtcDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisKKwl1c2JfZ2V0X2Rldih1ZGV2KTsKKworCXByaW50aygiW3czNXVuZF13YjM1X3Byb2JlIC0+XG4iKTsKKworCWRvIHsKKwkJZm9yIChpPTA7IGk8KHNpemVvZihJZF9UYWJsZSkvc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2lkKSk7IGkrKyApIHsKKwkJCWlmICgodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciA9PSBJZF9UYWJsZVtpXS5pZFZlbmRvcikgJiYKKwkJCQkodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0gSWRfVGFibGVbaV0uaWRQcm9kdWN0KSkgeworCQkJCXByaW50aygiW3czNXVuZF1Gb3VuZCBzdXBwb3J0ZWQgaGFyZHdhcmVcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICgoaSA9PSAoc2l6ZW9mKElkX1RhYmxlKS9zaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfaWQpKSkpIHsKKwkJCSNpZmRlZiBfUEVfVVNCX0lOSV9EVU1QXworCQkJV0JERUJVRygoIlt3MzV1bmRdIFRoaXMgaXMgbm90IHRoZSBvbmUgd2UgYXJlIGludGVyZXN0ZWQgYWJvdXRcbiIpKTsKKwkJCSNlbmRpZgorCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvLyAyMDA2MDYzMC4yIENoZWNrIHRoZSBkZXZpY2UgaWYgaXQgYWxyZWFkeSBiZSBvcGVuZWQKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSggdWRldiwgMCApLAorCQkJCSAgICAgIDB4MDEsIFVTQl9UWVBFX1ZFTkRPUnxVU0JfUkVDSVBfREVWSUNFfFVTQl9ESVJfSU4sCisJCQkJICAgICAgMHgwLCAweDQwMCwgJmx0bXAsIDQsIEhaKjEwMCApOworCQlpZiggcmV0IDwgMCApCisJCQlicmVhazsKKworCQlsdG1wID0gY3B1X3RvX2xlMzIobHRtcCk7CisJCWlmIChsdG1wKSAgLy8gSXMgYWxyZWFkeSBpbml0aWFsaXplZD8KKwkJCWJyZWFrOworCisKKwkJQWRhcHRlciA9IGt6YWxsb2Moc2l6ZW9mKEFEQVBURVIpLCBHRlBfS0VSTkVMKTsKKworCQlteV9hZGFwdGVyID0gQWRhcHRlcjsKKwkJcFdiTGludXggPSAmQWRhcHRlci0+V2JMaW51eDsKKwkJcFdiVXNiID0gJkFkYXB0ZXItPnNId0RhdGEuV2JVc2I7CisJCXBXYlVzYi0+dWRldiA9IHVkZXY7CisKKwkgICAgICAgIGludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCSAgICAgICAgZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCisJCWlmIChlbmRwb2ludFsyXS53TWF4UGFja2V0U2l6ZSA9PSA1MTIpIHsKKwkJCXByaW50aygiW3czNXVuZF0gV29ya2luZyBvbiBVU0IgMi4wXG4iKTsKKwkJCXBXYlVzYi0+SXNVc2IyMCA9IDE7CisJCX0KKworCQlpZiAoIVdiV0xhbkluaXRpYWxpemUoQWRhcHRlcikpIHsKKwkJCXByaW50aygiW3czNXVuZF1XYldMYW5Jbml0aWFsaXplIGZhaWxcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQl7CisJCQlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKnByaXY7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXY7CisJCQlpbnQgcmVzOworCisJCQlkZXYgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKCpwcml2KSwgJndic29mdF9vcHMpOworCisJCQlpZiAoIWRldikgeworCQkJCXByaW50aygidzM1dW5kOiBpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iICk7CisJCQkJQlVHKCk7CisJCQl9CisKKwkJCW15X2RldiA9IGRldjsKKworCQkJU0VUX0lFRUU4MDIxMV9ERVYoZGV2LCAmdWRldi0+ZGV2KTsKKwkJCXsKKwkJCQlwaHdfZGF0YV90IHBId0RhdGEgPSAmQWRhcHRlci0+c0h3RGF0YTsKKwkJCQl1bnNpZ25lZCBjaGFyCQlkZXZfYWRkcltNQVhfQUREUl9MRU5dOworCQkJCWhhbF9nZXRfcGVybWFuZW50X2FkZHJlc3MocEh3RGF0YSwgZGV2X2FkZHIpOworCQkJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGRldiwgZGV2X2FkZHIpOworCQkJfQorCisKKwkJCWRldi0+ZXh0cmFfdHhfaGVhZHJvb20gPSAxMjsJLyogRklYTUUgKi8KKwkJCWRldi0+ZmxhZ3MgPSAwOworCisJCQlkZXYtPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwOworLy8JCQlkZXYtPm1heF9yc3NpID0gMTAwOworCisJCQlkZXYtPnF1ZXVlcyA9IDE7CisKKwkJCXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7CisKKwkJCWJhbmQuY2hhbm5lbHMgPSB3YnNvZnRfY2hhbm5lbHM7CisJCQliYW5kLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHdic29mdF9jaGFubmVscyk7CisJCQliYW5kLmJpdHJhdGVzID0gd2Jzb2Z0X3JhdGVzOworCQkJYmFuZC5uX2JpdHJhdGVzID0gQVJSQVlfU0laRSh3YnNvZnRfcmF0ZXMpOworCisJCQlkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZiYW5kOworI2lmIDAKKwkJCXdic29mdF9tb2Rlc1swXS5udW1fY2hhbm5lbHMgPSAxOworCQkJd2Jzb2Z0X21vZGVzWzBdLmNoYW5uZWxzID0gd2Jzb2Z0X2NoYW5uZWxzOworCQkJd2Jzb2Z0X21vZGVzWzBdLm1vZGUgPSBNT0RFX0lFRUU4MDIxMUI7CisJCQl3YnNvZnRfbW9kZXNbMF0ubnVtX3JhdGVzID0gQVJSQVlfU0laRSh3YnNvZnRfcmF0ZXMpOworCQkJd2Jzb2Z0X21vZGVzWzBdLnJhdGVzID0gd2Jzb2Z0X3JhdGVzOworCisJCQlyZXMgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHdtb2RlKGRldiwgJndic29mdF9tb2Rlc1swXSk7CisJCQlCVUdfT04ocmVzKTsKKyNlbmRpZgorCisJCQlyZXMgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoZGV2KTsKKwkJCUJVR19PTihyZXMpOworCQl9CisKKwkJdXNiX3NldF9pbnRmZGF0YSggaW50ZiwgQWRhcHRlciApOworCisJCXByaW50aygiW3czNXVuZF0gX3Byb2JlIE9LXG4iKTsKKwkJcmV0dXJuIDA7CisKKwl9IHdoaWxlKEZBTFNFKTsKKworCXJldHVybiAtRU5PTUVNOworfQorCit2b2lkIHBhY2tldF9jYW1lKGNoYXIgKnBSeEJ1ZmZlckFkZHJlc3MsIGludCBQYWNrZXRTaXplKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzID0gezB9OworCisJaWYgKCF3YnNvZnRfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihQYWNrZXRTaXplKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBwYWNrZXQsIEZJWE1FXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW1lbWNweShza2JfcHV0KHNrYiwgUGFja2V0U2l6ZSksCisJICAgICAgIHBSeEJ1ZmZlckFkZHJlc3MsCisJICAgICAgIFBhY2tldFNpemUpOworCisvKgorCXJ4X3N0YXR1cy5yYXRlID0gMTA7CisJcnhfc3RhdHVzLmNoYW5uZWwgPSAxOworCXJ4X3N0YXR1cy5mcmVxID0gMTIzNDU7CisJcnhfc3RhdHVzLnBoeW1vZGUgPSBNT0RFX0lFRUU4MDIxMUI7CisqLworCisJaWVlZTgwMjExX3J4X2lycXNhZmUobXlfZGV2LCBza2IsICZyeF9zdGF0dXMpOworfQorCit1bnNpZ25lZCBjaGFyCitXYlVzYl9pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlyZXR1cm4gMTsKK30KKworCit2b2lkCitXYlVzYl9kZXN0cm95KHBod19kYXRhX3QgcEh3RGF0YSkKK3sKK30KKworaW50IHdiMzVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCVBBREFQVEVSIEFkYXB0ZXIgPSAoUEFEQVBURVIpbmV0ZGV2LT5wcml2OworCXBod19kYXRhX3QgcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCisgICAgICAgIG5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisKKwkvL1RPRE8gOiBwdXQgaGVyZSB0ZW1wb3JhcmlseQorCWhhbF9zZXRfYWNjZXB0X2Jyb2FkY2FzdChwSHdEYXRhLCAxKTsgLy8gb3BlbiBhY2NlcHQgYnJvYWRjYXN0CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdiMzVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2IzNV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCVBXQkxJTlVYIHBXYkxpbnV4OworCVBBREFQVEVSIEFkYXB0ZXIgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisKKyAgICAgICAgcFdiTGludXggPSAmQWRhcHRlci0+V2JMaW51eDsKKworCS8vIENhcmQgcmVtb3ZlCisJV2JXbGFuSGFsdChBZGFwdGVyKTsKKworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3didXNiX2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3didXNiX2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWUyOWUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2JfZi5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworLy8gQ29weXJpZ2h0IChjKSAxOTk2LTIwMDQgV2luYm9uZCBFbGVjdHJvbmljIENvcnBvcmF0aW9uCisvLworLy8gIE1vZHVsZSBOYW1lOgorLy8gICAgd2J1c2JfZi5oCisvLworLy8gIEFic3RyYWN0OgorLy8gICAgTGludXggZHJpdmVyLgorLy8KKy8vICBBdXRob3I6CisvLworLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworCitpbnQgd2IzNV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworaW50IHdiMzVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Cit1bnNpZ25lZCBjaGFyIFdiVXNiX2luaXRpYWwocGh3X2RhdGFfdCBwSHdEYXRhKTsKK3ZvaWQgV2JVc2JfZGVzdHJveShwaHdfZGF0YV90IHBId0RhdGEpOwordW5zaWduZWQgY2hhciBXYldMYW5Jbml0aWFsaXplKFBBREFQVEVSIEFkYXB0ZXIpOworI2RlZmluZQlXYlVzYl9TdG9wKCBfQSApCisKK2ludCB3YjM1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZF90YWJsZSk7Cit2b2lkIHdiMzVfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKKworI2RlZmluZSB3Yl91c2Jfc3VibWl0X3VyYihfQSkgdXNiX3N1Ym1pdF91cmIoX0EsIEdGUF9BVE9NSUMpCisjZGVmaW5lIHdiX3VzYl9hbGxvY191cmIoX0EpIHVzYl9hbGxvY191cmIoX0EsIEdGUF9BVE9NSUMpCisKKyNkZWZpbmUgV2JVc2JfQ2hlY2tGb3JIYW5nKCBfUCApCisjZGVmaW5lIFdiVXNiX0RldGVjdFN0YXJ0KCBfUCwgX0kgKQorCisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3didXNiX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3didXNiX3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWMxZDUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2Jfcy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworLy8gQ29weXJpZ2h0IChjKSAxOTk2LTIwMDQgV2luYm9uZCBFbGVjdHJvbmljIENvcnBvcmF0aW9uCisvLworLy8gIE1vZHVsZSBOYW1lOgorLy8gICAgd2J1c2Jfcy5oCisvLworLy8gIEFic3RyYWN0OgorLy8gICAgTGludXggZHJpdmVyLgorLy8KKy8vICBBdXRob3I6CisvLworLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworCisjZGVmaW5lIE9TX1NMRUVQKCBfTVQgKQl7IHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7IFwKKwkJCSAgc2NoZWR1bGVfdGltZW91dCggX01UKkhaLzEwMDAwMDAgKTsgfQorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgUldfQ09OVEVYVCAtLQorLy8KKy8vICBVc2VkIHRvIHRyYWNrIGRyaXZlci1nZW5lcmF0ZWQgaW8gaXJwcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgc3RydWN0IF9SV19DT05URVhUCit7CisJdm9pZCoJCQlwSHdEYXRhOworCVBVUkIJCQlwVXJiOworCXZvaWQqCQkJcENhbGxCYWNrRnVuY3Rpb25QYXJhbWV0ZXI7Cit9IFJXX0NPTlRFWFQsICpQUldfQ09OVEVYVDsKKworCisKKworI2RlZmluZSBEUklWRVJfQVVUSE9SICJPcmlnaW5hbCBieTogSmVmZiBMZWU8WVlfTGVlQGlzc2MuY29tLnR3PiBBZGFwdGVkIHRvIDIuNi54IGJ5IENvc3RhbnRpbm8gTGVhbmRybyAoUnhhcnQgRGVza3RvcCkgPGxlX2Nvc3RhbnRpbm9AcGl4YXJ0YXJnZW50aW5hLmNvbS5hcj4iCisjZGVmaW5lIERSSVZFUl9ERVNDICAgIklTODlDMzUgODAyLjExYmcgV0xBTiBVU0IgRHJpdmVyIgorCisKKwordHlwZWRlZiBzdHJ1Y3QgX1dCVVNCIHsKKwl1MzIJSXNVc2IyMDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwl1MzIJRGV0ZWN0Q291bnQ7Cit9IFdCVVNCLCAqUFdCVVNCOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbG9jYWxwYXJhLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9sb2NhbHBhcmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjhjZjkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbG9jYWxwYXJhLmgKQEAgLTAsMCArMSwyNzUgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gTG9jYWxQYXJhLmggLQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvL0RlZmluZSB0aGUgbG9jYWwgYWJpbGl0eQorCisjZGVmaW5lIExPQ0FMX0RFRkFVTFRfQkVBQ09OX1BFUklPRAkJCTEwMAkJLy9tcworI2RlZmluZSBMT0NBTF9ERUZBVUxUX0FUSU1fV0lORE9XCQkJMAorI2RlZmluZSBMT0NBTF9ERUZBVUxUX0VSUF9DQVBBQklMSVRZCQkweDA0MzEJLy8weDAwMDE6CUVTUworCQkJCQkJCQkJCQkJCS8vMHgwMDEwOglQcml2YWN5CisJCQkJCQkJCQkJCQkJLy8weDAwMjA6CXNob3J0IHByZWFtYmxlCisJCQkJCQkJCQkJCQkJLy8weDA0MDA6CXNob3J0IHNsb3QgdGltZQorI2RlZmluZSBMT0NBTF9ERUZBVUxUX0xJU1RFTl9JTlRFUlZBTAkJNQorCisvLyNkZWZpbmUgTE9DQUxfREVGQVVMVF8yNF9DSEFOTkVMX05VTQkJMTEJCS8vIGNoYW5uZWwgMS4uMTEKKyNkZWZpbmUgTE9DQUxfREVGQVVMVF8yNF9DSEFOTkVMX05VTQkJMTMJCS8vIGNoYW5uZWwgMS4uMTMKKyNkZWZpbmUgTE9DQUxfREVGQVVMVF81X0NIQU5ORUxfTlVNCQkJOAkJLy8gY2hhbm5lbCAzNi4uNjQKKworI2RlZmluZSBMT0NBTF9VU0FfMjRfQ0hBTk5FTF9OVU0JCQkxMQorI2RlZmluZSBMT0NBTF9VU0FfNV9DSEFOTkVMX05VTQkJCQkxMgorI2RlZmluZSBMT0NBTF9FVVJPUEVfMjRfQ0hBTk5FTF9OVU0JCQkxMworI2RlZmluZSBMT0NBTF9FVVJPUEVfNV9DSEFOTkVMX05VTQkJCTE5CisjZGVmaW5lIExPQ0FMX0pBUEFOXzI0X0NIQU5ORUxfTlVNCQkJMTQKKyNkZWZpbmUgTE9DQUxfSkFQQU5fNV9DSEFOTkVMX05VTQkJCTExCisjZGVmaW5lIExPQ0FMX1VOS05PV05fMjRfQ0hBTk5FTF9OVU0JCTE0CisjZGVmaW5lIExPQ0FMX1VOS05PV05fNV9DSEFOTkVMX05VTQkJCTM0CS8vbm90IGluY2x1ZGUgMTY1CisKKworI2RlZmluZSBwc0xPQ0FMCQkJKCYoQWRhcHRlci0+c0xvY2FsUGFyYSkpCisKKyNkZWZpbmUgTU9ERV84MDJfMTFfQkcJCQkwCisjZGVmaW5lIE1PREVfODAyXzExX0EJCQkxCisjZGVmaW5lIE1PREVfODAyXzExX0FCRwkJCTIKKyNkZWZpbmUgTU9ERV84MDJfMTFfQkdfSUJTUwkJMworI2RlZmluZSBNT0RFXzgwMl8xMV9CCQkJNAorI2RlZmluZSBNT0RFX0FVVE8JCQkJMjU1CisKKyNkZWZpbmUgQkFORF9UWVBFX0RTU1MJCQkwCisjZGVmaW5lIEJBTkRfVFlQRV9PRkRNXzI0CQkxCisjZGVmaW5lIEJBTkRfVFlQRV9PRkRNXzUJCTIKKworLy9yZWZlciBCaXRtYXAyUmF0ZVZhbHVlIHRhYmxlCisjZGVmaW5lIExPQ0FMX0FMTF9TVVBQT1JURURfUkFURVNfQklUTUFQCQkweDEzMGMxYTY2CS8vdGhlIGJpdG1hcCB2YWx1ZSBvZiBhbGwgdGhlIEgvVyBzdXBwb3J0ZWQgcmF0ZXMKKwkJCQkJCQkJCQkJCQkJCS8vMSwgMiwgNS41LCAxMSwgNiwgOSwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA1NAorI2RlZmluZSBMT0NBTF9PRkRNX1NVUFBPUlRFRF9SQVRFU19CSVRNQVAJCTB4MTMwYzEyNDAJLy90aGUgYml0bWFwIHZhbHVlIG9mIGFsbCB0aGUgSC9XIHN1cHBvcnRlZCByYXRlcworCQkJCQkJCQkJCQkJCQkJLy9leGNlcHQgdG8gbm9uLU9GRE0gcmF0ZXMKKwkJCQkJCQkJCQkJCQkJCS8vNiwgOSwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA1NAorCisjZGVmaW5lIExPQ0FMXzExQl9TVVBQT1JURURfUkFURV9CSVRNQVAJCQkweDgyNgorI2RlZmluZSBMT0NBTF8xMUJfQkFTSUNfUkFURV9CSVRNQVAJCQkJMHg4MjYKKyNkZWZpbmUgTE9DQUxfMTFCX09QRVJBVElPTl9SQVRFX0JJVE1BUAkJCTB4ODI2CisjZGVmaW5lIExPQ0FMXzExR19CQVNJQ19SQVRFX0JJVE1BUAkJCQkweDgyNgkJLy8xLCAyLCA1LjUsIDExCisjZGVmaW5lIExPQ0FMXzExR19PUEVSQVRJT05fUkFURV9CSVRNQVAJCQkweDEzMGMxMjQwCS8vNiwgOSwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA1NAorI2RlZmluZSBMT0NBTF8xMUFfQkFTSUNfUkFURV9CSVRNQVAJCQkJMHgwMTAwMTA0MAkvLzYsIDEyLCAyNAorI2RlZmluZSBMT0NBTF8xMUFfT1BFUkFUSU9OX1JBVEVfQklUTUFQCQkJMHgxMjBjMDIwMAkvLzksIDE4LCAzNiwgNDgsIDU0CisKKworCisjZGVmaW5lIFBXUl9BQ1RJVkUJCTAKKyNkZWZpbmUgUFdSX1NBVkUJCTEKKyNkZWZpbmUgUFdSX1RYX0lETEVfQ1lDTEUJCQk2CisKKy8vYlByZWFtYmxlTW9kZSBhbmQgYlNsb3RUaW1lTW9kZQorI2RlZmluZSBBVVRPX01PREUJCQkwCisjZGVmaW5lIExPTkdfTU9ERQkJCTEKKworLy9SZWdpb24gZGVmaW5pdGlvbgorI2RlZmluZSBSRUdJT05fQVVUTwkJCTB4ZmYKKyNkZWZpbmUgUkVHSU9OX1VOS05PV04JCTAKKyNkZWZpbmUgUkVHSU9OX0VVUk9QRQkJMQkvL0VUU0kKKyNkZWZpbmUgUkVHSU9OX0pBUEFOCQkyCS8vTUtLCisjZGVmaW5lIFJFR0lPTl9VU0EJCQkzCS8vRkNDCisjZGVmaW5lCVJFR0lPTl9GUkFOQ0UJCTQJLy9GUkFOQ0UKKyNkZWZpbmUgUkVHSU9OX1NQQUlOCQk1CS8vU1BBSU4KKyNkZWZpbmUgUkVHSU9OX0lTUkFFTAkJNgkvL0lTUkFFTAorLy8jZGVmaW5lIFJFR0lPTl9DQU5BREEJCTcJLy9JQworCisjZGVmaW5lIE1BWF9CU1NfREVTQ1JJUFRfRUxFTUVOVAkJMzIKKyNkZWZpbmUgTUFYX1BNS0lEX0NhbmRpZGF0ZUxpc3QgICAgICAgICAxNgorCisvL0hpZ2ggYnl0ZSA6IEV2ZW50IG51bWJlciwgIGxvdyBieXRlIDogcmVhc29uCisvL0V2ZW50IGRlZmluaXRpb24KKy8vLS0gU01FL01MTUUgZXZlbnQKKyNkZWZpbmUgRVZFTlRfUkNWX0RFQVVUSAkJCQkJMHgwMTAwCisjZGVmaW5lIEVWRU5UX0pPSU5fRkFJTAkJCQkJCTB4MDIwMAorI2RlZmluZSBFVkVOVF9BVVRIX0ZBSUwJCQkJCQkweDAzMDAKKyNkZWZpbmUgRVZFTlRfQVNTT0NfRkFJTAkJCQkJMHgwNDAwCisjZGVmaW5lIEVWRU5UX0xPU1RfU0lHTkFMCQkJCQkweDA1MDAKKyNkZWZpbmUgRVZFTlRfQlNTX0RFU0NSSVBUX0xBQ0sJCQkJMHgwNjAwCisjZGVmaW5lIEVWRU5UX0NPVU5URVJNRUFTVVJFCQkJCTB4MDcwMAorI2RlZmluZSBFVkVOVF9KT0lOX0ZJTFRFUgkJCQkJMHgwODAwCisvLy0tIFRYL1JYIGV2ZW50CisjZGVmaW5lIEVWRU5UX1JYX0JVRkZfVU5BVkFJTEFCTEUJCQkweDQxMDAKKworI2RlZmluZSBFVkVOVF9DT05ORUNUCQkJCQkJMHg4MTAwCisjZGVmaW5lIEVWRU5UX0RJU0NPTk5FQ1QJCQkJCTB4ODIwMAorI2RlZmluZSBFVkVOVF9TQ0FOX1JFUQkJCQkJCTB4ODMwMAorCisvL1JlYXNvbiBvZiBFdmVudAorI2RlZmluZSBFVkVOVF9SRUFTT05fRklMVEVSX0JBU0lDX1JBVEUJCTB4MDAwMQorI2RlZmluZSBFVkVOVF9SRUFTT05fRklMVEVSX1BSSVZBQ1kJCQkweDAwMDIKKyNkZWZpbmUgRVZFTlRfUkVBU09OX0ZJTFRFUl9BVVRIX01PREUJCTB4MDAwMworI2RlZmluZSBFVkVOVF9SRUFTT05fVElNRU9VVAkJCQkweDAwZmYKKworLy8gMjAwNjExMDggV1BTIElFIGJ1ZmZlcgorI2RlZmluZSBNQVhfSUVfQVBQRU5EX1NJWkUJCQkJCTI1NiArIDQgLy8gRHVlIHRvIFtFIGlkXVtMZW5ndGhdW09VSV1bRGF0YV0gbWF5IDI1NyBieXRlcworCit0eXBlZGVmIHN0cnVjdCBfRVZFTlRMT0cKK3sKKwl1MTYJCUNvdW50OwkJCS8vVG90YWwgY291bnQgZnJvbSBzdGFydAorCXUxNgkJaW5kZXg7CQkJLy9CdWZmZXIgaW5kZXgsIDAgfiA2MworCXUzMgkJRXZlbnRWYWx1ZVs2NF07CS8vQllURSAzfjIgOiBjb3VudCwgQllURSAxIDogRXZlbnQsIEJZVEUgMCA6IHJlYXNvbgorfSBFdmVudF9Mb2csICpwRXZlbnRfTG9nOworCit0eXBlZGVmIHN0cnVjdCBfQ2hhbkluZm8KK3sKKwl1OAkJYmFuZDsKKwl1OAkJQ2hhbk5vOworfSBDaGFuSW5mbywgKnBDaGFuSW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgX0NIQU5fTElTVAoreworCXUxNgkJCQlDb3VudDsKKwlDaGFuSW5mbwkJQ2hhbm5lbFs1MF07IC8vIDEwMEIKK30gQ0hBTl9MSVNULCAqcHNDSEFOX0xJU1Q7CisKK3R5cGVkZWYgc3RydWN0IF9SYWRpb09mZgoreworCXU4CQkJYm9Id1JhZGlvT2ZmOworCXU4CQkJYm9Td1JhZGlvT2ZmOworfSBSYWRpb09mZiwgKnBzUmFkaW9PZmY7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit0eXBlZGVmIHN0cnVjdCBMT0NBTF9QQVJBCit7CisJdTgJCQlQZXJtYW5lbnRBZGRyZXNzWyBNQUNfQUREUl9MRU5HVEggKyAyIF07IAkvLyByZWFkIGZyb20gRVBST00sIG1hbnVmYWN0dXJlIHNldCBmb3IgZWFjaCBOZXRDYXJkCisgICAgdTggICAgCQlUaGlzTWFjQWRkcmVzc1sgTUFDX0FERFJfTEVOR1RIICsgMiBdOwkJCS8vIHRoZSBkcml2ZXIgd2lsbCB1c2UgYWN0dWFsbHkuCisKKwl1MzIJCQlNVFVzaXplOwkJCQkvLyBJbmQgdG8gVXBsYXllciwgTWF4IHRyYW5zbWlzc2lvbiB1bml0IHNpemUKKworCXU4CQkJcmVnaW9uX0lORjsJLy9yZWdpb24gc2V0dGluZyBmcm9tIElORgorCXU4CQkJcmVnaW9uOwkJLy9yZWFsIHJlZ2lvbiBzZXR0aW5nIG9mIHRoZSBkZXZpY2UKKwl1OAkJCVJlc2VydmVkXzFbMl07CisKKyAgICAvLy8vIHBvd2VyLXNhdmUgdmFyaWFibGVzCisgICAgdTggIAkJICAJaVBvd2VyU2F2ZU1vZGU7ICAgICAvLyAwIGluZGljYXRlcyBpdCBpcyBvbiwgMSBpbmRpY2F0ZXMgaXQgaXMgb2ZmCisJdTgJCQlTaHV0RG93bmVkOworCXU4CQkJQVRJTW1vZGU7CisJdTgJCQlFeGNsdWRlVW5lbmNyeXB0ZWQ7CisKKwl1MTYJCQlDaGVja0NvdW50Rm9yUFM7CS8vVW5pdCBpbWUgY291bnQgZm9yIHRoZSBkZWNpc2lvbiB0byBlbnRlciBQUyBtb2RlCisJdTgJCQlib0hhc1R4QWN0aXZpdHk7CS8vdHggYWN0aXZpdHkgaGFzIG9jY3VycmVkCisJdTgJCQlib01hY1BzVmFsaWQ7CQkvL1Bvd2VyIHNhdmUgbW9kZSBvYnRhaW5lZCBmcm9tIEgvVyBpcyB2YWxpZCBvciBub3QKKworCS8vLy8gUmF0ZQorCXU4CQkJVHhSYXRlTW9kZTsJCQkJLy8gSW5pdGlhbCwgaW5wdXQgZnJvbSBSZWdpc3RyeSwgbWF5IGJlIHVwZGF0ZWQgYnkgR1VJCisJCQkJCQkJCQkJCS8vVHggUmF0ZSBNb2RlOiBhdXRvKERUTyBvbiksIG1heCwgMU0sIDJNLCAuLgorCXU4CQkJQ3VycmVudFR4UmF0ZTsJCQkvLyBUaGUgY3VycmVudCBUeCByYXRlCisJdTgJCQlDdXJyZW50VHhSYXRlRm9yTW5nOwkvLyBUaGUgY3VycmVudCBUeCByYXRlIGZvciBtYW5hZ2VtZW50IGZyYW1lcworCQkJCQkJCQkJCS8vIEl0IHdpbGwgYmUgZGVjaWRlZCBiZWZvcmUgY29ubmVjdGlvbiBzdWNjZWVkcy4KKwl1OAkJCUN1cnJlbnRUeEZhbGxiYWNrUmF0ZTsKKworCS8vZm9yIFJhdGUgaGFuZGxlcgorCXU4CQkJQlJhdGVTZXRbMzJdOwkJCS8vYmFzaWMgcmF0ZSBzZXQKKwl1OAkJCVNSYXRlU2V0WzMyXTsJCQkvL3N1cHBvcnQgcmF0ZSBzZXQKKworCXU4CQkJTnVtT2ZCUmF0ZTsKKwl1OAkJCU51bU9mU1JhdGU7CisJdTgJCQlOdW1PZkRzc3NSYXRlSW5TUmF0ZTsJLy9udW1iZXIgb2YgRFNTUyByYXRlcyBpbiBzdXBwb3J0ZWQgcmF0ZSBzZXQKKwl1OAkJCXJlc2VydmVkMTsKKworCXUzMgkJCWR3QmFzaWNSYXRlQml0bWFwOwkJLy9iaXQgbWFwIG9mIGJhc2ljIHJhdGVzCisJdTMyCQkJZHdTdXBwb3J0UmF0ZUJpdG1hcDsJLy9iaXQgbWFwIG9mIGFsbCBzdXBwb3J0IHJhdGVzIGluY2x1ZGluZworCQkJCQkJCQkJCS8vYmFzaWMgYW5kIG9wZXJhdGlvbmFsIHJhdGVzCisKKwkvLy8vRm9yIFNNRS9NTE1FIGhhbmRsZXIKKwl1MTYJCQl3T2xkU1RBaW5kZXg7CQkJLy8gdmFsaWQgd2hlbiBib0hhbmRvdmVyPVRSVUUsIHN0b3JlIG9sZCBjb25uZWN0ZWQgU1RBIGluZGV4CisJdTE2CQkJd0Nvbm5lY3RlZFNUQWluZGV4OwkJLy8gSW5kZXggb2YgcGVlcmx5IGNvbm5lY3RlZCBBUCBvciBJQlNTIGluCisJCQkJCQkJCQkJLy8gdGhlIGRlc2NyaXB0aW9uc2V0LgorICAgIHUxNgkJCUFzc29jaWF0aW9uX0lEOyAgICAgCS8vIFRoZSBBc3NvY2lhdGlvbiBJRCBpbiB0aGUgKFJlKUFzc29jaWF0aW9uCisgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAJLy8gUmVzcG9uc2UgZnJhbWUuCisgICAgdTE2CQkJTGlzdGVuSW50ZXJ2YWw7ICAgICAJLy8gVGhlIGxpc3RlbiBpbnRlcnZhbCB3aGVuIFNNRSBpbnZva2luZyBNTE1FXworICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgCS8vIChSZSlBc3NvY2lhdGVfUmVxdWVzdCgpLgorCisJUmFkaW9PZmYJCVJhZGlvT2ZmU3RhdHVzOworCXU4CQkJUmVzZXJ2ZWQwWzJdOworCisJdTgJCQlib01zUmFkaW9PZmY7CQkJLy8gTmRpcyBkZW1hbmRzIHRvIGJlIHRydWUgd2hlbiBzZXQgRGlzYXNzb2MuIE9JRCBhbmQgYmUgZmFsc2Ugd2hlbiBzZXQgU1NJRCBPSUQuCisJdTgJCQlib0FudGVubmFEaXZlcnNpdHk7CQkvL1RSVUUvT04gb3IgRkFMU0UvT0ZGCisJdTgJCQliQW50ZW5uYU5vOwkJCQkvL3doaWNoIGFudGVubmEKKwl1OAkJCWJDb25uZWN0RmxhZzsJCQkvL3RoZSBjb25uZWN0IHN0YXR1cyBmbGFnIGZvciByb2FtaW5nIHRhc2sKKworCXU4CQkJUm9hbVN0YXR1czsKKwl1OAkJCXJlc2VydmVkN1szXTsKKworCUNoYW5JbmZvCUN1cnJlbnRDaGFuOwkJCS8vQ3VycmVudCBjaGFubmVsIG5vLiBhbmQgY2hhbm5lbCBiYW5kLiBJdCBtYXkgYmUgY2hhbmdlZCBieSBzY2FubmluZy4KKwl1OAkJCWJvSGFuZG92ZXI7CQkJCS8vIFJvYW1pbmcsIEhuYWRvdmVyIHRvIG90aGVyIEFQLgorCXU4CQkJYm9DQ0FidXN5OworCisJdTE2CQkJQ1dNYXg7CQkJCQkvLyBJdCBtYXkgbm90IGJlIHRoZSByZWFsIHZhbHVlIHRoYXQgSC9XIHVzZWQKKwl1OAkJCUNXTWluOwkJCQkJLy8gMjU1OiBzZXQgYWNjb3JkaW5nIHRvIDgwMi4xMSBzcGVjLgorCXU4CQkJcmVzZXJ2ZWQyOworCisJLy8xMUc6CisJdTgJCQliTWFjT3BlcmF0aW9uTW9kZTsJCS8vIG9wZXJhdGlvbiBpbiA4MDIuMTFiIG9yIDgwMi4xMWcKKwl1OAkJCWJTbG90VGltZU1vZGU7CQkJLy9BVVRPLCBzMzIKKwl1OAkJCWJQcmVhbWJsZU1vZGU7CQkJLy9BVVRPLCBzMzIKKwl1OAkJCWJvTm9uRVJQcHJlc2VudDsKKworCXU4CQkJYm9Qcm90ZWN0TWVjaGFuaXNtOwkvLyBIL1cgd2lsbCB0YWtlIHRoZSBuZWNlc3NhcnkgYWN0aW9uIGJhc2VkIG9uIHRoaXMgdmFyaWFibGUKKwl1OAkJCWJvU2hvcnRQcmVhbWJsZTsJLy8gSC9XIHdpbGwgdGFrZSB0aGUgbmVjZXNzYXJ5IGFjdGlvbiBiYXNlZCBvbiB0aGlzIHZhcmlhYmxlCisJdTgJCQlib1Nob3J0U2xvdFRpbWU7CS8vIEgvVyB3aWxsIHRha2UgdGhlIG5lY2Vzc2FyeSBhY3Rpb24gYmFzZWQgb24gdGhpcyB2YXJpYWJsZQorCXU4CQkJcmVzZXJ2ZWRfMzsKKworCXUzMiAgICAgICAJUlNOX0lFX0JpdG1hcDsJCS8vYWRkZWQgYnkgV1MKKwl1MzIgICAgICAJCVJTTl9PVUlfVHlwZTsJCS8vYWRkZWQgYnkgV1MKKworCS8vRm9yIHRoZSBCU1NJRAorCXU4CQkJSHdCc3NpZFtNQUNfQUREUl9MRU5HVEggKyAyXTsKKwl1MzIJCQlId0Jzc2lkVmFsaWQ7CisKKwkvL0ZvciBzY2FuIGxpc3QKKwl1OAkJCUJzc0xpc3RDb3VudDsJCQkJCQkJLy9Ub3RhbCBjb3VudCBvZiB2YWxpZCBkZXNjcmlwdG9yIGluZGV4ZXMKKwl1OAkJCWJvUmVjZWl2ZVVuY29ycmVjdEluZm87CS8vaW1wb3J0YW50IHNldHRpbmdzIGluIGJlYWNvbi9wcm9iZSByZXNwLiBoYXZlIGJlZW4gY2hhbmdlZAorCXU4CQkJTm9PZkpvaW5lckluSWJzczsKKwl1OAkJCXJlc2VydmVkXzQ7CisKKwl1OAkJCUJzc0xpc3RJbmRleFsgKE1BWF9CU1NfREVTQ1JJUFRfRUxFTUVOVCszKSAmIH4weDAzIF07CS8vU3RvcmUgdGhlIHZhbGlkIGRlc2NyaXB0b3IgaW5kZXhlcyBvYnRhaW5lZCBmcm9tIHNjYW5uaW5ncworCXU4CQkJSm9pbmVySW5JYnNzWyAoTUFYX0JTU19ERVNDUklQVF9FTEVNRU5UKzMpICYgfjB4MDMgXTsJLy9zYXZlIHRoZSBCc3NEZXNjcmlwdG9yIGluZGV4IGluIHRoaXMKKwkJCQkJCQkJCQkJCQkJLy9JQlNTLiBUaGUgaW5kZXggMCBpcyBsb2NhbCBkZXNjcmlwdG9yCisJCQkJCQkJCQkJCQkJCS8vKHBzTE9DQUwtPndDb25uZWN0ZWRTVEFpbmRleCkuCisJCQkJCQkJCQkJCQkJCS8vSWYgQ09OTkVDVEVEIDogTm9PZkpvaW5lckluSWJzcyA+PTIKKwkJCQkJCQkJCQkJCQkJLy8JCWVsc2UgICA6IE5vT2ZKb2luZXJJbklic3MgPD0xCisKKwkvLy8vIEdlbmVyYWwgU3RhdGlzdGljcywgY291bnQgYXQgUnhfaGFuZGxlciBvciBUeF9jYWxsYmFjayBpbnRlcnJ1cHQgaGFuZGxlcgorICAgIHU2NCAJR1NfWE1JVF9PSzsJCQkJLy8gR29vZCBGcmFtZXMgVHJhbnNtaXR0ZWQKKyAgICB1NjQgCUdTX1JDVl9PSzsJCQkJLy8gR29vZCBGcmFtZXMgUmVjZWl2ZWQKKwl1MzIJCUdTX1JDVl9FUlJPUjsJCQkvLyBGcmFtZXMgcmVjZWl2ZWQgd2l0aCBjcmMgZXJyb3IKKwl1MzIJCUdTX1hNSVRfRVJST1I7CQkJLy8gQmFkIEZyYW1lcyBUcmFuc21pdHRlZAorCXUzMgkJR1NfUkNWX05PX0JVRkZFUjsJCS8vIFJlY2VpdmUgQnVmZmVyIHVuZGVycnVuCisJdTMyCQlHU19YTUlUX09ORV9DT0xMSVNJT047CS8vIG9uZSBjb2xsaXNpb24KKwl1MzIJCUdTX1hNSVRfTU9SRV9DT0xMSVNJT05TOy8vIG1vcmUgY29sbGlzaW9ucworCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gU3RhdGlzdGljcyAobm8gbWF0dGVyIHdoZXRoZXIgaXQgaGFkIGRvbmUgc3VjY2Vzc2Z1bGx5KSAtd2tjaGVuCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgdTMyCQkgICAJX051bVJ4TVNEVTsKKyAgICB1MzIJICAgCQlfTnVtVHhNU0RVOworICAgIHUzMgkgICAJCV9kb3QxMVdFUEV4Y2x1ZGVkQ291bnQ7CisgICAgdTMyCSAgIAkJX2RvdDExV0VQVW5kZWNyeXB0YWJsZUNvdW50OworICAgIHUzMgkgICAJCV9kb3QxMUZyYW1lRHVwbGljYXRlQ291bnQ7CisKKwlDaGFuSW5mbwlJYnNzQ2hhblNldHRpbmc7CS8vIDJCLiBTdGFydCBJQlNTIENoYW5uZWwgc2V0dGluZyBieSByZWdpc3RyeSBvciBXV1UuCisJdTgJCXJlc2VydmVkXzVbMl07CQkvL0l0IG1heSBub3QgYmUgdXNlZCBhZnRlciBjb25zaWRlcmluZyBSRiB0eXBlLAorCQkJCQkJCQkJLy9yZWdpb24gYW5kIG1vZHVsYXRpb24gdHlwZS4KKworCUNIQU5fTElTVAlzU3VwcG9ydENoYW5MaXN0OwkvLyA4NkIuIEl0IHdpbGwgYmUgb2J0YWluZWQgYWNjb3JkaW5nIHRvIFJGIHR5cGUgYW5kIHJlZ2lvbgorCXU4CQlyZXNlcnZlZF82WzJdOwkJLy90d28gdmFyaWFibGVzIGFyZSBmb3Igd2VwIGtleSBlcnJvciBkZXRlY3Rpb24gYWRkZWQgYnkgd3MgMDIvMDIvMDQKKworICAgIHUzMgkgICAgICBiV2VwS2V5RXJyb3I7CisgICAgdTMyICAgICAgICAgYlRvU2VsZlBhY2tldFJlY2VpdmVkOworICAgIHUzMiAgICAgICAgIFdlcEtleURldGVjdFRpbWVyQ291bnQ7CisKKwlFdmVudF9Mb2cJRXZlbnRMb2c7CisKKwl1MTYJCVNpZ25hbExvc3RUaDsKKwl1MTYJCVNpZ25hbFJvYW1UaDsKKworCS8vIDIwMDYxMTA4IFdQUyBJRSBBcHBlbmQKKwl1OAkJSUVfQXBwZW5kX2RhdGFbTUFYX0lFX0FQUEVORF9TSVpFXTsKKwl1MTYJCUlFX0FwcGVuZF9zaXplOworCXUxNgkJcmVzZXJ2ZWRfNzsKKworfSBXQl9MT0NBTERFU0NSSVBULCAqUFdCX0xPQ0FMREVTQ1JJUFQ7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWFjX3N0cnVjdHVyZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21hY19zdHJ1Y3R1cmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxZDJjYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21hY19zdHJ1Y3R1cmVzLmgKQEAgLTAsMCArMSw2NzAgQEAKKy8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworLy8gTUFDX1N0cnVjdHVyZXMuaAorLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IFNXLU1BQy4KKy8vCisvLyBSZXZpc2lvbiBIaXN0b3kKKy8vPT09PT09PT09PT09PT09PT0KKy8vIDAuMSAgICAgIDIwMDIgICAgICAgIFVOMDAKKy8vIDAuMiAgICAgIDIwMDIxMDA0ICAgIFBENDMgQ0NMaXU2CisvLyAgICAgICAgICAyMDAyMTAxOCAgICBQRDQzIENDTGl1NgorLy8gICAgICAgICAgICAgICAgICAgICAgQWRkIGVudW1fVHhSYXRlIHR5cGUKKy8vICAgICAgICAgICAgICAgICAgICAgIE1vZGlmeSBlbnVtX1NUQVN0YXRlIHR5cGUKKy8vIDAuMyAgICAgIDIwMDIxMDIzICAgIFBFMjMgQ1lMaXUgdXBkYXRlIE1BQyBzZXNzaW9uIHN0cnVjdAorLy8gICAgICAgICAgMjAwMjExMDgKKy8vICAgICAgICAgIDIwMDIxMTIyICAgIFBENDMgQXVzdGluCisvLyAgICAgICAgICAgICAgICAgICAgICBEZWxldGVkIHNvbWUgdW51c2VkLgorLy8gICAgICAgICAgMjAwMjExMjkgICAgUEQ0MyBBdXN0aW4KKy8vCQkJMjAwMzA2MTcJaW5jcmVhc2UgdGhlIDgwMi4xMWcgZGVmaW5pdGlvbgorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKKyNpZm5kZWYgX01BQ19TdHJ1Y3R1cmVzX0hfCisjZGVmaW5lIF9NQUNfU3RydWN0dXJlc19IXworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBTb21lIG1pc2NlbGxhbmVvdXMgZGVmaW5pdGlvbnMKKy8vLS0tLS0KKyNkZWZpbmUgTUFYX0NIQU5ORUxTICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgTUFDX0FERFJfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBNQVhfV0VQX0tFWV9TSVpFICAgICAgICAgICAgICAgICAgICAxNiAgLy8gMTI4IGJpdHMKKyNkZWZpbmUJTUFYXzgwMl8xMV9GUkFHTUVOVF9OVU1CRVIJCTEwIC8vIEJ5IHNwZWMKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gODAyLjExIEZyYW1lIGRlZmluZQorLy8tLS0tLQorI2RlZmluZSBNQVNLX1BST1RPQ09MX1ZFUlNJT05fVFlQRQkweDBGCisjZGVmaW5lIE1BU0tfRlJBR01FTlRfTlVNQkVSCQkweDAwMEYKKyNkZWZpbmUgU0VRVUVOQ0VfTlVNQkVSX1NISUZUCQk0CisjZGVmaW5lIERJRkZFUl8xMV9UT18zCQkJCTE4CisjZGVmaW5lIERPVF8xMV9NQUNfSEVBREVSX1NJWkUJCTI0CisjZGVmaW5lIERPVF8xMV9TTkFQX1NJWkUJCQk2CisjZGVmaW5lIERPVF8xMV9EVVJBVElPTl9PRkZTRVQJCTIKKyNkZWZpbmUgRE9UXzExX1NFUVVFTkNFX09GRlNFVAkJMjIgLy9TZXF1ZW5jZSBjb250cm9sIG9mZnNldAorI2RlZmluZSBET1RfMTFfVFlQRV9PRkZTRVQJCQkzMCAvL1RoZSBzdGFydCBvZmZzZXQgb2YgODAyLjExIEZyYW1lLy8KKyNkZWZpbmUgRE9UXzExX0RBVEFfT0ZGU0VUICAgICAgICAgIDI0CisjZGVmaW5lIERPVF8xMV9EQV9PRkZTRVQJCQk0CisjZGVmaW5lIERPVF8zX1RZUEVfQVJQCQkJCTB4ODBGMworI2RlZmluZSBET1RfM19UWVBFX0lQWAkJCQkweDgxMzcKKyNkZWZpbmUgRE9UXzNfVFlQRV9PRkZTRVQJCQkxMgorCisKKyNkZWZpbmUgRVRIRVJORVRfSEVBREVSX1NJWkUJCQkxNAorI2RlZmluZSBNQVhfRVRIRVJORVRfUEFDS0VUX1NJWkUJCTE1MTQKKworCisvLy0tLS0tICBtYW5hZ2VtZW50IDogVHlwZSBvZiBCaXRzICgyLCAzKSBhbmQgU3VidHlwZSBvZiBCaXRzICg0LCA1LCA2LCA3KQorI2RlZmluZSBNQUNfU1VCVFlQRV9NTkdNTlRfQVNTT0NfUkVRVUVTVCAgICAweDAwCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9BU1NPQ19SRVNQT05TRSAgIDB4MTAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX1JFQVNTT0NfUkVRVUVTVCAgMHgyMAorI2RlZmluZSBNQUNfU1VCVFlQRV9NTkdNTlRfUkVBU1NPQ19SRVNQT05TRSAweDMwCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9QUk9CRV9SRVFVRVNUICAgIDB4NDAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX1BST0JFX1JFU1BPTlNFICAgMHg1MAorI2RlZmluZSBNQUNfU1VCVFlQRV9NTkdNTlRfQkVBQ09OICAgICAgICAgICAweDgwCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9BVElNICAgICAgICAgICAgIDB4OTAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX0RJU0FTU09DSUFUSU9OICAgMHhBMAorI2RlZmluZSBNQUNfU1VCVFlQRV9NTkdNTlRfQVVUSEVOVElDQVRJT04gICAweEIwCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9ERUFVVEhFTlRJQ0FUSU9OIDB4QzAKKworLy8tLS0tLSAgY29udHJvbCA6IFR5cGUgb2YgQml0cyAoMiwgMykgYW5kIFN1YnR5cGUgb2YgQml0cyAoNCwgNSwgNiwgNykKKyNkZWZpbmUgTUFDX1NVQlRZUEVfQ09OVFJPTF9QU1BPTEwgICAgICAgICAgMHhBNAorI2RlZmluZSBNQUNfU1VCVFlQRV9DT05UUk9MX1JUUyAgICAgICAgICAgICAweEI0CisjZGVmaW5lIE1BQ19TVUJUWVBFX0NPTlRST0xfQ1RTICAgICAgICAgICAgIDB4QzQKKyNkZWZpbmUgTUFDX1NVQlRZUEVfQ09OVFJPTF9BQ0sgICAgICAgICAgICAgMHhENAorI2RlZmluZSBNQUNfU1VCVFlQRV9DT05UUk9MX0NGRU5EICAgICAgICAgICAweEU0CisjZGVmaW5lIE1BQ19TVUJUWVBFX0NPTlRST0xfQ0ZFTkRfQ0ZBQ0sgICAgIDB4RjQKKworLy8tLS0tLSAgZGF0YSA6IFR5cGUgb2YgQml0cyAoMiwgMykgYW5kIFN1YnR5cGUgb2YgQml0cyAoNCwgNSwgNiwgNykKKyNkZWZpbmUgTUFDX1NVQlRZUEVfREFUQSAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBNQUNfU1VCVFlQRV9EQVRBX0NGQUNLICAgICAgICAgICAgICAweDE4CisjZGVmaW5lIE1BQ19TVUJUWVBFX0RBVEFfQ0ZQT0xMICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgTUFDX1NVQlRZUEVfREFUQV9DRkFDS19DRlBPTEwgICAgICAgMHgzOAorI2RlZmluZSBNQUNfU1VCVFlQRV9EQVRBX05VTEwgICAgICAgICAgICAgICAweDQ4CisjZGVmaW5lIE1BQ19TVUJUWVBFX0RBVEFfQ0ZBQ0tfTlVMTCAgICAgICAgIDB4NTgKKyNkZWZpbmUgTUFDX1NVQlRZUEVfREFUQV9DRlBPTExfTlVMTCAgICAgICAgMHg2OAorI2RlZmluZSBNQUNfU1VCVFlQRV9EQVRBX0NGQUNLX0NGUE9MTF9OVUxMICAweDc4CisKKy8vLS0tLS0gIEZyYW1lIFR5cGUgb2YgQml0cyAoMiwgMykKKyNkZWZpbmUgTUFDX1RZUEVfTUFOQUdFTUVOVCAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBNQUNfVFlQRV9DT05UUk9MICAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIE1BQ19UWVBFX0RBVEEgICAgICAgICAgICAgICAgICAgICAgIDB4MDgKKworLy8tLS0tLSBkZWZpbml0aW9ucyBmb3IgTWFuYWdlbWVudCBGcmFtZSBFbGVtZW50IElEICgxIEJZVEUpCisjZGVmaW5lIEVMRU1FTlRfSURfU1NJRCAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRUxFTUVOVF9JRF9TVVBQT1JURURfUkFURVMgICAgICAgICAgMQorI2RlZmluZSBFTEVNRU5UX0lEX0ZIX1BBUkFNRVRFUl9TRVQgICAgICAgICAyCisjZGVmaW5lIEVMRU1FTlRfSURfRFNfUEFSQU1FVEVSX1NFVCAgICAgICAgIDMKKyNkZWZpbmUgRUxFTUVOVF9JRF9DRl9QQVJBTUVURVJfU0VUICAgICAgICAgNAorI2RlZmluZSBFTEVNRU5UX0lEX1RJTSAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEVMRU1FTlRfSURfSUJTU19QQVJBTUVURVJfU0VUICAgICAgIDYKKy8vIDd+MTUgcmVzZXJ2ZXJkCisjZGVmaW5lIEVMRU1FTlRfSURfQ0hBTExFTkdFX1RFWFQgICAgICAgICAgIDE2CisvLyAxN34zMSByZXNlcnZlZCBmb3IgY2hhbGxlbmdlIHRleHQgZXh0ZW5zaW9uCisvLyAzMn4yNTUgcmVzZXJ2ZWQKKy8vLS0gIDExRyAgLS0KKyNkZWZpbmUgRUxFTUVOVF9JRF9FUlBfSU5GT1JNQVRJT04JCQk0MgorI2RlZmluZSBFTEVNRU5UX0lEX0VYVEVOREVEX1NVUFBPUlRFRF9SQVRFUyA1MAorCisvLy0tICBXUEEgIC0tCisKKyNkZWZpbmUgRUxFTUVOVF9JRF9SU05fV1BBCQkJCQkyMjEKKyNpZmRlZiBfV1BBMl8KKyNkZWZpbmUgRUxFTUVOVF9JRF9SU05fV1BBMgkJCQkgICAgNDgKKyNlbmRpZiAvL2VuZGlmIFdQQTIKKworI2RlZmluZSBXTEFOX01BWF9QQUlSV0lTRV9DSVBIRVJfU1VJVEVfQ09VTlQgICAgKCh1MTYpIDYpCisjZGVmaW5lIFdMQU5fTUFYX0FVVEhfS0VZX01HVF9TVUlURV9MSVNUX0NPVU5UICAoKHUxNikgMikKKworI2lmZGVmIFdCX0xJTlVYCisjZGVmaW5lIFVOQUxJR05FRAorI2VuZGlmCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3R5cGVkZWYgZW51bSBlbnVtX1Bvd2VyTWFuYWdlbWVudE1vZGUKK3sKKyAgICBBQ1RJVkUgPSAwLAorICAgIFBPV0VSX1NBVkUKK30gV0JfUE1fTW9kZSwgKlBXQl9QTV9NT0RFOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBSZWFzb24gQ29kZSAoVGFibGUgMTgpOiBpbmRpY2F0ZSB0aGUgcmVhc29uIG9mIERpc0Fzc29jLCBEZUF1dGhlbgorLy8gIGxlbmd0aCBvZiBSZWFzb25Db2RlIGlzIDIgT2N0cy4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBSRUFTT05fUkVBU0VSRUQgICAgICAgICAgICAgMAorI2RlZmluZSBSRUFTT05fVU5TUEVDSURJRUQgICAgICAgICAgMQorI2RlZmluZSBSRUFTT05fUFJFQVVUSF9JTlZBTElEICAgICAgMgorI2RlZmluZSBERUFVVEhfUkVBU09OX0xFRlRfQlNTICAgICAgMworI2RlZmluZSBESVNBU1NfUkVBU09OX0FQX0lOQUNUSVZFICAgNAorI2RlZmluZSBESVNBU1NfUkVBU09OX0FQX0JVU1kgICAgICAgNQorI2RlZmluZSBSRUFTT05fQ0xBU1MyX0ZSQU1FX0ZST01fTk9OQVVUSF9TVEEgICAgNgorI2RlZmluZSBSRUFTT05fQ0xBU1MzX0ZSQU1FX0ZST01fTk9OQVNTT19TVEEgICAgNworI2RlZmluZSBESVNBU1NfUkVBU09OX0xFRlRfQlNTICAgICAgOAorI2RlZmluZSBSRUFTT05fTk9UX0FVVEhfWUVUICAgICAgICAgOQorLy84MDIuMTFpIGRlZmluZQorI2RlZmluZSBSRUFTT05fSU5WQUxJRF9JRQkJCQkJCTEzCisjZGVmaW5lIFJFQVNPTl9NSUNfRVJST1IJCQkJCQkxNAorI2RlZmluZSBSRUFTT05fNFdBWV9IQU5EU0hBS0VfVElNRU9VVAkJCTE1CisjZGVmaW5lIFJFQVNPTl9HUk9VUEtFWV9VUERBVEVfVElNRU9VVAkJCTE2CisjZGVmaW5lIFJFQVNPTl9JRV9ESUZGXzRXQVlfQVNTT0MJCQkJMTcKKyNkZWZpbmUgUkVBU09OX0lOVkFMSURfTVVMVElDQVNUX0NJUEhFUgkJCTE4CisjZGVmaW5lIFJFQVNPTl9JTlZBTElEX1VOSUNBU1RfQ0lQSEVSCQkJMTkKKyNkZWZpbmUgUkVBU09OX0lOVkFMSURfQUtNUAkJCQkJCTIwCisjZGVmaW5lIFJFQVNPTl9VTlNVUFBPUlRFRF9SU05JRV9WRVJTSU9OCQkyMQorI2RlZmluZSBSRUFTT05fSU5WQUxJRF9SU05JRV9DQVBBQklMSVRZCQkJMjIKKyNkZWZpbmUgUkVBU09OXzgwMl8xWF9BVVRIX0ZBSUwJCQkJCTIzCisjZGVmaW5lCVJFQVNPTl9DSVBIRVJfUkVKRUNUX1BFUl9TRUNfUE9MSUNZCQkxNAorCisvKgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gZW51bV9NTVBEVVJlc3VsdENvZGUgLS0KKy8vICAgU3RhdHVzIGNvZGUgKDIgT2N0cykgaW4gdGhlIE1NUERVJ3MgZnJhbWUgYm9keS4gVGFibGUuMTkKKy8vCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitlbnVtIGVudW1fTU1QRFVSZXN1bHRDb2RlCit7CisvLyAgICBTVUNDRVNTICAgPSAwLCAgICAgIC8vIFJlZGVmaW5lZAorICAgIFVOU1BFQ0lGSUVEX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgPSAxLAorCisgICAgLy8gMiAtIDkgUmVzZXJ2ZWQKKworICAgIE5PVF9TVVBQUk9UX0NBUEFCSUxJVElFUyAgICAgICAgICAgICAgICAgICAgPSAxMCwKKworICAgIC8vUkVBU1NPQ0lBVElPTl9ERU5JRUQKKyAgICAvLworICAgIFJFQVNTT0NfREVOSUVEX1VOQUJMRV9DRk1fQVNTT0NfRVhJU1QgICAgICAgPSAxMSwKKworICAgIC8vQVNTT0NJQVRJT05fREVOSUVEX05PVF9JTl9TVEFOREFSRAorICAgIC8vCisgICAgQVNTT0NfREVOSUVEX1JFQVNPTl9OT1RfSU5fU1RBTkRBUkQgICAgICAgICA9IDEyLAorICAgIFBFRVJfTk9UX1NVUFBPUlRfQVVUSF9BTEdPUklUSE0gICAgICAgICAgICAgPSAxMywKKyAgICBBVVRIX1NFUU5VTV9PVVRfT0ZfRVhQRUNUICAgICAgICAgICAgICAgICAgID0gMTQsCisgICAgQVVUSF9SRUpFQ1RfUkVBU09OX0NIQUxMRU5HRV9GQUlMICAgICAgICAgICA9IDE1LAorICAgIEFVVEhfUkVKRUNUX1JFQVNPTl9XQUlUX1RJTUVPVVQgICAgICAgICAgICAgPSAxNiwKKyAgICBBU1NPQ19ERU5JRURfUkVBU09OX0FQX0JVU1kgICAgICAgICAgICAgICAgID0gMTcsCisgICAgQVNTT0NfREVOSUVEX1JFQVNPTl9OT1RfU1VQUE9SVF9CQVNJQ19SQVRFICA9IDE4Cit9IFdCX01NUERVUkVTVUxUQ09ERSwgKlBXQl9NTVBEVVJFU1VMVENPREU7CisqLworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBlbnVtX1R4UmF0ZSAtLQorLy8gICBEZWZpbmUgdGhlIHRyYW5zbWlzc2lvbiBjb25zdGFudHMgYmFzZWQgb24gVzg5QzMyIE1BQworLy8gICB0YXJnZXQgc3BlY2lmaWNhdGlvbi4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3R5cGVkZWYgZW51bSBlbnVtX1R4UmF0ZQoreworICAgIFRYUkFURV8xTSAgICAgICAgICAgICAgID0gMCwKKyAgICBUWFJBVEVfMk1MT05HICAgICAgICAgICA9IDIsCisgICAgVFhSQVRFXzJNU0hPUlQgICAgICAgICAgPSAzLAorICAgIFRYUkFURV81NU1MT05HICAgICAgICAgID0gNCwKKyAgICBUWFJBVEVfNTVNU0hPUlQgICAgICAgICA9IDUsCisgICAgVFhSQVRFXzExTUxPTkcgICAgICAgICAgPSA2LAorICAgIFRYUkFURV8xMU1TSE9SVCAgICAgICAgID0gNywKKyAgICBUWFJBVEVfQVVUTyAgICAgICAgICAgICA9IDI1NSAgICAgICAgICAgLy8gUEQ0MyAyMDAyMTEwOAorfSBXQl9UWFJBVEUsICpQV0JfVFhSQVRFOworCisKKyNkZWZpbmUJUkFURV9CSVRNQVBfMU0JCQkJMQorI2RlZmluZQlSQVRFX0JJVE1BUF8yTQkJCQkyCisjZGVmaW5lCVJBVEVfQklUTUFQXzVkb3Q1TQkJCTUKKyNkZWZpbmUgUkFURV9CSVRNQVBfNk0JCQkJNgorI2RlZmluZSBSQVRFX0JJVE1BUF85TQkJCQk5CisjZGVmaW5lIFJBVEVfQklUTUFQXzExTQkJCQkxMQorI2RlZmluZSBSQVRFX0JJVE1BUF8xMk0JCQkJMTIKKyNkZWZpbmUgUkFURV9CSVRNQVBfMThNCQkJCTE4CisjZGVmaW5lIFJBVEVfQklUTUFQXzIyTQkJCQkyMgorI2RlZmluZSBSQVRFX0JJVE1BUF8yNE0JCQkJMjQKKyNkZWZpbmUgUkFURV9CSVRNQVBfMzNNCQkJCTE3CisjZGVmaW5lIFJBVEVfQklUTUFQXzM2TQkJCQkxOQorI2RlZmluZSBSQVRFX0JJVE1BUF80OE0JCQkJMjUKKyNkZWZpbmUgUkFURV9CSVRNQVBfNTRNCQkJCTI4CisKKyNkZWZpbmUgUkFURV9BVVRPCQkJCQkwCisjZGVmaW5lIFJBVEVfMU0JCQkJCQkyCisjZGVmaW5lIFJBVEVfMk0JCQkJCQk0CisjZGVmaW5lIFJBVEVfNWRvdDVNCQkJCQkxMQorI2RlZmluZSBSQVRFXzZNCQkJCQkJMTIKKyNkZWZpbmUgUkFURV85TQkJCQkJCTE4CisjZGVmaW5lIFJBVEVfMTFNCQkJCQkyMgorI2RlZmluZSBSQVRFXzEyTQkJCQkJMjQKKyNkZWZpbmUgUkFURV8xOE0JCQkJCTM2CisjZGVmaW5lIFJBVEVfMjJNCQkJCQk0NAorI2RlZmluZSBSQVRFXzI0TQkJCQkJNDgKKyNkZWZpbmUgUkFURV8zM00JCQkJCTY2CisjZGVmaW5lIFJBVEVfMzZNCQkJCQk3MgorI2RlZmluZSBSQVRFXzQ4TQkJCQkJOTYKKyNkZWZpbmUgUkFURV81NE0JCQkJCTEwOAorI2RlZmluZSBSQVRFX01BWAkJCQkJMjU1CisKKy8vQ0FQQUJJTElUWQorI2RlZmluZSBDQVBBQklMSVRZX0VTU19CSVQJCQkJMHgwMDAxCisjZGVmaW5lIENBUEFCSUxJVFlfSUJTU19CSVQJCQkJMHgwMDAyCisjZGVmaW5lIENBUEFCSUxJVFlfQ0ZfUE9MTF9CSVQJCQkweDAwMDQKKyNkZWZpbmUgQ0FQQUJJTElUWV9DRl9QT0xMX1JFUV9CSVQJCTB4MDAwOAorI2RlZmluZSBDQVBBQklMSVRZX1BSSVZBQ1lfQklUCQkJMHgwMDEwCisjZGVmaW5lIENBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEVfQklUCTB4MDAyMAorI2RlZmluZSBDQVBBQklMSVRZX1BCQ0NfQklUCQkJCTB4MDA0MAorI2RlZmluZSBDQVBBQklMSVRZX0NIQU5fQUdJTElUWV9CSVQJCTB4MDA4MAorI2RlZmluZSBDQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRV9CSVQJMHgwNDAwCisjZGVmaW5lIENBUEFCSUxJVFlfRFNTU19PRkRNX0JJVAkJMHgyMDAwCisKKworc3RydWN0IENhcGFiaWxpdHlfSW5mb3JtYXRpb25fRWxlbWVudAoreworICB1bmlvbgorICB7CisgIAl1MTYgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHdWYWx1ZTsKKyAgICAjaWZkZWYgX0JJR19FTkRJQU5fICAvLzIwMDYwOTI2IGFkZCBieSBhbnNvbidzIGVuZGlhbgorICAgIHN0cnVjdCBfQ2FwYWJpbGl0eQorICAgIHsKKyAgICAgICAgLy8tLSAgMTFHICAtLQorCXU4CVJlc2VydmVkMyA6IDI7CisJdTgJRFNTU19PRkRNIDogMTsKKwl1OAlSZXNlcnZlZDIgOiAyOworCXU4CVNob3J0X1Nsb3RfVGltZSA6IDE7CisJdTggICAgUmVzZXJ2ZWQxIDogMjsKKwl1OCAgICBDaGFubmVsX0FnaWxpdHkgOiAxOworCXU4ICAgIFBCQ0MgOiAxOworCXU4ICAgIFNob3J0UHJlYW1ibGUgOiAxOworCXU4ICAgIENGX1ByaXZhY3kgOiAxOworCXU4ICAgIENGX1BvbGxfUmVxdWVzdCA6IDE7CisJdTggICAgQ0ZfUG9sbGFibGUgOiAxOworCXU4ICAgIElCU1MgOiAxOworCXU4ICAgIEVTUyA6IDE7CisgICAgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgQ2FwYWJpbGl0eTsKKyAgICAjZWxzZQorICAgIHN0cnVjdCBfQ2FwYWJpbGl0eQorICAgIHsKKyAgICAgICAgdTggICAgRVNTIDogMTsKKyAgICAgICAgdTggICAgSUJTUyA6IDE7CisgICAgICAgIHU4ICAgIENGX1BvbGxhYmxlIDogMTsKKyAgICAgICAgdTggICAgQ0ZfUG9sbF9SZXF1ZXN0IDogMTsKKyAgICAgICAgdTggICAgQ0ZfUHJpdmFjeSA6IDE7CisgICAgICAgIHU4ICAgIFNob3J0UHJlYW1ibGUgOiAxOworICAgICAgICB1OCAgICBQQkNDIDogMTsKKyAgICAgICAgdTggICAgQ2hhbm5lbF9BZ2lsaXR5IDogMTsKKyAgICAgICAgdTggICAgUmVzZXJ2ZWQxIDogMjsKKwkJLy8tLSAgMTFHICAtLQorCQl1OAlTaG9ydF9TbG90X1RpbWUgOiAxOworCQl1OAlSZXNlcnZlZDIgOiAyOworCQl1OAlEU1NTX09GRE0gOiAxOworCQl1OAlSZXNlcnZlZDMgOiAyOworICAgIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIENhcGFiaWxpdHk7CisgICAgI2VuZGlmCisgIH1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IEZIX1BhcmFtZXRlcl9TZXRfRWxlbWVudAoreworICAgIHU4ICAgIEVsZW1lbnRfSUQ7CisgICAgdTggICAgTGVuZ3RoOworICAgIHU4ICAgIER3ZWxsX1RpbWVbMl07CisgICAgdTggICAgSG9wX1NldDsKKyAgICB1OCAgICBIb3BfUGF0dGVybjsKKyAgICB1OCAgICBIb3BfSW5kZXg7Cit9OworCitzdHJ1Y3QgRFNfUGFyYW1ldGVyX1NldF9FbGVtZW50Cit7CisgICAgdTggICAgRWxlbWVudF9JRDsKKyAgICB1OCAgICBMZW5ndGg7CisgICAgdTggICAgQ3VycmVudF9DaGFubmVsOworfTsKKworc3RydWN0IFN1cHBvcnRlZF9SYXRlc19FbGVtZW50Cit7CisgICAgdTggICAgRWxlbWVudF9JRDsKKyAgICB1OCAgICBMZW5ndGg7CisgICAgdTggICAgU3VwcG9ydGVkUmF0ZXNbOF07Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgU1NJRF9FbGVtZW50Cit7CisgICAgdTggICAgRWxlbWVudF9JRDsKKyAgICB1OCAgICBMZW5ndGg7CisgICAgdTggICAgU1NJRFszMl07Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIDsKKworc3RydWN0IENGX1BhcmFtZXRlcl9TZXRfRWxlbWVudAoreworICAgIHU4ICAgIEVsZW1lbnRfSUQ7CisgICAgdTggICAgTGVuZ3RoOworICAgIHU4ICAgIENGUF9Db3VudDsKKyAgICB1OCAgICBDRlBfUGVyaW9kOworICAgIHU4ICAgIENGUF9NYXhEdXJhdGlvblsyXTsgICAgIC8vIGluIFRpbWUgVW5pdHMKKyAgICB1OCAgICBDRlBfRHVyUmVtYWluaW5nWzJdOyAgICAvLyBpbiB0aW1lIHVuaXRzCit9OworCitzdHJ1Y3QgVElNX0VsZW1lbnQKK3sKKyAgICB1OCAgICBFbGVtZW50X0lEOworICAgIHU4ICAgIExlbmd0aDsKKyAgICB1OCAgICBEVElNX0NvdW50OworICAgIHU4ICAgIERUSU1fUGVyaW9kOworICAgIHU4ICAgIEJpdG1hcF9Db250cm9sOworICAgIHU4ICAgIFBhcnRpYWxfVmlydHVhbF9CaXRtYXBbMjUxXTsKK307CisKK3N0cnVjdCBJQlNTX1BhcmFtZXRlcl9TZXRfRWxlbWVudAoreworICAgIHU4ICAgIEVsZW1lbnRfSUQ7CisgICAgdTggICAgTGVuZ3RoOworICAgIHU4ICAgIEFUSU1fV2luZG93WzJdOworfTsKKworc3RydWN0IENoYWxsZW5nZV9UZXh0X0VsZW1lbnQKK3sKKyAgICB1OCAgICBFbGVtZW50X0lEOworICAgIHU4ICAgIExlbmd0aDsKKyAgICB1OCAgICBDaGFsbGVuZ2VfVGV4dFsyNTNdOworfTsKKworc3RydWN0IFBIWV9QYXJhbWV0ZXJfU2V0X0VsZW1lbnQKK3sKKy8vICBpbnQgICAgIGFTbG90VGltZTsKKy8vICBpbnQgICAgIGFTaWZzVGltZTsKKyAgICBzMzIgICAgIGFDQ0FUaW1lOworICAgIHMzMiAgICAgYVJ4VHhUdXJuYXJvdW5kVGltZTsKKyAgICBzMzIgICAgIGFUeFBMQ1BEZWxheTsKKyAgICBzMzIgICAgIFJ4UExDUERlbGF5OworICAgIHMzMiAgICAgYVJ4VHhTd2l0Y2hUaW1lOworICAgIHMzMiAgICAgYVR4UmFtcE9udGltZTsKKyAgICBzMzIgICAgIGFUeFJhbXBPZmZUaW1lOworICAgIHMzMiAgICAgYVR4UkZEZWxheTsKKyAgICBzMzIgICAgIGFSeFJGRGVsYXk7CisgICAgczMyICAgICBhQWlyUHJvcGFnYXRpb25UaW1lOworICAgIHMzMiAgICAgYU1BQ1Byb2Nlc3NpbmdEZWxheTsKKyAgICBzMzIgICAgIGFQcmVhbWJsZUxlbmd0aDsKKyAgICBzMzIgICAgIGFQTENQSGVhZGVyTGVuZ3RoOworICAgIHMzMiAgICAgYU1QRFVEdXJhdGlvbkZhY3RvcjsKKyAgICBzMzIgICAgIGFNUERVTWF4TGVuZ3RoOworLy8gIGludCAgICAgYUNXbWluOworLy8gIGludCAgICAgYUNXbWF4OworfTsKKworLy8tLSAgMTFHICAtLQorc3RydWN0IEVSUF9JbmZvcm1hdGlvbl9FbGVtZW50Cit7CisgICAgdTgJRWxlbWVudF9JRDsKKyAgICB1OAlMZW5ndGg7CisgICAgI2lmZGVmIF9CSUdfRU5ESUFOXyAvLzIwMDYwOTI2IGFkZCBieSBhbnNvbidzIGVuZGlhbgorICAgIAl1OAlSZXNlcnZlZDo1OyAgIC8vMjAwNjA5MjYgYWRkIGJ5IGFuc29uCisgICAgICAgdTgJQmFya2VyX1ByZWFtYmxlX01vZGU6MTsKKwl1OAlVc2VfUHJvdGVjdGlvbjoxOworICAgICAgIHU4CU5vbkVSUF9QcmVzZW50OjE7CisgICAgI2Vsc2UKKwl1OAlOb25FUlBfUHJlc2VudDoxOworCXU4CVVzZV9Qcm90ZWN0aW9uOjE7CisJdTgJQmFya2VyX1ByZWFtYmxlX01vZGU6MTsKKwl1OAlSZXNlcnZlZDo1OworICAgICNlbmRpZgorfTsKKworc3RydWN0IEV4dGVuZGVkX1N1cHBvcnRlZF9SYXRlc19FbGVtZW50Cit7CisgICAgdTgJRWxlbWVudF9JRDsKKyAgICB1OAlMZW5ndGg7CisgICAgdTgJRXh0ZW5kZWRTdXBwb3J0ZWRSYXRlc1syNTVdOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLy9XUEEoODAyLjExaSBkcmFmdCAzLjApCisjZGVmaW5lIFZFUlNJT05fV1BBCQkJCTEKKyNpZmRlZiBfV1BBMl8KKyNkZWZpbmUgVkVSU0lPTl9XUEEyICAgICAgICAgICAgMQorI2VuZGlmIC8vZW5kIGRlZiAgX1dQQTJfCisjZGVmaW5lIE9VSV9XUEEJCQkJCTB4MDBGMjUwMDAJLy9XUEEyLjAgT1VJPTAwOjUwOkYyLCB0aGUgTVNCIGlzIHJlc2VydmVkIGZvciBzdWl0ZSB0eXBlCisjaWZkZWYgX1dQQTJfCisjZGVmaW5lIE9VSV9XUEEyCQkJCTB4MDBBQzBGMDAJLy8gZm9yIHdwYTIgY2hhbmdlIHRvIDB4MDBBQ09GMDQgYnkgV3MgMjYvMDQvMDQKKyNlbmRpZiAvL2VuZCBkZWYgX1dQQTJfCisKKyNkZWZpbmUgT1VJX1dQQV9BRERJVElPTkFMCQkweDAxCisjZGVmaW5lIFdMQU5fTUlOX1JTTl9XUEFfTEVOR1RIICAgICAgICAgICAgICAgICA2IC8vYWRkZWQgYnkgd3MgMDkvMTAvMDQKKyNpZmRlZiBfV1BBMl8KKyNkZWZpbmUgV0xBTl9NSU5fUlNOX1dQQTJfTEVOR1RIICAgICAgICAgICAgICAgIDIgLy8gRml4IHRvIDIgMDkvMTQvMDUKKyNlbmRpZiAvL2VuZCBkZWYgX1dQQTJfCisKKyNkZWZpbmUgb3VpX3dwYSAgICAgICAgICAgICAgICAgICh1MzIpKE9VSV9XUEF8T1VJX1dQQV9BRERJVElPTkFMKQorCisjZGVmaW5lIFdQQV9PVUlfQklHICAgICgodTMyKSAweDAxRjI1MDAwKS8vYWRkZWQgYnkgd3MgMDkvMjMvMDQKKyNkZWZpbmUgV1BBX09VSV9MSVRUTEUgICgodTMyKSAweDAxRjI1MDAxKS8vYWRkZWQgYnkgd3MgMDkvMjMvMDQKKworI2RlZmluZSBXUEFfV1BTX09VSQkJCQljcHVfdG9fbGUzMigweDA0RjI1MDAwKSAvLyAyMDA2MTEwOCBGb3IgV1BTLiBJdCdzIGxpdHRsZSBlbmRpYW4uIEJpZyBlbmRpYW4gaXMgMHgwMDUwRjIwNAorCisvLy0tLS0tV1BBMi0tLS0tCisjaWZkZWYgX1dQQTJfCisjZGVmaW5lIFdQQTJfT1VJX0JJRyAgICAoKHUzMikweDAxQUMwRjAwKQorI2RlZmluZSBXUEEyX09VSV9MSVRUTEUgKCh1MzIpMHgwMUFDMEYwMSkKKyNlbmRpZiAvL2VuZCBkZWYgX1dQQTJfCisKKy8vQXV0aGVudGljYXRpb24gc3VpdGUKKyNkZWZpbmUgT1VJX0FVVEhfV1BBX05PTkUgICAgICAgICAgIDB4MDAgLy9mb3IgV1BBX05PTkUKKyNkZWZpbmUgT1VJX0FVVEhfODAyMVgJCQkJMHgwMQorI2RlZmluZSBPVUlfQVVUSF9QU0sJCQkJMHgwMgorLy9DaXBoZXIgc3VpdGUKKyNkZWZpbmUgT1VJX0NJUEhFUl9HUk9VUF9LRVkgICAgICAgIDB4MDAgIC8vYWRkZWQgYnkgd3MgMDUvMjEvMDQKKyNkZWZpbmUgT1VJX0NJUEhFUl9XRVBfNDAJCQkweDAxCisjZGVmaW5lIE9VSV9DSVBIRVJfVEtJUAkJCQkweDAyCisjZGVmaW5lIE9VSV9DSVBIRVJfQ0NNUAkJCQkweDA0CisjZGVmaW5lIE9VSV9DSVBIRVJfV0VQXzEwNAkJCTB4MDUKKwordHlwZWRlZiBzdHJ1Y3QgX1NVSVRFX1NFTEVDVE9SXworeworCXVuaW9uCisJeworCQl1OAlWYWx1ZVs0XTsKKwkJc3RydWN0IF9TVUlUXworCQl7CisJCQl1OAlPVUlbM107CisJCQl1OAlUeXBlOworCQl9U3VpdFNlbGVjdG9yOworCX07Cit9U1VJVEVfU0VMRUNUT1I7CisKKy8vLS0gIFdQQSAgLS0KK3N0cnVjdAlSU05fSW5mb3JtYXRpb25fRWxlbWVudAoreworCXU4CQkJCQlFbGVtZW50X0lEOworCXU4CQkJCQlMZW5ndGg7CisJVU5BTElHTkVEIFNVSVRFX1NFTEVDVE9SCU91aVdQQUFkZGl0aW9uYWw7Ly9XUEEgdmVyc2lvbiAyLjAgYWRkaXRpb25hbCBmaWVsZCwgYW5kIHNob3VsZCBiZSAwMDo1MDpGMjowMQorCXUxNgkJCQkJVmVyc2lvbjsKKwlTVUlURV9TRUxFQ1RPUgkJR3JvdXBLZXlTdWl0ZTsKKwl1MTYJCQkJCVBhaXJ3aXNlS2V5U3VpdGVDb3VudDsKKwlTVUlURV9TRUxFQ1RPUgkJUGFpcndpc2VLZXlTdWl0ZVsxXTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CitzdHJ1Y3QgUlNOX0F1dGhfU3ViX0luZm9ybWF0aW9uX0VsZW1lbnQKK3sKKwl1MTYJCQkJQXV0aEtleU1uZ3RTdWl0ZUNvdW50OworCVNVSVRFX1NFTEVDVE9SCUF1dGhLZXlNbmd0U3VpdGVbMV07Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvLy0tICBXUEEyICAtLQorc3RydWN0IFJTTl9DYXBhYmlsaXR5X0VsZW1lbnQKK3sKKyAgdW5pb24KKyAgeworCXUxNglfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkJd1ZhbHVlOworICAgICNpZmRlZiBfQklHX0VORElBTl8JIC8vMjAwNjA5MjcgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisgICAgc3RydWN0IF9SU05fQ2FwYWJpbGl0eQorICAgIHsKKyAgICAJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDIgOiA4OyAvLyAyMDA1MTIwMQorCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUmVzZXJ2ZWQxIDogMjsKKwl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIEdUS19SZXBsYXlfQ291bnRlciA6IDI7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQVEtfUmVwbGF5X0NvdW50ZXIgOiAyOworCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgTm9fUGFpcndpc2UgOiAxOworICAgICAgICB1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFByZV9BdXRoIDogMTsKKyAgICB9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSU05fQ2FwYWJpbGl0eTsKKyAgICAjZWxzZQorICAgIHN0cnVjdCBfUlNOX0NhcGFiaWxpdHkKKyAgICB7CisgICAgICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUHJlX0F1dGggOiAxOworICAgICAgICB1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIE5vX1BhaXJ3aXNlIDogMTsKKyAgICAgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQVEtfUmVwbGF5X0NvdW50ZXIgOiAyOworCSAgICB1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIEdUS19SZXBsYXlfQ291bnRlciA6IDI7CisJICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUmVzZXJ2ZWQxIDogMjsKKwkgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDIgOiA4OyAvLyAyMDA1MTIwMQorICAgIH1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJTTl9DYXBhYmlsaXR5OworICAgICNlbmRpZgorCisgIH1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSA7CisKKyNpZmRlZiBfV1BBMl8KK3R5cGVkZWYgc3RydWN0IF9QTUtJRAoreworICB1OCBwVmFsdWVbMTZdOworfVBNS0lEOworCitzdHJ1Y3QJV1BBMl9SU05fSW5mb3JtYXRpb25fRWxlbWVudAoreworCXU4CQkJCQlFbGVtZW50X0lEOworCXU4CQkJCQlMZW5ndGg7CisJdTE2CQkJCQlWZXJzaW9uOworCVNVSVRFX1NFTEVDVE9SCQlHcm91cEtleVN1aXRlOworCXUxNgkJCQkJUGFpcndpc2VLZXlTdWl0ZUNvdW50OworCVNVSVRFX1NFTEVDVE9SCQlQYWlyd2lzZUtleVN1aXRlWzFdOworCit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgV1BBMl9SU05fQXV0aF9TdWJfSW5mb3JtYXRpb25fRWxlbWVudAoreworCXUxNgkJCQlBdXRoS2V5TW5ndFN1aXRlQ291bnQ7CisJU1VJVEVfU0VMRUNUT1IJQXV0aEtleU1uZ3RTdWl0ZVsxXTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworc3RydWN0IFBNS0lEX0luZm9ybWF0aW9uX0VsZW1lbnQKK3sKKwl1MTYJCQkJUE1LSURfQ291bnQ7CisJUE1LSUQgcG1raWQgWzE2XSA7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZW5kaWYgLy9lbmRkZWYgX1dQQTJfCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gTUFDIEZyYW1lIHN0cnVjdHVyZSAoZGlmZmVyZW50IHR5cGUpIGFuZCBzdWJmaWVsZCBzdHJ1Y3R1cmUKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdHJ1Y3QgTUFDX2ZyYW1lX2NvbnRyb2wKK3sKKyAgICB1OCAgICBtYWNfZnJhbWVfaW5mbzsgLy8gYSBjb21iaW5hdGlvbiBvZiB0aGUgW1Byb3RvY29sIFZlcnNpb24sIENvbnRyb2wgVHlwZSwgQ29udHJvbCBTdWJ0eXBlXQorICAgICNpZmRlZiBfQklHX0VORElBTl8gLy8yMDA2MDkyNyBhZGQgYnkgYW5zb24ncyBlbmRpYW4KKyAgICB1OCAgICBvcmRlcjoxOworICAgIHU4ICAgIFdFUDoxOworICAgIHU4ICAgIG1vcmVfZGF0YToxOworICAgIHU4ICAgIHB3cl9tZ3Q6MTsKKyAgICB1OCAgICByZXRyeToxOworICAgIHU4ICAgIG1vcmVfZnJhZzoxOworICAgIHU4ICAgIGZyb21fZHM6MTsKKyAgICB1OCAgICB0b19kczoxOworICAgICNlbHNlCisgICAgdTggICAgdG9fZHM6MTsKKyAgICB1OCAgICBmcm9tX2RzOjE7CisgICAgdTggICAgbW9yZV9mcmFnOjE7CisgICAgdTggICAgcmV0cnk6MTsKKyAgICB1OCAgICBwd3JfbWd0OjE7CisgICAgdTggICAgbW9yZV9kYXRhOjE7CisgICAgdTggICAgV0VQOjE7CisgICAgdTggICAgb3JkZXI6MTsKKyAgICAjZW5kaWYKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgTWFuYWdlbWVudF9GcmFtZSB7CisgICAgc3RydWN0IE1BQ19mcmFtZV9jb250cm9sIGZyYW1lX2NvbnRyb2w7IC8vIDJCLCBUb0RTLEZyb21EUyxNb3JlRnJhZyxNb3JlRGF0YSxPcmRlcj0wCisgICAgdTE2CQlkdXJhdGlvbjsKKyAgICB1OAkJREFbTUFDX0FERFJfTEVOR1RIXTsJCQkvLyBBZGRyMQorICAgIHU4CQlTQVtNQUNfQUREUl9MRU5HVEhdOwkJCS8vIEFkZHIyCisgICAgdTgJCUJTU0lEW01BQ19BRERSX0xFTkdUSF07CQkJLy8gQWRkcjMKKyAgICB1MTYJCVNlcXVlbmNlX0NvbnRyb2w7CisgICAgLy8gTWFuYWdlbWVudCBGcmFtZSBCb2R5IDw9IDMyNSBieXRlcworICAgIC8vIEZDUyA0IGJ5dGVzCit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvLyBTVy1NQUMgZG9uJ3QgVHgvUnggQ29udHJvbC1GcmFtZSwgSFctTUFDIGRvIGl0Lgorc3RydWN0IENvbnRyb2xfRnJhbWUgeworICAgIHN0cnVjdCBNQUNfZnJhbWVfY29udHJvbCBmcmFtZV9jb250cm9sOyAvLyBUb0RTLEZyb21EUyxNb3JlRnJhZyxSZXRyeSxNb3JlRGF0YSxXRVAsT3JkZXI9MAorICAgIHUxNgkJZHVyYXRpb247CisgICAgdTgJCVJBW01BQ19BRERSX0xFTkdUSF07CisgICAgdTgJCVRBW01BQ19BRERSX0xFTkdUSF07CisgICAgdTE2CQlGQ1M7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgRGF0YV9GcmFtZSB7CisgICAgc3RydWN0IE1BQ19mcmFtZV9jb250cm9sIGZyYW1lX2NvbnRyb2w7CisgICAgdTE2CQlkdXJhdGlvbjsKKyAgICB1OAkJQWRkcjFbTUFDX0FERFJfTEVOR1RIXTsKKyAgICB1OAkJQWRkcjJbTUFDX0FERFJfTEVOR1RIXTsKKyAgICB1OAkJQWRkcjNbTUFDX0FERFJfTEVOR1RIXTsKKyAgICB1MTYJCVNlcXVlbmNlX0NvbnRyb2w7CisgICAgdTgJCUFkZHI0W01BQ19BRERSX0xFTkdUSF07IC8vIG9ubHkgZXhpc3Qgd2hlbiBUb0RTPUZyb21EUz0xCisgICAgLy8gRGF0YSBGcmFtZSBCb2R5IDw9IDIzMTIKKyAgICAvLyBGQ1MKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBEaXNhc3NvY2lhdGlvbl9GcmFtZV9Cb2R5Cit7CisgICAgdTE2ICAgIHJlYXNvbkNvZGU7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgQXNzb2NpYXRpb25fUmVxdWVzdF9GcmFtZV9Cb2R5Cit7CisgICAgdTE2ICAgIGNhcGFiaWxpdHlfaW5mb3JtYXRpb247CisgICAgdTE2ICAgIGxpc3RlbkludGVydmFsOworICAgIHU4ICAgICBDdXJyZW50X0FQX0FkZHJlc3NbTUFDX0FERFJfTEVOR1RIXTsvL2ZvciByZWFzc29jaWF0aW9uIG9ubHkKKyAgICAvLyBTU0lEICgyKzMyIGJ5dGVzKQorICAgIC8vIFN1cHBvcnRlZF9SYXRlcyAoMis4IGJ5dGVzKQorfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IEFzc29jaWF0aW9uX1Jlc3BvbnNlX0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgY2FwYWJpbGl0eV9pbmZvcm1hdGlvbjsKKyAgICB1MTYgICAgc3RhdHVzQ29kZTsKKyAgICB1MTYgICAgQXNzb2NpYXRpb25fSUQ7CisgICAgc3RydWN0IFN1cHBvcnRlZF9SYXRlc19FbGVtZW50IHN1cHBvcnRlZFJhdGVzOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLypzdHJ1Y3QgUmVhc3NvY2lhdGlvbl9SZXF1ZXN0X0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgY2FwYWJpbGl0eV9pbmZvcm1hdGlvbjsKKyAgICB1MTYgICAgbGlzdGVuSW50ZXJ2YWw7CisgICAgdTggICAgIEN1cnJlbnRfQVBfQWRkcmVzc1tNQUNfQUREUl9MRU5HVEhdOworICAgIC8vIFNTSUQgKDIrMzIgYnl0ZXMpCisgICAgLy8gU3VwcG9ydGVkX1JhdGVzICgyKzggYnl0ZXMpCit9OyovCisvLyBlbGltaW5hdGVkIGJ5IFdTIDA3LzIyLzA0IGNvbWJvaW5lZCB3aXRoIGFzc29jaWF0ZWlvbiByZXF1ZXN0IGZyYW1lLgorCitzdHJ1Y3QgUmVhc3NvY2lhdGlvbl9SZXNwb25zZV9GcmFtZV9Cb2R5Cit7CisgICAgdTE2ICAgIGNhcGFiaWxpdHlfaW5mb3JtYXRpb247CisgICAgdTE2ICAgIHN0YXR1c0NvZGU7CisgICAgdTE2ICAgIEFzc29jaWF0aW9uX0lEOworICAgIHN0cnVjdCBTdXBwb3J0ZWRfUmF0ZXNfRWxlbWVudCBzdXBwb3J0ZWRSYXRlczsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBEZWF1dGhlbnRpY2F0aW9uX0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgcmVhc29uQ29kZTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworc3RydWN0IFByb2JlX1Jlc3BvbnNlX0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgVGltZXN0YW1wOworICAgIHUxNiAgICBCZWFjb25fSW50ZXJ2YWw7CisgICAgdTE2ICAgIENhcGFiaWxpdHlfSW5mb3JtYXRpb247CisgICAgLy8gU1NJRAorICAgIC8vIFN1cHBvcnRlZF9SYXRlcworICAgIC8vIFBIWSBwYXJhbWV0ZXIgU2V0IChEUyBQYXJhbWV0ZXJzKQorICAgIC8vIENGIHBhcmFtZXRlciBTZXQKKyAgICAvLyBJQlNTIHBhcmFtZXRlciBTZXQKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBBdXRoZW50aWNhdGlvbl9GcmFtZV9Cb2R5Cit7CisgICAgdTE2ICAgIGFsZ29yaXRobU51bWJlcjsKKyAgICB1MTYgICAgc2VxdWVuY2VOdW1iZXI7CisgICAgdTE2ICAgIHN0YXR1c0NvZGU7CisgICAgLy8gTkI6IGRvbid0IGluY2x1ZGUgQ2hhbGxlbmdlVGV4dCBpbiB0aGlzIHN0cnVjdHVyZQorCS8vIHN0cnVjdCBDaGFsbGVuZ2VfVGV4dF9FbGVtZW50IHNDaGFsbGVuZ2VUZXh0RWxlbWVudDsgLy8gd2tjaGVuIGFkZGVkCit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKyNlbmRpZiAvLyBfTUFDX1N0cnVjdHVyZV9IXworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kcy5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNlNjM4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kcy5jCkBAIC0wLDAgKzEsNjMwIEBACisjaW5jbHVkZSAib3NfY29tbW9uLmgiCisKK3ZvaWQKK01kc19yZXNldF9kZXNjcmlwdG9yKFBBREFQVEVSIEFkYXB0ZXIpCit7CisJUE1EUyBwTWRzID0gJkFkYXB0ZXItPk1kczsKKworCXBNZHMtPlR4UGF1c2UgPSAwOworCXBNZHMtPlR4VGhyZWFkQ291bnQgPSAwOworCXBNZHMtPlR4RmlsbEluZGV4ID0gMDsKKwlwTWRzLT5UeERlc0luZGV4ID0gMDsKKwlwTWRzLT5TY2FuVHhQYXVzZSA9IDA7CisJbWVtc2V0KHBNZHMtPlR4T3duZXIsIDAsICgoTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSICsgMykgJiB+MHgwMykpOworfQorCit1bnNpZ25lZCBjaGFyCitNZHNfaW5pdGlhbChQQURBUFRFUiBBZGFwdGVyKQoreworCVBNRFMgcE1kcyA9ICZBZGFwdGVyLT5NZHM7CisKKwlwTWRzLT5UeFBhdXNlID0gRkFMU0U7CisJcE1kcy0+VHhSVFNUaHJlc2hvbGQgPSBERUZBVUxUX1JUU1RocmVzaG9sZDsKKwlwTWRzLT5UeEZyYWdtZW50VGhyZXNob2xkID0gREVGQVVMVF9GUkFHTUVOVF9USFJFU0hPTEQ7CisKKwl2UnhUaW1lckluaXQoQWRhcHRlcik7Ly9mb3IgV1BBIGNvdW50ZXJtZWFzdXJlCisKKwlyZXR1cm4gaGFsX2dldF90eF9idWZmZXIoICZBZGFwdGVyLT5zSHdEYXRhLCAmcE1kcy0+cFR4QnVmZmVyICk7Cit9CisKK3ZvaWQKK01kc19EZXN0cm95KFBBREFQVEVSIEFkYXB0ZXIpCit7CisJdlJ4VGltZXJTdG9wKEFkYXB0ZXIpOworfQorCit2b2lkCitNZHNfVHgoUEFEQVBURVIgQWRhcHRlcikKK3sKKwlwaHdfZGF0YV90CXBId0RhdGEgPSAmQWRhcHRlci0+c0h3RGF0YTsKKwlQTURTCQlwTWRzID0gJkFkYXB0ZXItPk1kczsKKwlERVNDUklQVE9SCVR4RGVzOworCVBERVNDUklQVE9SCXBUeERlcyA9ICZUeERlczsKKwlQVUNIQVIJCVhtaXRCdWZBZGRyZXNzOworCXUxNgkJWG1pdEJ1ZlNpemUsIFBhY2tldFNpemUsIHN0bXAsIEN1cnJlbnRTaXplLCBGcmFnbWVudFRocmVzaG9sZDsKKwl1OAkJRmlsbEluZGV4LCBUeERlc0luZGV4LCBGcmFnbWVudENvdW50LCBGaWxsQ291bnQ7CisJdW5zaWduZWQgY2hhcglCdWZmZXJGaWxsZWQgPSBGQUxTRSwgTUlDQWRkID0gMDsKKworCisJaWYgKHBNZHMtPlR4UGF1c2UpCisJCXJldHVybjsKKwlpZiAoIWhhbF9kcml2ZXJfaW5pdF9PSyhwSHdEYXRhKSkKKwkJcmV0dXJuOworCisJLy9Pbmx5IG9uZSB0aHJlYWQgY2FuIGJlIHJ1biBoZXJlCisJaWYgKCFPU19BVE9NSUNfSU5DKCBBZGFwdGVyLCAmcE1kcy0+VHhUaHJlYWRDb3VudCkgPT0gMSkKKwkJZ290byBjbGVhbnVwOworCisJLy8gU3RhcnQgdG8gZmlsbCB0aGUgZGF0YQorCWRvIHsKKwkJRmlsbEluZGV4ID0gcE1kcy0+VHhGaWxsSW5kZXg7CisJCWlmIChwTWRzLT5UeE93bmVyW0ZpbGxJbmRleF0pIHsgLy8gSXMgb3duZWQgYnkgc29mdHdhcmUgMDpZZXMgMTpObworI2lmZGVmIF9QRV9UWF9EVU1QXworCQkJV0JERUJVRygoIltNZHNfVHhdIFR4IE93bmVyIGlzIEgvVy5cbiIpKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKworCQlYbWl0QnVmQWRkcmVzcyA9IHBNZHMtPnBUeEJ1ZmZlciArIChNQVhfVVNCX1RYX0JVRkZFUiAqIEZpbGxJbmRleCk7IC8vR2V0IGJ1ZmZlcgorCQlYbWl0QnVmU2l6ZSA9IDA7CisJCUZpbGxDb3VudCA9IDA7CisJCWRvIHsKKwkJCVBhY2tldFNpemUgPSBBZGFwdGVyLT5zTWxtZUZyYW1lLmxlbjsKKwkJCWlmICghUGFja2V0U2l6ZSkKKwkJCQlicmVhazsKKworCQkJLy9Gb3IgQ2hlY2sgdGhlIGJ1ZmZlciByZXNvdXJjZQorCQkJRnJhZ21lbnRUaHJlc2hvbGQgPSBDVVJSRU5UX0ZSQUdNRU5UX1RIUkVTSE9MRDsKKwkJCS8vOTMxMTMwLjUuYgorCQkJRnJhZ21lbnRDb3VudCA9IFBhY2tldFNpemUvRnJhZ21lbnRUaHJlc2hvbGQgKyAxOworCQkJc3RtcCA9IFBhY2tldFNpemUgKyBGcmFnbWVudENvdW50KjMyICsgODsvLzkzMTEzMC41LmMgODpNSUMKKwkJCWlmICgoWG1pdEJ1ZlNpemUgKyBzdG1wKSA+PSBNQVhfVVNCX1RYX0JVRkZFUikgeworCQkJCXByaW50aygiW01kc19UeF0gRXhjZXNzIG1heCB0eCBidWZmZXIuXG4iKTsKKwkJCQlicmVhazsgLy8gYnVmZmVyIGlzIG5vdCBlbm91Z2gKKwkJCX0KKworCisJCQkvLworCQkJLy8gU3RhcnQgdHJhbnNtaXR0aW5nCisJCQkvLworCQkJQnVmZmVyRmlsbGVkID0gVFJVRTsKKworCQkJLyogTGVhdmVzIGZpcnN0IHU4IGludGFjdCAqLworCQkJbWVtc2V0KChQVUNIQVIpcFR4RGVzICsgMSwgMCwgc2l6ZW9mKERFU0NSSVBUT1IpIC0gMSk7CisKKwkJCVR4RGVzSW5kZXggPSBwTWRzLT5UeERlc0luZGV4Oy8vR2V0IHRoZSBjdXJyZW50IElECisJCQlwVHhEZXMtPkRlc2NyaXB0b3JfSUQgPSBUeERlc0luZGV4OworCQkJcE1kcy0+VHhEZXNGcm9tWyBUeERlc0luZGV4IF0gPSAyOy8vU3RvcmluZyB0aGUgaW5mb3JtYXRpb24gb2Ygc291cmNlIGNvbW1pbmcgZnJvbQorCQkJcE1kcy0+VHhEZXNJbmRleCsrOworCQkJcE1kcy0+VHhEZXNJbmRleCAlPSBNQVhfVVNCX1RYX0RFU0NSSVBUT1I7CisKKwkJCU1MTUVfR2V0TmV4dFBhY2tldCggQWRhcHRlciwgcFR4RGVzICk7CisKKwkJCS8vIENvcHkgaGVhZGVyLiA4Ynl0ZSBVU0IgKyAyNGJ5dGUgODAyLjExSGRyLiBTZXQgVHhSYXRlLCBQcmVhbWJsZSB0eXBlCisJCQlNZHNfSGVhZGVyQ29weSggQWRhcHRlciwgcFR4RGVzLCBYbWl0QnVmQWRkcmVzcyApOworCisJCQkvLyBGb3Igc3BlZWQgdXAgS2V5IHNldHRpbmcKKwkJCWlmIChwVHhEZXMtPkVhcEZpeCkgeworI2lmZGVmIF9QRV9UWF9EVU1QXworCQkJCVdCREVCVUcoKCIzNTogRVBBIDR0aCBmcmFtZSBkZXRlY3RlZC4gU2l6ZSA9ICVkXG4iLCBQYWNrZXRTaXplKSk7CisjZW5kaWYKKwkJCQlwSHdEYXRhLT5Jc0tleVByZVNldCA9IDE7CisJCQl9CisKKwkJCS8vIENvcHkgKGZyYWdtZW50KSBmcmFtZSBib2R5LCBhbmQgc2V0IFVTQiwgODAyLjExIGhkciBmbGFnCisJCQlDdXJyZW50U2l6ZSA9IE1kc19Cb2R5Q29weShBZGFwdGVyLCBwVHhEZXMsIFhtaXRCdWZBZGRyZXNzKTsKKworCQkJLy8gU2V0IFJUUy9DVFMgYW5kIE5vcm1hbCBkdXJhdGlvbiBmaWVsZCBpbnRvIGJ1ZmZlcgorCQkJTWRzX0R1cmF0aW9uU2V0KEFkYXB0ZXIsIHBUeERlcywgWG1pdEJ1ZkFkZHJlc3MpOworCisJCQkvLworCQkJLy8gQ2FsY3VsYXRpb24gTUlDIGZyb20gYnVmZmVyIHdoaWNoIG1heWJlIGZyYWdtZW50LCB0aGVuIGZpbGwgaW50byB0ZW1wb3JhcnkgYWRkcmVzcyA4IGJ5dGUKKwkJCS8vIDkzMTEzMC41LmUKKwkJCWlmIChNSUNBZGQpCisJCQkJTWRzX01pY0ZpbGwoIEFkYXB0ZXIsIHBUeERlcywgWG1pdEJ1ZkFkZHJlc3MgKTsKKworCQkJLy9TaGlmdCB0byB0aGUgbmV4dCBhZGRyZXNzCisJCQlYbWl0QnVmU2l6ZSArPSBDdXJyZW50U2l6ZTsKKwkJCVhtaXRCdWZBZGRyZXNzICs9IEN1cnJlbnRTaXplOworCisjaWZkZWYgX0lCU1NfQkVBQ09OX1NFUV9TVElDS18KKwkJCWlmICgoWG1pdEJ1ZkFkZHJlc3NbIERPVF8xMV9EQV9PRkZTRVQrOCBdICYgMHhmYykgIT0gTUFDX1NVQlRZUEVfTU5HTU5UX1BST0JFX1JFUVVFU1QpIC8vICs4IGZvciBVU0IgaGRyCisjZW5kaWYKKwkJCQlwTWRzLT5UeFRvZ2dsZSA9IFRSVUU7CisKKwkJCS8vIEdldCBwYWNrZXQgdG8gdHJhbnNtaXQgY29tcGxldGVkLCAxOlRFU1RTVEEgMjpNTE1FIDM6IE5kaXMgZGF0YQorCQkJTUxNRV9TZW5kQ29tcGxldGUoQWRhcHRlciwgMCwgVFJVRSk7CisKKwkJCS8vIFNvZnR3YXJlIFRTQyBjb3VudCAyMDA2MDIxNAorCQkJcE1kcy0+VHhUc2MrKzsKKwkJCWlmIChwTWRzLT5UeFRzYyA9PSAwKQorCQkJCXBNZHMtPlR4VHNjXzIrKzsKKworCQkJRmlsbENvdW50Kys7IC8vIDIwMDYwOTI4CisJCX0gd2hpbGUgKEhBTF9VU0JfTU9ERV9CVVJTVChwSHdEYXRhKSk7IC8vIEVuZCBvZiBtdWx0aXBsZSBNU0RVIGNvcHkgbG9vcC4gRkFMU0UgPSBzaW5nbGUgVFJVRSA9IG11bHRpcGxlIHNlbmRpbmcKKworCQkvLyBNb3ZlIHRvIHRoZSBuZXh0IG9uZSwgaWYgbmVjZXNzYXJ5CisJCWlmIChCdWZmZXJGaWxsZWQpIHsKKwkJCS8vIHNpemUgc2V0dGluZworCQkJcE1kcy0+VHhCdWZmZXJTaXplWyBGaWxsSW5kZXggXSA9IFhtaXRCdWZTaXplOworCisJCQkvLyAyMDA2MDkyOCBzZXQgVHggY291bnQKKwkJCXBNZHMtPlR4Q291bnRJbkJ1ZmZlcltGaWxsSW5kZXhdID0gRmlsbENvdW50OworCisJCQkvLyBTZXQgb3duZXIgZmxhZworCQkJcE1kcy0+VHhPd25lcltGaWxsSW5kZXhdID0gMTsKKworCQkJcE1kcy0+VHhGaWxsSW5kZXgrKzsKKwkJCXBNZHMtPlR4RmlsbEluZGV4ICU9IE1BWF9VU0JfVFhfQlVGRkVSX05VTUJFUjsKKwkJCUJ1ZmZlckZpbGxlZCA9IEZBTFNFOworCQl9IGVsc2UKKwkJCWJyZWFrOworCisJCWlmICghUGFja2V0U2l6ZSkgLy8gTm8gbW9yZSBwayBmb3IgdHJhbnNtaXR0aW5nCisJCQlicmVhazsKKworCX0gd2hpbGUoVFJVRSk7CisKKwkvLworCS8vIFN0YXJ0IHRvIHNlbmQgYnkgbG93ZXIgbW9kdWxlCisJLy8KKwlpZiAoIXBId0RhdGEtPklzS2V5UHJlU2V0KQorCQlXYjM1VHhfc3RhcnQocEh3RGF0YSk7CisKKyBjbGVhbnVwOgorCU9TX0FUT01JQ19ERUMoIEFkYXB0ZXIsICZwTWRzLT5UeFRocmVhZENvdW50ICk7Cit9CisKK3ZvaWQKK01kc19TZW5kQ29tcGxldGUoUEFEQVBURVIgQWRhcHRlciwgUFQwMl9ERVNDUklQVE9SIHBUMDIpCit7CisJUE1EUwlwTWRzID0gJkFkYXB0ZXItPk1kczsKKwlwaHdfZGF0YV90CXBId0RhdGEgPSAmQWRhcHRlci0+c0h3RGF0YTsKKwl1OAlQYWNrZXRJZCA9ICh1OClwVDAyLT5UMDJfVHhfUGt0SUQ7CisJdW5zaWduZWQgY2hhcglTZW5kT0sgPSBUUlVFOworCXU4CVJldHJ5Q291bnQsIFR4UmF0ZTsKKworCWlmIChwVDAyLT5UMDJfSWdub3JlUmVzdWx0KSAvLyBEb24ndCBjYXJlIHRoZSByZXN1bHQKKwkJcmV0dXJuOworCWlmIChwVDAyLT5UMDJfSXNMYXN0TXBkdSkgeworCQkvL1RPRE86IERUTyAtLSBnZXQgdGhlIHJldHJ5IGNvdW50IGFuZCBmcmFnbWVudCBjb3VudAorCQkvLyBUeCByYXRlCisJCVR4UmF0ZSA9IHBNZHMtPlR4UmF0ZVsgUGFja2V0SWQgXVsgMCBdOworCQlSZXRyeUNvdW50ID0gKHU4KXBUMDItPlQwMl9NUERVX0NudDsKKwkJaWYgKHBUMDItPnZhbHVlICYgRkxBR19FUlJPUl9UWF9NQVNLKSB7CisJCQlTZW5kT0sgPSBGQUxTRTsKKworCQkJaWYgKHBUMDItPlQwMl90cmFuc21pdF9hYm9ydCB8fCBwVDAyLT5UMDJfb3V0X29mX01heFR4TVNEVUxpZnRUaW1lKSB7CisJCQkJLy9yZXRyeSBlcnJvcgorCQkJCXBId0RhdGEtPmR0b190eF9yZXRyeV9jb3VudCArPSAoUmV0cnlDb3VudCsxKTsKKwkJCQkvL1tmb3IgdHggZGVidWddCisJCQkJaWYgKFJldHJ5Q291bnQ8NykKKwkJCQkJcEh3RGF0YS0+dHhfcmV0cnlfY291bnRbUmV0cnlDb3VudF0gKz0gUmV0cnlDb3VudDsKKwkJCQllbHNlCisJCQkJCXBId0RhdGEtPnR4X3JldHJ5X2NvdW50WzddICs9IFJldHJ5Q291bnQ7CisJCQkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCQkJCVdCREVCVUcoKCJkdG9fdHhfcmV0cnlfY291bnQgPSVkXG4iLCBwSHdEYXRhLT5kdG9fdHhfcmV0cnlfY291bnQpKTsKKwkJCQkjZW5kaWYKKwkJCQlNVE9fU2V0VHhDb3VudChBZGFwdGVyLCBUeFJhdGUsIFJldHJ5Q291bnQpOworCQkJfQorCQkJcEh3RGF0YS0+ZHRvX3R4X2ZyYWdfY291bnQgKz0gKFJldHJ5Q291bnQrMSk7CisKKwkJCS8vW2ZvciB0eCBkZWJ1Z10KKwkJCWlmIChwVDAyLT5UMDJfdHJhbnNtaXRfYWJvcnRfZHVlX3RvX1RCVFQpCisJCQkJcEh3RGF0YS0+dHhfVEJUVF9zdGFydF9jb3VudCsrOworCQkJaWYgKHBUMDItPlQwMl90cmFuc21pdF93aXRob3V0X2VuY3J5cHRpb25fZHVlX3RvX3dlcF9vbl9mYWxzZSkKKwkJCQlwSHdEYXRhLT50eF9XZXBPbl9mYWxzZV9jb3VudCsrOworCQkJaWYgKHBUMDItPlQwMl9kaXNjYXJkX2R1ZV90b19udWxsX3dlcF9rZXkpCisJCQkJcEh3RGF0YS0+dHhfTnVsbF9rZXlfY291bnQrKzsKKwkJfSBlbHNlIHsKKwkJCWlmIChwVDAyLT5UMDJfZWZmZWN0aXZlX3RyYW5zbWlzc2lvbl9yYXRlKQorCQkJCXBId0RhdGEtPnR4X0VUUl9jb3VudCsrOworCQkJTVRPX1NldFR4Q291bnQoQWRhcHRlciwgVHhSYXRlLCBSZXRyeUNvdW50KTsKKwkJfQorCisJCS8vIENsZWFyIHNlbmQgcmVzdWx0IGJ1ZmZlcgorCQlwTWRzLT5UeFJlc3VsdFsgUGFja2V0SWQgXSA9IDA7CisJfSBlbHNlCisJCXBNZHMtPlR4UmVzdWx0WyBQYWNrZXRJZCBdIHw9ICgodTE2KShwVDAyLT52YWx1ZSAmIDB4MGZmZmYpKTsKK30KKwordm9pZAorTWRzX0hlYWRlckNvcHkoUEFEQVBURVIgQWRhcHRlciwgUERFU0NSSVBUT1IgcERlcywgUFVDSEFSIFRhcmdldEJ1ZmZlcikKK3sKKwlQTURTCXBNZHMgPSAmQWRhcHRlci0+TWRzOworCVBVQ0hBUglzcmNfYnVmZmVyID0gcERlcy0+YnVmZmVyX2FkZHJlc3NbMF07Ly85MzExMzAuNS5nCisJUFQwMF9ERVNDUklQVE9SCXBUMDA7CisJUFQwMV9ERVNDUklQVE9SCXBUMDE7CisJdTE2CXN0bXA7CisJdTgJaSwgY3RtcDEsIGN0bXAyLCBjdG1wZjsKKwl1MTYJRnJhZ21lbnRUaHJlc2hvbGQgPSBDVVJSRU5UX0ZSQUdNRU5UX1RIUkVTSE9MRDsKKworCisJc3RtcCA9IHBEZXMtPmJ1ZmZlcl90b3RhbF9zaXplOworCS8vCisJLy8gU2V0IFVTQiBoZWFkZXIgOCBieXRlCisJLy8KKwlwVDAwID0gKFBUMDBfREVTQ1JJUFRPUilUYXJnZXRCdWZmZXI7CisJVGFyZ2V0QnVmZmVyICs9IDQ7CisJcFQwMSA9IChQVDAxX0RFU0NSSVBUT1IpVGFyZ2V0QnVmZmVyOworCVRhcmdldEJ1ZmZlciArPSA0OworCisJcFQwMC0+dmFsdWUgPSAwOy8vIENsZWFyCisJcFQwMS0+dmFsdWUgPSAwOy8vIENsZWFyCisKKwlwVDAwLT5UMDBfdHhfcGFja2V0X2lkID0gcERlcy0+RGVzY3JpcHRvcl9JRDsvLyBTZXQgcGFja2V0IElECisJcFQwMC0+VDAwX2hlYWRlcl9sZW5ndGggPSAyNDsvLyBTZXQgaGVhZGVyIGxlbmd0aAorCXBUMDEtPlQwMV9yZXRyeV9hYm9ydF9lYmFibGUgPSAxOy8vOTIxMDEzIDkzMTEzMC41LmgKKworCS8vIEtleSBJRCBzZXR1cAorCXBUMDEtPlQwMV93ZXBfaWQgPSAwOworCisJRnJhZ21lbnRUaHJlc2hvbGQgPSBERUZBVUxUX0ZSQUdNRU5UX1RIUkVTSE9MRDsJLy9EbyBub3QgZnJhZ21lbnQKKwkvLyBDb3B5IGZ1bGwgZGF0YSwgdGhlIDEnc3QgYnVmZmVyIGNvbnRhaW4gYWxsIHRoZSBkYXRhIDkzMTEzMC41LmoKKwltZW1jcHkoIFRhcmdldEJ1ZmZlciwgc3JjX2J1ZmZlciwgRE9UXzExX01BQ19IRUFERVJfU0laRSApOy8vIENvcHkgaGVhZGVyCisJcERlcy0+YnVmZmVyX2FkZHJlc3NbMF0gPSBzcmNfYnVmZmVyICsgRE9UXzExX01BQ19IRUFERVJfU0laRTsKKwlwRGVzLT5idWZmZXJfdG90YWxfc2l6ZSAtPSBET1RfMTFfTUFDX0hFQURFUl9TSVpFOworCXBEZXMtPmJ1ZmZlcl9zaXplWzBdID0gcERlcy0+YnVmZmVyX3RvdGFsX3NpemU7CisKKwkvLyBTZXQgZnJhZ21lbnQgdGhyZXNob2xkCisJRnJhZ21lbnRUaHJlc2hvbGQgLT0gKERPVF8xMV9NQUNfSEVBREVSX1NJWkUgKyA0KTsKKwlwRGVzLT5GcmFnbWVudFRocmVzaG9sZCA9IEZyYWdtZW50VGhyZXNob2xkOworCisJLy8gU2V0IG1vcmUgZnJhZyBiaXQKKwlUYXJnZXRCdWZmZXJbMV0gfD0gMHgwNDsvLyBTZXQgbW9yZSBmcmFnIGJpdAorCisJLy8KKwkvLyBTZXQgdHggcmF0ZQorCS8vCisJc3RtcCA9ICooUFVTSE9SVCkoVGFyZ2V0QnVmZmVyKzMwKTsgLy8gMm4gYWxpZ25tZW50IGFkZHJlc3MKKworCS8vVXNlIGJhc2ljIHJhdGUKKwljdG1wMSA9IGN0bXBmID0gQ1VSUkVOVF9UWF9SQVRFX0ZPUl9NTkc7CisKKwlwRGVzLT5UeFJhdGUgPSBjdG1wMTsKKwkjaWZkZWYgX1BFX1RYX0RVTVBfCisJV0JERUJVRygoIlR4IHJhdGUgPSV4XG4iLCBjdG1wMSkpOworCSNlbmRpZgorCisJcFQwMS0+VDAxX21vZHVsYXRpb25fdHlwZSA9IChjdG1wMSUzKSA/IDAgOiAxOworCisJZm9yKCBpPTA7IGk8MjsgaSsrICkgeworCQlpZiggaSA9PSAxICkKKwkJCWN0bXAxID0gY3RtcGY7CisKKwkJcE1kcy0+VHhSYXRlW3BEZXMtPkRlc2NyaXB0b3JfSURdW2ldID0gY3RtcDE7IC8vIGJhY2t1cCB0aGUgdGEgcmF0ZSBhbmQgZmFsbCBiYWNrIHJhdGUKKworCQlpZiggY3RtcDEgPT0gMTA4KSBjdG1wMiA9IDc7CisJCWVsc2UgaWYoIGN0bXAxID09IDk2ICkgY3RtcDIgPSA2OyAvLyBSYXRlIGNvbnZlcnQgZm9yIFVTQgorCQllbHNlIGlmKCBjdG1wMSA9PSA3MiApIGN0bXAyID0gNTsKKwkJZWxzZSBpZiggY3RtcDEgPT0gNDggKSBjdG1wMiA9IDQ7CisJCWVsc2UgaWYoIGN0bXAxID09IDM2ICkgY3RtcDIgPSAzOworCQllbHNlIGlmKCBjdG1wMSA9PSAyNCApIGN0bXAyID0gMjsKKwkJZWxzZSBpZiggY3RtcDEgPT0gMTggKSBjdG1wMiA9IDE7CisJCWVsc2UgaWYoIGN0bXAxID09IDEyICkgY3RtcDIgPSAwOworCQllbHNlIGlmKCBjdG1wMSA9PSAyMiApIGN0bXAyID0gMzsKKwkJZWxzZSBpZiggY3RtcDEgPT0gMTEgKSBjdG1wMiA9IDI7CisJCWVsc2UgaWYoIGN0bXAxID09IDQgICkgY3RtcDIgPSAxOworCQllbHNlIGN0bXAyID0gMDsgLy8gaWYoIGN0bXAxID09IDIgICkgb3IgZGVmYXVsdAorCisJCWlmKCBpID09IDAgKQorCQkJcFQwMS0+VDAxX3RyYW5zbWl0X3JhdGUgPSBjdG1wMjsKKwkJZWxzZQorCQkJcFQwMS0+VDAxX2ZhbGxfYmFja19yYXRlID0gY3RtcDI7CisJfQorCisJLy8KKwkvLyBTZXQgcHJlYW1ibGUgdHlwZQorCS8vCisJaWYgKChwVDAxLT5UMDFfbW9kdWxhdGlvbl90eXBlID09IDApICYmIChwVDAxLT5UMDFfdHJhbnNtaXRfcmF0ZSA9PSAwKSkJLy8gUkFURV8xTQorCQlwRGVzLT5QcmVhbWJsZU1vZGUgPSAgV0xBTl9QUkVBTUJMRV9UWVBFX0xPTkc7CisJZWxzZQorCQlwRGVzLT5QcmVhbWJsZU1vZGUgPSAgQ1VSUkVOVF9QUkVBTUJMRV9NT0RFOworCXBUMDEtPlQwMV9wbGNwX2hlYWRlcl9sZW5ndGggPSBwRGVzLT5QcmVhbWJsZU1vZGU7CS8vIFNldCBwcmVhbWJsZQorCit9CisKKy8vIFRoZSBmdW5jdGlvbiByZXR1cm4gdGhlIDRuIHNpemUgb2YgdXNiIHBrCit1MTYKK01kc19Cb2R5Q29weShQQURBUFRFUiBBZGFwdGVyLCBQREVTQ1JJUFRPUiBwRGVzLCBQVUNIQVIgVGFyZ2V0QnVmZmVyKQoreworCVBUMDBfREVTQ1JJUFRPUglwVDAwOworCVBNRFMJcE1kcyA9ICZBZGFwdGVyLT5NZHM7CisJUFVDSEFSCWJ1ZmZlciwgc3JjX2J1ZmZlciwgcGN0bXA7CisJdTE2CVNpemUgPSAwOworCXUxNglTaXplTGVmdCwgQ29weVNpemUsIENvcHlMZWZ0LCBzdG1wOworCXU4CWJ1Zl9pbmRleCwgRnJhZ21lbnRDb3VudCA9IDA7CisKKworCS8vIENvcHkgZnJhZ21lbnQgYm9keQorCWJ1ZmZlciA9IFRhcmdldEJ1ZmZlcjsgLy8gc2hpZnQgOEIgdXNiICsgMjRCIDgwMi4xMQorCVNpemVMZWZ0ID0gcERlcy0+YnVmZmVyX3RvdGFsX3NpemU7CisJYnVmX2luZGV4ID0gcERlcy0+YnVmZmVyX3N0YXJ0X2luZGV4OworCisJcFQwMCA9IChQVDAwX0RFU0NSSVBUT1IpYnVmZmVyOworCXdoaWxlIChTaXplTGVmdCkgeworCQlwVDAwID0gKFBUMDBfREVTQ1JJUFRPUilidWZmZXI7CisJCUNvcHlTaXplID0gU2l6ZUxlZnQ7CisJCWlmIChTaXplTGVmdCA+IHBEZXMtPkZyYWdtZW50VGhyZXNob2xkKSB7CisJCQlDb3B5U2l6ZSA9IHBEZXMtPkZyYWdtZW50VGhyZXNob2xkOworCQkJcFQwMC0+VDAwX2ZyYW1lX2xlbmd0aCA9IDI0ICsgQ29weVNpemU7Ly9TZXQgVVNCIGxlbmd0aAorCQl9IGVsc2UKKwkJCXBUMDAtPlQwMF9mcmFtZV9sZW5ndGggPSAyNCArIFNpemVMZWZ0Oy8vU2V0IFVTQiBsZW5ndGgKKworCQlTaXplTGVmdCAtPSBDb3B5U2l6ZTsKKworCQkvLyAxIEJ5dGUgb3BlcmF0aW9uCisJCXBjdG1wID0gKFBVQ0hBUikoIGJ1ZmZlciArIDggKyBET1RfMTFfU0VRVUVOQ0VfT0ZGU0VUICk7CisJCSpwY3RtcCAmPSAweGYwOworCQkqcGN0bXAgfD0gRnJhZ21lbnRDb3VudDsvLzkzMTEzMC41Lm0KKwkJaWYoICFGcmFnbWVudENvdW50ICkKKwkJCXBUMDAtPlQwMF9maXJzdF9tcGR1ID0gMTsKKworCQlidWZmZXIgKz0gMzI7IC8vIDhCIHVzYiArIDI0QiA4MDIuMTEgaGVhZGVyCisJCVNpemUgKz0gMzI7CisKKwkJLy8gQ29weSBpbnRvIGJ1ZmZlcgorCQlzdG1wID0gQ29weVNpemUgKyAzOworCQlzdG1wICY9IH4weDAzOy8vNG4gQWxpZ25tZW50CisJCVNpemUgKz0gc3RtcDsvLyBDdXJyZW50IDRuIG9mZnNldCBvZiBtcGR1CisKKwkJd2hpbGUgKENvcHlTaXplKSB7CisJCQkvLyBDb3B5IGJvZHkKKwkJCXNyY19idWZmZXIgPSBwRGVzLT5idWZmZXJfYWRkcmVzc1tidWZfaW5kZXhdOworCQkJQ29weUxlZnQgPSBDb3B5U2l6ZTsKKwkJCWlmIChDb3B5U2l6ZSA+PSBwRGVzLT5idWZmZXJfc2l6ZVtidWZfaW5kZXhdKSB7CisJCQkJQ29weUxlZnQgPSBwRGVzLT5idWZmZXJfc2l6ZVtidWZfaW5kZXhdOworCisJCQkJLy8gR2V0IHRoZSBuZXh0IGJ1ZmZlciBvZiBkZXNjcmlwdG9yCisJCQkJYnVmX2luZGV4Kys7CisJCQkJYnVmX2luZGV4ICU9IE1BWF9ERVNDUklQVE9SX0JVRkZFUl9JTkRFWDsKKwkJCX0gZWxzZSB7CisJCQkJUFVDSEFSCXBjdG1wID0gcERlcy0+YnVmZmVyX2FkZHJlc3NbYnVmX2luZGV4XTsKKwkJCQlwY3RtcCArPSBDb3B5U2l6ZTsKKwkJCQlwRGVzLT5idWZmZXJfYWRkcmVzc1tidWZfaW5kZXhdID0gcGN0bXA7CisJCQkJcERlcy0+YnVmZmVyX3NpemVbYnVmX2luZGV4XSAtPSBDb3B5U2l6ZTsKKwkJCX0KKworCQkJbWVtY3B5KGJ1ZmZlciwgc3JjX2J1ZmZlciwgQ29weUxlZnQpOworCQkJYnVmZmVyICs9IENvcHlMZWZ0OworCQkJQ29weVNpemUgLT0gQ29weUxlZnQ7CisJCX0KKworCQkvLyA5MzExMzAuNS5uCisJCWlmIChwTWRzLT5NaWNBZGQpIHsKKwkJCWlmICghU2l6ZUxlZnQpIHsKKwkJCQlwTWRzLT5NaWNXcml0ZUFkZHJlc3NbIHBNZHMtPk1pY1dyaXRlSW5kZXggXSA9IGJ1ZmZlciAtIHBNZHMtPk1pY0FkZDsKKwkJCQlwTWRzLT5NaWNXcml0ZVNpemVbIHBNZHMtPk1pY1dyaXRlSW5kZXggXSA9IHBNZHMtPk1pY0FkZDsKKwkJCQlwTWRzLT5NaWNBZGQgPSAwOworCQkJfQorCQkJZWxzZSBpZiggU2l6ZUxlZnQgPCA4ICkgLy85MzExMzAuNS5wCisJCQl7CisJCQkJcE1kcy0+TWljQWRkID0gU2l6ZUxlZnQ7CisJCQkJcE1kcy0+TWljV3JpdGVBZGRyZXNzWyBwTWRzLT5NaWNXcml0ZUluZGV4IF0gPSBidWZmZXIgLSAoIDggLSBTaXplTGVmdCApOworCQkJCXBNZHMtPk1pY1dyaXRlU2l6ZVsgcE1kcy0+TWljV3JpdGVJbmRleCBdID0gOCAtIFNpemVMZWZ0OworCQkJCXBNZHMtPk1pY1dyaXRlSW5kZXgrKzsKKwkJCX0KKwkJfQorCisJCS8vIERvZXMgaXQgbmVlZCB0byBnZW5lcmF0ZSB0aGUgbmV3IGhlYWRlciBmb3IgbmV4dCBtcGR1PworCQlpZiAoU2l6ZUxlZnQpIHsKKwkJCWJ1ZmZlciA9IFRhcmdldEJ1ZmZlciArIFNpemU7IC8vIEdldCB0aGUgbmV4dCA0biBzdGFydCBhZGRyZXNzCisJCQltZW1jcHkoIGJ1ZmZlciwgVGFyZ2V0QnVmZmVyLCAzMiApOy8vQ29weSA4QiBVU0IgKzI0QiA4MDIuMTEKKwkJCXBUMDAgPSAoUFQwMF9ERVNDUklQVE9SKWJ1ZmZlcjsKKwkJCXBUMDAtPlQwMF9maXJzdF9tcGR1ID0gMDsKKwkJfQorCisJCUZyYWdtZW50Q291bnQrKzsKKwl9CisKKwlwVDAwLT5UMDBfbGFzdF9tcGR1ID0gMTsKKwlwVDAwLT5UMDBfSXNMYXN0TXBkdSA9IDE7CisJYnVmZmVyID0gKFBVQ0hBUilwVDAwICsgODsgLy8gKzggZm9yIFVTQiBoZHIKKwlidWZmZXJbMV0gJj0gfjB4MDQ7IC8vIENsZWFyIG1vcmUgZnJhZyBiaXQgb2YgODAyLjExIGZyYW1lIGNvbnRyb2wKKwlwRGVzLT5GcmFnbWVudENvdW50ID0gRnJhZ21lbnRDb3VudDsgLy8gVXBkYXRlIHRoZSBjb3JyZWN0IGZyYWdtZW50IG51bWJlcgorCXJldHVybiBTaXplOworfQorCisKK3ZvaWQKK01kc19EdXJhdGlvblNldCggIFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzLCAgUFVDSEFSIGJ1ZmZlciApCit7CisJUFQwMF9ERVNDUklQVE9SCXBUMDA7CisJUFQwMV9ERVNDUklQVE9SCXBUMDE7CisJdTE2CUR1cmF0aW9uLCBOZXh0Qm9keUxlbiwgT2Zmc2V0U2l6ZTsKKwl1OAlSYXRlLCBpOworCXVuc2lnbmVkIGNoYXIJQ1RTX29uID0gRkFMU0UsIFJUU19vbiA9IEZBTFNFOworCVBUMDBfREVTQ1JJUFRPUiBwTmV4dFQwMDsKKwl1MTYgQm9keUxlbjsKKwl1bnNpZ25lZCBjaGFyIGJvR3JvdXBBZGRyID0gRkFMU0U7CisKKworCU9mZnNldFNpemUgPSBwRGVzLT5GcmFnbWVudFRocmVzaG9sZCArIDMyICsgMzsKKwlPZmZzZXRTaXplICY9IH4weDAzOworCVJhdGUgPSBwRGVzLT5UeFJhdGUgPj4gMTsKKwlpZiAoIVJhdGUpCisJCVJhdGUgPSAxOworCisJcFQwMCA9IChQVDAwX0RFU0NSSVBUT1IpYnVmZmVyOworCXBUMDEgPSAoUFQwMV9ERVNDUklQVE9SKShidWZmZXIrNCk7CisJcE5leHRUMDAgPSAoUFQwMF9ERVNDUklQVE9SKShidWZmZXIrT2Zmc2V0U2l6ZSk7CisKKwlpZiggYnVmZmVyWyBET1RfMTFfREFfT0ZGU0VUKzggXSAmIDB4MSApIC8vICs4IGZvciBVU0IgaGRyCisJCWJvR3JvdXBBZGRyID0gVFJVRTsKKworCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCS8vIFNldCBSVFMvQ1RTIG1lY2hhbmlzbQorCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCWlmICghYm9Hcm91cEFkZHIpCisJeworCQkvL05PVEUgOiBJZiB0aGUgcHJvdGVjdGlvbiBtb2RlIGlzIGVuYWJsZWQgYW5kIHRoZSBNU0RVIHdpbGwgYmUgZnJhZ21lbnRlZCwKKwkJLy8JCSB0aGUgdHggcmF0ZXMgb2YgTVBEVXMgd2lsbCBhbGwgYmUgRFNTUyByYXRlcy4gU28gaXQgd2lsbCBub3QgdXNlCisJCS8vCQkgQ1RTLXRvLXNlbGYgaW4gdGhpcyBjYXNlLiBDVFMtVG8tc2VsZiB3aWxsIG9ubHkgYmUgdXNlZCB3aGVuIHdpdGhvdXQKKwkJLy8JCSBmcmFnbWVudGF0aW9uLiAtLSAyMDA1MDExMgorCQlCb2R5TGVuID0gKHUxNilwVDAwLT5UMDBfZnJhbWVfbGVuZ3RoOwkvL2luY2x1ZGUgODAyLjExIGhlYWRlcgorCQlCb2R5TGVuICs9IDQ7CS8vQ1JDCisKKwkJaWYoIEJvZHlMZW4gPj0gQ1VSUkVOVF9SVFNfVEhSRVNIT0xEICkKKwkJCVJUU19vbiA9IFRSVUU7IC8vIFVzaW5nIFJUUworCQllbHNlCisJCXsKKwkJCWlmKCBwVDAxLT5UMDFfbW9kdWxhdGlvbl90eXBlICkgLy8gSXMgdXNpbmcgT0ZETQorCQkJeworCQkJCWlmKCBDVVJSRU5UX1BST1RFQ1RfTUVDSEFOSVNNICkgLy8gSXMgdXNpbmcgcHJvdGVjdAorCQkJCQlDVFNfb24gPSBUUlVFOyAvLyBVc2luZyBDVFMKKwkJCX0KKwkJfQorCX0KKworCWlmKCBSVFNfb24gfHwgQ1RTX29uICkKKwl7CisJCWlmKCBwVDAxLT5UMDFfbW9kdWxhdGlvbl90eXBlKSAvLyBJcyB1c2luZyBPRkRNCisJCXsKKwkJCS8vQ1RTIGR1cmF0aW9uCisJCQkvLyAyIFNJRlMgKyBEQVRBIHRyYW5zbWl0IHRpbWUgKyAxIEFDSworCQkJLy8gQUNLIFJhdGUgOiAyNCBNZWdhIGJwcworCQkJLy8gQUNLIGZyYW1lIGxlbmd0aCA9IDE0IGJ5dGVzCisJCQlEdXJhdGlvbiA9IDIqREVGQVVMVF9TSUZTVElNRSArCisJCQkJCSAgIDIqUFJFQU1CTEVfUExVU19TSUdOQUxfUExVU19TSUdOQUxFWFRFTlNJT04gKworCQkJCQkgICAoKEJvZHlMZW4qOCArIDIyICsgUmF0ZSo0IC0gMSkvKFJhdGUqNCkpKlRzeW0gKworCQkJCQkgICAoKDExMiArIDIyICsgOTUpLzk2KSpUc3ltOworCQl9CisJCWVsc2UJLy9EU1NTCisJCXsKKwkJCS8vQ1RTIGR1cmF0aW9uCisJCQkvLyAyIFNJRlMgKyBEQVRBIHRyYW5zbWl0IHRpbWUgKyAxIEFDSworCQkJLy8gUmF0ZSA6ID8/IE1lZ2EgYnBzCisJCQkvLyBBQ0sgZnJhbWUgbGVuZ3RoID0gMTQgYnl0ZXMKKwkJCWlmKCBwVDAxLT5UMDFfcGxjcF9oZWFkZXJfbGVuZ3RoICkgLy9sb25nIHByZWFtYmxlCisJCQkJRHVyYXRpb24gPSBMT05HX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FKjI7CisJCQllbHNlCisJCQkJRHVyYXRpb24gPSBTSE9SVF9QUkVBTUJMRV9QTFVTX1BMQ1BIRUFERVJfVElNRSoyOworCisJCQlEdXJhdGlvbiArPSAoICgoQm9keUxlbiArIDE0KSo4ICsgUmF0ZS0xKSAvIFJhdGUgKworCQkJCQkJREVGQVVMVF9TSUZTVElNRSoyICk7CisJCX0KKworCQlpZiggUlRTX29uICkKKwkJeworCQkJaWYoIHBUMDEtPlQwMV9tb2R1bGF0aW9uX3R5cGUgKSAvLyBJcyB1c2luZyBPRkRNCisJCQl7CisJCQkJLy9DVFMgKyAxIFNJRlMgKyBDVFMgZHVyYXRpb24KKwkJCQkvL0NUUyBSYXRlIDogMjQgTWVnYSBicHMKKwkJCQkvL0NUUyBmcmFtZSBsZW5ndGggPSAxNCBieXRlcworCQkJCUR1cmF0aW9uICs9IChERUZBVUxUX1NJRlNUSU1FICsKKwkJCQkJCQkJUFJFQU1CTEVfUExVU19TSUdOQUxfUExVU19TSUdOQUxFWFRFTlNJT04gKworCQkJCQkJCQkoKDExMiArIDIyICsgOTUpLzk2KSpUc3ltKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvL0NUUyArIDEgU0lGUyArIENUUyBkdXJhdGlvbgorCQkJCS8vQ1RTIFJhdGUgOiA/PyBNZWdhIGJwcworCQkJCS8vQ1RTIGZyYW1lIGxlbmd0aCA9IDE0IGJ5dGVzCisJCQkJaWYoIHBUMDEtPlQwMV9wbGNwX2hlYWRlcl9sZW5ndGggKSAvL2xvbmcgcHJlYW1ibGUKKwkJCQkJRHVyYXRpb24gKz0gTE9OR19QUkVBTUJMRV9QTFVTX1BMQ1BIRUFERVJfVElNRTsKKwkJCQllbHNlCisJCQkJCUR1cmF0aW9uICs9IFNIT1JUX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FOworCisJCQkJRHVyYXRpb24gKz0gKCAoKDExMiArIFJhdGUtMSkgLyBSYXRlKSArIERFRkFVTFRfU0lGU1RJTUUgKTsKKwkJCX0KKwkJfQorCisJCS8vIFNldCB0aGUgdmFsdWUgaW50byBVU0IgZGVzY3JpcHRvcgorCQlwVDAxLT5UMDFfYWRkX3J0cyA9IFJUU19vbiA/IDEgOiAwOworCQlwVDAxLT5UMDFfYWRkX2N0cyA9IENUU19vbiA/IDEgOiAwOworCQlwVDAxLT5UMDFfcnRzX2N0c19kdXJhdGlvbiA9IER1cmF0aW9uOworCX0KKworCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCS8vIEZpbGwgdGhlIG1vcmUgZnJhZ21lbnQgZGVzY3JpcHRvcgorCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCWlmKCBib0dyb3VwQWRkciApCisJCUR1cmF0aW9uID0gMDsKKwllbHNlCisJeworCQlmb3IoIGk9cERlcy0+RnJhZ21lbnRDb3VudC0xOyBpPjA7IGktLSApCisJCXsKKwkJCU5leHRCb2R5TGVuID0gKHUxNilwTmV4dFQwMC0+VDAwX2ZyYW1lX2xlbmd0aDsKKwkJCU5leHRCb2R5TGVuICs9IDQ7CS8vQ1JDCisKKwkJCWlmKCBwVDAxLT5UMDFfbW9kdWxhdGlvbl90eXBlICkKKwkJCXsKKwkJCQkvL09GRE0KKwkJCQkvLyBkYXRhIHRyYW5zbWl0IHRpbWUgKyAzIFNJRlMgKyAyIEFDSworCQkJCS8vIFJhdGUgOiA/P01lZ2EgYnBzCisJCQkJLy8gQUNLIGZyYW1lIGxlbmd0aCA9IDE0IGJ5dGVzLCB0eCByYXRlID0gMjRNCisJCQkJRHVyYXRpb24gPSBQUkVBTUJMRV9QTFVTX1NJR05BTF9QTFVTX1NJR05BTEVYVEVOU0lPTiAqIDM7CisJCQkJRHVyYXRpb24gKz0gKCgoTmV4dEJvZHlMZW4qOCArIDIyICsgUmF0ZSo0IC0gMSkvKFJhdGUqNCkpICogVHN5bSArCisJCQkJCQkJKCgoMioxNCkqOCArIDIyICsgOTUpLzk2KSpUc3ltICsKKwkJCQkJCQlERUZBVUxUX1NJRlNUSU1FKjMpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vRFNTUworCQkJCS8vIGRhdGEgdHJhbnNtaXQgdGltZSArIDIgQUNLICsgMyBTSUZTCisJCQkJLy8gUmF0ZSA6ID8/TWVnYSBicHMKKwkJCQkvLyBBQ0sgZnJhbWUgbGVuZ3RoID0gMTQgYnl0ZXMKKwkJCQkvL1RPRE8gOgorCQkJCWlmKCBwVDAxLT5UMDFfcGxjcF9oZWFkZXJfbGVuZ3RoICkgLy9sb25nIHByZWFtYmxlCisJCQkJCUR1cmF0aW9uID0gTE9OR19QUkVBTUJMRV9QTFVTX1BMQ1BIRUFERVJfVElNRSozOworCQkJCWVsc2UKKwkJCQkJRHVyYXRpb24gPSBTSE9SVF9QUkVBTUJMRV9QTFVTX1BMQ1BIRUFERVJfVElNRSozOworCisJCQkJRHVyYXRpb24gKz0gKCAoKE5leHRCb2R5TGVuICsgKDIqMTQpKSo4ICsgUmF0ZS0xKSAvIFJhdGUgKworCQkJCQkJCURFRkFVTFRfU0lGU1RJTUUqMyApOworCQkJfQorCisJCQkoKFBVU0hPUlQpYnVmZmVyKVs1XSA9IGNwdV90b19sZTE2KER1cmF0aW9uKTsvLyA0IFVTSE9SIGZvciBza2lwIDhCIFVTQiwgMlVTSE9SVD1GQyArIER1cmF0aW9uCisKKwkJCS8vLS0tLTIwMDYxMDA5IGFkZCBieSBhbnNvbidzIGVuZGlhbgorCQkJcE5leHRUMDAtPnZhbHVlID0gY3B1X3RvX2xlMzIocE5leHRUMDAtPnZhbHVlKTsKKwkJCXBUMDEtPnZhbHVlID0gY3B1X3RvX2xlMzIoIHBUMDEtPnZhbHVlICk7CisJCQkvLy0tLS1lbmQgMjAwNjEwMDkgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisKKwkJCWJ1ZmZlciArPSBPZmZzZXRTaXplOworCQkJcFQwMSA9IChQVDAxX0RFU0NSSVBUT1IpKGJ1ZmZlcis0KTsKKwkJCWlmIChpICE9IDEpCS8vVGhlIGxhc3QgZnJhZ21lbnQgd2lsbCBub3QgaGF2ZSB0aGUgbmV4dCBmcmFnbWVudAorCQkJCXBOZXh0VDAwID0gKFBUMDBfREVTQ1JJUFRPUikoYnVmZmVyK09mZnNldFNpemUpOworCQl9CisKKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vIEZpbGwgdGhlIGxhc3QgZnJhZ21lbnQgZGVzY3JpcHRvcgorCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJaWYoIHBUMDEtPlQwMV9tb2R1bGF0aW9uX3R5cGUgKQorCQl7CisJCQkvL09GRE0KKwkJCS8vIDEgU0lGUyArIDEgQUNLCisJCQkvLyBSYXRlIDogMjQgTWVnYSBicHMKKwkJCS8vIEFDSyBmcmFtZSBsZW5ndGggPSAxNCBieXRlcworCQkJRHVyYXRpb24gPSBQUkVBTUJMRV9QTFVTX1NJR05BTF9QTFVTX1NJR05BTEVYVEVOU0lPTjsKKwkJCS8vVGhlIFR4IHJhdGUgb2YgQUNLIHVzZSAyNE0KKwkJCUR1cmF0aW9uICs9ICgoKDExMiArIDIyICsgOTUpLzk2KSpUc3ltICsgREVGQVVMVF9TSUZTVElNRSApOworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gRFNTUworCQkJLy8gMSBBQ0sgKyAxIFNJRlMKKwkJCS8vIFJhdGUgOiA/PyBNZWdhIGJwcworCQkJLy8gQUNLIGZyYW1lIGxlbmd0aCA9IDE0IGJ5dGVzKDExMiBiaXRzKQorCQkJaWYoIHBUMDEtPlQwMV9wbGNwX2hlYWRlcl9sZW5ndGggKSAvL2xvbmcgcHJlYW1ibGUKKwkJCQlEdXJhdGlvbiA9IExPTkdfUFJFQU1CTEVfUExVU19QTENQSEVBREVSX1RJTUU7CisJCQllbHNlCisJCQkJRHVyYXRpb24gPSBTSE9SVF9QUkVBTUJMRV9QTFVTX1BMQ1BIRUFERVJfVElNRTsKKworCQkJRHVyYXRpb24gKz0gKCAoMTEyICsgUmF0ZS0xKS9SYXRlICsJREVGQVVMVF9TSUZTVElNRSApOworCQl9CisJfQorCisJKChQVVNIT1JUKWJ1ZmZlcilbNV0gPSBjcHVfdG9fbGUxNihEdXJhdGlvbik7Ly8gNCBVU0hPUiBmb3Igc2tpcCA4QiBVU0IsIDJVU0hPUlQ9RkMgKyBEdXJhdGlvbgorCXBUMDAtPnZhbHVlID0gY3B1X3RvX2xlMzIocFQwMC0+dmFsdWUpOworCXBUMDEtPnZhbHVlID0gY3B1X3RvX2xlMzIocFQwMS0+dmFsdWUpOworCS8vLS1lbmQgMjAwNjEwMDkgYWRkCisKK30KKwordm9pZCBNRFNfRXRoZXJuZXRQYWNrZXRSZWNlaXZlKCAgUEFEQVBURVIgQWRhcHRlciwgIFBSWExBWUVSMSBwUnhMYXllcjEgKQoreworCQlPU19SRUNFSVZFX1BBQ0tFVF9JTkRJQ0FURSggQWRhcHRlciwgcFJ4TGF5ZXIxICk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxMTg4YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19mLmgKQEAgLTAsMCArMSwzMyBAQAordW5zaWduZWQgY2hhciBNZHNfaW5pdGlhbCggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgTWRzX0Rlc3Ryb3koICBQQURBUFRFUiBBZGFwdGVyICk7Cit2b2lkIE1kc19UeCggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgTWRzX0hlYWRlckNvcHkoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcywgIFBVQ0hBUiBUYXJnZXRCdWZmZXIgKTsKK3UxNiBNZHNfQm9keUNvcHkoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcywgIFBVQ0hBUiBUYXJnZXRCdWZmZXIgKTsKK3ZvaWQgTWRzX0R1cmF0aW9uU2V0KCAgUEFEQVBURVIgQWRhcHRlciwgIFBERVNDUklQVE9SIHBEZXMsICBQVUNIQVIgVGFyZ2V0QnVmZmVyICk7Cit2b2lkIE1kc19TZW5kQ29tcGxldGUoICBQQURBUFRFUiBBZGFwdGVyLCAgUFQwMl9ERVNDUklQVE9SIHBUMDIgKTsKK3ZvaWQgTWRzX01wZHVQcm9jZXNzKCAgUEFEQVBURVIgQWRhcHRlciwgIFBERVNDUklQVE9SIHBSeERlcyApOwordm9pZCBNZHNfcmVzZXRfZGVzY3JpcHRvciggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK2V4dGVybiB2b2lkIERhdGFEbXAodTggKnBkYXRhLCB1MzIgbGVuLCB1MzIgb2Zmc2V0KTsKKworCit2b2lkIHZSeFRpbWVySW5pdChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCB2UnhUaW1lclN0YXJ0KFBXQjMyX0FEQVBURVIgQWRhcHRlciwgaW50IHRpbWVvdXRfdmFsdWUpOwordm9pZCBSeFRpbWVySGFuZGxlcl8xYSggUEFEQVBURVIgQWRhcHRlcik7Cit2b2lkIHZSeFRpbWVyU3RvcChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCBSeFRpbWVySGFuZGxlciggdm9pZCoJCQlTeXN0ZW1TcGVjaWZpYzEsCisJCQkJCSAgIFBXQjMyX0FEQVBURVIgCUFkYXB0ZXIsCisJCQkJCSAgIHZvaWQqCQkJU3lzdGVtU3BlY2lmaWMyLAorCQkJCQkgICB2b2lkKgkJCVN5c3RlbVNwZWNpZmljMyk7CisKKworLy8gRm9yIEFzeW5jaHJvbm91cyBpbmRpY2F0aW5nLiBUaGUgcm91dGluZSBjb2xsb2NhdGVzIHdpdGggVVNCLgordm9pZCBNZHNfTXNkdVByb2Nlc3MoICBQV0IzMl9BREFQVEVSIEFkYXB0ZXIsICBQUlhMQVlFUjEgcFJ4TGF5ZXIxLCAgdTggU2xvdEluZGV4KTsKKworLy8gRm9yIGRhdGEgZnJhbWUgc2VuZGluZyAyMDA2MDgwMgordTE2IE1EU19HZXRQYWNrZXRTaXplKCAgUEFEQVBURVIgQWRhcHRlciApOwordm9pZCBNRFNfR2V0TmV4dFBhY2tldCggIFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzICk7Cit2b2lkIE1EU19HZXROZXh0UGFja2V0Q29tcGxldGUoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcyApOwordm9pZCBNRFNfU2VuZFJlc3VsdCggIFBBREFQVEVSIEFkYXB0ZXIsICB1OCBQYWNrZXRJZCwgIHVuc2lnbmVkIGNoYXIgU2VuZE9LICk7Cit2b2lkIE1EU19FdGhlcm5ldFBhY2tldFJlY2VpdmUoICBQQURBUFRFUiBBZGFwdGVyLCAgUFJYTEFZRVIxIHBSeExheWVyMSApOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MzgyNzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfcy5oCkBAIC0wLDAgKzEsMTgzIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBNQVhfVVNCX1RYX0RFU0NSSVBUT1IJCTE1CQkvLyBJUzg5QzM1IGFiaWxpdHkKKyNkZWZpbmUgTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSCTQJCS8vIFZpcnR1YWwgcHJlLWJ1ZmZlciBudW1iZXIgb2YgTUFYX1VTQl9UWF9CVUZGRVIKKyNkZWZpbmUgTUFYX1VTQl9UWF9CVUZGRVIJCQk0MDk2CS8vIElTODlDMzUgYWJpbGl0eSA0biBhbGlnbm1lbnQgaXMgcmVxdWlyZWQgZm9yIGhhcmR3YXJlCisKKyNkZWZpbmUgTURTX0VWRU5UX0lORElDQVRFKCBfQSwgX0IsIF9GICkJT1NfRVZFTlRfSU5ESUNBVEUoIF9BLCBfQiwgX0YgKQorI2RlZmluZSBBVVRIX1JFUVVFU1RfUEFJUldJU0VfRVJST1IJCQkwCQkvLyBfRiBmbGFnIHNldHRpbmcKKyNkZWZpbmUgQVVUSF9SRVFVRVNUX0dST1VQX0VSUk9SCQkJMQkJLy8gX0YgZmxhZyBzZXR0aW5nCisKKy8vIEZvciB2YXJpYWJsZSBzZXR0aW5nCisjZGVmaW5lIENVUlJFTlRfQlNTX1RZUEUJCQkJcHNCU1MocHNMT0NBTC0+d0Nvbm5lY3RlZFNUQWluZGV4KS0+YkJzc1R5cGUKKyNkZWZpbmUgQ1VSUkVOVF9XRVBfTU9ERQkJCQlwc1NNRS0+X2RvdDExUHJpdmFjeUludm9rZWQKKyNkZWZpbmUgQ1VSUkVOVF9CU1NJRAkJCQkJcHNCU1MocHNMT0NBTC0+d0Nvbm5lY3RlZFNUQWluZGV4KS0+YWJCc3NJRAorI2RlZmluZSBDVVJSRU5UX0RFU0lSRURfV1BBX0VOQUJMRQkJKChwc1NNRS0+YkRlc2lyZWRBdXRoTW9kZT09V1BBX0FVVEgpfHwocHNTTUUtPmJEZXNpcmVkQXV0aE1vZGU9PVdQQVBTS19BVVRIKSkKKyNpZmRlZiBfV1BBMl8KKyNkZWZpbmUgQ1VSUkVOVF9ERVNJUkVEX1dQQTJfRU5BQkxFCQkoKHBzU01FLT5iRGVzaXJlZEF1dGhNb2RlPT1XUEEyX0FVVEgpfHwocHNTTUUtPmJEZXNpcmVkQXV0aE1vZGU9PVdQQTJQU0tfQVVUSCkpCisjZW5kaWYgLy9lbmQgZGVmIF9XUEEyXworI2RlZmluZSBDVVJSRU5UX1BBSVJXSVNFX0tFWV9PSwkJCXBzU01FLT5wYWlyd2lzZV9rZXlfb2sKKy8vWzIwMDQwNzEyIFdTXQorI2RlZmluZSBDVVJSRU5UX0dST1VQX0tFWV9PSwkJCXBzU01FLT5ncm91cF9rZXlfb2sKKyNkZWZpbmUgQ1VSUkVOVF9QQUlSV0lTRV9LRVkJCQlwc1NNRS0+dHhfbWljX2tleQorI2RlZmluZSBDVVJSRU5UX0dST1VQX0tFWQkJCQlwc1NNRS0+Z3JvdXBfdHhfbWljX2tleQorI2RlZmluZSBDVVJSRU5UX0VOQ1JZUFRfU1RBVFVTCQkJcHNTTUUtPmVuY3J5cHRfc3RhdHVzCisjZGVmaW5lIENVUlJFTlRfV0VQX0lECQkJCQlBZGFwdGVyLT5zU21lUGFyYS5fZG90MTFXRVBEZWZhdWx0S2V5SUQKKyNkZWZpbmUgQ1VSUkVOVF9DT05UUk9MX1BPUlRfQkxPQ0sJCSggcHNTTUUtPndwYV9vayE9MSB8fCAoQWRhcHRlci0+TWRzLmJvQ291bnRlck1lYXN1cmVCbG9jaz09MSAmJiAoQ1VSUkVOVF9FTkNSWVBUX1NUQVRVUz09RU5DUllQVF9US0lQKSkgKQorI2RlZmluZSBDVVJSRU5UX0ZSQUdNRU5UX1RIUkVTSE9MRAkJKEFkYXB0ZXItPk1kcy5UeEZyYWdtZW50VGhyZXNob2xkICYgfjB4MSkKKyNkZWZpbmUgQ1VSUkVOVF9QUkVBTUJMRV9NT0RFCQkJcHNMT0NBTC0+Ym9TaG9ydFByZWFtYmxlP1dMQU5fUFJFQU1CTEVfVFlQRV9TSE9SVDpXTEFOX1BSRUFNQkxFX1RZUEVfTE9ORworI2RlZmluZSBDVVJSRU5UX0xJTktfT04JCQkJCU9TX0xJTktfU1RBVFVTCisjZGVmaW5lIENVUlJFTlRfVFhfUkFURQkJCQkJQWRhcHRlci0+c0xvY2FsUGFyYS5DdXJyZW50VHhSYXRlCisjZGVmaW5lIENVUlJFTlRfRkFMTF9CQUNLX1RYX1JBVEUJCUFkYXB0ZXItPnNMb2NhbFBhcmEuQ3VycmVudFR4RmFsbGJhY2tSYXRlCisjZGVmaW5lIENVUlJFTlRfVFhfUkFURV9GT1JfTU5HCQkJQWRhcHRlci0+c0xvY2FsUGFyYS5DdXJyZW50VHhSYXRlRm9yTW5nCisjZGVmaW5lIENVUlJFTlRfUFJPVEVDVF9NRUNIQU5JU00JCXBzTE9DQUwtPmJvUHJvdGVjdE1lY2hhbmlzbQorI2RlZmluZSBDVVJSRU5UX1JUU19USFJFU0hPTEQJCQlBZGFwdGVyLT5NZHMuVHhSVFNUaHJlc2hvbGQKKworI2RlZmluZSBNSUJfR1NfWE1JVF9PS19JTkMJCQkJQWRhcHRlci0+c0xvY2FsUGFyYS5HU19YTUlUX09LKysKKyNkZWZpbmUgTUlCX0dTX1JDVl9PS19JTkMJCQkJQWRhcHRlci0+c0xvY2FsUGFyYS5HU19SQ1ZfT0srKworI2RlZmluZSBNSUJfR1NfWE1JVF9FUlJPUl9JTkMJCQlBZGFwdGVyLT5zTG9jYWxQYXJhLkdTX1hNSVRfRVJST1IKKworLy8tLS0tLS0tLS0tIFRYIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjZGVmaW5lIEVUSEVSTkVUX1RYX0RFU0NSSVBUT1JTICAgICAgICAgTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSCisKKy8vLS0tLS0tLS0tLSBSWCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNkZWZpbmUgRVRIRVJORVRfUlhfREVTQ1JJUFRPUlMJCQk4CS8vSXQncyBub3QgbmVjZXNzYXJ5IHRvIGFsbG9jYXRlIG1vcmUgdGhhbiAyIGluIHN5bmMgaW5kaWNhdGUKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb25maWdyYXRpb24gZGVmYXVsdCB2YWx1ZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIERFRkFVTFRfTVVMVElDQVNUTElTVE1BWAkJMzIgCQkvLyBzdGFuZGFyZAorI2RlZmluZSBERUZBVUxUX1RYX0JVUlNUTEVOR1RICQkJMyAJCS8vIDMyIExvbmd3b3JkcworI2RlZmluZSBERUZBVUxUX1JYX0JVUlNUTEVOR1RICQkJMyAJCS8vIDMyIExvbmd3b3JkcworI2RlZmluZSBERUZBVUxUX1RYX1RIUkVTSE9MRAkJCTAgCQkvLyBGdWxsIFBhY2tldAorI2RlZmluZSBERUZBVUxUX1JYX1RIUkVTSE9MRAkJCTAgCQkvLyBGdWxsIFBhY2tldAorI2RlZmluZSBERUZBVUxUX01BWFRYUkFURQkJCQk2IAkJLy8gMTEgTWJwcyAoTG9uZykKKyNkZWZpbmUgREVGQVVMVF9DSEFOTkVMCQkJCQkzIAkJLy8gQ2hlbm5lbCAzCisjZGVmaW5lIERFRkFVTFRfUlRTVGhyZXNob2xkCQkJMjM0NyAJLy8gRGlzYWJsZSBSVFMKKy8vI2RlZmluZSBERUZBVUxUX1BNRQkJCQkJCTEgCQkvLyBFbmFibGUKKyNkZWZpbmUgREVGQVVMVF9QTUUJCQkJCQkwIAkJLy8gRGlzYWJsZQorI2RlZmluZSBERUZBVUxUX1NJRlNUSU1FCQkJCTEwCisjZGVmaW5lIERFRkFVTFRfQUNLVElNRV8xTUwgICAgICAgICAgICAgMzA0ICAgICAvLyAxNDgrNDQrMTEyIDkxMTIyMCBieSBMQ0MKKyNkZWZpbmUgREVGQVVMVF9BQ0tUSU1FXzJNTCAgICAgICAgICAgICAyNDggICAgIC8vIDE0OCs0NCs1NiA5MTEyMjAgYnkgTENDCisjZGVmaW5lIERFRkFVTFRfRlJBR01FTlRfVEhSRVNIT0xEICAgICAgMjM0NiAJLy8gTm8gZnJhZ21lbnQKKyNkZWZpbmUgREVGQVVMVF9QUkVBTUJMRV9MRU5HVEgJCQk3MgorI2RlZmluZSBERUZBVUxUX1BMQ1BIRUFERVJUSU1FX0xFTkdUSAkyNAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDAuOTYgc2VjIHNpbmNlIHRpbWUgdW5pdCBvZiB0aGUgUjAzIGZvciB0aGUgY3VycmVudCwgVzg5QzMyIGlzIGFib3V0IDYwbnMKKyBpbnN0ZWFkIG9mIDk2MCBucy4gVGhpcyBzaGFsbCBiZSBmaXhlZCBpbiB0aGUgZnV0dXJlIFc4OUMzMgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBERUZBVUxUX01BWF9SRUNFSVZFX1RJTUUgICAgICAgIDE2NDQwMDAwCisKKyNkZWZpbmUgUlhfQlVGX1NJWkUJCQkJCQkyMzUyICAgICAgICAvLyA2MDAgCS8vIEZvciAzMDEgbXVzdCBiZSBtdWx0aXBsZSBvZiA4CisjZGVmaW5lIE1BWF9SWF9ERVNDUklQVE9SUyAgICAgICAgICAgICAgMTggICAgICAgICAvLyBSeCBMYXllciAyCisjZGVmaW5lIE1BWF9CVUZGRVJfUVVFVUUJOCAvLyBUaGUgdmFsdWUgaXMgYWx3YXlzIGVxdWFsIDggZHVlIHRvIE5ESVNfUEFDS0VUJ3MgTWluaXBvcnRSZXNlcnZlZCBmaWVsZCBzaXplCisKKworLy8gRm9yIGJyYW5kLW5ldyByeCBzeXN0ZW0KKyNkZWZpbmUgTURTX0lEX0lHTk9SRQkJCQlFVEhFUk5FVF9SWF9ERVNDUklQVE9SUworCisvLyBGb3IgVHggUGFja2V0IHN0YXR1cyBjbGFzc2lmeQorI2RlZmluZSBQQUNLRVRfRlJFRV9UT19VU0UJCQkJCQkwCisjZGVmaW5lIFBBQ0tFVF9DT01FX0ZST01fTkRJUwkJCQkJMHgwOAorI2RlZmluZSBQQUNLRVRfQ09NRV9GUk9NX01MTUUJCQkJCTB4ODAKKyNkZWZpbmUgUEFDS0VUX1NFTkRfQ09NUExFVEUJCQkJCTB4ZmYKKwordHlwZWRlZiBzdHJ1Y3QgX01EUworeworCS8vIEZvciBUeCB1c2FnZQorCXU4CVR4T3duZXJbICgoTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSICsgMykgJiB+MHgwMykgXTsKKwlQVUNIQVIJcFR4QnVmZmVyOworCXUxNglUeEJ1ZmZlclNpemVbICgoTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSICsgMSkgJiB+MHgwMSkgXTsKKwl1OAlUeERlc0Zyb21bICgoTUFYX1VTQl9UWF9ERVNDUklQVE9SICsgMykgJiB+MHgwMykgXTsvLzkzMTEzMC40LnUgLy8gMTogTUxNRSAyOiBORElTIGNvbnRyb2wgMzogTkRJUyBkYXRhCisJdTgJVHhDb3VudEluQnVmZmVyWyAoKE1BWF9VU0JfVFhfREVTQ1JJUFRPUiArIDMpICYgfjB4MDMpIF07IC8vIDIwMDYwOTI4CisKKwl1OAlUeEZpbGxJbmRleDsvL3RoZSBuZXh0IGluZGV4IG9mIFR4QnVmZmVyIGNhbiBiZSB1c2VkCisJdTgJVHhEZXNJbmRleDsvL1RoZSBuZXh0IGluZGV4IG9mIFR4RGVzIGNhbiBiZSB1c2VkCisJdTgJU2NhblR4UGF1c2U7CS8vZGF0YSBUeCBwYXVzZSBiZWNhdXNlIHRoZSBzY2FubmluZyBpcyBwcm9ncmVzc2luZywgYnV0IHByb2JlIHJlcXVlc3QgVHggd29uJ3QuCisJdTgJVHhQYXVzZTsvL0ZvciBwYXVzZSB0aGUgTWRzX1R4IG1vZHVsdAorCisJT1NfQVRPTUlDCVR4VGhyZWFkQ291bnQ7Ly9Gb3IgdGhyZWFkIGNvdW50aW5nIDkzMTEzMC40LnYKKy8vOTUwMzAxIGRlbGV0ZSBkdWUgdG8gSFcKKy8vCU9TX0FUT01JQwlUeENvbmN1cnJlbnRDb3VudDsvLzkzMTEzMC40LncKKworCXUxNglUeFJlc3VsdFsgKChNQVhfVVNCX1RYX0RFU0NSSVBUT1IgKyAxKSAmIH4weDAxKSBdOy8vQ29sbGVjdCB0aGUgc2VuZGluZyByZXN1bHQgb2YgTXBkdQorCisJdTgJTWljUmVkdW5kYW50WzhdOyAvLyBGb3IgdG1wIHVzZQorCVBVQ0hBUglNaWNXcml0ZUFkZHJlc3NbMl07IC8vVGhlIHN0YXJ0IGFkZHJlc3MgdG8gZmlsbCB0aGUgTWljLCB1c2UgMiBwb2ludCBkdWUgdG8gTWljIG1heWJlIGZyYWdtZW50CisKKwl1MTYJTWljV3JpdGVTaXplWzJdOyAvLzkzMTEzMC40LngKKworCXUxNglNaWNBZGQ7IC8vIElmIHdhbnQgdG8gYWRkIHRoZSBNaWMsIHRoaXMgdmFyaWFibGUgZXF1YWwgdG8gOAorCXUxNglNaWNXcml0ZUluZGV4Oy8vVGhlIG51bWJlciBvZiBNaWNXcml0ZUFkZHJlc3MgOTMxMTMwLjQueQorCisJdTgJVHhSYXRlWyAoKE1BWF9VU0JfVFhfREVTQ1JJUFRPUisxKSZ+MHgwMSkgXVsyXTsgLy8gWzBdIGN1cnJlbnQgdHggcmF0ZSwgWzFdIGZhbGwgYmFjayByYXRlCisJdTgJVHhJbmZvWyAoKE1BWF9VU0JfVFhfREVTQ1JJUFRPUisxKSZ+MHgwMSkgXTsJLy9TdG9yZSBpbmZvcm1hdGlvbiBmb3IgY2FsbGJhY2sgZnVuY3Rpb24KKworCS8vV0tDSEVOIGFkZGVkIGZvciBzY2FubmluZyBtZWNoYW5pc20KKwl1OAlUeFRvZ2dsZTsJCS8vSXQgaXMgVFJVRSBpZiB0aGVyZSBhcmUgdHggYWN0aXZpdGllcyBpbiBzb21lIHRpbWUgaW50ZXJ2YWwKKwl1OAlSZXNlcnZlZF9bM107CisKKwkvLy0tLS0tLS0tLS0gZm9yIFR4IFBhcmFtZXRlcgorCXUxNglUeEZyYWdtZW50VGhyZXNob2xkOyAgICAJLy8gRm9yIGZyYW1lIGJvZHkgb25seQorCXUxNglUeFJUU1RocmVzaG9sZDsKKworCXUzMgkJTWF4UmVjZWl2ZVRpbWU7Ly85MTEyMjAuMyBBZGQKKworCS8vIGRlcGVuZCBvbiBPUywKKwl1MzIJCQkJCU11bHRpY2FzdExpc3RObzsKKwl1MzIJCQkJCVBhY2tldEZpbHRlcjsgLy8gU2V0dGluZyBieSBORElTLCB0aGUgY3VycmVudCBwYWNrZXQgZmlsdGVyIGluIHVzZS4KKwl1OAkJCQkJTXVsdGljYXN0QWRkcmVzc2VzQXJyYXlbREVGQVVMVF9NVUxUSUNBU1RMSVNUTUFYXVtNQUNfQUREUl9MRU5HVEhdOworCisJLy9DT1VOVEVSTUVBU1VSRQorCXU4CQliTUlDZmFpbENvdW50OworCXU4CQlib0NvdW50ZXJNZWFzdXJlQmxvY2s7CisJdTgJCXJlc2VydmVkXzRbMl07CisKKwkvL05ESVNfTUlOSVBPUlRfVElNRVIJblRpbWVyOworCU9TX1RJTUVSCW5UaW1lcjsKKworCXUzMglUeFRzYzsgLy8gMjAwNjAyMTQKKwl1MzIJVHhUc2NfMjsgLy8gMjAwNjAyMTQKKworfSBNRFMsICpQTURTOworCisKK3R5cGVkZWYgc3RydWN0IF9SeEJ1ZmZlcgoreworICAgIFBVQ0hBUiAgcEJ1ZmZlckFkZHJlc3M7ICAgICAvLyBQb2ludGVyIHRoZSByZWNlaXZlZCBkYXRhIGJ1ZmZlci4KKwl1MTYJQnVmZmVyU2l6ZTsKKwl1OAlSRVNFUlZFRDsKKwl1OAlCdWZmZXJJbmRleDsvLyBPbmx5IDEgYnl0ZQorfSBSWEJVRkZFUiwgKlBSWEJVRkZFUjsKKworLy8KKy8vIFJldmVpdmUgTGF5ZXIgMSBGb3JtYXQuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgc3RydWN0IF9SWExBWUVSMQoreworICAgIHUxNiAgU2VxdWVuY2VOdW1iZXI7ICAgICAvLyBUaGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldC4KKwl1MTYJQnVmZmVyVG90YWxTaXplOworCisJdTMyCUluVXNlZDsKKyAgICB1MzIgICBEZWNyeXB0aW9uTWV0aG9kOyAgIC8vIFRoZSBkZXNpcmVkIGRlZnJhZ21lbnQgbnVtYmVyIG9mIHRoZSBuZXh0IGluY29taW5nIHBhY2tldC4KKworCXU4CURlRnJhZ21lbnROdW1iZXI7CisJdTgJRnJhbWVUeXBlOworICAgIHU4CVR5cGVFbmNhcHN1bGF0ZWQ7CisJdTgJQnVmZmVyTnVtYmVyOworCisJdTMyCUZpcnN0RnJhbWVBcnJpdmVkVGltZTsKKworCVJYQlVGRkVSCUJ1ZmZlclF1ZXVlWyBNQVhfQlVGRkVSX1FVRVVFIF07CisKKwl1OAkJTGFzdEZyYW1lVHlwZTsgLy8gMjAwNjEwMDQgZm9yIGZpeCBpbnRlbCAzOTQ1ICdzIGJ1ZworCXU4CQlSRVNFUlZFRFszXTsgIC8vQEAgYW5zb24KKworCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCS8vIEZvciBicmFuZC1uZXcgUnggc3lzdGVtCisJdTgJUmVzZXJ2ZWRCdWZmZXJbIDI0MDAgXTsvL0lmIEJ1ZmZlciBJRCBpcyByZXNlcnZlZCBvbmUsIGl0IG11c3QgY29weSB0aGUgZGF0YSBpbnRvIHRoaXMgYXJlYQorCVBVQ0hBUglSZXNlcnZlZEJ1ZmZlclBvaW50Oy8vIFBvaW50IHRvIHRoZSBuZXh0IGF2YWlsYWJlIGFkZHJlc3Mgb2YgcmVzZXJ2ZWQgYnVmZmVyCisKK31SWExBWUVSMSwgKiBQUlhMQVlFUjE7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZV9taWIuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfbWliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3NTk3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfbWliLmgKQEAgLTAsMCArMSw4NCBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgTUxNRU1JQi5IIC0KKy8vCisvLyAgRGVzY3JpcHRpb246CisvLyAgICBHZXQgYW5kIFNldCBzb21lIG9mIE1MTUUgTUlCIGF0dHJpYnV0ZXMuCisvLworLy8gIFJldmlzaW9uIGhpc3Rvcnk6CisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAyMDAzMDExNyAgUEQ0MyBBdXN0aW4gTGl1CisvLyAgICAgICAgICAgICAgICAgICAgIEluaXRpYWwgcmVsZWFzZQorLy8KKy8vICBDb3B5cmlnaHQgKGMpIDIwMDMgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyNpZm5kZWYgX01MTUVfTUlCX0gKKyNkZWZpbmUgX01MTUVfTUlCX0gKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNTE1FU2V0RXhjbHVkZVVuZW5jcnlwdGVkIC0tCisvLworLy8gRGVzY3JpcHRpb246CisvLyAgIFNldCB0aGUgZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQgdmFsdWUuCisvLworLy8gQXJndW1lbnRzOgorLy8gICBBZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCisvLyAgIEV4VW5lbmNyeXB0ZWQgIC0gdW5zaWduZWQgY2hhciB0eXBlLiBUaGUgdmFsdWUgdG8gYmUgc2V0LgorLy8KKy8vIFJldHVybiB2YWx1ZXM6CisvLyAgIE5vbmUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgTUxNRVNldEV4Y2x1ZGVVbmVuY3J5cHRlZChBZGFwdGVyLCBFeFVuZW5jcnlwdGVkKSAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChBZGFwdGVyKS0+c0xvY2FsUGFyYS5FeGNsdWRlVW5lbmNyeXB0ZWQgPSBFeFVuZW5jcnlwdGVkOyAgICAgICAgICAgICBcCit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gTUxNRUdldEV4Y2x1ZGVVbmVuY3J5cHRlZCAtLQorLy8KKy8vIERlc2NyaXB0aW9uOgorLy8gICBHZXQgdGhlIGRvdDExRXhjbHVkZVVuZW5jcnlwdGVkIHZhbHVlLgorLy8KKy8vIEFyZ3VtZW50czoKKy8vICAgQWRhcHRlciAgICAgICAgLSBUaGUgcG9pbnRlciB0byB0aGUgbWluaXBvcnQgYWRhcHRlciBjb250ZXh0LgorLy8KKy8vIFJldHVybiB2YWx1ZXM6CisvLyAgIHVuc2lnbmVkIGNoYXIgdHlwZS4gVGhlIGN1cnJlbnQgZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQgdmFsdWUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgTUxNRUdldEV4Y2x1ZGVVbmVuY3J5cHRlZChBZGFwdGVyKSAoKHVuc2lnbmVkIGNoYXIpIChBZGFwdGVyKS0+c0xvY2FsUGFyYS5FeGNsdWRlVW5lbmNyeXB0ZWQpCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gTUxNRVNldE1heFJlY2VpdmVMaWZlVGltZSAtLQorLy8KKy8vIERlc2NyaXB0aW9uOgorLy8gICBTZXQgdGhlIGRvdDExTWF4UmVjZWl2ZUxpZmVUaW1lIHZhbHVlLgorLy8KKy8vIEFyZ3VtZW50czoKKy8vICAgQWRhcHRlciAgICAgICAgLSBUaGUgcG9pbnRlciB0byB0aGUgbWluaXBvcnQgYWRhcHRlciBjb250ZXh0LgorLy8gICBSZWNlaXZlTGlmZVRpbWUtIHUzMiB0eXBlLiBUaGUgdmFsdWUgdG8gYmUgc2V0LgorLy8KKy8vIFJldHVybiB2YWx1ZXM6CisvLyAgIE5vbmUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgTUxNRVNldE1heFJlY2VpdmVMaWZlVGltZShBZGFwdGVyLCBSZWNlaXZlTGlmZVRpbWUpICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKEFkYXB0ZXIpLT5NZHMuTWF4UmVjZWl2ZVRpbWUgPSBSZWNlaXZlTGlmZVRpbWU7ICAgICAgICAgICAgICAgIFwKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNTE1FU2V0TWF4UmVjZWl2ZUxpZmVUaW1lIC0tCisvLworLy8gRGVzY3JpcHRpb246CisvLyAgIEdldCB0aGUgZG90MTFNYXhSZWNlaXZlTGlmZVRpbWUgdmFsdWUuCisvLworLy8gQXJndW1lbnRzOgorLy8gICBBZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCisvLworLy8gUmV0dXJuIHZhbHVlczoKKy8vICAgdTMyIHR5cGUuIFRoZSBjdXJyZW50IGRvdDExTWF4UmVjZWl2ZUxpZmVUaW1lIHZhbHVlLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIE1MTUVHZXRNYXhSZWNlaXZlTGlmZVRpbWUoQWRhcHRlcikgKCh1MzIpIChBZGFwdGVyKS0+TWRzLk1heFJlY2VpdmVUaW1lKQorCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1lX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MDk0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1lX3MuaApAQCAtMCwwICsxLDE5NSBAQAorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworLy8JTWxtZS5oCisvLwkJRGVmaW5lIHRoZSByZWxhdGVkIGRlZmluaXRpb25zIG9mIE1MTUUgbW9kdWxlCisvLwloaXN0b3J5IC0tIDAxLzE0LzAzJyBjcmVhdGVkCisvLworLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworCisjZGVmaW5lIEFVVEhfUkVKRUNUX1JFQVNPTl9DSEFMTEVOR0VfRkFJTAkJMQorCisvLz09PT09PSB0aGUgc3RhdGUgb2YgTUxNRSBtb2R1bGUKKyNkZWZpbmUgSU5BQ1RJVkUJCQkweDAKKyNkZWZpbmUgSURMRV9TQ0FOCQkJMHgxCisKKy8vPT09PT09IHRoZSBzdGF0ZSBvZiBNTE1FL0VTUyBtb2R1bGUKKyNkZWZpbmUgU1RBVEVfMQkJCQkweDIKKyNkZWZpbmUgQVVUSF9SRVEJCQkweDMKKyNkZWZpbmUgQVVUSF9XRVAJCQkweDQKKyNkZWZpbmUgU1RBVEVfMgkJCQkweDUKKyNkZWZpbmUgQVNTT0NfUkVRCQkJMHg2CisjZGVmaW5lIFNUQVRFXzMJCQkJMHg3CisKKy8vPT09PT09IHRoZSBzdGF0ZSBvZiBNTE1FL0lCU1MgbW9kdWxlCisjZGVmaW5lIElCU1NfSk9JTl9TWU5DCQkweDgKKyNkZWZpbmUgSUJTU19BVVRIX1JFUQkJMHg5CisjZGVmaW5lIElCU1NfQVVUSF9DSEFOTEdFCTB4YQorI2RlZmluZSBJQlNTX0FVVEhfV0VQCQkweGIKKyNkZWZpbmUgSUJTU19BVVRIX0lORAkJMHhjCisjZGVmaW5lIElCU1NfU1RBVEVfMgkJMHhkCisKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvL2RlcGVuZCBvbiBENUMoTUFDIHRpbWluZyBjb250cm9sIDAzIHJlZ2lzdGVyKTogTWF4VHhNU0RVTGlmZVRpbWUgZGVmYXVsdCAweDgwMDAwdXMKKyNkZWZpbmUgQVVUSF9GQUlMX1RJTUVPVVQJCTU1MAorI2RlZmluZSBBU1NPQ19GQUlMX1RJTUVPVVQJCTU1MAorI2RlZmluZSBSRUFTU09DX0ZBSUxfVElNRU9VVAk1NTAKKworCisKKy8vCisvLyBNTE1FIHRhc2sgZ2xvYmFsIENPTlNUQU5UUywgU1RSVUNUVVJFLCB2YXJpYWJsZXMKKy8vCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gIGVudW1fUmVzdWx0Q29kZSAtLQorLy8gIFJlc3VsdCBjb2RlIHJldHVybmVkIGZyb20gTUxNRSB0byBTTUUuCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUEQ0MyAyMDAzMDgyOSBNb2RpZmlsZWQKKy8vI2RlZmluZQlTVUNDRVNTCQkJCQkJCQkwCisjZGVmaW5lIE1MTUVfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgIDAgLy9mb2xsb3cgc3BlYy4KKyNkZWZpbmUJSU5WQUxJRF9QQVJBTUVURVJTCQkJCQkxIC8vTm90IGZvbGxvd2luZyBzcGVjLgorI2RlZmluZQlOT1RfU1VQUFBPUlRFRAkJCQkJCTIKKyNkZWZpbmUJVElNRU9VVAkJCQkJCQkJMworI2RlZmluZQlUT09fTUFOWV9TSU1VTFRBTkVPVVNfUkVRVUVTVFMJCTQKKyNkZWZpbmUgUkVGVVNFRAkJCQkJCQkJNQorI2RlZmluZQlCU1NfQUxSRUFEWV9TVEFSVEVEX09SX0pPSU5FRAkJNgorI2RlZmluZQlUUkFOU01JVF9GUkFNRV9GQUlMCQkJCQk3CisjZGVmaW5lCU5PX0JTU19GT1VORAkJCQkJCTgKKyNkZWZpbmUgUkVUUlkJCQkJCQkJCTkKKyNkZWZpbmUgR0lWRV9VUAkJCQkJCQkJMTAKKworCisjZGVmaW5lIE9QRU5fQVVUSAkJCQkJCQkwCisjZGVmaW5lIFNIQVJFX0FVVEgJCQkJCQkJMQorI2RlZmluZSBBTllfQVVUSAkJCQkJCQkyCisjZGVmaW5lIFdQQV9BVVRICQkJCQkJCTMJLy9mb3IgV1BBCisjZGVmaW5lIFdQQVBTS19BVVRICQkJCQkJCTQKKyNkZWZpbmUgV1BBTk9ORV9BVVRICQkJCQkJNQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIGFkZGVkIGJ5IHdzIDA0LzE5LzA0CisjaWZkZWYgX1dQQTJfCisjZGVmaW5lIFdQQTJfQVVUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDYvL2ZvciBXUEEyCisjZGVmaW5lIFdQQTJQU0tfQVVUSCAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNlbmRpZiAvL2VuZCBkZWYgX1dQQTJfCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9kZWZpbmUgdGhlIG1zZyB0eXBlIG9mIE1MTUUgbW9kdWxlCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vZnJvbSBTTUUKKworI2RlZmluZSBNTE1FTVNHX0FVVEhfUkVRCQkJCTB4MGIKKyNkZWZpbmUgTUxNRU1TR19ERUFVVEhfUkVRCQkJCTB4MGMKKyNkZWZpbmUgTUxNRU1TR19BU1NPQ19SRVEJCQkJMHgwZAorI2RlZmluZSBNTE1FTVNHX1JFQVNTT0NfUkVRCQkJCTB4MGUKKyNkZWZpbmUgTUxNRU1TR19ESVNBU1NPQ19SRVEJCQkweDBmCisjZGVmaW5lIE1MTUVNU0dfU1RBUlRfSUJTU19SRVEJCQkweDEwCisjZGVmaW5lIE1MTUVNU0dfSUJTU19ORVRfQ0ZNCQkJMHgxMQorCisvL2Zyb20gUlggOgorI2RlZmluZSBNTE1FTVNHX1JDVl9NTE1FRlJBTUUJCQkweDIwCisjZGVmaW5lIE1MTUVNU0dfUkNWX0FTU09DUlNQCQkJMHgyMgorI2RlZmluZSBNTE1FTVNHX1JDVl9SRUFTU09DUlNQCQkJMHgyNAorI2RlZmluZSBNTE1FTVNHX1JDVl9ESVNBU1NPQwkJCTB4MmIKKyNkZWZpbmUgTUxNRU1TR19SQ1ZfQVVUSAkJCQkweDJjCisjZGVmaW5lIE1MTUVNU0dfUkNWX0RFQVVUSAkJCQkweDJkCisKKworLy9mcm9tIFRYIGNhbGxiYWNrCisjZGVmaW5lIE1MTUVNU0dfVFhfQ0FMTEJBQ0sJCQkJMHg0MAorI2RlZmluZSBNTE1FTVNHX0FTU09DUkVRX0NBTExCQUNLCQkweDQxCisjZGVmaW5lIE1MTUVNU0dfUkVBU1NPQ1JFUV9DQUxMQkFDSwkJMHg0MworI2RlZmluZSBNTE1FTVNHX0RJU0FTU09DX0NBTExCQUNLCQkweDRhCisjZGVmaW5lIE1MTUVNU0dfQVVUSF9DQUxMQkFDSwkJCTB4NGMKKyNkZWZpbmUgTUxNRU1TR19ERUFVVEhfQ0FMTEJBQ0sJCQkweDRkCisKKy8vI2RlZmluZSBNTE1FTVNHX0pPSU5fRkFJTAkJCQk0CisvLyNkZWZpbmUgTUxNRU1TR19BVVRIRU5fRkFJTAkJCTE4CisjZGVmaW5lIE1MTUVNU0dfVElNRU9VVAkJCQkJMHg1MAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vR2xvYmFsIGRhdGEgc3RydWN0dXJlcworI2RlZmluZSBNQVhfTlVNX1RYX01NUERVCTIKKyNkZWZpbmUgTUFYX01NUERVX1NJWkUJCTE1MTIKKyNkZWZpbmUgTUFYX05VTV9SWF9NTVBEVQk2CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvL01BQ1JPCisjZGVmaW5lIGJvTUxNRV9JbmFjdGl2ZVN0YXRlKF9BQV8pCShfQUFfLT53U3RhdGU9PUlOQUNUSVZFKQorI2RlZmluZSBib01MTUVfSWRsZVNjYW5TdGF0ZShfQkJfKQkoX0JCXy0+d1N0YXRlPT1JRExFX1NDQU4pCisjZGVmaW5lIGJvTUxNRV9Gb3VuZFNUQWluZm8oX0NDXykJKF9DQ18tPndTdGF0ZT49SURMRV9TQ0FOKQorCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9GUkFNRQoreworCS8vTkRJU19QQUNLRVQJCU1MTUVfUGFja2V0OworCVBDSEFSCQkJcE1NUERVOworCXUxNgkJCWxlbjsKKwl1OAkJCURhdGFUeXBlOworCXU4CQkJSXNJblVzZWQ7CisKKwlPU19TUElOX0xPQ0sJTUxNRVNwaW5Mb2NrOworCisgICAgdTgJCVR4TU1QRFVbTUFYX05VTV9UWF9NTVBEVV1bTUFYX01NUERVX1NJWkVdOworCXU4CQlUeE1NUERVSW5Vc2VbIChNQVhfTlVNX1RYX01NUERVKzMpICYgfjB4MDMgXTsKKworCXUxNgkJd051bVR4TU1QRFU7CisJdTE2CQl3TnVtVHhNTVBEVURpc2NhcmRlZDsKKworICAgIHU4CQlSeE1NUERVW01BWF9OVU1fUlhfTU1QRFVdW01BWF9NTVBEVV9TSVpFXTsKKyAgICB1OAkgCVNhdmVSeEJ1ZlNsb3RJblVzZVsgKE1BWF9OVU1fUlhfTU1QRFUrMykgJiB+MHgwMyBdOworCisJdTE2CQl3TnVtUnhNTVBEVTsKKwl1MTYJCXdOdW1SeE1NUERVRGlzY2FyZGVkOworCisJdTE2CQl3TnVtUnhNTVBEVUluTUxNRTsgCS8vIE51bWJlciBvZiB0aGUgUnggTU1QRFUKKwl1MTYJCXJlc2VydmVkXzE7CQkJLy8gIGluIE1MTUUuCisgICAgICAgICAgICAgICAgICAgIAkgICAgICAgICAgICAvLyAgZXhjbHVkaW5nIHRoZSBkaXNjYXJkZWQKK30gTUxNRV9GUkFNRSwgKnBzTUxNRV9GUkFNRTsKKwordHlwZWRlZiBzdHJ1Y3QgX0FVVEhSRVEgeworCisJdTggCXBlZXJNQUNhZGRyW01BQ19BRERSX0xFTkdUSF07CisJdTE2CXdBdXRoQWxnb3JpdGhtOworCit9IE1MTUVfQVVUSFJFUV9QQVJBLCAqcHNNTE1FX0FVVEhSRVFfUEFSQTsKKworc3RydWN0IF9SZWFzb25fQ29kZSB7CisKKwl1OAlwZWVyTUFDYWRkcltNQUNfQUREUl9MRU5HVEhdOworCXUxNgl3UmVhc29uQ29kZTsKK307Cit0eXBlZGVmIHN0cnVjdCBfUmVhc29uX0NvZGUgTUxNRV9ERUFVVEhSRVFfUEFSQSwgKnBzTUxNRV9ERUFVVEhSRVFfUEFSQTsKK3R5cGVkZWYgc3RydWN0IF9SZWFzb25fQ29kZSBNTE1FX0RJU0FTU09DUkVRX1BBUkEsICpwc01MTUVfRElTQVNTT0NSRVFfUEFSQTsKKwordHlwZWRlZiBzdHJ1Y3QgX0FTU09DUkVRIHsKKyAgdTggICAgICAgUGVlclNUQUFkZHJbTUFDX0FERFJfTEVOR1RIXTsKKyAgdTE2ICAgICAgIENhcGFiaWxpdHlJbmZvOworICB1MTYgICAgICAgTGlzdGVuSW50ZXJ2YWw7CisKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgTUxNRV9BU1NPQ1JFUV9QQVJBLCAqcHNNTE1FX0FTU09DUkVRX1BBUkE7CisKK3R5cGVkZWYgc3RydWN0IF9SRUFTU09DUkVRIHsKKyAgdTggICAgICAgTmV3QVBBZGRyW01BQ19BRERSX0xFTkdUSF07CisgIHUxNiAgICAgICBDYXBhYmlsaXR5SW5mbzsKKyAgdTE2ICAgICAgIExpc3RlbkludGVydmFsOworCit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIE1MTUVfUkVBU1NPQ1JFUV9QQVJBLCAqcHNNTE1FX1JFQVNTT0NSRVFfUEFSQTsKKwordHlwZWRlZiBzdHJ1Y3QgX01MTUVDQUxMQkFDSyB7CisKKyAgdTggCSpwc0ZyYW1lUHRyOworICB1OAkJYlJlc3VsdDsKKworfSBNTE1FX1RYQ0FMTEJBQ0ssICpwc01MTUVfVFhDQUxMQkFDSzsKKwordHlwZWRlZiBzdHJ1Y3QgX1JYREFUQQoreworCXMzMgkJRnJhbWVMZW5ndGg7CisJdTgJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICpwYkZyYW1lUHRyOworCit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIFJYREFUQSwgKnBzUlhEQVRBOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1ldHhyeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YjA5MWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1ldHhyeC5jCkBAIC0wLDAgKzEsMTUwIEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBNb2R1bGUgTmFtZToKKy8vICAgIE1MTUVUeFJ4LkMKKy8vCisvLyAgRGVzY3JpcHRpb246CisvLyAgICBUaGUgaW50ZXJmYWNlIGJldHdlZW4gTURTIChNQUMgRGF0YSBTZXJ2aWNlKSBhbmQgTUxNRS4KKy8vCisvLyAgUmV2aXNpb24gSGlzdG9yeToKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgMjAwMjA5ICAgICAgVU4yMCBKZW5uaWZlciBYdQorLy8gICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbCBSZWxlYXNlCisvLyAgICAgICAgICAyMDAyMTEwOCAgICBQRDQzIEF1c3RpbiBMaXUKKy8vICAgICAgICAgIDIwMDMwMTE3ICAgIFBENDMgQXVzdGluIExpdQorLy8gICAgICAgICAgICAgICAgICAgICAgRGVsZXRlZCBNTE1FUmV0dXJuUGFja2V0IGFuZCBNTE1FUHJvY1RocmVhZCgpCisvLworLy8gIENvcHlyaWdodCAoYykgMTk5Ni0yMDAyIFdpbmJvbmQgRWxlY3Ryb25pY3MgQ29ycC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorCit2b2lkIE1MTUVSZXNldFR4UngoUFdCMzJfQURBUFRFUiBBZGFwdGVyKQoreworCXMzMiAgICAgaTsKKworCS8vIFJlc2V0IHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBNRFMgYW5kIE1MTUUKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9UWF9NTVBEVTsgaSsrKQorCQlBZGFwdGVyLT5zTWxtZUZyYW1lLlR4TU1QRFVJblVzZVtpXSA9IEZBTFNFOworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX1JYX01NUERVOyBpKyspCisJCUFkYXB0ZXItPnNNbG1lRnJhbWUuU2F2ZVJ4QnVmU2xvdEluVXNlW2ldID0gRkFMU0U7CisKKwlBZGFwdGVyLT5zTWxtZUZyYW1lLndOdW1SeE1NUERVSW5NTE1FICAgPSAwOworCUFkYXB0ZXItPnNNbG1lRnJhbWUud051bVJ4TU1QRFVEaXNjYXJkZWQgPSAwOworCUFkYXB0ZXItPnNNbG1lRnJhbWUud051bVJ4TU1QRFUgICAgICAgICAgPSAwOworCUFkYXB0ZXItPnNNbG1lRnJhbWUud051bVR4TU1QRFVEaXNjYXJkZWQgPSAwOworCUFkYXB0ZXItPnNNbG1lRnJhbWUud051bVR4TU1QRFUgICAgICAgICAgPSAwOworCUFkYXB0ZXItPnNMb2NhbFBhcmEuYm9DQ0FidXN5ICAgID0gRkFMU0U7CisJQWRhcHRlci0+c0xvY2FsUGFyYS5pUG93ZXJTYXZlTW9kZSAgICAgPSBQV1JfQUNUSVZFOyAgICAgLy8gUG93ZXIgYWN0aXZlCit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCUZ1bmN0aW9uOgorLy8gICAgTUxNRUdldE1NUERVQnVmZmVyKCkKKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vICAgIFJldHVybiB0aGUgcG9pbnRlciB0byBhbiBhdmFpbGFibGUgZGF0YSBidWZmZXIgd2l0aAorLy8gICAgdGhlIHNpemUgTUFYX01NUERVX1NJWkUgZm9yIGEgTU1QRFUuCisvLworLy8gIEFyZ3VtZW50czoKKy8vICAgIEFkYXB0ZXIgICAtIHBvaW50ZXIgdG8gdGhlIG1pbmlwb3J0IGFkYXB0ZXIgY29udGV4dC4KKy8vCisvLwlSZXR1cm4gdmFsdWU6CisvLyAgICBOVUxMICAgICA6IE5vIGF2YWlsYWJsZSBkYXRhIGJ1ZmZlciBhdmFpbGFibGUKKy8vICAgIE90aGVyd2lzZTogUG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyogRklYTUU6IFNob3VsZCB0aGlzIGp1c3QgYmUgcmVwbGFjZWQgd2l0aCBrbWFsbG9jKCkgYW5kIGtmcmVlKCk/ICovCit1OCAqTUxNRUdldE1NUERVQnVmZmVyKFBXQjMyX0FEQVBURVIgQWRhcHRlcikKK3sKKwlzMzIgaTsKKwl1OCAqcmV0dXJuVmFsOworCisJZm9yIChpID0gMDsgaTwgTUFYX05VTV9UWF9NTVBEVTsgaSsrKSB7CisJCWlmIChBZGFwdGVyLT5zTWxtZUZyYW1lLlR4TU1QRFVJblVzZVtpXSA9PSBGQUxTRSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA+PSBNQVhfTlVNX1RYX01NUERVKSByZXR1cm4gTlVMTDsKKworCXJldHVyblZhbCA9ICh1OCAqKSYoQWRhcHRlci0+c01sbWVGcmFtZS5UeE1NUERVW2ldKTsKKwlBZGFwdGVyLT5zTWxtZUZyYW1lLlR4TU1QRFVJblVzZVtpXSA9IFRSVUU7CisKKwlyZXR1cm4gcmV0dXJuVmFsOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit1OCBNTE1FU2VuZEZyYW1lKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTggKnBNTVBEVSwgdTE2IGxlbiwgdTggRGF0YVR5cGUpCisvKglEYXRhVHlwZSA6IEZSQU1FX1RZUEVfODAyXzExX01BTkFHRU1FTlQsIEZSQU1FX1RZUEVfODAyXzExX01BTkFHRU1FTlRfQ0hBTExFTkdFLAorCQkJCUZSQU1FX1RZUEVfODAyXzExX0RBVEEgKi8KK3sKKwlpZiAoQWRhcHRlci0+c01sbWVGcmFtZS5Jc0luVXNlZCAhPSBQQUNLRVRfRlJFRV9UT19VU0UpIHsKKwkJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtVHhNTVBEVURpc2NhcmRlZCsrOworCQlyZXR1cm4gRkFMU0U7CisJfQorCUFkYXB0ZXItPnNNbG1lRnJhbWUuSXNJblVzZWQgPSBQQUNLRVRfQ09NRV9GUk9NX01MTUU7CisKKwkvLyBLZWVwIGluZm9ybWF0aW9uIGZvciBzZW5kaW5nCisJQWRhcHRlci0+c01sbWVGcmFtZS5wTU1QRFUgPSBwTU1QRFU7CisJQWRhcHRlci0+c01sbWVGcmFtZS5EYXRhVHlwZSA9IERhdGFUeXBlOworCS8vIGxlbiBtdXN0IGJlIHRoZSBsYXN0IHNldHRpbmcgZHVlIHRvIFFVRVJZX1NJWkVfU0VDT05EIG9mIE1kcworCUFkYXB0ZXItPnNNbG1lRnJhbWUubGVuID0gbGVuOworCUFkYXB0ZXItPnNNbG1lRnJhbWUud051bVR4TU1QRFUrKzsKKworCS8vIEgvVyB3aWxsIGVudGVyIHBvd2VyIHNhdmUgYnkgc2V0IHRoZSByZWdpc3Rlci4gUy9XIGRvbid0IHNlbmQgbnVsbCBmcmFtZQorCS8vd2l0aCBQV1JNZ3QgYml0IGVuYmxlZCB0byBlbnRlciBwb3dlciBzYXZlIG5vdy4KKworCS8vIFRyYW5zbWl0IE5ESVMgcGFja2V0CisJTWRzX1R4KEFkYXB0ZXIpOworCXJldHVybiBUUlVFOworfQorCit2b2lkCitNTE1FX0dldE5leHRQYWNrZXQoUEFEQVBURVIgQWRhcHRlciwgUERFU0NSSVBUT1IgcERlcykKK3sKKyNkZWZpbmUgREVTQ1JJUFRPUl9BRERfQlVGRkVSKCBfRCwgX0EsIF9TICkgXAore1wKKwlfRC0+SW50ZXJuYWxVc2VkID0gX0QtPmJ1ZmZlcl9zdGFydF9pbmRleCArIF9ELT5idWZmZXJfbnVtYmVyOyBcCisJX0QtPkludGVybmFsVXNlZCAlPSBNQVhfREVTQ1JJUFRPUl9CVUZGRVJfSU5ERVg7IFwKKwlfRC0+YnVmZmVyX2FkZHJlc3NbIF9ELT5JbnRlcm5hbFVzZWQgXSA9IF9BOyBcCisJX0QtPmJ1ZmZlcl9zaXplWyBfRC0+SW50ZXJuYWxVc2VkIF0gPSBfUzsgXAorCV9ELT5idWZmZXJfdG90YWxfc2l6ZSArPSBfUzsgXAorCV9ELT5idWZmZXJfbnVtYmVyKys7XAorfQorCisJREVTQ1JJUFRPUl9BRERfQlVGRkVSKCBwRGVzLCBBZGFwdGVyLT5zTWxtZUZyYW1lLnBNTVBEVSwgQWRhcHRlci0+c01sbWVGcmFtZS5sZW4gKTsKKwlwRGVzLT5UeXBlID0gQWRhcHRlci0+c01sbWVGcmFtZS5EYXRhVHlwZTsKK30KKwordm9pZCBNTE1FZnJlZU1NUERVQnVmZmVyKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgUENIQVIgcERhdGEpCit7CisJaW50IGk7CisKKwkvLyBSZWNsYWltIHRoZSBkYXRhIGJ1ZmZlcgorCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX1RYX01NUERVOyBpKyspIHsKKwkJaWYgKHBEYXRhID09IChQQ0hBUikmKEFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVVtpXSkpCisJCQlicmVhazsKKwl9CisJaWYgKEFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVUluVXNlW2ldKQorCQlBZGFwdGVyLT5zTWxtZUZyYW1lLlR4TU1QRFVJblVzZVtpXSA9IEZBTFNFOworCWVsc2UgIHsKKwkJLy8gU29tZXRoaW5nIHdyb25nCisJCS8vIFBENDMgQWRkIGRlYnVnIGNvZGUgaGVyZT8/PworCX0KK30KKwordm9pZAorTUxNRV9TZW5kQ29tcGxldGUoUEFEQVBURVIgQWRhcHRlciwgdTggUGFja2V0SUQsIHVuc2lnbmVkIGNoYXIgU2VuZE9LKQoreworCU1MTUVfVFhDQUxMQkFDSwlUeENhbGxiYWNrOworCisgICAgLy8gUmVjbGFpbSB0aGUgZGF0YSBidWZmZXIKKwlBZGFwdGVyLT5zTWxtZUZyYW1lLmxlbiA9IDA7CisJTUxNRWZyZWVNTVBEVUJ1ZmZlciggQWRhcHRlciwgQWRhcHRlci0+c01sbWVGcmFtZS5wTU1QRFUgKTsKKworCisJVHhDYWxsYmFjay5iUmVzdWx0ID0gTUxNRV9TVUNDRVNTOworCisJLy8gUmV0dXJuIHJlc291cmNlCisJQWRhcHRlci0+c01sbWVGcmFtZS5Jc0luVXNlZCA9IFBBQ0tFVF9GUkVFX1RPX1VTRTsKK30KKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4X2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4X2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzRlMjI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZXR4cnhfZi5oCkBAIC0wLDAgKzEsNTIgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gTUxNRVR4UnguSCAtLQorLy8KKy8vICAgRnVuY3Rpb25zIGRlZmluZWQgaW4gTUxNRVR4UnguYy4KKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIgV2luYm9uZCBFbGVjdHJpY3MgQ29ycC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2lmbmRlZiBfTUxNRVRYUlhfSAorI2RlZmluZSBfTUxNRVRYUlhfSAorCit2b2lkCitNTE1FUHJvY1RocmVhZCgKKyAgICAgUFdCMzJfQURBUFRFUiAgICBBZGFwdGVyCisJKTsKKwordm9pZCBNTE1FUmVzZXRUeFJ4KCBQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOworCit1OCAqCitNTE1FR2V0TU1QRFVCdWZmZXIoCisgICAgIFBXQjMyX0FEQVBURVIgICAgQWRhcHRlcgorICAgKTsKKwordm9pZCBNTE1FZnJlZU1NUERVQnVmZmVyKCBQV0IzMl9BREFQVEVSIEFkYXB0ZXIsICBQQ0hBUiBwRGF0YSk7CisKK3ZvaWQgTUxNRV9HZXROZXh0UGFja2V0KCAgUEFEQVBURVIgQWRhcHRlciwgIFBERVNDUklQVE9SIHBEZXMgKTsKK3U4IE1MTUVTZW5kRnJhbWUoIFBXQjMyX0FEQVBURVIgQWRhcHRlciwKKwkJCQkJdTgJKnBNTVBEVSwKKwkJCQkJdTE2CWxlbiwKKwkJCQkJIHU4CURhdGFUeXBlKTsKKwordm9pZAorTUxNRV9TZW5kQ29tcGxldGUoICBQV0IzMl9BREFQVEVSIEFkYXB0ZXIsICB1OCBQYWNrZXRJRCwgIHVuc2lnbmVkIGNoYXIgU2VuZE9LICk7CisKK3ZvaWQKK01MTUVSY3ZGcmFtZSgKKyAgICAgUFdCMzJfQURBUFRFUiAgICBBZGFwdGVyLAorICAgICBQUlhCVUZGRVIgICAgICAgIHBSeEJ1ZmZlckFycmF5LAorICAgICB1OCAgICAgICAgICAgIE51bU9mQnVmZmVyLAorICAgICB1OCAgICAgICAgICAgIFJldHVyblNsb3RJbmRleAorCSk7CisKK3ZvaWQKK01MTUVSZXR1cm5QYWNrZXQoCisgICAgIFBXQjMyX0FEQVBURVIgICAgQWRhcHRlciwKKyAgICAgUFVDSEFSICAgICAgICAgICBwUnhCdWZlcgorICAgKTsKKyNpZmRlZiBfSUJTU19CRUFDT05fU0VRX1NUSUNLXworczggU2VuZEJDTnVsbERhdGEoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1MTYgd0lkeCk7CisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmNjBlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5jCkBAIC0wLDAgKzEsMTIyOSBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgTVRPLkMgLQorLy8KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgIE1BQyBUaHJvdWdocHV0IE9wdGltaXphdGlvbiBmb3IgVzg5QzMzIDgwMi4xMWcgV0xBTiBTVEEuCisvLworLy8gICAgVGhlIGZvbGxvd2luZyBNSUIgYXR0cmlidXRlcyBvciBpbnRlcm5hbCB2YXJpYWJsZXMgd2lsbCBiZSBhZmZlY3RlZAorLy8gICAgd2hpbGUgdGhlIE1UTyBpcyBiZWluZyBleGVjdXRlZDoKKy8vICAgICAgIGRvdDExRnJhZ21lbnRhdGlvblRocmVzaG9sZCwKKy8vICAgICAgIGRvdDExUlRTVGhyZXNob2xkLAorLy8gICAgICAgdHJhbnNtaXNzaW9uIHJhdGUgYW5kIFBMQ1AgcHJlYW1ibGUgdHlwZSwKKy8vICAgICAgIENDQSBtb2RlLAorLy8gICAgICAgYW50ZW5uYSBkaXZlcnNpdHkuCisvLworLy8gIFJldmlzaW9uIGhpc3Rvcnk6CisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAyMDAzMTIyNyAgVU4yMCBQZXRlIENoYW8KKy8vICAgICAgICAgICAgICAgICAgICAgRmlyc3QgZHJhZnQKKy8vICAyMDAzMTIyOSAgICAgICAgICAgVHVyYm8gICAgICAgICAgICAgICAgY29weSBmcm9tIFBENDMKKy8vICAyMDA0MDIxMCAgICAgICAgICAgS2V2aW4gICAgICAgICAgICAgICAgcmV2aXNlZAorLy8gIENvcHlyaWdodCAoYykgMjAwMyBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLy8gTEEyMDA0MDIxMF9EVE8ga2V2aW4KKyNpbmNsdWRlICJvc19jb21tb24uaCIKKworLy8gRGVjbGFyZSBTUTMgdG8gcmF0ZSBhbmQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgdGFibGUKKy8vIERlY2xhcmUgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGRzIHRhYmxlCisjZGVmaW5lIE1UT19NQVhfU1EzX0xFVkVMUyAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBNVE9fTUFYX0ZSQUdfVEhfTEVWRUxTICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFMgICAgICAgICAgICAgICAgMTIKKwordTE2IE1UT19GcmFnX1RoX1RibFtNVE9fTUFYX0ZSQUdfVEhfTEVWRUxTXSA9Cit7CisgICAgMjU2LCAzODQsIDUxMiwgNzY4LCAxNTM2Cit9OworCit1OCAgTVRPX1NRM19MZXZlbFtNVE9fTUFYX1NRM19MRVZFTFNdID0KK3sKKyAgICAwLCAyNiwgMzAsIDMyLCAzNCwgMzUsIDM3LCA0MiwgNDQsIDQ2LCA1NCwgNjIsIDc4LCA4MQorfTsKK3U4ICBNVE9fU1EzdG9SYXRlW01UT19NQVhfU1EzX0xFVkVMU10gPQoreworICAgIDAsIDEsIDEsIDIsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMQorfTsKK3U4ICBNVE9fU1EzdG9GcmFnW01UT19NQVhfU1EzX0xFVkVMU10gPQoreworICAgIDAsIDIsIDIsIDMsIDMsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQKK307CisKKy8vIE9uZSBFeGNoYW5nZSBUaW1lIHRhYmxlCisvLwordTE2IE1UT19PbmVfRXhjaGFuZ2VfVGltZV9UYmxfbFtNVE9fTUFYX0ZSQUdfVEhfTEVWRUxTXVtNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFNdID0KK3sKKyAgICB7IDI1NTQsIDE0NzQsICA4MjIsICAgIDAsICAgIDAsICA2MzYsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDB9LAorICAgIHsgMzU3OCwgMTk4NiwgMTAwOSwgICAgMCwgICAgMCwgIDcyOSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMH0sCisgICAgeyA0NjAyLCAyNDk4LCAxMTk1LCAgICAwLCAgICAwLCAgODIyLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwfSwKKyAgICB7IDY2NTAsIDM1MjIsIDE1NjcsICAgIDAsICAgIDAsIDEwMDksICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDB9LAorICAgIHsxMjc5NCwgNjU5NCwgMjY4NCwgICAgMCwgICAgMCwgMTU2NywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMH0KK307CisKK3UxNiBNVE9fT25lX0V4Y2hhbmdlX1RpbWVfVGJsX3NbTVRPX01BWF9GUkFHX1RIX0xFVkVMU11bTVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTXSA9Cit7CisgICAgeyAgICAwLCAxMjgyLCAgNjMwLCAgNDA0LCAgMjg4LCAgNDQ0LCAgMjMyLCAgMTcyLCAgMTQ0LCAgMTE2LCAgMTAwLCAgIDk2fSwKKyAgICB7ICAgIDAsIDE3OTQsICA4MTcsICA1NzIsICA0MDAsICA1MzcsICAzMTYsICAyMjgsICAxODgsICAxNDQsICAxMjQsICAxMTZ9LAorICAgIHsgICAgMCwgMjMwNiwgMTAwMywgIDc0NCwgIDUxNiwgIDYzMCwgIDQwMCwgIDI4OCwgIDIyOCwgIDE3MiwgIDE0NCwgIDEzNn0sCisgICAgeyAgICAwLCAzMzMwLCAxMzc1LCAxMDg0LCAgNzQ0LCAgODE3LCAgNTcyLCAgNDAwLCAgMzE2LCAgMjI4LCAgMTg4LCAgMTcyfSwKKyAgICB7ICAgIDAsIDY0MDIsIDI0OTIsIDIxMDgsIDE0MjQsIDEzNzUsIDEwODQsICA3NDAsICA1NzIsICA0MDAsICAzMTYsICAyODR9Cit9OworCisjZGVmaW5lIE1UT19PTkVfRVhDSEFOR0VfVElNRShwcmVhbWJsZV90eXBlLCBmcmFnX3RoX2x2bCwgZGF0YV9yYXRlX2x2bCkgXAorICAgICAgICAgICAgKHByZWFtYmxlX3R5cGUpID8gICBNVE9fT25lX0V4Y2hhbmdlX1RpbWVfVGJsX3NbZnJhZ190aF9sdmxdW2RhdGFfcmF0ZV9sdmxdIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVE9fT25lX0V4Y2hhbmdlX1RpbWVfVGJsX2xbZnJhZ190aF9sdmxdW2RhdGFfcmF0ZV9sdmxdCisKKy8vIERlY2xhcmUgZGF0YSByYXRlIHRhYmxlCisvL1RoZSBmb2xsb3dpbmcgdGFibGUgd2lsbCBiZSBjaGFuZ2VkIGF0IGFueXRpbWUgaWYgdGhlIG9wcmF0aW9uIHJhdGUgc3VwcG9ydGVkIGJ5IEFQIGRvbid0CisvL21hdGNoIHRoZSB0YWJsZQordTggIE1UT19EYXRhX1JhdGVfVGJsW01UT19NQVhfREFUQV9SQVRFX0xFVkVMU10gPQoreworICAgIDIsIDQsIDExLCAyMiwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA3MiwgOTYsIDEwOAorfTsKKworLy9UaGUgU3RhcmRhcmRfRGF0YV9SYXRlX1RibCBhbmQgTGV2ZWwyUGVyVGJsIHRhYmxlIGlzIHVzZWQgdG8gaW5kaXJlY3RseSByZXRyZWl2ZSBQRVIKKy8vaW5mb3JtYXRpb24gZnJvbSBSYXRlX1BFUl9UQkwKKy8vVGhlIGRlZmF1bHQgc2V0dGluZ3MgaXMgQVAgY2FuIHN1cHBvcnQgZnVsbCByYXRlIHNldC4KK3N0YXRpYyB1OCAgU3RhcmRhcmRfRGF0YV9SYXRlX1RibFtNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFNdID0KK3sKKwkyLCA0LCAxMSwgMjIsIDEyLCAxOCwgMjQsIDM2LCA0OCwgNzIsIDk2LCAxMDgKK307CitzdGF0aWMgdTggIExldmVsMlBlclRibFtNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFNdID0KK3sKKwkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEKK307CisvL0hvdyBtYW55IGtpbmQgb2YgdHggcmF0ZSBjYW4gYmUgc3VwcG9ydGVkIGJ5IEFQCisvL0RUTyB3aWxsIGNoYW5nZSBSYXRlIGJldHdlZW4gTVRPX0RhdGFfUmF0ZV9UYmxbMF0gYW5kIE1UT19EYXRhX1JhdGVfVGJsW01UT19EYXRhUmF0ZUF2YWlsYWJsZUxldmVsLTFdCitzdGF0aWMgdTggIE1UT19EYXRhUmF0ZUF2YWlsYWJsZUxldmVsID0gTVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTOworLy9TbW9vdGhlZCBQRVIgdGFibGUgZm9yIGVhY2ggZGlmZmVyZW50IFJBVEUgYmFzZWQgb24gcGFja2V0IGxlbmd0aCBvZiAxNTE0CitzdGF0aWMgaW50IFJhdGVfUEVSX1RCTFs5MV1bTVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTXSA9IHsKKy8vICAgICAgICAxTSAgICAyTSAgICA1LjVNICAxMU0gICA2TSAgICA5TSAgICAxMk0gICAgIDE4TSAgICAyNE0gICAgMzZNICAgIDQ4TSAgIDU0TQorLyogMCUgICoveyA5MywgICAxNzcsICA0MjAsICA1MzgsICA2OTAsICA3NzQsICAxMDAxLCAgMTQwMSwgIDE3NjgsICAyMzU4LCAgMjgzOCwgIDMwMzl9LAorLyogMSUgICoveyA5MiwgICAxNzYsICA0MTYsICA1MzMsICA2ODMsICA3NjcsICA5OTIsICAgMTM4OSwgIDE3NTIsICAyMzM2LCAgMjgxMSwgIDMwMTB9LAorLyogMiUgICoveyA5MSwgICAxNzQsICA0MTIsICA1MjgsICA2NzUsICA3NjAsICA5ODMsICAgMTM3NiwgIDE3MzUsICAyMzEzLCAgMjc4MywgIDI5Nzl9LAorLyogMyUgICoveyA5MCwgICAxNzIsICA0MDcsICA1MjMsICA2NjcsICA3NTMsICA5NzMsICAgMTM2MywgIDE3MTksICAyMjkwLCAgMjc1NSwgIDI5NDh9LAorLyogNCUgICoveyA5MCwgICAxNzAsICA0MDMsICA1MTgsICA2NTksICA3NDYsICA5NjQsICAgMTM1MCwgIDE3MDEsICAyMjY2LCAgMjcyNiwgIDI5MTZ9LAorLyogNSUgICoveyA4OSwgICAxNjksICAzOTgsICA1MTIsICA2NTEsICA3MzgsICA5NTQsICAgMTMzNiwgIDE2ODQsICAyMjQyLCAgMjY5NiwgIDI4ODR9LAorLyogNiUgICoveyA4OCwgICAxNjcsICAzOTQsICA1MDcsICA2NDMsICA3MzEsICA5NDQsICAgMTMyMiwgIDE2NjYsICAyMjE3LCAgMjY2NSwgIDI4NTF9LAorLyogNyUgICoveyA4NywgICAxNjUsICAzODksICA1MDIsICA2MzUsICA3MjMsICA5MzUsICAgMTMwOCwgIDE2NDgsICAyMTkyLCAgMjYzNCwgIDI4MTd9LAorLyogOCUgICoveyA4NiwgICAxNjMsICAzODQsICA0OTcsICA2MjYsICA3MTYsICA5MjQsICAgMTI5NCwgIDE2MjksICAyMTY2LCAgMjYwMiwgIDI3ODJ9LAorLyogOSUgICoveyA4NSwgICAxNjEsICAzODAsICA0OTEsICA2MTgsICA3MDgsICA5MTQsICAgMTI3OSwgIDE2MTEsICAyMTQwLCAgMjU3MCwgIDI3NDd9LAorLyogMTAlICoveyA4NCwgICAxNjAsICAzNzUsICA0ODYsICA2MDksICA3MDAsICA5MDQsICAgMTI2NSwgIDE1OTEsICAyMTEzLCAgMjUzNywgIDI3MTF9LAorLyogMTElICoveyA4MywgICAxNTgsICAzNzAsICA0ODAsICA2MDAsICA2OTIsICA4OTQsICAgMTI1MCwgIDE1NzIsICAyMDg2LCAgMjUwMywgIDI2NzV9LAorLyogMTIlICoveyA4MiwgICAxNTYsICAzNjUsICA0NzUsICA1OTIsICA2ODQsICA4ODMsICAgMTIzNCwgIDE1NTIsICAyMDU5LCAgMjQ2OSwgIDI2Mzh9LAorLyogMTMlICoveyA4MSwgICAxNTQsICAzNjAsICA0NjksICA1ODMsICA2NzYsICA4NzIsICAgMTIxOSwgIDE1MzIsICAyMDMxLCAgMjQzNSwgIDI2MDB9LAorLyogMTQlICoveyA4MCwgICAxNTIsICAzNTUsICA0NjQsICA1NzQsICA2NjgsICA4NjIsICAgMTIwNCwgIDE1MTIsICAyMDAzLCAgMjQwMCwgIDI1NjJ9LAorLyogMTUlICoveyA3OSwgICAxNTAsICAzNTAsICA0NTgsICA1NjUsICA2NjAsICA4NTEsICAgMTE4OCwgIDE0OTIsICAxOTc0LCAgMjM2NSwgIDI1MjR9LAorLyogMTYlICoveyA3OCwgICAxNDgsICAzNDUsICA0NTMsICA1NTYsICA2NTIsICA4NDAsICAgMTE3MiwgIDE0NzEsICAxOTQ1LCAgMjMyOSwgIDI0ODV9LAorLyogMTclICoveyA3NywgICAxNDYsICAzNDAsICA0NDcsICA1NDcsICA2NDMsICA4MjksICAgMTE1NiwgIDE0NTAsICAxOTE2LCAgMjI5MywgIDI0NDZ9LAorLyogMTglICoveyA3NiwgICAxNDQsICAzMzUsICA0NDEsICA1MzgsICA2MzUsICA4MTgsICAgMTE0MCwgIDE0MjksICAxODg3LCAgMjI1NiwgIDI0MDZ9LAorLyogMTklICoveyA3NSwgICAxNDMsICAzMzAsICA0MzYsICA1MjksICA2MjcsICA4MDcsICAgMTEyNCwgIDE0MDgsICAxODU3LCAgMjIxOSwgIDIzNjZ9LAorLyogMjAlICoveyA3NCwgICAxNDEsICAzMjUsICA0MzAsICA1MjAsICA2MTgsICA3OTUsICAgMTEwNywgIDEzODYsICAxODI3LCAgMjE4MiwgIDIzMjZ9LAorLyogMjElICoveyA3MywgICAxMzksICAzMjAsICA0MjQsICA1MTAsICA2MTAsICA3ODQsICAgMTA5MSwgIDEzNjUsICAxNzk3LCAgMjE0NSwgIDIyODV9LAorLyogMjIlICoveyA3MiwgICAxMzcsICAzMTQsICA0MTgsICA1MDEsICA2MDEsICA3NzIsICAgMTA3NCwgIDEzNDMsICAxNzY2LCAgMjEwNywgIDIyNDR9LAorLyogMjMlICoveyA3MSwgICAxMzUsICAzMDksICA0MTIsICA0OTIsICA1OTIsICA3NjEsICAgMTA1NywgIDEzMjEsICAxNzM2LCAgMjA2OSwgIDIyMDN9LAorLyogMjQlICoveyA3MCwgICAxMzMsICAzMDQsICA0MDcsICA0ODIsICA1ODQsICA3NDksICAgMTA0MCwgIDEyOTksICAxNzA1LCAgMjAzMSwgIDIxNjF9LAorLyogMjUlICoveyA2OSwgICAxMzEsICAyOTksICA0MDEsICA0NzMsICA1NzUsICA3MzgsICAgMTAyMywgIDEyNzcsICAxNjc0LCAgMTk5MiwgIDIxMjB9LAorLyogMjYlICoveyA2OCwgICAxMjksICAyOTMsICAzOTUsICA0NjQsICA1NjYsICA3MjYsICAgMTAwNiwgIDEyNTQsICAxNjQyLCAgMTk1MywgIDIwNzh9LAorLyogMjclICoveyA2NywgICAxMjcsICAyODgsICAzODksICA0NTQsICA1NTcsICA3MTQsICAgOTg5LCAgIDEyMzIsICAxNjExLCAgMTkxNSwgIDIwMzV9LAorLyogMjglICoveyA2NiwgICAxMjUsICAyODMsICAzODMsICA0NDUsICA1NDksICA3MDMsICAgOTcyLCAgIDEyMDksICAxNTc5LCAgMTg3NiwgIDE5OTN9LAorLyogMjklICoveyA2NSwgICAxMjMsICAyNzgsICAzNzcsICA0MzYsICA1NDAsICA2OTEsICAgOTU1LCAgIDExODcsICAxNTQ4LCAgMTgzNiwgIDE5NTF9LAorLyogMzAlICoveyA2NCwgICAxMjEsICAyNzIsICAzNzEsICA0MjYsICA1MzEsICA2NzksICAgOTM3LCAgIDExNjQsICAxNTE2LCAgMTc5NywgIDE5MDh9LAorLyogMzElICoveyA2MywgICAxMTksICAyNjcsICAzNjUsICA0MTcsICA1MjIsICA2NjcsICAgOTIwLCAgIDExNDEsICAxNDg0LCAgMTc1OCwgIDE4NjZ9LAorLyogMzIlICoveyA2MiwgICAxMTcsICAyNjIsICAzNTksICA0MDcsICA1MTMsICA2NTUsICAgOTAyLCAgIDExMTgsICAxNDUzLCAgMTcxOSwgIDE4MjN9LAorLyogMzMlICoveyA2MSwgICAxMTUsICAyNTYsICAzNTMsICAzOTgsICA1MDQsICA2NDMsICAgODg1LCAgIDEwOTUsICAxNDIxLCAgMTY3OSwgIDE3ODF9LAorLyogMzQlICoveyA2MCwgICAxMTMsICAyNTEsICAzNDcsICAzODksICA0OTUsICA2MzEsICAgODY3LCAgIDEwNzIsICAxMzg5LCAgMTY0MCwgIDE3Mzh9LAorLyogMzUlICoveyA1OSwgICAxMTEsICAyNDYsICAzNDEsICAzNzksICA0ODYsICA2MTksICAgODUwLCAgIDEwNDksICAxMzU3LCAgMTYwMCwgIDE2OTV9LAorLyogMzYlICoveyA1OCwgICAxMDgsICAyNDAsICAzMzUsICAzNzAsICA0NzcsICA2MDcsICAgODMyLCAgIDEwMjcsICAxMzI1LCAgMTU2MSwgIDE2NTN9LAorLyogMzclICoveyA1NywgICAxMDYsICAyMzUsICAzMjksICAzNjEsICA0NjgsICA1OTUsICAgODE1LCAgIDEwMDQsICAxMjkzLCAgMTUyMiwgIDE2MTB9LAorLyogMzglICoveyA1NiwgICAxMDQsICAyMzAsICAzMjMsICAzNTEsICA0NTksICA1ODQsICAgNzk3LCAgIDk4MSwgICAxMjYxLCAgMTQ4MywgIDE1Njh9LAorLyogMzklICoveyA1NSwgICAxMDIsICAyMjQsICAzMTcsICAzNDIsICA0NTAsICA1NzIsICAgNzgwLCAgIDk1OCwgICAxMjMwLCAgMTQ0MywgIDE1MjZ9LAorLyogNDAlICoveyA1NCwgICAxMDAsICAyMTksICAzMTEsICAzMzMsICA0NDEsICA1NjAsICAgNzYyLCAgIDkzNSwgICAxMTk4LCAgMTQwNCwgIDE0ODR9LAorLyogNDElICoveyA1MywgICA5OCwgICAyMTQsICAzMDUsICAzMjQsICA0MzIsICA1NDgsICAgNzQ0LCAgIDkxMiwgICAxMTY2LCAgMTM2NiwgIDE0NDJ9LAorLyogNDIlICoveyA1MiwgICA5NiwgICAyMDksICAyOTksICAzMTUsICA0MjMsICA1MzYsICAgNzI3LCAgIDg4OSwgICAxMTM1LCAgMTMyNywgIDE0MDB9LAorLyogNDMlICoveyA1MSwgICA5NCwgICAyMDMsICAyOTMsICAzMDYsICA0MTQsICA1MjQsICAgNzA5LCAgIDg2NiwgICAxMTA0LCAgMTI4OSwgIDEzNTh9LAorLyogNDQlICoveyA1MCwgICA5MiwgICAxOTgsICAyODcsICAyOTcsICA0MDUsICA1MTIsICAgNjkyLCAgIDg0NCwgICAxMDcyLCAgMTI1MCwgIDEzMTd9LAorLyogNDUlICoveyA0OSwgICA5MCwgICAxOTMsICAyODEsICAyODgsICAzOTYsICA1MDAsICAgNjc1LCAgIDgyMSwgICAxMDQxLCAgMTIxMiwgIDEyNzZ9LAorLyogNDYlICoveyA0OCwgICA4OCwgICAxODgsICAyNzUsICAyNzksICAzODcsICA0ODgsICAgNjU3LCAgIDc5OSwgICAxMDExLCAgMTE3NCwgIDEyMzZ9LAorLyogNDclICoveyA0NywgICA4NiwgICAxODMsICAyNjksICAyNzEsICAzNzgsICA0NzYsICAgNjQwLCAgIDc3NywgICA5ODAsICAgMTEzNywgIDExOTV9LAorLyogNDglICoveyA0NiwgICA4NCwgICAxNzgsICAyNjIsICAyNjIsICAzNjksICA0NjQsICAgNjIzLCAgIDc1NCwgICA5NDksICAgMTEwMCwgIDExNTV9LAorLyogNDklICoveyA0NSwgICA4MiwgICAxNzMsICAyNTYsICAyNTQsICAzNjAsICA0NTIsICAgNjA2LCAgIDczMiwgICA5MTksICAgMTA2MywgIDExMTZ9LAorLyogNTAlICoveyA0NCwgICA4MCwgICAxNjgsICAyNTEsICAyNDUsICAzNTEsICA0NDEsICAgNTg5LCAgIDcxMCwgICA4ODksICAgMTAyNiwgIDEwNzZ9LAorLyogNTElICoveyA0MywgICA3OCwgICAxNjMsICAyNDUsICAyMzcsICAzNDIsICA0MjksICAgNTcyLCAgIDY4OSwgICA4NjAsICAgOTkwLCAgIDEwMzh9LAorLyogNTIlICoveyA0MiwgICA3NiwgICAxNTgsICAyMzksICAyMjgsICAzMzMsICA0MTcsICAgNTU1LCAgIDY2NywgICA4MzAsICAgOTU1LCAgIDk5OX0sCisvKiA1MyUgKi97IDQxLCAgIDc0LCAgIDE1MywgIDIzMywgIDIyMCwgIDMyNCwgIDQwNiwgICA1MzgsICAgNjQ1LCAgIDgwMSwgICA5MTksICAgOTYxfSwKKy8qIDU0JSAqL3sgNDAsICAgNzIsICAgMTQ4LCAgMjI3LCAgMjEyLCAgMzE1LCAgMzk0LCAgIDUyMiwgICA2MjQsICAgNzczLCAgIDg4NCwgICA5MjR9LAorLyogNTUlICoveyAzOSwgICA3MCwgICAxNDMsICAyMjEsICAyMDQsICAzMDcsICAzODMsICAgNTA1LCAgIDYwMywgICA3NDQsICAgODUwLCAgIDg4N30sCisvKiA1NiUgKi97IDM4LCAgIDY4LCAgIDEzOCwgIDIxNSwgIDE5NiwgIDI5OCwgIDM3MSwgICA0ODksICAgNTgyLCAgIDcxNiwgICA4MTYsICAgODUxfSwKKy8qIDU3JSAqL3sgMzcsICAgNjcsICAgMTM0LCAgMjA5LCAgMTg5LCAgMjg5LCAgMzYwLCAgIDQ3MywgICA1NjIsICAgNjg4LCAgIDc4MywgICA4MTV9LAorLyogNTglICoveyAzNiwgICA2NSwgICAxMjksICAyMDMsICAxODEsICAyODEsICAzNDksICAgNDU3LCAgIDU0MSwgICA2NjEsICAgNzUwLCAgIDc4MH0sCisvKiA1OSUgKi97IDM1LCAgIDYzLCAgIDEyNCwgIDE5NywgIDE3NCwgIDI3MiwgIDMzOCwgICA0NDEsICAgNTIxLCAgIDYzNCwgICA3MTcsICAgNzQ1fSwKKy8qIDYwJSAqL3sgMzQsICAgNjEsICAgMTIwLCAgMTkyLCAgMTY2LCAgMjY0LCAgMzI3LCAgIDQyNSwgICA1MDEsICAgNjA4LCAgIDY4NiwgICA3MTJ9LAorLyogNjElICoveyAzMywgICA1OSwgICAxMTUsICAxODYsICAxNTksICAyNTUsICAzMTYsICAgNDA5LCAgIDQ4MiwgICA1ODIsICAgNjU1LCAgIDY3OH0sCisvKiA2MiUgKi97IDMyLCAgIDU3LCAgIDExMSwgIDE4MCwgIDE1MiwgIDI0NywgIDMwNSwgICAzOTQsICAgNDYyLCAgIDU1NiwgICA2MjQsICAgNjQ2fSwKKy8qIDYzJSAqL3sgMzEsICAgNTUsICAgMTA3LCAgMTc0LCAgMTQ1LCAgMjM4LCAgMjk0LCAgIDM3OSwgICA0NDMsICAgNTMxLCAgIDU5NCwgICA2MTR9LAorLyogNjQlICoveyAzMCwgICA1MywgICAxMDIsICAxNjksICAxMzgsICAyMzAsICAyODMsICAgMzY0LCAgIDQyNSwgICA1MDYsICAgNTY1LCAgIDU4M30sCisvKiA2NSUgKi97IDI5LCAgIDUyLCAgIDk4LCAgIDE2MywgIDEzMiwgIDIyMiwgIDI3MywgICAzNDksICAgNDA2LCAgIDQ4MiwgICA1MzYsICAgNTUzfSwKKy8qIDY2JSAqL3sgMjgsICAgNTAsICAgOTQsICAgMTU4LCAgMTI1LCAgMjE0LCAgMjYyLCAgIDMzNCwgICAzODgsICAgNDU5LCAgIDUwOCwgICA1MjN9LAorLyogNjclICoveyAyNywgICA0OCwgICA5MCwgICAxNTIsICAxMTksICAyMDYsICAyNTIsICAgMzIwLCAgIDM3MCwgICA0MzYsICAgNDgxLCAgIDQ5NX0sCisvKiA2OCUgKi97IDI2LCAgIDQ2LCAgIDg2LCAgIDE0NywgIDExMywgIDE5OCwgIDI0MiwgICAzMDYsICAgMzUzLCAgIDQxMywgICA0NTUsICAgNDY3fSwKKy8qIDY5JSAqL3sgMjYsICAgNDQsICAgODIsICAgMTQxLCAgMTA3LCAgMTkwLCAgMjMxLCAgIDI5MiwgICAzMzYsICAgMzkxLCAgIDQyOSwgICA0NDB9LAorLyogNzAlICoveyAyNSwgICA0MywgICA3OCwgICAxMzYsICAxMDEsICAxODIsICAyMjEsICAgMjc4LCAgIDMxOSwgICAzNzAsICAgNDA1LCAgIDQxNH0sCisvKiA3MSUgKi97IDI0LCAgIDQxLCAgIDc0LCAgIDEzMCwgIDk1LCAgIDE3NCwgIDIxMiwgICAyNjUsICAgMzAzLCAgIDM1MCwgICAzODEsICAgMzg5fSwKKy8qIDcyJSAqL3sgMjMsICAgMzksICAgNzEsICAgMTI1LCAgOTAsICAgMTY3LCAgMjAyLCAgIDI1MiwgICAyODcsICAgMzI5LCAgIDM1OCwgICAzNjV9LAorLyogNzMlICoveyAyMiwgICAzNywgICA2NywgICAxMTksICA4NSwgICAxNTksICAxOTIsICAgMjM5LCAgIDI3MSwgICAzMTAsICAgMzM1LCAgIDM0Mn0sCisvKiA3NCUgKi97IDIxLCAgIDM2LCAgIDYzLCAgIDExNCwgIDgwLCAgIDE1MSwgIDE4MywgICAyMjYsICAgMjU2LCAgIDI5MSwgICAzMTQsICAgMzIwfSwKKy8qIDc1JSAqL3sgMjAsICAgMzQsICAgNjAsICAgMTA5LCAgNzUsICAgMTQ0LCAgMTc0LCAgIDIxNCwgICAyNDEsICAgMjczLCAgIDI5NCwgICAyOTh9LAorLyogNzYlICoveyAxOSwgICAzMiwgICA1NywgICAxMDQsICA3MCwgICAxMzcsICAxNjQsICAgMjAyLCAgIDIyNywgICAyNTYsICAgMjc0LCAgIDI3OH0sCisvKiA3NyUgKi97IDE4LCAgIDMxLCAgIDUzLCAgIDk5LCAgIDY2LCAgIDEzMCwgIDE1NSwgICAxOTAsICAgMjEzLCAgIDIzOSwgICAyNTYsICAgMjU5fSwKKy8qIDc4JSAqL3sgMTcsICAgMjksICAgNTAsICAgOTQsICAgNjIsICAgMTIyLCAgMTQ2LCAgIDE3OCwgICAyMDAsICAgMjIzLCAgIDIzOCwgICAyNDF9LAorLyogNzklICoveyAxNiwgICAyOCwgICA0NywgICA4OSwgICA1OCwgICAxMTUsICAxMzgsICAgMTY3LCAgIDE4NywgICAyMDgsICAgMjIyLCAgIDIyNX0sCisvKiA4MCUgKi97IDE2LCAgIDI2LCAgIDQ0LCAgIDg0LCAgIDU0LCAgIDEwOSwgIDEyOSwgICAxNTYsICAgMTc1LCAgIDE5NCwgICAyMDYsICAgMjA5fSwKKy8qIDgxJSAqL3sgMTUsICAgMjQsICAgNDEsICAgNzksICAgNTAsICAgMTAyLCAgMTIxLCAgIDE0NiwgICAxNjMsICAgMTgwLCAgIDE5MiwgICAxOTR9LAorLyogODIlICoveyAxNCwgICAyMywgICAzOSwgICA3NCwgICA0NywgICA5NSwgICAxMTMsICAgMTM2LCAgIDE1MSwgICAxNjcsICAgMTc4LCAgIDE4MX0sCisvKiA4MyUgKi97IDEzLCAgIDIxLCAgIDM2LCAgIDY5LCAgIDQ0LCAgIDg5LCAgIDEwNSwgICAxMjYsICAgMTQwLCAgIDE1NSwgICAxNjYsICAgMTY5fSwKKy8qIDg0JSAqL3sgMTIsICAgMjAsICAgMzMsICAgNjQsICAgNDEsICAgODIsICAgOTcsICAgIDExNiwgICAxMzAsICAgMTQ0LCAgIDE1NSwgICAxNTh9LAorLyogODUlICoveyAxMSwgICAxOSwgICAzMSwgICA2MCwgICAzOSwgICA3NiwgICA4OSwgICAgMTA3LCAgIDEyMCwgICAxMzQsICAgMTQ1LCAgIDE0OX0sCisvKiA4NiUgKi97IDExLCAgIDE3LCAgIDI5LCAgIDU1LCAgIDM2LCAgIDcwLCAgIDgyLCAgICA5OCwgICAgMTEwLCAgIDEyNSwgICAxMzYsICAgMTQwfSwKKy8qIDg3JSAqL3sgMTAsICAgMTYsICAgMjYsICAgNTEsICAgMzQsICAgNjQsICAgNzUsICAgIDkwLCAgICAxMDIsICAgMTE2LCAgIDEyOCwgICAxMzN9LAorLyogODglICoveyA5LCAgICAxNCwgICAyNCwgICA0NiwgICAzMiwgICA1OCwgICA2OCwgICAgODEsICAgIDkzLCAgICAxMDgsICAgMTIxLCAgIDEyOH0sCisvKiA4OSUgKi97IDgsICAgIDEzLCAgIDIyLCAgIDQyLCAgIDMxLCAgIDUyLCAgIDYxLCAgICA3NCwgICAgODYsICAgIDEwMiwgICAxMTYsICAgMTI0fSwKKy8qIDkwJSAqL3sgNywgICAgMTIsICAgMjEsICAgMzcsICAgMjksICAgNDYsICAgNTQsICAgIDY2LCAgICA3OSwgICAgOTYsICAgIDExMiwgICAxMjF9Cit9OworCisjZGVmaW5lIFJTU0lCVUZfTlVNIDEwCisjZGVmaW5lIFJTU0kyUkFURV9TSVpFIDkKKworc3RhdGljIFRYUkVUUllfUkVDIFR4UmF0ZVJlYz17TVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTIC0gMSwgMH07ICAgLy9uZXcgcmVjb3JkPT5UeFJhdGVSZWMKK3N0YXRpYyBpbnQgVHhSZXRyeVJhdGU7CisvL3N0YXRpYyBpbnQgU1EzLCBCU1NfUEtfQ05ULCBOSURMRVNMT1QsIFNMT1RfQ05ULCBJTlRFUkZfQ05ULCBHQVBfQ05ULCBEU19FVk07CitzdGF0aWMgczMyIFJTU0lCdWZbUlNTSUJVRl9OVU1dPXstNzAsIC03MCwgLTcwLCAtNzAsIC03MCwgLTcwLCAtNzAsIC03MCwgLTcwLCAtNzB9Oworc3RhdGljIHMzMiBSU1NJU21vb3RoZWQ9LTcwMDsKK3N0YXRpYyBpbnQgUlNTSUJ1ZkluZGV4PTA7CitzdGF0aWMgdTggbWF4X3Jzc2lfcmF0ZTsKK3N0YXRpYyBpbnQgcmF0ZV90YmxbMTNdID0gezAsMSwyLDUsMTEsNiw5LDEyLDE4LDI0LDM2LDQ4LDU0fTsKKy8vW1dLQ0hFTl1zdGF0aWMgY29yZV9kYXRhX3QgKnBNVE9jb3JlX2RhdGE9TlVMTDsKKworc3RhdGljIGludCBUb3RhbFR4UGt0ID0gMDsKK3N0YXRpYyBpbnQgVG90YWxUeFBrdFJldHJ5ID0gMDsKK3N0YXRpYyBpbnQgVHhQa3RQZXJBbnRbM10gPSB7MCwwLDB9Oworc3RhdGljIGludCBSWFJTU0lBTlRbM10gPXstNzAsLTcwLC03MH07CitzdGF0aWMgaW50IFR4UGt0UmV0cnlQZXJBbnRbM10gPSB7MCwwLDB9OworLy9zdGF0aWMgaW50IFR4RG9taW5hdGVGbGFnPUZBTFNFOworc3RhdGljIHU4IG9sZF9hbnRlbm5hWzRdPXsxICwwICwxICwwfTsKK3N0YXRpYyBpbnQgcmV0cnlyYXRlX3JlY1tNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFNdOy8vdGhpcyByZWNvcmQgdGhlIHJldHJ5IHJhdGUgYXQgZGlmZmVyZW50IGRhdGEgcmF0ZQorCitzdGF0aWMgaW50IFBlcmlvZFRvdGFsVHhQa3QgPSAwOworc3RhdGljIGludCBQZXJpb2RUb3RhbFR4UGt0UmV0cnkgPSAwOworCit0eXBlZGVmIHN0cnVjdAoreworCXMzMiBSU1NJOworCXU4ICBUeFJhdGU7Cit9UlNTSTJSQVRFOworCitzdGF0aWMgUlNTSTJSQVRFIFJTU0kyUmF0ZVRibFtSU1NJMlJBVEVfU0laRV0gPQoreworCXstNzQwLCAxMDh9LCAgLy8gNTRNCisJey03NjAsIDk2fSwgIC8vIDQ4TQorCXstODIwLCA3Mn0sICAvLyAzNk0KKwl7LTg1MCwgNDh9LCAgLy8gMjRNCisJey04NzAsIDM2fSwgIC8vIDE4TQorCXstODkwLCAyNH0sICAvLyAxMk0KKwl7LTkwMCwgMTJ9LCAgLy8gNk0KKwl7LTkyMCwgMTF9LCAvLyA1LjVNCisJey05NTAsIDR9LCAvLyAyTQorfTsKK3N0YXRpYyB1OCB1bnRvZ2dsZWNvdW50Oworc3RhdGljIHU4IGxhc3RfcmF0ZV9hbnQ7IC8vdGhpcyBpcyB1c2VkIGZvciBhbnRlbm5hIGJhY2tvZmYtaGgKKwordTgJYm9TcGFyc2VUeFRyYWZmaWMgPSBGQUxTRTsKKwordm9pZCBNVE9fSW5pdChNVE9fRlVOQ19JTlBVVCk7Cit2b2lkIEFudGVubmFUb2dnbGVJbml0aWF0b3IoTVRPX0ZVTkNfSU5QVVQpOwordm9pZCBBbnRlbm5hVG9nZ2xlU3RhdGUoTVRPX0ZVTkNfSU5QVVQpOwordm9pZCBUeFB3ckNvbnRyb2woTVRPX0ZVTkNfSU5QVVQpOwordm9pZCBHZXRGcmVzaEFudGVubmFEYXRhKE1UT19GVU5DX0lOUFVUKTsKK3ZvaWQgVHhSYXRlUmVkdWN0aW9uQ3RybChNVE9fRlVOQ19JTlBVVCk7CisvKiogMS4xLjMxLjEwMDAgVHVyYm8gbW9kaWZ5ICovCisvL3ZvaWQgTVRPX1NldERUT1JhdGVSYW5nZShpbnQgdHlwZSk7Cit2b2lkIE1UT19TZXREVE9SYXRlUmFuZ2UoTVRPX0ZVTkNfSU5QVVQsIHU4ICpwUmF0ZUFycmF5LCB1OCBBcnJheVNpemUpOwordm9pZCBNVE9fU2V0VHhDb3VudChNVE9fRlVOQ19JTlBVVCwgdTggdDAsIHU4IGluZGV4KTsKK3ZvaWQgTVRPX1R4RmFpbGVkKE1UT19GVU5DX0lOUFVUKTsKK3ZvaWQgU21vb3RoUlNTSShzMzIgbmV3X3Jzc2kpOwordm9pZCBoYWxfZ2V0X2R0b19wYXJhKE1UT19GVU5DX0lOUFVULCBjaGFyICpidWZmZXIpOwordTggQ2FsY05ld1JhdGUoTVRPX0ZVTkNfSU5QVVQsIHU4IG9sZF9yYXRlLCB1MzIgcmV0cnlfY250LCB1MzIgdHhfZnJhZ19jbnQpOwordTggR2V0TWF4UmF0ZUxldmVsRnJvbVJTU0kodm9pZCk7Cit1OCBNVE9fR2V0VHhGYWxsYmFja1JhdGUoTVRPX0ZVTkNfSU5QVVQpOworaW50IERpdmlkZShpbnQgYSwgaW50IGIpOwordm9pZCBtdWx0aWFnYyhNVE9fRlVOQ19JTlBVVCwgdTggaGlnaF9nYWluX21vZGUpOworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIE1UT19Jbml0IC0tCisvLworLy8gIERlc2NyaXB0aW9uOgorLy8gICAgU2V0IERUTyBUeCBSYXRlIFNjb3BlIGJlY2F1c2UgZGlmZmVyZW50IEFQIGNvdWxkIGhhdmUgZGlmZmVyZW50IFJhdGUgc2V0LgorLy8gICAgQWZ0ZXIgb3VyIHN0YWlvbiBqb2luIHdpdGggQVAsIExNIGNvcmUgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZQorLy8gICAgVHggUmF0ZSB0YWJsZS4KKy8vCisvLyAgQXJndW1lbnRzOgorLy8gICAgcFJhdGVBcnJheSAgICAgIC0gVGhlIHBvaW50ZXIgdG8gdGhlIFR4IFJhdGUgQXJyYXkgYnkgdGhlIGZvbGxvd2luZyBvcmRlcgorLy8gICAgICAgICAgICAgICAgICAgIC0gMiwgNCwgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4CisvLyAgICAgICAgICAgICAgICAgICAgLSBEVE8gd29uJ3QgY2hlY2sgd2hldGhlciByYXRlIG9yZGVyIGlzIGludmFsaWQgb3Igbm90CisvLyAgICBBcnJheVNpemUgICAgICAgLSBUaGUgYXJyYXkgc2l6ZSB0byBpbmRpY2F0ZSBob3cgbWFueSB0eCByYXRlIHdlIGNhbiBjaG9vc2UKKy8vCisvLyAgc2FtcGxlIGNvZGU6CisvLwl7CisvLwkJdTggUmF0ZUFycmF5WzRdID0gezIsIDQsIDExLCAyMn07CisvLwkJTVRPX1NldERUT1JhdGVSYW5nZShSYXRlQXJyYXksIDQpOworLy8JfQorLy8KKy8vICBSZXR1cm4gVmFsdWU6CisvLyAgICBOb25lCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgTVRPX1NldERUT1JhdGVSYW5nZShNVE9fRlVOQ19JTlBVVCx1OCAqcFJhdGVBcnJheSwgdTggQXJyYXlTaXplKQoreworCXU4CWksIGo9MDsKKworCWZvcihpPTA7aTxBcnJheVNpemU7aSsrKQorCXsKKwkJaWYocFJhdGVBcnJheVtpXSA9PSAyMikKKwkJCWJyZWFrOworCX0KKwlpZihpIDwgQXJyYXlTaXplKSAvL3dlIG5lZWQgYWRqdXN0IHRoZSBvcmRlciBvZiByYXRlIGxpc3QgYmVjYXVzZSAxMU1icHMgcmF0ZSBleGlzdHMKKwl7CisJCWZvcig7aT4wO2ktLSkKKwkJeworCQkJaWYocFJhdGVBcnJheVtpLTFdIDw9IDExKQorCQkJCWJyZWFrOworCQkJcFJhdGVBcnJheVtpXSA9IHBSYXRlQXJyYXlbaS0xXTsKKwkJfQorCQlwUmF0ZUFycmF5W2ldID0gMjI7CisJCU1UT19PRkRNX1JBVEVfTEVWRUwoKSA9IGk7CisJfQorCWVsc2UKKwl7CisJCWZvcihpPTA7IGk8QXJyYXlTaXplOyBpKyspCisJCXsKKwkJCWlmIChwUmF0ZUFycmF5W2ldID49IDEyKQorCQkJCWJyZWFrOworCQl9CisJCU1UT19PRkRNX1JBVEVfTEVWRUwoKSA9IGk7CisJfQorCisJZm9yKGk9MDtpPEFycmF5U2l6ZTtpKyspCisJeworCQlNVE9fRGF0YV9SYXRlX1RibFtpXSA9IHBSYXRlQXJyYXlbaV07CisJCWZvcig7ajxNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFM7aisrKQorCQl7CisJCQlpZihTdGFyZGFyZF9EYXRhX1JhdGVfVGJsW2pdID09IHBSYXRlQXJyYXlbaV0pCisJCQkJYnJlYWs7CisJCX0KKwkJTGV2ZWwyUGVyVGJsW2ldID0gajsKKwkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJV0JERUJVRygoIltNVE9dOk9wIFJhdGVbJWRdOiAlZFxuIixpLCBNVE9fRGF0YV9SYXRlX1RibFtpXSkpOworCQkjZW5kaWYKKwl9CisJTVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwgPSBBcnJheVNpemU7CisJaWYoIE1UT19EQVRBKCkuUmF0ZVBvbGljeSApIC8vIDAgbWVhbnMgdGhhdCBubyByZWdpc3RyeSBzZXR0aW5nCisJeworCQlpZiggTVRPX0RBVEEoKS5SYXRlUG9saWN5ID09IDEgKQorCQkJVHhSYXRlUmVjLnR4X3JhdGUgPSAwOwkvL2FzY2VudAorCQllbHNlCisJCQlUeFJhdGVSZWMudHhfcmF0ZSA9IE1UT19EYXRhUmF0ZUF2YWlsYWJsZUxldmVsIC0xIDsJLy9kZXNjZW50CisJfQorCWVsc2UKKwl7CisJCWlmKCBNVE9fSU5JVFRYUkFURV9NT0RFICkKKwkJCVR4UmF0ZVJlYy50eF9yYXRlID0gMDsJLy9hc2NlbnQKKwkJZWxzZQorCQkJVHhSYXRlUmVjLnR4X3JhdGUgPSBNVE9fRGF0YVJhdGVBdmFpbGFibGVMZXZlbCAtMSA7CS8vZGVzY2VudAorCX0KKwlUeFJhdGVSZWMudHhfcmV0cnlfcmF0ZSA9IDA7CisJLy9zZXQgZGVmYXVsdCByYXRlIGZvciBpbml0aWFsIHVzZQorCU1UT19SQVRFX0xFVkVMKCkgPSBUeFJhdGVSZWMudHhfcmF0ZTsKKwlNVE9fRkFMTEJBQ0tfUkFURV9MRVZFTCgpID0gTVRPX1JBVEVfTEVWRUwoKTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBNVE9fSW5pdCAtLQorLy8KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgIEluaXRpYWxpemUgTVRPIHBhcmFtZXRlcnMuCisvLworLy8gICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgaW52b2tlZCBkdXJpbmcgc3lzdGVtIGluaXRpYWxpemF0aW9uLgorLy8KKy8vICBBcmd1bWVudHM6CisvLyAgICBBZGFwdGVyICAgICAgLSBUaGUgcG9pbnRlciB0byB0aGUgTWluaXBvcnQgQWRhcHRlciBDb250ZXh0CisvLworLy8gIFJldHVybiBWYWx1ZToKKy8vICAgIE5vbmUKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZCBNVE9fSW5pdChNVE9fRlVOQ19JTlBVVCkKK3sKKyAgICBpbnQgaTsKKwkvL1dCREVCVUcoKCJbTVRPXSAtPiBNVE9fSW5pdCgpXG4iKSk7CisJLy9bV0tDSEVOXXBNVE9jb3JlX2RhdGEgPSBwY29yZV9kYXRhOworLy8gMjAwNDA1MTAgVHVyYm8gYWRkIGZvciBnbG9iYWwgdmFyaWFibGUKKyAgICBNVE9fVE1SX0NOVCgpICAgICAgID0gMDsKKyAgICBNVE9fVE9HR0xFX1NUQVRFKCkgID0gVE9HR0xFX1NUQVRFX0lETEU7CisgICAgTVRPX1RYX1JBVEVfUkVEVUNUSU9OX1NUQVRFKCkgPSBSQVRFX0NIR1NUQVRFX0lETEU7CisgICAgTVRPX0JBQ0tPRkZfVE1SKCkgICA9IDA7CisgICAgTVRPX0xBU1RfUkFURSgpICAgICA9IDExOworICAgIE1UT19DT19FRkZJQ0VOVCgpICAgPSAwOworCisgICAgLy9NVE9fVEhfRklYQU5UKCkgICAgID0gTVRPX0RFRkFVTFRfVEhfRklYQU5UOworICAgIE1UT19USF9DTlQoKSAgICAgICAgPSBNVE9fREVGQVVMVF9USF9DTlQ7CisgICAgTVRPX1RIX1NRMygpICAgICAgICA9IE1UT19ERUZBVUxUX1RIX1NRMzsKKyAgICBNVE9fVEhfSURMRV9TTE9UKCkgID0gTVRPX0RFRkFVTFRfVEhfSURMRV9TTE9UOworICAgIE1UT19USF9QUl9JTlRFUkYoKSAgPSBNVE9fREVGQVVMVF9USF9QUl9JTlRFUkY7CisKKyAgICBNVE9fVE1SX0FHSU5HKCkgICAgID0gTVRPX0RFRkFVTFRfVE1SX0FHSU5HOworICAgIE1UT19UTVJfUEVSSU9ESUMoKSAgPSBNVE9fREVGQVVMVF9UTVJfUEVSSU9ESUM7CisKKyAgICAvL1tXS0NIRU5dTVRPX0NDQV9NT0RFX1NFVFVQKCk9ICh1OCkgaGFsX2dldF9jY2FfbW9kZShNVE9fSEFMKCkpOworICAgIC8vW1dLQ0hFTl1NVE9fQ0NBX01PREUoKSAgICAgID0gTVRPX0NDQV9NT0RFX1NFVFVQKCk7CisKKyAgICAvL01UT19QUkVBTUJMRV9UWVBFKCkgPSBNVE9fUFJFQU1CTEVfTE9ORzsKKyAgICBNVE9fUFJFQU1CTEVfVFlQRSgpID0gTVRPX1BSRUFNQkxFX1NIT1JUOyAgIC8vIGZvciB0ZXN0CisKKyAgICBNVE9fQU5UX1NFTCgpICAgICAgID0gaGFsX2dldF9hbnRlbm5hX251bWJlcihNVE9fSEFMKCkpOworICAgIE1UT19BTlRfTUFDKCkgICAgICAgPSBNVE9fQU5UX1NFTCgpOworICAgIE1UT19DTlRfQU5UKDApICAgICAgPSAwOworICAgIE1UT19DTlRfQU5UKDEpICAgICAgPSAwOworICAgIE1UT19TUV9BTlQoMCkgICAgICAgPSAwOworICAgIE1UT19TUV9BTlQoMSkgICAgICAgPSAwOworICAgIE1UT19BTlRfRElWRVJTSVRZKCkgPSBNVE9fQU5URU5OQV9ESVZFUlNJVFlfT047CisgICAgLy9DYXJkU2V0X0FudGVubmFEaXZlcnNpdHkoQWRhcHRlciwgTVRPX0FOVF9ESVZFUlNJVFkoKSk7CisgICAgLy9QTE1FU2V0QW50ZW5uYURpdmVyc2l0eSggQWRhcHRlciwgTVRPX0FOVF9ESVZFUlNJVFkoKSk7CisKKyAgICBNVE9fQUdJTkdfVElNRU9VVCgpID0gMDsvL01UT19UTVJfQUdJTkcoKSAvIE1UT19UTVJfUEVSSU9ESUMoKTsKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gdGhlIHZhbHVlcyBzZXQgYnkgdXNlcgorICAgIC8vCisgICAgLy9NVE9fUkFURV9MRVZFTCgpICAgICAgICAgICAgPSAxMDsKKyAgICBNVE9fUkFURV9MRVZFTCgpICAgICAgICAgICAgPSAwOworCU1UT19GQUxMQkFDS19SQVRFX0xFVkVMKCkJPSBNVE9fUkFURV9MRVZFTCgpOworICAgIE1UT19GUkFHX1RIX0xFVkVMKCkgICAgICAgICA9IDQ7CisgICAgLyoqIDEuMS4yMy4xMDAwIFR1cmJvIG1vZGlmeSBmcm9tIC0xIHRvICsxCisJTVRPX1JUU19USFJFU0hPTEQoKSAgICAgICAgID0gTVRPX0ZSQUdfVEgoKSAtIDE7CisgICAgTVRPX1JUU19USFJFU0hPTERfU0VUVVAoKSAgID0gTVRPX0ZSQUdfVEgoKSAtIDE7CisJKi8KKwlNVE9fUlRTX1RIUkVTSE9MRCgpICAgICAgICAgPSBNVE9fRlJBR19USCgpICsgMTsKKyAgICBNVE9fUlRTX1RIUkVTSE9MRF9TRVRVUCgpICAgPSBNVE9fRlJBR19USCgpICsgMTsKKyAgICAvLyAxLjEuMjMuMTAwMCBUdXJibyBhZGQgZm9yIG10byBjaGFuZ2UgcHJlYW1ibGUgZnJvbSAwIHRvIDEKKwlNVE9fUkFURV9DSEFOR0VfRU5BQkxFKCkgICAgPSAxOworICAgIE1UT19GUkFHX0NIQU5HRV9FTkFCTEUoKSAgICA9IDA7ICAgICAgICAgIC8vIDEuMS4yOS4xMDAwIFR1cmJvIGFkZCBkb24ndCBzdXBwb3J0IGZyYWcKKwkvL1RoZSBkZWZhdWx0IHZhbHVkIG9mIEFOVERJVl9ERUZBVUxUX09OIHdpbGwgYmUgZGVjaWRlZCBieSBFRVBST00KKwkvLyNpZmRlZiBBTlRESVZfREVGQVVMVF9PTgorICAgIC8vTVRPX0FOVF9ESVZFUlNJVFlfRU5BQkxFKCkgID0gMTsKKwkvLyNlbHNlCisgICAgLy9NVE9fQU5UX0RJVkVSU0lUWV9FTkFCTEUoKSAgPSAwOworCS8vI2VuZGlmCisgICAgTVRPX1BPV0VSX0NIQU5HRV9FTkFCTEUoKSAgID0gMTsKKwlNVE9fUFJFQU1CTEVfQ0hBTkdFX0VOQUJMRSgpPSAxOworICAgIE1UT19SVFNfQ0hBTkdFX0VOQUJMRSgpICAgICA9IDA7ICAgICAgICAgIC8vIDEuMS4yOS4xMDAwIFR1cmJvIGFkZCBkb24ndCBzdXBwb3J0IGZyYWcKKyAgICAvLyAyMDA0MDUxMiBUdXJibyBhZGQKKwkvL29sZF9hbnRlbm5hWzBdID0gMTsKKwkvL29sZF9hbnRlbm5hWzFdID0gMDsKKwkvL29sZF9hbnRlbm5hWzJdID0gMTsKKwkvL29sZF9hbnRlbm5hWzNdID0gMDsKKwlmb3IgKGk9MDtpPE1UT19NQVhfREFUQV9SQVRFX0xFVkVMUztpKyspCisJCXJldHJ5cmF0ZV9yZWNbaV09NTsKKworCU1UT19UWEZMT1dDT1VOVCgpID0gMDsKKwkvLy0tLS0tLS0tLSBEVE8gdGhyZXNob2xkIHBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLQorCS8vTVRPUEFSQV9QRVJJT0RJQ19DSEVDS19DWUNMRSgpID0gNTA7CisJTVRPUEFSQV9QRVJJT0RJQ19DSEVDS19DWUNMRSgpID0gMTA7CisJTVRPUEFSQV9SU1NJX1RIX0ZPUl9BTlRESVYoKSA9IDEwOworCU1UT1BBUkFfVFhDT1VOVF9USF9GT1JfQ0FMQ19SQVRFKCkgPSA1MDsKKwlNVE9QQVJBX1RYUkFURV9JTkNfVEgoKQk9IDEwOworCU1UT1BBUkFfVFhSQVRFX0RFQ19USCgpID0gMzA7CisJTVRPUEFSQV9UWFJBVEVfRVFfVEgoKSA9IDQwOworCU1UT1BBUkFfVFhSQVRFX0JBQ0tPRkYoKSA9IDEyOworCU1UT1BBUkFfVFhSRVRSWVJBVEVfUkVEVUNFKCkgPSA2OworCWlmICggTVRPX1RYUE9XRVJfRlJPTV9FRVBST00gPT0gMHhmZikKKwl7CisJCXN3aXRjaCggTVRPX0hBTCgpLT5waHlfdHlwZSkKKwkJeworCQkJY2FzZSBSRl9BSVJPSEFfMjIzMDoKKwkJCWNhc2UgUkZfQUlST0hBXzIyMzBTOiAvLyAyMDA2MDQyMCBBZGQgdGhpcworCQkJCU1UT1BBUkFfVFhQT1dFUl9JTkRFWCgpID0gNDY7IC8vIE1BWC04IC8vIEBAIE9ubHkgZm9yIEFMIDIyMzAKKwkJCQlicmVhazsKKwkJCWNhc2UgUkZfQUlST0hBXzcyMzA6CisJCQkJTVRPUEFSQV9UWFBPV0VSX0lOREVYKCkgPSA0OTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkZfV0JfMjQyOgorCQkJCU1UT1BBUkFfVFhQT1dFUl9JTkRFWCgpID0gMTA7CisJCQkJYnJlYWs7CisJCQljYXNlIFJGX1dCXzI0Ml8xOgorCQkJCU1UT1BBUkFfVFhQT1dFUl9JTkRFWCgpID0gMjQ7IC8vIC0+MTAgMjAwNjAzMTYuMSBtb2RpZnkKKwkJCQlicmVhazsKKwkJfQorCX0KKwllbHNlCS8vZm9sbG93IHRoZSBzZXR0aW5nIGZyb20gRUVQUk9NCisJCU1UT1BBUkFfVFhQT1dFUl9JTkRFWCgpID0gTVRPX1RYUE9XRVJfRlJPTV9FRVBST007CisJaGFsX3NldF9yZl9wb3dlcihNVE9fSEFMKCksICh1OClNVE9QQVJBX1RYUE9XRVJfSU5ERVgoKSk7CisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCS8vIEZvciBSU1NJIHR1cm5pbmcgMjAwNjA4MDguNCBDYW5jZWwgbG9hZCBmcm9tIEVFUFJPTQorCU1UT19EQVRBKCkuUlNTSV9oaWdoID0gLTQxOworCU1UT19EQVRBKCkuUlNTSV9sb3cgPSAtNjA7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KK3N0YXRpYyB1MzIgRFRPX1J4X0luZm9bMTNdWzNdOworc3RhdGljIHUzMiBEVE9fUnhDUkNGYWlsX0luZm9bMTNdWzNdOworc3RhdGljIHUzMiBBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcj01OwordHlwZWRlZiBzdHJ1Y3R7CisJaW50IFJ4UmF0ZTsKKwlpbnQgUnhSYXRlUGt0czsKKwlpbnQgaW5kZXg7Cit9UlhSQVRFX0FOVDsKK1JYUkFURV9BTlQgUnhSYXRlUGVha0FudFszXTsKKworI2RlZmluZSBBTlQwICAgIDAKKyNkZWZpbmUgQU5UMSAgICAxCisjZGVmaW5lIE9MRF9BTlQgMgorCit2b2lkIFNlYXJjaFBlYWtSeFJhdGUoaW50IGluZGV4KQoreworCWludCBpOworCVJ4UmF0ZVBlYWtBbnRbaW5kZXhdLlJ4UmF0ZVBrdHM9MDsKKwkvL0ZpbmQgb3V0IHRoZSBiZXN0IHJ4IHJhdGUgd2hpY2ggaXMgdXNlZCBvbiBkaWZmZXJlbnQgYW50ZW5uYQorCWZvcihpPTE7aTwxMztpKyspCisJeworCQlpZihEVE9fUnhfSW5mb1tpXVtpbmRleF0gPiAodTMyKSBSeFJhdGVQZWFrQW50W2luZGV4XS5SeFJhdGVQa3RzKQorCQl7CisJCQlSeFJhdGVQZWFrQW50W2luZGV4XS5SeFJhdGVQa3RzID0gRFRPX1J4X0luZm9baV1baW5kZXhdOworCQkJUnhSYXRlUGVha0FudFtpbmRleF0uUnhSYXRlID0gcmF0ZV90YmxbaV07CisJCQlSeFJhdGVQZWFrQW50W2luZGV4XS5pbmRleCA9IGk7CisJCX0KKwl9Cit9CisKK3ZvaWQgUmVzZXREVE9fUnhJbmZvKGludCBpbmRleCwgTVRPX0ZVTkNfSU5QVVQpCit7CisJaW50IGk7CisKKwkjaWZkZWYgX1BFX0RUT19EVU1QXworCVdCREVCVUcoKCJSZXNldERUT3J4XG4iKSk7CisJI2VuZGlmCisKKwlmb3IoaT0wO2k8MTM7aSsrKQorCQlEVE9fUnhfSW5mb1tpXVtpbmRleF0gPSBNVE9fSEFMKCktPnJ4X29rX2NvdW50W2ldOworCisJZm9yKGk9MDtpPDEzO2krKykKKwkJRFRPX1J4Q1JDRmFpbF9JbmZvW2ldW2luZGV4XSA9IE1UT19IQUwoKS0+cnhfZXJyX2NvdW50W2ldOworCisJVG90YWxUeFBrdCA9IDA7CisJVG90YWxUeFBrdFJldHJ5ID0gMDsKK30KKwordm9pZCBHZXREVE9fUnhJbmZvKGludCBpbmRleCwgTVRPX0ZVTkNfSU5QVVQpCit7CisJaW50IGk7CisKKwkjaWZkZWYgX1BFX0RUT19EVU1QXworCVdCREVCVUcoKCJHZXREVE9yeFxuIikpOworCSNlbmRpZgorCisJLy9QREVCVUcoKCJbTVRPXTpEVE9fUnhfSW5mb1slZF09JWQsIHJ4X29rX2NvdW50PSVkXG4iLCBpbmRleCwgRFRPX1J4X0luZm9bMF1baW5kZXhdLCBwaHdfZGF0YS0+cnhfb2tfY291bnRbMF0pKTsKKwlmb3IoaT0wO2k8MTM7aSsrKQorCQlEVE9fUnhfSW5mb1tpXVtpbmRleF0gPSBhYnMoTVRPX0hBTCgpLT5yeF9va19jb3VudFtpXSAtIERUT19SeF9JbmZvW2ldW2luZGV4XSk7CisJaWYoRFRPX1J4X0luZm9bMF1baW5kZXhdPT0wKSBEVE9fUnhfSW5mb1swXVtpbmRleF0gPSAxOworCisJZm9yKGk9MDtpPDEzO2krKykKKwkJRFRPX1J4Q1JDRmFpbF9JbmZvW2ldW2luZGV4XSA9IE1UT19IQUwoKS0+cnhfZXJyX2NvdW50W2ldIC0gRFRPX1J4Q1JDRmFpbF9JbmZvW2ldW2luZGV4XTsKKworCVR4UGt0UGVyQW50W2luZGV4XSA9IFRvdGFsVHhQa3Q7CisJVHhQa3RSZXRyeVBlckFudFtpbmRleF0gPSBUb3RhbFR4UGt0UmV0cnk7CisJVG90YWxUeFBrdCA9IDA7CisJVG90YWxUeFBrdFJldHJ5ID0gMDsKK30KKwordm9pZCBPdXRwdXREZWJ1Z0luZm8oaW50IGluZGV4MSwgaW50IGluZGV4MikKK3sKKwkjaWZkZWYgX1BFX0RUT19EVU1QXworCVdCREVCVUcoKCJbSEhEVE9dOlRvdGFsIFJ4ICglZClcdFx0KCVkKSBcbiAiLCBEVE9fUnhfSW5mb1swXVtpbmRleDFdLCBEVE9fUnhfSW5mb1swXVtpbmRleDJdKSk7CisgICAgV0JERUJVRygoIltISERUT106UkVDRUlWRSBSU1NJOiAoJWQpXHRcdCglZCkgXG4gIiwgUlhSU1NJQU5UW2luZGV4MV0sIFJYUlNTSUFOVFtpbmRleDJdKSk7CisJV0JERUJVRygoIltISERUT106VFggcGFja2V0IGNvcnJlY3QgcmF0ZTogKCVkKSUlXHRcdCglZCklJSBcbiAiLERpdmlkZShUeFBrdFBlckFudFtpbmRleDFdKjEwMCxUeFBrdFJldHJ5UGVyQW50W2luZGV4MV0pLCBEaXZpZGUoVHhQa3RQZXJBbnRbaW5kZXgyXSoxMDAsVHhQa3RSZXRyeVBlckFudFtpbmRleDJdKSkpOworCSNlbmRpZgorCXsKKwkJaW50IHRtcDEsIHRtcDI7CisJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCVdCREVCVUcoKCJbSEhEVE9dOlRvdGFsIFR4ICglZClcdFx0KCVkKSBcbiAiLCBUeFBrdFBlckFudFtpbmRleDFdLCBUeFBrdFBlckFudFtpbmRleDJdKSk7CisJCVdCREVCVUcoKCJbSEhEVE9dOlRvdGFsIFR4IHJldHJ5ICglZClcdFx0KCVkKSBcbiAiLCBUeFBrdFJldHJ5UGVyQW50W2luZGV4MV0sIFR4UGt0UmV0cnlQZXJBbnRbaW5kZXgyXSkpOworCQkjZW5kaWYKKwkJdG1wMSA9IFR4UGt0UGVyQW50W2luZGV4MV0gKyBEVE9fUnhfSW5mb1swXVtpbmRleDFdOworCQl0bXAyID0gVHhQa3RQZXJBbnRbaW5kZXgyXSArIERUT19SeF9JbmZvWzBdW2luZGV4Ml07CisJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCVdCREVCVUcoKCJbSEhEVE9dOlRvdGFsIFR4K1JYICglZClcdFx0KCVkKSBcbiAiLCB0bXAxLCB0bXAyKSk7CisJCSNlbmRpZgorCX0KK30KKwordW5zaWduZWQgY2hhciBUeERvbWluYXRlKGludCBpbmRleCkKK3sKKwlpbnQgdG1wOworCisJdG1wID0gVHhQa3RQZXJBbnRbaW5kZXhdICsgRFRPX1J4X0luZm9bMF1baW5kZXhdOworCisJaWYoRGl2aWRlKFR4UGt0UGVyQW50W2luZGV4XSoxMDAsIHRtcCkgPiA0MCkKKwkJcmV0dXJuIFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7Cit9CisKK3Vuc2lnbmVkIGNoYXIgQ21wVHhSZXRyeVJhdGUoaW50IGluZGV4MSwgaW50IGluZGV4MikKK3sKKwlpbnQgdHhfcmV0cnlfcmF0ZTEsIHR4X3JldHJ5X3JhdGUyOworCXR4X3JldHJ5X3JhdGUxID0gRGl2aWRlKChUeFBrdFJldHJ5UGVyQW50W2luZGV4MV0gLSBUeFBrdFBlckFudFtpbmRleDFdKSoxMDAsIFR4UGt0UmV0cnlQZXJBbnRbaW5kZXgxXSk7CisJdHhfcmV0cnlfcmF0ZTIgPSBEaXZpZGUoKFR4UGt0UmV0cnlQZXJBbnRbaW5kZXgyXSAtIFR4UGt0UGVyQW50W2luZGV4Ml0pKjEwMCwgVHhQa3RSZXRyeVBlckFudFtpbmRleDJdKTsKKwkjaWZkZWYgX1BFX0RUT19EVU1QXworCVdCREVCVUcoKCJbTVRPXTpUeFJldHJ5IEFudDA6ICglZCUlKSAgQW50MTogKCVkJSUpIFxuICIsIHR4X3JldHJ5X3JhdGUxLCB0eF9yZXRyeV9yYXRlMikpOworCSNlbmRpZgorCisJaWYodHhfcmV0cnlfcmF0ZTEgPiB0eF9yZXRyeV9yYXRlMikKKwkJcmV0dXJuIFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgR2V0RnJlc2hBbnRlbm5hRGF0YShNVE9fRlVOQ19JTlBVVCkKK3sKKyAgICB1OCAgICAgIHg7CisKKwl4ID0gaGFsX2dldF9hbnRlbm5hX251bWJlcihNVE9fSEFMKCkpOworCS8vaGFsX2dldF9ic3NfcGtfY250KE1UT19IQUwoKSk7CisJLy9oYWxfZ2V0X2VzdF9zcTMoTVRPX0hBTCgpLCAxKTsKKwlvbGRfYW50ZW5uYVswXSA9IHg7CisJLy9pZiB0aGlzIGlzIHRoZSBmdW5jdGlvbiBmb3IgdGltZXIKKwlSZXNldERUT19SeEluZm8oeCwgTVRPX0ZVTkNfSU5QVVRfREFUQSk7CisJaWYoQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXIpCisJCQlBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lci0tOworCWlmIChhYnMobGFzdF9yYXRlX2FudC1NVE9fUkFURV9MRVZFTCgpKT4xKSAgLy9iYWNrb2ZmIHRpbWVyIHJlc2V0CisJCUFudGVubmFUb2dnbGVCa29mZlRpbWVyPTA7CisKKwlpZiAoTVRPX0FOVF9ESVZFUlNJVFkoKSAhPSBNVE9fQU5URU5OQV9ESVZFUlNJVFlfT04gfHwKKwkJTVRPX0FOVF9ESVZFUlNJVFlfRU5BQkxFKCkgIT0gMSkKKwlBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcj0xOworCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJV0JERUJVRygoIltISERUT106KipsYXN0IGRhdGEgcmF0ZT0lZCxub3cgZGF0YSByYXRlPSVkKiphbnRlbm5hIHRvZ2dsZSB0aW1lcj0lZCIsbGFzdF9yYXRlX2FudCxNVE9fUkFURV9MRVZFTCgpLEFudGVubmFUb2dnbGVCa29mZlRpbWVyKSk7CisJI2VuZGlmCisJbGFzdF9yYXRlX2FudD1NVE9fUkFURV9MRVZFTCgpOworCWlmKEFudGVubmFUb2dnbGVCa29mZlRpbWVyPT0wKQorCXsKKwkJTVRPX1RPR0dMRV9TVEFURSgpID0gVE9HR0xFX1NUQVRFX1dBSVQwOworCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQlXQkRFQlVHKCgiW0hIRFRPXTo9PT1zdGF0ZSBpcyBzdGFydGluZz09Zm9yIGFudGVubmEgdG9nZ2xlPT09IikpOworCQkjZW5kaWYKKwl9CisJZWxzZQorCQlNVE9fVE9HR0xFX1NUQVRFKCkgPSBUT0dHTEVfU1RBVEVfSURMRTsKKworCWlmICgoTVRPX0JBQ0tPRkZfVE1SKCkhPTApJiYoTVRPX1JBVEVfTEVWRUwoKT5NVE9fRGF0YVJhdGVBdmFpbGFibGVMZXZlbCAtIDMpKQorCXsKKwkJTVRPX1RPR0dMRV9TVEFURSgpID0gVE9HR0xFX1NUQVRFX0lETEU7CisJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCVdCREVCVUcoKCJbSEhEVE9dOj09PXRoZSBkYXRhIHJhdGUgaXMgJWQgKGdvb2QpYW5kIHdpbGwgbm90IHRvb2dsZSAgPT09IixNVE9fREFUQV9SQVRFKCk+PjEpKTsKKwkJI2VuZGlmCisJfQorCisKK30KKworaW50IFdCX1BDUlsyXTsgLy9wYWNrZXQgY29ycmVjdCByYXRlCisKK3ZvaWQgQW50ZW5uYVRvZ2dsZVN0YXRlKE1UT19GVU5DX0lOUFVUKQoreworICAgIGludCBkZWNpZGVhbnRmbGFnID0gMDsKKwl1OCAgICAgIHg7CisJczMyICAgICByc3NpOworCisJaWYoTVRPX0FOVF9ESVZFUlNJVFlfRU5BQkxFKCkgIT0gMSkKKwkJcmV0dXJuOworCXggPSBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKE1UT19IQUwoKSk7CisJc3dpdGNoKE1UT19UT0dHTEVfU1RBVEUoKSkKKwl7CisKKwkgICAvL01pc3NpbmcuLi4uLgorCSAgIGNhc2UgVE9HR0xFX1NUQVRFX0lETEU6CisJIGNhc2UgVE9HR0xFX1NUQVRFX0JLT0ZGOgorCSAgICAgICAgICAgICBicmVhazs7CisKKwkJY2FzZSBUT0dHTEVfU1RBVEVfV0FJVDA6Ly89PT09PT09PQorCSAgICAgICAgICAgICAgIEdldERUT19SeEluZm8oeCwgTVRPX0ZVTkNfSU5QVVRfREFUQSk7CisJCQlzbWVfZ2V0X3Jzc2koTVRPX0ZVTkNfSU5QVVRfREFUQSwgJnJzc2kpOworCQkJUlhSU1NJQU5UW3hdID0gcnNzaTsKKwkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQlXQkRFQlVHKCgiW0hIRFRPXSAqKndhaXQwPT09PSBDb2xsZWN0aW5nIEFudCVkLS1yc3NpPSVkXG4iLCB4LFJYUlNTSUFOVFt4XSkpOworCQkJI2VuZGlmCisKKwkJCS8vY2hhbmdlIGFudGVubmEgYW5kIHJlc2V0IHRoZSBkYXRhIGF0IGNoYW5nZWQgYW50ZW5uYQorCQkJeCA9ICh+eCkgJiAweDAxOworCQkJTVRPX0FOVF9TRUwoKSA9IHg7CisJCQloYWxfc2V0X2FudGVubmFfbnVtYmVyKE1UT19IQUwoKSwgTVRPX0FOVF9TRUwoKSk7CisJCQlMT0NBTF9BTlRFTk5BX05PKCkgPSB4OworCisJCQlNVE9fVE9HR0xFX1NUQVRFKCkgPSBUT0dHTEVfU1RBVEVfV0FJVDE7Ly9nbyB0byB3YWl0MQorCQkJUmVzZXREVE9fUnhJbmZvKHgsIE1UT19GVU5DX0lOUFVUX0RBVEEpOworCQkJYnJlYWs7CisJCWNhc2UgVE9HR0xFX1NUQVRFX1dBSVQxOi8vPT09PT13YWl0MQorCQkJLy9NVE9fQ05UX0FOVCh4KSA9IGhhbF9nZXRfYnNzX3BrX2NudChNVE9fSEFMKCkpOworCQkJLy9SWFJTU0lBTlRbeF0gPSBoYWxfZ2V0X3Jzc2koTVRPX0hBTCgpKTsKKwkJCXNtZV9nZXRfcnNzaShNVE9fRlVOQ19JTlBVVF9EQVRBLCAmcnNzaSk7CisJCQlSWFJTU0lBTlRbeF0gPSByc3NpOworCQkJR2V0RFRPX1J4SW5mbyh4LCBNVE9fRlVOQ19JTlBVVF9EQVRBKTsKKwkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQlXQkRFQlVHKCgiW0hIRFRPXSAqKndhaXQxPT09PSBDb2xsZWN0aW5nIEFudCVkLS1yc3NpPSVkXG4iLCB4LFJYUlNTSUFOVFt4XSkpOworCQkJI2VuZGlmCisJCQlNVE9fVE9HR0xFX1NUQVRFKCkgPSBUT0dHTEVfU1RBVEVfTUFLRURFU0lTSU9OOworCQkJYnJlYWs7CisJCWNhc2UgVE9HR0xFX1NUQVRFX01BS0VERVNJU0lPTjoKKwkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQlXQkRFQlVHKCgiW0hIRFRPXTpBbnQtLTAtLS0tLS0tLS0tLS0tLS0tLTEtLS1cbiIpKTsKKwkJCU91dHB1dERlYnVnSW5mbyhBTlQwLEFOVDEpOworCQkJI2VuZGlmCisJCQkvL1BERUJVRygoIltISERUT10gKipkZWNpc2lvbj09PT1cbiAiKSk7CisKKwkJCS8vPT09PT1mb2xsb3dpbmcgaXMgdGhlIGRlY2lzaW9uIHByb2R1cmNlCisJCQkvLworCQkJLy8gICAgZmlyc3Q6IGNvbXBhcmUgdGhlIHJzc2kgaWYgZGlmZmVyZW5jZSA+MTAKKwkJCS8vICAgICAgICAgICBzZWxlY3QgdGhlIGxhcmdlciBvbmUKKwkJCS8vICAgICAgICAgICAsb3RoZXJzIGdvIHRvIHNlY29uZAorCQkJLy8gICAgc2Vjb25kOiBjb21hcHJlIHRoZSB0eCtyeCBwYWNrZXQgY291bnQgaWYgZGlmZmVyZW5jZSA+MTAwCisJCQkvLyAgICAgICAgICAgIHVzZSBsYXJnZXIgdG90YWwgcGFja2V0cyBhbnRlbm5hCisJCQkvLyAgICB0aGlyZDo6Y29tcGFyZSB0aGUgdHggUEVSIGlmIHBhY2tldHM+MjAKKwkJCS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGlmZmVyZW5jZSA+NSUgdXNpbmcgdGhlIGJpZ2dlciBvbmUKKwkJCS8vCisJCQkvLyAgICBmb3VydGg6Y29tcGFyZSB0aGUgUlggUEVSIGlmIHBhY2tldHM+MjAKKwkJCS8vICAgICAgICAgICAgICAgICAgICBpZiBQRVIgZGlmZmVyZW5jZSA8NSUKKwkJCS8vICAgICAgICAgICAgICAgICAgIHVzaW5nIG9sZCBhbnRlbm5hCisJCQkvLworCQkJLy8KKwkJCWlmIChhYnMoUlhSU1NJQU5UW0FOVDBdLVJYUlNTSUFOVFtBTlQxXSkgPiBNVE9QQVJBX1JTU0lfVEhfRk9SX0FOVERJVigpKS8vPT09PXJzc2lfdGgKKwkJCXsKKwkJCQlpZiAoUlhSU1NJQU5UW0FOVDBdPlJYUlNTSUFOVFtBTlQxXSkKKwkJCQl7CisJCQkJCWRlY2lkZWFudGZsYWc9MTsKKwkJCQkJTVRPX0FOVF9NQUMoKSA9IEFOVDA7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWRlY2lkZWFudGZsYWc9MTsKKwkJCQkJTVRPX0FOVF9NQUMoKSA9IEFOVDE7CisJCQkJfQorCQkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQkJV0JERUJVRygoIlNlbGVjdCBhbnRlbm5hIGJ5IFJTU0lcbiIpKTsKKwkJCQkjZW5kaWYKKwkJCX0KKwkJCWVsc2UgaWYgIChhYnMoVHhQa3RQZXJBbnRbQU5UMF0gKyBEVE9fUnhfSW5mb1swXVtBTlQwXS1UeFBrdFBlckFudFtBTlQxXS1EVE9fUnhfSW5mb1swXVtBTlQxXSk8NTApLy89PT09PXRvdGFsIHBhY2tldF90aAorCQkJeworCQkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQkJV0JERUJVRygoIlRvdGFsIHR4L3J4IGlzIGNsb3NlXG4iKSk7CisJCQkJI2VuZGlmCisJCQkJaWYgKFR4RG9taW5hdGUoQU5UMCkgJiYgVHhEb21pbmF0ZShBTlQxKSkKKwkJCQl7CisJCQkJCWlmICgoVHhQa3RQZXJBbnRbQU5UMF0+MTApICYmIChUeFBrdFBlckFudFtBTlQxXT4xMCkpLy89PT09dHggcGFja2V0X3RoCisJCQkJCXsKKwkJCQkJCVdCX1BDUltBTlQwXT1EaXZpZGUoVHhQa3RQZXJBbnRbQU5UMF0qMTAwLFR4UGt0UmV0cnlQZXJBbnRbQU5UMF0pOworCQkJCQkJV0JfUENSW0FOVDFdPURpdmlkZShUeFBrdFBlckFudFtBTlQxXSoxMDAsVHhQa3RSZXRyeVBlckFudFtBTlQxXSk7CisJCQkJCQlpZiAoYWJzKFdCX1BDUltBTlQwXS1XQl9QQ1JbQU5UMV0pPjUpLy8gdHggUEVSX3RoCisJCQkJCQl7CisJCQkJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQkJCQlXQkRFQlVHKCgiRGVjaWRlIGJ5IFR4IGNvcnJlY3QgcmF0ZVxuIikpOworCQkJCQkJCSNlbmRpZgorCQkJCQkJCWlmIChXQl9QQ1JbQU5UMF0+V0JfUENSW0FOVDFdKQorCQkJCQkJCXsKKwkJCQkJCQkJZGVjaWRlYW50ZmxhZz0xOworCQkJCQkJCQlNVE9fQU5UX01BQygpID0gQU5UMDsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZQorCQkJCQkJCXsKKwkJCQkJCQkJZGVjaWRlYW50ZmxhZz0xOworCQkJCQkJCQlNVE9fQU5UX01BQygpID0gQU5UMTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJZGVjaWRlYW50ZmxhZz0wOworCQkJCQkJCXVudG9nZ2xlY291bnQrKzsKKwkJCQkJCQlNVE9fQU5UX01BQygpID0gb2xkX2FudGVubmFbMF07CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlkZWNpZGVhbnRmbGFnPTA7CisJCQkJCQlNVE9fQU5UX01BQygpID0gb2xkX2FudGVubmFbMF07CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAoKERUT19SeF9JbmZvWzBdW0FOVDBdPjEwKSYmKERUT19SeF9JbmZvWzBdW0FOVDFdPjEwKSkvL3J4IHBhY2tldCB0aAorCQkJCXsKKwkJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQkJV0JERUJVRygoIkRlY2lkZSBieSBSeFxuIikpOworCQkJCQkjZW5kaWYKKwkJCQkJaWYgKGFicyhEVE9fUnhfSW5mb1swXVtBTlQwXSAtIERUT19SeF9JbmZvWzBdW0FOVDFdKT41MCkKKwkJCQkJeworCQkJCQkJaWYgKERUT19SeF9JbmZvWzBdW0FOVDBdID4gRFRPX1J4X0luZm9bMF1bQU5UMV0pCisJCQkJCQl7CisJCQkJCQkJZGVjaWRlYW50ZmxhZz0xOworCQkJCQkJCU1UT19BTlRfTUFDKCkgPSBBTlQwOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCWRlY2lkZWFudGZsYWc9MTsKKwkJCQkJCQlNVE9fQU5UX01BQygpID0gQU5UMTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCWRlY2lkZWFudGZsYWc9MDsKKwkJCQkJCXVudG9nZ2xlY291bnQrKzsKKwkJCQkJCU1UT19BTlRfTUFDKCkgPSBvbGRfYW50ZW5uYVswXTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlkZWNpZGVhbnRmbGFnPTA7CisJCQkJCU1UT19BTlRfTUFDKCkgPSBvbGRfYW50ZW5uYVswXTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmICgoVHhQa3RQZXJBbnRbQU5UMF0rRFRPX1J4X0luZm9bMF1bQU5UMF0pPihUeFBrdFBlckFudFtBTlQxXStEVE9fUnhfSW5mb1swXVtBTlQxXSkpLy91c2UgbW9yZSBwYWNrZWt0cworCQkJeworCQkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQkJV0JERUJVRygoImRlY2lkZSBieSB0b3RhbCB0eC9yeCA6IEFOVCAwXG4iKSk7CisJCQkJI2VuZGlmCisKKwkJCQlkZWNpZGVhbnRmbGFnPTE7CisJCQkJTVRPX0FOVF9NQUMoKSA9IEFOVDA7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQlXQkRFQlVHKCgiZGVjaWRlIGJ5IHRvdGFsIHR4L3J4IDogQU5UIDFcbiIpKTsKKwkJCQkjZW5kaWYKKwkJCQlkZWNpZGVhbnRmbGFnPTE7CisJCQkJTVRPX0FOVF9NQUMoKSA9IEFOVDE7CisKKwkJCX0KKwkJCS8vdGhpcyBpcyBmb3JjZSBhbnQgdG9nZ2xlCisJCQlpZiAoZGVjaWRlYW50ZmxhZz09MSkKKwkJCQl1bnRvZ2dsZWNvdW50PTA7CisKKwkJCXVudG9nZ2xlY291bnQ9dW50b2dnbGVjb3VudCU0OworCQkJaWYgKHVudG9nZ2xlY291bnQ9PTMpIC8vY2hhbmdlIGFudGVubmEKKwkJCQlNVE9fQU5UX01BQygpID0gKCh+b2xkX2FudGVubmFbMF0pICYgMHgxKTsKKwkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQlXQkRFQlVHKCgiW0hIRFRPXTo9PT09PT09PT09PT09PT09PT11bnRvZ2dsZS1jb3VudD0lZCIsdW50b2dnbGVjb3VudCkpOworCQkJI2VuZGlmCisKKworCisKKwkJCS8vUERFQlVHKCgiW0hIRFRPXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqRFRPIEVOQUJMRT0lZCIsTVRPX0FOVF9ESVZFUlNJVFlfRU5BQkxFKCkpKTsKKwkJCWlmKE1UT19BTlRfRElWRVJTSVRZX0VOQUJMRSgpID09IDEpCisJCQl7CisJCQkJCU1UT19BTlRfU0VMKCkgPSBNVE9fQU5UX01BQygpOworCQkJCQloYWxfc2V0X2FudGVubmFfbnVtYmVyKE1UT19IQUwoKSwgTVRPX0FOVF9TRUwoKSk7CisJCQkJCUxPQ0FMX0FOVEVOTkFfTk8oKSA9IE1UT19BTlRfU0VMKCk7CisJCQkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQkJCVdCREVCVUcoKCJbSEhEVE9dID09ZGVjaXNpb249PSoqKioqKiphbnRmbGFnPSVkKioqKioqKioqKioqKioqKioqc2VsZWN0ZWQgYW50ZW5uYT0lZFxuIixkZWNpZGVhbnRmbGFnLE1UT19BTlRfU0VMKCkpKTsKKwkJCQkJI2VuZGlmCisJCQl9CisJCQlpZiAoZGVjaWRlYW50ZmxhZykKKwkJCXsKKwkJCQlvbGRfYW50ZW5uYVszXT1vbGRfYW50ZW5uYVsyXTsvL3N0b3JlIGFudGVubmEgaW5mbworCQkJCW9sZF9hbnRlbm5hWzJdPW9sZF9hbnRlbm5hWzFdOworCQkJCW9sZF9hbnRlbm5hWzFdPW9sZF9hbnRlbm5hWzBdOworCQkJCW9sZF9hbnRlbm5hWzBdPSBNVE9fQU5UX01BQygpOworCQkJfQorCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCVdCREVCVUcoKCJbSEhEVE9dOioqb2xkIGFudGVubmE9WyVkXVslZF1bJWRdWyVkXVxuIixvbGRfYW50ZW5uYVswXSxvbGRfYW50ZW5uYVsxXSxvbGRfYW50ZW5uYVsyXSxvbGRfYW50ZW5uYVszXSkpOworCQkJI2VuZGlmCisJCQlpZiAob2xkX2FudGVubmFbMF0hPW9sZF9hbnRlbm5hWzFdKQorCQkJCUFudGVubmFUb2dnbGVCa29mZlRpbWVyPTA7CisJCQllbHNlIGlmIChvbGRfYW50ZW5uYVsxXSE9b2xkX2FudGVubmFbMl0pCisJCQkJQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXI9MTsKKwkJCWVsc2UgaWYgKG9sZF9hbnRlbm5hWzJdIT1vbGRfYW50ZW5uYVszXSkKKwkJCQlBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcj0yOworCQkJZWxzZQorCQkJCUFudGVubmFUb2dnbGVCa29mZlRpbWVyPTQ7CisKKwkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQlXQkRFQlVHKCgiW0hIRFRPXToqKmJhY2sgb2ZmIHRpbWVyPSVkIixBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcikpOworCQkJI2VuZGlmCisKKwkJCVJlc2V0RFRPX1J4SW5mbyhNVE9fQU5UX01BQygpLCBNVE9fRlVOQ19JTlBVVF9EQVRBKTsKKwkJCWlmIChBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcj09MCAmJiBkZWNpZGVhbnRmbGFnKQorCQkJCU1UT19UT0dHTEVfU1RBVEUoKSA9IFRPR0dMRV9TVEFURV9XQUlUMDsKKwkJCWVsc2UKKwkJCQlNVE9fVE9HR0xFX1NUQVRFKCkgPSBUT0dHTEVfU1RBVEVfSURMRTsKKwkJCWJyZWFrOworCX0KKworfQorCit2b2lkIG11bHRpYWdjKE1UT19GVU5DX0lOUFVULCB1OCBoaWdoX2dhaW5fbW9kZSApCit7CisJczMyCQlyc3NpOworCWh3X2RhdGFfdAkqcEh3RGF0YSA9IE1UT19IQUwoKTsKKworCXNtZV9nZXRfcnNzaShNVE9fRlVOQ19JTlBVVF9EQVRBLCAmcnNzaSk7CisKKwlpZiggKFJGX1dCXzI0MiA9PSBwSHdEYXRhLT5waHlfdHlwZSkgfHwKKwkJKFJGX1dCXzI0Ml8xID09IHBId0RhdGEtPnBoeV90eXBlKSApIC8vIDIwMDYwNjE5LjUgQWRkCisJeworCQlpZiAoaGlnaF9nYWluX21vZGU9PTEpCisJCXsKKwkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MEMsIDB4ZjhmNTIyMzApOworCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgyMCwgMHgwNkM0MzQ0MCk7CisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwMEMsIDB4RjJGMzIyMzIgKTsgLy8gOTQwOTE2IDB4ZjhmNTIyMzAgKTsKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTAyMCwgMHgwNGNiMzQ0MCApOyAvLyA5NDA5MTUgMHgwNkM0MzQ0MAorCQl9CisJCWVsc2UgaWYgKGhpZ2hfZ2Fpbl9tb2RlPT0wKQorCQl7CisJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDBDLCAweEVFRUUwMDBEKTsKKwkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MjAsIDB4MDZjNDE0NDApOworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDBDLCAweEVFRUUwMDBEICk7CisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwMjAsIDB4MDRjYjE0NDAgKTsgLy8gOTQwOTE1IDB4MDZjNDE0NDAKKwkJfQorCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQlXQkRFQlVHKCgiW0hIRFRPQUdDXSAqKnJzc2k9JWQsIGhpZ2ggZ2FpbiBtb2RlPSVkIiwgcnNzaSwgaGlnaF9nYWluX21vZGUpKTsKKwkJI2VuZGlmCisJfQorfQorCit2b2lkIFR4UHdyQ29udHJvbChNVE9fRlVOQ19JTlBVVCkKK3sKKyAgICBzMzIgICAgIHJzc2k7CisJaHdfZGF0YV90CSpwSHdEYXRhID0gTVRPX0hBTCgpOworCisJc21lX2dldF9yc3NpKE1UT19GVU5DX0lOUFVUX0RBVEEsICZyc3NpKTsKKwlpZiggKFJGX1dCXzI0MiA9PSBwSHdEYXRhLT5waHlfdHlwZSkgfHwKKwkJKFJGX1dCXzI0Ml8xID09IHBId0RhdGEtPnBoeV90eXBlKSApIC8vIDIwMDYwNjE5LjUgQWRkCisJeworCQlzdGF0aWMgdTggaGlnaF9nYWluX21vZGU7IC8vdGhpcyBpcyBmb3Igd2luYm9uZCBSRiBzd2l0Y2ggTE5BCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgLy91c2luZyBkaWZmZXJlbnQgcmVnaXN0ZXIgc2V0dGluZworCisJCWlmIChoaWdoX2dhaW5fbW9kZT09MSkKKwkJeworCQkJaWYoIHJzc2kgPiBNVE9fREFUQSgpLlJTU0lfaGlnaCApCisJCQl7CisJCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgwQywgMHhmOGY1MjIzMCk7CisJCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgyMCwgMHgwNTU0MTY0MCk7CisJCQkJaGlnaF9nYWluX21vZGU9MDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDBDLCAweGY4ZjUxODMwKTsKKwkJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDIwLCAweDA1NTQzRTQwKTsKKwkJCQloaWdoX2dhaW5fbW9kZT0xOworCQkJfQorCQl9CisJCWVsc2UgLy9pZiAoaGlnaF9nYWluX21vZGU9PTApCisJCXsKKwkJCWlmKCByc3NpIDwgTVRPX0RBVEEoKS5SU1NJX2xvdyApCisJCQl7CisJCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgwQywgMHhmOGY1MTgzMCk7CisJCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgyMCwgMHgwNTU0M0U0MCk7CisJCQkJaGlnaF9nYWluX21vZGU9MTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDBDLCAweGY4ZjUyMjMwKTsKKwkJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDIwLCAweDA1NTQxNjQwKTsKKwkJCQloaWdoX2dhaW5fbW9kZT0wOworCQkJfQorCQl9CisKKwkJLy8gQWx3YXlzIGhpZ2ggZ2FpbiAyMDA1MTAxNC4gVXNpbmcgdGhlIGluaXRpYWwgdmFsdWUgb25seS4KKwkJbXVsdGlhZ2MoTVRPX0ZVTkNfSU5QVVRfREFUQSwgaGlnaF9nYWluX21vZGUpOworCX0KK30KKworCit1OCBDYWxjTmV3UmF0ZShNVE9fRlVOQ19JTlBVVCwgdTggb2xkX3JhdGUsIHUzMiByZXRyeV9jbnQsIHUzMiB0eF9mcmFnX2NudCkKK3sKKwlpbnQgaTsKKwl1OCBuZXdfcmF0ZTsKKyAgICB1MzIgcmV0cnlfcmF0ZTsKKwlpbnQgVHhUaHJvdXB1dDEsIFR4VGhyb3VwdXQyLCBUeFRocm91cHV0MywgQmVzdFRocm91cGh0OworCisJaWYodHhfZnJhZ19jbnQgPCBNVE9QQVJBX1RYQ09VTlRfVEhfRk9SX0NBTENfUkFURSgpKSAvL3RvbyBmZXcgcGFja2V0cyB0cmFuc21pdAorCXsKKwkJcmV0dXJuIDB4ZmY7CisJfQorCXJldHJ5X3JhdGUgPSBEaXZpZGUocmV0cnlfY250ICogMTAwLCB0eF9mcmFnX2NudCk7CisKKwlpZihyZXRyeV9yYXRlID4gOTApIHJldHJ5X3JhdGUgPSA5MDsgLy9hbHdheXMgdHJ1bmNhdGUgdG8gOTAlIGR1ZSB0byBsb29rdXAgdGFibGUgc2l6ZQorCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJV0JERUJVRygoIiMjIyMjIEN1cnJlbnQgbGV2ZWwgPSVkLCBSZXRyeSBjb3VudCA9JWQsIEZyYWcgY291bnQgPSVkXG4iLAorCQkJCQkJb2xkX3JhdGUsIHJldHJ5X2NudCwgdHhfZnJhZ19jbnQpKTsKKwlXQkRFQlVHKCgiKiMjKiBSZXRyeSByYXRlID0lZCwgdGhyb3VnaHB1dCA9JWRcbiIsCisJCQkJCQlyZXRyeV9yYXRlLCBSYXRlX1BFUl9UQkxbcmV0cnlfcmF0ZV1bb2xkX3JhdGVdKSk7CisJV0JERUJVRygoIlR4UmF0ZVJlYy50eF9yYXRlID0lZCwgUmV0cnkgcmF0ZSA9ICVkLCB0aHJvdWdocHV0ID0gJWRcbiIsCisJCQkJCQlUeFJhdGVSZWMudHhfcmF0ZSwgVHhSYXRlUmVjLnR4X3JldHJ5X3JhdGUsCisJCQkJCQlSYXRlX1BFUl9UQkxbVHhSYXRlUmVjLnR4X3JldHJ5X3JhdGVdW0xldmVsMlBlclRibFtUeFJhdGVSZWMudHhfcmF0ZV1dKSk7CisJV0JERUJVRygoIm9sZF9yYXRlLTEgPSVkLCBSZXRyeSByYXRlID0gJWQsIHRocm91Z2hwdXQgPSAlZFxuIiwKKwkJCQkJCW9sZF9yYXRlLTEsIHJldHJ5cmF0ZV9yZWNbb2xkX3JhdGUtMV0sCisJCQkJCQlSYXRlX1BFUl9UQkxbcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZS0xXV1bb2xkX3JhdGUtMV0pKTsKKwlXQkRFQlVHKCgib2xkX3JhdGUrMSA9JWQsIFJldHJ5IHJhdGUgPSAlZCwgdGhyb3VnaHB1dCA9ICVkXG4iLAorCQkJCQkJb2xkX3JhdGUrMSwgcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZSsxXSwKKwkJCQkJCVJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlKzFdXVtvbGRfcmF0ZSsxXSkpOworCSNlbmRpZgorCisJLy9mb2xsb3dpbmcgaXMgZm9yIHJlY29yZCB0aGUgcmV0cnkgcmF0ZSBhdCB0aGUgZGlmZmVyZW50IGRhdGEgcmF0ZQorCWlmIChhYnMocmV0cnlfcmF0ZS1yZXRyeXJhdGVfcmVjW29sZF9yYXRlXSk8NTApLy8tLS10aGUgcGVyIFRICisJCXJldHJ5cmF0ZV9yZWNbb2xkX3JhdGVdID0gcmV0cnlfcmF0ZTsgLy91cGRhdGUgcmV0cnkgcmF0ZQorCWVsc2UKKwl7CisJCWZvciAoaT0wO2k8TVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWw7aSsrKSAvL3Jlc2V0IGFsbCByZXRyeSByYXRlCisJCQlyZXRyeXJhdGVfcmVjW2ldPTA7CisJCXJldHJ5cmF0ZV9yZWNbb2xkX3JhdGVdID0gcmV0cnlfcmF0ZTsKKwkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJV0JERUJVRygoIlJlc2V0IHJldHJ5IHJhdGUgdGFibGVcbiIpKTsKKwkJI2VuZGlmCisJfQorCisJaWYoVHhSYXRlUmVjLnR4X3JhdGUgPiBvbGRfcmF0ZSkgICAvL0RlY3JlYXNlIFR4IFJhdGUKKwl7CisJCVR4VGhyb3VwdXQxID0gUmF0ZV9QRVJfVEJMW1R4UmF0ZVJlYy50eF9yZXRyeV9yYXRlXVtMZXZlbDJQZXJUYmxbVHhSYXRlUmVjLnR4X3JhdGVdXTsKKwkJVHhUaHJvdXB1dDIgPSBSYXRlX1BFUl9UQkxbcmV0cnlfcmF0ZV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlXV07CisJCWlmKFR4VGhyb3VwdXQxID4gVHhUaHJvdXB1dDIpCisJCXsKKwkJCW5ld19yYXRlID0gVHhSYXRlUmVjLnR4X3JhdGU7CisJCQlCZXN0VGhyb3VwaHQgPSBUeFRocm91cHV0MTsKKwkJfQorCQllbHNlCisJCXsKKwkJCW5ld19yYXRlID0gb2xkX3JhdGU7CisJCQlCZXN0VGhyb3VwaHQgPSBUeFRocm91cHV0MjsKKwkJfQorCQlpZigob2xkX3JhdGUgPiAwKSAmJihyZXRyeV9yYXRlPk1UT1BBUkFfVFhSQVRFX0RFQ19USCgpKSkgICAvL01pbiBSYXRlCisJCXsKKwkJCVR4VGhyb3VwdXQzID0gUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUtMV1dW0xldmVsMlBlclRibFtvbGRfcmF0ZS0xXV07CisJCQlpZihCZXN0VGhyb3VwaHQgPCBUeFRocm91cHV0MykKKwkJCXsKKwkJCQluZXdfcmF0ZSA9IG9sZF9yYXRlIC0gMTsKKwkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCVdCREVCVUcoKCItLS0tLS0tLVxuIikpOworCQkJCSNlbmRpZgorCQkJCUJlc3RUaHJvdXBodCA9IFR4VGhyb3VwdXQzOworCQkJfQorCQl9CisJfQorCWVsc2UgaWYoVHhSYXRlUmVjLnR4X3JhdGUgPCBvbGRfcmF0ZSkgIC8vSW5jcmVhc2UgVHggUmF0ZQorCXsKKwkJVHhUaHJvdXB1dDEgPSBSYXRlX1BFUl9UQkxbVHhSYXRlUmVjLnR4X3JldHJ5X3JhdGVdW0xldmVsMlBlclRibFtUeFJhdGVSZWMudHhfcmF0ZV1dOworCQlUeFRocm91cHV0MiA9IFJhdGVfUEVSX1RCTFtyZXRyeV9yYXRlXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGVdXTsKKwkJaWYoVHhUaHJvdXB1dDEgPiBUeFRocm91cHV0MikKKwkJeworCQkJbmV3X3JhdGUgPSBUeFJhdGVSZWMudHhfcmF0ZTsKKwkJCUJlc3RUaHJvdXBodCA9IFR4VGhyb3VwdXQxOworCQl9CisJCWVsc2UKKwkJeworCQkJbmV3X3JhdGUgPSBvbGRfcmF0ZTsKKwkJCUJlc3RUaHJvdXBodCA9IFR4VGhyb3VwdXQyOworCQl9CisJCWlmICgob2xkX3JhdGUgPCBNVE9fRGF0YVJhdGVBdmFpbGFibGVMZXZlbCAtIDEpJiYocmV0cnlfcmF0ZTxNVE9QQVJBX1RYUkFURV9JTkNfVEgoKSkpCisJCXsKKwkJCS8vVHhUaHJvdXB1dDMgPSBSYXRlX1BFUl9UQkxbcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZSsxXV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlKzFdXTsKKwkJCWlmIChyZXRyeXJhdGVfcmVjW29sZF9yYXRlKzFdID4gTVRPUEFSQV9UWFJFVFJZUkFURV9SRURVQ0UoKSkKKwkJCQlUeFRocm91cHV0MyA9IFJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlKzFdLU1UT1BBUkFfVFhSRVRSWVJBVEVfUkVEVUNFKCldW0xldmVsMlBlclRibFtvbGRfcmF0ZSsxXV07CisJCQllbHNlCisJCQkJVHhUaHJvdXB1dDMgPSBSYXRlX1BFUl9UQkxbcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZSsxXV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlKzFdXTsKKwkJCWlmKEJlc3RUaHJvdXBodCA8IFR4VGhyb3VwdXQzKQorCQkJeworCQkJCW5ld19yYXRlID0gb2xkX3JhdGUgKyAxOworCQkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQkJV0JERUJVRygoIisrKysrKysrKytcbiIpKTsKKwkJCQkjZW5kaWYKKwkJCQlCZXN0VGhyb3VwaHQgPSBUeFRocm91cHV0MzsKKwkJCX0KKwkJfQorCX0KKwllbHNlICAvL1R4IFJhdGUgbm8gY2hhbmdlCisJeworCQlUeFRocm91cHV0MiA9IFJhdGVfUEVSX1RCTFtyZXRyeV9yYXRlXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGVdXTsKKwkJbmV3X3JhdGUgPSBvbGRfcmF0ZTsKKwkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDI7CisKKwkJaWYgKHJldHJ5X3JhdGUgPE1UT1BBUkFfVFhSQVRFX0VRX1RIKCkpICAgIC8vdGggZm9yIGNoYW5nZSBoaWdoZXIgcmF0ZQorCQl7CisJCQlpZihvbGRfcmF0ZSA8IE1UT19EYXRhUmF0ZUF2YWlsYWJsZUxldmVsIC0gMSkKKwkJCXsKKwkJCQkvL1R4VGhyb3VwdXQzID0gUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV1dW0xldmVsMlBlclRibFtvbGRfcmF0ZSsxXV07CisJCQkJaWYgKHJldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV0gPiBNVE9QQVJBX1RYUkVUUllSQVRFX1JFRFVDRSgpKQorCQkJCQlUeFRocm91cHV0MyA9IFJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlKzFdLU1UT1BBUkFfVFhSRVRSWVJBVEVfUkVEVUNFKCldW0xldmVsMlBlclRibFtvbGRfcmF0ZSsxXV07CisJCQkJZWxzZQorCQkJCQlUeFRocm91cHV0MyA9IFJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlKzFdXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGUrMV1dOworCQkJCWlmKEJlc3RUaHJvdXBodCA8IFR4VGhyb3VwdXQzKQorCQkJCXsKKwkJCQkJbmV3X3JhdGUgPSBvbGRfcmF0ZSArIDE7CisJCQkJCUJlc3RUaHJvdXBodCA9IFR4VGhyb3VwdXQzOworCQkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCQlXQkRFQlVHKCgiPSsrKysrKysrKytcbiIpKTsKKwkJCQkJI2VuZGlmCisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJaWYob2xkX3JhdGUgPiAwKSAgIC8vTWluIFJhdGUKKwkJeworCQkJVHhUaHJvdXB1dDMgPSBSYXRlX1BFUl9UQkxbcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZS0xXV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlLTFdXTsKKwkJCWlmKEJlc3RUaHJvdXBodCA8IFR4VGhyb3VwdXQzKQorCQkJeworCQkJCW5ld19yYXRlID0gb2xkX3JhdGUgLSAxOworCQkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQkJV0JERUJVRygoIj0tLS0tLS0tLVxuIikpOworCQkJCSNlbmRpZgorCQkJCUJlc3RUaHJvdXBodCA9IFR4VGhyb3VwdXQzOworCQkJfQorCQl9CisJfQorCisJaWYgKCFMT0NBTF9JU19JQlNTX01PREUoKSkKKwl7CisJbWF4X3Jzc2lfcmF0ZSA9IEdldE1heFJhdGVMZXZlbEZyb21SU1NJKCk7CisJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwlXQkRFQlVHKCgiW01UT106UlNTSTJSYXRlPSVkXG4iLCBNVE9fRGF0YV9SYXRlX1RibFttYXhfcnNzaV9yYXRlXSkpOworCSNlbmRpZgorCWlmKG5ld19yYXRlID4gbWF4X3Jzc2lfcmF0ZSkKKwkJbmV3X3JhdGUgPSBtYXhfcnNzaV9yYXRlOworCX0KKworCS8vc2F2ZSBuZXcgcmF0ZTsKKwlUeFJhdGVSZWMudHhfcmF0ZSA9IG9sZF9yYXRlOworCVR4UmF0ZVJlYy50eF9yZXRyeV9yYXRlID0gKHU4KSByZXRyeV9yYXRlOworCVR4UmV0cnlSYXRlID0gcmV0cnlfcmF0ZTsKKwlyZXR1cm4gbmV3X3JhdGU7Cit9CisKK3ZvaWQgU21vb3RoUlNTSShzMzIgbmV3X3Jzc2kpCit7CisJUlNTSVNtb290aGVkID0gUlNTSVNtb290aGVkICsgbmV3X3Jzc2kgLSBSU1NJQnVmW1JTU0lCdWZJbmRleF07CisJUlNTSUJ1ZltSU1NJQnVmSW5kZXhdID0gbmV3X3Jzc2k7CisJUlNTSUJ1ZkluZGV4ID0gKFJTU0lCdWZJbmRleCArIDEpICUgMTA7Cit9CisKK3U4IEdldE1heFJhdGVMZXZlbEZyb21SU1NJKHZvaWQpCit7CisJdTggaTsKKwl1OCBUeFJhdGU7CisKKwlmb3IoaT0wO2k8UlNTSTJSQVRFX1NJWkU7aSsrKQorCXsKKwkJaWYoUlNTSVNtb290aGVkID4gUlNTSTJSYXRlVGJsW2ldLlJTU0kpCisJCQlicmVhazsKKwl9CisJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwlXQkRFQlVHKCgiW01UT106UlNTST0lZFxuIiwgRGl2aWRlKFJTU0lTbW9vdGhlZCwgMTApKSk7CisJI2VuZGlmCisJaWYoaSA8IFJTU0kyUkFURV9TSVpFKQorCQlUeFJhdGUgPSBSU1NJMlJhdGVUYmxbaV0uVHhSYXRlOworCWVsc2UKKwkJVHhSYXRlID0gMjsgIC8vZGl2aWRlZCBieSAyID0gMU1icHMKKworCWZvcihpPU1UT19EYXRhUmF0ZUF2YWlsYWJsZUxldmVsLTE7aT4wO2ktLSkKKwl7CisJCWlmKFR4UmF0ZSA+PU1UT19EYXRhX1JhdGVfVGJsW2ldKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBpOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIERlc2NyaXB0aW9uOgorLy8gICAgICBJZiB3ZSBlbmFibGUgRFRPLCB3ZSB3aWxsIGlnbm9yZSB0aGUgdHggY291bnQgd2l0aCBkaWZmZXJlbnQgdHggcmF0ZSBmcm9tCisvLyAgICAgIERUTyByYXRlLiBUaGlzIGlzIGJlY2F1c2Ugd2hlbiB3ZSBhZGp1c3QgRFRPIHR4IHJhdGUsIHRoZXJlIGNvdWxkIGJlIHNvbWUKKy8vICAgICAgcGFja2V0cyBpbiB0aGUgdHggcXVldWUgd2l0aCBwcmV2aW91cyB0eCByYXRlCit2b2lkIE1UT19TZXRUeENvdW50KE1UT19GVU5DX0lOUFVULCB1OCB0eF9yYXRlLCB1OCBpbmRleCkKK3sKKwlNVE9fVFhGTE9XQ09VTlQoKSsrOworCWlmICgoTVRPX0VOQUJMRT09MSkgJiYgKE1UT19SQVRFX0NIQU5HRV9FTkFCTEUoKT09MSkpCisJeworCQlpZih0eF9yYXRlID09IE1UT19EQVRBX1JBVEUoKSkKKwkJeworCQkJaWYgKGluZGV4ID09IDApCisJCQl7CisJCQkJaWYgKGJvU3BhcnNlVHhUcmFmZmljKQorCQkJCQlNVE9fSEFMKCktPmR0b190eF9mcmFnX2NvdW50ICs9IE1UT1BBUkFfUEVSSU9ESUNfQ0hFQ0tfQ1lDTEUoKTsKKwkJCQllbHNlCisJCQkJCU1UT19IQUwoKS0+ZHRvX3R4X2ZyYWdfY291bnQgKz0gMTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoaW5kZXg8OCkKKwkJCQl7CisJCQkJCU1UT19IQUwoKS0+ZHRvX3R4X3JldHJ5X2NvdW50ICs9IGluZGV4OworCQkJCQlNVE9fSEFMKCktPmR0b190eF9mcmFnX2NvdW50ICs9IChpbmRleCsxKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTVRPX0hBTCgpLT5kdG9fdHhfcmV0cnlfY291bnQgKz0gNzsKKwkJCQkJTVRPX0hBTCgpLT5kdG9fdHhfZnJhZ19jb3VudCArPSA3OworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmKE1UT19EQVRBX1JBVEUoKT40OCAmJiB0eF9yYXRlID09NDgpCisJCXsvL0FMRlJFRAorCQkJaWYgKGluZGV4PDMpIC8vZm9yIHJlZHVjaWluZyBkYXRhIHJhdGUgc2NoZW1lICwKKwkJCQkgICAgICAgICAvL2RvIG5vdCBjYWxjdSBkaWZmZXJlbnQgZGF0YSByYXRlCisJCQkJCQkgLy8zIGlzIHRoZSByZWR1Y2luZyBkYXRhIHJhdGUgYXQgcmV0cnkKKwkJCXsKKwkJCQlNVE9fSEFMKCktPmR0b190eF9yZXRyeV9jb3VudCArPSBpbmRleDsKKwkJCQlNVE9fSEFMKCktPmR0b190eF9mcmFnX2NvdW50ICs9IChpbmRleCsxKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlNVE9fSEFMKCktPmR0b190eF9yZXRyeV9jb3VudCArPSAzOworCQkJCU1UT19IQUwoKS0+ZHRvX3R4X2ZyYWdfY291bnQgKz0gMzsKKwkJCX0KKworCQl9CisJfQorCWVsc2UKKwl7CisJCU1UT19IQUwoKS0+ZHRvX3R4X3JldHJ5X2NvdW50ICs9IGluZGV4OworCQlNVE9fSEFMKCktPmR0b190eF9mcmFnX2NvdW50ICs9IChpbmRleCsxKTsKKwl9CisJVG90YWxUeFBrdCArKzsKKwlUb3RhbFR4UGt0UmV0cnkgKz0gKGluZGV4KzEpOworCisJUGVyaW9kVG90YWxUeFBrdCArKzsKKwlQZXJpb2RUb3RhbFR4UGt0UmV0cnkgKz0gKGluZGV4KzEpOworfQorCit1OCBNVE9fR2V0VHhGYWxsYmFja1JhdGUoTVRPX0ZVTkNfSU5QVVQpCit7CisJcmV0dXJuIE1UT19EQVRBX0ZBTExCQUNLX1JBVEUoKTsKK30KKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIE1UT19UeEZhaWxlZCAtLQorLy8KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgIEZhaWx1cmUgb2YgdHJhbnNtaXR0aW5nIGEgcGFja2V0IGluZGljYXRlcyB0aGF0IGNlcnRhaW4gTVRPIHBhcm1ldGVycworLy8gICAgbWF5IG5lZWQgdG8gYmUgYWRqdXN0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gTklDIGp1c3QgZmFpbGVkCisvLyAgICB0byB0cmFuc21pdCBhIHBhY2tldCBvciB3aGVuIE1TRFVMaWZlVGltZSBleHBpcmVkLgorLy8KKy8vICBBcmd1bWVudHM6CisvLyAgICBBZGFwdGVyICAgICAgLSBUaGUgcG9pbnRlciB0byB0aGUgTWluaXBvcnQgQWRhcHRlciBDb250ZXh0CisvLworLy8gIFJldHVybiBWYWx1ZToKKy8vICAgIE5vbmUKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZCBNVE9fVHhGYWlsZWQoTVRPX0ZVTkNfSU5QVVQpCit7CisJcmV0dXJuOworfQorCitpbnQgRGl2aWRlKGludCBhLCBpbnQgYikKK3sKKwlpZiAoYj09MCkgYj0xOworCXJldHVybiBhL2I7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDc5MzZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmgKQEAgLTAsMCArMSwyNjUgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNVE8uSAorLy8KKy8vIFJldmlzaW9uIGhpc3RvcnkKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgICAgICAgICAyMDAzMDExMCAgICBVTjIwIFBldGUgQ2hhbworLy8gICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbCBSZWxlYXNlCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAzIFdpbmJvbmQgRWxlY3Ryb25pY3MgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaWZuZGVmIF9fTVRPX0hfXworI2RlZmluZSBfX01UT19IX18KKworI2RlZmluZSBNVE9fREVGQVVMVF9USF9DTlQgICAgICAgICAgICAgIDUKKyNkZWZpbmUgTVRPX0RFRkFVTFRfVEhfU1EzICAgICAgICAgICAgICAxMTIgIC8vT0xEIElTIDEzIHJlZmVyZW5jZSBKb2huWHUKKyNkZWZpbmUgTVRPX0RFRkFVTFRfVEhfSURMRV9TTE9UICAgICAgICAxNQorI2RlZmluZSBNVE9fREVGQVVMVF9USF9QUl9JTlRFUkYgICAgICAgIDMwCisjZGVmaW5lIE1UT19ERUZBVUxUX1RNUl9BR0lORyAgICAgICAgICAgMjUgIC8vIHVuaXQ6IHNsb3QgdGltZSAgMTAgcmVmZXJlbmNlIEpvaG5YdQorI2RlZmluZSBNVE9fREVGQVVMVF9UTVJfUEVSSU9ESUMgICAgICAgIDUgICAvLyB1bml0OiBzbG90IHRpbWUKKworI2RlZmluZSBNVE9fQU5URU5OQV9ESVZFUlNJVFlfT0ZGICAgICAgIDAKKyNkZWZpbmUgTVRPX0FOVEVOTkFfRElWRVJTSVRZX09OICAgICAgICAxCisKKy8vIExBMjAwNDAyMTBfRFRPIGtldmluCisvLyNkZWZpbmUgTVRPX1BSRUFNQkxFX0xPTkcgICAgICAgICAgICAgICAwCisvLyNkZWZpbmUgTVRPX1BSRUFNQkxFX1NIT1JUICAgICAgICAgICAgICAxCisjZGVmaW5lIE1UT19QUkVBTUJMRV9MT05HICAgICAgICAgICAgICAgV0xBTl9QUkVBTUJMRV9UWVBFX0xPTkcKKyNkZWZpbmUgTVRPX1BSRUFNQkxFX1NIT1JUICAgICAgICAgICAgICBXTEFOX1BSRUFNQkxFX1RZUEVfU0hPUlQKKwordHlwZWRlZiBlbnVtIHsKKyAgICBUT0dHTEVfU1RBVEVfSURMRSAgICAgICAgICAgICA9IDAsCisgICAgVE9HR0xFX1NUQVRFX1dBSVQwICAgICAgICAgICAgPSAxLAorICAgIFRPR0dMRV9TVEFURV9XQUlUMSAgICAgICAgICAgID0gMiwKKyAgICBUT0dHTEVfU1RBVEVfTUFLRURFU0lTSU9OICAgICA9IDMsCisJVE9HR0xFX1NUQVRFX0JLT0ZGICAgICAgICAgICAgPSA0Cit9IFRPR0dMRV9TVEFURTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBSQVRFX0NIR1NUQVRFX0lETEUgICAgICAgICA9IDAsCisgICAgUkFURV9DSEdTVEFURV9DQUxDVUxBVEUgICAgPSAxLAorICAgIFJBVEVfQ0hHU1RBVEVfQkFDS09GRgkgICA9IDIKK30gVFhfUkFURV9SRURVQ1RJT05fU1RBVEU7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gc3RydWN0IF9NVE9QYXJhbWV0ZXJzIC0tCisvLworLy8gICBEZWZpbmVzIHRoZSBwYXJhbWV0ZXJzIHVzZWQgaW4gdGhlIE1BQyBUaHJvdWdocHV0IE9wdGltaXphdGlvbiBhbGdvcml0aG0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHlwZWRlZiBzdHJ1Y3QgX01UT19QQVJBTUVURVJTCit7CisJdTggICAgICBUaF9GaXhhbnQ7CisJdTggICAgICBUaF9DbnQ7CisJdTggICAgICBUaF9TUTM7CisJdTggICAgICBUaF9JZGxlU2xvdDsKKworCXUxNiAgICAgVG1yX0FnaW5nOworCXU4ICAgICAgVGhfUHJJbnRlcmY7CisJdTggICAgICBUbXJfUGVyaW9kaWM7CisKKwkvLy0tLS0tLS0tLSAgICAgICAgd2tjaGVuIGFkZGVkICAgICAgLS0tLS0tLS0tLS0tLQorCXUzMgkJVHhGbG93Q291bnQ7CS8vdG8ganVkZ2Ugd2hhdCBraW5kIHRoZSB0eCBmbG93KHNwYXJzZSBvciBidXN5KSBpcworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvLy0tLS0tLS0tLSBEVE8gdGhyZXNob2xkIHBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLQorCXUxNgkJRFRPX1BlcmlvZGljQ2hlY2tDeWNsZTsKKwl1MTYJCURUT19Sc3NpVGhGb3JBbnREaXY7CisKKwl1MTYJCURUT19UeENvdW50VGhGb3JDYWxjTmV3UmF0ZTsKKwl1MTYJCURUT19UeFJhdGVJbmNUaDsKKworCXUxNgkJRFRPX1R4UmF0ZURlY1RoOworCXUxNgkJRFRPX1R4UmF0ZUVxVGg7CisKKwl1MTYJCURUT19UeFJhdGVCYWNrT2ZmOworCXUxNgkJRFRPX1R4UmV0cnlSYXRlUmVkdWNlOworCisJdTE2CQlEVE9fVHhQb3dlckluZGV4OwkvLzAgfiAzMQorCXUxNgkJcmVzZXJ2ZWRfMTsKKwkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJdTggICAgICBQb3dlckNoYW5nZUVuYWJsZTsKKwl1OCAgICAgIEFudERpdmVyc2l0eUVuYWJsZTsKKwl1OCAgICAgIEFudF9tYWM7CisJdTggICAgICBBbnRfZGl2OworCisJdTggICAgICBDQ0FfTW9kZTsKKwl1OCAgICAgIENDQV9Nb2RlX1NldHVwOworCXU4ICAgICAgUHJlYW1ibGVfVHlwZTsKKwl1OCAgICAgIFByZWFtYmxlQ2hhbmdlRW5hYmxlOworCisJdTggICAgICBEYXRhUmF0ZUxldmVsOworCXU4ICAgICAgRGF0YVJhdGVDaGFuZ2VFbmFibGU7CisJdTggICAgICBGcmFnVGhyZXNob2xkTGV2ZWw7CisJdTggICAgICBGcmFnVGhyZXNob2xkQ2hhbmdlRW5hYmxlOworCisJdTE2ICAgICBSVFNUaHJlc2hvbGQ7CisJdTE2ICAgICBSVFNUaHJlc2hvbGRfU2V0dXA7CisKKwl1MzIgICAgIEF2Z0lkbGVTbG90OworCXUzMiAgICAgUHJfSW50ZXJmOworCXUzMiAgICAgQXZnR2FwQnR3bkludGVyZjsKKworCXU4CSAgIFJUU0NoYW5nZUVuYWJsZTsKKwl1OCAgICAgIEFudF9zZWw7CisJdTggICAgICBhZ2luZ190aW1lb3V0OworCXU4CSAgIHJlc2VydmVkXzI7CisKKwl1MzIgICAgIENudF9BbnRbMl07CisJdTMyICAgICBTUV9BbnRbMl07CisKKy8vIDIwMDQwNTEwIHJlbW92ZSBmcm9tIGdsb2JlIHZhaXJhYmxlCisJdTMyICAgICAgICAgICAgICAgICAgICAgVG1yQ250OworCXUzMiAgICAgICAgICAgICAgICAgICAgIEJhY2tvZmZUbXI7CisJVE9HR0xFX1NUQVRFICAgICAgICAgICAgVG9nZ2xlU3RhdGU7CisJVFhfUkFURV9SRURVQ1RJT05fU1RBVEUgVHhSYXRlUmVkdWN0aW9uU3RhdGU7CisKKwl1OCAgICAgICAgICAgICAgICAgICAgICBMYXN0X1JhdGU7CisJdTggICAgICAgICAgICAgICAgICAgICAgQ29fZWZmaWNlbnQ7CisJdTgJCUZhbGxiYWNrUmF0ZUxldmVsOworCXU4CQlPZmRtUmF0ZUxldmVsOworCisJdTgJCVJhdGVQb2xpY3k7CisJdTgJCXJlc2VydmVkXzNbM107CisKKwkvLyBGb3IgUlNTSSB0dXJuaW5nCisJczMyCQlSU1NJX2hpZ2g7CisJczMyCQlSU1NJX2xvdzsKKworfSBNVE9fUEFSQU1FVEVSUywgKlBNVE9fUEFSQU1FVEVSUzsKKworCisjZGVmaW5lIE1UT19GVU5DX0lOUFVUICAgICAgICAgICAgICBQV0IzMl9BREFQVEVSCUFkYXB0ZXIKKyNkZWZpbmUgTVRPX0ZVTkNfSU5QVVRfREFUQSAgICAgICAgIEFkYXB0ZXIKKyNkZWZpbmUgTVRPX0RBVEEoKSAgICAgICAgICAgICAgICAgIChBZGFwdGVyLT5zTXRvUGFyYSkKKyNkZWZpbmUgTVRPX0hBTCgpICAgICAgICAgICAgICAgICAgICgmQWRhcHRlci0+c0h3RGF0YSkKKyNkZWZpbmUgTVRPX1NFVF9QUkVBTUJMRV9UWVBFKHgpICAgIC8vIDIwMDQwNTExIFR1cmJvIG1hcmsgTE1fUFJFQU1CTEVfVFlQRSgmcGNvcmVfZGF0YS0+bG1fZGF0YSkgPSAoeCkKKyNkZWZpbmUgTVRPX0VOQUJMRQkJCQkJKEFkYXB0ZXItPnNMb2NhbFBhcmEuVHhSYXRlTW9kZSA9PSBSQVRFX0FVVE8pCisjZGVmaW5lIE1UT19UWFBPV0VSX0ZST01fRUVQUk9NCQkoQWRhcHRlci0+c0h3RGF0YS5Qb3dlckluZGV4RnJvbUVFUFJPTSkKKyNkZWZpbmUgTE9DQUxfQU5URU5OQV9OTygpCQkJKEFkYXB0ZXItPnNMb2NhbFBhcmEuYkFudGVubmFObykKKyNkZWZpbmUgTE9DQUxfSVNfQ09OTkVDVEVEKCkJCShBZGFwdGVyLT5zTG9jYWxQYXJhLndDb25uZWN0ZWRTVEFpbmRleCAhPSAwKQorI2RlZmluZSBMT0NBTF9JU19JQlNTX01PREUoKQkJKEFkYXB0ZXItPmFzQlNTRGVzY3JpcHRFbGVtZW50W0FkYXB0ZXItPnNMb2NhbFBhcmEud0Nvbm5lY3RlZFNUQWluZGV4XS5iQnNzVHlwZSA9PSBJQlNTX05FVCkKKyNkZWZpbmUgTVRPX0lOSVRUWFJBVEVfTU9ERQkJCShBZGFwdGVyLT5zSHdEYXRhLlNvZnR3YXJlU2V0JjB4MikJLy9iaXQgMQorLy8gMjAwNDA1MTAgVHVyYm8gYWRkCisjZGVmaW5lIE1UT19UTVJfQ05UKCkgICAgICAgICAgICAgICBNVE9fREFUQSgpLlRtckNudAorI2RlZmluZSBNVE9fVE9HR0xFX1NUQVRFKCkgICAgICAgICAgTVRPX0RBVEEoKS5Ub2dnbGVTdGF0ZQorI2RlZmluZSBNVE9fVFhfUkFURV9SRURVQ1RJT05fU1RBVEUoKSBNVE9fREFUQSgpLlR4UmF0ZVJlZHVjdGlvblN0YXRlCisjZGVmaW5lIE1UT19CQUNLT0ZGX1RNUigpICAgICAgICAgICBNVE9fREFUQSgpLkJhY2tvZmZUbXIKKyNkZWZpbmUgTVRPX0xBU1RfUkFURSgpICAgICAgICAgICAgIE1UT19EQVRBKCkuTGFzdF9SYXRlCisjZGVmaW5lIE1UT19DT19FRkZJQ0VOVCgpICAgICAgICAgICBNVE9fREFUQSgpLkNvX2VmZmljZW50CisKKyNkZWZpbmUgTVRPX1RIX0NOVCgpICAgICAgICAgICAgICAgIE1UT19EQVRBKCkuVGhfQ250CisjZGVmaW5lIE1UT19USF9TUTMoKSAgICAgICAgICAgICAgICBNVE9fREFUQSgpLlRoX1NRMworI2RlZmluZSBNVE9fVEhfSURMRV9TTE9UKCkgICAgICAgICAgTVRPX0RBVEEoKS5UaF9JZGxlU2xvdAorI2RlZmluZSBNVE9fVEhfUFJfSU5URVJGKCkgICAgICAgICAgTVRPX0RBVEEoKS5UaF9QckludGVyZgorCisjZGVmaW5lIE1UT19UTVJfQUdJTkcoKSAgICAgICAgICAgICBNVE9fREFUQSgpLlRtcl9BZ2luZworI2RlZmluZSBNVE9fVE1SX1BFUklPRElDKCkgICAgICAgICAgTVRPX0RBVEEoKS5UbXJfUGVyaW9kaWMKKworI2RlZmluZSBNVE9fUE9XRVJfQ0hBTkdFX0VOQUJMRSgpICAgTVRPX0RBVEEoKS5Qb3dlckNoYW5nZUVuYWJsZQorI2RlZmluZSBNVE9fQU5UX0RJVkVSU0lUWV9FTkFCTEUoKSAgQWRhcHRlci0+c0xvY2FsUGFyYS5ib0FudGVubmFEaXZlcnNpdHkKKyNkZWZpbmUgTVRPX0FOVF9NQUMoKSAgICAgICAgICAgICAgIE1UT19EQVRBKCkuQW50X21hYworI2RlZmluZSBNVE9fQU5UX0RJVkVSU0lUWSgpICAgICAgICAgTVRPX0RBVEEoKS5BbnRfZGl2CisjZGVmaW5lIE1UT19DQ0FfTU9ERSgpICAgICAgICAgICAgICBNVE9fREFUQSgpLkNDQV9Nb2RlCisjZGVmaW5lIE1UT19DQ0FfTU9ERV9TRVRVUCgpICAgICAgICBNVE9fREFUQSgpLkNDQV9Nb2RlX1NldHVwCisjZGVmaW5lIE1UT19QUkVBTUJMRV9UWVBFKCkgICAgICAgICBNVE9fREFUQSgpLlByZWFtYmxlX1R5cGUKKyNkZWZpbmUgTVRPX1BSRUFNQkxFX0NIQU5HRV9FTkFCTEUoKSAgICAgICAgIE1UT19EQVRBKCkuUHJlYW1ibGVDaGFuZ2VFbmFibGUKKworI2RlZmluZSBNVE9fUkFURV9MRVZFTCgpICAgICAgICAgICAgTVRPX0RBVEEoKS5EYXRhUmF0ZUxldmVsCisjZGVmaW5lIE1UT19GQUxMQkFDS19SQVRFX0xFVkVMKCkJTVRPX0RBVEEoKS5GYWxsYmFja1JhdGVMZXZlbAorI2RlZmluZSBNVE9fT0ZETV9SQVRFX0xFVkVMKCkJCU1UT19EQVRBKCkuT2ZkbVJhdGVMZXZlbAorI2RlZmluZSBNVE9fUkFURV9DSEFOR0VfRU5BQkxFKCkgICAgTVRPX0RBVEEoKS5EYXRhUmF0ZUNoYW5nZUVuYWJsZQorI2RlZmluZSBNVE9fRlJBR19USF9MRVZFTCgpICAgICAgICAgTVRPX0RBVEEoKS5GcmFnVGhyZXNob2xkTGV2ZWwKKyNkZWZpbmUgTVRPX0ZSQUdfQ0hBTkdFX0VOQUJMRSgpICAgIE1UT19EQVRBKCkuRnJhZ1RocmVzaG9sZENoYW5nZUVuYWJsZQorI2RlZmluZSBNVE9fUlRTX1RIUkVTSE9MRCgpICAgICAgICAgTVRPX0RBVEEoKS5SVFNUaHJlc2hvbGQKKyNkZWZpbmUgTVRPX1JUU19DSEFOR0VfRU5BQkxFKCkgICAgIE1UT19EQVRBKCkuUlRTQ2hhbmdlRW5hYmxlCisjZGVmaW5lIE1UT19SVFNfVEhSRVNIT0xEX1NFVFVQKCkgICBNVE9fREFUQSgpLlJUU1RocmVzaG9sZF9TZXR1cAorCisjZGVmaW5lIE1UT19BVkdfSURMRV9TTE9UKCkgICAgICAgICBNVE9fREFUQSgpLkF2Z0lkbGVTbG90CisjZGVmaW5lIE1UT19QUl9JTlRFUkYoKSAgICAgICAgICAgICBNVE9fREFUQSgpLlByX0ludGVyZgorI2RlZmluZSBNVE9fQVZHX0dBUF9CVFdOX0lOVEVSRigpICAgTVRPX0RBVEEoKS5BdmdHYXBCdHduSW50ZXJmCisKKyNkZWZpbmUgTVRPX0FOVF9TRUwoKSAgICAgICAgICAgICAgIE1UT19EQVRBKCkuQW50X3NlbAorI2RlZmluZSBNVE9fQ05UX0FOVCh4KSAgICAgICAgICAgICAgTVRPX0RBVEEoKS5DbnRfQW50Wyh4KV0KKyNkZWZpbmUgTVRPX1NRX0FOVCh4KSAgICAgICAgICAgICAgIE1UT19EQVRBKCkuU1FfQW50Wyh4KV0KKyNkZWZpbmUgTVRPX0FHSU5HX1RJTUVPVVQoKSAgICAgICAgIE1UT19EQVRBKCkuYWdpbmdfdGltZW91dAorCisKKyNkZWZpbmUgTVRPX1RYRkxPV0NPVU5UKCkJCQlNVE9fREFUQSgpLlR4Rmxvd0NvdW50CisvLy0tLS0tLS0tLSBEVE8gdGhyZXNob2xkIHBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLQorI2RlZmluZQlNVE9QQVJBX1BFUklPRElDX0NIRUNLX0NZQ0xFKCkJCU1UT19EQVRBKCkuRFRPX1BlcmlvZGljQ2hlY2tDeWNsZQorI2RlZmluZQlNVE9QQVJBX1JTU0lfVEhfRk9SX0FOVERJVigpCQlNVE9fREFUQSgpLkRUT19Sc3NpVGhGb3JBbnREaXYKKyNkZWZpbmUJTVRPUEFSQV9UWENPVU5UX1RIX0ZPUl9DQUxDX1JBVEUoKQlNVE9fREFUQSgpLkRUT19UeENvdW50VGhGb3JDYWxjTmV3UmF0ZQorI2RlZmluZQlNVE9QQVJBX1RYUkFURV9JTkNfVEgoKQkJCU1UT19EQVRBKCkuRFRPX1R4UmF0ZUluY1RoCisjZGVmaW5lCU1UT1BBUkFfVFhSQVRFX0RFQ19USCgpCQkJTVRPX0RBVEEoKS5EVE9fVHhSYXRlRGVjVGgKKyNkZWZpbmUgTVRPUEFSQV9UWFJBVEVfRVFfVEgoKQkJCU1UT19EQVRBKCkuRFRPX1R4UmF0ZUVxVGgKKyNkZWZpbmUJTVRPUEFSQV9UWFJBVEVfQkFDS09GRigpCQlNVE9fREFUQSgpLkRUT19UeFJhdGVCYWNrT2ZmCisjZGVmaW5lCU1UT1BBUkFfVFhSRVRSWVJBVEVfUkVEVUNFKCkJCU1UT19EQVRBKCkuRFRPX1R4UmV0cnlSYXRlUmVkdWNlCisjZGVmaW5lIE1UT1BBUkFfVFhQT1dFUl9JTkRFWCgpCQkJTVRPX0RBVEEoKS5EVE9fVHhQb3dlckluZGV4CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK2V4dGVybiB1OCAgIE1UT19EYXRhX1JhdGVfVGJsW107CitleHRlcm4gdTE2ICBNVE9fRnJhZ19UaF9UYmxbXTsKKworI2RlZmluZSBNVE9fREFUQV9SQVRFKCkgICAgICAgICAgTVRPX0RhdGFfUmF0ZV9UYmxbTVRPX1JBVEVfTEVWRUwoKV0KKyNkZWZpbmUgTVRPX0RBVEFfRkFMTEJBQ0tfUkFURSgpIE1UT19EYXRhX1JhdGVfVGJsW01UT19GQUxMQkFDS19SQVRFX0xFVkVMKCldCS8vbmV4dCBsZXZlbAorI2RlZmluZSBNVE9fRlJBR19USCgpICAgICAgICAgICAgTVRPX0ZyYWdfVGhfVGJsW01UT19GUkFHX1RIX0xFVkVMKCldCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1OCB0eF9yYXRlOworCXU4IHR4X3JldHJ5X3JhdGU7Cit9IFRYUkVUUllfUkVDOworCit0eXBlZGVmIHN0cnVjdCBfU1RBVElTVElDU19JTkZPIHsKKwl1MzIgICBSYXRlNTRNOworCXUzMiAgIFJhdGU0OE07CisJdTMyICAgUmF0ZTM2TTsKKwl1MzIgICBSYXRlMjRNOworCXUzMiAgIFJhdGUxOE07CisJdTMyICAgUmF0ZTEyTTsKKwl1MzIgICBSYXRlOU07CisJdTMyICAgUmF0ZTZNOworCXUzMiAgIFJhdGUxMU1TOworCXUzMiAgIFJhdGUxMU1MOworCXUzMiAgIFJhdGU1NU1TOworCXUzMiAgIFJhdGU1NU1MOworCXUzMiAgIFJhdGUyTVM7CisJdTMyICAgUmF0ZTJNTDsKKwl1MzIgICBSYXRlMU07CisJdTMyICAgUmF0ZTU0TU9LOworCXUzMiAgIFJhdGU0OE1PSzsKKwl1MzIgICBSYXRlMzZNT0s7CisJdTMyICAgUmF0ZTI0TU9LOworCXUzMiAgIFJhdGUxOE1PSzsKKwl1MzIgICBSYXRlMTJNT0s7CisJdTMyICAgUmF0ZTlNT0s7CisJdTMyICAgUmF0ZTZNT0s7CisJdTMyICAgUmF0ZTExTVNPSzsKKwl1MzIgICBSYXRlMTFNTE9LOworCXUzMiAgIFJhdGU1NU1TT0s7CisJdTMyICAgUmF0ZTU1TUxPSzsKKwl1MzIgICBSYXRlMk1TT0s7CisJdTMyICAgUmF0ZTJNTE9LOworCXUzMiAgIFJhdGUxTU9LOworCXUzMiAgIFNRMzsKKwlzMzIgICBSU1NJQVZHOworCXMzMiAgIFJTU0lNQVg7CisJczMyICAgVFhSQVRFOworCXMzMiAgIFR4UmV0cnlSYXRlOworCXMzMiAgIEJTU19QS19DTlQ7CisJczMyICAgTklETEVTTE9UOworCXMzMiAgIFNMT1RfQ05UOworCXMzMiAgIElOVEVSRl9DTlQ7CisJczMyICAgR0FQX0NOVDsKKwlzMzIgICBEU19FVk07CisJczMyICAgUmN2QmVhY29uTnVtOworCXMzMiAgIFJYUkFURTsKKwlzMzIgICBSeEJ5dGVzOworCXMzMiAgIFR4Qnl0ZXM7CisJczMyICAgQW50ZW5uYTsKK30gU1RBVElTVElDU19JTkZPLCAqUFNUQVRJU1RJQ1NfSU5GTzsKKworI2VuZGlmIC8vX19NVE9fSF9fCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvX2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210b19mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBiM2RmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210b19mLmgKQEAgLTAsMCArMSw3IEBACitleHRlcm4gdm9pZCBNVE9fSW5pdChQV0IzMl9BREFQVEVSKTsKK2V4dGVybiB2b2lkIE1UT19QZXJpb2RpY1RpbWVyRXhwaXJlZChQV0IzMl9BREFQVEVSKTsKK2V4dGVybiB2b2lkIE1UT19TZXREVE9SYXRlUmFuZ2UoUFdCMzJfQURBUFRFUiwgdTggKiwgdTgpOworZXh0ZXJuIHU4IE1UT19HZXRUeFJhdGUoTVRPX0ZVTkNfSU5QVVQsIHUzMiBmcGR1X2xlbik7CitleHRlcm4gdTggTVRPX0dldFR4RmFsbGJhY2tSYXRlKE1UT19GVU5DX0lOUFVUKTsKK2V4dGVybiB2b2lkIE1UT19TZXRUeENvdW50KE1UT19GVU5DX0lOUFVULCB1OCB0MCwgdTggaW5kZXgpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9vc19jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL29zX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNGZmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9vc19jb21tb24uaApAQCAtMCwwICsxLDIgQEAKKyNpbmNsdWRlICJsaW51eC9zeXNkZWYuaCIKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcGh5X2NhbGlicmF0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzJhNjUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcGh5X2NhbGlicmF0aW9uLmMKQEAgLTAsMCArMSwxNzU5IEBACisvKgorICogcGh5XzMwMl9jYWxpYnJhdGlvbi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1ICBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuCisgKgorICogbW9kaWZpY2F0aW9uIGhpc3RvcnkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMC4wMS4wMDEsIDIwMDMtMDQtMTYsIEtldmluICAgICAgY3JlYXRlZAorICoKKyAqLworCisvKioqKioqKioqKioqKioqKioqIElOQ0xVREUgRklMRVMgU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJvc19jb21tb24uaCIKKyNpbmNsdWRlICJwaHlfY2FsaWJyYXRpb24uaCIKKworCisvKioqKioqKioqKioqKioqKioqIERFQlVHIENPTlNUQU5UIEFORCBNQUNSTyBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKiBMT0NBTCBDT05TVEFOVCBBTkQgTUFDUk8gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIExPT1BfVElNRVMgICAgICAyMAorI2RlZmluZSBVUyAgICAgICAgICAgICAgMTAwMC8vTUlDUk9TRUNPTkQKKworI2RlZmluZSBBR19DT05TVCAgICAgICAgMC42MDcyNTI5MzUwCisjZGVmaW5lIEZJWEVEKFgpICAgICAgICAoKHMzMikoKFgpICogMzI3NjguMCkpCisjZGVmaW5lIERFRzJSQUQoWCkgICAgICAwLjAxNzQ1MyAqIChYKQorCisvKioqKioqKioqKioqKioqKioqIExPQ0FMIFRZUEUgREVGSU5JVElPTiBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgczMyICAgICAgICAgZml4ZWQ7IC8qIDE2LjE2IGZpeGVkLXBvaW50ICovCisKK3N0YXRpYyBjb25zdCBmaXhlZCBBbmdsZXNbXT0KK3sKKyAgICBGSVhFRChERUcyUkFEKDQ1LjApKSwgICAgRklYRUQoREVHMlJBRCgyNi41NjUpKSwgIEZJWEVEKERFRzJSQUQoMTQuMDM2MikpLAorICAgIEZJWEVEKERFRzJSQUQoNy4xMjUwMikpLCBGSVhFRChERUcyUkFEKDMuNTc2MzMpKSwgRklYRUQoREVHMlJBRCgxLjc4OTkxKSksCisgICAgRklYRUQoREVHMlJBRCgwLjg5NTE3NCkpLEZJWEVEKERFRzJSQUQoMC40NDc2MTQpKSxGSVhFRChERUcyUkFEKDAuMjIzODExKSksCisgICAgRklYRUQoREVHMlJBRCgwLjExMTkwNikpLEZJWEVEKERFRzJSQUQoMC4wNTU5NTMpKSxGSVhFRChERUcyUkFEKDAuMDI3OTc3KSkKK307CisKKy8qKioqKioqKioqKioqKioqKiogTE9DQUwgRlVOQ1RJT04gREVDTEFSQVRJT04gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqLworLy92b2lkICAgIF9waHlfcmZfd3JpdGVfZGVsYXkoaHdfZGF0YV90ICpwaHdfZGF0YSk7CisvL3ZvaWQgICAgcGh5X2luaXRfcmYoaHdfZGF0YV90ICpwaHdfZGF0YSk7CisKKy8qKioqKioqKioqKioqKioqKiogRlVOQ1RJT04gREVGSU5JVElPTiBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzMzIgX3MxM190b19zMzIodTMyIGRhdGEpCit7CisgICAgdTMyICAgICB2YWw7CisKKyAgICB2YWwgPSAoZGF0YSAmIDB4MEZGRik7CisKKyAgICBpZiAoKGRhdGEgJiBCSVQoMTIpKSAhPSAwKQorICAgIHsKKyAgICAgICAgdmFsIHw9IDB4RkZGRkYwMDA7CisgICAgfQorCisgICAgcmV0dXJuICgoczMyKSB2YWwpOworfQorCit1MzIgX3MzMl90b19zMTMoczMyIGRhdGEpCit7CisgICAgdTMyICAgICB2YWw7CisKKyAgICBpZiAoZGF0YSA+IDQwOTUpCisgICAgeworICAgICAgICBkYXRhID0gNDA5NTsKKyAgICB9CisgICAgZWxzZSBpZiAoZGF0YSA8IC00MDk2KQorICAgIHsKKyAgICAgICAgZGF0YSA9IC00MDk2OworICAgIH0KKworICAgIHZhbCA9IGRhdGEgJiAweDFGRkY7CisKKyAgICByZXR1cm4gdmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3MzMiBfczRfdG9fczMyKHUzMiBkYXRhKQoreworICAgIHMzMiAgICAgdmFsOworCisgICAgdmFsID0gKGRhdGEgJiAweDAwMDcpOworCisgICAgaWYgKChkYXRhICYgQklUKDMpKSAhPSAwKQorICAgIHsKKyAgICAgICAgdmFsIHw9IDB4RkZGRkZGRjg7CisgICAgfQorCisgICAgcmV0dXJuIHZhbDsKK30KKwordTMyIF9zMzJfdG9fczQoczMyIGRhdGEpCit7CisgICAgdTMyICAgICB2YWw7CisKKyAgICBpZiAoZGF0YSA+IDcpCisgICAgeworICAgICAgICBkYXRhID0gNzsKKyAgICB9CisgICAgZWxzZSBpZiAoZGF0YSA8IC04KQorICAgIHsKKyAgICAgICAgZGF0YSA9IC04OworICAgIH0KKworICAgIHZhbCA9IGRhdGEgJiAweDAwMEY7CisKKyAgICByZXR1cm4gdmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3MzMiBfczVfdG9fczMyKHUzMiBkYXRhKQoreworICAgIHMzMiAgICAgdmFsOworCisgICAgdmFsID0gKGRhdGEgJiAweDAwMEYpOworCisgICAgaWYgKChkYXRhICYgQklUKDQpKSAhPSAwKQorICAgIHsKKyAgICAgICAgdmFsIHw9IDB4RkZGRkZGRjA7CisgICAgfQorCisgICAgcmV0dXJuIHZhbDsKK30KKwordTMyIF9zMzJfdG9fczUoczMyIGRhdGEpCit7CisgICAgdTMyICAgICB2YWw7CisKKyAgICBpZiAoZGF0YSA+IDE1KQorICAgIHsKKyAgICAgICAgZGF0YSA9IDE1OworICAgIH0KKyAgICBlbHNlIGlmIChkYXRhIDwgLTE2KQorICAgIHsKKyAgICAgICAgZGF0YSA9IC0xNjsKKyAgICB9CisKKyAgICB2YWwgPSBkYXRhICYgMHgwMDFGOworCisgICAgcmV0dXJuIHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzMzIgX3M2X3RvX3MzMih1MzIgZGF0YSkKK3sKKyAgICBzMzIgICAgIHZhbDsKKworICAgIHZhbCA9IChkYXRhICYgMHgwMDFGKTsKKworICAgIGlmICgoZGF0YSAmIEJJVCg1KSkgIT0gMCkKKyAgICB7CisgICAgICAgIHZhbCB8PSAweEZGRkZGRkUwOworICAgIH0KKworICAgIHJldHVybiB2YWw7Cit9CisKK3UzMiBfczMyX3RvX3M2KHMzMiBkYXRhKQoreworICAgIHUzMiAgICAgdmFsOworCisgICAgaWYgKGRhdGEgPiAzMSkKKyAgICB7CisgICAgICAgIGRhdGEgPSAzMTsKKyAgICB9CisgICAgZWxzZSBpZiAoZGF0YSA8IC0zMikKKyAgICB7CisgICAgICAgIGRhdGEgPSAtMzI7CisgICAgfQorCisgICAgdmFsID0gZGF0YSAmIDB4MDAzRjsKKworICAgIHJldHVybiB2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworczMyIF9zOV90b19zMzIodTMyIGRhdGEpCit7CisgICAgczMyICAgICB2YWw7CisKKyAgICB2YWwgPSBkYXRhICYgMHgwMEZGOworCisgICAgaWYgKChkYXRhICYgQklUKDgpKSAhPSAwKQorICAgIHsKKyAgICAgICAgdmFsIHw9IDB4RkZGRkZGMDA7CisgICAgfQorCisgICAgcmV0dXJuIHZhbDsKK30KKwordTMyIF9zMzJfdG9fczkoczMyIGRhdGEpCit7CisgICAgdTMyICAgICB2YWw7CisKKyAgICBpZiAoZGF0YSA+IDI1NSkKKyAgICB7CisgICAgICAgIGRhdGEgPSAyNTU7CisgICAgfQorICAgIGVsc2UgaWYgKGRhdGEgPCAtMjU2KQorICAgIHsKKyAgICAgICAgZGF0YSA9IC0yNTY7CisgICAgfQorCisgICAgdmFsID0gZGF0YSAmIDB4MDFGRjsKKworICAgIHJldHVybiB2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworczMyIF9mbG9vcihzMzIgbikKK3sKKyAgICBpZiAobiA+IDApCisgICAgeworICAgICAgICBuICs9IDU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG4gLT0gNTsKKyAgICB9CisKKyAgICByZXR1cm4gKG4vMTApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBzcWFyZS1yb290IGZ1bmN0aW9uLgorLy8gc3FzdW0gaXMgdGhlIGlucHV0IGFuZCB0aGUgb3V0cHV0IGlzIHNxX3J0OworLy8gVGhlIG1heGltdW0gb2Ygc3FzdW0gPSAyXjI3IC0xOwordTMyIF9zcXJ0KHUzMiBzcXN1bSkKK3sKKyAgICB1MzIgICAgIHNxX3J0OworCisgICAgaW50ICAgICBnMCwgZzEsIGcyLCBnMywgZzQ7CisgICAgaW50ICAgICBzZWVkOworICAgIGludCAgICAgbmV4dDsKKyAgICBpbnQgICAgIHN0ZXA7CisKKyAgICBnNCA9ICBzcXN1bSAvIDEwMDAwMDAwMDsKKyAgICBnMyA9IChzcXN1bSAtIGc0KjEwMDAwMDAwMCkgLzEwMDAwMDA7CisgICAgZzIgPSAoc3FzdW0gLSBnNCoxMDAwMDAwMDAgLSBnMyoxMDAwMDAwKSAvMTAwMDA7CisgICAgZzEgPSAoc3FzdW0gLSBnNCoxMDAwMDAwMDAgLSBnMyoxMDAwMDAwIC0gZzIqMTAwMDApIC8xMDA7CisgICAgZzAgPSAoc3FzdW0gLSBnNCoxMDAwMDAwMDAgLSBnMyoxMDAwMDAwIC0gZzIqMTAwMDAgLSBnMSoxMDApOworCisgICAgbmV4dCA9IGc0OworICAgIHN0ZXAgPSAwOworICAgIHNlZWQgPSAwOworICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpCisgICAgeworICAgIAlzdGVwKys7CisgICAgCXNlZWQrKzsKKyAgICB9CisKKyAgICBzcV9ydCA9IHNlZWQgKiAxMDAwMDsKKyAgICBuZXh0ID0gKG5leHQtKHNlZWQqc3RlcCkpKjEwMCArIGczOworCisgICAgc3RlcCA9IDA7CisgICAgc2VlZCA9IDIgKiBzZWVkICogMTA7CisgICAgd2hpbGUgKCgoc2VlZCsxKSooc3RlcCsxKSkgPD0gbmV4dCkKKyAgICB7CisgICAgICAgIHN0ZXArKzsKKyAgICAJc2VlZCsrOworICAgIH0KKworICAgIHNxX3J0ID0gc3FfcnQgKyBzdGVwICogMTAwMDsKKyAgICBuZXh0ID0gKG5leHQgLSBzZWVkICogc3RlcCkgKiAxMDAgKyBnMjsKKyAgICBzZWVkID0gKHNlZWQgKyBzdGVwKSAqIDEwOworICAgIHN0ZXAgPSAwOworICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpCisgICAgeworICAgICAgICBzdGVwKys7CisgICAgCXNlZWQrKzsKKyAgICB9CisKKyAgICBzcV9ydCA9IHNxX3J0ICsgc3RlcCAqIDEwMDsKKyAgICBuZXh0ID0gKG5leHQgLSBzZWVkICogc3RlcCkgKiAxMDAgKyBnMTsKKyAgICBzZWVkID0gKHNlZWQgKyBzdGVwKSAqIDEwOworICAgIHN0ZXAgPSAwOworCisgICAgd2hpbGUgKCgoc2VlZCsxKSooc3RlcCsxKSkgPD0gbmV4dCkKKyAgICB7CisgICAgICAgIHN0ZXArKzsKKyAgICAJc2VlZCsrOworICAgIH0KKworICAgIHNxX3J0ID0gc3FfcnQgKyBzdGVwICogMTA7CisgICAgbmV4dCA9IChuZXh0IC0gc2VlZCogc3RlcCkgKiAxMDAgKyBnMDsKKyAgICBzZWVkID0gKHNlZWQgKyBzdGVwKSAqIDEwOworICAgIHN0ZXAgPSAwOworCisgICAgd2hpbGUgKCgoc2VlZCsxKSooc3RlcCsxKSkgPD0gbmV4dCkKKyAgICB7CisgICAgICAgIHN0ZXArKzsKKyAgICAJc2VlZCsrOworICAgIH0KKworICAgIHNxX3J0ID0gc3FfcnQgKyBzdGVwOworCisgICAgcmV0dXJuIHNxX3J0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgX3Npbl9jb3MoczMyIGFuZ2xlLCBzMzIgKnNpbiwgczMyICpjb3MpCit7CisgICAgZml4ZWQgICAgICAgWCwgWSwgVGFyZ2V0QW5nbGUsIEN1cnJBbmdsZTsKKyAgICB1bnNpZ25lZCAgICBTdGVwOworCisgICAgWD1GSVhFRChBR19DT05TVCk7ICAgICAgLy8gQUdfQ09OU1QgKiBjb3MoMCkKKyAgICBZPTA7ICAgICAgICAgICAgICAgICAgICAvLyBBR19DT05TVCAqIHNpbigwKQorICAgIFRhcmdldEFuZ2xlPWFicyhhbmdsZSk7CisgICAgQ3VyckFuZ2xlPTA7CisKKyAgICBmb3IgKFN0ZXA9MDsgU3RlcCA8IDEyOyBTdGVwKyspCisgICAgeworICAgICAgICBmaXhlZCBOZXdYOworCisgICAgICAgIGlmKFRhcmdldEFuZ2xlID4gQ3VyckFuZ2xlKQorICAgICAgICB7CisgICAgICAgICAgICBOZXdYPVggLSAoWSA+PiBTdGVwKTsKKyAgICAgICAgICAgIFk9KFggPj4gU3RlcCkgKyBZOworICAgICAgICAgICAgWD1OZXdYOworICAgICAgICAgICAgQ3VyckFuZ2xlICs9IEFuZ2xlc1tTdGVwXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIE5ld1g9WCArIChZID4+IFN0ZXApOworICAgICAgICAgICAgWT0tKFggPj4gU3RlcCkgKyBZOworICAgICAgICAgICAgWD1OZXdYOworICAgICAgICAgICAgQ3VyckFuZ2xlIC09IEFuZ2xlc1tTdGVwXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhbmdsZSA+IDApCisgICAgeworICAgICAgICAqY29zID0gWDsKKyAgICAgICAgKnNpbiA9IFk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpjb3MgPSBYOworICAgICAgICAqc2luID0gLVk7CisgICAgfQorfQorCisKK3ZvaWQgX3Jlc2V0X3J4X2NhbChod19kYXRhX3QgKnBod19kYXRhKQoreworCXUzMiAgICAgdmFsOworCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOworCisJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwl7CisJCXZhbCAmPSAweEZGRkYwMDAwOworCX0KKwllbHNlIC8vIDJuZC1jdXQKKwl7CisJCXZhbCAmPSAweDAwMDAwM0ZGOworCX0KKworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOworfQorCisKKy8vICoqKioqKioqKioqKmZvciB3aW5ib25kIGNhbGlicmF0aW9uKioqKioqKioqCisvLworCisvLworLy8KKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgordm9pZCBfcnhhZGNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCit7CisgICAgdTMyICAgICByZWdfYWdjX2N0cmwzOworICAgIHUzMiAgICAgcmVnX2FfYWNxX2N0cmw7CisgICAgdTMyICAgICByZWdfYl9hY3FfY3RybDsKKyAgICB1MzIgICAgIHZhbDsKKworICAgIFBIWV9ERUJVRygoIltDQUxdIC0+IFsxXV9yeGFkY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uKClcbiIpKTsKKyAgICBwaHlfaW5pdF9yZihwaHdfZGF0YSk7CisKKyAgICAvLyBzZXQgY2FsaWJyYXRpb24gY2hhbm5lbAorICAgIGlmKCAoUkZfV0JfMjQyID09IHBod19kYXRhLT5waHlfdHlwZSkgfHwKKwkJKFJGX1dCXzI0Ml8xID09IHBod19kYXRhLT5waHlfdHlwZSkgKSAvLyAyMDA2MDYxOS41IEFkZAorICAgIHsKKyAgICAgICAgaWYgKChmcmVxdWVuY3kgPj0gMjQxMikgJiYgKGZyZXF1ZW5jeSA8PSAyNDg0KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdzg5cmYyNDIgY2hhbmdlIGZyZXF1ZW5jeSB0byAyMzkwTWh6CisgICAgICAgICAgICBQSFlfREVCVUcoKCJbQ0FMXSBXODlSRjI0Mi8xMUcvQ2hhbm5lbD0yMzkwTWh6XG4iKSk7CisJCQlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDMsICgzPDwyNCl8MHgwMjU1ODYpOworCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorCXsKKworCX0KKworCS8vIHJlc2V0IGNhbmNlbF9kY19pWzk6NV0gYW5kIGNhbmNlbF9kY19xWzQ6MF0gaW4gcmVnaXN0ZXIgRENfQ2FuY2VsCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsICZ2YWwpOworCXZhbCAmPSB+KDB4MDNGRik7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsIHZhbCk7CisKKwkvLyByZXNldCB0aGUgVFggYW5kIFJYIElRIGNhbGlicmF0aW9uIGRhdGEKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgMCk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIDApOworCisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIDB4MzAzMDMwMzApOyAvLyBJUV9BbHBoYSBDaGFuZ2VkCisKKwkvLyBhLiBEaXNhYmxlIEFHQworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmcmVnX2FnY19jdHJsMyk7CisJcmVnX2FnY19jdHJsMyAmPSB+QklUKDIpOworCXJlZ19hZ2NfY3RybDMgfD0gKE1BU0tfTE5BX0ZJWF9HQUlOfE1BU0tfQUdDX0ZJWCk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsIHJlZ19hZ2NfY3RybDMpOworCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDUsICZ2YWwpOworCXZhbCB8PSBNQVNLX0FHQ19GSVhfR0FJTjsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMNSwgdmFsKTsKKworCS8vIGIuIFR1cm4gb2ZmIEJCIFJYCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BX0FDUV9DVFJMLCAmcmVnX2FfYWNxX2N0cmwpOworCXJlZ19hX2FjcV9jdHJsIHw9IE1BU0tfQU1FUl9PRkZfUkVHOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQV9BQ1FfQ1RSTCwgcmVnX2FfYWNxX2N0cmwpOworCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19CX0FDUV9DVFJMLCAmcmVnX2JfYWNxX2N0cmwpOworCXJlZ19iX2FjcV9jdHJsIHw9IE1BU0tfQk1FUl9PRkZfUkVHOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQl9BQ1FfQ1RSTCwgcmVnX2JfYWNxX2N0cmwpOworCisJLy8gYy4gTWFrZSBzdXJlIE1BQyBpcyBpbiByZWNlaXZpbmcgbW9kZQorCS8vIGQuIFR1cm4gT04gQURDIGNhbGlicmF0aW9uCisJLy8gICAgLSBBREMgY2FsaWJyYXRvciBpcyB0cmlnZ2VyZWQgYnkgdGhpcyBzaWduYWwgcmlzaW5nIGZyb20gMCB0byAxCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZ2YWwpOworCXZhbCAmPSB+TUFTS19BRENfRENfQ0FMX1NUUjsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgdmFsKTsKKworCXZhbCB8PSBNQVNLX0FEQ19EQ19DQUxfU1RSOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCB2YWwpOworCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7IC8vICpNVVNUKiB3YWl0IGZvciBhIHdoaWxlCisKKwkvLyBlLiBUaGUgcmVzdWx0IGFyZSBzaG93biBpbiAiYWRjX2RjX2NhbF9pWzg6MF0gYW5kIGFkY19kY19jYWxfcVs4OjBdIgorI2lmZGVmIF9ERUJVRworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfT0ZGU0VUX1JFQUQsICZ2YWwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIFJFR19PRkZTRVRfUkVBRCA9IDB4JTA4WFxuIiwgdmFsKSk7CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBhZGNfZGNfY2FsX2kgPSAlZCAoMHglMDRYKVxuIiwKKwkJCSAgIF9zOV90b19zMzIodmFsJjB4MDAwMDAxRkYpLCB2YWwmMHgwMDAwMDFGRikpOworCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGFkY19kY19jYWxfcSA9ICVkICgweCUwNFgpXG4iLAorCQkJICAgX3M5X3RvX3MzMigodmFsJjB4MDAwM0ZFMDApPj45KSwgKHZhbCYweDAwMDNGRTAwKT4+OSkpOworI2VuZGlmCisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnZhbCk7CisJdmFsICY9IH5NQVNLX0FEQ19EQ19DQUxfU1RSOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCB2YWwpOworCisJLy8gZi4gVHVybiBvbiBCQiBSWAorCS8vaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BX0FDUV9DVFJMLCAmcmVnX2FfYWNxX2N0cmwpOworCXJlZ19hX2FjcV9jdHJsICY9IH5NQVNLX0FNRVJfT0ZGX1JFRzsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FfQUNRX0NUUkwsIHJlZ19hX2FjcV9jdHJsKTsKKworCS8vaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19CX0FDUV9DVFJMLCAmcmVnX2JfYWNxX2N0cmwpOworCXJlZ19iX2FjcV9jdHJsICY9IH5NQVNLX0JNRVJfT0ZGX1JFRzsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0JfQUNRX0NUUkwsIHJlZ19iX2FjcV9jdHJsKTsKKworCS8vIGcuIEVuYWJsZSBBR0MKKwkvL2h3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmdmFsKTsKKwlyZWdfYWdjX2N0cmwzIHw9IEJJVCgyKTsKKwlyZWdfYWdjX2N0cmwzICY9IH4oTUFTS19MTkFfRklYX0dBSU58TUFTS19BR0NfRklYKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgcmVnX2FnY19jdHJsMyk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit2b2lkIF90eGlkYWNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit7CisJdTMyICAgICByZWdfYWdjX2N0cmwzOworCXUzMiAgICAgcmVnX21vZGVfY3RybDsKKwl1MzIgICAgIHJlZ19kY19jYW5jZWw7CisJczMyICAgICBpcWNhbF9pbWFnZV9pOworCXMzMiAgICAgaXFjYWxfaW1hZ2VfcTsKKwl1MzIgICAgIHNxc3VtOworCXMzMiAgICAgbWFnXzA7CisJczMyICAgICBtYWdfMTsKKwlzMzIgICAgIGZpeF9jYW5jZWxfZGNfaSA9IDA7CisJdTMyICAgICB2YWw7CisJaW50ICAgICBsb29wOworCisJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzJdX3R4aWRhY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uKClcbiIpKTsKKworCS8vIGEuIFNldCB0byAiVFggY2FsaWJyYXRpb24gbW9kZSIKKworCS8vMHgwMSAweEVFM0ZDMiAgOyAzQjhGRiAgOyBDYWxpYnJhdGlvbiAoNmEpLiBlbmFibGUgVFggSVEgY2FsaWJyYXRpb24gbG9vcCBjaXJjdWl0cworCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMSwgKDE8PDI0KXwweEVFM0ZDMik7CisJLy8weDBCIDB4MTkwNUQ2ICA7IDA2NDE3ICA7IENhbGlicmF0aW9uICg2YikuIGVuYWJsZSBUWCBJL1EgY2FsIGxvb3Agc3F1YXJpbmcgY2lyY3VpdAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMTEsICgxMTw8MjQpfDB4MTkwMUQ2KTsKKwkvLzB4MDUgMHgyNEM2MEEgIDsgMDkzMTggIDsgQ2FsaWJyYXRpb24gKDZjKS4gc2V0dGluZyBUWC1WR0EgZ2FpbjogVFhHQ0g9MiAmIEdQSz0xMTAgLS0+IHRvIGJlIG9wdGltaXplZAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNSwgKDU8PDI0KXwweDI0QzQ4QSk7CisgICAgLy8weDA2IDB4MDY4ODBDICA7IDAxQTIwICA7IENhbGlicmF0aW9uICg2ZCkuIFJYR0NIPTAwOyBSWEdDTD0xMDAgMDAwIChSWFZHQT0zMikgLS0+IHRvIGJlIG9wdGltaXplZAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNiwgKDY8PDI0KXwweDA2ODkwQyk7CisJLy8weDAwIDB4RkRGMUMwICA7IDNGN0M3ICA7IENhbGlicmF0aW9uICg2ZSkuIHR1cm4gb24gSVEgaW1iYWxhbmNlL1Rlc3QgbW9kZQorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMCwgKDA8PDI0KXwweEZERjFDMCk7CisKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1OCwgMHgzMDMwMzAzMCk7IC8vIElRX0FscGhhIENoYW5nZWQKKworCS8vIGEuIERpc2FibGUgQUdDCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZyZWdfYWdjX2N0cmwzKTsKKwlyZWdfYWdjX2N0cmwzICY9IH5CSVQoMik7CisJcmVnX2FnY19jdHJsMyB8PSAoTUFTS19MTkFfRklYX0dBSU58TUFTS19BR0NfRklYKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgcmVnX2FnY19jdHJsMyk7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMNSwgJnZhbCk7CisJdmFsIHw9IE1BU0tfQUdDX0ZJWF9HQUlOOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkw1LCB2YWwpOworCisJLy8gYi4gc2V0IGlxY2FsX21vZGVbMTowXSB0byAweDIgYW5kIHNldCBpcWNhbF90b25lWzM6Ml0gdG8gMAorCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisJcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfVE9ORV9TRUx8TUFTS19JUUNBTF9NT0RFKTsKKworCS8vIG1vZGU9MiwgdG9uZT0wCisJLy9yZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDIpOworCisJLy8gbW9kZT0yLCB0b25lPTEKKwkvL3JlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8MnwoMTw8MikpOworCisJLy8gbW9kZT0yLCB0b25lPTIKKwlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDJ8KDI8PDIpKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKwlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsICZyZWdfZGNfY2FuY2VsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CisKKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgTE9PUF9USU1FUzsgbG9vcCsrKQorCXsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gWyVkLl0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIiwgbG9vcCkpOworCisJCS8vIGMuCisJCS8vIHJlc2V0IGNhbmNlbF9kY19pWzk6NV0gYW5kIGNhbmNlbF9kY19xWzQ6MF0gaW4gcmVnaXN0ZXIgRENfQ2FuY2VsCisJCXJlZ19kY19jYW5jZWwgJj0gfigweDAzRkYpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOworCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgcmVnX2RjX2NhbmNlbCk7CisJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMiwgJnZhbCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQyID0gMHglMDhYXG4iLCB2YWwpKTsKKworCQlpcWNhbF9pbWFnZV9pID0gX3MxM190b19zMzIodmFsICYgMHgwMDAwMUZGRik7CisJCWlxY2FsX2ltYWdlX3EgPSBfczEzX3RvX3MzMigodmFsICYgMHgwM0ZGRTAwMCkgPj4gMTMpOworCQlzcXN1bSA9IGlxY2FsX2ltYWdlX2kqaXFjYWxfaW1hZ2VfaSArIGlxY2FsX2ltYWdlX3EqaXFjYWxfaW1hZ2VfcTsKKwkJbWFnXzAgPSAoczMyKSBfc3FydChzcXN1bSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIG1hZ18wPSVkIChpcWNhbF9pbWFnZV9pPSVkLCBpcWNhbF9pbWFnZV9xPSVkKVxuIiwKKwkJCQkgICBtYWdfMCwgaXFjYWxfaW1hZ2VfaSwgaXFjYWxfaW1hZ2VfcSkpOworCisJCS8vIGQuCisJCXJlZ19kY19jYW5jZWwgfD0gKDEgPDwgQ0FOQ0VMX0RDX0lfU0hJRlQpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOworCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgcmVnX2RjX2NhbmNlbCk7CisJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMiwgJnZhbCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQyID0gMHglMDhYXG4iLCB2YWwpKTsKKworCQlpcWNhbF9pbWFnZV9pID0gX3MxM190b19zMzIodmFsICYgMHgwMDAwMUZGRik7CisJCWlxY2FsX2ltYWdlX3EgPSBfczEzX3RvX3MzMigodmFsICYgMHgwM0ZGRTAwMCkgPj4gMTMpOworCQlzcXN1bSA9IGlxY2FsX2ltYWdlX2kqaXFjYWxfaW1hZ2VfaSArIGlxY2FsX2ltYWdlX3EqaXFjYWxfaW1hZ2VfcTsKKwkJbWFnXzEgPSAoczMyKSBfc3FydChzcXN1bSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIG1hZ18xPSVkIChpcWNhbF9pbWFnZV9pPSVkLCBpcWNhbF9pbWFnZV9xPSVkKVxuIiwKKwkJCQkgICBtYWdfMSwgaXFjYWxfaW1hZ2VfaSwgaXFjYWxfaW1hZ2VfcSkpOworCisJCS8vIGUuIENhbGN1bGF0ZSB0aGUgY29ycmVjdCBEQyBvZmZzZXQgY2FuY2VsbGF0aW9uIHZhbHVlIGZvciBJCisJCWlmIChtYWdfMCAhPSBtYWdfMSkKKwkJeworCQkJZml4X2NhbmNlbF9kY19pID0gKG1hZ18wKjEwMDAwKSAvIChtYWdfMCoxMDAwMCAtIG1hZ18xKjEwMDAwKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChtYWdfMCA9PSBtYWdfMSkKKwkJCXsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICoqKioqIG1hZ18wID0gbWFnXzEgISFcbiIpKTsKKwkJCX0KKworCQkJZml4X2NhbmNlbF9kY19pID0gMDsKKwkJfQorCisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGZpeF9jYW5jZWxfZGNfaSA9ICVkICgweCUwNFgpXG4iLAorCQkJCSAgIGZpeF9jYW5jZWxfZGNfaSwgX3MzMl90b19zNShmaXhfY2FuY2VsX2RjX2kpKSk7CisKKwkJaWYgKChhYnMobWFnXzEtbWFnXzApKjYpID4gbWFnXzApCisJCXsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCBsb29wID49IDE5ICkKKwkgICBmaXhfY2FuY2VsX2RjX2kgPSAwOworCisJcmVnX2RjX2NhbmNlbCAmPSB+KDB4MDNGRik7CisJcmVnX2RjX2NhbmNlbCB8PSAoX3MzMl90b19zNShmaXhfY2FuY2VsX2RjX2kpIDw8IENBTkNFTF9EQ19JX1NISUZUKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgcmVnX2RjX2NhbmNlbCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKKworCS8vIGcuCisJcmVnX21vZGVfY3RybCAmPSB+TUFTS19DQUxJQl9TVEFSVDsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKwlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit2b2lkIF90eHFkYWNfZGNfb2Zmc2V0X2NhY2VsbGF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSkKK3sKKwl1MzIgICAgIHJlZ19hZ2NfY3RybDM7CisJdTMyICAgICByZWdfbW9kZV9jdHJsOworCXUzMiAgICAgcmVnX2RjX2NhbmNlbDsKKwlzMzIgICAgIGlxY2FsX2ltYWdlX2k7CisJczMyICAgICBpcWNhbF9pbWFnZV9xOworCXUzMiAgICAgc3FzdW07CisJczMyICAgICBtYWdfMDsKKwlzMzIgICAgIG1hZ18xOworCXMzMiAgICAgZml4X2NhbmNlbF9kY19xID0gMDsKKwl1MzIgICAgIHZhbDsKKwlpbnQgICAgIGxvb3A7CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAtPiBbM11fdHhxZGFjX2RjX29mZnNldF9jYWNlbGxhdGlvbigpXG4iKSk7CisJLy8weDAxIDB4RUUzRkMyICA7IDNCOEZGICA7IENhbGlicmF0aW9uICg2YSkuIGVuYWJsZSBUWCBJUSBjYWxpYnJhdGlvbiBsb29wIGNpcmN1aXRzCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAxLCAoMTw8MjQpfDB4RUUzRkMyKTsKKwkvLzB4MEIgMHgxOTA1RDYgIDsgMDY0MTcgIDsgQ2FsaWJyYXRpb24gKDZiKS4gZW5hYmxlIFRYIEkvUSBjYWwgbG9vcCBzcXVhcmluZyBjaXJjdWl0CisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAxMSwgKDExPDwyNCl8MHgxOTAxRDYpOworCS8vMHgwNSAweDI0QzYwQSAgOyAwOTMxOCAgOyBDYWxpYnJhdGlvbiAoNmMpLiBzZXR0aW5nIFRYLVZHQSBnYWluOiBUWEdDSD0yICYgR1BLPTExMCAtLT4gdG8gYmUgb3B0aW1pemVkCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA1LCAoNTw8MjQpfDB4MjRDNDhBKTsKKyAgICAvLzB4MDYgMHgwNjg4MEMgIDsgMDFBMjAgIDsgQ2FsaWJyYXRpb24gKDZkKS4gUlhHQ0g9MDA7IFJYR0NMPTEwMCAwMDAgKFJYVkdBPTMyKSAtLT4gdG8gYmUgb3B0aW1pemVkCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA2LCAoNjw8MjQpfDB4MDY4OTBDKTsKKwkvLzB4MDAgMHhGREYxQzAgIDsgM0Y3QzcgIDsgQ2FsaWJyYXRpb24gKDZlKS4gdHVybiBvbiBJUSBpbWJhbGFuY2UvVGVzdCBtb2RlCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAwLCAoMDw8MjQpfDB4RkRGMUMwKTsKKworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDMwMzAzMDMwKTsgLy8gSVFfQWxwaGEgQ2hhbmdlZAorCisJLy8gYS4gRGlzYWJsZSBBR0MKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgJnJlZ19hZ2NfY3RybDMpOworCXJlZ19hZ2NfY3RybDMgJj0gfkJJVCgyKTsKKwlyZWdfYWdjX2N0cmwzIHw9IChNQVNLX0xOQV9GSVhfR0FJTnxNQVNLX0FHQ19GSVgpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCByZWdfYWdjX2N0cmwzKTsKKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkw1LCAmdmFsKTsKKwl2YWwgfD0gTUFTS19BR0NfRklYX0dBSU47CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDUsIHZhbCk7CisKKwkvLyBhLiBzZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MyBhbmQgc2V0IGlxY2FsX3RvbmVbMzoyXSB0byAwCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisKKwkvL3JlZ19tb2RlX2N0cmwgJj0gfihNQVNLX0lRQ0FMX1RPTkVfU0VMfE1BU0tfSVFDQUxfTU9ERSk7CisJcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfTU9ERSk7CisJcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwzKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKwlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsICZyZWdfZGNfY2FuY2VsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CisKKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgTE9PUF9USU1FUzsgbG9vcCsrKQorCXsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gWyVkLl0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIiwgbG9vcCkpOworCisJCS8vIGIuCisJCS8vIHJlc2V0IGNhbmNlbF9kY19xWzQ6MF0gaW4gcmVnaXN0ZXIgRENfQ2FuY2VsCisJCXJlZ19kY19jYW5jZWwgJj0gfigweDAwMUYpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOworCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgcmVnX2RjX2NhbmNlbCk7CisJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMiwgJnZhbCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQyID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQlpcWNhbF9pbWFnZV9pID0gX3MxM190b19zMzIodmFsICYgMHgwMDAwMUZGRik7CisJCWlxY2FsX2ltYWdlX3EgPSBfczEzX3RvX3MzMigodmFsICYgMHgwM0ZGRTAwMCkgPj4gMTMpOworCQlzcXN1bSA9IGlxY2FsX2ltYWdlX2kqaXFjYWxfaW1hZ2VfaSArIGlxY2FsX2ltYWdlX3EqaXFjYWxfaW1hZ2VfcTsKKwkJbWFnXzAgPSBfc3FydChzcXN1bSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIG1hZ18wPSVkIChpcWNhbF9pbWFnZV9pPSVkLCBpcWNhbF9pbWFnZV9xPSVkKVxuIiwKKwkJCQkgICBtYWdfMCwgaXFjYWxfaW1hZ2VfaSwgaXFjYWxfaW1hZ2VfcSkpOworCisJCS8vIGMuCisJCXJlZ19kY19jYW5jZWwgfD0gKDEgPDwgQ0FOQ0VMX0RDX1FfU0hJRlQpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOworCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgcmVnX2RjX2NhbmNlbCk7CisJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMiwgJnZhbCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQyID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQlpcWNhbF9pbWFnZV9pID0gX3MxM190b19zMzIodmFsICYgMHgwMDAwMUZGRik7CisJCWlxY2FsX2ltYWdlX3EgPSBfczEzX3RvX3MzMigodmFsICYgMHgwM0ZGRTAwMCkgPj4gMTMpOworCQlzcXN1bSA9IGlxY2FsX2ltYWdlX2kqaXFjYWxfaW1hZ2VfaSArIGlxY2FsX2ltYWdlX3EqaXFjYWxfaW1hZ2VfcTsKKwkJbWFnXzEgPSBfc3FydChzcXN1bSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIG1hZ18xPSVkIChpcWNhbF9pbWFnZV9pPSVkLCBpcWNhbF9pbWFnZV9xPSVkKVxuIiwKKwkJCQkgICBtYWdfMSwgaXFjYWxfaW1hZ2VfaSwgaXFjYWxfaW1hZ2VfcSkpOworCisJCS8vIGQuIENhbGN1bGF0ZSB0aGUgY29ycmVjdCBEQyBvZmZzZXQgY2FuY2VsbGF0aW9uIHZhbHVlIGZvciBJCisJCWlmIChtYWdfMCAhPSBtYWdfMSkKKwkJeworCQkJZml4X2NhbmNlbF9kY19xID0gKG1hZ18wKjEwMDAwKSAvIChtYWdfMCoxMDAwMCAtIG1hZ18xKjEwMDAwKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChtYWdfMCA9PSBtYWdfMSkKKwkJCXsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICoqKioqIG1hZ18wID0gbWFnXzEgISFcbiIpKTsKKwkJCX0KKworCQkJZml4X2NhbmNlbF9kY19xID0gMDsKKwkJfQorCisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGZpeF9jYW5jZWxfZGNfcSA9ICVkICgweCUwNFgpXG4iLAorCQkJCSAgIGZpeF9jYW5jZWxfZGNfcSwgX3MzMl90b19zNShmaXhfY2FuY2VsX2RjX3EpKSk7CisKKwkJaWYgKChhYnMobWFnXzEtbWFnXzApKjYpID4gbWFnXzApCisJCXsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCBsb29wID49IDE5ICkKKwkgICBmaXhfY2FuY2VsX2RjX3EgPSAwOworCisJcmVnX2RjX2NhbmNlbCAmPSB+KDB4MDAxRik7CisJcmVnX2RjX2NhbmNlbCB8PSAoX3MzMl90b19zNShmaXhfY2FuY2VsX2RjX3EpIDw8IENBTkNFTF9EQ19RX1NISUZUKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgcmVnX2RjX2NhbmNlbCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKKworCisJLy8gZi4KKwlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0NBTElCX1NUQVJUOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7Cit9CisKKy8vMjAwNjA2MTIuMS5hIDIwMDYwNzE4LjEgTW9kaWZ5Cit1OCBfdHhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsCisJCQkJCQkgICBzMzIgYV8yX3RocmVzaG9sZCwKKwkJCQkJCSAgIHMzMiBiXzJfdGhyZXNob2xkKQoreworCXUzMiAgICAgcmVnX21vZGVfY3RybDsKKwlzMzIgICAgIGlxX21hZ18wX3R4OworCXMzMiAgICAgaXFjYWxfdG9uZV9pMDsKKwlzMzIgICAgIGlxY2FsX3RvbmVfcTA7CisJczMyICAgICBpcWNhbF90b25lX2k7CisJczMyICAgICBpcWNhbF90b25lX3E7CisJdTMyICAgICBzcXN1bTsKKwlzMzIgICAgIHJvdF9pX2I7CisJczMyICAgICByb3RfcV9iOworCXMzMiAgICAgdHhfY2FsX2ZsdF9iWzRdOworCXMzMiAgICAgdHhfY2FsWzRdOworCXMzMiAgICAgdHhfY2FsX3JlZ1s0XTsKKwlzMzIgICAgIGFfMiwgYl8yOworCXMzMiAgICAgc2luX2IsIHNpbl8yYjsKKwlzMzIgICAgIGNvc19iLCBjb3NfMmI7CisJczMyICAgICBkaXZpc29yOworCXMzMiAgICAgdGVtcDEsIHRlbXAyOworCXUzMiAgICAgdmFsOworCXUxNiAgICAgbG9vcDsKKwlzMzIgICAgIGlxY2FsX3RvbmVfaV9hdmcsaXFjYWxfdG9uZV9xX2F2ZzsKKwl1OCAgICAgIHZlcmlmeV9jb3VudDsKKwlpbnQgY2FwdHVyZV90aW1lOworCisJUEhZX0RFQlVHKCgiW0NBTF0gLT4gX3R4X2lxX2NhbGlicmF0aW9uX2xvb3AoKVxuIikpOworCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGFfMl90aHJlc2hvbGQgPSAlZFxuIiwgYV8yX3RocmVzaG9sZCkpOworCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGJfMl90aHJlc2hvbGQgPSAlZFxuIiwgYl8yX3RocmVzaG9sZCkpOworCisJdmVyaWZ5X2NvdW50ID0gMDsKKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMIChyZWFkKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCisJbG9vcCA9IExPT1BfVElNRVM7CisKKwl3aGlsZSAobG9vcCA+IDApCisJeworCQlQSFlfREVCVUcoKCJbQ0FMXSBbJWQuXSA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+XG4iLCAoTE9PUF9USU1FUy1sb29wKzEpKSk7CisKKwkJaXFjYWxfdG9uZV9pX2F2Zz0wOworCQlpcWNhbF90b25lX3FfYXZnPTA7CisJCWlmKCAhaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIDB4MDApICkgLy8gMjAwNjA3MTguMSBtb2RpZnkKKwkJCXJldHVybiAwOworCQlmb3IoY2FwdHVyZV90aW1lPTA7Y2FwdHVyZV90aW1lPDEwO2NhcHR1cmVfdGltZSsrKQorCQl7CisJCQkvLyBhLiBTZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MiBhbmQgc2V0ICJjYWxpYl9zdGFydCIgdG8gMHgxIHRvCisJCQkvLyAgICBlbmFibGUgIklRIGFsaWJyYXRpb24gTW9kZSBJSSIKKwkJCXJlZ19tb2RlX2N0cmwgJj0gfihNQVNLX0lRQ0FMX1RPTkVfU0VMfE1BU0tfSVFDQUxfTU9ERSk7CisJCQlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0lRQ0FMX01PREU7CisJCQlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDB4MDIpOworCQkJcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwweDAyfDI8PDIpOworCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKwkJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJCS8vIGIuCisJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0NBTElCX1JFQUQxLCAmdmFsKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQxID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJCWlxY2FsX3RvbmVfaTAgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJCWlxY2FsX3RvbmVfcTAgPSBfczEzX3RvX3MzMigodmFsICYgMHgwM0ZGRTAwMCkgPj4gMTMpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogaXFjYWxfdG9uZV9pMD0lZCwgaXFjYWxfdG9uZV9xMD0lZFxuIiwKKwkJCQkgICBpcWNhbF90b25lX2kwLCBpcWNhbF90b25lX3EwKSk7CisKKwkJCXNxc3VtID0gaXFjYWxfdG9uZV9pMCppcWNhbF90b25lX2kwICsKKwkJCWlxY2FsX3RvbmVfcTAqaXFjYWxfdG9uZV9xMDsKKwkJCWlxX21hZ18wX3R4ID0gKHMzMikgX3NxcnQoc3FzdW0pOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogaXFfbWFnXzBfdHg9JWRcbiIsIGlxX21hZ18wX3R4KSk7CisKKwkJCS8vIGMuIFNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MAorCQkJcmVnX21vZGVfY3RybCAmPSB+TUFTS19DQUxJQl9TVEFSVDsKKwkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisJCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCQkvLyBkLiBTZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MyBhbmQgc2V0ICJjYWxpYl9zdGFydCIgdG8gMHgxIHRvCisJCQkvLyAgICBlbmFibGUgIklRIGFsaWJyYXRpb24gTW9kZSBJSSIKKwkJCS8vaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZ2YWwpOworCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKTsKKwkJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfSVFDQUxfTU9ERTsKKwkJCXJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8MHgwMyk7CisJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCQkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQkJLy8gZS4KKwkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQ0FMSUJfUkVBRDEsICZ2YWwpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDEgPSAweCUwOFhcbiIsIHZhbCkpOworCQkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQkJaXFjYWxfdG9uZV9pID0gX3MxM190b19zMzIodmFsICYgMHgwMDAwMUZGRik7CisJCQlpcWNhbF90b25lX3EgPSBfczEzX3RvX3MzMigodmFsICYgMHgwM0ZGRTAwMCkgPj4gMTMpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogaXFjYWxfdG9uZV9pID0gJWQsIGlxY2FsX3RvbmVfcSA9ICVkXG4iLAorCQkJaXFjYWxfdG9uZV9pLCBpcWNhbF90b25lX3EpKTsKKwkJCWlmKCBjYXB0dXJlX3RpbWUgPT0gMCkKKwkJCXsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpcWNhbF90b25lX2lfYXZnPSggaXFjYWxfdG9uZV9pX2F2ZyooY2FwdHVyZV90aW1lLTEpICtpcWNhbF90b25lX2kpL2NhcHR1cmVfdGltZTsKKwkJCQlpcWNhbF90b25lX3FfYXZnPSggaXFjYWxfdG9uZV9xX2F2ZyooY2FwdHVyZV90aW1lLTEpICtpcWNhbF90b25lX3EpL2NhcHR1cmVfdGltZTsKKwkJCX0KKwkJfQorCisJCWlxY2FsX3RvbmVfaSA9IGlxY2FsX3RvbmVfaV9hdmc7CisJCWlxY2FsX3RvbmVfcSA9IGlxY2FsX3RvbmVfcV9hdmc7CisKKworCQlyb3RfaV9iID0gKGlxY2FsX3RvbmVfaSAqIGlxY2FsX3RvbmVfaTAgKworCQkJCSAgIGlxY2FsX3RvbmVfcSAqIGlxY2FsX3RvbmVfcTApIC8gMTAyNDsKKwkJcm90X3FfYiA9IChpcWNhbF90b25lX2kgKiBpcWNhbF90b25lX3EwICogKC0xKSArCisJCQkJICAgaXFjYWxfdG9uZV9xICogaXFjYWxfdG9uZV9pMCkgLyAxMDI0OworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByb3RfaV9iID0gJWQsIHJvdF9xX2IgPSAlZFxuIiwKKwkJCQkgICByb3RfaV9iLCByb3RfcV9iKSk7CisKKwkJLy8gZi4KKwkJZGl2aXNvciA9ICgoaXFfbWFnXzBfdHggKiBpcV9tYWdfMF90eCAqIDIpLzEwMjQgLSByb3RfaV9iKSAqIDI7CisKKwkJaWYgKGRpdmlzb3IgPT0gMCkKKwkJeworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiBFUlJPUiAqKioqKioqXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBkaXZpc29yPTAgdG8gY2FsY3VsYXRlIEVQUyBhbmQgVEhFVEEgISFcbiIpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkJYnJlYWs7CisJCX0KKworCQlhXzIgPSAocm90X2lfYiAqIDMyNzY4KSAvIGRpdmlzb3I7CisJCWJfMiA9IChyb3RfcV9iICogKC0zMjc2OCkpIC8gZGl2aXNvcjsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKioqKiogRVBTSUxPTi8yID0gJWRcbiIsIGFfMikpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKioqKiBUSEVUQS8yICAgPSAlZFxuIiwgYl8yKSk7CisKKwkJcGh3X2RhdGEtPmlxX3JzZGxfZ2Fpbl90eF9kMiA9IGFfMjsKKwkJcGh3X2RhdGEtPmlxX3JzZGxfcGhhc2VfdHhfZDIgPSBiXzI7CisKKwkJLy9pZiAoKGFicyhhXzIpIDwgMTUwKSAmJiAoYWJzKGJfMikgPCAxMDApKQorCQkvL2lmICgoYWJzKGFfMikgPCAyMDApICYmIChhYnMoYl8yKSA8IDIwMCkpCisJCWlmICgoYWJzKGFfMikgPCBhXzJfdGhyZXNob2xkKSAmJiAoYWJzKGJfMikgPCBiXzJfdGhyZXNob2xkKSkKKwkJeworCQkJdmVyaWZ5X2NvdW50Kys7CisKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqKioqKlxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVkVSSUZZIE9LICMgJWQgISFcbiIsIHZlcmlmeV9jb3VudCkpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisKKwkJCWlmICh2ZXJpZnlfY291bnQgPiAyKQorCQkJeworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVFhfSVFfQ0FMSUJSQVRJT04gKEVQUyxUSEVUQSkgT0sgISFcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQljb250aW51ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXZlcmlmeV9jb3VudCA9IDA7CisJCX0KKworCQlfc2luX2NvcyhiXzIsICZzaW5fYiwgJmNvc19iKTsKKwkJX3Npbl9jb3MoYl8yKjIsICZzaW5fMmIsICZjb3NfMmIpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBzaW4oYi8yKT0lZCwgY29zKGIvMik9JWRcbiIsIHNpbl9iLCBjb3NfYikpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBzaW4oYik9JWQsIGNvcyhiKT0lZFxuIiwgc2luXzJiLCBjb3NfMmIpKTsKKworCQlpZiAoY29zXzJiID09IDApCisJCXsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gRVJST1IgKioqKioqKlxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogY29zKGIpPTAgISFcbiIpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkJYnJlYWs7CisJCX0KKworCQkvLyAxMjgwICogMzI3NjggPSA0MTk0MzA0MAorCQl0ZW1wMSA9ICg0MTk0MzA0MC9jb3NfMmIpKmNvc19iOworCisJCS8vdGVtcDIgPSAoNDE5NDMwNDAvY29zXzJiKSpzaW5fYiooLTEpOworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQl0ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7CisJCX0KKwkJZWxzZSAvLyAybmQtY3V0CisJCXsKKwkJCXRlbXAyID0gKDQxOTQzMDQwKjQvY29zXzJiKSpzaW5fYiooLTEpOworCQl9CisKKwkJdHhfY2FsX2ZsdF9iWzBdID0gX2Zsb29yKHRlbXAxLygzMjc2OCthXzIpKTsKKwkJdHhfY2FsX2ZsdF9iWzFdID0gX2Zsb29yKHRlbXAyLygzMjc2OCthXzIpKTsKKwkJdHhfY2FsX2ZsdF9iWzJdID0gX2Zsb29yKHRlbXAyLygzMjc2OC1hXzIpKTsKKwkJdHhfY2FsX2ZsdF9iWzNdID0gX2Zsb29yKHRlbXAxLygzMjc2OC1hXzIpKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogdHhfY2FsX2ZsdF9iWzBdID0gJWRcbiIsIHR4X2NhbF9mbHRfYlswXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfZmx0X2JbMV0gPSAlZFxuIiwgdHhfY2FsX2ZsdF9iWzFdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbF9mbHRfYlsyXSA9ICVkXG4iLCB0eF9jYWxfZmx0X2JbMl0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX2ZsdF9iWzNdID0gJWRcbiIsIHR4X2NhbF9mbHRfYlszXSkpOworCisJCXR4X2NhbFsyXSA9IHR4X2NhbF9mbHRfYlsyXTsKKwkJdHhfY2FsWzJdID0gdHhfY2FsWzJdICszOworCQl0eF9jYWxbMV0gPSB0eF9jYWxbMl07CisJCXR4X2NhbFszXSA9IHR4X2NhbF9mbHRfYlszXSAtIDEyODsKKwkJdHhfY2FsWzBdID0gLXR4X2NhbFszXSsxOworCisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbFswXSA9ICVkXG4iLCB0eF9jYWxbMF0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsWzFdID0gJWRcbiIsIHR4X2NhbFsxXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxbMl0gPSAlZFxuIiwgdHhfY2FsWzJdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbFszXSA9ICVkXG4iLCB0eF9jYWxbM10pKTsKKworCQkvL2lmICgodHhfY2FsWzBdID09IDApICYmICh0eF9jYWxbMV0gPT0gMCkgJiYKKwkJLy8gICAgKHR4X2NhbFsyXSA9PSAwKSAmJiAodHhfY2FsWzNdID09IDApKQorCQkvL3sKKwkJLy8gICAgUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKioqKioqXG4iKSk7CisJCS8vICAgIFBIWV9ERUJVRygoIltDQUxdICoqIFRYX0lRX0NBTElCUkFUSU9OIENPTVBMRVRFICEhXG4iKSk7CisJCS8vICAgIFBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkvLyAgICByZXR1cm4gMDsKKwkJLy99CisKKwkJLy8gZy4KKwkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJeworCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogMHg1NCA9IDB4JTA4WFxuIiwgdmFsKSk7CisJCQl0eF9jYWxfcmVnWzBdID0gX3M0X3RvX3MzMigodmFsICYgMHhGMDAwMDAwMCkgPj4gMjgpOworCQkJdHhfY2FsX3JlZ1sxXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MEYwMDAwMDApID4+IDI0KTsKKwkJCXR4X2NhbF9yZWdbMl0gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwRjAwMDAwKSA+PiAyMCk7CisJCQl0eF9jYWxfcmVnWzNdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDBGMDAwMCkgPj4gMTYpOworCQl9CisJCWVsc2UgLy8gMm5kLWN1dAorCQl7CisJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiAweDNDID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJCXR4X2NhbF9yZWdbMF0gPSBfczVfdG9fczMyKCh2YWwgJiAweEY4MDAwMDAwKSA+PiAyNyk7CisJCQl0eF9jYWxfcmVnWzFdID0gX3M2X3RvX3MzMigodmFsICYgMHgwN0UwMDAwMCkgPj4gMjEpOworCQkJdHhfY2FsX3JlZ1syXSA9IF9zNl90b19zMzIoKHZhbCAmIDB4MDAxRjgwMDApID4+IDE1KTsKKwkJCXR4X2NhbF9yZWdbM10gPSBfczVfdG9fczMyKCh2YWwgJiAweDAwMDA3QzAwKSA+PiAxMCk7CisKKwkJfQorCisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHR4X2NhbF9yZWdbMF0gPSAlZFxuIiwgdHhfY2FsX3JlZ1swXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfcmVnWzFdID0gJWRcbiIsIHR4X2NhbF9yZWdbMV0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX3JlZ1syXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzJdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbF9yZWdbM10gPSAlZFxuIiwgdHhfY2FsX3JlZ1szXSkpOworCisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCXsKKwkJCWlmICgoKHR4X2NhbF9yZWdbMF09PTcpIHx8ICh0eF9jYWxfcmVnWzBdPT0oLTgpKSkgJiYKKwkJCQkoKHR4X2NhbF9yZWdbM109PTcpIHx8ICh0eF9jYWxfcmVnWzNdPT0oLTgpKSkpCisJCQl7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKipcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBUWF9JUV9DQUxJQlJBVElPTiBTQVRVQVRJT04gISFcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWVsc2UgLy8gMm5kLWN1dAorCQl7CisJCQlpZiAoKCh0eF9jYWxfcmVnWzBdPT0zMSkgfHwgKHR4X2NhbF9yZWdbMF09PSgtMzIpKSkgJiYKKwkJCQkoKHR4X2NhbF9yZWdbM109PTMxKSB8fCAodHhfY2FsX3JlZ1szXT09KC0zMikpKSkKKwkJCXsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKlxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFRYX0lRX0NBTElCUkFUSU9OIFNBVFVBVElPTiAhIVxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQl0eF9jYWxbMF0gPSB0eF9jYWxbMF0gKyB0eF9jYWxfcmVnWzBdOworCQl0eF9jYWxbMV0gPSB0eF9jYWxbMV0gKyB0eF9jYWxfcmVnWzFdOworCQl0eF9jYWxbMl0gPSB0eF9jYWxbMl0gKyB0eF9jYWxfcmVnWzJdOworCQl0eF9jYWxbM10gPSB0eF9jYWxbM10gKyB0eF9jYWxfcmVnWzNdOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBhcHBseSB0eF9jYWxbMF0gPSAlZFxuIiwgdHhfY2FsWzBdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIGFwcGx5IHR4X2NhbFsxXSA9ICVkXG4iLCB0eF9jYWxbMV0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgYXBwbHkgdHhfY2FsWzJdID0gJWRcbiIsIHR4X2NhbFsyXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICBhcHBseSB0eF9jYWxbM10gPSAlZFxuIiwgdHhfY2FsWzNdKSk7CisKKwkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJeworCQkJdmFsICY9IDB4MDAwMEZGRkY7CisJCQl2YWwgfD0gKChfczMyX3RvX3M0KHR4X2NhbFswXSkgPDwgMjgpfAorCQkJCQkoX3MzMl90b19zNCh0eF9jYWxbMV0pIDw8IDI0KXwKKwkJCQkJKF9zMzJfdG9fczQodHhfY2FsWzJdKSA8PCAyMCl8CisJCQkJCShfczMyX3RvX3M0KHR4X2NhbFszXSkgPDwgMTYpKTsKKwkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogQ0FMSUJfREFUQSA9IDB4JTA4WFxuIiwgdmFsKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQllbHNlIC8vIDJuZC1jdXQKKwkJeworCQkJdmFsICY9IDB4MDAwMDAzRkY7CisJCQl2YWwgfD0gKChfczMyX3RvX3M1KHR4X2NhbFswXSkgPDwgMjcpfAorCQkJCQkoX3MzMl90b19zNih0eF9jYWxbMV0pIDw8IDIxKXwKKwkJCQkJKF9zMzJfdG9fczYodHhfY2FsWzJdKSA8PCAxNSl8CisJCQkJCShfczMyX3RvX3M1KHR4X2NhbFszXSkgPDwgMTApKTsKKwkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCB2YWwpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogVFhfSVFfQ0FMSUJSQVRJT04gPSAweCUwOFhcbiIsIHZhbCkpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvLyBpLiBTZXQgImNhbGliX3N0YXJ0IiB0byAweDAKKwkJcmVnX21vZGVfY3RybCAmPSB+TUFTS19DQUxJQl9TVEFSVDsKKwkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCisJCWxvb3AtLTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBfdHhfaXFfY2FsaWJyYXRpb25fd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhKQoreworCXUzMiAgICAgcmVnX2FnY19jdHJsMzsKKyNpZmRlZiBfREVCVUcKKwlzMzIgICAgIHR4X2NhbF9yZWdbNF07CisKKyNlbmRpZgorCXUzMiAgICAgcmVnX21vZGVfY3RybDsKKwl1MzIgICAgIHZhbDsKKwl1OCAgICAgIHJlc3VsdDsKKworCVBIWV9ERUJVRygoIltDQUxdIC0+IFs0XV90eF9pcV9jYWxpYnJhdGlvbigpXG4iKSk7CisKKwkvLzB4MDEgMHhFRTNGQzIgIDsgM0I4RkYgIDsgQ2FsaWJyYXRpb24gKDZhKS4gZW5hYmxlIFRYIElRIGNhbGlicmF0aW9uIGxvb3AgY2lyY3VpdHMKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDEsICgxPDwyNCl8MHhFRTNGQzIpOworCS8vMHgwQiAweDE5MDVENiAgOyAwNjQxNyAgOyBDYWxpYnJhdGlvbiAoNmIpLiBlbmFibGUgVFggSS9RIGNhbCBsb29wIHNxdWFyaW5nIGNpcmN1aXQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDExLCAoMTE8PDI0KXwweDE5QkRENik7IC8vIDIwMDYwNjEyLjEuYSAweDE5MDVENik7CisJLy8weDA1IDB4MjRDNjBBICA7IDA5MzE4ICA7IENhbGlicmF0aW9uICg2YykuIHNldHRpbmcgVFgtVkdBIGdhaW46IFRYR0NIPTIgJiBHUEs9MTEwIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCl8MHgyNEM2MEEpOyAvLzB4MjRDNjBBIChoaWdoIHRlbXBlcmF0dXJlKQorICAgIC8vMHgwNiAweDA2ODgwQyAgOyAwMUEyMCAgOyBDYWxpYnJhdGlvbiAoNmQpLiBSWEdDSD0wMDsgUlhHQ0w9MTAwIDAwMCAoUlhWR0E9MzIpIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDYsICg2PDwyNCl8MHgzNDg4MEMpOyAvLyAyMDA2MDYxMi4xLmEgMHgwNjg5MEMpOworCS8vMHgwMCAweEZERjFDMCAgOyAzRjdDNyAgOyBDYWxpYnJhdGlvbiAoNmUpLiB0dXJuIG9uIElRIGltYmFsYW5jZS9UZXN0IG1vZGUKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDAsICgwPDwyNCl8MHhGREYxQzApOworCS8vOyBbQkItY2hpcF06IENhbGlicmF0aW9uICg2ZikuU2VuZCB0ZXN0IHBhdHRlcm4KKwkvLzsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoNmcpLiBTZWFyY2ggUlhHQ0wgb3B0aW1hbCB2YWx1ZQorCS8vOyBbQkItY2hpcF06IENhbGlicmF0aW9uICg2aCkuIENhY3VsYXRlIFRYLXBhdGggSVEgaW1iYWxhbmNlIGFuZCBzZXR0aW5nIFRYIHBhdGggSVEgY29tcGVuc2F0aW9uIHRhYmxlCisJLy9waHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDMsICgzPDwyNCl8MHgwMjU1ODYpOworCisJT1NfU0xFRVAoMzAwMDApOyAvLyAyMDA2MDYxMi4xLmEgMzBtcyBkZWxheS4gQWRkIHRoZSBmb2xsb3cgMiBsaW5lcworCS8vVG8gYWRqdXN0IFRYVkdBIHRvIGZpdCBpcV9tYWdfMCByYW5nZSBmcm9tIDEyNTAgfiAxNzUwCisJYWRqdXN0X1RYVkdBX2Zvcl9pcV9tYWcoIHBod19kYXRhICk7CisKKwkvLyBhLiBEaXNhYmxlIEFHQworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmcmVnX2FnY19jdHJsMyk7CisJcmVnX2FnY19jdHJsMyAmPSB+QklUKDIpOworCXJlZ19hZ2NfY3RybDMgfD0gKE1BU0tfTE5BX0ZJWF9HQUlOfE1BU0tfQUdDX0ZJWCk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsIHJlZ19hZ2NfY3RybDMpOworCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDUsICZ2YWwpOworCXZhbCB8PSBNQVNLX0FHQ19GSVhfR0FJTjsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMNSwgdmFsKTsKKworCXJlc3VsdCA9IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQocGh3X2RhdGEsIDE1MCwgMTAwKTsKKworCWlmIChyZXN1bHQgPiAwKQorCXsKKwkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJeworCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOworCQkJdmFsICY9IDB4MDAwMEZGRkY7CisJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKKwkJfQorCQllbHNlIC8vIDJuZC1jdXQKKwkJeworCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsICZ2YWwpOworCQkJdmFsICY9IDB4MDAwMDAzRkY7CisJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgdmFsKTsKKwkJfQorCisJCXJlc3VsdCA9IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQocGh3X2RhdGEsIDMwMCwgMjAwKTsKKworCQlpZiAocmVzdWx0ID4gMCkKKwkJeworCQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJCXsKKwkJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisJCQkJdmFsICY9IDB4MDAwMEZGRkY7CisJCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIHZhbCk7CisJCQl9CisJCQllbHNlIC8vIDJuZC1jdXQKKwkJCXsKKwkJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CisJCQkJdmFsICY9IDB4MDAwMDAzRkY7CisJCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIHZhbCk7CisJCQl9CisKKwkJCXJlc3VsdCA9IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQocGh3X2RhdGEsIDUwMCwgNDAwKTsKKwkJCWlmIChyZXN1bHQgPiAwKQorCQkJeworCQkJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCQkJeworCQkJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisJCQkJCXZhbCAmPSAweDAwMDBGRkZGOworCQkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKKwkJCQl9CisJCQkJZWxzZSAvLyAybmQtY3V0CisJCQkJeworCQkJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CisJCQkJCXZhbCAmPSAweDAwMDAwM0ZGOworCQkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgdmFsKTsKKwkJCQl9CisKKworCQkJCXJlc3VsdCA9IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQocGh3X2RhdGEsIDcwMCwgNTAwKTsKKworCQkJCWlmIChyZXN1bHQgPiAwKQorCQkJCXsKKwkJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbj4gKioqKioqKioqKioqKipcbiIpKTsKKwkJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVFhfSVFfQ0FMSUJSQVRJT04gRkFJTFVSRSAhIVxuIikpOworCQkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCisJCQkJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCQkJCXsKKwkJCQkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKKwkJCQkJCXZhbCAmPSAweDAwMDBGRkZGOworCQkJCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIHZhbCk7CisJCQkJCX0KKwkJCQkJZWxzZSAvLyAybmQtY3V0CisJCQkJCXsKKwkJCQkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAmdmFsKTsKKwkJCQkJCXZhbCAmPSAweDAwMDAwM0ZGOworCQkJCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIHZhbCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvLyBpLiBTZXQgImNhbGliX3N0YXJ0IiB0byAweDAKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOworCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisKKwkvLyBnLiBFbmFibGUgQUdDCisJLy9od19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgJnZhbCk7CisJcmVnX2FnY19jdHJsMyB8PSBCSVQoMik7CisJcmVnX2FnY19jdHJsMyAmPSB+KE1BU0tfTE5BX0ZJWF9HQUlOfE1BU0tfQUdDX0ZJWCk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsIHJlZ19hZ2NfY3RybDMpOworCisjaWZkZWYgX0RFQlVHCisJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwl7CisJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogMHg1NCA9IDB4JTA4WFxuIiwgdmFsKSk7CisJCXR4X2NhbF9yZWdbMF0gPSBfczRfdG9fczMyKCh2YWwgJiAweEYwMDAwMDAwKSA+PiAyOCk7CisJCXR4X2NhbF9yZWdbMV0gPSBfczRfdG9fczMyKCh2YWwgJiAweDBGMDAwMDAwKSA+PiAyNCk7CisJCXR4X2NhbF9yZWdbMl0gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwRjAwMDAwKSA+PiAyMCk7CisJCXR4X2NhbF9yZWdbM10gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMEYwMDAwKSA+PiAxNik7CisJfQorCWVsc2UgLy8gMm5kLWN1dAorCXsKKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsICZ2YWwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiAweDNDID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJdHhfY2FsX3JlZ1swXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4RjgwMDAwMDApID4+IDI3KTsKKwkJdHhfY2FsX3JlZ1sxXSA9IF9zNl90b19zMzIoKHZhbCAmIDB4MDdFMDAwMDApID4+IDIxKTsKKwkJdHhfY2FsX3JlZ1syXSA9IF9zNl90b19zMzIoKHZhbCAmIDB4MDAxRjgwMDApID4+IDE1KTsKKwkJdHhfY2FsX3JlZ1szXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4MDAwMDdDMDApID4+IDEwKTsKKworCX0KKworCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHR4X2NhbF9yZWdbMF0gPSAlZFxuIiwgdHhfY2FsX3JlZ1swXSkpOworCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbF9yZWdbMV0gPSAlZFxuIiwgdHhfY2FsX3JlZ1sxXSkpOworCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbF9yZWdbMl0gPSAlZFxuIiwgdHhfY2FsX3JlZ1syXSkpOworCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbF9yZWdbM10gPSAlZFxuIiwgdHhfY2FsX3JlZ1szXSkpOworI2VuZGlmCisKKworCS8vIGZvciB0ZXN0IC0gQkVOCisJLy8gUkYgQ29udHJvbCBPdmVycmlkZQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordTggX3J4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhLCB1MTYgZmFjdG9yLCB1MzIgZnJlcXVlbmN5KQoreworCXUzMiAgICAgcmVnX21vZGVfY3RybDsKKwlzMzIgICAgIGlxY2FsX3RvbmVfaTsKKwlzMzIgICAgIGlxY2FsX3RvbmVfcTsKKwlzMzIgICAgIGlxY2FsX2ltYWdlX2k7CisJczMyICAgICBpcWNhbF9pbWFnZV9xOworCXMzMiAgICAgcm90X3RvbmVfaV9iOworCXMzMiAgICAgcm90X3RvbmVfcV9iOworCXMzMiAgICAgcm90X2ltYWdlX2lfYjsKKwlzMzIgICAgIHJvdF9pbWFnZV9xX2I7CisJczMyICAgICByeF9jYWxfZmx0X2JbNF07CisJczMyICAgICByeF9jYWxbNF07CisJczMyICAgICByeF9jYWxfcmVnWzRdOworCXMzMiAgICAgYV8yLCBiXzI7CisJczMyICAgICBzaW5fYiwgc2luXzJiOworCXMzMiAgICAgY29zX2IsIGNvc18yYjsKKwlzMzIgICAgIHRlbXAxLCB0ZW1wMjsKKwl1MzIgICAgIHZhbDsKKwl1MTYgICAgIGxvb3A7CisKKwl1MzIgICAgIHB3cl90b25lOworCXUzMiAgICAgcHdyX2ltYWdlOworCXU4ICAgICAgdmVyaWZ5X2NvdW50OworCisJczMyICAgICBpcWNhbF90b25lX2lfYXZnLGlxY2FsX3RvbmVfcV9hdmc7CisJczMyICAgICBpcWNhbF9pbWFnZV9pX2F2ZyxpcWNhbF9pbWFnZV9xX2F2ZzsKKwl1MTYJCWNhcHR1cmVfdGltZTsKKworCVBIWV9ERUJVRygoIltDQUxdIC0+IFs1XV9yeF9pcV9jYWxpYnJhdGlvbl9sb29wKClcbiIpKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAqKiBmYWN0b3IgPSAlZFxuIiwgZmFjdG9yKSk7CisKKworLy8gUkYgQ29udHJvbCBPdmVycmlkZQorCWh3X2dldF9jeHhfcmVnKHBod19kYXRhLCAweDgwLCAmdmFsKTsKKwl2YWwgfD0gQklUKDE5KTsKKwlod19zZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHg4MCwgdmFsKTsKKworLy8gUkZfQ3RybAorCWh3X2dldF9jeHhfcmVnKHBod19kYXRhLCAweEU0LCAmdmFsKTsKKwl2YWwgfD0gQklUKDApOworCWh3X3NldF9jeHhfcmVnKHBod19kYXRhLCAweEU0LCB2YWwpOworCVBIWV9ERUJVRygoIltDQUxdICoqIFJGX0NUUkwoMHhFNCkgPSAweCUwOFgiLCB2YWwpKTsKKworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDQ0NDQ0NDQ0KTsgLy8gSVFfQWxwaGEKKworCS8vIGIuCisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKworCXZlcmlmeV9jb3VudCA9IDA7CisKKwkvL2ZvciAobG9vcCA9IDA7IGxvb3AgPCAxOyBsb29wKyspCisJLy9mb3IgKGxvb3AgPSAwOyBsb29wIDwgTE9PUF9USU1FUzsgbG9vcCsrKQorCWxvb3AgPSBMT09QX1RJTUVTOworCXdoaWxlIChsb29wID4gMCkKKwl7CisJCVBIWV9ERUJVRygoIltDQUxdIFslZC5dIDxfcnhfaXFfY2FsaWJyYXRpb25fbG9vcD5cbiIsIChMT09QX1RJTUVTLWxvb3ArMSkpKTsKKwkJaXFjYWxfdG9uZV9pX2F2Zz0wOworCQlpcWNhbF90b25lX3FfYXZnPTA7CisJCWlxY2FsX2ltYWdlX2lfYXZnPTA7CisJCWlxY2FsX2ltYWdlX3FfYXZnPTA7CisJCWNhcHR1cmVfdGltZT0wOworCisJCWZvcihjYXB0dXJlX3RpbWU9MDsgY2FwdHVyZV90aW1lPDEwOyBjYXB0dXJlX3RpbWUrKykKKwkJeworCQkvLyBpLiBTZXQgImNhbGliX3N0YXJ0IiB0byAweDAKKwkJcmVnX21vZGVfY3RybCAmPSB+TUFTS19DQUxJQl9TVEFSVDsKKwkJaWYoICFod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCkgKS8vMjAwNjA3MTguMSBtb2RpZnkKKwkJCXJldHVybiAwOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfSVFDQUxfTU9ERTsKKwkJcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwweDEpOworCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7ICAvL1Nob3VsZCBiZSByZWFkIG91dCBhZnRlciA0NTB1cworCisJCS8vIGMuCisJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQ0FMSUJfUkVBRDEsICZ2YWwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBDQUxJQl9SRUFEMSA9IDB4JTA4WFxuIiwgdmFsKSk7CisKKwkJaXFjYWxfdG9uZV9pID0gX3MxM190b19zMzIodmFsICYgMHgwMDAwMUZGRik7CisJCWlxY2FsX3RvbmVfcSA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGlxY2FsX3RvbmVfaSA9ICVkLCBpcWNhbF90b25lX3EgPSAlZFxuIiwKKwkJCQkgICBpcWNhbF90b25lX2ksIGlxY2FsX3RvbmVfcSkpOworCisJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQ0FMSUJfUkVBRDIsICZ2YWwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBDQUxJQl9SRUFEMiA9IDB4JTA4WFxuIiwgdmFsKSk7CisKKwkJaXFjYWxfaW1hZ2VfaSA9IF9zMTNfdG9fczMyKHZhbCAmIDB4MDAwMDFGRkYpOworCQlpcWNhbF9pbWFnZV9xID0gX3MxM190b19zMzIoKHZhbCAmIDB4MDNGRkUwMDApID4+IDEzKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogaXFjYWxfaW1hZ2VfaSA9ICVkLCBpcWNhbF9pbWFnZV9xID0gJWRcbiIsCisJCQkJICAgaXFjYWxfaW1hZ2VfaSwgaXFjYWxfaW1hZ2VfcSkpOworCQkJaWYoIGNhcHR1cmVfdGltZSA9PSAwKQorCQkJeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlxY2FsX2ltYWdlX2lfYXZnPSggaXFjYWxfaW1hZ2VfaV9hdmcqKGNhcHR1cmVfdGltZS0xKSAraXFjYWxfaW1hZ2VfaSkvY2FwdHVyZV90aW1lOworCQkJCWlxY2FsX2ltYWdlX3FfYXZnPSggaXFjYWxfaW1hZ2VfcV9hdmcqKGNhcHR1cmVfdGltZS0xKSAraXFjYWxfaW1hZ2VfcSkvY2FwdHVyZV90aW1lOworCQkJCWlxY2FsX3RvbmVfaV9hdmc9KCBpcWNhbF90b25lX2lfYXZnKihjYXB0dXJlX3RpbWUtMSkgK2lxY2FsX3RvbmVfaSkvY2FwdHVyZV90aW1lOworCQkJCWlxY2FsX3RvbmVfcV9hdmc9KCBpcWNhbF90b25lX3FfYXZnKihjYXB0dXJlX3RpbWUtMSkgK2lxY2FsX3RvbmVfcSkvY2FwdHVyZV90aW1lOworCQkJfQorCQl9CisKKworCQlpcWNhbF9pbWFnZV9pID0gaXFjYWxfaW1hZ2VfaV9hdmc7CisJCWlxY2FsX2ltYWdlX3EgPSBpcWNhbF9pbWFnZV9xX2F2ZzsKKwkJaXFjYWxfdG9uZV9pID0gaXFjYWxfdG9uZV9pX2F2ZzsKKwkJaXFjYWxfdG9uZV9xID0gaXFjYWxfdG9uZV9xX2F2ZzsKKworCQkvLyBkLgorCQlyb3RfdG9uZV9pX2IgPSAoaXFjYWxfdG9uZV9pICogaXFjYWxfdG9uZV9pICsKKwkJCQkJCWlxY2FsX3RvbmVfcSAqIGlxY2FsX3RvbmVfcSkgLyAxMDI0OworCQlyb3RfdG9uZV9xX2IgPSAoaXFjYWxfdG9uZV9pICogaXFjYWxfdG9uZV9xICogKC0xKSArCisJCQkJCQlpcWNhbF90b25lX3EgKiBpcWNhbF90b25lX2kpIC8gMTAyNDsKKwkJcm90X2ltYWdlX2lfYiA9IChpcWNhbF9pbWFnZV9pICogaXFjYWxfdG9uZV9pIC0KKwkJCQkJCSBpcWNhbF9pbWFnZV9xICogaXFjYWxfdG9uZV9xKSAvIDEwMjQ7CisJCXJvdF9pbWFnZV9xX2IgPSAoaXFjYWxfaW1hZ2VfaSAqIGlxY2FsX3RvbmVfcSArCisJCQkJCQkgaXFjYWxfaW1hZ2VfcSAqIGlxY2FsX3RvbmVfaSkgLyAxMDI0OworCisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJvdF90b25lX2lfYiAgPSAlZFxuIiwgcm90X3RvbmVfaV9iKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJvdF90b25lX3FfYiAgPSAlZFxuIiwgcm90X3RvbmVfcV9iKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJvdF9pbWFnZV9pX2IgPSAlZFxuIiwgcm90X2ltYWdlX2lfYikpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByb3RfaW1hZ2VfcV9iID0gJWRcbiIsIHJvdF9pbWFnZV9xX2IpKTsKKworCQkvLyBmLgorCQlpZiAocm90X3RvbmVfaV9iID09IDApCisJCXsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfcnhfaXFfY2FsaWJyYXRpb25fbG9vcD4gRVJST1IgKioqKioqKlxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogcm90X3RvbmVfaV9iPTAgdG8gY2FsY3VsYXRlIEVQUyBhbmQgVEhFVEEgISFcbiIpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkJYnJlYWs7CisJCX0KKworCQlhXzIgPSAocm90X2ltYWdlX2lfYiAqIDMyNzY4KSAvIHJvdF90b25lX2lfYiAtCisJCQlwaHdfZGF0YS0+aXFfcnNkbF9nYWluX3R4X2QyOworCQliXzIgPSAocm90X2ltYWdlX3FfYiAqIDMyNzY4KSAvIHJvdF90b25lX2lfYiAtCisJCQlwaHdfZGF0YS0+aXFfcnNkbF9waGFzZV90eF9kMjsKKworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcV9yc2RsX2dhaW5fdHhfZDIgPSAlZFxuIiwgcGh3X2RhdGEtPmlxX3JzZGxfZ2Fpbl90eF9kMikpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcV9yc2RsX3BoYXNlX3R4X2QyPSAlZFxuIiwgcGh3X2RhdGEtPmlxX3JzZGxfcGhhc2VfdHhfZDIpKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKioqKiogRVBTSUxPTi8yID0gJWRcbiIsIGFfMikpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKioqKiBUSEVUQS8yICAgPSAlZFxuIiwgYl8yKSk7CisKKwkJX3Npbl9jb3MoYl8yLCAmc2luX2IsICZjb3NfYik7CisJCV9zaW5fY29zKGJfMioyLCAmc2luXzJiLCAmY29zXzJiKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogc2luKGIvMik9JWQsIGNvcyhiLzIpPSVkXG4iLCBzaW5fYiwgY29zX2IpKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogc2luKGIpPSVkLCBjb3MoYik9JWRcbiIsIHNpbl8yYiwgY29zXzJiKSk7CisKKwkJaWYgKGNvc18yYiA9PSAwKQorCQl7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3J4X2lxX2NhbGlicmF0aW9uX2xvb3A+IEVSUk9SICoqKioqKipcbiIpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIGNvcyhiKT0wICEhXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gMTI4MCAqIDMyNzY4ID0gNDE5NDMwNDAKKwkJdGVtcDEgPSAoNDE5NDMwNDAvY29zXzJiKSpjb3NfYjsKKworCQkvL3RlbXAyID0gKDQxOTQzMDQwL2Nvc18yYikqc2luX2IqKC0xKTsKKwkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJeworCQkJdGVtcDIgPSAoNDE5NDMwNDAvY29zXzJiKSpzaW5fYiooLTEpOworCQl9CisJCWVsc2UgLy8gMm5kLWN1dAorCQl7CisJCQl0ZW1wMiA9ICg0MTk0MzA0MCo0L2Nvc18yYikqc2luX2IqKC0xKTsKKwkJfQorCisJCXJ4X2NhbF9mbHRfYlswXSA9IF9mbG9vcih0ZW1wMS8oMzI3NjgrYV8yKSk7CisJCXJ4X2NhbF9mbHRfYlsxXSA9IF9mbG9vcih0ZW1wMi8oMzI3NjgtYV8yKSk7CisJCXJ4X2NhbF9mbHRfYlsyXSA9IF9mbG9vcih0ZW1wMi8oMzI3NjgrYV8yKSk7CisJCXJ4X2NhbF9mbHRfYlszXSA9IF9mbG9vcih0ZW1wMS8oMzI3NjgtYV8yKSk7CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcnhfY2FsX2ZsdF9iWzBdID0gJWRcbiIsIHJ4X2NhbF9mbHRfYlswXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxfZmx0X2JbMV0gPSAlZFxuIiwgcnhfY2FsX2ZsdF9iWzFdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9mbHRfYlsyXSA9ICVkXG4iLCByeF9jYWxfZmx0X2JbMl0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsX2ZsdF9iWzNdID0gJWRcbiIsIHJ4X2NhbF9mbHRfYlszXSkpOworCisJCXJ4X2NhbFswXSA9IHJ4X2NhbF9mbHRfYlswXSAtIDEyODsKKwkJcnhfY2FsWzFdID0gcnhfY2FsX2ZsdF9iWzFdOworCQlyeF9jYWxbMl0gPSByeF9jYWxfZmx0X2JbMl07CisJCXJ4X2NhbFszXSA9IHJ4X2NhbF9mbHRfYlszXSAtIDEyODsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcnhfY2FsWzBdID0gJWRcbiIsIHJ4X2NhbFswXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxbMV0gPSAlZFxuIiwgcnhfY2FsWzFdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbFsyXSA9ICVkXG4iLCByeF9jYWxbMl0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsWzNdID0gJWRcbiIsIHJ4X2NhbFszXSkpOworCisJCS8vIGUuCisJCXB3cl90b25lID0gKGlxY2FsX3RvbmVfaSppcWNhbF90b25lX2kgKyBpcWNhbF90b25lX3EqaXFjYWxfdG9uZV9xKTsKKwkJcHdyX2ltYWdlID0gKGlxY2FsX2ltYWdlX2kqaXFjYWxfaW1hZ2VfaSArIGlxY2FsX2ltYWdlX3EqaXFjYWxfaW1hZ2VfcSkqZmFjdG9yOworCisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHB3cl90b25lICA9ICVkXG4iLCBwd3JfdG9uZSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBwd3JfaW1hZ2UgID0gJWRcbiIsIHB3cl9pbWFnZSkpOworCisJCWlmIChwd3JfdG9uZSA+IHB3cl9pbWFnZSkKKwkJeworCQkJdmVyaWZ5X2NvdW50Kys7CisKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfcnhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqKioqKlxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVkVSSUZZIE9LICMgJWQgISFcbiIsIHZlcmlmeV9jb3VudCkpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisKKwkJCWlmICh2ZXJpZnlfY291bnQgPiAyKQorCQkJeworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfcnhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogUlhfSVFfQ0FMSUJSQVRJT04gT0sgISFcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQljb250aW51ZTsKKwkJfQorCQkvLyBnLgorCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4NTQgPSAweCUwOFhcbiIsIHZhbCkpOworCisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCXsKKwkJCXJ4X2NhbF9yZWdbMF0gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMDBGMDAwKSA+PiAxMik7CisJCQlyeF9jYWxfcmVnWzFdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDAwMEYwMCkgPj4gIDgpOworCQkJcnhfY2FsX3JlZ1syXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDAwRjApID4+ICA0KTsKKwkJCXJ4X2NhbF9yZWdbM10gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMDAwMDBGKSk7CisJCX0KKwkJZWxzZSAvLyAybmQtY3V0CisJCXsKKwkJCXJ4X2NhbF9yZWdbMF0gPSBfczVfdG9fczMyKCh2YWwgJiAweEY4MDAwMDAwKSA+PiAyNyk7CisJCQlyeF9jYWxfcmVnWzFdID0gX3M2X3RvX3MzMigodmFsICYgMHgwN0UwMDAwMCkgPj4gMjEpOworCQkJcnhfY2FsX3JlZ1syXSA9IF9zNl90b19zMzIoKHZhbCAmIDB4MDAxRjgwMDApID4+IDE1KTsKKwkJCXJ4X2NhbF9yZWdbM10gPSBfczVfdG9fczMyKCh2YWwgJiAweDAwMDA3QzAwKSA+PiAxMCk7CisJCX0KKworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByeF9jYWxfcmVnWzBdID0gJWRcbiIsIHJ4X2NhbF9yZWdbMF0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsX3JlZ1sxXSA9ICVkXG4iLCByeF9jYWxfcmVnWzFdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9yZWdbMl0gPSAlZFxuIiwgcnhfY2FsX3JlZ1syXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxfcmVnWzNdID0gJWRcbiIsIHJ4X2NhbF9yZWdbM10pKTsKKworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQlpZiAoKChyeF9jYWxfcmVnWzBdPT03KSB8fCAocnhfY2FsX3JlZ1swXT09KC04KSkpICYmCisJCQkJKChyeF9jYWxfcmVnWzNdPT03KSB8fCAocnhfY2FsX3JlZ1szXT09KC04KSkpKQorCQkJeworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfcnhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogUlhfSVFfQ0FMSUJSQVRJT04gU0FUVUFUSU9OICEhXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQllbHNlIC8vIDJuZC1jdXQKKwkJeworCQkJaWYgKCgocnhfY2FsX3JlZ1swXT09MzEpIHx8IChyeF9jYWxfcmVnWzBdPT0oLTMyKSkpICYmCisJCQkJKChyeF9jYWxfcmVnWzNdPT0zMSkgfHwgKHJ4X2NhbF9yZWdbM109PSgtMzIpKSkpCisJCQl7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKipcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBSWF9JUV9DQUxJQlJBVElPTiBTQVRVQVRJT04gISFcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJcnhfY2FsWzBdID0gcnhfY2FsWzBdICsgcnhfY2FsX3JlZ1swXTsKKwkJcnhfY2FsWzFdID0gcnhfY2FsWzFdICsgcnhfY2FsX3JlZ1sxXTsKKwkJcnhfY2FsWzJdID0gcnhfY2FsWzJdICsgcnhfY2FsX3JlZ1syXTsKKwkJcnhfY2FsWzNdID0gcnhfY2FsWzNdICsgcnhfY2FsX3JlZ1szXTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogYXBwbHkgcnhfY2FsWzBdID0gJWRcbiIsIHJ4X2NhbFswXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICBhcHBseSByeF9jYWxbMV0gPSAlZFxuIiwgcnhfY2FsWzFdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIGFwcGx5IHJ4X2NhbFsyXSA9ICVkXG4iLCByeF9jYWxbMl0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgYXBwbHkgcnhfY2FsWzNdID0gJWRcbiIsIHJ4X2NhbFszXSkpOworCisJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKKwkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJeworCQkJdmFsICY9IDB4MDAwMEZGRkY7CisJCQl2YWwgfD0gKChfczMyX3RvX3M0KHJ4X2NhbFswXSkgPDwgMTIpfAorCQkJCQkoX3MzMl90b19zNChyeF9jYWxbMV0pIDw8ICA4KXwKKwkJCQkJKF9zMzJfdG9fczQocnhfY2FsWzJdKSA8PCAgNCl8CisJCQkJCShfczMyX3RvX3M0KHJ4X2NhbFszXSkpKTsKKwkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOworCQl9CisJCWVsc2UgLy8gMm5kLWN1dAorCQl7CisJCQl2YWwgJj0gMHgwMDAwMDNGRjsKKwkJCXZhbCB8PSAoKF9zMzJfdG9fczUocnhfY2FsWzBdKSA8PCAyNyl8CisJCQkJCShfczMyX3RvX3M2KHJ4X2NhbFsxXSkgPDwgMjEpfAorCQkJCQkoX3MzMl90b19zNihyeF9jYWxbMl0pIDw8IDE1KXwKKwkJCQkJKF9zMzJfdG9fczUocnhfY2FsWzNdKSA8PCAxMCkpOworCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIHZhbCk7CisKKwkJCWlmKCBsb29wID09IDMgKQorCQkJcmV0dXJuIDA7CisJCX0KKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogQ0FMSUJfREFUQSA9IDB4JTA4WFxuIiwgdmFsKSk7CisKKwkJbG9vcC0tOworCX0KKworCXJldHVybiAxOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit2b2lkIF9yeF9pcV9jYWxpYnJhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCit7CisvLyBmaWdvIDIwMDUwNTIzIG1hcmtlZCB0aHNpIGZsYWcgZm9yIGNhbid0IGNvbXBpbGUgZm9yIHJlbGVzYXNlCisjaWZkZWYgX0RFQlVHCisJczMyICAgICByeF9jYWxfcmVnWzRdOworCXUzMiAgICAgdmFsOworI2VuZGlmCisKKwl1OCAgICAgIHJlc3VsdDsKKworCVBIWV9ERUJVRygoIltDQUxdIC0+IFs1XV9yeF9pcV9jYWxpYnJhdGlvbigpXG4iKSk7CisvLyBhLiBTZXQgUkZJQyB0byAiUlggY2FsaWJyYXRpb24gbW9kZSIKKwkvLzsgLS0tLS0gQ2FsaWJyYXRpb24gKDcpLiBSWCBwYXRoIElRIGltYmFsYW5jZSBjYWxpYnJhdGlvbiBsb29wCisJLy8JMHgwMSAweEZGQkZDMiAgOyAzRkVGRiAgOyBDYWxpYnJhdGlvbiAoN2EpLiBlbmFibGUgUlggSVEgY2FsaWJyYXRpb24gbG9vcCBjaXJjdWl0cworCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMSwgKDE8PDI0KXwweEVGQkZDMik7CisJLy8JMHgwQiAweDFBMDFENiAgOyAwNjgxNyAgOyBDYWxpYnJhdGlvbiAoN2IpLiBlbmFibGUgUlggSS9RIGNhbCBsb29wIFNXMSBjaXJjdWl0CisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAxMSwgKDExPDwyNCl8MHgxQTA1RDYpOworCS8vMHgwNSAweDI0ODQ4QSAgOyAwOTIxMiAgOyBDYWxpYnJhdGlvbiAoN2MpLiBzZXR0aW5nIFRYLVZHQSBnYWluIChUWEdDSCkgdG8gMiAtLT4gdG8gYmUgb3B0aW1pemVkCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA1LCAoNTw8MjQpfCBwaHdfZGF0YS0+dHh2Z2Ffc2V0dGluZ19mb3JfY2FsKTsKKwkvLzB4MDYgMHgwNjg0MEMgIDsgMDFBMTAgIDsgQ2FsaWJyYXRpb24gKDdkKS4gUlhHQ0g9MDA7IFJYR0NMPTAxMCAwMDAgKFJYVkdBKSAtLT4gdG8gYmUgb3B0aW1pemVkCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA2LCAoNjw8MjQpfDB4MDY4MzRDKTsKKwkvLzB4MDAgMHhGRkYxQzAgIDsgM0Y3QzcgIDsgQ2FsaWJyYXRpb24gKDdlKS4gdHVybiBvbiBJUSBpbWJhbGFuY2UvVGVzdCBtb2RlCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAwLCAoMDw8MjQpfDB4RkZGMUMwKTsKKworCS8vICA7IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDdmKS4gU2VuZCB0ZXN0IHBhdHRlcm4KKwkvLwk7IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDdnKS4gU2VhcmNoIFJYR0NMIG9wdGltYWwgdmFsdWUKKwkvLwk7IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDdoKS4gQ2FjdWxhdGUgUlgtcGF0aCBJUSBpbWJhbGFuY2UgYW5kIHNldHRpbmcgUlggcGF0aCBJUSBjb21wZW5zYXRpb24gdGFibGUKKworCXJlc3VsdCA9IF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQocGh3X2RhdGEsIDEyNTg5LCBmcmVxdWVuY3kpOworCisJaWYgKHJlc3VsdCA+IDApCisJeworCQlfcmVzZXRfcnhfY2FsKHBod19kYXRhKTsKKwkJcmVzdWx0ID0gX3J4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgNzk0MywgZnJlcXVlbmN5KTsKKworCQlpZiAocmVzdWx0ID4gMCkKKwkJeworCQkJX3Jlc2V0X3J4X2NhbChwaHdfZGF0YSk7CisJCQlyZXN1bHQgPSBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCA1MDExLCBmcmVxdWVuY3kpOworCisJCQlpZiAocmVzdWx0ID4gMCkKKwkJCXsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3J4X2lxX2NhbGlicmF0aW9uPiAqKioqKioqKioqKioqKlxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFJYX0lRX0NBTElCUkFUSU9OIEZBSUxVUkUgISFcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkJCV9yZXNldF9yeF9jYWwocGh3X2RhdGEpOworCQkJfQorCQl9CisJfQorCisjaWZkZWYgX0RFQlVHCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOworCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4NTQgPSAweCUwOFhcbiIsIHZhbCkpOworCisJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwl7CisJCXJ4X2NhbF9yZWdbMF0gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMDBGMDAwKSA+PiAxMik7CisJCXJ4X2NhbF9yZWdbMV0gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMDAwRjAwKSA+PiAgOCk7CisJCXJ4X2NhbF9yZWdbMl0gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMDAwMEYwKSA+PiAgNCk7CisJCXJ4X2NhbF9yZWdbM10gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMDAwMDBGKSk7CisJfQorCWVsc2UgLy8gMm5kLWN1dAorCXsKKwkJcnhfY2FsX3JlZ1swXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4RjgwMDAwMDApID4+IDI3KTsKKwkJcnhfY2FsX3JlZ1sxXSA9IF9zNl90b19zMzIoKHZhbCAmIDB4MDdFMDAwMDApID4+IDIxKTsKKwkJcnhfY2FsX3JlZ1syXSA9IF9zNl90b19zMzIoKHZhbCAmIDB4MDAxRjgwMDApID4+IDE1KTsKKwkJcnhfY2FsX3JlZ1szXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4MDAwMDdDMDApID4+IDEwKTsKKwl9CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByeF9jYWxfcmVnWzBdID0gJWRcbiIsIHJ4X2NhbF9yZWdbMF0pKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxfcmVnWzFdID0gJWRcbiIsIHJ4X2NhbF9yZWdbMV0pKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxfcmVnWzJdID0gJWRcbiIsIHJ4X2NhbF9yZWdbMl0pKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxfcmVnWzNdID0gJWRcbiIsIHJ4X2NhbF9yZWdbM10pKTsKKyNlbmRpZgorCit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordm9pZCBwaHlfY2FsaWJyYXRpb25fd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhLCB1MzIgZnJlcXVlbmN5KQoreworCXUzMiAgICAgcmVnX21vZGVfY3RybDsKKwl1MzIgICAgIGlxX2FscGhhOworCisJUEhZX0RFQlVHKCgiW0NBTF0gLT4gcGh5X2NhbGlicmF0aW9uX3dpbmJvbmQoKVxuIikpOworCisJLy8gMjAwNDA3MDEgMS4xLjI1LjEwMDAga2V2aW4KKwlod19nZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHg4MCwgJm1hY19jdHJsKTsKKwlod19nZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHhFNCwgJnJmX2N0cmwpOworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAmaXFfYWxwaGEpOworCisKKworCV9yeGFkY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQocGh3X2RhdGEsIGZyZXF1ZW5jeSk7CisJLy9fdHhpZGFjX2RjX29mZnNldF9jYW5jZWxsYXRpb25fd2luYm9uZChwaHdfZGF0YSk7CisJLy9fdHhxZGFjX2RjX29mZnNldF9jYWNlbGxhdGlvbl93aW5ib25kKHBod19kYXRhKTsKKworCV90eF9pcV9jYWxpYnJhdGlvbl93aW5ib25kKHBod19kYXRhKTsKKwlfcnhfaXFfY2FsaWJyYXRpb25fd2luYm9uZChwaHdfZGF0YSwgZnJlcXVlbmN5KTsKKworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKTsKKwlyZWdfbW9kZV9jdHJsICY9IH4oTUFTS19JUUNBTF9UT05FX1NFTHxNQVNLX0lRQ0FMX01PREV8TUFTS19DQUxJQl9TVEFSVCk7IC8vIHNldCB3aGVuIGZpbmlzaAorCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCisJLy8gaS4gU2V0IFJGSUMgdG8gIk5vcm1hbCBtb2RlIgorCWh3X3NldF9jeHhfcmVnKHBod19kYXRhLCAweDgwLCBtYWNfY3RybCk7CisJaHdfc2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4RTQsIHJmX2N0cmwpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCBpcV9hbHBoYSk7CisKKworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJcGh5X2luaXRfcmYocGh3X2RhdGEpOworCit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2b2lkIHBoeV9zZXRfcmZfZGF0YSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUzMiBpbmRleCwgIHUzMiB2YWx1ZSApCit7CisgICB1MzIgbHRtcD0wOworCisgICAgc3dpdGNoKCBwSHdEYXRhLT5waHlfdHlwZSApCisJeworCQljYXNlIFJGX01BWElNXzI4MjU6CisJCWNhc2UgUkZfTUFYSU1fVjE6IC8vIDExZyBXaW5ib25kIDJuZCBCQih3aXRoIFBoeSBib2FyZCAodjEpICsgTWF4aW0gMzMxKQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB2YWx1ZSwgMTggKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfTUFYSU1fMjgyNzoKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggdmFsdWUsIDE4ICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX01BWElNXzI4Mjg6CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAxOCApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9NQVhJTV8yODI5OgorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB2YWx1ZSwgMTggKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfQUlST0hBXzIyMzA6CisJCWNhc2UgUkZfQUlST0hBXzIyMzBTOiAvLyAyMDA2MDQyMCBBZGQgdGhpcworCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyMCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB2YWx1ZSwgMjAgKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfQUlST0hBXzcyMzA6CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8ICh2YWx1ZSYweGZmZmZmZik7CisJCQlicmVhazsKKworCQljYXNlIFJGX1dCXzI0MjoKKwkJY2FzZSBSRl9XQl8yNDJfMTogLy8gMjAwNjA2MTkuNSBBZGQKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggdmFsdWUsIDI0ICk7CisJCQlicmVhazsKKwl9CisKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7Cit9CisKKy8vIDIwMDYwNzE3IG1vZGlmeSBhcyBCcnVjZSdzIG1haWwKK3Vuc2lnbmVkIGNoYXIgYWRqdXN0X1RYVkdBX2Zvcl9pcV9tYWcoaHdfZGF0YV90ICpwaHdfZGF0YSkKK3sKKwlpbnQgaW5pdF90eHZnYSA9IDA7CisJdTMyICAgICByZWdfbW9kZV9jdHJsOworCXUzMiAgICAgdmFsOworCXMzMiAgICAgaXFjYWxfdG9uZV9pMDsKKwlzMzIgICAgIGlxY2FsX3RvbmVfcTA7CisJdTMyICAgICBzcXN1bTsKKwlzMzIgICAgIGlxX21hZ18wX3R4OworCXU4CQlyZWdfc3RhdGU7CisJaW50CQljdXJyZW50X3R4dmdhOworCisKKwlyZWdfc3RhdGUgPSAwOworCWZvciggaW5pdF90eHZnYT0wOyBpbml0X3R4dmdhPDEwOyBpbml0X3R4dmdhKyspCisJeworCQljdXJyZW50X3R4dmdhID0gKCAweDI0QzQwQXwoaW5pdF90eHZnYTw8NikgKTsKKwkJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA1LCAoKDU8PDI0KXxjdXJyZW50X3R4dmdhKSApOworCQlwaHdfZGF0YS0+dHh2Z2Ffc2V0dGluZ19mb3JfY2FsID0gY3VycmVudF90eHZnYTsKKworCQkvL3BhX3N0YWxsX2V4ZWN1dGlvbigzMDAwMCk7Ly9TbGVlcCgzMCk7CisJCU9TX1NMRUVQKDMwMDAwKTsgLy8gMjAwNjA2MTIuMS5hCisKKwkJaWYoICFod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpICkgLy8gMjAwNjA3MTguMSBtb2RpZnkKKwkJCXJldHVybiBGQUxTRTsKKworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisKKwkJLy8gYS4gU2V0IGlxY2FsX21vZGVbMTowXSB0byAweDIgYW5kIHNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MSB0bworCQkvLyAgICBlbmFibGUgIklRIGFsaWJyYXRpb24gTW9kZSBJSSIKKwkJcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfVE9ORV9TRUx8TUFTS19JUUNBTF9NT0RFKTsKKwkJcmVnX21vZGVfY3RybCAmPSB+TUFTS19JUUNBTF9NT0RFOworCQlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDB4MDIpOworCQlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDB4MDJ8Mjw8Mik7CisJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKworCQkvL3BhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisJCU9TX1NMRUVQKDEpOyAvLyAyMDA2MDYxMi4xLmEKKworCQkvL3BhX3N0YWxsX2V4ZWN1dGlvbigzMDApOy8vU2xlZXAoMzApOworCQlPU19TTEVFUCgzMDApOyAvLyAyMDA2MDYxMi4xLmEKKworCQkvLyBiLgorCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0NBTElCX1JFQUQxLCAmdmFsKTsKKworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBDQUxJQl9SRUFEMSA9IDB4JTA4WFxuIiwgdmFsKSk7CisJCS8vcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKwkJLy9wYV9zdGFsbF9leGVjdXRpb24oMzAwKTsvL1NsZWVwKDMwKTsKKwkJT1NfU0xFRVAoMzAwKTsgLy8gMjAwNjA2MTIuMS5hCisKKwkJaXFjYWxfdG9uZV9pMCA9IF9zMTNfdG9fczMyKHZhbCAmIDB4MDAwMDFGRkYpOworCQlpcWNhbF90b25lX3EwID0gX3MxM190b19zMzIoKHZhbCAmIDB4MDNGRkUwMDApID4+IDEzKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogaXFjYWxfdG9uZV9pMD0lZCwgaXFjYWxfdG9uZV9xMD0lZFxuIiwKKwkJCQkgICBpcWNhbF90b25lX2kwLCBpcWNhbF90b25lX3EwKSk7CisKKwkJc3FzdW0gPSBpcWNhbF90b25lX2kwKmlxY2FsX3RvbmVfaTAgKyBpcWNhbF90b25lX3EwKmlxY2FsX3RvbmVfcTA7CisJCWlxX21hZ18wX3R4ID0gKHMzMikgX3NxcnQoc3FzdW0pOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBhdXRvX2FkanVzdF90eHZnYV9mb3JfaXFfbWFnXzBfdHg9JWRcbiIsIGlxX21hZ18wX3R4KSk7CisKKwkJaWYoIGlxX21hZ18wX3R4Pj03MDAgJiYgaXFfbWFnXzBfdHg8PTE3NTAgKQorCQkJYnJlYWs7CisJCWVsc2UgaWYoaXFfbWFnXzBfdHggPiAxNzUwKQorCQl7CisJCQlpbml0X3R4dmdhPS0yOworCQkJY29udGludWU7CisJCX0KKwkJZWxzZQorCQkJY29udGludWU7CisKKwl9CisKKwlpZiggaXFfbWFnXzBfdHg+PTcwMCAmJiBpcV9tYWdfMF90eDw9MTc1MCApCisJCXJldHVybiBUUlVFOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOworfQorCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcGh5X2NhbGlicmF0aW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmE2NWQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcGh5X2NhbGlicmF0aW9uLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8vIDIwMDMxMjI5IFR1cmJvIGFkZAorI2RlZmluZSBSRUdfQUdDX0NUUkwxICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFJFR19BR0NfQ1RSTDIgICAgICAgICAgICAgICAweDEwMDQKKyNkZWZpbmUgUkVHX0FHQ19DVFJMMyAgICAgICAgICAgICAgIDB4MTAwOAorI2RlZmluZSBSRUdfQUdDX0NUUkw0ICAgICAgICAgICAgICAgMHgxMDBDCisjZGVmaW5lIFJFR19BR0NfQ1RSTDUgICAgICAgICAgICAgICAweDEwMTAKKyNkZWZpbmUgUkVHX0FHQ19DVFJMNiAgICAgICAgICAgICAgIDB4MTAxNAorI2RlZmluZSBSRUdfQUdDX0NUUkw3ICAgICAgICAgICAgICAgMHgxMDE4CisjZGVmaW5lIFJFR19BR0NfQ1RSTDggICAgICAgICAgICAgICAweDEwMUMKKyNkZWZpbmUgUkVHX0FHQ19DVFJMOSAgICAgICAgICAgICAgIDB4MTAyMAorI2RlZmluZSBSRUdfQUdDX0NUUkwxMCAgICAgICAgICAgICAgMHgxMDI0CisjZGVmaW5lIFJFR19DQ0FfQ1RSTCAgICAgICAgICAgICAgICAweDEwMjgKKyNkZWZpbmUgUkVHX0FfQUNRX0NUUkwgICAgICAgICAgICAgIDB4MTAyQworI2RlZmluZSBSRUdfQl9BQ1FfQ1RSTCAgICAgICAgICAgICAgMHgxMDMwCisjZGVmaW5lIFJFR19BX1RYUlhfQ1RSTCAgICAgICAgICAgICAweDEwMzQKKyNkZWZpbmUgUkVHX0JfVFhSWF9DVFJMICAgICAgICAgICAgIDB4MTAzOAorI2RlZmluZSBSRUdfQV9UWF9DT0VGMyAgICAgICAgICAgICAgMHgxMDNDCisjZGVmaW5lIFJFR19BX1RYX0NPRUYyICAgICAgICAgICAgICAweDEwNDAKKyNkZWZpbmUgUkVHX0FfVFhfQ09FRjEgICAgICAgICAgICAgIDB4MTA0NAorI2RlZmluZSBSRUdfQl9UWF9DT0VGMiAgICAgICAgICAgICAgMHgxMDQ4CisjZGVmaW5lIFJFR19CX1RYX0NPRUYxICAgICAgICAgICAgICAweDEwNEMKKyNkZWZpbmUgUkVHX01PREVfQ1RSTCAgICAgICAgICAgICAgIDB4MTA1MAorI2RlZmluZSBSRUdfQ0FMSUJfREFUQSAgICAgICAgICAgICAgMHgxMDU0CisjZGVmaW5lIFJFR19JUV9BTFBIQSAgICAgICAgICAgICAgICAweDEwNTgKKyNkZWZpbmUgUkVHX0RDX0NBTkNFTCAgICAgICAgICAgICAgIDB4MTA1QworI2RlZmluZSBSRUdfV1RPX1JFQUQgICAgICAgICAgICAgICAgMHgxMDYwCisjZGVmaW5lIFJFR19PRkZTRVRfUkVBRCAgICAgICAgICAgICAweDEwNjQKKyNkZWZpbmUgUkVHX0NBTElCX1JFQUQxICAgICAgICAgICAgIDB4MTA2OAorI2RlZmluZSBSRUdfQ0FMSUJfUkVBRDIgICAgICAgICAgICAgMHgxMDZDCisjZGVmaW5lIFJFR19BX0ZSRVFfRVNUICAgICAgICAgICAgICAweDEwNzAKKworCisKKworLy8gIDIwMDMxMTAxIFR1cmJvIGFkZAorI2RlZmluZSBNQVNLX0FNRVJfT0ZGX1JFRyAgICAgICAgICBCSVQoMzEpCisKKyNkZWZpbmUgTUFTS19CTUVSX09GRl9SRUcgICAgICAgICAgQklUKDMxKQorCisjZGVmaW5lIE1BU0tfTE5BX0ZJWF9HQUlOICAgICAgICAgIChCSVQoMyl8QklUKDQpKQorI2RlZmluZSBNQVNLX0FHQ19GSVggICAgICAgICAgICAgICBCSVQoMSkKKworI2RlZmluZSBNQVNLX0FHQ19GSVhfR0FJTiAgICAgICAgICAweEZGMDAKKworI2RlZmluZSBNQVNLX0FEQ19EQ19DQUxfU1RSICAgICAgICBCSVQoMTApCisjZGVmaW5lIE1BU0tfQ0FMSUJfU1RBUlQgICAgICAgICAgIEJJVCg0KQorI2RlZmluZSBNQVNLX0lRQ0FMX1RPTkVfU0VMICAgICAgICAoQklUKDMpfEJJVCgyKSkKKyNkZWZpbmUgTUFTS19JUUNBTF9NT0RFICAgICAgICAgICAgKEJJVCgxKXxCSVQoMCkpCisKKyNkZWZpbmUgTUFTS19UWF9DQUxfMCAgICAgICAgICAgICAgMHhGMDAwMDAwMAorI2RlZmluZSBUWF9DQUxfMF9TSElGVCAgICAgICAgICAgICAyOAorI2RlZmluZSBNQVNLX1RYX0NBTF8xICAgICAgICAgICAgICAweDBGMDAwMDAwCisjZGVmaW5lIFRYX0NBTF8xX1NISUZUICAgICAgICAgICAgIDI0CisjZGVmaW5lIE1BU0tfVFhfQ0FMXzIgICAgICAgICAgICAgIDB4MDBGMDAwMDAKKyNkZWZpbmUgVFhfQ0FMXzJfU0hJRlQgICAgICAgICAgICAgMjAKKyNkZWZpbmUgTUFTS19UWF9DQUxfMyAgICAgICAgICAgICAgMHgwMDBGMDAwMAorI2RlZmluZSBUWF9DQUxfM19TSElGVCAgICAgICAgICAgICAxNgorI2RlZmluZSBNQVNLX1JYX0NBTF8wICAgICAgICAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIFJYX0NBTF8wX1NISUZUICAgICAgICAgICAgIDEyCisjZGVmaW5lIE1BU0tfUlhfQ0FMXzEgICAgICAgICAgICAgIDB4MDAwMDBGMDAKKyNkZWZpbmUgUlhfQ0FMXzFfU0hJRlQgICAgICAgICAgICAgOAorI2RlZmluZSBNQVNLX1JYX0NBTF8yICAgICAgICAgICAgICAweDAwMDAwMEYwCisjZGVmaW5lIFJYX0NBTF8yX1NISUZUICAgICAgICAgICAgIDQKKyNkZWZpbmUgTUFTS19SWF9DQUxfMyAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSBSWF9DQUxfM19TSElGVCAgICAgICAgICAgICAwCisKKyNkZWZpbmUgTUFTS19DQU5DRUxfRENfSSAgICAgICAgICAgMHgzRTAKKyNkZWZpbmUgQ0FOQ0VMX0RDX0lfU0hJRlQgICAgICAgICAgNQorI2RlZmluZSBNQVNLX0NBTkNFTF9EQ19RICAgICAgICAgICAweDAxRgorI2RlZmluZSBDQU5DRUxfRENfUV9TSElGVCAgICAgICAgICAwCisKKy8vIExBMjAwNDAyMTAga2V2aW4KKy8vI2RlZmluZSBNQVNLX0FEQ19EQ19DQUxfSSh4KSAgICAgICAoKCh4KSYweDFGRTAwKT4+OSkKKy8vI2RlZmluZSBNQVNLX0FEQ19EQ19DQUxfUSh4KSAgICAgICAoKHgpJjB4MUZGKQorI2RlZmluZSBNQVNLX0FEQ19EQ19DQUxfSSh4KSAgICAgICAoKCh4KSYweDAwMDNGRTAwKT4+OSkKKyNkZWZpbmUgTUFTS19BRENfRENfQ0FMX1EoeCkgICAgICAgKCh4KSYweDAwMDAwMUZGKQorCisvLyBMQTIwMDQwMjEwIGtldmluIChUdXJibyBoYXMgd3JvbmcgZGVmaW5pdGlvbikKKy8vI2RlZmluZSBNQVNLX0lRQ0FMX1RPTkVfSSAgICAgICAgICAweDdGRkMwMDAKKy8vI2RlZmluZSBTSElGVF9JUUNBTF9UT05FX0koeCkgICAgICAoKHgpPj4xMykKKy8vI2RlZmluZSBNQVNLX0lRQ0FMX1RPTkVfUSAgICAgICAgICAweDFGRkYKKy8vI2RlZmluZSBTSElGVF9JUUNBTF9UT05FX1EoeCkgICAgICAoKHgpPj4wKQorI2RlZmluZSBNQVNLX0lRQ0FMX1RPTkVfSSAgICAgICAgICAweDAwMDAxRkZGCisjZGVmaW5lIFNISUZUX0lRQ0FMX1RPTkVfSSh4KSAgICAgICgoeCk+PjApCisjZGVmaW5lIE1BU0tfSVFDQUxfVE9ORV9RICAgICAgICAgIDB4MDNGRkUwMDAKKyNkZWZpbmUgU0hJRlRfSVFDQUxfVE9ORV9RKHgpICAgICAgKCh4KT4+MTMpCisKKy8vIExBMjAwNDAyMTAga2V2aW4gKFR1cmJvIGhhcyB3cm9uZyBkZWZpbml0aW9uKQorLy8jZGVmaW5lIE1BU0tfSVFDQUxfSU1BR0VfSSAgICAgICAgIDB4N0ZGQzAwMAorLy8jZGVmaW5lIFNISUZUX0lRQ0FMX0lNQUdFX0koeCkgICAgICgoeCk+PjEzKQorLy8jZGVmaW5lIE1BU0tfSVFDQUxfSU1BR0VfUSAgICAgICAgIDB4MUZGRgorLy8jZGVmaW5lIFNISUZUX0lRQ0FMX0lNQUdFX1EoeCkgICAgICgoeCk+PjApCisKKy8vI2RlZmluZSBNQVNLX0lRQ0FMX0lNQUdFX0kgICAgICAgICAweDAwMDAxRkZGCisvLyNkZWZpbmUgU0hJRlRfSVFDQUxfSU1BR0VfSSh4KSAgICAgKCh4KT4+MCkKKy8vI2RlZmluZSBNQVNLX0lRQ0FMX0lNQUdFX1EgICAgICAgICAweDAzRkZFMDAwCisvLyNkZWZpbmUgU0hJRlRfSVFDQUxfSU1BR0VfUSh4KSAgICAgKCh4KT4+MTMpCisKK3ZvaWQgcGh5X3NldF9yZl9kYXRhKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIGluZGV4LCAgdTMyIHZhbHVlICk7CisjZGVmaW5lIHBoeV9pbml0X3JmKCBfQSApCS8vUkZTeW50aGVzaXplcl9pbml0aWFsKCBfQSApCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcmVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3NWM3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCkBAIC0wLDAgKzEsMjY4MyBAQAorI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIE9yaWdpbmFsIFBoeS5oCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorOyBGb3IgTUFYSU0yODI1LzYvNyBWZXIuIDMzMSBvciBtb3JlCis7IEVkaXRlZCBieSBUaWdlciwgU2VwLTE3LTIwMDMKKzsgcmV2aXNlZCBieSBCZW4sIFNlcC0xOC0yMDAzCisKKzB4MDAgMHgwMDBhMgorMHgwMSAweDIxY2MwCis7MHgwMiAweDEzODAyCisweDAyIDB4MTM4M2EKKworO2NoYW5uZTEgMDEgOyAweDAzIDB4MzAxNDIgOyAweDA0IDB4MGIzMzM7Cis7Y2hhbm5lMSAwMiA7MHgwMyAweDMyMTQxIDsweDA0IDB4MDg0NDQ7Cis7Y2hhbm5lMSAwMyA7MHgwMyAweDMyMTQzIDsweDA0IDB4MGFlZWU7Cis7Y2hhbm5lMSAwNCA7MHgwMyAweDMyMTQyIDsweDA0IDB4MGIzMzM7Cis7Y2hhbm5lMSAwNSA7MHgwMyAweDMxMTQxIDsweDA0IDB4MDg0NDQ7Cis7Y2hhbm5lMSAwNiA7CisweDAzIDB4MzExNDM7CisweDA0IDB4MGFlZWU7Cis7Y2hhbm5lMSAwNyA7MHgwMyAweDMxMTQyIDsweDA0IDB4MGIzMzM7Cis7Y2hhbm5lMSAwOCA7MHgwMyAweDMzMTQxIDsweDA0IDB4MDg0NDQ7Cis7Y2hhbm5lMSAwOSA7MHgwMyAweDMzMTQzIDsweDA0IDB4MGFlZWU7Cis7Y2hhbm5lMSAxMCA7MHgwMyAweDMzMTQyIDsweDA0IDB4MGIzMzM7Cis7Y2hhbm5lMSAxMSA7MHgwMyAweDMwOTQxIDsweDA0IDB4MDg0NDQ7Cis7Y2hhbm5lMSAxMiA7MHgwMyAweDMwOTQzIDsweDA0IDB4MGFlZWU7Cis7Y2hhbm5lMSAxMyA7MHgwMyAweDMwOTQyIDsweDA0IDB4MGIzMzM7CisKKzB4MDUgMHgyODk4NgorMHgwNiAweDE4MDA4CisweDA3IDB4Mzg0MDAKKzB4MDggMHgwNTEwMDsgMTAwIEh6IERDCis7MHgwOCAweDA1OTAwOyAzMCBLSHogREMKKzB4MDkgMHgyNGYwOAorMHgwYSAweDE3ZTAwLCAweDE3ZWEwCisweDBiIDB4MzdkODAKKzB4MGMgMHgwYzkwMCAvLyAweDBjYTAwIChsYWdlciBwb3dlciA5ZGIgdGhhbiAweDBjMDAwKSwgMHgwYzAwMAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBNQVgyODI1IChwdXJlIGIvZykKK3UzMiBtYXgyODI1X3JmX2RhdGFbXSA9Cit7CisgICAgKDB4MDA8PDE4KXwweDAwMGEyLAorICAgICgweDAxPDwxOCl8MHgyMWNjMCwKKyAgICAoMHgwMjw8MTgpfDB4MTM4MDYsCisgICAgKDB4MDM8PDE4KXwweDMwMTQyLAorICAgICgweDA0PDwxOCl8MHgwYjMzMywKKyAgICAoMHgwNTw8MTgpfDB4Mjg5QTYsCisgICAgKDB4MDY8PDE4KXwweDE4MDA4LAorICAgICgweDA3PDwxOCl8MHgzODAwMCwKKyAgICAoMHgwODw8MTgpfDB4MDUxMDAsCisgICAgKDB4MDk8PDE4KXwweDI0ZjA4LAorICAgICgweDBBPDwxOCl8MHgxNDAwMCwKKyAgICAoMHgwQjw8MTgpfDB4MzdkODAsCisgICAgKDB4MEM8PDE4KXwweDBjMTAwICAgLy8gMTFhOiAweDBjMzAwLCAxMWc6IDB4MGMxMDAKK307CisKK3UzMiBtYXgyODI1X2NoYW5uZWxfZGF0YV8yNFtdWzNdID0KK3sKKyAgICB7KDB4MDM8PDE4KXwweDMwMTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDEKKyAgICB7KDB4MDM8PDE4KXwweDMyMTQxLCAoMHgwNDw8MTgpfDB4MDg0NDQsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDIKKyAgICB7KDB4MDM8PDE4KXwweDMyMTQzLCAoMHgwNDw8MTgpfDB4MGFlZWUsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDMKKyAgICB7KDB4MDM8PDE4KXwweDMyMTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDQKKyAgICB7KDB4MDM8PDE4KXwweDMxMTQxLCAoMHgwNDw8MTgpfDB4MDg0NDQsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDUKKyAgICB7KDB4MDM8PDE4KXwweDMxMTQzLCAoMHgwNDw8MTgpfDB4MGFlZWUsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDYKKyAgICB7KDB4MDM8PDE4KXwweDMxMTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDcKKyAgICB7KDB4MDM8PDE4KXwweDMzMTQxLCAoMHgwNDw8MTgpfDB4MDg0NDQsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDgKKyAgICB7KDB4MDM8PDE4KXwweDMzMTQzLCAoMHgwNDw8MTgpfDB4MGFlZWUsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDkKKyAgICB7KDB4MDM8PDE4KXwweDMzMTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMTAKKyAgICB7KDB4MDM8PDE4KXwweDMwOTQxLCAoMHgwNDw8MTgpfDB4MDg0NDQsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMTEKKyAgICB7KDB4MDM8PDE4KXwweDMwOTQzLCAoMHgwNDw8MTgpfDB4MGFlZWUsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMTIKKyAgICB7KDB4MDM8PDE4KXwweDMwOTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMTMKKyAgICB7KDB4MDM8PDE4KXwweDMyOTQxLCAoMHgwNDw8MTgpfDB4MDk5OTksICgweDA1PDwxOCl8MHgyODlBNn0gLy8gMTQgKDI0ODRNSHopIGhobW9kaWZ5Cit9OworCit1MzIgbWF4MjgyNV9wb3dlcl9kYXRhXzI0W10gPSB7KDB4MEM8PDE4KXwweDBjMDAwLCAoMHgwQzw8MTgpfDB4MGMxMDB9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIE1BWDI4MjcgKGEvYi9nKQordTMyIG1heDI4MjdfcmZfZGF0YVtdID0KK3sKKyAgICAoMHgwMDw8MTgpfDB4MDAwYTIsCisgICAgKDB4MDE8PDE4KXwweDIxY2MwLAorICAgICgweDAyPDwxOCl8MHgxMzgwNiwKKyAgICAoMHgwMzw8MTgpfDB4MzAxNDIsCisgICAgKDB4MDQ8PDE4KXwweDBiMzMzLAorICAgICgweDA1PDwxOCl8MHgyODlBNiwKKyAgICAoMHgwNjw8MTgpfDB4MTgwMDgsCisgICAgKDB4MDc8PDE4KXwweDM4MDAwLAorICAgICgweDA4PDwxOCl8MHgwNTEwMCwKKyAgICAoMHgwOTw8MTgpfDB4MjRmMDgsCisgICAgKDB4MEE8PDE4KXwweDE0MDAwLAorICAgICgweDBCPDwxOCl8MHgzN2Q4MCwKKyAgICAoMHgwQzw8MTgpfDB4MGMxMDAgICAvLyAxMWE6IDB4MGMzMDAsIDExZzogMHgwYzEwMAorfTsKKwordTMyIG1heDI4MjdfY2hhbm5lbF9kYXRhXzI0W11bM10gPQoreworICAgIHsoMHgwMzw8MTgpfDB4MzAxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMQorICAgIHsoMHgwMzw8MTgpfDB4MzIxNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMgorICAgIHsoMHgwMzw8MTgpfDB4MzIxNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMworICAgIHsoMHgwMzw8MTgpfDB4MzIxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNAorICAgIHsoMHgwMzw8MTgpfDB4MzExNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNQorICAgIHsoMHgwMzw8MTgpfDB4MzExNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNgorICAgIHsoMHgwMzw8MTgpfDB4MzExNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNworICAgIHsoMHgwMzw8MTgpfDB4MzMxNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwOAorICAgIHsoMHgwMzw8MTgpfDB4MzMxNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwOQorICAgIHsoMHgwMzw8MTgpfDB4MzMxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMAorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMQorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMgorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMworICAgIHsoMHgwMzw8MTgpfDB4MzI5NDEsICgweDA0PDwxOCl8MHgwOTk5OSwgKDB4MDU8PDE4KXwweDI4OUE2fSAgLy8gMTQgKDI0ODRNSHopIGhobW9kaWZ5Cit9OworCit1MzIgbWF4MjgyN19jaGFubmVsX2RhdGFfNTBbXVszXSA9Cit7CisgICAgeygweDAzPDwxOCl8MHgzM2NjMywgKDB4MDQ8PDE4KXwweDA4Y2NjLCAoMHgwNTw8MTgpfDB4MkE5QTZ9LCAvLyBjaGFubmVsIDM2CisgICAgeygweDAzPDwxOCl8MHgzMDJjMCwgKDB4MDQ8PDE4KXwweDA4MDAwLCAoMHgwNTw8MTgpfDB4MkE5QTZ9LCAvLyBjaGFubmVsIDQwCisgICAgeygweDAzPDwxOCl8MHgzMDJjMiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4MkE5QTZ9LCAvLyBjaGFubmVsIDQ0CisgICAgeygweDAzPDwxOCl8MHgzMjJjMSwgKDB4MDQ8PDE4KXwweDA5OTk5LCAoMHgwNTw8MTgpfDB4MkE5QTZ9LCAvLyBjaGFubmVsIDQ4CisgICAgeygweDAzPDwxOCl8MHgzMTJjMSwgKDB4MDQ8PDE4KXwweDBhNjY2LCAoMHgwNTw8MTgpfDB4MkE5QTZ9LCAvLyBjaGFubmVsIDUyCisgICAgeygweDAzPDwxOCl8MHgzMzJjMywgKDB4MDQ8PDE4KXwweDA4Y2NjLCAoMHgwNTw8MTgpfDB4MkE5QTZ9LCAvLyBjaGFubmVsIDU2CisgICAgeygweDAzPDwxOCl8MHgzMGFjMCwgKDB4MDQ8PDE4KXwweDA4MDAwLCAoMHgwNTw8MTgpfDB4MkE5QTZ9LCAvLyBjaGFubmVsIDYwCisgICAgeygweDAzPDwxOCl8MHgzMGFjMiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4MkE5QTZ9IC8vIGNoYW5uZWwgNjQKK307CisKK3UzMiBtYXgyODI3X3Bvd2VyX2RhdGFfMjRbXSA9IHsoMHgwQzw8MTgpfDB4MEMwMDAsICgweDBDPDwxOCl8MHgwRDYwMCwgKDB4MEM8PDE4KXwweDBDMTAwfTsKK3UzMiBtYXgyODI3X3Bvd2VyX2RhdGFfNTBbXSA9IHsoMHgwQzw8MTgpfDB4MEM0MDAsICgweDBDPDwxOCl8MHgwRDUwMCwgKDB4MEM8PDE4KXwweDBDMzAwfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBNQVgyODI4IChhL2IvZykKK3UzMiBtYXgyODI4X3JmX2RhdGFbXSA9Cit7CisgICAgKDB4MDA8PDE4KXwweDAwMGEyLAorICAgICgweDAxPDwxOCl8MHgyMWNjMCwKKyAgICAoMHgwMjw8MTgpfDB4MTM4MDYsCisgICAgKDB4MDM8PDE4KXwweDMwMTQyLAorICAgICgweDA0PDwxOCl8MHgwYjMzMywKKyAgICAoMHgwNTw8MTgpfDB4Mjg5QTYsCisgICAgKDB4MDY8PDE4KXwweDE4MDA4LAorICAgICgweDA3PDwxOCl8MHgzODAwMCwKKyAgICAoMHgwODw8MTgpfDB4MDUxMDAsCisgICAgKDB4MDk8PDE4KXwweDI0ZjA4LAorICAgICgweDBBPDwxOCl8MHgxNDAwMCwKKyAgICAoMHgwQjw8MTgpfDB4MzdkODAsCisgICAgKDB4MEM8PDE4KXwweDBjMTAwICAgLy8gMTFhOiAweDBjMzAwLCAxMWc6IDB4MGMxMDAKK307CisKK3UzMiBtYXgyODI4X2NoYW5uZWxfZGF0YV8yNFtdWzNdID0KK3sKKyAgICB7KDB4MDM8PDE4KXwweDMwMTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDEKKyAgICB7KDB4MDM8PDE4KXwweDMyMTQxLCAoMHgwNDw8MTgpfDB4MDg0NDQsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDIKKyAgICB7KDB4MDM8PDE4KXwweDMyMTQzLCAoMHgwNDw8MTgpfDB4MGFlZWUsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDMKKyAgICB7KDB4MDM8PDE4KXwweDMyMTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDQKKyAgICB7KDB4MDM8PDE4KXwweDMxMTQxLCAoMHgwNDw8MTgpfDB4MDg0NDQsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDUKKyAgICB7KDB4MDM8PDE4KXwweDMxMTQzLCAoMHgwNDw8MTgpfDB4MGFlZWUsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDYKKyAgICB7KDB4MDM8PDE4KXwweDMxMTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDcKKyAgICB7KDB4MDM8PDE4KXwweDMzMTQxLCAoMHgwNDw8MTgpfDB4MDg0NDQsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDgKKyAgICB7KDB4MDM8PDE4KXwweDMzMTQzLCAoMHgwNDw8MTgpfDB4MGFlZWUsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMDkKKyAgICB7KDB4MDM8PDE4KXwweDMzMTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMTAKKyAgICB7KDB4MDM8PDE4KXwweDMwOTQxLCAoMHgwNDw8MTgpfDB4MDg0NDQsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMTEKKyAgICB7KDB4MDM8PDE4KXwweDMwOTQzLCAoMHgwNDw8MTgpfDB4MGFlZWUsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMTIKKyAgICB7KDB4MDM8PDE4KXwweDMwOTQyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyODlBNn0sIC8vIGNoYW5uZTEgMTMKKyAgICB7KDB4MDM8PDE4KXwweDMyOTQxLCAoMHgwNDw8MTgpfDB4MDk5OTksICgweDA1PDwxOCl8MHgyODlBNn0gIC8vIDE0ICgyNDg0TUh6KSBoaG1vZGlmeQorfTsKKwordTMyIG1heDI4MjhfY2hhbm5lbF9kYXRhXzUwW11bM10gPQoreworICAgIHsoMHgwMzw8MTgpfDB4MzNjYzMsICgweDA0PDwxOCl8MHgwOGNjYywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lbCAzNgorICAgIHsoMHgwMzw8MTgpfDB4MzAyYzAsICgweDA0PDwxOCl8MHgwODAwMCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lbCA0MAorICAgIHsoMHgwMzw8MTgpfDB4MzAyYzIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lbCA0NAorICAgIHsoMHgwMzw8MTgpfDB4MzIyYzEsICgweDA0PDwxOCl8MHgwOTk5OSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lbCA0OAorICAgIHsoMHgwMzw8MTgpfDB4MzEyYzEsICgweDA0PDwxOCl8MHgwYTY2NiwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lbCA1MgorICAgIHsoMHgwMzw8MTgpfDB4MzMyYzMsICgweDA0PDwxOCl8MHgwOGNjYywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lbCA1NgorICAgIHsoMHgwMzw8MTgpfDB4MzBhYzAsICgweDA0PDwxOCl8MHgwODAwMCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lbCA2MAorICAgIHsoMHgwMzw8MTgpfDB4MzBhYzIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSAvLyBjaGFubmVsIDY0Cit9OworCit1MzIgbWF4MjgyOF9wb3dlcl9kYXRhXzI0W10gPSB7KDB4MEM8PDE4KXwweDBjMDAwLCAoMHgwQzw8MTgpfDB4MGMxMDB9OwordTMyIG1heDI4MjhfcG93ZXJfZGF0YV81MFtdID0geygweDBDPDwxOCl8MHgwYzAwMCwgKDB4MEM8PDE4KXwweDBjMTAwfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBMQTIwMDQwNzI4IGtldmluCisvLyBNQVgyODI5IChhL2IvZykKK3UzMiBtYXgyODI5X3JmX2RhdGFbXSA9Cit7CisgICAgKDB4MDA8PDE4KXwweDAwMGEyLAorICAgICgweDAxPDwxOCl8MHgyMzUyMCwKKyAgICAoMHgwMjw8MTgpfDB4MTM4MDIsCisgICAgKDB4MDM8PDE4KXwweDMwMTQyLAorICAgICgweDA0PDwxOCl8MHgwYjMzMywKKyAgICAoMHgwNTw8MTgpfDB4Mjg5MDYsCisgICAgKDB4MDY8PDE4KXwweDE4MDA4LAorICAgICgweDA3PDwxOCl8MHgzQjUwMCwKKyAgICAoMHgwODw8MTgpfDB4MDUxMDAsCisgICAgKDB4MDk8PDE4KXwweDI0ZjA4LAorICAgICgweDBBPDwxOCl8MHgxNDAwMCwKKyAgICAoMHgwQjw8MTgpfDB4MzdkODAsCisgICAgKDB4MEM8PDE4KXwweDBGMzAwIC8vVFhWR0E9NTEsIChNQVgtNiBkQikKK307CisKK3UzMiBtYXgyODI5X2NoYW5uZWxfZGF0YV8yNFtdWzNdID0KK3sKKyAgICB7KDM8PDE4KXwweDMwMTQyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyODlDNn0sICAvLyAwMSAoMjQxMk1IeikKKyAgICB7KDM8PDE4KXwweDMyMTQxLCAoNDw8MTgpfDB4MDg0NDQsICg1PDwxOCl8MHgyODlDNn0sICAvLyAwMiAoMjQxN01IeikKKyAgICB7KDM8PDE4KXwweDMyMTQzLCAoNDw8MTgpfDB4MGFlZWUsICg1PDwxOCl8MHgyODlDNn0sICAvLyAwMyAoMjQyMk1IeikKKyAgICB7KDM8PDE4KXwweDMyMTQyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyODlDNn0sICAvLyAwNCAoMjQyN01IeikKKyAgICB7KDM8PDE4KXwweDMxMTQxLCAoNDw8MTgpfDB4MDg0NDQsICg1PDwxOCl8MHgyODlDNn0sICAvLyAwNSAoMjQzMk1IeikKKyAgICB7KDM8PDE4KXwweDMxMTQzLCAoNDw8MTgpfDB4MGFlZWUsICg1PDwxOCl8MHgyODlDNn0sICAvLyAwNiAoMjQzN01IeikKKyAgICB7KDM8PDE4KXwweDMxMTQyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyODlDNn0sICAvLyAwNyAoMjQ0Mk1IeikKKyAgICB7KDM8PDE4KXwweDMzMTQxLCAoNDw8MTgpfDB4MDg0NDQsICg1PDwxOCl8MHgyODlDNn0sICAvLyAwOCAoMjQ0N01IeikKKyAgICB7KDM8PDE4KXwweDMzMTQzLCAoNDw8MTgpfDB4MGFlZWUsICg1PDwxOCl8MHgyODlDNn0sICAvLyAwOSAoMjQ1Mk1IeikKKyAgICB7KDM8PDE4KXwweDMzMTQyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyODlDNn0sICAvLyAxMCAoMjQ1N01IeikKKyAgICB7KDM8PDE4KXwweDMwOTQxLCAoNDw8MTgpfDB4MDg0NDQsICg1PDwxOCl8MHgyODlDNn0sICAvLyAxMSAoMjQ2Mk1IeikKKyAgICB7KDM8PDE4KXwweDMwOTQzLCAoNDw8MTgpfDB4MGFlZWUsICg1PDwxOCl8MHgyODlDNn0sICAvLyAxMiAoMjQ2N01IeikKKyAgICB7KDM8PDE4KXwweDMwOTQyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyODlDNn0sICAvLyAxMyAoMjQ3Mk1IeikKKyAgICB7KDM8PDE4KXwweDMyOTQxLCAoNDw8MTgpfDB4MDk5OTksICg1PDwxOCl8MHgyODlDNn0sICAvLyAxNCAoMjQ4NE1IeikgaGgtbW9kaWZ5Cit9OworCit1MzIgbWF4MjgyOV9jaGFubmVsX2RhdGFfNTBbXVs0XSA9Cit7CisgICAgIHszNiwgKDM8PDE4KXwweDMzY2MzLCAoNDw8MTgpfDB4MDhjY2MsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDM2ICg1LjE4MEdIeikKKyAgICAgezQwLCAoMzw8MTgpfDB4MzAyYzAsICg0PDwxOCl8MHgwODAwMCwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gNDAgKDUuMjAwR0h6KQorICAgICB7NDQsICgzPDwxOCl8MHgzMDJjMiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyA0NCAoNS4yMjBHSHopCisgICAgIHs0OCwgKDM8PDE4KXwweDMyMmMxLCAoNDw8MTgpfDB4MDk5OTksICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDQ4ICg1LjI0MEdIeikKKyAgICAgezUyLCAoMzw8MTgpfDB4MzEyYzEsICg0PDwxOCl8MHgwYTY2NiwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gNTIgKDUuMjYwR0h6KQorICAgICB7NTYsICgzPDwxOCl8MHgzMzJjMywgKDQ8PDE4KXwweDA4Y2NjLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyA1NiAoNS4yODBHSHopCisgICAgIHs2MCwgKDM8PDE4KXwweDMwYWMwLCAoNDw8MTgpfDB4MDgwMDAsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDYwICg1LjMwMEdIeikKKyAgICAgezY0LCAoMzw8MTgpfDB4MzBhYzIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDJBOTQ2fSwgLy8gNjQgKDUuMzIwR0h6KQorCisgICAgezEwMCwgKDM8PDE4KXwweDMwZWMwLCAoNDw8MTgpfDB4MDgwMDAsICg1PDwxOCl8MHgyQTlDNn0sIC8vIDEwMCAoNS41MDBHSHopCisgICAgezEwNCwgKDM8PDE4KXwweDMwZWMyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyQTlDNn0sIC8vIDEwNCAoNS41MjBHSHopCisgICAgezEwOCwgKDM8PDE4KXwweDMyZWMxLCAoNDw8MTgpfDB4MDk5OTksICg1PDwxOCl8MHgyQTlDNn0sIC8vIDEwOCAoNS41NDBHSHopCisgICAgezExMiwgKDM8PDE4KXwweDMxZWMxLCAoNDw8MTgpfDB4MGE2NjYsICg1PDwxOCl8MHgyQTlDNn0sIC8vIDExMiAoNS41NjBHSHopCisgICAgezExNiwgKDM8PDE4KXwweDMzZWMzLCAoNDw8MTgpfDB4MDhjY2MsICg1PDwxOCl8MHgyQTlDNn0sIC8vIDExNiAoNS41ODBHSHopCisgICAgezEyMCwgKDM8PDE4KXwweDMwMWMwLCAoNDw8MTgpfDB4MDgwMDAsICg1PDwxOCl8MHgyQTlDNn0sIC8vIDEyMCAoNS42MDBHSHopCisgICAgezEyNCwgKDM8PDE4KXwweDMwMWMyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyQTlDNn0sIC8vIDEyNCAoNS42MjBHSHopCisgICAgezEyOCwgKDM8PDE4KXwweDMyMWMxLCAoNDw8MTgpfDB4MDk5OTksICg1PDwxOCl8MHgyQTlDNn0sIC8vIDEyOCAoNS42NDBHSHopCisgICAgezEzMiwgKDM8PDE4KXwweDMxMWMxLCAoNDw8MTgpfDB4MGE2NjYsICg1PDwxOCl8MHgyQTlDNn0sIC8vIDEzMiAoNS42NjBHSHopCisgICAgezEzNiwgKDM8PDE4KXwweDMzMWMzLCAoNDw8MTgpfDB4MDhjY2MsICg1PDwxOCl8MHgyQTlDNn0sIC8vIDEzNiAoNS42ODBHSHopCisgICAgezE0MCwgKDM8PDE4KXwweDMwOWMwLCAoNDw8MTgpfDB4MDgwMDAsICg1PDwxOCl8MHgyQTlDNn0sIC8vIDE0MCAoNS43MDBHSHopCisKKyAgICB7MTQ5LCAoMzw8MTgpfDB4MzI5YzIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTQ5ICg1Ljc0NUdIeikKKyAgICB7MTUzLCAoMzw8MTgpfDB4MzE5YzEsICg0PDwxOCl8MHgwOTk5OSwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTUzICg1Ljc2NUdIeikKKyAgICB7MTU3LCAoMzw8MTgpfDB4MzM5YzEsICg0PDwxOCl8MHgwYTY2NiwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTU3ICg1Ljc4NUdIeikKKyAgICB7MTYxLCAoMzw8MTgpfDB4MzA1YzMsICg0PDwxOCl8MHgwOGNjYywgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTYxICg1LjgwNUdIeikKKworICAgIC8vIEphcGFuCisgICAgeyAxODQsICgzPDwxOCl8MHgzMDhjMiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAxODQgKDQuOTIwR0h6KQorICAgIHsgMTg4LCAoMzw8MTgpfDB4MzI4YzEsICg0PDwxOCl8MHgwOTk5OSwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gMTg4ICg0Ljk0MEdIeikKKyAgICB7IDE5MiwgKDM8PDE4KXwweDMxOGMxLCAoNDw8MTgpfDB4MGE2NjYsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDE5MiAoNC45NjBHSHopCisgICAgeyAxOTYsICgzPDwxOCl8MHgzMzhjMywgKDQ8PDE4KXwweDA4Y2NjLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAxOTYgKDQuOTgwR0h6KQorICAgIHsgICA4LCAoMzw8MTgpfDB4MzI0YzEsICg0PDwxOCl8MHgwOTk5OSwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gICA4ICg1LjA0MEdIeikKKyAgICB7ICAxMiwgKDM8PDE4KXwweDMxNGMxLCAoNDw8MTgpfDB4MGE2NjYsICg1PDwxOCl8MHgyQTk0Nn0sIC8vICAxMiAoNS4wNjBHSHopCisgICAgeyAgMTYsICgzPDwxOCl8MHgzMzRjMywgKDQ8PDE4KXwweDA4Y2NjLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAgMTYgKDUuMDgwR0h6KQorICAgIHsgIDM0LCAoMzw8MTgpfDB4MzFjYzIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDJBOTQ2fSwgLy8gIDM0ICg1LjE3MEdIeikKKyAgICB7ICAzOCwgKDM8PDE4KXwweDMzY2MxLCAoNDw8MTgpfDB4MDk5OTksICg1PDwxOCl8MHgyQTk0Nn0sIC8vICAzOCAoNS4xOTBHSHopCisgICAgeyAgNDIsICgzPDwxOCl8MHgzMDJjMSwgKDQ8PDE4KXwweDBhNjY2LCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAgNDIgKDUuMjEwR0h6KQorICAgIHsgIDQ2LCAoMzw8MTgpfDB4MzIyYzMsICg0PDwxOCl8MHgwOGNjYywgKDU8PDE4KXwweDJBOTQ2fSwgLy8gIDQ2ICg1LjIzMEdIeikKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorOyBGb3IgTUFYSU0yODI1LzYvNyBWZXIuIDMxNyBvciBsZXNzCis7IEVkaXRlZCBieSBUaWdlciwgU2VwLTE3LTIwMDMgIGZvciAyLjRHaHogY2hhbm5lbHMKKzsgVXBkYXRlZCBieSBUaWdlciwgU2VwLTIyLTIwMDMgZm9yIDUuMEdoeiBjaGFubmVscworOyBDb3JyZWN0ZWQgYnkgVGlnZXIsIFNlcC0yMy0yMDAzLCBmb3IgMHgwMyBhbmQgMHgwNCBvZiA1LjBHaHogY2hhbm5lbHMKKworMHgwMCAweDAwMDgwCisweDAxIDB4MjE0YzAKKzB4MDIgMHgxMzgwMgorCis7Mi40R0h6IENoYW5uZWxzCis7Y2hhbm5lMSAwMSAoMi40MTJHSHopOyAweDAzIDB4MzAxNDMgOzB4MDQgMHgwYWNjYworO2NoYW5uZTEgMDIgKDIuNDE3R0h6KTsgMHgwMyAweDMyMTQwIDsweDA0IDB4MDkxMTEKKztjaGFubmUxIDAzICgyLjQyMkdIeik7IDB4MDMgMHgzMjE0MiA7MHgwNCAweDBiYmJiCis7Y2hhbm5lMSAwNCAoMi40MjdHSHopOyAweDAzIDB4MzIxNDMgOzB4MDQgMHgwYWNjYworO2NoYW5uZTEgMDUgKDIuNDMyR0h6KTsgMHgwMyAweDMxMTQwIDsweDA0IDB4MDkxMTEKKztjaGFubmUxIDA2ICgyLjQzN0dIeik7IDB4MDMgMHgzMTE0MiA7MHgwNCAweDBiYmJiCis7Y2hhbm5lMSAwNyAoMi40NDJHSHopOyAweDAzIDB4MzExNDMgOzB4MDQgMHgwYWNjYworO2NoYW5uZTEgMDggKDIuNDQ3R0h6KTsgMHgwMyAweDMzMTQwIDsweDA0IDB4MDkxMTEKKztjaGFubmUxIDA5ICgyLjQ1MkdIeik7IDB4MDMgMHgzMzE0MiA7MHgwNCAweDBiYmJiCis7Y2hhbm5lMSAxMCAoMi40NTdHSHopOyAweDAzIDB4MzMxNDMgOzB4MDQgMHgwYWNjYworO2NoYW5uZTEgMTEgKDIuNDYyR0h6KTsgMHgwMyAweDMwOTQwIDsweDA0IDB4MDkxMTEKKztjaGFubmUxIDEyICgyLjQ2N0dIeik7IDB4MDMgMHgzMDk0MiA7MHgwNCAweDBiYmJiCis7Y2hhbm5lMSAxMyAoMi40NzJHSHopOyAweDAzIDB4MzA5NDMgOzB4MDQgMHgwYWNjYworCis7NS4wR2h6IENoYW5uZWxzCis7Y2hhbm5lbCAzNiAoNS4xODBHSHopOyAweDAzIDB4MzNjYzAgOzB4MDQgMHgwYjMzMworO2NoYW5uZWwgNDAgKDUuMjAwR0h6KTsgMHgwMyAweDMwMmMwIDsweDA0IDB4MDgwMDAKKztjaGFubmVsIDQ0ICg1LjIyMEdIeik7IDB4MDMgMHgzMDJjMiA7MHgwNCAweDBiMzMzCis7Y2hhbm5lbCA0OCAoNS4yNDBHSHopOyAweDAzIDB4MzIyYzEgOzB4MDQgMHgwOTk5OQorO2NoYW5uZWwgNTIgKDUuMjYwR0h6KTsgMHgwMyAweDMxMmMxIDsweDA0IDB4MGE2NjYKKztjaGFubmVsIDU2ICg1LjI4MEdIeik7IDB4MDMgMHgzMzJjMyA7MHgwNCAweDA4Y2NjCis7Y2hhbm5lbCA2MCAoNS4zMDBHSHopOyAweDAzIDB4MzBhYzAgOzB4MDQgMHgwODAwMAorO2NoYW5uZWwgNjQgKDUuMzIwR0h6KTsgMHgwMyAweDMwYWMyIDsweDA0IDB4MDgzMzMKKworOzIuNEdIeiBiYW5kIDsweDA1IDB4Mjg5ODY7Cis7NS4wR0h6IGJhbmQKKzB4MDUgMHgyYTk4NgorCisweDA2IDB4MTgwMDgKKzB4MDcgMHgzODQwMAorMHgwOCAweDA1MTA4CisweDA5IDB4MjdmZjgKKzB4MGEgMHgxNDAwMAorMHgwYiAweDM3Zjk5CisweDBjIDB4MGMwMDAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyIG1heGltXzMxN19yZl9kYXRhW10gICAgID0KK3sKKyAgICAoMHgwMDw8MTgpfDB4MDAwYTIsCisgICAgKDB4MDE8PDE4KXwweDIxNGMwLAorICAgICgweDAyPDwxOCl8MHgxMzgwMiwKKyAgICAoMHgwMzw8MTgpfDB4MzAxNDMsCisgICAgKDB4MDQ8PDE4KXwweDBhY2NjLAorICAgICgweDA1PDwxOCl8MHgyODk4NiwKKyAgICAoMHgwNjw8MTgpfDB4MTgwMDgsCisgICAgKDB4MDc8PDE4KXwweDM4NDAwLAorICAgICgweDA4PDwxOCl8MHgwNTEwOCwKKyAgICAoMHgwOTw8MTgpfDB4MjdmZjgsCisgICAgKDB4MEE8PDE4KXwweDE0MDAwLAorICAgICgweDBCPDwxOCl8MHgzN2Y5OSwKKyAgICAoMHgwQzw8MTgpfDB4MGMwMDAKK307CisKK3UzMiBtYXhpbV8zMTdfY2hhbm5lbF9kYXRhXzI0W11bM10gICAgPQoreworICAgIHsoMHgwMzw8MTgpfDB4MzAxNDMsICgweDA0PDwxOCl8MHgwYWNjYywgKDB4MDU8PDE4KXwweDI4OTg2fSwgLy8gY2hhbm5lMSAwMQorICAgIHsoMHgwMzw8MTgpfDB4MzIxNDAsICgweDA0PDwxOCl8MHgwOTExMSwgKDB4MDU8PDE4KXwweDI4OTg2fSwgLy8gY2hhbm5lMSAwMgorICAgIHsoMHgwMzw8MTgpfDB4MzIxNDIsICgweDA0PDwxOCl8MHgwYmJiYiwgKDB4MDU8PDE4KXwweDI4OTg2fSwgLy8gY2hhbm5lMSAwMworICAgIHsoMHgwMzw8MTgpfDB4MzIxNDMsICgweDA0PDwxOCl8MHgwYWNjYywgKDB4MDU8PDE4KXwweDI4OTg2fSwgLy8gY2hhbm5lMSAwNAorICAgIHsoMHgwMzw8MTgpfDB4MzExNDAsICgweDA0PDwxOCl8MHgwOTExMSwgKDB4MDU8PDE4KXwweDI4OTg2fSwgLy8gY2hhbm5lMSAwNQorICAgIHsoMHgwMzw8MTgpfDB4MzExNDIsICgweDA0PDwxOCl8MHgwYmJiYiwgKDB4MDU8PDE4KXwweDI4OTg2fSwgLy8gY2hhbm5lMSAwNgorICAgIHsoMHgwMzw8MTgpfDB4MzExNDMsICgweDA0PDwxOCl8MHgwYWNjYywgKDB4MDU8PDE4KXwweDI4OTg2fSwgLy8gY2hhbm5lMSAwNworICAgIHsoMHgwMzw8MTgpfDB4MzMxNDAsICgweDA0PDwxOCl8MHgwOTExMSwgKDB4MDU8PDE4KXwweDI4OTg2fSwgLy8gY2hhbm5lMSAwOAorICAgIHsoMHgwMzw8MTgpfDB4MzMxNDIsICgweDA0PDwxOCl8MHgwYmJiYiwgKDB4MDU8PDE4KXwweDI4OTg2fSwgLy8gY2hhbm5lMSAwOQorICAgIHsoMHgwMzw8MTgpfDB4MzMxNDMsICgweDA0PDwxOCl8MHgwYWNjYywgKDB4MDU8PDE4KXwweDI4OTg2fSwgLy8gY2hhbm5lMSAxMAorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDAsICgweDA0PDwxOCl8MHgwOTExMSwgKDB4MDU8PDE4KXwweDI4OTg2fSwgLy8gY2hhbm5lMSAxMQorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDIsICgweDA0PDwxOCl8MHgwYmJiYiwgKDB4MDU8PDE4KXwweDI4OTg2fSwgLy8gY2hhbm5lMSAxMgorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDMsICgweDA0PDwxOCl8MHgwYWNjYywgKDB4MDU8PDE4KXwweDI4OTg2fSAvLyBjaGFubmUxIDEzCit9OworCit1MzIgbWF4aW1fMzE3X2NoYW5uZWxfZGF0YV81MFtdWzNdICAgID0KK3sKKyAgICB7KDB4MDM8PDE4KXwweDMzY2MwLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyYTk4Nn0sIC8vIGNoYW5uZWwgMzYKKyAgICB7KDB4MDM8PDE4KXwweDMwMmMwLCAoMHgwNDw8MTgpfDB4MDgwMDAsICgweDA1PDwxOCl8MHgyYTk4Nn0sIC8vIGNoYW5uZWwgNDAKKyAgICB7KDB4MDM8PDE4KXwweDMwMmMzLCAoMHgwNDw8MTgpfDB4MGFjY2MsICgweDA1PDwxOCl8MHgyYTk4Nn0sIC8vIGNoYW5uZWwgNDQKKyAgICB7KDB4MDM8PDE4KXwweDMyMmMxLCAoMHgwNDw8MTgpfDB4MDk2NjYsICgweDA1PDwxOCl8MHgyYTk4Nn0sIC8vIGNoYW5uZWwgNDgKKyAgICB7KDB4MDM8PDE4KXwweDMxMmMyLCAoMHgwNDw8MTgpfDB4MDk5OTksICgweDA1PDwxOCl8MHgyYTk4Nn0sIC8vIGNoYW5uZWwgNTIKKyAgICB7KDB4MDM8PDE4KXwweDMzMmMwLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyYTk5ZX0sIC8vIGNoYW5uZWwgNTYKKyAgICB7KDB4MDM8PDE4KXwweDMwYWMwLCAoMHgwNDw8MTgpfDB4MDgwMDAsICgweDA1PDwxOCl8MHgyYTk5ZX0sIC8vIGNoYW5uZWwgNjAKKyAgICB7KDB4MDM8PDE4KXwweDMwYWMzLCAoMHgwNDw8MTgpfDB4MGFjY2MsICgweDA1PDwxOCl8MHgyYTk5ZX0gLy8gY2hhbm5lbCA2NAorfTsKKwordTMyIG1heGltXzMxN19wb3dlcl9kYXRhXzI0W10gPSB7KDB4MEM8PDE4KXwweDBjMDAwLCAoMHgwQzw8MTgpfDB4MGMxMDB9OwordTMyIG1heGltXzMxN19wb3dlcl9kYXRhXzUwW10gPSB7KDB4MEM8PDE4KXwweDBjMDAwLCAoMHgwQzw8MTgpfDB4MGMxMDB9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzs7QUwyMjMwIE1QIChNYXNzIFByb2R1Y3Rpb24gVmVyc2lvbikKKzs7UkYgUmVnaXN0ZXJzIFNldHRpbmcgZm9yIEFpcm9oYSBBTDIyMzAgc2lsaWNvbiBhZnRlciBKdW5lIDFzdCwgMjAwNAorOztVcGRhdGVkIGJ5IFRpZ2VyIEh1YW5nIChKdW5lIDFzdCwgMjAwNCkKKzs7MjAtYml0IGxlbmd0aCBhbmQgTFNCIGZpcnN0CisKKzs7Q2gwMSAoMjQxMk1IeikgOzB4MDAgMHgwOUVGQyA7MHgwMSAweDhDQ0NDOworOztDaDAyICgyNDE3TUh6KSA7MHgwMCAweDA5RUZDIDsweDAxIDB4OENDQ0Q7Cis7O0NoMDMgKDI0MjJNSHopIDsweDAwIDB4MDlFN0MgOzB4MDEgMHg4Q0NDQzsKKzs7Q2gwNCAoMjQyN01IeikgOzB4MDAgMHgwOUU3QyA7MHgwMSAweDhDQ0NEOworOztDaDA1ICgyNDMyTUh6KSA7MHgwMCAweDA1RUZDIDsweDAxIDB4OENDQ0M7Cis7O0NoMDYgKDI0MzdNSHopIDsweDAwIDB4MDVFRkMgOzB4MDEgMHg4Q0NDRDsKKzs7Q2gwNyAoMjQ0Mk1IeikgOzB4MDAgMHgwNUU3QyA7MHgwMSAweDhDQ0NDOworOztDaDA4ICgyNDQ3TUh6KSA7MHgwMCAweDA1RTdDIDsweDAxIDB4OENDQ0Q7Cis7O0NoMDkgKDI0NTJNSHopIDsweDAwIDB4MERFRkMgOzB4MDEgMHg4Q0NDQzsKKzs7Q2gxMCAoMjQ1N01IeikgOzB4MDAgMHgwREVGQyA7MHgwMSAweDhDQ0NEOworOztDaDExICgyNDYyTUh6KSA7MHgwMCAweDBERTdDIDsweDAxIDB4OENDQ0M7Cis7O0NoMTIgKDI0NjdNSHopIDsweDAwIDB4MERFN0MgOzB4MDEgMHg4Q0NDRDsKKzs7Q2gxMyAoMjQ3Mk1IeikgOzB4MDAgMHgwM0VGQyA7MHgwMSAweDhDQ0NDOworOztDaDE0ICgyNDg0TWh6KSA7MHgwMCAweDAzRTdDIDsweDAxIDB4ODY2NjY7CisKKzB4MDIgMHg0MDFEODsgUlhEQ09DIEJXIDEwMEh6IGZvciBSWEhQIGxvdworOzsweDAyIDB4NDgxREM7IFJYRENPQyBCVyAzMEtoeiBmb3IgUlhIUCBsb3cKKworMHgwMyAweENGRkYwCisweDA0IDB4MjM4MDAKKzB4MDUgMHhBM0I3MgorMHgwNiAweDZEQTAxCisweDA3IDB4RTE2ODgKKzB4MDggMHgxMTYwMAorMHgwOSAweDk5RTAyCisweDBBIDB4NUREQjAKKzB4MEIgMHhEOTkwMAorMHgwQyAweDNGRkJECisweDBEIDB4QjAwMDAKKzB4MEYgMHhGMDBBMAorCis7UkYgQ2FsaWJyYXRpb24gZm9yIEFpcm9oYSBBTDIyMzAKKztFZGl0IGJ5IEJlbiBDaGFuZyAoMDEvMzAvMDQpCis7VXBkYXRlZCBieSBUaWdlciBIdWFuZyAoMDMvMDMvMDQpCisweDBmIDB4ZjAwYTAgOyBJbml0aWFsIFNldHRpbmcKKzB4MGYgMHhmMDBiMCA7IEFjdGl2YXRlIFRYIERDQworMHgwZiAweGYwMmEwIDsgQWN0aXZhdGUgUGhhc2UgQ2FsaWJyYXRpb24KKzB4MGYgMHhmMDBlMCA7IEFjdGl2YXRlIEZpbHRlciBSQyBDYWxpYnJhdGlvbgorMHgwZiAweGYwMGEwIDsgUmVzdG9yZSBJbml0aWFsIFNldHRpbmcKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit1MzIgYWwyMjMwX3JmX2RhdGFbXSAgICAgPQoreworICAgICgweDAwPDwyMCl8MHgwOUVGQywKKyAgICAoMHgwMTw8MjApfDB4OENDQ0MsCisgICAgKDB4MDI8PDIwKXwweDQwMDU4LC8vIDIwMDYwNjI3IEFuc29uIDB4NDAxRDgsCisgICAgKDB4MDM8PDIwKXwweENGRkYwLAorICAgICgweDA0PDwyMCl8MHgyNDEwMCwvLyAyMDA2MDYyNyBBbnNvbiAweDIzODAwLAorICAgICgweDA1PDwyMCl8MHhBM0IyRiwvLyAyMDA2MDYyNyBBbnNvbiAweEEzQjcyCisgICAgKDB4MDY8PDIwKXwweDZEQTAxLAorICAgICgweDA3PDwyMCl8MHhFMzYyOCwvLyAyMDA2MDYyNyBBbnNvbiAweEUxNjg4LAorICAgICgweDA4PDwyMCl8MHgxMTYwMCwKKyAgICAoMHgwOTw8MjApfDB4OURDMDIsLy8gMjAwNjA2MjcgQW5vc24gMHg5NzYwMiwvLzB4OTlFMDIsIC8vMHg5QUUwMgorICAgICgweDBBPDwyMCl8MHg1ZGRiMCwgLy8gOTQxMjA2IEZvciBRQ09NIGludGVyZmVyZW5jZSAweDU4OGIwLC8vMHg1RERCMCwgOTQwNjAxIGFkaiAweDVhYTMwIGZvciBibHVldG9vdGgKKyAgICAoMHgwQjw8MjApfDB4RDk5MDAsCisgICAgKDB4MEM8PDIwKXwweDNGRkJELAorICAgICgweDBEPDwyMCl8MHhCMDAwMCwKKyAgICAoMHgwRjw8MjApfDB4RjAxQTAgLy8gMjAwNjA2MjcgQW5zb24gMHhGMDBBMAorfTsKKwordTMyIGFsMjIzMHNfcmZfZGF0YVtdICAgICA9Cit7CisgICAgKDB4MDA8PDIwKXwweDA5RUZDLAorICAgICgweDAxPDwyMCl8MHg4Q0NDQywKKyAgICAoMHgwMjw8MjApfDB4NDAwNTgsLy8gMjAwNjA0MTkgMHg0MDFEOCwKKyAgICAoMHgwMzw8MjApfDB4Q0ZGRjAsCisgICAgKDB4MDQ8PDIwKXwweDI0MTAwLC8vIDIwMDYwNDE5IDB4MjM4MDAsCisgICAgKDB4MDU8PDIwKXwweEEzQjJGLC8vIDIwMDYwNDE5IDB4QTNCNzIsCisgICAgKDB4MDY8PDIwKXwweDZEQTAxLAorICAgICgweDA3PDwyMCl8MHhFMzYyOCwvLyAyMDA2MDQxOSAweEUxNjg4LAorICAgICgweDA4PDwyMCl8MHgxMTYwMCwKKyAgICAoMHgwOTw8MjApfDB4OURDMDIsLy8gMjAwNjA0MTkgMHg5NzYwMiwvLzB4OTlFMDIsIC8vMHg5QUUwMgorICAgICgweDBBPDwyMCl8MHg1RERCMCwvLyA5NDEyMDYgRm9yIFFDT00gaW50ZXJmZXJlbmNlIDB4NTg4YjAsLy8weDVEREIwLCA5NDA2MDEgYWRqIDB4NWFhMzAgZm9yIGJsdWV0b290aAorICAgICgweDBCPDwyMCl8MHhEOTkwMCwKKyAgICAoMHgwQzw8MjApfDB4M0ZGQkQsCisgICAgKDB4MEQ8PDIwKXwweEIwMDAwLAorICAgICgweDBGPDwyMCl8MHhGMDFBMCAvLyAyMDA2MDQxOSAweEYwMEEwCit9OworCit1MzIgYWwyMjMwX2NoYW5uZWxfZGF0YV8yNFtdWzJdID0KK3sKKyAgICB7KDB4MDA8PDIwKXwweDA5RUZDLCAoMHgwMTw8MjApfDB4OENDQ0N9LCAvLyBjaGFubmUxIDAxCisgICAgeygweDAwPDwyMCl8MHgwOUVGQywgKDB4MDE8PDIwKXwweDhDQ0NEfSwgLy8gY2hhbm5lMSAwMgorICAgIHsoMHgwMDw8MjApfDB4MDlFN0MsICgweDAxPDwyMCl8MHg4Q0NDQ30sIC8vIGNoYW5uZTEgMDMKKyAgICB7KDB4MDA8PDIwKXwweDA5RTdDLCAoMHgwMTw8MjApfDB4OENDQ0R9LCAvLyBjaGFubmUxIDA0CisgICAgeygweDAwPDwyMCl8MHgwNUVGQywgKDB4MDE8PDIwKXwweDhDQ0NDfSwgLy8gY2hhbm5lMSAwNQorICAgIHsoMHgwMDw8MjApfDB4MDVFRkMsICgweDAxPDwyMCl8MHg4Q0NDRH0sIC8vIGNoYW5uZTEgMDYKKyAgICB7KDB4MDA8PDIwKXwweDA1RTdDLCAoMHgwMTw8MjApfDB4OENDQ0N9LCAvLyBjaGFubmUxIDA3CisgICAgeygweDAwPDwyMCl8MHgwNUU3QywgKDB4MDE8PDIwKXwweDhDQ0NEfSwgLy8gY2hhbm5lMSAwOAorICAgIHsoMHgwMDw8MjApfDB4MERFRkMsICgweDAxPDwyMCl8MHg4Q0NDQ30sIC8vIGNoYW5uZTEgMDkKKyAgICB7KDB4MDA8PDIwKXwweDBERUZDLCAoMHgwMTw8MjApfDB4OENDQ0R9LCAvLyBjaGFubmUxIDEwCisgICAgeygweDAwPDwyMCl8MHgwREU3QywgKDB4MDE8PDIwKXwweDhDQ0NDfSwgLy8gY2hhbm5lMSAxMQorICAgIHsoMHgwMDw8MjApfDB4MERFN0MsICgweDAxPDwyMCl8MHg4Q0NDRH0sIC8vIGNoYW5uZTEgMTIKKyAgICB7KDB4MDA8PDIwKXwweDAzRUZDLCAoMHgwMTw8MjApfDB4OENDQ0N9LCAvLyBjaGFubmUxIDEzCisgICAgeygweDAwPDwyMCl8MHgwM0U3QywgKDB4MDE8PDIwKXwweDg2NjY2fSAvLyBjaGFubmUxIDE0Cit9OworCisvLyBDdXJyZW50IHNldHRpbmcuIHUzMiBhaXJvaGFfcG93ZXJfZGF0YV8yNFtdID0geygweDA5PDwyMCl8MHg5MDIwMiwgKDB4MDk8PDIwKXwweDk2NjAyLCAoMHgwOTw8MjApfDB4OTc2MDJ9OworI2RlZmluZSBBSVJPSEFfVFhWR0FfTE9XX0lOREVYCQkzMQkJLy8gSW5kZXggZm9yIDB4OTAyMDIKKyNkZWZpbmUgQUlST0hBX1RYVkdBX01JRERMRV9JTkRFWAkxMgkJLy8gSW5kZXggZm9yIDB4OTY2MDIKKyNkZWZpbmUgQUlST0hBX1RYVkdBX0hJR0hfSU5ERVgJCTgJCS8vIEluZGV4IGZvciAweDk3NjAyIDEuMC4yNC4wIDEuMC4yOC4wCisvKgordTMyIGFpcm9oYV9wb3dlcl9kYXRhXzI0W10gPQoreworICAgIDB4OUZFMDIsICAgICAgICAgIC8vIE1heCAtIDAgZEIKKyAgICAweDlCRTAyLCAgICAgICAgICAvLyBNYXggLSAxIGRCCisgICAgMHg5REUwMiwgICAgICAgICAgLy8gTWF4IC0gMiBkQgorICAgIDB4OTlFMDIsICAgICAgICAgIC8vIE1heCAtIDMgZEIKKyAgICAweDlFRTAyLCAgICAgICAgICAvLyBNYXggLSA0IGRCCisgICAgMHg5QUUwMiwgICAgICAgICAgLy8gTWF4IC0gNSBkQgorICAgIDB4OUNFMDIsICAgICAgICAgIC8vIE1heCAtIDYgZEIKKyAgICAweDk4RTAyLCAgICAgICAgICAvLyBNYXggLSA3IGRCCisgICAgMHg5NzYwMiwgICAgICAgICAgLy8gTWF4IC0gOCBkQgorICAgIDB4OTM2MDIsICAgICAgICAgIC8vIE1heCAtIDkgZEIKKyAgICAweDk1NjAyLCAgICAgICAgICAvLyBNYXggLSAxMCBkQgorICAgIDB4OTE2MDIsICAgICAgICAgIC8vIE1heCAtIDExIGRCCisgICAgMHg5NjYwMiwgICAgICAgICAgLy8gTWF4IC0gMTIgZEIKKyAgICAweDkyNjAyLCAgICAgICAgICAvLyBNYXggLSAxMyBkQgorICAgIDB4OTQ2MDIsICAgICAgICAgIC8vIE1heCAtIDE0IGRCCisgICAgMHg5MDYwMiwgICAgICAgICAgLy8gTWF4IC0gMTUgZEIKKyAgICAweDk3QTAyLCAgICAgICAgICAvLyBNYXggLSAxNiBkQgorICAgIDB4OTNBMDIsICAgICAgICAgIC8vIE1heCAtIDE3IGRCCisgICAgMHg5NUEwMiwgICAgICAgICAgLy8gTWF4IC0gMTggZEIKKyAgICAweDkxQTAyLCAgICAgICAgICAvLyBNYXggLSAxOSBkQgorICAgIDB4OTZBMDIsICAgICAgICAgIC8vIE1heCAtIDIwIGRCCisgICAgMHg5MkEwMiwgICAgICAgICAgLy8gTWF4IC0gMjEgZEIKKyAgICAweDk0QTAyLCAgICAgICAgICAvLyBNYXggLSAyMiBkQgorICAgIDB4OTBBMDIsICAgICAgICAgIC8vIE1heCAtIDIzIGRCCisgICAgMHg5NzIwMiwgICAgICAgICAgLy8gTWF4IC0gMjQgZEIKKyAgICAweDkzMjAyLCAgICAgICAgICAvLyBNYXggLSAyNSBkQgorICAgIDB4OTUyMDIsICAgICAgICAgIC8vIE1heCAtIDI2IGRCCisgICAgMHg5MTIwMiwgICAgICAgICAgLy8gTWF4IC0gMjcgZEIKKyAgICAweDk2MjAyLCAgICAgICAgICAvLyBNYXggLSAyOCBkQgorICAgIDB4OTIyMDIsICAgICAgICAgIC8vIE1heCAtIDI5IGRCCisgICAgMHg5NDIwMiwgICAgICAgICAgLy8gTWF4IC0gMzAgZEIKKyAgICAweDkwMjAyICAgICAgICAgICAvLyBNYXggLSAzMSBkQgorfTsKKyovCisKKy8vIDIwMDQwOTI3IDEuMS42OS4xMDAwIHliamlhbmcKKy8vIGZyb20gSm9obgordTMyIGFsMjIzMF90eHZnYV9kYXRhW11bMl0gPQoreworCS8vdmFsdWUJLCBpbmRleAorCXsweDA5MDIwMiwgMH0sCisJezB4MDk0MjAyLCAyfSwKKwl7MHgwOTIyMDIsIDR9LAorCXsweDA5NjIwMiwgNn0sCisJezB4MDkxMjAyLCA4fSwKKwl7MHgwOTUyMDIsIDEwfSwKKwl7MHgwOTMyMDIsIDEyfSwKKwl7MHgwOTcyMDIsIDE0fSwKKwl7MHgwOTBBMDIsIDE2fSwKKwl7MHgwOTRBMDIsIDE4fSwKKwl7MHgwOTJBMDIsIDIwfSwKKwl7MHgwOTZBMDIsIDIyfSwKKwl7MHgwOTFBMDIsIDI0fSwKKwl7MHgwOTVBMDIsIDI2fSwKKwl7MHgwOTNBMDIsIDI4fSwKKwl7MHgwOTdBMDIsIDMwfSwKKwl7MHgwOTA2MDIsIDMyfSwKKwl7MHgwOTQ2MDIsIDM0fSwKKwl7MHgwOTI2MDIsIDM2fSwKKwl7MHgwOTY2MDIsIDM4fSwKKwl7MHgwOTE2MDIsIDQwfSwKKwl7MHgwOTU2MDIsIDQyfSwKKwl7MHgwOTM2MDIsIDQ0fSwKKwl7MHgwOTc2MDIsIDQ2fSwKKwl7MHgwOTBFMDIsIDQ4fSwKKwl7MHgwOThFMDIsIDQ5fSwKKwl7MHgwOTRFMDIsIDUwfSwKKwl7MHgwOUNFMDIsIDUxfSwKKwl7MHgwOTJFMDIsIDUyfSwKKwl7MHgwOUFFMDIsIDUzfSwKKwl7MHgwOTZFMDIsIDU0fSwKKwl7MHgwOUVFMDIsIDU1fSwKKwl7MHgwOTFFMDIsIDU2fSwKKwl7MHgwOTlFMDIsIDU3fSwKKwl7MHgwOTVFMDIsIDU4fSwKKwl7MHgwOURFMDIsIDU5fSwKKwl7MHgwOTNFMDIsIDYwfSwKKwl7MHgwOUJFMDIsIDYxfSwKKwl7MHgwOTdFMDIsIDYyfSwKKwl7MHgwOUZFMDIsIDYzfQorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRm9yIEFpcm9oYSBBTDcyMzAsIDIuNEdoeiBiYW5kCisvLyBFZGl0IGJ5IFRpZ2VyLCAoTWFyY2gsIDksIDIwMDUpCisvLyAyNGJpdCwgTVNCIGZpcnN0CisKKy8vY2hhbm5lbCBpbmRlcGVuZGVudCByZWdpc3RlcnM6Cit1MzIgYWw3MjMwX3JmX2RhdGFfMjRbXQk9Cit7CisJKDB4MDA8PDI0KXwweDAwMzc5MCwKKwkoMHgwMTw8MjQpfDB4MTMzMzMxLAorCSgweDAyPDwyNCl8MHg4NDFGRjIsCisJKDB4MDM8PDI0KXwweDNGREZBMywKKwkoMHgwNDw8MjQpfDB4N0ZENzg0LAorCSgweDA1PDwyNCl8MHg4MDJCNTUsCisJKDB4MDY8PDI0KXwweDU2QUYzNiwKKwkoMHgwNzw8MjQpfDB4Q0UwMjA3LAorCSgweDA4PDwyNCl8MHg2RUJDMDgsCisJKDB4MDk8PDI0KXwweDIyMUJCOSwKKwkoMHgwQTw8MjQpfDB4RTAwMDBBLAorCSgweDBCPDwyNCl8MHgwODA3MUIsCisJKDB4MEM8PDI0KXwweDAwMEEzQywKKwkoMHgwRDw8MjQpfDB4RkZGRkZELAorCSgweDBFPDwyNCl8MHgwMDAwMEUsCisJKDB4MEY8PDI0KXwweDFBQkE4RgorfTsKKwordTMyIGFsNzIzMF9jaGFubmVsX2RhdGFfMjRbXVsyXSA9Cit7CisgICAgeygweDAwPDwyNCl8MHgwMDM3OTAsICgweDAxPDwyNCl8MHgxMzMzMzF9LCAvLyBjaGFubmUxIDAxCisgICAgeygweDAwPDwyNCl8MHgwMDM3OTAsICgweDAxPDwyNCl8MHgxQjMzMzF9LCAvLyBjaGFubmUxIDAyCisgICAgeygweDAwPDwyNCl8MHgwMDM3OTAsICgweDAxPDwyNCl8MHgwMzMzMzF9LCAvLyBjaGFubmUxIDAzCisgICAgeygweDAwPDwyNCl8MHgwMDM3OTAsICgweDAxPDwyNCl8MHgwQjMzMzF9LCAvLyBjaGFubmUxIDA0CisgICAgeygweDAwPDwyNCl8MHgwMDM3QTAsICgweDAxPDwyNCl8MHgxMzMzMzF9LCAvLyBjaGFubmUxIDA1CisgICAgeygweDAwPDwyNCl8MHgwMDM3QTAsICgweDAxPDwyNCl8MHgxQjMzMzF9LCAvLyBjaGFubmUxIDA2CisgICAgeygweDAwPDwyNCl8MHgwMDM3QTAsICgweDAxPDwyNCl8MHgwMzMzMzF9LCAvLyBjaGFubmUxIDA3CisgICAgeygweDAwPDwyNCl8MHgwMDM3QTAsICgweDAxPDwyNCl8MHgwQjMzMzF9LCAvLyBjaGFubmUxIDA4CisgICAgeygweDAwPDwyNCl8MHgwMDM3QjAsICgweDAxPDwyNCl8MHgxMzMzMzF9LCAvLyBjaGFubmUxIDA5CisgICAgeygweDAwPDwyNCl8MHgwMDM3QjAsICgweDAxPDwyNCl8MHgxQjMzMzF9LCAvLyBjaGFubmUxIDEwCisgICAgeygweDAwPDwyNCl8MHgwMDM3QjAsICgweDAxPDwyNCl8MHgwMzMzMzF9LCAvLyBjaGFubmUxIDExCisgICAgeygweDAwPDwyNCl8MHgwMDM3QjAsICgweDAxPDwyNCl8MHgwQjMzMzF9LCAvLyBjaGFubmUxIDEyCisgICAgeygweDAwPDwyNCl8MHgwMDM3QzAsICgweDAxPDwyNCl8MHgxMzMzMzF9LCAvLyBjaGFubmUxIDEzCisJeygweDAwPDwyNCl8MHgwMDM3QzAsICgweDAxPDwyNCl8MHgwNjY2NjF9ICAvLyBjaGFubmVsIDE0Cit9OworCisvL2NoYW5uZWwgaW5kZXBlbmRlbnQgcmVnaXN0ZXJzOgordTMyIGFsNzIzMF9yZl9kYXRhXzUwW10JPQoreworCSgweDAwPDwyNCl8MHgwRkY1MjAsCisJKDB4MDE8PDI0KXwweDAwMDAwMSwKKwkoMHgwMjw8MjQpfDB4NDUxRkUyLAorCSgweDAzPDwyNCl8MHg1RkRGQTMsCisJKDB4MDQ8PDI0KXwweDZGRDc4NCwKKwkoMHgwNTw8MjQpfDB4ODUzRjU1LAorCSgweDA2PDwyNCl8MHg1NkFGMzYsCisJKDB4MDc8PDI0KXwweENFMDIwNywKKwkoMHgwODw8MjQpfDB4NkVCQzA4LAorCSgweDA5PDwyNCl8MHgyMjFCQjksCisJKDB4MEE8PDI0KXwweEUwNjAwQSwKKwkoMHgwQjw8MjQpfDB4MDgwNDRCLAorCSgweDBDPDwyNCl8MHgwMDE0M0MsCisJKDB4MEQ8PDI0KXwweEZGRkZGRCwKKwkoMHgwRTw8MjQpfDB4MDAwMDBFLAorCSgweDBGPDwyNCl8MHgxMkJBQ0YgLy81R2h6IGRlZmF1bHQgc3RhdGUKK307CisKK3UzMiBhbDcyMzBfY2hhbm5lbF9kYXRhXzVbXVs0XSA9Cit7CisJLy9jaGFubmVsIGRlcGVuZGVudCByZWdpc3RlcnM6IDB4MDAsIDB4MDEgYW5kIDB4MDQKKwkvLzExSiA9PT09PT09PT09PQorCXsxODQsICgweDAwPDwyNCl8MHgwRkY1MjAsICgweDAxPDwyNCl8MHgwMDAwMDEsICgweDA0PDwyNCl8MHg2N0Y3ODR9LCAvLyBjaGFubmVsIDE4NAorCXsxODgsICgweDAwPDwyNCl8MHgwRkY1MjAsICgweDAxPDwyNCl8MHgwQUFBQTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDE4OAorCXsxOTIsICgweDAwPDwyNCl8MHgwRkY1MzAsICgweDAxPDwyNCl8MHgxNTU1NTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDE5MgorCXsxOTYsICgweDAwPDwyNCl8MHgwRkY1MzAsICgweDAxPDwyNCl8MHgwMDAwMDEsICgweDA0PDwyNCl8MHg2N0Y3ODR9LCAvLyBjaGFubmVsIDE5NgorCXs4LCAgICgweDAwPDwyNCl8MHgwRkY1NDAsICgweDAxPDwyNCl8MHgwMDAwMDEsICgweDA0PDwyNCl8MHg2N0Y3ODR9LCAvLyBjaGFubmVsIDAwOAorCXsxMiwgICgweDAwPDwyNCl8MHgwRkY1NDAsICgweDAxPDwyNCl8MHgwQUFBQTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDAxMgorCXsxNiwgICgweDAwPDwyNCl8MHgwRkY1NTAsICgweDAxPDwyNCl8MHgxNTU1NTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDAxNgorCXszNCwgICgweDAwPDwyNCl8MHgwRkY1NjAsICgweDAxPDwyNCl8MHgwNTU1NTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDAzNAorCXszOCwgICgweDAwPDwyNCl8MHgwRkY1NzAsICgweDAxPDwyNCl8MHgxMDAwMDEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDAzOAorCXs0MiwgICgweDAwPDwyNCl8MHgwRkY1NzAsICgweDAxPDwyNCl8MHgxQUFBQTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDA0MgorCXs0NiwgICgweDAwPDwyNCl8MHgwRkY1NzAsICgweDAxPDwyNCl8MHgwNTU1NTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDA0NgorCS8vMTEgQS9IID09PT09PT09PQorCXszNiwgICgweDAwPDwyNCl8MHgwRkY1NjAsICgweDAxPDwyNCl8MHgwQUFBQTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDAzNgorCXs0MCwgICgweDAwPDwyNCl8MHgwRkY1NzAsICgweDAxPDwyNCl8MHgxNTU1NTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDA0MAorCXs0NCwgICgweDAwPDwyNCl8MHgwRkY1NzAsICgweDAxPDwyNCl8MHgwMDAwMDEsICgweDA0PDwyNCl8MHg2N0Y3ODR9LCAvLyBjaGFubmVsIDA0NAorCXs0OCwgICgweDAwPDwyNCl8MHgwRkY1NzAsICgweDAxPDwyNCl8MHgwQUFBQTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDA0OAorCXs1MiwgICgweDAwPDwyNCl8MHgwRkY1ODAsICgweDAxPDwyNCl8MHgxNTU1NTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDA1MgorCXs1NiwgICgweDAwPDwyNCl8MHgwRkY1ODAsICgweDAxPDwyNCl8MHgwMDAwMDEsICgweDA0PDwyNCl8MHg2N0Y3ODR9LCAvLyBjaGFubmVsIDA1NgorCXs2MCwgICgweDAwPDwyNCl8MHgwRkY1ODAsICgweDAxPDwyNCl8MHgwQUFBQTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDA2MAorCXs2NCwgICgweDAwPDwyNCl8MHgwRkY1OTAsICgweDAxPDwyNCl8MHgxNTU1NTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDA2NAorCXsxMDAsICgweDAwPDwyNCl8MHgwRkY1QzAsICgweDAxPDwyNCl8MHgxNTU1NTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDEwMAorCXsxMDQsICgweDAwPDwyNCl8MHgwRkY1QzAsICgweDAxPDwyNCl8MHgwMDAwMDEsICgweDA0PDwyNCl8MHg2N0Y3ODR9LCAvLyBjaGFubmVsIDEwNAorCXsxMDgsICgweDAwPDwyNCl8MHgwRkY1QzAsICgweDAxPDwyNCl8MHgwQUFBQTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDEwOAorCXsxMTIsICgweDAwPDwyNCl8MHgwRkY1RDAsICgweDAxPDwyNCl8MHgxNTU1NTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDExMgorCXsxMTYsICgweDAwPDwyNCl8MHgwRkY1RDAsICgweDAxPDwyNCl8MHgwMDAwMDEsICgweDA0PDwyNCl8MHg2N0Y3ODR9LCAvLyBjaGFubmVsIDExNgorCXsxMjAsICgweDAwPDwyNCl8MHgwRkY1RDAsICgweDAxPDwyNCl8MHgwQUFBQTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDEyMAorCXsxMjQsICgweDAwPDwyNCl8MHgwRkY1RTAsICgweDAxPDwyNCl8MHgxNTU1NTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDEyNAorCXsxMjgsICgweDAwPDwyNCl8MHgwRkY1RTAsICgweDAxPDwyNCl8MHgwMDAwMDEsICgweDA0PDwyNCl8MHg2N0Y3ODR9LCAvLyBjaGFubmVsIDEyOAorCXsxMzIsICgweDAwPDwyNCl8MHgwRkY1RTAsICgweDAxPDwyNCl8MHgwQUFBQTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDEzMgorCXsxMzYsICgweDAwPDwyNCl8MHgwRkY1RjAsICgweDAxPDwyNCl8MHgxNTU1NTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDEzNgorCXsxNDAsICgweDAwPDwyNCl8MHgwRkY1RjAsICgweDAxPDwyNCl8MHgwMDAwMDEsICgweDA0PDwyNCl8MHg2N0Y3ODR9LCAvLyBjaGFubmVsIDE0MAorCXsxNDksICgweDAwPDwyNCl8MHgwRkY2MDAsICgweDAxPDwyNCl8MHgxODAwMDEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDE0OQorCXsxNTMsICgweDAwPDwyNCl8MHgwRkY2MDAsICgweDAxPDwyNCl8MHgwMkFBQTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDE1MworCXsxNTcsICgweDAwPDwyNCl8MHgwRkY2MDAsICgweDAxPDwyNCl8MHgwRDU1NTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDE1NworCXsxNjEsICgweDAwPDwyNCl8MHgwRkY2MTAsICgweDAxPDwyNCl8MHgxODAwMDEsICgweDA0PDwyNCl8MHg3N0Y3ODR9LCAvLyBjaGFubmVsIDE2MQorCXsxNjUsICgweDAwPDwyNCl8MHgwRkY2MTAsICgweDAxPDwyNCl8MHgwMkFBQTEsICgweDA0PDwyNCl8MHg3N0Y3ODR9ICAvLyBjaGFubmVsIDE2NQorfTsKKworLy87IFJGIENhbGlicmF0aW9uIDw9PT0gUmVnaXN0ZXIgMHgwRgorLy8weDBGIDB4MUFCQThGOyBzdGFydCBmcm9tIDIuNEdoeiBkZWZhdWx0IHN0YXRlCisvLzB4MEYgMHg5QUJBOEY7IFRYREMgY29tcGVuc2F0aW9uCisvLzB4MEYgMHgzQUJBOEY7IFJYRklMIGFkanVzdG1lbnQKKy8vMHgwRiAweDFBQkE4RjsgcmVzdG9yZSAyLjRHaHogZGVmYXVsdCBzdGF0ZQorCisvLztUWFZHQSBNYXBwaW5nIFRhYmxlIDw9PT0gUmVnaXN0ZXIgMHgwQgordTMyIGFsNzIzMF90eHZnYV9kYXRhW11bMl0gPQoreworCXsweDA4MDQwQiwgMH0sIC8vVFhWR0E9MDsKKwl7MHgwODA0MUIsIDF9LCAvL1RYVkdBPTE7CisJezB4MDgwNDJCLCAyfSwgLy9UWFZHQT0yOworCXsweDA4MDQzQiwgM30sIC8vVFhWR0E9MzsKKwl7MHgwODA0NEIsIDR9LCAvL1RYVkdBPTQ7CisJezB4MDgwNDVCLCA1fSwgLy9UWFZHQT01OworCXsweDA4MDQ2QiwgNn0sIC8vVFhWR0E9NjsKKwl7MHgwODA0N0IsIDd9LCAvL1RYVkdBPTc7CisJezB4MDgwNDhCLCA4fSwgLy9UWFZHQT04OworCXsweDA4MDQ5QiwgOX0sIC8vVFhWR0E9OTsKKwl7MHgwODA0QUIsIDEwfSwgLy9UWFZHQT0xMDsKKwl7MHgwODA0QkIsIDExfSwgLy9UWFZHQT0xMTsKKwl7MHgwODA0Q0IsIDEyfSwgLy9UWFZHQT0xMjsKKwl7MHgwODA0REIsIDEzfSwgLy9UWFZHQT0xMzsKKwl7MHgwODA0RUIsIDE0fSwgLy9UWFZHQT0xNDsKKwl7MHgwODA0RkIsIDE1fSwgLy9UWFZHQT0xNTsKKwl7MHgwODA1MEIsIDE2fSwgLy9UWFZHQT0xNjsKKwl7MHgwODA1MUIsIDE3fSwgLy9UWFZHQT0xNzsKKwl7MHgwODA1MkIsIDE4fSwgLy9UWFZHQT0xODsKKwl7MHgwODA1M0IsIDE5fSwgLy9UWFZHQT0xOTsKKwl7MHgwODA1NEIsIDIwfSwgLy9UWFZHQT0yMDsKKwl7MHgwODA1NUIsIDIxfSwgLy9UWFZHQT0yMTsKKwl7MHgwODA1NkIsIDIyfSwgLy9UWFZHQT0yMjsKKwl7MHgwODA1N0IsIDIzfSwgLy9UWFZHQT0yMzsKKwl7MHgwODA1OEIsIDI0fSwgLy9UWFZHQT0yNDsKKwl7MHgwODA1OUIsIDI1fSwgLy9UWFZHQT0yNTsKKwl7MHgwODA1QUIsIDI2fSwgLy9UWFZHQT0yNjsKKwl7MHgwODA1QkIsIDI3fSwgLy9UWFZHQT0yNzsKKwl7MHgwODA1Q0IsIDI4fSwgLy9UWFZHQT0yODsKKwl7MHgwODA1REIsIDI5fSwgLy9UWFZHQT0yOTsKKwl7MHgwODA1RUIsIDMwfSwgLy9UWFZHQT0zMDsKKwl7MHgwODA1RkIsIDMxfSwgLy9UWFZHQT0zMTsKKwl7MHgwODA2MEIsIDMyfSwgLy9UWFZHQT0zMjsKKwl7MHgwODA2MUIsIDMzfSwgLy9UWFZHQT0zMzsKKwl7MHgwODA2MkIsIDM0fSwgLy9UWFZHQT0zNDsKKwl7MHgwODA2M0IsIDM1fSwgLy9UWFZHQT0zNTsKKwl7MHgwODA2NEIsIDM2fSwgLy9UWFZHQT0zNjsKKwl7MHgwODA2NUIsIDM3fSwgLy9UWFZHQT0zNzsKKwl7MHgwODA2NkIsIDM4fSwgLy9UWFZHQT0zODsKKwl7MHgwODA2N0IsIDM5fSwgLy9UWFZHQT0zOTsKKwl7MHgwODA2OEIsIDQwfSwgLy9UWFZHQT00MDsKKwl7MHgwODA2OUIsIDQxfSwgLy9UWFZHQT00MTsKKwl7MHgwODA2QUIsIDQyfSwgLy9UWFZHQT00MjsKKwl7MHgwODA2QkIsIDQzfSwgLy9UWFZHQT00MzsKKwl7MHgwODA2Q0IsIDQ0fSwgLy9UWFZHQT00NDsKKwl7MHgwODA2REIsIDQ1fSwgLy9UWFZHQT00NTsKKwl7MHgwODA2RUIsIDQ2fSwgLy9UWFZHQT00NjsKKwl7MHgwODA2RkIsIDQ3fSwgLy9UWFZHQT00NzsKKwl7MHgwODA3MEIsIDQ4fSwgLy9UWFZHQT00ODsKKwl7MHgwODA3MUIsIDQ5fSwgLy9UWFZHQT00OTsKKwl7MHgwODA3MkIsIDUwfSwgLy9UWFZHQT01MDsKKwl7MHgwODA3M0IsIDUxfSwgLy9UWFZHQT01MTsKKwl7MHgwODA3NEIsIDUyfSwgLy9UWFZHQT01MjsKKwl7MHgwODA3NUIsIDUzfSwgLy9UWFZHQT01MzsKKwl7MHgwODA3NkIsIDU0fSwgLy9UWFZHQT01NDsKKwl7MHgwODA3N0IsIDU1fSwgLy9UWFZHQT01NTsKKwl7MHgwODA3OEIsIDU2fSwgLy9UWFZHQT01NjsKKwl7MHgwODA3OUIsIDU3fSwgLy9UWFZHQT01NzsKKwl7MHgwODA3QUIsIDU4fSwgLy9UWFZHQT01ODsKKwl7MHgwODA3QkIsIDU5fSwgLy9UWFZHQT01OTsKKwl7MHgwODA3Q0IsIDYwfSwgLy9UWFZHQT02MDsKKwl7MHgwODA3REIsIDYxfSwgLy9UWFZHQT02MTsKKwl7MHgwODA3RUIsIDYyfSwgLy9UWFZHQT02MjsKKwl7MHgwODA3RkIsIDYzfSwgLy9UWFZHQT02MzsKK307CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworLy87IFc4OVJGMjQyIFJGSUMgU1BJIHByb2dyYW1taW5nIGluaXRpYWwgZGF0YQorLy87IFdpbmJvbmQgV0xBTiAxMWcgUkZJQyBCQi1TUEkgcmVnaXN0ZXIgLS0gdmVyc2lvbiBGQTU5NzZBIHJldiAxLjNiCisvLzsgVXBkYXRlIERhdGU6IE9jb3RiZXIgMywgMjAwNSBieSBQUDEwIEhzaWFuZy1UZSBIbworLy87CisvLzsgVmVyc2lvbiAxLjNiIHJldmlzaW9uIGl0ZW1zOiAoT2N0LiAxLCAyMDA1IGJ5IEhUSG8pIGZvciBGQTU5NzZBCit1MzIgdzg5cmYyNDJfcmZfZGF0YVtdICAgICA9Cit7CisgICAgKDB4MDA8PDI0KXwweEY4NjEwMCwgLy8gMjAwNjA3MjEgMHhGODYxMDAsIC8vOyAzRTE4NDsgTU9EQSAgKDB4MDApIC0tIE5vcm1hbCBtb2RlIDsgY2FsaWJyYXRpb24gb2ZmCisgICAgKDB4MDE8PDI0KXwweEVGRkZDMiwgLy87IDNCRkZGOyBNT0RCICAoMHgwMSkgLS0gdHVybiBvZmYgUlNTSSwgYW5kIG90aGVyIGNpcmN1aXRzIGFyZSB0dXJuZWQgb24KKyAgICAoMHgwMjw8MjQpfDB4MTAyNTA0LCAvLzsgMDQwOTQ7IEZTRVQgICgweDAyKSAtLSBkZWZhdWx0IDIwTUh6IGNyeXN0YWwgOyBJY21wPTEuNW1BCisgICAgKDB4MDM8PDI0KXwweDAyNjI4NiwgLy87IDAwOThBOyBGQ0hOICAoMHgwMykgLS0gZGVmYXVsdCBDSDcsIDI0NDJNSHoKKyAgICAoMHgwNDw8MjQpfDB4MDAwMjA4LCAvLyAyMDA2MDYxMi4xLmEgMHgwMDAyQzgsIC8vIDIwMDUwODE4IC8vIDIwMDUwODE2IDB4MDAwMzg4CisJCQkJCQkgLy87IDAyMDA4OyBGQ0FMICAoMHgwNCkgLS0gWFRBTCBGcmVxIFRyaW09MDAxMDAwIChzb2NrZXQgYm9hcmQjMSk7IEZBNTk3NkFZR192MS4zQworICAgICgweDA1PDwyNCl8MHgyNEM2MEEsIC8vIDIwMDYwNjEyLjEuYSAweDI0QzU4QSwgLy8gOTQxMDAzIDB4MjRDNDhBLCAvLyAyMDA1MDgxOC4yIDB4MjQ4NDhBLCAvLyAyMDA1MDgxOCAvLyAyMDA1MDgxNiAweDI0QzQ4QQorCQkJCQkJIC8vOyAwOTMxNjsgR0FOQSAgKDB4MDUpIC0tIFRYIFZHQSBkZWZhdWx0IChUWFZHQT0weDE4KDEyKSkgJiBUWEdQSz0xMTAgOyBGQTU5NzZBXzEuM0QKKyAgICAoMHgwNjw8MjQpfDB4MzQzMkNDLCAvLyA5NDEwMDMgMHgyNkMzNEMsIC8vIDIwMDUwODE4IDB4MDZCNDBDCisJCQkJCQkgLy87IDBEMENCOyBHQU5CICAoMHgwNikgLS0gUlhEQyhEQyBvZmZzZXQpIG9uOyBMTkE9MTE7IFJYVkdBPTAwMTAxMSgxMSkgOyBSWEZMU1c9MTEoMDEwMDAxKTsgUlhHUEs9MDA7IFJYR0NGPTAwOyAtNTBkQm0gaW5wdXQKKyAgICAoMHgwNzw8MjQpfDB4MEM2OENFLCAvLyAyMDA1MDgxOC4yIDB4MEM2NkNFLCAvLyAyMDA1MDgxOCAvLyAyMDA1MDgxNiAweDBDNjhDRQorCQkJCQkJIC8vOyAwMzFBMzsgRklMVCAgKDB4MDcpIC0tIFRYL1JYIGZpbHRlciB3aXRoIGF1dG8tdHVuaW5nOyBURkxCVz0wMTE7IFJGTEJXPTEwMAorICAgICgweDA4PDwyNCl8MHgxMDAwMTAsIC8vOyAwNDAwMDsgVENBTCAgKDB4MDgpIC0tIC8vZm9yIExPCisgICAgKDB4MDk8PDI0KXwweDAwNDAxMiwgLy8gMjAwNjA2MTIuMS5hIDB4NkU0MDEyLCAvLyAweDAwNDAxMiwKKwkJCQkJCSAvLzsgMUI5MDA7IFJDQUxBICgweDA5KSAtLSBGQVNUUz0xMTsgSFBERT0wMSAoMTAwbnNlYyk7IFNFSFA9MSAoc2VsZWN0IEIwIHBpbj1SWEhQKTsgUlhIUD0xIChUdXJuIG9uIFJYSFAgZnVuY3Rpb24pKEZBNTk3NkFfMS4zQykKKyAgICAoMHgwQTw8MjQpfDB4NzA0MDE0LCAvLzsgMUMxMDA7IFJDQUxCICgweDBBKQorICAgICgweDBCPDwyNCl8MHgxOEJERDYsIC8vIDk0MTAwMyAweDE4MDVENiwgLy8gMjAwNTA4MTguMiAweDE4MDFENiwgLy8gMjAwNTA4MTggLy8gMjAwNTA4MTYgMHgxODA1RDYKKwkJCQkJCSAvLzsgMDYyRjc7IElRQ0FMICgweDBCKSAtLSBUdXJuIG9uIExPIHBoYXNlIHR1bmVyPTAxMTEgJiBSWC1MTyBwaGFzZSA9IDAxMTE7IEZBNTk3NkFfMS4zQiAoMjAwNS8wOS8yOSkKKyAgICAoMHgwQzw8MjQpfDB4NTc1NTU4LCAvLyAyMDA1MDgxOC4yIDB4NTU1NTU4LCAvLyAyMDA1MDgxOCAvLyAyMDA1MDgxNiAweDU3NTU1OAorCQkJCQkJIC8vOyAxNUQ1NSA7IElCU0EgICgweDBDKSAtLSBJRlByZSA9MTEgOyBUQzUzNzZBX3YxLjNBIGZvciBjb3JuZXIKKyAgICAoMHgwRDw8MjQpfDB4NTU1NDVBLCAvLyAyMDA2MDYxMi4xLmEgMHg1NTU1NUEsCisJCQkJCQkgLy87IDE1NTU1IDsgSUJTQiAgKDB4MEQpCisgICAgKDB4MEU8PDI0KXwweDU1NTdEQywgLy8gMjAwNjA2MTIuMS5hIDB4NTU1NTVDLCAvLyA5NDEwMDMgMHg1NTU3REMsCisJCQkJCQkgLy87IDE1NTVGIDsgSUJTQyAgKDB4MEUpIC0tIElSTE5BICYgSVJMTkIgKFBUQVQgJiBDb25zdCBjdXJyZW50KT0wMS8wMTsgRkE1OTc2Ql8xLjNGICgyMDA1LzExLzI1KQorCSgweDEwPDwyNCl8MHgwMDBDMjAsIC8vIDk0MTAwMyAweDAwMDAyMCwgLy8gMjAwNTA4MTgKKwkJCQkJCSAvLzsgMDAwMzAgOyBUTU9EQSAoMHgxMCkgLS0gTE5BX2dhaW5fc3RlcD0wMDExIDsgTE5BPTE1LzE2ZEIKKwkoMHgxMTw8MjQpfDB4MEMwMDIyLCAvLyA5NDEwMDMgMHgwMzAwMjIgIC8vIDIwMDUwODE4LjIgMHgwMzAwMjIgIC8vIDIwMDUwODE4IC8vIDIwMDUwODE2IDB4MEMwMDIyCisJCQkJCQkgLy87IDAzMDAwIDsgVE1PREIgKDB4MTEpIC0tIFR1cm4gT04gUlgtUSBwYXRoIFRlc3QgU3dpdGNoOyBUbyBpbXByb3ZlIElRIHBhdGggZ3JvdXAgZGVsYXkgKEZBNTk3NkFfMS4zQykKKwkoMHgxMjw8MjQpfDB4MDAwMDI0ICAvLyAyMDA2MDYxMi4xLmEgMHgwMDE4MjQgIC8vIDk0MTAwMyBhZGQKKwkJCQkJCSAvLzsgVE1PREMgKDB4MTIpIC0tIFR1cm4gT0ZGIFRlbXBlYXJ1cmUgc2Vuc29yCit9OworCit1MzIgdzg5cmYyNDJfY2hhbm5lbF9kYXRhXzI0W11bMl0gPQoreworICAgIHsoMHgwMzw8MjQpfDB4MDI1QjA2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSwgLy8gY2hhbm5lMSAwMQorICAgIHsoMHgwMzw8MjQpfDB4MDI1QzQ2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSwgLy8gY2hhbm5lMSAwMgorICAgIHsoMHgwMzw8MjQpfDB4MDI1RDg2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSwgLy8gY2hhbm5lMSAwMworICAgIHsoMHgwMzw8MjQpfDB4MDI1RUM2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSwgLy8gY2hhbm5lMSAwNAorICAgIHsoMHgwMzw8MjQpfDB4MDI2MDA2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSwgLy8gY2hhbm5lMSAwNQorICAgIHsoMHgwMzw8MjQpfDB4MDI2MTQ2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSwgLy8gY2hhbm5lMSAwNgorICAgIHsoMHgwMzw8MjQpfDB4MDI2Mjg2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSwgLy8gY2hhbm5lMSAwNworICAgIHsoMHgwMzw8MjQpfDB4MDI2M0M2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSwgLy8gY2hhbm5lMSAwOAorICAgIHsoMHgwMzw8MjQpfDB4MDI2NTA2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSwgLy8gY2hhbm5lMSAwOQorICAgIHsoMHgwMzw8MjQpfDB4MDI2NjQ2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSwgLy8gY2hhbm5lMSAxMAorICAgIHsoMHgwMzw8MjQpfDB4MDI2Nzg2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSwgLy8gY2hhbm5lMSAxMQorICAgIHsoMHgwMzw8MjQpfDB4MDI2OEM2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSwgLy8gY2hhbm5lMSAxMgorICAgIHsoMHgwMzw8MjQpfDB4MDI2QTA2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSwgLy8gY2hhbm5lMSAxMworICAgIHsoMHgwMzw8MjQpfDB4MDI2RDA2LCAoMHgwNDw8MjQpfDB4MDgwNDA4fSAgLy8gY2hhbm5lMSAxNAorfTsKKwordTMyIHc4OXJmMjQyX3Bvd2VyX2RhdGFfMjRbXSA9IHsoMHgwNTw8MjQpfDB4MjRDNDhBLCAoMHgwNTw8MjQpfDB4MjRDNDhBLCAoMHgwNTw8MjQpfDB4MjRDNDhBfTsKKworLy8gMjAwNjAzMTUuNiBFbmxhcmdlIGZvciBuZXcgc2NhbGUKKy8vIDIwMDYwMzE2LjYgMjAwNjA2MTkuMi5hIGFkZCBtYXBwaW5nIGFycmF5Cit1MzIgdzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmdbXVsyXSA9Cit7CisJezAsIDB9ICwgLy8gTmV3IDwtPiBPbGQKKwl7MSwgMX0gLAorCXsyLCAyfSAsCisJezMsIDN9ICwKKwl7NCwgNH0gLAorCXs2LCA1fSAsCisJezgsIDYgfSwKKwl7MTAsIDcgfSwKKwl7MTIsIDggfSwKKwl7MTQsIDkgfSwKKwl7MTYsIDEwfSwKKwl7MTgsIDExfSwKKwl7MjAsIDEyfSwKKwl7MjIsIDEzfSwKKwl7MjQsIDE0fSwKKwl7MjYsIDE1fSwKKwl7MjgsIDE2fSwKKwl7MzAsIDE3fSwKKwl7MzIsIDE4fSwKKwl7MzQsIDE5fSwKKworCit9OworCisvLyAyMDA2MDYxOS4zIG1vZGlmeSBmcm9tIEJydWNlJ3MgbWFpbAordTMyIHc4OXJmMjQyX3R4dmdhX2RhdGFbXVs1XSA9Cit7CisJLy9sb3cgZ2FpbiBtb2RlCisJeyAoMHgwNTw8MjQpfDB4MjRDMDBBLCAwLCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDUyNTIzMTMxIH0sLy8gIDsgbWluIGdhaW4KKwl7ICgweDA1PDwyNCl8MHgyNEM4MEEsIDEsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NTI1MjMxMzEgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEMwNEEsIDIsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NTI1MjMxMzEgfSwvLyAgKGRlZmF1bHQpICsxNGRCbSAoQU5UKQorCXsgKDB4MDU8PDI0KXwweDI0Qzg0QSwgMywgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1MjUyMzEzMSB9LAorCisJLy9UWFZHQT0weDEwCisJeyAoMHgwNTw8MjQpfDB4MjRDNDBBLCA0LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDYwNjAzODM4IH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNDBBLCA1LCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDY1NjUzQjNCIH0sCisKKwkvL1RYVkdBPTB4MTEKKwl7ICgweDA1PDwyNCl8MHgyNEM0NEEsIDYsIDB4MDAyNDFGMTMsIDB4MDcwMEZGRkYsIDB4NTg1ODMzMzMgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM0NEEsIDcsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NUU1RTM3MzcgfSwKKworCS8vVFhWR0E9MHgxMgorCXsgKDB4MDU8PDI0KXwweDI0QzQ4QSwgOCwgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg1MzUzMzAzMCB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzQ4QSwgOSwgMHgwMDI0MUYxMywgMHgwNzAwRkZGRiwgMHg1OTU5MzQzNCB9LAorCisJLy9UWFZHQT0weDEzCisJeyAoMHgwNTw8MjQpfDB4MjRDNENBLCAxMCwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1MjUyMzAzMCB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzRDQSwgMTEsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NTY1NjMyMzIgfSwKKworCS8vVFhWR0E9MHgxNAorCXsgKDB4MDU8PDI0KXwweDI0QzUwQSwgMTIsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NTQ1NDMxMzEgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM1MEEsIDEzLCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDU4NTgzNDM0IH0sCisKKwkvL1RYVkdBPTB4MTUKKwl7ICgweDA1PDwyNCl8MHgyNEM1NEEsIDE0LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDU0NTQzMTMxIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNTRBLCAxNSwgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg1OTU5MzQzNCB9LAorCisJLy9UWFZHQT0weDE2CisJeyAoMHgwNTw8MjQpfDB4MjRDNThBLCAxNiwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1NTU1MzEzMSB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzU4QSwgMTcsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NUI1QjM1MzUgfSwKKworCS8vVFhWR0E9MHgxNworCXsgKDB4MDU8PDI0KXwweDI0QzVDQSwgMTgsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NTE1MTJGMkYgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM1Q0EsIDE5LCAweDAwMjQxRjEzLCAweDA3MDBGRkZGLCAweDU1NTUzMTMxIH0sCisKKwkvL1RYVkdBPTB4MTgKKwl7ICgweDA1PDwyNCl8MHgyNEM2MEEsIDIwLCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDRGNEYyRTJFIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNjBBLCAyMSwgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg1MzUzMzAzMCB9LAorCisJLy9UWFZHQT0weDE5CisJeyAoMHgwNTw8MjQpfDB4MjRDNjRBLCAyMiwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg0RTRFMkQyRCB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzY0QSwgMjMsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NTM1MzMwMzAgfSwKKworCS8vVFhWR0E9MHgxQQorCXsgKDB4MDU8PDI0KXwweDI0QzY4QSwgMjQsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NTA1MDJFMkUgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM2OEEsIDI1LCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDU1NTUzMTMxIH0sCisKKwkvL1RYVkdBPTB4MUIKKwl7ICgweDA1PDwyNCl8MHgyNEM2Q0EsIDI2LCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDUzNTMzMDMwIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNkNBLCAyNywgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1QTVBMzQzNCB9LAorCisJLy9UWFZHQT0weDFDCisJeyAoMHgwNTw8MjQpfDB4MjRDNzBBLCAyOCwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1NTU1MzEzMSB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzcwQSwgMjksIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NUQ1RDM2MzYgfSwKKworCS8vVFhWR0E9MHgxRAorCXsgKDB4MDU8PDI0KXwweDI0Qzc0QSwgMzAsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NUY1RjM3MzcgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM3NEEsIDMxLCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDY1NjUzQjNCIH0sCisKKwkvL1RYVkdBPTB4MUUKKwl7ICgweDA1PDwyNCl8MHgyNEM3OEEsIDMyLCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDY2NjYzQjNCIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNzhBLCAzMywgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg3MDcwNDE0MSB9LAorCisJLy9UWFZHQT0weDFGCisJeyAoMHgwNTw8MjQpfDB4MjRDN0NBLCAzNCwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg3MjcyNDI0MiB9Cit9OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBVeHhfUmVhZEV0aGVybmV0QWRkcmVzcyAtLQorLy8KKy8vICBSb3V0aW5lIERlc2NyaXB0aW9uOgorLy8gICAgUmVhZHMgaW4gdGhlIEV0aGVybmV0IGFkZHJlc3MgZnJvbSB0aGUgSUMuCisvLworLy8gIEFyZ3VtZW50czoKKy8vICAgIHBId0RhdGEgICAgICAgIC0gVGhlIHBId0RhdGEgc3RydWN0dXJlCisvLworLy8gIFJldHVybiBWYWx1ZToKKy8vCisvLyAgICBUaGUgYWRkcmVzcyBpcyBzdG9yZWQgaW4gRXRoZXJuZXRJREFkZHIuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQKK1V4eF9SZWFkRXRoZXJuZXRBZGRyZXNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwl1MzIJbHRtcDsKKworCS8vIFJlYWRpbmcgRXRoZXJuZXQgYWRkcmVzcyBmcm9tIEVFUFJPTSBhbmQgc2V0IGludG8gaGFyZHdhcmUgZHVlIHRvIE1BQyBhZGRyZXNzIG1heWJlIGNoYW5nZS4KKwkvLyBPbmx5IHVucGx1ZyBhbmQgcGx1ZyBhZ2FpbiBjYW4gbWFrZSBoYXJkd2FyZSByZWFkIEVFUFJPTSBhZ2Fpbi4gMjAwNjA3MjcKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2I0LCAweDA4MDAwMDAwICk7IC8vIFN0YXJ0IEVFUFJPTSBhY2Nlc3MgKyBSZWFkICsgYWRkcmVzcygweDBkKQorCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNiNCwgJmx0bXAgKTsKKwkqKFBVU0hPUlQpcEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcyA9IGNwdV90b19sZTE2KCh1MTYpbHRtcCk7IC8vMjAwNjA5MjYgYW5zb24ncyBlbmRpYW4KKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2I0LCAweDA4MDEwMDAwICk7IC8vIFN0YXJ0IEVFUFJPTSBhY2Nlc3MgKyBSZWFkICsgYWRkcmVzcygweDBkKQorCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNiNCwgJmx0bXAgKTsKKwkqKFBVU0hPUlQpKHBId0RhdGEtPlBlcm1hbmVudE1hY0FkZHJlc3MgKyAyKSA9IGNwdV90b19sZTE2KCh1MTYpbHRtcCk7IC8vMjAwNjA5MjYgYW5zb24ncyBlbmRpYW4KKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2I0LCAweDA4MDIwMDAwICk7IC8vIFN0YXJ0IEVFUFJPTSBhY2Nlc3MgKyBSZWFkICsgYWRkcmVzcygweDBkKQorCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNiNCwgJmx0bXAgKTsKKwkqKFBVU0hPUlQpKHBId0RhdGEtPlBlcm1hbmVudE1hY0FkZHJlc3MgKyA0KSA9IGNwdV90b19sZTE2KCh1MTYpbHRtcCk7IC8vMjAwNjA5MjYgYW5zb24ncyBlbmRpYW4KKwkqKFBVU0hPUlQpKHBId0RhdGEtPlBlcm1hbmVudE1hY0FkZHJlc3MgKyA2KSA9IDA7CisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNlOCwgY3B1X3RvX2xlMzIoKihQVUxPTkcpcEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcykgKTsgLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZWMsIGNwdV90b19sZTMyKCooUFVMT05HKShwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzKzQpKSApOyAvLzIwMDYwOTI2IGFuc29uJ3MgZW5kaWFuCit9CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBDYXJkR2V0TXVsdGljYXN0Qml0IC0tCisvLyAgRGVzY3JpcHRpb246CisvLyAgICBGb3IgYSBnaXZlbiBtdWx0aWNhc3QgYWRkcmVzcywgcmV0dXJucyB0aGUgYnl0ZSBhbmQgYml0IGluIHRoZSBjYXJkIG11bHRpY2FzdCByZWdpc3RlcnMgdGhhdCBpdCBoYXNoZXMgdG8uCisvLyAgICBDYWxscyBDYXJkQ29tcHV0ZUNyYygpIHRvIGRldGVybWluZSB0aGUgQ1JDIHZhbHVlLgorLy8gIEFyZ3VtZW50czoKKy8vICAgIEFkZHJlc3MgLSB0aGUgYWRkcmVzcworLy8gICAgQnl0ZSAtIHRoZSBieXRlIHRoYXQgaXQgaGFzaGVzIHRvCisvLyAgICBWYWx1ZSAtIHdpbGwgaGF2ZSBhIDEgaW4gdGhlIHJlbGV2YW50IGJpdAorLy8gIFJldHVybiBWYWx1ZToKKy8vICAgIE5vbmUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2b2lkIENhcmRHZXRNdWx0aWNhc3RCaXQoICAgdTggQWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1NdLAorCQkJCQkJICAgdTggKkJ5dGUsICB1OCAqVmFsdWUgKQoreworICAgIHUzMiBDcmM7CisgICAgdTMyIEJpdE51bWJlcjsKKworICAgIC8vIEZpcnN0IGNvbXB1dGUgdGhlIENSQy4KKyAgICBDcmMgPSBDYXJkQ29tcHV0ZUNyYyhBZGRyZXNzLCBFVEhfTEVOR1RIX09GX0FERFJFU1MpOworCisJLy8gVGhlIGNvbXB1dGVkIENSQyBpcyBiaXQwfjMxIGZyb20gbGVmdCB0byByaWdodAorCS8vQXQgZmlyc3Qgd2Ugc2hvdWxkIGRvIHJpZ2h0IHNoaWZ0IDI1Yml0cywgYW5kIHJlYWQgN2JpdHMgYnkgdXNpbmcgJyYnLCAyXjc9MTI4CisJQml0TnVtYmVyID0gKHUzMikgKChDcmMgPj4gMjYpICYgMHgzZik7CisKKwkqQnl0ZSAgPSAodTgpIChCaXROdW1iZXIgPj4gMyk7Ly8gOTAwNTE0IG9yaWdpbmFsIChCaXROdW1iZXIgLyA4KQorCSpWYWx1ZSA9ICh1OCkgKCh1OCkxIDw8IChCaXROdW1iZXIgJSA4KSk7Cit9CisKK3ZvaWQgVXh4X3Bvd2VyX29uX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJdTMyCWx0bXAsIGxvb3A7CisKKwlpZiggcEh3RGF0YS0+cGh5X3R5cGUgPD0gUkZfTUFYSU1fVjEgKQorCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Q0LCAweGZmZmZmZjM4ICk7CisJZWxzZQorCXsKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNmNCwgMHhGRjU4MDdGRiApOy8vIDIwMDYwNzIxIEZvciBORVcgSUMgMHhGRjU4MDdGRgorCisJCS8vIDIwMDYwNTExLjEgRml4IHRoZSBmb2xsb3dpbmcgNCBzdGVwcyBmb3IgUnggb2YgUkYgMjIzMCBpbml0aWFsIGZhaWwKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkNCwgMHg4MCApOy8vIHJlZ3VsYXRvciBvbiBvbmx5CisJCU9TX1NMRUVQKDEwMDAwKTsgLy8gTW9kaWZ5IDIwMDUxMjIxLjEuYgorCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Q0LCAweGI4ICk7Ly8gUkVHX09OIFJGX1JTVE4gb24sIGFuZAorCQlPU19TTEVFUCgxMDAwMCk7IC8vIE1vZGlmeSAyMDA1MTIyMS4xLmIKKworCQlsdG1wID0gMHg0OTY4OworCQlpZiggKHBId0RhdGEtPnBoeV90eXBlID09IFJGX1dCXzI0MikgfHwKKwkJCShSRl9XQl8yNDJfMSA9PSBwSHdEYXRhLT5waHlfdHlwZSkgKSAvLyAyMDA2MDYxOS41IEFkZAorCQkJbHRtcCA9IDB4NDQ2ODsKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkMCwgbHRtcCApOworCisJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZDQsIDB4YTAgKTsvLyBQTExfUEQgUkVGX1BEIHNldCB0byAwCisKKwkJT1NfU0xFRVAoMjAwMDApOyAvLyBNb2RpZnkgMjAwNTEyMjEuMS5iCisJCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNkMCwgJmx0bXAgKTsKKwkJbG9vcCA9IDUwMDsgLy8gV2FpdCBmb3IgNSBzZWNvbmQgMjAwNjExMDEKKwkJd2hpbGUoICEobHRtcCAmIDB4MjApICYmIGxvb3AtLSApCisJCXsKKwkJCU9TX1NMRUVQKDEwMDAwKTsgLy8gTW9kaWZ5IDIwMDUxMjIxLjEuYgorCQkJaWYoICFXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDAzZDAsICZsdG1wICkgKQorCQkJCWJyZWFrOworCQl9CisKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkNCwgMHhlMCApOy8vIE1MS19FTgorCX0KKworCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjAsIDEgKTsvLyBSZXNldCBoYXJkd2FyZSBmaXJzdAorCU9TX1NMRUVQKDEwMDAwKTsgLy8gQWRkIHRoaXMgMjAwNTEyMjEuMS5iCisKKwkvLyBTZXQgYnVyc3Qgd3JpdGUgZGVsYXkKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Y4LCAweDdmZiApOworfQorCit2b2lkIFNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF8yNCggIHBod19kYXRhX3QgcEh3RGF0YSwgdTMyICpwbHRtcCAsY2hhciBudW1iZXIpCit7CisJdTgJaTsKKworCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwl7CisJCXBId0RhdGEtPnBoeV9wYXJhW2ldID0gYWw3MjMwX3JmX2RhdGFfMjRbaV07CisJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IChhbDcyMzBfcmZfZGF0YV8yNFtpXSYweGZmZmZmZik7CisJfQorfQorCit2b2lkIFNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF81MCggIHBod19kYXRhX3QgcEh3RGF0YSwgdTMyICpwbHRtcCwgY2hhciBudW1iZXIpCit7CisJdTgJaTsKKworCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwl7CisJCXBId0RhdGEtPnBoeV9wYXJhW2ldID0gYWw3MjMwX3JmX2RhdGFfNTBbaV07CisJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IChhbDcyMzBfcmZfZGF0YV81MFtpXSYweGZmZmZmZik7CisJfQorfQorCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gUkZTeW50aGVzaXplcl9pbml0aWFsIC0tCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQKK1JGU3ludGhlc2l6ZXJfaW5pdGlhbChwaHdfZGF0YV90IHBId0RhdGEpCit7CisJdTMyCWFsdG1wWzMyXTsKKwlQVUxPTkcJcGx0bXAgPSBhbHRtcDsKKwl1MzIJbHRtcDsKKwl1OAludW1iZXI9MHgwMDsgLy8gVGhlIG51bWJlciBvZiByZWdpc3RlciB2YWxlCisJdTgJaTsKKworCS8vCisJLy8gYml0WzMxXSAgICAgIFNQSSBFbmFibGUuCisJLy8gICAgICAgICAgICAgIDE9cGVyZm9ybSBzeW50aGVzaXplciBwcm9ncmFtIG9wZXJhdGlvbi4gVGhpcyBiaXQgd2lsbAorCS8vICAgICAgICAgICAgICBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQuCisJLy8gYml0WzMwXSAgICAgIFNQSSBSL1cgQ29udHJvbAorCS8vICAgICAgICAgICAgICAwPXdyaXRlLCAgICAxPXJlYWQKKwkvLyBiaXRbMjk6MjRdICAgU1BJIERhdGEgRm9ybWF0IExlbmd0aAorCS8vIGJpdFsxNzo0IF0gICBSRiBEYXRhIGJpdHMuCisJLy8gYml0WzMgOjAgXSAgIFJGIGFkZHJlc3MuCisJc3dpdGNoKCBwSHdEYXRhLT5waHlfdHlwZSApCisJeworCWNhc2UgUkZfTUFYSU1fMjgyNToKKwljYXNlIFJGX01BWElNX1YxOiAvLyAxMWcgV2luYm9uZCAybmQgQkIod2l0aCBQaHkgYm9hcmQgKHYxKSArIE1heGltIDMzMSkKKwkJbnVtYmVyID0gc2l6ZW9mKG1heDI4MjVfcmZfZGF0YSkvc2l6ZW9mKG1heDI4MjVfcmZfZGF0YVswXSk7CisJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJeworCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBtYXgyODI1X3JmX2RhdGFbaV07Ly8gQmFja3VwIFJmIHBhcmFtZXRlcgorCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyNV9yZl9kYXRhW2ldLCAxOCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJGX01BWElNXzI4Mjc6CisJCW51bWJlciA9IHNpemVvZihtYXgyODI3X3JmX2RhdGEpL3NpemVvZihtYXgyODI3X3JmX2RhdGFbMF0pOworCQlmb3IoIGk9MDsgaTxudW1iZXI7IGkrKyApCisJCXsKKwkJCXBId0RhdGEtPnBoeV9wYXJhW2ldID0gbWF4MjgyN19yZl9kYXRhW2ldOworCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyN19yZl9kYXRhW2ldLCAxOCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJGX01BWElNXzI4Mjg6CisJCW51bWJlciA9IHNpemVvZihtYXgyODI4X3JmX2RhdGEpL3NpemVvZihtYXgyODI4X3JmX2RhdGFbMF0pOworCQlmb3IoIGk9MDsgaTxudW1iZXI7IGkrKyApCisJCXsKKwkJCXBId0RhdGEtPnBoeV9wYXJhW2ldID0gbWF4MjgyOF9yZl9kYXRhW2ldOworCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyOF9yZl9kYXRhW2ldLCAxOCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJGX01BWElNXzI4Mjk6CisJCW51bWJlciA9IHNpemVvZihtYXgyODI5X3JmX2RhdGEpL3NpemVvZihtYXgyODI5X3JmX2RhdGFbMF0pOworCQlmb3IoIGk9MDsgaTxudW1iZXI7IGkrKyApCisJCXsKKwkJCXBId0RhdGEtPnBoeV9wYXJhW2ldID0gbWF4MjgyOV9yZl9kYXRhW2ldOworCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyOV9yZl9kYXRhW2ldLCAxOCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJGX0FJUk9IQV8yMjMwOgorCQludW1iZXIgPSBzaXplb2YoYWwyMjMwX3JmX2RhdGEpL3NpemVvZihhbDIyMzBfcmZfZGF0YVswXSk7CisJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJeworCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBhbDIyMzBfcmZfZGF0YVtpXTsKKwkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoIGFsMjIzMF9yZl9kYXRhW2ldLCAyMCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJGX0FJUk9IQV8yMjMwUzoKKwkJbnVtYmVyID0gc2l6ZW9mKGFsMjIzMHNfcmZfZGF0YSkvc2l6ZW9mKGFsMjIzMHNfcmZfZGF0YVswXSk7CisJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJeworCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBhbDIyMzBzX3JmX2RhdGFbaV07CisJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyMCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBhbDIyMzBzX3JmX2RhdGFbaV0sIDIwKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkZfQUlST0hBXzcyMzA6CisKKwkJLy9TdGFydCB0byBmaWxsIFJGIHBhcmFtZXRlcnMsIFBMTF9PTiBzaG91bGQgYmUgcHVsbGVkIGxvdy4KKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDAwMCApOworI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCQlXQkRFQlVHKCgiKiBQTExfT04gICAgbG93XG4iKSk7CisjZW5kaWYKKworCQludW1iZXIgPSBzaXplb2YoYWw3MjMwX3JmX2RhdGFfMjQpL3NpemVvZihhbDcyMzBfcmZfZGF0YV8yNFswXSk7CisJCVNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF8yNChwSHdEYXRhLCBwbHRtcCwgbnVtYmVyKTsKKwkJYnJlYWs7CisKKwljYXNlIFJGX1dCXzI0MjoKKwljYXNlIFJGX1dCXzI0Ml8xOiAvLyAyMDA2MDYxOS41IEFkZAorCQludW1iZXIgPSBzaXplb2Yodzg5cmYyNDJfcmZfZGF0YSkvc2l6ZW9mKHc4OXJmMjQyX3JmX2RhdGFbMF0pOworCQlmb3IoIGk9MDsgaTxudW1iZXI7IGkrKyApCisJCXsKKwkJCWx0bXAgPSB3ODlyZjI0Ml9yZl9kYXRhW2ldOworCQkJaWYoIGkgPT0gNCApIC8vIFVwZGF0ZSB0aGUgVkNPIHRyaW0gZnJvbSBFRVBST00KKwkJCXsKKwkJCQlsdG1wICY9IH4weGZmMDsgLy8gTWFzayBiaXQ0IH5iaXQxMQorCQkJCWx0bXAgfD0gcEh3RGF0YS0+VkNPX3RyaW08PDQ7CisJCQl9CisKKwkJCXBId0RhdGEtPnBoeV9wYXJhW2ldID0gbHRtcDsKKwkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoIGx0bXAsIDI0KTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlwSHdEYXRhLT5waHlfbnVtYmVyID0gbnVtYmVyOworCisJIC8vIFRoZSAxNiBpcyB0aGUgbWF4aW11bSBjYXBhYmlsaXR5IG9mIGhhcmR3YXJlLiBIZXJlIHVzZSAxMgorCWlmKCBudW1iZXIgPiAxMiApIHsKKwkJLy9XYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIDEyLCBOT19JTkNSRU1FTlQgKTsKKwkJZm9yKCBpPTA7IGk8MTI7IGkrKyApIC8vIEZvciBBbDIyMzAKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wW2ldICk7CisKKwkJcGx0bXAgKz0gMTI7CisJCW51bWJlciAtPSAxMjsKKwl9CisKKwkvLyBXcml0ZSB0byByZWdpc3Rlci4gbnVtYmVyIG11c3QgbGVzcyBhbmQgZXF1YWwgdGhhbiAxNgorCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4ODY0LCBwbHRtcFtpXSApOworCisJLy8gMjAwNjA2MzAuMSBDYWxpYnJhdGlvbiBvbmx5IDEgdGltZQorCWlmKCBwSHdEYXRhLT5DYWxPbmVUaW1lICkKKwkJcmV0dXJuOworCXBId0RhdGEtPkNhbE9uZVRpbWUgPSAxOworCisJc3dpdGNoKCBwSHdEYXRhLT5waHlfdHlwZSApCisJeworCQljYXNlIFJGX0FJUk9IQV8yMjMwOgorCisJCQkvLyAyMDA2MDUxMS4xIC0tLSBNb2RpZnlpbmcgdGhlIGZvbGxvdyBzdGVwIGZvciBSeCBpc3N1ZS0tLS0tLS0tLS0tLS0tLS0tCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDA3PDwyMCl8MHhFMTY4RSwgMjApOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoMTAwMDApOworCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyMCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBhbDIyMzBfcmZfZGF0YVs3XSwgMjApOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoMTAwMDApOworCisJCWNhc2UgUkZfQUlST0hBXzIyMzBTOiAvLyAyMDA2MDQyMCBBZGQgdGhpcworCisJCQkvLyAyMDA2MDUxMS4xIC0tLSBNb2RpZnlpbmcgdGhlIGZvbGxvdyBzdGVwIGZvciBSeCBpc3N1ZS0tLS0tLS0tLS0tLS0tLS0tCisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Q0LCAweDgwICk7Ly8gcmVndWxhdG9yIG9uIG9ubHkKKwkJCU9TX1NMRUVQKDEwMDAwKTsgLy8gTW9kaWZ5IDIwMDUxMjIxLjEuYgorCisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Q0LCAweGEwICk7Ly8gUExMX1BEIFJFRl9QRCBzZXQgdG8gMAorCQkJT1NfU0xFRVAoMTAwMDApOyAvLyBNb2RpZnkgMjAwNTEyMjEuMS5iCisKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZDQsIDB4ZTAgKTsvLyBNTEtfRU4KKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjAsIDEgKTsvLyBSZXNldCBoYXJkd2FyZSBmaXJzdAorCQkJT1NfU0xFRVAoMTAwMDApOyAvLyBBZGQgdGhpcyAyMDA1MTIyMS4xLmIKKwkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJCS8vIFRoZSBmb2xsb3cgY29kZSBkb2Vzbid0IHVzZSB0aGUgYnVyc3Qtd3JpdGUgbW9kZQorCQkJLy9waHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDB4MEYsICgweDBGPDwyMCkgfCAweEYwMUEwKTsgLy9SYWlzZSBJbml0aWFsIFNldHRpbmcKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MEY8PDIwKSB8IDB4RjAxQTAsIDIwKTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKworCQkJbHRtcCA9IHBId0RhdGEtPldiMzVSZWcuQkI1QyAmIDB4ZmZmZmYwMDA7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgxMDVjLCBsdG1wICk7CisJCQlwSHdEYXRhLT5XYjM1UmVnLkJCNTAgfD0gMHgxMzsvLyhNQVNLX0lRQ0FMX01PREV8TUFTS19DQUxJQl9TVEFSVCk7Ly8yMDA2MDMxNS4xIG1vZGlmeQorICAgICAgICAJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MTA1MCwgcEh3RGF0YS0+V2IzNVJlZy5CQjUwKTsKKwkJCU9TX1NMRUVQKDUwMDApOworCisJCQkvL3BoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMHgwRiwgKDB4MEY8PDIwKSB8IDB4RjAxQjApOyAvL0FjdGl2YXRlIEZpbHRlciBDYWwuCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDBGPDwyMCkgfCAweEYwMUIwLCAyMCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCg1MDAwKTsKKworCQkJLy9waHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDB4MEYsICgweDBGPDwyMCkgfCAweEYwMWUwKTsgLy9BY3RpdmF0ZSBUWCBEQ0MKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MEY8PDIwKSB8IDB4RjAxRTAsIDIwKTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKDUwMDApOworCisJCQkvL3BoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMHgwRiwgKDB4MEY8PDIwKSB8IDB4RjAxQTApOyAvL1Jlc290cmUgSW5pdGlhbCBTZXR0aW5nCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDBGPDwyMCkgfCAweEYwMUEwLCAyMCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisKKy8vCQkJLy9Gb3JjZSBUWEkoUSlQKE4pIHRvIG5vcm1hbCBjb250cm9sCisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgxMDVjLCBwSHdEYXRhLT5XYjM1UmVnLkJCNUMgKTsKKwkJCXBId0RhdGEtPldiMzVSZWcuQkI1MCAmPSB+MHgxMzsvLyhNQVNLX0lRQ0FMX01PREV8TUFTS19DQUxJQl9TVEFSVCk7CisgICAgICAgIAlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgxMDUwLCBwSHdEYXRhLT5XYjM1UmVnLkJCNTApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9BSVJPSEFfNzIzMDoKKworCQkJLy9SRiBwYXJhbWV0ZXJzIGhhdmUgZmlsbGVkIGNvbXBsZXRlbHksIFBMTF9PTiBzaG91bGQgYmUKKwkJCS8vcHVsbGVkIGhpZ2gKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZGMsIDB4MDAwMDAwODAgKTsKKwkJCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KKwkJCVdCREVCVUcoKCIqIFBMTF9PTiAgICBoaWdoXG4iKSk7CisJCQkjZW5kaWYKKworCQkJLy8yLjRHSHoKKwkJCS8vbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCAweDFBQkE4RjsKKwkJCS8vV2IzNVJlZ19Xcml0ZVN5bmMgcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL09TX1NMRUVQKDEwMDApOyAvLyBTbGVlcCAxIG1zCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4OUFCQThGOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoNTAwMCk7CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4M0FCQThGOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoNTAwMCk7CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4MUFCQThGOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoNTAwMCk7CisKKwkJCS8vNUdIegorCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDAwMCApOworCQkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCQkJV0JERUJVRygoIiogUExMX09OICAgIGxvd1xuIikpOworCQkJI2VuZGlmCisKKwkJCW51bWJlciA9IHNpemVvZihhbDcyMzBfcmZfZGF0YV81MCkvc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzUwWzBdKTsKKwkJCVNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF81MChwSHdEYXRhLCBwbHRtcCwgbnVtYmVyKTsKKwkJCS8vIFdyaXRlIHRvIHJlZ2lzdGVyLiBudW1iZXIgbXVzdCBsZXNzIGFuZCBlcXVhbCB0aGFuIDE2CisJCQlmb3IoIGk9MDsgaTxudW1iZXI7IGkrKyApCisJCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXBbaV0gKTsKKwkJCU9TX1NMRUVQKDUwMDApOworCisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2RjLCAweDAwMDAwMDgwICk7CisJCQkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJCQlXQkRFQlVHKCgiKiBQTExfT04gICAgaGlnaFxuIikpOworCQkJI2VuZGlmCisKKwkJCS8vbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCAweDEyQkFDRjsKKwkJCS8vV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCAweDlBQkE4RjsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKDUwMDApOworCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCAweDNBQkE4RjsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKDUwMDApOworCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCAweDEyQkFDRjsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKDUwMDApOworCisJCQkvL1diMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZGMsIDB4MDAwMDAwODAgKTsKKwkJCS8vV0JERUJVRygoIiogUExMX09OICAgIGhpZ2hcbiIpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfV0JfMjQyOgorCQljYXNlIFJGX1dCXzI0Ml8xOiAvLyAyMDA2MDYxOS41IEFkZAorCisJCQkvLworCQkJLy8gOyBWZXJzaW9uIDEuM0IgcmV2aXNpb24gaXRlbXM6IGZvciBGQTU5NzZBICwgT2N0b2JlciAzLCAyMDA1IGJ5IEhUSG8KKwkJCS8vCisJCQlsdG1wID0gcEh3RGF0YS0+V2IzNVJlZy5CQjVDICYgMHhmZmZmZjAwMDsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNWMsIGx0bXAgKTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNTgsIDAgKTsKKwkJCXBId0RhdGEtPldiMzVSZWcuQkI1MCB8PSAweDM7Ly8oTUFTS19JUUNBTF9NT0RFfE1BU0tfQ0FMSUJfU1RBUlQpOy8vMjAwNjA2MzAKKwkgICAgICAJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MTA1MCwgcEh3RGF0YS0+V2IzNVJlZy5CQjUwKTsKKworCQkJLy8tLS0tLSBDYWxpYnJhdGlvbiAoMSkuIFZDTyBmcmVxdWVuY3kgY2FsaWJyYXRpb24KKwkJCS8vQ2FsaWJyYXRpb24gKDFhLjApLiBTeW50aGVzaXplciByZXNldCAoSFRIbyBjb3JyZWN0ZWQgMjAwNS8wNS8xMCkKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MEY8PDI0KSB8IDB4MDAxMDFFLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCggNTAwMCApOyAvLyBTbGVlcCA1bXMKKwkJCS8vQ2FsaWJyYXRpb24gKDFhKS4gVkNPIGZyZXF1ZW5jeSBjYWxpYnJhdGlvbiBtb2RlIDsgd2FpdGluZyAybXNlYyBWQ08gY2FsaWJyYXRpb24gdGltZQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGRTY5YzAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKCAyMDAwICk7IC8vIFNsZWVwIDJtcworCisJCQkvLy0tLS0tIENhbGlicmF0aW9uICgyKS4gVFggYmFzZWJhbmQgR20tQyBmaWx0ZXIgYXV0by10dW5pbmcKKwkJCS8vQ2FsaWJyYXRpb24gKDJhKS4gdHVybiBvZmYgRU5DQUwgc2lnbmFsCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEY4RUJDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJLy9DYWxpYnJhdGlvbiAoMmIuMCkuIFRYIGZpbHRlciBhdXRvLXR1bmluZyBCVzogVEZMQlc9MTAxIChUQzUzNzZBIGRlZmF1bHQpCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDA3PDwyNCkgfCAweDBDNjhDRSwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJLy9DYWxpYnJhdGlvbiAoMmIpLiBzZW5kIFRYIHJlc2V0IHNpZ25hbCAoSFRIbyBjb3JyZWN0ZWQgTWF5IDEwLCAyMDA1KQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwRjw8MjQpIHwgMHgwMDIwMUUsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCS8vQ2FsaWJyYXRpb24gKDJjKS4gdHVybi1vbiBUWCBHbS1DIGZpbHRlciBhdXRvLXR1bmluZworCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGQ0VCQzAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKCAxNTAgKTsgLy8gU2xlZXAgMTUwIHVzCisJCQkvL3R1cm4gb2ZmIEVOQ0FMIHNpZ25hbAorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGOEVCQzAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKworCQkJLy8tLS0tLSBDYWxpYnJhdGlvbiAoMykuIFJYIGJhc2ViYW5kIEdtLUMgZmlsdGVyIGF1dG8tdHVuaW5nCisJCQkvL0NhbGlicmF0aW9uICgzYSkuIHR1cm4gb2ZmIEVOQ0FMIHNpZ25hbAorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGQUVEQzAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCS8vQ2FsaWJyYXRpb24gKDNiLjApLiBSWCBmaWx0ZXIgYXV0by10dW5pbmcgQlc6IFJGTEJXPTEwMCAoVEM1Mzc2QStjb3JuZXIgZGVmYXVsdDsgSnVseSAyNiwgMjAwNSkKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDc8PDI0KSB8IDB4MEM2OENFLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICgzYikuIHNlbmQgUlggcmVzZXQgc2lnbmFsIChIVEhvIGNvcnJlY3RlZCBNYXkgMTAsIDIwMDUpCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDBGPDwyNCkgfCAweDAwNDAxRSwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJLy9DYWxpYnJhdGlvbiAoM2MpLiB0dXJuLW9uIFJYIEdtLUMgZmlsdGVyIGF1dG8tdHVuaW5nCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZFRURDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoIDE1MCApOyAvLyBTbGVlcCAxNTAgdXMKKwkJCS8vQ2FsaWJyYXRpb24gKDNlKS4gdHVybiBvZmYgRU5DQUwgc2lnbmFsCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZBRURDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCisJCQkvLy0tLS0tIENhbGlicmF0aW9uICg0KS4gVFggTE8gbGVha2FnZSBjYWxpYnJhdGlvbgorCQkJLy9DYWxpYnJhdGlvbiAoNGEpLiBUWCBMTyBsZWFrYWdlIGNhbGlicmF0aW9uCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZENkJDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoIDE1MCApOyAvLyBTbGVlcCAxNTAgdXMKKworCQkJLy8tLS0tLSBDYWxpYnJhdGlvbiAoNSkuIFJYIERDIG9mZnNldCBjYWxpYnJhdGlvbgorCQkJLy9DYWxpYnJhdGlvbiAoNWEpLiB0dXJuIG9mZiBFTkNBTCBzaWduYWwgYW5kIHNldCB0byBSWCBTVyBEQyBjYWxpcmF0aW9uIG1vZGUKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkFFREMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICg1YikuIHR1cm4gb2ZmIEFHQyBzZXJ2by1sb29wICYgUlNTSQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMTw8MjQpIHwgMHhFQkZGQzIsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKworCQkJLy87IGZvciBMTkE9MTEgLS0tLS0tLS0KKwkJCS8vQ2FsaWJyYXRpb24gKDVjLWgpLiBSWCBEQyBvZmZzZXQgY3VycmVudCBiaWFzIE9OOyAmIExOQT0xMTsgUlhWR0E9MTExMTExCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDA2PDwyNCkgfCAweDM0M0ZDQywgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJLy9DYWxpYnJhdGlvbiAoNWQpLiB0dXJuIG9uIFJYIERDIG9mZnNldCBjYWwgZnVuY3Rpb247IGFuZCB3YWl0aW5nIDIgbXNlYyBjYWwgdGltZQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGRjZEQzAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKDIwMDApOyAvLyBTbGVlcCAybXMKKwkJCS8vQ2FsaWJyYXRpb24gKDVmKS4gdHVybiBvZmYgRU5DQUwgc2lnbmFsCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZBRURDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCisJCQkvLzsgZm9yIExOQT0xMCAtLS0tLS0tLQorCQkJLy9DYWxpYnJhdGlvbiAoNWMtbSkuIFJYIERDIG9mZnNldCBjdXJyZW50IGJpYXMgT047ICYgTE5BPTEwOyBSWFZHQT0xMTExMTEKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDY8PDI0KSB8IDB4MzQyRkNDLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkvL0NhbGlicmF0aW9uICg1ZCkuIHR1cm4gb24gUlggREMgb2Zmc2V0IGNhbCBmdW5jdGlvbjsgYW5kIHdhaXRpbmcgMiBtc2VjIGNhbCB0aW1lCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZGNkRDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJT1NfU0xFRVAoMjAwMCk7IC8vIFNsZWVwIDJtcworCQkJLy9DYWxpYnJhdGlvbiAoNWYpLiB0dXJuIG9mZiBFTkNBTCBzaWduYWwKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkFFREMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisKKwkJCS8vOyBmb3IgTE5BPTAxIC0tLS0tLS0tCisJCQkvL0NhbGlicmF0aW9uICg1Yy1tKS4gUlggREMgb2Zmc2V0IGN1cnJlbnQgYmlhcyBPTjsgJiBMTkE9MDE7IFJYVkdBPTExMTExMQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwNjw8MjQpIHwgMHgzNDFGQ0MsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCS8vQ2FsaWJyYXRpb24gKDVkKS4gdHVybiBvbiBSWCBEQyBvZmZzZXQgY2FsIGZ1bmN0aW9uOyBhbmQgd2FpdGluZyAyIG1zZWMgY2FsIHRpbWUKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4RkY2REMwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCgyMDAwKTsgLy8gU2xlZXAgMm1zCisJCQkvL0NhbGlicmF0aW9uICg1ZikuIHR1cm4gb2ZmIEVOQ0FMIHNpZ25hbAorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGQUVEQzAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKworCQkJLy87IGZvciBMTkE9MDAgLS0tLS0tLS0KKwkJCS8vQ2FsaWJyYXRpb24gKDVjLWwpLiBSWCBEQyBvZmZzZXQgY3VycmVudCBiaWFzIE9OOyAmIExOQT0wMDsgUlhWR0E9MTExMTExCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDA2PDwyNCkgfCAweDM0MEZDQywgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJLy9DYWxpYnJhdGlvbiAoNWQpLiB0dXJuIG9uIFJYIERDIG9mZnNldCBjYWwgZnVuY3Rpb247IGFuZCB3YWl0aW5nIDIgbXNlYyBjYWwgdGltZQorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAoMHgwMDw8MjQpIHwgMHhGRjZEQzAsIDI0KTsKKwkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCU9TX1NMRUVQKDIwMDApOyAvLyBTbGVlcCAybXMKKwkJCS8vQ2FsaWJyYXRpb24gKDVmKS4gdHVybiBvZmYgRU5DQUwgc2lnbmFsCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAwPDwyNCkgfCAweEZBRURDMCwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJLy9DYWxpYnJhdGlvbiAoNWcpLiB0dXJuIG9uIEFHQyBzZXJ2by1sb29wCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IEJpdFJldmVyc2UoICgweDAxPDwyNCkgfCAweEVGRkZDMiwgMjQpOworCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCisJCQkvLzsgLS0tLS0gQ2FsaWJyYXRpb24gKDcpLiBTd2l0Y2ggUkYgY2hpcCB0byBub3JtYWwgbW9kZQorCQkJLy8weDAwIDB4Rjg2MTAwIDsgM0UxODQgICA7IFN3aXRjaCBSRiBjaGlwIHRvIG5vcm1hbCBtb2RlCisvLwkJCU9TX1NMRUVQKDEwMDAwKTsgLy8gQEAgMjAwNjA3MjEKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggKDB4MDA8PDI0KSB8IDB4Rjg2MTAwLCAyNCk7CisJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQlPU19TTEVFUCg1MDAwKTsgLy8gU2xlZXAgNSBtcworCisvLwkJCS8vd3JpdGUgYmFjaworLy8JCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgxMDVjLCBwSHdEYXRhLT5XYjM1UmVnLkJCNUMgKTsKKy8vCQkJcEh3RGF0YS0+V2IzNVJlZy5CQjUwICY9IH4weDEzOy8vKE1BU0tfSVFDQUxfTU9ERXxNQVNLX0NBTElCX1NUQVJUKTsgLy8gMjAwNjAzMTUuMSBmaXgKKy8vICAgICAgCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNTAsIHBId0RhdGEtPldiMzVSZWcuQkI1MCk7CisvLwkJCU9TX1NMRUVQKDEwMDApOyAvLyBTbGVlcCAxIG1zCisJCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgQkJQcm9jZXNzb3JfQUw3MjMwXzI0MDAoICBwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwl1MzIJcGx0bXBbMTJdOworCisJcGx0bXBbMF0gPSAweDE2QTgzMzdBOyAvLyAweDE2YTUyMTVmOyAvLyAweDEwMDAgQUdDX0N0cmwxCisJcGx0bXBbMV0gPSAweDlBRkY5QUE2OyAvLyAweDlhZmY5Y2E2OyAvLyAweDEwMDQgQUdDX0N0cmwyCisJcGx0bXBbMl0gPSAweDU1RDAwQTA0OyAvLyAweDU1ZDAwYTA0OyAvLyAweDEwMDggQUdDX0N0cmwzCisJcGx0bXBbM10gPSAweEZGRjcyMDMxOyAvLyAweEZmRmYyMTM4OyAvLyAweDEwMGMgQUdDX0N0cmw0CisJcFdiMzVSZWctPkJCMEMgPSAweEZGRjcyMDMxOworCXBsdG1wWzRdID0gMHgwRmFjRENDNTsgLy8gMHgxMDEwIEFHQ19DdHJsNSAvLyAyMDA1MDkyNyAweDBGYWNEQ0I3CisJcGx0bXBbNV0gPSAweDAwQ0FBMzMzOyAvLyAweDAwZWFhMzMzOyAvLyAweDEwMTQgQUdDX0N0cmw2CisJcGx0bXBbNl0gPSAweEYyMjExMTExOyAvLyAweDExMTExMTExOyAvLyAweDEwMTggQUdDX0N0cmw3CisJcGx0bXBbN10gPSAweDBGQTNGMEVEOyAvLyAweDEwMWMgQUdDX0N0cmw4CisJcGx0bXBbOF0gPSAweDA2NDQzNDQwOyAvLyAweDEwMjAgQUdDX0N0cmw5CisJcGx0bXBbOV0gPSAweEE4MDAyQTc5OyAvLyAweGE5MDAyQTc5OyAvLyAweDEwMjQgQUdDX0N0cmwxMAorCXBsdG1wWzEwXSA9IDB4NDAwMDA1Mjg7IC8vIDIwMDUwOTI3IDB4NDAwMDAyMjgKKwlwbHRtcFsxMV0gPSAweDIzMkQ3RjMwOyAvLyAweDIzNDU3ZjMwOy8vIDB4MTAyYyBBX0FDUV9DdHJsCisJcFdiMzVSZWctPkJCMkMgPSAweDIzMkQ3RjMwOworCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDAwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKKwlwbHRtcFswXSA9IDB4MDAwMDJjNTQ7IC8vIDB4MTAzMCBCX0FDUV9DdHJsCisJcFdiMzVSZWctPkJCMzAgPSAweDAwMDAyYzU0OworCXBsdG1wWzFdID0gMHgwMEMwRDZDNTsgLy8gMHgxMDM0IEFfVFhSWF9DdHJsCisJcGx0bXBbMl0gPSAweDVCMkM4NzY5OyAvLyAweDEwMzggQl9UWFJYX0N0cmwKKwlwbHRtcFszXSA9IDB4MDAwMDAwMDA7IC8vIDB4MTAzYyAxMWEgVFggTFMgZmlsdGVyCisJcFdiMzVSZWctPkJCM0MgPSAweDAwMDAwMDAwOworCXBsdG1wWzRdID0gMHgwMDAwM0YyOTsgLy8gMHgxMDQwIDExYSBUWCBMUyBmaWx0ZXIKKwlwbHRtcFs1XSA9IDB4MEVGRUZCRkU7IC8vIDB4MTA0NCAxMWEgVFggTFMgZmlsdGVyCisJcGx0bXBbNl0gPSAweDAwMzMyQzFCOyAvLyAweDAwNDUzQjI0OyAvLyAweDEwNDggMTFiIFRYIFJDIGZpbHRlcgorCXBsdG1wWzddID0gMHgwQTAwRkVGRjsgLy8gMHgwRTAwRkVGRjsgLy8gMHgxMDRjIDExYiBUWCBSQyBmaWx0ZXIKKwlwbHRtcFs4XSA9IDB4MkIxMDYyMDg7IC8vIDB4MTA1MCBNT0RFX0N0cmwKKwlwV2IzNVJlZy0+QkI1MCA9IDB4MkIxMDYyMDg7CisJcGx0bXBbOV0gPSAwOyAvLyAweDEwNTQKKwlwV2IzNVJlZy0+QkI1NCA9IDB4MDAwMDAwMDA7CisJcGx0bXBbMTBdID0gMHg1MjUyNDI0MjsgLy8gMHg2NDY0NTI1MjsgLy8gMHgxMDU4IElRX0FscGhhCisJcFdiMzVSZWctPkJCNTggPSAweDUyNTI0MjQyOworCXBsdG1wWzExXSA9IDB4QUEwQUMwMDA7IC8vIDB4MTA1YyBEQ19DYW5jZWwKKwlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MTAzMCwgcGx0bXAsIDEyLCBBVVRPX0lOQ1JFTUVOVCApOworCit9CisKK3ZvaWQgQkJQcm9jZXNzb3JfQUw3MjMwXzUwMDAoICBwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwl1MzIJcGx0bXBbMTJdOworCisJcGx0bXBbMF0gPSAweDE2QUE2Njc4OyAvLyAweDEwMDAgQUdDX0N0cmwxCisJcGx0bXBbMV0gPSAweDlBRkZBMEIyOyAvLyAweDEwMDQgQUdDX0N0cmwyCisJcGx0bXBbMl0gPSAweDU1RDAwQTA0OyAvLyAweDEwMDggQUdDX0N0cmwzCisJcGx0bXBbM10gPSAweEVGRkYyMzNFOyAvLyAweDEwMGMgQUdDX0N0cmw0CisJcFdiMzVSZWctPkJCMEMgPSAweEVGRkYyMzNFOworCXBsdG1wWzRdID0gMHgwRmFjRENDNTsgLy8gMHgxMDEwIEFHQ19DdHJsNSAvLyAyMDA1MDkyNyAweDBGYWNEQ0I3CisJcGx0bXBbNV0gPSAweDAwQ0FBMzMzOyAvLyAweDEwMTQgQUdDX0N0cmw2CisJcGx0bXBbNl0gPSAweEYyNDMyMTExOyAvLyAweDEwMTggQUdDX0N0cmw3CisJcGx0bXBbN10gPSAweDBGQTNGMEVEOyAvLyAweDEwMWMgQUdDX0N0cmw4CisJcGx0bXBbOF0gPSAweDA1QzQzNDQwOyAvLyAweDEwMjAgQUdDX0N0cmw5CisJcGx0bXBbOV0gPSAweDAwMDAyQTc5OyAvLyAweDEwMjQgQUdDX0N0cmwxMAorCXBsdG1wWzEwXSA9IDB4NDAwMDA1Mjg7IC8vIDIwMDUwOTI3IDB4NDAwMDAyMjgKKwlwbHRtcFsxMV0gPSAweDIzMkZERjMwOy8vIDB4MTAyYyBBX0FDUV9DdHJsCisJcFdiMzVSZWctPkJCMkMgPSAweDIzMkZERjMwOworCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDAwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKKwlwbHRtcFswXSA9IDB4ODAwMDJDN0M7IC8vIDB4MTAzMCBCX0FDUV9DdHJsCisJcGx0bXBbMV0gPSAweDAwQzBENkM1OyAvLyAweDEwMzQgQV9UWFJYX0N0cmwKKwlwbHRtcFsyXSA9IDB4NUIyQzg3Njk7IC8vIDB4MTAzOCBCX1RYUlhfQ3RybAorCXBsdG1wWzNdID0gMHgwMDAwMDAwMDsgLy8gMHgxMDNjIDExYSBUWCBMUyBmaWx0ZXIKKwlwV2IzNVJlZy0+QkIzQyA9IDB4MDAwMDAwMDA7CisJcGx0bXBbNF0gPSAweDAwMDAzRjI5OyAvLyAweDEwNDAgMTFhIFRYIExTIGZpbHRlcgorCXBsdG1wWzVdID0gMHgwRUZFRkJGRTsgLy8gMHgxMDQ0IDExYSBUWCBMUyBmaWx0ZXIKKwlwbHRtcFs2XSA9IDB4MDAzMzJDMUI7IC8vIDB4MTA0OCAxMWIgVFggUkMgZmlsdGVyCisJcGx0bXBbN10gPSAweDBBMDBGRUZGOyAvLyAweDEwNGMgMTFiIFRYIFJDIGZpbHRlcgorCXBsdG1wWzhdID0gMHgyQjEwNzIwODsgLy8gMHgxMDUwIE1PREVfQ3RybAorCXBXYjM1UmVnLT5CQjUwID0gMHgyQjEwNzIwODsKKwlwbHRtcFs5XSA9IDA7IC8vIDB4MTA1NAorCXBXYjM1UmVnLT5CQjU0ID0gMHgwMDAwMDAwMDsKKwlwbHRtcFsxMF0gPSAweDUyNTI0MjQyOyAvLyAweDEwNTggSVFfQWxwaGEKKwlwV2IzNVJlZy0+QkI1OCA9IDB4NTI1MjQyNDI7CisJcGx0bXBbMTFdID0gMHhBQTBBQzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDMwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgQkJQcm9jZXNzb3JQb3dlcnVwSW5pdCAtLQorLy8KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgIEluaXRpYWxpemUgdGhlIEJhc2ViYW5kIHByb2Nlc3Nvci4KKy8vCisvLyAgQXJndW1lbnRzOgorLy8gICAgcEh3RGF0YSAgICAtIEhhbmRsZSBvZiB0aGUgVVNCIERldmljZS4KKy8vCisvLyAgUmV0dXJuIHZhbHVlczoKKy8vICAgIE5vbmUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQKK0JCUHJvY2Vzc29yX2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJdTMyCWksIHBsdG1wWzEyXTsKKworICAgIHN3aXRjaCggcEh3RGF0YS0+cGh5X3R5cGUgKQorICAgIHsKKwkJY2FzZSBSRl9NQVhJTV9WMTogLy8gSW5pdGlhbGl6bmcgdGhlIFdpbmJvbmQgMm5kIEJCKHdpdGggUGh5IGJvYXJkICh2MSkgKyBNYXhpbSAzMzEpCisKKwkJCXBsdG1wWzBdID0gMHgxNkY0N0U3NzsgLy8gMHgxMDAwIEFHQ19DdHJsMQorCQkJcGx0bXBbMV0gPSAweDlBRkZBRUE0OyAvLyAweDEwMDQgQUdDX0N0cmwyCisJCQlwbHRtcFsyXSA9IDB4NTVEMDBBMDQ7IC8vIDB4MTAwOCBBR0NfQ3RybDMKKwkJCXBsdG1wWzNdID0gMHhFRkZGMUEzNDsgLy8gMHgxMDBjIEFHQ19DdHJsNAorCQkJcFdiMzVSZWctPkJCMEMgPSAweEVGRkYxQTM0OworCQkJcGx0bXBbNF0gPSAweDBGQUJFMEI3OyAvLyAweDEwMTAgQUdDX0N0cmw1CisJCQlwbHRtcFs1XSA9IDB4MDBDQUEzMzI7IC8vIDB4MTAxNCBBR0NfQ3RybDYKKwkJCXBsdG1wWzZdID0gMHhGNjYzMjExMTsgLy8gMHgxMDE4IEFHQ19DdHJsNworCQkJcGx0bXBbN10gPSAweDBGQTNGMEVEOyAvLyAweDEwMWMgQUdDX0N0cmw4CisJCQlwbHRtcFs4XSA9IDB4MDRDQzM2NDA7IC8vIDB4MTAyMCBBR0NfQ3RybDkKKwkJCXBsdG1wWzldID0gMHgwMDAwMkE3OTsgLy8gMHgxMDI0IEFHQ19DdHJsMTAKKwkJCXBsdG1wWzEwXSA9IChwSHdEYXRhLT5waHlfdHlwZT09MykgPyAweDQwMDAwYTI4IDogMHg0MDAwMDIyODsgLy8gMHgxMDI4IE1BWElNXzMzMShiMzE9MCkgKyBXQlJGX1YxKGIxMT0xKSA6IE1BWElNXzMzMShiMzE9MCkgKyBXQlJGX1YyKGIxMT0wKQorCQkJcGx0bXBbMTFdID0gMHgyMzJGREYzMDsgLy8gMHgxMDJjIEFfQUNRX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjJDID0gMHgyMzJGREYzMDsgLy9Nb2RpZnkgZm9yIDMzJ3MgMS4wLjk1Lnh4eCB2ZXJzaW9uLCBhbnRlbm5hIDEKKwkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDAwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKKwkJCXBsdG1wWzBdID0gMHgwMDAwMkM1NDsgLy8gMHgxMDMwIEJfQUNRX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjMwID0gMHgwMDAwMkM1NDsKKwkJCXBsdG1wWzFdID0gMHgwMEMwRDZDNTsgLy8gMHgxMDM0IEFfVFhSWF9DdHJsCisJCQlwbHRtcFsyXSA9IDB4NUI2Qzg3Njk7IC8vIDB4MTAzOCBCX1RYUlhfQ3RybAorCQkJcGx0bXBbM10gPSAweDAwMDAwMDAwOyAvLyAweDEwM2MgMTFhIFRYIExTIGZpbHRlcgorCQkJcFdiMzVSZWctPkJCM0MgPSAweDAwMDAwMDAwOworCQkJcGx0bXBbNF0gPSAweDAwMDAzRjI5OyAvLyAweDEwNDAgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNV0gPSAweDBFRkVGQkZFOyAvLyAweDEwNDQgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNl0gPSAweDAwNDUzQjI0OyAvLyAweDEwNDggMTFiIFRYIFJDIGZpbHRlcgorCQkJcGx0bXBbN10gPSAweDBFMDBGRUZGOyAvLyAweDEwNGMgMTFiIFRYIFJDIGZpbHRlcgorCQkJcGx0bXBbOF0gPSAweDI3MTA2MjA4OyAvLyAweDEwNTAgTU9ERV9DdHJsCisJCQlwV2IzNVJlZy0+QkI1MCA9IDB4MjcxMDYyMDg7CisJCQlwbHRtcFs5XSA9IDA7IC8vIDB4MTA1NAorCQkJcFdiMzVSZWctPkJCNTQgPSAweDAwMDAwMDAwOworCQkJcGx0bXBbMTBdID0gMHg2NDY0NjQ2NDsgLy8gMHgxMDU4IElRX0FscGhhCisJCQlwV2IzNVJlZy0+QkI1OCA9IDB4NjQ2NDY0NjQ7CisJCQlwbHRtcFsxMV0gPSAweEFBMEFDMDAwOyAvLyAweDEwNWMgRENfQ2FuY2VsCisJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MTAzMCwgcGx0bXAsIDEyLCBBVVRPX0lOQ1JFTUVOVCApOworCisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNzAsIDB4MDAwMDAwNDUgKTsKKwkJCWJyZWFrOworCisJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCS8vWzIwMDQwNzIyIFdLXQorCQkvL09ubHkgZm9yIGJhc2ViYW5kIHZlcnNpb24gMgorLy8JCWNhc2UgUkZfTUFYSU1fMzE3OgorCQljYXNlIFJGX01BWElNXzI4MjU6CisJCWNhc2UgUkZfTUFYSU1fMjgyNzoKKwkJY2FzZSBSRl9NQVhJTV8yODI4OgorCisJCQlwbHRtcFswXSA9IDB4MTZiNDdlNzc7IC8vIDB4MTAwMCBBR0NfQ3RybDEKKwkJCXBsdG1wWzFdID0gMHg5YWZmYWVhNDsgLy8gMHgxMDA0IEFHQ19DdHJsMgorCQkJcGx0bXBbMl0gPSAweDU1ZDAwYTA0OyAvLyAweDEwMDggQUdDX0N0cmwzCisJCQlwbHRtcFszXSA9IDB4ZWZmZjFhMzQ7IC8vIDB4MTAwYyBBR0NfQ3RybDQKKwkJCXBXYjM1UmVnLT5CQjBDID0gMHhlZmZmMWEzNDsKKwkJCXBsdG1wWzRdID0gMHgwZmFiZTBiNzsgLy8gMHgxMDEwIEFHQ19DdHJsNQorCQkJcGx0bXBbNV0gPSAweDAwY2FhMzMyOyAvLyAweDEwMTQgQUdDX0N0cmw2CisJCQlwbHRtcFs2XSA9IDB4ZjY2MzIxMTE7IC8vIDB4MTAxOCBBR0NfQ3RybDcKKwkJCXBsdG1wWzddID0gMHgwRkEzRjBFRDsgLy8gMHgxMDFjIEFHQ19DdHJsOAorCQkJcGx0bXBbOF0gPSAweDA0Q0MzNjQwOyAvLyAweDEwMjAgQUdDX0N0cmw5CisJCQlwbHRtcFs5XSA9IDB4MDAwMDJBNzk7IC8vIDB4MTAyNCBBR0NfQ3RybDEwCisJCQlwbHRtcFsxMF0gPSAweDQwMDAwNTI4OyAvLyAweDQwMDAwMTI4OyBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1CisJCQlwbHRtcFsxMV0gPSAweDIzMmZkZjMwOyAvLyAweDEwMmMgQV9BQ1FfQ3RybAorCQkJcFdiMzVSZWctPkJCMkMgPSAweDIzMmZkZjMwOyAvL01vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24sIGFudGVubmEgMQorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMDAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJcGx0bXBbMF0gPSAweDAwMDAyQzU0OyAvLyAweDEwMzAgQl9BQ1FfQ3RybAorCQkJcFdiMzVSZWctPkJCMzAgPSAweDAwMDAyQzU0OworCQkJcGx0bXBbMV0gPSAweDAwQzBENkM1OyAvLyAweDEwMzQgQV9UWFJYX0N0cmwKKwkJCXBsdG1wWzJdID0gMHg1QjZDODc2OTsgLy8gMHgxMDM4IEJfVFhSWF9DdHJsCisJCQlwbHRtcFszXSA9IDB4MDAwMDAwMDA7IC8vIDB4MTAzYyAxMWEgVFggTFMgZmlsdGVyCisJCQlwV2IzNVJlZy0+QkIzQyA9IDB4MDAwMDAwMDA7CisJCQlwbHRtcFs0XSA9IDB4MDAwMDNGMjk7IC8vIDB4MTA0MCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs1XSA9IDB4MEVGRUZCRkU7IC8vIDB4MTA0NCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs2XSA9IDB4MDA0NTNCMjQ7IC8vIDB4MTA0OCAxMWIgVFggUkMgZmlsdGVyCisJCQlwbHRtcFs3XSA9IDB4MEQwMEZERkY7IC8vIDB4MTA0YyAxMWIgVFggUkMgZmlsdGVyCisJCQlwbHRtcFs4XSA9IDB4MjcxMDYyMDg7IC8vIDB4MTA1MCBNT0RFX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjUwID0gMHgyNzEwNjIwODsKKwkJCXBsdG1wWzldID0gMDsgLy8gMHgxMDU0CisJCQlwV2IzNVJlZy0+QkI1NCA9IDB4MDAwMDAwMDA7CisJCQlwbHRtcFsxMF0gPSAweDY0NjQ2NDY0OyAvLyAweDEwNTggSVFfQWxwaGEKKwkJCXBXYjM1UmVnLT5CQjU4ID0gMHg2NDY0NjQ2NDsKKwkJCXBsdG1wWzExXSA9IDB4QUEyOEMwMDA7IC8vIDB4MTA1YyBEQ19DYW5jZWwKKwkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDMwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA3MCwgMHgwMDAwMDA0NSApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9NQVhJTV8yODI5OgorCisJCQlwbHRtcFswXSA9IDB4MTZiNDdlNzc7IC8vIDB4MTAwMCBBR0NfQ3RybDEKKwkJCXBsdG1wWzFdID0gMHg5YWZmYWVhNDsgLy8gMHgxMDA0IEFHQ19DdHJsMgorCQkJcGx0bXBbMl0gPSAweDU1ZDAwYTA0OyAvLyAweDEwMDggQUdDX0N0cmwzCisJCQlwbHRtcFszXSA9IDB4ZjRmZjE2MzI7IC8vIDB4ZWZmZjFhMzQ7IC8vIDB4MTAwYyBBR0NfQ3RybDQgTW9kaWZ5IGZvciAzMydzIDEuMC45NQorCQkJcFdiMzVSZWctPkJCMEMgPSAweGY0ZmYxNjMyOyAvLyAweGVmZmYxYTM0OyBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1CisJCQlwbHRtcFs0XSA9IDB4MGZhYmUwYjc7IC8vIDB4MTAxMCBBR0NfQ3RybDUKKwkJCXBsdG1wWzVdID0gMHgwMGNhYTMzMjsgLy8gMHgxMDE0IEFHQ19DdHJsNgorCQkJcGx0bXBbNl0gPSAweGY4NjMyMTEyOyAvLyAweGY2NjMyMTExOyAvLyAweDEwMTggQUdDX0N0cmw3IE1vZGlmeSBmb3IgMzMncyAxLjAuOTUKKwkJCXBsdG1wWzddID0gMHgwRkEzRjBFRDsgLy8gMHgxMDFjIEFHQ19DdHJsOAorCQkJcGx0bXBbOF0gPSAweDA0Q0MzNjQwOyAvLyAweDEwMjAgQUdDX0N0cmw5CisJCQlwbHRtcFs5XSA9IDB4MDAwMDJBNzk7IC8vIDB4MTAyNCBBR0NfQ3RybDEwCisJCQlwbHRtcFsxMF0gPSAweDQwMDAwNTI4OyAvLyAweDQwMDAwMTI4OyBtb2RpZnkgZm9yIDMzJ3MgMS4wLjk1CisJCQlwbHRtcFsxMV0gPSAweDIzMmZkZjMwOyAvLyAweDEwMmMgQV9BQ1FfQ3RybAorCQkJcFdiMzVSZWctPkJCMkMgPSAweDIzMmZkZjMwOyAvL01vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24sIGFudGVubmEgMQorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMDAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJcGx0bXBbMF0gPSAweDAwMDAyQzU0OyAvLyAweDEwMzAgQl9BQ1FfQ3RybAorCQkJcFdiMzVSZWctPkJCMzAgPSAweDAwMDAyQzU0OworCQkJcGx0bXBbMV0gPSAweDAwQzBENkM1OyAvLyAweDEwMzQgQV9UWFJYX0N0cmwKKwkJCXBsdG1wWzJdID0gMHg1YjJjODc2OTsgLy8gMHg1QjZDODc2OTsgLy8gMHgxMDM4IEJfVFhSWF9DdHJsIE1vZGlmeSBmb3IgMzMncyAxLjAuOTUKKwkJCXBsdG1wWzNdID0gMHgwMDAwMDAwMDsgLy8gMHgxMDNjIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBXYjM1UmVnLT5CQjNDID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzRdID0gMHgwMDAwM0YyOTsgLy8gMHgxMDQwIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBsdG1wWzVdID0gMHgwRUZFRkJGRTsgLy8gMHgxMDQ0IDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBsdG1wWzZdID0gMHgwMDJjMjYxNzsgLy8gMHgwMDQ1M0IyNDsgLy8gMHgxMDQ4IDExYiBUWCBSQyBmaWx0ZXIgTW9kaWZ5IGZvciAzMydzIDEuMC45NQorCQkJcGx0bXBbN10gPSAweDA4MDBmZWZmOyAvLyAweDBEMDBGREZGOyAvLyAweDEwNGMgMTFiIFRYIFJDIGZpbHRlciBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1CisJCQlwbHRtcFs4XSA9IDB4MjcxMDYyMDg7IC8vIDB4MTA1MCBNT0RFX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjUwID0gMHgyNzEwNjIwODsKKwkJCXBsdG1wWzldID0gMDsgLy8gMHgxMDU0CisJCQlwV2IzNVJlZy0+QkI1NCA9IDB4MDAwMDAwMDA7CisJCQlwbHRtcFsxMF0gPSAweDY0NjQ0YTRhOyAvLyAweDY0NjQ2NDY0OyAvLyAweDEwNTggSVFfQWxwaGEgTW9kaWZ5IGZvciAzMydzIDEuMC45NQorCQkJcFdiMzVSZWctPkJCNTggPSAweDY0NjQ2NDY0OworCQkJcGx0bXBbMTFdID0gMHhBQTI4QzAwMDsgLy8gMHgxMDVjIERDX0NhbmNlbAorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDcwLCAweDAwMDAwMDQ1ICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX0FJUk9IQV8yMjMwOgorCisJCQlwbHRtcFswXSA9IDBYMTY3NjRBNzc7IC8vIDB4MTAwMCBBR0NfQ3RybDEJCS8vMHgxNjc2NUE3NworCQkJcGx0bXBbMV0gPSAweDlhZmZhZmIyOyAvLyAweDEwMDQgQUdDX0N0cmwyCisJCQlwbHRtcFsyXSA9IDB4NTVkMDBhMDQ7IC8vIDB4MTAwOCBBR0NfQ3RybDMKKwkJCXBsdG1wWzNdID0gMHhGRkZkMjAzYzsgLy8gMHhGRkZiMjAzYTsgLy8gMHgxMDBjIEFHQ19DdHJsNCBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1Lnh4eCB2ZXJzaW9uCisJCQlwV2IzNVJlZy0+QkIwQyA9IDB4RkZGZDIwM2M7CisJCQlwbHRtcFs0XSA9IDBYMEZCRkRDYzU7IC8vIDBYMEZCRkRDQTA7IC8vIDB4MTAxMCBBR0NfQ3RybDUgLy8weDBGQjJFMEI3IE1vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24KKwkJCXBsdG1wWzVdID0gMHgwMGNhYTMzMjsgLy8gMHgwMGNhYTMzMzsgLy8gMHgxMDE0IEFHQ19DdHJsNiBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1Lnh4eCB2ZXJzaW9uCisJCQlwbHRtcFs2XSA9IDBYRjY2MzIxMTE7IC8vIDBYRjE2MzIxMTI7IC8vIDB4MTAxOCBBR0NfQ3RybDcJCS8vMHhmNjYzMjExMiBNb2RpZnkgZm9yIDMzJ3MgMS4wLjk1Lnh4eCB2ZXJzaW9uCisJCQlwbHRtcFs3XSA9IDB4MEZBM0YwRUQ7IC8vIDB4MTAxYyBBR0NfQ3RybDgKKwkJCXBsdG1wWzhdID0gMHgwNEM0MzY0MDsgLy8gMHgxMDIwIEFHQ19DdHJsOQorCQkJcGx0bXBbOV0gPSAweDAwMDAyQTc5OyAvLyAweDEwMjQgQUdDX0N0cmwxMAorCQkJcGx0bXBbMTBdID0gMFg0MDAwMDUyODsJCQkJCQkJLy8weDQwMDAwMjI4CisJCQlwbHRtcFsxMV0gPSAweDIzMmRmRjMwOyAvLyAweDIzMkE5RjMwOyAvLyAweDEwMmMgQV9BQ1FfQ3RybAkvLzB4MjMyYTk3MzAKKwkJCXBXYjM1UmVnLT5CQjJDID0gMHgyMzJkZkYzMDsgLy9Nb2RpZnkgZm9yIDMzJ3MgMS4wLjk1Lnh4eCB2ZXJzaW9uLCBhbnRlbm5hIDEKKwkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDAwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKKwkJCXBsdG1wWzBdID0gMHgwMDAwMkM1NDsgLy8gMHgxMDMwIEJfQUNRX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjMwID0gMHgwMDAwMkM1NDsKKwkJCXBsdG1wWzFdID0gMHgwMEMwRDZDNTsgLy8gMHgxMDM0IEFfVFhSWF9DdHJsCisJCQlwbHRtcFsyXSA9IDB4NUIyQzg3Njk7IC8vIDB4MTAzOCBCX1RYUlhfQ3RybAkvLzB4NUI2Qzg3NjkKKwkJCXBsdG1wWzNdID0gMHgwMDAwMDAwMDsgLy8gMHgxMDNjIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBXYjM1UmVnLT5CQjNDID0gMHgwMDAwMDAwMDsKKwkJCXBsdG1wWzRdID0gMHgwMDAwM0YyOTsgLy8gMHgxMDQwIDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBsdG1wWzVdID0gMHgwRUZFRkJGRTsgLy8gMHgxMDQ0IDExYSBUWCBMUyBmaWx0ZXIKKwkJCXBsdG1wWzZdID0gQkI0OF9ERUZBVUxUX0FMMjIzMF8xMUc7IC8vIDB4MTA0OCAxMWIgVFggUkMgZmlsdGVyIDIwMDYwNjEzLjIKKwkJCXBXYjM1UmVnLT5CQjQ4ID0gQkI0OF9ERUZBVUxUX0FMMjIzMF8xMUc7IC8vIDIwMDUxMjIxIGNoMTQgMjAwNjA2MTMuMgorCQkJcGx0bXBbN10gPSBCQjRDX0RFRkFVTFRfQUwyMjMwXzExRzsgLy8gMHgxMDRjIDExYiBUWCBSQyBmaWx0ZXIgMjAwNjA2MTMuMgorCQkJcFdiMzVSZWctPkJCNEMgPSBCQjRDX0RFRkFVTFRfQUwyMjMwXzExRzsgLy8gMjAwNjA2MTMuMSAyMDA2MDYxMy4yCisJCQlwbHRtcFs4XSA9IDB4MjcxMDYyMDA7IC8vIDB4MTA1MCBNT0RFX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjUwID0gMHgyNzEwNjIwMDsKKwkJCXBsdG1wWzldID0gMDsgLy8gMHgxMDU0CisJCQlwV2IzNVJlZy0+QkI1NCA9IDB4MDAwMDAwMDA7CisJCQlwbHRtcFsxMF0gPSAweDUyNTI0MjQyOyAvLyAweDEwNTggSVFfQWxwaGEKKwkJCXBXYjM1UmVnLT5CQjU4ID0gMHg1MjUyNDI0MjsKKwkJCXBsdG1wWzExXSA9IDB4QUEwQUMwMDA7IC8vIDB4MTA1YyBEQ19DYW5jZWwKKwkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDMwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA3MCwgMHgwMDAwMDA0NSApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMFM6IC8vIDIwMDYwNDIwIEFkZCB0aGlzCisKKwkJCXBsdG1wWzBdID0gMFgxNjc2NEE3NzsgLy8gMHgxMDAwIEFHQ19DdHJsMQkJLy8weDE2NzY1QTc3CisJCQlwbHRtcFsxXSA9IDB4OWFmZmFmYjI7IC8vIDB4MTAwNCBBR0NfQ3RybDIKKwkJCXBsdG1wWzJdID0gMHg1NWQwMGEwNDsgLy8gMHgxMDA4IEFHQ19DdHJsMworCQkJcGx0bXBbM10gPSAweEZGRmQyMDNjOyAvLyAweEZGRmIyMDNhOyAvLyAweDEwMGMgQUdDX0N0cmw0IE1vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24KKwkJCXBXYjM1UmVnLT5CQjBDID0gMHhGRkZkMjAzYzsKKwkJCXBsdG1wWzRdID0gMFgwRkJGRENjNTsgLy8gMFgwRkJGRENBMDsgLy8gMHgxMDEwIEFHQ19DdHJsNSAvLzB4MEZCMkUwQjcgTW9kaWZ5IGZvciAzMydzIDEuMC45NS54eHggdmVyc2lvbgorCQkJcGx0bXBbNV0gPSAweDAwY2FhMzMyOyAvLyAweDAwY2FhMzMzOyAvLyAweDEwMTQgQUdDX0N0cmw2IE1vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24KKwkJCXBsdG1wWzZdID0gMFhGNjYzMjExMTsgLy8gMFhGMTYzMjExMjsgLy8gMHgxMDE4IEFHQ19DdHJsNwkJLy8weGY2NjMyMTEyIE1vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24KKwkJCXBsdG1wWzddID0gMHgwRkEzRjBFRDsgLy8gMHgxMDFjIEFHQ19DdHJsOAorCQkJcGx0bXBbOF0gPSAweDA0QzQzNjQwOyAvLyAweDEwMjAgQUdDX0N0cmw5CisJCQlwbHRtcFs5XSA9IDB4MDAwMDJBNzk7IC8vIDB4MTAyNCBBR0NfQ3RybDEwCisJCQlwbHRtcFsxMF0gPSAwWDQwMDAwNTI4OwkJCQkJCQkvLzB4NDAwMDAyMjgKKwkJCXBsdG1wWzExXSA9IDB4MjMyZGZGMzA7IC8vIDB4MjMyQTlGMzA7IC8vIDB4MTAyYyBBX0FDUV9DdHJsCS8vMHgyMzJhOTczMAorCQkJcFdiMzVSZWctPkJCMkMgPSAweDIzMmRmRjMwOyAvL01vZGlmeSBmb3IgMzMncyAxLjAuOTUueHh4IHZlcnNpb24sIGFudGVubmEgMQorCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMDAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJcGx0bXBbMF0gPSAweDAwMDAyQzU0OyAvLyAweDEwMzAgQl9BQ1FfQ3RybAorCQkJcFdiMzVSZWctPkJCMzAgPSAweDAwMDAyQzU0OworCQkJcGx0bXBbMV0gPSAweDAwQzBENkM1OyAvLyAweDEwMzQgQV9UWFJYX0N0cmwKKwkJCXBsdG1wWzJdID0gMHg1QjJDODc2OTsgLy8gMHgxMDM4IEJfVFhSWF9DdHJsCS8vMHg1QjZDODc2OQorCQkJcGx0bXBbM10gPSAweDAwMDAwMDAwOyAvLyAweDEwM2MgMTFhIFRYIExTIGZpbHRlcgorCQkJcFdiMzVSZWctPkJCM0MgPSAweDAwMDAwMDAwOworCQkJcGx0bXBbNF0gPSAweDAwMDAzRjI5OyAvLyAweDEwNDAgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNV0gPSAweDBFRkVGQkZFOyAvLyAweDEwNDQgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNl0gPSBCQjQ4X0RFRkFVTFRfQUwyMjMwXzExRzsgLy8gMHgxMDQ4IDExYiBUWCBSQyBmaWx0ZXIgMjAwNjA2MTMuMgorCQkJcFdiMzVSZWctPkJCNDggPSBCQjQ4X0RFRkFVTFRfQUwyMjMwXzExRzsgLy8gMjAwNTEyMjEgY2gxNCAyMDA2MDYxMy4yCisJCQlwbHRtcFs3XSA9IEJCNENfREVGQVVMVF9BTDIyMzBfMTFHOyAvLyAweDEwNGMgMTFiIFRYIFJDIGZpbHRlciAyMDA2MDYxMy4yCisJCQlwV2IzNVJlZy0+QkI0QyA9IEJCNENfREVGQVVMVF9BTDIyMzBfMTFHOyAvLyAyMDA2MDYxMy4xCisJCQlwbHRtcFs4XSA9IDB4MjcxMDYyMDA7IC8vIDB4MTA1MCBNT0RFX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjUwID0gMHgyNzEwNjIwMDsKKwkJCXBsdG1wWzldID0gMDsgLy8gMHgxMDU0CisJCQlwV2IzNVJlZy0+QkI1NCA9IDB4MDAwMDAwMDA7CisJCQlwbHRtcFsxMF0gPSAweDUyNTIzMjMyOyAvLyAyMDA2MDQxOSAweDUyNTI0MjQyOyAvLyAweDEwNTggSVFfQWxwaGEKKwkJCXBXYjM1UmVnLT5CQjU4ID0gMHg1MjUyMzIzMjsgLy8gMjAwNjA0MTkgMHg1MjUyNDI0MjsKKwkJCXBsdG1wWzExXSA9IDB4QUEwQUMwMDA7IC8vIDB4MTA1YyBEQ19DYW5jZWwKKwkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDMwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA3MCwgMHgwMDAwMDA0NSApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9BSVJPSEFfNzIzMDoKKy8qCisJCQlwbHRtcFswXSA9IDB4MTZhODRhNzc7IC8vIDB4MTAwMCBBR0NfQ3RybDEKKwkJCXBsdG1wWzFdID0gMHg5YWZmYWZiMjsgLy8gMHgxMDA0IEFHQ19DdHJsMgorCQkJcGx0bXBbMl0gPSAweDU1ZDAwYTA0OyAvLyAweDEwMDggQUdDX0N0cmwzCisJCQlwbHRtcFszXSA9IDB4RkZGYjIwM2E7IC8vIDB4MTAwYyBBR0NfQ3RybDQKKwkJCXBXYjM1UmVnLT5CQjBjID0gMHhGRkZiMjAzYTsKKwkJCXBsdG1wWzRdID0gMHgwRkJGRENCNzsgLy8gMHgxMDEwIEFHQ19DdHJsNQorCQkJcGx0bXBbNV0gPSAweDAwY2FhMzMzOyAvLyAweDEwMTQgQUdDX0N0cmw2CisJCQlwbHRtcFs2XSA9IDB4ZjY2MzIxMTI7IC8vIDB4MTAxOCBBR0NfQ3RybDcKKwkJCXBsdG1wWzddID0gMHgwRkEzRjBFRDsgLy8gMHgxMDFjIEFHQ19DdHJsOAorCQkJcGx0bXBbOF0gPSAweDA0QzQzNjQwOyAvLyAweDEwMjAgQUdDX0N0cmw5CisJCQlwbHRtcFs5XSA9IDB4MDAwMDJBNzk7IC8vIDB4MTAyNCBBR0NfQ3RybDEwCisJCQlwbHRtcFsxMF0gPSAweDQwMDAwMjI4OworCQkJcGx0bXBbMTFdID0gMHgyMzJBOUYzMDsvLyAweDEwMmMgQV9BQ1FfQ3RybAorCQkJcFdiMzVSZWctPkJCMmMgPSAweDIzMkE5RjMwOworCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDEwMDAsIHBsdG1wLCAxMiwgQVVUT19JTkNSRU1FTlQgKTsKKworCQkJcGx0bXBbMF0gPSAweDAwMDAyQzU0OyAvLyAweDEwMzAgQl9BQ1FfQ3RybAorCQkJcFdiMzVSZWctPkJCMzAgPSAweDAwMDAyQzU0OworCQkJcGx0bXBbMV0gPSAweDAwQzBENkM1OyAvLyAweDEwMzQgQV9UWFJYX0N0cmwKKwkJCXBsdG1wWzJdID0gMHg1QjJDODc2OTsgLy8gMHgxMDM4IEJfVFhSWF9DdHJsCisJCQlwbHRtcFszXSA9IDB4MDAwMDAwMDA7IC8vIDB4MTAzYyAxMWEgVFggTFMgZmlsdGVyCisJCQlwV2IzNVJlZy0+QkIzYyA9IDB4MDAwMDAwMDA7CisJCQlwbHRtcFs0XSA9IDB4MDAwMDNGMjk7IC8vIDB4MTA0MCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs1XSA9IDB4MEVGRUZCRkU7IC8vIDB4MTA0NCAxMWEgVFggTFMgZmlsdGVyCisJCQlwbHRtcFs2XSA9IDB4MDA0NTNCMjQ7IC8vIDB4MTA0OCAxMWIgVFggUkMgZmlsdGVyCisJCQlwbHRtcFs3XSA9IDB4MEUwMEZFRkY7IC8vIDB4MTA0YyAxMWIgVFggUkMgZmlsdGVyCisJCQlwbHRtcFs4XSA9IDB4MjcxMDYyMDA7IC8vIDB4MTA1MCBNT0RFX0N0cmwKKwkJCXBXYjM1UmVnLT5CQjUwID0gMHgyNzEwNjIwMDsKKwkJCXBsdG1wWzldID0gMDsgLy8gMHgxMDU0CisJCQlwV2IzNVJlZy0+QkI1NCA9IDB4MDAwMDAwMDA7CisJCQlwbHRtcFsxMF0gPSAweDY0NjQ1MjUyOyAvLyAweDEwNTggSVFfQWxwaGEKKwkJCXBXYjM1UmVnLT5CQjU4ID0gMHg2NDY0NTI1MjsKKwkJCXBsdG1wWzExXSA9IDB4QUEwQUMwMDA7IC8vIDB4MTA1YyBEQ19DYW5jZWwKKwkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDMwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisqLworCQkJQkJQcm9jZXNzb3JfQUw3MjMwXzI0MDAoIHBId0RhdGEgKTsKKworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDcwLCAweDAwMDAwMDQ1ICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX1dCXzI0MjoKKwkJY2FzZSBSRl9XQl8yNDJfMTogLy8gMjAwNjA2MTkuNSBBZGQKKworCQkJcGx0bXBbMF0gPSAweDE2QTg1MjVEOyAvLyAweDEwMDAgQUdDX0N0cmwxCisJCQlwbHRtcFsxXSA9IDB4OUFGRjlBQkE7IC8vIDB4MTAwNCBBR0NfQ3RybDIKKwkJCXBsdG1wWzJdID0gMHg1NUQwMEEwNDsgLy8gMHgxMDA4IEFHQ19DdHJsMworCQkJcGx0bXBbM10gPSAweEVFRTkxQzMyOyAvLyAweDEwMGMgQUdDX0N0cmw0CisJCQlwV2IzNVJlZy0+QkIwQyA9IDB4RUVFOTFDMzI7CisJCQlwbHRtcFs0XSA9IDB4MEZBQ0RDQzU7IC8vIDB4MTAxMCBBR0NfQ3RybDUKKwkJCXBsdG1wWzVdID0gMHgwMDBBQTM0NDsgLy8gMHgxMDE0IEFHQ19DdHJsNgorCQkJcGx0bXBbNl0gPSAweDIyMjIyMjIxOyAvLyAweDEwMTggQUdDX0N0cmw3CisJCQlwbHRtcFs3XSA9IDB4MEZBM0YwRUQ7IC8vIDB4MTAxYyBBR0NfQ3RybDgKKwkJCXBsdG1wWzhdID0gMHgwNENDMzQ0MDsgLy8gMjAwNTEwMTggMHgwM0NCMzQ0MDsgLy8gMHgxMDIwIEFHQ19DdHJsOSAyMDA1MTAxNCAweDAzQzMzNDQwCisJCQlwbHRtcFs5XSA9IDB4QTkwMDJBNzk7IC8vIDB4MTAyNCBBR0NfQ3RybDEwCisJCQlwbHRtcFsxMF0gPSAweDQwMDAwNTI4OyAvLyAweDEwMjgKKwkJCXBsdG1wWzExXSA9IDB4MjM0NTdGMzA7IC8vIDB4MTAyYyBBX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIyQyA9IDB4MjM0NTdGMzA7CisJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MTAwMCwgcGx0bXAsIDEyLCBBVVRPX0lOQ1JFTUVOVCApOworCisJCQlwbHRtcFswXSA9IDB4MDAwMDJDNTQ7IC8vIDB4MTAzMCBCX0FDUV9DdHJsCisJCQlwV2IzNVJlZy0+QkIzMCA9IDB4MDAwMDJDNTQ7CisJCQlwbHRtcFsxXSA9IDB4MDBDMEQ2QzU7IC8vIDB4MTAzNCBBX1RYUlhfQ3RybAorCQkJcGx0bXBbMl0gPSAweDVCMkM4NzY5OyAvLyAweDEwMzggQl9UWFJYX0N0cmwKKwkJCXBsdG1wWzNdID0gcEh3RGF0YS0+QkIzY19jYWw7IC8vIDB4MTAzYyAxMWEgVFggTFMgZmlsdGVyCisJCQlwV2IzNVJlZy0+QkIzQyA9IHBId0RhdGEtPkJCM2NfY2FsOworCQkJcGx0bXBbNF0gPSAweDAwMDAzRjI5OyAvLyAweDEwNDAgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNV0gPSAweDBFRkVGQkZFOyAvLyAweDEwNDQgMTFhIFRYIExTIGZpbHRlcgorCQkJcGx0bXBbNl0gPSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFHOyAvLyAweDEwNDggMTFiIFRYIFJDIGZpbHRlciAyMDA2MDYxMy4yCisJCQlwV2IzNVJlZy0+QkI0OCA9IEJCNDhfREVGQVVMVF9XQjI0Ml8xMUc7IC8vIDIwMDYwNjEzLjEgMjAwNjA2MTMuMgorCQkJcGx0bXBbN10gPSBCQjRDX0RFRkFVTFRfV0IyNDJfMTFHOyAvLyAweDEwNGMgMTFiIFRYIFJDIGZpbHRlciAyMDA2MDYxMy4yCisJCQlwV2IzNVJlZy0+QkI0QyA9IEJCNENfREVGQVVMVF9XQjI0Ml8xMUc7IC8vIDIwMDYwNjEzLjEgMjAwNjA2MTMuMgorCQkJcGx0bXBbOF0gPSAweDI3MTA2MjA4OyAvLyAweDEwNTAgTU9ERV9DdHJsCisJCQlwV2IzNVJlZy0+QkI1MCA9IDB4MjcxMDYyMDg7CisJCQlwbHRtcFs5XSA9IHBId0RhdGEtPkJCNTRfY2FsOyAvLyAweDEwNTQKKwkJCXBXYjM1UmVnLT5CQjU0ID0gcEh3RGF0YS0+QkI1NF9jYWw7CisJCQlwbHRtcFsxMF0gPSAweDUyNTIzMTMxOyAvLyAweDEwNTggSVFfQWxwaGEKKwkJCXBXYjM1UmVnLT5CQjU4ID0gMHg1MjUyMzEzMTsKKwkJCXBsdG1wWzExXSA9IDB4QUEwQUMwMDA7IC8vIDIwMDYwODI1IDB4QUEyQUMwMDA7IC8vIDB4MTA1YyBEQ19DYW5jZWwKKwkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgxMDMwLCBwbHRtcCwgMTIsIEFVVE9fSU5DUkVNRU5UICk7CisKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA3MCwgMHgwMDAwMDA0NSApOworCQkJYnJlYWs7CisgICAgfQorCisJLy8gRmlsbCB0aGUgTE5BIHRhYmxlCisJcFdiMzVSZWctPkxOQVZhbHVlWzBdID0gKHU4KShwV2IzNVJlZy0+QkIwQyAmIDB4ZmYpOworCXBXYjM1UmVnLT5MTkFWYWx1ZVsxXSA9IDA7CisJcFdiMzVSZWctPkxOQVZhbHVlWzJdID0gKHU4KSgocFdiMzVSZWctPkJCMEMgJiAweGZmMDApPj44KTsKKwlwV2IzNVJlZy0+TE5BVmFsdWVbM10gPSAwOworCisJLy8gRmlsbCBTUTMgdGFibGUKKwlmb3IoIGk9MDsgaTxNQVhfU1EzX0ZJTFRFUl9TSVpFOyBpKysgKQorCQlwV2IzNVJlZy0+U1EzX2ZpbHRlcltpXSA9IDB4MmY7IC8vIGhhbGYgb2YgQml0IDAgfiA2Cit9CisKK3ZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX21heDI4MjkoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQoreworCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgMTAwICk7IC8vIDIwMDYwNjIwLjEgTW9kaWZ5Cit9CisKK3ZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX2FsMjIzMCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwgKQoreworCXU4CWluZGV4ID0gMTAwOworCisJaWYgKHBId0RhdGEtPlR4VmdhRm9yMjRbQ2hhbm5lbC5DaGFuTm8gLSAxXSAhPSAweGZmKSAvLyAyMDA2MDYyMC4xIEFkZAorCQlpbmRleCA9IHBId0RhdGEtPlR4VmdhRm9yMjRbQ2hhbm5lbC5DaGFuTm8gLSAxXTsKKworCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgaW5kZXggKTsKK30KKwordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfYWw3MjMwKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCkKK3sKKwl1OAlpLCBpbmRleCA9IDEwMDsKKworCXN3aXRjaCAoIENoYW5uZWwuYmFuZCApCisJeworCQljYXNlIEJBTkRfVFlQRV9EU1NTOgorCQljYXNlIEJBTkRfVFlQRV9PRkRNXzI0OgorCQkJeworCQkJCWlmIChwSHdEYXRhLT5UeFZnYUZvcjI0W0NoYW5uZWwuQ2hhbk5vIC0gMV0gIT0gMHhmZikKKwkJCQkJaW5kZXggPSBwSHdEYXRhLT5UeFZnYUZvcjI0W0NoYW5uZWwuQ2hhbk5vIC0gMV07CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBCQU5EX1RZUEVfT0ZETV81OgorCQkJeworCQkJCWZvciAoaSA9MDsgaTwzNTsgaSsrKQorCQkJCXsKKwkJCQkJaWYgKENoYW5uZWwuQ2hhbk5vID09IHBId0RhdGEtPlR4VmdhRm9yNTBbaV0uQ2hhbk5vKQorCQkJCQl7CisJCQkJCQlpZiAocEh3RGF0YS0+VHhWZ2FGb3I1MFtpXS5UeFZnYVZhbHVlICE9IDB4ZmYpCisJCQkJCQkJaW5kZXggPSBwSHdEYXRhLT5UeFZnYUZvcjUwW2ldLlR4VmdhVmFsdWU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCX0KKwlSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXgoIHBId0RhdGEsIGluZGV4ICk7Cit9CisKK3ZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX3diMjQyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCkKK3sKKwl1OAlpbmRleCA9IDEwMDsKKworCXN3aXRjaCAoIENoYW5uZWwuYmFuZCApCisJeworCQljYXNlIEJBTkRfVFlQRV9EU1NTOgorCQljYXNlIEJBTkRfVFlQRV9PRkRNXzI0OgorCQkJeworCQkJCWlmIChwSHdEYXRhLT5UeFZnYUZvcjI0W0NoYW5uZWwuQ2hhbk5vIC0gMV0gIT0gMHhmZikKKwkJCQkJaW5kZXggPSBwSHdEYXRhLT5UeFZnYUZvcjI0W0NoYW5uZWwuQ2hhbk5vIC0gMV07CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBCQU5EX1RZUEVfT0ZETV81OgorCQkJYnJlYWs7CisJfQorCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgaW5kZXggKTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBSRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwgLS0KKy8vCisvLyBEZXNjcmlwdGlvbjoKKy8vICAgU3dpdGhjaCB0aGUgUkYgY2hhbm5lbC4KKy8vCisvLyBBcmd1bWVudHM6CisvLyAgIHBId0RhdGEgICAgLSBIYW5kbGUgb2YgdGhlIFVTQiBEZXZpY2UuCisvLyAgIENoYW5uZWwgICAgLSBUaGUgY2hhbm5lbCBuby4KKy8vCisvLyBSZXR1cm4gdmFsdWVzOgorLy8gICBOb25lLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2b2lkCitSRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsICkKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXUzMglwbHRtcFsxNl07IC8vIFRoZSAxNiBpcyB0aGUgbWF4aW11bSBjYXBhYmlsaXR5IG9mIGhhcmR3YXJlCisJdTMyCWNvdW50LCBsdG1wOworCXU4CWksIGosIG51bWJlcjsKKwl1OAlDaG5sVG1wOworCisJc3dpdGNoKCBwSHdEYXRhLT5waHlfdHlwZSApCisJeworCQljYXNlIFJGX01BWElNXzI4MjU6CisJCWNhc2UgUkZfTUFYSU1fVjE6IC8vIDExZyBXaW5ib25kIDJuZCBCQih3aXRoIFBoeSBib2FyZCAodjEpICsgTWF4aW0gMzMxKQorCisJCQlpZiggQ2hhbm5lbC5iYW5kIDw9IEJBTkRfVFlQRV9PRkRNXzI0ICkgLy8gY2hhbm5lbCAxIH4gMTMKKwkJCXsKKwkJCQlmb3IoIGk9MDsgaTwzOyBpKysgKQorCQkJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI1X2NoYW5uZWxfZGF0YV8yNFtDaGFubmVsLkNoYW5Oby0xXVtpXSwgMTgpOworCQkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwODY0LCBwbHRtcCwgMywgTk9fSU5DUkVNRU5UICk7CisJCQl9CisJCQlSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXgoIHBId0RhdGEsIDEwMCApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9NQVhJTV8yODI3OgorCisJCQlpZiggQ2hhbm5lbC5iYW5kIDw9IEJBTkRfVFlQRV9PRkRNXzI0ICkgLy8gY2hhbm5lbCAxIH4gMTMKKwkJCXsKKwkJCQlmb3IoIGk9MDsgaTwzOyBpKysgKQorCQkJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI3X2NoYW5uZWxfZGF0YV8yNFtDaGFubmVsLkNoYW5Oby0xXVtpXSwgMTgpOworCQkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwODY0LCBwbHRtcCwgMywgTk9fSU5DUkVNRU5UICk7CisJCQl9CisJCQllbHNlIGlmKCBDaGFubmVsLmJhbmQgPT0gQkFORF9UWVBFX09GRE1fNSApIC8vIGNoYW5uZWwgMzYgfiA2NAorCQkJeworCQkJCUNobmxUbXAgPSAoQ2hhbm5lbC5DaGFuTm8gLSAzNikgLyA0OworCQkJCWZvciggaT0wOyBpPDM7IGkrKyApCisJCQkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIG1heDI4MjdfY2hhbm5lbF9kYXRhXzUwW0NobmxUbXBdW2ldLCAxOCk7CisJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCAzLCBOT19JTkNSRU1FTlQgKTsKKwkJCX0KKwkJCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgMTAwICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX01BWElNXzI4Mjg6CisKKwkJCWlmKCBDaGFubmVsLmJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQgKSAvLyBjaGFubmVsIDEgfiAxMworCQkJeworCQkJCWZvciggaT0wOyBpPDM7IGkrKyApCisJCQkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIG1heDI4MjhfY2hhbm5lbF9kYXRhXzI0W0NoYW5uZWwuQ2hhbk5vLTFdW2ldLCAxOCk7CisJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCAzLCBOT19JTkNSRU1FTlQgKTsKKwkJCX0KKwkJCWVsc2UgaWYoIENoYW5uZWwuYmFuZCA9PSBCQU5EX1RZUEVfT0ZETV81ICkgLy8gY2hhbm5lbCAzNiB+IDY0CisJCQl7CisJCQkJQ2hubFRtcCA9IChDaGFubmVsLkNoYW5ObyAtIDM2KSAvIDQ7CisJCQkJZm9yICggaSA9IDA7IGkgPCAzOyBpKyspCisJCQkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIG1heDI4MjhfY2hhbm5lbF9kYXRhXzUwW0NobmxUbXBdW2ldLCAxOCk7CisJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCAzLCBOT19JTkNSRU1FTlQgKTsKKwkJCX0KKwkJCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgMTAwICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX01BWElNXzI4Mjk6CisKKwkJCWlmKCBDaGFubmVsLmJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQpCisJCQl7CisJCQkJZm9yKCBpPTA7IGk8MzsgaSsrICkKKwkJCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyOV9jaGFubmVsX2RhdGFfMjRbQ2hhbm5lbC5DaGFuTm8tMV1baV0sIDE4KTsKKwkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIDMsIE5PX0lOQ1JFTUVOVCApOworCQkJfQorCQkJZWxzZSBpZiggQ2hhbm5lbC5iYW5kID09IEJBTkRfVFlQRV9PRkRNXzUgKQorCQkJeworCQkJCWNvdW50ID0gc2l6ZW9mKG1heDI4MjlfY2hhbm5lbF9kYXRhXzUwKSAvIHNpemVvZihtYXgyODI5X2NoYW5uZWxfZGF0YV81MFswXSk7CisKKwkJCQlmb3IoIGk9MDsgaTxjb3VudDsgaSsrICkKKwkJCQl7CisJCQkJCWlmKCBtYXgyODI5X2NoYW5uZWxfZGF0YV81MFtpXVswXSA9PSBDaGFubmVsLkNoYW5ObyApCisJCQkJCXsKKwkJCQkJCWZvciggaj0wOyBqPDM7IGorKyApCisJCQkJCQkJcGx0bXBbal0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyOV9jaGFubmVsX2RhdGFfNTBbaV1baisxXSwgMTgpOworCQkJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCAzLCBOT19JTkNSRU1FTlQgKTsKKworCQkJCQkJaWYoIChtYXgyODI5X2NoYW5uZWxfZGF0YV81MFtpXVszXSAmIDB4M0ZGRkYpID09IDB4MkE5NDYgKQorCQkJCQkJeworCQkJCQkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggKDU8PDE4KXwweDJBOTA2LCAxOCk7CisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJCQkJCQl9CisJCQkJCQllbHNlICAgIC8vIDB4MkE5QzYKKwkJCQkJCXsKKwkJCQkJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoICg1PDwxOCl8MHgyQTk4NiwgMTgpOworCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkJc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX21heDI4MjkoIHBId0RhdGEsIENoYW5uZWwgKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfQUlST0hBXzIyMzA6CisJCWNhc2UgUkZfQUlST0hBXzIyMzBTOiAvLyAyMDA2MDQyMCBBZGQgdGhpcworCisJCQlpZiggQ2hhbm5lbC5iYW5kIDw9IEJBTkRfVFlQRV9PRkRNXzI0ICkgLy8gY2hhbm5lbCAxIH4gMTQKKwkJCXsKKwkJCQlmb3IoIGk9MDsgaTwyOyBpKysgKQorCQkJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyMCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBhbDIyMzBfY2hhbm5lbF9kYXRhXzI0W0NoYW5uZWwuQ2hhbk5vLTFdW2ldLCAyMCk7CisJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCAyLCBOT19JTkNSRU1FTlQgKTsKKwkJCX0KKwkJCXNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9hbDIyMzAoIHBId0RhdGEsIENoYW5uZWwgKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfQUlST0hBXzcyMzA6CisKKwkJCS8vU3RhcnQgdG8gZmlsbCBSRiBwYXJhbWV0ZXJzLCBQTExfT04gc2hvdWxkIGJlIHB1bGxlZCBsb3cuCisJCQkvL1diMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDAwMCApOworCQkJLy9XQkRFQlVHKCgiKiBQTExfT04gICAgbG93XG4iKSk7CisKKwkJCS8vQ2hhbm5lbCBpbmRlcGVuZGVudCByZWdpc3RlcnMKKwkJCWlmKCBDaGFubmVsLmJhbmQgIT0gcEh3RGF0YS0+YmFuZCkKKwkJCXsKKwkJCQlpZiAoQ2hhbm5lbC5iYW5kIDw9IEJBTkRfVFlQRV9PRkRNXzI0KQorCQkJCXsKKwkJCQkJLy9VcGRhdGUgQkIgcmVnaXN0ZXIKKwkJCQkJQkJQcm9jZXNzb3JfQUw3MjMwXzI0MDAocEh3RGF0YSk7CisKKwkJCQkJbnVtYmVyID0gc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzI0KS9zaXplb2YoYWw3MjMwX3JmX2RhdGFfMjRbMF0pOworCQkJCQlTZXRfQ2hhbkluZGVwX1JmRGF0YV9hbDcyMzBfMjQocEh3RGF0YSwgcGx0bXAsIG51bWJlcik7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8vVXBkYXRlIEJCIHJlZ2lzdGVyCisJCQkJCUJCUHJvY2Vzc29yX0FMNzIzMF81MDAwKHBId0RhdGEpOworCisJCQkJCW51bWJlciA9IHNpemVvZihhbDcyMzBfcmZfZGF0YV81MCkvc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzUwWzBdKTsKKwkJCQkJU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzUwKHBId0RhdGEsIHBsdG1wLCBudW1iZXIpOworCQkJCX0KKworCQkJCS8vIFdyaXRlIHRvIHJlZ2lzdGVyLiBudW1iZXIgbXVzdCBsZXNzIGFuZCBlcXVhbCB0aGFuIDE2CisJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCBudW1iZXIsIE5PX0lOQ1JFTUVOVCApOworCQkJCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KKwkJCQlXQkRFQlVHKCgiQmFuZCBjaGFuZ2VkXG4iKSk7CisJCQkJI2VuZGlmCisJCQl9CisKKwkJCWlmKCBDaGFubmVsLmJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQgKSAvLyBjaGFubmVsIDEgfiAxNAorCQkJeworCQkJCWZvciggaT0wOyBpPDI7IGkrKyApCisJCQkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IChhbDcyMzBfY2hhbm5lbF9kYXRhXzI0W0NoYW5uZWwuQ2hhbk5vLTFdW2ldJjB4ZmZmZmZmKTsKKwkJCQlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgcGx0bXAsIDIsIE5PX0lOQ1JFTUVOVCApOworCQkJfQorCQkJZWxzZSBpZiggQ2hhbm5lbC5iYW5kID09IEJBTkRfVFlQRV9PRkRNXzUgKQorCQkJeworCQkJCS8vVXBkYXRlIFJlZzEyCisJCQkJaWYgKChDaGFubmVsLkNoYW5ObyA+IDY0KSAmJiAoQ2hhbm5lbC5DaGFuTm8gPD0gMTY1KSkKKwkJCQl7CisJCQkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgMHgwMDE0M2M7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgbHRtcCApOworCQkJCX0KKwkJCQllbHNlCS8vcmVnMTIgPSAweDAwMTQ3YyBhdCBDaGFubmVsIDQ5MjAgfiA1MzIwCisJCQkJeworCQkJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IDB4MDAxNDdjOworCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKKwkJCQl9CisKKwkJCQljb3VudCA9IHNpemVvZihhbDcyMzBfY2hhbm5lbF9kYXRhXzUpIC8gc2l6ZW9mKGFsNzIzMF9jaGFubmVsX2RhdGFfNVswXSk7CisKKwkJCQlmb3IgKGk9MDsgaTxjb3VudDsgaSsrKQorCQkJCXsKKwkJCQkJaWYgKGFsNzIzMF9jaGFubmVsX2RhdGFfNVtpXVswXSA9PSBDaGFubmVsLkNoYW5ObykKKwkJCQkJeworCQkJCQkJZm9yKCBqPTA7IGo8MzsgaisrICkKKwkJCQkJCQlwbHRtcFtqXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCAoIGFsNzIzMF9jaGFubmVsX2RhdGFfNVtpXVtqKzFdJjB4ZmZmZmZmKTsKKwkJCQkJCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwODY0LCBwbHRtcCwgMywgTk9fSU5DUkVNRU5UICk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfYWw3MjMwKHBId0RhdGEsIENoYW5uZWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9XQl8yNDI6CisJCWNhc2UgUkZfV0JfMjQyXzE6IC8vIDIwMDYwNjE5LjUgQWRkCisKKwkJCWlmKCBDaGFubmVsLmJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQgKSAvLyBjaGFubmVsIDEgfiAxNAorCQkJeworCQkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggdzg5cmYyNDJfY2hhbm5lbF9kYXRhXzI0W0NoYW5uZWwuQ2hhbk5vLTFdWzBdLCAyNCk7CisJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHg4NjQsIGx0bXAgKTsKKwkJCX0KKwkJCXNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF93YjI0MihwSHdEYXRhLCBDaGFubmVsKTsKKwkJCWJyZWFrOworCX0KKworCWlmKCBDaGFubmVsLmJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQgKQorCXsKKyAgICAgICAgLy8gQkI6IHNlbGVjdCAyLjQgR0h6LCBiaXRbMTItMTFdPTAwCisJCXBXYjM1UmVnLT5CQjUwICY9IH4oQklUKDExKXxCSVQoMTIpKTsKKwkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDUwLCBwV2IzNVJlZy0+QkI1MCApOyAvLyBNT0RFX0N0cmwKKyAgICAgICAgLy8gTUFDOiBzZWxlY3QgMi40IEdIeiwgYml0WzVdPTAKKwkJcFdiMzVSZWctPk03OF9FUlBJbmZvcm1hdGlvbiAmPSB+QklUKDUpOworCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NzgsIHBXYjM1UmVnLT5NNzhfRVJQSW5mb3JtYXRpb24gKTsKKyAgICAgICAgLy8gZW5hYmxlIDExYiBCYXNlYmFuZAorCQlwV2IzNVJlZy0+QkIzMCAmPSB+QklUKDMxKTsKKwkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDMwLCBwV2IzNVJlZy0+QkIzMCApOworCX0KKwllbHNlIGlmKCAoQ2hhbm5lbC5iYW5kID09IEJBTkRfVFlQRV9PRkRNXzUpICkKKwl7CisgICAgICAgIC8vIEJCOiBzZWxlY3QgNSBHSHoKKwkJcFdiMzVSZWctPkJCNTAgJj0gfihCSVQoMTEpfEJJVCgxMikpOworCQlpZiAoQ2hhbm5lbC5DaGFuTm8gPD02NCApCisJCQlwV2IzNVJlZy0+QkI1MCB8PSBCSVQoMTIpOwkJCQkvLyAxMC01LjI1R0h6CisJCWVsc2UgaWYgKChDaGFubmVsLkNoYW5ObyA+PSAxMDApICYmIChDaGFubmVsLkNoYW5ObyA8PSAxMjQpKQorCQkJcFdiMzVSZWctPkJCNTAgfD0gQklUKDExKTsJCQkJLy8gMDEtNS40OEdIegorCQllbHNlIGlmICgoQ2hhbm5lbC5DaGFuTm8gPj0xMjgpICYmIChDaGFubmVsLkNoYW5ObyA8PSAxNjEpKQorCQkJcFdiMzVSZWctPkJCNTAgfD0gKEJJVCgxMil8QklUKDExKSk7CS8vIDExLTUuNzc1R0h6CisJCWVsc2UJLy9DaGFuIDE4NCB+IDE5NiB3aWxsIHVzZSBiaXRbMTItMTFdID0gMTAgaW4gdmVyc2lvbiBzaC1zcmMtMS4yLjI1CisJCQlwV2IzNVJlZy0+QkI1MCB8PSBCSVQoMTIpOworCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNTAsIHBXYjM1UmVnLT5CQjUwICk7IC8vIE1PREVfQ3RybAorCisJCS8vKDEpIE03OCBzaG91bGQgYWx3YXkgdXNlIDIuNEcgc2V0dGluZyB3aGVuIHVzaW5nIFJGX0FJUk9IQV83MjMwCisJCS8vKDIpIEJCMzAgaGFzIGJlZW4gdXBkYXRlZCBwcmV2aW91c2x5LgorCQlpZiAocEh3RGF0YS0+cGh5X3R5cGUgIT0gUkZfQUlST0hBXzcyMzApCisJCXsKKyAgICAJICAgIC8vIE1BQzogc2VsZWN0IDUgR0h6LCBiaXRbNV09MQorCQkJcFdiMzVSZWctPk03OF9FUlBJbmZvcm1hdGlvbiB8PSBCSVQoNSk7CisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NzgsIHBXYjM1UmVnLT5NNzhfRVJQSW5mb3JtYXRpb24gKTsKKworICAgIAkgICAgLy8gZGlzYWJsZSAxMWIgQmFzZWJhbmQKKwkJCXBXYjM1UmVnLT5CQjMwIHw9IEJJVCgzMSk7CisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwMzAsIHBXYjM1UmVnLT5CQjMwICk7CisJCX0KKwl9Cit9CisKKy8vU2V0IHRoZSB0eCBwb3dlciBkaXJlY3RseSBmcm9tIERVVCBHVUksIG5vdCBmcm9tIHRoZSBFRVBST00uIFJldHVybiB0aGUgY3VycmVudCBzZXR0aW5nCit1OCBSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXgoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBQb3dlckluZGV4ICkKK3sKKwl1MzIJQmFuZCA9IHBId0RhdGEtPmJhbmQ7CisJdTgJaW5kZXg9MDsKKworCWlmKCBwSHdEYXRhLT5wb3dlcl9pbmRleCA9PSBQb3dlckluZGV4ICkgLy8gMjAwNjA2MjAuMSBBZGQKKwkJcmV0dXJuIFBvd2VySW5kZXg7CisKKwlpZiAoUkZfTUFYSU1fMjgyNSA9PSBwSHdEYXRhLT5waHlfdHlwZSkKKwl7CisJCS8vIENoYW5uZWwgMSAtIDEzCisJCWluZGV4ID0gUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjVQb3dlciggcEh3RGF0YSwgUG93ZXJJbmRleCApOworCX0KKwllbHNlIGlmIChSRl9NQVhJTV8yODI3ID09IHBId0RhdGEtPnBoeV90eXBlKQorCXsKKwkJaWYoIEJhbmQgPD0gQkFORF9UWVBFX09GRE1fMjQgKSAgICAvLyBDaGFubmVsIDEgLSAxMworCQkJaW5kZXggPSBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN18yNFBvd2VyKCBwSHdEYXRhLCBQb3dlckluZGV4ICk7CisJCWVsc2UvLyBpZiggQmFuZCA9PSBCQU5EX1RZUEVfT0ZETV81ICkgIC8vIENoYW5uZWwgMzYgLSA2NAorCQkJaW5kZXggPSBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN181MFBvd2VyKCBwSHdEYXRhLCBQb3dlckluZGV4ICk7CisJfQorCWVsc2UgaWYgKFJGX01BWElNXzI4MjggPT0gcEh3RGF0YS0+cGh5X3R5cGUpCisJeworCQlpZiggQmFuZCA8PSBCQU5EX1RZUEVfT0ZETV8yNCApICAgIC8vIENoYW5uZWwgMSAtIDEzCisJCQlpbmRleCA9IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzI0UG93ZXIoIHBId0RhdGEsIFBvd2VySW5kZXggKTsKKwkJZWxzZS8vIGlmKCBCYW5kID09IEJBTkRfVFlQRV9PRkRNXzUgKSAgLy8gQ2hhbm5lbCAzNiAtIDY0CisJCQlpbmRleCA9IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzUwUG93ZXIoIHBId0RhdGEsIFBvd2VySW5kZXggKTsKKwl9CisJZWxzZSBpZiggUkZfQUlST0hBXzIyMzAgPT0gcEh3RGF0YS0+cGh5X3R5cGUgKQorCXsKKwkJLy9Qb3dlciBpbmRleDogMCB+IDYzIC8vIENoYW5uZWwgMSAtIDE0CisJCWluZGV4ID0gUkZTeW50aGVzaXplcl9TZXRBaXJvaGEyMjMwUG93ZXIoIHBId0RhdGEsIFBvd2VySW5kZXggKTsKKwkJaW5kZXggPSAodTgpYWwyMjMwX3R4dmdhX2RhdGFbaW5kZXhdWzFdOworCX0KKwllbHNlIGlmKCBSRl9BSVJPSEFfMjIzMFMgPT0gcEh3RGF0YS0+cGh5X3R5cGUgKSAvLyAyMDA2MDQyMCBBZGQgdGhpcworCXsKKwkJLy9Qb3dlciBpbmRleDogMCB+IDYzIC8vIENoYW5uZWwgMSAtIDE0CisJCWluZGV4ID0gUkZTeW50aGVzaXplcl9TZXRBaXJvaGEyMjMwUG93ZXIoIHBId0RhdGEsIFBvd2VySW5kZXggKTsKKwkJaW5kZXggPSAodTgpYWwyMjMwX3R4dmdhX2RhdGFbaW5kZXhdWzFdOworCX0KKwllbHNlIGlmKCBSRl9BSVJPSEFfNzIzMCA9PSBwSHdEYXRhLT5waHlfdHlwZSApCisJeworCQkvL1Bvd2VyIGluZGV4OiAwIH4gNjMKKwkJaW5kZXggPSBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTcyMzBQb3dlciggcEh3RGF0YSwgUG93ZXJJbmRleCApOworCQlpbmRleCA9ICh1OClhbDcyMzBfdHh2Z2FfZGF0YVtpbmRleF1bMV07CisJfQorCWVsc2UgaWYoIChSRl9XQl8yNDIgPT0gcEh3RGF0YS0+cGh5X3R5cGUpIHx8CisJCSAoUkZfV0JfMjQyXzEgPT0gcEh3RGF0YS0+cGh5X3R5cGUpICkgLy8gMjAwNjA2MTkuNSBBZGQKKwl7CisJCS8vUG93ZXIgaW5kZXg6IDAgfiAxOSBmb3Igb3JpZ2luYWwuIE5ldyByYW5nZSBpcyAwIH4gMzMKKwkJaW5kZXggPSBSRlN5bnRoZXNpemVyX1NldFdpbmJvbmQyNDJQb3dlciggcEh3RGF0YSwgUG93ZXJJbmRleCApOworCQlpbmRleCA9ICh1OCl3ODlyZjI0Ml90eHZnYV9kYXRhW2luZGV4XVsxXTsKKwl9CisKKwlwSHdEYXRhLT5wb3dlcl9pbmRleCA9IGluZGV4OyAgLy8gQmFja3VwIGN1cnJlbnQKKwlyZXR1cm4gaW5kZXg7Cit9CisKKy8vLS0gU3ViIGZ1bmN0aW9uCit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyOF8yNFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit7CisJdTMyCQlQb3dlckRhdGE7CisJaWYoIGluZGV4ID4gMSApIGluZGV4ID0gMTsKKwlQb3dlckRhdGEgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyOF9wb3dlcl9kYXRhXzI0W2luZGV4XSwgMTgpOworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgUG93ZXJEYXRhICk7CisJcmV0dXJuIGluZGV4OworfQorLy8tLQordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfNTBQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQoreworCXUzMgkJUG93ZXJEYXRhOworCWlmKCBpbmRleCA+IDEgKSBpbmRleCA9IDE7CisJUG93ZXJEYXRhID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIG1heDI4MjhfcG93ZXJfZGF0YV81MFtpbmRleF0sIDE4KTsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NjQsIFBvd2VyRGF0YSApOworCXJldHVybiBpbmRleDsKK30KKy8vLS0KK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzI0UG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3sKKwl1MzIJCVBvd2VyRGF0YTsKKwlpZiggaW5kZXggPiAxICkgaW5kZXggPSAxOworCVBvd2VyRGF0YSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI3X3Bvd2VyX2RhdGFfMjRbaW5kZXhdLCAxOCk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBQb3dlckRhdGEgKTsKKwlyZXR1cm4gaW5kZXg7Cit9CisvLy0tCit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN181MFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit7CisJdTMyCQlQb3dlckRhdGE7CisJaWYoIGluZGV4ID4gMSApIGluZGV4ID0gMTsKKwlQb3dlckRhdGEgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggbWF4MjgyN19wb3dlcl9kYXRhXzUwW2luZGV4XSwgMTgpOworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgUG93ZXJEYXRhICk7CisJcmV0dXJuIGluZGV4OworfQorLy8tLQordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjVQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQoreworCXUzMgkJUG93ZXJEYXRhOworCWlmKCBpbmRleCA+IDEgKSBpbmRleCA9IDE7CisJUG93ZXJEYXRhID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIG1heDI4MjVfcG93ZXJfZGF0YV8yNFtpbmRleF0sIDE4KTsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NjQsIFBvd2VyRGF0YSApOworCXJldHVybiBpbmRleDsKK30KKy8vLS0KK3U4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhMjIzMFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit7CisJdTMyCQlQb3dlckRhdGE7CisJdTgJCWksY291bnQ7CisKKwljb3VudCA9IHNpemVvZihhbDIyMzBfdHh2Z2FfZGF0YSkgLyBzaXplb2YoYWwyMjMwX3R4dmdhX2RhdGFbMF0pOworCWZvciAoaT0wOyBpPGNvdW50OyBpKyspCisJeworCQlpZiAoYWwyMjMwX3R4dmdhX2RhdGFbaV1bMV0gPj0gaW5kZXgpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gY291bnQpCisJCWktLTsKKworCVBvd2VyRGF0YSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyMCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBhbDIyMzBfdHh2Z2FfZGF0YVtpXVswXSwgMjApOworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgUG93ZXJEYXRhICk7CisJcmV0dXJuIGk7Cit9CisvLy0tCit1OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTcyMzBQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQoreworCXUzMgkJUG93ZXJEYXRhOworCXU4CQlpLGNvdW50OworCisJLy9Qb3dlckRhdGEgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZSggYWlyb2hhX3Bvd2VyX2RhdGFfMjRbaW5kZXhdLCAyMCk7CisJY291bnQgPSBzaXplb2YoYWw3MjMwX3R4dmdhX2RhdGEpIC8gc2l6ZW9mKGFsNzIzMF90eHZnYV9kYXRhWzBdKTsKKwlmb3IgKGk9MDsgaTxjb3VudDsgaSsrKQorCXsKKwkJaWYgKGFsNzIzMF90eHZnYV9kYXRhW2ldWzFdID49IGluZGV4KQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IGNvdW50KQorCQlpLS07CisJUG93ZXJEYXRhID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8IChhbDcyMzBfdHh2Z2FfZGF0YVtpXVswXSYweGZmZmZmZik7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODY0LCBQb3dlckRhdGEgKTsKKwlyZXR1cm4gaTsKK30KKwordTggUkZTeW50aGVzaXplcl9TZXRXaW5ib25kMjQyUG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3sKKwl1MzIJCVBvd2VyRGF0YTsKKwl1OAkJaSxjb3VudDsKKworCWNvdW50ID0gc2l6ZW9mKHc4OXJmMjQyX3R4dmdhX2RhdGEpIC8gc2l6ZW9mKHc4OXJmMjQyX3R4dmdhX2RhdGFbMF0pOworCWZvciAoaT0wOyBpPGNvdW50OyBpKyspCisJeworCQlpZiAodzg5cmYyNDJfdHh2Z2FfZGF0YVtpXVsxXSA+PSBpbmRleCkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBjb3VudCkKKwkJaS0tOworCisJLy8gU2V0IFR4VmdhIGludG8gUkYKKwlQb3dlckRhdGEgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggdzg5cmYyNDJfdHh2Z2FfZGF0YVtpXVswXSwgMjQpOworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg2NCwgUG93ZXJEYXRhICk7CisKKwkvLyBVcGRhdGUgQkI0OCBCQjRDIEJCNTggZm9yIGhpZ2ggcHJlY2lzaW9uIHR4dmdhCisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDQ4LCB3ODlyZjI0Ml90eHZnYV9kYXRhW2ldWzJdICk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDRjLCB3ODlyZjI0Ml90eHZnYV9kYXRhW2ldWzNdICk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDU4LCB3ODlyZjI0Ml90eHZnYV9kYXRhW2ldWzRdICk7CisKKy8vIFJmIHZnYSAwIH4gMyBmb3IgdGVtcGVyYXR1cmUgY29tcGVuc2F0ZS4gSXQgd2lsbCBhZmZlY3QgdGhlIHNjYW4gQnNzLgorLy8gVGhlIGkgdmFsdWUgZXF1YWxzIHRvIDggb3IgNyB1c3VhbGx5LiBTbyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gc2V0dXAgdGhpcyBSRiByZWdpc3Rlci4KKy8vCWlmKCBpIDw9IDMgKQorLy8JCVBvd2VyRGF0YSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCAweDAwMDAyNCwgMjQgKTsKKy8vCWVsc2UKKy8vCQlQb3dlckRhdGEgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSggMHgwMDE4MjQsIDI0ICk7CisvLwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NjQsIFBvd2VyRGF0YSApOworCXJldHVybiBpOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBEeHhfaW5pdGlhbCAtLQorLy8gTXh4X2luaXRpYWwgLS0KKwkvLworLy8gIFJvdXRpbmUgRGVzY3JpcHRpb246CisvLwkJSW5pdGlhbCB0aGUgaGFyZHdhcmUgc2V0dGluZyBhbmQgbW9kdWxlIHZhcmlhYmxlCisJLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgRHh4X2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwkvLyBPbGQgSUM6U2luZ2xlIG1vZGUgb25seS4KKwkvLyBOZXcgSUM6IG9wZXJhdGlvbiBkZWNpZGUgYnkgU29mdHdhcmUgc2V0IGJpdFs0XS4gMTptdWx0aXBsZSAwOiBzaW5nbGUKKwlwV2IzNVJlZy0+RDAwX0RtYUNvbnRyb2wgPSAweGMwMDAwMDA0OwkvL1R4b24sIFJ4b24sIG11bHRpcGxlIFJ4IGZvciBuZXcgNGsgRE1BCisJCQkJCQkJCQkJCS8vVHhvbiwgUnhvbiwgc2luZ2xlIFJ4IGZvciBvbGQgOGsgQVNJQworCWlmKCAhSEFMX1VTQl9NT0RFX0JVUlNUKCBwSHdEYXRhICkgKQorCQlwV2IzNVJlZy0+RDAwX0RtYUNvbnRyb2wgPSAweGMwMDAwMDAwOy8vVHhvbiwgUnhvbiwgc2luZ2xlIFJ4IGZvciBuZXcgNGsgRE1BCisKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwNDAwLCBwV2IzNVJlZy0+RDAwX0RtYUNvbnRyb2wgKTsKK30KKwordm9pZCBNeHhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwl1MzIJCXRtcDsKKwl1MzIJCXBsdG1wWzExXTsKKwl1MTYJaTsKKworCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBJbml0aWFsIE14eCByZWdpc3RlcgorCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkvLyBNMDAgYml0IHNldAorI2lmZGVmIF9JQlNTX0JFQUNPTl9TRVFfU1RJQ0tfCisJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sID0gMDsgLy8gU29sdmUgYmVhY29uIHNlcXVlbmNlIG51bWJlciBzdG9wIGJ5IHNvZnR3YXJlCisjZWxzZQorCXBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCA9IDB4ODAwMDAwMDA7IC8vIFNvbHZlIGJlYWNvbiBzZXF1ZW5jZSBudW1iZXIgc3RvcCBieSBoYXJkd2FyZQorI2VuZGlmCisKKwkvLyBNMjQgZGlzYWJsZSBlbnRlciBwb3dlciBzYXZlLCBCQiBSeE9uIGFuZCBlbmFibGUgTkFWIGF0dGFjaworCXBXYjM1UmVnLT5NMjRfTWFjQ29udHJvbCA9IDB4MDgwNDAwNDI7CisJcGx0bXBbMF0gPSBwV2IzNVJlZy0+TTI0X01hY0NvbnRyb2w7CisKKwlwbHRtcFsxXSA9IDA7IC8vIFNraXAgTTI4LCBiZWNhdXNlIG5vIGluaXRpYWxpemUgdmFsdWUgaXMgcmVxdWlyZWQuCisKKwkvLyBNMkMgQ1dtaW4gYW5kIENXbWF4IHNldHRpbmcKKwlwSHdEYXRhLT5jd21pbiA9IERFRkFVTFRfQ1dNSU47CisJcEh3RGF0YS0+Y3dtYXggPSBERUZBVUxUX0NXTUFYOworCXBXYjM1UmVnLT5NMkNfTWFjQ29udHJvbCA9IERFRkFVTFRfQ1dNSU4gPDwgMTA7CisJcFdiMzVSZWctPk0yQ19NYWNDb250cm9sIHw9IERFRkFVTFRfQ1dNQVg7CisJcGx0bXBbMl0gPSBwV2IzNVJlZy0+TTJDX01hY0NvbnRyb2w7CisKKwkvLyBNMzAgQlNTSUQKKwlwbHRtcFszXSA9ICooUFVMT05HKXBId0RhdGEtPmJzc2lkOworCisJLy8gTTM0CisJcEh3RGF0YS0+QUlEID0gREVGQVVMVF9BSUQ7CisJdG1wID0gKihQVVNIT1JUKShwSHdEYXRhLT5ic3NpZCs0KTsKKwl0bXAgfD0gREVGQVVMVF9BSUQgPDwgMTY7CisJcGx0bXBbNF0gPSB0bXA7CisKKwkvLyBNMzgKKwlwV2IzNVJlZy0+TTM4X01hY0NvbnRyb2wgPSAoREVGQVVMVF9SQVRFX1JFVFJZX0xJTUlUPDw4KSB8IChERUZBVUxUX0xPTkdfUkVUUllfTElNSVQgPDwgNCkgfCBERUZBVUxUX1NIT1JUX1JFVFJZX0xJTUlUOworCXBsdG1wWzVdID0gcFdiMzVSZWctPk0zOF9NYWNDb250cm9sOworCisJLy8gTTNDCisJdG1wID0gKERFRkFVTFRfUElGU1QgPDwgMjYpIHwgKERFRkFVTFRfRUlGU1QgPDwgMTYpIHwgKERFRkFVTFRfRElGU1QgPDwgOCkgfCAoREVGQVVMVF9TSUZTVCA8PCA0KSB8IERFRkFVTFRfT1NJRlNUIDsKKwlwV2IzNVJlZy0+TTNDX01hY0NvbnRyb2wgPSB0bXA7CisJcGx0bXBbNl0gPSB0bXA7CisKKwkvLyBNNDAKKwlwSHdEYXRhLT5zbG90X3RpbWVfc2VsZWN0ID0gREVGQVVMVF9TTE9UX1RJTUU7CisJdG1wID0gKERFRkFVTFRfQVRJTVdEIDw8IDE2KSB8IERFRkFVTFRfU0xPVF9USU1FOworCXBXYjM1UmVnLT5NNDBfTWFjQ29udHJvbCA9IHRtcDsKKwlwbHRtcFs3XSA9IHRtcDsKKworCS8vIE00NAorCXRtcCA9IERFRkFVTFRfTUFYX1RYX01TRFVfTElGRV9USU1FIDw8IDEwOyAvLyAqMTAyNAorCXBXYjM1UmVnLT5NNDRfTWFjQ29udHJvbCA9IHRtcDsKKwlwbHRtcFs4XSA9IHRtcDsKKworCS8vIE00OAorCXBId0RhdGEtPkJlYWNvblBlcmlvZCA9IERFRkFVTFRfQkVBQ09OX0lOVEVSVkFMOworCXBId0RhdGEtPlByb2JlRGVsYXkgPSBERUZBVUxUX1BST0JFX0RFTEFZX1RJTUU7CisJdG1wID0gKERFRkFVTFRfQkVBQ09OX0lOVEVSVkFMIDw8IDE2KSB8IERFRkFVTFRfUFJPQkVfREVMQVlfVElNRTsKKwlwV2IzNVJlZy0+TTQ4X01hY0NvbnRyb2wgPSB0bXA7CisJcGx0bXBbOV0gPSB0bXA7CisKKwkvL000QworCXBXYjM1UmVnLT5NNENfTWFjU3RhdHVzID0gKERFRkFVTFRfUFJPVE9DT0xfVkVSU0lPTiA8PCAzMCkgfCAoREVGQVVMVF9NQUNfUE9XRVJfU1RBVEUgPDwgMjgpIHwgKERFRkFVTFRfRFRJTV9BTEVSVF9USU1FIDw8IDI0KTsKKwlwbHRtcFsxMF0gPSBwV2IzNVJlZy0+TTRDX01hY1N0YXR1czsKKworCS8vIEJ1cnN0IHdyaXRlCisJLy9XYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDgyNCwgcGx0bXAsIDExLCBBVVRPX0lOQ1JFTUVOVCApOworCWZvciggaT0wOyBpPDExOyBpKysgKQorCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODI0ICsgaSo0LCBwbHRtcFtpXSApOworCisJLy8gTTYwCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg2MCwgMHgxMjQ4MTI0OCApOworCXBXYjM1UmVnLT5NNjBfTWFjQ29udHJvbCA9IDB4MTI0ODEyNDg7CisKKwkvLyBNNjgKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY4LCAweDAwMDUwOTAwICk7IC8vIDIwMDUxMDE4IDB4MDAwRjBGMDAgKTsgLy8gOTQwOTMwIDB4MDAxMzEzMDAKKwlwV2IzNVJlZy0+TTY4X01hY0NvbnRyb2wgPSAweDAwMDUwOTAwOworCisJLy8gTTk4CisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDg5OCwgMHhmZmZmODg4OCApOworCXBXYjM1UmVnLT5NOThfTWFjQ29udHJvbCA9IDB4ZmZmZjg4ODg7Cit9CisKKwordm9pZCBVeHhfcG93ZXJfb2ZmX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJLy8gU1csIFBNVSByZXNldCBhbmQgdHVybiBvZmYgY2xvY2sKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2IwLCAzICk7CisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNmMCwgMHhmOSApOworfQorCisvL0RlY2lkZSB0aGUgVHhWZ2Egb2YgZXZlcnkgY2hhbm5lbAordm9pZCBHZXRUeFZnYUZyb21FRVBST00oICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCXUzMgkJaSwgaiwgbHRtcDsKKwl1MTYJCVZhbHVlW01BWF9UWFZHQV9FRVBST01dOworCVBVQ0hBUgkJcGN0bXA7CisJdTgJCWN0bXA9MDsKKworCS8vIEdldCB0aGUgZW50aXJlIFR4VmdhIHNldHRpbmcgaW4gRUVQUk9NCisJZm9yKCBpPTA7IGk8TUFYX1RYVkdBX0VFUFJPTTsgaSsrICkKKwl7CisJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgxMDAwMDAgKyAweDAwMDEwMDAwKmkgKTsKKwkJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmbHRtcCApOworCQlWYWx1ZVtpXSA9ICh1MTYpKCBsdG1wICYgMHhmZmZmICk7IC8vIEdldCAxNiBiaXQgYXZhaWxhYmxlCisJCVZhbHVlW2ldID0gY3B1X3RvX2xlMTYoIFZhbHVlW2ldICk7IC8vIFs3OjBdMjQxMiBbNzowXTI0MTcgLi4uLgorCX0KKworCS8vIEFkanVzdCB0aGUgZmlsZWQgd2hpY2ggZmlsbHMgd2l0aCByZXNlcnZlZCB2YWx1ZS4KKwlwY3RtcCA9IChQVUNIQVIpVmFsdWU7CisJZm9yKCBpPTA7IGk8KE1BWF9UWFZHQV9FRVBST00qMik7IGkrKyApCisJeworCQlpZiggcGN0bXBbaV0gIT0gMHhmZiApCisJCQljdG1wID0gcGN0bXBbaV07CisJCWVsc2UKKwkJCXBjdG1wW2ldID0gY3RtcDsKKwl9CisKKwkvLyBBZGp1c3QgV0JfMjQyIHRvIFdCXzI0Ml8xIFR4VmdhIHNjYWxlCisJaWYoIHBId0RhdGEtPnBoeV90eXBlID09IFJGX1dCXzI0MiApCisJeworCQlmb3IoIGk9MDsgaTw0OyBpKysgKSAvLyBPbmx5IDI0MTIgMjQzNyAyNDYyIDI0ODQgY2FzZSBtdXN0IGJlIG1vZGlmaWVkCisJCXsKKwkJCWZvciggaj0wOyBqPChzaXplb2Yodzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmcpL3NpemVvZih3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1swXSkpOyBqKysgKQorCQkJeworCQkJCWlmKCBwY3RtcFtpXSA8ICh1OCl3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1tqXVsxXSApCisJCQkJeworCQkJCQlwY3RtcFtpXSA9ICh1OCl3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1tqXVswXTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiggaiA9PSAoc2l6ZW9mKHc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nKS9zaXplb2Yodzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmdbMF0pKSApCisJCQkJcGN0bXBbaV0gPSAodTgpdzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmdbai0xXVswXTsKKwkJfQorCX0KKworCS8vIDIwMDYwNjIxIEFkZAorCW1lbWNweSggcEh3RGF0YS0+VHhWZ2FTZXR0aW5nSW5FRVBST00sIHBjdG1wLCBNQVhfVFhWR0FfRUVQUk9NKjIgKTsgLy9NQVhfVFhWR0FfRUVQUk9NIGlzIHUxNiBjb3VudAorCUVFUFJPTVR4VmdhQWRqdXN0KCBwSHdEYXRhICk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBhZmZlY3QgdGhlIFR4VmdhIHBhcmFtZXRlciBpbiBIQUwuIElmIGhhbF9zZXRfY3VycmVudF9jaGFubmVsCisvLyBvciBSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXggYmUgY2FsbGVkLCBuZXcgVHhWZ2Egd2lsbCB0YWtlIGVmZmVjdC4KKy8vIFR4VmdhU2V0dGluZ0luRUVQUk9NIG9mIHNId0RhdGEgaXMgYW4gdTggYXJyYXkgcG9pbnQgdG8gRUVQUk9NIGNvbnRhaW4gZm9yIElTODlDMzUKKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCB1c2UgZGVmYXVsdCBUeFZnYVNldHRpbmdJbkVFUFJPTSBkYXRhIHRvIGNhbGN1bGF0ZSBuZXcgVHhWZ2EuCit2b2lkIEVFUFJPTVR4VmdhQWRqdXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICkgLy8gMjAwNjA2MTkuNSBBZGQKK3sKKwlQVUNIQVIJCXBUeFZnYSA9IHBId0RhdGEtPlR4VmdhU2V0dGluZ0luRUVQUk9NOworCXMxNgkJaSwgc3RtcDsKKworCS8vLS0gMi40RyAtLSAyMDA2MDcwNC4yIFJlcXVlc3QgZnJvbSBUaWdlcgorCS8vY2hhbm5lbCAxIH4gNQorCXN0bXAgPSBwVHhWZ2FbMV0gLSBwVHhWZ2FbMF07CisJZm9yKCBpPTA7IGk8NTsgaSsrICkKKwkJcEh3RGF0YS0+VHhWZ2FGb3IyNFtpXSA9IHBUeFZnYVswXSArIHN0bXAqaS80OworCS8vY2hhbm5lbCA2IH4gMTAKKwlzdG1wID0gcFR4VmdhWzJdIC0gcFR4VmdhWzFdOworCWZvciggaT01OyBpPDEwOyBpKysgKQorCQlwSHdEYXRhLT5UeFZnYUZvcjI0W2ldID0gcFR4VmdhWzFdICsgc3RtcCooaS01KS80OworCS8vY2hhbm5lbCAxMSB+IDEzCisJc3RtcCA9IHBUeFZnYVszXSAtIHBUeFZnYVsyXTsKKwlmb3IoIGk9MTA7IGk8MTM7IGkrKyApCisJCXBId0RhdGEtPlR4VmdhRm9yMjRbaV0gPSBwVHhWZ2FbMl0gKyBzdG1wKihpLTEwKS8yOworCS8vY2hhbm5lbCAxNAorCXBId0RhdGEtPlR4VmdhRm9yMjRbMTNdID0gcFR4VmdhWzNdOworCisJLy8tLSA1RyAtLQorCWlmKCBwSHdEYXRhLT5waHlfdHlwZSA9PSBSRl9BSVJPSEFfNzIzMCApCisJeworCQkvL2NoYW5uZWwgMTg0CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMF0uQ2hhbk5vID0gMTg0OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzBdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbNF07CisJCS8vY2hhbm5lbCAxOTYKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszXS5DaGFuTm8gPSAxOTY7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbM10uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs1XTsKKwkJLy9pbnRlcnBvbGF0ZQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzFdLkNoYW5ObyA9IDE4ODsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyXS5DaGFuTm8gPSAxOTI7CisJCXN0bXAgPSBwVHhWZ2FbNV0gLSBwVHhWZ2FbNF07CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMl0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs1XSAtIHN0bXAvMzsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxXS5UeFZnYVZhbHVlID0gcFR4VmdhWzVdIC0gc3RtcCoyLzM7CisKKwkJLy9jaGFubmVsIDE2CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbNl0uQ2hhbk5vID0gMTY7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbNl0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs2XTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs0XS5DaGFuTm8gPSA4OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzRdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbNl07CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbNV0uQ2hhbk5vID0gMTI7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbNV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs2XTsKKworCQkvL2NoYW5uZWwgMzYKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs4XS5DaGFuTm8gPSAzNjsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs4XS5UeFZnYVZhbHVlID0gcFR4VmdhWzddOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzddLkNoYW5ObyA9IDM0OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzddLlR4VmdhVmFsdWUgPSBwVHhWZ2FbN107CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbOV0uQ2hhbk5vID0gMzg7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbOV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs3XTsKKworCQkvL2NoYW5uZWwgNDAKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxMF0uQ2hhbk5vID0gNDA7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTBdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbOF07CisJCS8vY2hhbm5lbCA0OAorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE0XS5DaGFuTm8gPSA0ODsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxNF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs5XTsKKwkJLy9pbnRlcnBvbGF0ZQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzExXS5DaGFuTm8gPSA0MjsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxMl0uQ2hhbk5vID0gNDQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTNdLkNoYW5ObyA9IDQ2OworCQlzdG1wID0gcFR4VmdhWzldIC0gcFR4VmdhWzhdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzEzXS5UeFZnYVZhbHVlID0gcFR4VmdhWzldIC0gc3RtcC80OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzEyXS5UeFZnYVZhbHVlID0gcFR4VmdhWzldIC0gc3RtcCoyLzQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTFdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbOV0gLSBzdG1wKjMvNDsKKworCQkvL2NoYW5uZWwgNTIKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxNV0uQ2hhbk5vID0gNTI7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTVdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTBdOworCQkvL2NoYW5uZWwgNjQKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxOF0uQ2hhbk5vID0gNjQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMThdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTFdOworCQkvL2ludGVycG9sYXRlCisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTZdLkNoYW5ObyA9IDU2OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE3XS5DaGFuTm8gPSA2MDsKKwkJc3RtcCA9IHBUeFZnYVsxMV0gLSBwVHhWZ2FbMTBdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE3XS5UeFZnYVZhbHVlID0gcFR4VmdhWzExXSAtIHN0bXAvMzsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxNl0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxMV0gLSBzdG1wKjIvMzsKKworCQkvL2NoYW5uZWwgMTAwCisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTldLkNoYW5ObyA9IDEwMDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxOV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxMl07CisJCS8vY2hhbm5lbCAxMTIKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyMl0uQ2hhbk5vID0gMTEyOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIyXS5UeFZnYVZhbHVlID0gcFR4VmdhWzEzXTsKKwkJLy9pbnRlcnBvbGF0ZQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIwXS5DaGFuTm8gPSAxMDQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjFdLkNoYW5ObyA9IDEwODsKKwkJc3RtcCA9IHBUeFZnYVsxM10gLSBwVHhWZ2FbMTJdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIxXS5UeFZnYVZhbHVlID0gcFR4VmdhWzEzXSAtIHN0bXAvMzsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyMF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxM10gLSBzdG1wKjIvMzsKKworCQkvL2NoYW5uZWwgMTI4CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjZdLkNoYW5ObyA9IDEyODsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyNl0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNF07CisJCS8vaW50ZXJwb2xhdGUKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyM10uQ2hhbk5vID0gMTE2OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI0XS5DaGFuTm8gPSAxMjA7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjVdLkNoYW5ObyA9IDEyNDsKKwkJc3RtcCA9IHBUeFZnYVsxNF0gLSBwVHhWZ2FbMTNdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI1XS5UeFZnYVZhbHVlID0gcFR4VmdhWzE0XSAtIHN0bXAvNDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyNF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNF0gLSBzdG1wKjIvNDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyM10uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNF0gLSBzdG1wKjMvNDsKKworCQkvL2NoYW5uZWwgMTQwCisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjldLkNoYW5ObyA9IDE0MDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyOV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNV07CisJCS8vaW50ZXJwb2xhdGUKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyN10uQ2hhbk5vID0gMTMyOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI4XS5DaGFuTm8gPSAxMzY7CisJCXN0bXAgPSBwVHhWZ2FbMTVdIC0gcFR4VmdhWzE0XTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyOF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNV0gLSBzdG1wLzM7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjddLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTVdIC0gc3RtcCoyLzM7CisKKwkJLy9jaGFubmVsIDE0OQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzMwXS5DaGFuTm8gPSAxNDk7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMzBdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTZdOworCQkvL2NoYW5uZWwgMTY1CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMzRdLkNoYW5ObyA9IDE2NTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszNF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxN107CisJCS8vaW50ZXJwb2xhdGUKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszMV0uQ2hhbk5vID0gMTUzOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzMyXS5DaGFuTm8gPSAxNTc7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMzNdLkNoYW5ObyA9IDE2MTsKKwkJc3RtcCA9IHBUeFZnYVsxN10gLSBwVHhWZ2FbMTZdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzMzXS5UeFZnYVZhbHVlID0gcFR4VmdhWzE3XSAtIHN0bXAvNDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszMl0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxN10gLSBzdG1wKjIvNDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszMV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxN10gLSBzdG1wKjMvNDsKKwl9CisKKwkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJV0JERUJVRygoIiBUeFZnYUZvcjI0IDogXG4iKSk7CisJRGF0YURtcCgodTggKilwSHdEYXRhLT5UeFZnYUZvcjI0LCAxNCAsMCk7CisJV0JERUJVRygoIiBUeFZnYUZvcjUwIDogXG4iKSk7CisJRGF0YURtcCgodTggKilwSHdEYXRhLT5UeFZnYUZvcjUwLCA3MCAsMCk7CisJI2VuZGlmCit9CisKK3ZvaWQgQkJQcm9jZXNzb3JfUmF0ZUNoYW5naW5nKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggcmF0ZSApIC8vIDIwMDYwNjEzLjEKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXVuc2lnbmVkIGNoYXIJCUlzMTFiUmF0ZTsKKworCUlzMTFiUmF0ZSA9IChyYXRlICUgNikgPyAxIDogMDsKKwlzd2l0Y2goIHBId0RhdGEtPnBoeV90eXBlICkKKwl7CisJCWNhc2UgUkZfQUlST0hBXzIyMzA6CisJCWNhc2UgUkZfQUlST0hBXzIyMzBTOiAvLyAyMDA2MDQyMCBBZGQgdGhpcworCQkJaWYoIElzMTFiUmF0ZSApCisJCQl7CisJCQkJaWYoIChwV2IzNVJlZy0+QkI0OCAhPSBCQjQ4X0RFRkFVTFRfQUwyMjMwXzExQikgJiYKKwkJCQkJKHBXYjM1UmVnLT5CQjRDICE9IEJCNENfREVGQVVMVF9BTDIyMzBfMTFCKSApCisJCQkJeworCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNDgsIEJCNDhfREVGQVVMVF9BTDIyMzBfMTFCICk7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0YywgQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUIgKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYoIChwV2IzNVJlZy0+QkI0OCAhPSBCQjQ4X0RFRkFVTFRfQUwyMjMwXzExRykgJiYKKwkJCQkJKHBXYjM1UmVnLT5CQjRDICE9IEJCNENfREVGQVVMVF9BTDIyMzBfMTFHKSApCisJCQkJeworCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNDgsIEJCNDhfREVGQVVMVF9BTDIyMzBfMTFHICk7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0YywgQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUcgKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJGX1dCXzI0MjogLy8gMjAwNjA2MjMgVGhlIGZpeCBvbmx5IGZvciBvbGQgVHhWR0Egc2V0dGluZworCQkJaWYoIElzMTFiUmF0ZSApCisJCQl7CisJCQkJaWYoIChwV2IzNVJlZy0+QkI0OCAhPSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFCKSAmJgorCQkJCQkocFdiMzVSZWctPkJCNEMgIT0gQkI0Q19ERUZBVUxUX1dCMjQyXzExQikgKQorCQkJCXsKKwkJCQkJcFdiMzVSZWctPkJCNDggPSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFCOworCQkJCQlwV2IzNVJlZy0+QkI0QyA9IEJCNENfREVGQVVMVF9XQjI0Ml8xMUI7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0OCwgQkI0OF9ERUZBVUxUX1dCMjQyXzExQiApOworCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNGMsIEJCNENfREVGQVVMVF9XQjI0Ml8xMUIgKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYoIChwV2IzNVJlZy0+QkI0OCAhPSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFHKSAmJgorCQkJCQkocFdiMzVSZWctPkJCNEMgIT0gQkI0Q19ERUZBVUxUX1dCMjQyXzExRykgKQorCQkJCXsKKwkJCQkJcFdiMzVSZWctPkJCNDggPSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFHOworCQkJCQlwV2IzNVJlZy0+QkI0QyA9IEJCNENfREVGQVVMVF9XQjI0Ml8xMUc7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0OCwgQkI0OF9ERUZBVUxUX1dCMjQyXzExRyApOworCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwNGMsIEJCNENfREVGQVVMVF9XQjI0Ml8xMUcgKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwl9Cit9CisKKworCisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3J4aXNyLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yeGlzci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZTk0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yeGlzci5jCkBAIC0wLDAgKzEsMzAgQEAKKyNpbmNsdWRlICJvc19jb21tb24uaCIKKwordm9pZCB2UnhUaW1lckluaXQoUFdCMzJfQURBUFRFUiBBZGFwdGVyKQoreworCU9TX1RJTUVSX0lOSVRJQUwoJihBZGFwdGVyLT5NZHMublRpbWVyKSwgKHZvaWQqKSBSeFRpbWVySGFuZGxlciwgKHZvaWQqKSBBZGFwdGVyKTsKK30KKwordm9pZCB2UnhUaW1lclN0YXJ0KFBXQjMyX0FEQVBURVIgQWRhcHRlciwgaW50IHRpbWVvdXRfdmFsdWUpCit7CisJaWYgKHRpbWVvdXRfdmFsdWU8TUlOX1RJTUVPVVRfVkFMKQorCQl0aW1lb3V0X3ZhbHVlPU1JTl9USU1FT1VUX1ZBTDsKKworCU9TX1RJTUVSX1NFVCggJihBZGFwdGVyLT5NZHMublRpbWVyKSwgdGltZW91dF92YWx1ZSApOworfQorCit2b2lkIHZSeFRpbWVyU3RvcChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpCit7CisJT1NfVElNRVJfQ0FOQ0VMKCAmKEFkYXB0ZXItPk1kcy5uVGltZXIpLCAwICk7Cit9CisKK3ZvaWQgUnhUaW1lckhhbmRsZXJfMWEoIFBBREFQVEVSIEFkYXB0ZXIpCit7CisJUnhUaW1lckhhbmRsZXIoTlVMTCwgQWRhcHRlciwgTlVMTCwgTlVMTCk7Cit9CisKK3ZvaWQgUnhUaW1lckhhbmRsZXIodm9pZCogU3lzdGVtU3BlY2lmaWMxLCBQV0IzMl9BREFQVEVSIEFkYXB0ZXIsCisJCSAgICB2b2lkKiBTeXN0ZW1TcGVjaWZpYzIsIHZvaWQqIFN5c3RlbVNwZWNpZmljMykKK3sKKwlXQVJOX09OKDEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc2Nhbl9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zY2FuX3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDFiMGM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc2Nhbl9zLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8vCisvLyBTQ0FOIHRhc2sgZ2xvYmFsIENPTlNUQU5UUywgU1RSVUNUVVJFUywgdmFyaWFibGVzCisvLworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9kZWZpbmUgdGhlIG1zZyB0eXBlIG9mIFNDQU4gbW9kdWxlCisjZGVmaW5lIFNDQU5NU0dfU0NBTl9SRVEJCQkweDAxCisjZGVmaW5lIFNDQU5NU0dfQkVBQ09OCQkJCTB4MDIKKyNkZWZpbmUgU0NBTk1TR19QUk9CRV9SRVNQT05TRQkJMHgwMworI2RlZmluZSBTQ0FOTVNHX1RJTUVPVVQJCQkJMHgwNAorI2RlZmluZSBTQ0FOTVNHX1RYUFJPQkVfRkFJTAkJMHgwNQorI2RlZmluZSBTQ0FOTVNHX0VOQUJMRV9CR1NDQU4JCTB4MDYKKyNkZWZpbmUgU0NBTk1TR19TVE9QX1NDQU4JCQkweDA3CisKKy8vIEJTUyBUeXBlID0+Y29uZm9ybSB0bworLy8gSUJTUyAgICAgICAgICAgICA6IFRvRFMvRnJvbURTID0gMDAKKy8vIEluZnJhc3RydWN0dXJlICAgOiBUb0RTL0Zyb21EUyA9IDAxCisjZGVmaW5lIElCU1NfTkVUCQkJMAorI2RlZmluZSBFU1NfTkVUCQkJCTEKKyNkZWZpbmUgQU5ZQlNTX05FVAkJCTIKKworLy8gU2NhbiBUeXBlCisjZGVmaW5lIEFDVElWRV9TQ0FOCQkJMAorI2RlZmluZSBQQVNTSVZFX1NDQU4JCTEKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvL0dsb2JhbCBkYXRhIHN0cnVjdHVyZXMsIEluaXRpYWwgU2NhbiAmIEJhY2tncm91bmQgU2NhbgordHlwZWRlZiBzdHJ1Y3QgX1NDQU5fUkVRX1BBUkEJLy9tYW5kYXRvcnkgcGFyYW1ldGVycyBmb3IgU0NBTiByZXF1ZXN0Cit7CisJdTMyCQkJCVNjYW5UeXBlOwkJCS8vcGFzc2l2ZS9hY3RpdmUgc2NhbgorCisJQ0hBTl9MSVNUCQlzQ2hhbm5lbExpc3Q7CS8vIDg2QgorCXU4CQkJcmVzZXJ2ZWRfMVsyXTsKKworCXN0cnVjdCBTU0lEX0VsZW1lbnQJc1NTSUQ7IC8vIDM0Qi4gc2NhbiBvbmx5IGZvciB0aGlzIFNTSUQKKwl1OAkJCXJlc2VydmVkXzJbMl07CisKK30gU0NBTl9SRVFfUEFSQSwgKnBzU0NBTl9SRVFfUEFSQTsKKwordHlwZWRlZiBzdHJ1Y3QgX1NDQU5fUEFSQU1FVEVSUworeworCXUxNgkJCQl3U3RhdGU7CisJdTE2CQkJCWlDdXJyZW50Q2hhbm5lbEluZGV4OworCisJU0NBTl9SRVFfUEFSQQlzU2NhblJlcTsKKworCXU4CQkJCUJTU0lEW01BQ19BRERSX0xFTkdUSCArIDJdOwkJLy9zY2FuIG9ubHkgZm9yIHRoaXMgQlNTSUQKKworCXUzMgkJCQlCc3NUeXBlOwkJCQkJCS8vc2NhbiBvbmx5IGZvciB0aGlzIEJTUyB0eXBlCisKKwkvL3N0cnVjdCBTU0lEX0VsZW1lbnQJc1NTSUQ7CQkJCQkJLy9zY2FuIG9ubHkgZm9yIHRoaXMgU1NJRAorCXUxNgkJCQlQcm9iZURlbGF5OworCXUxNgkJCQlNaW5DaGFubmVsVGltZTsKKworCXUxNgkJCQlNYXhDaGFubmVsVGltZTsKKwl1MTYJCQkJcmVzZXJ2ZWRfMTsKKworICAgIHMzMgkJCQlpQmdTY2FuUGVyaW9kOwkJCQkvLyBYUDogNSBzZWMKKworICAgIHU4CQkJCWJvQmdTY2FuOwkJCQkJLy8gV2I6IGVuYWJsZSBCRyBzY2FuLCBGb3IgWFAsIHRoaXMgdmFsdWUgbXVzdCBiZSBGQUxTRQorICAgIHU4CQkJCWJvRmFzdFNjYW47CQkJCQkvLyBXYjogcmVzZXJ2ZWQKKwl1OAkJCQlib0NDQWJ1c3k7CQkJCQkvLyBXYjogSFdNQUMgQ0NBIGJ1c3kgc3RhdHVzCisJdTgJCQkJcmVzZXJ2ZWRfMjsKKworCS8vTkRJU19NSU5JUE9SVF9USU1FUgluVGltZXI7CisJT1NfVElNRVIJCQluVGltZXI7CisKKwl1MzIJCQkJU2NhblRpbWVTdGFtcDsJCQkvL0luY3JlYXNlIDEgcGVyIGJhY2tncm91bmQgc2NhbigxIG1pbnV0ZSkKKwl1MzIJCQkJQnNzVGltZVN0YW1wOwkJCS8vSW5jcmVhc2UgMSBwZXIgY29ubmVjdCBzdGF0dXMgY2hlY2sKKwl1MzIJCQkJUnhOdW1QZXJBbnRlbm5hWzJdOwkJLy8KKworCXU4CQkJCUFudGVubmFUb2dnbGU7CQkJLy8KKwl1OAkJCQlib0luVGltZXJIYW5kbGVyOworCXU4IAkJCQlib1RpbWVyQWN0aXZlOwkJCQkvLyBXYjogcmVzZXJ2ZWQKKwl1OAkJCQlib1NhdmU7CisKKwl1MzIJCQkJQlNjYW5FbmFibGU7IC8vIEJhY2tncm91bmQgc2NhbiBlbmFibGUuIERlZmF1bHQgaXMgT24KKworfSBTQ0FOX1BBUkFNRVRFUlMsICpwc1NDQU5fUEFSQU1FVEVSUzsKKworLy8gRW5jYXBzdWxhdGUgJ0FkYXB0ZXInIGRhdGEgc3RydWN0dXJlCisjZGVmaW5lIHBzU0NBTgkJCSgmKEFkYXB0ZXItPnNTY2FuUGFyYSkpCisjZGVmaW5lIHBzU0NBTlJFUQkJCSgmKEFkYXB0ZXItPnNTY2FuUGFyYS5zU2NhblJlcSkpCisKKy8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKy8vCXNjYW4uaAorLy8JCURlZmluZSB0aGUgcmVsYXRlZCBkZWZpbml0aW9ucyBvZiBzY2FuIG1vZHVsZQorLy8JaGlzdG9yeSAtLSAwMS8xNC8wMycgY3JlYXRlZAorLy8KKy8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKworLy9EZWZpbmUgdGhlIHN0YXRlIG9mIHNjYW4gbW9kdWxlCisjZGVmaW5lIFNDQU5fSU5BQ1RJVkUJCQkJCQkwCisjZGVmaW5lIFdBSVRfUFJPQkVfREVMQVkJCQkJCTEKKyNkZWZpbmUgV0FJVF9SRVNQT05TRV9NSU4JCQkJCTIKKyNkZWZpbmUgV0FJVF9SRVNQT05TRV9NQVhfQUNUSVZFCQkJMworI2RlZmluZSBXQUlUX0JFQUNPTl9NQVhfUEFTU0lWRQkJCQk0CisjZGVmaW5lIFNDQU5fQ09NUExFVEUJCQkJCQk1CisjZGVmaW5lIEJHX1NDQU4JCQkJCQkJCTYKKyNkZWZpbmUgQkdfU0NBTk5JTkcJCQkJCQkJNworCisKKy8vIFRoZSB2YWx1ZSB3aWxsIGxvYWQgZnJvbSBFRVBST00KKy8vIElmIDB4ZmYgaXMgc2V0IGluIEVFUE9NLCB0aGUgZHJpdmVyIHdpbGwgdXNlIFNDQU5fTUFYX0NITkxfVElNRSBpbnN0ZWFkLgorLy8gVGhlIGRlZmluaXRpb24gaXMgaW4gV2JIYWwuaAorLy8JI2RlZmluZSBTQ0FOX01BWF9DSE5MX1RJTUUJCQkJKDUwKQorCisKKworLy8gc3RhdGljIGZ1bmN0aW9ucworCisvL3N0YXRpYyB2b2lkIFNjYW5UaW1lckhhbmRsZXIoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKKy8vc3RhdGljIHZvaWQgdlNjYW5UaW1lclN0YXJ0KFBXQjMyX0FEQVBURVIJQWRhcHRlciwgaW50IHRpbWVvdXRfdmFsdWUpOworLy9zdGF0aWMgdm9pZCB2U2NhblRpbWVyU3RvcChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBlOTNiNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuYwpAQCAtMCwwICsxLDEzIEBACisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gc21lX2FwaS5jCisvLworLy8gQ29weXJpZ2h0KEMpIDIwMDIgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLgorLy8KKy8vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorCitzOCBzbWVfZ2V0X3Jzc2kodm9pZCAqcGNvcmVfZGF0YSwgczMyICpwcnNzaSkKK3sKKyAgICAgICBCVUcoKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTZiMjI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5oCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogc21lX2FwaS5oCisgKgorICogQ29weXJpZ2h0KEMpIDIwMDIgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLgorICoKKyAqIG1vZGlmaWNhdGlvbiBoaXN0b3J5CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDEuMDAuMDAxLCAyMDAzLTA0LTIxLCBLZXZpbiAgICAgICBjcmVhdGVkCisgKiAxLjAwLjAwMiwgMjAwMy0wNS0xNCwgUEQ0MyAmIFBFMjAgbW9kaWZpZWQKKyAqCisgKi8KKworI2lmbmRlZiBfX1NNRV9BUElfSF9fCisjZGVmaW5lIF9fU01FX0FQSV9IX18KKworLyoqKioqKioqKioqKioqKioqKiBJTkNMVURFIEZJTEVTIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyNpbmNsdWRlICJHTFxnbF9jb3JlLmgiCisKKy8qKioqKioqKioqKioqKioqKiogQ09OU1RBTlQgQU5EIE1BQ1JPIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBfSU5MSU5FICAgICAgX19pbmxpbmUKKworI2RlZmluZSBNRURJQV9TVEFURV9ESVNDT05ORUNURUQgICAgMAorI2RlZmluZSBNRURJQV9TVEFURV9DT05ORUNURUQgICAgICAgMQorCisvL0FSUkFZIENIRUNLCisjZGVmaW5lIE1BWF9QT1dFUl9UT19EQiAzMgorCisvKioqKioqKioqKioqKioqKioqIFRZUEUgREVGSU5JVElPTiBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKiBFWFBPUlRFRCBGVU5DVElPTiBERUNMQVJBVElPTiBTRUNUSU9OICoqKioqKioqKioqKioqKioqKiovCisKKy8vIE9JRF84MDJfMTFfQlNTSUQKK3M4IHNtZV9nZXRfYnNzaWQodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBic3NpZCk7CitzOCBzbWVfZ2V0X2Rlc2lyZWRfYnNzaWQodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBic3NpZCk7Ly9Ob3QgdXNlCitzOCBzbWVfc2V0X2Rlc2lyZWRfYnNzaWQodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBic3NpZCk7CisKKy8vIE9JRF84MDJfMTFfU1NJRAorczggc21lX2dldF9zc2lkKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwc3NpZCwgdTggKnBzc2lkX2xlbik7CitzOCBzbWVfZ2V0X2Rlc2lyZWRfc3NpZCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHNzaWQsIHU4ICpwc3NpZF9sZW4pOy8vIE5vdCB1c2UKK3M4IHNtZV9zZXRfZGVzaXJlZF9zc2lkKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwc3NpZCwgdTggc3NpZF9sZW4pOworCisvLyBPSURfODAyXzExX0lORlJBU1RSVUNUVVJFX01PREUKK3M4IHNtZV9nZXRfYnNzX3R5cGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBic3NfdHlwZSk7CitzOCBzbWVfZ2V0X2Rlc2lyZWRfYnNzX3R5cGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBic3NfdHlwZSk7Ly9Ob3QgdXNlCitzOCBzbWVfc2V0X2Rlc2lyZWRfYnNzX3R5cGUodm9pZCAqcGNvcmVfZGF0YSwgdTggYnNzX3R5cGUpOworCisvLyBPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xECitzOCBzbWVfZ2V0X2ZyYWdtZW50X3RocmVzaG9sZCh2b2lkICpwY29yZV9kYXRhLCB1MzIgKnB0aHJlc2hvbGQpOworczggc21lX3NldF9mcmFnbWVudF90aHJlc2hvbGQodm9pZCAqcGNvcmVfZGF0YSwgdTMyIHRocmVzaG9sZCk7CisKKy8vIE9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRAorczggc21lX2dldF9ydHNfdGhyZXNob2xkKHZvaWQgKnBjb3JlX2RhdGEsIHUzMiAqcHRocmVzaG9sZCk7CitzOCBzbWVfc2V0X3J0c190aHJlc2hvbGQodm9pZCAqcGNvcmVfZGF0YSwgdTMyIHRocmVzaG9sZCk7CisKKy8vIE9JRF84MDJfMTFfUlNTSQorczggc21lX2dldF9yc3NpKHZvaWQgKnBjb3JlX2RhdGEsIHMzMiAqcHJzc2kpOworCisvLyBPSURfODAyXzExX0NPTkZJR1VSQVRJT04KK3M4IHNtZV9nZXRfYmVhY29uX3BlcmlvZCh2b2lkICpwY29yZV9kYXRhLCB1MTYgKnBiZWFjb25fcGVyaW9kKTsKK3M4IHNtZV9zZXRfYmVhY29uX3BlcmlvZCh2b2lkICpwY29yZV9kYXRhLCB1MTYgYmVhY29uX3BlcmlvZCk7CisKK3M4IHNtZV9nZXRfYXRpbV93aW5kb3codm9pZCAqcGNvcmVfZGF0YSwgdTE2ICpwYXRpbV93aW5kb3cpOworczggc21lX3NldF9hdGltX3dpbmRvdyh2b2lkICpwY29yZV9kYXRhLCB1MTYgYXRpbV93aW5kb3cpOworCitzOCBzbWVfZ2V0X2N1cnJlbnRfY2hhbm5lbCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGN1cnJlbnRfY2hhbm5lbCk7CitzOCBzbWVfZ2V0X2N1cnJlbnRfYmFuZCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGN1cnJlbnRfYmFuZCk7CitzOCBzbWVfc2V0X2N1cnJlbnRfY2hhbm5lbCh2b2lkICpwY29yZV9kYXRhLCB1OCBjdXJyZW50X2NoYW5uZWwpOworCisvLyBPSURfODAyXzExX0JTU0lEX0xJU1QKK3M4IHNtZV9nZXRfc2Nhbl9ic3NfY291bnQodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBjb3VudCk7CitzOCBzbWVfZ2V0X3NjYW5fYnNzKHZvaWQgKnBjb3JlX2RhdGEsIHU4IGluZGV4LCB2b2lkICoqcHBic3MpOworCitzOCBzbWVfZ2V0X2Nvbm5lY3RlZF9ic3Modm9pZCAqcGNvcmVfZGF0YSwgdm9pZCAqKnBwYnNzX25vdyk7CisKKy8vIE9JRF84MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERQorczggc21lX2dldF9hdXRoX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBhdXRoX21vZGUpOworczggc21lX3NldF9hdXRoX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggYXV0aF9tb2RlKTsKKworLy8gT0lEXzgwMl8xMV9XRVBfU1RBVFVTIC8gT0lEXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUworczggc21lX2dldF93ZXBfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHdlcF9tb2RlKTsKK3M4IHNtZV9zZXRfd2VwX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggd2VwX21vZGUpOworLy9zOCBzbWVfZ2V0X2VuY3J5cHRpb25fc3RhdHVzKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwc3RhdHVzKTsKKy8vczggc21lX3NldF9lbmNyeXB0aW9uX3N0YXR1cyh2b2lkICpwY29yZV9kYXRhLCB1OCBzdGF0dXMpOworCisvLyA/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8KKworLy8gT0lEX0dFTl9WRU5ET1JfSUQKKy8vIE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTUworczggc21lX2dldF9wZXJtYW5lbnRfbWFjX2FkZHIodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBtYWNfYWRkcik7CisKKy8vIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MKK3M4IHNtZV9nZXRfY3VycmVudF9tYWNfYWRkcih2b2lkICpwY29yZV9kYXRhLCB1OCAqcG1hY19hZGRyKTsKKworLy8gT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVfSU5fVVNFCitzOCBzbWVfZ2V0X25ldHdvcmtfdHlwZV9pbl91c2Uodm9pZCAqcGNvcmVfZGF0YSwgdTggKnB0eXBlKTsKK3M4IHNtZV9zZXRfbmV0d29ya190eXBlX2luX3VzZSh2b2lkICpwY29yZV9kYXRhLCB1OCB0eXBlKTsKKworLy8gT0lEXzgwMl8xMV9TVVBQT1JURURfUkFURVMKK3M4IHNtZV9nZXRfc3VwcG9ydGVkX3JhdGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnByYXRlcyk7CisKKy8vIE9JRF84MDJfMTFfQUREX1dFUAorLy8xMi8yOS8wMycgd2tjaGVuCitzOCBzbWVfc2V0X2FkZF93ZXAodm9pZCAqcGNvcmVfZGF0YSwgdTMyIGtleV9pbmRleCwgdTMyIGtleV9sZW4sCisJCQkJCSB1OCAqQWRkcmVzcywgdTggKmtleSk7CisKKy8vIE9JRF84MDJfMTFfUkVNT1ZFX1dFUAorczggc21lX3NldF9yZW1vdmVfd2VwKHZvaWQgKnBjcmVfZGF0YSwgdTMyIGtleV9pbmRleCk7CisKKy8vIE9JRF84MDJfMTFfRElTQVNTT0NJQVRFCitzOCBzbWVfc2V0X2Rpc2Fzc29jaWF0ZSh2b2lkICpwY29yZV9kYXRhKTsKKworLy8gT0lEXzgwMl8xMV9QT1dFUl9NT0RFCitzOCBzbWVfZ2V0X3Bvd2VyX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBtb2RlKTsKK3M4IHNtZV9zZXRfcG93ZXJfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCBtb2RlKTsKKworLy8gT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4KK3M4IHNtZV9zZXRfYnNzaWRfbGlzdF9zY2FuKHZvaWQgKnBjb3JlX2RhdGEsIHZvaWQgKnBzY2FuX3BhcmEpOworCisvLyBPSURfODAyXzExX1JFTE9BRF9ERUZBVUxUUworczggc21lX3NldF9yZWxvYWRfZGVmYXVsdHModm9pZCAqcGNvcmVfZGF0YSwgdTggcmVsb2FkX3R5cGUpOworCisKKy8vIFRoZSBmb2xsb3dpbmcgU01FIEFQSSBmdW5jdGlvbnMgYXJlIHVzZWQgZm9yIFdQQQorLy8KKy8vIE1hbmRhdG9yeSBPSURzIGZvciBXUEEKKy8vCisKKy8vIE9JRF84MDJfMTFfQUREX0tFWQorLy9zOCBzbWVfc2V0X2FkZF9rZXkodm9pZCAqcGNvcmVfZGF0YSwgTkRJU184MDJfMTFfS0VZICpwa2V5KTsKKworLy8gT0lEXzgwMl8xMV9SRU1PVkVfS0VZCisvL3M4IHNtZV9zZXRfcmVtb3ZlX2tleSh2b2lkICpwY29yZV9kYXRhLCBORElTXzgwMl8xMV9SRU1PVkVfS0VZICpwa2V5KTsKKworLy8gT0lEXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTgorLy9zOCBzbWVfc2V0X2Fzc29jaWF0aW9uX2luZm9ybWF0aW9uKHZvaWQgKnBjb3JlX2RhdGEsCisvLyAgICAgICAgICAgICAgICAgICAgTkRJU184MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04gKnBpbmZvKTsKKworLy8gT0lEXzgwMl8xMV9URVNUCisvL3M4IHNtZV9zZXRfdGVzdCh2b2lkICpwY29yZV9kYXRhLCBORElTXzgwMl8xMV9URVNUICpwdGVzdF9kYXRhKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCisvKgorLy8gVGhlIGxlZnQgT0lEcworCisvLyBPSURfODAyXzExX05FVFdPUktfVFlQRVNfU1VQUE9SVEVECisvLyBPSURfODAyXzExX1RYX1BPV0VSX0xFVkVMCisvLyBPSURfODAyXzExX1JTU0lfVFJJR0dFUgorLy8gT0lEXzgwMl8xMV9OVU1CRVJfT0ZfQU5URU5OQVMKKy8vIE9JRF84MDJfMTFfUlhfQU5URU5OQV9TRUxFQ1RFRAorLy8gT0lEXzgwMl8xMV9UWF9BTlRFTk5BX1NFTEVDVEVECisvLyBPSURfODAyXzExX1NUQVRJU1RJQ1MKKy8vIE9JRF84MDJfMTFfREVTSVJFRF9SQVRFUworLy8gT0lEXzgwMl8xMV9QUklWQUNZX0ZJTFRFUgorCisqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbm9uZS1zdGFuZGFyZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3M4IHNtZV9nZXRfY29ubmVjdF9zdGF0dXModm9pZCAqcGNvcmVfZGF0YSwgdTggKnBzdGF0dXMpOworCisvKisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKi8KKy8vczggc21lX2dldF9zY2FuX3R5cGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBzY2FuX3R5cGUpOworLy9zOCBzbWVfc2V0X3NjYW5fdHlwZSh2b2lkICpwY29yZV9kYXRhLCB1OCBzY2FuX3R5cGUpOworCisvL3M4IHNtZV9nZXRfc2Nhbl9jaGFubmVsX2xpc3Qodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBzY2FuX3R5cGUpOworLy9zOCBzbWVfc2V0X3NjYW5fY2hhbm5lbF9saXN0KHZvaWQgKnBjb3JlX2RhdGEsIHU4IHNjYW5fdHlwZSk7CisKKwordm9pZCBzbWVfZ2V0X2VuY3J5cHRpb25fc3RhdHVzKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpFbmNyeXB0U3RhdHVzKTsKK3ZvaWQgc21lX3NldF9lbmNyeXB0aW9uX3N0YXR1cyh2b2lkICpwY29yZV9kYXRhLCB1OCBFbmNyeXB0U3RhdHVzKTsKK3M4IHNtZV9hZGRfa2V5KHZvaWQJCSpwY29yZV9kYXRhLAorCQkJCQl1MzIJCWtleV9pbmRleCwKKwkJCQkJdTgJCWtleV9sZW4sCisJCQkJCXU4CQlrZXlfdHlwZSwKKwkJCQkJdTgJCSprZXlfYnNzaWQsCisJCQkJCS8vdTgJCSprZXlfcnNjLAorCQkJCQl1OAkJKnB0eF90c2MsCisJCQkJCXU4CQkqcHJ4X3RzYywKKwkJCQkJdTgJCSprZXlfbWF0ZXJpYWwpOwordm9pZCBzbWVfcmVtb3ZlX2RlZmF1bHRfa2V5KHZvaWQgKnBjb3JlX2RhdGEsIGludCBpbmRleCk7Cit2b2lkIHNtZV9yZW1vdmVfbWFwcGluZ19rZXkodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBtYWNfYWRkcik7Cit2b2lkIHNtZV9jbGVhcl9hbGxfbWFwcGluZ19rZXkodm9pZCAqcGNvcmVfZGF0YSk7Cit2b2lkIHNtZV9jbGVhcl9hbGxfZGVmYXVsdF9rZXkodm9pZCAqcGNvcmVfZGF0YSk7CisKKworCitzOCBzbWVfc2V0X3ByZWFtYmxlX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggbW9kZSk7CitzOCBzbWVfZ2V0X3ByZWFtYmxlX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKm1vZGUpOworczggc21lX2dldF9wcmVhbWJsZV90eXBlKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICp0eXBlKTsKK3M4IHNtZV9zZXRfc2xvdHRpbWVfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCBtb2RlKTsKK3M4IHNtZV9nZXRfc2xvdHRpbWVfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqbW9kZSk7CitzOCBzbWVfZ2V0X3Nsb3R0aW1lX3R5cGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnR5cGUpOworczggc21lX3NldF90eHJhdGVfcG9saWN5KHZvaWQgKnBjb3JlX2RhdGEsIHU4IHBvbGljeSk7CitzOCBzbWVfZ2V0X3R4cmF0ZV9wb2xpY3kodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBvbGljeSk7CitzOCBzbWVfZ2V0X2N3bWluX3ZhbHVlKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpjd21pbik7CitzOCBzbWVfZ2V0X2N3bWF4X3ZhbHVlKHZvaWQgKnBjb3JlX2RhdGEsIHUxNiAqY3dtYXgpOworczggc21lX2dldF9tc19yYWRpb19tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICogcE1zUmFkaW9PZmYpOworczggc21lX3NldF9tc19yYWRpb19tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4IGJvTXNSYWRpb09mZik7CitzOCBzbWVfZ2V0X3JhZGlvX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgcHNSYWRpb09mZiBwUmFkaW9PZmZEYXRhKTsKK3M4IHNtZV9zZXRfcmFkaW9fbW9kZSh2b2lkICpwY29yZV9kYXRhLCBSYWRpb09mZiBSYWRpb09mZkRhdGEpOworCit2b2lkIHNtZV9nZXRfdHhfcG93ZXJfbGV2ZWwodm9pZCAqcGNvcmVfZGF0YSwgdTMyICpUeFBvd2VyKTsKK3U4IHNtZV9zZXRfdHhfcG93ZXJfbGV2ZWwodm9pZCAqcGNvcmVfZGF0YSwgdTMyIFR4UG93ZXIpOwordm9pZCBzbWVfZ2V0X2FudGVubmFfY291bnQodm9pZCAqcGNvcmVfZGF0YSwgdTMyICpBbnRlbm5hQ291bnQpOwordm9pZCBzbWVfZ2V0X3J4X2FudGVubmEodm9pZCAqcGNvcmVfZGF0YSwgdTMyICpSeEFudGVubmEpOwordTggc21lX3NldF9yeF9hbnRlbm5hKHZvaWQgKnBjb3JlX2RhdGEsIHUzMiBSeEFudGVubmEpOwordm9pZCBzbWVfZ2V0X3R4X2FudGVubmEodm9pZCAqcGNvcmVfZGF0YSwgdTMyICpUeEFudGVubmEpOworczggc21lX3NldF90eF9hbnRlbm5hKHZvaWQgKnBjb3JlX2RhdGEsIHUzMiBUeEFudGVubmEpOworczggc21lX3NldF9JQlNTX2NoYW4odm9pZCAqcGNvcmVfZGF0YSwgQ2hhbkluZm8gY2hhbik7CisKKy8vMjAwNjExMDggV1BTCitzOCBzbWVfc2V0X0lFX2FwcGVuZCh2b2lkICpwY29yZV9kYXRhLCBQVUNIQVIgYnVmZmVyLCB1MTYgYnVmX2xlbik7CisKKworCisKKy8vPT09PT09PT09PT09PT09PT09IExvY2FsIGZ1bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09CisvLyNpZmRlZiBfSFNJTkNIVQorLy92b2lkIGRydl90cmFuc2xhdGVfcnNzaSgpOyAgIC8vIEhXIFJTU0kgYml0IC0+IE5ESVMgUlNTSSByZXByZXNlbnRhdGlvbgorLy92b2lkIGRydl90cmFuc2xhdGVfYnNzX2Rlc2NyaXB0aW9uKCk7IC8vIExvY2FsIGJzcyBkZXNjIC0+IE5ESVMgYnNzIGRlc2MKKy8vdm9pZCBkcnZfdHJhbnNsYXRlX2NoYW5uZWwodTggTmV0d29ya1R5cGUsIHU4IENoYW5uZWxOdW1iZXIsIHUzMiAqZnJlcSk7IC8vIGNoYW5uZWwgbnVtYmVyIC0+IGNoYW5uZWwgL2ZyZXEuCisvLyNlbmRpZiBfSFNJTkNIVQorLy8KK3N0YXRpYyBjb25zdCB1MzIgUG93ZXJEYlRvTXdbXSA9Cit7CisJNTYsCS8vbVcsIE1BWCAtIDAsCTE3LjUgZGJtCisJNDAsCS8vbVcsIE1BWCAtIDEsCTE2LjAgZGJtCisJMzAsCS8vbVcsIE1BWCAtIDIsCTE0LjggZGJtCisJMjAsCS8vbVcsIE1BWCAtIDMsCTEzLjAgZGJtCisJMTUsCS8vbVcsIE1BWCAtIDQsCTExLjggZGJtCisJMTIsCS8vbVcsIE1BWCAtIDUsCTEwLjYgZGJtCisJOSwJLy9tVywgTUFYIC0gNiwJIDkuNCBkYm0KKwk3LAkvL21XLCBNQVggLSA3LAkgOC4zIGRibQorCTUsCS8vbVcsIE1BWCAtIDgsCSA2LjQgZGJtCisJNCwJLy9tVywgTUFYIC0gOSwJIDUuMyBkYm0KKwkzLAkvL21XLCBNQVggLSAxMCwgIDQuMCBkYm0KKwkyLAkvL21XLCBNQVggLSAxMSwgID8gZGJtCisJMiwJLy9tVywgTUFYIC0gMTIsICA/IGRibQorCTIsCS8vbVcsIE1BWCAtIDEzLCAgPyBkYm0KKwkyLAkvL21XLCBNQVggLSAxNCwgID8gZGJtCisJMiwJLy9tVywgTUFYIC0gMTUsICA/IGRibQorCTIsCS8vbVcsIE1BWCAtIDE2LCAgPyBkYm0KKwkyLAkvL21XLCBNQVggLSAxNywgID8gZGJtCisJMiwJLy9tVywgTUFYIC0gMTgsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDE5LCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyMCwgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMjEsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDIyLCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyMywgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMjQsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDI1LCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyNiwgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMjcsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDI4LCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyOSwgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMzAsICA/IGRibQorCTEJLy9tVywgTUFYIC0gMzEsICA/IGRibQorfTsKKworCisKKworCisjZW5kaWYgLyogX19TTUVfQVBJX0hfXyAqLworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZDJmYmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfcy5oCkBAIC0wLDAgKzEsMjI4IEBACisvLworLy8gU01FX1MuSCAtCisvLyBTTUUgdGFzayBnbG9iYWwgQ09OU1RBTlRTLCBTVFJVQ1RVUkVTLCB2YXJpYWJsZXMKKy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvL2RlZmluZSB0aGUgbXNnIHR5cGUgb2YgU01FIG1vZHVsZQorLy8gMHgwMH4weDFGIDogTVNHIGZyb20gR1VJIGRpc3BhdGNoCisvLyAweDIwfjB4M0YgOiBNU0cgZnJvbSBNTE1FCisvLyAweDQwfjB4NUYgOiBNU0cgZnJvbSBTQ0FOCisvLyAweDYwfjB4NkYgOiBNU0cgZnJvbSBUWC9SWAorLy8gMHg3MH4weDdGIDogTVNHIGZyb20gUk9BTUlORworLy8gMHg4MH4weDhGIDogTVNHIGZyb20gSVNSCisvLyAweDkwCQkgOiBNU0cgVGltZU91dAorCisvLyBmcm9tIEdVSQorI2RlZmluZSBTTUVNU0dfU0NBTl9SRVEJCQkJCTB4MDEKKy8vI2RlZmluZSBTTUVNU0dfUEFTU0lWRV9TQ0FOX1JFUQkJCTB4MDIKKyNkZWZpbmUgU01FTVNHX0pPSU5fUkVRCQkJCQkweDAzCisjZGVmaW5lIFNNRU1TR19TVEFSVF9JQlNTCQkJCTB4MDQKKyNkZWZpbmUgU01FTVNHX0RJU0NPTk5FQ1RfUkVRCQkJMHgwNQorI2RlZmluZSBTTUVNU0dfQVVUSEVOX1JFUQkJCQkweDA2CisjZGVmaW5lIFNNRU1TR19ERUFVVEhFTl9SRVEJCQkJMHgwNworI2RlZmluZSBTTUVNU0dfQVNTT0NfUkVRCQkJCTB4MDgKKyNkZWZpbmUgU01FTVNHX1JFQVNTT0NfUkVRCQkJCTB4MDkKKyNkZWZpbmUgU01FTVNHX0RJU0FTU09DX1JFUQkJCQkweDBhCisjZGVmaW5lIFNNRU1TR19QT1dFUlNBVkVfUkVRCQkJMHgwYgorCisKKy8vIGZyb20gTUxNRQorI2RlZmluZSBTTUVNU0dfQVVUSEVOX0NGTQkJCQkweDIxCisjZGVmaW5lIFNNRU1TR19BVVRIRU5fSU5ECQkJCTB4MjIKKyNkZWZpbmUgU01FTVNHX0FTU09DX0NGTQkJCQkweDIzCisjZGVmaW5lIFNNRU1TR19ERUFVVEhFTl9JTkQJCQkJMHgyNAorI2RlZmluZSBTTUVNU0dfRElTQVNTT0NfSU5ECQkJCTB4MjUKKy8vIGZyb20gU0NBTgorI2RlZmluZSBTTUVNU0dfU0NBTl9DRk0JCQkJCTB4NDEKKyNkZWZpbmUgU01FTVNHX1NUQVJUX0lCU1NfQ0ZNCQkJMHg0MgorLy8gZnJvbSBNVE8sIGZ1bmN0aW9uIGNhbGwgdG8gc2V0IFNNRSBwYXJhbWV0ZXJzCisKKy8vIDB4NjB+MHg2RiA6IE1TRyBmcm9tIFRYL1JYCisvLyNkZWZpbmUgU01FTVNHX0lCU1NfSk9JTl9VUERBVEVfQlNTSUQJMHg2MQorI2RlZmluZSBTTUVNU0dfQ09VTlRFUk1FQVNVUkVfTUlDRkFJTF9USU1FT1VUCQkweDYyCisjZGVmaW5lIFNNRU1TR19DT1VOVEVSTUVBU1VSRV9CTE9DS19USU1FT1VUCTB4NjMKKy8vIGZyb20gUk9BTUlORworI2RlZmluZSBTTUVNU0dfSEFORE9WRVJfSk9JTl9SRVEJCTB4NzEKKyNkZWZpbmUgU01FTVNHX0VORF9ST0FNSU5HCQkJCTB4NzIKKyNkZWZpbmUgU01FTVNHX1NDQU5fSk9JTl9SRVEJCQkweDczCisvLyBmcm9tIElTUgorI2RlZmluZSBTTUVNU0dfVFNGX1NZTkNfSU5ECQkJCTB4ODEKKy8vIGZyb20gVGltZU91dAorI2RlZmluZSBTTUVNU0dfVElNRU9VVAkJCQkJMHg5MQorCisKKworI2RlZmluZSBNQVhfUE1LSURfQWNjdW50ICAgICAgICAgICAgICAgIDE2CisvL0BhZGRlZCBieSB3cyAwNC8yMi8wNQorI2RlZmluZSBDaXBoZXJfRGlzYWJsZWQgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ2lwaGVyX1dlcCAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENpcGhlcl9Ua2lwICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDaXBoZXJfQ2NtcCAgICAgICAgICAgICAgICAgICAgIDQKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vQ29uc3RhbnRzCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9HbG9iYWwgZGF0YSBzdHJ1Y3R1cmVzCisKKyNkZWZpbmUgTlVNT0ZXRVBFTlRSSUVTICAgICA2NAorCit0eXBlZGVmIGVudW0gX1dFUEtleU1vZGUKK3sKKyAgICBXRVBLRVlfRElTQUJMRUQgPSAwLAorICAgIFdFUEtFWV82NCAgICAgICA9IDEsCisgICAgV0VQS0VZXzEyOCAgICAgID0gMgorCit9IFdFUEtFWU1PREUsICpwV0VQS0VZTU9ERTsKKworI2lmZGVmIF9XUEEyXworCit0eXBlZGVmIHN0cnVjdCBfQlNTSW5mbworeworICB1OCAgICAgICAgUHJlQXV0aEJzc0lEWzZdOworICBQTUtJRCAgICAgICAgcG1raWRfdmFsdWU7Cit9QlNTSURfSW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgX1BNS0lEX1RhYmxlIC8vYWRkZWQgYnkgd3MgMDUvMDUvMDQKK3sKKyAgIHUzMiAgTGVuZ3RoOworICAgdTMyICBCU1NJREluZm9Db3VudDsKKyAgIEJTU0lEX0luZm8gQlNTSURJbmZvWzE2XTsKKworfSBQTUtJRF9UYWJsZTsKKworI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworI2RlZmluZSBNQVhfQkFTSUNfUkFURV9TRVQgICAgICAgICAgMTUKKyNkZWZpbmUgTUFYX09QVF9SQVRFX1NFVCAgICAgICAgICAgIE1BWF9CQVNJQ19SQVRFX1NFVAorCisKK3R5cGVkZWYgc3RydWN0IF9TTUVfUEFSQU1FVEVSUworeworICAgIHUxNgkJCQl3U3RhdGU7CisJdTgJCQkJYm9EVVRtb2RlOworCXU4CQkJCWJEZXNpcmVkUG93ZXJTYXZlOworCisJLy8gU01FIHRpbWVyIGFuZCB0aW1lb3V0IHZhbHVlCisJLy9ORElTX01JTklQT1JUX1RJTUVSCW5UaW1lcjsKKwlPU19USU1FUgkJCW5UaW1lcjsKKworCXU4CQkJCWJvSW5UaW1lckhhbmRsZXI7CisJdTggCQkJCWJvQXV0aFJldHJ5QWN0aXZlOworCXU4CQkJCXJlc2VydmVkXzBbMl07CisKKwl1MzIJCQkJQXV0aGVuUmV0cnlUaW1lclZhbDsJLy8gTk9URTogQXNzb2MgZG9uJ3QgZmFpbCB0aW1lb3V0CisJdTMyCQkJCUpvaW5GYWlsVGltZXJWYWw7CQkvLyAxMCpCZWFjb24tSW50ZXJ2YWwKKworCS8vUmF0ZXMKKwl1OAkJCQlCU1NCYXNpY1JhdGVTZXRbKE1BWF9CQVNJQ19SQVRFX1NFVCArIDMpICYgfjB4MDMgXTsgICAgLy8gQlNTIGJhc2ljIHJhdGUgc2V0CisJdTgJCQkJT3BlcmF0aW9uYWxSYXRlU2V0WyhNQVhfT1BUX1JBVEVfU0VUICsgMykgJiB+MHgwMyBdOyAvLyBPcGVyYXRpb25hbCByYXRlIHNldAorCisJdTgJCQkJTnVtT2ZCU1NCYXNpY1JhdGU7CisJdTgJCQkJTnVtT2ZPcGVyYXRpb25hbFJhdGU7CisJdTgJCQkJcmVzZXJ2ZWRfMVsyXTsKKworCXUzMgkJCQlCYXNpY1JhdGVCaXRtYXA7CisJdTMyCQkJCU9wUmF0ZUJpdG1hcDsKKworCS8vIFN5c3RlbSBwYXJhbWV0ZXJzIFNldCBieSBHVUkKKwkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXJ0IElCU1MgcGFyYW1ldGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCisJdTMyCQkJCWJvU3RhcnRJQlNTOwkJCS8vU3RhcnQgSUJTUyB0b2dnbGUKKworCXUxNgkJCQl3QmVhY29uUGVyaW9kOworCXUxNgkJCQl3QVRJTV9XaW5kb3c7CisKKwlDaGFuSW5mbwkJCUlic3NDaGFuOyAvLyAyQgkvL2NoYW5uZWwgc2V0dGluZyB3aGVuIHN0YXJ0IElCU1MKKwl1OAkJCQlyZXNlcnZlZF8yWzJdOworCisgICAgLy8gSm9pbiByZWxhdGVkCisJdTE2CQkJCXdEZXNpcmVkSm9pbkJTUzsJCS8vIEJTUyBpbmRleCB3aGljaCBkZXNpcmUgdG8gam9pbgorCXU4CQkJCWJvSm9pblJlcTsJCQkJLy9Kb2luIHJlcXVlc3QgdG9nZ2xlCisJdTgJCQkJYkRlc2lyZWRCU1NUeXBlOwkJLy9mb3IgSm9pbiByZXF1ZXN0CisKKyAgICB1MTYJCQkJd0NhcGFiaWxpdHlJbmZvOyAgICAgICAgLy8gVXNlZCB3aGVuIGludm9raW5nIHRoZSBNTE1FX0Fzc29jaWF0ZV9yZXF1ZXN0KCkuCisJdTE2CQkJCXdOb25FUlBjYXBhYmlsaXR5SW5mbzsKKworICAgIHN0cnVjdCBTU0lEX0VsZW1lbnQgc0Rlc2lyZWRTU0lEOyAvLyAzNCBCCisJdTgJCQkJcmVzZXJ2ZWRfM1syXTsKKworCXU4ICAgIAkJCWFiRGVzaXJlZEJTU0lEW01BQ19BRERSX0xFTkdUSCArIDJdOworCisJdTgJCQkJYkpvaW5TY2FuQ291bnQ7CQkJLy8gdGhlIHRpbWUgb2Ygc2Nhbi1qb2luIGFjdGlvbiBuZWVkIHRvIGRvCisJdTgJCQkJYkRlc2lyZWRBdXRoTW9kZTsgICAgICAgLy8gQVVUSF9PUEVOX1NZU1RFTSBvciBBVVRIX1NIQVJFRF9LRVkKKwl1OAkJCQlyZXNlcnZlZF80WzJdOworCisgICAgLy8gRW5jcnlwdGlvbiBwYXJhbWV0ZXJzCisJdTggICAgIAkJCV9kb3QxMVByaXZhY3lJbnZva2VkOworICAgIHU4ICAgICAgICAgICAgIAlfZG90MTFQcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQ7CisJdTgJCQkJcmVzZXJ2ZWRfNVsyXTsKKworICAgIC8vQCB3cyBhZGRlZAorICAgIHU4CQkJCURlc2lyZWRFbmNyeXB0OworCXU4CQkJCWVuY3J5cHRfc3RhdHVzOwkvL0VOQ1JZUFRfRElTQUJMRSwgRU5DUllQVF9XRVAsIEVOQ1JZUFRfV0VQX05PS0VZLCBFTkNSWVBUX1RLSVAsIC4uLgorCXU4CQkJCWtleV9sZW5ndGg7CisJdTgJCQkJcGFpcndpc2Vfa2V5X29rOworCisJdTgJCQkJZ3JvdXBfa2V5X29rOworICAgIHU4CQkJCXdwYV9vazsgICAgICAgICAgICAgLy8gaW5kaWNhdGUgdGhlIGNvbnRyb2wgcG9ydCBvZiA4MDIuMXggaXMgb3BlbiBvciBjbG9zZQorCXU4CQkJCXBhaXJ3aXNlX2tleV90eXBlOworCXU4CQkJCWdyb3VwX2tleV90eXBlOworCisgICAgdTMyICAgICAgICAgICAgICAgX2RvdDExV0VQRGVmYXVsdEtleUlEOworCisJdTggICAgICAgICAgICAgIAl0eF9taWNfa2V5WzhdOyAgICAgIC8vIFRPRE86IDA2Mjcga2V2aW4tVEtJUAorCXU4ICAgICAgICAgICAgICAJcnhfbWljX2tleVs4XTsgICAgICAvLyBUT0RPOiAwNjI3IGtldmluLVRLSVAKKwl1OAkJCQlncm91cF90eF9taWNfa2V5WzhdOworCXU4CQkJCWdyb3VwX3J4X21pY19rZXlbOF07CisKKy8vCSNpZmRlZiBfV1BBXworCXU4CQkJCUFzc29jUmVxVmFySUVbMjAwXTsKKwl1OAkJCQlBc3NvY1Jlc3BWYXJJRVsyMDBdOworCisJdTE2CQkJCUFzc29jUmVxVmFyTGVuOworCXUxNgkJCQlBc3NvY1Jlc3BWYXJMZW47CisJdTgJCQkJYm9SZWFzc29jOwkJCQkvL3VzZSBhc3NvYy4gb3IgcmVhc3NvYy4KKwl1OAkJCQlyZXNlcnZlZF82WzNdOworCXUxNgkJCQlBc3NvY1Jlc3BDYXBhYmlsaXR5OworCXUxNgkJCQlBc3NvY1Jlc3BTdGF0dXM7CisvLwkjZW5kaWYKKworCSNpZmRlZiBfV1BBMl8KKyAgICB1OCAgICAgICAgICAgICAgIFBta0lkVGFibGVbMjU2XTsKKyAgICB1MzIgICAgICAgICAgICAgICBQbWtpZFRhYmxlSW5kZXg7CisJI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworfSBTTUVfUEFSQU1FVEVSUywgKlBTTUVfUEFSQU1FVEVSUzsKKworI2RlZmluZSBwc1NNRQkJCSgmKEFkYXB0ZXItPnNTbWVQYXJhKSkKKworI2RlZmluZSB3U01FR2V0Q3VycmVudFNUQVN0YXRlKEFkYXB0ZXIpCQkoKHUxNikoQWRhcHRlciktPnNTbWVQYXJhLndTdGF0ZSkKKworCisKKy8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKy8vCVNtZU1vZHVsZS5oCisvLwkJRGVmaW5lIHRoZSByZWxhdGVkIGRlZmluaXRpb25zIG9mIFNNRSBtb2R1bGUKKy8vCWhpc3RvcnkgLS0gMDEvMTQvMDMnIGNyZWF0ZWQKKy8vCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKKy8vRGVmaW5lIHRoZSBzdGF0ZSBvZiBTTUUgbW9kdWxlCisjZGVmaW5lIERJU0FCTEVECQkJCQkJMAorI2RlZmluZSBJTklUX1NDQU4JCQkJCQkxCisjZGVmaW5lIFNDQU5fUkVBRFkJCQkJCQkyCisjZGVmaW5lIFNUQVJUX0lCU1MJCQkJCQkzCisjZGVmaW5lIEpPSU5fUEVORElORwkJCQkJNAorI2RlZmluZSBKT0lOX0NGTQkJCQkJCTUKKyNkZWZpbmUgQVVUSEVOVElDQVRFX1BFTkRJTkcJCQk2CisjZGVmaW5lIEFVVEhFTlRJQ0FURUQJCQkJCTcKKyNkZWZpbmUgQ09OTkVDVEVECQkJCQkJOAorLy8jZGVmaW5lIEVBUF9TVEFSVElORwkJCQkJOQorLy8jZGVmaW5lIEVBUE9MX0FVVEhFTl9QRU5ESU5HCQkJMTAKKy8vI2RlZmluZSBTRUNVUkVfQ09OTkVDVEVECQkJCTExCisKKworLy8gU3RhdGljIGZ1bmN0aW9uCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVfdmVyLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1X3Zlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzNiYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1X3Zlci5oCkBAIC0wLDAgKzEsMzAgQEAKKy8vCisvLyBPbmx5IGRlZmluZSBvbmUgb2YgZm9sbG93CisvLworCisjaWZkZWYgV0JfV0lOCisJI2RlZmluZSBWRVJfRklMRVZFUlNJT04gICAgICAgICAgICAgMSwwMCw0NywwMAorCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OX1NUUiAgICAgICAgICIxLjAwLjQ3LjAwIgorCSNkZWZpbmUgV0IzMl9EUklWRVJfTUFKT1JfVkVSU0lPTiAgIDB4MDEwMAorCSNkZWZpbmUgV0IzMl9EUklWRVJfTUlOT1JfVkVSU0lPTiAgIDB4NDcwMAorI2VuZGlmCisKKyNpZmRlZiBXQl9DRQorCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OICAgICAgICAgICAgIDIsMDAsNDcsMDAKKwkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTl9TVFIgICAgICAgICAiMi4wMC40Ny4wMCIKKwkjZGVmaW5lIFdCMzJfRFJJVkVSX01BSk9SX1ZFUlNJT04gICAweDAyMDAKKwkjZGVmaW5lIFdCMzJfRFJJVkVSX01JTk9SX1ZFUlNJT04gICAweDQ3MDAKKyNlbmRpZgorCisjaWZkZWYgV0JfTElOVVgKKwkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTiAgICAgICAgICAgICAzLDAwLDQ3LDAwCisJI2RlZmluZSBWRVJfRklMRVZFUlNJT05fU1RSICAgICAgICAgIjMuMDAuNDcuMDAiCisJI2RlZmluZSBXQjMyX0RSSVZFUl9NQUpPUl9WRVJTSU9OICAgMHgwMzAwCisJI2RlZmluZSBXQjMyX0RSSVZFUl9NSU5PUl9WRVJTSU9OICAgMHg0NzAwCisjZW5kaWYKKworCisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjQ0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbC5jCkBAIC0wLDAgKzEsODc4IEBACisjaW5jbHVkZSAib3NfY29tbW9uLmgiCisKK3ZvaWQgaGFsX2dldF9ldGhlcm5ldF9hZGRyZXNzKCBwaHdfZGF0YV90IHBId0RhdGEsIFBVQ0hBUiBjdXJyZW50X2FkZHJlc3MgKQoreworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCW1lbWNweSggY3VycmVudF9hZGRyZXNzLCBwSHdEYXRhLT5DdXJyZW50TWFjQWRkcmVzcywgRVRIX0xFTkdUSF9PRl9BRERSRVNTICk7Cit9CisKK3ZvaWQgaGFsX3NldF9ldGhlcm5ldF9hZGRyZXNzKCBwaHdfZGF0YV90IHBId0RhdGEsIFBVQ0hBUiBjdXJyZW50X2FkZHJlc3MgKQoreworCXUzMiBsdG1wWzJdOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJbWVtY3B5KCBwSHdEYXRhLT5DdXJyZW50TWFjQWRkcmVzcywgY3VycmVudF9hZGRyZXNzLCBFVEhfTEVOR1RIX09GX0FERFJFU1MgKTsKKworCWx0bXBbMF09IGNwdV90b19sZTMyKCAqKFBVTE9ORylwSHdEYXRhLT5DdXJyZW50TWFjQWRkcmVzcyApOworCWx0bXBbMV09IGNwdV90b19sZTMyKCAqKFBVTE9ORykocEh3RGF0YS0+Q3VycmVudE1hY0FkZHJlc3MgKyA0KSApICYgMHhmZmZmOworCisJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDAzZTgsIGx0bXAsIDIsIEFVVE9fSU5DUkVNRU5UICk7Cit9CisKK3ZvaWQgaGFsX2dldF9wZXJtYW5lbnRfYWRkcmVzcyggcGh3X2RhdGFfdCBwSHdEYXRhLCBQVUNIQVIgcGV0aGVybmV0X2FkZHJlc3MgKQoreworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCW1lbWNweSggcGV0aGVybmV0X2FkZHJlc3MsIHBId0RhdGEtPlBlcm1hbmVudE1hY0FkZHJlc3MsIDYgKTsKK30KKwordTggaGFsX2luaXRfaGFyZHdhcmUocGh3X2RhdGFfdCBwSHdEYXRhLCBQV0IzMl9BREFQVEVSIEFkYXB0ZXIpCit7CisJdTE2IFNvZnR3YXJlU2V0OworCXBId0RhdGEtPkFkYXB0ZXIgPSBBZGFwdGVyOworCisJLy8gSW5pdGlhbCB0aGUgdmFyaWFibGUKKwlwSHdEYXRhLT5NYXhSZWNlaXZlTGlmZVRpbWUgPSBERUZBVUxUX01TRFVfTElGRV9USU1FOyAvLyBTZXR0aW5nIFJ4IG1heGltdW0gTVNEVSBsaWZlIHRpbWUKKwlwSHdEYXRhLT5GcmFnbWVudFRocmVzaG9sZCA9IERFRkFVTFRfRlJBR01FTlRfVEhSRVNIT0xEOyAvLyBTZXR0aW5nIGRlZmF1bHQgZnJhZ21lbnQgdGhyZXNob2xkCisKKwlpZiAoV2JVc2JfaW5pdGlhbChwSHdEYXRhKSkgeworCQlwSHdEYXRhLT5Jbml0aWFsUmVzb3VyY2UgPSAxOworCQlpZiggV2IzNVJlZ19pbml0aWFsKHBId0RhdGEpKSB7CisJCQlwSHdEYXRhLT5Jbml0aWFsUmVzb3VyY2UgPSAyOworCQkJaWYgKFdiMzVUeF9pbml0aWFsKHBId0RhdGEpKSB7CisJCQkJcEh3RGF0YS0+SW5pdGlhbFJlc291cmNlID0gMzsKKwkJCQlpZiAoV2IzNVJ4X2luaXRpYWwocEh3RGF0YSkpIHsKKwkJCQkJcEh3RGF0YS0+SW5pdGlhbFJlc291cmNlID0gNDsKKwkJCQkJT1NfVElNRVJfSU5JVElBTCggJnBId0RhdGEtPkxFRFRpbWVyLCBoYWxfbGVkX2NvbnRyb2wsIHBId0RhdGEgKTsKKwkJCQkJT1NfVElNRVJfU0VUKCAmcEh3RGF0YS0+TEVEVGltZXIsIDEwMDAgKTsgLy8gMjAwNjA2MjMKKworCQkJCQkvLworCQkJCQkvLyBGb3IgcmVzdHJpY3QgdG8gdmVuZG9yJ3MgaGFyZHdhcmUKKwkJCQkJLy8KKwkJCQkJU29mdHdhcmVTZXQgPSBoYWxfc29mdHdhcmVfc2V0KCBwSHdEYXRhICk7CisKKwkJCQkJI2lmZGVmIFZlbmRvcjIKKwkJCQkJLy8gVHJ5IHRvIG1ha2Ugc3VyZSB0aGUgRUVQUk9NIGNvbnRhaW4KKwkJCQkJU29mdHdhcmVTZXQgPj49IDg7CisJCQkJCWlmKCBTb2Z0d2FyZVNldCAhPSAweDgyICkKKwkJCQkJCXJldHVybiBGQUxTRTsKKwkJCQkJI2VuZGlmCisKKwkJCQkJV2IzNVJ4X3N0YXJ0KCBwSHdEYXRhICk7CisJCQkJCVdiMzVUeF9FUDJWTV9zdGFydCggcEh3RGF0YSApOworCisJCQkJCXJldHVybiBUUlVFOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXBId0RhdGEtPlN1cnByaXNlUmVtb3ZlID0gMTsKKwlyZXR1cm4gRkFMU0U7Cit9CisKKwordm9pZCBoYWxfaGFsdChwaHdfZGF0YV90IHBId0RhdGEsIHZvaWQgKnBwYV9kYXRhKQoreworCXN3aXRjaCggcEh3RGF0YS0+SW5pdGlhbFJlc291cmNlICkKKwl7CisJCWNhc2UgNDoKKwkJY2FzZSAzOiBPU19USU1FUl9DQU5DRUwoICZwSHdEYXRhLT5MRURUaW1lciwgJmNhbmNlbCApOworCQkJT1NfU0xFRVAoMTAwMDAwKTsgLy8gV2FpdCBmb3IgVGltZXIgRFBDIGV4aXQgOTQwNjIzLjIKKwkJCVdiMzVSeF9kZXN0cm95KCBwSHdEYXRhICk7IC8vIFJlbGVhc2UgdGhlIFJ4CisJCWNhc2UgMjogV2IzNVR4X2Rlc3Ryb3koIHBId0RhdGEgKTsgLy8gUmVsZWFzZSB0aGUgVHgKKwkJY2FzZSAxOiBXYjM1UmVnX2Rlc3Ryb3koIHBId0RhdGEgKTsgLy8gUmVsZWFzZSB0aGUgV2IzNSBSZWdpc3N0ZXIgcmVzb3VyY2VzCisJCQkJV2JVc2JfZGVzdHJveSggcEh3RGF0YSApOy8vIFJlbGVhc2UgdGhlIFdiVXNiCisJfQorfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBoYWxfc2V0X3JhdGVzKHBod19kYXRhX3QgcEh3RGF0YSwgUFVDSEFSIHBic3NfcmF0ZXMsCisJCSAgIHU4IGxlbmd0aCwgdW5zaWduZWQgY2hhciBiYXNpY19yYXRlX3NldCkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXUzMgkJdG1wLCB0bXAxOworCXU4CQlSYXRlWzEyXT17IDIsIDQsIDExLCAyMiwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA3MiwgOTYsIDEwOCB9OworCXU4CQlTdXBwb3J0ZWRSYXRlWzE2XTsKKwl1OAkJaSwgaiwgaywgQ291bnQxLCBDb3VudDIsIEJ5dGU7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwlpZiAoYmFzaWNfcmF0ZV9zZXQpIHsKKwkJcFdiMzVSZWctPk0yOF9NYWNDb250cm9sICY9IH4weDAwMGZmZjAwOworCQl0bXAxID0gMHgwMDAwMDEwMDsKKwl9IGVsc2UgeworCQlwV2IzNVJlZy0+TTI4X01hY0NvbnRyb2wgJj0gfjB4ZmZmMDAwMDA7CisJCXRtcDEgPSAweDAwMTAwMDAwOworCX0KKworCXRtcCA9IDA7CisJZm9yIChpPTA7IGk8bGVuZ3RoOyBpKyspIHsKKwkJQnl0ZSA9IHBic3NfcmF0ZXNbaV0gJiAweDdmOworCQlmb3IgKGo9MDsgajwxMjsgaisrKSB7CisJCQlpZiggQnl0ZSA9PSBSYXRlW2pdICkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChqIDwgMTIpCisJCQl0bXAgfD0gKHRtcDE8PGopOworCX0KKworCXBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCB8PSB0bXA7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODI4LCBwV2IzNVJlZy0+TTI4X01hY0NvbnRyb2wgKTsKKworCS8vIDkzMDIwNi4yLmMgTTc4IHNldHRpbmcKKwlqID0gayA9IENvdW50MSA9IENvdW50MiA9IDA7CisJbWVtc2V0KCBTdXBwb3J0ZWRSYXRlLCAwLCAxNiApOworCXRtcCA9IDB4MDAxMDAwMDA7CisJdG1wMSA9IDB4MDAwMDAxMDA7CisJZm9yIChpPTA7IGk8MTI7IGkrKykgeyAvLyBHZXQgdGhlIHN1cHBvcnRlZCByYXRlCisJCWlmICh0bXAgJiBwV2IzNVJlZy0+TTI4X01hY0NvbnRyb2wpIHsKKwkJCVN1cHBvcnRlZFJhdGVbal0gPSBSYXRlW2ldOworCisJCQlpZiAodG1wMSAmIHBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCkKKwkJCQlTdXBwb3J0ZWRSYXRlW2pdIHw9IDB4ODA7CisKKwkJCWlmIChrKQorCQkJCUNvdW50MisrOworCQkJZWxzZQorCQkJCUNvdW50MSsrOworCisJCQlqKys7CisJCX0KKworCQlpZiAoaT09NCAmJiBrPT0wKSB7CisJCQlpZiggIShwV2IzNVJlZy0+TTI4X01hY0NvbnRyb2wgJiAweDAwMGZmMDAwKSApIC8vIGlmIGJhc2ljIHJhdGUgaW4gMTFnIGRvbWFpbikKKwkJCXsKKwkJCQlrID0gMTsKKwkJCQlqID0gODsKKwkJCX0KKwkJfQorCisJCXRtcCA8PD0gMTsKKwkJdG1wMSA8PD0gMTsKKwl9CisKKwkvLyBGaWxsIGRhdGEgaW50byBzdXBwb3J0IHJhdGUgdW50aWwgYnVmZmVyIGZ1bGwKKwkvLy0tLTIwMDYwOTI2IGFkZCBieSBhbnNvbidzIGVuZGlhbgorCWZvciAoaT0wOyBpPDQ7IGkrKykKKwkJKihQVUxPTkcpKFN1cHBvcnRlZFJhdGUrKGk8PDIpKSA9IGNwdV90b19sZTMyKCAqKFBVTE9ORykoU3VwcG9ydGVkUmF0ZSsoaTw8MikpICk7CisJLy8tLS0gZW5kIDIwMDYwOTI2IGFkZCBieSBhbnNvbidzIGVuZGlhbgorCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwweDA4N2MsIChQVUxPTkcpU3VwcG9ydGVkUmF0ZSwgNCwgQVVUT19JTkNSRU1FTlQgKTsKKwlwV2IzNVJlZy0+TTdDX01hY0NvbnRyb2wgPSAoKFBVTE9ORylTdXBwb3J0ZWRSYXRlKVswXTsKKwlwV2IzNVJlZy0+TTgwX01hY0NvbnRyb2wgPSAoKFBVTE9ORylTdXBwb3J0ZWRSYXRlKVsxXTsKKwlwV2IzNVJlZy0+TTg0X01hY0NvbnRyb2wgPSAoKFBVTE9ORylTdXBwb3J0ZWRSYXRlKVsyXTsKKwlwV2IzNVJlZy0+TTg4X01hY0NvbnRyb2wgPSAoKFBVTE9ORylTdXBwb3J0ZWRSYXRlKVszXTsKKworCS8vIEZpbGwgbGVuZ3RoCisJdG1wID0gQ291bnQxPDwyOCB8IENvdW50Mjw8MjQ7CisJcFdiMzVSZWctPk03OF9FUlBJbmZvcm1hdGlvbiAmPSB+MHhmZjAwMDAwMDsKKwlwV2IzNVJlZy0+TTc4X0VSUEluZm9ybWF0aW9uIHw9IHRtcDsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4NzgsIHBXYjM1UmVnLT5NNzhfRVJQSW5mb3JtYXRpb24gKTsKK30KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBoYWxfc2V0X2JlYWNvbl9wZXJpb2QoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgYmVhY29uX3BlcmlvZCApCit7CisJdTMyCXRtcDsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCXBId0RhdGEtPkJlYWNvblBlcmlvZCA9IGJlYWNvbl9wZXJpb2Q7CisJdG1wID0gcEh3RGF0YS0+QmVhY29uUGVyaW9kIDw8IDE2OworCXRtcCB8PSBwSHdEYXRhLT5Qcm9iZURlbGF5OworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg0OCwgdG1wICk7Cit9CisKKwordm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKQoreworCVBXQjM1UkVHIHBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKQorCQlyZXR1cm47CisKKwlwcmludGsoIkdvaW5nIHRvIGNoYW5uZWw6ICVkLyVkXG4iLCBjaGFubmVsLmJhbmQsIGNoYW5uZWwuQ2hhbk5vKTsKKworCVJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggcEh3RGF0YSwgY2hhbm5lbCApOy8vIFN3aXRjaCBjaGFubmVsCisJcEh3RGF0YS0+Q2hhbm5lbCA9IGNoYW5uZWwuQ2hhbk5vOworCXBId0RhdGEtPmJhbmQgPSBjaGFubmVsLmJhbmQ7CisJI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCVdCREVCVUcoKCJTZXQgY2hhbm5lbCBpcyAlZCwgYmFuZCA9JWRcbiIsIHBId0RhdGEtPkNoYW5uZWwsIHBId0RhdGEtPmJhbmQpKTsKKwkjZW5kaWYKKwlwV2IzNVJlZy0+TTI4X01hY0NvbnRyb2wgJj0gfjB4ZmY7IC8vIENsZWFuIGNoYW5uZWwgaW5mb3JtYXRpb24gZmllbGQKKwlwV2IzNVJlZy0+TTI4X01hY0NvbnRyb2wgfD0gY2hhbm5lbC5DaGFuTm87CisJV2IzNVJlZ19Xcml0ZVdpdGhDYWxsYmFja1ZhbHVlKCBwSHdEYXRhLCAweDA4MjgsIHBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCwKKwkJCQkJKFBDSEFSKSZjaGFubmVsLCBzaXplb2YoQ2hhbkluZm8pKTsKK30KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGhhbF9zZXRfY3VycmVudF9jaGFubmVsKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gY2hhbm5lbCApCit7CisJaGFsX3NldF9jdXJyZW50X2NoYW5uZWxfZXgoIHBId0RhdGEsIGNoYW5uZWwgKTsKK30KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGhhbF9nZXRfY3VycmVudF9jaGFubmVsKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gKmNoYW5uZWwgKQoreworCWNoYW5uZWwtPkNoYW5ObyA9IHBId0RhdGEtPkNoYW5uZWw7CisJY2hhbm5lbC0+YmFuZCA9IHBId0RhdGEtPmJhbmQ7Cit9CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBoYWxfc2V0X2FjY2VwdF9icm9hZGNhc3QoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwlwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgJj0gfjB4MDIwMDAwMDA7Ly9UaGUgSFcgdmFsdWUKKworCWlmIChlbmFibGUpCisJCXBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCB8PSAweDAyMDAwMDAwOy8vVGhlIEhXIHZhbHVlCisKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4MDAsIHBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCApOworfQorCisvL2ZvciB3ZXAga2V5IGVycm9yIGRldGVjdGlvbiwgd2UgbmVlZCB0byBhY2NlcHQgYnJvYWRjYXN0IHBhY2tldHMgdG8gYmUgcmVjZWl2ZWQgdGVtcG9yYXJ5Lgordm9pZCBoYWxfc2V0X2FjY2VwdF9wcm9taXNjdW91cyggcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpIHJldHVybjsKKwlpZiAoZW5hYmxlKSB7CisJCXBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCB8PSAweDAwNDAwMDAwOworCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4MDAsIHBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCApOworCX0gZWxzZSB7CisJCXBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCY9fjB4MDA0MDAwMDA7CisJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgwMCwgcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICk7CisJfQorfQorCit2b2lkIGhhbF9zZXRfYWNjZXB0X211bHRpY2FzdCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCXBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCAmPSB+MHgwMTAwMDAwMDsvL1RoZSBIVyB2YWx1ZQorCWlmIChlbmFibGUpICBwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgfD0gMHgwMTAwMDAwMDsvL1RoZSBIVyB2YWx1ZQorCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgwMCwgcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICk7Cit9CisKK3ZvaWQgaGFsX3NldF9hY2NlcHRfYmVhY29uKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJLy8gMjAwNDAxMDggZGVidWcKKwlpZiggIWVuYWJsZSApLy9EdWUgdG8gU01FIGFuZCBNTE1FIGFyZSBub3Qgc3VpdGFibGUgZm9yIDM1CisJCXJldHVybjsKKworCXBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCAmPSB+MHgwNDAwMDAwMDsvL1RoZSBIVyB2YWx1ZQorCWlmKCBlbmFibGUgKQorCQlwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgfD0gMHgwNDAwMDAwMDsvL1RoZSBIVyB2YWx1ZQorCisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODAwLCBwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgKTsKK30KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGhhbF9zZXRfbXVsdGljYXN0X2FkZHJlc3MoIHBod19kYXRhX3QgcEh3RGF0YSwgUFVDSEFSIGFkZHJlc3MsIHU4IG51bWJlciApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwl1OAkJQnl0ZSwgQml0OworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJLy9FcmFzZXMgYW5kIHJlZmlsbHMgdGhlIGNhcmQgbXVsdGljYXN0IHJlZ2lzdGVycy4gVXNlZCB3aGVuIGFuIGFkZHJlc3MKKwkvLyAgICBoYXMgYmVlbiBkZWxldGVkIGFuZCBhbGwgYml0cyBtdXN0IGJlIHJlY29tcHV0ZWQuCisJcFdiMzVSZWctPk0wNF9NdWx0aWNhc3RBZGRyZXNzMSA9IDA7CisJcFdiMzVSZWctPk0wOF9NdWx0aWNhc3RBZGRyZXNzMiA9IDA7CisKKwl3aGlsZSggbnVtYmVyICkKKwl7CisJCW51bWJlci0tOworCQlDYXJkR2V0TXVsdGljYXN0Qml0KCAoYWRkcmVzcysobnVtYmVyKkVUSF9MRU5HVEhfT0ZfQUREUkVTUykpLCAmQnl0ZSwgJkJpdCk7CisJCXBXYjM1UmVnLT5NdWx0aWNhc3RbQnl0ZV0gfD0gQml0OworCX0KKworCS8vIFVwZGF0aW5nIHJlZ2lzdGVyCisJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4MDQsIChQVUxPTkcpcFdiMzVSZWctPk11bHRpY2FzdCwgMiwgQVVUT19JTkNSRU1FTlQgKTsKK30KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit1OCBoYWxfZ2V0X2FjY2VwdF9iZWFjb24oICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCVBXQjM1UkVHIHBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm4gMDsKKworCWlmKCBwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgJiAweDA0MDAwMDAwICkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwordW5zaWduZWQgY2hhciBoYWxfcmVzZXRfaGFyZHdhcmUoIHBod19kYXRhX3QgcEh3RGF0YSwgdm9pZCogcHBhICkKK3sKKwkvLyBOb3QgaW1wbGVtZW50IHlldAorCXJldHVybiBUUlVFOworfQorCit2b2lkIGhhbF9zdG9wKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJcEh3RGF0YS0+V2IzNVJ4LnJ4X2hhbHQgPSAxOworCVdiMzVSeF9zdG9wKCBwSHdEYXRhICk7CisKKwlwSHdEYXRhLT5XYjM1VHgudHhfaGFsdCA9IDE7CisJV2IzNVR4X3N0b3AoIHBId0RhdGEgKTsKKworCXBXYjM1UmVnLT5EMDBfRG1hQ29udHJvbCAmPSB+MHhjMDAwMDAwMDsvL1R4IE9mZiwgUnggT2ZmCisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwNDAwLCBwV2IzNVJlZy0+RDAwX0RtYUNvbnRyb2wgKTsKKworCVdiVXNiX1N0b3AoIHBId0RhdGEgKTsgLy8gMjAwNTEyMzAgQWRkLjQKK30KKwordW5zaWduZWQgY2hhciBoYWxfaWRsZShwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlQV0JVU0IJcFdiVXNiID0gJnBId0RhdGEtPldiVXNiOworCisJaWYoICFwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSAmJiAoIHBXYlVzYi0+RGV0ZWN0Q291bnQgfHwgcFdiMzVSZWctPkVQMHZtX3N0YXRlIT1WTV9TVE9QICkgKQorCQlyZXR1cm4gRkFMU0U7CisKKwlyZXR1cm4gVFJVRTsKK30KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGhhbF9zZXRfY3dtaW4oICBwaHdfZGF0YV90IHBId0RhdGEsICB1OAljd2luX21pbiApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCXBId0RhdGEtPmN3bWluID0gY3dpbl9taW47CisJcFdiMzVSZWctPk0yQ19NYWNDb250cm9sICY9IH4weDdjMDA7CS8vYml0IDEwIH4gMTQKKwlwV2IzNVJlZy0+TTJDX01hY0NvbnRyb2wgfD0gKHBId0RhdGEtPmN3bWluPDwxMCk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODJjLCBwV2IzNVJlZy0+TTJDX01hY0NvbnRyb2wgKTsKK30KKworczMyIGhhbF9nZXRfcnNzaSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUzMiAqSGFsUnNzaUFycnksICB1OCBDb3VudCApCit7CisJUFdCMzVSRUcgcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlSMDFfREVTQ1JJUFRPUglyMDE7CisJczMyIGx0bXAgPSAwLCB0bXA7CisJdTgJaTsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybiAtMjAwOworCWlmKCBDb3VudCA+IE1BWF9BQ0NfUlNTSV9DT1VOVCApIC8vIEJlY2F1c2UgdGhlIFRTIG1heSB1c2UgdGhpcyBmdW50aW9uCisJCUNvdW50ID0gTUFYX0FDQ19SU1NJX0NPVU5UOworCisJLy8gUlNTSSA9IEMxICsgQzIgKiAoYWdjX3N0YXRlWzc6MF0gKyBvZmZzZXRfbWFwKGxuYV9zdGF0ZVsxOjBdKSkKKwkvLyBDMSA9IC0xOTUsIEMyID0gMC42NiA9IDg1LzEyOAorCWZvciAoaT0wOyBpPENvdW50OyBpKyspCisJeworCQlyMDEudmFsdWUgPSBIYWxSc3NpQXJyeVtpXTsKKwkJdG1wID0gKCgoIHIwMS5SMDFfQUdDX3N0YXRlICsgcFdiMzVSZWctPkxOQVZhbHVlW3IwMS5SMDFfTE5BX3N0YXRlXSkgKiA4NSApID4+NyApIC0gMTk1OworCQlsdG1wICs9IHRtcDsKKwl9CisJbHRtcCAvPSBDb3VudDsKKwlpZiggcEh3RGF0YS0+cGh5X3R5cGUgPT0gUkZfQUlST0hBXzIyMzAgKSBsdG1wIC09IDU7IC8vIDEwOworCWlmKCBwSHdEYXRhLT5waHlfdHlwZSA9PSBSRl9BSVJPSEFfMjIzMFMgKSBsdG1wIC09IDU7IC8vIDEwOyAyMDA2MDQyMCBBZGQgdGhpcworCisJLy9pZiggbHRtcCA8IC0yMDAgKSBsdG1wID0gLTIwMDsKKwlpZiggbHRtcCA8IC0xMTAgKSBsdG1wID0gLTExMDsvLyAxLjAuMjQuMCBGb3IgTkpSQworCisJcmV0dXJuIGx0bXA7Cit9CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3MzMiBoYWxfZ2V0X3Jzc2lfYnNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGlkeCwgIHU4IENvdW50ICkKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCVIwMV9ERVNDUklQVE9SCXIwMTsKKwlzMzIgbHRtcCA9IDAsIHRtcDsKKwl1OAlpLCBqOworCVBBREFQVEVSCUFkYXB0ZXIgPSBwSHdEYXRhLT5BZGFwdGVyOworLy8JdTMyICpIYWxSc3NpQXJyeSA9IHBzQlNTKGlkeCktPkhhbFJzc2k7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm4gLTIwMDsKKwlpZiggQ291bnQgPiBNQVhfQUNDX1JTU0lfQ09VTlQgKSAvLyBCZWNhdXNlIHRoZSBUUyBtYXkgdXNlIHRoaXMgZnVudGlvbgorCQlDb3VudCA9IE1BWF9BQ0NfUlNTSV9DT1VOVDsKKworCS8vIFJTU0kgPSBDMSArIEMyICogKGFnY19zdGF0ZVs3OjBdICsgb2Zmc2V0X21hcChsbmFfc3RhdGVbMTowXSkpCisJLy8gQzEgPSAtMTk1LCBDMiA9IDAuNjYgPSA4NS8xMjgKKyNpZiAwCisJZm9yIChpPTA7IGk8Q291bnQ7IGkrKykKKwl7CisJCXIwMS52YWx1ZSA9IEhhbFJzc2lBcnJ5W2ldOworCQl0bXAgPSAoKCggcjAxLlIwMV9BR0Nfc3RhdGUgKyBwV2IzNVJlZy0+TE5BVmFsdWVbcjAxLlIwMV9MTkFfc3RhdGVdKSAqIDg1ICkgPj43ICkgLSAxOTU7CisJCWx0bXAgKz0gdG1wOworCX0KKyNlbHNlCisJaWYgKHBzQlNTKGlkeCktPkhhbFJzc2lJbmRleCA9PSAwKQorCQlwc0JTUyhpZHgpLT5IYWxSc3NpSW5kZXggPSBNQVhfQUNDX1JTU0lfQ09VTlQ7CisJaiA9ICh1OClwc0JTUyhpZHgpLT5IYWxSc3NpSW5kZXgtMTsKKworCWZvciAoaT0wOyBpPENvdW50OyBpKyspCisJeworCQlyMDEudmFsdWUgPSBwc0JTUyhpZHgpLT5IYWxSc3NpW2pdOworCQl0bXAgPSAoKCggcjAxLlIwMV9BR0Nfc3RhdGUgKyBwV2IzNVJlZy0+TE5BVmFsdWVbcjAxLlIwMV9MTkFfc3RhdGVdKSAqIDg1ICkgPj43ICkgLSAxOTU7CisJCWx0bXAgKz0gdG1wOworCQlpZiAoaiA9PSAwKQorCQl7CisJCQlqID0gTUFYX0FDQ19SU1NJX0NPVU5UOworCQl9CisJCWotLTsKKwl9CisjZW5kaWYKKwlsdG1wIC89IENvdW50OworCWlmKCBwSHdEYXRhLT5waHlfdHlwZSA9PSBSRl9BSVJPSEFfMjIzMCApIGx0bXAgLT0gNTsgLy8gMTA7CisJaWYoIHBId0RhdGEtPnBoeV90eXBlID09IFJGX0FJUk9IQV8yMjMwUyApIGx0bXAgLT0gNTsgLy8gMTA7IDIwMDYwNDIwIEFkZCB0aGlzCisKKwkvL2lmKCBsdG1wIDwgLTIwMCApIGx0bXAgPSAtMjAwOworCWlmKCBsdG1wIDwgLTExMCApIGx0bXAgPSAtMTEwOy8vIDEuMC4yNC4wIEZvciBOSlJDCisKKwlyZXR1cm4gbHRtcDsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgaGFsX2xlZF9jb250cm9sXzFhKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwloYWxfbGVkX2NvbnRyb2woIE5VTEwsIHBId0RhdGEsIE5VTEwsIE5VTEwgKTsKK30KKwordm9pZCBoYWxfbGVkX2NvbnRyb2woICB2b2lkKiBTMSwgIHBod19kYXRhX3QgcEh3RGF0YSwgIHZvaWQqIFMzLCAgdm9pZCogUzQgKQoreworCVBBREFQVEVSCUFkYXB0ZXIgPSBwSHdEYXRhLT5BZGFwdGVyOworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJdTMyCUxFRFNldCA9IChwSHdEYXRhLT5Tb2Z0d2FyZVNldCAmIEhBTF9MRURfU0VUX01BU0spID4+IEhBTF9MRURfU0VUX1NISUZUOworCXU4CUxFRGdyYXlbMjBdID0geyAwLDMsNCw2LDgsMTAsMTEsMTIsMTMsMTQsMTUsMTQsMTMsMTIsMTEsMTAsOCw2LDQsMiB9OworCXU4CUxFRGdyYXkyWzMwXSA9IHsgNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNSwxNCwxMywxMiwxMSwxMCw5LDggfTsKKwl1MzIJVGltZUludGVydmFsID0gNTAwLCBsdG1wLCBsdG1wMjsKKyAgICAgICAgbHRtcD0wOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJaWYoIHBId0RhdGEtPkxFRF9jb250cm9sICkgeworCQlsdG1wMiA9IHBId0RhdGEtPkxFRF9jb250cm9sICYgMHhmZjsKKwkJaWYoIGx0bXAyID09IDUgKSAvLyA1IGlzIFdQUyBtb2RlCisJCXsKKwkJCVRpbWVJbnRlcnZhbCA9IDEwMDsKKwkJCWx0bXAyID0gKHBId0RhdGEtPkxFRF9jb250cm9sPj44KSAmIDB4ZmY7CisJCQlzd2l0Y2goIGx0bXAyICkKKwkJCXsKKwkJCQljYXNlIDE6IC8vIFswLjIgT25dWzAuMSBPZmZdLi4uCisJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyAlPSAzOworCQkJCQlsdG1wID0gMHgxMDEwOyAvLyBMZWQgMSAmIDAgR3JlZW4gYW5kIFJlZAorCQkJCQlpZiggcEh3RGF0YS0+TEVEX0JsaW5raW5nID09IDIgKSAvLyBUdXJuIG9mZgorCQkJCQkJbHRtcCA9IDA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMjogLy8gWzAuMSBPbl1bMC4xIE9mZl0uLi4KKwkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nICU9IDI7CisJCQkJCWx0bXAgPSAweDAwMTA7IC8vIExlZCAwIHJlZCBjb2xvcgorCQkJCQlpZiggcEh3RGF0YS0+TEVEX0JsaW5raW5nICkgLy8gVHVybiBvZmYKKwkJCQkJCWx0bXAgPSAwOworCQkJCQlicmVhazsKKwkJCQljYXNlIDM6IC8vIFswLjEgT25dWzAuMSBPZmZdWzAuMSBPbl1bMC4xIE9mZl1bMC4xIE9uXVswLjEgT2ZmXVswLjEgT25dWzAuMSBPZmZdWzAuMSBPbl1bMC4xIE9mZl1bMC41IE9mZl0uLi4KKwkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nICU9IDE1OworCQkJCQlsdG1wID0gMHgwMDEwOyAvLyBMZWQgMCByZWQgY29sb3IKKwkJCQkJaWYoIChwSHdEYXRhLT5MRURfQmxpbmtpbmcgPj0gOSkgfHwgKHBId0RhdGEtPkxFRF9CbGlua2luZyUyKSApIC8vIFR1cm4gb2ZmIDAuNiBzZWMKKwkJCQkJCWx0bXAgPSAwOworCQkJCQlicmVhazsKKwkJCQljYXNlIDQ6IC8vIFszMDAgT25dWyBvZmYgXQorCQkJCQlsdG1wID0gMHgxMDAwOyAvLyBMZWQgMSBHcmVlbiBjb2xvcgorCQkJCQlpZiggcEh3RGF0YS0+TEVEX0JsaW5raW5nID49IDMwMDAgKQorCQkJCQkJbHRtcCA9IDA7IC8vIGxlZCBtYXliZSBvbiBhZnRlciAzMDBzZWMgKiAzMmJpdCBjb3VudGVyIG92ZXJsYXAuCisJCQkJCWJyZWFrOworCQkJfQorCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nKys7CisKKwkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSA9IGx0bXA7CisJCQlpZiggTEVEU2V0ICE9IDcgKSAvLyBPbmx5IDExMSBtb2RlIGhhcyAyIExFRHMgb24gUENCLgorCQkJeworCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAobHRtcCAmMHhmZik8PDg7IC8vIENvcHkgTEVEIHJlc3VsdCB0byBlYWNoIExFRCBjb250cm9sIHJlZ2lzdGVyCisJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IChsdG1wICYweGZmMDApPj44OworCQkJfQorCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsKKwkJfQorCX0KKwllbHNlIGlmKCBwSHdEYXRhLT5DdXJyZW50UmFkaW9TdyB8fCBwSHdEYXRhLT5DdXJyZW50UmFkaW9IdyApIC8vIElmIHJhZGlvIG9mZgorCXsKKwkJaWYoIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmIDB4MTAxMCApCisJCXsKKwkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgxMDEwOworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlzd2l0Y2goIExFRFNldCApCisJCXsKKwkJCWNhc2UgNDogLy8gWzEwMF0gT25seSAxIExlZCBiZSBwbGFjZWQgb24gUENCIGFuZCB1c2UgcGluIDIxIG9mIElDLiBVc2UgTEVEXzAgZm9yIHNob3dpbmcKKwkJCQlpZiggIXBId0RhdGEtPkxFRF9MaW5rT24gKSAvLyBCbGluayBvbmx5IGlmIG5vdCBMaW5rIE9uCisJCQkJeworCQkJCQkvLyBCbGlua2luZyBpZiBzY2FubmluZyBpcyBvbiBwcm9ncmVzcworCQkJCQlpZiggcEh3RGF0YS0+TEVEX1NjYW5uaW5nICkKKwkJCQkJeworCQkJCQkJaWYoIHBId0RhdGEtPkxFRF9CbGlua2luZyA9PSAwICkKKwkJCQkJCXsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gMHgxMDsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMCBPbgorCQkJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyA9IDE7CisJCQkJCQkJVGltZUludGVydmFsID0gMzAwOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgxMDsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMCBPZmYKKwkJCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgPSAwOworCQkJCQkJCVRpbWVJbnRlcnZhbCA9IDMwMDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8vVHVybiBPZmYgTEVEXzAKKwkJCQkJCWlmKCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDEwICkKKwkJCQkJCXsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4MTA7CisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzAgT2ZmCisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy8gVHVybiBPbiBMRURfMAorCQkJCQlpZiggKHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmIDB4MTApID09IDAgKQorCQkJCQl7CisJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gMHgxMDsKKwkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8wIE9mZgorCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIDY6IC8vIFsxMTBdIE9ubHkgMSBMZWQgYmUgcGxhY2VkIG9uIFBDQiBhbmQgdXNlIHBpbiAyMSBvZiBJQy4gVXNlIExFRF8wIGZvciBzaG93aW5nCisJCQkJaWYoICFwSHdEYXRhLT5MRURfTGlua09uICkgLy8gQmxpbmsgb25seSBpZiBub3QgTGluayBPbgorCQkJCXsKKwkJCQkJLy8gQmxpbmtpbmcgaWYgc2Nhbm5pbmcgaXMgb24gcHJvZ3Jlc3MKKwkJCQkJaWYoIHBId0RhdGEtPkxFRF9TY2FubmluZyApCisJCQkJCXsKKwkJCQkJCWlmKCBwSHdEYXRhLT5MRURfQmxpbmtpbmcgPT0gMCApCisJCQkJCQl7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weGY7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MTA7CisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzAgT24KKwkJCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgPSAxOworCQkJCQkJCVRpbWVJbnRlcnZhbCA9IDMwMDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4MWY7CisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzAgT2ZmCisJCQkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nID0gMDsKKwkJCQkJCQlUaW1lSW50ZXJ2YWwgPSAzMDA7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvLyAyMDA2MDkwMSBHcmF5IGJsaW5raW5nIGlmIGluIGRpc2Nvbm5lY3Qgc3RhdGUgYW5kIG5vdCBzY2FubmluZworCQkJCQkJbHRtcCA9IHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZTsKKwkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgxZjsKKwkJCQkJCWlmKCBMRURncmF5MlsocEh3RGF0YS0+TEVEX0JsaW5raW5nJTMwKV0gKQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDEwOworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSBMRURncmF5MlsgKHBId0RhdGEtPkxFRF9CbGlua2luZyUzMCkgXTsKKwkJCQkJCX0KKwkJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZysrOworCQkJCQkJaWYoIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAhPSBsdG1wICkKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMCBPZmYKKwkJCQkJCVRpbWVJbnRlcnZhbCA9IDEwMDsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyBUdXJuIE9uIExFRF8wCisJCQkJCWlmKCAocFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICYgMHgxMCkgPT0gMCApCisJCQkJCXsKKwkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDEwOworCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzAgT2ZmCisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNTogLy8gWzEwMV0gT25seSAxIExlZCBiZSBwbGFjZWQgb24gUENCIGFuZCB1c2UgTEVEXzEgZm9yIHNob3dpbmcKKwkJCQlpZiggIXBId0RhdGEtPkxFRF9MaW5rT24gKSAvLyBCbGluayBvbmx5IGlmIG5vdCBMaW5rIE9uCisJCQkJeworCQkJCQkvLyBCbGlua2luZyBpZiBzY2FubmluZyBpcyBvbiBwcm9ncmVzcworCQkJCQlpZiggcEh3RGF0YS0+TEVEX1NjYW5uaW5nICkKKwkJCQkJeworCQkJCQkJaWYoIHBId0RhdGEtPkxFRF9CbGlua2luZyA9PSAwICkKKwkJCQkJCXsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gMHgxMDAwOworCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8xIE9uCisJCQkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nID0gMTsKKwkJCQkJCQlUaW1lSW50ZXJ2YWwgPSAzMDA7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDEwMDA7CisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzEgT2ZmCisJCQkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nID0gMDsKKwkJCQkJCQlUaW1lSW50ZXJ2YWwgPSAzMDA7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvL1R1cm4gT2ZmIExFRF8xCisJCQkJCQlpZiggcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICYgMHgxMDAwICkKKwkJCQkJCXsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4MTAwMDsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMSBPZmYKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyBJcyB0cmFuc21pdHRpbmcvcmVjZWl2aW5nID8/CisJCQkJCWlmKCAoT1NfQ1VSUkVOVF9SWF9CWVRFKCBBZGFwdGVyICkgIT0gcEh3RGF0YS0+UnhCeXRlQ291bnRMYXN0ICkgfHwKKwkJCQkJCShPU19DVVJSRU5UX1RYX0JZVEUoIEFkYXB0ZXIgKSAhPSBwSHdEYXRhLT5UeEJ5dGVDb3VudExhc3QgKSApCisJCQkJCXsKKwkJCQkJCWlmKCAocFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICYgMHgzMDAwKSAhPSAweDMwMDAgKQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDMwMDA7CisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzEgT24KKwkJCQkJCX0KKworCQkJCQkJLy8gVXBkYXRlIHZhcmlhYmxlCisJCQkJCQlwSHdEYXRhLT5SeEJ5dGVDb3VudExhc3QgPSBPU19DVVJSRU5UX1JYX0JZVEUoIEFkYXB0ZXIgKTsKKwkJCQkJCXBId0RhdGEtPlR4Qnl0ZUNvdW50TGFzdCA9IE9TX0NVUlJFTlRfVFhfQllURSggQWRhcHRlciApOworCQkJCQkJVGltZUludGVydmFsID0gMjAwOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLy8gVHVybiBPbiBMRURfMSBhbmQgYmxpbmtpbmcgaWYgdHJhbnNtaXR0aW5nL3JlY2VpdmluZworCQkJCQkJIGlmKCAocFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICYgMHgzMDAwKSAhPSAweDEwMDAgKQorCQkJCQkJIHsKKwkJCQkJCQkgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDMwMDA7CisJCQkJCQkJIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDEwMDA7CisJCQkJCQkJIFdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8xIE9uCisJCQkJCQkgfQorCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OiAvLyBEZWZhdWx0IHNldHRpbmcuIDIgTEVEIGJlIHBsYWNlZCBvbiBQQ0IuIExFRF8wOiBMaW5rIE9uIExFRF8xIEFjdGl2ZQorCQkJCWlmKCAocFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICYgMHgzMDAwKSAhPSAweDMwMDAgKQorCQkJCXsKKwkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MzAwMDsvLyBMRURfMSBpcyBhbHdheXMgb24gYW5kIGV2ZW50IGVuYWJsZQorCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOworCQkJCX0KKworCQkJCWlmKCBwSHdEYXRhLT5MRURfQmxpbmtpbmcgKQorCQkJCXsKKwkJCQkJLy8gR3JheSBibGlua2luZworCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4MGY7CisJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDEwOworCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gTEVEZ3JheVsgKHBId0RhdGEtPkxFRF9CbGlua2luZy0xKSUyMCBdOworCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOworCisJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyArPSAyOworCQkJCQlpZiggcEh3RGF0YS0+TEVEX0JsaW5raW5nIDwgNDAgKQorCQkJCQkJVGltZUludGVydmFsID0gMTAwOworCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyA9IDA7IC8vIFN0b3AgYmxpbmtpbmcKKwkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgwZjsKKwkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYoIHBId0RhdGEtPkxFRF9MaW5rT24gKQorCQkJCXsKKwkJCQkJaWYoICEocFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICYgMHgxMCkgKSAvLyBDaGVjayB0aGUgTEVEXzAKKwkJCQkJeworCQkJCQkJLy9UcnkgdG8gdHVybiBPTiBMRURfMCBhZnRlciBncmF5IGJsaW5raW5nCisJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gMHgxMDsKKwkJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyA9IDE7IC8vU3RhcnQgYmxpbmtpbmcKKwkJCQkJCVRpbWVJbnRlcnZhbCA9IDUwOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmKCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDEwICkgLy8gQ2hlY2sgdGhlIExFRF8wCisJCQkJCXsKKwkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgxMDsKKwkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCX0KKworCQkvLzIwMDYwODI4LjEgQWN0aXZlIHNlbmQgbnVsbCBwYWNrZXQgdG8gYXZvaWQgQVAgZGlzY29ubmVjdAorCQlpZiggcEh3RGF0YS0+TEVEX0xpbmtPbiApCisJCXsKKwkJCXBId0RhdGEtPk51bGxQYWNrZXRDb3VudCArPSBUaW1lSW50ZXJ2YWw7CisJCQlpZiggcEh3RGF0YS0+TnVsbFBhY2tldENvdW50ID49IERFRkFVTFRfTlVMTF9QQUNLRVRfQ09VTlQgKQorCQkJeworCQkJCXBId0RhdGEtPk51bGxQYWNrZXRDb3VudCA9IDA7CisJCQl9CisJCX0KKwl9CisKKwlwSHdEYXRhLT50aW1lX2NvdW50ICs9IFRpbWVJbnRlcnZhbDsKKwlXYjM1VHhfQ3VycmVudFRpbWUoIHBId0RhdGEsIHBId0RhdGEtPnRpbWVfY291bnQgKTsgLy8gMjAwNjA5MjggYWRkCisJT1NfVElNRVJfU0VUKCAmcEh3RGF0YS0+TEVEVGltZXIsIFRpbWVJbnRlcnZhbCApOyAvLyAyMDA2MDYyMy4xCit9CisKKwordm9pZCBoYWxfc2V0X3BoeV90eXBlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggUGh5VHlwZSApCit7CisJcEh3RGF0YS0+cGh5X3R5cGUgPSBQaHlUeXBlOworfQorCit2b2lkIGhhbF9nZXRfcGh5X3R5cGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqUGh5VHlwZSApCit7CisJKlBoeVR5cGUgPSBwSHdEYXRhLT5waHlfdHlwZTsKK30KKwordm9pZCBoYWxfcmVzZXRfY291bnRlciggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJcEh3RGF0YS0+ZHRvX3R4X3JldHJ5X2NvdW50ID0gMDsKKwlwSHdEYXRhLT5kdG9fdHhfZnJhZ19jb3VudCA9IDA7CisJbWVtc2V0KCBwSHdEYXRhLT50eF9yZXRyeV9jb3VudCwgMCwgOCk7Cit9CisKK3ZvaWQgaGFsX3NldF9yYWRpb19tb2RlKCBwaHdfZGF0YV90IHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIHJhZGlvX29mZikKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJaWYgKHJhZGlvX29mZikJLy9kaXNhYmxlIEJhc2ViYW5kIHJlY2VpdmUgb2ZmCisJeworCQlwSHdEYXRhLT5DdXJyZW50UmFkaW9TdyA9IDE7IC8vIG9mZgorCQlwV2IzNVJlZy0+TTI0X01hY0NvbnRyb2wgJj0gMHhmZmZmZmZiZjsKKwl9CisJZWxzZQorCXsKKwkJcEh3RGF0YS0+Q3VycmVudFJhZGlvU3cgPSAwOyAvLyBvbgorCQlwV2IzNVJlZy0+TTI0X01hY0NvbnRyb2wgfD0gMHgwMDAwMDA0MDsKKwl9CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODI0LCBwV2IzNVJlZy0+TTI0X01hY0NvbnRyb2wgKTsKK30KKwordTggaGFsX2dldF9hbnRlbm5hX251bWJlciggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmICgocFdiMzVSZWctPkJCMkMgJiBCSVQoMTEpKSA9PSAwKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCit2b2lkIGhhbF9zZXRfYW50ZW5uYV9udW1iZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IG51bWJlciApCit7CisKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYgKG51bWJlciA9PSAxKSB7CisJCXBXYjM1UmVnLT5CQjJDIHw9IEJJVCgxMSk7CisJfSBlbHNlIHsKKwkJcFdiMzVSZWctPkJCMkMgJj0gfkJJVCgxMSk7CisJfQorCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTAyYywgcFdiMzVSZWctPkJCMkMgKTsKKyNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KKwlXQkRFQlVHKCgiQ3VycmVudCBhbnRlbm5hIG51bWJlciA6ICVkXG4iLCBudW1iZXIpKTsKKyNlbmRpZgorfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vMCA6IHJhZGlvIG9uOyAxOiByYWRpbyBvZmYKK3U4IGhhbF9nZXRfaHdfcmFkaW9fb2ZmKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuIDE7CisKKwkvL3JlYWQgdGhlIGJpdDE2IG9mIHJlZ2lzdGVyIFUxQjAKKwlXYjM1UmVnX1JlYWQoIHBId0RhdGEsIDB4M2IwLCAmcFdiMzVSZWctPlUxQjAgKTsKKwlpZiAoKHBXYjM1UmVnLT5VMUIwICYgMHgwMDAxMDAwMCkpIHsKKwkJcEh3RGF0YS0+Q3VycmVudFJhZGlvSHcgPSAxOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlwSHdEYXRhLT5DdXJyZW50UmFkaW9IdyA9IDA7CisJCXJldHVybiAwOworCX0KK30KKwordW5zaWduZWQgY2hhciBoYWxfZ2V0X2R4eF9yZWcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgbnVtYmVyLCAgUFVMT05HIHBWYWx1ZSApCit7CisJaWYoIG51bWJlciA8IDB4MTAwMCApCisJCW51bWJlciArPSAweDEwMDA7CisJcmV0dXJuIFdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIG51bWJlciwgcFZhbHVlICk7Cit9CisKK3Vuc2lnbmVkIGNoYXIgaGFsX3NldF9keHhfcmVnKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IG51bWJlciwgIHUzMiB2YWx1ZSApCit7CisJdW5zaWduZWQgY2hhcglyZXQ7CisKKwlpZiggbnVtYmVyIDwgMHgxMDAwICkKKwkJbnVtYmVyICs9IDB4MTAwMDsKKwlyZXQgPSBXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgbnVtYmVyLCB2YWx1ZSApOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaGFsX3NjYW5fc3RhdHVzX2luZGljYXRlKHBod19kYXRhX3QgcEh3RGF0YSwgdW5zaWduZWQgY2hhciBJc09uUHJvZ3Jlc3MpCit7CisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCXBId0RhdGEtPkxFRF9TY2FubmluZyA9IElzT25Qcm9ncmVzcyA/IDEgOiAwOworfQorCit2b2lkIGhhbF9zeXN0ZW1fcG93ZXJfY2hhbmdlKHBod19kYXRhX3QgcEh3RGF0YSwgdTMyIFBvd2VyU3RhdGUpCit7CisJaWYoIFBvd2VyU3RhdGUgIT0gMCApCisJeworCQlwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSA9IDE7CisJCWlmKCBwSHdEYXRhLT5XYlVzYi5Jc1VzYjIwICkKKwkJCWhhbF9zdG9wKCBwSHdEYXRhICk7CisJfQorCWVsc2UKKwl7CisJCWlmKCAhcEh3RGF0YS0+V2JVc2IuSXNVc2IyMCApCisJCQloYWxfc3RvcCggcEh3RGF0YSApOworCX0KK30KKwordm9pZCBoYWxfc3VycHJpc2VfcmVtb3ZlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQQURBUFRFUiBBZGFwdGVyID0gcEh3RGF0YS0+QWRhcHRlcjsKKwlpZiAoT1NfQVRPTUlDX0lOQyggQWRhcHRlciwgJnBId0RhdGEtPlN1cnByaXNlUmVtb3ZlQ291bnQgKSA9PSAxKSB7CisJCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KKwkJV0JERUJVRygoIkNhbGxpbmcgaGFsX3N1cnByaXNlX3JlbW92ZVxuIikpOworCQkjZW5kaWYKKwkJT1NfU1RPUCggQWRhcHRlciApOworCX0KK30KKwordm9pZCBoYWxfcmF0ZV9jaGFuZ2UoICBwaHdfZGF0YV90IHBId0RhdGEgKSAvLyBOb3RpZnkgdGhlIEhBTCByYXRlIGlzIGNoYW5naW5nIDIwMDYwNjEzLjEKK3sKKwlQQURBUFRFUglBZGFwdGVyID0gcEh3RGF0YS0+QWRhcHRlcjsKKwl1OAkJcmF0ZSA9IENVUlJFTlRfVFhfUkFURTsKKworCUJCUHJvY2Vzc29yX1JhdGVDaGFuZ2luZyggcEh3RGF0YSwgcmF0ZSApOworfQorCit2b2lkIGhhbF9zZXRfcmZfcG93ZXIocGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBQb3dlckluZGV4KQoreworCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgUG93ZXJJbmRleCApOworfQorCit1bnNpZ25lZCBjaGFyIGhhbF9zZXRfTEVEKHBod19kYXRhX3QgcEh3RGF0YSwgdTMyIE1vZGUpIC8vIDIwMDYxMTA4IGZvciBXUFMgbGVkIGNvbnRyb2wKK3sKKwlwSHdEYXRhLT5MRURfQmxpbmtpbmcgPSAwOworCXBId0RhdGEtPkxFRF9jb250cm9sID0gTW9kZTsKKwlPU19USU1FUl9TRVQoICZwSHdEYXRhLT5MRURUaW1lciwgMTAgKTsgLy8gMjAwNjA2MjMKKwlyZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMjVmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9mLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBEZXZpY2UgcmVsYXRlZCBpbmNsdWRlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2lmZGVmIFdCX0xJTlVYCisJI2luY2x1ZGUgImxpbnV4L3didXNiX2YuaCIKKwkjaW5jbHVkZSAibGludXgvd2IzNXJlZ19mLmgiCisJI2luY2x1ZGUgImxpbnV4L3diMzV0eF9mLmgiCisJI2luY2x1ZGUgImxpbnV4L3diMzVyeF9mLmgiCisjZWxzZQorCSNpbmNsdWRlICJ3YnVzYl9mLmgiCisJI2luY2x1ZGUgIndiMzVyZWdfZi5oIgorCSNpbmNsdWRlICJ3YjM1dHhfZi5oIgorCSNpbmNsdWRlICJ3YjM1cnhfZi5oIgorI2VuZGlmCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBGdW5jdGlvbiBkZWNsYXJhdGlvbgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgaGFsX3JlbW92ZV9tYXBwaW5nX2tleSggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBVQ0hBUiBwbWFjX2FkZHIgKTsKK3ZvaWQgaGFsX3JlbW92ZV9kZWZhdWx0X2tleSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUzMiBpbmRleCApOwordW5zaWduZWQgY2hhciBoYWxfc2V0X21hcHBpbmdfa2V5KCAgcGh3X2RhdGFfdCBBZGFwdGVyLCAgUFVDSEFSIHBtYWNfYWRkciwgIHU4IG51bGxfa2V5LCAgdTggd2VwX29uLCAgUFVDSEFSIHB0eF90c2MsICBQVUNIQVIgcHJ4X3RzYywgIHU4IGtleV90eXBlLCAgdTgga2V5X2xlbiwgIFBVQ0hBUiBwa2V5X2RhdGEgKTsKK3Vuc2lnbmVkIGNoYXIgaGFsX3NldF9kZWZhdWx0X2tleSggIHBod19kYXRhX3QgQWRhcHRlciwgIHU4IGluZGV4LCAgdTggbnVsbF9rZXksICB1OCB3ZXBfb24sICBQVUNIQVIgcHR4X3RzYywgIFBVQ0hBUiBwcnhfdHNjLCAgdTgga2V5X3R5cGUsICB1OCBrZXlfbGVuLCAgUFVDSEFSIHBrZXlfZGF0YSApOwordm9pZCBoYWxfY2xlYXJfYWxsX2RlZmF1bHRfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIGhhbF9jbGVhcl9hbGxfZ3JvdXBfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIGhhbF9jbGVhcl9hbGxfbWFwcGluZ19rZXkoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX2NsZWFyX2FsbF9rZXkoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX2dldF9ldGhlcm5ldF9hZGRyZXNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgUFVDSEFSIGN1cnJlbnRfYWRkcmVzcyApOwordm9pZCBoYWxfc2V0X2V0aGVybmV0X2FkZHJlc3MoICBwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgY3VycmVudF9hZGRyZXNzICk7Cit2b2lkIGhhbF9nZXRfcGVybWFuZW50X2FkZHJlc3MoICBwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgcGV0aGVybmV0X2FkZHJlc3MgKTsKK3Vuc2lnbmVkIGNoYXIgaGFsX2luaXRfaGFyZHdhcmUoICBwaHdfZGF0YV90IHBId0RhdGEsICBQQURBUFRFUiBBZGFwdGVyICk7Cit2b2lkIGhhbF9zZXRfcG93ZXJfc2F2ZV9tb2RlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciBwb3dlcl9zYXZlLCAgdW5zaWduZWQgY2hhciB3YWtldXAsICB1bnNpZ25lZCBjaGFyIGR0aW0gKTsKK3ZvaWQgaGFsX2dldF9wb3dlcl9zYXZlX21vZGUoICBwaHdfZGF0YV90IHBId0RhdGEsICAgUEJPT0xFQU4gcGluX3B3cl9zYXZlICk7Cit2b2lkIGhhbF9zZXRfc2xvdF90aW1lKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggdHlwZSApOworI2RlZmluZSBoYWxfc2V0X2F0aW1fd2luZG93KCBfQSwgX0FUTSApCit2b2lkIGhhbF9zZXRfcmF0ZXMoICBwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgcGJzc19yYXRlcywgIHU4IGxlbmd0aCwgIHVuc2lnbmVkIGNoYXIgYmFzaWNfcmF0ZV9zZXQgKTsKKyNkZWZpbmUgaGFsX3NldF9iYXNpY19yYXRlcyggX0EsIF9SLCBfTCApIGhhbF9zZXRfcmF0ZXMoIF9BLCBfUiwgX0wsIFRSVUUgKQorI2RlZmluZSBoYWxfc2V0X29wX3JhdGVzKCBfQSwgX1IsIF9MICkgaGFsX3NldF9yYXRlcyggX0EsIF9SLCBfTCwgRkFMU0UgKQordm9pZCBoYWxfc3RhcnRfYnNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggbWFjX29wX21vZGUgKTsKK3ZvaWQgaGFsX2pvaW5fcmVxdWVzdCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGJzc190eXBlICk7IC8vIDA6QlNTIFNUQSAxOklCU1MgU1RBLy8KK3ZvaWQgaGFsX3N0b3Bfc3luY19ic3MoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX3Jlc3VtZV9zeW5jX2JzcyggIHBod19kYXRhX3QgcEh3RGF0YSk7Cit2b2lkIGhhbF9zZXRfYWlkKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGFpZCApOwordm9pZCBoYWxfc2V0X2Jzc2lkKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgUFVDSEFSIHBic3NpZCApOwordm9pZCBoYWxfZ2V0X2Jzc2lkKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgUFVDSEFSIHBic3NpZCApOwordm9pZCBoYWxfc2V0X2JlYWNvbl9wZXJpb2QoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgYmVhY29uX3BlcmlvZCApOwordm9pZCBoYWxfc2V0X2xpc3Rlbl9pbnRlcnZhbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBsaXN0ZW5faW50ZXJ2YWwgKTsKK3ZvaWQgaGFsX3NldF9jYXBfaW5mbyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBjYXBhYmlsaXR5X2luZm8gKTsKK3ZvaWQgaGFsX3NldF9zc2lkKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgUFVDSEFSIHBzc2lkLCAgdTggc3NpZF9sZW4gKTsKK3ZvaWQgaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBjaGFubmVsICk7Cit2b2lkIGhhbF9zZXRfY3VycmVudF9jaGFubmVsX2V4KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gY2hhbm5lbCApOwordm9pZCBoYWxfZ2V0X2N1cnJlbnRfY2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvICpjaGFubmVsICk7Cit2b2lkIGhhbF9zZXRfYWNjZXB0X2Jyb2FkY2FzdCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApOwordm9pZCBoYWxfc2V0X2FjY2VwdF9tdWx0aWNhc3QoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKTsKK3ZvaWQgaGFsX3NldF9hY2NlcHRfYmVhY29uKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICk7Cit2b2lkIGhhbF9zZXRfbXVsdGljYXN0X2FkZHJlc3MoICBwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgYWRkcmVzcywgIHU4IG51bWJlciApOwordTggaGFsX2dldF9hY2NlcHRfYmVhY29uKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIGhhbF9zdG9wKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIGhhbF9oYWx0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB2b2lkICpwcGFfZGF0YSApOwordm9pZCBoYWxfc3RhcnRfdHgwKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIGhhbF9zZXRfcGh5X3R5cGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBQaHlUeXBlICk7Cit2b2lkIGhhbF9nZXRfcGh5X3R5cGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqUGh5VHlwZSApOwordW5zaWduZWQgY2hhciBoYWxfcmVzZXRfaGFyZHdhcmUoICBwaHdfZGF0YV90IHBId0RhdGEsICB2b2lkKiBwcGEgKTsKK3ZvaWQgaGFsX3NldF9jd21pbiggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4CWN3aW5fbWluICk7CisjZGVmaW5lIGhhbF9nZXRfY3dtaW4oIF9BICkgKCAoX0EpLT5jd21pbiApCit2b2lkIGhhbF9zZXRfY3dtYXgoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgY3dpbl9tYXggKTsKKyNkZWZpbmUgaGFsX2dldF9jd21heCggX0EgKSAoIChfQSktPmN3bWF4ICkKK3ZvaWQgaGFsX3NldF9yc25fd3BhKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyICogUlNOX0lFX0JpdG1hcCAsIHUzMiAqIFJTTl9PVUlfdHlwZSAsIHVuc2lnbmVkIGNoYXIgYkRlc2lyZWRBdXRoTW9kZSk7CisvL3MzMiBoYWxfZ2V0X3Jzc2koICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgSGFsUnNzaSApOworczMyIGhhbF9nZXRfcnNzaSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUzMiAqSGFsUnNzaUFycnksICB1OCBDb3VudCApOworczMyIGhhbF9nZXRfcnNzaV9ic3MoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgaWR4LCAgdTggQ291bnQgKTsKK3ZvaWQgaGFsX3NldF9jb25uZWN0X2luZm8oICBwaHdfZGF0YV90IHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIGJvQ29ubmVjdCApOwordTggaGFsX2dldF9lc3Rfc3EzKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggQ291bnQgKTsKK3ZvaWQgaGFsX2xlZF9jb250cm9sXzFhKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIGhhbF9sZWRfY29udHJvbCggIHZvaWQqIFMxLCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdm9pZCogUzMsICB2b2lkKiBTNCApOwordm9pZCBoYWxfc2V0X3JmX3Bvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggUG93ZXJJbmRleCApOyAvLyAyMDA2MDYyMSBNb2RpZnkKK3ZvaWQgaGFsX3Jlc2V0X2NvdW50ZXIoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX3NldF9yYWRpb19tb2RlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciBib1ZhbHVlKTsKK3ZvaWQgaGFsX2Rlc2NyaXB0b3JfaW5kaWNhdGUoICBwaHdfZGF0YV90IHBId0RhdGEsICBQREVTQ1JJUFRPUiBwRGVzICk7Cit1OCBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIGhhbF9zZXRfYW50ZW5uYV9udW1iZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IG51bWJlciApOwordTMyIGhhbF9nZXRfYnNzX3BrX2NudCggIHBod19kYXRhX3QgcEh3RGF0YSApOworI2RlZmluZSBoYWxfZ2V0X3JlZ2lvbl9mcm9tX0VFUFJPTSggX0EgKSAoIChfQSktPldiMzVSZWcuRUVQUk9NUmVnaW9uICkKK3ZvaWQgaGFsX3NldF9hY2NlcHRfcHJvbWlzY3VvdXMJCSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSk7CisjZGVmaW5lIGhhbF9nZXRfdHhfYnVmZmVyKCBfQSwgX0IgKSBXYjM1VHhfZ2V0X3R4X2J1ZmZlciggX0EsIF9CICkKK3U4IGhhbF9nZXRfaHdfcmFkaW9fb2ZmCQkJKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisjZGVmaW5lIGhhbF9zb2Z0d2FyZV9zZXQoIF9BICkJCShfQS0+U29mdHdhcmVTZXQpCisjZGVmaW5lIGhhbF9kcml2ZXJfaW5pdF9PSyggX0EgKQkoX0EtPklzSW5pdE9LKQorI2RlZmluZSBoYWxfcnNzaV9ib3VuZGFyeV9oaWdoKCBfQSApIChfQS0+UlNTSV9oaWdoKQorI2RlZmluZSBoYWxfcnNzaV9ib3VuZGFyeV9sb3coIF9BICkgKF9BLT5SU1NJX2xvdykKKyNkZWZpbmUgaGFsX3NjYW5faW50ZXJ2YWwoIF9BICkJCShfQS0+U2Nhbl9JbnRlcnZhbCkKK3ZvaWQgaGFsX3NjYW5fc3RhdHVzX2luZGljYXRlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBzdGF0dXMpOwkvLyAwOiBjb21wbGV0ZSwgMTogaW4gcHJvZ3Jlc3MKK3ZvaWQgaGFsX3N5c3RlbV9wb3dlcl9jaGFuZ2UoICBwaHdfZGF0YV90IHBId0RhdGEsIHUzMiBQb3dlclN0YXRlICk7IC8vIDIwMDUxMjMwIC09RDAgMT1EMSAuLgordm9pZCBoYWxfc3VycHJpc2VfcmVtb3ZlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisKKyNkZWZpbmUgUEhZX0RFQlVHKCBtc2csIGFyZ3MuLi4gKQorCisKKwordm9pZCBoYWxfcmF0ZV9jaGFuZ2UoICBwaHdfZGF0YV90IHBId0RhdGEgKTsgLy8gTm90aWZ5IHRoZSBIQUwgcmF0ZSBpcyBjaGFuZ2luZyAyMDA2MDYxMy4xCit1bnNpZ25lZCBjaGFyIGhhbF9nZXRfZHh4X3JlZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBudW1iZXIsICBQVUxPTkcgcFZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIGhhbF9zZXRfZHh4X3JlZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBudW1iZXIsICB1MzIgdmFsdWUgKTsKKyNkZWZpbmUgaGFsX2dldF90aW1lX2NvdW50KCBfUCApCShfUC0+dGltZV9jb3VudC8xMCkJLy8gcmV0dXJuIDEwMG1zIGNvdW50CisjZGVmaW5lIGhhbF9kZXRlY3RfZXJyb3IoIF9QICkJCShfUC0+V2JVc2IuRGV0ZWN0Q291bnQpCit1bnNpZ25lZCBjaGFyIGhhbF9zZXRfTEVEKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIE1vZGUgKTsgLy8gMjAwNjExMDggZm9yIFdQUyBsZWQgY29udHJvbAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoZSBmb2xsb3cgZnVuY3Rpb24gaXMgdW51c2VkIGZvciBJUzg5QzM1CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNkZWZpbmUgaGFsX2Rpc2FibGVfaW50ZXJydXB0KF9BKQorI2RlZmluZSBoYWxfZW5hYmxlX2ludGVycnVwdChfQSkKKyNkZWZpbmUgaGFsX2dldF9pbnRlcnJ1cHRfdHlwZSggX0EpCisjZGVmaW5lIGhhbF9nZXRfY2xlYXJfaW50ZXJydXB0KF9BKQorI2RlZmluZSBoYWxfaWJzc19kaXNjb25uZWN0KF9BKSBoYWxfc3RvcF9zeW5jX2JzcyhfQSkKKyNkZWZpbmUgaGFsX2pvaW5fcmVxdWVzdF9zdG9wKF9BKQordW5zaWduZWQgY2hhcgloYWxfaWRsZSggIHBod19kYXRhX3QgcEh3RGF0YSApOworI2RlZmluZSBwYV9zdGFsbF9leGVjdXRpb24oIF9BICkJLy9PU19TTEVFUCggMSApCisjZGVmaW5lIGh3X2dldF9jeHhfcmVnKCBfQSwgX0IsIF9DICkKKyNkZWZpbmUgaHdfc2V0X2N4eF9yZWcoIF9BLCBfQiwgX0MgKQorI2RlZmluZSBod19nZXRfZHh4X3JlZyggX0EsIF9CLCBfQyApCWhhbF9nZXRfZHh4X3JlZyggX0EsIF9CLCAoUFVMT05HKV9DICkKKyNkZWZpbmUgaHdfc2V0X2R4eF9yZWcoIF9BLCBfQiwgX0MgKQloYWxfc2V0X2R4eF9yZWcoIF9BLCBfQiwgKHUzMilfQyApCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViODYyZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9zLmgKQEAgLTAsMCArMSw2MTUgQEAKKy8vWzIwMDQwNzIyIFdLXQorI2RlZmluZSBIQUxfTEVEX1NFVF9NQVNLCQkweDAwMWMJLy8yMDA2MDkwMSBFeHRlbmQKKyNkZWZpbmUgSEFMX0xFRF9TRVRfU0hJRlQJCTIKKworLy9zdXBwb3J0ZWQgUkYgdHlwZQorI2RlZmluZSBSRl9NQVhJTV8yODI1CQkwCisjZGVmaW5lIFJGX01BWElNXzI4MjcJCTEKKyNkZWZpbmUgUkZfTUFYSU1fMjgyOAkJMgorI2RlZmluZSBSRl9NQVhJTV8yODI5CQkzCisjZGVmaW5lIFJGX01BWElNX1YxCQkJMTUKKyNkZWZpbmUgUkZfQUlST0hBXzIyMzAJCTE2CisjZGVmaW5lIFJGX0FJUk9IQV83MjMwCQkxNworI2RlZmluZSBSRl9BSVJPSEFfMjIzMFMJCTE4CS8vIDIwMDYwNDIwIEFkZCB0aGlzCisvLyAjZGVmaW5lIFJGX1JGTURfMjk1OQkJMzIJLy8gMjAwNjA2MjYgUmVtb3ZlIGFsbCBhYm91dCBSRk1ECisjZGVmaW5lIFJGX1dCXzI0MgkJCTMzCisjZGVmaW5lIFJGX1dCXzI0Ml8xCQkJMzQJLy8gMjAwNjA2MTkuNSBBZGQKKyNkZWZpbmUgUkZfREVDSURFX0JZX0lORgkyNTUKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUaGUgZm9sbG93IGRlZmluZSBjb25uZWN0IHRvIHVwcGVyIGxheWVyCisvLwlVc2VyIG11c3QgbW9kaWZ5IGZvciBjb25uZWN0aW9uIGJldHdlZW4gSEFMIGFuZCB1cHBlciBsYXllcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29tbW9uIGRlZmluZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgSEFMX1VTQl9NT0RFX0JVUlNUKCBfSCApCShfSC0+U29mdHdhcmVTZXQgJiAweDIwICkgLy8gQml0IDUgMjAwNjA5MDEgTW9kaWZ5CisKKy8vIFNjYW4gaW50ZXJ2YWwKKyNkZWZpbmUgU0NBTl9NQVhfQ0hOTF9USU1FCQkJCSg1MCkKKworLy8gRm9yIFR4TDIgRnJhbWUgdHlwciByZWNvZ25pc2UKKyNkZWZpbmUgRlJBTUVfVFlQRV84MDJfM19EQVRBCQkJMAorI2RlZmluZSBGUkFNRV9UWVBFXzgwMl8xMV9NQU5BR0VNRU5UCQkxCisjZGVmaW5lIEZSQU1FX1RZUEVfODAyXzExX01BTkFHRU1FTlRfQ0hBTExFTkdFICAyCisjZGVmaW5lIEZSQU1FX1RZUEVfODAyXzExX0NPTlRST0wJCTMKKyNkZWZpbmUgRlJBTUVfVFlQRV84MDJfMTFfREFUQQkJCTQKKyNkZWZpbmUgRlJBTUVfVFlQRV9QUk9NSVNDVU9VUwkJCTUKKworLy8gVGhlIGZvbGxvdyBkZWZpbml0aW9uIGlzIHVzZWQgZm9yIGNvbnZlcnQgdGhlIGZyYW1lLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNkZWZpbmUgRE9UXzExX1NFUVVFTkNFX09GRlNFVAkJMjIgLy9TZXF1ZW5jZSBjb250cm9sIG9mZnNldAorI2RlZmluZSBET1RfM19UWVBFX09GRlNFVAkJCTEyCisjZGVmaW5lIERPVF8xMV9NQUNfSEVBREVSX1NJWkUJCTI0CisjZGVmaW5lIERPVF8xMV9TTkFQX1NJWkUJCQk2CisjZGVmaW5lIERPVF8xMV9UWVBFX09GRlNFVAkJCTMwIC8vVGhlIHN0YXJ0IG9mZnNldCBvZiA4MDIuMTEgRnJhbWUuIFR5cGUgZW5jYXBzdWxhdHVpbi4KKyNkZWZpbmUgREVGQVVMVF9TSUZTVElNRQkJCTEwCisjZGVmaW5lIERFRkFVTFRfRlJBR01FTlRfVEhSRVNIT0xECQkyMzQ2IC8vIE5vIGZyYWdtZW50CisjZGVmaW5lIERFRkFVTFRfTVNEVV9MSUZFX1RJTUUJCQkweGZmZmYKKworI2RlZmluZSBMT05HX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FCQkJCQkJKDE0NCs0OCkKKyNkZWZpbmUgU0hPUlRfUFJFQU1CTEVfUExVU19QTENQSEVBREVSX1RJTUUgCQkJCQkoNzIrMjQpCisjZGVmaW5lIFBSRUFNQkxFX1BMVVNfU0lHTkFMX1BMVVNfU0lHTkFMRVhURU5TSU9OCQkJCSgxNis0KzYpCisjZGVmaW5lIFRzeW0gNAorCisvLyAgRnJhbWUgVHlwZSBvZiBCaXRzICgyLCAzKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZSBNQUNfVFlQRV9NQU5BR0VNRU5UCQkJMHgwMAorI2RlZmluZSBNQUNfVFlQRV9DT05UUk9MCQkJMHgwNAorI2RlZmluZSBNQUNfVFlQRV9EQVRBCQkJCTB4MDgKKyNkZWZpbmUgTUFTS19GUkFHTUVOVF9OVU1CRVIJCTB4MDAwRgorI2RlZmluZSBTRVFVRU5DRV9OVU1CRVJfU0hJRlQJCTQKKworI2RlZmluZSAgSEFMX1dPTF9UWVBFX1dBS0VVUF9GUkFNRQkJMHgwMQorI2RlZmluZSAgSEFMX1dPTF9UWVBFX01BR0lDX1BBQ0tFVAkJMHgwMgorCisvLyAyMDA0MDEwNiBBRERFRAorI2RlZmluZSBIQUxfS0VZVFlQRV9XRVA0MCAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBIQUxfS0VZVFlQRV9XRVAxMDQgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBIQUxfS0VZVFlQRV9US0lQICAgICAgICAgICAgICAgICAgICAgICAgMiAvLyAxMjggYml0IGtleQorI2RlZmluZSBIQUxfS0VZVFlQRV9BRVNfQ0NNUCAgICAgICAgICAgICAgICAgICAgMyAvLyAxMjggYml0IGtleQorCisvLyBGb3IgVk0gc3RhdGUKK2VudW0geworCVZNX1NUT1AgPSAwLAorCVZNX1JVTk5JTkcsCisJVk1fQ09NUExFVEVECit9OworCisvLyBCZSB1c2VkIGZvciA4MDIuMTEgbWFjIGhlYWRlcgordHlwZWRlZiBzdHJ1Y3QgX01BQ19GUkFNRV9DT05UUk9MIHsKKwl1OAltYWNfZnJhbWVfaW5mbzsgLy8gdGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBwcm90b3ZsIHZlcnNpb24sIHR5cGUgYW5kIHN1YnR5cGUKKwl1OAl0b19kczoxOworCXU4CWZyb21fZHM6MTsKKwl1OAltb3JlX2ZyYWc6MTsKKwl1OAlyZXRyeToxOworCXU4CXB3cl9tZ3Q6MTsKKwl1OAltb3JlX2RhdGE6MTsKKwl1OAlXRVA6MTsKKwl1OAlvcmRlcjoxOworfSBNQUNfRlJBTUVfQ09OVFJPTCwgKlBNQUNfRlJBTUVfQ09OVFJPTDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTm9ybWFsIEtleSB0YWJsZSBmb3JtYXQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoZSBvcmRlciBvZiBLRVkgaW5kZXggaXMgTUFQUElOR19LRVlfU1RBUlRfSU5ERVggPiBHUk9VUF9LRVlfU1RBUlRfSU5ERVgKKyNkZWZpbmUgTUFYX0tFWV9UQUJMRQkJCQkyNAkvLyAyNCBlbnRyeSBmb3Igc3RvcmluZyBrZXkgZGF0YQorI2RlZmluZSBHUk9VUF9LRVlfU1RBUlRfSU5ERVgJCTQKKyNkZWZpbmUgTUFQUElOR19LRVlfU1RBUlRfSU5ERVgJCTgKK3R5cGVkZWYgc3RydWN0IF9LRVlfVEFCTEUKK3sKKwl1MzIJRFcwX1ZhbGlkOjE7CisJdTMyCURXMF9OdWxsS2V5OjE7CisJdTMyCURXMF9TZWN1cml0eV9Nb2RlOjI7Ly8wOldFUCA0MCBiaXQgMTpXRVAgMTA0IGJpdCAyOlRLSVAgMTI4IGJpdCAzOkNDTVAgMTI4IGJpdAorCXUzMglEVzBfV0VQT046MTsKKwl1MzIJRFcwX1JFU0VSVkVEOjExOworCXUzMglEVzBfQWRkcmVzczE6MTY7CisKKwl1MzIJRFcxX0FkZHJlc3MyOworCisJdTMyCURXMl9SeFNlcXVlbmNlQ291bnQxOworCisJdTMyCURXM19SeFNlcXVlbmNlQ291bnQyOjE2OworCXUzMglEVzNfUkVTRVJWRUQ6MTY7CisKKwl1MzIJRFc0X1R4U2VxdWVuY2VDb3VudDE7CisKKwl1MzIJRFc1X1R4U2VxdWVuY2VDb3VudDI6MTY7CisJdTMyCURXNV9SRVNFUlZFRDoxNjsKKworfSBLRVlfVEFCTEUsICpQS0VZX1RBQkxFOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAJCQkgRGVzY3JpcHRvcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZSBNQVhfREVTQ1JJUFRPUl9CVUZGRVJfSU5ERVgJOAkvLyBIYXZlIHRvIG11bHRpcGxlIG9mIDIKKy8vI2RlZmluZSBGTEFHX0VSUk9SX1RYX01BU0sJCQljcHVfdG9fbGUzMigweDAwMDAwMGJmKSAvLzIwMDYxMDA5IG1hcmtlZCBieSBhbnNvbidzIGVuZGlhbgorI2RlZmluZSBGTEFHX0VSUk9SX1RYX01BU0sJCQkweDAwMDAwMGJmICAvLzIwMDYxMDA5IGFuc29uJ3MgZW5kaWFuCisvLyNkZWZpbmUgRkxBR19FUlJPUl9SWF9NQVNLCQkJMHgwMDAwMGMzZgorLy8jZGVmaW5lIEZMQUdfRVJST1JfUlhfTUFTSwkJCWNwdV90b19sZTMyKDB4MDAwMDA4M2YpCS8vMjAwNjEwMDkgbWFya2VkIGJ5IGFuc29uJ3MgZW5kaWFuCisJCQkJCQkJCQkvL0Rvbid0IGNhcmUgcmVwbGF5IGVycm9yLAorCQkJCQkJCQkJCQkJLy9pdCBpcyBoYW5kbGVkIGJ5IFMvVworI2RlZmluZSBGTEFHX0VSUk9SX1JYX01BU0sJCQkweDAwMDAwODNmCS8vMjAwNjA5MjYgYW5zb24ncyBlbmRpYW4KKworI2RlZmluZSBGTEFHX0JBTkRfUlhfTUFTSwkJCTB4MTAwMDAwMDAJLy9CaXQgMjgKKwordHlwZWRlZiBzdHJ1Y3QgX1IwMF9ERVNDUklQVE9SCit7CisJdW5pb24KKwl7CisJCXUzMgl2YWx1ZTsKKwkJI2lmZGVmIF9CSUdfRU5ESUFOXyAgLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCQlzdHJ1Y3QKKwkJeworCQkJdTMyCVIwMF9wYWNrZXRfb3JfYnVmZmVyX3N0YXR1czoxOworCQkJdTMyCVIwMF9wYWNrZXRfaW5fZmlmbzoxOworCQkJdTMyCVIwMF9SRVNFUlZFRDoyOworCQkJdTMyCVIwMF9yZWNlaXZlX2J5dGVfY291bnQ6MTI7CisJCQl1MzIJUjAwX3JlY2VpdmVfdGltZV9pbmRleDoxNjsKKwkJfTsKKwkJI2Vsc2UKKwkJc3RydWN0CisJCXsKKwkJCXUzMglSMDBfcmVjZWl2ZV90aW1lX2luZGV4OjE2OworCQkJdTMyCVIwMF9yZWNlaXZlX2J5dGVfY291bnQ6MTI7CisJCQl1MzIJUjAwX1JFU0VSVkVEOjI7CisJCQl1MzIJUjAwX3BhY2tldF9pbl9maWZvOjE7CisJCQl1MzIJUjAwX3BhY2tldF9vcl9idWZmZXJfc3RhdHVzOjE7CisJCX07CisJCSNlbmRpZgorCX07Cit9IFIwMF9ERVNDUklQVE9SLCAqUFIwMF9ERVNDUklQVE9SOworCit0eXBlZGVmIHN0cnVjdCBfVDAwX0RFU0NSSVBUT1IKK3sKKwl1bmlvbgorCXsKKwkJdTMyCXZhbHVlOworCQkjaWZkZWYgX0JJR19FTkRJQU5fICAvLzIwMDYxMDA5IGFuc29uJ3MgZW5kaWFuCisJCXN0cnVjdAorCQl7CisJCQl1MzIJVDAwX2ZpcnN0X21wZHU6MTsgLy8gZm9yIGhhcmR3YXJlIHVzZQorCQkJdTMyCVQwMF9sYXN0X21wZHU6MTsgLy8gZm9yIGhhcmR3YXJlIHVzZQorCQkJdTMyCVQwMF9Jc0xhc3RNcGR1OjE7Ly8gMDogbm90ICAgMTpZZXMgZm9yIHNvZnR3YXJlIHVzZWQKKwkJCXUzMglUMDBfSWdub3JlUmVzdWx0OjE7Ly8gVGhlIHNhbWUgbWVjaGFuaXNtIHdpdGggVDAwIHNldHRpbmcuIDA1MDExMSBNb2RpZnkgZm9yIFRTCisJCQl1MzIJVDAwX1JFU0VSVkVEX0lEOjI7Ly8zIGJpdCBJRCByZXNlcnZlZAorCQkJdTMyCVQwMF90eF9wYWNrZXRfaWQ6NDsvLzkzMDUxOS40LmUgOTMwODEwLjMuYworCQkJdTMyCVQwMF9SRVNFUlZFRDo0OworCQkJdTMyCVQwMF9oZWFkZXJfbGVuZ3RoOjY7CisJCQl1MzIJVDAwX2ZyYW1lX2xlbmd0aDoxMjsKKwkJfTsKKwkJI2Vsc2UKKwkJc3RydWN0CisJCXsKKwkJCXUzMglUMDBfZnJhbWVfbGVuZ3RoOjEyOworCQkJdTMyCVQwMF9oZWFkZXJfbGVuZ3RoOjY7CisJCQl1MzIJVDAwX1JFU0VSVkVEOjQ7CisJCQl1MzIJVDAwX3R4X3BhY2tldF9pZDo0Oy8vOTMwNTE5LjQuZSA5MzA4MTAuMy5jCisJCQl1MzIJVDAwX1JFU0VSVkVEX0lEOjI7Ly8zIGJpdCBJRCByZXNlcnZlZAorCQkJdTMyCVQwMF9JZ25vcmVSZXN1bHQ6MTsvLyBUaGUgc2FtZSBtZWNoYW5pc20gd2l0aCBUMDAgc2V0dGluZy4gMDUwMTExIE1vZGlmeSBmb3IgVFMKKwkJCXUzMglUMDBfSXNMYXN0TXBkdToxOy8vIDA6IG5vdCAgIDE6WWVzIGZvciBzb2Z0d2FyZSB1c2VkCisJCQl1MzIJVDAwX2xhc3RfbXBkdToxOyAvLyBmb3IgaGFyZHdhcmUgdXNlCisJCQl1MzIJVDAwX2ZpcnN0X21wZHU6MTsgLy8gZm9yIGhhcmR3YXJlIHVzZQorCQl9OworCQkjZW5kaWYKKwl9OworfSBUMDBfREVTQ1JJUFRPUiwgKlBUMDBfREVTQ1JJUFRPUjsKKwordHlwZWRlZiBzdHJ1Y3QgX1IwMV9ERVNDUklQVE9SCit7CisJdW5pb24KKwl7CisJCXUzMgl2YWx1ZTsKKwkJI2lmZGVmIF9CSUdfRU5ESUFOXyAvLzIwMDYwOTI2IGFkZCBieSBhbnNvbidzIGVuZGlhbgorCQlzdHJ1Y3QKKwkJeworCQkJdTMyCVIwMV9SRVNFUlZFRDozOworCQkJdTMyCVIwMV9tb2RfdHlwZToxOworCQkJdTMyCVIwMV9wcmVfdHlwZToxOworCQkJdTMyCVIwMV9kYXRhX3JhdGU6MzsKKwkJCXUzMglSMDFfQUdDX3N0YXRlOjg7CisJCQl1MzIJUjAxX0xOQV9zdGF0ZToyOworCQkJdTMyCVIwMV9kZWNyeXB0aW9uX21ldGhvZDoyOworCQkJdTMyCVIwMV9taWNfZXJyb3I6MTsKKwkJCXUzMglSMDFfcmVwbGF5OjE7CisJCQl1MzIJUjAxX2Jyb2FkY2FzdF9mcmFtZToxOworCQkJdTMyCVIwMV9tdWx0aWNhc3RfZnJhbWU6MTsKKwkJCXUzMglSMDFfZGlyZWN0ZWRfZnJhbWU6MTsKKwkJCXUzMglSMDFfcmVjZWl2ZV9mcmFtZV9hbnRlbm5hX3NlbGVjdGlvbjoxOworCQkJdTMyCVIwMV9mcmFtZV9yZWNlaXZlX2R1cmluZ19hdGltX3dpbmRvdzoxOworCQkJdTMyCVIwMV9wcm90b2NvbF92ZXJzaW9uX2Vycm9yOjE7CisJCQl1MzIJUjAxX2F1dGhlbnRpY2F0aW9uX2ZyYW1lX2ljdl9lcnJvcjoxOworCQkJdTMyCVIwMV9udWxsX2tleV90b19hdXRoZW50aWNhdGlvbl9mcmFtZToxOworCQkJdTMyCVIwMV9pY3ZfZXJyb3I6MTsKKwkJCXUzMglSMDFfY3JjX2Vycm9yOjE7CisJCX07CisJCSNlbHNlCisJCXN0cnVjdAorCQl7CisJCQl1MzIJUjAxX2NyY19lcnJvcjoxOworCQkJdTMyCVIwMV9pY3ZfZXJyb3I6MTsKKwkJCXUzMglSMDFfbnVsbF9rZXlfdG9fYXV0aGVudGljYXRpb25fZnJhbWU6MTsKKwkJCXUzMglSMDFfYXV0aGVudGljYXRpb25fZnJhbWVfaWN2X2Vycm9yOjE7CisJCQl1MzIJUjAxX3Byb3RvY29sX3ZlcnNpb25fZXJyb3I6MTsKKwkJCXUzMglSMDFfZnJhbWVfcmVjZWl2ZV9kdXJpbmdfYXRpbV93aW5kb3c6MTsKKwkJCXUzMglSMDFfcmVjZWl2ZV9mcmFtZV9hbnRlbm5hX3NlbGVjdGlvbjoxOworCQkJdTMyCVIwMV9kaXJlY3RlZF9mcmFtZToxOworCQkJdTMyCVIwMV9tdWx0aWNhc3RfZnJhbWU6MTsKKwkJCXUzMglSMDFfYnJvYWRjYXN0X2ZyYW1lOjE7CisJCQl1MzIJUjAxX3JlcGxheToxOworCQkJdTMyCVIwMV9taWNfZXJyb3I6MTsKKwkJCXUzMglSMDFfZGVjcnlwdGlvbl9tZXRob2Q6MjsKKwkJCXUzMglSMDFfTE5BX3N0YXRlOjI7CisJCQl1MzIJUjAxX0FHQ19zdGF0ZTo4OworCQkJdTMyCVIwMV9kYXRhX3JhdGU6MzsKKwkJCXUzMglSMDFfcHJlX3R5cGU6MTsKKwkJCXUzMglSMDFfbW9kX3R5cGU6MTsKKwkJCXUzMglSMDFfUkVTRVJWRUQ6MzsKKwkJfTsKKwkJI2VuZGlmCisJfTsKK30gUjAxX0RFU0NSSVBUT1IsICpQUjAxX0RFU0NSSVBUT1I7CisKK3R5cGVkZWYgc3RydWN0IF9UMDFfREVTQ1JJUFRPUgoreworCXVuaW9uCisJeworCQl1MzIJdmFsdWU7CisJCSNpZmRlZiBfQklHX0VORElBTl8gLy8yMDA2MTAwOSBhbnNvbidzIGVuZGlhbgorCQlzdHJ1Y3QKKwkJeworCQkJdTMyCVQwMV9ydHNfY3RzX2R1cmF0aW9uOjE2OworCQkJdTMyCVQwMV9mYWxsX2JhY2tfcmF0ZTozOworCQkJdTMyCVQwMV9hZGRfcnRzOjE7CisJCQl1MzIJVDAxX2FkZF9jdHM6MTsKKwkJCXUzMglUMDFfbW9kdWxhdGlvbl90eXBlOjE7CisJCQl1MzIJVDAxX3BsY3BfaGVhZGVyX2xlbmd0aDoxOworCQkJdTMyCVQwMV90cmFuc21pdF9yYXRlOjM7CisJCQl1MzIJVDAxX3dlcF9pZDoyOworCQkJdTMyCVQwMV9hZGRfY2hhbGxlbmdlX3RleHQ6MTsKKwkJCXUzMglUMDFfaW5oaWJpdF9jcmM6MTsKKwkJCXUzMglUMDFfbG9vcF9iYWNrX3dlcF9tb2RlOjE7CisJCQl1MzIJVDAxX3JldHJ5X2Fib3J0X2ViYWJsZToxOworCQl9OworCQkjZWxzZQorCQlzdHJ1Y3QKKwkJeworCQkJdTMyCVQwMV9yZXRyeV9hYm9ydF9lYmFibGU6MTsKKwkJCXUzMglUMDFfbG9vcF9iYWNrX3dlcF9tb2RlOjE7CisJCQl1MzIJVDAxX2luaGliaXRfY3JjOjE7CisJCQl1MzIJVDAxX2FkZF9jaGFsbGVuZ2VfdGV4dDoxOworCQkJdTMyCVQwMV93ZXBfaWQ6MjsKKwkJCXUzMglUMDFfdHJhbnNtaXRfcmF0ZTozOworCQkJdTMyCVQwMV9wbGNwX2hlYWRlcl9sZW5ndGg6MTsKKwkJCXUzMglUMDFfbW9kdWxhdGlvbl90eXBlOjE7CisJCQl1MzIJVDAxX2FkZF9jdHM6MTsKKwkJCXUzMglUMDFfYWRkX3J0czoxOworCQkJdTMyCVQwMV9mYWxsX2JhY2tfcmF0ZTozOworCQkJdTMyCVQwMV9ydHNfY3RzX2R1cmF0aW9uOjE2OworCQl9OworCQkjZW5kaWYKKwl9OworfSBUMDFfREVTQ1JJUFRPUiwgKlBUMDFfREVTQ1JJUFRPUjsKKwordHlwZWRlZiBzdHJ1Y3QgX1QwMl9ERVNDUklQVE9SCit7CisJdW5pb24KKwl7CisJCXUzMgl2YWx1ZTsKKwkJI2lmZGVmIF9CSUdfRU5ESUFOXyAgLy8yMDA2MTAwOSBhZGQgYnkgYW5zb24ncyBlbmRpYW4KKwkJc3RydWN0CisJCXsKKwkJCXUzMglUMDJfSXNMYXN0TXBkdToxOy8vIFRoZSBzYW1lIG1lY2hhbmlzbSB3aXRoIFQwMCBzZXR0aW5nCisJCQl1MzIJVDAyX0lnbm9yZVJlc3VsdDoxOy8vIFRoZSBzYW1lIG1lY2hhbmlzbSB3aXRoIFQwMCBzZXR0aW5nLiAwNTAxMTEgTW9kaWZ5IGZvciBUUworCQkJdTMyCVQwMl9SRVNFUlZFRF9JRDoyOy8vIFRoZSBzYW1lIG1lY2hhbmlzbSB3aXRoIFQwMCBzZXR0aW5nCisJCQl1MzIJVDAyX1R4X1BrdElEOjQ7CisJCQl1MzIJVDAyX01QRFVfQ250OjQ7CisJCQl1MzIJVDAyX1JUU19DbnQ6NDsKKwkJCXUzMglUMDJfUkVTRVJWRUQ6NzsKKwkJCXUzMglUMDJfdHJhbnNtaXRfY29tcGxldGU6MTsKKwkJCXUzMglUMDJfdHJhbnNtaXRfYWJvcnRfZHVlX3RvX1RCVFQ6MTsKKwkJCXUzMglUMDJfZWZmZWN0aXZlX3RyYW5zbWlzc2lvbl9yYXRlOjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X3dpdGhvdXRfZW5jcnlwdGlvbl9kdWVfdG9fd2VwX29uX2ZhbHNlOjE7CisJCQl1MzIJVDAyX2Rpc2NhcmRfZHVlX3RvX251bGxfd2VwX2tleToxOworCQkJdTMyCVQwMl9SRVNFUlZFRF8xOjE7CisJCQl1MzIJVDAyX291dF9vZl9NYXhUeE1TRFVMaWZ0VGltZToxOworCQkJdTMyCVQwMl90cmFuc21pdF9hYm9ydDoxOworCQkJdTMyCVQwMl90cmFuc21pdF9mYWlsOjE7CisJCX07CisJCSNlbHNlCisJCXN0cnVjdAorCQl7CisJCQl1MzIJVDAyX3RyYW5zbWl0X2ZhaWw6MTsKKwkJCXUzMglUMDJfdHJhbnNtaXRfYWJvcnQ6MTsKKwkJCXUzMglUMDJfb3V0X29mX01heFR4TVNEVUxpZnRUaW1lOjE7CisJCQl1MzIJVDAyX1JFU0VSVkVEXzE6MTsKKwkJCXUzMglUMDJfZGlzY2FyZF9kdWVfdG9fbnVsbF93ZXBfa2V5OjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X3dpdGhvdXRfZW5jcnlwdGlvbl9kdWVfdG9fd2VwX29uX2ZhbHNlOjE7CisJCQl1MzIJVDAyX2VmZmVjdGl2ZV90cmFuc21pc3Npb25fcmF0ZToxOworCQkJdTMyCVQwMl90cmFuc21pdF9hYm9ydF9kdWVfdG9fVEJUVDoxOworCQkJdTMyCVQwMl90cmFuc21pdF9jb21wbGV0ZToxOworCQkJdTMyCVQwMl9SRVNFUlZFRDo3OworCQkJdTMyCVQwMl9SVFNfQ250OjQ7CisJCQl1MzIJVDAyX01QRFVfQ250OjQ7CisJCQl1MzIJVDAyX1R4X1BrdElEOjQ7CisJCQl1MzIJVDAyX1JFU0VSVkVEX0lEOjI7Ly8gVGhlIHNhbWUgbWVjaGFuaXNtIHdpdGggVDAwIHNldHRpbmcKKwkJCXUzMglUMDJfSWdub3JlUmVzdWx0OjE7Ly8gVGhlIHNhbWUgbWVjaGFuaXNtIHdpdGggVDAwIHNldHRpbmcuIDA1MDExMSBNb2RpZnkgZm9yIFRTCisJCQl1MzIJVDAyX0lzTGFzdE1wZHU6MTsvLyBUaGUgc2FtZSBtZWNoYW5pc20gd2l0aCBUMDAgc2V0dGluZworCQl9OworCQkjZW5kaWYKKwl9OworfSBUMDJfREVTQ1JJUFRPUiwgKlBUMDJfREVTQ1JJUFRPUjsKKwordHlwZWRlZiBzdHJ1Y3QgX0RFU0NSSVBUT1IgewkJLy8gU2tpcCBsZW5ndGggPSA4IERXT1JECisJLy8gSUQgZm9yIGRlc2NyaXB0b3IgLS0tLCBUaGUgZmllbGQgZG9lc24ndCBiZSBjbGVhcmQgaW4gdGhlIG9wZXJhdGlvbiBvZiBEZXNjcmlwdG9yIGRlZmluaXRpb24KKwl1OAlEZXNjcmlwdG9yX0lEOworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVRoZSBhYm92ZSByZWdpb24gZG9lc24ndCBiZSBjbGVhcmVkIGJ5IERFU0NSSVBUT1JfUkVTRVQtLS0tLS0KKwl1OAlSRVNFUlZFRFszXTsKKworCXUxNglGcmFnbWVudFRocmVzaG9sZDsKKwl1OAlJbnRlcm5hbFVzZWQ7Ly9Pbmx5IGNhbiBiZSB1c2VkIGJ5IG9wZXJhdGlvbiBvZiBkZXNjcmlwdG9yIGRlZmluaXRpb24KKwl1OAlUeXBlOy8vIDA6IDgwMi4zCTE6ODAyLjExIGRhdGEgZnJhbWUJMjo4MDIuMTEgbWFuYWdlbWVudCBmcmFtZQorCisJdTgJUHJlYW1ibGVNb2RlOy8vIDA6IHNob3J0IDE6bG9uZworCXU4CVR4UmF0ZTsKKwl1OAlGcmFnbWVudENvdW50OworCXU4CUVhcEZpeDsgLy8gRm9yIHNwZWVkIHVwIGtleSBpbnN0YWxsCisKKwkvLyBGb3IgUjAwIGFuZCBUMDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXVuaW9uCisJeworCQlSMDBfREVTQ1JJUFRPUglSMDA7CisJCVQwMF9ERVNDUklQVE9SCVQwMDsKKwl9OworCisJLy8gRm9yIFIwMSBhbmQgVDAxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwl1bmlvbgorCXsKKwkJUjAxX0RFU0NSSVBUT1IJUjAxOworCQlUMDFfREVTQ1JJUFRPUglUMDE7CisJfTsKKworCS8vIEZvciBSMDIgYW5kIFQwMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJdW5pb24KKwl7CisJCXUzMgkJCVIwMjsKKwkJVDAyX0RFU0NSSVBUT1IJVDAyOworCX07CisKKwkvLyBGb3IgUjAzIGFuZCBUMDMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIEZvciBzb2Z0d2FyZSB1c2VkCisJdW5pb24KKwl7CisJCXUzMglSMDM7CisJCXUzMglUMDM7CisJCXN0cnVjdAorCQl7CisJCQl1OAlidWZmZXJfbnVtYmVyOworCQkJdTgJYnVmZmVyX3N0YXJ0X2luZGV4OworCQkJdTE2CWJ1ZmZlcl90b3RhbF9zaXplOworCQl9OworCX07CisKKwkvLyBGb3Igc3RvcmluZyB0aGUgYnVmZmVyCisJdTE2CWJ1ZmZlcl9zaXplWyBNQVhfREVTQ1JJUFRPUl9CVUZGRVJfSU5ERVggXTsKKwl2b2lkKglidWZmZXJfYWRkcmVzc1sgTUFYX0RFU0NSSVBUT1JfQlVGRkVSX0lOREVYIF07Ly85MzExMzAuNC5xCisKK30gREVTQ1JJUFRPUiwgKlBERVNDUklQVE9SOworCisKKyNkZWZpbmUgREVGQVVMVF9OVUxMX1BBQ0tFVF9DT1VOVAkJMTgwMDAwCS8vMjAwNjA4MjguMSBBZGQuIDE4MCBzZWNvbmRzCisKKyNkZWZpbmUgTUFYX1RYVkdBX0VFUFJPTQk5CS8vSG93IG1hbnkgd29yZCh1MTYpIG9mIEVFUFJPTSB3aWxsIGJlIHVzZWQgZm9yIFR4VkdBCisjZGVmaW5lIE1BWF9SRl9QQVJBTUVURVIJMzIKKwordHlwZWRlZiBzdHJ1Y3QgX1RYVkdBX0ZPUl81MCB7CisJdTgJQ2hhbk5vOworCXU4CVR4VmdhVmFsdWU7Cit9IFRYVkdBX0ZPUl81MDsKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gRGV2aWNlIHJlbGF0ZWQgaW5jbHVkZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2luY2x1ZGUgImxpbnV4L3didXNiX3MuaCIKKyNpbmNsdWRlICJsaW51eC93YjM1cmVnX3MuaCIKKyNpbmNsdWRlICJsaW51eC93YjM1dHhfcy5oIgorI2luY2x1ZGUgImxpbnV4L3diMzVyeF9zLmgiCisKKworLy8gRm9yIEhhbCB1c2luZyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3R5cGVkZWYgc3RydWN0IF9IV19EQVRBX1QKK3sKKwkvLyBGb3IgY29tcGF0aWJsZSB3aXRoIDMzCisJdTMyCXJldmlzaW9uOworCXUzMglCQjNjX2NhbDsgLy8gVGhlIHZhbHVlIGZvciBUeCBjYWxpYnJhdGlvbiBjb21lcyBmcm9tIEVFUFJPTQorCXUzMglCQjU0X2NhbDsgLy8gVGhlIHZhbHVlIGZvciBSeCBjYWxpYnJhdGlvbiBjb21lcyBmcm9tIEVFUFJPTQorCisKKwkvLyBGb3Igc3VycHJpc2UgcmVtb3ZlCisJdTMyCVN1cnByaXNlUmVtb3ZlOyAvLyAwOiBOb3JtYWwgMTogU3VycHJpc2UgcmVtb3ZlCisJdTgJSW5pdGlhbFJlc291cmNlOworCXU4CUlzS2V5UHJlU2V0OworCXU4CUNhbE9uZVRpbWU7IC8vIDIwMDYwNjMwLjEKKworCXU4CVZDT190cmltOworCisJLy8gRm9yIEZpeCAxJ3N0IERNQSBidWcKKwl1MzIJRnJhZ0NvdW50OworCXUzMglETUFGaXg7IC8vVjFfRE1BX0ZJWCBUaGUgdmFyaWFibGUgY2FuIGJlIHJlbW92ZWQgaWYgZHJpdmVyIHdhbnQgdG8gc2F2ZSBtZW0gc3BhY2UgZm9yIFYyLgorCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBGb3IgVVNCIGRyaXZlciwgaGFsIG5lZWQgbW9yZSB2YXJpYWJsZXMuIER1ZSB0bworCS8vCTEuIE5ESVMtV0RNIG9wZXJhdGlvbgorCS8vCTIuIFRoZSBTTUUsIE1MTUUgYW5kIE9MRCBNRFMgbmVlZCBBZGFwdGVyIHN0cnVjdHVyZSwgYnV0IHRoZSBkcml2ZXIgdW5kZXIgSEFMIGRvZXNuJ3QKKwkvLwkJaGF2ZSB0aGF0IHBhcmFtZXRlciB3aGVuIHJlY2VpdmluZyBhbmQgaW5kaWNhdGluZyBwYWNrZXQuCisJLy8JCVRoZSBNRFMgbXVzdCBpbnB1dCB0aGUgQWRhcHRlciBwb2ludGVyIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyIG9mIGhhbF9pbml0X2hhcmR3YXJlLgorCS8vCQlUaGUgZnVuY3Rpb24gdXNhZ2UgaXMgZGlmZmVyZW50IHRoYW4gUENJIGRyaXZlci4KKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCXZvaWQqIEFkYXB0ZXI7CisKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJLy8gRGVmaW5pdGlvbiBmb3IgTUFDIGFkZHJlc3MKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJdTgJCVBlcm1hbmVudE1hY0FkZHJlc3NbRVRIX0xFTkdUSF9PRl9BRERSRVNTICsgMl07IC8vIFRoZSBFbnRoZXJuZXQgYWRkciB0aGF0IGFyZSBzdG9yZWQgaW4gRUVQUk9NLiAgKyAyIHRvIDgtYnl0ZSBhbGlnbm1lbnQKKwl1OAkJQ3VycmVudE1hY0FkZHJlc3NbRVRIX0xFTkdUSF9PRl9BRERSRVNTICsgMl07IC8vIFRoZSBFbnRoZXJuZXQgYWRkciB0aGF0IGFyZSBpbiB1c2VkLiAgKyAyIHRvIDgtYnl0ZSBhbGlnbm1lbnQKKworCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJLy8gRGVmaW5pdGlvbiBmb3IgODAyLjExCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlQVUNIQVIJYnNzaWRfcG9pbnRlcjsgLy8gVXNlZCBieSBoYWxfZ2V0X2Jzc2lkIGZvciByZXR1cm4gdmFsdWUKKwl1OAlic3NpZFs4XTsvLyBPbmx5IDYgYnl0ZSB3aWxsIGJlIHVzZWQuIDggYnl0ZSBpcyByZXF1aXJlZCBmb3IgcmVhZCBidWZmZXIKKwl1OAlzc2lkWzMyXTsvLyBtYXhpbXVtIHNzaWQgbGVuZ3RoIGlzIDMyIGJ5dGUKKworCXUxNglBSUQ7CisJdTgJc3NpZF9sZW5ndGg7CisJdTgJQ2hhbm5lbDsKKworCXUxNglMaXN0ZW5JbnRlcnZhbDsKKwl1MTYJQ2FwYWJpbGl0eUluZm9ybWF0aW9uOworCisJdTE2CUJlYWNvblBlcmlvZDsKKwl1MTYJUHJvYmVEZWxheTsKKworCXU4CWJzc190eXBlOy8vIDA6IElCU1NfTkVUIG9yIDE6RVNTX05FVAorCXU4CXByZWFtYmxlOy8vIDA6IHNob3J0IHByZWFtYmxlLCAxOiBsb25nIHByZWFtYmxlCisJdTgJc2xvdF90aW1lX3NlbGVjdDsvLyA5IG9yIDIwIHZhbHVlCisJdTgJcGh5X3R5cGU7Ly8gUGh5IHNlbGVjdAorCisJdTMyCXBoeV9wYXJhW01BWF9SRl9QQVJBTUVURVJdOworCXUzMglwaHlfbnVtYmVyOworCisJdTMyCUN1cnJlbnRSYWRpb1N3OyAvLyAyMDA2MDMyMC4yIDA6T24gMTpPZmYKKwl1MzIJQ3VycmVudFJhZGlvSHc7IC8vIDIwMDYwODI1IDA6T24gMTpPZmYKKworCVBVQ0hBUglwb3dlcl9zYXZlX3BvaW50OyAgLy8gVXNlZCBieSBoYWxfZ2V0X3Bvd2VyX3NhdmVfbW9kZSBmb3IgcmV0dXJuIHZhbHVlCisJdTgJY3dtaW47CisJdTgJZGVzaXJlZF9wb3dlcl9zYXZlOworCXU4CWR0aW07Ly8gSXMgcnVubmluZyBkdGltCisJdTgJbWFwcGluZ19rZXlfcmVwbGFjZV9pbmRleDsvL0luIEtleSB0YWJsZSwgdGhlIG5leHQgaW5kZXggYmUgcmVwbGFjZWQgOTMxMTMwLjQucgorCisJdTE2CU1heFJlY2VpdmVMaWZlVGltZTsKKwl1MTYJRnJhZ21lbnRUaHJlc2hvbGQ7CisJdTE2CUZyYWdtZW50VGhyZXNob2xkX3RtcDsKKwl1MTYJY3dtYXg7CisKKwl1OAlLZXlfc2xvdFtNQVhfS0VZX1RBQkxFXVs4XTsgLy9Pd25lcnNoaXAgcmVjb3JkIGZvciBrZXkgc2xvdC4gRm9yIEFsaWdubWVudAorCXUzMglLZXlfY29udGVudFtNQVhfS0VZX1RBQkxFXVsxMl07IC8vIDEwRFcgZm9yIGVhY2ggZW50cnkgKyAyIGZvciBidXJzdCBjb21tYW5kKCBPZmYgYW5kIE9uIHZhbGlkIGJpdCkKKwl1OAlDdXJyZW50RGVmYXVsdEtleUluZGV4OworCXUzMglDdXJyZW50RGVmYXVsdEtleUxlbmd0aDsKKworCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJLy8gVmFyaWFibGUgZm9yIGVhY2ggbW9kdWxlCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlXQlVTQgkJV2JVc2I7IC8vIE5lZWQgV2JVc2IuaAorCVdCMzVSRUcJCVdiMzVSZWc7IC8vIE5lZWQgV2IzNVJlZy5oCisJV0IzNVRYCQlXYjM1VHg7IC8vIE5lZWQgV2IzNVR4LmgKKwlXQjM1UlgJCVdiMzVSeDsgLy8gTmVlZCBXYjM1UnguaAorCisJT1NfVElNRVIJTEVEVGltZXI7Ly8gRm9yIExFRAorCisJdTMyCQlMRURwb2ludDsvLyBGb3IgTEVECisKKyAgICB1MzIgICAgICAgICBkdG9fdHhfcmV0cnlfY291bnQ7ICAgICAgICAgLy8gTEEyMDA0MDIxMF9EVE8ga2V2aW4KKyAgICB1MzIgICAgICAgICBkdG9fdHhfZnJhZ19jb3VudDsgICAgICAgICAgLy8gTEEyMDA0MDIxMF9EVE8ga2V2aW4KKyAgICB1MzIgICAgICAgICByeF9va19jb3VudFsxM107ICAgIC8vIGluZGV4PTA6IHRvdGFsIHJ4IG9rCisgICAgLy91MzIgICAgICAgICByeF9va19ieXRlc1sxM107ICAgIC8vIGluZGV4PTAsIHRvdGFsIHJ4IG9rIGJ5dGVzCisgICAgdTMyICAgICAgICAgcnhfZXJyX2NvdW50WzEzXTsgICAvLyBpbmRleD0wOiB0b3RhbCByeCBlcnIKKworCS8vZm9yIFR4IGRlYnVnCisJdTMyCQkJdHhfVEJUVF9zdGFydF9jb3VudDsKKwl1MzIJCQl0eF9FVFJfY291bnQ7CisJdTMyCQkJdHhfV2VwT25fZmFsc2VfY291bnQ7CisJdTMyCQkJdHhfTnVsbF9rZXlfY291bnQ7CisJdTMyCQkJdHhfcmV0cnlfY291bnRbOF07CisKKwl1OAkJUG93ZXJJbmRleEZyb21FRVBST007IC8vIEZvciAyNDEyTUh6CisJdTgJCXBvd2VyX2luZGV4OworCXU4CQlJc1dhaXRKb2luQ29tcGxldGU7CS8vIFRSVUU6IHNldCBqb2luIHJlcXVlc3QKKwl1OAkJYmFuZDsKKworCXUxNgkJU29mdHdhcmVTZXQ7CisJdTE2CQlSZXNlcnZlZF9zOworCisJdTMyCQlJc0luaXRPSzsgLy8gMDogRHJpdmVyIHN0YXJ0aW5nICAgMTogRHJpdmVyIGluaXQgT0sKKworCS8vIEZvciBQaHkgY2FsaWJyYXRpb24KKyAgICBzMzIJCWlxX3JzZGxfZ2Fpbl90eF9kMjsKKyAgICBzMzIJCWlxX3JzZGxfcGhhc2VfdHhfZDI7CisJdTMyCQl0eHZnYV9zZXR0aW5nX2Zvcl9jYWw7IC8vIDIwMDYwNzAzLjEgQWRkCisKKwl1OAkJVHhWZ2FTZXR0aW5nSW5FRVBST01bICgoKE1BWF9UWFZHQV9FRVBST00qMikrMykgJiB+MHgwMykgXTsgLy8gMjAwNjA2MjEgRm9yIGJhY2t1cCBFRVBST00gdmFsdWUKKwl1OAkJVHhWZ2FGb3IyNFsxNl07IC8vIE1heCBpcyAxNCwgMiBmb3IgYWxpZ25tZW50CisJVFhWR0FfRk9SXzUwCVR4VmdhRm9yNTBbMzZdOwkvLyAzNSBjaGFubmVscyBpbiA1Ry4gMzV4MiA9IDcwIGJ5dGUuIDIgZm9yIGFsaWdubWVudHMKKworCXUxNgkJU2Nhbl9JbnRlcnZhbDsKKwl1MTYJCVJFU0VSVkVENjsKKworCS8vIExFRCBjb250cm9sCisJdTMyCQlMRURfY29udHJvbDsKKwkJLy8gTEVEX2NvbnRyb2wgNCBieXRlOiBHcmF5X0xlZF8xWzNdCQlHcmF5X0xlZF8wWzJdCQlMZWRbMV0JCQlMZWRbMF0KKwkJLy8gR3JheV9MZWQKKwkJLy8JCUZvciBMZWQgZ3JheSBzZXR0aW5nCisJCS8vIExlZAorCQkvLwkJMDogbm9ybWFsIGNvbnRyb2wsIExFRCBiZWhhdmlvciB3aWxsIGRlY2lkZSBieSBFRVBST00gc2V0dGluZworCQkvLwkJMTogVHVybiBvZmYgc3BlY2lmaWMgTEVECisJCS8vCQkyOiBBbHdheXMgb24gc3BlY2lmaWMgTEVECisJCS8vCQkzOiBzbG93IGJsaW5raW5nIHNwZWNpZmljIExFRAorCQkvLwkJNDogZmFzdCBibGlua2luZyBzcGVjaWZpYyBMRUQKKwkJLy8JCTU6IFdQUyBsZWQgY29udHJvbCBpcyBzZXQuIExlZDAgaXMgUmVkLCBMZWQxIGlkIEdyZWVuCisJCS8vCQkJTGVkWzFdIGlzIHBhcmFtZXRlciBmb3IgV1BTIExFRCBtb2RlCisJCS8vCQkJCSAvLyAxOkluUHJvZ3Jlc3MgIDI6IEVycm9yIDM6IFNlc3Npb24gb3ZlcmxhcCA0OiBTdWNjZXNzIDIwMDYxMTA4IGNvbnRyb2wKKworCXUzMgkJTEVEX0xpbmtPbjsJCS8vVHVybiBMRUQgb24gY29udHJvbAorCXUzMgkJTEVEX1NjYW5uaW5nOwkvLyBMZXQgTEVEIGluIHNjYW4gcHJvY2VzcyBjb250cm9sCisJdTMyCQlMRURfQmxpbmtpbmc7IC8vIFRlbXAgdmFyaWFibGUgZm9yIHNoaW5pbmcKKwl1MzIJCVJ4Qnl0ZUNvdW50TGFzdDsKKwl1MzIJCVR4Qnl0ZUNvdW50TGFzdDsKKworCXMzMgkJU3VycHJpc2VSZW1vdmVDb3VudDsKKworCS8vIEZvciBnbG9iYWwgdGltZXIKKwl1MzIJCXRpbWVfY291bnQ7Ly9USUNLX1RJTUVfMTAwbXMgMSA9IDEwMG1zCisKKwkvLyBGb3IgZXJyb3IgcmVjb3ZlcgorCXUzMgkJSHdTdG9wOworCisJLy8gMjAwNjA4MjguMSBmb3IgYXZvaWQgQVAgZGlzY29ubmVjdAorCXUzMgkJTnVsbFBhY2tldENvdW50OworCit9IGh3X2RhdGFfdCwgKnBod19kYXRhX3Q7CisKKy8vIFRoZSBtYXBwaW5nIG9mIFJ4IGFuZCBUeCBkZXNjcmlwdG9yIGZpZWxkCit0eXBlZGVmIHN0cnVjdCBfSEFMX1JBVEUKK3sKKwkvLyBEU1NTCisJdTMyCVJFU0VSVkVEXzA7CisJdTMyICAgTnVtUmF0ZTJNUzsKKwl1MzIgICBOdW1SYXRlNTVNUzsKKwl1MzIgICBOdW1SYXRlMTFNUzsKKworCXUzMglSRVNFUlZFRF8xWzRdOworCisJdTMyICAgTnVtUmF0ZTFNOworCXUzMiAgIE51bVJhdGUyTUw7CisJdTMyICAgTnVtUmF0ZTU1TUw7CisJdTMyICAgTnVtUmF0ZTExTUw7CisKKwl1MzIJUkVTRVJWRURfMls0XTsKKworCS8vIE9GRE0KKwl1MzIgICBOdW1SYXRlNk07CisJdTMyICAgTnVtUmF0ZTlNOworCXUzMiAgIE51bVJhdGUxMk07CisJdTMyICAgTnVtUmF0ZTE4TTsKKwl1MzIgICBOdW1SYXRlMjRNOworCXUzMiAgIE51bVJhdGUzNk07CisJdTMyICAgTnVtUmF0ZTQ4TTsKKwl1MzIgICBOdW1SYXRlNTRNOworfSBIQUxfUkFURSwgKlBIQUxfUkFURTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmxpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmxpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhZGU1YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXguYwpAQCAtMCwwICsxLDI3NyBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgQ29weXJpZ2h0IChjKSAxOTk2LTIwMDUgV2luYm9uZCBFbGVjdHJvbmljIENvcnBvcmF0aW9uCisvLworLy8gIE1vZHVsZSBOYW1lOgorLy8gICAgd2JsaW51eC5jCisvLworLy8gIEFic3RyYWN0OgorLy8gICAgTGludXggcmVsZWF0ZWQgcm91dGluZXMKKy8vCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNpbmNsdWRlICJvc19jb21tb24uaCIKKwordTMyCitXQkxJTlVYX01lbW9yeUFsbG9jKHZvaWQqICpWaXJ0dWFsQWRkcmVzcywgdTMyIExlbmd0aCkKK3sKKwkqVmlydHVhbEFkZHJlc3MgPSBremFsbG9jKCBMZW5ndGgsIEdGUF9BVE9NSUMgKTsgLy9HRlBfS0VSTkVMIGlzIG5vdCBzdWl0YWJsZQorCisJaWYgKCpWaXJ0dWFsQWRkcmVzcyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworczMyCitFbmNhcEF0b21pY0luYyhQQURBUFRFUiBBZGFwdGVyLCB2b2lkKiBwQXRvbWljKQoreworCVBXQkxJTlVYIHBXYkxpbnV4ID0gJkFkYXB0ZXItPldiTGludXg7CisJdTMyCWx0bXA7CisJUFVMT05HCXBsdG1wID0gKFBVTE9ORylwQXRvbWljOworCU9TX1NQSU5fTE9DS19BQ1FVSVJFRCggJnBXYkxpbnV4LT5BdG9taWNTcGluTG9jayApOworCSgqcGx0bXApKys7CisJbHRtcCA9ICgqcGx0bXApOworCU9TX1NQSU5fTE9DS19SRUxFQVNFRCggJnBXYkxpbnV4LT5BdG9taWNTcGluTG9jayApOworCXJldHVybiBsdG1wOworfQorCitzMzIKK0VuY2FwQXRvbWljRGVjKFBBREFQVEVSIEFkYXB0ZXIsIHZvaWQqIHBBdG9taWMpCit7CisJUFdCTElOVVggcFdiTGludXggPSAmQWRhcHRlci0+V2JMaW51eDsKKwl1MzIJbHRtcDsKKwlQVUxPTkcJcGx0bXAgPSAoUFVMT05HKXBBdG9taWM7CisJT1NfU1BJTl9MT0NLX0FDUVVJUkVEKCAmcFdiTGludXgtPkF0b21pY1NwaW5Mb2NrICk7CisJKCpwbHRtcCktLTsKKwlsdG1wID0gKCpwbHRtcCk7CisJT1NfU1BJTl9MT0NLX1JFTEVBU0VEKCAmcFdiTGludXgtPkF0b21pY1NwaW5Mb2NrICk7CisJcmV0dXJuIGx0bXA7Cit9CisKK3Vuc2lnbmVkIGNoYXIKK1dCTElOVVhfSW5pdGlhbChQQURBUFRFUiBBZGFwdGVyKQoreworCVBXQkxJTlVYIHBXYkxpbnV4ID0gJkFkYXB0ZXItPldiTGludXg7CisKKwlPU19TUElOX0xPQ0tfQUxMT0NBVEUoICZwV2JMaW51eC0+U3BpbkxvY2sgKTsKKwlPU19TUElOX0xPQ0tfQUxMT0NBVEUoICZwV2JMaW51eC0+QXRvbWljU3BpbkxvY2sgKTsKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZAorV0JMaW51eF9SZWNlaXZlUGFja2V0KFBBREFQVEVSIEFkYXB0ZXIsIFBSWExBWUVSMSBwUnhMYXllcjEpCit7CisJQlVHKCk7Cit9CisKKwordm9pZAorV0JMSU5VWF9HZXROZXh0UGFja2V0KFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzKQoreworCUJVRygpOworfQorCit2b2lkCitXQkxJTlVYX0dldE5leHRQYWNrZXRDb21wbGV0ZWQoUEFEQVBURVIgQWRhcHRlciwgUERFU0NSSVBUT1IgcERlcykKK3sKKwlCVUcoKTsKK30KKwordm9pZAorV0JMSU5VWF9EZXN0cm95KFBBREFQVEVSIEFkYXB0ZXIpCit7CisJV0JMSU5VWF9zdG9wKCBBZGFwdGVyICk7CisJT1NfU1BJTl9MT0NLX0ZSRUUoICZwV2JOZGlzLT5TcGluTG9jayApOworI2lmZGVmIF9QRV9VU0JfSU5JX0RVTVBfCisJV0JERUJVRygoIlt3MzV1bmRdIHVucmVnaXN0ZXJfbmV0ZGV2IVxuIikpOworI2VuZGlmCit9CisKK3ZvaWQKK1dCTElOVVhfc3RvcCggIFBBREFQVEVSIEFkYXB0ZXIgKQoreworCVBXQkxJTlVYCXBXYkxpbnV4ID0gJkFkYXB0ZXItPldiTGludXg7CisJc3RydWN0IHNrX2J1ZmYgKnBTa2I7CisKKwlpZiAoT1NfQVRPTUlDX0lOQyggQWRhcHRlciwgJnBXYkxpbnV4LT5UaHJlYWRDb3VudCApID09IDEpIHsKKwkJLy8gU2h1dGRvd24gbW9kdWxlIGltbWVkaWF0ZWx5CisJCXBXYkxpbnV4LT5zaHV0ZG93biA9IDE7CisKKwkJd2hpbGUgKHBXYkxpbnV4LT5za2JfYXJyYXlbIHBXYkxpbnV4LT5za2JfR2V0SW5kZXggXSkgeworCQkJLy8gVHJ5aW5nIHRvIGZyZWUgdGhlIHVuLXNlbmRpbmcgcGFja2V0CisJCQlwU2tiID0gcFdiTGludXgtPnNrYl9hcnJheVsgcFdiTGludXgtPnNrYl9HZXRJbmRleCBdOworCQkJcFdiTGludXgtPnNrYl9hcnJheVsgcFdiTGludXgtPnNrYl9HZXRJbmRleCBdID0gTlVMTDsKKwkJCWlmKCBpbl9pcnEoKSApCisJCQkJZGV2X2tmcmVlX3NrYl9pcnEoIHBTa2IgKTsKKwkJCWVsc2UKKwkJCQlkZXZfa2ZyZWVfc2tiKCBwU2tiICk7CisKKwkJCXBXYkxpbnV4LT5za2JfR2V0SW5kZXgrKzsKKwkJCXBXYkxpbnV4LT5za2JfR2V0SW5kZXggJT0gV0JMSU5VWF9QQUNLRVRfQVJSQVlfU0laRTsKKwkJfQorCisjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJCVdCREVCVUcoKCAiW3czNXVuZF0gU0tCX1JFTEVBU0UgT0tcbiIgKSk7CisjZW5kaWYKKwl9CisKKwlPU19BVE9NSUNfREVDKCBBZGFwdGVyLCAmcFdiTGludXgtPlRocmVhZENvdW50ICk7Cit9CisKK3ZvaWQKK1diV2xhbkhhbHQoICBQQURBUFRFUiBBZGFwdGVyICkKK3sKKwkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUFkYXB0ZXItPnNMb2NhbFBhcmEuU2h1dERvd25lZCA9IFRSVUU7CisKKwlNZHNfRGVzdHJveSggQWRhcHRlciApOworCisJLy8gVHVybiBvZmYgUnggYW5kIFR4IGhhcmR3YXJlIGFiaWxpdHkKKwloYWxfc3RvcCggJkFkYXB0ZXItPnNId0RhdGEgKTsKKyNpZmRlZiBfUEVfVVNCX0lOSV9EVU1QXworCVdCREVCVUcoKCJbdzM1dW5kXSBIYWxfc3RvcCBPLksuXG4iKSk7CisjZW5kaWYKKwlPU19TTEVFUCgxMDAwMDApOy8vIFdhaXRpbmcgSXJwIGNvbXBsZXRlZAorCisJLy8gRGVzdHJveSB0aGUgTkRJUyBtb2R1bGUKKwlXQkxJTlVYX0Rlc3Ryb3koIEFkYXB0ZXIgKTsKKworCS8vIEhhbHQgdGhlIEhBTAorCWhhbF9oYWx0KCZBZGFwdGVyLT5zSHdEYXRhLCBOVUxMKTsKK30KKwordW5zaWduZWQgY2hhcgorV2JXTGFuSW5pdGlhbGl6ZShQQURBUFRFUiBBZGFwdGVyKQoreworCXBod19kYXRhX3QJcEh3RGF0YTsKKwlQVUNIQVIJCXBNYWNBZGRyLCBwTWFjQWRkcjI7CisJdTMyCQlJbml0U3RlcCA9IDA7CisJdTgJCUVFUFJPTV9yZWdpb247CisJdTgJCUh3UmFkaW9PZmY7CisKKwlkbyB7CisJCS8vCisJCS8vIFNldHRpbmcgZGVmYXVsdCB2YWx1ZSBmb3IgTGludXgKKwkJLy8KKwkJQWRhcHRlci0+c0xvY2FsUGFyYS5yZWdpb25fSU5GID0gUkVHSU9OX0FVVE87CisJCUFkYXB0ZXItPnNMb2NhbFBhcmEuVHhSYXRlTW9kZSA9IFJBVEVfQVVUTzsKKwkJcHNMT0NBTC0+Yk1hY09wZXJhdGlvbk1vZGUgPSBNT0RFXzgwMl8xMV9CRzsJLy8gQi9HIG1vZGUKKwkJQWRhcHRlci0+TWRzLlR4UlRTVGhyZXNob2xkID0gREVGQVVMVF9SVFNUaHJlc2hvbGQ7CisJCUFkYXB0ZXItPk1kcy5UeEZyYWdtZW50VGhyZXNob2xkID0gREVGQVVMVF9GUkFHTUVOVF9USFJFU0hPTEQ7CisJCWhhbF9zZXRfcGh5X3R5cGUoICZBZGFwdGVyLT5zSHdEYXRhLCBSRl9XQl8yNDJfMSApOworCQlBZGFwdGVyLT5zTG9jYWxQYXJhLk1UVXNpemUgPSBNQVhfRVRIRVJORVRfUEFDS0VUX1NJWkU7CisJCXBzTE9DQUwtPmJQcmVhbWJsZU1vZGUgPSBBVVRPX01PREU7CisJCUFkYXB0ZXItPnNMb2NhbFBhcmEuUmFkaW9PZmZTdGF0dXMuYm9Td1JhZGlvT2ZmID0gRkFMU0U7CisJCXBId0RhdGEgPSAmQWRhcHRlci0+c0h3RGF0YTsKKwkJaGFsX3NldF9waHlfdHlwZSggcEh3RGF0YSwgUkZfREVDSURFX0JZX0lORiApOworCisJCS8vCisJCS8vIEluaXRpYWwgZWFjaCBtb2R1bGUgYW5kIHZhcmlhYmxlCisJCS8vCisJCWlmICghV0JMSU5VWF9Jbml0aWFsKEFkYXB0ZXIpKSB7CisjaWZkZWYgX1BFX1VTQl9JTklfRFVNUF8KKwkJCVdCREVCVUcoKCJbdzM1dW5kXVdCTkRJUyBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKworCQkvLyBJbml0aWFsIFNvZnR3YXJlIHZhcmlhYmxlCisJCUFkYXB0ZXItPnNMb2NhbFBhcmEuU2h1dERvd25lZCA9IEZBTFNFOworCisJCS8vYWRkZWQgYnkgd3MgZm9yIHdlcCBrZXkgZXJyb3IgZGV0ZWN0aW9uCisJCUFkYXB0ZXItPnNMb2NhbFBhcmEuYldlcEtleUVycm9yPSBGQUxTRTsKKwkJQWRhcHRlci0+c0xvY2FsUGFyYS5iVG9TZWxmUGFja2V0UmVjZWl2ZWQgPSBGQUxTRTsKKwkJQWRhcHRlci0+c0xvY2FsUGFyYS5XZXBLZXlEZXRlY3RUaW1lckNvdW50PSAyICogMTAwOyAvLy8gMiBzZWNvbmRzCisKKwkJLy8gSW5pdGlhbCBVU0IgaGFsCisJCUluaXRTdGVwID0gMTsKKwkJcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCQlpZiAoIWhhbF9pbml0X2hhcmR3YXJlKHBId0RhdGEsIEFkYXB0ZXIpKQorCQkJYnJlYWs7CisKKwkJRUVQUk9NX3JlZ2lvbiA9IGhhbF9nZXRfcmVnaW9uX2Zyb21fRUVQUk9NKCBwSHdEYXRhICk7CisJCWlmIChFRVBST01fcmVnaW9uICE9IFJFR0lPTl9BVVRPKQorCQkJcHNMT0NBTC0+cmVnaW9uID0gRUVQUk9NX3JlZ2lvbjsKKwkJZWxzZSB7CisJCQlpZiAocHNMT0NBTC0+cmVnaW9uX0lORiAhPSBSRUdJT05fQVVUTykKKwkJCQlwc0xPQ0FMLT5yZWdpb24gPSBwc0xPQ0FMLT5yZWdpb25fSU5GOworCQkJZWxzZQorCQkJCXBzTE9DQUwtPnJlZ2lvbiA9IFJFR0lPTl9VU0E7CS8vZGVmYXVsdCBzZXR0aW5nCisJCX0KKworCQkvLyBHZXQgU29mdHdhcmUgc2V0dGluZyBmbGFnIGZyb20gaGFsCisJCUFkYXB0ZXItPnNMb2NhbFBhcmEuYm9BbnRlbm5hRGl2ZXJzaXR5ID0gRkFMU0U7CisJCWlmIChoYWxfc29mdHdhcmVfc2V0KHBId0RhdGEpICYgMHgwMDAwMDAwMSkKKwkJCUFkYXB0ZXItPnNMb2NhbFBhcmEuYm9BbnRlbm5hRGl2ZXJzaXR5ID0gVFJVRTsKKworCQkvLworCQkvLyBGb3IgVFMgbW9kdWxlCisJCS8vCisJCUluaXRTdGVwID0gMjsKKworCQkvLyBGb3IgTURTIG1vZHVsZQorCQlJbml0U3RlcCA9IDM7CisJCU1kc19pbml0aWFsKEFkYXB0ZXIpOworCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vIEluaXRpYWxpemUgdGhlIFNNRSwgU0NBTiwgTUxNRSwgUk9BTQorCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQlJbml0U3RlcCA9IDQ7CisJCUluaXRTdGVwID0gNTsKKwkJSW5pdFN0ZXAgPSA2OworCisJCS8vIElmIG5vIHVzZXItZGVmaW5lZCBhZGRyZXNzIGluIHRoZSByZWdpc3RyeSwgdXNlIHRoZSBhZGRyZXNzcyAiYnVybmVkIiBvbiB0aGUgTklDIGluc3RlYWQuCisJCXBNYWNBZGRyID0gQWRhcHRlci0+c0xvY2FsUGFyYS5UaGlzTWFjQWRkcmVzczsKKwkJcE1hY0FkZHIyID0gQWRhcHRlci0+c0xvY2FsUGFyYS5QZXJtYW5lbnRBZGRyZXNzOworCQloYWxfZ2V0X3Blcm1hbmVudF9hZGRyZXNzKCBwSHdEYXRhLCBBZGFwdGVyLT5zTG9jYWxQYXJhLlBlcm1hbmVudEFkZHJlc3MgKTsvLyBSZWFkaW5nIGV0aGVybmV0IGFkZHJlc3MgZnJvbSBFRVBST00KKwkJaWYgKE9TX01FTU9SWV9DT01QQVJFKHBNYWNBZGRyLCAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwgTUFDX0FERFJfTEVOR1RIICkpIC8vIElzIGVxdWFsCisJCXsKKwkJCW1lbWNweSggcE1hY0FkZHIsIHBNYWNBZGRyMiwgTUFDX0FERFJfTEVOR1RIICk7CisJCX0gZWxzZSB7CisJCQkvLyBTZXQgdGhlIHVzZXIgZGVmaW5lIE1BQyBhZGRyZXNzCisJCQloYWxfc2V0X2V0aGVybmV0X2FkZHJlc3MoIHBId0RhdGEsIEFkYXB0ZXItPnNMb2NhbFBhcmEuVGhpc01hY0FkZHJlc3MgKTsKKwkJfQorCisJCS8vZ2V0IGN1cnJlbnQgYW50ZW5uYQorCQlwc0xPQ0FMLT5iQW50ZW5uYU5vID0gaGFsX2dldF9hbnRlbm5hX251bWJlcihwSHdEYXRhKTsKKyNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KKwkJV0JERUJVRygoIkRyaXZlciBpbml0LCBhbnRlbm5hIG5vID0gJWRcbiIsIHBzTE9DQUwtPmJBbnRlbm5hTm8pKTsKKyNlbmRpZgorCQloYWxfZ2V0X2h3X3JhZGlvX29mZiggcEh3RGF0YSApOworCisJCS8vIFdhaXRpbmcgZm9yIEhBTCBzZXR0aW5nIE9LCisJCXdoaWxlICghaGFsX2lkbGUocEh3RGF0YSkpCisJCQlPU19TTEVFUCgxMDAwMCk7CisKKwkJTVRPX0luaXQoQWRhcHRlcik7CisKKwkJSHdSYWRpb09mZiA9IGhhbF9nZXRfaHdfcmFkaW9fb2ZmKCBwSHdEYXRhICk7CisJCXBzTE9DQUwtPlJhZGlvT2ZmU3RhdHVzLmJvSHdSYWRpb09mZiA9ICEhSHdSYWRpb09mZjsKKworCQloYWxfc2V0X3JhZGlvX21vZGUoIHBId0RhdGEsICh1bnNpZ25lZCBjaGFyKShwc0xPQ0FMLT5SYWRpb09mZlN0YXR1cy5ib1N3UmFkaW9PZmYgfHwgcHNMT0NBTC0+UmFkaW9PZmZTdGF0dXMuYm9Id1JhZGlvT2ZmKSApOworCisJCWhhbF9kcml2ZXJfaW5pdF9PSyhwSHdEYXRhKSA9IDE7IC8vIE5vdGlmeSBoYWwgdGhhdCB0aGUgZHJpdmVyIGlzIHJlYWR5IG5vdy4KKwkJLy9zZXQgYSB0eCBwb3dlciBmb3IgcmVmZXJlbmNlLi4uLi4KKy8vCQlzbWVfc2V0X3R4X3Bvd2VyX2xldmVsKEFkYXB0ZXIsIDEyKTsJRklYTUU/CisJCXJldHVybiBUUlVFOworCX0KKwl3aGlsZShGQUxTRSk7CisKKwlzd2l0Y2ggKEluaXRTdGVwKSB7CisJY2FzZSA1OgorCWNhc2UgNDoKKwljYXNlIDM6IE1kc19EZXN0cm95KCBBZGFwdGVyICk7CisJY2FzZSAyOgorCWNhc2UgMTogV0JMSU5VWF9EZXN0cm95KCBBZGFwdGVyICk7CisJCWhhbF9oYWx0KCBwSHdEYXRhLCBOVUxMICk7CisJY2FzZSAwOiBicmVhazsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgV0JMSU5VWF9Db25uZWN0U3RhdHVzKFBBREFQVEVSIEFkYXB0ZXIsIHUzMiBmbGFnKQoreworCVBXQkxJTlVYCXBXYkxpbnV4ID0gJkFkYXB0ZXItPldiTGludXg7CisKKwlwV2JMaW51eC0+TGlua1N0YXR1cyA9IGZsYWc7IC8vIE9TX0RJU0NPTk5FQ1RFRAlvciAgT1NfQ09OTkVDVEVECit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXhfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JsaW51eF9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyNDBjNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXhfZi5oCkBAIC0wLDAgKzEsMjMgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29weXJpZ2h0IChjKSAxOTk2LTIwMDQgV2luYm9uZCBFbGVjdHJvbmljIENvcnBvcmF0aW9uCisvLworLy8gd2JsaW51eF9mLmgKKy8vCit1MzIgV0JMSU5VWF9NZW1vcnlBbGxvYyggIHZvaWQqICpWaXJ0dWFsQWRkcmVzcywgIHUzMiBMZW5ndGggKTsKK3MzMiBFbmNhcEF0b21pY0luYyggIFBBREFQVEVSIEFkYXB0ZXIsICB2b2lkKiBwQXRvbWljICk7CitzMzIgRW5jYXBBdG9taWNEZWMoICBQQURBUFRFUiBBZGFwdGVyLCAgdm9pZCogcEF0b21pYyApOwordm9pZCBXQkxpbnV4X1JlY2VpdmVQYWNrZXQoICBQQURBUFRFUiBBZGFwdGVyLCAgUFJYTEFZRVIxIHBSeExheWVyMSApOwordW5zaWduZWQgY2hhciBXQkxJTlVYX0luaXRpYWwoICBQQURBUFRFUiBBZGFwdGVyICk7CitpbnQgd2IzNV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgKTsKK3ZvaWQgV0JMSU5VWF9HZXROZXh0UGFja2V0KCAgUEFEQVBURVIgQWRhcHRlciwgIFBERVNDUklQVE9SIHBEZXMgKTsKK3ZvaWQgV0JMSU5VWF9HZXROZXh0UGFja2V0Q29tcGxldGVkKCAgUEFEQVBURVIgQWRhcHRlciwgIFBERVNDUklQVE9SIHBEZXMgKTsKK3ZvaWQgV0JMSU5VWF9zdG9wKCAgUEFEQVBURVIgQWRhcHRlciApOwordm9pZCBXQkxJTlVYX0Rlc3Ryb3koICBQQURBUFRFUiBBZGFwdGVyICk7Cit2b2lkIHdiMzVfc2V0X211bHRpY2FzdCggc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiApOworc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiB3YjM1X25ldGRldl9zdGF0cyggc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiApOwordm9pZCBXQkxJTlVYX3N0b3AoICBQQURBUFRFUiBBZGFwdGVyICk7Cit2b2lkIFdiV2xhbkhhbHQoICBQQURBUFRFUiBBZGFwdGVyICk7Cit2b2lkIFdCTElOVVhfQ29ubmVjdFN0YXR1cyggIFBBREFQVEVSIEFkYXB0ZXIsICB1MzIgZmxhZyApOworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JsaW51eF9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmxpbnV4X3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2U5MTY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JsaW51eF9zLmgKQEAgLTAsMCArMSw0NSBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIHdibGludXhfcy5oCisvLworI2RlZmluZSBPU19NRU1PUllfQUxMT0MoIF9WLCBfUyApCVdCTElOVVhfTWVtb3J5QWxsb2MoIF9WLCBfUyApCisjZGVmaW5lIE9TX0xJTktfU1RBVFVTCQkJKEFkYXB0ZXItPldiTGludXguTGlua1N0YXR1cyA9PSBPU19DT05ORUNURUQpCisjZGVmaW5lIE9TX1NFVF9TSFVURE9XTiggX0EgKQkJX0EtPldiTGludXguc2h1dGRvd249MQorI2RlZmluZSBPU19TRVRfUkVTVU1FKCBfQSApCQlfQS0+V2JMaW51eC5zaHV0ZG93bj0wCisjZGVmaW5lIE9TX0NPTk5FQ1RfU1RBVFVTX0lORElDQVRFKCBfQSwgX0YgKQkJV0JMSU5VWF9Db25uZWN0U3RhdHVzKCBfQSwgX0YgKQorI2RlZmluZSBPU19ESVNDT05ORUNURUQJMAorI2RlZmluZSBPU19DT05ORUNURUQJMQorI2RlZmluZSBPU19TVE9QKCBfQSApCVdCTElOVVhfc3RvcCggX0EgKQorCisjZGVmaW5lIE9TX0NVUlJFTlRfUlhfQllURSggX0EgKQkJX0EtPldiTGludXguUnhCeXRlQ291bnQKKyNkZWZpbmUgT1NfQ1VSUkVOVF9UWF9CWVRFKCBfQSApCQlfQS0+V2JMaW51eC5UeEJ5dGVDb3VudAorI2RlZmluZSBPU19FVkVOVF9JTkRJQ0FURSggX0EsIF9CLCBfRiApCisjZGVmaW5lIE9TX1BNS0lEX1NUQVRVU19FVkVOVCggX0EgKQorI2RlZmluZSBPU19SRUNFSVZFX1BBQ0tFVF9JTkRJQ0FURSggX0EsIF9EICkJCVdCTGludXhfUmVjZWl2ZVBhY2tldCggX0EsIF9EICkKKyNkZWZpbmUgT1NfUkVDRUlWRV84MDJfMVhfUEFDS0VUX0lORElDQVRFKCBfQSwgX0QgKQlFQVBfUmVjZWl2ZVBhY2tldCggX0EsIF9EICkKKyNkZWZpbmUgT1NfR0VUX1BBQ0tFVCggX0EsIF9EICkJCQkJV0JMSU5VWF9HZXROZXh0UGFja2V0KCBfQSwgX0QgKQorI2RlZmluZSBPU19HRVRfUEFDS0VUX0NPTVBMRVRFKCBfQSwgX0QgKQlXQkxJTlVYX0dldE5leHRQYWNrZXRDb21wbGV0ZWQoIF9BLCBfRCApCisjZGVmaW5lIE9TX1NFTkRfUkVTVUxUKCBfQSwgX0lELCBfUiApCisKKyNkZWZpbmUgV0JMSU5VWF9QQUNLRVRfQVJSQVlfU0laRQkoRVRIRVJORVRfVFhfREVTQ1JJUFRPUlMqNCkKKwordHlwZWRlZiBzdHJ1Y3QgX1dCTElOVVgKK3sKKwlPU19TUElOX0xPQ0sJQXRvbWljU3BpbkxvY2s7CisJT1NfU1BJTl9MT0NLCVNwaW5Mb2NrOworCXUzMglzaHV0ZG93bjsKKworCU9TX0FUT01JQwlUaHJlYWRDb3VudDsKKworCXUzMglMaW5rU3RhdHVzOwkJLy8gT1NfRElTQ09OTkVDVEVEIG9yIE9TX0NPTk5FQ1RFRAorCisJdTMyCVJ4Qnl0ZUNvdW50OworCXUzMglUeEJ5dGVDb3VudDsKKworCXN0cnVjdCBza19idWZmICpza2JfYXJyYXlbIFdCTElOVVhfUEFDS0VUX0FSUkFZX1NJWkUgXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcGFja2V0X3JldHVybjsKKwlzMzIJc2tiX1NldEluZGV4OworCXMzMglza2JfR2V0SW5kZXg7CisJczMyCW5ldGlmX3N0YXRlX3N0b3A7IC8vIDE6IHN0b3AgIDA6IG5vcm1hbAorfSBXQkxJTlVYLCAqUFdCTElOVVg7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiMWYwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorY29uZmlnIFBSSVNNMl9VU0IKKwl0cmlzdGF0ZSAiUHJpc20yLjUgVVNCIGRyaXZlciIKKwlkZXBlbmRzIG9uIFVTQgorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgdGhlIHdsYW4tbmcgcHJpc20gMi41IFVTQiBkcml2ZXIgZm9yIGEgd2lkZSByYW5nZSBvZgorCSAgb2xkIFVTQiB3aXJlbGVzcyBkZXZpY2VzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBwcmlzbTJfdXNiLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzdiNTExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACitvYmotJChDT05GSUdfUFJJU00yX1VTQikgKz0gcHJpc20yX3VzYi5vCitvYmotJChDT05GSUdfUFJJU00yX1VTQikgKz0gcDgwMjExLm8KKworcDgwMjExLW9ianMgOj0gcDgwMjExbW9kLm8gXAorCQlwODAyMTFjb252Lm8gXAorCQlwODAyMTFyZXEubyBcCisJCXA4MDIxMXdlcC5vIFwKKwkJcDgwMjExd2V4dC5vIFwKKwkJcDgwMjExbmV0ZGV2Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTBlNGViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvUkVBRE1FCkBAIC0wLDAgKzEsOCBAQAorVE9ETzoKKwktIGNoZWNrcGF0Y2gucGwgY2xlYW51cHMKKwktIHNwYXJzZSB3YXJuaW5ncworCS0gTGluZGVudCBjbGVhbnVwcworCS0gbW92ZSB0byB1c2UgdGhlIGluLWtlcm5lbCB3aXJlbGVzcyBzdGFjaworCS0gcG9zc2libGUgZW5hYmxlIHRoZSBwY21jaWEgYW5kIHBjaSBwb3J0aW9ucyBvZiB0aGUgZHJpdmVyCisKK1BsZWFzZSBzZW5kIGFsbCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkZjNmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguYwpAQCAtMCwwICsxLDQwMTggQEAKKy8qIHNyYy9wcmlzbTIvZHJpdmVyL2hmYTM4NHguYworKgorKiBJbXBsZW1lbnRzIHRoZSBmdW5jdGlvbnMgb2YgdGhlIEludGVyc2lsIGhmYTM4NHggTUFDCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGZ1bmN0aW9ucyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIHByaXNtMi9oZmEzODR4CisqIDgwMi4xMSBNQUMgaGFyZHdhcmUgYW5kIGZpcm13YXJlIGhvc3QgaW50ZXJmYWNlLgorKgorKiBUaGUgZnVuY3Rpb25zIGNhbiBiZSBjb25zaWRlcmVkIHRvIHJlcHJlc2VudCBzZXZlcmFsIGxldmVscyBvZgorKiBhYnN0cmFjdGlvbi4gIFRoZSBsb3dlc3QgbGV2ZWwgZnVuY3Rpb25zIGFyZSBzaW1wbHkgQy1jYWxsYWJsZSB3cmFwcGVycworKiBhcm91bmQgdGhlIHJlZ2lzdGVyIGFjY2Vzc2VzLiAgVGhlIG5leHQgaGlnaGVyIGxldmVsIHJlcHJlc2VudHMgQy1jYWxsYWJsZQorKiBwcmlzbTIgQVBJIGZ1bmN0aW9ucyB0aGF0IG1hdGNoIHRoZSBJbnRlcnNpbCBkb2N1bWVudGF0aW9uIGFzIGNsb3NlbHkKKyogYXMgaXMgcmVhc29uYWJsZS4gIFRoZSBuZXh0IGhpZ2hlciBsYXllciBpbXBsZW1lbnRzIGNvbW1vbiBzZXF1ZW5jZXMKKyogb2YgaW52b2thdGlvbnMgb2YgdGhlIEFQSSBsYXllciAoZS5nLiB3cml0ZSB0byBiYXAsIGZvbGxvd2VkIGJ5IGNtZCkuCisqCisqIENvbW1vbiBzZXF1ZW5jZXM6CisqIGhmYTM4NHhfZHJ2cl94eHgJSGlnaGVzdCBsZXZlbCBhYnN0cmFjdGlvbnMgcHJvdmlkZWQgYnkgdGhlCisqCQkJaGZhMzg0eCBjb2RlLiAgVGhleSBhcmUgZHJpdmVyIGRlZmluZWQgd3JhcHBlcnMKKyoJCQlmb3IgY29tbW9uIHNlcXVlbmNlcy4gIFRoZXNlIGZ1bmN0aW9ucyBnZW5lcmFsbHkKKyoJCQl1c2UgdGhlIHNlcnZpY2VzIG9mIHRoZSBsb3dlciBsZXZlbHMuCisqCisqIGhmYTM4NHhfZHJ2cl94eHhjb25maWcgIEFuIGV4YW1wbGUgb2YgdGhlIGRydnIgbGV2ZWwgYWJzdHJhY3Rpb24uIFRoZXNlCisqCQkJZnVuY3Rpb25zIGFyZSB3cmFwcGVycyBmb3IgdGhlIFJJRCBnZXQvc2V0CisqCQkJc2VxdWVuY2UuIFRoZXkgCWNhbGwgY29weV9bdG98ZnJvbV1fYmFwKCkgYW5kCisqCQkJY21kX2FjY2VzcygpLglUaGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSBvbiB0aGUKKyoJCQlSSURzIGFuZCBidWZmZXJzIHdpdGhvdXQgdmFsaWRhdGlvbi4gIFRoZSBjYWxsZXIKKyoJCQlpcyByZXNwb25zaWJsZSBmb3IgdGhhdC4KKyoKKyogQVBJIHdyYXBwZXIgZnVuY3Rpb25zOgorKiBoZmEzODR4X2NtZF94eHgJZnVuY3Rpb25zIHRoYXQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGYvdyBjb21tYW5kcy4KKyoJCQlUaGUgZnVuY3Rpb24gYXJndW1lbnRzIGNvcnJlc3BvbmQgdG8gZWFjaCBjb21tYW5kCisqCQkJYXJndW1lbnQsIGV2ZW4gY29tbWFuZCBhcmd1bWVudHMgdGhhdCBnZXQgcGFja2VkCisqCQkJaW50byBzaW5nbGUgcmVnaXN0ZXJzLiAgVGhlc2UgZnVuY3Rpb25zIF9qdXN0XworKgkJCWlzc3VlIHRoZSBjb21tYW5kIGJ5IHNldHRpbmcgdGhlIGNtZC9wYXJtIHJlZ3MKKyoJCQkmIHJlYWRpbmcgdGhlIHN0YXR1cy9yZXNwIHJlZ3MuICBBZGRpdGlvbmFsCisqCQkJYWN0aXZpdGllcyByZXF1aXJlZCB0byBmdWxseSB1c2UgYSBjb21tYW5kCisqCQkJKHJlYWQvd3JpdGUgZnJvbS90byBiYXAsIGdldC9zZXQgaW50IHN0YXR1cyBldGMuKQorKgkJCWFyZSBpbXBsZW1lbnRlZCBzZXBhcmF0ZWx5LiAgVGhpbmsgb2YgdGhlc2UgYXMKKyoJCQlDLWNhbGxhYmxlIHByaXNtMiBjb21tYW5kcy4KKyoKKyogTG93ZXN0IExheWVyIEZ1bmN0aW9uczoKKyogaGZhMzg0eF9kb2NtZF94eHgJVGhlc2UgZnVuY3Rpb25zIGltcGxlbWVudCB0aGUgc2VxdWVuY2UgcmVxdWlyZWQKKyoJCQl0byBpc3N1ZSBhbnkgcHJpc20yIGNvbW1hbmQuICBQcmltYXJpbHkgdXNlZCBieSB0aGUKKyoJCQloZmEzODR4X2NtZF94eHggZnVuY3Rpb25zLgorKgorKiBoZmEzODR4X2JhcF94eHgJQkFQIHJlYWQvd3JpdGUgYWNjZXNzIGZ1bmN0aW9ucy4KKyoJCQlOb3RlOiB3ZSB1c3VhbGx5IHVzZSBCQVAwIGZvciBub24taW50ZXJydXB0IGNvbnRleHQKKyoJCQkgYW5kIEJBUDEgZm9yIGludGVycnVwdCBjb250ZXh0LgorKgorKiBoZmEzODR4X2RsX3h4eAlkb3dubG9hZCByZWxhdGVkIGZ1bmN0aW9ucy4KKyoKKyogRHJpdmVyIFN0YXRlIElzc3VlczoKKyogTm90ZSB0aGF0IHRoZXJlIGFyZSB0d28gcGFpcnMgb2YgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIHRoZQorKiAnaW5pdGlhbGl6ZWQnIGFuZCAncnVubmluZycgc3RhdGVzIG9mIHRoZSBody9NQUMgY29tYm8uICBUaGUgZm91cgorKiBmdW5jdGlvbnMgYXJlIGNyZWF0ZSgpLCBkZXN0cm95KCksIHN0YXJ0KCksIGFuZCBzdG9wKCkuICBjcmVhdGUoKQorKiBzZXRzIHVwIHRoZSBkYXRhIHN0cnVjdHVyZXMgcmVxdWlyZWQgdG8gc3VwcG9ydCB0aGUgaGZhMzg0eF8qCisqIGZ1bmN0aW9ucyBhbmQgZGVzdHJveSgpIGNsZWFucyB0aGVtIHVwLiAgVGhlIHN0YXJ0KCkgZnVuY3Rpb24gZ2V0cworKiB0aGUgYWN0dWFsIGhhcmR3YXJlIHJ1bm5pbmcgYW5kIGVuYWJsZXMgdGhlIGludGVycnVwdHMuICBUaGUgc3RvcCgpCisqIGZ1bmN0aW9uIHNodXRzIHRoZSBoYXJkd2FyZSBkb3duLiAgVGhlIHNlcXVlbmNlIHNob3VsZCBiZToKKyogY3JlYXRlKCkKKyogIC4KKyogIC4gIFNlbGYgY29udGFpbmVkIHRlc3Qgcm91dGluZXMgY2FuIHJ1biBoZXJlLCBwYXJ0aWN1bGFybHkKKyogIC4gIGNvcmVyZXNldCgpIGFuZCB0ZXN0X2hvc3RpZigpLgorKiAgLgorKiBzdGFydCgpCisqICAuCisqICAuICBEbyBpbnRlcmVzdGluZyB0aGluZ3Mgdy8gdGhlIGhhcmR3YXJlCisqICAuCisqIHN0b3AoKQorKiBkZXN0cm95KCkKKyoKKyogTm90ZSB0aGF0IGRlc3Ryb3koKSBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgY2FsbGluZyBzdG9wKCkgZmlyc3QuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKyNkZWZpbmUgV0xBTl9EQlZBUglwcmlzbTJfZGVidWcKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorI2luY2x1ZGUgPGxpbnV4L3RxdWV1ZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNlbmRpZgorCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKQorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTMpICkKKyNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgorI2VuZGlmCisjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgorI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KKyNlbmRpZgorCisjaWYgKChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCkgfHwgKFdMQU5fSE9TVElGID09IFdMQU5fUENJKSkKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworLy8gWFhYWCAjZGVmaW5lIENNRF9JUlEKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCisjaW5jbHVkZSAicDgwMjExaGRyLmgiCisjaW5jbHVkZSAicDgwMjExbWdtdC5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFtc2cuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKyNpbmNsdWRlICJwODAyMTFyZXEuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhZGVmLmgiCisjaW5jbHVkZSAicDgwMjExbWV0YXN0cnVjdC5oIgorI2luY2x1ZGUgImhmYTM4NHguaCIKKyNpbmNsdWRlICJwcmlzbTJtZ210LmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBDb25zdGFudHMgKi8KKworc3RhdGljIGNvbnN0IFVJTlQxNiBjcmMxNnRhYlsyNTZdID0KK3sKKwkweDAwMDAsIDB4YzBjMSwgMHhjMTgxLCAweDAxNDAsIDB4YzMwMSwgMHgwM2MwLCAweDAyODAsIDB4YzI0MSwKKwkweGM2MDEsIDB4MDZjMCwgMHgwNzgwLCAweGM3NDEsIDB4MDUwMCwgMHhjNWMxLCAweGM0ODEsIDB4MDQ0MCwKKwkweGNjMDEsIDB4MGNjMCwgMHgwZDgwLCAweGNkNDEsIDB4MGYwMCwgMHhjZmMxLCAweGNlODEsIDB4MGU0MCwKKwkweDBhMDAsIDB4Y2FjMSwgMHhjYjgxLCAweDBiNDAsIDB4YzkwMSwgMHgwOWMwLCAweDA4ODAsIDB4Yzg0MSwKKwkweGQ4MDEsIDB4MThjMCwgMHgxOTgwLCAweGQ5NDEsIDB4MWIwMCwgMHhkYmMxLCAweGRhODEsIDB4MWE0MCwKKwkweDFlMDAsIDB4ZGVjMSwgMHhkZjgxLCAweDFmNDAsIDB4ZGQwMSwgMHgxZGMwLCAweDFjODAsIDB4ZGM0MSwKKwkweDE0MDAsIDB4ZDRjMSwgMHhkNTgxLCAweDE1NDAsIDB4ZDcwMSwgMHgxN2MwLCAweDE2ODAsIDB4ZDY0MSwKKwkweGQyMDEsIDB4MTJjMCwgMHgxMzgwLCAweGQzNDEsIDB4MTEwMCwgMHhkMWMxLCAweGQwODEsIDB4MTA0MCwKKwkweGYwMDEsIDB4MzBjMCwgMHgzMTgwLCAweGYxNDEsIDB4MzMwMCwgMHhmM2MxLCAweGYyODEsIDB4MzI0MCwKKwkweDM2MDAsIDB4ZjZjMSwgMHhmNzgxLCAweDM3NDAsIDB4ZjUwMSwgMHgzNWMwLCAweDM0ODAsIDB4ZjQ0MSwKKwkweDNjMDAsIDB4ZmNjMSwgMHhmZDgxLCAweDNkNDAsIDB4ZmYwMSwgMHgzZmMwLCAweDNlODAsIDB4ZmU0MSwKKwkweGZhMDEsIDB4M2FjMCwgMHgzYjgwLCAweGZiNDEsIDB4MzkwMCwgMHhmOWMxLCAweGY4ODEsIDB4Mzg0MCwKKwkweDI4MDAsIDB4ZThjMSwgMHhlOTgxLCAweDI5NDAsIDB4ZWIwMSwgMHgyYmMwLCAweDJhODAsIDB4ZWE0MSwKKwkweGVlMDEsIDB4MmVjMCwgMHgyZjgwLCAweGVmNDEsIDB4MmQwMCwgMHhlZGMxLCAweGVjODEsIDB4MmM0MCwKKwkweGU0MDEsIDB4MjRjMCwgMHgyNTgwLCAweGU1NDEsIDB4MjcwMCwgMHhlN2MxLCAweGU2ODEsIDB4MjY0MCwKKwkweDIyMDAsIDB4ZTJjMSwgMHhlMzgxLCAweDIzNDAsIDB4ZTEwMSwgMHgyMWMwLCAweDIwODAsIDB4ZTA0MSwKKwkweGEwMDEsIDB4NjBjMCwgMHg2MTgwLCAweGExNDEsIDB4NjMwMCwgMHhhM2MxLCAweGEyODEsIDB4NjI0MCwKKwkweDY2MDAsIDB4YTZjMSwgMHhhNzgxLCAweDY3NDAsIDB4YTUwMSwgMHg2NWMwLCAweDY0ODAsIDB4YTQ0MSwKKwkweDZjMDAsIDB4YWNjMSwgMHhhZDgxLCAweDZkNDAsIDB4YWYwMSwgMHg2ZmMwLCAweDZlODAsIDB4YWU0MSwKKwkweGFhMDEsIDB4NmFjMCwgMHg2YjgwLCAweGFiNDEsIDB4NjkwMCwgMHhhOWMxLCAweGE4ODEsIDB4Njg0MCwKKwkweDc4MDAsIDB4YjhjMSwgMHhiOTgxLCAweDc5NDAsIDB4YmIwMSwgMHg3YmMwLCAweDdhODAsIDB4YmE0MSwKKwkweGJlMDEsIDB4N2VjMCwgMHg3ZjgwLCAweGJmNDEsIDB4N2QwMCwgMHhiZGMxLCAweGJjODEsIDB4N2M0MCwKKwkweGI0MDEsIDB4NzRjMCwgMHg3NTgwLCAweGI1NDEsIDB4NzcwMCwgMHhiN2MxLCAweGI2ODEsIDB4NzY0MCwKKwkweDcyMDAsIDB4YjJjMSwgMHhiMzgxLCAweDczNDAsIDB4YjEwMSwgMHg3MWMwLCAweDcwODAsIDB4YjA0MSwKKwkweDUwMDAsIDB4OTBjMSwgMHg5MTgxLCAweDUxNDAsIDB4OTMwMSwgMHg1M2MwLCAweDUyODAsIDB4OTI0MSwKKwkweDk2MDEsIDB4NTZjMCwgMHg1NzgwLCAweDk3NDEsIDB4NTUwMCwgMHg5NWMxLCAweDk0ODEsIDB4NTQ0MCwKKwkweDljMDEsIDB4NWNjMCwgMHg1ZDgwLCAweDlkNDEsIDB4NWYwMCwgMHg5ZmMxLCAweDllODEsIDB4NWU0MCwKKwkweDVhMDAsIDB4OWFjMSwgMHg5YjgxLCAweDViNDAsIDB4OTkwMSwgMHg1OWMwLCAweDU4ODAsIDB4OTg0MSwKKwkweDg4MDEsIDB4NDhjMCwgMHg0OTgwLCAweDg5NDEsIDB4NGIwMCwgMHg4YmMxLCAweDhhODEsIDB4NGE0MCwKKwkweDRlMDAsIDB4OGVjMSwgMHg4ZjgxLCAweDRmNDAsIDB4OGQwMSwgMHg0ZGMwLCAweDRjODAsIDB4OGM0MSwKKwkweDQ0MDAsIDB4ODRjMSwgMHg4NTgxLCAweDQ1NDAsIDB4ODcwMSwgMHg0N2MwLCAweDQ2ODAsIDB4ODY0MSwKKwkweDgyMDEsIDB4NDJjMCwgMHg0MzgwLCAweDgzNDEsIDB4NDEwMCwgMHg4MWMxLCAweDgwODEsIDB4NDA0MAorfTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIE1hY3JvcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworZXh0ZXJuIGludCBwcmlzbTJfZGVidWc7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworc3RhdGljIHZvaWQJaGZhMzg0eF9pbnRfZHRpbSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIHZvaWQJaGZhMzg0eF9pbnRfaW5mZHJvcCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworCitzdGF0aWMgdm9pZCAgICAgaGZhMzg0eF9iYXBfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOworCitzdGF0aWMgdm9pZAloZmEzODR4X2ludF9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgdm9pZAloZmEzODR4X2ludF90eGV4Yyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIHZvaWQJaGZhMzg0eF9pbnRfdHgod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyB2b2lkCWhmYTM4NHhfaW50X3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CisKKyNpZmRlZiBDTURfSVJRCitzdGF0aWMgdm9pZAloZmEzODR4X2ludF9jbWQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKKyNlbmRpZgorc3RhdGljIHZvaWQJaGZhMzg0eF9pbnRfcnhtb25pdG9yKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQlVSU5UMTYgcnhmaWQsIGhmYTM4NHhfcnhfZnJhbWVfdCAqcnhkZXNjKTsKK3N0YXRpYyB2b2lkCWhmYTM4NHhfaW50X2FsbG9jKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CisKK3N0YXRpYyBpbnQgaGZhMzg0eF9kb2NtZF93YWl0KCBoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKTsKKworc3RhdGljIGludCBoZmEzODR4X2RsX2RvY21kX3dhaXQoIGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQpOworCitzdGF0aWMgVUlOVDE2CitoZmEzODR4X21rY3JjMTYoVUlOVDggKnAsIGludCBsZW4pOworCitpbnQgaGZhMzg0eF9jb3B5X3RvX2JhcDQoaGZhMzg0eF90ICpodywgVUlOVDE2IGJhcCwgVUlOVDE2IGlkLCBVSU5UMTYgb2Zmc2V0LAorCQkJIHZvaWQgKmJ1ZiwgVUlOVCBsZW4sIHZvaWQqIGJ1ZjIsIFVJTlQgbGVuMiwKKwkJCSB2b2lkICpidWYzLCBVSU5UIGxlbjMsIHZvaWQqIGJ1ZjQsIFVJTlQgbGVuNCk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCitzdGF0aWMgVUlOVDE2Cit0eGZpZF9xdWV1ZV9lbXB0eShoZmEzODR4X3QgKmh3KQoreworCXJldHVybiAoaHctPnR4ZmlkX2hlYWQgPT0gaHctPnR4ZmlkX3RhaWwpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBVSU5UMTYKK3R4ZmlkX3F1ZXVlX3JlbW92ZShoZmEzODR4X3QgKmh3KQoreworCVVJTlQxNiByZXN1bHQ9IDA7CisKKwlpZiAodHhmaWRfcXVldWVfZW1wdHkoaHcpKSB7CisJCVdMQU5fTE9HX0RFQlVHKDMsInF1ZXVlIGVtcHR5LlxuIik7CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gaHctPnR4ZmlkX3F1ZXVlW2h3LT50eGZpZF9oZWFkXTsKKwkJaHctPnR4ZmlkX2hlYWQgPSAoaHctPnR4ZmlkX2hlYWQgKyAxKSAlIGh3LT50eGZpZF9OOworCX0KKworCXJldHVybiAoVUlOVDE2KXJlc3VsdDsKK30KKworc3RhdGljIElOVDE2Cit0eGZpZF9xdWV1ZV9hZGQoaGZhMzg0eF90ICpodywgVUlOVDE2IHZhbCkKK3sKKwlJTlQxNiByZXN1bHQgPSAwOworCisJaWYgKGh3LT50eGZpZF9oZWFkID09ICgoaHctPnR4ZmlkX3RhaWwgKyAxKSAlIGh3LT50eGZpZF9OKSkgeworCQlyZXN1bHQgPSAtMTsKKwkJV0xBTl9MT0dfREVCVUcoMywicXVldWUgZnVsbC5cbiIpOworCX0gZWxzZSB7CisJCWh3LT50eGZpZF9xdWV1ZVtody0+dHhmaWRfdGFpbF0gPSB2YWw7CisJCXJlc3VsdCA9IGh3LT50eGZpZF90YWlsOworCQlody0+dHhmaWRfdGFpbCA9IChody0+dHhmaWRfdGFpbCArIDEpICUgaHctPnR4ZmlkX047CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY3JlYXRlCisqCisqIEluaXRpYWxpemVzIHRoZSBoZmEzODR4X3QgZGF0YSBzdHJ1Y3R1cmUgZm9yIHVzZS4gIE5vdGUgdGhpcworKiBkb2VzIF9ub3RfIGludGlhbGl6ZSB0aGUgYWN0dWFsIGhhcmR3YXJlLCBqdXN0IHRoZSBkYXRhIHN0cnVjdHVyZXMKKyogd2UgdXNlIHRvIGtlZXAgdHJhY2sgb2YgaXRzIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWlycQkJZGV2aWNlIGlycSBudW1iZXIKKyoJaW9iYXNlCQlbcGNtY2lhXSBpL28gYmFzZSBhZGRyZXNzIGZvciByZWdpc3RlciBhY2Nlc3MKKyoJCQlbcGNpXSB6ZXJvCisqCQkJW3BseF0gaS9vIGJhc2UgYWRkcmVzcyBmb3IgcmVnaXN0ZXIgYWNjZXNzCisqCW1lbWJhc2UJCVtwY21jaWFdIHBjbWNpYV9jcyAibGluayIgcG9pbnRlcgorKgkJCVtwY2ldIG1lbW9yeSBiYXNlIGFkZHJlc3MgZm9yIHJlZ2lzdGVyIGFjY2VzcworKgkJCVtwbHhdIG1lbW9yeSBiYXNlIGFkZHJlc3MgZm9yIGNhcmQgYXR0cmlidXRlIG1lbW9yeQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIGhmYTM4NHhfY3JlYXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQgaXJxLCBVSU5UMzIgaW9iYXNlLAorCQkgICAgVUlOVDggX19pb21lbSAqbWVtYmFzZSkKK3sKKwlEQkZFTlRFUjsKKwltZW1zZXQoaHcsIDAsIHNpemVvZihoZmEzODR4X3QpKTsKKwlody0+aXJxID0gaXJxOworCWh3LT5pb2Jhc2UgPSBpb2Jhc2U7CisJaHctPm1lbWJhc2UgPSBtZW1iYXNlOworCXNwaW5fbG9ja19pbml0KCYoaHctPmNtZGxvY2spKTsKKworCS8qIEJBUCBzZXR1cCAqLworIAlzcGluX2xvY2tfaW5pdCgmKGh3LT5iYXBsb2NrKSk7CisJdGFza2xldF9pbml0KCZody0+YmFwX3Rhc2tsZXQsCisJCSAgICAgaGZhMzg0eF9iYXBfdGFza2xldCwKKwkJICAgICAodW5zaWduZWQgbG9uZykgaHcpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaHctPmNtZHEpOworCXNlbWFfaW5pdCgmaHctPmluZm9maWRfc2VtLCAxKTsKKworICAgICAgICBody0+dHhmaWRfaGVhZCA9IDA7CisgICAgICAgIGh3LT50eGZpZF90YWlsID0gMDsKKyAgICAgICAgaHctPnR4ZmlkX04gPSBIRkEzODR4X0RSVlJfRklEU1RBQ0tMRU5fTUFYOworICAgICAgICBtZW1zZXQoaHctPnR4ZmlkX3F1ZXVlLCAwLCBzaXplb2YoaHctPnR4ZmlkX3F1ZXVlKSk7CisKKwlody0+aXNyYW0xNiA9IDE7CisKKwkvKiBJbml0IHRoZSBhdXRoIHF1ZXVlIGhlYWQgKi8KKwlza2JfcXVldWVfaGVhZF9pbml0KCZody0+YXV0aHEpOworCisJSU5JVF9XT1JLMigmaHctPmxpbmtfYmgsIHByaXNtMnN0YV9wcm9jZXNzaW5nX2RlZmVyKTsKKworICAgICAgICBJTklUX1dPUksyKCZody0+Y29tbXNxdWFsX2JoLCBwcmlzbTJzdGFfY29tbXNxdWFsX2RlZmVyKTsKKworCWluaXRfdGltZXIoJmh3LT5jb21tc3F1YWxfdGltZXIpOworCWh3LT5jb21tc3F1YWxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBodzsKKwlody0+Y29tbXNxdWFsX3RpbWVyLmZ1bmN0aW9uID0gcHJpc20yc3RhX2NvbW1zcXVhbF90aW1lcjsKKworCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQ7CisJaHctPnN0YXRlID0gSEZBMzg0eF9TVEFURV9JTklUOworCisJREJGRVhJVDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZGVzdHJveQorKgorKiBQYXJ0bmVyIHRvIGhmYTM4NHhfY3JlYXRlKCkuICBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgaHcKKyogc3RydWN0dXJlIHNvIHRoYXQgaXQgY2FuIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIgdXNpbmcgYSBzaW1wbGUKKyoga2ZyZWUuICBDdXJyZW50bHksIHRoaXMgZnVuY3Rpb24gaXMganVzdCBhIHBsYWNlaG9sZGVyLiAgSWYsIGF0IHNvbWUKKyogcG9pbnQgaW4gdGhlIGZ1dHVyZSwgYW4gaHcgaW4gdGhlICdzaHV0ZG93bicgc3RhdGUgcmVxdWlyZXMgYSAnZGVlcCcKKyoga2ZyZWUsIHRoaXMgaXMgd2hlcmUgaXQgc2hvdWxkIGJlIGRvbmUuICBOb3RlIHRoYXQgaWYgdGhpcyBmdW5jdGlvbgorKiBpcyBjYWxsZWQgb24gYSBfcnVubmluZ18gaHcgc3RydWN0dXJlLCB0aGUgZHJ2cl9zdG9wKCkgZnVuY3Rpb24gaXMKKyogY2FsbGVkLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcsIHRoaXMgZnVuY3Rpb24gaXMgbm90IGFsbG93ZWQgdG8gZmFpbC4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAoraGZhMzg0eF9kZXN0cm95KCBoZmEzODR4X3QgKmh3KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlEQkZFTlRFUjsKKworCWlmICggaHctPnN0YXRlID09IEhGQTM4NHhfU1RBVEVfUlVOTklORyApIHsKKwkJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOworCX0KKwlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX1BSRUlOSVQ7CisKKwlpZiAoaHctPnNjYW5yZXN1bHRzKSB7CisJCWtmcmVlKGh3LT5zY2FucmVzdWx0cyk7CisJCWh3LT5zY2FucmVzdWx0cyA9IE5VTEw7CisJfQorCisgICAgICAgIC8qIE5vdyB0byBjbGVhbiBvdXQgdGhlIGF1dGggcXVldWUgKi8KKyAgICAgICAgd2hpbGUgKCAoc2tiID0gc2tiX2RlcXVldWUoJmh3LT5hdXRocSkpICkgeworICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2Ioc2tiKTsKKyAgICAgICAgfQorCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZ2V0Y29uZmlnCisqCisqIFBlcmZvcm1zIHRoZSBzZXF1ZW5jZSBuZWNlc3NhcnkgdG8gcmVhZCBhIGNvbmZpZy9pbmZvIGl0ZW0uCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJcmlkCQljb25maWcvaW5mbyByZWNvcmQgaWQgKGhvc3Qgb3JkZXIpCisqCWJ1ZgkJaG9zdCBzaWRlIHJlY29yZCBidWZmZXIuICBVcG9uIHJldHVybiBpdCB3aWxsCisqCQkJY29udGFpbiB0aGUgYm9keSBwb3J0aW9uIG9mIHRoZSByZWNvcmQgKG1pbnVzIHRoZQorKgkJCVJJRCBhbmQgbGVuKS4KKyoJbGVuCQlidWZmZXIgbGVuZ3RoIChpbiBieXRlcywgc2hvdWxkIG1hdGNoIHJlY29yZCBsZW5ndGgpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCS1FTk9EQVRBIAlsZW5ndGggbWlzbWF0Y2ggYmV0d2VlbiBhcmd1bWVudCBhbmQgcmV0cmlldmVkCisqCQkJcmVjb3JkLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKQoreworCWludCAJCXJlc3VsdCA9IDA7CisJREJGRU5URVI7CisKKwlyZXN1bHQgPSBoZmEzODR4X2NtZF9hY2Nlc3MoIGh3LCAwLCByaWQsIGJ1ZiwgbGVuKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3NldGNvbmZpZworKgorKiBQZXJmb3JtcyB0aGUgc2VxdWVuY2UgbmVjZXNzYXJ5IHRvIHdyaXRlIGEgY29uZmlnL2luZm8gaXRlbS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglyaWQJCWNvbmZpZy9pbmZvIHJlY29yZCBpZCAoaW4gaG9zdCBvcmRlcikKKyoJYnVmCQlob3N0IHNpZGUgcmVjb3JkIGJ1ZmZlcgorKglsZW4JCWJ1ZmZlciBsZW5ndGggKGluIGJ5dGVzKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKQoreworCWludAkJcmVzdWx0ID0gMDsKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IGhmYTM4NHhfY21kX2FjY2VzcyggaHcsIDEsIHJpZCwgYnVmLCBsZW4pOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfcmVhZHBkYQorKgorKiBQZXJmb3JtcyB0aGUgc2VxdWVuY2UgdG8gcmVhZCB0aGUgUERBIHNwYWNlLiAgTm90ZSB0aGVyZSBpcyBubworKiBkcnZyX3dyaXRlcGRhKCkgZnVuY3Rpb24uICBXcml0aW5nIGEgUERBIGlzCisqIGdlbmVyYWxseSBpbXBsZW1lbnRlZCBieSBhIGNhbGxpbmcgY29tcG9uZW50IHZpYSBjYWxscyB0bworKiBjbWRfZG93bmxvYWQgYW5kIHdyaXRpbmcgdG8gdGhlIGZsYXNoIGRvd25sb2FkIGJ1ZmZlciB2aWEgdGhlCisqIGF1eCByZWdzLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWJ1ZgkJYnVmZmVyIHRvIHN0b3JlIFBEQSBpbgorKglsZW4JCWJ1ZmZlciBsZW5ndGgKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoJLUVUSU1FT1VUCXRpbW91dCB3YWl0aW5nIGZvciB0aGUgY21kIHJlZ3MgdG8gYmVjb21lCisqCQkJYXZhaWxhYmxlLCBvciB3YWl0aW5nIGZvciB0aGUgY29udHJvbCByZWcKKyoJCQl0byBpbmRpY2F0ZSB0aGUgQXV4IHBvcnQgaXMgZW5hYmxlZC4KKyoJLUVOT0RBVEEJdGhlIGJ1ZmZlciBkb2VzIE5PVCBjb250YWluIGEgdmFsaWQgUERBLgorKgkJCUVpdGhlciB0aGUgY2FyZCBQREEgaXMgYmFkLCBvciB0aGUgYXV4ZGF0YQorKgkJCXJlYWRzIGFyZSBnaXZpbmcgdXMgZ2FyYmFnZS4KKworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgb3Igbm9uLWNhcmQgaW50ZXJydXB0LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3JlYWRwZGEoaGZhMzg0eF90ICpodywgdm9pZCAqYnVmLCBVSU5UIGxlbikKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJVUlOVDE2CQkqcGRhID0gYnVmOworCWludAkJcGRhb2sgPSAwOworCWludAkJbW9yZXBkcnMgPSAxOworCWludAkJY3VycnBkciA9IDA7CS8qIHdvcmQgb2Zmc2V0IG9mIHRoZSBjdXJyZW50IHBkciAqLworCWludAkJaTsKKwlVSU5UMTYJCXBkcmxlbjsJCS8qIHBkciBsZW5ndGggaW4gYnl0ZXMsIGhvc3Qgb3JkZXIgKi8KKwlVSU5UMTYJCXBkcmNvZGU7CS8qIHBkciBjb2RlLCBob3N0IG9yZGVyICovCisJVUlOVDE2CQljcmM7CisJVUlOVDE2CQlwZGFjcmM7CisJc3RydWN0IHBkYWxvYyB7CisJCVVJTlQzMgljYXJkYWRkcjsKKwkJVUlOVDE2CWF1eGN0bDsKKwl9IHBkYWxvY1tdID0KKwl7CisJCXsgSEZBMzg0Ml9QREFfQkFTRSwJCUhGQTM4NHhfQVVYX0NUTF9OVn0sCisJCXsgSEZBMzg0Ml9QREFfQkFTRSwJCUhGQTM4NHhfQVVYX0NUTF9FWFREU30sCisJCXsgSEZBMzg0MV9QREFfQkFTRSwJCUhGQTM4NHhfQVVYX0NUTF9OVn0sCisJCXsgSEZBMzg0MV9QREFfQkFTRSwJCUhGQTM4NHhfQVVYX0NUTF9FWFREU30sCisJCXsgSEZBMzg0MV9QREFfQk9HVVNfQkFTRSwJSEZBMzg0eF9BVVhfQ1RMX05WfQorCX07CisKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayBmb3IgYXV4IGF2YWlsYWJsZSAqLworCXJlc3VsdCA9IGhmYTM4NHhfY21kX2F1eF9lbmFibGUoaHcsIDApOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19ERUJVRygxLCJhdXhfZW5hYmxlKCkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIFJlYWQgdGhlIHBkYSBmcm9tIGVhY2gga25vd24gYWRkcmVzcy4gICovCisJZm9yICggaSA9IDA7IGkgPCAoc2l6ZW9mKHBkYWxvYykvc2l6ZW9mKHBkYWxvY1swXSkpOyBpKyspIHsKKwkJV0xBTl9MT0dfREVCVUcoIDMsICJDaGVja2luZyBQREFAKDB4JTA4eCwlcylcbiIsCisJCQlwZGFsb2NbaV0uY2FyZGFkZHIsCisJCQlwZGFsb2NbaV0uYXV4Y3RsID09IEhGQTM4NHhfQVVYX0NUTF9OViA/CisJCQkiQ1RMX05WIiA6ICJDVExfRVhURFMiKTsKKworCQkvKiBDb3B5IGJ1ZnNpemUgYnl0ZXMgZnJvbSBvdXIgY3VycmVudCBwZGFsb2MgKi8KKwkJaGZhMzg0eF9jb3B5X2Zyb21fYXV4KGh3LAorCQkJcGRhbG9jW2ldLmNhcmRhZGRyLAorCQkJcGRhbG9jW2ldLmF1eGN0bCwKKwkJCWJ1ZiwKKwkJCWxlbik7CisKKwkJLyogVGVzdCBmb3IgZ2FyYmFnZSAqLworCQkvKiBUcmF2ZXJzZSB0aGUgUERSIGxpc3QgTG9va2luZyBmb3IgUERBLUVORCAqLworCQlwZGFvayA9IDE7CS8qIGludGlhbGx5IGFzc3VtZSBnb29kICovCisJCW1vcmVwZHJzID0gMTsKKwkJY3VycnBkciA9IDA7CisJCXdoaWxlICggcGRhb2sgJiYgbW9yZXBkcnMgKSB7CisJCQlwZHJsZW4gPSBoZmEzODR4Mmhvc3RfMTYocGRhW2N1cnJwZHJdKSAqIDI7CisJCQlwZHJjb2RlID0gaGZhMzg0eDJob3N0XzE2KHBkYVtjdXJycGRyKzFdKTsKKworCQkJLyogVGVzdCBmb3IgY29tcGxldGlvbiBhdCBFTkQgcmVjb3JkICovCisJCQlpZiAoIHBkcmNvZGUgPT0gSEZBMzg0eF9QRFJfRU5EX09GX1BEQSApIHsKKwkJCQlpZiAoIHBkcmxlbiA9PSA0ICkgeworCQkJCQltb3JlcGRycyA9IDA7CisJCQkJCS8qIENhbGN1bGF0ZSBDUkMtMTYgYW5kIGNvbXBhcmUgdG8gUERBCisJCQkJCSAqIHZhbHVlLiAgTm90ZSB0aGUgYWRkaXRpb24gb2YgMiB3b3JkcworCQkJCQkgKiBmb3IgRU5EUkVDLmxlbiBhbmQgRU5EUkVDLmNvZGUKKwkJCQkJICogZmllbGRzLgorCQkJCQkgKi8KKwkJCQkJY3JjID0gaGZhMzg0eF9ta2NyYzE2KCAoVUlOVDgqKXBkYSwKKwkJCQkJCShjdXJycGRyICsgMikgKiBzaXplb2YoVUlOVDE2KSk7CisJCQkJCXBkYWNyYyA9aGZhMzg0eDJob3N0XzE2KHBkYVtjdXJycGRyKzJdKTsKKwkJCQkJaWYgKCBjcmMgIT0gcGRhY3JjICkgeworCQkJCQkJV0xBTl9MT0dfREVCVUcoMywKKwkJCQkJCSJQREEgY3JjIGZhaWxlZDoiCisJCQkJCQkiY2FsY19jcmM9MHglMDR4LCIKKwkJCQkJCSJwZHJfY3JjPTB4JTA0eC5cbiIsCisJCQkJCQljcmMsIHBkYWNyYyk7CisJCQkJCQlwZGFvayA9IDA7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlXTEFOX0xPR19ERUJVRygzLAorCQkJCQkiRU5EIHJlY29yZCBkZXRlY3RlZCB3LyAiCisJCQkJCSJsZW4oJWQpICE9IDIsIGFzc3VtaW5nIGJhZCBQREFcbiIsCisJCQkJCXBkcmxlbik7CisJCQkJCXBkYW9rID0gMDsKKworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogVGVzdCB0aGUgcmVjb3JkIGxlbmd0aCAqLworCQkJaWYgKCBwZHJsZW4gPiBIRkEzODR4X1BEUl9MRU5fTUFYIHx8IHBkcmxlbiA9PSAwKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMywKKwkJCQkJInBkcmxlbiBmb3IgYWRkcmVzcyAjJWQgIgorCQkJCQkiYXQgJSN4OiUjeDolZFxuIiwKKwkJCQkJaSwgcGRhbG9jW2ldLmNhcmRhZGRyLAorCQkJCQlwZGFsb2NbaV0uYXV4Y3RsLCBwZHJsZW4pOworCQkJCVdMQU5fTE9HX0RFQlVHKDMsInBkcmxlbiBpbnZhbGlkPSVkXG4iLAorCQkJCQlwZHJsZW4pOworCQkJCXBkYW9rID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogTW92ZSB0byB0aGUgbmV4dCBwZHIgKi8KKwkJCWlmICggbW9yZXBkcnMgKSB7CisJCQkJLyogbm90ZSB0aGUgYWNjZXNzIHRvIHBkYVtdLCB3ZSBuZWVkIHdvcmRzICovCisJCQkJY3VycnBkciArPSBoZmEzODR4Mmhvc3RfMTYocGRhW2N1cnJwZHJdKSArIDE7CisJCQkJaWYgKGN1cnJwZHIqc2l6ZW9mKFVJTlQxNikgPiBsZW4pIHsKKwkJCQkJV0xBTl9MT0dfREVCVUcoMywKKwkJCQkJIkRpZG4ndCBmaW5kIFBEQV9FTkQgaW4gYnVmZmVyLCAiCisJCQkJCSJ0cnlpbmcgbmV4dCBsb2NhdGlvbi5cbiIpOworCQkJCQlwZGFvayA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoIHBkYW9rICkgeworCQkJV0xBTl9MT0dfSU5GTygKKwkJCQkiUERBIFJlYWQgZnJvbSAweCUwOHggaW4gJXMgc3BhY2UuXG4iLAorCQkJCXBkYWxvY1tpXS5jYXJkYWRkciwKKwkJCQlwZGFsb2NbaV0uYXV4Y3RsID09IDAgPyAiRVhURFMiIDoKKwkJCQlwZGFsb2NbaV0uYXV4Y3RsID09IDEgPyAiTlYiIDoKKwkJCQlwZGFsb2NbaV0uYXV4Y3RsID09IDIgPyAiUEhZIiA6CisJCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAzID8gIklDU1JBTSIgOgorCQkJCSI8Ym9ndXMgYXV4Y3RsPiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmVzdWx0ID0gcGRhb2sgPyAwIDogLUVOT0RBVEE7CisKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfREVCVUcoMywiRmFpbHVyZTogcGRhIGlzIG5vdCBva2F5XG4iKTsKKwl9CisKKwloZmEzODR4X2NtZF9hdXhfZGlzYWJsZShodyk7CitmYWlsZWQ6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIG1rcGRhX2NyYworKgorKiBDYWxjdWxhdGVzIHRoZSBDUkMxNiBmb3IgdGhlIGdpdmVuIFBEQSBhbmQgaW5zZXJ0cyB0aGUgdmFsdWUKKyogaW50byB0aGUgZW5kIHJlY29yZC4KKyoKKyogQXJndW1lbnRzOgorKglwZGEJcHRyIHRvIHRoZSBQREEgZGF0YSBzdHJ1Y3R1cmUuCisqCisqIFJldHVybnM6CisqCTAJLSBzdWNjZXNzCisqCX4wCS0gZmFpbHVyZSAocHJvYmFibHkgYW4gZXJybm8pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBVSU5UMTYKK2hmYTM4NHhfbWtjcmMxNihVSU5UOCAqcCwgaW50IGxlbikKK3sKKwlVSU5UMTYJY3JjID0gMDsKKwlVSU5UOAkqbGltID0gcCArIGxlbjsKKworCXdoaWxlIChwIDwgbGltKSB7CisJCWNyYyA9IChjcmMgPj4gOCApIF4gY3JjMTZ0YWJbKGNyYyAmIDB4ZmYpIF4gKnArK107CisJfQorCisJcmV0dXJuIGNyYzsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZQorKgorKiBCZWdpbnMgdGhlIHJhbSBkb3dubG9hZCBzdGF0ZS4gIENoZWNrcyB0byBzZWUgdGhhdCB3ZSdyZSBub3QKKyogYWxyZWFkeSBpbiBhIGRvd25sb2FkIHN0YXRlIGFuZCB0aGF0IGEgcG9ydCBpc24ndCBlbmFibGVkLgorKiBTZXRzIHRoZSBkb3dubG9hZCBzdGF0ZSBhbmQgY2FsbHMgY21kX2Rvd25sb2FkIHdpdGggdGhlCisqIEVOQUJMRV9WT0xBVElMRSBzdWJjb21tYW5kIGFuZCB0aGUgZXhlYWRkciBhcmd1bWVudC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglleGVhZGRyCQl0aGUgY2FyZCBleGVjdXRpb24gYWRkcmVzcyB0aGF0IHdpbGwgYmUKKyogICAgICAgICAgICAgICAgICAgICAgIGp1bXBlZCB0byB3aGVuIHJhbWRsX2Rpc2FibGUoKSBpcyBjYWxsZWQKKyoJCQkoaG9zdCBvcmRlcikuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMzIgZXhlYWRkcikKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJVUlOVDE2CQlsb3dhZGRyOworCVVJTlQxNgkJaGlhZGRyOworCWludAkJaTsKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IGEgcG9ydCBpc24ndCBhY3RpdmUgKi8KKwlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfUE9SVElEX01BWDsgaSsrKSB7CisJCWlmICggaHctPnBvcnRfZW5hYmxlZFtpXSApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsIkNhbid0IGRvd25sb2FkIHdpdGggYSBwb3J0IGVuYWJsZWQuXG4iKTsKKwkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIG5vdCBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9ESVNBQkxFRCApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwiRG93bmxvYWQgc3RhdGUgbm90IGRpc2FibGVkLlxuIik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBBcmUgd2Ugc3VwcG9zZWQgdG8gZ28gaW50byBnZW5lc2lzIG1vZGU/ICovCisJaWYgKGV4ZWFkZHIgPT0gMHgzZjAwMDApIHsKKwkJVUlOVDE2IGluaXRzZXFbMl0gPSB7IDB4ZTEwMCwgMHhmZmExIH07CisJCVVJTlQxNiByZWFkYnVmWzJdOworCQlVSU5UOCBoY3IgPSAweDBmOyAvKiBEZWZhdWx0IHRvIHgxNiBTUkFNICovCisJCWh3LT5pc3JhbTE2ID0gMTsKKworCQlXTEFOX0xPR19ERUJVRygxLCAiRHJvcHBpbmcgaW50byBHZW5lc2lzIG1vZGVcbiIpOworCisJCS8qIElzc3VlIGNhcmQgcmVzZXQgYW5kIGVuYWJsZSBhdXggcG9ydCAqLworCQloZmEzODR4X2NvcmVyZXNldChodywgcHJpc20yX3Jlc2V0X2hvbGR0aW1lLAorCQkJCSAgcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsIDApOworCQloZmEzODR4X2NtZF9hdXhfZW5hYmxlKGh3LCAxKTsKKworCQkvKiBHZW5lc2lzIHNldCAqLworCQloZmEzODR4X2NvcHlfdG9fYXV4KGh3LCAweDdFMDAzOCwgSEZBMzg0eF9BVVhfQ1RMX0VYVERTLAorCQkJCSAgICBpbml0c2VxLCBzaXplb2YoaW5pdHNlcSkpOworCisJCWhmYTM4NHhfY29yZXJlc2V0KGh3LCBwcmlzbTJfcmVzZXRfaG9sZHRpbWUsCisJCQkJICBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgaGNyKTsKKworCQkvKiBWYWxpZGF0ZSBtZW1vcnkgY29uZmlnICovCisJCWhmYTM4NHhfY29weV90b19hdXgoaHcsIDB4N0UwMDM4LCBIRkEzODR4X0FVWF9DVExfRVhURFMsCisJCQkJICAgIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7CisJCWhmYTM4NHhfY29weV9mcm9tX2F1eChodywgMHg3RTAwMzgsIEhGQTM4NHhfQVVYX0NUTF9FWFREUywKKwkJCQkgICAgcmVhZGJ1Ziwgc2l6ZW9mKGluaXRzZXEpKTsKKwkJV0xBTl9IRVhfRFVNUCgzLCAicmVhZGJhY2siLCByZWFkYnVmLCBzaXplb2YocmVhZGJ1ZikpOworCisJCWlmIChtZW1jbXAoaW5pdHNlcSwgcmVhZGJ1Ziwgc2l6ZW9mKHJlYWRidWYpKSkgeworCQkJaGNyID0gMHgxZjsgLyogeDggU1JBTSAqLworCQkJaHctPmlzcmFtMTYgPSAwOworCisJCQloZmEzODR4X2NvcHlfdG9fYXV4KGh3LCAweDdFMDAzOCwgSEZBMzg0eF9BVVhfQ1RMX0VYVERTLAorCQkJCQkgICAgaW5pdHNlcSwgc2l6ZW9mKGluaXRzZXEpKTsKKwkJCWhmYTM4NHhfY29yZXJlc2V0KGh3LCBwcmlzbTJfcmVzZXRfaG9sZHRpbWUsCisJCQkJCSAgcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsIGhjcik7CisKKwkJCWhmYTM4NHhfY29weV90b19hdXgoaHcsIDB4N0UwMDM4LCBIRkEzODR4X0FVWF9DVExfRVhURFMsCisJCQkJCSAgICBpbml0c2VxLCBzaXplb2YoaW5pdHNlcSkpOworCQkJaGZhMzg0eF9jb3B5X2Zyb21fYXV4KGh3LCAweDdFMDAzOCwgSEZBMzg0eF9BVVhfQ1RMX0VYVERTLAorCQkJCQkgICAgcmVhZGJ1Ziwgc2l6ZW9mKGluaXRzZXEpKTsKKwkJCVdMQU5fSEVYX0RVTVAoMiwgInJlYWRiYWNrIiwgcmVhZGJ1Ziwgc2l6ZW9mKHJlYWRidWYpKTsKKworCQkJaWYgKG1lbWNtcChpbml0c2VxLCByZWFkYnVmLCBzaXplb2YocmVhZGJ1ZikpKSB7CisJCQkJV0xBTl9MT0dfRVJST1IoIkdlbmVzaXMgbW9kZSBmYWlsZWRcbiIpOworCQkJCXJlc3VsdCA9IC0xOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorCisJCS8qIE5vdyB3ZSdyZSBpbiBnZW5lc2lzIG1vZGUgKi8KKwkJaHctPmRsc3RhdGUgPSBIRkEzODR4X0RMU1RBVEVfR0VORVNJUzsKKwkJZ290byBkb25lOworCX0KKworCS8qIFJldHJpZXZlIHRoZSBidWZmZXIgbG9jJnNpemUgYW5kIHRpbWVvdXQgKi8KKwlpZiAoIChyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUiwKKwkJCQkmKGh3LT5idWZpbmZvKSwgc2l6ZW9mKGh3LT5idWZpbmZvKSkpICkgeworCQlnb3RvIGRvbmU7CisJfQorCWh3LT5idWZpbmZvLnBhZ2UgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ucGFnZSk7CisJaHctPmJ1ZmluZm8ub2Zmc2V0ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5idWZpbmZvLm9mZnNldCk7CisJaHctPmJ1ZmluZm8ubGVuID0gaGZhMzg0eDJob3N0XzE2KGh3LT5idWZpbmZvLmxlbik7CisJaWYgKCAocmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9NQVhMT0FEVElNRSwKKwkJCQkmKGh3LT5kbHRpbWVvdXQpKSkgKSB7CisJCWdvdG8gZG9uZTsKKwl9CisJaHctPmRsdGltZW91dCA9IGhmYTM4NHgyaG9zdF8xNihody0+ZGx0aW1lb3V0KTsKKworCS8qIEVuYWJsZSB0aGUgYXV4IHBvcnQgKi8KKwlpZiAoIChyZXN1bHQgPSBoZmEzODR4X2NtZF9hdXhfZW5hYmxlKGh3LCAwKSkgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsIkF1eCBlbmFibGUgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLCByZXN1bHQpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogQ2FsbCB0aGUgZG93bmxvYWQoMSxhZGRyKSBmdW5jdGlvbiAqLworCWxvd2FkZHIgPSBIRkEzODR4X0FERFJfQ01EX01LT0ZGKGV4ZWFkZHIpOworCWhpYWRkciA9ICBIRkEzODR4X0FERFJfQ01EX01LUEFHRShleGVhZGRyKTsKKworCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX1JBTSwKKwkJCWxvd2FkZHIsIGhpYWRkciwgMCk7CisJaWYgKCByZXN1bHQgPT0gMCkgeworCQkvKiBTZXQgdGhlIGRvd25sb2FkIHN0YXRlICovCisJCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX1JBTUVOQUJMRUQ7CisJfSBlbHNlIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwiY21kX2Rvd25sb2FkKDB4JTA0eCwgMHglMDR4KSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsCisJCQkJbG93YWRkcixoaWFkZHIsIHJlc3VsdCk7CisJCS8qIERpc2FibGUgIHRoZSBhdXggcG9ydCAqLworCQloZmEzODR4X2NtZF9hdXhfZGlzYWJsZShodyk7CisJfQorCisgZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9yYW1kbF9kaXNhYmxlCisqCisqIEVuZHMgdGhlIHJhbSBkb3dubG9hZCBzdGF0ZS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9yYW1kbF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpCit7CisJREJGRU5URVI7CisJLyogQ2hlY2sgdGhhdCB3ZSdyZSBhbHJlYWR5IGluIHRoZSBkb3dubG9hZCBzdGF0ZSAqLworCWlmICggKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRCApICYmCisJICAgICAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9HRU5FU0lTICkgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChody0+ZGxzdGF0ZSA9PSBIRkEzODR4X0RMU1RBVEVfR0VORVNJUykgeworCQloZmEzODR4X2NvcmVyZXNldChodywgcHJpc20yX3Jlc2V0X2hvbGR0aW1lLAorCQkJCSAgcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsCisJCQkJICBody0+aXNyYW0xNiA/IDB4MDc6IDB4MTcpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogRGlzYWJsZSB0aGUgYXV4IHBvcnQgKi8KKwloZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9ESVNBQkxFLCAwLCAwICwgMCk7CisKKyBkb25lOgorCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEOworCWhmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGh3KTsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9yYW1kbF93cml0ZQorKgorKiBQZXJmb3JtcyBhIFJBTSBkb3dubG9hZCBvZiBhIGNodW5rIG9mIGRhdGEuIEZpcnN0IGNoZWNrcyB0byBzZWUKKyogdGhhdCB3ZSdyZSBpbiB0aGUgUkFNIGRvd25sb2FkIHN0YXRlLCB0aGVuIHVzZXMgdGhlIGF1eCBmdW5jdGlvbnMKKyogdG8gMSkgY29weSB0aGUgZGF0YSwgMikgcmVhZGJhY2sgYW5kIGNvbXBhcmUuICBUaGUgZG93bmxvYWQKKyogc3RhdGUgaXMgdW5hZmZlY3RlZC4gIFdoZW4gYWxsIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB1c2luZworKiB0aGlzIGZ1bmN0aW9uLCBjYWxsIGRydnJfcmFtZGxfZGlzYWJsZSgpIHRvIGVuZCB0aGUgZG93bmxvYWQgc3RhdGUKKyogYW5kIHJlc3RhcnQgdGhlIE1BQy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglkYWRkcgkJQ2FyZCBhZGRyZXNzIHRvIHdyaXRlIHRvLiAoaG9zdCBvcmRlcikKKyoJYnVmCQlQdHIgdG8gZGF0YSB0byB3cml0ZS4KKyoJbGVuCQlMZW5ndGggb2YgZGF0YSAoaG9zdCBvcmRlcikuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBkYWRkciwgdm9pZCogYnVmLCBVSU5UMzIgbGVuKQoreworCWludAkJcmVzdWx0ID0gMDsKKwlVSU5UOAkJKnZlcmJ1ZjsKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIGluIHRoZSByYW0gZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX1JBTUVOQUJMRUQgKSAmJgorCSAgICAgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfR0VORVNJUyApICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXTEFOX0xPR19JTkZPKCJXcml0aW5nICVkIGJ5dGVzIHRvIHJhbSBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKKyNpZiAwCitXTEFOX0hFWF9EVU1QKDEsICJkbGRhdGEiLCBidWYsIGxlbik7CisjZW5kaWYKKwkvKiBDb3B5IHRoZSBkYXRhIHZpYSB0aGUgYXV4IHBvcnQgKi8KKwloZmEzODR4X2NvcHlfdG9fYXV4KGh3LCBkYWRkciwgSEZBMzg0eF9BVVhfQ1RMX0VYVERTLCBidWYsIGxlbik7CisKKwkvKiBDcmVhdGUgYSBidWZmZXIgZm9yIHRoZSB2ZXJpZnkgKi8KKwl2ZXJidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKHZlcmJ1ZiA9PSBOVUxMICkgcmV0dXJuIDE7CisKKwkvKiBSZWFkIGJhY2sgYW5kIGNvbXBhcmUgKi8KKwloZmEzODR4X2NvcHlfZnJvbV9hdXgoaHcsIGRhZGRyLCBIRkEzODR4X0FVWF9DVExfRVhURFMsIHZlcmJ1ZiwgbGVuKTsKKworCWlmICggbWVtY21wKGJ1ZiwgdmVyYnVmLCBsZW4pICkgeworCQlXTEFOX0xPR19ERUJVRygxLCJyYW1kbCB2ZXJpZnkgZmFpbGVkIVxuIik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfQorCisJa2ZyZWVfcyh2ZXJidWYsIGxlbik7CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUKKyoKKyogQmVnaW5zIHRoZSBmbGFzaCBkb3dubG9hZCBzdGF0ZS4gIENoZWNrcyB0byBzZWUgdGhhdCB3ZSdyZSBub3QKKyogYWxyZWFkeSBpbiBhIGRvd25sb2FkIHN0YXRlIGFuZCB0aGF0IGEgcG9ydCBpc24ndCBlbmFibGVkLgorKiBTZXRzIHRoZSBkb3dubG9hZCBzdGF0ZSBhbmQgcmV0cmlldmVzIHRoZSBmbGFzaCBkb3dubG9hZAorKiBidWZmZXIgbG9jYXRpb24sIGJ1ZmZlciBzaXplLCBhbmQgdGltZW91dCBsZW5ndGguCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUoaGZhMzg0eF90ICpodykKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJaW50CQlpOworCisJREJGRU5URVI7CisJLyogQ2hlY2sgdGhhdCBhIHBvcnQgaXNuJ3QgYWN0aXZlICovCisJZm9yICggaSA9IDA7IGkgPCBIRkEzODR4X1BPUlRJRF9NQVg7IGkrKykgeworCQlpZiAoIGh3LT5wb3J0X2VuYWJsZWRbaV0gKSB7CisJCQlXTEFOX0xPR19ERUJVRygxLCJjYWxsZWQgd2hlbiBwb3J0IGVuYWJsZWQuXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogQ2hlY2sgdGhhdCB3ZSdyZSBub3QgYWxyZWFkeSBpbiBhIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFJldHJpZXZlIHRoZSBidWZmZXIgbG9jJnNpemUgYW5kIHRpbWVvdXQgKi8KKwlpZiAoIChyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUiwKKwkJCQkmKGh3LT5idWZpbmZvKSwgc2l6ZW9mKGh3LT5idWZpbmZvKSkpICkgeworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlody0+YnVmaW5mby5wYWdlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5idWZpbmZvLnBhZ2UpOworCWh3LT5idWZpbmZvLm9mZnNldCA9IGhmYTM4NHgyaG9zdF8xNihody0+YnVmaW5mby5vZmZzZXQpOworCWh3LT5idWZpbmZvLmxlbiA9IGhmYTM4NHgyaG9zdF8xNihody0+YnVmaW5mby5sZW4pOworCWlmICggKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfTUFYTE9BRFRJTUUsCisJCQkJJihody0+ZGx0aW1lb3V0KSkpICkgeworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlody0+ZGx0aW1lb3V0ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5kbHRpbWVvdXQpOworCisJLyogRW5hYmxlIHRoZSBhdXggcG9ydCAqLworCWlmICggKHJlc3VsdCA9IGhmYTM4NHhfY21kX2F1eF9lbmFibGUoaHcsIDApKSApIHsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9GTEFTSEVOQUJMRUQ7CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZmxhc2hkbF9kaXNhYmxlCisqCisqIEVuZHMgdGhlIGZsYXNoIGRvd25sb2FkIHN0YXRlLiAgTm90ZSB0aGF0IHRoaXMgd2lsbCBjYXVzZSB0aGUgTUFDCisqIGZpcm13YXJlIHRvIHJlc3RhcnQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfZmxhc2hkbF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpCit7CisJREJGRU5URVI7CisJLyogQ2hlY2sgdGhhdCB3ZSdyZSBhbHJlYWR5IGluIHRoZSBkb3dubG9hZCBzdGF0ZSAqLworCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0ZMQVNIRU5BQkxFRCApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVGhlcmUgaXNuJ3QgbXVjaCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCwgc28gSSBkb24ndCAqLworCS8qICBib3RoZXIgIHcvIHRoZSByZXR1cm4gdmFsdWUgKi8KKwloZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9ESVNBQkxFLCAwLCAwICwgMCk7CisJaHctPmRsc3RhdGUgPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQ7CisKKwkvKiBEaXNhYmxlIHRoZSBhdXggcG9ydCAqLworCWhmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGh3KTsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlCisqCisqIFBlcmZvcm1zIGEgRkxBU0ggZG93bmxvYWQgb2YgYSBjaHVuayBvZiBkYXRhLiBGaXJzdCBjaGVja3MgdG8gc2VlCisqIHRoYXQgd2UncmUgaW4gdGhlIEZMQVNIIGRvd25sb2FkIHN0YXRlLCB0aGVuIHNldHMgdGhlIGRvd25sb2FkCisqIG1vZGUsIHVzZXMgdGhlIGF1eCBmdW5jdGlvbnMgdG8gMSkgY29weSB0aGUgZGF0YSB0byB0aGUgZmxhc2gKKyogYnVmZmVyLCAyKSBzZXRzIHRoZSBkb3dubG9hZCAnd3JpdGUgZmxhc2gnIG1vZGUsIDMpIHJlYWRiYWNrIGFuZAorKiBjb21wYXJlLiAgTGF0aGVyIHJpbnNlLCByZXBlYXQgYXMgbWFueSB0aW1lcyBhbiBuZWNlc3NhcnkgdG8gZ2V0CisqIGFsbCB0aGUgZ2l2ZW4gZGF0YSBpbnRvIGZsYXNoLgorKiBXaGVuIGFsbCBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdXNpbmcgdGhpcyBmdW5jdGlvbiAocG9zc2libHkKKyogcmVwZWF0ZWRseSksIGNhbGwgZHJ2cl9mbGFzaGRsX2Rpc2FibGUoKSB0byBlbmQgdGhlIGRvd25sb2FkIHN0YXRlCisqIGFuZCByZXN0YXJ0IHRoZSBNQUMuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJZGFkZHIJCUNhcmQgYWRkcmVzcyB0byB3cml0ZSB0by4gKGhvc3Qgb3JkZXIpCisqCWJ1ZgkJUHRyIHRvIGRhdGEgdG8gd3JpdGUuCisqCWxlbgkJTGVuZ3RoIG9mIGRhdGEgKGhvc3Qgb3JkZXIpLgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBkYWRkciwgdm9pZCogYnVmLCBVSU5UMzIgbGVuKQoreworCWludAkJcmVzdWx0ID0gMDsKKwlVSU5UOAkJKnZlcmJ1ZjsKKwlVSU5UMzIJCWRsYnVmYWRkcjsKKwlVSU5UMzIJCWN1cnJsZW47CisJVUlOVDMyCQljdXJyZGFkZHI7CisJVUlOVDE2CQlkZXN0bG87CisJVUlOVDE2CQlkZXN0aGk7CisJaW50CQlud3JpdGVzOworCWludAkJaTsKKworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIGZsYXNoIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXTEFOX0xPR19JTkZPKCJEb3dubG9hZCAlZCBieXRlcyB0byBmbGFzaCBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKKworCS8qIE5lZWQgYSBmbGF0IGFkZHJlc3MgZm9yIGFyaXRobWV0aWMgKi8KKwlkbGJ1ZmFkZHIgPSBIRkEzODR4X0FERFJfQVVYX01LRkxBVCgKKwkJCWh3LT5idWZpbmZvLnBhZ2UsCisJCQlody0+YnVmaW5mby5vZmZzZXQpOworCXZlcmJ1ZiA9IGttYWxsb2MoaHctPmJ1ZmluZm8ubGVuLCBHRlBfS0VSTkVMKTsKKworI2lmIDAKK1dMQU5fTE9HX1dBUk5JTkcoImRsYnVmQDB4JTA2bHggbGVuPSVkIHRvPSVkXG4iLCBkbGJ1ZmFkZHIsIGh3LT5idWZpbmZvLmxlbiwgaHctPmRsdGltZW91dCk7CisjZW5kaWYKKwkvKiBGaWd1cmUgb3V0IGhvdyBtYW55IHRpbWVzIHRvIHRvIHRoZSBmbGFzaCBwcm9nICovCisJbndyaXRlcyA9IGxlbiAvIGh3LT5idWZpbmZvLmxlbjsKKwlud3JpdGVzICs9IChsZW4gJSBody0+YnVmaW5mby5sZW4pID8gMSA6IDA7CisKKwlpZiAoIHZlcmJ1ZiA9PSBOVUxMICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIGZsYXNoIHZlcmlmeSBidWZmZXJcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJLyogRm9yIGVhY2ggKi8KKwlmb3IgKCBpID0gMDsgaSA8IG53cml0ZXM7IGkrKykgeworCQkvKiBHZXQgdGhlIGRlc3QgYWRkcmVzcyBhbmQgbGVuICovCisJCWN1cnJsZW4gPSAobGVuIC0gKGh3LT5idWZpbmZvLmxlbiAqIGkpKSA+IGh3LT5idWZpbmZvLmxlbiA/CisJCQkJaHctPmJ1ZmluZm8ubGVuIDoKKwkJCQkobGVuIC0gKGh3LT5idWZpbmZvLmxlbiAqIGkpKTsKKwkJY3VycmRhZGRyID0gZGFkZHIgKyAoaHctPmJ1ZmluZm8ubGVuICogaSk7CisJCWRlc3RsbyA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYoY3VycmRhZGRyKTsKKwkJZGVzdGhpID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoY3VycmRhZGRyKTsKKwkJV0xBTl9MT0dfSU5GTygiV3JpdGluZyAlZCBieXRlcyB0byBmbGFzaCBAMHglMDZ4XG4iLCBjdXJybGVuLCBjdXJyZGFkZHIpOworI2lmIDAKK1dMQU5fSEVYX0RVTVAoMSwgImRsZGF0YSIsIGJ1ZisoaHctPmJ1ZmluZm8ubGVuKmkpLCBjdXJybGVuKTsKKyNlbmRpZgorCQkvKiBTZXQgdGhlIGRvd25sb2FkIG1vZGUgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfTlYsCisJCQkJZGVzdGxvLCBkZXN0aGksIGN1cnJsZW4pOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJkb3dubG9hZChOVixsbz0leCxoaT0leCxsZW49JXgpICIKKwkJCQkiY21kIGZhaWxlZCwgcmVzdWx0PSVkLiBBYm9ydGluZyBkL2xcbiIsCisJCQkJZGVzdGxvLCBkZXN0aGksIGN1cnJsZW4sIHJlc3VsdCk7CisJCQlnb3RvIGV4aXRfcHJvYzsKKwkJfQorCQkvKiBjb3B5IHRoZSBkYXRhIHRvIHRoZSBmbGFzaCBidWZmZXIgKi8KKwkJaGZhMzg0eF9jb3B5X3RvX2F1eChodywgZGxidWZhZGRyLCBIRkEzODR4X0FVWF9DVExfRVhURFMsCisJCQkJCWJ1ZisoaHctPmJ1ZmluZm8ubGVuKmkpLCBjdXJybGVuKTsKKwkJLyogc2V0IHRoZSBkb3dubG9hZCAnd3JpdGUgZmxhc2gnIG1vZGUgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfTlZXUklURSwgMCwwLDApOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCSJkb3dubG9hZChOVldSSVRFLGxvPSV4LGhpPSV4LGxlbj0leCkgIgorCQkJCSJjbWQgZmFpbGVkLCByZXN1bHQ9JWQuIEFib3J0aW5nIGQvbFxuIiwKKwkJCQlkZXN0bG8sIGRlc3RoaSwgY3VycmxlbiwgcmVzdWx0KTsKKwkJCWdvdG8gZXhpdF9wcm9jOworCQl9CisJCS8qIHJlYWRiYWNrIGFuZCBjb21wYXJlLCBpZiBmYWlsLi4uYmFpbCAqLworCQloZmEzODR4X2NvcHlfZnJvbV9hdXgoaHcsCisJCQkJY3VycmRhZGRyLCBIRkEzODR4X0FVWF9DVExfTlYsCisJCQkJdmVyYnVmLCBjdXJybGVuKTsKKworCQlpZiAoIG1lbWNtcChidWYrKGh3LT5idWZpbmZvLmxlbippKSwgdmVyYnVmLCBjdXJybGVuKSApIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCitleGl0X3Byb2M6CisgICAgICAgICAvKiBET0ghIFRoaXMga2ZyZWUncyBmb3IgeW91IE1hcmsgOi0pIE15IGZvcmVoZWFkIGh1cnRzLi4uICovCisgICAgICAgICBrZnJlZSh2ZXJidWYpOworCisJLyogTGVhdmUgdGhlIGZpcm13YXJlIGluIHRoZSAncG9zdC1wcm9nJyBtb2RlLiAgZmxhc2hkbF9kaXNhYmxlIHdpbGwgKi8KKwkvKiAgYWN0dWFsbHkgZGlzYWJsZSBwcm9ncmFtbWluZyBtb2RlLiAgUmVtZW1iZXIsIHRoYXQgd2lsbCBjYXVzZSB0aGUgKi8KKwkvKiAgdGhlIGZpcm13YXJlIHRvIGVmZmVjdGl2ZWx5IHJlc2V0IGl0c2VsZi4gKi8KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZQorKgorKiBJc3N1ZXMgdGhlIGluaXRpYWxpemUgY29tbWFuZCBhbmQgc2V0cyB0aGUgaHctPnN0YXRlIGJhc2VkCisqIG9uIHRoZSByZXN1bHQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9pbml0aWFsaXplKGhmYTM4NHhfdCAqaHcpCit7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGk7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwkvKiB3ZSBkb24ndCB3YW50IHRvIGJlIGludGVycnVwdGVkIGR1cmluZyB0aGUgcmVzZXQgKi8KKwloZmEzODR4X3NldHJlZyhodywgMCwgSEZBMzg0eF9JTlRFTik7CisJaGZhMzg0eF9zZXRyZWcoaHcsIDB4ZmZmZiwgSEZBMzg0eF9FVkFDSyk7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURDT0RFX0lOSVQ7CisJY21kLnBhcm0wID0gMDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlpZiAoIHJlc3VsdCA9PSAwICkgeworCQlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfTlVNUE9SVFNfTUFYOyBpKyspIHsKKwkJCWh3LT5wb3J0X2VuYWJsZWRbaV0gPSAwOworCQl9CisJfQorCisgICAgICAgIGh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQ7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9jb21tdGFsbGllcworKgorKiBTZW5kIGEgY29tbXRhbGxpZXMgaW5xdWlyeSB0byB0aGUgTUFDLiAgTm90ZSB0aGF0IHRoaXMgaXMgYW4gYXN5bmMKKyogY2FsbCB0aGF0IHdpbGwgcmVzdWx0IGluIGFuIGluZm8gZnJhbWUgYXJyaXZpbmcgc29tZXRpbWUgbGF0ZXIuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJemVybwkJc3VjY2Vzcy4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9jb21tdGFsbGllcyggaGZhMzg0eF90ICpodyApCit7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCWludCByZXN1bHQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRENPREVfSU5ROworCWNtZC5wYXJtMCA9IEhGQTM4NHhfSVRfQ09NTVRBTExJRVM7CisJY21kLnBhcm0xID0gMDsKKwljbWQucGFybTIgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZody0+Y21kbG9jayk7CisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKwlzcGluX3VubG9ja19iaCgmaHctPmNtZGxvY2spOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZW5hYmxlCisqCisqIElzc3VlcyB0aGUgZW5hYmxlIGNvbW1hbmQgdG8gZW5hYmxlIGNvbW11bmljYXRpb25zIG9uIG9uZSBvZgorKiB0aGUgTUFDcyAncG9ydHMnLiAgT25seSBtYWNwb3J0IDAgaXMgdmFsaWQgIGZvciBzdGF0aW9ucy4KKyogQVBzIG1heSBhbHNvIGVuYWJsZSBtYWNwb3J0cyAxLTYuICBPbmx5IHBvcnRzIHRoYXQgYXJlIGN1cnJlbnRseQorKiBkaXNhYmxlZCBtYXkgYmUgZW5hYmxlZC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgltYWNwb3J0CQlNQUMgcG9ydCBudW1iZXIKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9lbmFibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpCit7CisJaW50CXJlc3VsdCA9IDA7CisKKwlEQkZFTlRFUjsKKwlpZiAoKCFody0+aXNhcCAmJiBtYWNwb3J0ICE9IDApIHx8CisJICAgIChody0+aXNhcCAmJiAhKG1hY3BvcnQgPD0gSEZBMzg0eF9QT1JUSURfTUFYKSkgfHwKKwkgICAgKGh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0pICl7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZW5hYmxlKGh3LCBtYWNwb3J0KTsKKwkJaWYgKCByZXN1bHQgPT0gMCApIHsKKwkJCWh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0gPSAxOworCQl9CisJfQorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfZW5hYmxlCisqCisqIElzc3VlcyB0aGUgdGhlIGVuYWJsZSBjb21tYW5kIHRvIGVuYWJsZSBjb21tdW5pY2F0aW9ucyBvbiBvbmUgb2YgdGhlCisqIE1BQ3MgJ3BvcnRzJy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgltYWNwb3J0CQlNQUMgcG9ydCBudW1iZXIKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX2VuYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfRU5BQkxFKSB8CisJCSAgSEZBMzg0eF9DTURfTUFDUE9SVF9TRVQobWFjcG9ydCk7CisJY21kLnBhcm0wID0gMDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9kaXNhYmxlCisqCisqIElzc3VlcyB0aGUgZGlzYWJsZSBjb21tYW5kIHRvIHN0b3AgY29tbXVuaWNhdGlvbnMgb24gb25lIG9mCisqIHRoZSBNQUNzICdwb3J0cycuICBPbmx5IG1hY3BvcnQgMCBpcyB2YWxpZCAgZm9yIHN0YXRpb25zLgorKiBBUHMgbWF5IGFsc28gZGlzYWJsZSBtYWNwb3J0cyAxLTYuICBPbmx5IHBvcnRzIHRoYXQgaGF2ZSBiZWVuCisqIHByZXZpb3VzbHkgZW5hYmxlZCBtYXkgYmUgZGlzYWJsZWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbWFjcG9ydAkJTUFDIHBvcnQgbnVtYmVyIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2Rpc2FibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpCit7CisJaW50CXJlc3VsdCA9IDA7CisKKwlEQkZFTlRFUjsKKwlpZiAoKCFody0+aXNhcCAmJiBtYWNwb3J0ICE9IDApIHx8CisJICAgIChody0+aXNhcCAmJiAhKG1hY3BvcnQgPD0gSEZBMzg0eF9QT1JUSURfTUFYKSkgfHwKKwkgICAgIShody0+cG9ydF9lbmFibGVkW21hY3BvcnRdKSApeworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rpc2FibGUoaHcsIG1hY3BvcnQpOworCQlpZiAoIHJlc3VsdCA9PSAwICkgeworCQkJaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSA9IDA7CisJCX0KKwl9CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9kaXNhYmxlCisqCisqIElzc3VlcyB0aGUgY29tbWFuZCB0byBkaXNhYmxlIGEgcG9ydC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgltYWNwb3J0CQlNQUMgcG9ydCBudW1iZXIgKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBtYWNwb3J0KQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9ESVNBQkxFKSB8CisJCSAgSEZBMzg0eF9DTURfTUFDUE9SVF9TRVQobWFjcG9ydCk7CisJY21kLnBhcm0wID0gMDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2RpYWdub3NlCisqCisqIElzc3VlcyB0aGUgZGlhZ25vc2UgY29tbWFuZCB0byB0ZXN0IHRoZTogcmVnaXN0ZXIgaW50ZXJmYWNlLAorKiBNQUMgY29udHJvbGxlciAoaW5jbHVkaW5nIGxvb3BiYWNrKSwgRXh0ZXJuYWwgUkFNLCBOb24tdm9sYXRpbGUKKyogbWVtb3J5IGludGVncml0eSwgYW5kIHN5bnRoZXNpemVycy4gIEZvbGxvd2luZyBleGVjdXRpb24gb2YgdGhpcworKiBjb21tYW5kLCBNQUMvZmlybXdhcmUgYXJlIGluIHRoZSAnaW5pdGlhbCBzdGF0ZScuICBUaGVyZWZvcmUsCisqIHRoZSBJbml0aWFsaXplIGNvbW1hbmQgc2hvdWxkIGJlIGlzc3VlZCBhZnRlciBzdWNjZXNzZnVsCisqIGNvbXBsZXRpb24gb2YgdGhpcyBjb21tYW5kLiAgVGhpcyBmdW5jdGlvbiBtYXkgb25seSBiZSBjYWxsZWQKKyogd2hlbiB0aGUgTUFDIGlzIGluIHRoZSAnY29tbXVuaWNhdGlvbiBkaXNhYmxlZCcgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBESUFHX1BBVFRFUk5BICgoVUlOVDE2KTB4YWFhYSkKKyNkZWZpbmUgRElBR19QQVRURVJOQiAoKFVJTlQxNikweDU1NTUpCisKK2ludCBoZmEzODR4X2NtZF9kaWFnbm9zZShoZmEzODR4X3QgKmh3KQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9ESUFHKTsKKwljbWQucGFybTAgPSBESUFHX1BBVFRFUk5BOworCWNtZC5wYXJtMSA9IERJQUdfUEFUVEVSTkI7CisJY21kLnBhcm0yID0gMDsKKworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfYWxsb2NhdGUKKyoKKyogSXNzdWVzIHRoZSBhbGxvY2F0ZSBjb21tYW5kIGluc3RydWN0aW5nIHRoZSBmaXJtd2FyZSB0byBhbGxvY2F0ZQorKiBhICdmcmFtZSBzdHJ1Y3R1cmUgYnVmZmVyJyBpbiBNQUMgY29udHJvbGxlciBSQU0uICBUaGlzIGNvbW1hbmQKKyogZG9lcyBub3QgcHJvdmlkZSB0aGUgcmVzdWx0LCBpdCBvbmx5IGluaXRpYXRlcyBvbmUgb2YgdGhlIGYvdydzCisqIGFzeW5jaHJvbm91cyBwcm9jZXNzZXMgdG8gY29uc3RydWN0IHRoZSBidWZmZXIuICBXaGVuIHRoZQorKiBhbGxvY2F0aW9uIGlzIGNvbXBsZXRlLCBpdCB3aWxsIGJlIGluZGljYXRlZCB2aWEgdGhlIEFsbG9jCisqIGJpdCBpbiB0aGUgRXZTdGF0IHJlZ2lzdGVyIGFuZCB0aGUgRklEIGlkZW50aWZ5aW5nIHRoZSBhbGxvY2F0ZWQKKyogc3BhY2Ugd2lsbCBiZSBhdmFpbGFibGUgZnJvbSB0aGUgQWxsb2NGSUQgcmVnaXN0ZXIuICBTb21lIGNhcmUKKyogc2hvdWxkIGJlIHRha2VuIHdoZW4gd2FpdGluZyBmb3IgdGhlIEFsbG9jIGV2ZW50LiAgSWYgYSBUeCBvcgorKiBOb3RpZnkgY29tbWFuZCB3LyBSZWNsYWltIGhhcyBiZWVuIHByZXZpb3VzbHkgZXhlY3V0ZWQsIGl0J3MKKyogcG9zc2libGUgdGhlIGZpcnN0IEFsbG9jIGV2ZW50IGFmdGVyIGV4ZWN1dGlvbiBvZiB0aGlzIGNvbW1hbmQKKyogd2lsbCBiZSBmb3IgdGhlIHJlY2xhaW1lZCBidWZmZXIgYW5kIG5vdCB0aGUgb25lIHlvdSBhc2tlZCBmb3IuCisqIFRoaXMgY2FzZSBtdXN0IGJlIGhhbmRsZWQgaW4gdGhlIEFsbG9jIGV2ZW50IGhhbmRsZXIuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbGVuCQlhbGxvY2F0aW9uIGxlbmd0aCwgbXVzdCBiZSBhbiBldmVuIHZhbHVlCisqCQkJaW4gdGhlIHJhbmdlIFs0LTI0MDBdLiAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX2FsbG9jYXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBsZW4pCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwlpZiAoIChsZW4gJSAyKSB8fAorCSAgICAgbGVuIDwgSEZBMzg0eF9DTURfQUxMT0NfTEVOX01JTiB8fAorCSAgICAgbGVuID4gSEZBMzg0eF9DTURfQUxMT0NfTEVOX01BWCApIHsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0FMTE9DKTsKKwkJY21kLnBhcm0wID0gbGVuOworCQljbWQucGFybTEgPSAwOworCQljbWQucGFybTIgPSAwOworCisJCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCQlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCQlzcGluX3VubG9ja19iaCgmaHctPmNtZGxvY2spOworCX0KKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX3RyYW5zbWl0CisqCisqIEluc3RydWN0cyB0aGUgZmlybXdhcmUgdG8gdHJhbnNtaXQgYSBmcmFtZSBwcmV2aW91c2x5IGNvcGllZAorKiB0byBhIGdpdmVuIGJ1ZmZlci4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseSwgdGhlIFR4CisqIHJlc3VsdHMgYXJlIGF2YWlsYWJsZSB2aWEgdGhlIFR4IG9yIFR4RXhjIGV2ZW50cyAoaWYgdGhlIGZyYW1lCisqIGNvbnRyb2wgYml0cyBhcmUgc2V0KS4gIFRoZSByZWNsYWltIGFyZ3VtZW50IHNwZWNpZmllcyBpZiB0aGUKKyogRklEIHBhc3NlZCB3aWxsIGJlIHVzZWQgYnkgdGhlIGYvdyB0eCBwcm9jZXNzIG9yIHJldHVybmVkIGZvcgorKiB1c2Ugdy8gYW5vdGhlciB0cmFuc21pdCBjb21tYW5kLiAgSWYgcmVjbGFpbSBpcyBzZXQsIGV4cGVjdCBhbgorKiBBbGxvYyBldmVudCBzaWduYWxsaW5nIHRoZSBhdmFpbGliaWxpdHkgb2YgdGhlIEZJRCBmb3IgcmV1c2UuCisqCisqIE5PVEU6IGh3LT5jbWRsb2NrIE1VU1QgQkUgSEVMRCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIQorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCXJlY2xhaW0JCVswfDFdIGluZGljYXRlcyB3aGV0aGVyIHRoZSBnaXZlbiBGSUQgd2lsbAorKgkJCWJlIGhhbmRlZCBiYWNrICh2aWEgQWxsb2MgZXZlbnQpIGZvciByZXVzZS4KKyoJCQkoaG9zdCBvcmRlcikKKyoJcW9zCQlbMC0zXSBWYWx1ZSB0byBwdXQgaW4gdGhlIFFvUyBmaWVsZCBvZiB0aGUKKyoJCQl0eCBjb21tYW5kLCBpZGVudGlmaWVzIGEgcXVldWUgdG8gcGxhY2UgdGhlCisqCQkJb3V0Z29pbmcgZnJhbWUgaW4uCisqCQkJKGhvc3Qgb3JkZXIpCisqCWZpZAkJRklEIG9mIGJ1ZmZlciBjb250YWluaW5nIHRoZSBmcmFtZSB0aGF0IHdhcworKgkJCXByZXZpb3VzbHkgY29waWVkIHRvIE1BQyBtZW1vcnkgdmlhIHRoZSBiYXAuCisqCQkJKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKglody0+cmVzcDAgd2lsbCBjb250YWluIHRoZSBGSUQgYmVpbmcgdXNlZCBieSBhc3luYyB0eAorKglwcm9jZXNzLiAgSWYgcmVjbGFpbT09MCwgcmVzcDAgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgZmlkCisqCWFyZ3VtZW50LiAgSWYgcmVjbGFpbT09MSwgcmVzcDAgd2lsbCBiZSB0aGUgZGlmZmVyZW50IGFuZAorKglpcyB0aGUgdmFsdWUgdG8gd2F0Y2ggZm9yIGluIHRoZSBUeHxUeEV4YyB0byBpbmRpY2F0ZSBjb21wbGV0aW9uCisqCW9mIHRoZSBmcmFtZSBwYXNzZWQgaW4gZmlkLgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF90cmFuc21pdChoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmVjbGFpbSwgVUlOVDE2IHFvcywgVUlOVDE2IGZpZCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX1RYKSB8CisJCUhGQTM4NHhfQ01EX1JFQ0xfU0VUKHJlY2xhaW0pIHwKKwkJSEZBMzg0eF9DTURfUU9TX1NFVChxb3MpOworCWNtZC5wYXJtMCA9IGZpZDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9jbGVhcnBlcnNpc3QKKyoKKyogSW5zdHJ1Y3RzIHRoZSBmaXJtd2FyZSB0byBjbGVhciB0aGUgcGVyc2lzdGVuY2UgYml0IGluIGEgZ2l2ZW4KKyogRklELiAgVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiB0ZWxsaW5nIHRoZSBmaXJtd2FyZSB0byBkcm9wIHRoZQorKiBwZXJzaXN0ZW50IGZyYW1lLiAgVGhlIEZJRCBtdXN0IGJlIG9uZSB0aGF0IHdhcyBwcmV2aW91c2x5IHVzZWQKKyogdG8gdHJhbnNtaXQgYSBQUlNUIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWZpZAkJRklEIG9mIHRoZSBwZXJzaXN0ZW50IGZyYW1lIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfY2xlYXJwZXJzaXN0KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBmaWQpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0NMUlBSU1QpOworCWNtZC5wYXJtMCA9IGZpZDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9ub3RpZnkKKyoKKyogU2VuZHMgYW4gaW5mbyBmcmFtZSB0byB0aGUgZmlybXdhcmUgdG8gYWx0ZXIgdGhlIGJlaGF2aW9yCisqIG9mIHRoZSBmL3cgYXN5bmNoIHByb2Nlc3Nlcy4gIENhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBNQUMKKyogaXMgaW4gdGhlIGVuYWJsZWQgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJcmVjbGFpbQkJWzB8MV0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGdpdmVuIEZJRCB3aWxsCisqCQkJYmUgaGFuZGVkIGJhY2sgKHZpYSBBbGxvYyBldmVudCkgZm9yIHJldXNlLgorKgkJCShob3N0IG9yZGVyKQorKglmaWQJCUZJRCBvZiBidWZmZXIgY29udGFpbmluZyB0aGUgZnJhbWUgdGhhdCB3YXMKKyoJCQlwcmV2aW91c2x5IGNvcGllZCB0byBNQUMgbWVtb3J5IHZpYSB0aGUgYmFwLgorKgkJCShob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoJaHctPnJlc3AwIHdpbGwgY29udGFpbiB0aGUgRklEIGJlaW5nIHVzZWQgYnkgYXN5bmMgbm90aWZ5CisqCXByb2Nlc3MuICBJZiByZWNsYWltPT0wLCByZXNwMCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBmaWQKKyoJYXJndW1lbnQuICBJZiByZWNsYWltPT0xLCByZXNwMCB3aWxsIGJlIHRoZSBkaWZmZXJlbnQuCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX25vdGlmeShoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmVjbGFpbSwgVUlOVDE2IGZpZCwKKwkJICAgICAgIHZvaWQgKmJ1ZiwgVUlOVDE2IGxlbikKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX05PVElGWSkgfAorCQlIRkEzODR4X0NNRF9SRUNMX1NFVChyZWNsYWltKTsKKwljbWQucGFybTAgPSBmaWQ7CisJY21kLnBhcm0xID0gMDsKKwljbWQucGFybTIgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKyAgICAgICAgLyogQ29weSB0aGUgcmVjb3JkIHRvIEZJRCAqLworICAgICAgICByZXN1bHQgPSBoZmEzODR4X2NvcHlfdG9fYmFwKGh3LCBIRkEzODR4X0JBUF9QUk9DLCBody0+aW5mb2ZpZCwgMCwgYnVmLCBsZW4pOworICAgICAgICBpZiAoIHJlc3VsdCApIHsKKyAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygxLAorCQkJImNvcHlfdG9fYmFwKCUwNHgsIDAsICVkKSBmYWlsZWQsIHJlc3VsdD0weCV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaHctPmluZm9maWQsIGxlbiwgcmVzdWx0KTsKKwkJcmVzdWx0ID0gLUVJTzsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorCisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKworIGZhaWxlZDoKKwlzcGluX3VubG9ja19iaCgmaHctPmNtZGxvY2spOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKyNpZiAwCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfaW5xdWlyeQorKgorKiBSZXF1ZXN0cyBhbiBpbmZvIGZyYW1lIGZyb20gdGhlIGZpcm13YXJlLiAgVGhlIGluZm8gZnJhbWUgd2lsbAorKiBiZSBkZWxpdmVyZWQgYXN5bmNocm9ub3VzbHkgdmlhIHRoZSBJbmZvIGV2ZW50LgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWZpZAkJRklEIG9mIHRoZSBpbmZvIGZyYW1lIHJlcXVlc3RlZC4gKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgaGZhMzg0eF9jbWRfaW5xdWlyeShoZmEzODR4X3QgKmh3LCBVSU5UMTYgZmlkKQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9JTlEpOworCWNtZC5wYXJtMCA9IGZpZDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfYWNjZXNzCisqCisqIFJlcXVlc3RzIHRoYXQgYSBnaXZlbiByZWNvcmQgYmUgY29waWVkIHRvL2Zyb20gdGhlIHJlY29yZAorKiBidWZmZXIuICBJZiB3ZSdyZSB3cml0aW5nIGZyb20gdGhlIHJlY29yZCBidWZmZXIsIHRoZSBjb250ZW50cworKiBtdXN0IHByZXZpb3VzbHkgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gdGhlIHJlY29yZCBidWZmZXIgdmlhIHRoZQorKiBiYXAuICBJZiB3ZSdyZSByZWFkaW5nIGludG8gdGhlIHJlY29yZCBidWZmZXIsIHRoZSByZWNvcmQgY2FuCisqIGJlIHJlYWQgb3V0IG9mIHRoZSByZWNvcmQgYnVmZmVyIGFmdGVyIHRoaXMgY2FsbC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgl3cml0ZQkJWzB8MV0gY29weSB0aGUgcmVjb3JkIGJ1ZmZlciB0byB0aGUgZ2l2ZW4KKyoJCQljb25maWd1cmF0aW9uIHJlY29yZC4gKGhvc3Qgb3JkZXIpCisqCXJpZAkJUklEIG9mIHRoZSByZWNvcmQgdG8gcmVhZC93cml0ZS4gKGhvc3Qgb3JkZXIpCisqCWJ1ZgkJaG9zdCBzaWRlIHJlY29yZCBidWZmZXIuICBVcG9uIHJldHVybiBpdCB3aWxsCisqCQkJY29udGFpbiB0aGUgYm9keSBwb3J0aW9uIG9mIHRoZSByZWNvcmQgKG1pbnVzIHRoZQorKgkJCVJJRCBhbmQgbGVuKS4KKyoJbGVuCQlidWZmZXIgbGVuZ3RoIChpbiBieXRlcywgc2hvdWxkIG1hdGNoIHJlY29yZCBsZW5ndGgpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9hY2Nlc3MoaGZhMzg0eF90ICpodywgVUlOVDE2IHdyaXRlLCBVSU5UMTYgcmlkLAorCQkgICAgICAgdm9pZCogYnVmLCBVSU5UMTYgbGVuKQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKwloZmEzODR4X3JlY190CXJlYzsKKworCURCRkVOVEVSOworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDQsMCkpCisJLyogVGhpcyBzaG91bGQgTk9UIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCEgKi8KKwlpZiAoaW5faXJxKCkpIHsKKwkJV0xBTl9MT0dfRVJST1IoIktyYXAsIGluIEludGVycnVwdCBjb250ZXh0ISIpOworI2lmZGVmIFdMQU5fSU5DTFVERV9ERUJVRworCQlCVUcoKTsKKyNlbmRpZgorCX0KKyNlbmRpZgorCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCisJaWYgKHdyaXRlKSB7CisJCXJlYy5yaWQgPSBob3N0MmhmYTM4NHhfMTYocmlkKTsKKwkJcmVjLnJlY2xlbiA9IGhvc3QyaGZhMzg0eF8xNigobGVuLzIpICsgMSk7IC8qIG5vdGUgY29udmVyc2lvbiB0byB3b3JkcywgKzEgZm9yIHJpZCBmaWVsZCAqLworCQkvKiB3cml0ZSB0aGUgcmVjb3JkICovCisJCXJlc3VsdCA9IGhmYTM4NHhfY29weV90b19iYXA0KCBodywgSEZBMzg0eF9CQVBfUFJPQywgcmlkLCAwLAorCQkJCQkgICAgICAgJnJlYywgc2l6ZW9mKHJlYyksCisJCQkJCSAgICAgICBidWYsIGxlbiwKKwkJCQkJICAgICAgIE5VTEwsIDAsIE5VTEwsIDApOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDMsIkZhaWx1cmUgd3JpdGluZyByZWNvcmQgaGVhZGVyK2RhdGFcbiIpOworCQkJZ290byBmYWlsOworCQl9CisKKwl9CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0FDQ0VTUykgfAorCQlIRkEzODR4X0NNRF9XUklURV9TRVQod3JpdGUpOworCWNtZC5wYXJtMCA9IHJpZDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiQ2FsbCB0byBoZmEzODR4X2RvY21kX3dhaXQgZmFpbGVkICglZCAlZClcbiIsCisJCQkJcmVzdWx0LCBjbWQucmVzdWx0LnJlc3AwKTsKKwkJZ290byBmYWlsOworCX0KKworCWlmICghd3JpdGUpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X2Zyb21fYmFwKCBodywgSEZBMzg0eF9CQVBfUFJPQywgcmlkLCAwLCAmcmVjLCBzaXplb2YocmVjKSk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfREVCVUcoMywiQ2FsbCB0byBoZmEzODR4X2NvcHlfZnJvbV9iYXAgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCS8qIFZhbGlkYXRlIHRoZSByZWNvcmQgbGVuZ3RoICovCisJCWlmICggKChoZmEzODR4Mmhvc3RfMTYocmVjLnJlY2xlbiktMSkqMikgIT0gbGVuICkgeyAgLyogbm90ZSBib2R5IGxlbiBjYWxjdWxhdGlvbiBpbiBieXRlcyAqLworCQkJV0xBTl9MT0dfREVCVUcoMSwgIlJJRCBsZW4gbWlzbWF0Y2gsIHJpZD0weCUwNHggaGxlbj0lZCBmd2xlbj0lZFxuIiwKKwkJCQkJcmlkLCBsZW4sIChoZmEzODR4Mmhvc3RfMTYocmVjLnJlY2xlbiktMSkqMik7CisJCQlyZXN1bHQgPSAtRU5PREFUQTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCXJlc3VsdCA9IGhmYTM4NHhfY29weV9mcm9tX2JhcCggaHcsIEhGQTM4NHhfQkFQX1BST0MsIHJpZCwgc2l6ZW9mKHJlYyksIGJ1ZiwgbGVuKTsKKworCX0KKworIGZhaWw6CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX21vbml0b3IKKyoKKyogRW5hYmxlcyB0aGUgJ21vbml0b3IgbW9kZScgb2YgdGhlIE1BQy4gIEhlcmUncyB0aGUgZGVzY3JpcHRpb24gb2YKKyogbW9uaXRvciBtb2RlIHRoYXQgSSd2ZSByZWNlaXZlZCB0aHVzIGZhcjoKKyoKKyogICJUaGUgIm1vbml0b3IgbW9kZSIgb2Ygb3BlcmF0aW9uIGlzIHRoYXQgdGhlIE1BQyBwYXNzZXMgYWxsCisqICBmcmFtZXMgZm9yIHdoaWNoIHRoZSBQTENQIGNoZWNrcyBhcmUgY29ycmVjdC4gQWxsIHJlY2VpdmVkCisqICBNUERVcyBhcmUgcGFzc2VkIHRvIHRoZSBob3N0IHdpdGggTUFDIFBvcnQgPSA3LCB3aXRoIGEKKyogIHJlY2VpdmUgc3RhdHVzIG9mIGdvb2QsIEZDUyBlcnJvciwgb3IgdW5kZWNyeXB0YWJsZS4gUGFzc2luZworKiAgY2VydGFpbiBNUERVcyBpcyBhIHZpb2xhdGlvbiBvZiB0aGUgODAyLjExIHN0YW5kYXJkLCBidXQgdXNlZnVsCisqICBmb3IgYSBkZWJ1Z2dpbmcgdG9vbC4iICBOb3JtYWwgY29tbXVuaWNhdGlvbiBpcyBub3QgcG9zc2libGUKKyogIHdoaWxlIG1vbml0b3IgbW9kZSBpcyBlbmFibGVkLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWVuYWJsZQkJYSBjb2RlICgweDBifDB4MGYpIHRoYXQgZW5hYmxlcy9kaXNhYmxlcworKgkJCW1vbml0b3IgbW9kZS4gKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9tb25pdG9yKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBlbmFibGUpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX01PTklUT1IpIHwKKwkJSEZBMzg0eF9DTURfQUlORk9fU0VUKGVuYWJsZSk7CisJY21kLnBhcm0wID0gMDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2Rvd25sb2FkCisqCisqIFNldHMgdGhlIGNvbnRyb2xzIGZvciB0aGUgTUFDIGNvbnRyb2xsZXIgY29kZS9kYXRhIGRvd25sb2FkCisqIHByb2Nlc3MuICBUaGUgYXJndW1lbnRzIHNldCB0aGUgbW9kZSBhbmQgYWRkcmVzcyBhc3NvY2lhdGVkCisqIHdpdGggYSBkb3dubG9hZC4gIE5vdGUgdGhhdCB0aGUgYXV4IHJlZ2lzdGVycyBzaG91bGQgYmUgZW5hYmxlZAorKiBwcmlvciB0byBzZXR0aW5nIG9uZSBvZiB0aGUgZG93bmxvYWQgZW5hYmxlIG1vZGVzLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1vZGUJCTAgLSBEaXNhYmxlIHByb2dyYW1taW5nIGFuZCBiZWdpbiBjb2RlIGV4ZWMKKyoJCQkxIC0gRW5hYmxlIHZvbGF0aWxlIG1lbSBwcm9ncmFtbWluZworKgkJCTIgLSBFbmFibGUgbm9uLXZvbGF0aWxlIG1lbSBwcm9ncmFtbWluZworKgkJCTMgLSBQcm9ncmFtIG5vbi12b2xhdGlsZSBzZWN0aW9uIGZyb20gTlYgZG93bmxvYWQKKyoJCQkgICAgYnVmZmVyLgorKgkJCShob3N0IG9yZGVyKQorKglsb3dhZGRyCisqCWhpZ2hhZGRyCUZvciBtb2RlIDEsIHNldHMgdGhlIGhpZ2ggJiBsb3cgb3JkZXIgYml0cyBvZgorKgkJCXRoZSAiZGVzdGluYXRpb24gYWRkcmVzcyIuICBUaGlzIGFkZHJlc3Mgd2lsbCBiZQorKgkJCXRoZSBleGVjdXRpb24gc3RhcnQgYWRkcmVzcyB3aGVuIGRvd25sb2FkIGlzCisqCQkJc3Vic2VxdWVudGx5IGRpc2FibGVkLgorKgkJCUZvciBtb2RlIDIsIHNldHMgdGhlIGhpZ2ggJiBsb3cgb3JkZXIgYml0cyBvZgorKgkJCXRoZSBkZXN0aW5hdGlvbiBpbiBOViByYW0uCisqCQkJRm9yIG1vZGVzIDAgJiAzLCBzaG91bGQgYmUgemVyby4gKGhvc3Qgb3JkZXIpCisqCQkJTk9URTogdGhlc2UgYWRkcmVzcyBhcmdzIGFyZSBpbiBDTUQgZm9ybWF0CisqCWNvZGVsZW4JCUxlbmd0aCBvZiB0aGUgZGF0YSB0byB3cml0ZSBpbiBtb2RlIDIsCisqCQkJemVybyBvdGhlcndpc2UuIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfZG93bmxvYWQoaGZhMzg0eF90ICpodywgVUlOVDE2IG1vZGUsIFVJTlQxNiBsb3dhZGRyLAorCQkJCVVJTlQxNiBoaWdoYWRkciwgVUlOVDE2IGNvZGVsZW4pCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0RPV05MRCkgfAorCQlIRkEzODR4X0NNRF9QUk9HTU9ERV9TRVQobW9kZSk7CisJY21kLnBhcm0wID0gbG93YWRkcjsKKwljbWQucGFybTEgPSBoaWdoYWRkcjsKKwljbWQucGFybTIgPSBjb2RlbGVuOworCisJc3Bpbl9sb2NrX2JoKCZody0+Y21kbG9jayk7CisJcmVzdWx0ID0gaGZhMzg0eF9kbF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKwlzcGluX3VubG9ja19iaCgmaHctPmNtZGxvY2spOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9hdXhfZW5hYmxlCisqCisqIEdvZXMgdGhyb3VnaCB0aGUgcHJvY2VzcyBvZiBlbmFibGluZyB0aGUgYXV4aWxhcnkgcG9ydC4gIFRoaXMKKyogaXMgbmVjZXNzYXJ5IHByaW9yIHRvIHJhdyByZWFkcy93cml0ZXMgdG8gY2FyZCBkYXRhIHNwYWNlLgorKiBEaXJlY3QgYWNjZXNzIHRvIHRoZSBjYXJkIGRhdGEgc3BhY2UgaXMgb25seSB1c2VkIGZvciBkb3dubG9hZGluZworKiBjb2RlIGFuZCBkZWJ1Z2dpbmcuCisqIE5vdGUgdGhhdCBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgYXR0ZW1wdGluZworKiBhIGRvd25sb2FkLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXQpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfYXV4X2VuYWJsZShoZmEzODR4X3QgKmh3LCBpbnQgZm9yY2UpCit7CisJaW50CQlyZXN1bHQgPSAtRVRJTUVET1VUOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJVUlOVDMyCQlyZXRyaWVzX3JlbWFpbmluZzsKKwlVSU5UMTYJCXJlZzsKKwlVSU5UCQlhdXhlbl9taXJyb3IgPSBody0+YXV4ZW47CisKKwlEQkZFTlRFUjsKKworCS8qIENoZWNrIGZvciBleGlzdGluZyBlbmFibGUgKi8KKwlpZiAoIGh3LT5hdXhlbiApIHsKKwkJaHctPmF1eGVuKys7CisJCXJldHVybiAwOworCX0KKworCS8qIGFjcXVpcmUgdGhlIGxvY2sgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSggJihody0+Y21kbG9jayksIGZsYWdzKTsKKwkvKiB3YWl0IGZvciBjbWQgcmVnaXN0ZXIgYnVzeSBiaXQgdG8gY2xlYXIgKi8KKwlyZXRyaWVzX3JlbWFpbmluZyA9IDEwMDAwMDsKKwlkbyB7CisJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0NNRCk7CisJCXVkZWxheSgxMCk7CisJfQorCXdoaWxlIChIRkEzODR4X0NNRF9JU0JVU1kocmVnKSAmJiAtLXJldHJpZXNfcmVtYWluaW5nKTsKKwlpZiAocmV0cmllc19yZW1haW5pbmcgIT0gMCkgeworCQkvKiBidXN5IGJpdCBjbGVhciwgaXQncyBPSyB0byB3cml0ZSB0byBQYXJhbVggcmVncyAqLworCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9BVVhQVzAsCisJCQlIRkEzODR4X1BBUkFNMCk7CisJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0FVWFBXMSwKKwkJCUhGQTM4NHhfUEFSQU0xKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIEhGQTM4NHhfQVVYUFcyLAorCQkJSEZBMzg0eF9QQVJBTTIpOworCisJCS8qIFNldCB0aGUgYXV4IGVuYWJsZSBpbiB0aGUgQ29udHJvbCByZWdpc3RlciAqLworCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9DT05UUk9MX0FVWF9ET0VOQUJMRSwKKwkJCUhGQTM4NHhfQ09OVFJPTCk7CisKKwkJLyogTm93IHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwkJcmV0cmllc19yZW1haW5pbmcgPSAxMDAwMDA7CisJCWRvIHsKKwkJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0NPTlRST0wpOworCQkJdWRlbGF5KDEwKTsKKwkJfQorCQl3aGlsZSAoICgocmVnICYgKEJJVDE0fEJJVDE1KSkgIT0gSEZBMzg0eF9DT05UUk9MX0FVWF9JU0VOQUJMRUQpICYmCisJCQktLXJldHJpZXNfcmVtYWluaW5nICk7CisJCWlmIChyZXRyaWVzX3JlbWFpbmluZyAhPSAwKSB7CisJCQlyZXN1bHQgPSAwOworCQkJaHctPmF1eGVuKys7CisJCX0KKwl9CisKKwkvKiBGb3JjZSBpdCBlbmFibGVkIGV2ZW4gaWYgdGhlIGNvbW1hbmQgZmFpbGVkLCBpZiB0b2xkLi4gKi8KKwlpZiAoKGh3LT5hdXhlbiA9PSBhdXhlbl9taXJyb3IpICYmIGZvcmNlKQorCQlody0+YXV4ZW4rKzsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICYoaHctPmNtZGxvY2spLCBmbGFncyk7CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9hdXhfZGlzYWJsZQorKgorKiBHb2VzIHRocm91Z2ggdGhlIHByb2Nlc3Mgb2YgZGlzYWJsaW5nIHRoZSBhdXhpbGFyeSBwb3J0CisqIGVuYWJsZWQgd2l0aCBhdXhfZW5hYmxlKCkuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dCkKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9hdXhfZGlzYWJsZShoZmEzODR4X3QgKmh3KQoreworCWludAkJcmVzdWx0ID0gLUVUSU1FRE9VVDsKKwl1bnNpZ25lZCBsb25nICAgdGltZW91dDsKKwlVSU5UMTYJCXJlZyA9IDA7CisKKwlEQkZFTlRFUjsKKworCS8qIFNlZSBpZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgZW5hYmxlICovCisJaWYgKGh3LT5hdXhlbikgaHctPmF1eGVuLS07CisJaWYgKGh3LT5hdXhlbikgcmV0dXJuIDA7CisKKwkvKiBDbGVhciB0aGUgYXV4IGVuYWJsZSBpbiB0aGUgQ29udHJvbCByZWdpc3RlciAqLworCWhmYTM4NHhfc2V0cmVnKGh3LCAwLCBIRkEzODR4X1BBUkFNMCk7CisJaGZhMzg0eF9zZXRyZWcoaHcsIDAsIEhGQTM4NHhfUEFSQU0xKTsKKwloZmEzODR4X3NldHJlZyhodywgMCwgSEZBMzg0eF9QQVJBTTIpOworCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0NPTlRST0xfQVVYX0RPRElTQUJMRSwKKwkJSEZBMzg0eF9DT05UUk9MKTsKKworCS8qIE5vdyB3YWl0IGZvciBjb21wbGV0aW9uICovCisJdGltZW91dCA9IGppZmZpZXMgKyAxKkhaOworCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0NPTlRST0wpOworCXdoaWxlICggKChyZWcgJiAoQklUMTR8QklUMTUpKSAhPSBIRkEzODR4X0NPTlRST0xfQVVYX0lTRElTQUJMRUQpICYmCisJCXRpbWVfYmVmb3JlKGppZmZpZXMsdGltZW91dCkgKXsKKwkJdWRlbGF5KDEwKTsKKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ09OVFJPTCk7CisJfQorCWlmICgocmVnICYgKEJJVDE0fEJJVDE1KSkgPT0gSEZBMzg0eF9DT05UUk9MX0FVWF9JU0RJU0FCTEVEICkgeworCQlyZXN1bHQgPSAwOworCX0KKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfbG93X2xldmVsCisqCisqIFdyaXRlIHRlc3QgY29tbWFuZHMgdG8gdGhlIGNhcmQuICBTb21lIHRlc3QgY29tbWFuZHMgZG9uJ3QgbWFrZQorKiBzZW5zZSB3aXRob3V0IHByaW9yIHNldC11cC4gIEZvciBleGFtcGxlLCBjb250aW5vdXMgVFggaXNuJ3QgdmVyeQorKiB1c2VmdWwgdW50aWwgeW91IHNldCB0aGUgY2hhbm5lbC4gIFRoYXQgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqICAgICAgcHJvY2VzcyB0aHJlYWQKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9sb3dfbGV2ZWwoaGZhMzg0eF90ICpodywgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCkKK3sKKwlpbnQgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKwlEQkZFTlRFUjsKKworCS8qIERvIGkgbmVlZCBhIGhvc3QyaGZhLi4uIGNvbnZlcnNpb24gPyAqLworI2lmIDAKKwlwcmludGsoS0VSTl9JTkZPICIlI3ggJSN4ICUjeCAlI3hcbiIsIGNtZC0+Y21kLCBjbWQtPnBhcm0wLCBjbWQtPnBhcm0xLCBjbWQtPnBhcm0yKTsKKyNlbmRpZgorCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgY21kKTsKKwlzcGluX3VubG9ja19iaCgmaHctPmNtZGxvY2spOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qIFRPRE86IGRldGVybWluZSBpZiB0aGVzZSB3aWxsIGV2ZXIgYmUgbmVlZGVkICovCisjaWYgMAoraW50IGhmYTM4NHhfY21kX3JlYWRtaWYoaGZhMzg0eF90ICpodykKK3sKKwlEQkZFTlRFUjsKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKK2ludCBoZmEzODR4X2NtZF93cml0ZW1pZihoZmEzODR4X3QgKmh3KQoreworCURCRkVOVEVSOworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9tbWlfcmVhZAorKgorKiBSZWFkIG1taSByZWdpc3RlcnMuICBtbWkgaXMgaW50ZXJzaWwtc3BlYWsgZm9yIHRoZSBiYXNlYmFuZAorKiBwcm9jZXNzb3IgcmVnaXN0ZXJzLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIGh3ICAgICAgICAgICAgICBkZXZpY2Ugc3RydWN0dXJlCisqICAgICAgIHJlZ2lzdGVyICAgICAgICBUaGUgdGVzdCByZWdpc3RlciB0byBiZSBhY2Nlc3NlZCAobXVzdCBiZSBldmVuICMpLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgICAgICAgICAgICAgc3VjY2VzcworKiAgICAgICA+MCAgICAgICAgICAgICAgZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqICAgICAgIDwwICAgICAgICAgICAgICBkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqICAgICAgIHByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfbW1pX3JlYWQoaGZhMzg0eF90ICpodywgVUlOVDMyIGFkZHIsIFVJTlQzMiAqcmVzcCkKK3sKKyAgICAgICAgaW50ICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisgICAgICAgIERCRkVOVEVSOworCWNtZC5jbWQgPSAoVUlOVDE2KSAweDMwOworCWNtZC5wYXJtMCA9IChVSU5UMTYpIGFkZHI7CisJY21kLnBhcm0xID0gMDsKKwljbWQucGFybTIgPSAwOworCisgICAgICAgIC8qIERvIGkgbmVlZCBhIGhvc3QyaGZhLi4uIGNvbnZlcnNpb24gPyAqLworCXNwaW5fbG9ja19iaCgmaHctPmNtZGxvY2spOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisJc3Bpbl91bmxvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKworCSpyZXNwID0gKFVJTlQzMikgY21kLnJlc3VsdC5yZXNwMDsKKworICAgICAgICBEQkZFWElUOworICAgICAgICByZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX21taV93cml0ZQorKgorKiBSZWFkIG1taSByZWdpc3RlcnMuICBtbWkgaXMgaW50ZXJzaWwtc3BlYWsgZm9yIHRoZSBiYXNlYmFuZAorKiBwcm9jZXNzb3IgcmVnaXN0ZXJzLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIGh3ICAgICAgICAgICAgICBkZXZpY2Ugc3RydWN0dXJlCisqICAgICAgIGFkZHIgICAgICAgICAgICBUaGUgdGVzdCByZWdpc3RlciB0byBiZSBhY2Nlc3NlZCAobXVzdCBiZSBldmVuICMpLgorKiAgICAgICBkYXRhICAgICAgICAgICAgVGhlIGRhdGEgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlZ2lzdGVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgICAgICAgICAgICAgc3VjY2VzcworKiAgICAgICA+MCAgICAgICAgICAgICAgZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqICAgICAgIDwwICAgICAgICAgICAgICBkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqICAgICAgIHByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50CitoZmEzODR4X2RydnJfbW1pX3dyaXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBhZGRyLCBVSU5UMzIgZGF0YSkKK3sKKyAgICAgICAgaW50ICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisgICAgICAgIERCRkVOVEVSOworCWNtZC5jbWQgPSAoVUlOVDE2KSAweDMxOworCWNtZC5wYXJtMCA9IChVSU5UMTYpIGFkZHI7CisJY21kLnBhcm0xID0gKFVJTlQxNikgZGF0YTsKKwljbWQucGFybTIgPSAwOworCisgICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsIm1taSB3cml0ZSA6IGFkZHIgPSAweCUwOHhcbiIsIGFkZHIpOworICAgICAgICBXTEFOX0xPR19ERUJVRygxLCJtbWkgd3JpdGUgOiBkYXRhID0gMHglMDh4XG4iLCBkYXRhKTsKKworICAgICAgICAvKiBEbyBpIG5lZWQgYSBob3N0MmhmYS4uLiBjb252ZXJzaW9uID8gKi8KKwlzcGluX2xvY2tfYmgoJmh3LT5jbWRsb2NrKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCXNwaW5fdW5sb2NrX2JoKCZody0+Y21kbG9jayk7CisKKyAgICAgICAgREJGRVhJVDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiBUT0RPOiBkZXRlcm1pbmUgaWYgdGhlc2Ugd2lsbCBldmVyIGJlIG5lZWRlZCAqLworI2lmIDAKK2ludCBoZmEzODR4X2NtZF9yZWFkbWlmKGhmYTM4NHhfdCAqaHcpCit7CisgICAgICAgIERCRkVOVEVSOworICAgICAgICBEQkZFWElUOworICAgICAgICByZXR1cm4gMDsKK30KKworCitpbnQgaGZhMzg0eF9jbWRfd3JpdGVtaWYoaGZhMzg0eF90ICpodykKK3sKKyAgICAgICAgREJGRU5URVI7CisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiAwOworfQorI2VuZGlmCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jb3B5X2Zyb21fYmFwCisqCisqIENvcGllcyBhIGNvbGxlY3Rpb24gb2YgYnl0ZXMgZnJvbSB0aGUgTUFDIGNvbnRyb2xsZXIgbWVtb3J5IHZpYQorKiBvbmUgc2V0IG9mIEJBUCByZWdpc3RlcnMuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJYmFwCQlbMHwxXSB3aGljaCBCQVAgdG8gdXNlCisqCWlkCQlGSUQgb3IgUklELCBkZXN0aW5lZCBmb3IgdGhlIHNlbGVjdCByZWdpc3RlciAoaG9zdCBvcmRlcikKKyoJb2Zmc2V0CQlBbiBfZXZlbl8gb2Zmc2V0IGludG8gdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuCisqCQkJRklEL1JJRC4gIFdlIGhhdmVuJ3QgdGhlIG1lYW5zIHRvIHZhbGlkYXRlIHRoaXMsCisqCQkJc28gYmUgY2FyZWZ1bC4gKGhvc3Qgb3JkZXIpCisqCWJ1ZgkJcHRyIHRvIGFycmF5IG9mIGJ5dGVzCisqCWxlbgkJbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNmZXIgaW4gYnl0ZXMKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSB2YWx1ZSBvZiBvZmZzZXQgcmVnLgorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY29weV9mcm9tX2JhcChoZmEzODR4X3QgKmh3LCBVSU5UMTYgYmFwLCBVSU5UMTYgaWQsIFVJTlQxNiBvZmZzZXQsCisJCQkJdm9pZCAqYnVmLCBVSU5UIGxlbikKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJdW5zaWduZWQgbG9uZwlmbGFncyA9IDA7CisJVUlOVDgJCSpkID0gKFVJTlQ4KilidWY7CisJVUlOVAkJc2VsZWN0cmVnOworCVVJTlQJCW9mZnNldHJlZzsKKwlVSU5UCQlkYXRhcmVnOworCVVJTlQJCWk7CisJVUlOVDE2CQlyZWcgPSAwOworCisJREJGRU5URVI7CisKKwkvKiBWYWxpZGF0ZSBiYXAsIG9mZnNldCwgYnVmLCBhbmQgbGVuICovCisJaWYgKCAoYmFwID4gMSkgfHwKKwkgICAgIChvZmZzZXQgPiBIRkEzODR4X0JBUF9PRkZTRVRfTUFYKSB8fAorCSAgICAgKG9mZnNldCAlIDIpIHx8CisJICAgICAoYnVmID09IE5VTEwpIHx8CisJICAgICAobGVuID4gSEZBMzg0eF9CQVBfREFUQUxFTl9NQVgpICl7CisJICAgICAJcmVzdWx0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlzZWxlY3RyZWcgPSAoYmFwID09IDEpID8gIEhGQTM4NHhfU0VMRUNUMSA6IEhGQTM4NHhfU0VMRUNUMCA7CisJCW9mZnNldHJlZyA9IChiYXAgPT0gMSkgPyAgSEZBMzg0eF9PRkZTRVQxIDogSEZBMzg0eF9PRkZTRVQwIDsKKwkJZGF0YXJlZyA9ICAgKGJhcCA9PSAxKSA/ICBIRkEzODR4X0RBVEExIDogSEZBMzg0eF9EQVRBMCA7CisKKwkJLyogT2J0YWluIGxvY2sgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoICYoaHctPmJhcGxvY2spLCBmbGFncyk7CisKKwkJLyogV3JpdGUgaWQgdG8gc2VsZWN0IHJlZyAqLworCQloZmEzODR4X3NldHJlZyhodywgaWQsIHNlbGVjdHJlZyk7CisJCS8qIFdyaXRlIG9mZnNldCB0byBvZmZzZXQgcmVnICovCisJCWhmYTM4NHhfc2V0cmVnKGh3LCBvZmZzZXQsIG9mZnNldHJlZyk7CisJCS8qIFdhaXQgZm9yIG9mZnNldFtidXN5XSB0byBjbGVhciAoc2VlIEJBUF9USU1FT1VUKSAqLworCQlpID0gMDsKKwkJZG8geworCQkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIG9mZnNldHJlZyk7CisJCQlpZiAoIGkgPiAwICkgdWRlbGF5KDEwKTsKKwkJCWkrKzsKKwkJfSB3aGlsZSAoIGkgPCBwcmlzbTJfYmFwX3RpbWVvdXQgJiYgSEZBMzg0eF9PRkZTRVRfSVNCVVNZKHJlZykpOworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1BDSSkKKwkJLyogUmVsZWFzZSBsb2NrICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICYoaHctPmJhcGxvY2spLCBmbGFncyk7CisjZW5kaWYKKworCQlpZiAoIEhGQTM4NHhfT0ZGU0VUX0lTQlVTWShyZWcpICl7CisJCQkvKiBJZiB0aW1lb3V0LCByZXR1cm4gLUVUSU1FRE9VVCAqLworCQkJcmVzdWx0ID0gcmVnOworCQl9IGVsc2UgaWYgKCBIRkEzODR4X09GRlNFVF9JU0VSUihyZWcpICl7CisJCQkvKiBJZiBvZmZzZXRbZXJyXSA9PSAxLCByZXR1cm4gLUVJTlZBTCAqLworCQkJcmVzdWx0ID0gcmVnOworCQl9IGVsc2UgeworCQkJLyogUmVhZCBldmVuKGxlbikgYnVmIGNvbnRlbnRzIGZyb20gZGF0YSByZWcgKi8KKwkJCWZvciAoIGkgPSAwOyBpIDwgKGxlbiAmIDB4ZmZmZSk7IGkrPTIgKSB7CisJCQkJKihVSU5UMTYqKSgmKGRbaV0pKSA9CisJCQkJCWhmYTM4NHhfZ2V0cmVnX25vc3dhcChodywgZGF0YXJlZyk7CisJCQl9CisJCQkvKiBJZiBsZW4gb2RkLCBoYW5kbGUgbGFzdCBieXRlICovCisJCQlpZiAoIGxlbiAlIDIgKXsKKwkJCQlyZWcgPSBoZmEzODR4X2dldHJlZ19ub3N3YXAoaHcsIGRhdGFyZWcpOworCQkJCWRbbGVuLTFdID0gKChVSU5UOCopKCZyZWcpKVswXTsKKwkJCX0KKwkJfQorCisJCS8qIEFjY29yZGluZyB0byBJbnRlcnNpbCBlcnJhdGEgZGF0ZWQgOS8xNi8wMjoKKworCQkiSW4gUFJJU00gUENJIE1BQyBob3N0IGludGVyZmFjZSwgaWYgYm90aCBCQVBzIGFyZSBjb25jdXJyZW50bHkKKwkJIHJlcXVlc2luZyBtZW1vcnkgYWNjZXNzLCBib3RoIHdpbGwgYWNjZXB0IHRoZSBBY2suICAgVGhlcmUgaXMgbm8KKwkJIGZpcm13YXJlIHdvcmthcm91bmQgcG9zc2libGUuICBUbyBwcmV2ZW50IEJBUCBhY2Nlc3MgZmFpbHVyZXMgb3IKKwkJIGhhbmcgY29uZGl0aW9ucyB0aGUgaG9zdCBNVVNUIE5PVCBhY2Nlc3MgYm90aCBCQVBzIGluIHN1Y2Vzc2lvbgorCQkgdW5sZXNzIGF0IGxlYXN0IDV1cyBlbGFwc2VzIGJldHdlZW4gYWNjZXNzZXMuICBUaGUgc2FmZXN0IGNob2ljZQorCQkgaXMgdG8gVVNFIE9OTFkgT05FIEJBUCBmb3IgYWxsIGRhdGEgbW92ZW1lbnQgb3BlcmF0aW9ucy4iCisKKwkJIFdoYXQgdGhpcyBtZWFuczoKKworCQkgV2UgaGF2ZSB0byBzZXJpYWxpemUgQUxMIEJBUCBhY2Nlc3NlcywgYW5kIGZ1cnRoZXJtb3JlLCBhZGQgYSA1dXMKKwkJIGRlbGF5IGFmdGVyIGFjY2VzcyBpZiB3ZSdyZSB1c2luZyBhIFBDSSBwbGF0Zm9ybS4KKworCQkgVW5mb3J0dW5hdGVseSwgdGhpcyBtZWFucyB3ZSBoYXZlIHRvIGxvY2sgb3V0IGludGVycnVwdHMgdGhyb3Vnb3V0CisJCSB0aGUgZW50aXJlIEJBUCBjb3B5LgorCisJCSBJdCByZW1haW5zIHRvIGJlIHNlZW4gaWYgIkJBUCBhY2Nlc3MiIG1lYW5zICJCQVAgc2V0dXAiIG9yIHRoZSBtb3JlCisJCSBsaXRlcmFsIGRlZmluaXRpb24gb2YgImNvcHlpbmcgZGF0YSBiYWNrIGFuZCBmb3J0aCIgIEknbSBlcnJpbmcgZm9yCisJCSB0aGUgbGF0dGVyLCBzYWZlciBkZWZpbml0aW9uLiAgLS0gU0xQLgorCisJCSovCisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisJCXVkZWxheSg1KTsKKwkJLyogUmVsZWFzZSBsb2NrICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICYoaHctPmJhcGxvY2spLCBmbGFncyk7CisjZW5kaWYKKworCX0KKworCWlmIChyZXN1bHQpIHsKKwkgIFdMQU5fTE9HX0RFQlVHKDEsCisJCQkgICJjb3B5X2Zyb21fYmFwKDB4JTA0eCwgMCwgJWQpIGZhaWxlZCwgcmVzdWx0PTB4JXhcbiIsCisJCQkgIHJlZywgbGVuLCByZXN1bHQpOworCX0KKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY29weV90b19iYXAKKyoKKyogQ29waWVzIGEgY29sbGVjdGlvbiBvZiBieXRlcyB0byB0aGUgTUFDIGNvbnRyb2xsZXIgbWVtb3J5IHZpYQorKiBvbmUgc2V0IG9mIEJBUCByZWdpc3RlcnMuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJYmFwCQlbMHwxXSB3aGljaCBCQVAgdG8gdXNlCisqCWlkCQlGSUQgb3IgUklELCBkZXN0aW5lZCBmb3IgdGhlIHNlbGVjdCByZWdpc3RlciAoaG9zdCBvcmRlcikKKyoJb2Zmc2V0CQlBbiBfZXZlbl8gb2Zmc2V0IGludG8gdGhlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuCisqCQkJRklEL1JJRC4gIFdlIGhhdmVuJ3QgdGhlIG1lYW5zIHRvIHZhbGlkYXRlIHRoaXMsCisqCQkJc28gYmUgY2FyZWZ1bC4gKGhvc3Qgb3JkZXIpCisqCWJ1ZgkJcHRyIHRvIGFycmF5IG9mIGJ5dGVzCisqCWxlbgkJbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNmZXIgKGluIGJ5dGVzKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIHZhbHVlIG9mIG9mZnNldCByZWcuCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jb3B5X3RvX2JhcChoZmEzODR4X3QgKmh3LCBVSU5UMTYgYmFwLCBVSU5UMTYgaWQsIFVJTlQxNiBvZmZzZXQsCisJCQkJdm9pZCAqYnVmLCBVSU5UIGxlbikKK3sKKwlyZXR1cm4gaGZhMzg0eF9jb3B5X3RvX2JhcDQoaHcsIGJhcCwgaWQsIG9mZnNldCwgYnVmLCBsZW4sIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwsIDApOworfQorCitpbnQgaGZhMzg0eF9jb3B5X3RvX2JhcDQoaGZhMzg0eF90ICpodywgVUlOVDE2IGJhcCwgVUlOVDE2IGlkLCBVSU5UMTYgb2Zmc2V0LAorCQkJIHZvaWQgKmJ1ZiwgVUlOVCBsZW4xLCB2b2lkKiBidWYyLCBVSU5UIGxlbjIsCisJCQkgdm9pZCAqYnVmMywgVUlOVCBsZW4zLCB2b2lkICpidWY0LCBVSU5UIGxlbjQpCit7CisJaW50CQlyZXN1bHQgPSAwOworCXVuc2lnbmVkIGxvbmcJZmxhZ3MgPSAwOworCVVJTlQ4CQkqZDsKKwlVSU5UCQlzZWxlY3RyZWc7CisJVUlOVAkJb2Zmc2V0cmVnOworCVVJTlQJCWRhdGFyZWc7CisJVUlOVAkJaTsKKwlVSU5UMTYJCXJlZzsKKworCURCRkVOVEVSOworCisvLwlwcmludGsoS0VSTl9ERUJVRyAiY3RiMSAlZCBpZCAlMDR4IG8gJWQgJWQgJWQgJWQgJWRcbiIsIGJhcCwgaWQsIG9mZnNldCwgbGVuMSwgbGVuMiwgbGVuMywgbGVuNCk7CisKKwkvKiBWYWxpZGF0ZSBiYXAsIG9mZnNldCwgYnVmLCBhbmQgbGVuICovCisJaWYgKCAoYmFwID4gMSkgfHwKKwkgICAgIChvZmZzZXQgPiBIRkEzODR4X0JBUF9PRkZTRVRfTUFYKSB8fAorCSAgICAgKG9mZnNldCAlIDIpIHx8CisJICAgICAoYnVmID09IE5VTEwpIHx8CisJICAgICAobGVuMStsZW4yK2xlbjMrbGVuNCA+IEhGQTM4NHhfQkFQX0RBVEFMRU5fTUFYKSApeworCSAgICAgCXJlc3VsdCA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJc2VsZWN0cmVnID0gKGJhcCA9PSAxKSA/IEhGQTM4NHhfU0VMRUNUMSA6IEhGQTM4NHhfU0VMRUNUMDsKKwkJb2Zmc2V0cmVnID0gKGJhcCA9PSAxKSA/IEhGQTM4NHhfT0ZGU0VUMSA6IEhGQTM4NHhfT0ZGU0VUMDsKKwkJZGF0YXJlZyA9ICAgKGJhcCA9PSAxKSA/IEhGQTM4NHhfREFUQTEgICA6IEhGQTM4NHhfREFUQTA7CisJCS8qIE9idGFpbiBsb2NrICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCAmKGh3LT5iYXBsb2NrKSwgZmxhZ3MpOworCisJCS8qIFdyaXRlIGlkIHRvIHNlbGVjdCByZWcgKi8KKwkJaGZhMzg0eF9zZXRyZWcoaHcsIGlkLCBzZWxlY3RyZWcpOworCQl1ZGVsYXkoMTApOworCQkvKiBXcml0ZSBvZmZzZXQgdG8gb2Zmc2V0IHJlZyAqLworCQloZmEzODR4X3NldHJlZyhodywgb2Zmc2V0LCBvZmZzZXRyZWcpOworCQkvKiBXYWl0IGZvciBvZmZzZXRbYnVzeV0gdG8gY2xlYXIgKHNlZSBCQVBfVElNRU9VVCkgKi8KKwkJaSA9IDA7CisJCWRvIHsKKwkJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBvZmZzZXRyZWcpOworCQkJaWYgKCBpID4gMCApIHVkZWxheSgxMCk7CisJCQlpKys7CisJCX0gd2hpbGUgKCBpIDwgcHJpc20yX2JhcF90aW1lb3V0ICYmIEhGQTM4NHhfT0ZGU0VUX0lTQlVTWShyZWcpKTsKKworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1BDSSkKKwkJLyogUmVsZWFzZSBsb2NrICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICYoaHctPmJhcGxvY2spLCBmbGFncyk7CisjZW5kaWYKKworCQlpZiAoIEhGQTM4NHhfT0ZGU0VUX0lTQlVTWShyZWcpICl7CisJCQkvKiBJZiB0aW1lb3V0LCByZXR1cm4gcmVnICovCisJCQlyZXN1bHQgPSByZWc7CisJCX0gZWxzZSBpZiAoIEhGQTM4NHhfT0ZGU0VUX0lTRVJSKHJlZykgKXsKKwkJCS8qIElmIG9mZnNldFtlcnJdID09IDEsIHJldHVybiByZWcgKi8KKwkJCXJlc3VsdCA9IHJlZzsKKwkJfSBlbHNlIHsKKwkJCWQgPSAoVUlOVDgqKWJ1ZjsKKwkJCS8qIFdyaXRlIGV2ZW4obGVuMSkgYnVmIGNvbnRlbnRzIHRvIGRhdGEgcmVnICovCisJCQlmb3IgKCBpID0gMDsgaSA8IChsZW4xICYgMHhmZmZlKTsgaSs9MiApIHsKKwkJCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsCisJCQkJCSooVUlOVDE2KikoJihkW2ldKSksIGRhdGFyZWcpOworCQkJfQorCQkJaWYgKGxlbjEgJiAxKSB7CisJCQkJVUlOVDE2IGRhdGE7CisJCQkJVUlOVDggKmIgPSAoVUlOVDggKikgJmRhdGE7CisJCQkJYlswXSA9IGRbbGVuMS0xXTsKKwkJCQlpZiAoYnVmMiAhPSBOVUxMKSB7CisJCQkJCWQgPSAoVUlOVDgqKWJ1ZjI7CisJCQkJCWJbMV0gPSBkWzBdOworCQkJCQlsZW4yLS07CisJCQkJCWJ1ZjIrKzsKKwkJCQl9CisJCQkJaGZhMzg0eF9zZXRyZWdfbm9zd2FwKGh3LCBkYXRhLCBkYXRhcmVnKTsKKwkJCX0KKwkJCWlmICgoYnVmMiAhPSBOVUxMKSAmJiAobGVuMiA+IDApKSB7CisJCQkJLyogV3JpdGUgZXZlbihsZW4yKSBidWYgY29udGVudHMgdG8gZGF0YSByZWcgKi8KKwkJCQlkID0gKFVJTlQ4KilidWYyOworCQkJCWZvciAoIGkgPSAwOyBpIDwgKGxlbjIgJiAweGZmZmUpOyBpKz0yICkgeworCQkJCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsICooVUlOVDE2KikoJihkW2ldKSksIGRhdGFyZWcpOworCQkJCX0KKwkJCQlpZiAobGVuMiAmIDEpIHsKKwkJCQkJVUlOVDE2IGRhdGE7CisJCQkJCVVJTlQ4ICpiID0gKFVJTlQ4ICopICZkYXRhOworCQkJCQliWzBdID0gZFtsZW4yLTFdOworCQkJCQlpZiAoYnVmMyAhPSBOVUxMKSB7CisJCQkJCQlkID0gKFVJTlQ4KilidWYzOworCQkJCQkJYlsxXSA9IGRbMF07CisJCQkJCQlsZW4zLS07CisJCQkJCQlidWYzKys7CisJCQkJCX0KKwkJCQkJaGZhMzg0eF9zZXRyZWdfbm9zd2FwKGh3LCBkYXRhLCBkYXRhcmVnKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmICgoYnVmMyAhPSBOVUxMKSAmJiAobGVuMyA+IDApKSB7CisJCQkJLyogV3JpdGUgZXZlbihsZW4zKSBidWYgY29udGVudHMgdG8gZGF0YSByZWcgKi8KKwkJCQlkID0gKFVJTlQ4KilidWYzOworCQkJCWZvciAoIGkgPSAwOyBpIDwgKGxlbjMgJiAweGZmZmUpOyBpKz0yICkgeworCQkJCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsICooVUlOVDE2KikoJihkW2ldKSksIGRhdGFyZWcpOworCQkJCX0KKwkJCQlpZiAobGVuMyAmIDEpIHsKKwkJCQkJVUlOVDE2IGRhdGE7CisJCQkJCVVJTlQ4ICpiID0gKFVJTlQ4ICopICZkYXRhOworCQkJCQliWzBdID0gZFtsZW4zLTFdOworCQkJCQlpZiAoYnVmNCAhPSBOVUxMKSB7CisJCQkJCQlkID0gKFVJTlQ4KilidWY0OworCQkJCQkJYlsxXSA9IGRbMF07CisJCQkJCQlsZW40LS07CisJCQkJCQlidWY0Kys7CisJCQkJCX0KKwkJCQkJaGZhMzg0eF9zZXRyZWdfbm9zd2FwKGh3LCBkYXRhLCBkYXRhcmVnKTsKKwkJCQl9CisJCQl9CisJCQlpZiAoKGJ1ZjQgIT0gTlVMTCkgJiYgKGxlbjQgPiAwKSkgeworCQkJCS8qIFdyaXRlIGV2ZW4obGVuNCkgYnVmIGNvbnRlbnRzIHRvIGRhdGEgcmVnICovCisJCQkJZCA9IChVSU5UOCopYnVmNDsKKwkJCQlmb3IgKCBpID0gMDsgaSA8IChsZW40ICYgMHhmZmZlKTsgaSs9MiApIHsKKwkJCQkJaGZhMzg0eF9zZXRyZWdfbm9zd2FwKGh3LCAqKFVJTlQxNiopKCYoZFtpXSkpLCBkYXRhcmVnKTsKKwkJCQl9CisJCQkJaWYgKGxlbjQgJiAxKSB7CisJCQkJCVVJTlQxNiBkYXRhOworCQkJCQlVSU5UOCAqYiA9IChVSU5UOCAqKSAmZGF0YTsKKwkJCQkJYlswXSA9IGRbbGVuNC0xXTsKKwkJCQkJYlsxXSA9IDA7CisKKwkJCQkJaGZhMzg0eF9zZXRyZWdfbm9zd2FwKGh3LCBkYXRhLCBkYXRhcmVnKTsKKwkJCQl9CisJCQl9CisvLwkJCXByaW50ayhLRVJOX0RFQlVHICJjdGIyICVkIGlkICUwNHggbyAlZCAlZCAlZCAlZCAlZFxuIiwgYmFwLCBpZCwgb2Zmc2V0LCBsZW4xLCBsZW4yLCBsZW4zLCBsZW40KTsKKworCQl9CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisJCXVkZWxheSg1KTsKKwkJLyogUmVsZWFzZSBsb2NrICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICYoaHctPmJhcGxvY2spLCBmbGFncyk7CisjZW5kaWYKKworCX0KKworCWlmIChyZXN1bHQpCisJCVdMQU5fTE9HX0VSUk9SKCJjb3B5X3RvX2JhcCgpIGZhaWxlZC5cbiIpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NvcHlfZnJvbV9hdXgKKyoKKyogQ29waWVzIGEgY29sbGVjdGlvbiBvZiBieXRlcyBmcm9tIHRoZSBjb250cm9sbGVyIG1lbW9yeS4gIFRoZQorKiBBdXhpbGlhcnkgcG9ydCBNVVNUIGJlIGVuYWJsZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorKiBXZSBfbWlnaHRfIGJlIGluIGEgZG93bmxvYWQgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJY2FyZGFkZHIJYWRkcmVzcyBpbiBoZmEzODR4IGRhdGEgc3BhY2UgdG8gcmVhZAorKglhdXhjdGwJCWFkZHJlc3Mgc3BhY2Ugc2VsZWN0CisqCWJ1ZgkJcHRyIHRvIGRlc3RpbmF0aW9uIGhvc3QgYnVmZmVyCisqCWxlbgkJbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNmZXIgKGluIGJ5dGVzKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJYnVmIGNvbnRhaW5zIHRoZSBkYXRhIGNvcGllZAorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitoZmEzODR4X2NvcHlfZnJvbV9hdXgoCisJaGZhMzg0eF90ICpodywgVUlOVDMyIGNhcmRhZGRyLCBVSU5UMzIgYXV4Y3RsLCB2b2lkICpidWYsIFVJTlQgbGVuKQoreworCVVJTlQxNgkJY3VycnBhZ2U7CisJVUlOVDE2CQljdXJyb2Zmc2V0OworCVVJTlQJCWkgPSAwOworCisJREJGRU5URVI7CisKKwlpZiAoICEoaHctPmF1eGVuKSApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSJBdHRlbXB0IHRvIHJlYWQgMHglMDR4IHdoZW4gYXV4IG5vdCBlbmFibGVkXG4iLAorCQkJY2FyZGFkZHIpOworCQlyZXR1cm47CisKKwl9CisJLyogQnVpbGQgYXBwcm9wcmlhdGUgYXV4IHBhZ2UgYW5kIG9mZnNldCAqLworCWN1cnJwYWdlID0gSEZBMzg0eF9BVVhfTUtQQUdFKGNhcmRhZGRyKTsKKwljdXJyb2Zmc2V0ID0gSEZBMzg0eF9BVVhfTUtPRkYoY2FyZGFkZHIsIGF1eGN0bCk7CisJaGZhMzg0eF9zZXRyZWcoaHcsIGN1cnJwYWdlLCBIRkEzODR4X0FVWFBBR0UpOworCWhmYTM4NHhfc2V0cmVnKGh3LCBjdXJyb2Zmc2V0LCBIRkEzODR4X0FVWE9GRlNFVCk7CisJdWRlbGF5KDUpOwkvKiBiZWF0ICovCisKKwkvKiByZWFkIHRoZSBkYXRhICovCisJd2hpbGUgKCBpIDwgbGVuKSB7CisJCSooKFVJTlQxNiopKGJ1ZitpKSkgPSBoZmEzODR4X2dldHJlZ19ub3N3YXAoaHcsIEhGQTM4NHhfQVVYREFUQSk7CisJCWkrPTI7CisJCWN1cnJvZmZzZXQrPTI7CisJCWlmICggKGN1cnJvZmZzZXQmSEZBMzg0eF9BRERSX0FVWF9PRkZfTUFTSykgPgorCQkJSEZBMzg0eF9BRERSX0FVWF9PRkZfTUFYICkgeworCQkJY3VycnBhZ2UrKzsKKwkJCWN1cnJvZmZzZXQgPSAwOworCQkJY3Vycm9mZnNldCA9IEhGQTM4NHhfQVVYX01LT0ZGKGN1cnJvZmZzZXQsIGF1eGN0bCk7CisJCQloZmEzODR4X3NldHJlZyhodywgY3VycnBhZ2UsIEhGQTM4NHhfQVVYUEFHRSk7CisJCQloZmEzODR4X3NldHJlZyhodywgY3Vycm9mZnNldCwgSEZBMzg0eF9BVVhPRkZTRVQpOworCQkJdWRlbGF5KDUpOwkvKiBiZWF0ICovCisJCX0KKwl9CisJLyogTWFrZSBzdXJlIHRoZSBhdXhjdGwgYml0cyBhcmUgY2xlYXIgKi8KKwloZmEzODR4X3NldHJlZyhodywgMCwgSEZBMzg0eF9BVVhPRkZTRVQpOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY29weV90b19hdXgKKyoKKyogQ29waWVzIGEgY29sbGVjdGlvbiBvZiBieXRlcyB0byB0aGUgY29udHJvbGxlciBtZW1vcnkuICBUaGUKKyogQXV4aWxpYXJ5IHBvcnQgTVVTVCBiZSBlbmFibGVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyogV2UgX21pZ2h0XyBiZSBpbiBhIGRvd25sb2FkIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWNhcmRhZGRyCWFkZHJlc3MgaW4gaGZhMzg0eCBkYXRhIHNwYWNlIHRvIHJlYWQKKyoJYXV4Y3RsCQlhZGRyZXNzIHNwYWNlIHNlbGVjdAorKglidWYJCXB0ciB0byBkZXN0aW5hdGlvbiBob3N0IGJ1ZmZlcgorKglsZW4JCWxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zZmVyIChpbiBieXRlcykKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCUNvbnRyb2xsZXIgbWVtb3J5IG5vdyBjb250YWlucyBhIGNvcHkgb2YgYnVmCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQKK2hmYTM4NHhfY29weV90b19hdXgoCisJaGZhMzg0eF90ICpodywgVUlOVDMyIGNhcmRhZGRyLCBVSU5UMzIgYXV4Y3RsLCB2b2lkICpidWYsIFVJTlQgbGVuKQoreworCVVJTlQxNgkJY3VycnBhZ2U7CisJVUlOVDE2CQljdXJyb2Zmc2V0OworCVVJTlQJCWkgPSAwOworCisJREJGRU5URVI7CisKKwlpZiAoICEoaHctPmF1eGVuKSApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSJBdHRlbXB0IHRvIHJlYWQgMHglMDR4IHdoZW4gYXV4IG5vdCBlbmFibGVkXG4iLAorCQkJY2FyZGFkZHIpOworCQlyZXR1cm47CisKKwl9CisJLyogQnVpbGQgYXBwcm9wcmlhdGUgYXV4IHBhZ2UgYW5kIG9mZnNldCAqLworCWN1cnJwYWdlID0gSEZBMzg0eF9BVVhfTUtQQUdFKGNhcmRhZGRyKTsKKwljdXJyb2Zmc2V0ID0gSEZBMzg0eF9BVVhfTUtPRkYoY2FyZGFkZHIsIGF1eGN0bCk7CisJaGZhMzg0eF9zZXRyZWcoaHcsIGN1cnJwYWdlLCBIRkEzODR4X0FVWFBBR0UpOworCWhmYTM4NHhfc2V0cmVnKGh3LCBjdXJyb2Zmc2V0LCBIRkEzODR4X0FVWE9GRlNFVCk7CisJdWRlbGF5KDUpOwkvKiBiZWF0ICovCisKKwkvKiB3cml0ZSB0aGUgZGF0YSAqLworCXdoaWxlICggaSA8IGxlbikgeworCQloZmEzODR4X3NldHJlZ19ub3N3YXAoaHcsCisJCQkqKChVSU5UMTYqKShidWYraSkpLCBIRkEzODR4X0FVWERBVEEpOworCQlpKz0yOworCQljdXJyb2Zmc2V0Kz0yOworCQlpZiAoIGN1cnJvZmZzZXQgPiBIRkEzODR4X0FERFJfQVVYX09GRl9NQVggKSB7CisJCQljdXJycGFnZSsrOworCQkJY3Vycm9mZnNldCA9IDA7CisJCQloZmEzODR4X3NldHJlZyhodywgY3VycnBhZ2UsIEhGQTM4NHhfQVVYUEFHRSk7CisJCQloZmEzODR4X3NldHJlZyhodywgY3Vycm9mZnNldCwgSEZBMzg0eF9BVVhPRkZTRVQpOworCQkJdWRlbGF5KDUpOwkvKiBiZWF0ICovCisJCX0KKwl9CisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfd2FpdAorKgorKiBXYWl0cyBmb3IgYXZhaWxhYmlsaXR5IG9mIHRoZSBDb21tYW5kIHJlZ2lzdGVyLCB0aGVuCisqIGlzc3VlcyB0aGUgZ2l2ZW4gY29tbWFuZC4gIFRoZW4gcG9sbHMgdGhlIEV2c3RhdCByZWdpc3RlcgorKiB3YWl0aW5nIGZvciBjb21tYW5kIGNvbXBsZXRpb24uICBUaW1lb3V0cyBzaG91bGRuJ3QgYmUKKyogcG9zc2libGUgc2luY2Ugd2UncmUgcHJldmVudGluZyBvdmVybGFwcGluZyBjb21tYW5kcyBhbmQgYWxsCisqIGNvbW1hbmRzIHNob3VsZCBiZSBjbGVhcmVkIGFuZCBhY2tub3dsZWRnZWQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJZGV2aWNlIHN0cnVjdHVyZQorKiAgICAgICBjbWQgICAgICAgICAgICAgY21kIHN0cnVjdHVyZS4gIEluY2x1ZGVzIGFsbCBhcmd1bWVudHMgYW5kIHJlc3VsdAorKiAgICAgICAgICAgICAgICAgICAgICAgZGF0YSBwb2ludHMuICBBbGwgaW4gaG9zdCBvcmRlci4KKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgktRVRJTUVET1VUCXRpbWVkIG91dCB3YWl0aW5nIGZvciByZWdpc3RlciByZWFkeSBvcgorKgkJCWNvbW1hbmQgY29tcGxldGlvbgorKgk+MAkJY29tbWFuZCBpbmRpY2F0ZWQgZXJyb3IsIFN0YXR1cyBhbmQgUmVzcDAtMiBhcmUKKyoJCQlpbiBodyBzdHJ1Y3R1cmUuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IGhmYTM4NHhfZG9jbWRfd2FpdCggaGZhMzg0eF90ICpodywgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCkKK3sKKwlpbnQJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJVUlOVDE2CQlyZWcgPSAwOworCVVJTlQxNiAgICAgICAgICBjb3VudGVyOworCisJREJGRU5URVI7CisKKwlody0+Y21kZmxhZyA9IDA7CisJaHctPmNtZGRhdGEgPSBjbWQ7CisKKwkvKiB3YWl0IGZvciB0aGUgYnVzeSBiaXQgdG8gY2xlYXIgKi8KKwljb3VudGVyID0gMDsKKwlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9DTUQpOworCXdoaWxlICggSEZBMzg0eF9DTURfSVNCVVNZKHJlZykgJiYKKwkJKGNvdW50ZXIgPCAxMCkpIHsKKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQ01EKTsKKwkJY291bnRlcisrOworCQl1ZGVsYXkoMTApOworCX0KKworCWlmIChIRkEzODR4X0NNRF9JU0JVU1kocmVnKSkgeworCQlXTEFOX0xPR19FUlJPUigiaGZhMzg0eF9jbWQgdGltZW91dCgxKSwgcmVnPTB4JTBoeC5cbiIsIHJlZyk7CisJCWdvdG8gZmFpbGVkOworCX0KKwlpZiAoIUhGQTM4NHhfQ01EX0lTQlVTWShyZWcpKSB7CisJCS8qIGJ1c3kgYml0IGNsZWFyLCB3cml0ZSBjb21tYW5kICovCisJCWhmYTM4NHhfc2V0cmVnKGh3LCBjbWQtPnBhcm0wLCBIRkEzODR4X1BBUkFNMCk7CisJCWhmYTM4NHhfc2V0cmVnKGh3LCBjbWQtPnBhcm0xLCBIRkEzODR4X1BBUkFNMSk7CisJCWhmYTM4NHhfc2V0cmVnKGh3LCBjbWQtPnBhcm0yLCBIRkEzODR4X1BBUkFNMik7CisJCWhmYTM4NHhfc2V0cmVnKGh3LCBjbWQtPmNtZCwgSEZBMzg0eF9DTUQpOworCisjaWZkZWYgQ01EX0lSUQorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMiwwKSkKKwkJd2hpbGUgKCEgaHctPmNtZGZsYWcpCisJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZody0+Y21kcSk7CisjZWxzZQorCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaHctPmNtZHEsIGh3LT5jbWRmbGFnKTsKKyNlbmRpZgorCQlyZXN1bHQgPSBIRkEzODR4X1NUQVRVU19SRVNVTFRfR0VUKGNtZC0+c3RhdHVzKTsKKyNlbHNlIC8vIENNRF9JUlEKKwkJLyogTm93IHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwkJY291bnRlciA9IDA7CisJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0VWU1RBVCk7CisJCS8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBwcm9ibGVtLiAgSXQgdGFrZXMgYWJvdXQKKyAgICAgICAgICAgICAgICAgICAxMDBtcy4gIm5vcm1hbCIgY29tbWFuZHMgYXJlIHR5cGljYWxseSBpcyBhYm91dAorICAgICAgICAgICAgICAgICAgIDIwMC00MDAgdXMgKEkndmUgbmV2ZXIgc2VlbiBsZXNzIHRoYW4gMjAwKS4gIExvbmdlcgorICAgICAgICAgICAgICAgICAgIGlzIGJldHRlciBzbyB0aGF0IHdlJ3JlIG5vdCBoYW1tZXJpbmcgdGhlIGJ1cy4gKi8KKwkJd2hpbGUgKCAhSEZBMzg0eF9FVlNUQVRfSVNDTUQocmVnKSAmJgorCQkJKGNvdW50ZXIgPCA1MDAwKSkgeworCQkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfRVZTVEFUKTsKKwkJCWNvdW50ZXIrKzsKKwkJCXVkZWxheSgyMDApOworCQl9CisKKwkJaWYgKCBIRkEzODR4X0VWU1RBVF9JU0NNRChyZWcpICkgeworCQkJcmVzdWx0ID0gMDsKKwkJCWNtZC0+cmVzdWx0LnN0YXR1cyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1NUQVRVUyk7CisJCQljbWQtPnJlc3VsdC5yZXNwMCA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1JFU1AwKTsKKwkJCWNtZC0+cmVzdWx0LnJlc3AxID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfUkVTUDEpOworCQkJY21kLT5yZXN1bHQucmVzcDIgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9SRVNQMik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19DTUQsCisJCQkJSEZBMzg0eF9FVkFDSyk7CisJCQlyZXN1bHQgPSBIRkEzODR4X1NUQVRVU19SRVNVTFRfR0VUKGNtZC0+cmVzdWx0LnN0YXR1cyk7CisJCX0gZWxzZSB7CisJCQlXTEFOX0xPR19FUlJPUigiaGZhMzg0eF9jbWQgdGltZW91dCgyKSwgcmVnPTB4JTBoeC5cbiIsIHJlZyk7CisJCX0KKyNlbmRpZiAgLyogQ01EX0lSUSAqLworCX0KKworIGZhaWxlZDoKKwlody0+Y21kZmxhZyA9IDA7CisJaHctPmNtZGRhdGEgPSBOVUxMOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RsX2RvY21kX3dhaXQKKyoKKyogV2FpdHMgZm9yIGF2YWlsYWJpbGl0eSBvZiB0aGUgQ29tbWFuZCByZWdpc3RlciwgdGhlbgorKiBpc3N1ZXMgdGhlIGdpdmVuIGNvbW1hbmQuICBUaGVuIHBvbGxzIHRoZSBFdnN0YXQgcmVnaXN0ZXIKKyogd2FpdGluZyBmb3IgY29tbWFuZCBjb21wbGV0aW9uLiAgVGltZW91dHMgc2hvdWxkbid0IGJlCisqIHBvc3NpYmxlIHNpbmNlIHdlJ3JlIHByZXZlbnRpbmcgb3ZlcmxhcHBpbmcgY29tbWFuZHMgYW5kIGFsbAorKiBjb21tYW5kcyBzaG91bGQgYmUgY2xlYXJlZCBhbmQgYWNrbm93bGVkZ2VkLgorKgorKiBUaGlzIHJvdXRpbmUgaXMgb25seSB1c2VkIGZvciBkb3dubG9hZHMuICBTaW5jZSBpdCBkb2Vzbid0IGxvY2sgb3V0CisqIGludGVycnVwdHMgdGhlIHN5c3RlbSByZXNwb25zZSBpcyBtdWNoIGJldHRlci4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlkZXZpY2Ugc3RydWN0dXJlCisqICAgICAgIGNtZCAgICAgICAgICAgICBjbWQgc3RydWN0dXJlLiAgSW5jbHVkZXMgYWxsIGFyZ3VtZW50cyBhbmQgcmVzdWx0CisqICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHBvaW50cy4gIEFsbCBpbiBob3N0IG9yZGVyLgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCS1FVElNRURPVVQJdGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlZ2lzdGVyIHJlYWR5IG9yCisqCQkJY29tbWFuZCBjb21wbGV0aW9uCisqCT4wCQljb21tYW5kIGluZGljYXRlZCBlcnJvciwgU3RhdHVzIGFuZCBSZXNwMC0yIGFyZQorKgkJCWluIGh3IHN0cnVjdHVyZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgaGZhMzg0eF9kbF9kb2NtZF93YWl0KCBoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKQoreworCWludAkJcmVzdWx0ID0gLUVUSU1FRE9VVDsKKwl1bnNpZ25lZCBsb25nCXRpbWVvdXQ7CisJVUlOVDE2CQlyZWcgPSAwOworCisJREJGRU5URVI7CisJLyogd2FpdCBmb3IgdGhlIGJ1c3kgYml0IHRvIGNsZWFyICovCisJdGltZW91dCA9IGppZmZpZXMgKyAxKkhaOworCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0NNRCk7CisJd2hpbGUgKCBIRkEzODR4X0NNRF9JU0JVU1kocmVnKSAmJiB0aW1lX2JlZm9yZSggamlmZmllcywgdGltZW91dCkgKSB7CisJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0NNRCk7CisJCXVkZWxheSgxMCk7CisJfQorCWlmIChIRkEzODR4X0NNRF9JU0JVU1kocmVnKSkgeworCQlXTEFOX0xPR19XQVJOSU5HKCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgY21kIHJlZ2lzdGVyLlxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCWlmICghSEZBMzg0eF9DTURfSVNCVVNZKHJlZykpIHsKKwkJLyogYnVzeSBiaXQgY2xlYXIsIHdyaXRlIGNvbW1hbmQgKi8KKwkJaGZhMzg0eF9zZXRyZWcoaHcsIGNtZC0+cGFybTAsIEhGQTM4NHhfUEFSQU0wKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIGNtZC0+cGFybTEsIEhGQTM4NHhfUEFSQU0xKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIGNtZC0+cGFybTIsIEhGQTM4NHhfUEFSQU0yKTsKKwkJaGZhMzg0eF9zZXRyZWcoaHcsIGNtZC0+Y21kLCBIRkEzODR4X0NNRCk7CisKKwkJLyogTm93IHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwkJaWYgKCAoSEZBMzg0eF9DTURfQ01EQ09ERV9HRVQoY21kLT5jbWQpID09IEhGQTM4NHhfQ01EQ09ERV9ET1dOTEQpICkgeworCQkJLyogZGx0aW1lb3V0IGlzIGluIG1zICovCisJCQl0aW1lb3V0ID0gKCgoVUlOVDMyKWh3LT5kbHRpbWVvdXQpIC8gMTAwMFVMKSAqIEhaOworCQkJaWYgKCB0aW1lb3V0ID4gMCApIHsKKwkJCQl0aW1lb3V0ICs9IGppZmZpZXM7CisJCQl9IGVsc2UgeworCQkJCXRpbWVvdXQgPSBqaWZmaWVzICsgMSpIWjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXRpbWVvdXQgPSBqaWZmaWVzICsgMSpIWjsKKwkJfQorCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9FVlNUQVQpOworCQl3aGlsZSAoICFIRkEzODR4X0VWU1RBVF9JU0NNRChyZWcpICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsdGltZW91dCkgKSB7CisJCQl1ZGVsYXkoMTAwKTsKKwkJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0VWU1RBVCk7CisJCX0KKwkJaWYgKCBIRkEzODR4X0VWU1RBVF9JU0NNRChyZWcpICkgeworCQkJcmVzdWx0ID0gMDsKKwkJCWNtZC0+cmVzdWx0LnN0YXR1cyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1NUQVRVUyk7CisJCQljbWQtPnJlc3VsdC5yZXNwMCA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1JFU1AwKTsKKwkJCWNtZC0+cmVzdWx0LnJlc3AxID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfUkVTUDEpOworCQkJY21kLT5yZXN1bHQucmVzcDIgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9SRVNQMik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19DTUQsIEhGQTM4NHhfRVZBQ0spOworCQkJcmVzdWx0ID0gSEZBMzg0eF9TVEFUVVNfUkVTVUxUX0dFVChjbWQtPnJlc3VsdC5zdGF0dXMpOworCQl9CisJfQorCitmYWlsZWQ6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3N0YXJ0CisqCisqIElzc3VlcyB0aGUgTUFDIGluaXRpYWxpemUgY29tbWFuZCwgc2V0cyB1cCBzb21lIGRhdGEgc3RydWN0dXJlcywKKyogYW5kIGVuYWJsZXMgdGhlIGludGVycnVwdHMuICBBZnRlciB0aGlzIGZ1bmN0aW9uIGNvbXBsZXRlcywgdGhlCisqIGxvdy1sZXZlbCBzdHVmZiBzaG91bGQgYmUgcmVhZHkgZm9yIGFueS9hbGwgY29tbWFuZHMuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfc3RhcnQoaGZhMzg0eF90ICpodykKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwlVSU5UMTYJCQlyZWc7CisJaW50CQkJaTsKKwlpbnQJCQlqOworCURCRkVOVEVSOworCisJLyogY2FsbCBpbml0aWFsaXplICovCisJcmVzdWx0ID0gaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShodyk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJJbml0aWFsaXplIGNvbW1hbmQgZmFpbGVkLlxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIG1ha2Ugc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBhbmQgYW55IGxheWFib3V0IGV2ZW50cyBjbGVhcmVkICovCisJaGZhMzg0eF9zZXRyZWcoaHcsIDAsIEhGQTM4NHhfSU5URU4pOworCWhmYTM4NHhfc2V0cmVnKGh3LCAweGZmZmYsIEhGQTM4NHhfRVZBQ0spOworCisgICAgICAgIGh3LT50eGZpZF9oZWFkID0gMDsKKyAgICAgICAgaHctPnR4ZmlkX3RhaWwgPSAwOworICAgICAgICBody0+dHhmaWRfTiA9IEhGQTM4NHhfRFJWUl9GSURTVEFDS0xFTl9NQVg7CisgICAgICAgIG1lbXNldChody0+dHhmaWRfcXVldWUsIDAsIHNpemVvZihody0+dHhmaWRfcXVldWUpKTsKKworCS8qIEFsbG9jYXRlIHR4IGFuZCBub3RpZnkgRklEcyAqLworCS8qIEZpcnN0LCB0eCAqLworCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9EUlZSX0ZJRFNUQUNLTEVOX01BWC0xOyBpKyspIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfYWxsb2NhdGUoaHcsIEhGQTM4NHhfRFJWUl9UWEJVRl9NQVgpOworCQlpZiAocmVzdWx0ICE9IDApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJBbGxvY2F0ZSh0eCkgY29tbWFuZCBmYWlsZWQuXG4iKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCWogPSAwOworCQlkbyB7CisJCQlyZWcgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9FVlNUQVQpOworCQkJdWRlbGF5KDEwKTsKKwkJCWorKzsKKwkJfSB3aGlsZSAoICFIRkEzODR4X0VWU1RBVF9JU0FMTE9DKHJlZykgJiYgaiA8IDUwKTsgLyogNTAgaXMgdGltZW91dCAqLworCQlpZiAoIGogPj0gNTAgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGV2YWxsb2ModHgpLlxuIik7CisJCQlyZXN1bHQgPSAtRVRJTUVET1VUOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfQUxMT0NGSUQpOworCisJCXR4ZmlkX3F1ZXVlX2FkZChodywgcmVnKTsKKworCQlXTEFOX0xPR19ERUJVRyg0LCJody0+dHhmaWRfcXVldWVbJWRdPTB4JTA0eFxuIixpLHJlZyk7CisKKwkJcmVnID0gSEZBMzg0eF9FVkFDS19BTExPQ19TRVQoMSk7CisJCWhmYTM4NHhfc2V0cmVnKGh3LCByZWcsIEhGQTM4NHhfRVZBQ0spOworCisJfQorCisJLyogTm93LCB0aGUgaW5mbyBmcmFtZSBmaWQgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2NtZF9hbGxvY2F0ZShodywgSEZBMzg0eF9JTkZPRlJNX01BWExFTik7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJBbGxvY2F0ZSh0eCkgY29tbWFuZCBmYWlsZWQuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCWkgPSAwOworCWRvIHsKKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfRVZTVEFUKTsKKwkJdWRlbGF5KDEwKTsKKwkJaSsrOworCX0gd2hpbGUgKCAhSEZBMzg0eF9FVlNUQVRfSVNBTExPQyhyZWcpICYmIGkgPCA1MCk7IC8qIDUwIGlzIHRpbWVvdXQgKi8KKwlpZiAoIGkgPj0gNTAgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgZXZhbGxvYyhpbmZvKS5cbiIpOworCQlyZXN1bHQgPSAtRVRJTUVET1VUOworCQlnb3RvIGZhaWxlZDsKKwl9CisJaHctPmluZm9maWQgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9BTExPQ0ZJRCk7CisJcmVnID0gSEZBMzg0eF9FVkFDS19BTExPQ19TRVQoMSk7CisJaGZhMzg0eF9zZXRyZWcoaHcsIHJlZywgSEZBMzg0eF9FVkFDSyk7CisJV0xBTl9MT0dfREVCVUcoNCwiaHctPmluZm9maWQ9MHglMDR4XG4iLCBody0+aW5mb2ZpZCk7CisKKwkvKiBTZXQgc3dzdXBwb3J0IHJlZ3MgdG8gbWFnaWMgIyBmb3IgY2FyZCBwcmVzZW5jZSBkZXRlY3Rpb24gKi8KKwloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9EUlZSX01BR0lDLCBIRkEzODR4X1NXU1VQUE9SVDApOworCisJLyogTm93IGVuYWJsZSB0aGUgaW50ZXJydXB0cyBhbmQgc2V0IHRoZSBydW5uaW5nIHN0YXRlICovCisJaGZhMzg0eF9zZXRyZWcoaHcsIDB4ZmZmZiwgSEZBMzg0eF9FVlNUQVQpOworCWhmYTM4NHhfZXZlbnRzX2FsbChodyk7CisKKwlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX1JVTk5JTkc7CisKKwlnb3RvIGRvbmU7CitmYWlsZWQ6CisJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9zdG9wCisqCisqIElzc3VlcyB0aGUgaW5pdGlhbGl6ZSBjb21tYW5kIHRvIGxlYXZlIHVzIGluIHRoZSAncmVzZXQnIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3N0b3AoaGZhMzg0eF90ICpodykKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwlpbnQgaTsKKwlEQkZFTlRFUjsKKworCWRlbF90aW1lcl9zeW5jKCZody0+Y29tbXNxdWFsX3RpbWVyKTsKKworCWlmICggaHctPndsYW5kZXYtPmh3cmVtb3ZlZCApIHsKKwkJLyogb25seSBmbHVzaCB3aGVuIHdlJ3JlIHNodXR0aW5nIGRvd24gZm9yIGdvb2QgKi8KKwkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwl9CisKKwlpZiAoaHctPnN0YXRlID09IEhGQTM4NHhfU1RBVEVfUlVOTklORykgeworCQkvKgorCQkgKiBTZW5kIHRoZSBNQUMgaW5pdGlhbGl6ZSBjbWQuCisJCSAqLworCQloZmEzODR4X2NtZF9pbml0aWFsaXplKGh3KTsKKworCQkvKgorCQkgKiBNYWtlIGFic29sdXRlbHkgc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBhbmQgYW55CisJCSAqIGxheWFib3V0IGV2ZW50cyBjbGVhcmVkCisJCSAqLworCQloZmEzODR4X3NldHJlZyhodywgMCwgSEZBMzg0eF9JTlRFTik7CisJCWhmYTM4NHhfc2V0cmVnKGh3LCAweGZmZmYsIEhGQTM4NHhfRVZBQ0spOworCX0KKworCXRhc2tsZXRfa2lsbCgmaHctPmJhcF90YXNrbGV0KTsKKworCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQ7CisJaHctPnN0YXRlID0gSEZBMzg0eF9TVEFURV9JTklUOworCisJLyogQ2xlYXIgYWxsIHRoZSBwb3J0IHN0YXR1cyAqLworCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9OVU1QT1JUU19NQVg7IGkrKykgeworCQlody0+cG9ydF9lbmFibGVkW2ldID0gMDsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl90eGZyYW1lCisqCisqIFRha2VzIGEgZnJhbWUgZnJvbSBwcmlzbTJzdGEgYW5kIHF1ZXVlcyBpdCBmb3IgdHJhbnNtaXNzaW9uLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCXNrYgkJcGFja2V0IGJ1ZmZlciBzdHJ1Y3QuICBDb250YWlucyBhbiA4MDIuMTEKKyoJCQlkYXRhIGZyYW1lLgorKiAgICAgICBwODAyMTFfaGRyICAgICAgcG9pbnRzIHRvIHRoZSA4MDIuMTEgaGVhZGVyIGZvciB0aGUgcGFja2V0LgorKiBSZXR1cm5zOgorKgkwCQlTdWNjZXNzIGFuZCBtb3JlIGJ1ZmZzIGF2YWlsYWJsZQorKgkxCQlTdWNjZXNzIGJ1dCBubyBtb3JlIGJ1ZmZzCisqCTIJCUFsbG9jYXRpb24gZmFpbHVyZQorKgkzCQlNQUMgVHggY29tbWFuZCBmYWlsZWQKKyoJNAkJQnVmZmVyIGZ1bGwgb3IgcXVldWUgYnVzeQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl90eGZyYW1lKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCkKK3sKKwloZmEzODR4X3R4X2ZyYW1lX3QJdHhkZXNjOworCVVJTlQxNgkJCW1hY3EgPSAwOworCVVJTlQxNgkJCWZpZDsKKwlpbnQJCQlyZXN1bHQ7CisKKwlEQkZFTlRFUjsKKworCS8qIEJ1aWxkIFR4IGZyYW1lIHN0cnVjdHVyZSAqLworCS8qIFNldCB1cCB0aGUgY29udHJvbCBmaWVsZCAqLworCW1lbXNldCgmdHhkZXNjLCAwLCBzaXplb2YodHhkZXNjKSk7CisKKy8qIFR4IGNvbXBsZXRlIGFuZCBUeCBleGNlcHRpb24gZGlzYWJsZSBwZXIgZGxlYWNoLiAgTWlnaHQgYmUgY2F1c2luZworICogYnVmIGRlcGxldGlvbgorICovCisjZGVmaW5lIERPQk9USCAxCisjaWYgRE9CT1RICisJdHhkZXNjLnR4X2NvbnRyb2wgPQorCQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKKwkJSEZBMzg0eF9UWF9UWEVYX1NFVCgxKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMSk7CisjZWxpZiBET0VYQworCXR4ZGVzYy50eF9jb250cm9sID0KKwkJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCgwKSB8IEhGQTM4NHhfVFhfU1RSVUNUWVBFX1NFVCgxKSB8CisJCUhGQTM4NHhfVFhfVFhFWF9TRVQoMSkgfCBIRkEzODR4X1RYX1RYT0tfU0VUKDApOworI2Vsc2UKKwl0eGRlc2MudHhfY29udHJvbCA9CisJCUhGQTM4NHhfVFhfTUFDUE9SVF9TRVQoMCkgfCBIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQoMSkgfAorCQlIRkEzODR4X1RYX1RYRVhfU0VUKDApIHwgSEZBMzg0eF9UWF9UWE9LX1NFVCgwKTsKKyNlbmRpZgorCisJLyogaWYgd2UncmUgdXNpbmcgaG9zdCBXRVAsIGluY3JlYXNlIHNpemUgYnkgSVYrSUNWICovCisJaWYgKHA4MDIxMV93ZXAtPmRhdGEpIHsKKwkJdHhkZXNjLmRhdGFfbGVuID0gaG9zdDJoZmEzODR4XzE2KHNrYi0+bGVuKzgpOworCQkvLwkJdHhkZXNjLnR4X2NvbnRyb2wgfD0gSEZBMzg0eF9UWF9OT0VOQ1JZUFRfU0VUKDEpOworCX0gZWxzZSB7CisJCXR4ZGVzYy5kYXRhX2xlbiA9ICBob3N0MmhmYTM4NHhfMTYoc2tiLT5sZW4pOworCX0KKworCXR4ZGVzYy50eF9jb250cm9sID0gaG9zdDJoZmEzODR4XzE2KHR4ZGVzYy50eF9jb250cm9sKTsKKwkvKiBjb3B5IHRoZSBoZWFkZXIgb3ZlciB0byB0aGUgdHhkZXNjICovCisJbWVtY3B5KCYodHhkZXNjLmZyYW1lX2NvbnRyb2wpLCBwODAyMTFfaGRyLCBzaXplb2YocDgwMjExX2hkcl90KSk7CisKKwkvKiBTaW5jZSB0YnVzeSBpcyBzZXQgd2hlbmV2ZXIgdGhlIHN0YWNrIGlzIGVtcHR5LCB0aGVyZSBzaG91bGQKKwkgKiBhbHdheXMgYmUgc29tZXRoaW5nIG9uIHRoZSBzdGFjayBpZiB3ZSBnZXQgdG8gdGhpcyBwb2ludC4KKwkgKiBbTVNNXTogTk9UIFRSVUUhISEhISBzbyBJIGFkZGVkIHRoZSB0ZXN0IG9mIGZpZCBiZWxvdy4KKwkgKi8KKworCS8qIEFsbG9jYXRlIEZJRCAqLworCisJZmlkID0gdHhmaWRfcXVldWVfcmVtb3ZlKGh3KTsKKworCWlmICggZmlkID09IDAgKSB7IC8qIHN0YWNrIG9yIHF1ZXVlIHdhcyBlbXB0eSAqLworCQlyZXR1cm4gNDsKKwl9CisKKwkvKiBub3cgbGV0J3MgZ2V0IHRoZSBjbWRsb2NrICovCisJc3Bpbl9sb2NrKCZody0+Y21kbG9jayk7CisKKwkvKiBDb3B5IGRlc2NyaXB0b3IrcGF5bG9hZCB0byBGSUQgKi8KKyAgICAgICAgaWYgKHA4MDIxMV93ZXAtPmRhdGEpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X3RvX2JhcDQoaHcsIEhGQTM4NHhfQkFQX1BST0MsIGZpZCwgMCwKKwkJCQkJICAgICAgJnR4ZGVzYywgc2l6ZW9mKHR4ZGVzYyksCisJCQkJCSAgICAgIHA4MDIxMV93ZXAtPml2LCBzaXplb2YocDgwMjExX3dlcC0+aXYpLAorCQkJCQkgICAgICBwODAyMTFfd2VwLT5kYXRhLCBza2ItPmxlbiwKKwkJCQkJICAgICAgcDgwMjExX3dlcC0+aWN2LCBzaXplb2YocDgwMjExX3dlcC0+aWN2KSk7CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X3RvX2JhcDQoaHcsIEhGQTM4NHhfQkFQX1BST0MsIGZpZCwgMCwKKwkJCQkJICAgICAgJnR4ZGVzYywgc2l6ZW9mKHR4ZGVzYyksCisJCQkJCSAgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQkJCSAgICAgIE5VTEwsIDAsIE5VTEwsIDApOworCX0KKworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19ERUJVRygxLAorCQkJImNvcHlfdG9fYmFwKCUwNHgsICVkLCAlZCkgZmFpbGVkLCByZXN1bHQ9MHgleFxuIiwKKwkJCWZpZCwKKwkJIAlzaXplb2YodHhkZXNjKSwKKwkgCQlza2ItPmxlbiwKKwkJCXJlc3VsdCk7CisKKwkJLyogcHV0IHRoZSBmaWQgYmFjayBpbiB0aGUgcXVldWUgKi8KKwkJdHhmaWRfcXVldWVfYWRkKGh3LCBmaWQpOworCisJCXJlc3VsdCA9IDM7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIElzc3VlIFR4IGNvbW1hbmQgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2NtZF90cmFuc21pdChodywgSEZBMzg0eF9UWENNRF9SRUNMLCBtYWNxLCBmaWQpOworCisJaWYgKCByZXN1bHQgIT0gMCApIHsKKwkJdHhmaWRfcXVldWVfYWRkKGh3LCBmaWQpOworCisJCVdMQU5fTE9HX0RFQlVHKDEsImNtZF90eCglMDR4KSBmYWlsZWQsIHJlc3VsdD0lZFxuIiwKKwkJCWZpZCwgcmVzdWx0KTsKKwkJcmVzdWx0ID0gMzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogaW5kaWNhdGUgd2UgaGF2ZW4ndCBhbnkgYnVmZmVycywgaW50X2FsbG9jIHdpbGwgY2xlYXIgKi8KKwlyZXN1bHQgPSB0eGZpZF9xdWV1ZV9lbXB0eShodyk7CitmYWlsZWQ6CisKKwlzcGluX3VubG9jaygmaHctPmNtZGxvY2spOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9pbnRlcnJ1cHQKKyoKKyogRHJpdmVyIGludGVycnVwdCBoYW5kbGVyLgorKgorKiBBcmd1bWVudHM6CisqCWlycQkJaXJxIG51bWJlcgorKglkZXZfaWQJCXBvaW50ZXIgdG8gdGhlIGRldmljZQorKglyZWdzCQlyZWdpc3RlcnMKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCU1heSByZXN1bHQgaW4gYSBmcmFtZSBiZWluZyBwYXNzZWQgdXAgdGhlIHN0YWNrIG9yIGFuIGluZm8KKyoJZnJhbWUgYmVpbmcgaGFuZGxlZC4KKyoKKyogQ2FsbCBjb250ZXh0OgorKglVbW1tLCBjb3VsZCBpdCBiZSBpbnRlcnJ1cHQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lycXJldHVybl90IGhmYTM4NHhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCBQVF9SRUdTKQoreworCWludAkJCXJlZzsKKwl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2X2lkOworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlpbnQJCQlldl9yZWFkID0gMDsKKwlEQkZFTlRFUjsKKworCWlmICghd2xhbmRldiB8fCB3bGFuZGV2LT5od3JlbW92ZWQpCisJCXJldHVybiBJUlFfTk9ORTsgIC8qIE5vdCBtdWNoIHdlIGNhbiBkbyB3L28gaGFyZHdhcmUgKi8KKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpCisJaWYgKGh3LT5pb2Jhc2UgPT0gMCkgIC8qIFhYWCBGSVhNRSBQcm9wZXJseSAqLworCQlyZXR1cm4gSVJRX05PTkU7CisjZW5kaWYKKworCWZvciAoOztldl9yZWFkKyspIHsKKwkJaWYgKGV2X3JlYWQgPj0gcHJpc20yX2lycV9ldnJlYWRfbWF4KQorCQkJYnJlYWs7CisKKwkJLyogQ2hlY2sgc3dzdXBwb3J0IHJlZyBtYWdpYyAjIGZvciBjYXJkIHByZXNlbmNlICovCisJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1NXU1VQUE9SVDApOworCQlpZiAoIHJlZyAhPSBIRkEzODR4X0RSVlJfTUFHSUMpIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDIsICJpcnE9JWQsIG5vIG1hZ2ljLiAgQ2FyZCByZW1vdmVkPy5cbiIsIGlycSk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHJlYWQgdGhlIEV2U3RhdCByZWdpc3RlciBmb3IgaW50ZXJydXB0IGVuYWJsZWQgZXZlbnRzICovCisJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0VWU1RBVCk7CisKKwkJLyogQU5EIHdpdGggdGhlIGVuYWJsZWQgaW50ZXJydXB0cyAqLworCQlyZWcgJj0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfSU5URU4pOworCisJCS8qIEhhbmRsZSB0aGUgZXZlbnRzICovCisJCWlmICggSEZBMzg0eF9FVlNUQVRfSVNXVEVSUihyZWcpICl7CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCSJFcnJvcjogV1RFUlIgaW50ZXJydXB0IHJlY2VpdmVkICh1bmhhbmRsZWQpLlxuIik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19XVEVSUl9TRVQoMSksCisJCQkJSEZBMzg0eF9FVkFDSyk7CisJCX0KKworCQlpZiAoIEhGQTM4NHhfRVZTVEFUX0lTSU5GRFJPUChyZWcpICl7CisJCQloZmEzODR4X2ludF9pbmZkcm9wKHdsYW5kZXYpOworCQkJaGZhMzg0eF9zZXRyZWcoaHcsIEhGQTM4NHhfRVZBQ0tfSU5GRFJPUF9TRVQoMSksCisJCQkJSEZBMzg0eF9FVkFDSyk7CisJCX0KKworCQlpZiAoSEZBMzg0eF9FVlNUQVRfSVNCQVBfT1AocmVnKSkgeworCQkJLyogRGlzYWJsZSB0aGUgQkFQIGludGVycnVwdHMgKi8KKwkJCWhmYTM4NHhfZXZlbnRzX25vYmFwKGh3KTsKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJmh3LT5iYXBfdGFza2xldCk7CisJCX0KKworCQlpZiAoIEhGQTM4NHhfRVZTVEFUX0lTQUxMT0MocmVnKSApeworCQkJaGZhMzg0eF9pbnRfYWxsb2Mod2xhbmRldik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19BTExPQ19TRVQoMSksCisJCQkJSEZBMzg0eF9FVkFDSyk7CisJCX0KKworCQlpZiAoIEhGQTM4NHhfRVZTVEFUX0lTRFRJTShyZWcpICl7CisJCQloZmEzODR4X2ludF9kdGltKHdsYW5kZXYpOworCQkJaGZhMzg0eF9zZXRyZWcoaHcsIEhGQTM4NHhfRVZBQ0tfRFRJTV9TRVQoMSksCisJCQkJSEZBMzg0eF9FVkFDSyk7CisJCX0KKyNpZmRlZiBDTURfSVJRCisJCWlmICggSEZBMzg0eF9FVlNUQVRfSVNDTUQocmVnKSApeworCQkJaGZhMzg0eF9pbnRfY21kKHdsYW5kZXYpOworCQkJaGZhMzg0eF9zZXRyZWcoaHcsIEhGQTM4NHhfRVZBQ0tfQ01EX1NFVCgxKSwKKwkJCQkgICAgICAgSEZBMzg0eF9FVkFDSyk7CisJCX0KKyNlbmRpZgorCisJCS8qIGFsbG93IHRoZSBldnN0YXQgdG8gYmUgdXBkYXRlZCBhZnRlciB0aGUgZXZhY2sgKi8KKwkJdWRlbGF5KDIwKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIENNRF9JUlEKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2ludF9jbWQKKyoKKyogSGFuZGxlcyBjb21tYW5kIGNvbXBsZXRpb24gZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIGhmYTM4NHhfaW50X2NtZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCURCRkVOVEVSOworCisJLy8gY2hlY2sgdG8gbWFrZSBzdXJlIGl0J3MgdGhlIHJpZ2h0IGNvbW1hbmQ/CisJaWYgKGh3LT5jbWRkYXRhKSB7CisJCWh3LT5jbWRkYXRhLT5zdGF0dXMgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9TVEFUVVMpOworCQlody0+Y21kZGF0YS0+cmVzcDAgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9SRVNQMCk7CisJCWh3LT5jbWRkYXRhLT5yZXNwMSA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1JFU1AxKTsKKwkJaHctPmNtZGRhdGEtPnJlc3AyID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfUkVTUDIpOworCX0KKwlody0+Y21kZmxhZyA9IDE7CisKKwlwcmludGsoS0VSTl9JTkZPICJ1bS4gaW50X2NtZFxuIik7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmh3LT5jbWRxKTsKKworCS8vIFhYWFggcGVyZm9ybSBhIGJhcCBjb3B5IHRvbz8KKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2ludF9kdGltCisqCisqIEhhbmRsZXMgdGhlIERUSU0gZWFybHkgd2FybmluZyBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfaW50X2R0aW0od2xhbmRldmljZV90ICp3bGFuZGV2KQoreworI2lmIDAKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisjZW5kaWYKKwlEQkZFTlRFUjsKKwlwcmlzbTJzdGFfZXZfZHRpbSh3bGFuZGV2KTsKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9pbnRfaW5mZHJvcAorKgorKiBIYW5kbGVzIHRoZSBJbmZEcm9wIGV2ZW50LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF9pbnRfaW5mZHJvcCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisjaWYgMAorCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKyNlbmRpZgorCURCRkVOVEVSOworCXByaXNtMnN0YV9ldl9pbmZkcm9wKHdsYW5kZXYpOworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2ludF9pbmZvCisqCisqIEhhbmRsZXMgdGhlIEluZm8gZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXRhc2tsZXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF9pbnRfaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCVVJTlQxNgkJCXJlZzsKKwloZmEzODR4X0luZkZyYW1lX3QJaW5mOworCWludAkJCXJlc3VsdDsKKwlEQkZFTlRFUjsKKwkvKiBSZXRyaWV2ZSB0aGUgRklEICovCisJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfSU5GT0ZJRCk7CisKKwkvKiBSZXRyaWV2ZSB0aGUgbGVuZ3RoICovCisJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X2Zyb21fYmFwKCBodywKKwkJSEZBMzg0eF9CQVBfSU5ULCByZWcsIDAsICZpbmYuZnJhbWVsZW4sIHNpemVvZihVSU5UMTYpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSJjb3B5X2Zyb21fYmFwKDB4JTA0eCwgMCwgJWQpIGZhaWxlZCwgcmVzdWx0PTB4JXhcbiIsCisJCQlyZWcsIHNpemVvZihpbmYpLCByZXN1bHQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisJaW5mLmZyYW1lbGVuID0gaGZhMzg0eDJob3N0XzE2KGluZi5mcmFtZWxlbik7CisKKwkvKiBSZXRyaWV2ZSB0aGUgcmVzdCAqLworCXJlc3VsdCA9IGhmYTM4NHhfY29weV9mcm9tX2JhcCggaHcsCisJCUhGQTM4NHhfQkFQX0lOVCwgcmVnLCBzaXplb2YoVUlOVDE2KSwKKwkJJihpbmYuaW5mb3R5cGUpLCBpbmYuZnJhbWVsZW4gKiBzaXplb2YoVUlOVDE2KSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiY29weV9mcm9tX2JhcCgweCUwNHgsIDAsICVkKSBmYWlsZWQsIHJlc3VsdD0weCV4XG4iLAorCQkJcmVnLCBzaXplb2YoaW5mKSwgcmVzdWx0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJcHJpc20yc3RhX2V2X2luZm8od2xhbmRldiwgJmluZik7CitmYWlsZWQ6CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfaW50X3R4ZXhjCisqCisqIEhhbmRsZXMgdGhlIFR4RXhjIGV2ZW50LiAgQSBUcmFuc21pdCBFeGNlcHRpb24gZXZlbnQgaW5kaWNhdGVzCisqIHRoYXQgdGhlIE1BQydzIFRYIHByb2Nlc3Mgd2FzIHVuc3VjY2Vzc2Z1bCAtIHNvIHRoZSBwYWNrZXQgZGlkCisqIG5vdCBnZXQgdHJhbnNtaXR0ZWQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXRhc2tsZXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF9pbnRfdHhleGMod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlVSU5UMTYJCQlzdGF0dXM7CisJVUlOVDE2CQkJZmlkOworCWludAkJCXJlc3VsdCA9IDA7CisJREJGRU5URVI7CisJLyogQ29sbGVjdCB0aGUgc3RhdHVzIGFuZCBkaXNwbGF5ICovCisJZmlkID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfVFhDT01QTEZJRCk7CisJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X2Zyb21fYmFwKGh3LCBIRkEzODR4X0JBUF9JTlQsIGZpZCwgMCwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19ERUJVRygxLAorCQkJImNvcHlfZnJvbV9iYXAoMHglMDR4LCAwLCAlZCkgZmFpbGVkLCByZXN1bHQ9MHgleFxuIiwKKwkJCWZpZCwgc2l6ZW9mKHN0YXR1cyksIHJlc3VsdCk7CisJCWdvdG8gZmFpbGVkOworCX0KKwlzdGF0dXMgPSBoZmEzODR4Mmhvc3RfMTYoc3RhdHVzKTsKKwlwcmlzbTJzdGFfZXZfdHhleGMod2xhbmRldiwgc3RhdHVzKTsKK2ZhaWxlZDoKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9pbnRfdHgKKyoKKyogSGFuZGxlcyB0aGUgVHggZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXRhc2tsZXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF9pbnRfdHgod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlVSU5UMTYJCQlmaWQ7CisJVUlOVDE2CQkJc3RhdHVzOworCWludAkJCXJlc3VsdCA9IDA7CisJREJGRU5URVI7CisJZmlkID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfVFhDT01QTEZJRCk7CisJcmVzdWx0ID0gaGZhMzg0eF9jb3B5X2Zyb21fYmFwKGh3LCBIRkEzODR4X0JBUF9JTlQsIGZpZCwgMCwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19ERUJVRygxLAorCQkJImNvcHlfZnJvbV9iYXAoMHglMDR4LCAwLCAlZCkgZmFpbGVkLCByZXN1bHQ9MHgleFxuIiwKKwkJCWZpZCwgc2l6ZW9mKHN0YXR1cyksIHJlc3VsdCk7CisJCWdvdG8gZmFpbGVkOworCX0KKwlzdGF0dXMgPSBoZmEzODR4Mmhvc3RfMTYoc3RhdHVzKTsKKwlwcmlzbTJzdGFfZXZfdHgod2xhbmRldiwgc3RhdHVzKTsKK2ZhaWxlZDoKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfaW50X3J4CisqCisqIEhhbmRsZXMgdGhlIFJ4IGV2ZW50LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKgl0YXNrbGV0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfaW50X3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJVUlOVDE2CQkJcnhmaWQ7CisJaGZhMzg0eF9yeF9mcmFtZV90CXJ4ZGVzYzsKKwlpbnQJCQlyZXN1bHQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgaGRybGVuOworCVVJTlQxNiAgICAgICAgICAgICAgICAgIGZjOworCXA4MDIxMV9yeG1ldGFfdAkqcnhtZXRhOworCXN0cnVjdCBza19idWZmICAgICAgICAgICpza2IgPSBOVUxMOworCVVJTlQ4ICpkYXRhcDsKKworCURCRkVOVEVSOworCisJLyogR2V0IHRoZSBGSUQgKi8KKwlyeGZpZCA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X1JYRklEKTsKKwkvKiBHZXQgdGhlIGRlc2NyaXB0b3IgKGluY2x1ZGluZyBoZWFkZXJzKSAqLworCXJlc3VsdCA9IGhmYTM4NHhfY29weV9mcm9tX2JhcChodywKKwkJCUhGQTM4NHhfQkFQX0lOVCwKKwkJCXJ4ZmlkLAorCQkJMCwKKwkJCSZyeGRlc2MsCisJCQlzaXplb2YocnhkZXNjKSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiY29weV9mcm9tX2JhcCgweCUwNHgsICVkLCAlZCkgZmFpbGVkLCByZXN1bHQ9MHgleFxuIiwKKwkJCXJ4ZmlkLAorCQkJMCwKKwkJCXNpemVvZihyeGRlc2MpLAorCQkJcmVzdWx0KTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEJ5dGUgb3JkZXIgY29udmVydCBvbmNlIHVwIGZyb250LiAqLworCXJ4ZGVzYy5zdGF0dXMgPQloZmEzODR4Mmhvc3RfMTYocnhkZXNjLnN0YXR1cyk7CisJcnhkZXNjLnRpbWUgPQloZmEzODR4Mmhvc3RfMzIocnhkZXNjLnRpbWUpOworCisJLyogZHJvcCBlcnJvcnMgYW5kIHdoYXRub3QgaW4gcHJvbWlzYyBtb2RlICovCisJaWYgKCggd2xhbmRldi0+bmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDICkgJiYKKwkgICAgKEhGQTM4NHhfUlhTVEFUVVNfSVNGQ1NFUlIocnhkZXNjLnN0YXR1cykgfHwKKwkgICAgIEhGQTM4NHhfUlhTVEFUVVNfSVNVTkRFQ1IocnhkZXNjLnN0YXR1cykpKQorCSAgZ290byBkb25lOworCisJLyogTm93IGhhbmRsZSBmcmFtZSBiYXNlZCBvbiBwb3J0IyAqLworCXN3aXRjaCggSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVChyeGRlc2Muc3RhdHVzKSApCisJeworCWNhc2UgMDoKKworCQlmYyA9IGllZWUyaG9zdDE2KHJ4ZGVzYy5mcmFtZV9jb250cm9sKTsKKworCQkvKiBJZiBleGNsdWRlIGFuZCB3ZSByZWNlaXZlIGFuIHVuZW5jcnlwdGVkLCBkcm9wIGl0ICovCisJCWlmICggKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCkgJiYKKwkJICAgICAhV0xBTl9HRVRfRkNfSVNXRVAoZmMpKSB7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQloZHJsZW4gPSBwODAyMTFfaGVhZGVybGVuKGZjKTsKKworCQkvKiBBbGxvY2F0ZSB0aGUgYnVmZmVyLCBub3RlIENSQyAoYWthIEZDUykuIHBiYWxsb2MgKi8KKwkJLyogYXNzdW1lcyB0aGVyZSBuZWVkcyB0byBiZSBzcGFjZSBmb3Igb25lICovCisJCXNrYiA9IGRldl9hbGxvY19za2IoaGZhMzg0eDJob3N0XzE2KHJ4ZGVzYy5kYXRhX2xlbikgKyBoZHJsZW4gKyBXTEFOX0NSQ19MRU4gKyAyKTsgLyogYSBsaXR0bGUgZXh0cmEgKi8KKworCQlpZiAoICEgc2tiICkgeworCQkJV0xBTl9MT0dfRVJST1IoImFsbG9jX3NrYiBmYWlsZWQuXG4iKTsKKwkJCWdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICB9CisKKwkJc2tiLT5kZXYgPSB3bGFuZGV2LT5uZXRkZXY7CisKKwkJLyogdGhlb3JldGljYWxseSBhbGlnbiB0aGUgSVAgaGVhZGVyIG9uIGEgMzItYml0IHdvcmQuICovCisJCWlmICggaGRybGVuID09IFdMQU5fSERSX0E0X0xFTiApCisJCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCisJCS8qIENvcHkgdGhlIDgwMi4xMSBoZHIgdG8gdGhlIGJ1ZmZlciAqLworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBXTEFOX0hEUl9BM19MRU4pOworCQltZW1jcHkoZGF0YXAsICZyeGRlc2MuZnJhbWVfY29udHJvbCwgV0xBTl9IRFJfQTNfTEVOKTsKKworCQkvKiBTbmFnIHRoZSBBNCBhZGRyZXNzIGlmIHByZXNlbnQgKi8KKwkJaWYgKGhkcmxlbiA9PSBXTEFOX0hEUl9BNF9MRU4pIHsKKwkJCWRhdGFwID0gc2tiX3B1dChza2IsIFdMQU5fQUREUl9MRU4pOworCQkJbWVtY3B5KGRhdGFwLCAmcnhkZXNjLmFkZHJlc3M0LCBXTEFOX0hEUl9BM19MRU4pOworCQl9CisKKwkJLyogd2UgY2FuIGNvbnZlcnQgdGhlIGRhdGFfbGVuIGFzIHdlIHBhc3NlZCB0aGUgb3JpZ2luYWwgb24gKi8KKwkJcnhkZXNjLmRhdGFfbGVuID0gaGZhMzg0eDJob3N0XzE2KHJ4ZGVzYy5kYXRhX2xlbik7CisKKwkJLyogQ29weSB0aGUgcGF5bG9hZCBkYXRhIHRvIHRoZSBidWZmZXIgKi8KKwkJaWYgKCByeGRlc2MuZGF0YV9sZW4gPiAwICkgeworCQkJZGF0YXAgPSBza2JfcHV0KHNrYiwgcnhkZXNjLmRhdGFfbGVuKTsKKwkJCXJlc3VsdCA9IGhmYTM4NHhfY29weV9mcm9tX2JhcChodywKKwkJCQlIRkEzODR4X0JBUF9JTlQsIHJ4ZmlkLCBIRkEzODR4X1JYX0RBVEFfT0ZGLAorCQkJCWRhdGFwLCByeGRlc2MuZGF0YV9sZW4pOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkJImNvcHlfZnJvbV9iYXAoMHglMDR4LCAlZCwgJWQpIGZhaWxlZCwgcmVzdWx0PTB4JXhcbiIsCisJCQkJCXJ4ZmlkLAorCQkJCQlIRkEzODR4X1JYX0RBVEFfT0ZGLAorCQkJCQlyeGRlc2MuZGF0YV9sZW4sCisJCQkJCXJlc3VsdCk7CisJCQkJZ290byBmYWlsZWQ7CisJCQl9CisJCX0KKwkJLyogdGhlIHByaXNtMiBjYXJkcyBkb24ndCByZXR1cm4gdGhlIEZDUyAqLworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBXTEFOX0NSQ19MRU4pOworCQltZW1zZXQgKGRhdGFwLCAweGZmLCBXTEFOX0NSQ19MRU4pOworCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCisJCS8qIEF0dGFjaCB0aGUgcnhtZXRhLCBzZXQgc29tZSBzdHVmZiAqLworCQlwODAyMTFza2JfcnhtZXRhX2F0dGFjaCh3bGFuZGV2LCBza2IpOworCQlyeG1ldGEgPSBQODAyMTFTS0JfUlhNRVRBKHNrYik7CisJCXJ4bWV0YS0+bWFjdGltZSA9IHJ4ZGVzYy50aW1lOworCQlyeG1ldGEtPnJ4cmF0ZSA9IHJ4ZGVzYy5yYXRlOworCQlyeG1ldGEtPnNpZ25hbCA9IHJ4ZGVzYy5zaWduYWwgLSBody0+ZGJtYWRqdXN0OworCQlyeG1ldGEtPm5vaXNlID0gcnhkZXNjLnNpbGVuY2UgLSBody0+ZGJtYWRqdXN0OworCisJCXByaXNtMnN0YV9ldl9yeCh3bGFuZGV2LCBza2IpOworCQlnb3RvIGRvbmU7CisJY2FzZSA3OgorCisgICAgICAgIAlpZiAoICEgSEZBMzg0eF9SWFNUQVRVU19JU0ZDU0VSUihyeGRlc2Muc3RhdHVzKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfaW50X3J4bW9uaXRvciggd2xhbmRldiwgcnhmaWQsICZyeGRlc2MpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygzLCJSZWNlaXZlZCBtb25pdG9yIGZyYW1lOiBGQ1NlcnIgc2V0XG4iKTsKKyAgICAgICAgICAgICAgICB9CisJCWdvdG8gZG9uZTsKKworCWRlZmF1bHQ6CisKKwkJV0xBTl9MT0dfV0FSTklORygiUmVjZWl2ZWQgZnJhbWUgb24gdW5zdXBwb3J0ZWQgcG9ydD0lZFxuIiwKKwkJCUhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQocnhkZXNjLnN0YXR1cykgKTsKKwkJZ290byBkb25lOworCX0KKworIGZhaWxlZDoKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKyBkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2ludF9yeG1vbml0b3IKKyoKKyogSGVscGVyIGZ1bmN0aW9uIGZvciBpbnRfcnguICBIYW5kbGVzIG1vbml0b3IgZnJhbWVzLgorKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBGQ1MgYW5kIHNldHMgaXQKKyogdG8gMHhmZmZmZmZmZi4gIFRoZSBoZmEzODR4IGRvZXNuJ3QgZ2l2ZSB1cyB0aGUgRkNTIHZhbHVlIGJ1dCB0aGUKKyogaGlnaGVyIGxheWVycyBleHBlY3QgaXQuICAweGZmZmZmZmZmIGlzIHVzZWQgYXMgYSBmbGFnIHRvIGluZGljYXRlCisqIHRoZSBGQ1MgaXMgYm9ndXMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCXJ4ZmlkCQlyZWNlaXZlZCBGSUQKKyoJcnhkZXNjCQlyeCBkZXNjcmlwdG9yIHJlYWQgZnJvbSBjYXJkIGluIGludF9yeAorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJQWxsb2NhdGVzIGFuIHNrYiBhbmQgcGFzc2VzIGl0IHVwIHZpYSB0aGUgUEZfUEFDS0VUIGludGVyZmFjZS4KKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF9pbnRfcnhtb25pdG9yKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQxNiByeGZpZCwKKwkJCQkgICBoZmEzODR4X3J4X2ZyYW1lX3QgKnJ4ZGVzYykKK3sKKwloZmEzODR4X3QJCQkqaHcgPSB3bGFuZGV2LT5wcml2OworCVVJTlQJCQkJaGRybGVuID0gMDsKKwlVSU5UCQkJCWRhdGFsZW4gPSAwOworCVVJTlQJCQkJc2tibGVuID0gMDsKKwlVSU5UCQkJCXRydW5jYXRlZCA9IDA7CisJVUlOVDgJCQkJKmRhdGFwOworCVVJTlQxNgkJCQlmYzsKKwlzdHJ1Y3Qgc2tfYnVmZgkJCSpza2I7CisKKwlEQkZFTlRFUjsKKwkvKiBEb24ndCBmb3JnZXQgdGhlIHN0YXR1cywgdGltZSwgYW5kIGRhdGFfbGVuIGZpZWxkcyBhcmUgaW4gaG9zdCBvcmRlciAqLworCS8qIEZpZ3VyZSBvdXQgaG93IGJpZyB0aGUgZnJhbWUgaXMgKi8KKwlmYyA9IGllZWUyaG9zdDE2KHJ4ZGVzYy0+ZnJhbWVfY29udHJvbCk7CisJaGRybGVuID0gcDgwMjExX2hlYWRlcmxlbihmYyk7CisJZGF0YWxlbiA9IGhmYTM4NHgyaG9zdF8xNihyeGRlc2MtPmRhdGFfbGVuKTsKKworCS8qIEFsbG9jYXRlIGFuIGluZCBtZXNzYWdlK2ZyYW1lc2l6ZSBza2IgKi8KKwlza2JsZW4gPSBzaXplb2YocDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90KSArCisJCWhkcmxlbiArIGRhdGFsZW4gKyBXTEFOX0NSQ19MRU47CisKKwkvKiBzYW5pdHkgY2hlY2sgdGhlIGxlbmd0aCAqLworCWlmICggc2tibGVuID4KKwkJKHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpICsKKwkJV0xBTl9IRFJfQTRfTEVOICsgV0xBTl9EQVRBX01BWExFTiArIFdMQU5fQ1JDX0xFTikgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsICJvdmVybGVuIGZybTogbGVuPSVkXG4iLAorCQkJc2tibGVuIC0gc2l6ZW9mKHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdCkpOworCX0KKworCWlmICggKHNrYiA9IGRldl9hbGxvY19za2Ioc2tibGVuKSkgPT0gTlVMTCApIHsKKwkJV0xBTl9MT0dfRVJST1IoImFsbG9jX3NrYiBmYWlsZWQgdHJ5aW5nIHRvIGFsbG9jYXRlICVkIGJ5dGVzXG4iLCBza2JsZW4pOworCQlyZXR1cm47CisJfQorCisJLyogb25seSBwcmVwZW5kIHRoZSBwcmlzbSBoZWFkZXIgaWYgaW4gdGhlIHJpZ2h0IG1vZGUgKi8KKwlpZiAoKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNKSAmJgorCSAgICAoaHctPnNuaWZmaGRyID09IDApKSB7CisJCXA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdAkqbXNnOworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBzaXplb2YocDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90KSk7CisJCW1zZyA9IChwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QqKSBkYXRhcDsKKworCQkvKiBJbml0aWFsaXplIHRoZSBtZXNzYWdlIG1lbWJlcnMgKi8KKwkJbXNnLT5tc2djb2RlID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybTsKKwkJbXNnLT5tc2dsZW4gPSBzaXplb2YocDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90KTsKKwkJc3RyY3B5KG1zZy0+ZGV2bmFtZSwgd2xhbmRldi0+bmFtZSk7CisKKwkJbXNnLT5ob3N0dGltZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2hvc3R0aW1lOworCQltc2ctPmhvc3R0aW1lLnN0YXR1cyA9IDA7CisJCW1zZy0+aG9zdHRpbWUubGVuID0gNDsKKwkJbXNnLT5ob3N0dGltZS5kYXRhID0gamlmZmllczsKKworCQltc2ctPm1hY3RpbWUuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9tYWN0aW1lOworCQltc2ctPm1hY3RpbWUuc3RhdHVzID0gMDsKKwkJbXNnLT5tYWN0aW1lLmxlbiA9IDQ7CisJCW1zZy0+bWFjdGltZS5kYXRhID0gcnhkZXNjLT50aW1lICogMTAwMDsKKworCQltc2ctPmNoYW5uZWwuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9jaGFubmVsOworCQltc2ctPmNoYW5uZWwuc3RhdHVzID0gMDsKKwkJbXNnLT5jaGFubmVsLmxlbiA9IDQ7CisJCW1zZy0+Y2hhbm5lbC5kYXRhID0gaHctPnNuaWZmX2NoYW5uZWw7CisKKwkJbXNnLT5yc3NpLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fcnNzaTsKKwkJbXNnLT5yc3NpLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbm9fdmFsdWU7CisJCW1zZy0+cnNzaS5sZW4gPSA0OworCQltc2ctPnJzc2kuZGF0YSA9IDA7CisKKwkJbXNnLT5zcS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3NxOworCQltc2ctPnNxLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbm9fdmFsdWU7CisJCW1zZy0+c3EubGVuID0gNDsKKwkJbXNnLT5zcS5kYXRhID0gMDsKKworCQltc2ctPnNpZ25hbC5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3NpZ25hbDsKKwkJbXNnLT5zaWduYWwuc3RhdHVzID0gMDsKKwkJbXNnLT5zaWduYWwubGVuID0gNDsKKwkJbXNnLT5zaWduYWwuZGF0YSA9IHJ4ZGVzYy0+c2lnbmFsOworCisJCW1zZy0+bm9pc2UuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9ub2lzZTsKKwkJbXNnLT5ub2lzZS5zdGF0dXMgPSAwOworCQltc2ctPm5vaXNlLmxlbiA9IDQ7CisJCW1zZy0+bm9pc2UuZGF0YSA9IHJ4ZGVzYy0+c2lsZW5jZTsKKworCQltc2ctPnJhdGUuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9yYXRlOworCQltc2ctPnJhdGUuc3RhdHVzID0gMDsKKwkJbXNnLT5yYXRlLmxlbiA9IDQ7CisJCW1zZy0+cmF0ZS5kYXRhID0gcnhkZXNjLT5yYXRlIC8gNTsgLyogc2V0IHRvIDgwMi4xMSB1bml0cyAqLworCisJCW1zZy0+aXN0eC5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2lzdHg7CisJCW1zZy0+aXN0eC5zdGF0dXMgPSAwOworCQltc2ctPmlzdHgubGVuID0gNDsKKwkJbXNnLT5pc3R4LmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCisJCW1zZy0+ZnJtbGVuLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fZnJtbGVuOworCQltc2ctPmZybWxlbi5zdGF0dXMgPSAwOworCQltc2ctPmZybWxlbi5sZW4gPSA0OworCQltc2ctPmZybWxlbi5kYXRhID0gaGRybGVuICsgZGF0YWxlbiArIFdMQU5fQ1JDX0xFTjsKKwl9IGVsc2UgaWYgKCh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxMV9QUklTTSkgJiYKKwkJICAgKGh3LT5zbmlmZmhkciAhPSAwKSkgeworCQlwODAyMTFfY2FwaGRyX3QJCSpjYXBoZHI7CisJCS8qIFRoZSBORVcgaGVhZGVyIGZvcm1hdCEgKi8KKwkJZGF0YXAgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHA4MDIxMV9jYXBoZHJfdCkpOworCQljYXBoZHIgPSAocDgwMjExX2NhcGhkcl90KikgZGF0YXA7CisKKwkJY2FwaGRyLT52ZXJzaW9uID0JaHRvbmwoUDgwMjExQ0FQVFVSRV9WRVJTSU9OKTsKKwkJY2FwaGRyLT5sZW5ndGggPQlodG9ubChzaXplb2YocDgwMjExX2NhcGhkcl90KSk7CisJCWNhcGhkci0+bWFjdGltZSA9CV9fY3B1X3RvX2JlNjQocnhkZXNjLT50aW1lKTsKKwkJY2FwaGRyLT5ob3N0dGltZSA9CV9fY3B1X3RvX2JlNjQoamlmZmllcyk7CisJCWNhcGhkci0+cGh5dHlwZSA9CWh0b25sKDQpOyAvKiBkc3NfZG90MTFfYiAqLworCQljYXBoZHItPmNoYW5uZWwgPQlodG9ubChody0+c25pZmZfY2hhbm5lbCk7CisJCWNhcGhkci0+ZGF0YXJhdGUgPQlodG9ubChyeGRlc2MtPnJhdGUpOworCQljYXBoZHItPmFudGVubmEgPQlodG9ubCgwKTsgLyogdW5rbm93biAqLworCQljYXBoZHItPnByaW9yaXR5ID0JaHRvbmwoMCk7IC8qIHVua25vd24gKi8KKwkJY2FwaGRyLT5zc2lfdHlwZSA9CWh0b25sKDMpOyAvKiByc3NpX3JhdyAqLworCQljYXBoZHItPnNzaV9zaWduYWwgPQlodG9ubChyeGRlc2MtPnNpZ25hbCk7CisJCWNhcGhkci0+c3NpX25vaXNlID0JaHRvbmwocnhkZXNjLT5zaWxlbmNlKTsKKwkJY2FwaGRyLT5wcmVhbWJsZSA9CWh0b25sKDApOyAvKiB1bmtub3duICovCisJCWNhcGhkci0+ZW5jb2RpbmcgPQlodG9ubCgxKTsgLyogY2NrICovCisJfQorCS8qIENvcHkgdGhlIDgwMi4xMSBoZWFkZXIgdG8gdGhlIHNrYiAoY3RsIGZyYW1lcyBtYXkgYmUgbGVzcyB0aGFuIGEgZnVsbCBoZWFkZXIpICovCisJZGF0YXAgPSBza2JfcHV0KHNrYiwgaGRybGVuKTsKKwltZW1jcHkoIGRhdGFwLCAmKHJ4ZGVzYy0+ZnJhbWVfY29udHJvbCksIGhkcmxlbik7CisKKwkvKiBJZiBhbnksIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgY2FyZCB0byB0aGUgc2tiICovCisJaWYgKCBkYXRhbGVuID4gMCApCisJeworCQkvKiBUcnVuY2F0ZSB0aGUgcGFja2V0IGlmIHRoZSB1c2VyIHdhbnRzIHVzIHRvICovCisJCVVJTlQJZGF0YXJlYWQgPSBkYXRhbGVuOworCQlpZihody0+c25pZmZfdHJ1bmNhdGUgPiAwICYmIGRhdGFyZWFkID4gaHctPnNuaWZmX3RydW5jYXRlKSB7CisJCQlkYXRhcmVhZCA9IGh3LT5zbmlmZl90cnVuY2F0ZTsKKwkJCXRydW5jYXRlZCA9IDE7CisJCX0KKworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBkYXRhcmVhZCk7CisJCWhmYTM4NHhfY29weV9mcm9tX2JhcChodywKKwkJCUhGQTM4NHhfQkFQX0lOVCwgcnhmaWQsIEhGQTM4NHhfUlhfREFUQV9PRkYsCisJCQlkYXRhcCwgZGF0YXJlYWQpOworCisJCS8qIGNoZWNrIGZvciB1bmVuY3J5cHRlZCBzdHVmZiBpZiBXRVAgYml0IHNldC4gKi8KKwkJaWYgKCooZGF0YXAgLSBoZHJsZW4gKyAxKSAmIDB4NDApIC8vIHdlcCBzZXQKKwkJICBpZiAoKCooZGF0YXApID09IDB4YWEpICYmICgqKGRhdGFwKzEpID09IDB4YWEpKQorCQkgICAgKihkYXRhcCAtIGhkcmxlbiArIDEpICY9IDB4YmY7IC8vIGNsZWFyIHdlcDsgaXQncyB0aGUgODAyLjIgaGVhZGVyIQorCX0KKworCWlmICghdHJ1bmNhdGVkICYmIGh3LT5zbmlmZl9mY3MpIHsKKwkJLyogU2V0IHRoZSBGQ1MgKi8KKwkJZGF0YXAgPSBza2JfcHV0KHNrYiwgV0xBTl9DUkNfTEVOKTsKKwkJbWVtc2V0KCBkYXRhcCwgMHhmZiwgV0xBTl9DUkNfTEVOKTsKKwl9CisKKwkvKiBwYXNzIGl0IGJhY2sgdXAgKi8KKwlwcmlzbTJzdGFfZXZfcngod2xhbmRldiwgc2tiKTsKKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9pbnRfYWxsb2MKKyoKKyogSGFuZGxlcyB0aGUgQWxsb2MgZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X2ludF9hbGxvYyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCVVJTlQxNgkJCWZpZDsKKwlJTlQxNgkJCXJlc3VsdDsKKworCURCRkVOVEVSOworCisJLyogSGFuZGxlIHRoZSByZWNsYWltZWQgRklEICovCisJLyogICBjb2xsZWN0IHRoZSBGSUQgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2sgKi8KKwlmaWQgPSBoZmEzODR4X2dldHJlZyhodywgSEZBMzg0eF9BTExPQ0ZJRCk7CisKKwlpZiAoIGZpZCAhPSBody0+aW5mb2ZpZCApIHsgLyogSXQncyBhIHRyYW5zbWl0IGZpZCAqLworCQlXTEFOX0xPR19ERUJVRyg1LCAiaW50X2FsbG9jKCUjeClcbiIsIGZpZCk7CisJCXJlc3VsdCA9IHR4ZmlkX3F1ZXVlX2FkZChodywgZmlkKTsKKwkJaWYgKHJlc3VsdCAhPSAtMSkgeworCQkJcHJpc20yc3RhX2V2X2FsbG9jKHdsYW5kZXYpOworCQkJV0xBTl9MT0dfREVCVUcoNSwgInFfYWRkLlxuIik7CisJCX0gZWxzZSB7CisJCQlXTEFOX0xPR19ERUJVRyg1LCAicV9mdWxsLlxuIik7CisJCX0KKwl9IGVsc2UgeworCQkvKiB1bmxvY2sgdGhlIGluZm8gZmlkICovCisJCXVwKCZody0+aW5mb2ZpZF9zZW0pOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfaGFuZG92ZXIKKyoKKyogU2VuZHMgYSBoYW5kb3ZlciBub3RpZmljYXRpb24gdG8gdGhlIE1BQy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglhZGRyCQlhZGRyZXNzIG9mIHN0YXRpb24gdGhhdCdzIGxlZnQKKyoKKyogUmV0dXJuczoKKyoJemVybwkJc3VjY2Vzcy4KKyoJLUVSRVNUQVJUU1lTCXJlY2VpdmVkIHNpZ25hbCB3aGlsZSB3YWl0aW5nIGZvciBzZW1hcGhvcmUuCisqCS1FSU8JCWZhaWxlZCB0byB3cml0ZSB0byBiYXAsIG9yIGZhaWxlZCBpbiBjbWQuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCwgTk9URTogdGhpcyBjYWxsIG1heSBibG9jayBvbiBhIHNlbWFwaG9yZSEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9oYW5kb3ZlciggaGZhMzg0eF90ICpodywgVUlOVDggKmFkZHIpCit7CisJaW50CQkJcmVzdWx0ID0gMDsKKyAgICAgICAgaGZhMzg0eF9IYW5kb3ZlckFkZHJfdCAgcmVjOworICAgICAgICBVSU5UICAgICAgICAgICAgICAgICAgICBsZW47CisgICAgICAgIERCRkVOVEVSOworCisJLyogQWNxdWlyZSB0aGUgaW5mb2ZpZCAqLworCWlmICggZG93bl9pbnRlcnJ1cHRpYmxlKCZody0+aW5mb2ZpZF9zZW0pICkgeworCQlyZXN1bHQgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gZmFpbGVkOworCX0KKworICAgICAgICAvKiBTZXQgdXAgdGhlIHJlY29yZCAqLworICAgICAgICBsZW4gPSBzaXplb2YoaGZhMzg0eF9IYW5kb3ZlckFkZHJfdCk7CisgICAgICAgIHJlYy5mcmFtZWxlbiA9IGhvc3QyaGZhMzg0eF8xNihsZW4vMiAtIDEpOworICAgICAgICByZWMuaW5mb3R5cGUgPSBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9JVF9IQU5ET1ZFUkFERFIpOworICAgICAgICBtZW1jcHkocmVjLmhhbmRvdmVyX2FkZHIsIGFkZHIsIHNpemVvZihyZWMuaGFuZG92ZXJfYWRkcikpOworCisgICAgICAgIC8qIElzc3VlIHRoZSBjb21tYW5kICovCisgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfY21kX25vdGlmeShodywgMSwgaHctPmluZm9maWQsICZyZWMsIGxlbik7CisKKyAgICAgICAgaWYgKCByZXN1bHQgIT0gMCApIHsKKyAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygxLCJjbWRfbm90aWZ5KCUwNHgpIGZhaWxlZCwgcmVzdWx0PSVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pbmZvZmlkLCByZXN1bHQpOworCQlyZXN1bHQgPSAtRUlPOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisKK2ZhaWxlZDoKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgaGZhMzg0eF90eF90aW1lb3V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlEQkZFTlRFUjsKKworCVdMQU5fTE9HX1dBUk5JTkcoIkltcGxlbWVudCBtZS5cbiIpOworCisJREJGRVhJVDsKK30KKworLyogSGFuZGxlcyBhbGwgInJ4IiBCQVAgb3BlcmF0aW9ucyAqLworc3RhdGljIHZvaWQgICAgIGhmYTM4NHhfYmFwX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gaHctPndsYW5kZXY7CisJaW50IGNvdW50ZXIgPSBwcmlzbTJfaXJxX2V2cmVhZF9tYXg7CisJaW50CQkJcmVnOworCisJREJGRU5URVI7CisKKwl3aGlsZSAoY291bnRlci0tID4gMCkgeworCQkvKiBHZXQgaW50ZXJydXB0IHJlZ2lzdGVyICovCisJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0VWU1RBVCk7CisKKwkJaWYgKChyZWcgPT0gMHhmZmZmKSB8fAorCQkgICAgIShyZWcgJiBIRkEzODR4X0lOVF9CQVBfT1ApKSB7CisJCQlicmVhazsKKwkJfQorCisJCWlmICggSEZBMzg0eF9FVlNUQVRfSVNJTkZPKHJlZykgKXsKKwkJCWhmYTM4NHhfaW50X2luZm8od2xhbmRldik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19JTkZPX1NFVCgxKSwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJfQorCQlpZiAoIEhGQTM4NHhfRVZTVEFUX0lTVFhFWEMocmVnKSApeworCQkJaGZhMzg0eF9pbnRfdHhleGMod2xhbmRldik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19UWEVYQ19TRVQoMSksCisJCQkJSEZBMzg0eF9FVkFDSyk7CisJCX0KKwkJaWYgKCBIRkEzODR4X0VWU1RBVF9JU1RYKHJlZykgKXsKKwkJCWhmYTM4NHhfaW50X3R4KHdsYW5kZXYpOworCQkJaGZhMzg0eF9zZXRyZWcoaHcsIEhGQTM4NHhfRVZBQ0tfVFhfU0VUKDEpLAorCQkJCUhGQTM4NHhfRVZBQ0spOworCQl9CisJCWlmICggSEZBMzg0eF9FVlNUQVRfSVNSWChyZWcpICl7CisJCQloZmEzODR4X2ludF9yeCh3bGFuZGV2KTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX1JYX1NFVCgxKSwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJfQorCX0KKworCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCisJaGZhMzg0eF9ldmVudHNfYWxsKGh3KTsKKworCURCRkVYSVQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIwNTQ2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaApAQCAtMCwwICsxLDMwNjcgQEAKKy8qIGhmYTM4NHguaAorKgorKiBEZWZpbmVzIHRoZSBjb25zdGFudHMgYW5kIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGhmYTM4NHgKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogICBbSW1wbGVtZW50YXRpb24gYW5kIHVzYWdlIG5vdGVzXQorKgorKiAgIFtSZWZlcmVuY2VzXQorKglDVzEwIFByb2dyYW1tZXIncyBNYW51YWwgdjEuNQorKglJRUVFIDgwMi4xMSBEMTAuMAorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfSEZBMzg0eF9ICisjZGVmaW5lIF9IRkEzODR4X0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGEsYixjKSAoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQorCisjZGVmaW5lIEhGQTM4NHhfTEVWRUxfVE9fZEJtKHYpICAgKDB4MTAwICsgKHYpICogMTAwIC8gMjU1IC0gMTAwKQorCisvKi0tLS0tLSBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0gTWlucyAmIE1heHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9DTURfQUxMT0NfTEVOX01JTgkoKFVJTlQxNik0KQorI2RlZmluZQkJSEZBMzg0eF9DTURfQUxMT0NfTEVOX01BWAkoKFVJTlQxNikyNDAwKQorI2RlZmluZQkJSEZBMzg0eF9CQVBfREFUQUxFTl9NQVgJCSgoVUlOVDE2KTQwOTYpCisjZGVmaW5lCQlIRkEzODR4X0JBUF9PRkZTRVRfTUFYCQkoKFVJTlQxNik0MDk2KQorI2RlZmluZQkJSEZBMzg0eF9QT1JUSURfTUFYCQkoKFVJTlQxNik3KQorI2RlZmluZQkJSEZBMzg0eF9OVU1QT1JUU19NQVgJCSgoVUlOVDE2KShIRkEzODR4X1BPUlRJRF9NQVgrMSkpCisjZGVmaW5lCQlIRkEzODR4X1BEUl9MRU5fTUFYCQkoKFVJTlQxNik1MTIpCS8qIGluIGJ5dGVzLCBmcm9tIEVLICovCisjZGVmaW5lCQlIRkEzODR4X1BEQV9SRUNTX01BWAkJKChVSU5UMTYpMjAwKQkvKiBhIGd1ZXNzICovCisjZGVmaW5lCQlIRkEzODR4X1BEQV9MRU5fTUFYCQkoKFVJTlQxNikxMDI0KQkvKiBpbiBieXRlcywgZnJvbSBFSyAqLworI2RlZmluZQkJSEZBMzg0eF9TQ0FOUkVTVUxUX01BWAkJKChVSU5UMTYpMzEpCisjZGVmaW5lCQlIRkEzODR4X0hTQ0FOUkVTVUxUX01BWAkJKChVSU5UMTYpMzEpCisjZGVmaW5lCQlIRkEzODR4X0NISU5GT1JFU1VMVF9NQVgJKChVSU5UMTYpMTYpCisjZGVmaW5lCQlIRkEzODR4X0RSVlJfRklEU1RBQ0tMRU5fTUFYCSgxMCkKKyNkZWZpbmUJCUhGQTM4NHhfRFJWUl9UWEJVRl9NQVgJCShzaXplb2YoaGZhMzg0eF90eF9mcmFtZV90KSArIFwKKwkJCQkJCVdMQU5fREFUQV9NQVhMRU4gLSBcCisJCQkJCQlXTEFOX1dFUF9JVl9MRU4gLSBcCisJCQkJCQlXTEFOX1dFUF9JQ1ZfTEVOICsgMikKKyNkZWZpbmUJCUhGQTM4NHhfRFJWUl9NQUdJQwkJKDB4NGEyZCkKKyNkZWZpbmUJCUhGQTM4NHhfSU5GT0RBVEFfTUFYTEVOCQkoc2l6ZW9mKGhmYTM4NHhfaW5mb2RhdGFfdCkpCisjZGVmaW5lCQlIRkEzODR4X0lORk9GUk1fTUFYTEVOCQkoc2l6ZW9mKGhmYTM4NHhfSW5mRnJhbWVfdCkpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9HVUVTU0lOR19NQVhMRU4JMjA0OCAgLyogSSdtIG5vdCByZWFsbHkgc3VyZSAqLworI2RlZmluZQkJSEZBMzg0eF9SSUREQVRBX01BWExFTgkJSEZBMzg0eF9SSURfR1VFU1NJTkdfTUFYTEVOCisjZGVmaW5lCQlIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4JMjA0OAorCisvKi0tLSBTdXBwb3J0IENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0JBUF9QUk9DCQkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfQkFQX0lOVAkJCQkoKFVJTlQxNikxKQorI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9JQlNTCQkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUE9SVFRZUEVfQlNTCQkJKChVSU5UMTYpMSkKKyNkZWZpbmUJCUhGQTM4NHhfUE9SVFRZUEVfV0RTCQkJKChVSU5UMTYpMikKKyNkZWZpbmUJCUhGQTM4NHhfUE9SVFRZUEVfUFNVRURPSUJTUwkJKChVSU5UMTYpMykKKyNkZWZpbmUJCUhGQTM4NHhfUE9SVFRZUEVfSE9TVEFQICAgIAkJKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfUFJJVklOVk9LRUQJCSgoVUlOVDE2KUJJVDApCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0VYQ0xVREUJCSgoVUlOVDE2KUJJVDEpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0RJU0FCTEVfVFhDUllQVAkoKFVJTlQxNilCSVQ0KQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1JYQ1JZUFQJKChVSU5UMTYpQklUNykKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRElTQUxMT1dfTUlYRUQgCSgoVUlOVDE2KUJJVDExKQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19JVl9JTlRFUlZBTDEJCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0lWX0lOVEVSVkFMMTAJCSgoVUlOVDE2KUJJVDUpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0lWX0lOVEVSVkFMNTAJCSgoVUlOVDE2KUJJVDYpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0lWX0lOVEVSVkFMMTAwCQkoKFVJTlQxNikoQklUNSB8IEJJVDYpKQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19GSVJNV0FSRV9XUEEgIAkJKChVSU5UMTYpQklUOCkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSE9TVF9NSUMgICAgICAJCSgoVUlOVDE2KUJJVDkpCisjZGVmaW5lIAlIRkEzODR4X1JPQU1NT0RFX0ZXU0NBTl9GV1JPQU0JCSgoVUlOVDE2KTEpCisjZGVmaW5lIAlIRkEzODR4X1JPQU1NT0RFX0ZXU0NBTl9IT1NUUk9BTQkoKFVJTlQxNikyKQorI2RlZmluZSAJSEZBMzg0eF9ST0FNTU9ERV9IT1NUU0NBTl9IT1NUUk9BTQkoKFVJTlQxNikzKQorI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0RJU0FCTEVECQkoKFVJTlQxNikxKQorI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0lOSVRTUkNICQkoKFVJTlQxNikyKQorI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0NPTk5fSUJTUwkJKChVSU5UMTYpMykKKyNkZWZpbmUgCUhGQTM4NHhfUE9SVFNUQVRVU19DT05OX0VTUwkJKChVSU5UMTYpNCkKKyNkZWZpbmUgCUhGQTM4NHhfUE9SVFNUQVRVU19PT1JfRVNTCQkoKFVJTlQxNik1KQorI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0NPTk5fV0RTCQkoKFVJTlQxNik2KQorI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0hPU1RBUAkJKChVSU5UMTYpOCkKKyNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF8xCQkJKChVSU5UMTYpMSkKKyNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF8yCQkJKChVSU5UMTYpMikKKyNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF81ZG90NQkJCSgoVUlOVDE2KTQpCisjZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfMTEJCQkoKFVJTlQxNik4KQorCisvKi0tLSBKdXN0IHNvbWUgc3ltYm9saWMgbmFtZXMgZm9yIGxlZ2liaWxpdHkgLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1RYQ01EX05PUkVDTAkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfVFhDTURfUkVDTAkJKChVSU5UMTYpMSkKKworLyotLS0gTUFDIEludGVybmFsIG1lbW9yeSBjb25zdGFudHMgYW5kIG1hY3JvcyAtLS0tLS0qLworLyogbWFza3MgYW5kIG1hY3JvcyB1c2VkIHRvIG1hbmlwdWxhdGUgTUFDIGludGVybmFsIG1lbW9yeSBhZGRyZXNzZXMuICovCisvKiBNQUMgaW50ZXJuYWwgbWVtb3J5IGFkZHJlc3NlcyBhcmUgMjMgYml0IHF1YW50aXRpZXMuICBUaGUgTUFDIHVzZXMKKyAqIGEgcGFnZWQgYWRkcmVzcyBzcGFjZSB3aGVyZSB0aGUgdXBwZXIgMTYgYml0cyBhcmUgdGhlIHBhZ2UgbnVtYmVyCisgKiBhbmQgdGhlIGxvd2VyIDcgYml0cyBhcmUgdGhlIG9mZnNldC4gIFRoZXJlIGFyZSB2YXJpb3VzIEhvc3QgQVBJCisgKiBlbGVtZW50cyB0aGF0IHJlcXVpcmUgdHdvIDE2LWJpdCBxdWFudGl0aWVzIHRvIHNwZWNpZnkgYSBNQUMKKyAqIGludGVybmFsIG1lbW9yeSBhZGRyZXNzLiAgVW5mb3J0dW5hdGVseSwgc29tZSBvZiB0aGUgQVBJJ3MgdXNlIGEKKyAqIHBhZ2Uvb2Zmc2V0IGZvcm1hdCB3aGVyZSB0aGUgb2Zmc2V0IHZhbHVlIGlzIEpVU1QgdGhlIGxvd2VyIHNldmVuCisgKiBiaXRzIGFuZCB0aGUgcGFnZSBpcyAgdGhlIHJlbWFpbmluZyAxNiBiaXRzLiAgU29tZSBvZiB0aGUgQVBJJ3MKKyAqIGFzc3VtZSB0aGF0IHRoZSAyMyBiaXQgYWRkcmVzcyBoYXMgYmVlbiBzcGxpdCBhdCB0aGUgMTZ0aCBiaXQuICBXZQorICogcmVmZXIgdG8gdGhlc2UgdHdvIGZvcm1hdHMgYXMgQVVYIGZvcm1hdCBhbmQgQ01EIGZvcm1hdC4gIFRoZQorICogbWFjcm9zIGJlbG93IGhlbHAgaGFuZGxlIHNvbWUgb2YgdGhpcy4KKyAqLworCisvKiBIYW5keSBjb25zdGFudCAqLworI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9PRkZfTUFYCSgoVUlOVDE2KTB4MDA3ZikKKworLyogTWFzayBiaXRzIGZvciBkaXNjYXJkaW5nIHVud2FudGVkIHBpZWNlcyBpbiBhIGZsYXQgYWRkcmVzcyAqLworI2RlZmluZQkJSEZBMzg0eF9BRERSX0ZMQVRfQVVYX1BBR0VfTUFTSwkoMHgwMDdmZmY4MCkKKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9GTEFUX0FVWF9PRkZfTUFTSwkoMHgwMDAwMDA3ZikKKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9GTEFUX0NNRF9QQUdFX01BU0sJKDB4ZmZmZjAwMDApCisjZGVmaW5lCQlIRkEzODR4X0FERFJfRkxBVF9DTURfT0ZGX01BU0sJKDB4MDAwMGZmZmYpCisKKy8qIE1hc2sgYml0cyBmb3IgZGlzY2FyZGluZyB1bndhbnRlZCBwaWVjZXMgaW4gQVVYIGZvcm1hdCAxNi1iaXQgYWRkcmVzcyBwYXJ0cyAqLworI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9QQUdFX01BU0sJKDB4ZmZmZikKKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9BVVhfT0ZGX01BU0sJKDB4MDA3ZikKKworLyogTWFzayBiaXRzIGZvciBkaXNjYXJkaW5nIHVud2FudGVkIHBpZWNlcyBpbiBDTUQgZm9ybWF0IDE2LWJpdCBhZGRyZXNzIHBhcnRzICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX1BBR0VfTUFTSwkoMHgwMDdmKQorI2RlZmluZQkJSEZBMzg0eF9BRERSX0NNRF9PRkZfTUFTSwkoMHhmZmZmKQorCisvKiBNYWtlIGEgMzItYml0IGZsYXQgYWRkcmVzcyBmcm9tIEFVWCBmb3JtYXQgMTYtYml0IHBhZ2UgYW5kIG9mZnNldCAqLworI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9NS0ZMQVQocCxvKQlcCisJCSgoKFVJTlQzMikoKChVSU5UMTYpKHApKSZIRkEzODR4X0FERFJfQVVYX1BBR0VfTUFTSykpIDw8NykgfCBcCisJCSgoVUlOVDMyKSgoKFVJTlQxNikobykpJkhGQTM4NHhfQUREUl9BVVhfT0ZGX01BU0spKQorCisvKiBNYWtlIGEgMzItYml0IGZsYXQgYWRkcmVzcyBmcm9tIENNRCBmb3JtYXQgMTYtYml0IHBhZ2UgYW5kIG9mZnNldCAqLworI2RlZmluZQkJSEZBMzg0eF9BRERSX0NNRF9NS0ZMQVQocCxvKQlcCisJCSgoKFVJTlQzMikoKChVSU5UMTYpKHApKSZIRkEzODR4X0FERFJfQ01EX1BBR0VfTUFTSykpIDw8MTYpIHwgXAorCQkoKFVJTlQzMikoKChVSU5UMTYpKG8pKSZIRkEzODR4X0FERFJfQ01EX09GRl9NQVNLKSkKKworLyogTWFrZSBBVVggZm9ybWF0IG9mZnNldCBhbmQgcGFnZSBmcm9tIGEgMzItYml0IGZsYXQgYWRkcmVzcyAqLworI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9NS1BBR0UoZikgXAorCQkoKFVJTlQxNikoKCgoVUlOVDMyKShmKSkmSEZBMzg0eF9BRERSX0ZMQVRfQVVYX1BBR0VfTUFTSyk+PjcpKQorI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9NS09GRihmKSBcCisJCSgoVUlOVDE2KSgoKFVJTlQzMikoZikpJkhGQTM4NHhfQUREUl9GTEFUX0FVWF9PRkZfTUFTSykpCisKKy8qIE1ha2UgQ01EIGZvcm1hdCBvZmZzZXQgYW5kIHBhZ2UgZnJvbSBhIDMyLWJpdCBmbGF0IGFkZHJlc3MgKi8KKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9DTURfTUtQQUdFKGYpIFwKKwkJKChVSU5UMTYpKCgoKFVJTlQzMikoZikpJkhGQTM4NHhfQUREUl9GTEFUX0NNRF9QQUdFX01BU0spPj4xNikpCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX01LT0ZGKGYpIFwKKwkJKChVSU5UMTYpKCgoVUlOVDMyKShmKSkmSEZBMzg0eF9BRERSX0ZMQVRfQ01EX09GRl9NQVNLKSkKKworLyotLS0gQXV4IHJlZ2lzdGVyIG1hc2tzL3Rlc3RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogU29tZSBvZiB0aGUgdXBwZXIgYml0cyBvZiB0aGUgQVVYIG9mZnNldCByZWdpc3RlciBhcmUgdXNlZCB0byAqLworLyogIHNlbGVjdCBhZGRyZXNzIHNwYWNlLiAqLworI2RlZmluZQkJSEZBMzg0eF9BVVhfQ1RMX0VYVERTCSgweDAwKQorI2RlZmluZQkJSEZBMzg0eF9BVVhfQ1RMX05WCSgweDAxKQorI2RlZmluZQkJSEZBMzg0eF9BVVhfQ1RMX1BIWQkoMHgwMikKKyNkZWZpbmUJCUhGQTM4NHhfQVVYX0NUTF9JQ1NSQU0JKDB4MDMpCisKKy8qIE1ha2UgQVVYIHJlZ2lzdGVyIG9mZnNldCBhbmQgcGFnZSB2YWx1ZXMgZnJvbSBhIGZsYXQgYWRkcmVzcyAqLworI2RlZmluZQkJSEZBMzg0eF9BVVhfTUtPRkYoZiwgYykgXAorCShIRkEzODR4X0FERFJfQVVYX01LT0ZGKGYpIHwgKCgoVUlOVDE2KShjKSk8PDEyKSkKKyNkZWZpbmUJCUhGQTM4NHhfQVVYX01LUEFHRShmKQlIRkEzODR4X0FERFJfQVVYX01LUEFHRShmKQorCisKKy8qLS0tIENvbnRyb2xsZXIgTWVtb3J5IGFkZHJlc3NlcyAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NDJfUERBX0JBU0UJKDB4MDA3ZjAwMDBVTCkKKyNkZWZpbmUJCUhGQTM4NDFfUERBX0JBU0UJKDB4MDAzZjAwMDBVTCkKKyNkZWZpbmUJCUhGQTM4NDFfUERBX0JPR1VTX0JBU0UJKDB4MDAzOTAwMDBVTCkKKworLyotLS0gRHJpdmVyIERvd25sb2FkIHN0YXRlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVECQkwCisjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRAkJMQorI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0ZMQVNIRU5BQkxFRAkJMgorI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0ZMQVNIV1JJVFRFTgkJMworI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0ZMQVNIV1JJVEVQRU5ESU5HCTQKKyNkZWZpbmUJCUhGQTM4NHhfRExTVEFURV9HRU5FU0lTIAkJNQorCisvKi0tLSBSZWdpc3RlciBJL08gb2Zmc2V0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgKChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkgfHwgKFdMQU5fSE9TVElGID09IFdMQU5fUExYKSkKKworI2RlZmluZQkJSEZBMzg0eF9DTURfT0ZGCQkJKDB4MDApCisjZGVmaW5lCQlIRkEzODR4X1BBUkFNMF9PRkYJCSgweDAyKQorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTFfT0ZGCQkoMHgwNCkKKyNkZWZpbmUJCUhGQTM4NHhfUEFSQU0yX09GRgkJKDB4MDYpCisjZGVmaW5lCQlIRkEzODR4X1NUQVRVU19PRkYJCSgweDA4KQorI2RlZmluZQkJSEZBMzg0eF9SRVNQMF9PRkYJCSgweDBBKQorI2RlZmluZQkJSEZBMzg0eF9SRVNQMV9PRkYJCSgweDBDKQorI2RlZmluZQkJSEZBMzg0eF9SRVNQMl9PRkYJCSgweDBFKQorI2RlZmluZQkJSEZBMzg0eF9JTkZPRklEX09GRgkJKDB4MTApCisjZGVmaW5lCQlIRkEzODR4X1JYRklEX09GRgkJKDB4MjApCisjZGVmaW5lCQlIRkEzODR4X0FMTE9DRklEX09GRgkJKDB4MjIpCisjZGVmaW5lCQlIRkEzODR4X1RYQ09NUExGSURfT0ZGCQkoMHgyNCkKKyNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMF9PRkYJCSgweDE4KQorI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQwX09GRgkJKDB4MUMpCisjZGVmaW5lCQlIRkEzODR4X0RBVEEwX09GRgkJKDB4MzYpCisjZGVmaW5lCQlIRkEzODR4X1NFTEVDVDFfT0ZGCQkoMHgxQSkKKyNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUMV9PRkYJCSgweDFFKQorI2RlZmluZQkJSEZBMzg0eF9EQVRBMV9PRkYJCSgweDM4KQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfT0ZGCQkoMHgzMCkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fT0ZGCQkoMHgzMikKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfT0ZGCQkoMHgzNCkKKyNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9PRkYJCSgweDE0KQorI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQwX09GRgkJKDB4MjgpCisjZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDFfT0ZGCQkoMHgyQSkKKyNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMl9PRkYJCSgweDJDKQorI2RlZmluZQkJSEZBMzg0eF9BVVhQQUdFX09GRgkJKDB4M0EpCisjZGVmaW5lCQlIRkEzODR4X0FVWE9GRlNFVF9PRkYJCSgweDNDKQorI2RlZmluZQkJSEZBMzg0eF9BVVhEQVRBX09GRgkJKDB4M0UpCisKKyNlbGlmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSB8fCBXTEFOX0hPU1RJRiA9PSBXTEFOX1VTQikKKworI2RlZmluZQkJSEZBMzg0eF9DTURfT0ZGCQkJKDB4MDApCisjZGVmaW5lCQlIRkEzODR4X1BBUkFNMF9PRkYJCSgweDA0KQorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTFfT0ZGCQkoMHgwOCkKKyNkZWZpbmUJCUhGQTM4NHhfUEFSQU0yX09GRgkJKDB4MGMpCisjZGVmaW5lCQlIRkEzODR4X1NUQVRVU19PRkYJCSgweDEwKQorI2RlZmluZQkJSEZBMzg0eF9SRVNQMF9PRkYJCSgweDE0KQorI2RlZmluZQkJSEZBMzg0eF9SRVNQMV9PRkYJCSgweDE4KQorI2RlZmluZQkJSEZBMzg0eF9SRVNQMl9PRkYJCSgweDFjKQorI2RlZmluZQkJSEZBMzg0eF9JTkZPRklEX09GRgkJKDB4MjApCisjZGVmaW5lCQlIRkEzODR4X1JYRklEX09GRgkJKDB4NDApCisjZGVmaW5lCQlIRkEzODR4X0FMTE9DRklEX09GRgkJKDB4NDQpCisjZGVmaW5lCQlIRkEzODR4X1RYQ09NUExGSURfT0ZGCQkoMHg0OCkKKyNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMF9PRkYJCSgweDMwKQorI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQwX09GRgkJKDB4MzgpCisjZGVmaW5lCQlIRkEzODR4X0RBVEEwX09GRgkJKDB4NmMpCisjZGVmaW5lCQlIRkEzODR4X1NFTEVDVDFfT0ZGCQkoMHgzNCkKKyNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUMV9PRkYJCSgweDNjKQorI2RlZmluZQkJSEZBMzg0eF9EQVRBMV9PRkYJCSgweDcwKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfT0ZGCQkoMHg2MCkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fT0ZGCQkoMHg2NCkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfT0ZGCQkoMHg2OCkKKyNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9PRkYJCSgweDI4KQorI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQwX09GRgkJKDB4NTApCisjZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDFfT0ZGCQkoMHg1NCkKKyNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMl9PRkYJCSgweDU4KQorI2RlZmluZQkJSEZBMzg0eF9BVVhQQUdFX09GRgkJKDB4NzQpCisjZGVmaW5lCQlIRkEzODR4X0FVWE9GRlNFVF9PRkYJCSgweDc4KQorI2RlZmluZQkJSEZBMzg0eF9BVVhEQVRBX09GRgkJKDB4N2MpCisjZGVmaW5lCQlIRkEzODR4X1BDSUNPUl9PRkYJCSgweDRjKQorI2RlZmluZQkJSEZBMzg0eF9QQ0lIQ1JfT0ZGCQkoMHg1YykKKyNkZWZpbmUJCUhGQTM4NHhfUENJX00wX0FERFJIX09GRgkoMHg4MCkKKyNkZWZpbmUJCUhGQTM4NHhfUENJX00wX0FERFJMX09GRgkoMHg4NCkKKyNkZWZpbmUJCUhGQTM4NHhfUENJX00wX0xFTl9PRkYJCSgweDg4KQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfQ1RMX09GRgkJKDB4OGMpCisjZGVmaW5lCQlIRkEzODR4X1BDSV9TVEFUVVNfT0ZGCQkoMHg5OCkKKyNkZWZpbmUJCUhGQTM4NHhfUENJX00xX0FERFJIX09GRgkoMHhhMCkKKyNkZWZpbmUJCUhGQTM4NHhfUENJX00xX0FERFJMX09GRgkoMHhhNCkKKyNkZWZpbmUJCUhGQTM4NHhfUENJX00xX0xFTl9PRkYJCSgweGE4KQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfQ1RMX09GRgkJKDB4YWMpCisKKyNlbmRpZgorCisvKi0tLSBSZWdpc3RlciBGaWVsZCBNYXNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0NNRF9CVVNZCQkoKFVJTlQxNilCSVQxNSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0FJTkZPCQkoKFVJTlQxNikoQklUMTQgfCBCSVQxMyB8IEJJVDEyIHwgQklUMTEgfCBCSVQxMCB8IEJJVDkgfCBCSVQ4KSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX01BQ1BPUlQJCSgoVUlOVDE2KShCSVQxMCB8IEJJVDkgfCBCSVQ4KSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1JFQ0wJCSgoVUlOVDE2KUJJVDgpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9XUklURQkJKChVSU5UMTYpQklUOCkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1BST0dNT0RFCQkoKFVJTlQxNikoQklUOSB8IEJJVDgpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfQ01EQ09ERQkJKChVSU5UMTYpKEJJVDUgfCBCSVQ0IHwgQklUMyB8IEJJVDIgfCBCSVQxIHwgQklUMCkpCisKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX1JFU1VMVAkJKChVSU5UMTYpKEJJVDE0IHwgQklUMTMgfCBCSVQxMiB8IEJJVDExIHwgQklUMTAgfCBCSVQ5IHwgQklUOCkpCisjZGVmaW5lCQlIRkEzODR4X1NUQVRVU19DTURDT0RFCQkoKFVJTlQxNikoQklUNSB8IEJJVDQgfCBCSVQzIHwgQklUMiB8IEJJVDEgfCBCSVQwKSkKKworI2RlZmluZQkJSEZBMzg0eF9PRkZTRVRfQlVTWQkJKChVSU5UMTYpQklUMTUpCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9FUlIJCSgoVUlOVDE2KUJJVDE0KQorI2RlZmluZQkJSEZBMzg0eF9PRkZTRVRfREFUQU9GRgkJKChVSU5UMTYpKEJJVDExIHwgQklUMTAgfCBCSVQ5IHwgQklUOCB8IEJJVDcgfCBCSVQ2IHwgQklUNSB8IEJJVDQgfCBCSVQzIHwgQklUMiB8IEJJVDEpKQorCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9USUNLCQkoKFVJTlQxNilCSVQxNSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1dURVJSCQkoKFVJTlQxNilCSVQxNCkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lORkRST1AJCSgoVUlOVDE2KUJJVDEzKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSU5GTwkJKChVSU5UMTYpQklUNykKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0RUSU0JCSgoVUlOVDE2KUJJVDUpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9DTUQJCSgoVUlOVDE2KUJJVDQpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9BTExPQwkJKChVSU5UMTYpQklUMykKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1RYRVhDCQkoKFVJTlQxNilCSVQyKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfVFgJCSgoVUlOVDE2KUJJVDEpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9SWAkJKChVSU5UMTYpQklUMCkKKworI2RlZmluZSAgICAgICAgIEhGQTM4NHhfSU5UX0JBUF9PUCAgICAgICAgICAgKEhGQTM4NHhfRVZTVEFUX0lORk98SEZBMzg0eF9FVlNUQVRfUlh8SEZBMzg0eF9FVlNUQVRfVFh8SEZBMzg0eF9FVlNUQVRfVFhFWEMpCisKKyNkZWZpbmUgICAgICAgICBIRkEzODR4X0lOVF9OT1JNQUwgICAgICAgICAgIChIRkEzODR4X0VWU1RBVF9JTkZPfEhGQTM4NHhfRVZTVEFUX1JYfEhGQTM4NHhfRVZTVEFUX1RYfEhGQTM4NHhfRVZTVEFUX1RYRVhDfEhGQTM4NHhfRVZTVEFUX0lORkRST1B8SEZBMzg0eF9FVlNUQVRfQUxMT0N8SEZBMzg0eF9FVlNUQVRfRFRJTSkKKworI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9USUNLCQkoKFVJTlQxNilCSVQxNSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fV1RFUlIJCSgoVUlOVDE2KUJJVDE0KQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JTkZEUk9QCQkoKFVJTlQxNilCSVQxMykKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSU5GTwkJKChVSU5UMTYpQklUNykKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fRFRJTQkJKChVSU5UMTYpQklUNSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fQ01ECQkoKFVJTlQxNilCSVQ0KQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9BTExPQwkJKChVSU5UMTYpQklUMykKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fVFhFWEMJCSgoVUlOVDE2KUJJVDIpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1RYCQkoKFVJTlQxNilCSVQxKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9SWAkJKChVSU5UMTYpQklUMCkKKworI2RlZmluZQkJSEZBMzg0eF9FVkFDS19USUNLCQkoKFVJTlQxNilCSVQxNSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfV1RFUlIJCSgoVUlOVDE2KUJJVDE0KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JTkZEUk9QCQkoKFVJTlQxNilCSVQxMykKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSU5GTwkJKChVSU5UMTYpQklUNykKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfRFRJTQkJKChVSU5UMTYpQklUNSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfQ01ECQkoKFVJTlQxNilCSVQ0KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19BTExPQwkJKChVSU5UMTYpQklUMykKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVFhFWEMJCSgoVUlOVDE2KUJJVDIpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX1RYCQkoKFVJTlQxNilCSVQxKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19SWAkJKChVSU5UMTYpQklUMCkKKworI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWEVOCQkoKFVJTlQxNikoQklUMTUgfCBCSVQxNCkpCisKKworLyotLS0gQ29tbWFuZCBDb2RlIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLSBDb250cm9sbGVyIENvbW1hbmRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9JTklUCQkoKFVJTlQxNikweDAwKQorI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0VOQUJMRQkJKChVSU5UMTYpMHgwMSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9ESVNBQkxFCQkoKFVJTlQxNikweDAyKQorI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0RJQUcJCSgoVUlOVDE2KTB4MDMpCisKKy8qLS0tIEJ1ZmZlciBNZ210IENvbW1hbmRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9BTExPQwkJKChVSU5UMTYpMHgwQSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9UWAkJKChVSU5UMTYpMHgwQikKKyNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9DTFJQUlNUCQkoKFVJTlQxNikweDEyKQorCisvKi0tLSBSZWd1bGF0ZSBDb21tYW5kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfTk9USUZZCQkoKFVJTlQxNikweDEwKQorI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0lOUQkJKChVSU5UMTYpMHgxMSkKKworLyotLS0gQ29uZmlndXJlIENvbW1hbmRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9BQ0NFU1MJCSgoVUlOVDE2KTB4MjEpCisjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfRE9XTkxECQkoKFVJTlQxNikweDIyKQorCisvKi0tLSBEZWJ1Z2dpbmcgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSAJSEZBMzg0eF9DTURDT0RFX01PTklUT1IJCSgoVUlOVDE2KSgweDM4KSkKKyNkZWZpbmUJCUhGQTM4NHhfTU9OSVRPUl9FTkFCTEUJCSgoVUlOVDE2KSgweDBiKSkKKyNkZWZpbmUJCUhGQTM4NHhfTU9OSVRPUl9ESVNBQkxFCQkoKFVJTlQxNikoMHgwZikpCisKKy8qLS0tIFJlc3VsdCBDb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1NVQ0NFU1MJCQkoKFVJTlQxNikoMHgwMCkpCisjZGVmaW5lCQlIRkEzODR4X0NBUkRfRkFJTAkJKChVSU5UMTYpKDB4MDEpKQorI2RlZmluZQkJSEZBMzg0eF9OT19CVUZGCQkJKChVSU5UMTYpKDB4MDUpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfRVJSCQkJKChVSU5UMTYpKDB4N0YpKQorCisvKi0tLSBQcm9ncmFtbWluZyBNb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU1PREUgMDogRGlzYWJsZSBwcm9ncmFtbWluZworCU1PREUgMTogRW5hYmxlIHZvbGF0aWxlIG1lbW9yeSBwcm9ncmFtbWluZworCU1PREUgMjogRW5hYmxlIG5vbi12b2xhdGlsZSBtZW1vcnkgcHJvZ3JhbW1pbmcKKwlNT0RFIDM6IFByb2dyYW0gbm9uLXZvbGF0aWxlIG1lbW9yeSBzZWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1BST0dNT0RFX0RJU0FCTEUJKChVSU5UMTYpMHgwMCkKKyNkZWZpbmUJCUhGQTM4NHhfUFJPR01PREVfUkFNCQkoKFVJTlQxNikweDAxKQorI2RlZmluZQkJSEZBMzg0eF9QUk9HTU9ERV9OVgkJKChVSU5UMTYpMHgwMikKKyNkZWZpbmUJCUhGQTM4NHhfUFJPR01PREVfTlZXUklURQkoKFVJTlQxNikweDAzKQorCisvKi0tLSBBVVggcmVnaXN0ZXIgZW5hYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfQVVYUFcwCQkJKChVSU5UMTYpMHhmZTAxKQorI2RlZmluZQkJSEZBMzg0eF9BVVhQVzEJCQkoKFVJTlQxNikweGRjMjMpCisjZGVmaW5lCQlIRkEzODR4X0FVWFBXMgkJCSgoVUlOVDE2KTB4YmE0NSkKKworI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWF9JU0RJU0FCTEVECSgoVUlOVDE2KTB4MDAwMCkKKyNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9BVVhfSVNFTkFCTEVECSgoVUlOVDE2KTB4YzAwMCkKKyNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9BVVhfRE9FTkFCTEUJKChVSU5UMTYpMHg4MDAwKQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWF9ET0RJU0FCTEUJKChVSU5UMTYpMHg0MDAwKQorCisvKi0tLSBSZWNvcmQgSUQgQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbmZpZ3VyYXRpb24gUklEczogTmV0d29yayBQYXJhbWV0ZXJzLCBTdGF0aWMgQ29uZmlndXJhdGlvbiBFbnRpdGllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUJCSgoVUlOVDE2KTB4RkMwMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFIJKChVSU5UMTYpMHhGQzAxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQJKChVSU5UMTYpMHhGQzAyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTAkoKFVJTlQxNikweEZDMDMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05TU0lECQkoKFVJTlQxNikweEZDMDQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05BVElNV0lOCSgoVUlOVDE2KTB4RkMwNSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNZU1NDQUxFCQkoKFVJTlQxNikweEZDMDYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQVhEQVRBTEVOCSgoVUlOVDE2KTB4RkMwNykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIJCSgoVUlOVDE2KTB4RkMwOCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBNRU5BQkxFRAkoKFVJTlQxNikweEZDMDkpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUVQUwkJKChVSU5UMTYpMHhGQzBBKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTVVMVElDQVNUUlgJKChVSU5UMTYpMHhGQzBCKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYU0xFRVBEVVIJKChVSU5UMTYpMHhGQzBDKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE1IT0xERFVSCSgoVUlOVDE2KTB4RkMwRCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTk5BTUUJCSgoVUlOVDE2KTB4RkMwRSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkRUSU1QRVIJKChVSU5UMTYpMHhGQzEwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjEJCSgoVUlOVDE2KTB4RkMxMSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIyCQkoKFVJTlQxNikweEZDMTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMwkJKChVSU5UMTYpMHhGQzEzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjQJCSgoVUlOVDE2KTB4RkMxNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI1CQkoKFVJTlQxNikweEZDMTUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNgkJKChVSU5UMTYpMHhGQzE2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUNBU1RQTUJVRkYJKChVSU5UMTYpMHhGQzE3KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb25maWd1cmF0aW9uIFJJRCBsZW5ndGhzOiBOZXR3b3JrIFBhcmFtcywgU3RhdGljIENvbmZpZyBFbnRpdGllcworICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CisgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRPRE86IGZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlc2UgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBPUlRUWVBFX0xFTgkoKFVJTlQxNikyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUl9MRU4JKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTgkoKFVJTlQxNikzNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkNIQU5ORUxfTEVOCSgoVUlOVDE2KTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05TU0lEX0xFTgkoKFVJTlQxNikzNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkFUSU1XSU5fTEVOCSgoVUlOVDE2KTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZTWVNTQ0FMRV9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWERBVEFMRU5fTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSX0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE1FTkFCTEVEX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE1FUFNfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNVUxUSUNBU1RSWF9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWFNMRUVQRFVSX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE1IT0xERFVSX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOTkFNRV9MRU4JKChVSU5UMTYpMzQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05EVElNUEVSX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjFfTEVOCSgoVUlOVDE2KTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMl9MRU4JKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIzX0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjRfTEVOCSgoVUlOVDE2KTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNV9MRU4JKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI2X0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUNBU1RQTUJVRkZfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBVVRIRU5USUNBVElPTl9MRU4gKChVSU5UMTYpc2l6ZW9mKFVJTlQxNikpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQVhTTEVFUERVUl9MRU4JKChVSU5UMTYpMCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSSURzOiBOZXR3b3JrIFBhcmFtZXRlcnMsIER5bmFtaWMgQ29uZmlndXJhdGlvbiBFbnRpdGllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfR1JPVVBBRERSCQkoKFVJTlQxNikweEZDODApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DUkVBVEVJQlNTCQkoKFVJTlQxNikweEZDODEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNICQkoKFVJTlQxNikweEZDODIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gJCSgoVUlOVDE2KTB4RkM4MykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwJCSgoVUlOVDE2KTB4RkM4NCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BST01JU0NNT0RFCQkoKFVJTlQxNikweEZDODUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMAkJKChVSU5UMTYpMHhGQzkwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDEJCSgoVUlOVDE2KTB4RkM5MSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gyCQkoKFVJTlQxNikweEZDOTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMwkJKChVSU5UMTYpMHhGQzkzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDQJCSgoVUlOVDE2KTB4RkM5NCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g1CQkoKFVJTlQxNikweEZDOTUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINgkJKChVSU5UMTYpMHhGQzk2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMAkJKChVSU5UMTYpMHhGQzk3KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMQkJKChVSU5UMTYpMHhGQzk4KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMgkJKChVSU5UMTYpMHhGQzk5KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMwkJKChVSU5UMTYpMHhGQzlBKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNINAkJKChVSU5UMTYpMHhGQzlCKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNINQkJKChVSU5UMTYpMHhGQzlDKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNINgkJKChVSU5UMTYpMHhGQzlEKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDAJCSgoVUlOVDE2KTB4RkM5RSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwxCQkoKFVJTlQxNikweEZDOUYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMgkJKChVSU5UMTYpMHhGQ0EwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDMJCSgoVUlOVDE2KTB4RkNBMSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw0CQkoKFVJTlQxNikweEZDQTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNQkJKChVSU5UMTYpMHhGQ0EzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDYJCSgoVUlOVDE2KTB4RkNBNCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSSUQgTGVuZ3RoczogTmV0d29yayBQYXJhbSwgRHluYW1pYyBDb25maWcgRW50aXRpZXMKKyAgVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIEpVU1QgdGhlIERBVEEgcGFydCBvZiB0aGUgUklEIChkb2VzIG5vdAorICBpbmNsdWRlIHRoZSBsZW4gb3IgY29kZSBmaWVsZHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUT0RPOiBmaWxsIGluIHRoZSByZXN0IG9mIHRoZXNlICovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9HUk9VUEFERFJfTEVOCSgoVUlOVDE2KTE2ICogV0xBTl9BRERSX0xFTikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NSRUFURUlCU1NfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTF9MRU4JKChVSU5UMTYpNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BST01JU0NNT0RFX0xFTgkoKFVJTlQxNikyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDBfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMV9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gyX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDNfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINF9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g1X0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDZfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gwX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMV9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gzX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNINF9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDVfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g2X0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDBfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMV9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwyX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDNfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNF9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw1X0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDZfTEVOCSgoVUlOVDE2KTApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbmZpZ3VyYXRpb24gUklEczogQmVoYXZpb3IgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfSVRJQ0tUSU1FCQkoKFVJTlQxNikweEZDRTApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbmZpZ3VyYXRpb24gUklEIExlbmd0aHM6IEJlaGF2aW9yIFBhcmFtZXRlcnMKKyAgVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIEpVU1QgdGhlIERBVEEgcGFydCBvZiB0aGUgUklEIChkb2VzIG5vdAorICBpbmNsdWRlIHRoZSBsZW4gb3IgY29kZSBmaWVsZHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9JVElDS1RJTUVfTEVOCSgoVUlOVDE2KTIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUklEczogTklDIEluZm9ybWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NQVhMT0FEVElNRQkJKChVSU5UMTYpMHhGRDAwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVIJKChVSU5UMTYpMHhGRDAxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJJSURFTlRJVFkJCSgoVUlOVDE2KTB4RkQwMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSVNVUFJBTkdFCQkoKFVJTlQxNikweEZEMDMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUklfQ0ZJQUNUUkFOR0VTCSgoVUlOVDE2KTB4RkQwNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUgkoKFVJTlQxNikweEZEMEEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9OSUNJREVOVElUWQkJKChVSU5UMTYpMHhGRDBCKQorI2RlZmluZQkJSEZBMzg0eF9SSURfTUZJU1VQUkFOR0UJCSgoVUlOVDE2KTB4RkQwQykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NGSVNVUFJBTkdFCQkoKFVJTlQxNikweEZEMEQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DSEFOTkVMTElTVAkJKChVSU5UMTYpMHhGRDEwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUkVHVUxBVE9SWURPTUFJTlMJKChVSU5UMTYpMHhGRDExKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVEVNUFRZUEUJCSgoVUlOVDE2KTB4RkQxMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NJUwkJCSgoVUlOVDE2KTB4RkQxMykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQUlERU5USVRZCQkoKFVJTlQxNikweEZEMjApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFTVVBSQU5HRQkJKChVSU5UMTYpMHhGRDIxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBX01GSUFDVFJBTkdFUwkoKFVJTlQxNikweEZEMjIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFfQ0ZJQUNUUkFOR0VTCSgoVUlOVDE2KTB4RkQyMykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0JVSUxEU0VRCQkoKFVJTlQxNikweEZGRkUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GV0lECQkoKFVJTlQxNikweEZGRkYpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUklEIExlbmd0aHM6IE5JQyBJbmZvcm1hdGlvbgorICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CisgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX01BWExPQURUSU1FX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSX0xFTgkJKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfZG93bmxvYWRidWZmZXJfdCkpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUklJREVOVElUWV9MRU4JCSgoVUlOVDE2KTgpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUklTVVBSQU5HRV9MRU4JCSgoVUlOVDE2KTEwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZJQUNUUkFOR0VTX0xFTgkJKChVSU5UMTYpMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOCQkoKFVJTlQxNikxMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX05JQ0lERU5USVRZX0xFTgkJKChVSU5UMTYpOCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01GSVNVUFJBTkdFX0xFTgkJKChVSU5UMTYpMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DRklTVVBSQU5HRV9MRU4JCSgoVUlOVDE2KTEwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0hBTk5FTExJU1RfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUkVHVUxBVE9SWURPTUFJTlNfTEVOCSgoVUlOVDE2KTEyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVEVNUFRZUEVfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0lTX0xFTgkJCSgoVUlOVDE2KTQ4MCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQUlERU5USVRZX0xFTgkJKChVSU5UMTYpOCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQVNVUFJBTkdFX0xFTgkJKChVSU5UMTYpMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NRklBQ1RSQU5HRVNfTEVOCQkoKFVJTlQxNikxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NGSUFDVFJBTkdFUzJfTEVOCQkoKFVJTlQxNikxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0JVSUxEU0VRX0xFTgkJKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfQnVpbGRTZXFfdCkpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GV0lEX0xFTgkJCSgoVUlOVDE2KXNpemVvZihoZmEzODR4X0ZXSURfdCkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZm9ybWF0aW9uIFJJRHM6ICBNQUMgSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BPUlRTVEFUVVMJCSgoVUlOVDE2KTB4RkQ0MCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lECQkoKFVJTlQxNikweEZENDEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQJKChVSU5UMTYpMHhGRDQyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZCSgoVUlOVDE2KTB4RkQ0MykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUJKChVSU5UMTYpMHhGRDQ0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJDTklOVAkoKFVJTlQxNikweEZENDUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UU0NBTEVUSFJFU0gJKChVSU5UMTYpMHhGRDQ2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPVE9DT0xSU1BUSU1FCSgoVUlOVDE2KTB4RkQ0NykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NIT1JUUkVUUllMSU1JVAkoKFVJTlQxNikweEZENDgpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9MT05HUkVUUllMSU1JVAkoKFVJTlQxNikweEZENDkpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NQVhUWExJRkVUSU1FCSgoVUlOVDE2KTB4RkQ0QSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01BWFJYTElGRVRJTUUJKChVSU5UMTYpMHhGRDRCKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZQT0xMQUJMRQkJKChVSU5UMTYpMHhGRDRDKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQVVUSEFMR09SSVRITVMJKChVSU5UMTYpMHhGRDREKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJJVkFDWU9QVElNUAkoKFVJTlQxNikweEZENEYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9EQk1DT01NU1FVQUxJVFkJKChVSU5UMTYpMHhGRDUxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTEJKChVSU5UMTYpMHhGRDgwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTIJKChVSU5UMTYpMHhGRDgxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTMJKChVSU5UMTYpMHhGRDgyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTQJKChVSU5UMTYpMHhGRDgzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTUJKChVSU5UMTYpMHhGRDg0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTYJKChVSU5UMTYpMHhGRDg1KQorI2RlZmluZQkJSEZBMzg0eF9SSURfT1dOTUFDQUREUkVTUwkoKFVJTlQxNikweEZEODYpCisvLyAjZGVmaW5lCUhGQTM4NHhfUklEX1BDRklORk8JCSgoVUlOVDE2KTB4RkQ4NykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NDQU5SRVNVTFRTICAgICAgIAkoKFVJTlQxNikweEZEODgpIC8vIE5FVworI2RlZmluZQkJSEZBMzg0eF9SSURfSE9TVFNDQU5SRVNVTFRTICAgCSgoVUlOVDE2KTB4RkQ4OSkgLy8gTkVXCisjZGVmaW5lCQlIRkEzODR4X1JJRF9BVVRIRU5USUNBVElPTlVTRUQJKChVSU5UMTYpMHhGRDhBKSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0FTU09DSUFURUZBSUxVUkUgIAkoKFVJTlQxNikweEZEOEQpIC8vIDEuOC4wCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZm9ybWF0aW9uIFJJRCBMZW5ndGhzOiAgTUFDIEluZm9ybWF0aW9uCisgIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiBKVVNUIHRoZSBEQVRBIHBhcnQgb2YgdGhlIFJJRCAoZG9lcyBub3QKKyAgaW5jbHVkZSB0aGUgbGVuIG9yIGNvZGUgZmllbGRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfUE9SVFNUQVRVU19MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UU1NJRF9MRU4JCSgoVUlOVDE2KTM0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lEX0xFTgkJKChVSU5UMTYpV0xBTl9CU1NJRF9MRU4pCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DT01NU1FVQUxJVFlfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9jb21tc3F1YWxpdHlfdCkpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9EQk1DT01NU1FVQUxJVFlfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9kYm1jb21tc3F1YWxpdHlfdCkpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRCQ05JTlRfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBQ1VSU0NBTEVUSFJFU0hfTEVOCSgoVUlOVDE2KTEyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQVBDVVJTQ0FMRVRIUkVTSF9MRU4JKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BST1RPQ09MUlNQVElNRV9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TSE9SVFJFVFJZTElNSVRfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfTE9OR1JFVFJZTElNSVRfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfTUFYVFhMSUZFVElNRV9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NQVhSWExJRkVUSU1FX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NGUE9MTEFCTEVfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQVVUSEFMR09SSVRITVNfTEVOCQkoKFVJTlQxNik0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJJVkFDWU9QVElNUF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMV9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMl9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFM19MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNV9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNl9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9PV05NQUNBRERSRVNTX0xFTgkJKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BDRklORk9fTEVOCQkJKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4JCSgoVUlOVDE2KXNpemVvZihoZmEzODR4X1BDRkluZm9fZGF0YV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NDQU5SRVFVRVNUX0xFTgkJKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfU2NhblJlcXVlc3RfZGF0YV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0pPSU5SRVFVRVNUX0xFTgkJKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhFTlRJQ0FURVNUQV9MRU4JCSgoVUlOVDE2KXNpemVvZihoZmEzODR4X2F1dGhlbnRpY2F0ZVN0YXRpb25fZGF0YV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NIQU5ORUxJTkZPUkVRVUVTVF9MRU4JKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfQ2hhbm5lbEluZm9SZXF1ZXN0X2RhdGFfdCkpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSSURzOiAgTW9kZW0gSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BIWVRZUEUJCSgoVUlOVDE2KTB4RkRDMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRDSEFOTkVMCSgoVUlOVDE2KTB4RkRDMSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRQT1dFUlNUQVRFCSgoVUlOVDE2KTB4RkRDMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NDQU1PREUJCSgoVUlOVDE2KTB4RkRDMykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NVUFBPUlRFRERBVEFSQVRFUwkoKFVJTlQxNikweEZEQzYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9MRk9TVEFUVVMgICAgICAgICAgICgoVUlOVDE2KTB4RkRDNykgLy8gMS43LjEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUklEIExlbmd0aHM6ICBNb2RlbSBJbmZvcm1hdGlvbgorICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CisgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BIWVRZUEVfTEVOCQkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRDSEFOTkVMX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRQT1dFUlNUQVRFX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0NBTU9ERV9MRU4JCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1VQUE9SVEVEREFUQVJBVEVTX0xFTgkoKFVJTlQxNikxMCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQVBJIEVOSEFOQ0VNRU5UUyAoTk9UIEFMUkVBRFkgSU1QTEVNRU5URUQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZSUQJKChVSU5UMTYpMHhGQzIzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTAJKChVSU5UMTYpMHhGQzI0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTEJKChVSU5UMTYpMHhGQzI1KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTIJKChVSU5UMTYpMHhGQzI2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTMJKChVSU5UMTYpMHhGQzI3KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MJCSgoVUlOVDE2KTB4RkMyOCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUEtFWU1BUFRBQkxFCSgoVUlOVDE2KTB4RkMyOSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OCSgoVUlOVDE2KTB4RkMyQSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWEFTU09DU1RBVElPTlMJKChVSU5UMTYpMHhGQzJCKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GVFhDT05UUk9MCSgoVUlOVDE2KTB4RkMyQykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFCSgoVUlOVDE2KTB4RkMyRCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkhPU1RBVVRIQVNTT0MJKChVSU5UMTYpMHhGQzJFKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUkNWQ1JDRVJST1IJKChVSU5UMTYpMHhGQzMwKQorLy8gI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTU1MSUZFCQkoKFVJTlQxNikweEZDMzEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBTFRSRVRSWUNOVAkoKFVJTlQxNikweEZDMzIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBUEJDTklOVAkJKChVSU5UMTYpMHhGQzMzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPCSgoVUlOVDE2KTB4RkMzNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNUQVBDRklORk8JKChVSU5UMTYpMHhGQzM1KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUFJJT1JJVFlRVVNBR0UJKChVSU5UMTYpMHhGQzM3KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GVElNQ1RSTAkJKChVSU5UMTYpMHhGQzQwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GVEhJUlRZMlRBTExZCSgoVUlOVDE2KTB4RkM0MikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkVOSFNFQ1VSSVRZCSgoVUlOVDE2KTB4RkM0MykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkRCTUFESlVTVCAgCSgoVUlOVDE2KTB4RkM0NikgLy8gTkVXCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXUEFEQVRBICAgICAgIAkoKFVJTlQxNikweEZDNDgpIC8vIDEuNy4wCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQUk9QT0dBVElPTkRFTEFZCSgoVUlOVDE2KTB4RkM0OSkgLy8gMS43LjYKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNIT1JUUFJFQU1CTEUJKChVSU5UMTYpMHhGQ0IwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GRVhDTE9OR1BSRUFNQkxFCSgoVUlOVDE2KTB4RkNCMSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFVVEhSU1BUSU1FT1VUCSgoVUlOVDE2KTB4RkNCMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkJBU0lDUkFURVMJKChVSU5UMTYpMHhGQ0IzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU1VQUFJBVEVTCSgoVUlOVDE2KTB4RkNCNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkZBTExCQUNLQ1RSTAkoKFVJTlQxNikweEZDQjUpIC8vIE5FVworI2RlZmluZQkJSEZBMzg0eF9SSURfV0VQS0VZU1RBVFVTICAgCSgoVUlOVDE2KTB4RkNCNikgLy8gTkVXCisjZGVmaW5lCQlIRkEzODR4X1JJRF9XRVBLRVlNQVBJTkRFWCAJKChVSU5UMTYpMHhGQ0I3KSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0JST0FEQ0FTVEtFWUlEIAkoKFVJTlQxNikweEZDQjgpIC8vIE5FVworI2RlZmluZQkJSEZBMzg0eF9SSURfRU5UU0VDRkxBR0VZSUQgCSgoVUlOVDE2KTB4RkNCOSkgLy8gTkVXCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQQVNTSVZFU0NBTkNUUkwJKChVSU5UMTYpMHhGQ0JBKSAvLyBORVcgU1RBCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXUEFIQU5ETElORwkoKFVJTlQxNikweEZDQkIpIC8vIDEuNy4wCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NRENDT05UUk9MICAgICAgICAJKChVSU5UMTYpMHhGQ0JDKSAvLyAxLjcuMC8xLjQuMAorI2RlZmluZQkJSEZBMzg0eF9SSURfTURDQ09VTlRSWSAgICAgICAgCSgoVUlOVDE2KTB4RkNCRCkgLy8gMS43LjAvMS40LjAKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUE9XRVJNQVggICAgICAgIAkoKFVJTlQxNikweEZDQkUpIC8vIDEuNy4wLzEuNC4wCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZMRk9FTkJMRUQgICAgICAJKChVSU5UMTYpMHhGQ0JGKSAvLyAxLjYuMworI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0NBUElORk8gICAgICAgICAgICAgKChVSU5UMTYpMHhGQ0MwKSAvLyAxLjcuMC8xLjMuNworI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0xJU1RFTklOVEVSVkFMICAgICAgKChVSU5UMTYpMHhGQ0MxKSAvLyAxLjcuMC8xLjMuNworI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0RJVkVSU0lUWUVOQUJMRUQgICAgKChVSU5UMTYpMHhGQ0MyKSAvLyAxLjcuMC8xLjMuNworI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0xFRF9DT05UUk9MICAgICAgICAgKChVSU5UMTYpMHhGQ0M0KSAvLyAxLjcuNgorI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0hGT19ERUxBWSAgICAgICAgICAgKChVSU5UMTYpMHhGQ0M1KSAvLyAxLjcuNgorI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0RJU1NBTE9XRURCU1NJRCAgICAgKChVSU5UMTYpMHhGQ0M2KSAvLyAxLjguMAorI2RlZmluZQkJSEZBMzg0eF9SSURfU0NBTlJFUVVFU1QJCSgoVUlOVDE2KTB4RkNFMSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0pPSU5SRVFVRVNUCQkoKFVJTlQxNikweEZDRTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9BVVRIRU5USUNBVEVTVEEJKChVSU5UMTYpMHhGQ0UzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0hBTk5FTElORk9SRVFVRVNUCSgoVUlOVDE2KTB4RkNFNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0hPU1RTQ0FOICAgICAgICAgIAkoKFVJTlQxNikweEZDRTUpIC8vIE5FVyBTVEEKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0FTU09DSUFURVNUQQkoKFVJTlQxNikweEZDRTYpCisKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVlfTEVOCSgoVUlOVDE2KTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVAxMjhERUZBVUxUS0VZX0xFTgkoKFVJTlQxNikxNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBSSU9RVVNBR0VfTEVOCQkoKFVJTlQxNik0KQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUEQgUmVjb3JkIGNvZGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEhGQTM4NHhfUERSX1BDQl9QQVJUTlVNCQkoKFVJTlQxNikweDAwMDEpCisjZGVmaW5lIEhGQTM4NHhfUERSX1BEQVZFUgkJKChVSU5UMTYpMHgwMDAyKQorI2RlZmluZSBIRkEzODR4X1BEUl9OSUNfU0VSSUFMCQkoKFVJTlQxNikweDAwMDMpCisjZGVmaW5lIEhGQTM4NHhfUERSX01LS19NRUFTVVJFTUVOVFMJKChVSU5UMTYpMHgwMDA0KQorI2RlZmluZSBIRkEzODR4X1BEUl9OSUNfUkFNU0laRQkJKChVSU5UMTYpMHgwMDA1KQorI2RlZmluZSBIRkEzODR4X1BEUl9NRklTVVBSQU5HRQkJKChVSU5UMTYpMHgwMDA2KQorI2RlZmluZSBIRkEzODR4X1BEUl9DRklTVVBSQU5HRQkJKChVSU5UMTYpMHgwMDA3KQorI2RlZmluZSBIRkEzODR4X1BEUl9OSUNJRAkJKChVSU5UMTYpMHgwMDA4KQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX1JFRkRBQ19NRUFTVVJFTUVOVFMJKChVSU5UMTYpMHgwMDEwKQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX1ZHREFDX01FQVNVUkVNRU5UUwkoKFVJTlQxNikweDAwMjApCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfTEVWRUxfQ09NUF9NRUFTVVJFTUVOVFMJKChVSU5UMTYpMHgwMDMwKQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX01PREVNX1RSSU1EQUNfTUVBU1VSRU1FTlRTCSgoVUlOVDE2KTB4MDA0MCkKKy8vI2RlZmluZSBIRkEzODR4X1BEUl9DT1JFR0FfSEFDSwkJKChVSU5UMTYpMHgwMGZmKQorI2RlZmluZSBIRkEzODR4X1BEUl9NQUNfQUREUkVTUwkJKChVSU5UMTYpMHgwMTAxKQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX01LS19DQUxMTkFNRQkoKFVJTlQxNikweDAxMDIpCisjZGVmaW5lIEhGQTM4NHhfUERSX1JFR0RPTUFJTgkJKChVSU5UMTYpMHgwMTAzKQorI2RlZmluZSBIRkEzODR4X1BEUl9BTExPV0VEX0NIQU5ORUwJKChVSU5UMTYpMHgwMTA0KQorI2RlZmluZSBIRkEzODR4X1BEUl9ERUZBVUxUX0NIQU5ORUwJKChVSU5UMTYpMHgwMTA1KQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX1BSSVZBQ1lfT1BUSU9OCSgoVUlOVDE2KTB4MDEwNikKKyNkZWZpbmUgSEZBMzg0eF9QRFJfVEVNUFRZUEUJCSgoVUlOVDE2KTB4MDEwNykKKy8vI2RlZmluZSBIRkEzODR4X1BEUl9SRUZEQUNfU0VUVVAJKChVSU5UMTYpMHgwMTEwKQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX1ZHREFDX1NFVFVQCQkoKFVJTlQxNikweDAxMjApCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfTEVWRUxfQ09NUF9TRVRVUAkoKFVJTlQxNikweDAxMzApCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfVFJJTURBQ19TRVRVUAkoKFVJTlQxNikweDAxNDApCisjZGVmaW5lIEhGQTM4NHhfUERSX0lGUl9TRVRUSU5HCQkoKFVJTlQxNikweDAyMDApCisjZGVmaW5lIEhGQTM4NHhfUERSX1JGUl9TRVRUSU5HCQkoKFVJTlQxNikweDAyMDEpCisjZGVmaW5lIEhGQTM4NHhfUERSX0hGQTM4NjFfQkFTRUxJTkUJKChVSU5UMTYpMHgwMjAyKQorI2RlZmluZSBIRkEzODR4X1BEUl9IRkEzODYxX1NIQURPVwkoKFVJTlQxNikweDAyMDMpCisjZGVmaW5lIEhGQTM4NHhfUERSX0hGQTM4NjFfSUZSRgkoKFVJTlQxNikweDAyMDQpCisjZGVmaW5lIEhGQTM4NHhfUERSX0hGQTM4NjFfQ0hDQUxTUAkoKFVJTlQxNikweDAzMDApCisjZGVmaW5lIEhGQTM4NHhfUERSX0hGQTM4NjFfQ0hDQUxJCSgoVUlOVDE2KTB4MDMwMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfTUFYX1RYX1BPV0VSICAJKChVSU5UMTYpMHgwMzAyKQorI2RlZmluZSBIRkEzODR4X1BEUl9NQVNURVJfQ0hBTl9MSVNUCSgoVUlOVDE2KTB4MDMwMykKKyNkZWZpbmUgSEZBMzg0eF9QRFJfMzg0Ml9OSUNfQ09ORklHCSgoVUlOVDE2KTB4MDQwMCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfVVNCX0lECQkoKFVJTlQxNikweDA0MDEpCisjZGVmaW5lIEhGQTM4NHhfUERSX1BDSV9JRAkJKChVSU5UMTYpMHgwNDAyKQorI2RlZmluZSBIRkEzODR4X1BEUl9QQ0lfSUZDT05GCQkoKFVJTlQxNikweDA0MDMpCisjZGVmaW5lIEhGQTM4NHhfUERSX1BDSV9QTUNPTkYJCSgoVUlOVDE2KTB4MDQwNCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUkZFTlJHWQkJKChVSU5UMTYpMHgwNDA2KQorI2RlZmluZSBIRkEzODR4X1BEUl9VU0JfUE9XRVJfVFlQRSAgICAgICgoVUlOVDE2KTB4MDQwNykKKy8vI2RlZmluZSBIRkEzODR4X1BEUl9VTktOT1dONDA4CQkoKFVJTlQxNikweDA0MDgpCisjZGVmaW5lIEhGQTM4NHhfUERSX1VTQl9NQVhfUE9XRVIJKChVSU5UMTYpMHgwNDA5KQorI2RlZmluZSBIRkEzODR4X1BEUl9VU0JfTUFOVUZBQ1RVUkVSCSgoVUlOVDE2KTB4MDQxMCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfVVNCX1BST0RVQ1QgIAkoKFVJTlQxNikweDA0MTEpCisjZGVmaW5lIEhGQTM4NHhfUERSX0FOVF9ESVZFUlNJVFkgICAJKChVSU5UMTYpMHgwNDEyKQorI2RlZmluZSBIRkEzODR4X1BEUl9IRk9fREVMQVkgICAgICAgCSgoVUlOVDE2KTB4MDQxMykKKyNkZWZpbmUgSEZBMzg0eF9QRFJfU0NBTEVfVEhSRVNIIAkoKFVJTlQxNikweDA0MTQpCisKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9NQU5GX1RFU1RTUAkoKFVJTlQxNikweDA5MDApCisjZGVmaW5lIEhGQTM4NHhfUERSX0hGQTM4NjFfTUFORl9URVNUSQkoKFVJTlQxNikweDA5MDEpCisjZGVmaW5lIEhGQTM4NHhfUERSX0VORF9PRl9QREEJCSgoVUlOVDE2KTB4MDAwMCkKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0gUmVnaXN0ZXIgSUQgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUJCUhGQTM4NHhfQ01ECQlIRkEzODR4X0NNRF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfUEFSQU0wCQlIRkEzODR4X1BBUkFNMF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfUEFSQU0xCQlIRkEzODR4X1BBUkFNMV9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfUEFSQU0yCQlIRkEzODR4X1BBUkFNMl9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTCQlIRkEzODR4X1NUQVRVU19PRkYKKyNkZWZpbmUJCUhGQTM4NHhfUkVTUDAJCUhGQTM4NHhfUkVTUDBfT0ZGCisjZGVmaW5lCQlIRkEzODR4X1JFU1AxCQlIRkEzODR4X1JFU1AxX09GRgorI2RlZmluZQkJSEZBMzg0eF9SRVNQMgkJSEZBMzg0eF9SRVNQMl9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfSU5GT0ZJRAkJSEZBMzg0eF9JTkZPRklEX09GRgorI2RlZmluZQkJSEZBMzg0eF9SWEZJRAkJSEZBMzg0eF9SWEZJRF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfQUxMT0NGSUQJSEZBMzg0eF9BTExPQ0ZJRF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfVFhDT01QTEZJRAlIRkEzODR4X1RYQ09NUExGSURfT0ZGCisjZGVmaW5lCQlIRkEzODR4X1NFTEVDVDAJCUhGQTM4NHhfU0VMRUNUMF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUMAkJSEZBMzg0eF9PRkZTRVQwX09GRgorI2RlZmluZQkJSEZBMzg0eF9EQVRBMAkJSEZBMzg0eF9EQVRBMF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMQkJSEZBMzg0eF9TRUxFQ1QxX09GRgorI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQxCQlIRkEzODR4X09GRlNFVDFfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0RBVEExCQlIRkEzODR4X0RBVEExX09GRgorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVQJCUhGQTM4NHhfRVZTVEFUX09GRgorI2RlZmluZQkJSEZBMzg0eF9JTlRFTgkJSEZBMzg0eF9JTlRFTl9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0sJCUhGQTM4NHhfRVZBQ0tfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0NPTlRST0wJCUhGQTM4NHhfQ09OVFJPTF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMAlIRkEzODR4X1NXU1VQUE9SVDBfT0ZGCisjZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDEJSEZBMzg0eF9TV1NVUFBPUlQxX09GRgorI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQyCUhGQTM4NHhfU1dTVVBQT1JUMl9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfQVVYUEFHRQkJSEZBMzg0eF9BVVhQQUdFX09GRgorI2RlZmluZQkJSEZBMzg0eF9BVVhPRkZTRVQJSEZBMzg0eF9BVVhPRkZTRVRfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0FVWERBVEEJCUhGQTM4NHhfQVVYREFUQV9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfUENJQ09SCQlIRkEzODR4X1BDSUNPUl9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfUENJSENSCQlIRkEzODR4X1BDSUhDUl9PRkYKKworCisvKi0tLSBSZWdpc3RlciBUZXN0L0dldC9TZXQgRmllbGQgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0lTQlVTWSh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNil2YWx1ZSkgJiBIRkEzODR4X0NNRF9CVVNZKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0FJTkZPX0dFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpICYgSEZBMzg0eF9DTURfQUlORk8pID4+IDgpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk9fU0VUKHZhbHVlKQkJKChVSU5UMTYpKChVSU5UMTYpKHZhbHVlKSA8PCA4KSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX01BQ1BPUlRfR0VUKHZhbHVlKQkJKChVSU5UMTYpKEhGQTM4NHhfQ01EX0FJTkZPX0dFVCgoVUlOVDE2KSh2YWx1ZSkgJiBIRkEzODR4X0NNRF9NQUNQT1JUKSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9NQUNQT1JUX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KUhGQTM4NHhfQ01EX0FJTkZPX1NFVCh2YWx1ZSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9JU1JFQ0wodmFsdWUpCQkoKFVJTlQxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKChVSU5UMTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX1JFQ0wpKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1JFQ0xfU0VUKHZhbHVlKQkJKChVSU5UMTYpSEZBMzg0eF9DTURfQUlORk9fU0VUKHZhbHVlKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1FPU19HRVQodmFsdWUpCQkoKFVJTlQxNigoKChVSU5UMTYpKHZhbHVlKSkmKChVSU5UMTYpMHgzMDAwKSkgPj4gMTIpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfUU9TX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTIpICYgMHgzMDAwKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0lTV1JJVEUodmFsdWUpCQkoKFVJTlQxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKChVSU5UMTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX1dSSVRFKSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9XUklURV9TRVQodmFsdWUpCQkoKFVJTlQxNilIRkEzODR4X0NNRF9BSU5GT19TRVQoKFVJTlQxNil2YWx1ZSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERV9HRVQodmFsdWUpCQkoKFVJTlQxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKChVSU5UMTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX1BST0dNT0RFKSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERV9TRVQodmFsdWUpCQkoKFVJTlQxNilIRkEzODR4X0NNRF9BSU5GT19TRVQoKFVJTlQxNil2YWx1ZSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFX0dFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfQ01EX0NNRENPREUpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQodmFsdWUpCQkoKFVJTlQxNikodmFsdWUpKQorCisjZGVmaW5lCQlIRkEzODR4X1NUQVRVU19SRVNVTFRfR0VUKHZhbHVlKQkoKFVJTlQxNikoKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9TVEFUVVNfUkVTVUxUKSA+PiA4KSkKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX1JFU1VMVF9TRVQodmFsdWUpCSgoKFVJTlQxNikodmFsdWUpKSA8PCA4KQorI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfQ01EQ09ERV9HRVQodmFsdWUpCSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfU1RBVFVTX0NNRENPREUpCisjZGVmaW5lCQlIRkEzODR4X1NUQVRVU19DTURDT0RFX1NFVCh2YWx1ZSkJKChVSU5UMTYpKHZhbHVlKSkKKworI2RlZmluZQkJSEZBMzg0eF9PRkZTRVRfSVNCVVNZKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9PRkZTRVRfQlVTWSkpCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9JU0VSUih2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfT0ZGU0VUX0VSUikpCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9EQVRBT0ZGX0dFVCh2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9PRkZTRVRfREFUQU9GRikpCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9EQVRBT0ZGX1NFVCh2YWx1ZSkJKChVSU5UMTYpKHZhbHVlKSkKKworI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNUSUNLKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfVElDSykpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU1dURVJSKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfV1RFUlIpKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNJTkZEUk9QKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfSU5GRFJPUCkpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU0lORk8odmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9JTkZPKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTRFRJTSh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX0RUSU0pKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNDTUQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9DTUQpKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNBTExPQyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX0FMTE9DKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTVFhFWEModmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9UWEVYQykpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU1RYKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfVFgpKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNSWCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX1JYKSkKKworI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNCQVBfT1AodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVF9CQVBfT1ApKQorCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lTVElDSyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fVElDSykpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1RJQ0tfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDE1KSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNXVEVSUih2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fV1RFUlIpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9XVEVSUl9TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTQpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU0lORkRST1AodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX0lORkRST1ApKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JTkZEUk9QX1NFVCh2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDEzKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNJTkZPKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9JTkZPKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSU5GT19TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgNykpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lTRFRJTSh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fRFRJTSkpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0RUSU1fU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDUpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU0NNRCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fQ01EKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fQ01EX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCA0KSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNBTExPQyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fQUxMT0MpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9BTExPQ19TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMykpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lTVFhFWEModmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX1RYRVhDKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fVFhFWENfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDIpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU1RYKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9UWCkpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1RYX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAxKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNSWCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fUlgpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9SWF9TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMCkpCisKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNUSUNLKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19USUNLKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVElDS19TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTUpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU1dURVJSKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19XVEVSUikpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX1dURVJSX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAxNCkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTSU5GRFJPUCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfSU5GRFJPUCkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lORkRST1BfU0VUKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTMpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU0lORk8odmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX0lORk8pKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JTkZPX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCA3KSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNEVElNKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19EVElNKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfRFRJTV9TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgNSkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTQ01EKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19DTUQpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19DTURfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDQpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU0FMTE9DKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19BTExPQykpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0FMTE9DX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAzKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNUWEVYQyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfVFhFWEMpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19UWEVYQ19TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMikpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTVFgodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX1RYKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVFhfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDEpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU1JYKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19SWCkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX1JYX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAwKSkKKworI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWEVOX1NFVCh2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDE0KSkKKyNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9BVVhFTl9HRVQodmFsdWUpCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA+PiAxNCkpCisKKy8qIEJ5dGUgT3JkZXIgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIGhmYTM4NHgyaG9zdF8xNihuKQkoX19sZTE2X3RvX2NwdSgoVUlOVDE2KShuKSkpCisjZGVmaW5lIGhmYTM4NHgyaG9zdF8zMihuKQkoX19sZTMyX3RvX2NwdSgoVUlOVDMyKShuKSkpCisjZGVmaW5lIGhvc3QyaGZhMzg0eF8xNihuKQkoX19jcHVfdG9fbGUxNigoVUlOVDE2KShuKSkpCisjZGVmaW5lIGhvc3QyaGZhMzg0eF8zMihuKQkoX19jcHVfdG9fbGUzMigoVUlOVDMyKShuKSkpCisjZW5kaWYKKworLyogSG9zdCBNYWludGFpbmVkIFN0YXRlIEluZm8gKi8KKyNkZWZpbmUgSEZBMzg0eF9TVEFURV9QUkVJTklUCTAKKyNkZWZpbmUgSEZBMzg0eF9TVEFURV9JTklUCTEKKyNkZWZpbmUgSEZBMzg0eF9TVEFURV9SVU5OSU5HCTIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tLS0tIFR5cGVzIGFuZCB0aGVpciByZWxhdGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgSEZBMzg0eF9IT1NUQVVUSEFTU09DX0hPU1RBVVRIICAgQklUMAorI2RlZmluZSBIRkEzODR4X0hPU1RBVVRIQVNTT0NfSE9TVEFTU09DICBCSVQxCisKKyNkZWZpbmUgSEZBMzg0eF9XSEFIQU5ETElOR19ESVNBQkxFRCAgICAgMAorI2RlZmluZSBIRkEzODR4X1dIQUhBTkRMSU5HX1BBU1NUSFJPVUdIICBCSVQxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBDb21tb25seSB1c2VkIGJhc2ljIHR5cGVzICovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2J5dGVzdHIKK3sKKwlVSU5UMTYJbGVuOworCVVJTlQ4CWRhdGFbMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfYnl0ZXN0cl90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2J5dGVzdHIzMgoreworCVVJTlQxNglsZW47CisJVUlOVDgJZGF0YVszMl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfYnl0ZXN0cjMyX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbmZpZ3VyYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6CisJTmV0d29yayBQYXJhbWV0ZXJzLCBTdGF0aWMgQ29uZmlndXJhdGlvbiBFbnRpdGllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJvdG90eXBlIHN0cnVjdHVyZTogYWxsIGNvbmZpZ3VyYXRpb24gcmVjb3JkIHN0cnVjdHVyZXMgc3RhcnQgd2l0aAordGhlc2UgbWVtYmVycyAqLworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3JlY29yZAoreworCVVJTlQxNglyZWNsZW47CisJVUlOVDE2CXJpZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9yZWNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9yZWNvcmQxNgoreworCVVJTlQxNglyZWNsZW47CisJVUlOVDE2CXJpZDsKKwlVSU5UMTYJdmFsOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3JlYzE2X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcmVjb3JkMzIKK3sKKwlVSU5UMTYJcmVjbGVuOworCVVJTlQxNglyaWQ7CisJVUlOVDMyCXZhbDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9yZWMzMjsKKworLyotLSBIYXJkd2FyZS9GaXJtd2FyZSBDb21wb25lbnQgSW5mb3JtYXRpb24gLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NvbXBpZGVudAoreworCVVJTlQxNglpZDsKKwlVSU5UMTYJdmFyaWFudDsKKwlVSU5UMTYJbWFqb3I7CisJVUlOVDE2CW1pbm9yOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NvbXBpZGVudF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NhcGxldmVsCit7CisJVUlOVDE2CXJvbGU7CisJVUlOVDE2CWlkOworCVVJTlQxNgl2YXJpYW50OworCVVJTlQxNglib3R0b207CisJVUlOVDE2CXRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jYXBsZXZlbF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZQb3J0VHlwZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlBvcnRUeXBlCit7CisJVUlOVDE2CWNuZlBvcnRUeXBlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlBvcnRUeXBlX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93bk1BQ0FkZHJlc3MgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25NQUNBZGRyZXNzCit7CisJVUlOVDgJY25mT3duTUFDQWRkcmVzc1s2XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZPd25NQUNBZGRyZXNzX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZkRlc2lyZWRTU0lEIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mRGVzaXJlZFNTSUQKK3sKKwlVSU5UOAljbmZEZXNpcmVkU1NJRFszNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mRGVzaXJlZFNTSURfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duQ2hhbm5lbCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93bkNoYW5uZWwKK3sKKwlVSU5UMTYJY25mT3duQ2hhbm5lbDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZPd25DaGFubmVsX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93blNTSUQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25TU0lECit7CisJVUlOVDgJY25mT3duU1NJRFszNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mT3duU1NJRF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZPd25BVElNV2luZG93IC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mT3duQVRJTVdpbmRvdworeworCVVJTlQxNgljbmZPd25BVElNV2luZG93OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bkFUSU1XaW5kb3dfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mU3lzdGVtU2NhbGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZTeXN0ZW1TY2FsZQoreworCVVJTlQxNgljbmZTeXN0ZW1TY2FsZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZTeXN0ZW1TY2FsZV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZNYXhEYXRhTGVuZ3RoIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mTWF4RGF0YUxlbmd0aAoreworCVVJTlQxNgljbmZNYXhEYXRhTGVuZ3RoOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk1heERhdGFMZW5ndGhfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mV0RTQWRkcmVzcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZldEU0FkZHJlc3MKK3sKKwlVSU5UOAljbmZXRFNBZGRyZXNzWzZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZldEU0FkZHJlc3NfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mUE1FbmFibGVkIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mUE1FbmFibGVkCit7CisJVUlOVDE2CWNuZlBNRW5hYmxlZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZQTUVuYWJsZWRfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mUE1FUFMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZQTUVQUworeworCVVJTlQxNgljbmZQTUVQUzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZQTUVQU190OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZNdWx0aWNhc3RSZWNlaXZlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mTXVsdGljYXN0UmVjZWl2ZQoreworCVVJTlQxNgljbmZNdWx0aWNhc3RSZWNlaXZlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk11bHRpY2FzdFJlY2VpdmVfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mQXV0aGVudGljYXRpb24gLS0qLworI2RlZmluZSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX09QRU5TWVNURU0JMHgwMDAxCisjZGVmaW5lIEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fU0hBUkVES0VZCTB4MDAwMgorI2RlZmluZSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX0xFQVAgICAgIAkweDAwMDQKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mTWF4U2xlZXBEdXJhdGlvbiAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk1heFNsZWVwRHVyYXRpb24KK3sKKwlVSU5UMTYJY25mTWF4U2xlZXBEdXJhdGlvbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZNYXhTbGVlcER1cmF0aW9uX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZlBNSG9sZG92ZXJEdXJhdGlvbiAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlBNSG9sZG92ZXJEdXJhdGlvbgoreworCVVJTlQxNgljbmZQTUhvbGRvdmVyRHVyYXRpb247Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mUE1Ib2xkb3ZlckR1cmF0aW9uX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93bk5hbWUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25OYW1lCit7CisJVUlOVDgJY25mT3duTmFtZVszNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mT3duTmFtZV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZPd25EVElNUGVyaW9kIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mT3duRFRJTVBlcmlvZAoreworCVVJTlQxNgljbmZPd25EVElNUGVyaW9kOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bkRUSU1QZXJpb2RfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mV0RTQWRkcmVzcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZldEU0FkZHJlc3NOCit7CisJVUlOVDgJY25mV0RTQWRkcmVzc1s2XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZXRFNBZGRyZXNzTl90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZNdWx0aWNhc3RQTUJ1ZmZlcmluZyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk11bHRpY2FzdFBNQnVmZmVyaW5nCit7CisJVUlOVDE2CWNuZk11bHRpY2FzdFBNQnVmZmVyaW5nOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk11bHRpY2FzdFBNQnVmZmVyaW5nX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbmZpZ3VyYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6CisJTmV0d29yayBQYXJhbWV0ZXJzLCBEeW5hbWljIENvbmZpZ3VyYXRpb24gRW50aXRpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogR3JvdXBBZGRyZXNzZXMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Hcm91cEFkZHJlc3NlcworeworCVVJTlQ4CU1BQ0FkZHJlc3NbMTZdWzZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0dyb3VwQWRkcmVzc2VzX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IENyZWF0ZUlCU1MgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DcmVhdGVJQlNTCit7CisJVUlOVDE2CUNyZWF0ZUlCU1M7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3JlYXRlSUJTU190OworCisjZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lOQ1JFQVRFSUJTUyAgICAgICAgICAwCisjZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lORVNTX0pPSU5DUkVBVEVJQlNTICAxCisjZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lOSUJTUyAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lORVNTX0pPSU5JQlNTICAgICAgICAzCisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IEZyYWdtZW50YXRpb25UaHJlc2hvbGQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9GcmFnbWVudGF0aW9uVGhyZXNob2xkCit7CisJVUlOVDE2CUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfRnJhZ21lbnRhdGlvblRocmVzaG9sZF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBSVFNUaHJlc2hvbGQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9SVFNUaHJlc2hvbGQKK3sKKwlVSU5UMTYJUlRTVGhyZXNob2xkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1JUU1RocmVzaG9sZF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBUeFJhdGVDb250cm9sIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfVHhSYXRlQ29udHJvbAoreworCVVJTlQxNglUeFJhdGVDb250cm9sOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1R4UmF0ZUNvbnRyb2xfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogUHJvbWlzY3VvdXNNb2RlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUHJvbWlzY3VvdXNNb2RlCit7CisJVUlOVDE2CVByb21pc2N1b3VzTW9kZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qcm9taXNjdW91c01vZGVfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogU2NhblJlcXVlc3QgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NjYW5SZXF1ZXN0X2RhdGEKK3sKKwlVSU5UMTYJY2hhbm5lbExpc3Q7CisJVUlOVDE2CXR4UmF0ZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TY2FuUmVxdWVzdF9kYXRhX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IEhvc3RTY2FuUmVxdWVzdCAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGEKK3sKKwlVSU5UMTYJY2hhbm5lbExpc3Q7CisJVUlOVDE2CXR4UmF0ZTsKKwloZmEzODR4X2J5dGVzdHIzMl90IHNzaWQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGFfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogSm9pblJlcXVlc3QgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGEKK3sKKwlVSU5UOAlic3NpZFtXTEFOX0JTU0lEX0xFTl07CisJVUlOVDE2CWNoYW5uZWw7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBhdXRoZW50aWNhdGVTdGF0aW9uIChkYXRhIHBvcnRpb24gb25seSkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGEKK3sKKwlVSU5UOAlhZGRyZXNzW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglzdGF0dXM7CisJVUlOVDE2CWFsZ29yaXRobTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGFfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogYXNzb2NpYXRlU3RhdGlvbiAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfYXNzb2NpYXRlU3RhdGlvbl9kYXRhCit7CisJVUlOVDgJYWRkcmVzc1tXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJc3RhdHVzOworCVVJTlQxNgl0eXBlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2Fzc29jaWF0ZVN0YXRpb25fZGF0YV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBDaGFubmVsSW5mb1JlcXVlc3QgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NoYW5uZWxJbmZvUmVxdWVzdF9kYXRhCit7CisJVUlOVDE2CWNoYW5uZWxMaXN0OworCVVJTlQxNgljaGFubmVsRHdlbGxUaW1lOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NoYW5uZWxJbmZvUmVxdWVzdF9kYXRhX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFdFUEtleU1hcHBpbmcgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1dFUEtleU1hcHBpbmcKK3sKKwlVSU5UOAlhZGRyZXNzW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglrZXlfaW5kZXg7CisJVUlOVDggCWtleVsxNl07CisJVUlOVDggCW1pY190cmFuc21pdF9rZXlbNF07CisJVUlOVDggCW1pY19yZWNlaXZlX2tleVs0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9XRVBLZXlNYXBwaW5nX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFdQQURhdGEgICAgICAgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1dQQURhdGEKK3sKKwlVSU5UMTYJZGF0YWxlbjsKKyAgICAgICAgVUlOVDggCWRhdGFbMF07IC8vIG1heCA4MAorfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1dQQURhdGFfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSZWNvcmQgU3RydWN0dXJlczogQmVoYXZpb3IgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBUaWNrVGltZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1RpY2tUaW1lCit7CisJVUlOVDE2CVRpY2tUaW1lOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1RpY2tUaW1lX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZm9ybWF0aW9uIFJlY29yZCBTdHJ1Y3R1cmVzOiBOSUMgSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1heExvYWRUaW1lIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWF4TG9hZFRpbWUKK3sKKwlVSU5UMTYJTWF4TG9hZFRpbWU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTWF4TG9hZFRpbWVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IERvd25Mb2FkQnVmZmVyIC0tKi8KKy8qIE5PVEU6IFRoZSBwYWdlIGFuZCBvZmZzZXQgYXJlIGluIEFVWCBmb3JtYXQgKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfZG93bmxvYWRidWZmZXIKK3sKKwlVSU5UMTYJcGFnZTsKKwlVSU5UMTYJb2Zmc2V0OworCVVJTlQxNglsZW47Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfZG93bmxvYWRidWZmZXJfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFBSSUlkZW50aXR5IC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUFJJSWRlbnRpdHkKK3sKKwlVSU5UMTYJUFJJQ29tcElEOworCVVJTlQxNglQUklWYXJpYW50OworCVVJTlQxNglQUklNYWpvclZlcnNpb247CisJVUlOVDE2CVBSSU1pbm9yVmVyc2lvbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QUklJZGVudGl0eV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUFJJU3VwUmFuZ2UgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QUklTdXBSYW5nZQoreworCVVJTlQxNglQUklSb2xlOworCVVJTlQxNglQUklJRDsKKwlVSU5UMTYJUFJJVmFyaWFudDsKKwlVSU5UMTYJUFJJQm90dG9tOworCVVJTlQxNglQUklUb3A7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUFJJU3VwUmFuZ2VfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENGSUFjdFJhbmdlcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NGSUFjdFJhbmdlcworeworCVVJTlQxNglDRklSb2xlOworCVVJTlQxNglDRklJRDsKKwlVSU5UMTYJQ0ZJVmFyaWFudDsKKwlVSU5UMTYJQ0ZJQm90dG9tOworCVVJTlQxNglDRklUb3A7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0ZJQWN0UmFuZ2VzX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBOSUNTZXJpYWxOdW1iZXIgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9OSUNTZXJpYWxOdW1iZXIKK3sKKwlVSU5UOAlOSUNTZXJpYWxOdW1iZXJbMTJdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X05JQ1NlcmlhbE51bWJlcl90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTklDSWRlbnRpdHkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9OSUNJZGVudGl0eQoreworCVVJTlQxNglOSUNDb21wSUQ7CisJVUlOVDE2CU5JQ1ZhcmlhbnQ7CisJVUlOVDE2CU5JQ01ham9yVmVyc2lvbjsKKwlVSU5UMTYJTklDTWlub3JWZXJzaW9uOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X05JQ0lkZW50aXR5X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBNRklTdXBSYW5nZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X01GSVN1cFJhbmdlCit7CisJVUlOVDE2CU1GSVJvbGU7CisJVUlOVDE2CU1GSUlEOworCVVJTlQxNglNRklWYXJpYW50OworCVVJTlQxNglNRklCb3R0b207CisJVUlOVDE2CU1GSVRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NRklTdXBSYW5nZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ0ZJU3VwUmFuZ2UgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DRklTdXBSYW5nZQoreworCVVJTlQxNglDRklSb2xlOworCVVJTlQxNglDRklJRDsKKwlVSU5UMTYJQ0ZJVmFyaWFudDsKKwlVSU5UMTYJQ0ZJQm90dG9tOworCVVJTlQxNglDRklUb3A7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0ZJU3VwUmFuZ2VfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEJVSUxEU0VROkJ1aWxkU2VxIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQnVpbGRTZXEgeworCVVJTlQxNglwcmltYXJ5OworCVVJTlQxNglzZWNvbmRhcnk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQnVpbGRTZXFfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEZXSUQgLS0qLworI2RlZmluZSBIRkEzODR4X0ZXSURfTEVOCTE0Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0ZXSUQgeworCVVJTlQ4CXByaW1hcnlbSEZBMzg0eF9GV0lEX0xFTl07CisJVUlOVDgJc2Vjb25kYXJ5W0hGQTM4NHhfRldJRF9MRU5dOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0ZXSURfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENoYW5uZWxMaXN0IC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ2hhbm5lbExpc3QKK3sKKwlVSU5UMTYJQ2hhbm5lbExpc3Q7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ2hhbm5lbExpc3RfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFJlZ3VsYXRvcnlEb21haW5zIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUmVndWxhdG9yeURvbWFpbnMKK3sKKwlVSU5UOAlSZWd1bGF0b3J5RG9tYWluc1sxMl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUmVndWxhdG9yeURvbWFpbnNfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFRlbXBUeXBlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfVGVtcFR5cGUKK3sKKwlVSU5UMTYJVGVtcFR5cGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfVGVtcFR5cGVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENJUyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NJUworeworCVVJTlQ4CUNJU1s0ODBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NJU190OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogU1RBSWRlbnRpdHkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TVEFJZGVudGl0eQoreworCVVJTlQxNglTVEFDb21wSUQ7CisJVUlOVDE2CVNUQVZhcmlhbnQ7CisJVUlOVDE2CVNUQU1ham9yVmVyc2lvbjsKKwlVSU5UMTYJU1RBTWlub3JWZXJzaW9uOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NUQUlkZW50aXR5X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBTVEFTdXBSYW5nZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NUQVN1cFJhbmdlCit7CisJVUlOVDE2CVNUQVJvbGU7CisJVUlOVDE2CVNUQUlEOworCVVJTlQxNglTVEFWYXJpYW50OworCVVJTlQxNglTVEFCb3R0b207CisJVUlOVDE2CVNUQVRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TVEFTdXBSYW5nZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTUZJQWN0UmFuZ2VzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTUZJQWN0UmFuZ2VzCit7CisJVUlOVDE2CU1GSVJvbGU7CisJVUlOVDE2CU1GSUlEOworCVVJTlQxNglNRklWYXJpYW50OworCVVJTlQxNglNRklCb3R0b207CisJVUlOVDE2CU1GSVRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NRklBY3RSYW5nZXNfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6IE5JQyBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUG9ydFN0YXR1cyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BvcnRTdGF0dXMKK3sKKwlVSU5UMTYJUG9ydFN0YXR1czsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qb3J0U3RhdHVzX3Q7CisKKyNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX0RJU0FCTEVECSgoVUlOVDE2KTEpCisjZGVmaW5lIEhGQTM4NHhfUFNUQVRVU19TRUFSQ0hJTkcJKChVSU5UMTYpMikKKyNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX0NPTk5fSUJTUwkoKFVJTlQxNikzKQorI2RlZmluZSBIRkEzODR4X1BTVEFUVVNfQ09OTl9FU1MJKChVSU5UMTYpNCkKKyNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX09VVE9GUkFOR0UJKChVSU5UMTYpNSkKKyNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX0NPTk5fV0RTCSgoVUlOVDE2KTYpCisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50U1NJRCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRTU0lECit7CisJVUlOVDgJQ3VycmVudFNTSURbMzRdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRTU0lEX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50QlNTSUQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50QlNTSUQKK3sKKwlVSU5UOAlDdXJyZW50QlNTSURbNl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudEJTU0lEX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBjb21tc3F1YWxpdHkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jb21tc3F1YWxpdHkKK3sKKwlVSU5UMTYJQ1FfY3VyckJTUzsKKwlVSU5UMTYJQVNMX2N1cnJCU1M7CisJVUlOVDE2CUFOTF9jdXJyRkM7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY29tbXNxdWFsaXR5X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBkbWJjb21tc3F1YWxpdHkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9kYm1jb21tc3F1YWxpdHkKK3sKKwlVSU5UMTYJQ1FkYm1fY3VyckJTUzsKKwlVSU5UMTYJQVNMZGJtX2N1cnJCU1M7CisJVUlOVDE2CUFOTGRibV9jdXJyRkM7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfZGJtY29tbXNxdWFsaXR5X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50VHhSYXRlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3VycmVudFR4UmF0ZQoreworCVVJTlQxNglDdXJyZW50VHhSYXRlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRUeFJhdGVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRCZWFjb25JbnRlcnZhbCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRCZWFjb25JbnRlcnZhbAoreworCVVJTlQxNglDdXJyZW50QmVhY29uSW50ZXJ2YWw7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudEJlYWNvbkludGVydmFsX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50U2NhbGVUaHJlc2hvbGRzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3VycmVudFNjYWxlVGhyZXNob2xkcworeworCVVJTlQxNglFbmVyZ3lEZXRlY3RUaHJlc2hvbGQ7CisJVUlOVDE2CUNhcnJpZXJEZXRlY3RUaHJlc2hvbGQ7CisJVUlOVDE2CURlZmVyRGV0ZWN0VGhyZXNob2xkOworCVVJTlQxNglDZWxsU2VhcmNoVGhyZXNob2xkOyAvKiBTdGF0aW9ucyBvbmx5ICovCisJVUlOVDE2CURlYWRTcG90VGhyZXNob2xkOyAvKiBTdGF0aW9ucyBvbmx5ICovCit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudFNjYWxlVGhyZXNob2xkc190OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUHJvdG9jb2xSc3BUaW1lIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUHJvdG9jb2xSc3BUaW1lCit7CisJVUlOVDE2CVByb3RvY29sUnNwVGltZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qcm90b2NvbFJzcFRpbWVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFNob3J0UmV0cnlMaW1pdCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1Nob3J0UmV0cnlMaW1pdAoreworCVVJTlQxNglTaG9ydFJldHJ5TGltaXQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU2hvcnRSZXRyeUxpbWl0X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBMb25nUmV0cnlMaW1pdCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0xvbmdSZXRyeUxpbWl0Cit7CisJVUlOVDE2CUxvbmdSZXRyeUxpbWl0OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0xvbmdSZXRyeUxpbWl0X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBNYXhUcmFuc21pdExpZmV0aW1lIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWF4VHJhbnNtaXRMaWZldGltZQoreworCVVJTlQxNglNYXhUcmFuc21pdExpZmV0aW1lOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X01heFRyYW5zbWl0TGlmZXRpbWVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1heFJlY2VpdmVMaWZldGltZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X01heFJlY2VpdmVMaWZldGltZQoreworCVVJTlQxNglNYXhSZWNlaXZlTGlmZXRpbWU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTWF4UmVjZWl2ZUxpZmV0aW1lX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDRlBvbGxhYmxlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ0ZQb2xsYWJsZQoreworCVVJTlQxNglDRlBvbGxhYmxlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NGUG9sbGFibGVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0F1dGhlbnRpY2F0aW9uQWxnb3JpdGhtcworeworCVVJTlQxNglBdXRoZW50aWNhdGlvblR5cGU7CisJVUlOVDE2CVR5cGVFbmFibGVkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0F1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc190OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQXV0aGVudGljYXRpb25BbGdvcml0aG1zCisoZGF0YSBvbmx5IC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQXV0aGVudGljYXRpb25BbGdvcml0aG1zX2RhdGEKK3sKKwlVSU5UMTYJQXV0aGVudGljYXRpb25UeXBlOworCVVJTlQxNglUeXBlRW5hYmxlZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9BdXRoZW50aWNhdGlvbkFsZ29yaXRobXNfZGF0YV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkCit7CisJVUlOVDE2CVByaXZhY3lPcHRpb25JbXBsZW1lbnRlZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qcml2YWN5T3B0aW9uSW1wbGVtZW50ZWRfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE93bk1BQ0FkZHJlc3MgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Pd25NQUNBZGRyZXNzCit7CisJVUlOVDgJT3duTUFDQWRkcmVzc1s2XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Pd25NQUNBZGRyZXNzX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQQ0ZJbmZvIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUENGSW5mbworeworCVVJTlQxNglNZWRpdW1PY2N1cGFuY3lMaW1pdDsKKwlVSU5UMTYJQ0ZQUGVyaW9kOworCVVJTlQxNglDRlBNYXhEdXJhdGlvbjsKKwlVSU5UMTYJQ0ZQRmxhZ3M7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUENGSW5mb190OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUENGSW5mbyAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUENGSW5mb19kYXRhCit7CisJVUlOVDE2CU1lZGl1bU9jY3VwYW5jeUxpbWl0OworCVVJTlQxNglDRlBQZXJpb2Q7CisJVUlOVDE2CUNGUE1heER1cmF0aW9uOworCVVJTlQxNglDRlBGbGFnczsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QQ0ZJbmZvX2RhdGFfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6IE1vZGVtIEluZm9ybWF0aW9uIFJlY29yZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFBIWVR5cGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QSFlUeXBlCit7CisJVUlOVDE2CVBIWVR5cGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUEhZVHlwZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ3VycmVudENoYW5uZWwgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50Q2hhbm5lbAoreworCVVJTlQxNglDdXJyZW50Q2hhbm5lbDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50Q2hhbm5lbF90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ3VycmVudFBvd2VyU3RhdGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50UG93ZXJTdGF0ZQoreworCVVJTlQxNglDdXJyZW50UG93ZXJTdGF0ZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50UG93ZXJTdGF0ZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ0NBTW9kZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NDQU1vZGUKK3sKKwlVSU5UMTYJQ0NBTW9kZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DQ0FNb2RlX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBTdXBwb3J0ZWREYXRhUmF0ZXMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TdXBwb3J0ZWREYXRhUmF0ZXMKK3sKKwlVSU5UOAlTdXBwb3J0ZWREYXRhUmF0ZXNbMTBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1N1cHBvcnRlZERhdGFSYXRlc190OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTEZPU3RhdHVzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTEZPU3RhdHVzCit7CisJVUlOVDE2ICBUZXN0UmVzdWx0czsKKwlVSU5UMTYgIExGT1Jlc3VsdDsKKwlVSU5UMTYgIFZSSEZPUmVzdWx0OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0xGT1N0YXR1c190OworCisjZGVmaW5lIEhGQTM4NHhfVEVTVFJFU1VMVF9BTExQQVNTRUQgICAgQklUMAorI2RlZmluZSBIRkEzODR4X1RFU1RSRVNVTFRfTEZPX0ZBSUwgICAgIEJJVDEKKyNkZWZpbmUgSEZBMzg0eF9URVNUUkVTVUxUX1ZSX0hGMF9GQUlMICBCSVQyCisjZGVmaW5lIEhGQTM4NHhfSE9TVF9GSVJNX0NPT1JESU5BVEUgICAgQklUNworI2RlZmluZSBIRkEzODR4X1RFU1RSRVNVTFRfQ09PUkRJTkFURSAgIEJJVDE1CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBMRURDb250cm9sIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTEVEQ29udHJvbAoreworCVVJTlQxNiAgc2VhcmNoaW5nX29uOworCVVJTlQxNiAgc2VhcmNoaW5nX29mZjsKKwlVSU5UMTYgIGFzc29jX29uOworCVVJTlQxNiAgYXNzb2Nfb2ZmOworCVVJTlQxNiAgYWN0aXZpdHk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTEVEQ29udHJvbF90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgIEZSQU1FIERFU0NSSVBUT1JTIEFORCBGUkFNRSBTVFJVQ1RVUkVTCisKK0ZSQU1FIERFU0NSSVBUT1JTOiBPZmZzZXRzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbnRyb2wgSW5mbyAob2Zmc2V0IDQ0LTUxKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9GRF9TVEFUVVNfT0ZGCQkJKChVSU5UMTYpMHg0NCkKKyNkZWZpbmUJCUhGQTM4NHhfRkRfVElNRV9PRkYJCQkoKFVJTlQxNikweDQ2KQorI2RlZmluZQkJSEZBMzg0eF9GRF9TV1NVUFBPUlRfT0ZGCQkoKFVJTlQxNikweDRBKQorI2RlZmluZQkJSEZBMzg0eF9GRF9TSUxFTkNFX09GRgkJCSgoVUlOVDE2KTB4NEEpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1NJR05BTF9PRkYJCQkoKFVJTlQxNikweDRCKQorI2RlZmluZQkJSEZBMzg0eF9GRF9SQVRFX09GRgkJCSgoVUlOVDE2KTB4NEMpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1JYRkxPV19PRkYJCQkoKFVJTlQxNikweDREKQorI2RlZmluZQkJSEZBMzg0eF9GRF9SRVNFUlZFRF9PRkYJCQkoKFVJTlQxNikweDRFKQorI2RlZmluZQkJSEZBMzg0eF9GRF9UWENPTlRST0xfT0ZGCQkoKFVJTlQxNikweDUwKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorODAyLjExIEhlYWRlciAob2Zmc2V0IDUyLTZCKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9GRF9GUkFNRUNPTlRST0xfT0ZGCQkoKFVJTlQxNikweDUyKQorI2RlZmluZQkJSEZBMzg0eF9GRF9EVVJBVElPTklEX09GRgkJKChVSU5UMTYpMHg1NCkKKyNkZWZpbmUJCUhGQTM4NHhfRkRfQUREUkVTUzFfT0ZGCQkJKChVSU5UMTYpMHg1NikKKyNkZWZpbmUJCUhGQTM4NHhfRkRfQUREUkVTUzJfT0ZGCQkJKChVSU5UMTYpMHg1QykKKyNkZWZpbmUJCUhGQTM4NHhfRkRfQUREUkVTUzNfT0ZGCQkJKChVSU5UMTYpMHg2MikKKyNkZWZpbmUJCUhGQTM4NHhfRkRfU0VRQ09OVFJPTF9PRkYJCSgoVUlOVDE2KTB4NjgpCisjZGVmaW5lCQlIRkEzODR4X0ZEX0FERFJFU1M0X09GRgkJCSgoVUlOVDE2KTB4NkEpCisjZGVmaW5lCQlIRkEzODR4X0ZEX0RBVEFMRU5fT0ZGCQkJKChVSU5UMTYpMHg3MCkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzgwMi4zIEhlYWRlciAob2Zmc2V0IDcyLTdGKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9GRF9ERVNUQUREUkVTU19PRkYJCSgoVUlOVDE2KTB4NzIpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1NSQ0FERFJFU1NfT0ZGCQkoKFVJTlQxNikweDc4KQorI2RlZmluZQkJSEZBMzg0eF9GRF9EQVRBTEVOR1RIX09GRgkJKChVSU5UMTYpMHg3RSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRlJBTUUgU1RSVUNUVVJFUzogQ29tbXVuaWNhdGlvbiBGcmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbW11bmljYXRpb24gRnJhbWVzOiBUcmFuc21pdCBGcmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0gQ29tbXVuaWNhdGlvbiBGcmFtZTogVHJhbnNtaXQgRnJhbWUgU3RydWN0dXJlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdHhfZnJhbWUKK3sKKwlVSU5UMTYJc3RhdHVzOworCVVJTlQxNglyZXNlcnZlZDE7CisJVUlOVDE2CXJlc2VydmVkMjsKKwlVSU5UMzIJc3dfc3VwcG9ydDsKKwlVSU5UOAl0eF9yZXRyeWNvdW50OworCVVJTlQ4ICAgdHhfcmF0ZTsKKwlVSU5UMTYJdHhfY29udHJvbDsKKworCS8qLS0gODAyLjExIEhlYWRlciBJbmZvcm1hdGlvbiAtLSovCisKKwlVSU5UMTYJZnJhbWVfY29udHJvbDsKKwlVSU5UMTYJZHVyYXRpb25faWQ7CisJVUlOVDgJYWRkcmVzczFbNl07CisJVUlOVDgJYWRkcmVzczJbNl07CisJVUlOVDgJYWRkcmVzczNbNl07CisJVUlOVDE2CXNlcXVlbmNlX2NvbnRyb2w7CisJVUlOVDgJYWRkcmVzczRbNl07CisJVUlOVDE2CWRhdGFfbGVuOyAvKiBsaXR0bGUgZW5kaWFuIGZvcm1hdCAqLworCisJLyotLSA4MDIuMyBIZWFkZXIgSW5mb3JtYXRpb24gLS0qLworCisJVUlOVDgJZGVzdF9hZGRyWzZdOworCVVJTlQ4CXNyY19hZGRyWzZdOworCVVJTlQxNglkYXRhX2xlbmd0aDsgLyogYmlnIGVuZGlhbiBmb3JtYXQgKi8KK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF90eF9mcmFtZV90OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tbXVuaWNhdGlvbiBGcmFtZXM6IEZpZWxkIE1hc2tzIGZvciBUcmFuc21pdCBGcmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0gU3RhdHVzIEZpZWxkIC0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfQUNLRVJSCQkJKChVSU5UMTYpQklUNSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfRk9STUVSUgkJKChVSU5UMTYpQklUMykKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfRElTQ09OCQkJKChVSU5UMTYpQklUMikKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUgkJKChVSU5UMTYpQklUMSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfUkVUUllFUlIJCSgoVUlOVDE2KUJJVDApCisvKi0tIFRyYW5zbWl0IENvbnRyb2wgRmllbGQgLS0qLworI2RlZmluZQkJSEZBMzg0eF9UWF9DRlBPTEwJCQkoKFVJTlQxNilCSVQxMikKKyNkZWZpbmUJCUhGQTM4NHhfVFhfUFJTVAkJCQkoKFVJTlQxNilCSVQxMSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfTUFDUE9SVAkJCSgoVUlOVDE2KShCSVQxMCB8IEJJVDkgfCBCSVQ4KSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfTk9FTkNSWVBUCQkJKChVSU5UMTYpQklUNykKKyNkZWZpbmUJCUhGQTM4NHhfVFhfUkVUUllTVFJBVAkJCSgoVUlOVDE2KShCSVQ2IHwgQklUNSkpCisjZGVmaW5lCQlIRkEzODR4X1RYX1NUUlVDVFlQRQkJCSgoVUlOVDE2KShCSVQ0IHwgQklUMykpCisjZGVmaW5lCQlIRkEzODR4X1RYX1RYRVgJCQkJKChVSU5UMTYpQklUMikKKyNkZWZpbmUJCUhGQTM4NHhfVFhfVFhPSwkJCQkoKFVJTlQxNilCSVQxKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tbXVuaWNhdGlvbiBGcmFtZXM6IFRlc3QvR2V0L1NldCBGaWVsZCBWYWx1ZXMgZm9yIFRyYW5zbWl0IEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLSBTdGF0dXMgRmllbGQgLS0qLworI2RlZmluZSBIRkEzODR4X1RYU1RBVFVTX0lTRVJST1IodikJXAorCSgoKFVJTlQxNikodikpJlwKKwkoSEZBMzg0eF9UWFNUQVRVU19BQ0tFUlJ8SEZBMzg0eF9UWFNUQVRVU19GT1JNRVJSfFwKKwlIRkEzODR4X1RYU1RBVFVTX0RJU0NPTnxIRkEzODR4X1RYU1RBVFVTX0FHRURFUlJ8XAorCUhGQTM4NHhfVFhTVEFUVVNfUkVUUllFUlIpKQorCisjZGVmaW5lCUhGQTM4NHhfVFhTVEFUVVNfSVNBQ0tFUlIodikJKChVSU5UMTYpKCgoVUlOVDE2KSh2KSkgJiBIRkEzODR4X1RYU1RBVFVTX0FDS0VSUikpCisjZGVmaW5lCUhGQTM4NHhfVFhTVEFUVVNfSVNGT1JNRVJSKHYpCSgoVUlOVDE2KSgoKFVJTlQxNikodikpICYgSEZBMzg0eF9UWFNUQVRVU19GT1JNRVJSKSkKKyNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0RJU0NPTih2KQkoKFVJTlQxNikoKChVSU5UMTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfRElTQ09OKSkKKyNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0FHRURFUlIodikJKChVSU5UMTYpKCgoVUlOVDE2KSh2KSkgJiBIRkEzODR4X1RYU1RBVFVTX0FHRURFUlIpKQorI2RlZmluZQlIRkEzODR4X1RYU1RBVFVTX0lTUkVUUllFUlIodikJKChVSU5UMTYpKCgoVUlOVDE2KSh2KSkgJiBIRkEzODR4X1RYU1RBVFVTX1JFVFJZRVJSKSkKKworI2RlZmluZQlIRkEzODR4X1RYX0dFVCh2LG0scykJCSgoKChVSU5UMTYpKHYpKSYoKFVJTlQxNikobSkpKT4+KChVSU5UMTYpKHMpKSkKKyNkZWZpbmUJSEZBMzg0eF9UWF9TRVQodixtLHMpCQkoKCgoVUlOVDE2KSh2KSk8PCgoVUlOVDE2KShzKSkpJigoVUlOVDE2KShtKSkpCisKKyNkZWZpbmUJSEZBMzg0eF9UWF9DRlBPTExfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfQ0ZQT0xMLDEyKQorI2RlZmluZQlIRkEzODR4X1RYX0NGUE9MTF9TRVQodikJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9DRlBPTEwsMTIpCisjZGVmaW5lCUhGQTM4NHhfVFhfUFJTVF9HRVQodikJCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfUFJTVCwxMSkKKyNkZWZpbmUJSEZBMzg0eF9UWF9QUlNUX1NFVCh2KQkJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9QUlNULDExKQorI2RlZmluZQlIRkEzODR4X1RYX01BQ1BPUlRfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfTUFDUE9SVCwgOCkKKyNkZWZpbmUJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCh2KQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX01BQ1BPUlQsIDgpCisjZGVmaW5lCUhGQTM4NHhfVFhfTk9FTkNSWVBUX0dFVCh2KQlIRkEzODR4X1RYX0dFVCh2LCBIRkEzODR4X1RYX05PRU5DUllQVCwgNykKKyNkZWZpbmUJSEZBMzg0eF9UWF9OT0VOQ1JZUFRfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfTk9FTkNSWVBULCA3KQorI2RlZmluZQlIRkEzODR4X1RYX1JFVFJZU1RSQVRfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfUkVUUllTVFJBVCwgNSkKKyNkZWZpbmUJSEZBMzg0eF9UWF9SRVRSWVNUUkFUX1NFVCh2KQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX1JFVFJZU1RSQVQsIDUpCisjZGVmaW5lCUhGQTM4NHhfVFhfU1RSVUNUWVBFX0dFVCh2KQlIRkEzODR4X1RYX0dFVCh2LCBIRkEzODR4X1RYX1NUUlVDVFlQRSwgMykKKyNkZWZpbmUJSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfU1RSVUNUWVBFLCAzKQorI2RlZmluZQlIRkEzODR4X1RYX1RYRVhfR0VUKHYpCQlIRkEzODR4X1RYX0dFVCh2LCBIRkEzODR4X1RYX1RYRVgsIDIpCisjZGVmaW5lCUhGQTM4NHhfVFhfVFhFWF9TRVQodikJCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfVFhFWCwgMikKKyNkZWZpbmUJSEZBMzg0eF9UWF9UWE9LX0dFVCh2KQkJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9UWE9LLCAxKQorI2RlZmluZQlIRkEzODR4X1RYX1RYT0tfU0VUKHYpCQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX1RYT0ssIDEpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb21tdW5pY2F0aW9uIEZyYW1lczogUmVjZWl2ZSBGcmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0gQ29tbXVuaWNhdGlvbiBGcmFtZTogUmVjZWl2ZSBGcmFtZSBTdHJ1Y3R1cmUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9yeF9mcmFtZQoreworCS8qLS0gTUFDIHJ4IGRlc2NyaXB0b3IgKGhmYTM4NHggYnl0ZSBvcmRlcikgLS0qLworCVVJTlQxNglzdGF0dXM7CisJVUlOVDMyCXRpbWU7CisJVUlOVDgJc2lsZW5jZTsKKwlVSU5UOAlzaWduYWw7CisJVUlOVDgJcmF0ZTsKKwlVSU5UOAlyeF9mbG93OworCVVJTlQxNglyZXNlcnZlZDE7CisJVUlOVDE2CXJlc2VydmVkMjsKKworCS8qLS0gODAyLjExIEhlYWRlciBJbmZvcm1hdGlvbiAoODAyLjExIGJ5dGUgb3JkZXIpIC0tKi8KKwlVSU5UMTYJZnJhbWVfY29udHJvbDsKKwlVSU5UMTYJZHVyYXRpb25faWQ7CisJVUlOVDgJYWRkcmVzczFbNl07CisJVUlOVDgJYWRkcmVzczJbNl07CisJVUlOVDgJYWRkcmVzczNbNl07CisJVUlOVDE2CXNlcXVlbmNlX2NvbnRyb2w7CisJVUlOVDgJYWRkcmVzczRbNl07CisJVUlOVDE2CWRhdGFfbGVuOyAvKiBoZmEzODR4IChsaXR0bGUgZW5kaWFuKSBmb3JtYXQgKi8KKworCS8qLS0gODAyLjMgSGVhZGVyIEluZm9ybWF0aW9uIC0tKi8KKwlVSU5UOAlkZXN0X2FkZHJbNl07CisJVUlOVDgJc3JjX2FkZHJbNl07CisJVUlOVDE2CWRhdGFfbGVuZ3RoOyAvKiBJRUVFPyAoYmlnIGVuZGlhbikgZm9ybWF0ICovCit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcnhfZnJhbWVfdDsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbW11bmljYXRpb24gRnJhbWVzOiBGaWVsZCBNYXNrcyBmb3IgUmVjZWl2ZSBGcmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0gT2Zmc2V0cyAtLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JYX0RBVEFfTEVOX09GRgkJCSgoVUlOVDE2KTQ0KQorI2RlZmluZQkJSEZBMzg0eF9SWF84MDIxMUhEUl9PRkYJCQkoKFVJTlQxNikxNCkKKyNkZWZpbmUJCUhGQTM4NHhfUlhfREFUQV9PRkYJCQkoKFVJTlQxNik2MCkKKworLyotLSBTdGF0dXMgRmllbGRzIC0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfTVNHVFlQRQkJKChVSU5UMTYpKEJJVDE1IHwgQklUMTQgfCBCSVQxMykpCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlQJCSgoVUlOVDE2KShCSVQxMCB8IEJJVDkgfCBCSVQ4KSkKKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfVU5ERUNSCQkJKChVSU5UMTYpQklUMSkKKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfRkNTRVJSCQkJKChVSU5UMTYpQklUMCkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbW11bmljYXRpb24gRnJhbWVzOiBUZXN0L0dldC9TZXQgRmllbGQgVmFsdWVzIGZvciBSZWNlaXZlIEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NU0dUWVBFX0dFVCh2YWx1ZSkJKChVSU5UMTYpKCgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfUlhTVEFUVVNfTVNHVFlQRSkgPj4gMTMpKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NU0dUWVBFX1NFVCh2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDEzKSkKKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodmFsdWUpCSgoVUlOVDE2KSgoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlQpID4+IDgpKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX1NFVCh2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDgpKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19JU1VOREVDUih2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9SWFNUQVRVU19VTkRFQ1IpKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19JU0ZDU0VSUih2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9SWFNUQVRVU19GQ1NFUlIpKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZSQU1FIFNUUlVDVFVSRVM6IEluZm9ybWF0aW9uIFR5cGVzIGFuZCBJbmZvcm1hdGlvbiBGcmFtZSBTdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBUeXBlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9JVF9IQU5ET1ZFUkFERFIJCQkoKFVJTlQxNikweEYwMDBVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfSEFORE9WRVJERUFVVEhBRERSRVNTCSgoVUlOVDE2KTB4RjAwMVVMKS8vQVAgMS4zLjcKKyNkZWZpbmUJCUhGQTM4NHhfSVRfQ09NTVRBTExJRVMJCQkoKFVJTlQxNikweEYxMDBVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfU0NBTlJFU1VMVFMJCQkoKFVJTlQxNikweEYxMDFVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfQ0hJTkZPUkVTVUxUUwkJKChVSU5UMTYpMHhGMTAyVUwpCisjZGVmaW5lCQlIRkEzODR4X0lUX0hPU1RTQ0FOUkVTVUxUUwkJKChVSU5UMTYpMHhGMTAzVUwpCisjZGVmaW5lCQlIRkEzODR4X0lUX0xJTktTVEFUVVMJCQkoKFVJTlQxNikweEYyMDBVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfQVNTT0NTVEFUVVMJCQkoKFVJTlQxNikweEYyMDFVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfQVVUSFJFUQkJCSgoVUlOVDE2KTB4RjIwMlVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9QU1VTRVJDTlQJCQkoKFVJTlQxNikweEYyMDNVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfS0VZSURDSEFOR0VECQkJKChVSU5UMTYpMHhGMjA0VUwpCisjZGVmaW5lCQlIRkEzODR4X0lUX0FTU09DUkVRICAgIAkJCSgoVUlOVDE2KTB4RjIwNVVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9NSUNGQUlMVVJFICAJCQkoKFVJTlQxNikweEYyMDZVTCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gRnJhbWVzIFN0cnVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZm9ybWF0aW9uIEZyYW1lczogTm90aWZpY2F0aW9uIEZyYW1lIFN0cnVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0gIE5vdGlmaWNhdGlvbiBGcmFtZSxNQUMgTWdtdDogSGFuZG92ZXIgQWRkcmVzcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0hhbmRvdmVyQWRkcgoreworCVVJTlQxNglmcmFtZWxlbjsKKwlVSU5UMTYJaW5mb3R5cGU7CisJVUlOVDgJaGFuZG92ZXJfYWRkcltXTEFOX0JTU0lEX0xFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfSGFuZG92ZXJBZGRyX3Q7CisKKy8qLS0gIElucXVpcnkgRnJhbWUsIERpYWdub3NlOiBDb21tdW5pY2F0aW9uIFRhbGxpZXMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Db21tVGFsbGllczE2Cit7CisJVUlOVDE2CXR4dW5pY2FzdGZyYW1lczsKKwlVSU5UMTYJdHhtdWx0aWNhc3RmcmFtZXM7CisJVUlOVDE2CXR4ZnJhZ21lbnRzOworCVVJTlQxNgl0eHVuaWNhc3RvY3RldHM7CisJVUlOVDE2CXR4bXVsdGljYXN0b2N0ZXRzOworCVVJTlQxNgl0eGRlZmVycmVkdHJhbnM7CisJVUlOVDE2CXR4c2luZ2xlcmV0cnlmcmFtZXM7CisJVUlOVDE2CXR4bXVsdGlwbGVyZXRyeWZyYW1lczsKKwlVSU5UMTYJdHhyZXRyeWxpbWl0ZXhjZWVkZWQ7CisJVUlOVDE2CXR4ZGlzY2FyZHM7CisJVUlOVDE2CXJ4dW5pY2FzdGZyYW1lczsKKwlVSU5UMTYJcnhtdWx0aWNhc3RmcmFtZXM7CisJVUlOVDE2CXJ4ZnJhZ21lbnRzOworCVVJTlQxNglyeHVuaWNhc3RvY3RldHM7CisJVUlOVDE2CXJ4bXVsdGljYXN0b2N0ZXRzOworCVVJTlQxNglyeGZjc2Vycm9yczsKKwlVSU5UMTYJcnhkaXNjYXJkc25vYnVmZmVyOworCVVJTlQxNgl0eGRpc2NhcmRzd3JvbmdzYTsKKwlVSU5UMTYJcnhkaXNjYXJkc3dlcHVuZGVjcjsKKwlVSU5UMTYJcnhtc2dpbm1zZ2ZyYWc7CisJVUlOVDE2CXJ4bXNnaW5iYWRtc2dmcmFnOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NvbW1UYWxsaWVzMTZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Db21tVGFsbGllczMyCit7CisJVUlOVDMyCXR4dW5pY2FzdGZyYW1lczsKKwlVSU5UMzIJdHhtdWx0aWNhc3RmcmFtZXM7CisJVUlOVDMyCXR4ZnJhZ21lbnRzOworCVVJTlQzMgl0eHVuaWNhc3RvY3RldHM7CisJVUlOVDMyCXR4bXVsdGljYXN0b2N0ZXRzOworCVVJTlQzMgl0eGRlZmVycmVkdHJhbnM7CisJVUlOVDMyCXR4c2luZ2xlcmV0cnlmcmFtZXM7CisJVUlOVDMyCXR4bXVsdGlwbGVyZXRyeWZyYW1lczsKKwlVSU5UMzIJdHhyZXRyeWxpbWl0ZXhjZWVkZWQ7CisJVUlOVDMyCXR4ZGlzY2FyZHM7CisJVUlOVDMyCXJ4dW5pY2FzdGZyYW1lczsKKwlVSU5UMzIJcnhtdWx0aWNhc3RmcmFtZXM7CisJVUlOVDMyCXJ4ZnJhZ21lbnRzOworCVVJTlQzMglyeHVuaWNhc3RvY3RldHM7CisJVUlOVDMyCXJ4bXVsdGljYXN0b2N0ZXRzOworCVVJTlQzMglyeGZjc2Vycm9yczsKKwlVSU5UMzIJcnhkaXNjYXJkc25vYnVmZmVyOworCVVJTlQzMgl0eGRpc2NhcmRzd3JvbmdzYTsKKwlVSU5UMzIJcnhkaXNjYXJkc3dlcHVuZGVjcjsKKwlVSU5UMzIJcnhtc2dpbm1zZ2ZyYWc7CisJVUlOVDMyCXJ4bXNnaW5iYWRtc2dmcmFnOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NvbW1UYWxsaWVzMzJfdDsKKworLyotLSAgSW5xdWlyeSBGcmFtZSwgRGlhZ25vc2U6IFNjYW4gUmVzdWx0cyAmIFN1YmZpZWxkcy0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2NhblJlc3VsdFN1YgoreworCVVJTlQxNgljaGlkOworCVVJTlQxNglhbmw7CisJVUlOVDE2CXNsOworCVVJTlQ4CWJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwlVSU5UMTYJYmNuaW50OworCVVJTlQxNgljYXBpbmZvOworCWhmYTM4NHhfYnl0ZXN0cjMyX3QJc3NpZDsKKwlVSU5UOAlzdXBwcmF0ZXNbMTBdOyAvKiA4MDIuMTEgaW5mbyBlbGVtZW50ICovCisJVUlOVDE2CXByb2JlcmVzcF9yYXRlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NjYW5SZXN1bHRTdWJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TY2FuUmVzdWx0Cit7CisJVUlOVDE2CXJzdmQ7CisJVUlOVDE2CXNjYW5yZWFzb247CisJaGZhMzg0eF9TY2FuUmVzdWx0U3ViX3QKKwkJcmVzdWx0W0hGQTM4NHhfU0NBTlJFU1VMVF9NQVhdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NjYW5SZXN1bHRfdDsKKworLyotLSAgSW5xdWlyeSBGcmFtZSwgRGlhZ25vc2U6IENoSW5mbyBSZXN1bHRzICYgU3ViZmllbGRzLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DaEluZm9SZXN1bHRTdWIKK3sKKwlVSU5UMTYJY2hpZDsKKwlVSU5UMTYJYW5sOworCVVJTlQxNglwbmw7CisJVUlOVDE2CWFjdGl2ZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdDsKKworI2RlZmluZSBIRkEzODR4X0NISU5GT1JFU1VMVF9CU1NBQ1RJVkUJQklUMAorI2RlZmluZSBIRkEzODR4X0NISU5GT1JFU1VMVF9QQ0ZBQ1RJVkUJQklUMQorCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NoSW5mb1Jlc3VsdAoreworCVVJTlQxNglzY2FuY2hhbm5lbHM7CisJaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdAorCQlyZXN1bHRbSEZBMzg0eF9DSElORk9SRVNVTFRfTUFYXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DaEluZm9SZXN1bHRfdDsKKworLyotLSAgSW5xdWlyeSBGcmFtZSwgRGlhZ25vc2U6IEhvc3QgU2NhbiBSZXN1bHRzICYgU3ViZmllbGRzLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9IU2NhblJlc3VsdFN1YgoreworCVVJTlQxNgljaGlkOworCVVJTlQxNglhbmw7CisJVUlOVDE2CXNsOworCVVJTlQ4CWJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwlVSU5UMTYJYmNuaW50OworCVVJTlQxNgljYXBpbmZvOworCWhmYTM4NHhfYnl0ZXN0cjMyX3QJc3NpZDsKKwlVSU5UOAlzdXBwcmF0ZXNbMTBdOyAvKiA4MDIuMTEgaW5mbyBlbGVtZW50ICovCisJVUlOVDE2CXByb2JlcmVzcF9yYXRlOworCVVJTlQxNglhdGltOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0hTY2FuUmVzdWx0U3ViX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSFNjYW5SZXN1bHQKK3sKKwlVSU5UMTYJbnJlc3VsdDsKKwlVSU5UMTYJcnN2ZDsKKwloZmEzODR4X0hTY2FuUmVzdWx0U3ViX3QKKwkJcmVzdWx0W0hGQTM4NHhfSFNDQU5SRVNVTFRfTUFYXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9IU2NhblJlc3VsdF90OworCisvKi0tICBVbnNvbGljaXRlZCBGcmFtZSwgTUFDIE1nbXQ6IExpbmtTdGF0dXMgLS0qLworCisjZGVmaW5lIEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQJKChVSU5UMTYpMCkKKyNkZWZpbmUgSEZBMzg0eF9MSU5LX0NPTk5FQ1RFRAkJKChVSU5UMTYpMSkKKyNkZWZpbmUgSEZBMzg0eF9MSU5LX0RJU0NPTk5FQ1RFRAkoKFVJTlQxNikyKQorI2RlZmluZSBIRkEzODR4X0xJTktfQVBfQ0hBTkdFCQkoKFVJTlQxNikzKQorI2RlZmluZSBIRkEzODR4X0xJTktfQVBfT1VUT0ZSQU5HRQkoKFVJTlQxNik0KQorI2RlZmluZSBIRkEzODR4X0xJTktfQVBfSU5SQU5HRQkJKChVSU5UMTYpNSkKKyNkZWZpbmUgSEZBMzg0eF9MSU5LX0FTU09DRkFJTAkJKChVSU5UMTYpNikKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9MaW5rU3RhdHVzCit7CisJVUlOVDE2CWxpbmtzdGF0dXM7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTGlua1N0YXR1c190OworCisKKy8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogQXNzb2NpYXRpb25TdGF0dXMgKC0tKi8KKworI2RlZmluZSBIRkEzODR4X0FTU09DU1RBVFVTX1NUQUFTU09DCSgoVUlOVDE2KTEpCisjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfUkVBU1NPQwkoKFVJTlQxNikyKQorI2RlZmluZSBIRkEzODR4X0FTU09DU1RBVFVTX0RJU0FTU09DCSgoVUlOVDE2KTMpCisjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfQVNTT0NGQUlMCSgoVUlOVDE2KTQpCisjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfQVVUSEZBSUwJKChVSU5UMTYpNSkKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Bc3NvY1N0YXR1cworeworCVVJTlQxNglhc3NvY3N0YXR1czsKKwlVSU5UOAlzdGFfYWRkcltXTEFOX0FERFJfTEVOXTsKKwkvKiBvbGRfYXBfYWRkciBpcyBvbmx5IHZhbGlkIGlmIGFzc29jc3RhdHVzID09IDIgKi8KKwlVSU5UOAlvbGRfYXBfYWRkcltXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJcmVhc29uOworCVVJTlQxNglyZXNlcnZlZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Bc3NvY1N0YXR1c190OworCisvKi0tICBVbnNvbGljaXRlZCBGcmFtZSwgTUFDIE1nbXQ6IEF1dGhSZXF1ZXN0IChBUCBPbmx5KSAtLSovCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQXV0aFJlcXVlc3QKK3sKKwlVSU5UOAlzdGFfYWRkcltXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJYWxnb3JpdGhtOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0F1dGhSZXFfdDsKKworLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBBc3NvY1JlcXVlc3QgKEFQIE9ubHkpIC0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Bc3NvY1JlcXVlc3QKK3sKKwlVSU5UOAlzdGFfYWRkcltXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJdHlwZTsKKwlVSU5UOCAgIHdwYV9kYXRhWzgwXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Bc3NvY1JlcV90OworCisKKyNkZWZpbmUgSEZBMzg0eF9BU1NPQ1JFUV9UWVBFX0FTU09DICAgICAwCisjZGVmaW5lIEhGQTM4NHhfQVNTT0NSRVFfVFlQRV9SRUFTU09DICAgMQorCisvKi0tICBVbnNvbGljaXRlZCBGcmFtZSwgTUFDIE1nbXQ6IE1JQyBGYWlsdXJlICAoQVAgT25seSkgLS0qLworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X01pY0ZhaWx1cmUKK3sKKwlVSU5UOAlzZW5kZXJbV0xBTl9BRERSX0xFTl07CisJVUlOVDgJZGVzdFtXTEFOX0FERFJfTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NaWNGYWlsdXJlX3Q7CisKKy8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogUFNVc2VyQ291bnQgKEFQIE9ubHkpIC0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QU1VzZXJDb3VudAoreworCVVJTlQxNgl1c2VyY250OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1BTVXNlckNvdW50X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfS2V5SURDaGFuZ2VkCit7CisJVUlOVDgJc3RhX2FkZHJbV0xBTl9BRERSX0xFTl07CisJVUlOVDE2CWtleWlkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0tleUlEQ2hhbmdlZF90OworCisvKi0tICBDb2xsZWN0aW9uIG9mIGFsbCBJbmYgZnJhbWVzIC0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHVuaW9uIGhmYTM4NHhfaW5mb2RhdGEgeworCWhmYTM4NHhfQ29tbVRhbGxpZXMxNl90CWNvbW10YWxsaWVzMTY7CisJaGZhMzg0eF9Db21tVGFsbGllczMyX3QJY29tbXRhbGxpZXMzMjsKKwloZmEzODR4X1NjYW5SZXN1bHRfdAlzY2FucmVzdWx0OworCWhmYTM4NHhfQ2hJbmZvUmVzdWx0X3QJY2hpbmZvcmVzdWx0OworCWhmYTM4NHhfSFNjYW5SZXN1bHRfdAloc2NhbnJlc3VsdDsKKwloZmEzODR4X0xpbmtTdGF0dXNfdAlsaW5rc3RhdHVzOworCWhmYTM4NHhfQXNzb2NTdGF0dXNfdAlhc3NvY3N0YXR1czsKKwloZmEzODR4X0F1dGhSZXFfdAlhdXRocmVxOworCWhmYTM4NHhfUFNVc2VyQ291bnRfdAlwc3VzZXJjbnQ7CisJaGZhMzg0eF9LZXlJRENoYW5nZWRfdCAga2V5aWRjaGFuZ2VkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2luZm9kYXRhX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSW5mRnJhbWUKK3sKKwlVSU5UMTYJCQlmcmFtZWxlbjsKKwlVSU5UMTYJCQlpbmZvdHlwZTsKKwloZmEzODR4X2luZm9kYXRhX3QJaW5mbzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9JbmZGcmFtZV90OworCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVVNCIFBhY2tldCBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFNob3VsZCBiZSBzZW50IHRvIHRoZSBjdHJsb3V0IGVuZHBvaW50ICovCisjZGVmaW5lIEhGQTM4NHhfVVNCX0VOQlVMS0lOCTYKKworLyogU2hvdWxkIGJlIHNlbnQgdG8gdGhlIGJ1bGtvdXQgZW5kcG9pbnQgKi8KKyNkZWZpbmUgSEZBMzg0eF9VU0JfVFhGUk0JMAorI2RlZmluZSBIRkEzODR4X1VTQl9DTURSRVEJMQorI2RlZmluZSBIRkEzODR4X1VTQl9XUklEUkVRCTIKKyNkZWZpbmUgSEZBMzg0eF9VU0JfUlJJRFJFUQkzCisjZGVmaW5lIEhGQTM4NHhfVVNCX1dNRU1SRVEJNAorI2RlZmluZSBIRkEzODR4X1VTQl9STUVNUkVRCTUKKworLyogUmVjZWl2ZWQgZnJvbSB0aGUgYnVsa2luIGVuZHBvaW50ICovCisjZGVmaW5lIEhGQTM4NHhfVVNCX0lTRlJNKGEpCSghKChhKSAmIDB4ODAwMCkpCisjZGVmaW5lIEhGQTM4NHhfVVNCX0lTVFhGUk0oYSkJKCgoYSkgJiAweDkwMDApID09IDB4MTAwMCkKKyNkZWZpbmUgSEZBMzg0eF9VU0JfSVNSWEZSTShhKQkoISgoYSkgJiAweDkwMDApKQorI2RlZmluZSBIRkEzODR4X1VTQl9JTkZPRlJNCTB4ODAwMAorI2RlZmluZSBIRkEzODR4X1VTQl9DTURSRVNQCTB4ODAwMQorI2RlZmluZSBIRkEzODR4X1VTQl9XUklEUkVTUAkweDgwMDIKKyNkZWZpbmUgSEZBMzg0eF9VU0JfUlJJRFJFU1AJMHg4MDAzCisjZGVmaW5lIEhGQTM4NHhfVVNCX1dNRU1SRVNQCTB4ODAwNAorI2RlZmluZSBIRkEzODR4X1VTQl9STUVNUkVTUAkweDgwMDUKKyNkZWZpbmUgSEZBMzg0eF9VU0JfQlVGQVZBSUwJMHg4MDA2CisjZGVmaW5lIEhGQTM4NHhfVVNCX0VSUk9SCTB4ODAwNworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBSZXF1ZXN0IChidWxrIE9VVCkgcGFja2V0IGNvbnRlbnRzICovCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3R4ZnJtIHsKKwloZmEzODR4X3R4X2ZyYW1lX3QJZGVzYzsKKwlVSU5UOAkJCWRhdGFbV0xBTl9EQVRBX01BWExFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3R4ZnJtX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX2NtZHJlcSB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJY21kOworCVVJTlQxNgkJcGFybTA7CisJVUlOVDE2CQlwYXJtMTsKKwlVSU5UMTYJCXBhcm0yOworCVVJTlQ4CQlwYWRbNTRdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9jbWRyZXFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2Jfd3JpZHJlcSB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJZnJtbGVuOworCVVJTlQxNgkJcmlkOworCVVJTlQ4CQlkYXRhW0hGQTM4NHhfUklEREFUQV9NQVhMRU5dOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl93cmlkcmVxX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3JyaWRyZXEgeworCVVJTlQxNgkJdHlwZTsKKwlVSU5UMTYJCWZybWxlbjsKKwlVSU5UMTYJCXJpZDsKKwlVSU5UOAkJcGFkWzU4XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfcnJpZHJlcV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl93bWVtcmVxIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQlmcm1sZW47CisJVUlOVDE2CQlvZmZzZXQ7CisJVUlOVDE2CQlwYWdlOworCVVJTlQ4CQlkYXRhW0hGQTM4NHhfVVNCX1JXTUVNX01BWExFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3dtZW1yZXFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2Jfcm1lbXJlcSB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJZnJtbGVuOworCVVJTlQxNgkJb2Zmc2V0OworCVVJTlQxNgkJcGFnZTsKKwlVSU5UOAkJcGFkWzU2XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jfcm1lbXJlcV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBSZXNwb25zZSAoYnVsayBJTikgcGFja2V0IGNvbnRlbnRzICovCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3J4ZnJtIHsKKwloZmEzODR4X3J4X2ZyYW1lX3QJZGVzYzsKKwlVSU5UOAkJCWRhdGFbV0xBTl9EQVRBX01BWExFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3J4ZnJtX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX2luZm9mcm0geworCVVJTlQxNgkJCXR5cGU7CisJaGZhMzg0eF9JbmZGcmFtZV90CWluZm87Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX2luZm9mcm1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2Jfc3RhdHVzcmVzcCB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJcmVzcDA7CisJVUlOVDE2CQlyZXNwMTsKKwlVSU5UMTYJCXJlc3AyOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9jbWRyZXNwX3Q7CisKK3R5cGVkZWYgaGZhMzg0eF91c2JfY21kcmVzcF90IGhmYTM4NHhfdXNiX3dyaWRyZXNwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3JyaWRyZXNwIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQlmcm1sZW47CisJVUlOVDE2CQlyaWQ7CisJVUlOVDgJCWRhdGFbSEZBMzg0eF9SSUREQVRBX01BWExFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3JyaWRyZXNwX3Q7CisKK3R5cGVkZWYgaGZhMzg0eF91c2JfY21kcmVzcF90IGhmYTM4NHhfdXNiX3dtZW1yZXNwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3JtZW1yZXNwIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQlmcm1sZW47CisJVUlOVDgJCWRhdGFbSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jfcm1lbXJlc3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfYnVmYXZhaWwgeworCVVJTlQxNgkJdHlwZTsKKwlVSU5UMTYJCWZybWxlbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfYnVmYXZhaWxfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfZXJyb3IgeworCVVJTlQxNgkJdHlwZTsKKwlVSU5UMTYJCWVycm9ydHlwZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfZXJyb3JfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVuaW9ucyBmb3IgcGFja2FnaW5nIGFsbCB0aGUga25vd24gcGFja2V0IHR5cGVzIHRvZ2V0aGVyICovCisKK3R5cGVkZWYgdW5pb24gaGZhMzg0eF91c2JvdXQgeworCVVJTlQxNgkJCXR5cGU7CisJaGZhMzg0eF91c2JfdHhmcm1fdAl0eGZybTsKKwloZmEzODR4X3VzYl9jbWRyZXFfdAljbWRyZXE7CisJaGZhMzg0eF91c2Jfd3JpZHJlcV90CXdyaWRyZXE7CisJaGZhMzg0eF91c2JfcnJpZHJlcV90CXJyaWRyZXE7CisJaGZhMzg0eF91c2Jfd21lbXJlcV90CXdtZW1yZXE7CisJaGZhMzg0eF91c2Jfcm1lbXJlcV90CXJtZW1yZXE7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNib3V0X3Q7CisKK3R5cGVkZWYgdW5pb24gaGZhMzg0eF91c2JpbiB7CisJVUlOVDE2CQkJdHlwZTsKKwloZmEzODR4X3VzYl9yeGZybV90CXJ4ZnJtOworCWhmYTM4NHhfdXNiX3R4ZnJtX3QJdHhmcm07CisJaGZhMzg0eF91c2JfaW5mb2ZybV90CWluZm9mcm07CisJaGZhMzg0eF91c2JfY21kcmVzcF90CWNtZHJlc3A7CisJaGZhMzg0eF91c2Jfd3JpZHJlc3BfdAl3cmlkcmVzcDsKKwloZmEzODR4X3VzYl9ycmlkcmVzcF90CXJyaWRyZXNwOworCWhmYTM4NHhfdXNiX3dtZW1yZXNwX3QJd21lbXJlc3A7CisJaGZhMzg0eF91c2Jfcm1lbXJlc3BfdAlybWVtcmVzcDsKKwloZmEzODR4X3VzYl9idWZhdmFpbF90CWJ1ZmF2YWlsOworCWhmYTM4NHhfdXNiX2Vycm9yX3QJdXNiZXJyb3I7CisJVUlOVDgJCQlib2d1c3BhZFszMDAwXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jpbl90OworCisjZW5kaWYgLyogV0xBTl9VU0IgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUEQgcmVjb3JkIHN0cnVjdHVyZXMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3BjYl9wYXJ0bnVtCit7CisJVUlOVDgJbnVtWzhdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9wY2JfcGFydG51bV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9wY2JfdHJhY2VudW0KK3sKKwlVSU5UOAludW1bOF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3BjYl90cmFjZW51bV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9uaWNfc2VyaWFsCit7CisJVUlOVDgJbnVtWzEyXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbmljX3NlcmlhbF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9ta2tfbWVhc3VyZW1lbnRzCit7CisJZG91YmxlCWNhcnJpZXJfZnJlcTsKKwlkb3VibGUJb2NjdXBpZWRfYmFuZDsKKwlkb3VibGUJcG93ZXJfZGVuc2l0eTsKKwlkb3VibGUJdHhfc3B1cl9mMTsKKwlkb3VibGUJdHhfc3B1cl9mMjsKKwlkb3VibGUJdHhfc3B1cl9mMzsKKwlkb3VibGUJdHhfc3B1cl9mNDsKKwlkb3VibGUJdHhfc3B1cl9sMTsKKwlkb3VibGUJdHhfc3B1cl9sMjsKKwlkb3VibGUJdHhfc3B1cl9sMzsKKwlkb3VibGUJdHhfc3B1cl9sNDsKKwlkb3VibGUJcnhfc3B1cl9mMTsKKwlkb3VibGUJcnhfc3B1cl9mMjsKKwlkb3VibGUJcnhfc3B1cl9sMTsKKwlkb3VibGUJcnhfc3B1cl9sMjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbWtrX21lYXN1cmVtZW50c190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9uaWNfcmFtc2l6ZQoreworCVVJTlQ4CXNpemVbMTJdOyAvKiB1bml0cyBvZiBLQiAqLworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9uaWNfcmFtc2l6ZV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9tZmlzdXByYW5nZQoreworCVVJTlQxNglpZDsKKwlVSU5UMTYJdmFyaWFudDsKKwlVSU5UMTYJYm90dG9tOworCVVJTlQxNgl0b3A7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX21maXN1cHJhbmdlX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2NmaXN1cHJhbmdlCit7CisJVUlOVDE2CWlkOworCVVJTlQxNgl2YXJpYW50OworCVVJTlQxNglib3R0b207CisJVUlOVDE2CXRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfY2Zpc3VwcmFuZ2VfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbmljaWQKK3sKKwlVSU5UMTYJaWQ7CisJVUlOVDE2CXZhcmlhbnQ7CisJVUlOVDE2CW1ham9yOworCVVJTlQxNgltaW5vcjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbmljaWRfdDsKKworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9yZWZkYWNfbWVhc3VyZW1lbnRzCit7CisJVUlOVDE2CXZhbHVlWzBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9yZWZkYWNfbWVhc3VyZW1lbnRzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3ZnZGFjX21lYXN1cmVtZW50cworeworCVVJTlQxNgl2YWx1ZVswXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfdmdkYWNfbWVhc3VyZW1lbnRzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2xldmVsX2NvbXBfbWVhc3VyZW1lbnRzCit7CisJVUlOVDE2CXZhbHVlWzBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9sZXZlbF9jb21wY19tZWFzdXJlbWVudHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbWFjX2FkZHJlc3MKK3sKKwlVSU5UOAlhZGRyWzZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9tYWNfYWRkcmVzc190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9ta2tfY2FsbG5hbWUKK3sKKwlVSU5UOAljYWxsbmFtZVs4XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbWtrX2NhbGxuYW1lX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3JlZ2RvbWFpbgoreworCVVJTlQxNgludW1kb21haW5zOworCVVJTlQxNglkb21haW5bNV07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3JlZ2RvbWFpbl90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9hbGxvd2VkX2NoYW5uZWwKK3sKKwlVSU5UMTYJY2hfYml0bWFwOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9hbGxvd2VkX2NoYW5uZWxfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfZGVmYXVsdF9jaGFubmVsCit7CisJVUlOVDE2CWNoYW5uZWw7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2RlZmF1bHRfY2hhbm5lbF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9wcml2YWN5X29wdGlvbgoreworCVVJTlQxNglhdmFpbGFibGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3ByaXZhY3lfb3B0aW9uX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3RlbXB0eXBlCit7CisJVUlOVDE2CXR5cGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3RlbXB0eXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3JlZmRhY19zZXR1cAoreworCVVJTlQxNgljaF92YWx1ZVsxNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3JlZmRhY19zZXR1cF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl92Z2RhY19zZXR1cAoreworCVVJTlQxNgljaF92YWx1ZVsxNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3ZnZGFjX3NldHVwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2xldmVsX2NvbXBfc2V0dXAKK3sKKwlVSU5UMTYJY2hfdmFsdWVbMTRdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9sZXZlbF9jb21wX3NldHVwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3RyaW1kYWNfc2V0dXAKK3sKKwlVSU5UMTYJdHJpbWlkYWM7CisJVUlOVDE2CXRyaW1xZGFjOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl90cmltZGFjX3NldHVwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2lmcl9zZXR0aW5nCit7CisJVUlOVDE2CXZhbHVlWzNdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9pZnJfc2V0dGluZ190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9yZnJfc2V0dGluZworeworCVVJTlQxNgl2YWx1ZVszXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcmZyX3NldHRpbmdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9iYXNlbGluZQoreworCVVJTlQxNgl2YWx1ZVs1MF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfYmFzZWxpbmVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9zaGFkb3cKK3sKKwlVSU5UMzIJdmFsdWVbMzJdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX3NoYWRvd190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX2lmcmYKK3sKKwlVSU5UMzIJdmFsdWVbMjBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX2lmcmZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbHNwCit7CisJVUlOVDE2CXZhbHVlWzE0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbHNwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2hmYTM4NjFfY2hjYWxpCit7CisJVUlOVDE2CXZhbHVlWzE3XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbGlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9uaWNfY29uZmlnCit7CisJVUlOVDE2CWNvbmZpZ19iaXRtYXA7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX25pY19jb25maWdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZvX2RlbGF5Cit7CisJVUlOVDggICBoZm9fZGVsYXk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfaGZvX2RlbGF5X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2hmYTM4NjFfbWFuZl90ZXN0c3AKK3sKKwlVSU5UMTYJdmFsdWVbMzBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX21hbmZfdGVzdHNwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2hmYTM4NjFfbWFuZl90ZXN0aQoreworCVVJTlQxNgl2YWx1ZVszMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfbWFuZl90ZXN0aV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2VuZF9vZl9wZGEKK3sKKwlVSU5UMTYJY3JjOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9lbmRfb2ZfcGRhX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyZWMKK3sKKwlVSU5UMTYJbGVuOyAvKiBpbiB3b3JkcyAqLworCVVJTlQxNgljb2RlOworCXVuaW9uIHBkciB7CisJaGZhMzg0eF9wZHJfcGNiX3BhcnRudW1fdAlwY2JfcGFydG51bTsKKwloZmEzODR4X3Bkcl9wY2JfdHJhY2VudW1fdAlwY2JfdHJhY2VudW07CisJaGZhMzg0eF9wZHJfbmljX3NlcmlhbF90CW5pY19zZXJpYWw7CisJaGZhMzg0eF9wZHJfbWtrX21lYXN1cmVtZW50c190CW1ra19tZWFzdXJlbWVudHM7CisJaGZhMzg0eF9wZHJfbmljX3JhbXNpemVfdAluaWNfcmFtc2l6ZTsKKwloZmEzODR4X3Bkcl9tZmlzdXByYW5nZV90CW1maXN1cHJhbmdlOworCWhmYTM4NHhfcGRyX2NmaXN1cHJhbmdlX3QJY2Zpc3VwcmFuZ2U7CisJaGZhMzg0eF9wZHJfbmljaWRfdAkJbmljaWQ7CisJaGZhMzg0eF9wZHJfcmVmZGFjX21lYXN1cmVtZW50c190CXJlZmRhY19tZWFzdXJlbWVudHM7CisJaGZhMzg0eF9wZHJfdmdkYWNfbWVhc3VyZW1lbnRzX3QJdmdkYWNfbWVhc3VyZW1lbnRzOworCWhmYTM4NHhfcGRyX2xldmVsX2NvbXBjX21lYXN1cmVtZW50c190CWxldmVsX2NvbXBjX21lYXN1cmVtZW50czsKKwloZmEzODR4X3Bkcl9tYWNfYWRkcmVzc190CW1hY19hZGRyZXNzOworCWhmYTM4NHhfcGRyX21ra19jYWxsbmFtZV90CW1ra19jYWxsbmFtZTsKKwloZmEzODR4X3Bkcl9yZWdkb21haW5fdAkJcmVnZG9tYWluOworCWhmYTM4NHhfcGRyX2FsbG93ZWRfY2hhbm5lbF90CWFsbG93ZWRfY2hhbm5lbDsKKwloZmEzODR4X3Bkcl9kZWZhdWx0X2NoYW5uZWxfdAlkZWZhdWx0X2NoYW5uZWw7CisJaGZhMzg0eF9wZHJfcHJpdmFjeV9vcHRpb25fdAlwcml2YWN5X29wdGlvbjsKKwloZmEzODR4X3Bkcl90ZW1wdHlwZV90CQl0ZW1wdHlwZTsKKwloZmEzODR4X3Bkcl9yZWZkYWNfc2V0dXBfdAlyZWZkYWNfc2V0dXA7CisJaGZhMzg0eF9wZHJfdmdkYWNfc2V0dXBfdAl2Z2RhY19zZXR1cDsKKwloZmEzODR4X3Bkcl9sZXZlbF9jb21wX3NldHVwX3QJbGV2ZWxfY29tcF9zZXR1cDsKKwloZmEzODR4X3Bkcl90cmltZGFjX3NldHVwX3QJdHJpbWRhY19zZXR1cDsKKwloZmEzODR4X3Bkcl9pZnJfc2V0dGluZ190CWlmcl9zZXR0aW5nOworCWhmYTM4NHhfcGRyX3Jmcl9zZXR0aW5nX3QJcmZyX3NldHRpbmc7CisJaGZhMzg0eF9wZHJfaGZhMzg2MV9iYXNlbGluZV90CWhmYTM4NjFfYmFzZWxpbmU7CisJaGZhMzg0eF9wZHJfaGZhMzg2MV9zaGFkb3dfdAloZmEzODYxX3NoYWRvdzsKKwloZmEzODR4X3Bkcl9oZmEzODYxX2lmcmZfdAloZmEzODYxX2lmcmY7CisJaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbHNwX3QJaGZhMzg2MV9jaGNhbHNwOworCWhmYTM4NHhfcGRyX2hmYTM4NjFfY2hjYWxpX3QJaGZhMzg2MV9jaGNhbGk7CisJaGZhMzg0eF9wZHJfbmljX2NvbmZpZ190CW5pY19jb25maWc7CisJaGZhMzg0eF9oZm9fZGVsYXlfdCAgICAgICAgICAgICBoZm9fZGVsYXk7CisJaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RzcF90CWhmYTM4NjFfbWFuZl90ZXN0c3A7CisJaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RpX3QJaGZhMzg2MV9tYW5mX3Rlc3RpOworCWhmYTM4NHhfcGRyX2VuZF9vZl9wZGFfdAllbmRfb2ZfcGRhOworCisJfSBkYXRhOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3BkcmVjX3Q7CisKKworI2lmZGVmIF9fS0VSTkVMX18KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLSAgTUFDIHN0YXRlIHN0cnVjdHVyZSwgYXJndW1lbnQgdG8gYWxsIGZ1bmN0aW9ucyAtLQorLS0tICBBbHNvLCBhIGNvbGxlY3Rpb24gb2Ygc3VwcG9ydCB0eXBlcyAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9zdGF0dXNyZXN1bHQKK3sKKwlVSU5UMTYJc3RhdHVzOworCVVJTlQxNglyZXNwMDsKKwlVSU5UMTYJcmVzcDE7CisJVUlOVDE2CXJlc3AyOworfSBoZmEzODR4X2NtZHJlc3VsdF90OworCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQorCisvKiBVU0IgQ29udHJvbCBFeGNoYW5nZSAoQ1RMWCk6CisgKiAgQSBxdWV1ZSBvZiB0aGUgc3RydWN0dXJlIGJlbG93IGlzIG1haW50YWluZWQgZm9yIGFsbCBvZiB0aGUKKyAqICBSZXF1ZXN0L1Jlc3BvbnNlIHR5cGUgVVNCIHBhY2tldHMgc3VwcG9ydGVkIGJ5IFByaXNtMi4KKyAqLworLyogVGhlIGZvbGxvd2luZyBoZmEzODR4Xyogc3RydWN0dXJlcyBhcmUgYXJndW1lbnRzIHRvCisgKiB0aGUgdXNlcmNiKCkgZm9yIHRoZSBkaWZmZXJlbnQgQ1RMWCB0eXBlcy4KKyAqLwordHlwZWRlZiBoZmEzODR4X2NtZHJlc3VsdF90IGhmYTM4NHhfd3JpZHJlc3VsdF90OwordHlwZWRlZiBoZmEzODR4X2NtZHJlc3VsdF90IGhmYTM4NHhfd21lbXJlc3VsdF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3JyaWRyZXN1bHQKK3sKKwlVSU5UMTYJCXJpZDsKKwljb25zdCB2b2lkCSpyaWRkYXRhOworCVVJTlQJCXJpZGRhdGFfbGVuOworfSBoZmEzODR4X3JyaWRyZXN1bHRfdDsKKworZW51bSBjdGx4X3N0YXRlIHsKKwlDVExYX1NUQVJUID0gMCwJLyogU3RhcnQgc3RhdGUsIG5vdCBxdWV1ZWQgKi8KKworCUNUTFhfQ09NUExFVEUsCS8qIENUTFggc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCAqLworCUNUTFhfUkVRX0ZBSUxFRCwJLyogT1VUIFVSQiBjb21wbGV0ZWQgdy8gZXJyb3IgKi8KKworCUNUTFhfUEVORElORywJCS8qIFF1ZXVlZCwgZGF0YSB2YWxpZCAqLworCUNUTFhfUkVRX1NVQk1JVFRFRCwJLyogT1VUIFVSQiBzdWJtaXR0ZWQgKi8KKwlDVExYX1JFUV9DT01QTEVURSwJLyogT1VUIFVSQiBjb21wbGV0ZSAqLworCUNUTFhfUkVTUF9DT01QTEVURQkvKiBJTiBVUkIgcmVjZWl2ZWQgKi8KK307Cit0eXBlZGVmIGVudW0gY3RseF9zdGF0ZSAgQ1RMWF9TVEFURTsKKworc3RydWN0IGhmYTM4NHhfdXNiY3RseDsKK3N0cnVjdCBoZmEzODR4OworCit0eXBlZGVmIHZvaWQgKCpjdGx4X2NtZGNiX3QpKCBzdHJ1Y3QgaGZhMzg0eCosIGNvbnN0IHN0cnVjdCBoZmEzODR4X3VzYmN0bHgqICk7CisKK3R5cGVkZWYgdm9pZCAoKmN0bHhfdXNlcmNiX3QpKAorCXN0cnVjdCBoZmEzODR4CSpodywKKwl2b2lkCQkqY3RseHJlc3VsdCwKKwl2b2lkCQkqdXNlcmNiX2RhdGEpOworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYmN0bHgKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisKKwlzaXplX3QJCQlvdXRidWZzaXplOworCWhmYTM4NHhfdXNib3V0X3QJb3V0YnVmOwkJLyogcGt0IGJ1ZiBmb3IgT1VUICovCisJaGZhMzg0eF91c2Jpbl90CQlpbmJ1ZjsJCS8qIHBrdCBidWYgZm9yIElOKGEgY29weSkgKi8KKworCUNUTFhfU1RBVEUJCXN0YXRlOwkJLyogVHJhY2tzIHJ1bm5pbmcgc3RhdGUgKi8KKworCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7CisJdm9sYXRpbGUgaW50CQlyZWFwYWJsZTsJLyogRm9vZCBmb3IgdGhlIHJlYXBlciB0YXNrICovCisKKwljdGx4X2NtZGNiX3QJCWNtZGNiOwkJLyogQXN5bmMgY29tbWFuZCBjYWxsYmFjayAqLworCWN0bHhfdXNlcmNiX3QJCXVzZXJjYjsJCS8qIEFzeW5jIHVzZXIgY2FsbGJhY2ssICovCisJdm9pZAkJCSp1c2VyY2JfZGF0YTsJLyogIGF0IENUTFggY29tcGxldGlvbiAgKi8KKworCWludAkJCXZhcmlhbnQ7CS8qIElkZW50aWZpZXMgY21kIHZhcmlhbnQgKi8KK30gaGZhMzg0eF91c2JjdGx4X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiY3RseHEKK3sKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJcGVuZGluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbXBsZXRpbmc7CisJc3RydWN0IGxpc3RfaGVhZAlyZWFwYWJsZTsKK30gaGZhMzg0eF91c2JjdGx4cV90OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IGhmYTQ4NHhfbWV0YWNtZAoreworCVVJTlQxNgkJY21kOworCisJVUlOVDE2ICAgICAgICAgIHBhcm0wOworCVVJTlQxNiAgICAgICAgICBwYXJtMTsKKwlVSU5UMTYgICAgICAgICAgcGFybTI7CisKKyNpZiAwIC8vWFhYIGNtZCBpcnEgc3R1ZmYKKwlVSU5UMTYgICAgICAgICAgYnVsa2lkOyAgICAgICAgIC8qIHdoYXQgUklEL0ZJRCB0byBjb3B5IGRvd24uICovCisJaW50ICAgICAgICAgICAgIGJ1bGtsZW47ICAgICAgICAvKiBob3cgbXVjaCB0byBjb3B5IGZyb20gQkFQICovCisgICAgICAgIGNoYXIgICAgICAgICAgICAqYnVsa2RhdGE7ICAgICAgLyogQW5kIHRvIHdoZXJlPyAqLworI2VuZGlmCisKKwloZmEzODR4X2NtZHJlc3VsdF90IHJlc3VsdDsKK30gaGZhMzg0eF9tZXRhY21kX3Q7CisKKyNkZWZpbmUJTUFYX1BSSVNNMl9HUlBfQUREUgkxNgorI2RlZmluZQlNQVhfR1JQX0FERFIJCTMyCisjZGVmaW5lIFdMQU5fQ09NTUVOVF9NQVgJODAgIC8qIE1heC4gbGVuZ3RoIG9mIHVzZXIgY29tbWVudCBzdHJpbmcuICovCisKKyNkZWZpbmUgTU1fU0FUX1BDRgkJKEJJVDE0KQorI2RlZmluZSBNTV9HQ1NEX1BDRgkJKEJJVDE1KQorI2RlZmluZSBNTV9HQ1NEX1BDRl9FQgkJKEJJVDE0IHwgQklUMTUpCisKKyNkZWZpbmUgV0xBTl9TVEFURV9TVE9QUEVECTAgICAvKiBOZXR3b3JrIGlzIG5vdCBhY3RpdmUuICovCisjZGVmaW5lIFdMQU5fU1RBVEVfU1RBUlRFRAkxICAgLyogTmV0d29yayBoYXMgYmVlbiBzdGFydGVkLiAqLworCisjZGVmaW5lIFdMQU5fQVVUSF9NQVggICAgICAgICAgIDYwICAvKiBNYXguICMgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfTUFYCQk2MCAgLyogTWF4LiAjIG9mIHN0YXRpb25zIGluIGFuIGFjY2VzcyBsaXN0LiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19OT05FCTAgICAvKiBObyBzdGF0aW9ucyBtYXkgYmUgYXV0aGVudGljYXRlZC4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfQUxMCQkxICAgLyogQWxsIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19BTExPVwkyICAgLyogQXV0aGVudGljYXRlIG9ubHkgImFsbG93ZWQiIHN0YXRpb25zLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19ERU5ZCTMgICAvKiBEbyBub3QgYXV0aGVudGljYXRlICJkZW5pZWQiIHN0YXRpb25zLiAqLworCisvKiBYWFggVGhlc2UgYXJlIGdvaW5nIGF3YXkgQVNBUCAqLwordHlwZWRlZiBzdHJ1Y3QgcHJpc20yc3RhX2F1dGhsaXN0Cit7CisJVUlOVAljbnQ7CisJVUlOVDgJYWRkcltXTEFOX0FVVEhfTUFYXVtXTEFOX0FERFJfTEVOXTsKKwlVSU5UOAlhc3NvY1tXTEFOX0FVVEhfTUFYXTsKK30gcHJpc20yc3RhX2F1dGhsaXN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHByaXNtMnN0YV9hY2Nlc3NsaXN0Cit7CisJVUlOVAltb2RpZnk7CisJVUlOVAljbnQ7CisJVUlOVDgJYWRkcltXTEFOX0FDQ0VTU19NQVhdW1dMQU5fQUREUl9MRU5dOworCVVJTlQJY250MTsKKwlVSU5UOAlhZGRyMVtXTEFOX0FDQ0VTU19NQVhdW1dMQU5fQUREUl9MRU5dOworfSBwcmlzbTJzdGFfYWNjZXNzbGlzdF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4Cit7CisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCS8qIFJlc291cmNlIGNvbmZpZyAqLworCVVJTlQzMgkJCWlvYmFzZTsKKwljaGFyCQkJX19pb21lbSAqbWVtYmFzZTsKKwlVSU5UMzIJCQlpcnE7CisjZWxzZQorCS8qIFVTQiBzdXBwb3J0IGRhdGEgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqdXNiOworCXN0cnVjdCB1cmIJCXJ4X3VyYjsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnJ4X3VyYl9za2I7CisJc3RydWN0IHVyYgkJdHhfdXJiOworCXN0cnVjdCB1cmIJCWN0bHhfdXJiOworCWhmYTM4NHhfdXNib3V0X3QJdHhidWZmOworCWhmYTM4NHhfdXNiY3RseHFfdAljdGx4cTsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlyZXF0aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlyZXNwdGltZXI7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aHJvdHRsZTsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlyZWFwZXJfYmg7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CWNvbXBsZXRpb25fYmg7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdXNiX3dvcms7CisKKwl1bnNpZ25lZCBsb25nCQl1c2JfZmxhZ3M7CisjZGVmaW5lIFRIUk9UVExFX1JYCTAKKyNkZWZpbmUgVEhST1RUTEVfVFgJMQorI2RlZmluZSBXT1JLX1JYX0hBTFQJMgorI2RlZmluZSBXT1JLX1RYX0hBTFQJMworI2RlZmluZSBXT1JLX1JYX1JFU1VNRQk0CisjZGVmaW5lIFdPUktfVFhfUkVTVU1FCTUKKworCXVuc2lnbmVkIHNob3J0CQlyZXFfdGltZXJfZG9uZToxOworCXVuc2lnbmVkIHNob3J0CQlyZXNwX3RpbWVyX2RvbmU6MTsKKworCWludCAgICAgICAgICAgICAgICAgICAgIGVuZHBfaW47CisJaW50ICAgICAgICAgICAgICAgICAgICAgZW5kcF9vdXQ7CisjZW5kaWYgLyogIVVTQiAqLworCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKQorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldjsKKyNlbHNlCisJZGV2X2xpbmtfdAkqbGluazsKKyNlbmRpZgorCWRldl9ub2RlX3QJbm9kZTsKKyNlbmRpZgorCisJaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZfZmNzOworCWludCAgICAgICAgICAgICAgICAgICAgIHNuaWZmX2NoYW5uZWw7CisJaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZfdHJ1bmNhdGU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZoZHI7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCBjbWRxOwkgICAgICAgIC8qIHdhaXQgcXVldWUgaXRzZWxmICovCisKKwkvKiBDb250cm9sbGVyIHN0YXRlICovCisJVUlOVDMyCQlzdGF0ZTsKKwlVSU5UMzIJCWlzYXA7CisJVUlOVDgJCXBvcnRfZW5hYmxlZFtIRkEzODR4X05VTVBPUlRTX01BWF07CisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCVVJTlQJCWF1eGVuOworCVVJTlQgICAgICAgICAgICBpc3JhbTE2OworI2VuZGlmIC8qICFVU0IgKi8KKworCS8qIERvd25sb2FkIHN1cHBvcnQgKi8KKwlVSU5UCQkJCWRsc3RhdGU7CisJaGZhMzg0eF9kb3dubG9hZGJ1ZmZlcl90CWJ1ZmluZm87CisJVUlOVDE2CQkJCWRsdGltZW91dDsKKworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikKKwlzcGlubG9ja190CWNtZGxvY2s7CisJdm9sYXRpbGUgaW50ICAgIGNtZGZsYWc7ICAgICAgICAvKiB3YWl0IHF1ZXVlIGZsYWcgKi8KKwloZmEzODR4X21ldGFjbWRfdCAqY21kZGF0YTsgICAgICAvKiBmb3Igb3VyIGFzeW5jIGNhbGxiYWNrICovCisKKwkvKiBCQVAgc3VwcG9ydCAqLworCXNwaW5sb2NrX3QJYmFwbG9jazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgICBiYXBfdGFza2xldDsKKworCS8qIE1BQyBidWZmZXIgaWRzICovCisgICAgICAgIFVJTlQxNiAgICAgICAgICB0eGZpZF9oZWFkOworICAgICAgICBVSU5UMTYgICAgICAgICAgdHhmaWRfdGFpbDsKKyAgICAgICAgVUlOVCAgICAgICAgICAgIHR4ZmlkX047CisgICAgICAgIFVJTlQxNiAgICAgICAgICB0eGZpZF9xdWV1ZVtIRkEzODR4X0RSVlJfRklEU1RBQ0tMRU5fTUFYXTsKKwlVSU5UMTYJCQlpbmZvZmlkOworCXN0cnVjdCBzZW1hcGhvcmUJaW5mb2ZpZF9zZW07CisjZW5kaWYgLyogIVVTQiAqLworCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuZmxhZzsgICAgLyogdG8gc2lnbmFsIHNjYW4gY29tbGV0ZSAqLworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbl9hcDsgICAgICAgIC8qIGFyZSB3ZSBqb2luZWQgdG8gYSBzcGVjaWZpYyBhcCAqLworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbl9yZXRyaWVzOyAgIC8qIG51bWJlciBvZiBqb2luIHJldHJpZXMgdGlsbCB3ZSBmYWlsICovCisJaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QgICBqb2lucmVxOyAgICAgICAgLyogam9pbiByZXF1ZXN0IHNhdmVkIGRhdGEgKi8KKworCXdsYW5kZXZpY2VfdCAgICAgICAgICAgICp3bGFuZGV2OworCS8qIFRpbWVyIHRvIGFsbG93IGZvciB0aGUgZGVmZXJyZWQgcHJvY2Vzc2luZyBvZiBsaW5rc3RhdHVzIG1lc3NhZ2VzICovCisJc3RydWN0IHdvcmtfc3RydWN0IAlsaW5rX2JoOworCisgICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIGNvbW1zcXVhbF9iaDsKKwloZmEzODR4X2NvbW1zcXVhbGl0eV90ICBxdWFsOworCXN0cnVjdCB0aW1lcl9saXN0CWNvbW1zcXVhbF90aW1lcjsKKworCVVJTlQxNiBsaW5rX3N0YXR1czsKKwlVSU5UMTYgbGlua19zdGF0dXNfbmV3OworCXN0cnVjdCBza19idWZmX2hlYWQgICAgICAgIGF1dGhxOworCisJLyogQW5kIGhlcmUgd2UgaGF2ZSBzdHVmZiB0aGF0IHVzZWQgdG8gYmUgaW4gcHJpdiAqLworCisJLyogU3RhdGUgdmFyaWFibGVzICovCisJVUlOVAkJcHJlc25pZmZfcG9ydF90eXBlOworCVVJTlQxNgkJcHJlc25pZmZfd2VwZmxhZ3M7CisJVUlOVDMyCQlkb3QxMV9kZXNpcmVkX2Jzc190eXBlOworCWludAkJYXA7CS8qIEFQIGZsYWc6IDAgLSBTdGF0aW9uLCAxIC0gQWNjZXNzIFBvaW50LiAqLworCisJaW50ICAgICAgICAgICAgIGRibWFkanVzdDsKKworCS8qIEdyb3VwIEFkZHJlc3NlcyAtIHJpZ2h0IG5vdywgdGhlcmUgYXJlIHVwIHRvIGEgdG90YWwKKwlvZiBNQVhfR1JQX0FERFIgZ3JvdXAgYWRkcmVzc2VzICovCisJVUlOVDgJCWRvdDExX2dycF9hZGRyW01BWF9HUlBfQUREUl1bV0xBTl9BRERSX0xFTl07CisJVUlOVAkJZG90MTFfZ3JwY250OworCisJLyogQ29tcG9uZW50IElkZW50aXRpZXMgKi8KKwloZmEzODR4X2NvbXBpZGVudF90CWlkZW50X25pYzsKKwloZmEzODR4X2NvbXBpZGVudF90CWlkZW50X3ByaV9mdzsKKwloZmEzODR4X2NvbXBpZGVudF90CWlkZW50X3N0YV9mdzsKKwloZmEzODR4X2NvbXBpZGVudF90CWlkZW50X2FwX2Z3OworCVVJTlQxNgkJCW1tX21vZHM7CisKKwkvKiBTdXBwbGllciBjb21wYXRpYmlsaXR5IHJhbmdlcyAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfc3VwX21maTsKKwloZmEzODR4X2NhcGxldmVsX3QJY2FwX3N1cF9jZmk7CisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9zdXBfcHJpOworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfc3VwX3N0YTsKKwloZmEzODR4X2NhcGxldmVsX3QJY2FwX3N1cF9hcDsKKworCS8qIEFjdG9yIGNvbXBhdGliaWxpdHkgcmFuZ2VzICovCisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3RfcHJpX2NmaTsgLyogcHJpIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfYWN0X3N0YV9jZmk7IC8qIHN0YSBmL3cgdG8gY29udHJvbGxlciBpbnRlcmZhY2UgKi8KKwloZmEzODR4X2NhcGxldmVsX3QJY2FwX2FjdF9zdGFfbWZpOyAvKiBzdGEgZi93IHRvIG1vZGVtIGludGVyZmFjZSAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfYWN0X2FwX2NmaTsgIC8qIGFwIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfYWN0X2FwX21maTsgIC8qIGFwIGYvdyB0byBtb2RlbSBpbnRlcmZhY2UgKi8KKworCVVJTlQzMgkJCXBzdXNlcmNvdW50OyAgLyogUG93ZXIgc2F2ZSB1c2VyIGNvdW50LiAqLworCWhmYTM4NHhfQ29tbVRhbGxpZXMzMl90CXRhbGxpZXM7ICAgICAgLyogQ29tbXVuaWNhdGlvbiB0YWxsaWVzLiAqLworCVVJTlQ4CQkJY29tbWVudFtXTEFOX0NPTU1FTlRfTUFYKzFdOyAvKiBVc2VyIGNvbW1lbnQgKi8KKworCS8qIENoYW5uZWwgSW5mbyByZXF1ZXN0IHJlc3VsdHMgKEFQIG9ubHkpICovCisJc3RydWN0IHsKKwkJYXRvbWljX3QJCWRvbmU7CisJCVVJTlQ4CQkJY291bnQ7CisJCWhmYTM4NHhfQ2hJbmZvUmVzdWx0X3QJcmVzdWx0czsKKwl9IGNoYW5uZWxfaW5mbzsKKworCWhmYTM4NHhfSW5mRnJhbWVfdCAgICAgICpzY2FucmVzdWx0czsKKworCisgICAgICAgIHByaXNtMnN0YV9hdXRobGlzdF90CWF1dGhsaXN0OyAgICAgLyogQXV0aGVudGljYXRlZCBzdGF0aW9uIGxpc3QuICovCisJVUlOVAkJCWFjY2Vzc21vZGU7ICAgLyogQWNjZXNzIG1vZGUuICovCisgICAgICAgIHByaXNtMnN0YV9hY2Nlc3NsaXN0X3QJYWxsb3c7ICAgICAgICAvKiBBbGxvd2VkIHN0YXRpb24gbGlzdC4gKi8KKyAgICAgICAgcHJpc20yc3RhX2FjY2Vzc2xpc3RfdAlkZW55OyAgICAgICAgIC8qIERlbmllZCBzdGF0aW9uIGxpc3QuICovCisKK30gaGZhMzg0eF90OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0gRnVuY3Rpb24gRGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQordm9pZAoraGZhMzg0eF9jcmVhdGUoCisJaGZhMzg0eF90ICpodywKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKTsKKyNlbHNlCit2b2lkCitoZmEzODR4X2NyZWF0ZSgKKwloZmEzODR4X3QgKmh3LAorCVVJTlQgaXJxLAorCVVJTlQzMiBpb2Jhc2UsCisJVUlOVDggX19pb21lbSAqbWVtYmFzZSk7CisjZW5kaWYKKwordm9pZCBoZmEzODR4X2Rlc3Ryb3koaGZhMzg0eF90ICpodyk7CisKK2lycXJldHVybl90CitoZmEzODR4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQgUFRfUkVHUyk7CitpbnQKK2hmYTM4NHhfY29yZXJlc2V0KCBoZmEzODR4X3QgKmh3LCBpbnQgaG9sZHRpbWUsIGludCBzZXR0bGV0aW1lLCBpbnQgZ2VuZXNpcyk7CitpbnQKK2hmYTM4NHhfZHJ2cl9jaGluZm9yZXN1bHRzKCBoZmEzODR4X3QgKmh3KTsKK2ludAoraGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzKCBoZmEzODR4X3QgKmh3KTsKK2ludAoraGZhMzg0eF9kcnZyX2Rpc2FibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpOworaW50CitoZmEzODR4X2RydnJfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBtYWNwb3J0KTsKK2ludAoraGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2RydnJfZmxhc2hkbF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2RydnJfZmxhc2hkbF93cml0ZShoZmEzODR4X3QgKmh3LCBVSU5UMzIgZGFkZHIsIHZvaWQqIGJ1ZiwgVUlOVDMyIGxlbik7CitpbnQKK2hmYTM4NHhfZHJ2cl9nZXRjb25maWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKTsKK2ludAoraGZhMzg0eF9kcnZyX2hhbmRvdmVyKCBoZmEzODR4X3QgKmh3LCBVSU5UOCAqYWRkcik7CitpbnQKK2hmYTM4NHhfZHJ2cl9ob3N0c2NhbnJlc3VsdHMoIGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2RydnJfbG93X2xldmVsKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQpOworaW50CitoZmEzODR4X2RydnJfbW1pX3JlYWQoaGZhMzg0eF90ICpodywgVUlOVDMyIGFkZHJlc3MsIFVJTlQzMiAqcmVzdWx0KTsKK2ludAoraGZhMzg0eF9kcnZyX21taV93cml0ZShoZmEzODR4X3QgKmh3LCBVSU5UMzIgYWRkcmVzcywgVUlOVDMyIGRhdGEpOworaW50CitoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBleGVhZGRyKTsKK2ludAoraGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfZHJ2cl9yYW1kbF93cml0ZShoZmEzODR4X3QgKmh3LCBVSU5UMzIgZGFkZHIsIHZvaWQqIGJ1ZiwgVUlOVDMyIGxlbik7CitpbnQKK2hmYTM4NHhfZHJ2cl9yZWFkcGRhKGhmYTM4NHhfdCAqaHcsIHZvaWQgKmJ1ZiwgVUlOVCBsZW4pOworaW50CitoZmEzODR4X2RydnJfc2NhbnJlc3VsdHMoIGhmYTM4NHhfdCAqaHcpOworCitpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKTsKKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICp2YWwpCit7CisJaW50CQlyZXN1bHQgPSAwOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIHJpZCwgdmFsLCBzaXplb2YoVUlOVDE2KSk7CisJaWYgKCByZXN1bHQgPT0gMCApIHsKKwkJKigoVUlOVDE2Kil2YWwpID0gaGZhMzg0eDJob3N0XzE2KCooKFVJTlQxNiopdmFsKSk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RydnJfZ2V0Y29uZmlnMzIoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqdmFsKQoreworCWludAkJcmVzdWx0ID0gMDsKKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIHJpZCwgdmFsLCBzaXplb2YoVUlOVDMyKSk7CisJaWYgKCByZXN1bHQgPT0gMCApIHsKKwkJKigoVUlOVDMyKil2YWwpID0gaGZhMzg0eDJob3N0XzMyKCooKFVJTlQzMiopdmFsKSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCBVSU5UMTYgdmFsKQoreworCVVJTlQxNiB2YWx1ZSA9IGhvc3QyaGZhMzg0eF8xNih2YWwpOworCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RydnJfc2V0Y29uZmlnMzIoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgVUlOVDMyIHZhbCkKK3sKKwlVSU5UMzIgdmFsdWUgPSBob3N0MmhmYTM4NHhfMzIodmFsKTsKKwlyZXR1cm4gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgcmlkLCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOworfQorCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQoraW50CitoZmEzODR4X2RydnJfZ2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAgICAgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDE2ICAgICAgICByaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgKnVzZXJjYl9kYXRhKTsKKworaW50CitoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMTYgcmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDE2IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByaWQsIHZvaWQgKmJ1ZiwgVUlOVDE2IGxlbiwKKwkJCSAgICAgdm9pZCAqcHRyMSwgdm9pZCAqcHRyMikKK3sKKyAgICAgICAgICh2b2lkKXB0cjE7CisgICAgICAgICAodm9pZClwdHIyOworICAgICAgICAgcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIHJpZCwgYnVmLCBsZW4pOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RydnJfc2V0Y29uZmlnMTZfYXN5bmMoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgVUlOVDE2IHZhbCkKK3sKKwlVSU5UMTYgdmFsdWUgPSBob3N0MmhmYTM4NHhfMTYodmFsKTsKKwlyZXR1cm4gaGZhMzg0eF9kcnZyX3NldGNvbmZpZ19hc3luYyhodywgcmlkLCAmdmFsdWUsIHNpemVvZih2YWx1ZSksCisJCQkJCSAgICBOVUxMICwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RydnJfc2V0Y29uZmlnMzJfYXN5bmMoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgVUlOVDMyIHZhbCkKK3sKKwlVSU5UMzIgdmFsdWUgPSBob3N0MmhmYTM4NHhfMzIodmFsKTsKKwlyZXR1cm4gaGZhMzg0eF9kcnZyX3NldGNvbmZpZ19hc3luYyhodywgcmlkLCAmdmFsdWUsIHNpemVvZih2YWx1ZSksCisJCQkJCSAgICBOVUxMICwgTlVMTCk7Cit9CisKKworaW50CitoZmEzODR4X2RydnJfc3RhcnQoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfZHJ2cl9zdG9wKGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2RydnJfdHhmcmFtZShoZmEzODR4X3QgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOwordm9pZAoraGZhMzg0eF90eF90aW1lb3V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CisKK2ludAoraGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShoZmEzODR4X3QgKmh3KTsKK2ludAoraGZhMzg0eF9jbWRfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBtYWNwb3J0KTsKK2ludAoraGZhMzg0eF9jbWRfZGlzYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCk7CitpbnQKK2hmYTM4NHhfY21kX2RpYWdub3NlKGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2NtZF9hbGxvY2F0ZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbGVuKTsKK2ludAoraGZhMzg0eF9jbWRfdHJhbnNtaXQoaGZhMzg0eF90ICpodywgVUlOVDE2IHJlY2xhaW0sIFVJTlQxNiBxb3MsIFVJTlQxNiBmaWQpOworaW50CitoZmEzODR4X2NtZF9jbGVhcnBlcnNpc3QoaGZhMzg0eF90ICpodywgVUlOVDE2IGZpZCk7CitpbnQKK2hmYTM4NHhfY21kX25vdGlmeShoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmVjbGFpbSwgVUlOVDE2IGZpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKTsKK2ludAoraGZhMzg0eF9jbWRfaW5xdWlyZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgZmlkKTsKK2ludAoraGZhMzg0eF9jbWRfYWNjZXNzKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiB3cml0ZSwgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKTsKK2ludAoraGZhMzg0eF9jbWRfbW9uaXRvcihoZmEzODR4X3QgKmh3LCBVSU5UMTYgZW5hYmxlKTsKK2ludAoraGZhMzg0eF9jbWRfZG93bmxvYWQoCisJaGZhMzg0eF90ICpodywKKwlVSU5UMTYgbW9kZSwKKwlVSU5UMTYgbG93YWRkciwKKwlVSU5UMTYgaGlnaGFkZHIsCisJVUlOVDE2IGNvZGVsZW4pOworaW50CitoZmEzODR4X2NtZF9hdXhfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIGludCBmb3JjZSk7CitpbnQKK2hmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2NvcHlfZnJvbV9iYXAoCisJaGZhMzg0eF90ICpodywKKwlVSU5UMTYJYmFwLAorCVVJTlQxNglpZCwKKwlVSU5UMTYJb2Zmc2V0LAorCXZvaWQJKmJ1ZiwKKwlVSU5UCWxlbik7CitpbnQKK2hmYTM4NHhfY29weV90b19iYXAoCisJaGZhMzg0eF90ICpodywKKwlVSU5UMTYJYmFwLAorCVVJTlQxNglpZCwKKwlVSU5UMTYJb2Zmc2V0LAorCXZvaWQJKmJ1ZiwKKwlVSU5UCWxlbik7Cit2b2lkCitoZmEzODR4X2NvcHlfZnJvbV9hdXgoCisJaGZhMzg0eF90ICpodywKKwlVSU5UMzIJY2FyZGFkZHIsCisJVUlOVDMyCWF1eGN0bCwKKwl2b2lkCSpidWYsCisJVUlOVAlsZW4pOwordm9pZAoraGZhMzg0eF9jb3B5X3RvX2F1eCgKKwloZmEzODR4X3QgKmh3LAorCVVJTlQzMgljYXJkYWRkciwKKwlVSU5UMzIJYXV4Y3RsLAorCXZvaWQJKmJ1ZiwKKwlVSU5UCWxlbik7CisKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisKKy8qCisgICBIRkEzODR4IGlzIGEgTElUVExFIEVORElBTiBwYXJ0LgorCisgICB0aGUgZ2V0L3NldHJlZyBmdW5jdGlvbnMgaW1wbGljaXRseSBieXRlLXN3YXAgdGhlIGRhdGEgdG8gTEUuCisgICB0aGUgX25vc3dhcCB2YXJpYW50cyBkbyBub3QgcGVyZm9ybSBhIGJ5dGUtc3dhcCBvbiB0aGUgZGF0YS4KKyovCisKK3N0YXRpYyBpbmxpbmUgVUlOVDE2CitfX2hmYTM4NHhfZ2V0cmVnKGhmYTM4NHhfdCAqaHcsIFVJTlQgcmVnKTsKKworc3RhdGljIGlubGluZSB2b2lkCitfX2hmYTM4NHhfc2V0cmVnKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiB2YWwsIFVJTlQgcmVnKTsKKworc3RhdGljIGlubGluZSBVSU5UMTYKK19faGZhMzg0eF9nZXRyZWdfbm9zd2FwKGhmYTM4NHhfdCAqaHcsIFVJTlQgcmVnKTsKKworc3RhdGljIGlubGluZSB2b2lkCitfX2hmYTM4NHhfc2V0cmVnX25vc3dhcChoZmEzODR4X3QgKmh3LCBVSU5UMTYgdmFsLCBVSU5UIHJlZyk7CisKKyNpZmRlZiBSRVZFUlNFX0VORElBTgorI2RlZmluZSBoZmEzODR4X2dldHJlZyBfX2hmYTM4NHhfZ2V0cmVnX25vc3dhcAorI2RlZmluZSBoZmEzODR4X3NldHJlZyBfX2hmYTM4NHhfc2V0cmVnX25vc3dhcAorI2RlZmluZSBoZmEzODR4X2dldHJlZ19ub3N3YXAgX19oZmEzODR4X2dldHJlZworI2RlZmluZSBoZmEzODR4X3NldHJlZ19ub3N3YXAgX19oZmEzODR4X3NldHJlZworI2Vsc2UKKyNkZWZpbmUgaGZhMzg0eF9nZXRyZWcgX19oZmEzODR4X2dldHJlZworI2RlZmluZSBoZmEzODR4X3NldHJlZyBfX2hmYTM4NHhfc2V0cmVnCisjZGVmaW5lIGhmYTM4NHhfZ2V0cmVnX25vc3dhcCBfX2hmYTM4NHhfZ2V0cmVnX25vc3dhcAorI2RlZmluZSBoZmEzODR4X3NldHJlZ19ub3N3YXAgX19oZmEzODR4X3NldHJlZ19ub3N3YXAKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9nZXRyZWcKKyoKKyogUmV0cmlldmUgdGhlIHZhbHVlIG9mIG9uZSBvZiB0aGUgTUFDIHJlZ2lzdGVycy4gIERvbmUgaGVyZQorKiBiZWNhdXNlIGRpZmZlcmVudCBQUklTTTIgTUFDIHBhcnRzIHVzZSBkaWZmZXJlbnQgYnVzZXMgYW5kIHN1Y2guCisqIE5PVEU6IFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgaW4gSE9TVCBPUkRFUiEhISEhIQorKgorKiBBcmd1bWVudHM6CisqICAgICAgIGh3ICAgICAgICAgTUFDIHBhcnQgc3RydWN0dXJlCisqICAgICAgIHJlZyAgICAgICAgUmVnaXN0ZXIgaWRlbnRpZmllciAob2Zmc2V0IGZvciBJL08gYmFzZWQgaS9mKQorKgorKiBSZXR1cm5zOgorKiAgICAgICBWYWx1ZSBmcm9tIHRoZSByZWdpc3RlciBpbiBIT1NUIE9SREVSISEhIQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIFVJTlQxNgorX19oZmEzODR4X2dldHJlZyhoZmEzODR4X3QgKmh3LCBVSU5UIHJlZykKK3sKKy8qCXByaW50ayhLRVJOX0RFQlVHICJSZWFkaW5nIGZyb20gMHglMHhcbiIsIGh3LT5tZW1iYXNlICsgcmVnKTsgKi8KKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpKQorCXJldHVybiB3bGFuX2lud19sZTE2X3RvX2NwdShody0+aW9iYXNlK3JlZyk7CisjZWxpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisJcmV0dXJuIF9fbGUxNl90b19jcHUocmVhZHcoaHctPm1lbWJhc2UgKyByZWcpKTsKKyNlbmRpZgorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9zZXRyZWcKKyoKKyogU2V0IHRoZSB2YWx1ZSBvZiBvbmUgb2YgdGhlIE1BQyByZWdpc3RlcnMuICBEb25lIGhlcmUKKyogYmVjYXVzZSBkaWZmZXJlbnQgUFJJU00yIE1BQyBwYXJ0cyB1c2UgZGlmZmVyZW50IGJ1c2VzIGFuZCBzdWNoLgorKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIHZhbHVlIGlzIGluIEhPU1QgT1JERVIhISEhISEKKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBodwlNQUMgcGFydCBzdHJ1Y3R1cmUKKyoJdmFsCVZhbHVlLCBpbiBIT1NUIE9SREVSISEsIHRvIHB1dCBpbiB0aGUgcmVnaXN0ZXIKKyogICAgICAgcmVnCVJlZ2lzdGVyIGlkZW50aWZpZXIgKG9mZnNldCBmb3IgSS9PIGJhc2VkIGkvZikKKyoKKyogUmV0dXJuczoKKyogICAgICAgTm90aGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIHZvaWQKK19faGZhMzg0eF9zZXRyZWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHZhbCwgVUlOVCByZWcpCit7CisjaWYgKChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkgfHwgKFdMQU5fSE9TVElGID09IFdMQU5fUExYKSkKKwl3bGFuX291dHdfY3B1X3RvX2xlMTYoIHZhbCwgaHctPmlvYmFzZSArIHJlZyk7CisJcmV0dXJuOworI2VsaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENJKQorCXdyaXRldyhfX2NwdV90b19sZTE2KHZhbCksIGh3LT5tZW1iYXNlICsgcmVnKTsKKwlyZXR1cm47CisjZW5kaWYKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9nZXRyZWdfbm9zd2FwCisqCisqIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiBvbmUgb2YgdGhlIE1BQyByZWdpc3RlcnMuICBEb25lIGhlcmUKKyogYmVjYXVzZSBkaWZmZXJlbnQgUFJJU00yIE1BQyBwYXJ0cyB1c2UgZGlmZmVyZW50IGJ1c2VzIGFuZCBzdWNoLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIGh3ICAgICAgICAgTUFDIHBhcnQgc3RydWN0dXJlCisqICAgICAgIHJlZyAgICAgICAgUmVnaXN0ZXIgaWRlbnRpZmllciAob2Zmc2V0IGZvciBJL08gYmFzZWQgaS9mKQorKgorKiBSZXR1cm5zOgorKiAgICAgICBWYWx1ZSBmcm9tIHRoZSByZWdpc3Rlci4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGlubGluZSBVSU5UMTYKK19faGZhMzg0eF9nZXRyZWdfbm9zd2FwKGhmYTM4NHhfdCAqaHcsIFVJTlQgcmVnKQoreworI2lmICgoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpIHx8IChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCkpCisJcmV0dXJuIHdsYW5faW53KGh3LT5pb2Jhc2UrcmVnKTsKKyNlbGlmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKwlyZXR1cm4gcmVhZHcoaHctPm1lbWJhc2UgKyByZWcpOworI2VuZGlmCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfc2V0cmVnX25vc3dhcAorKgorKiBTZXQgdGhlIHZhbHVlIG9mIG9uZSBvZiB0aGUgTUFDIHJlZ2lzdGVycy4gIERvbmUgaGVyZQorKiBiZWNhdXNlIGRpZmZlcmVudCBQUklTTTIgTUFDIHBhcnRzIHVzZSBkaWZmZXJlbnQgYnVzZXMgYW5kIHN1Y2guCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgaHcJTUFDIHBhcnQgc3RydWN0dXJlCisqCXZhbAlWYWx1ZSB0byBwdXQgaW4gdGhlIHJlZ2lzdGVyCisqICAgICAgIHJlZwlSZWdpc3RlciBpZGVudGlmaWVyIChvZmZzZXQgZm9yIEkvTyBiYXNlZCBpL2YpCisqCisqIFJldHVybnM6CisqICAgICAgIE5vdGhpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGlubGluZSB2b2lkCitfX2hmYTM4NHhfc2V0cmVnX25vc3dhcChoZmEzODR4X3QgKmh3LCBVSU5UMTYgdmFsLCBVSU5UIHJlZykKK3sKKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpKQorCXdsYW5fb3V0dyggdmFsLCBody0+aW9iYXNlICsgcmVnKTsKKwlyZXR1cm47CisjZWxpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisJd3JpdGV3KHZhbCwgaHctPm1lbWJhc2UgKyByZWcpOworCXJldHVybjsKKyNlbmRpZgorfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoZmEzODR4X2V2ZW50c19hbGwoaGZhMzg0eF90ICpodykKK3sKKwloZmEzODR4X3NldHJlZyhodywKKwkJICAgICAgIEhGQTM4NHhfSU5UX05PUk1BTAorI2lmZGVmIENNRF9JUlEKKwkJICAgICAgIHwgSEZBMzg0eF9JTlRFTl9DTURfU0VUKDEpCisjZW5kaWYKKwkJICAgICAgICwKKwkJICAgICAgIEhGQTM4NHhfSU5URU4pOworCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoZmEzODR4X2V2ZW50c19ub2JhcChoZmEzODR4X3QgKmh3KQoreworCWhmYTM4NHhfc2V0cmVnKGh3LAorCQkgICAgICAgIChIRkEzODR4X0lOVF9OT1JNQUwgJiB+SEZBMzg0eF9JTlRfQkFQX09QKQorI2lmZGVmIENNRF9JUlEKKwkJICAgICAgIHwgSEZBMzg0eF9JTlRFTl9DTURfU0VUKDEpCisjZW5kaWYKKwkJICAgICAgICwKKwkJICAgICAgIEhGQTM4NHhfSU5URU4pOworCit9CisKKyNlbmRpZiAvKiBXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQiAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmICAvKiBfSEZBMzg0eF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjBjNTAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYwpAQCAtMCwwICsxLDUwMjcgQEAKKy8qIHNyYy9wcmlzbTIvZHJpdmVyL2hmYTM4NHhfdXNiLmMKKyoKKyogRnVuY3Rpb25zIHRoYXQgdGFsayB0byB0aGUgVVNCIHZhcmlhbnRvZiB0aGUgSW50ZXJzaWwgaGZhMzg0eCBNQUMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGltcGxlbWVudHMgZnVuY3Rpb25zIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgcHJpc20yL2hmYTM4NHgKKyogODAyLjExIE1BQyBoYXJkd2FyZSBhbmQgZmlybXdhcmUgaG9zdCBpbnRlcmZhY2UuCisqCisqIFRoZSBmdW5jdGlvbnMgY2FuIGJlIGNvbnNpZGVyZWQgdG8gcmVwcmVzZW50IHNldmVyYWwgbGV2ZWxzIG9mCisqIGFic3RyYWN0aW9uLiAgVGhlIGxvd2VzdCBsZXZlbCBmdW5jdGlvbnMgYXJlIHNpbXBseSBDLWNhbGxhYmxlIHdyYXBwZXJzCisqIGFyb3VuZCB0aGUgcmVnaXN0ZXIgYWNjZXNzZXMuICBUaGUgbmV4dCBoaWdoZXIgbGV2ZWwgcmVwcmVzZW50cyBDLWNhbGxhYmxlCisqIHByaXNtMiBBUEkgZnVuY3Rpb25zIHRoYXQgbWF0Y2ggdGhlIEludGVyc2lsIGRvY3VtZW50YXRpb24gYXMgY2xvc2VseQorKiBhcyBpcyByZWFzb25hYmxlLiAgVGhlIG5leHQgaGlnaGVyIGxheWVyIGltcGxlbWVudHMgY29tbW9uIHNlcXVlbmNlcworKiBvZiBpbnZva2F0aW9ucyBvZiB0aGUgQVBJIGxheWVyIChlLmcuIHdyaXRlIHRvIGJhcCwgZm9sbG93ZWQgYnkgY21kKS4KKyoKKyogQ29tbW9uIHNlcXVlbmNlczoKKyogaGZhMzg0eF9kcnZyX3h4eAlIaWdoZXN0IGxldmVsIGFic3RyYWN0aW9ucyBwcm92aWRlZCBieSB0aGUKKyoJCQloZmEzODR4IGNvZGUuICBUaGV5IGFyZSBkcml2ZXIgZGVmaW5lZCB3cmFwcGVycworKgkJCWZvciBjb21tb24gc2VxdWVuY2VzLiAgVGhlc2UgZnVuY3Rpb25zIGdlbmVyYWxseQorKgkJCXVzZSB0aGUgc2VydmljZXMgb2YgdGhlIGxvd2VyIGxldmVscy4KKyoKKyogaGZhMzg0eF9kcnZyX3h4eGNvbmZpZyAgQW4gZXhhbXBsZSBvZiB0aGUgZHJ2ciBsZXZlbCBhYnN0cmFjdGlvbi4gVGhlc2UKKyoJCQlmdW5jdGlvbnMgYXJlIHdyYXBwZXJzIGZvciB0aGUgUklEIGdldC9zZXQKKyoJCQlzZXF1ZW5jZS4gVGhleSAJY2FsbCBjb3B5X1t0b3xmcm9tXV9iYXAoKSBhbmQKKyoJCQljbWRfYWNjZXNzKCkuCVRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIHRoZQorKgkJCVJJRHMgYW5kIGJ1ZmZlcnMgd2l0aG91dCB2YWxpZGF0aW9uLiAgVGhlIGNhbGxlcgorKgkJCWlzIHJlc3BvbnNpYmxlIGZvciB0aGF0LgorKgorKiBBUEkgd3JhcHBlciBmdW5jdGlvbnM6CisqIGhmYTM4NHhfY21kX3h4eAlmdW5jdGlvbnMgdGhhdCBwcm92aWRlIGFjY2VzcyB0byB0aGUgZi93IGNvbW1hbmRzLgorKgkJCVRoZSBmdW5jdGlvbiBhcmd1bWVudHMgY29ycmVzcG9uZCB0byBlYWNoIGNvbW1hbmQKKyoJCQlhcmd1bWVudCwgZXZlbiBjb21tYW5kIGFyZ3VtZW50cyB0aGF0IGdldCBwYWNrZWQKKyoJCQlpbnRvIHNpbmdsZSByZWdpc3RlcnMuICBUaGVzZSBmdW5jdGlvbnMgX2p1c3RfCisqCQkJaXNzdWUgdGhlIGNvbW1hbmQgYnkgc2V0dGluZyB0aGUgY21kL3Bhcm0gcmVncworKgkJCSYgcmVhZGluZyB0aGUgc3RhdHVzL3Jlc3AgcmVncy4gIEFkZGl0aW9uYWwKKyoJCQlhY3Rpdml0aWVzIHJlcXVpcmVkIHRvIGZ1bGx5IHVzZSBhIGNvbW1hbmQKKyoJCQkocmVhZC93cml0ZSBmcm9tL3RvIGJhcCwgZ2V0L3NldCBpbnQgc3RhdHVzIGV0Yy4pCisqCQkJYXJlIGltcGxlbWVudGVkIHNlcGFyYXRlbHkuICBUaGluayBvZiB0aGVzZSBhcworKgkJCUMtY2FsbGFibGUgcHJpc20yIGNvbW1hbmRzLgorKgorKiBMb3dlc3QgTGF5ZXIgRnVuY3Rpb25zOgorKiBoZmEzODR4X2RvY21kX3h4eAlUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBzZXF1ZW5jZSByZXF1aXJlZAorKgkJCXRvIGlzc3VlIGFueSBwcmlzbTIgY29tbWFuZC4gIFByaW1hcmlseSB1c2VkIGJ5IHRoZQorKgkJCWhmYTM4NHhfY21kX3h4eCBmdW5jdGlvbnMuCisqCisqIGhmYTM4NHhfYmFwX3h4eAlCQVAgcmVhZC93cml0ZSBhY2Nlc3MgZnVuY3Rpb25zLgorKgkJCU5vdGU6IHdlIHVzdWFsbHkgdXNlIEJBUDAgZm9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAorKgkJCSBhbmQgQkFQMSBmb3IgaW50ZXJydXB0IGNvbnRleHQuCisqCisqIGhmYTM4NHhfZGxfeHh4CWRvd25sb2FkIHJlbGF0ZWQgZnVuY3Rpb25zLgorKgorKiBEcml2ZXIgU3RhdGUgSXNzdWVzOgorKiBOb3RlIHRoYXQgdGhlcmUgYXJlIHR3byBwYWlycyBvZiBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgdGhlCisqICdpbml0aWFsaXplZCcgYW5kICdydW5uaW5nJyBzdGF0ZXMgb2YgdGhlIGh3L01BQyBjb21iby4gIFRoZSBmb3VyCisqIGZ1bmN0aW9ucyBhcmUgY3JlYXRlKCksIGRlc3Ryb3koKSwgc3RhcnQoKSwgYW5kIHN0b3AoKS4gIGNyZWF0ZSgpCisqIHNldHMgdXAgdGhlIGRhdGEgc3RydWN0dXJlcyByZXF1aXJlZCB0byBzdXBwb3J0IHRoZSBoZmEzODR4XyoKKyogZnVuY3Rpb25zIGFuZCBkZXN0cm95KCkgY2xlYW5zIHRoZW0gdXAuICBUaGUgc3RhcnQoKSBmdW5jdGlvbiBnZXRzCisqIHRoZSBhY3R1YWwgaGFyZHdhcmUgcnVubmluZyBhbmQgZW5hYmxlcyB0aGUgaW50ZXJydXB0cy4gIFRoZSBzdG9wKCkKKyogZnVuY3Rpb24gc2h1dHMgdGhlIGhhcmR3YXJlIGRvd24uICBUaGUgc2VxdWVuY2Ugc2hvdWxkIGJlOgorKiBjcmVhdGUoKQorKiBzdGFydCgpCisqICAuCisqICAuICBEbyBpbnRlcmVzdGluZyB0aGluZ3Mgdy8gdGhlIGhhcmR3YXJlCisqICAuCisqIHN0b3AoKQorKiBkZXN0cm95KCkKKyoKKyogTm90ZSB0aGF0IGRlc3Ryb3koKSBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgY2FsbGluZyBzdG9wKCkgZmlyc3QuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisjZGVmaW5lIFdMQU5fREJWQVIJcHJpc20yX2RlYnVnCisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorI2Vycm9yICJUaGlzIGZpbGUgaXMgc3BlY2lmaWMgdG8gVVNCIgorI2VuZGlmCisKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxMCkKK3N0YXRpYyBpbnQKK3dhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZShzdHJ1Y3QgY29tcGxldGlvbiAqeCkKK3sKKyAgaW50IHJldCA9IDA7CisKKyAgbWlnaHRfc2xlZXAoKTsKKworICBzcGluX2xvY2tfaXJxKCZ4LT53YWl0LmxvY2spOworICBpZiAoIXgtPmRvbmUpIHsKKyAgICBERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworICAgIHdhaXQuZmxhZ3MgfD0gV1FfRkxBR19FWENMVVNJVkU7CisgICAgX19hZGRfd2FpdF9xdWV1ZV90YWlsKCZ4LT53YWl0LCAmd2FpdCk7CisgICAgZG8geworICAgICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisgICAgICAgIHJldCA9IC1FUkVTVEFSVFNZUzsKKyAgICAgICAgX19yZW1vdmVfd2FpdF9xdWV1ZSgmeC0+d2FpdCwgJndhaXQpOworICAgICAgICBnb3RvIG91dDsKKyAgICAgIH0KKyAgICAgIF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKyAgICAgIHNwaW5fdW5sb2NrX2lycSgmeC0+d2FpdC5sb2NrKTsKKyAgICAgIHNjaGVkdWxlKCk7CisgICAgICBzcGluX2xvY2tfaXJxKCZ4LT53YWl0LmxvY2spOworICAgIH0gd2hpbGUgKCF4LT5kb25lKTsKKyAgICBfX3JlbW92ZV93YWl0X3F1ZXVlKCZ4LT53YWl0LCAmd2FpdCk7CisgIH0KKyAgeC0+ZG9uZS0tOworb3V0OgorICBzcGluX3VubG9ja19pcnEoJngtPndhaXQubG9jayk7CisKKyAgcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDY5KQorc3RhdGljIHZvaWQKK3VzYl9pbml0X3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJbWVtc2V0KHVyYiwgMCwgc2l6ZW9mKCp1cmIpKTsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApIC8qIHR1bmUgbWUhICovCisJdXJiLT5jb3VudCA9IChhdG9taWNfdClBVE9NSUNfSU5JVCgxKTsKKyNlbmRpZgorCXNwaW5fbG9ja19pbml0KCZ1cmItPmxvY2spOworfQorI2VuZGlmCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApIC8qIHR1bmUgbWUhICovCisjICBkZWZpbmUgU1VCTUlUX1VSQih1LGYpICB1c2Jfc3VibWl0X3VyYih1LGYpCisjZWxzZQorIyAgZGVmaW5lIFNVQk1JVF9VUkIodSxmKSAgdXNiX3N1Ym1pdF91cmIodSkKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTFtZ210LmgiCisjaW5jbHVkZSAicDgwMjExY29udi5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMXJlcS5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAiaGZhMzg0eC5oIgorI2luY2x1ZGUgInByaXNtMm1nbXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCitlbnVtIGNtZF9tb2RlCit7CisgIERPV0FJVCA9IDAsCisgIERPQVNZTkMKK307Cit0eXBlZGVmIGVudW0gY21kX21vZGUgQ01EX01PREU7CisKKyNkZWZpbmUgVEhST1RUTEVfSklGRklFUwkoSFovOCkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIE1hY3JvcyAqLworCisjZGVmaW5lIFJPVU5EVVA2NChhKSAoKChhKSs2MykmfjYzKQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworZXh0ZXJuIGludCBwcmlzbTJfZGVidWc7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworI2lmZGVmIERFQlVHX1VTQgorc3RhdGljIHZvaWQKK2RicHJpbnRfdXJiKHN0cnVjdCB1cmIqIHVyYik7CisjZW5kaWYKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfaW50X3J4bW9uaXRvcigKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJaGZhMzg0eF91c2Jfcnhmcm1fdCAqcnhmcm0pOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKKworc3RhdGljIGludAorc3VibWl0X3J4X3VyYihoZmEzODR4X3QgKmh3LCBnZnBfdCBmbGFncyk7CisKK3N0YXRpYyBpbnQKK3N1Ym1pdF90eF91cmIoaGZhMzg0eF90ICpodywgc3RydWN0IHVyYiAqdHhfdXJiLCBnZnBfdCBmbGFncyk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIENhbGxiYWNrcyAqLworI2lmZGVmIFVSQl9PTkxZX0NBTExCQUNLCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkCitoZmEzODR4X2N0bHhvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CisjZWxzZQorc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNib3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQKK2hmYTM4NHhfY3RseG91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworI2VuZGlmCisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmluX3R4Y29tcGwod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYmluX3QgKnVzYmluKTsKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiaW5fcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiaW5faW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4pOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JvdXRfdHgod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYm91dF90ICp1c2JvdXQpOworCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2N0bHgoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2Jpbl90ICp1c2JpbiwKKwkJCSAgICAgICBpbnQgdXJiX3N0YXR1cyk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBwcmlzbTIgdXNiIGNvbW1hbmQgcXVldWUgKi8KKworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiY3RseHFfcnVuKGhmYTM4NHhfdCAqaHcpOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4X3JlcXRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKTsKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiY3RseF9yZXNwdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JfdGhyb3R0bGVmbih1bnNpZ25lZCBsb25nIGRhdGEpOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4X2NvbXBsZXRpb25fdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4X3JlYXBlcl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKK3N0YXRpYyBpbnQKK2hmYTM4NHhfdXNiY3RseF9zdWJtaXQoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpOworCitzdGF0aWMgdm9pZAordW5sb2NrZWRfdXNiY3RseF9jb21wbGV0ZShoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CisKK3N0cnVjdCB1c2JjdGx4X2NvbXBsZXRvcgoreworCWludCAoKmNvbXBsZXRlKShzdHJ1Y3QgdXNiY3RseF9jb21wbGV0b3IqKTsKK307Cit0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X2NvbXBsZXRvciB1c2JjdGx4X2NvbXBsZXRvcl90OworCitzdGF0aWMgaW50CitoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYyhoZmEzODR4X3QgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JjdGx4X2NvbXBsZXRvcl90ICpjb21wbGV0b3IpOworCitzdGF0aWMgaW50Cit1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X2NiX3N0YXR1cyhoZmEzODR4X3QgKmh3LCBjb25zdCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X2NiX3JyaWQoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpOworCitzdGF0aWMgaW50Cit1c2JjdGx4X2dldF9zdGF0dXMoY29uc3QgaGZhMzg0eF91c2JfY21kcmVzcF90ICpjbWRyZXNwLAorICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfY21kcmVzdWx0X3QgKnJlc3VsdCk7CisKK3N0YXRpYyB2b2lkCit1c2JjdGx4X2dldF9ycmlkcmVzdWx0KGNvbnN0IGhmYTM4NHhfdXNiX3JyaWRyZXNwX3QgKnJyaWRyZXNwLAorICAgICAgICAgICAgICAgICAgICAgICBoZmEzODR4X3JyaWRyZXN1bHRfdCAqcmVzdWx0KTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTG93IGxldmVsIHJlcS9yZXNwIENUTFggZm9ybWF0dGVycyBhbmQgc3VibWl0dGVycyAqLworc3RhdGljIGludAoraGZhMzg0eF9kb2NtZCgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJaGZhMzg0eF9tZXRhY21kX3QgKmNtZCwKKwljdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpOworCitzdGF0aWMgaW50CitoZmEzODR4X2RvcnJpZCgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJVUlOVDE2CXJpZCwKKwl2b2lkCSpyaWRkYXRhLAorCVVJTlQJcmlkZGF0YWxlbiwKKwljdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpOworCitzdGF0aWMgaW50CitoZmEzODR4X2Rvd3JpZCgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJVUlOVDE2CXJpZCwKKwl2b2lkCSpyaWRkYXRhLAorCVVJTlQJcmlkZGF0YWxlbiwKKwljdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpOworCitzdGF0aWMgaW50CitoZmEzODR4X2Rvcm1lbSgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJVUlOVDE2CXBhZ2UsCisJVUlOVDE2CW9mZnNldCwKKwl2b2lkCSpkYXRhLAorCVVJTlQJbGVuLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSk7CisKK3N0YXRpYyBpbnQKK2hmYTM4NHhfZG93bWVtKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwlVSU5UMTYJcGFnZSwKKwlVSU5UMTYJb2Zmc2V0LAorCXZvaWQJKmRhdGEsCisJVUlOVAlsZW4sCisJY3RseF9jbWRjYl90IGNtZGNiLAorCWN0bHhfdXNlcmNiX3QgdXNlcmNiLAorCXZvaWQJKnVzZXJjYl9kYXRhKTsKKworc3RhdGljIGludAoraGZhMzg0eF9pc2dvb2RfcGRyY29kZShVSU5UMTYgcGRyY29kZSk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBjdGx4c3RyKENUTFhfU1RBVEUgcykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciogY3RseF9zdHJbXSA9IHsKKwkJIkluaXRpYWwgc3RhdGUiLAorCQkiQ29tcGxldGUiLAorCQkiUmVxdWVzdCBmYWlsZWQiLAorCQkiUmVxdWVzdCBwZW5kaW5nIiwKKwkJIlJlcXVlc3QgcGFja2V0IHN1Ym1pdHRlZCIsCisJCSJSZXF1ZXN0IHBhY2tldCBjb21wbGV0ZWQiLAorCQkiUmVzcG9uc2UgcGFja2V0IGNvbXBsZXRlZCIKKwl9OworCisJcmV0dXJuIGN0bHhfc3RyW3NdOworfTsKKworCitzdGF0aWMgaW5saW5lIGhmYTM4NHhfdXNiY3RseF90KgorZ2V0X2FjdGl2ZV9jdGx4KGhmYTM4NHhfdCAqaHcpCit7CisJcmV0dXJuIGxpc3RfZW50cnkoaHctPmN0bHhxLmFjdGl2ZS5uZXh0LCBoZmEzODR4X3VzYmN0bHhfdCwgbGlzdCk7Cit9CisKKworI2lmZGVmIERFQlVHX1VTQgordm9pZAorZGJwcmludF91cmIoc3RydWN0IHVyYiogdXJiKQoreworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+cGlwZT0weCUwOHhcbiIsIHVyYi0+cGlwZSk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5zdGF0dXM9MHglMDh4XG4iLCB1cmItPnN0YXR1cyk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT50cmFuc2Zlcl9mbGFncz0weCUwOHhcbiIsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+dHJhbnNmZXJfYnVmZmVyPTB4JTA4eFxuIiwgKFVJTlQpdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aD0weCUwOHhcbiIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5hY3R1YWxfbGVuZ3RoPTB4JTA4eFxuIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmJhbmR3aWR0aD0weCUwOHhcbiIsIHVyYi0+YmFuZHdpZHRoKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnNldHVwX3BhY2tldChjdGwpPTB4JTA4eFxuIiwgKFVJTlQpdXJiLT5zZXR1cF9wYWNrZXQpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+c3RhcnRfZnJhbWUoaXNvL2lycSk9MHglMDh4XG4iLCB1cmItPnN0YXJ0X2ZyYW1lKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmludGVydmFsKGlycSk9MHglMDh4XG4iLCB1cmItPmludGVydmFsKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmVycm9yX2NvdW50KGlzbyk9MHglMDh4XG4iLCB1cmItPmVycm9yX2NvdW50KTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnRpbWVvdXQ9MHglMDh4XG4iLCB1cmItPnRpbWVvdXQpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+Y29udGV4dD0weCUwOHhcbiIsIChVSU5UKXVyYi0+Y29udGV4dCk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5jb21wbGV0ZT0weCUwOHhcbiIsIChVSU5UKXVyYi0+Y29tcGxldGUpOworfQorI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHN1Ym1pdF9yeF91cmIKKyoKKyogTGlzdGVuIGZvciBpbnB1dCBkYXRhIG9uIHRoZSBCVUxLLUlOIHBpcGUuIElmIHRoZSBwaXBlIGhhcworKiBzdGFsbGVkIHRoZW4gc2NoZWR1bGUgaXQgdG8gYmUgcmVzZXQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3QKKyoJbWVtZmxhZ3MJbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKKyoKKyogUmV0dXJuczoKKyoJZXJyb3IgY29kZSBmcm9tIHN1Ym1pc3Npb24KKyoKKyogQ2FsbCBjb250ZXh0OgorKglBbnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorc3VibWl0X3J4X3VyYihoZmEzODR4X3QgKmh3LCBnZnBfdCBtZW1mbGFncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCByZXN1bHQ7CisKKwlEQkZFTlRFUjsKKworCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKGhmYTM4NHhfdXNiaW5fdCkpOworCWlmIChza2IgPT0gTlVMTCkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogUG9zdCB0aGUgSU4gdXJiICovCisJdXNiX2ZpbGxfYnVsa191cmIoJmh3LT5yeF91cmIsIGh3LT51c2IsCisJICAgICAgICAgICAgICBody0+ZW5kcF9pbiwKKwkgICAgICAgICAgICAgIHNrYi0+ZGF0YSwgc2l6ZW9mKGhmYTM4NHhfdXNiaW5fdCksCisJICAgICAgICAgICAgICBoZmEzODR4X3VzYmluX2NhbGxiYWNrLCBody0+d2xhbmRldik7CisKKwlody0+cnhfdXJiX3NrYiA9IHNrYjsKKworCXJlc3VsdCA9IC1FTk9MSU5LOworCWlmICggIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgJiYgIXRlc3RfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CisJCXJlc3VsdCA9IFNVQk1JVF9VUkIoJmh3LT5yeF91cmIsIG1lbWZsYWdzKTsKKworCQkvKiBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gcmVzZXQgdGhlIFJYIHBpcGUgKi8KKwkJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKKwkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHJ4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCSAgICAgICAgICAgICAgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkKKwkJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOworCQl9CisJfQorCisJLyogRG9uJ3QgbGVhayBtZW1vcnkgaWYgYW55dGhpbmcgc2hvdWxkIGdvIHdyb25nICovCisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJaHctPnJ4X3VyYl9za2IgPSBOVUxMOworCX0KKworIGRvbmU6CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBzdWJtaXRfdHhfdXJiCisqCisqIFByZXBhcmVzIGFuZCBzdWJtaXRzIHRoZSBVUkIgb2YgdHJhbnNtaXR0ZWQgZGF0YS4gSWYgdGhlCisqIHN1Ym1pc3Npb24gZmFpbHMgdGhlbiBpdCB3aWxsIHNjaGVkdWxlIHRoZSBvdXRwdXQgcGlwZSB0bworKiBiZSByZXNldC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdAorKgl0eF91cmIJCVVSQiBvZiBkYXRhIGZvciB0cmFubWlzc2lvbgorKgltZW1mbGFncwltZW1vcnkgYWxsb2NhdGlvbiBmbGFncworKgorKiBSZXR1cm5zOgorKgllcnJvciBjb2RlIGZyb20gc3VibWlzc2lvbgorKgorKiBDYWxsIGNvbnRleHQ6CisqCUFueQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitzdWJtaXRfdHhfdXJiKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCB1cmIgKnR4X3VyYiwgZ2ZwX3QgbWVtZmxhZ3MpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGh3LT53bGFuZGV2LT5uZXRkZXY7CisJaW50IHJlc3VsdDsKKworCURCRkVOVEVSOworCisJcmVzdWx0ID0gLUVOT0xJTks7CisJaWYgKCBuZXRpZl9ydW5uaW5nKG5ldGRldikgKSB7CisKKwkJaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJiAhdGVzdF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgKSB7CisJCQlyZXN1bHQgPSBTVUJNSVRfVVJCKHR4X3VyYiwgbWVtZmxhZ3MpOworCisJCQkvKiBUZXN0IHdoZXRoZXIgd2UgbmVlZCB0byByZXNldCB0aGUgVFggcGlwZSAqLworCQkJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKKwkJCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkJICAgICAgICAgICAgICAgICBuZXRkZXYtPm5hbWUpOworCQkJCXNldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncyk7CisJCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwkJCX0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsKKwkJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCQl9CisJCX0KKwl9CisKKwlEQkZFWElUOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM5NHhfdXNiX2RlZmVyCisqCisqIFRoZXJlIGFyZSBzb21lIHRoaW5ncyB0aGF0IHRoZSBVU0Igc3RhY2sgY2Fubm90IGRvIHdoaWxlCisqIGluIGludGVycnVwdCBjb250ZXh0LCBzbyB3ZSBhcnJhbmdlIHRoaXMgZnVuY3Rpb24gdG8gcnVuCisqIGluIHByb2Nlc3MgY29udGV4dC4KKyoKKyogQXJndW1lbnRzOgorKglodwlkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIChieSBkZXNpZ24pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYl9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCit7CisJaGZhMzg0eF90ICpodyA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaGZhMzg0eCwgdXNiX3dvcmspOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBody0+d2xhbmRldi0+bmV0ZGV2OworCisJREJGRU5URVI7CisKKwkvKiBEb24ndCBib3RoZXIgdHJ5aW5nIHRvIHJlc2V0IGFueXRoaW5nIGlmIHRoZSBwbHVnCisJICogaGFzIGJlZW4gcHVsbGVkIC4uLgorCSAqLworCWlmICggaHctPndsYW5kZXYtPmh3cmVtb3ZlZCApIHsKKwkJREJGRVhJVDsKKwkJcmV0dXJuOworCX0KKworCS8qIFJlY2VwdGlvbiBoYXMgc3RvcHBlZDogdHJ5IHRvIHJlc2V0IHRoZSBpbnB1dCBwaXBlICovCisJaWYgKHRlc3RfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CisJCWludCByZXQ7CisKKwkJdXNiX2tpbGxfdXJiKCZody0+cnhfdXJiKTsgIC8qIENhbm5vdCBiZSBob2xkaW5nIHNwaW5sb2NrISAqLworCisJCXJldCA9IHVzYl9jbGVhcl9oYWx0KGh3LT51c2IsIGh3LT5lbmRwX2luKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiRmFpbGVkIHRvIGNsZWFyIHJ4IHBpcGUgZm9yICVzOiBlcnI9JWRcbiIsCisJCQkgICAgICAgbmV0ZGV2LT5uYW1lLCByZXQpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgcnggcGlwZSByZXNldCBjb21wbGV0ZS5cbiIsCisJCQkgICAgICAgICAgICAgICAgIG5ldGRldi0+bmFtZSk7CisJCQljbGVhcl9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncyk7CisJCQlzZXRfYml0KFdPUktfUlhfUkVTVU1FLCAmaHctPnVzYl9mbGFncyk7CisJCX0KKwl9CisKKwkvKiBSZXN1bWUgcmVjZWl2aW5nIGRhdGEgYmFjayBmcm9tIHRoZSBkZXZpY2UuICovCisJaWYgKCB0ZXN0X2JpdChXT1JLX1JYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpICkgeworCQlpbnQgcmV0OworCisJCXJldCA9IHN1Ym1pdF9yeF91cmIoaHcsIEdGUF9LRVJORUwpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJGYWlsZWQgdG8gcmVzdW1lICVzIHJ4IHBpcGUuXG4iLCBuZXRkZXYtPm5hbWUpOworCQl9IGVsc2UgeworCQkJY2xlYXJfYml0KFdPUktfUlhfUkVTVU1FLCAmaHctPnVzYl9mbGFncyk7CisJCX0KKwl9CisKKwkvKiBUcmFuc21pc3Npb24gaGFzIHN0b3BwZWQ6IHRyeSB0byByZXNldCB0aGUgb3V0cHV0IHBpcGUgKi8KKwlpZiAodGVzdF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykpIHsKKwkJaW50IHJldDsKKworCQl1c2Jfa2lsbF91cmIoJmh3LT50eF91cmIpOworCQlyZXQgPSB1c2JfY2xlYXJfaGFsdChody0+dXNiLCBody0+ZW5kcF9vdXQpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJGYWlsZWQgdG8gY2xlYXIgdHggcGlwZSBmb3IgJXM6IGVycj0lZFxuIiwKKwkJCSAgICAgICBuZXRkZXYtPm5hbWUsIHJldCk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlcyB0eCBwaXBlIHJlc2V0IGNvbXBsZXRlLlxuIiwKKwkJCSAgICAgICAgICAgICAgICAgbmV0ZGV2LT5uYW1lKTsKKwkJCWNsZWFyX2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKTsKKwkJCXNldF9iaXQoV09SS19UWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKTsKKworCQkJLyogU3RvcHBpbmcgdGhlIEJVTEstT1VUIHBpcGUgYWxzbyBibG9ja2VkCisJCQkgKiB1cyBmcm9tIHNlbmRpbmcgYW55IG1vcmUgQ1RMWCBVUkJzLCBzbworCQkJICogd2UgbmVlZCB0byByZS1ydW4gb3VyIHF1ZXVlIC4uLgorCQkJICovCisJCQloZmEzODR4X3VzYmN0bHhxX3J1bihodyk7CisJCX0KKwl9CisKKwkvKiBSZXN1bWUgdHJhbnNtaXR0aW5nLiAqLworCWlmICggdGVzdF9hbmRfY2xlYXJfYml0KFdPUktfVFhfUkVTVU1FLCAmaHctPnVzYl9mbGFncykgKSB7CisJCXA4MDIxMW5ldGRldl93YWtlX3F1ZXVlKGh3LT53bGFuZGV2KTsKKwl9CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NyZWF0ZQorKgorKiBTZXRzIHVwIHRoZSBoZmEzODR4X3QgZGF0YSBzdHJ1Y3R1cmUgZm9yIHVzZS4gIE5vdGUgdGhpcworKiBkb2VzIF9ub3RfIGludGlhbGl6ZSB0aGUgYWN0dWFsIGhhcmR3YXJlLCBqdXN0IHRoZSBkYXRhIHN0cnVjdHVyZXMKKyogd2UgdXNlIHRvIGtlZXAgdHJhY2sgb2YgaXRzIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWlycQkJZGV2aWNlIGlycSBudW1iZXIKKyoJaW9iYXNlCQlpL28gYmFzZSBhZGRyZXNzIGZvciByZWdpc3RlciBhY2Nlc3MKKyoJbWVtYmFzZQkJbWVtb3J5IGJhc2UgYWRkcmVzcyBmb3IgcmVnaXN0ZXIgYWNjZXNzCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAoraGZhMzg0eF9jcmVhdGUoIGhmYTM4NHhfdCAqaHcsIHN0cnVjdCB1c2JfZGV2aWNlICp1c2IpCit7CisJREJGRU5URVI7CisKKwltZW1zZXQoaHcsIDAsIHNpemVvZihoZmEzODR4X3QpKTsKKwlody0+dXNiID0gdXNiOworCisJLyogc2V0IHVwIHRoZSBlbmRwb2ludHMgKi8KKwlody0+ZW5kcF9pbiA9IHVzYl9yY3ZidWxrcGlwZSh1c2IsIDEpOworCWh3LT5lbmRwX291dCA9IHVzYl9zbmRidWxrcGlwZSh1c2IsIDIpOworCisJLyogU2V0IHVwIHRoZSB3YWl0cSAqLworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmh3LT5jbWRxKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgcXVldWUgKi8KKwlzcGluX2xvY2tfaW5pdCgmaHctPmN0bHhxLmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZody0+Y3RseHEucGVuZGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmh3LT5jdGx4cS5hY3RpdmUpOworCUlOSVRfTElTVF9IRUFEKCZody0+Y3RseHEuY29tcGxldGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmh3LT5jdGx4cS5yZWFwYWJsZSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBhdXRoZW50aWNhdGlvbiBxdWV1ZSAqLworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmh3LT5hdXRocSk7CisKKwl0YXNrbGV0X2luaXQoJmh3LT5yZWFwZXJfYmgsCisJICAgICAgICAgICAgIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzaywKKwkgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaHcpOworCXRhc2tsZXRfaW5pdCgmaHctPmNvbXBsZXRpb25fYmgsCisJICAgICAgICAgICAgIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0aW9uX3Rhc2ssCisJICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWh3KTsKKwlJTklUX1dPUksyKCZody0+bGlua19iaCwgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIpOworCUlOSVRfV09SSzIoJmh3LT51c2Jfd29yaywgaGZhMzg0eF91c2JfZGVmZXIpOworCisJaW5pdF90aW1lcigmaHctPnRocm90dGxlKTsKKwlody0+dGhyb3R0bGUuZnVuY3Rpb24gPSBoZmEzODR4X3VzYl90aHJvdHRsZWZuOworCWh3LT50aHJvdHRsZS5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaHc7CisKKwlpbml0X3RpbWVyKCZody0+cmVzcHRpbWVyKTsKKwlody0+cmVzcHRpbWVyLmZ1bmN0aW9uID0gaGZhMzg0eF91c2JjdGx4X3Jlc3B0aW1lcmZuOworCWh3LT5yZXNwdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWh3OworCisJaW5pdF90aW1lcigmaHctPnJlcXRpbWVyKTsKKwlody0+cmVxdGltZXIuZnVuY3Rpb24gPSBoZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbjsKKwlody0+cmVxdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWh3OworCisJdXNiX2luaXRfdXJiKCZody0+cnhfdXJiKTsKKwl1c2JfaW5pdF91cmIoJmh3LT50eF91cmIpOworCXVzYl9pbml0X3VyYigmaHctPmN0bHhfdXJiKTsKKworCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQ7CisJaHctPnN0YXRlID0gSEZBMzg0eF9TVEFURV9JTklUOworCisgICAgICAgIElOSVRfV09SSzIoJmh3LT5jb21tc3F1YWxfYmgsIHByaXNtMnN0YV9jb21tc3F1YWxfZGVmZXIpOworCWluaXRfdGltZXIoJmh3LT5jb21tc3F1YWxfdGltZXIpOworCWh3LT5jb21tc3F1YWxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBodzsKKwlody0+Y29tbXNxdWFsX3RpbWVyLmZ1bmN0aW9uID0gcHJpc20yc3RhX2NvbW1zcXVhbF90aW1lcjsKKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZGVzdHJveQorKgorKiBQYXJ0bmVyIHRvIGhmYTM4NHhfY3JlYXRlKCkuICBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgaHcKKyogc3RydWN0dXJlIHNvIHRoYXQgaXQgY2FuIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIgdXNpbmcgYSBzaW1wbGUKKyoga2ZyZWUuICBDdXJyZW50bHksIHRoaXMgZnVuY3Rpb24gaXMganVzdCBhIHBsYWNlaG9sZGVyLiAgSWYsIGF0IHNvbWUKKyogcG9pbnQgaW4gdGhlIGZ1dHVyZSwgYW4gaHcgaW4gdGhlICdzaHV0ZG93bicgc3RhdGUgcmVxdWlyZXMgYSAnZGVlcCcKKyoga2ZyZWUsIHRoaXMgaXMgd2hlcmUgaXQgc2hvdWxkIGJlIGRvbmUuICBOb3RlIHRoYXQgaWYgdGhpcyBmdW5jdGlvbgorKiBpcyBjYWxsZWQgb24gYSBfcnVubmluZ18gaHcgc3RydWN0dXJlLCB0aGUgZHJ2cl9zdG9wKCkgZnVuY3Rpb24gaXMKKyogY2FsbGVkLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcsIHRoaXMgZnVuY3Rpb24gaXMgbm90IGFsbG93ZWQgdG8gZmFpbC4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAoraGZhMzg0eF9kZXN0cm95KCBoZmEzODR4X3QgKmh3KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlEQkZFTlRFUjsKKworCWlmICggaHctPnN0YXRlID09IEhGQTM4NHhfU1RBVEVfUlVOTklORyApIHsKKwkJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOworCX0KKwlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX1BSRUlOSVQ7CisKKwlpZiAoaHctPnNjYW5yZXN1bHRzKSB7CisJCWtmcmVlKGh3LT5zY2FucmVzdWx0cyk7CisJCWh3LT5zY2FucmVzdWx0cyA9IE5VTEw7CisJfQorCisJLyogTm93IHRvIGNsZWFuIG91dCB0aGUgYXV0aCBxdWV1ZSAqLworICAgICAgICB3aGlsZSAoIChza2IgPSBza2JfZGVxdWV1ZSgmaHctPmF1dGhxKSkgKSB7CisgICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYihza2IpOworICAgICAgICB9CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgaGZhMzg0eF91c2JjdGx4X3QqIHVzYmN0bHhfYWxsb2Modm9pZCkKK3sKKwloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKKworCWN0bHggPSBrbWFsbG9jKHNpemVvZigqY3RseCksIGluX2ludGVycnVwdCgpID8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUwpOworCWlmIChjdGx4ICE9IE5VTEwpCisJeworCQltZW1zZXQoY3RseCwgMCwgc2l6ZW9mKCpjdGx4KSk7CisJCWluaXRfY29tcGxldGlvbigmY3RseC0+ZG9uZSk7CisJfQorCisJcmV0dXJuIGN0bHg7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50Cit1c2JjdGx4X2dldF9zdGF0dXMoY29uc3QgaGZhMzg0eF91c2JfY21kcmVzcF90ICpjbWRyZXNwLAorICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfY21kcmVzdWx0X3QgKnJlc3VsdCkKK3sKKwlEQkZFTlRFUjsKKworCXJlc3VsdC0+c3RhdHVzID0gaGZhMzg0eDJob3N0XzE2KGNtZHJlc3AtPnN0YXR1cyk7CisJcmVzdWx0LT5yZXNwMCA9IGhmYTM4NHgyaG9zdF8xNihjbWRyZXNwLT5yZXNwMCk7CisJcmVzdWx0LT5yZXNwMSA9IGhmYTM4NHgyaG9zdF8xNihjbWRyZXNwLT5yZXNwMSk7CisJcmVzdWx0LT5yZXNwMiA9IGhmYTM4NHgyaG9zdF8xNihjbWRyZXNwLT5yZXNwMik7CisKKwlXTEFOX0xPR19ERUJVRyg0LCAiY21kcmVzdWx0OnN0YXR1cz0weCUwNHggIgorCSAgICAgICAgICAgICAgICAgICJyZXNwMD0weCUwNHggcmVzcDE9MHglMDR4IHJlc3AyPTB4JTA0eFxuIiwKKwkgICAgICAgICAgICAgICAgcmVzdWx0LT5zdGF0dXMsCisJICAgICAgICAgICAgICAgIHJlc3VsdC0+cmVzcDAsCisJICAgICAgICAgICAgICAgIHJlc3VsdC0+cmVzcDEsCisJICAgICAgICAgICAgICAgIHJlc3VsdC0+cmVzcDIpOworCisJREJGRVhJVDsKKwlyZXR1cm4gKHJlc3VsdC0+c3RhdHVzICYgSEZBMzg0eF9TVEFUVVNfUkVTVUxUKTsKK30KKworc3RhdGljIHZvaWQKK3VzYmN0bHhfZ2V0X3JyaWRyZXN1bHQoY29uc3QgaGZhMzg0eF91c2JfcnJpZHJlc3BfdCAqcnJpZHJlc3AsCisgICAgICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfcnJpZHJlc3VsdF90ICpyZXN1bHQpCit7CisJREJGRU5URVI7CisKKwlyZXN1bHQtPnJpZCA9IGhmYTM4NHgyaG9zdF8xNihycmlkcmVzcC0+cmlkKTsKKwlyZXN1bHQtPnJpZGRhdGEgPSBycmlkcmVzcC0+ZGF0YTsKKwlyZXN1bHQtPnJpZGRhdGFfbGVuID0gKChoZmEzODR4Mmhvc3RfMTYocnJpZHJlc3AtPmZybWxlbikgLSAxKSAqIDIpOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogQ29tcGxldG9yIG9iamVjdDoKKyogVGhpcyBjb21wbGV0b3IgbXVzdCBiZSBwYXNzZWQgdG8gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoKQorKiB3aGVuIHByb2Nlc3NpbmcgYSBDVExYIHRoYXQgcmV0dXJucyBhIGhmYTM4NHhfY21kcmVzdWx0X3Qgc3RydWN0dXJlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgdXNiY3RseF9jbWRfY29tcGxldG9yCit7CisJdXNiY3RseF9jb21wbGV0b3JfdAloZWFkOworCisJY29uc3QgaGZhMzg0eF91c2JfY21kcmVzcF90CSpjbWRyZXNwOworCWhmYTM4NHhfY21kcmVzdWx0X3QJKnJlc3VsdDsKK307Cit0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X2NtZF9jb21wbGV0b3IgdXNiY3RseF9jbWRfY29tcGxldG9yX3Q7CisKK3N0YXRpYyBpbnQgdXNiY3RseF9jbWRfY29tcGxldG9yX2ZuKHVzYmN0bHhfY29tcGxldG9yX3QgKmhlYWQpCit7CisJdXNiY3RseF9jbWRfY29tcGxldG9yX3QgKmNvbXBsZXRlID0gKHVzYmN0bHhfY21kX2NvbXBsZXRvcl90KiloZWFkOworCXJldHVybiB1c2JjdGx4X2dldF9zdGF0dXMoY29tcGxldGUtPmNtZHJlc3AsIGNvbXBsZXRlLT5yZXN1bHQpOworfQorCitzdGF0aWMgaW5saW5lIHVzYmN0bHhfY29tcGxldG9yX3QqCitpbml0X2NtZF9jb21wbGV0b3IodXNiY3RseF9jbWRfY29tcGxldG9yX3QgKmNvbXBsZXRvciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBoZmEzODR4X3VzYl9jbWRyZXNwX3QgKmNtZHJlc3AsCisgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9jbWRyZXN1bHRfdCAqcmVzdWx0KQoreworCWNvbXBsZXRvci0+aGVhZC5jb21wbGV0ZSA9IHVzYmN0bHhfY21kX2NvbXBsZXRvcl9mbjsKKwljb21wbGV0b3ItPmNtZHJlc3AgPSBjbWRyZXNwOworCWNvbXBsZXRvci0+cmVzdWx0ID0gcmVzdWx0OworCXJldHVybiAmKGNvbXBsZXRvci0+aGVhZCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBDb21wbGV0b3Igb2JqZWN0OgorKiBUaGlzIGNvbXBsZXRvciBtdXN0IGJlIHBhc3NlZCB0byBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYygpCisqIHdoZW4gcHJvY2Vzc2luZyBhIENUTFggdGhhdCByZWFkcyBhIFJJRC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RydWN0IHVzYmN0bHhfcnJpZF9jb21wbGV0b3IKK3sKKwl1c2JjdGx4X2NvbXBsZXRvcl90CWhlYWQ7CisKKwljb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90CSpycmlkcmVzcDsKKwl2b2lkCQkJKnJpZGRhdGE7CisJVUlOVAkJCXJpZGRhdGFsZW47Cit9OwordHlwZWRlZiBzdHJ1Y3QgdXNiY3RseF9ycmlkX2NvbXBsZXRvciB1c2JjdGx4X3JyaWRfY29tcGxldG9yX3Q7CisKK3N0YXRpYyBpbnQgdXNiY3RseF9ycmlkX2NvbXBsZXRvcl9mbih1c2JjdGx4X2NvbXBsZXRvcl90ICpoZWFkKQoreworCXVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdCAqY29tcGxldGUgPSAodXNiY3RseF9ycmlkX2NvbXBsZXRvcl90KiloZWFkOworCWhmYTM4NHhfcnJpZHJlc3VsdF90IHJyaWRyZXN1bHQ7CisKKwl1c2JjdGx4X2dldF9ycmlkcmVzdWx0KGNvbXBsZXRlLT5ycmlkcmVzcCwgJnJyaWRyZXN1bHQpOworCisJLyogVmFsaWRhdGUgdGhlIGxlbmd0aCwgbm90ZSBib2R5IGxlbiBjYWxjdWxhdGlvbiBpbiBieXRlcyAqLworCWlmICggcnJpZHJlc3VsdC5yaWRkYXRhX2xlbiAhPSBjb21wbGV0ZS0+cmlkZGF0YWxlbiApIHsKKwkJV0xBTl9MT0dfV0FSTklORygKKwkJCSJSSUQgbGVuIG1pc21hdGNoLCByaWQ9MHglMDR4IGhsZW49JWQgZndsZW49JWRcbiIsCisJCSAgICAgICAgcnJpZHJlc3VsdC5yaWQsCisJCSAgICAgICAgY29tcGxldGUtPnJpZGRhdGFsZW4sCisJCSAgICAgICAgcnJpZHJlc3VsdC5yaWRkYXRhX2xlbik7CisJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwltZW1jcHkoY29tcGxldGUtPnJpZGRhdGEsCisJICAgICAgIHJyaWRyZXN1bHQucmlkZGF0YSwKKwkgICAgICAgY29tcGxldGUtPnJpZGRhdGFsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVzYmN0bHhfY29tcGxldG9yX3QqCitpbml0X3JyaWRfY29tcGxldG9yKHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdCAqY29tcGxldG9yLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90ICpycmlkcmVzcCwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmlkZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgVUlOVCByaWRkYXRhbGVuKQoreworCWNvbXBsZXRvci0+aGVhZC5jb21wbGV0ZSA9IHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfZm47CisJY29tcGxldG9yLT5ycmlkcmVzcCA9IHJyaWRyZXNwOworCWNvbXBsZXRvci0+cmlkZGF0YSA9IHJpZGRhdGE7CisJY29tcGxldG9yLT5yaWRkYXRhbGVuID0gcmlkZGF0YWxlbjsKKwlyZXR1cm4gJihjb21wbGV0b3ItPmhlYWQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogQ29tcGxldG9yIG9iamVjdDoKKyogSW50ZXJwcmV0cyB0aGUgcmVzdWx0cyBvZiBhIHN5bmNocm9ub3VzIFJJRC13cml0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHVzYmN0bHhfY21kX2NvbXBsZXRvcl90IHVzYmN0bHhfd3JpZF9jb21wbGV0b3JfdDsKKyNkZWZpbmUgaW5pdF93cmlkX2NvbXBsZXRvciAgaW5pdF9jbWRfY29tcGxldG9yCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBDb21wbGV0b3Igb2JqZWN0OgorKiBJbnRlcnByZXRzIHRoZSByZXN1bHRzIG9mIGEgc3luY2hyb25vdXMgbWVtb3J5LXdyaXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgdXNiY3RseF9jbWRfY29tcGxldG9yX3QgdXNiY3RseF93bWVtX2NvbXBsZXRvcl90OworI2RlZmluZSBpbml0X3dtZW1fY29tcGxldG9yICBpbml0X2NtZF9jb21wbGV0b3IKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIENvbXBsZXRvciBvYmplY3Q6CisqIEludGVycHJldHMgdGhlIHJlc3VsdHMgb2YgYSBzeW5jaHJvbm91cyBtZW1vcnktcmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgdXNiY3RseF9ybWVtX2NvbXBsZXRvcgoreworICAgICAgICB1c2JjdGx4X2NvbXBsZXRvcl90ICAgICAgICAgICBoZWFkOworCisgICAgICAgIGNvbnN0IGhmYTM4NHhfdXNiX3JtZW1yZXNwX3QgICpybWVtcmVzcDsKKyAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGE7CisgICAgICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbjsKK307Cit0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X3JtZW1fY29tcGxldG9yIHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdDsKKworc3RhdGljIGludCB1c2JjdGx4X3JtZW1fY29tcGxldG9yX2ZuKHVzYmN0bHhfY29tcGxldG9yX3QgKmhlYWQpCit7CisJdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90ICpjb21wbGV0ZSA9ICh1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QqKWhlYWQ7CisKKwlXTEFOX0xPR19ERUJVRyg0LCJybWVtcmVzcDpsZW49JWRcbiIsIGNvbXBsZXRlLT5ybWVtcmVzcC0+ZnJtbGVuKTsKKwltZW1jcHkoY29tcGxldGUtPmRhdGEsIGNvbXBsZXRlLT5ybWVtcmVzcC0+ZGF0YSwgY29tcGxldGUtPmxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdXNiY3RseF9jb21wbGV0b3JfdCoKK2luaXRfcm1lbV9jb21wbGV0b3IodXNiY3RseF9ybWVtX2NvbXBsZXRvcl90ICpjb21wbGV0b3IsCisgICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfdXNiX3JtZW1yZXNwX3QgKnJtZW1yZXNwLAorICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAgICBVSU5UIGxlbikKK3sKKwljb21wbGV0b3ItPmhlYWQuY29tcGxldGUgPSB1c2JjdGx4X3JtZW1fY29tcGxldG9yX2ZuOworCWNvbXBsZXRvci0+cm1lbXJlc3AgPSBybWVtcmVzcDsKKwljb21wbGV0b3ItPmRhdGEgPSBkYXRhOworCWNvbXBsZXRvci0+bGVuID0gbGVuOworCXJldHVybiAmKGNvbXBsZXRvci0+aGVhZCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NiX3N0YXR1cworKgorKiBDdGx4X2NvbXBsZXRlIGhhbmRsZXIgZm9yIGFzeW5jIENNRCB0eXBlIGNvbnRyb2wgZXhjaGFuZ2VzLgorKiBtYXJrIHRoZSBodyBzdHJ1Y3QgYXMgc3VjaC4KKyoKKyogTm90ZTogSWYgdGhlIGhhbmRsaW5nIGlzIGNoYW5nZWQgaGVyZSwgaXQgc2hvdWxkIHByb2JhYmx5IGJlCisqICAgICAgIGNoYW5nZWQgaW4gZG9jbWQgYXMgd2VsbC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJaHcgc3RydWN0CisqCWN0bHgJCWNvbXBsZXRlZCBDVExYCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAoraGZhMzg0eF9jYl9zdGF0dXMoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCit7CisJREJGRU5URVI7CisKKwlpZiAoIGN0bHgtPnVzZXJjYiAhPSBOVUxMICkgeworCQloZmEzODR4X2NtZHJlc3VsdF90IGNtZHJlc3VsdDsKKworCQlpZiAoY3RseC0+c3RhdGUgIT0gQ1RMWF9DT01QTEVURSkgeworCQkJbWVtc2V0KCZjbWRyZXN1bHQsIDAsIHNpemVvZihjbWRyZXN1bHQpKTsKKwkJCWNtZHJlc3VsdC5zdGF0dXMgPSBIRkEzODR4X1NUQVRVU19SRVNVTFRfU0VUKEhGQTM4NHhfQ01EX0VSUik7CisJCX0gZWxzZSB7CisJCQl1c2JjdGx4X2dldF9zdGF0dXMoJmN0bHgtPmluYnVmLmNtZHJlc3AsICZjbWRyZXN1bHQpOworCQl9CisKKwkJY3RseC0+dXNlcmNiKGh3LCAmY21kcmVzdWx0LCBjdGx4LT51c2VyY2JfZGF0YSk7CisJfQorCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jYl9ycmlkCisqCisqIENUTFggY29tcGxldGlvbiBoYW5kbGVyIGZvciBhc3luYyBSUklEIHR5cGUgY29udHJvbCBleGNoYW5nZXMuCisqCisqIE5vdGU6IElmIHRoZSBoYW5kbGluZyBpcyBjaGFuZ2VkIGhlcmUsIGl0IHNob3VsZCBwcm9iYWJseSBiZQorKiAgICAgICBjaGFuZ2VkIGluIGRvcnJpZCBhcyB3ZWxsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlodyBzdHJ1Y3QKKyoJY3RseAkJY29tcGxldGVkIENUTFgKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X2NiX3JyaWQoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCit7CisJREJGRU5URVI7CisKKwlpZiAoIGN0bHgtPnVzZXJjYiAhPSBOVUxMICkgeworCQloZmEzODR4X3JyaWRyZXN1bHRfdCBycmlkcmVzdWx0OworCisJCWlmIChjdGx4LT5zdGF0ZSAhPSBDVExYX0NPTVBMRVRFKSB7CisJCQltZW1zZXQoJnJyaWRyZXN1bHQsIDAsIHNpemVvZihycmlkcmVzdWx0KSk7CisJCQlycmlkcmVzdWx0LnJpZCA9IGhmYTM4NHgyaG9zdF8xNihjdGx4LT5vdXRidWYucnJpZHJlcS5yaWQpOworCQl9IGVsc2UgeworCQkJdXNiY3RseF9nZXRfcnJpZHJlc3VsdCgmY3RseC0+aW5idWYucnJpZHJlc3AsICZycmlkcmVzdWx0KTsKKwkJfQorCisJCWN0bHgtPnVzZXJjYihodywgJnJyaWRyZXN1bHQsIGN0bHgtPnVzZXJjYl9kYXRhKTsKKwl9CisKKwlEQkZFWElUOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb2NtZF93YWl0KGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQpCit7CisJcmV0dXJuIGhmYTM4NHhfZG9jbWQoaHcsIERPV0FJVCwgY21kLCBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG9jbWRfYXN5bmMoaGZhMzg0eF90ICpodywKKyAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCwKKyAgICAgICAgICAgICAgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLAorICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCit7CisJcmV0dXJuIGhmYTM4NHhfZG9jbWQoaHcsIERPQVNZTkMsIGNtZCwKKwkgICAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RvcnJpZF93YWl0KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByaWQsIHZvaWQgKnJpZGRhdGEsIFVJTlQgcmlkZGF0YWxlbikKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3JyaWQoaHcsIERPV0FJVCwKKwkgICAgICAgICAgICAgICAgICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG9ycmlkX2FzeW5jKGhmYTM4NHhfdCAqaHcsCisgICAgICAgICAgICAgICAgICAgICBVSU5UMTYgcmlkLCB2b2lkICpyaWRkYXRhLCBVSU5UIHJpZGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCisgICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJjYl9kYXRhKQoreworCXJldHVybiBoZmEzODR4X2RvcnJpZChodywgRE9BU1lOQywKKwkgICAgICAgICAgICAgICAgICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2Rvd3JpZF93YWl0KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByaWQsIHZvaWQgKnJpZGRhdGEsIFVJTlQgcmlkZGF0YWxlbikKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3dyaWQoaHcsIERPV0FJVCwKKwkgICAgICAgICAgICAgICAgICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG93cmlkX2FzeW5jKGhmYTM4NHhfdCAqaHcsCisgICAgICAgICAgICAgICAgICAgICBVSU5UMTYgcmlkLCB2b2lkICpyaWRkYXRhLCBVSU5UIHJpZGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCisgICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJjYl9kYXRhKQoreworCXJldHVybiBoZmEzODR4X2Rvd3JpZChodywgRE9BU1lOQywKKwkgICAgICAgICAgICAgICAgICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2Rvcm1lbV93YWl0KGhmYTM4NHhfdCAqaHcsCisgICAgICAgICAgICAgICAgICAgIFVJTlQxNiBwYWdlLCBVSU5UMTYgb2Zmc2V0LCB2b2lkICpkYXRhLCBVSU5UIGxlbikKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3JtZW0oaHcsIERPV0FJVCwKKwkgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCisJICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb3JtZW1fYXN5bmMoaGZhMzg0eF90ICpodywKKyAgICAgICAgICAgICAgICAgICAgIFVJTlQxNiBwYWdlLCBVSU5UMTYgb2Zmc2V0LCB2b2lkICpkYXRhLCBVSU5UIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKKyAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCit7CisJcmV0dXJuIGhmYTM4NHhfZG9ybWVtKGh3LCBET0FTWU5DLAorCSAgICAgICAgICAgICAgICAgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwKKwkgICAgICAgICAgICAgICAgICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb3dtZW1fd2FpdCgKKyAgICAgICAgaGZhMzg0eF90ICpodywKKyAgICAgICAgVUlOVDE2ICBwYWdlLAorICAgICAgICBVSU5UMTYgIG9mZnNldCwKKyAgICAgICAgdm9pZCAgICAqZGF0YSwKKyAgICAgICAgVUlOVCAgICBsZW4pCit7CisJcmV0dXJuIGhmYTM4NHhfZG93bWVtKGh3LCBET1dBSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCisJICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG93bWVtX2FzeW5jKAorICAgICAgICBoZmEzODR4X3QgKmh3LAorICAgICAgICBVSU5UMTYgIHBhZ2UsCisgICAgICAgIFVJTlQxNiAgb2Zmc2V0LAorICAgICAgICB2b2lkICAgICpkYXRhLAorICAgICAgICBVSU5UICAgIGxlbiwKKyAgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLAorICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKKyAgICAgICAgdm9pZCAgICAqdXNlcmNiX2RhdGEpCit7CisJcmV0dXJuIGhmYTM4NHhfZG93bWVtKGh3LCBET0FTWU5DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UsIG9mZnNldCwgZGF0YSwgbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZQorKgorKiBJc3N1ZXMgdGhlIGluaXRpYWxpemUgY29tbWFuZCBhbmQgc2V0cyB0aGUgaHctPnN0YXRlIGJhc2VkCisqIG9uIHRoZSByZXN1bHQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitoZmEzODR4X2NtZF9pbml0aWFsaXplKGhmYTM4NHhfdCAqaHcpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaW50CWk7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRENPREVfSU5JVDsKKwljbWQucGFybTAgPSAwOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisKKworCVdMQU5fTE9HX0RFQlVHKDMsImNtZHJlc3AuaW5pdDogIgorCQkic3RhdHVzPTB4JTA0eCwgcmVzcDA9MHglMDR4LCAiCisJCSJyZXNwMT0weCUwNHgsIHJlc3AyPTB4JTA0eFxuIiwKKwkJY21kLnJlc3VsdC5zdGF0dXMsCisJCWNtZC5yZXN1bHQucmVzcDAsCisJCWNtZC5yZXN1bHQucmVzcDEsCisJCWNtZC5yZXN1bHQucmVzcDIpOworCWlmICggcmVzdWx0ID09IDAgKSB7CisJCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9OVU1QT1JUU19NQVg7IGkrKykgeworCQkJaHctPnBvcnRfZW5hYmxlZFtpXSA9IDA7CisJCX0KKwl9CisKKyAgICAgICAgaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfZGlzYWJsZQorKgorKiBJc3N1ZXMgdGhlIGRpc2FibGUgY29tbWFuZCB0byBzdG9wIGNvbW11bmljYXRpb25zIG9uIG9uZSBvZgorKiB0aGUgTUFDcyAncG9ydHMnLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlciAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfZGlzYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfRElTQUJMRSkgfAorCQkgIEhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKG1hY3BvcnQpOworCWNtZC5wYXJtMCA9IDA7CisJY21kLnBhcm0xID0gMDsKKwljbWQucGFybTIgPSAwOworCisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfZW5hYmxlCisqCisqIElzc3VlcyB0aGUgZW5hYmxlIGNvbW1hbmQgdG8gZW5hYmxlIGNvbW11bmljYXRpb25zIG9uIG9uZSBvZgorKiB0aGUgTUFDcyAncG9ydHMnLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlcgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9lbmFibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0VOQUJMRSkgfAorCQkgIEhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKG1hY3BvcnQpOworCWNtZC5wYXJtMCA9IDA7CisJY21kLnBhcm0xID0gMDsKKwljbWQucGFybTIgPSAwOworCisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jbWRfbm90aWZ5CisqCisqIFNlbmRzIGFuIGluZm8gZnJhbWUgdG8gdGhlIGZpcm13YXJlIHRvIGFsdGVyIHRoZSBiZWhhdmlvcgorKiBvZiB0aGUgZi93IGFzeW5jaCBwcm9jZXNzZXMuICBDYW4gb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgTUFDCisqIGlzIGluIHRoZSBlbmFibGVkIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCXJlY2xhaW0JCVswfDFdIGluZGljYXRlcyB3aGV0aGVyIHRoZSBnaXZlbiBGSUQgd2lsbAorKgkJCWJlIGhhbmRlZCBiYWNrICh2aWEgQWxsb2MgZXZlbnQpIGZvciByZXVzZS4KKyoJCQkoaG9zdCBvcmRlcikKKyoJZmlkCQlGSUQgb2YgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGZyYW1lIHRoYXQgd2FzCisqCQkJcHJldmlvdXNseSBjb3BpZWQgdG8gTUFDIG1lbW9yeSB2aWEgdGhlIGJhcC4KKyoJCQkoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCWh3LT5yZXNwMCB3aWxsIGNvbnRhaW4gdGhlIEZJRCBiZWluZyB1c2VkIGJ5IGFzeW5jIG5vdGlmeQorKglwcm9jZXNzLiAgSWYgcmVjbGFpbT09MCwgcmVzcDAgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgZmlkCisqCWFyZ3VtZW50LiAgSWYgcmVjbGFpbT09MSwgcmVzcDAgd2lsbCBiZSB0aGUgZGlmZmVyZW50LgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX25vdGlmeShoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmVjbGFpbSwgVUlOVDE2IGZpZCwKKwkJICAgICAgIHZvaWQgKmJ1ZiwgVUlOVDE2IGxlbikKK3sKKyNpZiAwCisJaW50CXJlc3VsdCA9IDA7CisJVUlOVDE2CWNtZDsKKwlEQkZFTlRFUjsKKwljbWQgPQlIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfTk9USUZZKSB8CisJCUhGQTM4NHhfQ01EX1JFQ0xfU0VUKHJlY2xhaW0pOworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgY21kKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorcmV0dXJuIDA7Cit9CisKKworI2lmIDAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9pbnF1aXJ5CisqCisqIFJlcXVlc3RzIGFuIGluZm8gZnJhbWUgZnJvbSB0aGUgZmlybXdhcmUuICBUaGUgaW5mbyBmcmFtZSB3aWxsCisqIGJlIGRlbGl2ZXJlZCBhc3luY2hyb25vdXNseSB2aWEgdGhlIEluZm8gZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJZmlkCQlGSUQgb2YgdGhlIGluZm8gZnJhbWUgcmVxdWVzdGVkLiAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfaW5xdWlyeShoZmEzODR4X3QgKmh3LCBVSU5UMTYgZmlkKQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9JTlEpOworCWNtZC5wYXJtMCA9IDA7CisJY21kLnBhcm0xID0gMDsKKwljbWQucGFybTIgPSAwOworCisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9tb25pdG9yCisqCisqIEVuYWJsZXMgdGhlICdtb25pdG9yIG1vZGUnIG9mIHRoZSBNQUMuICBIZXJlJ3MgdGhlIGRlc2NyaXB0aW9uIG9mCisqIG1vbml0b3IgbW9kZSB0aGF0IEkndmUgcmVjZWl2ZWQgdGh1cyBmYXI6CisqCisqICAiVGhlICJtb25pdG9yIG1vZGUiIG9mIG9wZXJhdGlvbiBpcyB0aGF0IHRoZSBNQUMgcGFzc2VzIGFsbAorKiAgZnJhbWVzIGZvciB3aGljaCB0aGUgUExDUCBjaGVja3MgYXJlIGNvcnJlY3QuIEFsbCByZWNlaXZlZAorKiAgTVBEVXMgYXJlIHBhc3NlZCB0byB0aGUgaG9zdCB3aXRoIE1BQyBQb3J0ID0gNywgd2l0aCBhCisqICByZWNlaXZlIHN0YXR1cyBvZiBnb29kLCBGQ1MgZXJyb3IsIG9yIHVuZGVjcnlwdGFibGUuIFBhc3NpbmcKKyogIGNlcnRhaW4gTVBEVXMgaXMgYSB2aW9sYXRpb24gb2YgdGhlIDgwMi4xMSBzdGFuZGFyZCwgYnV0IHVzZWZ1bAorKiAgZm9yIGEgZGVidWdnaW5nIHRvb2wuIiAgTm9ybWFsIGNvbW11bmljYXRpb24gaXMgbm90IHBvc3NpYmxlCisqICB3aGlsZSBtb25pdG9yIG1vZGUgaXMgZW5hYmxlZC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgllbmFibGUJCWEgY29kZSAoMHgwYnwweDBmKSB0aGF0IGVuYWJsZXMvZGlzYWJsZXMKKyoJCQltb25pdG9yIG1vZGUuIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9tb25pdG9yKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBlbmFibGUpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX01PTklUT1IpIHwKKwkJSEZBMzg0eF9DTURfQUlORk9fU0VUKGVuYWJsZSk7CisJY21kLnBhcm0wID0gMDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9kb3dubG9hZAorKgorKiBTZXRzIHRoZSBjb250cm9scyBmb3IgdGhlIE1BQyBjb250cm9sbGVyIGNvZGUvZGF0YSBkb3dubG9hZAorKiBwcm9jZXNzLiAgVGhlIGFyZ3VtZW50cyBzZXQgdGhlIG1vZGUgYW5kIGFkZHJlc3MgYXNzb2NpYXRlZAorKiB3aXRoIGEgZG93bmxvYWQuICBOb3RlIHRoYXQgdGhlIGF1eCByZWdpc3RlcnMgc2hvdWxkIGJlIGVuYWJsZWQKKyogcHJpb3IgdG8gc2V0dGluZyBvbmUgb2YgdGhlIGRvd25sb2FkIGVuYWJsZSBtb2Rlcy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgltb2RlCQkwIC0gRGlzYWJsZSBwcm9ncmFtbWluZyBhbmQgYmVnaW4gY29kZSBleGVjCisqCQkJMSAtIEVuYWJsZSB2b2xhdGlsZSBtZW0gcHJvZ3JhbW1pbmcKKyoJCQkyIC0gRW5hYmxlIG5vbi12b2xhdGlsZSBtZW0gcHJvZ3JhbW1pbmcKKyoJCQkzIC0gUHJvZ3JhbSBub24tdm9sYXRpbGUgc2VjdGlvbiBmcm9tIE5WIGRvd25sb2FkCisqCQkJICAgIGJ1ZmZlci4KKyoJCQkoaG9zdCBvcmRlcikKKyoJbG93YWRkcgorKgloaWdoYWRkcglGb3IgbW9kZSAxLCBzZXRzIHRoZSBoaWdoICYgbG93IG9yZGVyIGJpdHMgb2YKKyoJCQl0aGUgImRlc3RpbmF0aW9uIGFkZHJlc3MiLiAgVGhpcyBhZGRyZXNzIHdpbGwgYmUKKyoJCQl0aGUgZXhlY3V0aW9uIHN0YXJ0IGFkZHJlc3Mgd2hlbiBkb3dubG9hZCBpcworKgkJCXN1YnNlcXVlbnRseSBkaXNhYmxlZC4KKyoJCQlGb3IgbW9kZSAyLCBzZXRzIHRoZSBoaWdoICYgbG93IG9yZGVyIGJpdHMgb2YKKyoJCQl0aGUgZGVzdGluYXRpb24gaW4gTlYgcmFtLgorKgkJCUZvciBtb2RlcyAwICYgMywgc2hvdWxkIGJlIHplcm8uIChob3N0IG9yZGVyKQorKgkJCU5PVEU6IHRoZXNlIGFyZSBDTUQgZm9ybWF0LgorKgljb2RlbGVuCQlMZW5ndGggb2YgdGhlIGRhdGEgdG8gd3JpdGUgaW4gbW9kZSAyLAorKgkJCXplcm8gb3RoZXJ3aXNlLiAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfZG93bmxvYWQoaGZhMzg0eF90ICpodywgVUlOVDE2IG1vZGUsIFVJTlQxNiBsb3dhZGRyLAorCQkJCVVJTlQxNiBoaWdoYWRkciwgVUlOVDE2IGNvZGVsZW4pCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisJV0xBTl9MT0dfREVCVUcoNSwKKwkJIm1vZGU9JWQsIGxvd2FkZHI9MHglMDR4LCBoaWdoYWRkcj0weCUwNHgsIGNvZGVsZW49JWRcbiIsCisJCW1vZGUsIGxvd2FkZHIsIGhpZ2hhZGRyLCBjb2RlbGVuKTsKKworCWNtZC5jbWQgPSAoSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0RPV05MRCkgfAorCQkgICBIRkEzODR4X0NNRF9QUk9HTU9ERV9TRVQobW9kZSkpOworCisJY21kLnBhcm0wID0gbG93YWRkcjsKKwljbWQucGFybTEgPSBoaWdoYWRkcjsKKwljbWQucGFybTIgPSBjb2RlbGVuOworCisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9jb3B5X2Zyb21fYXV4CisqCisqIENvcGllcyBhIGNvbGxlY3Rpb24gb2YgYnl0ZXMgZnJvbSB0aGUgY29udHJvbGxlciBtZW1vcnkuICBUaGUKKyogQXV4aWxpYXJ5IHBvcnQgTVVTVCBiZSBlbmFibGVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyogV2UgX21pZ2h0XyBiZSBpbiBhIGRvd25sb2FkIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWNhcmRhZGRyCWFkZHJlc3MgaW4gaGZhMzg0eCBkYXRhIHNwYWNlIHRvIHJlYWQKKyoJYXV4Y3RsCQlhZGRyZXNzIHNwYWNlIHNlbGVjdAorKglidWYJCXB0ciB0byBkZXN0aW5hdGlvbiBob3N0IGJ1ZmZlcgorKglsZW4JCWxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zZmVyIChpbiBieXRlcykKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCWJ1ZiBjb250YWlucyB0aGUgZGF0YSBjb3BpZWQKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitoZmEzODR4X2NvcHlfZnJvbV9hdXgoCisJaGZhMzg0eF90ICpodywgVUlOVDMyIGNhcmRhZGRyLCBVSU5UMzIgYXV4Y3RsLCB2b2lkICpidWYsIFVJTlQgbGVuKQoreworCURCRkVOVEVSOworCVdMQU5fTE9HX0VSUk9SKCJub3QgdXNlZCBpbiBVU0IuXG4iKTsKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NvcHlfdG9fYXV4CisqCisqIENvcGllcyBhIGNvbGxlY3Rpb24gb2YgYnl0ZXMgdG8gdGhlIGNvbnRyb2xsZXIgbWVtb3J5LiAgVGhlCisqIEF1eGlsaWFyeSBwb3J0IE1VU1QgYmUgZW5hYmxlZCBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisqIFdlIF9taWdodF8gYmUgaW4gYSBkb3dubG9hZCBzdGF0ZS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgljYXJkYWRkcglhZGRyZXNzIGluIGhmYTM4NHggZGF0YSBzcGFjZSB0byByZWFkCisqCWF1eGN0bAkJYWRkcmVzcyBzcGFjZSBzZWxlY3QKKyoJYnVmCQlwdHIgdG8gZGVzdGluYXRpb24gaG9zdCBidWZmZXIKKyoJbGVuCQlsZW5ndGggb2YgZGF0YSB0byB0cmFuc2ZlciAoaW4gYnl0ZXMpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKglDb250cm9sbGVyIG1lbW9yeSBub3cgY29udGFpbnMgYSBjb3B5IG9mIGJ1ZgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQKK2hmYTM4NHhfY29weV90b19hdXgoCisJaGZhMzg0eF90ICpodywgVUlOVDMyIGNhcmRhZGRyLCBVSU5UMzIgYXV4Y3RsLCB2b2lkICpidWYsIFVJTlQgbGVuKQoreworCURCRkVOVEVSOworCVdMQU5fTE9HX0VSUk9SKCJub3QgdXNlZCBpbiBVU0IuXG4iKTsKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NvcmVyZXNldAorKgorKiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGhmYTM4eHggTUFDIGNvcmUuICBXZSBhc3N1bWUgdGhhdCB0aGUgaHcKKyogc3RydWN0dXJlIGlzIGluIGl0cyAiY3JlYXRlZCIgc3RhdGUuICBUaGF0IGlzLCBpdCBpcyBpbml0aWFsaXplZAorKiB3aXRoIHByb3BlciB2YWx1ZXMuICBOb3RlIHRoYXQgaWYgYSByZXNldCBpcyBkb25lIGFmdGVyIHRoZQorKiBkZXZpY2UgaGFzIGJlZW4gYWN0aXZlIGZvciBhd2hpbGUsIHRoZSBjYWxsZXIgbWlnaHQgaGF2ZSB0byBjbGVhbgorKiB1cCBzb21lIGxlZnRvdmVyIGNydWZ0IGluIHRoZSBodyBzdHJ1Y3R1cmUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJaG9sZHRpbWUJaG93IGxvbmcgKGluIG1zKSB0byBob2xkIHRoZSByZXNldAorKglzZXR0bGV0aW1lCWhvdyBsb25nIChpbiBtcykgdG8gd2FpdCBhZnRlciByZWxlYXNpbmcKKyoJCQl0aGUgcmVzZXQKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jb3JlcmVzZXQoaGZhMzg0eF90ICpodywgaW50IGhvbGR0aW1lLCBpbnQgc2V0dGxldGltZSwgaW50IGdlbmVzaXMpCit7CisjaWYgMAorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisJc3RydWN0IHVzYl9kZXZpY2UJKnBhcmVudCA9IGh3LT51c2ItPnBhcmVudDsKKwlpbnQJCQlpOworCWludAkJCXBvcnQgPSAtMTsKKyNlbmRpZgorI2VuZGlmCisJaW50IAkJCXJlc3VsdCA9IDA7CisKKworI2RlZmluZSBQMl9VU0JfUlRfUE9SVAkJKFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX09USEVSKQorI2RlZmluZSBQMl9VU0JfRkVBVF9SRVNFVAk0CisjZGVmaW5lIFAyX1VTQl9GRUFUX0NfUkVTRVQJMjAKKworCURCRkVOVEVSOworCisjaWYgMAorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisJLyogRmluZCB0aGUgaHViIHBvcnQgKi8KKwlmb3IgKCBpID0gMDsgaSA8IHBhcmVudC0+bWF4Y2hpbGQ7IGkrKykgeworCQlpZiAocGFyZW50LT5jaGlsZHJlbltpXSA9PSBody0+dXNiKSB7CisJCQlwb3J0ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChwb3J0IDwgMCkgcmV0dXJuIC1FTk9FTlQ7CisKKwkvKiBTZXQgYW5kIGNsZWFyIHRoZSByZXNldCAqLworCXVzYl9jb250cm9sX21zZyhwYXJlbnQsIHVzYl9zbmRjdHJscGlwZShwYXJlbnQsIDApLAorCQlVU0JfUkVRX1NFVF9GRUFUVVJFLCBQMl9VU0JfUlRfUE9SVCwgUDJfVVNCX0ZFQVRfUkVTRVQsCisJCXBvcnQrMSwgTlVMTCwgMCwgMSpIWik7CisJd2FpdF9tcyhob2xkdGltZSk7CisJdXNiX2NvbnRyb2xfbXNnKHBhcmVudCwgdXNiX3NuZGN0cmxwaXBlKHBhcmVudCwgMCksCisJCVVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwgUDJfVVNCX1JUX1BPUlQsIFAyX1VTQl9GRUFUX0NfUkVTRVQsCisJCXBvcnQrMSwgTlVMTCwgMCwgMSpIWik7CisJd2FpdF9tcyhzZXR0bGV0aW1lKTsKKworCS8qIFNldCB0aGUgZGV2aWNlIGFkZHJlc3MgKi8KKwlyZXN1bHQ9dXNiX3NldF9hZGRyZXNzKGh3LT51c2IpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJyZXNldF91c2JkZXY6IERldiBub3QgYWNjZXB0aW5nIGFkZHJlc3MsICIKKwkJCSJyZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCWNsZWFyX2JpdChody0+dXNiLT5kZXZudW0sICZody0+dXNiLT5idXMtPmRldm1hcC5kZXZpY2VtYXApOworCQlody0+dXNiLT5kZXZudW0gPSAtMTsKKwkJZ290byBkb25lOworCX0KKwkvKiBMZXQgdGhlIGFkZHJlc3Mgc2V0dGxlICovCisJd2FpdF9tcygyMCk7CisKKwkvKiBBc3N1bWUgd2UncmUgcmV1c2luZyB0aGUgb3JpZ2luYWwgZGVzY3JpcHRvciBkYXRhICovCisKKwkvKiBTZXQgdGhlIGNvbmZpZ3VyYXRpb24uICovCisJV0xBTl9MT0dfREVCVUcoMywgIlNldHRpbmcgQ29uZmlndXJhdGlvbiAlZFxuIiwKKwkJaHctPnVzYi0+Y29uZmlnWzBdLmJDb25maWd1cmF0aW9uVmFsdWUpOworCXJlc3VsdD11c2Jfc2V0X2NvbmZpZ3VyYXRpb24oaHctPnVzYiwgaHctPnVzYi0+Y29uZmlnWzBdLmJDb25maWd1cmF0aW9uVmFsdWUpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigidXNiX3NldF9jb25maWd1cmF0aW9uKCkgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLAorCQkJCXJlc3VsdCk7CisJCWdvdG8gZG9uZTsKKwl9CisJLyogTGV0IHRoZSBjb25maWd1cmF0aW9uIHNldHRsZSAqLworCXdhaXRfbXMoMjApOworCisgZG9uZToKKyNlbHNlCisJcmVzdWx0PXVzYl9yZXNldF9kZXZpY2UoaHctPnVzYik7CisJaWYocmVzdWx0PDApIHsKKwkJV0xBTl9MT0dfRVJST1IoInVzYl9yZXNldF9kZXZpY2UoKSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIscmVzdWx0KTsKKwl9CisjZW5kaWYKKyNlbmRpZgorCisJcmVzdWx0PXVzYl9yZXNldF9kZXZpY2UoaHctPnVzYik7CisJaWYocmVzdWx0PDApIHsKKwkJV0xBTl9MT0dfRVJST1IoInVzYl9yZXNldF9kZXZpY2UoKSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIscmVzdWx0KTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jCisqCisqIFdhaXRzIGZvciBhIHN5bmNocm9ub3VzIENUTFggb2JqZWN0IHRvIGNvbXBsZXRlLAorKiBhbmQgdGhlbiBoYW5kbGVzIHRoZSByZXNwb25zZS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgljdGx4CSAJQ1RMWCBwdHIKKyoJY29tcGxldG9yCWZ1bmN0b3Igb2JqZWN0IHRvIGRlY2lkZSB3aGF0IHRvCisqCQkJZG8gd2l0aCB0aGUgQ1RMWCdzIHJlc3VsdC4KKyoKKyogUmV0dXJuczoKKyoJMAkJU3VjY2VzcworKgktRVJFU1RBUlRTWVMJSW50ZXJydXB0ZWQgYnkgYSBzaWduYWwKKyoJLUVJTwkJQ1RMWCBmYWlsZWQKKyoJLUVOT0RFVgkJQWRhcHRlciB3YXMgdW5wbHVnZ2VkCisqCT8/PwkJUmVzdWx0IGZyb20gY29tcGxldG9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoaGZhMzg0eF90ICpodywKKwkJCQkJIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4LAorCQkJCQkgdXNiY3RseF9jb21wbGV0b3JfdCAqY29tcGxldG9yKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdDsKKworCURCRkVOVEVSOworCisJcmVzdWx0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZjdGx4LT5kb25lKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBXZSBjYW4gb25seSBoYW5kbGUgdGhlIENUTFggaWYgdGhlIFVTQiBkaXNjb25uZWN0CisJICogZnVuY3Rpb24gaGFzIG5vdCBydW4geWV0IC4uLgorCSAqLworCWNsZWFudXA6CisJaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkKKwl7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCXJlc3VsdCA9IC1FTk9ERVY7CisJfQorCWVsc2UgaWYgKCByZXN1bHQgIT0gMCApCisJeworCQlpbnQgcnVucXVldWUgPSAwOworCisJCS8qCisJCSAqIFdlIHdlcmUgcHJvYmFibHkgaW50ZXJydXB0ZWQsIHNvIGRlbGV0ZQorCQkgKiB0aGlzIENUTFggYXN5bmNocm9ub3VzbHksIGtpbGwgdGhlIHRpbWVycworCQkgKiBhbmQgdGhlIFVSQiwgYW5kIHRoZW4gc3RhcnQgdGhlIG5leHQKKwkJICogcGVuZGluZyBDVExYLgorCQkgKgorCQkgKiBOT1RFOiBXZSBjYW4gb25seSBkZWxldGUgdGhlIHRpbWVycyBhbmQKKwkJICogICAgICAgdGhlIFVSQiBpZiB0aGlzIENUTFggaXMgYWN0aXZlLgorCQkgKi8KKwkJaWYgKGN0bHggPT0gZ2V0X2FjdGl2ZV9jdGx4KGh3KSkKKwkJeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCQkJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmaHctPnJlcXRpbWVyKTsKKwkJCWRlbF9zaW5nbGVzaG90X3RpbWVyX3N5bmMoJmh3LT5yZXNwdGltZXIpOworCQkJaHctPnJlcV90aW1lcl9kb25lID0gMTsKKwkJCWh3LT5yZXNwX3RpbWVyX2RvbmUgPSAxOworCQkJdXNiX2tpbGxfdXJiKCZody0+Y3RseF91cmIpOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCQkJcnVucXVldWUgPSAxOworCisJCQkvKgorCQkJICogVGhpcyBzY2VuYXJpbyBpcyBzbyB1bmxpa2VseSB0aGF0IEknbQorCQkJICogaGFwcHkgd2l0aCBhIGdydWJieSAiZ290byIgc29sdXRpb24gLi4uCisJCQkgKi8KKwkJCWlmICggaHctPndsYW5kZXYtPmh3cmVtb3ZlZCApCisJCQkJZ290byBjbGVhbnVwOworCQl9CisKKwkJLyoKKwkJICogVGhlIGNvbXBsZXRpb24gdGFzayB3aWxsIHNlbmQgdGhpcyBDVExYCisJCSAqIHRvIHRoZSByZWFwZXIgdGhlIG5leHQgdGltZSBpdCBydW5zLiBXZQorCQkgKiBhcmUgbm8gbG9uZ2VyIGluIGEgaHVycnkuCisJCSAqLworCQljdGx4LT5yZWFwYWJsZSA9IDE7CisJCWN0bHgtPnN0YXRlID0gQ1RMWF9SRVFfRkFJTEVEOworCQlsaXN0X21vdmVfdGFpbCgmY3RseC0+bGlzdCwgJmh3LT5jdGx4cS5jb21wbGV0aW5nKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJCWlmIChydW5xdWV1ZSkKKwkJCWhmYTM4NHhfdXNiY3RseHFfcnVuKGh3KTsKKwl9IGVsc2UgeworCQlpZiAoY3RseC0+c3RhdGUgPT0gQ1RMWF9DT01QTEVURSkgeworCQkJcmVzdWx0ID0gY29tcGxldG9yLT5jb21wbGV0ZShjb21wbGV0b3IpOworCQl9IGVsc2UgeworCQkJV0xBTl9MT0dfV0FSTklORygiQ1RMWFslZF0gZXJyb3I6IHN0YXRlKCVzKVxuIiwKKwkJCSAgICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgICAgICAgICAgICAgICAgY3RseHN0cihjdGx4LT5zdGF0ZSkpOworCQkJcmVzdWx0ID0gLUVJTzsKKwkJfQorCisJCWxpc3RfZGVsKCZjdGx4LT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJa2ZyZWUoY3RseCk7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kb2NtZAorKgorKiBDb25zdHJ1Y3RzIGEgY29tbWFuZCBDVExYIGFuZCBzdWJtaXRzIGl0LgorKgorKiBOT1RFOiBBbnkgY2hhbmdlcyB0byB0aGUgJ3Bvc3Qtc3VibWl0JyBjb2RlIGluIHRoaXMgZnVuY3Rpb24KKyogICAgICAgbmVlZCB0byBiZSBjYXJyaWVkIG92ZXIgdG8gaGZhMzg0eF9jYmNtZCgpIHNpbmNlIHRoZSBoYW5kbGluZworKiAgICAgICBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1vZGUJCURPV0FJVCBvciBET0FTWU5DCisqICAgICAgIGNtZCAgICAgICAgICAgICBjbWQgc3RydWN0dXJlLiAgSW5jbHVkZXMgYWxsIGFyZ3VtZW50cyBhbmQgcmVzdWx0CisqICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHBvaW50cy4gIEFsbCBpbiBob3N0IG9yZGVyLiBpbiBob3N0IG9yZGVyCisqCWNtZGNiCQljb21tYW5kLXNwZWNpZmljIGNhbGxiYWNrCisqCXVzZXJjYgkJdXNlciBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2JfZGF0YQl1c2VyIHN1cHBsaWVkIGRhdGEgcG9pbnRlciBmb3IgYXN5bmMgY2FsbHMsIE5VTEwKKyoJCQlmb3IgRE9BU1lOQyBjYWxscworKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCS1FSU8JCUNUTFggZmFpbHVyZQorKgktRVJFU1RBUlRTWVMJQXdha2VuZWQgb24gc2lnbmFsCisqCT4wCQljb21tYW5kIGluZGljYXRlZCBlcnJvciwgU3RhdHVzIGFuZCBSZXNwMC0yIGFyZQorKgkJCWluIGh3IHN0cnVjdHVyZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF9kb2NtZCgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJaGZhMzg0eF9tZXRhY21kX3QgKmNtZCwKKwljdGx4X2NtZGNiX3QJY21kY2IsCisJY3RseF91c2VyY2JfdAl1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpCit7CisJaW50CQkJcmVzdWx0OworCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCisJREJGRU5URVI7CisJY3RseCA9IHVzYmN0bHhfYWxsb2MoKTsKKwlpZiAoIGN0bHggPT0gTlVMTCApIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KKwljdGx4LT5vdXRidWYuY21kcmVxLnR5cGUgPSAJaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX0NNRFJFUSk7CisJY3RseC0+b3V0YnVmLmNtZHJlcS5jbWQgPQlob3N0MmhmYTM4NHhfMTYoY21kLT5jbWQpOworCWN0bHgtPm91dGJ1Zi5jbWRyZXEucGFybTAgPQlob3N0MmhmYTM4NHhfMTYoY21kLT5wYXJtMCk7CisJY3RseC0+b3V0YnVmLmNtZHJlcS5wYXJtMSA9CWhvc3QyaGZhMzg0eF8xNihjbWQtPnBhcm0xKTsKKwljdGx4LT5vdXRidWYuY21kcmVxLnBhcm0yID0JaG9zdDJoZmEzODR4XzE2KGNtZC0+cGFybTIpOworCisJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYuY21kcmVxKTsKKworCVdMQU5fTE9HX0RFQlVHKDQsICJjbWRyZXE6IGNtZD0weCUwNHggIgorCQkicGFybTA9MHglMDR4IHBhcm0xPTB4JTA0eCBwYXJtMj0weCUwNHhcbiIsCisJCWNtZC0+Y21kLAorCQljbWQtPnBhcm0wLAorCQljbWQtPnBhcm0xLAorCQljbWQtPnBhcm0yKTsKKworCWN0bHgtPnJlYXBhYmxlID0gbW9kZTsKKwljdGx4LT5jbWRjYiA9IGNtZGNiOworCWN0bHgtPnVzZXJjYiA9IHVzZXJjYjsKKwljdGx4LT51c2VyY2JfZGF0YSA9IHVzZXJjYl9kYXRhOworCisJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X3N1Ym1pdChodywgY3RseCk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCWtmcmVlKGN0bHgpOworCX0gZWxzZSBpZiAobW9kZSA9PSBET1dBSVQpIHsKKwkJdXNiY3RseF9jbWRfY29tcGxldG9yX3QgY29tcGxldG9yOworCisJCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAorCQkgICAgICAgICAgICAgaHcsIGN0bHgsIGluaXRfY21kX2NvbXBsZXRvcigmY29tcGxldG9yLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RseC0+aW5idWYuY21kcmVzcCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNtZC0+cmVzdWx0KSApOworCX0KKworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZG9ycmlkCisqCisqIENvbnN0cnVjdHMgYSByZWFkIHJpZCBDVExYIGFuZCBpc3N1ZXMgaXQuCisqCisqIE5PVEU6IEFueSBjaGFuZ2VzIHRvIHRoZSAncG9zdC1zdWJtaXQnIGNvZGUgaW4gdGhpcyBmdW5jdGlvbgorKiAgICAgICBuZWVkIHRvIGJlIGNhcnJpZWQgb3ZlciB0byBoZmEzODR4X2NicnJpZCgpIHNpbmNlIHRoZSBoYW5kbGluZworKiAgICAgICBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1vZGUJCURPV0FJVCBvciBET0FTWU5DCisqCXJpZAkJUmVhZCBSSUQgbnVtYmVyIChob3N0IG9yZGVyKQorKglyaWRkYXRhCQlDYWxsZXIgc3VwcGxpZWQgYnVmZmVyIHRoYXQgTUFDIGZvcm1hdHRlZCBSSUQuZGF0YQorKgkJCXJlY29yZCB3aWxsIGJlIHdyaXR0ZW4gdG8gZm9yIERPV0FJVCBjYWxscy4gU2hvdWxkCisqCQkJYmUgTlVMTCBmb3IgRE9BU1lOQyBjYWxscy4KKyoJcmlkZGF0YWxlbglCdWZmZXIgbGVuZ3RoIGZvciBET1dBSVQgY2FsbHMuIFplcm8gZm9yIERPQVNZTkMgY2FsbHMuCisqCWNtZGNiCQljb21tYW5kIGNhbGxiYWNrIGZvciBhc3luYyBjYWxscywgTlVMTCBmb3IgRE9XQUlUIGNhbGxzCisqCXVzZXJjYgkJdXNlciBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2JfZGF0YQl1c2VyIHN1cHBsaWVkIGRhdGEgcG9pbnRlciBmb3IgYXN5bmMgY2FsbHMsIE5VTEwKKyoJCQlmb3IgRE9XQUlUIGNhbGxzCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJLUVJTwkJQ1RMWCBmYWlsdXJlCisqCS1FUkVTVEFSVFNZUwlBd2FrZW5lZCBvbiBzaWduYWwKKyoJLUVOT0RBVEEJcmlkZGF0YWxlbiAhPSBtYWNkYXRhbGVuCisqCT4wCQljb21tYW5kIGluZGljYXRlZCBlcnJvciwgU3RhdHVzIGFuZCBSZXNwMC0yIGFyZQorKgkJCWluIGh3IHN0cnVjdHVyZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdCAoRE9BU1lOQykKKyoJcHJvY2VzcyAoRE9XQUlUIG9yIERPQVNZTkMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK2hmYTM4NHhfZG9ycmlkKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwlVSU5UMTYJcmlkLAorCXZvaWQJKnJpZGRhdGEsCisJVUlOVAlyaWRkYXRhbGVuLAorICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpCit7CisJaW50CQkJcmVzdWx0OworCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCisJREJGRU5URVI7CisJY3RseCA9IHVzYmN0bHhfYWxsb2MoKTsKKwlpZiAoIGN0bHggPT0gTlVMTCApIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KKwljdGx4LT5vdXRidWYucnJpZHJlcS50eXBlID0gICBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfUlJJRFJFUSk7CisJY3RseC0+b3V0YnVmLnJyaWRyZXEuZnJtbGVuID0KKwkJaG9zdDJoZmEzODR4XzE2KHNpemVvZihjdGx4LT5vdXRidWYucnJpZHJlcS5yaWQpKTsKKwljdGx4LT5vdXRidWYucnJpZHJlcS5yaWQgPSAgICBob3N0MmhmYTM4NHhfMTYocmlkKTsKKworCWN0bHgtPm91dGJ1ZnNpemUgPSBzaXplb2YoY3RseC0+b3V0YnVmLnJyaWRyZXEpOworCisJY3RseC0+cmVhcGFibGUgPSBtb2RlOworCWN0bHgtPmNtZGNiID0gY21kY2I7CisJY3RseC0+dXNlcmNiID0gdXNlcmNiOworCWN0bHgtPnVzZXJjYl9kYXRhID0gdXNlcmNiX2RhdGE7CisKKwkvKiBTdWJtaXQgdGhlIENUTFggKi8KKwlyZXN1bHQgPSBoZmEzODR4X3VzYmN0bHhfc3VibWl0KGh3LCBjdGx4KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJa2ZyZWUoY3RseCk7CisJfSBlbHNlIGlmIChtb2RlID09IERPV0FJVCkgeworCQl1c2JjdGx4X3JyaWRfY29tcGxldG9yX3QgY29tcGxldG9yOworCisJCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAorCQkgICAgICAgICAgIGh3LCBjdGx4LCBpbml0X3JyaWRfY29tcGxldG9yKCZjb21wbGV0b3IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0bHgtPmluYnVmLnJyaWRyZXNwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZGRhdGEsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlkZGF0YWxlbikgKTsKKwl9CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2Rvd3JpZAorKgorKiBDb25zdHJ1Y3RzIGEgd3JpdGUgcmlkIENUTFggYW5kIGlzc3VlcyBpdC4KKyoKKyogTk9URTogQW55IGNoYW5nZXMgdG8gdGhlICdwb3N0LXN1Ym1pdCcgY29kZSBpbiB0aGlzIGZ1bmN0aW9uCisqICAgICAgIG5lZWQgdG8gYmUgY2FycmllZCBvdmVyIHRvIGhmYTM4NHhfY2J3cmlkKCkgc2luY2UgdGhlIGhhbmRsaW5nCisqICAgICAgIGlzIHZpcnR1YWxseSBpZGVudGljYWwuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJQ01EX01PREUJRE9XQUlUIG9yIERPQVNZTkMKKyoJcmlkCQlSSUQgY29kZQorKglyaWRkYXRhCQlEYXRhIHBvcnRpb24gb2YgUklEIGZvcm1hdHRlZCBmb3IgTUFDCisqCXJpZGRhdGFsZW4JTGVuZ3RoIG9mIHRoZSBkYXRhIHBvcnRpb24gaW4gYnl0ZXMKKyogICAgICAgY21kY2IgICAgICAgICAgIGNvbW1hbmQgY2FsbGJhY2sgZm9yIGFzeW5jIGNhbGxzLCBOVUxMIGZvciBET1dBSVQgY2FsbHMKKyoJdXNlcmNiCQl1c2VyIGNhbGxiYWNrIGZvciBhc3luYyBjYWxscywgTlVMTCBmb3IgRE9XQUlUIGNhbGxzCisqCXVzZXJjYl9kYXRhCXVzZXIgc3VwcGxpZWQgZGF0YSBwb2ludGVyIGZvciBhc3luYyBjYWxscworKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCS1FVElNRURPVVQJdGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlZ2lzdGVyIHJlYWR5IG9yCisqCQkJY29tbWFuZCBjb21wbGV0aW9uCisqCT4wCQljb21tYW5kIGluZGljYXRlZCBlcnJvciwgU3RhdHVzIGFuZCBSZXNwMC0yIGFyZQorKgkJCWluIGh3IHN0cnVjdHVyZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdCAoRE9BU1lOQykKKyoJcHJvY2VzcyAoRE9XQUlUIG9yIERPQVNZTkMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK2hmYTM4NHhfZG93cmlkKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwlVSU5UMTYJcmlkLAorCXZvaWQJKnJpZGRhdGEsCisJVUlOVAlyaWRkYXRhbGVuLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSkKK3sKKwlpbnQJCQlyZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisKKwlEQkZFTlRFUjsKKwljdGx4ID0gdXNiY3RseF9hbGxvYygpOworCWlmICggY3RseCA9PSBOVUxMICkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLworCWN0bHgtPm91dGJ1Zi53cmlkcmVxLnR5cGUgPSAgIGhvc3QyaGZhMzg0eF8xNihIRkEzODR4X1VTQl9XUklEUkVRKTsKKwljdGx4LT5vdXRidWYud3JpZHJlcS5mcm1sZW4gPSBob3N0MmhmYTM4NHhfMTYoCisJCQkJCShzaXplb2YoY3RseC0+b3V0YnVmLndyaWRyZXEucmlkKSArCisJCQkJCXJpZGRhdGFsZW4gKyAxKSAvIDIpOworCWN0bHgtPm91dGJ1Zi53cmlkcmVxLnJpZCA9ICAgIGhvc3QyaGZhMzg0eF8xNihyaWQpOworCW1lbWNweShjdGx4LT5vdXRidWYud3JpZHJlcS5kYXRhLCByaWRkYXRhLCByaWRkYXRhbGVuKTsKKworCWN0bHgtPm91dGJ1ZnNpemUgPSBzaXplb2YoY3RseC0+b3V0YnVmLndyaWRyZXEudHlwZSkgKworCSAgICAgICAgICAgICAgICAgICBzaXplb2YoY3RseC0+b3V0YnVmLndyaWRyZXEuZnJtbGVuKSArCisJICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGx4LT5vdXRidWYud3JpZHJlcS5yaWQpICsKKwkgICAgICAgICAgICAgICAgICAgcmlkZGF0YWxlbjsKKworCWN0bHgtPnJlYXBhYmxlID0gbW9kZTsKKwljdGx4LT5jbWRjYiA9IGNtZGNiOworCWN0bHgtPnVzZXJjYiA9IHVzZXJjYjsKKwljdGx4LT51c2VyY2JfZGF0YSA9IHVzZXJjYl9kYXRhOworCisJLyogU3VibWl0IHRoZSBDVExYICovCisJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X3N1Ym1pdChodywgY3RseCk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCWtmcmVlKGN0bHgpOworCX0gZWxzZSBpZiAobW9kZSA9PSBET1dBSVQpIHsKKwkJdXNiY3RseF93cmlkX2NvbXBsZXRvcl90IGNvbXBsZXRvcjsKKwkJaGZhMzg0eF9jbWRyZXN1bHRfdCB3cmlkcmVzdWx0OworCisJCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAorCQkgICAgICAgICAgICAgICBodywKKwkJICAgICAgICAgICAgICAgY3RseCwKKwkJICAgICAgICAgICAgICAgaW5pdF93cmlkX2NvbXBsZXRvcigmY29tcGxldG9yLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi53cmlkcmVzcCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd3JpZHJlc3VsdCkgKTsKKwl9CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kb3JtZW0KKyoKKyogQ29uc3RydWN0cyBhIHJlYWRtZW0gQ1RMWCBhbmQgaXNzdWVzIGl0LgorKgorKiBOT1RFOiBBbnkgY2hhbmdlcyB0byB0aGUgJ3Bvc3Qtc3VibWl0JyBjb2RlIGluIHRoaXMgZnVuY3Rpb24KKyogICAgICAgbmVlZCB0byBiZSBjYXJyaWVkIG92ZXIgdG8gaGZhMzg0eF9jYnJtZW0oKSBzaW5jZSB0aGUgaGFuZGxpbmcKKyogICAgICAgaXMgdmlydHVhbGx5IGlkZW50aWNhbC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgltb2RlCQlET1dBSVQgb3IgRE9BU1lOQworKglwYWdlCQlNQUMgYWRkcmVzcyBzcGFjZSBwYWdlIChDTUQgZm9ybWF0KQorKglvZmZzZXQJCU1BQyBhZGRyZXNzIHNwYWNlIG9mZnNldAorKglkYXRhCQlQdHIgdG8gZGF0YSBidWZmZXIgdG8gcmVjZWl2ZSByZWFkCisqCWxlbgkJTGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHJlYWQgKG1heCA9PSAyMDQ4KQorKgljbWRjYgkJY29tbWFuZCBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2IJCXVzZXIgY2FsbGJhY2sgZm9yIGFzeW5jIGNhbGxzLCBOVUxMIGZvciBET1dBSVQgY2FsbHMKKyoJdXNlcmNiX2RhdGEJdXNlciBzdXBwbGllZCBkYXRhIHBvaW50ZXIgZm9yIGFzeW5jIGNhbGxzCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJLUVUSU1FRE9VVAl0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmVnaXN0ZXIgcmVhZHkgb3IKKyoJCQljb21tYW5kIGNvbXBsZXRpb24KKyoJPjAJCWNvbW1hbmQgaW5kaWNhdGVkIGVycm9yLCBTdGF0dXMgYW5kIFJlc3AwLTIgYXJlCisqCQkJaW4gaHcgc3RydWN0dXJlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0IChET0FTWU5DKQorKglwcm9jZXNzIChET1dBSVQgb3IgRE9BU1lOQykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF9kb3JtZW0oCisJaGZhMzg0eF90ICpodywKKwlDTURfTU9ERSBtb2RlLAorCVVJTlQxNglwYWdlLAorCVVJTlQxNglvZmZzZXQsCisJdm9pZAkqZGF0YSwKKwlVSU5UCWxlbiwKKwljdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpCit7CisJaW50CQkJcmVzdWx0OworCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCisJREJGRU5URVI7CisJY3RseCA9IHVzYmN0bHhfYWxsb2MoKTsKKwlpZiAoIGN0bHggPT0gTlVMTCApIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KKwljdGx4LT5vdXRidWYucm1lbXJlcS50eXBlID0gICAgaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX1JNRU1SRVEpOworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLmZybWxlbiA9ICBob3N0MmhmYTM4NHhfMTYoCisJCQkJCXNpemVvZihjdGx4LT5vdXRidWYucm1lbXJlcS5vZmZzZXQpICsKKwkJCQkJc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxLnBhZ2UpICsKKwkJCQkJbGVuKTsKKwljdGx4LT5vdXRidWYucm1lbXJlcS5vZmZzZXQgPQlob3N0MmhmYTM4NHhfMTYob2Zmc2V0KTsKKwljdGx4LT5vdXRidWYucm1lbXJlcS5wYWdlID0JaG9zdDJoZmEzODR4XzE2KHBhZ2UpOworCisJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYucm1lbXJlcSk7CisKKwlXTEFOX0xPR19ERUJVRyg0LAorCQkidHlwZT0weCUwNHggZnJtbGVuPSVkIG9mZnNldD0weCUwNHggcGFnZT0weCUwNHhcbiIsCisJCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnR5cGUsCisJCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLmZybWxlbiwKKwkJY3RseC0+b3V0YnVmLnJtZW1yZXEub2Zmc2V0LAorCQljdGx4LT5vdXRidWYucm1lbXJlcS5wYWdlKTsKKworCVdMQU5fTE9HX0RFQlVHKDQsInBrdHNpemU9JXpkXG4iLAorCQlST1VORFVQNjQoc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxKSkpOworCisJY3RseC0+cmVhcGFibGUgPSBtb2RlOworCWN0bHgtPmNtZGNiID0gY21kY2I7CisJY3RseC0+dXNlcmNiID0gdXNlcmNiOworCWN0bHgtPnVzZXJjYl9kYXRhID0gdXNlcmNiX2RhdGE7CisKKwlyZXN1bHQgPSBoZmEzODR4X3VzYmN0bHhfc3VibWl0KGh3LCBjdGx4KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJa2ZyZWUoY3RseCk7CisJfSBlbHNlIGlmICggbW9kZSA9PSBET1dBSVQgKSB7CisgICAgICAgICAgICAgICAgdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90IGNvbXBsZXRvcjsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaHcsIGN0bHgsIGluaXRfcm1lbV9jb21wbGV0b3IoJmNvbXBsZXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi5ybWVtcmVzcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4pICk7CisJfQorCitkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2Rvd21lbQorKgorKiBDb25zdHJ1Y3RzIGEgd3JpdGVtZW0gQ1RMWCBhbmQgaXNzdWVzIGl0LgorKgorKiBOT1RFOiBBbnkgY2hhbmdlcyB0byB0aGUgJ3Bvc3Qtc3VibWl0JyBjb2RlIGluIHRoaXMgZnVuY3Rpb24KKyogICAgICAgbmVlZCB0byBiZSBjYXJyaWVkIG92ZXIgdG8gaGZhMzg0eF9jYndtZW0oKSBzaW5jZSB0aGUgaGFuZGxpbmcKKyogICAgICAgaXMgdmlydHVhbGx5IGlkZW50aWNhbC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgltb2RlCQlET1dBSVQgb3IgRE9BU1lOQworKglwYWdlCQlNQUMgYWRkcmVzcyBzcGFjZSBwYWdlIChDTUQgZm9ybWF0KQorKglvZmZzZXQJCU1BQyBhZGRyZXNzIHNwYWNlIG9mZnNldAorKglkYXRhCQlQdHIgdG8gZGF0YSBidWZmZXIgY29udGFpbmluZyB3cml0ZSBkYXRhCisqCWxlbgkJTGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHJlYWQgKG1heCA9PSAyMDQ4KQorKgljbWRjYgkJY29tbWFuZCBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2IJCXVzZXIgY2FsbGJhY2sgZm9yIGFzeW5jIGNhbGxzLCBOVUxMIGZvciBET1dBSVQgY2FsbHMKKyoJdXNlcmNiX2RhdGEJdXNlciBzdXBwbGllZCBkYXRhIHBvaW50ZXIgZm9yIGFzeW5jIGNhbGxzLgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCS1FVElNRURPVVQJdGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlZ2lzdGVyIHJlYWR5IG9yCisqCQkJY29tbWFuZCBjb21wbGV0aW9uCisqCT4wCQljb21tYW5kIGluZGljYXRlZCBlcnJvciwgU3RhdHVzIGFuZCBSZXNwMC0yIGFyZQorKgkJCWluIGh3IHN0cnVjdHVyZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdCAoRE9XQUlUKQorKglwcm9jZXNzIChET1dBSVQgb3IgRE9BU1lOQykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF9kb3dtZW0oCisJaGZhMzg0eF90ICpodywKKwlDTURfTU9ERSBtb2RlLAorCVVJTlQxNglwYWdlLAorCVVJTlQxNglvZmZzZXQsCisJdm9pZAkqZGF0YSwKKwlVSU5UCWxlbiwKKwljdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpCit7CisJaW50CQkJcmVzdWx0OworCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCisJREJGRU5URVI7CisJV0xBTl9MT0dfREVCVUcoNSwgInBhZ2U9MHglMDR4IG9mZnNldD0weCUwNHggbGVuPSVkXG4iLAorCQlwYWdlLG9mZnNldCxsZW4pOworCisJY3RseCA9IHVzYmN0bHhfYWxsb2MoKTsKKwlpZiAoIGN0bHggPT0gTlVMTCApIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KKwljdGx4LT5vdXRidWYud21lbXJlcS50eXBlID0gICBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfV01FTVJFUSk7CisJY3RseC0+b3V0YnVmLndtZW1yZXEuZnJtbGVuID0gaG9zdDJoZmEzODR4XzE2KAorCQkJCQlzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0KSArCisJCQkJCXNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5wYWdlKSArCisJCQkJCWxlbik7CisJY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0ID0gaG9zdDJoZmEzODR4XzE2KG9mZnNldCk7CisJY3RseC0+b3V0YnVmLndtZW1yZXEucGFnZSA9ICAgaG9zdDJoZmEzODR4XzE2KHBhZ2UpOworCW1lbWNweShjdGx4LT5vdXRidWYud21lbXJlcS5kYXRhLCBkYXRhLCBsZW4pOworCisJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS50eXBlKSArCisJICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5mcm1sZW4pICsKKwkgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLm9mZnNldCkgKworCSAgICAgICAgICAgICAgICAgICBzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEucGFnZSkgKworCSAgICAgICAgICAgICAgICAgICBsZW47CisKKwljdGx4LT5yZWFwYWJsZSA9IG1vZGU7CisJY3RseC0+Y21kY2IgPSBjbWRjYjsKKwljdGx4LT51c2VyY2IgPSB1c2VyY2I7CisJY3RseC0+dXNlcmNiX2RhdGEgPSB1c2VyY2JfZGF0YTsKKworCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9zdWJtaXQoaHcsIGN0bHgpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlrZnJlZShjdGx4KTsKKwl9IGVsc2UgaWYgKCBtb2RlID09IERPV0FJVCApIHsKKyAgICAgICAgICAgICAgICB1c2JjdGx4X3dtZW1fY29tcGxldG9yX3QgY29tcGxldG9yOworICAgICAgICAgICAgICAgIGhmYTM4NHhfY21kcmVzdWx0X3Qgd21lbXJlc3VsdDsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF93bWVtX2NvbXBsZXRvcigmY29tcGxldG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0bHgtPmluYnVmLndtZW1yZXNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndtZW1yZXN1bHQpICk7CisJfQorCitkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzCisqCisqIFNlbmQgYSBjb21tdGFsbGllcyBpbnF1aXJ5IHRvIHRoZSBNQUMuICBOb3RlIHRoYXQgdGhpcyBpcyBhbiBhc3luYworKiBjYWxsIHRoYXQgd2lsbCByZXN1bHQgaW4gYW4gaW5mbyBmcmFtZSBhcnJpdmluZyBzb21ldGltZSBsYXRlci4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgl6ZXJvCQlzdWNjZXNzLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzKCBoZmEzODR4X3QgKmh3ICkKK3sKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRENPREVfSU5ROworCWNtZC5wYXJtMCA9IEhGQTM4NHhfSVRfQ09NTVRBTExJRVM7CisJY21kLnBhcm0xID0gMDsKKwljbWQucGFybTIgPSAwOworCisJaGZhMzg0eF9kb2NtZF9hc3luYyhodywgJmNtZCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZGlzYWJsZQorKgorKiBJc3N1ZXMgdGhlIGRpc2FibGUgY29tbWFuZCB0byBzdG9wIGNvbW11bmljYXRpb25zIG9uIG9uZSBvZgorKiB0aGUgTUFDcyAncG9ydHMnLiAgT25seSBtYWNwb3J0IDAgaXMgdmFsaWQgIGZvciBzdGF0aW9ucy4KKyogQVBzIG1heSBhbHNvIGRpc2FibGUgbWFjcG9ydHMgMS02LiAgT25seSBwb3J0cyB0aGF0IGhhdmUgYmVlbgorKiBwcmV2aW91c2x5IGVuYWJsZWQgbWF5IGJlIGRpc2FibGVkLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlciAoaG9zdCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2Rpc2FibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpCit7CisJaW50CXJlc3VsdCA9IDA7CisKKwlEQkZFTlRFUjsKKwlpZiAoKCFody0+aXNhcCAmJiBtYWNwb3J0ICE9IDApIHx8CisJICAgIChody0+aXNhcCAmJiAhKG1hY3BvcnQgPD0gSEZBMzg0eF9QT1JUSURfTUFYKSkgfHwKKwkgICAgIShody0+cG9ydF9lbmFibGVkW21hY3BvcnRdKSApeworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rpc2FibGUoaHcsIG1hY3BvcnQpOworCQlpZiAoIHJlc3VsdCA9PSAwICkgeworCQkJaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSA9IDA7CisJCX0KKwl9CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZW5hYmxlCisqCisqIElzc3VlcyB0aGUgZW5hYmxlIGNvbW1hbmQgdG8gZW5hYmxlIGNvbW11bmljYXRpb25zIG9uIG9uZSBvZgorKiB0aGUgTUFDcyAncG9ydHMnLiAgT25seSBtYWNwb3J0IDAgaXMgdmFsaWQgIGZvciBzdGF0aW9ucy4KKyogQVBzIG1heSBhbHNvIGVuYWJsZSBtYWNwb3J0cyAxLTYuICBPbmx5IHBvcnRzIHRoYXQgYXJlIGN1cnJlbnRseQorKiBkaXNhYmxlZCBtYXkgYmUgZW5hYmxlZC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgltYWNwb3J0CQlNQUMgcG9ydCBudW1iZXIKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGZhaWx1cmUgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvciAodGltZW91dHxiYWQgYXJnKQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2VuYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKworCURCRkVOVEVSOworCWlmICgoIWh3LT5pc2FwICYmIG1hY3BvcnQgIT0gMCkgfHwKKwkgICAgKGh3LT5pc2FwICYmICEobWFjcG9ydCA8PSBIRkEzODR4X1BPUlRJRF9NQVgpKSB8fAorCSAgICAoaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSkgKXsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9lbmFibGUoaHcsIG1hY3BvcnQpOworCQlpZiAoIHJlc3VsdCA9PSAwICkgeworCQkJaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSA9IDE7CisJCX0KKwl9CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUKKyoKKyogQmVnaW5zIHRoZSBmbGFzaCBkb3dubG9hZCBzdGF0ZS4gIENoZWNrcyB0byBzZWUgdGhhdCB3ZSdyZSBub3QKKyogYWxyZWFkeSBpbiBhIGRvd25sb2FkIHN0YXRlIGFuZCB0aGF0IGEgcG9ydCBpc24ndCBlbmFibGVkLgorKiBTZXRzIHRoZSBkb3dubG9hZCBzdGF0ZSBhbmQgcmV0cmlldmVzIHRoZSBmbGFzaCBkb3dubG9hZAorKiBidWZmZXIgbG9jYXRpb24sIGJ1ZmZlciBzaXplLCBhbmQgdGltZW91dCBsZW5ndGguCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZShoZmEzODR4X3QgKmh3KQoreworCWludAkJcmVzdWx0ID0gMDsKKwlpbnQJCWk7CisKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IGEgcG9ydCBpc24ndCBhY3RpdmUgKi8KKwlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfUE9SVElEX01BWDsgaSsrKSB7CisJCWlmICggaHctPnBvcnRfZW5hYmxlZFtpXSApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsImNhbGxlZCB3aGVuIHBvcnQgZW5hYmxlZC5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIG5vdCBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9ESVNBQkxFRCApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmV0cmlldmUgdGhlIGJ1ZmZlciBsb2Mmc2l6ZSBhbmQgdGltZW91dCAqLworCWlmICggKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLAorCQkJCSYoaHctPmJ1ZmluZm8pLCBzaXplb2YoaHctPmJ1ZmluZm8pKSkgKSB7CisJCXJldHVybiByZXN1bHQ7CisJfQorCWh3LT5idWZpbmZvLnBhZ2UgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ucGFnZSk7CisJaHctPmJ1ZmluZm8ub2Zmc2V0ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5idWZpbmZvLm9mZnNldCk7CisJaHctPmJ1ZmluZm8ubGVuID0gaGZhMzg0eDJob3N0XzE2KGh3LT5idWZpbmZvLmxlbik7CisJaWYgKCAocmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9NQVhMT0FEVElNRSwKKwkJCQkmKGh3LT5kbHRpbWVvdXQpKSkgKSB7CisJCXJldHVybiByZXN1bHQ7CisJfQorCWh3LT5kbHRpbWVvdXQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmRsdGltZW91dCk7CisKKwlXTEFOX0xPR19ERUJVRygxLCJmbGFzaGRsX2VuYWJsZVxuIik7CisKKwlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9GTEFTSEVOQUJMRUQ7CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZmxhc2hkbF9kaXNhYmxlCisqCisqIEVuZHMgdGhlIGZsYXNoIGRvd25sb2FkIHN0YXRlLiAgTm90ZSB0aGF0IHRoaXMgd2lsbCBjYXVzZSB0aGUgTUFDCisqIGZpcm13YXJlIHRvIHJlc3RhcnQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaGZhMzg0eF90ICpodykKK3sKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIGFscmVhZHkgaW4gdGhlIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXTEFOX0xPR19ERUJVRygxLCJmbGFzaGRsX2VuYWJsZVxuIik7CisKKwkvKiBUaGVyZSBpc24ndCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50LCBzbyBJIGRvbid0ICovCisJLyogIGJvdGhlciAgdy8gdGhlIHJldHVybiB2YWx1ZSAqLworCWhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX0RJU0FCTEUsIDAsIDAgLCAwKTsKKwlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9ESVNBQkxFRDsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlCisqCisqIFBlcmZvcm1zIGEgRkxBU0ggZG93bmxvYWQgb2YgYSBjaHVuayBvZiBkYXRhLiBGaXJzdCBjaGVja3MgdG8gc2VlCisqIHRoYXQgd2UncmUgaW4gdGhlIEZMQVNIIGRvd25sb2FkIHN0YXRlLCB0aGVuIHNldHMgdGhlIGRvd25sb2FkCisqIG1vZGUsIHVzZXMgdGhlIGF1eCBmdW5jdGlvbnMgdG8gMSkgY29weSB0aGUgZGF0YSB0byB0aGUgZmxhc2gKKyogYnVmZmVyLCAyKSBzZXRzIHRoZSBkb3dubG9hZCAnd3JpdGUgZmxhc2gnIG1vZGUsIDMpIHJlYWRiYWNrIGFuZAorKiBjb21wYXJlLiAgTGF0aGVyIHJpbnNlLCByZXBlYXQgYXMgbWFueSB0aW1lcyBhbiBuZWNlc3NhcnkgdG8gZ2V0CisqIGFsbCB0aGUgZ2l2ZW4gZGF0YSBpbnRvIGZsYXNoLgorKiBXaGVuIGFsbCBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdXNpbmcgdGhpcyBmdW5jdGlvbiAocG9zc2libHkKKyogcmVwZWF0ZWRseSksIGNhbGwgZHJ2cl9mbGFzaGRsX2Rpc2FibGUoKSB0byBlbmQgdGhlIGRvd25sb2FkIHN0YXRlCisqIGFuZCByZXN0YXJ0IHRoZSBNQUMuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJZGFkZHIJCUNhcmQgYWRkcmVzcyB0byB3cml0ZSB0by4gKGhvc3Qgb3JkZXIpCisqCWJ1ZgkJUHRyIHRvIGRhdGEgdG8gd3JpdGUuCisqCWxlbgkJTGVuZ3RoIG9mIGRhdGEgKGhvc3Qgb3JkZXIpLgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK2hmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlKAorCWhmYTM4NHhfdAkqaHcsCisJVUlOVDMyCQlkYWRkciwKKwl2b2lkCQkqYnVmLAorCVVJTlQzMgkJbGVuKQoreworCWludAkJcmVzdWx0ID0gMDsKKwlVSU5UMzIJCWRsYnVmYWRkcjsKKwlpbnQJCW5idXJuczsKKwlVSU5UMzIJCWJ1cm5sZW47CisJVUlOVDMyCQlidXJuZGFkZHI7CisJVUlOVDE2CQlidXJubG87CisJVUlOVDE2CQlidXJuaGk7CisJaW50CQlud3JpdGVzOworCVVJTlQ4CQkqd3JpdGVidWY7CisJVUlOVDE2CQl3cml0ZXBhZ2U7CisJVUlOVDE2CQl3cml0ZW9mZnNldDsKKwlVSU5UMzIJCXdyaXRlbGVuOworCWludAkJaTsKKwlpbnQJCWo7CisKKwlEQkZFTlRFUjsKKwlXTEFOX0xPR19ERUJVRyg1LCJkYWRkcj0weCUwOHggbGVuPSVkXG4iLCBkYWRkciwgbGVuKTsKKworCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIGZsYXNoIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXTEFOX0xPR19JTkZPKCJEb3dubG9hZCAlZCBieXRlcyB0byBmbGFzaCBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKKworCS8qIENvbnZlcnQgdG8gZmxhdCBhZGRyZXNzIGZvciBhcml0aG1ldGljICovCisJLyogTk9URTogZGxidWZmZXIgUklEIHN0b3JlcyB0aGUgYWRkcmVzcyBpbiBBVVggZm9ybWF0ICovCisJZGxidWZhZGRyID0gSEZBMzg0eF9BRERSX0FVWF9NS0ZMQVQoCisJCQlody0+YnVmaW5mby5wYWdlLCBody0+YnVmaW5mby5vZmZzZXQpOworCVdMQU5fTE9HX0RFQlVHKDUsCisJCSJkbGJ1Zi5wYWdlPTB4JTA0eCBkbGJ1Zi5vZmZzZXQ9MHglMDR4IGRsYnVmYWRkcj0weCUwOHhcbiIsCisJCWh3LT5idWZpbmZvLnBhZ2UsIGh3LT5idWZpbmZvLm9mZnNldCwgZGxidWZhZGRyKTsKKworI2lmIDAKK1dMQU5fTE9HX1dBUk5JTkcoImRsYnVmQDB4JTA2bHggbGVuPSVkIHRvPSVkXG4iLCBkbGJ1ZmFkZHIsIGh3LT5idWZpbmZvLmxlbiwgaHctPmRsdGltZW91dCk7CisjZW5kaWYKKwkvKiBDYWxjdWxhdGlvbnMgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IGZpbGxzIG9mIHRoZSBkbGJ1ZmZlciB0byBkbworCSAqIGFuZCBob3cgbWFueSBVU0Igd21lbXJlcSdzIHRvIGRvIGZvciBlYWNoIGZpbGwuICBBdCB0aGlzIHBvaW50CisJICogaW4gdGltZSwgdGhlIGRsYnVmZmVyIHNpemUgYW5kIHRoZSB3bWVtcmVxIHNpemUgYXJlIHRoZSBzYW1lLgorCSAqIFRoZXJlZm9yZSwgbndyaXRlcyBzaG91bGQgYWx3YXlzIGJlIDEuICBUaGUgZXh0cmEgY29tcGxleGl0eQorCSAqIGhlcmUgaXMgYSBoZWRnZSBhZ2FpbnN0IGZ1dHVyZSBjaGFuZ2VzLgorCSAqLworCisJLyogRmlndXJlIG91dCBob3cgbWFueSB0aW1lcyB0byBkbyB0aGUgZmxhc2ggcHJvZ3JhbW1pbmcgKi8KKwluYnVybnMgPSBsZW4gLyBody0+YnVmaW5mby5sZW47CisJbmJ1cm5zICs9IChsZW4gJSBody0+YnVmaW5mby5sZW4pID8gMSA6IDA7CisKKwkvKiBGb3IgZWFjaCBmbGFzaCBwcm9ncmFtIGN5Y2xlLCBob3cgbWFueSBVU0Igd21lbXJlcSdzIGFyZSBuZWVkZWQ/ICovCisJbndyaXRlcyA9IGh3LT5idWZpbmZvLmxlbiAvIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTjsKKwlud3JpdGVzICs9IChody0+YnVmaW5mby5sZW4gJSBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pID8gMSA6IDA7CisKKwkvKiBGb3IgZWFjaCBidXJuICovCisJZm9yICggaSA9IDA7IGkgPCBuYnVybnM7IGkrKykgeworCQkvKiBHZXQgdGhlIGRlc3QgYWRkcmVzcyBhbmQgbGVuICovCisJCWJ1cm5sZW4gPSAobGVuIC0gKGh3LT5idWZpbmZvLmxlbiAqIGkpKSA+IGh3LT5idWZpbmZvLmxlbiA/CisJCQkJaHctPmJ1ZmluZm8ubGVuIDoKKwkJCQkobGVuIC0gKGh3LT5idWZpbmZvLmxlbiAqIGkpKTsKKwkJYnVybmRhZGRyID0gZGFkZHIgKyAoaHctPmJ1ZmluZm8ubGVuICogaSk7CisJCWJ1cm5sbyA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYoYnVybmRhZGRyKTsKKwkJYnVybmhpID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoYnVybmRhZGRyKTsKKworCQlXTEFOX0xPR19JTkZPKCJXcml0aW5nICVkIGJ5dGVzIHRvIGZsYXNoIEAweCUwNnhcbiIsCisJCQlidXJubGVuLCBidXJuZGFkZHIpOworCisJCS8qIFNldCB0aGUgZG93bmxvYWQgbW9kZSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9OViwKKwkJCQlidXJubG8sIGJ1cm5oaSwgYnVybmxlbik7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoImRvd25sb2FkKE5WLGxvPSV4LGhpPSV4LGxlbj0leCkgIgorCQkJCSJjbWQgZmFpbGVkLCByZXN1bHQ9JWQuIEFib3J0aW5nIGQvbFxuIiwKKwkJCQlidXJubG8sIGJ1cm5oaSwgYnVybmxlbiwgcmVzdWx0KTsKKwkJCWdvdG8gZXhpdF9wcm9jOworCQl9CisKKwkJLyogY29weSB0aGUgZGF0YSB0byB0aGUgZmxhc2ggZG93bmxvYWQgYnVmZmVyICovCisJCWZvciAoIGo9MDsgaiA8IG53cml0ZXM7IGorKykgeworCQkJd3JpdGVidWYgPSBidWYgKworCQkJCShpKmh3LT5idWZpbmZvLmxlbikgKworCQkJCShqKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTik7CisKKwkJCXdyaXRlcGFnZSA9IEhGQTM4NHhfQUREUl9DTURfTUtQQUdFKAorCQkJCQlkbGJ1ZmFkZHIgKworCQkJCQkoaipIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pKTsKKwkJCXdyaXRlb2Zmc2V0ID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRigKKwkJCQkJZGxidWZhZGRyICsKKwkJCQkJKGoqSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKSk7CisKKwkJCXdyaXRlbGVuID0gYnVybmxlbi0oaipIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pOworCQkJd3JpdGVsZW4gPSB3cml0ZWxlbiAgPiBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4gPworCQkJCQlIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4gOgorCQkJCQl3cml0ZWxlbjsKKworCQkJcmVzdWx0ID0gaGZhMzg0eF9kb3dtZW1fd2FpdCggaHcsCisJCQkJCXdyaXRlcGFnZSwKKwkJCQkJd3JpdGVvZmZzZXQsCisJCQkJCXdyaXRlYnVmLAorCQkJCQl3cml0ZWxlbiApOworI2lmIDAKKworQ29tbWVudCBvdXQgZm9yIGRlYnVnZ2luZywgYXNzdW1lIHRoZSB3cml0ZSB3YXMgc3VjY2Vzc2Z1bC4KKwkJCWlmIChyZXN1bHQpIHsKKwkJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkJIldyaXRlIHRvIGRsIGJ1ZmZlciBmYWlsZWQsICIKKwkJCQkJInJlc3VsdD0weCUwNHguIEFib3J0aW5nLlxuIiwKKwkJCQkJcmVzdWx0KTsKKwkJCQlnb3RvIGV4aXRfcHJvYzsKKwkJCX0KKyNlbmRpZgorCisJCX0KKworCQkvKiBzZXQgdGhlIGRvd25sb2FkICd3cml0ZSBmbGFzaCcgbW9kZSAqLworCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9kb3dubG9hZChodywKKwkJCQlIRkEzODR4X1BST0dNT0RFX05WV1JJVEUsCisJCQkJMCwwLDApOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCSJkb3dubG9hZChOVldSSVRFLGxvPSV4LGhpPSV4LGxlbj0leCkgIgorCQkJCSJjbWQgZmFpbGVkLCByZXN1bHQ9JWQuIEFib3J0aW5nIGQvbFxuIiwKKwkJCQlidXJubG8sIGJ1cm5oaSwgYnVybmxlbiwgcmVzdWx0KTsKKwkJCWdvdG8gZXhpdF9wcm9jOworCQl9CisKKwkJLyogVE9ETzogV2UgcmVhbGx5IHNob3VsZCBkbyBhIHJlYWRiYWNrIGFuZCBjb21wYXJlLiAqLworCX0KKworZXhpdF9wcm9jOgorCisJLyogTGVhdmUgdGhlIGZpcm13YXJlIGluIHRoZSAncG9zdC1wcm9nJyBtb2RlLiAgZmxhc2hkbF9kaXNhYmxlIHdpbGwgKi8KKwkvKiAgYWN0dWFsbHkgZGlzYWJsZSBwcm9ncmFtbWluZyBtb2RlLiAgUmVtZW1iZXIsIHRoYXQgd2lsbCBjYXVzZSB0aGUgKi8KKwkvKiAgdGhlIGZpcm13YXJlIHRvIGVmZmVjdGl2ZWx5IHJlc2V0IGl0c2VsZi4gKi8KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2dldGNvbmZpZworKgorKiBQZXJmb3JtcyB0aGUgc2VxdWVuY2UgbmVjZXNzYXJ5IHRvIHJlYWQgYSBjb25maWcvaW5mbyBpdGVtLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCXJpZAkJY29uZmlnL2luZm8gcmVjb3JkIGlkIChob3N0IG9yZGVyKQorKglidWYJCWhvc3Qgc2lkZSByZWNvcmQgYnVmZmVyLiAgVXBvbiByZXR1cm4gaXQgd2lsbAorKgkJCWNvbnRhaW4gdGhlIGJvZHkgcG9ydGlvbiBvZiB0aGUgcmVjb3JkIChtaW51cyB0aGUKKyoJCQlSSUQgYW5kIGxlbikuCisqCWxlbgkJYnVmZmVyIGxlbmd0aCAoaW4gYnl0ZXMsIHNob3VsZCBtYXRjaCByZWNvcmQgbGVuZ3RoKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgktRU5PREFUQSAJbGVuZ3RoIG1pc21hdGNoIGJldHdlZW4gYXJndW1lbnQgYW5kIHJldHJpZXZlZAorKgkJCXJlY29yZC4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKQoreworCWludCAJCQlyZXN1bHQ7CisJREJGRU5URVI7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvcnJpZF93YWl0KGh3LCByaWQsIGJ1ZiwgbGVuKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBoZmEzODR4X2RydnJfZ2V0Y29uZmlnX2FzeW5jCisgKgorICogUGVyZm9ybXMgdGhlIHNlcXVlbmNlIG5lY2Vzc2FyeSB0byBwZXJmb3JtIGFuIGFzeW5jIHJlYWQgb2YKKyAqIG9mIGEgY29uZmlnL2luZm8gaXRlbS4KKyAqCisgKiBBcmd1bWVudHM6CisgKiAgICAgICBodyAgICAgICAgICAgICAgZGV2aWNlIHN0cnVjdHVyZQorICogICAgICAgcmlkICAgICAgICAgICAgIGNvbmZpZy9pbmZvIHJlY29yZCBpZCAoaG9zdCBvcmRlcikKKyAqICAgICAgIGJ1ZiAgICAgICAgICAgICBob3N0IHNpZGUgcmVjb3JkIGJ1ZmZlci4gIFVwb24gcmV0dXJuIGl0IHdpbGwKKyAqICAgICAgICAgICAgICAgICAgICAgICBjb250YWluIHRoZSBib2R5IHBvcnRpb24gb2YgdGhlIHJlY29yZCAobWludXMgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgUklEIGFuZCBsZW4pLgorICogICAgICAgbGVuICAgICAgICAgICAgIGJ1ZmZlciBsZW5ndGggKGluIGJ5dGVzLCBzaG91bGQgbWF0Y2ggcmVjb3JkIGxlbmd0aCkKKyAqICAgICAgIGNiZm4gICAgICAgICAgICBjYWxsZXIgc3VwcGxpZWQgY2FsbGJhY2ssIGNhbGxlZCB3aGVuIHRoZSBjb21tYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgaXMgZG9uZSAoc3VjY2Vzc2Z1bCBvciBub3QpLgorICogICAgICAgY2JmbmRhdGEgICAgICAgIHBvaW50ZXIgdG8gc29tZSBjYWxsZXIgc3VwcGxpZWQgZGF0YSB0aGF0IHdpbGwgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlIGNiZm4uCisgKgorICogUmV0dXJuczoKKyAqICAgICAgIG5vdGhpbmcgICAgICAgICB0aGUgY2JmbiBnZXRzIGEgc3RhdHVzIGFyZ3VtZW50IGlkZW50aWZ5aW5nIGlmCisgKiAgICAgICAgICAgICAgICAgICAgICAgYW55IGVycm9ycyBvY2N1ci4KKyAqIFNpZGUgZWZmZWN0czoKKyAqICAgICAgIFF1ZXVlcyBhbiBoZmEzODR4X3VzYmNtZF90IGZvciBzdWJzZXF1ZW50IGV4ZWN1dGlvbi4KKyAqCisgKiBDYWxsIGNvbnRleHQ6CisgKiAgICAgICBBbnkKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAoraGZhMzg0eF9kcnZyX2dldGNvbmZpZ19hc3luYygKKyAgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodywKKyAgICAgICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgIHJpZCwKKyAgICAgICAgIGN0bHhfdXNlcmNiX3QgICAgICAgICAgIHVzZXJjYiwKKyAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICp1c2VyY2JfZGF0YSkKK3sKKyAgICAgICAgIHJldHVybiBoZmEzODR4X2RvcnJpZF9hc3luYyhodywgcmlkLCBOVUxMLCAwLAorCQkJCSAgICAgaGZhMzg0eF9jYl9ycmlkLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jCisgKgorICogUGVyZm9ybXMgdGhlIHNlcXVlbmNlIG5lY2Vzc2FyeSB0byB3cml0ZSBhIGNvbmZpZy9pbmZvIGl0ZW0uCisgKgorICogQXJndW1lbnRzOgorICogICAgICAgaHcgICAgICAgICAgICAgIGRldmljZSBzdHJ1Y3R1cmUKKyAqICAgICAgIHJpZCAgICAgICAgICAgICBjb25maWcvaW5mbyByZWNvcmQgaWQgKGluIGhvc3Qgb3JkZXIpCisgKiAgICAgICBidWYgICAgICAgICAgICAgaG9zdCBzaWRlIHJlY29yZCBidWZmZXIKKyAqICAgICAgIGxlbiAgICAgICAgICAgICBidWZmZXIgbGVuZ3RoIChpbiBieXRlcykKKyAqICAgICAgIHVzZXJjYiAgICAgICAgICBjb21wbGV0aW9uIGNhbGxiYWNrCisgKiAgICAgICB1c2VyY2JfZGF0YSAgICAgY29tcGxldGlvbiBjYWxsYmFjayBhcmd1bWVudAorICoKKyAqIFJldHVybnM6CisgKiAgICAgICAwICAgICAgICAgICAgICAgc3VjY2VzcworICogICAgICAgPjAgICAgICAgICAgICAgIGYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorICogICAgICAgPDAgICAgICAgICAgICAgIGRyaXZlciByZXBvcnRlZCBlcnJvcgorICoKKyAqIFNpZGUgZWZmZWN0czoKKyAqCisgKiBDYWxsIGNvbnRleHQ6CisgKiAgICAgICBwcm9jZXNzCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMoCisgICAgICAgICBoZmEzODR4X3QgICAgICAgKmh3LAorICAgICAgICAgVUlOVDE2ICAgICAgICAgIHJpZCwKKyAgICAgICAgIHZvaWQgICAgICAgICAgICAqYnVmLAorICAgICAgICAgVUlOVDE2ICAgICAgICAgIGxlbiwKKyAgICAgICAgIGN0bHhfdXNlcmNiX3QgICB1c2VyY2IsCisgICAgICAgICB2b2lkICAgICAgICAgICAgKnVzZXJjYl9kYXRhKQoreworCXJldHVybiBoZmEzODR4X2Rvd3JpZF9hc3luYyhodywgcmlkLCBidWYsIGxlbiwKKwkJCQkgICAgaGZhMzg0eF9jYl9zdGF0dXMsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2hhbmRvdmVyCisqCisqIFNlbmRzIGEgaGFuZG92ZXIgbm90aWZpY2F0aW9uIHRvIHRoZSBNQUMuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJYWRkcgkJYWRkcmVzcyBvZiBzdGF0aW9uIHRoYXQncyBsZWZ0CisqCisqIFJldHVybnM6CisqCXplcm8JCXN1Y2Nlc3MuCisqCS1FUkVTVEFSVFNZUwlyZWNlaXZlZCBzaWduYWwgd2hpbGUgd2FpdGluZyBmb3Igc2VtYXBob3JlLgorKgktRUlPCQlmYWlsZWQgdG8gd3JpdGUgdG8gYmFwLCBvciBmYWlsZWQgaW4gY21kLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2hhbmRvdmVyKCBoZmEzODR4X3QgKmh3LCBVSU5UOCAqYWRkcikKK3sKKyAgICAgICAgREJGRU5URVI7CisJV0xBTl9MT0dfRVJST1IoIk5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIFVTQiFcbiIpOworCURCRkVYSVQ7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfbG93X2xldmVsCisqCisqIFdyaXRlIHRlc3QgY29tbWFuZHMgdG8gdGhlIGNhcmQuICBTb21lIHRlc3QgY29tbWFuZHMgZG9uJ3QgbWFrZQorKiBzZW5zZSB3aXRob3V0IHByaW9yIHNldC11cC4gIEZvciBleGFtcGxlLCBjb250aW5vdXMgVFggaXNuJ3QgdmVyeQorKiB1c2VmdWwgdW50aWwgeW91IHNldCB0aGUgY2hhbm5lbC4gIFRoYXQgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqICAgICAgcHJvY2VzcyB0aHJlYWQKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9sb3dfbGV2ZWwoaGZhMzg0eF90ICpodywgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCkKK3sKKwlpbnQgICAgICAgICAgICAgcmVzdWx0OworCURCRkVOVEVSOworCisJLyogRG8gaSBuZWVkIGEgaG9zdDJoZmEuLi4gY29udmVyc2lvbiA/ICovCisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsIGNtZCk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfbW1pX3JlYWQKKyoKKyogUmVhZCBtbWkgcmVnaXN0ZXJzLiAgbW1pIGlzIGludGVyc2lsLXNwZWFrIGZvciB0aGUgYmFzZWJhbmQKKyogcHJvY2Vzc29yIHJlZ2lzdGVycy4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBodyAgICAgICAgICAgICAgZGV2aWNlIHN0cnVjdHVyZQorKiAgICAgICByZWdpc3RlciAgICAgICAgVGhlIHRlc3QgcmVnaXN0ZXIgdG8gYmUgYWNjZXNzZWQgKG11c3QgYmUgZXZlbiAjKS4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgICAgICAgICAgICAgIHN1Y2Nlc3MKKyogICAgICAgPjAgICAgICAgICAgICAgIGYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKiAgICAgICA8MCAgICAgICAgICAgICAgZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKiAgICAgICBwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfbW1pX3JlYWQoaGZhMzg0eF90ICpodywgVUlOVDMyIGFkZHIsIFVJTlQzMiAqcmVzcCkKK3sKKyNpZiAwCisgICAgICAgIGludCAgICAgICAgICAgICByZXN1bHQgPSAwOworICAgICAgICBVSU5UMTYgIGNtZF9jb2RlID0gKFVJTlQxNikgMHgzMDsKKyAgICAgICAgVUlOVDE2IHBhcmFtID0gKFVJTlQxNikgYWRkcjsKKyAgICAgICAgREJGRU5URVI7CisKKyAgICAgICAgLyogRG8gaSBuZWVkIGEgaG9zdDJoZmEuLi4gY29udmVyc2lvbiA/ICovCisgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgY21kX2NvZGUpOworCisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisjZW5kaWYKK3JldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX21taV93cml0ZQorKgorKiBSZWFkIG1taSByZWdpc3RlcnMuICBtbWkgaXMgaW50ZXJzaWwtc3BlYWsgZm9yIHRoZSBiYXNlYmFuZAorKiBwcm9jZXNzb3IgcmVnaXN0ZXJzLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIGh3ICAgICAgICAgICAgICBkZXZpY2Ugc3RydWN0dXJlCisqICAgICAgIGFkZHIgICAgICAgICAgICBUaGUgdGVzdCByZWdpc3RlciB0byBiZSBhY2Nlc3NlZCAobXVzdCBiZSBldmVuICMpLgorKiAgICAgICBkYXRhICAgICAgICAgICAgVGhlIGRhdGEgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlZ2lzdGVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgICAgICAgICAgICAgc3VjY2VzcworKiAgICAgICA+MCAgICAgICAgICAgICAgZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqICAgICAgIDwwICAgICAgICAgICAgICBkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqICAgICAgIHByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQKK2hmYTM4NHhfZHJ2cl9tbWlfd3JpdGUoaGZhMzg0eF90ICpodywgVUlOVDMyIGFkZHIsIFVJTlQzMiBkYXRhKQoreworI2lmIDAKKyAgICAgICAgaW50ICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICAgIFVJTlQxNiAgY21kX2NvZGUgPSAoVUlOVDE2KSAweDMxOworICAgICAgICBVSU5UMTYgcGFyYW0wID0gKFVJTlQxNikgYWRkcjsKKyAgICAgICAgVUlOVDE2IHBhcmFtMSA9IChVSU5UMTYpIGRhdGE7CisgICAgICAgIERCRkVOVEVSOworCisgICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsIm1taSB3cml0ZSA6IGFkZHIgPSAweCUwOGx4XG4iLCBhZGRyKTsKKyAgICAgICAgV0xBTl9MT0dfREVCVUcoMSwibW1pIHdyaXRlIDogZGF0YSA9IDB4JTA4bHhcbiIsIGRhdGEpOworCisgICAgICAgIC8qIERvIGkgbmVlZCBhIGhvc3QyaGZhLi4uIGNvbnZlcnNpb24gPyAqLworICAgICAgICByZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsIGNtZF9jb2RlKTsKKworICAgICAgICBEQkZFWElUOworICAgICAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCityZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUKKyoKKyogRW5kcyB0aGUgcmFtIGRvd25sb2FkIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAoraGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUoaGZhMzg0eF90ICpodykKK3sKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIGFscmVhZHkgaW4gdGhlIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRCApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJV0xBTl9MT0dfREVCVUcoMywicmFtZGxfZGlzYWJsZSgpXG4iKTsKKworCS8qIFRoZXJlIGlzbid0IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQsIHNvIEkgZG9uJ3QgKi8KKwkvKiAgYm90aGVyICB3LyB0aGUgcmV0dXJuIHZhbHVlICovCisJaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfRElTQUJMRSwgMCwgMCAsIDApOworCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZQorKgorKiBCZWdpbnMgdGhlIHJhbSBkb3dubG9hZCBzdGF0ZS4gIENoZWNrcyB0byBzZWUgdGhhdCB3ZSdyZSBub3QKKyogYWxyZWFkeSBpbiBhIGRvd25sb2FkIHN0YXRlIGFuZCB0aGF0IGEgcG9ydCBpc24ndCBlbmFibGVkLgorKiBTZXRzIHRoZSBkb3dubG9hZCBzdGF0ZSBhbmQgY2FsbHMgY21kX2Rvd25sb2FkIHdpdGggdGhlCisqIEVOQUJMRV9WT0xBVElMRSBzdWJjb21tYW5kIGFuZCB0aGUgZXhlYWRkciBhcmd1bWVudC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglleGVhZGRyCQl0aGUgY2FyZCBleGVjdXRpb24gYWRkcmVzcyB0aGF0IHdpbGwgYmUKKyogICAgICAgICAgICAgICAgICAgICAgIGp1bXBlZCB0byB3aGVuIHJhbWRsX2Rpc2FibGUoKSBpcyBjYWxsZWQKKyoJCQkoaG9zdCBvcmRlcikuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAoraGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMzIgZXhlYWRkcikKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJVUlOVDE2CQlsb3dhZGRyOworCVVJTlQxNgkJaGlhZGRyOworCWludAkJaTsKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IGEgcG9ydCBpc24ndCBhY3RpdmUgKi8KKwlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfUE9SVElEX01BWDsgaSsrKSB7CisJCWlmICggaHctPnBvcnRfZW5hYmxlZFtpXSApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCSJDYW4ndCBkb3dubG9hZCB3aXRoIGEgbWFjcG9ydCBlbmFibGVkLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIENoZWNrIHRoYXQgd2UncmUgbm90IGFscmVhZHkgaW4gYSBkb3dubG9hZCBzdGF0ZSAqLworCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEICkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJEb3dubG9hZCBzdGF0ZSBub3QgZGlzYWJsZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJV0xBTl9MT0dfREVCVUcoMywicmFtZGxfZW5hYmxlLCBleGVhZGRyPTB4JTA4eFxuIiwgZXhlYWRkcik7CisKKwkvKiBDYWxsIHRoZSBkb3dubG9hZCgxLGFkZHIpIGZ1bmN0aW9uICovCisJbG93YWRkciA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYoZXhlYWRkcik7CisJaGlhZGRyID0gIEhGQTM4NHhfQUREUl9DTURfTUtQQUdFKGV4ZWFkZHIpOworCisJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfUkFNLAorCQkJbG93YWRkciwgaGlhZGRyLCAwKTsKKworCWlmICggcmVzdWx0ID09IDApIHsKKwkJLyogU2V0IHRoZSBkb3dubG9hZCBzdGF0ZSAqLworCQlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEOworCX0gZWxzZSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiY21kX2Rvd25sb2FkKDB4JTA0eCwgMHglMDR4KSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsCisJCQlsb3dhZGRyLAorCQkJaGlhZGRyLAorCQkJcmVzdWx0KTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9yYW1kbF93cml0ZQorKgorKiBQZXJmb3JtcyBhIFJBTSBkb3dubG9hZCBvZiBhIGNodW5rIG9mIGRhdGEuIEZpcnN0IGNoZWNrcyB0byBzZWUKKyogdGhhdCB3ZSdyZSBpbiB0aGUgUkFNIGRvd25sb2FkIHN0YXRlLCB0aGVuIHVzZXMgdGhlIFtyZWFkfHdyaXRlXW1lbSBVU0IKKyogY29tbWFuZHMgdG8gMSkgY29weSB0aGUgZGF0YSwgMikgcmVhZGJhY2sgYW5kIGNvbXBhcmUuICBUaGUgZG93bmxvYWQKKyogc3RhdGUgaXMgdW5hZmZlY3RlZC4gIFdoZW4gYWxsIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB1c2luZworKiB0aGlzIGZ1bmN0aW9uLCBjYWxsIGRydnJfcmFtZGxfZGlzYWJsZSgpIHRvIGVuZCB0aGUgZG93bmxvYWQgc3RhdGUKKyogYW5kIHJlc3RhcnQgdGhlIE1BQy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglkYWRkcgkJQ2FyZCBhZGRyZXNzIHRvIHdyaXRlIHRvLiAoaG9zdCBvcmRlcikKKyoJYnVmCQlQdHIgdG8gZGF0YSB0byB3cml0ZS4KKyoJbGVuCQlMZW5ndGggb2YgZGF0YSAoaG9zdCBvcmRlcikuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAoraGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBkYWRkciwgdm9pZCogYnVmLCBVSU5UMzIgbGVuKQoreworCWludAkJcmVzdWx0ID0gMDsKKwlpbnQJCW53cml0ZXM7CisJVUlOVDgJCSpkYXRhID0gYnVmOworCWludAkJaTsKKwlVSU5UMzIJCWN1cnJhZGRyOworCVVJTlQxNgkJY3VycnBhZ2U7CisJVUlOVDE2CQljdXJyb2Zmc2V0OworCVVJTlQxNgkJY3VycmxlbjsKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayB0aGF0IHdlJ3JlIGluIHRoZSByYW0gZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXTEFOX0xPR19JTkZPKCJXcml0aW5nICVkIGJ5dGVzIHRvIHJhbSBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKKworCS8qIEhvdyBtYW55IGRvd21lbSBjYWxscz8gICovCisJbndyaXRlcyA9IGxlbiAvIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTjsKKwlud3JpdGVzICs9IGxlbiAlIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiA/IDEgOiAwOworCisJLyogRG8gYmxvY2tpbmcgd21lbSdzICovCisJZm9yKGk9MDsgaSA8IG53cml0ZXM7IGkrKykgeworCQkvKiBtYWtlIGFkZHJlc3MgYXJncyAqLworCQljdXJyYWRkciA9IGRhZGRyICsgKGkgKiBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pOworCQljdXJycGFnZSA9IEhGQTM4NHhfQUREUl9DTURfTUtQQUdFKGN1cnJhZGRyKTsKKwkJY3Vycm9mZnNldCA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYoY3VycmFkZHIpOworCQljdXJybGVuID0gbGVuIC0gKGkgKiBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pOworCQlpZiAoIGN1cnJsZW4gPiBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pIHsKKwkJCWN1cnJsZW4gPSBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU47CisJCX0KKworCSAJLyogRG8gYmxvY2tpbmcgY3RseCAqLworCQlyZXN1bHQgPSBoZmEzODR4X2Rvd21lbV93YWl0KCBodywKKwkJCQljdXJycGFnZSwKKwkJCQljdXJyb2Zmc2V0LAorCQkJCWRhdGEgKyAoaSpIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pLAorCQkJCWN1cnJsZW4gKTsKKworCQlpZiAocmVzdWx0KSBicmVhazsKKworCQkvKiBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGhhdmUgYSByZWFkYmFjay4gKi8KKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9yZWFkcGRhCisqCisqIFBlcmZvcm1zIHRoZSBzZXF1ZW5jZSB0byByZWFkIHRoZSBQREEgc3BhY2UuICBOb3RlIHRoZXJlIGlzIG5vCisqIGRydnJfd3JpdGVwZGEoKSBmdW5jdGlvbi4gIFdyaXRpbmcgYSBQREEgaXMKKyogZ2VuZXJhbGx5IGltcGxlbWVudGVkIGJ5IGEgY2FsbGluZyBjb21wb25lbnQgdmlhIGNhbGxzIHRvCisqIGNtZF9kb3dubG9hZCBhbmQgd3JpdGluZyB0byB0aGUgZmxhc2ggZG93bmxvYWQgYnVmZmVyIHZpYSB0aGUKKyogYXV4IHJlZ3MuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJYnVmCQlidWZmZXIgdG8gc3RvcmUgUERBIGluCisqCWxlbgkJYnVmZmVyIGxlbmd0aAorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgktRVRJTUVPVVQJdGltb3V0IHdhaXRpbmcgZm9yIHRoZSBjbWQgcmVncyB0byBiZWNvbWUKKyoJCQlhdmFpbGFibGUsIG9yIHdhaXRpbmcgZm9yIHRoZSBjb250cm9sIHJlZworKgkJCXRvIGluZGljYXRlIHRoZSBBdXggcG9ydCBpcyBlbmFibGVkLgorKgktRU5PREFUQQl0aGUgYnVmZmVyIGRvZXMgTk9UIGNvbnRhaW4gYSB2YWxpZCBQREEuCisqCQkJRWl0aGVyIHRoZSBjYXJkIFBEQSBpcyBiYWQsIG9yIHRoZSBhdXhkYXRhCisqCQkJcmVhZHMgYXJlIGdpdmluZyB1cyBnYXJiYWdlLgorCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIG9yIG5vbi1jYXJkIGludGVycnVwdC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9yZWFkcGRhKGhmYTM4NHhfdCAqaHcsIHZvaWQgKmJ1ZiwgVUlOVCBsZW4pCit7CisJaW50CQlyZXN1bHQgPSAwOworCVVJTlQxNgkJKnBkYSA9IGJ1ZjsKKwlpbnQJCXBkYW9rID0gMDsKKwlpbnQJCW1vcmVwZHJzID0gMTsKKwlpbnQJCWN1cnJwZHIgPSAwOwkvKiB3b3JkIG9mZnNldCBvZiB0aGUgY3VycmVudCBwZHIgKi8KKwlzaXplX3QJCWk7CisJVUlOVDE2CQlwZHJsZW47CQkvKiBwZHIgbGVuZ3RoIGluIGJ5dGVzLCBob3N0IG9yZGVyICovCisJVUlOVDE2CQlwZHJjb2RlOwkvKiBwZHIgY29kZSwgaG9zdCBvcmRlciAqLworCVVJTlQxNgkJY3VycnBhZ2U7CisJVUlOVDE2CQljdXJyb2Zmc2V0OworCXN0cnVjdCBwZGFsb2MgeworCQlVSU5UMzIJY2FyZGFkZHI7CisJCVVJTlQxNglhdXhjdGw7CisJfSBwZGFsb2NbXSA9CisJeworCQl7IEhGQTM4NDJfUERBX0JBU0UsCQkwfSwKKwkJeyBIRkEzODQxX1BEQV9CQVNFLAkJMH0sCisJCXsgSEZBMzg0MV9QREFfQk9HVVNfQkFTRSwJMH0KKwl9OworCisJREJGRU5URVI7CisKKwkvKiBSZWFkIHRoZSBwZGEgZnJvbSBlYWNoIGtub3duIGFkZHJlc3MuICAqLworCWZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZGFsb2MpOyBpKyspIHsKKwkJLyogTWFrZSBhZGRyZXNzICovCisJCWN1cnJwYWdlID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UocGRhbG9jW2ldLmNhcmRhZGRyKTsKKwkJY3Vycm9mZnNldCA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYocGRhbG9jW2ldLmNhcmRhZGRyKTsKKworCQlyZXN1bHQgPSBoZmEzODR4X2Rvcm1lbV93YWl0KGh3LAorCQkJY3VycnBhZ2UsCisJCQljdXJyb2Zmc2V0LAorCQkJYnVmLAorCQkJbGVuKTsJCS8qIHVuaXRzIG9mIGJ5dGVzICovCisKKwkJaWYgKHJlc3VsdCkgeworCQkJV0xBTl9MT0dfV0FSTklORygKKwkJCQkJICAiUmVhZCBmcm9tIGluZGV4ICV6ZCBmYWlsZWQsIGNvbnRpbnVpbmdcbiIsCisJCQkJaSApOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBUZXN0IGZvciBnYXJiYWdlICovCisJCXBkYW9rID0gMTsJLyogaW5pdGlhbGx5IGFzc3VtZSBnb29kICovCisJCW1vcmVwZHJzID0gMTsKKwkJd2hpbGUgKCBwZGFvayAmJiBtb3JlcGRycyApIHsKKwkJCXBkcmxlbiA9IGhmYTM4NHgyaG9zdF8xNihwZGFbY3VycnBkcl0pICogMjsKKwkJCXBkcmNvZGUgPSBoZmEzODR4Mmhvc3RfMTYocGRhW2N1cnJwZHIrMV0pOworCQkJLyogVGVzdCB0aGUgcmVjb3JkIGxlbmd0aCAqLworCQkJaWYgKCBwZHJsZW4gPiBIRkEzODR4X1BEUl9MRU5fTUFYIHx8IHBkcmxlbiA9PSAwKSB7CisJCQkJV0xBTl9MT0dfRVJST1IoInBkcmxlbiBpbnZhbGlkPSVkXG4iLAorCQkJCQlwZHJsZW4pOworCQkJCXBkYW9rID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIFRlc3QgdGhlIGNvZGUgKi8KKwkJCWlmICggIWhmYTM4NHhfaXNnb29kX3BkcmNvZGUocGRyY29kZSkgKSB7CisJCQkJV0xBTl9MT0dfRVJST1IoInBkcmNvZGUgaW52YWxpZD0lZFxuIiwKKwkJCQkJcGRyY29kZSk7CisJCQkJcGRhb2sgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogVGVzdCBmb3IgY29tcGxldGlvbiAqLworCQkJaWYgKCBwZHJjb2RlID09IEhGQTM4NHhfUERSX0VORF9PRl9QREEpIHsKKwkJCQltb3JlcGRycyA9IDA7CisJCQl9CisKKwkJCS8qIE1vdmUgdG8gdGhlIG5leHQgcGRyIChpZiBuZWNlc3NhcnkpICovCisJCQlpZiAoIG1vcmVwZHJzICkgeworCQkJCS8qIG5vdGUgdGhlIGFjY2VzcyB0byBwZGFbXSwgbmVlZCB3b3JkcyBoZXJlICovCisJCQkJY3VycnBkciArPSBoZmEzODR4Mmhvc3RfMTYocGRhW2N1cnJwZHJdKSArIDE7CisJCQl9CisJCX0KKwkJaWYgKCBwZGFvayApIHsKKwkJCVdMQU5fTE9HX0lORk8oCisJCQkJIlBEQSBSZWFkIGZyb20gMHglMDh4IGluICVzIHNwYWNlLlxuIiwKKwkJCQlwZGFsb2NbaV0uY2FyZGFkZHIsCisJCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAwID8gIkVYVERTIiA6CisJCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAxID8gIk5WIiA6CisJCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAyID8gIlBIWSIgOgorCQkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gMyA/ICJJQ1NSQU0iIDoKKwkJCQkiPGJvZ3VzIGF1eGN0bD4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJlc3VsdCA9IHBkYW9rID8gMCA6IC1FTk9EQVRBOworCisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDMsIkZhaWx1cmU6IHBkYSBpcyBub3Qgb2theVxuIik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfc2V0Y29uZmlnCisqCisqIFBlcmZvcm1zIHRoZSBzZXF1ZW5jZSBuZWNlc3NhcnkgdG8gd3JpdGUgYSBjb25maWcvaW5mbyBpdGVtLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCXJpZAkJY29uZmlnL2luZm8gcmVjb3JkIGlkIChpbiBob3N0IG9yZGVyKQorKglidWYJCWhvc3Qgc2lkZSByZWNvcmQgYnVmZmVyCisqCWxlbgkJYnVmZmVyIGxlbmd0aCAoaW4gYnl0ZXMpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByaWQsIHZvaWQgKmJ1ZiwgVUlOVDE2IGxlbikKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3dyaWRfd2FpdChodywgcmlkLCBidWYsIGxlbik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfc3RhcnQKKyoKKyogSXNzdWVzIHRoZSBNQUMgaW5pdGlhbGl6ZSBjb21tYW5kLCBzZXRzIHVwIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzLAorKiBhbmQgZW5hYmxlcyB0aGUgaW50ZXJydXB0cy4gIEFmdGVyIHRoaXMgZnVuY3Rpb24gY29tcGxldGVzLCB0aGUKKyogbG93LWxldmVsIHN0dWZmIHNob3VsZCBiZSByZWFkeSBmb3IgYW55L2FsbCBjb21tYW5kcy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3N0YXJ0KGhmYTM4NHhfdCAqaHcpCit7CisJaW50CQlyZXN1bHQ7CisJREJGRU5URVI7CisKKwltaWdodF9zbGVlcCgpOworCisJaWYgKHVzYl9jbGVhcl9oYWx0KGh3LT51c2IsIGh3LT5lbmRwX2luKSkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJGYWlsZWQgdG8gcmVzZXQgYnVsayBpbiBlbmRwb2ludC5cbiIpOworCX0KKworCWlmICh1c2JfY2xlYXJfaGFsdChody0+dXNiLCBody0+ZW5kcF9vdXQpKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJIkZhaWxlZCB0byByZXNldCBidWxrIG91dCBlbmRwb2ludC5cbiIpOworCX0KKworCS8qIFN5bmNocm9ub3VzIHVubGluaywgaW4gY2FzZSB3ZSdyZSB0cnlpbmcgdG8gcmVzdGFydCB0aGUgZHJpdmVyICovCisJdXNiX2tpbGxfdXJiKCZody0+cnhfdXJiKTsKKworCS8qIFBvc3QgdGhlIElOIHVyYiAqLworCXJlc3VsdCA9IHN1Ym1pdF9yeF91cmIoaHcsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJGYXRhbCwgZmFpbGVkIHRvIHN1Ym1pdCBSWCBVUkIsIHJlc3VsdD0lZFxuIiwKKwkJCXJlc3VsdCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBjYWxsIGluaXRpYWxpemUgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2NtZF9pbml0aWFsaXplKGh3KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJdXNiX2tpbGxfdXJiKCZody0+cnhfdXJiKTsKKwkJV0xBTl9MT0dfRVJST1IoCisJCQkiY21kX2luaXRpYWxpemUoKSBmYWlsZWQsIHJlc3VsdD0lZFxuIiwKKwkJCXJlc3VsdCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX1JVTk5JTkc7CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfc3RvcAorKgorKiBTaHV0cyBkb3duIHRoZSBNQUMgdG8gdGhlIHBvaW50IHdoZXJlIGl0IGlzIHNhZmUgdG8gdW5sb2FkIHRoZQorKiBkcml2ZXIuICBBbnkgc3Vic3lzdGVtIHRoYXQgbWF5IGJlIGhvbGRpbmcgYSBkYXRhIG9yIGZ1bmN0aW9uCisqIHB0ciBpbnRvIHRoZSBkcml2ZXIgbXVzdCBiZSBjbGVhcmVkL2RlaW5pdGlhbGl6ZWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitoZmEzODR4X2RydnJfc3RvcChoZmEzODR4X3QgKmh3KQoreworCWludAlyZXN1bHQgPSAwOworCWludAlpOworCURCRkVOVEVSOworCisJbWlnaHRfc2xlZXAoKTsKKworCS8qIFRoZXJlJ3Mgbm8gbmVlZCBmb3Igc3BpbmxvY2tzIGhlcmUuIFRoZSBVU0IgImRpc2Nvbm5lY3QiCisJICogZnVuY3Rpb24gc2V0cyB0aGlzICJyZW1vdmVkIiBmbGFnIGFuZCB0aGVuIGNhbGxzIHVzLgorCSAqLworCWlmICggIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgKSB7CisJCS8qIENhbGwgaW5pdGlhbGl6ZSB0byBsZWF2ZSB0aGUgTUFDIGluIGl0cyAncmVzZXQnIHN0YXRlICovCisJCWhmYTM4NHhfY21kX2luaXRpYWxpemUoaHcpOworCisJCS8qIENhbmNlbCB0aGUgcnh1cmIgKi8KKwkJdXNiX2tpbGxfdXJiKCZody0+cnhfdXJiKTsKKwl9CisKKwlody0+bGlua19zdGF0dXMgPSBIRkEzODR4X0xJTktfTk9UQ09OTkVDVEVEOworCWh3LT5zdGF0ZSA9IEhGQTM4NHhfU1RBVEVfSU5JVDsKKworCWRlbF90aW1lcl9zeW5jKCZody0+Y29tbXNxdWFsX3RpbWVyKTsKKworCS8qIENsZWFyIGFsbCB0aGUgcG9ydCBzdGF0dXMgKi8KKwlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfTlVNUE9SVFNfTUFYOyBpKyspIHsKKwkJaHctPnBvcnRfZW5hYmxlZFtpXSA9IDA7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3R4ZnJhbWUKKyoKKyogVGFrZXMgYSBmcmFtZSBmcm9tIHByaXNtMnN0YSBhbmQgcXVldWVzIGl0IGZvciB0cmFuc21pc3Npb24uCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJc2tiCQlwYWNrZXQgYnVmZmVyIHN0cnVjdC4gIENvbnRhaW5zIGFuIDgwMi4xMQorKgkJCWRhdGEgZnJhbWUuCisqICAgICAgIHA4MDIxMV9oZHIgICAgICBwb2ludHMgdG8gdGhlIDgwMi4xMSBoZWFkZXIgZm9yIHRoZSBwYWNrZXQuCisqIFJldHVybnM6CisqCTAJCVN1Y2Nlc3MgYW5kIG1vcmUgYnVmZnMgYXZhaWxhYmxlCisqCTEJCVN1Y2Nlc3MgYnV0IG5vIG1vcmUgYnVmZnMKKyoJMgkJQWxsb2NhdGlvbiBmYWlsdXJlCisqCTQJCUJ1ZmZlciBmdWxsIG9yIHF1ZXVlIGJ1c3kKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3R4ZnJhbWUoaGZhMzg0eF90ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLCBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKQorCit7CisJaW50CQl1c2Jwa3RsZW4gPSBzaXplb2YoaGZhMzg0eF90eF9mcmFtZV90KTsKKwlpbnQJCXJlc3VsdDsKKwlpbnQJCXJldDsKKwljaGFyCQkqcHRyOworCisJREJGRU5URVI7CisKKwlpZiAoaHctPnR4X3VyYi5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCVdMQU5fTE9HX1dBUk5JTkcoIlRYIFVSQiBhbHJlYWR5IGluIHVzZVxuIik7CisJCXJlc3VsdCA9IDM7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBCdWlsZCBUeCBmcmFtZSBzdHJ1Y3R1cmUgKi8KKwkvKiBTZXQgdXAgdGhlIGNvbnRyb2wgZmllbGQgKi8KKwltZW1zZXQoJmh3LT50eGJ1ZmYudHhmcm0uZGVzYywgMCwgc2l6ZW9mKGh3LT50eGJ1ZmYudHhmcm0uZGVzYykpOworCisJLyogU2V0dXAgdGhlIHVzYiB0eXBlIGZpZWxkICovCisJaHctPnR4YnVmZi50eXBlID0gaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX1RYRlJNKTsKKworCS8qIFNldCB1cCB0aGUgc3dfc3VwcG9ydCBmaWVsZCB0byBpZGVudGlmeSB0aGlzIGZyYW1lICovCisJaHctPnR4YnVmZi50eGZybS5kZXNjLnN3X3N1cHBvcnQgPSAweDAxMjM7CisKKy8qIFR4IGNvbXBsZXRlIGFuZCBUeCBleGNlcHRpb24gZGlzYWJsZSBwZXIgZGxlYWNoLiAgTWlnaHQgYmUgY2F1c2luZworICogYnVmIGRlcGxldGlvbgorICovCisvLyNkZWZpbmUgRE9FWEMgIFNMUCAtLSBkb2JvdGggYnJlYWtzIGhvcnJpYmx5IHVuZGVyIGxvYWQsIGRvZXhjIGxlc3Mgc28uCisjaWYgZGVmaW5lZChET0JPVEgpCisJaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgPQorCQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKKwkJSEZBMzg0eF9UWF9UWEVYX1NFVCgxKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMSk7CisjZWxpZiBkZWZpbmVkKERPRVhDKQorCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sID0KKwkJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCgwKSB8IEhGQTM4NHhfVFhfU1RSVUNUWVBFX1NFVCgxKSB8CisJCUhGQTM4NHhfVFhfVFhFWF9TRVQoMSkgfCBIRkEzODR4X1RYX1RYT0tfU0VUKDApOworI2Vsc2UKKwlody0+dHhidWZmLnR4ZnJtLmRlc2MudHhfY29udHJvbCA9CisJCUhGQTM4NHhfVFhfTUFDUE9SVF9TRVQoMCkgfCBIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQoMSkgfAorCQlIRkEzODR4X1RYX1RYRVhfU0VUKDApIHwgSEZBMzg0eF9UWF9UWE9LX1NFVCgwKTsKKyNlbmRpZgorCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sID0KKwkJaG9zdDJoZmEzODR4XzE2KGh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sKTsKKworCS8qIGNvcHkgdGhlIGhlYWRlciBvdmVyIHRvIHRoZSB0eGRlc2MgKi8KKwltZW1jcHkoJihody0+dHhidWZmLnR4ZnJtLmRlc2MuZnJhbWVfY29udHJvbCksIHA4MDIxMV9oZHIsIHNpemVvZihwODAyMTFfaGRyX3QpKTsKKworCS8qIGlmIHdlJ3JlIHVzaW5nIGhvc3QgV0VQLCBpbmNyZWFzZSBzaXplIGJ5IElWK0lDViAqLworCWlmIChwODAyMTFfd2VwLT5kYXRhKSB7CisJCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy5kYXRhX2xlbiA9IGhvc3QyaGZhMzg0eF8xNihza2ItPmxlbis4KTsKKwkJLy8gaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgfD0gSEZBMzg0eF9UWF9OT0VOQ1JZUFRfU0VUKDEpOworCQl1c2Jwa3RsZW4rPTg7CisJfSBlbHNlIHsKKwkJaHctPnR4YnVmZi50eGZybS5kZXNjLmRhdGFfbGVuID0gaG9zdDJoZmEzODR4XzE2KHNrYi0+bGVuKTsKKwl9CisKKwl1c2Jwa3RsZW4gKz0gc2tiLT5sZW47CisKKwkvKiBjb3B5IG92ZXIgdGhlIFdFUCBJViBpZiB3ZSBhcmUgdXNpbmcgaG9zdCBXRVAgKi8KKwlwdHIgPSBody0+dHhidWZmLnR4ZnJtLmRhdGE7CisJaWYgKHA4MDIxMV93ZXAtPmRhdGEpIHsKKwkJbWVtY3B5KHB0ciwgcDgwMjExX3dlcC0+aXYsIHNpemVvZihwODAyMTFfd2VwLT5pdikpOworCQlwdHIrPSBzaXplb2YocDgwMjExX3dlcC0+aXYpOworCQltZW1jcHkocHRyLCBwODAyMTFfd2VwLT5kYXRhLCBza2ItPmxlbik7CisJfSBlbHNlIHsKKwkJbWVtY3B5KHB0ciwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJfQorCS8qIGNvcHkgb3ZlciB0aGUgcGFja2V0IGRhdGEgKi8KKwlwdHIrPSBza2ItPmxlbjsKKworCS8qIGNvcHkgb3ZlciB0aGUgV0VQIElDViBpZiB3ZSBhcmUgdXNpbmcgaG9zdCBXRVAgKi8KKwlpZiAocDgwMjExX3dlcC0+ZGF0YSkgeworCQltZW1jcHkocHRyLCBwODAyMTFfd2VwLT5pY3YsIHNpemVvZihwODAyMTFfd2VwLT5pY3YpKTsKKwl9CisKKwkvKiBTZW5kIHRoZSBVU0IgcGFja2V0ICovCisJdXNiX2ZpbGxfYnVsa191cmIoICYoaHctPnR4X3VyYiksIGh3LT51c2IsCisJICAgICAgICAgICAgICAgaHctPmVuZHBfb3V0LAorCSAgICAgICAgICAgICAgICYoaHctPnR4YnVmZiksIFJPVU5EVVA2NCh1c2Jwa3RsZW4pLAorCSAgICAgICAgICAgICAgIGhmYTM4NHhfdXNib3V0X2NhbGxiYWNrLCBody0+d2xhbmRldiApOworCWh3LT50eF91cmIudHJhbnNmZXJfZmxhZ3MgfD0gVVNCX1FVRVVFX0JVTEs7CisKKwlyZXN1bHQgPSAxOworCXJldCA9IHN1Ym1pdF90eF91cmIoaHcsICZody0+dHhfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIHJldCAhPSAwICkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJzdWJtaXRfdHhfdXJiKCkgZmFpbGVkLCBlcnJvcj0lZFxuIiwgcmV0KTsKKwkJcmVzdWx0ID0gMzsKKwl9CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBoZmEzODR4X3R4X3RpbWVvdXQod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWhmYTM4NHhfdAkqaHcgPSB3bGFuZGV2LT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJgorCSAgICAgLyogTm90ZSB0aGUgYml0d2lzZSBPUiwgbm90IHRoZSBsb2dpY2FsIE9SLiAqLworCSAgICAgKCAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSB8CisJICAgICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkgKQorCXsKKwkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJREJGRVhJVDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzaworKgorKiBUYXNrbGV0IHRvIGRlbGV0ZSBkZWFkIENUTFggb2JqZWN0cworKgorKiBBcmd1bWVudHM6CisqCWRhdGEJcHRyIHRvIGEgaGZhMzg0eF90CisqCisqIFJldHVybnM6CisqCisqIENhbGwgY29udGV4dDoKKyoJSW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaGZhMzg0eF90CSpodyA9IChoZmEzODR4X3QqKWRhdGE7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CisJc3RydWN0IGxpc3RfaGVhZCAqdGVtcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJREJGRU5URVI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCS8qIFRoaXMgbGlzdCBpcyBndWFyYW50ZWVkIHRvIGJlIGVtcHR5IGlmIHNvbWVvbmUKKwkgKiBoYXMgdW5wbHVnZ2VkIHRoZSBhZGFwdGVyLgorCSAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgdGVtcCwgJmh3LT5jdGx4cS5yZWFwYWJsZSkgeworCQloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKKworCQljdGx4ID0gbGlzdF9lbnRyeShlbnRyeSwgaGZhMzg0eF91c2JjdGx4X3QsIGxpc3QpOworCQlsaXN0X2RlbCgmY3RseC0+bGlzdCk7CisJCWtmcmVlKGN0bHgpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRpb25fdGFzaworKgorKiBUYXNrbGV0IHRvIGNhbGwgY29tcGxldGlvbiBoYW5kbGVycyBmb3IgcmV0dXJuZWQgQ1RMWHMKKyoKKyogQXJndW1lbnRzOgorKglkYXRhCXB0ciB0byBoZmEzODR4X3QKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorKiBDYWxsIGNvbnRleHQ6CisqCUludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCopZGF0YTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbnQgcmVhcCA9IDA7CisKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyogVGhpcyBsaXN0IGlzIGd1YXJhbnRlZWQgdG8gYmUgZW1wdHkgaWYgc29tZW9uZQorCSAqIGhhcyB1bnBsdWdnZWQgdGhlIGFkYXB0ZXIgLi4uCisJICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCB0ZW1wLCAmaHctPmN0bHhxLmNvbXBsZXRpbmcpIHsKKwkJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CisKKwkJY3RseCA9IGxpc3RfZW50cnkoZW50cnksIGhmYTM4NHhfdXNiY3RseF90LCBsaXN0KTsKKworCQkvKiBDYWxsIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uIHRoYXQgdGhpcworCQkgKiBjb21tYW5kIHdhcyBhc3NpZ25lZCwgYXNzdW1pbmcgaXQgaGFzIG9uZS4KKwkJICovCisJCWlmICggY3RseC0+Y21kY2IgIT0gTlVMTCApIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCQljdGx4LT5jbWRjYihodywgY3RseCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCQkJLyogTWFrZSBzdXJlIHdlIGRvbid0IHRyeSBhbmQgY29tcGxldGUKKwkJCSAqIHRoaXMgQ1RMWCBtb3JlIHRoYW4gb25jZSEKKwkJCSAqLworCQkJY3RseC0+Y21kY2IgPSBOVUxMOworCisJCQkvKiBEaWQgc29tZW9uZSB5YW5rIHRoZSBhZGFwdGVyIG91dAorCQkJICogd2hpbGUgb3VyIGxpc3Qgd2FzIChicmllZmx5KSB1bmxvY2tlZD8KKwkJCSAqLworCQkJaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkKKwkJCXsKKwkJCQlyZWFwID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqICJSZWFwYWJsZSIgQ1RMWHMgYXJlIG9uZXMgd2hpY2ggZG9uJ3QgaGF2ZSBhbnkKKwkJICogdGhyZWFkcyB3YWl0aW5nIGZvciB0aGVtIHRvIGRpZS4gSGVuY2UgdGhleSBtdXN0CisJCSAqIGJlIGRlbGl2ZXJlZCB0byBUaGUgUmVhcGVyIQorCQkgKi8KKwkJaWYgKCBjdGx4LT5yZWFwYWJsZSApIHsKKwkJCS8qIE1vdmUgdGhlIENUTFggb2ZmIHRoZSAiY29tcGxldGluZyIgbGlzdCAoaG9wZWZ1bGx5KQorCQkJICogb24gdG8gdGhlICJyZWFwYWJsZSIgbGlzdCB3aGVyZSB0aGUgcmVhcGVyIHRhc2sKKwkJCSAqIGNhbiBmaW5kIGl0LiBBbmQgInJlYXBhYmxlIiBtZWFucyB0aGF0IHRoaXMgQ1RMWAorCQkJICogaXNuJ3Qgc2l0dGluZyBvbiBhIHdhaXQtcXVldWUgc29tZXdoZXJlLgorCQkJICovCisJCQlsaXN0X21vdmVfdGFpbCgmY3RseC0+bGlzdCwgJmh3LT5jdGx4cS5yZWFwYWJsZSk7CisJCQlyZWFwID0gMTsKKwkJfQorCisJCWNvbXBsZXRlKCZjdGx4LT5kb25lKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCWlmIChyZWFwKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZody0+cmVhcGVyX2JoKTsKKworCURCRkVYSVQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiB1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYworKgorKiBNYXJrIHRoZSBDVExYIGRlYWQgYXN5bmNocm9ub3VzbHksIGFuZCBlbnN1cmUgdGhhdCB0aGUKKyogbmV4dCBjb21tYW5kIG9uIHRoZSBxdWV1ZSBpcyBydW4gYWZ0ZXJ3YXJkcy4KKyoKKyogQXJndW1lbnRzOgorKglodwlwdHIgdG8gdGhlIGhmYTM4NHhfdCBzdHJ1Y3R1cmUKKyoJY3RseAlwdHIgdG8gYSBDVExYIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCXRoZSBDVExYJ3MgVVJCIGlzIGluYWN0aXZlCisqIC1FSU5QUk9HUkVTUwl0aGUgVVJCIGlzIGN1cnJlbnRseSBiZWluZyB1bmxpbmtlZAorKgorKiBDYWxsIGNvbnRleHQ6CisqCUVpdGhlciBwcm9jZXNzIG9yIGludGVycnVwdCwgYnV0IHByZXN1bWFibHkgaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdW5sb2NrZWRfdXNiY3RseF9jYW5jZWxfYXN5bmMoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCit7CisJaW50IHJldDsKKworCURCRkVOVEVSOworCisJLyoKKwkgKiBUcnkgdG8gZGVsZXRlIHRoZSBVUkIgY29udGFpbmluZyBvdXIgcmVxdWVzdCBwYWNrZXQuCisJICogSWYgd2Ugc3VjY2VlZCwgdGhlbiBpdHMgY29tcGxldGlvbiBoYW5kbGVyIHdpbGwgYmUKKwkgKiBjYWxsZWQgd2l0aCBhIHN0YXR1cyBvZiAtRUNPTk5SRVNFVC4KKwkgKi8KKwlody0+Y3RseF91cmIudHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKwlyZXQgPSB1c2JfdW5saW5rX3VyYigmaHctPmN0bHhfdXJiKTsKKworCWlmIChyZXQgIT0gLUVJTlBST0dSRVNTKSB7CisJCS8qCisJCSAqIFRoZSBPVVQgVVJCIGhhZCBlaXRoZXIgYWxyZWFkeSBjb21wbGV0ZWQKKwkJICogb3Igd2FzIHN0aWxsIGluIHRoZSBwZW5kaW5nIHF1ZXVlLCBzbyB0aGUKKwkJICogVVJCJ3MgY29tcGxldGlvbiBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuCisJCSAqIFdlIHdpbGwgaGF2ZSB0byBjb21wbGV0ZSB0aGUgQ1RMWCBvdXJzZWx2ZXMuCisJCSAqLworCQljdGx4LT5zdGF0ZSA9IENUTFhfUkVRX0ZBSUxFRDsKKwkJdW5sb2NrZWRfdXNiY3RseF9jb21wbGV0ZShodywgY3RseCk7CisJCXJldCA9IDA7CisJfQorCisJREJGRVhJVDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiB1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlCisqCisqIEEgQ1RMWCBoYXMgY29tcGxldGVkLiAgSXQgbWF5IGhhdmUgYmVlbiBzdWNjZXNzZnVsLCBpdCBtYXkgbm90CisqIGhhdmUgYmVlbi4gQXQgdGhpcyBwb2ludCwgdGhlIENUTFggc2hvdWxkIGJlIHF1aWVzY2VudC4gIFRoZSBVUkJzCisqIGFyZW4ndCBhY3RpdmUgYW5kIHRoZSB0aW1lcnMgc2hvdWxkIGhhdmUgYmVlbiBzdG9wcGVkLgorKgorKiBUaGUgQ1RMWCBpcyBtaWdyYXRlZCB0byB0aGUgImNvbXBsZXRpbmciIHF1ZXVlLCBhbmQgdGhlIGNvbXBsZXRpbmcKKyogdGFza2xldCBpcyBzY2hlZHVsZWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCXB0ciB0byBhIGhmYTM4NHhfdCBzdHJ1Y3R1cmUKKyoJY3RseAkJcHRyIHRvIGEgY3RseCBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJRWl0aGVyLCBhc3N1bWUgaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCit7CisJREJGRU5URVI7CisKKwkvKiBUaW1lcnMgaGF2ZSBiZWVuIHN0b3BwZWQsIGFuZCBjdGx4IHNob3VsZCBiZSBpbgorCSAqIGEgdGVybWluYWwgc3RhdGUuIFJldGlyZSBpdCBmcm9tIHRoZSAiYWN0aXZlIgorCSAqIHF1ZXVlLgorCSAqLworCWxpc3RfbW92ZV90YWlsKCZjdGx4LT5saXN0LCAmaHctPmN0bHhxLmNvbXBsZXRpbmcpOworCXRhc2tsZXRfc2NoZWR1bGUoJmh3LT5jb21wbGV0aW9uX2JoKTsKKworCXN3aXRjaCAoY3RseC0+c3RhdGUpIHsKKwljYXNlIENUTFhfQ09NUExFVEU6CisJY2FzZSBDVExYX1JFUV9GQUlMRUQ6CisJCS8qIFRoaXMgYXJlIHRoZSBjb3JyZWN0IHRlcm1pbmF0aW5nIHN0YXRlcy4gKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlXTEFOX0xPR19FUlJPUigiQ1RMWFslZF0gbm90IGluIGEgdGVybWluYXRpbmcgc3RhdGUoJXMpXG4iLAorCQkgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkgICAgICAgICAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CisJCWJyZWFrOworCX0gLyogc3dpdGNoICovCisKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JjdGx4cV9ydW4KKyoKKyogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgaGVhZCBpdGVtIGlzIHJ1bm5pbmcuICBJZiBub3QsIHN0YXJ0cyBpdC4KKyoKKyogQXJndW1lbnRzOgorKglodwlwdHIgdG8gaGZhMzg0eF90CisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWFueQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4cV9ydW4oaGZhMzg0eF90CSpodykKK3sKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlEQkZFTlRFUjsKKworCS8qIGFjcXVpcmUgbG9jayAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyogT25seSBvbmUgYWN0aXZlIENUTFggYXQgYW55IG9uZSB0aW1lLCBiZWNhdXNlIHRoZXJlJ3Mgbm8KKwkgKiBvdGhlciAocmVsaWFibGUpIHdheSB0byBtYXRjaCB0aGUgcmVzcG9uc2UgVVJCIHRvIHRoZQorCSAqIGNvcnJlY3QgQ1RMWC4KKwkgKgorCSAqIERvbid0IHRvdWNoIGFueSBvZiB0aGVzZSBDVExYcyBpZiB0aGUgaGFyZHdhcmUKKwkgKiBoYXMgYmVlbiByZW1vdmVkIG9yIHRoZSBVU0Igc3Vic3lzdGVtIGlzIHN0YWxsZWQuCisJICovCisJaWYgKCAhbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgfHwKKwkgICAgIHRlc3RfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpIHx8CisJICAgICBody0+d2xhbmRldi0+aHdyZW1vdmVkICkKKwkJZ290byB1bmxvY2s7CisKKwl3aGlsZSAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEucGVuZGluZykgKSB7CisJCWhmYTM4NHhfdXNiY3RseF90CSpoZWFkOworCQlpbnQJCQlyZXN1bHQ7CisKKwkJLyogVGhpcyBpcyB0aGUgZmlyc3QgcGVuZGluZyBjb21tYW5kICovCisJCWhlYWQgPSBsaXN0X2VudHJ5KGh3LT5jdGx4cS5wZW5kaW5nLm5leHQsCisJCSAgICAgICAgICAgICAgICAgIGhmYTM4NHhfdXNiY3RseF90LAorCQkgICAgICAgICAgICAgICAgICBsaXN0KTsKKworCQkvKiBXZSBuZWVkIHRvIHNwbGl0IHRoaXMgb2ZmIHRvIGF2b2lkIGEgcmFjZSBjb25kaXRpb24gKi8KKwkJbGlzdF9tb3ZlX3RhaWwoJmhlYWQtPmxpc3QsICZody0+Y3RseHEuYWN0aXZlKTsKKworCQkvKiBGaWxsIHRoZSBvdXQgcGFja2V0ICovCisJCXVzYl9maWxsX2J1bGtfdXJiKCAmKGh3LT5jdGx4X3VyYiksIGh3LT51c2IsCisJCSAgICAgICAgICAgICAgICAgICBody0+ZW5kcF9vdXQsCisJCSAgICAgICAgICAgICAgICAgICAmKGhlYWQtPm91dGJ1ZiksIFJPVU5EVVA2NChoZWFkLT5vdXRidWZzaXplKSwKKwkJICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjaywgaHcpOworCQlody0+Y3RseF91cmIudHJhbnNmZXJfZmxhZ3MgfD0gVVNCX1FVRVVFX0JVTEs7CisKKwkJLyogTm93IHN1Ym1pdCB0aGUgVVJCIGFuZCB1cGRhdGUgdGhlIENUTFgncyBzdGF0ZQorCQkgKi8KKwkJaWYgKChyZXN1bHQgPSBTVUJNSVRfVVJCKCZody0+Y3RseF91cmIsIEdGUF9BVE9NSUMpKSA9PSAwKSB7CisJCQkvKiBUaGlzIENUTFggaXMgbm93IHJ1bm5pbmcgb24gdGhlIGFjdGl2ZSBxdWV1ZSAqLworCQkJaGVhZC0+c3RhdGUgPSBDVExYX1JFUV9TVUJNSVRURUQ7CisKKwkJCS8qIFN0YXJ0IHRoZSBPVVQgd2FpdCB0aW1lciAqLworCQkJaHctPnJlcV90aW1lcl9kb25lID0gMDsKKwkJCWh3LT5yZXF0aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOworCQkJYWRkX3RpbWVyKCZody0+cmVxdGltZXIpOworCisJCQkvKiBTdGFydCB0aGUgSU4gd2FpdCB0aW1lciAqLworCQkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDA7CisJCQlody0+cmVzcHRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMipIWjsKKwkJCWFkZF90aW1lcigmaHctPnJlc3B0aW1lcik7CisKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKKwkJCS8qIFRoZSBPVVQgcGlwZSBuZWVkcyByZXNldHRpbmcsIHNvIHB1dAorCQkJICogdGhpcyBDVExYIGJhY2sgaW4gdGhlICJwZW5kaW5nIiBxdWV1ZQorCQkJICogYW5kIHNjaGVkdWxlIGEgcmVzZXQgLi4uCisJCQkgKi8KKwkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCSAgICAgICAgICAgICAgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQlsaXN0X21vdmUoJmhlYWQtPmxpc3QsICZody0+Y3RseHEucGVuZGluZyk7CisJCQlzZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpOworCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJlc3VsdCA9PSAtRVNIVVRET1dOKSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB1cmIgc2h1dGRvd24hXG4iLAorCQkJCQkgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQlicmVhazsKKwkJfQorCisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3VibWl0IENUTFhbJWRdOiBlcnJvcj0lZFxuIiwKKwkJICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGhlYWQtPm91dGJ1Zi50eXBlKSwgcmVzdWx0KTsKKwkJdW5sb2NrZWRfdXNiY3RseF9jb21wbGV0ZShodywgaGVhZCk7CisJfSAvKiB3aGlsZSAqLworCisJdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmluX2NhbGxiYWNrCisqCisqIENhbGxiYWNrIGZvciBVUkJzIG9uIHRoZSBCVUxLSU4gZW5kcG9pbnQuCisqCisqIEFyZ3VtZW50czoKKyoJdXJiCQlwdHIgdG8gdGhlIGNvbXBsZXRlZCB1cmIKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZmRlZiBVUkJfT05MWV9DQUxMQkFDSworc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCisjZWxzZQorc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorI2VuZGlmCit7CisJd2xhbmRldmljZV90CQkqd2xhbmRldiA9IHVyYi0+Y29udGV4dDsKKwloZmEzODR4X3QJCSpodzsKKwloZmEzODR4X3VzYmluX3QJCSp1c2JpbiA9IChoZmEzODR4X3VzYmluX3QgKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IHNrX2J1ZmYgICAgICAgICAgKnNrYiA9IE5VTEw7CisJaW50CQkJcmVzdWx0OworCWludCAgICAgICAgICAgICAgICAgICAgIHVyYl9zdGF0dXM7CisJVUlOVDE2CQkJdHlwZTsKKworCWVudW0gVVNCSU5fQUNUSU9OIHsKKwkJSEFORExFLAorCQlSRVNVQk1JVCwKKwkJQUJPUlQKKwl9IGFjdGlvbjsKKworCURCRkVOVEVSOworCisJaWYgKCAhd2xhbmRldiB8fAorCSAgICAgIXdsYW5kZXYtPm5ldGRldiB8fAorCSAgICAgIW5ldGlmX2RldmljZV9wcmVzZW50KHdsYW5kZXYtPm5ldGRldikgKQorCQlnb3RvIGV4aXQ7CisKKwlodyA9IHdsYW5kZXYtPnByaXY7CisJaWYgKCFodykKKwkJZ290byBleGl0OworCisJc2tiID0gaHctPnJ4X3VyYl9za2I7CisJaWYgKCFza2IgfHwgKHNrYi0+ZGF0YSAhPSB1cmItPnRyYW5zZmVyX2J1ZmZlcikpIHsKKwkJQlVHKCk7CisJfQorCWh3LT5yeF91cmJfc2tiID0gTlVMTDsKKworCS8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zIHdpdGhpbiB0aGUgVVJCICovCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJYWN0aW9uID0gSEFORExFOworCisJCS8qIENoZWNrIGZvciBzaG9ydCBwYWNrZXQgKi8KKwkJaWYgKCB1cmItPmFjdHVhbF9sZW5ndGggPT0gMCApIHsKKwkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2Vycm9ycyk7CisJCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKTsKKwkJCWFjdGlvbiA9IFJFU1VCTUlUOworCQl9CisJCWJyZWFrOworCisJY2FzZSAtRVBJUEU6CisJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHJ4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJICAgICAgICAgICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkKKwkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CisJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2Vycm9ycyk7CisJCWFjdGlvbiA9IEFCT1JUOworCQlicmVhazsKKworCWNhc2UgLUVJTFNFUToKKwljYXNlIC1FVElNRURPVVQ6CisJY2FzZSAtRVBST1RPOgorCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFRIUk9UVExFX1JYLCAmaHctPnVzYl9mbGFncykgJiYKKwkJICAgICAhdGltZXJfcGVuZGluZygmaHctPnRocm90dGxlKSApIHsKKwkJCW1vZF90aW1lcigmaHctPnRocm90dGxlLCBqaWZmaWVzICsgVEhST1RUTEVfSklGRklFUyk7CisJCX0KKwkJKysod2xhbmRldi0+bGludXhfc3RhdHMucnhfZXJyb3JzKTsKKwkJYWN0aW9uID0gQUJPUlQ7CisJCWJyZWFrOworCisJY2FzZSAtRU9WRVJGTE9XOgorCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9vdmVyX2Vycm9ycyk7CisJCWFjdGlvbiA9IFJFU1VCTUlUOworCQlicmVhazsKKworCWNhc2UgLUVOT0RFVjoKKwljYXNlIC1FU0hVVERPV046CisJCVdMQU5fTE9HX0RFQlVHKDMsInN0YXR1cz0lZCwgZGV2aWNlIHJlbW92ZWQuXG4iLCB1cmItPnN0YXR1cyk7CisJCWFjdGlvbiA9IEFCT1JUOworCQlicmVhazsKKworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCQlXTEFOX0xPR19ERUJVRygzLCJzdGF0dXM9JWQsIHVyYiBleHBsaWNpdGx5IHVubGlua2VkLlxuIiwgdXJiLT5zdGF0dXMpOworCQlhY3Rpb24gPSBBQk9SVDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlXTEFOX0xPR19ERUJVRygzLCJ1cmIgc3RhdHVzPSVkLCB0cmFuc2ZlciBmbGFncz0weCV4XG4iLAorCQkgICAgICAgICAgICAgICAgIHVyYi0+c3RhdHVzLCB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKKwkJKysod2xhbmRldi0+bGludXhfc3RhdHMucnhfZXJyb3JzKTsKKwkJYWN0aW9uID0gUkVTVUJNSVQ7CisJCWJyZWFrOworCX0KKworCXVyYl9zdGF0dXMgPSB1cmItPnN0YXR1czsKKworCWlmIChhY3Rpb24gIT0gQUJPUlQpIHsKKwkJLyogUmVwb3N0IHRoZSBSWCBVUkIgKi8KKwkJcmVzdWx0ID0gc3VibWl0X3J4X3VyYihodywgR0ZQX0FUT01JQyk7CisKKwkJaWYgKHJlc3VsdCAhPSAwKSB7CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkiRmF0YWwsIGZhaWxlZCB0byByZXN1Ym1pdCByeF91cmIuIGVycm9yPSVkXG4iLAorCQkJCXJlc3VsdCk7CisJCX0KKwl9CisKKwkvKiBIYW5kbGUgYW55IFVTQi1JTiBwYWNrZXQgKi8KKwkvKiBOb3RlOiB0aGUgY2hlY2sgb2YgdGhlIHN3X3N1cHBvcnQgZmllbGQsIHRoZSB0eXBlIGZpZWxkIGRvZXNuJ3QKKwkgKiAgICAgICBoYXZlIGJpdCAxMiBzZXQgbGlrZSB0aGUgZG9jcyBzdWdnZXN0LgorCSAqLworCXR5cGUgPSBoZmEzODR4Mmhvc3RfMTYodXNiaW4tPnR5cGUpOworCWlmIChIRkEzODR4X1VTQl9JU1JYRlJNKHR5cGUpKSB7CisJCWlmIChhY3Rpb24gPT0gSEFORExFKSB7CisJCQlpZiAodXNiaW4tPnR4ZnJtLmRlc2Muc3dfc3VwcG9ydCA9PSAweDAxMjMpIHsKKwkJCQloZmEzODR4X3VzYmluX3R4Y29tcGwod2xhbmRldiwgdXNiaW4pOworCQkJfSBlbHNlIHsKKwkJCQlza2JfcHV0KHNrYiwgc2l6ZW9mKCp1c2JpbikpOworCQkJCWhmYTM4NHhfdXNiaW5fcngod2xhbmRldiwgc2tiKTsKKwkJCQlza2IgPSBOVUxMOworCQkJfQorCQl9CisJCWdvdG8gZXhpdDsKKwl9CisJaWYgKEhGQTM4NHhfVVNCX0lTVFhGUk0odHlwZSkpIHsKKwkJaWYgKGFjdGlvbiA9PSBIQU5ETEUpCisJCQloZmEzODR4X3VzYmluX3R4Y29tcGwod2xhbmRldiwgdXNiaW4pOworCQlnb3RvIGV4aXQ7CisJfQorCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSEZBMzg0eF9VU0JfSU5GT0ZSTToKKwkJaWYgKGFjdGlvbiA9PSBBQk9SVCkKKwkJCWdvdG8gZXhpdDsKKwkJaWYgKGFjdGlvbiA9PSBIQU5ETEUpCisJCQloZmEzODR4X3VzYmluX2luZm8od2xhbmRldiwgdXNiaW4pOworCQlicmVhazsKKworCWNhc2UgSEZBMzg0eF9VU0JfQ01EUkVTUDoKKwljYXNlIEhGQTM4NHhfVVNCX1dSSURSRVNQOgorCWNhc2UgSEZBMzg0eF9VU0JfUlJJRFJFU1A6CisJY2FzZSBIRkEzODR4X1VTQl9XTUVNUkVTUDoKKwljYXNlIEhGQTM4NHhfVVNCX1JNRU1SRVNQOgorCQkvKiBBTFdBWVMsIEFMV0FZUywgQUxXQVlTIGhhbmRsZSB0aGlzIENUTFghISEhICovCisJCWhmYTM4NHhfdXNiaW5fY3RseChodywgdXNiaW4sIHVyYl9zdGF0dXMpOworCQlicmVhazsKKworCWNhc2UgSEZBMzg0eF9VU0JfQlVGQVZBSUw6CisJCVdMQU5fTE9HX0RFQlVHKDMsIlJlY2VpdmVkIEJVRkFWQUlMIHBhY2tldCwgZnJtbGVuPSVkXG4iLAorCQkJdXNiaW4tPmJ1ZmF2YWlsLmZybWxlbik7CisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X1VTQl9FUlJPUjoKKwkJV0xBTl9MT0dfREVCVUcoMywiUmVjZWl2ZWQgVVNCX0VSUk9SIHBhY2tldCwgZXJyb3J0eXBlPSVkXG4iLAorCQkJdXNiaW4tPnVzYmVycm9yLmVycm9ydHlwZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJV0xBTl9MT0dfREVCVUcoMywiVW5yZWNvZ25pemVkIFVTQklOIHBhY2tldCwgdHlwZT0leCwgc3RhdHVzPSVkXG4iLAorCQkJdXNiaW4tPnR5cGUsIHVyYl9zdGF0dXMpOworCQlicmVhazsKKwl9IC8qIHN3aXRjaCAqLworCitleGl0OgorCisJaWYgKHNrYikKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2Jpbl9jdGx4CisqCisqIFdlJ3ZlIHJlY2VpdmVkIGEgVVJCIGNvbnRhaW5pbmcgYSBQcmlzbTIgInJlc3BvbnNlIiBtZXNzYWdlLgorKiBUaGlzIG1lc3NhZ2UgbmVlZHMgdG8gYmUgbWF0Y2hlZCB1cCB3aXRoIGEgQ1RMWCBvbiB0aGUgYWN0aXZlCisqIHF1ZXVlIGFuZCBvdXIgc3RhdGUgdXBkYXRlZCBhY2NvcmRpbmdseS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJcHRyIHRvIGhmYTM4NHhfdAorKgl1c2JpbgkJcHRyIHRvIFVTQiBJTiBwYWNrZXQKKyoJdXJiX3N0YXR1cwlzdGF0dXMgb2YgdGhpcyBCdWxrLUluIFVSQgorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9jdGx4KGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4sCisJCQkgICAgICAgaW50IHVyYl9zdGF0dXMpCit7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisJaW50CQkJcnVuX3F1ZXVlID0gMDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCURCRkVOVEVSOworCityZXRyeToKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCS8qIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBDVExYIG9uIHRoZSBhY3RpdmUgcXVldWUKKwkgKiBhdCBhbnkgb25lIHRpbWUsIGFuZCB0aGlzIGlzIHRoZSBDVExYIHRoYXQgdGhlCisJICogdGltZXJzIGFyZSB3YWl0aW5nIGZvci4KKwkgKi8KKwlpZiAoIGxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpICkgeworCQlnb3RvIHVubG9jazsKKwl9CisKKwkvKiBSZW1vdmUgdGhlICJyZXNwb25zZSB0aW1lb3V0Ii4gSXQncyBwb3NzaWJsZSB0aGF0CisJICogd2UgYXJlIGFscmVhZHkgdG9vIGxhdGUsIGFuZCB0aGF0IHRoZSB0aW1lb3V0IGlzCisJICogYWxyZWFkeSBydW5uaW5nLiBBbmQgdGhhdCdzIGp1c3QgdG9vIGJhZCBmb3IgdXMsCisJICogYmVjYXVzZSB3ZSBjb3VsZCBsb3NlIG91ciBDVExYIGZyb20gdGhlIGFjdGl2ZQorCSAqIHF1ZXVlIGhlcmUgLi4uCisJICovCisJaWYgKGRlbF90aW1lcigmaHctPnJlc3B0aW1lcikgPT0gMCkgeworCQlpZiAoaHctPnJlc3BfdGltZXJfZG9uZSA9PSAwKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCQkJZ290byByZXRyeTsKKwkJfQorCX0KKwllbHNlIHsKKwkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CisJfQorCisJY3RseCA9IGdldF9hY3RpdmVfY3RseChodyk7CisKKwlpZiAodXJiX3N0YXR1cyAhPSAwKSB7CisJCS8qCisJCSAqIEJhZCBDVExYLCBzbyBnZXQgcmlkIG9mIGl0LiBCdXQgd2Ugb25seQorCQkgKiByZW1vdmUgaXQgZnJvbSB0aGUgYWN0aXZlIHF1ZXVlIGlmIHdlJ3JlIG5vCisJCSAqIGxvbmdlciBleHBlY3RpbmcgdGhlIE9VVCBVUkIgdG8gY29tcGxldGUuCisJCSAqLworCQlpZiAodW5sb2NrZWRfdXNiY3RseF9jYW5jZWxfYXN5bmMoaHcsIGN0bHgpID09IDApCisJCQlydW5fcXVldWUgPSAxOworCX0gZWxzZSB7CisJCWNvbnN0IFVJTlQxNiBpbnR5cGUgPSAodXNiaW4tPnR5cGUmfmhvc3QyaGZhMzg0eF8xNigweDgwMDApKTsKKworCQkvKgorCQkgKiBDaGVjayB0aGF0IG91ciBtZXNzYWdlIGlzIHdoYXQgd2UncmUgZXhwZWN0aW5nIC4uLgorCQkgKi8KKwkJaWYgKGN0bHgtPm91dGJ1Zi50eXBlICE9IGludHlwZSkgeworCQkJV0xBTl9MT0dfV0FSTklORygiRXhwZWN0ZWQgSU5bJWRdLCByZWNlaXZlZCBJTlslZF0gLSBpZ25vcmVkLlxuIiwKKwkJCSAgICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGludHlwZSkpOworCQkJZ290byB1bmxvY2s7CisJCX0KKworCQkvKiBUaGlzIFVSQiBoYXMgc3VjY2VlZGVkLCBzbyBncmFiIHRoZSBkYXRhIC4uLiAqLworCQltZW1jcHkoJmN0bHgtPmluYnVmLCB1c2Jpbiwgc2l6ZW9mKGN0bHgtPmluYnVmKSk7CisKKwkJc3dpdGNoIChjdGx4LT5zdGF0ZSkgeworCQljYXNlIENUTFhfUkVRX1NVQk1JVFRFRDoKKwkJCS8qCisJCQkgKiBXZSBoYXZlIHJlY2VpdmVkIG91ciByZXNwb25zZSBVUkIgYmVmb3JlCisJCQkgKiBvdXIgcmVxdWVzdCBoYXMgYmVlbiBhY2tub3dsZWRnZWQuIE9kZCwKKwkJCSAqIGJ1dCBvdXIgT1VUIFVSQiBpcyBzdGlsbCBhbGl2ZS4uLgorCQkJICovCisJCQlXTEFOX0xPR19ERUJVRygwLCAiQ2F1c2FsaXR5IHZpb2xhdGlvbjogcGxlYXNlIHJlYm9vdCBVbml2ZXJzZSwgb3IgZW1haWwgbGludXgtd2xhbi1kZXZlbEBsaXN0cy5saW51eC13bGFuLmNvbVxuIik7CisJCQljdGx4LT5zdGF0ZSA9IENUTFhfUkVTUF9DT01QTEVURTsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1RMWF9SRVFfQ09NUExFVEU6CisJCQkvKgorCQkJICogVGhpcyBpcyB0aGUgdXN1YWwgcGF0aDogb3VyIHJlcXVlc3QKKwkJCSAqIGhhcyBhbHJlYWR5IGJlZW4gYWNrbm93bGVkZ2VkLCBhbmQKKwkJCSAqIG5vdyB3ZSBoYXZlIHJlY2VpdmVkIHRoZSByZXBseSB0b28uCisJCQkgKi8KKwkJCWN0bHgtPnN0YXRlID0gQ1RMWF9DT01QTEVURTsKKwkJCXVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUoaHcsIGN0bHgpOworCQkJcnVuX3F1ZXVlID0gMTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogVGhyb3cgdGhpcyBDVExYIGF3YXkgLi4uCisJCQkgKi8KKwkJCVdMQU5fTE9HX0VSUk9SKCJNYXRjaGVkIElOIFVSQiwgQ1RMWFslZF0gaW4gaW52YWxpZCBzdGF0ZSglcykuIgorCQkJICAgICAgICAgICAgICAgIiBEaXNjYXJkZWQuXG4iLAorCQkJICAgICAgICAgICAgICAgaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgICAgICAgICAgICAgIGN0bHhzdHIoY3RseC0+c3RhdGUpKTsKKwkJCWlmICh1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhodywgY3RseCkgPT0gMCkKKwkJCQlydW5fcXVldWUgPSAxOworCQkJYnJlYWs7CisJCX0gLyogc3dpdGNoICovCisJfQorCit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCWlmIChydW5fcXVldWUpCisJCWhmYTM4NHhfdXNiY3RseHFfcnVuKGh3KTsKKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiaW5fdHhjb21wbAorKgorKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgdGhlIHJlc3VsdHMgb2YgYSBwcmV2aW91cyB0cmFuc21pdC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZQorKgl1c2JpbgkJcHRyIHRvIHRoZSB1c2IgdHJhbnNmZXIgYnVmZmVyCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX3R4Y29tcGwod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYmluX3QgKnVzYmluKQoreworCVVJTlQxNgkJCXN0YXR1czsKKwlEQkZFTlRFUjsKKworCXN0YXR1cyA9IGhmYTM4NHgyaG9zdF8xNih1c2Jpbi0+dHlwZSk7IC8qIHllYWggSSBrbm93IGl0IHNheXMgdHlwZS4uLiovCisKKwkvKiBXYXMgdGhlcmUgYW4gZXJyb3I/ICovCisJaWYgKEhGQTM4NHhfVFhTVEFUVVNfSVNFUlJPUihzdGF0dXMpKSB7CisJCXByaXNtMnN0YV9ldl90eGV4Yyh3bGFuZGV2LCBzdGF0dXMpOworCX0gZWxzZSB7CisJCXByaXNtMnN0YV9ldl90eCh3bGFuZGV2LCBzdGF0dXMpOworCX0KKwkvLyBwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldik7CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmluX3J4CisqCisqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgcmVjZWl2ZWQgYSByeCBmcmFtZSBwYWNrZXQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2UKKyoJdXNiaW4JCXB0ciB0byB0aGUgdXNiIHRyYW5zZmVyIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaGZhMzg0eF91c2Jpbl90ICAgICAgICAgKnVzYmluID0gKGhmYTM4NHhfdXNiaW5fdCAqKSBza2ItPmRhdGE7CisJaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBoZHJsZW47CisJcDgwMjExX3J4bWV0YV90ICAgICAgICAgKnJ4bWV0YTsKKwlVSU5UMTYgICAgICAgICAgICAgICAgICBkYXRhX2xlbjsKKwlVSU5UMTYgICAgICAgICAgICAgICAgICBmYzsKKworCURCRkVOVEVSOworCisJLyogQnl0ZSBvcmRlciBjb252ZXJ0IG9uY2UgdXAgZnJvbnQuICovCisJdXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzID0KKwkJaGZhMzg0eDJob3N0XzE2KHVzYmluLT5yeGZybS5kZXNjLnN0YXR1cyk7CisJdXNiaW4tPnJ4ZnJtLmRlc2MudGltZSA9CisJCWhmYTM4NHgyaG9zdF8zMih1c2Jpbi0+cnhmcm0uZGVzYy50aW1lKTsKKworCS8qIE5vdyBoYW5kbGUgZnJhbWUgYmFzZWQgb24gcG9ydCMgKi8KKwlzd2l0Y2goIEhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSApCisJeworCWNhc2UgMDoKKwkJZmMgPSBpZWVlMmhvc3QxNih1c2Jpbi0+cnhmcm0uZGVzYy5mcmFtZV9jb250cm9sKTsKKworCQkvKiBJZiBleGNsdWRlIGFuZCB3ZSByZWNlaXZlIGFuIHVuZW5jcnlwdGVkLCBkcm9wIGl0ICovCisJCWlmICggKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCkgJiYKKwkJICAgICAhV0xBTl9HRVRfRkNfSVNXRVAoZmMpKXsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWRhdGFfbGVuID0gaGZhMzg0eDJob3N0XzE2KHVzYmluLT5yeGZybS5kZXNjLmRhdGFfbGVuKTsKKworCQkvKiBIb3cgbXVjaCBoZWFkZXIgZGF0YSBkbyB3ZSBoYXZlPyAqLworCQloZHJsZW4gPSBwODAyMTFfaGVhZGVybGVuKGZjKTsKKworCQkvKiBQdWxsIG9mZiB0aGUgZGVzY3JpcHRvciAqLworCQlza2JfcHVsbChza2IsIHNpemVvZihoZmEzODR4X3J4X2ZyYW1lX3QpKTsKKworCQkvKiBOb3cgc2h1bnQgdGhlIGhlYWRlciBibG9jayB1cCBhZ2FpbnN0IHRoZSBkYXRhIGJsb2NrCisJCSAqIHdpdGggYW4gIm92ZXJsYXBwaW5nIiBjb3B5CisJCSAqLworCQltZW1tb3ZlKHNrYl9wdXNoKHNrYiwgaGRybGVuKSwKKwkJICAgICAgICAmdXNiaW4tPnJ4ZnJtLmRlc2MuZnJhbWVfY29udHJvbCwKKwkJICAgICAgICBoZHJsZW4pOworCisJCXNrYi0+ZGV2ID0gd2xhbmRldi0+bmV0ZGV2OworCQlza2ItPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisKKwkJLyogQW5kIHNldCB0aGUgZnJhbWUgbGVuZ3RoIHByb3Blcmx5ICovCisJCXNrYl90cmltKHNrYiwgZGF0YV9sZW4gKyBoZHJsZW4pOworCisJCS8qIFRoZSBwcmlzbTIgc2VyaWVzIGRvZXMgbm90IHJldHVybiB0aGUgQ1JDICovCisJCW1lbXNldChza2JfcHV0KHNrYiwgV0xBTl9DUkNfTEVOKSwgMHhmZiwgV0xBTl9DUkNfTEVOKTsKKworCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCisJCS8qIEF0dGFjaCB0aGUgcnhtZXRhLCBzZXQgc29tZSBzdHVmZiAqLworCQlwODAyMTFza2JfcnhtZXRhX2F0dGFjaCh3bGFuZGV2LCBza2IpOworCQlyeG1ldGEgPSBQODAyMTFTS0JfUlhNRVRBKHNrYik7CisJCXJ4bWV0YS0+bWFjdGltZSA9IHVzYmluLT5yeGZybS5kZXNjLnRpbWU7CisJCXJ4bWV0YS0+cnhyYXRlID0gdXNiaW4tPnJ4ZnJtLmRlc2MucmF0ZTsKKwkJcnhtZXRhLT5zaWduYWwgPSB1c2Jpbi0+cnhmcm0uZGVzYy5zaWduYWwgLSBody0+ZGJtYWRqdXN0OworCQlyeG1ldGEtPm5vaXNlID0gdXNiaW4tPnJ4ZnJtLmRlc2Muc2lsZW5jZSAtIGh3LT5kYm1hZGp1c3Q7CisKKwkJcHJpc20yc3RhX2V2X3J4KHdsYW5kZXYsIHNrYik7CisKKwkJYnJlYWs7CisKKwljYXNlIDc6CisJCWlmICggISBIRkEzODR4X1JYU1RBVFVTX0lTRkNTRVJSKHVzYmluLT5yeGZybS5kZXNjLnN0YXR1cykgKSB7CisJCQkvKiBDb3B5IHRvIHdsYW5zbmlmIHNrYiAqLworCQkJaGZhMzg0eF9pbnRfcnhtb25pdG9yKCB3bGFuZGV2LCAmdXNiaW4tPnJ4ZnJtKTsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJfSBlbHNlIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDMsIlJlY2VpdmVkIG1vbml0b3IgZnJhbWU6IEZDU2VyciBzZXRcbiIpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJV0xBTl9MT0dfV0FSTklORygiUmVjZWl2ZWQgZnJhbWUgb24gdW5zdXBwb3J0ZWQgcG9ydD0lZFxuIiwKKwkJCUhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSApOworCQlnb3RvIGRvbmU7CisJCWJyZWFrOworCX0KKworZG9uZToKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfaW50X3J4bW9uaXRvcgorKgorKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGludF9yeC4gIEhhbmRsZXMgbW9uaXRvciBmcmFtZXMuCisqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBzcGFjZSBmb3IgdGhlIEZDUyBhbmQgc2V0cyBpdAorKiB0byAweGZmZmZmZmZmLiAgVGhlIGhmYTM4NHggZG9lc24ndCBnaXZlIHVzIHRoZSBGQ1MgdmFsdWUgYnV0IHRoZQorKiBoaWdoZXIgbGF5ZXJzIGV4cGVjdCBpdC4gIDB4ZmZmZmZmZmYgaXMgdXNlZCBhcyBhIGZsYWcgdG8gaW5kaWNhdGUKKyogdGhlIEZDUyBpcyBib2d1cy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJcnhmcm0JCXJ4IGRlc2NyaXB0b3IgcmVhZCBmcm9tIGNhcmQgaW4gaW50X3J4CisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKglBbGxvY2F0ZXMgYW4gc2tiIGFuZCBwYXNzZXMgaXQgdXAgdmlhIHRoZSBQRl9QQUNLRVQgaW50ZXJmYWNlLgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X2ludF9yeG1vbml0b3IoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF91c2Jfcnhmcm1fdCAqcnhmcm0pCit7CisJaGZhMzg0eF9yeF9mcmFtZV90ICAgICAgICAgICAgICAqcnhkZXNjID0gJihyeGZybS0+ZGVzYyk7CisJVUlOVAkJCQloZHJsZW4gPSAwOworCVVJTlQJCQkJZGF0YWxlbiA9IDA7CisJVUlOVAkJCQlza2JsZW4gPSAwOworCXA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdAkqbXNnOworCVVJTlQ4CQkJCSpkYXRhcDsKKwlVSU5UMTYJCQkJZmM7CisJc3RydWN0IHNrX2J1ZmYJCQkqc2tiOworCWhmYTM4NHhfdAkJICAgICAgICAqaHcgPSB3bGFuZGV2LT5wcml2OworCisKKwlEQkZFTlRFUjsKKwkvKiBEb24ndCBmb3JnZXQgdGhlIHN0YXR1cywgdGltZSwgYW5kIGRhdGFfbGVuIGZpZWxkcyBhcmUgaW4gaG9zdCBvcmRlciAqLworCS8qIEZpZ3VyZSBvdXQgaG93IGJpZyB0aGUgZnJhbWUgaXMgKi8KKwlmYyA9IGllZWUyaG9zdDE2KHJ4ZGVzYy0+ZnJhbWVfY29udHJvbCk7CisJaGRybGVuID0gcDgwMjExX2hlYWRlcmxlbihmYyk7CisJZGF0YWxlbiA9IGhmYTM4NHgyaG9zdF8xNihyeGRlc2MtPmRhdGFfbGVuKTsKKworCS8qIEFsbG9jYXRlIGFuIGluZCBtZXNzYWdlK2ZyYW1lc2l6ZSBza2IgKi8KKwlza2JsZW4gPSBzaXplb2YocDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90KSArCisJCWhkcmxlbiArIGRhdGFsZW4gKyBXTEFOX0NSQ19MRU47CisKKwkvKiBzYW5pdHkgY2hlY2sgdGhlIGxlbmd0aCAqLworCWlmICggc2tibGVuID4KKwkJKHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpICsKKwkJV0xBTl9IRFJfQTRfTEVOICsgV0xBTl9EQVRBX01BWExFTiArIFdMQU5fQ1JDX0xFTikgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsICJvdmVybGVuIGZybTogbGVuPSV6ZFxuIiwKKwkJCXNrYmxlbiAtIHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpKTsKKwl9CisKKwlpZiAoIChza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYmxlbikpID09IE5VTEwgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJhbGxvY19za2IgZmFpbGVkIHRyeWluZyB0byBhbGxvY2F0ZSAlZCBieXRlc1xuIiwgc2tibGVuKTsKKwkJcmV0dXJuOworCX0KKworCS8qIG9ubHkgcHJlcGVuZCB0aGUgcHJpc20gaGVhZGVyIGlmIGluIHRoZSByaWdodCBtb2RlICovCisJaWYgKCh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxMV9QUklTTSkgJiYKKwkgICAgKGh3LT5zbmlmZmhkciA9PSAwKSkgeworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBzaXplb2YocDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90KSk7CisJCW1zZyA9IChwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QqKSBkYXRhcDsKKworCQkvKiBJbml0aWFsaXplIHRoZSBtZXNzYWdlIG1lbWJlcnMgKi8KKwkJbXNnLT5tc2djb2RlID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybTsKKwkJbXNnLT5tc2dsZW4gPSBzaXplb2YocDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90KTsKKwkJc3RyY3B5KG1zZy0+ZGV2bmFtZSwgd2xhbmRldi0+bmFtZSk7CisKKwkJbXNnLT5ob3N0dGltZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2hvc3R0aW1lOworCQltc2ctPmhvc3R0aW1lLnN0YXR1cyA9IDA7CisJCW1zZy0+aG9zdHRpbWUubGVuID0gNDsKKwkJbXNnLT5ob3N0dGltZS5kYXRhID0gamlmZmllczsKKworCQltc2ctPm1hY3RpbWUuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9tYWN0aW1lOworCQltc2ctPm1hY3RpbWUuc3RhdHVzID0gMDsKKwkJbXNnLT5tYWN0aW1lLmxlbiA9IDQ7CisJCW1zZy0+bWFjdGltZS5kYXRhID0gcnhkZXNjLT50aW1lOworCisJCW1zZy0+Y2hhbm5lbC5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2NoYW5uZWw7CisJCW1zZy0+Y2hhbm5lbC5zdGF0dXMgPSAwOworCQltc2ctPmNoYW5uZWwubGVuID0gNDsKKwkJbXNnLT5jaGFubmVsLmRhdGEgPSBody0+c25pZmZfY2hhbm5lbDsKKworCQltc2ctPnJzc2kuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9yc3NpOworCQltc2ctPnJzc2kuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZTsKKwkJbXNnLT5yc3NpLmxlbiA9IDQ7CisJCW1zZy0+cnNzaS5kYXRhID0gMDsKKworCQltc2ctPnNxLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc3E7CisJCW1zZy0+c3Euc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZTsKKwkJbXNnLT5zcS5sZW4gPSA0OworCQltc2ctPnNxLmRhdGEgPSAwOworCisJCW1zZy0+c2lnbmFsLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc2lnbmFsOworCQltc2ctPnNpZ25hbC5zdGF0dXMgPSAwOworCQltc2ctPnNpZ25hbC5sZW4gPSA0OworCQltc2ctPnNpZ25hbC5kYXRhID0gcnhkZXNjLT5zaWduYWw7CisKKwkJbXNnLT5ub2lzZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX25vaXNlOworCQltc2ctPm5vaXNlLnN0YXR1cyA9IDA7CisJCW1zZy0+bm9pc2UubGVuID0gNDsKKwkJbXNnLT5ub2lzZS5kYXRhID0gcnhkZXNjLT5zaWxlbmNlOworCisJCW1zZy0+cmF0ZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3JhdGU7CisJCW1zZy0+cmF0ZS5zdGF0dXMgPSAwOworCQltc2ctPnJhdGUubGVuID0gNDsKKwkJbXNnLT5yYXRlLmRhdGEgPSByeGRlc2MtPnJhdGUgLyA1OyAvKiBzZXQgdG8gODAyLjExIHVuaXRzICovCisKKwkJbXNnLT5pc3R4LmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faXN0eDsKKwkJbXNnLT5pc3R4LnN0YXR1cyA9IDA7CisJCW1zZy0+aXN0eC5sZW4gPSA0OworCQltc2ctPmlzdHguZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisKKwkJbXNnLT5mcm1sZW4uZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9mcm1sZW47CisJCW1zZy0+ZnJtbGVuLnN0YXR1cyA9IDA7CisJCW1zZy0+ZnJtbGVuLmxlbiA9IDQ7CisJCW1zZy0+ZnJtbGVuLmRhdGEgPSBoZHJsZW4gKyBkYXRhbGVuICsgV0xBTl9DUkNfTEVOOworCX0gZWxzZSBpZiAoKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNKSAmJgorCQkgICAoaHctPnNuaWZmaGRyICE9IDApKSB7CisJCXA4MDIxMV9jYXBoZHJfdAkJKmNhcGhkcjsKKwkJLyogVGhlIE5FVyBoZWFkZXIgZm9ybWF0ISAqLworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBzaXplb2YocDgwMjExX2NhcGhkcl90KSk7CisJCWNhcGhkciA9IChwODAyMTFfY2FwaGRyX3QqKSBkYXRhcDsKKworCQljYXBoZHItPnZlcnNpb24gPQlodG9ubChQODAyMTFDQVBUVVJFX1ZFUlNJT04pOworCQljYXBoZHItPmxlbmd0aCA9CWh0b25sKHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKKwkJY2FwaGRyLT5tYWN0aW1lID0JX19jcHVfdG9fYmU2NChyeGRlc2MtPnRpbWUpICogMTAwMDsKKwkJY2FwaGRyLT5ob3N0dGltZSA9CV9fY3B1X3RvX2JlNjQoamlmZmllcyk7CisJCWNhcGhkci0+cGh5dHlwZSA9CWh0b25sKDQpOyAvKiBkc3NfZG90MTFfYiAqLworCQljYXBoZHItPmNoYW5uZWwgPQlodG9ubChody0+c25pZmZfY2hhbm5lbCk7CisJCWNhcGhkci0+ZGF0YXJhdGUgPQlodG9ubChyeGRlc2MtPnJhdGUpOworCQljYXBoZHItPmFudGVubmEgPQlodG9ubCgwKTsgLyogdW5rbm93biAqLworCQljYXBoZHItPnByaW9yaXR5ID0JaHRvbmwoMCk7IC8qIHVua25vd24gKi8KKwkJY2FwaGRyLT5zc2lfdHlwZSA9CWh0b25sKDMpOyAvKiByc3NpX3JhdyAqLworCQljYXBoZHItPnNzaV9zaWduYWwgPQlodG9ubChyeGRlc2MtPnNpZ25hbCk7CisJCWNhcGhkci0+c3NpX25vaXNlID0JaHRvbmwocnhkZXNjLT5zaWxlbmNlKTsKKwkJY2FwaGRyLT5wcmVhbWJsZSA9CWh0b25sKDApOyAvKiB1bmtub3duICovCisJCWNhcGhkci0+ZW5jb2RpbmcgPQlodG9ubCgxKTsgLyogY2NrICovCisJfQorCisJLyogQ29weSB0aGUgODAyLjExIGhlYWRlciB0byB0aGUgc2tiIChjdGwgZnJhbWVzIG1heSBiZSBsZXNzIHRoYW4gYSBmdWxsIGhlYWRlcikgKi8KKwlkYXRhcCA9IHNrYl9wdXQoc2tiLCBoZHJsZW4pOworCW1lbWNweSggZGF0YXAsICYocnhkZXNjLT5mcmFtZV9jb250cm9sKSwgaGRybGVuKTsKKworCS8qIElmIGFueSwgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBjYXJkIHRvIHRoZSBza2IgKi8KKwlpZiAoIGRhdGFsZW4gPiAwICkKKwl7CisJCWRhdGFwID0gc2tiX3B1dChza2IsIGRhdGFsZW4pOworCQltZW1jcHkoZGF0YXAsIHJ4ZnJtLT5kYXRhLCBkYXRhbGVuKTsKKworCQkvKiBjaGVjayBmb3IgdW5lbmNyeXB0ZWQgc3R1ZmYgaWYgV0VQIGJpdCBzZXQuICovCisJCWlmICgqKGRhdGFwIC0gaGRybGVuICsgMSkgJiAweDQwKSAvLyB3ZXAgc2V0CisJCSAgaWYgKCgqKGRhdGFwKSA9PSAweGFhKSAmJiAoKihkYXRhcCsxKSA9PSAweGFhKSkKKwkJICAgICooZGF0YXAgLSBoZHJsZW4gKyAxKSAmPSAweGJmOyAvLyBjbGVhciB3ZXA7IGl0J3MgdGhlIDgwMi4yIGhlYWRlciEKKwl9CisKKwlpZiAoaHctPnNuaWZmX2ZjcykgeworCQkvKiBTZXQgdGhlIEZDUyAqLworCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBXTEFOX0NSQ19MRU4pOworCQltZW1zZXQoIGRhdGFwLCAweGZmLCBXTEFOX0NSQ19MRU4pOworCX0KKworCS8qIHBhc3MgaXQgYmFjayB1cCAqLworCXByaXNtMnN0YV9ldl9yeCh3bGFuZGV2LCBza2IpOworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2Jpbl9pbmZvCisqCisqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgcmVjZWl2ZWQgYSBQcmlzbTIgaW5mbyBmcmFtZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZQorKgl1c2JpbgkJcHRyIHRvIHRoZSB1c2IgdHJhbnNmZXIgYnVmZmVyCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2luZm8od2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYmluX3QgKnVzYmluKQoreworCURCRkVOVEVSOworCisJdXNiaW4tPmluZm9mcm0uaW5mby5mcmFtZWxlbiA9IGhmYTM4NHgyaG9zdF8xNih1c2Jpbi0+aW5mb2ZybS5pbmZvLmZyYW1lbGVuKTsKKwlwcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2LCAmdXNiaW4tPmluZm9mcm0uaW5mbyk7CisKKwlEQkZFWElUOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNib3V0X2NhbGxiYWNrCisqCisqIENhbGxiYWNrIGZvciBVUkJzIG9uIHRoZSBCVUxLT1VUIGVuZHBvaW50LgorKgorKiBBcmd1bWVudHM6CisqCXVyYgkJcHRyIHRvIHRoZSBjb21wbGV0ZWQgdXJiCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZkZWYgVVJCX09OTFlfQ0FMTEJBQ0sKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNib3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKKyNlbHNlCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYm91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorI2VuZGlmCit7CisJd2xhbmRldmljZV90CQkqd2xhbmRldiA9IHVyYi0+Y29udGV4dDsKKwloZmEzODR4X3VzYm91dF90CSp1c2JvdXQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlEQkZFTlRFUjsKKworI2lmZGVmIERFQlVHX1VTQgorCWRicHJpbnRfdXJiKHVyYik7CisjZW5kaWYKKworCWlmICggd2xhbmRldiAmJgorCSAgICAgd2xhbmRldi0+bmV0ZGV2ICkgeworCisJCXN3aXRjaCh1cmItPnN0YXR1cykgeworCQljYXNlIDA6CisJCQloZmEzODR4X3VzYm91dF90eCh3bGFuZGV2LCB1c2JvdXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSAtRVBJUEU6CisJCXsKKwkJCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCQkJV0xBTl9MT0dfV0FSTklORygiJXMgdHggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkJICAgICAgICAgICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQkJaWYgKCAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSApCisJCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2Vycm9ycyk7CisJCQlicmVhazsKKwkJfQorCisJCWNhc2UgLUVQUk9UTzoKKwkJY2FzZSAtRVRJTUVET1VUOgorCQljYXNlIC1FSUxTRVE6CisJCXsKKwkJCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCisJCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFRIUk9UVExFX1RYLCAmaHctPnVzYl9mbGFncykKKwkJCSAgICAgJiYgIXRpbWVyX3BlbmRpbmcoJmh3LT50aHJvdHRsZSkgKSB7CisJCQkJbW9kX3RpbWVyKCZody0+dGhyb3R0bGUsCisJCQkJICAgICAgICAgIGppZmZpZXMgKyBUSFJPVFRMRV9KSUZGSUVTKTsKKwkJCX0KKwkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2Vycm9ycyk7CisJCQluZXRpZl9zdG9wX3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7CisJCQlicmVhazsKKwkJfQorCisJCWNhc2UgLUVOT0VOVDoKKwkJY2FzZSAtRVNIVVRET1dOOgorCQkJLyogSWdub3JhYmxlIGVycm9ycyAqLworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCVdMQU5fTE9HX0lORk8oInVua25vd24gdXJiLT5zdGF0dXM9JWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2Vycm9ycyk7CisJCQlicmVhazsKKwkJfSAvKiBzd2l0Y2ggKi8KKwl9CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2N0bHhvdXRfY2FsbGJhY2sKKyoKKyogQ2FsbGJhY2sgZm9yIGNvbnRyb2wgZGF0YSBvbiB0aGUgQlVMS09VVCBlbmRwb2ludC4KKyoKKyogQXJndW1lbnRzOgorKgl1cmIJCXB0ciB0byB0aGUgY29tcGxldGVkIHVyYgorKgorKiBSZXR1cm5zOgorKiBub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKiBpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFVSQl9PTkxZX0NBTExCQUNLCitzdGF0aWMgdm9pZCBoZmEzODR4X2N0bHhvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQorI2Vsc2UKK3N0YXRpYyB2b2lkIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorI2VuZGlmCit7CisJaGZhMzg0eF90CSpodyA9IHVyYi0+Y29udGV4dDsKKwlpbnQgICAgICAgICAgICAgZGVsZXRlX3Jlc3B0aW1lciA9IDA7CisJaW50ICAgICAgICAgICAgIHRpbWVyX29rID0gMTsKKwlpbnQJCXJ1bl9xdWV1ZSA9IDA7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCURCRkVOVEVSOworCisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5zdGF0dXM9JWRcbiIsIHVyYi0+c3RhdHVzKTsKKyNpZmRlZiBERUJVR19VU0IKKwlkYnByaW50X3VyYih1cmIpOworI2VuZGlmCisJaWYgKCAodXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikgfHwKKwkgICAgICh1cmItPnN0YXR1cyA9PSAtRU5PREVWKSB8fAorCSAgICAgKGh3ID09IE5VTEwpICkKKwkJZ290byBkb25lOworCityZXRyeToKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogT25seSBvbmUgQ1RMWCBhdCBhIHRpbWUgb24gdGhlICJhY3RpdmUiIGxpc3QsIGFuZAorCSAqIG5vbmUgYXQgYWxsIGlmIHdlIGFyZSB1bnBsdWdnZWQuIEhvd2V2ZXIsIHdlIGNhbgorCSAqIHJlbHkgb24gdGhlIGRpc2Nvbm5lY3QgZnVuY3Rpb24gdG8gY2xlYW4gZXZlcnl0aGluZworCSAqIHVwIGlmIHNvbWVvbmUgdW5wbHVnZ2VkIHRoZSBhZGFwdGVyLgorCSAqLworCWlmICggbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIEhhdmluZyBzb21ldGhpbmcgb24gdGhlICJhY3RpdmUiIHF1ZXVlIG1lYW5zCisJICogdGhhdCB3ZSBoYXZlIHRpbWVycyB0byB3b3JyeSBhYm91dCAuLi4KKwkgKi8KKwlpZiAoZGVsX3RpbWVyKCZody0+cmVxdGltZXIpID09IDApIHsKKwkJaWYgKGh3LT5yZXFfdGltZXJfZG9uZSA9PSAwKSB7CisJCQkvKgorCQkJICogVGhpcyB0aW1lciB3YXMgYWN0dWFsbHkgcnVubmluZyB3aGlsZSB3ZQorCQkJICogd2VyZSB0cnlpbmcgdG8gZGVsZXRlIGl0LiBMZXQgaXQgdGVybWluYXRlCisJCQkgKiBncmFjZWZ1bGx5IGluc3RlYWQuCisJCQkgKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCQlnb3RvIHJldHJ5OworCQl9CisJfQorCWVsc2UgeworCQlody0+cmVxX3RpbWVyX2RvbmUgPSAxOworCX0KKworCWN0bHggPSBnZXRfYWN0aXZlX2N0bHgoaHcpOworCisJaWYgKCB1cmItPnN0YXR1cyA9PSAwICkgeworCQkvKiBSZXF1ZXN0IHBvcnRpb24gb2YgYSBDVExYIGlzIHN1Y2Nlc3NmdWwgKi8KKwkJc3dpdGNoICggY3RseC0+c3RhdGUgKSB7CisJCWNhc2UgQ1RMWF9SRVFfU1VCTUlUVEVEOgorCQkJLyogVGhpcyBPVVQtQUNLIHJlY2VpdmVkIGJlZm9yZSBJTiAqLworCQkJY3RseC0+c3RhdGUgPSBDVExYX1JFUV9DT01QTEVURTsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1RMWF9SRVNQX0NPTVBMRVRFOgorCQkJLyogSU4gYWxyZWFkeSByZWNlaXZlZCBiZWZvcmUgdGhpcyBPVVQtQUNLLAorCQkJICogc28gdGhpcyBjb21tYW5kIG11c3Qgbm93IGJlIGNvbXBsZXRlLgorCQkJICovCisJCQljdGx4LT5zdGF0ZSA9IENUTFhfQ09NUExFVEU7CisJCQl1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGh3LCBjdGx4KTsKKwkJCXJ1bl9xdWV1ZSA9IDE7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyogVGhpcyBpcyBOT1QgYSB2YWxpZCBDVExYICJzdWNjZXNzIiBzdGF0ZSEgKi8KKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJICAgICJJbGxlZ2FsIENUTFhbJWRdIHN1Y2Nlc3Mgc3RhdGUoJXMsICVkKSBpbiBPVVQgVVJCXG4iLAorCQkJICAgIGhmYTM4NHgyaG9zdF8xNihjdGx4LT5vdXRidWYudHlwZSksCisJCQkgICAgY3RseHN0cihjdGx4LT5zdGF0ZSksIHVyYi0+c3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IC8qIHN3aXRjaCAqLworCX0gZWxzZSB7CisJCS8qIElmIHRoZSBwaXBlIGhhcyBzdGFsbGVkIHRoZW4gd2UgbmVlZCB0byByZXNldCBpdCAqLworCQlpZiAoICh1cmItPnN0YXR1cyA9PSAtRVBJUEUpICYmCisJCSAgICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkgeworCQkJV0xBTl9MT0dfV0FSTklORygiJXMgdHggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkJICAgICAgICAgICAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CisJCX0KKworCQkvKiBJZiBzb21lb25lIGNhbmNlbHMgdGhlIE9VVCBVUkIgdGhlbiBpdHMgc3RhdHVzCisJCSAqIHNob3VsZCBiZSBlaXRoZXIgLUVDT05OUkVTRVQgb3IgLUVOT0VOVC4KKwkJICovCisJCWN0bHgtPnN0YXRlID0gQ1RMWF9SRVFfRkFJTEVEOworCQl1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGh3LCBjdGx4KTsKKwkJZGVsZXRlX3Jlc3B0aW1lciA9IDE7CisJCXJ1bl9xdWV1ZSA9IDE7CisJfQorCisgZGVscmVzcDoKKwlpZiAoZGVsZXRlX3Jlc3B0aW1lcikgeworCQlpZiAoKHRpbWVyX29rID0gZGVsX3RpbWVyKCZody0+cmVzcHRpbWVyKSkgIT0gMCkgeworCQkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaWYgKCAhdGltZXJfb2sgJiYgKGh3LT5yZXNwX3RpbWVyX2RvbmUgPT0gMCkgKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCQlnb3RvIGRlbHJlc3A7CisJfQorCisJaWYgKHJ1bl9xdWV1ZSkKKwkJaGZhMzg0eF91c2JjdGx4cV9ydW4oaHcpOworCisgZG9uZToKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbgorKgorKiBUaW1lciByZXNwb25zZSBmdW5jdGlvbiBmb3IgQ1RMWCByZXF1ZXN0IHRpbWVvdXRzLiAgSWYgdGhpcworKiBmdW5jdGlvbiBpcyBjYWxsZWQsIGl0IG1lYW5zIHRoYXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgT1VUCisqIFVSQiBjb250YWluaW5nIGEgUHJpc20yLnggWFhYX1JlcXVlc3Qgd2FzIG5ldmVyIGNhbGxlZC4KKyoKKyogQXJndW1lbnRzOgorKglkYXRhCQlhIHB0ciB0byB0aGUgaGZhMzg0eF90CisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4X3JlcXRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKQoreworCWhmYTM4NHhfdAkqaHcgPSAoaGZhMzg0eF90KilkYXRhOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaHctPnJlcV90aW1lcl9kb25lID0gMTsKKworCS8qIFJlbW92aW5nIHRoZSBoYXJkd2FyZSBhdXRvbWF0aWNhbGx5IGVtcHRpZXMKKwkgKiB0aGUgYWN0aXZlIGxpc3QgLi4uCisJICovCisJaWYgKCAhbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgKQorCXsKKwkJLyoKKwkJICogV2UgbXVzdCBlbnN1cmUgdGhhdCBvdXIgVVJCIGlzIHJlbW92ZWQgZnJvbQorCQkgKiB0aGUgc3lzdGVtLCBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBleHBpcmVkLgorCQkgKi8KKwkJaHctPmN0bHhfdXJiLnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisJCWlmICh1c2JfdW5saW5rX3VyYigmaHctPmN0bHhfdXJiKSA9PSAtRUlOUFJPR1JFU1MpCisJCXsKKwkJCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4ID0gZ2V0X2FjdGl2ZV9jdGx4KGh3KTsKKworCQkJY3RseC0+c3RhdGUgPSBDVExYX1JFUV9GQUlMRUQ7CisKKwkJCS8qIFRoaXMgVVJCIHdhcyBhY3RpdmUsIGJ1dCBoYXMgbm93IGJlZW4KKwkJCSAqIGNhbmNlbGxlZC4gSXQgd2lsbCBub3cgaGF2ZSBhIHN0YXR1cyBvZgorCQkJICogLUVDT05OUkVTRVQgaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorCQkJICoKKwkJCSAqIFdlIGFyZSBjYW5jZWxsaW5nIHRoaXMgQ1RMWCwgc28gd2UncmUKKwkJCSAqIG5vdCBnb2luZyB0byBuZWVkIHRvIHdhaXQgZm9yIGEgcmVzcG9uc2UuCisJCQkgKiBUaGUgVVJCJ3MgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBjaGVjaworCQkJICogdGhhdCB0aGlzIHRpbWVyIGlzIHRydWx5IGRlYWQuCisJCQkgKi8KKwkJCWlmIChkZWxfdGltZXIoJmh3LT5yZXNwdGltZXIpICE9IDApCisJCQkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JjdGx4X3Jlc3B0aW1lcmZuCisqCisqIFRpbWVyIHJlc3BvbnNlIGZ1bmN0aW9uIGZvciBDVExYIHJlc3BvbnNlIHRpbWVvdXRzLiAgSWYgdGhpcworKiBmdW5jdGlvbiBpcyBjYWxsZWQsIGl0IG1lYW5zIHRoYXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgSU4KKyogVVJCIGNvbnRhaW5pbmcgYSBQcmlzbTIueCBYWFhfUmVzcG9uc2Ugd2FzIG5ldmVyIGNhbGxlZC4KKyoKKyogQXJndW1lbnRzOgorKglkYXRhCQlhIHB0ciB0byB0aGUgaGZhMzg0eF90CisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4X3Jlc3B0aW1lcmZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCopZGF0YTsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CisKKwkvKiBUaGUgYWN0aXZlIGxpc3Qgd2lsbCBiZSBlbXB0eSBpZiB0aGUKKwkgKiBhZGFwdGVyIGhhcyBiZWVuIHVucGx1Z2dlZCAuLi4KKwkgKi8KKwlpZiAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSApCisJeworCQloZmEzODR4X3VzYmN0bHhfdCAqY3RseCA9IGdldF9hY3RpdmVfY3RseChodyk7CisKKwkJaWYgKCB1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhodywgY3RseCkgPT0gMCApCisJCXsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCQloZmEzODR4X3VzYmN0bHhxX3J1bihodyk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisgZG9uZToKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JfdGhyb3R0bGVmbgorKgorKgorKiBBcmd1bWVudHM6CisqCWRhdGEJcHRyIHRvIGh3CisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCUludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JfdGhyb3R0bGVmbih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QqKWRhdGE7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJREJGRU5URVI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogV2UgbmVlZCB0byBjaGVjayBCT1RIIHRoZSBSWCBhbmQgdGhlIFRYIHRocm90dGxlIGNvbnRyb2xzLAorCSAqIHNvIHdlIHVzZSB0aGUgYml0d2lzZSBPUiBpbnN0ZWFkIG9mIHRoZSBsb2dpY2FsIE9SLgorCSAqLworCVdMQU5fTE9HX0RFQlVHKDMsICJmbGFncz0weCVseFxuIiwgaHctPnVzYl9mbGFncyk7CisJaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJgorCSAgICAgKAorCSAgICAgICAodGVzdF9hbmRfY2xlYXJfYml0KFRIUk9UVExFX1JYLCAmaHctPnVzYl9mbGFncykgJiYKKwkgICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSkKKwkgICAgICAgfAorCSAgICAgICAodGVzdF9hbmRfY2xlYXJfYml0KFRIUk9UVExFX1RYLCAmaHctPnVzYl9mbGFncykgJiYKKwkgICAgICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfUkVTVU1FLCAmaHctPnVzYl9mbGFncykpCisJICAgICApICkKKwl7CisJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiY3RseF9zdWJtaXQKKyoKKyogQ2FsbGVkIGZyb20gdGhlIGRveHh4IGZ1bmN0aW9ucyB0byBzdWJtaXQgYSBDVExYIHRvIHRoZSBxdWV1ZQorKgorKiBBcmd1bWVudHM6CisqCWh3CQlwdHIgdG8gdGhlIGh3IHN0cnVjdAorKgljdGx4CQljdGx4IHN0cnVjdHVyZSB0byBlbnF1ZXVlCisqCisqIFJldHVybnM6CisqCS1FTk9ERVYgaWYgdGhlIGFkYXB0ZXIgaXMgdW5wbHVnZ2VkCisqCTAKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3Mgb3IgaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK2hmYTM4NHhfdXNiY3RseF9zdWJtaXQoCisJaGZhMzg0eF90CQkqaHcsCisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJREJGRU5URVI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCWlmIChody0+d2xhbmRldi0+aHdyZW1vdmVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCXJldCA9IC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJY3RseC0+c3RhdGUgPSBDVExYX1BFTkRJTkc7CisJCWxpc3RfYWRkX3RhaWwoJmN0bHgtPmxpc3QsICZody0+Y3RseHEucGVuZGluZyk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJaGZhMzg0eF91c2JjdGx4cV9ydW4oaHcpOworCQlyZXQgPSAwOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJldDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JvdXRfdHgKKyoKKyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGZpbmlzaGVkIGEgc2VuZCBvZiBhIGZyYW1lLiAgTWFyayB0aGUgVVJCCisqIGFzIGF2YWlsYWJsZSBhbmQgY2FsbCBldl9hbGxvYyB0byBub3RpZnkgaGlnaGVyIGxheWVycyB3ZSdyZQorKiByZWFkeSBmb3IgbW9yZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZQorKgl1c2JvdXQJCXB0ciB0byB0aGUgdXNiIHRyYW5zZmVyIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JvdXRfdHgod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYm91dF90ICp1c2JvdXQpCit7CisJREJGRU5URVI7CisKKwlwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldik7CisKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9pc2dvb2RfcGRyY29yZQorKgorKiBRdWljayBjaGVjayBvZiBQRFIgY29kZXMuCisqCisqIEFyZ3VtZW50czoKKyoJcGRyY29kZQkJUERSIGNvZGUgbnVtYmVyIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgl6ZXJvCQlub3QgZ29vZC4KKyoJb25lCQlpcyBnb29kLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF9pc2dvb2RfcGRyY29kZShVSU5UMTYgcGRyY29kZSkKK3sKKwlzd2l0Y2gocGRyY29kZSkgeworCWNhc2UgSEZBMzg0eF9QRFJfRU5EX09GX1BEQToKKwljYXNlIEhGQTM4NHhfUERSX1BDQl9QQVJUTlVNOgorCWNhc2UgSEZBMzg0eF9QRFJfUERBVkVSOgorCWNhc2UgSEZBMzg0eF9QRFJfTklDX1NFUklBTDoKKwljYXNlIEhGQTM4NHhfUERSX01LS19NRUFTVVJFTUVOVFM6CisJY2FzZSBIRkEzODR4X1BEUl9OSUNfUkFNU0laRToKKwljYXNlIEhGQTM4NHhfUERSX01GSVNVUFJBTkdFOgorCWNhc2UgSEZBMzg0eF9QRFJfQ0ZJU1VQUkFOR0U6CisJY2FzZSBIRkEzODR4X1BEUl9OSUNJRDoKKwljYXNlIEhGQTM4NHhfUERSX01BQ19BRERSRVNTOgorCWNhc2UgSEZBMzg0eF9QRFJfUkVHRE9NQUlOOgorCWNhc2UgSEZBMzg0eF9QRFJfQUxMT1dFRF9DSEFOTkVMOgorCWNhc2UgSEZBMzg0eF9QRFJfREVGQVVMVF9DSEFOTkVMOgorCWNhc2UgSEZBMzg0eF9QRFJfVEVNUFRZUEU6CisJY2FzZSBIRkEzODR4X1BEUl9JRlJfU0VUVElORzoKKwljYXNlIEhGQTM4NHhfUERSX1JGUl9TRVRUSU5HOgorCWNhc2UgSEZBMzg0eF9QRFJfSEZBMzg2MV9CQVNFTElORToKKwljYXNlIEhGQTM4NHhfUERSX0hGQTM4NjFfU0hBRE9XOgorCWNhc2UgSEZBMzg0eF9QRFJfSEZBMzg2MV9JRlJGOgorCWNhc2UgSEZBMzg0eF9QRFJfSEZBMzg2MV9DSENBTFNQOgorCWNhc2UgSEZBMzg0eF9QRFJfSEZBMzg2MV9DSENBTEk6CisJY2FzZSBIRkEzODR4X1BEUl8zODQyX05JQ19DT05GSUc6CisJY2FzZSBIRkEzODR4X1BEUl9VU0JfSUQ6CisJY2FzZSBIRkEzODR4X1BEUl9QQ0lfSUQ6CisJY2FzZSBIRkEzODR4X1BEUl9QQ0lfSUZDT05GOgorCWNhc2UgSEZBMzg0eF9QRFJfUENJX1BNQ09ORjoKKwljYXNlIEhGQTM4NHhfUERSX1JGRU5SR1k6CisJY2FzZSBIRkEzODR4X1BEUl9IRkEzODYxX01BTkZfVEVTVFNQOgorCWNhc2UgSEZBMzg0eF9QRFJfSEZBMzg2MV9NQU5GX1RFU1RJOgorCQkvKiBjb2RlIGlzIE9LICovCisJCXJldHVybiAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoIHBkcmNvZGUgPCAweDEwMDAgKSB7CisJCQkvKiBjb2RlIGlzIE9LLCBidXQgd2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgaXQgaXMgKi8KKwkJCVdMQU5fTE9HX0RFQlVHKDMsCisJCQkJIkVuY291bnRlcmVkIHVua25vd24gUERSIz0weCUwNHgsICIKKwkJCQkiYXNzdW1pbmcgaXQncyBvay5cbiIsCisJCQkJcGRyY29kZSk7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIHsKKwkJCS8qIGJhZCBjb2RlICovCisJCQlXTEFOX0xPR19ERUJVRygzLAorCQkJCSJFbmNvdW50ZXJlZCB1bmtub3duIFBEUiM9MHglMDR4LCAiCisJCQkJIig+PTB4MTAwMCksIGFzc3VtaW5nIGl0J3MgYmFkLlxuIiwKKwkJCQlwZHJjb2RlKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsgLyogYXZvaWQgY29tcGlsZXIgd2FybmluZ3MgKi8KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MTIxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMKQEAgLTAsMCArMSw2ODMgQEAKKy8qIHNyYy9wODAyMTEvcDgwMjExY29udi5jCisqCisqIEV0aGVyLzgwMi4xMSBjb252ZXJzaW9ucyBhbmQgcGFja2V0IGJ1ZmZlciByb3V0aW5lcworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZnVuY3Rpb25zIHRoYXQgcGVyZm9ybSBFdGhlcm5ldCB0by9mcm9tCisqIDgwMi4xMSBmcmFtZSBjb252ZXJzaW9ucy4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKyNkZWZpbmUgX19OT19WRVJTSU9OX18JCS8qIHByZXZlbnQgdGhlIHN0YXRpYyBkZWZpbml0aW9uICovCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCisjaW5jbHVkZSAicDgwMjExaGRyLmgiCisjaW5jbHVkZSAicDgwMjExY29udi5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFtc2cuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKyNpbmNsdWRlICJwODAyMTFpb2N0bC5oIgorI2luY2x1ZGUgInA4MDIxMXJlcS5oIgorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBDb25zdGFudHMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIE1hY3JvcyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBUeXBlcyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBTdGF0aWMgRGVmaW5pdGlvbnMgKi8KKworc3RhdGljIFVJTlQ4CW91aV9yZmMxMDQyW10gPSB7MHgwMCwgMHgwMCwgMHgwMH07CitzdGF0aWMgVUlOVDgJb3VpXzgwMjFoW10gPSB7MHgwMCwgMHgwMCwgMHhmOH07CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMXBiX2V0aGVyX3RvXzgwMjExCisqCisqIFVzZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBldGhlciBmcmFtZSBhbmQgdGhlIGV0aGVyY29udiBzZXR0aW5nCisqIHRvIGJ1aWxkIHRoZSBlbGVtZW50cyBvZiB0aGUgODAyLjExIGZyYW1lLgorKgorKiBXZSBkb24ndCBhY3R1YWxseSBzZXQKKyogdXAgdGhlIGZyYW1lIGhlYWRlciBoZXJlLiAgVGhhdCdzIHRoZSBNQUMncyBqb2IuICBXZSdyZSBvbmx5IGhhbmRsaW5nCisqIGNvbnZlcnNpb24gb2YgRElYSUkgb3IgODAyLjMrTExDIGZyYW1lcyB0byBzb21ldGhpbmcgdGhhdCB3b3JrcworKiB3aXRoIDgwMi4xMS4KKyoKKyogTm90ZSAtLSA4MDIuMTEgaGVhZGVyIGlzIE5PVCBwYXJ0IG9mIHRoZSBza2IuICBMaWtld2lzZSwgdGhlIDgwMi4xMQorKiAgICAgICAgIEZDUyBpcyBhbHNvIG5vdCBwcmVzZW50IGFuZCB3aWxsIG5lZWQgdG8gYmUgYWRkZWQgZWxzZXdoZXJlLgorKgorKiBBcmd1bWVudHM6CisqCWV0aGNvbnYJCUNvbnZlcnNpb24gdHlwZSB0byBwZXJmb3JtCisqCXNrYgkJc2tidWZmIGNvbnRhaW5pbmcgdGhlIGV0aGVyIGZyYW1lCisqICAgICAgIHA4MDIxMV9oZHIgICAgICA4MDIuMTEgaGVhZGVyCisqCisqIFJldHVybnM6CisqCTAgb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBza2JfZXRoZXJfdG9fcDgwMjExKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQzMiBldGhjb252LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApCit7CisKKwlVSU5UMTYgICAgICAgICAgZmM7CisJVUlOVDE2ICAgICAgICAgIHByb3RvOworCXdsYW5fZXRoaGRyX3QgICBlX2hkcjsKKwl3bGFuX2xsY190ICAgICAgKmVfbGxjOworCXdsYW5fc25hcF90ICAgICAqZV9zbmFwOworCWludCBmb287CisKKwlEQkZFTlRFUjsKKwltZW1jcHkoJmVfaGRyLCBza2ItPmRhdGEsIHNpemVvZihlX2hkcikpOworCisJaWYgKHNrYi0+bGVuIDw9IDApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwgInplcm8tbGVuZ3RoIHNrYiFcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoIGV0aGNvbnYgPT0gV0xBTl9FVEhDT05WX0VOQ0FQICkgeyAvKiBzaW1wbGVzdCBjYXNlICovCisJICAgICAgICBXTEFOX0xPR19ERUJVRygzLCAiRU5DQVAgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOworCQkvKiBoZXJlLCB3ZSBkb24ndCBjYXJlIHdoYXQga2luZCBvZiBldGhlciBmcm0uIEp1c3Qgc3RpY2sgaXQgKi8KKwkJLyogIGluIHRoZSA4MDIxMSBwYXlsb2FkICovCisJCS8qIHdoaWNoIGlzIHRvIHNheSwgbGVhdmUgdGhlIHNrYiBhbG9uZS4gKi8KKwl9IGVsc2UgeworCQkvKiBzdGVwIDE6IGNsYXNzaWZ5IGV0aGVyIGZyYW1lLCBESVggb3IgODAyLjM/ICovCisJCXByb3RvID0gbnRvaHMoZV9oZHIudHlwZSk7CisJCWlmICggcHJvdG8gPD0gMTUwMCApIHsKKwkJICAgICAgICBXTEFOX0xPR19ERUJVRygzLCAiODAyLjMgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgLyogY29kZXMgPD0gMTUwMCByZXNlcnZlZCBmb3IgODAyLjMgbGVuZ3RocyAqLworCQkJLyogaXQncyA4MDIuMywgcGFzcyBldGhlciBwYXlsb2FkIHVuY2hhbmdlZCwgICovCisKKwkJCS8qIHRyaW0gb2ZmIGV0aGVybmV0IGhlYWRlciAqLworCQkJc2tiX3B1bGwoc2tiLCBXTEFOX0VUSEhEUl9MRU4pOworCisJCQkvKiAgIGxlYXZlIG9mZiBhbnkgUEFEIG9jdGV0cy4gICovCisJCQlza2JfdHJpbShza2IsIHByb3RvKTsKKwkJfSBlbHNlIHsKKwkJICAgICAgICBXTEFOX0xPR19ERUJVRygzLCAiRElYSUkgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOworCQkJLyogaXQncyBESVhJSSwgdGltZSBmb3Igc29tZSBjb252ZXJzaW9uICovCisKKwkJCS8qIHRyaW0gb2ZmIGV0aGVybmV0IGhlYWRlciAqLworCQkJc2tiX3B1bGwoc2tiLCBXTEFOX0VUSEhEUl9MRU4pOworCisJCQkvKiB0YWNrIG9uIFNOQVAgKi8KKwkJCWVfc25hcCA9ICh3bGFuX3NuYXBfdCAqKSBza2JfcHVzaChza2IsIHNpemVvZih3bGFuX3NuYXBfdCkpOworCQkJZV9zbmFwLT50eXBlID0gaHRvbnMocHJvdG8pOworCQkJaWYgKCBldGhjb252ID09IFdMQU5fRVRIQ09OVl84MDIxaCAmJiBwODAyMTFfc3R0X2ZpbmRwcm90byhwcm90bykgKSB7CisJCQkJbWVtY3B5KCBlX3NuYXAtPm91aSwgb3VpXzgwMjFoLCBXTEFOX0lFRUVfT1VJX0xFTik7CisJCQl9IGVsc2UgeworCQkJCW1lbWNweSggZV9zbmFwLT5vdWksIG91aV9yZmMxMDQyLCBXTEFOX0lFRUVfT1VJX0xFTik7CisJCQl9CisKKwkJCS8qIHRhY2sgb24gbGxjICovCisJCQllX2xsYyA9ICh3bGFuX2xsY190ICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHdsYW5fbGxjX3QpKTsKKwkJCWVfbGxjLT5kc2FwID0gMHhBQTsJLyogU05BUCwgc2VlIElFRUUgODAyICovCisJCQllX2xsYy0+c3NhcCA9IDB4QUE7CisJCQllX2xsYy0+Y3RsID0gMHgwMzsKKworCQl9CisJfQorCisJLyogU2V0IHVwIHRoZSA4MDIuMTEgaGVhZGVyICovCisJLyogSXQncyBhIGRhdGEgZnJhbWUgKi8KKwlmYyA9IGhvc3QyaWVlZTE2KCBXTEFOX1NFVF9GQ19GVFlQRShXTEFOX0ZUWVBFX0RBVEEpIHwKKwkJCSAgV0xBTl9TRVRfRkNfRlNUWVBFKFdMQU5fRlNUWVBFX0RBVEFPTkxZKSk7CisKKwlzd2l0Y2ggKCB3bGFuZGV2LT5tYWNtb2RlICkgeworCWNhc2UgV0xBTl9NQUNNT0RFX0lCU1NfU1RBOgorCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTEsICZlX2hkci5kYWRkciwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMywgd2xhbmRldi0+YnNzaWQsIFdMQU5fQUREUl9MRU4pOworCQlicmVhazsKKwljYXNlIFdMQU5fTUFDTU9ERV9FU1NfU1RBOgorCQlmYyB8PSBob3N0MmllZWUxNihXTEFOX1NFVF9GQ19UT0RTKDEpKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmExLCB3bGFuZGV2LT5ic3NpZCwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMywgJmVfaGRyLmRhZGRyLCBXTEFOX0FERFJfTEVOKTsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX01BQ01PREVfRVNTX0FQOgorCQlmYyB8PSBob3N0MmllZWUxNihXTEFOX1NFVF9GQ19GUk9NRFMoMSkpOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTEsICZlX2hkci5kYWRkciwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+YnNzaWQsIFdMQU5fQUREUl9MRU4pOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTMsICZlX2hkci5zYWRkciwgV0xBTl9BRERSX0xFTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdMQU5fTE9HX0VSUk9SKCJFcnJvcjogQ29udmVydGluZyBldGggdG8gd2xhbiBpbiB1bmtub3duIG1vZGUuXG4iKTsKKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKworCXA4MDIxMV93ZXAtPmRhdGEgPSBOVUxMOworCisJaWYgKCh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkgJiYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VOQ1JZUFQpKSB7CisJCS8vIFhYWFggbmVlZCB0byBwaWNrIGtleW51bSBvdGhlciB0aGFuIGRlZmF1bHQ/CisKKyNpZiAxCisJCXA4MDIxMV93ZXAtPmRhdGEgPSBrbWFsbG9jKHNrYi0+bGVuLCBHRlBfQVRPTUlDKTsKKyNlbHNlCisJCXA4MDIxMV93ZXAtPmRhdGEgPSBza2ItPmRhdGE7CisjZW5kaWYKKworCQlpZiAoKGZvbyA9IHdlcF9lbmNyeXB0KHdsYW5kZXYsIHNrYi0+ZGF0YSwgcDgwMjExX3dlcC0+ZGF0YSwKKwkJCQkgICAgICAgc2tiLT5sZW4sCisJCQkJKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyksCisJCQkJcDgwMjExX3dlcC0+aXYsIHA4MDIxMV93ZXAtPmljdikpKSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKCJIb3N0IGVuLVdFUCBmYWlsZWQsIGRyb3BwaW5nIGZyYW1lICglZCkuXG4iLCBmb28pOworCQkJcmV0dXJuIDI7CisJCX0KKwkJZmMgfD0gaG9zdDJpZWVlMTYoV0xBTl9TRVRfRkNfSVNXRVAoMSkpOworCX0KKworCisJLy8Jc2tiLT5uaC5yYXcgPSBza2ItPmRhdGE7CisKKwlwODAyMTFfaGRyLT5hMy5mYyA9IGZjOworCXA4MDIxMV9oZHItPmEzLmR1ciA9IDA7CisJcDgwMjExX2hkci0+YTMuc2VxID0gMDsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qIGprcmllZ2w6IGZyb20gb3Jpbm9jbywgbW9kaWZpZWQgKi8KK3N0YXRpYyB2b2lkIG9yaW5vY29fc3B5X2dhdGhlcih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGNoYXIgKm1hYywKKwkJCSAgICAgICBwODAyMTFfcnhtZXRhX3QgKnJ4bWV0YSkKK3sKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgLyogR2F0aGVyIHdpcmVsZXNzIHNweSBzdGF0aXN0aWNzOiBmb3IgZWFjaCBwYWNrZXQsIGNvbXBhcmUgdGhlCisgICAgICAgICAqIHNvdXJjZSBhZGRyZXNzIHdpdGggb3V0IGxpc3QsIGFuZCBpZiBtYXRjaCwgZ2V0IHRoZSBzdGF0cy4uLiAqLworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3bGFuZGV2LT5zcHlfbnVtYmVyOyBpKyspIHsKKworICAgICAgICAgICAgICAgIGlmICghbWVtY21wKHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBtYWMsIEVUSF9BTEVOKSkgeworCQkJbWVtY3B5KHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBtYWMsIEVUSF9BTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9zdGF0W2ldLmxldmVsID0gcnhtZXRhLT5zaWduYWw7CisgICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS5ub2lzZSA9IHJ4bWV0YS0+bm9pc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS5xdWFsID0gKHJ4bWV0YS0+c2lnbmFsID4gcnhtZXRhLT5ub2lzZSkgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyeG1ldGEtPnNpZ25hbCAtIHJ4bWV0YS0+bm9pc2UpIDogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9zdGF0W2ldLnVwZGF0ZWQgPSAweDc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFwYl84MDIxMV90b19ldGhlcgorKgorKiBVc2VzIHRoZSBjb250ZW50cyBvZiBhIHJlY2VpdmVkIDgwMi4xMSBmcmFtZSBhbmQgdGhlIGV0aGVyY29udgorKiBzZXR0aW5nIHRvIGJ1aWxkIGFuIGV0aGVyIGZyYW1lLgorKgorKiBUaGlzIGZ1bmN0aW9uIGV4dHJhY3RzIHRoZSBzcmMgYW5kIGRlc3QgYWRkcmVzcyBmcm9tIHRoZSA4MDIuMTEKKyogZnJhbWUgdG8gdXNlIGluIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIGV0aCBmcmFtZS4KKyoKKyogQXJndW1lbnRzOgorKglldGhjb252CQlDb252ZXJzaW9uIHR5cGUgdG8gcGVyZm9ybQorKglza2IJCVBhY2tldCBidWZmZXIgY29udGFpbmluZyB0aGUgODAyLjExIGZyYW1lCisqCisqIFJldHVybnM6CisqCTAgb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBza2JfcDgwMjExX3RvX2V0aGVyKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQzMiBldGhjb252LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCW5ldGRldmljZV90ICAgICAqbmV0ZGV2ID0gd2xhbmRldi0+bmV0ZGV2OworCVVJTlQxNiAgICAgICAgICBmYzsKKwlVSU5UICAgICAgICAgICAgcGF5bG9hZF9sZW5ndGg7CisJVUlOVCAgICAgICAgICAgIHBheWxvYWRfb2Zmc2V0OworCVVJTlQ4CQlkYWRkcltXTEFOX0VUSEFERFJfTEVOXTsKKwlVSU5UOAkJc2FkZHJbV0xBTl9FVEhBRERSX0xFTl07CisJcDgwMjExX2hkcl90ICAgICp3X2hkcjsKKwl3bGFuX2V0aGhkcl90ICAgKmVfaGRyOworCXdsYW5fbGxjX3QgICAgICAqZV9sbGM7CisJd2xhbl9zbmFwX3QgICAgICplX3NuYXA7CisKKwlpbnQgZm9vOworCisJREJGRU5URVI7CisKKwlwYXlsb2FkX2xlbmd0aCA9IHNrYi0+bGVuIC0gV0xBTl9IRFJfQTNfTEVOIC0gV0xBTl9DUkNfTEVOOworCXBheWxvYWRfb2Zmc2V0ID0gV0xBTl9IRFJfQTNfTEVOOworCisJd19oZHIgPSAocDgwMjExX2hkcl90ICopIHNrYi0+ZGF0YTsKKworICAgICAgICAvKiBzZXR1cCBzb21lIHZhcnMgZm9yIGNvbnZlbmllbmNlICovCisJZmMgPSBpZWVlMmhvc3QxNih3X2hkci0+YTMuZmMpOworCWlmICggKFdMQU5fR0VUX0ZDX1RPRFMoZmMpID09IDApICYmIChXTEFOX0dFVF9GQ19GUk9NRFMoZmMpID09IDApICkgeworCQltZW1jcHkoZGFkZHIsIHdfaGRyLT5hMy5hMSwgV0xBTl9FVEhBRERSX0xFTik7CisJCW1lbWNweShzYWRkciwgd19oZHItPmEzLmEyLCBXTEFOX0VUSEFERFJfTEVOKTsKKwl9IGVsc2UgaWYoIChXTEFOX0dFVF9GQ19UT0RTKGZjKSA9PSAwKSAmJiAoV0xBTl9HRVRfRkNfRlJPTURTKGZjKSA9PSAxKSApIHsKKwkJbWVtY3B5KGRhZGRyLCB3X2hkci0+YTMuYTEsIFdMQU5fRVRIQUREUl9MRU4pOworCQltZW1jcHkoc2FkZHIsIHdfaGRyLT5hMy5hMywgV0xBTl9FVEhBRERSX0xFTik7CisJfSBlbHNlIGlmKCAoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMSkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMCkgKSB7CisJCW1lbWNweShkYWRkciwgd19oZHItPmEzLmEzLCBXTEFOX0VUSEFERFJfTEVOKTsKKwkJbWVtY3B5KHNhZGRyLCB3X2hkci0+YTMuYTIsIFdMQU5fRVRIQUREUl9MRU4pOworCX0gZWxzZSB7CisJCXBheWxvYWRfb2Zmc2V0ID0gV0xBTl9IRFJfQTRfTEVOOworCQlwYXlsb2FkX2xlbmd0aCAtPSAoIFdMQU5fSERSX0E0X0xFTiAtIFdMQU5fSERSX0EzX0xFTiApOworCQlpZiAocGF5bG9hZF9sZW5ndGggPCAwICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkE0IGZyYW1lIHRvbyBzaG9ydCFcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJbWVtY3B5KGRhZGRyLCB3X2hkci0+YTQuYTMsIFdMQU5fRVRIQUREUl9MRU4pOworCQltZW1jcHkoc2FkZHIsIHdfaGRyLT5hNC5hNCwgV0xBTl9FVEhBRERSX0xFTik7CisJfQorCisJLyogcGVyZm9ybSBkZS13ZXAgaWYgbmVjZXNzYXJ5Li4gKi8KKwlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKSAmJiBXTEFOX0dFVF9GQ19JU1dFUChmYykgJiYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpKSB7CisJCWlmIChwYXlsb2FkX2xlbmd0aCA8PSA4KSB7CisJCQlXTEFOX0xPR19FUlJPUigiV0VQIGZyYW1lIHRvbyBzaG9ydCAoJXUpLlxuIiwKKwkJCQkJc2tiLT5sZW4pOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKChmb28gPSB3ZXBfZGVjcnlwdCh3bGFuZGV2LCBza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCArIDQsCisJCQkJICAgICAgIHBheWxvYWRfbGVuZ3RoIC0gOCwgLTEsCisJCQkJICAgICAgIHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0LAorCQkJCSAgICAgICBza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCArIHBheWxvYWRfbGVuZ3RoIC0gNCkpKSB7CisJCQkvKiBkZS13ZXAgZmFpbGVkLCBkcm9wIHNrYi4gKi8KKwkJCVdMQU5fTE9HX0RFQlVHKDEsICJIb3N0IGRlLVdFUCBmYWlsZWQsIGRyb3BwaW5nIGZyYW1lICglZCkuXG4iLCBmb28pOworCQkJd2xhbmRldi0+cnguZGVjcnlwdF9lcnIrKzsKKwkJCXJldHVybiAyOworCQl9CisKKwkJLyogc3VidHJhY3QgdGhlIElWK0lDViBsZW5ndGggb2ZmIHRoZSBwYXlsb2FkICovCisJCXBheWxvYWRfbGVuZ3RoIC09IDg7CisJCS8qIGNob3Agb2ZmIHRoZSBJViAqLworCQlza2JfcHVsbChza2IsIDQpOworCQkvKiBjaG9wIG9mZiB0aGUgSUNWLiAqLworCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gNCk7CisKKwkJd2xhbmRldi0+cnguZGVjcnlwdCsrOworCX0KKworCWVfaGRyID0gKHdsYW5fZXRoaGRyX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0KTsKKworCWVfbGxjID0gKHdsYW5fbGxjX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0KTsKKwllX3NuYXAgPSAod2xhbl9zbmFwX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgc2l6ZW9mKHdsYW5fbGxjX3QpKTsKKworCS8qIFRlc3QgZm9yIHRoZSB2YXJpb3VzIGVuY29kaW5ncyAqLworCWlmICggKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZih3bGFuX2V0aGhkcl90KSkgJiYKKwkgICAgICggZV9sbGMtPmRzYXAgIT0gMHhhYSB8fCBlX2xsYy0+c3NhcCAhPSAweGFhICkgJiYKKwkgICAgICgobWVtY21wKGRhZGRyLCBlX2hkci0+ZGFkZHIsIFdMQU5fRVRIQUREUl9MRU4pID09IDApIHx8CisJICAgICAobWVtY21wKHNhZGRyLCBlX2hkci0+c2FkZHIsIFdMQU5fRVRIQUREUl9MRU4pID09IDApKSkgeworCQlXTEFOX0xPR19ERUJVRygzLCAiODAyLjMgRU5DQVAgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOworCQkvKiA4MDIuMyBFbmNhcHN1bGF0ZWQgKi8KKwkJLyogVGVzdCBmb3IgYW4gb3Zlcmxlbmd0aCBmcmFtZSAqLworCQlpZiAoIHBheWxvYWRfbGVuZ3RoID4gKG5ldGRldi0+bXR1ICsgV0xBTl9FVEhIRFJfTEVOKSkgeworCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIGVuY2FwJ2QuICovCisJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCisJCQlXTEFOX0xPR19FUlJPUigiRU5DQVAgZnJhbWUgdG9vIGxhcmdlICglZCA+ICVkKVxuIiwKKwkJCQlwYXlsb2FkX2xlbmd0aCwgbmV0ZGV2LT5tdHUgKyBXTEFOX0VUSEhEUl9MRU4pOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKiBDaG9wIG9mZiB0aGUgODAyLjExIGhlYWRlci4gIGl0J3MgYWxyZWFkeSBzYW5lLiAqLworCQlza2JfcHVsbChza2IsIHBheWxvYWRfb2Zmc2V0KTsKKwkJLyogY2hvcCBvZmYgdGhlIDgwMi4xMSBDUkMgKi8KKwkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIFdMQU5fQ1JDX0xFTik7CisKKwl9IGVsc2UgaWYgKChwYXlsb2FkX2xlbmd0aCA+PSBzaXplb2Yod2xhbl9sbGNfdCkgKyBzaXplb2Yod2xhbl9zbmFwX3QpKSAmJgorCQkgICAoZV9sbGMtPmRzYXAgPT0gMHhhYSkgJiYKKwkJICAgKGVfbGxjLT5zc2FwID09IDB4YWEpICYmCisJCSAgIChlX2xsYy0+Y3RsID09IDB4MDMpICYmCisJCSAgICgoKG1lbWNtcCggZV9zbmFwLT5vdWksIG91aV9yZmMxMDQyLCBXTEFOX0lFRUVfT1VJX0xFTik9PTApICYmCisJCSAgICAoZXRoY29udiA9PSBXTEFOX0VUSENPTlZfODAyMWgpICYmCisJCSAgICAocDgwMjExX3N0dF9maW5kcHJvdG8oaWVlZTJob3N0MTYoZV9zbmFwLT50eXBlKSkpKSB8fAorCQkgICAgKG1lbWNtcCggZV9zbmFwLT5vdWksIG91aV9yZmMxMDQyLCBXTEFOX0lFRUVfT1VJX0xFTikhPTApKSkKKwl7CisJCVdMQU5fTE9HX0RFQlVHKDMsICJTTkFQK1JGQzEwNDIgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOworCQkvKiBpdCdzIGEgU05BUCArIFJGQzEwNDIgZnJhbWUgJiYgcHJvdG9jb2wgaXMgaW4gU1RUICovCisJCS8qIGJ1aWxkIDgwMi4zICsgUkZDMTA0MiAqLworCisJCS8qIFRlc3QgZm9yIGFuIG92ZXJsZW5ndGggZnJhbWUgKi8KKwkJaWYgKCBwYXlsb2FkX2xlbmd0aCA+IG5ldGRldi0+bXR1ICkgeworCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIHNlbnQuICovCisJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCisJCQlXTEFOX0xPR19FUlJPUigiU05BUCBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAorCQkJCXBheWxvYWRfbGVuZ3RoLCBuZXRkZXYtPm10dSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS8qIGNob3AgODAyLjExIGhlYWRlciBmcm9tIHNrYi4gKi8KKwkJc2tiX3B1bGwoc2tiLCBwYXlsb2FkX29mZnNldCk7CisKKwkJLyogY3JlYXRlIDgwMi4zIGhlYWRlciBhdCBiZWdpbm5pbmcgb2Ygc2tiLiAqLworCQllX2hkciA9ICh3bGFuX2V0aGhkcl90ICopIHNrYl9wdXNoKHNrYiwgV0xBTl9FVEhIRFJfTEVOKTsKKwkJbWVtY3B5KGVfaGRyLT5kYWRkciwgZGFkZHIsIFdMQU5fRVRIQUREUl9MRU4pOworCQltZW1jcHkoZV9oZHItPnNhZGRyLCBzYWRkciwgV0xBTl9FVEhBRERSX0xFTik7CisJCWVfaGRyLT50eXBlID0gaHRvbnMocGF5bG9hZF9sZW5ndGgpOworCisJCS8qIGNob3Agb2ZmIHRoZSA4MDIuMTEgQ1JDICovCisJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBXTEFOX0NSQ19MRU4pOworCisJfSAgZWxzZSBpZiAoKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZih3bGFuX2xsY190KSArIHNpemVvZih3bGFuX3NuYXBfdCkpICYmCisJCSAgICAoZV9sbGMtPmRzYXAgPT0gMHhhYSkgJiYKKwkJICAgIChlX2xsYy0+c3NhcCA9PSAweGFhKSAmJgorCQkgICAgKGVfbGxjLT5jdGwgPT0gMHgwMykgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDMsICI4MDIuMWgvUkZDMTA0MiBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CisJCS8qIGl0J3MgYW4gODAyLjFoIGZyYW1lIHx8IChhbiBSRkMxMDQyICYmIHByb3RvY29sIGlzIG5vdCBpbiBTVFQpICovCisJCS8qIGJ1aWxkIGEgRElYSUkgKyBSRkM4OTQgKi8KKworCQkvKiBUZXN0IGZvciBhbiBvdmVybGVuZ3RoIGZyYW1lICovCisJCWlmICgocGF5bG9hZF9sZW5ndGggLSBzaXplb2Yod2xhbl9sbGNfdCkgLSBzaXplb2Yod2xhbl9zbmFwX3QpKQorCQkgICAgPiBuZXRkZXYtPm10dSkgeworCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIHNlbnQuICovCisJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCisJCQlXTEFOX0xPR19FUlJPUigiRElYSUkgZnJhbWUgdG9vIGxhcmdlICglbGQgPiAlZClcbiIsCisJCQkJCShsb25nIGludCkgKHBheWxvYWRfbGVuZ3RoIC0gc2l6ZW9mKHdsYW5fbGxjX3QpIC0KKwkJCQkJCSAgICBzaXplb2Yod2xhbl9zbmFwX3QpKSwKKwkJCQkJbmV0ZGV2LT5tdHUpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKiBjaG9wIDgwMi4xMSBoZWFkZXIgZnJvbSBza2IuICovCisJCXNrYl9wdWxsKHNrYiwgcGF5bG9hZF9vZmZzZXQpOworCisJCS8qIGNob3AgbGxjIGhlYWRlciBmcm9tIHNrYi4gKi8KKwkJc2tiX3B1bGwoc2tiLCBzaXplb2Yod2xhbl9sbGNfdCkpOworCisJCS8qIGNob3Agc25hcCBoZWFkZXIgZnJvbSBza2IuICovCisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHdsYW5fc25hcF90KSk7CisKKwkJLyogY3JlYXRlIDgwMi4zIGhlYWRlciBhdCBiZWdpbm5pbmcgb2Ygc2tiLiAqLworCQllX2hkciA9ICh3bGFuX2V0aGhkcl90ICopIHNrYl9wdXNoKHNrYiwgV0xBTl9FVEhIRFJfTEVOKTsKKwkJZV9oZHItPnR5cGUgPSBlX3NuYXAtPnR5cGU7CisJCW1lbWNweShlX2hkci0+ZGFkZHIsIGRhZGRyLCBXTEFOX0VUSEFERFJfTEVOKTsKKwkJbWVtY3B5KGVfaGRyLT5zYWRkciwgc2FkZHIsIFdMQU5fRVRIQUREUl9MRU4pOworCisJCS8qIGNob3Agb2ZmIHRoZSA4MDIuMTEgQ1JDICovCisJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBXTEFOX0NSQ19MRU4pOworCX0gZWxzZSB7CisJCVdMQU5fTE9HX0RFQlVHKDMsICJOT04tRU5DQVAgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOworCQkvKiBhbnkgTk9OLUVOQ0FQICovCisJCS8qIGl0J3MgYSBnZW5lcmljIDgwMjExK0xMQyBvciBJUFggJ1JhdyA4MDIuMycgKi8KKwkJLyogIGJ1aWxkIGFuIDgwMi4zIGZyYW1lICovCisJCS8qIGFsbG9jYXRlIHNwYWNlIGFuZCBzZXR1cCBob3N0YnVmICovCisKKwkJLyogVGVzdCBmb3IgYW4gb3Zlcmxlbmd0aCBmcmFtZSAqLworCQlpZiAoIHBheWxvYWRfbGVuZ3RoID4gbmV0ZGV2LT5tdHUgKSB7CisJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gc2VudC4gKi8KKwkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KKwkJCVdMQU5fTE9HX0VSUk9SKCJPVEhFUiBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAorCQkJCXBheWxvYWRfbGVuZ3RoLAorCQkJCW5ldGRldi0+bXR1KTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJLyogQ2hvcCBvZmYgdGhlIDgwMi4xMSBoZWFkZXIuICovCisJCXNrYl9wdWxsKHNrYiwgcGF5bG9hZF9vZmZzZXQpOworCisJCS8qIGNyZWF0ZSA4MDIuMyBoZWFkZXIgYXQgYmVnaW5uaW5nIG9mIHNrYi4gKi8KKwkJZV9oZHIgPSAod2xhbl9ldGhoZHJfdCAqKSBza2JfcHVzaChza2IsIFdMQU5fRVRISERSX0xFTik7CisJCW1lbWNweShlX2hkci0+ZGFkZHIsIGRhZGRyLCBXTEFOX0VUSEFERFJfTEVOKTsKKwkJbWVtY3B5KGVfaGRyLT5zYWRkciwgc2FkZHIsIFdMQU5fRVRIQUREUl9MRU4pOworCQllX2hkci0+dHlwZSA9IGh0b25zKHBheWxvYWRfbGVuZ3RoKTsKKworCQkvKiBjaG9wIG9mZiB0aGUgODAyLjExIENSQyAqLworCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gV0xBTl9DUkNfTEVOKTsKKworCX0KKworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKworICAgICAgICAvKiBqa3JpZWdsOiBwcm9jZXNzIHNpZ25hbCBhbmQgbm9pc2UgYXMgc2V0IGluIGhmYTM4NHhfaW50X3J4KCkgKi8KKwkvKiBqa3JpZWdsOiBvbmx5IHByb2Nlc3Mgc2lnbmFsL25vaXNlIGlmIHJlcXVlc3RlZCBieSBpd3NweSAqLworICAgICAgICBpZiAod2xhbmRldi0+c3B5X251bWJlcikKKyAgICAgICAgICAgICAgICBvcmlub2NvX3NweV9nYXRoZXIod2xhbmRldiwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgUDgwMjExU0tCX1JYTUVUQShza2IpKTsKKworCS8qIEZyZWUgdGhlIG1ldGFkYXRhICovCisJcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc2tiKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFfc3R0X2ZpbmRwcm90bworKgorKiBTZWFyY2hlcyB0aGUgODAyLjFoIFNlbGVjdGl2ZSBUcmFuc2xhdGlvbiBUYWJsZSBmb3IgYSBnaXZlbgorKiBwcm90b2NvbC4KKyoKKyogQXJndW1lbnRzOgorKglwcm90bwlwcm90b2NsIG51bWJlciAoaW4gaG9zdCBvcmRlcikgdG8gc2VhcmNoIGZvci4KKyoKKyogUmV0dXJuczoKKyoJMSAtIGlmIHRoZSB0YWJsZSBpcyBlbXB0eSBvciBhIG1hdGNoIGlzIGZvdW5kLgorKgkwIC0gaWYgdGhlIHRhYmxlIGlzIG5vbi1lbXB0eSBhbmQgYSBtYXRjaCBpcyBub3QgZm91bmQuCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwODAyMTFfc3R0X2ZpbmRwcm90byhVSU5UMTYgcHJvdG8pCit7CisJLyogQWx3YXlzIHJldHVybiBmb3VuZCBmb3Igbm93LiAgVGhpcyBpcyB0aGUgYmVoYXZpb3IgdXNlZCBieSB0aGUgKi8KKwkvKiAgWm9vbSBXaW45NSBkcml2ZXIgd2hlbiA4MDIuMWggbW9kZSBpcyBzZWxlY3RlZCAqLworCS8qIFRPRE86IElmIG5lY2Vzc2FyeSwgYWRkIGFuIGFjdHVhbCBzZWFyY2ggd2UnbGwgcHJvYmFibHkKKwkJIG5lZWQgdGhpcyB0byBtYXRjaCB0aGUgQ01BQydzIHdheSBvZiBkb2luZyB0aGluZ3MuCisJCSBOZWVkIHRvIGRvIHNvbWUgdGVzdGluZyB0byBjb25maXJtLgorCSovCisKKwlpZiAocHJvdG8gPT0gMHg4MGYzKSAgLyogQVBQTEVUQUxLICovCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFza2JfcnhtZXRhX2RldGFjaAorKgorKiBEaXNjb25uZWN0cyB0aGUgZnJtbWV0YSBhbmQgcnhtZXRhIGZyb20gYW4gc2tiLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCVRoZSB3bGFuZGV2IHRoaXMgc2tiIGJlbG9uZ3MgdG8uCisqCXNrYgkJVGhlIHNrYiB3ZSdyZSBhdHRhY2hpbmcgdG8uCisqCisqIFJldHVybnM6CisqCTAgb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQKK3A4MDIxMXNrYl9yeG1ldGFfZGV0YWNoKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcDgwMjExX3J4bWV0YV90CQkqcnhtZXRhOworCXA4MDIxMV9mcm1tZXRhX3QJKmZybW1ldGE7CisKKwlEQkZFTlRFUjsKKwkvKiBTYW5pdHkgY2hlY2tzICovCisJaWYgKCBza2I9PU5VTEwgKSB7CQkJLyogYmFkIHNrYiAqLworCQlXTEFOX0xPR19ERUJVRygxLCAiQ2FsbGVkIHcvIG51bGwgc2tiLlxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisJZnJtbWV0YSA9IFA4MDIxMVNLQl9GUk1NRVRBKHNrYik7CisJaWYgKCBmcm1tZXRhID09IE5VTEwgKSB7IAkJLyogbm8gbWFnaWMgKi8KKwkJV0xBTl9MT0dfREVCVUcoMSwgIkNhbGxlZCB3LyBiYWQgZnJtbWV0YSBtYWdpYy5cbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCXJ4bWV0YSA9IGZybW1ldGEtPnJ4OworCWlmICggcnhtZXRhID09IE5VTEwgKSB7CQkJLyogYmFkIG1ldGEgcHRyICovCisJCVdMQU5fTE9HX0RFQlVHKDEsICJDYWxsZWQgdy8gYmFkIHJ4bWV0YSBwdHIuXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIEZyZWUgcnhtZXRhICovCisJa2ZyZWUocnhtZXRhKTsKKworCS8qIENsZWFyIHNrYi0+Y2IgKi8KKwltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKK2V4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFza2JfcnhtZXRhX2F0dGFjaAorKgorKiBBbGxvY2F0ZXMgYSBwODAyMTFyeG1ldGEgc3RydWN0dXJlLCBpbml0aWFsaXplcyBpdCwgYW5kIGF0dGFjaGVzCisqIGl0IHRvIGFuIHNrYi4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlUaGUgd2xhbmRldiB0aGlzIHNrYiBiZWxvbmdzIHRvLgorKglza2IJCVRoZSBza2Igd2UncmUgYXR0YWNoaW5nIHRvLgorKgorKiBSZXR1cm5zOgorKgkwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZQorKgorKiBDYWxsIGNvbnRleHQ6CisqCU1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IG9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK3A4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludAkJCXJlc3VsdCA9IDA7CisJcDgwMjExX3J4bWV0YV90CQkqcnhtZXRhOworCXA4MDIxMV9mcm1tZXRhX3QJKmZybW1ldGE7CisKKwlEQkZFTlRFUjsKKworCS8qIElmIHRoZXNlIGFscmVhZHkgaGF2ZSBtZXRhZGF0YSwgd2UgZXJyb3Igb3V0ISAqLworCWlmIChQODAyMTFTS0JfUlhNRVRBKHNrYikgIT0gTlVMTCkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IFJYbWV0YSBhbHJlYWR5IGF0dGFjaGVkIVxuIiwKKwkJCQl3bGFuZGV2LT5uYW1lKTsKKwkJcmVzdWx0ID0gMDsKKwkJZ290byBleGl0OworCX0KKworCS8qIEFsbG9jYXRlIHRoZSByeG1ldGEgKi8KKwlyeG1ldGEgPSBrbWFsbG9jKHNpemVvZihwODAyMTFfcnhtZXRhX3QpLCBHRlBfQVRPTUlDKTsKKworCWlmICggcnhtZXRhID09IE5VTEwgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHJ4bWV0YS5cbiIsCisJCQkJd2xhbmRldi0+bmFtZSk7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSByeG1ldGEgKi8KKwltZW1zZXQocnhtZXRhLCAwLCBzaXplb2YocDgwMjExX3J4bWV0YV90KSk7CisJcnhtZXRhLT53bGFuZGV2ID0gd2xhbmRldjsKKwlyeG1ldGEtPmhvc3R0aW1lID0gamlmZmllczsKKworCS8qIE92ZXJsYXkgYSBmcm1tZXRhX3Qgb250byBza2ItPmNiICovCisJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihwODAyMTFfZnJtbWV0YV90KSk7CisJZnJtbWV0YSA9IChwODAyMTFfZnJtbWV0YV90Kikoc2tiLT5jYik7CisJZnJtbWV0YS0+bWFnaWMgPSBQODAyMTFfRlJNTUVUQV9NQUdJQzsKKwlmcm1tZXRhLT5yeCA9IHJ4bWV0YTsKK2V4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExc2tiX2ZyZWUKKyoKKyogRnJlZXMgYW4gZW50aXJlIHA4MDIxMXNrYiBieSBjaGVja2luZyBhbmQgZnJlZWluZyB0aGUgbWV0YSBzdHJ1Y3QKKyogYW5kIHRoZW4gZnJlZWluZyB0aGUgc2tiLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCVRoZSB3bGFuZGV2IHRoaXMgc2tiIGJlbG9uZ3MgdG8uCisqCXNrYgkJVGhlIHNrYiB3ZSdyZSBhdHRhY2hpbmcgdG8uCisqCisqIFJldHVybnM6CisqCTAgb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQKK3A4MDIxMXNrYl9mcmVlKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXA4MDIxMV9mcm1tZXRhX3QJKm1ldGE7CisJREJGRU5URVI7CisJbWV0YSA9IFA4MDIxMVNLQl9GUk1NRVRBKHNrYik7CisJaWYgKCBtZXRhICYmIG1ldGEtPnJ4KSB7CisJCXA4MDIxMXNrYl9yeG1ldGFfZGV0YWNoKHNrYik7CisJfSBlbHNlIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZyZWVpbmcgYW4gc2tiICglcCkgdy8gbm8gZnJtbWV0YS5cbiIsIHNrYik7CisJfQorCisJZGV2X2tmcmVlX3NrYihza2IpOworCURCRkVYSVQ7CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNWFiNTdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oCkBAIC0wLDAgKzEsMTg2IEBACisvKiBwODAyMTFjb252LmgKKyoKKyogRXRoZXIvODAyLjExIGNvbnZlcnNpb25zIGFuZCBwYWNrZXQgYnVmZmVyIHJvdXRpbmVzCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWNsYXJlcyB0aGUgZnVuY3Rpb25zLCB0eXBlcyBhbmQgbWFjcm9zIHRoYXQgcGVyZm9ybQorKiBFdGhlcm5ldCB0by9mcm9tIDgwMi4xMSBmcmFtZSBjb252ZXJzaW9ucy4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX0xJTlVYX1A4MDIxMUNPTlZfSAorI2RlZmluZSBfTElOVVhfUDgwMjExQ09OVl9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworI2RlZmluZSBXTEFOX0VUSEFERFJfTEVOCTYKKyNkZWZpbmUgV0xBTl9JRUVFX09VSV9MRU4JMworCisjZGVmaW5lIFdMQU5fRVRIQ09OVl9FTkNBUAkxCisjZGVmaW5lIFdMQU5fRVRIQ09OVl9SRkMxMDQyCTIKKyNkZWZpbmUgV0xBTl9FVEhDT05WXzgwMjFoCTMKKworI2RlZmluZSBXTEFOX01JTl9FVEhGUk1fTEVOCTYwCisjZGVmaW5lIFdMQU5fTUFYX0VUSEZSTV9MRU4JMTUxNAorI2RlZmluZSBXTEFOX0VUSEhEUl9MRU4JCTE0CisKKyNkZWZpbmUgUDgwMjExQ0FQVFVSRV9WRVJTSU9OCTB4ODAyMTEwMDEKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIE1hY3JvcyAqLworCisjZGVmaW5lCVA4MDIxMV9GUk1NRVRBX01BR0lDCQkweDgwMjExMAorCisjZGVmaW5lIFA4MDIxMVNLQl9GUk1NRVRBKHMpIFwKKwkoKCgoKHA4MDIxMV9mcm1tZXRhX3QqKSgocyktPmNiKSktPm1hZ2ljKT09UDgwMjExX0ZSTU1FVEFfTUFHSUMpID8gXAorCQkoKHA4MDIxMV9mcm1tZXRhX3QqKSgocyktPmNiKSkgOiBcCisJCShOVUxMKSkKKworI2RlZmluZSBQODAyMTFTS0JfUlhNRVRBKHMpIFwKKwkoUDgwMjExU0tCX0ZSTU1FVEEoKHMpKSA/ICBQODAyMTFTS0JfRlJNTUVUQSgocykpLT5yeCA6ICgocDgwMjExX3J4bWV0YV90KikoTlVMTCkpKQorCit0eXBlZGVmIHN0cnVjdCBwODAyMTFfcnhtZXRhCit7CisJc3RydWN0IHdsYW5kZXZpY2UJKndsYW5kZXY7CisKKwlVSU5UNjQJbWFjdGltZTsJLyogSGktcmV6IE1BQy1zdXBwbGllZCB0aW1lIHZhbHVlICovCisJVUlOVDY0CWhvc3R0aW1lOwkvKiBCZXN0LXJleiBob3N0IHN1cHBsaWVkIHRpbWUgdmFsdWUgKi8KKworCVVJTlQJcnhyYXRlOwkJLyogUmVjZWl2ZSBkYXRhIHJhdGUgaW4gMTAwa2JwcyAqLworCVVJTlQJcHJpb3JpdHk7CS8qIDAtMTUsIDA9Y29udGVudGlvbiwgNj1DRiAqLworCUlOVAlzaWduYWw7CQkvKiBBbiBTU0ksIHNlZSBwODAyMTFuZXRkZXYuaCAqLworCUlOVAlub2lzZTsJCS8qIEFuIFNTSSwgc2VlIHA4MDIxMW5ldGRldi5oICovCisJVUlOVAljaGFubmVsOwkvKiBSZWNlaXZlIGNoYW5uZWwgKG1vc3RseSBmb3Igc25pZnMpICovCisJVUlOVAlwcmVhbWJsZTsJLyogUDgwMjExRU5VTV9wcmVhbWJsZXR5cGVfKiAqLworCVVJTlQJZW5jb2Rpbmc7CS8qIFA4MDIxMUVOVU1fZW5jb2RpbmdfKiAqLworCit9IHA4MDIxMV9yeG1ldGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2ZybW1ldGEKK3sKKwlVSU5UCQkJbWFnaWM7CisJcDgwMjExX3J4bWV0YV90CQkqcng7Cit9IHA4MDIxMV9mcm1tZXRhX3Q7CisKK3ZvaWQgcDgwMjExc2tiX2ZyZWUoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IHA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBUeXBlcyAqLworCisvKgorICogRnJhbWUgY2FwdHVyZSBoZWFkZXIuICAoU2VlIGRvYy9jYXB0dXJlZnJtLnR4dCkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2NhcGhkcgoreworCVVJTlQzMgkJdmVyc2lvbjsKKwlVSU5UMzIJCWxlbmd0aDsKKwlVSU5UNjQJCW1hY3RpbWU7CisJVUlOVDY0CQlob3N0dGltZTsKKwlVSU5UMzIJCXBoeXR5cGU7CisJVUlOVDMyCQljaGFubmVsOworCVVJTlQzMgkJZGF0YXJhdGU7CisJVUlOVDMyCQlhbnRlbm5hOworCVVJTlQzMgkJcHJpb3JpdHk7CisJVUlOVDMyCQlzc2lfdHlwZTsKKwlJTlQzMgkJc3NpX3NpZ25hbDsKKwlJTlQzMgkJc3NpX25vaXNlOworCVVJTlQzMgkJcHJlYW1ibGU7CisJVUlOVDMyCQllbmNvZGluZzsKK30gcDgwMjExX2NhcGhkcl90OworCisvKiBidWZmZXIgZnJlZSBtZXRob2QgcG9pbnRlciB0eXBlICovCit0eXBlZGVmIHZvaWQgKCogZnJlZWJ1Zl9tZXRob2RfdCkodm9pZCAqYnVmLCBpbnQgc2l6ZSk7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9tZXRhd2VwIHsKKwl2b2lkICAqZGF0YTsKKwlVSU5UOCBpdls0XTsKKwlVSU5UOCBpY3ZbNF07Cit9IHA4MDIxMV9tZXRhd2VwX3Q7CisKKy8qIGxvY2FsIGV0aGVyIGhlYWRlciB0eXBlICovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2V0aGhkcgoreworCVVJTlQ4CWRhZGRyW1dMQU5fRVRIQUREUl9MRU5dOworCVVJTlQ4CXNhZGRyW1dMQU5fRVRIQUREUl9MRU5dOworCVVJTlQxNgl0eXBlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2V0aGhkcl90OworCisvKiBsb2NhbCBsbGMgaGVhZGVyIHR5cGUgKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fbGxjCit7CisJVUlOVDgJZHNhcDsKKwlVSU5UOAlzc2FwOworCVVJTlQ4CWN0bDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9sbGNfdDsKKworLyogbG9jYWwgc25hcCBoZWFkZXIgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9zbmFwCit7CisJVUlOVDgJb3VpW1dMQU5fSUVFRV9PVUlfTEVOXTsKKwlVSU5UMTYJdHlwZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9zbmFwX3Q7CisKKy8qIENpcmN1bGFyIGluY2x1ZGUgdHJpY2sgKi8KK3N0cnVjdCB3bGFuZGV2aWNlOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRXh0ZXJucyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLypGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworaW50IHNrYl9wODAyMTFfdG9fZXRoZXIoIHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBVSU5UMzIgZXRoY29udiwKKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBza2JfZXRoZXJfdG9fcDgwMjExKCBzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgVUlOVDMyIGV0aGNvbnYsCisJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAorCQkJIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXAgKTsKKworaW50IHA4MDIxMV9zdHRfZmluZHByb3RvKFVJTlQxNiBwcm90byk7CitpbnQgcDgwMjExX3N0dF9hZGRwcm90byhVSU5UMTYgcHJvdG8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWhkci5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdiMDg3MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWhkci5oCkBAIC0wLDAgKzEsMjk5IEBACisvKiBwODAyMTFoZHIuaAorKgorKiBNYWNyb3MsIHR5cGVzLCBhbmQgZnVuY3Rpb25zIGZvciBoYW5kbGluZyA4MDIuMTEgTUFDIGhlYWRlcnMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGRlY2xhcmVzIHRoZSBjb25zdGFudHMgYW5kIHR5cGVzIHVzZWQgaW4gdGhlIGludGVyZmFjZQorKiBiZXR3ZWVuIGEgd2xhbiBkcml2ZXIgYW5kIHRoZSB1c2VyIG1vZGUgdXRpbGl0aWVzLgorKgorKiBOb3RlOgorKiAgLSBDb25zdGFudCB2YWx1ZXMgYXJlIGFsd2F5cyBpbiBIT1NUIGJ5dGUgb3JkZXIuICBUbyBhc3NpZ24KKyogICAgdmFsdWVzIHRvIG11bHRpLWJ5dGUgZmllbGRzIHRoZXkgX211c3RfIGJlIGNvbnZlcnRlZCB0bworKiAgICBpZWVlIGJ5dGUgb3JkZXIuICBUbyByZXRyaWV2ZSBtdWx0aS1ieXRlIHZhbHVlcyBmcm9tIGluY29taW5nCisqICAgIGZyYW1lcywgdGhleSBtdXN0IGJlIGNvbnZlcnRlZCB0byBob3N0IG9yZGVyLgorKgorKiBBbGwgZnVuY3Rpb25zIGRlY2xhcmVkIGhlcmUgYXJlIGltcGxlbWVudGVkIGluIHA4MDIxMS5jCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9QODAyMTFIRFJfSAorI2RlZmluZSBfUDgwMjExSERSX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaWZuZGVmICBfV0xBTl9DT01QQVRfSAorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisjZW5kaWYKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisKKy8qLS0tIFNpemVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0xBTl9BRERSX0xFTgkJCTYKKyNkZWZpbmUgV0xBTl9DUkNfTEVOCQkJNAorI2RlZmluZSBXTEFOX0JTU0lEX0xFTgkJCTYKKyNkZWZpbmUgV0xBTl9CU1NfVFNfTEVOCQkJOAorI2RlZmluZSBXTEFOX0hEUl9BM19MRU4JCQkyNAorI2RlZmluZSBXTEFOX0hEUl9BNF9MRU4JCQkzMAorI2RlZmluZSBXTEFOX1NTSURfTUFYTEVOCQkzMgorI2RlZmluZSBXTEFOX0RBVEFfTUFYTEVOCQkyMzEyCisjZGVmaW5lIFdMQU5fQTNGUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKQorI2RlZmluZSBXTEFOX0E0RlJfTUFYTEVOCQkoV0xBTl9IRFJfQTRfTEVOICsgV0xBTl9EQVRBX01BWExFTiArIFdMQU5fQ1JDX0xFTikKKyNkZWZpbmUgV0xBTl9CRUFDT05fRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgMzM0KQorI2RlZmluZSBXTEFOX0FUSU1fRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgMCkKKyNkZWZpbmUgV0xBTl9ESVNBU1NPQ19GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAyKQorI2RlZmluZSBXTEFOX0FTU09DUkVRX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDQ4KQorI2RlZmluZSBXTEFOX0FTU09DUkVTUF9GUl9NQVhMRU4JKFdMQU5fSERSX0EzX0xFTiArIDE2KQorI2RlZmluZSBXTEFOX1JFQVNTT0NSRVFfRlJfTUFYTEVOCShXTEFOX0hEUl9BM19MRU4gKyA1NCkKKyNkZWZpbmUgV0xBTl9SRUFTU09DUkVTUF9GUl9NQVhMRU4JKFdMQU5fSERSX0EzX0xFTiArIDE2KQorI2RlZmluZSBXTEFOX1BST0JFUkVRX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDQ0KQorI2RlZmluZSBXTEFOX1BST0JFUkVTUF9GUl9NQVhMRU4JKFdMQU5fSERSX0EzX0xFTiArIDc4KQorI2RlZmluZSBXTEFOX0FVVEhFTl9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAyNjEpCisjZGVmaW5lIFdMQU5fREVBVVRIRU5fRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgMikKKyNkZWZpbmUgV0xBTl9XRVBfTktFWVMJCQk0CisjZGVmaW5lIFdMQU5fV0VQX01BWEtFWUxFTgkJMTMKKyNkZWZpbmUgV0xBTl9DSEFMTEVOR0VfSUVfTEVOCQkxMzAKKyNkZWZpbmUgV0xBTl9DSEFMTEVOR0VfTEVOCQkxMjgKKyNkZWZpbmUgV0xBTl9XRVBfSVZfTEVOCQkJNAorI2RlZmluZSBXTEFOX1dFUF9JQ1ZfTEVOCQk0CisKKy8qLS0tIEZyYW1lIENvbnRyb2wgRmllbGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBGcmFtZSBUeXBlcyAqLworI2RlZmluZSBXTEFOX0ZUWVBFX01HTVQJCQkweDAwCisjZGVmaW5lIFdMQU5fRlRZUEVfQ1RMCQkJMHgwMQorI2RlZmluZSBXTEFOX0ZUWVBFX0RBVEEJCQkweDAyCisKKy8qIEZyYW1lIHN1YnR5cGVzICovCisvKiBNYW5hZ2VtZW50ICovCisjZGVmaW5lIFdMQU5fRlNUWVBFX0FTU09DUkVRCQkweDAwCisjZGVmaW5lIFdMQU5fRlNUWVBFX0FTU09DUkVTUAkJMHgwMQorI2RlZmluZSBXTEFOX0ZTVFlQRV9SRUFTU09DUkVRCQkweDAyCisjZGVmaW5lIFdMQU5fRlNUWVBFX1JFQVNTT0NSRVNQCQkweDAzCisjZGVmaW5lIFdMQU5fRlNUWVBFX1BST0JFUkVRCQkweDA0CisjZGVmaW5lIFdMQU5fRlNUWVBFX1BST0JFUkVTUAkJMHgwNQorI2RlZmluZSBXTEFOX0ZTVFlQRV9CRUFDT04JCTB4MDgKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQVRJTQkJMHgwOQorI2RlZmluZSBXTEFOX0ZTVFlQRV9ESVNBU1NPQwkJMHgwYQorI2RlZmluZSBXTEFOX0ZTVFlQRV9BVVRIRU4JCTB4MGIKKyNkZWZpbmUgV0xBTl9GU1RZUEVfREVBVVRIRU4JCTB4MGMKKworLyogQ29udHJvbCAqLworI2RlZmluZSBXTEFOX0ZTVFlQRV9CTE9DS0FDS1JFUQkJMHg4CisjZGVmaW5lIFdMQU5fRlNUWVBFX0JMT0NLQUNLICAJCTB4OQorI2RlZmluZSBXTEFOX0ZTVFlQRV9QU1BPTEwJCTB4MGEKKyNkZWZpbmUgV0xBTl9GU1RZUEVfUlRTCQkJMHgwYgorI2RlZmluZSBXTEFOX0ZTVFlQRV9DVFMJCQkweDBjCisjZGVmaW5lIFdMQU5fRlNUWVBFX0FDSwkJCTB4MGQKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQ0ZFTkQJCTB4MGUKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQ0ZFTkRDRkFDSwkJMHgwZgorCisvKiBEYXRhICovCisjZGVmaW5lIFdMQU5fRlNUWVBFX0RBVEFPTkxZCQkweDAwCisjZGVmaW5lIFdMQU5fRlNUWVBFX0RBVEFfQ0ZBQ0sJCTB4MDEKKyNkZWZpbmUgV0xBTl9GU1RZUEVfREFUQV9DRlBPTEwJCTB4MDIKKyNkZWZpbmUgV0xBTl9GU1RZUEVfREFUQV9DRkFDS19DRlBPTEwJMHgwMworI2RlZmluZSBXTEFOX0ZTVFlQRV9OVUxMCQkweDA0CisjZGVmaW5lIFdMQU5fRlNUWVBFX0NGQUNLCQkweDA1CisjZGVmaW5lIFdMQU5fRlNUWVBFX0NGUE9MTAkJMHgwNgorI2RlZmluZSBXTEFOX0ZTVFlQRV9DRkFDS19DRlBPTEwJMHgwNworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyotLS0gRkMgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTWFjcm9zIHRvIGdldC9zZXQgdGhlIGJpdGZpZWxkcyBvZiB0aGUgRnJhbWUgQ29udHJvbCBGaWVsZCAqLworLyogIEdFVF9GQ18/Pz8gLSB0YWtlcyB0aGUgaG9zdCBieXRlLW9yZGVyIHZhbHVlIG9mIGFuIEZDICAgICAqLworLyogICAgICAgICAgICAgICBhbmQgcmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBvbmUgb2YgdGhlICAgICAgICAqLworLyogICAgICAgICAgICAgICBiaXRmaWVsZHMgYW5kIG1vdmVzIHRoYXQgdmFsdWUgc28gaXRzIGxzYiBpcyAqLworLyogICAgICAgICAgICAgICBpbiBiaXQgMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFNFVF9GQ18/Pz8gLSB0YWtlcyBhIGhvc3Qgb3JkZXIgdmFsdWUgZm9yIG9uZSBvZiB0aGUgRkMgICAqLworLyogICAgICAgICAgICAgICBiaXRmaWVsZHMgYW5kIG1vdmVzIGl0IHRvIHRoZSBwcm9wZXIgYml0ICAgICAqLworLyogICAgICAgICAgICAgICBsb2NhdGlvbiBmb3IgT1JpbmcgaW50byBhIGhvc3Qgb3JkZXIgRkMuICAgICAqLworLyogICAgICAgICAgICAgICBUbyBzZW5kIHRoZSBGQyBwcm9kdWNlZCBmcm9tIFNFVF9GQ18/Pz8sICAgICAqLworLyogICAgICAgICAgICAgICBvbmUgbXVzdCBwdXQgdGhlIGJ5dGVzIGluIElFRUUgb3JkZXIuICAgICAgICAqLworLyogIGUuZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIHByaW50ZigidGhlIGZyYW1lIHN1YnR5cGUgaXMgJXgiLCAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgIEdFVF9GQ19GVFlQRSggaWVlZTJob3N0KCByeC5mYyApKSkgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIHR4LmZjID0gaG9zdDJpZWVlKCBTRVRfRkNfRlRZUEUoV0xBTl9GVFlQX0NUTCkgfCAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICBTRVRfRkNfRlNUWVBFKFdMQU5fRlNUWVBFX1JUUykgKTsgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFdMQU5fR0VUX0ZDX1BWRVIobikJICgoKFVJTlQxNikobikpICYgKEJJVDAgfCBCSVQxKSkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfRlRZUEUobikJKCgoKFVJTlQxNikobikpICYgKEJJVDIgfCBCSVQzKSkgPj4gMikKKyNkZWZpbmUgV0xBTl9HRVRfRkNfRlNUWVBFKG4pCSgoKChVSU5UMTYpKG4pKSAmIChCSVQ0fEJJVDV8QklUNnxCSVQ3KSkgPj4gNCkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfVE9EUyhuKSAJKCgoKFVJTlQxNikobikpICYgKEJJVDgpKSA+PiA4KQorI2RlZmluZSBXTEFOX0dFVF9GQ19GUk9NRFMobikJKCgoKFVJTlQxNikobikpICYgKEJJVDkpKSA+PiA5KQorI2RlZmluZSBXTEFOX0dFVF9GQ19NT1JFRlJBRyhuKSAoKCgoVUlOVDE2KShuKSkgJiAoQklUMTApKSA+PiAxMCkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfUkVUUlkobikJKCgoKFVJTlQxNikobikpICYgKEJJVDExKSkgPj4gMTEpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX1BXUk1HVChuKQkoKCgoVUlOVDE2KShuKSkgJiAoQklUMTIpKSA+PiAxMikKKyNkZWZpbmUgV0xBTl9HRVRfRkNfTU9SRURBVEEobikgKCgoKFVJTlQxNikobikpICYgKEJJVDEzKSkgPj4gMTMpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX0lTV0VQKG4pCSgoKChVSU5UMTYpKG4pKSAmIChCSVQxNCkpID4+IDE0KQorI2RlZmluZSBXTEFOX0dFVF9GQ19PUkRFUihuKQkoKCgoVUlOVDE2KShuKSkgJiAoQklUMTUpKSA+PiAxNSkKKworI2RlZmluZSBXTEFOX1NFVF9GQ19QVkVSKG4pCSgoVUlOVDE2KShuKSkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfRlRZUEUobikJKCgoVUlOVDE2KShuKSkgPDwgMikKKyNkZWZpbmUgV0xBTl9TRVRfRkNfRlNUWVBFKG4pCSgoKFVJTlQxNikobikpIDw8IDQpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX1RPRFMobikgCSgoKFVJTlQxNikobikpIDw8IDgpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX0ZST01EUyhuKQkoKChVSU5UMTYpKG4pKSA8PCA5KQorI2RlZmluZSBXTEFOX1NFVF9GQ19NT1JFRlJBRyhuKSAoKChVSU5UMTYpKG4pKSA8PCAxMCkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfUkVUUlkobikJKCgoVUlOVDE2KShuKSkgPDwgMTEpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX1BXUk1HVChuKQkoKChVSU5UMTYpKG4pKSA8PCAxMikKKyNkZWZpbmUgV0xBTl9TRVRfRkNfTU9SRURBVEEobikgKCgoVUlOVDE2KShuKSkgPDwgMTMpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX0lTV0VQKG4pCSgoKFVJTlQxNikobikpIDw8IDE0KQorI2RlZmluZSBXTEFOX1NFVF9GQ19PUkRFUihuKQkoKChVSU5UMTYpKG4pKSA8PCAxNSkKKworLyotLS0gRHVyYXRpb24gTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTWFjcm9zIHRvIGdldC9zZXQgdGhlIGJpdGZpZWxkcyBvZiB0aGUgRHVyYXRpb24gRmllbGQgICAgICAqLworLyogIC0gdGhlIGR1cmF0aW9uIHZhbHVlIGlzIG9ubHkgdmFsaWQgd2hlbiBiaXQxNSBpcyB6ZXJvICAgICAqLworLyogIC0gdGhlIGZpcm13YXJlIGhhbmRsZXMgdGhlc2UgdmFsdWVzLCBzbyBJJ20gbm90IGdvaW5nICAgICAqLworLyogICAgdGhlc2UgbWFjcm9zIHJpZ2h0IG5vdy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLSBTZXF1ZW5jZSBDb250cm9sICBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNYWNyb3MgdG8gZ2V0L3NldCB0aGUgYml0ZmllbGRzIG9mIHRoZSBTZXF1ZW5jZSBDb250cm9sICAgICovCisvKiBGaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdMQU5fR0VUX1NFUV9GUkdOVU0obikgKCgoVUlOVDE2KShuKSkgJiAoQklUMHxCSVQxfEJJVDJ8QklUMykpCisjZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVFOVU0obikgKCgoKFVJTlQxNikobikpICYgKH4oQklUMHxCSVQxfEJJVDJ8QklUMykpKSA+PiA0KQorCisvKi0tLSBEYXRhIHB0ciBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBDcmVhdGVzIGEgVUlOVDgqIHRvIHRoZSBkYXRhIHBvcnRpb24gb2YgYSBmcmFtZSAgICAgICAgICAgICovCisvKiBBc3N1bWVzIHlvdSdyZSBwYXNzaW5nIGluIGEgcHRyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGhkciovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdMQU5fSERSX0EzX0RBVEFQKHApICgoKFVJTlQ4KikocCkpICsgV0xBTl9IRFJfQTNfTEVOKQorI2RlZmluZSBXTEFOX0hEUl9BNF9EQVRBUChwKSAoKChVSU5UOCopKHApKSArIFdMQU5fSERSX0E0X0xFTikKKworI2RlZmluZSBET1QxMV9SQVRFNV9JU0JBU0lDX0dFVChyKSAgICAgKCgoVUlOVDgpKHIpKSAmIEJJVDcpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBUeXBlcyAqLworCisvKiBCU1MgVGltZXN0YW1wICovCit0eXBlZGVmIFVJTlQ4IHdsYW5fYnNzX3RzX3RbV0xBTl9CU1NfVFNfTEVOXTsKKworLyogR2VuZXJpYyA4MDIuMTEgSGVhZGVyIHR5cGVzICovCisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9oZHJfYTMKK3sKKwlVSU5UMTYJZmM7CisJVUlOVDE2CWR1cjsKKwlVSU5UOAlhMVtXTEFOX0FERFJfTEVOXTsKKwlVSU5UOAlhMltXTEFOX0FERFJfTEVOXTsKKwlVSU5UOAlhM1tXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJc2VxOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFfaGRyX2EzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9oZHJfYTQKK3sKKwlVSU5UMTYJZmM7CisJVUlOVDE2CWR1cjsKKwlVSU5UOAlhMVtXTEFOX0FERFJfTEVOXTsKKwlVSU5UOAlhMltXTEFOX0FERFJfTEVOXTsKKwlVSU5UOAlhM1tXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJc2VxOworCVVJTlQ4CWE0W1dMQU5fQUREUl9MRU5dOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFfaGRyX2E0X3Q7CisKK3R5cGVkZWYgdW5pb24gcDgwMjExX2hkcgoreworCXA4MDIxMV9oZHJfYTNfdAkJYTM7CisJcDgwMjExX2hkcl9hNF90CQlhNDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExX2hkcl90OworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCisvKiBGcmFtZSBhbmQgaGVhZGVyIGxlbmdodCBtYWNyb3MgKi8KKworI2RlZmluZSBXTEFOX0NUTF9GUkFNRUxFTihmc3R5cGUpIChcCisJKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfQkxPQ0tBQ0tSRVEJPyAyNCA6IFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9CTE9DS0FDSyAgIAk/IDE1MiA6IFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9QU1BPTEwJCT8gMjAgOiBcCisJKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfUlRTCQk/IDIwIDogXAorCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX0NUUwkJPyAxNCA6IFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9BQ0sJCT8gMTQgOiBcCisJKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfQ0ZFTkQJCT8gMjAgOiBcCisJKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfQ0ZFTkRDRkFDSwk/IDIwIDogNCkKKworI2RlZmluZSBXTEFOX0ZDU19MRU4JCQk0CisKKy8qIGZ0Y2wgaW4gSE9TVCBvcmRlciAqLworaW5saW5lIHN0YXRpYyBVSU5UMTYgcDgwMjExX2hlYWRlcmxlbihVSU5UMTYgZmN0bCkKK3sKKwlVSU5UMTYgaGRybGVuID0gMDsKKworCXN3aXRjaCAoIFdMQU5fR0VUX0ZDX0ZUWVBFKGZjdGwpICkgeworCWNhc2UgV0xBTl9GVFlQRV9NR01UOgorCQloZHJsZW4gPSBXTEFOX0hEUl9BM19MRU47CisJCWJyZWFrOworCWNhc2UgV0xBTl9GVFlQRV9EQVRBOgorCQloZHJsZW4gPSBXTEFOX0hEUl9BM19MRU47CisJCWlmICggV0xBTl9HRVRfRkNfVE9EUyhmY3RsKSAmJiBXTEFOX0dFVF9GQ19GUk9NRFMoZmN0bCkgKSB7CisJCQloZHJsZW4gKz0gV0xBTl9BRERSX0xFTjsKKwkJfQorCQlicmVhazsKKwljYXNlIFdMQU5fRlRZUEVfQ1RMOgorCQloZHJsZW4gPSBXTEFOX0NUTF9GUkFNRUxFTihXTEFOX0dFVF9GQ19GU1RZUEUoZmN0bCkpIC0KKwkJCVdMQU5fRkNTX0xFTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaGRybGVuID0gV0xBTl9IRFJfQTNfTEVOOworCX0KKworCXJldHVybiBoZHJsZW47Cit9CisKKyNlbmRpZiAvKiBfUDgwMjExSERSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWlvY3RsLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFpb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YjJlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFpb2N0bC5oCkBAIC0wLDAgKzEsMTIzIEBACisvKiBwODAyMTFpb2N0bC5oCisqCisqIERlY2xhcmVzIGNvbnN0YW50cyBhbmQgdHlwZXMgZm9yIHRoZSBwODAyMTEgaW9jdGxzCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBXaGlsZSB0aGlzIGZpbGUgaXMgY2FsbGVkICdpb2N0bCcgaXMgcHVycG9zZSBnb2VzIGEgbGl0dGxlIGJleW9uZAorKiAgdGhhdC4gIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0eXBlcyBhbmQgY29udGFudHMgdXNlZCB0byBpbXBsZW1lbnQKKyogIHRoZSBwODAyMTEgcmVxdWVzdC9jb25maXJtL2luZGljYXRlIGludGVyZmFjZXMgb24gTGludXguICBUaGUKKyogIHJlcXVlc3QvY29uZmlybSBpbnRlcmZhY2UgaXMsIGluIGZhY3QsIG5vcm1hbGx5IGltcGxlbWVudGVkIGFzIGFuCisqICBpb2N0bC4gIFRoZSBpbmRpY2F0ZSBpbnRlcmZhY2Ugb24gdGhlIG90aGVyIGhhbmQsIGlzIGltcGxlbWVudGVkCisqICB1c2luZyB0aGUgTGludXggJ25ldGxpbmsnIGludGVyZmFjZS4KKyoKKyogIFRoZSByZWFzb24gSSBzYXkgdGhhdCByZXF1ZXN0L2NvbmZpcm0gaXMgJ25vcm1hbGx5JyBpbXBsZW1lbnRlZAorKiAgdmlhIGlvY3RsIGlzIHRoYXQgd2UncmUgcmVzZXJ2aW5nIHRoZSByaWdodCB0byBiZSBhYmxlIHRvIHNlbmQKKyogIHJlcXVlc3QgY29tbWFuZHMgdmlhIHRoZSBuZXRsaW5rIGludGVyZmFjZS4gIFRoaXMgd2lsbCBiZSBuZWNlc3NhcnkKKyogIGlmIHdlIGV2ZXIgbmVlZCB0byBzZW5kIHJlcXVlc3QgbWVzc2FnZXMgd2hlbiB0aGVyZSBhcmVuJ3QgYW55CisqICB3bGFuIG5ldHdvcmsgZGV2aWNlcyBwcmVzZW50IChpLmUuIHNlbmRpbmcgYSBtZXNzYWdlIHRoYXQgb25seSBwODAyMTEKKyogIGNhcmVzIGFib3V0LgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworCisjaWZuZGVmIF9QODAyMTFJT0NUTF9ICisjZGVmaW5lIF9QODAyMTFJT0NUTF9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHA4MDIxMSBpb2N0bCAicmVxdWVzdCIgY29kZXMuICBTZWUgYXJndW1lbnQgMiBvZiBpb2N0bCgyKS4gKi8KKworI2RlZmluZSBQODAyMTFfSUZURVNUCQkoU0lPQ0RFVlBSSVZBVEUgKyAwKQorI2RlZmluZSBQODAyMTFfSUZSRVEJCShTSU9DREVWUFJJVkFURSArIDEpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNYWdpYyBudW1iZXIsIGEgcXVpY2sgdGVzdCB0byBzZWUgd2UncmUgZ2V0dGluZyB0aGUgZGVzaXJlZCBzdHJ1Y3QgKi8KKworI2RlZmluZSBQODAyMTFfSU9DVExfTUFHSUMJKDB4NGEyZDQ2NGRVTCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE5ldGxpbmsgcHJvdG9jb2wgbnVtYmVycyBmb3IgdGhlIGluZGljYXRpb24gaW50ZXJmYWNlICovCisKKyNkZWZpbmUgUDgwMjExX05MX1NPQ0tfSU5ECU5FVExJTktfVVNFUlNPQ0sKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE5ldGxpbmsgbXVsdGljYXN0IGJpdHMgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBtZXNzYWdlcyAqLworCisjZGVmaW5lIFA4MDIxMV9OTF9NQ0FTVF9HUlBfTUxNRQlCSVQwCS8qIExvY2FsIHN0YXRpb24gbWVzc2FnZXMgKi8KKyNkZWZpbmUgUDgwMjExX05MX01DQVNUX0dSUF9TTklGRglCSVQxCS8qIFNuaWZmZXIgbWVzc2FnZXMgKi8KKyNkZWZpbmUgUDgwMjExX05MX01DQVNUX0dSUF9ESVNUCUJJVDIJLyogRGlzdHJpYnV0aW9uIHN5c3RlbSBtZXNzYWdlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBBIHB0ciB0byB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSB0eXBlIGlzIHBhc3NlZCBhcyB0aGUgdGhpcmQgKi8KKy8qICBhcmd1bWVudCB0byB0aGUgaW9jdGwgc3lzdGVtIGNhbGwgd2hlbiBpc3N1aW5nIGEgcmVxdWVzdCB0byAqLworLyogIHRoZSBwODAyMTEgbW9kdWxlLiAqLworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFpb2N0bF9yZXEKK3sKKwljaGFyIAluYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCWNhZGRyX3QgZGF0YTsKKwlVSU5UMzIJbWFnaWM7CisJVUlOVDE2CWxlbjsKKwlVSU5UMzIJcmVzdWx0OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpb2N0bF9yZXFfdDsKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRXh0ZXJuIERlY2xhcmF0aW9ucyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworCisjZW5kaWYgLyogX1A4MDIxMUlPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGEuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2IzZjVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YS5oCkBAIC0wLDAgKzEsMTY5IEBACisvKiBwODAyMTFtZXRhLmgKKyoKKyogTWFjcm9zLCBjb25zdGFudHMsIHR5cGVzLCBhbmQgZnVuY3MgZm9yIHA4MDIxMSBtZXRhZGF0YQorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgZGVjbGFyZXMgc29tZSBvZiB0aGUgY29uc3RhbnRzIGFuZCB0eXBlcyB1c2VkIGluIHZhcmlvdXMKKyogcGFydHMgb2YgdGhlIGxpbnV4LXdsYW4gc3lzdGVtLgorKgorKiBOb3RlczoKKyogICAtIENvbnN0YW50IHZhbHVlcyBhcmUgYWx3YXlzIGluIEhPU1QgYnl0ZSBvcmRlci4KKyoKKyogQWxsIGZ1bmN0aW9ucyBhbmQgc3RhdGljcyBkZWNsYXJlZCBoZXJlIGFyZSBpbXBsZW1lbnRlZCBpbiBwODAyMTF0eXBlcy5jCisqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMU1FVEFfSAorI2RlZmluZSBfUDgwMjExTUVUQV9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2lmbmRlZiBfV0xBTl9DT01QQVRfSAorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIENvbnN0YW50cyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIE1hY3JvcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbnQgbmFtaW5nICovCisvKiAgY29udmVudGlvbnMgZm9yIGFsbCB0aGUgZGlmZmVyZW50IG1ldGFkYXRhIGxpc3RzLiAqLworCisjZGVmaW5lIE1LUkVRTUVUQU5BTUUobmFtZSkJCXA4MDIxMW1ldGFfICMjIHJlcSAjIyBfICMjIG5hbWUKKyNkZWZpbmUgTUtJTkRNRVRBTkFNRShuYW1lKQkJcDgwMjExbWV0YV8gIyMgaW5kICMjIF8gIyMgbmFtZQorI2RlZmluZSBNS01JQk1FVEFOQU1FKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBtaWIgIyMgXyAjIyBuYW1lCisjZGVmaW5lIE1LR1JQTUVUQU5BTUUobmFtZSkJCXA4MDIxMW1ldGFfICMjIGdycCAjIyBfICMjIG5hbWUKKworI2RlZmluZSBNS1JFUU1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyByZXEgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQorI2RlZmluZSBNS0lORE1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBpbmQgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQorI2RlZmluZSBNS01JQk1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBtaWIgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQorI2RlZmluZSBNS0dSUE1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBncnAgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQorCisjZGVmaW5lIEdFVE1FVEFTSVpFKGFwdHIpCQkoKiooKFVJTlQzMioqKShhcHRyKSkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIGlmZGVmIGRlcGVuZHMgb24gdGhlIGZvbGxvd2luZyBkZWZpbmVzOiAqLworLyogIFA4MDIxMV9OT0lOQ0xVREVTVFJJTkdTIC0gaWYgZGVmaW5lZCwgYWxsIG1ldGFkYXRhIG5hbWUgZmllbGRzICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZW1wdHkgc3RyaW5ncyAqLworCisjaWZkZWYgUDgwMjExX05PSU5DTFVERVNUUklOR1MKKwkjZGVmaW5lCU1LSVRFTU5BTUUocykJKCIiKQorI2Vsc2UKKwkjZGVmaW5lCU1LSVRFTU5BTUUocykJKHMpCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSB0eXBlcyBhcmUgdXNlZCBmb3IgdGhlIG1ldGFkYXRhICovCisvKiByZXByZXNlbnRhdGlvbiBvZiBjYXRlZ29yeSBsaXN0IG1ldGFkYXRhLCBncm91cCBsaXN0IG1ldGFkYXRhLCAqLworLyogYW5kIGRhdGEgaXRlbSBtZXRhZGF0YSBmb3IgYm90aCBNaWIgYW5kIE1lc3NhZ2VzLiAqLworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtZXRhCit7CisJY2hhcgkJCSpuYW1lOwkJLyogZGF0YSBpdGVtIG5hbWUgKi8KKwlVSU5UMzIJCQlkaWQ7CQkvKiBwYXJ0aWFsIGRpZCAqLworCVVJTlQzMgkJCWZsYWdzOwkJLyogc2V0IG9mIHZhcmlvdXMgZmxhZyBiaXRzICovCisJVUlOVDMyCQkJbWluOwkJLyogbWluIHZhbHVlIG9mIGEgQk9VTkRFRElOVCAqLworCVVJTlQzMgkJCW1heDsJCS8qIG1heCB2YWx1ZSBvZiBhIEJPVU5ERURJTlQgKi8KKworCVVJTlQzMgkJCW1heGxlbjsJCS8qIG1heGxlbiBvZiBhIE9DVEVUU1RSIG9yIERJU1BMQVlTVFIgKi8KKwlVSU5UMzIJCQltaW5sZW47CQkvKiBtaW5sZW4gb2YgYSBPQ1RFVFNUUiBvciBESVNQTEFZU1RSICovCisJcDgwMjExZW51bV90CQkqZW51bXB0cjsJLyogcHRyIHRvIHRoZSBlbnVtIHR5cGUgZm9yIEVOVU1JTlQgKi8KKwlwODAyMTFfdG90ZXh0X3QJCXRvdGV4dHB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCisJcDgwMjExX2Zyb210ZXh0X3QJZnJvbXRleHRwdHI7CS8qIHB0ciB0byB0b3RleHQgY29udmVyc2lvbiBmdW5jdGlvbiAqLworCXA4MDIxMV92YWxpZF90CQl2YWxpZGZ1bnB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCit9IHA4MDIxMW1ldGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZ3JwbGlzdGl0ZW0KK3sKKwljaGFyCQkqbmFtZTsKKwlwODAyMTFtZXRhX3QJKml0ZW1saXN0OworfSBncnBsaXN0aXRlbV90OworCit0eXBlZGVmIHN0cnVjdCBjYXRsaXN0aXRlbQoreworCWNoYXIJCSpuYW1lOworCWdycGxpc3RpdGVtX3QJKmdycGxpc3Q7Cit9IGNhdGxpc3RpdGVtX3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworVUlOVDMyIHA4MDIxMV90ZXh0MmRpZChjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBjaGFyICpjYXRuYW1lLCBjaGFyICpncnBuYW1lLCBjaGFyICppdGVtbmFtZSk7CitVSU5UMzIgcDgwMjExX3RleHQyY2F0ZGlkKGNhdGxpc3RpdGVtX3QgKmxpc3QsIGNoYXIgKm5hbWUgKTsKK1VJTlQzMiBwODAyMTFfdGV4dDJncnBkaWQoZ3JwbGlzdGl0ZW1fdCAqbGlzdCwgY2hhciAqbmFtZSApOworVUlOVDMyIHA4MDIxMV90ZXh0Mml0ZW1kaWQocDgwMjExbWV0YV90ICpsaXN0LCBjaGFyICpuYW1lICk7CitVSU5UMzIgcDgwMjExX2lzdmFsaWRfZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBVSU5UMzIgZGlkICk7CitVSU5UMzIgcDgwMjExX2lzdmFsaWRfY2F0ZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBVSU5UMzIgZGlkICk7CitVSU5UMzIgcDgwMjExX2lzdmFsaWRfZ3JwZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBVSU5UMzIgZGlkICk7CitVSU5UMzIgcDgwMjExX2lzdmFsaWRfaXRlbWRpZCggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgVUlOVDMyIGRpZCApOworY2F0bGlzdGl0ZW1fdCAqcDgwMjExX2RpZDJjYXQoIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIFVJTlQzMiBkaWQgKTsKK2dycGxpc3RpdGVtX3QgKnA4MDIxMV9kaWQyZ3JwKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBVSU5UMzIgZGlkICk7CitwODAyMTFtZXRhX3QgKnA4MDIxMV9kaWQyaXRlbSggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgVUlOVDMyIGRpZCApOworVUlOVDMyIHA4MDIxMWl0ZW1fbWF4ZGF0YWxlbiggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCApOworVUlOVDMyIHA4MDIxMV9tZXRhbmFtZTJkaWQoc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgY2hhciAqaXRlbW5hbWUpOworVUlOVDMyIHA4MDIxMWl0ZW1fZ2V0b2Zmc2V0KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkICk7CitpbnQgcDgwMjExaXRlbV9nZXR0eXBlKHA4MDIxMW1ldGFfdCAqbWV0YSk7CisKKyNlbmRpZiAvKiBfUDgwMjExTUVUQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhZGVmLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3ZjQzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFkZWYuaApAQCAtMCwwICsxLDI1MjQgQEAKKy8qIFRoaXMgZmlsZSBpcyBHRU5FUkFURUQgQVVUT01BVElDQUxMWS4gIERPIE5PVCBFRElUIE9SIE1PRElGWS4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMU1LTUVUQURFRl9ICisjZGVmaW5lIF9QODAyMTFNS01FVEFERUZfSAorCisKKyNkZWZpbmUgRElEbXNnX2NhdF9kb3QxMXJlcSBcCisJCQlQODAyMTFESURfTUtTRUNUSU9OKDEpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9taWJnZXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX21pYmdldF9taWJhdHRyaWJ1dGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfbWliZ2V0X3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfbWlic2V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9taWJzZXRfbWliYXR0cmlidXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX21pYnNldF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Bvd2VybWdtdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcG93ZXJtZ210X3Bvd2VybWdtdG1vZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcG93ZXJtZ210X3dha2V1cCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9wb3dlcm1nbXRfcmVjZWl2ZWR0aW1zIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Bvd2VybWdtdF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fYnNzdHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX2Jzc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fc3NpZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3NjYW50eXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcHJvYmVkZWxheSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX2NoYW5uZWxsaXN0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fbWluY2hhbm5lbHRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9tYXhjaGFubmVsdGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9udW1ic3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fYXBwZW5kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19ic3NpbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc2lnbmFsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19ub2lzZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYnNzaWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3NzaWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jzc3R5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2JlYWNvbnBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZHRpbXBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdGltZXN0YW1wIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfbG9jYWx0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZmhkd2VsbHRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19maGhvcHNldCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2ZoaG9wcGF0dGVybiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2ZoaG9waW5kZXggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19kc2NoYW5uZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBjb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcHBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcG1heGR1cmF0aW9uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2ZwZHVycmVtYWluaW5nIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfaWJzc2F0aW13aW5kb3cgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBvbGxhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2Zwb2xscmVxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfcHJpdmFjeSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGUyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGU1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGU4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGUyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGU1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGU3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3VwcHJhdGU4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX2Jzc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fam9pbmZhaWx1cmV0aW1lb3V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYmFzaWNyYXRlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX2Jhc2ljcmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9iYXNpY3JhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYmFzaWNyYXRlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX2Jhc2ljcmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9iYXNpY3JhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYmFzaWNyYXRlNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX2Jhc2ljcmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9vcGVyYXRpb25hbHJhdGUyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2F1dGhlbnRpY2F0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXV0aGVudGljYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2F1dGhlbnRpY2F0ZV9hdXRoZW50aWNhdGlvbnR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXV0aGVudGljYXRlX2F1dGhlbnRpY2F0aW9uZmFpbHVyZXRpbWVvdXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXV0aGVudGljYXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGVhdXRoZW50aWNhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2RlYXV0aGVudGljYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2RlYXV0aGVudGljYXRlX3JlYXNvbmNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGVhdXRoZW50aWNhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Fzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfYXNzb2NpYXRlZmFpbHVyZXRpbWVvdXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXNzb2NpYXRlX2NmcG9sbGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXNzb2NpYXRlX2NmcG9sbHJlcSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfcHJpdmFjeSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfbGlzdGVuaW50ZXJ2YWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXNzb2NpYXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9yZWFzc29jaWF0ZV9uZXdhcGFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX3JlYXNzb2NpYXRlZmFpbHVyZXRpbWVvdXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX2NmcG9sbGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX2NmcG9sbHJlcSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGVfcHJpdmFjeSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGVfbGlzdGVuaW50ZXJ2YWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Rpc2Fzc29jaWF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDExKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Rpc2Fzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDExKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlX3JlYXNvbmNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Rpc2Fzc29jaWF0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9yZXNldCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Jlc2V0X3NldGRlZmF1bHRtaWIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Jlc2V0X21hY2FkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Jlc2V0X3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfc3NpZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYnNzdHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmVhY29ucGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9kdGltcGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9jZnBwZXJpb2QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2NmcG1heGR1cmF0aW9uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9maGR3ZWxsdGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfZmhob3BzZXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2ZoaG9wcGF0dGVybiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfZHNjaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfaWJzc2F0aW13aW5kb3cgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9wcm9iZWRlbGF5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfY2Zwb2xsYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2NmcG9sbHJlcSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGUyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGU1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGU4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfY2F0X2RvdDExaW5kIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMikKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2F1dGhlbnRpY2F0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXV0aGVudGljYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2F1dGhlbnRpY2F0ZV9hdXRoZW50aWNhdGlvbnR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2RlYXV0aGVudGljYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2RlYXV0aGVudGljYXRlX3JlYXNvbmNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXNzb2NpYXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hc3NvY2lhdGVfcGVlcnN0YWFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXNzb2NpYXRlX2FpZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9yZWFzc29jaWF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGVfcGVlcnN0YWFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGVfYWlkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX3JlYXNzb2NpYXRlX29sZGFwYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9kaXNhc3NvY2lhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9kaXNhc3NvY2lhdGVfcmVhc29uY29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19jYXRfbG54cmVxIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMykKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9pZnN0YXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfaWZzdGF0ZV9pZnN0YXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9pZnN0YXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9lbmFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9jaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV93bGFuc25pZmZfcHJpc21oZWFkZXIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl93bGFuaGVhZGVyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV93bGFuc25pZmZfa2VlcHdlcGZsYWdzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV93bGFuc25pZmZfc3RyaXBmY3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9wYWNrZXRfdHJ1bmMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9ob3N0d2VwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfaG9zdHdlcF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9ob3N0d2VwX2RlY3J5cHQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2hvc3R3ZXBfZW5jcnlwdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkpCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV9kYm0gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV9saW5rIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfbGV2ZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV9ub2lzZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfYXV0b2pvaW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbl9zc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbl9hdXRodHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfYXV0b2pvaW5fcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19jYXRfbG54aW5kIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oNCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpKQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2hvc3R0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9tYWN0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9jaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9yc3NpIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9zcSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc2lnbmFsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9ub2lzZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fcmF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faXN0eCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fZnJtbGVuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfcm9hbSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQorI2RlZmluZSBESURtc2dfbG54aW5kX3JvYW1fcmVhc29uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2NhdF9wMnJlcSBcCisJCQlQODAyMTFESURfTUtTRUNUSU9OKDUpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2Jzc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYmFzaWNyYXRlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2Jhc2ljcmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9iYXNpY3JhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYmFzaWNyYXRlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2Jhc2ljcmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9iYXNpY3JhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYmFzaWNyYXRlNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2Jhc2ljcmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9vcGVyYXRpb25hbHJhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fc3NpZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9jaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2F1dGh0eXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JlYWRwZGEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JlYWRwZGFfcGRhIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JlYWRwZGFfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yZWFkY2lzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yZWFkY2lzX2NpcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yZWFkY2lzX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF9zdGF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF9zdGF0ZV9lbmFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF9zdGF0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2F1eHBvcnRfcmVhZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF9yZWFkX2FkZHIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF9yZWFkX2xlbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3JlYWRfZGF0YSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3JlYWRfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3dyaXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3dyaXRlX2FkZHIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF93cml0ZV9sZW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF93cml0ZV9kYXRhIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2F1eHBvcnRfd3JpdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9sb3dfbGV2ZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbF9jb21tYW5kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbF9wYXJhbTAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbG93X2xldmVsX3BhcmFtMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9sb3dfbGV2ZWxfcGFyYW0yIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbF9yZXNwMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9sb3dfbGV2ZWxfcmVzcDEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbG93X2xldmVsX3Jlc3AyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3Rlc3RfY29tbWFuZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3Rlc3Rjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3Rlc3RfY29tbWFuZF90ZXN0cGFyYW0gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3N0YXR1cyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV90ZXN0X2NvbW1hbmRfcmVzcDAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3Jlc3AxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3Rlc3RfY29tbWFuZF9yZXNwMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbWlfcmVhZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpKQorI2RlZmluZSBESURtc2dfcDJyZXFfbW1pX3JlYWRfYWRkciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbWlfcmVhZF92YWx1ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbWlfcmVhZF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21taV93cml0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21taV93cml0ZV9hZGRyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTApIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbWlfd3JpdGVfZGF0YSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbW1pX3dyaXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfc3RhdGVfZW5hYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZV9leGVhZGRyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF93cml0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlX2FkZHIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlX2xlbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfZGF0YSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfZW5hYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNCkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX2FkZHIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfbGVuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX2RhdGEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbW1fc3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNSkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbV9zdGF0ZV9lbmFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21tX3N0YXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2R1bXBfc3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNikpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9kdW1wX3N0YXRlX2xldmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9kdW1wX3N0YXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mbyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE3KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19jaGFubmVsbGlzdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX2NoYW5uZWxkd2VsbHRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9jaGFubmVsX2luZm9fbnVtY2hpbmZvIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9jaGFubmVsX2luZm9fcmVzdWx0cyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE4KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzX2NoYW5uZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzX2F2Z25vaXNlbGV2ZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzX3BlYWtub2lzZWxldmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9jaGFubmVsX2luZm9fcmVzdWx0c19ic3NhY3RpdmUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzX3BjZmFjdGl2ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfZW5hYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTkpKQorI2RlZmluZSBESURtc2dfcDJyZXFfZW5hYmxlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2NhdF9kb3QxMXNtdCBcCisJCQlQODAyMTFESURfTUtTRUNUSU9OKDEpCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9wODAyMTFUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfcDgwMjExVGFibGVfcDgwMjExX2lmc3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExU3RhdGlvbklEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExTWVkaXVtT2NjdXBhbmN5TGltaXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFDRlBvbGxhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExQ0ZQUGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExQ0ZQTWF4RHVyYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFBdXRoZW50aWNhdGlvblJlc3BvbnNlVGltZU91dCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMVByaXZhY3lPcHRpb25JbXBsZW1lbnRlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMVBvd2VyTWFuYWdlbWVudE1vZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEZXNpcmVkU1NJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURlc2lyZWRCU1NUeXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMU9wZXJhdGlvbmFsUmF0ZVNldCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFCZWFjb25QZXJpb2QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExRFRJTVBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFBc3NvY2lhdGlvblJlc3BvbnNlVGltZU91dCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEaXNhc3NvY2lhdGVSZWFzb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExRGlzYXNzb2NpYXRlU3RhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEZWF1dGhlbnRpY2F0ZVJlYXNvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEZWF1dGhlbnRpY2F0ZVN0YXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExQXV0aGVudGljYXRlRmFpbFN0YXR1cyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFBdXRoZW50aWNhdGVGYWlsU3RhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTQwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG0yIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGUyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDE0MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTQwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG01IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGU1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG02IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTQwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkpCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MGMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MGMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MGMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MGMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQS2V5TWFwcGluZ3NUYWJsZV9kb3QxMVdFUEtleU1hcHBpbmdJbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGVfZG90MTFXRVBLZXlNYXBwaW5nQWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGVfZG90MTFXRVBLZXlNYXBwaW5nV0VQT24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBLZXlNYXBwaW5nc1RhYmxlX2RvdDExV0VQS2V5TWFwcGluZ1ZhbHVlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikpCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQS2V5TWFwcGluZ0xlbmd0aCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUElDVkVycm9yQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBFeGNsdWRlZENvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2NhdF9kb3QxMW1hYyBcCisJCQlQODAyMTFESURfTUtTRUNUSU9OKDIpCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTUFDQWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4UmVjZWl2ZUxpZmV0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYW51ZmFjdHVyZXJJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUHJvZHVjdElEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMU11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFGYWlsZWRDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFSZXRyeUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMU11bHRpcGxlUmV0cnlDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFGcmFtZUR1cGxpY2F0ZUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVJUU1N1Y2Nlc3NDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFSVFNGYWlsdXJlQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExQUNLRmFpbHVyZUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFGQ1NFcnJvckNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFUcmFuc21pdHRlZEZyYW1lQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVdFUFVuZGVjcnlwdGFibGVDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzOCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzOSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczEyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTYpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTkgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTkpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjIpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMykgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI0KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjUpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI3KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjgpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyOSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczMwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMwKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfY2F0X2RvdDExcGh5IFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMykKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFQSFlUeXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFDdXJyZW50UmVnRG9tYWluIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFUZW1wVHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlX2RvdDExQ2hhbm5lbEFnaWxpdHlQcmVzZW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFDaGFubmVsQWdpbGl0eUVuYWJsZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UHJlYW1ibGVFbmFibGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5QW50ZW5uYVRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUFudGVubmFUYWJsZV9kb3QxMUN1cnJlbnRUeEFudGVubmEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlBbnRlbm5hVGFibGVfZG90MTFEaXZlcnNpdHlTdXBwb3J0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5QW50ZW5uYVRhYmxlX2RvdDExQ3VycmVudFJ4QW50ZW5uYSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFOdW1iZXJTdXBwb3J0ZWRQb3dlckxldmVscyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWwyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExSG9wVGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsTnVtYmVyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExTWF4RHdlbGxUaW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudER3ZWxsVGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnRTZXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFDdXJyZW50UGF0dGVybiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnRJbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUNDQU1vZGVTdXBwb3J0ZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q0NBTW9kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUVEVGhyZXNob2xkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExU2hvcnRQcmVhbWJsZU9wdGlvbkltcGxlbWVudGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExUEJDQ09wdGlvbkltcGxlbWVudGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5SVJUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlJUlRhYmxlX2RvdDExQ0NBV2F0Y2hkb2dUaW1lck1heCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUlSVGFibGVfZG90MTFDQ0FXYXRjaGRvZ0NvdW50TWF4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5SVJUYWJsZV9kb3QxMUNDQVdhdGNoZG9nVGltZXJNaW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlJUlRhYmxlX2RvdDExQ0NBV2F0Y2hkb2dDb3VudE1pbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0ZWRUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFSZWdEb21haW5zU3VwcG9ydGVkVGFibGVfZG90MTFSZWdEb21haW5zU3VwcG9ydEluZGV4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUmVnRG9tYWluc1N1cHBvcnRlZFRhYmxlX2RvdDExUmVnRG9tYWluc1N1cHBvcnRWYWx1ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTQwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMUFudGVubmFzTGlzdFRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMUFudGVubmFzTGlzdFRhYmxlX2RvdDExQW50ZW5uYUxpc3RJbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMUFudGVubmFzTGlzdFRhYmxlX2RvdDExU3VwcG9ydGVkVHhBbnRlbm5hIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExQW50ZW5uYXNMaXN0VGFibGVfZG90MTFTdXBwb3J0ZWRSeEFudGVubmEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFBbnRlbm5hc0xpc3RUYWJsZV9kb3QxMURpdmVyc2l0eVNlbGVjdGlvblJ4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzVHhUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeFRhYmxlX2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzVHhJbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1R4VGFibGVfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeFZhbHVlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhUYWJsZV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1J4SW5kZXggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhUYWJsZV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1J4VmFsdWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2NhdF9sbnggXAorCQkJUDgwMjExRElEX01LU0VDVElPTig0KQorI2RlZmluZSBESURtaWJfbG54X2xueENvbmZpZ1RhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1pYl9sbnhfbG54Q29uZmlnVGFibGVfbG54UlNOQUlFIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2NhdF9wMiBcCisJCQlQODAyMTFESURfTUtTRUNUSU9OKDUpCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyTU1UeCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyRWFybHlCZWFjb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMlJlY2VpdmVkRnJhbWVTdGF0aXN0aWNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJDb21tdW5pY2F0aW9uVGFsbGllcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyQXV0aGVudGljYXRlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyQXNzb2NpYXRlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyUG93ZXJTYXZlVXNlckNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJDb21tZW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJBY2Nlc3NNb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJBY2Nlc3NBbGxvdyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMkFjY2Vzc0RlbnkgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJDaGFubmVsSW5mb1Jlc3VsdHMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikpCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBvcnRUeXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duTUFDQWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkRlc2lyZWRTU0lEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duQ2hhbm5lbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93blNTSUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25BVElNV2luZG93IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mU3lzdGVtU2NhbGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNYXhEYXRhTGVuZ3RoIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBNRW5hYmxlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQTUVQUyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNdWx0aWNhc3RSZWNlaXZlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk1heFNsZWVwRHVyYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUE1Ib2xkb3ZlckR1cmF0aW9uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93bk5hbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duRFRJTVBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNdWx0aWNhc3RQTUJ1ZmZlcmluZyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5SUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjUpIHwgMHgwODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjYpIHwgMHgwODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjcpIHwgMHgwODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjgpIHwgMHgwODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRmxhZ3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjkpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQXV0aGVudGljYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzApIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mTWF4QXNzb2NpYXRlZFN0YXRpb25zIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlR4Q29udHJvbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZSb2FtaW5nTW9kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZIb3N0QXV0aGVudGljYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUmN2Q3JjRXJyb3IgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzUpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQWx0UmV0cnlDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzNikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZCZWFjb25JbnRlcnZhbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzNykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNZWRpdW1PY2N1cGFuY3lMaW1pdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZDRlBQZXJpb2QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzkpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQ0ZQTWF4RHVyYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNDApIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQ0ZQRmxhZ3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mU1RBUENGSW5mbyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0MikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQcmlvcml0eVFVc2FnZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0MykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZUSU1DdHJsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQ0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlRoaXJ0eTJUYWxseSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0NSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZFbmhTZWN1cml0eSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0NikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZTaG9ydFByZWFtYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQ3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkV4Y2x1ZGVMb25nUHJlYW1ibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNDgpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQXV0aGVudGljYXRpb25Sc3BUTyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0OSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZCYXNpY1JhdGVzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUwKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlN1cHBvcnRlZFJhdGVzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMkNyZWF0ZUlCU1MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJQcm9taXNjdW91c01vZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQ1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2wxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjMpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2w0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjYpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyQmVoYXZpb3IgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSkKKyNkZWZpbmUgRElEbWliX3AyX3AyQmVoYXZpb3JfcDJUaWNrVGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJNYXhMb2FkVGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMkRMQnVmZmVyUGFnZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMkRMQnVmZmVyT2Zmc2V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyRExCdWZmZXJMZW5ndGggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJQUklJZGVudGl0eSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlBSSVN1cFJhbmdlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyQ0ZJQWN0UmFuZ2VzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyTklDU2VyaWFsTnVtYmVyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyTklDSWRlbnRpdHkgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJNRklTdXBSYW5nZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJDRklTdXBSYW5nZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJDaGFubmVsTGlzdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJSZWd1bGF0b3J5RG9tYWlucyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJUZW1wVHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJTVEFJZGVudGl0eSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJTVEFTdXBSYW5nZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJNRklBY3RSYW5nZXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyU1RBQ0ZJQWN0UmFuZ2VzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMkJ1aWxkU2VxdWVuY2UgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTkpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyUHJpbWFyeUZXSUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyU2Vjb25kYXJ5RldJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJUZXJ0aWFyeUZXSUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikpCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMlBvcnRTdGF0dXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50U1NJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRCU1NJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkNvbW1zUXVhbGl0eSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkNvbW1zUXVhbGl0eUNRIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ29tbXNRdWFsaXR5QVNMIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ29tbXNRdWFsaXR5QU5MIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyZGJtQ29tbXNRdWFsaXR5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyZGJtQ29tbXNRdWFsaXR5Q1EgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHlBU0wgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyZGJtQ29tbXNRdWFsaXR5QU5MIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudEJlYWNvbkludGVydmFsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMlN0YUN1cnJlbnRTY2FsZVRocmVzaG9sZHMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQVBDdXJyZW50U2NhbGVUaHJlc2hvbGRzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMlByb3RvY29sUnNwVGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJTaG9ydFJldHJ5TGltaXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyTG9uZ1JldHJ5TGltaXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyTWF4VHJhbnNtaXRMaWZldGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJNYXhSZWNlaXZlTGlmZXRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ0ZQb2xsYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJBdXRoZW50aWNhdGlvbkFsZ29yaXRobXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI2KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI3KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGU1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI4KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI5KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMk93bk1BQ0FkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzApIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTW9kZW0gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSkKKyNkZWZpbmUgRElEbWliX3AyX3AyTW9kZW1fcDJQSFlUeXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTW9kZW1fcDJDdXJyZW50Q2hhbm5lbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1vZGVtX3AyQ3VycmVudFBvd2VyU3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNb2RlbV9wMkNDQU1vZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNb2RlbV9wMlN1cHBvcnRlZERhdGFSYXRlcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1vZGVtX3AyVHhQb3dlck1heCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MTgwMDAwMDApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtaWIuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTg2N2ZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YW1pYi5oCkBAIC0wLDAgKzEsMTA1IEBACisvKiBwODAyMTFtZXRhbWliLmgKKyoKKyogTWFjcm9zLCBjb25zdCwgdHlwZXMsIGFuZCBmdW5jcyBmb3IgcDgwMjExIG1pYiBtZXRhZGF0YQorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgZGVjbGFyZXMgc29tZSBvZiB0aGUgY29uc3RhbnRzIGFuZCB0eXBlcyB1c2VkIGluIHZhcmlvdXMKKyogcGFydHMgb2YgdGhlIGxpbnV4LXdsYW4gc3lzdGVtLgorKgorKiBOb3RlczoKKyogICAtIENvbnN0YW50IHZhbHVlcyBhcmUgYWx3YXlzIGluIEhPU1QgYnl0ZSBvcmRlci4KKyoKKyogQWxsIGZ1bmN0aW9ucyBhbmQgc3RhdGljcyBkZWNsYXJlZCBoZXJlIGFyZSBpbXBsZW1lbnRlZCBpbiBwODAyMTF0eXBlcy5jCisqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMU1FVEFNSUJfSAorI2RlZmluZSBfUDgwMjExTUVUQU1JQl9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2lmbmRlZiBfV0xBTl9DT01QQVRfSAorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIENvbnN0YW50cyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIE1hY3JvcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRXh0ZXJuIERlY2xhcmF0aW9ucyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBpcyB0aGUgZXh0ZXJuYWwgZGVjbGFyYXRpb24gZm9yIHRoZSBtaWIgKi8KKy8qIGNhdGVnb3J5IG1ldGFkYXRhIGxpc3QgKi8KKworZXh0ZXJuIGNhdGxpc3RpdGVtX3QgbWliX2NhdGxpc3RbXTsKK2V4dGVybiBVSU5UMzIgbWliX2NhdGxpc3Rfc2l6ZTsKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisjZW5kaWYgLyogX1A4MDIxMU1FVEFNSUJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YW1zZy5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YW1zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNmRmY2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbXNnLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qIHA4MDIxMW1ldGFtc2cuaAorKgorKiBNYWNyb3MsIGNvbnN0LCB0eXBlcywgYW5kIGZ1bmNzIGZvciBwODAyMTEgbXNnIG1ldGFkYXRhCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWNsYXJlcyBzb21lIG9mIHRoZSBjb25zdGFudHMgYW5kIHR5cGVzIHVzZWQgaW4gdmFyaW91cworKiBwYXJ0cyBvZiB0aGUgbGludXgtd2xhbiBzeXN0ZW0uCisqCisqIE5vdGVzOgorKiAgIC0gQ29uc3RhbnQgdmFsdWVzIGFyZSBhbHdheXMgaW4gSE9TVCBieXRlIG9yZGVyLgorKgorKiBBbGwgZnVuY3Rpb25zIGFuZCBzdGF0aWNzIGRlY2xhcmVkIGhlcmUgYXJlIGltcGxlbWVudGVkIGluIHA4MDIxMXR5cGVzLmMKKyogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUDgwMjExTUVUQU1TR19ICisjZGVmaW5lIF9QODAyMTFNRVRBTVNHX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaWZuZGVmIF9XTEFOX0NPTVBBVF9ICisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBleHRlcm5hbCBkZWNsYXJhdGlvbiBmb3IgdGhlIG1lc3NhZ2UgKi8KKy8qIGNhdGVnb3J5IG1ldGFkYXRhIGxpc3QgKi8KKworZXh0ZXJuIGNhdGxpc3RpdGVtX3QgbXNnX2NhdGxpc3RbXTsKK2V4dGVybiBVSU5UMzIgbXNnX2NhdGxpc3Rfc2l6ZTsKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisjZW5kaWYgLyogX1A4MDIxMU1FVEFNU0dfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YXN0cnVjdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YXN0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNWY0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmgKQEAgLTAsMCArMSw2NDQgQEAKKy8qIFRoaXMgZmlsZSBpcyBHRU5FUkFURUQgQVVUT01BVElDQUxMWS4gIERPIE5PVCBFRElUIE9SIE1PRElGWS4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMU1LTUVUQVNUUlVDVF9ICisjZGVmaW5lIF9QODAyMTFNS01FVEFTVFJVQ1RfSAorCisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXQKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91bmszOTJfdAltaWJhdHRyaWJ1dGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VuazM5Ml90CW1pYmF0dHJpYnV0ZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfcG93ZXJtZ210Cit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcG93ZXJtZ210bW9kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAl3YWtldXAJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVjZWl2ZWR0aW1zCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfcG93ZXJtZ210X3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYnNzdHlwZQk7CisJcDgwMjExaXRlbV9wc3RyNl90CWJzc2lkCTsKKwlVSU5UOAlwYWRfMENbMV0JOworCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7CisJVUlOVDgJcGFkXzFEWzNdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXNjYW50eXBlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXByb2JlZGVsYXkJOworCXA4MDIxMWl0ZW1fcHN0cjE0X3QJY2hhbm5lbGxpc3QJOworCVVJTlQ4CXBhZF8yQ1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAltaW5jaGFubmVsdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAltYXhjaGFubmVsdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW51bWJzcwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhcHBlbmQJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYnNzaW5kZXgJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzaWduYWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbm9pc2UJOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlic3NpZAk7CisJVUlOVDgJcGFkXzNDWzFdCTsKKwlwODAyMTFpdGVtX3BzdHIzMl90CXNzaWQJOworCVVJTlQ4CXBhZF80RFszXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlic3N0eXBlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJlYWNvbnBlcmlvZAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlkdGltcGVyaW9kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXRpbWVzdGFtcAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsb2NhbHRpbWUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZmhkd2VsbHRpbWUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZmhob3BzZXQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZmhob3BwYXR0ZXJuCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWZoaG9waW5kZXgJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZHNjaGFubmVsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcGNvdW50CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcHBlcmlvZAk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBtYXhkdXJhdGlvbgk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBkdXJyZW1haW5pbmcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJaWJzc2F0aW13aW5kb3cJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xsYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxyZXEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJpdmFjeQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMwk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNgk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU3CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTgJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGUxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlMgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlNQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTYJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU3CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlOAk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX2pvaW4KK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CWJzc2lkCTsKKwlVSU5UOAlwYWRfNUNbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJam9pbmZhaWx1cmV0aW1lb3V0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMgk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU2CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlOAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU3CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTgJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9qb2luX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9hdXRoZW50aWNhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfNkNbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYXV0aGVudGljYXRpb250eXBlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWF1dGhlbnRpY2F0aW9uZmFpbHVyZXRpbWVvdXQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9hdXRoZW50aWNhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX2RlYXV0aGVudGljYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlwZWVyc3RhYWRkcmVzcwk7CisJVUlOVDgJcGFkXzdDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlYXNvbmNvZGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9kZWF1dGhlbnRpY2F0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfYXNzb2NpYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlwZWVyc3RhYWRkcmVzcwk7CisJVUlOVDgJcGFkXzhDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFzc29jaWF0ZWZhaWx1cmV0aW1lb3V0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG9sbGFibGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xscmVxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXByaXZhY3kJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbGlzdGVuaW50ZXJ2YWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAluZXdhcGFkZHJlc3MJOworCVVJTlQ4CXBhZF85Q1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZWFzc29jaWF0ZWZhaWx1cmV0aW1lb3V0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG9sbGFibGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xscmVxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXByaXZhY3kJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbGlzdGVuaW50ZXJ2YWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9yZWFzc29jaWF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlwZWVyc3RhYWRkcmVzcwk7CisJVUlOVDgJcGFkXzEwQ1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZWFzb25jb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9yZXNldAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXNldGRlZmF1bHRtaWIJOworCXA4MDIxMWl0ZW1fcHN0cjZfdAltYWNhZGRyZXNzCTsKKwlVSU5UOAlwYWRfMTFDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfcmVzZXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0Cit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7CisJVUlOVDgJcGFkXzEyRFszXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlic3N0eXBlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJlYWNvbnBlcmlvZAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlkdGltcGVyaW9kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcHBlcmlvZAk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBtYXhkdXJhdGlvbgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmaGR3ZWxsdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHNldAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHBhdHRlcm4JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZHNjaGFubmVsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWlic3NhdGltd2luZG93CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXByb2JlZGVsYXkJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xsYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxyZXEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNAk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU1CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTYJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNwk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU4CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU2CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlOAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMWluZF9hdXRoZW50aWNhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfMTNDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWF1dGhlbnRpY2F0aW9udHlwZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMWluZF9hdXRoZW50aWNhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExaW5kX2RlYXV0aGVudGljYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlwZWVyc3RhYWRkcmVzcwk7CisJVUlOVDgJcGFkXzE0Q1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZWFzb25jb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExaW5kX2RlYXV0aGVudGljYXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMWluZF9hc3NvY2lhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfMTVDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFpZAk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMWluZF9hc3NvY2lhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExaW5kX3JlYXNzb2NpYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlwZWVyc3RhYWRkcmVzcwk7CisJVUlOVDgJcGFkXzE2Q1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhaWQJOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlvbGRhcGFkZHJlc3MJOworCVVJTlQ4CXBhZF8xN0NbMV0JOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJcGVlcnN0YWFkZHJlc3MJOworCVVJTlQ4CXBhZF8xOENbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVhc29uY29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMWluZF9kaXNhc3NvY2lhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9pZnN0YXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJaWZzdGF0ZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueHJlcV9pZnN0YXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5hYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJpc21oZWFkZXIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJd2xhbmhlYWRlcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlrZWVwd2VwZmxhZ3MJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3RyaXBmY3MJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcGFja2V0X3RydW5jCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZl90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXAKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWRlY3J5cHQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5jcnlwdAk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZGJtCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWxpbmsJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbGV2ZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbm9pc2UJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7CisJVUlOVDgJcGFkXzE5RFszXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhdXRodHlwZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJaG9zdHRpbWUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbWFjdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljaGFubmVsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJzc2kJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3EJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc2lnbmFsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW5vaXNlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJhdGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJaXN0eAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmcm1sZW4JOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhpbmRfcm9hbQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlYXNvbgk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19sbnhpbmRfcm9hbV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfam9pbgoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJYnNzaWQJOworCVVJTlQ4CXBhZF8yMENbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNAk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU1CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTYJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNwk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU4CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU2CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlOAk7CisJcDgwMjExaXRlbV9wc3RyMzJfdAlzc2lkCTsKKwlVSU5UOAlwYWRfMjFEWzNdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYXV0aHR5cGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9qb2luX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdW5rMTAyNF90CXBkYQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX3JlYWRwZGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JlYWRjaXMKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91bmsxMDI0X3QJY2lzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfcmVhZGNpc190OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfYXV4cG9ydF9zdGF0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWVuYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2F1eHBvcnRfc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2F1eHBvcnRfcmVhZAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFkZHIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbGVuCTsKKwlwODAyMTFpdGVtX3VuazEwMjRfdAlkYXRhCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfYXV4cG9ydF9yZWFkX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9hdXhwb3J0X3dyaXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYWRkcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsZW4JOworCXA4MDIxMWl0ZW1fdW5rMTAyNF90CWRhdGEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9hdXhwb3J0X3dyaXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9sb3dfbGV2ZWwKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljb21tYW5kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXBhcmFtMAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwYXJhbTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcGFyYW0yCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3AwCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3AxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3AyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfbG93X2xldmVsX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV90ZXN0X2NvbW1hbmQKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAl0ZXN0Y29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAl0ZXN0cGFyYW0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdGF0dXMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzcDAJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzcDEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzcDIJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9tbWlfcmVhZAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFkZHIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJdmFsdWUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9tbWlfcmVhZF90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfbW1pX3dyaXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYWRkcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlkYXRhCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfbW1pX3dyaXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWVuYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlleGVhZGRyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfcmFtZGxfc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYWRkcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsZW4JOworCXA4MDIxMWl0ZW1fdW5rNDA5Nl90CWRhdGEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9yYW1kbF93cml0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWVuYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhZGRyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWxlbgk7CisJcDgwMjExaXRlbV91bms0MDk2X3QJZGF0YQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX21tX3N0YXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5hYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfbW1fc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2R1bXBfc3RhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsZXZlbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2R1bXBfc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2NoYW5uZWxfaW5mbworeworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWxsaXN0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWxkd2VsbHRpbWUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAludW1jaGluZm8JOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9jaGFubmVsX2luZm9fcmVzdWx0cworeworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhdmdub2lzZWxldmVsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXBlYWtub2lzZWxldmVsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJzc2FjdGl2ZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwY2ZhY3RpdmUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2VuYWJsZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfZW5hYmxlX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNGMxNjI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oCkBAIC0wLDAgKzEsNTc1IEBACisvKiBwODAyMTFtZ210LmgKKyoKKyogTWFjcm9zLCB0eXBlcywgYW5kIGZ1bmN0aW9ucyB0byBoYW5kbGUgODAyLjExIG1nbXQgZnJhbWVzCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWNsYXJlcyB0aGUgY29uc3RhbnRzIGFuZCB0eXBlcyB1c2VkIGluIHRoZSBpbnRlcmZhY2UKKyogYmV0d2VlbiBhIHdsYW4gZHJpdmVyIGFuZCB0aGUgdXNlciBtb2RlIHV0aWxpdGllcy4KKyoKKyogTm90ZXM6CisqICAtIENvbnN0YW50IHZhbHVlcyBhcmUgYWx3YXlzIGluIEhPU1QgYnl0ZSBvcmRlci4gIFRvIGFzc2lnbgorKiAgICB2YWx1ZXMgdG8gbXVsdGktYnl0ZSBmaWVsZHMgdGhleSBfbXVzdF8gYmUgY29udmVydGVkIHRvCisqICAgIGllZWUgYnl0ZSBvcmRlci4gIFRvIHJldHJpZXZlIG11bHRpLWJ5dGUgdmFsdWVzIGZyb20gaW5jb21pbmcKKyogICAgZnJhbWVzLCB0aGV5IG11c3QgYmUgY29udmVydGVkIHRvIGhvc3Qgb3JkZXIuCisqCisqICAtIFRoZSBsZW4gbWVtYmVyIG9mIHRoZSBmcmFtZSBzdHJ1Y3R1cmUgZG9lcyBOT1QhISEgaW5jbHVkZQorKiAgICB0aGUgTUFDIENSQy4gIFRoZXJlZm9yZSwgdGhlIGxlbiBmaWVsZCBvbiByeCdkIGZyYW1lcyBzaG91bGQKKyogICAgaGF2ZSA0IHN1YnRyYWN0ZWQgZnJvbSBpdC4KKyoKKyogQWxsIGZ1bmN0aW9ucyBkZWNsYXJlZCBoZXJlIGFyZSBpbXBsZW1lbnRlZCBpbiBwODAyMTEuYworKgorKiBUaGUgdHlwZXMsIG1hY3JvcywgYW5kIGZ1bmN0aW9ucyBkZWZpbmVkIGhlcmUgYXJlIHByaW1hcmlseQorKiB1c2VkIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgbWFuYWdlbWVudCBmcmFtZXMuICBUaGV5IGFyZQorKiBkZXNpZ25lZCB0byBmb2xsb3cgdGhlc2UgcGF0dGVybnMgb2YgdXNlOgorKgorKiBERUNPREU6CisqIDEpIGEgZnJhbWUgb2YgbGVuZ3RoIGxlbiBpcyByZWNlaXZlZCBpbnRvIGJ1ZmZlciBiCisqIDIpIHVzaW5nIHRoZSBoZHIgc3RydWN0dXJlIGFuZCBtYWNyb3MsIHdlIGRldGVybWluZSB0aGUgdHlwZQorKiAzKSBhbiBhcHByb3ByaWF0ZSBtZ210IGZyYW1lIHN0cnVjdHVyZSwgbWYsIGlzIGFsbG9jYXRlZCBhbmQgemVyb2VkCisqIDQpIG1mLmhkciA9IGIKKyogICAgbWYuYnVmID0gYgorKiAgICBtZi5sZW4gPSBsZW4KKyogNSkgY2FsbCBtZ210X2RlY29kZSggbWYgKQorKiA2KSB0aGUgZnJhbWUgZmllbGQgcG9pbnRlcnMgaW4gbWYgYXJlIG5vdyBzZXQuICBOb3RlIHRoYXQgYW55CisqICAgIG11bHRpLWJ5dGUgZnJhbWUgZmllbGQgdmFsdWVzIGFjY2Vzc2VkIHVzaW5nIHRoZSBmcmFtZSBmaWVsZAorKiAgICBwb2ludGVycyBhcmUgaW4gaWVlZSBieXRlIG9yZGVyIGFuZCB3aWxsIGhhdmUgdG8gYmUgY29udmVydGVkCisqICAgIHRvIGhvc3Qgb3JkZXIuCisqCisqIEVOQ09ERToKKyogMSkgTGlicmFyeSBjbGllbnQgYWxsb2NhdGVzIGJ1ZmZlciBzcGFjZSBmb3IgbWF4aW11bSBsZW5ndGgKKyogICAgZnJhbWUgb2YgdGhlIGRlc2lyZWQgdHlwZQorKiAyKSBMaWJyYXJ5IGNsaWVudCBhbGxvY2F0ZXMgYSBtZ210IGZyYW1lIHN0cnVjdHVyZSwgY2FsbGVkIG1mLAorKiAgICBvZiB0aGUgZGVzaXJlZCB0eXBlCisqIDMpIFNldCB0aGUgZm9sbG93aW5nOgorKiAgICBtZi50eXBlID0gPGRlc2lyZWQgdHlwZT4KKyogICAgbWYuYnVmID0gPGFsbG9jYXRlZCBidWZmZXIgYWRkcmVzcz4KKyogNCkgY2FsbCBtZ210X2VuY29kZSggbWYgKQorKiA1KSBhbGwgb2YgdGhlIGZpeGVkIGZpZWxkIHBvaW50ZXJzIGFuZCBmaXhlZCBsZW5ndGggaW5mb3JtYXRpb24gZWxlbWVudAorKiAgICBwb2ludGVycyBpbiBtZiBhcmUgbm93IHNldCB0byB0aGVpciByZXNwZWN0aXZlIGxvY2F0aW9ucyBpbiB0aGUKKyogICAgYWxsb2NhdGVkIHNwYWNlIChmb3J0dW5hdGVseSwgYWxsIHZhcmlhYmxlIGxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50cworKiAgICBmYWxsIGF0IHRoZSBlbmQgb2YgdGhlaXIgcmVzcGVjdGl2ZSBmcmFtZXMpLgorKiA1YSkgVGhlIGxlbmd0aCBmaWVsZCBpcyBzZXQgdG8gaW5jbHVkZSB0aGUgbGFzdCBvZiB0aGUgZml4ZWQgYW5kIGZpeGVkCisqICAgICBsZW5ndGggZmllbGRzLiAgSXQgbWF5IGhhdmUgdG8gYmUgdXBkYXRlZCBmb3Igb3B0aW9uYWwgb3IgdmFyaWFibGUKKyogCWxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50cy4KKyogNikgT3B0aW9uYWwgYW5kIHZhcmlhYmxlIGxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50cyBhcmUgc3BlY2lhbCBjYXNlcworKiAgICBhbmQgbXVzdCBiZSBoYW5kbGVkIGluZGl2aWR1YWxseSBieSB0aGUgY2xpZW50IGNvZGUuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9QODAyMTFNR01UX0gKKyNkZWZpbmUgX1A4MDIxMU1HTVRfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpZm5kZWYgIF9XTEFOX0NPTVBBVF9ICisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNlbmRpZgorCisjaWZuZGVmICBfUDgwMjExSERSX0gKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNlbmRpZgorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworLyotLSBJbmZvcm1hdGlvbiBFbGVtZW50IElEcyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdMQU5fRUlEX1NTSUQJCTAKKyNkZWZpbmUgV0xBTl9FSURfU1VQUF9SQVRFUwkxCisjZGVmaW5lIFdMQU5fRUlEX0ZIX1BBUk1TCTIKKyNkZWZpbmUgV0xBTl9FSURfRFNfUEFSTVMJMworI2RlZmluZSBXTEFOX0VJRF9DRl9QQVJNUwk0CisjZGVmaW5lIFdMQU5fRUlEX1RJTQkJNQorI2RlZmluZSBXTEFOX0VJRF9JQlNTX1BBUk1TCTYKKy8qLS0gdmFsdWVzIDctMTUgcmVzZXJ2ZWQgLS0qLworI2RlZmluZSBXTEFOX0VJRF9DSEFMTEVOR0UJMTYKKy8qLS0gdmFsdWVzIDE3LTMxIHJlc2VydmVkIGZvciBjaGFsbGVuZ2UgdGV4dCBleHRlbnNpb24gLS0qLworLyotLSB2YWx1ZXMgMzItMjU1IHJlc2VydmVkIC0tKi8KKworLyotLSBSZWFzb24gQ29kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdMQU5fTUdNVF9SRUFTT05fUlNWRAkJCTAKKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9VTlNQRUMJCQkxCisjZGVmaW5lIFdMQU5fTUdNVF9SRUFTT05fUFJJT1JfQVVUSF9JTlZBTElECTIKKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9ERUFVVEhfTEVBVklORwkJMworI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX0RJU0FTU09DX0lOQUNUSVZFCTQKKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9ESVNBU1NPQ19BUF9CVVNZCTUKKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9DTEFTUzJfTk9OQVVUSAkJNgorI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX0NMQVNTM19OT05BU1NPQwk3CisjZGVmaW5lIFdMQU5fTUdNVF9SRUFTT05fRElTQVNTT0NfU1RBX0hBU0xFRlQJOAorI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX0NBTlRfQVNTT0NfTk9OQVVUSAk5CisKKy8qLS0gU3RhdHVzIENvZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX1NVQ0NFU1MJCTAKKyNkZWZpbmUgV0xBTl9NR01UX1NUQVRVU19VTlNQRUNfRkFJTFVSRQkJMQorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0NBUFNfVU5TVVBQT1JURUQJMTAKKyNkZWZpbmUgV0xBTl9NR01UX1NUQVRVU19SRUFTU09DX05PX0FTU09DCTExCisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVNTT0NfREVOSUVEX1VOU1BFQwkxMgorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX1VOU1VQUE9SVEVEX0FVVEhBTEcJMTMKKyNkZWZpbmUgV0xBTl9NR01UX1NUQVRVU19SWF9BVVRIX05PU0VRCQkxNAorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0NIQUxMRU5HRV9GQUlMCQkxNQorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0FVVEhfVElNRU9VVAkJMTYKKyNkZWZpbmUgV0xBTl9NR01UX1NUQVRVU19BU1NPQ19ERU5JRURfQlVTWQkxNworI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0FTU09DX0RFTklFRF9SQVRFUwkxOAorICAvKiBwODAyMTFiIGFkZGl0aW9ucyAqLworI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0FTU09DX0RFTklFRF9OT1NIT1JUCTE5CisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVNTT0NfREVOSUVEX05PUEJDQwkyMAorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0FTU09DX0RFTklFRF9OT0FHSUxJVFkJMjEKKworCisKKy8qLS0gQXV0aCBBbGdvcml0aG0gRmllbGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0xBTl9BVVRIX0FMR19PUEVOU1lTVEVNCQkwCisjZGVmaW5lIFdMQU5fQVVUSF9BTEdfU0hBUkVES0VZCQkJMQorCisvKi0tIE1hbmFnZW1lbnQgRnJhbWUgRmllbGQgT2Zmc2V0cyAtLS0tLS0tLS0tLS0tKi8KKy8qIE5vdGU6IE5vdCBhbGwgZmllbGRzIGFyZSBsaXN0ZWQgYmVjYXVzZSBvZiB2YXJpYWJsZSBsZW5ndGhzLCAgICovCisvKiAgICAgICBzZWUgdGhlIGNvZGUgaW4gcDgwMjExLmMgdG8gc2VlIGhvdyB3ZSBzZWFyY2ggZm9yIGZpZWxkcyAqLworLyogTm90ZTogVGhlc2Ugb2Zmc2V0cyBhcmUgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGZyYW1lIGRhdGEgICAgICAgKi8KKworI2RlZmluZSBXTEFOX0JFQUNPTl9PRkZfVFMJCQkwCisjZGVmaW5lIFdMQU5fQkVBQ09OX09GRl9CQ05fSU5UCQkJOAorI2RlZmluZSBXTEFOX0JFQUNPTl9PRkZfQ0FQSU5GTwkJCTEwCisjZGVmaW5lIFdMQU5fQkVBQ09OX09GRl9TU0lECQkJMTIKKworI2RlZmluZSBXTEFOX0RJU0FTU09DX09GRl9SRUFTT04JCTAKKworI2RlZmluZSBXTEFOX0FTU09DUkVRX09GRl9DQVBfSU5GTwkJMAorI2RlZmluZSBXTEFOX0FTU09DUkVRX09GRl9MSVNURU5fSU5UCQkyCisjZGVmaW5lIFdMQU5fQVNTT0NSRVFfT0ZGX1NTSUQJCQk0CisKKyNkZWZpbmUgV0xBTl9BU1NPQ1JFU1BfT0ZGX0NBUF9JTkZPCQkwCisjZGVmaW5lIFdMQU5fQVNTT0NSRVNQX09GRl9TVEFUVVMJCTIKKyNkZWZpbmUgV0xBTl9BU1NPQ1JFU1BfT0ZGX0FJRAkJCTQKKyNkZWZpbmUgV0xBTl9BU1NPQ1JFU1BfT0ZGX1NVUFBfUkFURVMJCTYKKworI2RlZmluZSBXTEFOX1JFQVNTT0NSRVFfT0ZGX0NBUF9JTkZPCQkwCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFUV9PRkZfTElTVEVOX0lOVAkJMgorI2RlZmluZSBXTEFOX1JFQVNTT0NSRVFfT0ZGX0NVUlJfQVAJCTQKKyNkZWZpbmUgV0xBTl9SRUFTU09DUkVRX09GRl9TU0lECQkxMAorCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFU1BfT0ZGX0NBUF9JTkZPCQkwCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFU1BfT0ZGX1NUQVRVUwkJMgorI2RlZmluZSBXTEFOX1JFQVNTT0NSRVNQX09GRl9BSUQJCTQKKyNkZWZpbmUgV0xBTl9SRUFTU09DUkVTUF9PRkZfU1VQUF9SQVRFUwkJNgorCisjZGVmaW5lIFdMQU5fUFJPQkVSRVFfT0ZGX1NTSUQJCQkwCisKKyNkZWZpbmUgV0xBTl9QUk9CRVJFU1BfT0ZGX1RTCQkJMAorI2RlZmluZSBXTEFOX1BST0JFUkVTUF9PRkZfQkNOX0lOVAkJOAorI2RlZmluZSBXTEFOX1BST0JFUkVTUF9PRkZfQ0FQX0lORk8JCTEwCisjZGVmaW5lIFdMQU5fUFJPQkVSRVNQX09GRl9TU0lECQkJMTIKKworI2RlZmluZSBXTEFOX0FVVEhFTl9PRkZfQVVUSF9BTEcJCTAKKyNkZWZpbmUgV0xBTl9BVVRIRU5fT0ZGX0FVVEhfU0VRCQkyCisjZGVmaW5lIFdMQU5fQVVUSEVOX09GRl9TVEFUVVMJCQk0CisjZGVmaW5lIFdMQU5fQVVUSEVOX09GRl9DSEFMTEVOR0UJCTYKKworI2RlZmluZSBXTEFOX0RFQVVUSEVOX09GRl9SRUFTT04JCTAKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKy8qLS0gQ2FwYWJpbGl0eSBGaWVsZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0VTUyhuKQkJKChuKSAmIEJJVDApCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fSUJTUyhuKQkJKCgobikgJiBCSVQxKSA+PiAxKQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTEFCTEUobikJKCgobikgJiBCSVQyKSA+PiAyKQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTFJFUShuKQkoKChuKSAmIEJJVDMpID4+IDMpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fUFJJVkFDWShuKQkoKChuKSAmIEJJVDQpID4+IDQpCisgIC8qIHA4MDIxMWIgYWRkaXRpb25zICovCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fU0hPUlQobikJCSgoKG4pICYgQklUNSkgPj4gNSkKKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19QQkNDKG4pCQkoKChuKSAmIEJJVDYpID4+IDYpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fQUdJTElUWShuKQkoKChuKSAmIEJJVDcpID4+IDcpCisKKyNkZWZpbmUgV0xBTl9TRVRfTUdNVF9DQVBfSU5GT19FU1MobikJCShuKQorI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX0lCU1MobikJCSgobikgPDwgMSkKKyNkZWZpbmUgV0xBTl9TRVRfTUdNVF9DQVBfSU5GT19DRlBPTExBQkxFKG4pCSgobikgPDwgMikKKyNkZWZpbmUgV0xBTl9TRVRfTUdNVF9DQVBfSU5GT19DRlBPTExSRVEobikJKChuKSA8PCAzKQorI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX1BSSVZBQ1kobikJKChuKSA8PCA0KQorICAvKiBwODAyMTFiIGFkZGl0aW9ucyAqLworI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX1NIT1JUKG4pCQkoKG4pIDw8IDUpCisjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fUEJDQyhuKQkJKChuKSA8PCA2KQorI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX0FHSUxJVFkobikJKChuKSA8PCA3KQorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBUeXBlcyAqLworCisvKi0tIEluZm9ybWF0aW9uIEVsZW1lbnQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcHJvdG90eXBlIHN0cnVjdHVyZSwgYWxsIElFcyBzdGFydCB3aXRoIHRoZXNlIG1lbWJlcnMgKi8KKwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZQoreworCVVJTlQ4CWVpZDsKKwlVSU5UOAlsZW47Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfdDsKKworLyotLSBTZXJ2aWNlIFNldCBJZGVudGl0eSAoU1NJRCkgIC0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfc3NpZAoreworCVVJTlQ4CWVpZDsKKwlVSU5UOAlsZW47CisJVUlOVDgJc3NpZFsxXTsgIC8qIG1heSBiZSB6ZXJvLCBwdHJzIG1heSBvdmVybGFwICovCit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfc3NpZF90OworCisvKi0tIFN1cHBvcnRlZCBSYXRlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9zdXBwX3JhdGVzCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKKwlVSU5UOAlyYXRlc1sxXTsgIC8qIGhhZCBiZXR0ZXIgYmUgYXQgTEVBU1Qgb25lISAqLworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX3N1cHBfcmF0ZXNfdDsKKworLyotLSBGSCBQYXJhbWV0ZXIgU2V0ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfZmhfcGFybXMKK3sKKwlVSU5UOAllaWQ7CisJVUlOVDgJbGVuOworCVVJTlQxNglkd2VsbDsKKwlVSU5UOAlob3BzZXQ7CisJVUlOVDgJaG9wcGF0dGVybjsKKwlVSU5UOAlob3BpbmRleDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9maF9wYXJtc190OworCisvKi0tIERTIFBhcmFtZXRlciBTZXQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9kc19wYXJtcworeworCVVJTlQ4CWVpZDsKKwlVSU5UOAlsZW47CisJVUlOVDgJY3Vycl9jaDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9kc19wYXJtc190OworCisvKi0tIENGIFBhcmFtZXRlciBTZXQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX2NmX3Bhcm1zCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKKwlVSU5UOAljZnBfY250OworCVVJTlQ4CWNmcF9wZXJpb2Q7CisJVUlOVDE2CWNmcF9tYXhkdXI7CisJVUlOVDE2CWNmcF9kdXJyZW1haW5pbmc7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfY2ZfcGFybXNfdDsKKworLyotLSBUSU0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfdGltCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKKwlVSU5UOAlkdGltX2NudDsKKwlVSU5UOAlkdGltX3BlcmlvZDsKKwlVSU5UOAliaXRtYXBfY3RsOworCVVJTlQ4CXZpcnRfYm1bMV07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfdGltX3Q7CisKKy8qLS0gSUJTUyBQYXJhbWV0ZXIgU2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX2lic3NfcGFybXMKK3sKKwlVSU5UOAllaWQ7CisJVUlOVDgJbGVuOworCVVJTlQxNglhdGltX3dpbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9pYnNzX3Bhcm1zX3Q7CisKKy8qLS0gQ2hhbGxlbmdlIFRleHQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX2NoYWxsZW5nZQoreworCVVJTlQ4CWVpZDsKKwlVSU5UOAlsZW47CisJVUlOVDgJY2hhbGxlbmdlWzFdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX2NoYWxsZW5nZV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIEZyYW1lIFR5cGVzICAqLworCisvKiBwcm90b3R5cGUgc3RydWN0dXJlLCBhbGwgbWdtdCBmcmFtZSB0eXBlcyB3aWxsIHN0YXJ0IHdpdGggdGhlc2UgbWVtYmVycyAqLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9tZ210Cit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CS8qIERPRVMgTk9UIGluY2x1ZGUgQ1JDICEhISEqLworCVVJTlQ4CQkJKmJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLworfSB3bGFuX2ZyX21nbXRfdDsKKworLyotLSBCZWFjb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfYmVhY29uCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwlVSU5UNjQJCQkqdHM7CisJVUlOVDE2CQkJKmJjbl9pbnQ7CisJVUlOVDE2CQkJKmNhcF9pbmZvOworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9maF9wYXJtc190CSpmaF9wYXJtczsKKwl3bGFuX2llX2RzX3Bhcm1zX3QJKmRzX3Bhcm1zOworCXdsYW5faWVfY2ZfcGFybXNfdAkqY2ZfcGFybXM7CisJd2xhbl9pZV9pYnNzX3Bhcm1zX3QJKmlic3NfcGFybXM7CisJd2xhbl9pZV90aW1fdAkJKnRpbTsKKworfSB3bGFuX2ZyX2JlYWNvbl90OworCisKKy8qLS0gSUJTUyBBVElNIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2lic3NhdGltCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgqCQkJYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKworCS8qIHRoaXMgZnJhbWUgdHlwZSBoYXMgYSBudWxsIGJvZHkgKi8KKworfSB3bGFuX2ZyX2lic3NhdGltX3Q7CisKKy8qLS0gRGlzYXNzb2NpYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2Rpc2Fzc29jCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwlVSU5UMTYJCQkqcmVhc29uOworCisJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLworCit9IHdsYW5fZnJfZGlzYXNzb2NfdDsKKworLyotLSBBc3NvY2lhdGlvbiBSZXF1ZXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfYXNzb2NyZXEKK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOCoJCQlidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQxNgkJCSpjYXBfaW5mbzsKKwlVSU5UMTYJCQkqbGlzdGVuX2ludDsKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisJd2xhbl9pZV9zc2lkX3QJCSpzc2lkOworCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCit9IHdsYW5fZnJfYXNzb2NyZXFfdDsKKworLyotLSBBc3NvY2lhdGlvbiBSZXNwb25zZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfYXNzb2NyZXNwCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwlVSU5UMTYJCQkqY2FwX2luZm87CisJVUlOVDE2CQkJKnN0YXR1czsKKwlVSU5UMTYJCQkqYWlkOworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX3N1cHBfcmF0ZXNfdAkqc3VwcF9yYXRlczsKKworfSB3bGFuX2ZyX2Fzc29jcmVzcF90OworCisvKi0tIFJlYXNzb2NpYXRpb24gUmVxdWVzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9yZWFzc29jcmVxCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwlVSU5UMTYJCQkqY2FwX2luZm87CisJVUlOVDE2CQkJKmxpc3Rlbl9pbnQ7CisJVUlOVDgJCQkqY3Vycl9hcDsKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisJd2xhbl9pZV9zc2lkX3QJCSpzc2lkOworCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCit9IHdsYW5fZnJfcmVhc3NvY3JlcV90OworCisvKi0tIFJlYXNzb2NpYXRpb24gUmVzcG9uc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9yZWFzc29jcmVzcAoreworCVVJTlQxNgkJCXR5cGU7CisJVUlOVDE2CQkJbGVuOworCVVJTlQ4CQkJKmJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJVUlOVDE2CQkJKmNhcF9pbmZvOworCVVJTlQxNgkJCSpzdGF0dXM7CisJVUlOVDE2CQkJKmFpZDsKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisJd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisKK30gd2xhbl9mcl9yZWFzc29jcmVzcF90OworCisvKi0tIFByb2JlIFJlcXVlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9wcm9iZXJlcQoreworCVVJTlQxNgkJCXR5cGU7CisJVUlOVDE2CQkJbGVuOworCVVJTlQ4CQkJKmJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLworCXdsYW5faWVfc3NpZF90CQkqc3NpZDsKKwl3bGFuX2llX3N1cHBfcmF0ZXNfdAkqc3VwcF9yYXRlczsKKworfSB3bGFuX2ZyX3Byb2JlcmVxX3Q7CisKKy8qLS0gUHJvYmUgUmVzcG9uc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3Byb2JlcmVzcAoreworCVVJTlQxNgkJCXR5cGU7CisJVUlOVDE2CQkJbGVuOworCVVJTlQ4CQkJKmJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJVUlOVDY0CQkJKnRzOworCVVJTlQxNgkJCSpiY25faW50OworCVVJTlQxNgkJCSpjYXBfaW5mbzsKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisJd2xhbl9pZV9zc2lkX3QJCSpzc2lkOworCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCXdsYW5faWVfZmhfcGFybXNfdAkqZmhfcGFybXM7CisJd2xhbl9pZV9kc19wYXJtc190CSpkc19wYXJtczsKKwl3bGFuX2llX2NmX3Bhcm1zX3QJKmNmX3Bhcm1zOworCXdsYW5faWVfaWJzc19wYXJtc190CSppYnNzX3Bhcm1zOworfSB3bGFuX2ZyX3Byb2JlcmVzcF90OworCisvKi0tIEF1dGhlbnRpY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9hdXRoZW4KK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOAkJCSpidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQxNgkJCSphdXRoX2FsZzsKKwlVSU5UMTYJCQkqYXV0aF9zZXE7CisJVUlOVDE2CQkJKnN0YXR1czsKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisJd2xhbl9pZV9jaGFsbGVuZ2VfdAkqY2hhbGxlbmdlOworCit9IHdsYW5fZnJfYXV0aGVuX3Q7CisKKy8qLS0gRGVhdXRoZW5pY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfZGVhdXRoZW4KK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOAkJCSpidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQxNgkJCSpyZWFzb247CisKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisKK30gd2xhbl9mcl9kZWF1dGhlbl90OworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYmVhY29uKCB3bGFuX2ZyX2JlYWNvbl90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2JlYWNvbiggd2xhbl9mcl9iZWFjb25fdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9kaXNhc3NvYyggd2xhbl9mcl9kaXNhc3NvY190ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Rpc2Fzc29jKCB3bGFuX2ZyX2Rpc2Fzc29jX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXEoIHdsYW5fZnJfYXNzb2NyZXFfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9hc3NvY3JlcSggd2xhbl9mcl9hc3NvY3JlcV90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX2Fzc29jcmVzcCggd2xhbl9mcl9hc3NvY3Jlc3BfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9hc3NvY3Jlc3AoIHdsYW5fZnJfYXNzb2NyZXNwX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfcmVhc3NvY3JlcSggd2xhbl9mcl9yZWFzc29jcmVxX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfcmVhc3NvY3JlcSggd2xhbl9mcl9yZWFzc29jcmVxX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfcmVhc3NvY3Jlc3AoIHdsYW5fZnJfcmVhc3NvY3Jlc3BfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9yZWFzc29jcmVzcCggd2xhbl9mcl9yZWFzc29jcmVzcF90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVxKCB3bGFuX2ZyX3Byb2JlcmVxX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfcHJvYmVyZXEoIHdsYW5fZnJfcHJvYmVyZXFfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9wcm9iZXJlc3AoIHdsYW5fZnJfcHJvYmVyZXNwX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfcHJvYmVyZXNwKCB3bGFuX2ZyX3Byb2JlcmVzcF90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX2F1dGhlbiggd2xhbl9mcl9hdXRoZW5fdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9hdXRoZW4oIHdsYW5fZnJfYXV0aGVuX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfZGVhdXRoZW4oIHdsYW5fZnJfZGVhdXRoZW5fdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9kZWF1dGhlbiggd2xhbl9mcl9kZWF1dGhlbl90ICAqZiApOworCisKKyNlbmRpZiAvKiBfUDgwMjExTUdNVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtb2QuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1vZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYzNmNjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtb2QuYwpAQCAtMCwwICsxLDIxNiBAQAorLyogc3JjL3A4MDIxMS9wODAyMTFtb2QuYworKgorKiBNb2R1bGUgZW50cnkgYW5kIGV4aXQgZm9yIHA4MDIxMQorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHA4MDIxMS5vIGVudHJ5IGFuZCBleGl0IHBvaW50cyBkZWZpbmVkIGZvciBsaW51eAorKiBrZXJuZWwgbW9kdWxlcy4KKyoKKyogTm90ZXM6CisqIC0gYWxsIG1vZHVsZSBwYXJhbWV0ZXJzIGZvciAgcDgwMjExLm8gc2hvdWxkIGJlIGRlZmluZWQgaGVyZS4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDQsMjUpKQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbXNnLmgiCisjaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCisjaW5jbHVkZSAicDgwMjExcmVxLmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBDb25zdGFudHMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgTWFjcm9zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFR5cGVzICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworCitzdGF0aWMgY2hhciAqdmVyc2lvbiA9ICJwODAyMTEubzogIiBXTEFOX1JFTEVBU0U7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIC0tTW9kdWxlIFBhcmFtZXRlcnMgKi8KKworaW50IHdsYW5fd2F0Y2hkb2cgPSA1MDAwOworbW9kdWxlX3BhcmFtKHdsYW5fd2F0Y2hkb2csIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHdsYW5fd2F0Y2hkb2csICJ0cmFuc21pdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyIpOworCitpbnQgd2xhbl93ZXh0X3dyaXRlID0gMDsKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorbW9kdWxlX3BhcmFtKHdsYW5fd2V4dF93cml0ZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mod2xhbl93ZXh0X3dyaXRlLCAiZW5hYmxlIHdyaXRlIHdpcmVsZXNzIGV4dGVuc2lvbnMiKTsKKyNlbmRpZgorCisjaWZkZWYgV0xBTl9JTkNMVURFX0RFQlVHCitpbnQgd2xhbl9kZWJ1Zz0wOworbW9kdWxlX3BhcmFtKHdsYW5fZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHdsYW5fZGVidWcsICJwODAyMTEgZGVidWcgbGV2ZWwiKTsKKyNlbmRpZgorCitNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworaW50CWluaXRfbW9kdWxlKHZvaWQpOwordm9pZAljbGVhbnVwX21vZHVsZSh2b2lkKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBpbml0X21vZHVsZQorKgorKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgY2FsbGVkIG9uY2UgYXQgbW9kdWxlIGxvYWQgdGltZS4KKyoKKyogQXJndW1lbnRzOgorKglub25lCisqCisqIFJldHVybnM6CisqCTAJLSBzdWNjZXNzCisqCX4wCS0gZmFpbHVyZSwgbW9kdWxlIGlzIHVubG9hZGVkLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCVRPRE86IGRlZmluZQorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkIChpbnNtb2Qgb3IgbW9kcHJvYmUpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBpbml0X21vZHVsZSh2b2lkKQoreworICAgICAgICBEQkZFTlRFUjsKKworI2lmIDAKKyAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICIlcyAoJXMpIExvYWRlZFxuIiwgdmVyc2lvbiwgV0xBTl9CVUlMRF9EQVRFKTsKKyNlbmRpZgorCisJcDgwMjExbmV0ZGV2X3N0YXJ0dXAoKTsKKyNpZmRlZiBDT05GSUdfSE9UUExVRworCXA4MDIxMV9ydW5fc2Jpbl9ob3RwbHVnKE5VTEwsIFdMQU5fSE9UUExVR19TVEFSVFVQKTsKKyNlbmRpZgorCisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBjbGVhbnVwX21vZHVsZQorKgorKiBDYWxsZWQgYXQgbW9kdWxlIHVubG9hZCB0aW1lLiAgVGhpcyBpcyBvdXIgbGFzdCBjaGFuY2UgdG8KKyogY2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzLgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCVRPRE86IGRlZmluZQorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKyAgICAgICAgREJGRU5URVI7CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworCXA4MDIxMV9ydW5fc2Jpbl9ob3RwbHVnKE5VTEwsIFdMQU5fSE9UUExVR19TSFVURE9XTik7CisjZW5kaWYKKwlwODAyMTFuZXRkZXZfc2h1dGRvd24oKTsKKyAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICIlcyBVbmxvYWRlZFxuIiwgdmVyc2lvbik7CisKKyAgICAgICAgREJGRVhJVDsKKyAgICAgICAgcmV0dXJuOworfQorCitFWFBPUlRfU1lNQk9MKHA4MDIxMW5ldGRldl9od3JlbW92ZWQpOworRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl93bGFuZGV2KTsKK0VYUE9SVF9TWU1CT0wocDgwMjExbmV0ZGV2X3J4KTsKK0VYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl93bGFuZGV2KTsKK0VYUE9SVF9TWU1CT0wod2xhbl9zZXR1cCk7CitFWFBPUlRfU1lNQk9MKHdsYW5fdW5zZXR1cCk7CitFWFBPUlRfU1lNQk9MKHA4MDIxMV9zdXNwZW5kKTsKK0VYUE9SVF9TWU1CT0wocDgwMjExX3Jlc3VtZSk7CisKK0VYUE9SVF9TWU1CT0wocDgwMjExc2tiX2ZyZWUpOworRVhQT1JUX1NZTUJPTChwODAyMTFza2JfcnhtZXRhX2F0dGFjaCk7CisKK0VYUE9SVF9TWU1CT0wocDgwMjExd2V4dF9ldmVudF9hc3NvY2lhdGVkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE0ZTlmYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oCkBAIC0wLDAgKzEsMTAyIEBACisvKiBwODAyMTFtc2cuaAorKgorKiBNYWNyb3MsIGNvbnN0YW50cywgdHlwZXMsIGFuZCBmdW5jcyBmb3IgcmVxIGFuZCBpbmQgbWVzc2FnZXMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMU1TR19ICisjZGVmaW5lIF9QODAyMTFNU0dfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworI2RlZmluZSBNU0dfQlVGRl9MRU4JCTQwMDAKKyNkZWZpbmUgV0xBTl9ERVZOQU1FTEVOX01BWAkxNgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBUeXBlcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0gTWVzc2FnZSBTdHJ1Y3R1cmUgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByb3RvdHlwZSBtc2cgdHlwZSAqLworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2cKK3sKKwlVSU5UMzIJbXNnY29kZTsKKwlVSU5UMzIJbXNnbGVuOworCVVJTlQ4CWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ190OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dkCit7CisJVUlOVDMyCW1zZ2NvZGU7CisJVUlOVDMyCW1zZ2xlbjsKKwlVSU5UOAlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCVVJTlQ4CWFyZ3NbMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ2RfdDsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKyNlbmRpZiAgLyogX1A4MDIxMU1TR19IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmODRhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCkBAIC0wLDAgKzEsMTUwMiBAQAorLyogc3JjL3A4MDIxMS9wODAyMTFrbmV0ZGV2LmMKKyoKKyogTGludXggS2VybmVsIG5ldCBkZXZpY2UgaW50ZXJmYWNlCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoZSBmdW5jdGlvbnMgcmVxdWlyZWQgZm9yIGEgTGludXggbmV0d29yayBkZXZpY2UgYXJlIGRlZmluZWQgaGVyZS4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2lmZGVmIFNJT0NFVEhUT09MCisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2VuZGlmCisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbWdtdC5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMWlvY3RsLmgiCisjaW5jbHVkZSAicDgwMjExcmVxLmgiCisjaW5jbHVkZSAicDgwMjExbWV0YXN0cnVjdC5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgTWFjcm9zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFR5cGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBTdGF0aWMgRGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBfX05PX1ZFUlNJT05fXwkJLyogcHJldmVudCB0aGUgc3RhdGljIGRlZmluaXRpb24gKi8KKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jX3A4MDIxMTsKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKy8qIFN1cHBvcnQgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZCBwODAyMTFuZXRkZXZfcnhfYmgodW5zaWduZWQgbG9uZyBhcmcpOworCisvKiBuZXRkZXZpY2UgbWV0aG9kIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2luaXQoIG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiBwODAyMTFrbmV0ZGV2X2dldF9zdGF0cyhuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9vcGVuKCBuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9zdG9wKCBuZXRkZXZpY2VfdCAqbmV0ZGV2ICk7CitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKK3N0YXRpYyB2b2lkIHA4MDIxMWtuZXRkZXZfc2V0X211bHRpY2FzdF9saXN0KG5ldGRldmljZV90ICpkZXYpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2RvX2lvY3RsKG5ldGRldmljZV90ICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9zZXRfbWFjX2FkZHJlc3MobmV0ZGV2aWNlX3QgKmRldiwgdm9pZCAqYWRkcik7CitzdGF0aWMgdm9pZCBwODAyMTFrbmV0ZGV2X3R4X3RpbWVvdXQobmV0ZGV2aWNlX3QgKm5ldGRldik7CitzdGF0aWMgaW50IHA4MDIxMV9yeF90eXBlZHJvcCggd2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UMTYgZmMpOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBpbnQKK3A4MDIxMW5ldGRldl9wcm9jX3JlYWQoCisJY2hhcgkqcGFnZSwKKwljaGFyCSoqc3RhcnQsCisJb2ZmX3QJb2Zmc2V0LAorCWludAljb3VudCwKKwlpbnQJKmVvZiwKKwl2b2lkCSpkYXRhKTsKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfc3RhcnR1cAorKgorKiBJbml0aWFsaXplIHRoZSB3bGFuZGV2aWNlL25ldGRldmljZSBwYXJ0IG9mIDgwMi4xMSBzZXJ2aWNlcyBhdAorKiBsb2FkIHRpbWUuCisqCisqIEFyZ3VtZW50czoKKyoJbm9uZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcDgwMjExbmV0ZGV2X3N0YXJ0dXAodm9pZCkKK3sKKwlEQkZFTlRFUjsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaWYgKGluaXRfbmV0LnByb2NfbmV0ICE9IE5VTEwpIHsKKwkJcHJvY19wODAyMTEgPSBjcmVhdGVfcHJvY19lbnRyeSgKKwkJCQkicDgwMjExIiwKKwkJCQkoU19JRkRJUnxTX0lSVUdPfFNfSVhVR08pLAorCQkJCWluaXRfbmV0LnByb2NfbmV0KTsKKwl9CisjZW5kaWYKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfc2h1dGRvd24KKyoKKyogU2h1dGRvd24gdGhlIHdsYW5kZXZpY2UvbmV0ZGV2aWNlIHBhcnQgb2YgODAyLjExIHNlcnZpY2VzIGF0CisqIHVubG9hZCB0aW1lLgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitwODAyMTFuZXRkZXZfc2h1dGRvd24odm9pZCkKK3sKKwlEQkZFTlRFUjsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWlmIChwcm9jX3A4MDIxMSAhPSBOVUxMKSB7CisJCXJlbW92ZV9wcm9jX2VudHJ5KCJwODAyMTEiLCBpbml0X25ldC5wcm9jX25ldCk7CisJfQorI2VuZGlmCisJREJGRVhJVDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfaW5pdAorKgorKiBJbml0IG1ldGhvZCBmb3IgYSBMaW51eCBuZXRkZXZpY2UuICBDYWxsZWQgaW4gcmVzcG9uc2UgdG8KKyogcmVnaXN0ZXJfbmV0ZGV2LgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaW5pdCggbmV0ZGV2aWNlX3QgKm5ldGRldikKK3sKKwlEQkZFTlRFUjsKKwkvKiBDYWxsZWQgaW4gcmVzcG9uc2UgdG8gcmVnaXN0ZXJfbmV0ZGV2ICovCisJLyogVGhpcyBpcyB1c3VhbGx5IHRoZSBwcm9iZSBmdW5jdGlvbiwgYnV0IHRoZSBwcm9iZSBoYXMgKi8KKwkvKiBhbHJlYWR5IGJlZW4gZG9uZSBieSB0aGUgTVNEIGFuZCB0aGUgY3JlYXRlX2tkZXYgKi8KKwkvKiBmdW5jdGlvbi4gIEFsbCB3ZSBkbyBoZXJlIGlzIHJldHVybiBzdWNjZXNzICovCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9nZXRfc3RhdHMKKyoKKyogU3RhdGlzdGljcyByZXRyaWV2YWwgZm9yIGxpbnV4IG5ldGRldmljZXMuICBIZXJlIHdlJ3JlIHJlcG9ydGluZworKiB0aGUgTGludXggaS9mIGxldmVsIHN0YXRpc3RpY3MuICBIZW5jZSwgZm9yIHRoZSBwcmltYXJ5IG51bWJlcnMsCisqIHdlIGRvbid0IHdhbnQgdG8gcmVwb3J0IHRoZSBudW1iZXJzIGZyb20gdGhlIE1JQi4gIEV2ZW50dWFsbHksCisqIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBjb2xsZWN0IHNvbWUgb2YgdGhlIGVycm9yIGNvdW50ZXJzIHRob3VnaC4KKyoKKyogQXJndW1lbnRzOgorKgluZXRkZXYJCUxpbnV4IG5ldGRldmljZQorKgorKiBSZXR1cm5zOgorKgl0aGUgYWRkcmVzcyBvZiB0aGUgc3RhdGlzdGljcyBzdHJ1Y3R1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKgorcDgwMjExa25ldGRldl9nZXRfc3RhdHMobmV0ZGV2aWNlX3QgKm5ldGRldikKK3sKKwl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSAod2xhbmRldmljZV90KiluZXRkZXYtPnByaXY7CisJREJGRU5URVI7CisKKwkvKiBUT0RPOiByZXZpZXcgdGhlIE1JQiBzdGF0cyBmb3IgaXRlbXMgdGhhdCBjb3JyZXNwb25kIHRvCisJCWxpbnV4IHN0YXRzICovCisKKwlEQkZFWElUOworCXJldHVybiAmKHdsYW5kZXYtPmxpbnV4X3N0YXRzKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9vcGVuCisqCisqIExpbnV4IG5ldGRldmljZSBvcGVuIG1ldGhvZC4gIEZvbGxvd2luZyBhIHN1Y2Nlc3NmdWwgY2FsbCBoZXJlLAorKiB0aGUgZGV2aWNlIGlzIHN1cHBvc2VkIHRvIGJlIHJlYWR5IGZvciB0eCBhbmQgcnguICBJbiBvdXIKKyogc2l0dWF0aW9uIHRoYXQgbWF5IG5vdCBiZSBlbnRpcmVseSB0cnVlIGR1ZSB0byB0aGUgc3RhdGUgb2YgdGhlCisqIE1BQyBiZWxvdy4KKyoKKyogQXJndW1lbnRzOgorKgluZXRkZXYJCUxpbnV4IG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfb3BlbiggbmV0ZGV2aWNlX3QgKm5ldGRldiApCit7CisJaW50IAkJcmVzdWx0ID0gMDsgLyogc3VjY2VzcyAqLworCXdsYW5kZXZpY2VfdAkqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKShuZXRkZXYtPnByaXYpOworCisJREJGRU5URVI7CisKKwkvKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIE1TRCBpcyBydW5uaW5nICovCisJaWYgKCB3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9SVU5OSU5HICkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBUZWxsIHRoZSBNU0QgdG8gb3BlbiAqLworCWlmICggd2xhbmRldi0+b3BlbiAhPSBOVUxMKSB7CisJCXJlc3VsdCA9IHdsYW5kZXYtPm9wZW4od2xhbmRldik7CisJCWlmICggcmVzdWx0ID09IDAgKSB7CisjaWYgKCBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDMsNDMpICkKKwkJCW5ldGRldi0+aW50ZXJydXB0ID0gMDsKKyNlbmRpZgorCQkJcDgwMjExbmV0ZGV2X3N0YXJ0X3F1ZXVlKHdsYW5kZXYpOworCQkJd2xhbmRldi0+c3RhdGUgPSBXTEFOX0RFVklDRV9PUEVOOworCQl9CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gLUVBR0FJTjsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfc3RvcAorKgorKiBMaW51eCBuZXRkZXZpY2Ugc3RvcCAoY2xvc2UpIG1ldGhvZC4gIEZvbGxvd2luZyB0aGlzIGNhbGwsCisqIG5vIGZyYW1lcyBzaG91bGQgZ28gdXAgb3IgZG93biB0aHJvdWdoIHRoaXMgaW50ZXJmYWNlLgorKgorKiBBcmd1bWVudHM6CisqCW5ldGRldgkJTGludXggbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9zdG9wKCBuZXRkZXZpY2VfdCAqbmV0ZGV2ICkKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJd2xhbmRldmljZV90CSp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopKG5ldGRldi0+cHJpdik7CisKKwlEQkZFTlRFUjsKKworCWlmICggd2xhbmRldi0+Y2xvc2UgIT0gTlVMTCApIHsKKwkJcmVzdWx0ID0gd2xhbmRldi0+Y2xvc2Uod2xhbmRldik7CisJfQorCisJcDgwMjExbmV0ZGV2X3N0b3BfcXVldWUod2xhbmRldik7CisJd2xhbmRldi0+c3RhdGUgPSBXTEFOX0RFVklDRV9DTE9TRUQ7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFuZXRkZXZfcngKKyoKKyogRnJhbWUgcmVjZWl2ZSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIG1hYyBzcGVjaWZpYyBkcml2ZXIuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJV0xBTiBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKKyoJc2tiCQlza2J1ZmYgY29udGFpbmluZyBhIGZ1bGwgODAyLjExIGZyYW1lLgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqIFNpZGUgZWZmZWN0czoKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAorcDgwMjExbmV0ZGV2X3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiApCit7CisJREJGRU5URVI7CisKKwkvKiBFbnF1ZXVlIGZvciBwb3N0LWlycSBwcm9jZXNzaW5nICovCisJc2tiX3F1ZXVlX3RhaWwoJndsYW5kZXYtPm5zZF9yeHEsIHNrYik7CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZ3bGFuZGV2LT5yeF9iaCk7CisKKyAgICAgICAgREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFuZXRkZXZfcnhfYmgKKyoKKyogRGVmZXJyZWQgcHJvY2Vzc2luZyBvZiBhbGwgcmVjZWl2ZWQgZnJhbWVzLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCVdMQU4gbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCisqCXNrYgkJc2tidWZmIGNvbnRhaW5pbmcgYSBmdWxsIDgwMi4xMSBmcmFtZS4KKyogUmV0dXJuczoKKyoJbm90aGluZworKiBTaWRlIGVmZmVjdHM6CisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHA4MDIxMW5ldGRldl9yeF9iaCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90ICopIGFyZzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwluZXRkZXZpY2VfdCAgICAgKmRldiA9IHdsYW5kZXYtPm5ldGRldjsKKwlwODAyMTFfaGRyX2EzX3QgKmhkcjsKKwlVSU5UMTYgZmM7CisKKyAgICAgICAgREJGRU5URVI7CisKKwkvKiBMZXQncyBlbXB0eSBvdXIgb3VyIHF1ZXVlICovCisJd2hpbGUgKCAoc2tiID0gc2tiX2RlcXVldWUoJndsYW5kZXYtPm5zZF9yeHEpKSApIHsKKwkJaWYgKHdsYW5kZXYtPnN0YXRlID09IFdMQU5fREVWSUNFX09QRU4pIHsKKworCQkJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIpIHsKKwkJCQkvKiBSQVcgZnJhbWU7IHdlIHNob3VsZG4ndCBjb252ZXJ0IGl0ICovCisJCQkJLy8gWFhYIEFwcGVuZCB0aGUgUHJpc20gSGVhZGVyIGhlcmUgaW5zdGVhZC4KKworCQkJCS8qIHNldCB1cCB2YXJpb3VzIGRhdGEgZmllbGRzICovCisJCQkJc2tiLT5kZXYgPSBkZXY7CisJCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CisJCQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMjExX1JBVyk7CisJCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCQkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQl3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCQluZXRpZl9yeF9uaShza2IpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQloZHIgPSAocDgwMjExX2hkcl9hM190ICopc2tiLT5kYXRhOworCQkJCWZjID0gaWVlZTJob3N0MTYoaGRyLT5mYyk7CisJCQkJaWYgKHA4MDIxMV9yeF90eXBlZHJvcCh3bGFuZGV2LCBmYykpIHsKKwkJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQkvKiBwZXJmb3JtIG1jYXN0IGZpbHRlcmluZyAqLworCQkJCWlmICh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCQkJCS8qIGFsbG93IG15IGxvY2FsIGFkZHJlc3MgdGhyb3VnaCAqLworCQkJCQlpZiAobWVtY21wKGhkci0+YTEsIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsIFdMQU5fQUREUl9MRU4pICE9IDApIHsKKwkJCQkJCS8qIGJ1dCByZWplY3QgYW55dGhpbmcgZWxzZSB0aGF0IGlzbid0IG11bHRpY2FzdCAqLworCQkJCQkJaWYgKCEoaGRyLT5hMVswXSAmIDB4MDEpKSB7CisJCQkJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKCBza2JfcDgwMjExX3RvX2V0aGVyKHdsYW5kZXYsIHdsYW5kZXYtPmV0aGNvbnYsIHNrYikgPT0gMCApIHsKKwkJCQkJc2tiLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQkJCQl3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9wYWNrZXRzKys7CisJCQkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJCQluZXRpZl9yeF9uaShza2IpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJV0xBTl9MT0dfREVCVUcoMSwgInA4MDIxMV90b19ldGhlciBmYWlsZWQuXG4iKTsKKwkJCX0KKwkJfQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJfQorCisgICAgICAgIERCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0CisqCisqIExpbnV4IG5ldGRldmljZSBtZXRob2QgZm9yIHRyYW5zbWl0dGluZyBhIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCXNrYglMaW51eCBza19idWZmIGNvbnRhaW5pbmcgdGhlIGZyYW1lLgorKgluZXRkZXYJTGludXggbmV0ZGV2aWNlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCUlmIHRoZSBsb3dlciBsYXllcnMgcmVwb3J0IHRoYXQgYnVmZmVycyBhcmUgZnVsbC4gbmV0ZGV2LT50YnVzeQorKgl3aWxsIGJlIHNldCB0byBwcmV2ZW50IGhpZ2hlciBsYXllcnMgZnJvbSBzZW5kaW5nIG1vcmUgdHJhZmZpYy4KKyoKKyoJTm90ZTogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG5vbi16ZXJvLCBoaWdoZXIgbGF5ZXJzIHJldGFpbgorKgkgICAgICBvd25lcnNoaXAgb2YgdGhlIHNrYi4KKyoKKyogUmV0dXJuczoKKyoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZpY2VfdCAqbmV0ZGV2KQoreworCWludAkJcmVzdWx0ID0gMDsKKwlpbnQJCXR4cmVzdWx0ID0gLTE7CisJd2xhbmRldmljZV90CSp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopbmV0ZGV2LT5wcml2OworCXA4MDIxMV9oZHJfdCAgICBwODAyMTFfaGRyOworCXA4MDIxMV9tZXRhd2VwX3QgcDgwMjExX3dlcDsKKworCURCRkVOVEVSOworCisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCXJldHVybiAwOworCX0KKworICAgICAgICBpZiAod2xhbmRldi0+c3RhdGUgIT0gV0xBTl9ERVZJQ0VfT1BFTikgeworCQlyZXN1bHQgPSAxOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwltZW1zZXQoJnA4MDIxMV9oZHIsIDAsIHNpemVvZihwODAyMTFfaGRyX3QpKTsKKwltZW1zZXQoJnA4MDIxMV93ZXAsIDAsIHNpemVvZihwODAyMTFfbWV0YXdlcF90KSk7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwzLDM4KSApCisJaWYgKCB0ZXN0X2FuZF9zZXRfYml0KDAsICh2b2lkKikmKG5ldGRldi0+dGJ1c3kpKSAhPSAwICkgeworCQkvKiBXZSd2ZSBiZWVuIGNhbGxlZCB3LyB0YnVzeSBzZXQsIGhhcyB0aGUgdHggKi8KKwkJLyogcGF0aCBzdGFsbGVkPyAgICovCisJCVdMQU5fTE9HX0RFQlVHKDEsICJjYWxsZWQgd2hlbiB0YnVzeSBzZXRcbiIpOworCQlyZXN1bHQgPSAxOworCQlnb3RvIGZhaWxlZDsKKwl9CisjZWxzZQorCWlmICggbmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpICkgeworCQlXTEFOX0xPR19ERUJVRygxLCAiY2FsbGVkIHdoZW4gcXVldWUgc3RvcHBlZC5cbiIpOworCQlyZXN1bHQgPSAxOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkvKiBObyB0aW1lb3V0IGhhbmRsaW5nIGhlcmUsIDIuMy4zOCsga2VybmVscyBjYWxsIHRoZQorCSAqIHRpbWVvdXQgZnVuY3Rpb24gZGlyZWN0bHkuCisJICogVE9ETzogQWRkIHRpbWVvdXQgaGFuZGxpbmcuCisJKi8KKyNlbmRpZgorCisJLyogQ2hlY2sgdG8gc2VlIHRoYXQgYSB2YWxpZCBtb2RlIGlzIHNldCAqLworCXN3aXRjaCggd2xhbmRldi0+bWFjbW9kZSApIHsKKwljYXNlIFdMQU5fTUFDTU9ERV9JQlNTX1NUQToKKwljYXNlIFdMQU5fTUFDTU9ERV9FU1NfU1RBOgorCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19BUDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTW9kZSBpc24ndCBzZXQgeWV0LCBqdXN0IGRyb3AgdGhlIGZyYW1lCisJCSAqIGFuZCByZXR1cm4gc3VjY2VzcyAuCisJCSAqIFRPRE86IHdlIG5lZWQgYSBzYW5lciB3YXkgdG8gaGFuZGxlIHRoaXMKKwkJICovCisJCWlmKHNrYi0+cHJvdG9jb2wgIT0gRVRIX1BfODAyMTFfUkFXKSB7CisJCQlwODAyMTFuZXRkZXZfc3RhcnRfcXVldWUod2xhbmRldik7CisJCQlXTEFOX0xPR19OT1RJQ0UoCisJCQkJIlR4IGF0dGVtcHQgcHJpb3IgdG8gYXNzb2NpYXRpb24sIGZyYW1lIGRyb3BwZWQuXG4iKTsKKwkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCXJlc3VsdCA9IDA7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCQlicmVhazsKKwl9CisKKwkvKiBDaGVjayBmb3IgcmF3IHRyYW5zbWl0cyAqLworCWlmKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfODAyMTFfUkFXKSB7CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgeworCQkJcmVzdWx0ID0gMTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCS8qIG1vdmUgdGhlIGhlYWRlciBvdmVyICovCisJCW1lbWNweSgmcDgwMjExX2hkciwgc2tiLT5kYXRhLCBzaXplb2YocDgwMjExX2hkcl90KSk7CisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOworCX0gZWxzZSB7CisJCWlmICggc2tiX2V0aGVyX3RvX3A4MDIxMSh3bGFuZGV2LCB3bGFuZGV2LT5ldGhjb252LCBza2IsICZwODAyMTFfaGRyLCAmcDgwMjExX3dlcCkgIT0gMCApIHsKKwkJCS8qIGNvbnZlcnQgZmFpbGVkICovCisJCQlXTEFOX0xPR19ERUJVRygxLCAiZXRoZXJfdG9fODAyMTEoJWQpIGZhaWxlZC5cbiIsCisJCQkJCXdsYW5kZXYtPmV0aGNvbnYpOworCQkJcmVzdWx0ID0gMTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJfQorCWlmICggd2xhbmRldi0+dHhmcmFtZSA9PSBOVUxMICkgeworCQlyZXN1bHQgPSAxOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X3BhY2tldHMrKzsKKwkvKiBjb3VudCBvbmx5IHRoZSBwYWNrZXQgcGF5bG9hZCAqLworCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCisJdHhyZXN1bHQgPSB3bGFuZGV2LT50eGZyYW1lKHdsYW5kZXYsIHNrYiwgJnA4MDIxMV9oZHIsICZwODAyMTFfd2VwKTsKKworCWlmICggdHhyZXN1bHQgPT0gMCkgeworCQkvKiBzdWNjZXNzIGFuZCBtb3JlIGJ1ZiAqLworCQkvKiBhdmFpbCwgcmU6IGh3X3R4ZGF0YSAqLworCQlwODAyMTFuZXRkZXZfd2FrZV9xdWV1ZSh3bGFuZGV2KTsKKwkJcmVzdWx0ID0gMDsKKwl9IGVsc2UgaWYgKCB0eHJlc3VsdCA9PSAxICkgeworCQkvKiBzdWNjZXNzLCBubyBtb3JlIGF2YWlsICovCisJCVdMQU5fTE9HX0RFQlVHKDMsICJ0eGZyYW1lIHN1Y2Nlc3MsIG5vIG1vcmUgYnVmc1xuIik7CisJCS8qIG5ldGRldi0+dGJ1c3kgPSAxOyAgZG9uJ3Qgc2V0IGhlcmUsIGlycWhkbHIgKi8KKwkJLyogICBtYXkgaGF2ZSBhbHJlYWR5IGNsZWFyZWQgaXQgKi8KKwkJcmVzdWx0ID0gMDsKKwl9IGVsc2UgaWYgKCB0eHJlc3VsdCA9PSAyICkgeworCQkvKiBhbGxvYyBmYWlsdXJlLCBkcm9wIGZyYW1lICovCisJCVdMQU5fTE9HX0RFQlVHKDMsICJ0eGZyYW1lIHJldHVybmVkIGFsbG9jX2ZhaWxcbiIpOworCQlyZXN1bHQgPSAxOworCX0gZWxzZSB7CisJCS8qIGJ1ZmZlciBmdWxsIG9yIHF1ZXVlIGJ1c3ksIGRyb3AgZnJhbWUuICovCisJCVdMQU5fTE9HX0RFQlVHKDMsICJ0eGZyYW1lIHJldHVybmVkIGZ1bGwgb3IgYnVzeVxuIik7CisJCXJlc3VsdCA9IDE7CisJfQorCisgZmFpbGVkOgorCS8qIEZyZWUgdXAgdGhlIFdFUCBidWZmZXIgaWYgaXQncyBub3QgdGhlIHNhbWUgYXMgdGhlIHNrYiAqLworCWlmICgocDgwMjExX3dlcC5kYXRhKSAmJiAocDgwMjExX3dlcC5kYXRhICE9IHNrYi0+ZGF0YSkpCisJCWtmcmVlKHA4MDIxMV93ZXAuZGF0YSk7CisKKwkvKiB3ZSBhbHdheXMgZnJlZSB0aGUgc2tiIGhlcmUsIG5ldmVyIGluIGEgbG93ZXIgbGV2ZWwuICovCisJaWYgKCFyZXN1bHQpCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QKKyoKKyogQ2FsbGVkIGZyb20gaGlnaGVyIGxhdmVycyB3aGVuZXZlciB0aGVyZSdzIGEgbmVlZCB0byBzZXQvY2xlYXIKKyogcHJvbWlzY3VvdXMgbW9kZSBvciByZXdyaXRlIHRoZSBtdWx0aWNhc3QgbGlzdC4KKyoKKyogQXJndW1lbnRzOgorKglub25lCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcDgwMjExa25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QobmV0ZGV2aWNlX3QgKmRldikKK3sKKwl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisKKwlEQkZFTlRFUjsKKworCS8qIFRPRE86ICByZWFsIG11bHRpY2FzdCBzdXBwb3J0IGFzIHdlbGwgKi8KKworCWlmICh3bGFuZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QpCisJCXdsYW5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCh3bGFuZGV2LCBkZXYpOworCisJREJGRVhJVDsKK30KKworI2lmZGVmIFNJT0NFVEhUT09MCisKK3N0YXRpYyBpbnQgcDgwMjExbmV0ZGV2X2V0aHRvb2wod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCit7CisJVUlOVDMyIGV0aGNtZDsKKwlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIGluZm87CisJc3RydWN0IGV0aHRvb2xfdmFsdWUgZWRhdGE7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJbWVtc2V0KCZlZGF0YSwgMCwgc2l6ZW9mKGVkYXRhKSk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmV0aGNtZCwgdXNlcmFkZHIsIHNpemVvZihldGhjbWQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzd2l0Y2ggKGV0aGNtZCkgeworCWNhc2UgRVRIVE9PTF9HRFJWSU5GTzoKKwkJaW5mby5jbWQgPSBldGhjbWQ7CisJCXNucHJpbnRmKGluZm8uZHJpdmVyLCBzaXplb2YoaW5mby5kcml2ZXIpLCAicDgwMjExXyVzIiwKKwkJCSB3bGFuZGV2LT5uc2RuYW1lKTsKKwkJc25wcmludGYoaW5mby52ZXJzaW9uLCBzaXplb2YoaW5mby52ZXJzaW9uKSwgIiVzIiwKKwkJCSBXTEFOX1JFTEVBU0UpOworCisJCS8vIGluZm8uZndfdmVyc2lvbgorCQkvLyBpbmZvLmJ1c19pbmZvCisKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmluZm8sIHNpemVvZihpbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisjaWZkZWYgRVRIVE9PTF9HTElOSworCWNhc2UgRVRIVE9PTF9HTElOSzoKKwkJZWRhdGEuY21kID0gZXRoY21kOworCisJCWlmICh3bGFuZGV2LT5saW5rc3RhdHVzICYmCisJCSAgICAod2xhbmRldi0+bWFjbW9kZSAhPSBXTEFOX01BQ01PREVfTk9ORSkpIHsKKwkJCWVkYXRhLmRhdGEgPSAxOworCQl9IGVsc2UgeworCQkJZWRhdGEuZGF0YSA9IDA7CisJCX0KKworCQlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmZWRhdGEsIHNpemVvZihlZGF0YSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfZG9faW9jdGwKKyoKKyogSGFuZGxlIGFuIGlvY3RsIGNhbGwgb24gb25lIG9mIG91ciBkZXZpY2VzLiAgRXZlcnl0aGluZyBMaW51eAorKiBpb2N0bCBzcGVjaWZpYyBpcyBkb25lIGhlcmUuICBUaGVuIHdlIHBhc3MgdGhlIGNvbnRlbnRzIG9mIHRoZQorKiBpZnItPmRhdGEgdG8gdGhlIHJlcXVlc3QgbWVzc2FnZSBoYW5kbGVyLgorKgorKiBBcmd1bWVudHM6CisqCWRldglMaW51eCBrZXJuZWwgbmV0ZGV2aWNlCisqCWlmcglPdXIgcHJpdmF0ZSBpb2N0bCByZXF1ZXN0IHN0cnVjdHVyZSwgdHlwZWQgZm9yIHRoZQorKgkJZ2VuZXJpYyBzdHJ1Y3QgaWZyZXEgc28gd2UgY2FuIHVzZSBwdHIgdG8gZnVuYworKgkJdy9vIGNhc3QuCisqCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLiAgUG9zc2libGUgdmFsdWVzOgorKgkJLUVORVRET1dOIERldmljZSBpc24ndCB1cC4KKyoJCS1FQlVTWQljbWQgYWxyZWFkeSBpbiBwcm9ncmVzcworKgkJLUVUSU1FCXA4MDIxMSBjbWQgdGltZWQgb3V0IChNU0QgbWF5IGhhdmUgaXRzIG93biB0aW1lcnMpCisqCQktRUZBVUxUIG1lbW9yeSBmYXVsdCBjb3B5aW5nIG1zZyBmcm9tIHVzZXIgYnVmZmVyCisqCQktRU5PTUVNIHVuYWJsZSB0byBhbGxvY2F0ZSBrZXJuZWwgbXNnIGJ1ZmZlcgorKgkJLUVOT1NZUwliYWQgbWFnaWMsIGl0IHRoZSBjbWQgcmVhbGx5IGZvciB1cz8KKyoJCS1FSU5UUglzbGVlcGluZyBvbiBjbWQsIGF3YWtlbmVkIGJ5IHNpZ25hbCwgY21kIGNhbmNlbGxlZC4KKyoKKyogQ2FsbCBDb250ZXh0OgorKglQcm9jZXNzIHRocmVhZCAoaW9jdGwgY2FsbGVyKS4gIFRPRE86IFNNUCBzdXBwb3J0IG1heSByZXF1aXJlCisqCWxvY2tzLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfZG9faW9jdGwobmV0ZGV2aWNlX3QgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlwODAyMTFpb2N0bF9yZXFfdAkqcmVxID0gKHA4MDIxMWlvY3RsX3JlcV90KilpZnI7CisJd2xhbmRldmljZV90CQkqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlVSU5UOAkJCSptc2didWY7CisJREJGRU5URVI7CisKKwlXTEFOX0xPR19ERUJVRygyLCAicngnZCBpb2N0bCwgY21kPSVkLCBsZW49JWRcbiIsIGNtZCwgcmVxLT5sZW4pOworCisjaWYgV0lSRUxFU1NfRVhUIDwgMTMKKwkvKiBJcyB0aGlzIGEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBpb2N0bD8gKi8KKwlpZiAoKGNtZCA+PSBTSU9DSVdGSVJTVCkgJiYgKGNtZCA8PSBTSU9DSVdMQVNUKSkgeworCQlpZiAoKHJlc3VsdCA9IHA4MDIxMXdleHRfc3VwcG9ydF9pb2N0bChkZXYsIGlmciwgY21kKSkKKwkJICAgICE9ICgtRU9QTk9UU1VQUCkpIHsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCX0KKyNlbmRpZgorCisjaWZkZWYgU0lPQ0VUSFRPT0wKKwlpZiAoY21kID09IFNJT0NFVEhUT09MKSB7CisJCXJlc3VsdCA9IHA4MDIxMW5ldGRldl9ldGh0b29sKHdsYW5kZXYsICh2b2lkIF9fdXNlciAqKSBpZnItPmlmcl9kYXRhKTsKKwkJZ290byBiYWlsOworCX0KKyNlbmRpZgorCisJLyogVGVzdCB0aGUgbWFnaWMsIGFzc3VtZSBpZnIgaXMgZ29vZCBpZiBpdCdzIHRoZXJlICovCisJaWYgKCByZXEtPm1hZ2ljICE9IFA4MDIxMV9JT0NUTF9NQUdJQyApIHsKKwkJcmVzdWx0ID0gLUVOT1NZUzsKKwkJZ290byBiYWlsOworCX0KKworCWlmICggY21kID09IFA4MDIxMV9JRlRFU1QgKSB7CisJCXJlc3VsdCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9IGVsc2UgaWYgKCBjbWQgIT0gUDgwMjExX0lGUkVRICkgeworCQlyZXN1bHQgPSAtRU5PU1lTOworCQlnb3RvIGJhaWw7CisJfQorCisJLyogQWxsb2NhdGUgYSBidWYgb2Ygc2l6ZSByZXEtPmxlbiAqLworCWlmICgobXNnYnVmID0ga21hbGxvYyggcmVxLT5sZW4sIEdGUF9LRVJORUwpKSkgeworCQlpZiAoIGNvcHlfZnJvbV91c2VyKCBtc2didWYsICh2b2lkIF9fdXNlciAqKSByZXEtPmRhdGEsIHJlcS0+bGVuKSApIHsKKwkJCXJlc3VsdCA9IC1FRkFVTFQ7CisJCX0gZWxzZSB7CisJCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KCB3bGFuZGV2LCBtc2didWYpOworCQl9CisKKwkJaWYgKCByZXN1bHQgPT0gMCApIHsKKwkJCWlmICggY29weV90b191c2VyKCAodm9pZCBfX3VzZXIgKikgcmVxLT5kYXRhLCBtc2didWYsIHJlcS0+bGVuKSkgeworCQkJCXJlc3VsdCA9IC1FRkFVTFQ7CisJCQl9CisJCX0KKwkJa2ZyZWUobXNnYnVmKTsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCX0KK2JhaWw6CisJREJGRVhJVDsKKworCXJldHVybiByZXN1bHQ7IC8qIElmIGFsbG9jYXRlLGNvcHlmcm9tIG9yIGNvcHl0byBmYWlscywgcmV0dXJuIGVycm5vICovCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFrbmV0ZGV2X3NldF9tYWNfYWRkcmVzcworKgorKiBIYW5kbGVzIHRoZSBpb2N0bCBmb3IgY2hhbmdpbmcgdGhlIE1BQ0FkZHJlc3Mgb2YgYSBuZXRkZXZpY2UKKyoKKyogcmVmZXJlbmNlczogbGludXgvbmV0ZGV2aWNlLmggYW5kIGRyaXZlcnMvbmV0L25ldF9pbml0LmMKKyoKKyogTk9URTogW01TTV0gV2Ugb25seSBwcmV2ZW50IGFkZHJlc3MgY2hhbmdlcyB3aGVuIHRoZSBuZXRkZXYgaXMKKyogdXAuICBXZSBkb24ndCBjb250cm9sIGFueXRoaW5nIGJhc2VkIG9uIGRvdDExIHN0YXRlLiAgSWYgdGhlCisqIGFkZHJlc3MgaXMgY2hhbmdlZCBvbiBhIFNUQSB0aGF0J3MgY3VycmVudGx5IGFzc29jaWF0ZWQsIHlvdQorKiB3aWxsIHByb2JhYmx5IGxvc2UgdGhlIGFiaWxpdHkgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIGZyYW1lcy4KKyogSnVzdCBiZSBhd2FyZS4gIFRoZXJlZm9yZSwgdGhpcyBzaG91bGQgdXN1YWxseSBvbmx5IGJlIGRvbmUKKyogcHJpb3IgdG8gc2Nhbi9qb2luL2F1dGgvYXNzb2MuCisqCisqIEFyZ3VtZW50czoKKyoJZGV2CW5ldGRldmljZSBzdHJ1Y3QKKyoJYWRkcgl0aGUgbmV3IE1BQ0FkZHJlc3MgKGEgc3RydWN0KQorKgorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4gIFBvc3NpYmxlIHZhbHVlczoKKyoJCS1FQlVTWQlkZXZpY2UgaXMgYnVzc3kgKGNtZCBub3QgcG9zc2libGUpCisqCQktYW5kIGVycm9ycyByZXR1cm5lZCBieTogcDgwMjExcmVxX2RvcmVxdWVzdCguLikKKyoKKyogYnk6IENvbGxpbiBSLiBNdWxsaW5lciA8Y29sbGluQG11bGxpbmVyLm9yZz4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3NldF9tYWNfYWRkcmVzcyhuZXRkZXZpY2VfdCAqZGV2LCB2b2lkICphZGRyKQoreworCXN0cnVjdCBzb2NrYWRkcgkJCSpuZXdfYWRkciA9IGFkZHI7CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CWRvdDExcmVxOworCXA4MDIxMWl0ZW1fdW5rMzkyX3QJCSptaWJhdHRyOworCXA4MDIxMWl0ZW1fcHN0cjZfdAkJKm1hY2FkZHI7CisJcDgwMjExaXRlbV91aW50MzJfdAkJKnJlc3VsdGNvZGU7CisJaW50IHJlc3VsdCA9IDA7CisKKwlEQkZFTlRFUjsKKwkvKiBJZiB3ZSdyZSBydW5uaW5nLCB3ZSBkb24ndCBhbGxvdyBNQUMgYWRkcmVzcyBjaGFuZ2VzICovCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywzOCkgKQorCWlmICggZGV2LT5zdGFydCkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKyNlbHNlCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKyNlbmRpZgorCisJLyogU2V0IHVwIHNvbWUgY29udmVuaWVuY2UgcG9pbnRlcnMuICovCisJbWliYXR0ciA9ICZkb3QxMXJlcS5taWJhdHRyaWJ1dGU7CisJbWFjYWRkciA9IChwODAyMTFpdGVtX3BzdHI2X3QqKSZtaWJhdHRyLT5kYXRhOworCXJlc3VsdGNvZGUgPSAmZG90MTFyZXEucmVzdWx0Y29kZTsKKworCS8qIFNldCB1cCBhIGRvdDExcmVxX21pYnNldCAqLworCW1lbXNldCgmZG90MTFyZXEsIDAsIHNpemVvZihwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QpKTsKKwlkb3QxMXJlcS5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKwlkb3QxMXJlcS5tc2dsZW4gPSBzaXplb2YocDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90KTsKKwltZW1jcHkoZG90MTFyZXEuZGV2bmFtZSwKKwkJKCh3bGFuZGV2aWNlX3QqKShkZXYtPnByaXYpKS0+bmFtZSwKKwkJV0xBTl9ERVZOQU1FTEVOX01BWCAtIDEpOworCisJLyogU2V0IHVwIHRoZSBtaWJhdHRyaWJ1dGUgYXJndW1lbnQgKi8KKwltaWJhdHRyLT5kaWQgPSBESURtc2dfZG90MTFyZXFfbWlic2V0X21pYmF0dHJpYnV0ZTsKKwltaWJhdHRyLT5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbWliYXR0ci0+bGVuID0gc2l6ZW9mKG1pYmF0dHItPmRhdGEpOworCisJbWFjYWRkci0+ZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNQUNBZGRyZXNzOworCW1hY2FkZHItPnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwltYWNhZGRyLT5sZW4gPSBzaXplb2YobWFjYWRkci0+ZGF0YSk7CisJbWFjYWRkci0+ZGF0YS5sZW4gPSBXTEFOX0FERFJfTEVOOworCW1lbWNweSgmbWFjYWRkci0+ZGF0YS5kYXRhLCBuZXdfYWRkci0+c2FfZGF0YSwgV0xBTl9BRERSX0xFTik7CisKKwkvKiBTZXQgdXAgdGhlIHJlc3VsdGNvZGUgYXJndW1lbnQgKi8KKwlyZXN1bHRjb2RlLT5kaWQgPSBESURtc2dfZG90MTFyZXFfbWlic2V0X3Jlc3VsdGNvZGU7CisJcmVzdWx0Y29kZS0+c3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZTsKKwlyZXN1bHRjb2RlLT5sZW4gPSBzaXplb2YocmVzdWx0Y29kZS0+ZGF0YSk7CisJcmVzdWx0Y29kZS0+ZGF0YSA9IDA7CisKKwkvKiBub3cgZmlyZSB0aGUgcmVxdWVzdCAqLworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3QoZGV2LT5wcml2LCAoVUlOVDgqKSZkb3QxMXJlcSk7CisKKwkvKiBJZiB0aGUgcmVxdWVzdCB3YXNuJ3Qgc3VjY2Vzc2Z1bCwgcmVwb3J0IGFuIGVycm9yIGFuZCBkb24ndAorCSAqIGNoYW5nZSB0aGUgbmV0ZGV2IGFkZHJlc3MKKwkgKi8KKwlpZiAoIHJlc3VsdCAhPSAwIHx8IHJlc3VsdGNvZGUtPmRhdGEgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpIHsKKwkJV0xBTl9MT0dfRVJST1IoCisJCSJMb3ctbGV2ZWwgZHJpdmVyIGZhaWxlZCBkb3QxMXJlcV9taWJzZXQoZG90MTFNQUNBZGRyZXNzKS5cbiIpOworCQlyZXN1bHQgPSAtRUFERFJOT1RBVkFJTDsKKwl9IGVsc2UgeworCQkvKiBldmVyeXRoaW5nJ3Mgb2ssIGNoYW5nZSB0aGUgYWRkciBpbiBuZXRkZXYgKi8KKwkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIG5ld19hZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgd2xhbl9jaGFuZ2VfbXR1KG5ldGRldmljZV90ICpkZXYsIGludCBuZXdfbXR1KQoreworCURCRkVOVEVSOworCS8vIDIzMTIgaXMgbWF4IDgwMi4xMSBwYXlsb2FkLCAyMCBpcyBvdmVyaGVhZCwgKGV0aGVyICsgbGxjICtzbmFwKQorCS8vIGFuZCBhbm90aGVyIDggZm9yIHdlcC4KKyAgICAgICAgaWYgKCAobmV3X210dSA8IDY4KSB8fCAobmV3X210dSA+ICgyMzEyIC0gMjAgLSA4KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICAgZGV2LT5tdHUgPSBuZXdfbXR1OworCisJREJGRVhJVDsKKworICAgICAgICByZXR1cm4gMDsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiB3bGFuX3NldHVwCisqCisqIFJvdWdobHkgbWF0Y2hlcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBldGhlcl9zZXR1cC4gIEhlcmUKKyogd2Ugc2V0IHVwIGFueSBtZW1iZXJzIG9mIHRoZSB3bGFuZGV2aWNlIHN0cnVjdHVyZSB0aGF0IGFyZSBjb21tb24KKyogdG8gYWxsIGRldmljZXMuICBBZGRpdGlvbmFsbHksIHdlIGFsbG9jYXRlIGEgbGludXggJ3N0cnVjdCBkZXZpY2UnCisqIGFuZCBwZXJmb3JtIHRoZSBzYW1lIHNldHVwIGFzIGV0aGVyX3NldHVwLgorKgorKiBOb3RlOiBJdCdzIGltcG9ydGFudCB0aGF0IHRoZSBjYWxsZXIgaGF2ZSBzZXR1cCB0aGUgd2xhbmRldi0+bmFtZQorKglwdHIgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXB0ciB0byB0aGUgd2xhbmRldiBzdHJ1Y3R1cmUgZm9yIHRoZQorKgkJCWludGVyZmFjZS4KKyogUmV0dXJuczoKKyoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UuCisqIENhbGwgQ29udGV4dDoKKyoJU2hvdWxkIGJlIHByb2Nlc3MgdGhyZWFkLiAgV2UnbGwgYXNzdW1lIGl0IG1pZ2h0IGJlCisqCWludGVycnVwdCB0aG91Z2guICBXaGVuIHdlIGFkZCBzdXBwb3J0IGZvciBzdGF0aWNhbGx5CisqCWNvbXBpbGVkIGRyaXZlcnMsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlCisqCWNvbnRleHQgb2YgdGhlIGtlcm5lbCBzdGFydHVwIGNvZGUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCB3bGFuX3NldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJbmV0ZGV2aWNlX3QJKmRldjsKKworCURCRkVOVEVSOworCisJLyogU2V0IHVwIHRoZSB3bGFuZGV2ICovCisJd2xhbmRldi0+c3RhdGUgPSBXTEFOX0RFVklDRV9DTE9TRUQ7CisJd2xhbmRldi0+ZXRoY29udiA9IFdMQU5fRVRIQ09OVl84MDIxaDsKKwl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX05PTkU7CisKKwkvKiBTZXQgdXAgdGhlIHJ4IHF1ZXVlICovCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd2xhbmRldi0+bnNkX3J4cSk7CisJdGFza2xldF9pbml0KCZ3bGFuZGV2LT5yeF9iaCwKKwkJICAgICBwODAyMTFuZXRkZXZfcnhfYmgsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcpd2xhbmRldik7CisKKwkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgc3RydWN0IGRldmljZSAqLworCWRldiA9IGttYWxsb2Moc2l6ZW9mKG5ldGRldmljZV90KSwgR0ZQX0FUT01JQyk7CisJaWYgKCBkZXYgPT0gTlVMTCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBhbGxvYyBuZXRkZXYuXG4iKTsKKwkJcmVzdWx0ID0gMTsKKwl9IGVsc2UgeworCQltZW1zZXQoIGRldiwgMCwgc2l6ZW9mKG5ldGRldmljZV90KSk7CisJCWV0aGVyX3NldHVwKGRldik7CisJCXdsYW5kZXYtPm5ldGRldiA9IGRldjsKKwkJZGV2LT5wcml2ID0gd2xhbmRldjsKKwkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPQlwODAyMTFrbmV0ZGV2X2hhcmRfc3RhcnRfeG1pdDsKKwkJZGV2LT5nZXRfc3RhdHMgPQlwODAyMTFrbmV0ZGV2X2dldF9zdGF0czsKKyNpZmRlZiBIQVZFX1BSSVZBVEVfSU9DVEwKKwkJZGV2LT5kb19pb2N0bCA9IAlwODAyMTFrbmV0ZGV2X2RvX2lvY3RsOworI2VuZGlmCisjaWZkZWYgSEFWRV9NVUxUSUNBU1QKKwkJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBwODAyMTFrbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdDsKKyNlbmRpZgorCQlkZXYtPmluaXQgPQkJcDgwMjExa25ldGRldl9pbml0OworCQlkZXYtPm9wZW4gPQkJcDgwMjExa25ldGRldl9vcGVuOworCQlkZXYtPnN0b3AgPQkJcDgwMjExa25ldGRldl9zdG9wOworCisjaWZkZWYgQ09ORklHX05FVF9XSVJFTEVTUworI2lmICgoV0lSRUxFU1NfRVhUIDwgMTcpICYmIChXSVJFTEVTU19FWFQgPCAyMSkpCisJCWRldi0+Z2V0X3dpcmVsZXNzX3N0YXRzID0gcDgwMjExd2V4dF9nZXRfd2lyZWxlc3Nfc3RhdHM7CisjZW5kaWYKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorCQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnA4MDIxMXdleHRfaGFuZGxlcl9kZWY7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywzOCkgKQorCQlkZXYtPnRidXN5ID0gMTsKKwkJZGV2LT5zdGFydCA9IDA7CisjZWxzZQorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0NIQU5HRV9NVFUKKwkJZGV2LT5jaGFuZ2VfbXR1ID0gd2xhbl9jaGFuZ2VfbXR1OworI2VuZGlmCisjaWZkZWYgSEFWRV9TRVRfTUFDX0FERFIKKwkJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPQlwODAyMTFrbmV0ZGV2X3NldF9tYWNfYWRkcmVzczsKKyNlbmRpZgorI2lmZGVmIEhBVkVfVFhfVElNRU9VVAorCQlkZXYtPnR4X3RpbWVvdXQgICAgICA9ICAmcDgwMjExa25ldGRldl90eF90aW1lb3V0OworCQlkZXYtPndhdGNoZG9nX3RpbWVvICA9ICAod2xhbl93YXRjaGRvZyAqIEhaKSAvIDEwMDA7CisjZW5kaWYKKwkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiB3bGFuX3Vuc2V0dXAKKyoKKyogVGhpcyBmdW5jdGlvbiBpcyBwYWlyZWQgd2l0aCB0aGUgd2xhbl9zZXR1cCByb3V0aW5lLiAgSXQgc2hvdWxkCisqIGJlIGNhbGxlZCBhZnRlciB1bnJlZ2lzdGVyX3dsYW5kZXYuICBCYXNpY2FsbHksIGFsbCBpdCBkb2VzIGlzCisqIGZyZWUgdGhlICdzdHJ1Y3QgZGV2aWNlJyB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSB3bGFuZGV2LgorKiBXZSBkbyBpdCBoZXJlIGJlY2F1c2UgdGhlICdzdHJ1Y3QgZGV2aWNlJyBpc24ndCBhbGxvY2F0ZWQKKyogZXhwbGljaXRseSBpbiB0aGUgZHJpdmVyIGNvZGUsIGl0J3MgZG9uZSBpbiB3bGFuX3NldHVwLiAgVG8KKyogZG8gdGhlIGZyZWUgaW4gdGhlIGRyaXZlciBtaWdodCBzZWVtIGxpa2UgJ21hZ2ljJy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlwdHIgdG8gdGhlIHdsYW5kZXYgc3RydWN0dXJlIGZvciB0aGUKKyoJCQlpbnRlcmZhY2UuCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlLgorKiBDYWxsIENvbnRleHQ6CisqCVNob3VsZCBiZSBwcm9jZXNzIHRocmVhZC4gIFdlJ2xsIGFzc3VtZSBpdCBtaWdodCBiZQorKglpbnRlcnJ1cHQgdGhvdWdoLiAgV2hlbiB3ZSBhZGQgc3VwcG9ydCBmb3Igc3RhdGljYWxseQorKgljb21waWxlZCBkcml2ZXJzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHRoZQorKgljb250ZXh0IG9mIHRoZSBrZXJuZWwgc3RhcnR1cCBjb2RlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgd2xhbl91bnNldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisKKwlEQkZFTlRFUjsKKworCXRhc2tsZXRfa2lsbCgmd2xhbmRldi0+cnhfYmgpOworCisJaWYgKHdsYW5kZXYtPm5ldGRldiA9PSBOVUxMICkgeworCQlXTEFOX0xPR19FUlJPUigiY2FsbGVkIHdpdGhvdXQgd2xhbmRldi0+bmV0ZGV2IHNldC5cbiIpOworCQlyZXN1bHQgPSAxOworCX0gZWxzZSB7CisJCWZyZWVfbmV0ZGV2KHdsYW5kZXYtPm5ldGRldik7CisJCXdsYW5kZXYtPm5ldGRldiA9IE5VTEw7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiByZWdpc3Rlcl93bGFuZGV2CisqCisqIFJvdWdobHkgbWF0Y2hlcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiByZWdpc3Rlcl9uZXRkZXYuICBUaGlzIGZ1bmN0aW9uCisqIGlzIGNhbGxlZCBhZnRlciB0aGUgZHJpdmVyIGhhcyBzdWNjZXNzZnVsbHkgcHJvYmVkIGFuZCBzZXQgdXAgdGhlCisqIHJlc291cmNlcyBmb3IgdGhlIGRldmljZS4gIEl0J3Mgbm93IHJlYWR5IHRvIGJlY29tZSBhIG5hbWVkIGRldmljZQorKiBpbiB0aGUgTGludXggc3lzdGVtLgorKgorKiBGaXJzdCB3ZSBhbGxvY2F0ZSBhIG5hbWUgZm9yIHRoZSBkZXZpY2UgKGlmIG5vdCBhbHJlYWR5IHNldCksIHRoZW4KKyogd2UgY2FsbCB0aGUgTGludXggZnVuY3Rpb24gcmVnaXN0ZXJfbmV0ZGV2aWNlLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXB0ciB0byB0aGUgd2xhbmRldiBzdHJ1Y3R1cmUgZm9yIHRoZQorKgkJCWludGVyZmFjZS4KKyogUmV0dXJuczoKKyoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UuCisqIENhbGwgQ29udGV4dDoKKyoJQ2FuIGJlIGVpdGhlciBpbnRlcnJ1cHQgb3Igbm90LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaW50CQlpID0gMDsKKwluZXRkZXZpY2VfdAkqZGV2ID0gd2xhbmRldi0+bmV0ZGV2OworCisJREJGRU5URVI7CisKKwlpID0gZGV2X2FsbG9jX25hbWUod2xhbmRldi0+bmV0ZGV2LCAid2xhbiVkIik7CisJaWYgKGkgPj0gMCkgeworCQlpID0gcmVnaXN0ZXJfbmV0ZGV2KHdsYW5kZXYtPm5ldGRldik7CisJfQorCWlmIChpICE9IDApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisjaWYgKCBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMCkgKQorCWRldi0+bmFtZSA9IHdsYW5kZXYtPm5hbWU7CisjZWxzZQorCXN0cmNweSh3bGFuZGV2LT5uYW1lLCBkZXYtPm5hbWUpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWlmIChwcm9jX3A4MDIxMSkgeworCQl3bGFuZGV2LT5wcm9jZGlyID0gcHJvY19ta2Rpcih3bGFuZGV2LT5uYW1lLCBwcm9jX3A4MDIxMSk7CisJCWlmICggd2xhbmRldi0+cHJvY2RpciApCisJCQl3bGFuZGV2LT5wcm9jd2xhbmRldiA9CisJCQkJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgid2xhbmRldiIsIDAsCisJCQkJCQkgICAgICAgd2xhbmRldi0+cHJvY2RpciwKKwkJCQkJCSAgICAgICBwODAyMTFuZXRkZXZfcHJvY19yZWFkLAorCQkJCQkJICAgICAgIHdsYW5kZXYpOworCQlpZiAod2xhbmRldi0+bnNkX3Byb2NfcmVhZCkKKwkJCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoIm5zZCIsIDAsCisJCQkJCSAgICAgICB3bGFuZGV2LT5wcm9jZGlyLAorCQkJCQkgICAgICAgd2xhbmRldi0+bnNkX3Byb2NfcmVhZCwKKwkJCQkJICAgICAgIHdsYW5kZXYpOworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hPVFBMVUcKKwlwODAyMTFfcnVuX3NiaW5faG90cGx1Zyh3bGFuZGV2LCBXTEFOX0hPVFBMVUdfUkVHSVNURVIpOworI2VuZGlmCisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiB1bnJlZ2lzdGVyX3dsYW5kZXYKKyoKKyogUm91Z2hseSBtYXRjaGVzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHVucmVnaXN0ZXJfbmV0ZGV2LiAgVGhpcworKiBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gcmVtb3ZlIGEgbmFtZWQgZGV2aWNlIGZyb20gdGhlIHN5c3RlbS4KKyoKKyogRmlyc3Qgd2UgdGVsbCBsaW51eCB0aGF0IHRoZSBkZXZpY2Ugc2hvdWxkIG5vIGxvbmdlciBleGlzdC4KKyogVGhlbiB3ZSByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBrbm93biB3bGFuIGRldmljZXMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJcHRyIHRvIHRoZSB3bGFuZGV2IHN0cnVjdHVyZSBmb3IgdGhlCisqCQkJaW50ZXJmYWNlLgorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyogQ2FsbCBDb250ZXh0OgorKglDYW4gYmUgZWl0aGVyIGludGVycnVwdCBvciBub3QuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCB1bnJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlEQkZFTlRFUjsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHCisJcDgwMjExX3J1bl9zYmluX2hvdHBsdWcod2xhbmRldiwgV0xBTl9IT1RQTFVHX1JFTU9WRSk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaWYgKCB3bGFuZGV2LT5wcm9jd2xhbmRldiApIHsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoIndsYW5kZXYiLCB3bGFuZGV2LT5wcm9jZGlyKTsKKwl9CisJaWYgKCB3bGFuZGV2LT5uc2RfcHJvY19yZWFkICkgeworCQlyZW1vdmVfcHJvY19lbnRyeSgibnNkIiwgd2xhbmRldi0+cHJvY2Rpcik7CisJfQorCWlmICh3bGFuZGV2LT5wcm9jZGlyKSB7CisJCXJlbW92ZV9wcm9jX2VudHJ5KHdsYW5kZXYtPm5hbWUsIHByb2NfcDgwMjExKTsKKwl9CisjZW5kaWYKKworCXVucmVnaXN0ZXJfbmV0ZGV2KHdsYW5kZXYtPm5ldGRldik7CisKKwkvKiBOb3cgdG8gY2xlYW4gb3V0IHRoZSByeCBxdWV1ZSAqLworCXdoaWxlICggKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bGFuZGV2LT5uc2RfcnhxKSkgKSB7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcm9jX3JlYWQKKyoKKyogUmVhZCBmdW5jdGlvbiBmb3IgL3Byb2MvbmV0L3A4MDIxMS88ZGV2aWNlPi93bGFuZGV2CisqCisqIEFyZ3VtZW50czoKKyoJYnVmCisqCXN0YXJ0CisqCW9mZnNldAorKgljb3VudAorKgllb2YKKyoJZGF0YQorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyogQ2FsbCBDb250ZXh0OgorKglDYW4gYmUgZWl0aGVyIGludGVycnVwdCBvciBub3QuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3A4MDIxMW5ldGRldl9wcm9jX3JlYWQoCisJY2hhcgkqcGFnZSwKKwljaGFyCSoqc3RhcnQsCisJb2ZmX3QJb2Zmc2V0LAorCWludAljb3VudCwKKwlpbnQJKmVvZiwKKwl2b2lkCSpkYXRhKQoreworCWNoYXIJICpwID0gcGFnZTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90ICopIGRhdGE7CisKKwlEQkZFTlRFUjsKKwlpZiAob2Zmc2V0ICE9IDApIHsKKwkJKmVvZiA9IDE7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwICs9IHNwcmludGYocCwgInA4MDIxMSB2ZXJzaW9uOiAlcyAoJXMpXG5cbiIsCisJCSAgICAgV0xBTl9SRUxFQVNFLCBXTEFOX0JVSUxEX0RBVEUpOworCXAgKz0gc3ByaW50ZihwLCAibmFtZSAgICAgICA6ICVzXG4iLCB3bGFuZGV2LT5uYW1lKTsKKwlwICs9IHNwcmludGYocCwgIm5zZCBuYW1lICAgOiAlc1xuIiwgd2xhbmRldi0+bnNkbmFtZSk7CisJcCArPSBzcHJpbnRmKHAsICJhZGRyZXNzICAgIDogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCSAgICAgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkclswXSwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkclsxXSwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkclsyXSwKKwkJICAgICB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyWzNdLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyWzRdLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyWzVdKTsKKwlwICs9IHNwcmludGYocCwgIm5zZCBjYXBzICAgOiAlcyVzJXMlcyVzJXMlcyVzJXMlc1xuIiwKKwkJICAgICAod2xhbmRldi0+bnNkY2FwcyAmIFA4MDIxMV9OU0RDQVBfSEFSRFdBUkVXRVApID8gIndlcF9odyAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX1RJRURXRVApID8gIndlcF90aWVkICIgOiAiIiwKKwkJICAgICAod2xhbmRldi0+bnNkY2FwcyAmIFA4MDIxMV9OU0RDQVBfTk9IT1NUV0VQKSA/ICJ3ZXBfaHdfb25seSAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX1BCQ0MpID8gInBiY2MgIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9TSE9SVF9QUkVBTUJMRSkgPyAic2hvcnRfcHJlYW1ibGUgIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9BR0lMSVRZKSA/ICJhZ2lsaXR5ICIgOiAiIiwKKwkJICAgICAod2xhbmRldi0+bnNkY2FwcyAmIFA4MDIxMV9OU0RDQVBfQVBfUkVUUkFOU01JVCkgPyAiYXBfcmV0cmFuc21pdCAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX0hXRlJBR01FTlQpID8gImh3X2ZyYWcgIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9BVVRPSk9JTikgPyAiYXV0b2pvaW4gIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9OT1NDQU4pID8gIiIgOiAic2NhbiAiKTsKKworCisJcCArPSBzcHJpbnRmKHAsICJic3NpZCAgICAgIDogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCSAgICAgd2xhbmRldi0+YnNzaWRbMF0sIHdsYW5kZXYtPmJzc2lkWzFdLCB3bGFuZGV2LT5ic3NpZFsyXSwKKwkJICAgICB3bGFuZGV2LT5ic3NpZFszXSwgd2xhbmRldi0+YnNzaWRbNF0sIHdsYW5kZXYtPmJzc2lkWzVdKTsKKworCXAgKz0gc3ByaW50ZihwLCAiRW5hYmxlZCAgICA6ICVzJXNcbiIsCisJCSAgICAgKHdsYW5kZXYtPnNob3J0cHJlYW1ibGUpID8gInNob3J0X3ByZWFtYmxlICIgOiAiIiwKKwkJICAgICAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpID8gInByaXZhY3kiIDogIiIpOworCisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIChwIC0gcGFnZSk7Cit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMW5ldGRldl9od3JlbW92ZWQKKyoKKyogSGFyZHdhcmUgcmVtb3ZlZCBub3RpZmljYXRpb24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZAorKiBpbW1lZGlhdGVseSBhZnRlciBhbiBNU0QgaGFzIGRldGVjdGVkIHRoYXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUKKyogaGFzIGJlZW4geWFua2VkIG91dCBmcm9tIHVuZGVyIHVzLiAgVGhlIHByaW1hcnkgdGhpbmdzIHdlIG5lZWQKKyogdG8gZG8gYXJlOgorKiAgIC0gTWFyayB0aGUgd2xhbmRldgorKiAgIC0gUHJldmVudCBhbnkgZnVydGhlciB0cmFmZmljIGZyb20gdGhlIGtuZXRkZXYgaS9mCisqICAgLSBQcmV2ZW50IGFueSBmdXJ0aGVyIHJlcXVlc3RzIGZyb20gbWdtdCBpL2YKKyogICAtIElmIHRoZXJlIGFyZSBhbnkgd2FpdHEnZCBtZ210IHJlcXVlc3RzIG9yIG1nbXQtZnJhbWUgZXhjaGFuZ2VzLAorKiAgICAgc2h1dCB0aGVtIGRvd24uCisqICAgLSBDYWxsIHRoZSBNU0QgaHdyZW1vdmVkIGZ1bmN0aW9uLgorKgorKiBUaGUgcmVtYWluZGVyIG9mIHRoZSBjbGVhbnVwIHdpbGwgYmUgaGFuZGxlZCBieSB1bnJlZ2lzdGVyKCkuCisqIE91ciBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBwcmV2ZW50IGFzIG11Y2ggdGlja2xpbmcgb2YgdGhlIE1TRAorKiBhcyBwb3NzaWJsZSBzaW5jZSB0aGUgTVNEIGlzIGFscmVhZHkgaW4gYSAnd291bmRlZCcgc3RhdGUuCisqCisqIFRPRE86IEFzIG5ldyBmZWF0dXJlcyBhcmUgYWRkZWQsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCisqICAgICAgIHVwZGF0ZWQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJV0xBTiBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKKyogUmV0dXJuczoKKyoJbm90aGluZworKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJVXN1YWxseSBpbnRlcnJ1cHQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJREJGRU5URVI7CisJd2xhbmRldi0+aHdyZW1vdmVkID0gMTsKKwlpZiAoIHdsYW5kZXYtPnN0YXRlID09IFdMQU5fREVWSUNFX09QRU4pIHsKKwkJcDgwMjExbmV0ZGV2X3N0b3BfcXVldWUod2xhbmRldik7CisJfQorCisJbmV0aWZfZGV2aWNlX2RldGFjaCh3bGFuZGV2LT5uZXRkZXYpOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExX3J4X3R5cGVkcm9wCisqCisqIENsYXNzaWZpZXMgdGhlIGZyYW1lLCBpbmNyZW1lbnRzIHRoZSBhcHByb3ByaWF0ZSBjb3VudGVyLCBhbmQKKyogcmV0dXJucyAwfDF8MiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRyaXZlciBzaG91bGQgaGFuZGxlLCBpZ25vcmUsIG9yCisqIGRyb3AgdGhlIGZyYW1lCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWZjCQlmcmFtZSBjb250cm9sIGZpZWxkCisqCisqIFJldHVybnM6CisqCXplcm8gaWYgdGhlIGZyYW1lIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkcml2ZXIsCisqICAgICAgIG9uZSBpZiB0aGUgZnJhbWUgc2hvdWxkIGJlIGlnbm9yZWQKKyogICAgICAgYW55dGhpbmcgZWxzZSBtZWFucyB3ZSBkcm9wIGl0LgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcDgwMjExX3J4X3R5cGVkcm9wKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQxNiBmYykKK3sKKwlVSU5UMTYJZnR5cGU7CisJVUlOVDE2CWZzdHlwZTsKKwlpbnQJZHJvcCA9IDA7CisJLyogQ2xhc3NpZnkgZnJhbWUsIGluY3JlbWVudCBjb3VudGVyICovCisJZnR5cGUgPSBXTEFOX0dFVF9GQ19GVFlQRShmYyk7CisJZnN0eXBlID0gV0xBTl9HRVRfRkNfRlNUWVBFKGZjKTsKKyNpZiAwCisJV0xBTl9MT0dfREVCVUcoNCwKKwkJInJ4X3R5cGVkcm9wIDogZnR5cGU9JWQgZnN0eXBlPSVkLlxuIiwgZnR5cGUsIGZzdHlwZSk7CisjZW5kaWYKKwlzd2l0Y2ggKCBmdHlwZSApIHsKKwljYXNlIFdMQU5fRlRZUEVfTUdNVDoKKwkJaWYgKCh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8CisJCQkod2xhbmRldi0+bmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwkJCWRyb3AgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgbWdtdDpcbiIpOworCQl3bGFuZGV2LT5yeC5tZ210Kys7CisJCXN3aXRjaCggZnN0eXBlICkgeworCQljYXNlIFdMQU5fRlNUWVBFX0FTU09DUkVROgorCQkJLyogcHJpbnRrKCJhc3NvY3JlcSIpOyAqLworCQkJd2xhbmRldi0+cnguYXNzb2NyZXErKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0FTU09DUkVTUDoKKwkJCS8qIHByaW50aygiYXNzb2NyZXNwIik7ICovCisJCQl3bGFuZGV2LT5yeC5hc3NvY3Jlc3ArKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX1JFQVNTT0NSRVE6CisJCQkvKiBwcmludGsoInJlYXNzb2NyZXEiKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LnJlYXNzb2NyZXErKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX1JFQVNTT0NSRVNQOgorCQkJLyogcHJpbnRrKCJyZWFzc29jcmVzcCIpOyAqLworCQkJd2xhbmRldi0+cngucmVhc3NvY3Jlc3ArKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX1BST0JFUkVROgorCQkJLyogcHJpbnRrKCJwcm9iZXJlcSIpOyAqLworCQkJd2xhbmRldi0+cngucHJvYmVyZXErKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX1BST0JFUkVTUDoKKwkJCS8qIHByaW50aygicHJvYmVyZXNwIik7ICovCisJCQl3bGFuZGV2LT5yeC5wcm9iZXJlc3ArKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0JFQUNPTjoKKwkJCS8qIHByaW50aygiYmVhY29uIik7ICovCisJCQl3bGFuZGV2LT5yeC5iZWFjb24rKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0FUSU06CisJCQkvKiBwcmludGsoImF0aW0iKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmF0aW0rKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0RJU0FTU09DOgorCQkJLyogcHJpbnRrKCJkaXNhc3NvYyIpOyAqLworCQkJd2xhbmRldi0+cnguZGlzYXNzb2MrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0FVVEhFTjoKKwkJCS8qIHByaW50aygiYXV0aGVuIik7ICovCisJCQl3bGFuZGV2LT5yeC5hdXRoZW4rKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0RFQVVUSEVOOgorCQkJLyogcHJpbnRrKCJkZWF1dGhlbiIpOyAqLworCQkJd2xhbmRldi0+cnguZGVhdXRoZW4rKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogcHJpbnRrKCJ1bmtub3duIik7ICovCisJCQl3bGFuZGV2LT5yeC5tZ210X3Vua25vd24rKzsKKwkJCWJyZWFrOworCQl9CisJCS8qIHByaW50aygiXG4iKTsgKi8KKwkJZHJvcCA9IDI7CisJCWJyZWFrOworCisJY2FzZSBXTEFOX0ZUWVBFX0NUTDoKKwkJaWYgKCh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8CisJCQkod2xhbmRldi0+bmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwkJCWRyb3AgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgY3RsOlxuIik7CisJCXdsYW5kZXYtPnJ4LmN0bCsrOworCQlzd2l0Y2goIGZzdHlwZSApIHsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9QU1BPTEw6CisJCQkvKiBwcmludGsoInBzcG9sbCIpOyAqLworCQkJd2xhbmRldi0+cngucHNwb2xsKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9SVFM6CisJCQkvKiBwcmludGsoInJ0cyIpOyAqLworCQkJd2xhbmRldi0+cngucnRzKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9DVFM6CisJCQkvKiBwcmludGsoImN0cyIpOyAqLworCQkJd2xhbmRldi0+cnguY3RzKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9BQ0s6CisJCQkvKiBwcmludGsoImFjayIpOyAqLworCQkJd2xhbmRldi0+cnguYWNrKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9DRkVORDoKKwkJCS8qIHByaW50aygiY2ZlbmQiKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmNmZW5kKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9DRkVORENGQUNLOgorCQkJLyogcHJpbnRrKCJjZmVuZGNmYWNrIik7ICovCisJCQl3bGFuZGV2LT5yeC5jZmVuZGNmYWNrKys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIHByaW50aygidW5rbm93biIpOyAqLworCQkJd2xhbmRldi0+cnguY3RsX3Vua25vd24rKzsKKwkJCWJyZWFrOworCQl9CisJCS8qIHByaW50aygiXG4iKTsgKi8KKwkJZHJvcCA9IDI7CisJCWJyZWFrOworCisJY2FzZSBXTEFOX0ZUWVBFX0RBVEE6CisJCXdsYW5kZXYtPnJ4LmRhdGErKzsKKwkJc3dpdGNoKCBmc3R5cGUgKSB7CisJCWNhc2UgV0xBTl9GU1RZUEVfREFUQU9OTFk6CisJCQl3bGFuZGV2LT5yeC5kYXRhb25seSsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfREFUQV9DRkFDSzoKKwkJCXdsYW5kZXYtPnJ4LmRhdGFfY2ZhY2srKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0RBVEFfQ0ZQT0xMOgorCQkJd2xhbmRldi0+cnguZGF0YV9jZnBvbGwrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0RBVEFfQ0ZBQ0tfQ0ZQT0xMOgorCQkJd2xhbmRldi0+cnguZGF0YV9fY2ZhY2tfY2Zwb2xsKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9OVUxMOgorCQkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgZGF0YTpudWxsXG4iKTsKKwkJCXdsYW5kZXYtPnJ4Lm51bGwrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0NGQUNLOgorCQkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgZGF0YTpjZmFja1xuIik7CisJCQl3bGFuZGV2LT5yeC5jZmFjaysrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfQ0ZQT0xMOgorCQkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgZGF0YTpjZnBvbGxcbiIpOworCQkJd2xhbmRldi0+cnguY2Zwb2xsKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9DRkFDS19DRlBPTEw6CisJCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBkYXRhOmNmYWNrX2NmcG9sbFxuIik7CisJCQl3bGFuZGV2LT5yeC5jZmFja19jZnBvbGwrKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogcHJpbnRrKCJ1bmtub3duIik7ICovCisJCQl3bGFuZGV2LT5yeC5kYXRhX3Vua25vd24rKzsKKwkJCWJyZWFrOworCQl9CisKKwkJYnJlYWs7CisJfQorCXJldHVybiBkcm9wOworfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUcKKy8qIE5vdGlmeSB1c2Vyc3BhY2Ugd2hlbiBhIG5ldGRldmljZSBldmVudCBvY2N1cnMsCisgKiBieSBydW5uaW5nICcvc2Jpbi9ob3RwbHVnIG5ldCcgd2l0aCBjZXJ0YWluCisgKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2V0LgorICovCitpbnQgcDgwMjExX3J1bl9zYmluX2hvdHBsdWcod2xhbmRldmljZV90ICp3bGFuZGV2LCBjaGFyICphY3Rpb24pCit7CisgICAgICAgIGNoYXIgKmFyZ3ZbM10sICplbnZwWzddLCBpZm5hbWVbMTIgKyBJRk5BTVNJWl0sIGFjdGlvbl9zdHJbMzJdOworCWNoYXIgbnNkbmFtZVszMl0sIHdsYW5fd2V4dFszMl07CisgICAgICAgIGludCBpOworCisJaWYgKHdsYW5kZXYpIHsKKwkJc3ByaW50ZihpZm5hbWUsICJJTlRFUkZBQ0U9JXMiLCB3bGFuZGV2LT5uYW1lKTsKKwkJc3ByaW50Zihuc2RuYW1lLCAiTlNETkFNRT0lcyIsIHdsYW5kZXYtPm5zZG5hbWUpOworCX0gZWxzZSB7CisJCXNwcmludGYoaWZuYW1lLCAiSU5URVJGQUNFPW51bGwiKTsKKwkJc3ByaW50Zihuc2RuYW1lLCAiTlNETkFNRT1udWxsIik7CisJfQorCisJc3ByaW50Zih3bGFuX3dleHQsICJXTEFOX1dFWFQ9JXMiLCB3bGFuX3dleHRfd3JpdGUgPyAieSIgOiAiIik7CisgICAgICAgIHNwcmludGYoYWN0aW9uX3N0ciwgIkFDVElPTj0lcyIsIGFjdGlvbik7CisKKyAgICAgICAgaSA9IDA7CisgICAgICAgIGFyZ3ZbaSsrXSA9IGhvdHBsdWdfcGF0aDsKKyAgICAgICAgYXJndltpKytdID0gIndsYW4iOworICAgICAgICBhcmd2W2ldID0gTlVMTDsKKworICAgICAgICBpID0gMDsKKyAgICAgICAgLyogbWluaW1hbCBjb21tYW5kIGVudmlyb25tZW50ICovCisgICAgICAgIGVudnAgW2krK10gPSAiSE9NRT0vIjsKKyAgICAgICAgZW52cCBbaSsrXSA9ICJQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIjsKKyAgICAgICAgZW52cCBbaSsrXSA9IGlmbmFtZTsKKyAgICAgICAgZW52cCBbaSsrXSA9IGFjdGlvbl9zdHI7CisgICAgICAgIGVudnAgW2krK10gPSBuc2RuYW1lOworICAgICAgICBlbnZwIFtpKytdID0gd2xhbl93ZXh0OworICAgICAgICBlbnZwIFtpXSA9IE5VTEw7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDYyKSkKKyAgICAgICAgcmV0dXJuIGNhbGxfdXNlcm1vZGVoZWxwZXIoYXJndiBbMF0sIGFyZ3YsIGVudnApOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGNhbGxfdXNlcm1vZGVoZWxwZXIoYXJndiBbMF0sIGFyZ3YsIGVudnAsIDApOworI2VuZGlmCit9CisKKyNlbmRpZgorCisKK3ZvaWQgICAgcDgwMjExX3N1c3BlbmQod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCURCRkVOVEVSOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUcKKwlwODAyMTFfcnVuX3NiaW5faG90cGx1Zyh3bGFuZGV2LCBXTEFOX0hPVFBMVUdfU1VTUEVORCk7CisjZW5kaWYKKworCURCRkVYSVQ7Cit9CisKK3ZvaWQgICAgcDgwMjExX3Jlc3VtZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJREJGRU5URVI7CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworCXA4MDIxMV9ydW5fc2Jpbl9ob3RwbHVnKHdsYW5kZXYsIFdMQU5fSE9UUExVR19SRVNVTUUpOworI2VuZGlmCisKKwlEQkZFWElUOworfQorCitzdGF0aWMgdm9pZCBwODAyMTFrbmV0ZGV2X3R4X3RpbWVvdXQoIG5ldGRldmljZV90ICpuZXRkZXYpCit7CisJd2xhbmRldmljZV90CSp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopbmV0ZGV2LT5wcml2OworCURCRkVOVEVSOworCisJaWYgKHdsYW5kZXYtPnR4X3RpbWVvdXQpIHsKKwkJd2xhbmRldi0+dHhfdGltZW91dCh3bGFuZGV2KTsKKwl9IGVsc2UgeworCQlXTEFOX0xPR19XQVJOSU5HKCJJbXBsZW1lbnQgdHhfdGltZW91dCBmb3IgJXNcbiIsCisJCQkJIHdsYW5kZXYtPm5zZG5hbWUpOworCQlwODAyMTFuZXRkZXZfd2FrZV9xdWV1ZSh3bGFuZGV2KTsKKwl9CisKKwlEQkZFWElUOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjJlMGNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmgKQEAgLTAsMCArMSwzMzYgQEAKKy8qIHA4MDIxMW5ldGRldi5oCisqCisqIFdMQU4gbmV0IGRldmljZSBzdHJ1Y3R1cmUgYW5kIGZ1bmN0aW9ucworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgZGVjbGFyZXMgdGhlIHN0cnVjdHVyZSB0eXBlIHRoYXQgcmVwcmVzZW50cyBlYWNoIHdsYW4KKyogaW50ZXJmYWNlLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfTElOVVhfUDgwMjExTkVUREVWX0gKKyNkZWZpbmUgX0xJTlVYX1A4MDIxMU5FVERFVl9ICisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisKKyNkZWZpbmUgV0xBTl9ERVZJQ0VfQ0xPU0VECTAKKyNkZWZpbmUgV0xBTl9ERVZJQ0VfT1BFTgkxCisKKyNkZWZpbmUgV0xBTl9NQUNNT0RFX05PTkUJMAorI2RlZmluZSBXTEFOX01BQ01PREVfSUJTU19TVEEJMQorI2RlZmluZSBXTEFOX01BQ01PREVfRVNTX1NUQQkyCisjZGVmaW5lIFdMQU5fTUFDTU9ERV9FU1NfQVAJMworCisvKiBNU0QgU3RhdGVzICovCisjZGVmaW5lIFdMQU5fTVNEX1NUQVJUCQkJLTEKKyNkZWZpbmUgV0xBTl9NU0RfRFJJVkVSTE9BREVECQkwCisjZGVmaW5lIFdMQU5fTVNEX0hXUFJFU0VOVF9QRU5ESU5HCTEKKyNkZWZpbmUgV0xBTl9NU0RfSFdGQUlMCQkJMgorI2RlZmluZSBXTEFOX01TRF9IV1BSRVNFTlQJCTMKKyNkZWZpbmUgV0xBTl9NU0RfRldMT0FEX1BFTkRJTkcJCTQKKyNkZWZpbmUgV0xBTl9NU0RfRldMT0FECQkJNQorI2RlZmluZSBXTEFOX01TRF9SVU5OSU5HX1BFTkRJTkcJNgorI2RlZmluZSBXTEFOX01TRF9SVU5OSU5HCQk3CisKKyNpZm5kZWYgRVRIX1BfRUNPTkVUCisjZGVmaW5lIEVUSF9QX0VDT05FVCAgIDB4MDAxOCAgICAvKiBuZWVkZWQgZm9yIDIuMi54IGtlcm5lbHMgKi8KKyNlbmRpZgorCisjZGVmaW5lIEVUSF9QXzgwMjExX1JBVyAgICAgICAgKEVUSF9QX0VDT05FVCArIDEpCisKKyNpZm5kZWYgQVJQSFJEX0lFRUU4MDIxMQorI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExIDgwMSAgICAgLyoga2VybmVsIDIuNC42ICovCisjZW5kaWYKKworI2lmbmRlZiBBUlBIUkRfSUVFRTgwMjExX1BSSVNNICAvKiBrZXJuZWwgMi40LjE4ICovCisjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTFfUFJJU00gODAyCisjZW5kaWYKKworLyotLS0gTlNEIENhcGFiaWxpdGllcyBGbGFncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBQODAyMTFfTlNEQ0FQX0hBUkRXQVJFV0VQICAgICAgICAgICAweDAxICAvKiBoYXJkd2FyZSB3ZXAgZW5naW5lICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfVElFRFdFUCAgICAgICAgICAgICAgIDB4MDIgIC8qIGNhbid0IGRlY291cGxlIGVuL2RlICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfTk9IT1NUV0VQICAgICAgICAgICAgIDB4MDQgIC8qIG11c3QgdXNlIGhhcmR3YXJlIHdlcCAqLworI2RlZmluZSBQODAyMTFfTlNEQ0FQX1BCQ0MgICAgICAgICAgICAgICAgICAweDA4ICAvKiBoYXJkd2FyZSBzdXBwb3J0cyBQQkNDICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfU0hPUlRfUFJFQU1CTEUgICAgICAgIDB4MTAgIC8qIGhhcmR3YXJlIHN1cHBvcnRzICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfQUdJTElUWSAgICAgICAgICAgICAgIDB4MjAgIC8qIGhhcmR3YXJlIHN1cHBvcnRzICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfQVBfUkVUUkFOU01JVCAgICAgICAgIDB4NDAgIC8qIG5zZCBoYW5kbGVzIHJldHJhbnNtaXRzICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfSFdGUkFHTUVOVCAgICAgICAgICAgIDB4ODAgIC8qIG5zZCBoYW5kbGVzIGZyYWcvZGVmcmFnICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfQVVUT0pPSU4gICAgICAgICAgICAgIDB4MTAwICAvKiBuc2QgZG9lcyBhdXRvam9pbiAqLworI2RlZmluZSBQODAyMTFfTlNEQ0FQX05PU0NBTiAgICAgICAgICAgICAgICAweDIwMCAgLyogbnNkIGNhbiBzY2FuICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qIFJlY2VpdmVkIGZyYW1lIHN0YXRpc3RpY3MgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9mcm1yeF90Cit7CisJVUlOVDMyCW1nbXQ7CisJVUlOVDMyCWFzc29jcmVxOworCVVJTlQzMglhc3NvY3Jlc3A7CisJVUlOVDMyCXJlYXNzb2NyZXE7CisJVUlOVDMyCXJlYXNzb2NyZXNwOworCVVJTlQzMglwcm9iZXJlcTsKKwlVSU5UMzIJcHJvYmVyZXNwOworCVVJTlQzMgliZWFjb247CisJVUlOVDMyCWF0aW07CisJVUlOVDMyCWRpc2Fzc29jOworCVVJTlQzMglhdXRoZW47CisJVUlOVDMyCWRlYXV0aGVuOworCVVJTlQzMgltZ210X3Vua25vd247CisJVUlOVDMyCWN0bDsKKwlVSU5UMzIJcHNwb2xsOworCVVJTlQzMglydHM7CisJVUlOVDMyCWN0czsKKwlVSU5UMzIJYWNrOworCVVJTlQzMgljZmVuZDsKKwlVSU5UMzIJY2ZlbmRjZmFjazsKKwlVSU5UMzIJY3RsX3Vua25vd247CisJVUlOVDMyCWRhdGE7CisJVUlOVDMyCWRhdGFvbmx5OworCVVJTlQzMglkYXRhX2NmYWNrOworCVVJTlQzMglkYXRhX2NmcG9sbDsKKwlVSU5UMzIJZGF0YV9fY2ZhY2tfY2Zwb2xsOworCVVJTlQzMgludWxsOworCVVJTlQzMgljZmFjazsKKwlVSU5UMzIJY2Zwb2xsOworCVVJTlQzMgljZmFja19jZnBvbGw7CisJVUlOVDMyCWRhdGFfdW5rbm93bjsKKwlVSU5UMzIgIGRlY3J5cHQ7CisJVUlOVDMyICBkZWNyeXB0X2VycjsKK30gcDgwMjExX2ZybXJ4X3Q7CisKKyNpZmRlZiBXSVJFTEVTU19FWFQKKy8qIGNhbGxlZCBieSAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KK3N0cnVjdCBpd19zdGF0aXN0aWNzKiBwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0cyhuZXRkZXZpY2VfdCAqZGV2KTsKKy8qIHdpcmVsZXNzIGV4dGVuc2lvbnMnIGlvY3RscyAqLworaW50IHA4MDIxMXdleHRfc3VwcG9ydF9pb2N0bChuZXRkZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7CisjaWYgV0lSRUxFU1NfRVhUID4gMTIKK2V4dGVybiBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcDgwMjExd2V4dF9oYW5kbGVyX2RlZjsKKyNlbmRpZgorCitpbnQgcDgwMjExd2V4dF9ldmVudF9hc3NvY2lhdGVkKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBpbnQgYXNzb2MpOworCisjZW5kaWYgLyogd2lyZWxlc3MgZXh0ZW5zaW9ucyAqLworCisvKiBXRVAgc3R1ZmYgKi8KKyNkZWZpbmUgTlVNX1dFUEtFWVMgNAorI2RlZmluZSBNQVhfS0VZTEVOIDMyCisKKyNkZWZpbmUgSE9TVFdFUF9ERUZBVUxUS0VZX01BU0sgKEJJVDF8QklUMCkKKyNkZWZpbmUgSE9TVFdFUF9ERUNSWVBUICBCSVQ0CisjZGVmaW5lIEhPU1RXRVBfRU5DUllQVCAgQklUNQorI2RlZmluZSBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEIEJJVDYKKyNkZWZpbmUgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQgQklUNworCitleHRlcm4gaW50IHdsYW5fd2F0Y2hkb2c7CitleHRlcm4gaW50IHdsYW5fd2V4dF93cml0ZTsKKworLyogV0xBTiBkZXZpY2UgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbmRldmljZQoreworCXN0cnVjdCB3bGFuZGV2aWNlCSpuZXh0OwkJLyogbGluayBmb3IgbGlzdCBvZiBkZXZpY2VzICovCisJdm9pZAkJCSpwcml2OwkJLyogcHJpdmF0ZSBkYXRhIGZvciBNU0QgKi8KKworCS8qIFN1YnN5c3RlbSBTdGF0ZSAqLworCWNoYXIJCW5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07IC8qIERldiBuYW1lLCBmcm9tIHJlZ2lzdGVyX3dsYW5kZXYoKSovCisJY2hhcgkJKm5zZG5hbWU7CisKKwlVSU5UMzIgICAgICAgICAgc3RhdGU7ICAgICAgICAgIC8qIERldmljZSBJL0Ygc3RhdGUgKG9wZW4vY2xvc2VkKSAqLworCVVJTlQzMgkJbXNkc3RhdGU7CS8qIHN0YXRlIG9mIHVuZGVybHlpbmcgZHJpdmVyICovCisJVUlOVDMyCQlod3JlbW92ZWQ7CS8qIEhhcyB0aGUgaHcgYmVlbiB5YW5rZWQgb3V0PyAqLworCisJLyogSGFyZHdhcmUgY29uZmlnICovCisJVUlOVAkJaXJxOworCVVJTlQJCWlvYmFzZTsKKwlVSU5UCQltZW1iYXNlOworCVVJTlQzMiAgICAgICAgICBuc2RjYXBzOyAgLyogTlNEIENhcGFiaWxpdGllcyBmbGFncyAqLworCisJLyogQ29uZmlnIHZhcnMgKi8KKwlVSU5UCQlldGhjb252OworCisJLyogZGV2aWNlIG1ldGhvZHMgKGluaXQgYnkgTVNELCB1c2VkIGJ5IHA4MDIxMSAqLworCWludAkJKCpvcGVuKShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisJaW50CQkoKmNsb3NlKShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisJdm9pZAkJKCpyZXNldCkoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYgKTsKKwlpbnQJCSgqdHhmcmFtZSkoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7CisJaW50CQkoKm1sbWVyZXF1ZXN0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7CisJaW50ICAgICAgICAgICAgICgqc2V0X211bHRpY2FzdF9saXN0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwKKwkJCQkJICAgICAgbmV0ZGV2aWNlX3QgKmRldik7CisJdm9pZAkJKCp0eF90aW1lb3V0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWludCAgICAgICAgICAgICAoKm5zZF9wcm9jX3JlYWQpKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgY291bnQsIGludAkqZW9mLCB2b2lkICpkYXRhKTsKKyNlbmRpZgorCisJLyogODAyLjExIFN0YXRlICovCisJVUlOVDgJCWJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwlwODAyMTFwc3RyMzJfdAlzc2lkOworCVVJTlQzMgkJbWFjbW9kZTsKKwlpbnQgICAgICAgICAgICAgbGlua3N0YXR1czsKKwlpbnQgICAgICAgICAgICAgc2hvcnRwcmVhbWJsZTsgIC8qIEMgYm9vbCAqLworCisJLyogV0VQIFN0YXRlICovCisJVUlOVDggd2VwX2tleXNbTlVNX1dFUEtFWVNdW01BWF9LRVlMRU5dOworCVVJTlQ4IHdlcF9rZXlsZW5zW05VTV9XRVBLRVlTXTsKKwlpbnQgICBob3N0d2VwOworCisJLyogUmVxdWVzdC9Db25maXJtIGkvZiBzdGF0ZSAodXNlZCBieSBwODAyMTEpICovCisJdW5zaWduZWQgbG9uZwkJcmVxdWVzdF9wZW5kaW5nOyAvKiBmbGFnLCBhY2Nlc3MgYXRvbWljYWxseSAqLworCisJLyogbmV0bGluayBzb2NrZXQgKi8KKwkvKiBxdWV1ZSBmb3IgaW5kaWNhdGlvbnMgd2FpdGluZyBmb3IgY21kIGNvbXBsZXRpb24gKi8KKwkvKiBMaW51eCBuZXRkZXZpY2UgYW5kIHN1cHBvcnQgKi8KKwluZXRkZXZpY2VfdAkJKm5ldGRldjsJLyogcHRyIHRvIGxpbnV4IG5ldGRldmljZSAqLworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIGxpbnV4X3N0YXRzOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwkvKiBQcm9jZnMgc3VwcG9ydCAqLworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqcHJvY2RpcjsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKnByb2N3bGFuZGV2OworI2VuZGlmCisKKwkvKiBSeCBib3R0b20gaGFsZiAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlyeF9iaDsKKworCXN0cnVjdCBza19idWZmX2hlYWQJbnNkX3J4cTsKKworCS8qIDgwMi4xMSBkZXZpY2Ugc3RhdGlzdGljcyAqLworCXN0cnVjdCBwODAyMTFfZnJtcnhfdAlyeDsKKworLyogY29tcGF0aWJpbGl0eSB0byB3aXJlbGVzcyBleHRlbnNpb25zICovCisjaWZkZWYgV0lSRUxFU1NfRVhUCisJc3RydWN0IGl3X3N0YXRpc3RpY3MJd3N0YXRzOworCisJLyogamtyaWVnbDogaXdzcHkgZmllbGRzICovCisgICAgICAgIFVJTlQ4CQkJc3B5X251bWJlcjsKKyAgICAgICAgY2hhcgkJCXNweV9hZGRyZXNzW0lXX01BWF9TUFldW0VUSF9BTEVOXTsKKyAgICAgICAgc3RydWN0IGl3X3F1YWxpdHkgICAgICAgc3B5X3N0YXRbSVdfTUFYX1NQWV07CisKKyNlbmRpZgorCit9IHdsYW5kZXZpY2VfdDsKKworLyogV0VQIHN0dWZmICovCitpbnQgd2VwX2NoYW5nZV9rZXkod2xhbmRldmljZV90ICp3bGFuZGV2LCBpbnQga2V5bnVtLCBVSU5UOCoga2V5LCBpbnQga2V5bGVuKTsKK2ludCB3ZXBfZGVjcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQ4ICpidWYsIFVJTlQzMiBsZW4sIGludCBrZXlfb3ZlcnJpZGUsIFVJTlQ4ICppdiwgVUlOVDggKmljdik7CitpbnQgd2VwX2VuY3J5cHQod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UOCAqYnVmLCBVSU5UOCAqZHN0LCBVSU5UMzIgbGVuLCBpbnQga2V5bnVtLCBVSU5UOCAqaXYsIFVJTlQ4ICppY3YpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRXh0ZXJucyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKK3ZvaWQJcDgwMjExbmV0ZGV2X3N0YXJ0dXAodm9pZCk7Cit2b2lkCXA4MDIxMW5ldGRldl9zaHV0ZG93bih2b2lkKTsKK2ludAl3bGFuX3NldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitpbnQJd2xhbl91bnNldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitpbnQJcmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworaW50CXVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwordm9pZAlwODAyMTFuZXRkZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQJcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwordm9pZCAgICBwODAyMTFfc3VzcGVuZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwordm9pZCAgICBwODAyMTFfcmVzdW1lKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3A4MDIxMW5ldGRldl9zdG9wX3F1ZXVlKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlpZiAoICF3bGFuZGV2ICkgcmV0dXJuOworCWlmICggIXdsYW5kZXYtPm5ldGRldiApIHJldHVybjsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwzLDM4KSApCisJd2xhbmRldi0+bmV0ZGV2LT50YnVzeSA9IDE7CisJd2xhbmRldi0+bmV0ZGV2LT5zdGFydCA9IDA7CisjZWxzZQorCW5ldGlmX3N0b3BfcXVldWUod2xhbmRldi0+bmV0ZGV2KTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3A4MDIxMW5ldGRldl9zdGFydF9xdWV1ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaWYgKCAhd2xhbmRldiApIHJldHVybjsKKwlpZiAoICF3bGFuZGV2LT5uZXRkZXYgKSByZXR1cm47CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywzOCkgKQorCXdsYW5kZXYtPm5ldGRldi0+dGJ1c3kgPSAwOworCXdsYW5kZXYtPm5ldGRldi0+c3RhcnQgPSAxOworI2Vsc2UKKwluZXRpZl9zdGFydF9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcDgwMjExbmV0ZGV2X3dha2VfcXVldWUod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWlmICggIXdsYW5kZXYgKSByZXR1cm47CisJaWYgKCAhd2xhbmRldi0+bmV0ZGV2ICkgcmV0dXJuOworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDMsMzgpICkKKwl3bGFuZGV2LT5uZXRkZXYtPnRidXN5ID0gMDsKKwltYXJrX2JoKE5FVF9CSCk7CisjZWxzZQorCW5ldGlmX3dha2VfcXVldWUod2xhbmRldi0+bmV0ZGV2KTsKKyNlbmRpZgorfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUcKKyNkZWZpbmUgV0xBTl9IT1RQTFVHX1JFR0lTVEVSICJyZWdpc3RlciIKKyNkZWZpbmUgV0xBTl9IT1RQTFVHX1JFTU9WRSAgICJyZW1vdmUiCisjZGVmaW5lIFdMQU5fSE9UUExVR19TVEFSVFVQICAic3RhcnR1cCIKKyNkZWZpbmUgV0xBTl9IT1RQTFVHX1NIVVRET1dOICJzaHV0ZG93biIKKyNkZWZpbmUgV0xBTl9IT1RQTFVHX1NVU1BFTkQgInN1c3BlbmQiCisjZGVmaW5lIFdMQU5fSE9UUExVR19SRVNVTUUgInJlc3VtZSIKK2ludCBwODAyMTFfcnVuX3NiaW5faG90cGx1Zyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGNoYXIgKmFjdGlvbik7CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMzNhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYwpAQCAtMCwwICsxLDMyOSBAQAorLyogc3JjL3A4MDIxMS9wODAyMTFyZXEuYworKgorKiBSZXF1ZXN0L0luZGljYXRpb24vTWFjTWdtdCBpbnRlcmZhY2UgaGFuZGxpbmcgZnVuY3Rpb25zCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zLCB0eXBlcywgYW5kIG1hY3JvcyB0byBzdXBwb3J0IHRoZQorKiBNTE1FIHJlcXVlc3QgaW50ZXJmYWNlIHRoYXQncyBpbXBsZW1lbnRlZCB2aWEgdGhlIGRldmljZSBpb2N0bHMuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbXNnLmgiCisjaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCisjaW5jbHVkZSAicDgwMjExaW9jdGwuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhZGVmLmgiCisjaW5jbHVkZSAicDgwMjExbWV0YXN0cnVjdC5oIgorI2luY2x1ZGUgInA4MDIxMXJlcS5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgQ29uc3RhbnRzICovCisKKy8qIE1heGltdW0gYW1vdW50IG9mIHRpbWUgd2UnbGwgd2FpdCBmb3IgYSByZXF1ZXN0IHRvIGNvbXBsZXRlICovCisjZGVmaW5lIFA4MDIxMVJFUV9NQVhUSU1FCTMqSFoJLyogMyBzZWNvbmRzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBNYWNyb3MgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFR5cGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBTdGF0aWMgRGVmaW5pdGlvbnMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitzdGF0aWMgdm9pZCBwODAyMTFyZXFfaGFuZGxlbXNnKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpOworc3RhdGljIGludCBwODAyMTFyZXFfbWlic2V0X21pYmdldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAqbWliX21zZywgaW50IGlzZ2V0KTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMXJlcV9kb3JlcXVlc3QKKyoKKyogSGFuZGxlcyBhbiBNTE1FIHJlcWVzdC9jb25maXJtIG1lc3NhZ2UuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJV0xBTiBkZXZpY2Ugc3RydWN0CisqCW1zZ2J1ZgkJQnVmZmVyIGNvbnRhaW5pbmcgYSByZXF1ZXN0IG1lc3NhZ2UKKyoKKyogUmV0dXJuczoKKyoJMCBvbiBzdWNjZXNzLCBhbiBlcnJubyBvdGhlcndpc2UKKyoKKyogQ2FsbCBjb250ZXh0OgorKglQb3RlbnRpYWxseSBibG9ja3MgdGhlIGNhbGxlciwgc28gaXQncyBhIGdvb2QgaWRlYSB0bworKglub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwODAyMTFyZXFfZG9yZXF1ZXN0KCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQ4ICptc2didWYpCit7CisJaW50CQlyZXN1bHQgPSAwOworCXA4MDIxMW1zZ190CSptc2cgPSAocDgwMjExbXNnX3QqKW1zZ2J1ZjsKKworCURCRkVOVEVSOworCisJLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBNU0QgaXMgcnVubmluZyAqLworCWlmICgKKwkhKCh3bGFuZGV2LT5tc2RzdGF0ZSA9PSBXTEFOX01TRF9IV1BSRVNFTlQgJiYKKwltc2ctPm1zZ2NvZGUgPT0gRElEbXNnX2xueHJlcV9pZnN0YXRlKSB8fAorCXdsYW5kZXYtPm1zZHN0YXRlID09IFdMQU5fTVNEX1JVTk5JTkcgfHwKKwl3bGFuZGV2LT5tc2RzdGF0ZSA9PSBXTEFOX01TRF9GV0xPQUQpICkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBDaGVjayBQZXJtaXNzaW9ucyAqLworCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSAmJgorCSAgICAobXNnLT5tc2djb2RlICE9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQpKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogb25seSBkb3QxMXJlcV9taWJnZXQgYWxsb3dlZCBmb3Igbm9uLXJvb3QuXG4iLCB3bGFuZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwkvKiBDaGVjayBmb3IgYnVzeSBzdGF0dXMgKi8KKwlpZiAoIHRlc3RfYW5kX3NldF9iaXQoMSwgJih3bGFuZGV2LT5yZXF1ZXN0X3BlbmRpbmcpKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIEFsbG93IHA4MDIxMSB0byBsb29rIGF0IG1zZyBhbmQgaGFuZGxlIGlmIGRlc2lyZWQuICovCisJLyogU28gZmFyLCBhbGwgcDgwMjExIG1zZ3MgYXJlIGltbWVkaWF0ZSwgbm8gd2FpdHEvdGltZXIgbmVjZXNzYXJ5ICovCisJLyogVGhpcyBtYXkgY2hhbmdlLiAqLworCXA4MDIxMXJlcV9oYW5kbGVtc2cod2xhbmRldiwgbXNnKTsKKworCS8qIFBhc3MgaXQgZG93biB0byB3bGFuZGV2IHZpYSB3bGFuZGV2LT5tbG1lcmVxdWVzdCAqLworCWlmICggd2xhbmRldi0+bWxtZXJlcXVlc3QgIT0gTlVMTCApCisJCXdsYW5kZXYtPm1sbWVyZXF1ZXN0KHdsYW5kZXYsIG1zZyk7CisKKwljbGVhcl9iaXQoIDEsICYod2xhbmRldi0+cmVxdWVzdF9wZW5kaW5nKSk7CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OwkvKiBpZiByZXN1bHQ9PTAsIG1zZy0+c3RhdHVzIHN0aWxsIG1heSBjb250YWluIGFuIGVyciAqLworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExcmVxX2hhbmRsZW1zZworKgorKiBwODAyMTEgbWVzc2FnZSBoYW5kbGVyLiAgUHJpbWFyaWx5IGxvb2tzIGZvciBtZXNzYWdlcyB0aGF0CisqIGJlbG9uZyB0byBwODAyMTEgYW5kIHRoZW4gZGlzcGF0Y2hlcyB0aGUgYXBwcm9wcmlhdGUgcmVzcG9uc2UuCisqIFRPRE86IHdlIGRvbid0IGRvIGFueXRoaW5nIHlldC4gIE9uY2UgdGhlIGxpbnV4TUlCIGlzIGJldHRlcgorKglkZWZpbmVkIHdlJ2xsIG5lZWQgYSBnZXQvc2V0IGhhbmRsZXIuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJV0xBTiBkZXZpY2Ugc3RydWN0CisqCW1zZwkJbWVzc2FnZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZyAoYW55IHJlc3VsdHMgYXJlIHNldCBpbiB0aGUgc3RhdHVzIGZpZWxkIG9mIHRoZSBtc2cpCisqCisqIENhbGwgY29udGV4dDoKKyoJUHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcDgwMjExcmVxX2hhbmRsZW1zZyggd2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKQoreworICAgICAgICBEQkZFTlRFUjsKKworCXN3aXRjaCAobXNnLT5tc2djb2RlKSB7CisKKwljYXNlIERJRG1zZ19sbnhyZXFfaG9zdHdlcDogeworCQlwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXBfdCAqcmVxID0gKHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90KikgbXNnOworCQl3bGFuZGV2LT5ob3N0d2VwICY9IH4oSE9TVFdFUF9ERUNSWVBUfEhPU1RXRVBfRU5DUllQVCk7CisJCWlmIChyZXEtPmRlY3J5cHQuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCisJCQl3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfREVDUllQVDsKKwkJaWYgKHJlcS0+ZW5jcnlwdC5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKKwkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9FTkNSWVBUOworCisJCWJyZWFrOworCX0KKwljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJnZXQ6CisJY2FzZSBESURtc2dfZG90MTFyZXFfbWlic2V0OiB7CisJCWludCBpc2dldCA9IChtc2ctPm1zZ2NvZGUgPT0gRElEbXNnX2RvdDExcmVxX21pYmdldCk7CisJCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAgKm1pYl9tc2cgPSAocDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICopIG1zZzsKKwkJcDgwMjExcmVxX21pYnNldF9taWJnZXQgKHdsYW5kZXYsIG1pYl9tc2csIGlzZ2V0KTsKKwl9CisJZGVmYXVsdDoKKwkJLy8gWFhYIGRvIG5vdGhpbmchCisJCTsKKwl9IC8qIHN3aXRjaCBtc2ctPm1zZ2NvZGUgKi8KKworCURCRkVYSVQ7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgcDgwMjExcmVxX21pYnNldF9taWJnZXQod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAqbWliX21zZywKKwkJCQkgICBpbnQgaXNnZXQpCit7CisJcDgwMjExaXRlbWRfdCAgICptaWJpdGVtID0gKHA4MDIxMWl0ZW1kX3QgKikgbWliX21zZy0+bWliYXR0cmlidXRlLmRhdGE7CisJcDgwMjExcHN0cmRfdCAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIG1pYml0ZW0tPmRhdGE7CisJVUlOVDggKmtleSA9IG1pYml0ZW0tPmRhdGEgKyBzaXplb2YocDgwMjExcHN0cmRfdCk7CisKKwlEQkZFTlRFUjsKKworCXN3aXRjaCAobWliaXRlbS0+ZGlkKSB7CisJY2FzZSBESURtaWJfZG90MTFzbXRfcDgwMjExVGFibGVfcDgwMjExX2lmc3RhdGU6IHsKKwkJVUlOVDMyICpkYXRhID0gKFVJTlQzMiAqKSBtaWJpdGVtLT5kYXRhOworCQlpZiAoaXNnZXQpCisJCQlzd2l0Y2ggKHdsYW5kZXYtPm1zZHN0YXRlKSB7CisJCQljYXNlIFdMQU5fTVNEX0hXUFJFU0VOVDoKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1faWZzdGF0ZV9kaXNhYmxlOworCQkJCWJyZWFrOworCQkJY2FzZSBXTEFOX01TRF9GV0xPQUQ6CisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX2lmc3RhdGVfZndsb2FkOworCQkJCWJyZWFrOworCQkJY2FzZSBXTEFOX01TRF9SVU5OSU5HOgorCQkJCSpkYXRhID0gUDgwMjExRU5VTV9pZnN0YXRlX2VuYWJsZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX2lmc3RhdGVfZW5hYmxlOworCQkJfQorCQlicmVhazsKKwl9CisJY2FzZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UHJlYW1ibGVFbmFibGVkOiB7CisJCVVJTlQzMiAqZGF0YSA9IChVSU5UMzIgKikgbWliaXRlbS0+ZGF0YTsKKworCQlpZiAoaXNnZXQpCisJCQkqZGF0YSA9IHdsYW5kZXYtPnNob3J0cHJlYW1ibGU7CisJCWVsc2UKKwkJCXdsYW5kZXYtPnNob3J0cHJlYW1ibGUgPSAqZGF0YTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOiB7CisJCWlmICghaXNnZXQpCisJCQl3ZXBfY2hhbmdlX2tleSh3bGFuZGV2LCAwLCBrZXksIHBzdHItPmxlbik7CisJCWJyZWFrOworCX0KKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MTogeworCQlpZiAoIWlzZ2V0KQorCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMSwga2V5LCBwc3RyLT5sZW4pOworCQlicmVhazsKKwl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTI6IHsKKwkJaWYgKCFpc2dldCkKKwkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDIsIGtleSwgcHN0ci0+bGVuKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOiB7CisJCWlmICghaXNnZXQpCisJCQl3ZXBfY2hhbmdlX2tleSh3bGFuZGV2LCAzLCBrZXksIHBzdHItPmxlbik7CisJCWJyZWFrOworCX0KKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRDogeworCQlVSU5UMzIgKmRhdGEgPSAoVUlOVDMyICopIG1pYml0ZW0tPmRhdGE7CisKKwkJaWYgKGlzZ2V0KSB7CisJCQkqZGF0YSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSzsKKwkJCX0gZWxzZSB7CisJCQkJd2xhbmRldi0+aG9zdHdlcCAmPSB+KEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLKTsKKworCQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gKCpkYXRhICYgSE9TVFdFUF9ERUZBVUxUS0VZX01BU0spOworCQkJfQorCQlicmVhazsKKwl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZDogeworCQlVSU5UMzIgKmRhdGEgPSAoVUlOVDMyICopIG1pYml0ZW0tPmRhdGE7CisKKwkJaWYgKGlzZ2V0KSB7CisJCQlpZiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpCisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7CisJCQllbHNlCisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCQl9IGVsc2UgeworCQkJCXdsYW5kZXYtPmhvc3R3ZXAgJj0gfihIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKTsKKwkJCQlpZiAoKmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQorCQkJCQl3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQ7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkOiB7CisJCVVJTlQzMiAqZGF0YSA9IChVSU5UMzIgKikgbWliaXRlbS0+ZGF0YTsKKworCQlpZiAoaXNnZXQpIHsKKwkJCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpCisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7CisJCQllbHNlCisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCQl9IGVsc2UgeworCQkJd2xhbmRldi0+aG9zdHdlcCAmPSB+KEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEKTsKKwkJCWlmICgqZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCisJCQkJd2xhbmRldi0+aG9zdHdlcCB8PSBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRDsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJLy8gWFhYWCBkbyBub3RoaW5nIQorCQk7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGFiZGNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmgKQEAgLTAsMCArMSw2OCBAQAorLyogcDgwMjExcmVxLmgKKyoKKyogUmVxdWVzdCBoYW5kbGluZyBmdW5jdGlvbnMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX0xJTlVYX1A4MDIxMVJFUV9ICisjZGVmaW5lIF9MSU5VWF9QODAyMTFSRVFfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm5zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworaW50CXA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UOCAqbXNnYnVmKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF0eXBlcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTFiMGNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExdHlwZXMuaApAQCAtMCwwICsxLDY3NSBAQAorLyogcDgwMjExdHlwZXMuaAorKgorKiBNYWNyb3MsIGNvbnN0YW50cywgdHlwZXMsIGFuZCBmdW5jcyBmb3IgcDgwMjExIGRhdGEgdHlwZXMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGRlY2xhcmVzIHNvbWUgb2YgdGhlIGNvbnN0YW50cyBhbmQgdHlwZXMgdXNlZCBpbiB2YXJpb3VzCisqIHBhcnRzIG9mIHRoZSBsaW51eC13bGFuIHN5c3RlbS4KKyoKKyogTm90ZXM6CisqICAgLSBDb25zdGFudCB2YWx1ZXMgYXJlIGFsd2F5cyBpbiBIT1NUIGJ5dGUgb3JkZXIuCisqCisqIEFsbCBmdW5jdGlvbnMgYW5kIHN0YXRpY3MgZGVjbGFyZWQgaGVyZSBhcmUgaW1wbGVtZW50ZWQgaW4gcDgwMjExdHlwZXMuYworKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9QODAyMTFUWVBFU19ICisjZGVmaW5lIF9QODAyMTFUWVBFU19ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaWZuZGVmIF9XTEFOX0NPTVBBVF9ICisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcDgwMjExIGRhdGEgdHlwZSBjb2RlcyB1c2VkIGZvciBNSUIgaXRlbXMgYW5kIG1lc3NhZ2UgKi8KKy8qIGFyZ3VtZW50cy4gVGhlIHZhcmlvdXMgbWV0YWRhdGEgc3RydWN0dXJlcyBwcm92aWRlIGFkZGl0aW9uYWwgKi8KKy8qIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIHR5cGVzLiAqLworCisjZGVmaW5lIFA4MDIxMV9UWVBFX09DVEVUU1RSCQkxCS8qIHBhc2NhbCBhcnJheSBvZiBieXRlcyAqLworI2RlZmluZSBQODAyMTFfVFlQRV9ESVNQTEFZU1RSCQkyCS8qIHBhc2NhbCBhcnJheSBvZiBieXRlcyBjb250YWluaW5nIGFzY2lpICovCisjZGVmaW5lIFA4MDIxMV9UWVBFX0lOVAkJCTQJLyogVUlOVDMyIG1pbiBhbmQgbWF4IGxpbWl0ZWQgYnkgMzIgYml0cyAqLworI2RlZmluZSBQODAyMTFfVFlQRV9FTlVNSU5UCQk1CS8qIFVJTlQzMiBob2xkaW5nIGEgbnVtZXJpYworCQkJCQkJICAgY29kZSB0aGF0IGNhbiBiZSBtYXBwZWQKKwkJCQkJCSAgIHRvIGEgdGV4dHVhbCBuYW1lICovCisjZGVmaW5lIFA4MDIxMV9UWVBFX1VOS0RBVEEJCTYJLyogRGF0YSBpdGVtIGNvbnRhaW5pbmcgYW4KKwkJCQkJCSAgIHVua25vd24gZGF0YSB0eXBlICovCisjZGVmaW5lIFA4MDIxMV9UWVBFX0lOVEFSUkFZCQk3CS8qIEFycmF5IG9mIDMyLWJpdCBpbnRlZ2Vycy4gKi8KKyNkZWZpbmUgUDgwMjExX1RZUEVfQklUQVJSQVkJCTgJLyogQXJyYXkgb2YgYml0cy4gKi8KKyNkZWZpbmUgUDgwMjExX1RZUEVfTUFDQVJSQVkJCTkJLyogQXJyYXkgb2YgTUFDIGFkZHJlc3Nlcy4gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSBpbmRleGVzIGludG8gdGhlIE1pYiBDYXRlZ29yeSBMaXN0ICovCisvKiBhbmQgdGhlIE1lc3NhZ2UgQ2F0ZWdvcnkgTGlzdCAqLworCisvKiBNaWIgQ2F0ZWdvcnkgTGlzdCAqLworI2RlZmluZSBQODAyMTFfTUlCX0NBVF9ET1QxMVNNVAkJMQorI2RlZmluZSBQODAyMTFfTUlCX0NBVF9ET1QxMU1BQwkJMgorI2RlZmluZSBQODAyMTFfTUlCX0NBVF9ET1QxMVBIWQkJMworCisjZGVmaW5lIFA4MDIxMVNFQ19ET1QxMVNNVAkJUDgwMjExX01JQl9DQVRfRE9UMTFTTVQKKyNkZWZpbmUgUDgwMjExU0VDX0RPVDExTUFDCQlQODAyMTFfTUlCX0NBVF9ET1QxMU1BQworI2RlZmluZSBQODAyMTFTRUNfRE9UMTFQSFkJCVA4MDIxMV9NSUJfQ0FUX0RPVDExUEhZCisKKy8qIE1lc3NhZ2UgQ2F0ZWdvcnkgTGlzdCAqLworI2RlZmluZSBQODAyMTFfTVNHX0NBVF9ET1QxMVJFUQkJMQorI2RlZmluZSBQODAyMTFfTVNHX0NBVF9ET1QxMUlORAkJMgorLyogI2RlZmluZSBQODAyMTFfTVNHX0NBVF9ET1QxMUNGTQkJMyAoZG9lc24ndCBleGlzdCBhdCB0aGlzIHRpbWUpICovCisKKyNkZWZpbmUgUDgwMjExU0VDX0RPVDExUkVRCQlQODAyMTFfTVNHX0NBVF9ET1QxMVJFUQorI2RlZmluZSBQODAyMTFTRUNfRE9UMTFJTkQJCVA4MDIxMV9NU0dfQ0FUX0RPVDExSU5ECisvKiAjZGVmaW5lIFA4MDIxMVNFQ19ET1QxMUNGTQkJUDgwMjExX01TR19DQVRfRE9UMTFDRk0gIChkb2Vzbid0IGV4aXN0IGF0IHRoaXMgdGltZSAqLworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHA4MDIxMSBESUQgZmllbGQgY29kZXMgdGhhdCByZXByZXNlbnQgYWNjZXNzIHR5cGUgYW5kICovCisvKiBpc190YWJsZSBzdGF0dXMuICovCisKKyNkZWZpbmUgUDgwMjExRElEX0FDQ0VTU19SRUFECQkweDEwMDAwMDAwCisjZGVmaW5lIFA4MDIxMURJRF9BQ0NFU1NfV1JJVEUJCTB4MDgwMDAwMDAKKyNkZWZpbmUgUDgwMjExRElEX1dSSVRFT05MWQkJMHgwMDAwMDAwMQorI2RlZmluZSBQODAyMTFESURfUkVBRE9OTFkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUDgwMjExRElEX1JFQURXUklURQkJMHgwMDAwMDAwMworI2RlZmluZSBQODAyMTFESURfSVNUQUJMRV9GQUxTRQkJMAorI2RlZmluZSBQODAyMTFESURfSVNUQUJMRV9UUlVFCQkxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBwODAyMTEgZW51bWVyYXRpb24gY29uc3RhbnRzLiAgVGhlIHZhbHVlIHRvIHRleHQgbWFwcGluZ3MgZm9yICovCisvKiAgdGhlc2UgaXMgaW4gcDgwMjExdHlwZXMuYy4gIFRoZXNlIGRlZmluZXMgd2VyZSBnZW5lcmF0ZWQgKi8KKy8qICBmcm9tIHRoZSBtYXBwaW5ncy4gKi8KKworLyogZXJyb3IgY29kZXMgZm9yIGxvb2t1cHMgKi8KKyNkZWZpbmUgUDgwMjExRU5VTV9CQUQJCQkJMHhmZmZmZmZmZlVMCisjZGVmaW5lIFA4MDIxMUVOVU1fQkFEU1RSCQkJIlA4MDIxMUVOVU1fQkFEIgorCisjZGVmaW5lIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UJCQkwCisjZGVmaW5lIFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZQkJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGUJCTAKKyNkZWZpbmUgUDgwMjExRU5VTV9pZnN0YXRlX2Z3bG9hZAkJMQorI2RlZmluZSBQODAyMTFFTlVNX2lmc3RhdGVfZW5hYmxlCQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fcG93ZXJtZ210X2FjdGl2ZQkJMQorI2RlZmluZSBQODAyMTFFTlVNX3Bvd2VybWdtdF9wb3dlcnNhdmUJCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9ic3N0eXBlX2luZnJhc3RydWN0dXJlCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9ic3N0eXBlX2luZGVwZW5kZW50CQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fYnNzdHlwZV9hbnkJCQkzCisjZGVmaW5lIFA4MDIxMUVOVU1fYXV0aGFsZ19vcGVuc3lzdGVtCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fYXV0aGFsZ19zaGFyZWRrZXkJCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9waHl0eXBlX2Zoc3MJCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fcGh5dHlwZV9kc3NzCQkJMgorI2RlZmluZSBQODAyMTFFTlVNX3BoeXR5cGVfaXJiYXNlYmFuZAkJMworI2RlZmluZSBQODAyMTFFTlVNX3RlbXB0eXBlX2NvbW1lcmNpYWwJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV90ZW1wdHlwZV9pbmR1c3RyaWFsCQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX2ZjYwkJMTYKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWdkb21haW5fZG9jCQkzMgorI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9ldHNpCQk0OAorI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9zcGFpbgkJNDkKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWdkb21haW5fZnJhbmNlCQk1MAorI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9ta2sJCTY0CisjZGVmaW5lIFA4MDIxMUVOVU1fY2NhbW9kZV9lZG9ubHkJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9jY2Ftb2RlX2Nzb25seQkJMgorI2RlZmluZSBQODAyMTFFTlVNX2NjYW1vZGVfZWRhbmRjcwkJNAorI2RlZmluZSBQODAyMTFFTlVNX2NjYW1vZGVfY3N3aXRodGltZXIJCTgKKyNkZWZpbmUgUDgwMjExRU5VTV9jY2Ftb2RlX2hyY3NhbmRlZAkJMTYKKyNkZWZpbmUgUDgwMjExRU5VTV9kaXZlcnNpdHlfZml4ZWRsaXN0CQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fZGl2ZXJzaXR5X25vdHN1cHBvcnRlZAkyCisjZGVmaW5lIFA4MDIxMUVOVU1fZGl2ZXJzaXR5X2R5bmFtaWMJCTMKKyNkZWZpbmUgUDgwMjExRU5VTV9zY2FudHlwZV9hY3RpdmUJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9zY2FudHlwZV9wYXNzaXZlCQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fc2NhbnR5cGVfYm90aAkJMworI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcwkJMQorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQJMworI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfdGltZW91dAkJNAorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfdG9vX21hbnlfcmVxCTUKKyNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQJCTYKKyNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2Jzc19hbHJlYWR5CTcKKyNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfYWNjZXNzCTgKKyNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfbWliYXR0cmlidXRlCTkKKyNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2NhbnRfc2V0X3JlYWRvbmx5X21pYgkxMAorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZQkxMQorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9nZXRfd3JpdGVvbmx5X21pYgkxMgorI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl91bnNwZWNfcmVhc29uCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2F1dGhfbm90X3ZhbGlkCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fZGVhdXRoX2x2X3NzCQkzCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2luYWN0aXZpdHkJCTQKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fYXBfb3ZlcmxvYWQJCTUKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fY2xhc3MyM19lcnIJCTYKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fY2xhc3MzX2VycgkJNworI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9kaXNhc19sdl9zcwkJOAorI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9hc29jX25vdF9hdXRoCQk5CisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWwJCTAKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zcGVjX2ZhaWx1cmUJMQorI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnN1cF9jYXAJCTEwCisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3JlYXNvY19ub19hc29jCTExCisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX2ZhaWxfb3RoZXIJCTEyCisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3B0X2FsZwkJMTMKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfYXV0aF9zZXFfZmFpbAkJMTQKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfY2hsbmdfZmFpbAkJMTUKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfYXV0aF90aW1lb3V0CQkxNgorI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19hcF9mdWxsCQkxNworI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnN1cF9yYXRlCQkxOAorI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnN1cF9zaG9ydHByZWFtYmxlCTE5CisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3VwX3BiY2MJCTIwCisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3VwX2FnaWxpdHkJCTIxCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vawkJMAorI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfaW52YWxpZF9pdGVtbmFtZQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfaW52YWxpZF9pdGVtZGF0YQkzCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbWlzc2luZ19pdGVtZGF0YQk0CisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfaW5jb21wbGV0ZV9pdGVtZGF0YQk1CisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfaW52YWxpZF9tc2dfZGlkCTYKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX21pYl9kaWQJNworI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX21pc3NpbmdfY29udl9mdW5jCTgKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19zdHJpbmdfdG9vX2xvbmcJOQorI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb3V0X29mX3JhbmdlCTEwCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfc3RyaW5nX3Rvb19zaG9ydAkxMQorI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX21pc3NpbmdfdmFsaWRfZnVuYwkxMgorI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX3Vua25vd24JCTEzCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfaW52YWxpZF9kaWQJCTE0CisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbWlzc2luZ19wcmludF9mdW5jCTE1CisKKyNkZWZpbmUgUDgwMjExRU5VTV9sbnhyb2FtX3JlYXNvbl91bmtub3duICAgICAgICAwCisjZGVmaW5lIFA4MDIxMUVOVU1fbG54cm9hbV9yZWFzb25fYmVhY29uICAgICAgICAgMQorI2RlZmluZSBQODAyMTFFTlVNX2xueHJvYW1fcmVhc29uX3NpZ25hbCAgICAgICAgIDIKKyNkZWZpbmUgUDgwMjExRU5VTV9sbnhyb2FtX3JlYXNvbl90eHJldHJ5ICAgICAgICAzCisjZGVmaW5lIFA4MDIxMUVOVU1fbG54cm9hbV9yZWFzb25fbm90am9pbmVkICAgICAgNAorCisjZGVmaW5lIFA4MDIxMUVOVU1fcDJwcmVhbWJsZV9sb25nICAgICAgICAgICAgICAgMAorI2RlZmluZSBQODAyMTFFTlVNX3AycHJlYW1ibGVfc2hvcnQgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUDgwMjExRU5VTV9wMnByZWFtYmxlX21peGVkICAgICAgICAgICAgICAzCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBwODAyMTEgbWF4IGxlbmd0aCBjb25zdGFudHMgZm9yIHRoZSBkaWZmZXJlbnQgcGFzY2FsIHN0cmluZ3MuICovCisKKyNkZWZpbmUgTUFYTEVOX1BTVFI2CQkoNikJLyogcGFzY2FsIGFycmF5IG9mIDYgYnl0ZXMgKi8KKyNkZWZpbmUgTUFYTEVOX1BTVFIxNAkJKDE0KQkvKiBwYXNjYWwgYXJyYXkgb2YgMTQgYnl0ZXMgKi8KKyNkZWZpbmUgTUFYTEVOX1BTVFIzMgkJKDMyKQkvKiBwYXNjYWwgYXJyYXkgb2YgMzIgYnl0ZXMgKi8KKyNkZWZpbmUgTUFYTEVOX1BTVFIyNTUJCSgyNTUpCS8qIHBhc2NhbCBhcnJheSBvZiAyNTUgYnl0ZXMgKi8KKyNkZWZpbmUgTUFYTEVOX01JQkFUVFJJQlVURQkoMzkyKQkvKiBtYXhpbXVtIG1pYmF0dHJpYnV0ZSAqLworCQkJCQkvKiB3aGVyZSB0aGUgc2l6ZSBvZiB0aGUgREFUQSBpdHNlbGYgKi8KKwkJCQkJLyogaXMgYSBESUQtTEVOLURBVEEgdHJpcGxlICovCisJCQkJCS8qIHdpdGggYSBtYXggc2l6ZSBvZiA0KzQrMzg0ICovCisKKyNkZWZpbmUgUDgwMjExX1NFVF9JTlQoaXRlbSwgdmFsdWUpIGRvIHsgXAorCShpdGVtKS5kYXRhICAgPSAodmFsdWUpOyBcCisJKGl0ZW0pLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsgXAorCX0gd2hpbGUoMCkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBzdHJpbmcgY29uc3RhbnRzICovCisKKyNkZWZpbmUgTk9UX1NFVAkJCSJOT1RfU0VUIgorI2RlZmluZSBOT1RfU1VQUE9SVEVECQkiTk9UX1NVUFBPUlRFRCIKKyNkZWZpbmUgVU5LTk9XTl9EQVRBCQkiVU5LTk9XTl9EQVRBIgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogIE1ldGFkYXRhIGZsYWdzICAqLworCisvKiBNU006IERvIHRoZXNlIGJlbG9uZyBpbiBwODAyMTFtZXRhLmg/IEknbSBub3Qgc3VyZS4gKi8KKworI2RlZmluZSBJU1JFUVVJUkVECQkoMHg4MDAwMDAwMFVMKQorI2RlZmluZSBJU1JFUVVFU1QJCSgweDQwMDAwMDAwVUwpCisjZGVmaW5lIElTQ09ORklSTQkJKDB4MjAwMDAwMDBVTCkKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgJ2ZsYWdzJyBmaWVsZCBpbiAgICovCisvKiAgdGhlIG1ldGFkYXRhLiAgVGhlc2UgYXJlIG9ubHkgdXNlZCB3aGVuIHRoZSBtZXRhZGF0YSBpcyBmb3IgICAgICAgKi8KKy8qICBjb21tYW5kIGFyZ3VtZW50cyB0byBkZXRlcm1pbmUgaWYgdGhlIGRhdGEgaXRlbSBpcyByZXF1aXJlZCwgYW5kICAqLworLyogIHdoZXRoZXIgdGhlIG1ldGFkYXRhIGl0ZW0gaXMgZm9yIGEgcmVxdWVzdCBjb21tYW5kLCBjb25maXJtICAgICAgICovCisvKiAgY29tbWFuZCBvciBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTVNNOiBEbyB0aGVzZSBiZWxvbmcgaW4gcDgwMjExbWV0YS5oPyAgSSdtIG5vdCBzdXJlICovCisKKyNkZWZpbmUgUDgwMjExSVRFTV9TRVRGTEFHUyhxLCByLCBjKQkoIHEgfCByIHwgYyApCisKKyNkZWZpbmUgUDgwMjExSVRFTV9JU1JFUVVJUkVEKGZsYWdzKQkoKChVSU5UMzIpKGZsYWdzICYgSVNSRVFVSVJFRCkpID4+IDMxICkKKyNkZWZpbmUgUDgwMjExSVRFTV9JU1JFUVVFU1QoZmxhZ3MpCSgoKFVJTlQzMikoZmxhZ3MgJiBJU1JFUVVFU1QpKSA+PiAzMCApCisjZGVmaW5lIFA4MDIxMUlURU1fSVNDT05GSVJNKGZsYWdzKQkoKChVSU5UMzIpKGZsYWdzICYgSVNDT05GSVJNKSkgPj4gMjkgKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBtYWNybyBjcmVhdGVzIGEgbmFtZSBmb3IgYW4gZW51bSAqLworCisjZGVmaW5lIE1LRU5VTU5BTUUobmFtZSkgcDgwMjExZW51bV8gIyMgbmFtZQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYW5kIG1hY3JvcyBhcmUgdXNlZCB0byBjb25zdHJ1Y3QgYW5kCisqIGRlY29uc3RydWN0IHRoZSBEYXRhIElEIGNvZGVzLiAgVGhlIGNvZGluZyBpcyBhcyBmb2xsb3dzOgorKgorKiAgICAgLi4ucnd0bm5ubm5ubm5paWlpaWlnZ2dnZ2dzc3Nzc3MgICAgICBzIC0gU2VjdGlvbgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnIC0gR3JvdXAKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAtIEl0ZW0KKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiAtIEluZGV4CisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgLSBUYWJsZSBmbGFnCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcgLSBXcml0ZSBmbGFnCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgLSBSZWFkIGZsYWcKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAtIFVudXNlZAorKi8KKworI2RlZmluZSBQODAyMTFESURfSU5WQUxJRAkJMHhmZmZmZmZmZlVMCisjZGVmaW5lIFA4MDIxMURJRF9WQUxJRAkJCTB4MDAwMDAwMDBVTAorCisjZGVmaW5lIFA4MDIxMURJRF9MU0JfU0VDVElPTgkJKDApCisjZGVmaW5lIFA4MDIxMURJRF9MU0JfR1JPVVAJCSg2KQorI2RlZmluZSBQODAyMTFESURfTFNCX0lURU0JCSgxMikKKyNkZWZpbmUgUDgwMjExRElEX0xTQl9JTkRFWAkJKDE4KQorI2RlZmluZSBQODAyMTFESURfTFNCX0lTVEFCTEUJCSgyNikKKyNkZWZpbmUgUDgwMjExRElEX0xTQl9BQ0NFU1MgCQkoMjcpCisKKyNkZWZpbmUgUDgwMjExRElEX01BU0tfU0VDVElPTgkJKDB4MDAwMDAwM2ZVTCkKKyNkZWZpbmUgUDgwMjExRElEX01BU0tfR1JPVVAJCSgweDAwMDAwMDNmVUwpCisjZGVmaW5lIFA4MDIxMURJRF9NQVNLX0lURU0JCSgweDAwMDAwMDNmVUwpCisjZGVmaW5lIFA4MDIxMURJRF9NQVNLX0lOREVYCQkoMHgwMDAwMDBmZlVMKQorI2RlZmluZSBQODAyMTFESURfTUFTS19JU1RBQkxFCQkoMHgwMDAwMDAwMVVMKQorI2RlZmluZSBQODAyMTFESURfTUFTS19BQ0NFU1MgCQkoMHgwMDAwMDAwM1VMKQorCisKKyNkZWZpbmUgUDgwMjExRElEX01LKGEsbSxsKQkoKCgoVUlOVDMyKShhKSkgJiAobSkpIDw8IChsKSkKKworI2RlZmluZSBQODAyMTFESURfTUtTRUNUSU9OKGEpCVA4MDIxMURJRF9NSyhhLCBcCisJCQkJCVA4MDIxMURJRF9NQVNLX1NFQ1RJT04sIFwKKwkJCQkJUDgwMjExRElEX0xTQl9TRUNUSU9OICkKKyNkZWZpbmUgUDgwMjExRElEX01LR1JPVVAoYSkJUDgwMjExRElEX01LKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfR1JPVVAsIFwKKwkJCQkJUDgwMjExRElEX0xTQl9HUk9VUCApCisjZGVmaW5lIFA4MDIxMURJRF9NS0lURU0oYSkJUDgwMjExRElEX01LKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfSVRFTSwgXAorCQkJCQlQODAyMTFESURfTFNCX0lURU0gKQorI2RlZmluZSBQODAyMTFESURfTUtJTkRFWChhKQlQODAyMTFESURfTUsoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19JTkRFWCwgXAorCQkJCQlQODAyMTFESURfTFNCX0lOREVYICkKKyNkZWZpbmUgUDgwMjExRElEX01LSVNUQUJMRShhKQlQODAyMTFESURfTUsoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19JU1RBQkxFLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfSVNUQUJMRSApCisKKworI2RlZmluZSBQODAyMTFESURfTUtJRChzLGcsaSxuLHQsYSkJKFA4MDIxMURJRF9NS1NFQ1RJT04ocykgfCBcCisJCQkJCQlQODAyMTFESURfTUtHUk9VUChnKSB8IFwKKwkJCQkgCQlQODAyMTFESURfTUtJVEVNKGkpIHwgXAorCQkJCSAJCVA4MDIxMURJRF9NS0lOREVYKG4pIHwgXAorCQkJCQkJUDgwMjExRElEX01LSVNUQUJMRSh0KSB8IFwKKwkJCQkJCShhKSApCisKKworI2RlZmluZSBQODAyMTFESURfR0VUKGEsbSxsKQkoKCgoVUlOVDMyKShhKSkgPj4gKGwpKSAmIChtKSkKKworI2RlZmluZSBQODAyMTFESURfU0VDVElPTihhKQlQODAyMTFESURfR0VUKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfU0VDVElPTiwgXAorCQkJCQlQODAyMTFESURfTFNCX1NFQ1RJT04pCisjZGVmaW5lIFA4MDIxMURJRF9HUk9VUChhKQlQODAyMTFESURfR0VUKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfR1JPVVAsIFwKKwkJCQkJUDgwMjExRElEX0xTQl9HUk9VUCkKKyNkZWZpbmUgUDgwMjExRElEX0lURU0oYSkJUDgwMjExRElEX0dFVChhLCBcCisJCQkJCVA4MDIxMURJRF9NQVNLX0lURU0sIFwKKwkJCQkJUDgwMjExRElEX0xTQl9JVEVNKQorI2RlZmluZSBQODAyMTFESURfSU5ERVgoYSkJUDgwMjExRElEX0dFVChhLCBcCisJCQkJCVA4MDIxMURJRF9NQVNLX0lOREVYLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfSU5ERVgpCisjZGVmaW5lIFA4MDIxMURJRF9JU1RBQkxFKGEpCVA4MDIxMURJRF9HRVQoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19JU1RBQkxFLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfSVNUQUJMRSkKKyNkZWZpbmUgUDgwMjExRElEX0FDQ0VTUyhhKQlQODAyMTFESURfR0VUKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfQUNDRVNTLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfQUNDRVNTKQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHR5cGVzIGFyZSB1c2VkIGZvciB0aGUgcmVwcmVzZW5hdGlvbiAqLworLyogIG9mIEVOVU1JTlQgdHlwZSBtZXRhZGF0YS4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExZW51bXBhaXIKK3sKKwlVSU5UMzIJCQl2YWw7CisJY2hhcgkJCSpuYW1lOworfSBwODAyMTFlbnVtcGFpcl90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFlbnVtCit7CisJSU5UCQkJbml0ZW1zOworCXA4MDIxMWVudW1wYWlyX3QJKmxpc3Q7Cit9IHA4MDIxMWVudW1fdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHR5cGVzIGFyZSB1c2VkIHRvIHN0b3JlIGRhdGEgaXRlbXMgaW4gKi8KKy8qICBtZXNzYWdlcy4gKi8KKworLyogVGVtcGxhdGUgcGFzY2FsIHN0cmluZyAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cgoreworCVVJTlQ4CQlsZW47Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMXBzdHJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cmQKK3sKKwlVSU5UOAkJbGVuOworCVVJTlQ4CQlkYXRhWzBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFwc3RyZF90OworCisvKiBNYXhpbXVtIHBhc2NhbCBzdHJpbmcgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHIyNTUKK3sKKwlVSU5UOAkJbGVuOworCVVJTlQ4CQlkYXRhW01BWExFTl9QU1RSMjU1XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjI1NV90OworCisvKiBwYXNjYWwgc3RyaW5nIGZvciBtYWNhZGRyZXNzIGFuZCBic3NpZCAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjYKK3sKKwlVSU5UOAkJbGVuOworCVVJTlQ4CQlkYXRhW01BWExFTl9QU1RSNl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMXBzdHI2X3Q7CisKKy8qIHBhc2NhbCBzdHJpbmcgZm9yIGNoYW5uZWwgbGlzdCAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjE0Cit7CisJVUlOVDgJCWxlbjsKKwlVSU5UOAkJZGF0YVtNQVhMRU5fUFNUUjE0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjE0X3Q7CisKKy8qIHBhc2NhbCBzdHJpbmcgZm9yIHNzaWQgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHIzMgoreworCVVJTlQ4CQlsZW47CisJVUlOVDgJCWRhdGFbTUFYTEVOX1BTVFIzMl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMXBzdHIzMl90OworCisvKiBNQUMgYWRkcmVzcyBhcnJheSAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbWFjYXJyYXkKK3sKKwlVSU5UMzIJCWNudDsKKwlVSU5UOAkJZGF0YVsxXVtNQVhMRU5fUFNUUjZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtYWNhcnJheV90OworCisvKiBwcm90b3R5cGUgdGVtcGxhdGUgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW0KK3sKKwlVSU5UMzIJCWRpZDsKKwlVSU5UMTYJCXN0YXR1czsKKwlVSU5UMTYJCWxlbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV90OworCisvKiBwcm90b3R5cGUgdGVtcGxhdGUgdy8gZGF0YSBpdGVtICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtZAoreworCVVJTlQzMgkJZGlkOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJbGVuOworCVVJTlQ4CQlkYXRhWzBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtZF90OworCisvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgSU5ULCBCT1VOREVESU5ULCBFTlVNSU5UICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3VpbnQzMgoreworCVVJTlQzMgkJZGlkOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJbGVuOworCVVJTlQzMgkJZGF0YTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91aW50MzJfdDsKKworLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIE9DVEVUU1RSLCBESVNQTEFZU1RSICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHI2Cit7CisJVUlOVDMyCQlkaWQ7CisJVUlOVDE2CQlzdGF0dXM7CisJVUlOVDE2CQlsZW47CisJcDgwMjExcHN0cjZfdAlkYXRhOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3BzdHI2X3Q7CisKKy8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBPQ1RFVFNUUiwgRElTUExBWVNUUiAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV9wc3RyMTQKK3sKKwlVSU5UMzIJCQlkaWQ7CisJVUlOVDE2CQkJc3RhdHVzOworCVVJTlQxNgkJCWxlbjsKKwlwODAyMTFwc3RyMTRfdAkJZGF0YTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV9wc3RyMTRfdDsKKworLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIE9DVEVUU1RSLCBESVNQTEFZU1RSICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHIzMgoreworCVVJTlQzMgkJCWRpZDsKKwlVSU5UMTYJCQlzdGF0dXM7CisJVUlOVDE2CQkJbGVuOworCXA4MDIxMXBzdHIzMl90CQlkYXRhOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3BzdHIzMl90OworCisvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgT0NURVRTVFIsIERJU1BMQVlTVFIgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fcHN0cjI1NQoreworCVVJTlQzMgkJCWRpZDsKKwlVSU5UMTYJCQlzdGF0dXM7CisJVUlOVDE2CQkJbGVuOworCXA4MDIxMXBzdHIyNTVfdAkJZGF0YTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV9wc3RyMjU1X3Q7CisKKy8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBVTksgMzkyLCBuYW1lbHkgbWliIGl0ZW1zICovCit0eXBlZGVmIHN0cnVjdCAgcDgwMjExaXRlbV91bmszOTIKK3sKKwlVSU5UMzIJCWRpZDsKKwlVSU5UMTYJCXN0YXR1czsKKwlVSU5UMTYJCWxlbjsKKwlVSU5UOAkJZGF0YVtNQVhMRU5fTUlCQVRUUklCVVRFXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91bmszOTJfdDsKKworLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIFVOSyAxMDI1LCBuYW1lbHkgcDIgcGRhcyAqLwordHlwZWRlZiBzdHJ1Y3QgIHA4MDIxMWl0ZW1fdW5rMTAyNAoreworCVVJTlQzMgkJZGlkOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJbGVuOworCVVJTlQ4CQlkYXRhWzEwMjRdOworfSAgX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91bmsxMDI0X3Q7CisKKy8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBVTksgNDA5NiwgbmFtZWx5IHAyIGRvd25sb2FkIGNodW5rcyAqLwordHlwZWRlZiBzdHJ1Y3QgIHA4MDIxMWl0ZW1fdW5rNDA5NgoreworCVVJTlQzMgkJZGlkOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJbGVuOworCVVJTlQ4CQlkYXRhWzQwOTZdOworfSAgX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91bms0MDk2X3Q7CisKK3N0cnVjdCBjYXRsaXN0aXRlbTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHR5cGUgaXMgdXNlZCB0byByZXByZXNlbnQgYWxsIG9mIHRoZSAqLworLyogIG1ldGFkYXRhIGl0ZW1zLiAgU29tZSBjb21wb25lbnRzIG1heSBjaG9vc2UgdG8gdXNlIG1vcmUsICovCisvKiAgbGVzcyBvciBkaWZmZXJlbnQgbWV0YWRhdGEgaXRlbXMuICovCisKK3R5cGVkZWYgdm9pZCAoKnA4MDIxMV90b3RleHRfdCkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqLCBVSU5UMzIgZGlkLCBVSU5UOCogaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1Zik7Cit0eXBlZGVmIHZvaWQgKCpwODAyMTFfZnJvbXRleHRfdCkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqLCBVSU5UMzIgZGlkLCBVSU5UOCogaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1Zik7Cit0eXBlZGVmIFVJTlQzMiAoKnA4MDIxMV92YWxpZF90KSggc3RydWN0IGNhdGxpc3RpdGVtICosIFVJTlQzMiBkaWQsIFVJTlQ4KiBpdGVtYnVmKTsKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRXh0ZXJuIERlY2xhcmF0aW9ucyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRW51bWVyYXRpb24gTGlzdHMgKi8KKy8qICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgZXh0ZXJuYWwgZGVjbGFyYXRpb25zICovCisvKiAgZm9yIGFsbCBlbnVtZXJhdGlvbnMgICovCisKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRSh0cnV0aCk7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUoaWZzdGF0ZSk7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUocG93ZXJtZ210KTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShic3N0eXBlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShhdXRoYWxnKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShwaHl0eXBlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRSh0ZW1wdHlwZSk7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUocmVnZG9tYWluKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShjY2Ftb2RlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShkaXZlcnNpdHkpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHNjYW50eXBlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShyZXN1bHRjb2RlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShyZWFzb24pOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHN0YXR1cyk7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUobXNnY29kZSk7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUobXNnaXRlbV9zdGF0dXMpOworCitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUobG54cm9hbV9yZWFzb24pOworCitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUocDJwcmVhbWJsZSk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgZGVjbGFyZSBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB1c2Ugd2l0aCB0aGUgKi8KKy8qICBwODAyMTFlbnVtX3QgdHlwZS4gKi8KKworVUlOVDMyIHA4MDIxMWVudW1fdGV4dDJpbnQocDgwMjExZW51bV90ICplcCwgY2hhciAqdGV4dCk7CitVSU5UMzIgcDgwMjExZW51bV9pbnQydGV4dChwODAyMTFlbnVtX3QgKmVwLCBVSU5UMzIgdmFsLCBjaGFyICp0ZXh0KTsKK3ZvaWQgcDgwMjExX2Vycm9yMnRleHQoaW50IGVycl9jb2RlLCBjaGFyICplcnJfc3RyKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgZGVjbGFyZSBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB1c2Ugd2l0aCB0aGUgKi8KKy8qICBwODAyMTFpdGVtX3QgYW5kIHA4MDIxMW1ldGFfdCB0eXBlcy4gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgZGVjbGFyZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIHZhbGlkYXRpb24gYW5kICAgICovCisvKiB0ZXh0IHRvIGJpbmFyeSBjb252ZXJzaW9ucyBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgZm9yIGludGVyZmFjZSAqLworLyogYW5kIE1JQiBkYXRhIGl0ZW1zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0gRElTUExBWVNUUiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcHN0ciA9PT4gY3N0ciAqLwordm9pZCBwODAyMTFfdG90ZXh0X2Rpc3BsYXlzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGNzdHIgPT0+IHBzdHIgKi8KK3ZvaWQgcDgwMjExX2Zyb210ZXh0X2Rpc3BsYXlzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGEgZGlzcGxheXN0ciBiaW5hcnkgdmFsdWUgKi8KK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9kaXNwbGF5c3RyKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIE9DVEVUU1RSIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHBzdHIgPT0+ICJ4eDp4eDouLi4uIiAqLwordm9pZCBwODAyMTFfdG90ZXh0X29jdGV0c3RyKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiAieHg6eHg6Li4uLiIgPT0+IHBzdHIgKi8KK3ZvaWQgcDgwMjExX2Zyb210ZXh0X29jdGV0c3RyKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhbiBvY3RldHN0ciBiaW5hcnkgdmFsdWUgKi8KK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9vY3RldHN0ciggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYgKTsKKworLyotLSBJTlQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVSU5UMzIgPT0+ICVkICovCit2b2lkIHA4MDIxMV90b3RleHRfaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiAlZCA9PT4gVUlOVDMyICovCit2b2lkIHA4MDIxMV9mcm9tdGV4dF9pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIGludCdzIGJpbmFyeSB2YWx1ZSAoYWx3YXlzIHN1Y2Nlc3NmdWwpICovCitVSU5UMzIgcDgwMjExX2lzdmFsaWRfaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIEVOVU1JTlQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVJTlQzMiA9PT4gPHZhbHVlbmFtZT4gKi8KK3ZvaWQgcDgwMjExX3RvdGV4dF9lbnVtaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiA8dmFsdWVuYW1lPiA9PT4gVUlOVDMyICovCit2b2lkIHA4MDIxMV9mcm9tdGV4dF9lbnVtaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhbiBlbnVtJ3MgYmluYXJ5IHZhbHVlICovCitVSU5UMzIgcDgwMjExX2lzdmFsaWRfZW51bWludCggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYgKTsKKworLyotLSBJTlRBUlJBWSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBVSU5UMzJbXSA9PiAlZCwlZCwlZCwuLi4gKi8KK3ZvaWQgcDgwMjExX3RvdGV4dF9pbnRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogJWQsJWQsJWQsLi4uID09PiBVSU5UMzJbXSAqLwordm9pZCBwODAyMTFfZnJvbXRleHRfaW50YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIGludGVnZXIgYXJyYXkncyB2YWx1ZSAqLworVUlOVDMyIHA4MDIxMV9pc3ZhbGlkX2ludGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIEJJVEFSUkFZIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVJTlQzMiA9PT4gJWQsJWQsJWQsLi4uICovCit2b2lkIHA4MDIxMV90b3RleHRfYml0YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qICVkLCVkLCVkLC4uLiA9PT4gVUlOVDMyICovCit2b2lkIHA4MDIxMV9mcm9tdGV4dF9iaXRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBiaXQgYXJyYXkncyB2YWx1ZSAqLworVUlOVDMyIHA4MDIxMV9pc3ZhbGlkX2JpdGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIE1BQ0FSUkFZIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcDgwMjExX3RvdGV4dF9tYWNhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKwordm9pZCBwODAyMTFfZnJvbXRleHRfbWFjYXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGEgTUFDIGFkZHJlc3MgYXJyYXkncyB2YWx1ZSAqLworVUlOVDMyIHA4MDIxMV9pc3ZhbGlkX21hY2FycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIE1JQkFUVFJJVUJURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogPG1pYnZhbHVlPiA9PT4gPHRleHR1YWwgcmVwcmVzZW50YXRpb24gaWRlbnRpZmllZCBpbiBNSUIgbWV0YWRhdGE+ICovCit2b2lkIHA4MDIxMV90b3RleHRfZ2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwordm9pZCBwODAyMTFfdG90ZXh0X3NldG1pYmF0dHJpYnV0ZSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworCisvKiA8dGV4dHVhbCByZXByZXNlbnRhdGlvbiBpZGVudGlmaWVkIGluIE1JQiBtZXRhZGF0YT4gPT0+IDxtaWJ2YWx1ZT4gKi8KK3ZvaWQgcDgwMjExX2Zyb210ZXh0X2dldG1pYmF0dHJpYnV0ZSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKK3ZvaWQgcDgwMjExX2Zyb210ZXh0X3NldG1pYmF0dHJpYnV0ZSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBtaWJpdGVtJ3MgYmluYXJ5IHZhbHVlICovCitVSU5UMzIgcDgwMjExX2lzdmFsaWRfZ2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworVUlOVDMyIHA4MDIxMV9pc3ZhbGlkX3NldG1pYmF0dHJpYnV0ZSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYgKTsKKworI2VuZGlmIC8qIF9QODAyMTFUWVBFU19IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdlcC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNmZTI5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdlcC5jCkBAIC0wLDAgKzEsMzE3IEBACisvKiBzcmMvcDgwMjExL3A4MDIxMXdlcC5jCisqCisqIFdFUCBlbmNvZGUvZGVjb2RlIGZvciBQODAyMTEuCisqCisqIENvcHlyaWdodCAoQykgMjAwMiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKy8vICNkZWZpbmUgV0VQX0RFQlVHCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAicDgwMjExaGRyLmgiCisjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKKyNpbmNsdWRlICJwODAyMTFtc2cuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBDb25zdGFudHMgKi8KKworI2RlZmluZSBTU1dBUChhLGIpIHtVSU5UOCB0bXAgPSBzW2FdOyBzW2FdID0gc1tiXTsgc1tiXSA9IHRtcDt9CisjZGVmaW5lIFdFUF9LRVkoeCkgICAgICAgKCgoeCkgJiAweEMwKSA+PiA2KQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgTWFjcm9zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFR5cGVzICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworCitzdGF0aWMgY29uc3QgVUlOVDMyIHdlcF9jcmMzMl90YWJsZVsyNTZdID0geworICAgICAgICAweDAwMDAwMDAwTCwgMHg3NzA3MzA5NkwsIDB4ZWUwZTYxMmNMLCAweDk5MDk1MWJhTCwgMHgwNzZkYzQxOUwsCisgICAgICAgIDB4NzA2YWY0OGZMLCAweGU5NjNhNTM1TCwgMHg5ZTY0OTVhM0wsIDB4MGVkYjg4MzJMLCAweDc5ZGNiOGE0TCwKKyAgICAgICAgMHhlMGQ1ZTkxZUwsIDB4OTdkMmQ5ODhMLCAweDA5YjY0YzJiTCwgMHg3ZWIxN2NiZEwsIDB4ZTdiODJkMDdMLAorICAgICAgICAweDkwYmYxZDkxTCwgMHgxZGI3MTA2NEwsIDB4NmFiMDIwZjJMLCAweGYzYjk3MTQ4TCwgMHg4NGJlNDFkZUwsCisgICAgICAgIDB4MWFkYWQ0N2RMLCAweDZkZGRlNGViTCwgMHhmNGQ0YjU1MUwsIDB4ODNkMzg1YzdMLCAweDEzNmM5ODU2TCwKKyAgICAgICAgMHg2NDZiYThjMEwsIDB4ZmQ2MmY5N2FMLCAweDhhNjVjOWVjTCwgMHgxNDAxNWM0ZkwsIDB4NjMwNjZjZDlMLAorICAgICAgICAweGZhMGYzZDYzTCwgMHg4ZDA4MGRmNUwsIDB4M2I2ZTIwYzhMLCAweDRjNjkxMDVlTCwgMHhkNTYwNDFlNEwsCisgICAgICAgIDB4YTI2NzcxNzJMLCAweDNjMDNlNGQxTCwgMHg0YjA0ZDQ0N0wsIDB4ZDIwZDg1ZmRMLCAweGE1MGFiNTZiTCwKKyAgICAgICAgMHgzNWI1YThmYUwsIDB4NDJiMjk4NmNMLCAweGRiYmJjOWQ2TCwgMHhhY2JjZjk0MEwsIDB4MzJkODZjZTNMLAorICAgICAgICAweDQ1ZGY1Yzc1TCwgMHhkY2Q2MGRjZkwsIDB4YWJkMTNkNTlMLCAweDI2ZDkzMGFjTCwgMHg1MWRlMDAzYUwsCisgICAgICAgIDB4YzhkNzUxODBMLCAweGJmZDA2MTE2TCwgMHgyMWI0ZjRiNUwsIDB4NTZiM2M0MjNMLCAweGNmYmE5NTk5TCwKKyAgICAgICAgMHhiOGJkYTUwZkwsIDB4MjgwMmI4OWVMLCAweDVmMDU4ODA4TCwgMHhjNjBjZDliMkwsIDB4YjEwYmU5MjRMLAorICAgICAgICAweDJmNmY3Yzg3TCwgMHg1ODY4NGMxMUwsIDB4YzE2MTFkYWJMLCAweGI2NjYyZDNkTCwgMHg3NmRjNDE5MEwsCisgICAgICAgIDB4MDFkYjcxMDZMLCAweDk4ZDIyMGJjTCwgMHhlZmQ1MTAyYUwsIDB4NzFiMTg1ODlMLCAweDA2YjZiNTFmTCwKKyAgICAgICAgMHg5ZmJmZTRhNUwsIDB4ZThiOGQ0MzNMLCAweDc4MDdjOWEyTCwgMHgwZjAwZjkzNEwsIDB4OTYwOWE4OGVMLAorICAgICAgICAweGUxMGU5ODE4TCwgMHg3ZjZhMGRiYkwsIDB4MDg2ZDNkMmRMLCAweDkxNjQ2Yzk3TCwgMHhlNjYzNWMwMUwsCisgICAgICAgIDB4NmI2YjUxZjRMLCAweDFjNmM2MTYyTCwgMHg4NTY1MzBkOEwsIDB4ZjI2MjAwNGVMLCAweDZjMDY5NWVkTCwKKyAgICAgICAgMHgxYjAxYTU3YkwsIDB4ODIwOGY0YzFMLCAweGY1MGZjNDU3TCwgMHg2NWIwZDljNkwsIDB4MTJiN2U5NTBMLAorICAgICAgICAweDhiYmViOGVhTCwgMHhmY2I5ODg3Y0wsIDB4NjJkZDFkZGZMLCAweDE1ZGEyZDQ5TCwgMHg4Y2QzN2NmM0wsCisgICAgICAgIDB4ZmJkNDRjNjVMLCAweDRkYjI2MTU4TCwgMHgzYWI1NTFjZUwsIDB4YTNiYzAwNzRMLCAweGQ0YmIzMGUyTCwKKyAgICAgICAgMHg0YWRmYTU0MUwsIDB4M2RkODk1ZDdMLCAweGE0ZDFjNDZkTCwgMHhkM2Q2ZjRmYkwsIDB4NDM2OWU5NmFMLAorICAgICAgICAweDM0NmVkOWZjTCwgMHhhZDY3ODg0NkwsIDB4ZGE2MGI4ZDBMLCAweDQ0MDQyZDczTCwgMHgzMzAzMWRlNUwsCisgICAgICAgIDB4YWEwYTRjNWZMLCAweGRkMGQ3Y2M5TCwgMHg1MDA1NzEzY0wsIDB4MjcwMjQxYWFMLCAweGJlMGIxMDEwTCwKKyAgICAgICAgMHhjOTBjMjA4NkwsIDB4NTc2OGI1MjVMLCAweDIwNmY4NWIzTCwgMHhiOTY2ZDQwOUwsIDB4Y2U2MWU0OWZMLAorICAgICAgICAweDVlZGVmOTBlTCwgMHgyOWQ5Yzk5OEwsIDB4YjBkMDk4MjJMLCAweGM3ZDdhOGI0TCwgMHg1OWIzM2QxN0wsCisgICAgICAgIDB4MmViNDBkODFMLCAweGI3YmQ1YzNiTCwgMHhjMGJhNmNhZEwsIDB4ZWRiODgzMjBMLCAweDlhYmZiM2I2TCwKKyAgICAgICAgMHgwM2I2ZTIwY0wsIDB4NzRiMWQyOWFMLCAweGVhZDU0NzM5TCwgMHg5ZGQyNzdhZkwsIDB4MDRkYjI2MTVMLAorICAgICAgICAweDczZGMxNjgzTCwgMHhlMzYzMGIxMkwsIDB4OTQ2NDNiODRMLCAweDBkNmQ2YTNlTCwgMHg3YTZhNWFhOEwsCisgICAgICAgIDB4ZTQwZWNmMGJMLCAweDkzMDlmZjlkTCwgMHgwYTAwYWUyN0wsIDB4N2QwNzllYjFMLCAweGYwMGY5MzQ0TCwKKyAgICAgICAgMHg4NzA4YTNkMkwsIDB4MWUwMWYyNjhMLCAweDY5MDZjMmZlTCwgMHhmNzYyNTc1ZEwsIDB4ODA2NTY3Y2JMLAorICAgICAgICAweDE5NmMzNjcxTCwgMHg2ZTZiMDZlN0wsIDB4ZmVkNDFiNzZMLCAweDg5ZDMyYmUwTCwgMHgxMGRhN2E1YUwsCisgICAgICAgIDB4NjdkZDRhY2NMLCAweGY5YjlkZjZmTCwgMHg4ZWJlZWZmOUwsIDB4MTdiN2JlNDNMLCAweDYwYjA4ZWQ1TCwKKyAgICAgICAgMHhkNmQ2YTNlOEwsIDB4YTFkMTkzN2VMLCAweDM4ZDhjMmM0TCwgMHg0ZmRmZjI1MkwsIDB4ZDFiYjY3ZjFMLAorICAgICAgICAweGE2YmM1NzY3TCwgMHgzZmI1MDZkZEwsIDB4NDhiMjM2NGJMLCAweGQ4MGQyYmRhTCwgMHhhZjBhMWI0Y0wsCisgICAgICAgIDB4MzYwMzRhZjZMLCAweDQxMDQ3YTYwTCwgMHhkZjYwZWZjM0wsIDB4YTg2N2RmNTVMLCAweDMxNmU4ZWVmTCwKKyAgICAgICAgMHg0NjY5YmU3OUwsIDB4Y2I2MWIzOGNMLCAweGJjNjY4MzFhTCwgMHgyNTZmZDJhMEwsIDB4NTI2OGUyMzZMLAorICAgICAgICAweGNjMGM3Nzk1TCwgMHhiYjBiNDcwM0wsIDB4MjIwMjE2YjlMLCAweDU1MDUyNjJmTCwgMHhjNWJhM2JiZUwsCisgICAgICAgIDB4YjJiZDBiMjhMLCAweDJiYjQ1YTkyTCwgMHg1Y2IzNmEwNEwsIDB4YzJkN2ZmYTdMLCAweGI1ZDBjZjMxTCwKKyAgICAgICAgMHgyY2Q5OWU4YkwsIDB4NWJkZWFlMWRMLCAweDliNjRjMmIwTCwgMHhlYzYzZjIyNkwsIDB4NzU2YWEzOWNMLAorICAgICAgICAweDAyNmQ5MzBhTCwgMHg5YzA5MDZhOUwsIDB4ZWIwZTM2M2ZMLCAweDcyMDc2Nzg1TCwgMHgwNTAwNTcxM0wsCisgICAgICAgIDB4OTViZjRhODJMLCAweGUyYjg3YTE0TCwgMHg3YmIxMmJhZUwsIDB4MGNiNjFiMzhMLCAweDkyZDI4ZTliTCwKKyAgICAgICAgMHhlNWQ1YmUwZEwsIDB4N2NkY2VmYjdMLCAweDBiZGJkZjIxTCwgMHg4NmQzZDJkNEwsIDB4ZjFkNGUyNDJMLAorICAgICAgICAweDY4ZGRiM2Y4TCwgMHgxZmRhODM2ZUwsIDB4ODFiZTE2Y2RMLCAweGY2YjkyNjViTCwgMHg2ZmIwNzdlMUwsCisgICAgICAgIDB4MThiNzQ3NzdMLCAweDg4MDg1YWU2TCwgMHhmZjBmNmE3MEwsIDB4NjYwNjNiY2FMLCAweDExMDEwYjVjTCwKKyAgICAgICAgMHg4ZjY1OWVmZkwsIDB4Zjg2MmFlNjlMLCAweDYxNmJmZmQzTCwgMHgxNjZjY2Y0NUwsIDB4YTAwYWUyNzhMLAorICAgICAgICAweGQ3MGRkMmVlTCwgMHg0ZTA0ODM1NEwsIDB4MzkwM2IzYzJMLCAweGE3NjcyNjYxTCwgMHhkMDYwMTZmN0wsCisgICAgICAgIDB4NDk2OTQ3NGRMLCAweDNlNmU3N2RiTCwgMHhhZWQxNmE0YUwsIDB4ZDlkNjVhZGNMLCAweDQwZGYwYjY2TCwKKyAgICAgICAgMHgzN2Q4M2JmMEwsIDB4YTliY2FlNTNMLCAweGRlYmI5ZWM1TCwgMHg0N2IyY2Y3ZkwsIDB4MzBiNWZmZTlMLAorICAgICAgICAweGJkYmRmMjFjTCwgMHhjYWJhYzI4YUwsIDB4NTNiMzkzMzBMLCAweDI0YjRhM2E2TCwgMHhiYWQwMzYwNUwsCisgICAgICAgIDB4Y2RkNzA2OTNMLCAweDU0ZGU1NzI5TCwgMHgyM2Q5NjdiZkwsIDB4YjM2NjdhMmVMLCAweGM0NjE0YWI4TCwKKyAgICAgICAgMHg1ZDY4MWIwMkwsIDB4MmE2ZjJiOTRMLCAweGI0MGJiZTM3TCwgMHhjMzBjOGVhMUwsIDB4NWEwNWRmMWJMLAorICAgICAgICAweDJkMDJlZjhkTAorfTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KKworLyoga2V5bGVuIGluIGJ5dGVzISAqLworCitpbnQgd2VwX2NoYW5nZV9rZXkod2xhbmRldmljZV90ICp3bGFuZGV2LCBpbnQga2V5bnVtLCBVSU5UOCoga2V5LCBpbnQga2V5bGVuKQoreworCWlmIChrZXlsZW4gPCAwKSAgcmV0dXJuIC0xOworCWlmIChrZXlsZW4gPj0gTUFYX0tFWUxFTikgcmV0dXJuIC0xOworCWlmIChrZXkgPT0gTlVMTCkgcmV0dXJuIC0xOworCWlmIChrZXludW0gPCAwKSAgcmV0dXJuIC0xOworCWlmIChrZXludW0gPj0gTlVNX1dFUEtFWVMpIHJldHVybiAtMTsKKworCisjaWZkZWYgV0VQX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIldFUCBrZXkgJWQgbGVuICVkID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCBrZXludW0sIGtleWxlbiwga2V5WzBdLCBrZXlbMV0sIGtleVsyXSwga2V5WzNdLCBrZXlbNF0sIGtleVs1XSwga2V5WzZdLCBrZXlbN10pOworI2VuZGlmCisKKwl3bGFuZGV2LT53ZXBfa2V5bGVuc1trZXludW1dID0ga2V5bGVuOworCW1lbWNweSh3bGFuZGV2LT53ZXBfa2V5c1trZXludW1dLCBrZXksIGtleWxlbik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgNC1ieXRlIElWIGF0IHN0YXJ0IG9mIGJ1ZmZlciwgNC1ieXRlIElDViBhdCBlbmQgb2YgYnVmZmVyLgorICBpZiBzdWNjZXNzZnVsLCBidWYgc3RhcnQgaXMgcGF5bG9hZCBiZWdpbiwgbGVuZ3RoIC09IDg7CisgKi8KK2ludCB3ZXBfZGVjcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQ4ICpidWYsIFVJTlQzMiBsZW4sIGludCBrZXlfb3ZlcnJpZGUsIFVJTlQ4ICppdiwgVUlOVDggKmljdikKK3sKKwlVSU5UMzIgaSwgaiwgaywgY3JjLCBrZXlsZW47CisJVUlOVDggc1syNTZdLCBrZXlbNjRdLCBjX2NyY1s0XTsKKwlVSU5UOCBrZXlpZHg7CisKKwkvKiBOZWVkcyB0byBiZSBhdCBsZWFzdCA4IGJ5dGVzIG9mIHBheWxvYWQgKi8KKwlpZiAobGVuIDw9IDApIHJldHVybiAtMTsKKworCS8qIGluaXRpYWxpemUgdGhlIGZpcnN0IGJ5dGVzIG9mIHRoZSBrZXkgZnJvbSB0aGUgSVYgKi8KKwlrZXlbMF0gPSBpdlswXTsKKwlrZXlbMV0gPSBpdlsxXTsKKwlrZXlbMl0gPSBpdlsyXTsKKwlrZXlpZHggPSBXRVBfS0VZKGl2WzNdKTsKKworCWlmIChrZXlfb3ZlcnJpZGUgPj0gMCkKKwkJa2V5aWR4ID0ga2V5X292ZXJyaWRlOworCisJaWYgKGtleWlkeCA+PSBOVU1fV0VQS0VZUykgcmV0dXJuIC0yOworCisJa2V5bGVuID0gd2xhbmRldi0+d2VwX2tleWxlbnNba2V5aWR4XTsKKworCWlmIChrZXlsZW4gPT0gMCkgcmV0dXJuIC0zOworCisJLyogY29weSB0aGUgcmVzdCBvZiB0aGUga2V5IG92ZXIgZnJvbSB0aGUgZGVzaWduYXRlZCBrZXkgKi8KKwltZW1jcHkoa2V5KzMsIHdsYW5kZXYtPndlcF9rZXlzW2tleWlkeF0sIGtleWxlbik7CisKKwlrZXlsZW4rPTM7ICAvKiBhZGQgaW4gSVYgYnl0ZXMgKi8KKworI2lmZGVmIFdFUF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJEICVkOiAlMDJ4ICUwMnggJTAyeCAoJWQgJWQpICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwgbGVuLCBrZXlbMF0sIGtleVsxXSwga2V5WzJdLCBrZXlpZHgsIGtleWxlbiwga2V5WzNdLCBrZXlbNF0sIGtleVs1XSwga2V5WzZdLCBrZXlbN10pOworI2VuZGlmCisKKwkvKiBzZXQgdXAgdGhlIFJDNCBzdGF0ZSAqLworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKwkJc1tpXSA9IGk7CisJaiA9IDA7CisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCWogPSAoaiArIHNbaV0gKyBrZXlbaSAlIGtleWxlbl0pICYgMHhmZjsKKwkJU1NXQVAoaSxqKTsKKwl9CisKKwkvKiBBcHBseSB0aGUgUkM0IHRvIHRoZSBkYXRhLCB1cGRhdGUgdGhlIENSQzMyICovCisJY3JjID0gfjA7CisJaSA9IGogPSAwOworCWZvciAoayA9IDA7IGsgPCBsZW47IGsrKykgeworCQlpID0gKGkrMSkgJiAweGZmOworCQlqID0gKGorc1tpXSkgJiAweGZmOworCQlTU1dBUChpLGopOworCQlidWZba10gXj0gc1soc1tpXSArIHNbal0pICYgMHhmZl07CisJCWNyYyA9IHdlcF9jcmMzMl90YWJsZVsoY3JjIF4gYnVmW2tdKSAmIDB4ZmZdIF4gKGNyYyA+PiA4KTsKKwl9CisJY3JjID0gfmNyYzsKKworCS8qIG5vdyBsZXQncyBjaGVjayB0aGUgY3JjICovCisJY19jcmNbMF0gPSBjcmM7CisJY19jcmNbMV0gPSBjcmMgPj4gODsKKwljX2NyY1syXSA9IGNyYyA+PiAxNjsKKwljX2NyY1szXSA9IGNyYyA+PiAyNDsKKworCWZvciAoayA9IDA7IGsgPCA0OyBrKyspIHsKKwkJaSA9IChpICsgMSkgJiAweGZmOworCQlqID0gKGorc1tpXSkgJiAweGZmOworCQlTU1dBUChpLGopOworCQlpZiAoKGNfY3JjW2tdIF4gc1soc1tpXSArIHNbal0pICYgMHhmZl0pICE9IGljdltrXSkKKwkJCXJldHVybiAtKDQgfCAoayA8PCA0KSkgOyAvKiBJQ1YgbWlzbWF0Y2ggKi8KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogZW5jcnlwdHMgaW4tcGxhY2UuICovCitpbnQgd2VwX2VuY3J5cHQod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UOCAqYnVmLCBVSU5UOCAqZHN0LCBVSU5UMzIgbGVuLCBpbnQga2V5bnVtLCBVSU5UOCAqaXYsIFVJTlQ4ICppY3YpCit7CisJVUlOVDMyIGksIGosIGssIGNyYywga2V5bGVuOworCVVJTlQ4IHNbMjU2XSwga2V5WzY0XTsKKworCS8qIG5vIHBvaW50IGluIFdFUHBpbmcgYW4gZW1wdHkgZnJhbWUgKi8KKwlpZiAobGVuIDw9IDApIHJldHVybiAtMTsKKworCS8qIHdlIG5lZWQgdG8gaGF2ZSBhIHJlYWwga2V5Li4gKi8KKwlpZiAoa2V5bnVtID49IE5VTV9XRVBLRVlTKSByZXR1cm4gLTI7CisJa2V5bGVuID0gd2xhbmRldi0+d2VwX2tleWxlbnNba2V5bnVtXTsKKwlpZiAoa2V5bGVuIDw9IDApIHJldHVybiAtMzsKKworCS8qIHVzZSBhIHJhbmRvbSBJVi4gIEFuZCBza2lwIGtub3duIHdlYWsgb25lcy4gKi8KKwlnZXRfcmFuZG9tX2J5dGVzKGl2LCAzKTsKKwl3aGlsZSAoKGl2WzFdID09IDB4ZmYpICYmIChpdlswXSA+PSAzKSAmJiAoaXZbMF0gPCBrZXlsZW4pKQorCQlnZXRfcmFuZG9tX2J5dGVzKGl2LCAzKTsKKworCWl2WzNdID0gKGtleW51bSAmIDB4MDMpIDw8IDY7CisKKwlrZXlbMF0gPSBpdlswXTsKKwlrZXlbMV0gPSBpdlsxXTsKKwlrZXlbMl0gPSBpdlsyXTsKKworCS8qIGNvcHkgdGhlIHJlc3Qgb2YgdGhlIGtleSBvdmVyIGZyb20gdGhlIGRlc2lnbmF0ZWQga2V5ICovCisJbWVtY3B5KGtleSszLCB3bGFuZGV2LT53ZXBfa2V5c1trZXludW1dLCBrZXlsZW4pOworCisJa2V5bGVuKz0zOyAgLyogYWRkIGluIElWIGJ5dGVzICovCisKKyNpZmRlZiBXRVBfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiRSAlZCAoJWQvJWQgJWQpICUwMnggJTAyeCAlMDJ4ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwgbGVuLCAgaXZbM10sIGtleW51bSwga2V5bGVuLCBrZXlbMF0sIGtleVsxXSwga2V5WzJdLCBrZXlbM10sIGtleVs0XSwga2V5WzVdLCBrZXlbNl0sIGtleVs3XSk7CisjZW5kaWYKKworCS8qIHNldCB1cCB0aGUgUkM0IHN0YXRlICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorCQlzW2ldID0gaTsKKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJaiA9IChqICsgc1tpXSArIGtleVtpICUga2V5bGVuXSkgJiAweGZmOworCQlTU1dBUChpLGopOworCX0KKworCS8qIFVwZGF0ZSBDUkMzMiB0aGVuIGFwcGx5IFJDNCB0byB0aGUgZGF0YSAqLworCWNyYyA9IH4wOworCWkgPSBqID0gMDsKKwlmb3IgKGsgPSAwOyBrIDwgbGVuOyBrKyspIHsKKwkJY3JjID0gd2VwX2NyYzMyX3RhYmxlWyhjcmMgXiBidWZba10pICYgMHhmZl0gXiAoY3JjID4+IDgpOworCQlpID0gKGkrMSkgJiAweGZmOworCQlqID0gKGorc1tpXSkgJiAweGZmOworCQlTU1dBUChpLGopOworCQlkc3Rba10gPSBidWZba10gXiBzWyhzW2ldICsgc1tqXSkgJiAweGZmXTsKKwl9CisJY3JjID0gfmNyYzsKKworCS8qIG5vdyBsZXQncyBlbmNyeXB0IHRoZSBjcmMgKi8KKwlpY3ZbMF0gPSBjcmM7CisJaWN2WzFdID0gY3JjID4+IDg7CisJaWN2WzJdID0gY3JjID4+IDE2OworCWljdlszXSA9IGNyYyA+PiAyNDsKKworCWZvciAoayA9IDA7IGsgPCA0OyBrKyspIHsKKwkJaSA9IChpICsgMSkgJiAweGZmOworCQlqID0gKGorc1tpXSkgJiAweGZmOworCQlTU1dBUChpLGopOworCQlpY3Zba10gXj0gc1soc1tpXSArIHNbal0pICYgMHhmZl07CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXh0LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2YmE0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdleHQuYwpAQCAtMCwwICsxLDIwNDggQEAKKy8qIHNyYy9wODAyMTEvcDgwMjExd2V4dC5jCisqCisqIEdsdWUgY29kZSB0byBtYWtlIGxpbnV4LXdsYW4tbmcgYSBoYXBweSB3aXJlbGVzcyBleHRlbnNpb24gY2FtcGVyLgorKgorKiBvcmlnaW5hbCBhdXRob3I6ICBSZXlrIEZsb2V0ZXIgPHJleWtAc3luYWNrLmRlPgorKiBDb21wbGV0ZWx5IHJlLXdyaXR0ZW4gYnkgU29sb21vbiBQZWFjaHkgPHNvbG9tb25AbGludXgtd2xhbi5jb20+CisqCisqIENvcHlyaWdodCAoQykgMjAwMiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaWYgV0lSRUxFU1NfRVhUID4gMTIKKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFtZ210LmgiCisjaW5jbHVkZSAicDgwMjExbXNnLmgiCisjaW5jbHVkZSAicDgwMjExbWV0YXN0cnVjdC5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKyNpbmNsdWRlICJwODAyMTFpb2N0bC5oIgorI2luY2x1ZGUgInA4MDIxMXJlcS5oIgorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3cmF0ZShuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSk7CitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3ZXNzaWQobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXNzaWQpOworLyogY29tcGF0aWJpbGl0eSB0byB3aXJlbGVzcyBleHRlbnNpb25zICovCisjaWZkZWYgV0lSRUxFU1NfRVhUCisKK3N0YXRpYyBVSU5UOCBwODAyMTFfbWh6X3RvX2NoYW5uZWwoVUlOVDE2IG1oeikKK3sKKwlpZiAobWh6ID49IDUwMDApIHsKKwkJcmV0dXJuICgobWh6IC0gNTAwMCkgLyA1KTsKKwl9CisKKwlpZiAobWh6ID09IDI0ODIpCisJCXJldHVybiAxNDsKKworCWlmIChtaHogPj0gMjQwNykgeworCQlyZXR1cm4gKChtaHogLSAyNDA3KSAvIDUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgVUlOVDE2IHA4MDIxMV9jaGFubmVsX3RvX21oeihVSU5UOCBjaCwgaW50IGRvdDExYSkKK3sKKworCWlmIChjaCA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoY2ggPiAyMDApCisJCXJldHVybiAwOworCisJLyogNUcgKi8KKworCWlmIChkb3QxMWEpIHsKKwkJcmV0dXJuICg1MDAwICsgKDUgKiBjaCkpOworCX0KKworCS8qIDIuNEcgKi8KKworCWlmIChjaCA9PSAxNCkKKwkJcmV0dXJuIDI0ODQ7CisKKwlpZiAoKGNoIDwgMTQpICYmIChjaCA+IDApKSB7CisJCXJldHVybiAoMjQwNyArICg1ICogY2gpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogdGFrZW4gZnJvbSBvcmlub2NvLmMgOy0pICovCitzdGF0aWMgY29uc3QgbG9uZyBwODAyMTF3ZXh0X2NoYW5uZWxfZnJlcVtdID0geworCTI0MTIsIDI0MTcsIDI0MjIsIDI0MjcsIDI0MzIsIDI0MzcsIDI0NDIsCisJMjQ0NywgMjQ1MiwgMjQ1NywgMjQ2MiwgMjQ2NywgMjQ3MiwgMjQ4NAorfTsKKyNkZWZpbmUgTlVNX0NIQU5ORUxTIChzaXplb2YocDgwMjExd2V4dF9jaGFubmVsX2ZyZXEpIC8gc2l6ZW9mKHA4MDIxMXdleHRfY2hhbm5lbF9mcmVxWzBdKSkKKworLyogc3RlYWwgYSBzcGFyZSBiaXQgdG8gc3RvcmUgdGhlIHNoYXJlZC9vcGVuc3lzdGVtcyBzdGF0ZS4gc2hvdWxkIGRlZmF1bHQgdG8gb3BlbiBpZiBub3Qgc2V0ICovCisjZGVmaW5lIEhPU1RXRVBfU0hBUkVES0VZIEJJVDMKKworCisvKiogZnVuY3Rpb24gZGVjbGFyYXRpb25zID09PT09PT09PT09PT09PSAqLworCitzdGF0aWMgaW50IHF1YWxfYXNfcGVyY2VudChpbnQgc25yICkgeworICBpZiAoIHNuciA8PSAwICkKKyAgICByZXR1cm4gMDsKKyAgaWYgKCBzbnIgPD0gNDAgKQorICAgIHJldHVybiBzbnIqNS8yOworICByZXR1cm4gMTAwOworfQorCisKKworCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDMyIGRpZCwgVUlOVDMyIGRhdGEpCit7CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CW1zZzsKKwlwODAyMTFpdGVtX3VpbnQzMl90CQltaWJpdGVtOworCWludAlyZXN1bHQ7CisKKwlEQkZFTlRFUjsKKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKwltaWJpdGVtLmRpZCA9IGRpZDsKKwltaWJpdGVtLmRhdGEgPSBkYXRhOworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9hdXRvam9pbih3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90ICAgICBtc2c7CisJc3RydWN0IGl3X3BvaW50CQkJZGF0YTsKKwljaGFyIHNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOworCisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJLyogR2V0IEVTU0lEICovCisJcmVzdWx0ID0gcDgwMjExd2V4dF9naXdlc3NpZCh3bGFuZGV2LT5uZXRkZXYsIE5VTEwsICZkYXRhLCBzc2lkKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworCWlmICggd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfU0hBUkVES0VZICkKKwkgIG1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleTsKKwllbHNlCisJICBtc2cuYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19vcGVuc3lzdGVtOworCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfbG54cmVxX2F1dG9qb2luOworCisJLyogVHJpbSB0aGUgbGFzdCAnXDAnIHRvIGZpdCB0aGUgU1NJRCBmb3JtYXQgKi8KKworCWlmIChkYXRhLmxlbmd0aCAmJiBzc2lkW2RhdGEubGVuZ3RoLTFdID09ICdcMCcpIHsKKwkJZGF0YS5sZW5ndGggPSBkYXRhLmxlbmd0aCAtIDE7CisJfQorCisJbWVtY3B5KG1zZy5zc2lkLmRhdGEuZGF0YSwgc3NpZCwgZGF0YS5sZW5ndGgpOworCW1zZy5zc2lkLmRhdGEubGVuID0gZGF0YS5sZW5ndGg7CisKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKK2V4aXQ6CisKKwlEQkZFWElUOworCXJldHVybiBlcnI7CisKK30KKworLyogY2FsbGVkIGJ5IC9wcm9jL25ldC93aXJlbGVzcyAqLworc3RydWN0IGl3X3N0YXRpc3RpY3MqIHA4MDIxMXdleHRfZ2V0X3dpcmVsZXNzX3N0YXRzIChuZXRkZXZpY2VfdCAqZGV2KQoreworCXA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3QgIHF1YWxpdHk7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXN0cnVjdCBpd19zdGF0aXN0aWNzKiB3c3RhdHMgPSAmd2xhbmRldi0+d3N0YXRzOworCWludCByZXR2YWw7CisKKwlEQkZFTlRFUjsKKwkvKiBDaGVjayAqLworCWlmICggKHdsYW5kZXYgPT0gTlVMTCkgfHwgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX1JVTk5JTkcpICkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBYWFggT25seSB2YWxpZCBpbiBzdGF0aW9uIG1vZGUgKi8KKwl3c3RhdHMtPnN0YXR1cyA9IDA7CisKKwkvKiBidWlsZCByZXF1ZXN0IG1lc3NhZ2UgKi8KKwlxdWFsaXR5Lm1zZ2NvZGUgPSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eTsKKwlxdWFsaXR5LmRibS5kYXRhID0gUDgwMjExRU5VTV90cnV0aF90cnVlOworCXF1YWxpdHkuZGJtLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCS8qIHNlbmQgbWVzc2FnZSB0byBuc2QgKi8KKwlpZiAoIHdsYW5kZXYtPm1sbWVyZXF1ZXN0ID09IE5VTEwgKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHZhbCA9IHdsYW5kZXYtPm1sbWVyZXF1ZXN0KHdsYW5kZXYsIChwODAyMTFtc2dfdCopICZxdWFsaXR5KTsKKworCXdzdGF0cy0+cXVhbC5xdWFsID0gcXVhbF9hc19wZXJjZW50KHF1YWxpdHkubGluay5kYXRhKTsgICAgLyogb3ZlcmFsbCBsaW5rIHF1YWxpdHkgKi8KKwl3c3RhdHMtPnF1YWwubGV2ZWwgPSBxdWFsaXR5LmxldmVsLmRhdGE7ICAvKiBpbnN0YW50IHNpZ25hbCBsZXZlbCAqLworCXdzdGF0cy0+cXVhbC5ub2lzZSA9IHF1YWxpdHkubm9pc2UuZGF0YTsgIC8qIGluc3RhbnQgbm9pc2UgbGV2ZWwgKi8KKworI2lmIFdJUkVMRVNTX0VYVCA+IDE4CisJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9VUERBVEVEIHwgSVdfUVVBTF9EQk07CisjZWxzZQorCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gNzsKKyNlbmRpZgorCXdzdGF0cy0+ZGlzY2FyZC5jb2RlID0gd2xhbmRldi0+cnguZGVjcnlwdF9lcnI7CisJd3N0YXRzLT5kaXNjYXJkLm53aWQgPSAwOworCXdzdGF0cy0+ZGlzY2FyZC5taXNjID0gMDsKKworI2lmIFdJUkVMRVNTX0VYVCA+IDExCisJd3N0YXRzLT5kaXNjYXJkLmZyYWdtZW50ID0gMDsgIC8vIGluY29tcGxldGUgZnJhZ21lbnRzCisJd3N0YXRzLT5kaXNjYXJkLnJldHJpZXMgPSAwOyAgIC8vIHR4IHJldHJpZXMuCisJd3N0YXRzLT5taXNzLmJlYWNvbiA9IDA7CisjZW5kaWYKKworCURCRkVYSVQ7CisKKwlyZXR1cm4gd3N0YXRzOworfQorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3bmFtZShuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIGNoYXIgKm5hbWUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpd19wYXJhbSByYXRlOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IHA4MDIxMXdleHRfZ2l3cmF0ZShkZXYsIE5VTEwsICZyYXRlLCBOVUxMKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworCXN3aXRjaCAocmF0ZS52YWx1ZSkgeworCWNhc2UgMTAwMDAwMDoKKwljYXNlIDIwMDAwMDA6CisJCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTEtRFMiKTsKKwkJYnJlYWs7CisJY2FzZSA1NTAwMDAwOgorCWNhc2UgMTEwMDAwMDA6CisJCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTEtYiIpOworCQlicmVhazsKKwl9CitleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd2ZyZXEobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCisJREJGRU5URVI7CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbDsKKwltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KCZtaWJpdGVtLCAmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCBzaXplb2YobWliaXRlbSkpOworCisJaWYgKG1pYml0ZW0uZGF0YSA+IE5VTV9DSEFOTkVMUykgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogY29udmVydCBpbnRvIGZyZXF1ZW5jeSBpbnN0ZWFkIG9mIGEgY2hhbm5lbCAqLworCWZyZXEtPmUgPSAxOworCWZyZXEtPm0gPSBwODAyMTFfY2hhbm5lbF90b19taHoobWliaXRlbS5kYXRhLCAwKSAqIDEwMDAwMDsKKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3ZnJlcShuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisKKwlEQkZFTlRFUjsKKworCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CisJCWVyciA9ICgtRU9QTk9UU1VQUCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CisJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbDsKKwltaWJpdGVtLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCWlmICggKGZyZXEtPmUgPT0gMCkgJiYgKGZyZXEtPm0gPD0gMTAwMCkgKQorCQltaWJpdGVtLmRhdGEgPSBmcmVxLT5tOworCWVsc2UKKwkJbWliaXRlbS5kYXRhID0gcDgwMjExX21oel90b19jaGFubmVsKGZyZXEtPm0pOworCisJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCisjaWYgV0lSRUxFU1NfRVhUID4gOAorCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3bW9kZShuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisKKwlEQkZFTlRFUjsKKworCXN3aXRjaCAod2xhbmRldi0+bWFjbW9kZSkgeworCWNhc2UgV0xBTl9NQUNNT0RFX0lCU1NfU1RBOgorCQkqbW9kZSA9IElXX01PREVfQURIT0M7CisJCWJyZWFrOworCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19TVEE6CisJCSptb2RlID0gSVdfTU9ERV9JTkZSQTsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX01BQ01PREVfRVNTX0FQOgorCQkqbW9kZSA9IElXX01PREVfTUFTVEVSOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBOb3Qgc2V0IHlldC4gKi8KKwkJKm1vZGUgPSBJV19NT0RFX0FVVE87CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd21vZGUobmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlpbnQgCXJlc3VsdDsKKwlpbnQgICAgIGVyciA9IDA7CisKKwlEQkZFTlRFUjsKKworCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CisJCWVyciA9ICgtRU9QTk9UU1VQUCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoKm1vZGUgIT0gSVdfTU9ERV9BREhPQyAmJiAqbW9kZSAhPSBJV19NT0RFX0lORlJBICYmCisJICAgICptb2RlICE9IElXX01PREVfTUFTVEVSKSB7CisJCWVyciA9ICgtRU9QTk9UU1VQUCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBPcGVyYXRpb24gbW9kZSBpcyB0aGUgc2FtZSB3aXRoIGN1cnJlbnQgbW9kZSAqLworCWlmICgqbW9kZSA9PSB3bGFuZGV2LT5tYWNtb2RlKQorCQlnb3RvIGV4aXQ7CisKKwlzd2l0Y2ggKCptb2RlKSB7CisJY2FzZSBJV19NT0RFX0FESE9DOgorCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX0lCU1NfU1RBOworCQlicmVhazsKKwljYXNlIElXX01PREVfSU5GUkE6CisJCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfRVNTX1NUQTsKKwkJYnJlYWs7CisJY2FzZSBJV19NT0RFX01BU1RFUjoKKwkJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9FU1NfQVA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE5vdCBzZXQgeWV0LiAqLworCQlXTEFOX0xPR19JTkZPKCJPcGVyYXRpb24gbW9kZTogJWQgbm90IHN1cHBvcnRcbiIsICptb2RlKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8qIFNldCBPcGVyYXRpb24gbW9kZSB0byB0aGUgUE9SVCBUWVBFIFJJRCAqLworCisjd2FybmluZyAiZ2V0IHJpZCBvZiBwMm1pYiBoZXJlIgorCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCW1pYml0ZW0uZGlkID0gRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUG9ydFR5cGU7CisJbWliaXRlbS5kYXRhID0gKCptb2RlID09IElXX01PREVfQURIT0MpID8gMCA6IDE7CisJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCWlmIChyZXN1bHQpCisJCWVyciA9IC1FRkFVTFQ7CisKKyBleGl0OgorCURCRkVYSVQ7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdyYW5nZShuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKyAgICAgICAgc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7CisJaW50IGksIHZhbDsKKworCURCRkVOVEVSOworCisJLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgc2V0IHNpemUgJiB6ZXJvIGV2ZXJ5dGhpbmcgd2UgZG9uJ3QgdW5kZXJzdGFuZAorCWRhdGEtPmxlbmd0aCA9IHNpemVvZigqcmFuZ2UpOworCW1lbXNldChyYW5nZSwwLHNpemVvZigqcmFuZ2UpKTsKKworI2lmIFdJUkVMRVNTX0VYVCA+IDkKKwlyYW5nZS0+dHhwb3dlcl9jYXBhID0gSVdfVFhQT1dfREJNOworCS8vIFhYWCB3aGF0IGFib3V0IG1pbi9tYXhfcG1wLCBtaW4vbWF4X3BtdCwgZXRjLgorI2VuZGlmCisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMAorCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOworCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDEzOworCisJcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVDsKKwlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKKwlyYW5nZS0+bWluX3JldHJ5ID0gMDsKKwlyYW5nZS0+bWF4X3JldHJ5ID0gMjU1OworI2VuZGlmIC8qIFdJUkVMRVNTX0VYVCA+IDEwICovCisKKyNpZiBXSVJFTEVTU19FWFQgPiAxNgorICAgICAgICByYW5nZS0+ZXZlbnRfY2FwYVswXSA9IChJV19FVkVOVF9DQVBBX0tfMCB8ICAvL21vZGUvZnJlcS9zc2lkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXQVApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdfRVZFTlRfQ0FQQV9NQVNLKFNJT0NHSVdTQ0FOKSk7CisgICAgICAgIHJhbmdlLT5ldmVudF9jYXBhWzFdID0gSVdfRVZFTlRfQ0FQQV9LXzE7ICAvL2VuY29kZQorICAgICAgICByYW5nZS0+ZXZlbnRfY2FwYVs0XSA9IChJV19FVkVOVF9DQVBBX01BU0soSVdFVlFVQUwpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdfRVZFTlRfQ0FQQV9NQVNLKElXRVZDVVNUT00pICk7CisjZW5kaWYKKworCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBOVU1fQ0hBTk5FTFM7CisKKwkvKiBYWFggbmVlZCB0byBmaWx0ZXIgYWdhaW5zdCB0aGUgcmVndWxhdG9yeSBkb21haW4gJnwgYWN0aXZlIHNldCAqLworCXZhbCA9IDA7CisJZm9yIChpID0gMDsgaSA8IE5VTV9DSEFOTkVMUyA7IGkrKykgeworCQlyYW5nZS0+ZnJlcVt2YWxdLmkgPSBpICsgMTsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5tID0gcDgwMjExd2V4dF9jaGFubmVsX2ZyZXFbaV0gKiAxMDAwMDA7CisJCXJhbmdlLT5mcmVxW3ZhbF0uZSA9IDE7CisJCXZhbCsrOworCX0KKworCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gdmFsOworCisJLyogTWF4IG9mIC9wcm9jL25ldC93aXJlbGVzcyAqLworCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOworCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDA7CisJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMDsKKwlyYW5nZS0+c2Vuc2l0aXZpdHkgPSAzOworCS8vIFhYWCB0aGVzZSBuZWVkIHRvIGJlIG5zZC1zcGVjaWZpYyEKKworCXJhbmdlLT5taW5fcnRzID0gMDsKKwlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7CisJcmFuZ2UtPm1pbl9mcmFnID0gMjU2OworCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7CisKKwlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE5VTV9XRVBLRVlTOworCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOworCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsKKwlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOworCisJLy8gWFhYIHdoYXQgYWJvdXQgbnVtX2JpdHJhdGVzL3Rocm91Z2hwdXQ/CisJcmFuZ2UtPm51bV9iaXRyYXRlcyA9IDA7CisKKwkvKiBlc3RpbWF0ZWQgbWF4IHRocm91Z2hwdXQgKi8KKwkvLyBYWFggbmVlZCB0byBjYXAgaXQgaWYgd2UncmUgcnVubmluZyBhdCB+Mk1icHMuLgorCXJhbmdlLT50aHJvdWdocHV0ID0gNTUwMDAwMDsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd2FwKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQoreworCisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCisJREJGRU5URVI7CisKKwltZW1jcHkoYXBfYWRkci0+c2FfZGF0YSwgd2xhbmRldi0+YnNzaWQsIFdMQU5fQlNTSURfTEVOKTsKKwlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisjaWYgV0lSRUxFU1NfRVhUID4gOAorc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd2VuY29kZShuZXRkZXZpY2VfdCAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJaW50IGVyciA9IDA7CisJaW50IGk7CisKKwlEQkZFTlRFUjsKKworCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkKKwkJZXJxLT5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEOworCWVsc2UKKwkJZXJxLT5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKKworCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpCisJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7CisJZWxzZQorCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOworCisJaSA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CisKKwlpZiAoaSA9PSAtMSkKKwkJaSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSzsKKworCWlmICgoaSA8IDApIHx8IChpID49IE5VTV9XRVBLRVlTKSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJZXJxLT5mbGFncyB8PSBpICsgMTsKKworCS8qIGNvcHkgdGhlIGtleSBmcm9tIHRoZSBkcml2ZXIgY2FjaGUgYXMgdGhlIGtleXMgYXJlIHJlYWQtb25seSBNSUJzICovCisJZXJxLT5sZW5ndGggPSB3bGFuZGV2LT53ZXBfa2V5bGVuc1tpXTsKKwltZW1jcHkoa2V5LCB3bGFuZGV2LT53ZXBfa2V5c1tpXSwgZXJxLT5sZW5ndGgpOworCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdlbmNvZGUobmV0ZGV2aWNlX3QgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdAltc2c7CisJcDgwMjExaXRlbV9wc3RyMzJfdAkJcHN0cjsKKworCWludCBlcnIgPSAwOworCWludCByZXN1bHQgPSAwOworCWludCBlbmFibGUgPSAwOworCWludCBpOworCisJREJGRU5URVI7CisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIENoZWNrIHRoZSBLZXkgaW5kZXggZmlyc3QuICovCisJaWYoKGkgPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkpKSB7CisKKwkJaWYgKChpIDwgMSkgfHwgKGkgPiBOVU1fV0VQS0VZUykpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJZWxzZQorCQkJaS0tOworCisJCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwgaSk7CisKKwkJaWYgKHJlc3VsdCkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQllbHNlIHsKKwkJCWVuYWJsZSA9IDE7CisJCX0KKworCX0KKwllbHNlIHsKKwkJLy8gRG8gbm90IHRoaW5nIHdoZW4gbm8gS2V5IEluZGV4CisJfQorCisJLyogQ2hlY2sgaWYgdGhlcmUgaXMgbm8ga2V5IGluZm9ybWF0aW9uIGluIHRoZSBpd2NvbmZpZyByZXF1ZXN0ICovCisJaWYoKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfTk9LRVkpID09IDAgJiYgZW5hYmxlID09IDEpIHsKKworCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkgKiBJZiB0aGVyZSBpcyBXRVAgS2V5IGZvciBzZXR0aW5nLCBjaGVjayB0aGUgS2V5IEluZm9ybWF0aW9uCisJCSAqIGFuZCB0aGVuIHNldCBpdCB0byB0aGUgZmlybXdhcmUuCisJCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCQlpZiAoZXJxLT5sZW5ndGggPiAwKSB7CisKKwkJCS8qIGNvcHkgdGhlIGtleSBmcm9tIHRoZSBkcml2ZXIgY2FjaGUgYXMgdGhlIGtleXMgYXJlIHJlYWQtb25seSBNSUJzICovCisJCQl3bGFuZGV2LT53ZXBfa2V5bGVuc1tpXSA9IGVycS0+bGVuZ3RoOworCQkJbWVtY3B5KHdsYW5kZXYtPndlcF9rZXlzW2ldLCBrZXksIGVycS0+bGVuZ3RoKTsKKworCQkJLyogUHJlcGFyZSBkYXRhIHN0cnV0dXJlIGZvciBwODAyMTFyZXFfZG9yZXF1ZXN0LiAqLworCQkJbWVtY3B5KHBzdHIuZGF0YS5kYXRhLCBrZXksIGVycS0+bGVuZ3RoKTsKKwkJCXBzdHIuZGF0YS5sZW4gPSBlcnEtPmxlbmd0aDsKKworCQkJc3dpdGNoKGkpCisJCQl7CisJCQkJY2FzZSAwOgorCQkJCQlwc3RyLmRpZCA9IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MDsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDE6CisJCQkJCXBzdHIuZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgMjoKKwkJCQkJcHN0ci5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTI7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSAzOgorCQkJCQlwc3RyLmRpZCA9IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MzsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQllcnIgPSAtRUlOVkFMOworCQkJCQlnb3RvIGV4aXQ7CisJCQl9CisKKwkJCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKwkJCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmcHN0ciwgc2l6ZW9mKHBzdHIpKTsKKwkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworCQkJaWYgKHJlc3VsdCkgeworCQkJCWVyciA9IC1FRkFVTFQ7CisJCQkJZ290byBleGl0OworCQkJfQorCQl9CisKKwl9CisKKwkvKiBDaGVjayB0aGUgUHJpdmFjeUludm9rZWQgZmxhZyAqLworCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSB7CisJCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKTsKKwl9CisJZWxzZSBpZigoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9FTkFCTEVEKSB8fCBlbmFibGUgPT0gMSkgeworCQlyZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKKwl9CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBDaGVjayB0aGUgRXhjbHVkZVVuZW5jcnlwdGVkIGZsYWcgKi8KKwlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKSB7CisJCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKKwl9CisJZWxzZSBpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKSB7CisJCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisJfQorCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisgZXhpdDoKKworCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd2Vzc2lkKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKworCURCRkVOVEVSOworCisJaWYgKHdsYW5kZXYtPnNzaWQubGVuKSB7CisJCWRhdGEtPmxlbmd0aCA9IHdsYW5kZXYtPnNzaWQubGVuOworCQlkYXRhLT5mbGFncyA9IDE7CisJCW1lbWNweShlc3NpZCwgd2xhbmRldi0+c3NpZC5kYXRhLCBkYXRhLT5sZW5ndGgpOworCQllc3NpZFtkYXRhLT5sZW5ndGhdID0gMDsKKyNpZiAoV0lSRUxFU1NfRVhUIDwgMjEpCisJCWRhdGEtPmxlbmd0aCsrOworI2VuZGlmCisJfSBlbHNlIHsKKwkgIAltZW1zZXQoZXNzaWQsIDAsIHNpemVvZih3bGFuZGV2LT5zc2lkLmRhdGEpKTsKKwkJZGF0YS0+bGVuZ3RoID0gMDsKKwkJZGF0YS0+ZmxhZ3MgPSAwOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdlc3NpZChuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90ICAgICBtc2c7CisKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCWludCBsZW5ndGggPSBkYXRhLT5sZW5ndGg7CisKKwlEQkZFTlRFUjsKKworCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CisJCWVyciA9ICgtRU9QTk9UU1VQUCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKworCWlmICggd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfU0hBUkVES0VZICkKKwkgIG1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleTsKKwllbHNlCisJICBtc2cuYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19vcGVuc3lzdGVtOworCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfbG54cmVxX2F1dG9qb2luOworCisjaWYgKFdJUkVMRVNTX0VYVCA8IDIxKQorCWlmIChsZW5ndGgpIGxlbmd0aC0tOworI2VuZGlmCisKKwkvKiBUcmltIHRoZSBsYXN0ICdcMCcgdG8gZml0IHRoZSBTU0lEIGZvcm1hdCAqLworCisJaWYgKGxlbmd0aCAmJiBlc3NpZFtsZW5ndGgtMV0gPT0gJ1wwJykgeworCSAgbGVuZ3RoLS07CisJfQorCisJbWVtY3B5KG1zZy5zc2lkLmRhdGEuZGF0YSwgZXNzaWQsIGxlbmd0aCk7CisJbXNnLnNzaWQuZGF0YS5sZW4gPSBsZW5ndGg7CisKKwlXTEFOX0xPR19ERUJVRygxLCJhdXRvam9pbl9zc2lkIGZvciAlcyBcbiIsZXNzaWQpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKyAgICAgICAgV0xBTl9MT0dfREVCVUcoMSwiYXV0b2pvaW5fc3NpZCAlZFxuIixyZXN1bHQpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd2NvbW1pdChuZXRkZXZpY2VfdCAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJaW50IGVyciA9IDA7CisKKwlEQkZFTlRFUjsKKworCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CisJCWVyciA9ICgtRU9QTk9UU1VQUCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBBdXRvIEpvaW4gKi8KKwllcnIgPSBwODAyMTF3ZXh0X2F1dG9qb2luKHdsYW5kZXYpOworCisgZXhpdDoKKyAJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdyYXRlKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OworCW1pYml0ZW0uZGlkID0gRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTsKKwltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KCZtaWJpdGVtLCAmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCBzaXplb2YobWliaXRlbSkpOworCisJcnJxLT5maXhlZCA9IDA7ICAgLyogY2FuIGl0IGNoYW5nZT8gKi8KKwlycnEtPmRpc2FibGVkID0gMDsKKwlycnEtPnZhbHVlID0gMDsKKworI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzEJCQkoKFVJTlQxNikxKQorI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzIJCQkoKFVJTlQxNikyKQorI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzVkb3Q1CQkJKChVSU5UMTYpNCkKKyNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF8xMQkJCSgoVUlOVDE2KTgpCisKKwlzd2l0Y2ggKG1pYml0ZW0uZGF0YSkgeworCWNhc2UgSEZBMzg0eF9SQVRFQklUXzE6CisJCXJycS0+dmFsdWUgPSAxMDAwMDAwOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfUkFURUJJVF8yOgorCQlycnEtPnZhbHVlID0gMjAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBIRkEzODR4X1JBVEVCSVRfNWRvdDU6CisJCXJycS0+dmFsdWUgPSA1NTAwMDAwOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfUkFURUJJVF8xMToKKwkJcnJxLT52YWx1ZSA9IDExMDAwMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCX0KKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3J0cyhuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJ0cywgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCisJREJGRU5URVI7CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVJUU1RocmVzaG9sZDsKKwltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KCZtaWJpdGVtLCAmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCBzaXplb2YobWliaXRlbSkpOworCisJcnRzLT52YWx1ZSA9IG1pYml0ZW0uZGF0YTsKKwlydHMtPmRpc2FibGVkID0gKHJ0cy0+dmFsdWUgPT0gMjM0Nyk7CisJcnRzLT5maXhlZCA9IDE7CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3cnRzKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisKKwlEQkZFTlRFUjsKKworCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CisJCWVyciA9ICgtRU9QTk9UU1VQUCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVJUU1RocmVzaG9sZDsKKwlpZiAocnRzLT5kaXNhYmxlZCkKKwkJbWliaXRlbS5kYXRhID0gMjM0NzsKKwllbHNlCisJCW1pYml0ZW0uZGF0YSA9IHJ0cy0+dmFsdWU7CisKKwltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdmcmFnKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisKKwlEQkZFTlRFUjsKKworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKKwltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExRnJhZ21lbnRhdGlvblRocmVzaG9sZDsKKwltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KCZtaWJpdGVtLCAmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCBzaXplb2YobWliaXRlbSkpOworCisJZnJhZy0+dmFsdWUgPSBtaWJpdGVtLmRhdGE7CisJZnJhZy0+ZGlzYWJsZWQgPSAoZnJhZy0+dmFsdWUgPT0gMjM0Nik7CisJZnJhZy0+Zml4ZWQgPSAxOworCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdmcmFnKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisKKwlEQkZFTlRFUjsKKworCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CisJCWVyciA9ICgtRU9QTk9UU1VQUCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CisJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CisKKwlpZiAoZnJhZy0+ZGlzYWJsZWQpCisJCW1pYml0ZW0uZGF0YSA9IDIzNDY7CisJZWxzZQorCQltaWJpdGVtLmRhdGEgPSBmcmFnLT52YWx1ZTsKKworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworI2VuZGlmICAvKiBXSVJFTEVTU19FWFQgPiA4ICovCisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMAorCisjaWZuZGVmIElXX1JFVFJZX0xPTkcKKyNkZWZpbmUgSVdfUkVUUllfTE9ORyBJV19SRVRSWV9NQVgKKyNlbmRpZgorCisjaWZuZGVmIElXX1JFVFJZX1NIT1JUCisjZGVmaW5lIElXX1JFVFJZX1NIT1JUIElXX1JFVFJZX01JTgorI2VuZGlmCisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdyZXRyeShuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKwlVSU5UMTYgc2hvcnRyZXRyeSwgbG9uZ3JldHJ5LCBsaWZldGltZTsKKworCURCRkVOVEVSOworCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OworCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQ7CisKKwltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KCZtaWJpdGVtLCAmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCBzaXplb2YobWliaXRlbSkpOworCisJc2hvcnRyZXRyeSA9IG1pYml0ZW0uZGF0YTsKKworCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFMb25nUmV0cnlMaW1pdDsKKworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwlsb25ncmV0cnkgPSBtaWJpdGVtLmRhdGE7CisKKwltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4VHJhbnNtaXRNU0RVTGlmZXRpbWU7CisKKwltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJaWYgKHJlc3VsdCkgeworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KCZtaWJpdGVtLCAmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCBzaXplb2YobWliaXRlbSkpOworCisJbGlmZXRpbWUgPSBtaWJpdGVtLmRhdGE7CisKKwlycnEtPmRpc2FibGVkID0gMDsKKworCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX1RZUEUpID09IElXX1JFVFJZX0xJRkVUSU1FKSB7CisJCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSUZFVElNRTsKKwkJcnJxLT52YWx1ZSA9IGxpZmV0aW1lICogMTAyNDsKKwl9IGVsc2UgeworCQlpZiAocnJxLT5mbGFncyAmIElXX1JFVFJZX0xPTkcpIHsKKwkJCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX0xPTkc7CisJCQlycnEtPnZhbHVlID0gbG9uZ3JldHJ5OworCQl9IGVsc2UgeworCQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCQkJcnJxLT52YWx1ZSA9IHNob3J0cmV0cnk7CisJCQlpZiAoc2hvcnRyZXRyeSAhPSBsb25ncmV0cnkpCisJCQkJcnJxLT5mbGFncyB8PSBJV19SRVRSWV9TSE9SVDsKKwkJfQorCX0KKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworCit9CisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdyZXRyeShuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChycnEtPmRpc2FibGVkKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CisKKwlpZiAoKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9UWVBFKSA9PSBJV19SRVRSWV9MSUZFVElNRSkgeworCQltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4VHJhbnNtaXRNU0RVTGlmZXRpbWU7CisJCW1pYml0ZW0uZGF0YSA9ICBycnEtPnZhbHVlIC89IDEwMjQ7CisKKwkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOworCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwkJaWYgKHJlc3VsdCkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChycnEtPmZsYWdzICYgSVdfUkVUUllfTE9ORykgeworCQkJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0OworCQkJbWliaXRlbS5kYXRhID0gcnJxLT52YWx1ZTsKKworCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOworCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJCQlpZiAocmVzdWx0KSB7CisJCQkJZXJyID0gLUVGQVVMVDsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCX0KKworCQlpZiAocnJxLT5mbGFncyAmIElXX1JFVFJZX1NIT1JUKSB7CisJCQltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRSZXRyeUxpbWl0OworCQkJbWliaXRlbS5kYXRhID0gcnJxLT52YWx1ZTsKKworCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOworCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAoVUlOVDgqKSZtc2cpOworCisJCQlpZiAocmVzdWx0KSB7CisJCQkJZXJyID0gLUVGQVVMVDsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCX0KKwl9CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKKworfQorCisjZW5kaWYgLyogV0lSRUxFU1NfRVhUID4gMTAgKi8KKworI2lmIFdJUkVMRVNTX0VYVCA+IDkKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXd0eHBvdyhuZXRkZXZpY2VfdCAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworICAgICAgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisgICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKKyAgICAgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisgICAgICAgIGludCByZXN1bHQ7CisgICAgICAgIGludCBlcnIgPSAwOworCisgICAgICAgIERCRkVOVEVSOworCisgICAgICAgaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKKyAgICAgICAgICAgICAgICBlcnIgPSAoLUVPUE5PVFNVUFApOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIG1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKworICAgICAgICBzd2l0Y2ggKHJycS0+dmFsdWUpIHsKKworICAgICAgICAgIGNhc2UgMSA6IG1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAyIDogbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWwyOyBicmVhazsKKyAgICAgICAgICBjYXNlIDMgOiBtaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDM7IGJyZWFrOworICAgICAgICAgIGNhc2UgNCA6IG1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNDsgYnJlYWs7CisgICAgICAgICAgY2FzZSA1IDogbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw1OyBicmVhazsKKyAgICAgICAgICBjYXNlIDYgOiBtaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDY7IGJyZWFrOworICAgICAgICAgIGNhc2UgNyA6IG1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNzsgYnJlYWs7CisgICAgICAgICAgY2FzZSA4IDogbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw4OyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBtaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDg7IGJyZWFrOworCX0KKworICAgICAgICBtZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7CisgICAgICAgIHJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgZXJyID0gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworIGV4aXQ6CisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXd0eHBvdyhuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OworCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbDsKKworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIChVSU5UOCopJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1jcHkoJm1pYml0ZW0sICZtc2cubWliYXR0cmlidXRlLmRhdGEsIHNpemVvZihtaWJpdGVtKSk7CisKKwkvLyBYWFggaGFuZGxlIE9GRiBieSBzZXR0aW5nIGRpc2FibGVkID0gMTsKKworCXJycS0+ZmxhZ3MgPSAwOyAvLyBJV19UWFBPV19EQk07CisJcnJxLT5kaXNhYmxlZCA9IDA7CisJcnJxLT5maXhlZCA9IDA7CisJcnJxLT52YWx1ZSA9IG1pYml0ZW0uZGF0YTsKKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorI2VuZGlmIC8qIFdJUkVMRVNTX0VYVCA+IDkgKi8KKworc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd3NweShuZXRkZXZpY2VfdCAqZGV2LAorCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgYWRkcmVzc1tJV19NQVhfU1BZXTsKKyAgICAgICAgaW50IG51bWJlciA9IHNycS0+bGVuZ3RoOworICAgICAgICBpbnQgaTsKKworCURCRkVOVEVSOworCisJLyogQ29weSB0aGUgZGF0YSBmcm9tIHRoZSBpbnB1dCBidWZmZXIgKi8KKwltZW1jcHkoYWRkcmVzcywgZXh0cmEsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKm51bWJlcik7CisKKyAgICAgICAgd2xhbmRldi0+c3B5X251bWJlciA9IDA7CisKKyAgICAgICAgaWYgKG51bWJlciA+IDApIHsKKworICAgICAgICAgICAgICAgIC8qIGV4dHJhY3QgdGhlIGFkZHJlc3NlcyAqLworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgeworCisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkod2xhbmRldi0+c3B5X2FkZHJlc3NbaV0sIGFkZHJlc3NbaV0uc2FfZGF0YSwgRVRIX0FMRU4pOworCQl9CisKKyAgICAgICAgICAgICAgICAvKiByZXNldCBzdGF0cyAqLworICAgICAgICAgICAgICAgIG1lbXNldCh3bGFuZGV2LT5zcHlfc3RhdCwgMCwgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSAqIElXX01BWF9TUFkpOworCisgICAgICAgICAgICAgICAgLyogc2V0IG51bWJlciBvZiBhZGRyZXNzZXMgKi8KKyAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfbnVtYmVyID0gbnVtYmVyOworICAgICAgICB9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisvKiBqa3JpZWdsOiBmcm9tIG9yaW5vY28sIG1vZGlmaWVkICovCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3c3B5KG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqc3JxLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisKKyAgICAgICAgc3RydWN0IHNvY2thZGRyIGFkZHJlc3NbSVdfTUFYX1NQWV07CisgICAgICAgIHN0cnVjdCBpd19xdWFsaXR5IHNweV9zdGF0W0lXX01BWF9TUFldOworICAgICAgICBpbnQgbnVtYmVyOworICAgICAgICBpbnQgaTsKKworCURCRkVOVEVSOworCisgICAgICAgIG51bWJlciA9IHdsYW5kZXYtPnNweV9udW1iZXI7CisKKyAgICAgICAgaWYgKG51bWJlciA+IDApIHsKKworICAgICAgICAgICAgICAgIC8qIHBvcHVsYXRlIGFkZHJlc3MgYW5kIHNweSBzdHJ1Y3QncyAqLworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGFkZHJlc3NbaV0uc2FfZGF0YSwgd2xhbmRldi0+c3B5X2FkZHJlc3NbaV0sIEVUSF9BTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NbaV0uc2FfZmFtaWx5ID0gQUZfVU5JWDsKKyAgICAgICAgICAgICAgICAJbWVtY3B5KCZzcHlfc3RhdFtpXSwgJndsYW5kZXYtPnNweV9zdGF0W2ldLCBzaXplb2Yoc3RydWN0IGl3X3F1YWxpdHkpKTsKKyAgICAgICAgICAgICAgICB9CisKKwkJLyogcmVzZXQgdXBkYXRlIGZsYWcgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IG51bWJlcjsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgd2xhbmRldi0+c3B5X3N0YXRbaV0udXBkYXRlZCA9IDA7CisgICAgICAgIH0KKworICAgICAgICAvKiBwdXNoIHN0dWZmIHRvIHVzZXIgc3BhY2UgKi8KKyAgICAgICAgc3JxLT5sZW5ndGggPSBudW1iZXI7CisJbWVtY3B5KGV4dHJhLCBhZGRyZXNzLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSpudW1iZXIpOworCW1lbWNweShleHRyYStzaXplb2Yoc3RydWN0IHNvY2thZGRyKSpudW1iZXIsIHNweV9zdGF0LCBzaXplb2Yoc3RydWN0IGl3X3F1YWxpdHkpKm51bWJlcik7CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByaXNtMl9yZXN1bHQyZXJyIChpbnQgcHJpc20yX3Jlc3VsdCkKK3sKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAocHJpc20yX3Jlc3VsdCkgeworCQljYXNlIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM6CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCWNhc2UgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU6CisJCQllcnIgPSAtRUlPOworCQkJYnJlYWs7CisJCWNhc2UgUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ6CisJCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyID0gMDsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMworc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd3NjYW4obmV0ZGV2aWNlX3QgKmRldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKwlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90CW1zZzsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCWludCBpID0gMDsKKworCURCRkVOVEVSOworCisJaWYgKHdsYW5kZXYtPm1hY21vZGUgPT0gV0xBTl9NQUNNT0RFX0VTU19BUCkgeworCQlXTEFOX0xPR19FUlJPUigiQ2FuJ3Qgc2NhbiBpbiBBUCBtb2RlXG4iKTsKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJZ290byBleGl0OworCX0KKworCW1lbXNldCgmbXNnLCAweDAwLCBzaXplb2YocDgwMjExbXNnX2RvdDExcmVxX3NjYW5fdCkpOworCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX3NjYW47CisJbXNnLmJzc3R5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYnNzdHlwZV9hbnk7CisKKwltZW1zZXQoJihtc2cuYnNzaWQuZGF0YSksIDB4RkYsIHNpemVvZiAocDgwMjExaXRlbV9wc3RyNl90KSk7CisJbXNnLmJzc2lkLmRhdGEubGVuID0gNjsKKworCW1zZy5zY2FudHlwZS5kYXRhID0gUDgwMjExRU5VTV9zY2FudHlwZV9hY3RpdmU7CisJbXNnLnByb2JlZGVsYXkuZGF0YSA9IDA7CisKKwlmb3IgKGkgPSAxOyBpIDw9IDE0OyBpKyspCisJCW1zZy5jaGFubmVsbGlzdC5kYXRhLmRhdGFbaS0xXSA9IGk7CisJbXNnLmNoYW5uZWxsaXN0LmRhdGEubGVuID0gMTQ7CisKKwltc2cubWF4Y2hhbm5lbHRpbWUuZGF0YSA9IDI1MDsKKwltc2cubWluY2hhbm5lbHRpbWUuZGF0YSA9IDIwMDsKKworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKwlpZiAocmVzdWx0KQorCQllcnIgPSBwcmlzbTJfcmVzdWx0MmVyciAobXNnLnJlc3VsdGNvZGUuZGF0YSk7CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIGVycjsKK30KKworCisvKiBIZWxwZXIgdG8gdHJhbnNsYXRlIHNjYW4gaW50byBXaXJlbGVzcyBFeHRlbnNpb25zIHNjYW4gcmVzdWx0cy4KKyAqIEluc3BpcmVkIGJ5IHRoZSBwcmlzbTU0IGNvZGUsIHdoaWNoIHdhcyBpbiB0dXJuIGluc3BpcmVkIGJ5IHRoZQorICogYWlybyBkcml2ZXIgY29kZS4KKyAqLworc3RhdGljIGNoYXIgKgord2V4dF90cmFuc2xhdGVfYnNzKHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKmN1cnJlbnRfZXYsCisJCSAgIGNoYXIgKmVuZF9idWYsIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdCAqYnNzKQoreworCXN0cnVjdCBpd19ldmVudCBpd2U7CS8qIFRlbXBvcmFyeSBidWZmZXIgKi8KKworCS8qIFRoZSBmaXJzdCBlbnRyeSBtdXN0IGJlIHRoZSBNQUMgYWRkcmVzcyAqLworCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YnNzaWQuZGF0YS5kYXRhLCBXTEFOX0JTU0lEX0xFTik7CisJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJaXdlLmNtZCA9IFNJT0NHSVdBUDsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOworCisJLyogVGhlIGZvbGxvd2luZyBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBzYW1lIG9yZGVyIHdlIGdpdmUgdGhlbSAqLworCisJLyogVGhlIEVTU0lELiAqLworCWlmIChic3MtPnNzaWQuZGF0YS5sZW4gPiAwKSB7CisJCWNoYXIgZXNzaWRbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKKwkJaW50IHNpemU7CisKKwkJc2l6ZSA9IHdsYW5fbWluKElXX0VTU0lEX01BWF9TSVpFLCBic3MtPnNzaWQuZGF0YS5sZW4pOworCQltZW1zZXQoJmVzc2lkLCAwLCBzaXplb2YgKGVzc2lkKSk7CisJCW1lbWNweSgmZXNzaWQsIGJzcy0+c3NpZC5kYXRhLmRhdGEsIHNpemUpOworCQlXTEFOX0xPR19ERUJVRygxLCAiIGVzc2lkIHNpemUgPSAlZFxuIiwgc2l6ZSk7CisJCWl3ZS51LmRhdGEubGVuZ3RoID0gc2l6ZTsKKwkJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCAmZXNzaWRbMF0pOworCQlXTEFOX0xPR19ERUJVRygxLCAiIGVzc2lkIHNpemUgT0suXG4iKTsKKwl9CisKKwlzd2l0Y2ggKGJzcy0+YnNzdHlwZS5kYXRhKSB7CisJCWNhc2UgUDgwMjExRU5VTV9ic3N0eXBlX2luZnJhc3RydWN0dXJlOgorCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOworCQkJYnJlYWs7CisKKwkJY2FzZSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQ6CisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlpd2UudS5tb2RlID0gMDsKKwkJCWJyZWFrOworCX0KKwlpd2UuY21kID0gU0lPQ0dJV01PREU7CisJaWYgKGl3ZS51Lm1vZGUpCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisKKwkvKiBFbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KKwlpZiAoYnNzLT5wcml2YWN5LmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQorCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7CisJZWxzZQorCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKKwlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgTlVMTCk7CisKKwkvKiBBZGQgZnJlcXVlbmN5LiAoc2hvcnQpIGJzcy0+Y2hhbm5lbCBpcyB0aGUgZnJlcXVlbmN5IGluIE1IeiAqLworCWl3ZS51LmZyZXEubSA9IGJzcy0+ZHNjaGFubmVsLmRhdGE7CisJaXdlLnUuZnJlcS5lID0gMDsKKwlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKKworCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MgKi8KKwlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5zaWduYWwuZGF0YTsKKwlpd2UudS5xdWFsLm5vaXNlID0gYnNzLT5ub2lzZS5kYXRhOworCS8qIGRvIGEgc2ltcGxlIFNOUiBmb3IgcXVhbGl0eSAqLworCWl3ZS51LnF1YWwucXVhbCA9IHF1YWxfYXNfcGVyY2VudChic3MtPnNpZ25hbC5kYXRhIC0gYnNzLT5ub2lzZS5kYXRhKTsKKwlpd2UuY21kID0gSVdFVlFVQUw7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKworCXJldHVybiBjdXJyZW50X2V2OworfQorCisKK3N0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdzY2FuKG5ldGRldmljZV90ICpkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqc3JxLCBjaGFyICpleHRyYSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190CW1zZzsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgaSA9IDA7CisJaW50IHNjYW5fZ29vZCA9IDA7CisJY2hhciAqY3VycmVudF9ldiA9IGV4dHJhOworCisJREJGRU5URVI7CisKKwkvKiBTaW5jZSB3aXJlbGVzcyB0b29scyBkb2Vzbid0IHJlYWxseSBoYXZlIGEgd2F5IG9mIHBhc3NpbmcgaG93CisJICogbWFueSBzY2FuIHJlc3VsdHMgcmVzdWx0cyB0aGVyZSB3ZXJlIGJhY2sgaGVyZSwga2VlcCBncmFiYmluZyB0aGVtCisJICogdW50aWwgd2UgZmFpbC4KKwkgKi8KKwlkbyB7CisJCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisJCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0czsKKwkJbXNnLmJzc2luZGV4LmRhdGEgPSBpOworCisJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKFVJTlQ4KikmbXNnKTsKKwkJaWYgKChyZXN1bHQgIT0gMCkgfHwKKwkJICAgIChtc2cucmVzdWx0Y29kZS5kYXRhICE9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKSkgeworCQkJYnJlYWs7CisJCX0KKworCQljdXJyZW50X2V2ID0gd2V4dF90cmFuc2xhdGVfYnNzKGluZm8sIGN1cnJlbnRfZXYsIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgJm1zZyk7CisJCXNjYW5fZ29vZCA9IDE7CisJCWkrKzsKKwl9IHdoaWxlIChpIDwgSVdfTUFYX0FQKTsKKworCXNycS0+bGVuZ3RoID0gKGN1cnJlbnRfZXYgLSBleHRyYSk7CisJc3JxLT5mbGFncyA9IDA7CS8qIHRvZG8gKi8KKworCWlmIChyZXN1bHQgJiYgIXNjYW5fZ29vZCkKKwkJZXJyID0gcHJpc20yX3Jlc3VsdDJlcnIgKG1zZy5yZXN1bHRjb2RlLmRhdGEpOworCisJREJGRVhJVDsKKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vZXh0cmEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBzdHVmZiB0byBzdXBwb3J0IE5ldHdvcmtNYW5hZ2VyIChJIGhvcGUpCisKKyNpZiBXSVJFTEVTU19FWFQgPiAxNworLyogU0lPQ1NJV0VOQ09ERUVYVCAqLworc3RhdGljIGludCBwODAyMTF3ZXh0X3NldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworICB3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisgIHN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QJbXNnOworCXA4MDIxMWl0ZW1fcHN0cjMyX3QJCSpwc3RyOworCisgIGludCByZXN1bHQgPSAwOworICBzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOworICBpbnQgaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOworCisgIFdMQU5fTE9HX0RFQlVHKDEsInNldF9lbmNvZGVfZXh0IGZsYWdzWyVkXSBhbGdbJWRdIGtleWxlblslZF1cbiIsZXh0LT5leHRfZmxhZ3MsKGludClleHQtPmFsZywoaW50KWV4dC0+a2V5X2xlbik7CisKKworICBpZiAoIGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkgKSB7CisgICAgLy8gc2V0IGRlZmF1bHQga2V5ID8gSSdtIG5vdCBzdXJlIGlmIHRoaXMgdGhlIHRoZSBjb3JyZWN0IHRoaW5nIHRvIGRvIGhlcmUKKworICAgIGlmICggaWR4ICkgeworICAgICAgaWYgKGlkeCA8IDEgfHwgaWR4ID4gTlVNX1dFUEtFWVMpIHsKKwlyZXR1cm4gLUVJTlZBTDsKKyAgICAgIH0gZWxzZQorCWlkeC0tOworICAgIH0KKyAgICBXTEFOX0xPR19ERUJVRygxLCJzZXR0aW5nIGRlZmF1bHQga2V5ICglZClcbiIsaWR4KTsKKyAgICByZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQsIGlkeCk7CisgICAgaWYgKCByZXN1bHQgKQorICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgIH0KKworCisgIGlmICggZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkgKSB7CisgICAgaWYgKCAhIGV4dC0+YWxnICYgSVdfRU5DT0RFX0FMR19XRVApIHsKKyAgICAgIFdMQU5fTE9HX0RFQlVHKDEsImFza2VkIHRvIHNldCBhIG5vbiB3ZXAga2V5IDooIik7CisgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisgICAgaWYgKGlkeCkgeworICAgICAgaWYgKGlkeCA8MSB8fCBpZHggPiBOVU1fV0VQS0VZUykKKwlyZXR1cm4gLUVJTlZBTDsKKyAgICAgIGVsc2UKKwlpZHgtLTsKKyAgICB9CisgICAgV0xBTl9MT0dfREVCVUcoMSwiU2V0IFdFUCBrZXkgKCVkKVxuIixpZHgpOworICAgIHdsYW5kZXYtPndlcF9rZXlsZW5zW2lkeF0gPSBleHQtPmtleV9sZW47CisgICAgbWVtY3B5KHdsYW5kZXYtPndlcF9rZXlzW2lkeF0sIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOworCisgICAgbWVtc2V0KCAmbXNnLDAsc2l6ZW9mKG1zZykpOworICAgIHBzdHIgPSAocDgwMjExaXRlbV9wc3RyMzJfdCopJm1zZy5taWJhdHRyaWJ1dGUuZGF0YTsKKyAgICBtZW1jcHkocHN0ci0+ZGF0YS5kYXRhLCBleHQtPmtleSxleHQtPmtleV9sZW4pOworICAgIHBzdHItPmRhdGEubGVuID0gZXh0LT5rZXlfbGVuOworICAgIHN3aXRjaCAoaWR4KSB7CisgICAgY2FzZSAwOgorICAgICAgcHN0ci0+ZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgcHN0ci0+ZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOworICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgcHN0ci0+ZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyOworICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgcHN0ci0+ZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBtc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CisgICAgcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LChVSU5UOCopJm1zZyk7CisgICAgV0xBTl9MT0dfREVCVUcoMSwicmVzdWx0ICglZClcbiIscmVzdWx0KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisvKiBTSU9DR0lXRU5DT0RFRVhUICovCitzdGF0aWMgaW50IHA4MDIxMXdleHRfZ2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCisKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90KilkZXYtPnByaXY7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworCisJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgbWF4X2xlbjsKKwlpbnQgaWR4OworCisJREJGRU5URVI7CisKKwlXTEFOX0xPR19ERUJVRygxLCJnZXRfZW5jb2RlX2V4dCBmbGFnc1slZF0gYWxnWyVkXSBrZXlsZW5bJWRdXG4iLGV4dC0+ZXh0X2ZsYWdzLChpbnQpZXh0LT5hbGcsKGludClleHQtPmtleV9sZW4pOworCisKKwltYXhfbGVuID0gZW5jb2RpbmctPmxlbmd0aCAtIHNpemVvZigqZXh0KTsKKwlpZiAoIG1heF9sZW4gPD0gMCkgeworCQlXTEFOX0xPR19ERUJVRygxLCJnZXRfZW5jb2RlZXh0IG1heF9sZW4gWyVkXSBpbnZhbGlkXG4iLG1heF9sZW4pOworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKKworCVdMQU5fTE9HX0RFQlVHKDEsImdldF9lbmNvZGVfZXh0IGluZGV4IFslZF1cbiIsaWR4KTsKKworCWlmIChpZHgpIHsKKwkJaWYgKGlkeCA8IDEgfHwgaWR4ID4gTlVNX1dFUEtFWVMgKSB7CisJCQlXTEFOX0xPR19ERUJVRygxLCJnZXRfZW5jb2RlX2V4dCBpbnZhbGlkIGtleSBpbmRleCBbJWRdXG4iLGlkeCk7CisJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJZ290byBleGl0OworCQl9CisJCWlkeC0tOworCX0gZWxzZSB7CisJCS8qIGRlZmF1bHQga2V5ID8gbm90IHN1cmUgd2hhdCB0byBkbyAqLworCQkvKiB3aWxsIGp1c3QgdXNlIGtleVswXSBmb3Igbm93ICEgRklYIE1FICovCisJfQorCisJZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKKwltZW1zZXQoZXh0LDAsc2l6ZW9mKCpleHQpKTsKKworCWV4dC0+YWxnID0gSVdfRU5DT0RFX0FMR19XRVA7CisJZXh0LT5rZXlfbGVuID0gd2xhbmRldi0+d2VwX2tleWxlbnNbaWR4XTsKKwltZW1jcHkoIGV4dC0+a2V5LCB3bGFuZGV2LT53ZXBfa2V5c1tpZHhdICwgZXh0LT5rZXlfbGVuICk7CisKKwllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CitleGl0OgorCURCRkVYSVQ7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qIFNJT0NTSVdBVVRIICovCitzdGF0aWMgaW50IHA4MDIxMV93ZXh0X3NldF9pd2F1dGggKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKyAgd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworICBzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOworICBpbnQgcmVzdWx0ID0wOworCisgIFdMQU5fTE9HX0RFQlVHKDEsInNldF9pd2F1dGggZmxhZ3NbJWRdXG4iLChpbnQpcGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCApOworCisgIHN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworICBjYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKKyAgICBXTEFOX0xPR19ERUJVRygxLCJkcm9wX3VuZW5jcnlwdGVkICVkXG4iLHBhcmFtLT52YWx1ZSk7CisgICAgaWYgKHBhcmFtLT52YWx1ZSkKKyAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKKyAgICBlbHNlCisgICAgICByZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOworICAgIGJyZWFrOworCisgIGNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6CisgICAgV0xBTl9MT0dfREVCVUcoMSwicHJpdmFjeSBpbnZva2VkICVkXG4iLHBhcmFtLT52YWx1ZSk7CisgICAgaWYgKCBwYXJhbS0+dmFsdWUpCisgICAgICByZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKKyAgICBlbHNlCisgICAgICByZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisKKyAgICBicmVhazsKKworICBjYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisgICAgaWYgKCBwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSApIHsKKyAgICAgIFdMQU5fTE9HX0RFQlVHKDEsInNldCBvcGVuX3N5c3RlbVxuIik7CisgICAgICB3bGFuZGV2LT5ob3N0d2VwICY9IH5IT1NUV0VQX1NIQVJFREtFWTsKKyAgICB9IGVsc2UgaWYgKCBwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKSB7CisgICAgICBXTEFOX0xPR19ERUJVRygxLCJzZXQgc2hhcmVkIGtleVxuIik7CisgICAgICB3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfU0hBUkVES0VZOworICAgIH0gZWxzZSB7CisgICAgICAvKiBkb24ndCBrbm93IHdoYXQgdG8gZG8ga25vdyA6KCAqLworICAgICAgV0xBTl9MT0dfREVCVUcoMSwidW5rbm93biBBVVRIX0FMRyAoJWQpXG4iLHBhcmFtLT52YWx1ZSk7CisgICAgICByZXN1bHQgPSAtRUlOVkFMOworICAgIH0KKyAgICBicmVhazsKKworICBkZWZhdWx0OgorICAgIGJyZWFrOworICB9CisKKworCisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIFNJT0NTSVdBVVRIICovCitzdGF0aWMgaW50IHA4MDIxMV93ZXh0X2dldF9pd2F1dGggKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKyAgd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworICBzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOworICBpbnQgcmVzdWx0ID0wOworCisgIFdMQU5fTE9HX0RFQlVHKDEsImdldF9pd2F1dGggZmxhZ3NbJWRdXG4iLChpbnQpcGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCApOworCisgIHN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworICBjYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKKyAgICBwYXJhbS0+dmFsdWUgPSB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQ/MTowOworICAgIGJyZWFrOworCisgIGNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6CisgICAgcGFyYW0tPnZhbHVlID0gd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQ/MTowOworICAgIGJyZWFrOworCisgIGNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKyAgICBwYXJhbS0+dmFsdWUgPSB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVk/SVdfQVVUSF9BTEdfU0hBUkVEX0tFWTpJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKKyAgICBicmVhazsKKworCisgIGRlZmF1bHQ6CisgICAgYnJlYWs7CisgIH0KKworCisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisjZW5kaWYKKworCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKworCisvKgordHlwZWRlZiBpbnQgKCppd19oYW5kbGVyKShuZXRkZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7CisqLworCisjaWYgV0lSRUxFU1NfRVhUID4gMTIKK3N0YXRpYyBpd19oYW5kbGVyIHA4MDIxMXdleHRfaGFuZGxlcnNbXSA9ICB7CisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3Y29tbWl0LAkJLyogU0lPQ1NJV0NPTU1JVCAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd25hbWUsCQkvKiBTSU9DR0lXTkFNRSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXTldJRCAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXTldJRCAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd2ZyZXEsICAJCS8qIFNJT0NTSVdGUkVRICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZnJlcSwgIAkJLyogU0lPQ0dJV0ZSRVEgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdtb2RlLCAgICAgICAJCS8qIFNJT0NTSVdNT0RFICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3bW9kZSwgICAgICAgCQkvKiBTSU9DR0lXTU9ERSAqLworCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgCQkvKiBTSU9DU0lXU0VOUyAqLworCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAJCS8qIFNJT0NHSVdTRU5TICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qIG5vdCB1c2VkICovICAgICAJCS8qIFNJT0NTSVdSQU5HRSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3JhbmdlLCAgICAgIAkJLyogU0lPQ0dJV1JBTkdFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qIG5vdCB1c2VkICovICAgICAJCS8qIFNJT0NTSVdQUklWICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qIGtlcm5lbCBjb2RlICovICAgCQkvKiBTSU9DR0lXUFJJViAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiBub3QgdXNlZCAqLyAgICAgCQkvKiBTSU9DU0lXU1RBVFMgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyoga2VybmVsIGNvZGUgKi8gICAJCS8qIFNJT0NHSVdTVEFUUyAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3NweSwJCQkvKiBTSU9DU0lXU1BZICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3c3B5LAkJCS8qIFNJT0NHSVdTUFkgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAJCS8qIFNJT0NTSVdBUCAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2FwLCAgICAgICAgIAkJLyogU0lPQ0dJV0FQICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAJCS8qIFNJT0NHSVdBUExJU1QgKi8KKyNpZiBXSVJFTEVTU19FWFQgPiAxMworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3NjYW4sCQkJLyogU0lPQ1NJV1NDQU4gKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdzY2FuLAkJCS8qIFNJT0NHSVdTQ0FOICovCisjZWxzZSAvKiBXSVJFTEVTU19FWFQgPiAxMyAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBudWxsICovCQkvKiBTSU9DU0lXU0NBTiAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBudWxsICovCQkvKiBTSU9DR0lXU0NBTiAqLworI2VuZGlmIC8qIFdJUkVMRVNTX0VYVCA+IDEzICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZXNzaWQsICAJCS8qIFNJT0NTSVdFU1NJRCAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2Vzc2lkLCAgICAgIAkJLyogU0lPQ0dJV0VTU0lEICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAJCS8qIFNJT0NTSVdOSUNLTiAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2Vzc2lkLCAgICAgIAkJLyogU0lPQ0dJV05JQ0tOICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAJCS8qIFNJT0NTSVdSQVRFICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cmF0ZSwgICAgICAJCS8qIFNJT0NHSVdSQVRFICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3cnRzLCAgCQkvKiBTSU9DU0lXUlRTICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cnRzLCAgICAgICAgCQkvKiBTSU9DR0lXUlRTICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZnJhZywgICAgICAJCS8qIFNJT0NTSVdGUkFHICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZnJhZywgICAJCS8qIFNJT0NHSVdGUkFHICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3dHhwb3csICAgICAgICAgICAJLyogU0lPQ1NJV1RYUE9XICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3dHhwb3csICAJCS8qIFNJT0NHSVdUWFBPVyAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3JldHJ5LCAgICAgCQkvKiBTSU9DU0lXUkVUUlkgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdyZXRyeSwgIAkJLyogU0lPQ0dJV1JFVFJZICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZW5jb2RlLCAgICAgCQkvKiBTSU9DU0lXRU5DT0RFICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZW5jb2RlLCAgCQkvKiBTSU9DR0lXRU5DT0RFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAJCS8qIFNJT0NTSVdQT1dFUiAqLworCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgIAkJLyogU0lPQ0dJV1BPV0VSICovCisjaWYgV0lSRUxFU1NfRVhUID4gMTcKKy8qIFdQQSBvcGVyYXRpb25zICovCisKKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qIFNJT0NTSVdHRU5JRQlzZXQgZ2VuZXJpYyBJRSAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiBTSU9DR0lXR0VOSUUJZ2V0IGdlbmVyaWMgSUUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExX3dleHRfc2V0X2l3YXV0aCwgLyogU0lPQ1NJV0FVVEgJc2V0IGF1dGhlbnRpY2F0aW9uIG1vZGUgcGFyYW1zICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMV93ZXh0X2dldF9pd2F1dGgsIC8qIFNJT0NHSVdBVVRICWdldCBhdXRoZW50aWNhdGlvbiBtb2RlIHBhcmFtcyAqLworCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2V0X2VuY29kZWV4dCwgLyogU0lPQ1NJV0VOQ09ERUVYVCAgc2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dldF9lbmNvZGVleHQsIC8qIFNJT0NHSVdFTkNPREVFWFQgIGdldCBlbmNvZGluZyB0b2tlbiAmIG1vZGUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogU0lPQ1NJV1BNS1NBCVBNS1NBIGNhY2hlIG9wZXJhdGlvbiAqLworI2VuZGlmCit9OworCitzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcDgwMjExd2V4dF9oYW5kbGVyX2RlZiA9IHsKKwkubnVtX3N0YW5kYXJkID0gc2l6ZW9mKHA4MDIxMXdleHRfaGFuZGxlcnMpIC8gc2l6ZW9mKGl3X2hhbmRsZXIpLAorCS5udW1fcHJpdmF0ZSA9IDAsCisJLm51bV9wcml2YXRlX2FyZ3MgPSAwLAorICAgICAgICAuc3RhbmRhcmQgPSBwODAyMTF3ZXh0X2hhbmRsZXJzLAorCS5wcml2YXRlID0gTlVMTCwKKwkucHJpdmF0ZV9hcmdzID0gTlVMTCwKKyNpZiBXSVJFTEVTU19FWFQgPiAxNgorCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0cworI2VuZGlmCit9OworCisjZW5kaWYKKworLyogd2lyZWxlc3MgZXh0ZW5zaW9ucycgaW9jdGxzICovCitpbnQgcDgwMjExd2V4dF9zdXBwb3J0X2lvY3RsKG5ldGRldmljZV90ICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKworI2lmIFdJUkVMRVNTX0VYVCA8IDEzCisJc3RydWN0IGl3cmVxICppd3IgPSAoc3RydWN0IGl3cmVxKilpZnI7CisjZW5kaWYKKworCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKKwlpbnQgZXJyID0gMDsKKworCURCRkVOVEVSOworCisJbWliaXRlbS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKwlpZiAoIHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX1JVTk5JTkcgKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlXTEFOX0xPR19ERUJVRygxLCAiUmVjZWl2ZWQgd2lyZWxlc3MgZXh0ZW5zaW9uIGlvY3RsICMlZC5cbiIsIGNtZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworI2lmIFdJUkVMRVNTX0VYVCA8IDEzCisJY2FzZSBTSU9DU0lXTkFNRTogIC8qIHVudXNlZCAgKi8KKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXTkFNRTogLyogZ2V0IG5hbWUgPT0gd2lyZWxlc3MgcHJvdG9jb2wgKi8KKyAgICAgICAgICAgICAgICBlcnIgPSBwODAyMTF3ZXh0X2dpd25hbWUoZGV2LCBOVUxMLCAoY2hhciAqKSAmaXdyLT51LCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DU0lXTldJRDoKKwljYXNlIFNJT0NHSVdOV0lEOgorCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlicmVhazsKKwljYXNlIFNJT0NTSVdGUkVROiAvKiBzZXQgY2hhbm5lbCAqLworICAgICAgICAgICAgICAgIGVyciA9IHA4MDIxMXdleHRfc2l3ZnJlcShkZXYsIE5VTEwsICYoaXdyLT51LmZyZXEpLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXRlJFUTogLyogZ2V0IGNoYW5uZWwgKi8KKyAgICAgICAgICAgICAgICBlcnIgPSBwODAyMTF3ZXh0X2dpd2ZyZXEoZGV2LCBOVUxMLCAmKGl3ci0+dS5mcmVxKSwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ1NJV1JBTkdFOgorCWNhc2UgU0lPQ1NJV1BSSVY6CisJY2FzZSBTSU9DU0lXQVA6IC8qIHNldCBhY2Nlc3MgcG9pbnQgTUFDIGFkZHJlc3NlcyAoQlNTSUQpICovCisJCWVyciA9ICgtRU9QTk9UU1VQUCk7CisJCWJyZWFrOworCisJY2FzZSBTSU9DR0lXQVA6CS8qIGdldCBhY2Nlc3MgcG9pbnQgTUFDIGFkZHJlc3NlcyAoQlNTSUQpICovCisgICAgICAgICAgICAgICAgZXJyID0gcDgwMjExd2V4dF9naXdhcChkZXYsIE5VTEwsICYoaXdyLT51LmFwX2FkZHIpLCBOVUxMKTsKKwkJYnJlYWs7CisKKyNpZiBXSVJFTEVTU19FWFQgPiA4CisJY2FzZSBTSU9DU0lXTU9ERTogLyogc2V0IG9wZXJhdGlvbiBtb2RlICovCisJY2FzZSBTSU9DU0lXRVNTSUQ6IC8qIHNldCBTU0lEIChuZXR3b3JrIG5hbWUpICovCisJY2FzZSBTSU9DU0lXUkFURTogLyogc2V0IGRlZmF1bHQgYml0IHJhdGUgKGJwcykgKi8KKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NHSVdNT0RFOiAvKiBnZXQgb3BlcmF0aW9uIG1vZGUgKi8KKwkJZXJyID0gcDgwMjExd2V4dF9naXdtb2RlKGRldiwgTlVMTCwgJml3ci0+dS5tb2RlLCBOVUxMKTsKKworCQlicmVhazsKKwljYXNlIFNJT0NHSVdOSUNLTjogLyogZ2V0IG5vZGUgbmFtZS9uaWNrbmFtZSAqLworCWNhc2UgU0lPQ0dJV0VTU0lEOiAvKiBnZXQgU1NJRCAqLworCQlpZihpd3ItPnUuZXNzaWQucG9pbnRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBzc2lkW0lXX0VTU0lEX01BWF9TSVpFKzFdOworCQkJbWVtc2V0KHNzaWQsIDAsIHNpemVvZihzc2lkKSk7CisKKwkJCWVyciA9IHA4MDIxMXdleHRfZ2l3ZXNzaWQoZGV2LCBOVUxMLCAmaXdyLT51LmVzc2lkLCBzc2lkKTsKKwkJCWlmKGNvcHlfdG9fdXNlcihpd3ItPnUuZXNzaWQucG9pbnRlciwgc3NpZCwgc2l6ZW9mKHNzaWQpKSkKKwkJCQllcnIgPSAoLUVGQVVMVCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXUkFURToKKyAgICAgICAgICAgICAgICBlcnIgPSBwODAyMTF3ZXh0X2dpd3JhdGUoZGV2LCBOVUxMLCAmaXdyLT51LmJpdHJhdGUsIE5VTEwpOworCQlicmVhazsKKwljYXNlIFNJT0NHSVdSVFM6CisJCWVyciA9IHA4MDIxMXdleHRfZ2l3cnRzKGRldiwgTlVMTCwgJml3ci0+dS5ydHMsIE5VTEwpOworCQlicmVhazsKKwljYXNlIFNJT0NHSVdGUkFHOgorCQllcnIgPSBwODAyMTF3ZXh0X2dpd2ZyYWcoZGV2LCBOVUxMLCAmaXdyLT51LnJ0cywgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dJV0VOQ09ERToKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJZXJyID0gLUVQRVJNOworCQllbHNlIGlmIChpd3ItPnUuZW5jb2RpbmcucG9pbnRlcikgeworCQkJY2hhciBrZXlidWZbTUFYX0tFWUxFTl07CisJCQllcnIgPSBwODAyMTF3ZXh0X2dpd2VuY29kZShkZXYsIE5VTEwsCisJCQkJCQkgICAgICZpd3ItPnUuZW5jb2RpbmcsIGtleWJ1Zik7CisJCQlpZiAoY29weV90b191c2VyKGl3ci0+dS5lbmNvZGluZy5wb2ludGVyLCBrZXlidWYsCisJCQkJCSBpd3ItPnUuZW5jb2RpbmcubGVuZ3RoKSkKKwkJCQllcnIgPSAtRUZBVUxUOworCQl9CisJCWJyZWFrOworCWNhc2UgU0lPQ0dJV0FQTElTVDoKKwljYXNlIFNJT0NTSVdSVFM6CisJY2FzZSBTSU9DU0lXRlJBRzoKKwljYXNlIFNJT0NTSVdTRU5TOgorCWNhc2UgU0lPQ0dJV1NFTlM6CisJY2FzZSBTSU9DU0lXTklDS046IC8qIHNldCBub2RlIG5hbWUvbmlja25hbWUgKi8KKwljYXNlIFNJT0NTSVdFTkNPREU6IC8qIHNldCBlbmNvZGluZyB0b2tlbiAmIG1vZGUgKi8KKwljYXNlIFNJT0NTSVdTUFk6CisJY2FzZSBTSU9DR0lXU1BZOgorCWNhc2UgU0lPQ1NJV1BPV0VSOgorCWNhc2UgU0lPQ0dJV1BPV0VSOgorCWNhc2UgU0lPQ0dJV1BSSVY6CisJCWVyciA9ICgtRU9QTk9UU1VQUCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dJV1JBTkdFOgorCQlpZihpd3ItPnUuZGF0YS5wb2ludGVyICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19yYW5nZSByYW5nZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IHA4MDIxMXdleHRfZ2l3cmFuZ2UoZGV2LCBOVUxMLCAmaXdyLT51LmRhdGEsCisJCQkJCQkgIChjaGFyICopICZyYW5nZSk7CisJCQkvKiBQdXNoIHRoYXQgdXAgdG8gdGhlIGNhbGxlciAqLworCQkJaWYgKGNvcHlfdG9fdXNlcihpd3ItPnUuZGF0YS5wb2ludGVyLCAmcmFuZ2UsIHNpemVvZihyYW5nZSkpKQorCQkJCWVyciA9IC1FRkFVTFQ7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYgLyogV0lSRUxFU1NfRVhUID4gOCAqLworI2lmIFdJUkVMRVNTX0VYVCA+IDkKKwljYXNlIFNJT0NTSVdUWFBPVzoKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXVFhQT1c6CisJCWVyciA9IHA4MDIxMXdleHRfZ2l3dHhwb3coZGV2LCBOVUxMLCAmaXdyLT51LnR4cG93ZXIsIE5VTEwpOworCQlicmVhazsKKyNlbmRpZiAvKiBXSVJFTEVTU19FWFQgPiA5ICovCisjaWYgV0lSRUxFU1NfRVhUID4gMTAKKwljYXNlIFNJT0NTSVdSRVRSWToKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DR0lXUkVUUlk6CisJCWVyciA9IHA4MDIxMXdleHRfZ2l3cmV0cnkoZGV2LCBOVUxMLCAmaXdyLT51LnJldHJ5LCBOVUxMKTsKKwkJYnJlYWs7CisjZW5kaWYgLyogV0lSRUxFU1NfRVhUID4gMTAgKi8KKworI2VuZGlmIC8qIFdJUkVMRVNTX0VYVCA8PSAxMiAqLworCisJZGVmYXVsdDoKKwkJZXJyID0gKC1FT1BOT1RTVVBQKTsKKwkJYnJlYWs7CisJfQorCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiAoZXJyKTsKK30KKworaW50IHA4MDIxMXdleHRfZXZlbnRfYXNzb2NpYXRlZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGludCBhc3NvYykKK3sKKyAgICAgICAgdW5pb24gaXdyZXFfZGF0YSBkYXRhOworCisgICAgICAgIERCRkVOVEVSOworCisjaWYgV0lSRUxFU1NfRVhUID4gMTMKKyAgICAgICAgLyogU2VuZCB0aGUgYXNzb2NpYXRpb24gc3RhdGUgZmlyc3QgKi8KKyAgICAgICAgZGF0YS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKyAgICAgICAgaWYgKGFzc29jKSB7CisgICAgICAgICAgICAgICAgbWVtY3B5KGRhdGEuYXBfYWRkci5zYV9kYXRhLCB3bGFuZGV2LT5ic3NpZCwgV0xBTl9BRERSX0xFTik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWVtc2V0KGRhdGEuYXBfYWRkci5zYV9kYXRhLCAwLCBXTEFOX0FERFJfTEVOKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3bGFuX3dleHRfd3JpdGUpCisgICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudCh3bGFuZGV2LT5uZXRkZXYsIFNJT0NHSVdBUCwgJmRhdGEsIE5VTEwpOworCisgICAgICAgIGlmICghYXNzb2MpIGdvdG8gZG9uZTsKKworICAgICAgICAvLyBYWFggc2VuZCBhc3NvY2lhdGlvbiBkYXRhLCBsaWtlIElFcywgZXRjIGV0Yy4KKyNlbmRpZgorIGRvbmU6CisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiAwOworfQorCisKKyNlbmRpZiAvKiBjb21wYXRpYmlsaXR5IHRvIHdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KKworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2NlNTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX2NzLmMKQEAgLTAsMCArMSwxNDg3IEBACisjZGVmaW5lIFdMQU5fSE9TVElGIFdMQU5fUENNQ0lBCisjaW5jbHVkZSAiaGZhMzg0eC5jIgorI2luY2x1ZGUgInByaXNtMm1nbXQuYyIKKyNpbmNsdWRlICJwcmlzbTJtaWIuYyIKKyNpbmNsdWRlICJwcmlzbTJzdGEuYyIKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw0LDIxKSApCisjaWYgKFdMQU5fQ1BVX0ZBTUlMWSA9PSBXTEFOX0l4ODYpCisjaWZuZGVmIENPTkZJR19JU0EKKyN3YXJuaW5nICJZb3UgbWF5IG5lZWQgdG8gZW5hYmxlIElTQSBzdXBwb3J0IGluIHlvdXIga2VybmVsLiIKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTEpICkKK3N0YXRpYyB1X2ludAlpcnFfbWFzayA9IDB4ZGViODsJCS8qIEludGVycnVwdCBtYXNrICovCitzdGF0aWMgaW50CWlycV9saXN0WzRdID0geyAtMSB9OwkJLyogSW50ZXJydXB0IGxpc3QgKi8KKyNlbmRpZgorc3RhdGljIHVfaW50CXByaXNtMl9pZ25vcmV2Y2M9MTsJCS8qIEJvb2xlYW4sIGlmIHNldCwgd2UKKwkJCQkJCSAqIGlnbm9yZSB3aGF0IHRoZSBWY2MKKwkJCQkJCSAqIGlzIHNldCB0byBhbmQgd2hhdCB0aGUgQ0lTCisJCQkJCQkgKiBzYXlzLgorCQkJCQkJICovCittb2R1bGVfcGFyYW0oIHByaXNtMl9pZ25vcmV2Y2MsIGludCwgMDY0NCk7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDExKSApCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDYsOSkpCitzdGF0aWMgaW50IG51bWxpc3QgPSA0OworbW9kdWxlX3BhcmFtX2FycmF5KGlycV9saXN0LCBpbnQsIG51bWxpc3QsIDA0NDQpOworI2Vsc2UKK21vZHVsZV9wYXJhbV9hcnJheShpcnFfbGlzdCwgaW50LCBOVUxMLCAwNDQ0KTsKKyNlbmRpZgorbW9kdWxlX3BhcmFtKCBpcnFfbWFzaywgaW50LCAwNjQ0KTsKKyNlbmRpZgorCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE1KQorc3RhdGljIGludCBwcmlzbTJfY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldik7CitzdGF0aWMgaW50IHByaXNtMl9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBkZXYpOworc3RhdGljIHZvaWQgcHJpc20yX2NzX3JlbW92ZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldik7CitzdGF0aWMgaW50IHByaXNtMl9jc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldik7CisjZWxzZQorZGV2X2xpbmtfdAkqcHJpc20yc3RhX2F0dGFjaCh2b2lkKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9kZXRhY2goZGV2X2xpbmtfdCAqbGluayk7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfY29uZmlnKGRldl9saW5rX3QgKmxpbmspOworc3RhdGljIHZvaWQJcHJpc20yc3RhX3JlbGVhc2UodV9sb25nIGFyZyk7CitzdGF0aWMgaW50IAlwcmlzbTJzdGFfZXZlbnQgKGV2ZW50X3QgZXZlbnQsIGludCBwcmlvcml0eSwgZXZlbnRfY2FsbGJhY2tfYXJnc190ICphcmdzKTsKKworc3RhdGljIGRldl9saW5rX3QJKmRldl9saXN0ID0gTlVMTDsJLyogaGVhZCBvZiBpbnN0YW5jZSBsaXN0ICovCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsNjgpKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGNzX2Vycm9yCisqCisqIFV0aWxpdHkgZnVuY3Rpb24gdG8gcHJpbnQgY2FyZCBzZXJ2aWNlcyBlcnJvciBtZXNzYWdlcy4KKyoKKyogQXJndW1lbnRzOgorKgloYW5kbGUJY2xpZW50IGhhbmRsZSBpZGVudGlmeWluZyB0aGlzIENTIGNsaWVudAorKglmdW5jCUNTIGZ1bmN0aW9uIG51bWJlciB0aGF0IGdlbmVyYXRlZCB0aGUgZXJyb3IKKyoJcmV0CUNTIGZ1bmN0aW9uIHJldHVybiBjb2RlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBjc19lcnJvcihjbGllbnRfaGFuZGxlX3QgaGFuZGxlLCBpbnQgZnVuYywgaW50IHJldCkKK3sKKyNpZiAoZGVmaW5lZChDU19SRUxFQVNFX0NPREUpICYmIChDU19SRUxFQVNFX0NPREUgPCAweDI5MTEpKQorCUNhcmRTZXJ2aWNlcyhSZXBvcnRFcnJvciwgZGV2X2luZm8sICh2b2lkICopZnVuYywgKHZvaWQgKilyZXQpOworI2Vsc2UKKwllcnJvcl9pbmZvX3QgZXJyID0geyBmdW5jLCByZXQgfTsKKwlwY21jaWFfcmVwb3J0X2Vycm9yKGhhbmRsZSwgJmVycik7CisjZW5kaWYKK30KKyNlbHNlIC8vIGtlcm5lbF92ZXJzaW9uCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTIpCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgcHJpc20yX2NzX2lkc1tdID0geworCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJJTlRFUlNJTCIsICAiSEZBMzg0eC9JRUVFIiwgMHg3NGM1ZTQwZCwgMHhkYjQ3MmExOCksIC8vIEludGVyc2lsIFBSSVNNMiBSZWZlcmVuY2UgRGVzaWduIDExTWIvcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEzOCwgMHgwMDAyKSwgLy8gQ29tcGFxIFdMMTAwLzIwMCAxMU1iL3MgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyOGEsIDB4MDAwMiksIC8vIENvbXBhcSBpUGFxIEhOVy0xMDAgMTFNYi9zIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMjUwLCAweDAwMDIpLCAvLyBTYW1zdW5nIFNXTDIwMDAtTiAxMU1iL3MgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweGQ2MDEsIDB4MDAwMiksIC8vIFotQ29tIFhJMzAwIDExTWIvcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJab29tQWlyIDExTWJwcyBIaWdoIiwgICJSYXRlIHdpcmVsZXNzIE5ldHdvcmtpbmciLCAweDI3M2ZlM2RiLCAweDMyYTFlYWVlKSwgLy8gWm9vbUFpciA0MTAwIDExTWIvcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiSW5zdGFudCBXaXJlbGVzcyAiLCAgIiBOZXR3b3JrIFBDIENBUkQiLCAgIlZlcnNpb24gMDEuMDIiLCAweDExZDkwMWFmLCAweDZlOWJkOTI2LCAweDRiNzRiYWEwKSwgLy8gTGlua3N5cyBXUEMxMSAxMU1icHMgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIkFkZHRyb24iLCAgIkFXUC0xMDAgV2lyZWxlc3MgUENNQ0lBIiwgICJWZXJzaW9uIDAxLjAyIiwgMHhlNmVjNTJjZSwgMHg4NjQ5YWYyLCAweDRiNzRiYWEwKSwgLy8gQWRkdHJvbiBBV1AtMTAwIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiRCIsICAiTGluayBEV0wtNjUwIDExTWJwcyBXTEFOIENhcmQiLCAgIlZlcnNpb24gMDEuMDIiLCAweDcxYjE4NTg5LCAweGI2ZjFiMGFiLCAweDRiNzRiYWEwKSwgLy8gRC1MaW5rIERXTC02NTAgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJTTUMiLCAgIlNNQzI2MzJXIiwgICJWZXJzaW9uIDAxLjAyIiwgMHhjNGY4YjE4YiwgMHg0NzRhMWYyYSwgMHg0Yjc0YmFhMCksIC8vIFNNQyAyNjMyVyAxMU1icHMgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjM0KCJJbnRlcnNpbCIsICAiUFJJU00gMl81IFBDTUNJQSBBREFQVEVSIiwgICJJU0wzNzMwMFAiLCAgIkV2YWwtUmV2QSIsIDB4NGI4MDFhMTcsIDB4NjM0NWEwYmYsIDB4YzkwNDlhMzksIDB4YzIzYWRjMGUpLCAvLyBCcm9NYXggRnJlZXBvcnQgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkIChQcmlzbSAyLjUpCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJVLlMuIFJvYm90aWNzIiwgICJJRUVFIDgwMi4xMWIgUEMtQ0FSRCIsICAiVmVyc2lvbiAwMS4wMiIsIDB4YzdiOGRmOWQsIDB4MTcwMGQwODcsIDB4NGI3NGJhYTApLCAvLyBVLlMuIFJvYm90aWNzIElFRUUgODAyLjExYiBQQy1DQVJECisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkRpZ2l0YWwgRGF0YSBDb21tdW5pY2F0aW9ucyIsICAiV1BDLTAxMDAiLCAweGZkZDczNDcwLCAweGUwYjZmMTQ2KSwgLy8gTGV2ZWwtT25lIFdQQy0wMTAwCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMjc0LCAweDE2MTIpLCAvLyBCcm9tYXggT0VNIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZCAoUHJpc20gMi41KQorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDI3NCwgMHgxNjEzKSwgLy8gQnJvbWF4IE9FTSAxMU1icHMgODAyLjExYiBXTEFOIENhcmQgKFByaXNtIDMpCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoImNvcmVnYSBLLksuIiwgICJXaXJlbGVzcyBMQU4gUENDLTExIiwgMHg1MjYxNDQwZiwgMHhhNjQwNTU4NCksIC8vIGNvcmVnYSBLLksuIFdpcmVsZXNzIExBTiBQQ0MtMTEKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiY29yZWdhIEsuSy4iLCAgIldpcmVsZXNzIExBTiBQQ0NBLTExIiwgMHg1MjYxNDQwZiwgMHhkZjYxMTVmOSksIC8vIGNvcmVnYSBLLksuIFdpcmVsZXNzIExBTiBQQ0NBLTExCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHhjMDAxLCAweDAwMDgpLCAvLyBDT05URUMgRkxFWFNDQU4vRlgtRERTMTEwLVBDQworCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJQTEFORVgiLCAgIkdlb1dhdmUvR1ctTlMxMTAiLCAweDIwOWY0MGFiLCAweDQ2MjYzMTc4KSwgLy8gUExBTkVYIEdlb1dhdmUvR1ctTlMxMTAKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIk9FTSIsICAiUFJJU00yIElFRUUgODAyLjExIFBDLUNhcmQiLCAgIlZlcnNpb24gMDEuMDIiLCAweGZlYTU0YzkwLCAweDQ4ZjJiZGQ2LCAweDRiNzRiYWEwKSwgLy8gQW1iaWNvbSBXTDExMDAgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJMZUFydGVyeSIsICAiU1lOQ0JZQUlSIDExTWJwcyBXaXJlbGVzcyBMQU4gUEMgQ2FyZCIsICAiVmVyc2lvbiAwMS4wMiIsIDB4N2UzYjMyNmEsIDB4NDk4OTNlOTIsIDB4NGI3NGJhYTApLCAvLyBMZUFydGVyeSBTWU5DQllBSVIgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkCitQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxZmYsIDB4MDAwOCksIC8vIEludGVybWVjIE1vYmlsZUxBTiAxMU1icHMgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIk5FVEdFQVIgTUE0MDEgV2lyZWxlc3MgUEMiLCAgIkNhcmQiLCAgIlZlcnNpb24gMDEuMDAiLCAweGEzNzQzNGU5LCAweDk3NjJlOGYxLCAweGE1N2FkYjhjKSwgLy8gTkVUR0VBUiBNQTQwMSAxMU1icHMgODAyLjExIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMzQoIkludGVyc2lsIiwgICJQUklTTSBGcmVlZG9tIFBDTUNJQSBBZGFwdGVyIiwgICJJU0wzNzEwMFAiLCAgIkV2YWwtUmV2QSIsIDB4NGI4MDFhMTcsIDB4ZjIyMmVjMmQsIDB4NjMwZDUyYjIsIDB4YzIzYWRjMGUpLCAvLyBJbnRlcnNpbCBQUklTTSBGcmVlZG9tIDExbWJwcyA4MDIuMTEgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJPVEMiLCAgIldpcmVsZXNzIEFpckVaWSAyNDExLVBDQyBXTEFOIENhcmQiLCAgIlZlcnNpb24gMDEuMDIiLCAweDRhYzQ0Mjg3LCAweDIzNWE2YmVkLCAweDRiNzRiYWEwKSwgLy8gT1RDIFdpcmVsZXNzIEFpckVaWSAyNDExLVBDQyAxMU1icHMgODAyLjExIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMzQoIjgwMi4xMSIsICAiMTFNYnBzIFdpcmVsZXNzIExBTiBDYXJkIiwgICJ2MDhDMSIsICAiIiAgICwgMHhiNjdhNjEwZSwgMHg2NTVhYTdiNywgMHgyNjRiNDUxYSwgMHgwKSwgLy8gRHluYWxpbmsgTDExSERUIDExTWJwcyA4MDIuMTEgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHhjMjUwLCAweDAwMDIpLCAvLyBEeW5hbGluayBMMTFIRFQgMTFNYnBzIDgwMi4xMSBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiUFJPWElNIiwgICJSYW5nZUxBTi1EUy9MQU4gUEMgQ0FSRCIsIDB4YzY1MzZhNWUsIDB4M2YzNTc5N2QpLCAvLyBQUk9YSU0gUmFuZ2VMQU4tRFMvTEFOIFBDIENBUkQKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjM0KCJBQ1RJT05URUMiLCAgIlBSSVNNIFdpcmVsZXNzIExBTiBQQyBDYXJkIiwgICIwMzgxIiwgICJSZXZBIiwgMHgzOTMwODlkYSwgMHhhNzFlNjlkNSwgMHg5MDQ3MWZhOSwgMHg1N2E2NjE5NCksIC8vIEFDVElPTlRFQyBQUklTTSBXaXJlbGVzcyBMQU4gUEMgQ2FyZAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MTY2OCwgMHgwMTAxKSwgLy8gQUNUSU9OVEVDIFBSSVNNIFdpcmVsZXNzIExBTiBQQyBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIjNDb20iLCAgIjNDUldFNzM3QSBBaXJDb25uZWN0IFdpcmVsZXNzIExBTiBQQyBDYXJkIiwgMHg0MTI0MGU1YiwgMHg1NjAxMGFmMyksIC8vIDNDb20gQWlyQ29ubmVjdCAzQ1JXRTczN0EKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiM0NvbSIsICAiM0NSV0U3NzdBIEFpckNvbm5lY3QgV2lyZWxlc3MgTEFOIFBDSSBDYXJkIiAgLCAweDQxMjQwZTViLCAweGFmYzdjMzNlKSwgLy8gM0NvbSBBaXJDb25uZWN0IDNDUldFNzc3QQorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBU1VTIiwgICI4MDJfMTFiX1BDX0NBUkRfMjUiLCAweDc4ZmMwNmVlLCAweGRiOWFhODQyKSwgLy8gQVNVUyBXTC0xMDAgODAyLjExYiBXTEFOICBQQyBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFTVVMiLCAgIjgwMl8xMUJfQ0ZfQ0FSRF8yNSIsIDB4NzhmYzA2ZWUsIDB4NDVhNTBjMWUpLCAvLyBBU1VTIFdMLTExMCA4MDIuMTFiIFdMQU4gQ0YgQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJCVUZGQUxPIiwgICJXTEktQ0YtUzExRyIsIDB4MmRlY2VjZTMsIDB4ODIwNjdjMTgpLCAvLyBCVUZGQUxPIFdMSS1DRi1TMTFHIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzNCgiVGhlIExpbmtzeXMgR3JvdXAsIEluYy4iLCAiV2lyZWxlc3MgTmV0d29yayBDRiBDYXJkIiwgIklTTDM3MzAwUCIsICJSZXZBIiwgMHhhNWY0NzJjMiwgMHg5YzA1NTk4ZCwgMHhjOTA0OWEzOSwgMHg1N2E2NjE5NCksIC8vIExpbmtzeXMgV0NGMTEgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkIChQcmlzbSAyLjUpCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzNCgiTGlua3N5cyIsICAiV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQiLCAgIiIsICAiIiwgMHg3MzNjYzgxLCAweGM1MmYzOTUsIDB4MCwgMHgwKSwgLy8gTGlua3N5cyBXQ0YxMiAxMU1icHMgODAyLjExYiBXTEFOIENhcmQgKFByaXNtIDMpCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMjhhLCAweDA2NzMpLCAvLyBMaW5rc3lzIFdDRjEyIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZCAoUHJpc20gMykKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjM0KCJORVRHRUFSIE1BNDAxUkEgV2lyZWxlc3MgUEMiLCAgIkNhcmQiLCAgIklTTDM3MzAwUCIsICAiRXZhbC1SZXZBIiwgMHgzMDY0NjdmLCAweDk3NjJlOGYxLCAweGM5MDQ5YTM5LCAweGMyM2FkYzBlKSwgLy8gTkVUR0VBUiBNQTQwMVJBIDExTWJwcyA4MDIuMTEgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHhkNjAxLCAweDAwMDUpLCAvLyBELUxpbmsgRENGLTY2MFcgIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDJkMiwgMHgwMDAxKSwgLy8gTWljcm9zb2Z0IFdpcmVsZXNzIE5vdGVib29rIEFkYXB0ZXIgTU4tNTIwCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDg5LCAweDAwMDIpLCAvLyBBbnlQb2ludChUTSkgV2lyZWxlc3MgSUkgUEMgQ2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMzQoIkQiLCAgIkxpbmsgRFJDLTY1MCAxMU1icHMgV0xBTiBDYXJkIiwgICJWZXJzaW9uIDAxLjAyIiwgICIiICwgMHg3MWIxODU4OSwgMHhmMTQ0ZTNhYywgMHg0Yjc0YmFhMCwgMHgwKSwgLy8gRC1MaW5rIERSQy02NTAgODAyLjExYiBXTEFOIENhcmQKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDkwMDUsIDB4MDAyMSksIC8vIEFkYXB0ZWMgQVdOLTgwMzAKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwMGIsIDB4NzExMCksIC8vIEQtTGluayBEV0wtNjUwIHJldiBQIDgwMi4xMWIgV0xBTiBjYXJkCisJLy8gUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzNCgiRC1MaW5rIiwgICJEV0wtNjUwIFdpcmVsZXNzIFBDIENhcmQgUmV2UCIsICAiSVNMMzcxMDFQLTEwIiwgICJBMyIsIDB4MWE0MjRhMWMsIDB4NmVhNTc2MzIsIDB4ZGQ5N2EyNmIsIDB4NTZiMjFmNTIpLCAvLyBELUxpbmsgRFdMLTY1MCByZXYgUCA4MDIuMTFiIFdMQU4gY2FyZAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiSU5URVJTSUwiLCAgICJJLUdBVEUgMTFNIFBDIENhcmQgLyBQQyBDYXJkIHBsdXMiLCAgIlZlcnNpb24gMDEuMDIiLCAweDc0YzVlNDBkLCAweDgzMDRmZjc3LCAweDRiNzRiYWEwKSwgLy8gSS1HYXRlIDExTSBQQyBDYXJkCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzNCgiQkVOUSIsICAiQVdMMTAwIFBDTUNJQSBBREFQVEVSIiwgICJJU0wzNzMwMFAiLCAgIkV2YWwtUmV2QSIsIDB4MzVkYWRjNzQsIDB4MWY3ZmVkYiwgMHhjOTA0OWEzOSwgMHhjMjNhZGMwZSksIC8vIGJlblEgQVdMMTAwIDgwMi4xMWIgV0xBTiBDYXJkCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDBiLCAweDczMDApLCAvLyBiZW5RIEFXTDEwMCA4MDIuMTFiIFdMQU4gQ2FyZAorCS8vIFBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEoIklOVEVSU0lMIiwgMHg3NGM1ZTQwZCksIC8vIEludGVyc2lsIFByaXNtIDIgY2FyZAorCS8vIFBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE1NiwgMHgwMDAyKSwgLy8gSW50ZXJzaWwgUHJpc20gMiBjYXJkCisKKwlQQ01DSUFfREVWSUNFX05VTEwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCBwcmlzbTJfY3NfaWRzKTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kcml2ZXIgcHJpc20yX2NzX2RyaXZlciA9IHsKKwkuZHJ2ID0geworCQkubmFtZSA9ICJwcmlzbTJfY3MiLAorCX0sCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE1KQorCS5zdXNwZW5kID0gcHJpc20yX2NzX3N1c3BlbmQsCisJLnJlc3VtZSA9IHByaXNtMl9jc19yZXN1bWUsCisJLnJlbW92ZSA9IHByaXNtMl9jc19yZW1vdmUsCisJLnByb2JlID0gcHJpc20yX2NzX3Byb2JlLAorCS5pZF90YWJsZSA9IHByaXNtMl9jc19pZHMsCisjZWxzZQorCS5hdHRhY2ggPSBwcmlzbTJzdGFfYXR0YWNoLAorCS5kZXRhY2ggPSBwcmlzbTJzdGFfZGV0YWNoLAorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxMikKKwkuaWRfdGFibGUgPSBwcmlzbTJfY3NfaWRzLAorCS5ldmVudCA9ICBwcmlzbTJzdGFfZXZlbnQsCisjZW5kaWYgLy8gPiAyLjYuMTIKKyNlbmRpZiAvLyA8PSAyLjYuMTUKK307CisjZW5kaWYgLyoga2VybmVsX3ZlcnNpb24gKi8KKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNSkKKyNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAorZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBDRkdfQ0hFQ0soZm4sIHJldGYpIFwKK2RvIHsgaW50IHJldCA9IChyZXRmKTsgXAoraWYgKHJldCAhPSAwKSB7IFwKKyAgICAgICAgV0xBTl9MT0dfREVCVUcoMSwgIkNhcmRTZXJ2aWNlcygiICNmbiAiKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsgXAorICAgICAgICBjc19lcnJvcihwZGV2LCBmbiwgcmV0KTsgXAorICAgICAgICBnb3RvIG5leHRfZW50cnk7IFwKK30gXAorfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQgcHJpc20yX2NzX3JlbW92ZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd2xhbmRldmljZSAgKndsYW5kZXY7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTcpCisgICAgICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocGRldik7CisjZW5kaWYKKworCURCRkVOVEVSOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCXdsYW5kZXYgPSBwZGV2LT5wcml2OworI2Vsc2UKKwl3bGFuZGV2ID0gbGluay0+cHJpdjsKKyNlbmRpZgorCisJaWYgKHdsYW5kZXYpIHsKKwkJcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZCh3bGFuZGV2KTsKKwkJdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpOworCQl3bGFuX3Vuc2V0dXAod2xhbmRldik7CisJCWlmICh3bGFuZGV2LT5wcml2KSB7CisJCQloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwkJCXdsYW5kZXYtPnByaXYgPSBOVUxMOworCQkJaWYgKGh3KSB7CisJCQkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJCQlrZnJlZShodyk7CisJCQl9CisJCX0KKwkJa2ZyZWUod2xhbmRldik7CisJfQorCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCXBkZXYtPnByaXYgPSBOVUxMOworICAgICAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UocGRldik7CisjZWxzZQorICAgICAgICBpZiAobGluay0+c3RhdGUgJiBERVZfQ09ORklHKSB7CisJICAgICAgICBpZiAobGluay0+d2luKQorCQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7CisJCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlKTsKKwkJaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKKwkJCXBjbWNpYV9yZWxlYXNlX2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKTsKKwkJaWYgKGxpbmstPmlycS5Bc3NpZ25lZElSUSkKKwkJCXBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworCisJCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHOworCX0KKworCWxpbmstPnByaXYgPSBOVUxMOworCWtmcmVlKGxpbmspOworI2VuZGlmCisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworc3RhdGljIGludCBwcmlzbTJfY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd2xhbmRldmljZSAgKndsYW5kZXY7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTcpCisgICAgICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocGRldik7CisjZW5kaWYKKworCURCRkVOVEVSOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCXdsYW5kZXYgPSBwZGV2LT5wcml2OworCXByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsIFA4MDIxMUVOVU1faWZzdGF0ZV9kaXNhYmxlKTsKKyNlbHNlCisJd2xhbmRldiA9IGxpbmstPnByaXY7CisKKyAgICAgICAgbGluay0+c3RhdGUgfD0gREVWX1NVU1BFTkQ7CisgICAgICAgIGlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKKwkJcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGUpOworCQlwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7CisJfQorI2VuZGlmCisKKwlEQkZFWElUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJpc20yX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd2xhbmRldmljZSAgKndsYW5kZXY7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTcpCisgICAgICAgIGRldl9saW5rX3QgKmxpbmsgPSBkZXZfdG9faW5zdGFuY2UocGRldik7CisjZW5kaWYKKworCURCRkVOVEVSOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCXdsYW5kZXYgPSBwZGV2LT5wcml2OworCS8vIFhYWCBkbyBzb21ldGhpbmcgaGVyZT8KKyNlbHNlCisJd2xhbmRldiA9IGxpbmstPnByaXY7CisgICAgICAgIGxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKKyAgICAgICAgaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgeworICAgICAgICAgICAgICAgIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZik7CisJCS8vIFhYWCBkbyBzb21ldGhpbmcgaGVyZT8KKwl9CisjZW5kaWYKKworCisJREJGRVhJVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByaXNtMl9jc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldikKK3sKKwlpbnQgcnZhbCA9IDA7CisJc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYgPSBOVUxMOworCWhmYTM4NHhfdCAqaHcgPSBOVUxMOworCisgICAgICAgIGNvbmZpZ19pbmZvX3Qgc29ja2V0Y29uZjsKKyAgICAgICAgY2lzcGFyc2VfdCAqcGFyc2UgPSBOVUxMOworCXR1cGxlX3QgdHVwbGU7CisJdWludDhfdAlidWZbNjRdOworICAgICAgICBpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CisgICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE3KQorCWRldl9saW5rX3QgKmxpbms7CisjZW5kaWYKKworCURCRkVOVEVSOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCS8qIFNldCB1cCBpbnRlcnJ1cHQgdHlwZSAqLworICAgICAgICBwZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKyNlbHNlCisgICAgICAgIGxpbmsgPSBrbWFsbG9jKHNpemVvZihkZXZfbGlua190KSwgR0ZQX0tFUk5FTCk7CisgICAgICAgIGlmIChsaW5rID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgIG1lbXNldChsaW5rLCAwLCBzaXplb2YoZGV2X2xpbmtfdCkpOworCisgICAgICAgIGxpbmstPmNvbmYuVmNjID0gMzM7CisgICAgICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCisgICAgICAgIGxpbmstPmhhbmRsZSA9IHBkZXY7CisgICAgICAgIHBkZXYtPmluc3RhbmNlID0gbGluazsKKyAgICAgICAgbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7CisKKyNlbmRpZgorCisJLy8gVkNDIGNyYXA/CisgICAgICAgIHBhcnNlID0ga21hbGxvYyhzaXplb2YoY2lzcGFyc2VfdCksIEdGUF9LRVJORUwpOworCisJd2xhbmRldiA9IGNyZWF0ZV93bGFuKCk7CisJaWYgKCF3bGFuZGV2IHx8ICFwYXJzZSkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuXG4iLCBkZXZfaW5mbyk7CisJCXJ2YWwgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisJaHcgPSB3bGFuZGV2LT5wcml2OworCisJaWYgKCB3bGFuX3NldHVwKHdsYW5kZXYpICE9IDAgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogd2xhbl9zZXR1cCgpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKKwkJcnZhbCA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIGh3IHN0cnVjdCBmb3Igbm93ICovCisJaGZhMzg0eF9jcmVhdGUoaHcsIDAsIDAsIE5VTEwpOworCWh3LT53bGFuZGV2ID0gd2xhbmRldjsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlody0+cGRldiA9IHBkZXY7CisJcGRldi0+cHJpdiA9IHdsYW5kZXY7CisjZWxzZQorCWh3LT5saW5rID0gbGluazsKKwlsaW5rLT5wcml2ID0gd2xhbmRldjsKKyNlbmRpZgorCisgICAgICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7CisgICAgICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOworICAgICAgICB0dXBsZS5UdXBsZURhdGEgPSBidWY7CisgICAgICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOworICAgICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7CisgICAgICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUocGRldiwgJnR1cGxlKSk7CisgICAgICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKHBkZXYsICZ0dXBsZSkpOworICAgICAgICBDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUocGRldiwgJnR1cGxlLCBwYXJzZSkpOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKyAgICAgICAgcGRldi0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UtPmNvbmZpZy5iYXNlOworICAgICAgICBwZGV2LT5jb25mLlByZXNlbnQgPSBwYXJzZS0+Y29uZmlnLnJtYXNrWzBdOworI2Vsc2UKKyAgICAgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UtPmNvbmZpZy5iYXNlOworICAgICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS0+Y29uZmlnLnJtYXNrWzBdOworCisJbGluay0+Y29uZi5WY2MgPSBzb2NrZXRjb25mLlZjYzsKKyNlbmRpZgorICAgICAgICBDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywKKyAgICAgICAgICAgICAgICAgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8ocGRldiwgJnNvY2tldGNvbmYpKTsKKworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUocGRldiwgJnR1cGxlKSk7CisgICAgICAgIGZvciAoOzspIHsKKwkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS0+Y2Z0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgQ0ZHX0NIRUNLKEdldFR1cGxlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShwZGV2LCAmdHVwbGUpKTsKKyAgICAgICAgICAgICAgICBDRkdfQ0hFQ0soUGFyc2VUdXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjbWNpYV9wYXJzZV90dXBsZShwZGV2LCAmdHVwbGUsIHBhcnNlKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCisgICAgICAgICAgICAgICAgICAgICAgICBkZmx0ID0gKmNmZzsKKyAgICAgICAgICAgICAgICBpZiAoY2ZnLT5pbmRleCA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0X2VudHJ5OworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKyAgICAgICAgICAgICAgICBwZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKKyNlbHNlCisgICAgICAgICAgICAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CisjZW5kaWYKKworICAgICAgICAgICAgICAgIC8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLworICAgICAgICAgICAgICAgIGlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisgICAgICAgICAgICAgICAgICAgICAgICBwZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBkZXYtPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCisgICAgICAgICAgICAgICAgLyogIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCisgICAgICAgICAgICAgICAgaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb2NrZXRjb25mLlZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwICYmICFwcmlzbTJfaWdub3JldmNjKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsICIgIFZjYyBtaXNtYXRjaCAtIHNraXBwaW5nIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0aGlzIGVudHJ5XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0X2VudHJ5OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGZsdC52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvY2tldGNvbmYuVmNjICE9IGRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAgJiYgIXByaXNtMl9pZ25vcmV2Y2MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0xBTl9MT0dfREVCVUcoMSwgIiAgVmNjIChkZWZhdWx0KSBtaXNtYXRjaCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLSBza2lwcGluZyB0aGlzIGVudHJ5XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0X2VudHJ5OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChjZmctPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKyAgICAgICAgICAgICAgICAgICAgICAgIHBkZXYtPmNvbmYuVnBwID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmstPmNvbmYuVnBwMSA9IGxpbmstPmNvbmYuVnBwMiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKKyNlbmRpZgorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGZsdC52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisgICAgICAgICAgICAgICAgICAgICAgICBwZGV2LT5jb25mLlZwcCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLT5jb25mLlZwcDEgPSBsaW5rLT5jb25mLlZwcDIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisjZW5kaWYKKwkJfQorCisJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCQkvKiBIQUNLOiBkdWUgdG8gYSBiYWQgQ0lTLi4uLndlIEFMV0FZUyBuZWVkIGFuIGludGVycnVwdCAqLworCQkvKiBpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpICovCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCQlwZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworI2Vsc2UKKwkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKyNlbmRpZgorCisJCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwkJcGRldi0+aW8uTnVtUG9ydHMxID0gcGRldi0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKKwkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKKwkJCXBkZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQkJcGRldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJCXBkZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCQlwZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CisJCQlpZiAgKCBwZGV2LT5pby5CYXNlUG9ydDEgIT0gMCApIHsKKwkJCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJCSJCcmFpbiBkYW1hZ2VkIENJUzogaGFyZCBjb2RlZCBpb2Jhc2U9IgorCQkJCSIweCV4LCB0cnkgbGV0dGluZyBwY21jaWFfY3MgZGVjaWRlLi4uXG4iLAorCQkJCXBkZXYtPmlvLkJhc2VQb3J0MSApOworCQkJCXBkZXYtPmlvLkJhc2VQb3J0MSA9IDA7CisJCQl9CisJCQlwZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCQlwZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBkZXYtPmlvLkF0dHJpYnV0ZXMxOworCQkJCXBkZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCQlwZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCX0KKwkJfQorCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCQlDRkdfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhwZGV2LCAmcGRldi0+aW8pKTsKKyNlbHNlCisJCWxpbmstPmlvLk51bVBvcnRzMSA9IGxpbmstPmlvLk51bVBvcnRzMiA9IDA7CisJCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQuaW8ubndpbiA+IDApKSB7CisJCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87CisJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQkJaWYgICggbGluay0+aW8uQmFzZVBvcnQxICE9IDAgKSB7CisJCQkJV0xBTl9MT0dfV0FSTklORygKKwkJCQkiQnJhaW4gZGFtYWdlZCBDSVM6IGhhcmQgY29kZWQgaW9iYXNlPSIKKwkJCQkiMHgleCwgdHJ5IGxldHRpbmcgcGNtY2lhX2NzIGRlY2lkZS4uLlxuIiwKKwkJCQlsaW5rLT5pby5CYXNlUG9ydDEgKTsKKwkJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSAwOworCQkJfQorCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQkJbGluay0+aW8uQXR0cmlidXRlczIgPSBsaW5rLT5pby5BdHRyaWJ1dGVzMTsKKwkJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQl9CisJCX0KKwkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJQ0ZHX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8ocGRldiwgJmxpbmstPmlvKSk7CisjZW5kaWYKKwkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLworCQlicmVhazsKKworCW5leHRfZW50cnk6CisJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKKwkJCWRmbHQgPSAqY2ZnOworCQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShwZGV2LCAmdHVwbGUpKTsKKworCX0KKworCS8qIExldCBwY21jaWEga25vdyB0aGUgZGV2aWNlIG5hbWUgKi8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJcGRldi0+ZGV2X25vZGUgPSAmaHctPm5vZGU7CisjZWxzZQorCWxpbmstPmRldiA9ICZody0+bm9kZTsKKyNlbmRpZgorCisJLyogUmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCBnZXQgYXNzaWduZWQgYSBuYW1lICovCisJU0VUX01PRFVMRV9PV05FUih3bGFuZGV2LT5uZXRkZXYpOworCVNFVF9ORVRERVZfREVWKHdsYW5kZXYtPm5ldGRldiwgICZoYW5kbGVfdG9fZGV2KHBkZXYpKTsKKwlpZiAocmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KSAhPSAwKSB7CisJCVdMQU5fTE9HX05PVElDRSgicHJpc20yc3RhX2NzOiByZWdpc3Rlcl93bGFuZGV2KCkgZmFpbGVkLlxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCXN0cmNweShody0+bm9kZS5kZXZfbmFtZSwgd2xhbmRldi0+bmFtZSk7CisKKwkvKiBBbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFzc2lnbiBhICovCisJLyogaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LCB1bmxlc3MgdGhlICdIYW5kbGVyJyBtZW1iZXIgb2YgdGhlICovCisJLyogaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gKi8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJaWYgKHBkZXYtPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkgeworCQlwZGV2LT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJCXBkZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0hBTkRMRV9QUkVTRU5UOworCQlwZGV2LT5pcnEuSGFuZGxlciA9IGhmYTM4NHhfaW50ZXJydXB0OworCQlwZGV2LT5pcnEuSW5zdGFuY2UgPSB3bGFuZGV2OworCQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEocGRldiwgJnBkZXYtPmlycSkpOworCX0KKyNlbHNlCisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkgeworCQlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0hBTkRMRV9QUkVTRU5UOworCQlsaW5rLT5pcnEuSGFuZGxlciA9IGhmYTM4NHhfaW50ZXJydXB0OworCQlsaW5rLT5pcnEuSW5zdGFuY2UgPSB3bGFuZGV2OworCQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEocGRldiwgJmxpbmstPmlycSkpOworCX0KKyNlbmRpZgorCisJLyogVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAgKi8KKwkvKiB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlICovCisJLyogY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4gKi8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24ocGRldiwgJnBkZXYtPmNvbmYpKTsKKyNlbHNlCisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24ocGRldiwgJmxpbmstPmNvbmYpKTsKKyNlbmRpZgorCisJLyogRmlsbCB0aGUgbmV0ZGV2aWNlIHdpdGggdGhpcyBpbmZvICovCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCXdsYW5kZXYtPm5ldGRldi0+aXJxID0gcGRldi0+aXJxLkFzc2lnbmVkSVJROworCXdsYW5kZXYtPm5ldGRldi0+YmFzZV9hZGRyID0gcGRldi0+aW8uQmFzZVBvcnQxOworI2Vsc2UKKwl3bGFuZGV2LT5uZXRkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKKwl3bGFuZGV2LT5uZXRkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyNlbmRpZgorCisJLyogQW5kIHRoZSByZXN0IG9mIHRoZSBodyBzdHJ1Y3R1cmUgKi8KKwlody0+aXJxID0gd2xhbmRldi0+bmV0ZGV2LT5pcnE7CisJaHctPmlvYmFzZSA9IHdsYW5kZXYtPm5ldGRldi0+YmFzZV9hZGRyOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE3KQorCWxpbmstPnN0YXRlIHw9IERFVl9DT05GSUc7CisJbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKyNlbmRpZgorCisJLyogQW5kIG5vdyB3ZSdyZSBkb25lISAqLworCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCisJZ290byBkb25lOworCisgY3NfZmFpbGVkOgorICAgICAgICBjc19lcnJvcihwZGV2LCBsYXN0X2ZuLCBsYXN0X3JldCk7CisKK2ZhaWxlZDoKKwkvLyB3bGFuZGV2LCBodywgZXRjIGV0Yy4uCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCXBkZXYtPnByaXYgPSBOVUxMOworI2Vsc2UKKwlwZGV2LT5pbnN0YW5jZSA9IE5VTEw7CisJaWYgKGxpbmspIHsKKwkJbGluay0+cHJpdiA9IE5VTEw7CisJCWtmcmVlKGxpbmspOworCX0KKyNlbmRpZgorCWlmICh3bGFuZGV2KSB7CisJCXdsYW5fdW5zZXR1cCh3bGFuZGV2KTsKKwkJaWYgKHdsYW5kZXYtPnByaXYpIHsKKwkJCWh3ID0gd2xhbmRldi0+cHJpdjsKKwkJCXdsYW5kZXYtPnByaXYgPSBOVUxMOworCQkJaWYgKGh3KSB7CisJCQkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJCQlrZnJlZShodyk7CisJCQl9CisJCX0KKwkJa2ZyZWUod2xhbmRldik7CisJfQorCitkb25lOgorCWlmIChwYXJzZSkga2ZyZWUocGFyc2UpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcnZhbDsKK30KKyNlbHNlICAvLyA8PSAyLjYuMTUKKyNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAorZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBDRkdfQ0hFQ0soZm4sIHJldGYpIFwKK2RvIHsgaW50IHJldCA9IChyZXRmKTsgXAoraWYgKHJldCAhPSAwKSB7IFwKKyAgICAgICAgV0xBTl9MT0dfREVCVUcoMSwgIkNhcmRTZXJ2aWNlcygiICNmbiAiKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsgXAorICAgICAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGZuLCByZXQpOyBcCisgICAgICAgIGdvdG8gbmV4dF9lbnRyeTsgXAorfSBcCit9IHdoaWxlICgwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2F0dGFjaAorKgorKiBIYWxmIG9mIHRoZSBhdHRhY2gvZGV0YWNoIHBhaXIuICBDcmVhdGVzIGFuZCByZWdpc3RlcnMgYSBkZXZpY2UKKyogaW5zdGFuY2Ugd2l0aCBDYXJkIFNlcnZpY2VzLiAgSW4gdGhpcyBjYXNlLCBpdCBhbHNvIGNyZWF0ZXMgdGhlCisqIHdsYW5kZXYgc3RydWN0dXJlIGFuZCBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUuICBUaGVzZSBhcmUKKyogbGlua2VkIHRvIHRoZSBkZXZpY2UgaW5zdGFuY2UgdmlhIGl0cyBwcml2IG1lbWJlci4KKyoKKyogQXJndW1lbnRzOgorKglub25lCisqCisqIFJldHVybnM6CisqCUEgdmFsaWQgcHRyIHRvIGRldl9saW5rX3Qgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkIChpbnNtb2QvaW5pdF9tb2R1bGUvcmVnaXN0ZXJfcGNjYXJkX2RyaXZlcikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZGV2X2xpbmtfdCAqcHJpc20yc3RhX2F0dGFjaCh2b2lkKQoreworCWNsaWVudF9yZWdfdAkJY2xpZW50X3JlZzsKKwlpbnQJCQlyZXN1bHQ7CisJZGV2X2xpbmtfdAkJKmxpbmsgPSBOVUxMOworCXdsYW5kZXZpY2VfdAkJKndsYW5kZXYgPSBOVUxMOworCWhmYTM4NHhfdAkJKmh3ID0gTlVMTDsKKworCURCRkVOVEVSOworCisJLyogQWxsb2Mgb3VyIHN0cnVjdHVyZXMgKi8KKwlsaW5rID0JCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZfbGlua190KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWxpbmsgfHwgKCh3bGFuZGV2ID0gY3JlYXRlX3dsYW4oKSkgPT0gTlVMTCkpIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisJaHcgPSB3bGFuZGV2LT5wcml2OworCisJLyogQ2xlYXIgYWxsIHRoZSBzdHJ1Y3RzICovCisJbWVtc2V0KGxpbmssIDAsIHNpemVvZihzdHJ1Y3QgZGV2X2xpbmtfdCkpOworCisJaWYgKCB3bGFuX3NldHVwKHdsYW5kZXYpICE9IDAgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogd2xhbl9zZXR1cCgpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgaHcgc3RydWN0IGZvciBub3cgKi8KKwloZmEzODR4X2NyZWF0ZShodywgMCwgMCwgTlVMTCk7CisJaHctPndsYW5kZXYgPSB3bGFuZGV2OworCisJLyogSW5pdGlhbGl6ZSB0aGUgUEMgY2FyZCBkZXZpY2Ugb2JqZWN0LiAqLworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMCkpCisJaW5pdF90aW1lcigmbGluay0+cmVsZWFzZSk7CisJbGluay0+cmVsZWFzZS5mdW5jdGlvbiA9ICZwcmlzbTJzdGFfcmVsZWFzZTsKKwlsaW5rLT5yZWxlYXNlLmRhdGEgPSAodV9sb25nKWxpbms7CisjZW5kaWYKKwlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKwlsaW5rLT5wcml2ID0gd2xhbmRldjsKKyNpZiAoZGVmaW5lZChDU19SRUxFQVNFX0NPREUpICYmIChDU19SRUxFQVNFX0NPREUgPCAweDI5MTEpKQorCWxpbmstPmlycS5JbnN0YW5jZSA9IHdsYW5kZXY7CisjZW5kaWYKKworCS8qIExpbmsgaW4gdG8gdGhlIGxpc3Qgb2YgZGV2aWNlcyBtYW5hZ2VkIGJ5IHRoaXMgZHJpdmVyICovCisJbGluay0+bmV4dCA9IGRldl9saXN0OworCWRldl9saXN0ID0gbGluazsKKworCS8qIFJlZ2lzdGVyIHdpdGggQ2FyZCBTZXJ2aWNlcyAqLworCWNsaWVudF9yZWcuZGV2X2luZm8gPSAmZGV2X2luZm87CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxMSkgKQorCWNsaWVudF9yZWcuQXR0cmlidXRlcyA9IElORk9fSU9fQ0xJRU5UIHwgSU5GT19DQVJEX1NIQVJFOworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDEzKSApCisJY2xpZW50X3JlZy5FdmVudE1hc2sgPQorCQlDU19FVkVOVF9DQVJEX0lOU0VSVElPTiB8IENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB8CisJCUNTX0VWRU5UX1JFU0VUX1JFUVVFU1QgfAorCQlDU19FVkVOVF9SRVNFVF9QSFlTSUNBTCB8IENTX0VWRU5UX0NBUkRfUkVTRVQgfAorCQlDU19FVkVOVF9QTV9TVVNQRU5EIHwgQ1NfRVZFTlRfUE1fUkVTVU1FOworCWNsaWVudF9yZWcuZXZlbnRfaGFuZGxlciA9ICZwcmlzbTJzdGFfZXZlbnQ7CisjZW5kaWYKKworCWNsaWVudF9yZWcuVmVyc2lvbiA9IDB4MDIxMDsKKwljbGllbnRfcmVnLmV2ZW50X2NhbGxiYWNrX2FyZ3MuY2xpZW50X2RhdGEgPSBsaW5rOworCisJcmVzdWx0ID0gcGNtY2lhX3JlZ2lzdGVyX2NsaWVudCgmbGluay0+aGFuZGxlLCAmY2xpZW50X3JlZyk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCWNzX2Vycm9yKGxpbmstPmhhbmRsZSwgUmVnaXN0ZXJDbGllbnQsIHJlc3VsdCk7CisJCXByaXNtMnN0YV9kZXRhY2gobGluayk7CisJCXJldHVybiBOVUxMOworCX0KKworCWdvdG8gZG9uZTsKKworIGZhaWxlZDoKKwlpZiAobGluaykJa2ZyZWUobGluayk7CisJaWYgKHdsYW5kZXYpCWtmcmVlKHdsYW5kZXYpOworCWlmIChodykJCWtmcmVlKGh3KTsKKwlsaW5rID0gTlVMTDsKKworIGRvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gbGluazsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2RldGFjaAorKgorKiBSZW1vdmUgb25lIG9mIHRoZSBkZXZpY2UgaW5zdGFuY2VzIG1hbmFnZWQgYnkgdGhpcyBkcml2ZXIuCisqICAgU2VhcmNoIHRoZSBsaXN0IGZvciB0aGUgZ2l2ZW4gaW5zdGFuY2UsCisqICAgY2hlY2sgb3VyIGZsYWdzIGZvciBhIHdhaXRpbmcgdGltZXInZCByZWxlYXNlIGNhbGwKKyogICBjYWxsIHJlbGVhc2UKKyogICBEZXJlZ2lzdGVyIHRoZSBpbnN0YW5jZSB3aXRoIENhcmQgU2VydmljZXMKKyogICAobmV0ZGV2aWNlKSB1bnJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZS4KKyogICB1bmxpbmsgdGhlIGluc3RhbmNlIGZyb20gdGhlIGxpc3QKKyogICBmcmVlIHRoZSBsaW5rLCBwcml2LCBhbmQgcHJpdi0+cHJpdiBtZW1vcnkKKyogTm90ZTogdGhlIGRldl9saXN0IHZhcmlhYmxlIGlzIGEgZHJpdmVyIHNjb3BlZCBzdGF0aWMgdXNlZCB0bworKgltYWludGFpbiBhIGxpc3Qgb2YgZGV2aWNlIGluc3RhbmNlcyBtYW5hZ2VkIGJ5IHRoaXMKKyoJZHJpdmVyLgorKgorKiBBcmd1bWVudHM6CisqCWxpbmsJcHRyIHRvIHRoZSBpbnN0YW5jZSB0byBkZXRhY2gKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCXRoZSBsaW5rIHN0cnVjdHVyZSBpcyBnb25lLCB0aGUgbmV0ZGV2aWNlIGlzIGdvbmUKKyoKKyogQ2FsbCBjb250ZXh0OgorKglNaWdodCBiZSBpbnRlcnJ1cHQsIGRvbid0IGJsb2NrLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMnN0YV9kZXRhY2goZGV2X2xpbmtfdCAqbGluaykKK3sKKwlkZXZfbGlua190CQkqKmxpbmtwOworCXdsYW5kZXZpY2VfdAkJKndsYW5kZXY7CisJaGZhMzg0eF90CQkqaHc7CisKKwlEQkZFTlRFUjsKKworCS8qIExvY2F0ZSBwcmV2IGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlmb3IgKGxpbmtwID0gJmRldl9saXN0OyAqbGlua3A7IGxpbmtwID0gJigqbGlua3ApLT5uZXh0KSB7CisJCWlmICgqbGlua3AgPT0gbGluaykgYnJlYWs7CisJfQorCisJaWYgKCpsaW5rcCAhPSBOVUxMKSB7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSkKKwkJdW5zaWduZWQgbG9uZwlmbGFnczsKKwkJLyogR2V0IHJpZCBvZiBhbnkgdGltZXInZCByZWxlYXNlIGNhbGwgKi8KKwkJc2F2ZV9mbGFncyhmbGFncyk7CisJCWNsaSgpOworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApKQorCQlpZiAobGluay0+c3RhdGUgJiBERVZfUkVMRUFTRV9QRU5ESU5HKSB7CisJCQlkZWxfdGltZXJfc3luYygmbGluay0+cmVsZWFzZSk7CisJCQlsaW5rLT5zdGF0ZSAmPSB+REVWX1JFTEVBU0VfUEVORElORzsKKwkJfQorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDApKQorCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKyNlbmRpZgorCisJCS8qIElmIGxpbmsgc2F5cyB3ZSdyZSBzdGlsbCBjb25maWcnZCwgY2FsbCByZWxlYXNlICovCisJCWlmIChsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpIHsKKwkJCXByaXNtMnN0YV9yZWxlYXNlKCh1X2xvbmcpbGluayk7CisJCQlpZiAobGluay0+c3RhdGUgJiBERVZfU1RBTEVfQ09ORklHKSB7CisJCQkJbGluay0+c3RhdGUgfD0gREVWX1NUQUxFX0xJTks7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJLyogVGVsbCBDYXJkIFNlcnZpY2VzIHdlJ3JlIG5vdCBhcm91bmQgYW55IG1vcmUgKi8KKwkJaWYgKGxpbmstPmhhbmRsZSkgeworCQkJcGNtY2lhX2RlcmVnaXN0ZXJfY2xpZW50KGxpbmstPmhhbmRsZSk7CisJCX0KKworCQkvKiBVbmxpbmsgZGV2aWNlIHN0cnVjdHVyZSwgZnJlZSBiaXRzICovCisJCSpsaW5rcCA9IGxpbmstPm5leHQ7CisJCWlmICggbGluay0+cHJpdiAhPSBOVUxMICkgeworCQkJd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWxpbmstPnByaXY7CisJCQlwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXYpOworCQkJaWYgKGxpbmstPmRldiAhPSBOVUxMKSB7CisJCQkJdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpOworCQkJfQorCQkJd2xhbl91bnNldHVwKHdsYW5kZXYpOworCQkJaWYgKHdsYW5kZXYtPnByaXYpIHsKKwkJCQlodyA9IHdsYW5kZXYtPnByaXY7CisJCQkJd2xhbmRldi0+cHJpdiA9IE5VTEw7CisJCQkJaWYgKGh3KSB7CisJCQkJCWhmYTM4NHhfZGVzdHJveShodyk7CisJCQkJCWtmcmVlKGh3KTsKKwkJCQl9CisJCQl9CisJCQlsaW5rLT5wcml2ID0gTlVMTDsKKwkJCWtmcmVlKHdsYW5kZXYpOworCQl9CisJCWtmcmVlKGxpbmspOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2NvbmZpZworKgorKiBIYWxmIG9mIHRoZSBjb25maWcvcmVsZWFzZSBwYWlyLiAgVXN1YWxseSBjYWxsZWQgaW4gcmVzcG9uc2UgdG8KKyogYSBjYXJkIGluc2VydGlvbiBldmVudC4gIEF0IHRoaXMgcG9pbnQsIHdlIF9rbm93XyB0aGVyZSdzIHNvbWUKKyogcGh5c2ljYWwgZGV2aWNlIHByZXNlbnQuICBUaGF0IG1lYW5zIHdlIGNhbiBzdGFydCBwb2tpbmcgYXJvdW5kCisqIGF0IHRoZSBDSVMgYW5kIGF0IGFueSBkZXZpY2Ugc3BlY2lmaWMgY29uZmlnIGRhdGEgd2Ugd2FudC4KKyoKKyogTm90ZSB0aGUgZ290b3MgYW5kIHRoZSBtYWNyb3MuICBJIHJlY29kZWQgdGhpcyBvbmNlIHdpdGhvdXQKKyogdGhlbSwgYW5kIGl0IGdvdCBpbmNyZWRpYmx5IHVnbHkuICBJdCdzIGFjdHVhbGx5IHNpbXBsZXIgd2l0aAorKiB0aGVtLgorKgorKiBBcmd1bWVudHM6CisqCWxpbmsJdGhlIGRldl9saW5rX3Qgc3RydWN0dXJlIGNyZWF0ZWQgaW4gYXR0YWNoIHRoYXQKKyoJCXJlcHJlc2VudHMgdGhpcyBkZXZpY2UgaW5zdGFuY2UuCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKglSZXNvdXJjZXMgKGlycSwgaW8sIG1lbSkgYXJlIGFsbG9jYXRlZAorKglUaGUgcGNtY2lhIGRldl9saW5rLT5ub2RlLT5uYW1lIGlzIHNldAorKgkoRm9yIG5ldGNhcmRzKSBUaGUgZGV2aWNlIHN0cnVjdHVyZSBpcyBmaW5pc2hlZCBhbmQsCisqCSAgbW9zdCBpbXBvcnRhbnRseSwgcmVnaXN0ZXJlZC4gIFRoaXMgbWVhbnMgdGhhdCB0aGVyZQorKgkgIGlzIG5vdyBhIF9uYW1lZF8gZGV2aWNlIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgZnJvbQorKgkgIHVzZXJsYW5kLgorKgorKiBDYWxsIGNvbnRleHQ6CisqCU1heSBiZSBjYWxsZWQgZnJvbSBhIHRpbWVyLiAgRG9uJ3QgYmxvY2shCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAorZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBDRkdfQ0hFQ0soZm4sIHJldGYpIFwKK2RvIHsgaW50IHJldCA9IChyZXRmKTsgXAoraWYgKHJldCAhPSAwKSB7IFwKKyAgICAgICAgV0xBTl9MT0dfREVCVUcoMSwgIkNhcmRTZXJ2aWNlcygiICNmbiAiKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsgXAorICAgICAgICBjc19lcnJvcihsaW5rLT5oYW5kbGUsIGZuLCByZXQpOyBcCisgICAgICAgIGdvdG8gbmV4dF9lbnRyeTsgXAorfSBcCit9IHdoaWxlICgwKQorCit2b2lkIHByaXNtMnN0YV9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKK3sKKwljbGllbnRfaGFuZGxlX3QJCWhhbmRsZTsKKwl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2OworCWhmYTM4NHhfdCAgICAgICAgICAgICAgICpodzsKKwlpbnQJCQlsYXN0X2ZuOworCWludAkJCWxhc3RfcmV0OworCXR1cGxlX3QJCQl0dXBsZTsKKwljaXNwYXJzZV90CQlwYXJzZTsKKwljb25maWdfaW5mb190CQlzb2NrZXRjb25mOworCVVJTlQ4CQkJYnVmWzY0XTsKKwlpbnQJCQltaW5WY2MgPSAwOworCWludAkJCW1heFZjYyA9IDA7CisJY2lzdHBsX2NmdGFibGVfZW50cnlfdAlkZmx0ID0geyAwIH07CisKKwlEQkZFTlRFUjsKKworCWhhbmRsZSA9IGxpbmstPmhhbmRsZTsKKwl3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopbGluay0+cHJpdjsKKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwkvKiBDb2xsZWN0IHRoZSBjb25maWcgcmVnaXN0ZXIgaW5mbyAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7CisJdHVwbGUuQXR0cmlidXRlcyA9IDA7CisJdHVwbGUuVHVwbGVEYXRhID0gYnVmOworCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKwlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSk7CisJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKKwlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOworCisJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CisJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOworCisJLyogQ29uZmlndXJlIGNhcmQgKi8KKwlsaW5rLT5zdGF0ZSB8PSBERVZfQ09ORklHOworCisJLyogQWNxdWlyZSB0aGUgY3VycmVudCBzb2NrZXQgY29uZmlnIChuZWVkIFZjYyBzZXR0aW5nKSAqLworCUNTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsICZzb2NrZXRjb25mKSk7CisKKwkvKiBMb29wIHRocm91Z2ggdGhlIGNvbmZpZyB0YWJsZSBlbnRyaWVzIHVudGlsIHdlIGZpbmQgb25lIHRoYXQgd29ya3MgKi8KKwkvKiBBc3N1bWVzIGEgY29tcGxldGUgYW5kIHZhbGlkIENJUyAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOworCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwl3aGlsZSAoMSkgeworCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOworCQlDRkdfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKKwkJQ0ZHX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsICZ0dXBsZSwgJnBhcnNlKSk7CisKKwkJaWYgKGNmZy0+aW5kZXggPT0gMCkgZ290byBuZXh0X2VudHJ5OworCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKKworCQkvKiBMZXRzIHByaW50IG91dCB0aGUgVmNjIHRoYXQgdGhlIGNvbnRyb2xsZXIrcGNtY2lhLWNzIHNldAorCQkgKiBmb3IgdXMsIGNhdXNlIHRoYXQncyB3aGF0IHdlJ3JlIGdvaW5nIHRvIHVzZS4KKwkJICovCisJCVdMQU5fTE9HX0RFQlVHKDEsIkluaXRpYWwgVmNjPSVkLzEwdlxuIiwgc29ja2V0Y29uZi5WY2MpOworCQlpZiAocHJpc20yX2lnbm9yZXZjYykgeworCQkJbGluay0+Y29uZi5WY2MgPSBzb2NrZXRjb25mLlZjYzsKKwkJCWdvdG8gc2tpcHZjYzsKKwkJfQorCisJCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLworCQkvKiBOb3RlIHRoYXQgdGhlIENJUyB2YWx1ZXMgbmVlZCB0byBiZSByZXNjYWxlZCAqLworCQlpZiAoY2ZnLT52Y2MucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsICJWY2Mgb2J0YWluZWQgZnJvbSBjdXJ0dXBsLlZOT01cbiIpOworCQkJbWluVmNjID0gbWF4VmNjID0KKwkJCQljZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7CisJCX0gZWxzZSBpZiAoZGZsdC52Y2MucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsICJWY2Mgc2V0IGZyb20gZGZsdC5WTk9NXG4iKTsKKwkJCW1pblZjYyA9IG1heFZjYyA9CisJCQkJZGZsdC52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOworCQl9IGVsc2UgaWYgKChjZmctPnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTUFYKSkgJiYKKwkJCSAgIChjZmctPnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTUlOKSkgKSB7CisJCQlXTEFOX0xPR19ERUJVRygxLCAiVmNjIHNldCBmcm9tIGN1cnR1cGwoVk1JTixWTUFYKVxuIik7CQkJbWluVmNjID0gY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZNSU5dLzEwMDAwOworCQkJbWF4VmNjID0gY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZNQVhdLzEwMDAwOworCQl9IGVsc2UgaWYgKChkZmx0LnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTUFYKSkgJiYKKwkJCSAgIChkZmx0LnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTUlOKSkgKSB7CisJCQlXTEFOX0xPR19ERUJVRygxLCAiVmNjIHNldCBmcm9tIGRmbHQoVk1JTixWTUFYKVxuIik7CisJCQltaW5WY2MgPSBkZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk1JTl0vMTAwMDA7CisJCQltYXhWY2MgPSBkZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk1BWF0vMTAwMDA7CisJCX0KKworCQlpZiAoIHNvY2tldGNvbmYuVmNjID49IG1pblZjYyAmJiBzb2NrZXRjb25mLlZjYyA8PSBtYXhWY2MpIHsKKwkJCWxpbmstPmNvbmYuVmNjID0gc29ja2V0Y29uZi5WY2M7CisJCX0gZWxzZSB7CisJCQkvKiBbTVNNXTogTm90ZSB0aGF0IEkndmUgZ2l2ZW4gdXAgdHJ5aW5nIHRvIGNoYW5nZQorCQkJICogdGhlIFZjYyBpZiBhIGNoYW5nZSBpcyBpbmRpY2F0ZWQuICBJdCBzZWVtcyB0aGUKKwkJCSAqIHN5c3RlbSZzb2NrZXRjb250cm9sbGVyJmNhcmQgdmVuZG9ycyBjYW4ndCBzZWVtCisJCQkgKiB0byBnZXQgaXQgcmlnaHQsIHNvIEknbSB0aXJlZCBvZiB0cnlpbmcgdG8gaGFjaworCQkJICogbXkgd2F5IGFyb3VuZCBpdC4gIHBjbWNpYS1jcyBkb2VzIGl0cyBiZXN0IHVzaW5nCisJCQkgKiB0aGUgdm9sdGFnZSBzZW5zZSBwaW5zIGJ1dCBzb21ldGltZXMgdGhlIGNvbnRyb2xsZXIKKwkJCSAqIGxpZXMuICBUaGVuLCBldmVuIGlmIHdlIGhhdmUgYSBnb29kIHJlYWQgb24gdGhlIFZTCisJCQkgKiBwaW5zLCBzb21lIHN5c3RlbSBkZXNpZ25zIHdpbGwgc2lsZW50bHkgaWdub3JlIG91cgorCQkJICogcmVxdWVzdHMgdG8gc2V0IHRoZSB2b2x0YWdlLiAgQWRkaXRpb25hbGx5LCBzb21lCisJCQkgKiB2ZW5kb3JzIGhhdmUgMy4zdiBpbmRpY2F0ZWQgb24gdGhlaXIgc2Vuc2UgcGlucywKKwkJCSAqIGJ1dCA1diBzcGVjaWZpZWQgaW4gdGhlIENJUyBvciB2aWNlLXZlcnNhLiAgSSd2ZQorCQkJICogaGFkIGl0LiAgTXkgb25seSByZWNvbW1lbmRhdGlvbiBpcyAibGV0IHRoZSBidXllcgorCQkJICogYmV3YXJlIi4gIFlvdXIgc3lzdGVtIG1pZ2h0IHN1cHBseSA1diB0byBhIDN2IGNhcmQKKwkJCSAqIChwb3NzaWJseSBjYXVzaW5nIGRhbWFnZSkgb3IgYSAzdiBjYXBhYmxlIHN5c3RlbQorCQkJICogbWlnaHQgc3VwcGx5IDV2IHRvIGEgM3YgY2FwYWJsZSBjYXJkICh3YXN0aW5nCisJCQkgKiBwcmVjaW91cyBiYXR0ZXJ5IGxpZmUpLgorCQkJICogTXkgb25seSByZWNvbW1lbmRhdGlvbiAoaWYgeW91IGNhcmUpIGlzIHRvIGdldAorCQkJICogeW91cnNlbGYgYW4gZXh0ZW5kZXIgY2FyZCAoSSBkb24ndCBrbm93IHdoZXJlLCBJCisJCQkgKiBoYXZlIG9ubHkgb25lIG15c2VsZikgYW5kIGEgbWV0ZXIgYW5kIHRlc3QgaXQgZm9yCisJCQkgKiB5b3Vyc2VsZi4KKwkJCSAqLworCQkJZ290byBuZXh0X2VudHJ5OworCQl9Citza2lwdmNjOgorCQlXTEFOX0xPR19ERUJVRygxLCAibGluay0+Y29uZi5WY2M9JWRcbiIsIGxpbmstPmNvbmYuVmNjKTsKKworCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwkJLyogSEFDSzogZHVlIHRvIGEgYmFkIENJUy4uLi53ZSBBTFdBWVMgbmVlZCBhbiBpbnRlcnJ1cHQgKi8KKwkJLyogaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKSAqLworCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KKwkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKKwkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKKwkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CisJCQlpZiAgKCBsaW5rLT5pby5CYXNlUG9ydDEgIT0gMCApIHsKKwkJCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJCSJCcmFpbiBkYW1hZ2VkIENJUzogaGFyZCBjb2RlZCBpb2Jhc2U9IgorCQkJCSIweCV4LCB0cnkgbGV0dGluZyBwY21jaWFfY3MgZGVjaWRlLi4uXG4iLAorCQkJCWxpbmstPmlvLkJhc2VQb3J0MSApOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IDA7CisJCQl9CisJCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCX0KKwkJfQorCisJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJCUNGR19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmstPmhhbmRsZSwgJmxpbmstPmlvKSk7CisKKwkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLworCQlicmVhazsKKworbmV4dF9lbnRyeToKKwkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQorCQkJZGZsdCA9ICpjZmc7CisJCUNTX0NIRUNLKEdldE5leHRUdXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCAmdHVwbGUpKTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFzc2lnbiBhICovCisJLyogaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LCB1bmxlc3MgdGhlICdIYW5kbGVyJyBtZW1iZXIgb2YgdGhlICovCisJLyogaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gKi8KKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQorCXsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDExKSApCisJCWludAkJCWk7CisJCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9JTkZPMl9WQUxJRCB8IElSUV9MRVZFTF9JRDsKKwkJaWYgKGlycV9saXN0WzBdID09IC0xKQorCQkJbGluay0+aXJxLklSUUluZm8yID0gaXJxX21hc2s7CisJCWVsc2UKKwkJCWZvciAoaT0wOyBpPDQ7IGkrKykKKwkJCQlsaW5rLT5pcnEuSVJRSW5mbzIgfD0gMSA8PCBpcnFfbGlzdFtpXTsKKyNlbHNlCisJCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKyNlbmRpZgorCQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9IQU5ETEVfUFJFU0VOVDsKKwkJbGluay0+aXJxLkhhbmRsZXIgPSBoZmEzODR4X2ludGVycnVwdDsKKwkJbGluay0+aXJxLkluc3RhbmNlID0gd2xhbmRldjsKKwkJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmstPmhhbmRsZSwgJmxpbmstPmlycSkpOworCX0KKworCS8qIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwICovCisJLyogdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZSAqLworCS8qIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuICovCisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluay0+aGFuZGxlLCAmbGluay0+Y29uZikpOworCisJLyogRmlsbCB0aGUgbmV0ZGV2aWNlIHdpdGggdGhpcyBpbmZvICovCisJd2xhbmRldi0+bmV0ZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CisJd2xhbmRldi0+bmV0ZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisKKwkvKiBSZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCisJV0xBTl9MT0dfSU5GTygiJXM6IGluZGV4IDB4JTAyeDogVmNjICVkLiVkIiwKKwkJZGV2X2luZm8sIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgsCisJCWxpbmstPmNvbmYuVmNjLzEwLCBsaW5rLT5jb25mLlZjYyUxMCk7CisJaWYgKGxpbmstPmNvbmYuVnBwMSkKKwkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwMS8xMCwgbGluay0+Y29uZi5WcHAxJTEwKTsKKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQorCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMxKQorCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aW8uQmFzZVBvcnQxK2xpbmstPmlvLk51bVBvcnRzMS0xKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMyKQorCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsIGxpbmstPmlvLkJhc2VQb3J0MitsaW5rLT5pby5OdW1Qb3J0czItMSk7CisJcHJpbnRrKCJcbiIpOworCisJbGluay0+c3RhdGUgJj0gfkRFVl9DT05GSUdfUEVORElORzsKKworCS8qIExldCBwY21jaWEga25vdyB0aGUgZGV2aWNlIG5hbWUgKi8KKwlsaW5rLT5kZXYgPSAmaHctPm5vZGU7CisKKwkvKiBSZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UgYW5kIGdldCBhc3NpZ25lZCBhIG5hbWUgKi8KKwlTRVRfTU9EVUxFX09XTkVSKHdsYW5kZXYtPm5ldGRldik7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMTEpICkKKwlTRVRfTkVUREVWX0RFVih3bGFuZGV2LT5uZXRkZXYsICAmaGFuZGxlX3RvX2RldihsaW5rLT5oYW5kbGUpKTsKKyNlbmRpZgorCWlmIChyZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpICE9IDApIHsKKwkJV0xBTl9MT0dfTk9USUNFKCJwcmlzbTJzdGFfY3M6IHJlZ2lzdGVyX3dsYW5kZXYoKSBmYWlsZWQuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJc3RyY3B5KGh3LT5ub2RlLmRldl9uYW1lLCB3bGFuZGV2LT5uYW1lKTsKKworCS8qIEFueSBkZXZpY2UgY3VzdG9tIGNvbmZpZy9xdWVyeSBzdHVmZiBzaG91bGQgYmUgZG9uZSBoZXJlICovCisJLyogRm9yIGEgbmV0ZGV2aWNlLCB3ZSBzaG91bGQgYXQgbGVhc3QgZ3JhYiB0aGUgbWFjIGFkZHJlc3MgKi8KKworCXJldHVybjsKK2NzX2ZhaWxlZDoKKwljc19lcnJvcihsaW5rLT5oYW5kbGUsIGxhc3RfZm4sIGxhc3RfcmV0KTsKKwlXTEFOX0xPR19FUlJPUigiTmV4dFR1cGxlIGZhaWx1cmU/IEl0J3MgcHJvYmFibHkgYSBWY2MgbWlzbWF0Y2guXG4iKTsKKworZmFpbGVkOgorCXByaXNtMnN0YV9yZWxlYXNlKCh1X2xvbmcpbGluayk7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX3JlbGVhc2UKKyoKKyogSGFsZiBvZiB0aGUgY29uZmlnL3JlbGVhc2UgcGFpci4gIFVzdWFsbHkgY2FsbGVkIGluIHJlc3BvbnNlIHRvCisqIGEgY2FyZCBlamVjdGlvbiBldmVudC4gIENoZWNrcyB0byBtYWtlIHN1cmUgbm8gaGlnaGVyIGxheWVycworKiBhcmUgc3RpbGwgKG9yIHRoaW5rIHRoZXkgYXJlKSB1c2luZyB0aGUgY2FyZCB2aWEgdGhlIGxpbmstPm9wZW4KKyogZmllbGQuCisqCisqIE5PVEU6IERvbid0IGZvcmdldCB0byBpbmNyZW1lbnQgdGhlIGxpbmstPm9wZW4gdmFyaWFibGUgaW4gdGhlCisqICBkZXZpY2Vfb3BlbiBtZXRob2QsIGFuZCBkZWNyZW1lbnQgaXQgaW4gdGhlIGRldmljZV9jbG9zZQorKiAgbWV0aG9kLgorKgorKiBBcmd1bWVudHM6CisqCWFyZwlhIGdlbmVyaWMgMzIgYml0IHZhcmlhYmxlLiAgSXQncyB0aGUgdmFsdWUgdGhhdAorKgkJd2UgYXNzaWduZWQgdG8gbGluay0+cmVsZWFzZS5kYXRhIGluIHN0YV9hdHRhY2goKS4KKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCUFsbCByZXNvdXJjZXMgc2hvdWxkIGJlIHJlbGVhc2VkIGFmdGVyIHRoaXMgZnVuY3Rpb24KKyoJZXhlY3V0ZXMgYW5kIGZpbmRzIHRoZSBkZXZpY2UgIW9wZW4uCisqCisqIENhbGwgY29udGV4dDoKKyoJUG9zc2libHkgaW4gYSB0aW1lciBjb250ZXh0LiAgRG9uJ3QgZG8gYW55dGhpbmcgdGhhdCdsbAorKglibG9jay4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJzdGFfcmVsZWFzZSh1X2xvbmcgYXJnKQoreworICAgICAgICBkZXZfbGlua190CSpsaW5rID0gKGRldl9saW5rX3QgKilhcmc7CisKKwlEQkZFTlRFUjsKKworCS8qIEZpcnN0IHRoaW5nIHdlIHNob3VsZCBkbyBpcyBnZXQgdGhlIE1TRCBiYWNrIHRvIHRoZQorCSAqIEhXUFJFU0VOVCBzdGF0ZS4gIEkuZS4gZXZlcnl0aGluZyBxdWllc2NlbnQuCisJICovCisJcHJpc20yc3RhX2lmc3RhdGUobGluay0+cHJpdiwgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGUpOworCisgICAgICAgIGlmIChsaW5rLT5vcGVuKSB7CisJCS8qIFRPRE86IEkgZG9uJ3QgdGhpbmsgd2UncmUgZXZlbiB1c2luZyB0aGlzIGJpdCBvZiBjb2RlCisJCSAqIGFuZCBJIGRvbid0IHRoaW5rIGl0J3MgaHVydGluZyB1cyBhdCB0aGUgbW9tZW50LgorCQkgKi8KKyAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygxLAorCQkJInByaXNtMnN0YV9jczogcmVsZWFzZSBwb3N0cG9uZWQsICclcycgc3RpbGwgb3BlblxuIiwKKwkJCWxpbmstPmRldi0+ZGV2X25hbWUpOworICAgICAgICAgICAgICAgIGxpbmstPnN0YXRlIHw9IERFVl9TVEFMRV9DT05GSUc7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOworICAgICAgICBwY21jaWFfcmVsZWFzZV9pbyhsaW5rLT5oYW5kbGUsICZsaW5rLT5pbyk7CisgICAgICAgIHBjbWNpYV9yZWxlYXNlX2lycShsaW5rLT5oYW5kbGUsICZsaW5rLT5pcnEpOworCisgICAgICAgIGxpbmstPnN0YXRlICY9IH4oREVWX0NPTkZJRyB8IERFVl9SRUxFQVNFX1BFTkRJTkcpOworCisJREJGRVhJVDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9ldmVudAorKgorKiBIYW5kbGVyIGZvciBjYXJkIHNlcnZpY2VzIGV2ZW50cy4KKyoKKyogQXJndW1lbnRzOgorKglldmVudAkJVGhlIGV2ZW50IGNvZGUKKyoJcHJpb3JpdHkJaGkvbG93IC0gUkVNT1ZBTCBpcyB0aGUgb25seSBoaQorKglhcmdzCQlwdHIgdG8gY2FyZCBzZXJ2aWNlcyBzdHJ1Y3QgY29udGFpbmluZyBpbmZvIGFib3V0CisqCQkJcGNtY2lhIHN0YXR1cworKgorKiBSZXR1cm5zOgorKglaZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqCisqIENhbGwgY29udGV4dDoKKyoJQm90aCBpbnRlcnJ1cHQgYW5kIHByb2Nlc3MgdGhyZWFkLCBkZXBlbmRzIG9uIHRoZSBldmVudC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorcHJpc20yc3RhX2V2ZW50ICgKKwlldmVudF90IGV2ZW50LAorCWludCBwcmlvcml0eSwKKwlldmVudF9jYWxsYmFja19hcmdzX3QgKmFyZ3MpCit7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlkZXZfbGlua190CQkqbGluayA9IChkZXZfbGlua190ICopIGFyZ3MtPmNsaWVudF9kYXRhOworCXdsYW5kZXZpY2VfdAkJKndsYW5kZXYgPSAod2xhbmRldmljZV90KilsaW5rLT5wcml2OworCWhmYTM4NHhfdAkJKmh3ID0gTlVMTDsKKworCURCRkVOVEVSOworCisJaWYgKHdsYW5kZXYpIGh3ID0gd2xhbmRldi0+cHJpdjsKKworCXN3aXRjaCAoZXZlbnQpCisJeworCWNhc2UgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT046CisJCVdMQU5fTE9HX0RFQlVHKDUsImV2ZW50IGlzIElOU0VSVElPTlxuIik7CisJCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOworCQlwcmlzbTJzdGFfY29uZmlnKGxpbmspOworCQlpZiAoIShsaW5rLT5zdGF0ZSAmIERFVl9DT05GSUcpKSB7CisJCQl3bGFuZGV2LT5uZXRkZXYtPmlycSA9IDA7CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkiJXM6IEluaXRpYWxpemF0aW9uIGZhaWxlZCFcbiIsIGRldl9pbmZvKTsKKwkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdGQUlMOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBGaWxsIGluIHRoZSByZXN0IG9mIHRoZSBodyBzdHJ1Y3QgKi8KKwkJaHctPmlycSA9IHdsYW5kZXYtPm5ldGRldi0+aXJxOworCQlody0+aW9iYXNlID0gd2xhbmRldi0+bmV0ZGV2LT5iYXNlX2FkZHI7CisJCWh3LT5saW5rID0gbGluazsKKworCQlpZiAocHJpc20yX2RvcmVzZXQpIHsKKwkJCXJlc3VsdCA9IGhmYTM4NHhfY29yZXJlc2V0KGh3LAorCQkJCQlwcmlzbTJfcmVzZXRfaG9sZHRpbWUsCisJCQkJCXByaXNtMl9yZXNldF9zZXR0bGV0aW1lLCAwKTsKKwkJCWlmICggcmVzdWx0ICkgeworCQkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCQkiY29yZXJlc2V0KCkgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLAorCQkJCQlyZXN1bHQpOworCQkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdGQUlMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKyNpZiAwCisJCS8qCisJCSAqIFRPRE86IHRlc3RfaG9zdGlmKCkgbm90IGltcGxlbWVudGVkIHlldC4KKwkJICovCisJCXJlc3VsdCA9IGhmYTM4NHhfdGVzdF9ob3N0aWYoaHcpOworCQlpZiAocmVzdWx0KSB7CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCSJ0ZXN0X2hvc3RpZigpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKKwkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdGQUlMOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKKwkJYnJlYWs7CisKKwljYXNlIENTX0VWRU5UX0NBUkRfUkVNT1ZBTDoKKwkJV0xBTl9MT0dfREVCVUcoNSwiZXZlbnQgaXMgUkVNT1ZBTFxuIik7CisJCWxpbmstPnN0YXRlICY9IH5ERVZfUFJFU0VOVDsKKworCQlpZiAod2xhbmRldikgeworCQkJcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZCh3bGFuZGV2KTsKKwkJfQorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwwKSkKKwkJaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKKwkJeworCQkJbGluay0+cmVsZWFzZS5leHBpcmVzID0gamlmZmllcyArIChIWi8yMCk7CisJCQlhZGRfdGltZXIoJmxpbmstPnJlbGVhc2UpOworCQl9CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBDU19FVkVOVF9SRVNFVF9SRVFVRVNUOgorCQlXTEFOX0xPR19ERUJVRyg1LCJldmVudCBpcyBSRVNFVF9SRVFVRVNUXG4iKTsKKwkJV0xBTl9MT0dfTk9USUNFKAorCQkJInByaXNtMiBjYXJkIHJlc2V0IG5vdCBzdXBwb3J0ZWQgIgorCQkJImR1ZSB0byBwb3N0LXJlc2V0IHVzZXIgbW9kZSBjb25maWd1cmF0aW9uICIKKwkJCSJyZXF1aXJlbWVudHMuXG4iKTsKKwkJV0xBTl9MT0dfTk9USUNFKAorCQkJIiAgRnJvbSB1c2VyIG1vZGUsIHVzZSAiCisJCQkiJ2NhcmRjdGwgc3VzcGVuZDtjYXJkY3RsIHJlc3VtZScgIgorCQkJImluc3RlYWQuXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBDU19FVkVOVF9SRVNFVF9QSFlTSUNBTDoKKwljYXNlIENTX0VWRU5UX0NBUkRfUkVTRVQ6CisJCVdMQU5fTE9HX1dBUk5JTkcoIlJ4J2QgQ1NfRVZFTlRfUkVTRVRfeHh4LCBzaG91bGQgbm90ICIKKwkJCSJiZSBwb3NzaWJsZSBzaW5jZSBSRVNFVF9SRVFVRVNUIHdhcyBkZW5pZWQuXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIENTX0VWRU5UX1BNX1NVU1BFTkQ6CisJCVdMQU5fTE9HX0RFQlVHKDUsImV2ZW50IGlzIFNVU1BFTkRcbiIpOworCQlsaW5rLT5zdGF0ZSB8PSBERVZfU1VTUEVORDsKKwkJaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykKKwkJeworCQkJcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGUpOworCQkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBDU19FVkVOVF9QTV9SRVNVTUU6CisJCVdMQU5fTE9HX0RFQlVHKDUsImV2ZW50IGlzIFJFU1VNRVxuIik7CisJCWxpbmstPnN0YXRlICY9IH5ERVZfU1VTUEVORDsKKwkJaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgeworCQkJcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUsICZsaW5rLT5jb25mKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOyAgLyogbm9vbmUgZWxzZSBkb2VzIGFudGhpbmcgd2l0aCB0aGUgcmV0dXJuIHZhbHVlICovCit9CisjZW5kaWYgLy8gPD0gMi42LjE1CisKKworCitpbnQgaGZhMzg0eF9jb3JlcmVzZXQoaGZhMzg0eF90ICpodywgaW50IGhvbGR0aW1lLCBpbnQgc2V0dGxldGltZSwgaW50IGdlbmVzaXMpCit7CisJaW50CQlyZXN1bHQgPSAwOworCWNvbmZfcmVnX3QJcmVnOworCVVJTlQ4CQljb3JzYXZlOworCURCRkVOVEVSOworCisJV0xBTl9MT0dfREVCVUcoMywgIkRvaW5nIHJlc2V0IHZpYSBDYXJkU2VydmljZXMoKS5cbiIpOworCisJLyogQ29sbGVjdCBDT1IgKi8KKwlyZWcuRnVuY3Rpb24gPSAwOworCXJlZy5BY3Rpb24gPSBDU19SRUFEOworCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHctPnBkZXYsICZyZWcpOworI2Vsc2UKKwlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoCisJCQlody0+bGluay0+aGFuZGxlLAorCQkJJnJlZyk7CisjZW5kaWYKKwlpZiAocmVzdWx0ICE9IENTX1NVQ0NFU1MgKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJIjowOiBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIoQ1NfUkVBRCkgZmFpbGVkLCIKKwkJCSJyZXN1bHQ9JWQuXG4iLCByZXN1bHQpOworCQlyZXN1bHQgPSAtRUlPOworCX0KKwljb3JzYXZlID0gcmVnLlZhbHVlOworCisJLyogV3JpdGUgcmVzZXQgYml0IChCSVQ3KSAqLworCXJlZy5WYWx1ZSB8PSBCSVQ3OworCXJlZy5BY3Rpb24gPSBDU19XUklURTsKKwlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJcmVzdWx0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3LT5wZGV2LCAmcmVnKTsKKyNlbHNlCisJcmVzdWx0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKAorCQkJaHctPmxpbmstPmhhbmRsZSwKKwkJCSZyZWcpOworI2VuZGlmCisJaWYgKHJlc3VsdCAhPSBDU19TVUNDRVNTICkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSI6MTogQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyKENTX1dSSVRFKSBmYWlsZWQsIgorCQkJInJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJCXJlc3VsdCA9IC1FSU87CisJfQorCisJLyogSG9sZCBmb3IgaG9sZHRpbWUgKi8KKwltZGVsYXkoaG9sZHRpbWUpOworCisJaWYgKGdlbmVzaXMpIHsKKwkJcmVnLlZhbHVlID0gZ2VuZXNpczsKKwkJcmVnLkFjdGlvbiA9IENTX1dSSVRFOworCQlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NDU1I7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCQlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHctPnBkZXYsICZyZWcpOworI2Vsc2UKKwkJcmVzdWx0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKAorCQkJCSAgICAgIGh3LT5saW5rLT5oYW5kbGUsCisJCQkJICAgICAgJnJlZyk7CisjZW5kaWYKKwkJaWYgKHJlc3VsdCAhPSBDU19TVUNDRVNTICkgeworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJIjoxOiBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIoQ1NfV1JJVEUpIGZhaWxlZCwiCisJCQkJInJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJCQlyZXN1bHQgPSAtRUlPOworCQl9CisJfQorCisJLyogSG9sZCBmb3IgaG9sZHRpbWUgKi8KKwltZGVsYXkoaG9sZHRpbWUpOworCisJLyogQ2xlYXIgcmVzZXQgYml0ICovCisJcmVnLlZhbHVlICY9IH5CSVQ3OworCXJlZy5BY3Rpb24gPSBDU19XUklURTsKKwlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMTYpCisJcmVzdWx0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3LT5wZGV2LCAmcmVnKTsKKyNlbHNlCisJcmVzdWx0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKAorCQkJCSAgICAgIGh3LT5saW5rLT5oYW5kbGUsCisJCQkJICAgICAgJnJlZyk7CisjZW5kaWYKKwlpZiAocmVzdWx0ICE9IENTX1NVQ0NFU1MgKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJIjoyOiBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIoQ1NfV1JJVEUpIGZhaWxlZCwiCisJCQkicmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBkb25lOworCX0KKworCS8qIFdhaXQgZm9yIHNldHRsZXRpbWUgKi8KKwltZGVsYXkoc2V0dGxldGltZSk7CisKKwkvKiBTZXQgbm9uLXJlc2V0IGJpdHMgYmFjayB3aGF0IHRoZXkgd2VyZSAqLworCXJlZy5WYWx1ZSA9IGNvcnNhdmU7CisJcmVnLkFjdGlvbiA9IENTX1dSSVRFOworCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxNikKKwlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHctPnBkZXYsICZyZWcpOworI2Vsc2UKKwlyZXN1bHQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoCisJCQkJICAgICAgaHctPmxpbmstPmhhbmRsZSwKKwkJCQkgICAgICAmcmVnKTsKKyNlbmRpZgorCWlmIChyZXN1bHQgIT0gQ1NfU1VDQ0VTUyApIHsKKwkJV0xBTl9MT0dfRVJST1IoCisJCQkiOjI6IEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlcihDU19XUklURSkgZmFpbGVkLCIKKwkJCSJyZXN1bHQ9JWQuXG4iLCByZXN1bHQpOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQorCitkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworI2lmZGVmIE1PRFVMRQorCitzdGF0aWMgaW50IF9faW5pdCBwcmlzbTJjc19pbml0KHZvaWQpCit7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSw2OCkpCisJc2VydmluZm9fdAlzZXJ2OworI2VuZGlmCisKKwlEQkZFTlRFUjsKKworICAgICAgICBXTEFOX0xPR19OT1RJQ0UoIiVzIExvYWRlZFxuIiwgdmVyc2lvbik7CisgICAgICAgIFdMQU5fTE9HX05PVElDRSgiZGV2X2luZm8gaXM6ICVzXG4iLCBkZXZfaW5mbyk7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDY4KSkKKwlwY21jaWFfZ2V0X2NhcmRfc2VydmljZXNfaW5mbygmc2Vydik7CisJaWYgKCBzZXJ2LlJldmlzaW9uICE9IENTX1JFTEVBU0VfQ09ERSApCisJeworCQlwcmludGsoS0VSTl9OT1RJQ0UiJXM6IENhcmRTZXJ2aWNlcyByZWxlYXNlIGRvZXMgbm90IG1hdGNoIVxuIiwgZGV2X2luZm8pOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogVGhpcyBjYWxsIHdpbGwgcmVzdWx0IGluIGEgY2FsbCB0byBwcmlzbTJzdGFfYXR0YWNoICovCisJLyogICBhbmQgZXZlbnR1YWxseSBwcmlzbTJzdGFfZGV0YWNoICovCisJcmVnaXN0ZXJfcGNjYXJkX2RyaXZlciggJmRldl9pbmZvLCAmcHJpc20yc3RhX2F0dGFjaCwgJnByaXNtMnN0YV9kZXRhY2gpOworI2Vsc2UKKwlwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZwcmlzbTJfY3NfZHJpdmVyKTsKKyNlbmRpZgorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHByaXNtMmNzX2NsZWFudXAodm9pZCkKK3sKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDY4KSkKKyAgICAgICAgZGV2X2xpbmtfdCAqbGluayA9IGRldl9saXN0OworICAgICAgICBkZXZfbGlua190ICpubGluazsKKyAgICAgICAgREJGRU5URVI7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDEwKSApCisJZm9yIChsaW5rPWRldl9saXN0OyBsaW5rICE9IE5VTEw7IGxpbmsgPSBubGluaykgeworCQlubGluayA9IGxpbmstPm5leHQ7CisJCWlmICggbGluay0+c3RhdGUgJiBERVZfQ09ORklHICkgeworCQkJcHJpc20yc3RhX3JlbGVhc2UoKHVfbG9uZylsaW5rKTsKKwkJfQorCQlwcmlzbTJzdGFfZGV0YWNoKGxpbmspOyAvKiByZW1lbWJlciBkZXRhY2goKSBmcmVlcyBsaW5rICovCisJfQorI2VuZGlmCisKKwl1bnJlZ2lzdGVyX3BjY2FyZF9kcml2ZXIoICZkZXZfaW5mbyk7CisjZWxzZQorCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmcHJpc20yX2NzX2RyaXZlcik7CisjZW5kaWYKKworICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzIFVubG9hZGVkXG4iLCB2ZXJzaW9uKTsKKworICAgICAgICBEQkZFWElUOworICAgICAgICByZXR1cm47Cit9CisKK21vZHVsZV9pbml0KHByaXNtMmNzX2luaXQpOworbW9kdWxlX2V4aXQocHJpc20yY3NfY2xlYW51cCk7CisKKyNlbmRpZiAvLyBNT0RVTEUKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX3BjaS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZTMyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJfcGNpLmMKQEAgLTAsMCArMSwzMzIgQEAKKyNkZWZpbmUgV0xBTl9IT1NUSUYgV0xBTl9QQ0kKKyNpbmNsdWRlICJoZmEzODR4LmMiCisjaW5jbHVkZSAicHJpc20ybWdtdC5jIgorI2luY2x1ZGUgInByaXNtMm1pYi5jIgorI2luY2x1ZGUgInByaXNtMnN0YS5jIgorCisjZGVmaW5lIFBDSV9TSVpFCQkweDEwMDAJCS8qIE1lbW9yeSBzaXplIC0gNEsgYnl0ZXMgKi8KKworLyogSVNMMzg3NEEgMTFNYi9zIFdMQU4gY29udHJvbGxlciAqLworI2RlZmluZSBQQ0lWRU5ET1JfSU5URVJTSUwJMHgxMjYwVUwKKyNkZWZpbmUgUENJREVWSUNFX0lTTDM4NzQJMHgzODczVUwgLyogW01TTV0geWVhaCBJIGtub3cuLi50aGUgSUQgc2F5cworCQkJCQkgICAgMzg3My4gVHJ1c3QgbWUsIGl0J3MgYSAzODc0LiAqLworCisvKiBTYW1zdW5nIFNXTC0yMjEwUCAxMU1iL3MgV0xBTiBjb250cm9sbGVyICh1c2VzIElTTDM4NzRBKSAqLworI2RlZmluZSBQQ0lWRU5ET1JfU0FNU1VORyAgICAgIDB4MTY3ZFVMCisjZGVmaW5lIFBDSURFVklDRV9TV0xfMjIxMFAgICAgMHhhMDAwVUwKKworI2RlZmluZSBQQ0lWRU5ET1JfTkVUR0VBUiAgICAgIDB4MTM4NVVMIC8qIGZvciBNQTMxMSAqLworCisvKiBQQ0kgQ2xhc3MgJiBTdWItQ2xhc3MgY29kZSwgTmV0d29yay0nT3RoZXIgY29udHJvbGxlcicgKi8KKyNkZWZpbmUgUENJX0NMQVNTX05FVFdPUktfT1RIRVJTIDB4MjgwCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9wcm9iZV9wY2kKKyoKKyogUHJvYmUgcm91dGluZSBjYWxsZWQgd2hlbiBhIFBDSSBkZXZpY2Ugdy8gbWF0Y2hpbmcgSUQgaXMgZm91bmQuCisqIFRoZSBJU0wzODc0IGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGZvbGxvd2luZyBtYXA6CisqICAgQkFSMDogUHJpc20yLnggcmVnaXN0ZXJzIG1lbW9yeSBtYXBwZWQsIHNpemU9NGsKKyogSGVyZSdzIHRoZSBzZXF1ZW5jZToKKyogICAtIEFsbG9jYXRlIHRoZSBQQ0kgcmVzb3VyY2VzLgorKiAgIC0gUmVhZCB0aGUgUENNQ0lBIGF0dHJpYnV0ZSBtZW1vcnkgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBXTEFOIGNhcmQKKyogICAtIFJlc2V0IHRoZSBNQUMKKyogICAtIEluaXRpYWxpemUgdGhlIG5ldGRldiBhbmQgd2xhbiBkYXRhCisqICAgLSBJbml0aWFsaXplIHRoZSBNQUMKKyoKKyogQXJndW1lbnRzOgorKglwZGV2CQlwdHIgdG8gcGNpIGRldmljZSBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbmZvIGFib3V0CisqCQkJcGNpIGNvbmZpZ3VyYXRpb24uCisqCWlkCQlwdHIgdG8gdGhlIGRldmljZSBpZCBlbnRyeSB0aGF0IG1hdGNoZWQgdGhpcyBkZXZpY2UuCisqCisqIFJldHVybnM6CisqCXplcm8JCS0gc3VjY2VzcworKgluZWdhdGl2ZQktIGZhaWxlZAorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBfX2RldmluaXQKK3ByaXNtMnN0YV9wcm9iZV9wY2koCisJc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWludAkJcmVzdWx0OworCXBoeXNfdAkJcGh5bWVtID0gMDsKKwl2b2lkCQlfX2lvbWVtICptZW0gPSBOVUxMOworICAgICAgICB3bGFuZGV2aWNlX3QgICAgKndsYW5kZXYgPSBOVUxMOworCWhmYTM4NHhfdAkqaHcgPSBOVUxMOworCisJREJGRU5URVI7CisKKwkvKiBFbmFibGUgdGhlIHBjaSBkZXZpY2UgKi8KKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiBwY2lfZW5hYmxlX2RldmljZSgpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBmYWlsOworCX0KKworCS8qIEZpZ3VyZSBvdXQgb3VyIHJlc291cmNlcyAqLworCXBoeW1lbSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKworICAgICAgICBpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwaHltZW0sIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCksICJQcmlzbTIiKSkgeworCQlwcmludGsoS0VSTl9FUlIgInByaXNtMjogQ2Fubm90IHJlc2VydmUgUENJIG1lbW9yeSByZWdpb25cbiIpOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWw7CisgICAgICAgIH0KKworCW1lbSA9IGlvcmVtYXAocGh5bWVtLCBQQ0lfU0laRSk7CisJaWYgKCBtZW0gPT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiBpb3JlbWFwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogTG9nIHRoZSBkZXZpY2UgKi8KKyAgICAgICAgV0xBTl9MT0dfSU5GTygiQSBQcmlzbTIuNSBQQ0kgZGV2aWNlIGZvdW5kLCAiCisJCSJwaHltZW06MHglbGx4LCBpcnE6JWQsIG1lbToweCVwXG4iLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXBoeW1lbSwgcGRldi0+aXJxLCBtZW0pOworCisJaWYgKCh3bGFuZGV2ID0gY3JlYXRlX3dsYW4oKSkgPT0gTlVMTCkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuXG4iLCBkZXZfaW5mbyk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbDsKKwl9CisJaHcgPSB3bGFuZGV2LT5wcml2OworCisJaWYgKCB3bGFuX3NldHVwKHdsYW5kZXYpICE9IDAgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogd2xhbl9zZXR1cCgpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBmYWlsOworCX0KKworCS8qIFNldHVwIG5ldGRldmljZSdzIGFiaWxpdHkgdG8gcmVwb3J0IHJlc291cmNlcworCSAqIE5vdGU6IHRoZSBuZXRkZXZpY2Ugd2FzIGFsbG9jYXRlZCBieSB3bGFuX3NldHVwKCkKKwkgKi8KKyAgICAgICAgd2xhbmRldi0+bmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnE7CisgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKyAgICAgICAgd2xhbmRldi0+bmV0ZGV2LT5tZW1fZW5kID0gd2xhbmRldi0+bmV0ZGV2LT5tZW1fc3RhcnQgKworCQlwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCisJLyogSW5pdGlhbGl6ZSB0aGUgaHcgZGF0YSAqLworICAgICAgICBoZmEzODR4X2NyZWF0ZShodywgd2xhbmRldi0+bmV0ZGV2LT5pcnEsIDAsIG1lbSk7CisJaHctPndsYW5kZXYgPSB3bGFuZGV2OworCisJLyogUmVnaXN0ZXIgdGhlIHdsYW5kZXYsIHRoaXMgZ2V0cyB1cyBhIG5hbWUgYW5kIHJlZ2lzdGVycyB0aGUKKwkgKiBsaW51eCBuZXRkZXZpY2UuCisJICovCisJU0VUX01PRFVMRV9PV05FUih3bGFuZGV2LT5uZXRkZXYpOworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDApKQorICAgICAgIFNFVF9ORVRERVZfREVWKHdsYW5kZXYtPm5ldGRldiwgJihwZGV2LT5kZXYpKTsKKyNlbmRpZgorICAgICAgICBpZiAoIHJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldikgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiByZWdpc3Rlcl93bGFuZGV2KCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWw7CisgICAgICAgIH0KKworI2lmIDAKKwkvKiBUT0RPOiBNb3ZlIHRoaXMgYW5kIGFuIGlycSB0ZXN0IGludG8gYW4gaGZhMzg0eF90ZXN0aWYoKSByb3V0aW5lLgorCSAqLworCW91dHcoUFJJU00yU1RBX01BR0lDLCBIRkEzODR4X1NXU1VQUE9SVCh3bGFuZGV2LT5uZXRkZXYtPmJhc2VfYWRkcikpOworCXJlZz1pbncoIEhGQTM4NHhfU1dTVVBQT1JUKHdsYW5kZXYtPm5ldGRldi0+YmFzZV9hZGRyKSk7CisJaWYgKCByZWcgIT0gUFJJU00yU1RBX01BR0lDICkgeworCQlXTEFOX0xPR19FUlJPUigiTUFDIHJlZ2lzdGVyIGFjY2VzcyB0ZXN0IGZhaWxlZCFcbiIpOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWw7CisJfQorI2VuZGlmCisKKwkvKiBEbyBhIGNoaXAtbGV2ZWwgcmVzZXQgb24gdGhlIE1BQyAqLworCWlmIChwcmlzbTJfZG9yZXNldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2NvcmVyZXNldChodywKKwkJCQlwcmlzbTJfcmVzZXRfaG9sZHRpbWUsCisJCQkJcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsIDApOworCQlpZiAocmVzdWx0ICE9IDApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCSIlczogaGZhMzg0eF9jb3JlcmVzZXQoKSBmYWlsZWQuXG4iLAorCQkJCWRldl9pbmZvKTsKKwkJCXVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KTsKKwkJCWhmYTM4NHhfZGVzdHJveShodyk7CisJCQlyZXN1bHQgPSAtRUlPOworCQkJZ290byBmYWlsOworCQl9CisJfQorCisgICAgICAgIHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB3bGFuZGV2KTsKKworCS8qIFNob3VsZG4ndCBhY3R1YWxseSBob29rIHVwIHRoZSBJUlEgdW50aWwgd2UKKwkgKiBfa25vd18gdGhpbmdzIGFyZSBhbHJpZ2h0LiAgQSB0ZXN0IHJvdXRpbmUgd291bGQgaGVscC4KKwkgKi8KKyAgICAgICAJcmVxdWVzdF9pcnEod2xhbmRldi0+bmV0ZGV2LT5pcnEsIGhmYTM4NHhfaW50ZXJydXB0LAorCQlTQV9TSElSUSwgd2xhbmRldi0+bmFtZSwgd2xhbmRldik7CisKKwl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKKworCXJlc3VsdCA9IDA7CisJZ290byBkb25lOworCisgZmFpbDoKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaWYgKHdsYW5kZXYpCWtmcmVlKHdsYW5kZXYpOworCWlmIChodykJCWtmcmVlKGh3KTsKKyAgICAgICAgaWYgKG1lbSkgICAgICAgIGlvdW5tYXAobWVtKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKyBkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHByaXNtMnN0YV9yZW1vdmVfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworICAgICAgIAl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2OworCWhmYTM4NHhfdAkqaHc7CisKKwl3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCAqKSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaHcgPSB3bGFuZGV2LT5wcml2OworCisJcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZCh3bGFuZGV2KTsKKworCS8qIHJlc2V0IGhhcmR3YXJlICovCisJcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGUpOworCisgICAgICAgIGlmIChwZGV2LT5pcnEpCisJCWZyZWVfaXJxKHBkZXYtPmlycSwgd2xhbmRldik7CisKKwl1bnJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldik7CisKKwkvKiBmcmVlIGxvY2FsIHN0dWZmICovCisJaWYgKGh3KSB7CisJCWhmYTM4NHhfZGVzdHJveShodyk7CisJCWtmcmVlKGh3KTsKKwl9CisKKwlpb3VubWFwKCh2b2lkIF9faW9tZW0gKil3bGFuZGV2LT5uZXRkZXYtPm1lbV9zdGFydCk7CisJd2xhbl91bnNldHVwKHdsYW5kZXYpOworCisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKyAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWtmcmVlKHdsYW5kZXYpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfaWRfdGJsW10gPSB7CisJeworCQlQQ0lWRU5ET1JfSU5URVJTSUwsIFBDSURFVklDRV9JU0wzODc0LAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiSW50ZXJzaWwgUHJpc20yLjUgSVNMMzg3NCAxMU1iL3MgV0xBTiBDb250cm9sbGVyIgorCX0sCisJeworCQlQQ0lWRU5ET1JfSU5URVJTSUwsIDB4Mzg3MiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwKKwkJLyogRHJpdmVyIGRhdGEsIHdlIGp1c3QgcHV0IHRoZSBuYW1lIGhlcmUgKi8KKwkJKHVuc2lnbmVkIGxvbmcpIkludGVyc2lsIFByaXNtMi41IElTTDM4NzIgMTFNYi9zIFdMQU4gQ29udHJvbGxlciIKKwl9LAorICAgICAgICB7CisgICAgICAgICAgICAgICBQQ0lWRU5ET1JfU0FNU1VORywgUENJREVWSUNFX1NXTF8yMjEwUCwKKyAgICAgICAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisgICAgICAgICAgICAgICAwLCAwLAorICAgICAgICAgICAgICAgLyogRHJpdmVyIGRhdGEsIHdlIGp1c3QgcHV0IHRoZSBuYW1lIGhlcmUgKi8KKyAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSJTYW1zdW5nIE1hZ2ljTEFOIFNXTC0yMjEwUCAxMU1iL3MgV0xBTiBDb250cm9sbGVyIgorCX0sCisJeyAvKiBmb3IgTmV0R2VhciBNQTMxMSAqLworCQlQQ0lWRU5ET1JfTkVUR0VBUiwgMHgzODcyLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiTmV0Z2VhciBNQTMxMSBXTEFOIENvbnRyb2xsZXIiCisJfSwKKwl7CisJCTAsIDAsIDAsIDAsIDAsIDAsIDAKKwl9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpX2lkX3RibCk7CisKKy8qIEZ1bmN0aW9uIGRlY2xhcmVkIGhlcmUgYmVjYXVzZSBvZiBwdHIgcmVmZXJlbmNlIGJlbG93ICovCitzdGF0aWMgaW50ICBfX2RldmluaXQgcHJpc20yc3RhX3Byb2JlX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgIF9fZGV2ZXhpdCBwcmlzbTJzdGFfcmVtb3ZlX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwcmlzbTJfcGNpX2Rydl9pZCA9IHsKKyAgICAgICAgLm5hbWUgPSAicHJpc20yX3BjaSIsCisgICAgICAgIC5pZF90YWJsZSA9IHBjaV9pZF90YmwsCisgICAgICAgIC5wcm9iZSA9IHByaXNtMnN0YV9wcm9iZV9wY2ksCisgICAgICAgIC5yZW1vdmUgPSBwcmlzbTJzdGFfcmVtb3ZlX3BjaSwKKyNpZmRlZiBDT05GSUdfUE0KKyAgICAgICAgLnN1c3BlbmQgPSBwcmlzbTJzdGFfc3VzcGVuZF9wY2ksCisgICAgICAgIC5yZXN1bWUgPSBwcmlzbTJzdGFfcmVzdW1lX3BjaSwKKyNlbmRpZgorfTsKKworI2lmZGVmIE1PRFVMRQorCitzdGF0aWMgaW50IF9faW5pdCBwcmlzbTJwY2lfaW5pdCh2b2lkKQoreworICAgICAgICBXTEFOX0xPR19OT1RJQ0UoIiVzIExvYWRlZFxuIiwgdmVyc2lvbik7CisJcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmcHJpc20yX3BjaV9kcnZfaWQpOworfTsKKworc3RhdGljIHZvaWQgX19leGl0IHByaXNtMnBjaV9jbGVhbnVwKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwcmlzbTJfcGNpX2Rydl9pZCk7Cit9OworCittb2R1bGVfaW5pdChwcmlzbTJwY2lfaW5pdCk7Cittb2R1bGVfZXhpdChwcmlzbTJwY2lfY2xlYW51cCk7CisKKyNlbmRpZgorCitpbnQgaGZhMzg0eF9jb3JlcmVzZXQoaGZhMzg0eF90ICpodywgaW50IGhvbGR0aW1lLCBpbnQgc2V0dGxldGltZSwgaW50IGdlbmVzaXMpCit7CisJaW50CQlyZXN1bHQgPSAwOworCXVuc2lnbmVkIGxvbmcJdGltZW91dDsKKwlVSU5UMTYJcmVnOworCURCRkVOVEVSOworCisJLyogQXNzZXJ0IHJlc2V0IGFuZCB3YWl0IGF3aGlsZQorCSAqIChub3RlOiB0aGVzZSBkZWxheXMgYXJlIF9yZWFsbHlfIGxvbmcsIGJ1dCB0aGV5IGFwcGVhciB0byBiZQorCSAqICAgICAgICBuZWNlc3NhcnkuKQorCSAqLworCWhmYTM4NHhfc2V0cmVnKGh3LCAweGM1LCBIRkEzODR4X1BDSUNPUik7CisJdGltZW91dCA9IGppZmZpZXMgKyBIWi80OworCXdoaWxlKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB1ZGVsYXkoNSk7CisKKwlpZiAoZ2VuZXNpcykgeworCQloZmEzODR4X3NldHJlZyhodywgZ2VuZXNpcywgSEZBMzg0eF9QQ0lIQ1IpOworCQl0aW1lb3V0ID0gamlmZmllcyArIEhaLzQ7CisJCXdoaWxlKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB1ZGVsYXkoNSk7CisJfQorCisJLyogQ2xlYXIgdGhlIHJlc2V0IGFuZCB3YWl0IHNvbWUgbW9yZQorCSAqLworCWhmYTM4NHhfc2V0cmVnKGh3LCAweDQ1LCBIRkEzODR4X1BDSUNPUik7CisJdGltZW91dCA9IGppZmZpZXMgKyBIWi8yOworCXdoaWxlKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB1ZGVsYXkoNSk7CisKKwkvKiBXYWl0IGZvciBmL3cgdG8gY29tcGxldGUgaW5pdGlhbGl6YXRpb24gKENNRDpCVVNZID09IDApCisJICovCisJdGltZW91dCA9IGppZmZpZXMgKyAyKkhaOworCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0NNRCk7CisJd2hpbGUgKCBIRkEzODR4X0NNRF9JU0JVU1kocmVnKSAmJiB0aW1lX2JlZm9yZSggamlmZmllcywgdGltZW91dCkgKSB7CisJCXJlZyA9IGhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0NNRCk7CisJCXVkZWxheSgxMCk7CisJfQorCWlmIChIRkEzODR4X0NNRF9JU0JVU1kocmVnKSkgeworCQlXTEFOX0xPR19XQVJOSU5HKCJjb3JlcmVzZXQ6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBjbWQgcmVnaXN0ZXIuXG4iKTsKKwkJcmVzdWx0PTE7CisJfQorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMl9wbHguYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMl9wbHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjA0NDNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX3BseC5jCkBAIC0wLDAgKzEsNDcyIEBACisjZGVmaW5lIFdMQU5fSE9TVElGIFdMQU5fUExYCisjaW5jbHVkZSAiaGZhMzg0eC5jIgorI2luY2x1ZGUgInByaXNtMm1nbXQuYyIKKyNpbmNsdWRlICJwcmlzbTJtaWIuYyIKKyNpbmNsdWRlICJwcmlzbTJzdGEuYyIKKworI2RlZmluZSBQTFhfQVRUUl9TSVpFCTB4MTAwMAkvKiBBdHRyaWJ1dGUgbWVtb3J5IHNpemUgLSA0SyBieXRlcyAqLworI2RlZmluZSBDT1JfT0ZGU0VUCTB4M2UwCS8qIENPUiBhdHRyaWJ1dGUgb2Zmc2V0IG9mIFByaXNtMiBQQyBjYXJkICovCisjZGVmaW5lIENPUl9WQUxVRQkweDQxCS8qIEVuYWJsZSBQQyBjYXJkIHdpdGggaXJxIGluIGxldmVsIHRyaWdnZXIgKi8KKyNkZWZpbmUgUExYX0lOVENTUgkweDRjCS8qIEludGVycnVwdCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUExYX0lOVENTUl9JTlRFTiAoMTw8NikgLyogSW50ZXJydXB0IEVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgUExYX01JTl9BVFRSX0xFTiA1MTIgICAgLyogYXQgbGVhc3QgMiB4IDI1NiBpcyBuZWVkZWQgZm9yIENJUyAqLworCisvKiAzQ29tIDNDUlc3NzdBIChQTFgpIGJvYXJkIElEICovCisjZGVmaW5lIFBDSVZFTkRPUl8zQ09NICAgICAgIDB4MTBCNworI2RlZmluZSBQQ0lERVZJQ0VfQUlSQ09OTkVDVCAweDc3NzAKKworLyogRXVtaXRjb20gUENJIFdMMTEwMDAgUENJIEFkYXB0ZXIgKFBMWCkgYm9hcmQgZGV2aWNlK3ZlbmRvciBJRCAqLworI2RlZmluZSBQQ0lWRU5ET1JfRVVNSVRDT00JMHgxNjM4VUwKKyNkZWZpbmUgUENJREVWSUNFX1dMMTEwMDAJMHgxMTAwVUwKKworLyogR2xvYmFsIFN1biBUZWNoIEdMMjQxMTBQIFBDSSBBZGFwdGVyIChQTFgpIGJvYXJkIGRldmljZSt2ZW5kb3IgSUQgKi8KKyNkZWZpbmUgUENJVkVORE9SX0dMT0JBTFNVTgkweDE2YWJVTAorI2RlZmluZSBQQ0lERVZJQ0VfR0wyNDExMFAJMHgxMTAxVUwKKyNkZWZpbmUgUENJREVWSUNFX0dMMjQxMTBQX0FMVAkweDExMDJVTAorCisvKiBOZXRnZWFyIE1BMzAxIFBDSSBBZGFwdGVyIChQTFgpIGJvYXJkIGRldmljZSt2ZW5kb3IgSUQgKi8KKyNkZWZpbmUgUENJVkVORE9SX05FVEdFQVIJMHgxMzg1VUwKKyNkZWZpbmUgUENJREVWSUNFX01BMzAxCQkweDQxMDBVTAorCisvKiBVUyBSb2JvdGljcyBVU1IyNDEwIFBDSSBBZGFwdGVyIChQTFgpIGJvYXJkIGRldmljZSt2ZW5kb3IgSUQgKi8KKyNkZWZpbmUJUENJVkVORE9SX1VTUk9CT1RJQ1MgICAgMHgxNmVjVUwKKyNkZWZpbmUgUENJREVWSUNFX1VTUjI0MTAgICAgICAgMHgzNjg1VUwKKworLyogTGlua3N5cyBXUEMxMSBjYXJkIHdpdGggdGhlIFdEVDExIGFkYXB0ZXIgKFBMWCkgYm9hcmQgZGV2aWNlK3ZlbmRvciBJRCAqLworI2RlZmluZQlQQ0lWRU5ET1JfTGlua3N5cyAgICAgICAweDE2YWJVTAorI2RlZmluZSBQQ0lERVZJQ0VfV3BjMTFXZHQxMSAgICAweDExMDJVTAorCisvKiBOYXRpb25hbCBEYXRhY29tbSBDb3JwIFNPSE93YXJlIE5ldGJsYXN0ZXIgSUkgUENJICovCisjZGVmaW5lIFBDSVZFTkRPUl9OREMJICAgICAgICAweDE1ZThVTAorI2RlZmluZSBQQ0lERVZJQ0VfTkNQMTMwX1BMWCAJMHgwMTMwVUwKKyNkZWZpbmUgUENJREVWSUNFX05DUDEzMF9BU0lDCTB4MDEzMVVMCisKKy8qIE5EQyBOQ1AxMzBfUExYIGlzIGFsc28gc29sZCBieSBDb3JlZ2EuIFRoZWlyIG5hbWUgaXMgQ0dXTFBDSUExMSAqLworI2RlZmluZSBQQ0lWRU5ET1JfQ09SRUdBICAgICAgIFBDSVZFTkRPUl9OREMKKyNkZWZpbmUgUENJREVWSUNFX0NHV0xQQ0lBMTEgICBQQ0lERVZJQ0VfTkNQMTMwX1BMWAorCisvKiBQQ0kgQ2xhc3MgJiBTdWItQ2xhc3MgY29kZSwgTmV0d29yay0nT3RoZXIgY29udHJvbGxlcicgKi8KKyNkZWZpbmUgUENJX0NMQVNTX05FVFdPUktfT1RIRVJTIDB4MjgwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfcHJvYmVfcGx4CisqCisqIFByb2JlIHJvdXRpbmUgY2FsbGVkIHdoZW4gYSBQQ0kgZGV2aWNlIHcvIG1hdGNoaW5nIElEIGlzIGZvdW5kLgorKiBUaGlzIFBMWCBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBmb2xsb3dpbmcgbWFwOgorKiAgIEJBUjA6IFVudXNlZAorKiAgIEJBUjE6ID8/Pz8KKyogICBCQVIyOiBQQ01DSUEgYXR0cmlidXRlIG1lbW9yeQorKiAgIEJBUjM6IFBDTUNJQSBpL28gc3BhY2UKKyogSGVyZSdzIHRoZSBzZXF1ZW5jZToKKyogICAtIEFsbG9jYXRlIHRoZSBQQ0kgcmVzb3VyY2VzLgorKiAgIC0gUmVhZCB0aGUgUENNQ0lBIGF0dHJpYnV0ZSBtZW1vcnkgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBXTEFOIGNhcmQKKyogICAtIFJlc2V0IHRoZSBNQUMgdXNpbmcgdGhlIFBDTUNJQSBDT1IKKyogICAtIEluaXRpYWxpemUgdGhlIG5ldGRldiBhbmQgd2xhbiBkYXRhCisqICAgLSBJbml0aWFsaXplIHRoZSBNQUMKKyoKKyogQXJndW1lbnRzOgorKglwZGV2CQlwdHIgdG8gcGNpIGRldmljZSBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbmZvIGFib3V0CisqCQkJcGNpIGNvbmZpZ3VyYXRpb24uCisqCWlkCQlwdHIgdG8gdGhlIGRldmljZSBpZCBlbnRyeSB0aGF0IG1hdGNoZWQgdGhpcyBkZXZpY2UuCisqCisqIFJldHVybnM6CisqCXplcm8JCS0gc3VjY2VzcworKgluZWdhdGl2ZQktIGZhaWxlZAorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBfX2RldmluaXQKK3ByaXNtMnN0YV9wcm9iZV9wbHgoCisJc3RydWN0IHBjaV9kZXYJCQkqcGRldiwKKwljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZAkqaWQpCit7CisJaW50CQlyZXN1bHQ7CisgICAgICAgIHBoeXNfdAlwY2NhcmRfaW9hZGRyOworCXBoeXNfdCAgcGNjYXJkX2F0dHJfbWVtOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgcGNjYXJkX2F0dHJfbGVuOworCXZvaWQgX19pb21lbSAqYXR0cl9tZW0gPSBOVUxMOworCVVJTlQzMgkJcGx4X2FkZHI7CisgICAgICAgIHdsYW5kZXZpY2VfdCAgICAqd2xhbmRldiA9IE5VTEw7CisJaGZhMzg0eF90CSpodyA9IE5VTEw7CisJaW50CQlyZWc7CisgICAgICAgIHUzMgkJcmVnaWM7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCisJCXJldHVybiAtRUlPOworCisJLyogVE1DNzE2MCBib2FyZHMgYXJlIHNwZWNpYWwgKi8KKwlpZiAoKHBkZXYtPnZlbmRvciA9PSBQQ0lWRU5ET1JfTkRDKSAmJgorCSAgICAocGRldi0+ZGV2aWNlID09IFBDSURFVklDRV9OQ1AxMzBfQVNJQykpIHsKKwkJdW5zaWduZWQgbG9uZyBkZWxheTsKKworCQlwY2NhcmRfYXR0cl9tZW0gPSAwOworCQlwY2NhcmRfaW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCisJCW91dGIoMHg0NSwgcGNjYXJkX2lvYWRkcik7CisJCWRlbGF5ID0gamlmZmllcyArIDEqSFo7CisJCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWxheSkpOworCisJCWlmIChpbmIocGNjYXJkX2lvYWRkcikgIT0gMHg0NSkgeworCQkJV0xBTl9MT0dfRVJST1IoIkluaXRpYWxpemUgdGhlIFRNQzcxNjAgZmFpbGVkLiAoMHgleClcbiIsIGluYihwY2NhcmRfaW9hZGRyKSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCXBjY2FyZF9pb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7CisJCXByaXNtMl9kb3Jlc2V0ID0gMDsKKworCQlXTEFOX0xPR19JTkZPKCJOREMgTkNQMTMwIHdpdGggVE1DNzE2KEFTSUMpIFBDSSBpbnRlcmZhY2UgZGV2aWNlIGZvdW5kIGF0IGlvOjB4JXgsIGlycTolZFxuIiwgcGNjYXJkX2lvYWRkciwgcGRldi0+aXJxKTsKKwkJZ290byBpbml0OworCX0KKworCS8qIENvbGxlY3QgdGhlIHJlc291cmNlIHJlcXVpcmVtZW50cyAqLworCXBjY2FyZF9hdHRyX21lbSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKKwlwY2NhcmRfYXR0cl9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpOworICAgICAgICBpZiAocGNjYXJkX2F0dHJfbGVuIDwgUExYX01JTl9BVFRSX0xFTikKKwkJcmV0dXJuIC1FSU87CisKKwlwY2NhcmRfaW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDMpOworCisJLyogYmpvZXJuOiBXZSBuZWVkIHRvIHRlbGwgdGhlIGNhcmQgdG8gZW5hYmxlIGludGVycnVwdHMsIGluCisJICogY2FzZSB0aGUgc2VyaWFsIGVwcm9tIGRpZG4ndCBkbyB0aGlzIGFscmVhZHkuIFNlZSB0aGUKKwkgKiBQTFg5MDUyIGRhdGEgYm9vaywgcDgtMSBhbmQgOC0yNCBmb3IgcmVmZXJlbmNlLgorCSAqIFtNU01dOiBUaGlzIGJpdCBvZiBjb2RlIGNhbWUgZnJvbSB0aGUgb3Jpbm9jb19jcyBkcml2ZXIuCisJICovCisJcGx4X2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisKKwlyZWdpYyA9IDA7CisJcmVnaWMgPSBpbmwocGx4X2FkZHIrUExYX0lOVENTUik7CisJaWYocmVnaWMgJiBQTFhfSU5UQ1NSX0lOVEVOKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiJXM6IExvY2FsIEludGVycnVwdCBhbHJlYWR5IGVuYWJsZWRcbiIsIGRldl9pbmZvKTsKKwl9IGVsc2UgeworCQlyZWdpYyB8PSBQTFhfSU5UQ1NSX0lOVEVOOworCQlvdXRsKHJlZ2ljLCBwbHhfYWRkcitQTFhfSU5UQ1NSKTsKKwkJcmVnaWMgPSBpbmwocGx4X2FkZHIrUExYX0lOVENTUik7CisJCWlmKCEocmVnaWMgJiBQTFhfSU5UQ1NSX0lOVEVOKSkgeworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJIiVzOiBDb3VsZG4ndCBlbmFibGUgTG9jYWwgSW50ZXJydXB0c1xuIiwKKwkJCQlkZXZfaW5mbyk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCS8qIFRoZXNlIGFzc2lnbm1lbnRzIGFyZSBoZXJlIGluIGNhc2Ugb2YgZnV0dXJlIG1hcHBpbmdzIGZvcgorCSAqIGlvIHNwYWNlIGFuZCBpcnEgdGhhdCBtaWdodCBiZSBzaW1pbGFyIHRvIGlvcmVtYXAKKwkgKi8KKyAgICAgICAgaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocGNjYXJkX2F0dHJfbWVtLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpLCAiUHJpc20yIikpIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiBDb3VsZG4ndCByZXNlcnZlIFBDSSBtZW1vcnkgcmVnaW9uXG4iLCBkZXZfaW5mbyk7CisJCXJldHVybiAtRUlPOworICAgICAgICB9CisKKwlhdHRyX21lbSA9IGlvcmVtYXAocGNjYXJkX2F0dHJfbWVtLCBwY2NhcmRfYXR0cl9sZW4pOworCisJV0xBTl9MT0dfSU5GTygiQSBQTFggUENJL1BDTUNJQSBpbnRlcmZhY2UgZGV2aWNlIGZvdW5kLCAiCisJCSJwaHltZW06MHglbGx4LCBwaHlpbz0weCV4LCBpcnE6JWQsICIKKwkJIm1lbTogMHglbHhcbiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNjYXJkX2F0dHJfbWVtLCBwY2NhcmRfaW9hZGRyLCBwZGV2LT5pcnEsCisJCSh1bnNpZ25lZCBsb25nKWF0dHJfbWVtKTsKKworCS8qIFZlcmlmeSB3aGV0aGVyIFBDIGNhcmQgaXMgcHJlc2VudC4KKwkgKiBbTVNNXSBUaGlzIG5lZWRzIGltcHJvdmVtZW50LCB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gaXMKKwkgKiBwcm9iYWJseSB0byB3YWxrIHRoZSBDSVMgbG9va2luZyBmb3IgdGhlIHZlbmRvciBhbmQgcHJvZHVjdAorCSAqIElEcy4gIEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhpcyBjb3VsZCBiZSB0aWVkIGluIHdpdGggdGhlCisJICogZXRjL3BjbWNpYS93bGFuLW5nLmNvbmYgZmlsZS4gIEFueSB2b2x1bnRlZXJzPyAgOy0pCisJICovCisJaWYgKAorCXJlYWRiKGF0dHJfbWVtICsgMCkgIT0gMHgwMSB8fCByZWFkYihhdHRyX21lbSArIDIpICE9IDB4MDMgfHwKKwlyZWFkYihhdHRyX21lbSArIDQpICE9IDB4MDAgfHwgcmVhZGIoYXR0cl9tZW0gKyA2KSAhPSAweDAwIHx8CisJcmVhZGIoYXR0cl9tZW0gKyA4KSAhPSAweEZGIHx8IHJlYWRiKGF0dHJfbWVtICsgMTApICE9IDB4MTcgfHwKKwlyZWFkYihhdHRyX21lbSArIDEyKSAhPSAweDA0IHx8IHJlYWRiKGF0dHJfbWVtICsgMTQpICE9IDB4NjcpIHsKKwkJV0xBTl9MT0dfRVJST1IoIlByaXNtMiBQQyBjYXJkIENJUyBpcyBpbnZhbGlkLlxuIik7CisJCXJldHVybiAtRUlPOworICAgICAgICB9CisgICAgICAgIFdMQU5fTE9HX0lORk8oIkEgUENNQ0lBIFdMQU4gYWRhcHRlciB3YXMgZm91bmQuXG4iKTsKKworICAgICAgICAvKiBXcml0ZSBDT1IgdG8gZW5hYmxlIFBDIGNhcmQgKi8KKwl3cml0ZWIoQ09SX1ZBTFVFLCBhdHRyX21lbSArIENPUl9PRkZTRVQpOworCXJlZyA9IHJlYWRiKGF0dHJfbWVtICsgQ09SX09GRlNFVCk7CisKKyBpbml0OgorCisJLyoKKwkgKiBOb3cgZG8gZXZlcnl0aGluZyB0aGUgc2FtZSBhcyBhIFBDSSBkZXZpY2UKKwkgKiBbTVNNXSBUT0RPOiBXZSBjb3VsZCBwcm9iYWJseSBmYWN0b3IgdGhpcyBvdXQgb2YgcGNtY2lhL3BjaS9wbHgKKwkgKiBhbmQgcGVyaGFwcyB1c2IuICBQZXJoYXBzIGEgdGFzayBmb3IgYW5vdGhlciBkYXkuLi4uLi4uCisJICovCisKKwlpZiAoKHdsYW5kZXYgPSBjcmVhdGVfd2xhbigpKSA9PSBOVUxMKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJaHcgPSB3bGFuZGV2LT5wcml2OworCisJaWYgKCB3bGFuX3NldHVwKHdsYW5kZXYpICE9IDAgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogd2xhbl9zZXR1cCgpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogU2V0dXAgbmV0ZGV2aWNlJ3MgYWJpbGl0eSB0byByZXBvcnQgcmVzb3VyY2VzCisJICogTm90ZTogdGhlIG5ldGRldmljZSB3YXMgYWxsb2NhdGVkIGJ5IHdsYW5fc2V0dXAoKQorCSAqLworICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPmlycSA9IHBkZXYtPmlycTsKKyAgICAgICAgd2xhbmRldi0+bmV0ZGV2LT5iYXNlX2FkZHIgPSBwY2NhcmRfaW9hZGRyOworICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm1lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKWF0dHJfbWVtOworICAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm1lbV9lbmQgPSAodW5zaWduZWQgbG9uZylhdHRyX21lbSArIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBodyBkYXRhICovCisgICAgICAgIGhmYTM4NHhfY3JlYXRlKGh3LCB3bGFuZGV2LT5uZXRkZXYtPmlycSwgcGNjYXJkX2lvYWRkciwgYXR0cl9tZW0pOworCWh3LT53bGFuZGV2ID0gd2xhbmRldjsKKworCS8qIFJlZ2lzdGVyIHRoZSB3bGFuZGV2LCB0aGlzIGdldHMgdXMgYSBuYW1lIGFuZCByZWdpc3RlcnMgdGhlCisJICogbGludXggbmV0ZGV2aWNlLgorCSAqLworCVNFVF9NT0RVTEVfT1dORVIod2xhbmRldi0+bmV0ZGV2KTsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKSkKKyAgICAgICBTRVRfTkVUREVWX0RFVih3bGFuZGV2LT5uZXRkZXYsICYocGRldi0+ZGV2KSk7CisjZW5kaWYKKyAgICAgICAgaWYgKCByZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXYpICE9IDAgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogcmVnaXN0ZXJfd2xhbmRldigpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisgICAgICAgIH0KKworI2lmIDAKKwkvKiBUT0RPOiBNb3ZlIHRoaXMgYW5kIGFuIGlycSB0ZXN0IGludG8gYW4gaGZhMzg0eF90ZXN0aWYoKSByb3V0aW5lLgorCSAqLworCW91dHcoUFJJU00yU1RBX01BR0lDLCBIRkEzODR4X1NXU1VQUE9SVCh3bGFuZGV2LT5uZXRkZXYtPmJhc2VfYWRkcikpOworCXJlZz1pbncoIEhGQTM4NHhfU1dTVVBQT1JUKHdsYW5kZXYtPm5ldGRldi0+YmFzZV9hZGRyKSk7CisJaWYgKCByZWcgIT0gUFJJU00yU1RBX01BR0lDICkgeworCQlXTEFOX0xPR19FUlJPUigiTUFDIHJlZ2lzdGVyIGFjY2VzcyB0ZXN0IGZhaWxlZCFcbiIpOworIAkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorI2VuZGlmCisKKwkvKiBEbyBhIGNoaXAtbGV2ZWwgcmVzZXQgb24gdGhlIE1BQyAqLworCWlmIChwcmlzbTJfZG9yZXNldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2NvcmVyZXNldChodywKKwkJCQlwcmlzbTJfcmVzZXRfaG9sZHRpbWUsCisJCQkJcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsIDApOworCQlpZiAocmVzdWx0ICE9IDApIHsKKwkJCXVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KTsKKwkJCWhmYTM4NHhfZGVzdHJveShodyk7CisJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkiJXM6IGhmYTM4NHhfY29yZXJlc2V0KCkgZmFpbGVkLlxuIiwKKwkJCQlkZXZfaW5mbyk7CisJCQlyZXN1bHQgPSAtRUlPOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgd2xhbmRldik7CisKKwkvKiBTaG91bGRuJ3QgYWN0dWFsbHkgaG9vayB1cCB0aGUgSVJRIHVudGlsIHdlCisJICogX2tub3dfIHRoaW5ncyBhcmUgYWxyaWdodC4gIEEgdGVzdCByb3V0aW5lIHdvdWxkIGhlbHAuCisJICovCisgICAgICAgCXJlcXVlc3RfaXJxKHdsYW5kZXYtPm5ldGRldi0+aXJxLCBoZmEzODR4X2ludGVycnVwdCwKKwkJU0FfU0hJUlEsIHdsYW5kZXYtPm5hbWUsIHdsYW5kZXYpOworCisJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CisKKwlyZXN1bHQgPSAwOworCisJZ290byBkb25lOworCisgZmFpbGVkOgorCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWlmICh3bGFuZGV2KQlrZnJlZSh3bGFuZGV2KTsKKwlpZiAoaHcpCQlrZnJlZShodyk7CisgICAgICAgIGlmIChhdHRyX21lbSkgICAgICAgIGlvdW5tYXAoYXR0cl9tZW0pOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworIGRvbmU6CisJREJGRVhJVDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHByaXNtMnN0YV9yZW1vdmVfcGx4KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworICAgICAgIAl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2OworCWhmYTM4NHhfdCAgICAgICAgICAgICAgICpodzsKKworCXdsYW5kZXYgPSAod2xhbmRldmljZV90ICopIHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlodyA9IHdsYW5kZXYtPnByaXY7CisKKwlwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXYpOworCisJLyogcmVzZXQgaGFyZHdhcmUgKi8KKwlwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisKKyAgICAgICAgaWYgKHBkZXYtPmlycSkKKwkJZnJlZV9pcnEocGRldi0+aXJxLCB3bGFuZGV2KTsKKworCXVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KTsKKworCS8qIGZyZWUgbG9jYWwgc3R1ZmYgKi8KKwlpZiAoaHcpIHsKKwkJaGZhMzg0eF9kZXN0cm95KGh3KTsKKwkJa2ZyZWUoaHcpOworCX0KKworCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKXdsYW5kZXYtPm5ldGRldi0+bWVtX3N0YXJ0KTsKKwl3bGFuX3Vuc2V0dXAod2xhbmRldik7CisKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJa2ZyZWUod2xhbmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwbHhfaWRfdGJsW10gPSB7CisJeworCQlQQ0lWRU5ET1JfRVVNSVRDT00sIFBDSURFVklDRV9XTDExMDAwLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiRXVtaXRjb20gV0wxMTAwMCBQQ0koUExYKSBjYXJkIgorCX0sCisJeworCQlQQ0lWRU5ET1JfR0xPQkFMU1VOLCBQQ0lERVZJQ0VfR0wyNDExMFAsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSJHbG9iYWwgU3VuIFRlY2ggR0wyNDExMFAgUENJKFBMWCkgY2FyZCIKKwl9LAorCXsKKwkJUENJVkVORE9SX0dMT0JBTFNVTiwgUENJREVWSUNFX0dMMjQxMTBQX0FMVCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwKKwkJLyogRHJpdmVyIGRhdGEsIHdlIGp1c3QgcHV0IHRoZSBuYW1lIGhlcmUgKi8KKwkJKHVuc2lnbmVkIGxvbmcpIkdsb2JhbCBTdW4gVGVjaCBHTDI0MTEwUCBQQ0koUExYKSBjYXJkIgorCX0sCisJeworCQlQQ0lWRU5ET1JfTkVUR0VBUiwgUENJREVWSUNFX01BMzAxLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiR2xvYmFsIFN1biBUZWNoIEdMMjQxMTBQIFBDSShQTFgpIGNhcmQiCisJfSwKKwl7CisJCVBDSVZFTkRPUl9VU1JPQk9USUNTLCBQQ0lERVZJQ0VfVVNSMjQxMCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwKKwkJLyogRHJpdmVyIGRhdGEsIHdlIGp1c3QgcHV0IHRoZSBuYW1lIGhlcmUgKi8KKwkJKHVuc2lnbmVkIGxvbmcpIlVTIFJvYm90aWNzIFVTUjI0MTAgUENJKFBMWCkgY2FyZCIKKwl9LAorCXsKKwkJUENJVkVORE9SX0xpbmtzeXMsIFBDSURFVklDRV9XcGMxMVdkdDExLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiTGlua3N5cyBXUEMxMSB3aXRoIFdEVDExIFBDSShQTFgpIGFkYXB0ZXIiCisJfSwKKwl7CisJICAgICAgICBQQ0lWRU5ET1JfTkRDLCBQQ0lERVZJQ0VfTkNQMTMwX1BMWCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwKKwkJLyogRHJpdmVyIGRhdGEsIHdlIGp1c3QgcHV0IHRoZSBuYW1lIGhlcmUgKi8KKwkJKHVuc2lnbmVkIGxvbmcpIk5EQyBOZXRibGFzdGVyIElJIFBDSShQTFgpIgorCX0sCisJeworCSAgICAgICAgUENJVkVORE9SX05EQywgUENJREVWSUNFX05DUDEzMF9BU0lDLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQkwLCAwLAorCQkvKiBEcml2ZXIgZGF0YSwgd2UganVzdCBwdXQgdGhlIG5hbWUgaGVyZSAqLworCQkodW5zaWduZWQgbG9uZykiTkRDIE5ldGJsYXN0ZXIgSUkgUENJKFRNQzcxNjApIgorCX0sCisJeworCQlQQ0lWRU5ET1JfM0NPTSwgUENJREVWSUNFX0FJUkNPTk5FQ1QsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsCisJCS8qIERyaXZlciBkYXRhLCB3ZSBqdXN0IHB1dCB0aGUgbmFtZSBoZXJlICovCisJCSh1bnNpZ25lZCBsb25nKSIzQ29tIEFpckNvbm5lY3QgUENJIDgwMi4xMWIgMTFNYi9zIFdMQU4gQ29udHJvbGxlciIKKwl9LAorCXsKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMAorCX0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwbHhfaWRfdGJsKTsKKworLyogRnVuY3Rpb24gZGVjbGFyZWQgaGVyZSBiZWNhdXNlIG9mIHB0ciByZWZlcmVuY2UgYmVsb3cgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHByaXNtMnN0YV9wcm9iZV9wbHgoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKTsKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBwcmlzbTJzdGFfcmVtb3ZlX3BseChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwcmlzbTJfcGx4X2Rydl9pZCA9IHsKKyAgICAgICAgLm5hbWUgPSAicHJpc20yX3BseCIsCisgICAgICAgIC5pZF90YWJsZSA9IHBseF9pZF90YmwsCisgICAgICAgIC5wcm9iZSA9IHByaXNtMnN0YV9wcm9iZV9wbHgsCisgICAgICAgIC5yZW1vdmUgPSBwcmlzbTJzdGFfcmVtb3ZlX3BseCwKKyNpZmRlZiBDT05GSUdfUE0KKyAgICAgICAgLnN1c3BlbmQgPSBwcmlzbTJzdGFfc3VzcGVuZF9wY2ksCisgICAgICAgIC5yZXN1bWUgPSBwcmlzbTJzdGFfcmVzdW1lX3BjaSwKKyNlbmRpZgorfTsKKworI2lmZGVmIE1PRFVMRQorCitzdGF0aWMgaW50IF9faW5pdCBwcmlzbTJwbHhfaW5pdCh2b2lkKQoreworICAgICAgICBXTEFOX0xPR19OT1RJQ0UoIiVzIExvYWRlZFxuIiwgdmVyc2lvbik7CisJcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmcHJpc20yX3BseF9kcnZfaWQpOworfTsKKworc3RhdGljIHZvaWQgX19leGl0IHByaXNtMnBseF9jbGVhbnVwKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwcmlzbTJfcGx4X2Rydl9pZCk7Cit9OworCittb2R1bGVfaW5pdChwcmlzbTJwbHhfaW5pdCk7Cittb2R1bGVfZXhpdChwcmlzbTJwbHhfY2xlYW51cCk7CisKKyNlbmRpZiAvLyBNT0RVTEUKKworCitpbnQgaGZhMzg0eF9jb3JlcmVzZXQoaGZhMzg0eF90ICpodywgaW50IGhvbGR0aW1lLCBpbnQgc2V0dGxldGltZSwgaW50IGdlbmVzaXMpCit7CisJaW50CQlyZXN1bHQgPSAwOworCisjZGVmaW5lIENPUl9PRkZTRVQJMHgzZTAJLyogQ09SIGF0dHJpYnV0ZSBvZmZzZXQgb2YgUHJpc20yIFBDIGNhcmQgKi8KKyNkZWZpbmUgQ09SX1ZBTFVFCTB4NDEJLyogRW5hYmxlIFBDIGNhcmQgd2l0aCBpcnEgaW4gbGV2ZWwgdHJpZ2dlciAqLworCisjZGVmaW5lIEhDUl9PRkZTRVQJMHgzZTIJLyogSENSIGF0dHJpYnV0ZSBvZmZzZXQgb2YgUHJpc20yIFBDIGNhcmQgKi8KKworCVVJTlQ4CQljb3JzYXZlOworCURCRkVOVEVSOworCisJV0xBTl9MT0dfREVCVUcoMywgIkRvaW5nIHJlc2V0IHZpYSBkaXJlY3QgQ09SIGFjY2Vzcy5cbiIpOworCisJLyogQ29sbGVjdCBDT1IgKi8KKwljb3JzYXZlID0gcmVhZGIoaHctPm1lbWJhc2UgKyBDT1JfT0ZGU0VUKTsKKwkvKiBXcml0ZSByZXNldCBiaXQgKEJJVDcpICovCisJd3JpdGViKGNvcnNhdmUgfCBCSVQ3LCBody0+bWVtYmFzZSArIENPUl9PRkZTRVQpOworCS8qIEhvbGQgZm9yIGhvbGR0aW1lICovCisJbWRlbGF5KGhvbGR0aW1lKTsKKworCWlmIChnZW5lc2lzKSB7CisJCXdyaXRlYihnZW5lc2lzLCBody0+bWVtYmFzZSArIEhDUl9PRkZTRVQpOworCQkvKiBIb2xkIGZvciBob2xkdGltZSAqLworCQltZGVsYXkoaG9sZHRpbWUpOworCX0KKworCS8qIENsZWFyIHJlc2V0IGJpdCAqLworCXdyaXRlYihjb3JzYXZlICYgfkJJVDcsIGh3LT5tZW1iYXNlICsgQ09SX09GRlNFVCk7CisJLyogV2FpdCBmb3Igc2V0dGxldGltZSAqLworCW1kZWxheShzZXR0bGV0aW1lKTsKKwkvKiBTZXQgbm9uLXJlc2V0IGJpdHMgYmFjayB3aGF0IHRoZXkgd2VyZSAqLworCXdyaXRlYihjb3JzYXZlLCBody0+bWVtYmFzZSArIENPUl9PRkZTRVQpOworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMl91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMl91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDViZTIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yX3VzYi5jCkBAIC0wLDAgKzEsMzYxIEBACisjZGVmaW5lIFdMQU5fSE9TVElGIFdMQU5fVVNCCisjaW5jbHVkZSAiaGZhMzg0eF91c2IuYyIKKyNpbmNsdWRlICJwcmlzbTJtZ210LmMiCisjaW5jbHVkZSAicHJpc20ybWliLmMiCisjaW5jbHVkZSAicHJpc20yc3RhLmMiCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDApKQorI2Vycm9yICJwcmlzbTJfdXNiIHJlcXVpcmVzIGF0IGxlYXN0IGEgMi40Lngga2VybmVsISIKKyNlbmRpZgorCisjZGVmaW5lIFBSSVNNX1VTQl9ERVZJQ0UodmlkLCBwaWQsIG5hbWUpIFwKKyAgICAgICAgICAgVVNCX0RFVklDRSh2aWQsIHBpZCksICBcCisgICAgICAgICAgIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSBuYW1lCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfcHJpc21fdGJsW10gPSB7CisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwNGJiLCAweDA5MjIsICJJT0RhdGEgQWlyUG9ydCBXTi1CMTEvVVNCUyIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA3YWEsIDB4MDAxMiwgIkNvcmVnYSBXaXJlbGVzcyBMQU4gVVNCIFN0aWNrLTExIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDlhYSwgMHgzNjQyLCAiUHJpc20yLnggMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgxNjY4LCAweDA0MDgsICJBY3Rpb250ZWMgUHJpc20yLjUgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgxNjY4LCAweDA0MjEsICJBY3Rpb250ZWMgUHJpc20yLjUgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgxOTE1LCAweDIyMzYsICJMaW5rc3lzIFdVU0IxMXYzLjAgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwNjZiLCAweDIyMTIsICJMaW5rc3lzIFdVU0IxMXYyLjUgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwNjZiLCAweDIyMTMsICJMaW5rc3lzIFdVU0IxMnYxLjEgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwNjdjLCAweDEwMjIsICJTaWVtZW5zIFNwZWVkU3RyZWFtIDEwMjIgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwNDlmLCAweDAwMzMsICJDb21wYXEvSW50ZWwgVzEwMCBQUk8vV2lyZWxlc3MgMTFNYnBzIG11bHRpcG9ydCBXTEFOIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwNDExLCAweDAwMTYsICJNZWxjbyBXTEktVVNCLVMxMSAxMU1icHMgV0xBTiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDhkZSwgMHg3YTAxLCAiUFJJU00yNSBJRUVFIDgwMi4xMSBNaW5pIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4ODA4NiwgMHgxMTExLCAiSW50ZWwgUFJPL1dpcmVsZXNzIDIwMTFCIExBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDBkOGUsIDB4N2EwMSwgIlBSSVNNMjUgSUVFRSA4MDIuMTEgTWluaSBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA0NWUsIDB4MDA2ZSwgIk1pY3Jvc29mdCBNTjUxMCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA5NjcsIDB4MDIwNCwgIkFjZXIgV2FycGxpbmsgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMDIsICJaLUNvbSA3MjUvNzI2IFByaXNtMi41IFVTQi9VU0IgSW50ZWdyYXRlZCIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDBjZGUsIDB4MDAwNSwgIlotQ29tIFhsNzM1IFdpcmVsZXNzIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHg0MTNjLCAweDgxMDAsICJEZWxsIFRydWVNb2JpbGUgMTE4MCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDBiM2IsIDB4MTYwMSwgIkFMTE5FVCAwMTkzIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MGIzYiwgMHgxNjAyLCAiWnlYRUwgWnlBSVIgQjIwMCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDBiYWYsIDB4MDBlYiwgIlVTUm9ib3RpY3MgVVNSMTEyMCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA0MTEsIDB4MDAyNywgIk1lbGNvIFdMSS1VU0ItS1MxMUcgMTFNYnBzIFdMQU4gQWRhcHRlciIpfSwKKyAgICAgICAge1BSSVNNX1VTQl9ERVZJQ0UoMHgwNGYxLCAweDMwMDksICJKVkMgTVAtWFA3MjUwIEJ1aWx0aW4gVVNCIFdMQU4gQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDA4NDYsIDB4NDExMCwgIk5ldEdlYXIgTUExMTEiKX0sCisgICAgICAgIHtQUklTTV9VU0JfREVWSUNFKDB4MDNmMywgMHgwMDIwLCAiQWRhcHRlYyBBV04tODAyMCBVU0IgV0xBTiBBZGFwdGVyIil9LAorLy8Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwYWNlLCAweDEyMDEsICJaeURBUyBaRDEyMDEgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgyODIxLCAweDMzMDAsICJBU1VTLVdMMTQwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MjAwMSwgMHgzNzAwLCAiRFdMLTEyMiBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDIwMDEsIDB4MzcwMiwgIkRXTC0xMjAgUmV2IEYgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHg1MGMyLCAweDQwMTMsICJBdmVyYXRlYyBVU0IgV0xBTiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MmMwMiwgMHgxNGVhLCAiUGxhbmV4IEdXLVVTMTFIIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgxMjRhLCAweDE2OGIsICJBaXJ2YXN0IFBSSVNNMyBXTEFOIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDgzYSwgMHgzNTAzLCAiVC1TaW51cyAxMTEgVVNCIFdMQU4gQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDI4MjEsIDB4MzMwMCwgIkhhd2tpbmcgSGlnaERCIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDQxMSwgMHgwMDQ0LCAiTWVsY28gV0xJLVVTQi1LQjExIDExTWJwcyBXTEFOIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgxNjY4LCAweDYxMDYsICJST1BFWCBGcmVlTGFuIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgxMjRhLCAweDQwMTcsICJQaGVlbmV0IFdMLTUwM0lBIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwYmIyLCAweDAzMDIsICJBbWJpdCBNaWNyb3N5c3RlbXMgQ29ycC4iKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UoMHg5MDE2LCAweDE4MmQsICJTaXRlY29tIFdMLTAyMiA4MDIuMTFiIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFKDB4MDU0MywgMHgwZjAxLCAiVmlld1NvbmljIEFpcnN5bmMgVVNCIEFkYXB0ZXIgMTFNYnBzIChQcmlzbTIuNSkiKX0sCisJeyAvKiB0ZXJtaW5hdG9yICovIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JfcHJpc21fdGJsKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9wcm9iZV91c2IKKyoKKyogUHJvYmUgcm91dGluZSBjYWxsZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0uCisqCisqIEFyZ3VtZW50czoKKyoJZGV2CQlwdHIgdG8gdGhlIHVzYl9kZXZpY2Ugc3RydWN0CisqCWlmbnVtCQlpbnRlcmZhY2UgbnVtYmVyIGJlaW5nIG9mZmVyZWQKKyoKKyogUmV0dXJuczoKKyoJTlVMTAkJLSB3ZSdyZSBub3QgY2xhaW1pbmcgdGhlIGRldmljZStpbnRlcmZhY2UKKyoJbm9uLU5VTEwJLSB3ZSBhcmUgY2xhaW1pbmcgdGhlIGRldmljZStpbnRlcmZhY2UgYW5kCisqCQkJICB0aGlzIGlzIGEgcHRyIHRvIHRoZSBkYXRhIHdlIHdhbnQgYmFjaworKgkJCSAgd2hlbiBkaXNjb25uZWN0IGlzIGNhbGxlZC4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCUknbSBub3Qgc3VyZSwgYXNzdW1lIGl0J3MgaW50ZXJydXB0LgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCAqcHJpc20yc3RhX3Byb2JlX3VzYigKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCXVuc2lnbmVkIGludCBpZm51bSwKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCisjZWxzZQorc3RhdGljIGludCBwcmlzbTJzdGFfcHJvYmVfdXNiKAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorI2VuZGlmCit7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisjZWxzZQorCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisjZW5kaWYKKworCXdsYW5kZXZpY2VfdAkqd2xhbmRldiA9IE5VTEw7CisJaGZhMzg0eF90CSpodyA9IE5VTEw7CisJaW50ICAgICAgICAgICAgICByZXN1bHQgPSAwOworCisJREJGRU5URVI7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorCWludGVyZmFjZSA9ICZkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2lmbnVtXTsKKyNlbHNlCisJZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworI2VuZGlmCisKKworCWlmICgod2xhbmRldiA9IGNyZWF0ZV93bGFuKCkpID09IE5VTEwpIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLlxuIiwgZGV2X2luZm8pOworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWxlZDsKKwl9CisJaHcgPSB3bGFuZGV2LT5wcml2OworCisJaWYgKCB3bGFuX3NldHVwKHdsYW5kZXYpICE9IDAgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogd2xhbl9zZXR1cCgpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgaHcgZGF0YSAqLworCWhmYTM4NHhfY3JlYXRlKGh3LCBkZXYpOworCWh3LT53bGFuZGV2ID0gd2xhbmRldjsKKworCS8qIFJlZ2lzdGVyIHRoZSB3bGFuZGV2LCB0aGlzIGdldHMgdXMgYSBuYW1lIGFuZCByZWdpc3RlcnMgdGhlCisJICogbGludXggbmV0ZGV2aWNlLgorCSAqLworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDApKQorCVNFVF9ORVRERVZfREVWKHdsYW5kZXYtPm5ldGRldiwgJihpbnRlcmZhY2UtPmRldikpOworI2VuZGlmCisgICAgICAgIGlmICggcmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KSAhPSAwICkgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IHJlZ2lzdGVyX3dsYW5kZXYoKSBmYWlsZWQuXG4iLCBkZXZfaW5mbyk7CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworICAgICAgICB9CisKKwkvKiBEbyBhIGNoaXAtbGV2ZWwgcmVzZXQgb24gdGhlIE1BQyAqLworCWlmIChwcmlzbTJfZG9yZXNldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2NvcmVyZXNldChodywKKwkJCQlwcmlzbTJfcmVzZXRfaG9sZHRpbWUsCisJCQkJcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsIDApOworCQlpZiAocmVzdWx0ICE9IDApIHsKKwkJCXVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KTsKKwkJCWhmYTM4NHhfZGVzdHJveShodyk7CisJCQlyZXN1bHQgPSAtRUlPOworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJIiVzOiBoZmEzODR4X2NvcmVyZXNldCgpIGZhaWxlZC5cbiIsCisJCQkJZGV2X2luZm8pOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwl9CisKKyNpZm5kZWYgTkVXX01PRFVMRV9DT0RFCisJdXNiX2luY19kZXZfdXNlKGRldik7CisjZW5kaWYKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwxNSkpCisJdXNiX2dldF9kZXYoZGV2KTsKKyNlbmRpZgorCisJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CisKKwlnb3RvIGRvbmU7CisKKyBmYWlsZWQ6CisJaWYgKHdsYW5kZXYpCWtmcmVlKHdsYW5kZXYpOworCWlmIChodykJCWtmcmVlKGh3KTsKKwl3bGFuZGV2ID0gTlVMTDsKKworIGRvbmU6CisJREJGRVhJVDsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisJcmV0dXJuIHdsYW5kZXY7CisjZWxzZQorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCB3bGFuZGV2KTsKKwlyZXR1cm4gcmVzdWx0OworI2VuZGlmCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9kaXNjb25uZWN0X3VzYgorKgorKiBDYWxsZWQgd2hlbiBhIGRldmljZSBwcmV2aW91c2x5IGNsYWltZWQgYnkgcHJvYmUgaXMgcmVtb3ZlZAorKiBmcm9tIHRoZSBVU0IuCisqCisqIEFyZ3VtZW50czoKKyoJZGV2CQlwdHIgdG8gdGhlIHVzYl9kZXZpY2Ugc3RydWN0CisqCXB0cgkJcHRyIHJldHVybmVkIGJ5IHByb2JlKCkgd2hlbiB0aGUgZGV2aWNlCisqICAgICAgICAgICAgICAgICAgICAgICB3YXMgY2xhaW1lZC4KKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdAorcHJpc20yc3RhX2Rpc2Nvbm5lY3RfdXNiKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHZvaWQgKnB0cikKKyNlbHNlCitzdGF0aWMgdm9pZAorcHJpc20yc3RhX2Rpc2Nvbm5lY3RfdXNiKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCisjZW5kaWYKK3sKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKwl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2OworI2Vsc2UKKwl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopcHRyOworI2VuZGlmCisKKyAgICAgICAgREJGRU5URVI7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKwl3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCAqKSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisjZW5kaWYKKworCWlmICggd2xhbmRldiAhPSBOVUxMICkgeworCQlMSVNUX0hFQUQoY2xlYW5saXN0KTsKKwkJc3RydWN0IGxpc3RfaGVhZAkqZW50cnk7CisJCXN0cnVjdCBsaXN0X2hlYWQJKnRlbXA7CisJCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKworCQlpZiAoIWh3KQorCQkJZ290byBleGl0OworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJCXA4MDIxMW5ldGRldl9od3JlbW92ZWQod2xhbmRldik7CisJCWxpc3Rfc3BsaWNlX2luaXQoJmh3LT5jdGx4cS5yZWFwYWJsZSwgJmNsZWFubGlzdCk7CisJCWxpc3Rfc3BsaWNlX2luaXQoJmh3LT5jdGx4cS5jb21wbGV0aW5nLCAmY2xlYW5saXN0KTsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmaHctPmN0bHhxLnBlbmRpbmcsICZjbGVhbmxpc3QpOworCQlsaXN0X3NwbGljZV9pbml0KCZody0+Y3RseHEuYWN0aXZlLCAmY2xlYW5saXN0KTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJCS8qIFRoZXJlJ3Mgbm8gaGFyZHdhcmUgdG8gc2h1dGRvd24sIGJ1dCB0aGUgZHJpdmVyCisJCSAqIG1pZ2h0IGhhdmUgc29tZSB0YXNrcyBvciB0YXNrbGV0cyB0aGF0IG11c3QgYmUKKwkJICogc3RvcHBlZCBiZWZvcmUgd2UgY2FuIHRlYXIgZXZlcnl0aGluZyBkb3duLgorCQkgKi8KKwkJcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGUpOworCisJCWRlbF9zaW5nbGVzaG90X3RpbWVyX3N5bmMoJmh3LT50aHJvdHRsZSk7CisJCWRlbF9zaW5nbGVzaG90X3RpbWVyX3N5bmMoJmh3LT5yZXF0aW1lcik7CisJCWRlbF9zaW5nbGVzaG90X3RpbWVyX3N5bmMoJmh3LT5yZXNwdGltZXIpOworCisJCS8qIFVubGluayBhbGwgdGhlIFVSQnMuIFRoaXMgInJlbW92ZXMgdGhlIHdoZWVscyIKKwkJICogZnJvbSB0aGUgZW50aXJlIENUTFggaGFuZGxpbmcgbWVjaGFuaXNtLgorCQkgKi8KKwkJdXNiX2tpbGxfdXJiKCZody0+cnhfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKCZody0+dHhfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKCZody0+Y3RseF91cmIpOworCisJCXRhc2tsZXRfa2lsbCgmaHctPmNvbXBsZXRpb25fYmgpOworCQl0YXNrbGV0X2tpbGwoJmh3LT5yZWFwZXJfYmgpOworCisJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkJLyogTm93IHdlIGNvbXBsZXRlIGFueSBvdXRzdGFuZGluZyBjb21tYW5kcworCQkgKiBhbmQgdGVsbCBldmVyeW9uZSB3aG8gaXMgd2FpdGluZyBmb3IgdGhlaXIKKwkJICogcmVzcG9uc2VzIHRoYXQgd2UgaGF2ZSBzaHV0IGRvd24uCisJCSAqLworCQlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmY2xlYW5saXN0KSB7CisJCQloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKKworCQkJY3RseCA9IGxpc3RfZW50cnkoZW50cnksIGhmYTM4NHhfdXNiY3RseF90LCBsaXN0KTsKKwkJCWNvbXBsZXRlKCZjdGx4LT5kb25lKTsKKwkJfQorCisJCS8qIEdpdmUgYW55IG91dHN0YW5kaW5nIHN5bmNocm9ub3VzIGNvbW1hbmRzCisJCSAqIGEgY2hhbmNlIHRvIGNvbXBsZXRlLiBBbGwgdGhleSBuZWVkIHRvIGRvCisJCSAqIGlzICJ3YWtlIHVwIiwgc28gdGhhdCdzIGVhc3kuCisJCSAqIChJJ2QgbGlrZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcywgcmVhbGx5LikKKwkJICovCisJCW1zbGVlcCgxMDApOworCisJCS8qIE5vdyBkZWxldGUgdGhlIENUTFhzLCBiZWNhdXNlIG5vLW9uZSBlbHNlIGNhbiBub3cuICovCisJCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgdGVtcCwgJmNsZWFubGlzdCkgeworCQkJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CisKKwkJCWN0bHggPSBsaXN0X2VudHJ5KGVudHJ5LCBoZmEzODR4X3VzYmN0bHhfdCwgbGlzdCk7CisJCQlrZnJlZShjdGx4KTsKKwkJfQorCisJCS8qIFVuaG9vayB0aGUgd2xhbmRldiAqLworCQl1bnJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldik7CisJCXdsYW5fdW5zZXR1cCh3bGFuZGV2KTsKKworI2lmbmRlZiBORVdfTU9EVUxFX0NPREUKKwkJdXNiX2RlY19kZXZfdXNlKGh3LT51c2IpOworI2VuZGlmCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMTUpKQorCQl1c2JfcHV0X2Rldihody0+dXNiKTsKKyNlbmRpZgorCisJCWhmYTM4NHhfZGVzdHJveShodyk7CisJCWtmcmVlKGh3KTsKKworCQlrZnJlZSh3bGFuZGV2KTsKKwl9CisKKyBleGl0OgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworI2VuZGlmCisJREJGRVhJVDsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcHJpc20yX3VzYl9kcml2ZXIgPSB7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNCwxOSkpICYmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTYpKQorCS5vd25lciA9IFRISVNfTU9EVUxFLAorI2VuZGlmCisJLm5hbWUgPSAicHJpc20yX3VzYiIsCisJLnByb2JlID0gcHJpc20yc3RhX3Byb2JlX3VzYiwKKwkuZGlzY29ubmVjdCA9IHByaXNtMnN0YV9kaXNjb25uZWN0X3VzYiwKKwkuaWRfdGFibGUgPSB1c2JfcHJpc21fdGJsLAorCS8qIGZvcHMsIG1pbm9yPyAqLworfTsKKworI2lmZGVmIE1PRFVMRQorCitzdGF0aWMgaW50IF9faW5pdCBwcmlzbTJ1c2JfaW5pdCh2b2lkKQoreworICAgICAgICBEQkZFTlRFUjsKKworICAgICAgICBXTEFOX0xPR19OT1RJQ0UoIiVzIExvYWRlZFxuIiwgdmVyc2lvbik7CisgICAgICAgIFdMQU5fTE9HX05PVElDRSgiZGV2X2luZm8gaXM6ICVzXG4iLCBkZXZfaW5mbyk7CisKKwkvKiBUaGlzIGNhbGwgd2lsbCByZXN1bHQgaW4gY2FsbHMgdG8gcHJpc20yc3RhX3Byb2JlX3VzYi4gKi8KKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZwcmlzbTJfdXNiX2RyaXZlcik7CisKKwlEQkZFWElUOworfTsKKworc3RhdGljIHZvaWQgX19leGl0IHByaXNtMnVzYl9jbGVhbnVwKHZvaWQpCit7CisgICAgICAgIERCRkVOVEVSOworCisJdXNiX2RlcmVnaXN0ZXIoJnByaXNtMl91c2JfZHJpdmVyKTsKKworICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzIFVubG9hZGVkXG4iLCB2ZXJzaW9uKTsKKworCURCRkVYSVQ7Cit9OworCittb2R1bGVfaW5pdChwcmlzbTJ1c2JfaW5pdCk7Cittb2R1bGVfZXhpdChwcmlzbTJ1c2JfY2xlYW51cCk7CisKKyNlbmRpZiAvLyBtb2R1bGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTc1MDI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jCkBAIC0wLDAgKzEsMjk1NiBAQAorLyogc3JjL3ByaXNtMi9kcml2ZXIvcHJpc20ybWdtdC5jCisqCisqIE1hbmFnZW1lbnQgcmVxdWVzdCBoYW5kbGVyIGZ1bmN0aW9ucy4KKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgaGFuZGxlIG1hbmFnZW1lbnQgcmVxdWVzdHMgc2VudCBmcm9tCisqIHVzZXIgbW9kZS4KKyoKKyogTW9zdCBvZiB0aGVzZSBmdW5jdGlvbnMgaGF2ZSB0d28gc2VwYXJhdGUgYmxvY2tzIG9mIGNvZGUgdGhhdCBhcmUKKyogY29uZGl0aW9uYWwgb24gd2hldGhlciB0aGlzIGlzIGEgc3RhdGlvbiBvciBhbiBBUC4gIFRoaXMgaXMgdXNlZAorKiB0byBzZXBhcmF0ZSBvdXQgdGhlIFNUQSBhbmQgQVAgcmVzcG9uc2VzIHRvIHRoZXNlIG1hbmFnZW1lbnQgcHJpbWl0aXZlcy4KKyogSXQncyBhIGNob2ljZSAoZ29vZCwgYmFkLCBpbmRpZmZlcmVudD8pIHRvIGhhdmUgdGhlIGNvZGUgaW4gdGhlIHNhbWUKKyogcGxhY2Ugc28gaXQncyBjbGVhciB0aGF0IHRoZSBzYW1lIHByaW1pdGl2ZSBpcyBpbXBsZW1lbnRlZCBpbiBib3RoCisqIGNhc2VzIGJ1dCBoYXMgZGlmZmVyZW50IGJlaGF2aW9yLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworI2RlZmluZSBXTEFOX0RCVkFSCXByaXNtMl9kZWJ1ZworCisjaW5jbHVkZSAidmVyc2lvbi5oIgorCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2VuZGlmCisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpCisjaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTFtZ210LmgiCisjaW5jbHVkZSAicDgwMjExY29udi5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAiaGZhMzg0eC5oIgorI2luY2x1ZGUgInByaXNtMm1nbXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBNYWNyb3MgKi8KKworLyogQ29udmVydHMgODAyLjExIGZvcm1hdCByYXRlIHNwZWNpZmljYXRpb25zIHRvIHByaXNtMiAqLworI2RlZmluZSBwODAyMTFyYXRlX3RvX3AyYml0KG4pCSgoKChuKSZ+QklUNykgPT0gMikgPyBCSVQwIDogXAorCQkJCSAoKChuKSZ+QklUNykgPT0gNCkgPyBCSVQxIDogXAorCQkJCSAoKChuKSZ+QklUNykgPT0gMTEpID8gQklUMiA6IFwKKwkJCQkgKCgobikmfkJJVDcpID09IDIyKSA/IEJJVDMgOiAwKQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3Bvd2VybWdtdAorKgorKiBTZXQgdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3RhdGUgb2YgdGhpcyBzdGF0aW9uJ3MgTUFDLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfcG93ZXJtZ210KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX3Bvd2VybWdtdF90CSptc2cgPSBtc2dwOworCisJREJGRU5URVI7CisKKwlpZiAoIWh3LT5hcCkgeworCisJCS8qKiogU1RBVElPTiAqKiovCisKKwkJLyoKKwkJICogU2V0IENORlBNRU5BQkxFRCAob24gb3Igb2ZmKQorCQkgKiBTZXQgQ05GTVVMVElDQVNUUlggKGlmIFBNIG9uLCBvdGhlcndpc2UgY2xlYXIpCisJCSAqIFNwb3V0IGEgbm90aWNlIHN0YXRpbmcgdGhhdCBTbGVlcER1cmF0aW9uIGFuZAorCQkgKiBIb2xkb3ZlckR1cmF0aW9uIGFuZCBQTUVQUyBhbHNvIGhhdmUgYW4gaW1wYWN0LgorCQkgKi8KKwkJLyogUG93ZXJtZ210IGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZCBmb3IgU1RBICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJfSBlbHNlIHsKKworCQkvKioqIEFDQ0VTUyBQT0lOVCAqKiovCisKKwkJLyogUG93ZXJtZ210IGlzIG5ldmVyIHN1cHBvcnRlZCBmb3IgQVAgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfc2NhbgorKgorKiBJbml0aWF0ZSBhIHNjYW4gZm9yIEJTU3MuCisqCisqIFRoaXMgZnVuY3Rpb24gY29ycmVzcG9uZHMgdG8gTUxNRS1zY2FuLnJlcXVlc3QgYW5kIHBhcnQgb2YKKyogTUxNRS1zY2FuLmNvbmZpcm0uICBBcyBmYXIgYXMgSSBjYW4gdGVsbCBpbiB0aGUgc3RhbmRhcmQsIHRoZXJlCisqIGFyZSBubyByZXN0cmljdGlvbnMgb24gd2hlbiBhIHNjYW4ucmVxdWVzdCBtYXkgYmUgaXNzdWVkLiAgV2UgaGF2ZQorKiB0byBoYW5kbGUgaW4gd2hhdGV2ZXIgc3RhdGUgdGhlIGRyaXZlci9NQUMgaGFwcGVuIHRvIGJlLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfc2Nhbih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3QJKm1zZyA9IG1zZ3A7CisgICAgICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgIHJvYW1pbmdtb2RlLCB3b3JkOworCWludCAgICAgICAgICAgICAgICAgICAgIGksIHRpbWVvdXQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgaXN0bXBlbmFibGUgPSAwOworCisgICAgICAgIGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGFfdCAgc2NhbnJlcTsKKworCURCRkVOVEVSOworCisgICAgICAgIGlmIChody0+YXApIHsKKyAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigiUHJpc20yIGluIEFQIG1vZGUgY2Fubm90IHBlcmZvcm0gc2NhbnMuXG4iKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAxOworICAgICAgICAgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyogZ2F0ZWtlZXBlciBjaGVjayAqLworICAgICAgICBpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpIDwKKyAgICAgICAgICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigxLDMsMikpIHsKKwkJV0xBTl9MT0dfRVJST1IoIkhvc3RTY2FuIG5vdCBzdXBwb3J0ZWQgd2l0aCBjdXJyZW50IGZpcm13YXJlICg8MS4zLjIpLlxuIik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gMTsKKyAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQlnb3RvIGV4aXQ7CisJfQorCisgICAgICAgIG1lbXNldCgmc2NhbnJlcSwgMCwgc2l6ZW9mKHNjYW5yZXEpKTsKKworICAgICAgICAvKiBzYXZlIGN1cnJlbnQgcm9hbWluZyBtb2RlICovCisgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywKKyAgICAgICAgICAgICAgICAgICAgICAgIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLCAmcm9hbWluZ21vZGUpOworICAgICAgICBpZiAoIHJlc3VsdCApIHsKKyAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigiZ2V0Y29uZmlnKFJPQU1NT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBkcm9wIGludG8gbW9kZSAzIGZvciB0aGUgc2NhbiAqLworICAgICAgICByZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCisgICAgICAgICAgICAgICAgICAgICAgICBIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwKKwkJCUhGQTM4NHhfUk9BTU1PREVfSE9TVFNDQU5fSE9TVFJPQU0pOworICAgICAgICBpZiAoIHJlc3VsdCApIHsKKyAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKFJPQU1JTkdNT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBhY3RpdmUgb3IgcGFzc2l2ZT8gKi8KKyAgICAgICAgaWYgKEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTihody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KSA+CisgICAgICAgICAgICBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oMSw1LDApKSB7CisgICAgICAgICAgICAgICAgaWYgKG1zZy0+c2NhbnR5cGUuZGF0YSAhPSBQODAyMTFFTlVNX3NjYW50eXBlX2FjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd29yZCA9IGhvc3QyaGZhMzg0eF8xNihtc2ctPm1heGNoYW5uZWx0aW1lLmRhdGEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JkID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZQQVNTSVZFU0NBTkNUUkwsIHdvcmQpOworICAgICAgICAgICAgICAgIGlmICggcmVzdWx0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgV0xBTl9MT0dfV0FSTklORygiUGFzc2l2ZSBzY2FuIG5vdCBzdXBwb3J0ZWQgd2l0aCAiCisJCQkJCSAgImN1cnJlbnQgZmlybXdhcmUuICAoPDEuNS4xKVxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKwkvKiBzZXQgdXAgdGhlIHR4cmF0ZSB0byBiZSAyTUJQUy4gU2hvdWxkIGJlIGZhc3Rlc3QgYmFzaWNyYXRlLi4uICovCisJd29yZCA9IEhGQTM4NHhfUkFURUJJVF8yOworCXNjYW5yZXEudHhSYXRlID0gaG9zdDJoZmEzODR4XzE2KHdvcmQpOworCisgICAgICAgIC8qIHNldCB1cCB0aGUgY2hhbm5lbCBsaXN0ICovCisgICAgICAgIHdvcmQgPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLT5jaGFubmVsbGlzdC5kYXRhLmxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgVUlOVDggY2hhbm5lbCA9IG1zZy0+Y2hhbm5lbGxpc3QuZGF0YS5kYXRhW2ldOworICAgICAgICAgICAgICAgIGlmIChjaGFubmVsID4gMTQpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgMSBpcyBCSVQwIC4uLiBjaGFubmVsIDE0IGlzIEJJVDEzICovCisgICAgICAgICAgICAgICAgd29yZCB8PSAoMSA8PCAoY2hhbm5lbC0xKSk7CisgICAgICAgIH0KKyAgICAgICAgc2NhbnJlcS5jaGFubmVsTGlzdCA9IGhvc3QyaGZhMzg0eF8xNih3b3JkKTsKKworICAgICAgICAvKiBzZXQgdXAgdGhlIHNzaWQsIGlmIHByZXNlbnQuICovCisgICAgICAgIHNjYW5yZXEuc3NpZC5sZW4gPSBob3N0MmhmYTM4NHhfMTYobXNnLT5zc2lkLmRhdGEubGVuKTsKKyAgICAgICAgbWVtY3B5KHNjYW5yZXEuc3NpZC5kYXRhLCBtc2ctPnNzaWQuZGF0YS5kYXRhLCBtc2ctPnNzaWQuZGF0YS5sZW4pOworCisJLyogRW5hYmxlIHRoZSBNQUMgcG9ydCBpZiBpdCdzIG5vdCBhbHJlYWR5IGVuYWJsZWQgICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9QT1JUU1RBVFVTLCAmd29yZCk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJnZXRjb25maWcoUE9SVFNUQVRVUykgZmFpbGVkLiAiCisJCQkJInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCWdvdG8gZXhpdDsKKwl9CisJaWYgKHdvcmQgPT0gSEZBMzg0eF9QT1JUU1RBVFVTX0RJU0FCTEVEKSB7CisJCVVJTlQxNiB3b3JkYnVmWzE3XTsKKworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCisJCQlIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwKKwkJCUhGQTM4NHhfUk9BTU1PREVfSE9TVFNDQU5fSE9TVFJPQU0pOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJzZXRjb25maWcoUk9BTUlOR01PREUpIGZhaWxlZC4gcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJZ290byBleGl0OworCQl9CisJCS8qIENvbnN0cnVjdCBhIGJvZ3VzIFNTSUQgYW5kIGFzc2lnbiBpdCB0byBPd25TU0lEIGFuZAorCQkgKiBEZXNpcmVkU1NJRAorCQkgKi8KKwkJd29yZGJ1ZlswXSA9IGhvc3QyaGZhMzg0eF8xNihXTEFOX1NTSURfTUFYTEVOKTsKKwkJZ2V0X3JhbmRvbV9ieXRlcygmd29yZGJ1ZlsxXSwgV0xBTl9TU0lEX01BWExFTik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LCBIRkEzODR4X1JJRF9DTkZPV05TU0lELAorCQkJCXdvcmRidWYsIEhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBPd25TU0lELlxuIik7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lELAorCQkJCXdvcmRidWYsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTik7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRGVzaXJlZFNTSUQuXG4iKTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQkvKiBic3N0eXBlICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKwkJCQlIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwKKwkJCQlIRkEzODR4X1BPUlRUWVBFX0lCU1MpOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IENORlBPUlRUWVBFLlxuIik7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJLyogaWJzcyBvcHRpb25zICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKwkJCQlIRkEzODR4X1JJRF9DUkVBVEVJQlNTLAorCQkJCUhGQTM4NHhfQ1JFQVRFSUJTU19KT0lOQ1JFQVRFSUJTUyk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQ1JFQVRFSUJTUy5cbiIpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJZ290byBleGl0OworCQl9CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9lbmFibGUoaHcsIDApOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJkcnZyX2VuYWJsZSgwKSBmYWlsZWQuICIKKwkJCQkJInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJZ290byBleGl0OworCQl9CisJCWlzdG1wZW5hYmxlID0gMTsKKwl9CisKKyAgICAgICAgLyogRmlndXJlIG91dCBvdXIgdGltZW91dCBmaXJzdCBLdXMsIHRoZW4gSFogKi8KKyAgICAgICAgdGltZW91dCA9IG1zZy0+Y2hhbm5lbGxpc3QuZGF0YS5sZW4gKiBtc2ctPm1heGNoYW5uZWx0aW1lLmRhdGE7CisJdGltZW91dCA9ICh0aW1lb3V0ICogSFopLzEwMDA7CisKKyAgICAgICAgLyogSXNzdWUgdGhlIHNjYW4gcmVxdWVzdCAqLworICAgICAgICBody0+c2NhbmZsYWcgPSAwOworCisJV0xBTl9IRVhfRFVNUCg1LCJoc2NhbnJlcSIsICZzY2FucmVxLCBzaXplb2Yoc2NhbnJlcSkpOworCisgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LAorICAgICAgICAgICAgICAgICAgICAgICAgSEZBMzg0eF9SSURfSE9TVFNDQU4sICZzY2FucmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGFfdCkpOworICAgICAgICBpZiAoIHJlc3VsdCApIHsKKyAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKFNDQU5SRVFVRVNUKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBzbGVlcCB1bnRpbCBpbmZvIGZyYW1lIGFycml2ZXMgKi8KKyAgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaHctPmNtZHEsIGh3LT5zY2FuZmxhZywgdGltZW91dCk7CisKKwltc2ctPm51bWJzcy5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJaWYgKGh3LT5zY2FuZmxhZyA9PSAtMSkKKwkJaHctPnNjYW5mbGFnID0gMDsKKworCW1zZy0+bnVtYnNzLmRhdGEgPSBody0+c2NhbmZsYWc7CisKKyAgICAgICAgaHctPnNjYW5mbGFnID0gMDsKKworCS8qIERpc2FibGUgcG9ydCBpZiB3ZSB0ZW1wb3JhcmlseSBlbmFibGVkIGl0LiAqLworCWlmIChpc3RtcGVuYWJsZSkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZGlzYWJsZShodywgMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoImRydnJfZGlzYWJsZSgwKSBmYWlsZWQuICIKKwkJCQkJInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJLyogcmVzdG9yZSBvcmlnaW5hbCByb2FtaW5nIG1vZGUgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLAorCQkJCQkgIHJvYW1pbmdtb2RlKTsKKyAgICAgICAgaWYgKCByZXN1bHQgKSB7CisgICAgICAgICAgICAgICAgV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhST0FNTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorICAgICAgICAgICAgICAgICAgICAgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworIGV4aXQ6CisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMKKyoKKyogUmV0cmlldmUgdGhlIEJTUyBkZXNjcmlwdGlvbiBmb3Igb25lIG9mIHRoZSBCU1NzIGlkZW50aWZpZWQgaW4KKyogYSBzY2FuLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfc2Nhbl9yZXN1bHRzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKyAgICAgICAgcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190ICAgICAgICpyZXE7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfSFNjYW5SZXN1bHRTdWJfdCAqaXRlbSA9IE5VTEw7CisKKwlpbnQgY291bnQ7CisKKwlEQkZFTlRFUjsKKworICAgICAgICByZXEgPSAocDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190ICopIG1zZ3A7CisKKwlyZXEtPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJaWYgKGh3LT5hcCkgeworCQlyZXN1bHQgPSAxOworCQlyZXEtPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCEgaHctPnNjYW5yZXN1bHRzKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJkb3QxMXJlcV9zY2FuX3Jlc3VsdHMgY2FuIG9ubHkgYmUgdXNlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgZG90MTFyZXFfc2Nhbi5cbiIpOworCQlyZXN1bHQgPSAyOworCQlyZXEtPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisJCWdvdG8gZXhpdDsKKwl9CisKKyAgICAgICAgY291bnQgPSAoaHctPnNjYW5yZXN1bHRzLT5mcmFtZWxlbiAtIDMpIC8gMzI7CisJaWYgKGNvdW50ID4gMzIpICBjb3VudCA9IDMyOworCisJaWYgKHJlcS0+YnNzaW5kZXguZGF0YSA+PSBjb3VudCkgeworCQlXTEFOX0xPR19ERUJVRygwLCAicmVxdWVzdGVkIGluZGV4ICglZCkgb3V0IG9mIHJhbmdlICglZClcbiIsCisJCQkJcmVxLT5ic3NpbmRleC5kYXRhLCBjb3VudCk7CisJCXJlc3VsdCA9IDI7CisJCXJlcS0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKwkJZ290byBleGl0OworCX0KKworCWl0ZW0gPSAmKGh3LT5zY2FucmVzdWx0cy0+aW5mby5oc2NhbnJlc3VsdC5yZXN1bHRbcmVxLT5ic3NpbmRleC5kYXRhXSk7CisJLyogc2lnbmFsIGFuZCBub2lzZSAqLworCXJlcS0+c2lnbmFsLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlyZXEtPm5vaXNlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlyZXEtPnNpZ25hbC5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPnNsKTsKKwlyZXEtPm5vaXNlLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaXRlbS0+YW5sKTsKKworCS8qIEJTU0lEICovCisJcmVxLT5ic3NpZC5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJcmVxLT5ic3NpZC5kYXRhLmxlbiA9IFdMQU5fQlNTSURfTEVOOworCW1lbWNweShyZXEtPmJzc2lkLmRhdGEuZGF0YSwgaXRlbS0+YnNzaWQsIFdMQU5fQlNTSURfTEVOKTsKKworCS8qIFNTSUQgKi8KKwlyZXEtPnNzaWQuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+c3NpZC5kYXRhLmxlbiA9IGhmYTM4NHgyaG9zdF8xNihpdGVtLT5zc2lkLmxlbik7CisJbWVtY3B5KHJlcS0+c3NpZC5kYXRhLmRhdGEsIGl0ZW0tPnNzaWQuZGF0YSwgcmVxLT5zc2lkLmRhdGEubGVuKTsKKworCS8qIHN1cHBvcnRlZCByYXRlcyAqLworICAgICAgICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCAxMCA7IGNvdW50KyspCisgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPnN1cHByYXRlc1tjb3VudF0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisjZGVmaW5lIFJFUUJBU0lDUkFURShOKSBcCisJaWYgKChjb3VudCA+PSBOKSAmJiBET1QxMV9SQVRFNV9JU0JBU0lDX0dFVChpdGVtLT5zdXBwcmF0ZXNbKE4pLTFdKSkgeyBcCisJCXJlcS0+YmFzaWNyYXRlICMjIE4gLmRhdGEgPSBpdGVtLT5zdXBwcmF0ZXNbKE4pLTFdOyBcCisJCXJlcS0+YmFzaWNyYXRlICMjIE4gLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsgXAorCX0KKworCVJFUUJBU0lDUkFURSgxKTsKKwlSRVFCQVNJQ1JBVEUoMik7CisJUkVRQkFTSUNSQVRFKDMpOworCVJFUUJBU0lDUkFURSg0KTsKKwlSRVFCQVNJQ1JBVEUoNSk7CisJUkVRQkFTSUNSQVRFKDYpOworCVJFUUJBU0lDUkFURSg3KTsKKwlSRVFCQVNJQ1JBVEUoOCk7CisKKyNkZWZpbmUgUkVRU1VQUFJBVEUoTikgXAorCWlmIChjb3VudCA+PSBOKSB7IFwKKwkJcmVxLT5zdXBwcmF0ZSAjIyBOIC5kYXRhID0gaXRlbS0+c3VwcHJhdGVzWyhOKS0xXTsgXAorCQlyZXEtPnN1cHByYXRlICMjIE4gLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsgXAorCX0KKworCVJFUVNVUFBSQVRFKDEpOworCVJFUVNVUFBSQVRFKDIpOworCVJFUVNVUFBSQVRFKDMpOworCVJFUVNVUFBSQVRFKDQpOworCVJFUVNVUFBSQVRFKDUpOworCVJFUVNVUFBSQVRFKDYpOworCVJFUVNVUFBSQVRFKDcpOworCVJFUVNVUFBSQVRFKDgpOworCisJLyogYmVhY29uIHBlcmlvZCAqLworCXJlcS0+YmVhY29ucGVyaW9kLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlyZXEtPmJlYWNvbnBlcmlvZC5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPmJjbmludCk7CisKKwkvKiB0aW1lc3RhbXBzICovCisJcmVxLT50aW1lc3RhbXAuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+dGltZXN0YW1wLmRhdGEgPSBqaWZmaWVzOworCXJlcS0+bG9jYWx0aW1lLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlyZXEtPmxvY2FsdGltZS5kYXRhID0gamlmZmllczsKKworCS8qIGF0aW0gd2luZG93ICovCisJcmVxLT5pYnNzYXRpbXdpbmRvdy5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJcmVxLT5pYnNzYXRpbXdpbmRvdy5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPmF0aW0pOworCisJLyogQ2hhbm5lbCAqLworCXJlcS0+ZHNjaGFubmVsLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlyZXEtPmRzY2hhbm5lbC5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPmNoaWQpOworCisJLyogY2FwaW5mbyBiaXRzICovCisJY291bnQgPSBoZmEzODR4Mmhvc3RfMTYoaXRlbS0+Y2FwaW5mbyk7CisKKwkvKiBwcml2YWN5IGZsYWcgKi8KKwlyZXEtPnByaXZhY3kuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+cHJpdmFjeS5kYXRhID0gV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19QUklWQUNZKGNvdW50KTsKKworCS8qIGNmcG9sbGFibGUgKi8KKwlyZXEtPmNmcG9sbGFibGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+Y2Zwb2xsYWJsZS5kYXRhID0gV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19DRlBPTExBQkxFKGNvdW50KTsKKworCS8qIGNmcG9sbHJlcSAqLworCXJlcS0+Y2Zwb2xscmVxLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlyZXEtPmNmcG9sbHJlcS5kYXRhID0gV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19DRlBPTExSRVEoY291bnQpOworCisJLyogYnNzdHlwZSAqLworCXJlcS0+YnNzdHlwZS5zdGF0dXMgPSAgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+YnNzdHlwZS5kYXRhID0gKFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fRVNTKGNvdW50KSkgPworCQlQODAyMTFFTlVNX2Jzc3R5cGVfaW5mcmFzdHJ1Y3R1cmUgOgorCQlQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQ7CisKKwkvLyBpdGVtLT5wcm9iZXJlc3BfcmF0ZQorLyoKKwlyZXEtPmZoZHdlbGx0aW1lCisJcmVxLT5maGhvcHNldAorCXJlcS0+Zmhob3BwYXR0ZXJuCisJcmVxLT5maGhvcGluZGV4CisgICAgICAgIHJlcS0+Y2ZwZHVycmVtYWluaW5nCisqLworCisJcmVzdWx0ID0gMDsKKwlyZXEtPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfam9pbgorKgorKiBKb2luIGEgQlNTIHdob3NlIEJTUyBkZXNjcmlwdGlvbiB3YXMgcHJldmlvdXNseSBvYnRhaW5lZCB3aXRoCisqIGEgc2Nhbi4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludCAJCQlyZXN1bHQgPSAwOworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfZG90MTFyZXFfam9pbl90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJaWYgKCFody0+YXApIHsKKworCQkvKioqIFNUQVRJT04gKioqLworCisJCS8qIFRPRE86IEltcGxlbWVudCBhZnRlciBzY2FuICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJfSBlbHNlIHsKKworCQkvKioqIEFDQ0VTUyBQT0lOVCAqKiovCisKKwkJLyogTmV2ZXIgc3VwcG9ydGVkIGJ5IEFQcyAqLworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9wMl9qb2luCisqCisqIEpvaW4gYSBzcGVjaWZpYyBCU1MKKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X3AyX2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludCAJCQlyZXN1bHQgPSAwOworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfcDJyZXFfam9pbl90CSptc2cgPSBtc2dwOworCVVJTlQxNgkJCXJlZzsKKwlwODAyMTFwc3RyZF90CQkqcHN0cjsKKwlVSU5UOAkJCWJ5dGVidWZbMjU2XTsKKwloZmEzODR4X2J5dGVzdHJfdAkqcDJieXRlc3RyID0gKGhmYTM4NHhfYnl0ZXN0cl90KilieXRlYnVmOworICAgICAgICBoZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdAlqb2lucmVxOworCURCRkVOVEVSOworCisJaWYgKCFody0+YXApIHsKKworCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX05PTkU7CisKKwkJLyoqKiBTVEFUSU9OICoqKi8KKwkJLyogU2V0IHRoZSBQb3J0VHlwZSAqLworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisJCS8qIGVzcyBwb3J0ICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIDEpOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IFBvcnQgVHlwZVxuIik7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCS8qIFNldCB0aGUgYXV0aCB0eXBlICovCisJCWlmICggbXNnLT5hdXRodHlwZS5kYXRhID09IFA4MDIxMUVOVU1fYXV0aGFsZ19zaGFyZWRrZXkgKSB7CisJCQlyZWcgPSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX1NIQVJFREtFWTsKKwkJfSBlbHNlIHsKKwkJCXJlZyA9IEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fT1BFTlNZU1RFTTsKKwkJfQorCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OLCByZWcpOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IEF1dGhlbnRpY2F0aW9uXG4iKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJLyogVHVybiBvZmYgYWxsIHJvYW1pbmcgKi8KKwkJaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwgMyk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBUdXJuIG9mZiBSb2FtaW5nXG4iKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJLyogQmFzaWMgcmF0ZXMgKi8KKyAgICAgICAgICAgICAgICByZWcgPSAwOworCQlpZiAoIG1zZy0+YmFzaWNyYXRlMS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnID0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTEuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPmJhc2ljcmF0ZTIuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlMi5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlMy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUzLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU0LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTQuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPmJhc2ljcmF0ZTUuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlNS5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlNi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU2LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5iYXNpY3JhdGU3LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPmJhc2ljcmF0ZTcuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPmJhc2ljcmF0ZTguc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlOC5kYXRhKTsKKwkJfQorCQlpZiggcmVnID09IDApCisJCQkgcmVnID0gMHgwMzsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZCQVNJQ1JBVEVTLCByZWcpOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGJhc2ljcmF0ZXM9JWQuXG4iLCByZWcpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBPcGVyYXRpb25hbCByYXRlcyAoc3VwcHJhdGVzIGFuZCB0eHJhdGVjb250cm9sKSAqLworCQlyZWcgPSAwOworCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlMS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnID0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTEuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTIuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlMi5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlMy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUzLmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU0LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTQuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTUuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNS5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJcmVnIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU2LmRhdGEpOworCQl9CisJCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU3LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlyZWcgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTcuZGF0YSk7CisJCX0KKwkJaWYgKCBtc2ctPm9wZXJhdGlvbmFscmF0ZTguc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vayApIHsKKwkJCXJlZyB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlOC5kYXRhKTsKKwkJfQorCQlpZiggcmVnID09IDApCisJCQkgcmVnID0gMHgwZjsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZTVVBQUkFURVMsIHJlZyk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgc3VwcHJhdGVzPSVkLlxuIiwgcmVnKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKyAJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfVFhSQVRFQ05UTCwgcmVnKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCB0eHJhdGVzPSVkLlxuIiwgcmVnKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJLyogU2V0IHRoZSBzc2lkICovCisJCW1lbXNldChieXRlYnVmLCAwLCAyNTYpOworCQlwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSYobXNnLT5zc2lkLmRhdGEpOworCQlwcmlzbTJtZ210X3BzdHIyYnl0ZXN0cihwMmJ5dGVzdHIsIHBzdHIpOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKAorCQkJaHcsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lELAorCQkJYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBTU0lEXG4iKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJLyogRW5hYmxlIHRoZSBQb3J0ICovCisJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2VuYWJsZShodywgMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkVuYWJsZSBtYWNwb3J0IGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJLyogRmlsbCBpbiB0aGUgam9pbiByZXF1ZXN0ICovCisJCWpvaW5yZXEuY2hhbm5lbCA9IG1zZy0+Y2hhbm5lbC5kYXRhOworCQltZW1jcHkoIGpvaW5yZXEuYnNzaWQsICgodW5zaWduZWQgY2hhciAqKSAmbXNnLT5ic3NpZC5kYXRhKSArIDEsIFdMQU5fQlNTSURfTEVOKTsKKwkJaHctPmpvaW5yZXEgPSBqb2lucmVxOworCQlody0+am9pbl9hcCA9IDE7CisKKwkJLyogU2VuZCB0aGUgam9pbiByZXF1ZXN0ICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LAorCQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1QsCisJCQkmam9pbnJlcSwgSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOKTsKKyAgICAgICAgICAgICAgICBpZihyZXN1bHQgIT0gMCkgeworCQkJV0xBTl9MT0dfRVJST1IoIkpvaW4gcmVxdWVzdCBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJfSBlbHNlIHsKKworCQkvKioqIEFDQ0VTUyBQT0lOVCAqKiovCisKKwkJLyogTmV2ZXIgc3VwcG9ydGVkIGJ5IEFQcyAqLworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCX0KKworICAgICAgICBnb3RvIGRvbmU7CitmYWlsZWQ6CisJV0xBTl9MT0dfREVCVUcoMSwgIkZhaWxlZCB0byBzZXQgYSBjb25maWcgb3B0aW9uLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCitkb25lOgorICAgICAgICByZXN1bHQgPSAwOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2F1dGhlbnRpY2F0ZQorKgorKiBTdGF0aW9uIHNob3VsZCBiZSBiZWdpbiBhbiBhdXRoZW50aWNhdGlvbiBleGNoYW5nZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2F1dGhlbnRpY2F0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19kb3QxMXJlcV9hdXRoZW50aWNhdGVfdAkqbXNnID0gbXNncDsKKwlEQkZFTlRFUjsKKworCWlmICghaHctPmFwKSB7CisKKwkJLyoqKiBTVEFUSU9OICoqKi8KKworCQkvKiBUT0RPOiBEZWNpZGUgaG93IHdlJ3JlIGdvaW5nIHRvIGhhbmRsZSB0aGlzIG9uZSB3LyBQcmlzbTIgKi8KKwkJLyogICAgICAgSXQgY291bGQgYmUgZW50ZXJ0YWluaW5nIHNpbmNlIFByaXNtMiBkb2Vzbid0IGhhdmUgICovCisJCS8qICAgICAgIGFuIGV4cGxpY2l0IHdheSB0byBjb250cm9sIHRoaXMgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9IGVsc2UgeworCisJCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworCQkvKiBOZXZlciBzdXBwb3J0ZWQgYnkgQVBzICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2RlYXV0aGVudGljYXRlCisqCisqIFNlbmQgYSBkZWF1dGhlbnRpY2F0ZSBub3RpZmljYXRpb24uCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9kZWF1dGhlbnRpY2F0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19kb3QxMXJlcV9kZWF1dGhlbnRpY2F0ZV90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJaWYgKCFody0+YXApIHsKKworCQkvKioqIFNUQVRJT04gKioqLworCisJCS8qIFRPRE86IERlY2lkZSBob3cgd2UncmUgZ29pbmcgdG8gaGFuZGxlIHRoaXMgb25lIHcvIFByaXNtMiAqLworCQkvKiAgICAgICBJdCBjb3VsZCBiZSBlbnRlcnRhaW5pbmcgc2luY2UgUHJpc20yIGRvZXNuJ3QgaGF2ZSAgKi8KKwkJLyogICAgICAgYW4gZXhwbGljaXQgd2F5IHRvIGNvbnRyb2wgdGhpcyAqLworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCX0gZWxzZSB7CisKKwkJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCQloZmEzODR4X2RydnJfaGFuZG92ZXIoaHcsIG1zZy0+cGVlcnN0YWFkZHJlc3MuZGF0YS5kYXRhKTsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfYXNzb2NpYXRlCisqCisqIEFzc29jaWF0ZSB3aXRoIGFuIEVTUy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2Fzc29jaWF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCWludCAJCQlyZXN1bHQgPSAwOworCXA4MDIxMW1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfdAkqbXNnID0gbXNncDsKKwlEQkZFTlRFUjsKKworCWlmICghaHctPmFwKSB7CisKKwkJLyoqKiBTVEFUSU9OICoqKi8KKworI2lmIDAKKwkJLyogU2V0IHRoZSBUeFJhdGVzICovCisJCXJlZyA9IDB4MDAwZjsKKwkJaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9UWFJBVEVDTlRMLCByZWcpOworI2VuZGlmCisKKwkJLyogU2V0IHRoZSBQb3J0VHlwZSAqLworCQkvKiBlc3MgcG9ydCAqLworCQloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLCAxKTsKKworCQkvKiBFbmFibGUgdGhlIFBvcnQgKi8KKwkJaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7CisKKwkJLyogU2V0IHRoZSByZXN1bHRjb2RlICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKKwl9IGVsc2UgeworCisJCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworCQkvKiBOZXZlciBzdXBwb3J0ZWQgb24gQVAgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcmVhc3NvY2lhdGUKKyoKKyogUmVuZXcgYXNzb2NpYXRpb24gYmVjYXVzZSBvZiBhIEJTUyBjaGFuZ2UuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9yZWFzc29jaWF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19kb3QxMXJlcV9yZWFzc29jaWF0ZV90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJaWYgKCFody0+YXApIHsKKworCQkvKioqIFNUQVRJT04gKioqLworCisJCS8qIFRPRE86IE5vdCBzdXBwb3J0ZWQgeWV0Li4ubm90IHN1cmUgaG93IHdlJ3JlIGdvaW5nIHRvIGRvIGl0ICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJfSBlbHNlIHsKKworCQkvKioqIEFDQ0VTUyBQT0lOVCAqKiovCisKKwkJLyogTmV2ZXIgc3VwcG9ydGVkIG9uIEFQICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2Rpc2Fzc29jaWF0ZQorKgorKiBTZW5kIGEgZGlzYXNzb2NpYXRpb24gbm90aWZpY2F0aW9uLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfZGlzYXNzb2NpYXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX2Rpc2Fzc29jaWF0ZV90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJaWYgKCFody0+YXApIHsKKworCQkvKioqIFNUQVRJT04gKioqLworCisJCS8qIFRPRE86IE5vdCBzdXBwb3J0ZWQgeWV0Li4ubm90IHN1cmUgaG93IHRvIGRvIGl0ICovCisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJfSBlbHNlIHsKKworCQkvKioqIEFDQ0VTUyBQT0lOVCAqKiovCisJCWhmYTM4NHhfZHJ2cl9oYW5kb3ZlcihodywgbXNnLT5wZWVyc3RhYWRkcmVzcy5kYXRhLmRhdGEpOworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9yZXNldAorKgorKiBSZXNldCB0aGUgTUFDIGFuZCBNU0QuICBUaGUgcDgwMjExIGxheWVyIGhhcyBpdCdzIG93biBoYW5kbGluZworKiB0aGF0IHNob3VsZCBiZSBkb25lIGJlZm9yZSBhbmQgYWZ0ZXIgdGhpcyBmdW5jdGlvbi4KKyogUHJvY2VkdXJlOgorKiAgIC0gZGlzYWJsZSBzeXN0ZW0gaW50ZXJydXB0cyA/PworKiAgIC0gZGlzYWJsZSBNQUMgaW50ZXJydXB0cworKiAgIC0gcmVzdG9yZSBzeXN0ZW0gaW50ZXJydXB0cworKiAgIC0gaXNzdWUgdGhlIE1BQyBpbml0aWFsaXplIGNvbW1hbmQKKyogICAtIGNsZWFyIGFueSBNU0QgbGV2ZWwgc3RhdGUgKGluY2x1ZGluZyB0aW1lcnMsIHF1ZXVlZCBldmVudHMsCisqICAgICBldGMuKS4gIE5vdGUgdGhhdCBpZiB3ZSdyZSByZW1vdmluZyB0aW1lcidkL3F1ZXVlIGV2ZW50cywgd2UgbWF5CisqICAgICBuZWVkIHRvIGhhdmUgcmVtYWluZWQgaW4gdGhlIHN5c3RlbSBpbnRlcnJ1cHQgZGlzYWJsZWQgc3RhdGUuCisqICAgICBXZSBzaG91bGQgYmUgbGVmdCBpbiB0aGUgc2FtZSBzdGF0ZSB0aGF0IHdlJ3JlIGluIGZvbGxvd2luZworKiAgICAgZHJpdmVyIGluaXRpYWxpemF0aW9uLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlciwgTUFZIEJFIE5VTEwhIGZvciBhIGRyaXZlciBsb2NhbAorKgkJCWNhbGwuCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCwgY29tbW9ubHkgd2xhbmN0bCwgYnV0IG1pZ2h0IGJlIHJtbW9kL3BjaV9jbG9zZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfcmVzZXQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludCAJCQlyZXN1bHQgPSAwOworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfZG90MTFyZXFfcmVzZXRfdAkqbXNnID0gbXNncDsKKwlEQkZFTlRFUjsKKworCS8qCisJICogVGhpcyBpcyBzdXBwb3J0ZWQgb24gYm90aCBBUCBhbmQgU1RBIGFuZCBpdCdzIG5vdCBhbGxvd2VkCisJICogdG8gZmFpbC4KKwkgKi8KKwlpZiAoIG1zZ3AgKSB7CisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCVdMQU5fTE9HX0lORk8oImRvdDExcmVxX3Jlc2V0OiB0aGUgbWFjYWRkcmVzcyBhbmQgIgorCQkJInNldGRlZmF1bHRtaWIgYXJndW1lbnRzIGFyZSBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuXG4iKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGdvdCB0aGlzIGZhciwgdGhlIE1TRCBtdXN0IGJlIGluIHRoZSBNU0RSVU5OSU5HIHN0YXRlCisJICogdGhlcmVmb3JlLCB3ZSBtdXN0IHN0b3AgYW5kIHRoZW4gcmVzdGFydCB0aGUgaHcvTUFDIGNvbWJvLgorCSAqLworCWhmYTM4NHhfZHJ2cl9zdG9wKGh3KTsKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc3RhcnQoaHcpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlXTEFOX0xPR19FUlJPUigiZG90MTFyZXFfcmVzZXQ6IEluaXRpYWxpemUgY29tbWFuZCBmYWlsZWQsIgorCQkJCSIgYmFkIHRoaW5ncyB3aWxsIGhhcHBlbiBmcm9tIGhlcmUuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9zdGFydAorKgorKiBTdGFydCBhIEJTUy4gIEFueSBzdGF0aW9uIGNhbiBkbyB0aGlzIGZvciBJQlNTLCBvbmx5IEFQIGZvciBFU1MuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9zdGFydCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50IAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19kb3QxMXJlcV9zdGFydF90CSptc2cgPSBtc2dwOworCisJcDgwMjExcHN0cmRfdAkJKnBzdHI7CisJVUlOVDgJCQlieXRlYnVmWzgwXTsKKwloZmEzODR4X2J5dGVzdHJfdAkqcDJieXRlc3RyID0gKGhmYTM4NHhfYnl0ZXN0cl90KilieXRlYnVmOworCWhmYTM4NHhfUENGSW5mb19kYXRhX3QJKnBjZmluZm8gPSAoaGZhMzg0eF9QQ0ZJbmZvX2RhdGFfdCopYnl0ZWJ1ZjsKKwlVSU5UMTYJCQl3b3JkOworCURCRkVOVEVSOworCisJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9OT05FOworCisJLyogU2V0IHRoZSBTU0lEICovCisJbWVtY3B5KCZ3bGFuZGV2LT5zc2lkLCAmbXNnLT5zc2lkLmRhdGEsIHNpemVvZihtc2ctPnNzaWQuZGF0YSkpOworCisJaWYgKCFody0+YXApIHsKKwkJLyoqKiBBREhPQyBJQlNTICoqKi8KKwkJLyogc2VlIGlmIGN1cnJlbnQgZi93IGlzIGxlc3MgdGhhbiA4YzMgKi8KKwkJaWYgKEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTihody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorCQkJCQkgICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsCisJCQkJCSAgICAgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KSA8CisJCSAgICBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oMCw4LDMpKSB7CisJCQkvKiBBZC1Ib2Mgbm90IHF1aXRlIHN1cHBvcnRlZCBvbiBQcmlzbTIgKi8KKwkJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQkJZ290byBkb25lOworCQl9CisKKyAgCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJCS8qKiogU1RBVElPTiAqKiovCisJCS8qIFNldCB0aGUgUkVRVUlSRUQgY29uZmlnIGl0ZW1zICovCisJCS8qIFNTSUQgKi8KKwkJcHN0ciA9IChwODAyMTFwc3RyZF90KikmKG1zZy0+c3NpZC5kYXRhKTsKKwkJcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIocDJieXRlc3RyLCBwc3RyKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORk9XTlNTSUQsCisJCQkJYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GT1dOU1NJRF9MRU4pOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IENuZk93blNTSURcbiIpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lELAorCQkJCWJ5dGVidWYsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTik7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQ25mRGVzaXJlZFNTSURcbiIpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBic3N0eXBlIC0gd2UgdXNlIHRoZSBkZWZhdWx0IGluIHRoZSBhcCBmaXJtd2FyZSAqLworCQkvKiBJQlNTIHBvcnQgKi8KKwkJaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwgMCk7CisKKwkJLyogYmVhY29uIHBlcmlvZCAqLworCQl3b3JkID0gbXNnLT5iZWFjb25wZXJpb2QuZGF0YTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZBUEJDTklOVCwgd29yZCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgYmVhY29uIHBlcmlvZD0lZC5cbiIsIHdvcmQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBkc2NoYW5uZWwgKi8KKwkJd29yZCA9IG1zZy0+ZHNjaGFubmVsLmRhdGE7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTCwgd29yZCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgY2hhbm5lbD0lZC5cbiIsIHdvcmQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwkJLyogQmFzaWMgcmF0ZXMgKi8KKwkJd29yZCA9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUxLmRhdGEpOworCQlpZiAoIG1zZy0+YmFzaWNyYXRlMi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlMi5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlMy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlMy5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlNC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlNC5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlNS5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlNi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlNi5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlNy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlNy5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+YmFzaWNyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlOC5kYXRhKTsKKwkJfQorCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkJBU0lDUkFURVMsIHdvcmQpOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGJhc2ljcmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJLyogT3BlcmF0aW9uYWwgcmF0ZXMgKHN1cHByYXRlcyBhbmQgdHhyYXRlY29udHJvbCkgKi8KKwkJd29yZCA9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUxLmRhdGEpOworCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlMi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlMi5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlMy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlMy5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNC5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNS5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNi5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlNy5kYXRhKTsKKwkJfQorCQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQkJd29yZCB8PSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+b3BlcmF0aW9uYWxyYXRlOC5kYXRhKTsKKwkJfQorCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlNVUFBSQVRFUywgd29yZCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgc3VwcHJhdGVzPSVkLlxuIiwgd29yZCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisgCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX1RYUkFURUNOVEwsIHdvcmQpOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHR4cmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJLyogU2V0IHRoZSBtYWNtb2RlIHNvIHRoZSBmcmFtZSBzZXR1cCBjb2RlIGtub3dzIHdoYXQgdG8gZG8gKi8KKwkJaWYgKCBtc2ctPmJzc3R5cGUuZGF0YSA9PSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQgKSB7CisJCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX0lCU1NfU1RBOworCQkJLyogbGV0cyBleHRlbmQgdGhlIGRhdGEgbGVuZ3RoIGEgYml0ICovCisJCQloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORk1BWERBVEFMRU4sIDIzMDQpOworCQl9CisKKwkJLyogRW5hYmxlIHRoZSBQb3J0ICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9lbmFibGUoaHcsIDApOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJFbmFibGUgbWFjcG9ydCBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKKwkJZ290byBkb25lOworCX0KKworCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKwkvKiBWYWxpZGF0ZSB0aGUgY29tbWFuZCwgaWYgQlNTdHlwZT1pbmZyYSBpcyB0aGUgdGVydGlhcnkgbG9hZGVkPyAqLworCWlmICggbXNnLT5ic3N0eXBlLmRhdGEgPT0gUDgwMjExRU5VTV9ic3N0eXBlX2luZGVwZW5kZW50ICkgeworCQlXTEFOX0xPR19FUlJPUigiQVAgZHJpdmVyIGNhbm5vdCBjcmVhdGUgSUJTUy5cbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9IGVsc2UgaWYgKCBody0+Y2FwX3N1cF9zdGEuaWQgIT0gNSkgeworCQlXTEFOX0xPR19FUlJPUigiQVAgZHJpdmVyIGZhaWxlZCB0byBkZXRlY3QgQVAgZmlybXdhcmUuXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogU2V0IHRoZSBSRVFVSVJFRCBjb25maWcgaXRlbXMgKi8KKwkvKiBTU0lEICovCisJcHN0ciA9IChwODAyMTFwc3RyZF90KikmKG1zZy0+c3NpZC5kYXRhKTsKKwlwcmlzbTJtZ210X3BzdHIyYnl0ZXN0cihwMmJ5dGVzdHIsIHBzdHIpOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LCBIRkEzODR4X1JJRF9DTkZPV05TU0lELAorCQkJCWJ5dGVidWYsIEhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgU1NJRCwgcmVzdWx0PTB4JTA0eFxuIiwgcmVzdWx0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogYnNzdHlwZSAtIHdlIHVzZSB0aGUgZGVmYXVsdCBpbiB0aGUgYXAgZmlybXdhcmUgKi8KKworCS8qIGJlYWNvbiBwZXJpb2QgKi8KKwl3b3JkID0gbXNnLT5iZWFjb25wZXJpb2QuZGF0YTsKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkFQQkNOSU5ULCB3b3JkKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgYmVhY29uIHBlcmlvZD0lZC5cbiIsIHdvcmQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBkc2NoYW5uZWwgKi8KKwl3b3JkID0gbXNnLT5kc2NoYW5uZWwuZGF0YTsKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORk9XTkNIQU5ORUwsIHdvcmQpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBjaGFubmVsPSVkLlxuIiwgd29yZCk7CisJCWdvdG8gZmFpbGVkOworCX0KKwkvKiBCYXNpYyByYXRlcyAqLworCXdvcmQgPSBwODAyMTFyYXRlX3RvX3AyYml0KG1zZy0+YmFzaWNyYXRlMS5kYXRhKTsKKwlpZiAoIG1zZy0+YmFzaWNyYXRlMi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUyLmRhdGEpOworCX0KKwlpZiAoIG1zZy0+YmFzaWNyYXRlMy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUzLmRhdGEpOworCX0KKwlpZiAoIG1zZy0+YmFzaWNyYXRlNC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU0LmRhdGEpOworCX0KKwlpZiAoIG1zZy0+YmFzaWNyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU1LmRhdGEpOworCX0KKwlpZiAoIG1zZy0+YmFzaWNyYXRlNi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU2LmRhdGEpOworCX0KKwlpZiAoIG1zZy0+YmFzaWNyYXRlNy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU3LmRhdGEpOworCX0KKwlpZiAoIG1zZy0+YmFzaWNyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU4LmRhdGEpOworCX0KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkJBU0lDUkFURVMsIHdvcmQpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBiYXNpY3JhdGVzPSVkLlxuIiwgd29yZCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIE9wZXJhdGlvbmFsIHJhdGVzIChzdXBwcmF0ZXMgYW5kIHR4cmF0ZWNvbnRyb2wpICovCisJd29yZCA9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUxLmRhdGEpOworCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGUyLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTIuZGF0YSk7CisJfQorCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGUzLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTMuZGF0YSk7CisJfQorCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU0LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTQuZGF0YSk7CisJfQorCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU1LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTUuZGF0YSk7CisJfQorCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU2LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTYuZGF0YSk7CisJfQorCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU3LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTcuZGF0YSk7CisJfQorCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGU4LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCXdvcmQgfD0gcDgwMjExcmF0ZV90b19wMmJpdChtc2ctPm9wZXJhdGlvbmFscmF0ZTguZGF0YSk7CisJfQorCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GU1VQUFJBVEVTLCB3b3JkKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgc3VwcHJhdGVzPSVkLlxuIiwgd29yZCk7CisJCWdvdG8gZmFpbGVkOworCX0KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX1RYUkFURUNOVEwwLCB3b3JkKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdHhyYXRlcz0lZC5cbiIsIHdvcmQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBpYnNzYXRpbXdpbmRvdyAqLworCWlmIChtc2ctPmlic3NhdGltd2luZG93LnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2spIHsKKwkJV0xBTl9MT0dfSU5GTygicHJpc20ybWdtdF9zdGFydDogYXRpbXdpbmRvdyBub3QgdXNlZCBpbiAiCisJCQkgICAgICAgIkluZnJhc3RydWN0dXJlIG1vZGUsIGlnbm9yZWQuXG4iKTsKKwl9CisKKwkvKiBEVElNIHBlcmlvZCAqLworCXdvcmQgPSBtc2ctPmR0aW1wZXJpb2QuZGF0YTsKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORk9XTkRUSU1QRVIsIHdvcmQpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBkdGltIHBlcmlvZD0lZC5cbiIsIHdvcmQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBwcm9iZWRlbGF5ICovCisJaWYgKG1zZy0+cHJvYmVkZWxheS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSB7CisJCVdMQU5fTE9HX0lORk8oInByaXNtMm1nbXRfc3RhcnQ6IHByb2JlZGVsYXkgbm90ICIKKwkJCSAgICAgICAic3VwcG9ydGVkIGluIHByaXNtMiwgaWdub3JlZC5cbiIpOworCX0KKworCS8qIGNmcG9sbGFibGUsIGNmcG9sbHJlcSwgY2ZwcGVyaW9kLCBjZnBtYXhkdXJhdGlvbiAqLworCWlmIChtc2ctPmNmcG9sbGFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUgJiYKKwkgICAgbXNnLT5jZnBvbGxyZXEuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJjZnBvbGxhYmxlPWNmcG9sbHJlcT10cnVlIGlzIGlsbGVnYWwuXG4iKTsKKwkJcmVzdWx0ID0gLTE7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIHJlYWQgdGhlIFBDRkluZm8gYW5kIHVwZGF0ZSAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywKKwkJCQkJcGNmaW5mbywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTik7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0lORk8oInByaXNtMm1nbXRfc3RhcnQ6IHJlYWQocGNmaW5mbykgZmFpbGVkLCAiCisJCQkJImFzc3VtZSBpdCdzICIKKwkJCQkibm90IHN1cHBvcnRlZCwgcGNmIHNldHRpbmdzIGlnbm9yZWQuXG4iKTsKKwkJZ290byBwY2Zfc2tpcDsKKwl9CisJaWYgKChtc2ctPmNmcG9sbGFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlICYmCisJICAgICBtc2ctPmNmcG9sbHJlcS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpICkgeworCSAgICAJcGNmaW5mby0+TWVkaXVtT2NjdXBhbmN5TGltaXQgPSAwOworCQlwY2ZpbmZvLT5DRlBQZXJpb2QgPSAwOworCQlwY2ZpbmZvLT5DRlBNYXhEdXJhdGlvbiA9IDA7CisJCXBjZmluZm8tPkNGUEZsYWdzICY9IGhvc3QyaGZhMzg0eF8xNigoVUlOVDE2KX5CSVQwKTsKKworCQlpZiAoIG1zZy0+Y2ZwcGVyaW9kLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgfHwKKwkJICAgICBtc2ctPmNmcG1heGR1cmF0aW9uLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJCSJTZXR0aW5nIGNmcHBlcmlvZCBvciBjZnBtYXhkdXJhdGlvbiB3aGVuICIKKwkJCQkiY2Zwb2xsYWJsZSBhbmQgY2ZyZXEgYXJlIGZhbHNlIGlzIHBvaW50bGVzcy5cbiIpOworCQl9CisJfQorCWlmICgobXNnLT5jZnBvbGxhYmxlLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlIHx8CisJICAgICBtc2ctPmNmcG9sbHJlcS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkgKSB7CisJCWlmICggbXNnLT5jZnBvbGxhYmxlLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSB7CisJCQlwY2ZpbmZvLT5DRlBGbGFncyB8PSBob3N0MmhmYTM4NHhfMTYoKFVJTlQxNilCSVQwKTsKKwkJfQorCisJCWlmICggbXNnLT5jZnBwZXJpb2Quc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgeworCQkJcGNmaW5mby0+Q0ZQUGVyaW9kID0gbXNnLT5jZnBwZXJpb2QuZGF0YTsKKwkJCXBjZmluZm8tPkNGUFBlcmlvZCA9IGhvc3QyaGZhMzg0eF8xNihwY2ZpbmZvLT5DRlBQZXJpb2QpOworCQl9CisKKwkJaWYgKCBtc2ctPmNmcG1heGR1cmF0aW9uLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2spIHsKKwkJCXBjZmluZm8tPkNGUE1heER1cmF0aW9uID0gbXNnLT5jZnBtYXhkdXJhdGlvbi5kYXRhOworCQkJcGNmaW5mby0+Q0ZQTWF4RHVyYXRpb24gPSBob3N0MmhmYTM4NHhfMTYocGNmaW5mby0+Q0ZQTWF4RHVyYXRpb24pOworCQkJcGNmaW5mby0+TWVkaXVtT2NjdXBhbmN5TGltaXQgPSBwY2ZpbmZvLT5DRlBNYXhEdXJhdGlvbjsKKwkJfQorCX0KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk8sCisJCQkJCXBjZmluZm8sIEhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4pOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigid3JpdGUocGNmaW5mbykgZmFpbGVkLlxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworcGNmX3NraXA6CisJLyogU2V0IHRoZSBtYWNtb2RlIHNvIHRoZSBmcmFtZSBzZXR1cCBjb2RlIGtub3dzIHdoYXQgdG8gZG8gKi8KKwlpZiAoIG1zZy0+YnNzdHlwZS5kYXRhID09IFA4MDIxMUVOVU1fYnNzdHlwZV9pbmZyYXN0cnVjdHVyZSApIHsKKwkJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9FU1NfQVA7CisJCS8qIGxldHMgZXh0ZW5kIHRoZSBkYXRhIGxlbmd0aCBhIGJpdCAqLworCQloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORk1BWERBVEFMRU4sIDIzMDQpOworCX0KKworCS8qIFNldCB0aGUgQlNTSUQgdG8gdGhlIHNhbWUgYXMgb3VyIE1BQyAqLworCW1lbWNweSggd2xhbmRldi0+YnNzaWQsIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsIFdMQU5fQlNTSURfTEVOKTsKKworCS8qIEVuYWJsZSB0aGUgUG9ydCAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9lbmFibGUoaHcsIDApOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRW5hYmxlIG1hY3BvcnQgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLCByZXN1bHQpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisJZ290byBkb25lOworZmFpbGVkOgorCVdMQU5fTE9HX0RFQlVHKDEsICJGYWlsZWQgdG8gc2V0IGEgY29uZmlnIG9wdGlvbiwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKworZG9uZToKKwlyZXN1bHQgPSAwOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2VuYWJsZQorKgorKiBTdGFydCBhIEJTUy4gIEFueSBzdGF0aW9uIGNhbiBkbyB0aGlzIGZvciBJQlNTLCBvbmx5IEFQIGZvciBFU1MuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9lbmFibGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWludAkJCXJlc3VsdCA9IDA7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9lbmFibGVfdAkqbXNnID0gbXNncDsKKwlEQkZFTlRFUjsKKworCWlmICghaHctPmFwKSB7CisKKwkJLyoqKiBTVEFUSU9OICoqKi8KKworCQkvKiBBZC1Ib2Mgbm90IHF1aXRlIHN1cHBvcnRlZCBvbiBQcmlzbTIgKi8KKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwkJZ290byBkb25lOworCX0KKworCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKwkvKiBJcyB0aGUgdGVydGlhcnkgbG9hZGVkPyAqLworCWlmICggaHctPmNhcF9zdXBfc3RhLmlkICE9IDUpIHsKKwkJV0xBTl9MT0dfRVJST1IoIkFQIGRyaXZlciBmYWlsZWQgdG8gZGV0ZWN0IEFQIGZpcm13YXJlLlxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIFNldCB0aGUgbWFjbW9kZSBzbyB0aGUgZnJhbWUgc2V0dXAgY29kZSBrbm93cyB3aGF0IHRvIGRvICovCisJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9FU1NfQVA7CisKKwkvKiBTZXQgdGhlIEJTU0lEIHRvIHRoZSBzYW1lIGFzIG91ciBNQUMgKi8KKwltZW1jcHkoIHdsYW5kZXYtPmJzc2lkLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBXTEFOX0JTU0lEX0xFTik7CisKKwkvKiBFbmFibGUgdGhlIFBvcnQgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZW5hYmxlKGh3LCAwKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkVuYWJsZSBtYWNwb3J0IGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworCWdvdG8gZG9uZTsKK2ZhaWxlZDoKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisKK2RvbmU6CisJcmVzdWx0ID0gMDsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9yZWFkcGRhCisqCisqIENvbGxlY3QgdGhlIFBEQSBkYXRhIGFuZCBwdXQgaXQgaW4gdGhlIG1lc3NhZ2UuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X3JlYWRwZGEod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfcDJyZXFfcmVhZHBkYV90CSptc2cgPSBtc2dwOworCWludAkJCQlyZXN1bHQ7CisJREJGRU5URVI7CisKKwkvKiBXZSBvbmx5IHN1cHBvcnQgY29sbGVjdGluZyB0aGUgUERBIHdoZW4gaW4gdGhlIEZXTE9BRAorCSAqIHN0YXRlLgorCSAqLworCWlmICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9GV0xPQUQpIHsKKwkJV0xBTl9MT0dfRVJST1IoCisJCQkiUERBIG1heSBvbmx5IGJlIHJlYWQgIgorCQkJImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJfSBlbHNlIHsKKwkJLyogIENhbGwgZHJ2cl9yZWFkcGRhKCksIGl0IGhhbmRsZXMgdGhlIGF1eHBvcnQgZW5hYmxlCisJCSAqICBhbmQgdmFsaWRhdGluZyB0aGUgcmV0dXJuZWQgUERBLgorCQkgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3JlYWRwZGEoCisJCQlodywKKwkJCW1zZy0+cGRhLmRhdGEsCisJCQlIRkEzODR4X1BEQV9MRU5fTUFYKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJImhmYTM4NHhfZHJ2cl9yZWFkcGRhKCkgZmFpbGVkLCAiCisJCQkJInJlc3VsdD0lZFxuIiwKKwkJCQlyZXN1bHQpOworCisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0KKwkJCQlQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCQlEQkZFWElUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbXNnLT5wZGEuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3JlYWRjaXMKKyoKKyogQ29sbGVjdCB0aGUgQ0lTIGRhdGEgYW5kIHB1dCBpdCBpbiB0aGUgbWVzc2FnZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfcmVhZGNpcyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaW50CQkJcmVzdWx0OworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfcDJyZXFfcmVhZGNpc190CSptc2cgPSBtc2dwOworCisJREJGRU5URVI7CisKKyAgICAgICAgbWVtc2V0KG1zZy0+Y2lzLmRhdGEsIDAsIHNpemVvZihtc2ctPmNpcy5kYXRhKSk7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DSVMsCisJCQkJCW1zZy0+Y2lzLmRhdGEsIEhGQTM4NHhfUklEX0NJU19MRU4pOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19JTkZPKCJwcmlzbTJtZ210X3JlYWRjaXM6IHJlYWQoY2lzKSBmYWlsZWQuXG4iKTsKKwkJbXNnLT5jaXMuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZTsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKworCQl9CisJZWxzZSB7CisJCW1zZy0+Y2lzLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJfQorCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2F1eHBvcnRfc3RhdGUKKyoKKyogRW5hYmxlcy9EaXNhYmxlcyB0aGUgY2FyZCdzIGF1eGlsaWFyeSBwb3J0LiAgU2hvdWxkIGJlIGNhbGxlZAorKiBiZWZvcmUgYW5kIGFmdGVyIGEgc2VxdWVuY2Ugb2YgYXV4cG9ydF9yZWFkKCkvYXV4cG9ydF93cml0ZSgpCisqIGNhbGxzLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9hdXhwb3J0X3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlwODAyMTFtc2dfcDJyZXFfYXV4cG9ydF9zdGF0ZV90CSptc2cgPSBtc2dwOworCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlEQkZFTlRFUjsKKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJaWYgKG1zZy0+ZW5hYmxlLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSB7CisJCWlmICggaGZhMzg0eF9jbWRfYXV4X2VuYWJsZShodywgMCkgKSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQl9IGVsc2UgeworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJfQorCX0gZWxzZSB7CisJCWhmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGh3KTsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwl9CisKKyNlbHNlIC8qICFVU0IgKi8KKwlEQkZFTlRFUjsKKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKworI2VuZGlmIC8qIFdMQU5fSE9TVElGICE9IFdMQU5fVVNCICovCisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2F1eHBvcnRfcmVhZAorKgorKiBDb3BpZXMgZGF0YSBmcm9tIHRoZSBjYXJkIHVzaW5nIHRoZSBhdXhwb3J0LiAgVGhlIGF1eHBvcnQgbXVzdAorKiBoYXZlIHByZXZpb3VzbHkgYmVlbiBlbmFibGVkLiAgTm90ZTogdGhpcyBpcyBub3QgdGhlIHdheSB0bworKiBkbyBkb3dubG9hZHMsIHNlZSB0aGUgW3JhbXxmbGFzaF1kbCBmdW5jdGlvbnMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2F1eHBvcnRfcmVhZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfcDJyZXFfYXV4cG9ydF9yZWFkX3QJKm1zZyA9IG1zZ3A7CisJVUlOVDMyCQkJYWRkcjsKKwlVSU5UMzIJCQlsZW47CisJVUlOVDgqCQkJYnVmOworCVVJTlQzMgkJCW1heGxlbiA9IHNpemVvZihtc2ctPmRhdGEuZGF0YSk7CisJREJGRU5URVI7CisKKwlpZiAoIGh3LT5hdXhlbiApIHsKKwkJYWRkciA9IG1zZy0+YWRkci5kYXRhOworCQlsZW4gPSBtc2ctPmxlbi5kYXRhOworCQlidWYgPSBtc2ctPmRhdGEuZGF0YTsKKwkJaWYgKCBsZW4gPD0gbWF4bGVuICkgeyAgLyogbWF4IHJlYWQvd3JpdGUgc2l6ZSAqLworCQkJaGZhMzg0eF9jb3B5X2Zyb21fYXV4KGh3LCBhZGRyLCBIRkEzODR4X0FVWF9DVExfRVhURFMsIGJ1ZiwgbGVuKTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCX0gZWxzZSB7CisJCQlXTEFOX0xPR19ERUJVRygxLCJBdHRlbXB0IHRvIHJlYWQgPiBtYXhsZW4gZnJvbSBhdXhwb3J0LlxuIik7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9yZWZ1c2VkOworCQl9CisKKwl9IGVsc2UgeworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9yZWZ1c2VkOworCX0KKwltc2ctPmRhdGEuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKwlEQkZFWElUOworCXJldHVybiAwOworI2Vsc2UKKwlEQkZFTlRFUjsKKworCVdMQU5fTE9HX0VSUk9SKCJwcmlzbTJtZ210X2F1eHBvcnRfcmVhZDogTm90IHN1cHBvcnRlZCBvbiBVU0IuXG4iKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9hdXhwb3J0X3dyaXRlCisqCisqIENvcGllcyBkYXRhIHRvIHRoZSBjYXJkIHVzaW5nIHRoZSBhdXhwb3J0LiAgVGhlIGF1eHBvcnQgbXVzdAorKiBoYXZlIHByZXZpb3VzbHkgYmVlbiBlbmFibGVkLiAgTm90ZTogdGhpcyBpcyBub3QgdGhlIHdheSB0bworKiBkbyBkb3dubG9hZHMsIHNlZSB0aGUgW3JhbXxmbGFzaF1kbCBmdW5jdGlvbnMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2F1eHBvcnRfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX3AycmVxX2F1eHBvcnRfd3JpdGVfdAkqbXNnID0gbXNncDsKKwlVSU5UMzIJCQlhZGRyOworCVVJTlQzMgkJCWxlbjsKKwlVSU5UOCoJCQlidWY7CisJVUlOVDMyCQkJbWF4bGVuID0gc2l6ZW9mKG1zZy0+ZGF0YS5kYXRhKTsKKwlEQkZFTlRFUjsKKworCWlmICggaHctPmF1eGVuICkgeworCQlhZGRyID0gbXNnLT5hZGRyLmRhdGE7CisJCWxlbiA9IG1zZy0+bGVuLmRhdGE7CisJCWJ1ZiA9IG1zZy0+ZGF0YS5kYXRhOworCQlpZiAoIGxlbiA8PSBtYXhsZW4gKSB7ICAvKiBtYXggcmVhZC93cml0ZSBzaXplICovCisJCQloZmEzODR4X2NvcHlfdG9fYXV4KGh3LCBhZGRyLCBIRkEzODR4X0FVWF9DVExfRVhURFMsIGJ1ZiwgbGVuKTsKKwkJfSBlbHNlIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsIkF0dGVtcHQgdG8gd3JpdGUgPiBtYXhsZW4gZnJvbSBhdXhwb3J0LlxuIik7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9yZWZ1c2VkOworCQl9CisKKwl9IGVsc2UgeworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9yZWZ1c2VkOworCX0KKwltc2ctPmRhdGEuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKwlEQkZFWElUOworCXJldHVybiAwOworI2Vsc2UKKwlEQkZFTlRFUjsKKwlXTEFOX0xPR19FUlJPUigicHJpc20ybWdtdF9hdXhwb3J0X3JlYWQ6IE5vdCBzdXBwb3J0ZWQgb24gVVNCLlxuIik7CisJREJGRVhJVDsKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9sb3dfbGV2ZWwKKyoKKyogUHV0cyB0aGUgY2FyZCBpbnRvIHRoZSBkZXNpcmVkIHRlc3QgbW9kZS4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICB3bGFuZGV2ICAgICAgICAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqICAgICAgIG1zZ3AgICAgICAgICAgICBwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgICAgIHN1Y2Nlc3MgYW5kIGRvbmUKKyogICAgICAgPDAgICAgICBzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyogICAgICAgPjAgICAgICBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqICAgICAgIHByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfbG93X2xldmVsKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisgICAgICAgIHA4MDIxMW1zZ19wMnJlcV9sb3dfbGV2ZWxfdCAgICAgKm1zZyA9IG1zZ3A7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworICAgICAgICBEQkZFTlRFUjsKKworICAgICAgICBtc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisgICAgICAgIC8qIGNhbGwgc29tZSByb3V0aW5lIHRvIGV4ZWN1dGUgdGhlIHRlc3QgY29tbWFuZCAqLworCWNtZC5jbWQgPSAoVUlOVDE2KSBtc2ctPmNvbW1hbmQuZGF0YTsKKwljbWQucGFybTAgPSAoVUlOVDE2KSBtc2ctPnBhcmFtMC5kYXRhOworCWNtZC5wYXJtMSA9IChVSU5UMTYpIG1zZy0+cGFyYW0xLmRhdGE7CisJY21kLnBhcm0yID0gKFVJTlQxNikgbXNnLT5wYXJhbTIuZGF0YTsKKworICAgICAgICBoZmEzODR4X2RydnJfbG93X2xldmVsKGh3LCZjbWQpOworCisgICAgICAgIG1zZy0+cmVzcDAuZGF0YSA9IChVSU5UMzIpIGNtZC5yZXN1bHQucmVzcDA7CisgICAgICAgIG1zZy0+cmVzcDEuZGF0YSA9IChVSU5UMzIpIGNtZC5yZXN1bHQucmVzcDE7CisgICAgICAgIG1zZy0+cmVzcDIuZGF0YSA9IChVSU5UMzIpIGNtZC5yZXN1bHQucmVzcDI7CisKKyAgICAgICAgbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworICAgICAgICBEQkZFWElUOworICAgICAgICByZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfdGVzdF9jb21tYW5kCisqCisqIFB1dHMgdGhlIGNhcmQgaW50byB0aGUgZGVzaXJlZCB0ZXN0IG1vZGUuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X3Rlc3RfY29tbWFuZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV90ZXN0X2NvbW1hbmRfdAkqbXNnID0gbXNncDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKyAgICAgICAgREJGRU5URVI7CisKKwljbWQuY21kID0gKChVSU5UMTYpIG1zZy0+dGVzdGNvZGUuZGF0YSkgPDwgOCB8IDB4Mzg7CisJY21kLnBhcm0wID0gKFVJTlQxNikgbXNnLT50ZXN0cGFyYW0uZGF0YTsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKyAgICAgICAgLyogY2FsbCBzb21lIHJvdXRpbmUgdG8gZXhlY3V0ZSB0aGUgdGVzdCBjb21tYW5kICovCisKKyAgICAgICAgaGZhMzg0eF9kcnZyX2xvd19sZXZlbChodywmY21kKTsKKworICAgICAgICBtc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisgICAgICAgIG1zZy0+c3RhdHVzLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKyAgICAgICAgbXNnLT5zdGF0dXMuZGF0YSA9IGNtZC5yZXN1bHQuc3RhdHVzOworICAgICAgICBtc2ctPnJlc3AwLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKyAgICAgICAgbXNnLT5yZXNwMC5kYXRhID0gY21kLnJlc3VsdC5yZXNwMDsKKyAgICAgICAgbXNnLT5yZXNwMS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisgICAgICAgIG1zZy0+cmVzcDEuZGF0YSA9IGNtZC5yZXN1bHQucmVzcDE7CisgICAgICAgIG1zZy0+cmVzcDIuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworICAgICAgICBtc2ctPnJlc3AyLmRhdGEgPSBjbWQucmVzdWx0LnJlc3AyOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9tbWlfcmVhZAorKgorKiBSZWFkIGZyb20gb25lIG9mIHRoZSBNTUkgcmVnaXN0ZXJzLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9tbWlfcmVhZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9tbWlfcmVhZF90CSptc2cgPSBtc2dwOworCVVJTlQzMiByZXNwID0gMDsKKworCURCRkVOVEVSOworCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCS8qIGNhbGwgc29tZSByb3V0aW5lIHRvIGV4ZWN1dGUgdGhlIHRlc3QgY29tbWFuZCAqLworCisJaGZhMzg0eF9kcnZyX21taV9yZWFkKGh3LCBtc2ctPmFkZHIuZGF0YSwgJnJlc3ApOworCisJLyogSSdtIG5vdCBzdXJlIGlmIHRoaXMgaXMgImFyY2hpdGVjdHVyYWxseSIgY29ycmVjdCwgYnV0IGl0CisgICAgICAgICAgIGlzIGV4cGVkaWVudC4gKi8KKworCW1zZy0+dmFsdWUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCW1zZy0+dmFsdWUuZGF0YSA9IHJlc3A7CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X21taV93cml0ZQorKgorKiBXcml0ZSBhIGRhdGEgdmFsdWUgdG8gb25lIG9mIHRoZSBNTUkgcmVnaXN0ZXJzLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9tbWlfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfcDJyZXFfbW1pX3dyaXRlX3QJKm1zZyA9IG1zZ3A7CisJREJGRU5URVI7CisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJLyogY2FsbCBzb21lIHJvdXRpbmUgdG8gZXhlY3V0ZSB0aGUgdGVzdCBjb21tYW5kICovCisKKwloZmEzODR4X2RydnJfbW1pX3dyaXRlKGh3LCBtc2ctPmFkZHIuZGF0YSwgbXNnLT5kYXRhLmRhdGEpOworCisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3JhbWRsX3N0YXRlCisqCisqIEVzdGFibGlzaGVzIHRoZSBiZWdpbm5pbmcvZW5kIG9mIGEgY2FyZCBSQU0gZG93bmxvYWQgc2Vzc2lvbi4KKyoKKyogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgcmFtZGxfd3JpdGUoKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZAorKiBvbmUgb3IgbW9yZSB0aW1lcyBiZXR3ZWVuIHRoZSAnZW5hYmxlJyBhbmQgJ2Rpc2FibGUnIGNhbGxzIHRvCisqIHRoaXMgZnVuY3Rpb24uCisqCisqIE5vdGU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hlbiBhIG1hYyBjb21tIHBvcnQKKyogICAgICAgaXMgYWN0aXZlLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9yYW1kbF9zdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZV90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJyYW1kbF9zdGF0ZSgpOiBtYXkgb25seSBiZSBjYWxsZWQgIgorCQkJImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCURCRkVYSVQ7CisJCXJldHVybiAwOworCX0KKworCS8qCisJKiogTm90ZTogSW50ZXJydXB0cyBhcmUgbG9ja2VkIG91dCBpZiB0aGlzIGlzIGFuIEFQIGFuZCBhcmUgTk9UCisJKiogbG9ja2VkIG91dCBpZiB0aGlzIGlzIGEgc3RhdGlvbi4KKwkqLworCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwlpZiAgKCBtc2ctPmVuYWJsZS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSApIHsKKwkJaWYgKCBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGh3LCBtc2ctPmV4ZWFkZHIuZGF0YSkgKSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQl9IGVsc2UgeworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJfQorCX0gZWxzZSB7CisJCWhmYTM4NHhfZHJ2cl9yYW1kbF9kaXNhYmxlKGh3KTsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3JhbWRsX3dyaXRlCisqCisqIFdyaXRlcyBhIGJ1ZmZlciB0byB0aGUgY2FyZCBSQU0gdXNpbmcgdGhlIGRvd25sb2FkIHN0YXRlLiAgVGhpcworKiBpcyBmb3Igd3JpdGluZyBjb2RlIHRvIGNhcmQgUkFNLiAgVG8ganVzdCByZWFkIG9yIHdyaXRlIHJhdyBkYXRhCisqIHVzZSB0aGUgYXV4IGZ1bmN0aW9ucy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfcmFtZGxfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGVfdAkqbXNnID0gbXNncDsKKwlVSU5UMzIJCQlhZGRyOworCVVJTlQzMgkJCWxlbjsKKwlVSU5UOAkJCSpidWY7CisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfRldMT0FEKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJInJhbWRsX3dyaXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCisJCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJREJGRVhJVDsKKwkJcmV0dXJuIDA7CisJfQorCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkvKiBmaXJzdCB2YWxpZGF0ZSB0aGUgbGVuZ3RoICovCisJaWYgICggbXNnLT5sZW4uZGF0YSA+IHNpemVvZihtc2ctPmRhdGEuZGF0YSkgKSB7CisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQlyZXR1cm4gMDsKKwl9CisJLyogY2FsbCB0aGUgaGZhMzg0eCBmdW5jdGlvbiB0byBkbyB0aGUgd3JpdGUgKi8KKwlhZGRyID0gbXNnLT5hZGRyLmRhdGE7CisJbGVuID0gbXNnLT5sZW4uZGF0YTsKKwlidWYgPSBtc2ctPmRhdGEuZGF0YTsKKwlpZiAoIGhmYTM4NHhfZHJ2cl9yYW1kbF93cml0ZShodywgYWRkciwgYnVmLCBsZW4pICkgeworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9yZWZ1c2VkOworCisJfQorCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2ZsYXNoZGxfc3RhdGUKKyoKKyogRXN0YWJsaXNoZXMgdGhlIGJlZ2lubmluZy9lbmQgb2YgYSBjYXJkIEZsYXNoIGRvd25sb2FkIHNlc3Npb24uCisqCisqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZsYXNoZGxfd3JpdGUoKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZAorKiBvbmUgb3IgbW9yZSB0aW1lcyBiZXR3ZWVuIHRoZSAnZW5hYmxlJyBhbmQgJ2Rpc2FibGUnIGNhbGxzIHRvCisqIHRoaXMgZnVuY3Rpb24uCisqCisqIE5vdGU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hlbiBhIG1hYyBjb21tIHBvcnQKKyogICAgICAgaXMgYWN0aXZlLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9mbGFzaGRsX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZV90CSptc2cgPSBtc2dwOworCURCRkVOVEVSOworCisJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgeworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJmbGFzaGRsX3N0YXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCisJCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJREJGRVhJVDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkqKiBOb3RlOiBJbnRlcnJ1cHRzIGFyZSBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYW4gQVAgYW5kIGFyZSBOT1QKKwkqKiBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYSBzdGF0aW9uLgorCSovCisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCWlmICAoIG1zZy0+ZW5hYmxlLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlICkgeworCQlpZiAoIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZShodykgKSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQl9IGVsc2UgeworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJfQorCX0gZWxzZSB7CisJCWhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaHcpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQkvKiBOT1RFOiBBdCB0aGlzIHBvaW50LCB0aGUgTUFDIGlzIGluIHRoZSBwb3N0LXJlc2V0CisJCSAqIHN0YXRlIGFuZCB0aGUgZHJpdmVyIGlzIGluIHRoZSBmd2xvYWQgc3RhdGUuCisJCSAqIFdlIG5lZWQgdG8gZ2V0IHRoZSBNQUMgYmFjayBpbnRvIHRoZSBmd2xvYWQKKwkJICogc3RhdGUuICBUbyBkbyB0aGlzLCB3ZSBzZXQgdGhlIG5zZHN0YXRlIHRvIEhXUFJFU0VOVAorCQkgKiBhbmQgdGhlbiBjYWxsIHRoZSBpZnN0YXRlIGZ1bmN0aW9uIHRvIHJlZG8gZXZlcnl0aGluZworCQkgKiB0aGF0IGdvdCB1cyBpbnRvIHRoZSBmd2xvYWQgc3RhdGUuCisJCSAqLworCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKKwkJcmVzdWx0ID0gcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2Z3bG9hZCk7CisJCWlmIChyZXN1bHQgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJwcmlzbTJzdGFfaWZzdGF0ZShmd2xvYWQpIGZhaWxlZCwiCisJCQkJIlA4MDIxMUVOVU1fcmVzdWx0Y29kZT0lZFxuIiwgcmVzdWx0KTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCXJlc3VsdCA9IC0xOworCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9mbGFzaGRsX3dyaXRlCisqCisqCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2ZsYXNoZGxfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV90CSptc2cgPSBtc2dwOworCVVJTlQzMgkJCWFkZHI7CisJVUlOVDMyCQkJbGVuOworCVVJTlQ4CQkJKmJ1ZjsKKwlEQkZFTlRFUjsKKworCWlmICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9GV0xPQUQpIHsKKwkJV0xBTl9MT0dfRVJST1IoCisJCQkiZmxhc2hkbF93cml0ZSgpOiBtYXkgb25seSBiZSBjYWxsZWQgIgorCQkJImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCURCRkVYSVQ7CisJCXJldHVybiAwOworCX0KKworCS8qCisJKiogTm90ZTogSW50ZXJydXB0cyBhcmUgbG9ja2VkIG91dCBpZiB0aGlzIGlzIGFuIEFQIGFuZCBhcmUgTk9UCisJKiogbG9ja2VkIG91dCBpZiB0aGlzIGlzIGEgc3RhdGlvbi4KKwkqLworCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkvKiBmaXJzdCB2YWxpZGF0ZSB0aGUgbGVuZ3RoICovCisJaWYgICggbXNnLT5sZW4uZGF0YSA+IHNpemVvZihtc2ctPmRhdGEuZGF0YSkgKSB7CisJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPQorCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKwkJcmV0dXJuIDA7CisJfQorCS8qIGNhbGwgdGhlIGhmYTM4NHggZnVuY3Rpb24gdG8gZG8gdGhlIHdyaXRlICovCisJYWRkciA9IG1zZy0+YWRkci5kYXRhOworCWxlbiA9IG1zZy0+bGVuLmRhdGE7CisJYnVmID0gbXNnLT5kYXRhLmRhdGE7CisJaWYgKCBoZmEzODR4X2RydnJfZmxhc2hkbF93cml0ZShodywgYWRkciwgYnVmLCBsZW4pICkgeworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9yZWZ1c2VkOworCisJfQorCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2R1bXBfc3RhdGUKKyoKKyogRHVtcHMgdGhlIGRyaXZlcidzIGFuZCBoYXJkd2FyZSdzIGN1cnJlbnQgc3RhdGUgdmlhIHRoZSBrZXJuZWwKKyogbG9nIGF0IEtFUk5fTk9USUNFIGxldmVsLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9kdW1wX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlwODAyMTFtc2dfcDJyZXFfZHVtcF9zdGF0ZV90CSptc2cgPSBtc2dwOworCWludAkJCQlyZXN1bHQgPSAwOworCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlVSU5UMTYJCQkJYXV4YnVmWzE1XTsKKwlEQkZFTlRFUjsKKworCVdMQU5fTE9HX05PVElDRSgicHJpc20yIGRyaXZlciBhbmQgaGFyZHdhcmUgc3RhdGU6XG4iKTsKKwlpZiAgKCAocmVzdWx0ID0gaGZhMzg0eF9jbWRfYXV4X2VuYWJsZShodywgMCkpICkgeworCQlXTEFOX0xPR19FUlJPUigiYXV4X2VuYWJsZSBmYWlsZWQsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCWhmYTM4NHhfY29weV9mcm9tX2F1eChodywKKwkJMHgwMWUyLAorCQlIRkEzODR4X0FVWF9DVExfRVhURFMsCisJCWF1eGJ1ZiwKKwkJc2l6ZW9mKGF1eGJ1ZikpOworCWhmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGh3KTsKKwlXTEFOX0xPR19OT1RJQ0UoIiAgY21hYzogRnJlZUJsb2Nrcz0lZFxuIiwgYXV4YnVmWzVdKTsKKwlXTEFOX0xPR19OT1RJQ0UoIiAgY21hYzogSW50RW49MHglMDJ4IEV2U3RhdD0weCUwMnhcbiIsCisJCWhmYTM4NHhfZ2V0cmVnKGh3LCBIRkEzODR4X0lOVEVOKSwKKwkJaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfRVZTVEFUKSk7CisKKwkjaWZkZWYgVVNFX0ZJRF9TVEFDSworCVdMQU5fTE9HX05PVElDRSgiICBkcnZyOiB0eGZpZF90b3A9JWQgc3RhY2tzaXplPSVkXG4iLAorCQlody0+dHhmaWRfdG9wLEhGQTM4NHhfRFJWUl9GSURTVEFDS0xFTl9NQVgpOworCSNlbHNlCisJV0xBTl9MT0dfTk9USUNFKCIgIGRydnI6IHR4ZmlkX2hlYWQ9JWQgdHhmaWRfdGFpbD0lZCB0eGZpZF9OPSVkXG4iLAorCQlody0+dHhmaWRfaGVhZCwgaHctPnR4ZmlkX3RhaWwsIGh3LT50eGZpZF9OKTsKKwkjZW5kaWYKKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworI2Vsc2UgLyogKFdMQU5fSE9TVElGID09IFdMQU5fVVNCKSAqLworCisJREJGRU5URVI7CisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJZ290byBmYWlsZWQ7CisKKyNlbmRpZiAvKiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpICovCisKK2ZhaWxlZDoKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2NoYW5uZWxfaW5mbworKgorKiBJc3N1ZXMgYSBDaGFubmVsSW5mb1JlcXVlc3QuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2NoYW5uZWxfaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCit7CisJcDgwMjExbXNnX3AycmVxX2NoYW5uZWxfaW5mb190CSptc2c9bXNncDsKKwloZmEzODR4X3QJCQkqaHcgPSB3bGFuZGV2LT5wcml2OworCWludAkJCQlyZXN1bHQsIGksIG49MDsKKwlVSU5UMTYJCQkJY2hhbm5lbF9tYXNrPTA7CisJaGZhMzg0eF9DaGFubmVsSW5mb1JlcXVlc3RfZGF0YV90CWNoaW5mb3JlcTsKKwkvLyB1bnNpZ25lZCBsb25nIAkJCW5vdzsKKworCURCRkVOVEVSOworCisJaWYgKCFody0+YXApIHsKKworCQkvKioqIFNUQVRJT04gKioqLworCisJCS8qIE5vdCBzdXBwb3J0ZWQgaW4gU1RBIGYvdyAqLworCQlQODAyMTFfU0VUX0lOVChtc2ctPnJlc3VsdGNvZGUsIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkKTsKKwkJZ290byBkb25lOworCX0KKworCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworI2RlZmluZSBDSElORk9fVElNRU9VVCAyCisKKwlQODAyMTFfU0VUX0lOVChtc2ctPnJlc3VsdGNvZGUsIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKTsKKworCS8qIHNldHRpbmcgZGVmYXVsdCB2YWx1ZSBmb3IgY2hhbm5lbGxpc3QgPSBhbGwgY2hhbm5lbHMgKi8KKwlpZiAoIW1zZy0+Y2hhbm5lbGxpc3QuZGF0YSkgeworCQlQODAyMTFfU0VUX0lOVChtc2ctPmNoYW5uZWxsaXN0LCAweDAwMDA3RkZFKTsKKwl9CisJLyogc2V0dGluZyBkZWZhdWx0IHZhbHVlIGZvciBjaGFubmVsZHdlbGx0aW1lID0gMTAwIG1zICovCisJaWYgKCFtc2ctPmNoYW5uZWxkd2VsbHRpbWUuZGF0YSkgeworCQlQODAyMTFfU0VUX0lOVChtc2ctPmNoYW5uZWxkd2VsbHRpbWUsIDEwMCk7CisJfQorCWNoYW5uZWxfbWFzayA9IChVSU5UMTYpIChtc2ctPmNoYW5uZWxsaXN0LmRhdGEgPj4gMSk7CisJZm9yIChpPTAsIG49MDsgaSA8IDE0OyBpKyspIHsKKwkJaWYgKGNoYW5uZWxfbWFzayAmICgxPDxpKSkgeworCQkJbisrOworCQl9CisJfQorCVA4MDIxMV9TRVRfSU5UKG1zZy0+bnVtY2hpbmZvLCBuKTsKKwljaGluZm9yZXEuY2hhbm5lbExpc3QgPSBob3N0MmhmYTM4NHhfMTYoY2hhbm5lbF9tYXNrKTsKKwljaGluZm9yZXEuY2hhbm5lbER3ZWxsVGltZSA9IGhvc3QyaGZhMzg0eF8xNihtc2ctPmNoYW5uZWxkd2VsbHRpbWUuZGF0YSk7CisKKwlhdG9taWNfc2V0KCZody0+Y2hhbm5lbF9pbmZvLmRvbmUsIDEpOworCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NIQU5ORUxJTkZPUkVRVUVTVCwKKwkJCQkJICZjaGluZm9yZXEsIEhGQTM4NHhfUklEX0NIQU5ORUxJTkZPUkVRVUVTVF9MRU4pOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKENIQU5ORUxJTkZPUkVRVUVTVCkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCisJCQkJcmVzdWx0KTsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwkJZ290byBkb25lOworCX0KKwkvKgorCW5vdyA9IGppZmZpZXM7CisJd2hpbGUgKGF0b21pY19yZWFkKCZody0+Y2hhbm5lbF9pbmZvLmRvbmUpICE9IDEpIHsKKwkJaWYgKChqaWZmaWVzIC0gbm93KSA+IENISU5GT19USU1FT1VUKkhaKSB7CisJCQlXTEFOX0xPR19OT1RJQ0UoIkNoYW5uZWxJbmZvIHJlc3VsdHMgbm90IHJlY2VpdmVkIGluICVkIHNlY29uZHMsIGFib3J0aW5nLlxuIiwKKwkJCQkJQ0hJTkZPX1RJTUVPVVQpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfdGltZW91dDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJc2NoZWR1bGVfdGltZW91dChIWi80KTsKKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJfQorCSovCisKK2RvbmU6CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9jaGFubmVsX2luZm9fcmVzdWx0cworKgorKiBSZXR1cm5zIHJlcXVpcmVkIENoYW5uZWxJbmZvIHJlc3VsdC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfY2hhbm5lbF9pbmZvX3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWhmYTM4NHhfdAkJCSpodyA9IHdsYW5kZXYtPnByaXY7CisKKwlwODAyMTFtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHNfdAkqbXNnPW1zZ3A7CisJaW50CQkJCXJlc3VsdD0wOworCWludAkJY2hhbm5lbDsKKworCURCRkVOVEVSOworCisJaWYgKCFody0+YXApIHsKKworCQkvKioqIFNUQVRJT04gKioqLworCisJCS8qIE5vdCBzdXBwb3J0ZWQgaW4gU1RBIGYvdyAqLworCQlQODAyMTFfU0VUX0lOVChtc2ctPnJlc3VsdGNvZGUsIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkKTsKKwkJZ290byBkb25lOworCX0KKworCS8qKiogQUNDRVNTIFBPSU5UICoqKi8KKworCXN3aXRjaCAoYXRvbWljX3JlYWQoJmh3LT5jaGFubmVsX2luZm8uZG9uZSkpIHsKKwljYXNlIDA6IG1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlOworCQlnb3RvIGRvbmU7CisJY2FzZSAxOiBtc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbmNvbXBsZXRlX2l0ZW1kYXRhOworCQlnb3RvIGRvbmU7CisJfQorCisJUDgwMjExX1NFVF9JTlQobXNnLT5yZXN1bHRjb2RlLCBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2Vzcyk7CisJY2hhbm5lbD1tc2ctPmNoYW5uZWwuZGF0YS0xOworCisJaWYgKGNoYW5uZWwgPCAwIHx8ICEgKGh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5zY2FuY2hhbm5lbHMgJiAxPDxjaGFubmVsKSApIHsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQlnb3RvIGRvbmU7CisJfQorCVdMQU5fTE9HX0RFQlVHKDIsICJjaGluZm9fcmVzdWx0czogY2hhbm5lbCAlZCwgYXZnL3BlYWsgbGV2ZWw9JWQvJWQgZEIsIGFjdGl2ZT0lZFxuIiwKKwkJCWNoYW5uZWwrMSwKKwkJCWh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5yZXN1bHRbY2hhbm5lbF0uYW5sLAorCQkJaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtjaGFubmVsXS5wbmwsCisJCQlody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdLmFjdGl2ZQorCQkpOworCVA4MDIxMV9TRVRfSU5UKG1zZy0+YXZnbm9pc2VsZXZlbCwgaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtjaGFubmVsXS5hbmwpOworCVA4MDIxMV9TRVRfSU5UKG1zZy0+cGVha25vaXNlbGV2ZWwsIGh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5yZXN1bHRbY2hhbm5lbF0ucG5sKTsKKwlQODAyMTFfU0VUX0lOVChtc2ctPmJzc2FjdGl2ZSwgaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtjaGFubmVsXS5hY3RpdmUgJgorCQlIRkEzODR4X0NISU5GT1JFU1VMVF9CU1NBQ1RJVkUKKyAgICAgICAgICAgICAgICA/IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZQorICAgICAgICAgICAgICAgIDogUDgwMjExRU5VTV90cnV0aF9mYWxzZSkgOworCVA4MDIxMV9TRVRfSU5UKG1zZy0+cGNmYWN0aXZlLCBody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdLmFjdGl2ZSAmCisJCUhGQTM4NHhfQ0hJTkZPUkVTVUxUX1BDRkFDVElWRQorICAgICAgICAgICAgICAgID8gUDgwMjExRU5VTV90cnV0aF90cnVlCisgICAgICAgICAgICAgICAgOiBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKSA7CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2F1dG9qb2luCisqCisqIEFzc29jaWF0ZSB3aXRoIGFuIEVTUy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJbXNncAkJcHRyIHRvIG1zZyBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzIGFuZCBkb25lCisqCTwwCXN1Y2Nlc3MsIGJ1dCB3ZSdyZSB3YWl0aW5nIGZvciBzb21ldGhpbmcgdG8gZmluaXNoLgorKgk+MAlhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZS4KKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkICAodXN1YWxseSkKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X2F1dG9qb2luKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwloZmEzODR4X3QJCQkqaHcgPSB3bGFuZGV2LT5wcml2OworCWludCAJCQlyZXN1bHQgPSAwOworCVVJTlQxNgkJCXJlZzsKKwlVSU5UMTYJCQlwb3J0X3R5cGU7CisJcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90CSptc2cgPSBtc2dwOworCXA4MDIxMXBzdHJkX3QJCSpwc3RyOworCVVJTlQ4CQkJYnl0ZWJ1ZlsyNTZdOworCWhmYTM4NHhfYnl0ZXN0cl90CSpwMmJ5dGVzdHIgPSAoaGZhMzg0eF9ieXRlc3RyX3QqKWJ5dGVidWY7CisJREJGRU5URVI7CisKKwl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX05PTkU7CisKKwkvKiBTZXQgdGhlIFNTSUQgKi8KKwltZW1jcHkoJndsYW5kZXYtPnNzaWQsICZtc2ctPnNzaWQuZGF0YSwgc2l6ZW9mKG1zZy0+c3NpZC5kYXRhKSk7CisKKwlpZiAoaHctPmFwKSB7CisKKwkJLyoqKiBBQ0NFU1MgUE9JTlQgKioqLworCisJCS8qIE5ldmVyIHN1cHBvcnRlZCBvbiBBUCAqLworCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogRGlzYWJsZSB0aGUgUG9ydCAqLworCWhmYTM4NHhfZHJ2cl9kaXNhYmxlKGh3LCAwKTsKKworCS8qKiogU1RBVElPTiAqKiovCisJLyogU2V0IHRoZSBUeFJhdGVzICovCisJaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9UWFJBVEVDTlRMLCAweDAwMGYpOworCisJLyogU2V0IHRoZSBhdXRoIHR5cGUgKi8KKwlpZiAoIG1zZy0+YXV0aHR5cGUuZGF0YSA9PSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5ICkgeworCQlyZWcgPSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX1NIQVJFREtFWTsKKwl9IGVsc2UgeworCQlyZWcgPSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX09QRU5TWVNURU07CisJfQorCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GQVVUSEVOVElDQVRJT04sIHJlZyk7CisKKwkvKiBTZXQgdGhlIHNzaWQgKi8KKwltZW1zZXQoYnl0ZWJ1ZiwgMCwgMjU2KTsKKwlwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSYobXNnLT5zc2lkLmRhdGEpOworCXByaXNtMm1nbXRfcHN0cjJieXRlc3RyKHAyYnl0ZXN0ciwgcHN0cik7CisgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoCisJCQlodywgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsCisJCQlieXRlYnVmLCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRF9MRU4pOworI2lmIDAKKwkvKiB3ZSBjYW4gdXNlIHRoZSBuZXctZmFuZ2xlZCBhdXRvLXVua25vd24gbW9kZSBpZiB0aGUgZmlybXdhcmUKKwkgICBpcyAxLjMuMyBvciBuZXdlciAqLworCWlmIChIRkEzODR4X0ZJUk1BUkVfVkVSU0lPTihody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorCQkJCSAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAorCQkJCSAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpID49CisJICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigxLDMsMykpIHsKKwkJLyogU2V0IHVwIHRoZSBJQlNTIG9wdGlvbnMgKi8KKwkJcmVnID0gIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lORVNTX0pPSU5DUkVBVEVJQlNTOworCQloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NSRUFURUlCU1MsIHJlZyk7CisKKwkJLyogU2V0IHRoZSBQb3J0VHlwZSAqLworCQlwb3J0X3R5cGUgPSBIRkEzODR4X1BPUlRUWVBFX0lCU1M7CisJfSBlbHNlIHsKKwkJcG9ydF90eXBlID0gSEZBMzg0eF9QT1JUVFlQRV9CU1M7CisJfQorI2Vsc2UKKwlwb3J0X3R5cGUgPSBIRkEzODR4X1BPUlRUWVBFX0JTUzsKKyNlbmRpZgorCS8qIFNldCB0aGUgUG9ydFR5cGUgKi8KKwloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLCBwb3J0X3R5cGUpOworCisJLyogRW5hYmxlIHRoZSBQb3J0ICovCisJaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7CisKKwkvKiBTZXQgdGhlIHJlc3VsdGNvZGUgKi8KKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3dsYW5zbmlmZgorKgorKiBTdGFydCBvciBzdG9wIHNuaWZmaW5nLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfd2xhbnNuaWZmKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKwlwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZl90CSptc2cgPSBtc2dwOworCisJaGZhMzg0eF90CQkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlVSU5UMTYJCQl3b3JkOworCisJREJGRU5URVI7CisKKwltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXN3aXRjaCAobXNnLT5lbmFibGUuZGF0YSkKKwl7CisJY2FzZSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOgorCQkvKiBDb25maXJtIHRoYXQgd2UncmUgaW4gbW9uaXRvciBtb2RlICovCisJCWlmICggd2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUiApIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKwkJCXJlc3VsdCA9IDA7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJLyogRGlzYWJsZSBtb25pdG9yIG1vZGUgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfbW9uaXRvcihodywgSEZBMzg0eF9NT05JVE9SX0RJU0FCTEUpOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJImZhaWxlZCB0byBkaXNhYmxlIG1vbml0b3IgbW9kZSwgcmVzdWx0PSVkXG4iLAorCQkJCXJlc3VsdCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCQkvKiBEaXNhYmxlIHBvcnQgMCAqLworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZGlzYWJsZShodywgMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSJmYWlsZWQgdG8gZGlzYWJsZSBwb3J0IDAgYWZ0ZXIgc25pZmZpbmcsIHJlc3VsdD0lZFxuIiwKKwkJCXJlc3VsdCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCQkvKiBDbGVhciB0aGUgZHJpdmVyIHN0YXRlICovCisJCXdsYW5kZXYtPm5ldGRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKKworCQkvKiBSZXN0b3JlIHRoZSB3ZXBmbGFncyAqLworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCisJCQkJSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsCisJCQkJaHctPnByZXNuaWZmX3dlcGZsYWdzKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJImZhaWxlZCB0byByZXN0b3JlIHdlcGZsYWdzPTB4JTA0eCwgcmVzdWx0PSVkXG4iLAorCQkJaHctPnByZXNuaWZmX3dlcGZsYWdzLAorCQkJcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJLyogU2V0IHRoZSBwb3J0IHRvIGl0cyBwcmlvciB0eXBlIGFuZCBlbmFibGUgKGlmIG5lY2Vzc2FyeSkgKi8KKwkJaWYgKGh3LT5wcmVzbmlmZl9wb3J0X3R5cGUgIT0gMCApIHsKKwkJCXdvcmQgPSBody0+cHJlc25pZmZfcG9ydF90eXBlOworCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAorCQkJCUhGQTM4NHhfUklEX0NORlBPUlRUWVBFLCB3b3JkKTsKKwkJCWlmICggcmVzdWx0ICkgeworCQkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJImZhaWxlZCB0byByZXN0b3JlIHBvcnR0eXBlLCByZXN1bHQ9JWRcbiIsCisJCQkJcmVzdWx0KTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKworCQkJLyogRW5hYmxlIHRoZSBwb3J0ICovCisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZW5hYmxlKGh3LCAwKTsKKwkJCWlmICggcmVzdWx0ICkgeworCQkJCVdMQU5fTE9HX0RFQlVHKDEsICJmYWlsZWQgdG8gZW5hYmxlIHBvcnQgdG8gcHJlc25pZmYgc2V0dGluZywgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJCWdvdG8gZmFpbGVkOworCQkJfQorCQl9IGVsc2UgeworCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2Rpc2FibGUoaHcsIDApOworCisJCX0KKworCQlXTEFOX0xPR19JTkZPKCJtb25pdG9yIG1vZGUgZGlzYWJsZWRcbiIpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQlyZXN1bHQgPSAwOworCQlnb3RvIGV4aXQ7CisJCWJyZWFrOworCWNhc2UgUDgwMjExRU5VTV90cnV0aF90cnVlOgorCQkvKiBEaXNhYmxlIHRoZSBwb3J0IChpZiBlbmFibGVkKSwgb25seSBjaGVjayBQb3J0IDAgKi8KKwkJaWYgKCBody0+cG9ydF9lbmFibGVkWzBdKSB7CisJCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgeworCQkJCS8qIFNhdmUgbWFjcG9ydCAwIHN0YXRlICovCisJCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAorCQkJCQkJCQkgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAorCQkJCQkJCQkgICYoaHctPnByZXNuaWZmX3BvcnRfdHlwZSkpOworCQkJCWlmICggcmVzdWx0ICkgeworCQkJCQlXTEFOX0xPR19ERUJVRygxLCJmYWlsZWQgdG8gcmVhZCBwb3J0dHlwZSwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJCQlnb3RvIGZhaWxlZDsKKwkJCQl9CisJCQkJLyogU2F2ZSB0aGUgd2VwZmxhZ3Mgc3RhdGUgKi8KKwkJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsCisJCQkJCQkJCSAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsCisJCQkJCQkJCSAgJihody0+cHJlc25pZmZfd2VwZmxhZ3MpKTsKKwkJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQkJV0xBTl9MT0dfREVCVUcoMSwiZmFpbGVkIHRvIHJlYWQgd2VwZmxhZ3MsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJCQkJZ290byBmYWlsZWQ7CisJCQkJfQorCQkJCWhmYTM4NHhfZHJ2cl9zdG9wKGh3KTsKKwkJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc3RhcnQoaHcpOworCQkJCWlmICggcmVzdWx0ICkgeworCQkJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCQkJICAgICAgICJmYWlsZWQgdG8gcmVzdGFydCB0aGUgY2FyZCBmb3Igc25pZmZpbmcsIHJlc3VsdD0lZFxuIiwKKwkJCQkJCSAgICAgICByZXN1bHQpOworCQkJCQlnb3RvIGZhaWxlZDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIERpc2FibGUgdGhlIHBvcnQgKi8KKwkJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZGlzYWJsZShodywgMCk7CisJCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJCQkgICAgICAgImZhaWxlZCB0byBlbmFibGUgcG9ydCBmb3Igc25pZmZpbmcsIHJlc3VsdD0lZFxuIiwKKwkJCQkJCSAgICAgICByZXN1bHQpOworCQkJCQlnb3RvIGZhaWxlZDsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlody0+cHJlc25pZmZfcG9ydF90eXBlID0gMDsKKwkJfQorCisJCS8qIFNldCB0aGUgY2hhbm5lbCB3ZSB3aXNoIHRvIHNuaWZmICAqLworCQl3b3JkID0gbXNnLT5jaGFubmVsLmRhdGE7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKwkJCQkJCSAgSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTCwgd29yZCk7CisJCWh3LT5zbmlmZl9jaGFubmVsPXdvcmQ7CisKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCSAgICAgICAiZmFpbGVkIHRvIHNldCBjaGFubmVsICVkLCByZXN1bHQ9JWRcbiIsCisJCQkJCSAgICAgICB3b3JkLAorCQkJCSAgICAgICByZXN1bHQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQkvKiBOb3cgaWYgd2UncmUgYWxyZWFkeSBzbmlmZmluZywgd2UgY2FuIHNraXAgdGhlIHJlc3QgKi8KKwkJaWYgKHdsYW5kZXYtPm5ldGRldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIpIHsKKwkJCS8qIFNldCB0aGUgcG9ydCB0eXBlIHRvIHBJYnNzICovCisJCQl3b3JkID0gSEZBMzg0eF9QT1JUVFlQRV9QU1VFRE9JQlNTOworCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAorCQkJCQkJCSAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIHdvcmQpOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkJICAgICAgICJmYWlsZWQgdG8gc2V0IHBvcnR0eXBlICVkLCByZXN1bHQ9JWRcbiIsCisJCQkJCSAgICAgICB3b3JkLAorCQkJCQkgICAgICAgcmVzdWx0KTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKwkJCWlmICgobXNnLT5rZWVwd2VwZmxhZ3Muc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgJiYgKG1zZy0+a2VlcHdlcGZsYWdzLmRhdGEgIT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgeworCQkJCS8qIFNldCB0aGUgd2VwZmxhZ3MgZm9yIG5vIGRlY3J5cHRpb24gKi8KKwkJCQl3b3JkID0gSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1RYQ1JZUFQgfAorCQkJCQlIRkEzODR4X1dFUEZMQUdTX0RJU0FCTEVfUlhDUllQVDsKKwkJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLCB3b3JkKTsKKwkJCX0KKworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkJICAgICAgICJmYWlsZWQgdG8gc2V0IHdlcGZsYWdzPTB4JTA0eCwgcmVzdWx0PSVkXG4iLAorCQkJCQkgICAgICAgd29yZCwKKwkJCQkJICAgICAgIHJlc3VsdCk7CisJCQkJZ290byBmYWlsZWQ7CisJCQl9CisJCX0KKworCQkvKiBEbyB3ZSB3YW50IHRvIHN0cmlwIHRoZSBGQ1MgaW4gbW9uaXRvciBtb2RlPyAqLworCQlpZiAoKG1zZy0+c3RyaXBmY3Muc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgJiYgKG1zZy0+c3RyaXBmY3MuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpKSB7CisJCQlody0+c25pZmZfZmNzID0gMDsKKwkJfSBlbHNlIHsKKwkJCWh3LT5zbmlmZl9mY3MgPSAxOworCQl9CisKKwkJLyogRG8gd2Ugd2FudCB0byB0cnVuY2F0ZSB0aGUgcGFja2V0cz8gKi8KKwkJaWYgKG1zZy0+cGFja2V0X3RydW5jLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2spIHsKKwkJCWh3LT5zbmlmZl90cnVuY2F0ZSA9IG1zZy0+cGFja2V0X3RydW5jLmRhdGE7CisJCX0gZWxzZSB7CisJCQlody0+c25pZmZfdHJ1bmNhdGUgPSAwOworCQl9CisKKwkJLyogRW5hYmxlIHRoZSBwb3J0ICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9lbmFibGUoaHcsIDApOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkiZmFpbGVkIHRvIGVuYWJsZSBwb3J0IGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAorCQkJcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCS8qIEVuYWJsZSBtb25pdG9yIG1vZGUgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfbW9uaXRvcihodywgSEZBMzg0eF9NT05JVE9SX0VOQUJMRSk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSJmYWlsZWQgdG8gZW5hYmxlIG1vbml0b3IgbW9kZSwgcmVzdWx0PSVkXG4iLAorCQkJcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisKKwkJaWYgKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIpIHsKKwkJCVdMQU5fTE9HX0lORk8oIm1vbml0b3IgbW9kZSBlbmFibGVkXG4iKTsKKwkJfQorCisJCS8qIFNldCB0aGUgZHJpdmVyIHN0YXRlICovCisJCS8qIERvIHdlIHdhbnQgdGhlIHByaXNtMiBoZWFkZXI/ICovCisJCWlmICgobXNnLT5wcmlzbWhlYWRlci5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSAmJiAobXNnLT5wcmlzbWhlYWRlci5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkpIHsKKwkJCWh3LT5zbmlmZmhkciA9IDA7CisJCQl3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNOworCQl9IGVsc2UgaWYgKChtc2ctPndsYW5oZWFkZXIuc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgJiYgKG1zZy0+d2xhbmhlYWRlci5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkpIHsKKwkJCWh3LT5zbmlmZmhkciA9IDE7CisJCQl3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNOworCQl9IGVsc2UgeworCQkJd2xhbmRldi0+bmV0ZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKKwkJfQorCisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCXJlc3VsdCA9IDA7CisJCWdvdG8gZXhpdDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQlyZXN1bHQgPSAwOworCQlnb3RvIGV4aXQ7CisJCWJyZWFrOworCX0KKworZmFpbGVkOgorCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3JlZnVzZWQ7CisJcmVzdWx0ID0gMDsKK2V4aXQ6CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzZmQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaApAQCAtMCwwICsxLDE4MiBAQAorLyogcHJpc20ybWdtdC5oCisqCisqIERlY2xhcmVzIHRoZSBtZ210IGNvbW1hbmQgaGFuZGxlciBmdW5jdGlvbnMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb25zdGFudHMgYW5kIGRhdGEgc3RydWN0dXJlcyBmb3IgaW50ZXJhY3Rpb24KKyogd2l0aCB0aGUgaGZhMzg0eCBXaXJlbGVzcyBMQU4gKFdMQU4pIE1lZGlhIEFjY2VzcyBDb250b2xsZXIgKE1BQykuCisqIFRoZSBoZmEzODR4IGlzIGEgcG9ydGlvbiBvZiB0aGUgSGFycmlzIFBSSVNNKHRtKSBXTEFOIGNoaXBzZXQuCisqCisqIFtJbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2Ugbm90ZXNdCisqCisqIFtSZWZlcmVuY2VzXQorKiAgIENXMTAgUHJvZ3JhbW1lcidzIE1hbnVhbCB2MS41CisqICAgSUVFRSA4MDIuMTEgRDEwLjAKKyoKKyogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1BSSVNNMk1HTVRfSAorI2RlZmluZSBfUFJJU00yTUdNVF9ICisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tLS0tIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gVHlwZXMgYW5kIHRoZWlyIHJlbGF0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tLS0tIFN0YXRpYyB2YXJpYWJsZSBleHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCitleHRlcm4gaW50ICAgICAgcHJpc20yX2JhcF90aW1lb3V0OworZXh0ZXJuIGludAlwcmlzbTJfaXJxX2V2cmVhZF9tYXg7CisjZW5kaWYKK2V4dGVybiBpbnQJcHJpc20yX2RlYnVnOworZXh0ZXJuIGludCAgICAgIHByaXNtMl9yZXNldF9ob2xkdGltZTsKK2V4dGVybiBpbnQgICAgICBwcmlzbTJfcmVzZXRfc2V0dGxldGltZTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLSBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworVUlOVDMyCitwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQzMiBpZnN0YXRlKTsKKwordm9pZAorcHJpc20yc3RhX2V2X2R0aW0od2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3ZvaWQKK3ByaXNtMnN0YV9ldl9pbmZkcm9wKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkCitwcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3ZvaWQKK3ByaXNtMnN0YV9ldl90eGV4Yyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQxNiBzdGF0dXMpOwordm9pZAorcHJpc20yc3RhX2V2X3R4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDE2IHN0YXR1cyk7Cit2b2lkCitwcmlzbTJzdGFfZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQKK3ByaXNtMnN0YV9ldl9hbGxvYyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworCisKK2ludCBwcmlzbTJtZ210X21pYnNldF9taWJnZXQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3Bvd2VybWdtdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfc2Nhbih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfc2Nhbl9yZXN1bHRzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9qb2luKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9wMl9qb2luKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9hdXRoZW50aWNhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2RlYXV0aGVudGljYXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9hc3NvY2lhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3JlYXNzb2NpYXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9kaXNhc3NvY2lhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3Jlc2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9zdGFydCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfd2xhbnNuaWZmKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9yZWFkcGRhKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9yZWFkY2lzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9hdXhwb3J0X3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9hdXhwb3J0X3JlYWQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2F1eHBvcnRfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2xvd19sZXZlbCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfdGVzdF9jb21tYW5kKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9tbWlfcmVhZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfbW1pX3dyaXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9yYW1kbF9zdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfcmFtZGxfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2ZsYXNoZGxfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2ZsYXNoZGxfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X21tX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9kdW1wX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9lbmFibGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2NoYW5uZWxfaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfY2hhbm5lbF9pbmZvX3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2F1dG9qb2luKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGNvbnZlcnNpb24gZnVuY3Rpb25zIGdvaW5nIGJldHdlZW4gd2xhbiBtZXNzYWdlIGRhdGEgdHlwZXMgYW5kCisqIFByaXNtMiBkYXRhIHR5cGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogYnl0ZSBhcmVhIGNvbnZlcnNpb24gZnVuY3Rpb25zKi8KK3ZvaWQgcHJpc20ybWdtdF9wc3RyMmJ5dGVhcmVhKFVJTlQ4ICpieXRlYXJlYSwgcDgwMjExcHN0cmRfdCAqcHN0cik7Cit2b2lkIHByaXNtMm1nbXRfYnl0ZWFyZWEycHN0cihVSU5UOCAqYnl0ZWFyZWEsIHA4MDIxMXBzdHJkX3QgKnBzdHIsIGludCBsZW4pOworCisvKiBieXRlIHN0cmluZyBjb252ZXJzaW9uIGZ1bmN0aW9ucyovCit2b2lkIHByaXNtMm1nbXRfcHN0cjJieXRlc3RyKGhmYTM4NHhfYnl0ZXN0cl90ICpieXRlc3RyLCBwODAyMTFwc3RyZF90ICpwc3RyKTsKK3ZvaWQgcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOworCisvKiBpbnRlZ2VyIGNvbnZlcnNpb24gZnVuY3Rpb25zICovCit2b2lkIHByaXNtMm1nbXRfcHJpc20yaW50MnA4MDIxMWludChVSU5UMTYgKnByaXNtMmludCwgVUlOVDMyICp3bGFuaW50KTsKK3ZvaWQgcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50KFVJTlQxNiAqcHJpc20yaW50LCBVSU5UMzIgKndsYW5pbnQpOworCisvKiBlbnVtZXJhdGVkIGludGVnZXIgY29udmVyc2lvbiBmdW5jdGlvbnMgKi8KK3ZvaWQgcHJpc20ybWdtdF9wcmlzbTJlbnVtMnA4MDIxMWVudW0oVUlOVDE2ICpwcmlzbTJlbnVtLCBVSU5UMzIgKndsYW5lbnVtLCBVSU5UMTYgcmlkKTsKK3ZvaWQgcHJpc20ybWdtdF9wODAyMTFlbnVtMnByaXNtMmVudW0oVUlOVDE2ICpwcmlzbTJlbnVtLCBVSU5UMzIgKndsYW5lbnVtLCBVSU5UMTYgcmlkKTsKKworLyogZnVuY3Rpb25zIHRvIGNvbnZlcnQgYSBiaXQgYXJlYSB0by9mcm9tIGFuIE9wZXJhdGlvbmFsIFJhdGUgU2V0ICovCit2b2lkIHByaXNtMm1nbXRfZ2V0X29wcmF0ZXNldChVSU5UMTYgKnJhdGUsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOwordm9pZCBwcmlzbTJtZ210X3NldF9vcHJhdGVzZXQoVUlOVDE2ICpyYXRlLCBwODAyMTFwc3RyZF90ICpwc3RyKTsKKworLyogZnVuY3Rpb25zIHRvIGNvbnZlcnQgR3JvdXAgQWRkcmVzc2VzICovCit2b2lkIHByaXNtMm1nbXRfZ2V0X2dycGFkZHIoVUlOVDMyIGRpZCwKKwlwODAyMTFwc3RyZF90ICpwc3RyLCBoZmEzODR4X3QgKnByaXYgKTsKK2ludCBwcmlzbTJtZ210X3NldF9ncnBhZGRyKFVJTlQzMiBkaWQsCisJVUlOVDggKnByaXNtMmJ1ZiwgcDgwMjExcHN0cmRfdCAqcHN0ciwgaGZhMzg0eF90ICpwcml2ICk7CitpbnQgcHJpc20ybWdtdF9nZXRfZ3JwYWRkcl9pbmRleCggVUlOVDMyIGRpZCApOworCit2b2lkIHByaXNtMnN0YV9wcm9jZXNzaW5nX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7CisKK3ZvaWQgcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpOwordm9pZCBwcmlzbTJzdGFfY29tbXNxdWFsX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLSBJbmxpbmUgRnVuY3Rpb24gRGVmaW5pdGlvbnMgKGlmIHN1cHBvcnRlZCkgLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWliLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjhmZDliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWliLmMKQEAgLTAsMCArMSwzNzk5IEBACisvKiBzcmMvcHJpc20yL2RyaXZlci9wcmlzbTJtaWIuYworKgorKiBNYW5hZ2VtZW50IHJlcXVlc3QgZm9yIG1pYnNldC9taWJnZXQKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgaGFuZGxlIHRoZSBtaWJzZXQvbWliZ2V0IG1hbmFnZW1lbnQKKyogZnVuY3Rpb25zLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworI2RlZmluZSBXTEFOX0RCVkFSCXByaXNtMl9kZWJ1ZworCisjaW5jbHVkZSAidmVyc2lvbi5oIgorCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorCisvLyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpCisvLyNpbmNsdWRlIDxwY21jaWEvdmVyc2lvbi5oPgorLy8jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CisvLyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKy8vI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKy8vI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgorLy8jaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgorLy8jZW5kaWYKKy8vCisvLyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUExYKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpKQorLy8jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisvLyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKy8vZW5kaWYKKworLy8jaWYgKFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorLy8jZW5kaWYKKworI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbXNnLmgiCisjaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCisjaW5jbHVkZSAicDgwMjExbWV0YWRlZi5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFzdHJ1Y3QuaCIKKyNpbmNsdWRlICJoZmEzODR4LmgiCisjaW5jbHVkZSAicHJpc20ybWdtdC5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgQ29uc3RhbnRzICovCisKKyNkZWZpbmUgTUlCX1RNUF9NQVhMRU4gICAgMjAwICAgIC8qIE1heCBsZW5ndGggb2YgUklEIHJlY29yZCAoaW4gYnl0ZXMpLiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworI2RlZmluZSAgRl9BUCAgICAgICAgIDB4MSAgICAgICAgLyogTUlCIGlzIHN1cHBvcnRlZCBvbiBBY2Nlc3MgUG9pbnRzLiAqLworI2RlZmluZSAgRl9TVEEgICAgICAgIDB4MiAgICAgICAgLyogTUlCIGlzIHN1cHBvcnRlZCBvbiBzdGF0aW9ucy4gKi8KKyNkZWZpbmUgIEZfUkVBRCAgICAgICAweDQgICAgICAgIC8qIE1JQiBtYXkgYmUgcmVhZC4gKi8KKyNkZWZpbmUgIEZfV1JJVEUgICAgICAweDggICAgICAgIC8qIE1JQiBtYXkgYmUgd3JpdHRlbi4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgbWlicmVjCit7CisgICAgVUlOVDMyICAgZGlkOworICAgIFVJTlQxNiAgIGZsYWc7CisgICAgVUlOVDE2ICAgcGFybTE7CisgICAgVUlOVDE2ICAgcGFybTI7CisgICAgVUlOVDE2ICAgcGFybTM7CisgICAgaW50ICAgICAgKCpmdW5jKShzdHJ1Y3QgbWlicmVjICAgICAgICAgICAgICAgICptaWIsCisgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAorICAgICAgICAgICAgICAgICAgICAgd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKKyAgICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorICAgICAgICAgICAgICAgICAgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7Cit9IG1pYnJlY190OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVzdHIycHN0cigKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cigKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfdWludDMyKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzJhcnJheSgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfdWludDMyb2Zmc2V0KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl90cnV0aCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfcHJlYW1ibGUoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2ZsYWcoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2FwcGNmaW5mb2ZsYWcoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3JlZ3VsYXRvcnlkb21haW5zKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9wb3dlcm1hbmFnZW1lbnQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3ByaXZhY3lpbnZva2VkKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX29wZXJhdGlvbmFscmF0ZXNldCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9md2lkKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9hdXRoYWxnKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9wcml2KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9hdXRobGlzdCgKK2hmYTM4NHhfdCAgICAgICpodywKK3ByaXNtMnN0YV9hdXRobGlzdF90ICAqbGlzdCk7CisKK3N0YXRpYyB2b2lkIHByaXNtMm1pYl9wcml2X2FjY2Vzc21vZGUoCitoZmEzODR4X3QgICAgICAgICAqaHcsCitVSU5UMzIgICAgICAgICAgICBtb2RlKTsKKworc3RhdGljIHZvaWQgcHJpc20ybWliX3ByaXZfYWNjZXNzYWxsb3coCitoZmEzODR4X3QgICAgICAgICAqaHcsCitwODAyMTFtYWNhcnJheV90ICAqbWFjYXJyYXkpOworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9hY2Nlc3NkZW55KAoraGZhMzg0eF90ICAgICAgICAgKmh3LAorcDgwMjExbWFjYXJyYXlfdCAgKm1hY2FycmF5KTsKKworc3RhdGljIHZvaWQgcHJpc20ybWliX3ByaXZfZGVhdXRoZW50aWNhdGUoCitoZmEzODR4X3QgICAgICAgICAqaHcsCitVSU5UOCAgICAgICAgICAgICAqYWRkcik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBTdGF0aWMgRGVmaW5pdGlvbnMgKi8KKworc3RhdGljIG1pYnJlY190IG1pYnRhYltdID0geworCisgICAgLyogZG90MTFzbXQgTUlCJ3MgKi8KKworICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExU3RhdGlvbklELAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUiwgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMU1lZGl1bU9jY3VwYW5jeUxpbWl0LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFDRlBvbGxhYmxlLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NGUE9MTEFCTEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExQ0ZQUGVyaW9kLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTiwgMSwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFDRlBNYXhEdXJhdGlvbiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBUFBDRklORk8sIEhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4sIDIsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25SZXNwb25zZVRpbWVPdXQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFVVEhSU1BUSU1FT1VULCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMVByaXZhY3lPcHRpb25JbXBsZW1lbnRlZCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUFJJVkFDWU9QVElNUCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFQb3dlck1hbmFnZW1lbnRNb2RlLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZQTUVOQUJMRUQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3Bvd2VybWFuYWdlbWVudCB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExRGVzaXJlZFNTSUQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lELCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRF9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVzdHIycHN0ciB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExRGVzaXJlZEJTU1R5cGUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMU9wZXJhdGlvbmFsUmF0ZVNldCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfb3BlcmF0aW9uYWxyYXRlc2V0IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFPcGVyYXRpb25hbFJhdGVTZXQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX29wZXJhdGlvbmFscmF0ZXNldCB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExQmVhY29uUGVyaW9kLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFQQkNOSU5ULCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURUSU1QZXJpb2QsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05EVElNUEVSLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUFzc29jaWF0aW9uUmVzcG9uc2VUaW1lT3V0LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QUk9UT0NPTFJTUFRJTUUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTEsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIDEsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGcgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG0yLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICAyLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtMywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgMywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZyB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIDQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGcgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG01LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICA1LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtNiwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgNiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZyB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGUxLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZ2VuYWJsZSB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGUyLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZ2VuYWJsZSB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGUzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZ2VuYWJsZSB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGU0LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgNCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZ2VuYWJsZSB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGU1LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgNSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZ2VuYWJsZSB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGU2LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgNiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZ2VuYWJsZSB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkxLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTIsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsIEhGQTM4NHhfV0VQRkxBR1NfUFJJVklOVk9LRUQsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXZhY3lpbnZva2VkIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZSUQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsIEhGQTM4NHhfV0VQRkxBR1NfRVhDTFVERSwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZXhjbHVkZXVuZW5jcnlwdGVkIH0sCisgICAgeyBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UHJlYW1ibGVFbmFibGVkLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GU0hPUlRQUkVBTUJMRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJlYW1ibGUgfSwKKworICAgIC8qIGRvdDExbWFjIE1JQidzICovCisKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTUFDQWRkcmVzcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFIsIEhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFJfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVJUU1RocmVzaG9sZCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNILCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1JUU1RIUkVTSDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1NIT1JUUkVUUllMSU1JVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9MT05HUkVUUllMSU1JVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0gsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExRnJhZ21lbnRhdGlvblRocmVzaG9sZCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNIMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfTUFYVFhMSUZFVElNRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1heFJlY2VpdmVMaWZldGltZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfTUFYUlhMSUZFVElNRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczEsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M1LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNiwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczcsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M4LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzOSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczEwLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTEsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMiwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczEzLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE2LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTcsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxOCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE5LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjAsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIyLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjMsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI1LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjYsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI4LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjksCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzMCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczMxLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzIsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorCisgICAgLyogZG90MTFwaHkgTUlCJ3MgKi8KKworICAgIHsgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFQSFlUeXBlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QSFlUWVBFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlX2RvdDExVGVtcFR5cGUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1RFTVBUWVBFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRDSEFOTkVMLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q0NBTW9kZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ0NBTU9ERSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisKKyAgICAvKiBwMlRhYmxlIE1JQidzICovCisKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyTU1UeCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyRWFybHlCZWFjb24sCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgQklUNywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXBwY2ZpbmZvZmxhZyB9LAorICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJSZWNlaXZlZEZyYW1lU3RhdGlzdGljcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJDb21tdW5pY2F0aW9uVGFsbGllcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJBdXRoZW50aWNhdGVkLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJBc3NvY2lhdGVkLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJQb3dlclNhdmVVc2VyQ291bnQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkNvbW1lbnQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkFjY2Vzc01vZGUsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJBY2Nlc3NBbGxvdywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkFjY2Vzc0RlbnksCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJDaGFubmVsSW5mb1Jlc3VsdHMsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisKKyAgICAvKiBwMlN0YXRpYyBNSUIncyAqLworCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQb3J0VHlwZSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duTUFDQWRkcmVzcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFIsIEhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFJfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZEZXNpcmVkU1NJRCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZXN0cjJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25DaGFubmVsLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25TU0lELAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dOU1NJRCwgSEZBMzg0eF9SSURfQ05GT1dOU1NJRF9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVzdHIycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duQVRJTVdpbmRvdywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dOQVRJTVdJTiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZTeXN0ZW1TY2FsZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlNZU1NDQUxFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk1heERhdGFMZW5ndGgsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZNQVhEQVRBTEVOLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3MsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldEU0FERFIsIEhGQTM4NHhfUklEX0NORldEU0FERFJfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQTUVuYWJsZWQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlBNRU5BQkxFRCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdHJ1dGggfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBNRVBTLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZQTUVQUywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdHJ1dGggfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk11bHRpY2FzdFJlY2VpdmUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk1VTFRJQ0FTVFJYLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl90cnV0aCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mTWF4U2xlZXBEdXJhdGlvbiwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GTUFYU0xFRVBEVVIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUE1Ib2xkb3ZlckR1cmF0aW9uLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZQTUhPTEREVVIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duTmFtZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk9XTk5BTUUsIEhGQTM4NHhfUklEX0NORk9XTk5BTUVfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlc3RyMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93bkRUSU1QZXJpb2QsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05EVElNUEVSLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3MxLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldEU0FERFIxLCBIRkEzODR4X1JJRF9DTkZXRFNBRERSMV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3MyLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldEU0FERFIyLCBIRkEzODR4X1JJRF9DTkZXRFNBRERSMl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3MzLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldEU0FERFIzLCBIRkEzODR4X1JJRF9DTkZXRFNBRERSM19MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3M0LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldEU0FERFI0LCBIRkEzODR4X1JJRF9DTkZXRFNBRERSNF9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3M1LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldEU0FERFI1LCBIRkEzODR4X1JJRF9DTkZXRFNBRERSNV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3M2LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldEU0FERFI2LCBIRkEzODR4X1JJRF9DTkZXRFNBRERSNl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk11bHRpY2FzdFBNQnVmZmVyaW5nLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk1DQVNUUE1CVUZGLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl90cnV0aCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleUlELAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWUlELCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldFUERlZmF1bHRLZXkwLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldFUERlZmF1bHRLZXkxLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTEsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldFUERlZmF1bHRLZXkyLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldFUERlZmF1bHRLZXkzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldFUEZsYWdzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQXV0aGVudGljYXRpb24sCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBVVRIRU5USUNBVElPTiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNYXhBc3NvY2lhdGVkU3RhdGlvbnMsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GTUFYQVNTT0NTVEFUSU9OUywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZUeENvbnRyb2wsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZUWENPTlRST0wsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUm9hbWluZ01vZGUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkhvc3RBdXRoZW50aWNhdGlvbiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZIT1NUQVVUSEFTU09DLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl90cnV0aCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUmN2Q3JjRXJyb3IsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZSQ1ZDUkNFUlJPUiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZBbHRSZXRyeUNvdW50LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQUxUUkVUUllDTlQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQmVhY29uSW50ZXJ2YWwsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVBCQ05JTlQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mTWVkaXVtT2NjdXBhbmN5TGltaXQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkNGUFBlcmlvZCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBUFBDRklORk8sIEhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4sIDEsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQ0ZQTWF4RHVyYXRpb24sCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOLCAyLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkNGUEZsYWdzLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTiwgMywKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZTVEFQQ0ZJbmZvLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZTVEFQQ0ZJTkZPLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlByaW9yaXR5UVVzYWdlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GUFJJT1JJVFlRVVNBR0UsIEhGQTM4NHhfUklEX0NORlBSSU9RVVNBR0VfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mVElNQ3RybCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlRJTUNUUkwsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mVGhpcnR5MlRhbGx5LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GVEhJUlRZMlRBTExZLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl90cnV0aCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mRW5oU2VjdXJpdHksCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GRU5IU0VDVVJJVFksIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mU2hvcnRQcmVhbWJsZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlNIT1JUUFJFQU1CTEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByZWFtYmxlIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZFeGNsdWRlTG9uZ1ByZWFtYmxlLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkVYQ0xPTkdQUkVBTUJMRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdHJ1dGggfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkF1dGhlbnRpY2F0aW9uUnNwVE8sCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFVVEhSU1BUSU1FT1VULCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkJhc2ljUmF0ZXMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZCQVNJQ1JBVEVTLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlN1cHBvcnRlZFJhdGVzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GU1VQUFJBVEVTLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKworICAgIC8qIHAyRHluYW1pYyBNSUIncyAqLworCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyQ3JlYXRlSUJTUywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1JFQVRFSUJTUywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdHJ1dGggfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNILCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0gsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2wsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUkFURUNOVEwsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlByb21pc2N1b3VzTW9kZSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUFJPTUlTQ01PREUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3RydXRoIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDAsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNIMSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQyLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0gyLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDMsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSDMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkNCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNINCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQ1LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0g1LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDYsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSDYsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQwLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1JUU1RIUkVTSDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlJUU1RocmVzaG9sZDEsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNIMSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkMiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0gyLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQzLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1JUU1RIUkVTSDMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlJUU1RocmVzaG9sZDQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNINCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkNSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0g1LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQ2LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1JUU1RIUkVTSDYsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2wwLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUkFURUNOVEwwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sMSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMMSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDIsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTDIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2wzLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUkFURUNOVEwzLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sNCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMNCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDUsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTDUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2w2LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUkFURUNOVEw2LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKworICAgIC8qIHAyQmVoYXZpb3IgTUlCJ3MgKi8KKworICAgIHsgRElEbWliX3AyX3AyQmVoYXZpb3JfcDJUaWNrVGltZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0lUSUNLVElNRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisKKyAgICAvKiBwMk5JQyBNSUIncyAqLworCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJNYXhMb2FkVGltZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfTUFYTE9BRFRJTUUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyRExCdWZmZXJQYWdlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUiwgSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVJfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMkRMQnVmZmVyT2Zmc2V0LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUiwgSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVJfTEVOLCAxLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMkRMQnVmZmVyTGVuZ3RoLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUiwgSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVJfTEVOLCAyLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMlBSSUlkZW50aXR5LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QUklJREVOVElUWSwgSEZBMzg0eF9SSURfUFJJSURFTlRJVFlfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyUFJJU3VwUmFuZ2UsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BSSVNVUFJBTkdFLCBIRkEzODR4X1JJRF9QUklTVVBSQU5HRV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJDRklBY3RSYW5nZXMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BSSV9DRklBQ1RSQU5HRVMsIEhGQTM4NHhfUklEX0NGSUFDVFJBTkdFU19MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJCdWlsZFNlcXVlbmNlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9CVUlMRFNFUSwgSEZBMzg0eF9SSURfQlVJTERTRVFfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyUHJpbWFyeUZXSUQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2Z3aWQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMlNlY29uZGFyeUZXSUQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2Z3aWQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMlRlcnRpYXJ5RldJRCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2Z3aWQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMk5JQ1NlcmlhbE51bWJlciwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSLCBIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJOSUNJZGVudGl0eSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfTklDSURFTlRJVFksIEhGQTM4NHhfUklEX05JQ0lERU5USVRZX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMk1GSVN1cFJhbmdlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9NRklTVVBSQU5HRSwgSEZBMzg0eF9SSURfTUZJU1VQUkFOR0VfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyQ0ZJU3VwUmFuZ2UsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NGSVNVUFJBTkdFLCBIRkEzODR4X1JJRF9DRklTVVBSQU5HRV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJDaGFubmVsTGlzdCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ0hBTk5FTExJU1QsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyUmVndWxhdG9yeURvbWFpbnMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1JFR1VMQVRPUllET01BSU5TLCBIRkEzODR4X1JJRF9SRUdVTEFUT1JZRE9NQUlOU19MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3JlZ3VsYXRvcnlkb21haW5zIH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJUZW1wVHlwZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfVEVNUFRZUEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyU1RBSWRlbnRpdHksCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1NUQUlERU5USVRZLCBIRkEzODR4X1JJRF9TVEFJREVOVElUWV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJTVEFTdXBSYW5nZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfU1RBU1VQUkFOR0UsIEhGQTM4NHhfUklEX1NUQVNVUFJBTkdFX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMk1GSUFjdFJhbmdlcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfU1RBX01GSUFDVFJBTkdFUywgSEZBMzg0eF9SSURfTUZJQUNUUkFOR0VTX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMlNUQUNGSUFjdFJhbmdlcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfU1RBX0NGSUFDVFJBTkdFUywgSEZBMzg0eF9SSURfQ0ZJQUNUUkFOR0VTMl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisKKyAgICAvKiBwMk1BQyBNSUIncyAqLworCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJQb3J0U3RhdHVzLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BPUlRTVEFUVVMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFNTSUQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lEX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZXN0cjJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50QlNTSUQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCBIRkEzODR4X1JJRF9DVVJSRU5UQlNTSURfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDb21tc1F1YWxpdHksCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZLCBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFlfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ29tbXNRdWFsaXR5Q1EsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZLCBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFlfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkNvbW1zUXVhbGl0eUFTTCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFksIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4sIDEsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ29tbXNRdWFsaXR5QU5MLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWSwgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZX0xFTiwgMiwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHksCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfREJNQ09NTVNRVUFMSVRZLCBIRkEzODR4X1JJRF9EQk1DT01NU1FVQUxJVFlfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyZGJtQ29tbXNRdWFsaXR5Q1EsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZLCBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFlfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMmRibUNvbW1zUXVhbGl0eUFTTCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFksIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4sIDEsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyZGJtQ29tbXNRdWFsaXR5QU5MLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWSwgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZX0xFTiwgMiwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudEJlYWNvbkludGVydmFsLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UQkNOSU5ULCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMlN0YUN1cnJlbnRTY2FsZVRocmVzaG9sZHMsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFNDQUxFVEhSRVNILCBIRkEzODR4X1JJRF9TVEFDVVJTQ0FMRVRIUkVTSF9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJBUEN1cnJlbnRTY2FsZVRocmVzaG9sZHMsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU0NBTEVUSFJFU0gsIEhGQTM4NHhfUklEX0FQQ1VSU0NBTEVUSFJFU0hfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyUHJvdG9jb2xSc3BUaW1lLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QUk9UT0NPTFJTUFRJTUUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyU2hvcnRSZXRyeUxpbWl0LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9TSE9SVFJFVFJZTElNSVQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyTG9uZ1JldHJ5TGltaXQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0xPTkdSRVRSWUxJTUlULCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMk1heFRyYW5zbWl0TGlmZXRpbWUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX01BWFRYTElGRVRJTUUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyTWF4UmVjZWl2ZUxpZmV0aW1lLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9NQVhSWExJRkVUSU1FLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkNGUG9sbGFibGUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ0ZQT0xMQUJMRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJBdXRoZW50aWNhdGlvbkFsZ29yaXRobXMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0FVVEhBTEdPUklUSE1TLCBIRkEzODR4X1JJRF9BVVRIQUxHT1JJVEhNU19MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJQcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BSSVZBQ1lPUFRJTVAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTEsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlMiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUyLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUzLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlNSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU1LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGU2LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTYsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyT3duTUFDQWRkcmVzcywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX09XTk1BQ0FERFJFU1MsIEhGQTM4NHhfUklEX09XTk1BQ0FERFJFU1NfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyIH0sCisKKyAgICAvKiBwMk1vZGVtIE1JQidzICovCisKKyAgICB7IERJRG1pYl9wMl9wMk1vZGVtX3AyUEhZVHlwZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUEhZVFlQRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNb2RlbV9wMkN1cnJlbnRDaGFubmVsLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UQ0hBTk5FTCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNb2RlbV9wMkN1cnJlbnRQb3dlclN0YXRlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UUE9XRVJTVEFURSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNb2RlbV9wMkNDQU1vZGUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NDQU1PREUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTW9kZW1fcDJUeFBvd2VyTWF4LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhQT1dFUk1BWCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhQT1dFUk1BWCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNb2RlbV9wMlN1cHBvcnRlZERhdGFSYXRlcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfU1VQUE9SVEVEREFUQVJBVEVTLCBIRkEzODR4X1JJRF9TVVBQT1JURUREQVRBUkFURVNfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlc3RyMnBzdHIgfSwKKworICAgIC8qIEFuZCBmaW5hbGx5LCBsbnggbWlicyAqLworICAgIHsgRElEbWliX2xueF9sbnhDb25maWdUYWJsZV9sbnhSU05BSUUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldQQURBVEEsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IDAsIDAsIDAsIDAsIDAsIE5VTEx9fTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVzZSBNSUIncyBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzIHRpbWU6CisKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlX2RvdDExQ2hhbm5lbEFnaWxpdHlQcmVzZW50CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMUNoYW5uZWxBZ2lsaXR5RW5hYmxlZAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExUEJDQ09wdGlvbkltcGxlbWVudGVkCitESURtaWJfZG90MTFwaHlfZG90MTFSZWdEb21haW5zU3VwcG9ydGVkVGFibGVfZG90MTFSZWdEb21haW5zU3VwcG9ydEluZGV4CitESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeFRhYmxlX2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzVHhJbmRleAorRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzVHhUYWJsZV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1R4VmFsdWUKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1J4VGFibGVfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNSeEluZGV4CitESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNSeFRhYmxlX2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhWYWx1ZQorCitESURtaWJfZG90MTFwaHlfZG90MTFSZWdEb21haW5zU3VwcG9ydGVkVGFibGVfZG90MTFSZWdEb21haW5zU3VwcG9ydFZhbHVlCitUT0RPOiBuZWVkIHRvIGludmVzdGlnYXRlIHdoeSB3bGFuIGhhcyB0aGlzIGFzIGVudW1lcmF0ZWQgYW5kIFByaXNtMiBoYXMgdGhpcworICAgICAgYXMgYnR5ZSBzdHIuCisKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMVNob3J0UHJlYW1ibGVPcHRpb25JbXBsZW1lbnRlZAorVE9ETzogRmluZCBvdXQgdGhlIGZpcm13YXJlIHZlcnNpb24gbnVtYmVyKHMpIGZvciBpZGVudGlmeWluZworICAgICAgd2hldGhlciB0aGUgZmlybXdhcmUgaXMgY2FwYWJsZSBvZiBzaG9ydCBwcmVhbWJsZS4gVFJVRSBvciBGQUxTRQorICAgICAgd2lsbCBiZSByZXR1cm5lZCBiYXNlZCBvbiB0aGUgdmVyc2lvbiBvZiB0aGUgZmlybXdhcmUuCisKK1dFUCBLZXkgbWFwcGluZ3MgYXJlbid0IHN1cHBvcnRlZCBpbiB0aGUgZi93LgorRElEbWliX2RvdDExc210X2RvdDExV0VQS2V5TWFwcGluZ3NUYWJsZV9kb3QxMVdFUEtleU1hcHBpbmdJbmRleAorRElEbWliX2RvdDExc210X2RvdDExV0VQS2V5TWFwcGluZ3NUYWJsZV9kb3QxMVdFUEtleU1hcHBpbmdBZGRyZXNzCitESURtaWJfZG90MTFzbXRfZG90MTFXRVBLZXlNYXBwaW5nc1RhYmxlX2RvdDExV0VQS2V5TWFwcGluZ1dFUE9uCitESURtaWJfZG90MTFzbXRfZG90MTFXRVBLZXlNYXBwaW5nc1RhYmxlX2RvdDExV0VQS2V5TWFwcGluZ1ZhbHVlCitESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBLZXlNYXBwaW5nTGVuZ3RoCisKK1RPRE86IGltcGxlbWVudCBjb3VudGVycy4KK0RJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUElDVkVycm9yQ291bnQKK0RJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUEV4Y2x1ZGVkQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFUcmFuc21pdHRlZEZyYWdtZW50Q291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFNdWx0aWNhc3RUcmFuc21pdHRlZEZyYW1lQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFGYWlsZWRDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVJldHJ5Q291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFNdWx0aXBsZVJldHJ5Q291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFGcmFtZUR1cGxpY2F0ZUNvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExUlRTU3VjY2Vzc0NvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExUlRTRmFpbHVyZUNvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExQUNLRmFpbHVyZUNvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExRkNTRXJyb3JDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVRyYW5zbWl0dGVkRnJhbWVDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVdFUFVuZGVjcnlwdGFibGVDb3VudAorCitUT0RPOiBpbXBsZW1lbnQgc2FuZSB2YWx1ZXMgZm9yIHRoZXNlLgorRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYW51ZmFjdHVyZXJJRAorRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFQcm9kdWN0SUQKKworTm90IHRvbyB3b3JyaWVkIGFib3V0IHRoZXNlIGF0IHRoZSBtb21lbnQuCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlBbnRlbm5hVGFibGVfZG90MTFDdXJyZW50VHhBbnRlbm5hCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlBbnRlbm5hVGFibGVfZG90MTFEaXZlcnNpdHlTdXBwb3J0CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlBbnRlbm5hVGFibGVfZG90MTFDdXJyZW50UnhBbnRlbm5hCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFOdW1iZXJTdXBwb3J0ZWRQb3dlckxldmVscworRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsMQorRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsMgorRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsMworRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNQorRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNgorRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNworRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsOAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbAorCitVbW1tLCBGSCBhbmQgSVIgZG9uJ3QgYXBwbHkKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUhvcFRpbWUKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsTnVtYmVyCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFNYXhEd2VsbFRpbWUKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnREd2VsbFRpbWUKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnRTZXQKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnRQYXR0ZXJuCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFDdXJyZW50SW5kZXgKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUNDQU1vZGVTdXBwb3J0ZWQKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUVEVGhyZXNob2xkCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlJUlRhYmxlX2RvdDExQ0NBV2F0Y2hkb2dUaW1lck1heAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5SVJUYWJsZV9kb3QxMUNDQVdhdGNoZG9nQ291bnRNYXgKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUlSVGFibGVfZG90MTFDQ0FXYXRjaGRvZ1RpbWVyTWluCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlJUlRhYmxlX2RvdDExQ0NBV2F0Y2hkb2dDb3VudE1pbgorCitXZSBqdXN0IGRvbid0IGhhdmUgZW5vdWdoIGFudGVubmFzIHJpZ2h0IG5vdyB0byB3b3JyeSBhYm91dCB0aGlzLgorRElEbWliX2RvdDExcGh5X2RvdDExQW50ZW5uYXNMaXN0VGFibGVfZG90MTFBbnRlbm5hTGlzdEluZGV4CitESURtaWJfZG90MTFwaHlfZG90MTFBbnRlbm5hc0xpc3RUYWJsZV9kb3QxMVN1cHBvcnRlZFR4QW50ZW5uYQorRElEbWliX2RvdDExcGh5X2RvdDExQW50ZW5uYXNMaXN0VGFibGVfZG90MTFTdXBwb3J0ZWRSeEFudGVubmEKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMUFudGVubmFzTGlzdFRhYmxlX2RvdDExRGl2ZXJzaXR5U2VsZWN0aW9uUngKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X21pYnNldF9taWJnZXQKKyoKKyogU2V0IHRoZSB2YWx1ZSBvZiBhIG1pYiBpdGVtLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MgYW5kIGRvbmUKKyoJPDAJc3VjY2VzcywgYnV0IHdlJ3JlIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0byBmaW5pc2guCisqCT4wCWFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlLgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKK3sKKwloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7CisJaW50CQkJcmVzdWx0LCBpc2dldDsKKwltaWJyZWNfdAkJKm1pYjsKKwlVSU5UMTYJCQl3aGljaDsKKworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdAkqbXNnID0gbXNncDsKKwlwODAyMTFpdGVtZF90CQkJKm1pYml0ZW07CisKKwlEQkZFTlRFUjsKKworCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKworCS8qCisJKiogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYW4gQWNjZXNzIFBvaW50IG9yIGEgc3RhdGlvbi4KKwkqLworCisJd2hpY2ggPSBody0+YXAgPyBGX0FQIDogRl9TVEE7CisKKwkvKgorCSoqIEZpbmQgdGhlIE1JQiBpbiB0aGUgTUlCIHRhYmxlLiAgTm90ZSB0aGF0IGEgTUlCIG1heSBiZSBpbiB0aGUKKwkqKiB0YWJsZSB0d2ljZS4uLm9uY2UgZm9yIGFuIEFQIGFuZCBvbmNlIGZvciBhIHN0YXRpb24uICBNYWtlIHN1cmUKKwkqKiB0byBnZXQgdGhlIGNvcnJlY3Qgb25lLiAgTm90ZSB0aGF0IERJRD0wIG1hcmtzIHRoZSBlbmQgb2YgdGhlCisJKiogTUlCIHRhYmxlLgorCSovCisKKwltaWJpdGVtID0gKHA4MDIxMWl0ZW1kX3QgKikgbXNnLT5taWJhdHRyaWJ1dGUuZGF0YTsKKworCWZvciAobWliID0gbWlidGFiOyBtaWItPmRpZCAhPSAwOyBtaWIrKykKKwkJaWYgKG1pYi0+ZGlkID09IG1pYml0ZW0tPmRpZCAmJiAobWliLT5mbGFnICYgd2hpY2gpKQorCQkJYnJlYWs7CisKKwlpZiAobWliLT5kaWQgPT0gMCkgeworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkqKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhICJtaWJnZXQiIG9yIGEgIm1pYnNldCIuICBJZiB0aGlzIGlzIGEKKwkqKiAibWliZ2V0IiwgdGhlbiBtYWtlIHN1cmUgdGhhdCB0aGUgTUlCIG1heSBiZSByZWFkLiAgT3RoZXJ3aXNlLAorCSoqIHRoaXMgaXMgYSAibWlic2V0IiBzbyBtYWtlIG1ha2Ugc3VyZSB0aGF0IHRoZSBNSUIgbWF5IGJlIHdyaXR0ZW4uCisJKi8KKworCWlzZ2V0ID0gKG1zZy0+bXNnY29kZSA9PSBESURtc2dfZG90MTFyZXFfbWliZ2V0KTsKKworCWlmIChpc2dldCkgeworCQlpZiAoIShtaWItPmZsYWcgJiBGX1JFQUQpKSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2NhbnRfZ2V0X3dyaXRlb25seV9taWI7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIShtaWItPmZsYWcgJiBGX1dSSVRFKSkgeworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9jYW50X3NldF9yZWFkb25seV9taWI7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwkvKgorCSoqIEV4ZWN1dGUgdGhlIE1JQiBmdW5jdGlvbi4gIElmIHRoaW5ncyB3b3JrZWQgb2theSwgdGhlbiBtYWtlCisJKiogc3VyZSB0aGF0IHRoZSBNSUIgZnVuY3Rpb24gYWxzbyB3b3JrZWQgb2theS4gIElmIHNvLCBhbmQgdGhpcworCSoqIGlzIGEgIm1pYmdldCIsIHRoZW4gdGhlIHN0YXR1cyB2YWx1ZSBtdXN0IGJlIHNldCBmb3IgYm90aCB0aGUKKwkqKiAibWliYXR0cmlidXRlIiBwYXJhbWV0ZXIgYW5kIHRoZSBtaWIgaXRlbSB3aXRoaW4gdGhlIGRhdGEKKwkqKiBwb3J0aW9uIG9mIHRoZSAibWliYXR0cmlidXRlIi4KKwkqLworCisJcmVzdWx0ID0gbWliLT5mdW5jKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csCisJCQkgICAodm9pZCAqKSBtaWJpdGVtLT5kYXRhKTsKKworCWlmIChtc2ctPnJlc3VsdGNvZGUuZGF0YSA9PSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykgeworCQlpZiAocmVzdWx0ICE9IDApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsICJnZXQvc2V0IGZhaWx1cmUsIHJlc3VsdD0lZFxuIiwKKwkJCQkJcmVzdWx0KTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCQkgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCX0gZWxzZSB7CisJCQlpZiAoaXNnZXQpIHsKKwkJCQltc2ctPm1pYmF0dHJpYnV0ZS5zdGF0dXMgPQorCQkJCQlQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCQkJbWliaXRlbS0+c3RhdHVzID0KKwkJCQkJUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQkJfQorCQl9CisJfQorCitkb25lOgorCURCRkVYSVQ7CisKKwlyZXR1cm4oMCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfYnl0ZXN0cjJwc3RyCisqCisqIEdldC9zZXQgcHN0ciBkYXRhIHRvL2Zyb20gYSBieXRlIHN0cmluZy4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOdW1iZXIgb2YgYnl0ZXMgb2YgUklEIGRhdGEuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9ieXRlc3RyMnBzdHIoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgICAgICAgICAgICAgcmVzdWx0OworCXA4MDIxMXBzdHJkX3QgICAgICAqcHN0ciA9IChwODAyMTFwc3RyZF90KikgZGF0YTsKKwlVSU5UOCAgICAgICAgICAgICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJaGZhMzg0eF9ieXRlc3RyX3QgICpwMmJ5dGVzdHIgPSAoaGZhMzg0eF9ieXRlc3RyX3QqKSBieXRlYnVmOworCisJREJGRU5URVI7CisKKwlpZiAoaXNnZXQpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgbWliLT5wYXJtMSwgYnl0ZWJ1ZiwgbWliLT5wYXJtMik7CisJCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKHAyYnl0ZXN0ciwgcHN0cik7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGJ5dGVidWYsIDAsIG1pYi0+cGFybTIpOworCQlwcmlzbTJtZ210X3BzdHIyYnl0ZXN0cihwMmJ5dGVzdHIsIHBzdHIpOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBtaWItPnBhcm0yKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX2J5dGVhcmVhMnBzdHIKKyoKKyogR2V0L3NldCBwc3RyIGRhdGEgdG8vZnJvbSBhIGJ5dGUgYXJlYS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOdW1iZXIgb2YgYnl0ZXMgb2YgUklEIGRhdGEuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICAgICAgICAgcmVzdWx0OworCXA4MDIxMXBzdHJkX3QgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSBkYXRhOworCVVJTlQ4ICAgICAgICAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCisJREJGRU5URVI7CisKKwlpZiAoaXNnZXQpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgbWliLT5wYXJtMSwgYnl0ZWJ1ZiwgbWliLT5wYXJtMik7CisJCXByaXNtMm1nbXRfYnl0ZWFyZWEycHN0cihieXRlYnVmLCBwc3RyLAltaWItPnBhcm0yKTsKKwl9IGVsc2UgeworCQltZW1zZXQoYnl0ZWJ1ZiwgMCwgbWliLT5wYXJtMik7CisJCXByaXNtMm1nbXRfcHN0cjJieXRlYXJlYShieXRlYnVmLCBwc3RyKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgbWliLT5wYXJtMSwgYnl0ZWJ1ZiwgbWliLT5wYXJtMik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl91aW50MzIKKyoKKyogR2V0L3NldCB1aW50MzIgZGF0YS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMigKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCVVJTlQ4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCisJREJGRU5URVI7CisKKwlpZiAoaXNnZXQpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmKTsKKwkJKnVpbnQzMiA9ICp3b3JkYnVmOworCQkvKiBbTVNNXSBSZW1vdmVkLCBnZXRjb25maWcxNiByZXR1cm5zIHRoZSB2YWx1ZSBpbiBob3N0IG9yZGVyLgorCQkgKiBwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQod29yZGJ1ZiwgdWludDMyKTsKKwkJICovCisJfSBlbHNlIHsKKwkJLyogW01TTV0gUmVtb3ZlZCwgc2V0Y29uZmlnMTYgZXhwZWN0cyBob3N0IG9yZGVyLgorCQkgKiBwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQod29yZGJ1ZiwgdWludDMyKTsKKwkJICovCisJCSp3b3JkYnVmID0gKnVpbnQzMjsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCAqd29yZGJ1Zik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl91aW50MzJhcnJheQorKgorKiBHZXQvc2V0IGFuIGFycmF5IG9mIHVpbnQzMiBkYXRhLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE51bWJlciBvZiBieXRlcyBvZiBSSUQgZGF0YS4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMmFycmF5KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiAqKSBkYXRhOworCVVJTlQ4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCWludCAgICAgaSwgY250OworCisJREJGRU5URVI7CisKKwljbnQgPSBtaWItPnBhcm0yIC8gc2l6ZW9mKFVJTlQxNik7CisKKwlpZiAoaXNnZXQpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgbWliLT5wYXJtMSwgd29yZGJ1ZiwgbWliLT5wYXJtMik7CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJCXByaXNtMm1nbXRfcHJpc20yaW50MnA4MDIxMWludCh3b3JkYnVmK2ksIHVpbnQzMitpKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspCisJCQlwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQod29yZGJ1ZitpLCB1aW50MzIraSk7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYsIG1pYi0+cGFybTIpOworCQl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3VpbnQzMm9mZnNldAorKgorKiBHZXQvc2V0IGEgc2luZ2xlIGVsZW1lbnQgaW4gYW4gYXJyYXkgb2YgdWludDMyIGRhdGEuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTnVtYmVyIG9mIGJ5dGVzIG9mIFJJRCBkYXRhLgorKiAgICAgICBwYXJtMyAgICBFbGVtZW50IGluZGV4LgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzJvZmZzZXQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKwlVSU5UMzIgICp1aW50MzIgPSAoVUlOVDMyKikgZGF0YTsKKwlVSU5UOCAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCVVJTlQxNiAgKndvcmRidWYgPSAoVUlOVDE2KikgYnl0ZWJ1ZjsKKwlVSU5UMTYgIGNudDsKKworCURCRkVOVEVSOworCisJY250ID0gbWliLT5wYXJtMiAvIHNpemVvZihVSU5UMTYpOworCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgbWliLT5wYXJtMSwgd29yZGJ1ZiwgbWliLT5wYXJtMik7CisJaWYgKHJlc3VsdCA9PSAwKSB7CisJCWlmIChpc2dldCkgeworCQkJaWYgKG1pYi0+cGFybTMgPCBjbnQpCisJCQkJcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KHdvcmRidWYrbWliLT5wYXJtMywgdWludDMyKTsKKwkJCWVsc2UKKwkJCQkqdWludDMyID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChtaWItPnBhcm0zIDwgY250KSB7CisJCQkJcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50KHdvcmRidWYrbWliLT5wYXJtMywgdWludDMyKTsKKwkJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmLCBtaWItPnBhcm0yKTsKKwkJCX0KKwkJfQorCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfdHJ1dGgKKyoKKyogR2V0L3NldCB0cnV0aCBkYXRhLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfdHJ1dGgoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKwlVSU5UMzIgICp1aW50MzIgPSAoVUlOVDMyKikgZGF0YTsKKwlVSU5UOCAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCVVJTlQxNiAgKndvcmRidWYgPSAoVUlOVDE2KikgYnl0ZWJ1ZjsKKworCURCRkVOVEVSOworCisJaWYgKGlzZ2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgd29yZGJ1Zik7CisJCSp1aW50MzIgPSAoKndvcmRidWYpID8KKwkJCQlQODAyMTFFTlVNX3RydXRoX3RydWUgOiBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCX0gZWxzZSB7CisJCSp3b3JkYnVmID0gKCgqdWludDMyKSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpID8gMSA6IDA7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgKndvcmRidWYpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfZmxhZworKgorKiBHZXQvc2V0IGEgZmxhZy4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBCaXQgdG8gZ2V0L3NldC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2ZsYWcoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKwlVSU5UMzIgICp1aW50MzIgPSAoVUlOVDMyKikgZGF0YTsKKwlVSU5UOCAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCVVJTlQxNiAgKndvcmRidWYgPSAoVUlOVDE2KikgYnl0ZWJ1ZjsKKwlVSU5UMzIgIGZsYWdzOworCisJREJGRU5URVI7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYpOworCWlmIChyZXN1bHQgPT0gMCkgeworCQkvKiBbTVNNXSBSZW1vdmVkLCBnZXRjb25maWcxNiByZXR1cm5zIHRoZSB2YWx1ZSBpbiBob3N0IG9yZGVyLgorCQkgKiBwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQod29yZGJ1ZiwgJmZsYWdzKTsKKwkJICovCisJCWZsYWdzID0gKndvcmRidWY7CisJCWlmIChpc2dldCkgeworCQkJKnVpbnQzMiA9IChmbGFncyAmIG1pYi0+cGFybTIpID8KKwkJCQlQODAyMTFFTlVNX3RydXRoX3RydWUgOiBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCQl9IGVsc2UgeworCQkJaWYgKCgqdWludDMyKSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCisJCQkJZmxhZ3MgfD0gbWliLT5wYXJtMjsKKwkJCWVsc2UKKwkJCQlmbGFncyAmPSB+bWliLT5wYXJtMjsKKwkJCS8qIFtNU01dIFJlbW92ZWQsIHNldGNvbmZpZzE2IGV4cGVjdHMgaG9zdCBvcmRlci4KKwkJCSAqIHByaXNtMm1nbXRfcDgwMjExaW50MnByaXNtMmludCh3b3JkYnVmLCAmZmxhZ3MpOworCQkJICovCisJCQkqd29yZGJ1ZiA9IGZsYWdzOworCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCAqd29yZGJ1Zik7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX2FwcGNmaW5mb2ZsYWcKKyoKKyogR2V0L3NldCBhIHNpbmdsZSBmbGFnIGluIHRoZSBBUFBDRklORk8gcmVjb3JkLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIEJpdCB0byBnZXQvc2V0LgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2FwcGNmaW5mb2ZsYWcoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKwlVSU5UMzIgICp1aW50MzIgPSAoVUlOVDMyKikgZGF0YTsKKwlVSU5UOCAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCVVJTlQxNiAgKndvcmRidWYgPSAoVUlOVDE2KikgYnl0ZWJ1ZjsKKwlVSU5UMTYgIHdvcmQ7CisKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywKKwkJCQkJYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTik7CisJaWYgKHJlc3VsdCA9PSAwKSB7CisJCWlmIChpc2dldCkgeworCQkJKnVpbnQzMiA9IChoZmEzODR4Mmhvc3RfMTYod29yZGJ1ZlszXSkgJiBtaWItPnBhcm0xKSA/CisJCQkJUDgwMjExRU5VTV90cnV0aF90cnVlIDogUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKKwkJfSBlbHNlIHsKKwkJCXdvcmQgPSBoZmEzODR4Mmhvc3RfMTYod29yZGJ1ZlszXSk7CisJCQl3b3JkID0gKCgqdWludDMyKSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpID8KKwkJCQkod29yZCB8IG1pYi0+cGFybTEpIDogKHdvcmQgJiB+bWliLT5wYXJtMSk7CisJCQl3b3JkYnVmWzNdID0gaG9zdDJoZmEzODR4XzE2KHdvcmQpOworCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLAorCQkJCQlieXRlYnVmLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOKTsKKwkJfQorCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfcmVndWxhdG9yeWRvbWFpbnMKKyoKKyogR2V0IHJlZ3VsYXRvcnkgZG9tYWluIGRhdGEuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTnVtYmVyIG9mIGJ5dGVzIG9mIFJJRCBkYXRhLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfcmVndWxhdG9yeWRvbWFpbnMoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgICAgICAgICByZXN1bHQ7CisJVUlOVDMyICAgICAgICAgY250OworCXA4MDIxMXBzdHJkX3QgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSBkYXRhOworCVVJTlQ4ICAgICAgICAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCVVJTlQxNiAgICAgICAgICp3b3JkYnVmID0gKFVJTlQxNiopIGJ5dGVidWY7CisKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IDA7CisKKwlpZiAoaXNnZXQpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgbWliLT5wYXJtMSwgd29yZGJ1ZiwgbWliLT5wYXJtMik7CisJCXByaXNtMm1nbXRfcHJpc20yaW50MnA4MDIxMWludCh3b3JkYnVmLCAmY250KTsKKwkJcHN0ci0+bGVuID0gKFVJTlQ4KSBjbnQ7CisJCW1lbWNweShwc3RyLT5kYXRhLCAmd29yZGJ1ZlsxXSwgcHN0ci0+bGVuKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3dlcGRlZmF1bHRrZXkKKyoKKyogR2V0L3NldCBXRVAgZGVmYXVsdCBrZXlzLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE51bWJlciBvZiBieXRlcyBvZiBSSUQgZGF0YS4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgICAgICAgICByZXN1bHQ7CisJcDgwMjExcHN0cmRfdCAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIGRhdGE7CisJVUlOVDggICAgICAgICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAgICAgICAgbGVuOworCisJREJGRU5URVI7CisKKwlpZiAoaXNnZXQpIHsKKwkJcmVzdWx0ID0gMDsgICAgLyogU2hvdWxkIG5ldmVyIGhhcHBlbi4gKi8KKwl9IGVsc2UgeworCQlsZW4gPSAocHN0ci0+bGVuID4gNSkgPyBIRkEzODR4X1JJRF9DTkZXRVAxMjhERUZBVUxUS0VZX0xFTiA6CisJCQkJCUhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVlfTEVOOworCQltZW1zZXQoYnl0ZWJ1ZiwgMCwgbGVuKTsKKwkJcHJpc20ybWdtdF9wc3RyMmJ5dGVhcmVhKGJ5dGVidWYsIHBzdHIpOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBsZW4pOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfcG93ZXJtYW5hZ2VtZW50CisqCisqIEdldC9zZXQgODAyLjExIHBvd2VyIG1hbmFnZW1lbnQgdmFsdWUuICBOb3RlIHRoYXQgdGhpcyBpcyBkZWZpbmVkIGRpZmZlcmVudGx5CisqIGJ5IDgwMi4xMSBhbmQgUHJpc20yOgorKgorKiAgICAgICBNZWFuaW5nICAgICA4MDIuMTEgICAgICAgUHJpc20yCisqICAgICAgICBhY3RpdmUgICAgICAgMSAgICAgICAgICAgZmFsc2UKKyogICAgICBwb3dlcnNhdmUgICAgICAyICAgICAgICAgICB0cnVlCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9wb3dlcm1hbmFnZW1lbnQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKwlVSU5UMzIgICp1aW50MzIgPSAoVUlOVDMyKikgZGF0YTsKKwlVSU5UMzIgIHZhbHVlOworCisJREJGRU5URVI7CisKKwlpZiAoaXNnZXQpIHsKKwkJcmVzdWx0ID0gcHJpc20ybWliX3VpbnQzMihtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLCAmdmFsdWUpOworCQkqdWludDMyID0gKHZhbHVlID09IDApID8gMSA6IDI7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSAoKCp1aW50MzIpID09IDEpID8gMCA6IDE7CisJCXJlc3VsdCA9IHByaXNtMm1pYl91aW50MzIobWliLCBpc2dldCwgd2xhbmRldiwgaHcsIG1zZywgJnZhbHVlKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3ByZWFtYmxlCisqCisqIEdldC9zZXQgUHJpc20yIHNob3J0IHByZWFtYmxlCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9wcmVhbWJsZSgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCVVJTlQ4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCisJREJGRU5URVI7CisKKwlpZiAoaXNnZXQpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmKTsKKwkJKnVpbnQzMiA9ICp3b3JkYnVmOworCX0gZWxzZSB7CisJCSp3b3JkYnVmID0gKnVpbnQzMjsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCAqd29yZGJ1Zik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9wcml2YWN5aW52b2tlZAorKgorKiBHZXQvc2V0IHRoZSBkb3QxMVByaXZhY3lJbnZva2VkIHZhbHVlLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIEJpdCB2YWx1ZSBmb3IgUHJpdmFjeUludm9rZWQgZmxhZy4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3ByaXZhY3lpbnZva2VkKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisKKwlEQkZFTlRFUjsKKworCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9ERUNSWVBUKSB7CisJCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9ERUNSWVBUKQorCQkJbWliLT5wYXJtMiB8PSBIRkEzODR4X1dFUEZMQUdTX0RJU0FCTEVfUlhDUllQVDsKKwkJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VOQ1JZUFQpCisJCQltaWItPnBhcm0yIHw9IEhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9UWENSWVBUOworCX0KKworCXJlc3VsdCA9IHByaXNtMm1pYl9mbGFnKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csIGRhdGEpOworCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQKKyoKKyogR2V0L3NldCB0aGUgZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQgdmFsdWUuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgQml0IHZhbHVlIGZvciBFeGNsdWRlVW5lbmNyeXB0ZWQgZmxhZy4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2V4Y2x1ZGV1bmVuY3J5cHRlZCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCisJREJGRU5URVI7CisKKwlyZXN1bHQgPSBwcmlzbTJtaWJfZmxhZyhtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLCBkYXRhKTsKKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZAorKgorKiBHZXQvc2V0IHRoZSBmcmFnbWVudGF0aW9uIHRocmVzaG9sZC4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKwlVSU5UMzIgICp1aW50MzIgPSAoVUlOVDMyKikgZGF0YTsKKworCURCRkVOVEVSOworCisJaWYgKCFpc2dldCkKKwkJaWYgKCgqdWludDMyKSAlIDIpIHsKKwkJCVdMQU5fTE9HX1dBUk5JTkcoIkF0dGVtcHQgdG8gc2V0IG9kZCBudW1iZXIgIgorCQkJCQkgICJGcmFnbWVudGF0aW9uVGhyZXNob2xkXG4iKTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCQlyZXR1cm4oMCk7CisJCX0KKworCXJlc3VsdCA9IHByaXNtMm1pYl91aW50MzIobWliLCBpc2dldCwgd2xhbmRldiwgaHcsIG1zZywgZGF0YSk7CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX29wZXJhdGlvbmFscmF0ZXNldAorKgorKiBHZXQvc2V0IHRoZSBvcGVyYXRpb25hbCByYXRlIHNldC4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX29wZXJhdGlvbmFscmF0ZXNldCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgICAgICAgIHJlc3VsdDsKKwlwODAyMTFwc3RyZF90ICAqcHN0ciA9IChwODAyMTFwc3RyZF90ICopIGRhdGE7CisJVUlOVDggICAgICAgICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAgICAgICAgKndvcmRidWYgPSAoVUlOVDE2KikgYnl0ZWJ1ZjsKKworCURCRkVOVEVSOworCisJaWYgKGlzZ2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgd29yZGJ1Zik7CisJCXByaXNtMm1nbXRfZ2V0X29wcmF0ZXNldCh3b3JkYnVmLCBwc3RyKTsKKwl9IGVsc2UgeworCQlwcmlzbTJtZ210X3NldF9vcHJhdGVzZXQod29yZGJ1ZiwgcHN0cik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgKndvcmRidWYpOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlNVUFBSQVRFUywgKndvcmRidWYpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzCisqCisqIEdldC9zZXQgdGhlIGRvdDExR3JvdXBBZGRyZXNzZXNUYWJsZS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9ncm91cGFkZHJlc3MoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgICAgICAgICByZXN1bHQ7CisJcDgwMjExcHN0cmRfdCAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCAqKSBkYXRhOworCVVJTlQ4ICAgICAgICAgIGJ5dGVidWZbTUlCX1RNUF9NQVhMRU5dOworCVVJTlQxNiAgICAgICAgIGxlbjsKKworCURCRkVOVEVSOworCisJLyogVE9ETzogZml4IHRoaXMuICBmL3cgZG9lc24ndCBzdXBwb3J0IG1jYXN0IGZpbHRlcnMgKi8KKworCWlmIChpc2dldCkgeworCQlwcmlzbTJtZ210X2dldF9ncnBhZGRyKG1pYi0+ZGlkLCBwc3RyLCBodyk7CisJCXJldHVybigwKTsKKwl9CisKKwlyZXN1bHQgPSBwcmlzbTJtZ210X3NldF9ncnBhZGRyKG1pYi0+ZGlkLCBieXRlYnVmLCBwc3RyLCBodyk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCXJldHVybihyZXN1bHQpOworCX0KKworCWlmIChody0+ZG90MTFfZ3JwY250IDw9IE1BWF9QUklTTTJfR1JQX0FERFIpIHsKKwkJbGVuID0gaHctPmRvdDExX2dycGNudCAqIFdMQU5fQUREUl9MRU47CisJCW1lbWNweShieXRlYnVmLCBody0+ZG90MTFfZ3JwX2FkZHJbMF0sIGxlbik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0dST1VQQUREUiwgYnl0ZWJ1ZiwgbGVuKTsKKworCQkvKgorCQkqKiBUdXJuIG9mZiBwcm9taXNjdW91cyBtb2RlIGlmIGNvdW50IGlzIGVxdWFsIHRvIE1BWC4gIFdlIG1heQorCQkqKiBoYXZlIGJlZW4gYXQgYSBoaWdoZXIgY291bnQgaW4gcHJvbWlzY3VvdXMgbW9kZSBhbmQgbmVlZCB0bworCQkqKiB0dXJuIGl0IG9mZi4KKwkJKi8KKworCQkvKiBidXQgb25seSBpZiB3ZSdyZSBub3QgYWxyZWFkeSBpbiBwcm9taXNjIG1vZGUuIDopICovCisJCWlmICgoaHctPmRvdDExX2dycGNudCA9PSBNQVhfUFJJU00yX0dSUF9BRERSKSAmJgorCQkgICAgISggd2xhbmRldi0+bmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSkgeworCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAorCQkJCQkgICAgIEhGQTM4NHhfUklEX1BST01JU0NNT0RFLCAwKTsKKwkJfQorCX0gZWxzZSB7CisKKwkJLyoKKwkJKiogQ2xlYXIgZ3JvdXAgYWRkcmVzc2VzIGluIGNhcmQgYW5kIHNldCB0byBwcm9taXNjdW91cyBtb2RlLgorCQkqLworCisJCW1lbXNldChieXRlYnVmLCAwLCBzaXplb2YoYnl0ZWJ1ZikpOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9HUk9VUEFERFIsCisJCQkJCQlieXRlYnVmLCAwKTsKKwkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCisJCQkJCUhGQTM4NHhfUklEX1BST01JU0NNT0RFLCAxKTsKKwkJfQorCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfZndpZAorKgorKiBHZXQgdGhlIGZpcm13YXJlIElELgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2Z3aWQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgICAgICAgICAgcmVzdWx0OworCXA4MDIxMXBzdHJkX3QgICAqcHN0ciA9IChwODAyMTFwc3RyZF90ICopIGRhdGE7CisJaGZhMzg0eF9GV0lEX3QgIGZ3aWQ7CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9GV0lELAorCQkJCQkJJmZ3aWQsIEhGQTM4NHhfUklEX0ZXSURfTEVOKTsKKwkJaWYgKG1pYi0+ZGlkID09IERJRG1pYl9wMl9wMk5JQ19wMlByaW1hcnlGV0lEKSB7CisJCQlmd2lkLnByaW1hcnlbSEZBMzg0eF9GV0lEX0xFTiAtIDFdID0gJ1wwJzsKKwkJCXBzdHItPmxlbiA9IHN0cmxlbihmd2lkLnByaW1hcnkpOworCQkJbWVtY3B5KHBzdHItPmRhdGEsIGZ3aWQucHJpbWFyeSwgcHN0ci0+bGVuKTsKKwkJfSBlbHNlIHsKKwkJCWZ3aWQuc2Vjb25kYXJ5W0hGQTM4NHhfRldJRF9MRU4gLSAxXSA9ICdcMCc7CisJCQlwc3RyLT5sZW4gPSBzdHJsZW4oZndpZC5zZWNvbmRhcnkpOworCQkJbWVtY3B5KHBzdHItPmRhdGEsIGZ3aWQuc2Vjb25kYXJ5LCBwc3RyLT5sZW4pOworCQl9CisJfSBlbHNlCisJCXJlc3VsdCA9IDA7ICAgICAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLiAqLworCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9hdXRoYWxnCisqCisqIEdldCB2YWx1ZXMgZnJvbSB0aGUgQXVodGVudGljYXRpb25BbGdvcml0aG1zVGFibGUuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgVGFibGUgaW5kZXggKDEtNikuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfYXV0aGFsZygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCisJREJGRU5URVI7CisKKwkvKiBNU006IHBreCBzdXBwbGllZCBjb2RlIHRoYXQgIGNvZGUgcXVlcmllcyBSSUQgRkQ0RC4uLi5idXQgdGhlIGYvdydzCisgICAgICAgICAqICByZXN1bHRzIGFyZSBib2d1cy4gVGhlcmVmb3JlLCB3ZSBoYXZlIHRvIHNpbXVsYXRlIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgKiAgcmVzdWx0cyBoZXJlIGluIHRoZSBkcml2ZXIgYmFzZWQgb24gb3VyIGtub3dsZWRnZSBvZiBleGlzdGluZyBNQUMKKyAgICAgICAgICogIGZlYXR1cmVzLiAgVGhhdCdzIHRoZSB3aG9sZSBwb2ludCBiZWhpbmQgdGhpcyB1Z2x5IGZ1bmN0aW9uLgorICAgICAgICAgKi8KKworCWlmIChpc2dldCkgeworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQlzd2l0Y2ggKG1pYi0+cGFybTEpIHsKKwkJCWNhc2UgMTogLyogT3BlbiBTeXN0ZW0gKi8KKwkJCQkqdWludDMyID0gUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW07CisJCQkJYnJlYWs7CisJCQljYXNlIDI6IC8qIFNoYXJlZEtleSAqLworCQkJCSp1aW50MzIgPSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkqdWludDMyID0gMDsKKwkJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQkJCWJyZWFrOworCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4oMCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfYXV0aGFsZ2VuYWJsZQorKgorKiBHZXQvc2V0IHRoZSBlbmFibGUgdmFsdWVzIGZyb20gdGhlIEF1aHRlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFRhYmxlIGluZGV4ICgxLTYpLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2F1dGhhbGdlbmFibGUoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKwlVSU5UMzIgICp1aW50MzIgPSAoVUlOVDMyKikgZGF0YTsKKworCWludCAgICAgaW5kZXg7CisJVUlOVDE2ICBjbmZfYXV0aDsKKwlVSU5UMTYJbWFzazsKKworCURCRkVOVEVSOworCisJaW5kZXggPSBtaWItPnBhcm0xIC0gMTsKKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNiggaHcsCisJCQlIRkEzODR4X1JJRF9DTkZBVVRIRU5USUNBVElPTiwgJmNuZl9hdXRoKTsKKwlXTEFOX0xPR19ERUJVRygyLCJjbmZBdXRoZW50aWNhdGlvbjA9JWQsIGluZGV4PSVkXG4iLCBjbmZfYXV0aCwgaW5kZXgpOworCisJaWYgKGlzZ2V0KSB7CisJCWlmICggaW5kZXggPT0gMCB8fCBpbmRleCA9PSAxICkgeworCQkJKnVpbnQzMiA9IChjbmZfYXV0aCAmICgxPDxpbmRleCkpID8KKwkJCQlQODAyMTFFTlVNX3RydXRoX3RydWU6IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJCX0gZWxzZSB7CisJCQkqdWludDMyID0gUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIGluZGV4ID09IDAgfHwgaW5kZXggPT0gMSApIHsKKwkJCW1hc2sgPSAxIDw8IGluZGV4OworCQkJaWYgKCp1aW50MzI9PVA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSApIHsKKwkJCQljbmZfYXV0aCB8PSBtYXNrOworCQkJfSBlbHNlIHsKKwkJCQljbmZfYXV0aCAmPSB+bWFzazsKKwkJCX0KKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNiggaHcsCisJCQkJCUhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OLCBjbmZfYXV0aCk7CisJCQlXTEFOX0xPR19ERUJVRygyLCJjbmZBdXRoZW50aWNhdGlvbjo9JWRcbiIsIGNuZl9hdXRoKTsKKwkJCWlmICggcmVzdWx0ICkgeworCQkJCVdMQU5fTE9HX0RFQlVHKDEsIlVuYWJsZSB0byBzZXQgcDJjbmZBdXRoZW50aWNhdGlvbiB0byAlZFxuIiwgY25mX2F1dGgpOworCQkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQl9CisJCX0gZWxzZSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOworCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9wcml2CisqCisqIEdldC9zZXQgdmFsdWVzIGluIHRoZSAicHJpdiIgZGF0YSBzdHJ1Y3R1cmUuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdigKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCVVJTlQzMiAgICAgICAgICAgICp1aW50MzIgPSAoVUlOVDMyKikgZGF0YTsKKwlwODAyMTFwc3RyZF90ICAgICAqcHN0ciA9IChwODAyMTFwc3RyZF90KikgZGF0YTsKKwlwODAyMTFtYWNhcnJheV90ICAqbWFjYXJyYXkgPSAocDgwMjExbWFjYXJyYXlfdCAqKSBkYXRhOworCisJaW50ICBpLCBjbnQsIHJlc3VsdCwgZG9uZTsKKworCXByaXNtMnN0YV9hdXRobGlzdF90ICBvbGQ7CisKKwkvKgorCSoqICJ0ZXN0IiBpcyBhIGxvdCBsb25nZXIgdGhhbiBuZWNlc3NhcnkgYnV0IHdobyBjYXJlcz8gIC4uLmFzIGxvbmcgYXMKKwkqKiBpdCBpcyBsb25nIGVub3VnaCEKKwkqLworCisJVUlOVDggIHRlc3Rbc2l6ZW9mKHdsYW5kZXYtPnJ4KSArIHNpemVvZihody0+dGFsbGllcyldOworCisJREJGRU5URVI7CisKKwlzd2l0Y2ggKG1pYi0+ZGlkKSB7CisJY2FzZSBESURtaWJfcDJfcDJUYWJsZV9wMlJlY2VpdmVkRnJhbWVTdGF0aXN0aWNzOgorCisJCS8qCisJCSoqIE5vdGU6IFRoZSB2YWx1ZXMgaW4gdGhpcyByZWNvcmQgYXJlIGNoYW5nZWQgYnkgdGhlCisJCSoqIGludGVycnVwdCBoYW5kbGVyIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGd1YXJhbnRlZWQKKwkJKiogdG8gYmUgc3RhYmxlIHdoaWxlIHRoZXkgYXJlIGJlaW5nIGNvcGllZC4gIEhvd2V2ZXIsCisJCSoqIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIHRha2UgcHJpb3JpdHkgb3ZlciB0aGlzCisJCSoqIGNvZGUuICBIZW5jZSwgaWYgdGhlIHNhbWUgdmFsdWVzIGFyZSBjb3BpZWQgdHdpY2UsCisJCSoqIHRoZW4gd2UgYXJlIGVuc3VyZWQgdGhhdCB0aGUgdmFsdWVzIGhhdmUgbm90IGJlZW4KKwkJKiogY2hhbmdlZC4gIElmIHRoZXkgaGF2ZSwgdGhlbiBqdXN0IHRyeSBhZ2Fpbi4gIERvbid0CisJCSoqIHRyeSBtb3JlIHRoYW4gMTAgdGltZXMuLi5pZiB3ZSBzdGlsbCBoYXZlbid0IGdvdCBpdCwKKwkJKiogdGhlbiB0aGUgdmFsdWVzIHdlIGRvIGhhdmUgYXJlIHByb2JhYmx5IGdvb2QgZW5vdWdoLgorCQkqKiBUaGlzIHNjaGVtZSBmb3IgY29weWluZyB2YWx1ZXMgaXMgdXNlZCBpbiBvcmRlciB0bworCQkqKiBwcmV2ZW50IGhhdmluZyB0byBibG9jayB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2hpbGUKKwkJKiogd2UgY29weSB0aGUgdmFsdWVzLgorCQkqLworCisJCWlmIChpc2dldCkKKwkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQkJbWVtY3B5KGRhdGEsICZ3bGFuZGV2LT5yeCwgc2l6ZW9mKHdsYW5kZXYtPnJ4KSk7CisJCQkJbWVtY3B5KHRlc3QsICZ3bGFuZGV2LT5yeCwgc2l6ZW9mKHdsYW5kZXYtPnJ4KSk7CisJCQkJaWYgKG1lbWNtcChkYXRhLCB0ZXN0LCBzaXplb2Yod2xhbmRldi0+cngpKSA9PSAwKSBicmVhazsKKwkJCX0KKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJDb21tdW5pY2F0aW9uVGFsbGllczoKKworCQkvKgorCQkqKiBOb3RlOiBUaGUgdmFsdWVzIGluIHRoaXMgcmVjb3JkIGFyZSBjaGFuZ2VkIGJ5IHRoZQorCQkqKiBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBndWFyYW50ZWVkCisJCSoqIHRvIGJlIHN0YWJsZSB3aGlsZSB0aGV5IGFyZSBiZWluZyBjb3BpZWQuICBTZWUgdGhlCisJCSoqIG5vdGUgYWJvdmUgYWJvdXQgY29weWluZyB2YWx1ZXMuCisJCSovCisKKwkJaWYgKGlzZ2V0KSB7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfY29tbXRhbGxpZXMoaHcpOworCisJCQkvKiA/Pz8/Pz8gV2UgbmVlZCB0byB3YWl0IGEgYml0IGhlcmUgZm9yIHRoZSAqLworCQkJLyogICB0YWxsaWVzIHRvIGdldCB1cGRhdGVkLiA/Pz8/Pz8gKi8KKwkJCS8qIE1TTTogVE9ETzogVGhlIHJpZ2h0IHdheSB0byBkbyB0aGlzIGlzIHRvCisJCQkgKiAgICAgIGFkZCBhICJjb21tdGFsbGllIiB3YWl0IHF1ZXVlIHRvIHRoZQorCQkJICogICAgICBwcml2IHN0cnVjdHVyZSB0aGF0IGdldHMgcnVuIGV2ZXJ5IHRpbWUKKwkJCSAqICAgICAgd2UgcmVjZWl2ZSBhIGNvbW10YWxseSBpbmZvIGZyYW1lLgorCQkJICogICAgICBUaGlzIHByb2Nlc3Mgd291bGQgc2xlZXAgb24gdGhhdAorCQkJICogICAgICBxdWV1ZSBhbmQgZ2V0IGF3YWtlbmVkIHdoZW4gdGhlCisJCQkgKiAgICAgIHRoZSByZXF1ZXN0ZWQgaW5mbyBmcmFtZSBhcnJpdmVzLgorCQkJICogICAgICBEb24ndCBoYXZlIHRpbWUgdG8gZG8gYW5kIHRlc3QgdGhpcworCQkJICogICAgICByaWdodCBub3cuCisJCQkgKi8KKworCQkJLyogVWdoLCB0aGlzIGlzIG5hc3R5LiAqLworCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCQltZW1jcHkoZGF0YSwKKwkJCQkgICAgICAgJmh3LT50YWxsaWVzLAorCQkJCSAgICAgICBzaXplb2YoaHctPnRhbGxpZXMpKTsKKwkJCQltZW1jcHkodGVzdCwKKwkJCQkgICAgICAgJmh3LT50YWxsaWVzLAorCQkJCSAgICAgICBzaXplb2YoaHctPnRhbGxpZXMpKTsKKwkJCQlpZiAoIG1lbWNtcChkYXRhLAorCQkJCQkgICAgdGVzdCwKKwkJCQkJICAgIHNpemVvZihody0+dGFsbGllcykpID09IDApCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9wMl9wMlRhYmxlX3AyQXV0aGVudGljYXRlZDoKKworCQlpZiAoaXNnZXQpIHsKKwkJCXByaXNtMm1pYl9wcml2X2F1dGhsaXN0KGh3LCAmb2xkKTsKKworCQkJbWFjYXJyYXktPmNudCA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgb2xkLmNudDsgaSsrKSB7CisJCQkJaWYgKCFvbGQuYXNzb2NbaV0pIHsKKwkJCQkJbWVtY3B5KG1hY2FycmF5LT5kYXRhW21hY2FycmF5LT5jbnRdLCBvbGQuYWRkcltpXSwgV0xBTl9BRERSX0xFTik7CisJCQkJCW1hY2FycmF5LT5jbnQrKzsKKwkJCQl9CisJCQl9CisJCX0KKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJBc3NvY2lhdGVkOgorCisJCWlmIChpc2dldCkgeworCQkJcHJpc20ybWliX3ByaXZfYXV0aGxpc3QoaHcsICZvbGQpOworCisJCQltYWNhcnJheS0+Y250ID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCBvbGQuY250OyBpKyspIHsKKwkJCQlpZiAob2xkLmFzc29jW2ldKSB7CisJCQkJCW1lbWNweShtYWNhcnJheS0+ZGF0YVttYWNhcnJheS0+Y250XSwgb2xkLmFkZHJbaV0sIFdMQU5fQUREUl9MRU4pOworCQkJCQltYWNhcnJheS0+Y250Kys7CisJCQkJfQorCQkJfQorCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9wMl9wMlRhYmxlX3AyUG93ZXJTYXZlVXNlckNvdW50OgorCisJCWlmIChpc2dldCkKKwkJCSp1aW50MzIgPSBody0+cHN1c2VyY291bnQ7CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9wMl9wMlRhYmxlX3AyQ29tbWVudDoKKworCQlpZiAoaXNnZXQpIHsKKwkJCXBzdHItPmxlbiA9IHN0cmxlbihody0+Y29tbWVudCk7CisJCQltZW1jcHkocHN0ci0+ZGF0YSwgaHctPmNvbW1lbnQsIHBzdHItPmxlbik7CisJCX0gZWxzZSB7CisJCQljbnQgPSBwc3RyLT5sZW47CisJCQlpZiAoY250IDwgMCkgY250ID0gMDsKKwkJCWlmIChjbnQgPj0gc2l6ZW9mKGh3LT5jb21tZW50KSkKKwkJCQljbnQgPSBzaXplb2YoaHctPmNvbW1lbnQpLTE7CisJCQltZW1jcHkoaHctPmNvbW1lbnQsIHBzdHItPmRhdGEsIGNudCk7CisJCQlwc3RyLT5kYXRhW2NudF0gPSAnXDAnOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9wMl9wMlRhYmxlX3AyQWNjZXNzTW9kZToKKworCQlpZiAoaXNnZXQpCisJCQkqdWludDMyID0gaHctPmFjY2Vzc21vZGU7CisJCWVsc2UKKwkJCXByaXNtMm1pYl9wcml2X2FjY2Vzc21vZGUoaHcsICp1aW50MzIpOworCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfcDJfcDJUYWJsZV9wMkFjY2Vzc0FsbG93OgorCisJCWlmIChpc2dldCkgeworCQkJbWFjYXJyYXktPmNudCA9IGh3LT5hbGxvdy5jbnQ7CisJCQltZW1jcHkobWFjYXJyYXktPmRhdGEsIGh3LT5hbGxvdy5hZGRyLAorCQkJICAgICAgIG1hY2FycmF5LT5jbnQqV0xBTl9BRERSX0xFTik7CisJCX0gZWxzZSB7CisJCQlwcmlzbTJtaWJfcHJpdl9hY2Nlc3NhbGxvdyhodywgbWFjYXJyYXkpOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9wMl9wMlRhYmxlX3AyQWNjZXNzRGVueToKKworCQlpZiAoaXNnZXQpIHsKKwkJCW1hY2FycmF5LT5jbnQgPSBody0+ZGVueS5jbnQ7CisJCQltZW1jcHkobWFjYXJyYXktPmRhdGEsIGh3LT5kZW55LmFkZHIsCisJCQkgICAgICAgbWFjYXJyYXktPmNudCpXTEFOX0FERFJfTEVOKTsKKwkJfSBlbHNlIHsKKwkJCXByaXNtMm1pYl9wcml2X2FjY2Vzc2RlbnkoaHcsIG1hY2FycmF5KTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfcDJfcDJUYWJsZV9wMkNoYW5uZWxJbmZvUmVzdWx0czoKKworCQlpZiAoaXNnZXQpIHsKKwkJCWRvbmUgPSBhdG9taWNfcmVhZCgmaHctPmNoYW5uZWxfaW5mby5kb25lKTsKKwkJCWlmIChkb25lID09IDApIHsKKwkJCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChkb25lID09IDEpIHsKKwkJCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbmNvbXBsZXRlX2l0ZW1kYXRhOworCQkJCWJyZWFrOworCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKywgdWludDMyICs9IDUpIHsKKwkJCQl1aW50MzJbMF0gPSBpKzE7CisJCQkJdWludDMyWzFdID0gaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtpXS5hbmw7CisJCQkJdWludDMyWzJdID0gaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtpXS5wbmw7CisJCQkJdWludDMyWzNdID0gKGh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5yZXN1bHRbaV0uYWN0aXZlICYgSEZBMzg0eF9DSElORk9SRVNVTFRfQlNTQUNUSVZFKSA/IDEgOiAwOworCQkJCXVpbnQzMls0XSA9IChody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2ldLmFjdGl2ZSAmIEhGQTM4NHhfQ0hJTkZPUkVTVUxUX1BDRkFDVElWRSkgPyAxIDogMDsKKwkJCX0KKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEZXNpcmVkQlNTVHlwZToKKworCQlpZiAoaXNnZXQpCisJCQkqdWludDMyID0gaHctPmRvdDExX2Rlc2lyZWRfYnNzX3R5cGU7CisJCWVsc2UKKwkJCWh3LT5kb3QxMV9kZXNpcmVkX2Jzc190eXBlID0gKnVpbnQzMjsKKworCQlicmVhazsKKworCWNhc2UgRElEbWliX2xueF9sbnhDb25maWdUYWJsZV9sbnhSU05BSUU6IHsKKwkJaGZhMzg0eF9XUEFEYXRhX3Qgd3BhOworCQlpZiAoaXNnZXQpIHsKKwkJCWhmYTM4NHhfZHJ2cl9nZXRjb25maWcoIGh3LCBIRkEzODR4X1JJRF9DTkZXUEFEQVRBLAorCQkJCQkJKFVJTlQ4ICopICZ3cGEsIHNpemVvZih3cGEpKTsKKwkJCXBzdHItPmxlbiA9IGhmYTM4NHgyaG9zdF8xNih3cGEuZGF0YWxlbik7CisJCQltZW1jcHkocHN0ci0+ZGF0YSwgd3BhLmRhdGEsIHBzdHItPmxlbik7CisJCX0gZWxzZSB7CisJCQl3cGEuZGF0YWxlbiA9IGhvc3QyaGZhMzg0eF8xNihwc3RyLT5sZW4pOworCQkJbWVtY3B5KHdwYS5kYXRhLCBwc3RyLT5kYXRhLCBwc3RyLT5sZW4pOworCisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DTkZXUEFEQVRBLAorCQkJCShVSU5UOCAqKSAmd3BhLCBzaXplb2Yod3BhKSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCVdMQU5fTE9HX0VSUk9SKCJVbmhhbmRsZWQgRElEIDB4JTA4eFxuIiwgbWliLT5kaWQpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3ByaXZfYXV0aGxpc3QKKyoKKyogR2V0IGEgY29weSBvZiB0aGUgbGlzdCBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGxpc3QgICAgIExpc3Qgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4KKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHByaXNtMm1pYl9wcml2X2F1dGhsaXN0KAoraGZhMzg0eF90ICAgICAgICAgICAgICpodywKK3ByaXNtMnN0YV9hdXRobGlzdF90ICAqbGlzdCkKK3sKKwlwcmlzbTJzdGFfYXV0aGxpc3RfdCAgdGVzdDsKKwlpbnQgICAgICAgICAgICAgICAgICAgaTsKKworCURCRkVOVEVSOworCisJLyoKKwkqKiBOb3RlOiBUaGUgdmFsdWVzIGluIHRoaXMgcmVjb3JkIGFyZSBjaGFuZ2VkIGJ5IHRoZSBpbnRlcnJ1cHQKKwkqKiBoYW5kbGVyIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlIHdoaWxlCisJKiogdGhleSBhcmUgYmVpbmcgY29waWVkLiAgSG93ZXZlciwgdGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwKKwkqKiB0YWtlIHByaW9yaXR5IG92ZXIgdGhpcyBjb2RlLiAgSGVuY2UsIGlmIHRoZSBzYW1lIHZhbHVlcyBhcmUKKwkqKiBjb3BpZWQgdHdpY2UsIHRoZW4gd2UgYXJlIGVuc3VyZWQgdGhhdCB0aGUgdmFsdWVzIGhhdmUgbm90CisJKiogYmVlbiBjaGFuZ2VkLiAgSWYgdGhleSBoYXZlLCB0aGVuIGp1c3QgdHJ5IGFnYWluLiAgRG9uJ3QgdHJ5CisJKiogbW9yZSB0aGFuIDEwIHRpbWVzLi4udGhlIGxpc3Qgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucyBpcworCSoqIHVubGlrZWx5IHRvIGJlIGNoYW5naW5nIGZyZXF1ZW50bHkgZW5vdWdoIHRoYXQgd2UgY2FuJ3QgZ2V0CisJKiogYSBzbmFwc2hvdCBpbiAxMCB0cmllcy4gIERvbid0IHRyeSBtb3JlIHRoYW4gdGhpcyBzbyB0aGF0IHdlCisJKiogZG9uJ3QgcmlzayBsb2NraW5nLXVwIGZvciBsb25nIHBlcmlvZHMgb2YgdGltZS4gIElmIHdlIHN0aWxsCisJKiogaGF2ZW4ndCBnb3QgdGhlIHNuYXBzaG90LCB0aGVuIGdlbmVyYXRlIGFuIGVycm9yIG1lc3NhZ2UgYW5kCisJKiogcmV0dXJuIGFuIGVtcHR5IGxpc3QgKHNpbmNlIHRoaXMgaXMgdGhlIG9ubHkgdmFsaWQgbGlzdCB0aGF0CisJKiogd2UgY2FuIGd1YXJlbnRlZSkuICBUaGlzIHNjaGVtZSBmb3IgY29weWluZyB2YWx1ZXMgaXMgdXNlZCBpbgorCSoqIG9yZGVyIHRvIHByZXZlbnQgaGF2aW5nIHRvIGJsb2NrIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aGlsZQorCSoqIHdlIGNvcHkgdGhlIHZhbHVlcy4KKwkqLworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJbWVtY3B5KGxpc3QsICZody0+YXV0aGxpc3QsIHNpemVvZihwcmlzbTJzdGFfYXV0aGxpc3RfdCkpOworCQltZW1jcHkoJnRlc3QsICZody0+YXV0aGxpc3QsIHNpemVvZihwcmlzbTJzdGFfYXV0aGxpc3RfdCkpOworCQlpZiAobWVtY21wKGxpc3QsICZ0ZXN0LCBzaXplb2YocHJpc20yc3RhX2F1dGhsaXN0X3QpKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPj0gMTApIHsKKwkJbGlzdC0+Y250ID0gMDsKKwkJV0xBTl9MT0dfRVJST1IoIkNvdWxkIG5vdCBvYnRhaW4gc25hcHNob3Qgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy5cbiIpOworCQl9CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9wcml2X2FjY2Vzc21vZGUKKyoKKyogU2V0IHRoZSBBY2Nlc3MgTW9kZS4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbW9kZSAgICAgTmV3IGFjY2VzcyBtb2RlLgorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcHJpc20ybWliX3ByaXZfYWNjZXNzbW9kZSgKK2hmYTM4NHhfdCAgICAgICAgICpodywKK1VJTlQzMiAgICAgICAgICAgIG1vZGUpCit7CisJcHJpc20yc3RhX2F1dGhsaXN0X3QgIG9sZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgaSwgaiwgZGVhdXRoOworCVVJTlQ4ICAgICAgICAgICAgICAgICAqYWRkcjsKKworCURCRkVOVEVSOworCisJLyoKKwkqKiBJZiB0aGUgbW9kZSBpcyBub3QgY2hhbmdpbmcgb3IgaXQgaXMgY2hhbmdpbmcgdG8gIkFsbCIsIHRoZW4gaXQncworCSoqIG9rYXkgdG8gZ28gYWhlYWQgd2l0aG91dCBhIGxvdCBvZiBtZXNzaW5nIGFyb3VuZC4gIE90aGVyd2lzZSwgdGhlCisJKiogYWNjZXNzIG1vZGUgaXMgY2hhbmdpbmcgaW4gYSB3YXkgdGhhdCBtYXkgbGVhdmUgc29tZSBzdGF0aW9ucworCSoqIGF1dGhlbnRpY2F0ZWQgd2hpY2ggc2hvdWxkIG5vdCBiZSBhdXRoZW50aWNhdGVkLiAgSXQgd2lsbCBiZQorCSoqIG5lY2Vzc2FyeSB0byBkZS1hdXRoZW50aWNhdGUgdGhlc2Ugc3RhdGlvbnMuCisJKi8KKworCWlmIChtb2RlID09IFdMQU5fQUNDRVNTX0FMTCB8fCBtb2RlID09IGh3LT5hY2Nlc3Ntb2RlKSB7CisJCWh3LT5hY2Nlc3Ntb2RlID0gbW9kZTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJKiogU3dpdGNoIHRvIHRoZSBuZXcgYWNjZXNzIG1vZGUuICBPbmNlIHRoaXMgaXMgZG9uZSwgdGhlbiB0aGUgaW50ZXJydXB0CisJKiogaGFuZGxlciAod2hpY2ggdXNlcyB0aGlzIHZhbHVlKSB3aWxsIGJlIHByZXZlbnRlZCBmcm9tIGF1dGhlbnRpY2F0aW5nCisJKiogQURESVRJT05BTCBzdGF0aW9ucyB3aGljaCBzaG91bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQuICBUaGVuIGdldCBhCisJKiogY29weSBvZiB0aGUgY3VycmVudCBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMuCisJKi8KKworCWh3LT5hY2Nlc3Ntb2RlID0gbW9kZTsKKworCXByaXNtMm1pYl9wcml2X2F1dGhsaXN0KGh3LCAmb2xkKTsKKworCS8qCisJKiogTm93IGdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgcHJldmlvdXNseSBhdXRoZW50aWNhdGVkIHN0YXRpb25zIChzb21lCisJKiogb2Ygd2hpY2ggbWlnaHQgZGUtYXV0aGVudGljYXRlIHRoZW1zZWx2ZXMgd2hpbGUgd2UgYXJlIHByb2Nlc3NpbmcgaXQKKwkqKiBidXQgdGhhdCBpcyBva2F5KS4gIEFueSBzdGF0aW9uIHdoaWNoIG5vIGxvbmdlciBtYXRjaGVzIHRoZSBhY2Nlc3MKKwkqKiBtb2RlLCBtdXN0IGJlIGRlLWF1dGhlbnRpY2F0ZWQuCisJKi8KKworCWZvciAoaSA9IDA7IGkgPCBvbGQuY250OyBpKyspIHsKKwkJYWRkciA9IG9sZC5hZGRyW2ldOworCisJCWlmIChtb2RlID09IFdMQU5fQUNDRVNTX05PTkUpCisJCQlkZWF1dGggPSAxOworCQllbHNlIHsKKwkJCWlmIChtb2RlID09IFdMQU5fQUNDRVNTX0FMTE9XKSB7CisJCQkJZm9yIChqID0gMDsgaiA8IGh3LT5hbGxvdy5jbnQ7IGorKykKKwkJCQkJaWYgKG1lbWNtcChhZGRyLCBody0+YWxsb3cuYWRkcltqXSwKKwkJCQkJCQlXTEFOX0FERFJfTEVOKSA9PSAwKQorCQkJCQkJYnJlYWs7CisJCQkJZGVhdXRoID0gKGogPj0gaHctPmFsbG93LmNudCk7CisJCQl9IGVsc2UgeworCQkJCWZvciAoaiA9IDA7IGogPCBody0+ZGVueS5jbnQ7IGorKykKKwkJCQkJaWYgKG1lbWNtcChhZGRyLCBody0+ZGVueS5hZGRyW2pdLAorCQkJCQkJCVdMQU5fQUREUl9MRU4pID09IDApCisJCQkJCQlicmVhazsKKwkJCQlkZWF1dGggPSAoaiA8IGh3LT5kZW55LmNudCk7CisJCQl9CisJCX0KKworCQlpZiAoZGVhdXRoKSBwcmlzbTJtaWJfcHJpdl9kZWF1dGhlbnRpY2F0ZShodywgYWRkcik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfcHJpdl9hY2Nlc3NhbGxvdworKgorKiBDaGFuZ2UgdGhlIGxpc3Qgb2YgYWxsb3dlZCBNQUMgYWRkcmVzc2VzLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIHByaXYgICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1hY2FycmF5ICBOZXcgYXJyYXkgb2YgTUFDIGFkZHJlc3Nlcy4KKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHByaXNtMm1pYl9wcml2X2FjY2Vzc2FsbG93KAoraGZhMzg0eF90ICAgICAgICAgKmh3LAorcDgwMjExbWFjYXJyYXlfdCAgKm1hY2FycmF5KQoreworCXByaXNtMnN0YV9hdXRobGlzdF90ICBvbGQ7CisJaW50ICAgICAgICAgICAgICAgICAgIGksIGo7CisKKwlEQkZFTlRFUjsKKworCS8qCisJKiogQ2hhbmdlIHRoZSBhY2Nlc3MgbGlzdC4gIE5vdGUgdGhhdCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbWF5IGJlIGluCisJKiogdGhlIG1pZGRsZSBvZiB1c2luZyB0aGUgYWNjZXNzIGxpc3QhISEgIFNpbmNlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgorCSoqIHdpbGwJYWx3YXlzIGhhdmUgcHJpb3JpdHkgb3ZlciB0aGlzIHByb2Nlc3MgYW5kIHRoaXMgaXMgdGhlIG9ubHkKKwkqKiBwcm9jZXNzIHRoYXQgd2lsbCBtb2RpZnkgdGhlIGxpc3QsIHRoaXMgcHJvYmxlbSBjYW4gYmUgaGFuZGxlZCBhcworCSoqIGZvbGxvd3M6CisJKioKKwkqKiAgICAxLiBTZXQgdGhlICJtb2RpZnkiIGZsYWcuCisJKiogICAgMi4gQ2hhbmdlIHRoZSBmaXJzdCBjb3B5IG9mIHRoZSBsaXN0LgorCSoqICAgIDMuIENsZWFyIHRoZSAibW9kaWZ5IiBmbGFnLgorCSoqICAgIDQuIENoYW5nZSB0aGUgYmFja3VwIGNvcHkgb2YgdGhlIGxpc3QuCisJKioKKwkqKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgd2lsbCBjaGVjayB0aGUgIm1vZGlmeSIgZmxhZy4gIElmIE5PVCBzZXQsIHRoZW4KKwkqKiB0aGUgZmlyc3QgY29weSBvZiB0aGUgbGlzdCBpcyB2YWxpZCBhbmQgbWF5IGJlIHVzZWQuICBPdGhlcndpc2UsIHRoZQorCSoqIGZpcnN0IGNvcHkgaXMgYmVpbmcgY2hhbmdlZCBidXQgdGhlIGJhY2t1cCBjb3B5IGlzIHZhbGlkIGFuZCBtYXkgYmUKKwkqKiB1c2VkLiAgRG9pbmcgdGhpbmdzIHRoaXMgd2F5IHByZXZlbnRzIGhhdmluZyB0byBoYXZlIHRoZSBpbnRlcnJ1cHQKKwkqKiBoYW5kbGVyIGJsb2NrIHdoaWxlIHRoZSBsaXN0IGlzIGJlaW5nIHVwZGF0ZWQuCisJKi8KKworCWh3LT5hbGxvdy5tb2RpZnkgPSAxOworCisJaHctPmFsbG93LmNudCA9IG1hY2FycmF5LT5jbnQ7CisJbWVtY3B5KGh3LT5hbGxvdy5hZGRyLCBtYWNhcnJheS0+ZGF0YSwgbWFjYXJyYXktPmNudCpXTEFOX0FERFJfTEVOKTsKKworCWh3LT5hbGxvdy5tb2RpZnkgPSAwOworCisJaHctPmFsbG93LmNudDEgPSBtYWNhcnJheS0+Y250OworCW1lbWNweShody0+YWxsb3cuYWRkcjEsIG1hY2FycmF5LT5kYXRhLCBtYWNhcnJheS0+Y250KldMQU5fQUREUl9MRU4pOworCisJLyoKKwkqKiBJZiB0aGUgY3VycmVudCBhY2Nlc3MgbW9kZSBpcyAiQWxsb3ciLCB0aGVuIGNoYW5naW5nIHRoZSBhY2Nlc3MKKwkqKiBsaXN0IG1heSBsZWF2ZSBzb21lIHN0YXRpb25zIGF1dGhlbnRpY2F0ZWQgd2hpY2ggc2hvdWxkIG5vdCBiZQorCSoqIGF1dGhlbnRpY2F0ZWQuICBJdCB3aWxsIGJlIG5lY2Vzc2FyeSB0byBkZS1hdXRoZW50aWNhdGUgdGhlc2UKKwkqKiBzdGF0aW9ucy4gIE90aGVyd2lzZSwgdGhlIGxpc3QgY2FuIGJlIGNoYW5nZWQgd2l0aG91dCBhIGxvdCBvZiBmdXNzLgorCSovCisKKwlpZiAoaHctPmFjY2Vzc21vZGUgPT0gV0xBTl9BQ0NFU1NfQUxMT1cpIHsKKworCQkvKgorCQkqKiBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMgKHNvbWUgb2YKKwkJKiogd2hpY2ggbWlnaHQgZGUtYXV0aGVudGljYXRlIHRoZW1zZWx2ZXMgd2hpbGUgd2UgYXJlCisJCSoqIHByb2Nlc3NpbmcgaXQgYnV0IHRoYXQgaXMgb2theSkuICBBbnkgc3RhdGlvbiB3aGljaCBpcworCQkqKiBubyBsb25nZXIgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZCBzdGF0aW9ucywgbXVzdCBiZQorCQkqKiBkZS1hdXRoZW50aWNhdGVkLgorCQkqLworCisJCXByaXNtMm1pYl9wcml2X2F1dGhsaXN0KGh3LCAmb2xkKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgb2xkLmNudDsgaSsrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgaHctPmFsbG93LmNudDsgaisrKQorCQkJCWlmIChtZW1jbXAob2xkLmFkZHJbaV0sIGh3LT5hbGxvdy5hZGRyW2pdLAorCQkJCQkJCVdMQU5fQUREUl9MRU4pID09IDApCisJCQkJCWJyZWFrOworCQkJaWYgKGogPj0gaHctPmFsbG93LmNudCkKKwkJCQlwcmlzbTJtaWJfcHJpdl9kZWF1dGhlbnRpY2F0ZShodywgb2xkLmFkZHJbaV0pOworCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfcHJpdl9hY2Nlc3NkZW55CisqCisqIENoYW5nZSB0aGUgbGlzdCBvZiBkZW5pZWQgTUFDIGFkZHJlc3Nlcy4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBwcml2ICAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtYWNhcnJheSAgTmV3IGFycmF5IG9mIE1BQyBhZGRyZXNzZXMuCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9hY2Nlc3NkZW55KAoraGZhMzg0eF90ICAgICAgICAgKmh3LAorcDgwMjExbWFjYXJyYXlfdCAgKm1hY2FycmF5KQoreworCXByaXNtMnN0YV9hdXRobGlzdF90ICBvbGQ7CisJaW50ICAgICAgICAgICAgICAgICAgIGksIGo7CisKKwlEQkZFTlRFUjsKKworCS8qCisJKiogQ2hhbmdlIHRoZSBhY2Nlc3MgbGlzdC4gIE5vdGUgdGhhdCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgbWF5IGJlIGluCisJKiogdGhlIG1pZGRsZSBvZiB1c2luZyB0aGUgYWNjZXNzIGxpc3QhISEgIFNpbmNlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgorCSoqIHdpbGwgYWx3YXlzIGhhdmUgcHJpb3JpdHkgb3ZlciB0aGlzIHByb2Nlc3MgYW5kIHRoaXMgaXMgdGhlIG9ubHkKKwkqKiBwcm9jZXNzIHRoYXQgd2lsbCBtb2RpZnkgdGhlIGxpc3QsIHRoaXMgcHJvYmxlbSBjYW4gYmUgaGFuZGxlZCBhcworCSoqIGZvbGxvd3M6CisJKioKKwkqKiAgICAxLiBTZXQgdGhlICJtb2RpZnkiIGZsYWcuCisJKiogICAgMi4gQ2hhbmdlIHRoZSBmaXJzdCBjb3B5IG9mIHRoZSBsaXN0LgorCSoqICAgIDMuIENsZWFyIHRoZSAibW9kaWZ5IiBmbGFnLgorCSoqICAgIDQuIENoYW5nZSB0aGUgYmFja3VwIGNvcHkgb2YgdGhlIGxpc3QuCisJKioKKwkqKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgd2lsbCBjaGVjayB0aGUgIm1vZGlmeSIgZmxhZy4gIElmIE5PVCBzZXQsIHRoZW4KKwkqKiB0aGUgZmlyc3QgY29weSBvZiB0aGUgbGlzdCBpcyB2YWxpZCBhbmQgbWF5IGJlIHVzZWQuICBPdGhlcndpc2UsIHRoZQorCSoqIGZpcnN0IGNvcHkgaXMgYmVpbmcgY2hhbmdlZCBidXQgdGhlIGJhY2t1cCBjb3B5IGlzIHZhbGlkIGFuZCBtYXkgYmUKKwkqKiB1c2VkLiAgRG9pbmcgdGhpbmdzIHRoaXMgd2F5IHByZXZlbnRzIGhhdmluZyB0byBoYXZlIHRoZSBpbnRlcnJ1cHQKKwkqKiBoYW5kbGVyIGJsb2NrIHdoaWxlIHRoZSBsaXN0IGlzIGJlaW5nIHVwZGF0ZWQuCisJKi8KKworCWh3LT5kZW55Lm1vZGlmeSA9IDE7CisKKwlody0+ZGVueS5jbnQgPSBtYWNhcnJheS0+Y250OworCW1lbWNweShody0+ZGVueS5hZGRyLCBtYWNhcnJheS0+ZGF0YSwgbWFjYXJyYXktPmNudCpXTEFOX0FERFJfTEVOKTsKKworCWh3LT5kZW55Lm1vZGlmeSA9IDA7CisKKwlody0+ZGVueS5jbnQxID0gbWFjYXJyYXktPmNudDsKKwltZW1jcHkoaHctPmRlbnkuYWRkcjEsIG1hY2FycmF5LT5kYXRhLCBtYWNhcnJheS0+Y250KldMQU5fQUREUl9MRU4pOworCisJLyoKKwkqKiBJZiB0aGUgY3VycmVudCBhY2Nlc3MgbW9kZSBpcyAiRGVueSIsIHRoZW4gY2hhbmdpbmcgdGhlIGFjY2VzcworCSoqIGxpc3QgbWF5IGxlYXZlIHNvbWUgc3RhdGlvbnMgYXV0aGVudGljYXRlZCB3aGljaCBzaG91bGQgbm90IGJlCisJKiogYXV0aGVudGljYXRlZC4gIEl0IHdpbGwgYmUgbmVjZXNzYXJ5IHRvIGRlLWF1dGhlbnRpY2F0ZSB0aGVzZQorCSoqIHN0YXRpb25zLiAgT3RoZXJ3aXNlLCB0aGUgbGlzdCBjYW4gYmUgY2hhbmdlZCB3aXRob3V0IGEgbG90IG9mIGZ1c3MuCisJKi8KKworCWlmIChody0+YWNjZXNzbW9kZSA9PSBXTEFOX0FDQ0VTU19ERU5ZKSB7CisKKwkJLyoKKwkJKiogR28gdGhyb3VnaCB0aGUgbGlzdCBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zIChzb21lIG9mCisJCSoqIHdoaWNoIG1pZ2h0IGRlLWF1dGhlbnRpY2F0ZSB0aGVtc2VsdmVzIHdoaWxlIHdlIGFyZQorCQkqKiBwcm9jZXNzaW5nIGl0IGJ1dCB0aGF0IGlzIG9rYXkpLiAgQW55IHN0YXRpb24gd2hpY2ggaXMKKwkJKiogbm93IGluIHRoZSBsaXN0IG9mIGRlbmllZCBzdGF0aW9ucywgbXVzdCBiZSBkZS1hdXRoZW50aWNhdGVkLgorCQkqLworCisJCXByaXNtMm1pYl9wcml2X2F1dGhsaXN0KGh3LCAmb2xkKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgb2xkLmNudDsgaSsrKQorCQkJZm9yIChqID0gMDsgaiA8IGh3LT5kZW55LmNudDsgaisrKQorCQkJCWlmIChtZW1jbXAob2xkLmFkZHJbaV0sIGh3LT5kZW55LmFkZHJbal0sCisJCQkJCQkJIFdMQU5fQUREUl9MRU4pID09IDApIHsKKwkJCQkJcHJpc20ybWliX3ByaXZfZGVhdXRoZW50aWNhdGUoaHcsIG9sZC5hZGRyW2ldKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCX0KKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3ByaXZfZGVhdXRoZW50aWNhdGUKKyoKKyogRGUtYXV0aGVudGljYXRlIGEgc3RhdGlvbi4gIFRoaXMgaXMgZG9uZSBieSBzZW5kaW5nIGEgSGFuZG92ZXJBZGRyZXNzCisqIGluZm9ybWF0aW9uIGZyYW1lIHRvIHRoZSBmaXJtd2FyZS4gIFRoaXMgc2hvdWxkIHdvcmssIGFjY29yZGluZyB0bworKiBJbnRlcnNpbC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgYWRkciAgICAgTUFDIGFkZHJlc3Mgb2Ygc3RhdGlvbiB0byBiZSBkZS1hdXRoZW50aWNhdGVkLgorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcHJpc20ybWliX3ByaXZfZGVhdXRoZW50aWNhdGUoCitoZmEzODR4X3QgICAgICAgICAqaHcsCitVSU5UOCAgICAgICAgICAgICAqYWRkcikKK3sKKwlEQkZFTlRFUjsKKwloZmEzODR4X2RydnJfaGFuZG92ZXIoaHcsIGFkZHIpOworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3BzdHIyYnl0ZXN0cgorKgorKiBDb252ZXJ0IHRoZSBwc3RyIGRhdGEgaW4gdGhlIFdMQU4gbWVzc2FnZSBzdHJ1Y3R1cmUgaW50byBhbiBoZmEzODR4CisqIGJ5dGUgc3RyaW5nIGZvcm1hdC4KKyoKKyogQXJndW1lbnRzOgorKglieXRlc3RyCQloZmEzODR4IGJ5dGUgc3RyaW5nIGRhdGEgdHlwZQorKglwc3RyCQl3bGFuIG1lc3NhZ2UgZGF0YQorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBwcmlzbTJtZ210X3BzdHIyYnl0ZXN0cihoZmEzODR4X2J5dGVzdHJfdCAqYnl0ZXN0ciwgcDgwMjExcHN0cmRfdCAqcHN0cikKK3sKKwlEQkZFTlRFUjsKKworCWJ5dGVzdHItPmxlbiA9IGhvc3QyaGZhMzg0eF8xNigoVUlOVDE2KShwc3RyLT5sZW4pKTsKKwltZW1jcHkoYnl0ZXN0ci0+ZGF0YSwgcHN0ci0+ZGF0YSwgcHN0ci0+bGVuKTsKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3BzdHIyYnl0ZWFyZWEKKyoKKyogQ29udmVydCB0aGUgcHN0ciBkYXRhIGluIHRoZSBXTEFOIG1lc3NhZ2Ugc3RydWN0dXJlIGludG8gYW4gaGZhMzg0eAorKiBieXRlIGFyZWEgZm9ybWF0LgorKgorKiBBcmd1bWVudHM6CisqCWJ5dGVhcmVhCWhmYTM4NHggYnl0ZSBhcmVhIGRhdGEgdHlwZQorKglwc3RyCQl3bGFuIG1lc3NhZ2UgZGF0YQorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBwcmlzbTJtZ210X3BzdHIyYnl0ZWFyZWEoVUlOVDggKmJ5dGVhcmVhLCBwODAyMTFwc3RyZF90ICpwc3RyKQoreworCURCRkVOVEVSOworCisJbWVtY3B5KGJ5dGVhcmVhLCBwc3RyLT5kYXRhLCBwc3RyLT5sZW4pOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyCisqCisqIENvbnZlcnQgdGhlIGRhdGEgaW4gYW4gaGZhMzg0eCBieXRlIHN0cmluZyBmb3JtYXQgaW50byBhCisqIHBzdHIgaW4gdGhlIFdMQU4gbWVzc2FnZS4KKyoKKyogQXJndW1lbnRzOgorKglieXRlc3RyCQloZmEzODR4IGJ5dGUgc3RyaW5nIGRhdGEgdHlwZQorKgltc2cJCXdsYW4gbWVzc2FnZQorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBwcmlzbTJtZ210X2J5dGVzdHIycHN0cihoZmEzODR4X2J5dGVzdHJfdCAqYnl0ZXN0ciwgcDgwMjExcHN0cmRfdCAqcHN0cikKK3sKKwlEQkZFTlRFUjsKKworCXBzdHItPmxlbiA9IChVSU5UOCkoaGZhMzg0eDJob3N0XzE2KChVSU5UMTYpKGJ5dGVzdHItPmxlbikpKTsKKwltZW1jcHkocHN0ci0+ZGF0YSwgYnl0ZXN0ci0+ZGF0YSwgcHN0ci0+bGVuKTsKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2J5dGVhcmVhMnBzdHIKKyoKKyogQ29udmVydCB0aGUgZGF0YSBpbiBhbiBoZmEzODR4IGJ5dGUgYXJlYSBmb3JtYXQgaW50byBhIHBzdHIKKyogaW4gdGhlIFdMQU4gbWVzc2FnZS4KKyoKKyogQXJndW1lbnRzOgorKglieXRlYXJlYQloZmEzODR4IGJ5dGUgYXJlYSBkYXRhIHR5cGUKKyoJbXNnCQl3bGFuIG1lc3NhZ2UKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgcHJpc20ybWdtdF9ieXRlYXJlYTJwc3RyKFVJTlQ4ICpieXRlYXJlYSwgcDgwMjExcHN0cmRfdCAqcHN0ciwgaW50IGxlbikKK3sKKwlEQkZFTlRFUjsKKworCXBzdHItPmxlbiA9IChVSU5UOClsZW47CisJbWVtY3B5KHBzdHItPmRhdGEsIGJ5dGVhcmVhLCBsZW4pOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcHJpc20yaW50MnA4MDIxMWludAorKgorKiBDb252ZXJ0IGFuIGhmYTM4NHggaW50ZWdlciBpbnRvIGEgd2xhbiBpbnRlZ2VyCisqCisqIEFyZ3VtZW50czoKKyoJcHJpc20yZW51bQlwb2ludGVyIHRvIGhmYTM4NHggaW50ZWdlcgorKgl3bGFuZW51bQlwb2ludGVyIHRvIHA4MDIxMSBpbnRlZ2VyCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHByaXNtMm1nbXRfcHJpc20yaW50MnA4MDIxMWludChVSU5UMTYgKnByaXNtMmludCwgVUlOVDMyICp3bGFuaW50KQoreworCURCRkVOVEVSOworCisJKndsYW5pbnQgPSAoVUlOVDMyKWhmYTM4NHgyaG9zdF8xNigqcHJpc20yaW50KTsKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQKKyoKKyogQ29udmVydCBhIHdsYW4gaW50ZWdlciBpbnRvIGFuIGhmYTM4NHggaW50ZWdlcgorKgorKiBBcmd1bWVudHM6CisqCXByaXNtMmVudW0JcG9pbnRlciB0byBoZmEzODR4IGludGVnZXIKKyoJd2xhbmVudW0JcG9pbnRlciB0byBwODAyMTEgaW50ZWdlcgorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQoVUlOVDE2ICpwcmlzbTJpbnQsIFVJTlQzMiAqd2xhbmludCkKK3sKKwlEQkZFTlRFUjsKKworCSpwcmlzbTJpbnQgPSBob3N0MmhmYTM4NHhfMTYoKFVJTlQxNikoKndsYW5pbnQpKTsKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3ByaXNtMmVudW0ycDgwMjExZW51bQorKgorKiBDb252ZXJ0IHRoZSBoZmEzODR4IGVudW1lcmF0ZWQgaW50IGludG8gYSBwODAyMTEgZW51bWVyYXRlZCBpbnQKKyoKKyogQXJndW1lbnRzOgorKglwcmlzbTJlbnVtCXBvaW50ZXIgdG8gaGZhMzg0eCBpbnRlZ2VyCisqCXdsYW5lbnVtCXBvaW50ZXIgdG8gcDgwMjExIGludGVnZXIKKyoJcmlkCQloZmEzODR4IHJlY29yZCBpZAorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20ybWdtdF9wcmlzbTJlbnVtMnA4MDIxMWVudW0oVUlOVDE2ICpwcmlzbTJlbnVtLCBVSU5UMzIgKndsYW5lbnVtLCBVSU5UMTYgcmlkKQoreworCURCRkVOVEVSOworCisJLyogQXQgdGhlIG1vbWVudCwgdGhlIG5lZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXNuJ3QKKwlwcmVzZW50ZWQgaXRzZWxmLiBBbGwgdGhlIHdsYW4gZW51bWVyYXRlZCB2YWx1ZXMgYXJlCisJYSAxLXRvLTEgbWF0Y2ggYWdhaW5zdCB0aGUgUHJpc20yIGVudW1lcmF0ZWQgdmFsdWVzKi8KKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9wODAyMTFlbnVtMnByaXNtMmVudW0KKyoKKyogQ29udmVydCB0aGUgcDgwMjExIGVudW1lcmF0ZWQgaW50IGludG8gYW4gaGZhMzg0eCBlbnVtZXJhdGVkIGludAorKgorKiBBcmd1bWVudHM6CisqCXByaXNtMmVudW0JcG9pbnRlciB0byBoZmEzODR4IGludGVnZXIKKyoJd2xhbmVudW0JcG9pbnRlciB0byBwODAyMTEgaW50ZWdlcgorKglyaWQJCWhmYTM4NHggcmVjb3JkIGlkCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJtZ210X3A4MDIxMWVudW0ycHJpc20yZW51bShVSU5UMTYgKnByaXNtMmVudW0sIFVJTlQzMiAqd2xhbmVudW0sIFVJTlQxNiByaWQpCit7CisJREJGRU5URVI7CisKKwkvKiBBdCB0aGUgbW9tZW50LCB0aGUgbmVlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IGhhc24ndAorCXByZXNlbnRlZCBpdHNlbGYuIEFsbCB0aGUgd2xhbiBlbnVtZXJhdGVkIHZhbHVlcyBhcmUKKwlhIDEtdG8tMSBtYXRjaCBhZ2FpbnN0IHRoZSBQcmlzbTIgZW51bWVyYXRlZCB2YWx1ZXMqLworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZ2V0X29wcmF0ZXNldAorKgorKiBDb252ZXJ0IHRoZSBoZmEzODR4IGJpdCBhcmVhIGludG8gYSB3bGFuIG9jdGV0IHN0cmluZy4KKyoKKyogQXJndW1lbnRzOgorKglyYXRlCQlQcmlzbTIgYml0IGFyZWEKKyoJcHN0cgkJd2xhbiBvY3RldCBzdHJpbmcKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMm1nbXRfZ2V0X29wcmF0ZXNldChVSU5UMTYgKnJhdGUsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCit7CisJVUlOVDgJbGVuOworCVVJTlQ4CSpkYXRhcmF0ZTsKKworCURCRkVOVEVSOworCisJbGVuID0gMDsKKwlkYXRhcmF0ZSA9IHBzdHItPmRhdGE7CisKKyAJLyogMSBNYnBzICovCisJaWYgKCBCSVQwICYgKCpyYXRlKSApIHsKKwkJbGVuICs9IChVSU5UOCkxOworCQkqZGF0YXJhdGUgPSAoVUlOVDgpMjsKKwkJZGF0YXJhdGUrKzsKKwl9CisKKyAJLyogMiBNYnBzICovCisJaWYgKCBCSVQxICYgKCpyYXRlKSApIHsKKwkJbGVuICs9IChVSU5UOCkxOworCQkqZGF0YXJhdGUgPSAoVUlOVDgpNDsKKwkJZGF0YXJhdGUrKzsKKwl9CisKKyAJLyogNS41IE1icHMgKi8KKwlpZiAoIEJJVDIgJiAoKnJhdGUpICkgeworCQlsZW4gKz0gKFVJTlQ4KTE7CisJCSpkYXRhcmF0ZSA9IChVSU5UOCkxMTsKKwkJZGF0YXJhdGUrKzsKKwl9CisKKyAJLyogMTEgTWJwcyAqLworCWlmICggQklUMyAmICgqcmF0ZSkgKSB7CisJCWxlbiArPSAoVUlOVDgpMTsKKwkJKmRhdGFyYXRlID0gKFVJTlQ4KTIyOworCQlkYXRhcmF0ZSsrOworCX0KKworCXBzdHItPmxlbiA9IGxlbjsKKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfc2V0X29wcmF0ZXNldAorKgorKiBDb252ZXJ0IHRoZSB3bGFuIG9jdGV0IHN0cmluZyBpbnRvIGFuIGhmYTM4NHggYml0IGFyZWEuCisqCisqIEFyZ3VtZW50czoKKyoJcmF0ZQkJUHJpc20yIGJpdCBhcmVhCisqCXBzdHIJCXdsYW4gb2N0ZXQgc3RyaW5nCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJtZ210X3NldF9vcHJhdGVzZXQoVUlOVDE2ICpyYXRlLCBwODAyMTFwc3RyZF90ICpwc3RyKQoreworCVVJTlQ4CSpkYXRhcmF0ZTsKKwlpbnQJaTsKKworCURCRkVOVEVSOworCisJKnJhdGUgPSAwOworCisJZGF0YXJhdGUgPSBwc3RyLT5kYXRhOworCisJZm9yICggaT0wOyBpIDwgcHN0ci0+bGVuOyBpKyssIGRhdGFyYXRlKysgKSB7CisJCXN3aXRjaCAoKmRhdGFyYXRlKSB7CisJCWNhc2UgMjogLyogMSBNYnBzICovCisJCQkqcmF0ZSB8PSBCSVQwOworCQkJYnJlYWs7CisJCWNhc2UgNDogLyogMiBNYnBzICovCisJCQkqcmF0ZSB8PSBCSVQxOworCQkJYnJlYWs7CisJCWNhc2UgMTE6IC8qIDUuNSBNYnBzICovCisJCQkqcmF0ZSB8PSBCSVQyOworCQkJYnJlYWs7CisJCWNhc2UgMjI6IC8qIDExIE1icHMgKi8KKwkJCSpyYXRlIHw9IEJJVDM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVdMQU5fTE9HX0RFQlVHKDEsICJVbnJlY29naW56ZWQgUmF0ZSBvZiAlZFxuIiwKKwkJCQkqZGF0YXJhdGUpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X2dldF9ncnBhZGRyCisqCisqIFJldHJpZXZlcyBhIHBhcnRpY3VsYXIgZ3JvdXAgYWRkcmVzcyBmcm9tIHRoZSBsaXN0IG9mCisqIGdyb3VwIGFkZHJlc3Nlcy4KKyoKKyogQXJndW1lbnRzOgorKglkaWQJCW1pYml0ZW0gZGlkCisqCXBzdHIJCXdsYW4gb2N0ZXQgc3RyaW5nCisqCXByaXYJCXByaXNtMiBkcml2ZXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20ybWdtdF9nZXRfZ3JwYWRkcihVSU5UMzIgZGlkLCBwODAyMTFwc3RyZF90ICpwc3RyLAorCWhmYTM4NHhfdCAqaHcgKQoreworCWludAlpbmRleDsKKworCURCRkVOVEVSOworCisJaW5kZXggPSBwcmlzbTJtZ210X2dldF9ncnBhZGRyX2luZGV4KGRpZCk7CisKKwlpZiAoIGluZGV4ID49IDAgKSB7CisJCXBzdHItPmxlbiA9IFdMQU5fQUREUl9MRU47CisJCW1lbWNweShwc3RyLT5kYXRhLCBody0+ZG90MTFfZ3JwX2FkZHJbaW5kZXhdLAorCQkJV0xBTl9BRERSX0xFTik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9zZXRfZ3JwYWRkcgorKgorKiBDb252ZXJ0IHRoZSB3bGFuIG9jdGV0IHN0cmluZyBpbnRvIGFuIGhmYTM4NHggYml0IGFyZWEuCisqCisqIEFyZ3VtZW50czoKKyoJZGlkCQltaWJpdGVtIGRpZAorKglidWYKKyoJZ3JvdXBzCisqCisqIFJldHVybnM6CisqCTAJU3VjY2VzcworKgkhMAlFcnJvcgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9zZXRfZ3JwYWRkcihVSU5UMzIgZGlkLCBVSU5UOCAqcHJpc20yYnVmLAorCXA4MDIxMXBzdHJkX3QgKnBzdHIsIGhmYTM4NHhfdCAqaHcgKQoreworCVVJTlQ4CW5vX2FkZHJbV0xBTl9BRERSX0xFTl07CisJaW50CWluZGV4OworCisJREJGRU5URVI7CisKKwltZW1zZXQobm9fYWRkciwgMCwgV0xBTl9BRERSX0xFTik7CisJaWYgKG1lbWNtcChub19hZGRyLCBwc3RyLT5kYXRhLCBXTEFOX0FERFJfTEVOKSAhPSAwKSB7CisKKwkJLyoKKwkJKiogVGhlIGFkZHJlc3MgaXMgTk9UIDAgc28gd2UgYXJlICJhZGRpbmciIGFuIGFkZHJlc3MgdG8gdGhlCisJCSoqIGdyb3VwIGFkZHJlc3MgbGlzdC4gIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBhcmVuJ3QgdHJ5aW5nCisJCSoqIHRvIGFkZCBtb3JlIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZCBudW1iZXIgb2YgZ3JvdXAKKwkJKiogYWRkcmVzc2VzIGluIHRoZSBsaXN0LiAgVGhlIG5ldyBhZGRyZXNzIGlzIGFkZGVkIHRvIHRoZQorCQkqKiBlbmQgb2YgdGhlIGxpc3QgcmVnYXJkbGVzcyBvZiB0aGUgRElEIHVzZWQgdG8gYWRkIHRoZQorCQkqKiBhZGRyZXNzLgorCQkqLworCisJCWlmIChody0+ZG90MTFfZ3JwY250ID49IE1BWF9HUlBfQUREUikgcmV0dXJuKC0xKTsKKworCQltZW1jcHkoaHctPmRvdDExX2dycF9hZGRyW2h3LT5kb3QxMV9ncnBjbnRdLCBwc3RyLT5kYXRhLAorCQkJCQkJCQkgV0xBTl9BRERSX0xFTik7CisJCWh3LT5kb3QxMV9ncnBjbnQgKz0gMTsKKwl9IGVsc2UgeworCisJCS8qCisJCSoqIFRoZSBhZGRyZXNzIGlzIDAuICBJbnRlcnByZXQgdGhpcyBhcyAiZGVsZXRpbmciIGFuIGFkZHJlc3MKKwkJKiogZnJvbSB0aGUgZ3JvdXAgYWRkcmVzcyBsaXN0LiAgR2V0IHRoZSBhZGRyZXNzIGluZGV4IGZyb20KKwkJKiogdGhlIERJRC4gIElmIHRoaXMgaXMgd2l0aGluIHRoZSByYW5nZSBvZiB1c2VkIGFkZHJlc3NlcywKKwkJKiogdGhlbiBkZWxldGUgdGhlIHNwZWNpZmllZCBhZGRyZXNzIGJ5IHNoaWZ0aW5nIGFsbCBmb2xsb3dpbmcKKwkJKiogYWRkcmVzc2VzIGRvd24uICBUaGVuIGNsZWFyIHRoZSBsYXN0IGFkZHJlc3MgKHdoaWNoIHNob3VsZAorCQkqKiBub3cgYmUgdW51c2VkKS4gIElmIHRoZSBhZGRyZXNzIGluZGV4IGlzIE5PVCB3aXRoaW4gdGhlCisJCSoqIHJhbmdlIG9mIHVzZWQgYWRkcmVzc2VzLCB0aGVuIGp1c3QgaWdub3JlIHRoZSBhZGRyZXNzLgorCQkqLworCisJCWluZGV4ID0gcHJpc20ybWdtdF9nZXRfZ3JwYWRkcl9pbmRleChkaWQpOworCQlpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGh3LT5kb3QxMV9ncnBjbnQpIHsKKwkJCWh3LT5kb3QxMV9ncnBjbnQgLT0gMTsKKwkJCW1lbW1vdmUoaHctPmRvdDExX2dycF9hZGRyW2luZGV4XSwKKwkJCQlody0+ZG90MTFfZ3JwX2FkZHJbaW5kZXggKyAxXSwKKwkJCQkoKGh3LT5kb3QxMV9ncnBjbnQpLWluZGV4KSAqIFdMQU5fQUREUl9MRU4pOworCQkJbWVtc2V0KGh3LT5kb3QxMV9ncnBfYWRkcltody0+ZG90MTFfZ3JwY250XSwgMCwKKwkJCQkJCQkJIFdMQU5fQUREUl9MRU4pOworCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4oMCk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZ2V0X2dycGFkZHJfaW5kZXgKKyoKKyogR2V0cyB0aGUgaW5kZXggaW4gdGhlIGdyb3VwIGFkZHJlc3MgbGlzdCBiYXNlZCBvbiB0aGUgZGlkLgorKgorKiBBcmd1bWVudHM6CisqCWRpZAkJbWliaXRlbSBkaWQKKyoKKyogUmV0dXJuczoKKyoJPj0gMAlJZiB2YWxpZCBkaWQKKyoJPCAwCUlmIG5vdCB2YWxpZCBkaWQKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHByaXNtMm1nbXRfZ2V0X2dycGFkZHJfaW5kZXgoIFVJTlQzMiBkaWQgKQoreworCWludAlpbmRleDsKKworCURCRkVOVEVSOworCisJaW5kZXggPSAtMTsKKworCXN3aXRjaCAoZGlkKSB7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE6CisJCWluZGV4ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI6CisJCWluZGV4ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczM6CisJCWluZGV4ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczQ6CisJCWluZGV4ID0gMzsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczU6CisJCWluZGV4ID0gNDsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczY6CisJCWluZGV4ID0gNTsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczc6CisJCWluZGV4ID0gNjsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczg6CisJCWluZGV4ID0gNzsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczk6CisJCWluZGV4ID0gODsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczEwOgorCQlpbmRleCA9IDk7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMToKKwkJaW5kZXggPSAxMDsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczEyOgorCQlpbmRleCA9IDExOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTM6CisJCWluZGV4ID0gMTI7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNDoKKwkJaW5kZXggPSAxMzsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE1OgorCQlpbmRleCA9IDE0OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTY6CisJCWluZGV4ID0gMTU7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNzoKKwkJaW5kZXggPSAxNjsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE4OgorCQlpbmRleCA9IDE3OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTk6CisJCWluZGV4ID0gMTg7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMDoKKwkJaW5kZXggPSAxOTsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIxOgorCQlpbmRleCA9IDIwOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjI6CisJCWluZGV4ID0gMjE7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMzoKKwkJaW5kZXggPSAyMjsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI0OgorCQlpbmRleCA9IDIzOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjU6CisJCWluZGV4ID0gMjQ7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNjoKKwkJaW5kZXggPSAyNTsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI3OgorCQlpbmRleCA9IDI2OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjg6CisJCWluZGV4ID0gMjc7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyOToKKwkJaW5kZXggPSAyODsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczMwOgorCQlpbmRleCA9IDI5OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzE6CisJCWluZGV4ID0gMzA7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzMjoKKwkJaW5kZXggPSAzMTsKKwkJYnJlYWs7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gaW5kZXg7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJzdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YWExNWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJzdGEuYwpAQCAtMCwwICsxLDI1MDIgQEAKKy8qIHNyYy9wcmlzbTIvZHJpdmVyL3ByaXNtMnN0YS5jCisqCisqIEltcGxlbWVudHMgdGhlIHN0YXRpb24gZnVuY3Rpb25hbGl0eSBmb3IgcHJpc20yCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBtb2R1bGUgYW5kIGxpbnV4IHBjbWNpYSByb3V0aW5lcyBmb3IgdGhlCisqIHByaXNtMiBkcml2ZXIuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisjZGVmaW5lIFdMQU5fREJWQVIJcHJpc20yX2RlYnVnCisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw0LDI1KSkKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKyNpbmNsdWRlIDxsaW51eC90cXVldWUuaD4KKyNlbHNlCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKQorI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CisjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgorI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworI2lmICgoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpIHx8IChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkpCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCisjaW5jbHVkZSAicDgwMjExaGRyLmgiCisjaW5jbHVkZSAicDgwMjExbWdtdC5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFtc2cuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKyNpbmNsdWRlICJwODAyMTFyZXEuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhZGVmLmgiCisjaW5jbHVkZSAicDgwMjExbWV0YXN0cnVjdC5oIgorI2luY2x1ZGUgImhmYTM4NHguaCIKKyNpbmNsdWRlICJwcmlzbTJtZ210LmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBDb25zdGFudHMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIE1hY3JvcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKQorI2RlZmluZSBEUklWRVJfU1VGRklYCSJfY3MiCisjZWxpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpCisjZGVmaW5lIERSSVZFUl9TVUZGSVgJIl9wbHgiCit0eXBlZGVmIGNoYXIqIGRldl9pbmZvX3Q7CisjZWxpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisjZGVmaW5lIERSSVZFUl9TVUZGSVgJIl9wY2kiCit0eXBlZGVmIGNoYXIqIGRldl9pbmZvX3Q7CisjZWxpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCisjZGVmaW5lIERSSVZFUl9TVUZGSVgJIl91c2IiCit0eXBlZGVmIGNoYXIqIGRldl9pbmZvX3Q7CisjZWxzZQorI2Vycm9yICJIT1NUSUYgdW5zdXBwb3J0ZWQgb3IgdW5kZWZpbmVkISIKKyNlbmRpZgorCitzdGF0aWMgY2hhcgkJKnZlcnNpb24gPSAicHJpc20yIiBEUklWRVJfU1VGRklYICIubzogIiBXTEFOX1JFTEVBU0U7CitzdGF0aWMgZGV2X2luZm9fdAlkZXZfaW5mbyA9ICJwcmlzbTIiIERSSVZFUl9TVUZGSVg7CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFggfHwgV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHByaXNtMnN0YV9zdXNwZW5kX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK3N0YXRpYyBpbnQgcHJpc20yc3RhX3Jlc3VtZV9wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYpOworI2VuZGlmCisjZW5kaWYKKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKworI2VuZGlmIC8qIFdMQU5fUENJICovCisKK3N0YXRpYyB3bGFuZGV2aWNlX3QgKmNyZWF0ZV93bGFuKHZvaWQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogLS1Nb2R1bGUgUGFyYW1ldGVycyAqLworCitpbnQgICAgICBwcmlzbTJfcmVzZXRfaG9sZHRpbWU9MzA7CS8qIFJlc2V0IGhvbGQgdGltZSBpbiBtcyAqLworaW50CSBwcmlzbTJfcmVzZXRfc2V0dGxldGltZT0xMDA7CS8qIFJlc2V0IHNldHRsZSB0aW1lIGluIG1zICovCisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCitzdGF0aWMgaW50CXByaXNtMl9kb3Jlc2V0PTA7CQkvKiBEbyBhIHJlc2V0IGF0IGluaXQ/ICovCisjZWxzZQorc3RhdGljIGludCAgICAgIHByaXNtMl9kb3Jlc2V0PTE7CQkvKiBEbyBhIHJlc2V0IGF0IGluaXQ/ICovCitpbnQgICAgICAgICAgICAgcHJpc20yX2JhcF90aW1lb3V0PTEwMDA7ICAgICAgICAvKiBCQVAgdGltZW91dCAqLworaW50CQlwcmlzbTJfaXJxX2V2cmVhZF9tYXg9MjA7CS8qIE1heGltdW0gbnVtYmVyIG9mCisJCQkJCQkgKiBldl9yZWFkcyAobG9vcHMpCisJCQkJCQkgKiBpbiBpcnEgaGFuZGxlcgorCQkJCQkJICovCisjZW5kaWYKKworI2lmZGVmIFdMQU5fSU5DTFVERV9ERUJVRworaW50IHByaXNtMl9kZWJ1Zz0wOworbW9kdWxlX3BhcmFtKCBwcmlzbTJfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHByaXNtMl9kZWJ1ZywgInByaXNtMiBkZWJ1Z2dpbmciKTsKKyNlbmRpZgorCittb2R1bGVfcGFyYW0oIHByaXNtMl9kb3Jlc2V0LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhwcmlzbTJfZG9yZXNldCwgIklzc3VlIGEgcmVzZXQgb24gaW5pdGlhbGl6YXRpb24iKTsKKworbW9kdWxlX3BhcmFtKCBwcmlzbTJfcmVzZXRfaG9sZHRpbWUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKCBwcmlzbTJfcmVzZXRfaG9sZHRpbWUsICJyZXNldCBob2xkIHRpbWUgaW4gbXMiKTsKK21vZHVsZV9wYXJhbSggcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKCBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgInJlc2V0IHNldHRsZSB0aW1lIGluIG1zIik7CisKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCittb2R1bGVfcGFyYW0oIHByaXNtMl9iYXBfdGltZW91dCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocHJpc20yX2JhcF90aW1lb3V0LCAiQnVmZmVyQWNjZXNzUGF0aCBUaW1lb3V0IGluIDEwKm4gdXMiKTsKK21vZHVsZV9wYXJhbSggcHJpc20yX2lycV9ldnJlYWRfbWF4LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyggcHJpc20yX2lycV9ldnJlYWRfbWF4LCAiTWF4aW1pbSBudW1iZXIgb2YgZXZlbnQgcmVhZHMgaW4gaW50ZXJydXB0IGhhbmRsZXIiKTsKKyNlbmRpZgorCitNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworc3RhdGljIGludAlwcmlzbTJzdGFfb3Blbih3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIGludAlwcmlzbTJzdGFfY2xvc2Uod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9yZXNldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYgKTsKK3N0YXRpYyBpbnQgICAgICBwcmlzbTJzdGFfdHhmcmFtZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7CitzdGF0aWMgaW50CXByaXNtMnN0YV9tbG1lcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpOworc3RhdGljIGludAlwcmlzbTJzdGFfZ2V0Y2FyZGluZm8od2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyBpbnQJcHJpc20yc3RhX2dsb2JhbHNldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgaW50ICAgICAgcHJpc20yc3RhX3NldG11bHRpY2FzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgICAgIG5ldGRldmljZV90ICpkZXYpOworCitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2hhbmRvdmVyKAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX3RhbGxpZXMoCisJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkICAgICBwcmlzbTJzdGFfaW5mX2hvc3RzY2FucmVzdWx0cygKKwkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9zY2FucmVzdWx0cygKKwkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9jaGluZm9yZXN1bHRzKAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2xpbmtzdGF0dXMoCisJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfYXNzb2NzdGF0dXMoCisJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfYXV0aHJlcSgKKwkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9hdXRocmVxX2RlZmVyKAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX3BzdXNlcmNudCgKKwkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBpbnQKK3ByaXNtMnN0YV9wcm9jX3JlYWQoCisJY2hhcgkqcGFnZSwKKwljaGFyCSoqc3RhcnQsCisJb2ZmX3QJb2Zmc2V0LAorCWludAljb3VudCwKKwlpbnQJKmVvZiwKKwl2b2lkCSpkYXRhKTsKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGRtcG1lbQorKgorKiBEZWJ1ZyB1dGlsaXR5IGZ1bmN0aW9uIHRvIGR1bXAgbWVtb3J5IHRvIHRoZSBrZXJuZWwgZGVidWcgbG9nLgorKgorKiBBcmd1bWVudHM6CisqCWJ1ZglwdHIgZGF0YSB3ZSB3YW50IGR1bXBlZAorKglsZW4JbGVuZ3RoIG9mIGRhdGEKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lubGluZSB2b2lkIGRtcG1lbSh2b2lkICpidWYsIGludCBuKQoreworCWludCBjOworCWZvciAoIGM9IDA7IGMgPCBuOyBjKyspIHsKKwkJaWYgKCAoYyAlIDE2KSA9PSAwICkgcHJpbnRrKEtFUk5fREVCVUciZG1wWyVkXTogIiwgYyk7CisJCXByaW50aygiJTAyeCAiLCAoKFVJTlQ4KilidWYpW2NdKTsKKwkJaWYgKCAoYyAlIDE2KSA9PSAxNSApIHByaW50aygiXG4iKTsKKwl9CisJaWYgKCAoYyAlIDE2KSAhPSAwICkgcHJpbnRrKCJcbiIpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfb3BlbgorKgorKiBXTEFOIGRldmljZSBvcGVuIG1ldGhvZC4gIENhbGxlZCBmcm9tIHA4MDIxMW5ldGRldiB3aGVuIGtlcm5lbAorKiBkZXZpY2Ugb3BlbiAoc3RhcnQpIG1ldGhvZCBpcyBjYWxsZWQgaW4gcmVzcG9uc2UgdG8gdGhlCisqIFNJT0NTSUlGRkxBR1MgaW9jdGwgY2hhbmdpbmcgdGhlIGZsYWdzIGJpdCBJRkZfVVAKKyogZnJvbSBjbGVhciB0byBzZXQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcworKgk+MAlmL3cgcmVwb3J0ZWQgZXJyb3IKKyoJPDAJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHByaXNtMnN0YV9vcGVuKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlEQkZFTlRFUjsKKworI2lmZGVmIEFOQ0lFTlRfTU9EVUxFX0NPREUKKwlNT0RfSU5DX1VTRV9DT1VOVDsKKyNlbmRpZgorCisJLyogV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgdG8gZG8gYW55dGhpbmcgZWxzZS4KKwkgKiBUaGUgc2V0dXAgb2YgdGhlIE1BQyBzaG91bGQgYmUgc3Vic2VxdWVudGx5IGNvbXBsZXRlZCB2aWEKKwkgKiB0aGUgbWxtZSBjb21tYW5kcy4KKwkgKiBIaWdoZXIgbGF5ZXJzIGtub3cgd2UncmUgcmVhZHkgZnJvbSBkZXYtPnN0YXJ0PT0xIGFuZAorCSAqIGRldi0+dGJ1c3k9PTAuICBPdXIgcnggcGF0aCBrbm93cyB0byBwYXNzIHVwIHJlY2VpdmVkLworCSAqIGZyYW1lcyBiZWNhdXNlIG9mIGRldi0+ZmxhZ3MmSUZGX1VQIGlzIHRydWUuCisJICovCisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfY2xvc2UKKyoKKyogV0xBTiBkZXZpY2UgY2xvc2UgbWV0aG9kLiAgQ2FsbGVkIGZyb20gcDgwMjExbmV0ZGV2IHdoZW4ga2VybmVsCisqIGRldmljZSBjbG9zZSBtZXRob2QgaXMgY2FsbGVkIGluIHJlc3BvbnNlIHRvIHRoZQorKiBTSU9DU0lJRkZMQUdTIGlvY3RsIGNoYW5naW5nIHRoZSBmbGFncyBiaXQgSUZGX1VQCisqIGZyb20gc2V0IHRvIGNsZWFyLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MKKyoJPjAJZi93IHJlcG9ydGVkIGVycm9yCisqCTwwCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBwcmlzbTJzdGFfY2xvc2Uod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCURCRkVOVEVSOworCisjaWZkZWYgQU5DSUVOVF9NT0RVTEVfQ09ERQorCU1PRF9ERUNfVVNFX0NPVU5UOworI2VuZGlmCisKKwkvKiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSB0byBkbyBhbnl0aGluZyBlbHNlLgorCSAqIEhpZ2hlciBsYXllcnMga25vdyB3ZSdyZSBub3QgcmVhZHkgZnJvbSBkZXYtPnN0YXJ0PT0wIGFuZAorCSAqIGRldi0+dGJ1c3k9PTEuICBPdXIgcnggcGF0aCBrbm93cyB0byBub3QgcGFzcyB1cCByZWNlaXZlZAorCSAqIGZyYW1lcyBiZWNhdXNlIG9mIGRldi0+ZmxhZ3MmSUZGX1VQIGlzIGZhbHNlLgorCSAqLworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX3Jlc2V0CisqCisqIE5vdCBjdXJyZW50bHkgaW1wbGVudGVkLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglub25lCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9yZXNldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYgKQoreworCURCRkVOVEVSOworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfdHhmcmFtZQorKgorKiBUYWtlcyBhIGZyYW1lIGZyb20gcDgwMjExIGFuZCBxdWV1ZXMgaXQgZm9yIHRyYW5zbWlzc2lvbi4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJcGIJCXBhY2tldCBidWZmZXIgc3RydWN0LiAgQ29udGFpbnMgYW4gODAyLjExCisqCQkJZGF0YSBmcmFtZS4KKyogICAgICAgcDgwMjExX2hkciAgICAgIHBvaW50cyB0byB0aGUgODAyLjExIGhlYWRlciBmb3IgdGhlIHBhY2tldC4KKyogUmV0dXJuczoKKyoJMAkJU3VjY2VzcyBhbmQgbW9yZSBidWZmcyBhdmFpbGFibGUKKyoJMQkJU3VjY2VzcyBidXQgbm8gbW9yZSBidWZmcworKgkyCQlBbGxvY2F0aW9uIGZhaWx1cmUKKyoJNAkJQnVmZmVyIGZ1bGwgb3IgcXVldWUgYnVzeQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBwcmlzbTJzdGFfdHhmcmFtZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKKwkJCSAgICAgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCkKK3sKKwloZmEzODR4X3QJCSpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCWludAkJCXJlc3VsdDsKKwlEQkZFTlRFUjsKKworCS8qIElmIG5lY2Vzc2FyeSwgc2V0IHRoZSA4MDIuMTEgV0VQIGJpdCAqLworCWlmICgod2xhbmRldi0+aG9zdHdlcCAmIChIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEIHwgSE9TVFdFUF9FTkNSWVBUKSkgPT0gSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkgeworCQlwODAyMTFfaGRyLT5hMy5mYyB8PSBob3N0MmllZWUxNihXTEFOX1NFVF9GQ19JU1dFUCgxKSk7CisJfQorCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3R4ZnJhbWUoaHcsIHNrYiwgcDgwMjExX2hkciwgcDgwMjExX3dlcCk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9tbG1lcmVxdWVzdAorKgorKiB3bGFuIGNvbW1hbmQgbWVzc2FnZSBoYW5kbGVyLiAgQWxsIHdlIGRvIGhlcmUgaXMgcGFzcyB0aGUgbWVzc2FnZQorKiBvdmVyIHRvIHRoZSBwcmlzbTJzdGFfbWdtdF9oYW5kbGVyLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2cJCXdsYW4gY29tbWFuZCBtZXNzYWdlCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPDAJCXN1Y2Nlc3NmdWwgYWNjZXB0YW5jZSBvZiBtZXNzYWdlLCBidXQgd2UncmUKKyoJCQl3YWl0aW5nIGZvciBhbiBhc3luYyBwcm9jZXNzIHRvIGZpbmlzaCBiZWZvcmUKKyoJCQl3ZSdyZSBkb25lIHdpdGggdGhlIG1zZy4gIFdoZW4gdGhlIGFzeW5jaAorKgkJCXByb2Nlc3MgaXMgZG9uZSwgd2UnbGwgY2FsbCB0aGUgcDgwMjExCisqCQkJZnVuY3Rpb24gcDgwMjExcmVxX2NvbmZpcm0oKSAuCisqCT4wCQlBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB3ZSB3ZXJlIGhhbmRsaW5nCisqCQkJdGhlIG1lc3NhZ2UuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHByaXNtMnN0YV9tbG1lcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCisJaW50IHJlc3VsdCA9IDA7CisJREJGRU5URVI7CisKKwlzd2l0Y2goIG1zZy0+bXNnY29kZSApCisJeworCWNhc2UgRElEbXNnX2RvdDExcmVxX21pYmdldCA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1pYmdldCByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0KHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX21pYnNldCA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1pYnNldCByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0KHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX3Bvd2VybWdtdCA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIHBvd2VybWdtdCByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9wb3dlcm1nbXQod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfc2NhbiA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIHNjYW4gcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfc2Nhbih3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHMgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBzY2FuX3Jlc3VsdHMgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfc2Nhbl9yZXN1bHRzKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX2pvaW4gOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBqb2luIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2pvaW4od2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfYXV0aGVudGljYXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgYXV0aGVudGljYXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2F1dGhlbnRpY2F0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9kZWF1dGhlbnRpY2F0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgZGVhdXRoZW50aWNhdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfZGVhdXRoZW50aWNhdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfYXNzb2NpYXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBhc3NvY2lhdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfYXNzb2NpYXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSByZWFzc29jaWF0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9yZWFzc29jaWF0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9kaXNhc3NvY2lhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGRpc2Fzc29jaWF0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9kaXNhc3NvY2lhdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfcmVzZXQgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHJlc2V0IHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3Jlc2V0KHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX3N0YXJ0IDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBzdGFydCByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9zdGFydCh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwkvKgorCSAqIFByaXNtMiBzcGVjaWZpYyBtZXNzYWdlcworCSAqLworCWNhc2UgRElEbXNnX3AycmVxX2pvaW4gOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBwMiBqb2luIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3AyX2pvaW4od2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisgICAgICAgCWNhc2UgRElEbXNnX3AycmVxX3JlYWRwZGEgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHJlYWRwZGEgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfcmVhZHBkYSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9yZWFkY2lzIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSByZWFkY2lzIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3JlYWRjaXMod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfYXV4cG9ydF9zdGF0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgYXV4cG9ydF9zdGF0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9hdXhwb3J0X3N0YXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX2F1eHBvcnRfcmVhZCA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgYXV4cG9ydF9yZWFkIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2F1eHBvcnRfcmVhZCh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9hdXhwb3J0X3dyaXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBhdXhwb3J0X3dyaXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2F1eHBvcnRfd3JpdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfbG93X2xldmVsIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBsb3dfbGV2ZWwgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfbG93X2xldmVsKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworICAgICAgICBjYXNlIERJRG1zZ19wMnJlcV90ZXN0X2NvbW1hbmQgOgorICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgdGVzdF9jb21tYW5kIHJlcXVlc3RcbiIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByaXNtMm1nbXRfdGVzdF9jb21tYW5kKHdsYW5kZXYsIG1zZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRElEbXNnX3AycmVxX21taV9yZWFkIDoKKyAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIG1taV9yZWFkIHJlcXVlc3RcbiIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByaXNtMm1nbXRfbW1pX3JlYWQod2xhbmRldiwgbXNnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBESURtc2dfcDJyZXFfbW1pX3dyaXRlIDoKKyAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIG1taV93cml0ZSByZXF1ZXN0XG4iKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwcmlzbTJtZ210X21taV93cml0ZSh3bGFuZGV2LCBtc2cpOworICAgICAgICAgICAgICAgIGJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSByYW1kbF9zdGF0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9yYW1kbF9zdGF0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9yYW1kbF93cml0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgcmFtZGxfd3JpdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfcmFtZGxfd3JpdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgZmxhc2hkbF9zdGF0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9mbGFzaGRsX3N0YXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGZsYXNoZGxfd3JpdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9kdW1wX3N0YXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBkdW1wX3N0YXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2R1bXBfc3RhdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBjaGFubmVsX2luZm8gcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfY2hhbm5lbF9pbmZvKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBjaGFubmVsX2luZm9fcmVzdWx0cyByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9jaGFubmVsX2luZm9fcmVzdWx0cyh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwkvKgorCSAqIExpbnV4IHNwZWNpZmljIG1lc3NhZ2VzCisJICovCisJY2FzZSBESURtc2dfbG54cmVxX2hvc3R3ZXAgOgorCQlicmVhazsgICAvLyBpZ25vcmUgbWUuCisgICAgICAgIGNhc2UgRElEbXNnX2xueHJlcV9pZnN0YXRlIDoKKwkJeworCQlwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdAkqaWZzdGF0ZW1zZzsKKyAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGlmc3RhdGUgcmVxdWVzdFxuIik7CisJCWlmc3RhdGVtc2cgPSAocDgwMjExbXNnX2xueHJlcV9pZnN0YXRlX3QqKW1zZzsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBpZnN0YXRlbXNnLT5pZnN0YXRlLmRhdGEpOworCQlpZnN0YXRlbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9CisJCQlQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCWlmc3RhdGVtc2ctPnJlc3VsdGNvZGUuZGF0YSA9IHJlc3VsdDsKKwkJcmVzdWx0ID0gMDsKKwkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmIDoKKyAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHdsYW5zbmlmZiByZXF1ZXN0XG4iKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwcmlzbTJtZ210X3dsYW5zbmlmZih3bGFuZGV2LCBtc2cpOworICAgICAgICAgICAgICAgIGJyZWFrOworCWNhc2UgRElEbXNnX2xueHJlcV9hdXRvam9pbiA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgYXV0b2pvaW4gcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfYXV0b2pvaW4od2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfZW5hYmxlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBlbmFibGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfZW5hYmxlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHk6IHsKKwkJcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdCAqcXVhbG1zZzsKKworCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBjb21tc3F1YWxpdHkgcmVxdWVzdFxuIik7CisKKwkJaWYgKGh3LT5hcCkKKwkJCWJyZWFrOworCisJCXF1YWxtc2cgPSAocDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdCopIG1zZzsKKworCQlxdWFsbXNnLT5saW5rLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJcXVhbG1zZy0+bGV2ZWwuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQlxdWFsbXNnLT5ub2lzZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisKKworCQlxdWFsbXNnLT5saW5rLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaHctPnF1YWwuQ1FfY3VyckJTUyk7CisJCXF1YWxtc2ctPmxldmVsLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaHctPnF1YWwuQVNMX2N1cnJCU1MpOworCQlxdWFsbXNnLT5ub2lzZS5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGh3LT5xdWFsLkFOTF9jdXJyRkMpOworCisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlXTEFOX0xPR19XQVJOSU5HKCJVbmtub3duIG1nbXQgcmVxdWVzdCBtZXNzYWdlIDB4JTA4eCIsIG1zZy0+bXNnY29kZSk7CisJCWJyZWFrOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2lmc3RhdGUKKyoKKyogSW50ZXJmYWNlIHN0YXRlLiAgVGhpcyBpcyB0aGUgcHJpbWFyeSBXTEFOIGludGVyZmFjZSBlbmFibGUvZGlzYWJsZQorKiBoYW5kbGVyLiAgRm9sbG93aW5nIHRoZSBkcml2ZXIvbG9hZC9kZXZpY2Vwcm9iZSBzZXF1ZW5jZSwgdGhpcworKiBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgc3RhdGUgb2YgImVuYWJsZSIgYmVmb3JlIGFueSBvdGhlcgorKiBjb21tYW5kcyB3aWxsIGJlIGFjY2VwdGVkLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgltc2dwCQlwdHIgdG8gbXNnIGJ1ZmZlcgorKgorKiBSZXR1cm5zOgorKiAJQSBwODAyMTEgbWVzc2FnZSByZXN1bHRjb2RlIHZhbHVlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgICh1c3VhbGx5KQorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworVUlOVDMyIHByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDMyIGlmc3RhdGUpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCVVJTlQzMiAJCQlyZXN1bHQ7CisJREJGRU5URVI7CisKKwlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKworCVdMQU5fTE9HX0RFQlVHKDIsICJDdXJyZW50IE1TRCBzdGF0ZSglZCksIHJlcXVlc3RpbmcoJWQpXG4iLAorCSAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPm1zZHN0YXRlLCBpZnN0YXRlKTsKKwlzd2l0Y2ggKGlmc3RhdGUpCisJeworCWNhc2UgUDgwMjExRU5VTV9pZnN0YXRlX2Z3bG9hZDoKKwkJc3dpdGNoICh3bGFuZGV2LT5tc2RzdGF0ZSkgeworCQljYXNlIFdMQU5fTVNEX0hXUFJFU0VOVDoKKwkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfRldMT0FEX1BFTkRJTkc7CisJCQkvKgorCQkJICogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlK2RyaXZlciBzdWZmaWNpZW50bHkKKwkJCSAqIGZvciBmaXJtd2FyZSBsb2FkaW5nLgorCQkJICovCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCQkJcmVzdWx0PWhmYTM4NHhfY21kX2luaXRpYWxpemUoaHcpOworI2Vsc2UKKwkJCWlmICgocmVzdWx0PWhmYTM4NHhfZHJ2cl9zdGFydChodykpKSB7CisJCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJCSJoZmEzODR4X2RydnJfc3RhcnQoKSBmYWlsZWQsIgorCQkJCQkicmVzdWx0PSVkXG4iLCAoaW50KXJlc3VsdCk7CisJCQkJcmVzdWx0ID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgorCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9GV0xPQUQ7CisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fTVNEX0ZXTE9BRDoKKwkJCWhmYTM4NHhfY21kX2luaXRpYWxpemUoaHcpOworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX01TRF9SVU5OSU5HOgorCQkJV0xBTl9MT0dfV0FSTklORygKKwkJCQkiQ2Fubm90IGVudGVyIGZ3bG9hZCBzdGF0ZSBmcm9tIGVuYWJsZSBzdGF0ZSwiCisJCQkJInlvdSBtdXN0IGRpc2FibGUgZmlyc3QuXG4iKTsKKwkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX01TRF9IV0ZBSUw6CisJCWRlZmF1bHQ6CisJCQkvKiBwcm9iZSgpIGhhZCBhIHByb2JsZW0gb3IgdGhlIG1zZHN0YXRlIGNvbnRhaW5zCisJCQkgKiBhbiB1bnJlY29nbml6ZWQgdmFsdWUsIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8uCisJCQkgKi8KKwkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQODAyMTFFTlVNX2lmc3RhdGVfZW5hYmxlOgorCQlzd2l0Y2ggKHdsYW5kZXYtPm1zZHN0YXRlKSB7CisJCWNhc2UgV0xBTl9NU0RfSFdQUkVTRU5UOgorCQljYXNlIFdMQU5fTVNEX0ZXTE9BRDoKKwkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfUlVOTklOR19QRU5ESU5HOworCQkJLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlK2RyaXZlciBmb3IgZnVsbAorCQkJICogb3BlcmF0aW9uLiBOb3RlIHRoYXQgdGhpcyBtaWdodCBtZSBhbiBGV0xPQUQgdG8KKwkJCSAqIHRvIFJVTk5JTkcgdHJhbnNpdGlvbiBzbyB3ZSBtdXN0IG5vdCBkbyBhIGNoaXAKKwkJCSAqIG9yIGJvYXJkIGxldmVsIHJlc2V0LiAgTm90ZSB0aGF0IG9uIGZhaWx1cmUsCisJCQkgKiB0aGUgTVNEIHN0YXRlIGlzIHNldCB0byBIV1BSRVNFTlQgYmVjYXVzZSB3ZQorCQkJICogY2FuJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHN0YXRlCisJCQkgKiBvZiB0aGUgaGFyZHdhcmUgb3IgYSBwcmV2aW91cyBmaXJtd2FyZSBsb2FkLgorCQkJICovCisJCQlpZiAoKHJlc3VsdD1oZmEzODR4X2RydnJfc3RhcnQoaHcpKSkgeworCQkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCQkiaGZhMzg0eF9kcnZyX3N0YXJ0KCkgZmFpbGVkLCIKKwkJCQkJInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOworCQkJCXJlc3VsdCA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICgocmVzdWx0PXByaXNtMnN0YV9nZXRjYXJkaW5mbyh3bGFuZGV2KSkpIHsKKwkJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkJInByaXNtMnN0YV9nZXRjYXJkaW5mbygpIGZhaWxlZCwiCisJCQkJCSJyZXN1bHQ9JWRcbiIsIChpbnQpcmVzdWx0KTsKKwkJCQlyZXN1bHQgPQorCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJCWhmYTM4NHhfZHJ2cl9zdG9wKGh3KTsKKwkJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICgocmVzdWx0PXByaXNtMnN0YV9nbG9iYWxzZXR1cCh3bGFuZGV2KSkpIHsKKwkJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkJInByaXNtMnN0YV9nbG9iYWxzZXR1cCgpIGZhaWxlZCwiCisJCQkJCSJyZXN1bHQ9JWRcbiIsIChpbnQpcmVzdWx0KTsKKwkJCQlyZXN1bHQgPQorCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJCWhmYTM4NHhfZHJ2cl9zdG9wKGh3KTsKKwkJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfUlVOTklORzsKKwkJCWh3LT5qb2luX2FwID0gMDsKKwkJCWh3LT5qb2luX3JldHJpZXMgPSA2MDsKKwkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9NU0RfUlVOTklORzoKKwkJCS8qIERvIG5vdGhpbmcsIHdlJ3JlIGFscmVhZHkgaW4gdGhpcyBzdGF0ZS4qLworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX01TRF9IV0ZBSUw6CisJCWRlZmF1bHQ6CisJCQkvKiBwcm9iZSgpIGhhZCBhIHByb2JsZW0gb3IgdGhlIG1zZHN0YXRlIGNvbnRhaW5zCisJCQkgKiBhbiB1bnJlY29nbml6ZWQgdmFsdWUsIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8uCisJCQkgKi8KKwkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZToKKwkJc3dpdGNoICh3bGFuZGV2LT5tc2RzdGF0ZSkgeworCQljYXNlIFdMQU5fTVNEX0hXUFJFU0VOVDoKKwkJCS8qIERvIG5vdGhpbmcsIHdlJ3JlIGFscmVhZHkgaW4gdGhpcyBzdGF0ZS4qLworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX01TRF9GV0xPQUQ6CisJCWNhc2UgV0xBTl9NU0RfUlVOTklORzoKKwkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UX1BFTkRJTkc7CisJCQkvKgorCQkJICogVE9ETzogU2h1dCBkb3duIHRoZSBNQUMgY29tcGxldGVseS4gSGVyZSBhIGNoaXAKKwkJCSAqIG9yIGJvYXJkIGxldmVsIHJlc2V0IGlzIHByb2JhYmx5IGNhbGxlZCBmb3IuCisJCQkgKiBBZnRlciBhICJkaXNhYmxlIiBfYWxsXyByZXN1bHRzIGFyZSBsb3N0LCBldmVuCisJCQkgKiB0aG9zZSBmcm9tIGEgZndsb2FkLgorCQkJICovCisJCQlpZiAoIXdsYW5kZXYtPmh3cmVtb3ZlZCkKKwkJCQluZXRpZl9jYXJyaWVyX29mZih3bGFuZGV2LT5uZXRkZXYpOworCisJCQloZmEzODR4X2RydnJfc3RvcChodyk7CisKKwkJCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfTk9ORTsKKwkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX01TRF9IV0ZBSUw6CisJCWRlZmF1bHQ6CisJCQkvKiBwcm9iZSgpIGhhZCBhIHByb2JsZW0gb3IgdGhlIG1zZHN0YXRlIGNvbnRhaW5zCisJCQkgKiBhbiB1bnJlY29nbml6ZWQgdmFsdWUsIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8uCisJCQkgKi8KKwkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKwkJYnJlYWs7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfZ2V0Y2FyZGluZm8KKyoKKyogQ29sbGVjdCB0aGUgTklDSUQsIGZpcm13YXJlIHZlcnNpb24gYW5kIGFueSBvdGhlciBpZGVudGlmaWVycworKiB3ZSdkIGxpa2UgdG8gaGF2ZSBpbiBob3N0LXNpZGUgZGF0YSBzdHJ1Y3R1cmVzLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MKKyoJPjAJZi93IHJlcG9ydGVkIGVycm9yCisqCTwwCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJRWl0aGVyLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHByaXNtMnN0YV9nZXRjYXJkaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaW50IAkJCXJlc3VsdCA9IDA7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCVVJTlQxNiAgICAgICAgICAgICAgICAgIHRlbXA7CisJVUlOVDgJCQlzbnVtW0hGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU5dOworCWNoYXIJCQlwc3RyWyhIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOICogNCkgKyAxXTsKKworCURCRkVOVEVSOworCisJLyogQ29sbGVjdCB2ZXJzaW9uIGFuZCBjb21wYXRpYmlsaXR5IGluZm8gKi8KKwkvKiAgU29tZSBhcmUgY3JpdGljYWwsIHNvbWUgYXJlIG5vdCAqLworCS8qIE5JQyBpZGVudGl0eSAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX05JQ0lERU5USVRZLAorCQkJJmh3LT5pZGVudF9uaWMsIHNpemVvZihoZmEzODR4X2NvbXBpZGVudF90KSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgTklDSURFTlRJVFlcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBuaWMgaWQgZmllbGRzIGluIGhvc3QgYnl0ZSBvcmRlciAqLworCWh3LT5pZGVudF9uaWMuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X25pYy5pZCk7CisJaHctPmlkZW50X25pYy52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9uaWMudmFyaWFudCk7CisJaHctPmlkZW50X25pYy5tYWpvciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfbmljLm1ham9yKTsKKwlody0+aWRlbnRfbmljLm1pbm9yID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9uaWMubWlub3IpOworCisJV0xBTl9MT0dfSU5GTyggImlkZW50OiBuaWMgaC93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJCQlody0+aWRlbnRfbmljLmlkLCBody0+aWRlbnRfbmljLm1ham9yLAorCQkJaHctPmlkZW50X25pYy5taW5vciwgaHctPmlkZW50X25pYy52YXJpYW50KTsKKworCS8qIFByaW1hcnkgZi93IGlkZW50aXR5ICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfUFJJSURFTlRJVFksCisJCQkmaHctPmlkZW50X3ByaV9mdywgc2l6ZW9mKGhmYTM4NHhfY29tcGlkZW50X3QpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBQUklJREVOVElUWVxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGdldCBhbGwgdGhlIHByaXZhdGUgZncgaWQgZmllbGRzIGluIGhvc3QgYnl0ZSBvcmRlciAqLworCWh3LT5pZGVudF9wcmlfZncuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3ByaV9mdy5pZCk7CisJaHctPmlkZW50X3ByaV9mdy52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9wcmlfZncudmFyaWFudCk7CisJaHctPmlkZW50X3ByaV9mdy5tYWpvciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfcHJpX2Z3Lm1ham9yKTsKKwlody0+aWRlbnRfcHJpX2Z3Lm1pbm9yID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9wcmlfZncubWlub3IpOworCisJV0xBTl9MT0dfSU5GTyggImlkZW50OiBwcmkgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJCQlody0+aWRlbnRfcHJpX2Z3LmlkLCBody0+aWRlbnRfcHJpX2Z3Lm1ham9yLAorCQkJaHctPmlkZW50X3ByaV9mdy5taW5vciwgaHctPmlkZW50X3ByaV9mdy52YXJpYW50KTsKKworCS8qIFN0YXRpb24gKFNlY29uZGFyeT8pIGYvdyBpZGVudGl0eSAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1NUQUlERU5USVRZLAorCQkJJmh3LT5pZGVudF9zdGFfZncsIHNpemVvZihoZmEzODR4X2NvbXBpZGVudF90KSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgU1RBSURFTlRJVFlcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlpZiAoaHctPmlkZW50X25pYy5pZCA8IDB4ODAwMCkgeworCQlXTEFOX0xPR19FUlJPUigiRkFUQUw6IENhcmQgaXMgbm90IGFuIEludGVyc2lsIFByaXNtMi8yLjUvM1xuIik7CisJCXJlc3VsdCA9IC0xOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBzdGF0aW9uIGZ3IGlkIGZpZWxkcyBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KKwlody0+aWRlbnRfc3RhX2Z3LmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9zdGFfZncuaWQpOworCWh3LT5pZGVudF9zdGFfZncudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpOworCWh3LT5pZGVudF9zdGFfZncubWFqb3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3N0YV9mdy5tYWpvcik7CisJaHctPmlkZW50X3N0YV9mdy5taW5vciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfc3RhX2Z3Lm1pbm9yKTsKKworCS8qIHN0cmlwIG91dCB0aGUgJ3NwZWNpYWwnIHZhcmlhbnQgYml0cyAqLworCWh3LT5tbV9tb2RzID0gaHctPmlkZW50X3N0YV9mdy52YXJpYW50ICYgKEJJVDE0IHwgQklUMTUpOworCWh3LT5pZGVudF9zdGFfZncudmFyaWFudCAmPSB+KChVSU5UMTYpKEJJVDE0IHwgQklUMTUpKTsKKworCWlmICAoIGh3LT5pZGVudF9zdGFfZncuaWQgPT0gMHgxZiApIHsKKwkJaHctPmFwID0gMDsKKwkJV0xBTl9MT0dfSU5GTygKKwkJCSJpZGVudDogc3RhIGYvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCQkJaHctPmlkZW50X3N0YV9mdy5pZCwgaHctPmlkZW50X3N0YV9mdy5tYWpvciwKKwkJCWh3LT5pZGVudF9zdGFfZncubWlub3IsIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCk7CisJfSBlbHNlIHsKKwkJaHctPmFwID0gMTsKKwkJV0xBTl9MT0dfSU5GTygKKwkJCSJpZGVudDogIGFwIGYvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCQkJaHctPmlkZW50X3N0YV9mdy5pZCwgaHctPmlkZW50X3N0YV9mdy5tYWpvciwKKwkJCWh3LT5pZGVudF9zdGFfZncubWlub3IsIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCk7CisJfQorCisJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgTW9kZW0gc3VwcGxpZXIgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9NRklTVVBSQU5HRSwKKwkJCSZody0+Y2FwX3N1cF9tZmksIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBNRklTVVBSQU5HRVxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIG1vZGVtIGludGVyZmFjZSBzdXBwbGllcgorCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9zdXBfbWZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfbWZpLnJvbGUpOworCWh3LT5jYXBfc3VwX21maS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9tZmkuaWQpOworCWh3LT5jYXBfc3VwX21maS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX21maS52YXJpYW50KTsKKwlody0+Y2FwX3N1cF9tZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX21maS5ib3R0b20pOworCWh3LT5jYXBfc3VwX21maS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfbWZpLnRvcCk7CisKKwlXTEFOX0xPR19JTkZPKAorCQkiTUZJOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJCWh3LT5jYXBfc3VwX21maS5yb2xlLCBody0+Y2FwX3N1cF9tZmkuaWQsCisJCWh3LT5jYXBfc3VwX21maS52YXJpYW50LCBody0+Y2FwX3N1cF9tZmkuYm90dG9tLAorCQlody0+Y2FwX3N1cF9tZmkudG9wKTsKKworCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIENvbnRyb2xsZXIgc3VwcGxpZXIgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DRklTVVBSQU5HRSwKKwkJCSZody0+Y2FwX3N1cF9jZmksIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBDRklTVVBSQU5HRVxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIGNvbnRyb2xsZXIgaW50ZXJmYWNlIHN1cHBsaWVyCisJZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9jZmkucm9sZSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9jZmkucm9sZSk7CisJaHctPmNhcF9zdXBfY2ZpLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX2NmaS5pZCk7CisJaHctPmNhcF9zdXBfY2ZpLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfY2ZpLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX2NmaS5ib3R0b20gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfY2ZpLmJvdHRvbSk7CisJaHctPmNhcF9zdXBfY2ZpLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9jZmkudG9wKTsKKworCVdMQU5fTE9HX0lORk8oCisJCSJDRkk6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkJaHctPmNhcF9zdXBfY2ZpLnJvbGUsIGh3LT5jYXBfc3VwX2NmaS5pZCwKKwkJaHctPmNhcF9zdXBfY2ZpLnZhcmlhbnQsIGh3LT5jYXBfc3VwX2NmaS5ib3R0b20sCisJCWh3LT5jYXBfc3VwX2NmaS50b3ApOworCisJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgUHJpbWFyeSBmL3cgc3VwcGxpZXIgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9QUklTVVBSQU5HRSwKKwkJCSZody0+Y2FwX3N1cF9wcmksIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBQUklTVVBSQU5HRVxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIHByaW1hcnkgZmlybXdhcmUgc3VwcGxpZXIKKwlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLworCWh3LT5jYXBfc3VwX3ByaS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3ByaS5yb2xlKTsKKwlody0+Y2FwX3N1cF9wcmkuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfcHJpLmlkKTsKKwlody0+Y2FwX3N1cF9wcmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9wcmkudmFyaWFudCk7CisJaHctPmNhcF9zdXBfcHJpLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9wcmkuYm90dG9tKTsKKwlody0+Y2FwX3N1cF9wcmkudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3ByaS50b3ApOworCisJV0xBTl9MT0dfSU5GTygKKwkJIlBSSTpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQlody0+Y2FwX3N1cF9wcmkucm9sZSwgaHctPmNhcF9zdXBfcHJpLmlkLAorCQlody0+Y2FwX3N1cF9wcmkudmFyaWFudCwgaHctPmNhcF9zdXBfcHJpLmJvdHRvbSwKKwkJaHctPmNhcF9zdXBfcHJpLnRvcCk7CisKKwkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBTdGF0aW9uIGYvdyBzdXBwbGllciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1NUQVNVUFJBTkdFLAorCQkJJmh3LT5jYXBfc3VwX3N0YSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFNUQVNVUFJBTkdFXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgc3RhdGlvbiBmaXJtd2FyZSBzdXBwbGllcgorCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9zdXBfc3RhLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfc3RhLnJvbGUpOworCWh3LT5jYXBfc3VwX3N0YS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9zdGEuaWQpOworCWh3LT5jYXBfc3VwX3N0YS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3N0YS52YXJpYW50KTsKKwlody0+Y2FwX3N1cF9zdGEuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3N0YS5ib3R0b20pOworCWh3LT5jYXBfc3VwX3N0YS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfc3RhLnRvcCk7CisKKwlpZiAoIGh3LT5jYXBfc3VwX3N0YS5pZCA9PSAweDA0ICkgeworCQlXTEFOX0xPR19JTkZPKAorCQkiU1RBOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJCWh3LT5jYXBfc3VwX3N0YS5yb2xlLCBody0+Y2FwX3N1cF9zdGEuaWQsCisJCWh3LT5jYXBfc3VwX3N0YS52YXJpYW50LCBody0+Y2FwX3N1cF9zdGEuYm90dG9tLAorCQlody0+Y2FwX3N1cF9zdGEudG9wKTsKKwl9IGVsc2UgeworCQlXTEFOX0xPR19JTkZPKAorCQkiQVA6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkJaHctPmNhcF9zdXBfc3RhLnJvbGUsIGh3LT5jYXBfc3VwX3N0YS5pZCwKKwkJaHctPmNhcF9zdXBfc3RhLnZhcmlhbnQsIGh3LT5jYXBfc3VwX3N0YS5ib3R0b20sCisJCWh3LT5jYXBfc3VwX3N0YS50b3ApOworCX0KKworCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIHByaW1hcnkgZi93IGFjdG9yLCBDRkkgc3VwcGxpZXIgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9QUklfQ0ZJQUNUUkFOR0VTLAorCQkJJmh3LT5jYXBfYWN0X3ByaV9jZmksIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBQUklfQ0ZJQUNUUkFOR0VTXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgcHJpbWFyeSBmL3cgYWN0b3IsIENGSSBzdXBwbGllcgorCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9hY3RfcHJpX2NmaS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3ByaV9jZmkucm9sZSk7CisJaHctPmNhcF9hY3RfcHJpX2NmaS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9wcmlfY2ZpLmlkKTsKKwlody0+Y2FwX2FjdF9wcmlfY2ZpLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3RfcHJpX2NmaS52YXJpYW50KTsKKwlody0+Y2FwX2FjdF9wcmlfY2ZpLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9wcmlfY2ZpLmJvdHRvbSk7CisJaHctPmNhcF9hY3RfcHJpX2NmaS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3RfcHJpX2NmaS50b3ApOworCisJV0xBTl9MT0dfSU5GTygKKwkJIlBSSS1DRkk6QUNUOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkJaHctPmNhcF9hY3RfcHJpX2NmaS5yb2xlLCBody0+Y2FwX2FjdF9wcmlfY2ZpLmlkLAorCQlody0+Y2FwX2FjdF9wcmlfY2ZpLnZhcmlhbnQsIGh3LT5jYXBfYWN0X3ByaV9jZmkuYm90dG9tLAorCQlody0+Y2FwX2FjdF9wcmlfY2ZpLnRvcCk7CisKKwkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGEgZi93IGFjdG9yLCBDRkkgc3VwcGxpZXIgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9TVEFfQ0ZJQUNUUkFOR0VTLAorCQkJJmh3LT5jYXBfYWN0X3N0YV9jZmksIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFfQ0ZJQUNUUkFOR0VTXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgc3RhdGlvbiBmL3cgYWN0b3IsIENGSSBzdXBwbGllcgorCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9hY3Rfc3RhX2NmaS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9jZmkucm9sZSk7CisJaHctPmNhcF9hY3Rfc3RhX2NmaS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfY2ZpLmlkKTsKKwlody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX2NmaS52YXJpYW50KTsKKwlody0+Y2FwX2FjdF9zdGFfY2ZpLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfY2ZpLmJvdHRvbSk7CisJaHctPmNhcF9hY3Rfc3RhX2NmaS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX2NmaS50b3ApOworCisJV0xBTl9MT0dfSU5GTygKKwkJIlNUQS1DRkk6QUNUOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkJaHctPmNhcF9hY3Rfc3RhX2NmaS5yb2xlLCBody0+Y2FwX2FjdF9zdGFfY2ZpLmlkLAorCQlody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQsIGh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tLAorCQlody0+Y2FwX2FjdF9zdGFfY2ZpLnRvcCk7CisKKwkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGEgZi93IGFjdG9yLCBNRkkgc3VwcGxpZXIgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9TVEFfTUZJQUNUUkFOR0VTLAorCQkJJmh3LT5jYXBfYWN0X3N0YV9tZmksIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFfTUZJQUNUUkFOR0VTXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgc3RhdGlvbiBmL3cgYWN0b3IsIE1GSSBzdXBwbGllcgorCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9hY3Rfc3RhX21maS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9tZmkucm9sZSk7CisJaHctPmNhcF9hY3Rfc3RhX21maS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfbWZpLmlkKTsKKwlody0+Y2FwX2FjdF9zdGFfbWZpLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX21maS52YXJpYW50KTsKKwlody0+Y2FwX2FjdF9zdGFfbWZpLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfbWZpLmJvdHRvbSk7CisJaHctPmNhcF9hY3Rfc3RhX21maS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX21maS50b3ApOworCisJV0xBTl9MT0dfSU5GTygKKwkJIlNUQS1NRkk6QUNUOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkJaHctPmNhcF9hY3Rfc3RhX21maS5yb2xlLCBody0+Y2FwX2FjdF9zdGFfbWZpLmlkLAorCQlody0+Y2FwX2FjdF9zdGFfbWZpLnZhcmlhbnQsIGh3LT5jYXBfYWN0X3N0YV9tZmkuYm90dG9tLAorCQlody0+Y2FwX2FjdF9zdGFfbWZpLnRvcCk7CisKKwkvKiBTZXJpYWwgTnVtYmVyICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSLAorCQkJc251bSwgSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSX0xFTik7CisJaWYgKCAhcmVzdWx0ICkgeworCQl3bGFuX21rcHJpbnRzdHIoc251bSwgSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSX0xFTiwKKwkJCQlwc3RyLCBzaXplb2YocHN0cikpOworCQlXTEFOX0xPR19JTkZPKCJQcmlzbTIgY2FyZCBTTjogJXNcbiIsIHBzdHIpOworCX0gZWxzZSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgUHJpc20yIENhcmQgU05cbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBDb2xsZWN0IHRoZSBNQUMgYWRkcmVzcyAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFIsCisJCXdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsIFdMQU5fQUREUl9MRU4pOworCWlmICggcmVzdWx0ICE9IDAgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgbWFjIGFkZHJlc3NcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBzaG9ydCBwcmVhbWJsZSBpcyBhbHdheXMgaW1wbGVtZW50ZWQgKi8KKwl3bGFuZGV2LT5uc2RjYXBzIHw9IFA4MDIxMV9OU0RDQVBfU0hPUlRfUFJFQU1CTEU7CisKKwkvKiBmaW5kIG91dCBpZiBoYXJkd2FyZSB3ZXAgaXMgaW1wbGVtZW50ZWQgKi8KKwloZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX1BSSVZBQ1lPUFRJTVAsICZ0ZW1wKTsKKwlpZiAodGVtcCkKKwkJd2xhbmRldi0+bnNkY2FwcyB8PSBQODAyMTFfTlNEQ0FQX0hBUkRXQVJFV0VQOworCisJLyogZ2V0IHRoZSBkQm0gU2NhbGluZyBjb25zdGFudCAqLworCWhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GREJNQURKVVNULCAmdGVtcCk7CisJaHctPmRibWFkanVzdCA9IHRlbXA7CisKKwkvKiBPbmx5IGVuYWJsZSBzY2FuIGJ5IGRlZmF1bHQgb24gbmV3ZXIgZmlybXdhcmUgKi8KKyAgICAgICAgaWYgKEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTihody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KSA8CisJICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigxLDUsNSkpIHsKKwkJd2xhbmRldi0+bnNkY2FwcyB8PSBQODAyMTFfTlNEQ0FQX05PU0NBTjsKKwl9CisKKwkvKiBUT0RPOiBTZXQgYW55IGludGVybmFsbHkgbWFuYWdlZCBjb25maWcgaXRlbXMgKi8KKworCWdvdG8gZG9uZTsKK2ZhaWxlZDoKKwlXTEFOX0xPR19FUlJPUigiRmFpbGVkLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7Citkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2dsb2JhbHNldHVwCisqCisqIFNldCBhbnkgZ2xvYmFsIFJJRHMgdGhhdCB3ZSB3YW50IHRvIHNldCBhdCBkZXZpY2UgYWN0aXZhdGlvbi4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzCisqCT4wCWYvdyByZXBvcnRlZCBlcnJvcgorKgk8MAlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcHJpc20yc3RhX2dsb2JhbHNldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwloZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKworCS8qIFNldCB0aGUgbWF4aW11bSBmcmFtZSBzaXplICovCisJcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXTEFOX0RBVEFfTUFYTEVOKTsKK30KKworc3RhdGljIGludCBwcmlzbTJzdGFfc2V0bXVsdGljYXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgbmV0ZGV2aWNlX3QgKmRldikKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwloZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKworCVVJTlQxNiAgcHJvbWlzYzsKKworCURCRkVOVEVSOworCisJLyogSWYgd2UncmUgbm90IHJlYWR5LCB3aGF0J3MgdGhlIHBvaW50PyAqLworCWlmICggaHctPnN0YXRlICE9IEhGQTM4NHhfU1RBVEVfUlVOTklORyApCisJCWdvdG8gZXhpdDsKKworCS8qIElmIHdlJ3JlIGFuIEFQLCBkbyBub3RoaW5nIGhlcmUgKi8KKwlpZiAoaHctPmFwKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAoIChkZXYtPmZsYWdzICYgKElGRl9QUk9NSVNDIHwgSUZGX0FMTE1VTFRJKSkgIT0gMCApCisJCXByb21pc2MgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7CisJZWxzZQorCQlwcm9taXNjID0gUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNl9hc3luYyhodywgSEZBMzg0eF9SSURfUFJPTUlTQ01PREUsIHByb21pc2MpOworCisJLyogWFhYIFRPRE86IGNvbmZpZ3VyZSB0aGUgbXVsdGljYXN0IGxpc3QgKi8KKwkvLyBDTEVBUl9IV19NVUxUSUNBU1RfTElTVAorCS8vIHN0cnVjdCBkZXZfbWNfbGlzdCBlbGVtZW50ID0gZGV2LT5tY19saXN0OworCS8vIHdoaWxlIChlbGVtZW50ICE9IG51bGwpIHsKKwkvLyAgSFdfQUREX01VTFRJQ0FTVF9BRERSKGVsZW1lbnQtPmRtaV9hZGRyLCBkbWlfYWRkcmxlbikKKwkvLyAgZWxlbWVudCA9IGVsZW1lbnQtPm5leHQ7CisJLy8gfQorCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaW5mX2hhbmRvdmVyCisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYSBIYW5kb3ZlciBpbmZvIGZyYW1lLiBTaG91bGQgb25seSBiZSBwcmVzZW50CisqIGluIEFQcyBvbmx5LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglpbmYJCXB0ciB0byBpbmZvIGZyYW1lIChjb250ZW50cyBpbiBoZmEzODR4IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9oYW5kb3Zlcih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworCURCRkVOVEVSOworCVdMQU5fTE9HX0RFQlVHKDIsInJlY2VpdmVkIGluZm9mcmFtZTpIQU5ET1ZFUiAodW5oYW5kbGVkKVxuIik7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9pbmZfdGFsbGllcworKgorKiBIYW5kbGVzIHRoZSByZWNlaXB0IG9mIGEgQ29tbVRhbGxpZXMgaW5mbyBmcmFtZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJaW5mCQlwdHIgdG8gaW5mbyBmcmFtZSAoY29udGVudHMgaW4gaGZhMzg0eCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfdGFsbGllcyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwlVSU5UMTYJCQkqc3JjMTY7CisJVUlOVDMyCQkJKmRzdDsKKwlVSU5UMzIJCQkqc3JjMzI7CisJaW50CQkJaTsKKwlpbnQJCQljbnQ7CisKKwlEQkZFTlRFUjsKKworCS8qCisJKiogRGV0ZXJtaW5lIGlmIHRoZXNlIGFyZSAxNi1iaXQgb3IgMzItYml0IHRhbGxpZXMsIGJhc2VkIG9uIHRoZQorCSoqIHJlY29yZCBsZW5ndGggb2YgdGhlIGluZm8gcmVjb3JkLgorCSovCisKKwljbnQgPSBzaXplb2YoaGZhMzg0eF9Db21tVGFsbGllczMyX3QpIC8gc2l6ZW9mKFVJTlQzMik7CisJaWYgKGluZi0+ZnJhbWVsZW4gPiAyMikgeworCQlkc3QgICA9IChVSU5UMzIgKikgJmh3LT50YWxsaWVzOworCQlzcmMzMiA9IChVSU5UMzIgKikgJmluZi0+aW5mby5jb21tdGFsbGllczMyOworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIGRzdCsrLCBzcmMzMisrKQorCQkJKmRzdCArPSBoZmEzODR4Mmhvc3RfMzIoKnNyYzMyKTsKKwl9IGVsc2UgeworCQlkc3QgICA9IChVSU5UMzIgKikgJmh3LT50YWxsaWVzOworCQlzcmMxNiA9IChVSU5UMTYgKikgJmluZi0+aW5mby5jb21tdGFsbGllczE2OworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIGRzdCsrLCBzcmMxNisrKQorCQkJKmRzdCArPSBoZmEzODR4Mmhvc3RfMTYoKnNyYzE2KTsKKwl9CisKKwlEQkZFWElUOworCisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2luZl9zY2FucmVzdWx0cworKgorKiBIYW5kbGVzIHRoZSByZWNlaXB0IG9mIGEgU2NhbiBSZXN1bHRzIGluZm8gZnJhbWUuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGluZm8gZnJhbWUgKGNvbnRlbnRzIGluIGhmYTM4NHggb3JkZXIpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX3NjYW5yZXN1bHRzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3sKKworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwlpbnQJCQluYnNzOworCWhmYTM4NHhfU2NhblJlc3VsdF90CSpzciA9ICYoaW5mLT5pbmZvLnNjYW5yZXN1bHQpOworCWludAkJCWk7CisJaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QJam9pbnJlcTsKKwlpbnQJCQlyZXN1bHQ7CisJREJGRU5URVI7CisKKwkvKiBHZXQgdGhlIG51bWJlciBvZiByZXN1bHRzLCBmaXJzdCBpbiBieXRlcywgdGhlbiBpbiByZXN1bHRzICovCisJbmJzcyA9IChpbmYtPmZyYW1lbGVuICogc2l6ZW9mKFVJTlQxNikpIC0KKwkJc2l6ZW9mKGluZi0+aW5mb3R5cGUpIC0KKwkJc2l6ZW9mKGluZi0+aW5mby5zY2FucmVzdWx0LnNjYW5yZWFzb24pOworCW5ic3MgLz0gc2l6ZW9mKGhmYTM4NHhfU2NhblJlc3VsdFN1Yl90KTsKKworCS8qIFByaW50IGVtICovCisJV0xBTl9MT0dfREVCVUcoMSwicnggc2NhbnJlc3VsdHMsIHJlYXNvbj0lZCwgbmJzcz0lZDpcbiIsCisJCWluZi0+aW5mby5zY2FucmVzdWx0LnNjYW5yZWFzb24sIG5ic3MpOworCWZvciAoIGkgPSAwOyBpIDwgbmJzczsgaSsrKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsICJjaGlkPSVkIGFubD0lZCBzbD0lZCBiY25pbnQ9JWRcbiIsCisJCQlzci0+cmVzdWx0W2ldLmNoaWQsCisJCQlzci0+cmVzdWx0W2ldLmFubCwKKwkJCXNyLT5yZXN1bHRbaV0uc2wsCisJCQlzci0+cmVzdWx0W2ldLmJjbmludCk7CisJCVdMQU5fTE9HX0RFQlVHKDEsICIgIGNhcGluZm89MHglMDR4IHByb2JlcmVzcF9yYXRlPSVkXG4iLAorCQkJc3ItPnJlc3VsdFtpXS5jYXBpbmZvLAorCQkJc3ItPnJlc3VsdFtpXS5wcm9iZXJlc3BfcmF0ZSk7CisJfQorCS8qIGlzc3VlIGEgam9pbiByZXF1ZXN0ICovCisJam9pbnJlcS5jaGFubmVsID0gc3ItPnJlc3VsdFswXS5jaGlkOworCW1lbWNweSggam9pbnJlcS5ic3NpZCwgc3ItPnJlc3VsdFswXS5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LAorCQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1QsCisJCQkmam9pbnJlcSwgSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOKTsKKwlpZiAocmVzdWx0KSB7CisJCVdMQU5fTE9HX0VSUk9SKCJzZXRjb25maWcoam9pbnJlcSkgZmFpbGVkLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaW5mX2hvc3RzY2FucmVzdWx0cworKgorKiBIYW5kbGVzIHRoZSByZWNlaXB0IG9mIGEgU2NhbiBSZXN1bHRzIGluZm8gZnJhbWUuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGluZm8gZnJhbWUgKGNvbnRlbnRzIGluIGhmYTM4NHggb3JkZXIpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2hvc3RzY2FucmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJCSAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCWludAkJCW5ic3M7CisJREJGRU5URVI7CisKKwluYnNzID0gKGluZi0+ZnJhbWVsZW4gLSAzKSAvIDMyOworCVdMQU5fTE9HX0RFQlVHKDEsICJSZWNlaXZlZCAlZCBob3N0c2NhbiByZXN1bHRzXG4iLCBuYnNzKTsKKworCWlmIChuYnNzID4gMzIpCisJCW5ic3MgPSAzMjsKKworCWlmIChody0+c2NhbnJlc3VsdHMpCisJCWtmcmVlKGh3LT5zY2FucmVzdWx0cyk7CisKKwlody0+c2NhbnJlc3VsdHMgPSBrbWFsbG9jKHNpemVvZihoZmEzODR4X0luZkZyYW1lX3QpLCBHRlBfQVRPTUlDKTsKKwltZW1jcHkoaHctPnNjYW5yZXN1bHRzLCBpbmYsIHNpemVvZihoZmEzODR4X0luZkZyYW1lX3QpKTsKKworCWlmIChuYnNzID09IDApCisJCW5ic3MgPSAtMTsKKworICAgICAgICAvKiBOb3RpZnkvd2FrZSB0aGUgc2xlZXBpbmcgY2FsbGVyLiAqLworICAgICAgICBody0+c2NhbmZsYWcgPSBuYnNzOworICAgICAgICB3YWtlX3VwX2ludGVycnVwdGlibGUoJmh3LT5jbWRxKTsKKworCURCRkVYSVQ7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2luZl9jaGluZm9yZXN1bHRzCisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYSBDaGFubmVsIEluZm8gUmVzdWx0cyBpbmZvIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglpbmYJCXB0ciB0byBpbmZvIGZyYW1lIChjb250ZW50cyBpbiBoZmEzODR4IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9jaGluZm9yZXN1bHRzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkJaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCXVuc2lnbmVkIGludAkJaSwgbjsKKworCURCRkVOVEVSOworCWh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5zY2FuY2hhbm5lbHMgPQorCQloZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5zY2FuY2hhbm5lbHMpOworI2lmIDAKKwltZW1jcHkoJmluZi0+aW5mby5jaGluZm9yZXN1bHQsICZody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMsIHNpemVvZihoZmEzODR4X0NoSW5mb1Jlc3VsdF90KSk7CisjZW5kaWYKKworCWZvciAoaT0wLCBuPTA7IGk8SEZBMzg0eF9DSElORk9SRVNVTFRfTUFYOyBpKyspIHsKKwkJaWYgKGh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5zY2FuY2hhbm5lbHMgJiAoMTw8aSkpIHsKKwkJCWludCAJY2hhbm5lbD1oZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0uY2hpZCktMTsKKwkJCWhmYTM4NHhfQ2hJbmZvUmVzdWx0U3ViX3QgKmNoaW5mb3Jlc3VsdD0maHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtjaGFubmVsXTsKKwkJCWNoaW5mb3Jlc3VsdC0+Y2hpZCAgID0gY2hhbm5lbDsKKwkJCWNoaW5mb3Jlc3VsdC0+YW5sICAgID0gaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5jaGluZm9yZXN1bHQucmVzdWx0W25dLmFubCk7CisJCQljaGluZm9yZXN1bHQtPnBubCAgICA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS5wbmwpOworCQkJY2hpbmZvcmVzdWx0LT5hY3RpdmUgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0uYWN0aXZlKTsKKwkJCVdMQU5fTE9HX0RFQlVHKDIsICJjaGluZm86IGNoYW5uZWwgJWQsICVzIGxldmVsIChhdmcvcGVhayk9JWQvJWQgZEIsIHBjZiAlZFxuIiwKKwkJCQkJY2hhbm5lbCsxLAorCQkJCQljaGluZm9yZXN1bHQtPmFjdGl2ZSAmCisJCQkJCUhGQTM4NHhfQ0hJTkZPUkVTVUxUX0JTU0FDVElWRSA/ICJzaWduYWwiIDogIm5vaXNlIiwKKwkJCQkJY2hpbmZvcmVzdWx0LT5hbmwsIGNoaW5mb3Jlc3VsdC0+cG5sLAorCQkJCQljaGluZm9yZXN1bHQtPmFjdGl2ZSAmIEhGQTM4NHhfQ0hJTkZPUkVTVUxUX1BDRkFDVElWRSA/IDEgOiAwCisJCQkpOworCQkJbisrOworCQl9CisJfQorCWF0b21pY19zZXQoJmh3LT5jaGFubmVsX2luZm8uZG9uZSwgMik7CisKKwlody0+Y2hhbm5lbF9pbmZvLmNvdW50ID0gbjsKKwlEQkZFWElUOworCXJldHVybjsKK30KKwordm9pZCBwcmlzbTJzdGFfcHJvY2Vzc2luZ19kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCit7CisJaGZhMzg0eF90CQkqaHcgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGhmYTM4NHgsIGxpbmtfYmgpOworCXdsYW5kZXZpY2VfdCAgICAgICAgICAgICp3bGFuZGV2ID0gaHctPndsYW5kZXY7CisJaGZhMzg0eF9ieXRlc3RyMzJfdCBzc2lkOworCWludAkJCXJlc3VsdDsKKworCURCRkVOVEVSOworCS8qIEZpcnN0IGxldCdzIHByb2Nlc3MgdGhlIGF1dGggZnJhbWVzICovCisJeworCQlzdHJ1Y3Qgc2tfYnVmZiAgICAgICAgICAqc2tiOworCQloZmEzODR4X0luZkZyYW1lX3QgKmluZjsKKworCQl3aGlsZSAoIChza2IgPSBza2JfZGVxdWV1ZSgmaHctPmF1dGhxKSkgKSB7CisJCQlpbmYgPSAoaGZhMzg0eF9JbmZGcmFtZV90ICopIHNrYi0+ZGF0YTsKKwkJCXByaXNtMnN0YV9pbmZfYXV0aHJlcV9kZWZlcih3bGFuZGV2LCBpbmYpOworCQl9CisKKwl9CisKKwkvKiBOb3cgbGV0J3MgaGFuZGxlIHRoZSBsaW5rc3RhdHVzIHN0dWZmICovCisJaWYgKGh3LT5saW5rX3N0YXR1cyA9PSBody0+bGlua19zdGF0dXNfbmV3KQorCQlnb3RvIGZhaWxlZDsKKworCWh3LT5saW5rX3N0YXR1cyA9IGh3LT5saW5rX3N0YXR1c19uZXc7CisKKwlzd2l0Y2goaHctPmxpbmtfc3RhdHVzKSB7CisJY2FzZSBIRkEzODR4X0xJTktfTk9UQ09OTkVDVEVEOgorCQkvKiBJJ20gY3VycmVudGx5IGFzc3VtaW5nIHRoYXQgdGhpcyBpcyB0aGUgaW5pdGlhbCBsaW5rCisJCSAqIHN0YXRlLiAgSXQgc2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaW1tZWRpYXRlbHkKKwkJICogZm9sbG93aW5nIGFuIEVuYWJsZSBjb21tYW5kLgorCQkgKiBSZXNwb25zZToKKwkJICogQmxvY2sgVHJhbnNtaXRzLCBJZ25vcmUgcmVjZWl2ZXMgb2YgZGF0YSBmcmFtZXMKKwkJICovCisJCW5ldGlmX2NhcnJpZXJfb2ZmKHdsYW5kZXYtPm5ldGRldik7CisKKwkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1OT1RDT05ORUNURUQgKHVuaGFuZGxlZClcbiIpOworCQlicmVhazsKKworCWNhc2UgSEZBMzg0eF9MSU5LX0NPTk5FQ1RFRDoKKwkJLyogVGhpcyBvbmUgaW5kaWNhdGVzIGEgc3VjY2Vzc2Z1bCBzY2FuL2pvaW4vYXV0aC9hc3NvYy4KKwkJICogV2hlbiB3ZSBoYXZlIHRoZSBmdWxsIE1MTUUgY29tcGxlbWVudCwgdGhpcyBldmVudCB3aWxsCisJCSAqIHNpZ25pZnkgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGJvdGggbWxtZV9hdXRoZW50aWNhdGUKKwkJICogYW5kIG1sbWVfYXNzb2NpYXRlLiAgU3RhdGUgbWFuYWdlbWVudCB3aWxsIGdldCBhIGxpdHRsZQorCQkgKiB1Z2x5IGhlcmUuCisJCSAqIFJlc3BvbnNlOgorCQkgKiBJbmRpY2F0ZSBhdXRoZW50aWNhdGlvbiBhbmQvb3IgYXNzb2NpYXRpb24KKwkJICogRW5hYmxlIFRyYW5zbWl0cywgUmVjZWl2ZXMgYW5kIHBhc3MgdXAgZGF0YSBmcmFtZXMKKwkJICovCisKKwkJbmV0aWZfY2Fycmllcl9vbih3bGFuZGV2LT5uZXRkZXYpOworCisJCS8qIElmIHdlIGFyZSBqb2luaW5nIGEgc3BlY2lmaWMgQVAsIHNldCBvdXIgc3RhdGUgYW5kIHJlc2V0IHJldHJpZXMgKi8KKwkJaWYoaHctPmpvaW5fYXAgPT0gMSkKKwkJCWh3LT5qb2luX2FwID0gMjsKKwkJaHctPmpvaW5fcmV0cmllcyA9IDYwOworCisJCS8qIERvbid0IGNhbGwgdGhpcyBpbiBtb25pdG9yIG1vZGUgKi8KKwkJaWYgKCB3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSICkgeworCQkJVUlOVDE2CQkJcG9ydHN0YXR1czsKKworCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1DT05ORUNURURcbiIpOworCisJCQkvKiBGb3Igbm9uLXVzYiBkZXZpY2VzLCB3ZSBjYW4gdXNlIHRoZSBzeW5jIHZlcnNpb25zICovCisJCQkvKiBDb2xsZWN0IHRoZSBCU1NJRCwgYW5kIHNldCBzdGF0ZSB0byBhbGxvdyB0eCAqLworCisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAorCQkJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwKKwkJCQkJCQl3bGFuZGV2LT5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCByZXN1bHQpOworCQkJCWdvdG8gZmFpbGVkOworCQkJfQorCisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAorCQkJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lELAorCQkJCQkJCSZzc2lkLCBzaXplb2Yoc3NpZCkpOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsIHJlc3VsdCk7CisJCQkJZ290byBmYWlsZWQ7CisJCQl9CisJCQlwcmlzbTJtZ210X2J5dGVzdHIycHN0cigoaGZhMzg0eF9ieXRlc3RyX3QgKikmc3NpZCwKKwkJCQkJCShwODAyMTFwc3RyZF90ICopICZ3bGFuZGV2LT5zc2lkKTsKKworCQkJLyogQ29sbGVjdCB0aGUgcG9ydCBzdGF0dXMgKi8KKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywKKwkJCQkJCQkgIEhGQTM4NHhfUklEX1BPUlRTVEFUVVMsICZwb3J0c3RhdHVzKTsKKwkJCWlmICggcmVzdWx0ICkgeworCQkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJCQkJICAgICAgIEhGQTM4NHhfUklEX1BPUlRTVEFUVVMsIHJlc3VsdCk7CisJCQkJZ290byBmYWlsZWQ7CisJCQl9CisJCQl3bGFuZGV2LT5tYWNtb2RlID0KKwkJCQkocG9ydHN0YXR1cyA9PSBIRkEzODR4X1BTVEFUVVNfQ09OTl9JQlNTKSA/CisJCQkJV0xBTl9NQUNNT0RFX0lCU1NfU1RBIDogV0xBTl9NQUNNT0RFX0VTU19TVEE7CisKKwkJCS8qIEdldCB0aGUgYmFsbCByb2xsaW5nIG9uIHRoZSBjb21tcyBxdWFsaXR5IHN0dWZmICovCisJCQlwcmlzbTJzdGFfY29tbXNxdWFsX2RlZmVyKCZody0+Y29tbXNxdWFsX2JoKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSEZBMzg0eF9MSU5LX0RJU0NPTk5FQ1RFRDoKKwkJLyogVGhpcyBvbmUgaW5kaWNhdGVzIHRoYXQgb3VyIGFzc29jaWF0aW9uIGlzIGdvbmUuICBXZSd2ZQorCQkgKiBsb3N0IGNvbm5lY3Rpb24gd2l0aCB0aGUgQVAgYW5kL29yIGJlZW4gZGlzYXNzb2NpYXRlZC4KKwkJICogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgTUFDIGhhcyBjb21wbGV0ZWx5IGNsZWFyZWQgaXQncworCQkgKiBhc3NvY2lhdGVkIHN0YXRlLiAgV2UgKiBzaG91bGQgc2VuZCBhIGRlYXV0aCBpbmRpY2F0aW9uCisJCSAqIChpbXBseWluZyBkaXNhc3NvYykgdXAgKiB0byB0aGUgTUxNRS4KKwkJICogUmVzcG9uc2U6CisJCSAqIEluZGljYXRlIERlYXV0aGVudGljYXRpb24KKwkJICogQmxvY2sgVHJhbnNtaXRzLCBJZ25vcmUgcmVjZWl2ZXMgb2YgZGF0YSBmcmFtZXMKKwkJICovCisJCWlmKGh3LT5qb2luX2FwID09IDIpCisJCXsKKwkJCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90ICAgICAgam9pbnJlcTsKKwkJCWpvaW5yZXEgPSBody0+am9pbnJlcTsKKwkJCS8qIFNlbmQgdGhlIGpvaW4gcmVxdWVzdCAqLworCQkJaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsCisJCQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1QsCisJCQkJJmpvaW5yZXEsIEhGQTM4NHhfUklEX0pPSU5SRVFVRVNUX0xFTik7CisJCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPURJU0NPTk5FQ1RFRCAocmUtc3VibWl0dGluZyBqb2luKVxuIik7CisJCX0gZWxzZSB7CisJCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikKKwkJCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPURJU0NPTk5FQ1RFRCAodW5oYW5kbGVkKVxuIik7CisJCX0KKwkJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9OT05FOworCisJCW5ldGlmX2NhcnJpZXJfb2ZmKHdsYW5kZXYtPm5ldGRldik7CisKKwkJYnJlYWs7CisKKwljYXNlIEhGQTM4NHhfTElOS19BUF9DSEFOR0U6CisJCS8qIFRoaXMgb25lIGluZGljYXRlcyB0aGF0IHRoZSBNQUMgaGFzIGRlY2lkZWQgdG8gYW5kCisJCSAqIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgYSBjaGFuZ2UgdG8gYW5vdGhlciBBUC4gIFdlCisJCSAqIHNob3VsZCBwcm9iYWJseSBpbXBsZW1lbnQgYSByZWFzc29jaWF0aW9uIGluZGljYXRpb24KKwkJICogaW4gcmVzcG9uc2UgdG8gdGhpcyBvbmUuICBJJ20gdGhpbmtpbmcgdGhhdCB0aGUgdGhlCisJCSAqIHA4MDIxMSBsYXllciBuZWVkcyB0byBiZSBub3RpZmllZCBpbiBjYXNlIG9mCisJCSAqIGJ1ZmZlcmluZy9xdWV1ZWluZyBpc3N1ZXMuICBVc2VyIG1vZGUgYWxzbyBuZWVkcyB0byBiZQorCQkgKiBub3RpZmllZCBzbyB0aGF0IGFueSBCU1MgZGVwZW5kZW50IGVsZW1lbnRzIGNhbiBiZQorCQkgKiB1cGRhdGVkLgorCQkgKiBhc3NvY2lhdGVkIHN0YXRlLiAgV2UgKiBzaG91bGQgc2VuZCBhIGRlYXV0aCBpbmRpY2F0aW9uCisJCSAqIChpbXBseWluZyBkaXNhc3NvYykgdXAgKiB0byB0aGUgTUxNRS4KKwkJICogUmVzcG9uc2U6CisJCSAqIEluZGljYXRlIFJlYXNzb2NpYXRpb24KKwkJICogRW5hYmxlIFRyYW5zbWl0cywgUmVjZWl2ZXMgYW5kIHBhc3MgdXAgZGF0YSBmcmFtZXMKKwkJICovCisJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9QVBfQ0hBTkdFXG4iKTsKKworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAorCQkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELAorCQkJCQkJd2xhbmRldi0+YnNzaWQsIFdMQU5fQlNTSURfTEVOKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCByZXN1bHQpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAorCQkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsCisJCQkJCQkmc3NpZCwgc2l6ZW9mKHNzaWQpKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsIHJlc3VsdCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCQlwcmlzbTJtZ210X2J5dGVzdHIycHN0cigoaGZhMzg0eF9ieXRlc3RyX3QgKikmc3NpZCwKKwkJCQkJKHA4MDIxMXBzdHJkX3QgKikgJndsYW5kZXYtPnNzaWQpOworCisKKwkJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX0NPTk5FQ1RFRDsKKwkJbmV0aWZfY2Fycmllcl9vbih3bGFuZGV2LT5uZXRkZXYpOworCisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X0xJTktfQVBfT1VUT0ZSQU5HRToKKwkJLyogVGhpcyBvbmUgaW5kaWNhdGVzIHRoYXQgdGhlIE1BQyBoYXMgZGVjaWRlZCB0aGF0IHRoZQorCQkgKiBBUCBpcyBvdXQgb2YgcmFuZ2UsIGJ1dCBoYXNuJ3QgZm91bmQgYSBiZXR0ZXIgY2FuZGlkYXRlCisJCSAqIHNvIHRoZSBNQUMgbWFpbnRhaW5zIGl0cyAiYXNzb2NpYXRlZCIgc3RhdGUgaW4gY2FzZQorCQkgKiB3ZSBnZXQgYmFjayBpbiByYW5nZS4gIFdlIHNob3VsZCBibG9jayB0cmFuc21pdHMgYW5kCisJCSAqIHJlY2VpdmVzIGluIHRoaXMgc3RhdGUuICBEbyB3ZSBuZWVkIGFuIGluZGljYXRpb24gaGVyZT8KKwkJICogUHJvYmFibHkgbm90IHNpbmNlIGEgcG9sbGluZyB1c2VyLW1vZGUgZWxlbWVudCB3b3VsZAorCQkgKiBnZXQgdGhpcyBzdGF0dXMgZnJvbSBmcm9tIHAyUG9ydFN0YXR1cyhGRDQwKS4gV2hhdCBhYm91dAorCQkgKiBwODAyMTE/CisJCSAqIFJlc3BvbnNlOgorCQkgKiBCbG9jayBUcmFuc21pdHMsIElnbm9yZSByZWNlaXZlcyBvZiBkYXRhIGZyYW1lcworCQkgKi8KKwkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1BUF9PVVRPRlJBTkdFICh1bmhhbmRsZWQpXG4iKTsKKworCQluZXRpZl9jYXJyaWVyX29mZih3bGFuZGV2LT5uZXRkZXYpOworCisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X0xJTktfQVBfSU5SQU5HRToKKwkJLyogVGhpcyBvbmUgaW5kaWNhdGVzIHRoYXQgdGhlIE1BQyBoYXMgZGVjaWRlZCB0aGF0IHRoZQorCQkgKiBBUCBpcyBiYWNrIGluIHJhbmdlLiAgV2UgY29udGludWUgd29ya2luZyB3aXRoIG91cgorCQkgKiBleGlzdGluZyBhc3NvY2lhdGlvbi4KKwkJICogUmVzcG9uc2U6CisJCSAqIEVuYWJsZSBUcmFuc21pdHMsIFJlY2VpdmVzIGFuZCBwYXNzIHVwIGRhdGEgZnJhbWVzCisJCSAqLworCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUFQX0lOUkFOR0VcbiIpOworCisJCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19DT05ORUNURUQ7CisJCW5ldGlmX2NhcnJpZXJfb24od2xhbmRldi0+bmV0ZGV2KTsKKworCQlicmVhazsKKworCWNhc2UgSEZBMzg0eF9MSU5LX0FTU09DRkFJTDoKKwkJLyogVGhpcyBvbmUgaXMgYWN0dWFsbHkgYSBwZWVyIHRvIENPTk5FQ1RFRC4gIFdlJ3ZlCisJCSAqIHJlcXVlc3RlZCBhIGpvaW4gZm9yIGEgZ2l2ZW4gU1NJRCBhbmQgb3B0aW9uYWxseSBCU1NJRC4KKwkJICogV2UgY2FuIHVzZSB0aGlzIG9uZSB0byBpbmRpY2F0ZSBhdXRoZW50aWNhdGlvbiBhbmQKKwkJICogYXNzb2NpYXRpb24gZmFpbHVyZXMuICBUaGUgdHJpY2sgaXMgZ29pbmcgdG8gYmUKKwkJICogMSkgaWRlbnRpZnlpbmcgdGhlIGZhaWx1cmUsIGFuZCAyKSBzdGF0ZSBtYW5hZ2VtZW50LgorCQkgKiBSZXNwb25zZToKKwkJICogRGlzYWJsZSBUcmFuc21pdHMsIElnbm9yZSByZWNlaXZlcyBvZiBkYXRhIGZyYW1lcworCQkgKi8KKwkJaWYoaHctPmpvaW5fYXAgJiYgLS1ody0+am9pbl9yZXRyaWVzID4gMCkKKwkJeworCQkJaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QgICAgICBqb2lucmVxOworCQkJam9pbnJlcSA9IGh3LT5qb2lucmVxOworCQkJLyogU2VuZCB0aGUgam9pbiByZXF1ZXN0ICovCisJCQloZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywKKwkJCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKKwkJCQkmam9pbnJlcSwgSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOKTsKKwkJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9QVNTT0NGQUlMIChyZS1zdWJtaXR0aW5nIGpvaW4pXG4iKTsKKwkJfSBlbHNlIHsKKwkJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9QVNTT0NGQUlMICh1bmhhbmRsZWQpXG4iKTsKKwkJfQorCisJCW5ldGlmX2NhcnJpZXJfb2ZmKHdsYW5kZXYtPm5ldGRldik7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBUaGlzIGlzIGJhZCwgSU8gcG9ydCBwcm9ibGVtcz8gKi8KKwkJV0xBTl9MT0dfV0FSTklORygKKwkJCSJ1bmtub3duIGxpbmtzdGF0dXM9MHglMDJ4XG4iLCBody0+bGlua19zdGF0dXMpOworCQlnb3RvIGZhaWxlZDsKKwkJYnJlYWs7CisJfQorCisJd2xhbmRldi0+bGlua3N0YXR1cyA9IChody0+bGlua19zdGF0dXMgPT0gSEZBMzg0eF9MSU5LX0NPTk5FQ1RFRCk7CisjaWZkZWYgV0lSRUxFU1NfRVhUCisJcDgwMjExd2V4dF9ldmVudF9hc3NvY2lhdGVkKHdsYW5kZXYsIHdsYW5kZXYtPmxpbmtzdGF0dXMpOworI2VuZGlmCisKKyBmYWlsZWQ6CisJREJGRVhJVDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9pbmZfbGlua3N0YXR1cworKgorKiBIYW5kbGVzIHRoZSByZWNlaXB0IG9mIGEgTGluayBTdGF0dXMgaW5mbyBmcmFtZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJaW5mCQlwdHIgdG8gaW5mbyBmcmFtZSAoY29udGVudHMgaW4gaGZhMzg0eCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfbGlua3N0YXR1cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisKKwlEQkZFTlRFUjsKKworCWh3LT5saW5rX3N0YXR1c19uZXcgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmxpbmtzdGF0dXMubGlua3N0YXR1cyk7CisKKwlzY2hlZHVsZV93b3JrKCZody0+bGlua19iaCk7CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9pbmZfYXNzb2NzdGF0dXMKKyoKKyogSGFuZGxlcyB0aGUgcmVjZWlwdCBvZiBhbiBBc3NvY2lhdGlvbiBTdGF0dXMgaW5mbyBmcmFtZS4gU2hvdWxkCisqIGJlIHByZXNlbnQgaW4gQVBzIG9ubHkuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGluZm8gZnJhbWUgKGNvbnRlbnRzIGluIGhmYTM4NHggb3JkZXIpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2Fzc29jc3RhdHVzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF9Bc3NvY1N0YXR1c190CXJlYzsKKwlpbnQJCQlpOworCisJREJGRU5URVI7CisKKwltZW1jcHkoJnJlYywgJmluZi0+aW5mby5hc3NvY3N0YXR1cywgc2l6ZW9mKHJlYykpOworCXJlYy5hc3NvY3N0YXR1cyA9IGhmYTM4NHgyaG9zdF8xNihyZWMuYXNzb2NzdGF0dXMpOworCXJlYy5yZWFzb24gICAgICA9IGhmYTM4NHgyaG9zdF8xNihyZWMucmVhc29uKTsKKworCS8qCisJKiogRmluZCB0aGUgYWRkcmVzcyBpbiB0aGUgbGlzdCBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAgSWYgaXQgd2Fzbid0CisJKiogZm91bmQsIHRoZW4gdGhpcyBhZGRyZXNzIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGF1dGhlbnRpY2F0ZWQgYW5kCisJKiogc29tZXRoaW5nIHdlaXJkIGhhcyBoYXBwZW5lZCBpZiB0aGlzIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYW4KKwkqKiAiYXV0aGVudGljYXRpb24gZmFpbGVkIiBtZXNzYWdlLiAgSWYgdGhlIGFkZHJlc3Mgd2FzIGZvdW5kLCB0aGVuCisJKiogc2V0IHRoZSAiYXNzb2NpYXRlZCIgZmxhZyBmb3IgdGhhdCBzdGF0aW9uLCBiYXNlZCBvbiB3aGV0aGVyIHRoZQorCSoqIHN0YXRpb24gaXMgYXNzb2NpYXRpbmcgb3IgbG9zaW5nIGl0cyBhc3NvY2lhdGlvbi4gIFNvbWV0aGluZyB3ZWlyZAorCSoqIGhhcyBhbHNvIGhhcHBlbmVkIGlmIHdlIGZpbmQgdGhlIGFkZHJlc3MgaW4gdGhlIGxpc3Qgb2YgYXV0aGVudGljYXRlZAorCSoqIHN0YXRpb25zIGJ1dCB3ZSBhcmUgZ2V0dGluZyBhbiAiYXV0aGVudGljYXRpb24gZmFpbGVkIiBtZXNzYWdlLgorCSovCisKKwlmb3IgKGkgPSAwOyBpIDwgaHctPmF1dGhsaXN0LmNudDsgaSsrKQorCQlpZiAobWVtY21wKHJlYy5zdGFfYWRkciwgaHctPmF1dGhsaXN0LmFkZHJbaV0sIFdMQU5fQUREUl9MRU4pID09IDApCisJCQlicmVhazsKKworCWlmIChpID49IGh3LT5hdXRobGlzdC5jbnQpIHsKKwkJaWYgKHJlYy5hc3NvY3N0YXR1cyAhPSBIRkEzODR4X0FTU09DU1RBVFVTX0FVVEhGQUlMKQorCQkJV0xBTl9MT0dfV0FSTklORygiYXNzb2NzdGF0dXMgaW5mbyBmcmFtZSByZWNlaXZlZCBmb3Igbm9uLWF1dGhlbnRpY2F0ZWQgc3RhdGlvbi5cbiIpOworCX0gZWxzZSB7CisJCWh3LT5hdXRobGlzdC5hc3NvY1tpXSA9CisJCQkocmVjLmFzc29jc3RhdHVzID09IEhGQTM4NHhfQVNTT0NTVEFUVVNfU1RBQVNTT0MgfHwKKwkJCSByZWMuYXNzb2NzdGF0dXMgPT0gSEZBMzg0eF9BU1NPQ1NUQVRVU19SRUFTU09DKTsKKworCQlpZiAocmVjLmFzc29jc3RhdHVzID09IEhGQTM4NHhfQVNTT0NTVEFUVVNfQVVUSEZBSUwpCisJCQlXTEFOX0xPR19XQVJOSU5HKCJhdXRoZmFpbCBhc3NvY3N0YXR1cyBpbmZvIGZyYW1lIHJlY2VpdmVkIGZvciBhdXRoZW50aWNhdGVkIHN0YXRpb24uXG4iKTsKKwl9CisKKwlEQkZFWElUOworCisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2luZl9hdXRocmVxCisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYW4gQXV0aGVudGljYXRpb24gUmVxdWVzdCBpbmZvIGZyYW1lLiBTaG91bGQKKyogYmUgcHJlc2VudCBpbiBBUHMgb25seS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJaW5mCQlwdHIgdG8gaW5mbyBmcmFtZSAoY29udGVudHMgaW4gaGZhMzg0eCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfYXV0aHJlcSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCURCRkVOVEVSOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKmluZikpOworCWlmIChza2IpIHsKKwkJc2tiX3B1dChza2IsIHNpemVvZigqaW5mKSk7CisJCW1lbWNweShza2ItPmRhdGEsIGluZiwgc2l6ZW9mKCppbmYpKTsKKwkJc2tiX3F1ZXVlX3RhaWwoJmh3LT5hdXRocSwgc2tiKTsKKwkJc2NoZWR1bGVfd29yaygmaHctPmxpbmtfYmgpOworCX0KKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfYXV0aHJlcV9kZWZlcih3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJCWhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwloZmEzODR4X2F1dGhlbnRpY2F0ZVN0YXRpb25fZGF0YV90ICByZWM7CisKKwlpbnQgICAgaSwgYWRkZWQsIHJlc3VsdCwgY250OworCVVJTlQ4ICAqYWRkcjsKKworCURCRkVOVEVSOworCisJLyoKKwkqKiBCdWlsZCB0aGUgQXV0aGVudGljYXRlU3RhdGlvbiByZWNvcmQuICBJbml0aWFsaXplIGl0IGZvciBkZW55aW5nCisJKiogYXV0aGVudGljYXRpb24uCisJKi8KKworCW1lbWNweShyZWMuYWRkcmVzcywgaW5mLT5pbmZvLmF1dGhyZXEuc3RhX2FkZHIsIFdMQU5fQUREUl9MRU4pOworCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c191bnNwZWNfZmFpbHVyZTsKKworCS8qCisJKiogQXV0aGVudGljYXRlIGJhc2VkIG9uIHRoZSBhY2Nlc3MgbW9kZS4KKwkqLworCisJc3dpdGNoIChody0+YWNjZXNzbW9kZSkgeworCQljYXNlIFdMQU5fQUNDRVNTX05PTkU6CisKKwkJCS8qCisJCQkqKiBEZW55IGFsbCBuZXcgYXV0aGVudGljYXRpb25zLiAgSG93ZXZlciwgaWYgYSBzdGF0aW9uCisJCQkqKiBpcyBBTFJFQURZIGF1dGhlbnRpY2F0ZWQsIHRoZW4gYWNjZXB0IGl0LgorCQkJKi8KKworCQkJZm9yIChpID0gMDsgaSA8IGh3LT5hdXRobGlzdC5jbnQ7IGkrKykKKwkJCQlpZiAobWVtY21wKHJlYy5hZGRyZXNzLCBody0+YXV0aGxpc3QuYWRkcltpXSwKKwkJCQkJCVdMQU5fQUREUl9MRU4pID09IDApIHsKKwkJCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBXTEFOX0FDQ0VTU19BTEw6CisKKwkJCS8qCisJCQkqKiBBbGxvdyBhbGwgYXV0aGVudGljYXRpb25zLgorCQkJKi8KKworCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7CisJCQlicmVhazsKKworCQljYXNlIFdMQU5fQUNDRVNTX0FMTE9XOgorCisJCQkvKgorCQkJKiogT25seSBhbGxvdyB0aGUgYXV0aGVudGljYXRpb24gaWYgdGhlIE1BQyBhZGRyZXNzCisJCQkqKiBpcyBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIGFkZHJlc3Nlcy4KKwkJCSoqCisJCQkqKiBTaW5jZSB0aGlzIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2UgbWF5IGJlIGhlcmUKKwkJCSoqIHdoaWxlIHRoZSBhY2Nlc3MgbGlzdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nCisJCQkqKiB1cGRhdGVkLiAgQ2hvb3NlIHRoZSBsaXN0IHdoaWNoIGlzIGN1cnJlbnRseSBva2F5LgorCQkJKiogU2VlICJwcmlzbTJtaWJfcHJpdl9hY2Nlc3NhbGxvdygpIiBmb3IgZGV0YWlscy4KKwkJCSovCisKKwkJCWlmIChody0+YWxsb3cubW9kaWZ5ID09IDApIHsKKwkJCQljbnQgID0gaHctPmFsbG93LmNudDsKKwkJCQlhZGRyID0gaHctPmFsbG93LmFkZHJbMF07CisJCQl9IGVsc2UgeworCQkJCWNudCAgPSBody0+YWxsb3cuY250MTsKKwkJCQlhZGRyID0gaHctPmFsbG93LmFkZHIxWzBdOworCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIGFkZHIgKz0gV0xBTl9BRERSX0xFTikKKwkJCQlpZiAobWVtY21wKHJlYy5hZGRyZXNzLCBhZGRyLCBXTEFOX0FERFJfTEVOKSA9PSAwKSB7CisJCQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19zdWNjZXNzZnVsOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgV0xBTl9BQ0NFU1NfREVOWToKKworCQkJLyoKKwkJCSoqIEFsbG93IHRoZSBhdXRoZW50aWNhdGlvbiBVTkxFU1MgdGhlIE1BQyBhZGRyZXNzIGlzCisJCQkqKiBpbiB0aGUgbGlzdCBvZiBkZW5pZWQgYWRkcmVzc2VzLgorCQkJKioKKwkJCSoqIFNpbmNlIHRoaXMgaXMgdGhlIGludGVycnVwdCBoYW5kbGVyLCB3ZSBtYXkgYmUgaGVyZQorCQkJKiogd2hpbGUgdGhlIGFjY2VzcyBsaXN0IGlzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcKKwkJCSoqIHVwZGF0ZWQuICBDaG9vc2UgdGhlIGxpc3Qgd2hpY2ggaXMgY3VycmVudGx5IG9rYXkuCisJCQkqKiBTZWUgInByaXNtMm1pYl9wcml2X2FjY2Vzc2RlbnkoKSIgZm9yIGRldGFpbHMuCisJCQkqLworCisJCQlpZiAoaHctPmRlbnkubW9kaWZ5ID09IDApIHsKKwkJCQljbnQgID0gaHctPmRlbnkuY250OworCQkJCWFkZHIgPSBody0+ZGVueS5hZGRyWzBdOworCQkJfSBlbHNlIHsKKwkJCQljbnQgID0gaHctPmRlbnkuY250MTsKKwkJCQlhZGRyID0gaHctPmRlbnkuYWRkcjFbMF07CisJCQl9CisKKwkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19zdWNjZXNzZnVsOworCisJCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIGFkZHIgKz0gV0xBTl9BRERSX0xFTikKKwkJCQlpZiAobWVtY21wKHJlYy5hZGRyZXNzLCBhZGRyLCBXTEFOX0FERFJfTEVOKSA9PSAwKSB7CisJCQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c191bnNwZWNfZmFpbHVyZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQlicmVhazsKKwl9CisKKwkvKgorCSoqIElmIHRoZSBhdXRoZW50aWNhdGlvbiBpcyBva2F5LCB0aGVuIGFkZCB0aGUgTUFDIGFkZHJlc3MgdG8gdGhlIGxpc3QKKwkqKiBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAgRG9uJ3QgYWRkIHRoZSBhZGRyZXNzIGlmIGl0IGlzIGFscmVhZHkgaW4KKwkqKiB0aGUgbGlzdC4gICg4MDIuMTFiIGRvZXMgbm90IHNlZW0gdG8gZGlzYWxsb3cgYSBzdGF0aW9uIGZyb20gaXNzdWluZworCSoqIGFuIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3Qgd2hlbiB0aGUgc3RhdGlvbiBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQuCisJKiogRG9lcyB0aGlzIHNvcnQgb2YgdGhpbmcgZXZlciBoYXBwZW4/ICBXZSBtaWdodCBhcyB3ZWxsIGRvIHRoZSBjaGVjaworCSoqIGp1c3QgaW4gY2FzZS4pCisJKi8KKworCWFkZGVkID0gMDsKKworCWlmIChyZWMuc3RhdHVzID09IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWwpIHsKKwkJZm9yIChpID0gMDsgaSA8IGh3LT5hdXRobGlzdC5jbnQ7IGkrKykKKwkJCWlmIChtZW1jbXAocmVjLmFkZHJlc3MsIGh3LT5hdXRobGlzdC5hZGRyW2ldLCBXTEFOX0FERFJfTEVOKSA9PSAwKQorCQkJCWJyZWFrOworCisJCWlmIChpID49IGh3LT5hdXRobGlzdC5jbnQpIHsKKwkJCWlmIChody0+YXV0aGxpc3QuY250ID49IFdMQU5fQVVUSF9NQVgpIHsKKwkJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfYXBfZnVsbDsKKwkJCX0gZWxzZSB7CisJCQkJbWVtY3B5KGh3LT5hdXRobGlzdC5hZGRyW2h3LT5hdXRobGlzdC5jbnRdLAorCQkJCQlyZWMuYWRkcmVzcywgV0xBTl9BRERSX0xFTik7CisJCQkJaHctPmF1dGhsaXN0LmNudCsrOworCQkJCWFkZGVkID0gMTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJKiogU2VuZCBiYWNrIHRoZSByZXN1bHRzIG9mIHRoZSBhdXRoZW50aWNhdGlvbi4gIElmIHRoaXMgZG9lc24ndCB3b3JrLAorCSoqIHRoZW4gbWFrZSBzdXJlIHRvIHJlbW92ZSB0aGUgYWRkcmVzcyBmcm9tIHRoZSBhdXRoZW50aWNhdGVkIGxpc3QgaWYKKwkqKiBpdCB3YXMgYWRkZWQuCisJKi8KKworCXJlYy5zdGF0dXMgPSBob3N0MmhmYTM4NHhfMTYocmVjLnN0YXR1cyk7CisJcmVjLmFsZ29yaXRobSA9IGluZi0+aW5mby5hdXRocmVxLmFsZ29yaXRobTsKKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0FVVEhFTlRJQ0FURVNUQSwKKwkJCQkJCQkmcmVjLCBzaXplb2YocmVjKSk7CisJaWYgKHJlc3VsdCkgeworCQlpZiAoYWRkZWQpIGh3LT5hdXRobGlzdC5jbnQtLTsKKwkJV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhhdXRoZW50aWNhdGVzdGF0aW9uKSBmYWlsZWQsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwl9CisKKwlEQkZFWElUOworCisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaW5mX3BzdXNlcmNudAorKgorKiBIYW5kbGVzIHRoZSByZWNlaXB0IG9mIGEgUG93ZXJTYXZlVXNlckNvdW50IGluZm8gZnJhbWUuIFNob3VsZAorKiBiZSBwcmVzZW50IGluIEFQcyBvbmx5LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglpbmYJCXB0ciB0byBpbmZvIGZyYW1lIChjb250ZW50cyBpbiBoZmEzODR4IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9wc3VzZXJjbnQod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisKKwlEQkZFTlRFUjsKKworCWh3LT5wc3VzZXJjb3VudCA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8ucHN1c2VyY250LnVzZXJjbnQpOworCisJREJGRVhJVDsKKworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9ldl9kdGltCisqCisqIEhhbmRsZXMgdGhlIERUSU0gZWFybHkgd2FybmluZyBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20yc3RhX2V2X2R0aW0od2xhbmRldmljZV90ICp3bGFuZGV2KQoreworI2lmIDAKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisjZW5kaWYKKwlEQkZFTlRFUjsKKwlXTEFOX0xPR19ERUJVRygzLCAiRFRJTSBldmVudCwgY3VycmVudGx5IHVuaGFuZGxlZC5cbiIpOworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfZXZfaW5mZHJvcAorKgorKiBIYW5kbGVzIHRoZSBJbmZEcm9wIGV2ZW50LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJzdGFfZXZfaW5mZHJvcCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisjaWYgMAorICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKyNlbmRpZgorCURCRkVOVEVSOworCVdMQU5fTE9HX0RFQlVHKDMsICJJbmZvIGZyYW1lIGRyb3BwZWQgZHVlIHRvIGNhcmQgbWVtIGxvdy5cbiIpOworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfZXZfaW5mbworKgorKiBIYW5kbGVzIHRoZSBJbmZvIGV2ZW50LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglpbmYJCXB0ciB0byBhIGdlbmVyaWMgaW5mbyBmcmFtZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworCURCRkVOVEVSOworCWluZi0+aW5mb3R5cGUgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvdHlwZSk7CisJLyogRGlzcGF0Y2ggKi8KKwlzd2l0Y2ggKCBpbmYtPmluZm90eXBlICkgeworCQljYXNlIEhGQTM4NHhfSVRfSEFORE9WRVJBRERSOgorCQkJcHJpc20yc3RhX2luZl9oYW5kb3Zlcih3bGFuZGV2LCBpbmYpOworCQkJYnJlYWs7CisJCWNhc2UgSEZBMzg0eF9JVF9DT01NVEFMTElFUzoKKwkJCXByaXNtMnN0YV9pbmZfdGFsbGllcyh3bGFuZGV2LCBpbmYpOworCQkJYnJlYWs7CisgICAgICAgICAgICAgICBjYXNlIEhGQTM4NHhfSVRfSE9TVFNDQU5SRVNVTFRTOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpc20yc3RhX2luZl9ob3N0c2NhbnJlc3VsdHMod2xhbmRldiwgaW5mKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQljYXNlIEhGQTM4NHhfSVRfU0NBTlJFU1VMVFM6CisJCQlwcmlzbTJzdGFfaW5mX3NjYW5yZXN1bHRzKHdsYW5kZXYsIGluZik7CisJCQlicmVhazsKKwkJY2FzZSBIRkEzODR4X0lUX0NISU5GT1JFU1VMVFM6CisJCQlwcmlzbTJzdGFfaW5mX2NoaW5mb3Jlc3VsdHMod2xhbmRldiwgaW5mKTsKKwkJCWJyZWFrOworCQljYXNlIEhGQTM4NHhfSVRfTElOS1NUQVRVUzoKKwkJCXByaXNtMnN0YV9pbmZfbGlua3N0YXR1cyh3bGFuZGV2LCBpbmYpOworCQkJYnJlYWs7CisJCWNhc2UgSEZBMzg0eF9JVF9BU1NPQ1NUQVRVUzoKKwkJCXByaXNtMnN0YV9pbmZfYXNzb2NzdGF0dXMod2xhbmRldiwgaW5mKTsKKwkJCWJyZWFrOworCQljYXNlIEhGQTM4NHhfSVRfQVVUSFJFUToKKwkJCXByaXNtMnN0YV9pbmZfYXV0aHJlcSh3bGFuZGV2LCBpbmYpOworCQkJYnJlYWs7CisJCWNhc2UgSEZBMzg0eF9JVF9QU1VTRVJDTlQ6CisJCQlwcmlzbTJzdGFfaW5mX3BzdXNlcmNudCh3bGFuZGV2LCBpbmYpOworCQkJYnJlYWs7CisJICAgICAgICBjYXNlIEhGQTM4NHhfSVRfS0VZSURDSEFOR0VEOgorCQkJV0xBTl9MT0dfV0FSTklORygiVW5oYW5kbGVkIElUX0tFWUlEQ0hBTkdFRFxuIik7CisJCQlicmVhazsKKwkgICAgICAgIGNhc2UgSEZBMzg0eF9JVF9BU1NPQ1JFUToKKwkJCVdMQU5fTE9HX1dBUk5JTkcoIlVuaGFuZGxlZCBJVF9BU1NPQ1JFUVxuIik7CisJCQlicmVhazsKKwkgICAgICAgIGNhc2UgSEZBMzg0eF9JVF9NSUNGQUlMVVJFOgorCQkJV0xBTl9MT0dfV0FSTklORygiVW5oYW5kbGVkIElUX01JQ0ZBSUxVUkVcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJCSJVbmtub3duIGluZm8gdHlwZT0weCUwMnhcbiIsIGluZi0+aW5mb3R5cGUpOworCQkJYnJlYWs7CisJfQorCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfZXZfdHhleGMKKyoKKyogSGFuZGxlcyB0aGUgVHhFeGMgZXZlbnQuICBBIFRyYW5zbWl0IEV4Y2VwdGlvbiBldmVudCBpbmRpY2F0ZXMKKyogdGhhdCB0aGUgTUFDJ3MgVFggcHJvY2VzcyB3YXMgdW5zdWNjZXNzZnVsIC0gc28gdGhlIHBhY2tldCBkaWQKKyogbm90IGdldCB0cmFuc21pdHRlZC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJc3RhdHVzCQl0eCBmcmFtZSBzdGF0dXMgd29yZAorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJzdGFfZXZfdHhleGMod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UMTYgc3RhdHVzKQoreworCURCRkVOVEVSOworCisJV0xBTl9MT0dfREVCVUcoMywgIlR4RXhjIHN0YXR1cz0weCV4LlxuIiwgc3RhdHVzKTsKKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfZXZfdHgKKyoKKyogSGFuZGxlcyB0aGUgVHggZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCXN0YXR1cwkJdHggZnJhbWUgc3RhdHVzIHdvcmQKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20yc3RhX2V2X3R4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDE2IHN0YXR1cykKK3sKKwlEQkZFTlRFUjsKKwlXTEFOX0xPR19ERUJVRyg0LCAiVHggQ29tcGxldGUsIHN0YXR1cz0weCUwNHhcbiIsIHN0YXR1cyk7CisJLyogdXBkYXRlIGxpbnV4IG5ldHdvcmsgc3RhdHMgKi8KKwl3bGFuZGV2LT5saW51eF9zdGF0cy50eF9wYWNrZXRzKys7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9ldl9yeAorKgorKiBIYW5kbGVzIHRoZSBSeCBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20yc3RhX2V2X3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlEQkZFTlRFUjsKKworCXA4MDIxMW5ldGRldl9yeCh3bGFuZGV2LCBza2IpOworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfZXZfYWxsb2MKKyoKKyogSGFuZGxlcyB0aGUgQWxsb2MgZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMnN0YV9ldl9hbGxvYyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJREJGRU5URVI7CisKKwlwODAyMTFuZXRkZXZfd2FrZV9xdWV1ZSh3bGFuZGV2KTsKKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUExYIHx8IFdMQU5fSE9TVElGID09IFdMQU5fUENJKQorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwcmlzbTJzdGFfc3VzcGVuZF9wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKyAgICAgICAJd2xhbmRldmljZV90CQkqd2xhbmRldjsKKworCXdsYW5kZXYgPSAod2xhbmRldmljZV90ICopIHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qIHJlc2V0IGhhcmR3YXJlICovCisJaWYgKHdsYW5kZXYpIHsKKwkJcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGUpOworCQlwODAyMTFfc3VzcGVuZCh3bGFuZGV2KTsKKwl9CisKKwkvLyBjYWxsIGEgbmV0aWZfZGV2aWNlX2RldGFjaCh3bGFuZGV2LT5uZXRkZXYpID8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByaXNtMnN0YV9yZXN1bWVfcGNpIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKyAgICAgICAJd2xhbmRldmljZV90CQkqd2xhbmRldjsKKworCXdsYW5kZXYgPSAod2xhbmRldmljZV90ICopIHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmICh3bGFuZGV2KSB7CisJCXByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsIFA4MDIxMUVOVU1faWZzdGF0ZV9kaXNhYmxlKTsKKwkJcDgwMjExX3Jlc3VtZSh3bGFuZGV2KTsKKwl9CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogY3JlYXRlX3dsYW4KKyoKKyogQ2FsbGVkIGF0IG1vZHVsZSBpbml0IHRpbWUuICBUaGlzIGNyZWF0ZXMgdGhlIHdsYW5kZXZpY2VfdCBzdHJ1Y3R1cmUKKyogYW5kIGluaXRpYWxpemVzIGl0IHdpdGggcmVsZXZhbnQgYml0cy4KKyoKKyogQXJndW1lbnRzOgorKglub25lCisqCisqIFJldHVybnM6CisqCXRoZSBjcmVhdGVkIHdsYW5kZXZpY2VfdCBzdHJ1Y3R1cmUuCisqCisqIFNpZGUgZWZmZWN0czoKKyogCWFsc28gYWxsb2NhdGVzIHRoZSBwcml2L2h3IHN0cnVjdHVyZXMuCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHdsYW5kZXZpY2VfdCAqY3JlYXRlX3dsYW4odm9pZCkKK3sKKyAgICAgICAgd2xhbmRldmljZV90ICAgICp3bGFuZGV2ID0gTlVMTDsKKwloZmEzODR4X3QJKmh3ID0gTlVMTDsKKworICAgICAgCS8qIEFsbG9jIG91ciBzdHJ1Y3R1cmVzICovCisJd2xhbmRldiA9CWttYWxsb2Moc2l6ZW9mKHdsYW5kZXZpY2VfdCksIEdGUF9LRVJORUwpOworCWh3ID0JCWttYWxsb2Moc2l6ZW9mKGhmYTM4NHhfdCksIEdGUF9LRVJORUwpOworCisJaWYgKCF3bGFuZGV2IHx8ICFodykgeworCQlXTEFOX0xPR19FUlJPUigiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuXG4iLCBkZXZfaW5mbyk7CisJCWlmICh3bGFuZGV2KQlrZnJlZSh3bGFuZGV2KTsKKwkJaWYgKGh3KQkJa2ZyZWUoaHcpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBDbGVhciBhbGwgdGhlIHN0cnVjdHMgKi8KKwltZW1zZXQod2xhbmRldiwgMCwgc2l6ZW9mKHdsYW5kZXZpY2VfdCkpOworCW1lbXNldChodywgMCwgc2l6ZW9mKGhmYTM4NHhfdCkpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBkZXZpY2Ugb2JqZWN0LiAqLworCXdsYW5kZXYtPm5zZG5hbWUgPSBkZXZfaW5mbzsKKwl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVF9QRU5ESU5HOworCXdsYW5kZXYtPnByaXYgPSBodzsKKwl3bGFuZGV2LT5vcGVuID0gcHJpc20yc3RhX29wZW47CisJd2xhbmRldi0+Y2xvc2UgPSBwcmlzbTJzdGFfY2xvc2U7CisJd2xhbmRldi0+cmVzZXQgPSBwcmlzbTJzdGFfcmVzZXQ7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwl3bGFuZGV2LT5uc2RfcHJvY19yZWFkID0gcHJpc20yc3RhX3Byb2NfcmVhZDsKKyNlbmRpZgorCXdsYW5kZXYtPnR4ZnJhbWUgPSBwcmlzbTJzdGFfdHhmcmFtZTsKKwl3bGFuZGV2LT5tbG1lcmVxdWVzdCA9IHByaXNtMnN0YV9tbG1lcmVxdWVzdDsKKwl3bGFuZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBwcmlzbTJzdGFfc2V0bXVsdGljYXN0OworCXdsYW5kZXYtPnR4X3RpbWVvdXQgPSBoZmEzODR4X3R4X3RpbWVvdXQ7CisKKwl3bGFuZGV2LT5uc2RjYXBzID0gUDgwMjExX05TRENBUF9IV0ZSQUdNRU5UIHwKKwkgICAgICAgICAgICAgICAgICAgUDgwMjExX05TRENBUF9BVVRPSk9JTjsKKworCS8qIEluaXRpYWxpemUgdGhlIGRldmljZSBwcml2YXRlIGRhdGEgc3R1Y3R1cmUuICovCisgICAgICAgIGh3LT5kb3QxMV9kZXNpcmVkX2Jzc190eXBlID0gMTsKKworCXJldHVybiB3bGFuZGV2OworfQorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBpbnQKK3ByaXNtMnN0YV9wcm9jX3JlYWQoCisJY2hhcgkqcGFnZSwKKwljaGFyCSoqc3RhcnQsCisJb2ZmX3QJb2Zmc2V0LAorCWludAljb3VudCwKKwlpbnQJKmVvZiwKKwl2b2lkCSpkYXRhKQoreworCWNoYXIJICpwID0gcGFnZTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSAod2xhbmRldmljZV90ICopIGRhdGE7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKKworCVVJTlQxNiBod3R5cGUgPSAwOworCisJREJGRU5URVI7CisJaWYgKG9mZnNldCAhPSAwKSB7CisJCSplb2YgPSAxOworCQlnb3RvIGV4aXQ7CisJfQorCisJLy8gWFhYIDB4MDAwMSBmb3IgcHJpc20yLjUvMywgMHgwMDAwIGZvciBwcmlzbTIuCisJaHd0eXBlID0gQklUMDsKKworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikKKwlpZiAoaHctPmlzcmFtMTYpCisJCWh3dHlwZSB8PSBCSVQxOworI2VuZGlmCisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisJaHd0eXBlIHw9IEJJVDI7CisjZW5kaWYKKworI2RlZmluZSBQUklTTTJfQ1ZTX0lEICIkSWQ6IHByaXNtMnN0YS5jIDE4MjYgMjAwNy0wMy0xOSAxNTozNzowMFogcGl6emEgJCIKKworCXAgKz0gc3ByaW50ZihwLCAiIyAlcyB2ZXJzaW9uICVzICglcykgJyVzJ1xuXG4iLAorCQkgICAgIGRldl9pbmZvLAorCQkgICAgIFdMQU5fUkVMRUFTRSwgV0xBTl9CVUlMRF9EQVRFLCBQUklTTTJfQ1ZTX0lEKTsKKworCXAgKz0gc3ByaW50ZihwLCAiIyBuaWMgaC93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJCSAgICAgaHctPmlkZW50X25pYy5pZCwgaHctPmlkZW50X25pYy5tYWpvciwKKwkJICAgICBody0+aWRlbnRfbmljLm1pbm9yLCBody0+aWRlbnRfbmljLnZhcmlhbnQpOworCisJcCArPSBzcHJpbnRmKHAsICIjIHByaSBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJICAgICBody0+aWRlbnRfcHJpX2Z3LmlkLCBody0+aWRlbnRfcHJpX2Z3Lm1ham9yLAorCQkgICAgIGh3LT5pZGVudF9wcmlfZncubWlub3IsIGh3LT5pZGVudF9wcmlfZncudmFyaWFudCk7CisKKwlpZiAoaHctPmlkZW50X3N0YV9mdy5pZCA9PSAweDFmKSB7CisJCXAgKz0gc3ByaW50ZihwLCAiIyBzdGEgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJCQkgICAgIGh3LT5pZGVudF9zdGFfZncuaWQsIGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCQkgICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCk7CisJfSBlbHNlIHsKKwkJcCArPSBzcHJpbnRmKHAsICIjIGFwIGYvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCQkJICAgICBody0+aWRlbnRfc3RhX2Z3LmlkLCBody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorCQkJICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLCBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpOworCX0KKworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikKKwlwICs9IHNwcmludGYocCwgIiMgaW5pdGlhbCBuaWMgaHcgdHlwZSwgbmVlZGVkIGZvciBTU0YgcmFtZGxcbiIpOworCXAgKz0gc3ByaW50ZihwLCAiaW5pdG5pY2h3PSUwNHhcbiIsIGh3dHlwZSk7CisjZW5kaWYKKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gKHAgLSBwYWdlKTsKK30KKyNlbmRpZgorCit2b2lkIHByaXNtMnN0YV9jb21tc3F1YWxfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQoreworCWhmYTM4NHhfdAkJKmh3ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBoZmEzODR4LCBjb21tc3F1YWxfYmgpOworICAgICAgICB3bGFuZGV2aWNlX3QgICAgICAgICAgICAqd2xhbmRldiA9IGh3LT53bGFuZGV2OworCWhmYTM4NHhfYnl0ZXN0cjMyX3Qgc3NpZDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCURCRkVOVEVSOworCisJaWYgKGh3LT53bGFuZGV2LT5od3JlbW92ZWQpCisJCWdvdG8gZG9uZTsKKworCS8qIHdlIGRvbid0IGNhcmUgaWYgd2UncmUgaW4gQVAgbW9kZSAqLworCWlmICgod2xhbmRldi0+bWFjbW9kZSA9PSBXTEFOX01BQ01PREVfTk9ORSkgfHwKKwkgICAgKHdsYW5kZXYtPm1hY21vZGUgPT0gV0xBTl9NQUNNT0RFX0VTU19BUCkpIHsKKwkJZ290byBkb25lOworCX0KKworCS8qIEl0IG9ubHkgbWFrZXMgc2Vuc2UgdG8gcG9sbCB0aGVzZSBpbiBub24tSUJTUyAqLworCWlmICh3bGFuZGV2LT5tYWNtb2RlICE9IFdMQU5fTUFDTU9ERV9JQlNTX1NUQSkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9EQk1DT01NU1FVQUxJVFksCisJCQkJCQkmaHctPnF1YWwsCisJCQkJCQlIRkEzODR4X1JJRF9EQk1DT01NU1FVQUxJVFlfTEVOKTsKKworCQlpZiAocmVzdWx0KSB7CisJCQlXTEFOX0xPR19FUlJPUigiZXJyb3IgZmV0Y2hpbmcgY29tbXNxdWFsXG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCS8vIHF1YWwuQ1FfY3VyckJTUzsgLy8gbGluaworCQkvLyBBU0xfY3VyckJTUzsgIC8vIGxldmVsCisJCS8vIHF1YWwuQU5MX2N1cnJGQzsgLy8gbm9pc2UKKworCQlXTEFOX0xPR19ERUJVRygzLCAiY29tbXNxdWFsICVkICVkICVkXG4iLAorCQkJICAgICAgIGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5DUV9jdXJyQlNTKSwKKwkJCSAgICAgICBoZmEzODR4Mmhvc3RfMTYoaHctPnF1YWwuQVNMX2N1cnJCU1MpLAorCQkJICAgICAgIGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5BTkxfY3VyckZDKSk7CisJfQorCisJLyogTGFzdGx5LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgQlNTSUQgZGlkbid0IGNoYW5nZSBvbiB1cyAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCisJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwKKwkJCQkJd2xhbmRldi0+YnNzaWQsIFdMQU5fQlNTSURfTEVOKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsIHJlc3VsdCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAorCQkJCQlIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwKKwkJCQkJJnNzaWQsIHNpemVvZihzc2lkKSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsIHJlc3VsdCk7CisJCWdvdG8gZG9uZTsKKwl9CisJcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoKGhmYTM4NHhfYnl0ZXN0cl90ICopJnNzaWQsCisJCQkJKHA4MDIxMXBzdHJkX3QgKikgJndsYW5kZXYtPnNzaWQpOworCisKKwkvKiBSZXNjaGVkdWxlIHRpbWVyICovCisJbW9kX3RpbWVyKCZody0+Y29tbXNxdWFsX3RpbWVyLCBqaWZmaWVzICsgSFopOworCisgZG9uZToKKwlEQkZFWElUOworfQorCit2b2lkIHByaXNtMnN0YV9jb21tc3F1YWxfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7CisKKwlEQkZFTlRFUjsKKworCXNjaGVkdWxlX3dvcmsoJmh3LT5jb21tc3F1YWxfYmgpOworCisJREJGRVhJVDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ZlcnNpb24uaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDVmODgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvdmVyc2lvbi5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qIHNyYy9pbmNsdWRlL3dsYW4vdmVyc2lvbi5oCisqCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworI2lmbmRlZiBfV0xBTl9WRVJTSU9OX0gKKyNkZWZpbmUgX1dMQU5fVkVSU0lPTl9ICisjaWZuZGVmIEtFUk5FTF9WRVJTSU9OCisjZGVmaW5lIEtFUk5FTF9WRVJTSU9OKGEsYixjKSAoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQorI2VuZGlmCisKKy8qIFdMQU5fSE9TVElGIChnZW5lcmFsbHkgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUsIG5vdCBkZXRlY3RlZCkgKi8KKyNkZWZpbmUgV0xBTl9OT05FICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdMQU5fUENNQ0lBICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTEFOX0lTQSAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgV0xBTl9QQ0kgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdMQU5fVVNCICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBXTEFOX1BMWCAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgV0xBTl9TTEFWRSAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFdMQU5fUkVMRUFTRQkiMC4yLjgiCisjZGVmaW5lIFdMQU5fUkVMRUFTRV9DT0RFIDB4MDAwMjA4CisjZGVmaW5lIFdMQU5fQlVJTERfREFURSAiVGh1IE9jdCAgMiAxMTowNDo0MiBQRFQgMjAwOCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy93bGFuX2NvbXBhdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvd2xhbl9jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzAyNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvd2xhbl9jb21wYXQuaApAQCAtMCwwICsxLDc1NyBAQAorLyogd2xhbl9jb21wYXQuaAorKgorKiBUeXBlcyBhbmQgbWFjcm9zIHRvIGFpZCBpbiBwb3J0YWJpbGl0eQorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfV0xBTl9DT01QQVRfSAorI2RlZmluZSBfV0xBTl9DT01QQVRfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gRXN0YWJsaXNoIFBsYXRmb3JtIElkZW50aXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBLZXkgbWFjcm9zOiAqLworLyogV0xBTl9DUFVfRkFNSUxZICovCisJI2RlZmluZSBXTEFOX0l4ODYJCQkxCisJI2RlZmluZSBXTEFOX1BQQwkJCTIKKwkjZGVmaW5lIFdMQU5fSXg5NgkJCTMKKwkjZGVmaW5lIFdMQU5fQVJNCQkJNAorCSNkZWZpbmUgV0xBTl9BTFBIQQkJCTUKKwkjZGVmaW5lIFdMQU5fTUlQUwkJCTYKKwkjZGVmaW5lIFdMQU5fSFBQQQkJCTcKKwkjZGVmaW5lIFdMQU5fU1BBUkMJCQk4CisJI2RlZmluZSBXTEFOX1NIICAgIAkJCTkKKwkjZGVmaW5lIFdMQU5feDg2XzY0ICAgICAgICAgICAgICAgICAgICAgMTAKKy8qIFdMQU5fU1lTQVJDSCAqLworCSNkZWZpbmUgV0xBTl9QQ0FUCQkJMQorCSNkZWZpbmUgV0xBTl9NQlgJCQkyCisJI2RlZmluZSBXTEFOX1JQWAkJCTMKKwkjZGVmaW5lIFdMQU5fTFdBUkNICQkJNAorCSNkZWZpbmUgV0xBTl9QTUFDCQkJNQorCSNkZWZpbmUgV0xBTl9TS0lGRgkJCTYKKwkjZGVmaW5lIFdMQU5fQklUU1kJCQk3CisJI2RlZmluZSBXTEFOX0FMUEhBQVJDSAkJCTcKKwkjZGVmaW5lIFdMQU5fTUlQU0FSQ0gJCQk5CisJI2RlZmluZSBXTEFOX0hQUEFBUkNICQkJMTAKKwkjZGVmaW5lIFdMQU5fU1BBUkNBUkNICQkJMTEKKwkjZGVmaW5lIFdMQU5fU0hBUkNIICAgCQkJMTIKKworLyogTm90ZTogdGhlIFBMWCBIT1NUSUYgYWJvdmUgcmVmZXJzIHRvIHNvbWUgdmVuZG9ycyBpbXBsZW1lbnRhdGlvbnMgZm9yICovCisvKiAgICAgICBQQ0kuICBJdCdzIGEgUExYIGNoaXAgdGhhdCBpcyBhIFBDSSB0byBQQ01DSUEgYWRhcHRlciwgYnV0IGl0ICAgKi8KKy8qICAgICAgIGlzbid0IGEgcmVhbCBQQ01DSUEgaG9zdCBpbnRlcmZhY2UgYWRhcHRlciBwcm92aWRpbmcgYWxsIHRoZSAgICAqLworLyogICAgICAgY2FyZCZzb2NrZXQgc2VydmljZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNpZiAoZGVmaW5lZChDT05GSUdfUFBDKSB8fCBkZWZpbmVkKENPTkZJR184eHgpIHx8IGRlZmluZWQoX19wb3dlcnBjX18pKQorI2lmbmRlZiBfX3BwY19fCisjZGVmaW5lIF9fcHBjX18KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisKKyNpZm5kZWYgQVVUT0NPTkZfSU5DTFVERUQKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKQorCSNkZWZpbmUgV0xBTl9DUFVfRkFNSUxZCQlXTEFOX3g4Nl82NAorCSNkZWZpbmUgV0xBTl9TWVNBUkNICQlXTEFOX1BDQVQKKyNlbGlmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19pNDg2X18pIHx8IGRlZmluZWQoX19pNTg2X18pIHx8IGRlZmluZWQoX19pNjg2X18pCisJI2RlZmluZSBXTEFOX0NQVV9GQU1JTFkJCVdMQU5fSXg4NgorCSNkZWZpbmUgV0xBTl9TWVNBUkNICQlXTEFOX1BDQVQKKyNlbGlmIGRlZmluZWQoX19wcGNfXykKKwkjZGVmaW5lIFdMQU5fQ1BVX0ZBTUlMWQkJV0xBTl9QUEMKKwkjaWYgZGVmaW5lZChDT05GSUdfTUJYKQorCQkjZGVmaW5lIFdMQU5fU1lTQVJDSAlXTEFOX01CWAorCSNlbGlmIGRlZmluZWQoQ09ORklHX1JQWExJVEUpCisJCSNkZWZpbmUgV0xBTl9TWVNBUkNICVdMQU5fUlBYCisJI2VsaWYgZGVmaW5lZChDT05GSUdfUlBYQ0xBU1NJQykKKwkJI2RlZmluZSBXTEFOX1NZU0FSQ0gJV0xBTl9SUFgKKwkjZWxzZQorCQkjZGVmaW5lIFdMQU5fU1lTQVJDSAlXTEFOX1BNQUMKKwkjZW5kaWYKKyNlbGlmIGRlZmluZWQoX19hcm1fXykKKwkjZGVmaW5lIFdMQU5fQ1BVX0ZBTUlMWQkJV0xBTl9BUk0KKwkjZGVmaW5lIFdMQU5fU1lTQVJDSAkJV0xBTl9TS0lGRgorI2VsaWYgZGVmaW5lZChfX2FscGhhX18pCisJI2RlZmluZSBXTEFOX0NQVV9GQU1JTFkJCVdMQU5fQUxQSEEKKwkjZGVmaW5lIFdMQU5fU1lTQVJDSAkJV0xBTl9BTFBIQUFSQ0gKKyNlbGlmIGRlZmluZWQoX19taXBzX18pCisJI2RlZmluZSBXTEFOX0NQVV9GQU1JTFkJCVdMQU5fTUlQUworCSNkZWZpbmUgV0xBTl9TWVNBUkNICQlXTEFOX01JUFNBUkNICisjZWxpZiBkZWZpbmVkKF9faHBwYV9fKQorCSNkZWZpbmUgV0xBTl9DUFVfRkFNSUxZCQlXTEFOX0hQUEEKKwkjZGVmaW5lIFdMQU5fU1lTQVJDSAkJV0xBTl9IUFBBQVJDSAorI2VsaWYgZGVmaW5lZChfX3NwYXJjX18pCisgICAgICAgICNkZWZpbmUgV0xBTl9DUFVfRkFNSUxZICAgICAgICAgV0xBTl9TUEFSQworICAgICAgICAjZGVmaW5lIFdMQU5fU1lTQVJDSCAgICAgICAgICAgIFdMQU5fU1BBUkMKKyNlbGlmIGRlZmluZWQoX19zaF9fKQorICAgICAgICAjZGVmaW5lIFdMQU5fQ1BVX0ZBTUlMWSAgICAgICAgIFdMQU5fU0gKKyAgICAgICAgI2RlZmluZSBXTEFOX1NZU0FSQ0ggICAgICAgICAgICBXTEFOX1NIQVJDSAorICAgICAgICAjaWZuZGVmIF9fTElUVExFX0VORElBTl9fCisgICAgICAgICNkZWZpbmUgX19MSVRUTEVfRU5ESUFOX18KKyAgICAgICAgI2VuZGlmCisjZWxzZQorCSNlcnJvciAiTm8gQ1BVIGlkZW50aWZpZWQhIgorI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKgorICAgU29tZSBiaWcgZW5kaWFuIG1hY2hpbmVzIGltcGxpY2l0bHkgZG8gYWxsIEkvTyBpbiBsaXR0bGUgZW5kaWFuIG1vZGUuCisKKyAgIEluIHBhcnRpY3VsYXI6CisgICAgICAgICAgTGludXgvUFBDIG9uIFBvd2VyTWFjcyAoUENJKQorCSAgQXJtL0ludGVsIFhzY2FsZSAoUENJKQorCisgICBUaGlzIG1heSBhbHNvIGFmZmVjdCBQTFggYm9hcmRzIGFuZCBvdGhlciBCRSAmfCBQUEMgcGxhdGZvcm1zOworICAgYXMgbmV3IG9uZXMgYXJlIGRpc2NvdmVyZWQsIGFkZCB0aGVtIGJlbG93LgorKi8KKworI2lmIGRlZmluZWQoV0xBTl9IT1NUSUYpCisjaWYgKChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkgfHwgKFdMQU5fSE9TVElGID09IFdMQU5fUExYKSkKKyNpZiAoKFdMQU5fU1lTQVJDSCA9PSBXTEFOX1NLSUZGKSB8fCAoV0xBTl9TWVNBUkNIID09IFdMQU5fUE1BQykgfHwgKFdMQU5fU1lTQVJDSCA9PSBXTEFOX1NQQVJDKSkKKyNkZWZpbmUgUkVWRVJTRV9FTkRJQU4KKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tLS0tIEJpdCBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIEJJVDAJMHgwMDAwMDAwMQorI2RlZmluZSBCSVQxCTB4MDAwMDAwMDIKKyNkZWZpbmUgQklUMgkweDAwMDAwMDA0CisjZGVmaW5lIEJJVDMJMHgwMDAwMDAwOAorI2RlZmluZSBCSVQ0CTB4MDAwMDAwMTAKKyNkZWZpbmUgQklUNQkweDAwMDAwMDIwCisjZGVmaW5lIEJJVDYJMHgwMDAwMDA0MAorI2RlZmluZSBCSVQ3CTB4MDAwMDAwODAKKyNkZWZpbmUgQklUOAkweDAwMDAwMTAwCisjZGVmaW5lIEJJVDkJMHgwMDAwMDIwMAorI2RlZmluZSBCSVQxMAkweDAwMDAwNDAwCisjZGVmaW5lIEJJVDExCTB4MDAwMDA4MDAKKyNkZWZpbmUgQklUMTIJMHgwMDAwMTAwMAorI2RlZmluZSBCSVQxMwkweDAwMDAyMDAwCisjZGVmaW5lIEJJVDE0CTB4MDAwMDQwMDAKKyNkZWZpbmUgQklUMTUJMHgwMDAwODAwMAorI2RlZmluZSBCSVQxNgkweDAwMDEwMDAwCisjZGVmaW5lIEJJVDE3CTB4MDAwMjAwMDAKKyNkZWZpbmUgQklUMTgJMHgwMDA0MDAwMAorI2RlZmluZSBCSVQxOQkweDAwMDgwMDAwCisjZGVmaW5lIEJJVDIwCTB4MDAxMDAwMDAKKyNkZWZpbmUgQklUMjEJMHgwMDIwMDAwMAorI2RlZmluZSBCSVQyMgkweDAwNDAwMDAwCisjZGVmaW5lIEJJVDIzCTB4MDA4MDAwMDAKKyNkZWZpbmUgQklUMjQJMHgwMTAwMDAwMAorI2RlZmluZSBCSVQyNQkweDAyMDAwMDAwCisjZGVmaW5lIEJJVDI2CTB4MDQwMDAwMDAKKyNkZWZpbmUgQklUMjcJMHgwODAwMDAwMAorI2RlZmluZSBCSVQyOAkweDEwMDAwMDAwCisjZGVmaW5lIEJJVDI5CTB4MjAwMDAwMDAKKyNkZWZpbmUgQklUMzAJMHg0MDAwMDAwMAorI2RlZmluZSBCSVQzMQkweDgwMDAwMDAwCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCit0eXBlZGVmIHVfaW50OF90CVVJTlQ4OwordHlwZWRlZiB1X2ludDE2X3QJVUlOVDE2OwordHlwZWRlZiB1X2ludDMyX3QJVUlOVDMyOworCit0eXBlZGVmIGludDhfdAkJSU5UODsKK3R5cGVkZWYgaW50MTZfdAkJSU5UMTY7Cit0eXBlZGVmIGludDMyX3QJCUlOVDMyOworCit0eXBlZGVmIHVuc2lnbmVkIGludCAgICBVSU5UOwordHlwZWRlZiBzaWduZWQgaW50ICAgICAgSU5UOworCit0eXBlZGVmIHVfaW50NjRfdAlVSU5UNjQ7Cit0eXBlZGVmIGludDY0X3QJCUlOVDY0OworCisjZGVmaW5lIFVJTlQ4X01BWAkoMHhmZlVMKQorI2RlZmluZSBVSU5UMTZfTUFYCSgweGZmZmZVTCkKKyNkZWZpbmUgVUlOVDMyX01BWAkoMHhmZmZmZmZmZlVMKQorCisjZGVmaW5lIElOVDhfTUFYCSgweDdmTCkKKyNkZWZpbmUgSU5UMTZfTUFYCSgweDdmZmZMKQorI2RlZmluZSBJTlQzMl9NQVgJKDB4N2ZmZmZmZmZMKQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gQ29tcGlsZXIgUG9ydGFiaWxpdHkgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisjZGVmaW5lIF9fV0xBTl9BVFRSSUJfUEFDS19fCQlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tLS0tIE9TIFBvcnRhYmlsaXR5IE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaWZuZGVmIFdMQU5fREJWQVIKKyNkZWZpbmUgV0xBTl9EQlZBUgl3bGFuX2RlYnVnCisjZW5kaWYKKworI2lmbmRlZiBLRVJORUxfVkVSU0lPTgorI2RlZmluZSBLRVJORUxfVkVSU0lPTihhLGIsYykgKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSkKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkpCisjICBpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDgpKQorIyAgICBpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjICBlbHNlCisjICAgIGluY2x1ZGUgPGFzbS9oYXJkaXJxLmg+CisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX0tFUk5FTF9fKQorIyAgZGVmaW5lIFBSRUVNUFRfTUFTSyAgKDB4MDAwMDAwRkZVTCkKKyMgIGRlZmluZSBwcmVlbXB0X2NvdW50KCkgKDBVTCkKKyNlbmRpZgorCisjZGVmaW5lIFdMQU5fTE9HX0VSUk9SKHgsYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSICIlczogIiB4ICwgX19GVU5DVElPTl9fICwgIyNhcmdzKTsKKworI2RlZmluZSBXTEFOX0xPR19XQVJOSU5HKHgsYXJncy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgeCAsIF9fRlVOQ1RJT05fXyAsICMjYXJncyk7CisKKyNkZWZpbmUgV0xBTl9MT0dfTk9USUNFKHgsYXJncy4uLikgcHJpbnRrKEtFUk5fTk9USUNFICIlczogIiB4ICwgX19GVU5DVElPTl9fICwgIyNhcmdzKTsKKworI2RlZmluZSBXTEFOX0xPR19JTkZPKGFyZ3MuLi4gKSBwcmludGsoS0VSTl9JTkZPIGFyZ3MpCisKKyNpZiBkZWZpbmVkKFdMQU5fSU5DTFVERV9ERUJVRykKKwkjZGVmaW5lIFdMQU5fQVNTRVJUKGMpIGlmICgoIShjKSkgJiYgV0xBTl9EQlZBUiA+PSAxKSB7IFwKKwkJV0xBTl9MT0dfREVCVUcoMSwgIkFzc2VydGlvbiBmYWlsdXJlIVxuIik7IH0KKwkjZGVmaW5lIFdMQU5fSEVYX0RVTVAoIGwsIHgsIHAsIG4pCWlmKCBXTEFOX0RCVkFSID49IChsKSApeyBcCisJCWludCBfX2lfXzsgXAorCQlwcmludGsoS0VSTl9ERUJVRyB4ICI6Iik7IFwKKwkJZm9yKCBfX2lfXz0wOyBfX2lfXyA8IChuKTsgX19pX18rKykgXAorCQkJcHJpbnRrKCAiICUwMngiLCAoKFVJTlQ4KikocCkpW19faV9fXSk7IFwKKwkJcHJpbnRrKCJcbiIpOyB9CisJI2RlZmluZSBEQkZFTlRFUiB7IGlmICggV0xBTl9EQlZBUiA+PSA1ICl7IFdMQU5fTE9HX0RFQlVHKDMsIi0tLS0+XG4iKTsgfSB9CisJI2RlZmluZSBEQkZFWElUICB7IGlmICggV0xBTl9EQlZBUiA+PSA1ICl7IFdMQU5fTE9HX0RFQlVHKDMsIjwtLS0tXG4iKTsgfSB9CisKKwkjZGVmaW5lIFdMQU5fTE9HX0RFQlVHKGwseCxhcmdzLi4uKSBpZiAoIFdMQU5fREJWQVIgPj0gKGwpKSBwcmludGsoS0VSTl9ERUJVRyAiJXMoJWx1KTogIiB4ICwgIF9fRlVOQ1RJT05fXywgKHByZWVtcHRfY291bnQoKSAmIFBSRUVNUFRfTUFTSyksICMjYXJncyApOworI2Vsc2UKKwkjZGVmaW5lIFdMQU5fQVNTRVJUKGMpCisJI2RlZmluZSBXTEFOX0hFWF9EVU1QKCBsLCBzLCBwLCBuKQorCSNkZWZpbmUgREJGRU5URVIKKwkjZGVmaW5lIERCRkVYSVQKKworCSNkZWZpbmUgV0xBTl9MT0dfREVCVUcobCwgcywgYXJncy4uLikKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBfX1NNUF9fCQkJMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisKKyNpZiAoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkgfHwgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMTkpKSkKKyNkZWZpbmUgVVJCX09OTFlfQ0FMTEJBQ0sKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxOSkpCisjZGVmaW5lIFBUX1JFR1MgICAgLCBzdHJ1Y3QgcHRfcmVncyAqcmVncworI2Vsc2UKKyNkZWZpbmUgUFRfUkVHUworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDcpKQorIyAgZGVmaW5lIGRlbF9zaW5nbGVzaG90X3RpbWVyX3N5bmMoYSkgIGRlbF90aW1lcl9zeW5jKGEpCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw0LDE3KSkKKyNkZWZpbmUgQ09ORklHX05FVExJTksJCTEKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDQsMCkpCisjZGVmaW5lIGtmcmVlX3MoYSwgYikJa2ZyZWUoKGEpKQorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwyLDE4KSkKKyNpZm5kZWYgaW5pdF93YWl0cXVldWVfaGVhZAorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDAsMTYpKQorI2RlZmluZSBpbml0X3dhaXRxdWV1ZV9oZWFkKHApICAoKihwKSA9IE5VTEwpCisjZWxzZQorI2RlZmluZSBpbml0X3dhaXRxdWV1ZV9oZWFkKHApICBpbml0X3dhaXRxdWV1ZShwKQorI2VuZGlmCit0eXBlZGVmIHN0cnVjdCB3YWl0X3F1ZXVlICp3YWl0X3F1ZXVlX2hlYWRfdDsKK3R5cGVkZWYgc3RydWN0IHdhaXRfcXVldWUgd2FpdF9xdWV1ZV90OworI2RlZmluZSBzZXRfY3VycmVudF9zdGF0ZShiKSAgeyBjdXJyZW50LT5zdGF0ZSA9IChiKTsgbWIoKTsgfQorI2RlZmluZSBpbml0X3dhaXRxdWV1ZV9lbnRyeShhLCBiKSB7IChhKS0+dGFzayA9IGN1cnJlbnQ7IH0KKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQKKy8vIHJldHZhbCA9PSAwOyBzaWduYWwgbWV0OyB3ZSdyZSBnb29kLgorLy8gcmV0dmFsIDwgMDsgaW50ZXJydXB0ZWQgYnkgc2lnbmFsLgorLy8gcmV0dmFsID4gMDsgdGltZWQgb3V0LgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDQsMCkpICAvLyBmaXhtZT8KKworI2RlZmluZSBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIHJldCkgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB3YWl0X3F1ZXVlX3QgX193YWl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGluaXRfd2FpdHF1ZXVlX2VudHJ5KCZfX3dhaXQsIGN1cnJlbnQpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGFkZF93YWl0X3F1ZXVlKCZ3cSwgJl9fd2FpdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZm9yICg7OykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIGlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzY2hlZHVsZV90aW1lb3V0KHJldCkgICAgOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIHJldCA9IC1FUkVTVEFSVFNZUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZ3cSwgJl9fd2FpdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCisjZWxzZSAvLyAyLjIKKworCisjZGVmaW5lIF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgcmV0KSAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0cnVjdCB3YWl0X3F1ZXVlIF9fd2FpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fd2FpdC50YXNrID0gY3VycmVudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGFkZF93YWl0X3F1ZXVlKCZ3cSwgJl9fd2FpdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZvciAoOzspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzY2hlZHVsZV90aW1lb3V0KHJldCk7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJldCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgcmV0ID0gLUVSRVNUQVJUU1lTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZ3cSwgJl9fd2FpdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCisjZW5kaWYgIC8vIHZlcnNpb24gPj0gMi40CisKKyNkZWZpbmUgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJICBcCisoewkJCQkJCQkJCSAgXAorCWxvbmcgX19yZXQgPSB0aW1lb3V0OwkJCQkJCSAgXAorCWlmICghKGNvbmRpdGlvbikpCQkJCQkJICBcCisJCV9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgX19yZXQpOyBcCisJX19yZXQ7CQkJCQkJCQkgIFwKK30pCisKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwyMCkpCisjaWZkZWYgX0xJTlVYX0xJU1RfSAorCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlX3RhaWwoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKyAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworICAgICAgICBfX2xpc3RfZGVsKGxpc3QtPnByZXYsIGxpc3QtPm5leHQpOworICAgICAgICBsaXN0X2FkZF90YWlsKGxpc3QsIGhlYWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X3NwbGljZShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZmlyc3QgPSBsaXN0LT5uZXh0OworICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGFzdCA9IGxpc3QtPnByZXY7CisgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICphdCA9IGhlYWQtPm5leHQ7CisKKyAgICAgIGZpcnN0LT5wcmV2ID0gaGVhZDsKKyAgICAgIGhlYWQtPm5leHQgPSBmaXJzdDsKKworICAgICAgbGFzdC0+bmV4dCA9IGF0OworICAgICAgYXQtPnByZXYgPSBsYXN0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisgICAgICBfX2xpc3RfZGVsKGxpc3QtPnByZXYsIGxpc3QtPm5leHQpOworICAgICAgbGlzdF9hZGQobGlzdCwgaGVhZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3NwbGljZV9pbml0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWlmICghbGlzdF9lbXB0eShsaXN0KSkgeworCQlfX2xpc3Rfc3BsaWNlKGxpc3QsIGhlYWQpOworCQlJTklUX0xJU1RfSEVBRChsaXN0KTsKKwl9Cit9CisKKworI2VuZGlmICAvLyBMSVNUX0gKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMSw5MCkpCisjZGVmaW5lIHNwaW5fbG9jayhsKSAgICAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc3Bpbl91bmxvY2sobCkgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBzcGluX2xvY2tfaXJxc2F2ZShsLGYpICBkbyB7IHNhdmVfZmxhZ3MoZik7IGNsaSgpOyB9IHdoaWxlICgwKQorI2RlZmluZSBzcGluX3VubG9ja19pcnFyZXN0b3JlKGwsZikgZG8geyByZXN0b3JlX2ZsYWdzKGYpOyB9IHdoaWxlICgwKQorI2RlZmluZSBzcGluX2xvY2tfaW5pdChzKSAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNwaW5fdHJ5bG9jayhsKSAgICAgICAgICgxKQordHlwZWRlZiBpbnQgc3BpbmxvY2tfdDsKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSkgLy8gWFhYID8/PworI2RlZmluZSBzcGluX2xvY2tfYmggICAgICAgICBzcGluX2xvY2sKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSkKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIHNwaW5faXNfbG9ja2VkKHgpICAgICAgICgqKHZvbGF0aWxlIGNoYXIgKikoJih4KS0+bG9jaykgPD0gMCkKKyNlbHNlCisjZGVmaW5lIHNwaW5faXNfbG9ja2VkKGwpICAgICAgICgwKQorI2VuZGlmCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMjgpKQorI2RlZmluZSBfX3VzZXIKKyNkZWZpbmUgX19pb21lbQorI2VuZGlmCisKKyNpZmRlZiBfTElOVVhfUFJPQ19GU19ICisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywyNSkpCisKK2V4dGVybiBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICoKK2NyZWF0ZV9wcm9jX3JlYWRfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9wcm9jX3QgKnJlYWRfcHJvYywgdm9pZCAqZGF0YSkKK3sKKyAgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJlcyA9IGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIG1vZGUsIGJhc2UpOworICAgIGlmIChyZXMpIHsKKyAgICAgICAgcmVzLT5yZWFkX3Byb2MgPSByZWFkX3Byb2M7CisgICAgICAgIHJlcy0+ZGF0YSA9IGRhdGE7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDMsMjkpKQorI2lmbmRlZiBwcm9jX21rZGlyCisjZGVmaW5lIHByb2NfbWtkaXIobmFtZSwgcm9vdCkgY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgU19JRkRJUiwgcm9vdCkKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYgLyogX0xJTlVYX1BST0NfRlNfSCAqLworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKyNpZm5kZWYgSU5JVF9UUVVFVUUKKyNkZWZpbmUgUFJFUEFSRV9UUVVFVUUoX3RxLCBfcm91dGluZSwgX2RhdGEpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChfdHEpLT5yb3V0aW5lID0gX3JvdXRpbmU7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoX3RxKS0+ZGF0YSA9IF9kYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIElOSVRfVFFVRVVFKF90cSwgX3JvdXRpbmUsIF9kYXRhKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBJTklUX0xJU1RfSEVBRCgmKF90cSktPmxpc3QpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKF90cSktPnN5bmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFBSRVBBUkVfVFFVRVVFKChfdHEpLCAoX3JvdXRpbmUpLCAoX2RhdGEpKTsgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIGNvbnRhaW5lcl9vZgorI2RlZmluZSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpICh7CQkJXAorICAgICAgICBjb25zdCB0eXBlb2YoICgodHlwZSAqKTApLT5tZW1iZXIgKSAqX19tcHRyID0gKHB0cik7CVwKKyAgICAgICAgKHR5cGUgKikoIChjaGFyICopX19tcHRyIC0gb2Zmc2V0b2YodHlwZSxtZW1iZXIpICk7fSkKKyNlbmRpZgorCisjaWZuZGVmIElOSVRfV09SSworI2RlZmluZSB3b3JrX3N0cnVjdCB0cV9zdHJ1Y3QKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMCkpCisjZGVmaW5lIHNjaGVkdWxlX3dvcmsoYSkgICBxdWV1ZV90YXNrKGEsICZ0cV9zY2hlZHVsZXIpCisjZWxzZQorI2RlZmluZSBzY2hlZHVsZV93b3JrKGEpICBzY2hlZHVsZV90YXNrKGEpCisjZW5kaWYKKworI2RlZmluZSBmbHVzaF9zY2hlZHVsZWRfd29yayAgZmx1c2hfc2NoZWR1bGVkX3Rhc2tzCisjZGVmaW5lIElOSVRfV09SSzIoX3dxLCBfcm91dGluZSkgIElOSVRfVFFVRVVFKF93cSwgKHZvaWQgKCopKHZvaWQgKikpX3JvdXRpbmUsIF93cSkKKyNlbmRpZgorCisjZWxzZSAvLyA+PSAyLjUga2VybmVsCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCisjZGVmaW5lIElOSVRfV09SSzIoX3dxLCBfcm91dGluZSkJSU5JVF9XT1JLKF93cSwgKHZvaWQgKCopKHZvaWQgKikpX3JvdXRpbmUsIF93cSkKKyNlbHNlCisjZGVmaW5lIElOSVRfV09SSzIoX3dxLCBfcm91dGluZSkJSU5JVF9XT1JLKF93cSwgX3JvdXRpbmUpCisjZW5kaWYKKworI2VuZGlmIC8vID49IDIuNSBrZXJuZWwKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDMsMzgpKQordHlwZWRlZiBzdHJ1Y3QgZGV2aWNlIG5ldGRldmljZV90OworI2VsaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCw0KSkKK3R5cGVkZWYgc3RydWN0IG5ldF9kZXZpY2UgbmV0ZGV2aWNlX3Q7CisjZWxzZQorI3VuZGVmIG5ldGRldmljZV90Cit0eXBlZGVmIHN0cnVjdCBuZXRfZGV2aWNlIG5ldGRldmljZV90OworI2VuZGlmCisKKyNpZmRlZiBXSVJFTEVTU19FWFQKKyNpZiAoV0lSRUxFU1NfRVhUIDwgMTMpCitzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvCit7CisgICAgICAgIF9fdTE2ICAgICAgICAgICBjbWQ7ICAgICAgICAgICAgLyogV2lyZWxlc3MgRXh0ZW5zaW9uIGNvbW1hbmQgKi8KKyAgICAgICAgX191MTYgICAgICAgICAgIGZsYWdzOyAgICAgICAgICAvKiBNb3JlIHRvIGNvbWUgOy0pICovCit9OworI2VuZGlmCisjZW5kaWYKKworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMSwxOCkpCisjZGVmaW5lIE1PRFVMRV9QQVJNKGEsYikgICAgICAgIGV4dGVybiBpbnQgX19ib2d1c19kZWNsCisjZGVmaW5lIE1PRFVMRV9BVVRIT1IoYSkgICAgICAgIGV4dGVybiBpbnQgX19ib2d1c19kZWNsCisjZGVmaW5lIE1PRFVMRV9ERVNDUklQVElPTihhKSAgIGV4dGVybiBpbnQgX19ib2d1c19kZWNsCisjZGVmaW5lIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKGEpIGV4dGVybiBpbnQgX19ib2d1c19kZWNsCisjdW5kZWYgIEdFVF9VU0VfQ09VTlQKKyNkZWZpbmUgR0VUX1VTRV9DT1VOVChtKSAgICAgICAgbW9kX3VzZV9jb3VudF8KKyNlbmRpZgorCisjaWZuZGVmIE1PRFVMRV9PV05FUgorI2RlZmluZSBNT0RVTEVfT1dORVIoYSkgICAgICAgICBleHRlcm4gaW50IF9fYm9ndXNfZGVjbAorI2RlZmluZSBBTkNJRU5UX01PRFVMRV9DT0RFCisjZW5kaWYKKworI2lmbmRlZiBNT0RVTEVfTElDRU5TRQorI2RlZmluZSBNT0RVTEVfTElDRU5TRShtKSAgICAgICBleHRlcm4gaW50IF9fYm9ndXNfZGVjbAorI2VuZGlmCisKKy8qIFRPRE86ICBEbyB3ZSBjYXJlIGFib3V0IHRoaXM/ICovCisjaWZuZGVmIE1PRFVMRV9ERVZJQ0VfVEFCTEUKKyNkZWZpbmUgTU9EVUxFX0RFVklDRV9UQUJMRShmb28sYmFyKQorI2VuZGlmCisKKyNkZWZpbmUgd2xhbl9taW51dGVzMnRpY2tzKGEpICgoYSkqKHdsYW5fdGlja3NfcGVyX3NlYyAqICA2MCkpCisjZGVmaW5lIHdsYW5fc2Vjb25kczJ0aWNrcyhhKSAoKGEpKih3bGFuX3RpY2tzX3Blcl9zZWMpKQorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSw0NykpCisjZGVmaW5lIE5FV19NT0RVTEVfQ09ERQorI2lmZGVmIEFOQ0lFTlRfTU9EVUxFX0NPREUKKyN1bmRlZiBBTkNJRU5UX01PRFVMRV9DT0RFCisjZW5kaWYKKyNlbGlmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMjUpKQorI2RlZmluZSBtb2R1bGVfcGFyYW0obmFtZSwgdHlwZSwgcGVybSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXRpYyBpbmxpbmUgdm9pZCAqX19jaGVja19leGlzdGVuY2VfIyNuYW1lKHZvaWQpIHsgcmV0dXJuICZuYW1lOyB9IFwKKyAgICAgICAgTU9EVUxFX1BBUk0obmFtZSwgX01PRFVMRV9QQVJNX1NUUklOR18gIyMgdHlwZSkKKworI2RlZmluZSBfTU9EVUxFX1BBUk1fU1RSSU5HX2J5dGUgImIiCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfc2hvcnQgImgiCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfdXNob3J0ICJoIgorI2RlZmluZSBfTU9EVUxFX1BBUk1fU1RSSU5HX2ludCAiaSIKKyNkZWZpbmUgX01PRFVMRV9QQVJNX1NUUklOR191aW50ICJpIgorI2RlZmluZSBfTU9EVUxFX1BBUk1fU1RSSU5HX2xvbmcgImwiCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfdWxvbmcgImwiCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfYm9vbCAiaSIKKyNlbmRpZgorCisvKiBsaW51eCA8IDIuNS42OSAqLworI2lmbmRlZiBJUlFfTk9ORQordHlwZWRlZiB2b2lkIGlycXJldHVybl90OworI2RlZmluZSBJUlFfTk9ORQorI2RlZmluZSBJUlFfSEFORExFRAorI2RlZmluZSBJUlFfUkVUVkFMKHgpCisjZW5kaWYKKworI2lmbmRlZiBpbl9hdG9taWMKKyNkZWZpbmUgaW5fYXRvbWljKCkgIDAKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxMykpCisjZGVmaW5lIFVSQl9BU1lOQ19VTkxJTksgMAorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDcpKQorI2RlZmluZSBVUkJfQVNZTkNfVU5MSU5LICBVU0JfQVNZTkNfVU5MSU5LCisjZGVmaW5lIHVzYl9maWxsX2J1bGtfdXJiICBGSUxMX0JVTEtfVVJCCisjZGVmaW5lIHVzYl9raWxsX3VyYiAgdXNiX3VubGlua191cmIKKyNlbHNlCisjZGVmaW5lIFVTQl9RVUVVRV9CVUxLIDAKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxMSkpCit0eXBlZGVmIHUzMiBwbV9tZXNzYWdlX3Q7CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsOSkpCisjZGVmaW5lIGhvdHBsdWdfcGF0aCAgIi9ldGMvaG90cGx1Zy93bGFuLmFnZW50IgorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApKQorI2RlZmluZSBmcmVlX25ldGRldih4KSAgICAgICBrZnJlZSh4KQorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDkpKQorI2RlZmluZSBldGhfaGRyKHgpICAgICAgICAgICAoeCktPm1hYy5ldGhlcm5ldAorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDApKQorI2RlZmluZSBkZWxfdGltZXJfc3luYyhhKSAgICAgICBkZWxfdGltZXIoYSkKKyNlbmRpZgorCisjaWZuZGVmIG1pZ2h0X3NsZWVwCisjZGVmaW5lIG1pZ2h0X3NsZWVwKGEpICAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIEFwcGFyZW50bHkgMi40LjIgZXRodG9vbCBpcyBxdWl0ZSBkaWZmZXJlbnQsIG1heWJlIG5ld2VyIHRvbz8gKi8KKyNpZiAoZGVmaW5lZChTSU9FVEhUT09MKSAmJiAhZGVmaW5lZChFVEhUT09MX0dEUlZJTkZPKSkKKyN1bmRlZiBTSU9FVEhUT09MCisjZW5kaWYKKworLy8gcGNtY2lhLWNzIHN0dWZmCisjaWYgKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsNjgpKSAmJiBcCisgICAgICFkZWZpbmVkKHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcikpCisjZGVmaW5lIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihoYW5kbGUsIHJlZykgXAorICAgICAgICBDYXJkU2VydmljZXMoQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBoYW5kbGUsIHJlZykKKyNkZWZpbmUgcGNtY2lhX3JlZ2lzdGVyX2NsaWVudChoYW5kbGUsIHJlZykgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVnaXN0ZXJDbGllbnQsIGhhbmRsZSwgcmVnKQorI2RlZmluZSBwY21jaWFfZGVyZWdpc3Rlcl9jbGllbnQoaGFuZGxlKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhEZXJlZ2lzdGVyQ2xpZW50LCBoYW5kbGUpCisjZGVmaW5lIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSkgXAorICAgICAgICBDYXJkU2VydmljZXMoR2V0Rmlyc3RUdXBsZSwgaGFuZGxlLCB0dXBsZSkKKyNkZWZpbmUgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKEdldE5leHRUdXBsZSwgaGFuZGxlLCB0dXBsZSkKKyNkZWZpbmUgcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKEdldFR1cGxlRGF0YSwgaGFuZGxlLCB0dXBsZSkKKyNkZWZpbmUgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhQYXJzZVR1cGxlLCBoYW5kbGUsIHR1cGxlLCBwYXJzZSkKKyNkZWZpbmUgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8oaGFuZGxlLCBjb25maWcpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKEdldENvbmZpZ3VyYXRpb25JbmZvLCBoYW5kbGUsIGNvbmZpZykKKyNkZWZpbmUgcGNtY2lhX3JlcXVlc3RfaW8oaGFuZGxlLCByZXEpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlcXVlc3RJTywgaGFuZGxlLCByZXEpCisjZGVmaW5lIHBjbWNpYV9yZXF1ZXN0X2lycShoYW5kbGUsIHJlcSkgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVxdWVzdElSUSwgaGFuZGxlLCByZXEpCisjZGVmaW5lIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24oaGFuZGxlLCByZXEpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlcXVlc3RDb25maWd1cmF0aW9uLCBoYW5kbGUsIHJlcSkKKyNkZWZpbmUgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihoYW5kbGUpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlbGVhc2VDb25maWd1cmF0aW9uLCBoYW5kbGUpCisjZGVmaW5lIHBjbWNpYV9yZWxlYXNlX2lvKGhhbmRsZSwgcmVxKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhSZWxlYXNlSU8sIGhhbmRsZSwgcmVxKQorI2RlZmluZSBwY21jaWFfcmVsZWFzZV9pcnEoaGFuZGxlLCByZXEpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlbGVhc2VJUlEsIGhhbmRsZSwgcmVxKQorI2RlZmluZSBwY21jaWFfcmVsZWFzZV93aW5kb3cod2luKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhSZWxlYXNlV2luZG93LCB3aW4pCisjZGVmaW5lIHBjbWNpYV9nZXRfY2FyZF9zZXJ2aWNlc19pbmZvKGluZm8pIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKEdldENhcmRTZXJ2aWNlc0luZm8sIGluZm8pCisjZGVmaW5lIHBjbWNpYV9yZXBvcnRfZXJyb3IoaGFuZGxlLCBlcnIpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlcG9ydEVycm9yLCBoYW5kbGUsIGVycikKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gSGFyZHdhcmUgUG9ydGFiaWxpdHkgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgaWVlZTJob3N0MTYobikJX19sZTE2X3RvX2NwdShuKQorI2RlZmluZSBpZWVlMmhvc3QzMihuKQlfX2xlMzJfdG9fY3B1KG4pCisjZGVmaW5lIGhvc3QyaWVlZTE2KG4pCV9fY3B1X3RvX2xlMTYobikKKyNkZWZpbmUgaG9zdDJpZWVlMzIobikJX19jcHVfdG9fbGUzMihuKQorCisjaWYgKFdMQU5fQ1BVX0ZBTUlMWSAhPSBXTEFOX01JUFMpCit0eXBlZGVmIFVJTlQzMiBwaHlzX3Q7CisjZW5kaWYKKworI2lmIChXTEFOX0NQVV9GQU1JTFkgPT0gV0xBTl9QUEMpCisgICAgICAgI2RlZmluZSB3bGFuX2ludyhhKSAgICAgICAgICAgICAgICAgICAgIGluX2JlMTYoKHVuc2lnbmVkIHNob3J0ICopKChhKStfSU9fQkFTRSkpCisgICAgICAgI2RlZmluZSB3bGFuX2lud19sZTE2X3RvX2NwdShhKSAgICAgICAgIGludygoYSkpCisgICAgICAgI2RlZmluZSB3bGFuX291dHcodixhKSAgICAgICAgICAgICAgICAgIG91dF9iZTE2KCh1bnNpZ25lZCBzaG9ydCAqKSgoYSkrX0lPX0JBU0UpLCAodikpCisgICAgICAgI2RlZmluZSB3bGFuX291dHdfY3B1X3RvX2xlMTYodixhKSAgICAgIG91dHcoKHYpLChhKSkKKyNlbHNlCisgICAgICAgI2RlZmluZSB3bGFuX2ludyhhKSAgICAgICAgICAgICAgICAgICAgIGludygoYSkpCisgICAgICAgI2RlZmluZSB3bGFuX2lud19sZTE2X3RvX2NwdShhKSAgICAgICAgIF9fY3B1X3RvX2xlMTYoaW53KChhKSkpCisgICAgICAgI2RlZmluZSB3bGFuX291dHcodixhKSAgICAgICAgICAgICAgICAgIG91dHcoKHYpLChhKSkKKyAgICAgICAjZGVmaW5lIHdsYW5fb3V0d19jcHVfdG9fbGUxNih2LGEpICAgICAgb3V0dyhfX2NwdV90b19sZTE2KCh2KSksKGEpKQorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLSBHZW5lcmFsIE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSB3bGFuX21heChhLCBiKSAoKChhKSA+IChiKSkgPyAoYSkgOiAoYikpCisjZGVmaW5lIHdsYW5fbWluKGEsIGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKworI2RlZmluZSB3bGFuX2lzcHJpbnQoYykJKCgoYykgPiAoMHgxOSkpICYmICgoYykgPCAoMHg3ZikpKQorCisjZGVmaW5lIHdsYW5faGV4Y2hhcih4KSAoKCh4KSA8IDB4MGEpID8gKCcwJyArICh4KSkgOiAoJ2EnICsgKCh4KSAtIDB4MGEpKSkKKworLyogQ3JlYXRlIGEgc3RyaW5nIG9mIHByaW50YWJsZSBjaGFycyBmcm9tIHNvbWV0aGluZyB0aGF0IG1pZ2h0IG5vdCBiZSAqLworLyogSXQncyByZWNvbW1lbmRlZCB0aGF0IHRoZSBzdHIgYmUgNCpsZW4gKyAxIGJ5dGVzIGxvbmcgKi8KKyNkZWZpbmUgd2xhbl9ta3ByaW50c3RyKGJ1ZiwgYnVmbGVuLCBzdHIsIHN0cmxlbikgXAoreyBcCisJaW50IGkgPSAwOyBcCisJaW50IGogPSAwOyBcCisJbWVtc2V0KHN0ciwgMCwgKHN0cmxlbikpOyBcCisJZm9yIChpID0gMDsgaSA8IChidWZsZW4pOyBpKyspIHsgXAorCQlpZiAoIHdsYW5faXNwcmludCgoYnVmKVtpXSkgKSB7IFwKKwkJCShzdHIpW2pdID0gKGJ1ZilbaV07IFwKKwkJCWorKzsgXAorCQl9IGVsc2UgeyBcCisJCQkoc3RyKVtqXSA9ICdcXCc7IFwKKwkJCShzdHIpW2orMV0gPSAneCc7IFwKKwkJCShzdHIpW2orMl0gPSB3bGFuX2hleGNoYXIoKChidWYpW2ldICYgMHhmMCkgPj4gNCk7IFwKKwkJCShzdHIpW2orM10gPSB3bGFuX2hleGNoYXIoKChidWYpW2ldICYgMHgwZikpOyBcCisJCQlqICs9IDQ7IFwKKwkJfSBcCisJfSBcCit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLSBWYXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2lmZGVmIFdMQU5fSU5DTFVERV9ERUJVRworZXh0ZXJuIGludCB3bGFuX2RlYnVnOworI2VuZGlmCisKK2V4dGVybiBpbnQgd2xhbl9ldGhjb252OwkJLyogV2hhdCdzIHRoZSBkZWZhdWx0IGV0aGNvbnY/ICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNlbmRpZiAvKiBfV0xBTl9DT01QQVRfSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlbGVwaG9ueS9peGouYyBiL2RyaXZlcnMvdGVsZXBob255L2l4ai5jCmluZGV4IGVjN2FlYjUuLjQxYjY1MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGVsZXBob255L2l4ai5jCisrKyBiL2RyaXZlcnMvdGVsZXBob255L2l4ai5jCkBAIC00Miw4ICs0Miw2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogJExvZzogaXhqLmMsdiAkCi0gKgogICogUmV2aXNpb24gNC44ICAyMDAzLzA3LzA5IDE5OjM5OjAwICBEYW5pZWxlIEJlbGx1Y2NpCiAgKiBBdWRpdCBzb21lIGNvcHlfKl91c2VyIGFuZCBtaW5vciBjbGVhbnVwLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVsZXBob255L2l4al9wY21jaWEuYyBiL2RyaXZlcnMvdGVsZXBob255L2l4al9wY21jaWEuYwppbmRleCBmZjlhMjliLi4zNDdjM2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RlbGVwaG9ueS9peGpfcGNtY2lhLmMKKysrIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqX3BjbWNpYS5jCkBAIC0xMjQsNjUgKzEyNCw1MyBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIGludCBpeGpfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlpZiAoaW8tPm53aW4gPT0gMikgeworCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJfQorCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKK30KKwogc3RhdGljIGludCBpeGpfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluaykKIHsKIAlJWEogKmo7CiAJaXhqX2luZm9fdCAqaW5mbzsKLQl0dXBsZV90IHR1cGxlOwotCXVfc2hvcnQgYnVmWzEyOF07Ci0JY2lzcGFyc2VfdCBwYXJzZTsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmcGFyc2UuY2Z0YWJsZV9lbnRyeTsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPQotCXsKLQkJMAotCX07Ci0JaW50IGxhc3RfcmV0LCBsYXN0X2ZuOworCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OworCiAJaW5mbyA9IGxpbmstPnByaXY7CiAJREVCVUcoMCwgIml4al9jb25maWcoMHglcClcbiIsIGxpbmspOwotCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKikgYnVmOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7Ci0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLQl3aGlsZSAoMSkgewotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAotCQkJCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKLQkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKLQkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwotCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0JCQlpZiAoaW8tPm53aW4gPT0gMikgewotCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKLQkJCX0KLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCi0JCQkJZ290byBuZXh0X2VudHJ5OwotCQkJLyogSWYgd2UndmUgZ290IHRoaXMgZmFyLCB3ZSdyZSBkb25lICovCi0JCQlicmVhazsKLQkJfQotCSAgICAgIG5leHRfZW50cnk6Ci0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKLQkJCWRmbHQgPSAqY2ZnOwotCQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLQl9CiAKLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCWlmIChwY21jaWFfbG9vcF9jb25maWcobGluaywgaXhqX2NvbmZpZ19jaGVjaywgJmRmbHQpKQorCQlnb3RvIGNzX2ZhaWxlZDsKKworCWlmIChwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSkKKwkJZ290byBjc19mYWlsZWQ7CiAKIAkvKgogIAkgKglSZWdpc3RlciB0aGUgY2FyZCB3aXRoIHRoZSBjb3JlLgotIAkgKi8JCi0Jaj1peGpfcGNtY2lhX3Byb2JlKGxpbmstPmlvLkJhc2VQb3J0MSxsaW5rLT5pby5CYXNlUG9ydDEgKyAweDEwKTsKKwkgKi8KKwlqID0gaXhqX3BjbWNpYV9wcm9iZShsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4MTApOwogCiAJaW5mby0+bmRldiA9IDE7CiAJaW5mby0+bm9kZS5tYWpvciA9IFBIT05FX01BSk9SOwogCWxpbmstPmRldl9ub2RlID0gJmluZm8tPm5vZGU7CiAJaXhqX2dldF9zZXJpYWwobGluaywgaik7CiAJcmV0dXJuIDA7CisKICAgICAgIGNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAJaXhqX2NzX3JlbGVhc2UobGluayk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlbGVwaG9ueS9waG9uZWRldi5jIGIvZHJpdmVycy90ZWxlcGhvbnkvcGhvbmVkZXYuYwppbmRleCA0ZDc0YmEzLi4zN2NhZjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RlbGVwaG9ueS9waG9uZWRldi5jCisrKyBiL2RyaXZlcnMvdGVsZXBob255L3Bob25lZGV2LmMKQEAgLTU0LDcgKzU0LDYgQEAKIAlpZiAobWlub3IgPj0gUEhPTkVfTlVNX0RFVklDRVMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbG9ja19rZXJuZWwoKTsKIAltdXRleF9sb2NrKCZwaG9uZV9sb2NrKTsKIAlwID0gcGhvbmVfZGV2aWNlW21pbm9yXTsKIAlpZiAocCkKQEAgLTgxLDcgKzgwLDYgQEAKIAlmb3BzX3B1dChvbGRfZm9wcyk7CiBlbmQ6CiAJbXV0ZXhfdW5sb2NrKCZwaG9uZV9sb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vS2NvbmZpZyBiL2RyaXZlcnMvdWlvL0tjb25maWcKaW5kZXggNDE5MGJlNi4uMDRiOTU0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3Vpby9LY29uZmlnCkBAIC01OCw0ICs1OCwxNyBAQAogCiAJICBJZiB5b3UgY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCB1aW9fc214LgogCitjb25maWcgVUlPX1NFUkNPUzMKKwl0cmlzdGF0ZSAiQXV0b21hdGEgU2VyY29zIElJSSBQQ0kgY2FyZCBkcml2ZXIiCisJZGVmYXVsdCBuCisJaGVscAorCSAgVXNlcnNwYWNlIEkvTyBpbnRlcmZhY2UgZm9yIHRoZSBTZXJjb3MgSUlJIFBDSSBjYXJkIGZyb20KKwkgIEF1dG9tYXRhIEdtYkguIFRoZSB1c2Vyc3BhY2UgcGFydCBvZiB0aGlzIGRyaXZlciB3aWxsIGJlCisJICBhdmFpbGFibGUgZm9yIGRvd25sb2FkIGZyb20gdGhlIEF1dG9tYXRhIEdtYkggd2ViIHNpdGUuCisKKwkgIEF1dG9tYXRhIEdtYkg6ICAgICAgICBodHRwOi8vd3d3LmF1dG9tYXRhd2ViLmNvbQorCSAgU2VyY29zIElJSSBpbnRlcmZhY2U6IGh0dHA6Ly93d3cuc2VyY29zLmNvbQorCisJICBJZiB5b3UgY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCB1aW9fc2VyY29zMy4KKwogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL01ha2VmaWxlIGIvZHJpdmVycy91aW8vTWFrZWZpbGUKaW5kZXggODY2N2JiZC4uZTY5NTU4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy91aW8vTWFrZWZpbGUKQEAgLTMsMyArMyw0IEBACiBvYmotJChDT05GSUdfVUlPX1BEUlYpCSs9IHVpb19wZHJ2Lm8KIG9iai0kKENPTkZJR19VSU9fUERSVl9HRU5JUlEpCSs9IHVpb19wZHJ2X2dlbmlycS5vCiBvYmotJChDT05GSUdfVUlPX1NNWCkJKz0gdWlvX3NteC5vCitvYmotJChDT05GSUdfVUlPX1NFUkNPUzMpCSs9IHVpb19zZXJjb3MzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpby5jIGIvZHJpdmVycy91aW8vdWlvLmMKaW5kZXggM2E2OTM0Yi4uNWRjY2YwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvLmMKKysrIGIvZHJpdmVycy91aW8vdWlvLmMKQEAgLTY3LDYgKzY3LDExIEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglbHhcbiIsIG1lbS0+c2l6ZSk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IG1hcF9vZmZzZXRfc2hvdyhzdHJ1Y3QgdWlvX21lbSAqbWVtLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglbHhcbiIsIG1lbS0+YWRkciAmIH5QQUdFX01BU0spOworfQorCiBzdHJ1Y3QgdWlvX3N5c2ZzX2VudHJ5IHsKIAlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CiAJc3NpemVfdCAoKnNob3cpKHN0cnVjdCB1aW9fbWVtICosIGNoYXIgKik7CkBAIC03NywxMCArODIsMTMgQEAKIAlfX0FUVFIoYWRkciwgU19JUlVHTywgbWFwX2FkZHJfc2hvdywgTlVMTCk7CiBzdGF0aWMgc3RydWN0IHVpb19zeXNmc19lbnRyeSBzaXplX2F0dHJpYnV0ZSA9CiAJX19BVFRSKHNpemUsIFNfSVJVR08sIG1hcF9zaXplX3Nob3csIE5VTEwpOworc3RhdGljIHN0cnVjdCB1aW9fc3lzZnNfZW50cnkgb2Zmc2V0X2F0dHJpYnV0ZSA9CisJX19BVFRSKG9mZnNldCwgU19JUlVHTywgbWFwX29mZnNldF9zaG93LCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHJzW10gPSB7CiAJJmFkZHJfYXR0cmlidXRlLmF0dHIsCiAJJnNpemVfYXR0cmlidXRlLmF0dHIsCisJJm9mZnNldF9hdHRyaWJ1dGUuYXR0ciwKIAlOVUxMLAkvKiBuZWVkIHRvIE5VTEwgdGVybWluYXRlIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgKi8KIH07CiAKQEAgLTQ4MiwxNSArNDkwLDIzIEBACiB7CiAJc3RydWN0IHVpb19kZXZpY2UgKmlkZXYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAogCWludCBtaSA9IHVpb19maW5kX21lbV9pbmRleCh2bWEpOwogCWlmIChtaSA8IDApCiAJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiAKKwkvKgorCSAqIFdlIG5lZWQgdG8gc3VidHJhY3QgbWkgYmVjYXVzZSB1c2Vyc3BhY2UgdXNlcyBvZmZzZXQgPSBOKlBBR0VfU0laRQorCSAqIHRvIHVzZSBtZW1bTl0uCisJICovCisJb2Zmc2V0ID0gKHZtZi0+cGdvZmYgLSBtaSkgPDwgUEFHRV9TSElGVDsKKwogCWlmIChpZGV2LT5pbmZvLT5tZW1bbWldLm1lbXR5cGUgPT0gVUlPX01FTV9MT0dJQ0FMKQotCQlwYWdlID0gdmlydF90b19wYWdlKGlkZXYtPmluZm8tPm1lbVttaV0uYWRkcik7CisJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoaWRldi0+aW5mby0+bWVtW21pXS5hZGRyICsgb2Zmc2V0KTsKIAllbHNlCi0JCXBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQqKWlkZXYtPmluZm8tPm1lbVttaV0uYWRkcik7CisJCXBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilpZGV2LT5pbmZvLT5tZW1bbWldLmFkZHIKKwkJCQkJCQkrIG9mZnNldCk7CiAJZ2V0X3BhZ2UocGFnZSk7CiAJdm1mLT5wYWdlID0gcGFnZTsKIAlyZXR1cm4gMDsKQEAgLTY4Miw5ICs2OTgsOSBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2dldF9taW5vcjsKIAotCWlkZXYtPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh1aW9fY2xhc3MtPmNsYXNzLCBwYXJlbnQsCi0JCQkJCSAgTUtERVYodWlvX21ham9yLCBpZGV2LT5taW5vciksIGlkZXYsCi0JCQkJCSAgInVpbyVkIiwgaWRldi0+bWlub3IpOworCWlkZXYtPmRldiA9IGRldmljZV9jcmVhdGUodWlvX2NsYXNzLT5jbGFzcywgcGFyZW50LAorCQkJCSAgTUtERVYodWlvX21ham9yLCBpZGV2LT5taW5vciksIGlkZXYsCisJCQkJICAidWlvJWQiLCBpZGV2LT5taW5vcik7CiAJaWYgKElTX0VSUihpZGV2LT5kZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVUlPOiBkZXZpY2UgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKIAkJcmV0ID0gUFRSX0VSUihpZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvX3BkcnYuYyBiL2RyaXZlcnMvdWlvL3Vpb19wZHJ2LmMKaW5kZXggMGI0ZWYzOS4uZDQ5NGNlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvX3BkcnYuYworKysgYi9kcml2ZXJzL3Vpby91aW9fcGRydi5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdWlvX2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogCi0jZGVmaW5lIERSSVZFUl9OQU1FICJ1aW8iCisjZGVmaW5lIERSSVZFUl9OQU1FICJ1aW9fcGRydiIKIAogc3RydWN0IHVpb19wbGF0ZGF0YSB7CiAJc3RydWN0IHVpb19pbmZvICp1aW9pbmZvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvX3NlcmNvczMuYyBiL2RyaXZlcnMvdWlvL3Vpb19zZXJjb3MzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZkMWIyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdWlvL3Vpb19zZXJjb3MzLmMKQEAgLTAsMCArMSwyNDMgQEAKKy8qIHNlcmNvczM6IFVJTyBkcml2ZXIgZm9yIHRoZSBBdXRvbWF0YSBTZXJjb3MgSUlJIFBDSSBjYXJkCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBMaW51dHJvbml4IEdtYkgKKyAgICAgQXV0aG9yOiBKb2huIE9nbmVzcyA8am9obi5vZ25lc3NAbGludXRyb25peC5kZT4KKworICAgVGhpcyBpcyBhIHN0cmFpZ2h0LWZvcndhcmQgVUlPIGRyaXZlciwgd2hlcmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQKKyAgIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgcmUtZW5hYmxlZCB2aWEgYSB3cml0ZSB0byB0aGUgVUlPIGRldmljZQorICAgYnkgdGhlIHVzZXJzcGFjZS1wYXJ0LgorCisgICBUaGUgb25seSBwYXJ0IHRoYXQgbWF5IHNlZW0gb2RkIGlzIHRoZSB1c2Ugb2YgYSBsb2dpY2FsIE9SIHdoZW4KKyAgIHN0b3JpbmcgYW5kIHJlc3RvcmluZyBlbmFibGVkIGludGVycnVwdHMuIFRoaXMgaXMgZG9uZSBiZWNhdXNlIHRoZQorICAgdXNlcnNwYWNlLXBhcnQgY291bGQgZGlyZWN0bHkgbW9kaWZ5IHRoZSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgICBhdCBhbnkgdGltZS4gVG8gcmVkdWNlIHBvc3NpYmxlIGNvbmZsaWN0cywgdGhlIGtlcm5lbCBkcml2ZXIgdXNlcworICAgYSBsb2dpY2FsIE9SIHRvIG1ha2UgbW9yZSBjb250cm9sbGVkIGNoYW5nZXMgKHJhdGhlciB0aGFuIGJsaW5kbHkKKyAgIG92ZXJ3cml0aW5nIHByZXZpb3VzIHZhbHVlcykuCisKKyAgIFJhY2UgY29uZGl0aW9ucyBleGlzdCBpZiB0aGUgdXNlcnNwYWNlLXBhcnQgZGlyZWN0bHkgbW9kaWZpZXMgdGhlCisgICBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIHdoaWxlIGluIG9wZXJhdGlvbi4gVGhlIGNvbnNlcXVlbmNlcyBhcmUKKyAgIHRoYXQgY2VydGFpbiBpbnRlcnJ1cHRzIHdvdWxkIGZhaWwgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gRm9yCisgICB0aGlzIHJlYXNvbiwgdGhlIHVzZXJzcGFjZS1wYXJ0IHNob3VsZCBvbmx5IGRpcmVjdGx5IG1vZGlmeSB0aGUKKyAgIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgYXQgdGhlIGJlZ2lubmluZyAodG8gZ2V0IHRoaW5ncyBnb2luZykuCisgICBUaGUgdXNlcnNwYWNlLXBhcnQgY2FuIHNhZmVseSBkaXNhYmxlIGludGVycnVwdHMgYXQgYW55IHRpbWUgdXNpbmcKKyAgIGEgd3JpdGUgdG8gdGhlIFVJTyBkZXZpY2UuCisqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdWlvX2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKy8qIElEJ3MgZm9yIFNFUkNPUyBJSUkgUENJIGNhcmQgKFBMWCA5MDMwKSAqLworI2RlZmluZSBTRVJDT1NfU1VCX1ZFTkRPUl9JRCAgMHgxOTcxCisjZGVmaW5lIFNFUkNPU19TVUJfU1lTSURfMzUzMCAweDM1MzAKKyNkZWZpbmUgU0VSQ09TX1NVQl9TWVNJRF8zNTM1IDB4MzUzNQorI2RlZmluZSBTRVJDT1NfU1VCX1NZU0lEXzM3ODAgMHgzNzgwCisKKy8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUVSMF9PRkZTRVQgMHgwOAorCisvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIElTUjBfT0ZGU0VUIDB4MTgKKworc3RydWN0IHNlcmNvczNfcHJpdiB7CisJdTMyIGllcjBfY2FjaGU7CisJc3BpbmxvY2tfdCBpZXIwX2NhY2hlX2xvY2s7Cit9OworCisvKiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgaWVyMF9jYWNoZV9sb2NrIGlzIGxvY2tlZCEgKi8KK3N0YXRpYyB2b2lkIHNlcmNvczNfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB1aW9faW5mbyAqaW5mbywKKwkJCQkgICAgICAgc3RydWN0IHNlcmNvczNfcHJpdiAqcHJpdikKK3sKKwl2b2lkIF9faW9tZW0gKmllcjAgPSBpbmZvLT5tZW1bM10uaW50ZXJuYWxfYWRkciArIElFUjBfT0ZGU0VUOworCisJLyogYWRkIGVuYWJsZWQgaW50ZXJydXB0cyB0byBjYWNoZSAqLworCXByaXYtPmllcjBfY2FjaGUgfD0gaW9yZWFkMzIoaWVyMCk7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlpb3dyaXRlMzIoMCwgaWVyMCk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyBpZXIwX2NhY2hlX2xvY2sgaXMgbG9ja2VkISAqLworc3RhdGljIHZvaWQgc2VyY29zM19lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgdWlvX2luZm8gKmluZm8sCisJCQkJICAgICAgc3RydWN0IHNlcmNvczNfcHJpdiAqcHJpdikKK3sKKwl2b2lkIF9faW9tZW0gKmllcjAgPSBpbmZvLT5tZW1bM10uaW50ZXJuYWxfYWRkciArIElFUjBfT0ZGU0VUOworCisJLyogcmVzdG9yZSBwcmV2aW91c2x5IGVuYWJsZWQgaW50ZXJydXB0cyAqLworCWlvd3JpdGUzMihpb3JlYWQzMihpZXIwKSB8IHByaXYtPmllcjBfY2FjaGUsIGllcjApOworCXByaXYtPmllcjBfY2FjaGUgPSAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2VyY29zM19oYW5kbGVyKGludCBpcnEsIHN0cnVjdCB1aW9faW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgc2VyY29zM19wcml2ICpwcml2ID0gaW5mby0+cHJpdjsKKwl2b2lkIF9faW9tZW0gKmlzcjAgPSBpbmZvLT5tZW1bM10uaW50ZXJuYWxfYWRkciArIElTUjBfT0ZGU0VUOworCXZvaWQgX19pb21lbSAqaWVyMCA9IGluZm8tPm1lbVszXS5pbnRlcm5hbF9hZGRyICsgSUVSMF9PRkZTRVQ7CisKKwlpZiAoIShpb3JlYWQzMihpc3IwKSAmIGlvcmVhZDMyKGllcjApKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3Bpbl9sb2NrKCZwcml2LT5pZXIwX2NhY2hlX2xvY2spOworCXNlcmNvczNfZGlzYWJsZV9pbnRlcnJ1cHRzKGluZm8sIHByaXYpOworCXNwaW5fdW5sb2NrKCZwcml2LT5pZXIwX2NhY2hlX2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHNlcmNvczNfaXJxY29udHJvbChzdHJ1Y3QgdWlvX2luZm8gKmluZm8sIHMzMiBpcnFfb24pCit7CisJc3RydWN0IHNlcmNvczNfcHJpdiAqcHJpdiA9IGluZm8tPnByaXY7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5pZXIwX2NhY2hlX2xvY2spOworCWlmIChpcnFfb24pCisJCXNlcmNvczNfZW5hYmxlX2ludGVycnVwdHMoaW5mbywgcHJpdik7CisJZWxzZQorCQlzZXJjb3MzX2Rpc2FibGVfaW50ZXJydXB0cyhpbmZvLCBwcml2KTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmllcjBfY2FjaGVfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXJjb3MzX3NldHVwX2lvbWVtKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB1aW9faW5mbyAqaW5mbywKKwkJCSAgICAgICBpbnQgbiwgaW50IHBjaV9iYXIpCit7CisJaW5mby0+bWVtW25dLmFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBwY2lfYmFyKTsKKwlpZiAoIWluZm8tPm1lbVtuXS5hZGRyKQorCQlyZXR1cm4gLTE7CisJaW5mby0+bWVtW25dLmludGVybmFsX2FkZHIgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIHBjaV9iYXIpLAorCQkJCQkgICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBwY2lfYmFyKSk7CisJaWYgKCFpbmZvLT5tZW1bbl0uaW50ZXJuYWxfYWRkcikKKwkJcmV0dXJuIC0xOworCWluZm8tPm1lbVtuXS5zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYsIHBjaV9iYXIpOworCWluZm8tPm1lbVtuXS5tZW10eXBlID0gVUlPX01FTV9QSFlTOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzZXJjb3MzX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVpb19pbmZvICppbmZvOworCXN0cnVjdCBzZXJjb3MzX3ByaXYgKnByaXY7CisJaW50IGk7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVpb19pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyY29zM19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlnb3RvIG91dF9mcmVlOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldikpCisJCWdvdG8gb3V0X2ZyZWVfcHJpdjsKKworCWlmIChwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgInNlcmNvczMiKSkKKwkJZ290byBvdXRfZGlzYWJsZTsKKworCS8qIHdlIG9ubHkgbmVlZCBQQ0kgQkFSJ3MgMCwgMiwgMywgNCwgNSAqLworCWlmIChzZXJjb3MzX3NldHVwX2lvbWVtKGRldiwgaW5mbywgMCwgMCkpCisJCWdvdG8gb3V0X3VubWFwOworCWlmIChzZXJjb3MzX3NldHVwX2lvbWVtKGRldiwgaW5mbywgMSwgMikpCisJCWdvdG8gb3V0X3VubWFwOworCWlmIChzZXJjb3MzX3NldHVwX2lvbWVtKGRldiwgaW5mbywgMiwgMykpCisJCWdvdG8gb3V0X3VubWFwOworCWlmIChzZXJjb3MzX3NldHVwX2lvbWVtKGRldiwgaW5mbywgMywgNCkpCisJCWdvdG8gb3V0X3VubWFwOworCWlmIChzZXJjb3MzX3NldHVwX2lvbWVtKGRldiwgaW5mbywgNCwgNSkpCisJCWdvdG8gb3V0X3VubWFwOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmllcjBfY2FjaGVfbG9jayk7CisJaW5mby0+cHJpdiA9IHByaXY7CisJaW5mby0+bmFtZSA9ICJTZXJjb3NfSUlJX1BDSSI7CisJaW5mby0+dmVyc2lvbiA9ICIwLjAuMSI7CisJaW5mby0+aXJxID0gZGV2LT5pcnE7CisJaW5mby0+aXJxX2ZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEOworCWluZm8tPmhhbmRsZXIgPSBzZXJjb3MzX2hhbmRsZXI7CisJaW5mby0+aXJxY29udHJvbCA9IHNlcmNvczNfaXJxY29udHJvbDsKKworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCisJaWYgKHVpb19yZWdpc3Rlcl9kZXZpY2UoJmRldi0+ZGV2LCBpbmZvKSkKKwkJZ290byBvdXRfdW5tYXA7CisKKwlyZXR1cm4gMDsKKworb3V0X3VubWFwOgorCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJaWYgKGluZm8tPm1lbVtpXS5pbnRlcm5hbF9hZGRyKQorCQkJaW91bm1hcChpbmZvLT5tZW1baV0uaW50ZXJuYWxfYWRkcik7CisJfQorCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKK291dF9kaXNhYmxlOgorCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworb3V0X2ZyZWVfcHJpdjoKKwlrZnJlZShwcml2KTsKK291dF9mcmVlOgorCWtmcmVlKGluZm8pOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBzZXJjb3MzX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdWlvX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgaTsKKworCXVpb191bnJlZ2lzdGVyX2RldmljZShpbmZvKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlpZiAoaW5mby0+bWVtW2ldLmludGVybmFsX2FkZHIpCisJCQlpb3VubWFwKGluZm8tPm1lbVtpXS5pbnRlcm5hbF9hZGRyKTsKKwl9CisJa2ZyZWUoaW5mby0+cHJpdik7CisJa2ZyZWUoaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzZXJjb3MzX3BjaV9pZHNbXSBfX2RldmluaXRkYXRhID0geworCXsKKwkJLnZlbmRvciA9ICAgICAgIFBDSV9WRU5ET1JfSURfUExYLAorCQkuZGV2aWNlID0gICAgICAgUENJX0RFVklDRV9JRF9QTFhfOTAzMCwKKwkJLnN1YnZlbmRvciA9ICAgIFNFUkNPU19TVUJfVkVORE9SX0lELAorCQkuc3ViZGV2aWNlID0gICAgU0VSQ09TX1NVQl9TWVNJRF8zNTMwLAorCX0sCisJeworCQkudmVuZG9yID0gICAgICAgUENJX1ZFTkRPUl9JRF9QTFgsCisJCS5kZXZpY2UgPSAgICAgICBQQ0lfREVWSUNFX0lEX1BMWF85MDMwLAorCQkuc3VidmVuZG9yID0gICAgU0VSQ09TX1NVQl9WRU5ET1JfSUQsCisJCS5zdWJkZXZpY2UgPSAgICBTRVJDT1NfU1VCX1NZU0lEXzM1MzUsCisJfSwKKwl7CisJCS52ZW5kb3IgPSAgICAgICBQQ0lfVkVORE9SX0lEX1BMWCwKKwkJLmRldmljZSA9ICAgICAgIFBDSV9ERVZJQ0VfSURfUExYXzkwMzAsCisJCS5zdWJ2ZW5kb3IgPSAgICBTRVJDT1NfU1VCX1ZFTkRPUl9JRCwKKwkJLnN1YmRldmljZSA9ICAgIFNFUkNPU19TVUJfU1lTSURfMzc4MCwKKwl9LAorCXsgMCwgfQorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNlcmNvczNfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9ICJzZXJjb3MzIiwKKwkuaWRfdGFibGUgPSBzZXJjb3MzX3BjaV9pZHMsCisJLnByb2JlID0gc2VyY29zM19wY2lfcHJvYmUsCisJLnJlbW92ZSA9IHNlcmNvczNfcGNpX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNlcmNvczNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2VyY29zM19wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNlcmNvczNfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNlcmNvczNfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNlcmNvczNfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoc2VyY29zM19leGl0X21vZHVsZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVUlPIGRyaXZlciBmb3IgdGhlIEF1dG9tYXRhIFNlcmNvcyBJSUkgUENJIGNhcmQiKTsKK01PRFVMRV9BVVRIT1IoIkpvaG4gT2duZXNzIDxqb2huLm9nbmVzc0BsaW51dHJvbml4LmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jCmluZGV4IDBkYTJjMjUuLjA2ZGQxMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMKQEAgLTM0NCw3ICszNDQsNyBAQAogCQkJCV9fZnVuY19fLCBzYXJiLT5sZW4sIHZjYyk7CiAJCS8qIGRpc2NhcmQgY2VsbHMgYWxyZWFkeSByZWNlaXZlZCAqLwogCQlza2JfdHJpbShzYXJiLCAwKTsKLQkJVURTTF9BU1NFUlQoc2FyYi0+dGFpbCArIEFUTV9DRUxMX1BBWUxPQUQgPD0gc2FyYi0+ZW5kKTsKKwkJVURTTF9BU1NFUlQoaW5zdGFuY2UsIHNhcmItPnRhaWwgKyBBVE1fQ0VMTF9QQVlMT0FEIDw9IHNhcmItPmVuZCk7CiAJfQogCiAJbWVtY3B5KHNrYl90YWlsX3BvaW50ZXIoc2FyYiksIHNvdXJjZSArIEFUTV9DRUxMX0hFQURFUiwgQVRNX0NFTExfUEFZTE9BRCk7CkBAIC00MzIsNyArNDMyLDcgQEAKIAkJdW5zaWduZWQgY2hhciAqY2VsbF9idWYgPSBpbnN0YW5jZS0+Y2VsbF9idWY7CiAJCXVuc2lnbmVkIGludCBzcGFjZV9sZWZ0ID0gc3RyaWRlIC0gYnVmX3VzYWdlOwogCi0JCVVEU0xfQVNTRVJUKGJ1Zl91c2FnZSA8PSBzdHJpZGUpOworCQlVRFNMX0FTU0VSVChpbnN0YW5jZSwgYnVmX3VzYWdlIDw9IHN0cmlkZSk7CiAKIAkJaWYgKGF2YWlsX2RhdGEgPj0gc3BhY2VfbGVmdCkgewogCQkJLyogYWRkIG5ldyBkYXRhIGFuZCBwcm9jZXNzIGNlbGwgKi8KQEAgLTQ3NSw3ICs0NzUsNyBAQAogCXVuc2lnbmVkIGludCBzdHJpZGUgPSBpbnN0YW5jZS0+dHhfY2hhbm5lbC5zdHJpZGU7CiAKIAl2ZGJnKCIlczogc2tiLT5sZW49JWQsIGF2YWlsX3NwYWNlPSV1IiwgX19mdW5jX18sIHNrYi0+bGVuLCBhdmFpbF9zcGFjZSk7Ci0JVURTTF9BU1NFUlQoIShhdmFpbF9zcGFjZSAlIHN0cmlkZSkpOworCVVEU0xfQVNTRVJUKGluc3RhbmNlLCAhKGF2YWlsX3NwYWNlICUgc3RyaWRlKSk7CiAKIAlmb3IgKGJ5dGVzX3dyaXR0ZW4gPSAwOyBieXRlc193cml0dGVuIDwgYXZhaWxfc3BhY2UgJiYgY3RybC0+bGVuOwogCSAgICAgYnl0ZXNfd3JpdHRlbiArPSBzdHJpZGUsIHRhcmdldCArPSBzdHJpZGUpIHsKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCQkJCWlmICghdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpIHsKIAkJCQkJdW5zaWduZWQgaW50IGFjdHVhbF9sZW5ndGggPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CiAKLQkJCQkJVURTTF9BU1NFUlQoYWN0dWFsX2xlbmd0aCA8PSBwYWNrZXRfc2l6ZSk7CisJCQkJCVVEU0xfQVNTRVJUKGluc3RhbmNlLCBhY3R1YWxfbGVuZ3RoIDw9IHBhY2tldF9zaXplKTsKIAogCQkJCQlpZiAoIW1lcmdlX2xlbmd0aCkKIAkJCQkJCW1lcmdlX3N0YXJ0ID0gKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OwpAQCAtMTE4OCw3ICsxMTg4LDcgQEAKIAkJc3RydWN0IHVyYiAqdXJiOwogCQl1bnNpZ25lZCBpbnQgaXNvX3BhY2tldHMgPSB1c2JfcGlwZWlzb2MoY2hhbm5lbC0+ZW5kcG9pbnQpID8gY2hhbm5lbC0+YnVmX3NpemUgLyBjaGFubmVsLT5wYWNrZXRfc2l6ZSA6IDA7CiAKLQkJVURTTF9BU1NFUlQoIXVzYl9waXBlaXNvYyhjaGFubmVsLT5lbmRwb2ludCkgfHwgdXNiX3BpcGVpbihjaGFubmVsLT5lbmRwb2ludCkpOworCQlVRFNMX0FTU0VSVChpbnN0YW5jZSwgIXVzYl9waXBlaXNvYyhjaGFubmVsLT5lbmRwb2ludCkgfHwgdXNiX3BpcGVpbihjaGFubmVsLT5lbmRwb2ludCkpOwogCiAJCXVyYiA9IHVzYl9hbGxvY191cmIoaXNvX3BhY2tldHMsIEdGUF9LRVJORUwpOwogCQlpZiAoIXVyYikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oCmluZGV4IGU2ODg3YzYuLmY2ZjQ1MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uaAorKysgYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgKQEAgLTQwLDkgKzQwLDE1IEBACiAqLwogCiAjaWZkZWYgREVCVUcKLSNkZWZpbmUgVURTTF9BU1NFUlQoeCkJQlVHX09OKCEoeCkpCisjZGVmaW5lIFVEU0xfQVNTRVJUKGluc3RhbmNlLCB4KQlCVUdfT04oISh4KSkKICNlbHNlCi0jZGVmaW5lIFVEU0xfQVNTRVJUKHgpCWRvIHsgaWYgKCEoeCkpIHdhcm4oImZhaWxlZCBhc3NlcnRpb24gJyVzJyBhdCBsaW5lICVkIiwgX19zdHJpbmdpZnkoeCksIF9fTElORV9fKTsgfSB3aGlsZSgwKQorI2RlZmluZSBVRFNMX0FTU0VSVChpbnN0YW5jZSwgeCkJCQkJCVwKKwlkbyB7CVwKKwkJaWYgKCEoeCkpCQkJCQkJXAorCQkJZGV2X3dhcm4oJihpbnN0YW5jZSktPnVzYl9pbnRmLT5kZXYsCQlcCisJCQkJICJmYWlsZWQgYXNzZXJ0aW9uICclcycgYXQgbGluZSAlZCIsCVwKKwkJCQkgX19zdHJpbmdpZnkoeCksIF9fTElORV9fKTsJCVwKKwl9IHdoaWxlKDApCiAjZW5kaWYKIAogI2RlZmluZSB1c2JfZXJyKGluc3RhbmNlLCBmb3JtYXQsIGFyZy4uLikJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMKaW5kZXggODQ3MjU0My4uMTdkMTY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkgICAgbnVtX3ZlbmRvciAhPSBudW1fcHJvZHVjdCB8fAogCSAgICBudW1fdmVuZG9yICE9IG51bV9yeF9lbmRwb2ludCB8fAogCSAgICBudW1fdmVuZG9yICE9IG51bV90eF9lbmRwb2ludCkgewotCQl3YXJuKCJtYWxmb3JtZWQgbW9kdWxlIHBhcmFtZXRlcnMiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAieHVzYmF0bTogbWFsZm9ybWVkIG1vZHVsZSBwYXJhbWV0ZXJzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnIGIvZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZwppbmRleCA2NmYxN2VkLi4yNTE5ZTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL0tjb25maWcKQEAgLTQwLDMgKzQwLDEzIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjZGMtd2RtLgogCitjb25maWcgVVNCX1RNQworCXRyaXN0YXRlICJVU0IgVGVzdCBhbmQgTWVhc3VyZW1lbnQgQ2xhc3Mgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFVTQiBkZXZpY2UgdGhhdCBmb2xsb3dzCisJICB0aGUgVVNCLm9yZyBzcGVjaWZpY2F0aW9uIGZvciBVU0IgVGVzdCBhbmQgTWVhc3VyZW1lbnQgZGV2aWNlcworCSAgdG8geW91ciBjb21wdXRlcidzIFVTQiBwb3J0LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2J0bWMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2NsYXNzL01ha2VmaWxlCmluZGV4IDUzNWQ1OWEuLjMyZTg1MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL01ha2VmaWxlCkBAIC02LDMgKzYsNCBAQAogb2JqLSQoQ09ORklHX1VTQl9BQ00pCQkrPSBjZGMtYWNtLm8KIG9iai0kKENPTkZJR19VU0JfUFJJTlRFUikJKz0gdXNibHAubwogb2JqLSQoQ09ORklHX1VTQl9XRE0pCQkrPSBjZGMtd2RtLm8KK29iai0kKENPTkZJR19VU0JfVE1DKQkJKz0gdXNidG1jLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCBjMjU3NDUzLi5mYWIyM2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC0zMjYsOCArMzI2LDggQEAKIAl1c2JfbWFya19sYXN0X2J1c3koYWNtLT5kZXYpOwogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKLQkJICAgICBfX2Z1bmNfXywgcmV0dmFsKTsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggIgorCQkJInJlc3VsdCAlZCIsIF9fZnVuY19fLCByZXR2YWwpOwogfQogCiAvKiBkYXRhIGludGVyZmFjZSByZXR1cm5zIGluY29taW5nIGJ5dGVzLCBvciB3ZSBnb3QgdW50aHJvdHRsZWQgKi8KQEAgLTUxNCw3ICs1MTQsNyBAQAogCiAJcnYgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKIAlpZiAocnYgPCAwKSB7Ci0JCWVycigiQXV0b3BtIGZhaWx1cmUgaW4gJXMiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJmFjbS0+ZGV2LT5kZXYsICJBdXRvcG0gZmFpbHVyZSBpbiAlc1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCWlmIChhY20tPmRlbGF5ZWRfd2IpIHsKQEAgLTkyNCw3ICs5MjQsNyBAQAogCQogCS8qIG5vcm1hbCBwcm9iaW5nKi8KIAlpZiAoIWJ1ZmZlcikgewotCQllcnIoIldlaXJkIGRlc2NyaXB0b3IgcmVmZXJlbmNlc1xuIik7CisJCWRldl9lcnIoJmludGYtPmRldiwgIldlaXJkIGRlc2NyaXB0b3IgcmVmZXJlbmNlc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTM0LDIxICs5MzQsMjQgQEAKIAkJCWJ1ZmxlbiA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludC0+ZXh0cmFsZW47CiAJCQlidWZmZXIgPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnQtPmV4dHJhOwogCQl9IGVsc2UgewotCQkJZXJyKCJaZXJvIGxlbmd0aCBkZXNjcmlwdG9yIHJlZmVyZW5jZXNcbiIpOworCQkJZGV2X2VycigmaW50Zi0+ZGV2LAorCQkJCSJaZXJvIGxlbmd0aCBkZXNjcmlwdG9yIHJlZmVyZW5jZXNcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKIAl3aGlsZSAoYnVmbGVuID4gMCkgewogCQlpZiAoYnVmZmVyIFsxXSAhPSBVU0JfRFRfQ1NfSU5URVJGQUNFKSB7Ci0JCQllcnIoInNraXBwaW5nIGdhcmJhZ2VcbiIpOworCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAic2tpcHBpbmcgZ2FyYmFnZVxuIik7CiAJCQlnb3RvIG5leHRfZGVzYzsKIAkJfQogCiAJCXN3aXRjaCAoYnVmZmVyIFsyXSkgewogCQkJY2FzZSBVU0JfQ0RDX1VOSU9OX1RZUEU6IC8qIHdlJ3ZlIGZvdW5kIGl0ICovCiAJCQkJaWYgKHVuaW9uX2hlYWRlcikgewotCQkJCQllcnIoIk1vcmUgdGhhbiBvbmUgdW5pb24gZGVzY3JpcHRvciwgc2tpcHBpbmcgLi4uIik7CisJCQkJCWRldl9lcnIoJmludGYtPmRldiwgIk1vcmUgdGhhbiBvbmUgIgorCQkJCQkJInVuaW9uIGRlc2NyaXB0b3IsICIKKwkJCQkJCSJza2lwcGluZyAuLi5cbiIpOwogCQkJCQlnb3RvIG5leHRfZGVzYzsKIAkJCQl9CiAJCQkJdW5pb25faGVhZGVyID0gKHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgKikKQEAgLTk2Niw3ICs5NjksOSBAQAogCQkJCWNhbGxfbWFuYWdlbWVudF9mdW5jdGlvbiA9IGJ1ZmZlclszXTsKIAkJCQljYWxsX2ludGVyZmFjZV9udW0gPSBidWZmZXJbNF07CiAJCQkJaWYgKChjYWxsX21hbmFnZW1lbnRfZnVuY3Rpb24gJiAzKSAhPSAzKQotCQkJCQllcnIoIlRoaXMgZGV2aWNlIGNhbm5vdCBkbyBjYWxscyBvbiBpdHMgb3duLiBJdCBpcyBubyBtb2RlbS4iKTsKKwkJCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAiVGhpcyBkZXZpY2UgIgorCQkJCQkJImNhbm5vdCBkbyBjYWxscyBvbiBpdHMgb3duLiAiCisJCQkJCQkiSXQgaXMgbm8gbW9kZW0uXG4iKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJLyogdGhlcmUgYXJlIExPVFMgbW9yZSBDREMgZGVzY3JpcHRvcnMgdGhhdApAQCAtMTA1MSw3ICsxMDU2LDcgQEAKIAlmb3IgKG1pbm9yID0gMDsgbWlub3IgPCBBQ01fVFRZX01JTk9SUyAmJiBhY21fdGFibGVbbWlub3JdOyBtaW5vcisrKTsKIAogCWlmIChtaW5vciA9PSBBQ01fVFRZX01JTk9SUykgewotCQllcnIoIm5vIG1vcmUgZnJlZSBhY20gZGV2aWNlcyIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJubyBtb3JlIGZyZWUgYWNtIGRldmljZXNcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTE0NTQsNyArMTQ1OSw4IEBACiAJCXJldHVybiByZXR2YWw7CiAJfQogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYwppbmRleCA3ZThlMTIzLi43NDI5ZjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCkBAIC0xMzIsMTAgKzEzMiwxMiBAQAogCQkJCSJub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6IC1FU0hVVERPV04iKTsKIAkJCWJyZWFrOwogCQljYXNlIC1FUElQRToKLQkJCWVycigibm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAtRVBJUEUiKTsKKwkJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwKKwkJCQkibm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAtRVBJUEVcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllcnIoIlVuZXhwZWN0ZWQgZXJyb3IgJWQiLCBzdGF0dXMpOworCQkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LAorCQkJCSJVbmV4cGVjdGVkIGVycm9yICVkXG4iLCBzdGF0dXMpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xNzAsMTYgKzE3MiwxOCBAQAogCQkJcmV0dXJuOyAvKiB1bnBsdWcgKi8KIAkJY2FzZSAtRVBJUEU6CiAJCQlzZXRfYml0KFdETV9JTlRfU1RBTEwsICZkZXNjLT5mbGFncyk7Ci0JCQllcnIoIlN0YWxsIG9uIGludCBlbmRwb2ludCIpOworCQkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LCAiU3RhbGwgb24gaW50IGVuZHBvaW50XG4iKTsKIAkJCWdvdG8gc3c7IC8qIGhhbHQgaXMgY2xlYXJlZCBpbiB3b3JrICovCiAJCWRlZmF1bHQ6Ci0JCQllcnIoIm5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBzdGF0dXMpOworCQkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LAorCQkJCSJub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLCBzdGF0dXMpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbikpIHsKLQkJZXJyKCJ3ZG1faW50X2NhbGxiYWNrIC0gJWQgYnl0ZXMiLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsICJ3ZG1faW50X2NhbGxiYWNrIC0gJWQgYnl0ZXNcbiIsCisJCQl1cmItPmFjdHVhbF9sZW5ndGgpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC0xOTgsNyArMjAyLDggQEAKIAkJZ290byBleGl0OwogCWRlZmF1bHQ6CiAJCWNsZWFyX2JpdChXRE1fUE9MTF9SVU5OSU5HLCAmZGVzYy0+ZmxhZ3MpOwotCQllcnIoInVua25vd24gbm90aWZpY2F0aW9uICVkIHJlY2VpdmVkOiBpbmRleCAlZCBsZW4gJWQiLAorCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsCisJCQkidW5rbm93biBub3RpZmljYXRpb24gJWQgcmVjZWl2ZWQ6IGluZGV4ICVkIGxlbiAlZFxuIiwKIAkJCWRyLT5iTm90aWZpY2F0aW9uVHlwZSwgZHItPndJbmRleCwgZHItPndMZW5ndGgpOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMjM2LDE0ICsyNDEsMTYgQEAKIHN3OgogCQkJcnYgPSBzY2hlZHVsZV93b3JrKCZkZXNjLT5yeHdvcmspOwogCQkJaWYgKHJ2KQotCQkJCWVycigiQ2Fubm90IHNjaGVkdWxlIHdvcmsiKTsKKwkJCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsCisJCQkJCSJDYW5ub3Qgc2NoZWR1bGUgd29ya1xuIik7CiAJCX0KIAl9CiBleGl0OgogCXJ2ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocnYpCi0JCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fZnVuY19fLCBydik7CisJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwKKwkJCSIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZFxuIiwKKwkJCV9fZnVuY19fLCBydik7CiAKIH0KIApAQCAtMzUzLDcgKzM2MCw3IEBACiAJaWYgKHJ2IDwgMCkgewogCQlrZnJlZShidWYpOwogCQljbGVhcl9iaXQoV0RNX0lOX1VTRSwgJmRlc2MtPmZsYWdzKTsKLQkJZXJyKCJUeCBVUkIgZXJyb3I6ICVkIiwgcnYpOworCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsICJUeCBVUkIgZXJyb3I6ICVkXG4iLCBydik7CiAJfSBlbHNlIHsKIAkJZGV2X2RiZygmZGVzYy0+aW50Zi0+ZGV2LCAiVHggVVJCIGhhcyBiZWVuIHN1Ym1pdHRlZCBpbmRleD0lZCIsCiAJCQlyZXEtPndJbmRleCk7CkBAIC00MDEsNyArNDA4LDggQEAKIAkJCWludCB0ID0gZGVzYy0+cmVycjsKIAkJCWRlc2MtPnJlcnIgPSAwOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5pdXNwaW4pOwotCQkJZXJyKCJyZWFkaW5nIGhhZCByZXN1bHRlZCBpbiAlZCIsIHQpOworCQkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LAorCQkJCSJyZWFkaW5nIGhhZCByZXN1bHRlZCBpbiAlZFxuIiwgdCk7CiAJCQlydiA9IC1FSU87CiAJCQlnb3RvIGVycjsKIAkJfQpAQCAtNDQwLDcgKzQ0OCw3IEBACiBlcnI6CiAJbXV0ZXhfdW5sb2NrKCZkZXNjLT5ybG9jayk7CiAJaWYgKHJ2IDwgMCkKLQkJZXJyKCJ3ZG1fcmVhZDogZXhpdCBlcnJvciIpOworCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsICJ3ZG1fcmVhZDogZXhpdCBlcnJvclxuIik7CiAJcmV0dXJuIHJ2OwogfQogCkBAIC00NTAsNyArNDU4LDggQEAKIAogCXdhaXRfZXZlbnQoZGVzYy0+d2FpdCwgIXRlc3RfYml0KFdETV9JTl9VU0UsICZkZXNjLT5mbGFncykpOwogCWlmIChkZXNjLT53ZXJyIDwgMCkKLQkJZXJyKCJFcnJvciBpbiBmbHVzaCBwYXRoOiAlZCIsIGRlc2MtPndlcnIpOworCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsICJFcnJvciBpbiBmbHVzaCBwYXRoOiAlZFxuIiwKKwkJCWRlc2MtPndlcnIpOwogCiAJcmV0dXJuIGRlc2MtPndlcnI7CiB9CkBAIC01MDIsNyArNTExLDcgQEAKIAogCXJ2ID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRlc2MtPmludGYpOwogCWlmIChydiA8IDApIHsKLQkJZXJyKCJFcnJvciBhdXRvcG0gLSAlZCIsIHJ2KTsKKwkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LCAiRXJyb3IgYXV0b3BtIC0gJWRcbiIsIHJ2KTsKIAkJZ290byBvdXQ7CiAJfQogCWludGYtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAxOwpAQCAtNTEyLDcgKzUyMSw4IEBACiAJCXJ2ID0gdXNiX3N1Ym1pdF91cmIoZGVzYy0+dmFsaWRpdHksIEdGUF9LRVJORUwpOwogCQlpZiAocnYgPCAwKSB7CiAJCQlkZXNjLT5jb3VudC0tOwotCQkJZXJyKCJFcnJvciBzdWJtaXR0aW5nIGludCB1cmIgLSAlZCIsIHJ2KTsKKwkJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwKKwkJCQkiRXJyb3Igc3VibWl0dGluZyBpbnQgdXJiIC0gJWRcbiIsIHJ2KTsKIAkJfQogCX0gZWxzZSB7CiAJCXJ2ID0gMDsKQEAgLTYwMCw3ICs2MTAsNyBAQAogCiAJd2hpbGUgKGJ1ZmxlbiA+IDApIHsKIAkJaWYgKGJ1ZmZlciBbMV0gIT0gVVNCX0RUX0NTX0lOVEVSRkFDRSkgewotCQkJZXJyKCJza2lwcGluZyBnYXJiYWdlIik7CisJCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJza2lwcGluZyBnYXJiYWdlXG4iKTsKIAkJCWdvdG8gbmV4dF9kZXNjOwogCQl9CiAKQEAgLTYxNCw3ICs2MjQsOCBAQAogCQkJCSJGaW5kaW5nIG1heGltdW0gYnVmZmVyIGxlbmd0aDogJWQiLCBtYXhjb20pOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllcnIoIklnbm9yaW5nIGV4dHJhIGhlYWRlciwgdHlwZSAlZCwgbGVuZ3RoICVkIiwKKwkJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCQkiSWdub3JpbmcgZXh0cmEgaGVhZGVyLCB0eXBlICVkLCBsZW5ndGggJWRcbiIsCiAJCQkJYnVmZmVyWzJdLCBidWZmZXJbMF0pOwogCQkJYnJlYWs7CiAJCX0KQEAgLTc3Miw3ICs3ODMsOCBAQAogCWlmIChkZXNjLT5jb3VudCkgewogCQlydiA9IHVzYl9zdWJtaXRfdXJiKGRlc2MtPnZhbGlkaXR5LCBHRlBfTk9JTyk7CiAJCWlmIChydiA8IDApCi0JCQllcnIoIkVycm9yIHJlc3VtZSBzdWJtaXR0aW5nIGludCB1cmIgLSAlZCIsIHJ2KTsKKwkJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwKKwkJCQkiRXJyb3IgcmVzdW1lIHN1Ym1pdHRpbmcgaW50IHVyYiAtICVkXG4iLCBydik7CiAJfQogCXJldHVybiBydjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCmluZGV4IDA2NDcxNjQuLmI1Nzc1YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwpAQCAtNTkzLDggKzU5Myw5IEBACiAJCQkJZXJyID0gdXNibHBfaHBfY2hhbm5lbF9jaGFuZ2VfcmVxdWVzdCh1c2JscCwKIAkJCQkJYXJnLCAmbmV3Q2hhbm5lbCk7CiAJCQkJaWYgKGVyciA8IDApIHsKLQkJCQkJZXJyKCJ1c2JscCVkOiBlcnJvciA9ICVkIHNldHRpbmcgIgotCQkJCQkJIkhQIGNoYW5uZWwiLAorCQkJCQlkZXZfZXJyKCZ1c2JscC0+ZGV2LT5kZXYsCisJCQkJCQkidXNibHAlZDogZXJyb3IgPSAlZCBzZXR0aW5nICIKKwkJCQkJCSJIUCBjaGFubmVsXG4iLAogCQkJCQkJdXNibHAtPm1pbm9yLCBlcnIpOwogCQkJCQlyZXR2YWwgPSAtRUlPOwogCQkJCQlnb3RvIGRvbmU7CkBAIC0xMDc2LDE1ICsxMDc3LDE2IEBACiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOwotCXN0cnVjdCB1c2JscCAqdXNibHAgPSBOVUxMOworCXN0cnVjdCB1c2JscCAqdXNibHA7CiAJaW50IHByb3RvY29sOwogCWludCByZXR2YWw7CiAKIAkvKiBNYWxsb2MgYW5kIHN0YXJ0IGluaXRpYWxpemluZyB1c2JscCBzdHJ1Y3R1cmUgc28gd2UgY2FuIHVzZSBpdAogCSAqIGRpcmVjdGx5LiAqLwotCWlmICghKHVzYmxwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYmxwKSwgR0ZQX0tFUk5FTCkpKSB7CisJdXNibHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNibHApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVzYmxwKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gYWJvcnQ7CisJCWdvdG8gYWJvcnRfcmV0OwogCX0KIAl1c2JscC0+ZGV2ID0gZGV2OwogCW11dGV4X2luaXQoJnVzYmxwLT53bXV0KTsKQEAgLTExNzksMTIgKzExODEsMTEgQEAKIAl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2llZWUxMjg0X2lkKTsKIGFib3J0OgotCWlmICh1c2JscCkgewotCQlrZnJlZSh1c2JscC0+cmVhZGJ1Zik7Ci0JCWtmcmVlKHVzYmxwLT5zdGF0dXNidWYpOwotCQlrZnJlZSh1c2JscC0+ZGV2aWNlX2lkX3N0cmluZyk7Ci0JCWtmcmVlKHVzYmxwKTsKLQl9CisJa2ZyZWUodXNibHAtPnJlYWRidWYpOworCWtmcmVlKHVzYmxwLT5zdGF0dXNidWYpOworCWtmcmVlKHVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nKTsKKwlrZnJlZSh1c2JscCk7CithYm9ydF9yZXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTM0NSw3ICsxMzQ2LDcgQEAKIAl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYmxwX2NsYXNzKTsKIAogCWlmICghdXNibHAgfHwgIXVzYmxwLT5kZXYpIHsKLQkJZXJyKCJib2d1cyBkaXNjb25uZWN0Iik7CisJCWRldl9lcnIoJmludGYtPmRldiwgImJvZ3VzIGRpc2Nvbm5lY3RcbiIpOwogCQlCVUcgKCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MzgxMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwpAQCAtMCwwICsxLDEwODcgQEAKKy8qKgorICogZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgLSBVU0IgVGVzdCAmIE1lYXN1cm1lbnQgY2xhc3MgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFN0ZWZhbiBLb3BwLCBHZWNoaW5nZW4sIEdlcm1hbnkKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb3ZlbGwsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdG1jLmg+CisKKworI2RlZmluZSBVU0JUTUNfTUlOT1JfQkFTRQkxNzYKKworLyoKKyAqIFNpemUgb2YgZHJpdmVyIGludGVybmFsIElPIGJ1ZmZlci4gTXVzdCBiZSBtdWx0aXBsZSBvZiA0IGFuZCBhdCBsZWFzdCBhcworICogbGFyZ2UgYXMgd01heFBhY2tldFNpemUgKHdoaWNoIGlzIHVzdWFsbHkgNTEyIGJ5dGVzKS4KKyAqLworI2RlZmluZSBVU0JUTUNfU0laRV9JT0JVRkZFUgkyMDQ4CisKKy8qIERlZmF1bHQgVVNCIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgKi8KKyNkZWZpbmUgVVNCVE1DX1RJTUVPVVQJCTEwCisKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiByZWFkIGN5Y2xlcyB0byBlbXB0eSBidWxrIGluIGVuZHBvaW50IGR1cmluZyBDTEVBUiBhbmQKKyAqIEFCT1JUX0JVTEtfSU4gcmVxdWVzdHMuIEVuZHMgdGhlIGxvb3AgaWYgKGZvciB3aGF0ZXZlciByZWFzb24pIGEgc2hvcnQKKyAqIHBhY2tldCBpcyBuZXZlciByZWFkLgorICovCisjZGVmaW5lIFVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTgkxMDAKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYnRtY19kZXZpY2VzW10gPSB7CisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX0FQUF9TUEVDLCAzLCAwKSwgfSwKKwl7IDAsIH0gLyogdGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB0aGUgY2FwYWJpbGl0aWVzIGZvciB0aGUgZGV2aWNlCisgKiBTZWUgc2VjdGlvbiA0LjIuMS44IG9mIHRoZSBVU0JUTUMgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy4KKyAqLworc3RydWN0IHVzYnRtY19kZXZfY2FwYWJpbGl0aWVzIHsKKwlfX3U4IGludGVyZmFjZV9jYXBhYmlsaXRpZXM7CisJX191OCBkZXZpY2VfY2FwYWJpbGl0aWVzOworCV9fdTggdXNiNDg4X2ludGVyZmFjZV9jYXBhYmlsaXRpZXM7CisJX191OCB1c2I0ODhfZGV2aWNlX2NhcGFiaWxpdGllczsKK307CisKKy8qIFRoaXMgc3RydWN0dXJlIGhvbGRzIHByaXZhdGUgZGF0YSBmb3IgZWFjaCBVU0JUTUMgZGV2aWNlLiBPbmUgY29weSBpcworICogYWxsb2NhdGVkIGZvciBlYWNoIFVTQlRNQyBkZXZpY2UgaW4gdGhlIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uLgorICovCitzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhIHsKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisKKwl1bnNpZ25lZCBpbnQgYnVsa19pbjsKKwl1bnNpZ25lZCBpbnQgYnVsa19vdXQ7CisKKwl1OCBiVGFnOworCXU4IGJUYWdfbGFzdF93cml0ZTsJLyogbmVlZGVkIGZvciBhYm9ydCAqLworCXU4IGJUYWdfbGFzdF9yZWFkOwkvKiBuZWVkZWQgZm9yIGFib3J0ICovCisKKwkvKiBhdHRyaWJ1dGVzIGZyb20gdGhlIFVTQiBUTUMgc3BlYyBmb3IgdGhpcyBkZXZpY2UgKi8KKwl1OCBUZXJtQ2hhcjsKKwlib29sIFRlcm1DaGFyRW5hYmxlZDsKKwlib29sIGF1dG9fYWJvcnQ7CisKKwlzdHJ1Y3QgdXNidG1jX2Rldl9jYXBhYmlsaXRpZXMJY2FwYWJpbGl0aWVzOworCXN0cnVjdCBrcmVmIGtyZWY7CisJc3RydWN0IG11dGV4IGlvX211dGV4OwkvKiBvbmx5IG9uZSBpL28gZnVuY3Rpb24gcnVubmluZyBhdCBhIHRpbWUgKi8KK307CisjZGVmaW5lIHRvX3VzYnRtY19kYXRhKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhLCBrcmVmKQorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYnRtY19kcml2ZXI7CisKK3N0YXRpYyB2b2lkIHVzYnRtY19kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSA9IHRvX3VzYnRtY19kYXRhKGtyZWYpOworCisJdXNiX3B1dF9kZXYoZGF0YS0+dXNiX2Rldik7CisJa2ZyZWUoZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgdXNidG1jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YTsKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKworCWludGYgPSB1c2JfZmluZF9pbnRlcmZhY2UoJnVzYnRtY19kcml2ZXIsIGltaW5vcihpbm9kZSkpOworCWlmICghaW50ZikgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6IGNhbiBub3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkIiwgaW1pbm9yKGlub2RlKSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlrcmVmX2dldCgmZGF0YS0+a3JlZik7CisKKwkvKiBTdG9yZSBwb2ludGVyIGluIGZpbGUgc3RydWN0dXJlJ3MgcHJpdmF0ZSBkYXRhIGZpZWxkICovCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gZGF0YTsKKworZXhpdDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHVzYnRtY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlrcmVmX3B1dCgmZGF0YS0+a3JlZiwgdXNidG1jX2RlbGV0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNidG1jX2lvY3RsX2Fib3J0X2J1bGtfaW4oc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSkKK3sKKwljaGFyICpidWZmZXI7CisJc3RydWN0IGRldmljZSAqZGV2OworCWludCBydjsKKwlpbnQgbjsKKwlpbnQgYWN0dWFsOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmN1cnJlbnRfc2V0dGluZzsKKwlpbnQgbWF4X3NpemU7CisKKwlkZXYgPSAmZGF0YS0+aW50Zi0+ZGV2OworCWJ1ZmZlciA9IGttYWxsb2MoVVNCVE1DX1NJWkVfSU9CVUZGRVIsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCVE1DX1JFUVVFU1RfSU5JVElBVEVfQUJPUlRfQlVMS19JTiwKKwkJCSAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0VORFBPSU5ULAorCQkJICAgICBkYXRhLT5iVGFnX2xhc3RfcmVhZCwgZGF0YS0+YnVsa19pbiwKKwkJCSAgICAgYnVmZmVyLCAyLCBVU0JUTUNfVElNRU9VVCk7CisKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXZfZGJnKGRldiwgIklOSVRJQVRFX0FCT1JUX0JVTEtfSU4gcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisKKwlpZiAoYnVmZmVyWzBdID09IFVTQlRNQ19TVEFUVVNfRkFJTEVEKSB7CisJCXJ2ID0gMDsKKwkJZ290byBleGl0OworCX0KKworCWlmIChidWZmZXJbMF0gIT0gVVNCVE1DX1NUQVRVU19TVUNDRVNTKSB7CisJCWRldl9lcnIoZGV2LCAiSU5JVElBVEVfQUJPUlRfQlVMS19JTiByZXR1cm5lZCAleFxuIiwKKwkJCWJ1ZmZlclswXSk7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWF4X3NpemUgPSAwOworCWN1cnJlbnRfc2V0dGluZyA9IGRhdGEtPmludGYtPmN1cl9hbHRzZXR0aW5nOworCWZvciAobiA9IDA7IG4gPCBjdXJyZW50X3NldHRpbmctPmRlc2MuYk51bUVuZHBvaW50czsgbisrKQorCQlpZiAoY3VycmVudF9zZXR0aW5nLT5lbmRwb2ludFtuXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgPT0KKwkJCWRhdGEtPmJ1bGtfaW4pCisJCQltYXhfc2l6ZSA9IGxlMTZfdG9fY3B1KGN1cnJlbnRfc2V0dGluZy0+ZW5kcG9pbnRbbl0uCisJCQkJCQlkZXNjLndNYXhQYWNrZXRTaXplKTsKKworCWlmIChtYXhfc2l6ZSA9PSAwKSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgZ2V0IHdNYXhQYWNrZXRTaXplXG4iKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXZfZGJnKCZkYXRhLT5pbnRmLT5kZXYsICJ3TWF4UGFja2V0U2l6ZSBpcyAlZFxuIiwgbWF4X3NpemUpOworCisJbiA9IDA7CisKKwlkbyB7CisJCWRldl9kYmcoZGV2LCAiUmVhZGluZyBmcm9tIGJ1bGsgaW4gRVBcbiIpOworCisJCXJ2ID0gdXNiX2J1bGtfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUoZGF0YS0+dXNiX2RldiwKKwkJCQkJCSAgZGF0YS0+YnVsa19pbiksCisJCQkJICBidWZmZXIsIFVTQlRNQ19TSVpFX0lPQlVGRkVSLAorCQkJCSAgJmFjdHVhbCwgVVNCVE1DX1RJTUVPVVQpOworCisJCW4rKzsKKworCQlpZiAocnYgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgInVzYl9idWxrX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQkJZ290byBleGl0OworCQl9CisJfSB3aGlsZSAoKGFjdHVhbCA9PSBtYXhfc2l6ZSkgJiYKKwkJIChuIDwgVVNCVE1DX01BWF9SRUFEU19UT19DTEVBUl9CVUxLX0lOKSk7CisKKwlpZiAoYWN0dWFsID09IG1heF9zaXplKSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgY2xlYXIgZGV2aWNlIGJ1ZmZlciB3aXRoaW4gJWQgY3ljbGVzXG4iLAorCQkJVVNCVE1DX01BWF9SRUFEU19UT19DTEVBUl9CVUxLX0lOKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisKKwluID0gMDsKKwordXNidG1jX2Fib3J0X2J1bGtfaW5fc3RhdHVzOgorCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCVE1DX1JFUVVFU1RfQ0hFQ0tfQUJPUlRfQlVMS19JTl9TVEFUVVMsCisJCQkgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCSAgICAgMCwgZGF0YS0+YnVsa19pbiwgYnVmZmVyLCAweDA4LAorCQkJICAgICBVU0JUTUNfVElNRU9VVCk7CisKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXZfZGJnKGRldiwgIklOSVRJQVRFX0FCT1JUX0JVTEtfSU4gcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisKKwlpZiAoYnVmZmVyWzBdID09IFVTQlRNQ19TVEFUVVNfU1VDQ0VTUykgeworCQlydiA9IDA7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoYnVmZmVyWzBdICE9IFVTQlRNQ19TVEFUVVNfUEVORElORykgeworCQlkZXZfZXJyKGRldiwgIklOSVRJQVRFX0FCT1JUX0JVTEtfSU4gcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGJ1ZmZlclsxXSA9PSAxKQorCQlkbyB7CisJCQlkZXZfZGJnKGRldiwgIlJlYWRpbmcgZnJvbSBidWxrIGluIEVQXG4iKTsKKworCQkJcnYgPSB1c2JfYnVsa19tc2coZGF0YS0+dXNiX2RldiwKKwkJCQkJICB1c2JfcmN2YnVsa3BpcGUoZGF0YS0+dXNiX2RldiwKKwkJCQkJCQkgIGRhdGEtPmJ1bGtfaW4pLAorCQkJCQkgIGJ1ZmZlciwgVVNCVE1DX1NJWkVfSU9CVUZGRVIsCisJCQkJCSAgJmFjdHVhbCwgVVNCVE1DX1RJTUVPVVQpOworCisJCQluKys7CisKKwkJCWlmIChydiA8IDApIHsKKwkJCQlkZXZfZXJyKGRldiwgInVzYl9idWxrX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfSB3aGlsZSAoKGFjdHVhbCA9IG1heF9zaXplKSAmJgorCQkJIChuIDwgVVNCVE1DX01BWF9SRUFEU19UT19DTEVBUl9CVUxLX0lOKSk7CisKKwlpZiAoYWN0dWFsID09IG1heF9zaXplKSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgY2xlYXIgZGV2aWNlIGJ1ZmZlciB3aXRoaW4gJWQgY3ljbGVzXG4iLAorCQkJVVNCVE1DX01BWF9SRUFEU19UT19DTEVBUl9CVUxLX0lOKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlnb3RvIHVzYnRtY19hYm9ydF9idWxrX2luX3N0YXR1czsKKworZXhpdDoKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBydjsKKworfQorCitzdGF0aWMgaW50IHVzYnRtY19pb2N0bF9hYm9ydF9idWxrX291dChzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl1OCAqYnVmZmVyOworCWludCBydjsKKwlpbnQgbjsKKworCWRldiA9ICZkYXRhLT5pbnRmLT5kZXY7CisKKwlidWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCVE1DX1JFUVVFU1RfSU5JVElBVEVfQUJPUlRfQlVMS19PVVQsCisJCQkgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCSAgICAgZGF0YS0+YlRhZ19sYXN0X3dyaXRlLCBkYXRhLT5idWxrX291dCwKKwkJCSAgICAgYnVmZmVyLCAyLCBVU0JUTUNfVElNRU9VVCk7CisKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXZfZGJnKGRldiwgIklOSVRJQVRFX0FCT1JUX0JVTEtfT1VUIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCisJaWYgKGJ1ZmZlclswXSAhPSBVU0JUTUNfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZGV2X2VycihkZXYsICJJTklUSUFURV9BQk9SVF9CVUxLX09VVCByZXR1cm5lZCAleFxuIiwKKwkJCWJ1ZmZlclswXSk7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJbiA9IDA7CisKK3VzYnRtY19hYm9ydF9idWxrX291dF9jaGVja19zdGF0dXM6CisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JUTUNfUkVRVUVTVF9DSEVDS19BQk9SVF9CVUxLX09VVF9TVEFUVVMsCisJCQkgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCSAgICAgMCwgZGF0YS0+YnVsa19vdXQsIGJ1ZmZlciwgMHgwOCwKKwkJCSAgICAgVVNCVE1DX1RJTUVPVVQpOworCW4rKzsKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXZfZGJnKGRldiwgIkNIRUNLX0FCT1JUX0JVTEtfT1VUIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCisJaWYgKGJ1ZmZlclswXSA9PSBVU0JUTUNfU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gdXNidG1jX2Fib3J0X2J1bGtfb3V0X2NsZWFyX2hhbHQ7CisKKwlpZiAoKGJ1ZmZlclswXSA9PSBVU0JUTUNfU1RBVFVTX1BFTkRJTkcpICYmCisJICAgIChuIDwgVVNCVE1DX01BWF9SRUFEU19UT19DTEVBUl9CVUxLX0lOKSkKKwkJZ290byB1c2J0bWNfYWJvcnRfYnVsa19vdXRfY2hlY2tfc3RhdHVzOworCisJcnYgPSAtRVBFUk07CisJZ290byBleGl0OworCit1c2J0bWNfYWJvcnRfYnVsa19vdXRfY2xlYXJfaGFsdDoKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwKKwkJCSAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkgICAgIFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCSAgICAgVVNCX0VORFBPSU5UX0hBTFQsIGRhdGEtPmJ1bGtfb3V0LCBidWZmZXIsCisJCQkgICAgIDAsIFVTQlRNQ19USU1FT1VUKTsKKworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJZ290byBleGl0OworCX0KKwlydiA9IDA7CisKK2V4aXQ6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHVzYnRtY19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKQoreworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGE7CisJc3RydWN0IGRldmljZSAqZGV2OworCXVuc2lnbmVkIGxvbmcgaW50IG5fY2hhcmFjdGVyczsKKwl1OCAqYnVmZmVyOworCWludCBhY3R1YWw7CisJaW50IGRvbmU7CisJaW50IHJlbWFpbmluZzsKKwlpbnQgcmV0dmFsOworCWludCB0aGlzX3BhcnQ7CisKKwkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCisJZGF0YSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlkZXYgPSAmZGF0YS0+aW50Zi0+ZGV2OworCisJYnVmZmVyID0ga21hbGxvYyhVU0JUTUNfU0laRV9JT0JVRkZFUiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfbG9jaygmZGF0YS0+aW9fbXV0ZXgpOworCisJcmVtYWluaW5nID0gY291bnQ7CisJZG9uZSA9IDA7CisKKwl3aGlsZSAocmVtYWluaW5nID4gMCkgeworCQlpZiAocmVtYWluaW5nID4gVVNCVE1DX1NJWkVfSU9CVUZGRVIgLSAxMiAtIDMpCisJCQl0aGlzX3BhcnQgPSBVU0JUTUNfU0laRV9JT0JVRkZFUiAtIDEyIC0gMzsKKwkJZWxzZQorCQkJdGhpc19wYXJ0ID0gcmVtYWluaW5nOworCisJCS8qIFNldHVwIElPIGJ1ZmZlciBmb3IgREVWX0RFUF9NU0dfSU4gbWVzc2FnZQorCQkgKiBSZWZlciB0byBjbGFzcyBzcGVjcyBmb3IgZGV0YWlscworCQkgKi8KKwkJYnVmZmVyWzBdID0gMjsKKwkJYnVmZmVyWzFdID0gZGF0YS0+YlRhZzsKKwkJYnVmZmVyWzJdID0gfihkYXRhLT5iVGFnKTsKKwkJYnVmZmVyWzNdID0gMDsgLyogUmVzZXJ2ZWQgKi8KKwkJYnVmZmVyWzRdID0gKHRoaXNfcGFydCAtIDEyIC0gMykgJiAyNTU7CisJCWJ1ZmZlcls1XSA9ICgodGhpc19wYXJ0IC0gMTIgLSAzKSA+PiA4KSAmIDI1NTsKKwkJYnVmZmVyWzZdID0gKCh0aGlzX3BhcnQgLSAxMiAtIDMpID4+IDE2KSAmIDI1NTsKKwkJYnVmZmVyWzddID0gKCh0aGlzX3BhcnQgLSAxMiAtIDMpID4+IDI0KSAmIDI1NTsKKwkJYnVmZmVyWzhdID0gZGF0YS0+VGVybUNoYXJFbmFibGVkICogMjsKKwkJLyogVXNlIHRlcm0gY2hhcmFjdGVyPyAqLworCQlidWZmZXJbOV0gPSBkYXRhLT5UZXJtQ2hhcjsKKwkJYnVmZmVyWzEwXSA9IDA7IC8qIFJlc2VydmVkICovCisJCWJ1ZmZlclsxMV0gPSAwOyAvKiBSZXNlcnZlZCAqLworCisJCS8qIFNlbmQgYnVsayBVUkIgKi8KKwkJcmV0dmFsID0gdXNiX2J1bGtfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKGRhdGEtPnVzYl9kZXYsCisJCQkJCQkgICAgICBkYXRhLT5idWxrX291dCksCisJCQkJICAgICAgYnVmZmVyLCAxMiwgJmFjdHVhbCwgVVNCVE1DX1RJTUVPVVQpOworCisJCS8qIFN0b3JlIGJUYWcgKGluIGNhc2Ugd2UgbmVlZCB0byBhYm9ydCkgKi8KKwkJZGF0YS0+YlRhZ19sYXN0X3dyaXRlID0gZGF0YS0+YlRhZzsKKworCQkvKiBJbmNyZW1lbnQgYlRhZyAtLSBhbmQgaW5jcmVtZW50IGFnYWluIGlmIHplcm8gKi8KKwkJZGF0YS0+YlRhZysrOworCQlpZiAoIWRhdGEtPmJUYWcpCisJCQkoZGF0YS0+YlRhZykrKzsKKworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJZGV2X2VycihkZXYsICJ1c2JfYnVsa19tc2cgcmV0dXJuZWQgJWRcbiIsIHJldHZhbCk7CisJCQlpZiAoZGF0YS0+YXV0b19hYm9ydCkKKwkJCQl1c2J0bWNfaW9jdGxfYWJvcnRfYnVsa19vdXQoZGF0YSk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQkvKiBTZW5kIGJ1bGsgVVJCICovCisJCXJldHZhbCA9IHVzYl9idWxrX21zZyhkYXRhLT51c2JfZGV2LAorCQkJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShkYXRhLT51c2JfZGV2LAorCQkJCQkJICAgICAgZGF0YS0+YnVsa19pbiksCisJCQkJICAgICAgYnVmZmVyLCBVU0JUTUNfU0laRV9JT0JVRkZFUiwgJmFjdHVhbCwKKwkJCQkgICAgICBVU0JUTUNfVElNRU9VVCk7CisKKwkJLyogU3RvcmUgYlRhZyAoaW4gY2FzZSB3ZSBuZWVkIHRvIGFib3J0KSAqLworCQlkYXRhLT5iVGFnX2xhc3RfcmVhZCA9IGRhdGEtPmJUYWc7CisKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHJlYWQgZGF0YSwgZXJyb3IgJWRcbiIsIHJldHZhbCk7CisJCQlpZiAoZGF0YS0+YXV0b19hYm9ydCkKKwkJCQl1c2J0bWNfaW9jdGxfYWJvcnRfYnVsa19pbihkYXRhKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCS8qIEhvdyBtYW55IGNoYXJhY3RlcnMgZGlkIHRoZSBpbnN0cnVtZW50IHNlbmQ/ICovCisJCW5fY2hhcmFjdGVycyA9IGJ1ZmZlcls0XSArCisJCQkgICAgICAgKGJ1ZmZlcls1XSA8PCA4KSArCisJCQkgICAgICAgKGJ1ZmZlcls2XSA8PCAxNikgKworCQkJICAgICAgIChidWZmZXJbN10gPDwgMjQpOworCisJCS8qIENvcHkgYnVmZmVyIHRvIHVzZXIgc3BhY2UgKi8KKwkJaWYgKGNvcHlfdG9fdXNlcihidWYgKyBkb25lLCAmYnVmZmVyWzEyXSwgbl9jaGFyYWN0ZXJzKSkgeworCQkJLyogVGhlcmUgbXVzdCBoYXZlIGJlZW4gYW4gYWRkcmVzc2luZyBwcm9ibGVtICovCisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBleGl0OworCQl9CisKKwkJZG9uZSArPSBuX2NoYXJhY3RlcnM7CisJCWlmIChuX2NoYXJhY3RlcnMgPCBVU0JUTUNfU0laRV9JT0JVRkZFUikKKwkJCXJlbWFpbmluZyA9IDA7CisJfQorCisJLyogVXBkYXRlIGZpbGUgcG9zaXRpb24gdmFsdWUgKi8KKwkqZl9wb3MgPSAqZl9wb3MgKyBkb25lOworCXJldHZhbCA9IGRvbmU7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5pb19tdXRleCk7CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3NpemVfdCB1c2J0bWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKQoreworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGE7CisJdTggKmJ1ZmZlcjsKKwlpbnQgcmV0dmFsOworCWludCBhY3R1YWw7CisJdW5zaWduZWQgbG9uZyBpbnQgbl9ieXRlczsKKwlpbnQgbjsKKwlpbnQgcmVtYWluaW5nOworCWludCBkb25lOworCWludCB0aGlzX3BhcnQ7CisKKwlkYXRhID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJYnVmZmVyID0ga21hbGxvYyhVU0JUTUNfU0laRV9JT0JVRkZFUiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfbG9jaygmZGF0YS0+aW9fbXV0ZXgpOworCisJcmVtYWluaW5nID0gY291bnQ7CisJZG9uZSA9IDA7CisKKwl3aGlsZSAocmVtYWluaW5nID4gMCkgeworCQlpZiAocmVtYWluaW5nID4gVVNCVE1DX1NJWkVfSU9CVUZGRVIgLSAxMikgeworCQkJdGhpc19wYXJ0ID0gVVNCVE1DX1NJWkVfSU9CVUZGRVIgLSAxMjsKKwkJCWJ1ZmZlcls4XSA9IDA7CisJCX0gZWxzZSB7CisJCQl0aGlzX3BhcnQgPSByZW1haW5pbmc7CisJCQlidWZmZXJbOF0gPSAxOworCQl9CisKKwkJLyogU2V0dXAgSU8gYnVmZmVyIGZvciBERVZfREVQX01TR19PVVQgbWVzc2FnZSAqLworCQlidWZmZXJbMF0gPSAxOworCQlidWZmZXJbMV0gPSBkYXRhLT5iVGFnOworCQlidWZmZXJbMl0gPSB+KGRhdGEtPmJUYWcpOworCQlidWZmZXJbM10gPSAwOyAvKiBSZXNlcnZlZCAqLworCQlidWZmZXJbNF0gPSB0aGlzX3BhcnQgJiAyNTU7CisJCWJ1ZmZlcls1XSA9ICh0aGlzX3BhcnQgPj4gOCkgJiAyNTU7CisJCWJ1ZmZlcls2XSA9ICh0aGlzX3BhcnQgPj4gMTYpICYgMjU1OworCQlidWZmZXJbN10gPSAodGhpc19wYXJ0ID4+IDI0KSAmIDI1NTsKKwkJLyogYnVmZmVyWzhdIGlzIHNldCBhYm92ZS4uLiAqLworCQlidWZmZXJbOV0gPSAwOyAvKiBSZXNlcnZlZCAqLworCQlidWZmZXJbMTBdID0gMDsgLyogUmVzZXJ2ZWQgKi8KKwkJYnVmZmVyWzExXSA9IDA7IC8qIFJlc2VydmVkICovCisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZidWZmZXJbMTJdLCBidWYgKyBkb25lLCB0aGlzX3BhcnQpKSB7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBleGl0OworCQl9CisKKwkJbl9ieXRlcyA9IDEyICsgdGhpc19wYXJ0OworCQlpZiAodGhpc19wYXJ0ICUgNCkKKwkJCW5fYnl0ZXMgKz0gNCAtIHRoaXNfcGFydCAlIDQ7CisJCQlmb3IgKG4gPSAxMiArIHRoaXNfcGFydDsgbiA8IG5fYnl0ZXM7IG4rKykKKwkJCQlidWZmZXJbbl0gPSAwOworCisJCXJldHZhbCA9IHVzYl9idWxrX21zZyhkYXRhLT51c2JfZGV2LAorCQkJCSAgICAgIHVzYl9zbmRidWxrcGlwZShkYXRhLT51c2JfZGV2LAorCQkJCQkJICAgICAgZGF0YS0+YnVsa19vdXQpLAorCQkJCSAgICAgIGJ1ZmZlciwgbl9ieXRlcywgJmFjdHVhbCwgVVNCVE1DX1RJTUVPVVQpOworCisJCWRhdGEtPmJUYWdfbGFzdF93cml0ZSA9IGRhdGEtPmJUYWc7CisJCWRhdGEtPmJUYWcrKzsKKworCQlpZiAoIWRhdGEtPmJUYWcpCisJCQlkYXRhLT5iVGFnKys7CisKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWRldl9lcnIoJmRhdGEtPmludGYtPmRldiwKKwkJCQkiVW5hYmxlIHRvIHNlbmQgZGF0YSwgZXJyb3IgJWRcbiIsIHJldHZhbCk7CisJCQlpZiAoZGF0YS0+YXV0b19hYm9ydCkKKwkJCQl1c2J0bWNfaW9jdGxfYWJvcnRfYnVsa19vdXQoZGF0YSk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlyZW1haW5pbmcgLT0gdGhpc19wYXJ0OworCQlkb25lICs9IHRoaXNfcGFydDsKKwl9CisKKwlyZXR2YWwgPSBjb3VudDsKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5pb19tdXRleCk7CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHVzYnRtY19pb2N0bF9jbGVhcihzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhKQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmN1cnJlbnRfc2V0dGluZzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IGRldmljZSAqZGV2OworCXU4ICpidWZmZXI7CisJaW50IHJ2OworCWludCBuOworCWludCBhY3R1YWw7CisJaW50IG1heF9zaXplOworCisJZGV2ID0gJmRhdGEtPmludGYtPmRldjsKKworCWRldl9kYmcoZGV2LCAiU2VuZGluZyBJTklUSUFURV9DTEVBUiByZXF1ZXN0XG4iKTsKKworCWJ1ZmZlciA9IGttYWxsb2MoVVNCVE1DX1NJWkVfSU9CVUZGRVIsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCVE1DX1JFUVVFU1RfSU5JVElBVEVfQ0xFQVIsCisJCQkgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkgICAgIDAsIDAsIGJ1ZmZlciwgMSwgVVNCVE1DX1RJTUVPVVQpOworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJZ290byBleGl0OworCX0KKworCWRldl9kYmcoZGV2LCAiSU5JVElBVEVfQ0xFQVIgcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisKKwlpZiAoYnVmZmVyWzBdICE9IFVTQlRNQ19TVEFUVVNfU1VDQ0VTUykgeworCQlkZXZfZXJyKGRldiwgIklOSVRJQVRFX0NMRUFSIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCW1heF9zaXplID0gMDsKKwljdXJyZW50X3NldHRpbmcgPSBkYXRhLT5pbnRmLT5jdXJfYWx0c2V0dGluZzsKKwlmb3IgKG4gPSAwOyBuIDwgY3VycmVudF9zZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7IG4rKykgeworCQlkZXNjID0gJmN1cnJlbnRfc2V0dGluZy0+ZW5kcG9pbnRbbl0uZGVzYzsKKwkJaWYgKGRlc2MtPmJFbmRwb2ludEFkZHJlc3MgPT0gZGF0YS0+YnVsa19pbikKKwkJCW1heF9zaXplID0gbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpOworCX0KKworCWlmIChtYXhfc2l6ZSA9PSAwKSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgZ2V0IHdNYXhQYWNrZXRTaXplXG4iKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXZfZGJnKGRldiwgIndNYXhQYWNrZXRTaXplIGlzICVkXG4iLCBtYXhfc2l6ZSk7CisKKwluID0gMDsKKwordXNidG1jX2NsZWFyX2NoZWNrX3N0YXR1czoKKworCWRldl9kYmcoZGV2LCAiU2VuZGluZyBDSEVDS19DTEVBUl9TVEFUVVMgcmVxdWVzdFxuIik7CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQlRNQ19SRVFVRVNUX0NIRUNLX0NMRUFSX1NUQVRVUywKKwkJCSAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgMCwgMCwgYnVmZmVyLCAyLCBVU0JUTUNfVElNRU9VVCk7CisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJDSEVDS19DTEVBUl9TVEFUVVMgcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisKKwlpZiAoYnVmZmVyWzBdID09IFVTQlRNQ19TVEFUVVNfU1VDQ0VTUykKKwkJZ290byB1c2J0bWNfY2xlYXJfYnVsa19vdXRfaGFsdDsKKworCWlmIChidWZmZXJbMF0gIT0gVVNCVE1DX1NUQVRVU19QRU5ESU5HKSB7CisJCWRldl9lcnIoZGV2LCAiQ0hFQ0tfQ0xFQVJfU1RBVFVTIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChidWZmZXJbMV0gPT0gMSkKKwkJZG8geworCQkJZGV2X2RiZyhkZXYsICJSZWFkaW5nIGZyb20gYnVsayBpbiBFUFxuIik7CisKKwkJCXJ2ID0gdXNiX2J1bGtfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRhdGEtPnVzYl9kZXYsCisJCQkJCQkJICBkYXRhLT5idWxrX2luKSwKKwkJCQkJICBidWZmZXIsIFVTQlRNQ19TSVpFX0lPQlVGRkVSLAorCQkJCQkgICZhY3R1YWwsIFVTQlRNQ19USU1FT1VUKTsKKwkJCW4rKzsKKworCQkJaWYgKHJ2IDwgMCkgeworCQkJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLAorCQkJCQlydik7CisJCQkJZ290byBleGl0OworCQkJfQorCQl9IHdoaWxlICgoYWN0dWFsID09IG1heF9zaXplKSAmJgorCQkJICAobiA8IFVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTikpOworCisJaWYgKGFjdHVhbCA9PSBtYXhfc2l6ZSkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkbid0IGNsZWFyIGRldmljZSBidWZmZXIgd2l0aGluICVkIGN5Y2xlc1xuIiwKKwkJCVVTQlRNQ19NQVhfUkVBRFNfVE9fQ0xFQVJfQlVMS19JTik7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJZ290byB1c2J0bWNfY2xlYXJfY2hlY2tfc3RhdHVzOworCit1c2J0bWNfY2xlYXJfYnVsa19vdXRfaGFsdDoKKworCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCX1JFUV9DTEVBUl9GRUFUVVJFLAorCQkJICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1NUQU5EQVJEIHwKKwkJCSAgICAgVVNCX1JFQ0lQX0VORFBPSU5ULAorCQkJICAgICBVU0JfRU5EUE9JTlRfSEFMVCwKKwkJCSAgICAgZGF0YS0+YnVsa19vdXQsIGJ1ZmZlciwgMCwKKwkJCSAgICAgVVNCVE1DX1RJTUVPVVQpOworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJZ290byBleGl0OworCX0KKwlydiA9IDA7CisKK2V4aXQ6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBpbnQgdXNidG1jX2lvY3RsX2NsZWFyX291dF9oYWx0KHN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEpCit7CisJdTggKmJ1ZmZlcjsKKwlpbnQgcnY7CisKKwlidWZmZXIgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCX1JFUV9DTEVBUl9GRUFUVVJFLAorCQkJICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1NUQU5EQVJEIHwKKwkJCSAgICAgVVNCX1JFQ0lQX0VORFBPSU5ULAorCQkJICAgICBVU0JfRU5EUE9JTlRfSEFMVCwgZGF0YS0+YnVsa19vdXQsCisJCQkgICAgIGJ1ZmZlciwgMCwgVVNCVE1DX1RJTUVPVVQpOworCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKCZkYXRhLT51c2JfZGV2LT5kZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsCisJCQlydik7CisJCWdvdG8gZXhpdDsKKwl9CisJcnYgPSAwOworCitleGl0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgaW50IHVzYnRtY19pb2N0bF9jbGVhcl9pbl9oYWx0KHN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEpCit7CisJdTggKmJ1ZmZlcjsKKwlpbnQgcnY7CisKKwlidWZmZXIgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsIHVzYl9zbmRjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCX1JFUV9DTEVBUl9GRUFUVVJFLAorCQkJICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1NUQU5EQVJEIHwKKwkJCSAgICAgVVNCX1JFQ0lQX0VORFBPSU5ULAorCQkJICAgICBVU0JfRU5EUE9JTlRfSEFMVCwgZGF0YS0+YnVsa19pbiwgYnVmZmVyLCAwLAorCQkJICAgICBVU0JUTUNfVElNRU9VVCk7CisKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoJmRhdGEtPnVzYl9kZXYtPmRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwKKwkJCXJ2KTsKKwkJZ290byBleGl0OworCX0KKwlydiA9IDA7CisKK2V4aXQ6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2NhcGFiaWxpdGllcyhzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT51c2JfZGV2LT5kZXY7CisJY2hhciAqYnVmZmVyOworCWludCBydjsKKworCWJ1ZmZlciA9IGttYWxsb2MoMHgxOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwgdXNiX3JjdmN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JUTUNfUkVRVUVTVF9HRVRfQ0FQQUJJTElUSUVTLAorCQkJICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgICAwLCAwLCBidWZmZXIsIDB4MTgsIFVTQlRNQ19USU1FT1VUKTsKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCXJldHVybiBydjsKKwl9CisKKwlkZXZfZGJnKGRldiwgIkdFVF9DQVBBQklMSVRJRVMgcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisJZGV2X2RiZyhkZXYsICJJbnRlcmZhY2UgY2FwYWJpbGl0aWVzIGFyZSAleFxuIiwgYnVmZmVyWzRdKTsKKwlkZXZfZGJnKGRldiwgIkRldmljZSBjYXBhYmlsaXRpZXMgYXJlICV4XG4iLCBidWZmZXJbNV0pOworCWRldl9kYmcoZGV2LCAiVVNCNDg4IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgYXJlICV4XG4iLCBidWZmZXJbMTRdKTsKKwlkZXZfZGJnKGRldiwgIlVTQjQ4OCBkZXZpY2UgY2FwYWJpbGl0aWVzIGFyZSAleFxuIiwgYnVmZmVyWzE1XSk7CisJaWYgKGJ1ZmZlclswXSAhPSBVU0JUTUNfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZGV2X2VycihkZXYsICJHRVRfQ0FQQUJJTElUSUVTIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWRhdGEtPmNhcGFiaWxpdGllcy5pbnRlcmZhY2VfY2FwYWJpbGl0aWVzID0gYnVmZmVyWzRdOworCWRhdGEtPmNhcGFiaWxpdGllcy5kZXZpY2VfY2FwYWJpbGl0aWVzID0gYnVmZmVyWzVdOworCWRhdGEtPmNhcGFiaWxpdGllcy51c2I0ODhfaW50ZXJmYWNlX2NhcGFiaWxpdGllcyA9IGJ1ZmZlclsxNF07CisJZGF0YS0+Y2FwYWJpbGl0aWVzLnVzYjQ4OF9kZXZpY2VfY2FwYWJpbGl0aWVzID0gYnVmZmVyWzE1XTsKKworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgY2FwYWJpbGl0eV9hdHRyaWJ1dGUobmFtZSkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwJCQkJXAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJXAorCQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5jYXBhYmlsaXRpZXMubmFtZSk7CQlcCit9CQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfIyNuYW1lLCBOVUxMKQorCitjYXBhYmlsaXR5X2F0dHJpYnV0ZShpbnRlcmZhY2VfY2FwYWJpbGl0aWVzKTsKK2NhcGFiaWxpdHlfYXR0cmlidXRlKGRldmljZV9jYXBhYmlsaXRpZXMpOworY2FwYWJpbGl0eV9hdHRyaWJ1dGUodXNiNDg4X2ludGVyZmFjZV9jYXBhYmlsaXRpZXMpOworY2FwYWJpbGl0eV9hdHRyaWJ1dGUodXNiNDg4X2RldmljZV9jYXBhYmlsaXRpZXMpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY2FwYWJpbGl0eV9hdHRyc1tdID0geworCSZkZXZfYXR0cl9pbnRlcmZhY2VfY2FwYWJpbGl0aWVzLmF0dHIsCisJJmRldl9hdHRyX2RldmljZV9jYXBhYmlsaXRpZXMuYXR0ciwKKwkmZGV2X2F0dHJfdXNiNDg4X2ludGVyZmFjZV9jYXBhYmlsaXRpZXMuYXR0ciwKKwkmZGV2X2F0dHJfdXNiNDg4X2RldmljZV9jYXBhYmlsaXRpZXMuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgY2FwYWJpbGl0eV9hdHRyX2dycCA9IHsKKwkuYXR0cnMgPSBjYXBhYmlsaXR5X2F0dHJzLAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19UZXJtQ2hhcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlY1xuIiwgZGF0YS0+VGVybUNoYXIpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9UZXJtQ2hhcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJaWYgKGNvdW50IDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGF0YS0+VGVybUNoYXIgPSBidWZbMF07CisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIERFVklDRV9BVFRSKFRlcm1DaGFyLCBTX0lSVUdPLCBzaG93X1Rlcm1DaGFyLCBzdG9yZV9UZXJtQ2hhcik7CisKKyNkZWZpbmUgZGF0YV9hdHRyaWJ1dGUobmFtZSkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+bmFtZSk7CQkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHN0b3JlXyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJCVwKKwkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJCVwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CVwKKwlzc2l6ZV90IHJlc3VsdDsJCQkJCQkJXAorCXVuc2lnbmVkIHZhbDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJlc3VsdCA9IHNzY2FuZihidWYsICIldVxuIiwgJnZhbCk7CQkJCVwKKwlpZiAocmVzdWx0ICE9IDEpCQkJCQkJXAorCQlyZXN1bHQgPSAtRUlOVkFMOwkJCQkJXAorCWRhdGEtPm5hbWUgPSB2YWw7CQkJCQkJXAorCWlmIChyZXN1bHQgPCAwKQkJCQkJCQlcCisJCXJldHVybiByZXN1bHQ7CQkJCQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJcmV0dXJuIGNvdW50OwkJCQkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd18jI25hbWUsIHN0b3JlXyMjbmFtZSkKKworZGF0YV9hdHRyaWJ1dGUoVGVybUNoYXJFbmFibGVkKTsKK2RhdGFfYXR0cmlidXRlKGF1dG9fYWJvcnQpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGF0YV9hdHRyc1tdID0geworCSZkZXZfYXR0cl9UZXJtQ2hhci5hdHRyLAorCSZkZXZfYXR0cl9UZXJtQ2hhckVuYWJsZWQuYXR0ciwKKwkmZGV2X2F0dHJfYXV0b19hYm9ydC5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkYXRhX2F0dHJfZ3JwID0geworCS5hdHRycyA9IGRhdGFfYXR0cnMsCit9OworCitzdGF0aWMgaW50IHVzYnRtY19pb2N0bF9pbmRpY2F0b3JfcHVsc2Uoc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdTggKmJ1ZmZlcjsKKwlpbnQgcnY7CisKKwlkZXYgPSAmZGF0YS0+aW50Zi0+ZGV2OworCisJYnVmZmVyID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQlRNQ19SRVFVRVNUX0lORElDQVRPUl9QVUxTRSwKKwkJCSAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgMCwgMCwgYnVmZmVyLCAweDAxLCBVU0JUTUNfVElNRU9VVCk7CisKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXZfZGJnKGRldiwgIklORElDQVRPUl9QVUxTRSByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKworCWlmIChidWZmZXJbMF0gIT0gVVNCVE1DX1NUQVRVU19TVUNDRVNTKSB7CisJCWRldl9lcnIoZGV2LCAiSU5ESUNBVE9SX1BVTFNFIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKwlydiA9IDA7CisKK2V4aXQ6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBsb25nIHVzYnRtY19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YTsKKwlpbnQgcmV0dmFsID0gLUVCQURSUUM7CisKKwlkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCW11dGV4X2xvY2soJmRhdGEtPmlvX211dGV4KTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBVU0JUTUNfSU9DVExfQ0xFQVJfT1VUX0hBTFQ6CisJCXJldHZhbCA9IHVzYnRtY19pb2N0bF9jbGVhcl9vdXRfaGFsdChkYXRhKTsKKworCWNhc2UgVVNCVE1DX0lPQ1RMX0NMRUFSX0lOX0hBTFQ6CisJCXJldHZhbCA9IHVzYnRtY19pb2N0bF9jbGVhcl9pbl9oYWx0KGRhdGEpOworCisJY2FzZSBVU0JUTUNfSU9DVExfSU5ESUNBVE9SX1BVTFNFOgorCQlyZXR2YWwgPSB1c2J0bWNfaW9jdGxfaW5kaWNhdG9yX3B1bHNlKGRhdGEpOworCisJY2FzZSBVU0JUTUNfSU9DVExfQ0xFQVI6CisJCXJldHZhbCA9IHVzYnRtY19pb2N0bF9jbGVhcihkYXRhKTsKKworCWNhc2UgVVNCVE1DX0lPQ1RMX0FCT1JUX0JVTEtfT1VUOgorCQlyZXR2YWwgPSB1c2J0bWNfaW9jdGxfYWJvcnRfYnVsa19vdXQoZGF0YSk7CisKKwljYXNlIFVTQlRNQ19JT0NUTF9BQk9SVF9CVUxLX0lOOgorCQlyZXR2YWwgPSB1c2J0bWNfaW9jdGxfYWJvcnRfYnVsa19pbihkYXRhKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRhdGEtPmlvX211dGV4KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVhZAkJPSB1c2J0bWNfcmVhZCwKKwkud3JpdGUJCT0gdXNidG1jX3dyaXRlLAorCS5vcGVuCQk9IHVzYnRtY19vcGVuLAorCS5yZWxlYXNlCT0gdXNidG1jX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsCT0gdXNidG1jX2lvY3RsLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIHVzYnRtY19jbGFzcyA9IHsKKwkubmFtZSA9CQkidXNidG1jJWQiLAorCS5mb3BzID0JCSZmb3BzLAorCS5taW5vcl9iYXNlID0JVVNCVE1DX01JTk9SX0JBU0UsCit9OworCisKK3N0YXRpYyBpbnQgdXNidG1jX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGE7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCWludCBuOworCWludCByZXRjb2RlOworCisJZGV2X2RiZygmaW50Zi0+ZGV2LCAiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlkYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJVbmFibGUgdG8gYWxsb2NhdGUga2VybmVsIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRhdGEtPmludGYgPSBpbnRmOworCWRhdGEtPmlkID0gaWQ7CisJZGF0YS0+dXNiX2RldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGF0YSk7CisJa3JlZl9pbml0KCZkYXRhLT5rcmVmKTsKKwltdXRleF9pbml0KCZkYXRhLT5pb19tdXRleCk7CisKKwkvKiBJbml0aWFsaXplIFVTQlRNQyBiVGFnIGFuZCBvdGhlciBmaWVsZHMgKi8KKwlkYXRhLT5iVGFnCT0gMTsKKwlkYXRhLT5UZXJtQ2hhckVuYWJsZWQgPSAwOworCWRhdGEtPlRlcm1DaGFyID0gJ1xuJzsKKworCS8qIFVTQlRNQyBkZXZpY2VzIGhhdmUgb25seSBvbmUgc2V0dGluZywgc28gdXNlIHRoYXQgKi8KKwlpZmFjZV9kZXNjID0gZGF0YS0+aW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKwkvKiBGaW5kIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwlmb3IgKG4gPSAwOyBuIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBuKyspIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbbl0uZGVzYzsKKworCQlpZiAodXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oZW5kcG9pbnQpKSB7CisJCQlkYXRhLT5idWxrX2luID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJGb3VuZCBidWxrIGluIGVuZHBvaW50IGF0ICV1XG4iLAorCQkJCWRhdGEtPmJ1bGtfaW4pOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBGaW5kIGJ1bGsgb3V0IGVuZHBvaW50ICovCisJZm9yIChuID0gMDsgbiA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgbisrKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W25dLmRlc2M7CisKKwkJaWYgKHVzYl9lbmRwb2ludF9pc19idWxrX291dChlbmRwb2ludCkpIHsKKwkJCWRhdGEtPmJ1bGtfb3V0ID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJGb3VuZCBCdWxrIG91dCBlbmRwb2ludCBhdCAldVxuIiwKKwkJCQlkYXRhLT5idWxrX291dCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldGNvZGUgPSBnZXRfY2FwYWJpbGl0aWVzKGRhdGEpOworCWlmIChyZXRjb2RlKQorCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJjYW4ndCByZWFkIGNhcGFiaWxpdGllc1xuIik7CisJZWxzZQorCQlyZXRjb2RlID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwKKwkJCQkJICAgICAmY2FwYWJpbGl0eV9hdHRyX2dycCk7CisKKwlyZXRjb2RlID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmRhdGFfYXR0cl9ncnApOworCisJcmV0Y29kZSA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYnRtY19jbGFzcyk7CisJaWYgKHJldGNvZGUpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IiCisJCQkiIChiYXNlICV1LCBzbGljZSBkZWZhdWx0KTogJWRcbiIsIFVTQlRNQ19NSU5PUl9CQVNFLAorCQkJcmV0Y29kZSk7CisJCWdvdG8gZXJyb3JfcmVnaXN0ZXI7CisJfQorCWRldl9kYmcoJmludGYtPmRldiwgIlVzaW5nIG1pbm9yIG51bWJlciAlZFxuIiwgaW50Zi0+bWlub3IpOworCisJcmV0dXJuIDA7CisKK2Vycm9yX3JlZ2lzdGVyOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZjYXBhYmlsaXR5X2F0dHJfZ3JwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmZGF0YV9hdHRyX2dycCk7CisJa3JlZl9wdXQoJmRhdGEtPmtyZWYsIHVzYnRtY19kZWxldGUpOworCXJldHVybiByZXRjb2RlOworfQorCitzdGF0aWMgdm9pZCB1c2J0bWNfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhOworCisJZGV2X2RiZygmaW50Zi0+ZGV2LCAidXNidG1jX2Rpc2Nvbm5lY3QgY2FsbGVkXG4iKTsKKworCWRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNidG1jX2NsYXNzKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmY2FwYWJpbGl0eV9hdHRyX2dycCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmRhdGFfYXR0cl9ncnApOworCWtyZWZfcHV0KCZkYXRhLT5rcmVmLCB1c2J0bWNfZGVsZXRlKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYnRtY19kcml2ZXIgPSB7CisJLm5hbWUJCT0gInVzYnRtYyIsCisJLmlkX3RhYmxlCT0gdXNidG1jX2RldmljZXMsCisJLnByb2JlCQk9IHVzYnRtY19wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHVzYnRtY19kaXNjb25uZWN0Cit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2J0bWNfaW5pdCh2b2lkKQoreworCWludCByZXRjb2RlOworCisJcmV0Y29kZSA9IHVzYl9yZWdpc3RlcigmdXNidG1jX2RyaXZlcik7CisJaWYgKHJldGNvZGUpCisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSI6IFVuYWJsZSB0byByZWdpc3RlciBkcml2ZXJcbiIpOworCXJldHVybiByZXRjb2RlOworfQorbW9kdWxlX2luaXQodXNidG1jX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNidG1jX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNidG1jX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh1c2J0bWNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZwppbmRleCBjYzlmMzk3Li5lMTc1OWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCkBAIC0xMzQsNSArMTM0LDUgQEAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIExpbnV4IHdpbGwgcmVmdXNlIHRvIGVudW1lcmF0ZQogCSAgZXh0ZXJuYWwgaHVicy4gIE9URyBob3N0cyBhcmUgYWxsb3dlZCB0byByZWR1Y2UgaGFyZHdhcmUKIAkgIGFuZCBzb2Z0d2FyZSBjb3N0cyBieSBub3Qgc3VwcG9ydGluZyBleHRlcm5hbCBodWJzLiAgU28KLQkgIGFyZSAiRW1lZGRlZCBIb3N0cyIgdGhhdCBkb24ndCBvZmZlciBPVEcgc3VwcG9ydC4KKwkgIGFyZSAiRW1iZWRkZWQgSG9zdHMiIHRoYXQgZG9uJ3Qgb2ZmZXIgT1RHIHN1cHBvcnQuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwppbmRleCAyMDI5MGM1Li4yYmNjZWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC00MTMsNyArNDEzLDggQEAKIAlpZiAobGlrZWx5KGlmbnVtIDwgOCpzaXplb2YocHMtPmlmY2xhaW1lZCkpKQogCQljbGVhcl9iaXQoaWZudW0sICZwcy0+aWZjbGFpbWVkKTsKIAllbHNlCi0JCXdhcm4oImludGVyZmFjZSBudW1iZXIgJXUgb3V0IG9mIHJhbmdlIiwgaWZudW0pOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiaW50ZXJmYWNlIG51bWJlciAldSBvdXQgb2YgcmFuZ2VcbiIsCisJCQkgaWZudW0pOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIApAQCAtNjI0LDYgKzYyNSw4IEBACiAJc21wX3dtYigpOwogCWxpc3RfYWRkX3RhaWwoJnBzLT5saXN0LCAmZGV2LT5maWxlbGlzdCk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcHM7CisJc25vb3AoJmRldi0+ZGV2LCAib3BlbmVkIGJ5IHByb2Nlc3MgJWQ6ICVzXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKKwkJCWN1cnJlbnQtPmNvbW0pOwogIG91dDoKIAlpZiAocmV0KSB7CiAJCWtmcmVlKHBzKTsKQEAgLTE3MjksOSArMTczMiw5IEBACiB7CiAJc3RydWN0IGRldmljZSAqY2xkZXY7CiAKLQljbGRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh1c2JfY2xhc3NkZXZfY2xhc3MsICZkZXYtPmRldiwKLQkJCQkgICAgICBkZXYtPmRldi5kZXZ0LCBOVUxMLCAidXNiZGV2JWQuJWQiLAotCQkJCSAgICAgIGRldi0+YnVzLT5idXNudW0sIGRldi0+ZGV2bnVtKTsKKwljbGRldiA9IGRldmljZV9jcmVhdGUodXNiX2NsYXNzZGV2X2NsYXNzLCAmZGV2LT5kZXYsIGRldi0+ZGV2LmRldnQsCisJCQkgICAgICBOVUxMLCAidXNiZGV2JWQuJWQiLCBkZXYtPmJ1cy0+YnVzbnVtLAorCQkJICAgICAgZGV2LT5kZXZudW0pOwogCWlmIChJU19FUlIoY2xkZXYpKQogCQlyZXR1cm4gUFRSX0VSUihjbGRldik7CiAJZGV2LT51c2JfY2xhc3NkZXYgPSBjbGRldjsKQEAgLTE3NzQsMTkgKzE3NzcsMjAgQEAKIAlyZXR2YWwgPSByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKFVTQl9ERVZJQ0VfREVWLCBVU0JfREVWSUNFX01BWCwKIAkJCQkJInVzYl9kZXZpY2UiKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigidW5hYmxlIHRvIHJlZ2lzdGVyIG1pbm9ycyBmb3IgdXNiX2RldmljZSIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBtaW5vcnMgZm9yIHVzYl9kZXZpY2VcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJY2Rldl9pbml0KCZ1c2JfZGV2aWNlX2NkZXYsICZ1c2JkZXZfZmlsZV9vcGVyYXRpb25zKTsKIAlyZXR2YWwgPSBjZGV2X2FkZCgmdXNiX2RldmljZV9jZGV2LCBVU0JfREVWSUNFX0RFViwgVVNCX0RFVklDRV9NQVgpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCJ1bmFibGUgdG8gZ2V0IHVzYl9kZXZpY2UgbWFqb3IgJWQiLCBVU0JfREVWSUNFX01BSk9SKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gZ2V0IHVzYl9kZXZpY2UgbWFqb3IgJWRcbiIsCisJCSAgICAgICBVU0JfREVWSUNFX01BSk9SKTsKIAkJZ290byBlcnJvcl9jZGV2OwogCX0KICNpZmRlZiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUwogCXVzYl9jbGFzc2Rldl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInVzYl9kZXZpY2UiKTsKIAlpZiAoSVNfRVJSKHVzYl9jbGFzc2Rldl9jbGFzcykpIHsKLQkJZXJyKCJ1bmFibGUgdG8gcmVnaXN0ZXIgdXNiX2RldmljZSBjbGFzcyIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciB1c2JfZGV2aWNlIGNsYXNzXG4iKTsKIAkJcmV0dmFsID0gUFRSX0VSUih1c2JfY2xhc3NkZXZfY2xhc3MpOwogCQljZGV2X2RlbCgmdXNiX2RldmljZV9jZGV2KTsKIAkJdXNiX2NsYXNzZGV2X2NsYXNzID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCmluZGV4IDVhN2ZhNmYuLmU5MzViZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwpAQCAtMTA3MCw3ICsxMDcwLDggQEAKIAkJCQlzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyOwogCiAJCQkJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKLQkJCQlpZiAoIWRyaXZlci0+cmVzZXRfcmVzdW1lKQorCQkJCWlmICghZHJpdmVyLT5yZXNldF9yZXN1bWUgfHwKKwkJCQkgICAgaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCkKIAkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKaW5kZXggMjI5MTIxMy4uOTQ2ZmFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwpAQCAtMTY5LDcgKzE2OSw4IEBACiAJZXJyb3IgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXYsIDAsIE1BWF9FTkRQT0lOVF9NSU5PUlMsCiAJCQkJICAgICJ1c2JfZW5kcG9pbnQiKTsKIAlpZiAoZXJyb3IpIHsKLQkJZXJyKCJ1bmFibGUgdG8gZ2V0IGEgZHluYW1pYyBtYWpvciBmb3IgdXNiIGVuZHBvaW50cyIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgYSBkeW5hbWljIG1ham9yIGZvciAiCisJCSAgICAgICAidXNiIGVuZHBvaW50cy5cbiIpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCXVzYl9lbmRwb2ludF9tYWpvciA9IE1BSk9SKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCmluZGV4IDZiMWIyMjkuLjk5N2U2NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCkBAIC04Niw3ICs4Niw3IEBACiAJdXNiX2NsYXNzLT5jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInVzYiIpOwogCWlmIChJU19FUlIodXNiX2NsYXNzLT5jbGFzcykpIHsKIAkJcmVzdWx0ID0gSVNfRVJSKHVzYl9jbGFzcy0+Y2xhc3MpOwotCQllcnIoImNsYXNzX2NyZWF0ZSBmYWlsZWQgZm9yIHVzYiBkZXZpY2VzIik7CisJCXByaW50ayhLRVJOX0VSUiAiY2xhc3NfY3JlYXRlIGZhaWxlZCBmb3IgdXNiIGRldmljZXNcbiIpOwogCQlrZnJlZSh1c2JfY2xhc3MpOwogCQl1c2JfY2xhc3MgPSBOVUxMOwogCX0KQEAgLTExNSw3ICsxMTUsOCBAQAogCiAJZXJyb3IgPSByZWdpc3Rlcl9jaHJkZXYoVVNCX01BSk9SLCAidXNiIiwgJnVzYl9mb3BzKTsKIAlpZiAoZXJyb3IpCi0JCWVycigidW5hYmxlIHRvIGdldCBtYWpvciAlZCBmb3IgdXNiIGRldmljZXMiLCBVU0JfTUFKT1IpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIHVzYiBkZXZpY2VzXG4iLAorCQkgICAgICAgVVNCX01BSk9SKTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTE5Niw5ICsxOTcsOSBAQAogCQkrK3RlbXA7CiAJZWxzZQogCQl0ZW1wID0gbmFtZTsKLQlpbnRmLT51c2JfZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHVzYl9jbGFzcy0+Y2xhc3MsICZpbnRmLT5kZXYsCi0JCQkJCSAgICAgIE1LREVWKFVTQl9NQUpPUiwgbWlub3IpLCBOVUxMLAotCQkJCQkgICAgICAiJXMiLCB0ZW1wKTsKKwlpbnRmLT51c2JfZGV2ID0gZGV2aWNlX2NyZWF0ZSh1c2JfY2xhc3MtPmNsYXNzLCAmaW50Zi0+ZGV2LAorCQkJCSAgICAgIE1LREVWKFVTQl9NQUpPUiwgbWlub3IpLCBOVUxMLAorCQkJCSAgICAgICIlcyIsIHRlbXApOwogCWlmIChJU19FUlIoaW50Zi0+dXNiX2RldikpIHsKIAkJZG93bl93cml0ZSgmbWlub3JfcndzZW0pOwogCQl1c2JfbWlub3JzW2ludGYtPm1pbm9yXSA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwppbmRleCA4YWIzODlkLi5mYzkwMThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKQEAgLTgxLDYgKzgxLDEwIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEtlZXAgdHJhY2sgb2Ygd2hpY2ggaG9zdCBjb250cm9sbGVyIGRyaXZlcnMgYXJlIGxvYWRlZCAqLwordW5zaWduZWQgbG9uZyB1c2JfaGNkc19sb2FkZWQ7CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfaGNkc19sb2FkZWQpOworCiAvKiBob3N0IGNvbnRyb2xsZXJzIHdlIG1hbmFnZSAqLwogTElTVF9IRUFEICh1c2JfYnVzX2xpc3QpOwogRVhQT1JUX1NZTUJPTF9HUEwgKHVzYl9idXNfbGlzdCk7CkBAIC04MTgsOSArODIyLDggQEAKIAlzZXRfYml0IChidXNudW0sIGJ1c21hcC5idXNtYXApOwogCWJ1cy0+YnVzbnVtID0gYnVzbnVtOwogCi0JYnVzLT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodXNiX2hvc3RfY2xhc3MsIGJ1cy0+Y29udHJvbGxlciwKLQkJCQkJIE1LREVWKDAsIDApLCBidXMsCi0JCQkJCSAidXNiX2hvc3QlZCIsIGJ1c251bSk7CisJYnVzLT5kZXYgPSBkZXZpY2VfY3JlYXRlKHVzYl9ob3N0X2NsYXNzLCBidXMtPmNvbnRyb2xsZXIsIE1LREVWKDAsIDApLAorCQkJCSBidXMsICJ1c2JfaG9zdCVkIiwgYnVzbnVtKTsKIAlyZXN1bHQgPSBQVFJfRVJSKGJ1cy0+ZGV2KTsKIAlpZiAoSVNfRVJSKGJ1cy0+ZGV2KSkKIAkJZ290byBlcnJvcl9jcmVhdGVfY2xhc3NfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuaCBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKaW5kZXggZTcxMGNlMC4uMmRjZGU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCkBAIC00ODIsNCArNDgyLDEwIEBACiAgKi8KIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGVoY2lfY2ZfcG9ydF9yZXNldF9yd3NlbTsKIAorLyogS2VlcCB0cmFjayBvZiB3aGljaCBob3N0IGNvbnRyb2xsZXIgZHJpdmVycyBhcmUgbG9hZGVkICovCisjZGVmaW5lIFVTQl9VSENJX0xPQURFRAkJMAorI2RlZmluZSBVU0JfT0hDSV9MT0FERUQJCTEKKyNkZWZpbmUgVVNCX0VIQ0lfTE9BREVECQkyCitleHRlcm4gdW5zaWduZWQgbG9uZyB1c2JfaGNkc19sb2FkZWQ7CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCBkOTk5NjM4Li5kNzNjZTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTc3LDYgKzc3LDcgQEAKIAl1bnNpZ25lZAkJaGFzX2luZGljYXRvcnM6MTsKIAl1OAkJCWluZGljYXRvcltVU0JfTUFYQ0hJTERSRU5dOwogCXN0cnVjdCBkZWxheWVkX3dvcmsJbGVkczsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWluaXRfd29yazsKIH07CiAKIApAQCAtMTAwLDYgKzEwMSwxNSBAQAogTU9EVUxFX1BBUk1fREVTQyAoYmxpbmtlbmxpZ2h0cywgInRydWUgdG8gY3ljbGUgbGVkcyBvbiBodWJzIik7CiAKIC8qCisgKiBEZXZpY2UgU0FUQTgwMDAgRlcxLjAgZnJvbSBEQVRBU1QwUiBUZWNobm9sb2d5IENvcnAgcmVxdWlyZXMgYWJvdXQKKyAqIDEwIHNlY29uZHMgdG8gc2VuZCByZXBseSBmb3IgdGhlIGluaXRpYWwgNjQtYnl0ZSBkZXNjcmlwdG9yIHJlcXVlc3QuCisgKi8KKy8qIGRlZmluZSBpbml0aWFsIDY0LWJ5dGUgZGVzY3JpcHRvciByZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovCitzdGF0aWMgaW50IGluaXRpYWxfZGVzY3JpcHRvcl90aW1lb3V0ID0gVVNCX0NUUkxfR0VUX1RJTUVPVVQ7Cittb2R1bGVfcGFyYW0oaW5pdGlhbF9kZXNjcmlwdG9yX3RpbWVvdXQsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdGlhbF9kZXNjcmlwdG9yX3RpbWVvdXQsICJpbml0aWFsIDY0LWJ5dGUgZGVzY3JpcHRvciByZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIChkZWZhdWx0IDUwMDAgLSA1LjAgc2Vjb25kcykiKTsKKworLyoKICAqIEFzIG9mIDIuNi4xMCB3ZSBpbnRyb2R1Y2UgYSBuZXcgVVNCIGRldmljZSBpbml0aWFsaXphdGlvbiBzY2hlbWUgd2hpY2gKICAqIGNsb3NlbHkgcmVzZW1ibGVzIHRoZSB3YXkgV2luZG93cyB3b3Jrcy4gIEhvcGVmdWxseSBpdCB3aWxsIGJlIGNvbXBhdGlibGUKICAqIHdpdGggYSB3aWRlciByYW5nZSBvZiBkZXZpY2VzIHRoYW4gdGhlIG9sZCBzY2hlbWUuICBIb3dldmVyIHNvbWUgcHJldmlvdXNseQpAQCAtNTE1LDEwICs1MjUsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9odWJfdHRfY2xlYXJfYnVmZmVyKTsKIAotc3RhdGljIHZvaWQgaHViX3Bvd2VyX29uKHN0cnVjdCB1c2JfaHViICpodWIpCisvKiBJZiBkb19kZWxheSBpcyBmYWxzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoZSBjYWxsZXIKKyAqIG5lZWRzIHRvIGRlbGF5LgorICovCitzdGF0aWMgdW5zaWduZWQgaHViX3Bvd2VyX29uKHN0cnVjdCB1c2JfaHViICpodWIsIGJvb2wgZG9fZGVsYXkpCiB7CiAJaW50IHBvcnQxOwogCXVuc2lnbmVkIHBnb29kX2RlbGF5ID0gaHViLT5kZXNjcmlwdG9yLT5iUHdyT24yUHdyR29vZCAqIDI7CisJdW5zaWduZWQgZGVsYXk7CiAJdTE2IHdIdWJDaGFyYWN0ZXJpc3RpY3MgPQogCQkJbGUxNl90b19jcHUoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzKTsKIApAQCAtNTM3LDcgKzU1MSwxMCBAQAogCQlzZXRfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydDEsIFVTQl9QT1JUX0ZFQVRfUE9XRVIpOwogCiAJLyogV2FpdCBhdCBsZWFzdCAxMDAgbXNlYyBmb3IgcG93ZXIgdG8gYmVjb21lIHN0YWJsZSAqLwotCW1zbGVlcChtYXgocGdvb2RfZGVsYXksICh1bnNpZ25lZCkgMTAwKSk7CisJZGVsYXkgPSBtYXgocGdvb2RfZGVsYXksICh1bnNpZ25lZCkgMTAwKTsKKwlpZiAoZG9fZGVsYXkpCisJCW1zbGVlcChkZWxheSk7CisJcmV0dXJuIGRlbGF5OwogfQogCiBzdGF0aWMgaW50IGh1Yl9odWJfc3RhdHVzKHN0cnVjdCB1c2JfaHViICpodWIsCkBAIC01OTksMjEgKzYxNiw1NSBAQAogfQogCiBlbnVtIGh1Yl9hY3RpdmF0aW9uX3R5cGUgewotCUhVQl9JTklULCBIVUJfUE9TVF9SRVNFVCwgSFVCX1JFU1VNRSwgSFVCX1JFU0VUX1JFU1VNRQorCUhVQl9JTklULCBIVUJfSU5JVDIsIEhVQl9JTklUMywKKwlIVUJfUE9TVF9SRVNFVCwgSFVCX1JFU1VNRSwgSFVCX1JFU0VUX1JFU1VNRSwKIH07CiAKK3N0YXRpYyB2b2lkIGh1Yl9pbml0X2Z1bmMyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpOworc3RhdGljIHZvaWQgaHViX2luaXRfZnVuYzMoc3RydWN0IHdvcmtfc3RydWN0ICp3cyk7CisKIHN0YXRpYyB2b2lkIGh1Yl9hY3RpdmF0ZShzdHJ1Y3QgdXNiX2h1YiAqaHViLCBlbnVtIGh1Yl9hY3RpdmF0aW9uX3R5cGUgdHlwZSkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKIAlpbnQgcG9ydDE7CiAJaW50IHN0YXR1czsKIAlib29sIG5lZWRfZGVib3VuY2VfZGVsYXkgPSBmYWxzZTsKKwl1bnNpZ25lZCBkZWxheTsKKworCS8qIENvbnRpbnVlIGEgcGFydGlhbCBpbml0aWFsaXphdGlvbiAqLworCWlmICh0eXBlID09IEhVQl9JTklUMikKKwkJZ290byBpbml0MjsKKwlpZiAodHlwZSA9PSBIVUJfSU5JVDMpCisJCWdvdG8gaW5pdDM7CiAKIAkvKiBBZnRlciBhIHJlc3VtZSwgcG9ydCBwb3dlciBzaG91bGQgc3RpbGwgYmUgb24uCiAJICogRm9yIGFueSBvdGhlciB0eXBlIG9mIGFjdGl2YXRpb24sIHR1cm4gaXQgb24uCiAJICovCi0JaWYgKHR5cGUgIT0gSFVCX1JFU1VNRSkKLQkJaHViX3Bvd2VyX29uKGh1Yik7CisJaWYgKHR5cGUgIT0gSFVCX1JFU1VNRSkgeworCisJCS8qIFNwZWVkIHVwIHN5c3RlbSBib290IGJ5IHVzaW5nIGEgZGVsYXllZF93b3JrIGZvciB0aGUKKwkJICogaHViJ3MgaW5pdGlhbCBwb3dlci11cCBkZWxheXMuICBUaGlzIGlzIHByZXR0eSBhd2t3YXJkCisJCSAqIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gbG9va3MgbGlrZSBhIGhvbWUtYnJld2VkIHNvcnQgb2YKKwkJICogc2V0am1wL2xvbmdqbXAsIGJ1dCBpdCBzYXZlcyBhdCBsZWFzdCAxMDAgbXMgZm9yIGVhY2gKKwkJICogcm9vdCBodWIgKGFzc3VtaW5nIHVzYmNvcmUgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsCisJCSAqIHJhdGhlciB0aGFuIGFzIGEgbW9kdWxlKS4gIEl0IGFkZHMgdXAuCisJCSAqCisJCSAqIFRoaXMgY2FuJ3QgYmUgZG9uZSBmb3IgSFVCX1JFU1VNRSBvciBIVUJfUkVTRVRfUkVTVU1FCisJCSAqIGJlY2F1c2UgZm9yIHRob3NlIGFjdGl2YXRpb24gdHlwZXMgdGhlIHBvcnRzIGhhdmUgdG8gYmUKKwkJICogb3BlcmF0aW9uYWwgd2hlbiB3ZSByZXR1cm4uICBJbiB0aGVvcnkgdGhpcyBjb3VsZCBiZSBkb25lCisJCSAqIGZvciBIVUJfUE9TVF9SRVNFVCwgYnV0IGl0J3MgZWFzaWVyIG5vdCB0by4KKwkJICovCisJCWlmICh0eXBlID09IEhVQl9JTklUKSB7CisJCQlkZWxheSA9IGh1Yl9wb3dlcl9vbihodWIsIGZhbHNlKTsKKwkJCVBSRVBBUkVfREVMQVlFRF9XT1JLKCZodWItPmluaXRfd29yaywgaHViX2luaXRfZnVuYzIpOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZodWItPmluaXRfd29yaywKKwkJCQkJbXNlY3NfdG9famlmZmllcyhkZWxheSkpOworCQkJcmV0dXJuOwkJLyogQ29udGludWVzIGF0IGluaXQyOiBiZWxvdyAqLworCQl9IGVsc2UgeworCQkJaHViX3Bvd2VyX29uKGh1YiwgdHJ1ZSk7CisJCX0KKwl9CisgaW5pdDI6CiAKIAkvKiBDaGVjayBlYWNoIHBvcnQgYW5kIHNldCBodWItPmNoYW5nZV9iaXRzIHRvIGxldCBraHViZCBrbm93CiAJICogd2hpY2ggcG9ydHMgbmVlZCBhdHRlbnRpb24uCkBAIC02OTIsOSArNzQzLDIwIEBACiAJICogSWYgYW55IHBvcnQtc3RhdHVzIGNoYW5nZXMgZG8gb2NjdXIgZHVyaW5nIHRoaXMgZGVsYXksIGtodWJkCiAJICogd2lsbCBzZWUgdGhlbSBsYXRlciBhbmQgaGFuZGxlIHRoZW0gbm9ybWFsbHkuCiAJICovCi0JaWYgKG5lZWRfZGVib3VuY2VfZGVsYXkpCi0JCW1zbGVlcChIVUJfREVCT1VOQ0VfU1RBQkxFKTsKKwlpZiAobmVlZF9kZWJvdW5jZV9kZWxheSkgeworCQlkZWxheSA9IEhVQl9ERUJPVU5DRV9TVEFCTEU7CiAKKwkJLyogRG9uJ3QgZG8gYSBsb25nIHNsZWVwIGluc2lkZSBhIHdvcmtxdWV1ZSByb3V0aW5lICovCisJCWlmICh0eXBlID09IEhVQl9JTklUMikgeworCQkJUFJFUEFSRV9ERUxBWUVEX1dPUksoJmh1Yi0+aW5pdF93b3JrLCBodWJfaW5pdF9mdW5jMyk7CisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmh1Yi0+aW5pdF93b3JrLAorCQkJCQltc2Vjc190b19qaWZmaWVzKGRlbGF5KSk7CisJCQlyZXR1cm47CQkvKiBDb250aW51ZXMgYXQgaW5pdDM6IGJlbG93ICovCisJCX0gZWxzZSB7CisJCQltc2xlZXAoZGVsYXkpOworCQl9CisJfQorIGluaXQzOgogCWh1Yi0+cXVpZXNjaW5nID0gMDsKIAogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGh1Yi0+dXJiLCBHRlBfTk9JTyk7CkBAIC03MDcsNiArNzY5LDIxIEBACiAJa2lja19raHViZChodWIpOwogfQogCisvKiBJbXBsZW1lbnQgdGhlIGNvbnRpbnVhdGlvbnMgZm9yIHRoZSBkZWxheXMgYWJvdmUgKi8KK3N0YXRpYyB2b2lkIGh1Yl9pbml0X2Z1bmMyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCit7CisJc3RydWN0IHVzYl9odWIgKmh1YiA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IHVzYl9odWIsIGluaXRfd29yay53b3JrKTsKKworCWh1Yl9hY3RpdmF0ZShodWIsIEhVQl9JTklUMik7Cit9CisKK3N0YXRpYyB2b2lkIGh1Yl9pbml0X2Z1bmMzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCit7CisJc3RydWN0IHVzYl9odWIgKmh1YiA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IHVzYl9odWIsIGluaXRfd29yay53b3JrKTsKKworCWh1Yl9hY3RpdmF0ZShodWIsIEhVQl9JTklUMyk7Cit9CisKIGVudW0gaHViX3F1aWVzY2luZ190eXBlIHsKIAlIVUJfRElTQ09OTkVDVCwgSFVCX1BSRV9SRVNFVCwgSFVCX1NVU1BFTkQKIH07CkBAIC03MTYsNiArNzkzLDggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKIAlpbnQgaTsKIAorCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaHViLT5pbml0X3dvcmspOworCiAJLyoga2h1YmQgYW5kIHJlbGF0ZWQgYWN0aXZpdHkgd29uJ3QgcmUtdHJpZ2dlciAqLwogCWh1Yi0+cXVpZXNjaW5nID0gMTsKIApAQCAtMTA5OSw2ICsxMTc4LDcgQEAKIAlodWItPmludGZkZXYgPSAmaW50Zi0+ZGV2OwogCWh1Yi0+aGRldiA9IGhkZXY7CiAJSU5JVF9ERUxBWUVEX1dPUksoJmh1Yi0+bGVkcywgbGVkX3dvcmspOworCUlOSVRfREVMQVlFRF9XT1JLKCZodWItPmluaXRfd29yaywgTlVMTCk7CiAJdXNiX2dldF9pbnRmKGludGYpOwogCiAJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgaHViKTsKQEAgLTI0NjcsNyArMjU0Nyw3IEBACiAJCQkJCVVTQl9SRVFfR0VUX0RFU0NSSVBUT1IsIFVTQl9ESVJfSU4sCiAJCQkJCVVTQl9EVF9ERVZJQ0UgPDwgOCwgMCwKIAkJCQkJYnVmLCBHRVRfREVTQ1JJUFRPUl9CVUZTSVpFLAotCQkJCQlVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJCQkJCWluaXRpYWxfZGVzY3JpcHRvcl90aW1lb3V0KTsKIAkJCQlzd2l0Y2ggKGJ1Zi0+Yk1heFBhY2tldFNpemUwKSB7CiAJCQkJY2FzZSA4OiBjYXNlIDE2OiBjYXNlIDMyOiBjYXNlIDY0OiBjYXNlIDI1NToKIAkJCQkJaWYgKGJ1Zi0+YkRlc2NyaXB0b3JUeXBlID09CkBAIC0zMDM1LDcgKzMxMTUsNyBAQAogCQkJCQlpKTsKIAkJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaGRldiwgaSwKIAkJCQkJVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVCk7Ci0JCQkJaHViX3Bvd2VyX29uKGh1Yik7CisJCQkJaHViX3Bvd2VyX29uKGh1YiwgdHJ1ZSk7CiAJCQl9CiAKIAkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX1JFU0VUKSB7CkBAIC0zMDcwLDcgKzMxNTAsNyBAQAogCQkJCWRldl9kYmcgKGh1Yl9kZXYsICJvdmVyY3VycmVudCBjaGFuZ2VcbiIpOwogCQkJCW1zbGVlcCg1MDApOwkvKiBDb29sIGRvd24gKi8KIAkJCQljbGVhcl9odWJfZmVhdHVyZShoZGV2LCBDX0hVQl9PVkVSX0NVUlJFTlQpOwotICAgICAgICAgICAgICAgICAgICAgICAgCWh1Yl9wb3dlcl9vbihodWIpOworICAgICAgICAgICAgICAgICAgICAgICAgCWh1Yl9wb3dlcl9vbihodWIsIHRydWUpOwogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwppbmRleCBkYjQxMGU5Li45NDYzMjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2RldnVpZCwgImRldnVpZD0ldSJ9LAogCXtPcHRfZGV2Z2lkLCAiZGV2Z2lkPSV1In0sCiAJe09wdF9kZXZtb2RlLCAiZGV2bW9kZT0lbyJ9LApAQCAtMTgwLDggKzE4MCw4IEBACiAJCQlsaXN0bW9kZSA9IG9wdGlvbiAmIFNfSVJXWFVHTzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyKCJ1c2JmczogdW5yZWNvZ25pc2VkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgotCQkJICAgICJvciBtaXNzaW5nIHZhbHVlXG4iLCBwKTsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiZnM6IHVucmVjb2duaXNlZCBtb3VudCBvcHRpb24gIgorCQkJICAgICAgICJcIiVzXCIgb3IgbWlzc2luZyB2YWx1ZVxuIiwgcCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTI0MCw3ICsyNDAsOSBAQAogCQkJCXVwZGF0ZV9zcGVjaWFsKGJ1cyk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCXdhcm4oIlVua25vd24gbm9kZSAlcyBtb2RlICV4IGZvdW5kIG9uIHJlbW91bnQhXG4iLGJ1cy0+ZF9uYW1lLm5hbWUsYnVzLT5kX2lub2RlLT5pX21vZGUpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYmZzOiBVbmtub3duIG5vZGUgJXMgIgorCQkJCSAgICAgICAibW9kZSAleCBmb3VuZCBvbiByZW1vdW50IVxuIiwKKwkJCQkgICAgICAgYnVzLT5kX25hbWUubmFtZSwgYnVzLT5kX2lub2RlLT5pX21vZGUpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0yNTksNyArMjYxLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAocGFyc2Vfb3B0aW9ucyhzYiwgZGF0YSkpIHsKLQkJd2FybigidXNiZnM6IG1vdW50IHBhcmFtZXRlciBlcnJvcjoiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiZnM6IG1vdW50IHBhcmFtZXRlciBlcnJvci5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU5OSw3ICs2MDEsNyBAQAogCS8qIGNyZWF0ZSB0aGUgZGV2aWNlcyBzcGVjaWFsIGZpbGUgKi8KIAlyZXR2YWwgPSBzaW1wbGVfcGluX2ZzKCZ1c2JfZnNfdHlwZSwgJnVzYmZzX21vdW50LCAmdXNiZnNfbW91bnRfY291bnQpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyICgiVW5hYmxlIHRvIGdldCB1c2JmcyBtb3VudCIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgdXNiZnMgbW91bnRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC02MTEsNyArNjEzLDcgQEAKIAkJCQkJICAgICAgIE5VTEwsICZ1c2Jmc19kZXZpY2VzX2ZvcHMsCiAJCQkJCSAgICAgICBsaXN0dWlkLCBsaXN0Z2lkKTsKIAlpZiAoZGV2aWNlc191c2Jmc19kZW50cnkgPT0gTlVMTCkgewotCQllcnIgKCJVbmFibGUgdG8gY3JlYXRlIGRldmljZXMgdXNiZnMgZmlsZSIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgZGV2aWNlcyB1c2JmcyBmaWxlXG4iKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBlcnJvcl9jbGVhbl9tb3VudHM7CiAJfQpAQCAtNjYzLDcgKzY2NSw3IEBACiAJYnVzLT51c2Jmc19kZW50cnkgPSBmc19jcmVhdGVfZmlsZSAobmFtZSwgYnVzbW9kZSB8IFNfSUZESVIsIHBhcmVudCwKIAkJCQkJICAgIGJ1cywgTlVMTCwgYnVzdWlkLCBidXNnaWQpOwogCWlmIChidXMtPnVzYmZzX2RlbnRyeSA9PSBOVUxMKSB7Ci0JCWVyciAoImVycm9yIGNyZWF0aW5nIHVzYmZzIGJ1cyBlbnRyeSIpOworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNyZWF0aW5nIHVzYmZzIGJ1cyBlbnRyeVxuIik7CiAJCXJldHVybjsKIAl9CiB9CkBAIC02OTQsNyArNjk2LDcgQEAKIAkJCQkJICAgICZ1c2JkZXZfZmlsZV9vcGVyYXRpb25zLAogCQkJCQkgICAgZGV2dWlkLCBkZXZnaWQpOwogCWlmIChkZXYtPnVzYmZzX2RlbnRyeSA9PSBOVUxMKSB7Ci0JCWVyciAoImVycm9yIGNyZWF0aW5nIHVzYmZzIGRldmljZSBlbnRyeSIpOworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNyZWF0aW5nIHVzYmZzIGRldmljZSBlbnRyeVxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggMjg2YjQ0My4uODg3NzM4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTEyMDQsNyArMTIwNCw4IEBACiAKIAlhbHQgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaWZhY2UsIGFsdGVybmF0ZSk7CiAJaWYgKCFhbHQpIHsKLQkJd2Fybigic2VsZWN0aW5nIGludmFsaWQgYWx0c2V0dGluZyAlZCIsIGFsdGVybmF0ZSk7CisJCWRldl93YXJuKCZkZXYtPmRldiwgInNlbGVjdGluZyBpbnZhbGlkIGFsdHNldHRpbmcgJWQiLAorCQkJIGFsdGVybmF0ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCmluZGV4IDVlMWY1ZDUuLmY2NmZiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKQEAgLTc0Myw2ICs3NDMsMjkgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihtb2RhbGlhcywgU19JUlVHTywgc2hvd19tb2RhbGlhcywgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3VwcG9ydHNfYXV0b3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWludCByZXQ7CisKKwlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCisJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOworCS8qIERldmljZXMgd2lsbCBiZSBhdXRvc3VzcGVuZGVkIGV2ZW4gd2hlbiBhbiBpbnRlcmZhY2UgaXNuJ3QgY2xhaW1lZCAqLworCWlmICghaW50Zi0+ZGV2LmRyaXZlciB8fAorCQkJdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKS0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpCisJCXJldCA9IHNwcmludGYoYnVmLCAiJXVcbiIsIDEpOworCWVsc2UKKwkJcmV0ID0gc3ByaW50ZihidWYsICIldVxuIiwgMCk7CisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CisKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIERFVklDRV9BVFRSKHN1cHBvcnRzX2F1dG9zdXNwZW5kLCBTX0lSVUdPLCBzaG93X3N1cHBvcnRzX2F1dG9zdXNwZW5kLCBOVUxMKTsKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmludGZfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfYkludGVyZmFjZU51bWJlci5hdHRyLAogCSZkZXZfYXR0cl9iQWx0ZXJuYXRlU2V0dGluZy5hdHRyLApAQCAtNzUxLDYgKzc3NCw3IEBACiAJJmRldl9hdHRyX2JJbnRlcmZhY2VTdWJDbGFzcy5hdHRyLAogCSZkZXZfYXR0cl9iSW50ZXJmYWNlUHJvdG9jb2wuYXR0ciwKIAkmZGV2X2F0dHJfbW9kYWxpYXMuYXR0ciwKKwkmZGV2X2F0dHJfc3VwcG9ydHNfYXV0b3N1c3BlbmQuYXR0ciwKIAlOVUxMLAogfTsKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGludGZfYXR0cl9ncnAgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwppbmRleCA0NzExMWU4Li5mMjYzODAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKQEAgLTEwLDYgKzEwLDggQEAKIAogI2RlZmluZSB0b191cmIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1cmIsIGtyZWYpCiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodXNiX3JlamVjdF9sb2NrKTsKKwogc3RhdGljIHZvaWQgdXJiX2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IHVyYiAqdXJiID0gdG9fdXJiKGtyZWYpOwpAQCAtNjgsNyArNzAsNyBAQAogCQlpc29fcGFja2V0cyAqIHNpemVvZihzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciksCiAJCW1lbV9mbGFncyk7CiAJaWYgKCF1cmIpIHsKLQkJZXJyKCJhbGxvY191cmI6IGttYWxsb2MgZmFpbGVkIik7CisJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NfdXJiOiBrbWFsbG9jIGZhaWxlZFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAl1c2JfaW5pdF91cmIodXJiKTsKQEAgLTEyNyw2ICsxMjksMTMgQEAKIAl1c2JfZ2V0X3VyYih1cmIpOwogCWxpc3RfYWRkX3RhaWwoJnVyYi0+YW5jaG9yX2xpc3QsICZhbmNob3ItPnVyYl9saXN0KTsKIAl1cmItPmFuY2hvciA9IGFuY2hvcjsKKworCWlmICh1bmxpa2VseShhbmNob3ItPnBvaXNvbmVkKSkgeworCQlzcGluX2xvY2soJnVzYl9yZWplY3RfbG9jayk7CisJCXVyYi0+cmVqZWN0Kys7CisJCXNwaW5fdW5sb2NrKCZ1c2JfcmVqZWN0X2xvY2spOworCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2FuY2hvcl91cmIpOwpAQCAtMzk4LDcgKzQwNyw3IEBACiAKIAkvKiBmYWlsIGlmIHN1Ym1pdHRlciBnYXZlIGJvZ3VzIGZsYWdzICovCiAJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgIT0gb3JpZ19mbGFncykgewotCQllcnIoIkJPR1VTIHVyYiBmbGFncywgJXggLS0+ICV4IiwKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCT0dVUyB1cmIgZmxhZ3MsICV4IC0tPiAleFxuIiwKIAkJCW9yaWdfZmxhZ3MsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01NDQsMjUgKzU1Myw3MCBAQAogICovCiB2b2lkIHVzYl9raWxsX3VyYihzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RhdGljIERFRklORV9NVVRFWChyZWplY3RfbXV0ZXgpOwotCiAJbWlnaHRfc2xlZXAoKTsKIAlpZiAoISh1cmIgJiYgdXJiLT5kZXYgJiYgdXJiLT5lcCkpCiAJCXJldHVybjsKLQltdXRleF9sb2NrKCZyZWplY3RfbXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJnVzYl9yZWplY3RfbG9jayk7CiAJKyt1cmItPnJlamVjdDsKLQltdXRleF91bmxvY2soJnJlamVjdF9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1c2JfcmVqZWN0X2xvY2spOwogCiAJdXNiX2hjZF91bmxpbmtfdXJiKHVyYiwgLUVOT0VOVCk7CiAJd2FpdF9ldmVudCh1c2Jfa2lsbF91cmJfcXVldWUsIGF0b21pY19yZWFkKCZ1cmItPnVzZV9jb3VudCkgPT0gMCk7CiAKLQltdXRleF9sb2NrKCZyZWplY3RfbXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJnVzYl9yZWplY3RfbG9jayk7CiAJLS11cmItPnJlamVjdDsKLQltdXRleF91bmxvY2soJnJlamVjdF9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1c2JfcmVqZWN0X2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2tpbGxfdXJiKTsKIAogLyoqCisgKiB1c2JfcG9pc29uX3VyYiAtIHJlbGlhYmx5IGtpbGwgYSB0cmFuc2ZlciBhbmQgcHJldmVudCBmdXJ0aGVyIHVzZSBvZiBhbiBVUkIKKyAqIEB1cmI6IHBvaW50ZXIgdG8gVVJCIGRlc2NyaWJpbmcgYSBwcmV2aW91c2x5IHN1Ym1pdHRlZCByZXF1ZXN0LAorICoJbWF5IGJlIE5VTEwKKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuY2VscyBhbiBpbi1wcm9ncmVzcyByZXF1ZXN0LiAgSXQgaXMgZ3VhcmFudGVlZCB0aGF0CisgKiB1cG9uIHJldHVybiBhbGwgY29tcGxldGlvbiBoYW5kbGVycyB3aWxsIGhhdmUgZmluaXNoZWQgYW5kIHRoZSBVUkIKKyAqIHdpbGwgYmUgdG90YWxseSBpZGxlIGFuZCBjYW5ub3QgYmUgcmV1c2VkLiAgVGhlc2UgZmVhdHVyZXMgbWFrZQorICogdGhpcyBhbiBpZGVhbCB3YXkgdG8gc3RvcCBJL08gaW4gYSBkaXNjb25uZWN0KCkgY2FsbGJhY2suCisgKiBJZiB0aGUgcmVxdWVzdCBoYXMgbm90IGFscmVhZHkgZmluaXNoZWQgb3IgYmVlbiB1bmxpbmtlZAorICogdGhlIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsIHNlZSB1cmItPnN0YXR1cyA9PSAtRU5PRU5ULgorICoKKyAqIEFmdGVyIGFuZCB3aGlsZSB0aGUgcm91dGluZSBydW5zLCBhdHRlbXB0cyB0byByZXN1Ym1pdCB0aGUgVVJCIHdpbGwgZmFpbAorICogd2l0aCBlcnJvciAtRVBFUk0uICBUaHVzIGV2ZW4gaWYgdGhlIFVSQidzIGNvbXBsZXRpb24gaGFuZGxlciBhbHdheXMKKyAqIHRyaWVzIHRvIHJlc3VibWl0LCBpdCB3aWxsIG5vdCBzdWNjZWVkIGFuZCB0aGUgVVJCIHdpbGwgYmVjb21lIGlkbGUuCisgKgorICogVGhpcyByb3V0aW5lIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCAoc3VjaCBhcyBhIGJvdHRvbQorICogaGFsZiBvciBhIGNvbXBsZXRpb24gaGFuZGxlciksIG9yIHdoZW4gaG9sZGluZyBhIHNwaW5sb2NrLCBvciBpbiBvdGhlcgorICogc2l0dWF0aW9ucyB3aGVyZSB0aGUgY2FsbGVyIGNhbid0IHNjaGVkdWxlKCkuCisgKi8KK3ZvaWQgdXNiX3BvaXNvbl91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKCEodXJiICYmIHVyYi0+ZGV2ICYmIHVyYi0+ZXApKQorCQlyZXR1cm47CisJc3Bpbl9sb2NrX2lycSgmdXNiX3JlamVjdF9sb2NrKTsKKwkrK3VyYi0+cmVqZWN0OworCXNwaW5fdW5sb2NrX2lycSgmdXNiX3JlamVjdF9sb2NrKTsKKworCXVzYl9oY2RfdW5saW5rX3VyYih1cmIsIC1FTk9FTlQpOworCXdhaXRfZXZlbnQodXNiX2tpbGxfdXJiX3F1ZXVlLCBhdG9taWNfcmVhZCgmdXJiLT51c2VfY291bnQpID09IDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3BvaXNvbl91cmIpOworCit2b2lkIHVzYl91bnBvaXNvbl91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXVyYikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYl9yZWplY3RfbG9jaywgZmxhZ3MpOworCS0tdXJiLT5yZWplY3Q7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiX3JlamVjdF9sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfdW5wb2lzb25fdXJiKTsKKworLyoqCiAgKiB1c2Jfa2lsbF9hbmNob3JlZF91cmJzIC0gY2FuY2VsIHRyYW5zZmVyIHJlcXVlc3RzIGVuIG1hc3NlCiAgKiBAYW5jaG9yOiBhbmNob3IgdGhlIHJlcXVlc3RzIGFyZSBib3VuZCB0bwogICoKQEAgLTU4OSw2ICs2NDMsMzUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9raWxsX2FuY2hvcmVkX3VyYnMpOwogCisKKy8qKgorICogdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzIC0gY2Vhc2UgYWxsIHRyYWZmaWMgZnJvbSBhbiBhbmNob3IKKyAqIEBhbmNob3I6IGFuY2hvciB0aGUgcmVxdWVzdHMgYXJlIGJvdW5kIHRvCisgKgorICogdGhpcyBhbGxvd3MgYWxsIG91dHN0YW5kaW5nIFVSQnMgdG8gYmUgcG9pc29uZWQgc3RhcnRpbmcKKyAqIGZyb20gdGhlIGJhY2sgb2YgdGhlIHF1ZXVlLiBOZXdseSBhZGRlZCBVUkJzIHdpbGwgYWxzbyBiZQorICogcG9pc29uZWQKKyAqLwordm9pZCB1c2JfcG9pc29uX2FuY2hvcmVkX3VyYnMoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKK3sKKwlzdHJ1Y3QgdXJiICp2aWN0aW07CisKKwlzcGluX2xvY2tfaXJxKCZhbmNob3ItPmxvY2spOworCWFuY2hvci0+cG9pc29uZWQgPSAxOworCXdoaWxlICghbGlzdF9lbXB0eSgmYW5jaG9yLT51cmJfbGlzdCkpIHsKKwkJdmljdGltID0gbGlzdF9lbnRyeShhbmNob3ItPnVyYl9saXN0LnByZXYsIHN0cnVjdCB1cmIsCisJCQkJICAgIGFuY2hvcl9saXN0KTsKKwkJLyogd2UgbXVzdCBtYWtlIHN1cmUgdGhlIFVSQiBpc24ndCBmcmVlZCBiZWZvcmUgd2Uga2lsbCBpdCovCisJCXVzYl9nZXRfdXJiKHZpY3RpbSk7CisJCXNwaW5fdW5sb2NrX2lycSgmYW5jaG9yLT5sb2NrKTsKKwkJLyogdGhpcyB3aWxsIHVuYW5jaG9yIHRoZSBVUkIgKi8KKwkJdXNiX3BvaXNvbl91cmIodmljdGltKTsKKwkJdXNiX3B1dF91cmIodmljdGltKTsKKwkJc3Bpbl9sb2NrX2lycSgmYW5jaG9yLT5sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZhbmNob3ItPmxvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKTsKIC8qKgogICogdXNiX3VubGlua19hbmNob3JlZF91cmJzIC0gYXN5bmNocm9ub3VzbHkgY2FuY2VsIHRyYW5zZmVyIHJlcXVlc3RzIGVuIG1hc3NlCiAgKiBAYW5jaG9yOiBhbmNob3IgdGhlIHJlcXVlc3RzIGFyZSBib3VuZCB0bwpAQCAtNjMzLDMgKzcxNiw3MyBAQAogCQkJCSAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfd2FpdF9hbmNob3JfZW1wdHlfdGltZW91dCk7CisKKy8qKgorICogdXNiX2dldF9mcm9tX2FuY2hvciAtIGdldCBhbiBhbmNob3IncyBvbGRlc3QgdXJiCisgKiBAYW5jaG9yOiB0aGUgYW5jaG9yIHdob3NlIHVyYiB5b3Ugd2FudAorICoKKyAqIHRoaXMgd2lsbCB0YWtlIHRoZSBvbGRlc3QgdXJiIGZyb20gYW4gYW5jaG9yLAorICogdW5hbmNob3IgYW5kIHJldHVybiBpdAorICovCitzdHJ1Y3QgdXJiICp1c2JfZ2V0X2Zyb21fYW5jaG9yKHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IpCit7CisJc3RydWN0IHVyYiAqdmljdGltOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZhbmNob3ItPnVyYl9saXN0KSkgeworCQl2aWN0aW0gPSBsaXN0X2VudHJ5KGFuY2hvci0+dXJiX2xpc3QubmV4dCwgc3RydWN0IHVyYiwKKwkJCQkgICAgYW5jaG9yX2xpc3QpOworCQl1c2JfZ2V0X3VyYih2aWN0aW0pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKKwkJdXNiX3VuYW5jaG9yX3VyYih2aWN0aW0pOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworCQl2aWN0aW0gPSBOVUxMOworCX0KKworCXJldHVybiB2aWN0aW07Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9nZXRfZnJvbV9hbmNob3IpOworCisvKioKKyAqIHVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMgLSB1bmFuY2hvciBhbGwgYW4gYW5jaG9yJ3MgdXJicworICogQGFuY2hvcjogdGhlIGFuY2hvciB3aG9zZSB1cmJzIHlvdSB3YW50IHRvIHVuYW5jaG9yCisgKgorICogdXNlIHRoaXMgdG8gZ2V0IHJpZCBvZiBhbGwgYW4gYW5jaG9yJ3MgdXJicworICovCit2b2lkIHVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKK3sKKwlzdHJ1Y3QgdXJiICp2aWN0aW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmFuY2hvci0+dXJiX2xpc3QpKSB7CisJCXZpY3RpbSA9IGxpc3RfZW50cnkoYW5jaG9yLT51cmJfbGlzdC5wcmV2LCBzdHJ1Y3QgdXJiLAorCQkJCSAgICBhbmNob3JfbGlzdCk7CisJCXVzYl9nZXRfdXJiKHZpY3RpbSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworCQkvKiB0aGlzIG1heSBmcmVlIHRoZSBVUkIgKi8KKwkJdXNiX3VuYW5jaG9yX3VyYih2aWN0aW0pOworCQl1c2JfcHV0X3VyYih2aWN0aW0pOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2N1dHRsZV9hbmNob3JlZF91cmJzKTsKKworLyoqCisgKiB1c2JfYW5jaG9yX2VtcHR5IC0gaXMgYW4gYW5jaG9yIGVtcHR5CisgKiBAYW5jaG9yOiB0aGUgYW5jaG9yIHlvdSB3YW50IHRvIHF1ZXJ5CisgKgorICogcmV0dXJucyAxIGlmIHRoZSBhbmNob3IgaGFzIG5vIHVyYnMgYXNzb2NpYXRlZCB3aXRoIGl0CisgKi8KK2ludCB1c2JfYW5jaG9yX2VtcHR5KHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IpCit7CisJcmV0dXJuIGxpc3RfZW1wdHkoJmFuY2hvci0+dXJiX2xpc3QpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYW5jaG9yX2VtcHR5KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCBhY2M5NWIyLi5kZDRjZDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtNDUsNyArNDUsNyBAQAogCiBjb25maWcgVVNCX0dBREdFVF9ERUJVRwogCWJvb2xlYW4gIkRlYnVnZ2luZyBtZXNzYWdlcyAoREVWRUxPUE1FTlQpIgotCWRlcGVuZHMgb24gVVNCX0dBREdFVCAmJiBERUJVR19LRVJORUwKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCWhlbHAKIAkgICBNYW55IGNvbnRyb2xsZXIgYW5kIGdhZGdldCBkcml2ZXJzIHdpbGwgcHJpbnQgc29tZSBkZWJ1Z2dpbmcKIAkgICBtZXNzYWdlcyBpZiB5b3UgdXNlIHRoaXMgb3B0aW9uIHRvIGFzayBmb3IgdGhvc2UgbWVzc2FnZXMuCkBAIC01OSw3ICs1OSw3IEBACiAKIGNvbmZpZyBVU0JfR0FER0VUX0RFQlVHX0ZJTEVTCiAJYm9vbGVhbiAiRGVidWdnaW5nIGluZm9ybWF0aW9uIGZpbGVzIChERVZFTE9QTUVOVCkiCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUICYmIFBST0NfRlMKKwlkZXBlbmRzIG9uIFBST0NfRlMKIAloZWxwCiAJICAgU29tZSBvZiB0aGUgZHJpdmVycyBpbiB0aGUgImdhZGdldCIgZnJhbWV3b3JrIGNhbiBleHBvc2UKIAkgICBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gZmlsZXMgc3VjaCBhcyAvcHJvYy9kcml2ZXIvdWRjCkBAIC03MCw3ICs3MCw3IEBACiAKIGNvbmZpZyBVU0JfR0FER0VUX0RFQlVHX0ZTCiAJYm9vbGVhbiAiRGVidWdnaW5nIGluZm9ybWF0aW9uIGZpbGVzIGluIGRlYnVnZnMgKERFVkVMT1BNRU5UKSIKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVQgJiYgREVCVUdfRlMKKwlkZXBlbmRzIG9uIERFQlVHX0ZTCiAJaGVscAogCSAgIFNvbWUgb2YgdGhlIGRyaXZlcnMgaW4gdGhlICJnYWRnZXQiIGZyYW1ld29yayBjYW4gZXhwb3NlCiAJICAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIGZpbGVzIHVuZGVyIC9zeXMva2VybmVsL2RlYnVnLy4KQEAgLTc5LDEyICs3OSwzNiBAQAogCSAgIEVuYWJsZSB0aGVzZSBmaWxlcyBieSBjaG9vc2luZyAiWSIgaGVyZS4gIElmIGluIGRvdWJ0LCBvcgogCSAgIHRvIGNvbnNlcnZlIGtlcm5lbCBtZW1vcnksIHNheSAiTiIuCiAKK2NvbmZpZyBVU0JfR0FER0VUX1ZCVVNfRFJBVworCWludCAiTWF4aW11bSBWQlVTIFBvd2VyIHVzYWdlICgyLTUwMCBtQSkiCisJcmFuZ2UgMiA1MDAKKwlkZWZhdWx0IDIKKwloZWxwCisJICAgU29tZSBkZXZpY2VzIG5lZWQgdG8gZHJhdyBwb3dlciBmcm9tIFVTQiB3aGVuIHRoZXkgYXJlCisJICAgY29uZmlndXJlZCwgcGVyaGFwcyB0byBvcGVyYXRlIGNpcmN1aXRyeSBvciB0byByZWNoYXJnZQorCSAgIGJhdHRlcmllcy4gIFRoaXMgaXMgaW4gYWRkaXRpb24gdG8gYW55IGxvY2FsIHBvd2VyIHN1cHBseSwKKwkgICBzdWNoIGFzIGFuIEFDIGFkYXB0ZXIgb3IgYmF0dGVyaWVzLgorCisJICAgRW50ZXIgdGhlIG1heGltdW0gcG93ZXIgeW91ciBkZXZpY2UgZHJhd3MgdGhyb3VnaCBVU0IsIGluCisJICAgbWlsbGlBbXBlcmVzLiAgVGhlIHBlcm1pdHRlZCByYW5nZSBvZiB2YWx1ZXMgaXMgMiAtIDUwMCBtQTsKKwkgICAwIG1BIHdvdWxkIGJlIGxlZ2FsLCBidXQgY2FuIG1ha2Ugc29tZSBob3N0cyBtaXNiZWhhdmUuCisKKwkgICBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBleGNlcHQgZm9yIHN5c3RlbS1zcGVjaWZpYyBnYWRnZXQKKwkgICBkcml2ZXJzIHRoYXQgaGF2ZSBtb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uLgorCiBjb25maWcJVVNCX0dBREdFVF9TRUxFQ1RFRAogCWJvb2xlYW4KIAogIwogIyBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIFN1cHBvcnQKICMKKyMgVGhlIG9yZGVyIGhlcmUgaXMgYWxwaGFiZXRpY2FsLCBleGNlcHQgdGhhdCBpbnRlZ3JhdGVkIGNvbnRyb2xsZXJzIGdvCisjIGJlZm9yZSBkaXNjcmV0ZSBvbmVzIHNvIHRoZXkgd2lsbCBiZSB0aGUgaW5pdGlhbC9kZWZhdWx0IHZhbHVlOgorIyAgIC0gaW50ZWdyYXRlZC9TT0MgY29udHJvbGxlcnMgZmlyc3QKKyMgICAtIGxpY2Vuc2VkIElQIHVzZWQgaW4gYm90aCBTT0MgYW5kIGRpc2NyZXRlIHZlcnNpb25zCisjICAgLSBkaXNjcmV0ZSBvbmVzIChpbmNsdWRpbmcgYWxsIFBDSS1vbmx5IGNvbnRyb2xsZXJzKQorIyAgIC0gZGVidWcvZHVtbXkgZ2FkZ2V0K2hjZCBpcyBsYXN0LgorIwogY2hvaWNlCiAJcHJvbXB0ICJVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIgogCWRlcGVuZHMgb24gVVNCX0dBREdFVApAQCAtOTQsMjYgKzExOCwyNyBAQAogCSAgIE1hbnkgY29udHJvbGxlciBkcml2ZXJzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYzsgdGhlc2UKIAkgICBvZnRlbiBuZWVkIGJvYXJkLXNwZWNpZmljIGhvb2tzLgogCi1jb25maWcgVVNCX0dBREdFVF9BTUQ1NTM2VURDCi0JYm9vbGVhbiAiQU1ENTUzNiBVREMiCi0JZGVwZW5kcyBvbiBQQ0kKLQlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKKyMKKyMgSW50ZWdyYXRlZCBjb250cm9sbGVycworIworCitjb25maWcgVVNCX0dBREdFVF9BVDkxCisJYm9vbGVhbiAiQXRtZWwgQVQ5MSBVU0IgRGV2aWNlIFBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTEgJiYgIUFSQ0hfQVQ5MVNBTTlSTCAmJiAhQVJDSF9BVDkxQ0FQOQorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAJaGVscAotCSAgIFRoZSBBTUQ1NTM2IFVEQyBpcyBwYXJ0IG9mIHRoZSBBTUQgR2VvZGUgQ1M1NTM2LCBhbiB4ODYgc291dGhicmlkZ2UuCi0JICAgSXQgaXMgYSBVU0IgSGlnaHNwZWVkIERNQSBjYXBhYmxlIFVTQiBkZXZpY2UgY29udHJvbGxlci4gQmVzaWRlIGVwMAotCSAgIGl0IHByb3ZpZGVzIDQgSU4gYW5kIDQgT1VUIGVuZHBvaW50cyAoYnVsayBvciBpbnRlcnJ1cHQgdHlwZSkuCi0JICAgVGhlIFVEQyBwb3J0IHN1cHBvcnRzIE9URyBvcGVyYXRpb24sIGFuZCBtYXkgYmUgdXNlZCBhcyBhIGhvc3QgcG9ydAotCSAgIGlmIGl0J3Mgbm90IGJlaW5nIHVzZWQgdG8gaW1wbGVtZW50IHBlcmlwaGVyYWwgb3IgT1RHIHJvbGVzLgorCSAgIE1hbnkgQXRtZWwgQVQ5MSBwcm9jZXNzb3JzIChzdWNoIGFzIHRoZSBBVDkxUk0yMDAwKSBoYXZlIGEKKwkgICBmdWxsIHNwZWVkIFVTQiBEZXZpY2UgUG9ydCB3aXRoIHN1cHBvcnQgZm9yIGZpdmUgY29uZmlndXJhYmxlCisJICAgZW5kcG9pbnRzIChwbHVzIGVuZHBvaW50IHplcm8pLgogCiAJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKLQkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiYW1kNTUzNnVkYyIgYW5kIGZvcmNlIGFsbAorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJhdDkxX3VkYyIgYW5kIGZvcmNlIGFsbAogCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgogCi1jb25maWcgVVNCX0FNRDU1MzZVREMKK2NvbmZpZyBVU0JfQVQ5MQogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUX0FNRDU1MzZVREMKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfQVQ5MQogCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAKIGNvbmZpZyBVU0JfR0FER0VUX0FUTUVMX1VTQkEKIAlib29sZWFuICJBdG1lbCBVU0JBIgpAQCAtMTUwLDI4ICsxNzUsNTAgQEAKIAlkZWZhdWx0IFVTQl9HQURHRVQKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCi1jb25maWcgVVNCX0dBREdFVF9ORVQyMjgwCi0JYm9vbGVhbiAiTmV0Q2hpcCAyMjh4IgotCWRlcGVuZHMgb24gUENJCi0Jc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECitjb25maWcgVVNCX0dBREdFVF9MSDdBNDBYCisJYm9vbGVhbiAiTEg3QTQwWCIKKwlkZXBlbmRzIG9uIEFSQ0hfTEg3QTQwWAogCWhlbHAKLQkgICBOZXRDaGlwIDIyODAgLyAyMjgyIGlzIGEgUENJIGJhc2VkIFVTQiBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgd2hpY2gKLQkgICBzdXBwb3J0cyBib3RoIGZ1bGwgYW5kIGhpZ2ggc3BlZWQgVVNCIDIuMCBkYXRhIHRyYW5zZmVycy4gIAotCSAgIAotCSAgIEl0IGhhcyBzaXggY29uZmlndXJhYmxlIGVuZHBvaW50cywgYXMgd2VsbCBhcyBlbmRwb2ludCB6ZXJvCi0JICAgKGZvciBjb250cm9sIHRyYW5zZmVycykgYW5kIHNldmVyYWwgZW5kcG9pbnRzIHdpdGggZGVkaWNhdGVkCi0JICAgZnVuY3Rpb25zLgorCSAgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIFVTQiBEZXZpY2UgQ29udHJvbGxlciBkcml2ZXIgZm9yIExIN0E0MHgKIAotCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCi0JICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgIm5ldDIyODAiIGFuZCBmb3JjZSBhbGwKLQkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KLQotY29uZmlnIFVTQl9ORVQyMjgwCitjb25maWcgVVNCX0xIN0E0MFgKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9ORVQyMjgwCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX0xIN0E0MFgKIAlkZWZhdWx0IFVTQl9HQURHRVQKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCitjb25maWcgVVNCX0dBREdFVF9PTUFQCisJYm9vbGVhbiAiT01BUCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlzZWxlY3QgSVNQMTMwMV9PTUFQIGlmIE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMgfHwgTUFDSF9PTUFQX0g0X09URworCWhlbHAKKwkgICBNYW55IFRleGFzIEluc3RydW1lbnRzIE9NQVAgcHJvY2Vzc29ycyBoYXZlIGZsZXhpYmxlIGZ1bGwKKwkgICBzcGVlZCBVU0IgZGV2aWNlIGNvbnRyb2xsZXJzLCB3aXRoIHN1cHBvcnQgZm9yIHVwIHRvIDMwCisJICAgZW5kcG9pbnRzIChwbHVzIGVuZHBvaW50IHplcm8pLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlCisJICAgY29udHJvbGxlciBpbiB0aGUgT01BUCAxNjExLCBhbmQgc2hvdWxkIHdvcmsgd2l0aCBjb250cm9sbGVycworCSAgIGluIG90aGVyIE9NQVAgcHJvY2Vzc29ycyB0b28sIGdpdmVuIG1pbm9yIHR3ZWFrcy4KKworCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgIm9tYXBfdWRjIiBhbmQgZm9yY2UgYWxsCisJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfT01BUAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX09NQVAKKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCitjb25maWcgVVNCX09URworCWJvb2xlYW4gIk9URyBTdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9PTUFQICYmIEFSQ0hfT01BUF9PVEcgJiYgVVNCX09IQ0lfSENECisJaGVscAorCSAgIFRoZSBtb3N0IG5vdGFibGUgZmVhdHVyZSBvZiBVU0IgT1RHIGlzIHN1cHBvcnQgZm9yIGEKKwkgICAiRHVhbC1Sb2xlIiBkZXZpY2UsIHdoaWNoIGNhbiBhY3QgYXMgZWl0aGVyIGEgZGV2aWNlCisJICAgb3IgYSBob3N0LiAgVGhlIGluaXRpYWwgcm9sZSBjaG9pY2UgY2FuIGJlIGNoYW5nZWQKKwkgICBsYXRlciwgd2hlbiB0d28gZHVhbC1yb2xlIGRldmljZXMgdGFsayB0byBlYWNoIG90aGVyLgorCisJICAgU2VsZWN0IHRoaXMgb25seSBpZiB5b3VyIE9NQVAgYm9hcmQgaGFzIGEgTWluaS1BQiBjb25uZWN0b3IuCisKIGNvbmZpZyBVU0JfR0FER0VUX1BYQTI1WAogCWJvb2xlYW4gIlBYQSAyNXggb3IgSVhQIDR4eCIKIAlkZXBlbmRzIG9uIChBUkNIX1BYQSAmJiBQWEEyNXgpIHx8IEFSQ0hfSVhQNFhYCkBAIC0yMDMsNiArMjUwLDYxIEBACiAJZGVmYXVsdCB5IGlmIFVTQl9FVEgKIAlkZWZhdWx0IHkgaWYgVVNCX0dfU0VSSUFMCiAKK2NvbmZpZyBVU0JfR0FER0VUX1BYQTI3WAorCWJvb2xlYW4gIlBYQSAyN3giCisJZGVwZW5kcyBvbiBBUkNIX1BYQSAmJiBQWEEyN3gKKwloZWxwCisJICAgSW50ZWwncyBQWEEgMjd4IHNlcmllcyBYU2NhbGUgQVJNIHY1VEUgcHJvY2Vzc29ycyBpbmNsdWRlCisJICAgYW4gaW50ZWdyYXRlZCBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuCisKKwkgICBJdCBoYXMgdXAgdG8gMjMgZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50IHplcm8gKGZvcgorCSAgIGNvbnRyb2wgdHJhbnNmZXJzKS4KKworCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgInB4YTI3eF91ZGMiIGFuZCBmb3JjZSBhbGwKKwkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KKworY29uZmlnIFVTQl9QWEEyN1gKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9QWEEyN1gKKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCitjb25maWcgVVNCX0dBREdFVF9TM0MyNDEwCisJYm9vbGVhbiAiUzNDMjQxMCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKKwloZWxwCisJICBTYW1zdW5nJ3MgUzNDMjQxMCBpcyBhbiBBUk0tNCBwcm9jZXNzb3Igd2l0aCBhbiBpbnRlZ3JhdGVkCisJICBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuICBJdCBoYXMgNCBjb25maWd1cmFibGUKKwkgIGVuZHBvaW50cywgYXMgd2VsbCBhcyBlbmRwb2ludCB6ZXJvIChmb3IgY29udHJvbCB0cmFuc2ZlcnMpLgorCisJICBUaGlzIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgb24gdGhlIFMzQzI0MTAsIFMzQzI0MTIsIGFuZAorCSAgUzNDMjQ0MCBwcm9jZXNzb3JzLgorCitjb25maWcgVVNCX1MzQzI0MTAKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9TM0MyNDEwCisJZGVmYXVsdCBVU0JfR0FER0VUCisJc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKKworY29uZmlnIFVTQl9TM0MyNDEwX0RFQlVHCisJYm9vbGVhbiAiUzNDMjQxMCB1ZGMgZGVidWcgbWVzc2FnZXMiCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX1MzQzI0MTAKKworIworIyBDb250cm9sbGVycyBhdmFpbGFibGUgaW4gYm90aCBpbnRlZ3JhdGVkIGFuZCBkaXNjcmV0ZSB2ZXJzaW9ucworIworCisjIG11c2IgYnVpbGRzIGluIC4uL211c2IgYWxvbmcgd2l0aCBob3N0IHN1cHBvcnQKK2NvbmZpZyBVU0JfR0FER0VUX01VU0JfSERSQworCWJvb2xlYW4gIkludmVudHJhIEhEUkMgVVNCIFBlcmlwaGVyYWwgKFRJLCAuLi4pIgorCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiAoVVNCX01VU0JfUEVSSVBIRVJBTCB8fCBVU0JfTVVTQl9PVEcpCisJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECisJc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKKwloZWxwCisJICBUaGlzIE9URy1jYXBhYmxlIHNpbGljb24gSVAgaXMgdXNlZCBpbiBkdWFsIGRlc2lnbnMgaW5jbHVkaW5nCisJICB0aGUgVEkgRGFWaW5jaSwgT01BUCAyNDN4LCBPTUFQIDM0M3gsIGFuZCBUVVNCIDYwMTAuCisKIGNvbmZpZyBVU0JfR0FER0VUX002NjU5MgogCWJvb2xlYW4gIlJlbmVzYXMgTTY2NTkyIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIiCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECkBAIC0yMzEsMjMgKzMzMyw2OSBAQAogCSAgIEhvd2V2ZXIsIHRoaXMgcHJvYmxlbSBpcyBpbXByb3ZlZCBpZiBjaGFuZ2UgYSB2YWx1ZSBvZgogCSAgIE5FVF9JUF9BTElHTiB0byA0LgogCi1jb25maWcgVVNCX0dBREdFVF9QWEEyN1gKLQlib29sZWFuICJQWEEgMjd4IgotCWRlcGVuZHMgb24gQVJDSF9QWEEgJiYgUFhBMjd4Ci0JaGVscAotCSAgIEludGVsJ3MgUFhBIDI3eCBzZXJpZXMgWFNjYWxlIEFSTSB2NVRFIHByb2Nlc3NvcnMgaW5jbHVkZQotCSAgIGFuIGludGVncmF0ZWQgZnVsbCBzcGVlZCBVU0IgMS4xIGRldmljZSBjb250cm9sbGVyLgorIworIyBDb250cm9sbGVycyBhdmFpbGFibGUgb25seSBpbiBkaXNjcmV0ZSBmb3JtIChhbmQgYWxsIFBDSSBjb250cm9sbGVycykKKyMKIAotCSAgIEl0IGhhcyB1cCB0byAyMyBlbmRwb2ludHMsIGFzIHdlbGwgYXMgZW5kcG9pbnQgemVybyAoZm9yCi0JICAgY29udHJvbCB0cmFuc2ZlcnMpLgorY29uZmlnIFVTQl9HQURHRVRfQU1ENTUzNlVEQworCWJvb2xlYW4gIkFNRDU1MzYgVURDIgorCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECisJaGVscAorCSAgIFRoZSBBTUQ1NTM2IFVEQyBpcyBwYXJ0IG9mIHRoZSBBTUQgR2VvZGUgQ1M1NTM2LCBhbiB4ODYgc291dGhicmlkZ2UuCisJICAgSXQgaXMgYSBVU0IgSGlnaHNwZWVkIERNQSBjYXBhYmxlIFVTQiBkZXZpY2UgY29udHJvbGxlci4gQmVzaWRlIGVwMAorCSAgIGl0IHByb3ZpZGVzIDQgSU4gYW5kIDQgT1VUIGVuZHBvaW50cyAoYnVsayBvciBpbnRlcnJ1cHQgdHlwZSkuCisJICAgVGhlIFVEQyBwb3J0IHN1cHBvcnRzIE9URyBvcGVyYXRpb24sIGFuZCBtYXkgYmUgdXNlZCBhcyBhIGhvc3QgcG9ydAorCSAgIGlmIGl0J3Mgbm90IGJlaW5nIHVzZWQgdG8gaW1wbGVtZW50IHBlcmlwaGVyYWwgb3IgT1RHIHJvbGVzLgogCiAJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKLQkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAicHhhMjd4X3VkYyIgYW5kIGZvcmNlIGFsbAorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJhbWQ1NTM2dWRjIiBhbmQgZm9yY2UgYWxsCiAJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCiAKLWNvbmZpZyBVU0JfUFhBMjdYCitjb25maWcgVVNCX0FNRDU1MzZVREMKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9QWEEyN1gKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfQU1ENTUzNlVEQworCWRlZmF1bHQgVVNCX0dBREdFVAorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECisKK2NvbmZpZyBVU0JfR0FER0VUX0ZTTF9RRQorCWJvb2xlYW4gIkZyZWVzY2FsZSBRRS9DUE0gVVNCIERldmljZSBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gRlNMX1NPQyAmJiAoUVVJQ0NfRU5HSU5FIHx8IENQTSkKKwloZWxwCisJICAgU29tZSBvZiBGcmVlc2NhbGUgUG93ZXJQQyBwcm9jZXNzb3JzIGhhdmUgYSBGdWxsIFNwZWVkCisJICAgUUUvQ1BNMiBVU0IgY29udHJvbGxlciwgd2hpY2ggc3VwcG9ydCBkZXZpY2UgbW9kZSB3aXRoIDQKKwkgICBwcm9ncmFtbWFibGUgZW5kcG9pbnRzLiBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUKKwkgICBjb250cm9sbGVyIGluIHRoZSBNUEM4MzYwIGFuZCBNUEM4MjcyLCBhbmQgc2hvdWxkIHdvcmsgd2l0aAorCSAgIGNvbnRyb2xsZXJzIGhhdmluZyBRRSBvciBDUE0yLCBnaXZlbiBtaW5vciB0d2Vha3MuCisKKwkgICBTZXQgQ09ORklHX1VTQl9HQURHRVQgdG8gIm0iIHRvIGJ1aWxkIHRoaXMgZHJpdmVyIGFzIGEKKwkgICBkeW5taWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJmc2xfcWVfdWRjIi4KKworY29uZmlnIFVTQl9GU0xfUUUKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9GU0xfUUUKKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCitjb25maWcgVVNCX0dBREdFVF9ORVQyMjgwCisJYm9vbGVhbiAiTmV0Q2hpcCAyMjh4IgorCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECisJaGVscAorCSAgIE5ldENoaXAgMjI4MCAvIDIyODIgaXMgYSBQQ0kgYmFzZWQgVVNCIHBlcmlwaGVyYWwgY29udHJvbGxlciB3aGljaAorCSAgIHN1cHBvcnRzIGJvdGggZnVsbCBhbmQgaGlnaCBzcGVlZCBVU0IgMi4wIGRhdGEgdHJhbnNmZXJzLgorCisJICAgSXQgaGFzIHNpeCBjb25maWd1cmFibGUgZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50IHplcm8KKwkgICAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKSBhbmQgc2V2ZXJhbCBlbmRwb2ludHMgd2l0aCBkZWRpY2F0ZWQKKwkgICBmdW5jdGlvbnMuCisKKwkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJuZXQyMjgwIiBhbmQgZm9yY2UgYWxsCisJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfTkVUMjI4MAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX05FVDIyODAKIAlkZWZhdWx0IFVTQl9HQURHRVQKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCkBAIC0yNTcsNyArNDA1LDcgQEAKIAloZWxwCiAJICAgVGhlIFRvc2hpYmEgVEM4NkMwMDEgaXMgYSBQQ0kgZGV2aWNlIHdoaWNoIGluY2x1ZGVzIGNvbnRyb2xsZXJzCiAJICAgZm9yIGZ1bGwgc3BlZWQgVVNCIGRldmljZXMsIElERSwgSTJDLCBTSU8sIHBsdXMgYSBVU0IgaG9zdCAoT0hDSSkuCi0JICAgCisKIAkgICBUaGUgZGV2aWNlIGNvbnRyb2xsZXIgaGFzIHRocmVlIGNvbmZpZ3VyYWJsZSAoYnVsayBvciBpbnRlcnJ1cHQpCiAJICAgZW5kcG9pbnRzLCBwbHVzIGVuZHBvaW50IHplcm8gKGZvciBjb250cm9sIHRyYW5zZmVycykuCiAKQEAgLTI3Miw5OCArNDIwLDkgQEAKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCiAKLWNvbmZpZyBVU0JfR0FER0VUX0xIN0E0MFgKLQlib29sZWFuICJMSDdBNDBYIgotCWRlcGVuZHMgb24gQVJDSF9MSDdBNDBYCi0JaGVscAotICAgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIFVTQiBEZXZpY2UgQ29udHJvbGxlciBkcml2ZXIgZm9yIExIN0E0MHgKLQotY29uZmlnIFVTQl9MSDdBNDBYCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfTEg3QTQwWAotCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECi0KLSMgYnVpbHQgaW4gLi4vbXVzYiBhbG9uZyB3aXRoIGhvc3Qgc3VwcG9ydAotY29uZmlnIFVTQl9HQURHRVRfTVVTQl9IRFJDCi0JYm9vbGVhbiAiSW52ZW50cmEgSERSQyBVU0IgUGVyaXBoZXJhbCAoVEksIC4uLikiCi0JZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDICYmIChVU0JfTVVTQl9QRVJJUEhFUkFMIHx8IFVTQl9NVVNCX09URykKLQlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKLQlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAotCWhlbHAKLQkgIFRoaXMgT1RHLWNhcGFibGUgc2lsaWNvbiBJUCBpcyB1c2VkIGluIGR1YWwgZGVzaWducyBpbmNsdWRpbmcKLQkgIHRoZSBUSSBEYVZpbmNpLCBPTUFQIDI0M3gsIE9NQVAgMzQzeCwgYW5kIFRVU0IgNjAxMC4KLQotY29uZmlnIFVTQl9HQURHRVRfT01BUAotCWJvb2xlYW4gIk9NQVAgVVNCIERldmljZSBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQCi0Jc2VsZWN0IElTUDEzMDFfT01BUCBpZiBNQUNIX09NQVBfSDIgfHwgTUFDSF9PTUFQX0gzCi0JaGVscAotCSAgIE1hbnkgVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBwcm9jZXNzb3JzIGhhdmUgZmxleGlibGUgZnVsbAotCSAgIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlcnMsIHdpdGggc3VwcG9ydCBmb3IgdXAgdG8gMzAKLQkgICBlbmRwb2ludHMgKHBsdXMgZW5kcG9pbnQgemVybykuICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUKLQkgICBjb250cm9sbGVyIGluIHRoZSBPTUFQIDE2MTEsIGFuZCBzaG91bGQgd29yayB3aXRoIGNvbnRyb2xsZXJzCi0JICAgaW4gb3RoZXIgT01BUCBwcm9jZXNzb3JzIHRvbywgZ2l2ZW4gbWlub3IgdHdlYWtzLgotCi0JICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKLQkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAib21hcF91ZGMiIGFuZCBmb3JjZSBhbGwKLQkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KLQotY29uZmlnIFVTQl9PTUFQCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfT01BUAotCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECi0KLWNvbmZpZyBVU0JfT1RHCi0JYm9vbGVhbiAiT1RHIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUX09NQVAgJiYgQVJDSF9PTUFQX09URyAmJiBVU0JfT0hDSV9IQ0QKLQloZWxwCi0JICAgVGhlIG1vc3Qgbm90YWJsZSBmZWF0dXJlIG9mIFVTQiBPVEcgaXMgc3VwcG9ydCBmb3IgYQotCSAgICJEdWFsLVJvbGUiIGRldmljZSwgd2hpY2ggY2FuIGFjdCBhcyBlaXRoZXIgYSBkZXZpY2UKLQkgICBvciBhIGhvc3QuICBUaGUgaW5pdGlhbCByb2xlIGNob2ljZSBjYW4gYmUgY2hhbmdlZAotCSAgIGxhdGVyLCB3aGVuIHR3byBkdWFsLXJvbGUgZGV2aWNlcyB0YWxrIHRvIGVhY2ggb3RoZXIuCi0KLQkgICBTZWxlY3QgdGhpcyBvbmx5IGlmIHlvdXIgT01BUCBib2FyZCBoYXMgYSBNaW5pLUFCIGNvbm5lY3Rvci4KLQotY29uZmlnIFVTQl9HQURHRVRfUzNDMjQxMAotCWJvb2xlYW4gIlMzQzI0MTAgVVNCIERldmljZSBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCi0JaGVscAotCSAgU2Ftc3VuZydzIFMzQzI0MTAgaXMgYW4gQVJNLTQgcHJvY2Vzc29yIHdpdGggYW4gaW50ZWdyYXRlZAotCSAgZnVsbCBzcGVlZCBVU0IgMS4xIGRldmljZSBjb250cm9sbGVyLiAgSXQgaGFzIDQgY29uZmlndXJhYmxlCi0JICBlbmRwb2ludHMsIGFzIHdlbGwgYXMgZW5kcG9pbnQgemVybyAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKS4KLQotCSAgVGhpcyBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIG9uIHRoZSBTM0MyNDEwLCBTM0MyNDEyLCBhbmQKLQkgIFMzQzI0NDAgcHJvY2Vzc29ycy4KLQotY29uZmlnIFVTQl9TM0MyNDEwCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfUzNDMjQxMAotCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECi0KLWNvbmZpZyBVU0JfUzNDMjQxMF9ERUJVRwotCWJvb2xlYW4gIlMzQzI0MTAgdWRjIGRlYnVnIG1lc3NhZ2VzIgotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9TM0MyNDEwCi0KLWNvbmZpZyBVU0JfR0FER0VUX0FUOTEKLQlib29sZWFuICJBVDkxIFVTQiBEZXZpY2UgUG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfQVQ5MSAmJiAhQVJDSF9BVDkxU0FNOVJMICYmICFBUkNIX0FUOTFDQVA5Ci0Jc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKLQloZWxwCi0JICAgTWFueSBBdG1lbCBBVDkxIHByb2Nlc3NvcnMgKHN1Y2ggYXMgdGhlIEFUOTFSTTIwMDApIGhhdmUgYQotCSAgIGZ1bGwgc3BlZWQgVVNCIERldmljZSBQb3J0IHdpdGggc3VwcG9ydCBmb3IgZml2ZSBjb25maWd1cmFibGUKLQkgICBlbmRwb2ludHMgKHBsdXMgZW5kcG9pbnQgemVybykuCi0KLQkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQotCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJhdDkxX3VkYyIgYW5kIGZvcmNlIGFsbAotCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgotCi1jb25maWcgVVNCX0FUOTEKLQl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9BVDkxCi0JZGVmYXVsdCBVU0JfR0FER0VUCisjCisjIExBU1QgLS0gZHVtbXkvZW11bGF0ZWQgY29udHJvbGxlcgorIwogCiBjb25maWcgVVNCX0dBREdFVF9EVU1NWV9IQ0QKIAlib29sZWFuICJEdW1teSBIQ0QgKERFVkVMT1BNRU5UKSIKQEAgLTU1MywxOSArNjEyLDIzIEBACiAJICBub3JtYWwgb3BlcmF0aW9uLgogCiBjb25maWcgVVNCX0dfU0VSSUFMCi0JdHJpc3RhdGUgIlNlcmlhbCBHYWRnZXQgKHdpdGggQ0RDIEFDTSBzdXBwb3J0KSIKKwl0cmlzdGF0ZSAiU2VyaWFsIEdhZGdldCAod2l0aCBDREMgQUNNIGFuZCBDREMgT0JFWCBzdXBwb3J0KSIKIAloZWxwCiAJICBUaGUgU2VyaWFsIEdhZGdldCB0YWxrcyB0byB0aGUgTGludXgtVVNCIGdlbmVyaWMgc2VyaWFsIGRyaXZlci4KIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGEgQ0RDLUFDTSBtb2R1bGUgb3B0aW9uLCB3aGljaCBjYW4gYmUgdXNlZAogCSAgdG8gaW50ZXJvcGVyYXRlIHdpdGggTVMtV2luZG93cyBob3N0cyBvciB3aXRoIHRoZSBMaW51eC1VU0IKIAkgICJjZGMtYWNtIiBkcml2ZXIuCiAKKwkgIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgYSBDREMtT0JFWCBvcHRpb24uICBZb3Ugd2lsbCBuZWVkIGEKKwkgIHVzZXIgc3BhY2UgT0JFWCBzZXJ2ZXIgdGFsa2luZyB0byAvZGV2L3R0eUdTKiwgc2luY2UgdGhlIGtlcm5lbAorCSAgaXRzZWxmIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBPQkVYIHByb3RvY29sLgorCiAJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQogCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImdfc2VyaWFsIi4KIAogCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfc2VyaWFsLnR4dAogCSAgd2hpY2ggaW5jbHVkZXMgaW5zdHJ1Y3Rpb25zIGFuZCBhICJkcml2ZXIgaW5mbyBmaWxlIiBuZWVkZWQgdG8KLQkgIG1ha2UgTVMtV2luZG93cyB3b3JrIHdpdGggdGhpcyBkcml2ZXIuCisJICBtYWtlIE1TLVdpbmRvd3Mgd29yayB3aXRoIENEQyBBQ00uCiAKIGNvbmZpZyBVU0JfTUlESV9HQURHRVQKIAl0cmlzdGF0ZSAiTUlESSBHYWRnZXQgKEVYUEVSSU1FTlRBTCkiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKaW5kZXggZmNiNWNiOS4uYmQ0MDQxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQpAQCAtMTgsMjggKzE4LDIwIEBACiBvYmotJChDT05GSUdfVVNCX0FUTUVMX1VTQkEpCSs9IGF0bWVsX3VzYmFfdWRjLm8KIG9iai0kKENPTkZJR19VU0JfRlNMX1VTQjIpCSs9IGZzbF91c2IyX3VkYy5vCiBvYmotJChDT05GSUdfVVNCX002NjU5MikJKz0gbTY2NTkyLXVkYy5vCitvYmotJChDT05GSUdfVVNCX0ZTTF9RRSkJKz0gZnNsX3FlX3VkYy5vCiAKICMKICMgVVNCIGdhZGdldCBkcml2ZXJzCiAjCi1DX1VUSUxTID0JY29tcG9zaXRlLm8gdXNic3RyaW5nLm8gY29uZmlnLm8gZXBhdXRvY29uZi5vCi0KLWdfemVyby1vYmpzCQkJOj0gemVyby5vIGZfc291cmNlc2luay5vIGZfbG9vcGJhY2subyAkKENfVVRJTFMpCi1nX2V0aGVyLW9ianMJCQk6PSBldGhlci5vIHVfZXRoZXIubyBmX3N1YnNldC5vIGZfZWNtLm8gJChDX1VUSUxTKQotZ19zZXJpYWwtb2JqcwkJCTo9IHNlcmlhbC5vIHVfc2VyaWFsLm8gZl9hY20ubyBmX3NlcmlhbC5vICQoQ19VVElMUykKLWdfbWlkaS1vYmpzCQkJOj0gZ21pZGkubyB1c2JzdHJpbmcubyBjb25maWcubyBlcGF1dG9jb25mLm8KK2dfemVyby1vYmpzCQkJOj0gemVyby5vCitnX2V0aGVyLW9ianMJCQk6PSBldGhlci5vCitnX3NlcmlhbC1vYmpzCQkJOj0gc2VyaWFsLm8KK2dfbWlkaS1vYmpzCQkJOj0gZ21pZGkubwogZ2FkZ2V0ZnMtb2JqcwkJCTo9IGlub2RlLm8KLWdfZmlsZV9zdG9yYWdlLW9ianMJCTo9IGZpbGVfc3RvcmFnZS5vIHVzYnN0cmluZy5vIGNvbmZpZy5vIFwKLQkJCQkJZXBhdXRvY29uZi5vCi1nX3ByaW50ZXItb2JqcwkJCTo9IHByaW50ZXIubyB1c2JzdHJpbmcubyBjb25maWcubyBcCi0JCQkJCWVwYXV0b2NvbmYubwotZ19jZGMtb2JqcwkJCTo9IGNkYzIubyB1X2V0aGVyLm8gZl9lY20ubyBcCi0JCQkJCXVfc2VyaWFsLm8gZl9hY20ubyAkKENfVVRJTFMpCitnX2ZpbGVfc3RvcmFnZS1vYmpzCQk6PSBmaWxlX3N0b3JhZ2UubworZ19wcmludGVyLW9ianMJCQk6PSBwcmludGVyLm8KK2dfY2RjLW9ianMJCQk6PSBjZGMyLm8KIAotaWZlcSAoJChDT05GSUdfVVNCX0VUSF9STkRJUykseSkKLQlnX2V0aGVyLW9ianMJCSs9IGZfcm5kaXMubyBybmRpcy5vCi1lbmRpZgotIAogb2JqLSQoQ09ORklHX1VTQl9aRVJPKQkJKz0gZ196ZXJvLm8KIG9iai0kKENPTkZJR19VU0JfRVRIKQkJKz0gZ19ldGhlci5vCiBvYmotJChDT05GSUdfVVNCX0dBREdFVEZTKQkrPSBnYWRnZXRmcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYwppbmRleCBhMzlhNGI5Li41NDk1YjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMKQEAgLTQzLDYgKzQzLDI1IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qCisgKiBLYnVpbGQgaXMgbm90IHZlcnkgY29vcGVyYXRpdmUgd2l0aCByZXNwZWN0IHRvIGxpbmtpbmcgc2VwYXJhdGVseQorICogY29tcGlsZWQgbGlicmFyeSBvYmplY3RzIGludG8gb25lIG1vZHVsZS4gIFNvIGZvciBub3cgd2Ugd29uJ3QgdXNlCisgKiBzZXBhcmF0ZSBjb21waWxhdGlvbiAuLi4gZW5zdXJpbmcgaW5pdC9leGl0IHNlY3Rpb25zIHdvcmsgdG8gc2hyaW5rCisgKiB0aGUgcnVudGltZSBmb290cHJpbnQsIGFuZCBnaXZpbmcgdXMgYXQgbGVhc3Qgc29tZSBwYXJ0cyBvZiB3aGF0CisgKiBhICJnY2MgLS1jb21iaW5lIC4uLiBwYXJ0MS5jIHBhcnQyLmMgcGFydDMuYyAuLi4gIiBidWlsZCB3b3VsZC4KKyAqLworCisjaW5jbHVkZSAiY29tcG9zaXRlLmMiCisjaW5jbHVkZSAidXNic3RyaW5nLmMiCisjaW5jbHVkZSAiY29uZmlnLmMiCisjaW5jbHVkZSAiZXBhdXRvY29uZi5jIgorI2luY2x1ZGUgInVfc2VyaWFsLmMiCisjaW5jbHVkZSAiZl9hY20uYyIKKyNpbmNsdWRlICJmX2VjbS5jIgorI2luY2x1ZGUgInVfZXRoZXIuYyIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLApAQCAtMTM2LDcgKzE1NSw2IEBACiAJLmJDb25maWd1cmF0aW9uVmFsdWUJPSAxLAogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIAkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyCQk9IDEsCS8qIDIgbUEsIG1pbmltYWwgKi8KIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDgsNyArMTY2LDggQEAKIAlpbnQJCQlzdGF0dXM7CiAKIAlpZiAoIWNhbl9zdXBwb3J0X2VjbShjZGV2LT5nYWRnZXQpKSB7Ci0JCUVSUk9SKGNkZXYsICJjb250cm9sbGVyICclcycgbm90IHVzYWJsZVxuIiwgZ2FkZ2V0LT5uYW1lKTsKKwkJZGV2X2VycigmZ2FkZ2V0LT5kZXYsICJjb250cm9sbGVyICclcycgbm90IHVzYWJsZVxuIiwKKwkJCQlnYWRnZXQtPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIwMyw3ICsyMjIsOCBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWwxOwogCi0JSU5GTyhjZGV2LCAiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwgRFJJVkVSX0RFU0MpOworCWRldl9pbmZvKCZnYWRnZXQtPmRldiwgIiVzLCB2ZXJzaW9uOiAiIERSSVZFUl9WRVJTSU9OICJcbiIsCisJCQlEUklWRVJfREVTQyk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCmluZGV4IDg1Yzg3NmMuLmYyZGEwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKQEAgLTEyOCw2ICsxMjgsNzAgQEAKIH0KIAogLyoqCisgKiB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZSAtIHByZXZlbnQgZnVuY3Rpb24gYW5kIGdhZGdldCBlbnVtZXJhdGlvbgorICogQGZ1bmN0aW9uOiB0aGUgZnVuY3Rpb24gdGhhdCBpc24ndCB5ZXQgcmVhZHkgdG8gcmVzcG9uZAorICoKKyAqIEJsb2NrcyByZXNwb25zZSBvZiB0aGUgZ2FkZ2V0IGRyaXZlciB0byBob3N0IGVudW1lcmF0aW9uIGJ5CisgKiBwcmV2ZW50aW5nIHRoZSBkYXRhIGxpbmUgcHVsbHVwIGZyb20gYmVpbmcgYWN0aXZhdGVkLiAgVGhpcyBpcworICogbm9ybWFsbHkgY2FsbGVkIGR1cmluZyBAYmluZCgpIHByb2Nlc3NpbmcgdG8gY2hhbmdlIGZyb20gdGhlCisgKiBpbml0aWFsICJyZWFkeSB0byByZXNwb25kIiBzdGF0ZSwgb3Igd2hlbiBhIHJlcXVpcmVkIHJlc291cmNlCisgKiBiZWNvbWVzIGF2YWlsYWJsZS4KKyAqCisgKiBGb3IgZXhhbXBsZSwgZHJpdmVycyB0aGF0IHNlcnZlIGFzIGEgcGFzc3Rocm91Z2ggdG8gYSB1c2Vyc3BhY2UKKyAqIGRhZW1vbiBjYW4gYmxvY2sgZW51bWVyYXRpb24gdW5sZXNzIHRoYXQgZGFlbW9uIChzdWNoIGFzIGFuIE9CRVgsCisgKiBNVFAsIG9yIHByaW50IHNlcnZlcikgaXMgcmVhZHkgdG8gaGFuZGxlIGhvc3QgcmVxdWVzdHMuCisgKgorICogTm90IGFsbCBzeXN0ZW1zIHN1cHBvcnQgc29mdHdhcmUgY29udHJvbCBvZiB0aGVpciBVU0IgcGVyaXBoZXJhbAorICogZGF0YSBwdWxsdXBzLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLgorICovCitpbnQgdXNiX2Z1bmN0aW9uX2RlYWN0aXZhdGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZnVuY3Rpb24pCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZnVuY3Rpb24tPmNvbmZpZy0+Y2RldjsKKwlpbnQJCQkJc3RhdHVzID0gMDsKKworCXNwaW5fbG9jaygmY2Rldi0+bG9jayk7CisKKwlpZiAoY2Rldi0+ZGVhY3RpdmF0aW9ucyA9PSAwKQorCQlzdGF0dXMgPSB1c2JfZ2FkZ2V0X2Rpc2Nvbm5lY3QoY2Rldi0+Z2FkZ2V0KTsKKwlpZiAoc3RhdHVzID09IDApCisJCWNkZXYtPmRlYWN0aXZhdGlvbnMrKzsKKworCXNwaW5fdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHVzYl9mdW5jdGlvbl9hY3RpdmF0ZSAtIGFsbG93IGZ1bmN0aW9uIGFuZCBnYWRnZXQgZW51bWVyYXRpb24KKyAqIEBmdW5jdGlvbjogZnVuY3Rpb24gb24gd2hpY2ggdXNiX2Z1bmN0aW9uX2FjdGl2YXRlKCkgd2FzIGNhbGxlZAorICoKKyAqIFJldmVyc2VzIGVmZmVjdCBvZiB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZSgpLiAgSWYgbm8gbW9yZSBmdW5jdGlvbnMKKyAqIGFyZSBkZWxheWluZyB0aGVpciBhY3RpdmF0aW9uLCB0aGUgZ2FkZ2V0IGRyaXZlciB3aWxsIHJlc3BvbmQgdG8KKyAqIGhvc3QgZW51bWVyYXRpb24gcHJvY2VkdXJlcy4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqLworaW50IHVzYl9mdW5jdGlvbl9hY3RpdmF0ZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmdW5jdGlvbikKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSBmdW5jdGlvbi0+Y29uZmlnLT5jZGV2OworCWludAkJCQlzdGF0dXMgPSAwOworCisJc3Bpbl9sb2NrKCZjZGV2LT5sb2NrKTsKKworCWlmIChXQVJOX09OKGNkZXYtPmRlYWN0aXZhdGlvbnMgPT0gMCkpCisJCXN0YXR1cyA9IC1FSU5WQUw7CisJZWxzZSB7CisJCWNkZXYtPmRlYWN0aXZhdGlvbnMtLTsKKwkJaWYgKGNkZXYtPmRlYWN0aXZhdGlvbnMgPT0gMCkKKwkJCXN0YXR1cyA9IHVzYl9nYWRnZXRfY29ubmVjdChjZGV2LT5nYWRnZXQpOworCX0KKworCXNwaW5fdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKICAqIHVzYl9pbnRlcmZhY2VfaWQoKSAtIGFsbG9jYXRlIGFuIHVudXNlZCBpbnRlcmZhY2UgSUQKICAqIEBjb25maWc6IGNvbmZpZ3VyYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnRlcmZhY2UKICAqIEBmdW5jdGlvbjogZnVuY3Rpb24gaGFuZGxpbmcgdGhlIGludGVyZmFjZQpAQCAtMTgxLDcgKzI0NSw3IEBACiAJYy0+YkNvbmZpZ3VyYXRpb25WYWx1ZSA9IGNvbmZpZy0+YkNvbmZpZ3VyYXRpb25WYWx1ZTsKIAljLT5pQ29uZmlndXJhdGlvbiA9IGNvbmZpZy0+aUNvbmZpZ3VyYXRpb247CiAJYy0+Ym1BdHRyaWJ1dGVzID0gVVNCX0NPTkZJR19BVFRfT05FIHwgY29uZmlnLT5ibUF0dHJpYnV0ZXM7Ci0JYy0+Yk1heFBvd2VyID0gY29uZmlnLT5iTWF4UG93ZXI7CisJYy0+Yk1heFBvd2VyID0gY29uZmlnLT5iTWF4UG93ZXIgPyA6IChDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVcgLyAyKTsKIAogCS8qIFRoZXJlIG1heSBiZSBlLmcuIE9URyBkZXNjcmlwdG9ycyAqLwogCWlmIChjb25maWctPmRlc2NyaXB0b3JzKSB7CkBAIC0zNjgsNyArNDMyLDcgQEAKIAl9CiAKIAkvKiB3aGVuIHdlIHJldHVybiwgYmUgc3VyZSBvdXIgcG93ZXIgdXNhZ2UgaXMgdmFsaWQgKi8KLQlwb3dlciA9IDIgKiBjLT5iTWF4UG93ZXI7CisJcG93ZXIgPSBjLT5iTWF4UG93ZXIgPyAoMiAqIGMtPmJNYXhQb3dlcikgOiBDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc7CiBkb25lOgogCXVzYl9nYWRnZXRfdmJ1c19kcmF3KGdhZGdldCwgcG93ZXIpOwogCXJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggNzYwMGEwYy4uOTA2NDY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtODIsNiArODIsNyBAQAogCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYzsKIAlzdHJ1Y3QgdXNiX2VwCQkJZXA7CiAJdW5zaWduZWQJCQloYWx0ZWQgOiAxOworCXVuc2lnbmVkCQkJd2VkZ2VkIDogMTsKIAl1bnNpZ25lZAkJCWFscmVhZHlfc2VlbiA6IDE7CiAJdW5zaWduZWQJCQlzZXR1cF9zdGFnZSA6IDE7CiB9OwpAQCAtNDM2LDYgKzQzNyw3IEBACiAJLyogYXQgdGhpcyBwb2ludCByZWFsIGhhcmR3YXJlIHNob3VsZCBiZSBOQUtpbmcgdHJhbnNmZXJzCiAJICogdG8gdGhhdCBlbmRwb2ludCwgdW50aWwgYSBidWZmZXIgaXMgcXVldWVkIHRvIGl0LgogCSAqLworCWVwLT5oYWx0ZWQgPSBlcC0+d2VkZ2VkID0gMDsKIAlyZXR2YWwgPSAwOwogZG9uZToKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNTk3LDcgKzU5OSw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWR1bW15X3NldF9oYWx0IChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK2R1bW15X3NldF9oYWx0X2FuZF93ZWRnZShzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSwgaW50IHdlZGdlZCkKIHsKIAlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKIAlzdHJ1Y3QgZHVtbXkJCSpkdW07CkBAIC02MDksMTYgKzYxMSwzMiBAQAogCWlmICghZHVtLT5kcml2ZXIpCiAJCXJldHVybiAtRVNIVVRET1dOOwogCWlmICghdmFsdWUpCi0JCWVwLT5oYWx0ZWQgPSAwOworCQllcC0+aGFsdGVkID0gZXAtPndlZGdlZCA9IDA7CiAJZWxzZSBpZiAoZXAtPmRlc2MgJiYgKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgJiYKIAkJCSFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkKIAkJcmV0dXJuIC1FQUdBSU47Ci0JZWxzZQorCWVsc2UgewogCQllcC0+aGFsdGVkID0gMTsKKwkJaWYgKHdlZGdlZCkKKwkJCWVwLT53ZWRnZWQgPSAxOworCX0KIAkvKiBGSVhNRSBjbGVhciBlbXVsYXRlZCBkYXRhIHRvZ2dsZSB0b28gKi8KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorZHVtbXlfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJcmV0dXJuIGR1bW15X3NldF9oYWx0X2FuZF93ZWRnZShfZXAsIHZhbHVlLCAwKTsKK30KKworc3RhdGljIGludCBkdW1teV9zZXRfd2VkZ2Uoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCWlmICghX2VwIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gZHVtbXlfc2V0X2hhbHRfYW5kX3dlZGdlKF9lcCwgMSwgMSk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2VwX29wcyBkdW1teV9lcF9vcHMgPSB7CiAJLmVuYWJsZQkJPSBkdW1teV9lbmFibGUsCiAJLmRpc2FibGUJPSBkdW1teV9kaXNhYmxlLApAQCAtNjMwLDYgKzY0OCw3IEBACiAJLmRlcXVldWUJPSBkdW1teV9kZXF1ZXVlLAogCiAJLnNldF9oYWx0CT0gZHVtbXlfc2V0X2hhbHQsCisJLnNldF93ZWRnZQk9IGR1bW15X3NldF93ZWRnZSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC03NjAsNyArNzc5LDggQEAKIAkJZXAtPmVwLm5hbWUgPSBlcF9uYW1lIFtpXTsKIAkJZXAtPmVwLm9wcyA9ICZkdW1teV9lcF9vcHM7CiAJCWxpc3RfYWRkX3RhaWwgKCZlcC0+ZXAuZXBfbGlzdCwgJmR1bS0+Z2FkZ2V0LmVwX2xpc3QpOwotCQllcC0+aGFsdGVkID0gZXAtPmFscmVhZHlfc2VlbiA9IGVwLT5zZXR1cF9zdGFnZSA9IDA7CisJCWVwLT5oYWx0ZWQgPSBlcC0+d2VkZ2VkID0gZXAtPmFscmVhZHlfc2VlbiA9CisJCQkJZXAtPnNldHVwX3N0YWdlID0gMDsKIAkJZXAtPmVwLm1heHBhY2tldCA9IH4wOwogCQllcC0+bGFzdF9pbyA9IGppZmZpZXM7CiAJCWVwLT5nYWRnZXQgPSAmZHVtLT5nYWRnZXQ7CkBAIC0xMzUxLDcgKzEzNzEsNyBAQAogCQkJCX0gZWxzZSBpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IEVwX1JlcXVlc3QpIHsKIAkJCQkJLy8gZW5kcG9pbnQgaGFsdAogCQkJCQllcDIgPSBmaW5kX2VuZHBvaW50IChkdW0sIHdfaW5kZXgpOwotCQkJCQlpZiAoIWVwMikgeworCQkJCQlpZiAoIWVwMiB8fCBlcDItPmVwLm5hbWUgPT0gZXAwbmFtZSkgewogCQkJCQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CkBAIC0xMzgwLDcgKzE0MDAsOCBAQAogCQkJCQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKIAkJCQkJCWJyZWFrOwogCQkJCQl9Ci0JCQkJCWVwMi0+aGFsdGVkID0gMDsKKwkJCQkJaWYgKCFlcDItPndlZGdlZCkKKwkJCQkJCWVwMi0+aGFsdGVkID0gMDsKIAkJCQkJdmFsdWUgPSAwOwogCQkJCQlzdGF0dXMgPSAwOwogCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggYmNhYzJlNi4uMzcyNTJkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTk2LDYgKzk2LDI4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qCisgKiBLYnVpbGQgaXMgbm90IHZlcnkgY29vcGVyYXRpdmUgd2l0aCByZXNwZWN0IHRvIGxpbmtpbmcgc2VwYXJhdGVseQorICogY29tcGlsZWQgbGlicmFyeSBvYmplY3RzIGludG8gb25lIG1vZHVsZS4gIFNvIGZvciBub3cgd2Ugd29uJ3QgdXNlCisgKiBzZXBhcmF0ZSBjb21waWxhdGlvbiAuLi4gZW5zdXJpbmcgaW5pdC9leGl0IHNlY3Rpb25zIHdvcmsgdG8gc2hyaW5rCisgKiB0aGUgcnVudGltZSBmb290cHJpbnQsIGFuZCBnaXZpbmcgdXMgYXQgbGVhc3Qgc29tZSBwYXJ0cyBvZiB3aGF0CisgKiBhICJnY2MgLS1jb21iaW5lIC4uLiBwYXJ0MS5jIHBhcnQyLmMgcGFydDMuYyAuLi4gIiBidWlsZCB3b3VsZC4KKyAqLworI2luY2x1ZGUgImNvbXBvc2l0ZS5jIgorI2luY2x1ZGUgInVzYnN0cmluZy5jIgorI2luY2x1ZGUgImNvbmZpZy5jIgorI2luY2x1ZGUgImVwYXV0b2NvbmYuYyIKKworI2luY2x1ZGUgImZfZWNtLmMiCisjaW5jbHVkZSAiZl9zdWJzZXQuYyIKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworI2luY2x1ZGUgImZfcm5kaXMuYyIKKyNpbmNsdWRlICJybmRpcy5jIgorI2VuZGlmCisjaW5jbHVkZSAidV9ldGhlci5jIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiBETyBOT1QgUkVVU0UgVEhFU0UgSURzIHdpdGggYSBwcm90b2NvbC1pbmNvbXBhdGlibGUgZHJpdmVyISEgIEV2ZXIhIQogICogSW5zdGVhZDogIGFsbG9jYXRlIHlvdXIgb3duLCB1c2luZyBub3JtYWwgVVNCLUlGIHByb2NlZHVyZXMuCiAgKi8KQEAgLTIyMCw3ICsyNDIsNiBAQAogCS5iQ29uZmlndXJhdGlvblZhbHVlCT0gMiwKIAkvKiAuaUNvbmZpZ3VyYXRpb24gPSBEWU5BTUlDICovCiAJLmJtQXR0cmlidXRlcwkJPSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlcgkJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjQ5LDcgKzI3MCw2IEBACiAJLmJDb25maWd1cmF0aW9uVmFsdWUJPSAxLAogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIAkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyCQk9IDEsCS8qIDIgbUEsIG1pbmltYWwgKi8KIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yOTMsNyArMzEzLDggQEAKIAkJICogYnV0IGlmIHRoZSBjb250cm9sbGVyIGlzbid0IHJlY29nbml6ZWQgYXQgYWxsIHRoZW4KIAkJICogdGhhdCBhc3N1bXB0aW9uIGlzIGEgYml0IG1vcmUgbGlrZWx5IHRvIGJlIHdyb25nLgogCQkgKi8KLQkJV0FSTklORyhjZGV2LCAiY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkOyB0cnlpbmcgJXNcbiIsCisJCWRldl93YXJuKCZnYWRnZXQtPmRldiwKKwkJCQkiY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkOyB0cnlpbmcgJXNcbiIsCiAJCQkJZ2FkZ2V0LT5uYW1lLAogCQkJCWV0aF9jb25maWdfZHJpdmVyLmxhYmVsKTsKIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KQEAgLTMzMiw3ICszNTMsOCBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKLQlJTkZPKGNkZXYsICIlcywgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iLCBEUklWRVJfREVTQyk7CisJZGV2X2luZm8oJmdhZGdldC0+ZGV2LCAiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwKKwkJCURSSVZFUl9ERVNDKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCmluZGV4IGEyYjVjMDkuLjRhZTU3OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCkBAIC04Myw3ICs4Myw3IEBACiB9CiAKIC8qIHBlYWsgKHRoZW9yZXRpY2FsKSBidWxrIHRyYW5zZmVyIHJhdGUgaW4gYml0cy1wZXItc2Vjb25kICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJpdHJhdGUoc3RydWN0IHVzYl9nYWRnZXQgKmcpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGVjbV9iaXRyYXRlKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnKQogewogCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGcpICYmIGctPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQogCQlyZXR1cm4gMTMgKiA1MTIgKiA4ICogMTAwMCAqIDg7CkBAIC0xMDcsNyArMTA3LDcgQEAKICAqLwogCiAjZGVmaW5lIExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMJNQkvKiAxIDw8IDUgPT0gMzIgbXNlYyAqLwotI2RlZmluZSBTVEFUVVNfQllURUNPVU5UCQkxNgkvKiA4IGJ5dGUgaGVhZGVyICsgZGF0YSAqLworI2RlZmluZSBFQ01fU1RBVFVTX0JZVEVDT1VOVAkJMTYJLyogOCBieXRlIGhlYWRlciArIGRhdGEgKi8KIAogCiAvKiBpbnRlcmZhY2UgZGVzY3JpcHRvcjogKi8KQEAgLTEyNSw4ICsxMjUsOCBAQAogCS8qIC5pSW50ZXJmYWNlID0gRFlOQU1JQyAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIGhlYWRlcl9kZXNjIF9faW5pdGRhdGEgPSB7Ci0JLmJMZW5ndGggPQkJc2l6ZW9mIGhlYWRlcl9kZXNjLAorc3RhdGljIHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIGVjbV9oZWFkZXJfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBlY21faGVhZGVyX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCiAKQEAgLTE0MSw4ICsxNDEsOCBAQAogCS8qIC5iU2xhdmVJbnRlcmZhY2UwID0JRFlOQU1JQyAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MgZXRoZXJfZGVzYyBfX2luaXRkYXRhID0gewotCS5iTGVuZ3RoID0JCXNpemVvZiBldGhlcl9kZXNjLAorc3RhdGljIHN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MgZWNtX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgZWNtX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfRVRIRVJORVRfVFlQRSwKIApAQCAtMTg2LDE3ICsxODYsMTcgQEAKIAogLyogZnVsbCBzcGVlZCBzdXBwb3J0OiAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX25vdGlmeV9kZXNjIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX2VjbV9ub3RpZnlfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCTEgPDwgTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfaW5fZGVzYyBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc19lY21faW5fZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTIwNCw3ICsyMDQsNyBAQAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfZWNtX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIApAQCAtMjEyLDM0ICsyMTIsMzQgQEAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZXRoX2ZzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICplY21fZnNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewogCS8qIENEQyBFQ00gY29udHJvbCBkZXNjcmlwdG9ycyAqLwogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fY29udHJvbF9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2hlYWRlcl9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fdW5pb25fZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZXRoZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2Rlc2MsCiAJLyogTk9URTogc3RhdHVzIGVuZHBvaW50IG1pZ2h0IG5lZWQgdG8gYmUgcmVtb3ZlZCAqLwotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19ub3RpZnlfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfZWNtX25vdGlmeV9kZXNjLAogCS8qIGRhdGEgaW50ZXJmYWNlLCBhbHRzZXR0aW5ncyAwIGFuZCAxICovCiAJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVjbV9kYXRhX25vcF9pbnRmLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19pbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfZWNtX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX2VjbV9vdXRfZGVzYywKIAlOVUxMLAogfTsKIAogLyogaGlnaCBzcGVlZCBzdXBwb3J0OiAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX25vdGlmeV9kZXNjIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2VjbV9ub3RpZnlfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCUxPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMgKyA0LAogfTsKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfaW5fZGVzYyBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19lY21faW5fZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfZWNtX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIApAQCAtMjU3LDE5ICsyNTcsMTkgQEAKIAkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZXRoX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICplY21faHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewogCS8qIENEQyBFQ00gY29udHJvbCBkZXNjcmlwdG9ycyAqLwogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fY29udHJvbF9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2hlYWRlcl9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fdW5pb25fZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZXRoZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2Rlc2MsCiAJLyogTk9URTogc3RhdHVzIGVuZHBvaW50IG1pZ2h0IG5lZWQgdG8gYmUgcmVtb3ZlZCAqLwotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19ub3RpZnlfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfZWNtX25vdGlmeV9kZXNjLAogCS8qIGRhdGEgaW50ZXJmYWNlLCBhbHRzZXR0aW5ncyAwIGFuZCAxICovCiAJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVjbV9kYXRhX25vcF9pbnRmLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19pbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfZWNtX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX2VjbV9vdXRfZGVzYywKIAlOVUxMLAogfTsKIApAQCAtMzI5LDE0ICszMjksMTQgQEAKIAkJZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19OT1RJRllfU1BFRURfQ0hBTkdFOwogCQlldmVudC0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoMCk7CiAJCWV2ZW50LT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoOCk7Ci0JCXJlcS0+bGVuZ3RoID0gU1RBVFVTX0JZVEVDT1VOVDsKKwkJcmVxLT5sZW5ndGggPSBFQ01fU1RBVFVTX0JZVEVDT1VOVDsKIAogCQkvKiBTUEVFRF9DSEFOR0UgZGF0YSBpcyB1cC9kb3duIHNwZWVkcyBpbiBiaXRzL3NlYyAqLwogCQlkYXRhID0gcmVxLT5idWYgKyBzaXplb2YgKmV2ZW50OwotCQlkYXRhWzBdID0gY3B1X3RvX2xlMzIoYml0cmF0ZShjZGV2LT5nYWRnZXQpKTsKKwkJZGF0YVswXSA9IGNwdV90b19sZTMyKGVjbV9iaXRyYXRlKGNkZXYtPmdhZGdldCkpOwogCQlkYXRhWzFdID0gZGF0YVswXTsKIAotCQlEQkcoY2RldiwgIm5vdGlmeSBzcGVlZCAlZFxuIiwgYml0cmF0ZShjZGV2LT5nYWRnZXQpKTsKKwkJREJHKGNkZXYsICJub3RpZnkgc3BlZWQgJWRcbiIsIGVjbV9iaXRyYXRlKGNkZXYtPmdhZGdldCkpOwogCQllY20tPm5vdGlmeV9zdGF0ZSA9IEVDTV9OT1RJRllfTk9ORTsKIAkJYnJlYWs7CiAJfQpAQCAtNjI4LDEzICs2MjgsMTMgQEAKIAlzdGF0dXMgPSAtRU5PREVWOwogCiAJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgZW5kcG9pbnRzICovCi0JZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZmc19pbl9kZXNjKTsKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX2VjbV9pbl9kZXNjKTsKIAlpZiAoIWVwKQogCQlnb3RvIGZhaWw7CiAJZWNtLT5wb3J0LmluX2VwID0gZXA7CiAJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KIAotCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfb3V0X2Rlc2MpOworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfZWNtX291dF9kZXNjKTsKIAlpZiAoIWVwKQogCQlnb3RvIGZhaWw7CiAJZWNtLT5wb3J0Lm91dF9lcCA9IGVwOwpAQCAtNjQ0LDcgKzY0NCw3IEBACiAJICogZG9uJ3QgdHJlYXQgaXQgdGhhdCB3YXkuICBJdCdzIHNpbXBsZXIsIGFuZCBzb21lIG5ld2VyIENEQwogCSAqIHByb2ZpbGVzICh3aXJlbGVzcyBoYW5kc2V0cykgbm8gbG9uZ2VyIHRyZWF0IGl0IGFzIG9wdGlvbmFsLgogCSAqLwotCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfbm90aWZ5X2Rlc2MpOworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfZWNtX25vdGlmeV9kZXNjKTsKIAlpZiAoIWVwKQogCQlnb3RvIGZhaWw7CiAJZWNtLT5ub3RpZnkgPSBlcDsKQEAgLTY1Niw0NyArNjU2LDQ3IEBACiAJZWNtLT5ub3RpZnlfcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAsIEdGUF9LRVJORUwpOwogCWlmICghZWNtLT5ub3RpZnlfcmVxKQogCQlnb3RvIGZhaWw7Ci0JZWNtLT5ub3RpZnlfcmVxLT5idWYgPSBrbWFsbG9jKFNUQVRVU19CWVRFQ09VTlQsIEdGUF9LRVJORUwpOworCWVjbS0+bm90aWZ5X3JlcS0+YnVmID0ga21hbGxvYyhFQ01fU1RBVFVTX0JZVEVDT1VOVCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlY20tPm5vdGlmeV9yZXEtPmJ1ZikKIAkJZ290byBmYWlsOwogCWVjbS0+bm90aWZ5X3JlcS0+Y29udGV4dCA9IGVjbTsKIAllY20tPm5vdGlmeV9yZXEtPmNvbXBsZXRlID0gZWNtX25vdGlmeV9jb21wbGV0ZTsKIAogCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KLQlmLT5kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGV0aF9mc19mdW5jdGlvbik7CisJZi0+ZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhlY21fZnNfZnVuY3Rpb24pOwogCWlmICghZi0+ZGVzY3JpcHRvcnMpCiAJCWdvdG8gZmFpbDsKIAotCWVjbS0+ZnMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChldGhfZnNfZnVuY3Rpb24sCi0JCQlmLT5kZXNjcmlwdG9ycywgJmZzX2luX2Rlc2MpOwotCWVjbS0+ZnMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoZXRoX2ZzX2Z1bmN0aW9uLAotCQkJZi0+ZGVzY3JpcHRvcnMsICZmc19vdXRfZGVzYyk7Ci0JZWNtLT5mcy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChldGhfZnNfZnVuY3Rpb24sCi0JCQlmLT5kZXNjcmlwdG9ycywgJmZzX25vdGlmeV9kZXNjKTsKKwllY20tPmZzLmluID0gdXNiX2ZpbmRfZW5kcG9pbnQoZWNtX2ZzX2Z1bmN0aW9uLAorCQkJZi0+ZGVzY3JpcHRvcnMsICZmc19lY21faW5fZGVzYyk7CisJZWNtLT5mcy5vdXQgPSB1c2JfZmluZF9lbmRwb2ludChlY21fZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX2VjbV9vdXRfZGVzYyk7CisJZWNtLT5mcy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChlY21fZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX2VjbV9ub3RpZnlfZGVzYyk7CiAKIAkvKiBzdXBwb3J0IGFsbCByZWxldmFudCBoYXJkd2FyZSBzcGVlZHMuLi4gd2UgZXhwZWN0IHRoYXQgd2hlbgogCSAqIGhhcmR3YXJlIGlzIGR1YWwgc3BlZWQsIGFsbCBidWxrLWNhcGFibGUgZW5kcG9pbnRzIHdvcmsgYXQKIAkgKiBib3RoIHNwZWVkcwogCSAqLwogCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkpIHsKLQkJaHNfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KLQkJCQlmc19pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3M7Ci0JCWhzX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQotCQkJCWZzX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3M7Ci0JCWhzX25vdGlmeV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQotCQkJCWZzX25vdGlmeV9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWhzX2VjbV9pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWZzX2VjbV9pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWhzX2VjbV9vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlmc19lY21fb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJaHNfZWNtX25vdGlmeV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWZzX2VjbV9ub3RpZnlfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwogCiAJCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KLQkJZi0+aHNfZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhldGhfaHNfZnVuY3Rpb24pOworCQlmLT5oc19kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGVjbV9oc19mdW5jdGlvbik7CiAJCWlmICghZi0+aHNfZGVzY3JpcHRvcnMpCiAJCQlnb3RvIGZhaWw7CiAKLQkJZWNtLT5ocy5pbiA9IHVzYl9maW5kX2VuZHBvaW50KGV0aF9oc19mdW5jdGlvbiwKLQkJCQlmLT5oc19kZXNjcmlwdG9ycywgJmhzX2luX2Rlc2MpOwotCQllY20tPmhzLm91dCA9IHVzYl9maW5kX2VuZHBvaW50KGV0aF9oc19mdW5jdGlvbiwKLQkJCQlmLT5oc19kZXNjcmlwdG9ycywgJmhzX291dF9kZXNjKTsKLQkJZWNtLT5ocy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChldGhfaHNfZnVuY3Rpb24sCi0JCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19ub3RpZnlfZGVzYyk7CisJCWVjbS0+aHMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChlY21faHNfZnVuY3Rpb24sCisJCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19lY21faW5fZGVzYyk7CisJCWVjbS0+aHMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoZWNtX2hzX2Z1bmN0aW9uLAorCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfZWNtX291dF9kZXNjKTsKKwkJZWNtLT5ocy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChlY21faHNfZnVuY3Rpb24sCisJCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19lY21fbm90aWZ5X2Rlc2MpOwogCX0KIAogCS8qIE5PVEU6ICBhbGwgdGhhdCBpcyBkb25lIHdpdGhvdXQga25vd2luZyBvciBjYXJpbmcgYWJvdXQKQEAgLTc5NSw3ICs3OTUsNyBAQAogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCXJldHVybiBzdGF0dXM7CiAJCWVjbV9zdHJpbmdfZGVmc1sxXS5pZCA9IHN0YXR1czsKLQkJZXRoZXJfZGVzYy5pTUFDQWRkcmVzcyA9IHN0YXR1czsKKwkJZWNtX2Rlc2MuaU1BQ0FkZHJlc3MgPSBzdGF0dXM7CiAJfQogCiAJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgb25lIG5ldyBpbnN0YW5jZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKaW5kZXggZWRhNGNkZTcuLjhhZmZlMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYwpAQCAtNzAsNyArNzAsNyBAQAogCiAvKiBmdWxsIHNwZWVkIHN1cHBvcnQ6ICovCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfc291cmNlX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX2xvb3Bfc291cmNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIApAQCAtNzgsNyArNzgsNyBAQAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfc2lua19kZXNjID0geworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc19sb29wX3NpbmtfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCkBAIC04OCwxNCArODgsMTQgQEAKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX2xvb3BiYWNrX2Rlc2NzW10gPSB7CiAJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmxvb3BiYWNrX2ludGYsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX2xvb3Bfc2lua19kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19sb29wX3NvdXJjZV9kZXNjLAogCU5VTEwsCiB9OwogCiAvKiBoaWdoIHNwZWVkIHN1cHBvcnQ6ICovCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfc291cmNlX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2xvb3Bfc291cmNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIApAQCAtMTAzLDcgKzEwMyw3IEBACiAJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19zaW5rX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2xvb3Bfc2lua19kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTExMyw4ICsxMTMsOCBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfbG9vcGJhY2tfZGVzY3NbXSA9IHsKIAkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbG9vcGJhY2tfaW50ZiwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc291cmNlX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NpbmtfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfbG9vcF9zb3VyY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfbG9vcF9zaW5rX2Rlc2MsCiAJTlVMTCwKIH07CiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogCiAJLyogYWxsb2NhdGUgZW5kcG9pbnRzICovCiAKLQlsb29wLT5pbl9lcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX3NvdXJjZV9kZXNjKTsKKwlsb29wLT5pbl9lcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX2xvb3Bfc291cmNlX2Rlc2MpOwogCWlmICghbG9vcC0+aW5fZXApIHsKIGF1dG9jb25mX2ZhaWw6CiAJCUVSUk9SKGNkZXYsICIlczogY2FuJ3QgYXV0b2NvbmZpZ3VyZSBvbiAlc1xuIiwKQEAgLTE2MSwxNyArMTYxLDE3IEBACiAJfQogCWxvb3AtPmluX2VwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCiAKLQlsb29wLT5vdXRfZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZmc19zaW5rX2Rlc2MpOworCWxvb3AtPm91dF9lcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX2xvb3Bfc2lua19kZXNjKTsKIAlpZiAoIWxvb3AtPm91dF9lcCkKIAkJZ290byBhdXRvY29uZl9mYWlsOwogCWxvb3AtPm91dF9lcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLwogCiAJLyogc3VwcG9ydCBoaWdoIHNwZWVkIGhhcmR3YXJlICovCiAJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkgewotCQloc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KLQkJCQlmc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwotCQloc19zaW5rX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9Ci0JCQkJZnNfc2lua19kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWhzX2xvb3Bfc291cmNlX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZnNfbG9vcF9zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQloc19sb29wX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlmc19sb29wX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwogCQlmLT5oc19kZXNjcmlwdG9ycyA9IGhzX2xvb3BiYWNrX2Rlc2NzOwogCX0KIApAQCAtMjU1LDggKzI1NSwxMCBAQAogCXN0cnVjdCB1c2JfcmVxdWVzdAkJCSpyZXE7CiAJdW5zaWduZWQJCQkJaTsKIAotCXNyYyA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsICZoc19zb3VyY2VfZGVzYywgJmZzX3NvdXJjZV9kZXNjKTsKLQlzaW5rID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwgJmhzX3NpbmtfZGVzYywgJmZzX3NpbmtfZGVzYyk7CisJc3JjID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwKKwkJCSZoc19sb29wX3NvdXJjZV9kZXNjLCAmZnNfbG9vcF9zb3VyY2VfZGVzYyk7CisJc2luayA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkmaHNfbG9vcF9zaW5rX2Rlc2MsICZmc19sb29wX3NpbmtfZGVzYyk7CiAKIAkvKiBvbmUgZW5kcG9pbnQgd3JpdGVzIGRhdGEgYmFjayBJTiB0byB0aGUgaG9zdCAqLwogCWVwID0gbG9vcC0+aW5fZXA7CkBAIC0zNTAsNyArMzUyLDYgQEAKIAkuYmluZAkJPSBsb29wYmFja19iaW5kX2NvbmZpZywKIAkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDIsCiAJLmJtQXR0cmlidXRlcwk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyCT0gMSwJLyogMiBtQSwgbWluaW1hbCAqLwogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGMyZTdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jCkBAIC0wLDAgKzEsNDkzIEBACisvKgorICogZl9vYmV4LmMgLS0gVVNCIENEQyBPQkVYIGZ1bmN0aW9uIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29udGFjdDogRmVsaXBlIEJhbGJpIDxmZWxpcGUuYmFsYmlAbm9raWEuY29tPgorICoKKyAqIEJhc2VkIG9uIGZfYWNtLmMgYnkgQWwgQm9yY2hlcnMgYW5kIERhdmlkIEJyb3duZWxsLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyogI2RlZmluZSBWRVJCT1NFX0RFQlVHICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ1X3NlcmlhbC5oIgorI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgorCisKKy8qCisgKiBUaGlzIENEQyBPQkVYIGZ1bmN0aW9uIHN1cHBvcnQganVzdCBwYWNrYWdlcyBhIFRUWS1pc2ggYnl0ZSBzdHJlYW0uCisgKiBBIHVzZXIgbW9kZSBzZXJ2ZXIgd2lsbCBwdXQgaXQgaW50byAicmF3IiBtb2RlIGFuZCBoYW5kbGUgYWxsIHRoZQorICogcmVsZXZhbnQgcHJvdG9jb2wgZGV0YWlscyAuLi4gdGhpcyBpcyBqdXN0IGEga2VybmVsIHBhc3N0aHJvdWdoLgorICogV2hlbiBwb3NzaWJsZSwgd2UgcHJldmVudCBnYWRnZXQgZW51bWVyYXRpb24gdW50aWwgdGhhdCBzZXJ2ZXIgaXMKKyAqIHJlYWR5IHRvIGhhbmRsZSB0aGUgY29tbWFuZHMuCisgKi8KKworc3RydWN0IG9iZXhfZXBfZGVzY3MgeworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqb2JleF9pbjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKm9iZXhfb3V0OworfTsKKworc3RydWN0IGZfb2JleCB7CisJc3RydWN0IGdzZXJpYWwJCQlwb3J0OworCXU4CQkJCWN0cmxfaWQ7CisJdTgJCQkJZGF0YV9pZDsKKwl1OAkJCQlwb3J0X251bTsKKwl1OAkJCQljYW5fYWN0aXZhdGU7CisKKwlzdHJ1Y3Qgb2JleF9lcF9kZXNjcwkJZnM7CisJc3RydWN0IG9iZXhfZXBfZGVzY3MJCWhzOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZl9vYmV4ICpmdW5jX3RvX29iZXgoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmX29iZXgsIHBvcnQuZnVuYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZfb2JleCAqcG9ydF90b19vYmV4KHN0cnVjdCBnc2VyaWFsICpwKQoreworCXJldHVybiBjb250YWluZXJfb2YocCwgc3RydWN0IGZfb2JleCwgcG9ydCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgT0JFWF9DVFJMX0lEWAkwCisjZGVmaW5lIE9CRVhfREFUQV9JRFgJMQorCitzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcgb2JleF9zdHJpbmdfZGVmc1tdID0geworCVtPQkVYX0NUUkxfSURYXS5zCT0gIkNEQyBPYmplY3QgRXhjaGFuZ2UgKE9CRVgpIiwKKwlbT0JFWF9EQVRBX0lEWF0ucwk9ICJDREMgT0JFWCBEYXRhIiwKKwl7ICB9LAkvKiBlbmQgb2YgbGlzdCAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3Mgb2JleF9zdHJpbmdfdGFibGUgPSB7CisJLmxhbmd1YWdlCQk9IDB4MDQwOSwJLyogZW4tVVMgKi8KKwkuc3RyaW5ncwkJPSBvYmV4X3N0cmluZ19kZWZzLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKm9iZXhfc3RyaW5nc1tdID0geworCSZvYmV4X3N0cmluZ190YWJsZSwKKwlOVUxMLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3Igb2JleF9jb250cm9sX2ludGYgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aAkJPSBzaXplb2Yob2JleF9jb250cm9sX2ludGYpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfSU5URVJGQUNFLAorCS5iSW50ZXJmYWNlTnVtYmVyCT0gMCwKKworCS5iQWx0ZXJuYXRlU2V0dGluZwk9IDAsCisJLmJOdW1FbmRwb2ludHMJCT0gMCwKKwkuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX0NPTU0sCisJLmJJbnRlcmZhY2VTdWJDbGFzcwk9IFVTQl9DRENfU1VCQ0xBU1NfT0JFWCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIG9iZXhfZGF0YV9ub3BfaW50ZiBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IHNpemVvZihvYmV4X2RhdGFfbm9wX2ludGYpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfSU5URVJGQUNFLAorCS5iSW50ZXJmYWNlTnVtYmVyCT0gMSwKKworCS5iQWx0ZXJuYXRlU2V0dGluZwk9IDAsCisJLmJOdW1FbmRwb2ludHMJCT0gMCwKKwkuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX0NEQ19EQVRBLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3Igb2JleF9kYXRhX2ludGYgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aAkJPSBzaXplb2Yob2JleF9kYXRhX2ludGYpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfSU5URVJGQUNFLAorCS5iSW50ZXJmYWNlTnVtYmVyCT0gMiwKKworCS5iQWx0ZXJuYXRlU2V0dGluZwk9IDEsCisJLmJOdW1FbmRwb2ludHMJCT0gMiwKKwkuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX0NEQ19EQVRBLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIG9iZXhfY2RjX2hlYWRlcl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gc2l6ZW9mKG9iZXhfY2RjX2hlYWRlcl9kZXNjKSwKKwkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVNCX0NEQ19IRUFERVJfVFlQRSwKKwkuYmNkQ0RDCQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEyMCksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyBvYmV4X2NkY191bmlvbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gc2l6ZW9mKG9iZXhfY2RjX3VuaW9uX2Rlc2MpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVU0JfQ0RDX1VOSU9OX1RZUEUsCisJLmJNYXN0ZXJJbnRlcmZhY2UwCT0gMSwKKwkuYlNsYXZlSW50ZXJmYWNlMAk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfb2JleF9kZXNjIG9iZXhfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IHNpemVvZihvYmV4X2Rlc2MpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVU0JfQ0RDX09CRVhfVFlQRSwKKwkuYmNkVmVyc2lvbgkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCit9OworCisvKiBIaWdoLVNwZWVkIFN1cHBvcnQgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBvYmV4X2hzX2VwX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzCT0gVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG9iZXhfaHNfZXBfaW5fZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IFVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcwk9IFVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2NvbnRyb2xfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9jZGNfaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9jZGNfdW5pb25fZGVzYywKKworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2RhdGFfbm9wX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfZGF0YV9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2hzX2VwX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfaHNfZXBfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKy8qIEZ1bGwtU3BlZWQgU3VwcG9ydCAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG9iZXhfZnNfZXBfaW5fZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IFVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcwk9IFVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBvYmV4X2ZzX2VwX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzCT0gVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9jb250cm9sX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfY2RjX2hlYWRlcl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfY2RjX3VuaW9uX2Rlc2MsCisKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9kYXRhX25vcF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2RhdGFfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9mc19lcF9pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2ZzX2VwX291dF9kZXNjLAorCU5VTEwsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9iZXhfc2V0X2FsdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLCB1bnNpZ25lZCBpbnRmLCB1bnNpZ25lZCBhbHQpCit7CisJc3RydWN0IGZfb2JleAkJKm9iZXggPSBmdW5jX3RvX29iZXgoZik7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OworCisJaWYgKGludGYgPT0gb2JleC0+Y3RybF9pZCkgeworCQlpZiAoYWx0ICE9IDApCisJCQlnb3RvIGZhaWw7CisJCS8qIE5PUCAqLworCQlEQkcoY2RldiwgInJlc2V0IG9iZXggdHR5R1MlZCBjb250cm9sXG4iLCBvYmV4LT5wb3J0X251bSk7CisKKwl9IGVsc2UgaWYgKGludGYgPT0gb2JleC0+ZGF0YV9pZCkgeworCQlpZiAoYWx0ID4gMSkKKwkJCWdvdG8gZmFpbDsKKworCQlpZiAob2JleC0+cG9ydC5pbi0+ZHJpdmVyX2RhdGEpIHsKKwkJCURCRyhjZGV2LCAicmVzZXQgb2JleCB0dHlHUyVkXG4iLCBvYmV4LT5wb3J0X251bSk7CisJCQlnc2VyaWFsX2Rpc2Nvbm5lY3QoJm9iZXgtPnBvcnQpOworCQl9CisKKwkJaWYgKCFvYmV4LT5wb3J0LmluX2Rlc2MpIHsKKwkJCURCRyhjZGV2LCAiaW5pdCBvYmV4IHR0eUdTJWRcbiIsIG9iZXgtPnBvcnRfbnVtKTsKKwkJCW9iZXgtPnBvcnQuaW5fZGVzYyA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCW9iZXgtPmhzLm9iZXhfaW4sIG9iZXgtPmZzLm9iZXhfaW4pOworCQkJb2JleC0+cG9ydC5vdXRfZGVzYyA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCW9iZXgtPmhzLm9iZXhfb3V0LCBvYmV4LT5mcy5vYmV4X291dCk7CisJCX0KKworCQlpZiAoYWx0ID09IDEpIHsKKwkJCURCRyhjZGV2LCAiYWN0aXZhdGUgb2JleCB0dHlHUyVkXG4iLCBvYmV4LT5wb3J0X251bSk7CisJCQlnc2VyaWFsX2Nvbm5lY3QoJm9iZXgtPnBvcnQsIG9iZXgtPnBvcnRfbnVtKTsKKwkJfQorCisJfSBlbHNlCisJCWdvdG8gZmFpbDsKKworCXJldHVybiAwOworCitmYWlsOgorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IG9iZXhfZ2V0X2FsdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLCB1bnNpZ25lZCBpbnRmKQoreworCXN0cnVjdCBmX29iZXgJCSpvYmV4ID0gZnVuY190b19vYmV4KGYpOworCisJaWYgKGludGYgPT0gb2JleC0+Y3RybF9pZCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gb2JleC0+cG9ydC5pbi0+ZHJpdmVyX2RhdGEgPyAxIDogMDsKK30KKworc3RhdGljIHZvaWQgb2JleF9kaXNhYmxlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJc3RydWN0IGZfb2JleAkqb2JleCA9IGZ1bmNfdG9fb2JleChmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisKKwlEQkcoY2RldiwgIm9iZXggdHR5R1MlZCBkaXNhYmxlXG4iLCBvYmV4LT5wb3J0X251bSk7CisJZ3NlcmlhbF9kaXNjb25uZWN0KCZvYmV4LT5wb3J0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgb2JleF9jb25uZWN0KHN0cnVjdCBnc2VyaWFsICpnKQoreworCXN0cnVjdCBmX29iZXgJCSpvYmV4ID0gcG9ydF90b19vYmV4KGcpOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGctPmZ1bmMuY29uZmlnLT5jZGV2OworCWludAkJCXN0YXR1czsKKworCWlmICghb2JleC0+Y2FuX2FjdGl2YXRlKQorCQlyZXR1cm47CisKKwlzdGF0dXMgPSB1c2JfZnVuY3Rpb25fYWN0aXZhdGUoJmctPmZ1bmMpOworCWlmIChzdGF0dXMpCisJCURCRyhjZGV2LCAib2JleCB0dHlHUyVkIGZ1bmN0aW9uIGFjdGl2YXRlIC0tPiAlZFxuIiwKKwkJCW9iZXgtPnBvcnRfbnVtLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBvYmV4X2Rpc2Nvbm5lY3Qoc3RydWN0IGdzZXJpYWwgKmcpCit7CisJc3RydWN0IGZfb2JleAkJKm9iZXggPSBwb3J0X3RvX29iZXgoZyk7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZy0+ZnVuYy5jb25maWctPmNkZXY7CisJaW50CQkJc3RhdHVzOworCisJaWYgKCFvYmV4LT5jYW5fYWN0aXZhdGUpCisJCXJldHVybjsKKworCXN0YXR1cyA9IHVzYl9mdW5jdGlvbl9kZWFjdGl2YXRlKCZnLT5mdW5jKTsKKwlpZiAoc3RhdHVzKQorCQlEQkcoY2RldiwgIm9iZXggdHR5R1MlZCBmdW5jdGlvbiBkZWFjdGl2YXRlIC0tPiAlZFxuIiwKKwkJCW9iZXgtPnBvcnRfbnVtLCBzdGF0dXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdAorb2JleF9iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBjLT5jZGV2OworCXN0cnVjdCBmX29iZXgJCSpvYmV4ID0gZnVuY190b19vYmV4KGYpOworCWludAkJCXN0YXR1czsKKwlzdHJ1Y3QgdXNiX2VwCQkqZXA7CisKKwkvKiBhbGxvY2F0ZSBpbnN0YW5jZS1zcGVjaWZpYyBpbnRlcmZhY2UgSURzLCBhbmQgcGF0Y2ggZGVzY3JpcHRvcnMgKi8KKworCXN0YXR1cyA9IHVzYl9pbnRlcmZhY2VfaWQoYywgZik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwlvYmV4LT5jdHJsX2lkID0gc3RhdHVzOworCisJb2JleF9jb250cm9sX2ludGYuYkludGVyZmFjZU51bWJlciA9IHN0YXR1czsKKwlvYmV4X2NkY191bmlvbl9kZXNjLmJNYXN0ZXJJbnRlcmZhY2UwID0gc3RhdHVzOworCisJc3RhdHVzID0gdXNiX2ludGVyZmFjZV9pZChjLCBmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCW9iZXgtPmRhdGFfaWQgPSBzdGF0dXM7CisKKwlvYmV4X2RhdGFfbm9wX2ludGYuYkludGVyZmFjZU51bWJlciA9IHN0YXR1czsKKwlvYmV4X2RhdGFfaW50Zi5iSW50ZXJmYWNlTnVtYmVyID0gc3RhdHVzOworCW9iZXhfY2RjX3VuaW9uX2Rlc2MuYlNsYXZlSW50ZXJmYWNlMCA9IHN0YXR1czsKKworCS8qIGFsbG9jYXRlIGluc3RhbmNlLXNwZWNpZmljIGVuZHBvaW50cyAqLworCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZvYmV4X2ZzX2VwX2luX2Rlc2MpOworCWlmICghZXApCisJCWdvdG8gZmFpbDsKKwlvYmV4LT5wb3J0LmluID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmb2JleF9mc19lcF9vdXRfZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBmYWlsOworCW9iZXgtPnBvcnQub3V0ID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KKwlmLT5kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGZzX2Z1bmN0aW9uKTsKKworCW9iZXgtPmZzLm9iZXhfaW4gPSB1c2JfZmluZF9lbmRwb2ludChmc19mdW5jdGlvbiwKKwkJCWYtPmRlc2NyaXB0b3JzLCAmb2JleF9mc19lcF9pbl9kZXNjKTsKKwlvYmV4LT5mcy5vYmV4X291dCA9IHVzYl9maW5kX2VuZHBvaW50KGZzX2Z1bmN0aW9uLAorCQkJZi0+ZGVzY3JpcHRvcnMsICZvYmV4X2ZzX2VwX291dF9kZXNjKTsKKworCS8qIHN1cHBvcnQgYWxsIHJlbGV2YW50IGhhcmR3YXJlIHNwZWVkcy4uLiB3ZSBleHBlY3QgdGhhdCB3aGVuCisJICogaGFyZHdhcmUgaXMgZHVhbCBzcGVlZCwgYWxsIGJ1bGstY2FwYWJsZSBlbmRwb2ludHMgd29yayBhdAorCSAqIGJvdGggc3BlZWRzCisJICovCisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkgeworCisJCW9iZXhfaHNfZXBfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlvYmV4X2ZzX2VwX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJb2JleF9oc19lcF9vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlvYmV4X2ZzX2VwX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisKKwkJLyogY29weSBkZXNjcmlwdG9ycywgYW5kIHRyYWNrIGVuZHBvaW50IGNvcGllcyAqLworCQlmLT5oc19kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGhzX2Z1bmN0aW9uKTsKKworCQlvYmV4LT5ocy5vYmV4X2luID0gdXNiX2ZpbmRfZW5kcG9pbnQoaHNfZnVuY3Rpb24sCisJCQkJZi0+ZGVzY3JpcHRvcnMsICZvYmV4X2hzX2VwX2luX2Rlc2MpOworCQlvYmV4LT5ocy5vYmV4X291dCA9IHVzYl9maW5kX2VuZHBvaW50KGhzX2Z1bmN0aW9uLAorCQkJCWYtPmRlc2NyaXB0b3JzLCAmb2JleF9oc19lcF9vdXRfZGVzYyk7CisJfQorCisJLyogQXZvaWQgbGV0dGluZyB0aGlzIGdhZGdldCBlbnVtZXJhdGUgdW50aWwgdGhlIHVzZXJzcGFjZQorCSAqIE9CRVggc2VydmVyIGlzIGFjdGl2ZS4KKwkgKi8KKwlzdGF0dXMgPSB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZShmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJV0FSTklORyhjZGV2LCAib2JleCB0dHlHUyVkOiBjYW4ndCBwcmV2ZW50IGVudW1lcmF0aW9uLCAlZFxuIiwKKwkJCW9iZXgtPnBvcnRfbnVtLCBzdGF0dXMpOworCWVsc2UKKwkJb2JleC0+Y2FuX2FjdGl2YXRlID0gdHJ1ZTsKKworCisJREJHKGNkZXYsICJvYmV4IHR0eUdTJWQ6ICVzIHNwZWVkIElOLyVzIE9VVC8lc1xuIiwKKwkJCW9iZXgtPnBvcnRfbnVtLAorCQkJZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpID8gImR1YWwiIDogImZ1bGwiLAorCQkJb2JleC0+cG9ydC5pbi0+bmFtZSwgb2JleC0+cG9ydC5vdXQtPm5hbWUpOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJLyogd2UgbWlnaHQgYXMgd2VsbCByZWxlYXNlIG91ciBjbGFpbXMgb24gZW5kcG9pbnRzICovCisJaWYgKG9iZXgtPnBvcnQub3V0KQorCQlvYmV4LT5wb3J0Lm91dC0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCWlmIChvYmV4LT5wb3J0LmluKQorCQlvYmV4LT5wb3J0LmluLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwlFUlJPUihjZGV2LCAiJXMvJXA6IGNhbid0IGJpbmQsIGVyciAlZFxuIiwgZi0+bmFtZSwgZiwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkCitvYmV4X3VuYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkKKwkJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+aHNfZGVzY3JpcHRvcnMpOworCXVzYl9mcmVlX2Rlc2NyaXB0b3JzKGYtPmRlc2NyaXB0b3JzKTsKKwlrZnJlZShmdW5jX3RvX29iZXgoZikpOworfQorCisvKiBTb21lIGNvbnRyb2xsZXJzIGNhbid0IHN1cHBvcnQgQ0RDIE9CRVggLi4uICovCitzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3N1cHBvcnRfb2JleChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCit7CisJLyogU2luY2UgdGhlIGZpcnN0IGludGVyZmFjZSBpcyBhIE5PUCwgd2UgY2FuIGlnbm9yZSB0aGUKKwkgKiBpc3N1ZSBvZiBtdWx0aS1pbnRlcmZhY2Ugc3VwcG9ydCBvbiBtb3N0IGNvbnRyb2xsZXJzLgorCSAqCisJICogQWx0c2V0dGluZ3MgYXJlIG1hbmRhdG9yeSwgaG93ZXZlci4uLgorCSAqLworCWlmICghZ2FkZ2V0X3N1cHBvcnRzX2FsdHNldHRpbmdzKGMtPmNkZXYtPmdhZGdldCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyAqcHJvYmFibHkqIGZpbmUgLi4uICovCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogb2JleF9iaW5kX2NvbmZpZyAtIGFkZCBhIENEQyBPQkVYIGZ1bmN0aW9uIHRvIGEgY29uZmlndXJhdGlvbgorICogQGM6IHRoZSBjb25maWd1cmF0aW9uIHRvIHN1cHBvcnQgdGhlIENEQyBPQkVYIGluc3RhbmNlCisgKiBAcG9ydF9udW06IC9kZXYvdHR5R1MqIHBvcnQgdGhpcyBpbnRlcmZhY2Ugd2lsbCB1c2UKKyAqIENvbnRleHQ6IHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgZ2FkZ2V0IHNldHVwCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSBjYWxsZWQgQGdzZXJpYWxfc2V0dXAoKSB3aXRoIGVub3VnaCBwb3J0cyB0bworICogaGFuZGxlIGFsbCB0aGUgb25lcyBpdCBiaW5kcy4gIENhbGxlciBpcyBhbHNvIHJlc3BvbnNpYmxlCisgKiBmb3IgY2FsbGluZyBAZ3NlcmlhbF9jbGVhbnVwKCkgYmVmb3JlIG1vZHVsZSB1bmxvYWQuCisgKi8KK2ludCBfX2luaXQgb2JleF9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IHBvcnRfbnVtKQoreworCXN0cnVjdCBmX29iZXgJKm9iZXg7CisJaW50CQlzdGF0dXM7CisKKwlpZiAoIWNhbl9zdXBwb3J0X29iZXgoYykpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbWF5YmUgYWxsb2NhdGUgZGV2aWNlLWdsb2JhbCBzdHJpbmcgSURzLCBhbmQgcGF0Y2ggZGVzY3JpcHRvcnMgKi8KKwlpZiAob2JleF9zdHJpbmdfZGVmc1tPQkVYX0NUUkxfSURYXS5pZCA9PSAwKSB7CisJCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoYy0+Y2Rldik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJb2JleF9zdHJpbmdfZGVmc1tPQkVYX0NUUkxfSURYXS5pZCA9IHN0YXR1czsKKworCQlvYmV4X2NvbnRyb2xfaW50Zi5pSW50ZXJmYWNlID0gc3RhdHVzOworCisJCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoYy0+Y2Rldik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJb2JleF9zdHJpbmdfZGVmc1tPQkVYX0RBVEFfSURYXS5pZCA9IHN0YXR1czsKKworCQlvYmV4X2RhdGFfbm9wX2ludGYuaUludGVyZmFjZSA9CisJCQlvYmV4X2RhdGFfaW50Zi5pSW50ZXJmYWNlID0gc3RhdHVzOworCX0KKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG9uZSBuZXcgaW5zdGFuY2UgKi8KKwlvYmV4ID0ga3phbGxvYyhzaXplb2YgKm9iZXgsIEdGUF9LRVJORUwpOworCWlmICghb2JleCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvYmV4LT5wb3J0X251bSA9IHBvcnRfbnVtOworCisJb2JleC0+cG9ydC5jb25uZWN0ID0gb2JleF9jb25uZWN0OworCW9iZXgtPnBvcnQuZGlzY29ubmVjdCA9IG9iZXhfZGlzY29ubmVjdDsKKworCW9iZXgtPnBvcnQuZnVuYy5uYW1lID0gIm9iZXgiOworCW9iZXgtPnBvcnQuZnVuYy5zdHJpbmdzID0gb2JleF9zdHJpbmdzOworCS8qIGRlc2NyaXB0b3JzIGFyZSBwZXItaW5zdGFuY2UgY29waWVzICovCisJb2JleC0+cG9ydC5mdW5jLmJpbmQgPSBvYmV4X2JpbmQ7CisJb2JleC0+cG9ydC5mdW5jLnVuYmluZCA9IG9iZXhfdW5iaW5kOworCW9iZXgtPnBvcnQuZnVuYy5zZXRfYWx0ID0gb2JleF9zZXRfYWx0OworCW9iZXgtPnBvcnQuZnVuYy5nZXRfYWx0ID0gb2JleF9nZXRfYWx0OworCW9iZXgtPnBvcnQuZnVuYy5kaXNhYmxlID0gb2JleF9kaXNhYmxlOworCisJc3RhdHVzID0gdXNiX2FkZF9mdW5jdGlvbihjLCAmb2JleC0+cG9ydC5mdW5jKTsKKwlpZiAoc3RhdHVzKQorCQlrZnJlZShvYmV4KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK01PRFVMRV9BVVRIT1IoIkZlbGlwZSBCYWxiaSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCmluZGV4IGYxOGMzYTEuLmRjODRkMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMKQEAgLTU1Miw3ICs1NTIsNiBAQAogCS5zZXR1cAkJPSBzb3VyY2VzaW5rX3NldHVwLAogCS5iQ29uZmlndXJhdGlvblZhbHVlID0gMywKIAkuYm1BdHRyaWJ1dGVzCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiAJLyogLmlDb25maWd1cmF0aW9uID0gRFlOQU1JQyAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc3Vic2V0LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYwppbmRleCBhY2I4ZDIzLi5mZTE4MzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYwpAQCAtMTAzLDggKzEwMyw4IEBACiAJLyogLmlJbnRlcmZhY2UgPSBEWU5BTUlDICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MgaGVhZGVyX2Rlc2MgX19pbml0ZGF0YSA9IHsKLQkuYkxlbmd0aCA9CQlzaXplb2YgaGVhZGVyX2Rlc2MsCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MgbWRsbV9oZWFkZXJfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBtZGxtX2hlYWRlcl9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAogCkBAIC0xNTIsNyArMTUyLDcgQEAKIAogLyogZnVsbCBzcGVlZCBzdXBwb3J0OiAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfc3Vic2V0X2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCkBAIC0xNjAsNyArMTYwLDcgQEAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX3N1YnNldF9vdXRfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTE3MCwxOCArMTcwLDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19ldGhfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZzdWJzZXRfZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9oZWFkZXJfZGVzYywKIAkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZtZGxtX2RldGFpbF9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZldGhlcl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19pbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc3Vic2V0X2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3N1YnNldF9vdXRfZGVzYywKIAlOVUxMLAogfTsKIAogLyogaGlnaCBzcGVlZCBzdXBwb3J0OiAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfc3Vic2V0X2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCkBAIC0xODksNyArMTg5LDcgQEAKIAkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX3N1YnNldF9vdXRfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTE5OSwxMiArMTk5LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19ldGhfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZzdWJzZXRfZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9oZWFkZXJfZGVzYywKIAkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZtZGxtX2RldGFpbF9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZldGhlcl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19pbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc3Vic2V0X2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3N1YnNldF9vdXRfZGVzYywKIAlOVUxMLAogfTsKIApAQCAtMjgxLDEzICsyODEsMTMgQEAKIAlzdGF0dXMgPSAtRU5PREVWOwogCiAJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgZW5kcG9pbnRzICovCi0JZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZmc19pbl9kZXNjKTsKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX3N1YnNldF9pbl9kZXNjKTsKIAlpZiAoIWVwKQogCQlnb3RvIGZhaWw7CiAJZ2V0aC0+cG9ydC5pbl9lcCA9IGVwOwogCWVwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCiAKLQllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX291dF9kZXNjKTsKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX3N1YnNldF9vdXRfZGVzYyk7CiAJaWYgKCFlcCkKIAkJZ290byBmYWlsOwogCWdldGgtPnBvcnQub3V0X2VwID0gZXA7CkBAIC0yOTcsOSArMjk3LDkgQEAKIAlmLT5kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGZzX2V0aF9mdW5jdGlvbik7CiAKIAlnZXRoLT5mcy5pbiA9IHVzYl9maW5kX2VuZHBvaW50KGZzX2V0aF9mdW5jdGlvbiwKLQkJCWYtPmRlc2NyaXB0b3JzLCAmZnNfaW5fZGVzYyk7CisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX3N1YnNldF9pbl9kZXNjKTsKIAlnZXRoLT5mcy5vdXQgPSB1c2JfZmluZF9lbmRwb2ludChmc19ldGhfZnVuY3Rpb24sCi0JCQlmLT5kZXNjcmlwdG9ycywgJmZzX291dF9kZXNjKTsKKwkJCWYtPmRlc2NyaXB0b3JzLCAmZnNfc3Vic2V0X291dF9kZXNjKTsKIAogCiAJLyogc3VwcG9ydCBhbGwgcmVsZXZhbnQgaGFyZHdhcmUgc3BlZWRzLi4uIHdlIGV4cGVjdCB0aGF0IHdoZW4KQEAgLTMwNywxOCArMzA3LDE4IEBACiAJICogYm90aCBzcGVlZHMKIAkgKi8KIAlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKSB7Ci0JCWhzX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9Ci0JCQkJZnNfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwotCQloc19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KLQkJCQlmc19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQloc19zdWJzZXRfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlmc19zdWJzZXRfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQloc19zdWJzZXRfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZnNfc3Vic2V0X291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CiAKIAkJLyogY29weSBkZXNjcmlwdG9ycywgYW5kIHRyYWNrIGVuZHBvaW50IGNvcGllcyAqLwogCQlmLT5oc19kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGhzX2V0aF9mdW5jdGlvbik7CiAKIAkJZ2V0aC0+aHMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChoc19ldGhfZnVuY3Rpb24sCi0JCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19pbl9kZXNjKTsKKwkJCQlmLT5oc19kZXNjcmlwdG9ycywgJmhzX3N1YnNldF9pbl9kZXNjKTsKIAkJZ2V0aC0+aHMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoaHNfZXRoX2Z1bmN0aW9uLAotCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfb3V0X2Rlc2MpOworCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfc3Vic2V0X291dF9kZXNjKTsKIAl9CiAKIAkvKiBOT1RFOiAgYWxsIHRoYXQgaXMgZG9uZSB3aXRob3V0IGtub3dpbmcgb3IgY2FyaW5nIGFib3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKaW5kZXggZWEyYzMxZC4uYzRlNjJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpAQCAtMjQ1LDYgKzI0NSwxOCBAQAogI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgogCiAKKworLyoKKyAqIEtidWlsZCBpcyBub3QgdmVyeSBjb29wZXJhdGl2ZSB3aXRoIHJlc3BlY3QgdG8gbGlua2luZyBzZXBhcmF0ZWx5CisgKiBjb21waWxlZCBsaWJyYXJ5IG9iamVjdHMgaW50byBvbmUgbW9kdWxlLiAgU28gZm9yIG5vdyB3ZSB3b24ndCB1c2UKKyAqIHNlcGFyYXRlIGNvbXBpbGF0aW9uIC4uLiBlbnN1cmluZyBpbml0L2V4aXQgc2VjdGlvbnMgd29yayB0byBzaHJpbmsKKyAqIHRoZSBydW50aW1lIGZvb3RwcmludCwgYW5kIGdpdmluZyB1cyBhdCBsZWFzdCBzb21lIHBhcnRzIG9mIHdoYXQKKyAqIGEgImdjYyAtLWNvbWJpbmUgLi4uIHBhcnQxLmMgcGFydDIuYyBwYXJ0My5jIC4uLiAiIGJ1aWxkIHdvdWxkLgorICovCisjaW5jbHVkZSAidXNic3RyaW5nLmMiCisjaW5jbHVkZSAiY29uZmlnLmMiCisjaW5jbHVkZSAiZXBhdXRvY29uZi5jIgorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjZGVmaW5lIERSSVZFUl9ERVNDCQkiRmlsZS1iYWNrZWQgU3RvcmFnZSBHYWRnZXQiCkBAIC04MzksNyArODUxLDcgQEAKIAkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9CUNPTkZJR19WQUxVRSwKIAkuaUNvbmZpZ3VyYXRpb24gPQlTVFJJTkdfQ09ORklHLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIgPQkJMSwJLy8gc2VsZi1wb3dlcmVkCisJLmJNYXhQb3dlciA9CQlDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVcgLyAyLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IKQEAgLTI2NjQsMTEgKzI2NzYsMjQgQEAKIAkvKiBWZXJpZnkgdGhlIGxlbmd0aCBvZiB0aGUgY29tbWFuZCBpdHNlbGYgKi8KIAlpZiAoY21uZF9zaXplICE9IGZzZy0+Y21uZF9zaXplKSB7CiAKLQkJLyogU3BlY2lhbCBjYXNlIHdvcmthcm91bmQ6IE1TLVdpbmRvd3MgaXNzdWVzIFJFUVVFU1QgU0VOU0UKLQkJICogd2l0aCBjYnctPkxlbmd0aCA9PSAxMiAoaXQgc2hvdWxkIGJlIDYpLiAqLwotCQlpZiAoZnNnLT5jbW5kWzBdID09IFNDX1JFUVVFU1RfU0VOU0UgJiYgZnNnLT5jbW5kX3NpemUgPT0gMTIpCisJCS8qIFNwZWNpYWwgY2FzZSB3b3JrYXJvdW5kOiBUaGVyZSBhcmUgcGxlbnR5IG9mIGJ1Z2d5IFNDU0kKKwkJICogaW1wbGVtZW50YXRpb25zLiBNYW55IGhhdmUgaXNzdWVzIHdpdGggY2J3LT5MZW5ndGgKKwkJICogZmllbGQgcGFzc2luZyBhIHdyb25nIGNvbW1hbmQgc2l6ZS4gRm9yIHRob3NlIGNhc2VzIHdlCisJCSAqIGFsd2F5cyB0cnkgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0gYnkgdXNpbmcgdGhlIGxlbmd0aAorCQkgKiBzZW50IGJ5IHRoZSBob3N0IHNpZGUgcHJvdmlkZWQgaXQgaXMgYXQgbGVhc3QgYXMgbGFyZ2UKKwkJICogYXMgdGhlIGNvcnJlY3QgY29tbWFuZCBsZW5ndGguCisJCSAqIEV4YW1wbGVzIG9mIHN1Y2ggY2FzZXMgd291bGQgYmUgTVMtV2luZG93cywgd2hpY2ggaXNzdWVzCisJCSAqIFJFUVVFU1QgU0VOU0Ugd2l0aCBjYnctPkxlbmd0aCA9PSAxMiB3aGVyZSBpdCBzaG91bGQKKwkJICogYmUgNiwgYW5kIHhib3gzNjAgaXNzdWluZyBJTlFVSVJZLCBURVNUIFVOSVQgUkVBRFkgYW5kCisJCSAqIFJFUVVFU1QgU0VOU0Ugd2l0aCBjYnctPkxlbmd0aCA9PSAxMCB3aGVyZSBpdCBzaG91bGQKKwkJICogYmUgNiBhcyB3ZWxsLgorCQkgKi8KKwkJaWYgKGNtbmRfc2l6ZSA8PSBmc2ctPmNtbmRfc2l6ZSkgeworCQkJREJHKGZzZywgIiVzIGlzIGJ1Z2d5ISBFeHBlY3RlZCBsZW5ndGggJWQgIgorCQkJCQkiYnV0IHdlIGdvdCAlZFxuIiwgbmFtZSwKKwkJCQkJY21uZF9zaXplLCBmc2ctPmNtbmRfc2l6ZSk7CiAJCQljbW5kX3NpemUgPSBmc2ctPmNtbmRfc2l6ZTsKLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlmc2ctPnBoYXNlX2Vycm9yID0gMTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmU4YjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYwpAQCAtMCwwICsxLDI3NjAgQEAKKy8qCisgKiBkcml2ZXIvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIAlYaWUgWGlhb2JvIDxYLlhpZUBmcmVlc2NhbGUuY29tPgorICogCUxpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CisgKiAJQmFzZWQgb24gYmFyZWJvYXJkIGNvZGUgZnJvbSBTaGxvbWkgR3JpZGlzaC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEZyZWVzY2xlIFFFL0NQTSBVU0IgUGhlcmlwaGVyYWwgQ29udHJvbGxlciBEcml2ZXIKKyAqIFRoZSBjb250cm9sbGVyIGNhbiBiZSBmb3VuZCBvbiBNUEM4MzYwLCBNUEM4MjcyLCBhbmQgZXRjLgorICogTVBDODM2MCBSZXYgMS4xIG1heSBuZWVkIFFFIG1pcmNvY29kZSB1cGRhdGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjdW5kZWYgVVNCX1RSQUNFCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxhc20vcWUuaD4KKyNpbmNsdWRlIDxhc20vY3BtLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyNpbmNsdWRlICJmc2xfcWVfdWRjLmgiCisKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAgICJGcmVlc2NhbGUgUUUvQ1BNIFVTQiBEZXZpY2UgQ29udHJvbGxlciBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICAiWGllIFhpYW9CbyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gICIxLjAiCisKKyNkZWZpbmUgRE1BX0FERFJfSU5WQUxJRCAgICAgICAgKH4oZG1hX2FkZHJfdCkwKQorCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZVtdID0gImZzbF9xZV91ZGMiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX2Rlc2NbXSA9IERSSVZFUl9ERVNDOworCisvKmVwIG5hbWUgaXMgaW1wb3J0YW50IGluIGdhZGdldCwgaXQgc2hvdWxkIG9iZXkgdGhlIGNvbnZlbnRpb24gb2YgZXBfbWF0Y2goKSovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZXBfbmFtZVtdID0geworCSJlcDAtY29udHJvbCIsIC8qIGV2ZXJ5b25lIGhhcyBlcDAgKi8KKwkvKiAzIGNvbmZpZ3VyYWJsZSBlbmRwb2ludHMgKi8KKwkiZXAxIiwKKwkiZXAyIiwKKwkiZXAzIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgcWVfZXAwX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JMCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wsCisJLndNYXhQYWNrZXRTaXplID0JVVNCX01BWF9DVFJMX1BBWUxPQUQsCit9OworCisvKiBpdCBpcyBpbml0aWFsaXplZCBpbiBwcm9iZSgpICAqLworc3RhdGljIHN0cnVjdCBxZV91ZGMgKnVkY19jb250cm9sbGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgSW50ZXJuYWwgVXNlZCBGdW5jdGlvbiBTdGFydAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBkb25lKCkgLSByZXRpcmUgYSByZXF1ZXN0OyBjYWxsZXIgYmxvY2tlZCBpcnFzCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGRvbmUoc3RydWN0IHFlX2VwICplcCwgc3RydWN0IHFlX3JlcSAqcmVxLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisJdW5zaWduZWQgY2hhciBzdG9wcGVkID0gZXAtPnN0b3BwZWQ7CisKKwkvKiB0aGUgcmVxLT5xdWV1ZSBwb2ludGVyIGlzIHVzZWQgYnkgZXBfcXVldWUoKSBmdW5jLCBpbiB3aGljaAorCSAqIHRoZSByZXF1ZXN0IHdpbGwgYmUgYWRkZWQgaW50byBhIHVkY19lcC0+cXVldWUgJ2QgdGFpbAorCSAqIHNvIGhlcmUgdGhlIHJlcSB3aWxsIGJlIGRyb3BwZWQgZnJvbSB0aGUgZXAtPnF1ZXVlCisJICovCisJbGlzdF9kZWxfaW5pdCgmcmVxLT5xdWV1ZSk7CisKKwkvKiByZXEuc3RhdHVzIHNob3VsZCBiZSBzZXQgYXMgLUVJTlBST0dSRVNTIGluIGVwX3F1ZXVlKCkgKi8KKwlpZiAocmVxLT5yZXEuc3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJcmVxLT5yZXEuc3RhdHVzID0gc3RhdHVzOworCWVsc2UKKwkJc3RhdHVzID0gcmVxLT5yZXEuc3RhdHVzOworCisJaWYgKHJlcS0+bWFwcGVkKSB7CisJCWRtYV91bm1hcF9zaW5nbGUodWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCXJlcS0+cmVxLmRtYSwgcmVxLT5yZXEubGVuZ3RoLAorCQkJZXBfaXNfaW4oZXApCisJCQkJPyBETUFfVE9fREVWSUNFCisJCQkJOiBETUFfRlJPTV9ERVZJQ0UpOworCQlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCQlyZXEtPm1hcHBlZCA9IDA7CisJfSBlbHNlCisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQlyZXEtPnJlcS5kbWEsIHJlcS0+cmVxLmxlbmd0aCwKKwkJCWVwX2lzX2luKGVwKQorCQkJCT8gRE1BX1RPX0RFVklDRQorCQkJCTogRE1BX0ZST01fREVWSUNFKTsKKworCWlmIChzdGF0dXMgJiYgKHN0YXR1cyAhPSAtRVNIVVRET1dOKSkKKwkJZGV2X3ZkYmcodWRjLT5kZXYsICJjb21wbGV0ZSAlcyByZXEgJXAgc3RhdCAlZCBsZW4gJXUvJXVcbiIsCisJCQllcC0+ZXAubmFtZSwgJnJlcS0+cmVxLCBzdGF0dXMsCisJCQlyZXEtPnJlcS5hY3R1YWwsIHJlcS0+cmVxLmxlbmd0aCk7CisKKwkvKiBkb24ndCBtb2RpZnkgcXVldWUgaGVhZHMgZHVyaW5nIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwllcC0+c3RvcHBlZCA9IDE7CisJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisKKwkvKiB0aGlzIGNvbXBsZXRlKCkgc2hvdWxkIGEgZnVuYyBpbXBsZW1lbnRlZCBieSBnYWRnZXQgbGF5ZXIsCisJICogZWcgZnNnLT5idWxrX2luX2NvbXBsZXRlKCkgKi8KKwlpZiAocmVxLT5yZXEuY29tcGxldGUpCisJCXJlcS0+cmVxLmNvbXBsZXRlKCZlcC0+ZXAsICZyZXEtPnJlcSk7CisKKwlzcGluX2xvY2soJnVkYy0+bG9jayk7CisKKwllcC0+c3RvcHBlZCA9IHN0b3BwZWQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIG51a2UoKTogZGVsZXRlIGFsbCByZXF1ZXN0cyByZWxhdGVkIHRvIHRoaXMgZXAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgbnVrZShzdHJ1Y3QgcWVfZXAgKmVwLCBpbnQgc3RhdHVzKQoreworCS8qIFdoZXRoZXIgdGhpcyBlcSBoYXMgcmVxdWVzdCBsaW5rZWQgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJc3RydWN0IHFlX3JlcSAqcmVxID0gTlVMTDsKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHFlX3JlcSwgcXVldWUpOworCisJCWRvbmUoZXAsIHJlcSwgc3RhdHVzKTsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogVVNCIGFuZCBFbmRwb2ludCBtYW5pcHVsYXRlIHByb2Nlc3MsIGluY2x1ZGUgcGFyYW1ldGVyIGFuZCByZWdpc3RlciAgICAgICAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBAdmFsdWU6IDEtLXNldCBzdGFsbCAwLS1jbGVhbiBzdGFsbCAqLworc3RhdGljIGludCBxZV9lcHJ4X3N0YWxsX2NoYW5nZShzdHJ1Y3QgcWVfZXAgKmVwLCBpbnQgdmFsdWUpCit7CisJdTE2IHRlbV91c2VwOworCXU4IGVwbnVtID0gZXAtPmVwbnVtOworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwl0ZW1fdXNlcCA9IGluX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW2VwbnVtXSk7CisJdGVtX3VzZXAgPSB0ZW1fdXNlcCAmIH5VU0JfUkhTX01BU0s7CisJaWYgKHZhbHVlID09IDEpCisJCXRlbV91c2VwIHw9IFVTQl9SSFNfU1RBTEw7CisJZWxzZSBpZiAoZXAtPmRpciA9PSBVU0JfRElSX0lOKQorCQl0ZW1fdXNlcCB8PSBVU0JfUkhTX0lHTk9SRV9PVVQ7CisKKwlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbZXBudW1dLCB0ZW1fdXNlcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXB0eF9zdGFsbF9jaGFuZ2Uoc3RydWN0IHFlX2VwICplcCwgaW50IHZhbHVlKQoreworCXUxNiB0ZW1fdXNlcDsKKwl1OCBlcG51bSA9IGVwLT5lcG51bTsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCisJdGVtX3VzZXAgPSBpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtlcG51bV0pOworCXRlbV91c2VwID0gdGVtX3VzZXAgJiB+VVNCX1RIU19NQVNLOworCWlmICh2YWx1ZSA9PSAxKQorCQl0ZW1fdXNlcCB8PSBVU0JfVEhTX1NUQUxMOworCWVsc2UgaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpCisJCXRlbV91c2VwIHw9IFVTQl9USFNfSUdOT1JFX0lOOworCisJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW2VwbnVtXSwgdGVtX3VzZXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXAwX3N0YWxsKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlxZV9lcHR4X3N0YWxsX2NoYW5nZSgmdWRjLT5lcHNbMF0sIDEpOworCXFlX2Vwcnhfc3RhbGxfY2hhbmdlKCZ1ZGMtPmVwc1swXSwgMSk7CisJdWRjX2NvbnRyb2xsZXItPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCXVkY19jb250cm9sbGVyLT5lcDBfZGlyID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcHJ4X25hY2soc3RydWN0IHFlX2VwICplcCkKK3sKKwl1OCBlcG51bSA9IGVwLT5lcG51bTsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCisJaWYgKGVwLT5zdGF0ZSA9PSBFUF9TVEFURV9JRExFKSB7CisJCS8qIFNldCB0aGUgZXAncyBuYWNrICovCisJCWNscnNldGJpdHNfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbZXBudW1dLAorCQkJCVVTQl9SSFNfTUFTSywgVVNCX1JIU19OQUNLKTsKKworCQkvKiBNYXNrIFJ4IGFuZCBCdXN5IGludGVycnVwdHMgKi8KKwkJY2xyYml0czE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNibXIsCisJCQkJKFVTQl9FX1JYQl9NQVNLIHwgVVNCX0VfQlNZX01BU0spKTsKKworCQllcC0+c3RhdGUgPSBFUF9TVEFURV9OQUNLOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcHJ4X25vcm1hbChzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwlpZiAoZXAtPnN0YXRlID09IEVQX1NUQVRFX05BQ0spIHsKKwkJY2xyc2V0Yml0c19iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtlcC0+ZXBudW1dLAorCQkJCVVTQl9SVEhTX01BU0ssIFVTQl9USFNfSUdOT1JFX0lOKTsKKworCQkvKiBVbm1hc2sgUlggaW50ZXJydXB0cyAqLworCQlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYmVyLAorCQkJCVVTQl9FX0JTWV9NQVNLIHwgVVNCX0VfUlhCX01BU0spOworCQlzZXRiaXRzMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JtciwKKwkJCQkoVVNCX0VfUlhCX01BU0sgfCBVU0JfRV9CU1lfTUFTSykpOworCisJCWVwLT5zdGF0ZSA9IEVQX1NUQVRFX0lETEU7CisJCWVwLT5oYXNfZGF0YSA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfY21kX3N0b3B0eChzdHJ1Y3QgcWVfZXAgKmVwKQoreworCWlmIChlcC0+dWRjLT5zb2NfdHlwZSA9PSBQT1JUX0NQTSkKKwkJY3BtX2NvbW1hbmQoQ1BNX1VTQl9TVE9QX1RYIHwgKGVwLT5lcG51bSA8PCBDUE1fVVNCX0VQX1NISUZUKSwKKwkJCQlDUE1fVVNCX1NUT1BfVFhfT1BDT0RFKTsKKwllbHNlCisJCXFlX2lzc3VlX2NtZChRRV9VU0JfU1RPUF9UWCwgUUVfQ1JfU1VCQkxPQ0tfVVNCLAorCQkJCWVwLT5lcG51bSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9jbWRfcmVzdGFydHR4KHN0cnVjdCBxZV9lcCAqZXApCit7CisJaWYgKGVwLT51ZGMtPnNvY190eXBlID09IFBPUlRfQ1BNKQorCQljcG1fY29tbWFuZChDUE1fVVNCX1JFU1RBUlRfVFggfCAoZXAtPmVwbnVtIDw8CisJCQkJQ1BNX1VTQl9FUF9TSElGVCksIENQTV9VU0JfUkVTVEFSVF9UWF9PUENPREUpOworCWVsc2UKKwkJcWVfaXNzdWVfY21kKFFFX1VTQl9SRVNUQVJUX1RYLCBRRV9DUl9TVUJCTE9DS19VU0IsCisJCQkJZXAtPmVwbnVtLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2ZsdXNodHhmaWZvKHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKwlpbnQgaTsKKworCWkgPSAoaW50KWVwLT5lcG51bTsKKworCXFlX2VwX2NtZF9zdG9wdHgoZXApOworCW91dF84KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNjb20sCisJCVVTQl9DTURfRkxVU0hfRklGTyB8IChVU0JfQ01EX0VQX01BU0sgJiAoZXAtPmVwbnVtKSkpOworCW91dF9iZTE2KCZ1ZGMtPmVwX3BhcmFtW2ldLT50YnB0ciwgaW5fYmUxNigmdWRjLT5lcF9wYXJhbVtpXS0+dGJhc2UpKTsKKwlvdXRfYmUzMigmdWRjLT5lcF9wYXJhbVtpXS0+dHN0YXRlLCAwKTsKKwlvdXRfYmUxNigmdWRjLT5lcF9wYXJhbVtpXS0+dGJjbnQsIDApOworCisJZXAtPmNfdHhiZCA9IGVwLT50eGJhc2U7CisJZXAtPm5fdHhiZCA9IGVwLT50eGJhc2U7CisJcWVfZXBfY21kX3Jlc3RhcnR0eChlcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfZmlsbHR4ZmlmbyhzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwlvdXRfOCgmdWRjLT51c2JfcmVncy0+dXNiX3VzY29tLAorCQkJVVNCX0NNRF9TVFJfRklGTyB8IChVU0JfQ01EX0VQX01BU0sgJiAoZXAtPmVwbnVtKSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwYmRzX3Jlc2V0KHN0cnVjdCBxZV91ZGMgKnVkYywgaW50IHBpcGVfbnVtKQoreworCXN0cnVjdCBxZV9lcCAqZXA7CisJdTMyIGJkcmluZ19sZW47CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCWludCBpOworCisJZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpCisJCWJkcmluZ19sZW4gPSBVU0JfQkRSSU5HX0xFTl9SWDsKKwllbHNlCisJCWJkcmluZ19sZW4gPSBVU0JfQkRSSU5HX0xFTjsKKworCWJkID0gZXAtPnJ4YmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgKGJkcmluZ19sZW4gLSAxKTsgaSsrKSB7CisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBSX0UgfCBSX0kpOworCQliZCsrOworCX0KKwlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgUl9FIHwgUl9JIHwgUl9XKTsKKworCWJkID0gZXAtPnR4YmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX0JEUklOR19MRU5fVFggLSAxOyBpKyspIHsKKwkJb3V0X2JlMzIoJmJkLT5idWYsIDApOworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgMCk7CisJCWJkKys7CisJfQorCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBUX1cpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfcmVzZXQoc3RydWN0IHFlX3VkYyAqdWRjLCBpbnQgcGlwZV9udW0pCit7CisJc3RydWN0IHFlX2VwICplcDsKKwl1MTYgdG1wdXNlcDsKKworCWVwID0gJnVkYy0+ZXBzW3BpcGVfbnVtXTsKKwl0bXB1c2VwID0gaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbcGlwZV9udW1dKTsKKwl0bXB1c2VwICY9IH5VU0JfUlRIU19NQVNLOworCisJc3dpdGNoIChlcC0+ZGlyKSB7CisJY2FzZSBVU0JfRElSX0JPVEg6CisJCXFlX2VwX2ZsdXNodHhmaWZvKGVwKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRElSX09VVDoKKwkJdG1wdXNlcCB8PSBVU0JfVEhTX0lHTk9SRV9JTjsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRElSX0lOOgorCQlxZV9lcF9mbHVzaHR4ZmlmbyhlcCk7CisJCXRtcHVzZXAgfD0gVVNCX1JIU19JR05PUkVfT1VUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW3BpcGVfbnVtXSwgdG1wdXNlcCk7CisKKwlxZV9lcGJkc19yZXNldCh1ZGMsIHBpcGVfbnVtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX3RvZ2dsZWRhdGEwMShzdHJ1Y3QgcWVfZXAgKmVwKQoreworCWVwLT5kYXRhMDEgXj0gMHgxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2JkX2luaXQoc3RydWN0IHFlX3VkYyAqdWRjLCB1bnNpZ25lZCBjaGFyIHBpcGVfbnVtKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCXVuc2lnbmVkIGxvbmcgdG1wX2FkZHIgPSAwOworCXN0cnVjdCB1c2JfZXBfcGFyYSBfX2lvbWVtICplcHBhcmFtOworCWludCBpOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlpbnQgYmRyaW5nX2xlbjsKKworCWlmIChlcC0+ZGlyID09IFVTQl9ESVJfT1VUKQorCQliZHJpbmdfbGVuID0gVVNCX0JEUklOR19MRU5fUlg7CisJZWxzZQorCQliZHJpbmdfbGVuID0gVVNCX0JEUklOR19MRU47CisKKwllcHBhcmFtID0gdWRjLT5lcF9wYXJhbVtwaXBlX251bV07CisJLyogYWxsb2MgbXVsdGktcmFtIGZvciBCRCByaW5ncyBhbmQgc2V0IHRoZSBlcCBwYXJhbWV0ZXJzICovCisJdG1wX2FkZHIgPSBjcG1fbXVyYW1fYWxsb2Moc2l6ZW9mKHN0cnVjdCBxZV9iZCkgKiAoYmRyaW5nX2xlbiArCisJCQkJVVNCX0JEUklOR19MRU5fVFgpLCBRRV9BTElHTk1FTlRfT0ZfQkQpOworCW91dF9iZTE2KCZlcHBhcmFtLT5yYmFzZSwgKHUxNil0bXBfYWRkcik7CisJb3V0X2JlMTYoJmVwcGFyYW0tPnRiYXNlLCAodTE2KSh0bXBfYWRkciArCisJCQkJKHNpemVvZihzdHJ1Y3QgcWVfYmQpICogYmRyaW5nX2xlbikpKTsKKworCW91dF9iZTE2KCZlcHBhcmFtLT5yYnB0ciwgaW5fYmUxNigmZXBwYXJhbS0+cmJhc2UpKTsKKwlvdXRfYmUxNigmZXBwYXJhbS0+dGJwdHIsIGluX2JlMTYoJmVwcGFyYW0tPnRiYXNlKSk7CisKKwllcC0+cnhiYXNlID0gY3BtX211cmFtX2FkZHIodG1wX2FkZHIpOworCWVwLT50eGJhc2UgPSBjcG1fbXVyYW1fYWRkcih0bXBfYWRkciArIChzaXplb2Yoc3RydWN0IHFlX2JkKQorCQkJCSogYmRyaW5nX2xlbikpOworCWVwLT5uX3J4YmQgPSBlcC0+cnhiYXNlOworCWVwLT5lX3J4YmQgPSBlcC0+cnhiYXNlOworCWVwLT5uX3R4YmQgPSBlcC0+dHhiYXNlOworCWVwLT5jX3R4YmQgPSBlcC0+dHhiYXNlOworCWVwLT5kYXRhMDEgPSAwOyAvKiBkYXRhMCAqLworCisJLyogSW5pdCBUWCBhbmQgUlggYmRzICovCisJYmQgPSBlcC0+cnhiYXNlOworCWZvciAoaSA9IDA7IGkgPCBiZHJpbmdfbGVuIC0gMTsgaSsrKSB7CisJCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIDApOworCQliZCsrOworCX0KKwlvdXRfYmUzMigmYmQtPmJ1ZiwgMCk7CisJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIFJfVyk7CisKKwliZCA9IGVwLT50eGJhc2U7CisJZm9yIChpID0gMDsgaSA8IFVTQl9CRFJJTkdfTEVOX1RYIC0gMTsgaSsrKSB7CisJCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIDApOworCQliZCsrOworCX0KKwlvdXRfYmUzMigmYmQtPmJ1ZiwgMCk7CisJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIFRfVyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9yeGJkX3VwZGF0ZShzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXVuc2lnbmVkIGludCBzaXplOworCWludCBpOworCXVuc2lnbmVkIGludCB0bXA7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCXVuc2lnbmVkIGludCBiZHJpbmdfbGVuOworCisJaWYgKGVwLT5yeGJhc2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliZCA9IGVwLT5yeGJhc2U7CisKKwllcC0+cnhmcmFtZSA9IGttYWxsb2Moc2l6ZW9mKCplcC0+cnhmcmFtZSksIEdGUF9BVE9NSUMpOworCWlmIChlcC0+cnhmcmFtZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoZXAtPnVkYy0+ZGV2LCAibWFsbG9jIHJ4ZnJhbWUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcWVfZnJhbWVfaW5pdChlcC0+cnhmcmFtZSk7CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkKKwkJYmRyaW5nX2xlbiA9IFVTQl9CRFJJTkdfTEVOX1JYOworCWVsc2UKKwkJYmRyaW5nX2xlbiA9IFVTQl9CRFJJTkdfTEVOOworCisJc2l6ZSA9IChlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFICsgMikgKiAoYmRyaW5nX2xlbiArIDEpOworCWVwLT5yeGJ1ZmZlciA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKGVwLT5yeGJ1ZmZlciA9PSBOVUxMKSB7CisJCWRldl9lcnIoZXAtPnVkYy0+ZGV2LCAibWFsbG9jIHJ4YnVmZmVyIGZhaWxlZCxzaXplPSVkXG4iLAorCQkJCXNpemUpOworCQlrZnJlZShlcC0+cnhmcmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWVwLT5yeGJ1Zl9kID0gdmlydF90b19waHlzKCh2b2lkICopZXAtPnJ4YnVmZmVyKTsKKwlpZiAoZXAtPnJ4YnVmX2QgPT0gRE1BX0FERFJfSU5WQUxJRCkgeworCQllcC0+cnhidWZfZCA9IGRtYV9tYXBfc2luZ2xlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJZXAtPnJ4YnVmZmVyLAorCQkJCQlzaXplLAorCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQllcC0+cnhidWZtYXAgPSAxOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJZXAtPnJ4YnVmX2QsIHNpemUsCisJCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCWVwLT5yeGJ1Zm1hcCA9IDA7CisJfQorCisJc2l6ZSA9IGVwLT5lcC5tYXhwYWNrZXQgKyBVU0JfQ1JDX1NJWkUgKyAyOworCXRtcCA9IGVwLT5yeGJ1Zl9kOworCXRtcCA9ICh1MzIpKCgodG1wID4+IDIpIDw8IDIpICsgNCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmRyaW5nX2xlbiAtIDE7IGkrKykgeworCQlvdXRfYmUzMigmYmQtPmJ1ZiwgdG1wKTsKKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIChSX0UgfCBSX0kpKTsKKwkJdG1wID0gdG1wICsgc2l6ZTsKKwkJYmQrKzsKKwl9CisJb3V0X2JlMzIoJmJkLT5idWYsIHRtcCk7CisJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIChSX0UgfCBSX0kgfCBSX1cpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX3JlZ2lzdGVyX2luaXQoc3RydWN0IHFlX3VkYyAqdWRjLCB1bnNpZ25lZCBjaGFyIHBpcGVfbnVtKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCXN0cnVjdCB1c2JfZXBfcGFyYSBfX2lvbWVtICplcHBhcmFtOworCXUxNiB1c2VwLCBsb2dlcG51bTsKKwl1MTYgdG1wOworCXU4IHJ0ZmNyID0gMDsKKworCWVwcGFyYW0gPSB1ZGMtPmVwX3BhcmFtW3BpcGVfbnVtXTsKKworCXVzZXAgPSAwOworCWxvZ2VwbnVtID0gKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwl1c2VwIHw9IChsb2dlcG51bSA8PCBVU0JfRVBOVU1fU0hJRlQpOworCisJc3dpdGNoIChlcC0+ZGVzYy0+Ym1BdHRyaWJ1dGVzICYgMHgwMykgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJdXNlcCB8PSBVU0JfVFJBTlNfQlVMSzsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQl1c2VwIHw9ICBVU0JfVFJBTlNfSVNPOworCQlicmVhazsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKKwkJdXNlcCB8PSBVU0JfVFJBTlNfSU5UOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl1c2VwIHw9IFVTQl9UUkFOU19DVFI7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoZXAtPmRpcikgeworCWNhc2UgVVNCX0RJUl9PVVQ6CisJCXVzZXAgfD0gVVNCX1RIU19JR05PUkVfSU47CisJCWJyZWFrOworCWNhc2UgVVNCX0RJUl9JTjoKKwkJdXNlcCB8PSBVU0JfUkhTX0lHTk9SRV9PVVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbcGlwZV9udW1dLCB1c2VwKTsKKworCXJ0ZmNyID0gMHgzMDsKKwlvdXRfOCgmZXBwYXJhbS0+cmJtciwgcnRmY3IpOworCW91dF84KCZlcHBhcmFtLT50Ym1yLCBydGZjcik7CisKKwl0bXAgPSAodTE2KShlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFKTsKKwkvKiBNUkJMUiBtdXN0IGJlIGRpdmlzYmxlIGJ5IDQgKi8KKwl0bXAgPSAodTE2KSgoKHRtcCA+PiAyKSA8PCAyKSArIDQpOworCW91dF9iZTE2KCZlcHBhcmFtLT5tcmJsciwgdG1wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2luaXQoc3RydWN0IHFlX3VkYyAqdWRjLAorCQkgICAgICB1bnNpZ25lZCBjaGFyIHBpcGVfbnVtLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IHFlX2VwICplcCA9ICZ1ZGMtPmVwc1twaXBlX251bV07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV2YWwgPSAwOworCXUxNiBtYXggPSAwOworCisJbWF4ID0gbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpOworCisJLyogY2hlY2sgdGhlIG1heCBwYWNrYWdlIHNpemUgdmFsaWRhdGUgZm9yIHRoaXMgZW5kcG9pbnQgKi8KKwkvKiBSZWZlciB0byBVU0IyLjAgc3BlYyB0YWJsZSA5LTEzLAorCSovCisJaWYgKHBpcGVfbnVtICE9IDApIHsKKwkJc3dpdGNoIChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCQlpZiAoc3Ryc3RyKGVwLT5lcC5uYW1lLCAiLWlzbyIpCisJCQkJCXx8IHN0cnN0cihlcC0+ZXAubmFtZSwgIi1pbnQiKSkKKwkJCQlnb3RvIGVuX2RvbmU7CisJCQlzd2l0Y2ggKHVkYy0+Z2FkZ2V0LnNwZWVkKSB7CisJCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJaWYgKChtYXggPT0gMTI4KSB8fCAobWF4ID09IDI1NikgfHwgKG1heCA9PSA1MTIpKQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzd2l0Y2ggKG1heCkgeworCQkJCWNhc2UgNDoKKwkJCQljYXNlIDg6CisJCQkJY2FzZSAxNjoKKwkJCQljYXNlIDMyOgorCQkJCWNhc2UgNjQ6CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJY2FzZSBVU0JfU1BFRURfTE9XOgorCQkJCQlnb3RvIGVuX2RvbmU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQkJaWYgKHN0cnN0cihlcC0+ZXAubmFtZSwgIi1pc28iKSkJLyogYnVsayBpcyBvayAqLworCQkJCWdvdG8gZW5fZG9uZTsKKwkJCXN3aXRjaCAodWRjLT5nYWRnZXQuc3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQkJaWYgKG1heCA8PSAxMDI0KQorCQkJCQlicmVhazsKKwkJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCQkJaWYgKG1heCA8PSA2NCkKKwkJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmIChtYXggPD0gOCkKKwkJCQkJYnJlYWs7CisJCQkJZ290byBlbl9kb25lOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJCWlmIChzdHJzdHIoZXAtPmVwLm5hbWUsICItYnVsayIpCisJCQkJfHwgc3Ryc3RyKGVwLT5lcC5uYW1lLCAiLWludCIpKQorCQkJCWdvdG8gZW5fZG9uZTsKKwkJCXN3aXRjaCAodWRjLT5nYWRnZXQuc3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQkJaWYgKG1heCA8PSAxMDI0KQorCQkJCQlicmVhazsKKwkJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCQkJaWYgKG1heCA8PSAxMDIzKQorCQkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZ290byBlbl9kb25lOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTDoKKwkJCWlmIChzdHJzdHIoZXAtPmVwLm5hbWUsICItaXNvIikKKwkJCQl8fCBzdHJzdHIoZXAtPmVwLm5hbWUsICItaW50IikpCisJCQkJZ290byBlbl9kb25lOworCQkJc3dpdGNoICh1ZGMtPmdhZGdldC5zcGVlZCkgeworCQkJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCQkJc3dpdGNoIChtYXgpIHsKKwkJCQljYXNlIDE6CisJCQkJY2FzZSAyOgorCQkJCWNhc2UgNDoKKwkJCQljYXNlIDg6CisJCQkJY2FzZSAxNjoKKwkJCQljYXNlIDMyOgorCQkJCWNhc2UgNjQ6CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gZW5fZG9uZTsKKwkJCQl9CisJCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQkJc3dpdGNoIChtYXgpIHsKKwkJCQljYXNlIDE6CisJCQkJY2FzZSAyOgorCQkJCWNhc2UgNDoKKwkJCQljYXNlIDg6CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gZW5fZG9uZTsKKwkJCQl9CisJCQlkZWZhdWx0OgorCQkJCWdvdG8gZW5fZG9uZTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlnb3RvIGVuX2RvbmU7CisJCX0KKwl9IC8qIGlmIGVwMCovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwkvKiBpbml0aWFsaXplIGVwIHN0cnVjdHVyZSAqLworCWVwLT5lcC5tYXhwYWNrZXQgPSBtYXg7CisJZXAtPnRtID0gKHU4KShkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSyk7CisJZXAtPmRlc2MgPSBkZXNjOworCWVwLT5zdG9wcGVkID0gMDsKKwllcC0+aW5pdCA9IDE7CisKKwlpZiAocGlwZV9udW0gPT0gMCkgeworCQllcC0+ZGlyID0gVVNCX0RJUl9CT1RIOworCQl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX09VVDsKKwkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwl9IGVsc2UJeworCQlzd2l0Y2ggKGRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spIHsKKwkJY2FzZSBVU0JfRElSX09VVDoKKwkJCWVwLT5kaXIgPSBVU0JfRElSX09VVDsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9ESVJfSU46CisJCQllcC0+ZGlyID0gVVNCX0RJUl9JTjsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogaGFyZHdhcmUgc3BlY2lhbCBvcGVyYXRpb24gKi8KKwlxZV9lcF9iZF9pbml0KHVkYywgcGlwZV9udW0pOworCWlmICgoZXAtPnRtID09IFVTQlBfVE1fQ1RMKSB8fCAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkpIHsKKwkJcmV2YWwgPSBxZV9lcF9yeGJkX3VwZGF0ZShlcCk7CisJCWlmIChyZXZhbCkKKwkJCWdvdG8gZW5fZG9uZTE7CisJfQorCisJaWYgKChlcC0+dG0gPT0gVVNCUF9UTV9DVEwpIHx8IChlcC0+ZGlyID09IFVTQl9ESVJfSU4pKSB7CisJCWVwLT50eGZyYW1lID0ga21hbGxvYyhzaXplb2YoKmVwLT50eGZyYW1lKSwgR0ZQX0FUT01JQyk7CisJCWlmIChlcC0+dHhmcmFtZSA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKHVkYy0+ZGV2LCAibWFsbG9jIHR4ZnJhbWUgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZW5fZG9uZTI7CisJCX0KKwkJcWVfZnJhbWVfaW5pdChlcC0+dHhmcmFtZSk7CisJfQorCisJcWVfZXBfcmVnaXN0ZXJfaW5pdCh1ZGMsIHBpcGVfbnVtKTsKKworCS8qIE5vdyBIVyB3aWxsIGJlIE5BS2luZyB0cmFuc2ZlcnMgdG8gdGhhdCBFUCwKKwkgKiB1bnRpbCBhIGJ1ZmZlciBpcyBxdWV1ZWQgdG8gaXQuICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK2VuX2RvbmUyOgorCWtmcmVlKGVwLT5yeGJ1ZmZlcik7CisJa2ZyZWUoZXAtPnJ4ZnJhbWUpOworZW5fZG9uZTE6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7Citlbl9kb25lOgorCWRldl9kYmcodWRjLT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSAlc1xuIiwgZXAtPmVwLm5hbWUpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWVfdXNiX2VuYWJsZSh2b2lkKQoreworCXNldGJpdHM4KCZ1ZGNfY29udHJvbGxlci0+dXNiX3JlZ3MtPnVzYl91c21vZCwgVVNCX01PREVfRU4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWVfdXNiX2Rpc2FibGUodm9pZCkKK3sKKwljbHJiaXRzOCgmdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzLT51c2JfdXNtb2QsIFVTQl9NT0RFX0VOKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICoJCVVTQiBhbmQgRVAgYmFzaWMgbWFuaXB1bGF0ZSBmdW5jdGlvbiBlbmQJCSAgICAgICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQlVREMgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcHJvY2VzcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHJlY3ljbGVfb25lX3J4YmQoc3RydWN0IHFlX2VwICplcCkKK3sKKwl1MzIgYmRzdGF0dXM7CisKKwliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopZXAtPmVfcnhiZCk7CisJYmRzdGF0dXMgPSBSX0kgfCBSX0UgfCAoYmRzdGF0dXMgJiBSX1cpOworCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWVwLT5lX3J4YmQsIGJkc3RhdHVzKTsKKworCWlmIChiZHN0YXR1cyAmIFJfVykKKwkJZXAtPmVfcnhiZCA9IGVwLT5yeGJhc2U7CisJZWxzZQorCQllcC0+ZV9yeGJkKys7Cit9CisKK3N0YXRpYyB2b2lkIHJlY3ljbGVfcnhiZHMoc3RydWN0IHFlX2VwICplcCwgdW5zaWduZWQgY2hhciBzdG9wYXRuZXh0KQoreworCXUzMiBiZHN0YXR1czsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQsICpuZXh0YmQ7CisJdW5zaWduZWQgY2hhciBzdG9wID0gMDsKKworCW5leHRiZCA9IGVwLT5uX3J4YmQ7CisJYmQgPSBlcC0+ZV9yeGJkOworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisKKwl3aGlsZSAoIShiZHN0YXR1cyAmIFJfRSkgJiYgIShiZHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLKSAmJiAhc3RvcCkgeworCQliZHN0YXR1cyA9IFJfRSB8IFJfSSB8IChiZHN0YXR1cyAmIFJfVyk7CisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBiZHN0YXR1cyk7CisKKwkJaWYgKGJkc3RhdHVzICYgUl9XKQorCQkJYmQgPSBlcC0+cnhiYXNlOworCQllbHNlCisJCQliZCsrOworCisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJCWlmIChzdG9wYXRuZXh0ICYmIChiZCA9PSBuZXh0YmQpKQorCQkJc3RvcCA9IDE7CisJfQorCisJZXAtPmVfcnhiZCA9IGJkOworfQorCitzdGF0aWMgdm9pZCBlcF9yZWN5Y2xlX3J4YmRzKHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkID0gZXAtPm5fcnhiZDsKKwl1MzIgYmRzdGF0dXM7CisJdTggZXBudW0gPSBlcC0+ZXBudW07CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJaWYgKCEoYmRzdGF0dXMgJiBSX0UpICYmICEoYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSykpIHsKKwkJYmQgPSBlcC0+cnhiYXNlICsKKwkJCQkoKGluX2JlMTYoJnVkYy0+ZXBfcGFyYW1bZXBudW1dLT5yYnB0cikgLQorCQkJCSAgaW5fYmUxNigmdWRjLT5lcF9wYXJhbVtlcG51bV0tPnJiYXNlKSkKKwkJCQkgPj4gMyk7CisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisKKwkJaWYgKGJkc3RhdHVzICYgUl9XKQorCQkJYmQgPSBlcC0+cnhiYXNlOworCQllbHNlCisJCQliZCsrOworCisJCWVwLT5lX3J4YmQgPSBiZDsKKwkJcmVjeWNsZV9yeGJkcyhlcCwgMCk7CisJCWVwLT5lX3J4YmQgPSBlcC0+bl9yeGJkOworCX0gZWxzZQorCQlyZWN5Y2xlX3J4YmRzKGVwLCAxKTsKKworCWlmIChpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNiZXIpICYgVVNCX0VfQlNZX01BU0spCisJCW91dF9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNiZXIsIFVTQl9FX0JTWV9NQVNLKTsKKworCWlmIChlcC0+aGFzX2RhdGEgPD0gMCAmJiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpKQorCQlxZV9lcHJ4X25vcm1hbChlcCk7CisKKwllcC0+bG9jYWxuYWNrID0gMDsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfcmVjZWl2ZWRfaGFuZGxlKHN0cnVjdCBxZV91ZGMgKnVkYywKKwkJCQkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqc2V0dXApOworc3RhdGljIGludCBxZV9lcF9yeGZyYW1lX2hhbmRsZShzdHJ1Y3QgcWVfZXAgKmVwKTsKK3N0YXRpYyB2b2lkIGVwMF9yZXFfY29tcGxldGUoc3RydWN0IHFlX3VkYyAqdWRjLCBzdHJ1Y3QgcWVfcmVxICpyZXEpOworLyogd2hlbiBCRCBQSUQgaXMgc2V0dXAsIGhhbmRsZSB0aGUgcGFja2V0ICovCitzdGF0aWMgaW50IGVwMF9zZXR1cF9oYW5kbGUoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbMF07CisJc3RydWN0IHFlX2ZyYW1lICpwZnJhbWU7CisJdW5zaWduZWQgaW50IGZzaXplOworCXU4ICpjcDsKKworCXBmcmFtZSA9IGVwLT5yeGZyYW1lOworCWlmICgoZnJhbWVfZ2V0X2luZm8ocGZyYW1lKSAmIFBJRF9TRVRVUCkKKwkJCSYmICh1ZGMtPmVwMF9zdGF0ZSA9PSBXQUlUX0ZPUl9TRVRVUCkpIHsKKwkJZnNpemUgPSBmcmFtZV9nZXRfbGVuZ3RoKHBmcmFtZSk7CisJCWlmICh1bmxpa2VseShmc2l6ZSAhPSA4KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQljcCA9ICh1OCAqKSZ1ZGMtPmxvY2FsX3NldHVwX2J1ZmY7CisJCW1lbWNweShjcCwgcGZyYW1lLT5kYXRhLCBmc2l6ZSk7CisJCWVwLT5kYXRhMDEgPSAxOworCisJCS8qIGhhbmRsZSB0aGUgdXNiIGNvbW1hbmQgYmFzZSBvbiB0aGUgdXNiX2N0cmxyZXF1ZXN0ICovCisJCXNldHVwX3JlY2VpdmVkX2hhbmRsZSh1ZGMsICZ1ZGMtPmxvY2FsX3NldHVwX2J1ZmYpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXAwX3J4KHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gJnVkYy0+ZXBzWzBdOworCXN0cnVjdCBxZV9mcmFtZSAqcGZyYW1lOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwl1MzIgYmRzdGF0dXMsIGxlbmd0aDsKKwl1MzIgdmFkZHI7CisKKwlwZnJhbWUgPSBlcC0+cnhmcmFtZTsKKworCWlmIChlcC0+ZGlyID09IFVTQl9ESVJfSU4pIHsKKwkJZGV2X2Vycih1ZGMtPmRldiwgImVwMCBub3QgYSBjb250cm9sIGVuZHBvaW50XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmQgPSBlcC0+bl9yeGJkOworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKworCXdoaWxlICghKGJkc3RhdHVzICYgUl9FKSAmJiBsZW5ndGgpIHsKKwkJaWYgKChiZHN0YXR1cyAmIFJfRikgJiYgKGJkc3RhdHVzICYgUl9MKQorCQkJJiYgIShiZHN0YXR1cyAmIFJfRVJST1IpKSB7CisJCQlpZiAobGVuZ3RoID09IFVTQl9DUkNfU0laRSkgeworCQkJCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCQkJZGV2X3ZkYmcodWRjLT5kZXYsCisJCQkJCSJyZWNlaXZlIGEgWkxQIGluIHN0YXR1cyBwaGFzZVxuIik7CisJCQl9IGVsc2UgeworCQkJCXFlX2ZyYW1lX2NsZWFuKHBmcmFtZSk7CisJCQkJdmFkZHIgPSAodTMyKXBoeXNfdG9fdmlydChpbl9iZTMyKCZiZC0+YnVmKSk7CisJCQkJZnJhbWVfc2V0X2RhdGEocGZyYW1lLCAodTggKil2YWRkcik7CisJCQkJZnJhbWVfc2V0X2xlbmd0aChwZnJhbWUsCisJCQkJCQkobGVuZ3RoIC0gVVNCX0NSQ19TSVpFKSk7CisJCQkJZnJhbWVfc2V0X3N0YXR1cyhwZnJhbWUsIEZSQU1FX09LKTsKKwkJCQlzd2l0Y2ggKGJkc3RhdHVzICYgUl9QSUQpIHsKKwkJCQljYXNlIFJfUElEX1NFVFVQOgorCQkJCQlmcmFtZV9zZXRfaW5mbyhwZnJhbWUsIFBJRF9TRVRVUCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgUl9QSURfREFUQTE6CisJCQkJCWZyYW1lX3NldF9pbmZvKHBmcmFtZSwgUElEX0RBVEExKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfREFUQTApOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoKGJkc3RhdHVzICYgUl9QSUQpID09IFJfUElEX1NFVFVQKQorCQkJCQllcDBfc2V0dXBfaGFuZGxlKHVkYyk7CisJCQkJZWxzZQorCQkJCQlxZV9lcF9yeGZyYW1lX2hhbmRsZShlcCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKHVkYy0+ZGV2LCAiVGhlIHJlY2VpdmUgZnJhbWUgd2l0aCBlcnJvciFcbiIpOworCQl9CisKKwkJLyogbm90ZTogZG9uJ3QgY2xlYXIgdGhlIHJ4YmQncyBidWZmZXIgYWRkcmVzcyAqLworCQlyZWN5Y2xlX29uZV9yeGJkKGVwKTsKKworCQkvKiBHZXQgbmV4dCBCRCAqLworCQlpZiAoYmRzdGF0dXMgJiBSX1cpCisJCQliZCA9IGVwLT5yeGJhc2U7CisJCWVsc2UKKwkJCWJkKys7CisKKwkJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwkJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKworCX0KKworCWVwLT5uX3J4YmQgPSBiZDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX3J4ZnJhbWVfaGFuZGxlKHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX2ZyYW1lICpwZnJhbWU7CisJdTggZnJhbWVwaWQgPSAwOworCXVuc2lnbmVkIGludCBmc2l6ZTsKKwl1OCAqY3A7CisJc3RydWN0IHFlX3JlcSAqcmVxOworCisJcGZyYW1lID0gZXAtPnJ4ZnJhbWU7CisKKwlpZiAoZnJhbWVfZ2V0X2luZm8ocGZyYW1lKSAmIFBJRF9EQVRBMSkKKwkJZnJhbWVwaWQgPSAweDE7CisKKwlpZiAoZnJhbWVwaWQgIT0gZXAtPmRhdGEwMSkgeworCQlkZXZfZXJyKGVwLT51ZGMtPmRldiwgInRoZSBkYXRhMDEgZXJyb3IhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZnNpemUgPSBmcmFtZV9nZXRfbGVuZ3RoKHBmcmFtZSk7CisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJZGV2X2VycihlcC0+dWRjLT5kZXYsICJ0aGUgJXMgaGF2ZSBubyByZXF1ZXVlIVxuIiwgZXAtPm5hbWUpOworCX0gZWxzZSB7CisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBxZV9yZXEsIHF1ZXVlKTsKKworCQljcCA9ICh1OCAqKShyZXEtPnJlcS5idWYpICsgcmVxLT5yZXEuYWN0dWFsOworCQlpZiAoY3ApIHsKKwkJCW1lbWNweShjcCwgcGZyYW1lLT5kYXRhLCBmc2l6ZSk7CisJCQlyZXEtPnJlcS5hY3R1YWwgKz0gZnNpemU7CisJCQlpZiAoKGZzaXplIDwgZXAtPmVwLm1heHBhY2tldCkgfHwKKwkJCQkJKHJlcS0+cmVxLmFjdHVhbCA+PSByZXEtPnJlcS5sZW5ndGgpKSB7CisJCQkJaWYgKGVwLT5lcG51bSA9PSAwKQorCQkJCQllcDBfcmVxX2NvbXBsZXRlKGVwLT51ZGMsIHJlcSk7CisJCQkJZWxzZQorCQkJCQlkb25lKGVwLCByZXEsIDApOworCQkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpICYmIGVwLT5lcG51bSAhPSAwKQorCQkJCQlxZV9lcHJ4X25hY2soZXApOworCQkJfQorCQl9CisJfQorCisJcWVfZXBfdG9nZ2xlZGF0YTAxKGVwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlcF9yeF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSAoc3RydWN0IHFlX3VkYyAqKWRhdGE7CisJc3RydWN0IHFlX2VwICplcDsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZTsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgYmRzdGF0dXMsIGxlbmd0aDsKKwl1MzIgdmFkZHIsIGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAxOyBpIDwgVVNCX01BWF9FTkRQT0lOVFM7IGkrKykgeworCQllcCA9ICZ1ZGMtPmVwc1tpXTsKKworCQlpZiAoZXAtPmRpciA9PSBVU0JfRElSX0lOIHx8IGVwLT5lbmFibGVfdGFza2xldCA9PSAwKSB7CisJCQlkZXZfZGJnKHVkYy0+ZGV2LAorCQkJCSJUaGlzIGlzIGEgdHJhbnNtaXQgZXAgb3IgZGlzYWJsZSB0YXNrbGV0IVxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXBmcmFtZSA9IGVwLT5yeGZyYW1lOworCQliZCA9IGVwLT5uX3J4YmQ7CisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJCWxlbmd0aCA9IGJkc3RhdHVzICYgQkRfTEVOR1RIX01BU0s7CisKKwkJd2hpbGUgKCEoYmRzdGF0dXMgJiBSX0UpICYmIGxlbmd0aCkgeworCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJCQlxZV9lcHJ4X25hY2soZXApOworCQkJCWRldl9kYmcodWRjLT5kZXYsCisJCQkJCSJUaGUgcnhlcCBoYXZlIG5vcmVxICVkXG4iLAorCQkJCQllcC0+aGFzX2RhdGEpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoKGJkc3RhdHVzICYgUl9GKSAmJiAoYmRzdGF0dXMgJiBSX0wpCisJCQkJJiYgIShiZHN0YXR1cyAmIFJfRVJST1IpKSB7CisJCQkJcWVfZnJhbWVfY2xlYW4ocGZyYW1lKTsKKwkJCQl2YWRkciA9ICh1MzIpcGh5c190b192aXJ0KGluX2JlMzIoJmJkLT5idWYpKTsKKwkJCQlmcmFtZV9zZXRfZGF0YShwZnJhbWUsICh1OCAqKXZhZGRyKTsKKwkJCQlmcmFtZV9zZXRfbGVuZ3RoKHBmcmFtZSwKKwkJCQkJCShsZW5ndGggLSBVU0JfQ1JDX1NJWkUpKTsKKwkJCQlmcmFtZV9zZXRfc3RhdHVzKHBmcmFtZSwgRlJBTUVfT0spOworCQkJCXN3aXRjaCAoYmRzdGF0dXMgJiBSX1BJRCkgeworCQkJCWNhc2UgUl9QSURfREFUQTE6CisJCQkJCWZyYW1lX3NldF9pbmZvKHBmcmFtZSwgUElEX0RBVEExKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBSX1BJRF9TRVRVUDoKKwkJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfU0VUVVApOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlmcmFtZV9zZXRfaW5mbyhwZnJhbWUsIFBJRF9EQVRBMCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvKiBoYW5kbGUgdGhlIHJ4IGZyYW1lICovCisJCQkJcWVfZXBfcnhmcmFtZV9oYW5kbGUoZXApOworCQkJfSBlbHNlIHsKKwkJCQlkZXZfZXJyKHVkYy0+ZGV2LAorCQkJCQkiZXJyb3IgaW4gcmVjZWl2ZWQgZnJhbWVcbiIpOworCQkJfQorCQkJLyogbm90ZTogZG9uJ3QgY2xlYXIgdGhlIHJ4YmQncyBidWZmZXIgYWRkcmVzcyAqLworCQkJLypjbGVhciB0aGUgbGVuZ3RoICovCisJCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgYmRzdGF0dXMgJiBCRF9TVEFUVVNfTUFTSyk7CisJCQllcC0+aGFzX2RhdGEtLTsKKwkJCWlmICghKGVwLT5sb2NhbG5hY2spKQorCQkJCXJlY3ljbGVfb25lX3J4YmQoZXApOworCisJCQkvKiBHZXQgbmV4dCBCRCAqLworCQkJaWYgKGJkc3RhdHVzICYgUl9XKQorCQkJCWJkID0gZXAtPnJ4YmFzZTsKKwkJCWVsc2UKKwkJCQliZCsrOworCisJCQliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCQkJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKwkJfQorCisJCWVwLT5uX3J4YmQgPSBiZDsKKworCQlpZiAoZXAtPmxvY2FsbmFjaykKKwkJCWVwX3JlY3ljbGVfcnhiZHMoZXApOworCisJCWVwLT5lbmFibGVfdGFza2xldCA9IDA7CisJfSAvKiBmb3IgaT0xICovCisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBxZV9lcF9yeChzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYzsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZTsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdTE2IHN3b2ZmcywgdWNvZmZzLCBlbXB0eWJkczsKKworCXVkYyA9IGVwLT51ZGM7CisJcGZyYW1lID0gZXAtPnJ4ZnJhbWU7CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX0lOKSB7CisJCWRldl9lcnIodWRjLT5kZXYsICJ0cmFuc21pdCBlcCBpbiByeCBmdW5jdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJkID0gZXAtPm5fcnhiZDsKKworCXN3b2ZmcyA9ICh1MTYpKGJkIC0gZXAtPnJ4YmFzZSk7CisJdWNvZmZzID0gKHUxNikoKGluX2JlMTYoJnVkYy0+ZXBfcGFyYW1bZXAtPmVwbnVtXS0+cmJwdHIpIC0KKwkJCWluX2JlMTYoJnVkYy0+ZXBfcGFyYW1bZXAtPmVwbnVtXS0+cmJhc2UpKSA+PiAzKTsKKwlpZiAoc3dvZmZzIDwgdWNvZmZzKQorCQllbXB0eWJkcyA9IFVTQl9CRFJJTkdfTEVOX1JYIC0gdWNvZmZzICsgc3dvZmZzOworCWVsc2UKKwkJZW1wdHliZHMgPSBzd29mZnMgLSB1Y29mZnM7CisKKwlpZiAoZW1wdHliZHMgPCBNSU5fRU1QVFlfQkRTKSB7CisJCXFlX2VwcnhfbmFjayhlcCk7CisJCWVwLT5sb2NhbG5hY2sgPSAxOworCQlkZXZfdmRiZyh1ZGMtPmRldiwgIiVkIGVtcHR5IGJkcywgc2VuZCBOQUNLXG4iLCBlbXB0eWJkcyk7CisJfQorCWVwLT5oYXNfZGF0YSA9IFVTQl9CRFJJTkdfTEVOX1JYIC0gZW1wdHliZHM7CisKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlxZV9lcHJ4X25hY2soZXApOworCQlkZXZfdmRiZyh1ZGMtPmRldiwgIlRoZSByeGVwIGhhdmUgbm8gcmVxIHF1ZXVlZCB3aXRoICVkIEJEc1xuIiwKKwkJCQllcC0+aGFzX2RhdGEpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZ1ZGMtPnJ4X3Rhc2tsZXQpOworCWVwLT5lbmFibGVfdGFza2xldCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyogc2VuZCBkYXRhIGZyb20gYSBmcmFtZSwgbm8gbWF0dGVyIHdoYXQgdHhfcmVxICovCitzdGF0aWMgaW50IHFlX2VwX3R4KHN0cnVjdCBxZV9lcCAqZXAsIHN0cnVjdCBxZV9mcmFtZSAqZnJhbWUpCit7CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdTE2IHNhdmV1c2JtcjsKKwl1MzIgYmRzdGF0dXMsIHBpZG1hc2s7CisJdTMyIHBhZGRyOworCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpIHsKKwkJZGV2X2Vycih1ZGMtPmRldiwgInJlY2VpdmUgZXAgcGFzc2VkIHRvIHR4IGZ1bmN0aW9uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRGlzYWJsZSB0aGUgVHggaW50ZXJydXB0ICovCisJc2F2ZXVzYm1yID0gaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYm1yKTsKKwlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYm1yLAorCQkJc2F2ZXVzYm1yICYgfihVU0JfRV9UWEJfTUFTSyB8IFVTQl9FX1RYRV9NQVNLKSk7CisKKwliZCA9IGVwLT5uX3R4YmQ7CisJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKworCWlmICghKGJkc3RhdHVzICYgKFRfUiB8IEJEX0xFTkdUSF9NQVNLKSkpIHsKKwkJaWYgKGZyYW1lX2dldF9sZW5ndGgoZnJhbWUpID09IDApIHsKKwkJCWZyYW1lX3NldF9kYXRhKGZyYW1lLCB1ZGMtPm51bGxidWYpOworCQkJZnJhbWVfc2V0X2xlbmd0aChmcmFtZSwgMik7CisJCQlmcmFtZS0+aW5mbyB8PSAoWkxQIHwgTk9fQ1JDKTsKKwkJCWRldl92ZGJnKHVkYy0+ZGV2LCAidGhlIGZyYW1lIHNpemUgPSAwXG4iKTsKKwkJfQorCQlwYWRkciA9IHZpcnRfdG9fcGh5cygodm9pZCAqKWZyYW1lLT5kYXRhKTsKKwkJb3V0X2JlMzIoJmJkLT5idWYsIHBhZGRyKTsKKwkJYmRzdGF0dXMgPSAoYmRzdGF0dXMmVF9XKTsKKwkJaWYgKCEoZnJhbWVfZ2V0X2luZm8oZnJhbWUpICYgTk9fQ1JDKSkKKwkJCWJkc3RhdHVzIHw9IFRfUiB8IFRfSSB8IFRfTCB8IFRfVEMKKwkJCQkJfCBmcmFtZV9nZXRfbGVuZ3RoKGZyYW1lKTsKKwkJZWxzZQorCQkJYmRzdGF0dXMgfD0gVF9SIHwgVF9JIHwgVF9MIHwgZnJhbWVfZ2V0X2xlbmd0aChmcmFtZSk7CisKKwkJLyogaWYgdGhlIHBhY2tldCBpcyBhIFpMUCBpbiBzdGF0dXMgcGhhc2UgKi8KKwkJaWYgKChlcC0+ZXBudW0gPT0gMCkgJiYgKHVkYy0+ZXAwX3N0YXRlID09IERBVEFfU1RBVEVfTkVFRF9aTFApKQorCQkJZXAtPmRhdGEwMSA9IDB4MTsKKworCQlpZiAoZXAtPmRhdGEwMSkgeworCQkJcGlkbWFzayA9IFRfUElEX0RBVEExOworCQkJZnJhbWUtPmluZm8gfD0gUElEX0RBVEExOworCQl9IGVsc2UgeworCQkJcGlkbWFzayA9IFRfUElEX0RBVEEwOworCQkJZnJhbWUtPmluZm8gfD0gUElEX0RBVEEwOworCQl9CisJCWJkc3RhdHVzIHw9IFRfQ05GOworCQliZHN0YXR1cyB8PSBwaWRtYXNrOworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgYmRzdGF0dXMpOworCQlxZV9lcF9maWxsdHhmaWZvKGVwKTsKKworCQkvKiBlbmFibGUgdGhlIFRYIGludGVycnVwdCAqLworCQlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYm1yLCBzYXZldXNibXIpOworCisJCXFlX2VwX3RvZ2dsZWRhdGEwMShlcCk7CisJCWlmIChiZHN0YXR1cyAmIFRfVykKKwkJCWVwLT5uX3R4YmQgPSBlcC0+dHhiYXNlOworCQllbHNlCisJCQllcC0+bl90eGJkKys7CisKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2Jtciwgc2F2ZXVzYm1yKTsKKwkJZGV2X3ZkYmcodWRjLT5kZXYsICJUaGUgdHggYmQgaXMgbm90IHJlYWR5IVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorfQorCisvKiB3aGVuIGEgYmQgd2FzIHRyYW5zbWl0dGVkLCB0aGUgZnVuY3Rpb24gY2FuCisgKiBoYW5kbGUgdGhlIHR4X3JlcSwgbm90IGluY2x1ZGUgZXAwICAgICAgICAgICAqLworc3RhdGljIGludCB0eGNvbXBsZXRlKHN0cnVjdCBxZV9lcCAqZXAsIHVuc2lnbmVkIGNoYXIgcmVzdGFydCkKK3sKKwlpZiAoZXAtPnR4X3JlcSAhPSBOVUxMKSB7CisJCWlmICghcmVzdGFydCkgeworCQkJaW50IGFzZW50ID0gZXAtPmxhc3Q7CisJCQllcC0+c2VudCArPSBhc2VudDsKKwkJCWVwLT5sYXN0IC09IGFzZW50OworCQl9IGVsc2UgeworCQkJZXAtPmxhc3QgPSAwOworCQl9CisKKwkJLyogYSByZXF1ZXN0IGFscmVhZHkgd2VyZSB0cmFuc21pdHRlZCBjb21wbGV0ZWx5ICovCisJCWlmICgoZXAtPnR4X3JlcS0+cmVxLmxlbmd0aCAtIGVwLT5zZW50KSA8PSAwKSB7CisJCQllcC0+dHhfcmVxLT5yZXEuYWN0dWFsID0gKHVuc2lnbmVkIGludCllcC0+c2VudDsKKwkJCWRvbmUoZXAsIGVwLT50eF9yZXEsIDApOworCQkJZXAtPnR4X3JlcSA9IE5VTEw7CisJCQllcC0+bGFzdCA9IDA7CisJCQllcC0+c2VudCA9IDA7CisJCX0KKwl9CisKKwkvKiB3ZSBzaG91bGQgZ2FpbiBhIG5ldyB0eF9yZXEgZm90IHRoaXMgZW5kcG9pbnQgKi8KKwlpZiAoZXAtPnR4X3JlcSA9PSBOVUxMKSB7CisJCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQkJZXAtPnR4X3JlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsCXN0cnVjdCBxZV9yZXEsCisJCQkJCQkJcXVldWUpOworCQkJZXAtPmxhc3QgPSAwOworCQkJZXAtPnNlbnQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGdpdmUgYSBmcmFtZSBhbmQgYSB0eF9yZXEsIHNlbmQgc29tZSBkYXRhICovCitzdGF0aWMgaW50IHFlX3VzYl9zZW5kZGF0YShzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfZnJhbWUgKmZyYW1lKQoreworCXVuc2lnbmVkIGludCBzaXplOworCXU4ICpidWY7CisKKwlxZV9mcmFtZV9jbGVhbihmcmFtZSk7CisJc2l6ZSA9IG1pbl90KHUzMiwgKGVwLT50eF9yZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCksCisJCQkJZXAtPmVwLm1heHBhY2tldCk7CisJYnVmID0gKHU4ICopZXAtPnR4X3JlcS0+cmVxLmJ1ZiArIGVwLT5zZW50OworCWlmIChidWYgJiYgc2l6ZSkgeworCQllcC0+bGFzdCA9IHNpemU7CisJCWZyYW1lX3NldF9kYXRhKGZyYW1lLCBidWYpOworCQlmcmFtZV9zZXRfbGVuZ3RoKGZyYW1lLCBzaXplKTsKKwkJZnJhbWVfc2V0X3N0YXR1cyhmcmFtZSwgRlJBTUVfT0spOworCQlmcmFtZV9zZXRfaW5mbyhmcmFtZSwgMCk7CisJCXJldHVybiBxZV9lcF90eChlcCwgZnJhbWUpOworCX0KKwlyZXR1cm4gLUVJTzsKK30KKworLyogZ2l2ZSBhIGZyYW1lIHN0cnVjdCxzZW5kIGEgWkxQICovCitzdGF0aWMgaW50IHNlbmRudWxsZGF0YShzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfZnJhbWUgKmZyYW1lLCB1aW50IGluZm9yKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlxZV9mcmFtZV9jbGVhbihmcmFtZSk7CisJZnJhbWVfc2V0X2RhdGEoZnJhbWUsICh1OCAqKXVkYy0+bnVsbGJ1Zik7CisJZnJhbWVfc2V0X2xlbmd0aChmcmFtZSwgMik7CisJZnJhbWVfc2V0X3N0YXR1cyhmcmFtZSwgRlJBTUVfT0spOworCWZyYW1lX3NldF9pbmZvKGZyYW1lLCAoWkxQIHwgTk9fQ1JDIHwgaW5mb3IpKTsKKworCXJldHVybiBxZV9lcF90eChlcCwgZnJhbWUpOworfQorCitzdGF0aWMgaW50IGZyYW1lX2NyZWF0ZV90eChzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfZnJhbWUgKmZyYW1lKQoreworCXN0cnVjdCBxZV9yZXEgKnJlcSA9IGVwLT50eF9yZXE7CisJaW50IHJldmFsOworCisJaWYgKHJlcSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgocmVxLT5yZXEubGVuZ3RoIC0gZXAtPnNlbnQpID4gMCkKKwkJcmV2YWwgPSBxZV91c2Jfc2VuZGRhdGEoZXAsIGZyYW1lKTsKKwllbHNlCisJCXJldmFsID0gc2VuZG51bGxkYXRhKGVwLCBmcmFtZSwgMCk7CisKKwlyZXR1cm4gcmV2YWw7Cit9CisKKy8qIGlmIGRpcmVjdGlvbiBpcyBESVJfSU4sIHRoZSBzdGF0dXMgaXMgRGV2aWNlLT5Ib3N0CisgKiBpZiBkaXJlY3Rpb24gaXMgRElSX09VVCwgdGhlIHN0YXR1cyB0cmFuc2FjdGlvbiBpcyBEZXZpY2U8LUhvc3QKKyAqIGluIHN0YXR1cyBwaGFzZSwgdWRjIGNyZWF0ZSBhIHJlcXVlc3QgYW5kIGdhaW4gc3RhdHVzICovCitzdGF0aWMgaW50IGVwMF9wcmltZV9zdGF0dXMoc3RydWN0IHFlX3VkYyAqdWRjLCBpbnQgZGlyZWN0aW9uKQoreworCisJc3RydWN0IHFlX2VwICplcCA9ICZ1ZGMtPmVwc1swXTsKKworCWlmIChkaXJlY3Rpb24gPT0gVVNCX0RJUl9JTikgeworCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfTkVFRF9aTFA7CisJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfSU47CisJCXNlbmRudWxsZGF0YShlcCwgZXAtPnR4ZnJhbWUsIFNFVFVQX1NUQVRVUyB8IE5PX1JFUSk7CisJfSBlbHNlIHsKKwkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9PVVQ7CisJCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfT1VUX1NUQVRVUzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogYSByZXF1ZXN0IGNvbXBsZXRlIGluIGVwMCwgd2hldGhlciBnYWRnZXQgcmVxdWVzdCBvciB1ZGMgcmVxdWVzdCAqLworc3RhdGljIHZvaWQgZXAwX3JlcV9jb21wbGV0ZShzdHJ1Y3QgcWVfdWRjICp1ZGMsIHN0cnVjdCBxZV9yZXEgKnJlcSkKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gJnVkYy0+ZXBzWzBdOworCS8qIGJlY2F1c2UgdXNiIGFuZCBlcCdzIHN0YXR1cyBhbHJlYWR5IGJlZW4gc2V0IGluIGNoOXNldGFkZHJlc3MoKSAqLworCisJc3dpdGNoICh1ZGMtPmVwMF9zdGF0ZSkgeworCWNhc2UgREFUQV9TVEFURV9YTUlUOgorCQlkb25lKGVwLCByZXEsIDApOworCQkvKiByZWNlaXZlIHN0YXR1cyBwaGFzZSAqLworCQlpZiAoZXAwX3ByaW1lX3N0YXR1cyh1ZGMsIFVTQl9ESVJfT1VUKSkKKwkJCXFlX2VwMF9zdGFsbCh1ZGMpOworCQlicmVhazsKKworCWNhc2UgREFUQV9TVEFURV9ORUVEX1pMUDoKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwkJYnJlYWs7CisKKwljYXNlIERBVEFfU1RBVEVfUkVDVjoKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwkJLyogc2VuZCBzdGF0dXMgcGhhc2UgKi8KKwkJaWYgKGVwMF9wcmltZV9zdGF0dXModWRjLCBVU0JfRElSX0lOKSkKKwkJCXFlX2VwMF9zdGFsbCh1ZGMpOworCQlicmVhazsKKworCWNhc2UgV0FJVF9GT1JfT1VUX1NUQVRVUzoKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwkJYnJlYWs7CisKKwljYXNlIFdBSVRfRk9SX1NFVFVQOgorCQlkZXZfdmRiZyh1ZGMtPmRldiwgIlVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlxZV9lcDBfc3RhbGwodWRjKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGVwMF90eGNvbXBsZXRlKHN0cnVjdCBxZV9lcCAqZXAsIHVuc2lnbmVkIGNoYXIgcmVzdGFydCkKK3sKKwlzdHJ1Y3QgcWVfcmVxICp0eF9yZXEgPSBOVUxMOworCXN0cnVjdCBxZV9mcmFtZSAqZnJhbWUgPSBlcC0+dHhmcmFtZTsKKworCWlmICgoZnJhbWVfZ2V0X2luZm8oZnJhbWUpICYgKFpMUCB8IE5PX1JFUSkpID09IChaTFAgfCBOT19SRVEpKSB7CisJCWlmICghcmVzdGFydCkKKwkJCWVwLT51ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQllbHNlCisJCQlzZW5kbnVsbGRhdGEoZXAsIGVwLT50eGZyYW1lLCBTRVRVUF9TVEFUVVMgfCBOT19SRVEpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0eF9yZXEgPSBlcC0+dHhfcmVxOworCWlmICh0eF9yZXEgIT0gTlVMTCkgeworCQlpZiAoIXJlc3RhcnQpIHsKKwkJCWludCBhc2VudCA9IGVwLT5sYXN0OworCQkJZXAtPnNlbnQgKz0gYXNlbnQ7CisJCQllcC0+bGFzdCAtPSBhc2VudDsKKwkJfSBlbHNlIHsKKwkJCWVwLT5sYXN0ID0gMDsKKwkJfQorCisJCS8qIGEgcmVxdWVzdCBhbHJlYWR5IHdlcmUgdHJhbnNtaXR0ZWQgY29tcGxldGVseSAqLworCQlpZiAoKGVwLT50eF9yZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCkgPD0gMCkgeworCQkJZXAtPnR4X3JlcS0+cmVxLmFjdHVhbCA9ICh1bnNpZ25lZCBpbnQpZXAtPnNlbnQ7CisJCQllcDBfcmVxX2NvbXBsZXRlKGVwLT51ZGMsIGVwLT50eF9yZXEpOworCQkJZXAtPnR4X3JlcSA9IE5VTEw7CisJCQllcC0+bGFzdCA9IDA7CisJCQllcC0+c2VudCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfdmRiZyhlcC0+dWRjLT5kZXYsICJ0aGUgZXAwX2NvbnRyb2xsZXIgaGF2ZSBubyByZXFcbiIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVwMF90eGZyYW1lX2hhbmRsZShzdHJ1Y3QgcWVfZXAgKmVwKQoreworCS8qIGlmIGhhdmUgZXJyb3IsIHRyYW5zbWl0IGFnYWluICovCisJaWYgKGZyYW1lX2dldF9zdGF0dXMoZXAtPnR4ZnJhbWUpICYgRlJBTUVfRVJST1IpIHsKKwkJcWVfZXBfZmx1c2h0eGZpZm8oZXApOworCQlkZXZfdmRiZyhlcC0+dWRjLT5kZXYsICJUaGUgRVAwIHRyYW5zbWl0IGRhdGEgaGF2ZSBlcnJvciFcbiIpOworCQlpZiAoZnJhbWVfZ2V0X2luZm8oZXAtPnR4ZnJhbWUpICYgUElEX0RBVEEwKQorCQkJZXAtPmRhdGEwMSA9IDA7CisJCWVsc2UKKwkJCWVwLT5kYXRhMDEgPSAxOworCisJCWVwMF90eGNvbXBsZXRlKGVwLCAxKTsKKwl9IGVsc2UKKwkJZXAwX3R4Y29tcGxldGUoZXAsIDApOworCisJZnJhbWVfY3JlYXRlX3R4KGVwLCBlcC0+dHhmcmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXAwX3R4Y29uZihzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZTsKKwl1MzIgYmRzdGF0dXM7CisKKwliZCA9IGVwLT5jX3R4YmQ7CisJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwl3aGlsZSAoIShiZHN0YXR1cyAmIFRfUikgJiYgKGJkc3RhdHVzICYgflRfVykpIHsKKwkJcGZyYW1lID0gZXAtPnR4ZnJhbWU7CisKKwkJLyogY2xlYXIgYW5kIHJlY3ljbGUgdGhlIEJEICovCisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBiZHN0YXR1cyAmIFRfVyk7CisJCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwkJaWYgKGJkc3RhdHVzICYgVF9XKQorCQkJZXAtPmNfdHhiZCA9IGVwLT50eGJhc2U7CisJCWVsc2UKKwkJCWVwLT5jX3R4YmQrKzsKKworCQlpZiAoZXAtPmNfdHhiZCA9PSBlcC0+bl90eGJkKSB7CisJCQlpZiAoYmRzdGF0dXMgJiBERVZJQ0VfVF9FUlJPUikgeworCQkJCWZyYW1lX3NldF9zdGF0dXMocGZyYW1lLCBGUkFNRV9FUlJPUik7CisJCQkJaWYgKGJkc3RhdHVzICYgVF9UTykKKwkJCQkJcGZyYW1lLT5zdGF0dXMgfD0gVFhfRVJfVElNRU9VVDsKKwkJCQlpZiAoYmRzdGF0dXMgJiBUX1VOKQorCQkJCQlwZnJhbWUtPnN0YXR1cyB8PSBUWF9FUl9VTkRFUlVOOworCQkJfQorCQkJZXAwX3R4ZnJhbWVfaGFuZGxlKGVwKTsKKwkJfQorCisJCWJkID0gZXAtPmNfdHhiZDsKKwkJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcF90eGZyYW1lX2hhbmRsZShzdHJ1Y3QgcWVfZXAgKmVwKQoreworCWlmIChmcmFtZV9nZXRfc3RhdHVzKGVwLT50eGZyYW1lKSAmIEZSQU1FX0VSUk9SKSB7CisJCXFlX2VwX2ZsdXNodHhmaWZvKGVwKTsKKwkJZGV2X3ZkYmcoZXAtPnVkYy0+ZGV2LCAiVGhlIEVQMCB0cmFuc21pdCBkYXRhIGhhdmUgZXJyb3IhXG4iKTsKKwkJaWYgKGZyYW1lX2dldF9pbmZvKGVwLT50eGZyYW1lKSAmIFBJRF9EQVRBMCkKKwkJCWVwLT5kYXRhMDEgPSAwOworCQllbHNlCisJCQllcC0+ZGF0YTAxID0gMTsKKworCQl0eGNvbXBsZXRlKGVwLCAxKTsKKwl9IGVsc2UKKwkJdHhjb21wbGV0ZShlcCwgMCk7CisKKwlmcmFtZV9jcmVhdGVfdHgoZXAsIGVwLT50eGZyYW1lKTsgLyogc2VuZCB0aGUgZGF0YSAqLworCXJldHVybiAwOworfQorCisvKiBjb25maXJtIHRoZSBhbHJlYWR5IHRyYWluc21pdGVkIGJkICovCitzdGF0aWMgaW50IHFlX2VwX3R4Y29uZihzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZSA9IE5VTEw7CisJdTMyIGJkc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgYnJlYWtvbnJ4aW50ZXJydXB0ID0gMDsKKworCWJkID0gZXAtPmNfdHhiZDsKKwliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCXdoaWxlICghKGJkc3RhdHVzICYgVF9SKSAmJiAoYmRzdGF0dXMgJiB+VF9XKSkgeworCQlwZnJhbWUgPSBlcC0+dHhmcmFtZTsKKwkJaWYgKGJkc3RhdHVzICYgREVWSUNFX1RfRVJST1IpIHsKKwkJCWZyYW1lX3NldF9zdGF0dXMocGZyYW1lLCBGUkFNRV9FUlJPUik7CisJCQlpZiAoYmRzdGF0dXMgJiBUX1RPKQorCQkJCXBmcmFtZS0+c3RhdHVzIHw9IFRYX0VSX1RJTUVPVVQ7CisJCQlpZiAoYmRzdGF0dXMgJiBUX1VOKQorCQkJCXBmcmFtZS0+c3RhdHVzIHw9IFRYX0VSX1VOREVSVU47CisJCX0KKworCQkvKiBjbGVhciBhbmQgcmVjeWNsZSB0aGUgQkQgKi8KKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIGJkc3RhdHVzICYgVF9XKTsKKwkJb3V0X2JlMzIoJmJkLT5idWYsIDApOworCQlpZiAoYmRzdGF0dXMgJiBUX1cpCisJCQllcC0+Y190eGJkID0gZXAtPnR4YmFzZTsKKwkJZWxzZQorCQkJZXAtPmNfdHhiZCsrOworCisJCS8qIGhhbmRsZSB0aGUgdHggZnJhbWUgKi8KKwkJZXBfdHhmcmFtZV9oYW5kbGUoZXApOworCQliZCA9IGVwLT5jX3R4YmQ7CisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJfQorCWlmIChicmVha29ucnhpbnRlcnJ1cHQpCisJCXJldHVybiAtRUlPOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIEFkZCBhIHJlcXVlc3QgaW4gcXVldWUsIGFuZCB0cnkgdG8gdHJhbnNtaXQgYSBwYWNrZXQgKi8KK3N0YXRpYyBpbnQgZXBfcmVxX3NlbmQoc3RydWN0IHFlX2VwICplcCwgc3RydWN0IHFlX3JlcSAqcmVxKQoreworCWludCByZXZhbCA9IDA7CisKKwlpZiAoZXAtPnR4X3JlcSA9PSBOVUxMKSB7CisJCWVwLT5zZW50ID0gMDsKKwkJZXAtPmxhc3QgPSAwOworCQl0eGNvbXBsZXRlKGVwLCAwKTsgLyogY2FuIGdhaW4gYSBuZXcgdHhfcmVxICovCisJCXJldmFsID0gZnJhbWVfY3JlYXRlX3R4KGVwLCBlcC0+dHhmcmFtZSk7CisJfQorCXJldHVybiByZXZhbDsKK30KKworLyogTWF5YmUgdGhpcyBpcyBhIGdvb2QgaWRlYWwgKi8KK3N0YXRpYyBpbnQgZXBfcmVxX3J4KHN0cnVjdCBxZV9lcCAqZXAsIHN0cnVjdCBxZV9yZXEgKnJlcSkKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCXN0cnVjdCBxZV9mcmFtZSAqcGZyYW1lID0gTlVMTDsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdTMyIGJkc3RhdHVzLCBsZW5ndGg7CisJdTMyIHZhZGRyLCBmc2l6ZTsKKwl1OCAqY3A7CisJdTggZmluaXNoX3JlcSA9IDA7CisJdTggZnJhbWVwaWQ7CisKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlkZXZfdmRiZyh1ZGMtPmRldiwgInRoZSByZXEgYWxyZWFkeSBmaW5pc2ghXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXBmcmFtZSA9IGVwLT5yeGZyYW1lOworCisJYmQgPSBlcC0+bl9yeGJkOworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKworCXdoaWxlICghKGJkc3RhdHVzICYgUl9FKSAmJiBsZW5ndGgpIHsKKwkJaWYgKGZpbmlzaF9yZXEpCisJCQlicmVhazsKKwkJaWYgKChiZHN0YXR1cyAmIFJfRikgJiYgKGJkc3RhdHVzICYgUl9MKQorCQkJCQkmJiAhKGJkc3RhdHVzICYgUl9FUlJPUikpIHsKKwkJCXFlX2ZyYW1lX2NsZWFuKHBmcmFtZSk7CisJCQl2YWRkciA9ICh1MzIpcGh5c190b192aXJ0KGluX2JlMzIoJmJkLT5idWYpKTsKKwkJCWZyYW1lX3NldF9kYXRhKHBmcmFtZSwgKHU4ICopdmFkZHIpOworCQkJZnJhbWVfc2V0X2xlbmd0aChwZnJhbWUsIChsZW5ndGggLSBVU0JfQ1JDX1NJWkUpKTsKKwkJCWZyYW1lX3NldF9zdGF0dXMocGZyYW1lLCBGUkFNRV9PSyk7CisJCQlzd2l0Y2ggKGJkc3RhdHVzICYgUl9QSUQpIHsKKwkJCWNhc2UgUl9QSURfREFUQTE6CisJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfREFUQTEpOyBicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfREFUQTApOyBicmVhazsKKwkJCX0KKwkJCS8qIGhhbmRsZSB0aGUgcnggZnJhbWUgKi8KKworCQkJaWYgKGZyYW1lX2dldF9pbmZvKHBmcmFtZSkgJiBQSURfREFUQTEpCisJCQkJZnJhbWVwaWQgPSAweDE7CisJCQllbHNlCisJCQkJZnJhbWVwaWQgPSAwOworCisJCQlpZiAoZnJhbWVwaWQgIT0gZXAtPmRhdGEwMSkgeworCQkJCWRldl92ZGJnKHVkYy0+ZGV2LCAidGhlIGRhdGEwMSBlcnJvciFcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlmc2l6ZSA9IGZyYW1lX2dldF9sZW5ndGgocGZyYW1lKTsKKworCQkJCWNwID0gKHU4ICopKHJlcS0+cmVxLmJ1ZikgKyByZXEtPnJlcS5hY3R1YWw7CisJCQkJaWYgKGNwKSB7CisJCQkJCW1lbWNweShjcCwgcGZyYW1lLT5kYXRhLCBmc2l6ZSk7CisJCQkJCXJlcS0+cmVxLmFjdHVhbCArPSBmc2l6ZTsKKwkJCQkJaWYgKChmc2l6ZSA8IGVwLT5lcC5tYXhwYWNrZXQpCisJCQkJCQl8fCAocmVxLT5yZXEuYWN0dWFsID49CisJCQkJCQkJcmVxLT5yZXEubGVuZ3RoKSkgeworCQkJCQkJZmluaXNoX3JlcSA9IDE7CisJCQkJCQlkb25lKGVwLCByZXEsIDApOworCQkJCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQkJCQkJcWVfZXByeF9uYWNrKGVwKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlxZV9lcF90b2dnbGVkYXRhMDEoZXApOworCQkJfQorCQl9IGVsc2UgeworCQkJZGV2X2Vycih1ZGMtPmRldiwgIlRoZSByZWNlaXZlIGZyYW1lIHdpdGggZXJyb3IhXG4iKTsKKwkJfQorCisJCS8qIG5vdGU6IGRvbid0IGNsZWFyIHRoZSByeGJkJ3MgYnVmZmVyIGFkZHJlc3MgKgorCQkgKiBvbmx5IENsZWFyIHRoZSBsZW5ndGggKi8KKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIChiZHN0YXR1cyAmIEJEX1NUQVRVU19NQVNLKSk7CisJCWVwLT5oYXNfZGF0YS0tOworCisJCS8qIEdldCBuZXh0IEJEICovCisJCWlmIChiZHN0YXR1cyAmIFJfVykKKwkJCWJkID0gZXAtPnJ4YmFzZTsKKwkJZWxzZQorCQkJYmQrKzsKKworCQliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCQlsZW5ndGggPSBiZHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLOworCX0KKworCWVwLT5uX3J4YmQgPSBiZDsKKwllcF9yZWN5Y2xlX3J4YmRzKGVwKTsKKworCXJldHVybiAwOworfQorCisvKiBvbmx5IGFkZCB0aGUgcmVxdWVzdCBpbiBxdWV1ZSAqLworc3RhdGljIGludCBlcF9yZXFfcmVjZWl2ZShzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfcmVxICpyZXEpCit7CisJaWYgKGVwLT5zdGF0ZSA9PSBFUF9TVEFURV9OQUNLKSB7CisJCWlmIChlcC0+aGFzX2RhdGEgPD0gMCkgeworCQkJLyogRW5hYmxlIHJ4IGFuZCB1bm1hc2sgcnggaW50ZXJydXB0ICovCisJCQlxZV9lcHJ4X25vcm1hbChlcCk7CisJCX0gZWxzZSB7CisJCQkvKiBDb3B5IHRoZSBleGlzdCBCRCBkYXRhICovCisJCQllcF9yZXFfcngoZXAsIHJlcSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJSW50ZXJuYWwgVXNlZCBGdW5jdGlvbiBFbmQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJRW5kcG9pbnQgTWFuYWdlbWVudCBGdW5jdGlvbnMgRm9yIEdhZGdldAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcWVfZXBfZW5hYmxlKHN0cnVjdCB1c2JfZXAgKl9lcCwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IHFlX3VkYyAqdWRjOworCXN0cnVjdCBxZV9lcCAqZXA7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgY2hhciBlcG51bTsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHFlX2VwLCBlcCk7CisKKwkvKiBjYXRjaCB2YXJpb3VzIGJvZ3VzIHBhcmFtZXRlcnMgKi8KKwlpZiAoIV9lcCB8fCAhZGVzYyB8fCBlcC0+ZGVzYyB8fCBfZXAtPm5hbWUgPT0gZXBfbmFtZVswXSB8fAorCQkJKGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfRU5EUE9JTlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVkYyA9IGVwLT51ZGM7CisJaWYgKCF1ZGMtPmRyaXZlciB8fCAodWRjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKworCWVwbnVtID0gKHU4KWRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiAweEY7CisKKwlyZXR2YWwgPSBxZV9lcF9pbml0KHVkYywgZXBudW0sIGRlc2MpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQljcG1fbXVyYW1fZnJlZShjcG1fbXVyYW1fb2Zmc2V0KGVwLT5yeGJhc2UpKTsKKwkJZGV2X2RiZyh1ZGMtPmRldiwgImVuYWJsZSBlcCVkIGZhaWxlZFxuIiwgZXAtPmVwbnVtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldl9kYmcodWRjLT5kZXYsICJlbmFibGUgZXAlZCBzdWNjZXNzZnVsXG4iLCBlcC0+ZXBudW0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2Rpc2FibGUoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYzsKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBxZV9lcCwgZXApOworCXVkYyA9IGVwLT51ZGM7CisKKwlpZiAoIV9lcCB8fCAhZXAtPmRlc2MpIHsKKwkJZGV2X2RiZyh1ZGMtPmRldiwgIiVzIG5vdCBlbmFibGVkXG4iLCBfZXAgPyBlcC0+ZXAubmFtZSA6IE5VTEwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJLyogTnVrZSBhbGwgcGVuZGluZyByZXF1ZXN0cyAoZG9lcyBmbHVzaCkgKi8KKwludWtlKGVwLCAtRVNIVVRET1dOKTsKKwllcC0+ZGVzYyA9IE5VTEw7CisJZXAtPnN0b3BwZWQgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJY3BtX211cmFtX2ZyZWUoY3BtX211cmFtX29mZnNldChlcC0+cnhiYXNlKSk7CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkKKwkJc2l6ZSA9IChlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFICsgMikgKgorCQkJCShVU0JfQkRSSU5HX0xFTl9SWCArIDEpOworCWVsc2UKKwkJc2l6ZSA9IChlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFICsgMikgKgorCQkJCShVU0JfQkRSSU5HX0xFTiArIDEpOworCisJaWYgKGVwLT5kaXIgIT0gVVNCX0RJUl9JTikgeworCQlrZnJlZShlcC0+cnhmcmFtZSk7CisJCWlmIChlcC0+cnhidWZtYXApIHsKKwkJCWRtYV91bm1hcF9zaW5nbGUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQllcC0+cnhidWZfZCwgc2l6ZSwKKwkJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJCWVwLT5yeGJ1Zl9kID0gRE1BX0FERFJfSU5WQUxJRDsKKwkJfSBlbHNlIHsKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KAorCQkJCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJCWVwLT5yeGJ1Zl9kLCBzaXplLAorCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQl9CisJCWtmcmVlKGVwLT5yeGJ1ZmZlcik7CisJfQorCisJaWYgKGVwLT5kaXIgIT0gVVNCX0RJUl9PVVQpCisJCWtmcmVlKGVwLT50eGZyYW1lKTsKKworCWRldl9kYmcodWRjLT5kZXYsICJkaXNhYmxlZCAlcyBPS1xuIiwgX2VwLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqcWVfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICpfZXAsCWdmcF90IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgcWVfcmVxICpyZXE7CisKKwlyZXEgPSBremFsbG9jKHNpemVvZigqcmVxKSwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCisJSU5JVF9MSVNUX0hFQUQoJnJlcS0+cXVldWUpOworCisJcmV0dXJuICZyZXEtPnJlcTsKK30KKworc3RhdGljIHZvaWQgcWVfZnJlZV9yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBxZV9yZXEgKnJlcTsKKworCXJlcSA9IGNvbnRhaW5lcl9vZihfcmVxLCBzdHJ1Y3QgcWVfcmVxLCByZXEpOworCisJaWYgKF9yZXEpCisJCWtmcmVlKHJlcSk7Cit9CisKKy8qIHF1ZXVlcyAoc3VibWl0cykgYW4gSS9PIHJlcXVlc3QgdG8gYW4gZW5kcG9pbnQgKi8KK3N0YXRpYyBpbnQgcWVfZXBfcXVldWUoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEsCisJCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcWVfZXAsIGVwKTsKKwlzdHJ1Y3QgcWVfcmVxICpyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IHFlX3JlcSwgcmVxKTsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV2YWw7CisKKwl1ZGMgPSBlcC0+dWRjOworCS8qIGNhdGNoIHZhcmlvdXMgYm9ndXMgcGFyYW1ldGVycyAqLworCWlmICghX3JlcSB8fCAhcmVxLT5yZXEuY29tcGxldGUgfHwgIXJlcS0+cmVxLmJ1ZgorCQkJfHwgIWxpc3RfZW1wdHkoJnJlcS0+cXVldWUpKSB7CisJCWRldl9kYmcodWRjLT5kZXYsICJiYWQgcGFyYW1zXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXBfaW5kZXgoZXApKSkgeworCQlkZXZfZGJnKHVkYy0+ZGV2LCAiYmFkIGVwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCF1ZGMtPmRyaXZlciB8fCB1ZGMtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwlyZXEtPmVwID0gZXA7CisKKwkvKiBtYXAgdmlydHVhbCBhZGRyZXNzIHRvIGhhcmR3YXJlICovCisJaWYgKHJlcS0+cmVxLmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CisJCXJlcS0+cmVxLmRtYSA9IGRtYV9tYXBfc2luZ2xlKGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQlyZXEtPnJlcS5idWYsCisJCQkJCXJlcS0+cmVxLmxlbmd0aCwKKwkJCQkJZXBfaXNfaW4oZXApCisJCQkJCT8gRE1BX1RPX0RFVklDRSA6CisJCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCXJlcS0+bWFwcGVkID0gMTsKKwl9IGVsc2UgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShlcC0+dWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJcmVxLT5yZXEuZG1hLCByZXEtPnJlcS5sZW5ndGgsCisJCQkJCWVwX2lzX2luKGVwKQorCQkJCQk/IERNQV9UT19ERVZJQ0UgOgorCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQlyZXEtPm1hcHBlZCA9IDA7CisJfQorCisJcmVxLT5yZXEuc3RhdHVzID0gLUVJTlBST0dSRVNTOworCXJlcS0+cmVxLmFjdHVhbCA9IDA7CisKKwlsaXN0X2FkZF90YWlsKCZyZXEtPnF1ZXVlLCAmZXAtPnF1ZXVlKTsKKwlkZXZfdmRiZyh1ZGMtPmRldiwgImdhZGdldCBoYXZlIHJlcXVlc3QgaW4gJXMhICVkXG4iLAorCQkJZXAtPm5hbWUsIHJlcS0+cmVxLmxlbmd0aCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCS8qIHB1c2ggdGhlIHJlcXVlc3QgdG8gZGV2aWNlICovCisJaWYgKGVwX2lzX2luKGVwKSkKKwkJcmV2YWwgPSBlcF9yZXFfc2VuZChlcCwgcmVxKTsKKworCS8qIEVQMCAqLworCWlmIChlcF9pbmRleChlcCkgPT0gMCAmJiByZXEtPnJlcS5sZW5ndGggPiAwKSB7CisJCWlmIChlcF9pc19pbihlcCkpCisJCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfWE1JVDsKKwkJZWxzZQorCQkJdWRjLT5lcDBfc3RhdGUgPSBEQVRBX1NUQVRFX1JFQ1Y7CisJfQorCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpCisJCXJldmFsID0gZXBfcmVxX3JlY2VpdmUoZXAsIHJlcSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKiBkZXF1ZXVlcyAoY2FuY2VscywgdW5saW5rcykgYW4gSS9PIHJlcXVlc3QgZnJvbSBhbiBlbmRwb2ludCAqLworc3RhdGljIGludCBxZV9lcF9kZXF1ZXVlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcWVfZXAsIGVwKTsKKwlzdHJ1Y3QgcWVfcmVxICpyZXE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghX2VwIHx8ICFfcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisKKwkvKiBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSBxdWV1ZWQgb24gdGhpcyBlbmRwb2ludCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgeworCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpCisJCQlicmVhazsKKwl9CisKKwlpZiAoJnJlcS0+cmVxICE9IF9yZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogbW9kaWZ5IHRoZSBlbmRwb2ludCBoYWx0IGZlYXR1cmUKKyAqIEBlcDogdGhlIG5vbi1pc29jaHJvbm91cyBlbmRwb2ludCBiZWluZyBzdGFsbGVkCisgKiBAdmFsdWU6IDEtLXNldCBoYWx0ICAwLS1jbGVhciBoYWx0CisgKiBSZXR1cm5zIHplcm8sIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcWVfZXBfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHFlX2VwICplcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGF0dXMgPSAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGM7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBxZV9lcCwgZXApOworCWlmICghX2VwIHx8ICFlcC0+ZGVzYykgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwl1ZGMgPSBlcC0+dWRjOworCS8qIEF0dGVtcHQgdG8gaGFsdCBJTiBlcCB3aWxsIGZhaWwgaWYgYW55IHRyYW5zZmVyIHJlcXVlc3RzCisJICogYXJlIHN0aWxsIHF1ZXVlICovCisJaWYgKHZhbHVlICYmIGVwX2lzX2luKGVwKSAmJiAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlzdGF0dXMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlzdGF0dXMgPSAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisJcWVfZXB0eF9zdGFsbF9jaGFuZ2UoZXAsIHZhbHVlKTsKKwlxZV9lcHJ4X3N0YWxsX2NoYW5nZShlcCwgdmFsdWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKKworCWlmIChlcC0+ZXBudW0gPT0gMCkgeworCQl1ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQl1ZGMtPmVwMF9kaXIgPSAwOworCX0KKworCS8qIHNldCBkYXRhIHRvZ2dsZSB0byBEQVRBMCBvbiBjbGVhciBoYWx0ICovCisJaWYgKHZhbHVlID09IDApCisJCWVwLT5kYXRhMDEgPSAwOworb3V0OgorCWRldl92ZGJnKHVkYy0+ZGV2LCAiJXMgJXMgaGFsdCBzdGF0ICVkXG4iLCBlcC0+ZXAubmFtZSwKKwkJCXZhbHVlID8gICJzZXQiIDogImNsZWFyIiwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VwX29wcyBxZV9lcF9vcHMgPSB7CisJLmVuYWJsZSA9IHFlX2VwX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHFlX2VwX2Rpc2FibGUsCisKKwkuYWxsb2NfcmVxdWVzdCA9IHFlX2FsbG9jX3JlcXVlc3QsCisJLmZyZWVfcmVxdWVzdCA9IHFlX2ZyZWVfcmVxdWVzdCwKKworCS5xdWV1ZSA9IHFlX2VwX3F1ZXVlLAorCS5kZXF1ZXVlID0gcWVfZXBfZGVxdWV1ZSwKKworCS5zZXRfaGFsdCA9IHFlX2VwX3NldF9oYWx0LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlHYWRnZXQgRHJpdmVyIExheWVyIE9wZXJhdGlvbnMKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHZXQgdGhlIGN1cnJlbnQgZnJhbWUgbnVtYmVyICovCitzdGF0aWMgaW50IHFlX2dldF9mcmFtZShzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXUxNiB0bXA7CisKKwl0bXAgPSBpbl9iZTE2KCZ1ZGNfY29udHJvbGxlci0+dXNiX3BhcmFtLT5mcmFtZV9uKTsKKwlpZiAodG1wICYgMHg4MDAwKQorCQl0bXAgPSB0bXAgJiAweDA3ZmY7CisJZWxzZQorCQl0bXAgPSAtRUlOVkFMOworCisJcmV0dXJuIChpbnQpdG1wOworfQorCisvKiBUcmllcyB0byB3YWtlIHVwIHRoZSBob3N0IGNvbm5lY3RlZCB0byB0aGlzIGdhZGdldAorICoKKyAqIFJldHVybiA6IDAtc3VjY2VzcworICogTmVnYXRpdmUtdGhpcyBmZWF0dXJlIG5vdCBlbmFibGVkIGJ5IGhvc3Qgb3Igbm90IHN1cHBvcnRlZCBieSBkZXZpY2UgaHcKKyAqLworc3RhdGljIGludCBxZV93YWtldXAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCisvKiBOb3RpZnkgY29udHJvbGxlciB0aGF0IFZCVVMgaXMgcG93ZXJlZCwgQ2FsbGVkIGJ5IHdoYXRldmVyCisgICBkZXRlY3RzIFZCVVMgc2Vzc2lvbnMgKi8KK3N0YXRpYyBpbnQgcWVfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGludCBpc19hY3RpdmUpCit7CisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworLyogY29uc3RyYWluIGNvbnRyb2xsZXIncyBWQlVTIHBvd2VyIHVzYWdlCisgKiBUaGlzIGNhbGwgaXMgdXNlZCBieSBnYWRnZXQgZHJpdmVycyBkdXJpbmcgU0VUX0NPTkZJR1VSQVRJT04gY2FsbHMsCisgKiByZXBvcnRpbmcgaG93IG11Y2ggcG93ZXIgdGhlIGRldmljZSBtYXkgY29uc3VtZS4gIEZvciBleGFtcGxlLCB0aGlzCisgKiBjb3VsZCBhZmZlY3QgaG93IHF1aWNrbHkgYmF0dGVyaWVzIGFyZSByZWNoYXJnZWQuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbnQgcWVfdmJ1c19kcmF3KHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIHVuc2lnbmVkIG1BKQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKKy8qIENoYW5nZSBEYXRhKyBwdWxsdXAgc3RhdHVzCisgKiB0aGlzIGZ1bmMgaXMgdXNlZCBieSB1c2JfZ2FkZ2V0X2Nvbm5lY3QvZGlzY29ubmVjdAorICovCitzdGF0aWMgaW50IHFlX3B1bGx1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCBpbnQgaXNfb24pCit7CisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworLyogZGVmaW5lZCBpbiB1c2JfZ2FkZ2V0LmggKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgcWVfZ2FkZ2V0X29wcyA9IHsKKwkuZ2V0X2ZyYW1lID0gcWVfZ2V0X2ZyYW1lLAorCS53YWtldXAgPSBxZV93YWtldXAsCisvKgkuc2V0X3NlbGZwb3dlcmVkID0gcWVfc2V0X3NlbGZwb3dlcmVkLCovIC8qIGFsd2F5cyBzZWxmcG93ZXJlZCAqLworCS52YnVzX3Nlc3Npb24gPSBxZV92YnVzX3Nlc3Npb24sCisJLnZidXNfZHJhdyA9IHFlX3ZidXNfZHJhdywKKwkucHVsbHVwID0gcWVfcHVsbHVwLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVVNCIGVwMCBTZXR1cCBwcm9jZXNzIGluIEJVUyBFbnVtZXJhdGlvbgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB1ZGNfcmVzZXRfZXBfcXVldWUoc3RydWN0IHFlX3VkYyAqdWRjLCB1OCBwaXBlKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbcGlwZV07CisKKwludWtlKGVwLCAtRUNPTk5SRVNFVCk7CisJZXAtPnR4X3JlcSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRfcXVldWVzKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwl1OCBwaXBlOworCisJZm9yIChwaXBlID0gMDsgcGlwZSA8IFVTQl9NQVhfRU5EUE9JTlRTOyBwaXBlKyspCisJCXVkY19yZXNldF9lcF9xdWV1ZSh1ZGMsIHBpcGUpOworCisJLyogcmVwb3J0IGRpc2Nvbm5lY3Q7IHRoZSBkcml2ZXIgaXMgYWxyZWFkeSBxdWllc2NlZCAqLworCXNwaW5fdW5sb2NrKCZ1ZGMtPmxvY2spOworCXVkYy0+ZHJpdmVyLT5kaXNjb25uZWN0KCZ1ZGMtPmdhZGdldCk7CisJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNoOXNldGFkZHJlc3Moc3RydWN0IHFlX3VkYyAqdWRjLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKKwkJCXUxNiBsZW5ndGgpCit7CisJLyogU2F2ZSB0aGUgbmV3IGFkZHJlc3MgdG8gZGV2aWNlIHN0cnVjdCAqLworCXVkYy0+ZGV2aWNlX2FkZHJlc3MgPSAodTgpIHZhbHVlOworCS8qIFVwZGF0ZSB1c2Igc3RhdGUgKi8KKwl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9BRERSRVNTOworCisJLyogU3RhdHVzIHBoYXNlICwgc2VuZCBhIFpMUCAqLworCWlmIChlcDBfcHJpbWVfc3RhdHVzKHVkYywgVVNCX0RJUl9JTikpCisJCXFlX2VwMF9zdGFsbCh1ZGMpOworfQorCitzdGF0aWMgdm9pZCBvd25lcmNvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBxZV9yZXEgKnJlcSA9IGNvbnRhaW5lcl9vZihfcmVxLCBzdHJ1Y3QgcWVfcmVxLCByZXEpOworCisJcmVxLT5yZXEuYnVmID0gTlVMTDsKKwlrZnJlZShyZXEpOworfQorCitzdGF0aWMgdm9pZCBjaDlnZXRzdGF0dXMoc3RydWN0IHFlX3VkYyAqdWRjLCB1OCByZXF1ZXN0X3R5cGUsIHUxNiB2YWx1ZSwKKwkJCXUxNiBpbmRleCwgdTE2IGxlbmd0aCkKK3sKKwl1MTYgdXNiX3N0YXR1cyA9IDA7CisJc3RydWN0IHFlX3JlcSAqcmVxOworCXN0cnVjdCBxZV9lcCAqZXA7CisJaW50IHN0YXR1cyA9IDA7CisKKwllcCA9ICZ1ZGMtPmVwc1swXTsKKwlpZiAoKHJlcXVlc3RfdHlwZSAmIFVTQl9SRUNJUF9NQVNLKSA9PSBVU0JfUkVDSVBfREVWSUNFKSB7CisJCS8qIEdldCBkZXZpY2Ugc3RhdHVzICovCisJCXVzYl9zdGF0dXMgPSAxIDw8IFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEOworCX0gZWxzZSBpZiAoKHJlcXVlc3RfdHlwZSAmIFVTQl9SRUNJUF9NQVNLKSA9PSBVU0JfUkVDSVBfSU5URVJGQUNFKSB7CisJCS8qIEdldCBpbnRlcmZhY2Ugc3RhdHVzICovCisJCS8qIFdlIGRvbid0IGhhdmUgaW50ZXJmYWNlIGluZm9ybWF0aW9uIGluIHVkYyBkcml2ZXIgKi8KKwkJdXNiX3N0YXR1cyA9IDA7CisJfSBlbHNlIGlmICgocmVxdWVzdF90eXBlICYgVVNCX1JFQ0lQX01BU0spID09IFVTQl9SRUNJUF9FTkRQT0lOVCkgeworCQkvKiBHZXQgZW5kcG9pbnQgc3RhdHVzICovCisJCWludCBwaXBlID0gaW5kZXggJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJCXN0cnVjdCBxZV9lcCAqdGFyZ2V0X2VwID0gJnVkYy0+ZXBzW3BpcGVdOworCQl1MTYgdXNlcDsKKworCQkvKiBzdGFsbCBpZiBlbmRwb2ludCBkb2Vzbid0IGV4aXN0ICovCisJCWlmICghdGFyZ2V0X2VwLT5kZXNjKQorCQkJZ290byBzdGFsbDsKKworCQl1c2VwID0gaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbcGlwZV0pOworCQlpZiAoaW5kZXggJiBVU0JfRElSX0lOKSB7CisJCQlpZiAodGFyZ2V0X2VwLT5kaXIgIT0gVVNCX0RJUl9JTikKKwkJCQlnb3RvIHN0YWxsOworCQkJaWYgKCh1c2VwICYgVVNCX1RIU19NQVNLKSA9PSBVU0JfVEhTX1NUQUxMKQorCQkJCXVzYl9zdGF0dXMgPSAxIDw8IFVTQl9FTkRQT0lOVF9IQUxUOworCQl9IGVsc2UgeworCQkJaWYgKHRhcmdldF9lcC0+ZGlyICE9IFVTQl9ESVJfT1VUKQorCQkJCWdvdG8gc3RhbGw7CisJCQlpZiAoKHVzZXAgJiBVU0JfUkhTX01BU0spID09IFVTQl9SSFNfU1RBTEwpCisJCQkJdXNiX3N0YXR1cyA9IDEgPDwgVVNCX0VORFBPSU5UX0hBTFQ7CisJCX0KKwl9CisKKwlyZXEgPSBjb250YWluZXJfb2YocWVfYWxsb2NfcmVxdWVzdCgmZXAtPmVwLCBHRlBfS0VSTkVMKSwKKwkJCQkJc3RydWN0IHFlX3JlcSwgcmVxKTsKKwlyZXEtPnJlcS5sZW5ndGggPSAyOworCXJlcS0+cmVxLmJ1ZiA9IHVkYy0+c3RhdHVzYnVmOworCSoodTE2ICopcmVxLT5yZXEuYnVmID0gY3B1X3RvX2xlMTYodXNiX3N0YXR1cyk7CisJcmVxLT5yZXEuc3RhdHVzID0gLUVJTlBST0dSRVNTOworCXJlcS0+cmVxLmFjdHVhbCA9IDA7CisJcmVxLT5yZXEuY29tcGxldGUgPSBvd25lcmNvbXBsZXRlOworCisJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9JTjsKKworCS8qIGRhdGEgcGhhc2UgKi8KKwlzdGF0dXMgPSBxZV9lcF9xdWV1ZSgmZXAtPmVwLCAmcmVxLT5yZXEsIEdGUF9BVE9NSUMpOworCisJaWYgKHN0YXR1cyA9PSAwKQorCQlyZXR1cm47CitzdGFsbDoKKwlkZXZfZXJyKHVkYy0+ZGV2LCAiQ2FuJ3QgcmVzcG9uZCB0byBnZXRzdGF0dXMgcmVxdWVzdCBcbiIpOworCXFlX2VwMF9zdGFsbCh1ZGMpOworfQorCisvKiBvbmx5IGhhbmRsZSB0aGUgc2V0dXAgcmVxdWVzdCwgc3VwcG9zZSB0aGUgZGV2aWNlIGluIG5vcm1hbCBzdGF0dXMgKi8KK3N0YXRpYyB2b2lkIHNldHVwX3JlY2VpdmVkX2hhbmRsZShzdHJ1Y3QgcWVfdWRjICp1ZGMsCisJCQkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqc2V0dXApCit7CisJLyogRml4IEVuZGlhbiAodWRjLT5sb2NhbF9zZXR1cF9idWZmIGlzIGNwdSBFbmRpYW4gbm93KSovCisJdTE2IHdWYWx1ZSA9IGxlMTZfdG9fY3B1KHNldHVwLT53VmFsdWUpOworCXUxNiB3SW5kZXggPSBsZTE2X3RvX2NwdShzZXR1cC0+d0luZGV4KTsKKwl1MTYgd0xlbmd0aCA9IGxlMTZfdG9fY3B1KHNldHVwLT53TGVuZ3RoKTsKKworCS8qIGNsZWFyIHRoZSBwcmV2aW91cyByZXF1ZXN0IGluIHRoZSBlcDAgKi8KKwl1ZGNfcmVzZXRfZXBfcXVldWUodWRjLCAwKTsKKworCWlmIChzZXR1cC0+YlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikKKwkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9JTjsKKwllbHNlCisJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfT1VUOworCisJc3dpdGNoIChzZXR1cC0+YlJlcXVlc3QpIHsKKwljYXNlIFVTQl9SRVFfR0VUX1NUQVRVUzoKKwkJLyogRGF0YStTdGF0dXMgcGhhc2UgZm9ybSB1ZGMgKi8KKwkJaWYgKChzZXR1cC0+YlJlcXVlc3RUeXBlICYgKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9NQVNLKSkKKwkJCQkJIT0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9TVEFOREFSRCkpCisJCQlicmVhazsKKwkJY2g5Z2V0c3RhdHVzKHVkYywgc2V0dXAtPmJSZXF1ZXN0VHlwZSwgd1ZhbHVlLCB3SW5kZXgsCisJCQkJCXdMZW5ndGgpOworCQlyZXR1cm47CisKKwljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCS8qIFN0YXR1cyBwaGFzZSBmcm9tIHVkYyAqLworCQlpZiAoc2V0dXAtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkJCQlVU0JfUkVDSVBfREVWSUNFKSkKKwkJCWJyZWFrOworCQljaDlzZXRhZGRyZXNzKHVkYywgd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOworCQlyZXR1cm47CisKKwljYXNlIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKKwljYXNlIFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJCS8qIFJlcXVlc3RzIHdpdGggbm8gZGF0YSBwaGFzZSwgc3RhdHVzIHBoYXNlIGZyb20gdWRjICovCisJCWlmICgoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIFVTQl9UWVBFX01BU0spCisJCQkJCSE9IFVTQl9UWVBFX1NUQU5EQVJEKQorCQkJYnJlYWs7CisKKwkJaWYgKChzZXR1cC0+YlJlcXVlc3RUeXBlICYgVVNCX1JFQ0lQX01BU0spCisJCQkJPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSB7CisJCQlpbnQgcGlwZSA9IHdJbmRleCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKKwkJCXN0cnVjdCBxZV9lcCAqZXA7CisKKwkJCWlmICh3VmFsdWUgIT0gMCB8fCB3TGVuZ3RoICE9IDAKKwkJCQl8fCBwaXBlID4gVVNCX01BWF9FTkRQT0lOVFMpCisJCQkJYnJlYWs7CisJCQllcCA9ICZ1ZGMtPmVwc1twaXBlXTsKKworCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCQlxZV9lcF9zZXRfaGFsdCgmZXAtPmVwLAorCQkJCQkoc2V0dXAtPmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0ZFQVRVUkUpCisJCQkJCQk/IDEgOiAwKTsKKwkJCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKwkJfQorCisJCWVwMF9wcmltZV9zdGF0dXModWRjLCBVU0JfRElSX0lOKTsKKworCQlyZXR1cm47CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAod0xlbmd0aCkgeworCQkvKiBEYXRhIHBoYXNlIGZyb20gZ2FkZ2V0LCBzdGF0dXMgcGhhc2UgZnJvbSB1ZGMgKi8KKwkJaWYgKHNldHVwLT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSB7CisJCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfWE1JVDsKKwkJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfSU47CisJCX0gZWxzZSB7CisJCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfUkVDVjsKKwkJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfT1VUOworCQl9CisJCXNwaW5fdW5sb2NrKCZ1ZGMtPmxvY2spOworCQlpZiAodWRjLT5kcml2ZXItPnNldHVwKCZ1ZGMtPmdhZGdldCwKKwkJCQkJJnVkYy0+bG9jYWxfc2V0dXBfYnVmZikgPCAwKQorCQkJcWVfZXAwX3N0YWxsKHVkYyk7CisJCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKwl9IGVsc2UgeworCQkvKiBObyBkYXRhIHBoYXNlLCBJTiBzdGF0dXMgZnJvbSBnYWRnZXQgKi8KKwkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9JTjsKKwkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCWlmICh1ZGMtPmRyaXZlci0+c2V0dXAoJnVkYy0+Z2FkZ2V0LAorCQkJCQkmdWRjLT5sb2NhbF9zZXR1cF9idWZmKSA8IDApCisJCQlxZV9lcDBfc3RhbGwodWRjKTsKKwkJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfTkVFRF9aTFA7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVU0IgSW50ZXJydXB0IGhhbmRsZXJzCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBzdXNwZW5kX2lycShzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJdWRjLT5yZXN1bWVfc3RhdGUgPSB1ZGMtPnVzYl9zdGF0ZTsKKwl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9TVVNQRU5ERUQ7CisKKwkvKiByZXBvcnQgc3VzcGVuZCB0byB0aGUgZHJpdmVyICxzZXJpYWwuYyBub3Qgc3VwcG9ydCB0aGlzKi8KKwlpZiAodWRjLT5kcml2ZXItPnN1c3BlbmQpCisJCXVkYy0+ZHJpdmVyLT5zdXNwZW5kKCZ1ZGMtPmdhZGdldCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3VtZV9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXVkYy0+dXNiX3N0YXRlID0gdWRjLT5yZXN1bWVfc3RhdGU7CisJdWRjLT5yZXN1bWVfc3RhdGUgPSAwOworCisJLyogcmVwb3J0IHJlc3VtZSB0byB0aGUgZHJpdmVyICwgc2VyaWFsLmMgbm90IHN1cHBvcnQgdGhpcyovCisJaWYgKHVkYy0+ZHJpdmVyLT5yZXN1bWUpCisJCXVkYy0+ZHJpdmVyLT5yZXN1bWUoJnVkYy0+Z2FkZ2V0KTsKK30KKworc3RhdGljIHZvaWQgaWRsZV9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXU4IHVzYnM7CisKKwl1c2JzID0gaW5fOCgmdWRjLT51c2JfcmVncy0+dXNiX3VzYnMpOworCWlmICh1c2JzICYgVVNCX0lETEVfU1RBVFVTX01BU0spIHsKKwkJaWYgKCh1ZGMtPnVzYl9zdGF0ZSkgIT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJCXN1c3BlbmRfaXJxKHVkYyk7CisJfSBlbHNlIHsKKwkJaWYgKHVkYy0+dXNiX3N0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCisJCQlyZXN1bWVfaXJxKHVkYyk7CisJfQorfQorCitzdGF0aWMgaW50IHJlc2V0X2lycShzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJdW5zaWduZWQgY2hhciBpOworCisJcWVfdXNiX2Rpc2FibGUoKTsKKwlvdXRfOCgmdWRjLT51c2JfcmVncy0+dXNiX3VzYWRyLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBVU0JfTUFYX0VORFBPSU5UUzsgaSsrKSB7CisJCWlmICh1ZGMtPmVwc1tpXS5pbml0KQorCQkJcWVfZXBfcmVzZXQodWRjLCBpKTsKKwl9CisKKwlyZXNldF9xdWV1ZXModWRjKTsKKwl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9ERUZBVUxUOworCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9PVVQ7CisJcWVfdXNiX2VuYWJsZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJzeV9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR4ZV9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXJldHVybiAwOworfQorCisvKiBlcDAgdHggaW50ZXJydXB0IGFsc28gaW4gaGVyZSAqLworc3RhdGljIGludCB0eF9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXN0cnVjdCBxZV9lcCAqZXA7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCWludCBpLCByZXMgPSAwOworCisJaWYgKCh1ZGMtPnVzYl9zdGF0ZSA9PSBVU0JfU1RBVEVfQUREUkVTUykKKwkJJiYgKGluXzgoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2FkcikgPT0gMCkpCisJCW91dF84KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNhZHIsIHVkYy0+ZGV2aWNlX2FkZHJlc3MpOworCisJZm9yIChpID0gKFVTQl9NQVhfRU5EUE9JTlRTLTEpOyAoKGkgPj0gMCkgJiYgKHJlcyA9PSAwKSk7IGktLSkgeworCQllcCA9ICZ1ZGMtPmVwc1tpXTsKKwkJaWYgKGVwICYmIGVwLT5pbml0ICYmIChlcC0+ZGlyICE9IFVTQl9ESVJfT1VUKSkgeworCQkJYmQgPSBlcC0+Y190eGJkOworCQkJaWYgKCEoaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCkgJiBUX1IpCisJCQkJCQkmJiAoaW5fYmUzMigmYmQtPmJ1ZikpKSB7CisJCQkJLyogY29uZmlybSB0aGUgdHJhbnNtaXR0ZWQgYmQgKi8KKwkJCQlpZiAoZXAtPmVwbnVtID09IDApCisJCQkJCXJlcyA9IHFlX2VwMF90eGNvbmYoZXApOworCQkJCWVsc2UKKwkJCQkJcmVzID0gcWVfZXBfdHhjb25mKGVwKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmVzOworfQorCisKKy8qIHNldHVwIHBhY2tlY3QncyByeCBpcyBoYW5kbGUgaW4gdGhlIGZ1bmN0aW9uIHRvbyAqLworc3RhdGljIHZvaWQgcnhfaXJxKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBVU0JfTUFYX0VORFBPSU5UUzsgaSsrKSB7CisJCWVwID0gJnVkYy0+ZXBzW2ldOworCQlpZiAoZXAgJiYgZXAtPmluaXQgJiYgKGVwLT5kaXIgIT0gVVNCX0RJUl9JTikpIHsKKwkJCWJkID0gZXAtPm5fcnhiZDsKKwkJCWlmICghKGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpICYgUl9FKQorCQkJCQkJJiYgKGluX2JlMzIoJmJkLT5idWYpKSkgeworCQkJCWlmIChlcC0+ZXBudW0gPT0gMCkgeworCQkJCQlxZV9lcDBfcngodWRjKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKm5vbi1zZXR1cCBwYWNrYWdlIHJlY2VpdmUqLworCQkJCQlxZV9lcF9yeChlcCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcWVfdWRjX2lycShpbnQgaXJxLCB2b2lkICpfdWRjKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IChzdHJ1Y3QgcWVfdWRjICopX3VkYzsKKwl1MTYgaXJxX3NyYzsKKwlpcnFyZXR1cm5fdCBzdGF0dXMgPSBJUlFfTk9ORTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJaXJxX3NyYyA9IGluX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JlcikgJgorCQlpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNibXIpOworCS8qIENsZWFyIG5vdGlmaWNhdGlvbiBiaXRzICovCisJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JlciwgaXJxX3NyYyk7CisJLyogVVNCIEludGVycnVwdCAqLworCWlmIChpcnFfc3JjICYgVVNCX0VfSURMRV9NQVNLKSB7CisJCWlkbGVfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX0lETEVfTUFTSzsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGlycV9zcmMgJiBVU0JfRV9UWEJfTUFTSykgeworCQl0eF9pcnEodWRjKTsKKwkJaXJxX3NyYyAmPSB+VVNCX0VfVFhCX01BU0s7CisJCXN0YXR1cyA9IElSUV9IQU5ETEVEOworCX0KKworCWlmIChpcnFfc3JjICYgVVNCX0VfUlhCX01BU0spIHsKKwkJcnhfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX1JYQl9NQVNLOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoaXJxX3NyYyAmIFVTQl9FX1JFU0VUX01BU0spIHsKKwkJcmVzZXRfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX1JFU0VUX01BU0s7CisJCXN0YXR1cyA9IElSUV9IQU5ETEVEOworCX0KKworCWlmIChpcnFfc3JjICYgVVNCX0VfQlNZX01BU0spIHsKKwkJYnN5X2lycSh1ZGMpOworCQlpcnFfc3JjICY9IH5VU0JfRV9CU1lfTUFTSzsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGlycV9zcmMgJiBVU0JfRV9UWEVfTUFTSykgeworCQl0eGVfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX1RYRV9NQVNLOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUdhZGdldCBkcml2ZXIgcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwkvKiBzdGFuZGFyZCBvcGVyYXRpb25zICovCisJaWYgKCF1ZGNfY29udHJvbGxlcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIWRyaXZlciB8fCAoZHJpdmVyLT5zcGVlZCAhPSBVU0JfU1BFRURfRlVMTAorCQkJJiYgZHJpdmVyLT5zcGVlZCAhPSBVU0JfU1BFRURfSElHSCkKKwkJCXx8ICFkcml2ZXItPmJpbmQgfHwgIWRyaXZlci0+ZGlzY29ubmVjdAorCQkJfHwgIWRyaXZlci0+c2V0dXApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHVkY19jb250cm9sbGVyLT5kcml2ZXIpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBsb2NrIGlzIG5lZWRlZCBidXQgd2hldGhlciBzaG91bGQgdXNlIHRoaXMgbG9jayBvciBhbm90aGVyICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkY19jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwlkcml2ZXItPmRyaXZlci5idXMgPSBOVUxMOworCS8qIGhvb2sgdXAgdGhlIGRyaXZlciAqLworCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBkcml2ZXI7CisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuc3BlZWQgPSAoZW51bSB1c2JfZGV2aWNlX3NwZWVkKShkcml2ZXItPnNwZWVkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGNfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJcmV0dmFsID0gZHJpdmVyLT5iaW5kKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIodWRjX2NvbnRyb2xsZXItPmRldiwgImJpbmQgdG8gJXMgLS0+ICVkIiwKKwkJCQlkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOworCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCQl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gTlVMTDsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBFbmFibGUgSVJRIHJlZyBhbmQgU2V0IHVzYmNtZCByZWcgRU4gYml0ICovCisJcWVfdXNiX2VuYWJsZSgpOworCisJb3V0X2JlMTYoJnVkY19jb250cm9sbGVyLT51c2JfcmVncy0+dXNiX3VzYmVyLCAweGZmZmYpOworCW91dF9iZTE2KCZ1ZGNfY29udHJvbGxlci0+dXNiX3JlZ3MtPnVzYl91c2JtciwgVVNCX0VfREVGQVVMVF9ERVZJQ0UpOworCXVkY19jb250cm9sbGVyLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfQVRUQUNIRUQ7CisJdWRjX2NvbnRyb2xsZXItPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCXVkY19jb250cm9sbGVyLT5lcDBfZGlyID0gVVNCX0RJUl9PVVQ7CisJZGV2X2luZm8odWRjX2NvbnRyb2xsZXItPmRldiwgIiVzIGJpbmQgdG8gZHJpdmVyICVzIFxuIiwKKwkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5uYW1lLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOworCitpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgcWVfZXAgKmxvb3BfZXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghdWRjX2NvbnRyb2xsZXIpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IHVkY19jb250cm9sbGVyLT5kcml2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogc3RvcCB1c2IgY29udHJvbGxlciwgZGlzYWJsZSBpbnRyICovCisJcWVfdXNiX2Rpc2FibGUoKTsKKworCS8qIGluIGZhY3QsIG5vIG5lZWRlZCAqLworCXVkY19jb250cm9sbGVyLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfQVRUQUNIRUQ7CisJdWRjX2NvbnRyb2xsZXItPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCXVkY19jb250cm9sbGVyLT5lcDBfZGlyID0gMDsKKworCS8qIHN0YW5kIG9wZXJhdGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGNfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwludWtlKCZ1ZGNfY29udHJvbGxlci0+ZXBzWzBdLCAtRVNIVVRET1dOKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvb3BfZXAsICZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmVwX2xpc3QsCisJCQkJZXAuZXBfbGlzdCkKKwkJbnVrZShsb29wX2VwLCAtRVNIVVRET1dOKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGNfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJLyogdW5iaW5kIGdhZGdldCBhbmQgdW5ob29rIGRyaXZlci4gKi8KKwlkcml2ZXItPnVuYmluZCgmdWRjX2NvbnRyb2xsZXItPmdhZGdldCk7CisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKKwl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gTlVMTDsKKworCWRldl9pbmZvKHVkY19jb250cm9sbGVyLT5kZXYsICJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXHJcbiIsCisJCQlkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CisKKy8qIHVkYyBzdHJ1Y3R1cmUncyBhbGxvYyBhbmQgc2V0dXAsIGluY2x1ZGUgZXAtcGFyYW0gYWxsb2MgKi8KK3N0YXRpYyBzdHJ1Y3QgcWVfdWRjIF9fZGV2aW5pdCAqcWVfdWRjX2NvbmZpZyhzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGM7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOworCXVuc2lnbmVkIGludCB0bXBfYWRkciA9IDA7CisJc3RydWN0IHVzYl9kZXZpY2VfcGFyYSBfX2lvbWVtICp1c2JwcmFtOworCXVuc2lnbmVkIGludCBpOworCXU2NCBzaXplOworCXUzMiBvZmZzZXQ7CisKKwl1ZGMgPSBremFsbG9jKHNpemVvZigqdWRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVkYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJtYWxsb2MgdWRjIGZhaWxlZFxuIik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwl1ZGMtPmRldiA9ICZvZmRldi0+ZGV2OworCisJLyogZ2V0IGRlZmF1bHQgYWRkcmVzcyBvZiB1c2IgcGFyYW1ldGVyIGluIE1VUkFNIGZyb20gZGV2aWNlIHRyZWUgKi8KKwlvZmZzZXQgPSAqb2ZfZ2V0X2FkZHJlc3MobnAsIDEsICZzaXplLCBOVUxMKTsKKwl1ZGMtPnVzYl9wYXJhbSA9IGNwbV9tdXJhbV9hZGRyKG9mZnNldCk7CisJbWVtc2V0X2lvKHVkYy0+dXNiX3BhcmFtLCAwLCBzaXplKTsKKworCXVzYnByYW0gPSB1ZGMtPnVzYl9wYXJhbTsKKwlvdXRfYmUxNigmdXNicHJhbS0+ZnJhbWVfbiwgMCk7CisJb3V0X2JlMzIoJnVzYnByYW0tPnJzdGF0ZSwgMCk7CisKKwl0bXBfYWRkciA9IGNwbV9tdXJhbV9hbGxvYygoVVNCX01BWF9FTkRQT0lOVFMgKgorCQkJCQlzaXplb2Yoc3RydWN0IHVzYl9lcF9wYXJhKSksCisJCQkJCSAgIFVTQl9FUF9QQVJBX0FMSUdOTUVOVCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX01BWF9FTkRQT0lOVFM7IGkrKykgeworCQlvdXRfYmUxNigmdXNicHJhbS0+ZXBwdHJbaV0sICh1MTYpdG1wX2FkZHIpOworCQl1ZGMtPmVwX3BhcmFtW2ldID0gY3BtX211cmFtX2FkZHIodG1wX2FkZHIpOworCQl0bXBfYWRkciArPSAzMjsKKwl9CisKKwltZW1zZXRfaW8odWRjLT5lcF9wYXJhbVswXSwgMCwKKwkJCVVTQl9NQVhfRU5EUE9JTlRTICogc2l6ZW9mKHN0cnVjdCB1c2JfZXBfcGFyYSkpOworCisJdWRjLT5yZXN1bWVfc3RhdGUgPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQ7CisJdWRjLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfUE9XRVJFRDsKKwl1ZGMtPmVwMF9kaXIgPSAwOworCisJc3Bpbl9sb2NrX2luaXQoJnVkYy0+bG9jayk7CisJcmV0dXJuIHVkYzsKKworY2xlYW51cDoKKwlrZnJlZSh1ZGMpOworCXJldHVybiBOVUxMOworfQorCisvKiBVU0IgQ29udHJvbGxlciByZWdpc3RlciBpbml0ICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBxZV91ZGNfcmVnX2luaXQoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXN0cnVjdCB1c2JfY3RsciBfX2lvbWVtICpxZV91c2JyZWdzOworCXFlX3VzYnJlZ3MgPSB1ZGMtPnVzYl9yZWdzOworCisJLyogSW5pdCB0aGUgdXNiIHJlZ2lzdGVyICovCisJb3V0XzgoJnFlX3VzYnJlZ3MtPnVzYl91c21vZCwgMHgwMSk7CisJb3V0X2JlMTYoJnFlX3VzYnJlZ3MtPnVzYl91c2JtciwgMCk7CisJb3V0XzgoJnFlX3VzYnJlZ3MtPnVzYl91c2NvbSwgMCk7CisJb3V0X2JlMTYoJnFlX3VzYnJlZ3MtPnVzYl91c2JlciwgVVNCRVJfQUxMX0NMRUFSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBxZV9lcF9jb25maWcoc3RydWN0IHFlX3VkYyAqdWRjLCB1bnNpZ25lZCBjaGFyIHBpcGVfbnVtKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCisJZXAtPnVkYyA9IHVkYzsKKwlzdHJjcHkoZXAtPm5hbWUsIGVwX25hbWVbcGlwZV9udW1dKTsKKwllcC0+ZXAubmFtZSA9IGVwX25hbWVbcGlwZV9udW1dOworCisJZXAtPmVwLm9wcyA9ICZxZV9lcF9vcHM7CisJZXAtPnN0b3BwZWQgPSAxOworCWVwLT5lcC5tYXhwYWNrZXQgPSAodW5zaWduZWQgc2hvcnQpIH4wOworCWVwLT5kZXNjID0gTlVMTDsKKwllcC0+ZGlyID0gMHhmZjsKKwllcC0+ZXBudW0gPSAodTgpcGlwZV9udW07CisJZXAtPnNlbnQgPSAwOworCWVwLT5sYXN0ID0gMDsKKwllcC0+aW5pdCA9IDA7CisJZXAtPnJ4ZnJhbWUgPSBOVUxMOworCWVwLT50eGZyYW1lID0gTlVMTDsKKwllcC0+dHhfcmVxID0gTlVMTDsKKwllcC0+c3RhdGUgPSBFUF9TVEFURV9JRExFOworCWVwLT5oYXNfZGF0YSA9IDA7CisKKwkvKiB0aGUgcXVldWUgbGlzdHMgYW55IHJlcSBmb3IgdGhpcyBlcCAqLworCUlOSVRfTElTVF9IRUFEKCZlcC0+cXVldWUpOworCisJLyogZ2FnZGV0LmVwX2xpc3QgdXNlZCBmb3IgZXBfYXV0b2NvbmZpZyBzbyBubyBlcDAqLworCWlmIChwaXBlX251bSAhPSAwKQorCQlsaXN0X2FkZF90YWlsKCZlcC0+ZXAuZXBfbGlzdCwgJnVkYy0+Z2FkZ2V0LmVwX2xpc3QpOworCisJZXAtPmdhZGdldCA9ICZ1ZGMtPmdhZGdldDsKKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKglVREMgZGV2aWNlIERyaXZlciBvcGVyYXRpb24gZnVuY3Rpb25zCQkJCSoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBxZV91ZGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGkgPSAwOworCisJY29tcGxldGUodWRjX2NvbnRyb2xsZXItPmRvbmUpOworCWNwbV9tdXJhbV9mcmVlKGNwbV9tdXJhbV9vZmZzZXQodWRjX2NvbnRyb2xsZXItPmVwX3BhcmFtWzBdKSk7CisJZm9yIChpID0gMDsgaSA8IFVTQl9NQVhfRU5EUE9JTlRTOyBpKyspCisJCXVkY19jb250cm9sbGVyLT5lcF9wYXJhbVtpXSA9IE5VTEw7CisKKwlrZnJlZSh1ZGNfY29udHJvbGxlcik7CisJdWRjX2NvbnRyb2xsZXIgPSBOVUxMOworfQorCisvKiBEcml2ZXIgcHJvYmUgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBxZV91ZGNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7CisJc3RydWN0IHFlX2VwICplcDsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKwljb25zdCB2b2lkICpwcm9wOworCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm1vZGUiLCBOVUxMKTsKKwlpZiAoIXByb3AgfHwgc3RyY21wKHByb3AsICJwZXJpcGhlcmFsIikpCisJCXJldHVybiAtRU5PREVWOworCisJLyogSW5pdGlhbGl6ZSB0aGUgdWRjIHN0cnVjdHVyZSBpbmNsdWRpbmcgUUggbWVtYmVyIGFuZCBvdGhlciBtZW1iZXIgKi8KKwl1ZGNfY29udHJvbGxlciA9IHFlX3VkY19jb25maWcob2ZkZXYpOworCWlmICghdWRjX2NvbnRyb2xsZXIpIHsKKwkJZGV2X2RiZygmb2ZkZXYtPmRldiwgInVkY19jb250cm9sbCBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdWRjX2NvbnRyb2xsZXItPnNvY190eXBlID0gKHVuc2lnbmVkIGxvbmcpbWF0Y2gtPmRhdGE7CisJdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzID0gb2ZfaW9tYXAobnAsIDApOworCWlmICghdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMTsKKwl9CisKKwkvKiBpbml0aWFsaXplIHVzYiBodyByZWcgZXhjZXB0IGZvciByZWdzIGZvciBFUCwKKwkgKiBsZWF2ZSB1c2JpbnRyIHJlZyB1bnRvdWNoZWQqLworCXFlX3VkY19yZWdfaW5pdCh1ZGNfY29udHJvbGxlcik7CisKKwkvKiBoZXJlIGNvbWVzIHRoZSBzdGFuZCBvcGVyYXRpb25zIGZvciBwcm9iZQorCSAqIHNldCB0aGUgcWVfdWRjLT5nYWRnZXQueHh4ICovCisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5vcHMgPSAmcWVfZ2FkZ2V0X29wczsKKworCS8qIGdhZGdldC5lcDAgaXMgYSBwb2ludGVyICovCisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5lcDAgPSAmdWRjX2NvbnRyb2xsZXItPmVwc1swXS5lcDsKKworCUlOSVRfTElTVF9IRUFEKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmVwX2xpc3QpOworCisJLyogbW9kaWZ5IGluIHJlZ2lzdGVyIGdhZGdldCBwcm9jZXNzICovCisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCisJLyogbmFtZTogSWRlbnRpZmllcyB0aGUgY29udHJvbGxlciBoYXJkd2FyZSB0eXBlLiAqLworCXVkY19jb250cm9sbGVyLT5nYWRnZXQubmFtZSA9IGRyaXZlcl9uYW1lOworCisJZGV2aWNlX2luaXRpYWxpemUoJnVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2KTsKKworCXN0cmNweSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5idXNfaWQsICJnYWRnZXQiKTsKKworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnJlbGVhc2UgPSBxZV91ZGNfcmVsZWFzZTsKKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmb2ZkZXYtPmRldjsKKworCS8qIGluaXRpYWxpemUgcWVfZXAgc3RydWN0ICovCisJZm9yIChpID0gMDsgaSA8IFVTQl9NQVhfRU5EUE9JTlRTIDsgaSsrKSB7CisJCS8qIGJlY2F1c2UgdGhlIGVwIHR5cGUgaXNuJ3QgZGVjaWRlIGhlcmUgc28KKwkJICogcWVfZXBfaW5pdCgpIHNob3VsZCBiZSBjYWxsZWQgaW4gZXBfZW5hYmxlKCkgKi8KKworCQkvKiBzZXR1cCB0aGUgcWVfZXAgc3RydWN0IGFuZCBsaW5rIGVwLmVwLmxpc3QKKwkJICogaW50byBnYWRnZXQuZXBfbGlzdCAqLworCQlxZV9lcF9jb25maWcodWRjX2NvbnRyb2xsZXIsICh1bnNpZ25lZCBjaGFyKWkpOworCX0KKworCS8qIGVwMCBpbml0aWFsaXphdGlvbiBpbiBoZXJlICovCisJcmV0ID0gcWVfZXBfaW5pdCh1ZGNfY29udHJvbGxlciwgMCwgJnFlX2VwMF9kZXNjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisKKwkvKiBjcmVhdGUgYSBidWYgZm9yIFpMUCBzZW5kLCBuZWVkIHRvIHJlbWFpbiB6ZXJvZWQgKi8KKwl1ZGNfY29udHJvbGxlci0+bnVsbGJ1ZiA9IGt6YWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKKwlpZiAodWRjX2NvbnRyb2xsZXItPm51bGxidWYgPT0gTlVMTCkgeworCQlkZXZfZGJnKHVkY19jb250cm9sbGVyLT5kZXYsICJjYW5ub3QgYWxsb2MgbnVsbGJ1ZlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMzsKKwl9CisKKwkvKiBidWZmZXIgZm9yIGRhdGEgb2YgZ2V0X3N0YXR1cyByZXF1ZXN0ICovCisJdWRjX2NvbnRyb2xsZXItPnN0YXR1c2J1ZiA9IGt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVkY19jb250cm9sbGVyLT5zdGF0dXNidWYgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjQ7CisJfQorCisJdWRjX2NvbnRyb2xsZXItPm51bGxwID0gdmlydF90b19waHlzKCh2b2lkICopdWRjX2NvbnRyb2xsZXItPm51bGxidWYpOworCWlmICh1ZGNfY29udHJvbGxlci0+bnVsbHAgPT0gRE1BX0FERFJfSU5WQUxJRCkgeworCQl1ZGNfY29udHJvbGxlci0+bnVsbHAgPSBkbWFfbWFwX3NpbmdsZSgKKwkJCQkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQl1ZGNfY29udHJvbGxlci0+bnVsbGJ1ZiwKKwkJCQkJMjU2LAorCQkJCQlETUFfVE9fREVWSUNFKTsKKwkJdWRjX2NvbnRyb2xsZXItPm51bGxtYXAgPSAxOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJdWRjX2NvbnRyb2xsZXItPm51bGxwLCAyNTYsCisJCQkJCURNQV9UT19ERVZJQ0UpOworCX0KKworCXRhc2tsZXRfaW5pdCgmdWRjX2NvbnRyb2xsZXItPnJ4X3Rhc2tsZXQsIGVwX3J4X3Rhc2tsZXQsCisJCQkodW5zaWduZWQgbG9uZyl1ZGNfY29udHJvbGxlcik7CisJLyogcmVxdWVzdCBpcnEgYW5kIGRpc2FibGUgRFIgICovCisJdWRjX2NvbnRyb2xsZXItPnVzYl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisKKwlyZXQgPSByZXF1ZXN0X2lycSh1ZGNfY29udHJvbGxlci0+dXNiX2lycSwgcWVfdWRjX2lycSwgMCwKKwkJCQlkcml2ZXJfbmFtZSwgdWRjX2NvbnRyb2xsZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycih1ZGNfY29udHJvbGxlci0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgaXJxICVkIGVyciAlZCBcbiIsCisJCQl1ZGNfY29udHJvbGxlci0+dXNiX2lycSwgcmV0KTsKKwkJZ290byBlcnI1OworCX0KKworCXJldCA9IGRldmljZV9hZGQoJnVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjY7CisKKwlkZXZfaW5mbyh1ZGNfY29udHJvbGxlci0+ZGV2LAorCQkJIiVzIFVTQiBjb250cm9sbGVyIGluaXRpYWxpemVkIGFzIGRldmljZVxuIiwKKwkJCSh1ZGNfY29udHJvbGxlci0+c29jX3R5cGUgPT0gUE9SVF9RRSkgPyAiUUUiIDogIkNQTSIpOworCXJldHVybiAwOworCitlcnI2OgorCWZyZWVfaXJxKHVkY19jb250cm9sbGVyLT51c2JfaXJxLCB1ZGNfY29udHJvbGxlcik7CitlcnI1OgorCWlmICh1ZGNfY29udHJvbGxlci0+bnVsbG1hcCkgeworCQlkbWFfdW5tYXBfc2luZ2xlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCXVkY19jb250cm9sbGVyLT5udWxscCwgMjU2LAorCQkJCURNQV9UT19ERVZJQ0UpOworCQkJdWRjX2NvbnRyb2xsZXItPm51bGxwID0gRE1BX0FERFJfSU5WQUxJRDsKKwl9IGVsc2UgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQl1ZGNfY29udHJvbGxlci0+bnVsbHAsIDI1NiwKKwkJCQlETUFfVE9fREVWSUNFKTsKKwl9CisJa2ZyZWUodWRjX2NvbnRyb2xsZXItPnN0YXR1c2J1Zik7CitlcnI0OgorCWtmcmVlKHVkY19jb250cm9sbGVyLT5udWxsYnVmKTsKK2VycjM6CisJZXAgPSAmdWRjX2NvbnRyb2xsZXItPmVwc1swXTsKKwljcG1fbXVyYW1fZnJlZShjcG1fbXVyYW1fb2Zmc2V0KGVwLT5yeGJhc2UpKTsKKwlrZnJlZShlcC0+cnhmcmFtZSk7CisJa2ZyZWUoZXAtPnJ4YnVmZmVyKTsKKwlrZnJlZShlcC0+dHhmcmFtZSk7CitlcnIyOgorCWlvdW5tYXAodWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzKTsKK2VycjE6CisJa2ZyZWUodWRjX2NvbnRyb2xsZXIpOworCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBxZV91ZGNfc3VzcGVuZChzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCitzdGF0aWMgaW50IHFlX3VkY19yZXN1bWUoc3RydWN0IG9mX2RldmljZSAqZGV2KQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBfX2RldmV4aXQgcWVfdWRjX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXVuc2lnbmVkIGludCBzaXplOworCisJREVDTEFSRV9DT01QTEVUSU9OKGRvbmUpOworCisJaWYgKCF1ZGNfY29udHJvbGxlcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1ZGNfY29udHJvbGxlci0+ZG9uZSA9ICZkb25lOworCXRhc2tsZXRfZGlzYWJsZSgmdWRjX2NvbnRyb2xsZXItPnJ4X3Rhc2tsZXQpOworCisJaWYgKHVkY19jb250cm9sbGVyLT5udWxsbWFwKSB7CisJCWRtYV91bm1hcF9zaW5nbGUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJdWRjX2NvbnRyb2xsZXItPm51bGxwLCAyNTYsCisJCQkJRE1BX1RPX0RFVklDRSk7CisJCQl1ZGNfY29udHJvbGxlci0+bnVsbHAgPSBETUFfQUREUl9JTlZBTElEOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCXVkY19jb250cm9sbGVyLT5udWxscCwgMjU2LAorCQkJCURNQV9UT19ERVZJQ0UpOworCX0KKwlrZnJlZSh1ZGNfY29udHJvbGxlci0+c3RhdHVzYnVmKTsKKwlrZnJlZSh1ZGNfY29udHJvbGxlci0+bnVsbGJ1Zik7CisKKwllcCA9ICZ1ZGNfY29udHJvbGxlci0+ZXBzWzBdOworCWNwbV9tdXJhbV9mcmVlKGNwbV9tdXJhbV9vZmZzZXQoZXAtPnJ4YmFzZSkpOworCXNpemUgPSAoZXAtPmVwLm1heHBhY2tldCArIFVTQl9DUkNfU0laRSArIDIpICogKFVTQl9CRFJJTkdfTEVOICsgMSk7CisKKwlrZnJlZShlcC0+cnhmcmFtZSk7CisJaWYgKGVwLT5yeGJ1Zm1hcCkgeworCQlkbWFfdW5tYXBfc2luZ2xlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQllcC0+cnhidWZfZCwgc2l6ZSwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQllcC0+cnhidWZfZCA9IERNQV9BRERSX0lOVkFMSUQ7CisJfSBlbHNlIHsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCWVwLT5yeGJ1Zl9kLCBzaXplLAorCQkJCURNQV9GUk9NX0RFVklDRSk7CisJfQorCisJa2ZyZWUoZXAtPnJ4YnVmZmVyKTsKKwlrZnJlZShlcC0+dHhmcmFtZSk7CisKKwlmcmVlX2lycSh1ZGNfY29udHJvbGxlci0+dXNiX2lycSwgdWRjX2NvbnRyb2xsZXIpOworCisJdGFza2xldF9raWxsKCZ1ZGNfY29udHJvbGxlci0+cnhfdGFza2xldCk7CisKKwlpb3VubWFwKHVkY19jb250cm9sbGVyLT51c2JfcmVncyk7CisKKwlkZXZpY2VfdW5yZWdpc3RlcigmdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYpOworCS8qIHdhaXQgZm9yIHJlbGVhc2UoKSBvZiBnYWRnZXQuZGV2IHRvIGZyZWUgdWRjICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgcWVfdWRjX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1xZS11c2IiLAorCQkuZGF0YSA9ICh2b2lkICopUE9SVF9RRSwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNzItY3BtLXVzYiIsCisJCS5kYXRhID0gKHZvaWQgKilQT1JUX0NQTSwKKwl9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcWVfdWRjX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICAgICAgPSAoY2hhciAqKWRyaXZlcl9uYW1lLAorCS5tYXRjaF90YWJsZSAgICA9IHFlX3VkY19tYXRjaCwKKwkucHJvYmUgICAgICAgICAgPSBxZV91ZGNfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3AocWVfdWRjX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgICAgICAgID0gcWVfdWRjX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgICAgID0gcWVfdWRjX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgcWVfdWRjX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlczogJXMsICVzXG4iLCBkcml2ZXJfbmFtZSwgZHJpdmVyX2Rlc2MsCisJCQlEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWRjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBxZV91ZGNfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1ZGNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocWVfdWRjX2luaXQpOworbW9kdWxlX2V4aXQocWVfdWRjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFiMjcxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmgKQEAgLTAsMCArMSw0MzcgQEAKKy8qCisgKiBkcml2ZXJzL3VzYi9nYWRnZXQvcWVfdWRjLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIAlYaWFvYm8gWGllIDxYLlhpZUBmcmVlc2NhbGUuY29tPgorICogCUxpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CisgKgorICogRGVzY3JpcHRpb246CisgKiBGcmVlc2NhbGUgVVNCIGRldmljZS9lbmRwb2ludCBtYW5hZ2VtZW50IHJlZ2lzdGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0ZTTF9RRV9VRENfSAorI2RlZmluZSBfX0ZTTF9RRV9VRENfSAorCisvKiBTb0MgdHlwZSAqLworI2RlZmluZSBQT1JUX0NQTQkwCisjZGVmaW5lIFBPUlRfUUUJCTEKKworI2RlZmluZSBVU0JfTUFYX0VORFBPSU5UUyAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVVNCX01BWF9QSVBFUyAgICAgICAgICAgICAgICAgICBVU0JfTUFYX0VORFBPSU5UUworI2RlZmluZSBVU0JfRVAwX01BWF9TSVpFCQk2NAorI2RlZmluZSBVU0JfTUFYX0NUUkxfUEFZTE9BRCAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBVU0JfQkRSSU5HX0xFTgkJCTE2CisjZGVmaW5lIFVTQl9CRFJJTkdfTEVOX1JYCQkyNTYKKyNkZWZpbmUgVVNCX0JEUklOR19MRU5fVFgJCTE2CisjZGVmaW5lIE1JTl9FTVBUWV9CRFMJCQkxMjgKKyNkZWZpbmUgTUFYX0RBVEFfQkRTCQkJOAorI2RlZmluZSBVU0JfQ1JDX1NJWkUJCQkyCisjZGVmaW5lIFVTQl9ESVJfQk9USAkJCTB4ODgKKyNkZWZpbmUgUl9CVUZfTUFYU0laRQkJCTB4ODAwCisjZGVmaW5lIFVTQl9FUF9QQVJBX0FMSUdOTUVOVAkJMzIKKworLyogVVNCIE1vZGUgUmVnaXN0ZXIgYml0IGRlZmluZSAqLworI2RlZmluZSBVU0JfTU9ERV9FTgkJMHgwMQorI2RlZmluZSBVU0JfTU9ERV9IT1NUCQkweDAyCisjZGVmaW5lIFVTQl9NT0RFX1RFU1QJCTB4MDQKKyNkZWZpbmUgVVNCX01PREVfU0ZURQkJMHgwOAorI2RlZmluZSBVU0JfTU9ERV9SRVNVTUUJCTB4NDAKKyNkZWZpbmUgVVNCX01PREVfTFNTCQkweDgwCisKKy8qIFVTQiBTbGF2ZSBBZGRyZXNzIFJlZ2lzdGVyIE1hc2sgKi8KKyNkZWZpbmUgVVNCX1NMVkFERFJfTUFTSwkweDdGCisKKy8qIFVTQiBFbmRwb2ludCByZWdpc3RlciBkZWZpbmUgKi8KKyNkZWZpbmUgVVNCX0VQTlVNX01BU0sJCTB4RjAwMAorI2RlZmluZSBVU0JfRVBOVU1fU0hJRlQJCTEyCisKKyNkZWZpbmUgVVNCX1RSQU5TX01PREVfU0hJRlQJOAorI2RlZmluZSBVU0JfVFJBTlNfQ1RSCQkweDAwMDAKKyNkZWZpbmUgVVNCX1RSQU5TX0lOVAkJMHgwMTAwCisjZGVmaW5lIFVTQl9UUkFOU19CVUxLCQkweDAyMDAKKyNkZWZpbmUgVVNCX1RSQU5TX0lTTwkJMHgwMzAwCisKKyNkZWZpbmUgVVNCX0VQX01GCQkweDAwMjAKKyNkZWZpbmUgVVNCX0VQX1JURQkJMHgwMDEwCisKKyNkZWZpbmUgVVNCX1RIU19TSElGVAkJMgorI2RlZmluZSBVU0JfVEhTX01BU0sJCTB4MDAwYworI2RlZmluZSBVU0JfVEhTX05PUk1BTAkJMHgwCisjZGVmaW5lIFVTQl9USFNfSUdOT1JFX0lOCTB4MDAwNAorI2RlZmluZSBVU0JfVEhTX05BQ0sJCTB4MDAwOAorI2RlZmluZSBVU0JfVEhTX1NUQUxMCQkweDAwMGMKKworI2RlZmluZSBVU0JfUkhTX1NISUZUICAgCTAKKyNkZWZpbmUgVVNCX1JIU19NQVNLCQkweDAwMDMKKyNkZWZpbmUgVVNCX1JIU19OT1JNQUwgIAkweDAKKyNkZWZpbmUgVVNCX1JIU19JR05PUkVfT1VUCTB4MDAwMQorI2RlZmluZSBVU0JfUkhTX05BQ0sJCTB4MDAwMgorI2RlZmluZSBVU0JfUkhTX1NUQUxMCQkweDAwMDMKKworI2RlZmluZSBVU0JfUlRIU19NQVNLCQkweDAwMGYKKworLyogVVNCIENvbW1hbmQgUmVnaXN0ZXIgZGVmaW5lICovCisjZGVmaW5lIFVTQl9DTURfU1RSX0ZJRk8JMHg4MAorI2RlZmluZSBVU0JfQ01EX0ZMVVNIX0ZJRk8JMHg0MAorI2RlZmluZSBVU0JfQ01EX0lTRlQJCTB4MjAKKyNkZWZpbmUgVVNCX0NNRF9EU0ZUCQkweDEwCisjZGVmaW5lIFVTQl9DTURfRVBfTUFTSwkJMHgwMworCisvKiBVU0IgRXZlbnQgYW5kIE1hc2sgUmVnaXN0ZXIgZGVmaW5lICovCisjZGVmaW5lIFVTQl9FX01TRl9NQVNLCQkweDA4MDAKKyNkZWZpbmUgVVNCX0VfU0ZUX01BU0sJCTB4MDQwMAorI2RlZmluZSBVU0JfRV9SRVNFVF9NQVNLCTB4MDIwMAorI2RlZmluZSBVU0JfRV9JRExFX01BU0sJCTB4MDEwMAorI2RlZmluZSBVU0JfRV9UWEU0X01BU0sJCTB4MDA4MAorI2RlZmluZSBVU0JfRV9UWEUzX01BU0sJCTB4MDA0MAorI2RlZmluZSBVU0JfRV9UWEUyX01BU0sJCTB4MDAyMAorI2RlZmluZSBVU0JfRV9UWEUxX01BU0sJCTB4MDAxMAorI2RlZmluZSBVU0JfRV9TT0ZfTUFTSwkJMHgwMDA4CisjZGVmaW5lIFVTQl9FX0JTWV9NQVNLCQkweDAwMDQKKyNkZWZpbmUgVVNCX0VfVFhCX01BU0sJCTB4MDAwMgorI2RlZmluZSBVU0JfRV9SWEJfTUFTSwkJMHgwMDAxCisjZGVmaW5lIFVTQkVSX0FMTF9DTEVBUiAJMHgwZmZmCisKKyNkZWZpbmUgVVNCX0VfREVGQVVMVF9ERVZJQ0UgICAoVVNCX0VfUkVTRVRfTUFTSyB8IFVTQl9FX1RYRTRfTUFTSyB8IFwKKwkJCQlVU0JfRV9UWEUzX01BU0sgfCBVU0JfRV9UWEUyX01BU0sgfCBcCisJCQkJVVNCX0VfVFhFMV9NQVNLIHwgVVNCX0VfQlNZX01BU0sgfCBcCisJCQkJVVNCX0VfVFhCX01BU0sgfCBVU0JfRV9SWEJfTUFTSykKKworI2RlZmluZSBVU0JfRV9UWEVfTUFTSyAgICAgICAgIChVU0JfRV9UWEU0X01BU0sgfCBVU0JfRV9UWEUzX01BU0t8XAorCQkJCSBVU0JfRV9UWEUyX01BU0sgfCBVU0JfRV9UWEUxX01BU0spCisvKiBVU0IgU3RhdHVzIFJlZ2lzdGVyIGRlZmluZSAqLworI2RlZmluZSBVU0JfSURMRV9TVEFUVVNfTUFTSwkweDAxCisKKy8qIFVTQiBTdGFydCBvZiBGcmFtZSBUaW1lciAqLworI2RlZmluZSBVU0JfVVNTRlRfTUFTSwkJMHgzRkZGCisKKy8qIFVTQiBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCX1VTRlJOX01BU0sJCTB4RkZGRgorCitzdHJ1Y3QgdXNiX2RldmljZV9wYXJheworCXUxNgllcHB0cls0XTsKKwl1MzIJcnN0YXRlOworCXUzMglycHRyOworCXUxNglmcmFtZV9uOworCXUxNglyYmNudDsKKwl1MzIJcnRlbXA7CisJdTMyCXJ4dXNiX2RhdGE7CisJdTE2CXJ4dXB0cjsKKwl1OAlyZXNvWzJdOworCXUzMglzb2Z0Ymw7CisJdTgJc29mdWNyY3RlbXA7Cit9OworCitzdHJ1Y3QgdXNiX2VwX3BhcmF7CisJdTE2CXJiYXNlOworCXUxNgl0YmFzZTsKKwl1OAlyYm1yOworCXU4CXRibXI7CisJdTE2CW1yYmxyOworCXUxNglyYnB0cjsKKwl1MTYJdGJwdHI7CisJdTMyCXRzdGF0ZTsKKwl1MzIJdHB0cjsKKwl1MTYJdGNyYzsKKwl1MTYJdGJjbnQ7CisJdTMyCXR0ZW1wOworCXUxNgl0eHVzYnVfcHRyOworCXU4CXJlc2VydmVbMl07Cit9OworCisjZGVmaW5lIFVTQl9CVVNNT0RFX0dCTAkJMHgyMAorI2RlZmluZSBVU0JfQlVTTU9ERV9CT19NQVNLCTB4MTgKKyNkZWZpbmUgVVNCX0JVU01PREVfQk9fU0hJRlQJMHgzCisjZGVmaW5lIFVTQl9CVVNNT0RFX0JFCQkweDIKKyNkZWZpbmUgVVNCX0JVU01PREVfQ0VUTQkweDA0CisjZGVmaW5lIFVTQl9CVVNNT0RFX0RUQgkJMHgwMgorCisvKiBFbmRwb2ludCBiYXNpYyBoYW5kbGUgKi8KKyNkZWZpbmUgZXBfaW5kZXgoRVApCQkoKEVQKS0+ZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIDB4RikKKyNkZWZpbmUgZXBfbWF4cGFja2V0KEVQKQkoKEVQKS0+ZXAubWF4cGFja2V0KQorI2RlZmluZSBlcF9pc19pbihFUCkJKChlcF9pbmRleChFUCkgPT0gMCkgPyAoRVAtPnVkYy0+ZXAwX2RpciA9PSBcCisJCQlVU0JfRElSX0lOKSA6ICgoRVApLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzIFwKKwkJCSYgVVNCX0RJUl9JTikgPT0gVVNCX0RJUl9JTikKKworLyogZXAwIHRyYW5zZmVyIHN0YXRlICovCisjZGVmaW5lIFdBSVRfRk9SX1NFVFVQICAgICAgICAgIDAKKyNkZWZpbmUgREFUQV9TVEFURV9YTUlUICAgICAgICAgMQorI2RlZmluZSBEQVRBX1NUQVRFX05FRURfWkxQICAgICAyCisjZGVmaW5lIFdBSVRfRk9SX09VVF9TVEFUVVMgICAgIDMKKyNkZWZpbmUgREFUQV9TVEFURV9SRUNWICAgICAgICAgNAorCisvKiBlcCB0cmFtc2ZlciBtb2RlICovCisjZGVmaW5lIFVTQlBfVE1fQ1RMCTAKKyNkZWZpbmUgVVNCUF9UTV9JU08JMQorI2RlZmluZSBVU0JQX1RNX0JVTEsJMgorI2RlZmluZSBVU0JQX1RNX0lOVAkzCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVU0IgUlggQW5kIFRYIERBVEEgRnJhbWUKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgcWVfZnJhbWV7CisJdTggKmRhdGE7CisJdTMyIGxlbjsKKwl1MzIgc3RhdHVzOworCXUzMiBpbmZvOworCisJdm9pZCAqcHJpdmRhdGE7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworfTsKKworLyogRnJhbWUgc3RydWN0dXJlLCBpbmZvIGZpZWxkLiAqLworI2RlZmluZSBQSURfREFUQTAgICAgICAgICAgICAgIDB4ODAwMDAwMDAgLyogRGF0YSB0b2dnbGUgemVybyAqLworI2RlZmluZSBQSURfREFUQTEgICAgICAgICAgICAgIDB4NDAwMDAwMDAgLyogRGF0YSB0b2dnbGUgb25lICAqLworI2RlZmluZSBQSURfU0VUVVAgICAgICAgICAgICAgIDB4MjAwMDAwMDAgLyogc2V0dXAgYml0ICovCisjZGVmaW5lIFNFVFVQX1NUQVRVUyAgICAgICAgICAgMHgxMDAwMDAwMCAvKiBzZXR1cCBzdGF0dXMgYml0ICovCisjZGVmaW5lIFNFVEFERFJfU1RBVFVTICAgICAgICAgMHgwODAwMDAwMCAvKiBzZXR1cHVwIGFkZHJlc3Mgc3RhdHVzIGJpdCAqLworI2RlZmluZSBOT19SRVEgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAgLyogRnJhbWUgd2l0aG91dCByZXF1ZXN0ICovCisjZGVmaW5lIEhPU1RfREFUQSAgICAgICAgICAgICAgMHgwMjAwMDAwMCAvKiBIb3N0IGRhdGEgZnJhbWUgKi8KKyNkZWZpbmUgRklSU1RfUEFDS0VUX0lOX0ZSQU1FICAweDAxMDAwMDAwIC8qIGZpcnN0IHBhY2tldCBpbiB0aGUgZnJhbWUgKi8KKyNkZWZpbmUgVE9LRU5fRlJBTUUgICAgICAgICAgICAweDAwODAwMDAwIC8qIEhvc3QgdG9rZW4gZnJhbWUgKi8KKyNkZWZpbmUgWkxQICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwIC8qIFplcm8gbGVuZ3RoIHBhY2tldCAqLworI2RlZmluZSBJTl9UT0tFTl9GUkFNRSAgICAgICAgIDB4MDAyMDAwMDAgLyogSW4gdG9rZW4gcGFja2FnZSAqLworI2RlZmluZSBPVVRfVE9LRU5fRlJBTUUgICAgICAgIDB4MDAxMDAwMDAgLyogT3V0IHRva2VuIHBhY2thZ2UgKi8KKyNkZWZpbmUgU0VUVVBfVE9LRU5fRlJBTUUgICAgICAweDAwMDgwMDAwIC8qIFNldHVwIHRva2VuIHBhY2thZ2UgKi8KKyNkZWZpbmUgU1RBTExfRlJBTUUgICAgICAgICAgICAweDAwMDQwMDAwIC8qIFN0YWxsIGhhbmRzaGFrZSAqLworI2RlZmluZSBOQUNLX0ZSQU1FICAgICAgICAgICAgIDB4MDAwMjAwMDAgLyogTmFjayBoYW5kc2hha2UgKi8KKyNkZWZpbmUgTk9fUElEICAgICAgICAgICAgICAgICAweDAwMDEwMDAwIC8qIE5vIHNlbmQgUElEICovCisjZGVmaW5lIE5PX0NSQyAgICAgICAgICAgICAgICAgMHgwMDAwODAwMCAvKiBObyBzZW5kIENSQyAqLworI2RlZmluZSBIT1NUX0NPTU1BTkQgICAgICAgICAgIDB4MDAwMDQwMDAgLyogSG9zdCBjb21tYW5kIGZyYW1lICAgKi8KKworLyogRnJhbWUgc3RhdHVzIGZpZWxkICovCisvKiBSZWNlaXZlIHNpZGUgKi8KKyNkZWZpbmUgRlJBTUVfT0sgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIEZyYW1lIHRyYW5taXR0ZWQgb3IgcmVjZWl2ZWQgT0sgKi8KKyNkZWZpbmUgRlJBTUVfRVJST1IgICAgICAgICAgICAweDgwMDAwMDAwIC8qIEVycm9yIG9jY3VyZWQgb24gZnJhbWUgKi8KKyNkZWZpbmUgU1RBUlRfRlJBTUVfTE9TVCAgICAgICAweDQwMDAwMDAwIC8qIFNUQVJUX0ZSQU1FX0xPU1QgKi8KKyNkZWZpbmUgRU5EX0ZSQU1FX0xPU1QgICAgICAgICAweDIwMDAwMDAwIC8qIEVORF9GUkFNRV9MT1NUICovCisjZGVmaW5lIFJYX0VSX05PTk9DVCAgICAgICAgICAgMHgxMDAwMDAwMCAvKiBSeCBOb24gT2N0ZXQgQWxpZ25lZCBQYWNrZXQgKi8KKyNkZWZpbmUgUlhfRVJfQklUU1RVRkYgICAgICAgICAweDA4MDAwMDAwIC8qIEZyYW1lIEFib3J0ZWQgLS1SZWNlaXZlZCBwYWNrZXQKKwkJCQkJICAgICB3aXRoIGJpdCBzdHVmZiBlcnJvciAqLworI2RlZmluZSBSWF9FUl9DUkMgICAgICAgICAgICAgIDB4MDQwMDAwMDAgLyogUmVjZWl2ZWQgcGFja2V0IHdpdGggQ1JDIGVycm9yICovCisjZGVmaW5lIFJYX0VSX09WRVJVTiAgICAgICAgICAgMHgwMjAwMDAwMCAvKiBPdmVyLXJ1biBvY2N1cmVkIG9uIHJlY2VwdGlvbiAqLworI2RlZmluZSBSWF9FUl9QSUQgICAgICAgICAgICAgIDB4MDEwMDAwMDAgLyogV3JvbmcgUElEIHJlY2VpdmVkICovCisvKiBUcmFubWl0IHNpZGUgKi8KKyNkZWZpbmUgVFhfRVJfTkFLICAgICAgICAgICAgICAweDAwODAwMDAwIC8qIFJlY2VpdmVkIE5BSyBoYW5kc2hha2UgKi8KKyNkZWZpbmUgVFhfRVJfU1RBTEwgICAgICAgICAgICAweDAwNDAwMDAwIC8qIFJlY2VpdmVkIFNUQUxMIGhhbmRzaGFrZSAqLworI2RlZmluZSBUWF9FUl9USU1FT1VUICAgICAgICAgIDB4MDAyMDAwMDAgLyogVHJhbnNtaXQgdGltZSBvdXQgKi8KKyNkZWZpbmUgVFhfRVJfVU5ERVJVTiAgICAgICAgICAweDAwMTAwMDAwIC8qIFRyYW5zbWl0IHVuZGVycnVuICovCisjZGVmaW5lIEZSQU1FX0lOUFJPR1JFU1MgICAgICAgMHgwMDA4MDAwMCAvKiBGcmFtZSBpcyBiZWluZyB0cmFuc21pdHRlZCAqLworI2RlZmluZSBFUl9EQVRBX1VOREVSVU4gICAgICAgIDB4MDAwNDAwMDAgLyogRnJhbWUgaXMgc2hvcnRlciB0aGVuIGV4cGVjdGVkICovCisjZGVmaW5lIEVSX0RBVEFfT1ZFUlVOICAgICAgICAgMHgwMDAyMDAwMCAvKiBGcmFtZSBpcyBsb25nZXIgdGhlbiBleHBlY3RlZCAqLworCisvKiBRRSBVU0IgZnJhbWUgb3BlcmF0aW9uIGZ1bmN0aW9ucyAqLworI2RlZmluZSBmcmFtZV9nZXRfbGVuZ3RoKGZybSkgKGZybS0+bGVuKQorI2RlZmluZSBmcmFtZV9zZXRfbGVuZ3RoKGZybSwgbGVuZykgKGZybS0+bGVuID0gbGVuZykKKyNkZWZpbmUgZnJhbWVfZ2V0X2RhdGEoZnJtKSAoZnJtLT5kYXRhKQorI2RlZmluZSBmcmFtZV9zZXRfZGF0YShmcm0sIGRhdCkgKGZybS0+ZGF0YSA9IGRhdCkKKyNkZWZpbmUgZnJhbWVfZ2V0X2luZm8oZnJtKSAoZnJtLT5pbmZvKQorI2RlZmluZSBmcmFtZV9zZXRfaW5mbyhmcm0sIGluZikgKGZybS0+aW5mbyA9IGluZikKKyNkZWZpbmUgZnJhbWVfZ2V0X3N0YXR1cyhmcm0pIChmcm0tPnN0YXR1cykKKyNkZWZpbmUgZnJhbWVfc2V0X3N0YXR1cyhmcm0sIHN0YXQpIChmcm0tPnN0YXR1cyA9IHN0YXQpCisjZGVmaW5lIGZyYW1lX2dldF9wcml2ZGF0YShmcm0pIChmcm0tPnByaXZkYXRhKQorI2RlZmluZSBmcmFtZV9zZXRfcHJpdmRhdGEoZnJtLCBkYXQpIChmcm0tPnByaXZkYXRhID0gZGF0KQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWVfZnJhbWVfY2xlYW4oc3RydWN0IHFlX2ZyYW1lICpmcm0pCit7CisJZnJhbWVfc2V0X2RhdGEoZnJtLCBOVUxMKTsKKwlmcmFtZV9zZXRfbGVuZ3RoKGZybSwgMCk7CisJZnJhbWVfc2V0X3N0YXR1cyhmcm0sIEZSQU1FX09LKTsKKwlmcmFtZV9zZXRfaW5mbyhmcm0sIDApOworCWZyYW1lX3NldF9wcml2ZGF0YShmcm0sIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWVfZnJhbWVfaW5pdChzdHJ1Y3QgcWVfZnJhbWUgKmZybSkKK3sKKwlxZV9mcmFtZV9jbGVhbihmcm0pOworCUlOSVRfTElTVF9IRUFEKCYoZnJtLT5ub2RlKSk7Cit9CisKK3N0cnVjdCBxZV9yZXEgeworCXN0cnVjdCB1c2JfcmVxdWVzdCByZXE7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKKwkvKiBlcF9xdWV1ZSgpIGZ1bmMgd2lsbCBhZGQKKwkgYSByZXF1ZXN0LT5xdWV1ZSBpbnRvIGEgdWRjX2VwLT5xdWV1ZSAnZCB0YWlsICovCisJc3RydWN0IHFlX2VwICplcDsKKwl1bnNpZ25lZCBtYXBwZWQ6MTsKK307CisKK3N0cnVjdCBxZV9lcCB7CisJc3RydWN0IHVzYl9lcCBlcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlOworCXN0cnVjdCBxZV91ZGMgKnVkYzsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldDsKKworCXU4IHN0YXRlOworCisJc3RydWN0IHFlX2JkIF9faW9tZW0gKnJ4YmFzZTsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqbl9yeGJkOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICplX3J4YmQ7CisKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqdHhiYXNlOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpuX3R4YmQ7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmNfdHhiZDsKKworCXN0cnVjdCBxZV9mcmFtZSAqcnhmcmFtZTsKKwl1OCAqcnhidWZmZXI7CisJZG1hX2FkZHJfdCByeGJ1Zl9kOworCXU4IHJ4YnVmbWFwOworCXVuc2lnbmVkIGNoYXIgbG9jYWxuYWNrOworCWludCBoYXNfZGF0YTsKKworCXN0cnVjdCBxZV9mcmFtZSAqdHhmcmFtZTsKKwlzdHJ1Y3QgcWVfcmVxICp0eF9yZXE7CisJaW50IHNlbnQ7ICAvKmRhdGEgYWxyZWFkeSBzZW50ICovCisJaW50IGxhc3Q7ICAvKmRhdGEgc2VudCBpbiB0aGUgbGFzdCB0aW1lKi8KKworCXU4IGRpcjsKKwl1OCBlcG51bTsKKwl1OCB0bTsgLyogdHJhbnNmZXIgbW9kZSAqLworCXU4IGRhdGEwMTsKKwl1OCBpbml0OworCisJdTggYWxyZWFkeV9zZWVuOworCXU4IGVuYWJsZV90YXNrbGV0OworCXU4IHNldHVwX3N0YWdlOworCXUzMiBsYXN0X2lvOyAgICAgICAgICAgIC8qIHRpbWVzdGFtcCAqLworCisJY2hhciBuYW1lWzE0XTsKKworCXVuc2lnbmVkIGRvdWJsZV9idWY6MTsKKwl1bnNpZ25lZCBzdG9wcGVkOjE7CisJdW5zaWduZWQgZm5mOjE7CisJdW5zaWduZWQgaGFzX2RtYToxOworCisJdTggYWNrd2FpdDsKKwl1OCBkbWFfY2hhbm5lbDsKKwl1MTYgZG1hX2NvdW50ZXI7CisJaW50IGxjaDsKKworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworfTsKKworc3RydWN0IHFlX3VkYyB7CisJc3RydWN0IHVzYl9nYWRnZXQgZ2FkZ2V0OworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcWVfZXAgZXBzW1VTQl9NQVhfRU5EUE9JTlRTXTsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IGxvY2FsX3NldHVwX2J1ZmY7CisJc3BpbmxvY2tfdCBsb2NrOwkvKiBsb2NrIGZvciBzZXQvY29uZmlnIHFlX3VkYyAqLworCXVuc2lnbmVkIGxvbmcgc29jX3R5cGU7CQkvKiBRRSBvciBDUE0gc29jICovCisKKwlzdHJ1Y3QgcWVfcmVxICpzdGF0dXNfcmVxOwkvKiBlcDAgc3RhdHVzIHJlcXVlc3QgKi8KKworCS8qIFVTQiBhbmQgRVAgUGFyYW1ldGVyIEJsb2NrIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZV9wYXJhIF9faW9tZW0gKnVzYl9wYXJhbTsKKwlzdHJ1Y3QgdXNiX2VwX3BhcmEgX19pb21lbSAqZXBfcGFyYW1bNF07CisKKwl1MzIgbWF4X3BpcGVzOyAgICAgICAgICAvKiBEZXZpY2UgbWF4IHBpcGVzICovCisJdTMyIG1heF91c2VfZW5kcHRzOyAgICAgLyogTWF4IGVuZHBvaW50ZXMgdG8gYmUgdXNlZCAqLworCXUzMiBidXNfcmVzZXQ7ICAgICAgICAgIC8qIERldmljZSBpcyBidXMgcmVzZXRpbmcgKi8KKwl1MzIgcmVzdW1lX3N0YXRlOyAgICAgICAvKiBVU0Igc3RhdGUgdG8gcmVzdW1lKi8KKwl1MzIgdXNiX3N0YXRlOyAgICAgICAgICAvKiBVU0IgY3VycmVudCBzdGF0ZSAqLworCXUzMiB1c2JfbmV4dF9zdGF0ZTsgICAgIC8qIFVTQiBuZXh0IHN0YXRlICovCisJdTMyIGVwMF9zdGF0ZTsgICAgICAgICAgLyogRW5wb2ludCB6ZXJvIHN0YXRlICovCisJdTMyIGVwMF9kaXI7ICAgICAgICAgICAgLyogRW5wb2ludCB6ZXJvIGRpcmVjdGlvbjogY2FuIGJlCisJCQkJVVNCX0RJUl9JTiBvciBVU0JfRElSX09VVCovCisJdTMyIHVzYl9zb2ZfY291bnQ7ICAgICAgLyogU09GIGNvdW50ICovCisJdTMyIGVycm9yczsgICAgICAgICAgICAgLyogVVNCIEVSUk9ScyBjb3VudCAqLworCisJdTggKnRtcGJ1ZjsKKwl1MzIgY19zdGFydDsKKwl1MzIgY19lbmQ7CisKKwl1OCAqbnVsbGJ1ZjsKKwl1OCAqc3RhdHVzYnVmOworCWRtYV9hZGRyX3QgbnVsbHA7CisJdTggbnVsbG1hcDsKKwl1OCBkZXZpY2VfYWRkcmVzczsJLyogRGV2aWNlIFVTQiBhZGRyZXNzICovCisKKwl1bnNpZ25lZCBpbnQgdXNiX2Nsb2NrOworCXVuc2lnbmVkIGludCB1c2JfaXJxOworCXN0cnVjdCB1c2JfY3RsciBfX2lvbWVtICp1c2JfcmVnczsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByeF90YXNrbGV0OworCisJc3RydWN0IGNvbXBsZXRpb24gKmRvbmU7CS8qIHRvIG1ha2Ugc3VyZSByZWxlYXNlKCkgaXMgZG9uZSAqLworfTsKKworI2RlZmluZSBFUF9TVEFURV9JRExFCTAKKyNkZWZpbmUgRVBfU1RBVEVfTkFDSwkxCisjZGVmaW5lIEVQX1NUQVRFX1NUQUxMCTIKKworLyoKKyAqIHRyYW5zbWl0IEJEJ3Mgc3RhdHVzCisgKi8KKyNkZWZpbmUgVF9SICAgICAgICAgICAweDgwMDAwMDAwICAgICAgICAgLyogcmVhZHkgYml0ICovCisjZGVmaW5lIFRfVyAgICAgICAgICAgMHgyMDAwMDAwMCAgICAgICAgIC8qIHdyYXAgYml0ICovCisjZGVmaW5lIFRfSSAgICAgICAgICAgMHgxMDAwMDAwMCAgICAgICAgIC8qIGludGVycnVwdCBvbiBjb21wbGV0aW9uICovCisjZGVmaW5lIFRfTCAgICAgICAgICAgMHgwODAwMDAwMCAgICAgICAgIC8qIGxhc3QgKi8KKyNkZWZpbmUgVF9UQyAgICAgICAgICAweDA0MDAwMDAwICAgICAgICAgLyogdHJhbnNtaXQgQ1JDICovCisjZGVmaW5lIFRfQ05GICAgICAgICAgMHgwMjAwMDAwMCAgICAgICAgIC8qIHdhaXQgZm9yICB0cmFuc21pdCBjb25maXJtICovCisjZGVmaW5lIFRfTFNQICAgICAgICAgMHgwMTAwMDAwMCAgICAgICAgIC8qIExvdy1zcGVlZCB0cmFuc2FjdGlvbiAqLworI2RlZmluZSBUX1BJRCAgICAgICAgIDB4MDBjMDAwMDAgICAgICAgICAvKiBwYWNrZXQgaWQgKi8KKyNkZWZpbmUgVF9OQUsgICAgICAgICAweDAwMTAwMDAwICAgICAgICAgLyogTm8gYWNrLiAqLworI2RlZmluZSBUX1NUQUwgICAgICAgIDB4MDAwODAwMDAgICAgICAgICAvKiBTdGFsbCByZWNpZXZlZCAqLworI2RlZmluZSBUX1RPICAgICAgICAgIDB4MDAwNDAwMDAgICAgICAgICAvKiB0aW1lIG91dCAqLworI2RlZmluZSBUX1VOICAgICAgICAgIDB4MDAwMjAwMDAgICAgICAgICAvKiB1bmRlcnJ1biAqLworCisjZGVmaW5lIERFVklDRV9UX0VSUk9SICAgIChUX1VOIHwgVF9UTykKKyNkZWZpbmUgSE9TVF9UX0VSUk9SICAgICAgKFRfVU4gfCBUX1RPIHwgVF9OQUsgfCBUX1NUQUwpCisjZGVmaW5lIERFVklDRV9UX0JEX01BU0sgIERFVklDRV9UX0VSUk9SCisjZGVmaW5lIEhPU1RfVF9CRF9NQVNLICAgIEhPU1RfVF9FUlJPUgorCisjZGVmaW5lIFRfUElEX1NISUZUICAgNgorI2RlZmluZSBUX1BJRF9EQVRBMCAgIDB4MDA4MDAwMDAgICAgICAgICAvKiBEYXRhIDAgdG9nZ2xlICovCisjZGVmaW5lIFRfUElEX0RBVEExICAgMHgwMGMwMDAwMCAgICAgICAgIC8qIERhdGEgMSB0b2dnbGUgKi8KKworLyoKKyAqIHJlY2VpdmUgQkQncyBzdGF0dXMKKyAqLworI2RlZmluZSBSX0UgICAgICAgICAgIDB4ODAwMDAwMDAgICAgICAgICAvKiBidWZmZXIgZW1wdHkgKi8KKyNkZWZpbmUgUl9XICAgICAgICAgICAweDIwMDAwMDAwICAgICAgICAgLyogd3JhcCBiaXQgKi8KKyNkZWZpbmUgUl9JICAgICAgICAgICAweDEwMDAwMDAwICAgICAgICAgLyogaW50ZXJydXB0IG9uIHJlY2VwdGlvbiAqLworI2RlZmluZSBSX0wgICAgICAgICAgIDB4MDgwMDAwMDAgICAgICAgICAvKiBsYXN0ICovCisjZGVmaW5lIFJfRiAgICAgICAgICAgMHgwNDAwMDAwMCAgICAgICAgIC8qIGZpcnN0ICovCisjZGVmaW5lIFJfUElEICAgICAgICAgMHgwMGMwMDAwMCAgICAgICAgIC8qIHBhY2tldCBpZCAqLworI2RlZmluZSBSX05PICAgICAgICAgIDB4MDAxMDAwMDAgICAgICAgICAvKiBSeCBOb24gT2N0ZXQgQWxpZ25lZCBQYWNrZXQgKi8KKyNkZWZpbmUgUl9BQiAgICAgICAgICAweDAwMDgwMDAwICAgICAgICAgLyogRnJhbWUgQWJvcnRlZCAqLworI2RlZmluZSBSX0NSICAgICAgICAgIDB4MDAwNDAwMDAgICAgICAgICAvKiBDUkMgRXJyb3IgKi8KKyNkZWZpbmUgUl9PViAgICAgICAgICAweDAwMDIwMDAwICAgICAgICAgLyogT3ZlcnJ1biAqLworCisjZGVmaW5lIFJfRVJST1IgICAgICAgKFJfTk8gfCBSX0FCIHwgUl9DUiB8IFJfT1YpCisjZGVmaW5lIFJfQkRfTUFTSyAgICAgUl9FUlJPUgorCisjZGVmaW5lIFJfUElEX0RBVEEwICAgMHgwMDAwMDAwMAorI2RlZmluZSBSX1BJRF9EQVRBMSAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgUl9QSURfU0VUVVAgICAweDAwODAwMDAwCisKKyNkZWZpbmUgQ1BNX1VTQl9TVE9QX1RYIDB4MmU2MDAwMDAKKyNkZWZpbmUgQ1BNX1VTQl9SRVNUQVJUX1RYIDB4MmU2MDAwMDAKKyNkZWZpbmUgQ1BNX1VTQl9TVE9QX1RYX09QQ09ERSAweDBhCisjZGVmaW5lIENQTV9VU0JfUkVTVEFSVF9UWF9PUENPREUgMHgwYgorI2RlZmluZSBDUE1fVVNCX0VQX1NISUZUIDUKKworI2lmbmRlZiBDT05GSUdfQ1BNCitpbmxpbmUgaW50IGNwbV9jb21tYW5kKHUzMiBjb21tYW5kLCB1OCBvcGNvZGUpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX1FVSUNDX0VOR0lORQoraW5saW5lIGludCBxZV9pc3N1ZV9jbWQodTMyIGNtZCwgdTMyIGRldmljZSwgdTggbWNuX3Byb3RvY29sLAorCXUzMiBjbWRfaW5wdXQpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorI2VuZGlmCisKKyNlbmRpZiAgLyogX19GU0xfUUVfVURDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYwppbmRleCA0NWFkNTU2Li4wOTFiYjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCkBAIC0yMywxMSArMjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC00NCwxMSArNDEsOSBAQAogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjaW5jbHVkZSAiZnNsX3VzYjJfdWRjLmgiCiAKQEAgLTYxLDggKzU2LDggQEAKIHN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW10gPSAiZnNsLXVzYjItdWRjIjsKIHN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9kZXNjW10gPSBEUklWRVJfREVTQzsKIAotdm9sYXRpbGUgc3RhdGljIHN0cnVjdCB1c2JfZHJfZGV2aWNlICpkcl9yZWdzID0gTlVMTDsKLXZvbGF0aWxlIHN0YXRpYyBzdHJ1Y3QgdXNiX3N5c19pbnRlcmZhY2UgKnVzYl9zeXNfcmVncyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHVzYl9kcl9kZXZpY2UgKmRyX3JlZ3M7CitzdGF0aWMgc3RydWN0IHVzYl9zeXNfaW50ZXJmYWNlICp1c2Jfc3lzX3JlZ3M7CiAKIC8qIGl0IGlzIGluaXRpYWxpemVkIGluIHByb2JlKCkgICovCiBzdGF0aWMgc3RydWN0IGZzbF91ZGMgKnVkY19jb250cm9sbGVyID0gTlVMTDsKQEAgLTc2LDE2ICs3MSwxNCBAQAogCS53TWF4UGFja2V0U2l6ZSA9CVVTQl9NQVhfQ1RSTF9QQVlMT0FELAogfTsKIAotc3RhdGljIGludCBmc2xfdWRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLXN0YXRpYyBpbnQgZnNsX3VkY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiBzdGF0aWMgdm9pZCBmc2xfZXBfZmlmb19mbHVzaChzdHJ1Y3QgdXNiX2VwICpfZXApOwogCiAjaWZkZWYgQ09ORklHX1BQQzMyCiAjZGVmaW5lIGZzbF9yZWFkbChhZGRyKQkJaW5fbGUzMihhZGRyKQotI2RlZmluZSBmc2xfd3JpdGVsKGFkZHIsIHZhbDMyKSBvdXRfbGUzMih2YWwzMiwgYWRkcikKKyNkZWZpbmUgZnNsX3dyaXRlbCh2YWwzMiwgYWRkcikgb3V0X2xlMzIoYWRkciwgdmFsMzIpCiAjZWxzZQogI2RlZmluZSBmc2xfcmVhZGwoYWRkcikJCXJlYWRsKGFkZHIpCi0jZGVmaW5lIGZzbF93cml0ZWwoYWRkciwgdmFsMzIpIHdyaXRlbChhZGRyLCB2YWwzMikKKyNkZWZpbmUgZnNsX3dyaXRlbCh2YWwzMiwgYWRkcikgd3JpdGVsKHZhbDMyLCBhZGRyKQogI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTg1LDEwICsxNzgsNiBAQAogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKICNkZWZpbmUgRlNMX1VEQ19SRVNFVF9USU1FT1VUIDEwMDAKIAotCS8qIGJlZm9yZSBoZXJlLCBtYWtlIHN1cmUgZHJfcmVncyBoYXMgYmVlbiBpbml0aWFsaXplZCAqLwotCWlmICghdWRjKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qIFN0b3AgYW5kIHJlc2V0IHRoZSB1c2IgY29udHJvbGxlciAqLwogCXRtcCA9IGZzbF9yZWFkbCgmZHJfcmVncy0+dXNiY21kKTsKIAl0bXAgJj0gflVTQl9DTURfUlVOX1NUT1A7CkBAIC0yMDIsNyArMTkxLDcgQEAKIAl0aW1lb3V0ID0gamlmZmllcyArIEZTTF9VRENfUkVTRVRfVElNRU9VVDsKIAl3aGlsZSAoZnNsX3JlYWRsKCZkcl9yZWdzLT51c2JjbWQpICYgVVNCX0NNRF9DVFJMX1JFU0VUKSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCQlFUlIoInVkYyByZXNldCB0aW1lb3V0ISBcbiIpOworCQkJRVJSKCJ1ZGMgcmVzZXQgdGltZW91dCFcbiIpOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAkJY3B1X3JlbGF4KCk7CkBAIC0zMTUsNyArMzA0LDggQEAKIAlyZXR1cm47CiB9CiAKLXZvaWQgZHJfZXBfc2V0dXAodW5zaWduZWQgY2hhciBlcF9udW0sIHVuc2lnbmVkIGNoYXIgZGlyLCB1bnNpZ25lZCBjaGFyIGVwX3R5cGUpCitzdGF0aWMgdm9pZCBkcl9lcF9zZXR1cCh1bnNpZ25lZCBjaGFyIGVwX251bSwgdW5zaWduZWQgY2hhciBkaXIsCisJCQl1bnNpZ25lZCBjaGFyIGVwX3R5cGUpCiB7CiAJdW5zaWduZWQgaW50IHRtcF9lcGN0cmwgPSAwOwogCkBAIC01NjMsNyArNTUzLDcgQEAKIAkvKiBudWtlIGFsbCBwZW5kaW5nIHJlcXVlc3RzIChkb2VzIGZsdXNoKSAqLwogCW51a2UoZXAsIC1FU0hVVERPV04pOwogCi0JZXAtPmRlc2MgPSAwOworCWVwLT5kZXNjID0gTlVMTDsKIAllcC0+c3RvcHBlZCA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAKQEAgLTYwMiw3ICs1OTIsNyBAQAogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBmc2xfcXVldWVfdGQoc3RydWN0IGZzbF9lcCAqZXAsIHN0cnVjdCBmc2xfcmVxICpyZXEpCitzdGF0aWMgdm9pZCBmc2xfcXVldWVfdGQoc3RydWN0IGZzbF9lcCAqZXAsIHN0cnVjdCBmc2xfcmVxICpyZXEpCiB7CiAJaW50IGkgPSBlcF9pbmRleChlcCkgKiAyICsgZXBfaXNfaW4oZXApOwogCXUzMiB0ZW1wLCBiaXRtYXNrLCB0bXBfc3RhdDsKQEAgLTY1MywxMyArNjQzLDE2IEBACiAJCQl8IEVQX1FVRVVFX0hFQURfU1RBVFVTX0hBTFQpKTsKIAlkUUgtPnNpemVfaW9jX2ludF9zdHMgJj0gdGVtcDsKIAorCS8qIEVuc3VyZSB0aGF0IHVwZGF0ZXMgdG8gdGhlIFFIIHdpbGwgb2NjdXJlIGJlZm9yZSBwcmltaW5nLiAqLworCXdtYigpOworCiAJLyogUHJpbWUgZW5kcG9pbnQgYnkgd3JpdGluZyAxIHRvIEVORFBUUFJJTUUgKi8KIAl0ZW1wID0gZXBfaXNfaW4oZXApCiAJCT8gKDEgPDwgKGVwX2luZGV4KGVwKSArIDE2KSkKIAkJOiAoMSA8PCAoZXBfaW5kZXgoZXApKSk7CiAJZnNsX3dyaXRlbCh0ZW1wLCAmZHJfcmVncy0+ZW5kcG9pbnRwcmltZSk7CiBvdXQ6Ci0JcmV0dXJuIDA7CisJcmV0dXJuOwogfQogCiAvKiBGaWxsIGluIHRoZSBkVEQgc3RydWN0dXJlCkBAIC03MTAsNyArNzAzLDcgQEAKIAkJKmlzX2xhc3QgPSAwOwogCiAJaWYgKCgqaXNfbGFzdCkgPT0gMCkKLQkJVkRCRygibXVsdGktZHRkIHJlcXVlc3QhXG4iKTsKKwkJVkRCRygibXVsdGktZHRkIHJlcXVlc3QhIik7CiAJLyogRmlsbCBpbiB0aGUgdHJhbnNmZXIgc2l6ZTsgc2V0IGFjdGl2ZSBiaXQgKi8KIAlzd2FwX3RlbXAgPSAoKCpsZW5ndGggPDwgRFREX0xFTkdUSF9CSVRfUE9TKSB8IERURF9TVEFUVVNfQUNUSVZFKTsKIApAQCAtNzczLDExICs3NjYsMTEgQEAKIAkvKiBjYXRjaCB2YXJpb3VzIGJvZ3VzIHBhcmFtZXRlcnMgKi8KIAlpZiAoIV9yZXEgfHwgIXJlcS0+cmVxLmNvbXBsZXRlIHx8ICFyZXEtPnJlcS5idWYKIAkJCXx8ICFsaXN0X2VtcHR5KCZyZXEtPnF1ZXVlKSkgewotCQlWREJHKCIlcywgYmFkIHBhcmFtc1xuIiwgX19mdW5jX18pOworCQlWREJHKCIlcywgYmFkIHBhcmFtcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICh1bmxpa2VseSghX2VwIHx8ICFlcC0+ZGVzYykpIHsKLQkJVkRCRygiJXMsIGJhZCBlcFxuIiwgX19mdW5jX18pOworCQlWREJHKCIlcywgYmFkIGVwIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgewpAQCAtMTA2OSw3ICsxMDYyLDcgQEAKIAogCXVkYyA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBmc2xfdWRjLCBnYWRnZXQpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKLQlWREJHKCJWQlVTICVzXG4iLCBpc19hY3RpdmUgPyAib24iIDogIm9mZiIpOworCVZEQkcoIlZCVVMgJXMiLCBpc19hY3RpdmUgPyAib24iIDogIm9mZiIpOwogCXVkYy0+dmJ1c19hY3RpdmUgPSAoaXNfYWN0aXZlICE9IDApOwogCWlmIChjYW5fcHVsbHVwKHVkYykpCiAJCWZzbF93cml0ZWwoKGZzbF9yZWFkbCgmZHJfcmVncy0+dXNiY21kKSB8IFVTQl9DTURfUlVOX1NUT1ApLApAQCAtMTE0Niw3ICsxMTM5LDYgQEAKIHsKIAlzdHJ1Y3QgZnNsX3JlcSAqcmVxID0gdWRjLT5zdGF0dXNfcmVxOwogCXN0cnVjdCBmc2xfZXAgKmVwOwotCWludCBzdGF0dXMgPSAwOwogCiAJaWYgKGRpcmVjdGlvbiA9PSBFUF9ESVJfSU4pCiAJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfSU47CkBAIC0xMTY0LDI3ICsxMTU2LDIxIEBACiAJcmVxLT5kdGRfY291bnQgPSAwOwogCiAJaWYgKGZzbF9yZXFfdG9fZHRkKHJlcSkgPT0gMCkKLQkJc3RhdHVzID0gZnNsX3F1ZXVlX3RkKGVwLCByZXEpOworCQlmc2xfcXVldWVfdGQoZXAsIHJlcSk7CiAJZWxzZQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChzdGF0dXMpCi0JCUVSUigiQ2FuJ3QgcXVldWUgZXAwIHN0YXR1cyByZXF1ZXN0IFxuIik7CiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7CiAKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB1ZGNfcmVzZXRfZXBfcXVldWUoc3RydWN0IGZzbF91ZGMgKnVkYywgdTggcGlwZSkKK3N0YXRpYyB2b2lkIHVkY19yZXNldF9lcF9xdWV1ZShzdHJ1Y3QgZnNsX3VkYyAqdWRjLCB1OCBwaXBlKQogewogCXN0cnVjdCBmc2xfZXAgKmVwID0gZ2V0X2VwX2J5X3BpcGUodWRjLCBwaXBlKTsKIAotCWlmICghZXAtPm5hbWUpCi0JCXJldHVybiAwOwotCi0JbnVrZShlcCwgLUVTSFVURE9XTik7Ci0KLQlyZXR1cm4gMDsKKwlpZiAoZXAtPm5hbWUpCisJCW51a2UoZXAsIC1FU0hVVERPV04pOwogfQogCiAvKgpAQCAtMTIwOCwxMCArMTE5NCw4IEBACiAJCXUxNiBpbmRleCwgdTE2IGxlbmd0aCkKIHsKIAl1MTYgdG1wID0gMDsJCS8qIFN0YXR1cywgY3B1IGVuZGlhbiAqLwotCiAJc3RydWN0IGZzbF9yZXEgKnJlcTsKIAlzdHJ1Y3QgZnNsX2VwICplcDsKLQlpbnQgc3RhdHVzID0gMDsKIAogCWVwID0gJnVkYy0+ZXBzWzBdOwogCkBAIC0xMjUwLDE0ICsxMjM0LDEwIEBACiAKIAkvKiBwcmltZSB0aGUgZGF0YSBwaGFzZSAqLwogCWlmICgoZnNsX3JlcV90b19kdGQocmVxKSA9PSAwKSkKLQkJc3RhdHVzID0gZnNsX3F1ZXVlX3RkKGVwLCByZXEpOworCQlmc2xfcXVldWVfdGQoZXAsIHJlcSk7CiAJZWxzZQkJCS8qIG5vIG1lbSAqLwogCQlnb3RvIHN0YWxsOwogCi0JaWYgKHN0YXR1cykgewotCQlFUlIoIkNhbid0IHJlc3BvbmQgdG8gZ2V0c3RhdHVzIHJlcXVlc3QgXG4iKTsKLQkJZ290byBzdGFsbDsKLQl9CiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7CiAJdWRjLT5lcDBfc3RhdGUgPSBEQVRBX1NUQVRFX1hNSVQ7CiAJcmV0dXJuOwpAQCAtMTM5Nyw3ICsxMzc3LDcgQEAKIAkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKIAkJYnJlYWs7CiAJY2FzZSBXQUlUX0ZPUl9TRVRVUDoKLQkJRVJSKCJVbmV4cGVjdCBlcDAgcGFja2V0cyBcbiIpOworCQlFUlIoIlVuZXhwZWN0IGVwMCBwYWNrZXRzXG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXAwc3RhbGwodWRjKTsKQEAgLTE0NzYsNyArMTQ1Niw3IEBACiAJCQkJc3RhdHVzID0gLUVJTFNFUTsKIAkJCQlicmVhazsKIAkJCX0gZWxzZQotCQkJCUVSUigiVW5rbm93biBlcnJvciBoYXMgb2NjdXJlZCAoMHgleCkhXHJcbiIsCisJCQkJRVJSKCJVbmtub3duIGVycm9yIGhhcyBvY2N1cmVkICgweCV4KSFcbiIsCiAJCQkJCWVycm9ycyk7CiAKIAkJfSBlbHNlIGlmIChsZTMyX3RvX2NwdShjdXJyX3RkLT5zaXplX2lvY19zdHMpCkBAIC0xNDk1LDcgKzE0NzUsNyBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJdGRfY29tcGxldGUrKzsKLQkJCVZEQkcoImRURCB0cmFuc21pdHRlZCBzdWNjZXNzZnVsICIpOworCQkJVkRCRygiZFREIHRyYW5zbWl0dGVkIHN1Y2Nlc3NmdWwiKTsKIAkJfQogCiAJCWlmIChqICE9IGN1cnJfcmVxLT5kdGRfY291bnQgLSAxKQpAQCAtMTU2OCw5ICsxNTQ4LDYgQEAKIHsKIAl1MzIgc3BlZWQ7CiAKLQlpZiAodWRjLT5idXNfcmVzZXQpCi0JCXVkYy0+YnVzX3Jlc2V0ID0gMDsKLQogCS8qIEJ1cyByZXNldHRpbmcgaXMgZmluaXNoZWQgKi8KIAlpZiAoIShmc2xfcmVhZGwoJmRyX3JlZ3MtPnBvcnRzYzEpICYgUE9SVFNDWF9QT1JUX1JFU0VUKSkgewogCQkvKiBHZXQgdGhlIHNwZWVkICovCkBAIC0xNjc4LDggKzE2NTUsNiBAQAogCiAJaWYgKGZzbF9yZWFkbCgmZHJfcmVncy0+cG9ydHNjMSkgJiBQT1JUU0NYX1BPUlRfUkVTRVQpIHsKIAkJVkRCRygiQnVzIHJlc2V0Iik7Ci0JCS8qIEJ1cyBpcyByZXNldGluZyAqLwotCQl1ZGMtPmJ1c19yZXNldCA9IDE7CiAJCS8qIFJlc2V0IGFsbCB0aGUgcXVldWVzLCBpbmNsdWRlIFhELCBkVEQsIEVQIHF1ZXVlCiAJCSAqIGhlYWQgYW5kIFRSIFF1ZXVlICovCiAJCXJlc2V0X3F1ZXVlcyh1ZGMpOwpAQCAtMTc2OCw3ICsxNzQzLDcgQEAKIAl9CiAKIAlpZiAoaXJxX3NyYyAmIChVU0JfU1RTX0VSUiB8IFVTQl9TVFNfU1lTX0VSUikpIHsKLQkJVkRCRygiRXJyb3IgSVJRICV4ICIsIGlycV9zcmMpOworCQlWREJHKCJFcnJvciBJUlEgJXgiLCBpcnFfc3JjKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKQEAgLTE3OTksNyArMTc3NCw3IEBACiAJLyogbG9jayBpcyBuZWVkZWQgYnV0IHdoZXRoZXIgc2hvdWxkIHVzZSB0aGlzIGxvY2sgb3IgYW5vdGhlciAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGNfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOwogCi0JZHJpdmVyLT5kcml2ZXIuYnVzID0gMDsKKwlkcml2ZXItPmRyaXZlci5idXMgPSBOVUxMOwogCS8qIGhvb2sgdXAgdGhlIGRyaXZlciAqLwogCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBkcml2ZXI7CiAJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOwpAQCAtMTgwOSw4ICsxNzg0LDggQEAKIAlyZXR2YWwgPSBkcml2ZXItPmJpbmQoJnVkY19jb250cm9sbGVyLT5nYWRnZXQpOwogCWlmIChyZXR2YWwpIHsKIAkJVkRCRygiYmluZCB0byAlcyAtLT4gJWQiLCBkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOwotCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAwOwotCQl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gMDsKKwkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKKwkJdWRjX2NvbnRyb2xsZXItPmRyaXZlciA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTgxOSwxMiArMTc5NCwxMiBAQAogCXVkY19jb250cm9sbGVyLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfQVRUQUNIRUQ7CiAJdWRjX2NvbnRyb2xsZXItPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOwogCXVkY19jb250cm9sbGVyLT5lcDBfZGlyID0gMDsKLQlwcmludGsoS0VSTl9JTkZPICIlczogYmluZCB0byBkcml2ZXIgJXMgXG4iLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiBiaW5kIHRvIGRyaXZlciAlc1xuIiwKIAkJCXVkY19jb250cm9sbGVyLT5nYWRnZXQubmFtZSwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAKIG91dDoKIAlpZiAocmV0dmFsKQotCQlwcmludGsoInJldHZhbCAlZCBcbiIsIHJldHZhbCk7CisJCXByaW50aygiZ2FkZ2V0IGRyaXZlciByZWdpc3RlciBmYWlsZWQgJWRcbiIsIHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMTg0Miw3ICsxODE3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodWRjX2NvbnRyb2xsZXItPnRyYW5zY2VpdmVyKQotCQkodm9pZClvdGdfc2V0X3BlcmlwaGVyYWwodWRjX2NvbnRyb2xsZXItPnRyYW5zY2VpdmVyLCAwKTsKKwkJb3RnX3NldF9wZXJpcGhlcmFsKHVkY19jb250cm9sbGVyLT50cmFuc2NlaXZlciwgTlVMTCk7CiAKIAkvKiBzdG9wIERSLCBkaXNhYmxlIGludHIgKi8KIAlkcl9jb250cm9sbGVyX3N0b3AodWRjX2NvbnRyb2xsZXIpOwpAQCAtMTg2MywxMCArMTgzOCwxMCBAQAogCiAJLyogdW5iaW5kIGdhZGdldCBhbmQgdW5ob29rIGRyaXZlci4gKi8KIAlkcml2ZXItPnVuYmluZCgmdWRjX2NvbnRyb2xsZXItPmdhZGdldCk7Ci0JdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gMDsKLQl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gMDsKKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBOVUxMOwogCi0JcHJpbnRrKCJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXHJcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXByaW50aygidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMTkyMiw3ICsxODk3LDcgQEAKIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT51c2JzdHMpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKIAkJCSJVU0IgU3RhdHVzIFJlZzpcbiIKLQkJCSJEciBTdXNwZW5kOiAlZCIgIlJlc2V0IFJlY2VpdmVkOiAlZCIgIlN5c3RlbSBFcnJvcjogJXMiCisJCQkiRHIgU3VzcGVuZDogJWQgUmVzZXQgUmVjZWl2ZWQ6ICVkIFN5c3RlbSBFcnJvcjogJXMgIgogCQkJIlVTQiBFcnJvciBJbnRlcnJ1cHQ6ICVzXG5cbiIsCiAJCQkodG1wX3JlZyAmIFVTQl9TVFNfU1VTUEVORCkgPyAxIDogMCwKIAkJCSh0bXBfcmVnICYgVVNCX1NUU19SRVNFVCkgPyAxIDogMCwKQEAgLTE5MzQsMTEgKzE5MDksMTEgQEAKIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT51c2JpbnRyKTsKIAl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCiAJCQkiVVNCIEludHJydXB0IEVuYWJsZSBSZWc6XG4iCi0JCQkiU2xlZXAgRW5hYmxlOiAlZCIgIlNPRiBSZWNlaXZlZCBFbmFibGU6ICVkIgorCQkJIlNsZWVwIEVuYWJsZTogJWQgU09GIFJlY2VpdmVkIEVuYWJsZTogJWQgIgogCQkJIlJlc2V0IEVuYWJsZTogJWRcbiIKLQkJCSJTeXN0ZW0gRXJyb3IgRW5hYmxlOiAlZCIKKwkJCSJTeXN0ZW0gRXJyb3IgRW5hYmxlOiAlZCAiCiAJCQkiUG9ydCBDaGFuZ2UgRGVjdGVjdGVkIEVuYWJsZTogJWRcbiIKLQkJCSJVU0IgRXJyb3IgSW50ciBFbmFibGU6ICVkIiAiVVNCIEludHIgRW5hYmxlOiAlZFxuXG4iLAorCQkJIlVTQiBFcnJvciBJbnRyIEVuYWJsZTogJWQgVVNCIEludHIgRW5hYmxlOiAlZFxuXG4iLAogCQkJKHRtcF9yZWcgJiBVU0JfSU5UUl9ERVZJQ0VfU1VTUEVORCkgPyAxIDogMCwKIAkJCSh0bXBfcmVnICYgVVNCX0lOVFJfU09GX0VOKSA/IDEgOiAwLAogCQkJKHRtcF9yZWcgJiBVU0JfSU5UUl9SRVNFVF9FTikgPyAxIDogMCwKQEAgLTE5NTEsMjEgKzE5MjYsMjEgQEAKIAogCXRtcF9yZWcgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPmZyaW5kZXgpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKLQkJCSJVU0IgRnJhbWUgSW5kZXggUmVnOiIgIkZyYW1lIE51bWJlciBpcyAweCV4XG5cbiIsCisJCQkiVVNCIEZyYW1lIEluZGV4IFJlZzogRnJhbWUgTnVtYmVyIGlzIDB4JXhcblxuIiwKIAkJCSh0bXBfcmVnICYgVVNCX0ZSSU5ERVhfTUFTS1MpKTsKIAlzaXplIC09IHQ7CiAJbmV4dCArPSB0OwogCiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+ZGV2aWNlYWRkcik7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJIlVTQiBEZXZpY2UgQWRkcmVzcyBSZWc6IiAiRGV2aWNlIEFkZHIgaXMgMHgleFxuXG4iLAorCQkJIlVTQiBEZXZpY2UgQWRkcmVzcyBSZWc6IERldmljZSBBZGRyIGlzIDB4JXhcblxuIiwKIAkJCSh0bXBfcmVnICYgVVNCX0RFVklDRV9BRERSRVNTX01BU0spKTsKIAlzaXplIC09IHQ7CiAJbmV4dCArPSB0OwogCiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+ZW5kcG9pbnRsaXN0YWRkcik7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJIlVTQiBFbmRwb2ludCBMaXN0IEFkZHJlc3MgUmVnOiIKKwkJCSJVU0IgRW5kcG9pbnQgTGlzdCBBZGRyZXNzIFJlZzogIgogCQkJIkRldmljZSBBZGRyIGlzIDB4JXhcblxuIiwKIAkJCSh0bXBfcmVnICYgVVNCX0VQX0xJU1RfQUREUkVTU19NQVNLKSk7CiAJc2l6ZSAtPSB0OwpAQCAtMTk3NCwxMSArMTk0OSwxMiBAQAogCXRtcF9yZWcgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPnBvcnRzYzEpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKIAkJIlVTQiBQb3J0IFN0YXR1cyZDb250cm9sIFJlZzpcbiIKLQkJIlBvcnQgVHJhbnNjZWl2ZXIgVHlwZSA6ICVzIiAiUG9ydCBTcGVlZDogJXMgXG4iCi0JCSJQSFkgTG93IFBvd2VyIFN1c3BlbmQ6ICVzIiAiUG9ydCBSZXNldDogJXMiCi0JCSJQb3J0IFN1c3BlbmQgTW9kZTogJXMgXG4iICJPdmVyLWN1cnJlbnQgQ2hhbmdlOiAlcyIKKwkJIlBvcnQgVHJhbnNjZWl2ZXIgVHlwZSA6ICVzIFBvcnQgU3BlZWQ6ICVzXG4iCisJCSJQSFkgTG93IFBvd2VyIFN1c3BlbmQ6ICVzIFBvcnQgUmVzZXQ6ICVzICIKKwkJIlBvcnQgU3VzcGVuZCBNb2RlOiAlc1xuIgorCQkiT3Zlci1jdXJyZW50IENoYW5nZTogJXMgIgogCQkiUG9ydCBFbmFibGUvRGlzYWJsZSBDaGFuZ2U6ICVzXG4iCi0JCSJQb3J0IEVuYWJsZWQvRGlzYWJsZWQ6ICVzIgorCQkiUG9ydCBFbmFibGVkL0Rpc2FibGVkOiAlcyAiCiAJCSJDdXJyZW50IENvbm5lY3QgU3RhdHVzOiAlc1xuXG4iLCAoIHsKIAkJCWNoYXIgKnM7CiAJCQlzd2l0Y2ggKHRtcF9yZWcgJiBQT1JUU0NYX1BUU19GU0xTKSB7CkBAIC0yMDIzLDcgKzE5OTksNyBAQAogCiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+dXNibW9kZSk7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJIlVTQiBNb2RlIFJlZzoiICJDb250cm9sbGVyIE1vZGUgaXMgOiAlc1xuXG4iLCAoIHsKKwkJCSJVU0IgTW9kZSBSZWc6IENvbnRyb2xsZXIgTW9kZSBpczogJXNcblxuIiwgKCB7CiAJCQkJY2hhciAqczsKIAkJCQlzd2l0Y2ggKHRtcF9yZWcgJiBVU0JfTU9ERV9DVFJMX01PREVfSE9TVCkgewogCQkJCWNhc2UgVVNCX01PREVfQ1RSTF9NT0RFX0lETEU6CkBAIC0yMDQyLDcgKzIwMTgsNyBAQAogCiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+ZW5kcHRzZXR1cHN0YXQpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKLQkJCSJFbmRwb2ludCBTZXR1cCBTdGF0dXMgUmVnOiIgIlNFVFVQIG9uIGVwIDB4JXhcblxuIiwKKwkJCSJFbmRwb2ludCBTZXR1cCBTdGF0dXMgUmVnOiBTRVRVUCBvbiBlcCAweCV4XG5cbiIsCiAJCQkodG1wX3JlZyAmIEVQX1NFVFVQX1NUQVRVU19NQVNLKSk7CiAJc2l6ZSAtPSB0OwogCW5leHQgKz0gdDsKQEAgLTIwNTUsMTIgKzIwMzEsMTIgQEAKIAkJbmV4dCArPSB0OwogCX0KIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT5lbmRwb2ludHByaW1lKTsKLQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJFUCBQcmltZSBSZWcgPSBbMHgleF1cbiIsIHRtcF9yZWcpOworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgIkVQIFByaW1lIFJlZyA9IFsweCV4XVxuXG4iLCB0bXBfcmVnKTsKIAlzaXplIC09IHQ7CiAJbmV4dCArPSB0OwogCiAJdG1wX3JlZyA9IHVzYl9zeXNfcmVncy0+c25vb3AxOwotCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgIlxuU25vb3AxIFJlZyA6ID0gWzB4JXhdXG5cbiIsIHRtcF9yZWcpOworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgIlNub29wMSBSZWcgOiA9IFsweCV4XVxuXG4iLCB0bXBfcmVnKTsKIAlzaXplIC09IHQ7CiAJbmV4dCArPSB0OwogCkBAIC0yMDg0LDcgKzIwNjAsNyBAQAogCX0gZWxzZSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgewogCQkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJCSJyZXEgJXAgYWN0dWFsIDB4JXggbGVuZ3RoIDB4JXggIGJ1ZiAlcFxuIiwKKwkJCQkicmVxICVwIGFjdHVhbCAweCV4IGxlbmd0aCAweCV4IGJ1ZiAlcFxuIiwKIAkJCQkmcmVxLT5yZXEsIHJlcS0+cmVxLmFjdHVhbCwKIAkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1Zik7CiAJCQlzaXplIC09IHQ7CkBAIC0yMTEwLDcgKzIwODYsNyBAQAogCQkJfSBlbHNlIHsKIAkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKIAkJCQkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJCQkJInJlcSAlcCBhY3R1YWwgMHgleCBsZW5ndGgiCisJCQkJCQkicmVxICVwIGFjdHVhbCAweCV4IGxlbmd0aCAiCiAJCQkJCQkiMHgleCAgYnVmICVwXG4iLAogCQkJCQkJJnJlcS0+cmVxLCByZXEtPnJlcS5hY3R1YWwsCiAJCQkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1Zik7CkBAIC0yMjAyLDcgKzIxNzgsNiBAQAogCXVkYy0+dXNiX3N0YXRlID0gVVNCX1NUQVRFX1BPV0VSRUQ7CiAJdWRjLT5lcDBfZGlyID0gMDsKIAl1ZGMtPnJlbW90ZV93YWtldXAgPSAwOwkvKiBkZWZhdWx0IHRvIDAgb24gcmVzZXQgKi8KLQlzcGluX2xvY2tfaW5pdCgmdWRjLT5sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjI1NCw3ICsyMjI5LDcgQEAKIAl1MzIgZGNjcGFyYW1zOwogCiAJaWYgKHN0cmNtcChwZGV2LT5uYW1lLCBkcml2ZXJfbmFtZSkpIHsKLQkJVkRCRygiV3JvbmcgZGV2aWNlXG4iKTsKKwkJVkRCRygiV3JvbmcgZGV2aWNlIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMjI2NCwyMyArMjIzOSwyNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlzcGluX2xvY2tfaW5pdCgmdWRjX2NvbnRyb2xsZXItPmxvY2spOworCXVkY19jb250cm9sbGVyLT5zdG9wcGVkID0gMTsKKwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpIHsKLQkJa2ZyZWUodWRjX2NvbnRyb2xsZXIpOwotCQlyZXR1cm4gLUVOWElPOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX2tmcmVlOwogCX0KIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCiAJCQkJZHJpdmVyX25hbWUpKSB7Ci0JCUVSUigicmVxdWVzdCBtZW0gcmVnaW9uIGZvciAlcyBmYWlsZWQgXG4iLCBwZGV2LT5uYW1lKTsKLQkJa2ZyZWUodWRjX2NvbnRyb2xsZXIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlFUlIoInJlcXVlc3QgbWVtIHJlZ2lvbiBmb3IgJXMgZmFpbGVkXG4iLCBwZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9rZnJlZTsKIAl9CiAKIAlkcl9yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlpZiAoIWRyX3JlZ3MpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnIxOworCQlnb3RvIGVycl9yZWxlYXNlX21lbV9yZWdpb247CiAJfQogCiAJdXNiX3N5c19yZWdzID0gKHN0cnVjdCB1c2Jfc3lzX2ludGVyZmFjZSAqKQpAQCAtMjI5MSw3ICsyMjY5LDcgQEAKIAlpZiAoIShkY2NwYXJhbXMgJiBEQ0NQQVJBTVNfREMpKSB7CiAJCUVSUigiVGhpcyBTT0MgZG9lc24ndCBzdXBwb3J0IGRldmljZSByb2xlXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9pb3VubWFwOwogCX0KIAkvKiBHZXQgbWF4IGRldmljZSBlbmRwb2ludHMgKi8KIAkvKiBERU4gaXMgYmlkaXJlY3Rpb25hbCBlcCBudW1iZXIsIG1heF9lcCBkb3VibGVzIHRoZSBudW1iZXIgKi8KQEAgLTIzMDAsMjIgKzIyNzgsMjIgQEAKIAl1ZGNfY29udHJvbGxlci0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoIXVkY19jb250cm9sbGVyLT5pcnEpIHsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9pb3VubWFwOwogCX0KIAogCXJldCA9IHJlcXVlc3RfaXJxKHVkY19jb250cm9sbGVyLT5pcnEsIGZzbF91ZGNfaXJxLCBJUlFGX1NIQVJFRCwKIAkJCWRyaXZlcl9uYW1lLCB1ZGNfY29udHJvbGxlcik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCUVSUigiY2Fubm90IHJlcXVlc3QgaXJxICVkIGVyciAlZCBcbiIsCisJCUVSUigiY2Fubm90IHJlcXVlc3QgaXJxICVkIGVyciAlZFxuIiwKIAkJCQl1ZGNfY29udHJvbGxlci0+aXJxLCByZXQpOwotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyX2lvdW5tYXA7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgdWRjIHN0cnVjdHVyZSBpbmNsdWRpbmcgUUggbWVtYmVyIGFuZCBvdGhlciBtZW1iZXIgKi8KIAlpZiAoc3RydWN0X3VkY19zZXR1cCh1ZGNfY29udHJvbGxlciwgcGRldikpIHsKIAkJRVJSKCJDYW4ndCBpbml0aWFsaXplIHVkYyBkYXRhIHN0cnVjdHVyZVxuIik7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMzsKKwkJZ290byBlcnJfZnJlZV9pcnE7CiAJfQogCiAJLyogaW5pdGlhbGl6ZSB1c2IgaHcgcmVnIGV4Y2VwdCBmb3IgcmVncyBmb3IgRVAsCkBAIC0yMzM2LDcgKzIzMTQsNyBAQAogCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldik7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyMzsKKwkJZ290byBlcnJfZnJlZV9pcnE7CiAKIAkvKiBzZXR1cCBRSCBhbmQgZXBjdHJsIGZvciBlcDAgKi8KIAllcDBfc2V0dXAodWRjX2NvbnRyb2xsZXIpOwpAQCAtMjM2NiwyMCArMjM0NCwyMiBAQAogCQkJRFREX0FMSUdOTUVOVCwgVURDX0RNQV9CT1VOREFSWSk7CiAJaWYgKHVkY19jb250cm9sbGVyLT50ZF9wb29sID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnI0OworCQlnb3RvIGVycl91bnJlZ2lzdGVyOwogCX0KIAljcmVhdGVfcHJvY19maWxlKCk7CiAJcmV0dXJuIDA7CiAKLWVycjQ6CitlcnJfdW5yZWdpc3RlcjoKIAlkZXZpY2VfdW5yZWdpc3RlcigmdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYpOwotZXJyMzoKK2Vycl9mcmVlX2lycToKIAlmcmVlX2lycSh1ZGNfY29udHJvbGxlci0+aXJxLCB1ZGNfY29udHJvbGxlcik7Ci1lcnIyOgorZXJyX2lvdW5tYXA6CiAJaW91bm1hcChkcl9yZWdzKTsKLWVycjE6CitlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKK2Vycl9rZnJlZToKIAlrZnJlZSh1ZGNfY29udHJvbGxlcik7CisJdWRjX2NvbnRyb2xsZXIgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0NjksNyArMjQ0OSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgdWRjX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7Ci0JcHJpbnRrKCIlcyB1bnJlZ2lzdGVyZWQgXG4iLCBkcml2ZXJfZGVzYyk7CisJcHJpbnRrKCIlcyB1bnJlZ2lzdGVyZWRcbiIsIGRyaXZlcl9kZXNjKTsKIH0KIAogbW9kdWxlX2V4aXQodWRjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5oCmluZGV4IDYxMzE3NTIuLmU2M2VmMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmgKQEAgLTQyNCwxNiArNDI0LDYgQEAKIC8qIENvbnRyb2xsZXIgZG1hIGJvdW5kYXJ5ICovCiAjZGVmaW5lIFVEQ19ETUFfQk9VTkRBUlkJCQkweDEwMDAKIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogIyMjIyMgZW51bSBkYXRhCi0qLwotdHlwZWRlZiBlbnVtIHsKLQllX1VMUEksCi0JZV9VVE1JXzhCSVQsCi0JZV9VVE1JXzE2QklULAotCWVfU0VSSUFMCi19IGVfUGh5SW50ZXJmYWNlOwotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiAjIyMgZHJpdmVyIHByaXZhdGUgZGF0YQpAQCAtNDY5LDkgKzQ1OSw5IEBACiAjZGVmaW5lIEVQX0RJUl9PVVQJMAogCiBzdHJ1Y3QgZnNsX3VkYyB7Ci0KIAlzdHJ1Y3QgdXNiX2dhZGdldCBnYWRnZXQ7CiAJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXI7CisJc3RydWN0IGNvbXBsZXRpb24gKmRvbmU7CS8qIHRvIG1ha2Ugc3VyZSByZWxlYXNlKCkgaXMgZG9uZSAqLwogCXN0cnVjdCBmc2xfZXAgKmVwczsKIAl1bnNpZ25lZCBpbnQgbWF4X2VwOwogCXVuc2lnbmVkIGludCBpcnE7CkBAIC00OTIsMjAgKzQ4MiwxMyBAQAogCXNpemVfdCBlcF9xaF9zaXplOwkJLyogc2l6ZSBhZnRlciBhbGlnbm1lbnQgYWRqdXN0bWVudCovCiAJZG1hX2FkZHJfdCBlcF9xaF9kbWE7CQkvKiBkbWEgYWRkcmVzcyBvZiBRSCAqLwogCi0JdTMyIG1heF9waXBlczsJCS8qIERldmljZSBtYXggcGlwZXMgKi8KLQl1MzIgbWF4X3VzZV9lbmRwdHM7CS8qIE1heCBlbmRwb2ludGVzIHRvIGJlIHVzZWQgKi8KLQl1MzIgYnVzX3Jlc2V0OwkJLyogRGV2aWNlIGlzIGJ1cyByZXNldGluZyAqLworCXUzMiBtYXhfcGlwZXM7ICAgICAgICAgIC8qIERldmljZSBtYXggcGlwZXMgKi8KIAl1MzIgcmVzdW1lX3N0YXRlOwkvKiBVU0Igc3RhdGUgdG8gcmVzdW1lICovCiAJdTMyIHVzYl9zdGF0ZTsJCS8qIFVTQiBjdXJyZW50IHN0YXRlICovCi0JdTMyIHVzYl9uZXh0X3N0YXRlOwkvKiBVU0IgbmV4dCBzdGF0ZSAqLwogCXUzMiBlcDBfc3RhdGU7CQkvKiBFbmRwb2ludCB6ZXJvIHN0YXRlICovCiAJdTMyIGVwMF9kaXI7CQkvKiBFbmRwb2ludCB6ZXJvIGRpcmVjdGlvbjogY2FuIGJlCiAJCQkJICAgVVNCX0RJUl9JTiBvciBVU0JfRElSX09VVCAqLwotCXUzMiB1c2Jfc29mX2NvdW50OwkvKiBTT0YgY291bnQgKi8KLQl1MzIgZXJyb3JzOwkJLyogVVNCIEVSUk9ScyBjb3VudCAqLwogCXU4IGRldmljZV9hZGRyZXNzOwkvKiBEZXZpY2UgVVNCIGFkZHJlc3MgKi8KLQotCXN0cnVjdCBjb21wbGV0aW9uICpkb25lOwkvKiB0byBtYWtlIHN1cmUgcmVsZWFzZSgpIGlzIGRvbmUgKi8KIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKaW5kZXggMTdkOTkwNS4uNGUzMTA3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaApAQCAtMTUxLDYgKzE1MSwxMyBAQAogI2RlZmluZQlnYWRnZXRfaXNfbTY2NTkyKGcpCTAKICNlbmRpZgogCisvKiBGcmVlc2NhbGUgQ1BNL1FFIFVEQyBTVVBQT1JUICovCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFCisjZGVmaW5lIGdhZGdldF9pc19mc2xfcWUoZykJIXN0cmNtcCgiZnNsX3FlX3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lIGdhZGdldF9pc19mc2xfcWUoZykJMAorI2VuZGlmCisKIAogLy8gQ09ORklHX1VTQl9HQURHRVRfU1gyCiAvLyBDT05GSUdfVVNCX0dBREdFVF9BVTFYMDAKQEAgLTIxNiw2ICsyMjMsOCBAQAogCQlyZXR1cm4gMHgyMDsKIAllbHNlIGlmIChnYWRnZXRfaXNfbTY2NTkyKGdhZGdldCkpCiAJCXJldHVybiAweDIxOworCWVsc2UgaWYgKGdhZGdldF9pc19mc2xfcWUoZ2FkZ2V0KSkKKwkJcmV0dXJuIDB4MjI7CiAJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKaW5kZXggZWE4NjUxZS4uNjBkM2Y5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKQEAgLTM1LDYgKzM1LDIxIEBACiAKICNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKIAorCisvKgorICogS2J1aWxkIGlzIG5vdCB2ZXJ5IGNvb3BlcmF0aXZlIHdpdGggcmVzcGVjdCB0byBsaW5raW5nIHNlcGFyYXRlbHkKKyAqIGNvbXBpbGVkIGxpYnJhcnkgb2JqZWN0cyBpbnRvIG9uZSBtb2R1bGUuICBTbyBmb3Igbm93IHdlIHdvbid0IHVzZQorICogc2VwYXJhdGUgY29tcGlsYXRpb24gLi4uIGVuc3VyaW5nIGluaXQvZXhpdCBzZWN0aW9ucyB3b3JrIHRvIHNocmluaworICogdGhlIHJ1bnRpbWUgZm9vdHByaW50LCBhbmQgZ2l2aW5nIHVzIGF0IGxlYXN0IHNvbWUgcGFydHMgb2Ygd2hhdAorICogYSAiZ2NjIC0tY29tYmluZSAuLi4gcGFydDEuYyBwYXJ0Mi5jIHBhcnQzLmMgLi4uICIgYnVpbGQgd291bGQuCisgKi8KKyNpbmNsdWRlICJ1c2JzdHJpbmcuYyIKKyNpbmNsdWRlICJjb25maWcuYyIKKyNpbmNsdWRlICJlcGF1dG9jb25mLmMiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwogTU9EVUxFX0FVVEhPUigiQmVuIFdpbGxpYW1zb24iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIApAQCAtMjA3LDcgKzIyMiw3IEBACiAJICogcG93ZXIgcHJvcGVydGllcyBvZiB0aGUgZGV2aWNlLiBJcyBpdCBzZWxmcG93ZXJlZD8KIAkgKi8KIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSwKLQkuYk1heFBvd2VyID0JCTEsCisJLmJNYXhQb3dlciA9CQlDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVcgLyAyLAogfTsKIAogLyogQi4zLjEgIFN0YW5kYXJkIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwppbmRleCA1Y2ZiNWViLi44YWU3MGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogCiAJLyogZXBfcmVzZXQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLwogCWVwLT5zdG9wcGVkID0gMDsKKwllcC0+d2VkZ2VkID0gMDsKIAllcC0+b3V0X292ZXJmbG93ID0gMDsKIAogCS8qIHNldCBzcGVlZC1kZXBlbmRlbnQgbWF4IHBhY2tldDsgbWF5IGtpY2sgaW4gaGlnaCBiYW5kd2lkdGggKi8KQEAgLTEyMTgsNyArMTIxOSw3IEBACiBzdGF0aWMgaW50IG5ldDIyODBfZmlmb19zdGF0dXMgKHN0cnVjdCB1c2JfZXAgKl9lcCk7CiAKIHN0YXRpYyBpbnQKLW5ldDIyODBfc2V0X2hhbHQgKHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQorbmV0MjI4MF9zZXRfaGFsdF9hbmRfd2VkZ2Uoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUsIGludCB3ZWRnZWQpCiB7CiAJc3RydWN0IG5ldDIyODBfZXAJKmVwOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwpAQCAtMTIzOSwxNiArMTI0MCwyMSBAQAogCWVsc2UgaWYgKGVwLT5pc19pbiAmJiB2YWx1ZSAmJiBuZXQyMjgwX2ZpZm9fc3RhdHVzIChfZXApICE9IDApCiAJCXJldHZhbCA9IC1FQUdBSU47CiAJZWxzZSB7Ci0JCVZERUJVRyAoZXAtPmRldiwgIiVzICVzIGhhbHRcbiIsIF9lcC0+bmFtZSwKLQkJCQl2YWx1ZSA/ICJzZXQiIDogImNsZWFyIik7CisJCVZERUJVRyAoZXAtPmRldiwgIiVzICVzICVzXG4iLCBfZXAtPm5hbWUsCisJCQkJdmFsdWUgPyAic2V0IiA6ICJjbGVhciIsCisJCQkJd2VkZ2VkID8gIndlZGdlIiA6ICJoYWx0Iik7CiAJCS8qIHNldC9jbGVhciwgdGhlbiBzeW5jaCBtZW1vcnkgdmlld3Mgd2l0aCB0aGUgZGV2aWNlICovCiAJCWlmICh2YWx1ZSkgewogCQkJaWYgKGVwLT5udW0gPT0gMCkKIAkJCQllcC0+ZGV2LT5wcm90b2NvbF9zdGFsbCA9IDE7CiAJCQllbHNlCiAJCQkJc2V0X2hhbHQgKGVwKTsKLQkJfSBlbHNlCisJCQlpZiAod2VkZ2VkKQorCQkJCWVwLT53ZWRnZWQgPSAxOworCQl9IGVsc2UgewogCQkJY2xlYXJfaGFsdCAoZXApOworCQkJZXAtPndlZGdlZCA9IDA7CisJCX0KIAkJKHZvaWQpIHJlYWRsICgmZXAtPnJlZ3MtPmVwX3JzcCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CkBAIC0xMjU3LDYgKzEyNjMsMjAgQEAKIH0KIAogc3RhdGljIGludAorbmV0MjI4MF9zZXRfaGFsdChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gbmV0MjI4MF9zZXRfaGFsdF9hbmRfd2VkZ2UoX2VwLCB2YWx1ZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK25ldDIyODBfc2V0X3dlZGdlKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlpZiAoIV9lcCB8fCBfZXAtPm5hbWUgPT0gZXAwbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIG5ldDIyODBfc2V0X2hhbHRfYW5kX3dlZGdlKF9lcCwgMSwgMSk7Cit9CisKK3N0YXRpYyBpbnQKIG5ldDIyODBfZmlmb19zdGF0dXMgKHN0cnVjdCB1c2JfZXAgKl9lcCkKIHsKIAlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CkBAIC0xMzAyLDYgKzEzMjIsNyBAQAogCS5kZXF1ZXVlCT0gbmV0MjI4MF9kZXF1ZXVlLAogCiAJLnNldF9oYWx0CT0gbmV0MjI4MF9zZXRfaGFsdCwKKwkuc2V0X3dlZGdlCT0gbmV0MjI4MF9zZXRfd2VkZ2UsCiAJLmZpZm9fc3RhdHVzCT0gbmV0MjI4MF9maWZvX3N0YXR1cywKIAkuZmlmb19mbHVzaAk9IG5ldDIyODBfZmlmb19mbHVzaCwKIH07CkBAIC0yNDEwLDkgKzI0MzEsMTQgQEAKIAkJCQlnb3RvIGRvX3N0YWxsOwogCQkJaWYgKChlID0gZ2V0X2VwX2J5X2FkZHIgKGRldiwgd19pbmRleCkpID09IDApCiAJCQkJZ290byBkb19zdGFsbDsKLQkJCWNsZWFyX2hhbHQgKGUpOworCQkJaWYgKGUtPndlZGdlZCkgeworCQkJCVZERUJVRyhkZXYsICIlcyB3ZWRnZWQsIGhhbHQgbm90IGNsZWFyZWRcbiIsCisJCQkJCQllcC0+ZXAubmFtZSk7CisJCQl9IGVsc2UgeworCQkJCVZERUJVRyhkZXYsICIlcyBjbGVhciBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CisJCQkJY2xlYXJfaGFsdChlKTsKKwkJCX0KIAkJCWFsbG93X3N0YXR1cyAoZXApOwotCQkJVkRFQlVHIChkZXYsICIlcyBjbGVhciBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CiAJCQlnb3RvIG5leHRfZW5kcG9pbnRzOwogCQkJfQogCQkJYnJlYWs7CkBAIC0yNDI3LDYgKzI0NTMsOCBAQAogCQkJCWdvdG8gZG9fc3RhbGw7CiAJCQlpZiAoKGUgPSBnZXRfZXBfYnlfYWRkciAoZGV2LCB3X2luZGV4KSkgPT0gMCkKIAkJCQlnb3RvIGRvX3N0YWxsOworCQkJaWYgKGUtPmVwLm5hbWUgPT0gZXAwbmFtZSkKKwkJCQlnb3RvIGRvX3N0YWxsOwogCQkJc2V0X2hhbHQgKGUpOwogCQkJYWxsb3dfc3RhdHVzIChlcCk7CiAJCQlWREVCVUcgKGRldiwgIiVzIHNldCBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuaAppbmRleCA4MWE3MWRiLi5jMzY4NTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmgKQEAgLTEwOSw2ICsxMDksNyBAQAogCQkJCQkJaW5fZmlmb192YWxpZGF0ZSA6IDEsCiAJCQkJCQlvdXRfb3ZlcmZsb3cgOiAxLAogCQkJCQkJc3RvcHBlZCA6IDEsCisJCQkJCQl3ZWRnZWQgOiAxLAogCQkJCQkJaXNfaW4gOiAxLAogCQkJCQkJaXNfaXNvIDogMSwKIAkJCQkJCXJlc3BvbmRlZCA6IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCmluZGV4IGJiNTRjY2EuLjM0ZTllMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCkBAIC0yMzEzLDYgKzIzMTMsMTMgQEAKIAogCXRtcCA9IG9tYXBfcmVhZGwoT1RHX1JFVik7CiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCS8qCisJCSAqIFJFVklTSVQ6IE5vdCBjbGVhciBob3cgdGhpcyB3b3JrcyBvbiBPTUFQMi4gIHRyYW5zCisJCSAqIGlzIEFORGVkIHRvIHByb2R1Y2UgYml0cyA3IGFuZCA4LCB3aGljaCBtaWdodCBtYWtlCisJCSAqIHNlbnNlIGZvciBVU0JfVFJBTlNDRUlWRVJfQ1RSTCBvbiBPTUFQMSwKKwkJICogYnV0IHdpdGggQ09OVFJPTF9ERVZDT05GLCB0aGVzZSBiaXRzIGhhdmUgc29tZXRoaW5nIHRvCisJCSAqIGRvIHdpdGggdGhlIGZyYW1lIGFkanVzdG1lbnQgY291bnRlciBhbmQgTWNCU1AyLgorCQkgKi8KIAkJY3RybF9uYW1lID0gImNvbnRyb2xfZGV2Y29uZiI7CiAJCXRyYW5zID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwppbmRleCBlMDA5MDA4Li41YTMwMzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKQEAgLTUzLDYgKzUzLDIwIEBACiAKICNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKIAorCisvKgorICogS2J1aWxkIGlzIG5vdCB2ZXJ5IGNvb3BlcmF0aXZlIHdpdGggcmVzcGVjdCB0byBsaW5raW5nIHNlcGFyYXRlbHkKKyAqIGNvbXBpbGVkIGxpYnJhcnkgb2JqZWN0cyBpbnRvIG9uZSBtb2R1bGUuICBTbyBmb3Igbm93IHdlIHdvbid0IHVzZQorICogc2VwYXJhdGUgY29tcGlsYXRpb24gLi4uIGVuc3VyaW5nIGluaXQvZXhpdCBzZWN0aW9ucyB3b3JrIHRvIHNocmluaworICogdGhlIHJ1bnRpbWUgZm9vdHByaW50LCBhbmQgZ2l2aW5nIHVzIGF0IGxlYXN0IHNvbWUgcGFydHMgb2Ygd2hhdAorICogYSAiZ2NjIC0tY29tYmluZSAuLi4gcGFydDEuYyBwYXJ0Mi5jIHBhcnQzLmMgLi4uICIgYnVpbGQgd291bGQuCisgKi8KKyNpbmNsdWRlICJ1c2JzdHJpbmcuYyIKKyNpbmNsdWRlICJjb25maWcuYyIKKyNpbmNsdWRlICJlcGF1dG9jb25mLmMiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJQcmludGVyIEdhZGdldCIKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSIyMDA3IE9DVCAwNiIKIApAQCAtMjM4LDcgKzI1Miw3IEBACiAJLmJDb25maWd1cmF0aW9uVmFsdWUgPQlERVZfQ09ORklHX1ZBTFVFLAogCS5pQ29uZmlndXJhdGlvbiA9CTAsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfQ09ORklHX0FUVF9PTkUgfCBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlciA9CQkxCS8qIFNlbGYtUG93ZXJlZCAqLworCS5iTWF4UG93ZXIgPQkJQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXIC8gMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGludGZfZGVzYyA9IHsKQEAgLTEyNjQsOCArMTI3OCw3IEBACiAJLyogcmVzcG9uZCB3aXRoIGRhdGEgdHJhbnNmZXIgYmVmb3JlIHN0YXR1cyBwaGFzZT8gKi8KIAlpZiAodmFsdWUgPj0gMCkgewogCQlyZXEtPmxlbmd0aCA9IHZhbHVlOwotCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdMZW5ndGgKLQkJCQkmJiAodmFsdWUgJSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0KSA9PSAwOworCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdMZW5ndGg7CiAJCXZhbHVlID0gdXNiX2VwX3F1ZXVlKGdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOwogCQlpZiAodmFsdWUgPCAwKSB7CiAJCQlEQkcoZGV2LCAiZXBfcXVldWUgLS0+ICVkXG4iLCB2YWx1ZSk7CkBAIC0xMzYwLDggKzEzNzMsOCBAQAogCiAKIAkvKiBTZXR1cCB0aGUgc3lzZnMgZmlsZXMgZm9yIHRoZSBwcmludGVyIGdhZGdldC4gKi8KLQlkZXYtPnBkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodXNiX2dhZGdldF9jbGFzcywgTlVMTCwKLQkJCQkJICBnX3ByaW50ZXJfZGV2bm8sIE5VTEwsICJnX3ByaW50ZXIiKTsKKwlkZXYtPnBkZXYgPSBkZXZpY2VfY3JlYXRlKHVzYl9nYWRnZXRfY2xhc3MsIE5VTEwsIGdfcHJpbnRlcl9kZXZubywKKwkJCQkgIE5VTEwsICJnX3ByaW50ZXIiKTsKIAlpZiAoSVNfRVJSKGRldi0+cGRldikpIHsKIAkJRVJST1IoZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2U6IGdfcHJpbnRlclxuIik7CiAJCWdvdG8gZmFpbDsKQEAgLTE0NjMsNyArMTQ3Niw2IEBACiAJaWYgKGdhZGdldC0+aXNfb3RnKSB7CiAJCW90Z19kZXNjLmJtQXR0cmlidXRlcyB8PSBVU0JfT1RHX0hOUCwKIAkJY29uZmlnX2Rlc2MuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKLQkJY29uZmlnX2Rlc2MuYk1heFBvd2VyID0gNDsKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCmluZGV4IDdjYmM3OGEuLmJjZjM3NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKaW5kZXggNzIyOGU4NS4uOGMyNmY1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKQEAgLTU3LDExICs1Nyw2IEBACiAjZGVmaW5lIHJuZGlzX2RlYnVnCQkwCiAjZW5kaWYKIAotI2RlZmluZSBEQkcoc3RyLGFyZ3MuLi4pIGRvIHsgXAotCWlmIChybmRpc19kZWJ1ZykgXAotCQlwcl9kZWJ1ZyhzdHIgLCAjIyBhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KICNkZWZpbmUgUk5ESVNfTUFYX0NPTkZJR1MJMQogCiAKQEAgLTE4Myw5ICsxNzgsOSBAQAogCWlmICghcmVzcCkgcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoYnVmX2xlbiAmJiBybmRpc19kZWJ1ZyA+IDEpIHsKLQkJREJHKCJxdWVyeSBPSUQgJTA4eCB2YWx1ZSwgbGVuICVkOlxuIiwgT0lELCBidWZfbGVuKTsKKwkJcHJfZGVidWcoInF1ZXJ5IE9JRCAlMDh4IHZhbHVlLCBsZW4gJWQ6XG4iLCBPSUQsIGJ1Zl9sZW4pOwogCQlmb3IgKGkgPSAwOyBpIDwgYnVmX2xlbjsgaSArPSAxNikgewotCQkJREJHKCIlMDNkOiAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLCBpLAorCQkJcHJfZGVidWcoIiUwM2Q6ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIGksCiAJCQkJZ2V0X3VuYWxpZ25lZF9sZTMyKCZidWZbaV0pLAogCQkJCWdldF91bmFsaWduZWRfbGUzMigmYnVmW2kgKyA0XSksCiAJCQkJZ2V0X3VuYWxpZ25lZF9sZTMyKCZidWZbaSArIDhdKSwKQEAgLTIwOSw3ICsyMDQsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1NVUFBPUlRFRF9MSVNUOgotCQlEQkcoIiVzOiBPSURfR0VOX1NVUFBPUlRFRF9MSVNUXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9TVVBQT1JURURfTElTVFxuIiwgX19mdW5jX18pOwogCQlsZW5ndGggPSBzaXplb2YgKG9pZF9zdXBwb3J0ZWRfbGlzdCk7CiAJCWNvdW50ICA9IGxlbmd0aCAvIHNpemVvZiAodTMyKTsKIAkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCkBAIC0yMTksNyArMjE0LDcgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9IQVJEV0FSRV9TVEFUVVM6Ci0JCURCRygiJXM6IE9JRF9HRU5fSEFSRFdBUkVfU1RBVFVTXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9IQVJEV0FSRV9TVEFUVVNcbiIsIF9fZnVuY19fKTsKIAkJLyogQm9ndXMgcXVlc3Rpb24hCiAJCSAqIEhhcmR3YXJlIG11c3QgYmUgcmVhZHkgdG8gcmVjZWl2ZSBoaWdoIGxldmVsIHByb3RvY29scy4KIAkJICogQlRXOgpAQCAtMjMyLDE0ICsyMjcsMTQgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9NRURJQV9TVVBQT1JURUQ6Ci0JCURCRygiJXM6IE9JRF9HRU5fTUVESUFfU1VQUE9SVEVEXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9NRURJQV9TVVBQT1JURURcbiIsIF9fZnVuY19fKTsKIAkJKm91dGJ1ZiA9IGNwdV90b19sZTMyIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLm1lZGl1bSk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX01FRElBX0lOX1VTRToKLQkJREJHKCIlczogT0lEX0dFTl9NRURJQV9JTl9VU0VcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX01FRElBX0lOX1VTRVxuIiwgX19mdW5jX18pOwogCQkvKiBvbmUgbWVkaXVtLCBvbmUgdHJhbnNwb3J0Li4uIChtYXliZSB5b3UgZG8gaXQgYmV0dGVyKSAqLwogCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaXVtKTsKIAkJcmV0dmFsID0gMDsKQEAgLTI0Nyw3ICsyNDIsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRToKLQkJREJHKCIlczogT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkVcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRVxuIiwgX19mdW5jX18pOwogCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHsKIAkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoCiAJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYtPm10dSk7CkBAIC0yNTgsNyArMjUzLDcgQEAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF9HRU5fTElOS19TUEVFRDoKIAkJaWYgKHJuZGlzX2RlYnVnID4gMSkKLQkJCURCRygiJXM6IE9JRF9HRU5fTElOS19TUEVFRFxuIiwgX19mdW5jX18pOworCQkJcHJfZGVidWcoIiVzOiBPSURfR0VOX0xJTktfU1BFRURcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaWFfc3RhdGUKIAkJCQk9PSBORElTX01FRElBX1NUQVRFX0RJU0NPTk5FQ1RFRCkKIAkJCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKQEAgLTI3MCw3ICsyNjUsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1RSQU5TTUlUX0JMT0NLX1NJWkU6Ci0JCURCRygiJXM6IE9JRF9HRU5fVFJBTlNNSVRfQkxPQ0tfU0laRVxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fVFJBTlNNSVRfQkxPQ0tfU0laRVxuIiwgX19mdW5jX18pOwogCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHsKIAkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoCiAJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYtPm10dSk7CkBAIC0yODAsNyArMjc1LDcgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9SRUNFSVZFX0JMT0NLX1NJWkU6Ci0JCURCRygiJXM6IE9JRF9HRU5fUkVDRUlWRV9CTE9DS19TSVpFXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9SRUNFSVZFX0JMT0NLX1NJWkVcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSB7CiAJCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKAogCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2LT5tdHUpOwpAQCAtMjkwLDcgKzI4NSw3IEBACiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF9HRU5fVkVORE9SX0lEOgotCQlEQkcoIiVzOiBPSURfR0VOX1ZFTkRPUl9JRFxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fVkVORE9SX0lEXG4iLCBfX2Z1bmNfXyk7CiAJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoCiAJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnZlbmRvcklEKTsKIAkJcmV0dmFsID0gMDsKQEAgLTI5OCw3ICsyOTMsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1ZFTkRPUl9ERVNDUklQVElPTjoKLQkJREJHKCIlczogT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT05cbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX1ZFTkRPUl9ERVNDUklQVElPTlxuIiwgX19mdW5jX18pOwogCQlsZW5ndGggPSBzdHJsZW4gKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0udmVuZG9yRGVzY3IpOwogCQltZW1jcHkgKG91dGJ1ZiwKIAkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0udmVuZG9yRGVzY3IsIGxlbmd0aCk7CkBAIC0zMDYsNyArMzAxLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIE9JRF9HRU5fVkVORE9SX0RSSVZFUl9WRVJTSU9OOgotCQlEQkcoIiVzOiBPSURfR0VOX1ZFTkRPUl9EUklWRVJfVkVSU0lPTlxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fVkVORE9SX0RSSVZFUl9WRVJTSU9OXG4iLCBfX2Z1bmNfXyk7CiAJCS8qIENyZWF0ZWQgYXMgTEUgKi8KIAkJKm91dGJ1ZiA9IHJuZGlzX2RyaXZlcl92ZXJzaW9uOwogCQlyZXR2YWwgPSAwOwpAQCAtMzE0LDE0ICszMDksMTQgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVI6Ci0JCURCRygiJXM6IE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVJcbiIsIF9fZnVuY19fKTsKIAkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgqcm5kaXNfcGVyX2Rldl9wYXJhbXNbY29uZmlnTnJdLmZpbHRlcik7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRToKLQkJREJHKCIlczogT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkVcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRVxuIiwgX19mdW5jX18pOwogCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihSTkRJU19NQVhfVE9UQUxfU0laRSk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwpAQCAtMzI5LDE0ICszMjQsMTQgQEAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVM6CiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBPSURfR0VOX01FRElBX0NPTk5FQ1RfU1RBVFVTXG4iLCBfX2Z1bmNfXyk7CisJCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVNcbiIsIF9fZnVuY19fKTsKIAkJKm91dGJ1ZiA9IGNwdV90b19sZTMyIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCiAJCQkJCQkubWVkaWFfc3RhdGUpOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIAogCWNhc2UgT0lEX0dFTl9QSFlTSUNBTF9NRURJVU06Ci0JCURCRygiJXM6IE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9QSFlTSUNBTF9NRURJVU1cbiIsIF9fZnVuY19fKTsKIAkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKQEAgLTM0Niw3ICszNDEsNyBAQAogCSAqIHZlcnNpb25zIGVtaXQgdW5kZWZpbmVkIFJORElTIG1lc3NhZ2VzLiBET0NVTUVOVCBBTEwgVEhFU0UhCiAJICovCiAJY2FzZSBPSURfR0VOX01BQ19PUFRJT05TOgkJLyogZnJvbSBXaW5NRSAqLwotCQlEQkcoIiVzOiBPSURfR0VOX01BQ19PUFRJT05TXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9NQUNfT1BUSU9OU1xuIiwgX19mdW5jX18pOwogCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKIAkJCSAgTkRJU19NQUNfT1BUSU9OX1JFQ0VJVkVfU0VSSUFMSVpFRAogCQkJfCBORElTX01BQ19PUFRJT05fRlVMTF9EVVBMRVgpOwpAQCAtMzU4LDcgKzM1Myw3IEBACiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1hNSVRfT0s6CiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBPSURfR0VOX1hNSVRfT0tcbiIsIF9fZnVuY19fKTsKKwkJCXByX2RlYnVnKCIlczogT0lEX0dFTl9YTUlUX09LXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0cykgewogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT50eF9wYWNrZXRzCiAJCQkJLSBzdGF0cy0+dHhfZXJyb3JzIC0gc3RhdHMtPnR4X2Ryb3BwZWQpOwpAQCAtMzY5LDcgKzM2NCw3IEBACiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1JDVl9PSzoKIAkJaWYgKHJuZGlzX2RlYnVnID4gMSkKLQkJCURCRygiJXM6IE9JRF9HRU5fUkNWX09LXG4iLCBfX2Z1bmNfXyk7CisJCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fUkNWX09LXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0cykgewogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT5yeF9wYWNrZXRzCiAJCQkJLSBzdGF0cy0+cnhfZXJyb3JzIC0gc3RhdHMtPnJ4X2Ryb3BwZWQpOwpAQCAtMzgwLDcgKzM3NSw3IEBACiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1hNSVRfRVJST1I6CiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBPSURfR0VOX1hNSVRfRVJST1JcbiIsIF9fZnVuY19fKTsKKwkJCXByX2RlYnVnKCIlczogT0lEX0dFTl9YTUlUX0VSUk9SXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0cykgewogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT50eF9lcnJvcnMpOwogCQkJcmV0dmFsID0gMDsKQEAgLTM5MCw3ICszODUsNyBAQAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9SQ1ZfRVJST1I6CiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBPSURfR0VOX1JDVl9FUlJPUlxuIiwgX19mdW5jX18pOworCQkJcHJfZGVidWcoIiVzOiBPSURfR0VOX1JDVl9FUlJPUlxuIiwgX19mdW5jX18pOwogCQlpZiAoc3RhdHMpIHsKIAkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMihzdGF0cy0+cnhfZXJyb3JzKTsKIAkJCXJldHZhbCA9IDA7CkBAIC0zOTksNyArMzk0LDcgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSOgotCQlEQkcoIiVzOiBPSURfR0VOX1JDVl9OT19CVUZGRVJcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX1JDVl9OT19CVUZGRVJcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHN0YXRzKSB7CiAJCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIoc3RhdHMtPnJ4X2Ryb3BwZWQpOwogCQkJcmV0dmFsID0gMDsKQEAgLTQxMCw3ICs0MDUsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1M6Ci0JCURCRygiJXM6IE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTU1xuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTU1xuIiwgX19mdW5jX18pOwogCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHsKIAkJCWxlbmd0aCA9IEVUSF9BTEVOOwogCQkJbWVtY3B5IChvdXRidWYsCkBAIC00MjIsNyArNDE3LDcgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUzoKLQkJREJHKCIlczogT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTU1xuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1NcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSB7CiAJCQlsZW5ndGggPSBFVEhfQUxFTjsKIAkJCW1lbWNweSAob3V0YnVmLApAQCAtNDM0LDcgKzQyOSw3IEBACiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVDoKLQkJREJHKCIlczogT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUXG4iLCBfX2Z1bmNfXyk7CiAJCS8qIE11bHRpY2FzdCBiYXNlIGFkZHJlc3Mgb25seSAqLwogCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMHhFMDAwMDAwMCk7CiAJCXJldHZhbCA9IDA7CkBAIC00NDIsMjEgKzQzNywyMSBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkU6Ci0JCURCRygiJXM6IE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRVxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRVxuIiwgX19mdW5jX18pOwogCQkvKiBNdWx0aWNhc3QgYmFzZSBhZGRyZXNzIG9ubHkgKi8KIAkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIAogCWNhc2UgT0lEXzgwMl8zX01BQ19PUFRJT05TOgotCQlEQkcoIiVzOiBPSURfODAyXzNfTUFDX09QVElPTlNcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfTUFDX09QVElPTlNcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAKIAkvKiBpZWVlODAyLjMgc3RhdGlzdGljcyBPSURzICh0YWJsZSA0LTQpICovCiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5UOgotCQlEQkcoIiVzOiBPSURfODAyXzNfUkNWX0VSUk9SX0FMSUdOTUVOVFxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5UXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0cykgewogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT5yeF9mcmFtZV9lcnJvcnMpOwogCQkJcmV0dmFsID0gMDsKQEAgLTQ2NSwxNCArNDYwLDE0IEBACiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT046Ci0JCURCRygiJXM6IE9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT05cbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfWE1JVF9PTkVfQ09MTElTSU9OXG4iLCBfX2Z1bmNfXyk7CiAJCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19YTUlUX01PUkVfQ09MTElTSU9OUzoKLQkJREJHKCIlczogT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TXG4iLCBfX2Z1bmNfXyk7CiAJCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CkBAIC01MDQsOSArNDk5LDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoYnVmX2xlbiAmJiBybmRpc19kZWJ1ZyA+IDEpIHsKLQkJREJHKCJzZXQgT0lEICUwOHggdmFsdWUsIGxlbiAlZDpcbiIsIE9JRCwgYnVmX2xlbik7CisJCXByX2RlYnVnKCJzZXQgT0lEICUwOHggdmFsdWUsIGxlbiAlZDpcbiIsIE9JRCwgYnVmX2xlbik7CiAJCWZvciAoaSA9IDA7IGkgPCBidWZfbGVuOyBpICs9IDE2KSB7Ci0JCQlEQkcoIiUwM2Q6ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIGksCisJCQlwcl9kZWJ1ZygiJTAzZDogJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwgaSwKIAkJCQlnZXRfdW5hbGlnbmVkX2xlMzIoJmJ1ZltpXSksCiAJCQkJZ2V0X3VuYWxpZ25lZF9sZTMyKCZidWZbaSArIDRdKSwKIAkJCQlnZXRfdW5hbGlnbmVkX2xlMzIoJmJ1ZltpICsgOF0pLApAQCAtNTI1LDcgKzUyMCw3IEBACiAJCSAqCU1VTFRJQ0FTVCwgQUxMX01VTFRJQ0FTVCwgQlJPQURDQVNUCiAJCSAqLwogCQkqcGFyYW1zLT5maWx0ZXIgPSAodTE2KWdldF91bmFsaWduZWRfbGUzMihidWYpOwotCQlEQkcoIiVzOiBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUiAlMDh4XG4iLAorCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSICUwOHhcbiIsCiAJCQlfX2Z1bmNfXywgKnBhcmFtcy0+ZmlsdGVyKTsKIAogCQkvKiB0aGlzIGNhbGwgaGFzIGEgc2lnbmlmaWNhbnQgc2lkZSBlZmZlY3Q6ICBpdCdzCkBAIC01NDcsNyArNTQyLDcgQEAKIAogCWNhc2UgT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUOgogCQkvKiBJIHRoaW5rIHdlIGNhbiBpZ25vcmUgdGhpcyAqLwotCQlEQkcoIiVzOiBPSURfODAyXzNfTVVMVElDQVNUX0xJU1RcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfTVVMVElDQVNUX0xJU1RcbiIsIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTYwNiw3ICs2MDEsNyBAQAogCXJuZGlzX3Jlc3BfdCAgICAgICAgICAgICpyOwogCXN0cnVjdCBybmRpc19wYXJhbXMJKnBhcmFtcyA9IHJuZGlzX3Blcl9kZXZfcGFyYW1zICsgY29uZmlnTnI7CiAKLQkvLyBEQkcoIiVzOiBPSUQgPSAlMDhYXG4iLCBfX2Z1bmNfXywgY3B1X3RvX2xlMzIoYnVmLT5PSUQpKTsKKwkvKiBwcl9kZWJ1ZygiJXM6IE9JRCA9ICUwOFhcbiIsIF9fZnVuY19fLCBjcHVfdG9fbGUzMihidWYtPk9JRCkpOyAqLwogCWlmICghcGFyYW1zLT5kZXYpCiAJCXJldHVybiAtRU5PVFNVUFA7CiAKQEAgLTY1OSwxNSArNjU0LDE1IEBACiAJQnVmT2Zmc2V0ID0gbGUzMl90b19jcHUgKGJ1Zi0+SW5mb3JtYXRpb25CdWZmZXJPZmZzZXQpOwogCiAjaWZkZWYJVkVSQk9TRV9ERUJVRwotCURCRygiJXM6IExlbmd0aDogJWRcbiIsIF9fZnVuY19fLCBCdWZMZW5ndGgpOwotCURCRygiJXM6IE9mZnNldDogJWRcbiIsIF9fZnVuY19fLCBCdWZPZmZzZXQpOwotCURCRygiJXM6IEluZm9CdWZmZXI6ICIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiJXM6IExlbmd0aDogJWRcbiIsIF9fZnVuY19fLCBCdWZMZW5ndGgpOworCXByX2RlYnVnKCIlczogT2Zmc2V0OiAlZFxuIiwgX19mdW5jX18sIEJ1Zk9mZnNldCk7CisJcHJfZGVidWcoIiVzOiBJbmZvQnVmZmVyOiAiLCBfX2Z1bmNfXyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQnVmTGVuZ3RoOyBpKyspIHsKLQkJREJHKCIlMDJ4ICIsICooKCh1OCAqKSBidWYpICsgaSArIDggKyBCdWZPZmZzZXQpKTsKKwkJcHJfZGVidWcoIiUwMnggIiwgKigoKHU4ICopIGJ1ZikgKyBpICsgOCArIEJ1Zk9mZnNldCkpOwogCX0KIAotCURCRygiXG4iKTsKKwlwcl9kZWJ1ZygiXG4iKTsKICNlbmRpZgogCiAJcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSRU1PVEVfTkRJU19TRVRfQ01QTFQpOwpAQCAtODIxLDE0ICs4MTYsMTQgQEAKIAkvKiBGb3IgVVNCOiByZXNwb25zZXMgbWF5IHRha2UgdXAgdG8gMTAgc2Vjb25kcyAqLwogCXN3aXRjaCAoTXNnVHlwZSkgewogCWNhc2UgUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0c6Ci0JCURCRygiJXM6IFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHXG4iLAorCQlwcl9kZWJ1ZygiJXM6IFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHXG4iLAogCQkJX19mdW5jX18gKTsKIAkJcGFyYW1zLT5zdGF0ZSA9IFJORElTX0lOSVRJQUxJWkVEOwogCQlyZXR1cm4gIHJuZGlzX2luaXRfcmVzcG9uc2UgKGNvbmZpZ05yLAogCQkJCQkocm5kaXNfaW5pdF9tc2dfdHlwZSAqKSBidWYpOwogCiAJY2FzZSBSRU1PVEVfTkRJU19IQUxUX01TRzoKLQkJREJHKCIlczogUkVNT1RFX05ESVNfSEFMVF9NU0dcbiIsCisJCXByX2RlYnVnKCIlczogUkVNT1RFX05ESVNfSEFMVF9NU0dcbiIsCiAJCQlfX2Z1bmNfXyApOwogCQlwYXJhbXMtPnN0YXRlID0gUk5ESVNfVU5JTklUSUFMSVpFRDsKIAkJaWYgKHBhcmFtcy0+ZGV2KSB7CkBAIC04NDYsNyArODQxLDcgQEAKIAkJCQkJKHJuZGlzX3NldF9tc2dfdHlwZSAqKSBidWYpOwogCiAJY2FzZSBSRU1PVEVfTkRJU19SRVNFVF9NU0c6Ci0JCURCRygiJXM6IFJFTU9URV9ORElTX1JFU0VUX01TR1xuIiwKKwkJcHJfZGVidWcoIiVzOiBSRU1PVEVfTkRJU19SRVNFVF9NU0dcbiIsCiAJCQlfX2Z1bmNfXyApOwogCQlyZXR1cm4gcm5kaXNfcmVzZXRfcmVzcG9uc2UgKGNvbmZpZ05yLAogCQkJCQkocm5kaXNfcmVzZXRfbXNnX3R5cGUgKikgYnVmKTsKQEAgLTg1NCw3ICs4NDksNyBAQAogCWNhc2UgUkVNT1RFX05ESVNfS0VFUEFMSVZFX01TRzoKIAkJLyogRm9yIFVTQjogaG9zdCBkb2VzIHRoaXMgZXZlcnkgNSBzZWNvbmRzICovCiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHXG4iLAorCQkJcHJfZGVidWcoIiVzOiBSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHXG4iLAogCQkJCV9fZnVuY19fICk7CiAJCXJldHVybiBybmRpc19rZWVwYWxpdmVfcmVzcG9uc2UgKGNvbmZpZ05yLAogCQkJCQkJIChybmRpc19rZWVwYWxpdmVfbXNnX3R5cGUgKikKQEAgLTg3MCw3ICs4NjUsNyBAQAogCQl7CiAJCQl1bnNpZ25lZCBpOwogCQkJZm9yIChpID0gMDsgaSA8IE1zZ0xlbmd0aDsgaSArPSAxNikgewotCQkJCURCRygiJTAzZDogIgorCQkJCXByX2RlYnVnKCIlMDNkOiAiCiAJCQkJCSIgJTAyeCAlMDJ4ICUwMnggJTAyeCIKIAkJCQkJIiAlMDJ4ICUwMnggJTAyeCAlMDJ4IgogCQkJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCkBAIC05MDUsMTggKzkwMCwxOCBAQAogCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLnVzZWQgPSAxOwogCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLnJlc3BfYXZhaWwgPSByZXNwX2F2YWlsOwogCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLnYgPSB2OwotCQkJREJHKCIlczogY29uZmlnTnIgPSAlZFxuIiwgX19mdW5jX18sIGkpOworCQkJcHJfZGVidWcoIiVzOiBjb25maWdOciA9ICVkXG4iLCBfX2Z1bmNfXywgaSk7CiAJCQlyZXR1cm4gaTsKIAkJfQogCX0KLQlEQkcoImZhaWxlZFxuIik7CisJcHJfZGVidWcoImZhaWxlZFxuIik7CiAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAogdm9pZCBybmRpc19kZXJlZ2lzdGVyIChpbnQgY29uZmlnTnIpCiB7Ci0JREJHKCIlczogXG4iLCBfX2Z1bmNfXyApOworCXByX2RlYnVnKCIlczogXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpIHJldHVybjsKIAlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnVzZWQgPSAwOwpAQCAtOTI2LDcgKzkyMSw3IEBACiAKIGludCBybmRpc19zZXRfcGFyYW1fZGV2KHU4IGNvbmZpZ05yLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgKmNkY19maWx0ZXIpCiB7Ci0JREJHKCIlczpcbiIsIF9fZnVuY19fICk7CisJcHJfZGVidWcoIiVzOlxuIiwgX19mdW5jX18pOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpIHJldHVybiAtMTsKQEAgLTkzOSw3ICs5MzQsNyBAQAogCiBpbnQgcm5kaXNfc2V0X3BhcmFtX3ZlbmRvciAodTggY29uZmlnTnIsIHUzMiB2ZW5kb3JJRCwgY29uc3QgY2hhciAqdmVuZG9yRGVzY3IpCiB7Ci0JREJHKCIlczpcbiIsIF9fZnVuY19fICk7CisJcHJfZGVidWcoIiVzOlxuIiwgX19mdW5jX18pOwogCWlmICghdmVuZG9yRGVzY3IpIHJldHVybiAtMTsKIAlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpIHJldHVybiAtMTsKIApAQCAtOTUxLDcgKzk0Niw3IEBACiAKIGludCBybmRpc19zZXRfcGFyYW1fbWVkaXVtICh1OCBjb25maWdOciwgdTMyIG1lZGl1bSwgdTMyIHNwZWVkKQogewotCURCRygiJXM6ICV1ICV1XG4iLCBfX2Z1bmNfXywgbWVkaXVtLCBzcGVlZCk7CisJcHJfZGVidWcoIiVzOiAldSAldVxuIiwgX19mdW5jX18sIG1lZGl1bSwgc3BlZWQpOwogCWlmIChjb25maWdOciA+PSBSTkRJU19NQVhfQ09ORklHUykgcmV0dXJuIC0xOwogCiAJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpdW0gPSBtZWRpdW07CkBAIC0xMTE0LDcgKzExMDksNyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlpZiAoZmxfc3BlZWQpIHAtPnNwZWVkID0gc3BlZWQ7Ci0JCQllbHNlIERCRygiJWMgaXMgbm90IHZhbGlkXG4iLCBjKTsKKwkJCWVsc2UgcHJfZGVidWcoIiVjIGlzIG5vdCB2YWxpZFxuIiwgYyk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMTU5LDEyICsxMTU0LDEyIEBACiAJCQkJCSZybmRpc19wcm9jX2ZvcHMsCiAJCQkJCSh2b2lkICopKHJuZGlzX3Blcl9kZXZfcGFyYW1zICsgaSkpKSkKIAkJewotCQkJREJHKCIlcyA6cmVtb3ZlIGVudHJpZXMiLCBfX2Z1bmNfXyk7CisJCQlwcl9kZWJ1ZygiJXMgOnJlbW92ZSBlbnRyaWVzIiwgX19mdW5jX18pOwogCQkJd2hpbGUgKGkpIHsKIAkJCQlzcHJpbnRmIChuYW1lLCBOQU1FX1RFTVBMQVRFLCAtLWkpOwogCQkJCXJlbW92ZV9wcm9jX2VudHJ5IChuYW1lLCBOVUxMKTsKIAkJCX0KLQkJCURCRygiXG4iKTsKKwkJCXByX2RlYnVnKCJcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYwppbmRleCAyOWQxM2ViLi40OGY1MWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYwpAQCAtMTY1MSw3ICsxNjUxLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmICghZHJpdmVyLT5iaW5kIHx8ICFkcml2ZXItPnNldHVwCi0JCQl8fCBkcml2ZXItPnNwZWVkICE9IFVTQl9TUEVFRF9GVUxMKSB7CisJCQl8fCBkcml2ZXItPnNwZWVkIDwgVVNCX1NQRUVEX0ZVTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGRyaXZlcjogYmluZCAlcCBzZXR1cCAlcCBzcGVlZCAlZFxuIiwKIAkJCWRyaXZlci0+YmluZCwgZHJpdmVyLT5zZXR1cCwgZHJpdmVyLT5zcGVlZCk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCmluZGV4IGIzNjk5YWYuLjM3ODc5YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKQEAgLTMwLDYgKzMwLDI1IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qCisgKiBLYnVpbGQgaXMgbm90IHZlcnkgY29vcGVyYXRpdmUgd2l0aCByZXNwZWN0IHRvIGxpbmtpbmcgc2VwYXJhdGVseQorICogY29tcGlsZWQgbGlicmFyeSBvYmplY3RzIGludG8gb25lIG1vZHVsZS4gIFNvIGZvciBub3cgd2Ugd29uJ3QgdXNlCisgKiBzZXBhcmF0ZSBjb21waWxhdGlvbiAuLi4gZW5zdXJpbmcgaW5pdC9leGl0IHNlY3Rpb25zIHdvcmsgdG8gc2hyaW5rCisgKiB0aGUgcnVudGltZSBmb290cHJpbnQsIGFuZCBnaXZpbmcgdXMgYXQgbGVhc3Qgc29tZSBwYXJ0cyBvZiB3aGF0CisgKiBhICJnY2MgLS1jb21iaW5lIC4uLiBwYXJ0MS5jIHBhcnQyLmMgcGFydDMuYyAuLi4gIiBidWlsZCB3b3VsZC4KKyAqLworI2luY2x1ZGUgImNvbXBvc2l0ZS5jIgorI2luY2x1ZGUgInVzYnN0cmluZy5jIgorI2luY2x1ZGUgImNvbmZpZy5jIgorI2luY2x1ZGUgImVwYXV0b2NvbmYuYyIKKworI2luY2x1ZGUgImZfYWNtLmMiCisjaW5jbHVkZSAiZl9vYmV4LmMiCisjaW5jbHVkZSAiZl9zZXJpYWwuYyIKKyNpbmNsdWRlICJ1X3NlcmlhbC5jIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiBUaGFua3MgdG8gTmV0Q2hpcCBUZWNobm9sb2dpZXMgZm9yIGRvbmF0aW5nIHRoaXMgcHJvZHVjdCBJRC4KICoKICogRE8gTk9UIFJFVVNFIFRIRVNFIElEcyB3aXRoIGEgcHJvdG9jb2wtaW5jb21wYXRpYmxlIGRyaXZlciEhICBFdmVyISEKQEAgLTM4LDYgKzU3LDcgQEAKICNkZWZpbmUgR1NfVkVORE9SX0lECQkJMHgwNTI1CS8qIE5ldENoaXAgKi8KICNkZWZpbmUgR1NfUFJPRFVDVF9JRAkJCTB4YTRhNgkvKiBMaW51eC1VU0IgU2VyaWFsIEdhZGdldCAqLwogI2RlZmluZSBHU19DRENfUFJPRFVDVF9JRAkJMHhhNGE3CS8qIC4uLiBhcyBDREMtQUNNICovCisjZGVmaW5lIEdTX0NEQ19PQkVYX1BST0RVQ1RfSUQJCTB4YTRhOQkvKiAuLi4gYXMgQ0RDLU9CRVggKi8KIAogLyogc3RyaW5nIElEcyBhcmUgYXNzaWduZWQgZHluYW1pY2FsbHkgKi8KIApAQCAtMTA3LDYgKzEyNywxMCBAQAogbW9kdWxlX3BhcmFtKHVzZV9hY20sIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyh1c2VfYWNtLCAiVXNlIENEQyBBQ00sIGRlZmF1bHQ9eWVzIik7CiAKK3N0YXRpYyBpbnQgdXNlX29iZXggPSBmYWxzZTsKK21vZHVsZV9wYXJhbSh1c2Vfb2JleCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9vYmV4LCAiVXNlIENEQyBPQkVYLCBkZWZhdWx0PW5vIik7CisKIHN0YXRpYyB1bnNpZ25lZCBuX3BvcnRzID0gMTsKIG1vZHVsZV9wYXJhbShuX3BvcnRzLCB1aW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mobl9wb3J0cywgIm51bWJlciBvZiBwb3J0cyB0byBjcmVhdGUsIGRlZmF1bHQ9MSIpOwpAQCAtMTIxLDYgKzE0NSw4IEBACiAJZm9yIChpID0gMDsgaSA8IG5fcG9ydHMgJiYgc3RhdHVzID09IDA7IGkrKykgewogCQlpZiAodXNlX2FjbSkKIAkJCXN0YXR1cyA9IGFjbV9iaW5kX2NvbmZpZyhjLCBpKTsKKwkJZWxzZSBpZiAodXNlX29iZXgpCisJCQlzdGF0dXMgPSBvYmV4X2JpbmRfY29uZmlnKGMsIGkpOwogCQllbHNlCiAJCQlzdGF0dXMgPSBnc2VyX2JpbmRfY29uZmlnKGMsIGkpOwogCX0KQEAgLTEzMyw3ICsxNTksNiBAQAogCS8qIC5iQ29uZmlndXJhdGlvblZhbHVlID0gZih1c2VfYWNtKSAqLwogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIAkuYm1BdHRyaWJ1dGVzCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBnc19iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKQEAgLTIzMSw2ICsyNTYsMTIgQEAKIAkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX0NPTU07CiAJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9CiAJCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19DRENfUFJPRFVDVF9JRCk7CisJfSBlbHNlIGlmICh1c2Vfb2JleCkgeworCQlzZXJpYWxfY29uZmlnX2RyaXZlci5sYWJlbCA9ICJDREMgT0JFWCBjb25maWciOworCQlzZXJpYWxfY29uZmlnX2RyaXZlci5iQ29uZmlndXJhdGlvblZhbHVlID0gMzsKKwkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX0NPTU07CisJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX0NEQ19PQkVYX1BST0RVQ1RfSUQpOwogCX0gZWxzZSB7CiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmxhYmVsID0gIkdlbmVyaWMgU2VyaWFsIGNvbmZpZyI7CiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmJDb25maWd1cmF0aW9uVmFsdWUgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKaW5kZXggMzc5MWU2Mi4uNjY5NDhiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCkBAIC01Miw3ICs1Miw3IEBACiAgKiB0aGlzIHNpbmdsZSAicGh5c2ljYWwiIGxpbmsgdG8gYmUgdXNlZCBieSBtdWx0aXBsZSB2aXJ0dWFsIGxpbmtzLikKICAqLwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIyOS1NYXktMjAwOCIKKyNkZWZpbmUgVUVUSF9fVkVSU0lPTgkiMjktTWF5LTIwMDgiCiAKIHN0cnVjdCBldGhfZGV2IHsKIAkvKiBsb2NrIGlzIGhlbGQgd2hpbGUgYWNjZXNzaW5nIHBvcnRfdXNiCkBAIC0xNzAsNyArMTcwLDcgQEAKIAlzdHJ1Y3QgZXRoX2RldgkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAogCXN0cmxjcHkocC0+ZHJpdmVyLCAiZ19ldGhlciIsIHNpemVvZiBwLT5kcml2ZXIpOwotCXN0cmxjcHkocC0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIHNpemVvZiBwLT52ZXJzaW9uKTsKKwlzdHJsY3B5KHAtPnZlcnNpb24sIFVFVEhfX1ZFUlNJT04sIHNpemVvZiBwLT52ZXJzaW9uKTsKIAlzdHJsY3B5KHAtPmZ3X3ZlcnNpb24sIGRldi0+Z2FkZ2V0LT5uYW1lLCBzaXplb2YgcC0+ZndfdmVyc2lvbik7CiAJc3RybGNweShwLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+Z2FkZ2V0LT5kZXYpLCBzaXplb2YgcC0+YnVzX2luZm8pOwogfQpAQCAtODczLDYgKzg3MywxMyBAQAogCQlzcGluX2xvY2soJmRldi0+bG9jayk7CiAJCWRldi0+cG9ydF91c2IgPSBsaW5rOwogCQlsaW5rLT5pb3BvcnQgPSBkZXY7CisJCWlmIChuZXRpZl9ydW5uaW5nKGRldi0+bmV0KSkgeworCQkJaWYgKGxpbmstPm9wZW4pCisJCQkJbGluay0+b3BlbihsaW5rKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsaW5rLT5jbG9zZSkKKwkJCQlsaW5rLT5jbG9zZShsaW5rKTsKKwkJfQogCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKIAogCQluZXRpZl9jYXJyaWVyX29uKGRldi0+bmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmgKaW5kZXggYWYzOTEwZC4uMzAwZjBlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmgKQEAgLTYyLDUgKzYyLDYgQEAKIC8qIGZ1bmN0aW9ucyBhcmUgYm91bmQgdG8gY29uZmlndXJhdGlvbnMgYnkgYSBjb25maWcgb3IgZ2FkZ2V0IGRyaXZlciAqLwogaW50IGFjbV9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IHBvcnRfbnVtKTsKIGludCBnc2VyX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggcG9ydF9udW0pOworaW50IG9iZXhfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCB1OCBwb3J0X251bSk7CiAKICNlbmRpZiAvKiBfX1VfU0VSSUFMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCmluZGV4IGFhMGJkNGYuLjM2MWQ5NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwpAQCAtNTksNiArNTksMjMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyoKKyAqIEtidWlsZCBpcyBub3QgdmVyeSBjb29wZXJhdGl2ZSB3aXRoIHJlc3BlY3QgdG8gbGlua2luZyBzZXBhcmF0ZWx5CisgKiBjb21waWxlZCBsaWJyYXJ5IG9iamVjdHMgaW50byBvbmUgbW9kdWxlLiAgU28gZm9yIG5vdyB3ZSB3b24ndCB1c2UKKyAqIHNlcGFyYXRlIGNvbXBpbGF0aW9uIC4uLiBlbnN1cmluZyBpbml0L2V4aXQgc2VjdGlvbnMgd29yayB0byBzaHJpbmsKKyAqIHRoZSBydW50aW1lIGZvb3RwcmludCwgYW5kIGdpdmluZyB1cyBhdCBsZWFzdCBzb21lIHBhcnRzIG9mIHdoYXQKKyAqIGEgImdjYyAtLWNvbWJpbmUgLi4uIHBhcnQxLmMgcGFydDIuYyBwYXJ0My5jIC4uLiAiIGJ1aWxkIHdvdWxkLgorICovCisjaW5jbHVkZSAiY29tcG9zaXRlLmMiCisjaW5jbHVkZSAidXNic3RyaW5nLmMiCisjaW5jbHVkZSAiY29uZmlnLmMiCisjaW5jbHVkZSAiZXBhdXRvY29uZi5jIgorCisjaW5jbHVkZSAiZl9zb3VyY2VzaW5rLmMiCisjaW5jbHVkZSAiZl9sb29wYmFjay5jIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiQ2luY28gZGUgTWF5byAyMDA4IgogCiBzdGF0aWMgY29uc3QgY2hhciBsb25nbmFtZVtdID0gIkdhZGdldCBaZXJvIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYwppbmRleCBiMGY4ZWQ1Li4wY2I1M2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCkBAIC0zNTgsNyArMzU4LDggQEAKIAlzdHJ1Y3QgdXNiX2J1cyAqYnVzOwogCXN0cnVjdCBtdXRleCBtdXRleDsJLyogcHJvdGVjdCBmaWxsaW5nIG9mIGJ1ZmZlciAqLwogCXNpemVfdCBjb3VudDsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZpbGxlZCBpbnRvIGJ1ZmZlciAqLwotCWNoYXIgKnBhZ2U7CisJY2hhciAqb3V0cHV0X2J1ZjsKKwlzaXplX3QgYWxsb2Nfc2l6ZTsKIH07CiAKICNkZWZpbmUgc3BlZWRfY2hhcihpbmZvMSkgKHsgY2hhciB0bXA7IFwKQEAgLTQ4OCw4ICs0ODksOCBAQAogCiAJaGNkID0gYnVzX3RvX2hjZChidWYtPmJ1cyk7CiAJZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwotCW5leHQgPSBidWYtPnBhZ2U7Ci0Jc2l6ZSA9IFBBR0VfU0laRTsKKwluZXh0ID0gYnVmLT5vdXRwdXRfYnVmOworCXNpemUgPSBidWYtPmFsbG9jX3NpemU7CiAKIAkqbmV4dCA9IDA7CiAKQEAgLTUxMCw3ICs1MTEsNyBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIHN0cmxlbihidWYtPnBhZ2UpOworCXJldHVybiBzdHJsZW4oYnVmLT5vdXRwdXRfYnVmKTsKIH0KIAogI2RlZmluZSBEQkdfU0NIRURfTElNSVQgNjQKQEAgLTUzMSw4ICs1MzIsOCBAQAogCiAJaGNkID0gYnVzX3RvX2hjZChidWYtPmJ1cyk7CiAJZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwotCW5leHQgPSBidWYtPnBhZ2U7Ci0Jc2l6ZSA9IFBBR0VfU0laRTsKKwluZXh0ID0gYnVmLT5vdXRwdXRfYnVmOworCXNpemUgPSBidWYtPmFsbG9jX3NpemU7CiAKIAl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAic2l6ZSA9ICVkXG4iLCBlaGNpLT5wZXJpb2RpY19zaXplKTsKIAlzaXplIC09IHRlbXA7CkBAIC01NjgsMTQgKzU2OSwxNiBAQAogCQkJCWZvciAodGVtcCA9IDA7IHRlbXAgPCBzZWVuX2NvdW50OyB0ZW1wKyspIHsKIAkJCQkJaWYgKHNlZW4gW3RlbXBdLnB0ciAhPSBwLnB0cikKIAkJCQkJCWNvbnRpbnVlOwotCQkJCQlpZiAocC5xaC0+cWhfbmV4dC5wdHIpCisJCQkJCWlmIChwLnFoLT5xaF9uZXh0LnB0cikgewogCQkJCQkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKIAkJCQkJCQkiIC4uLiIpOwotCQkJCQlwLnB0ciA9IE5VTEw7CisJCQkJCQlzaXplIC09IHRlbXA7CisJCQkJCQluZXh0ICs9IHRlbXA7CisJCQkJCX0KIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCS8qIHNob3cgbW9yZSBpbmZvIHRoZSBmaXJzdCB0aW1lIGFyb3VuZCAqLwotCQkJCWlmICh0ZW1wID09IHNlZW5fY291bnQgJiYgcC5wdHIpIHsKKwkJCQlpZiAodGVtcCA9PSBzZWVuX2NvdW50KSB7CiAJCQkJCXUzMglzY3JhdGNoID0gaGMzMl90b19jcHVwKGVoY2ksCiAJCQkJCQkJJnAucWgtPmh3X2luZm8xKTsKIAkJCQkJc3RydWN0IGVoY2lfcXRkCSpxdGQ7CkBAIC02NDksNyArNjUyLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCWtmcmVlIChzZWVuKTsKIAotCXJldHVybiBQQUdFX1NJWkUgLSBzaXplOworCXJldHVybiBidWYtPmFsbG9jX3NpemUgLSBzaXplOwogfQogI3VuZGVmIERCR19TQ0hFRF9MSU1JVAogCkBAIC02NjUsMTQgKzY2OCwxNCBAQAogCiAJaGNkID0gYnVzX3RvX2hjZChidWYtPmJ1cyk7CiAJZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwotCW5leHQgPSBidWYtPnBhZ2U7Ci0Jc2l6ZSA9IFBBR0VfU0laRTsKKwluZXh0ID0gYnVmLT5vdXRwdXRfYnVmOworCXNpemUgPSBidWYtPmFsbG9jX3NpemU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAogCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSB7CiAJCXNpemUgPSBzY25wcmludGYgKG5leHQsIHNpemUsCi0JCQkiYnVzICVzLCBkZXZpY2UgJXMgKGRyaXZlciAiIERSSVZFUl9WRVJTSU9OICIpXG4iCisJCQkiYnVzICVzLCBkZXZpY2UgJXNcbiIKIAkJCSIlc1xuIgogCQkJIlNVU1BFTkRFRCAobm8gcmVnaXN0ZXIgYWNjZXNzKVxuIiwKIAkJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMtPm5hbWUsCkBAIC02ODQsNyArNjg3LDcgQEAKIAkvKiBDYXBhYmlsaXR5IFJlZ2lzdGVycyAqLwogCWkgPSBIQ19WRVJTSU9OKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKIAl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAotCQkiYnVzICVzLCBkZXZpY2UgJXMgKGRyaXZlciAiIERSSVZFUl9WRVJTSU9OICIpXG4iCisJCSJidXMgJXMsIGRldmljZSAlc1xuIgogCQkiJXNcbiIKIAkJIkVIQ0kgJXguJTAyeCwgaGNkIHN0YXRlICVkXG4iLAogCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzLT5uYW1lLApAQCAtODA4LDcgKzgxMSw3IEBACiBkb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gUEFHRV9TSVpFIC0gc2l6ZTsKKwlyZXR1cm4gYnVmLT5hbGxvY19zaXplIC0gc2l6ZTsKIH0KIAogc3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3QgdXNiX2J1cyAqYnVzLApAQCAtODIyLDYgKzgyNSw3IEBACiAJCWJ1Zi0+YnVzID0gYnVzOwogCQlidWYtPmZpbGxfZnVuYyA9IGZpbGxfZnVuYzsKIAkJbXV0ZXhfaW5pdCgmYnVmLT5tdXRleCk7CisJCWJ1Zi0+YWxsb2Nfc2l6ZSA9IFBBR0VfU0laRTsKIAl9CiAKIAlyZXR1cm4gYnVmOwpAQCAtODMxLDEwICs4MzUsMTAgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghYnVmLT5wYWdlKQotCQlidWYtPnBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1Zi0+b3V0cHV0X2J1ZikKKwkJYnVmLT5vdXRwdXRfYnVmID0gKGNoYXIgKil2bWFsbG9jKGJ1Zi0+YWxsb2Nfc2l6ZSk7CiAKLQlpZiAoIWJ1Zi0+cGFnZSkgeworCWlmICghYnVmLT5vdXRwdXRfYnVmKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTg2Nyw3ICs4NzEsNyBAQAogCW11dGV4X3VubG9jaygmYnVmLT5tdXRleCk7CiAKIAlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgbGVuLCBvZmZzZXQsCi0JCQkJICAgICAgYnVmLT5wYWdlLCBidWYtPmNvdW50KTsKKwkJCQkgICAgICBidWYtPm91dHB1dF9idWYsIGJ1Zi0+Y291bnQpOwogCiBvdXQ6CiAJcmV0dXJuIHJldDsKQEAgLTg3OSw4ICs4ODMsOCBAQAogCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCWlmIChidWYpIHsKLQkJaWYgKGJ1Zi0+cGFnZSkKLQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYtPnBhZ2UpOworCQlpZiAoYnVmLT5vdXRwdXRfYnVmKQorCQkJdmZyZWUoYnVmLT5vdXRwdXRfYnVmKTsKIAkJa2ZyZWUoYnVmKTsKIAl9CiAKQEAgLTg5NSwxMCArODk5LDE0IEBACiAKIHN0YXRpYyBpbnQgZGVidWdfcGVyaW9kaWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBhbGxvY19idWZmZXIoaW5vZGUtPmlfcHJpdmF0ZSwKLQkJCQkJICBmaWxsX3BlcmlvZGljX2J1ZmZlcik7CisJc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmOworCWJ1ZiA9IGFsbG9jX2J1ZmZlcihpbm9kZS0+aV9wcml2YXRlLCBmaWxsX3BlcmlvZGljX2J1ZmZlcik7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0dXJuIGZpbGUtPnByaXZhdGVfZGF0YSA/IDAgOiAtRU5PTUVNOworCWJ1Zi0+YWxsb2Nfc2l6ZSA9IChzaXplb2Yodm9pZCAqKSA9PSA0ID8gNiA6IDgpKlBBR0VfU0laRTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBidWY7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZGVidWdfcmVnaXN0ZXJzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKaW5kZXggODQwOWUwNy4uZDM0M2FmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtNTksNyArNjAsNiBAQAogICogcHJvdmlkaW5nIGVhcmx5IGRldmljZXMgZm9yIHRob3NlIGhvc3QgY29udHJvbGxlcnMgdG8gdGFsayB0byEKICAqLwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxMCBEZWMgMjAwNCIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiRGF2aWQgQnJvd25lbGwiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgMi4wICdFbmhhbmNlZCcgSG9zdCBDb250cm9sbGVyIChFSENJKSBEcml2ZXIiCiAKQEAgLTYyMCw5ICs2MjAsOSBAQAogCiAJdGVtcCA9IEhDX1ZFUlNJT04oZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOwogCWVoY2lfaW5mbyAoZWhjaSwKLQkJIlVTQiAleC4leCBzdGFydGVkLCBFSENJICV4LiUwMngsIGRyaXZlciAlcyVzXG4iLAorCQkiVVNCICV4LiV4IHN0YXJ0ZWQsIEVIQ0kgJXguJTAyeCVzXG4iLAogCQkoKGVoY2ktPnNicm4gJiAweGYwKT4+NCksIChlaGNpLT5zYnJuICYgMHgwZiksCi0JCXRlbXAgPj4gOCwgdGVtcCAmIDB4ZmYsIERSSVZFUl9WRVJTSU9OLAorCQl0ZW1wID4+IDgsIHRlbXAgJiAweGZmLAogCQlpZ25vcmVfb2MgPyAiLCBvdmVyY3VycmVudCBpZ25vcmVkIiA6ICIiKTsKIAogCWVoY2lfd3JpdGVsKGVoY2ksIElOVFJfTUFTSywKQEAgLTcwNiw3ICs3MDYsNyBAQAogCQlwY2Rfc3RhdHVzID0gc3RhdHVzOwogCiAJCS8qIHJlc3VtZSByb290IGh1Yj8gKi8KLQkJaWYgKCEoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+Y29tbWFuZCkgJiBDTURfUlVOKSkKKwkJaWYgKCEoY21kICYgQ01EX1JVTikpCiAJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2QpOwogCiAJCXdoaWxlIChpLS0pIHsKQEAgLTcxNSw4ICs3MTUsMTEgQEAKIAogCQkJaWYgKHBzdGF0dXMgJiBQT1JUX09XTkVSKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKCEocHN0YXR1cyAmIFBPUlRfUkVTVU1FKQotCQkJCQl8fCBlaGNpLT5yZXNldF9kb25lIFtpXSAhPSAwKQorCQkJaWYgKCEodGVzdF9iaXQoaSwgJmVoY2ktPnN1c3BlbmRlZF9wb3J0cykgJiYKKwkJCQkJKChwc3RhdHVzICYgUE9SVF9SRVNVTUUpIHx8CisJCQkJCQkhKHBzdGF0dXMgJiBQT1JUX1NVU1BFTkQpKSAmJgorCQkJCQkocHN0YXR1cyAmIFBPUlRfUEUpICYmCisJCQkJCWVoY2ktPnJlc2V0X2RvbmVbaV0gPT0gMCkpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIHN0YXJ0IDIwIG1zZWMgcmVzdW1lIHNpZ25hbGluZyBmcm9tIHRoaXMgcG9ydCwKQEAgLTczMSw5ICs3MzQsOCBAQAogCiAJLyogUENJIGVycm9ycyBbNC4xNS4yLjRdICovCiAJaWYgKHVubGlrZWx5ICgoc3RhdHVzICYgU1RTX0ZBVEFMKSAhPSAwKSkgewotCQlkYmdfY21kIChlaGNpLCAiZmF0YWwiLCBlaGNpX3JlYWRsKGVoY2ksCi0JCQkJCQkgICAmZWhjaS0+cmVncy0+Y29tbWFuZCkpOwotCQlkYmdfc3RhdHVzIChlaGNpLCAiZmF0YWwiLCBzdGF0dXMpOworCQlkYmdfY21kKGVoY2ksICJmYXRhbCIsIGNtZCk7CisJCWRiZ19zdGF0dXMoZWhjaSwgImZhdGFsIiwgc3RhdHVzKTsKIAkJaWYgKHN0YXR1cyAmIFNUU19IQUxUKSB7CiAJCQllaGNpX2VyciAoZWhjaSwgImZhdGFsIGVycm9yXG4iKTsKIGRlYWQ6CkBAIC05OTQsOSArOTk2LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBEUklWRVJfSU5GTyBEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0RFU0MKLQotTU9EVUxFX0RFU0NSSVBUSU9OIChEUklWRVJfSU5GTyk7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwogCkBAIC0xMDIwLDExICsxMDIwLDYgQEAKICNkZWZpbmUJUFMzX1NZU1RFTV9CVVNfRFJJVkVSCXBzM19laGNpX2RyaXZlcgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR180NDBFUFgpICYmICFkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCi0jaW5jbHVkZSAiZWhjaS1wcGMtc29jLmMiCi0jZGVmaW5lCVBMQVRGT1JNX0RSSVZFUgkJZWhjaV9wcGNfc29jX2RyaXZlcgotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRgogI2luY2x1ZGUgImVoY2ktcHBjLW9mLmMiCiAjZGVmaW5lIE9GX1BMQVRGT1JNX0RSSVZFUgllaGNpX2hjZF9wcGNfb2ZfZHJpdmVyCkBAIC0xMDQ5LDYgKzEwNDQsMTYgQEAKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAorCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogIiBEUklWRVJfREVTQyAiXG4iLCBoY2RfbmFtZSk7CisJc2V0X2JpdChVU0JfRUhDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpOworCWlmICh0ZXN0X2JpdChVU0JfVUhDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpIHx8CisJCQl0ZXN0X2JpdChVU0JfT0hDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nISBlaGNpX2hjZCBzaG91bGQgYWx3YXlzIGJlIGxvYWRlZCIKKwkJCQkiIGJlZm9yZSB1aGNpX2hjZCBhbmQgb2hjaV9oY2QsIG5vdCBhZnRlclxuIik7CisKIAlwcl9kZWJ1ZygiJXM6IGJsb2NrIHNpemVzOiBxaCAlWmQgcXRkICVaZCBpdGQgJVpkIHNpdGQgJVpkXG4iLAogCQkgaGNkX25hbWUsCiAJCSBzaXplb2Yoc3RydWN0IGVoY2lfcWgpLCBzaXplb2Yoc3RydWN0IGVoY2lfcXRkKSwKQEAgLTEwNTYsOCArMTA2MSwxMCBAQAogCiAjaWZkZWYgREVCVUcKIAllaGNpX2RlYnVnX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImVoY2kiLCBOVUxMKTsKLQlpZiAoIWVoY2lfZGVidWdfcm9vdCkKLQkJcmV0dXJuIC1FTk9FTlQ7CisJaWYgKCFlaGNpX2RlYnVnX3Jvb3QpIHsKKwkJcmV0dmFsID0gLUVOT0VOVDsKKwkJZ290byBlcnJfZGVidWc7CisJfQogI2VuZGlmCiAKICNpZmRlZiBQTEFURk9STV9EUklWRVIKQEAgLTExMDUsNiArMTExMiw4IEBACiAJZGVidWdmc19yZW1vdmUoZWhjaV9kZWJ1Z19yb290KTsKIAllaGNpX2RlYnVnX3Jvb3QgPSBOVUxMOwogI2VuZGlmCitlcnJfZGVidWc6CisJY2xlYXJfYml0KFVTQl9FSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIG1vZHVsZV9pbml0KGVoY2lfaGNkX2luaXQpOwpAQCAtMTEyNiw2ICsxMTM1LDcgQEAKICNpZmRlZiBERUJVRwogCWRlYnVnZnNfcmVtb3ZlKGVoY2lfZGVidWdfcm9vdCk7CiAjZW5kaWYKKwljbGVhcl9iaXQoVVNCX0VIQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKTsKIH0KIG1vZHVsZV9leGl0KGVoY2lfaGNkX2NsZWFudXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKaW5kZXggNzQwODM1Yi4uMjE4Zjk2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwpAQCAtMjM2LDEwICsyMzYsOCBAQAogCQl0ZW1wID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW2ldKTsKIAkJdGVtcCAmPSB+KFBPUlRfUldDX0JJVFMgfCBQT1JUX1dBS0VfQklUUyk7CiAJCWlmICh0ZXN0X2JpdChpLCAmZWhjaS0+YnVzX3N1c3BlbmRlZCkgJiYKLQkJCQkodGVtcCAmIFBPUlRfU1VTUEVORCkpIHsKLQkJCWVoY2ktPnJlc2V0X2RvbmUgW2ldID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMgKDIwKTsKKwkJCQkodGVtcCAmIFBPUlRfU1VTUEVORCkpCiAJCQl0ZW1wIHw9IFBPUlRfUkVTVU1FOwotCQl9CiAJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAsICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOwogCX0KIAlpID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOwpAQCAtNDgyLDEwICs0ODAsOSBAQAogCQkgKiBjb250cm9sbGVyIGJ5IHRoZSB1c2VyLgogCQkgKi8KIAotCQlpZiAoKHRlbXAgJiBtYXNrKSAhPSAwCi0JCQkJfHwgKCh0ZW1wICYgUE9SVF9SRVNVTUUpICE9IDAKLQkJCQkJJiYgdGltZV9hZnRlcl9lcShqaWZmaWVzLAotCQkJCQkJZWhjaS0+cmVzZXRfZG9uZVtpXSkpKSB7CisJCWlmICgodGVtcCAmIG1hc2spICE9IDAgfHwgdGVzdF9iaXQoaSwgJmVoY2ktPnBvcnRfY19zdXNwZW5kKQorCQkJCXx8IChlaGNpLT5yZXNldF9kb25lW2ldICYmIHRpbWVfYWZ0ZXJfZXEoCisJCQkJCWppZmZpZXMsIGVoY2ktPnJlc2V0X2RvbmVbaV0pKSkgewogCQkJaWYgKGkgPCA3KQogCQkJICAgIGJ1ZiBbMF0gfD0gMSA8PCAoaSArIDEpOwogCQkJZWxzZQpAQCAtNjg4LDYgKzY4NSw3IEBACiAJCQkvKiByZXN1bWUgY29tcGxldGVkPyAqLwogCQkJZWxzZSBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLAogCQkJCQllaGNpLT5yZXNldF9kb25lW3dJbmRleF0pKSB7CisJCQkJY2xlYXJfYml0KHdJbmRleCwgJmVoY2ktPnN1c3BlbmRlZF9wb3J0cyk7CiAJCQkJc2V0X2JpdCh3SW5kZXgsICZlaGNpLT5wb3J0X2Nfc3VzcGVuZCk7CiAJCQkJZWhjaS0+cmVzZXRfZG9uZVt3SW5kZXhdID0gMDsKIApAQCAtNzM0LDYgKzczMiw5IEBACiAJCQkJCWVoY2lfcmVhZGwoZWhjaSwgc3RhdHVzX3JlZykpOwogCQl9CiAKKwkJaWYgKCEodGVtcCAmIChQT1JUX1JFU1VNRXxQT1JUX1JFU0VUKSkpCisJCQllaGNpLT5yZXNldF9kb25lW3dJbmRleF0gPSAwOworCiAJCS8qIHRyYW5zZmVyIGRlZGljYXRlZCBwb3J0cyB0byB0aGUgY29tcGFuaW9uIGhjICovCiAJCWlmICgodGVtcCAmIFBPUlRfQ09OTkVDVCkgJiYKIAkJCQl0ZXN0X2JpdCh3SW5kZXgsICZlaGNpLT5jb21wYW5pb25fcG9ydHMpKSB7CkBAIC03NTcsOCArNzU4LDE3IEBACiAJCX0KIAkJaWYgKHRlbXAgJiBQT1JUX1BFKQogCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEU7Ci0JCWlmICh0ZW1wICYgKFBPUlRfU1VTUEVORHxQT1JUX1JFU1VNRSkpCisKKwkJLyogbWF5YmUgdGhlIHBvcnQgd2FzIHVuc3VzcGVuZGVkIHdpdGhvdXQgb3VyIGtub3dsZWRnZSAqLworCQlpZiAodGVtcCAmIChQT1JUX1NVU1BFTkR8UE9SVF9SRVNVTUUpKSB7CiAJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ7CisJCX0gZWxzZSBpZiAodGVzdF9iaXQod0luZGV4LCAmZWhjaS0+c3VzcGVuZGVkX3BvcnRzKSkgeworCQkJY2xlYXJfYml0KHdJbmRleCwgJmVoY2ktPnN1c3BlbmRlZF9wb3J0cyk7CisJCQllaGNpLT5yZXNldF9kb25lW3dJbmRleF0gPSAwOworCQkJaWYgKHRlbXAgJiBQT1JUX1BFKQorCQkJCXNldF9iaXQod0luZGV4LCAmZWhjaS0+cG9ydF9jX3N1c3BlbmQpOworCQl9CisKIAkJaWYgKHRlbXAgJiBQT1JUX09DKQogCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9PVkVSX0NVUlJFTlQ7CiAJCWlmICh0ZW1wICYgUE9SVF9SRVNFVCkKQEAgLTgwMyw2ICs4MTMsNyBAQAogCQkJCQl8fCAodGVtcCAmIFBPUlRfUkVTRVQpICE9IDApCiAJCQkJZ290byBlcnJvcjsKIAkJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAgfCBQT1JUX1NVU1BFTkQsIHN0YXR1c19yZWcpOworCQkJc2V0X2JpdCh3SW5kZXgsICZlaGNpLT5zdXNwZW5kZWRfcG9ydHMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKIAkJCWlmIChIQ1NfUFBDIChlaGNpLT5oY3NfcGFyYW1zKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wcGMtc29jLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcHBjLXNvYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mjk1OTBlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wcGMtc29jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotLyoKLSAqIEVIQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNi0yMDA3IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcKLSAqCi0gKiBCdXMgR2x1ZSBmb3IgUFBDIE9uLUNoaXAgRUhDSSBkcml2ZXIKLSAqIFRlc3RlZCBvbiBBTUNDIDQ0MEVQeAotICoKLSAqIEJhc2VkIG9uICJlaGNpLWF1MXh4eC5jIiBieSBLLkJvZ2UgPGthcnN0ZW4uYm9nZUBhbWQuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotZXh0ZXJuIGludCB1c2JfZGlzYWJsZWQodm9pZCk7Ci0KLS8qIGNhbGxlZCBkdXJpbmcgcHJvYmUoKSBhZnRlciBjaGlwIHJlc2V0IGNvbXBsZXRlcyAqLwotc3RhdGljIGludCBlaGNpX3BwY19zb2Nfc2V0dXAoc3RydWN0IHVzYl9oY2QgKmhjZCkKLXsKLQlzdHJ1Y3QgZWhjaV9oY2QJKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOwotCWludAkJcmV0dmFsOwotCi0JcmV0dmFsID0gZWhjaV9oYWx0KGVoY2kpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR2YWwgPSBlaGNpX2luaXQoaGNkKTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JZWhjaS0+c2JybiA9IDB4MjA7Ci0JcmV0dXJuIGVoY2lfcmVzZXQoZWhjaSk7Ci19Ci0KLS8qKgotICogdXNiX2VoY2lfcHBjX3NvY19wcm9iZSAtIGluaXRpYWxpemUgUFBDLVNvQy1iYXNlZCBIQ0RzCi0gKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKLSAqCi0gKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAotICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKLSAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KLSAqCi0gKi8KLWludCB1c2JfZWhjaV9wcGNfc29jX3Byb2JlKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKLQkJCSAgIHN0cnVjdCB1c2JfaGNkICoqaGNkX291dCwKLQkJCSAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0dmFsOwotCXN0cnVjdCB1c2JfaGNkICpoY2Q7Ci0Jc3RydWN0IGVoY2lfaGNkICplaGNpOwotCi0JaWYgKGRldi0+cmVzb3VyY2VbMV0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9JUlEpIHsKLQkJcHJfZGVidWcoInJlc291cmNlWzFdIGlzIG5vdCBJT1JFU09VUkNFX0lSUSIpOwotCQlyZXR2YWwgPSAtRU5PTUVNOwotCX0KLQloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZkZXYtPmRldiwgIlBQQy1TT0MgRUhDSSIpOwotCWlmICghaGNkKQotCQlyZXR1cm4gLUVOT01FTTsKLQloY2QtPnJzcmNfc3RhcnQgPSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OwotCWhjZC0+cnNyY19sZW4gPSBkZXYtPnJlc291cmNlWzBdLmVuZCAtIGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxOwotCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKLQkJcHJfZGVidWcoInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWQiKTsKLQkJcmV0dmFsID0gLUVCVVNZOwotCQlnb3RvIGVycjE7Ci0JfQotCi0JaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwotCWlmICghaGNkLT5yZWdzKSB7Ci0JCXByX2RlYnVnKCJpb3JlbWFwIGZhaWxlZCIpOwotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JZWhjaSA9IGhjZF90b19laGNpKGhjZCk7Ci0JZWhjaS0+YmlnX2VuZGlhbl9tbWlvID0gMTsKLQllaGNpLT5iaWdfZW5kaWFuX2Rlc2MgPSAxOwotCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3M7Ci0JZWhjaS0+cmVncyA9IGhjZC0+cmVncyArIEhDX0xFTkdUSChlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7Ci0KLQkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KLQllaGNpLT5oY3NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR180NDBFUFgpCi0JLyoKLQkgKiA0NDBFUHggRXJyYXRhIFVTQkhfMwotCSAqIEZpeDogRW5hYmxlIEJyZWFrIE1lbW9yeSBUcmFuc2ZlciAoQk1UKSBpbiBJTlNOUkVHMwotCSAqLwotCW91dF9iZTMyKCh2b2lkICopKCh1bG9uZykoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpICsgMHg4YyksICgxIDw8IDApKTsKLQllaGNpX2RiZyhlaGNpLCAiQnJlYWsgTWVtb3J5IFRyYW5zZmVyIChCTVQpIGhhcyBiZWVkIGVuYWJsZWQhXG4iKTsKLSNlbmRpZgotCi0JcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBJUlFGX0RJU0FCTEVEKTsKLQlpZiAocmV0dmFsID09IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlpb3VubWFwKGhjZC0+cmVncyk7Ci1lcnIyOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwotZXJyMToKLQl1c2JfcHV0X2hjZChoY2QpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCi0vKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KLQotLyoqCi0gKiB1c2JfZWhjaV9oY2RfcHBjX3NvY19yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBQUEMtU29DLWJhc2VkIEhDRHMKLSAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAotICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCi0gKgotICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfZWhjaV9oY2RfcHBjX3NvY19wcm9iZSgpLCBmaXJzdCBpbnZva2luZwotICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKLSAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCi0gKgotICovCi12b2lkIHVzYl9laGNpX3BwY19zb2NfcmVtb3ZlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQl1c2JfcmVtb3ZlX2hjZChoY2QpOwotCWlvdW5tYXAoaGNkLT5yZWdzKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKLQl1c2JfcHV0X2hjZChoY2QpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBlaGNpX3BwY19zb2NfaGNfZHJpdmVyID0gewotCS5kZXNjcmlwdGlvbiA9IGhjZF9uYW1lLAotCS5wcm9kdWN0X2Rlc2MgPSAiUFBDLVNPQyBFSENJIiwKLQkuaGNkX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWhjaV9oY2QpLAotCi0JLyoKLQkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKLQkgKi8KLQkuaXJxID0gZWhjaV9pcnEsCi0JLmZsYWdzID0gSENEX01FTU9SWSB8IEhDRF9VU0IyLAotCi0JLyoKLQkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucwotCSAqLwotCS5yZXNldCA9IGVoY2lfcHBjX3NvY19zZXR1cCwKLQkuc3RhcnQgPSBlaGNpX3J1biwKLQkuc3RvcCA9IGVoY2lfc3RvcCwKLQkuc2h1dGRvd24gPSBlaGNpX3NodXRkb3duLAotCi0JLyoKLQkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcwotCSAqLwotCS51cmJfZW5xdWV1ZSA9IGVoY2lfdXJiX2VucXVldWUsCi0JLnVyYl9kZXF1ZXVlID0gZWhjaV91cmJfZGVxdWV1ZSwKLQkuZW5kcG9pbnRfZGlzYWJsZSA9IGVoY2lfZW5kcG9pbnRfZGlzYWJsZSwKLQotCS8qCi0JICogc2NoZWR1bGluZyBzdXBwb3J0Ci0JICovCi0JLmdldF9mcmFtZV9udW1iZXIgPSBlaGNpX2dldF9mcmFtZSwKLQotCS8qCi0JICogcm9vdCBodWIgc3VwcG9ydAotCSAqLwotCS5odWJfc3RhdHVzX2RhdGEgPSBlaGNpX2h1Yl9zdGF0dXNfZGF0YSwKLQkuaHViX2NvbnRyb2wgPSBlaGNpX2h1Yl9jb250cm9sLAotCS5idXNfc3VzcGVuZCA9IGVoY2lfYnVzX3N1c3BlbmQsCi0JLmJ1c19yZXN1bWUgPSBlaGNpX2J1c19yZXN1bWUsCi0JLnJlbGlucXVpc2hfcG9ydCA9IGVoY2lfcmVsaW5xdWlzaF9wb3J0LAotCS5wb3J0X2hhbmRlZF9vdmVyID0gZWhjaV9wb3J0X2hhbmRlZF9vdmVyLAotfTsKLQotc3RhdGljIGludCBlaGNpX2hjZF9wcGNfc29jX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBOVUxMOwotCWludCByZXQ7Ci0KLQlwcl9kZWJ1ZygiSW4gZWhjaV9oY2RfcHBjX3NvY19kcnZfcHJvYmVcbiIpOwotCi0JaWYgKHVzYl9kaXNhYmxlZCgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIEZJWE1FIHdlIG9ubHkgd2FudCBvbmUgb25lIHByb2JlKCkgbm90IHR3byAqLwotCXJldCA9IHVzYl9laGNpX3BwY19zb2NfcHJvYmUoJmVoY2lfcHBjX3NvY19oY19kcml2ZXIsICZoY2QsIHBkZXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZWhjaV9oY2RfcHBjX3NvY19kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JLyogRklYTUUgd2Ugb25seSB3YW50IG9uZSBvbmUgcmVtb3ZlKCkgbm90IHR3byAqLwotCXVzYl9laGNpX3BwY19zb2NfcmVtb3ZlKGhjZCwgcGRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLU1PRFVMRV9BTElBUygicGxhdGZvcm06cHBjLXNvYy1laGNpIik7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlaGNpX3BwY19zb2NfZHJpdmVyID0gewotCS5wcm9iZSA9IGVoY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlLAotCS5yZW1vdmUgPSBlaGNpX2hjZF9wcGNfc29jX2Rydl9yZW1vdmUsCi0JLnNodXRkb3duID0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJwcGMtc29jLWVoY2kiLAotCX0KLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IGI2OTdhMTMuLmIxMTc5OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC05OSw2ICs5OSw4IEBACiAJCQlvd25lZCBieSB0aGUgY29tcGFuaW9uIGR1cmluZyBhIGJ1cyBzdXNwZW5kICovCiAJdW5zaWduZWQgbG9uZwkJcG9ydF9jX3N1c3BlbmQ7CQkvKiB3aGljaCBwb3J0cyBoYXZlCiAJCQl0aGUgY2hhbmdlLXN1c3BlbmQgZmVhdHVyZSB0dXJuZWQgb24gKi8KKwl1bnNpZ25lZCBsb25nCQlzdXNwZW5kZWRfcG9ydHM7CS8qIHdoaWNoIHBvcnRzIGFyZQorCQkJc3VzcGVuZGVkICovCiAKIAkvKiBwZXItSEMgbWVtb3J5IHBvb2xzIChjb3VsZCBiZSBwZXItYnVzLCBidXQgLi4uKSAqLwogCXN0cnVjdCBkbWFfcG9vbAkJKnFoX3Bvb2w7CS8qIHFoIHBlciBhY3RpdmUgdXJiICovCkBAIC0xODEsMTQgKzE4MywxNiBAQAogCSAqIHRoZSBhc3luYyByaW5nOyBqdXN0IHRoZSBJL08gd2F0Y2hkb2cuICBOb3RlIHRoYXQgaWYgYQogCSAqIFNIUklOSyB3ZXJlIHBlbmRpbmcsIE9GRiB3b3VsZCBuZXZlciBiZSByZXF1ZXN0ZWQuCiAJICovCi0JaWYgKHRpbWVyX3BlbmRpbmcoJmVoY2ktPndhdGNoZG9nKQotCQkJJiYgKChCSVQoVElNRVJfQVNZTkNfU0hSSU5LKSB8IEJJVChUSU1FUl9BU1lOQ19PRkYpKQotCQkJCSYgZWhjaS0+YWN0aW9ucykpCi0JCXJldHVybjsKKwllbnVtIGVoY2lfdGltZXJfYWN0aW9uIG9sZGFjdGlvbnMgPSBlaGNpLT5hY3Rpb25zOwogCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0IChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKSkgewogCQl1bnNpZ25lZCBsb25nIHQ7CiAKKwkJaWYgKHRpbWVyX3BlbmRpbmcoJmVoY2ktPndhdGNoZG9nKQorCQkJJiYgKChCSVQoVElNRVJfQVNZTkNfU0hSSU5LKSB8IEJJVChUSU1FUl9BU1lOQ19PRkYpKQorCQkJCSYgb2xkYWN0aW9ucykpCisJCQlyZXR1cm47CisKIAkJc3dpdGNoIChhY3Rpb24pIHsKIAkJY2FzZSBUSU1FUl9JT19XQVRDSERPRzoKIAkJCXQgPSBFSENJX0lPX0pJRkZJRVM7CkBAIC0yMDQsNyArMjA4LDcgQEAKIAkJCXQgPSBESVZfUk9VTkRfVVAoRUhDSV9TSFJJTktfRlJBTUVTICogSFosIDEwMDApICsgMTsKIAkJCWJyZWFrOwogCQl9Ci0JCW1vZF90aW1lcigmZWhjaS0+d2F0Y2hkb2csIHQgKyBqaWZmaWVzKTsKKwkJbW9kX3RpbWVyKCZlaGNpLT53YXRjaGRvZywgcm91bmRfamlmZmllcyh0ICsgamlmZmllcykpOwogCX0KIH0KIApAQCAtNjA0LDE2ICs2MDgsNyBAQAogLyoKICAqIEJpZy1lbmRpYW4gcmVhZC93cml0ZSBmdW5jdGlvbnMgYXJlIGFyY2gtc3BlY2lmaWMuCiAgKiBPdGhlciBhcmNoZXMgY2FuIGJlIGFkZGVkIGlmL3doZW4gdGhleSdyZSBuZWVkZWQuCi0gKgotICogUkVWSVNJVDogYXJjaC9wb3dlcnBjIG5vdyBoYXMgcmVhZGwvd3JpdGVsX2JlLCBzbyB0aGUKLSAqIGRlZmluaXRpb24gYmVsb3cgY2FuIGRpZSBvbmNlIHRoZSA0eHggc3VwcG9ydCBpcwotICogZmluYWxseSBwb3J0ZWQgb3Zlci4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BQQykgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKLSNkZWZpbmUgcmVhZGxfYmUoYWRkcikJCWluX2JlMzIoKF9fZm9yY2UgdW5zaWduZWQgKilhZGRyKQotI2RlZmluZSB3cml0ZWxfYmUodmFsLCBhZGRyKQlvdXRfYmUzMigoX19mb3JjZSB1bnNpZ25lZCAqKWFkZHIsIHZhbCkKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfQVJNKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX0lYUDRYWCkKICNkZWZpbmUgcmVhZGxfYmUoYWRkcikJCV9fcmF3X3JlYWRsKChfX2ZvcmNlIHVuc2lnbmVkICopYWRkcikKICNkZWZpbmUgd3JpdGVsX2JlKHZhbCwgYWRkcikJX19yYXdfd3JpdGVsKHZhbCwgKF9fZm9yY2UgdW5zaWduZWQgKilhZGRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCmluZGV4IGNlMWNhMGIuLjRkZGEzMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKQEAgLTE1NjIsMTEgKzE1NjIsMTIgQEAKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCXN0cnVjdCBpc3AxMTZ4ICppc3AxMTZ4OwotCXN0cnVjdCByZXNvdXJjZSAqYWRkciwgKmRhdGE7CisJc3RydWN0IHJlc291cmNlICphZGRyLCAqZGF0YSwgKmlyZXM7CiAJdm9pZCBfX2lvbWVtICphZGRyX3JlZzsKIAl2b2lkIF9faW9tZW0gKmRhdGFfcmVnOwogCWludCBpcnE7CiAJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAogCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzIDwgMykgewogCQlyZXQgPSAtRU5PREVWOwpAQCAtMTU3NSwxMiArMTU3NiwxNiBAQAogCiAJZGF0YSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJYWRkciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Ci0JaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIWFkZHIgfHwgIWRhdGEgfHwgaXJxIDwgMCkgeworCWlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCisJaWYgKCFhZGRyIHx8ICFkYXRhIHx8ICFpcmVzKSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyMTsKIAl9CiAKKwlpcnEgPSBpcmVzLT5zdGFydDsKKwlpcnFmbGFncyA9IGlyZXMtPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0s7CisKIAlpZiAocGRldi0+ZGV2LmRtYV9tYXNrKSB7CiAJCURCRygiRE1BIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTYzNCw3ICsxNjM5LDcgQEAKIAkJZ290byBlcnI2OwogCX0KIAotCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEKTsKKwlyZXQgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgaXJxZmxhZ3MgfCBJUlFGX0RJU0FCTEVEKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKaW5kZXggMDUxZWY3Yi4uYWY4NDlmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCSAqIGFuZCByZWFkaW5nIGJhY2sgYW5kIGNoZWNraW5nIHRoZSBjb250ZW50cyBhcmUgc2FtZSBvciBub3QKIAkgKi8KIAlpZiAocmVnX2RhdGEgIT0gMHhGQUNFKSB7Ci0JCWVycigic2NyYXRjaCByZWdpc3RlciBtaXNtYXRjaCAleCIsIHJlZ19kYXRhKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJzY3JhdGNoIHJlZ2lzdGVyIG1pc21hdGNoICV4XG4iLCByZWdfZGF0YSk7CiAJCWdvdG8gY2xlYW47CiAJfQogCkBAIC0yMzIsOSArMjMyLDEwIEBACiAJaGNkID0gaXNwMTc2MF9yZWdpc3RlcihwY2lfbWVtX3BoeTAsIGxlbmd0aCwgZGV2LT5pcnEsCiAJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgJmRldi0+ZGV2LCBkZXZfbmFtZSgmZGV2LT5kZXYpLAogCQlkZXZmbGFncyk7Ci0JcGNpX3NldF9kcnZkYXRhKGRldiwgaGNkKTsKLQlpZiAoIWhjZCkKKwlpZiAoIUlTX0VSUihoY2QpKSB7CisJCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGhjZCk7CiAJCXJldHVybiAwOworCX0KIGNsZWFuOgogCXN0YXR1cyA9IC1FTk9ERVY7CiAJaW91bm1hcChpb2Jhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCmluZGV4IDdjZWYxZDIuLmQzMjY5NjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCkBAIC02NDksNyArNjQ5LDcgQEAKIAlvaGNpX2RiZ19zdyAob2hjaSwgJm5leHQsICZzaXplLAogCQkiYnVzICVzLCBkZXZpY2UgJXNcbiIKIAkJIiVzXG4iCi0JCSIlcyB2ZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwKKwkJIiVzXG4iLAogCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzLT5uYW1lLAogCQlkZXZfbmFtZShoY2QtPnNlbGYuY29udHJvbGxlciksCiAJCWhjZC0+cHJvZHVjdF9kZXNjLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IDg5OTAxOTYuLjg2NDdkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKIAogI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjIwMDYgQXVndXN0IDA0IgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJSb21hbiBXZWlzc2dhZXJiZXIsIERhdmlkIEJyb3duZWxsIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIDEuMSAnT3BlbicgSG9zdCBDb250cm9sbGVyIChPSENJKSBEcml2ZXIiCiAKQEAgLTk4NCwxMCArOTgzLDggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBEUklWRVJfSU5GTyBEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0RFU0MKLQogTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9JTkZPKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwogCiAjaWZkZWYgQ09ORklHX1BDSQpAQCAtMTA5NSw5ICsxMDkyLDEwIEBACiAJaWYgKHVzYl9kaXNhYmxlZCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX0lORk8gIlxuIiwgaGNkX25hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIERSSVZFUl9ERVNDICJcbiIsIGhjZF9uYW1lKTsKIAlwcl9kZWJ1ZyAoIiVzOiBibG9jayBzaXplczogZWQgJVpkIHRkICVaZFxuIiwgaGNkX25hbWUsCiAJCXNpemVvZiAoc3RydWN0IGVkKSwgc2l6ZW9mIChzdHJ1Y3QgdGQpKTsKKwlzZXRfYml0KFVTQl9PSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiAKICNpZmRlZiBERUJVRwogCW9oY2lfZGVidWdfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigib2hjaSIsIE5VTEwpOwpAQCAtMTE4NCw2ICsxMTgyLDcgQEAKICBlcnJvcl9kZWJ1ZzoKICNlbmRpZgogCisJY2xlYXJfYml0KFVTQl9PSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIG1vZHVsZV9pbml0KG9oY2lfaGNkX21vZF9pbml0KTsKQEAgLTEyMTQsNiArMTIxMyw3IEBACiAjaWZkZWYgREVCVUcKIAlkZWJ1Z2ZzX3JlbW92ZShvaGNpX2RlYnVnX3Jvb3QpOwogI2VuZGlmCisJY2xlYXJfYml0KFVTQl9PSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiB9CiBtb2R1bGVfZXhpdChvaGNpX2hjZF9tb2RfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYwppbmRleCA3ZWE5YTdiLi4zMmJiY2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCkBAIC0zNTksMjEgKzM1OSwyNCBAQAogCiAvKiBDYXJyeSBvdXQgcG9sbGluZy0sIGF1dG9zdG9wLSwgYW5kIGF1dG9yZXN1bWUtcmVsYXRlZCBzdGF0ZSBjaGFuZ2VzICovCiBzdGF0aWMgaW50IG9oY2lfcm9vdF9odWJfc3RhdGVfY2hhbmdlcyhzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGludCBjaGFuZ2VkLAotCQlpbnQgYW55X2Nvbm5lY3RlZCkKKwkJaW50IGFueV9jb25uZWN0ZWQsIGludCByaHNjX3N0YXR1cykKIHsKIAlpbnQJcG9sbF9yaCA9IDE7Ci0JaW50CXJoc2M7CisJaW50CXJoc2NfZW5hYmxlOwogCi0JcmhzYyA9IG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpICYgT0hDSV9JTlRSX1JIU0M7CisJLyogU29tZSBicm9rZW4gY29udHJvbGxlcnMgbmV2ZXIgdHVybiBvZmYgUkhDUyBpbiB0aGUgaW50ZXJydXB0CisJICogc3RhdHVzIHJlZ2lzdGVyLiAgRm9yIHRoZWlyIHNha2Ugd2Ugd29uJ3QgcmUtZW5hYmxlIFJIU0MKKwkgKiBpbnRlcnJ1cHRzIGlmIHRoZSBpbnRlcnJ1cHQgYml0IGlzIGFscmVhZHkgYWN0aXZlLgorCSAqLworCXJoc2NfZW5hYmxlID0gb2hjaV9yZWFkbChvaGNpLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSkgJgorCQkJT0hDSV9JTlRSX1JIU0M7CisKIAlzd2l0Y2ggKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfSENGUykgewotCiAJY2FzZSBPSENJX1VTQl9PUEVSOgotCQkvKiBJZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywgZW5hYmxlIHN0YXR1cy1jaGFuZ2UKLQkJICogaW50ZXJydXB0cy4KLQkJICovCi0JCWlmICghcmhzYyAmJiAhY2hhbmdlZCkgewotCQkJcmhzYyA9IE9IQ0lfSU5UUl9SSFNDOwotCQkJb2hjaV93cml0ZWwob2hjaSwgcmhzYywgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCQkvKiBJZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywgZW5hYmxlIFJIU0MgaW50ZXJydXB0cy4gKi8KKwkJaWYgKCFyaHNjX2VuYWJsZSAmJiAhcmhzY19zdGF0dXMgJiYgIWNoYW5nZWQpIHsKKwkJCXJoc2NfZW5hYmxlID0gT0hDSV9JTlRSX1JIU0M7CisJCQlvaGNpX3dyaXRlbChvaGNpLCByaHNjX2VuYWJsZSwgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOwogCQl9CiAKIAkJLyogS2VlcCBvbiBwb2xsaW5nIHVudGlsIHdlIGtub3cgYSBkZXZpY2UgaXMgY29ubmVjdGVkCkBAIC0zODMsNyArMzg2LDcgQEAKIAkJCWlmIChhbnlfY29ubmVjdGVkIHx8CiAJCQkJCSFkZXZpY2VfbWF5X3dha2V1cCgmb2hjaV90b19oY2Qob2hjaSkKIAkJCQkJCS0+c2VsZi5yb290X2h1Yi0+ZGV2KSkgewotCQkJCWlmIChyaHNjKQorCQkJCWlmIChyaHNjX2VuYWJsZSkKIAkJCQkJcG9sbF9yaCA9IDA7CiAJCQl9IGVsc2UgewogCQkJCW9oY2ktPmF1dG9zdG9wID0gMTsKQEAgLTM5NiwzNCArMzk5LDQ1IEBACiAJCQkJb2hjaS0+YXV0b3N0b3AgPSAwOwogCQkJCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsKIAkJCQkJCVNUQVRFQ0hBTkdFX0RFTEFZOwotCQkJfSBlbHNlIGlmIChyaHNjICYmIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywKKwkJCX0gZWxzZSBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLAogCQkJCQkJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkKIAkJCQkJJiYgIW9oY2ktPmVkX3JtX2xpc3QKIAkJCQkJJiYgIShvaGNpLT5oY19jb250cm9sICYKIAkJCQkJCU9IQ0lfU0NIRURfRU5BQkxFUykpIHsKIAkJCQlvaGNpX3JoX3N1c3BlbmQob2hjaSwgMSk7Ci0JCQkJcG9sbF9yaCA9IDA7CisJCQkJaWYgKHJoc2NfZW5hYmxlKQorCQkJCQlwb2xsX3JoID0gMDsKIAkJCX0KIAkJfQogCQlicmVhazsKIAotCS8qIGlmIHRoZXJlIGlzIGEgcG9ydCBjaGFuZ2UsIGF1dG9zdGFydCBvciBhc2sgdG8gYmUgcmVzdW1lZCAqLwogCWNhc2UgT0hDSV9VU0JfU1VTUEVORDoKIAljYXNlIE9IQ0lfVVNCX1JFU1VNRToKKwkJLyogaWYgdGhlcmUgaXMgYSBwb3J0IGNoYW5nZSwgYXV0b3N0YXJ0IG9yIGFzayB0byBiZSByZXN1bWVkICovCiAJCWlmIChjaGFuZ2VkKSB7CiAJCQlpZiAob2hjaS0+YXV0b3N0b3ApCiAJCQkJb2hjaV9yaF9yZXN1bWUob2hjaSk7CiAJCQllbHNlCiAJCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIob2hjaV90b19oY2Qob2hjaSkpOwotCQl9IGVsc2UgewotCQkJaWYgKCFyaHNjICYmIChvaGNpLT5hdXRvc3RvcCB8fAotCQkJCQlvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yi0+Ci0JCQkJCQlkb19yZW1vdGVfd2FrZXVwKSkKLQkJCQlvaGNpX3dyaXRlbChvaGNpLCBPSENJX0lOVFJfUkhTQywKLQkJCQkJCSZvaGNpLT5yZWdzLT5pbnRyZW5hYmxlKTsKIAotCQkJLyogZXZlcnl0aGluZyBpcyBpZGxlLCBubyBuZWVkIGZvciBwb2xsaW5nICovCisJCS8qIElmIHJlbW90ZSB3YWtldXAgaXMgZGlzYWJsZWQsIHN0b3AgcG9sbGluZyAqLworCQl9IGVsc2UgaWYgKCFvaGNpLT5hdXRvc3RvcCAmJgorCQkJCSFvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yi0+CisJCQkJCWRvX3JlbW90ZV93YWtldXApIHsKIAkJCXBvbGxfcmggPSAwOworCisJCX0gZWxzZSB7CisJCQkvKiBJZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywKKwkJCSAqIGVuYWJsZSBSSFNDIGludGVycnVwdHMKKwkJCSAqLworCQkJaWYgKCFyaHNjX2VuYWJsZSAmJiAhcmhzY19zdGF0dXMpIHsKKwkJCQlyaHNjX2VuYWJsZSA9IE9IQ0lfSU5UUl9SSFNDOworCQkJCW9oY2lfd3JpdGVsKG9oY2ksIHJoc2NfZW5hYmxlLAorCQkJCQkJJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCQkJfQorCQkJLyogS2VlcCBwb2xsaW5nIHVudGlsIFJIU0MgaXMgZW5hYmxlZCAqLworCQkJaWYgKHJoc2NfZW5hYmxlKQorCQkJCXBvbGxfcmggPSAwOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTQ0MSwxOCArNDU1LDIyIEBACiAgKiBhdXRvc3RvcCBpc24ndCB1c2VkIHdoZW4gQ09ORklHX1BNIGlzIHR1cm5lZCBvZmYuCiAgKi8KIHN0YXRpYyBpbnQgb2hjaV9yb290X2h1Yl9zdGF0ZV9jaGFuZ2VzKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgaW50IGNoYW5nZWQsCi0JCWludCBhbnlfY29ubmVjdGVkKQorCQlpbnQgYW55X2Nvbm5lY3RlZCwgaW50IHJoc2Nfc3RhdHVzKQogewogCS8qIElmIFJIU0MgaXMgZW5hYmxlZCwgZG9uJ3QgcG9sbCAqLwogCWlmIChvaGNpX3JlYWRsKG9oY2ksICZvaGNpLT5yZWdzLT5pbnRyZW5hYmxlKSAmIE9IQ0lfSU5UUl9SSFNDKQogCQlyZXR1cm4gMDsKIAotCS8qIElmIG5vIHN0YXR1cyBjaGFuZ2VzIGFyZSBwZW5kaW5nLCBlbmFibGUgc3RhdHVzLWNoYW5nZSBpbnRlcnJ1cHRzICovCi0JaWYgKCFjaGFuZ2VkKSB7Ci0JCW9oY2lfd3JpdGVsKG9oY2ksIE9IQ0lfSU5UUl9SSFNDLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKKwkvKiBJZiBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywgY29udGludWUgcG9sbGluZy4KKwkgKiBDb252ZXJzZWx5LCBpZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZyBidXQgdGhlIFJIU0MKKwkgKiBzdGF0dXMgYml0IHdhcyBzZXQsIHRoZW4gUkhTQyBtYXkgYmUgYnJva2VuIHNvIGNvbnRpbnVlIHBvbGxpbmcuCisJICovCisJaWYgKGNoYW5nZWQgfHwgcmhzY19zdGF0dXMpCisJCXJldHVybiAxOworCisJLyogSXQncyBzYWZlIHRvIHJlLWVuYWJsZSBSSFNDIGludGVycnVwdHMgKi8KKwlvaGNpX3dyaXRlbChvaGNpLCBPSENJX0lOVFJfUkhTQywgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCXJldHVybiAwOwogfQogCiAjZW5kaWYJLyogQ09ORklHX1BNICovCkBAIC00NjcsNiArNDg1LDcgQEAKIAlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKIAlpbnQJCWksIGNoYW5nZWQgPSAwLCBsZW5ndGggPSAxOwogCWludAkJYW55X2Nvbm5lY3RlZCA9IDA7CisJaW50CQlyaHNjX3N0YXR1czsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CkBAIC00OTIsMTIgKzUxMSwxMCBAQAogCQlsZW5ndGgrKzsKIAl9CiAKLQkvKiBTb21lIGJyb2tlbiBjb250cm9sbGVycyBuZXZlciB0dXJuIG9mZiBSSENTIGluIHRoZSBpbnRlcnJ1cHQKLQkgKiBzdGF0dXMgcmVnaXN0ZXIuICBGb3IgdGhlaXIgc2FrZSB3ZSB3b24ndCByZS1lbmFibGUgUkhTQwotCSAqIGludGVycnVwdHMgaWYgdGhlIGZsYWcgaXMgYWxyZWFkeSBzZXQuCi0JICovCi0JaWYgKG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpICYgT0hDSV9JTlRSX1JIU0MpCi0JCWNoYW5nZWQgPSAxOworCS8qIENsZWFyIHRoZSBSSFNDIHN0YXR1cyBmbGFnIGJlZm9yZSByZWFkaW5nIHRoZSBwb3J0IHN0YXR1c2VzICovCisJb2hjaV93cml0ZWwob2hjaSwgT0hDSV9JTlRSX1JIU0MsICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKTsKKwlyaHNjX3N0YXR1cyA9IG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpICYKKwkJCU9IQ0lfSU5UUl9SSFNDOwogCiAJLyogbG9vayBhdCBlYWNoIHBvcnQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgb2hjaS0+bnVtX3BvcnRzOyBpKyspIHsKQEAgLTUxNyw3ICs1MzQsNyBAQAogCX0KIAogCWhjZC0+cG9sbF9yaCA9IG9oY2lfcm9vdF9odWJfc3RhdGVfY2hhbmdlcyhvaGNpLCBjaGFuZ2VkLAotCQkJYW55X2Nvbm5lY3RlZCk7CisJCQlhbnlfY29ubmVjdGVkLCByaHNjX3N0YXR1cyk7CiAKIGRvbmU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCmluZGV4IDk1YjNlYzguLjkxNjk3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAKIAlvbWFwX29oY2lfY2xvY2tfcG93ZXIoMSk7CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJb21hcF8xNTEwX2xvY2FsX2J1c19wb3dlcigxKTsKIAkJb21hcF8xNTEwX2xvY2FsX2J1c19pbml0KCk7CiAJfQpAQCAtMzE5LDcgKzMxOSw3IEBACiAJaWYgKElTX0VSUih1c2JfaG9zdF9jaykpCiAJCXJldHVybiBQVFJfRVJSKHVzYl9ob3N0X2NrKTsKIAotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKIAkJdXNiX2RjX2NrID0gY2xrX2dldCgwLCAidXNiX2RjX2NrIik7CiAJZWxzZQogCQl1c2JfZGNfY2sgPSBjbGtfZ2V0KDAsICJsYl9jayIpOwpAQCAtMzQ0LDcgKzM0NCwxMiBAQAogCQlnb3RvIGVycjE7CiAJfQogCi0JaGNkLT5yZWdzID0gKHZvaWQgX19pb21lbSAqKSAoaW50KSBJT19BRERSRVNTKGhjZC0+cnNyY19zdGFydCk7CisJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCWlmICghaGNkLT5yZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGlvcmVtYXAgT0hDSSBIQ0RcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjI7CisJfQogCiAJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CiAJb2hjaV9oY2RfaW5pdChvaGNpKTsKQEAgLTM1NSwxMSArMzYwLDExIEBACiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoaXJxIDwgMCkgewogCQlyZXR2YWwgPSAtRU5YSU87Ci0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnIzOwogCX0KIAlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9ESVNBQkxFRCk7CiAJaWYgKHJldHZhbCkKLQkJZ290byBlcnIyOworCQlnb3RvIGVycjM7CiAKIAlob3N0X2luaXRpYWxpemVkID0gMTsKIApAQCAtMzY3LDYgKzM3Miw4IEBACiAJCW9tYXBfb2hjaV9jbG9ja19wb3dlcigwKTsKIAogCXJldHVybiAwOworZXJyMzoKKwlpb3VubWFwKGhjZC0+cmVncyk7CiBlcnIyOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogZXJyMToKQEAgLTQwMSw2ICs0MDgsNyBAQAogCX0KIAlpZiAobWFjaGluZV9pc19vbWFwX29zaygpKQogCQlvbWFwX2ZyZWVfZ3Bpbyg5KTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAJdXNiX3B1dF9oY2QoaGNkKTsKIAljbGtfcHV0KHVzYl9kY19jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYwppbmRleCA2NThhMmE5Li5lMzA2Y2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMKQEAgLTMzMSw3ICszMzEsNyBAQAogCiAJaW50IHJldCA9IDAsIGlycTsKIAotCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzOiAiIERSSVZFUl9JTkZPICIgKHBueDQwMDgpXG4iLCBoY2RfbmFtZSk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXM6ICIgRFJJVkVSX0RFU0MgIiAocG54NDAwOClcbiIsIGhjZF9uYW1lKTsKIAlpZiAodXNiX2Rpc2FibGVkKCkpIHsKIAkJZXJyKCJVU0IgaXMgZGlzYWJsZWQiKTsKIAkJcmV0ID0gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKaW5kZXggZmFmNjIyZS4uMjIyMDExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKQEAgLTU0MCwxNSArNTQwLDcgQEAKICAqIEJpZy1lbmRpYW4gcmVhZC93cml0ZSBmdW5jdGlvbnMgYXJlIGFyY2gtc3BlY2lmaWMuCiAgKiBPdGhlciBhcmNoZXMgY2FuIGJlIGFkZGVkIGlmL3doZW4gdGhleSdyZSBuZWVkZWQuCiAgKgotICogUkVWSVNJVDogYXJjaC9wb3dlcnBjIG5vdyBoYXMgcmVhZGwvd3JpdGVsX2JlLCBzbyB0aGUKLSAqIGRlZmluaXRpb24gYmVsb3cgY2FuIGRpZSBvbmNlIHRoZSBTVEIwNHh4eCBzdXBwb3J0IGlzCi0gKiBmaW5hbGx5IHBvcnRlZCBvdmVyLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQotI2RlZmluZSByZWFkbF9iZShhZGRyKQkJaW5fYmUzMigoX19mb3JjZSB1bnNpZ25lZCAqKWFkZHIpCi0jZGVmaW5lIHdyaXRlbF9iZSh2YWwsIGFkZHIpCW91dF9iZTMyKChfX2ZvcmNlIHVuc2lnbmVkICopYWRkciwgdmFsKQotI2VuZGlmCi0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9vaGNpX3JlYWRsIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksCiAJCQkJCV9faGMzMiBfX2lvbWVtICogcmVncykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCmluZGV4IGVhNzEyNmYuLmMxOGQ4NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwpAQCAtNjYsNyArNjYsNyBAQAogbW9kdWxlX3BhcmFtKGVuZGlhbiwgdXNob3J0LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5kaWFuLCAiZGF0YSBlbmRpYW46IGJpZz0yNTYsIGxpdHRsZT0wIChkZWZhdWx0PTApIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpcnFfc2Vuc2UgPSBJTlRMOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGlycV9zZW5zZSA9IDB4ZmY7CiBtb2R1bGVfcGFyYW0oaXJxX3NlbnNlLCB1c2hvcnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpcnFfc2Vuc2UsICJJUlEgc2Vuc2U6IGxvdyBsZXZlbD0zMiwgZmFsbGluZyBlZGdlPTAgIgogCQkiKGRlZmF1bHQ9MzIpIik7CkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIFNDS0UsIFNZU0NGRzApOwogCQl0bXAgPSByOGE2NjU5N19yZWFkKHI4YTY2NTk3LCBTWVNDRkcwKTsKIAkJaWYgKGkrKyA+IDEwMDApIHsKLQkJCWVycigicmVnaXN0ZXIgYWNjZXNzIGZhaWwuIik7CisJCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiByZWdpc3RlciBhY2Nlc3MgZmFpbC5cbiIpOwogCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCX0gd2hpbGUgKCh0bXAgJiBTQ0tFKSAhPSBTQ0tFKTsKQEAgLTEyOCw3ICsxMjgsNyBAQAogCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgVVNCRSwgU1lTQ0ZHMCk7CiAJCXRtcCA9IHI4YTY2NTk3X3JlYWQocjhhNjY1OTcsIFNZU0NGRzApOwogCQlpZiAoaSsrID4gMTAwMCkgewotCQkJZXJyKCJyZWdpc3RlciBhY2Nlc3MgZmFpbC4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IHJlZ2lzdGVyIGFjY2VzcyBmYWlsLlxuIik7CiAJCQlyZXR1cm4gLUVOWElPOwogCQl9CiAJfSB3aGlsZSAoKHRtcCAmIFVTQkUpICE9IFVTQkUpOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJCW1zbGVlcCgxKTsKIAkJdG1wID0gcjhhNjY1OTdfcmVhZChyOGE2NjU5NywgU1lTQ0ZHMCk7CiAJCWlmIChpKysgPiA1MDApIHsKLQkJCWVycigicmVnaXN0ZXIgYWNjZXNzIGZhaWwuIik7CisJCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiByZWdpc3RlciBhY2Nlc3MgZmFpbC5cbiIpOwogCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCX0gd2hpbGUgKCh0bXAgJiBTQ0tFKSAhPSBTQ0tFKTsKQEAgLTI2NSw3ICsyNjUsNyBAQAogCWlmIChyb290X3BvcnQpIHsKIAkJKnJvb3RfcG9ydCA9IChkZXZwYXRoWzBdICYgMHgwRikgLSAxOwogCQlpZiAoKnJvb3RfcG9ydCA+PSBSOEE2NjU5N19NQVhfUk9PVF9IVUIpCi0JCQllcnIoImlsbGVnYWwgcm9vdCBwb3J0IG51bWJlciIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCByb290IHBvcnQgbnVtYmVyLlxuIik7CiAJfQogCWlmIChodWJfcG9ydCkKIAkJKmh1Yl9wb3J0ID0gZGV2cGF0aFsyXSAmIDB4MEY7CkBAIC0yODYsNyArMjg2LDcgQEAKIAkJdXNic3BkID0gSFNNT0RFOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoInVua25vd24gc3BlZWQiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogdW5rbm93biBzcGVlZFxuIik7CiAJCWJyZWFrOwogCX0KIApAQCAtMzg1LDcgKzM4NSw3IEBACiAJc3RydWN0IHI4YTY2NTk3X2RldmljZSAqZGV2OwogCiAJaWYgKGlzX2h1Yl9saW1pdCh1cmItPmRldi0+ZGV2cGF0aCkpIHsKLQkJZXJyKCJFeHRlcm5lbCBodWIgbGltaXQgcmVhY2hlZC4iKTsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIkV4dGVybmFsIGh1YiBsaW1pdCByZWFjaGVkLlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDA2LDggKzQwNiw5IEBACiAJCXJldHVybiBhZGRyOwogCX0KIAotCWVycigiY2Fubm90IGNvbW11bmljYXRlIHdpdGggYSBVU0IgZGV2aWNlIG1vcmUgdGhhbiAxMC4oJXgpIiwKLQkgICAgcjhhNjY1OTctPmFkZHJlc3NfbWFwKTsKKwlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkiY2Fubm90IGNvbW11bmljYXRlIHdpdGggYSBVU0IgZGV2aWNlIG1vcmUgdGhhbiAxMC4oJXgpXG4iLAorCQlyOGE2NjU5Ny0+YWRkcmVzc19tYXApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDcsNyArNDQ4LDggQEAKIAlkbyB7CiAJCXRtcCA9IHI4YTY2NTk3X3JlYWQocjhhNjY1OTcsIHJlZyk7CiAJCWlmIChpKysgPiAxMDAwMDAwKSB7Ci0JCQllcnIoInJlZ2lzdGVyJWx4LCBsb29wICV4IGlzIHRpbWVvdXQiLCByZWcsIGxvb3ApOworCQkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogcmVnaXN0ZXIlbHgsIGxvb3AgJXggIgorCQkJICAgICAgICJpcyB0aW1lb3V0XG4iLCByZWcsIGxvb3ApOwogCQkJYnJlYWs7CiAJCX0KIAkJbmRlbGF5KDEpOwpAQCAtNjc1LDcgKzY3Nyw3IEBACiAJCQlhcnJheVtpKytdID0gMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJJbGxlZ2FsIHR5cGUiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCB0eXBlXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03MDUsNyArNzA3LDcgQEAKIAkJcjhhNjY1OTdfdHlwZSA9IFI4QTY2NTk3X0lTTzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJJbGxlZ2FsIHR5cGUiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCB0eXBlXG4iKTsKIAkJcjhhNjY1OTdfdHlwZSA9IDB4MDAwMDsKIAkJYnJlYWs7CiAJfQpAQCAtNzI0LDcgKzcyNiw3IEBACiAJZWxzZSBpZiAoY2hlY2tfaW50ZXJydXB0KHBpcGVudW0pKQogCQlidWZudW0gPSA0ICsgKHBpcGVudW0gLSA2KTsKIAllbHNlCi0JCWVycigiSWxsZWdhbCBwaXBlbnVtICglZCkiLCBwaXBlbnVtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCBwaXBlbnVtICglZClcbiIsIHBpcGVudW0pOwogCiAJcmV0dXJuIGJ1Zm51bTsKIH0KQEAgLTc0MCw3ICs3NDIsNyBAQAogCWVsc2UgaWYgKGNoZWNrX2ludGVycnVwdChwaXBlbnVtKSkKIAkJYnVmX2JzaXplID0gMDsKIAllbHNlCi0JCWVycigiSWxsZWdhbCBwaXBlbnVtICglZCkiLCBwaXBlbnVtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCBwaXBlbnVtICglZClcbiIsIHBpcGVudW0pOwogCiAJcmV0dXJuIGJ1Zl9ic2l6ZTsKIH0KQEAgLTc2MCwxMCArNzYyLDEyIEBACiAJCQlpZiAoKHI4YTY2NTk3LT5kbWFfbWFwICYgKDEgPDwgaSkpICE9IDApCiAJCQkJY29udGludWU7CiAKLQkJCWluZm8oImFkZHJlc3MgJWQsIEVuZHBvaW50QWRkcmVzcyAweCUwMnggdXNlIERNQSBGSUZPIiwKLQkJCSAgICAgdXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwKLQkJCSAgICAgaW5mby0+ZGlyX2luID8gVVNCX0VORFBPSU5UX0RJUl9NQVNLICsgaW5mby0+ZXBudW0KLQkJCQkJICAgIDogaW5mby0+ZXBudW0pOworCQkJZGV2X2luZm8oJmRldi0+dWRldi0+ZGV2LAorCQkJCSAiYWRkcmVzcyAlZCwgRW5kcG9pbnRBZGRyZXNzIDB4JTAyeCB1c2UgIgorCQkJCSAiRE1BIEZJRk9cbiIsIHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksCisJCQkJIGluZm8tPmRpcl9pbiA/CisJCQkJIAlVU0JfRU5EUE9JTlRfRElSX01BU0sgKyBpbmZvLT5lcG51bQorCQkJCQk6IGluZm8tPmVwbnVtKTsKIAogCQkJcjhhNjY1OTctPmRtYV9tYXAgfD0gMSA8PCBpOwogCQkJZGV2LT5kbWFfbWFwIHw9IDEgPDwgaTsKQEAgLTExODcsNyArMTE5MSw3IEBACiAJCXByZXBhcmVfc3RhdHVzX3BhY2tldChyOGE2NjU5NywgdGQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoImludmFsaWQgdHlwZS4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogaW52YWxpZCB0eXBlLlxuIik7CiAJCWJyZWFrOwogCX0KIApAQCAtMTI5NSw3ICsxMjk5LDcgQEAKIAlpZiAodW5saWtlbHkoKHRtcCAmIEZSRFkpID09IDApKSB7CiAJCXBpcGVfc3RvcChyOGE2NjU5NywgdGQtPnBpcGUpOwogCQlwaXBlX2lycV9kaXNhYmxlKHI4YTY2NTk3LCBwaXBlbnVtKTsKLQkJZXJyKCJpbiBmaWZvIG5vdCByZWFkeSAoJWQpIiwgcGlwZW51bSk7CisJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IGluIGZpZm8gbm90IHJlYWR5ICglZClcbiIsIHBpcGVudW0pOwogCQlmaW5pc2hfcmVxdWVzdChyOGE2NjU5NywgdGQsIHBpcGVudW0sIHRkLT51cmIsIC1FUElQRSk7CiAJCXJldHVybjsKIAl9CkBAIC0xMzcwLDcgKzEzNzQsNyBAQAogCWlmICh1bmxpa2VseSgodG1wICYgRlJEWSkgPT0gMCkpIHsKIAkJcGlwZV9zdG9wKHI4YTY2NTk3LCB0ZC0+cGlwZSk7CiAJCXBpcGVfaXJxX2Rpc2FibGUocjhhNjY1OTcsIHBpcGVudW0pOwotCQllcnIoIm91dCB3cml0ZSBmaWZvIG5vdCByZWFkeS4gKCVkKSIsIHBpcGVudW0pOworCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiBvdXQgZmlmbyBub3QgcmVhZHkgKCVkKVxuIiwgcGlwZW51bSk7CiAJCWZpbmlzaF9yZXF1ZXN0KHI4YTY2NTk3LCB0ZCwgcGlwZW51bSwgdXJiLCAtRVBJUEUpOwogCQlyZXR1cm47CiAJfQpAQCAtMjAwNSw3ICsyMDA5LDcgQEAKIAkJcmV0dXJuIGRldjsKIAl9CiAKLQllcnIoImdldF9yOGE2NjU5N19kZXZpY2UgZmFpbC4oJWQpXG4iLCBhZGRyKTsKKwlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiBnZXRfcjhhNjY1OTdfZGV2aWNlIGZhaWwuKCVkKVxuIiwgYWRkcik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTIyNjMsNyArMjI2Nyw3IEBACiAjZGVmaW5lIHJlc291cmNlX2xlbihyKSAoKChyKS0+ZW5kIC0gKHIpLT5zdGFydCkgKyAxKQogc3RhdGljIGludCBfX2luaXQgcjhhNjY1OTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBOVUxMLCAqaXJlczsKIAlpbnQgaXJxID0gLTE7CiAJdm9pZCBfX2lvbWVtICpyZWcgPSBOVUxMOwogCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBOVUxMOwpAQCAtMjI3NCw3ICsyMjc4LDcgQEAKIAogCWlmIChwZGV2LT5kZXYuZG1hX21hc2spIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZXJyKCJkbWEgbm90IHN1cHBvcnQiKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZG1hIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlnb3RvIGNsZWFuX3VwOwogCX0KIApAQCAtMjI4MiwyMSArMjI4NiwyNSBAQAogCQkJCQkgICAoY2hhciAqKWhjZF9uYW1lKTsKIAlpZiAoIXJlcykgewogCQlyZXQgPSAtRU5PREVWOwotCQllcnIoInBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUgZXJyb3IuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUgZXJyb3IuXG4iKTsKIAkJZ290byBjbGVhbl91cDsKIAl9CiAKLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChpcnEgPCAwKSB7CisJaXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFpcmVzKSB7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWVycigicGxhdGZvcm1fZ2V0X2lycSBlcnJvci4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJInBsYXRmb3JtX2dldF9yZXNvdXJjZSBJT1JFU09VUkNFX0lSUSBlcnJvci5cbiIpOwogCQlnb3RvIGNsZWFuX3VwOwogCX0KIAorCWlycSA9IGlyZXMtPnN0YXJ0OworCWlycV90cmlnZ2VyID0gaXJlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKKwogCXJlZyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2VfbGVuKHJlcykpOwogCWlmIChyZWcgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQllcnIoImlvcmVtYXAgZXJyb3IuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZXJyb3IuXG4iKTsKIAkJZ290byBjbGVhbl91cDsKIAl9CiAKQEAgLTIzMDQsNyArMjMxMiw3IEBACiAJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnI4YTY2NTk3X2hjX2RyaXZlciwgJnBkZXYtPmRldiwgKGNoYXIgKiloY2RfbmFtZSk7CiAJaWYgKCFoY2QpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZXJyKCJGYWlsZWQgdG8gY3JlYXRlIGhjZCIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gY3JlYXRlIGhjZFxuIik7CiAJCWdvdG8gY2xlYW5fdXA7CiAJfQogCXI4YTY2NTk3ID0gaGNkX3RvX3I4YTY2NTk3KGhjZCk7CkBAIC0yMzI5LDEzICsyMzM3LDMzIEBACiAJSU5JVF9MSVNUX0hFQUQoJnI4YTY2NTk3LT5jaGlsZF9kZXZpY2UpOwogCiAJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKLQlpZiAoaXJxX3NlbnNlID09IElOVEwpCi0JCWlycV90cmlnZ2VyID0gSVJRRl9UUklHR0VSX0xPVzsKLQllbHNlCi0JCWlycV90cmlnZ2VyID0gSVJRRl9UUklHR0VSX0ZBTExJTkc7CisKKwkvKiBpcnFfc2Vuc2Ugc2V0dGluZyBvbiBjbWRsaW5lIHRha2VzIHByZWNlZGVuY2Ugb3ZlciByZXNvdXJjZQorCSAqIHNldHRpbmdzLCBzbyB0aGUgaW50cm9kdWN0aW9uIG9mIGlycWZsYWdzIGluIElSUSByZXNvdXJzZQorCSAqIHdvbid0IGRpc3R1cmIgZXhpc3Rpbmcgc2V0dXBzICovCisJc3dpdGNoIChpcnFfc2Vuc2UpIHsKKwkJY2FzZSBJTlRMOgorCQkJaXJxX3RyaWdnZXIgPSBJUlFGX1RSSUdHRVJfTE9XOworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCWlycV90cmlnZ2VyID0gSVJRRl9UUklHR0VSX0ZBTExJTkc7CisJCQlicmVhazsKKwkJY2FzZSAweGZmOgorCQkJaWYgKGlycV90cmlnZ2VyKQorCQkJCWlycV9zZW5zZSA9IChpcnFfdHJpZ2dlciAmIElSUUZfVFJJR0dFUl9MT1cpID8KKwkJCQkJICAgIElOVEwgOiAwOworCQkJZWxzZSB7CisJCQkJaXJxX3NlbnNlID0gSU5UTDsKKwkJCQlpcnFfdHJpZ2dlciA9IElSUUZfVFJJR0dFUl9MT1c7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVua25vd24gaXJxX3NlbnNlIHZhbHVlLlxuIik7CisJfQorCiAJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQgfCBpcnFfdHJpZ2dlcik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCWVycigiRmFpbGVkIHRvIGFkZCBoY2QiKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBoY2RcbiIpOwogCQlnb3RvIGNsZWFuX3VwOwogCX0KIApAQCAtMjM2NCw3ICsyMzkyLDggQEAKIAlpZiAodXNiX2Rpc2FibGVkKCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaW5mbygiZHJpdmVyICVzLCAlcyIsIGhjZF9uYW1lLCBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBkcml2ZXIgJXMsICVzXG4iLCBoY2RfbmFtZSwKKwkgICAgICAgRFJJVkVSX1ZFUlNJT04pOwogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnI4YTY2NTk3X2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChyOGE2NjU5N19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCmluZGV4IDhhNzRiYmIuLmUxMDZlOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwpAQCAtMTYyMCwyMiArMTYyMCwyNiBAQAogewogCXN0cnVjdCB1c2JfaGNkCQkqaGNkOwogCXN0cnVjdCBzbDgxMQkJKnNsODExOwotCXN0cnVjdCByZXNvdXJjZQkJKmFkZHIsICpkYXRhOworCXN0cnVjdCByZXNvdXJjZQkJKmFkZHIsICpkYXRhLCAqaXJlczsKIAlpbnQJCQlpcnE7CiAJdm9pZCBfX2lvbWVtCQkqYWRkcl9yZWc7CiAJdm9pZCBfX2lvbWVtCQkqZGF0YV9yZWc7CiAJaW50CQkJcmV0dmFsOwogCXU4CQkJdG1wLCBpb2FkZHIgPSAwOworCXVuc2lnbmVkIGxvbmcJCWlycWZsYWdzOwogCiAJLyogYmFzaWMgc2FuaXR5IGNoZWNrcyBmaXJzdC4gIGJvYXJkLXNwZWNpZmljIGluaXQgbG9naWMgc2hvdWxkCiAJICogaGF2ZSBpbml0aWFsaXplZCB0aGVzZSB0aHJlZSByZXNvdXJjZXMgYW5kIHByb2JhYmx5IGJvYXJkCiAJICogc3BlY2lmaWMgcGxhdGZvcm1fZGF0YS4gIHdlIGRvbid0IHByb2JlIGZvciBJUlFzLCBhbmQgZG8gb25seQogCSAqIG1pbmltYWwgc2FuaXR5IGNoZWNraW5nLgogCSAqLwotCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKLQlpZiAoZGV2LT5udW1fcmVzb3VyY2VzIDwgMyB8fCBpcnEgPCAwKQorCWlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKGRldi0+bnVtX3Jlc291cmNlcyA8IDMgfHwgIWlyZXMpCiAJCXJldHVybiAtRU5PREVWOwogCisJaXJxID0gaXJlcy0+c3RhcnQ7CisJaXJxZmxhZ3MgPSBpcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOworCiAJLyogcmVmdXNlIHRvIGNvbmZ1c2UgdXNiY29yZSAqLwogCWlmIChkZXYtPmRldi5kbWFfbWFzaykgewogCQlEQkcoIm5vIHdlIHdvbid0IGRtYVxuIik7CkBAIC0xNzE3LDggKzE3MjEsMTEgQEAKIAkgKiB0cmlnZ2VycyAoZS5nLiBtb3N0IEFSTSBDUFVzKS4gIEluaXRpYWwgZHJpdmVyIHN0cmVzcyB0ZXN0aW5nCiAJICogd2FzIG9uIGEgc3lzdGVtIHdpdGggc2luZ2xlIGVkZ2UgdHJpZ2dlcmluZywgc28gbW9zdCBzb3J0cyBvZgogCSAqIHRyaWdnZXJpbmcgYXJyYW5nZW1lbnQgc2hvdWxkIHdvcmsuCisJICoKKwkgKiBVc2UgcmVzb3VyY2UgSVJRIGZsYWdzIGlmIHNldCBieSBwbGF0Zm9ybSBkZXZpY2Ugc2V0dXAuCiAJICovCi0JcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCk7CisJaXJxZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQgfCBpcnFmbGFncyk7CiAJaWYgKHJldHZhbCAhPSAwKQogCQlnb3RvIGVycjY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTFfY3MuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTFfY3MuYwppbmRleCA1ZGE2M2Y1Li41MTY4NDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExX2NzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMV9jcy5jCkBAIC0xMTIsNyArMTEyLDggQEAKIAkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKHJlc291cmNlcyksCiB9OwogCi1zdGF0aWMgaW50IHNsODExX2hjX2luaXQoc3RydWN0IGRldmljZSAqcGFyZW50LCBpb2FkZHJfdCBiYXNlX2FkZHIsIGludCBpcnEpCitzdGF0aWMgaW50IHNsODExX2hjX2luaXQoc3RydWN0IGRldmljZSAqcGFyZW50LCByZXNvdXJjZV9zaXplX3QgYmFzZV9hZGRyLAorCQkJIGludCBpcnEpCiB7CiAJaWYgKHBsYXRmb3JtX2Rldi5kZXYucGFyZW50KQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMTU1LDk3ICsxNTYsNzIgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmcGxhdGZvcm1fZGV2KTsKIH0KIAorc3RhdGljIGludCBzbDgxMV9jc19jb25maWdfY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCSBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJIHVuc2lnbmVkIGludCB2Y2MsCisJCQkJIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlpZiAoY2ZnLT5pbmRleCA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLworCS8qICBOb3RlIHRoYXQgdGhlIENJUyB2YWx1ZXMgbmVlZCB0byBiZSByZXNjYWxlZCAqLworCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQlpZiAoY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwICE9IHZjYykKKwkJCXJldHVybiAtRU5PREVWOworCX0gZWxzZSBpZiAoZGZsdC0+dmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKSB7CisJCWlmIChkZmx0LT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwICE9IHZjYykKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPQorCQkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKKwllbHNlIGlmIChkZmx0LT52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPQorCQkJZGZsdC0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7CisKKwkvKiB3ZSBuZWVkIGFuIGludGVycnVwdCAqLworCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LT5pcnEuSVJRSW5mbzEpCisJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJLyogSU8gd2luZG93IHNldHRpbmdzICovCisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgeworCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOworCisJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCisJCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJfQorCXBjbWNpYV9kaXNhYmxlX2RldmljZShwX2Rldik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKwogc3RhdGljIGludCBzbDgxMV9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IGRldmljZQkJKnBhcmVudCA9ICZoYW5kbGVfdG9fZGV2KGxpbmspOwogCWxvY2FsX2luZm9fdAkJKmRldiA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdAkJCXR1cGxlOwotCWNpc3BhcnNlX3QJCXBhcnNlOwogCWludAkJCWxhc3RfZm4sIGxhc3RfcmV0OwotCXVfY2hhcgkJCWJ1Zls2NF07Ci0JY29uZmlnX2luZm9fdAkJY29uZjsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90CWRmbHQgPSB7IDAgfTsKIAogCURCRygwLCAic2w4MTFfY3NfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAotCS8qIExvb2sgdXAgdGhlIGN1cnJlbnQgVmNjICovCi0JQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sCi0JCQlwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmY29uZikpOwotCi0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCXdoaWxlICgxKSB7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QJKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7Ci0KLQkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAKLQkJCQl8fCBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpCi0JCQkJCQkhPSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgewotCQkJZGZsdCA9ICpjZmc7Ci0JCX0KLQotCQlpZiAoY2ZnLT5pbmRleCA9PSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCi0JCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwotCi0JCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLwotCQkvKiAgTm90ZSB0aGF0IHRoZSBDSVMgdmFsdWVzIG5lZWQgdG8gYmUgcmVzY2FsZWQgKi8KLQkJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JCQlpZiAoY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwCi0JCQkJCSE9IGNvbmYuVmNjKQotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJfSBlbHNlIGlmIChkZmx0LnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgewotCQkJaWYgKGRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMAotCQkJCQkhPSBjb25mLlZjYykKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCX0KLQotCQlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJbGluay0+Y29uZi5WcHAgPQotCQkJCWNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7Ci0JCWVsc2UgaWYgKGRmbHQudnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwID0KLQkJCQlkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwotCi0JCS8qIHdlIG5lZWQgYW4gaW50ZXJydXB0ICovCi0JCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LmlycS5JUlFJbmZvMSkKLQkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7Ci0KLQkJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JCWxpbmstPmlvLk51bVBvcnRzMSA9IGxpbmstPmlvLk51bVBvcnRzMiA9IDA7Ci0JCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQuaW8ubndpbiA+IDApKSB7Ci0JCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87Ci0KLQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0KLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCi0JCQkJZ290byBuZXh0X2VudHJ5OwotCQl9Ci0JCWJyZWFrOwotCi1uZXh0X2VudHJ5OgotCQlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Ci0JCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0JfQorCWlmIChwY21jaWFfbG9vcF9jb25maWcobGluaywgc2w4MTFfY3NfY29uZmlnX2NoZWNrLCBOVUxMKSkKKwkJZ290byBmYWlsZWQ7CiAKIAkvKiByZXF1aXJlIGFuIElSUSBhbmQgdHdvIHJlZ2lzdGVycyAqLwogCWlmICghbGluay0+aW8uTnVtUG9ydHMxIHx8IGxpbmstPmlvLk51bVBvcnRzMSA8IDIpCi0JCWdvdG8gY3NfZmFpbGVkOworCQlnb3RvIGZhaWxlZDsKIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCQlDU19DSEVDSyhSZXF1ZXN0SVJRLAogCQkJcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKIAllbHNlCi0JCWdvdG8gY3NfZmFpbGVkOworCQlnb3RvIGZhaWxlZDsKIAogCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLAogCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CkBAIC0yNjYsOCArMjQyLDkgQEAKIAlpZiAoc2w4MTFfaGNfaW5pdChwYXJlbnQsIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKQogCQkJPCAwKSB7CiBjc19mYWlsZWQ6Ci0JCXByaW50aygic2w4MTFfY3NfY29uZmlnIGZhaWxlZFxuIik7CiAJCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKK2ZhaWxlZDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2w4MTFfY3NfY29uZmlnIGZhaWxlZFxuIik7CiAJCXNsODExX2NzX3JlbGVhc2UobGluayk7CiAJCXJldHVybiAgLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKaW5kZXggM2E3YmZlNy4uY2Y1ZTRjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwpAQCAtNTMsNyArNTMsNiBAQAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjMuMCIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTGludXMgJ0Zyb2RvIFJhYmJpdCcgVG9ydmFsZHMsIEpvaGFubmVzIEVyZGZlbHQsIFwKIFJhbmR5IER1bmxhcCwgR2VvcmcgQWNoZXIsIERldGkgRmxpZWdsLCBUaG9tYXMgU2FpbGVyLCBSb21hbiBXZWlzc2dhZXJiZXIsIFwKIEFsYW4gU3Rlcm4iCkBAIC05NTEsMTIgKzk1MCwxMyBAQAogewogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04gIiVzXG4iLAotCQkJaWdub3JlX29jID8gIiwgb3ZlcmN1cnJlbnQgaWdub3JlZCIgOiAiIik7Ci0KIAlpZiAodXNiX2Rpc2FibGVkKCkpCiAJCXJldHVybiAtRU5PREVWOwogCisJcHJpbnRrKEtFUk5fSU5GTyAidWhjaV9oY2Q6ICIgRFJJVkVSX0RFU0MgIiVzXG4iLAorCQkJaWdub3JlX29jID8gIiwgb3ZlcmN1cnJlbnQgaWdub3JlZCIgOiAiIik7CisJc2V0X2JpdChVU0JfVUhDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpOworCiAJaWYgKERFQlVHX0NPTkZJR1VSRUQpIHsKIAkJZXJyYnVmID0ga21hbGxvYyhFUlJCVUZfTEVOLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFlcnJidWYpCkBAIC05ODgsNiArOTg4LDcgQEAKIAogZXJyYnVmX2ZhaWxlZDoKIAorCWNsZWFyX2JpdChVU0JfVUhDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTk5Nyw2ICs5OTgsNyBAQAogCWttZW1fY2FjaGVfZGVzdHJveSh1aGNpX3VwX2NhY2hlcCk7CiAJZGVidWdmc19yZW1vdmUodWhjaV9kZWJ1Z2ZzX3Jvb3QpOwogCWtmcmVlKGVycmJ1Zik7CisJY2xlYXJfYml0KFVTQl9VSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiB9CiAKIG1vZHVsZV9pbml0KHVoY2lfaGNkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKaW5kZXggZGI2NDU5My4uNTYzMWQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCkBAIC0xMjMsMTQgKzEyMywxMCBAQAogCiBzdGF0aWMgdm9pZCB1aGNpX2ZyZWVfdGQoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV90ZCAqdGQpCiB7Ci0JaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+bGlzdCkpIHsKLQkJZGV2X3dhcm4odWhjaV9kZXYodWhjaSksICJ0ZCAlcCBzdGlsbCBpbiBsaXN0IVxuIiwgdGQpOwotCQlXQVJOX09OKDEpOwotCX0KLQlpZiAoIWxpc3RfZW1wdHkoJnRkLT5mbF9saXN0KSkgewotCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIGZsX2xpc3QhXG4iLCB0ZCk7Ci0JCVdBUk5fT04oMSk7Ci0JfQorCWlmICghbGlzdF9lbXB0eSgmdGQtPmxpc3QpKQorCQlkZXZfV0FSTih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIGxpc3QhXG4iLCB0ZCk7CisJaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+ZmxfbGlzdCkpCisJCWRldl9XQVJOKHVoY2lfZGV2KHVoY2kpLCAidGQgJXAgc3RpbGwgaW4gZmxfbGlzdCFcbiIsIHRkKTsKIAogCWRtYV9wb29sX2ZyZWUodWhjaS0+dGRfcG9vbCwgdGQsIHRkLT5kbWFfaGFuZGxlKTsKIH0KQEAgLTI5NSwxMCArMjkxLDggQEAKIHN0YXRpYyB2b2lkIHVoY2lfZnJlZV9xaChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3FoICpxaCkKIHsKIAlXQVJOX09OKHFoLT5zdGF0ZSAhPSBRSF9TVEFURV9JRExFICYmIHFoLT51ZGV2KTsKLQlpZiAoIWxpc3RfZW1wdHkoJnFoLT5xdWV1ZSkpIHsKLQkJZGV2X3dhcm4odWhjaV9kZXYodWhjaSksICJxaCAlcCBsaXN0IG5vdCBlbXB0eSFcbiIsIHFoKTsKLQkJV0FSTl9PTigxKTsKLQl9CisJaWYgKCFsaXN0X2VtcHR5KCZxaC0+cXVldWUpKQorCQlkZXZfV0FSTih1aGNpX2Rldih1aGNpKSwgInFoICVwIGxpc3Qgbm90IGVtcHR5IVxuIiwgcWgpOwogCiAJbGlzdF9kZWwoJnFoLT5ub2RlKTsKIAlpZiAocWgtPnVkZXYpIHsKQEAgLTc0NiwxMSArNzQwLDkgQEAKIHsKIAlzdHJ1Y3QgdWhjaV90ZCAqdGQsICp0bXA7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJnVyYnAtPm5vZGUpKSB7Ci0JCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAidXJiICVwIHN0aWxsIG9uIFFIJ3MgbGlzdCFcbiIsCisJaWYgKCFsaXN0X2VtcHR5KCZ1cmJwLT5ub2RlKSkKKwkJZGV2X1dBUk4odWhjaV9kZXYodWhjaSksICJ1cmIgJXAgc3RpbGwgb24gUUgncyBsaXN0IVxuIiwKIAkJCQl1cmJwLT51cmIpOwotCQlXQVJOX09OKDEpOwotCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0ZCwgdG1wLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkgewogCQl1aGNpX3JlbW92ZV90ZF9mcm9tX3VyYnAodGQpOwpAQCAtMTA3MywxMyArMTA2NSwxOCBAQAogCQl9CiAJCWlmIChleHBvbmVudCA8IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJcWgtPnBlcmlvZCA9IDEgPDwgZXhwb25lbnQ7Ci0JCXFoLT5za2VsID0gU0tFTF9JTkRFWChleHBvbmVudCk7CiAKLQkJLyogRm9yIG5vdywgaW50ZXJydXB0IHBoYXNlIGlzIGZpeGVkIGJ5IHRoZSBsYXlvdXQKLQkJICogb2YgdGhlIFFIIGxpc3RzLiAqLwotCQlxaC0+cGhhc2UgPSAocWgtPnBlcmlvZCAvIDIpICYgKE1BWF9QSEFTRSAtIDEpOwotCQlyZXQgPSB1aGNpX2NoZWNrX2JhbmR3aWR0aCh1aGNpLCBxaCk7CisJCS8qIElmIHRoZSBzbG90IGlzIGZ1bGwsIHRyeSBhIGxvd2VyIHBlcmlvZCAqLworCQlkbyB7CisJCQlxaC0+cGVyaW9kID0gMSA8PCBleHBvbmVudDsKKwkJCXFoLT5za2VsID0gU0tFTF9JTkRFWChleHBvbmVudCk7CisKKwkJCS8qIEZvciBub3csIGludGVycnVwdCBwaGFzZSBpcyBmaXhlZCBieSB0aGUgbGF5b3V0CisJCQkgKiBvZiB0aGUgUUggbGlzdHMuCisJCQkgKi8KKwkJCXFoLT5waGFzZSA9IChxaC0+cGVyaW9kIC8gMikgJiAoTUFYX1BIQVNFIC0gMSk7CisJCQlyZXQgPSB1aGNpX2NoZWNrX2JhbmR3aWR0aCh1aGNpLCBxaCk7CisJCX0gd2hpbGUgKHJldCAhPSAwICYmIC0tZXhwb25lbnQgPj0gMCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0gZWxzZSBpZiAocWgtPnBlcmlvZCA+IHVyYi0+aW50ZXJ2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCmluZGV4IDBmYjExNGMuLjg3OGM3N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC0zNTUsMTMgKzM1NSwxNCBAQAogCWlmIChtZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PjApCiAJewogCQltZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PTA7Ci0JCWVyciAoInRpbWVvdXQgd2FpdGluZyBmb3IgY2FtZXJhLiIpOworCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBjYW1lcmEuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAkKIAlpZiAobWRjODAwLT5zdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKQogCXsKLQkJd2FybiAoIkNhbWVyYSBnZXRzIGRpc2Nvbm5lY3RlZCBkdXJpbmcgd2FpdGluZyBmb3IgaXJxLiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZGM4MDA6IENhbWVyYSBnZXRzIGRpc2Nvbm5lY3RlZCAiCisJCSAgICAgICAiZHVyaW5nIHdhaXRpbmcgZm9yIGlycS5cbiIpOwogCQltZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PTA7CiAJCXJldHVybiAtMjsKIAl9CkBAIC0zNzksNyArMzgwLDggQEAKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKIAlpZiAoc3RhdHVzICE9IDApCi0JCWVyciAoIndyaXRpbmcgY29tbWFuZCBmYWlscyAoc3RhdHVzPSVpKSIsIHN0YXR1cyk7CisJCWRldl9lcnIoJm1kYzgwMC0+ZGV2LT5kZXYsCisJCQkid3JpdGluZyBjb21tYW5kIGZhaWxzIChzdGF0dXM9JWkpXG4iLCBzdGF0dXMpOwogCWVsc2UKIAkJbWRjODAwLT5zdGF0ZT1SRUFEWTsKIAltZGM4MDAtPndyaXR0ZW4gPSAxOwpAQCAtNDA2LDcgKzQwOCw4IEBACiAJCQltZGM4MDAtPnN0YXRlPVJFQURZOwogCQl9CiAJfSBlbHNlIHsKLQkJZXJyICgicmVxdWVzdCBieXRlcyBmYWlscyAoc3RhdHVzOiVpKSIsIHN0YXR1cyk7CisJCWRldl9lcnIoJm1kYzgwMC0+ZGV2LT5kZXYsCisJCQkicmVxdWVzdCBieXRlcyBmYWlscyAoc3RhdHVzOiVpKVxuIiwgc3RhdHVzKTsKIAl9CiAJbWRjODAwLT5kb3dubG9hZGVkID0gMTsKIAl3YWtlX3VwICgmbWRjODAwLT5kb3dubG9hZF93YWl0KTsKQEAgLTQ0MywxMyArNDQ2LDE0IEBACiAKIAlpZiAobWRjODAwLT5kZXYgIT0gTlVMTCkKIAl7Ci0JCXdhcm4gKCJvbmx5IG9uZSBNdXN0ZWsgTURDODAwIGlzIHN1cHBvcnRlZC4iKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgIm9ubHkgb25lIE11c3RlayBNREM4MDAgaXMgc3VwcG9ydGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCiAJewotCQllcnIgKCJwcm9iZSBmYWlscyAtPiB3cm9uZyBOdW1iZXIgb2YgQ29uZmlndXJhdGlvbiIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkicHJvYmUgZmFpbHMgLT4gd3JvbmcgTnVtYmVyIG9mIENvbmZpZ3VyYXRpb25cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaW50Zl9kZXNjID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CkBAIC00NjEsNyArNDY1LDcgQEAKIAkJfHwgKCBpbnRmX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50cyAhPSA0KQogCSkKIAl7Ci0JCWVyciAoInByb2JlIGZhaWxzIC0+IHdyb25nIEludGVyZmFjZSIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJwcm9iZSBmYWlscyAtPiB3cm9uZyBJbnRlcmZhY2VcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTQ4MiwxOSArNDg2LDE5IEBACiAJCX0KIAkJaWYgKG1kYzgwMC0+ZW5kcG9pbnRbaV0gPT0gLTEpCiAJCXsKLQkJCWVyciAoInByb2JlIGZhaWxzIC0+IFdyb25nIEVuZHBvaW50cy4iKTsKKwkJCWRldl9lcnIoJmludGYtPmRldiwgInByb2JlIGZhaWxzIC0+IFdyb25nIEVuZHBvaW50cy5cbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAKIAotCWluZm8gKCJGb3VuZCBNdXN0ZWsgTURDODAwIG9uIFVTQi4iKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiRm91bmQgTXVzdGVrIE1EQzgwMCBvbiBVU0IuXG4iKTsKIAogCW11dGV4X2xvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZtZGM4MDBfY2xhc3MpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyICgiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC01NzAsNyArNTc0LDcgQEAKIAkJbWRjODAwLT5kZXYgPSBOVUxMOwogCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCX0KLQlpbmZvICgiTXVzdGVrIE1EQzgwMCBkaXNjb25uZWN0ZWQgZnJvbSBVU0IuIik7CisJZGV2X2luZm8oJmludGYtPmRldiwgIk11c3RlayBNREM4MDAgZGlzY29ubmVjdGVkIGZyb20gVVNCLlxuIik7CiB9CiAKIApAQCAtNjQ0LDcgKzY0OCw4IEBACiAJbWRjODAwLT5pcnFfdXJiLT5kZXYgPSBtZGM4MDAtPmRldjsKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLT5pcnFfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVyciAoInJlcXVlc3QgVVNCIGlycSBmYWlscyAoc3VibWl0X3JldHZhbD0laSkuIiwgcmV0dmFsKTsKKwkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCSJyZXF1ZXN0IFVTQiBpcnEgZmFpbHMgKHN1Ym1pdF9yZXR2YWw9JWkpLlxuIiwgcmV0dmFsKTsKIAkJZXJybiA9IC1FSU87CiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KQEAgLTcwMSw3ICs3MDYsOCBAQAogCX0KIAlpZiAobWRjODAwLT5zdGF0ZSA9PSBXT1JLSU5HKQogCXsKLQkJd2FybiAoIklsbGVnYWwgU3RhdGUgXCJ3b3JraW5nXCIgcmVhY2hlZCBkdXJpbmcgcmVhZCA/ISIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZGM4MDA6IElsbGVnYWwgU3RhdGUgXCJ3b3JraW5nXCIiCisJCSAgICAgICAicmVhY2hlZCBkdXJpbmcgcmVhZCA/IVxuIik7CiAJCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC03MzMsNyArNzM5LDkgQEAKIAkJCQltZGM4MDAtPmRvd25sb2FkX3VyYi0+ZGV2ID0gbWRjODAwLT5kZXY7CiAJCQkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKG1kYzgwMC0+ZG93bmxvYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAocmV0dmFsKSB7Ci0JCQkJCWVyciAoIkNhbid0IHN1Ym1pdCBkb3dubG9hZCB1cmIgKHJldHZhbD0laSkiLHJldHZhbCk7CisJCQkJCWRldl9lcnIoJm1kYzgwMC0+ZGV2LT5kZXYsCisJCQkJCQkiQ2FuJ3Qgc3VibWl0IGRvd25sb2FkIHVyYiAiCisJCQkJCQkiKHJldHZhbD0laSlcbiIsIHJldHZhbCk7CiAJCQkJCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAkJCQkJcmV0dXJuIGxlbi1sZWZ0OwogCQkJCX0KQEAgLTc0Miw3ICs3NTAsMTAgQEAKIAkJCQltZGM4MDAtPmRvd25sb2FkZWQgPSAwOwogCQkJCWlmIChtZGM4MDAtPmRvd25sb2FkX3VyYi0+c3RhdHVzICE9IDApCiAJCQkJewotCQkJCQllcnIgKCJyZXF1ZXN0IGRvd25sb2FkLWJ5dGVzIGZhaWxzIChzdGF0dXM9JWkpIixtZGM4MDAtPmRvd25sb2FkX3VyYi0+c3RhdHVzKTsKKwkJCQkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCQkJCSJyZXF1ZXN0IGRvd25sb2FkLWJ5dGVzIGZhaWxzICIKKwkJCQkJCSIoc3RhdHVzPSVpKVxuIiwKKwkJCQkJCW1kYzgwMC0+ZG93bmxvYWRfdXJiLT5zdGF0dXMpOwogCQkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJCXJldHVybiBsZW4tbGVmdDsKIAkJCQl9CkBAIC04MzksNyArODUwLDggQEAKIAogCQkJaWYgKG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMCxUT19HRVRfUkVBRFkpKQogCQkJewotCQkJCWVyciAoIkNhbWVyYSBkaWRuJ3QgZ2V0IHJlYWR5LlxuIik7CisJCQkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCQkJIkNhbWVyYSBkaWRuJ3QgZ2V0IHJlYWR5LlxuIik7CiAJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQpAQCAtODUxLDcgKzg2Myw5IEBACiAJCQltZGM4MDAtPndyaXRlX3VyYi0+ZGV2ID0gbWRjODAwLT5kZXY7CiAJCQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAobWRjODAwLT53cml0ZV91cmIsIEdGUF9LRVJORUwpOwogCQkJaWYgKHJldHZhbCkgewotCQkJCWVyciAoInN1Ym1pdHRpbmcgd3JpdGUgdXJiIGZhaWxzIChyZXR2YWw9JWkpIiwgcmV0dmFsKTsKKwkJCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+ZGV2LAorCQkJCQkic3VibWl0dGluZyB3cml0ZSB1cmIgZmFpbHMgIgorCQkJCQkiKHJldHZhbD0laSlcbiIsIHJldHZhbCk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQpAQCAtODcwLDcgKzg4NCw5IEBACiAJCQkJY2FzZSAweDNlOiAvKiBUYWtlIHNob3QgaW4gRmluZSBNb2RlIChXQ2FtIE1vZGUpICovCiAJCQkJCWlmIChtZGM4MDAtPnBpY19sZW4gPCAwKQogCQkJCQl7Ci0JCQkJCQllcnIgKCJjYWxsIDB4MDcgYmVmb3JlIDB4MDUsMHgzZSIpOworCQkJCQkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwKKwkJCQkJCQkiY2FsbCAweDA3IGJlZm9yZSAiCisJCQkJCQkJIjB4MDUsMHgzZVxuIik7CiAJCQkJCQltZGM4MDAtPnN0YXRlPVJFQURZOwogCQkJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCQkJcmV0dXJuIC1FSU87CkBAIC04OTAsNyArOTA2LDcgQEAKIAogCQkJCQkJaWYgKG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoMSxUT19SRUFEX0ZST01fSVJRKSkKIAkJCQkJCXsKLQkJCQkJCQllcnIgKCJyZXF1ZXN0aW5nIGFuc3dlciBmcm9tIGlycSBmYWlscyIpOworCQkJCQkJCWRldl9lcnIoJm1kYzgwMC0+ZGV2LT5kZXYsICJyZXF1ZXN0aW5nIGFuc3dlciBmcm9tIGlycSBmYWlsc1xuIik7CiAJCQkJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCQkJCXJldHVybiAtRUlPOwogCQkJCQkJfQpAQCAtOTE4LDcgKzkzNCw3IEBACiAJCQkJCXsKIAkJCQkJCWlmIChtZGM4MDBfdXNiX3dhaXRGb3JJUlEgKDAsVE9fREVGQVVMVF9DT01NQU5EKSkKIAkJCQkJCXsKLQkJCQkJCQllcnIgKCJDb21tYW5kIFRpbWVvdXQuIik7CisJCQkJCQkJZGV2X2VycigmbWRjODAwLT5kZXYtPmRldiwgIkNvbW1hbmQgVGltZW91dC5cbiIpOwogCQkJCQkJCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAkJCQkJCQlyZXR1cm4gLUVJTzsKIAkJCQkJCX0KQEAgLTEwMTgsNyArMTAzNCw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBjbGVhbnVwX29uX2ZhaWw7CiAKLQlpbmZvIChEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTAyOCw3ICsxMDQ1LDcgQEAKIAogCWlmIChtZGM4MDAgIT0gTlVMTCkKIAl7Ci0JCWVyciAoImNhbid0IGFsbG9jIG1lbW9yeSEiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZGM4MDA6IGNhbid0IGFsbG9jIG1lbW9yeSFcbiIpOwogCiAJCWtmcmVlKG1kYzgwMC0+ZG93bmxvYWRfdXJiX2J1ZmZlcik7CiAJCWtmcmVlKG1kYzgwMC0+d3JpdGVfdXJiX2J1ZmZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcgYi9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKaW5kZXggNGVhNTBlMC4uZTQ2M2RiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwpAQCAtNDIsNiArNDIsMTUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBhZHV0dXguCiAKK2NvbmZpZyBVU0JfU0VWU0VHCisJdHJpc3RhdGUgIlVTQiA3LVNlZ21lbnQgTEVEIERpc3BsYXkiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgVVNCIDctU2VnbWVudCBEaXNwbGF5IGJ5IERlbGNvbQorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JzZXZzZWcuCisKIGNvbmZpZyBVU0JfUklPNTAwCiAJdHJpc3RhdGUgIlVTQiBEaWFtb25kIFJpbzUwMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCCkBAIC0yNzEsMyArMjgwLDE4IEBACiAJICBUaGUgZmlybXdhcmUgZm9yIHRoaXMgZHJpdmVyIG11c3QgYmUgZXh0cmFjdGVkIGZyb20gdGhlIE1hY09TCiAJICBkcml2ZXIgYmVmb3JlaGFuZC4gVG9vbHMgZm9yIGRvaW5nIHNvIGFyZSBhdmFpbGFibGUgYXQKIAkgIGh0dHA6Ly9iZXJzYWNlMDMuZnJlZS5mcgorCitjb25maWcgVVNCX1ZTVAorCXRyaXN0YXRlICJVU0IgVlNUIGRyaXZlciIKKwlkZXBlbmRzIG9uIFVTQgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGlzIGludGVuZGVkIGZvciBWZXJuaWVyIFNvZnR3YXJlIFRlY2hub2xvZ2llcworCSAgYnVsayB1c2IgZGV2aWNlcyBzdWNoIGFzIHRoZWlyIE9jZWFuLU9wdGljcyBzcGVjdHJvbWV0ZXJzIG9yCisJICBMYWJxdWVzdC4KKwkgIEl0IGlzIGEgYnVsayBjaGFubmVsIGRyaXZlciB3aXRoIGNvbmZpZ3VyYWJsZSByZWFkIGFuZCB3cml0ZQorCSAgdGltZW91dHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZzdHVzYi4KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQppbmRleCA0NWI0ZTEyLi4xMzM0ZjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKQEAgLTI2LDYgKzI2LDggQEAKIG9iai0kKENPTkZJR19VU0JfVEVTVCkJCSs9IHVzYnRlc3Qubwogb2JqLSQoQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUikJKz0gdHJhbmNldmlicmF0b3Iubwogb2JqLSQoQ09ORklHX1VTQl9VU1M3MjApCSs9IHVzczcyMC5vCitvYmotJChDT05GSUdfVVNCX1NFVlNFRykJKz0gdXNic2V2c2VnLm8KK29iai0kKENPTkZJR19VU0JfVlNUKQkJKz0gdnN0dXNiLm8KIAogb2JqLSQoQ09ORklHX1VTQl9TSVNVU0JWR0EpCSs9IHNpc3VzYnZnYS8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYyBiL2RyaXZlcnMvdXNiL21pc2MvYWR1dHV4LmMKaW5kZXggOTY1ZjZlYS4uN2I2OTIyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jCkBAIC0yODMsOCArMjgzLDggQEAKIAogCWludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmYWR1X2RyaXZlciwgc3VibWlub3IpOwogCWlmICghaW50ZXJmYWNlKSB7Ci0JCWVycigiJXMgLSBlcnJvciwgY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkIiwKLQkJICAgIF9fZnVuY19fLCBzdWJtaW5vcik7CisJCXByaW50ayhLRVJOX0VSUiAiYWR1dHV4OiAlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgIgorCQkgICAgICAgIm1pbm9yICVkXG4iLCBfX2Z1bmNfXywgc3VibWlub3IpOwogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGV4aXRfbm9fZGV2aWNlOwogCX0KQEAgLTQxNiw3ICs0MTYsOCBAQAogCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLwogCWlmIChkZXYtPnVkZXYgPT0gTlVMTCkgewogCQlyZXR2YWwgPSAtRU5PREVWOwotCQllcnIoIk5vIGRldmljZSBvciBkZXZpY2UgdW5wbHVnZ2VkICVkIiwgcmV0dmFsKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJhZHV0dXg6IE5vIGRldmljZSBvciBkZXZpY2UgdW5wbHVnZ2VkICVkXG4iLAorCQkgICAgICAgcmV0dmFsKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtNTc2LDcgKzU3Nyw4IEBACiAJLyogdmVyaWZ5IHRoYXQgdGhlIGRldmljZSB3YXNuJ3QgdW5wbHVnZ2VkICovCiAJaWYgKGRldi0+dWRldiA9PSBOVUxMKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWVycigiTm8gZGV2aWNlIG9yIGRldmljZSB1bnBsdWdnZWQgJWQiLCByZXR2YWwpOworCQlwcmludGsoS0VSTl9FUlIgImFkdXR1eDogTm8gZGV2aWNlIG9yIGRldmljZSB1bnBsdWdnZWQgJWRcbiIsCisJCSAgICAgICByZXR2YWwpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC02NDUsNyArNjQ3LDggQEAKIAkJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+aW50ZXJydXB0X291dF91cmIsIEdGUF9LRVJORUwpOwogCQkJaWYgKHJldHZhbCA8IDApIHsKIAkJCQlkZXYtPm91dF91cmJfZmluaXNoZWQgPSAxOwotCQkJCWVycigiQ291bGRuJ3Qgc3VibWl0IGludGVycnVwdF9vdXRfdXJiICVkIiwgcmV0dmFsKTsKKwkJCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgIkNvdWxkbid0IHN1Ym1pdCAiCisJCQkJCSJpbnRlcnJ1cHRfb3V0X3VyYiAlZFxuIiwgcmV0dmFsKTsKIAkJCQlnb3RvIGV4aXQ7CiAJCQl9CiAKQEAgLTg5MCwxMyArODkzLDE0IEBACiAJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLwogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmYWR1X2RyaXZlcik7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIGZvciB0aGUgIl9fRklMRV9fIiBkcml2ZXIuICIKLQkJICAgICJFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCQlwcmludGsoS0VSTl9FUlIgInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiX19GSUxFX18KKwkJICAgICAgICIgZHJpdmVyLiBFcnJvciBudW1iZXIgJWRcbiIsIHJlc3VsdCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlpbmZvKCJhZHV0dXggIiBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOwotCWluZm8oImFkdXR1eCBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyLiBVc2UgYXQgeW91ciBvd24gcmlzayIpOworCXByaW50ayhLRVJOX0lORk8gImFkdXR1eCAiIERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJhZHV0dXggaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlci4gIgorCSAgICAgICAiVXNlIGF0IHlvdXIgb3duIHJpc2tcbiIpOwogCiBleGl0OgogCWRiZygyLCIgJXMgOiBsZWF2ZSwgcmV0dXJuIHZhbHVlICVkIiwgX19mdW5jX18sIHJlc3VsdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jIGIvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYwppbmRleCBhMDc2YzI0Li4xZDhlMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKQEAgLTEzMCw3ICsxMzAsOCBAQAogZXhpdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihwZGF0YS0+dXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQlkZXZfZXJyKCZwZGF0YS0+dWRldi0+ZGV2LAorCQkJIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAogCQkJX19mdW5jX18sIHJldHZhbCk7CiAJfQogfQpAQCAtMjIwLDcgKzIyMSw3IEBACiAJCX0KIAl9CiAJaWYgKCFpbnRfaW5fZW5kcG9pbnRBZGRyKSB7Ci0JCWVycigiQ291bGQgbm90IGZpbmQgaW50LWluIGVuZHBvaW50Iik7CisJCWRldl9lcnIoJmlmYWNlLT5kZXYsICJDb3VsZCBub3QgZmluZCBpbnQtaW4gZW5kcG9pbnRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTIyOCw3ICsyMjksNyBAQAogCXBkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFwcGxlZGlzcGxheSksIEdGUF9LRVJORUwpOwogCWlmICghcGRhdGEpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKLQkJZXJyKCJPdXQgb2YgbWVtb3J5Iik7CisJCWRldl9lcnIoJmlmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTI0MSw4ICsyNDIsOCBAQAogCXBkYXRhLT5tc2dkYXRhID0ga21hbGxvYyhBQ0RfTVNHX0JVRkZFUl9MRU4sIEdGUF9LRVJORUwpOwogCWlmICghcGRhdGEtPm1zZ2RhdGEpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKLQkJZXJyKCJhcHBsZWRpc3BsYXk6IEFsbG9jYXRpbmcgYnVmZmVyIGZvciBjb250cm9sIG1lc3NhZ2VzICIKLQkJCSJmYWlsZWQiKTsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwKKwkJCSJBbGxvY2F0aW5nIGJ1ZmZlciBmb3IgY29udHJvbCBtZXNzYWdlcyBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjUwLDcgKzI1MSw3IEBACiAJcGRhdGEtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZGF0YS0+dXJiKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07Ci0JCWVycigiYXBwbGVkaXNwbGF5OiBBbGxvY2F0aW5nIFVSQiBmYWlsZWQiKTsKKwkJZGV2X2VycigmaWZhY2UtPmRldiwgIkFsbG9jYXRpbmcgVVJCIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yNTksNyArMjYwLDcgQEAKIAkJR0ZQX0tFUk5FTCwgJnBkYXRhLT51cmItPnRyYW5zZmVyX2RtYSk7CiAJaWYgKCFwZGF0YS0+dXJiZGF0YSkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwotCQllcnIoImFwcGxlZGlzcGxheTogQWxsb2NhdGluZyBVUkIgYnVmZmVyIGZhaWxlZCIpOworCQlkZXZfZXJyKCZpZmFjZS0+ZGV2LCAiQWxsb2NhdGluZyBVUkIgYnVmZmVyIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yNzAsNyArMjcxLDcgQEAKIAkJcGRhdGEsIDEpOwogCWlmICh1c2Jfc3VibWl0X3VyYihwZGF0YS0+dXJiLCBHRlBfS0VSTkVMKSkgewogCQlyZXR2YWwgPSAtRUlPOwotCQllcnIoImFwcGxlZGlzcGxheTogU3VibWl0dGluZyBVUkIgZmFpbGVkIik7CisJCWRldl9lcnIoJmlmYWNlLT5kZXYsICJTdWJtaXR0aW5nIFVSQiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjgwLDcgKzI4MSw3IEBACiAJcGRhdGEtPmJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihibF9uYW1lLCBOVUxMLCBwZGF0YSwKIAkJCQkJCSZhcHBsZWRpc3BsYXlfYmxfZGF0YSk7CiAJaWYgKElTX0VSUihwZGF0YS0+YmQpKSB7Ci0JCWVycigiYXBwbGVkaXNwbGF5OiBCYWNrbGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZCIpOworCQlkZXZfZXJyKCZpZmFjZS0+ZGV2LCAiQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjkxLDcgKzI5Miw4IEBACiAKIAlpZiAoYnJpZ2h0bmVzcyA8IDApIHsKIAkJcmV0dmFsID0gYnJpZ2h0bmVzczsKLQkJZXJyKCJhcHBsZWRpc3BsYXk6IEVycm9yIHdoaWxlIGdldHRpbmcgaW5pdGlhbCBicmlnaHRuZXNzOiAlZCIsIHJldHZhbCk7CisJCWRldl9lcnIoJmlmYWNlLT5kZXYsCisJCQkiRXJyb3Igd2hpbGUgZ2V0dGluZyBpbml0aWFsIGJyaWdodG5lc3M6ICVkXG4iLCByZXR2YWwpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMzE0LDcgKzMxNiw3IEBACiAJCQkJCXBkYXRhLT51cmJkYXRhLCBwZGF0YS0+dXJiLT50cmFuc2Zlcl9kbWEpOwogCQkJdXNiX2ZyZWVfdXJiKHBkYXRhLT51cmIpOwogCQl9Ci0JCWlmIChwZGF0YS0+YmQpCisJCWlmIChwZGF0YS0+YmQgJiYgIUlTX0VSUihwZGF0YS0+YmQpKQogCQkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5iZCk7CiAJCWtmcmVlKHBkYXRhLT5tc2dkYXRhKTsKIAl9CkBAIC0zNTIsNyArMzU0LDcgQEAKIHsKIAl3cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJhcHBsZWRpc3BsYXkiKTsKIAlpZiAoIXdxKSB7Ci0JCWVycigiQ291bGQgbm90IGNyZWF0ZSB3b3JrIHF1ZXVlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJhcHBsZWRpc3BsYXk6IENvdWxkIG5vdCBjcmVhdGUgd29yayBxdWV1ZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9jeXByZXNzX2N5N2M2My5jIGIvZHJpdmVycy91c2IvbWlzYy9jeXByZXNzX2N5N2M2My5jCmluZGV4IDkzNzk0MDQuLjU3MjBiZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvY3lwcmVzc19jeTdjNjMuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2N5cHJlc3NfY3k3YzYzLmMKQEAgLTI3OCw5ICsyNzgsOSBAQAogCiAJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLwogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmY3lwcmVzc19kcml2ZXIpOwotCWlmIChyZXN1bHQpIHsKLQkJZXJyKCJGdW5jdGlvbiB1c2JfcmVnaXN0ZXIgZmFpbGVkISBFcnJvciBudW1iZXI6ICVkXG4iLCByZXN1bHQpOwotCX0KKwlpZiAocmVzdWx0KQorCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogdXNiX3JlZ2lzdGVyIGZhaWxlZCEgIgorCQkgICAgICAgIkVycm9yIG51bWJlcjogJWRcbiIsIHJlc3VsdCk7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMgYi9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYwppbmRleCAxY2Q5ZTdlLi40ZmIzYzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYwpAQCAtNDIyLDEzICs0MjIsMTQgQEAKIAlpbnQgcmVzdWx0OwogCiAJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZjeXRoZXJtX2RyaXZlcik7Ci0JaWYgKHJlc3VsdCkgCi0JewkKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6IHVzYl9yZWdpc3RlciBmYWlsZWQhICIKKwkJICAgICAgICJFcnJvciBudW1iZXI6ICVkXG4iLCByZXN1bHQpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMKaW5kZXggNGI5OTRhMC4uZTc2MmJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYwpAQCAtNTAsNyArNTAsNyBAQAogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9ICBrbWVtZHVwKGRhdGEsIGxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWJ1ZmZlcikgewotCQllcnIoImVtaTI2OiBrbWFsbG9jKCVkKSBmYWlsZWQuIiwgbGVuZ3RoKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJrbWFsbG9jKCVkKSBmYWlsZWQuXG4iLCBsZW5ndGgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJLyogTm90ZTogdXNiX2NvbnRyb2xfbXNnIHJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3Igb3IgbGVuZ3RoIG9mIHRoZQpAQCAtNjQsMTEgKzY0LDExIEBACiBzdGF0aWMgaW50IGVtaTI2X3NldF9yZXNldCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciByZXNldF9iaXQpCiB7CiAJaW50IHJlc3BvbnNlOwotCWluZm8oIiVzIC0gJWQiLCBfX2Z1bmNfXywgcmVzZXRfYml0KTsKKwlkZXZfaW5mbygmZGV2LT5kZXYsICIlcyAtICVkXG4iLCBfX2Z1bmNfXywgcmVzZXRfYml0KTsKIAkvKiBwcmludGsoS0VSTl9ERUJVRyAiJXMgLSAlZCIsIF9fZnVuY19fLCByZXNldF9iaXQpOyAqLwogCXJlc3BvbnNlID0gZW1pMjZfd3JpdGVtZW1vcnkgKGRldiwgQ1BVQ1NfUkVHLCAmcmVzZXRfYml0LCAxLCAweGEwKTsKIAlpZiAocmVzcG9uc2UgPCAwKSB7Ci0JCWVycigiZW1pMjY6IHNldF9yZXNldCAoJWQpIGZhaWxlZCIsIHJlc2V0X2JpdCk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAic2V0X3Jlc2V0ICglZCkgZmFpbGVkXG4iLCByZXNldF9iaXQpOwogCX0KIAlyZXR1cm4gcmVzcG9uc2U7CiB9CkBAIC04OCw3ICs4OCw4IEBACiAKIAlidWYgPSBrbWFsbG9jKEZXX0xPQURfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKLQkJZXJyKCAiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19mdW5jX18sIC1FTk9NRU0pOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZFxuIiwKKwkJCV9fZnVuY19fLCAtRU5PTUVNKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byB3cmFwZXJyOwogCX0KQEAgLTEwNiwxNCArMTA3LDE2IEBACiAJCQkJICAgICZkZXYtPmRldik7CiAJaWYgKGVycikgewogCW5vZnc6Ci0JCWVyciggIiVzIC0gcmVxdWVzdF9maXJtd2FyZSgpIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIHJlcXVlc3RfZmlybXdhcmUoKSBmYWlsZWRcbiIsCisJCQlfX2Z1bmNfXyk7CiAJCWdvdG8gd3JhcGVycjsKIAl9CiAKIAkvKiBBc3NlcnQgcmVzZXQgKHN0b3AgdGhlIENQVSBpbiB0aGUgRU1JKSAqLwogCWVyciA9IGVtaTI2X3NldF9yZXNldChkZXYsMSk7CiAJaWYgKGVyciA8IDApIHsKLQkJZXJyKCAiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19mdW5jX18sIGVycik7CisJCWRldl9lcnIoJmRldi0+ZGV2LCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKIAkJZ290byB3cmFwZXJyOwogCX0KIApAQCAtMjU0LDcgKzI1Nyw3IEBACiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAKLQlpbmZvKCIlcyBzdGFydCIsIF9fZnVuY19fKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiJXMgc3RhcnRcbiIsIF9fZnVuY19fKTsKIAogCWVtaTI2X2xvYWRfZmlybXdhcmUoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCmluZGV4IDVkODU5ZGUuLjYwMmVlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKQEAgLTczLDcgKzczLDcgQEAKIHN0YXRpYyBpbnQgZW1pNjJfc2V0X3Jlc2V0IChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlc2V0X2JpdCkKIHsKIAlpbnQgcmVzcG9uc2U7Ci0JaW5mbygiJXMgLSAlZCIsIF9fZnVuY19fLCByZXNldF9iaXQpOworCWRldl9pbmZvKCZkZXYtPmRldiwgIiVzIC0gJWRcbiIsIF9fZnVuY19fLCByZXNldF9iaXQpOwogCQogCXJlc3BvbnNlID0gZW1pNjJfd3JpdGVtZW1vcnkgKGRldiwgQ1BVQ1NfUkVHLCAmcmVzZXRfYml0LCAxLCAweGEwKTsKIAlpZiAocmVzcG9uc2UgPCAwKSB7CkBAIC0yNzEsNyArMjcxLDcgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlkZXZfZGJnKCZpbnRmLT5kZXYsICJlbWk2Ml9wcm9iZVxuIik7CiAKLQlpbmZvKCIlcyBzdGFydCIsIF9fZnVuY19fKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiJXMgc3RhcnRcbiIsIF9fZnVuY19fKTsKIAogCWVtaTYyX2xvYWRfZmlybXdhcmUoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKaW5kZXggOTdjMjgwOS4uNzlhNzY2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCkBAIC02OTgsNyArNjk4LDcgQEAKICAgICAgICAgICAgICAgICBpbnQgcmV0dmFsID0gdXNiX2J1bGtfbXNnKGZ0ZGktPnVkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fYnVmZmVyLCBmdGRpLT5idWxrX2luX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCBtc2Vjc190b19qaWZmaWVzKDUwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCA1MCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fbGVmdCA9IHBhY2tldF9ieXRlcyAtIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2xhc3QgPSAxOwpAQCAtOTYwLDcgKzk2MCw3IEBACiAgICAgICAgICAgICAgICAgaW50IHJldHZhbCA9IHVzYl9idWxrX21zZyhmdGRpLT51ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgbXNlY3NfdG9famlmZmllcyg1MDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRfYnl0ZXMsIDUwMCk7CiAgICAgICAgICAgICAgICAgY2hhciBkaWFnWzMwICozICsgNF07CiAgICAgICAgICAgICAgICAgY2hhciAqZCA9IGRpYWc7CiAgICAgICAgICAgICAgICAgaW50IG0gPSBwYWNrZXRfYnl0ZXM7CkBAIC0xODgwLDcgKzE4ODAsNyBAQAogICAgICAgICAgICAgICAgIGludCByZXR2YWwgPSB1c2JfYnVsa19tc2coZnRkaS0+dWRldiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9yY3ZidWxrcGlwZShmdGRpLT51ZGV2LCBmdGRpLT5idWxrX2luX2VuZHBvaW50QWRkciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9idWZmZXIsIGZ0ZGktPmJ1bGtfaW5fc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZwYWNrZXRfYnl0ZXMsIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCAxMDApOwogICAgICAgICAgICAgICAgIGlmIChwYWNrZXRfYnl0ZXMgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGRpYWdbMzAgKjMgKyA0XTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmQgPSBkaWFnOwpAQCAtMjA2Nyw3ICsyMDY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9idWZmZXIsIGZ0ZGktPmJ1bGtfaW5fc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgbXNlY3NfdG9famlmZmllcyg1MDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgNTAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNrZXRfYnl0ZXMgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZGlhZ1szMCAqMyArIDRdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkID0gZGlhZzsKQEAgLTIxNzYsNyArMjE3Niw3IEBACiAgICAgICAgICAgICAgICAgaW50IHJldHZhbCA9IHVzYl9idWxrX21zZyhmdGRpLT51ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCAxMDAwKTsKICAgICAgICAgICAgICAgICBpZiAocGFja2V0X2J5dGVzID4gMikgewogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkaWFnWzMwICozICsgNF07CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkID0gZGlhZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKaW5kZXggNGJjZjdmYi4uNmRhODg4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKQEAgLTQwMywxNCArNDAzLDE1IEBACiAJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAl9CiAKLQlpbmZvKCIlcyBkaXNjb25uZWN0ZWQiLCBEUklWRVJfREVTQyk7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiZGlzY29ubmVjdGVkXG4iKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgdXNiX2lkbW91c2VfaW5pdCh2b2lkKQogewogCWludCByZXN1bHQ7CiAKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KIAlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmlkbW91c2VfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCmluZGV4IDkzNzAzMjYuLmFiMGYzMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYwpAQCAtODUxLDkgKzg1MSw4IEBACiAKIAlkYmcoMiwgIiVzOiBlbnRlciIsIF9fZnVuY19fKTsKIAotCWlmICh1ZGV2ID09IE5VTEwpIHsKLQkJaW5mbyAoInVkZXYgaXMgTlVMTC4iKTsKLQl9CisJaWYgKHVkZXYgPT0gTlVMTCkKKwkJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAidWRldiBpcyBOVUxMLlxuIik7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KIApAQCAtOTU0LDcgKzk1Myw5IEBACiAJZGV2LT5taW5vciA9IGludGVyZmFjZS0+bWlub3I7CiAKIAkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCi0JaW5mbyAoIkxFR08gVVNCIFRvd2VyICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgJWQgbWlub3IgJWQiLCAoZGV2LT5taW5vciAtIExFR09fVVNCX1RPV0VSX01JTk9SX0JBU0UpLCBVU0JfTUFKT1IsIGRldi0+bWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxFR08gVVNCIFRvd2VyICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgIgorCQkgIiVkIG1pbm9yICVkXG4iLCAoZGV2LT5taW5vciAtIExFR09fVVNCX1RPV0VSX01JTk9SX0JBU0UpLAorCQkgVVNCX01BSk9SLCBkZXYtPm1pbm9yKTsKIAogCS8qIGdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiBhbmQgbG9nIGl0ICovCiAJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnICh1ZGV2LApAQCAtOTcxLDEwICs5NzIsMTAgQEAKIAkJcmV0dmFsID0gcmVzdWx0OwogCQlnb3RvIGVycm9yOwogCX0KLQlpbmZvKCJMRUdPIFVTQiBUb3dlciBmaXJtd2FyZSB2ZXJzaW9uIGlzICVkLiVkIGJ1aWxkICVkIiwKLQkgICAgIGdldF92ZXJzaW9uX3JlcGx5Lm1ham9yLAotCSAgICAgZ2V0X3ZlcnNpb25fcmVwbHkubWlub3IsCi0JICAgICBsZTE2X3RvX2NwdShnZXRfdmVyc2lvbl9yZXBseS5idWlsZF9ubykpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxFR08gVVNCIFRvd2VyIGZpcm13YXJlIHZlcnNpb24gaXMgJWQuJWQgIgorCQkgImJ1aWxkICVkXG4iLCBnZXRfdmVyc2lvbl9yZXBseS5tYWpvciwKKwkJIGdldF92ZXJzaW9uX3JlcGx5Lm1pbm9yLAorCQkgbGUxNl90b19jcHUoZ2V0X3ZlcnNpb25fcmVwbHkuYnVpbGRfbm8pKTsKIAogCiBleGl0OgpAQCAtMTAyMSw3ICsxMDIyLDggQEAKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCX0KIAotCWluZm8oIkxFR08gVVNCIFRvd2VyICMlZCBub3cgZGlzY29ubmVjdGVkIiwgKG1pbm9yIC0gTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSkpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxFR08gVVNCIFRvd2VyICMlZCBub3cgZGlzY29ubmVjdGVkXG4iLAorCQkgKG1pbm9yIC0gTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSkpOwogCiAJZGJnKDIsICIlczogbGVhdmUiLCBfX2Z1bmNfXyk7CiB9CkBAIC0xMDQ2LDcgKzEwNDgsOCBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIGV4aXQ6CiAJZGJnKDIsICIlczogbGVhdmUsIHJldHVybiB2YWx1ZSAlZCIsIF9fZnVuY19fLCByZXR2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwppbmRleCA0Y2ZhMjViLi5jYzhlMGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwpAQCAtNTk1LDkgKzU5NSw4IEBACiAgICAgICAgIH0gd2hpbGUodmFsdWUpOwogICAgICAgICBraXQtPmRldl9ubyA9IGJpdDsKIAotCWtpdC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHBoaWRnZXRfY2xhc3MsICZraXQtPnVkZXYtPmRldiwKLQkJCQkJTUtERVYoMCwgMCksIGtpdCwKLQkJCQkJImludGVyZmFjZWtpdCVkIiwga2l0LT5kZXZfbm8pOworCWtpdC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwaGlkZ2V0X2NsYXNzLCAma2l0LT51ZGV2LT5kZXYsIE1LREVWKDAsIDApLAorCQkJCSBraXQsICJpbnRlcmZhY2VraXQlZCIsIGtpdC0+ZGV2X25vKTsKICAgICAgICAgaWYgKElTX0VSUihraXQtPmRldikpIHsKICAgICAgICAgICAgICAgICByYyA9IFBUUl9FUlIoa2l0LT5kZXYpOwogICAgICAgICAgICAgICAgIGtpdC0+ZGV2ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldG1vdG9yY29udHJvbC5jIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0bW90b3Jjb250cm9sLmMKaW5kZXggOWI0Njk2Zi4uMzgwODhiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0bW90b3Jjb250cm9sLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0bW90b3Jjb250cm9sLmMKQEAgLTM2NSw5ICszNjUsOCBAQAogCX0gd2hpbGUodmFsdWUpOwogCW1jLT5kZXZfbm8gPSBiaXQ7CiAKLQltYy0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHBoaWRnZXRfY2xhc3MsICZtYy0+dWRldi0+ZGV2LAotCQkJCQlNS0RFVigwLCAwKSwgbWMsCi0JCQkJCSJtb3RvcmNvbnRyb2wlZCIsIG1jLT5kZXZfbm8pOworCW1jLT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBoaWRnZXRfY2xhc3MsICZtYy0+dWRldi0+ZGV2LCBNS0RFVigwLCAwKSwgbWMsCisJCQkJIm1vdG9yY29udHJvbCVkIiwgbWMtPmRldl9ubyk7CiAJaWYgKElTX0VSUihtYy0+ZGV2KSkgewogCQlyYyA9IFBUUl9FUlIobWMtPmRldik7CiAJCW1jLT5kZXYgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMKaW5kZXggMWNhN2RkYi4uYmVmNmZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jCkBAIC0yNzUsOSArMjc1LDggQEAKICAgICAgICAgfSB3aGlsZSAodmFsdWUpOwogCWRldi0+ZGV2X25vID0gYml0OwogCi0JZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEocGhpZGdldF9jbGFzcywgJmRldi0+dWRldi0+ZGV2LAotCQkJCQkgTUtERVYoMCwgMCksIGRldiwKLQkJCQkJICJzZXJ2byVkIiwgZGV2LT5kZXZfbm8pOworCWRldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwaGlkZ2V0X2NsYXNzLCAmZGV2LT51ZGV2LT5kZXYsIE1LREVWKDAsIDApLAorCQkJCSBkZXYsICJzZXJ2byVkIiwgZGV2LT5kZXZfbm8pOwogCWlmIChJU19FUlIoZGV2LT5kZXYpKSB7CiAJCXJjID0gUFRSX0VSUihkZXYtPmRldik7CiAJCWRldi0+ZGV2ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCmluZGV4IDI0OGExMmEuLmRlYjk1YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYwpAQCAtODksNyArODksNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCYocmlvLT5sb2NrKSk7CiAKLQlpbmZvKCJSaW8gb3BlbmVkLiIpOworCWRldl9pbmZvKCZyaW8tPnJpb19kZXYtPmRldiwgIlJpbyBvcGVuZWQuXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTAwLDcgKzEwMCw3IEBACiAKIAlyaW8tPmlzb3BlbiA9IDA7CiAKLQlpbmZvKCJSaW8gY2xvc2VkLiIpOworCWRldl9pbmZvKCZyaW8tPnJpb19kZXYtPmRldiwgIlJpbyBjbG9zZWQuXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDUxLDcgKzQ1MSw3IEBACiAJc3RydWN0IHJpb191c2JfZGF0YSAqcmlvID0gJnJpb19pbnN0YW5jZTsKIAlpbnQgcmV0dmFsOwogCi0JaW5mbygiVVNCIFJpbyBmb3VuZCBhdCBhZGRyZXNzICVkIiwgZGV2LT5kZXZudW0pOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJVU0IgUmlvIGZvdW5kIGF0IGFkZHJlc3MgJWRcbiIsIGRldi0+ZGV2bnVtKTsKIAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYl9yaW9fY2xhc3MpOwogCWlmIChyZXR2YWwpIHsKQEAgLTUwMyw3ICs1MDMsNyBAQAogCQlrZnJlZShyaW8tPmlidWYpOwogCQlrZnJlZShyaW8tPm9idWYpOwogCi0JCWluZm8oIlVTQiBSaW8gZGlzY29ubmVjdGVkLiIpOworCQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiVVNCIFJpbyBkaXNjb25uZWN0ZWQuXG4iKTsKIAogCQlyaW8tPnByZXNlbnQgPSAwOwogCQltdXRleF91bmxvY2soJihyaW8tPmxvY2spKTsKQEAgLTUzMSw3ICs1MzEsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy90cmFuY2V2aWJyYXRvci5jIGIvZHJpdmVycy91c2IvbWlzYy90cmFuY2V2aWJyYXRvci5jCmluZGV4IDAzMzY4ZWQuLjJlMTQxMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdHJhbmNldmlicmF0b3IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3RyYW5jZXZpYnJhdG9yLmMKQEAgLTE0NCw3ICsxNDQsOCBAQAogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwppbmRleCAyZGI0MjI4Li5lMGZmOWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKQEAgLTMxMSw3ICszMTEsNyBAQAogCWRldi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOwogCiAJaWYgKGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4MDAwMSkgewotCQl3YXJuKEtFUk5fSU5GTyAiVVNCTENEIG1vZGVsIG5vdCBzdXBwb3J0ZWQuIik7CisJCWRldl93YXJuKCZpbnRlcmZhY2UtPmRldiwgIlVTQkxDRCBtb2RlbCBub3Qgc3VwcG9ydGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAkKQEAgLTM1OSwxMiArMzU5LDEzIEBACiAKIAlpID0gbGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CiAKLQlpbmZvKCJVU0JMQ0QgVmVyc2lvbiAlMWQlMWQuJTFkJTFkIGZvdW5kIGF0IGFkZHJlc3MgJWQiLAotCQkoaSAmIDB4RjAwMCk+PjEyLChpICYgMHhGMDApPj44LChpICYgMHhGMCk+PjQsKGkgJiAweEYpLAotCQlkZXYtPnVkZXYtPmRldm51bSk7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCTENEIFZlcnNpb24gJTFkJTFkLiUxZCUxZCBmb3VuZCAiCisJCSAiYXQgYWRkcmVzcyAlZFxuIiwgKGkgJiAweEYwMDApPj4xMiwgKGkgJiAweEYwMCk+PjgsCisJCSAoaSAmIDB4RjApPj40LChpICYgMHhGKSwgZGV2LT51ZGV2LT5kZXZudW0pOwogCiAJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLwotCWluZm8oIlVTQiBMQ0QgZGV2aWNlIG5vdyBhdHRhY2hlZCB0byBVU0JMQ0QtJWQiLCBpbnRlcmZhY2UtPm1pbm9yKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgTENEIGRldmljZSBub3cgYXR0YWNoZWQgdG8gVVNCTENELSVkXG4iLAorCQkgaW50ZXJmYWNlLT5taW5vcik7CiAJcmV0dXJuIDA7CiAKIGVycm9yOgpAQCAtNDEzLDcgKzQxNCw3IEBACiAJLyogZGVjcmVtZW50IG91ciB1c2FnZSBjb3VudCAqLwogCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGxjZF9kZWxldGUpOwogCi0JaW5mbygiVVNCIExDRCAjJWQgbm93IGRpc2Nvbm5lY3RlZCIsIG1pbm9yKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgTENEICMlZCBub3cgZGlzY29ubmVjdGVkXG4iLCBtaW5vcik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBsY2RfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JzZXZzZWcuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNic2V2c2VnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhNmEzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNic2V2c2VnLmMKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisgKiBVU0IgNyBTZWdtZW50IERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBIYXJyaXNvbiBNZXR6Z2VyIDxoYXJyaXNvbm1ldHpAZ21haWwuY29tPgorICogQmFzZWQgb24gdXNibGVkLmMgYnkgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkhhcnJpc29uIE1ldHpnZXIgPGhhcnJpc29ubWV0ekBnbWFpbC5jb20+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIDcgU2VnbWVudCBEcml2ZXIiCisKKyNkZWZpbmUgVkVORE9SX0lECTB4MGZjNQorI2RlZmluZSBQUk9EVUNUX0lECTB4MTIyNworI2RlZmluZSBNQVhMRU4JCTYKKworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKFZFTkRPUl9JRCwgUFJPRFVDVF9JRCkgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworLyogdGhlIGRpZmZlcmVudCB0ZXh0IGRpc3BsYXkgbW9kZXMgdGhlIGRldmljZSBpcyBjYXBhYmxlIG9mICovCitzdGF0aWMgY2hhciAqZGlzcGxheV90ZXh0bW9kZXNbXSA9IHsicmF3IiwgImhleCIsICJhc2NpaSIsIE5VTEx9OworCitzdHJ1Y3QgdXNiX3NldnNlZ2RldiB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisKKwl1OCBwb3dlcmVkOworCXU4IG1vZGVfbXNiOworCXU4IG1vZGVfbHNiOworCXU4IGRlY2ltYWxzW01BWExFTl07CisJdTggdGV4dG1vZGU7CisJdTggdGV4dFtNQVhMRU5dOworCXUxNiB0ZXh0bGVuZ3RoOworfTsKKworLyogc3lzZnNfc3RyZXEgY2FuJ3QgcmVwbGFjZSB0aGlzIGNvbXBsZXRlbHkKKyAqIElmIHRoZSBkZXZpY2Ugd2FzIGluIGhleCBtb2RlLCBhbmQgdGhlIHVzZXIgd2FudGVkIGEgMCwKKyAqIGlmIHN0ciBjb21tYW5kcyBhcmUgdXNlZCwgd2Ugd291bGQgYXNzdW1lIHRoZSBlbmQgb2Ygc3RyaW5nCisgKiBzbyBtZW0gY29tbWFuZHMgYXJlIHVzZWQuCisgKi8KK2lubGluZSBzaXplX3QgbXlfbWVtbGVuKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWlmIChjb3VudCA+IDAgJiYgYnVmW2NvdW50LTFdID09ICdcbicpCisJCXJldHVybiBjb3VudCAtIDE7CisJZWxzZQorCQlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9kaXNwbGF5X3Bvd2VyZWQoc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2KQoreworCWludCByYzsKKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKG15ZGV2LT51ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKG15ZGV2LT51ZGV2LCAwKSwKKwkJCTB4MTIsCisJCQkweDQ4LAorCQkJKDgwICogMHgxMDApICsgMTAsIC8qICAocG93ZXIgbW9kZSkgKi8KKwkJCSgweDAwICogMHgxMDApICsgKG15ZGV2LT5wb3dlcmVkID8gMSA6IDApLAorCQkJTlVMTCwKKwkJCTAsCisJCQkyMDAwKTsKKwlpZiAocmMgPCAwKQorCQlkZXZfZGJnKCZteWRldi0+dWRldi0+ZGV2LCAicG93ZXIgcmV0dmFsID0gJWRcbiIsIHJjKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2Rpc3BsYXlfbW9kZShzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYpCit7CisJaW50IHJjOworCisJcmMgPSB1c2JfY29udHJvbF9tc2cobXlkZXYtPnVkZXYsCisJCQl1c2Jfc25kY3RybHBpcGUobXlkZXYtPnVkZXYsIDApLAorCQkJMHgxMiwKKwkJCTB4NDgsCisJCQkoODIgKiAweDEwMCkgKyAxMCwgLyogKHNldCBtb2RlKSAqLworCQkJKG15ZGV2LT5tb2RlX21zYiAqIDB4MTAwKSArIG15ZGV2LT5tb2RlX2xzYiwKKwkJCU5VTEwsCisJCQkwLAorCQkJMjAwMCk7CisKKwlpZiAocmMgPCAwKQorCQlkZXZfZGJnKCZteWRldi0+dWRldi0+ZGV2LCAibW9kZSByZXR2YWwgPSAlZFxuIiwgcmMpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZGlzcGxheV92aXN1YWwoc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2KQoreworCWludCByYzsKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdTggZGVjaW1hbHMgPSAwOworCisJYnVmZmVyID0ga3phbGxvYyhNQVhMRU4sIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJm15ZGV2LT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFRoZSBkZXZpY2UgaXMgcmlnaHQgdG8gbGVmdCwgd2hlcmUgYXMgeW91IHdyaXRlIGxlZnQgdG8gcmlnaHQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbXlkZXYtPnRleHRsZW5ndGg7IGkrKykKKwkJYnVmZmVyW2ldID0gbXlkZXYtPnRleHRbbXlkZXYtPnRleHRsZW5ndGgtMS1pXTsKKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKG15ZGV2LT51ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKG15ZGV2LT51ZGV2LCAwKSwKKwkJCTB4MTIsCisJCQkweDQ4LAorCQkJKDg1ICogMHgxMDApICsgMTAsIC8qICh3cml0ZSB0ZXh0KSAqLworCQkJKDAgKiAweDEwMCkgKyBteWRldi0+dGV4dG1vZGUsIC8qIG1vZGUgICovCisJCQlidWZmZXIsCisJCQlteWRldi0+dGV4dGxlbmd0aCwKKwkJCTIwMDApOworCisJaWYgKHJjIDwgMCkKKwkJZGV2X2RiZygmbXlkZXYtPnVkZXYtPmRldiwgIndyaXRlIHJldHZhbCA9ICVkXG4iLCByYyk7CisKKwlrZnJlZShidWZmZXIpOworCisJLyogVGhlIGRldmljZSBpcyByaWdodCB0byBsZWZ0LCB3aGVyZSBhcyB5b3Ugd3JpdGUgbGVmdCB0byByaWdodCAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YobXlkZXYtPmRlY2ltYWxzKTsgaSsrKQorCQlkZWNpbWFscyB8PSBteWRldi0+ZGVjaW1hbHNbaV0gPDwgaTsKKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKG15ZGV2LT51ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKG15ZGV2LT51ZGV2LCAwKSwKKwkJCTB4MTIsCisJCQkweDQ4LAorCQkJKDg2ICogMHgxMDApICsgMTAsIC8qIChzZXQgZGVjaW1hbCkgKi8KKwkJCSgwICogMHgxMDApICsgZGVjaW1hbHMsIC8qIGRlY2ltYWxzICovCisJCQlOVUxMLAorCQkJMCwKKwkJCTIwMDApOworCisJaWYgKHJjIDwgMCkKKwkJZGV2X2RiZygmbXlkZXYtPnVkZXYtPmRldiwgImRlY2ltYWwgcmV0dmFsID0gJWRcbiIsIHJjKTsKK30KKworI2RlZmluZSBNWURFVl9BVFRSX1NJTVBMRV9VTlNJR05FRChuYW1lLCB1cGRhdGVfZmNuKQkJXAorc3RhdGljIHNzaXplX3Qgc2hvd19hdHRyXyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJXAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIAkJXAorewkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwlcCisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJXAorCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIG15ZGV2LT5uYW1lKTsJCVwKK30JCQkJCQkJCVwKKwkJCQkJCQkJXAorc3RhdGljIHNzaXplX3Qgc2V0X2F0dHJfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgCQlcCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSBcCit7CQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CVwKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCisJCQkJCQkJCVwKKwlteWRldi0+bmFtZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJXAorCXVwZGF0ZV9mY24obXlkZXYpOyBcCisJCQkJCQkJCVwKKwlyZXR1cm4gY291bnQ7CQkJCQkJXAorfQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVdVR08gfCBTX0lSVUdPLCBzaG93X2F0dHJfIyNuYW1lLCBzZXRfYXR0cl8jI25hbWUpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2F0dHJfdGV4dChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgbXlkZXYtPnRleHRsZW5ndGgsICIlc1xuIiwgbXlkZXYtPnRleHQpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfYXR0cl90ZXh0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzaXplX3QgZW5kID0gbXlfbWVtbGVuKGJ1ZiwgY291bnQpOworCisJaWYgKGVuZCA+IHNpemVvZihteWRldi0+dGV4dCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KG15ZGV2LT50ZXh0LCAwLCBzaXplb2YobXlkZXYtPnRleHQpKTsKKwlteWRldi0+dGV4dGxlbmd0aCA9IGVuZDsKKworCWlmIChlbmQgPiAwKQorCQltZW1jcHkobXlkZXYtPnRleHQsIGJ1ZiwgZW5kKTsKKworCXVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChteWRldik7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodGV4dCwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfYXR0cl90ZXh0LCBzZXRfYXR0cl90ZXh0KTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19hdHRyX2RlY2ltYWxzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IGk7CisJaW50IHBvczsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YobXlkZXYtPmRlY2ltYWxzKTsgaSsrKSB7CisJCXBvcyA9IHNpemVvZihteWRldi0+ZGVjaW1hbHMpIC0gMSAtIGk7CisJCWlmIChteWRldi0+ZGVjaW1hbHNbaV0gPT0gMCkKKwkJCWJ1Zltwb3NdID0gJzAnOworCQllbHNlIGlmIChteWRldi0+ZGVjaW1hbHNbaV0gPT0gMSkKKwkJCWJ1Zltwb3NdID0gJzEnOworCQllbHNlCisJCQlidWZbcG9zXSA9ICd4JzsKKwl9CisKKwlidWZbc2l6ZW9mKG15ZGV2LT5kZWNpbWFscyldID0gJ1xuJzsKKwlyZXR1cm4gc2l6ZW9mKG15ZGV2LT5kZWNpbWFscykgKyAxOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfYXR0cl9kZWNpbWFscyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc2l6ZV90IGVuZCA9IG15X21lbWxlbihidWYsIGNvdW50KTsKKwlpbnQgaTsKKworCWlmIChlbmQgPiBzaXplb2YobXlkZXYtPmRlY2ltYWxzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW5kOyBpKyspCisJCWlmIChidWZbaV0gIT0gJzAnICYmIGJ1ZltpXSAhPSAnMScpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChteWRldi0+ZGVjaW1hbHMsIDAsIHNpemVvZihteWRldi0+ZGVjaW1hbHMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgZW5kOyBpKyspCisJCWlmIChidWZbaV0gPT0gJzEnKQorCQkJbXlkZXYtPmRlY2ltYWxzW2VuZC0xLWldID0gMTsKKworCXVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChteWRldik7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWNpbWFscywgU19JV1VHTyB8IFNfSVJVR08sCisJc2hvd19hdHRyX2RlY2ltYWxzLCBzZXRfYXR0cl9kZWNpbWFscyk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYXR0cl90ZXh0bW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCBpOworCisJYnVmWzBdID0gMDsKKworCWZvciAoaSA9IDA7IGRpc3BsYXlfdGV4dG1vZGVzW2ldOyBpKyspIHsKKwkJaWYgKG15ZGV2LT50ZXh0bW9kZSA9PSBpKSB7CisJCQlzdHJjYXQoYnVmLCAiIFsiKTsKKwkJCXN0cmNhdChidWYsIGRpc3BsYXlfdGV4dG1vZGVzW2ldKTsKKwkJCXN0cmNhdChidWYsICJdICIpOworCQl9IGVsc2UgeworCQkJc3RyY2F0KGJ1ZiwgIiAiKTsKKwkJCXN0cmNhdChidWYsIGRpc3BsYXlfdGV4dG1vZGVzW2ldKTsKKwkJCXN0cmNhdChidWYsICIgIik7CisJCX0KKwl9CisJc3RyY2F0KGJ1ZiwgIlxuIik7CisKKworCXJldHVybiBzdHJsZW4oYnVmKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2F0dHJfdGV4dG1vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCBpOworCisJZm9yIChpID0gMDsgZGlzcGxheV90ZXh0bW9kZXNbaV07IGkrKykgeworCQlpZiAoc3lzZnNfc3RyZXEoZGlzcGxheV90ZXh0bW9kZXNbaV0sIGJ1ZikpIHsKKwkJCW15ZGV2LT50ZXh0bW9kZSA9IGk7CisJCQl1cGRhdGVfZGlzcGxheV92aXN1YWwobXlkZXYpOworCQkJcmV0dXJuIGNvdW50OworCQl9CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZXh0bW9kZSwgU19JV1VHTyB8IFNfSVJVR08sCisJc2hvd19hdHRyX3RleHRtb2RlLCBzZXRfYXR0cl90ZXh0bW9kZSk7CisKKworTVlERVZfQVRUUl9TSU1QTEVfVU5TSUdORUQocG93ZXJlZCwgdXBkYXRlX2Rpc3BsYXlfcG93ZXJlZCk7CitNWURFVl9BVFRSX1NJTVBMRV9VTlNJR05FRChtb2RlX21zYiwgdXBkYXRlX2Rpc3BsYXlfbW9kZSk7CitNWURFVl9BVFRSX1NJTVBMRV9VTlNJR05FRChtb2RlX2xzYiwgdXBkYXRlX2Rpc3BsYXlfbW9kZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfcG93ZXJlZC5hdHRyLAorCSZkZXZfYXR0cl90ZXh0LmF0dHIsCisJJmRldl9hdHRyX3RleHRtb2RlLmF0dHIsCisJJmRldl9hdHRyX2RlY2ltYWxzLmF0dHIsCisJJmRldl9hdHRyX21vZGVfbXNiLmF0dHIsCisJJmRldl9hdHRyX21vZGVfbHNiLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGV2X2F0dHJfZ3JwID0geworCS5hdHRycyA9IGRldl9hdHRycywKK307CisKK3N0YXRpYyBpbnQgc2V2c2VnX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IE5VTEw7CisJaW50IHJjID0gLUVOT01FTTsKKworCW15ZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9zZXZzZWdkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAobXlkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGVycm9yX21lbTsKKwl9CisKKwlteWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBteWRldik7CisKKwkvKnNldCBkZWZhdWx0cyAqLworCW15ZGV2LT50ZXh0bW9kZSA9IDB4MDI7IC8qIGFzY2lpIG1vZGUgKi8KKwlteWRldi0+bW9kZV9tc2IgPSAweDA2OyAvKiA2IGNoYXJhY3RlcnMgKi8KKwlteWRldi0+bW9kZV9sc2IgPSAweDNmOyAvKiBzY2FubW9kZSBmb3IgNiBjaGFycyAqLworCisJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmludGVyZmFjZS0+ZGV2LmtvYmosICZkZXZfYXR0cl9ncnApOworCWlmIChyYykKKwkJZ290byBlcnJvcjsKKworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiA3IFNlZ21lbnQgZGV2aWNlIG5vdyBhdHRhY2hlZFxuIik7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwl1c2JfcHV0X2RldihteWRldi0+dWRldik7CisJa2ZyZWUobXlkZXYpOworZXJyb3JfbWVtOgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgc2V2c2VnX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXY7CisKKwlteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGVyZmFjZS0+ZGV2LmtvYmosICZkZXZfYXR0cl9ncnApOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwl1c2JfcHV0X2RldihteWRldi0+dWRldik7CisJa2ZyZWUobXlkZXYpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiA3IFNlZ21lbnQgbm93IGRpc2Nvbm5lY3RlZFxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZXZzZWdfZHJpdmVyID0geworCS5uYW1lID0JCSJ1c2JzZXZzZWciLAorCS5wcm9iZSA9CXNldnNlZ19wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXNldnNlZ19kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiX3NldnNlZ19pbml0KHZvaWQpCit7CisJaW50IHJjID0gMDsKKworCXJjID0gdXNiX3JlZ2lzdGVyKCZzZXZzZWdfZHJpdmVyKTsKKwlpZiAocmMpCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9zZXZzZWdfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZXZzZWdfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX3NldnNlZ19pbml0KTsKK21vZHVsZV9leGl0KHVzYl9zZXZzZWdfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKaW5kZXggZjEyNTViMC4uOWE2YzI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCkBAIC0yMjgsMTEgKzIyOCwxMiBAQAogCQlyZXQgPSBycS0+dXJiLT5zdGF0dXM7CiAJCSp2YWwgPSBwcml2LT5yZWdbKHJlZyA+PSA5KSA/IDAgOiByZWdpbmRleFtyZWddXTsKIAkJaWYgKHJldCkKLQkJCXdhcm4oImdldF8xMjg0X3JlZ2lzdGVyOiB1c2IgZXJyb3IgJWQiLCByZXQpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZ2V0XzEyODRfcmVnaXN0ZXI6ICIKKwkJCSAgICAgICAidXNiIGVycm9yICVkXG4iLCByZXQpOwogCQlrcmVmX3B1dCgmcnEtPnJlZl9jb3VudCwgZGVzdHJveV9hc3luYyk7CiAJCXJldHVybiByZXQ7CiAJfQotCXdhcm4oImdldF8xMjg0X3JlZ2lzdGVyIHRpbWVvdXQiKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJnZXRfMTI4NF9yZWdpc3RlciB0aW1lb3V0XG4iKTsKIAlraWxsX2FsbF9hc3luY19yZXF1ZXN0c19wcml2KHByaXYpOwogCXJldHVybiAtRUlPOwogfQpAQCAtNzE2LDcgKzcxNyw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmFzeW5jbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmFzeW5jbGlzdCk7CiAJaWYgKCEocHAgPSBwYXJwb3J0X3JlZ2lzdGVyX3BvcnQoMCwgUEFSUE9SVF9JUlFfTk9ORSwgUEFSUE9SVF9ETUFfTk9ORSwgJnBhcnBvcnRfdXNzNzIwX29wcykpKSB7Ci0JCXdhcm4oImNvdWxkIG5vdCByZWdpc3RlciBwYXJwb3J0Iik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzczcyMDogY291bGQgbm90IHJlZ2lzdGVyIHBhcnBvcnRcbiIpOwogCQlnb3RvIHByb2JlX2Fib3J0OwogCX0KIApAQCAtODAwLDEwICs4MDEsMTQgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dDsKIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKLQlpbmZvKCJOT1RFOiB0aGlzIGlzIGEgc3BlY2lhbCBwdXJwb3NlIGRyaXZlciB0byBhbGxvdyBub25zdGFuZGFyZCIpOwotCWluZm8oInByb3RvY29scyAoZWcuIGJpdGJhbmcpIG92ZXIgVVNTNzIwIHVzYiB0byBwYXJhbGxlbCBjYWJsZXMiKTsKLQlpbmZvKCJJZiB5b3UganVzdCB3YW50IHRvIGNvbm5lY3QgdG8gYSBwcmludGVyLCB1c2UgdXNibHAgaW5zdGVhZCIpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBOT1RFOiB0aGlzIGlzIGEgc3BlY2lhbCBwdXJwb3NlICIKKwkgICAgICAgImRyaXZlciB0byBhbGxvdyBub25zdGFuZGFyZFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBwcm90b2NvbHMgKGVnLiBiaXRiYW5nKSBvdmVyICIKKwkgICAgICAgIlVTUzcyMCB1c2IgdG8gcGFyYWxsZWwgY2FibGVzXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IElmIHlvdSBqdXN0IHdhbnQgdG8gY29ubmVjdCB0byBhICIKKwkgICAgICAgInByaW50ZXIsIHVzZSB1c2JscCBpbnN0ZWFkXG4iKTsKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy92c3R1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY0ODQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmMKQEAgLTAsMCArMSw3ODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEZpbGU6IGRyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmMKKyAqCisgKiAgUHVycG9zZTogU3VwcG9ydCBmb3IgdGhlIGJ1bGsgVVNCIFZlcm5pZXIgU3BlY3Ryb3Bob3RvbWV0ZXJzCisgKgorICogIEF1dGhvcjogICAgIEpvaG5uaWUgUGV0ZXJzCisgKiAgICAgICAgICAgICAgQXhpYW4gQ29uc3VsdGluZworICogICAgICAgICAgICAgIEJlYXZlcnRvbiwgT1IsIFVTQSA5NzAwNQorICoKKyAqICBNb2RpZmllZCBieTogICAgIEVRd2FyZSBFbmdpbmVlcmluZywgSW5jLgorICogICAgICAgICAgICAgICAgICAgT3JlZ29uIENpdHksIE9SLCBVU0EgOTcwNDUKKyAqCisgKiAgQ29weXJpZ2h0OiAgMjAwNywgMjAwOAorICogICAgICAgICAgICAgIFZlcm5pZXIgU29mdHdhcmUgJiBUZWNobm9sb2d5CisgKiAgICAgICAgICAgICAgQmVhdmVydG9uLCBPUiwgVVNBIDk3MDA1CisgKgorICogIFdlYjogICAgICAgIHd3dy52ZXJuaWVyLmNvbQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYi92c3R1c2IuaD4KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiVlNUIFVTQiBEcml2ZXIgVmVyc2lvbiAxLjUiCisjZGVmaW5lIERSSVZFUl9ERVNDICJWZXJuaWVyIFNvZnR3YXJlIFRlY2hub2xvZ3kgQnVsayBVU0IgRHJpdmVyIgorCisjaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUworCSNkZWZpbmUgVlNUVVNCX01JTk9SX0JBU0UJMAorI2Vsc2UKKwkjZGVmaW5lIFZTVFVTQl9NSU5PUl9CQVNFCTE5OQorI2VuZGlmCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9PQ0VBTk9QVElDUwkweDI0NTcKKyNkZWZpbmUgVVNCX1ZFTkRPUl9WRVJOSUVSCTB4MDhGNwkvKiBWZXJuaWVyIFNvZnR3YXJlICYgVGVjaG5vbG9neSAqLworCisjZGVmaW5lIFVTQl9QUk9EVUNUX1VTQjIwMDAJMHgxMDAyCisjZGVmaW5lIFVTQl9QUk9EVUNUX0FEQzEwMDBfRlcJMHgxMDAzCS8qIGZpcm13YXJlIGRvd25sb2FkIChyZW51bWVyYXRlcykgKi8KKyNkZWZpbmUgVVNCX1BST0RVQ1RfQURDMTAwMAkweDEwMDQKKyNkZWZpbmUgVVNCX1BST0RVQ1RfSFIyMDAwX0ZXCTB4MTAwOQkvKiBmaXJtd2FyZSBkb3dubG9hZCAocmVudW1lcmF0ZXMpICovCisjZGVmaW5lIFVTQl9QUk9EVUNUX0hSMjAwMAkweDEwMEEKKyNkZWZpbmUgVVNCX1BST0RVQ1RfSFI0MDAwX0ZXCTB4MTAxMQkvKiBmaXJtd2FyZSBkb3dubG9hZCAocmVudW1lcmF0ZXMpICovCisjZGVmaW5lIFVTQl9QUk9EVUNUX0hSNDAwMAkweDEwMTIKKyNkZWZpbmUgVVNCX1BST0RVQ1RfVVNCNjUwCTB4MTAxNAkvKiAiUmVkIFRpZGUiICovCisjZGVmaW5lIFVTQl9QUk9EVUNUX1FFNjUwMDAJMHgxMDE4CisjZGVmaW5lIFVTQl9QUk9EVUNUX1VTQjQwMDAJMHgxMDIyCisjZGVmaW5lIFVTQl9QUk9EVUNUX1VTQjMyNQkweDEwMjQJLyogIlZlcm5pZXIgU3BlY3Ryb21ldGVyIiAqLworCisjZGVmaW5lIFVTQl9QUk9EVUNUX0xBQlBSTwkweDAwMDEKKyNkZWZpbmUgVVNCX1BST0RVQ1RfTEFCUVVFU1QJMHgwMDA1CisKKyNkZWZpbmUgVlNUX01BWEJVRkZFUgkJKDY0KjEwMjQpCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0IyMDAwKX0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfT0NFQU5PUFRJQ1MsIFVTQl9QUk9EVUNUX0hSNDAwMCl9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0I2NTApfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9PQ0VBTk9QVElDUywgVVNCX1BST0RVQ1RfVVNCNDAwMCl9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0IzMjUpfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9WRVJOSUVSLCBVU0JfUFJPRFVDVF9MQUJRVUVTVCl9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX1ZFUk5JRVIsIFVTQl9QUk9EVUNUX0xBQlBSTyl9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworc3RydWN0IHZzdHVzYl9kZXZpY2UgeworCXN0cnVjdCBrcmVmCQkJCWtyZWY7CisJc3RydWN0IG11dGV4ICAgICAgICAgICAgbG9jazsKKwlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqdXNiX2RldjsKKwljaGFyICAgICAgICAgICAgICAgICAgICBwcmVzZW50OworCWNoYXIgICAgICAgICAgICAgICAgICAgIGlzb3BlbjsKKwlzdHJ1Y3QgdXNiX2FuY2hvciAgICAgICBzdWJtaXR0ZWQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgcmRfcGlwZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICByZF90aW1lb3V0X21zOworCWludCAgICAgICAgICAgICAgICAgICAgIHdyX3BpcGU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgd3JfdGltZW91dF9tczsKK307CisjZGVmaW5lIHRvX3ZzdF9kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB2c3R1c2JfZGV2aWNlLCBrcmVmKQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdnN0dXNiX2RyaXZlcjsKKworc3RhdGljIHZvaWQgdnN0dXNiX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2ID0gdG9fdnN0X2RldihrcmVmKTsKKworCXVzYl9wdXRfZGV2KHZzdGRldi0+dXNiX2Rldik7CisJa2ZyZWUodnN0ZGV2KTsKK30KKworc3RhdGljIGludCB2c3R1c2Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisKKwlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJnZzdHVzYl9kcml2ZXIsIGltaW5vcihpbm9kZSkpOworCisJaWYgKCFpbnRlcmZhY2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiAlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgaW1pbm9yKGlub2RlKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXZzdGRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCWlmICghdnN0ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGxvY2sgdGhpcyBkZXZpY2UgKi8KKwltdXRleF9sb2NrKCZ2c3RkZXYtPmxvY2spOworCisJLyogY2FuIG9ubHkgb3BlbiBvbmUgdGltZSAqLworCWlmICgoIXZzdGRldi0+cHJlc2VudCkgfHwgKHZzdGRldi0+aXNvcGVuKSkgeworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogaW5jcmVtZW50IG91ciB1c2FnZSBjb3VudCAqLworCWtyZWZfZ2V0KCZ2c3RkZXYtPmtyZWYpOworCisJdnN0ZGV2LT5pc29wZW4gPSAxOworCisJLyogc2F2ZSBkZXZpY2UgaW4gdGhlIGZpbGUncyBwcml2YXRlIHN0cnVjdHVyZSAqLworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHZzdGRldjsKKworCWRldl9kYmcoJnZzdGRldi0+dXNiX2Rldi0+ZGV2LCAiJXM6IG9wZW5lZFxuIiwgX19mdW5jX18pOworCisJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnN0dXNiX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldjsKKworCXZzdGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmICh2c3RkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZ2c3RkZXYtPmxvY2spOworCisJdnN0ZGV2LT5pc29wZW4gPSAwOworCisJZGV2X2RiZygmdnN0ZGV2LT51c2JfZGV2LT5kZXYsICIlczogcmVsZWFzZWRcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKworCWtyZWZfcHV0KCZ2c3RkZXYtPmtyZWYsIHZzdHVzYl9kZWxldGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRlaXQgPSB1cmItPmNvbnRleHQ7CisKKwljb21wbGV0ZShjb21wbGV0ZWl0KTsKK30KKworc3RhdGljIGludCB2c3R1c2JfZmlsbF9hbmRfc2VuZF91cmIoc3RydWN0IHVyYiAqdXJiLAorCQkJCSAgICBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJCQkgICAgdW5zaWduZWQgaW50IHBpcGUsIHZvaWQgKmRhdGEsCisJCQkJICAgIHVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBjb21wbGV0aW9uICpkb25lKQoreworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICoqaG9zdGVwOworCXVuc2lnbmVkIGludCBwaXBlbmQ7CisKKwlpbnQgc3RhdHVzOworCisJaG9zdGVwID0gdXNiX3BpcGVpbihwaXBlKSA/IHVzYl9kZXYtPmVwX2luIDogdXNiX2Rldi0+ZXBfb3V0OworCXBpcGVuZCA9IHVzYl9waXBlZW5kcG9pbnQocGlwZSk7CisJZXAgPSBob3N0ZXBbcGlwZW5kXTsKKworCWlmICghZXAgfHwgKGxlbiA9PSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKGVwLT5kZXNjLmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCSAgICA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKwkJcGlwZSA9IChwaXBlICYgfigzIDw8IDMwKSkgfCAoUElQRV9JTlRFUlJVUFQgPDwgMzApOworCQl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgdXNiX2RldiwgcGlwZSwgZGF0YSwgbGVuLAorCQkJCSAodXNiX2NvbXBsZXRlX3QpdXNiX2FwaV9ibG9ja2luZ19jb21wbGV0aW9uLAorCQkJCSBOVUxMLCBlcC0+ZGVzYy5iSW50ZXJ2YWwpOworCX0gZWxzZQorCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsIGRhdGEsIGxlbiwKKwkJCQkgICh1c2JfY29tcGxldGVfdCl1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sCisJCQkJICBOVUxMKTsKKworCWluaXRfY29tcGxldGlvbihkb25lKTsKKwl1cmItPmNvbnRleHQgPSBkb25lOworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgdnN0dXNiX2NvbXBsZXRlX3VyYihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBjb21wbGV0aW9uICpkb25lLAorCQkJICAgICAgIGludCB0aW1lb3V0LCBpbnQgKmFjdHVhbF9sZW5ndGgpCit7CisJdW5zaWduZWQgbG9uZyBleHBpcmU7CisJaW50IHN0YXR1czsKKworCWV4cGlyZSA9IHRpbWVvdXQgPyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpIDogTUFYX1NDSEVEVUxFX1RJTUVPVVQ7CisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dChkb25lLCBleHBpcmUpKSB7CisJCXVzYl9raWxsX3VyYih1cmIpOworCQlzdGF0dXMgPSB1cmItPnN0YXR1cyA9PSAtRU5PRU5UID8gLUVUSU1FRE9VVCA6IHVyYi0+c3RhdHVzOworCisJCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsCisJCQkiJXMgdGltZWQgb3V0IG9uIGVwJWQlcyBsZW49JWQvJWQsIHVyYiBzdGF0dXMgPSAlZFxuIiwKKwkJCWN1cnJlbnQtPmNvbW0sCisJCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQl1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQl1cmItPnN0YXR1cyk7CisKKwl9IGVsc2UgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCS8qIGlmIHJlYWxseSBhbiBlcnJvciAqLworCQkJaWYgKHVyYi0+c3RhdHVzICYmICEoKHVyYi0+c3RhdHVzID09IC1FTk9FTlQpICAgICB8fAorCQkJCQkgICAgICh1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkgfHwKKwkJCQkJICAgICAodXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpKSB7CisJCQkJc3RhdHVzID0gLUVJTlRSOworCQkJCXVzYl9raWxsX3VyYih1cmIpOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSAwOworCQkJfQorCisJCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LAorCQkJCSIlczogc2lnbmFsIHBlbmRpbmcgb24gZXAlZCVzIGxlbj0lZC8lZCwiCisJCQkJInVyYiBzdGF0dXMgPSAlZFxuIiwKKwkJCQljdXJyZW50LT5jb21tLAorCQkJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCQl1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQl1cmItPnN0YXR1cyk7CisKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IHVyYi0+c3RhdHVzOworCQl9CisJfQorCisJaWYgKGFjdHVhbF9sZW5ndGgpCisJCSphY3R1YWxfbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHNzaXplX3QgdnN0dXNiX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCisJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OworCWludCBjbnQgPSAtMTsKKwl2b2lkICpidWY7CisJaW50IHJldHZhbCA9IDA7CisKKwlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiOworCXN0cnVjdCB1c2JfZGV2aWNlICAgICAgICpkZXY7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgcGlwZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OworCisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7CisKKwl2c3RkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAodnN0ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJLyogdmVyaWZ5IHRoYXQgd2UgYWN0dWFsbHkgd2FudCB0byByZWFkIHNvbWUgZGF0YSAqLworCWlmICgoY291bnQgPT0gMCkgfHwgKGNvdW50ID4gVlNUX01BWEJVRkZFUikpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbG9jayB0aGlzIG9iamVjdCAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZzdGRldi0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBhbnlvbmUgaG9tZSAqLworCWlmICghdnN0ZGV2LT5wcmVzZW50KSB7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiAlczogZGV2aWNlIG5vdCBwcmVzZW50XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIHB1bGwgb3V0IHRoZSBuZWNlc3NhcnkgZGF0YSAqLworCWRldiA9ICAgICB2c3RkZXYtPnVzYl9kZXY7CisJcGlwZSA9ICAgIHVzYl9yY3ZidWxrcGlwZShkZXYsIHZzdGRldi0+cmRfcGlwZSk7CisJdGltZW91dCA9IHZzdGRldi0+cmRfdGltZW91dF9tczsKKworCWJ1ZiA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cmIpIHsKKwkJa2ZyZWUoYnVmKTsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1c2JfYW5jaG9yX3VyYih1cmIsICZ2c3RkZXYtPnN1Ym1pdHRlZCk7CisJcmV0dmFsID0gdnN0dXNiX2ZpbGxfYW5kX3NlbmRfdXJiKHVyYiwgZGV2LCBwaXBlLCBidWYsIGNvdW50LCAmZG9uZSk7CisJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCWlmIChyZXR2YWwpIHsKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBmaWxsaW5nIGFuZCBzZW5kaW5nIHVyYiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gdnN0dXNiX2NvbXBsZXRlX3VyYih1cmIsICZkb25lLCB0aW1lb3V0LCAmY250KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGNvbXBsZXRpbmcgdXJiICVkXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgYnVmLCBjbnQpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfdG9fdXNlclxuIiwgX19mdW5jX18pOworCQlyZXR2YWwgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCXJldHZhbCA9IGNudDsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICIlczogcmVhZCAlZCBieXRlcyBmcm9tIHBpcGUgJWRcbiIsCisJCQlfX2Z1bmNfXywgY250LCBwaXBlKTsKKwl9CisKK2V4aXQ6CisJdXNiX2ZyZWVfdXJiKHVyYik7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3NpemVfdCB2c3R1c2Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldjsKKwlpbnQgY250ID0gLTE7CisJdm9pZCAqYnVmOworCWludCByZXR2YWwgPSAwOworCisJc3RydWN0IHVyYiAgICAgICAgICAgICAgKnVyYjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqZGV2OworCXVuc2lnbmVkIGludCAgICAgICAgICAgIHBpcGU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgdGltZW91dDsKKworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOworCisJdnN0ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHZzdGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHZlcmlmeSB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgc29tZSBkYXRhIHRvIHdyaXRlICovCisJaWYgKChjb3VudCA9PSAwKSB8fCAoY291bnQgPiBWU1RfTUFYQlVGRkVSKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qIGxvY2sgdGhpcyBvYmplY3QgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2c3RkZXYtPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJLyogYW55b25lIGhvbWUgKi8KKwlpZiAoIXZzdGRldi0+cHJlc2VudCkgeworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogJXM6IGRldmljZSBub3QgcHJlc2VudFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBwdWxsIG91dCB0aGUgbmVjZXNzYXJ5IGRhdGEgKi8KKwlkZXYgPSAgICAgdnN0ZGV2LT51c2JfZGV2OworCXBpcGUgPSAgICB1c2Jfc25kYnVsa3BpcGUoZGV2LCB2c3RkZXYtPndyX3BpcGUpOworCXRpbWVvdXQgPSB2c3RkZXYtPndyX3RpbWVvdXRfbXM7CisKKwlidWYgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdXJiKSB7CisJCWtmcmVlKGJ1Zik7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV9mcm9tX3VzZXJcbiIsIF9fZnVuY19fKTsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworCXVzYl9hbmNob3JfdXJiKHVyYiwgJnZzdGRldi0+c3VibWl0dGVkKTsKKwlyZXR2YWwgPSB2c3R1c2JfZmlsbF9hbmRfc2VuZF91cmIodXJiLCBkZXYsIHBpcGUsIGJ1ZiwgY291bnQsICZkb25lKTsKKwltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJaWYgKHJldHZhbCkgeworCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGZpbGxpbmcgYW5kIHNlbmRpbmcgdXJiICVkXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSB2c3R1c2JfY29tcGxldGVfdXJiKHVyYiwgJmRvbmUsIHRpbWVvdXQsICZjbnQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogZXJyb3IgJWQgY29tcGxldGluZyB1cmIgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJZ290byBleGl0OworCX0gZWxzZSB7CisJCXJldHZhbCA9IGNudDsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICIlczogc2VudCAlZCBieXRlcyB0byBwaXBlICVkXG4iLAorCQkJX19mdW5jX18sIGNudCwgcGlwZSk7CisJfQorCitleGl0OgorCXVzYl9mcmVlX3VyYih1cmIpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGxvbmcgdnN0dXNiX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgY250ID0gLTE7CisJdm9pZCBfX3VzZXIgKmRhdGEgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IHZzdHVzYl9hcmdzIHVzYl9kYXRhOworCisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldjsKKwl2b2lkICpidWZmZXIgPSBOVUxMOyAvKiBtdXN0IGJlIGluaXRpYWxpemVkLiBidWZmZXIgaXMKKwkJCSAgICAgICoJcmVmZXJlbmNlZCBvbiBleGl0IGJ1dCBub3QgYWxsCisJCQkgICAgICAqIGlvY3RscyBhbGxvY2F0ZSBpdCAqLworCisJc3RydWN0IHVyYiAgICAgICAgICAgICAgKnVyYiA9IE5VTEw7IC8qIG11c3QgYmUgaW5pdGlhbGl6ZWQuIHVyYiBpcworCQkJCQkgICAgICAqCXJlZmVyZW5jZWQgb24gZXhpdCBidXQgbm90IGFsbAorCQkJCQkgICAgICAqIGlvY3RscyBhbGxvY2F0ZSBpdCAqLworCXN0cnVjdCB1c2JfZGV2aWNlICAgICAgICpkZXY7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgcGlwZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OworCisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7CisKKwl2c3RkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gVlNUX0lPQ19NQUdJQykgeworCQlkZXZfd2FybigmdnN0ZGV2LT51c2JfZGV2LT5kZXYsCisJCQkgIiVzOiBpb2N0bCBjb21tYW5kICV4LCBiYWQgaW9jdGwgbWFnaWMgJXgsICIKKwkJCSAiZXhwZWN0ZWQgJXhcbiIsIF9fZnVuY19fLCBjbWQsCisJCQkgX0lPQ19UWVBFKGNtZCksIFZTVF9JT0NfTUFHSUMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodnN0ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2JfZGF0YSwgZGF0YSwgc2l6ZW9mKHN0cnVjdCB2c3R1c2JfYXJncykpKSB7CisJCWRldl9lcnIoJnZzdGRldi0+dXNiX2Rldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfZnJvbV91c2VyXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBsb2NrIHRoaXMgb2JqZWN0ICovCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdnN0ZGV2LT5sb2NrKSkgeworCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBhbnlvbmUgaG9tZSAqLworCWlmICghdnN0ZGV2LT5wcmVzZW50KSB7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJZGV2X2VycigmdnN0ZGV2LT51c2JfZGV2LT5kZXYsICIlczogZGV2aWNlIG5vdCBwcmVzZW50XG4iLAorCQkJX19mdW5jX18pOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcHVsbCBvdXQgdGhlIG5lY2Vzc2FyeSBkYXRhICovCisJZGV2ID0gdnN0ZGV2LT51c2JfZGV2OworCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgSU9DVExfVlNUVVNCX0NPTkZJR19SVzoKKworCQl2c3RkZXYtPnJkX3BpcGUgPSB1c2JfZGF0YS5yZF9waXBlOworCQl2c3RkZXYtPnJkX3RpbWVvdXRfbXMgPSB1c2JfZGF0YS5yZF90aW1lb3V0X21zOworCQl2c3RkZXYtPndyX3BpcGUgPSB1c2JfZGF0YS53cl9waXBlOworCQl2c3RkZXYtPndyX3RpbWVvdXRfbXMgPSB1c2JfZGF0YS53cl90aW1lb3V0X21zOworCisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKworCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiBzZXR0aW5nIHBpcGVzL3RpbWVvdXRzLCAiCisJCQkicmRwaXBlID0gJWQsIHJkdGltZW91dCA9ICVkLCAiCisJCQkid3JwaXBlID0gJWQsIHdydGltZW91dCA9ICVkXG4iLCBfX2Z1bmNfXywKKwkJCXZzdGRldi0+cmRfcGlwZSwgdnN0ZGV2LT5yZF90aW1lb3V0X21zLAorCQkJdnN0ZGV2LT53cl9waXBlLCB2c3RkZXYtPndyX3RpbWVvdXRfbXMpOworCQlicmVhazsKKworCWNhc2UgSU9DVExfVlNUVVNCX1NFTkRfUElQRToKKworCQlpZiAoKHVzYl9kYXRhLmNvdW50ID09IDApIHx8ICh1c2JfZGF0YS5jb3VudCA+IFZTVF9NQVhCVUZGRVIpKSB7CisJCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBleGl0OworCQl9CisKKwkJYnVmZmVyID0ga21hbGxvYyh1c2JfZGF0YS5jb3VudCwgR0ZQX0tFUk5FTCk7CisJCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiKSB7CisJCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBleGl0OworCQl9CisKKwkJdGltZW91dCA9IHVzYl9kYXRhLnRpbWVvdXRfbXM7CisKKwkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkZXYsIHVzYl9kYXRhLnBpcGUpOworCisJCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIHVzYl9kYXRhLmJ1ZmZlciwgdXNiX2RhdGEuY291bnQpKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBjYW4ndCBjb3B5X2Zyb21fdXNlclxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBleGl0OworCQl9CisKKwkJdXNiX2FuY2hvcl91cmIodXJiLCAmdnN0ZGV2LT5zdWJtaXR0ZWQpOworCQlyZXR2YWwgPSB2c3R1c2JfZmlsbF9hbmRfc2VuZF91cmIodXJiLCBkZXYsIHBpcGUsIGJ1ZmZlciwKKwkJCQkJCSAgdXNiX2RhdGEuY291bnQsICZkb25lKTsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlpZiAocmV0dmFsKSB7CisJCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkiJXM6IGVycm9yICVkIGZpbGxpbmcgYW5kIHNlbmRpbmcgdXJiICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOworCQkJZ290byBleGl0OworCQl9CisKKwkJcmV0dmFsID0gdnN0dXNiX2NvbXBsZXRlX3VyYih1cmIsICZkb25lLCB0aW1lb3V0LCAmY250KTsKKwkJaWYgKHJldHZhbCkgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogZXJyb3IgJWQgY29tcGxldGluZyB1cmIgJWRcbiIsCisJCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCX0KKworCQlicmVhazsKKwljYXNlIElPQ1RMX1ZTVFVTQl9SRUNWX1BJUEU6CisKKwkJaWYgKCh1c2JfZGF0YS5jb3VudCA9PSAwKSB8fCAodXNiX2RhdGEuY291bnQgPiBWU1RfTUFYQlVGRkVSKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWJ1ZmZlciA9IGttYWxsb2ModXNiX2RhdGEuY291bnQsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYikgeworCQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXRpbWVvdXQgPSB1c2JfZGF0YS50aW1lb3V0X21zOworCisJCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUoZGV2LCB1c2JfZGF0YS5waXBlKTsKKworCQl1c2JfYW5jaG9yX3VyYih1cmIsICZ2c3RkZXYtPnN1Ym1pdHRlZCk7CisJCXJldHZhbCA9IHZzdHVzYl9maWxsX2FuZF9zZW5kX3VyYih1cmIsIGRldiwgcGlwZSwgYnVmZmVyLAorCQkJCQkJICB1c2JfZGF0YS5jb3VudCwgJmRvbmUpOworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCWlmIChyZXR2YWwpIHsKKwkJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCSIlczogZXJyb3IgJWQgZmlsbGluZyBhbmQgc2VuZGluZyB1cmIgJWRcbiIsCisJCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlyZXR2YWwgPSB2c3R1c2JfY29tcGxldGVfdXJiKHVyYiwgJmRvbmUsIHRpbWVvdXQsICZjbnQpOworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBjb21wbGV0aW5nIHVyYiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWlmIChjb3B5X3RvX3VzZXIodXNiX2RhdGEuYnVmZmVyLCBidWZmZXIsIGNudCkpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfdG9fdXNlclxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBleGl0OworCQl9CisKKwkJdXNiX2RhdGEuY291bnQgPSBjbnQ7CisJCWlmIChjb3B5X3RvX3VzZXIoZGF0YSwgJnVzYl9kYXRhLCBzaXplb2Yoc3RydWN0IHZzdHVzYl9hcmdzKSkpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfdG9fdXNlclxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQl9IGVsc2UgeworCQkJZGV2X2RiZygmZGV2LT5kZXYsICIlczogcmVjdiAlZCBieXRlcyBmcm9tIHBpcGUgJWRcbiIsCisJCQkJX19mdW5jX18sIHVzYl9kYXRhLmNvdW50LCB1c2JfZGF0YS5waXBlKTsKKwkJfQorCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlkZXZfd2FybigmZGV2LT5kZXYsICJpb2N0bF92c3R1c2I6IGludmFsaWQgaW9jdGwgY21kICV4XG4iLAorCQkJIGNtZCk7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CitleGl0OgorCXVzYl9mcmVlX3VyYih1cmIpOworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdnN0dXNiX2ZvcHMgPSB7CisJLm93bmVyID0gICAgICAgICAgICAgICAgVEhJU19NT0RVTEUsCisJLnJlYWQgPSAgICAgICAgICAgICAgICAgdnN0dXNiX3JlYWQsCisJLndyaXRlID0gICAgICAgICAgICAgICAgdnN0dXNiX3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bCA9ICAgICAgIHZzdHVzYl9pb2N0bCwKKwkuY29tcGF0X2lvY3RsID0gICAgICAgICB2c3R1c2JfaW9jdGwsCisJLm9wZW4gPSAgICAgICAgICAgICAgICAgdnN0dXNiX29wZW4sCisJLnJlbGVhc2UgPSAgICAgICAgICAgICAgdnN0dXNiX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgdXNiX3ZzdHVzYl9jbGFzcyA9IHsKKwkubmFtZSA9ICAgICAgICAgInVzYi92c3R1c2IlZCIsCisJLmZvcHMgPSAgICAgICAgICZ2c3R1c2JfZm9wcywKKwkubWlub3JfYmFzZSA9ICAgVlNUVVNCX01JTk9SX0JBU0UsCit9OworCitzdGF0aWMgaW50IHZzdHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OworCWludCBpOworCWludCByZXR2YWwgPSAwOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KKworCXZzdGRldiA9IGt6YWxsb2Moc2l6ZW9mKCp2c3RkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAodnN0ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogbXVzdCBkbyB1c2JfZ2V0X2RldigpIHByaW9yIHRvIGtyZWZfaW5pdCgpIHNpbmNlIHRoZSBrcmVmX3B1dCgpCisJICogcmVsZWFzZSBmdW5jdGlvbiB3aWxsIGRvIGEgdXNiX3B1dF9kZXYoKSAqLworCXVzYl9nZXRfZGV2KGRldik7CisJa3JlZl9pbml0KCZ2c3RkZXYtPmtyZWYpOworCW11dGV4X2luaXQoJnZzdGRldi0+bG9jayk7CisKKwlpID0gZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZTsKKworCWRldl9kYmcoJmludGYtPmRldiwgIlZlcnNpb24gJTFkJTFkLiUxZCUxZCBmb3VuZCBhdCBhZGRyZXNzICVkXG4iLAorCQkoaSAmIDB4RjAwMCkgPj4gMTIsIChpICYgMHhGMDApID4+IDgsCisJCShpICYgMHhGMCkgPj4gNCwgKGkgJiAweEYpLCBkZXYtPmRldm51bSk7CisKKwl2c3RkZXYtPnByZXNlbnQgPSAxOworCXZzdGRldi0+aXNvcGVuID0gMDsKKwl2c3RkZXYtPnVzYl9kZXYgPSBkZXY7CisJaW5pdF91c2JfYW5jaG9yKCZ2c3RkZXYtPnN1Ym1pdHRlZCk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHZzdGRldik7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3ZzdHVzYl9jbGFzcyk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkiJXM6IE5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiIsCisJCQlfX2Z1bmNfXyk7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJCWtyZWZfcHV0KCZ2c3RkZXYtPmtyZWYsIHZzdHVzYl9kZWxldGUpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KKwlkZXZfaW5mbygmaW50Zi0+ZGV2LAorCQkgIlZTVCBVU0IgRGV2aWNlICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgJWQgbWlub3IgJWRcbiIsCisJCSAoaW50Zi0+bWlub3IgLSBWU1RVU0JfTUlOT1JfQkFTRSksIFVTQl9NQUpPUiwgaW50Zi0+bWlub3IpOworCisJZGV2X2luZm8oJmludGYtPmRldiwgIiVzLCAlc1xuIiwgRFJJVkVSX0RFU0MsIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHZzdHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfdnN0dXNiX2NsYXNzKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCisJaWYgKHZzdGRldikgeworCisJCW11dGV4X2xvY2soJnZzdGRldi0+bG9jayk7CisJCXZzdGRldi0+cHJlc2VudCA9IDA7CisKKwkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmdnN0ZGV2LT5zdWJtaXR0ZWQpOworCisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKworCQlrcmVmX3B1dCgmdnN0ZGV2LT5rcmVmLCB2c3R1c2JfZGVsZXRlKTsKKwl9CisKK30KKworc3RhdGljIGludCB2c3R1c2Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IHRpbWU7CisJaWYgKCF2c3RkZXYpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmdnN0ZGV2LT5sb2NrKTsKKwl0aW1lID0gdXNiX3dhaXRfYW5jaG9yX2VtcHR5X3RpbWVvdXQoJnZzdGRldi0+c3VibWl0dGVkLCAxMDAwKTsKKwlpZiAoIXRpbWUpCisJCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJnZzdGRldi0+c3VibWl0dGVkKTsKKwltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2c3R1c2JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdnN0dXNiX2RyaXZlciA9IHsKKwkubmFtZSA9ICAgICAgICAgInZzdHVzYiIsCisJLnByb2JlID0gICAgICAgIHZzdHVzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9ICAgdnN0dXNiX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPSAgICAgIHZzdHVzYl9zdXNwZW5kLAorCS5yZXN1bWUgPSAgICAgICB2c3R1c2JfcmVzdW1lLAorCS5pZF90YWJsZSA9IGlkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdnN0dXNiX2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHVzYl9yZWdpc3RlcigmdnN0dXNiX2RyaXZlcik7CisJaWYgKHJjKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgKCVkKSIsIF9fZnVuY19fLCByYyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2c3R1c2JfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ2c3R1c2JfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodnN0dXNiX2luaXQpOworbW9kdWxlX2V4aXQodnN0dXNiX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJEZW5uaXMgTydCcmllbi9TdGVwaGVuIFdhcmUiKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwppbmRleCA2NTY2ZmMwLi5jOWRlM2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKQEAgLTExNjIsOSArMTE2Miw5IEBACiAJaWYgKG1pbm9yID49IE1PTl9CSU5fTUFYX01JTk9SKQogCQlyZXR1cm4gMDsKIAotCWRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShtb25fYmluX2NsYXNzLCB1YnVzPyB1YnVzLT5jb250cm9sbGVyOiBOVUxMLAotCQkJCSAgICBNS0RFVihNQUpPUihtb25fYmluX2RldjApLCBtaW5vciksIE5VTEwsCi0JCQkJICAgICJ1c2Jtb24lZCIsIG1pbm9yKTsKKwlkZXYgPSBkZXZpY2VfY3JlYXRlKG1vbl9iaW5fY2xhc3MsIHVidXMgPyB1YnVzLT5jb250cm9sbGVyIDogTlVMTCwKKwkJCSAgICBNS0RFVihNQUpPUihtb25fYmluX2RldjApLCBtaW5vciksIE5VTEwsCisJCQkgICAgInVzYm1vbiVkIiwgbWlub3IpOwogCWlmIChJU19FUlIoZGV2KSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fbWFpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKaW5kZXggNDQyZDgwNy4uNWUwYWI0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKQEAgLTM2MSwxMiArMzYxLDEyIEBACiAJfQogCS8vIE1PRF9JTkNfVVNFX0NPVU5UKHdoaWNoX21vZHVsZT8pOwogCi0JdXNiX3JlZ2lzdGVyX25vdGlmeSgmbW9uX25iKTsKIAogCW11dGV4X2xvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5ICh1YnVzLCAmdXNiX2J1c19saXN0LCBidXNfbGlzdCkgewogCQltb25fYnVzX2luaXQodWJ1cyk7CiAJfQorCXVzYl9yZWdpc3Rlcl9ub3RpZnkoJm1vbl9uYik7CiAJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCA1OGIyYjhmLi40Yjk1NDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCkBAIC0zMywxMCArMzMsNiBAQAogCWRlZmF1bHQgeSBpZiBBUkNIX0RBVklOQ0kKIAlkZWZhdWx0IHkgaWYgQVJDSF9PTUFQMjQzMAogCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAzNFhYCi0JaGVscAotCSAgVXNlIGEgc3RhdGljIDxhc20vYXJjaC9oZHJjX2NuZi5oPiBmaWxlIHRvIGRlc2NyaWJlIGhvdyB0aGUKLQkgIGNvbnRyb2xsZXIgaXMgY29uZmlndXJlZCAoZW5kcG9pbnRzLCBtZWNoYW5pc21zLCBldGMpIG9uIHRoZQotCSAgY3VycmVudCBpdGVyYXRpb24gb2YgYSBnaXZlbiBzeXN0ZW0tb24tY2hpcC4KIAogY29tbWVudCAiRGFWaW5jaSA2NDR4IFVTQiBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiBBUkNIX0RBVklOQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuaCBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuaAppbmRleCBmYzUyMTZiLi43MjliNDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5oCkBAIC0xMTksOCArMTE5LDggQEAKIAl2b2lkIF9faW9tZW0JCQkqbXJlZ3M7CQkvKiBNZW50b3IgcmVncyAqLwogCXZvaWQgX19pb21lbQkJCSp0aWJhc2U7CS8qIFRJL0NQUEkgcmVncyAqLwogCi0Jc3RydWN0IGNwcGlfY2hhbm5lbAkJdHhbTVVTQl9DX05VTV9FUFQgLSAxXTsKLQlzdHJ1Y3QgY3BwaV9jaGFubmVsCQlyeFtNVVNCX0NfTlVNX0VQUiAtIDFdOworCXN0cnVjdCBjcHBpX2NoYW5uZWwJCXR4WzRdOworCXN0cnVjdCBjcHBpX2NoYW5uZWwJCXJ4WzRdOwogCiAJc3RydWN0IGRtYV9wb29sCQkJKnBvb2w7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKaW5kZXggNzViYWYxOC4uZGZiM2JjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tZW1vcnkuaD4KQEAgLTM5LDcgKzQwLDcgQEAKICNpbmNsdWRlICJtdXNiX2NvcmUuaCIKIAogI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNCi0jaW5jbHVkZSA8YXNtL2FyY2gvaTJjLWNsaWVudC5oPgorI2RlZmluZSBHUElPX25WQlVTX0RSVgkJODcKICNlbmRpZgogCiAjaW5jbHVkZSAiZGF2aW5jaS5oIgpAQCAtMTM4LDcgKzEzOSw2IEBACiAvKiBWQlVTIFNXSVRDSElORyBJUyBCT0FSRC1TUEVDSUZJQyAqLwogCiAjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KLSNpZm5kZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk1fT1RHCiAKIC8qIEkyQyBvcGVyYXRpb25zIGFyZSBhbHdheXMgc3luY2hyb25vdXMsIGFuZCByZXF1aXJlIGEgdGFzayBjb250ZXh0LgogICogV2l0aCB1bmxvYWRlZCBzeXN0ZW1zLCB1c2luZyB0aGUgc2hhcmVkIHdvcmtxdWV1ZSBzZWVtcyB0byBzdWZmaWNlCkBAIC0xNDYsMTIgKzE0NiwxMSBAQAogICovCiBzdGF0aWMgdm9pZCBldm1fZGVmZXJyZWRfZHJ2dmJ1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCiB7Ci0JZGF2aW5jaV9pMmNfZXhwYW5kZXJfb3AoMHgzYSwgVVNCX0RSVlZCVVMsIHZidXNfc3RhdGUpOworCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAl2YnVzX3N0YXRlID0gIXZidXNfc3RhdGU7CiB9CiBzdGF0aWMgREVDTEFSRV9XT1JLKGV2bV92YnVzX3dvcmssIGV2bV9kZWZlcnJlZF9kcnZ2YnVzKTsKIAotI2VuZGlmCS8qIG1vZGlmaWVkIGJvYXJkICovCiAjZW5kaWYJLyogRVZNICovCiAKIHN0YXRpYyB2b2lkIGRhdmluY2lfc291cmNlX3Bvd2VyKHN0cnVjdCBtdXNiICptdXNiLCBpbnQgaXNfb24sIGludCBpbW1lZGlhdGUpCkBAIC0xNjUsMjEgKzE2NCwxMCBAQAogCiAjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KIAlpZiAobWFjaGluZV9pc19kYXZpbmNpX2V2bSgpKSB7Ci0jaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk1fT1RHCi0JCS8qIG1vZGlmaWVkIEVWTSBib2FyZCBzd2l0Y2hpbmcgVkJVUyB3aXRoIEdQSU8oNikgbm90IEkyQwotCQkgKiBOT1RFOiAgUElOTVVYMC5SR0I4ODggKGJpdDIzKSBtdXN0IGJlIGNsZWFyCi0JCSAqLwotCQlpZiAoaXNfb24pCi0JCQlncGlvX3NldChHUElPKDYpKTsKLQkJZWxzZQotCQkJZ3Bpb19jbGVhcihHUElPKDYpKTsKLQkJaW1tZWRpYXRlID0gMTsKLSNlbHNlCiAJCWlmIChpbW1lZGlhdGUpCi0JCQlkYXZpbmNpX2kyY19leHBhbmRlcl9vcCgweDNhLCBVU0JfRFJWVkJVUywgIWlzX29uKTsKKwkJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKEdQSU9fblZCVVNfRFJWLCB2YnVzX3N0YXRlKTsKIAkJZWxzZQogCQkJc2NoZWR1bGVfd29yaygmZXZtX3ZidXNfd29yayk7Ci0jZW5kaWYKIAl9CiAjZW5kaWYKIAlpZiAoaW1tZWRpYXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggMTI4ZTk0OS4uNGEzNTc0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC04Miw5ICs4Miw5IEBACiAvKgogICogVGhpcyBnZXRzIG1hbnkga2luZHMgb2YgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbjoKICAqCS0gS2NvbmZpZyBmb3IgZXZlcnl0aGluZyB1c2VyLWNvbmZpZ3VyYWJsZQotICoJLSA8YXNtL2FyY2gvaGRyY19jbmYuaD4gZm9yIFNPQyBvciBmYW1pbHkgZGV0YWlscwogICoJLSBwbGF0Zm9ybV9kZXZpY2UgZm9yIGFkZHJlc3NpbmcsIGlycSwgYW5kIHBsYXRmb3JtX2RhdGEKICAqCS0gcGxhdGZvcm1fZGF0YSBpcyBtb3N0bHkgZm9yIGJvYXJkLXNwZWNpZmljIGluZm9ybWFyaW9uCisgKgkgIChwbHVzIHJlY2VudHJseSwgU09DIG9yIGZhbWlseSBkZXRhaWxzKQogICoKICAqIE1vc3Qgb2YgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpbGwgKHNvbWVkYXkpIHZhbmlzaC4KICAqLwpAQCAtOTc0LDkgKzk3NCw5IEBACiAvKgogICogVGhlIHNpbGljb24gZWl0aGVyIGhhcyBoYXJkLXdpcmVkIGVuZHBvaW50IGNvbmZpZ3VyYXRpb25zLCBvciBlbHNlCiAgKiAiZHluYW1pYyBmaWZvIiBzaXppbmcuICBUaGUgZHJpdmVyIGhhcyBzdXBwb3J0IGZvciBib3RoLCB0aG91Z2ggYXQgdGhpcwotICogd3JpdGluZyBvbmx5IHRoZSBkeW5hbWljIHNpemluZyBpcyB2ZXJ5IHdlbGwgdGVzdGVkLiAgIFdlIHVzZSBub3JtYWwKLSAqIGlkaW9tcyB0byBzbyBib3RoIG1vZGVzIGFyZSBjb21waWxlLXRlc3RlZCwgYnV0IGRlYWQgY29kZSBlbGltaW5hdGlvbgotICogbGVhdmVzIG9ubHkgdGhlIHJlbGV2YW50IG9uZSBpbiB0aGUgb2JqZWN0IGZpbGUuCisgKiB3cml0aW5nIG9ubHkgdGhlIGR5bmFtaWMgc2l6aW5nIGlzIHZlcnkgd2VsbCB0ZXN0ZWQuICAgU2luY2Ugd2Ugc3dpdGNoZWQKKyAqIGF3YXkgZnJvbSBjb21waWxlLXRpbWUgaGFyZHdhcmUgcGFyYW1ldGVycywgd2UgY2FuIG5vIGxvbmdlciByZWx5IG9uCisgKiBkZWFkIGNvZGUgZWxpbWluYXRpb24gdG8gbGVhdmUgb25seSB0aGUgcmVsZXZhbnQgb25lIGluIHRoZSBvYmplY3QgZmlsZS4KICAqCiAgKiBXZSBkb24ndCBjdXJyZW50bHkgdXNlIGR5bmFtaWMgZmlmbyBzZXR1cCBjYXBhYmlsaXR5IHRvIGRvIGFueXRoaW5nCiAgKiBtb3JlIHRoYW4gc2VsZWN0aW5nIG9uZSBvZiBhIGJ1bmNoIG9mIHByZWRlZmluZWQgY29uZmlndXJhdGlvbnMuCkBAIC0xODA2LDYgKzE4MDYsNyBAQAogCW11c2ItPmN0cmxfYmFzZSA9IG1iYXNlOwogCW11c2ItPm5JcnEgPSAtRU5PREVWOwogCW11c2ItPmNvbmZpZyA9IGNvbmZpZzsKKwlCVUdfT04obXVzYi0+Y29uZmlnLT5udW1fZXBzID4gTVVTQl9DX05VTV9FUFMpOwogCWZvciAoZXBudW0gPSAwLCBlcCA9IG11c2ItPmVuZHBvaW50czsKIAkJCWVwbnVtIDwgbXVzYi0+Y29uZmlnLT5udW1fZXBzOwogCQkJZXBudW0rKywgZXArKykgewpAQCAtMjA1NCwxNSArMjA1NSw2IEBACiAKIAl9CiAKLQlyZXR1cm4gMDsKLQotZmFpbDoKLQlpZiAobXVzYi0+Y2xvY2spCi0JCWNsa19wdXQobXVzYi0+Y2xvY2spOwotCWRldmljZV9pbml0X3dha2V1cChkZXYsIDApOwotCW11c2JfZnJlZShtdXNiKTsKLQlyZXR1cm4gc3RhdHVzOwotCiAjaWZkZWYgQ09ORklHX1NZU0ZTCiAJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZGUpOwogCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92YnVzKTsKQEAgLTIwNzEsMTIgKzIwNjMsMzEgQEAKICNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgKi8KIAlzdGF0dXMgPSAwOwogI2VuZGlmCisJaWYgKHN0YXR1cykKKwkJZ290byBmYWlsMjsKKworCXJldHVybiAwOworCitmYWlsMjoKKyNpZmRlZiBDT05GSUdfU1lTRlMKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUobXVzYi0+Y29udHJvbGxlciwgJmRldl9hdHRyX21vZGUpOworCWRldmljZV9yZW1vdmVfZmlsZShtdXNiLT5jb250cm9sbGVyLCAmZGV2X2F0dHJfdmJ1cyk7CisjaWZkZWYgQ09ORklHX1VTQl9NVVNCX09URworCWRldmljZV9yZW1vdmVfZmlsZShtdXNiLT5jb250cm9sbGVyLCAmZGV2X2F0dHJfc3JwKTsKKyNlbmRpZgorI2VuZGlmCisJbXVzYl9wbGF0Zm9ybV9leGl0KG11c2IpOworZmFpbDoKKwlkZXZfZXJyKG11c2ItPmNvbnRyb2xsZXIsCisJCSJtdXNiX2luaXRfY29udHJvbGxlciBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisKKwlpZiAobXVzYi0+Y2xvY2spCisJCWNsa19wdXQobXVzYi0+Y2xvY2spOworCWRldmljZV9pbml0X3dha2V1cChkZXYsIDApOworCW11c2JfZnJlZShtdXNiKTsKIAogCXJldHVybiBzdGF0dXM7CiAKLWZhaWwyOgotCW11c2JfcGxhdGZvcm1fZXhpdChtdXNiKTsKLQlnb3RvIGZhaWw7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYwppbmRleCBhNTc2NTJmLi4zZjVlMzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXRfZXAwLmMKQEAgLTQzNyw3ICs0MzcsNyBAQAogewogCXZvaWQgX19pb21lbQkJKnJlZ3MgPSBtdXNiLT5jb250cm9sX2VwLT5yZWdzOwogCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOwotCXUxNgkJCXRtcDsKKwl1MTYJCQljb3VudCwgY3NyOwogCiAJcmVxID0gbmV4dF9lcDBfcmVxdWVzdChtdXNiKTsKIApAQCAtNDQ5LDM1ICs0NDksMzUgQEAKIAkJdW5zaWduZWQJbGVuID0gcmVxLT5sZW5ndGggLSByZXEtPmFjdHVhbDsKIAogCQkvKiByZWFkIHRoZSBidWZmZXIgKi8KLQkJdG1wID0gbXVzYl9yZWFkYihyZWdzLCBNVVNCX0NPVU5UMCk7Ci0JCWlmICh0bXAgPiBsZW4pIHsKKwkJY291bnQgPSBtdXNiX3JlYWRiKHJlZ3MsIE1VU0JfQ09VTlQwKTsKKwkJaWYgKGNvdW50ID4gbGVuKSB7CiAJCQlyZXEtPnN0YXR1cyA9IC1FT1ZFUkZMT1c7Ci0JCQl0bXAgPSBsZW47CisJCQljb3VudCA9IGxlbjsKIAkJfQotCQltdXNiX3JlYWRfZmlmbygmbXVzYi0+ZW5kcG9pbnRzWzBdLCB0bXAsIGJ1Zik7Ci0JCXJlcS0+YWN0dWFsICs9IHRtcDsKLQkJdG1wID0gTVVTQl9DU1IwX1BfU1ZEUlhQS1RSRFk7Ci0JCWlmICh0bXAgPCA2NCB8fCByZXEtPmFjdHVhbCA9PSByZXEtPmxlbmd0aCkgeworCQltdXNiX3JlYWRfZmlmbygmbXVzYi0+ZW5kcG9pbnRzWzBdLCBjb3VudCwgYnVmKTsKKwkJcmVxLT5hY3R1YWwgKz0gY291bnQ7CisJCWNzciA9IE1VU0JfQ1NSMF9QX1NWRFJYUEtUUkRZOworCQlpZiAoY291bnQgPCA2NCB8fCByZXEtPmFjdHVhbCA9PSByZXEtPmxlbmd0aCkgewogCQkJbXVzYi0+ZXAwX3N0YXRlID0gTVVTQl9FUDBfU1RBR0VfU1RBVFVTSU47Ci0JCQl0bXAgfD0gTVVTQl9DU1IwX1BfREFUQUVORDsKKwkJCWNzciB8PSBNVVNCX0NTUjBfUF9EQVRBRU5EOwogCQl9IGVsc2UKIAkJCXJlcSA9IE5VTEw7CiAJfSBlbHNlCi0JCXRtcCA9IE1VU0JfQ1NSMF9QX1NWRFJYUEtUUkRZIHwgTVVTQl9DU1IwX1BfU0VORFNUQUxMOworCQljc3IgPSBNVVNCX0NTUjBfUF9TVkRSWFBLVFJEWSB8IE1VU0JfQ1NSMF9QX1NFTkRTVEFMTDsKIAogCiAJLyogQ29tcGxldGlvbiBoYW5kbGVyIG1heSBjaG9vc2UgdG8gc3RhbGwsIGUuZy4gYmVjYXVzZSB0aGUKIAkgKiBtZXNzYWdlIGp1c3QgcmVjZWl2ZWQgaG9sZHMgaW52YWxpZCBkYXRhLgogCSAqLwogCWlmIChyZXEpIHsKLQkJbXVzYi0+YWNrcGVuZCA9IHRtcDsKKwkJbXVzYi0+YWNrcGVuZCA9IGNzcjsKIAkJbXVzYl9nX2VwMF9naXZlYmFjayhtdXNiLCByZXEpOwogCQlpZiAoIW11c2ItPmFja3BlbmQpCiAJCQlyZXR1cm47CiAJCW11c2ItPmFja3BlbmQgPSAwOwogCX0KIAltdXNiX2VwX3NlbGVjdChtdXNiLT5tcmVncywgMCk7Ci0JbXVzYl93cml0ZXcocmVncywgTVVTQl9DU1IwLCB0bXApOworCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfQ1NSMCwgY3NyKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCmluZGV4IDhiNGJlMDEuLjMxMzM5OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAvKgogICogQ2xlYXIgVFggZmlmby4gTmVlZGVkIHRvIGF2b2lkIEJBQkJMRSBlcnJvcnMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX2hfdHhfZmx1c2hfZmlmbyhzdHJ1Y3QgbXVzYl9od19lcCAqZXApCitzdGF0aWMgdm9pZCBtdXNiX2hfdHhfZmx1c2hfZmlmbyhzdHJ1Y3QgbXVzYl9od19lcCAqZXApCiB7CiAJdm9pZCBfX2lvbWVtCSplcGlvID0gZXAtPnJlZ3M7CiAJdTE2CQljc3I7CkBAIC0yOTEsNiArMjkxLDcgQEAKIAkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCiAJCQkpOwogCisJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAobXVzYl90b19oY2QobXVzYiksIHVyYik7CiAJc3Bpbl91bmxvY2soJm11c2ItPmxvY2spOwogCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKG11c2JfdG9faGNkKG11c2IpLCB1cmIsIHN0YXR1cyk7CiAJc3Bpbl9sb2NrKCZtdXNiLT5sb2NrKTsKQEAgLTM1Myw4ICszNTQsNiBAQAogCQlicmVhazsKIAl9CiAKLQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChtdXNiX3RvX2hjZChtdXNiKSwgdXJiKTsKLQogCXFoLT5pc19yZWFkeSA9IDA7CiAJX19tdXNiX2dpdmViYWNrKG11c2IsIHVyYiwgc3RhdHVzKTsKIAlxaC0+aXNfcmVhZHkgPSByZWFkeTsKQEAgLTQzNiw3ICs0MzUsNyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB1MTYgbXVzYl9oX2ZsdXNoX3J4ZmlmbyhzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHUxNiBjc3IpCitzdGF0aWMgdTE2IG11c2JfaF9mbHVzaF9yeGZpZm8oc3RydWN0IG11c2JfaHdfZXAgKmh3X2VwLCB1MTYgY3NyKQogewogCS8qIHdlIGRvbid0IHdhbnQgZmlmbyB0byBmaWxsIGl0c2VsZiBhZ2FpbjsKIAkgKiBpZ25vcmUgZG1hICh2YXJpb3VzIG1vZGVscyksCkBAIC0xMDA1LDcgKzEwMDQsNyBAQAogCiAvKgogICogSGFuZGxlIGRlZmF1bHQgZW5kcG9pbnQgaW50ZXJydXB0IGFzIGhvc3QuIE9ubHkgY2FsbGVkIGluIElSUSB0aW1lCi0gKiBmcm9tIHRoZSBMaW51eElzcigpIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCisgKiBmcm9tIG11c2JfaW50ZXJydXB0KCkuCiAgKgogICogY2FsbGVkIHdpdGggY29udHJvbGxlciBpcnFsb2NrZWQKICAqLwpAQCAtMTc5MSw3ICsxNzkwLDkgQEAKIAkgKi8KIAlxaCA9IGt6YWxsb2Moc2l6ZW9mICpxaCwgbWVtX2ZsYWdzKTsKIAlpZiAoIXFoKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE4NzMsNyArMTg3NCwxMSBAQAogCQkJLyogc2V0IHVwIHR0IGluZm8gaWYgbmVlZGVkICovCiAJCQlpZiAodXJiLT5kZXYtPnR0KSB7CiAJCQkJcWgtPmhfcG9ydF9yZWcgPSAodTgpIHVyYi0+ZGV2LT50dHBvcnQ7Ci0JCQkJcWgtPmhfYWRkcl9yZWcgfD0gMHg4MDsKKwkJCQlpZiAodXJiLT5kZXYtPnR0LT5odWIpCisJCQkJCXFoLT5oX2FkZHJfcmVnID0KKwkJCQkJCSh1OCkgdXJiLT5kZXYtPnR0LT5odWItPmRldm51bTsKKwkJCQlpZiAodXJiLT5kZXYtPnR0LT5tdWx0aSkKKwkJCQkJcWgtPmhfYWRkcl9yZWcgfD0gMHg4MDsKIAkJCX0KIAkJfQogCX0KQEAgLTE5MDMsNyArMTkwOCw5IEBACiAKIGRvbmU6CiAJaWYgKHJldCAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCQlrZnJlZShxaCk7CiAJfQogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaW8uaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oCmluZGV4IDZiYmVkYWUuLjIyM2YwYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9pby5oCkBAIC0zNyw3ICszNyw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaWZuZGVmCUNPTkZJR19BUk0KKyNpZiAhZGVmaW5lZChDT05GSUdfQVJNKSAmJiAhZGVmaW5lZChDT05GSUdfU1VQRVJIKSBcCisJJiYgIWRlZmluZWQoQ09ORklHX0FWUjMyKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDMzIpIFwKKwkmJiAhZGVmaW5lZChDT05GSUdfUFBDNjQpCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVhZHNsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQogCXsgaW5zbCgodW5zaWduZWQgbG9uZylhZGRyLCBidWYsIGxlbik7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCByZWFkc3coY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYwppbmRleCA5YmE4ZmI3Li44YzczNGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMKQEAgLTQ1LDggKzQ1LDggQEAKICNkZWZpbmUgTVVTQl9IU0RNQV9BRERSRVNTCQkweDgKICNkZWZpbmUgTVVTQl9IU0RNQV9DT1VOVAkJMHhjCiAKLSNkZWZpbmUgTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChfYkNoYW5uZWwsIF9vZmZzZXQpCQlcCi0JCShNVVNCX0hTRE1BX0JBU0UgKyAoX2JDaGFubmVsIDw8IDQpICsgX29mZnNldCkKKyNkZWZpbmUgTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChfYmNoYW5uZWwsIF9vZmZzZXQpCQlcCisJCShNVVNCX0hTRE1BX0JBU0UgKyAoX2JjaGFubmVsIDw8IDQpICsgX29mZnNldCkKIAogLyogY29udHJvbCByZWdpc3RlciAoMTYtYml0KTogKi8KICNkZWZpbmUgTVVTQl9IU0RNQV9FTkFCTEVfU0hJRlQJCTAKQEAgLTY3LDIzICs2NywyMyBAQAogc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXI7CiAKIHN0cnVjdCBtdXNiX2RtYV9jaGFubmVsIHsKLQlzdHJ1Y3QgZG1hX2NoYW5uZWwJCUNoYW5uZWw7CisJc3RydWN0IGRtYV9jaGFubmVsCQljaGFubmVsOwogCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyCSpjb250cm9sbGVyOwotCXUzMgkJCQlkd1N0YXJ0QWRkcmVzczsKKwl1MzIJCQkJc3RhcnRfYWRkcjsKIAl1MzIJCQkJbGVuOwotCXUxNgkJCQl3TWF4UGFja2V0U2l6ZTsKLQl1OAkJCQliSW5kZXg7CisJdTE2CQkJCW1heF9wYWNrZXRfc3o7CisJdTgJCQkJaWR4OwogCXU4CQkJCWVwbnVtOwogCXU4CQkJCXRyYW5zbWl0OwogfTsKIAogc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIgewotCXN0cnVjdCBkbWFfY29udHJvbGxlcgkJQ29udHJvbGxlcjsKLQlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbAkJYUNoYW5uZWxbTVVTQl9IU0RNQV9DSEFOTkVMU107Ci0Jdm9pZAkJCQkqcERtYVByaXZhdGU7Ci0Jdm9pZCBfX2lvbWVtCQkJKnBDb3JlQmFzZTsKLQl1OAkJCQliQ2hhbm5lbENvdW50OwotCXU4CQkJCWJtVXNlZENoYW5uZWxzOworCXN0cnVjdCBkbWFfY29udHJvbGxlcgkJY29udHJvbGxlcjsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbAkJY2hhbm5lbFtNVVNCX0hTRE1BX0NIQU5ORUxTXTsKKwl2b2lkCQkJCSpwcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtCQkJKmJhc2U7CisJdTgJCQkJY2hhbm5lbF9jb3VudDsKKwl1OAkJCQl1c2VkX2NoYW5uZWxzOwogCXU4CQkJCWlycTsKIH07CiAKQEAgLTkzLDkxICs5Myw5MSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkbWFfY2hhbm5lbF9yZWxlYXNlKHN0cnVjdCBkbWFfY2hhbm5lbCAqcENoYW5uZWwpOworc3RhdGljIHZvaWQgZG1hX2NoYW5uZWxfcmVsZWFzZShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwpOwogCiBzdGF0aWMgaW50IGRtYV9jb250cm9sbGVyX3N0b3Aoc3RydWN0IGRtYV9jb250cm9sbGVyICpjKQogewotCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0KLQkJY29udGFpbmVyX29mKGMsIHN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyLCBDb250cm9sbGVyKTsKLQlzdHJ1Y3QgbXVzYiAqbXVzYiA9IChzdHJ1Y3QgbXVzYiAqKSBjb250cm9sbGVyLT5wRG1hUHJpdmF0ZTsKLQlzdHJ1Y3QgZG1hX2NoYW5uZWwgKnBDaGFubmVsOwotCXU4IGJCaXQ7CisJc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBjb250YWluZXJfb2YoYywKKwkJCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyLCBjb250cm9sbGVyKTsKKwlzdHJ1Y3QgbXVzYiAqbXVzYiA9IGNvbnRyb2xsZXItPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWw7CisJdTggYml0OwogCi0JaWYgKGNvbnRyb2xsZXItPmJtVXNlZENoYW5uZWxzICE9IDApIHsKKwlpZiAoY29udHJvbGxlci0+dXNlZF9jaGFubmVscyAhPSAwKSB7CiAJCWRldl9lcnIobXVzYi0+Y29udHJvbGxlciwKIAkJCSJTdG9wcGluZyBETUEgY29udHJvbGxlciB3aGlsZSBjaGFubmVsIGFjdGl2ZVxuIik7CiAKLQkJZm9yIChiQml0ID0gMDsgYkJpdCA8IE1VU0JfSFNETUFfQ0hBTk5FTFM7IGJCaXQrKykgewotCQkJaWYgKGNvbnRyb2xsZXItPmJtVXNlZENoYW5uZWxzICYgKDEgPDwgYkJpdCkpIHsKLQkJCQlwQ2hhbm5lbCA9ICZjb250cm9sbGVyLT5hQ2hhbm5lbFtiQml0XS5DaGFubmVsOwotCQkJCWRtYV9jaGFubmVsX3JlbGVhc2UocENoYW5uZWwpOworCQlmb3IgKGJpdCA9IDA7IGJpdCA8IE1VU0JfSFNETUFfQ0hBTk5FTFM7IGJpdCsrKSB7CisJCQlpZiAoY29udHJvbGxlci0+dXNlZF9jaGFubmVscyAmICgxIDw8IGJpdCkpIHsKKwkJCQljaGFubmVsID0gJmNvbnRyb2xsZXItPmNoYW5uZWxbYml0XS5jaGFubmVsOworCQkJCWRtYV9jaGFubmVsX3JlbGVhc2UoY2hhbm5lbCk7CiAKLQkJCQlpZiAoIWNvbnRyb2xsZXItPmJtVXNlZENoYW5uZWxzKQorCQkJCWlmICghY29udHJvbGxlci0+dXNlZF9jaGFubmVscykKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfY2hhbm5lbCAqZG1hX2NoYW5uZWxfYWxsb2NhdGUoc3RydWN0IGRtYV9jb250cm9sbGVyICpjLAogCQkJCXN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTggdHJhbnNtaXQpCiB7Ci0JdTggYkJpdDsKLQlzdHJ1Y3QgZG1hX2NoYW5uZWwgKnBDaGFubmVsID0gTlVMTDsKLQlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqcEltcGxDaGFubmVsID0gTlVMTDsKLQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9Ci0JCQljb250YWluZXJfb2YoYywgc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIsIENvbnRyb2xsZXIpOworCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gY29udGFpbmVyX29mKGMsCisJCQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciwgY29udHJvbGxlcik7CisJc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKm11c2JfY2hhbm5lbCA9IE5VTEw7CisJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gTlVMTDsKKwl1OCBiaXQ7CiAKLQlmb3IgKGJCaXQgPSAwOyBiQml0IDwgTVVTQl9IU0RNQV9DSEFOTkVMUzsgYkJpdCsrKSB7Ci0JCWlmICghKGNvbnRyb2xsZXItPmJtVXNlZENoYW5uZWxzICYgKDEgPDwgYkJpdCkpKSB7Ci0JCQljb250cm9sbGVyLT5ibVVzZWRDaGFubmVscyB8PSAoMSA8PCBiQml0KTsKLQkJCXBJbXBsQ2hhbm5lbCA9ICYoY29udHJvbGxlci0+YUNoYW5uZWxbYkJpdF0pOwotCQkJcEltcGxDaGFubmVsLT5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLQkJCXBJbXBsQ2hhbm5lbC0+YkluZGV4ID0gYkJpdDsKLQkJCXBJbXBsQ2hhbm5lbC0+ZXBudW0gPSBod19lcC0+ZXBudW07Ci0JCQlwSW1wbENoYW5uZWwtPnRyYW5zbWl0ID0gdHJhbnNtaXQ7Ci0JCQlwQ2hhbm5lbCA9ICYocEltcGxDaGFubmVsLT5DaGFubmVsKTsKLQkJCXBDaGFubmVsLT5wcml2YXRlX2RhdGEgPSBwSW1wbENoYW5uZWw7Ci0JCQlwQ2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7Ci0JCQlwQ2hhbm5lbC0+bWF4X2xlbiA9IDB4MTAwMDA7CisJZm9yIChiaXQgPSAwOyBiaXQgPCBNVVNCX0hTRE1BX0NIQU5ORUxTOyBiaXQrKykgeworCQlpZiAoIShjb250cm9sbGVyLT51c2VkX2NoYW5uZWxzICYgKDEgPDwgYml0KSkpIHsKKwkJCWNvbnRyb2xsZXItPnVzZWRfY2hhbm5lbHMgfD0gKDEgPDwgYml0KTsKKwkJCW11c2JfY2hhbm5lbCA9ICYoY29udHJvbGxlci0+Y2hhbm5lbFtiaXRdKTsKKwkJCW11c2JfY2hhbm5lbC0+Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisJCQltdXNiX2NoYW5uZWwtPmlkeCA9IGJpdDsKKwkJCW11c2JfY2hhbm5lbC0+ZXBudW0gPSBod19lcC0+ZXBudW07CisJCQltdXNiX2NoYW5uZWwtPnRyYW5zbWl0ID0gdHJhbnNtaXQ7CisJCQljaGFubmVsID0gJihtdXNiX2NoYW5uZWwtPmNoYW5uZWwpOworCQkJY2hhbm5lbC0+cHJpdmF0ZV9kYXRhID0gbXVzYl9jaGFubmVsOworCQkJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CisJCQljaGFubmVsLT5tYXhfbGVuID0gMHgxMDAwMDsKIAkJCS8qIFR4ID0+IG1vZGUgMTsgUnggPT4gbW9kZSAwICovCi0JCQlwQ2hhbm5lbC0+ZGVzaXJlZF9tb2RlID0gdHJhbnNtaXQ7Ci0JCQlwQ2hhbm5lbC0+YWN0dWFsX2xlbiA9IDA7CisJCQljaGFubmVsLT5kZXNpcmVkX21vZGUgPSB0cmFuc21pdDsKKwkJCWNoYW5uZWwtPmFjdHVhbF9sZW4gPSAwOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIHBDaGFubmVsOworCisJcmV0dXJuIGNoYW5uZWw7CiB9CiAKLXN0YXRpYyB2b2lkIGRtYV9jaGFubmVsX3JlbGVhc2Uoc3RydWN0IGRtYV9jaGFubmVsICpwQ2hhbm5lbCkKK3N0YXRpYyB2b2lkIGRtYV9jaGFubmVsX3JlbGVhc2Uoc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsKQogewotCXN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICpwSW1wbENoYW5uZWwgPQotCQkoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikgcENoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOwogCi0JcENoYW5uZWwtPmFjdHVhbF9sZW4gPSAwOwotCXBJbXBsQ2hhbm5lbC0+ZHdTdGFydEFkZHJlc3MgPSAwOwotCXBJbXBsQ2hhbm5lbC0+bGVuID0gMDsKKwljaGFubmVsLT5hY3R1YWxfbGVuID0gMDsKKwltdXNiX2NoYW5uZWwtPnN0YXJ0X2FkZHIgPSAwOworCW11c2JfY2hhbm5lbC0+bGVuID0gMDsKIAotCXBJbXBsQ2hhbm5lbC0+Y29udHJvbGxlci0+Ym1Vc2VkQ2hhbm5lbHMgJj0KLQkJfigxIDw8IHBJbXBsQ2hhbm5lbC0+YkluZGV4KTsKKwltdXNiX2NoYW5uZWwtPmNvbnRyb2xsZXItPnVzZWRfY2hhbm5lbHMgJj0KKwkJfigxIDw8IG11c2JfY2hhbm5lbC0+aWR4KTsKIAotCXBDaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfVU5LTk9XTjsKKwljaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfVU5LTk9XTjsKIH0KIAotc3RhdGljIHZvaWQgY29uZmlndXJlX2NoYW5uZWwoc3RydWN0IGRtYV9jaGFubmVsICpwQ2hhbm5lbCwKK3N0YXRpYyB2b2lkIGNvbmZpZ3VyZV9jaGFubmVsKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCQl1MTYgcGFja2V0X3N6LCB1OCBtb2RlLAogCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBsZW4pCiB7Ci0Jc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKnBJbXBsQ2hhbm5lbCA9Ci0JCShzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqKSBwQ2hhbm5lbC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gcEltcGxDaGFubmVsLT5jb250cm9sbGVyOwotCXZvaWQgX19pb21lbSAqbWJhc2UgPSBjb250cm9sbGVyLT5wQ29yZUJhc2U7Ci0JdTggYkNoYW5uZWwgPSBwSW1wbENoYW5uZWwtPmJJbmRleDsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gbXVzYl9jaGFubmVsLT5jb250cm9sbGVyOworCXZvaWQgX19pb21lbSAqbWJhc2UgPSBjb250cm9sbGVyLT5iYXNlOworCXU4IGJjaGFubmVsID0gbXVzYl9jaGFubmVsLT5pZHg7CiAJdTE2IGNzciA9IDA7CiAKIAlEQkcoNCwgIiVwLCBwa3Rfc3ogJWQsIGFkZHIgMHgleCwgbGVuICVkLCBtb2RlICVkXG4iLAotCQkJcENoYW5uZWwsIHBhY2tldF9zeiwgZG1hX2FkZHIsIGxlbiwgbW9kZSk7CisJCQljaGFubmVsLCBwYWNrZXRfc3osIGRtYV9hZGRyLCBsZW4sIG1vZGUpOwogCiAJaWYgKG1vZGUpIHsKIAkJY3NyIHw9IDEgPDwgTVVTQl9IU0RNQV9NT0RFMV9TSElGVDsKQEAgLTE5NSwxODAgKzE5NSwxODMgQEAKIAkJfQogCX0KIAotCWNzciB8PSAocEltcGxDaGFubmVsLT5lcG51bSA8PCBNVVNCX0hTRE1BX0VORFBPSU5UX1NISUZUKQorCWNzciB8PSAobXVzYl9jaGFubmVsLT5lcG51bSA8PCBNVVNCX0hTRE1BX0VORFBPSU5UX1NISUZUKQogCQl8ICgxIDw8IE1VU0JfSFNETUFfRU5BQkxFX1NISUZUKQogCQl8ICgxIDw8IE1VU0JfSFNETUFfSVJRRU5BQkxFX1NISUZUKQotCQl8IChwSW1wbENoYW5uZWwtPnRyYW5zbWl0CisJCXwgKG11c2JfY2hhbm5lbC0+dHJhbnNtaXQKIAkJCQk/ICgxIDw8IE1VU0JfSFNETUFfVFJBTlNNSVRfU0hJRlQpCiAJCQkJOiAwKTsKIAogCS8qIGFkZHJlc3MvY291bnQgKi8KIAltdXNiX3dyaXRlbChtYmFzZSwKLQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiQ2hhbm5lbCwgTVVTQl9IU0RNQV9BRERSRVNTKSwKKwkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9BRERSRVNTKSwKIAkJZG1hX2FkZHIpOwogCW11c2Jfd3JpdGVsKG1iYXNlLAotCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJDaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UKSwKKwkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9DT1VOVCksCiAJCWxlbik7CiAKIAkvKiBjb250cm9sICh0aGlzIHNob3VsZCBzdGFydCB0aGluZ3MpICovCiAJbXVzYl93cml0ZXcobWJhc2UsCi0JCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYkNoYW5uZWwsIE1VU0JfSFNETUFfQ09OVFJPTCksCisJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQ09OVFJPTCksCiAJCWNzcik7CiB9CiAKLXN0YXRpYyBpbnQgZG1hX2NoYW5uZWxfcHJvZ3JhbShzdHJ1Y3QgZG1hX2NoYW5uZWwgKnBDaGFubmVsLAorc3RhdGljIGludCBkbWFfY2hhbm5lbF9wcm9ncmFtKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCQl1MTYgcGFja2V0X3N6LCB1OCBtb2RlLAogCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBsZW4pCiB7Ci0Jc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKnBJbXBsQ2hhbm5lbCA9Ci0JCQkoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikgcENoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOwogCiAJREJHKDIsICJlcCVkLSVzIHBrdF9zeiAlZCwgZG1hX2FkZHIgMHgleCBsZW5ndGggJWQsIG1vZGUgJWRcbiIsCi0JCXBJbXBsQ2hhbm5lbC0+ZXBudW0sCi0JCXBJbXBsQ2hhbm5lbC0+dHJhbnNtaXQgPyAiVHgiIDogIlJ4IiwKKwkJbXVzYl9jaGFubmVsLT5lcG51bSwKKwkJbXVzYl9jaGFubmVsLT50cmFuc21pdCA/ICJUeCIgOiAiUngiLAogCQlwYWNrZXRfc3osIGRtYV9hZGRyLCBsZW4sIG1vZGUpOwogCi0JQlVHX09OKHBDaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX1VOS05PV04gfHwKLQkJcENoYW5uZWwtPnN0YXR1cyA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSk7CisJQlVHX09OKGNoYW5uZWwtPnN0YXR1cyA9PSBNVVNCX0RNQV9TVEFUVVNfVU5LTk9XTiB8fAorCQljaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpOwogCi0JcENoYW5uZWwtPmFjdHVhbF9sZW4gPSAwOwotCXBJbXBsQ2hhbm5lbC0+ZHdTdGFydEFkZHJlc3MgPSBkbWFfYWRkcjsKLQlwSW1wbENoYW5uZWwtPmxlbiA9IGxlbjsKLQlwSW1wbENoYW5uZWwtPndNYXhQYWNrZXRTaXplID0gcGFja2V0X3N6OwotCXBDaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfQlVTWTsKKwljaGFubmVsLT5hY3R1YWxfbGVuID0gMDsKKwltdXNiX2NoYW5uZWwtPnN0YXJ0X2FkZHIgPSBkbWFfYWRkcjsKKwltdXNiX2NoYW5uZWwtPmxlbiA9IGxlbjsKKwltdXNiX2NoYW5uZWwtPm1heF9wYWNrZXRfc3ogPSBwYWNrZXRfc3o7CisJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0JVU1k7CiAKIAlpZiAoKG1vZGUgPT0gMSkgJiYgKGxlbiA+PSBwYWNrZXRfc3opKQotCQljb25maWd1cmVfY2hhbm5lbChwQ2hhbm5lbCwgcGFja2V0X3N6LCAxLCBkbWFfYWRkciwgbGVuKTsKKwkJY29uZmlndXJlX2NoYW5uZWwoY2hhbm5lbCwgcGFja2V0X3N6LCAxLCBkbWFfYWRkciwgbGVuKTsKIAllbHNlCi0JCWNvbmZpZ3VyZV9jaGFubmVsKHBDaGFubmVsLCBwYWNrZXRfc3osIDAsIGRtYV9hZGRyLCBsZW4pOworCQljb25maWd1cmVfY2hhbm5lbChjaGFubmVsLCBwYWNrZXRfc3osIDAsIGRtYV9hZGRyLCBsZW4pOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgZG1hX2NoYW5uZWxfYWJvcnQoc3RydWN0IGRtYV9jaGFubmVsICpwQ2hhbm5lbCkKK3N0YXRpYyBpbnQgZG1hX2NoYW5uZWxfYWJvcnQoc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsKQogewotCXN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICpwSW1wbENoYW5uZWwgPQotCQkoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikgcENoYW5uZWwtPnByaXZhdGVfZGF0YTsKLQl1OCBiQ2hhbm5lbCA9IHBJbXBsQ2hhbm5lbC0+YkluZGV4OwotCXZvaWQgX19pb21lbSAqbWJhc2UgPSBwSW1wbENoYW5uZWwtPmNvbnRyb2xsZXItPnBDb3JlQmFzZTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsID0gY2hhbm5lbC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqbWJhc2UgPSBtdXNiX2NoYW5uZWwtPmNvbnRyb2xsZXItPmJhc2U7CisKKwl1OCBiY2hhbm5lbCA9IG11c2JfY2hhbm5lbC0+aWR4OwogCXUxNiBjc3I7CiAKLQlpZiAocENoYW5uZWwtPnN0YXR1cyA9PSBNVVNCX0RNQV9TVEFUVVNfQlVTWSkgewotCQlpZiAocEltcGxDaGFubmVsLT50cmFuc21pdCkgeworCWlmIChjaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpIHsKKwkJaWYgKG11c2JfY2hhbm5lbC0+dHJhbnNtaXQpIHsKIAogCQkJY3NyID0gbXVzYl9yZWFkdyhtYmFzZSwKLQkJCQlNVVNCX0VQX09GRlNFVChwSW1wbENoYW5uZWwtPmVwbnVtLAorCQkJCU1VU0JfRVBfT0ZGU0VUKG11c2JfY2hhbm5lbC0+ZXBudW0sCiAJCQkJCQlNVVNCX1RYQ1NSKSk7CiAJCQljc3IgJj0gfihNVVNCX1RYQ1NSX0FVVE9TRVQgfAogCQkJCSBNVVNCX1RYQ1NSX0RNQUVOQUIgfAogCQkJCSBNVVNCX1RYQ1NSX0RNQU1PREUpOwogCQkJbXVzYl93cml0ZXcobWJhc2UsCi0JCQkJTVVTQl9FUF9PRkZTRVQocEltcGxDaGFubmVsLT5lcG51bSwKLQkJCQkJCU1VU0JfVFhDU1IpLAorCQkJCU1VU0JfRVBfT0ZGU0VUKG11c2JfY2hhbm5lbC0+ZXBudW0sIE1VU0JfVFhDU1IpLAogCQkJCWNzcik7CiAJCX0gZWxzZSB7CiAJCQljc3IgPSBtdXNiX3JlYWR3KG1iYXNlLAotCQkJCU1VU0JfRVBfT0ZGU0VUKHBJbXBsQ2hhbm5lbC0+ZXBudW0sCisJCQkJTVVTQl9FUF9PRkZTRVQobXVzYl9jaGFubmVsLT5lcG51bSwKIAkJCQkJCU1VU0JfUlhDU1IpKTsKIAkJCWNzciAmPSB+KE1VU0JfUlhDU1JfQVVUT0NMRUFSIHwKIAkJCQkgTVVTQl9SWENTUl9ETUFFTkFCIHwKIAkJCQkgTVVTQl9SWENTUl9ETUFNT0RFKTsKIAkJCW11c2Jfd3JpdGV3KG1iYXNlLAotCQkJCU1VU0JfRVBfT0ZGU0VUKHBJbXBsQ2hhbm5lbC0+ZXBudW0sCi0JCQkJCQlNVVNCX1JYQ1NSKSwKKwkJCQlNVVNCX0VQX09GRlNFVChtdXNiX2NoYW5uZWwtPmVwbnVtLCBNVVNCX1JYQ1NSKSwKIAkJCQljc3IpOwogCQl9CiAKIAkJbXVzYl93cml0ZXcobWJhc2UsCi0JCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJDaGFubmVsLCBNVVNCX0hTRE1BX0NPTlRST0wpLAorCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9DT05UUk9MKSwKIAkJCTApOwogCQltdXNiX3dyaXRlbChtYmFzZSwKLQkJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYkNoYW5uZWwsIE1VU0JfSFNETUFfQUREUkVTUyksCisJCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0FERFJFU1MpLAogCQkJMCk7CiAJCW11c2Jfd3JpdGVsKG1iYXNlLAotCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiQ2hhbm5lbCwgTVVTQl9IU0RNQV9DT1VOVCksCisJCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UKSwKIAkJCTApOwogCi0JCXBDaGFubmVsLT5zdGF0dXMgPSBNVVNCX0RNQV9TVEFUVVNfRlJFRTsKKwkJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfY29udHJvbGxlcl9pcnEoaW50IGlycSwgdm9pZCAqcHJpdmF0ZV9kYXRhKQogewotCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0KLQkJKHN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICopcHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICpwSW1wbENoYW5uZWw7Ci0Jc3RydWN0IG11c2IgKm11c2IgPSBjb250cm9sbGVyLT5wRG1hUHJpdmF0ZTsKLQl2b2lkIF9faW9tZW0gKm1iYXNlID0gY29udHJvbGxlci0+cENvcmVCYXNlOwotCXN0cnVjdCBkbWFfY2hhbm5lbCAqcENoYW5uZWw7Ci0JdTggYkNoYW5uZWw7Ci0JdTE2IGNzcjsKLQl1MzIgZHdBZGRyZXNzOwotCXU4IGludF9oc2RtYTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9IHByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYiAqbXVzYiA9IGNvbnRyb2xsZXItPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqbXVzYl9jaGFubmVsOworCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbDsKKworCXZvaWQgX19pb21lbSAqbWJhc2UgPSBjb250cm9sbGVyLT5iYXNlOworCiAJaXJxcmV0dXJuX3QgcmV0dmFsID0gSVJRX05PTkU7CisKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJdTggYmNoYW5uZWw7CisJdTggaW50X2hzZG1hOworCisJdTMyIGFkZHI7CisJdTE2IGNzcjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAKIAlpbnRfaHNkbWEgPSBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0hTRE1BX0lOVFIpOwogCWlmICghaW50X2hzZG1hKQogCQlnb3RvIGRvbmU7CiAKLQlmb3IgKGJDaGFubmVsID0gMDsgYkNoYW5uZWwgPCBNVVNCX0hTRE1BX0NIQU5ORUxTOyBiQ2hhbm5lbCsrKSB7Ci0JCWlmIChpbnRfaHNkbWEgJiAoMSA8PCBiQ2hhbm5lbCkpIHsKLQkJCXBJbXBsQ2hhbm5lbCA9IChzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqKQotCQkJCQkmKGNvbnRyb2xsZXItPmFDaGFubmVsW2JDaGFubmVsXSk7Ci0JCQlwQ2hhbm5lbCA9ICZwSW1wbENoYW5uZWwtPkNoYW5uZWw7CisJZm9yIChiY2hhbm5lbCA9IDA7IGJjaGFubmVsIDwgTVVTQl9IU0RNQV9DSEFOTkVMUzsgYmNoYW5uZWwrKykgeworCQlpZiAoaW50X2hzZG1hICYgKDEgPDwgYmNoYW5uZWwpKSB7CisJCQltdXNiX2NoYW5uZWwgPSAoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikKKwkJCQkJJihjb250cm9sbGVyLT5jaGFubmVsW2JjaGFubmVsXSk7CisJCQljaGFubmVsID0gJm11c2JfY2hhbm5lbC0+Y2hhbm5lbDsKIAogCQkJY3NyID0gbXVzYl9yZWFkdyhtYmFzZSwKLQkJCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiQ2hhbm5lbCwKKwkJCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwKIAkJCQkJCQlNVVNCX0hTRE1BX0NPTlRST0wpKTsKIAotCQkJaWYgKGNzciAmICgxIDw8IE1VU0JfSFNETUFfQlVTRVJST1JfU0hJRlQpKQotCQkJCXBJbXBsQ2hhbm5lbC0+Q2hhbm5lbC5zdGF0dXMgPQorCQkJaWYgKGNzciAmICgxIDw8IE1VU0JfSFNETUFfQlVTRVJST1JfU0hJRlQpKSB7CisJCQkJbXVzYl9jaGFubmVsLT5jaGFubmVsLnN0YXR1cyA9CiAJCQkJCU1VU0JfRE1BX1NUQVRVU19CVVNfQUJPUlQ7Ci0JCQllbHNlIHsKKwkJCX0gZWxzZSB7CiAJCQkJdTggZGV2Y3RsOwogCi0JCQkJZHdBZGRyZXNzID0gbXVzYl9yZWFkbChtYmFzZSwKKwkJCQlhZGRyID0gbXVzYl9yZWFkbChtYmFzZSwKIAkJCQkJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoCi0JCQkJCQkJYkNoYW5uZWwsCisJCQkJCQkJYmNoYW5uZWwsCiAJCQkJCQkJTVVTQl9IU0RNQV9BRERSRVNTKSk7Ci0JCQkJcENoYW5uZWwtPmFjdHVhbF9sZW4gPSBkd0FkZHJlc3MKLQkJCQkJLSBwSW1wbENoYW5uZWwtPmR3U3RhcnRBZGRyZXNzOworCQkJCWNoYW5uZWwtPmFjdHVhbF9sZW4gPSBhZGRyCisJCQkJCS0gbXVzYl9jaGFubmVsLT5zdGFydF9hZGRyOwogCiAJCQkJREJHKDIsICJjaCAlcCwgMHgleCAtPiAweCV4ICglZCAvICVkKSAlc1xuIiwKLQkJCQkJcENoYW5uZWwsIHBJbXBsQ2hhbm5lbC0+ZHdTdGFydEFkZHJlc3MsCi0JCQkJCWR3QWRkcmVzcywgcENoYW5uZWwtPmFjdHVhbF9sZW4sCi0JCQkJCXBJbXBsQ2hhbm5lbC0+bGVuLAotCQkJCQkocENoYW5uZWwtPmFjdHVhbF9sZW4KLQkJCQkJCTwgcEltcGxDaGFubmVsLT5sZW4pID8KKwkJCQkJY2hhbm5lbCwgbXVzYl9jaGFubmVsLT5zdGFydF9hZGRyLAorCQkJCQlhZGRyLCBjaGFubmVsLT5hY3R1YWxfbGVuLAorCQkJCQltdXNiX2NoYW5uZWwtPmxlbiwKKwkJCQkJKGNoYW5uZWwtPmFjdHVhbF9sZW4KKwkJCQkJCTwgbXVzYl9jaGFubmVsLT5sZW4pID8KIAkJCQkJIj0+IHJlY29uZmlnIDAiIDogIj0+IGNvbXBsZXRlIik7CiAKIAkJCQlkZXZjdGwgPSBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0RFVkNUTCk7CiAKLQkJCQlwQ2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CisJCQkJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CiAKIAkJCQkvKiBjb21wbGV0ZWQgKi8KIAkJCQlpZiAoKGRldmN0bCAmIE1VU0JfREVWQ1RMX0hNKQotCQkJCQkmJiAocEltcGxDaGFubmVsLT50cmFuc21pdCkKLQkJCQkJJiYgKChwQ2hhbm5lbC0+ZGVzaXJlZF9tb2RlID09IDApCi0JCQkJCSAgICB8fCAocENoYW5uZWwtPmFjdHVhbF9sZW4gJgotCQkJCQkgICAgKHBJbXBsQ2hhbm5lbC0+d01heFBhY2tldFNpemUgLSAxKSkpCisJCQkJCSYmIChtdXNiX2NoYW5uZWwtPnRyYW5zbWl0KQorCQkJCQkmJiAoKGNoYW5uZWwtPmRlc2lyZWRfbW9kZSA9PSAwKQorCQkJCQkgICAgfHwgKGNoYW5uZWwtPmFjdHVhbF9sZW4gJgorCQkJCQkgICAgKG11c2JfY2hhbm5lbC0+bWF4X3BhY2tldF9zeiAtIDEpKSkKIAkJCQkJICkgewogCQkJCQkvKiBTZW5kIG91dCB0aGUgcGFja2V0ICovCiAJCQkJCW11c2JfZXBfc2VsZWN0KG1iYXNlLAotCQkJCQkJcEltcGxDaGFubmVsLT5lcG51bSk7CisJCQkJCQltdXNiX2NoYW5uZWwtPmVwbnVtKTsKIAkJCQkJbXVzYl93cml0ZXcobWJhc2UsIE1VU0JfRVBfT0ZGU0VUKAotCQkJCQkJCXBJbXBsQ2hhbm5lbC0+ZXBudW0sCisJCQkJCQkJbXVzYl9jaGFubmVsLT5lcG51bSwKIAkJCQkJCQlNVVNCX1RYQ1NSKSwKIAkJCQkJCU1VU0JfVFhDU1JfVFhQS1RSRFkpOwotCQkJCX0gZWxzZQorCQkJCX0gZWxzZSB7CiAJCQkJCW11c2JfZG1hX2NvbXBsZXRpb24oCiAJCQkJCQltdXNiLAotCQkJCQkJcEltcGxDaGFubmVsLT5lcG51bSwKLQkJCQkJCXBJbXBsQ2hhbm5lbC0+dHJhbnNtaXQpOworCQkJCQkJbXVzYl9jaGFubmVsLT5lcG51bSwKKwkJCQkJCW11c2JfY2hhbm5lbC0+dHJhbnNtaXQpOworCQkJCX0KIAkJCX0KIAkJfQogCX0KQEAgLTM4MCw5ICszODMsOSBAQAogCiB2b2lkIGRtYV9jb250cm9sbGVyX2Rlc3Ryb3koc3RydWN0IGRtYV9jb250cm9sbGVyICpjKQogewotCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyOworCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gY29udGFpbmVyX29mKGMsCisJCQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciwgY29udHJvbGxlcik7CiAKLQljb250cm9sbGVyID0gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyLCBDb250cm9sbGVyKTsKIAlpZiAoIWNvbnRyb2xsZXIpCiAJCXJldHVybjsKIApAQCAtMzkzLDcgKzM5Niw3IEBACiB9CiAKIHN0cnVjdCBkbWFfY29udHJvbGxlciAqX19pbml0Ci1kbWFfY29udHJvbGxlcl9jcmVhdGUoc3RydWN0IG11c2IgKm11c2IsIHZvaWQgX19pb21lbSAqcENvcmVCYXNlKQorZG1hX2NvbnRyb2xsZXJfY3JlYXRlKHN0cnVjdCBtdXNiICptdXNiLCB2b2lkIF9faW9tZW0gKmJhc2UpCiB7CiAJc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXI7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gbXVzYi0+Y29udHJvbGxlcjsKQEAgLTQwNSwyOSArNDA4LDMwIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWNvbnRyb2xsZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciksIEdGUF9LRVJORUwpOworCWNvbnRyb2xsZXIgPSBremFsbG9jKHNpemVvZigqY29udHJvbGxlciksIEdGUF9LRVJORUwpOwogCWlmICghY29udHJvbGxlcikKIAkJcmV0dXJuIE5VTEw7CiAKLQljb250cm9sbGVyLT5iQ2hhbm5lbENvdW50ID0gTVVTQl9IU0RNQV9DSEFOTkVMUzsKLQljb250cm9sbGVyLT5wRG1hUHJpdmF0ZSA9IG11c2I7Ci0JY29udHJvbGxlci0+cENvcmVCYXNlID0gcENvcmVCYXNlOworCWNvbnRyb2xsZXItPmNoYW5uZWxfY291bnQgPSBNVVNCX0hTRE1BX0NIQU5ORUxTOworCWNvbnRyb2xsZXItPnByaXZhdGVfZGF0YSA9IG11c2I7CisJY29udHJvbGxlci0+YmFzZSA9IGJhc2U7CiAKLQljb250cm9sbGVyLT5Db250cm9sbGVyLnN0YXJ0ID0gZG1hX2NvbnRyb2xsZXJfc3RhcnQ7Ci0JY29udHJvbGxlci0+Q29udHJvbGxlci5zdG9wID0gZG1hX2NvbnRyb2xsZXJfc3RvcDsKLQljb250cm9sbGVyLT5Db250cm9sbGVyLmNoYW5uZWxfYWxsb2MgPSBkbWFfY2hhbm5lbF9hbGxvY2F0ZTsKLQljb250cm9sbGVyLT5Db250cm9sbGVyLmNoYW5uZWxfcmVsZWFzZSA9IGRtYV9jaGFubmVsX3JlbGVhc2U7Ci0JY29udHJvbGxlci0+Q29udHJvbGxlci5jaGFubmVsX3Byb2dyYW0gPSBkbWFfY2hhbm5lbF9wcm9ncmFtOwotCWNvbnRyb2xsZXItPkNvbnRyb2xsZXIuY2hhbm5lbF9hYm9ydCA9IGRtYV9jaGFubmVsX2Fib3J0OworCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuc3RhcnQgPSBkbWFfY29udHJvbGxlcl9zdGFydDsKKwljb250cm9sbGVyLT5jb250cm9sbGVyLnN0b3AgPSBkbWFfY29udHJvbGxlcl9zdG9wOworCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuY2hhbm5lbF9hbGxvYyA9IGRtYV9jaGFubmVsX2FsbG9jYXRlOworCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuY2hhbm5lbF9yZWxlYXNlID0gZG1hX2NoYW5uZWxfcmVsZWFzZTsKKwljb250cm9sbGVyLT5jb250cm9sbGVyLmNoYW5uZWxfcHJvZ3JhbSA9IGRtYV9jaGFubmVsX3Byb2dyYW07CisJY29udHJvbGxlci0+Y29udHJvbGxlci5jaGFubmVsX2Fib3J0ID0gZG1hX2NoYW5uZWxfYWJvcnQ7CiAKIAlpZiAocmVxdWVzdF9pcnEoaXJxLCBkbWFfY29udHJvbGxlcl9pcnEsIElSUUZfRElTQUJMRUQsCi0JCQltdXNiLT5jb250cm9sbGVyLT5idXNfaWQsICZjb250cm9sbGVyLT5Db250cm9sbGVyKSkgeworCQkJbXVzYi0+Y29udHJvbGxlci0+YnVzX2lkLCAmY29udHJvbGxlci0+Y29udHJvbGxlcikpIHsKIAkJZGV2X2VycihkZXYsICJyZXF1ZXN0X2lycSAlZCBmYWlsZWQhXG4iLCBpcnEpOwotCQlkbWFfY29udHJvbGxlcl9kZXN0cm95KCZjb250cm9sbGVyLT5Db250cm9sbGVyKTsKKwkJZG1hX2NvbnRyb2xsZXJfZGVzdHJveSgmY29udHJvbGxlci0+Y29udHJvbGxlcik7CisKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJY29udHJvbGxlci0+aXJxID0gaXJxOwogCi0JcmV0dXJuICZjb250cm9sbGVyLT5Db250cm9sbGVyOworCXJldHVybiAmY29udHJvbGxlci0+Y29udHJvbGxlcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKaW5kZXggOTlmYjdkYy4uNTM3Zjk1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKQEAgLTIyMCw4ICsyMjAsOCBAQAogCiAJYnVmID0ga3phbGxvYyhjb3VudCArIEhDSV9IRUFERVJfTEVOR1RILCBHRlBfQVRPTUlDKTsKIAlpZiAoIWJ1ZikgewotCQllcnIoIiVzLSBremFsbG9jKCVkKSBmYWlsZWQuIiwgX19mdW5jX18sCi0JCSAgICBjb3VudCArIEhDSV9IRUFERVJfTEVOR1RIKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMtIGt6YWxsb2MoJWQpIGZhaWxlZC5cbiIsCisJCQlfX2Z1bmNfXywgY291bnQgKyBIQ0lfSEVBREVSX0xFTkdUSCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI3Niw3ICsyNzYsNyBAQAogCiAJaWYgKCF0dHkpIHsKIAkJc2NoZWR1bGVfd29yaygmcHJpdi0+cnhfd29yayk7Ci0JCWVycigiJXMgLSBObyB0dHkgYXZhaWxhYmxlIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE5vIHR0eSBhdmFpbGFibGVcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDsKIAl9CiAKQEAgLTMzNiw3ICszMzYsNyBAQAogCiAJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhaXJjYWJsZV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2KSB7Ci0JCWVycigiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuIiwgX19mdW5jX18sCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLlxuIiwgX19mdW5jX18sCiAJCQlzaXplb2Yoc3RydWN0IGFpcmNhYmxlX3ByaXZhdGUpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCmluZGV4IDE5MTNiYzcuLmI3ZWFjYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCS8qIHNlZSBjb21tZW50cyBhdCB0b3Agb2YgZmlsZSAqLwogCXByaXYtPmJhZF9mbG93X2NvbnRyb2wgPQogCQkobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgPD0gMHgwMjA2KSA/IDEgOiAwOwotCWluZm8oImJjZERldmljZTogJTA0eCwgYmZjOiAlZCIsCisJZGV2X2luZm8oJmRldi0+ZGV2LCAiYmNkRGV2aWNlOiAlMDR4LCBiZmM6ICVkXG4iLAogCQkJCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwKIAkJCQkJcHJpdi0+YmFkX2Zsb3dfY29udHJvbCk7CiAKQEAgLTIyOCw3ICsyMjgsNyBAQAogCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoInVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkIik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgInVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkXG4iKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMjM2LDcgKzIzNiw3IEBACiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldHZhbCkgewogCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwotCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgInVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWRcbiIpOwogCX0KIAogZXhpdDoKQEAgLTM0Miw4ICszNDIsOCBAQAogZXhpdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fZnVuY19fLCByZXR2YWwpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoICIKKwkJCSJyZXN1bHQgJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOwogfQogCiBzdGF0aWMgdm9pZCBiZWxraW5fc2Ffc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTM4MiwxMiArMzgyLDEyIEBACiAJCWlmICgob2xkX2NmbGFnICYgQ0JBVUQpID09IEIwKSB7CiAJCQljb250cm9sX3N0YXRlIHw9IChUSU9DTV9EVFJ8VElPQ01fUlRTKTsKIAkJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0RUUl9SRVFVRVNULCAxKSA8IDApCi0JCQkJZXJyKCJTZXQgRFRSIGVycm9yIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IERUUiBlcnJvclxuIik7CiAJCQkvKiBkb24ndCBzZXQgUlRTIGlmIHVzaW5nIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLwogCQkJaWYgKCEob2xkX2NmbGFnICYgQ1JUU0NUUykpCiAJCQkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfUlRTX1JFUVVFU1QKIAkJCQkJCQkJLCAxKSA8IDApCi0JCQkJCWVycigiU2V0IFJUUyBlcnJvciIpOworCQkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgUlRTIGVycm9yXG4iKTsKIAkJfQogCX0KIApAQCAtNDAzLDE4ICs0MDMsMTggQEAKIAkJLyogUmVwb3J0IHRoZSBhY3R1YWwgYmF1ZCByYXRlIGJhY2sgdG8gdGhlIGNhbGxlciAqLwogCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOwogCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9CQVVEUkFURV9SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKLQkJCWVycigiU2V0IGJhdWRyYXRlIGVycm9yIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgYmF1ZHJhdGUgZXJyb3JcbiIpOwogCX0gZWxzZSB7CiAJCS8qIERpc2FibGUgZmxvdyBjb250cm9sICovCiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULAogCQkJCQkJQkVMS0lOX1NBX0ZMT1dfTk9ORSkgPCAwKQotCQkJZXJyKCJEaXNhYmxlIGZsb3djb250cm9sIGVycm9yIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJEaXNhYmxlIGZsb3djb250cm9sIGVycm9yXG4iKTsKIAkJLyogRHJvcCBSVFMgYW5kIERUUiAqLwogCQljb250cm9sX3N0YXRlICY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKIAkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfRFRSX1JFUVVFU1QsIDApIDwgMCkKLQkJCWVycigiRFRSIExPVyBlcnJvciIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiRFRSIExPVyBlcnJvclxuIik7CiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1JUU19SRVFVRVNULCAwKSA8IDApCi0JCQllcnIoIlJUUyBMT1cgZXJyb3IiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlJUUyBMT1cgZXJyb3JcbiIpOwogCX0KIAogCS8qIHNldCB0aGUgcGFyaXR5ICovCkBAIC00MjUsNyArNDI1LDcgQEAKIAkJZWxzZQogCQkJdXJiX3ZhbHVlID0gQkVMS0lOX1NBX1BBUklUWV9OT05FOwogCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9QQVJJVFlfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCi0JCQllcnIoIlNldCBwYXJpdHkgZXJyb3IiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBwYXJpdHkgZXJyb3JcbiIpOwogCX0KIAogCS8qIHNldCB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyAqLwpAQCAtNDQ4LDcgKzQ0OCw3IEBACiAJCQlicmVhazsKIAkJfQogCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9EQVRBX0JJVFNfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCi0JCQllcnIoIlNldCBkYXRhIGJpdHMgZXJyb3IiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBkYXRhIGJpdHMgZXJyb3JcbiIpOwogCX0KIAogCS8qIHNldCB0aGUgbnVtYmVyIG9mIHN0b3AgYml0cyAqLwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJCQkJCQk6IEJFTEtJTl9TQV9TVE9QX0JJVFMoMSk7CiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1NUT1BfQklUU19SRVFVRVNULAogCQkJCQkJCXVyYl92YWx1ZSkgPCAwKQotCQkJZXJyKCJTZXQgc3RvcCBiaXRzIGVycm9yIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgc3RvcCBiaXRzIGVycm9yXG4iKTsKIAl9CiAKIAkvKiBTZXQgZmxvdyBjb250cm9sICovCkBAIC00NzgsNyArNDc4LDcgQEAKIAkJCXVyYl92YWx1ZSAmPSB+KEJFTEtJTl9TQV9GTE9XX0lSVFMpOwogCiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKLQkJCWVycigiU2V0IGZsb3cgY29udHJvbCBlcnJvciIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IGZsb3cgY29udHJvbCBlcnJvclxuIik7CiAJfQogCiAJLyogc2F2ZSBvZmYgdGhlIG1vZGlmaWVkIHBvcnQgc2V0dGluZ3MgKi8KQEAgLTQ5NCw3ICs0OTQsNyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAKIAlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9CUkVBS19SRVFVRVNULCBicmVha19zdGF0ZSA/IDEgOiAwKSA8IDApCi0JCWVycigiU2V0IGJyZWFrX2N0bCAlZCIsIGJyZWFrX3N0YXRlKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IGJyZWFrX2N0bCAlZFxuIiwgYnJlYWtfc3RhdGUpOwogfQogCiAKQEAgLTU1NCwxMyArNTU0LDEzIEBACiAKIAlyZXR2YWwgPSBCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1JUU19SRVFVRVNULCBydHMpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWVycigiU2V0IFJUUyBlcnJvciAlZCIsIHJldHZhbCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBSVFMgZXJyb3IgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAlyZXR2YWwgPSBCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0RUUl9SRVFVRVNULCBkdHIpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWVycigiU2V0IERUUiBlcnJvciAlZCIsIHJldHZhbCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBEVFIgZXJyb3IgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZXhpdDsKIAl9CiBleGl0OgpAQCAtNTc3LDcgKzU3Nyw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZiZWxraW5fZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmYmVsa2luX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKaW5kZXggMTI3OTU1My4uODAwOGQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwpAQCAtNzUzLDcgKzc1Myw4IEBACiAJfQogCiAJLyogU3VjY2VzcyAqLwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKaW5kZXggOTRlZjM2Yy4uODU4YmRkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYwpAQCAtMTQxLDcgKzE0MSw4IEBACiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHNlcmlhbC0+cG9ydFtpXS0+aW50ZXJydXB0X2luX3VyYiwKIAkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIik7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJCSJ1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkXG4iKTsKIAkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKGludCB1cmIpIiwgX19mdW5jX18pOwogCX0KIApAQCAtMjc0LDggKzI3NSw5IEBACiAJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAorCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkJLyogVGhyb3cgYXdheSBkYXRhLiBObyBiZXR0ZXIgaWRlYSB3aGF0IHRvIGRvIHdpdGggaXQuICovCiAJCQlwcml2LT53cmZpbGxlZCA9IDA7CiAJCQlwcml2LT53cnNlbnQgPSAwOwpAQCAtMzUxLDcgKzM1Myw5IEBACiAJCQlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAocmVzdWx0KQotCQkJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fZnVuY19fLCByZXN1bHQpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyAiCisJCQkJCSJyZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgdXJiKSIsIF9fZnVuY19fKTsKIAkJfQogCX0KQEAgLTM2MCw3ICszNjQsNyBAQAogCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpCi0JCWVycigiIHVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWQiKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAidXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZFxuIik7CiAJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKGludCB1cmIpIiwgX19mdW5jX18pOwogfQogCkBAIC00MTQsOCArNDE4LDggQEAKIAkJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgIgorCQkJCSJ1cmIsIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKIAkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgdXJiKSIsIF9fZnVuY19fKTsKIAl9CiB9CkBAIC00NjIsOCArNDY2LDkgQEAKIAkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCQkvKiBUaHJvdyBhd2F5IGRhdGEuIE5vIGJldHRlciBpZGVhIHdoYXQgdG8gZG8gd2l0aCBpdC4gKi8KIAkJCXByaXYtPndyZmlsbGVkID0gMDsKIAkJCXByaXYtPndyc2VudCA9IDA7CkBAIC00OTksOCArNTA0LDkgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKLQlpbmZvKERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIiAiCisJICAgICAgIERSSVZFUl9BVVRIT1IgIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKaW5kZXggZjM1MTRhOS4uZWFlNDc0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCkBAIC00MDQsOCArNDA0LDggQEAKIAkJCSByZXR2YWwgIT0gLUVOT0RFVik7CiAKIAkJaWYgKHJldHZhbCAhPSBzaXplb2YoZmVhdHVyZV9idWZmZXIpKSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHNlbmRpbmcgc2VyaWFsIGxpbmUgc2V0dGluZ3MgLSAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJldHZhbCk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzZW5kaW5nIHNlcmlhbCAiCisJCQkJImxpbmUgc2V0dGluZ3MgLSAlZFxuIiwgX19mdW5jX18sIHJldHZhbCk7CiAJCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOwogCQl9IGVsc2UgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTQ0Myw3ICs0NDMsOCBAQAogCQkJCQkJJiYgcmV0dmFsICE9IC1FTk9ERVYpOwogCiAJCWlmIChyZXR2YWwgIT0gc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCB0byByZXRyaWV2ZSBzZXJpYWwgbGluZSBzZXR0aW5ncyAtICVkIiwgX19mdW5jX18sIHJldHZhbCk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCB0byByZXRyaWV2ZSBzZXJpYWwgIgorCQkJCSJsaW5lIHNldHRpbmdzIC0gJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOwogCQkJY3lwcmVzc19zZXRfZGVhZChwb3J0KTsKIAkJCXJldHVybiByZXR2YWw7CiAJCX0gZWxzZSB7CkBAIC00NzYsOCArNDc3LDggQEAKIAlwcml2LT5jb21tX2lzX29rID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQllcnIoImN5cHJlc3NfbTggc3VzcGVuZGluZyBmYWlsaW5nIHBvcnQgJWQgLSBpbnRlcnZhbCBtaWdodCBiZSB0b28gc2hvcnQiLAotCSAgICBwb3J0LT5udW1iZXIpOworCWRldl9lcnIoJnBvcnQtPmRldiwgImN5cHJlc3NfbTggc3VzcGVuZGluZyBmYWlsaW5nIHBvcnQgJWQgLSAiCisJCSJpbnRlcnZhbCBtaWdodCBiZSB0b28gc2hvcnRcbiIsIHBvcnQtPm51bWJlcik7CiB9CiAKIApAQCAtNjc5LDcgKzY4MCw4IEBACiAKIAkvKiBzZXR1cCB0aGUgcG9ydCBhbmQgc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KIAlpZiAoIXBvcnQtPmludGVycnVwdF9pbl91cmIpIHsKLQkJZXJyKCIlcyAtIGludGVycnVwdF9pbl91cmIgaXMgZW1wdHkhIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGludGVycnVwdF9pbl91cmIgaXMgZW1wdHkhXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMTA3LDggKzExMDksOCBAQAogCQlkYXRhX2JpdHMgPSAzOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoIiVzIC0gQ1NJWkUgd2FzIHNldCwgYnV0IG5vdCBDUzUtQ1M4IiwKLQkJCQlfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gQ1NJWkUgd2FzIHNldCwgYnV0IG5vdCBDUzUtQ1M4XG4iLAorCQkJX19mdW5jX18pOwogCQlkYXRhX2JpdHMgPSAzOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMTY1OCw3ICsxNjYwLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIAogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwppbmRleCA1NzU2YWM2Li42OWY4NGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCkBAIC02NjEsNyArNjYxLDggQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb29iX3ByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwogCWlmIChyZXQpCi0JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkIiwgX19mdW5jX18sIHJldCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOwogCXJldHVybiByZXQ7CiAKIH0KQEAgLTc0Myw3ICs3NDQsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHJldCkKLQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWQiLAorCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkXG4iLAogCQkJX19mdW5jX18sIHJldCwgcHJpdi0+ZHBfcG9ydF9udW0pOwogCXJldHVybiByZXQ7CiB9CkBAIC04MTIsNyArODE0LDggQEAKIAlzcGluX3VubG9jaygmcG9ydF9wcml2LT5kcF9wb3J0X2xvY2spOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9vYl9wcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKIAlpZiAocmV0KQotCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCIsIF9fZnVuY19fLCByZXQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05MDcsNyArOTEwLDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKIAogCWlmIChyZXQpCi0JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkIiwKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZFxuIiwKIAkJCV9fZnVuY19fLCByZXQsIHByaXYtPmRwX3BvcnRfbnVtKTsKIH0KIApAQCAtMTIxNCw3ICsxMjE4LDggQEAKIAkvKiByZXR1cm4gbGVuZ3RoIG9mIG5ldyBkYXRhIHdyaXR0ZW4sIG9yIGVycm9yICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyk7CiAJaWYgKHJldCA8IDApCi0JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkIiwKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZFxuIiwKIAkJCV9fZnVuY19fLCByZXQsIHByaXYtPmRwX3BvcnRfbnVtKTsKIAlkYmcoImRpZ2lfd3JpdGU6IHJldHVybmluZyAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTEyMzUsMTQgKzEyNDAsMTYgQEAKIAogCS8qIHBvcnQgYW5kIHNlcmlhbCBzYW5pdHkgY2hlY2sgKi8KIAlpZiAocG9ydCA9PSBOVUxMIHx8IChwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpKSA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHBvcnQgb3IgcG9ydC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlczogcG9ydCBvciBwb3J0LT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlpZiAoc2VyaWFsID09IE5VTEwgfHwgKHNlcmlhbF9wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpKSA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHNlcmlhbCBvciBzZXJpYWwtPnByaXZhdGUgaXMgTlVMTCwgc3RhdHVzPSVkIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXM6IHNlcmlhbCBvciBzZXJpYWwtPnByaXZhdGUgaXMgTlVMTCwgc3RhdHVzPSVkXG4iLAorCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEyODQsNyArMTI5MSw4IEBACiAKIAlzcGluX3VubG9jaygmcHJpdi0+ZHBfcG9ydF9sb2NrKTsKIAlpZiAocmV0KQotCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZCIsCisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWRcbiIsCiAJCQlfX2Z1bmNfXywgcmV0LCBwcml2LT5kcF9wb3J0X251bSk7CiB9CiAKQEAgLTE1MTgsOCArMTUyNiw5IEBACiAJCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJldCAhPSAwKSB7Ci0JCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZCIsCi0JCQkJCV9fZnVuY19fLCByZXQsIGkpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWRcbiIsCisJCQkJX19mdW5jX18sIHJldCwgaSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE2MTgsMjIgKzE2MjcsMjYgQEAKIAlkYmcoImRpZ2lfcmVhZF9idWxrX2NhbGxiYWNrOiBUT1AiKTsKIAogCS8qIHBvcnQgc2FuaXR5IGNoZWNrLCBkbyBub3QgcmVzdWJtaXQgaWYgcG9ydCBpcyBub3QgdmFsaWQgKi8KLQlpZiAocG9ydCA9PSBOVUxMIHx8IChwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpKSA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHBvcnQgb3IgcG9ydC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJaWYgKHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKHByaXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlczogcG9ydC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWRcbiIsCisJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAocG9ydC0+c2VyaWFsID09IE5VTEwgfHwKIAkJKHNlcmlhbF9wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpKSA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHNlcmlhbCBpcyBiYWQgb3Igc2VyaWFsLT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZCIsCi0JCQlfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXM6IHNlcmlhbCBpcyBiYWQgb3Igc2VyaWFsLT5wcml2YXRlICIKKwkJCSJpcyBOVUxMLCBzdGF0dXM9JWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCiAJLyogZG8gbm90IHJlc3VibWl0IHVyYiBpZiBpdCBoYXMgYW55IHN0YXR1cyBlcnJvciAqLwogCWlmIChzdGF0dXMpIHsKLQkJZXJyKCIlczogbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzOiBzdGF0dXM9JWQsIHBvcnQ9JWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cywgcHJpdi0+ZHBfcG9ydF9udW0pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXM6IG5vbnplcm8gcmVhZCBidWxrIHN0YXR1czogc3RhdHVzPSVkLCBwb3J0PSVkXG4iLAorCQkJX19mdW5jX18sIHN0YXR1cywgcHJpdi0+ZHBfcG9ydF9udW0pOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNjUwLDggKzE2NjMsOSBAQAogCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJZXJyKCIlczogZmFpbGVkIHJlc3VibWl0dGluZyB1cmIsIHJldD0lZCwgcG9ydD0lZCIsCi0JCSAgICBfX2Z1bmNfXywgcmV0LCBwcml2LT5kcF9wb3J0X251bSk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlczogZmFpbGVkIHJlc3VibWl0dGluZyB1cmIsIHJldD0lZCwgcG9ydD0lZFxuIiwKKwkJCV9fZnVuY19fLCByZXQsIHByaXYtPmRwX3BvcnRfbnVtKTsKIAl9CiAKIH0KQEAgLTE2ODcsMTAgKzE3MDEsMTEgQEAKIAogCS8qIHNob3J0L211bHRpcGxlIHBhY2tldCBjaGVjayAqLwogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gbGVuICsgMikgewotCQllcnIoIiVzOiBJTkNPTVBMRVRFIE9SIE1VTFRJUExFIFBBQ0tFVCwgdXJiLT5zdGF0dXM9JWQsICIKLQkJICAgICJwb3J0PSVkLCBvcGNvZGU9JWQsIGxlbj0lZCwgYWN0dWFsX2xlbmd0aD0lZCwgIgotCQkgICAgInN0YXR1cz0lZCIsIF9fZnVuY19fLCBzdGF0dXMsIHByaXYtPmRwX3BvcnRfbnVtLAotCQkgICAgb3Bjb2RlLCBsZW4sIHVyYi0+YWN0dWFsX2xlbmd0aCwgcG9ydF9zdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlczogSU5DT01QTEVURSBPUiBNVUxUSVBMRSBQQUNLRVQsICIKKwkJCSJ1cmItPnN0YXR1cz0lZCwgcG9ydD0lZCwgb3Bjb2RlPSVkLCBsZW49JWQsICIKKwkJCSJhY3R1YWxfbGVuZ3RoPSVkLCBzdGF0dXM9JWRcbiIsIF9fZnVuY19fLCBzdGF0dXMsCisJCQlwcml2LT5kcF9wb3J0X251bSwgb3Bjb2RlLCBsZW4sIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCXBvcnRfc3RhdHVzKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTg1NCw3ICsxODY5LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmRpZ2lfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZGlnaV9hY2NlbGVwb3J0XzRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKaW5kZXggMTA3MmU4NC4uOGE2OWNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKQEAgLTQxNiw3ICs0MTYsNyBAQAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlpZiAoc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlICE9IDEpIHsKLQkJZXJyKCJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/IiwKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgImFjdGl2ZSBjb25maWcgIyVkICE9IDEgPz9cbiIsCiAJCQlzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC00OTksMTUgKzQ5OSwxNSBAQAogCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQl3cml0ZV91cmJfcG9vbFtpXSA9IHVyYjsKIAkJaWYgKHVyYiA9PSBOVUxMKSB7Ci0JCQllcnIoIk5vIG1vcmUgdXJicz8/PyIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJlbXBlZzogTm8gbW9yZSB1cmJzPz8/XG4iKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwKIAkJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCWVycigiJXMgLSBvdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy4iLAotCQkJICAgIF9fZnVuY19fKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiZW1wZWc6ICVzIC0gb3V0IG9mIG1lbW9yeSBmb3IgdXJiICIKKwkJCSAgICAgICAiYnVmZmVycy4iLCBfX2Z1bmNfXyk7CiAJCQljb250aW51ZTsKIAkJfQogCX0KQEAgLTUxOSw3ICs1MTksOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYwppbmRleCA3MTFlODRmLi4zY2ZjNzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2IuYwpAQCAtMjgsNyArMjgsOCBAQAogCiAJLyogZGJnKCJlenVzYl93cml0ZW1lbW9yeSAleCwgJWQiLCBhZGRyZXNzLCBsZW5ndGgpOyAqLwogCWlmICghc2VyaWFsLT5kZXYpIHsKLQkJZXJyKCIlcyAtIG5vIHBoeXNpY2FsIGRldmljZSBwcmVzZW50LCBmYWlsaW5nLiIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJlenVzYjogJXMgLSBubyBwaHlzaWNhbCBkZXZpY2UgcHJlc2VudCwgIgorCQkgICAgICAgImZhaWxpbmcuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBjMmFjMTI5Li41MWQ3YmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNTc4LDYgKzU3OCw3IEBACiAJeyBVU0JfREVWSUNFKEZBTENPTV9WSUQsIEZBTENPTV9UV0lTVF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZBTENPTV9WSUQsIEZBTENPTV9TQU1CQV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1NVVU5UT19TUE9SVFNfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9PQ0VBTklDX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoVFRJX1ZJRCwgVFRJX1FMMzU1UF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1JNX0NBTlZJRVdfUElEKSB9LAogCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTT1RMNF9QSUQpIH0sCkBAIC0xMTUzLDcgKzExNTQsNyBAQAogCQkvKiBBc3N1bWUgaXRzIGFuIEZUMjMyUiAgKi8KIAkJcHJpdi0+Y2hpcF90eXBlID0gRlQyMzJSTDsKIAl9Ci0JaW5mbygiRGV0ZWN0ZWQgJXMiLCBmdGRpX2NoaXBfbmFtZVtwcml2LT5jaGlwX3R5cGVdKTsKKwlkZXZfaW5mbygmdWRldi0+ZGV2LCAiRGV0ZWN0ZWQgJXNcbiIsIGZ0ZGlfY2hpcF9uYW1lW3ByaXYtPmNoaXBfdHlwZV0pOwogfQogCiAKQEAgLTEzMjYsNyArMTMyNyw3IEBACiAKIAlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZ0ZGlfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikgewotCQllcnIoIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLiIsIF9fZnVuY19fLAorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcy0ga21hbGxvYyglWmQpIGZhaWxlZC5cbiIsIF9fZnVuY19fLAogCQkJCQlzaXplb2Yoc3RydWN0IGZ0ZGlfcHJpdmF0ZSkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xNDA5LDcgKzE0MTAsOCBAQAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKIAlpZiAoaW50ZXJmYWNlID09IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdKSB7Ci0JCWluZm8oIklnbm9yaW5nIHNlcmlhbCBwb3J0IHJlc2VydmVkIGZvciBKVEFHIik7CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsCisJCQkgIklnbm9yaW5nIHNlcmlhbCBwb3J0IHJlc2VydmVkIGZvciBKVEFHXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xNDI3LDcgKzE0MjksOCBAQAogCiAJaWYgKGVwLT5lbmFibGVkICYmIGVwX2Rlc2MtPndNYXhQYWNrZXRTaXplID09IDApIHsKIAkJZXBfZGVzYy0+d01heFBhY2tldFNpemUgPSBjcHVfdG9fbGUxNigweDQwKTsKLQkJaW5mbygiRml4aW5nIGludmFsaWQgd01heFBhY2tldFNpemUgb24gcmVhZCBwaXBlIik7CisJCWRldl9pbmZvKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJICJGaXhpbmcgaW52YWxpZCB3TWF4UGFja2V0U2l6ZSBvbiByZWFkIHBpcGVcbiIpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTUyMSw4ICsxNTI0LDkgQEAKIAkJCWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTU1Niw3ICsxNTYwLDcgQEAKIAkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCiAJCQkJICAgIDAsIHByaXYtPmludGVyZmFjZSwgYnVmLCAwLAogCQkJCSAgICBXRFJfVElNRU9VVCkgPCAwKSB7Ci0JCQllcnIoImVycm9yIGZyb20gZmxvd2NvbnRyb2wgdXJiIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJlcnJvciBmcm9tIGZsb3djb250cm9sIHVyYlxuIik7CiAJCX0KIAogCQkvKiBkcm9wIFJUUyBhbmQgRFRSICovCkBAIC0xNjIxLDE0ICsxNjI1LDE1IEBACiAKIAlidWZmZXIgPSBrbWFsbG9jKHRyYW5zZmVyX3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghYnVmZmVyKSB7Ci0JCWVycigiJXMgcmFuIG91dCBvZiBrZXJuZWwgbWVtb3J5IGZvciB1cmIgLi4uIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgcmFuIG91dCBvZiBrZXJuZWwgbWVtb3J5IGZvciB1cmIgLi4uXG4iLCBfX2Z1bmNfXyk7CiAJCWNvdW50ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9ub19idWZmZXI7CiAJfQogCiAJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXVyYikgewotCQllcnIoIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnMiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnNcbiIsIF9fZnVuY19fKTsKIAkJY291bnQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX25vX3VyYjsKIAl9CkBAIC0xNjcyLDggKzE2NzcsOSBAQAogCiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwKLQkJCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQljb3VudCA9IHN0YXR1czsKIAkJZ290byBlcnJvcjsKIAl9IGVsc2UgewpAQCAtMTc4MCw3ICsxNzg2LDggQEAKIAlidWZmZXJlZCA9IChpbnQpcHJpdi0+dHhfb3V0c3RhbmRpbmdfYnl0ZXM7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwogCWlmIChidWZmZXJlZCA8IDApIHsKLQkJZXJyKCIlcyBvdXRzdGFuZGluZyB0eCBieXRlcyBpcyBuZWdhdGl2ZSEiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIG91dHN0YW5kaW5nIHR4IGJ5dGVzIGlzIG5lZ2F0aXZlIVxuIiwKKwkJCV9fZnVuY19fKTsKIAkJYnVmZmVyZWQgPSAwOwogCX0KIAlyZXR1cm4gYnVmZmVyZWQ7CkBAIC0xNzk2LDExICsxODAzLDEyIEBACiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCiAJaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPiAwKSB7Ci0JCWVycigiJXMgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlZCBhY3R1YWxfbGVuZ3RoICVkIG51bWJlciBvZiBwYWNrZXRzICVkIiwKLQkJCQlfX2Z1bmNfXywKLQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKLQkJZXJyKCIlcyB0cmFuc2Zlcl9mbGFncyAleCAiLCBfX2Z1bmNfXywgdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJWQgIgorCQkJImFjdHVhbF9sZW5ndGggJWQgbnVtYmVyIG9mIHBhY2tldHMgJWRcbiIsIF9fZnVuY19fLAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgdHJhbnNmZXJfZmxhZ3MgJXhcbiIsIF9fZnVuY19fLAorCQkJdXJiLT50cmFuc2Zlcl9mbGFncyk7CiAJfQogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTE4MjEsNyArMTgyOSw3IEBACiAJfQogCiAJaWYgKHVyYiAhPSBwb3J0LT5yZWFkX3VyYikKLQkJZXJyKCIlcyAtIE5vdCBteSB1cmIhIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE5vdCBteSB1cmIhXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoc3RhdHVzKSB7CiAJCS8qIFRoaXMgd2lsbCBoYXBwZW4gYXQgY2xvc2UgZXZlcnkgdGltZSBzbyBpdCBpcyBhIGRiZyBub3QgYW4KQEAgLTE5MjQsNyArMTkzMiw4IEBACiAKIAkJbGVuZ3RoID0gbWluKFBLVFNaLCB1cmItPmFjdHVhbF9sZW5ndGgtcGFja2V0X29mZnNldCktMjsKIAkJaWYgKGxlbmd0aCA8IDApIHsKLQkJCWVycigiJXMgLSBiYWQgcGFja2V0IGxlbmd0aDogJWQiLCBfX2Z1bmNfXywgbGVuZ3RoKzIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBiYWQgcGFja2V0IGxlbmd0aDogJWRcbiIsCisJCQkJX19mdW5jX18sIGxlbmd0aCsyKTsKIAkJCWxlbmd0aCA9IDA7CiAJCX0KIApAQCAtMjAzOSw4ICsyMDQ4LDkgQEAKIAogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCX0KIG91dDoKIAl0dHlfa3JlZl9wdXQodHR5KTsKQEAgLTIwNjksOCArMjA3OSw4IEBACiAJCQlGVERJX1NJT19TRVRfREFUQV9SRVFVRVNUX1RZUEUsCiAJCQl1cmJfdmFsdWUgLCBwcml2LT5pbnRlcmZhY2UsCiAJCQlidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKLQkJZXJyKCIlcyBGQUlMRUQgdG8gZW5hYmxlL2Rpc2FibGUgYnJlYWsgc3RhdGUgKHN0YXRlIHdhcyAlZCkiLAotCQkJCQkJCV9fZnVuY19fLCBicmVha19zdGF0ZSk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIEZBSUxFRCB0byBlbmFibGUvZGlzYWJsZSBicmVhayBzdGF0ZSAiCisJCQkiKHN0YXRlIHdhcyAlZClcbiIsIF9fZnVuY19fLCBicmVha19zdGF0ZSk7CiAJfQogCiAJZGJnKCIlcyBicmVhayBzdGF0ZSBpcyAlZCAtIHVyYiBpcyAlZCIsIF9fZnVuY19fLApAQCAtMjE0Miw3ICsyMTUyLDcgQEAKIAkJY2FzZSBDUzc6IHVyYl92YWx1ZSB8PSA3OyBkYmcoIlNldHRpbmcgQ1M3Iik7IGJyZWFrOwogCQljYXNlIENTODogdXJiX3ZhbHVlIHw9IDg7IGRiZygiU2V0dGluZyBDUzgiKTsgYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllcnIoIkNTSVpFIHdhcyBzZXQgYnV0IG5vdCBDUzUtQ1M4Iik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJDU0laRSB3YXMgc2V0IGJ1dCBub3QgQ1M1LUNTOFxuIik7CiAJCX0KIAl9CiAKQEAgLTIxNTUsNyArMjE2NSw4IEBACiAJCQkgICAgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVF9UWVBFLAogCQkJICAgIHVyYl92YWx1ZSAsIHByaXYtPmludGVyZmFjZSwKIAkJCSAgICBidWYsIDAsIFdEUl9TSE9SVF9USU1FT1VUKSA8IDApIHsKLQkJZXJyKCIlcyBGQUlMRUQgdG8gc2V0IGRhdGFiaXRzL3N0b3BiaXRzL3Bhcml0eSIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgRkFJTEVEIHRvIHNldCAiCisJCQkiZGF0YWJpdHMvc3RvcGJpdHMvcGFyaXR5XG4iLCBfX2Z1bmNfXyk7CiAJfQogCiAJLyogTm93IGRvIHRoZSBiYXVkcmF0ZSAqLwpAQCAtMjE2NiwxNCArMjE3NywxNyBAQAogCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKIAkJCQkgICAgMCwgcHJpdi0+aW50ZXJmYWNlLAogCQkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKLQkJCWVycigiJXMgZXJyb3IgZnJvbSBkaXNhYmxlIGZsb3djb250cm9sIHVyYiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgZXJyb3IgZnJvbSBkaXNhYmxlIGZsb3djb250cm9sIHVyYlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCX0KIAkJLyogRHJvcCBSVFMgYW5kIERUUiAqLwogCQljbGVhcl9tY3RybChwb3J0LCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOwogCX0gZWxzZSB7CiAJCS8qIHNldCB0aGUgYmF1ZHJhdGUgZGV0ZXJtaW5lZCBiZWZvcmUgKi8KIAkJaWYgKGNoYW5nZV9zcGVlZCh0dHksIHBvcnQpKQotCQkJZXJyKCIlcyB1cmIgZmFpbGVkIHRvIHNldCBiYXVkcmF0ZSIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIHVyYiBmYWlsZWQgdG8gc2V0IGJhdWRyYXRlXG4iLAorCQkJCV9fZnVuY19fKTsKIAkJLyogRW5zdXJlIFJUUyBhbmQgRFRSIGFyZSByYWlzZWQgd2hlbiBiYXVkcmF0ZSBjaGFuZ2VkIGZyb20gMCAqLwogCQlpZiAoIW9sZF90ZXJtaW9zIHx8IChvbGRfdGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKSA9PSBCMCkKIAkJCXNldF9tY3RybChwb3J0LCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOwpAQCAtMjE4OSw3ICsyMjAzLDggQEAKIAkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCiAJCQkJICAgIDAgLCAoRlRESV9TSU9fUlRTX0NUU19IUyB8IHByaXYtPmludGVyZmFjZSksCiAJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgewotCQkJZXJyKCJ1cmIgZmFpbGVkIHRvIHNldCB0byBydHMvY3RzIGZsb3cgY29udHJvbCIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSJ1cmIgZmFpbGVkIHRvIHNldCB0byBydHMvY3RzIGZsb3cgY29udHJvbFxuIik7CiAJCX0KIAogCX0gZWxzZSB7CkBAIC0yMjIwLDcgKzIyMzUsOCBAQAogCQkJCQkgICAgdXJiX3ZhbHVlICwgKEZURElfU0lPX1hPTl9YT0ZGX0hTCiAJCQkJCQkJIHwgcHJpdi0+aW50ZXJmYWNlKSwKIAkJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgewotCQkJCWVycigidXJiIGZhaWxlZCB0byBzZXQgdG8geG9uL3hvZmYgZmxvdyBjb250cm9sIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAidXJiIGZhaWxlZCB0byBzZXQgdG8gIgorCQkJCQkieG9uL3hvZmYgZmxvdyBjb250cm9sXG4iKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIGVsc2UgY2xhdXNlIHRvIG9ubHkgcnVuIGlmIGNmbGFnICEgQ1JUU0NUUyBhbmQgaWZsYWcKQEAgLTIyMzMsNyArMjI0OSw4IEBACiAJCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKIAkJCQkJICAgIDAsIHByaXYtPmludGVyZmFjZSwKIAkJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgewotCQkJCWVycigidXJiIGZhaWxlZCB0byBjbGVhciBmbG93IGNvbnRyb2wiKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSJ1cmIgZmFpbGVkIHRvIGNsZWFyIGZsb3cgY29udHJvbFxuIik7CiAJCQl9CiAJCX0KIApAQCAtMjQyNSw3ICsyNDQyLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZmdGRpX3Npb19kZXZpY2UpOwpAQCAtMjQ1OCw1ICsyNDc2LDUgQEAKIE1PRFVMRV9QQVJNX0RFU0ModmVuZG9yLCAiVXNlciBzcGVjaWZpZWQgdmVuZG9yIElEIChkZWZhdWx0PSIKIAkJX19NT0RVTEVfU1RSSU5HKEZURElfVklEKSIpIik7CiBtb2R1bGVfcGFyYW0ocHJvZHVjdCwgdXNob3J0LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModmVuZG9yLCAiVXNlciBzcGVjaWZpZWQgcHJvZHVjdCBJRCIpOworTU9EVUxFX1BBUk1fREVTQyhwcm9kdWN0LCAiVXNlciBzcGVjaWZpZWQgcHJvZHVjdCBJRCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCmluZGV4IDhhNWI2ZGYuLjA3YTM5OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCkBAIC02MjgsNiArNjI4LDExIEBACiAjZGVmaW5lIEZURElfU1VVTlRPX1NQT1JUU19QSUQJMHhGNjgwCS8qIFN1dW50byBTcG9ydHMgaW5zdHJ1bWVudCAqLwogCiAvKgorICogT2NlYW5pYyBwcm9kdWN0IGlkcworICovCisjZGVmaW5lIEZURElfT0NFQU5JQ19QSUQJMHhGNDYwICAvKiBPY2VhbmljIGRpdmUgaW5zdHJ1bWVudCAqLworCisvKgogICogVFRpIChUaHVybGJ5IFRoYW5kYXIgSW5zdHJ1bWVudHMpCiAgKi8KICNkZWZpbmUgVFRJX1ZJRAkJCTB4MTAzRQkvKiBWZW5kb3IgSWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCmluZGV4IDJhZDA1NjkuLjhlNmE2NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwpAQCAtMTU4NSw3ICsxNTg1LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmdhcm1pbl9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jCmluZGV4IGFiOTA1ODYuLjQzMTMyOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYwpAQCAtNjMsNyArNjMsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaHA0OWdwX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmhwNDlncF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwppbmRleCA2MTFmOTdmLi5lODVjOGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwpAQCAtMzEwOSwxMyArMzEwOSwxMyBAQAogCQkJCWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIgPQogCQkJCQkJdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoIWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIpIHsKLQkJCQkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCX0KIAkJCQllZGdlX3NlcmlhbC0+aW50ZXJydXB0X2luX2J1ZmZlciA9CiAJCQkJCWttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwogCQkJCWlmICghZWRnZV9zZXJpYWwtPmludGVycnVwdF9pbl9idWZmZXIpIHsKLQkJCQkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJCXVzYl9mcmVlX3VyYihlZGdlX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiKTsKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJfQpAQCAtMzE0NiwxMyArMzE0NiwxMyBAQAogCQkJCWVkZ2Vfc2VyaWFsLT5yZWFkX3VyYiA9CiAJCQkJCQl1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQkJCWlmICghZWRnZV9zZXJpYWwtPnJlYWRfdXJiKSB7Ci0JCQkJCWVycigib3V0IG9mIG1lbW9yeSIpOworCQkJCQlkZXZfZXJyKCZkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQl9CiAJCQkJZWRnZV9zZXJpYWwtPmJ1bGtfaW5fYnVmZmVyID0KIAkJCQkJa21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCFlZGdlX3NlcmlhbC0+YnVsa19pbl9idWZmZXIpIHsKLQkJCQkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJCXVzYl9mcmVlX3VyYihlZGdlX3NlcmlhbC0+cmVhZF91cmIpOwogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQl9CkBAIC0zMTgxLDcgKzMxODEsOCBAQAogCQl9CiAKIAkJaWYgKCFpbnRlcnJ1cHRfaW5fZm91bmQgfHwgIWJ1bGtfaW5fZm91bmQgfHwgIWJ1bGtfb3V0X2ZvdW5kKSB7Ci0JCQllcnIoIkVycm9yIC0gdGhlIHByb3BlciBlbmRwb2ludHMgd2VyZSBub3QgZm91bmQhIik7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIkVycm9yIC0gdGhlIHByb3BlciBlbmRwb2ludHMgIgorCQkJCSJ3ZXJlIG5vdCBmb3VuZCFcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIApAQCAtMzE5MCw4ICszMTkxLDkgQEAKIAkJcmVzcG9uc2UgPSB1c2Jfc3VibWl0X3VyYihlZGdlX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiLAogCQkJCQkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKHJlc3BvbnNlKQotCQkJZXJyKCIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmIiLAotCQkJCQkJCV9fZnVuY19fLCByZXNwb25zZSk7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGNvbnRyb2wgdXJiXG4iLAorCQkJCV9fZnVuY19fLCByZXNwb25zZSk7CiAJfQogCXJldHVybiByZXNwb25zZTsKIH0KQEAgLTMyNTMsNyArMzI1NSw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwogCWF0b21pY19zZXQoJkNtZFVyYnMsIDApOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogCiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwppbmRleCA1NDFkZDhlLi5jM2NkZDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwpAQCAtMjk3OCw3ICsyOTc4LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlvX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmVkZ2Vwb3J0XzJwb3J0X2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwppbmRleCAyYWZmYTljLi4xMzJiZTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKQEAgLTYwOCw3ICs2MDgsNyBAQAogCWJ5dGVzX291dCA9IDA7CiAJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcGFxX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJpdiA9PSBOVUxMKSB7Ci0JCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwcml2KTsKQEAgLTY5Myw4ICs2OTMsNyBAQAogCX0KIAogCWlmICghcmV0cmllcyAmJiByZXN1bHQpIHsKLQkJZXJyKCIlcyAtIGZhaWxlZCBkb2luZyBjb250cm9sIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywKLQkJICAgIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIGRvaW5nIGNvbnRyb2wgdXJiLCBlcnJvciAlZFxuIiwJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTcwNyw4ICs3MDYsOSBAQAogCiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXN1bHQpIHsKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC03MTYsNyArNzE2LDcgQEAKIAogZW5vbWVtOgogCXJlc3VsdCA9IC1FTk9NRU07Ci0JZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiBlcnJvcjoKIAlpcGFxX2Rlc3Ryb3lfbGlzdHMocG9ydCk7CiAJa2ZyZWUocHJpdik7CkBAIC03ODEsOCArNzgxLDkgQEAKIAkgICAgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCXJldHVybjsKIH0KIApAQCAtODQ3LDcgKzg0OCw4IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KQotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCiAJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CkBAIC05MDksOCArOTExLDkgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJfSBlbHNlIHsKIAkJcHJpdi0+YWN0aXZlID0gMDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CkBAIC05NTcsNyArOTYwLDcgQEAKIHsKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCWlmIChzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgewotCQllcnIoImFjdGl2ZSBjb25maWcgIyVkICE9IDEgPz8iLAorCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/P1xuIiwKIAkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTk3Niw3ICs5NzksNiBAQAogCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmlwYXFfZGV2aWNlKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKIAlpZiAodmVuZG9yKSB7CiAJCWlwYXFfaWRfdGFibGVbMF0uaWRWZW5kb3IgPSB2ZW5kb3I7CiAJCWlwYXFfaWRfdGFibGVbMF0uaWRQcm9kdWN0ID0gcHJvZHVjdDsKQEAgLTk4NSw2ICs5ODcsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAorCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXBhcV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCmluZGV4IDQ4MGNhYzIuLjNhYzU5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKQEAgLTQ4NSw3ICs0ODUsOCBAQAogCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmlwd19kZXZpY2UpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCmluZGV4IDQ1ZDQwNDMuLmI2NzlhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKQEAgLTYwMiw3ICs2MDIsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKaW5kZXggNTM3MTBhYS4uZTMyMDk3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKQEAgLTExODUsNyArMTE4NSw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpdXVfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXV1X2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwppbmRleCAxNTQ0N2FmLi45ODc4YzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTIxNyw3ICsyMTcsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwppbmRleCA5OWU5YTE0Li5iZjFhZTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpAQCAtNzQyLDExICs3NDIsMTMgQEAKIAkJZndfbmFtZSA9ICJrZXlzcGFuX3BkYS94aXJjb21fcGdzLmZ3IjsKICNlbmRpZgogCWVsc2UgewotCQllcnIoIiVzOiB1bmtub3duIHZlbmRvciwgYWJvcnRpbmcuIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXM6IHVua25vd24gdmVuZG9yLCBhYm9ydGluZy5cbiIsCisJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAocmVxdWVzdF9paGV4X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJnNlcmlhbC0+ZGV2LT5kZXYpKSB7Ci0JCWVycigiZmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLCBmd19uYW1lKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgImZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJCWZ3X25hbWUpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAJcmVjb3JkID0gKGNvbnN0IHN0cnVjdCBpaGV4X2JpbnJlYyAqKWZ3LT5kYXRhOwpAQCAtNzU2LDEwICs3NTgsMTAgQEAKIAkJCQkJICAgICAodW5zaWduZWQgY2hhciAqKXJlY29yZC0+ZGF0YSwKIAkJCQkJICAgICBiZTE2X3RvX2NwdShyZWNvcmQtPmxlbiksIDB4YTApOwogCQlpZiAocmVzcG9uc2UgPCAwKSB7Ci0JCQllcnIoImV6dXNiX3dyaXRlbWVtb3J5IGZhaWxlZCBmb3IgS2V5c3BhbiBQREEgIgotCQkJICAgICJmaXJtd2FyZSAoJWQgJTA0WCAlcCAlZCkiLAotCQkJICAgIHJlc3BvbnNlLCBiZTMyX3RvX2NwdShyZWNvcmQtPmFkZHIpLAotCQkJICAgIHJlY29yZC0+ZGF0YSwgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pKTsKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgIgorCQkJCSJmb3IgS2V5c3BhbiBQREEgZmlybXdhcmUgKCVkICUwNFggJXAgJWQpXG4iLAorCQkJCXJlc3BvbnNlLCBiZTMyX3RvX2NwdShyZWNvcmQtPmFkZHIpLAorCQkJCXJlY29yZC0+ZGF0YSwgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pKTsKIAkJCWJyZWFrOwogCQl9CiAJCXJlY29yZCA9IGloZXhfbmV4dF9iaW5yZWMocmVjb3JkKTsKQEAgLTg3NCw3ICs4NzYsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigma2V5c3Bhbl9wZGFfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogI2lmZGVmIFhJUkNPTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKaW5kZXggZmYzYTA3Zi4uZGMzNmEwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCkBAIC0xODIsMTIgKzE4MiwxMiBAQAogCQkJc2l6ZW9mKHN0cnVjdCBrbHNpXzEwNV9wb3J0X3NldHRpbmdzKSwKIAkJCUtMU0lfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkKLQkJZXJyKCJDaGFuZ2UgcG9ydCBzZXR0aW5ncyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOwotCWluZm8oIiVzIC0gJWQgYnl0ZSBibG9jaywgYmF1ZHJhdGUgJXgsIGRhdGFiaXRzICVkLCB1MSAlZCwgdTIgJWQiLAotCSAgICBfX2Z1bmNfXywKLQkgICAgc2V0dGluZ3MtPnBrdGxlbiwKLQkgICAgc2V0dGluZ3MtPmJhdWRyYXRlLCBzZXR0aW5ncy0+ZGF0YWJpdHMsCi0JICAgIHNldHRpbmdzLT51bmtub3duMSwgc2V0dGluZ3MtPnVua25vd24yKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIkNoYW5nZSBwb3J0IHNldHRpbmdzIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIHJjKTsKKwlkZXZfaW5mbygmcG9ydC0+c2VyaWFsLT5kZXYtPmRldiwKKwkJICIlZCBieXRlIGJsb2NrLCBiYXVkcmF0ZSAleCwgZGF0YWJpdHMgJWQsIHUxICVkLCB1MiAlZFxuIiwKKwkJIHNldHRpbmdzLT5wa3RsZW4sIHNldHRpbmdzLT5iYXVkcmF0ZSwgc2V0dGluZ3MtPmRhdGFiaXRzLAorCQkgc2V0dGluZ3MtPnVua25vd24xLCBzZXR0aW5ncy0+dW5rbm93bjIpOwogCXJldHVybiByYzsKIH0gLyoga2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3MgKi8KIApAQCAtMjE1LDcgKzIxNSw3IEBACiAJX191OCBzdGF0dXNfYnVmW0tMU0lfU1RBVFVTQlVGX0xFTl0gPSB7IC0xLCAtMX07CiAJX191MTYgc3RhdHVzOwogCi0JaW5mbygiJXMgLSBzZW5kaW5nIFNJTyBQb2xsIHJlcXVlc3QiLCBfX2Z1bmNfXyk7CisJZGV2X2luZm8oJnBvcnQtPnNlcmlhbC0+ZGV2LT5kZXYsICJzZW5kaW5nIFNJTyBQb2xsIHJlcXVlc3RcbiIpOwogCXJjID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAogCQkJICAgICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAogCQkJICAgICBLTDVLVVNCMTA1QV9TSU9fUE9MTCwKQEAgLTIyNiwxMiArMjI2LDEzIEBACiAJCQkgICAgIDEwMDAwCiAJCQkgICAgICk7CiAJaWYgKHJjIDwgMCkKLQkJZXJyKCJSZWFkaW5nIGxpbmUgc3RhdHVzIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlJlYWRpbmcgbGluZSBzdGF0dXMgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwKKwkJCXJjKTsKIAllbHNlIHsKIAkJc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHN0YXR1c19idWYpOwogCi0JCWluZm8oIiVzIC0gcmVhZCBzdGF0dXMgJXggJXgiLCBfX2Z1bmNfXywKLQkJICAgICBzdGF0dXNfYnVmWzBdLCBzdGF0dXNfYnVmWzFdKTsKKwkJZGV2X2luZm8oJnBvcnQtPnNlcmlhbC0+ZGV2LT5kZXYsICJyZWFkIHN0YXR1cyAleCAleCIsCisJCQkgc3RhdHVzX2J1ZlswXSwgc3RhdHVzX2J1ZlsxXSk7CiAKIAkJKmxpbmVfc3RhdGVfcCA9IGtsc2lfMTA1X3N0YXR1czJsaW5lc3RhdGUoc3RhdHVzKTsKIAl9CkBAIC0yODAsMTUgKzI4MSwxNiBAQAogCiAJCQlwcml2LT53cml0ZV91cmJfcG9vbFtqXSA9IHVyYjsKIAkJCWlmICh1cmIgPT0gTlVMTCkgewotCQkJCWVycigiTm8gbW9yZSB1cmJzPz8/Iik7CisJCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIk5vIG1vcmUgdXJicz8/P1xuIik7CiAJCQkJZ290byBlcnJfY2xlYW51cDsKIAkJCX0KIAogCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPQogCQkJCWttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCQllcnIoIiVzIC0gb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwKLQkJCQkJCQkJX19mdW5jX18pOworCQkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkJCSIlcyAtIG91dCBvZiBtZW1vcnkgZm9yIHVyYiBidWZmZXJzLlxuIiwKKwkJCQkJX19mdW5jX18pOwogCQkJCWdvdG8gZXJyX2NsZWFudXA7CiAJCQl9CiAJCX0KQEAgLTQwOSw3ICs0MTEsOCBAQAogCiAJcmMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywgcmMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCAiCisJCQkiZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByYyk7CiAJCXJldHZhbCA9IHJjOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtNDI0LDcgKzQyNyw3IEBACiAJCQkgICAgIDAsCiAJCQkgICAgIEtMU0lfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkgewotCQllcnIoIkVuYWJsaW5nIHJlYWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiRW5hYmxpbmcgcmVhZCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByYyk7CiAJCXJldHZhbCA9IHJjOwogCX0gZWxzZQogCQlkYmcoIiVzIC0gZW5hYmxlZCByZWFkaW5nIiwgX19mdW5jX18pOwpAQCAtNDY0LDcgKzQ2Nyw4IEBACiAJCQkJICAgICBOVUxMLCAwLAogCQkJCSAgICAgS0xTSV9USU1FT1VUKTsKIAkJaWYgKHJjIDwgMCkKLQkJCWVycigiRGlzYWJsaW5nIHJlYWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiRGlzYWJsaW5nIHJlYWQgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmMpOwogCX0KIAltdXRleF91bmxvY2soJnBvcnQtPnNlcmlhbC0+ZGlzY19tdXRleCk7CiAKQEAgLTQ3NSw4ICs0NzksOSBAQAogCS8qIEZJWE1FICovCiAJLyogd2dnIC0gZG8gSSBuZWVkIHRoaXM/IEkgdGhpbmsgc28uICovCiAJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOwotCWluZm8oImtsNWt1c2IxMDUgcG9ydCBzdGF0czogJWxkIGJ5dGVzIGluLCAlbGQgYnl0ZXMgb3V0IiwKLQkJCQkJcHJpdi0+Ynl0ZXNfaW4sIHByaXYtPmJ5dGVzX291dCk7CisJZGV2X2luZm8oJnBvcnQtPnNlcmlhbC0+ZGV2LT5kZXYsCisJCSAicG9ydCBzdGF0czogJWxkIGJ5dGVzIGluLCAlbGQgYnl0ZXMgb3V0XG4iLAorCQkgcHJpdi0+Ynl0ZXNfaW4sIHByaXYtPmJ5dGVzX291dCk7CiB9IC8qIGtsc2lfMTA1X2Nsb3NlICovCiAKIApAQCAtNTIyLDcgKzUyNyw5IEBACiAJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9CiAJCQkJa21hbGxvYyhVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsIEdGUF9BVE9NSUMpOwogCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKLQkJCQllcnIoIiVzIC0gbm8gbW9yZSBrZXJuZWwgbWVtb3J5Li4uIiwgX19mdW5jX18pOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkJIiVzIC0gbm8gbW9yZSBrZXJuZWwgbWVtb3J5Li4uXG4iLAorCQkJCQlfX2Z1bmNfXyk7CiAJCQkJZ290byBleGl0OwogCQkJfQogCQl9CkBAIC01NDksOCArNTU2LDkgQEAKIAkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQlidWYgKz0gc2l6ZTsKQEAgLTY5NCw4ICs3MDIsOSBAQAogCQkgICAgICBwb3J0KTsKIAlyYyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmMpCi0JCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJjKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmMpOwogfSAvKiBrbHNpXzEwNV9yZWFkX2J1bGtfY2FsbGJhY2sgKi8KIAogCkBAIC03OTksNyArODA4LDggQEAKIAkJCXByaXYtPmNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl84OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllcnIoIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4Iik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4XG4iKTsKIAkJCXByaXYtPmNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl84OwogCQkJYnJlYWs7CiAJCX0KQEAgLTg4Niw3ICs4OTYsOCBAQAogCiAJcmMgPSBrbHNpXzEwNV9nZXRfbGluZV9zdGF0ZShwb3J0LCAmbGluZV9zdGF0ZSk7CiAJaWYgKHJjIDwgMCkgewotCQllcnIoIlJlYWRpbmcgbGluZSBjb250cm9sIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSJSZWFkaW5nIGxpbmUgY29udHJvbCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByYyk7CiAJCS8qIGJldHRlciByZXR1cm4gdmFsdWU/IEVBR0FJTj8gKi8KIAkJcmV0dXJuIHJjOwogCX0KQEAgLTk0NCw4ICs5NTUsOSBAQAogCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fZnVuY19fLAotCQkgICAgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiB9CiAKIApAQCAtOTYwLDcgKzk3Miw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwogCi0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigma2w1a3VzYjEwNWRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwppbmRleCBjZmNmMzdjLi42Mjg2YmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCkBAIC03NDQsOCArNzQ0LDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKLQlpbmZvKERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwppbmRleCA5YjJjZWY4Li4wNzcxMGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwpAQCAtMjQ2LDcgKzI0Niw4IEBACiAJCQkJMCwgMCwgJmRpdmlzb3IsIE1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfU0laRSwKIAkJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkJLypGSVhNRTogV2hhdCB2YWx1ZSBzcGVlZCByZXN1bHRzICovCi0JCWVycigiU2V0IEJBVUQgUkFURSAlZCBmYWlsZWQgKGVycm9yID0gJWQpIiwgdmFsdWUsIHJjKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IEJBVUQgUkFURSAlZCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLAorCQkJdmFsdWUsIHJjKTsKIAllbHNlCiAJCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgc3BlZWQsIHNwZWVkKTsKIAlkYmcoInNldF9iYXVkX3JhdGU6IHZhbHVlOiAweCV4LCBkaXZpc29yOiAweCV4IiwgdmFsdWUsIGRpdmlzb3IpOwpAQCAtMjc0LDggKzI3NSw5IEBACiAJCQkJMCwgMCwgJnplcm9fYnl0ZSwgTUNUX1UyMzJfU0VUX1VOS05PV04xX1NJWkUsCiAJCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCi0JCWVycigiU2VuZGluZyBVU0IgZGV2aWNlIHJlcXVlc3QgY29kZSAlZCBmYWlsZWQgKGVycm9yID0gJWQpIiwKLQkJICAgIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9SRVFVRVNULCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgIgorCQkJImZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9SRVFVRVNULAorCQkJcmMpOwogCiAJaWYgKHBvcnQgJiYgQ19DUlRTQ1RTKHR0eSkpCiAJICAgY3RzX2VuYWJsZV9ieXRlID0gMTsKQEAgLTI4OCw4ICsyOTAsOCBAQAogCQkJMCwgMCwgJmN0c19lbmFibGVfYnl0ZSwgTUNUX1UyMzJfU0VUX0NUU19TSVpFLAogCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCi0JCWVycigiU2VuZGluZyBVU0IgZGV2aWNlIHJlcXVlc3QgY29kZSAlZCBmYWlsZWQgKGVycm9yID0gJWQpIiwKLQkJCQkJTUNUX1UyMzJfU0VUX0NUU19SRVFVRVNULCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgIgorCQkJImZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIE1DVF9VMjMyX1NFVF9DVFNfUkVRVUVTVCwgcmMpOwogCiAJcmV0dXJuIHJjOwogfSAvKiBtY3RfdTIzMl9zZXRfYmF1ZF9yYXRlICovCkBAIC0zMDMsNyArMzA1LDggQEAKIAkJCTAsIDAsICZsY3IsIE1DVF9VMjMyX1NFVF9MSU5FX0NUUkxfU0laRSwKIAkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKQotCQllcnIoIlNldCBMSU5FIENUUkwgMHgleCBmYWlsZWQgKGVycm9yID0gJWQpIiwgbGNyLCByYyk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkiU2V0IExJTkUgQ1RSTCAweCV4IGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIGxjciwgcmMpOwogCWRiZygic2V0X2xpbmVfY3RybDogMHgleCIsIGxjcik7CiAJcmV0dXJuIHJjOwogfSAvKiBtY3RfdTIzMl9zZXRfbGluZV9jdHJsICovCkBAIC0zMjUsNyArMzI4LDggQEAKIAkJCTAsIDAsICZtY3IsIE1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1NJWkUsCiAJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkKLQkJZXJyKCJTZXQgTU9ERU0gQ1RSTCAweCV4IGZhaWxlZCAoZXJyb3IgPSAlZCkiLCBtY3IsIHJjKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCSJTZXQgTU9ERU0gQ1RSTCAweCV4IGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIG1jciwgcmMpOwogCWRiZygic2V0X21vZGVtX2N0cmw6IHN0YXRlPTB4JXggPT0+IG1jcj0weCV4IiwgY29udHJvbF9zdGF0ZSwgbWNyKTsKIAogCXJldHVybiByYzsKQEAgLTM0MSw3ICszNDUsOCBAQAogCQkJMCwgMCwgbXNyLCBNQ1RfVTIzMl9HRVRfTU9ERU1fU1RBVF9TSVpFLAogCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApIHsKLQkJZXJyKCJHZXQgTU9ERU0gU1RBVHVzIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkiR2V0IE1PREVNIFNUQVR1cyBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByYyk7CiAJCSptc3IgPSAwOwogCX0KIAlkYmcoImdldF9tb2RlbV9zdGF0OiAweCV4IiwgKm1zcik7CkBAIC00NzAsOCArNDc1LDkgQEAKIAlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCJ1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCBwaXBlIDB4JXggZXJyICVkIiwKLQkJICAgIHBvcnQtPnJlYWRfdXJiLT5waXBlLCByZXR2YWwpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQgcGlwZSAweCV4IGVyciAlZFxuIiwKKwkJCXBvcnQtPnJlYWRfdXJiLT5waXBlLCByZXR2YWwpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtNDc5LDggKzQ4NSw5IEBACiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldHZhbCkgewogCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwotCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIHBpcGUgMHgleCBlcnIgJWQiLAotCQkgICAgcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+cGlwZSwgcmV0dmFsKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJInVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWQgcGlwZSAweCV4IGVyciAlZCIsCisJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5waXBlLCByZXR2YWwpOwogCQlnb3RvIGVycm9yOwogCX0KIAlyZXR1cm4gMDsKQEAgLTYxMiw4ICs2MTksOSBAQAogZXhpdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fZnVuY19fLCByZXR2YWwpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsKTsKIH0gLyogbWN0X3UyMzJfcmVhZF9pbnRfY2FsbGJhY2sgKi8KIAogc3RhdGljIHZvaWQgbWN0X3UyMzJfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTY4MCw3ICs2ODgsOCBAQAogCWNhc2UgQ1M4OgogCQlsYXN0X2xjciB8PSBNQ1RfVTIzMl9EQVRBX0JJVFNfODsgYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJDU0laRSB3YXMgbm90IENTNS1DUzgsIHVzaW5nIGRlZmF1bHQgb2YgOCIpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiQ1NJWkUgd2FzIG5vdCBDUzUtQ1M4LCB1c2luZyBkZWZhdWx0IG9mIDhcbiIpOwogCQlsYXN0X2xjciB8PSBNQ1RfVTIzMl9EQVRBX0JJVFNfODsKIAkJYnJlYWs7CiAJfQpAQCAtODE3LDcgKzgyNiw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZtY3RfdTIzMl9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZtY3RfdTIzMl9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMKaW5kZXggN2I1MzhjYS4uZTc3MmNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jCkBAIC0zNTUsMTQgKzM1NSwxNiBAQAogCQltb3M3NzIwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gdXJiOwogCiAJCWlmICh1cmIgPT0gTlVMTCkgewotCQkJZXJyKCJObyBtb3JlIHVyYnM/Pz8iKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk5vIG1vcmUgdXJicz8/P1xuIik7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsCiAJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCF1cmItPnRyYW5zZmVyX2J1ZmZlcikgewotCQkJZXJyKCIlcy1vdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy4iLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzLW91dCBvZiBtZW1vcnkgZm9yIHVyYiBidWZmZXJzLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQl1c2JfZnJlZV91cmIobW9zNzcyMF9wb3J0LT53cml0ZV91cmJfcG9vbFtqXSk7CiAJCQltb3M3NzIwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gTlVMTDsKIAkJCWNvbnRpbnVlOwpAQCAtNjk0LDcgKzY5Niw4IEBACiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsCiAJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKLQkJCWVycigiJXMgbm8gbW9yZSBrZXJuZWwgbWVtb3J5Li4uIiwgX19mdW5jX18pOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgbm8gbW9yZSBrZXJuZWwgbWVtb3J5Li4uXG4iLAorCQkJCV9fZnVuY19fKTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCX0KQEAgLTcxNCw4ICs3MTcsOCBAQAogCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLwogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHN0YXR1cykgewotCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzID0gJWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkICIKKwkJCSJ3aXRoIHN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAkJYnl0ZXNfc2VudCA9IHN0YXR1czsKIAkJZ290byBleGl0OwogCX0KQEAgLTk3NSw3ICs5NzgsNyBAQAogCS8qIENhbGN1bGF0ZSB0aGUgRGl2aXNvciAqLwogCXN0YXR1cyA9IGNhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IoYmF1ZHJhdGUsICZkaXZpc29yKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWVycigiJXMgLSBiYWQgYmF1ZCByYXRlIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGJhZCBiYXVkIHJhdGVcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKQEAgLTE0NzgsNyArMTQ4MSw3IEBACiAJLyogY3JlYXRlIG91ciBwcml2YXRlIHNlcmlhbCBzdHJ1Y3R1cmUgKi8KIAltb3M3NzIwX3NlcmlhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb3NjaGlwX3NlcmlhbCksIEdGUF9LRVJORUwpOwogCWlmIChtb3M3NzIwX3NlcmlhbCA9PSBOVUxMKSB7Ci0JCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE0OTEsNyArMTQ5NCw3IEBACiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJbW9zNzcyMF9wb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1vc2NoaXBfcG9ydCksIEdGUF9LRVJORUwpOwogCQlpZiAobW9zNzcyMF9wb3J0ID09IE5VTEwpIHsKLQkJCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBOVUxMKTsKIAkJCWtmcmVlKG1vczc3MjBfc2VyaWFsKTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtMTU4NSw3ICsxNTg4LDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF9wb3J0X2RldmljZV9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJLyogUmVnaXN0ZXIgd2l0aCB0aGUgdXNiICovCiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2JfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCmluZGV4IDYwNTQzZDcuLmZkYTRhNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwpAQCAtODQ0LDcgKzg0NCw3IEBACiAJCW1vczc4NDBfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbal0gPSB1cmI7CiAKIAkJaWYgKHVyYiA9PSBOVUxMKSB7Ci0JCQllcnIoIk5vIG1vcmUgdXJicz8/PyIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiTm8gbW9yZSB1cmJzPz8/XG4iKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTg1Myw3ICs4NTMsOSBAQAogCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CiAJCQl1c2JfZnJlZV91cmIodXJiKTsKIAkJCW1vczc4NDBfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbal0gPSBOVUxMOwotCQkJZXJyKCIlcy1vdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy4iLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzLW91dCBvZiBtZW1vcnkgZm9yIHVyYiBidWZmZXJzLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQljb250aW51ZTsKIAkJfQogCX0KQEAgLTEwMjEsOCArMTAyMyw4IEBACiAJCQkgICAgdXNiX3N1Ym1pdF91cmIoc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fdXJiLAogCQkJCQkgICBHRlBfS0VSTkVMKTsKIAkJCWlmIChyZXNwb25zZSkgewotCQkJCWVycigiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIiLAotCQkJCSAgICBfX2Z1bmNfXywgcmVzcG9uc2UpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyAiCisJCQkJCSJpbnRlcnJ1cHQgdXJiXG4iLCBfX2Z1bmNfXywgcmVzcG9uc2UpOwogCQkJfQogCiAJCX0KQEAgLTEwNTUsOCArMTA1Nyw4IEBACiAJICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKTsKIAlyZXNwb25zZSA9IHVzYl9zdWJtaXRfdXJiKG1vczc4NDBfcG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXNwb25zZSkgewotCQllcnIoIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBjb250cm9sIHVyYiIsIF9fZnVuY19fLAotCQkgICAgcmVzcG9uc2UpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmJcbiIsCisJCQlfX2Z1bmNfXywgcmVzcG9uc2UpOwogCX0KIAogCS8qIGluaXRpYWxpemUgb3VyIHdhaXQgcXVldWVzICovCkBAIC0xNDkyLDcgKzE0OTQsOCBAQAogCQkgICAga21hbGxvYyhVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOwogCiAJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQllcnIoIiVzIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC0xNTE3LDggKzE1MjAsOCBAQAogCiAJaWYgKHN0YXR1cykgewogCQltb3M3ODQwX3BvcnQtPmJ1c3lbaV0gPSAwOwotCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzID0gJWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkICIKKwkJCSJ3aXRoIHN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAkJYnl0ZXNfc2VudCA9IHN0YXR1czsKIAkJZ290byBleGl0OwogCX0KQEAgLTE4NTYsOCArMTg1OSw3IEBACiAJCS8qIENhbGN1bGF0ZSB0aGUgRGl2aXNvciAqLwogCiAJCWlmIChzdGF0dXMpIHsKLQkJCWVycigiJXMgLSBiYWQgYmF1ZCByYXRlIiwgX19mdW5jX18pOwotCQkJZGJnKCIlc1xuIiwgImJhZCBiYXVkIHJhdGUiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gYmFkIGJhdWQgcmF0ZVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCQkvKiBFbmFibGUgYWNjZXNzIHRvIGRpdmlzb3IgbGF0Y2ggKi8KQEAgLTI0NDYsNyArMjQ0OCw3IEBACiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJbW9zNzg0MF9wb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1vc2NoaXBfcG9ydCksIEdGUF9LRVJORUwpOwogCQlpZiAobW9zNzg0MF9wb3J0ID09IE5VTEwpIHsKLQkJCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19mdW5jX18pOworCQkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJCXN0YXR1cyA9IC1FTk9NRU07CiAJCQlpLS07IC8qIGRvbid0IGZvbGxvdyBOVUxMIHBvaW50ZXIgY2xlYW5pbmcgdXAgKi8KIAkJCWdvdG8gZXJyb3I7CkBAIC0yNzQzLDcgKzI3NDUsOCBAQAogCQlnb3RvIGZhaWxlZF9wb3J0X2RldmljZV9yZWdpc3RlcjsKIAogCWRiZygiJXNcbiIsICJFbnRyaW5nLi4uIik7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAkvKiBSZWdpc3RlciB3aXRoIHRoZSB1c2IgKi8KIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlvX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwppbmRleCBjNGQ3MGIwLi5kZjY1Mzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKQEAgLTE1NCw4ICsxNTQsOCBAQAogCiAJb2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb21uaW5ldF9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvZCkgewotCQllcnIoIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLiIsCi0JCQkJX19mdW5jX18sIHNpemVvZihzdHJ1Y3Qgb21uaW5ldF9kYXRhKSk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLlxuIiwKKwkJCV9fZnVuY19fLCBzaXplb2Yoc3RydWN0IG9tbmluZXRfZGF0YSkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIG9kKTsKQEAgLTE4Myw4ICsxODMsOSBAQAogCQkJb21uaW5ldF9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKLQkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjQ0LDggKzI0NSw5IEBACiAJCQlvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAKIAlyZXR1cm47CiB9CkBAIC0yOTgsOCArMzAwLDkgQEAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih3cG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KSB7CiAJCXdwb3J0LT53cml0ZV91cmJfYnVzeSA9IDA7Ci0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwKLQkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCX0gZWxzZQogCQlyZXN1bHQgPSBjb3VudDsKIApAQCAtMzY0LDcgKzM2Nyw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZvbW5pbmV0X2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnp5eGVsX29tbmluZXRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA2YjE3MjdlLi4zZDg3ZWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC03OSwyNyArNzksMTYgQEAKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfVklQRVIJCQkweDY2MDAKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfVklQRVJfQlVTCQkweDY2MDEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfR1RfTUFYX1JFQURZCQkweDY3MDEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfR1RfTUFYCQkJMHg2NzExCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0ZVSklfTU9ERU1fTElHSFQJCTB4NjcyMQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9GVUpJX01PREVNX0dUCQkweDY3NDEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRlVKSV9NT0RFTV9FWAkJMHg2NzYxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0ZVSklfTkVUV09SS19MSUdIVAkweDY3MzEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRlVKSV9ORVRXT1JLX0dUCQkweDY3NTEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRlVKSV9ORVRXT1JLX0VYCQkweDY3NzEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfS09JX01PREVNCQkweDY4MDAKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfS09JX05FVFdPUksJCTB4NjgxMQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9TQ09SUElPTl9NT0RFTQkJMHg2OTAxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX1NDT1JQSU9OX05FVFdPUksJCTB4NjkxMQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9FVE5BX01PREVNCQkweDcwMDEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLCQkweDcwMTEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9MSVRFCQkweDcwMjEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9HVAkJMHg3MDQxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fRVgJCTB4NzA2MQotI2RlZmluZSBPUFRJT05fUFJPRFVDVF9FVE5BX05FVFdPUktfTElURQkweDcwMzEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0dUCQkweDcwNTEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0VYCQkweDcwNzEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9LT0lfTU9ERU0JCTB4NzEwMAotI2RlZmluZSBPUFRJT05fUFJPRFVDVF9FVE5BX0tPSV9ORVRXT1JLCQkweDcxMTEKIAogI2RlZmluZSBIVUFXRUlfVkVORE9SX0lECQkJMHgxMkQxCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0U2MDAJCQkweDEwMDEKQEAgLTIyMCw2ICsyMDksMTYgQEAKICNkZWZpbmUgWlRFX1BST0RVQ1RfTUY2MjgJCQkweDAwMTUKICNkZWZpbmUgWlRFX1BST0RVQ1RfQ0RNQV9URUNICQkJMHhmZmZlCiAKKy8qIEVyaWNzc29uIHByb2R1Y3RzICovCisjZGVmaW5lIEVSSUNTU09OX1ZFTkRPUl9JRAkJCTB4MGJkYgorI2RlZmluZSBFUklDU1NPTl9QUk9EVUNUX0YzNTA3RwkJCTB4MTkwMAorCisvKiBQYW50ZWNoIHByb2R1Y3RzICovCisjZGVmaW5lIFBBTlRFQ0hfVkVORE9SX0lECQkJMHgxMDZjCisjZGVmaW5lIFBBTlRFQ0hfUFJPRFVDVF9QQzU3NDAJCQkweDM3MDEKKyNkZWZpbmUgUEFOVEVDSF9QUk9EVUNUX1BDNTc1MAkJCTB4MzcwMiAgLyogUFgtNTAwICovCisjZGVmaW5lIFBBTlRFQ0hfUFJPRFVDVF9VTTE1MAkJCTB4MzcxMQorCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgb3B0aW9uX2lkc1tdID0gewogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9DT0xUKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9SSUNPTEEpIH0sCkBAIC0yMzUsMjcgKzIzNCwxNiBAQAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9WSVBFUikgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfVklQRVJfQlVTKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9HVF9NQVhfUkVBRFkpIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0dUX01BWCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRlVKSV9NT0RFTV9MSUdIVCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRlVKSV9NT0RFTV9HVCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRlVKSV9NT0RFTV9FWCkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRlVKSV9ORVRXT1JLX0xJR0hUKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9GVUpJX05FVFdPUktfR1QpIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0ZVSklfTkVUV09SS19FWCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfS09JX01PREVNKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9LT0lfTkVUV09SSykgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfU0NPUlBJT05fTU9ERU0pIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1NDT1JQSU9OX05FVFdPUkspIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU0pIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTkVUV09SSykgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9MSVRFKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX01PREVNX0dUKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX01PREVNX0VYKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX05FVFdPUktfTElURSkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0dUKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX05FVFdPUktfRVgpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfS09JX01PREVNKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX0tPSV9ORVRXT1JLKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTYwMCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UyMjAsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMjIwQklTLCAweGZmLCAweGZmLCAweGZmKSB9LApAQCAtMzE4LDcgKzMwNiw4IEBACiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCAweDgxMzYpIH0sCS8qIERlbGwgV2lyZWxlc3MgSFNEUEEgNTUyMCA9PSBOb3ZhdGVsIEV4cGVkaXRlIEVVODYwRCAqLwogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTM3KSB9LAkvKiBEZWxsIFdpcmVsZXNzIEhTRFBBIDU1MjAgKi8KIAl7IFVTQl9ERVZJQ0UoREVMTF9WRU5ET1JfSUQsIDB4ODEzOCkgfSwJLyogRGVsbCBXaXJlbGVzcyA1NTIwIFZvZGEgSSBNb2JpbGUgQnJvYWRiYW5kICgzRyBIU0RQQSkgTWluaWNhcmQgKi8KLQl7IFVTQl9ERVZJQ0UoQU5ZREFUQV9WRU5ET1JfSUQsIEFOWURBVEFfUFJPRFVDVF9BRFVfRTEwMEEpIH0sCisJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCAweDgxNDcpIH0sCS8qIERlbGwgV2lyZWxlc3MgNTUzMCBNb2JpbGUgQnJvYWRiYW5kICgzRyBIU1BBKSBNaW5pLUNhcmQgKi8KKwl7IFVTQl9ERVZJQ0UoQU5ZREFUQV9WRU5ET1JfSUQsIEFOWURBVEFfUFJPRFVDVF9BRFVfRTEwMEEpIH0sCS8qIEFEVS1FMTAwLCBBRFUtMzEwICovCiAJeyBVU0JfREVWSUNFKEFOWURBVEFfVkVORE9SX0lELCBBTllEQVRBX1BST0RVQ1RfQURVXzUwMEEpIH0sCiAJeyBVU0JfREVWSUNFKEFOWURBVEFfVkVORE9SX0lELCBBTllEQVRBX1BST0RVQ1RfQURVXzYyMFVXKSB9LAogCXsgVVNCX0RFVklDRShBWEVTU1RFTF9WRU5ET1JfSUQsIEFYRVNTVEVMX1BST0RVQ1RfTVYxMTBIKSB9LApAQCAtMzQ5LDYgKzMzOCwxMCBAQAogCXsgVVNCX0RFVklDRShURUxJVF9WRU5ET1JfSUQsIFRFTElUX1BST0RVQ1RfVUM4NjRFKSB9LAogCXsgVVNCX0RFVklDRShaVEVfVkVORE9SX0lELCBaVEVfUFJPRFVDVF9NRjYyOCkgfSwKIAl7IFVTQl9ERVZJQ0UoWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfQ0RNQV9URUNIKSB9LAorCXsgVVNCX0RFVklDRShFUklDU1NPTl9WRU5ET1JfSUQsIEVSSUNTU09OX1BST0RVQ1RfRjM1MDdHKSB9LAorCXsgVVNCX0RFVklDRShQQU5URUNIX1ZFTkRPUl9JRCwgUEFOVEVDSF9QUk9EVUNUX1BDNTc0MCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFOVEVDSF9WRU5ET1JfSUQsIFBBTlRFQ0hfUFJPRFVDVF9QQzU3NTApIH0sCisJeyBVU0JfREVWSUNFKFBBTlRFQ0hfVkVORE9SX0lELCBQQU5URUNIX1BST0RVQ1RfVU0xNTApIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9wdGlvbl9pZHMpOwpAQCAtNDI3LDcgKzQyMCw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfZHJpdmVyX3JlZ2lzdGVyOwogCi0JaW5mbyhEUklWRVJfREVTQyAiOiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwppbmRleCA5MDg0Mzc4Li40OTFjODg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCkBAIC0xMTQ3LDcgKzExNDcsNyBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmcGwyMzAzX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZwbDIzMDNfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKaW5kZXggNzI5MDNhYy4uNGI0NjNjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKQEAgLTI1MCwxNyArMjUwLDE4IEBACiAJCWlmICghZmNzKSB7CiAJCQlpbnQgYWN0dWFsX2xlbmd0aCA9IGRhdGFbbGVuZ3RoIC0gMl0gPj4gMjsKIAkJCWlmIChhY3R1YWxfbGVuZ3RoIDw9IChsZW5ndGggLSAyKSkgewotCQkJCWluZm8oIiVzIC0gYWN0dWFsOiAlZCIsIF9fZnVuY19fLAotCQkJCQkJCWFjdHVhbF9sZW5ndGgpOworCQkJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBhY3R1YWw6ICVkXG4iLAorCQkJCQkgX19mdW5jX18sIGFjdHVhbF9sZW5ndGgpOwogCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LAogCQkJCQkJCWRhdGEsIGFjdHVhbF9sZW5ndGgpOwogCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCQl9IGVsc2UgewotCQkJCWVycigiJXMgLSBpbmNvbnNpc3RlbnQgbGVuZ3RocyAlZDolZCIsCisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCQkiJXMgLSBpbmNvbnNpc3RlbnQgbGVuZ3RocyAlZDolZFxuIiwKIAkJCQkJX19mdW5jX18sIGFjdHVhbF9sZW5ndGgsIGxlbmd0aCk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQllcnIoIiVzIC0gYmFkIENSQyAleCIsIF9fZnVuY19fLCBmY3MpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBiYWQgQ1JDICV4XG4iLCBfX2Z1bmNfXywgZmNzKTsKIAkJfQogCX0gZWxzZSB7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCBsZW5ndGgpOwpAQCAtMjc3LDggKzI3OCw5IEBACiAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpCi0JCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCS8qIEZJWE1FOiBOZWVkIGEgbWVjaGFuaXNtIHRvIHJldHJ5IGxhdGVyIGlmIHRoaXMgaGFwcGVucyAqLwogfQogCkBAIC0zNjksOCArMzcxLDkgQEAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXN1bHQpIHsKIAkJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAwOwotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJcmV0dXJuIDA7CiAJfQogCWRiZygiJXMgdXJiOiAlcCBzdWJtaXR0ZWQiLCBfX2Z1bmNfXywgcG9ydC0+d3JpdGVfdXJiKTsKQEAgLTQyOCwxNCArNDMxLDEzIEBACiB7CiAJaW50IGksIHJldHZhbDsKIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIiAiIERSSVZFUl9BVVRIT1IpOwotCWluZm8oRFJJVkVSX0RFU0MpOwotCWluZm8oInZlbmRvcjogJXggcHJvZHVjdDogJXggc2FmZTogJWQgcGFkZGVkOiAlZFxuIiwKLQkJCQkJdmVuZG9yLCBwcm9kdWN0LCBzYWZlLCBwYWRkZWQpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAkvKiBpZiB3ZSBoYXZlIHZlbmRvciAvIHByb2R1Y3QgcGFyYW1ldGVycyBwYXRjaCB0aGVtIGludG8gaWQgbGlzdCAqLwogCWlmICh2ZW5kb3IgfHwgcHJvZHVjdCkgewotCQlpbmZvKCJ2ZW5kb3I6ICV4IHByb2R1Y3Q6ICV4XG4iLCB2ZW5kb3IsIHByb2R1Y3QpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IHZlbmRvcjogJXggcHJvZHVjdDogJXhcbiIsCisJCSAgICAgICB2ZW5kb3IsIHByb2R1Y3QpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlkX3RhYmxlKTsgaSsrKSB7CiAJCQlpZiAoIWlkX3RhYmxlW2ldLmlkVmVuZG9yICYmICFpZF90YWJsZVtpXS5pZFByb2R1Y3QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwppbmRleCA4YjllYWYzLi4wZjJiNjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJX191MTYgaW50ZXJmYWNlID0gMDsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIApAQCAtMjg0LDcgKzI4NCw3IEBACiBzdGF0aWMgdm9pZCBzaWVycmFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKLQlkYmcoIiVzIiwgX19mdW5jX18pOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIiwgX19mdW5jX18pOwogCXR0eV90ZXJtaW9zX2NvcHlfaHcodHR5LT50ZXJtaW9zLCBvbGRfdGVybWlvcyk7CiAJc2llcnJhX3NlbmRfc2V0dXAodHR5LCBwb3J0KTsKIH0KQEAgLTI5NSw2ICsyOTUsNyBAQAogCXVuc2lnbmVkIGludCB2YWx1ZTsKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyIsIF9fZnVuY19fKTsKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAogCXZhbHVlID0gKChwb3J0ZGF0YS0+cnRzX3N0YXRlKSA/IFRJT0NNX1JUUyA6IDApIHwKQEAgLTMzNCwxNCArMzM1LDE0IEBACiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJLyogZnJlZSB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyLCBhcyB1c2JfZnJlZV91cmIoKSBkb2VzIG5vdCBkbyB0aGlzICovCiAJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOwogCiAJaWYgKHN0YXR1cykKLQkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgIgorCQkgICAgInJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnRkYXRhLT5sb2NrLCBmbGFncyk7CiAJLS1wb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJiczsKQEAgLTM2MywxMiArMzY0LDEyIEBACiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAotCWRiZygiJXM6IHdyaXRlICglZCBjaGFycykiLCBfX2Z1bmNfXywgY291bnQpOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiB3cml0ZSAoJWQgY2hhcnMpIiwgX19mdW5jX18sIGNvdW50KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwogCWlmIChwb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJicyA+IE5fT1VUX1VSQikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwotCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlwb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJicysrOwpAQCAtNDM3LDggKzQzOCw4IEBACiAJcG9ydCA9ICB1cmItPmNvbnRleHQ7CiAKIAlpZiAoc3RhdHVzKSB7Ci0JCWRiZygiJXM6IG5vbnplcm8gc3RhdHVzOiAlZCBvbiBlbmRwb2ludCAlMDJ4LiIsCi0JCSAgICBfX2Z1bmNfXywgc3RhdHVzLCBlbmRwb2ludCk7CisJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiBub256ZXJvIHN0YXR1czogJWQgb24iCisJCSAgICAiIGVuZHBvaW50ICUwMnguIiwgX19mdW5jX18sIHN0YXR1cywgZW5kcG9pbnQpOwogCX0gZWxzZSB7CiAJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CkBAIC00NDcsNyArNDQ4LDggQEAKIAkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCQl0dHlfa3JlZl9wdXQodHR5KTsKIAkJfSBlbHNlCi0JCQlkYmcoIiVzOiBlbXB0eSByZWFkIHVyYiByZWNlaXZlZCIsIF9fZnVuY19fKTsKKwkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiBlbXB0eSByZWFkIHVyYiIKKwkJCQkiIHJlY2VpdmVkIiwgX19mdW5jX18pOwogCiAJCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KIAkJaWYgKHBvcnQtPnBvcnQuY291bnQgJiYgc3RhdHVzICE9IC1FU0hVVERPV04pIHsKQEAgLTQ2OCwxNSArNDcwLDE3IEBACiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAKLQlkYmcoIiVzIiwgX19mdW5jX18pOwotCWRiZygiJXM6IHVyYiAlcCBwb3J0ICVwIGhhcyBkYXRhICVwIiwgX19mdW5jX18sIHVyYiwgcG9ydCwgcG9ydGRhdGEpOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIiwgX19mdW5jX18pOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiB1cmIgJXAgcG9ydCAlcCBoYXMgZGF0YSAlcCIsIF9fZnVuY19fLAorCQl1cmIsIHBvcnQsIHBvcnRkYXRhKTsKIAogCWlmIChzdGF0dXMgPT0gMCkgewogCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXFfcGt0ID0KIAkJCQkoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCiAJCWlmICghcmVxX3BrdCkgewotCQkJZGJnKCIlczogTlVMTCByZXFfcGt0XG4iLCBfX2Z1bmNfXyk7CisJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogTlVMTCByZXFfcGt0XG4iLAorCQkJCV9fZnVuY19fKTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAoKHJlcV9wa3QtPmJSZXF1ZXN0VHlwZSA9PSAweEExKSAmJgpAQCAtNDg3LDcgKzQ5MSw4IEBACiAJCQkJCXNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSk7CiAJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCi0JCQlkYmcoIiVzOiBzaWduYWwgeCV4IiwgX19mdW5jX18sIHNpZ25hbHMpOworCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IHNpZ25hbCB4JXgiLCBfX2Z1bmNfXywKKwkJCQlzaWduYWxzKTsKIAogCQkJb2xkX2RjZF9zdGF0ZSA9IHBvcnRkYXRhLT5kY2Rfc3RhdGU7CiAJCQlwb3J0ZGF0YS0+Y3RzX3N0YXRlID0gMTsKQEAgLTUwMSwxOSArNTA2LDIwIEBACiAJCQkJdHR5X2hhbmd1cCh0dHkpOwogCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCX0gZWxzZSB7Ci0JCQlkYmcoIiVzOiB0eXBlICV4IHJlcSAleCIsIF9fZnVuY19fLAotCQkJCXJlcV9wa3QtPmJSZXF1ZXN0VHlwZSwgcmVxX3BrdC0+YlJlcXVlc3QpOworCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IHR5cGUgJXggcmVxICV4IiwKKwkJCQlfX2Z1bmNfXywgcmVxX3BrdC0+YlJlcXVlc3RUeXBlLAorCQkJCXJlcV9wa3QtPmJSZXF1ZXN0KTsKIAkJfQogCX0gZWxzZQotCQlkYmcoIiVzOiBlcnJvciAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogZXJyb3IgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgSVJRIGRhdGEgKi8KIAlpZiAoc3RhdHVzICE9IC1FU0hVVERPV04pIHsKIAkJdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKIAkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGVycikKLQkJCWRiZygiJXM6IHJlc3VibWl0IGludHIgdXJiIGZhaWxlZC4gKCVkKSIsCi0JCQkJX19mdW5jX18sIGVycik7CisJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogcmVzdWJtaXQgaW50ciB1cmIgIgorCQkJCSJmYWlsZWQuICglZCkiLAlfX2Z1bmNfXywgZXJyKTsKIAl9CiB9CiAKQEAgLTUyMywxNCArNTI5LDE0IEBACiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJLyogdHJ5IHRvIGdpdmUgYSBnb29kIG51bWJlciBiYWNrIGJhc2VkIG9uIGlmIHdlIGhhdmUgYW55IGZyZWUgdXJicyBhdAogCSAqIHRoaXMgcG9pbnQgaW4gdGltZSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwogCWlmIChwb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJicyA+IE5fT1VUX1VSQiAqIDIgLyAzKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRkYXRhLT5sb2NrLCBmbGFncyk7Ci0JCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRkYXRhLT5sb2NrLCBmbGFncyk7CkBAIC01NDksNyArNTU1LDcgQEAKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0JZGJnKCIlcyIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyIsIF9fZnVuY19fKTsKIAogCS8qIFNldCBzb21lIHNhbmUgZGVmYXVsdHMgKi8KIAlwb3J0ZGF0YS0+cnRzX3N0YXRlID0gMTsKQEAgLTU2MSw4ICs1NjcsOCBAQAogCQlpZiAoIXVyYikKIAkJCWNvbnRpbnVlOwogCQlpZiAodXJiLT5kZXYgIT0gc2VyaWFsLT5kZXYpIHsKLQkJCWRiZygiJXM6IGRldiAlcCAhPSAlcCIsIF9fZnVuY19fLAotCQkJCXVyYi0+ZGV2LCBzZXJpYWwtPmRldik7CisJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogZGV2ICVwICE9ICVwIiwKKwkJCQkgX19mdW5jX18sIHVyYi0+ZGV2LCBzZXJpYWwtPmRldik7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC02MDEsNyArNjA3LDcgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAlwb3J0ZGF0YS0+cnRzX3N0YXRlID0gMDsKQEAgLTYzMCw3ICs2MzYsNyBAQAogCWludCBpOwogCWludCBqOwogCi0JZGJnKCIlcyIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAKIAkvKiBTZXQgRGV2aWNlIG1vZGUgdG8gRDAgKi8KIAlzaWVycmFfc2V0X3Bvd2VyX3N0YXRlKHNlcmlhbC0+ZGV2LCAweDAwMDApOwpAQCAtNjQ0LDggKzY1MCw5IEBACiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAJCXBvcnRkYXRhID0ga3phbGxvYyhzaXplb2YoKnBvcnRkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcG9ydGRhdGEpIHsKLQkJCWRiZygiJXM6IGttYWxsb2MgZm9yIHNpZXJyYV9wb3J0X3ByaXZhdGUgKCVkKSBmYWlsZWQhLiIsCi0JCQkJCV9fZnVuY19fLCBpKTsKKwkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiBrbWFsbG9jIGZvciAiCisJCQkJInNpZXJyYV9wb3J0X3ByaXZhdGUgKCVkKSBmYWlsZWQhLiIsCisJCQkJX19mdW5jX18sIGkpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJc3Bpbl9sb2NrX2luaXQoJnBvcnRkYXRhLT5sb2NrKTsKQEAgLTY2NSw4ICs2NzIsOCBAQAogCQlmb3IgKGogPSAwOyBqIDwgTl9JTl9VUkI7ICsraikgewogCQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJCWlmICh1cmIgPT0gTlVMTCkgewotCQkJCWRiZygiJXM6IGFsbG9jIGZvciBpbiBwb3J0IGZhaWxlZC4iLAotCQkJCSAgICBfX2Z1bmNfXyk7CisJCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IGFsbG9jIGZvciBpbiAiCisJCQkJCSJwb3J0IGZhaWxlZC4iLCBfX2Z1bmNfXyk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQkvKiBGaWxsIFVSQiB1c2luZyBzdXBwbGllZCBkYXRhLiAqLwpAQCAtNjg4LDcgKzY5NSw3IEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAKLQlkYmcoIiVzIiwgX19mdW5jX18pOworCWRldl9kYmcoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyIsIF9fZnVuY19fKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CkBAIC03NDMsNyArNzUwLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF9kcml2ZXJfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9ERVNDICI6ICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKaW5kZXggMTUzM2Q2ZS4uYTY1YmMyYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYwpAQCAtNTg5LDggKzU4OSw4IEBACiAJY2FzZSAxMDAwMDAwOgogCQkJYnVmWzBdID0gMHgwYjsJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJzcGNwODI1IGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBiYXVkcmF0ZSAiCi0JCSAgICAicmVxdWVzdGVkLCB1c2luZyBkZWZhdWx0IG9mIDk2MDAuIik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgInNwY3A4MjUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlICIKKwkJCSJiYXVkcmF0ZSByZXF1ZXN0ZWQsIHVzaW5nIGRlZmF1bHQgb2YgOTYwMC5cbiIpOwogCX0KIAogCS8qIFNldCBEYXRhIExlbmd0aCA6IDAwOjViaXQsIDAxOjZiaXQsIDEwOjdiaXQsIDExOjhiaXQgKi8KQEAgLTYyOSw3ICs2MjksOCBAQAogCQkJICAgIFNFVF9VQVJUX0ZPUk1BVF9UWVBFLCBTRVRfVUFSVF9GT1JNQVQsCiAJCQkgICAgdWFydGRhdGEsIDAsIE5VTEwsIDAsIDEwMCk7CiAJaWYgKGkgPCAwKQotCQllcnIoIlNldCBVQVJUIGZvcm1hdCAlI3ggZmFpbGVkIChlcnJvciA9ICVkKSIsIHVhcnRkYXRhLCBpKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IFVBUlQgZm9ybWF0ICUjeCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLAorCQkJdWFydGRhdGEsIGkpOwogCWRiZygiMHgyMToweDQwOjA6MCAgJWRcbiIsIGkpOwogCiAJaWYgKGNmbGFnICYgQ1JUU0NUUykgewpAQCAtMTA1NCw3ICsxMDU1LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnNwY3A4eDVfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmc3BjcDh4NV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKaW5kZXggYzkwMjM3ZC4uMzFjNDJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCkBAIC04NSw3ICs4NSw2IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjaW5jbHVkZSAidGlfdXNiXzM0MTBfNTA1Mi5oIgogCkBAIC0zODMsNyArMzgyLDggQEAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZF91c2I7CiAKLQlpbmZvKFRJX0RSSVZFUl9ERVNDICIgIiBUSV9EUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIFRJX0RSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBUSV9EUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCBlN2Q0MjQ2Li44YmUzZjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTExMjEsNyArMTEyMSw4IEBACiAKIAlyZXN1bHQgPSBidXNfcmVnaXN0ZXIoJnVzYl9zZXJpYWxfYnVzX3R5cGUpOwogCWlmIChyZXN1bHQpIHsKLQkJZXJyKCIlcyAtIHJlZ2lzdGVyaW5nIGJ1cyBkcml2ZXIgZmFpbGVkIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9FUlIgInVzYi1zZXJpYWw6ICVzIC0gcmVnaXN0ZXJpbmcgYnVzIGRyaXZlciAiCisJCSAgICAgICAiZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXhpdF9idXM7CiAJfQogCkBAIC0xMTQyLDI1ICsxMTQzLDI4IEBACiAJdHR5X3NldF9vcGVyYXRpb25zKHVzYl9zZXJpYWxfdHR5X2RyaXZlciwgJnNlcmlhbF9vcHMpOwogCXJlc3VsdCA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIodXNiX3NlcmlhbF90dHlfZHJpdmVyKTsKIAlpZiAocmVzdWx0KSB7Ci0JCWVycigiJXMgLSB0dHlfcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2Itc2VyaWFsOiAlcyAtIHR0eV9yZWdpc3Rlcl9kcml2ZXIgZmFpbGVkXG4iLAorCQkgICAgICAgX19mdW5jX18pOwogCQlnb3RvIGV4aXRfcmVnX2RyaXZlcjsKIAl9CiAKIAkvKiByZWdpc3RlciB0aGUgVVNCIGRyaXZlciAqLwogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmdXNiX3NlcmlhbF9kcml2ZXIpOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCWVycigiJXMgLSB1c2JfcmVnaXN0ZXIgZmFpbGVkIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9FUlIgInVzYi1zZXJpYWw6ICVzIC0gdXNiX3JlZ2lzdGVyIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJZ290byBleGl0X3R0eTsKIAl9CiAKIAkvKiByZWdpc3RlciB0aGUgZ2VuZXJpYyBkcml2ZXIsIGlmIHdlIHNob3VsZCAqLwogCXJlc3VsdCA9IHVzYl9zZXJpYWxfZ2VuZXJpY19yZWdpc3RlcihkZWJ1Zyk7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJZXJyKCIlcyAtIHJlZ2lzdGVyaW5nIGdlbmVyaWMgZHJpdmVyIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2Itc2VyaWFsOiAlcyAtIHJlZ2lzdGVyaW5nIGdlbmVyaWMgIgorCQkgICAgICAgImRyaXZlciBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byBleGl0X2dlbmVyaWM7CiAJfQogCi0JaW5mbyhEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIHJlc3VsdDsKIApAQCAtMTE3NCw3ICsxMTc4LDggQEAKIAlidXNfdW5yZWdpc3RlcigmdXNiX3NlcmlhbF9idXNfdHlwZSk7CiAKIGV4aXRfYnVzOgotCWVycigiJXMgLSByZXR1cm5pbmcgd2l0aCBlcnJvciAlZCIsIF9fZnVuY19fLCByZXN1bHQpOworCXByaW50ayhLRVJOX0VSUiAidXNiLXNlcmlhbDogJXMgLSByZXR1cm5pbmcgd2l0aCBlcnJvciAlZFxuIiwKKwkgICAgICAgX19mdW5jX18sIHJlc3VsdCk7CiAJcHV0X3R0eV9kcml2ZXIodXNiX3NlcmlhbF90dHlfZHJpdmVyKTsKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMTIzMywxMSArMTIzOCwxMSBAQAogCiAJcmV0dmFsID0gdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIoZHJpdmVyKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigicHJvYmxlbSAlZCB3aGVuIHJlZ2lzdGVyaW5nIGRyaXZlciAlcyIsCi0JCQkJCQlyZXR2YWwsIGRyaXZlci0+ZGVzY3JpcHRpb24pOworCQlwcmludGsoS0VSTl9FUlIgInVzYi1zZXJpYWw6IHByb2JsZW0gJWQgd2hlbiByZWdpc3RlcmluZyAiCisJCSAgICAgICAiZHJpdmVyICVzXG4iLCByZXR2YWwsIGRyaXZlci0+ZGVzY3JpcHRpb24pOwogCQlsaXN0X2RlbCgmZHJpdmVyLT5kcml2ZXJfbGlzdCk7CiAJfSBlbHNlCi0JCWluZm8oIlVTQiBTZXJpYWwgc3VwcG9ydCByZWdpc3RlcmVkIGZvciAlcyIsCisJCXByaW50ayhLRVJOX0lORk8gIlVTQiBTZXJpYWwgc3VwcG9ydCByZWdpc3RlcmVkIGZvciAlc1xuIiwKIAkJCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pOwogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTEyNDgsNyArMTI1Myw4IEBACiB2b2lkIHVzYl9zZXJpYWxfZGVyZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKmRldmljZSkKIHsKIAkvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJLTCBoZWxkICovCi0JaW5mbygiVVNCIFNlcmlhbCBkZXJlZ2lzdGVyaW5nIGRyaXZlciAlcyIsIGRldmljZS0+ZGVzY3JpcHRpb24pOworCXByaW50ayhLRVJOX0lORk8gIlVTQiBTZXJpYWwgZGVyZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsCisJICAgICAgIGRldmljZS0+ZGVzY3JpcHRpb24pOwogCWxpc3RfZGVsKCZkZXZpY2UtPmRyaXZlcl9saXN0KTsKIAl1c2Jfc2VyaWFsX2J1c19kZXJlZ2lzdGVyKGRldmljZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCmluZGV4IGE2ZDFjNzUuLjRmYWNjZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCkBAIC03NjgsNyArNzY4LDcgQEAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCiAJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7Ci0JCWVycigiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/PyIsCisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/XG4iLAogCQkJc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtOTcxLDExICs5NzEsMTQgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlpbmZvKAotCQkgICJVbnRlc3RlZCBVU0IgZGV2aWNlIHNwZWNpZmllZCBhdCB0aW1lIG9mIG1vZHVsZSBpbnNlcnRpb24iKTsKLQkJaW5mbygiV2FybmluZzogVGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byB3b3JrIik7Ci0JCWluZm8oIlVzaW5nIGEgbmV3ZXIga2VybmVsIGlzIHByZWZlcnJlZCB0byB0aGlzIG1ldGhvZCIpOwotCQlpbmZvKCJBZGRpbmcgUGFsbSBPUyBwcm90b2NvbCA0Lnggc3VwcG9ydCBmb3IgdW5rbm93biBkZXZpY2U6IDB4JXgvMHgleCIsCisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6IFVudGVzdGVkIFVTQiBkZXZpY2Ugc3BlY2lmaWVkIGF0IHRpbWUgb2YgbW9kdWxlIGluc2VydGlvblxuIik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6IFdhcm5pbmc6IFRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gd29ya1xuIik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6IFVzaW5nIGEgbmV3ZXIga2VybmVsIGlzIHByZWZlcnJlZCB0byB0aGlzIG1ldGhvZFxuIik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6IEFkZGluZyBQYWxtIE9TIHByb3RvY29sIDQueCBzdXBwb3J0IGZvciB1bmtub3duIGRldmljZTogMHgleC8weCV4XG4iLAogCQkJdmVuZG9yLCBwcm9kdWN0KTsKIAl9CiAJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmaGFuZHNwcmluZ19kZXZpY2UpOwpAQCAtOTkwLDcgKzk5Myw3IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ2aXNvcl9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKaW5kZXggMTFjOGI5Ny4uNTMzNWQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwpAQCAtMzAzLDEyICszMDMsMTUgQEAKIAogCWlmIChyZXF1ZXN0X2loZXhfZmlybXdhcmUoJmZpcm13YXJlX2Z3LCAid2hpdGVoZWF0LmZ3IiwKIAkJCQkgICZzZXJpYWwtPmRldi0+ZGV2KSkgewotCQllcnIoIiVzIC0gcmVxdWVzdCBcIndoaXRlaGVhdC5md1wiIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCSIlcyAtIHJlcXVlc3QgXCJ3aGl0ZWhlYXQuZndcIiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQogCWlmIChyZXF1ZXN0X2loZXhfZmlybXdhcmUoJmxvYWRlcl9mdywgIndoaXRlaGVhdF9sb2FkZXIuZnciLAogCQkJICAgICAmc2VyaWFsLT5kZXYtPmRldikpIHsKLQkJZXJyKCIlcyAtIHJlcXVlc3QgXCJ3aGl0ZWhlYXRfbG9hZGVyLmZ3XCIgZmFpbGVkIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJIiVzIC0gcmVxdWVzdCBcIndoaXRlaGVhdF9sb2FkZXIuZndcIiBmYWlsZWRcbiIsCisJCQlfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSAwOwpAQCAtMzIwLDkgKzMyMywxMCBAQAogCQkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKXJlY29yZC0+ZGF0YSwKIAkJCQkJICAgICAgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pLCAweGEwKTsKIAkJaWYgKHJlc3BvbnNlIDwgMCkgewotCQkJZXJyKCIlcyAtIGV6dXNiX3dyaXRlbWVtb3J5IGZhaWxlZCBmb3IgbG9hZGVyICglZCAlMDRYICVwICVkKSIsCi0JCQkgICAgX19mdW5jX18sIHJlc3BvbnNlLCBiZTMyX3RvX2NwdShyZWNvcmQtPmFkZHIpLAotCQkJICAgIHJlY29yZC0+ZGF0YSwgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pKTsKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIGV6dXNiX3dyaXRlbWVtb3J5ICIKKwkJCQkiZmFpbGVkIGZvciBsb2FkZXIgKCVkICUwNFggJXAgJWQpXG4iLAorCQkJCV9fZnVuY19fLCByZXNwb25zZSwgYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwKKwkJCQlyZWNvcmQtPmRhdGEsIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CiAJCQlicmVhazsKIAkJfQogCQlyZWNvcmQgPSBpaGV4X25leHRfYmlucmVjKHJlY29yZCk7CkBAIC0zMzgsOSArMzQyLDExIEBACiAJCQkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopcmVjb3JkLT5kYXRhLAogCQkJCQkgICAgICBiZTE2X3RvX2NwdShyZWNvcmQtPmxlbiksIDB4YTMpOwogCQlpZiAocmVzcG9uc2UgPCAwKSB7Ci0JCQllcnIoIiVzIC0gZXp1c2Jfd3JpdGVtZW1vcnkgZmFpbGVkIGZvciBmaXJzdCBmaXJtd2FyZSBzdGVwICglZCAlMDRYICVwICVkKSIsIAotCQkJICAgIF9fZnVuY19fLCByZXNwb25zZSwgYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwKLQkJCSAgICByZWNvcmQtPmRhdGEsIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBlenVzYl93cml0ZW1lbW9yeSAiCisJCQkJImZhaWxlZCBmb3IgZmlyc3QgZmlybXdhcmUgc3RlcCAiCisJCQkJIiglZCAlMDRYICVwICVkKVxuIiwgX19mdW5jX18sIHJlc3BvbnNlLAorCQkJCWJlMzJfdG9fY3B1KHJlY29yZC0+YWRkciksIHJlY29yZC0+ZGF0YSwKKwkJCQliZTE2X3RvX2NwdShyZWNvcmQtPmxlbikpOwogCQkJYnJlYWs7CiAJCX0KIAkJKytyZWNvcmQ7CkBAIC0zNTQsOSArMzYwLDExIEBACiAJCQkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopcmVjb3JkLT5kYXRhLAogCQkJCQkgICAgICBiZTE2X3RvX2NwdShyZWNvcmQtPmxlbiksIDB4YTApOwogCQlpZiAocmVzcG9uc2UgPCAwKSB7Ci0JCQllcnIoIiVzIC0gZXp1c2Jfd3JpdGVtZW1vcnkgZmFpbGVkIGZvciBzZWNvbmQgZmlybXdhcmUgc3RlcCAoJWQgJTA0WCAlcCAlZCkiLCAKLQkJCSAgICBfX2Z1bmNfXywgcmVzcG9uc2UsIGJlMzJfdG9fY3B1KHJlY29yZC0+YWRkciksCi0JCQkgICAgcmVjb3JkLT5kYXRhLCBiZTE2X3RvX2NwdShyZWNvcmQtPmxlbikpOworCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gZXp1c2Jfd3JpdGVtZW1vcnkgIgorCQkJCSJmYWlsZWQgZm9yIHNlY29uZCBmaXJtd2FyZSBzdGVwICIKKwkJCQkiKCVkICUwNFggJXAgJWQpXG4iLCBfX2Z1bmNfXywgcmVzcG9uc2UsCisJCQkJYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwgcmVjb3JkLT5kYXRhLAorCQkJCWJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CiAJCQlicmVhazsKIAkJfQogCQkrK3JlY29yZDsKQEAgLTQyMSwxMiArNDI5LDEyIEBACiAJcmV0ID0gdXNiX2J1bGtfbXNnKHNlcmlhbC0+ZGV2LCBwaXBlLCBjb21tYW5kLCAyLAogCQkJCQkJJmFsZW4sIENPTU1BTkRfVElNRU9VVF9NUyk7CiAJaWYgKHJldCkgewotCQllcnIoIiVzOiBDb3VsZG4ndCBzZW5kIGNvbW1hbmQgWyVkXSIsCi0JCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgcmV0KTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzOiBDb3VsZG4ndCBzZW5kIGNvbW1hbmQgWyVkXVxuIiwKKwkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIHJldCk7CiAJCWdvdG8gbm9fZmlybXdhcmU7CiAJfSBlbHNlIGlmIChhbGVuICE9IDIpIHsKLQkJZXJyKCIlczogU2VuZCBjb21tYW5kIGluY29tcGxldGUgWyVkXSIsCi0JCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgYWxlbik7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlczogU2VuZCBjb21tYW5kIGluY29tcGxldGUgWyVkXVxuIiwKKwkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIGFsZW4pOwogCQlnb3RvIG5vX2Zpcm13YXJlOwogCX0KIApAQCAtNDM3LDMxICs0NDUsMzMgQEAKIAlyZXQgPSB1c2JfYnVsa19tc2coc2VyaWFsLT5kZXYsIHBpcGUsIHJlc3VsdCwKIAkJCXNpemVvZigqaHdfaW5mbykgKyAxLCAmYWxlbiwgQ09NTUFORF9USU1FT1VUX01TKTsKIAlpZiAocmV0KSB7Ci0JCWVycigiJXM6IENvdWxkbid0IGdldCByZXN1bHRzIFslZF0iLAotCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIHJldCk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlczogQ291bGRuJ3QgZ2V0IHJlc3VsdHMgWyVkXVxuIiwKKwkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIHJldCk7CiAJCWdvdG8gbm9fZmlybXdhcmU7CiAJfSBlbHNlIGlmIChhbGVuICE9IHNpemVvZigqaHdfaW5mbykgKyAxKSB7Ci0JCWVycigiJXM6IEdldCByZXN1bHRzIGluY29tcGxldGUgWyVkXSIsCi0JCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgYWxlbik7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlczogR2V0IHJlc3VsdHMgaW5jb21wbGV0ZSBbJWRdXG4iLAorCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgYWxlbik7CiAJCWdvdG8gbm9fZmlybXdhcmU7CiAJfSBlbHNlIGlmIChyZXN1bHRbMF0gIT0gY29tbWFuZFswXSkgewotCQllcnIoIiVzOiBDb21tYW5kIGZhaWxlZCBbJWRdIiwKLQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXN1bHRbMF0pOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXM6IENvbW1hbmQgZmFpbGVkIFslZF1cbiIsCisJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXN1bHRbMF0pOwogCQlnb3RvIG5vX2Zpcm13YXJlOwogCX0KIAogCWh3X2luZm8gPSAoc3RydWN0IHdoaXRlaGVhdF9od19pbmZvICopJnJlc3VsdFsxXTsKIAotCWluZm8oIiVzOiBEcml2ZXIgJXM6IEZpcm13YXJlIHYlZC4lMDJkIiwgc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwKLQkgICAgIERSSVZFUl9WRVJTSU9OLCBod19pbmZvLT5zd19tYWpvcl9yZXYsIGh3X2luZm8tPnN3X21pbm9yX3Jldik7CisJZGV2X2luZm8oJnNlcmlhbC0+ZGV2LT5kZXYsICIlczogRHJpdmVyICVzOiBGaXJtd2FyZSB2JWQuJTAyZFxuIiwKKwkJIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIERSSVZFUl9WRVJTSU9OLAorCQkgaHdfaW5mby0+c3dfbWFqb3JfcmV2LCBod19pbmZvLT5zd19taW5vcl9yZXYpOwogCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAogCQlpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChpbmZvID09IE5VTEwpIHsKLQkJCWVycigiJXM6IE91dCBvZiBtZW1vcnkgZm9yIHBvcnQgc3RydWN0dXJlc1xuIiwKLQkJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzOiBPdXQgb2YgbWVtb3J5IGZvciBwb3J0IHN0cnVjdHVyZXNcbiIsCisJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CiAJCQlnb3RvIG5vX3ByaXZhdGU7CiAJCX0KIApAQCAtNDgxLDE4ICs0OTEsMjAgQEAKIAkJZm9yIChqID0gMDsgaiA8IHVyYl9wb29sX3NpemU7IGorKykgewogCQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghdXJiKSB7Ci0JCQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CiAJCQkJZ290byBub19yeF91cmI7CiAJCQl9CiAJCQlidWZfc2l6ZSA9IHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwogCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIHVyYiBidWZmZXIiKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgYnVmZmVyXG4iKTsKIAkJCQlnb3RvIG5vX3J4X2J1ZjsKIAkJCX0KIAkJCXdyYXAgPSBrbWFsbG9jKHNpemVvZigqd3JhcCksIEdGUF9LRVJORUwpOwogCQkJaWYgKCF3cmFwKSB7Ci0JCQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgd3JhcHBlciIpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkJIkNvdWxkbid0IGFsbG9jYXRlIHVyYiB3cmFwcGVyXG4iKTsKIAkJCQlnb3RvIG5vX3J4X3dyYXA7CiAJCQl9CiAJCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlcmlhbC0+ZGV2LApAQCAtNTA1LDE4ICs1MTcsMjAgQEAKIAogCQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghdXJiKSB7Ci0JCQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CiAJCQkJZ290byBub190eF91cmI7CiAJCQl9CiAJCQlidWZfc2l6ZSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7Ci0JCQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgYnVmZmVyIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCQkiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIGJ1ZmZlclxuIik7CiAJCQkJZ290byBub190eF9idWY7CiAJCQl9CiAJCQl3cmFwID0ga21hbGxvYyhzaXplb2YoKndyYXApLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghd3JhcCkgewotCQkJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIHdyYXBwZXIiKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgd3JhcHBlclxuIik7CiAJCQkJZ290byBub190eF93cmFwOwogCQkJfQogCQkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzZXJpYWwtPmRldiwKQEAgLTUzNCw4ICs1NDgsOSBAQAogCWNvbW1hbmRfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlKSwKIAkJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKGNvbW1hbmRfaW5mbyA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IE91dCBvZiBtZW1vcnkgZm9yIHBvcnQgc3RydWN0dXJlc1xuIiwKLQkJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkiJXM6IE91dCBvZiBtZW1vcnkgZm9yIHBvcnQgc3RydWN0dXJlc1xuIiwKKwkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwogCQlnb3RvIG5vX2NvbW1hbmRfcHJpdmF0ZTsKIAl9CiAKQEAgLTU1MiwxMiArNTY3LDE1IEBACiAKIG5vX2Zpcm13YXJlOgogCS8qIEZpcm13YXJlIGxpa2VseSBub3QgcnVubmluZyAqLwotCWVycigiJXM6IFVuYWJsZSB0byByZXRyaWV2ZSBmaXJtd2FyZSB2ZXJzaW9uLCB0cnkgcmVwbHVnZ2luZ1xuIiwKLQkJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7Ci0JZXJyKCIlczogSWYgdGhlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIChzdGF0dXMgbGVkIG5vdCBibGlua2luZylcbiIsCi0JCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwotCWVycigiJXM6IHBsZWFzZSBjb250YWN0IHN1cHBvcnRAY29ubmVjdHRlY2guY29tXG4iLAotCQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKKwlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkiJXM6IFVuYWJsZSB0byByZXRyaWV2ZSBmaXJtd2FyZSB2ZXJzaW9uLCB0cnkgcmVwbHVnZ2luZ1xuIiwKKwkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJIiVzOiBJZiB0aGUgZmlybXdhcmUgaXMgbm90IHJ1bm5pbmcgKHN0YXR1cyBsZWQgbm90IGJsaW5raW5nKVxuIiwKKwkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJIiVzOiBwbGVhc2UgY29udGFjdCBzdXBwb3J0QGNvbm5lY3R0ZWNoLmNvbVxuIiwKKwkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CiAJa2ZyZWUocmVzdWx0KTsKIAlyZXR1cm4gLUVOT0RFVjsKIApAQCAtNjgwLDggKzY5OCw5IEBACiAJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KIAlyZXR2YWwgPSBzdGFydF9wb3J0X3JlYWQocG9ydCk7CiAJaWYgKHJldHZhbCkgewotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKLQkJCQlfX2Z1bmNfXywgcmV0dmFsKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCk7CiAJCWZpcm1fY2xvc2UocG9ydCk7CiAJCXN0b3BfY29tbWFuZF9wb3J0KHBvcnQtPnNlcmlhbCk7CiAJCWdvdG8gZXhpdDsKQEAgLTgwNiw4ICs4MjUsOSBAQAogCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBieXRlczsKIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCQlzZW50ID0gcmVzdWx0OwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAkJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnR4X3VyYnNfZnJlZSk7CkBAIC0xMDc1LDcgKzEwOTUsNyBAQAogCXdyYXAgPSB1cmJfdG9fd3JhcCh1cmIsICZpbmZvLT5yeF91cmJzX3N1Ym1pdHRlZCk7CiAJaWYgKCF3cmFwKSB7CiAJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKLQkJZXJyKCIlcyAtIE5vdCBteSB1cmIhIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE5vdCBteSB1cmIhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAJbGlzdF9kZWwoJndyYXAtPmxpc3QpOwpAQCAtMTExOSw3ICsxMTM5LDcgQEAKIAl3cmFwID0gdXJiX3RvX3dyYXAodXJiLCAmaW5mby0+dHhfdXJic19zdWJtaXR0ZWQpOwogCWlmICghd3JhcCkgewogCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCWVycigiJXMgLSBOb3QgbXkgdXJiISIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBOb3QgbXkgdXJiIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCWxpc3RfbW92ZSgmd3JhcC0+bGlzdCwgJmluZm8tPnR4X3VyYnNfZnJlZSk7CkBAIC0xMzgzLDggKzE0MDMsOSBAQAogCQljb21tYW5kX3BvcnQtPnJlYWRfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKIAkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoY29tbWFuZF9wb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXR2YWwpIHsKLQkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXR2YWwpOworCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJldHZhbCk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC0xNTIyLDcgKzE1NDMsOCBAQAogCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAogCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAkJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnJ4X3VyYnNfZnJlZSk7CkBAIC0xNTU2LDcgKzE1NzgsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmd2hpdGVoZWF0X2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJndoaXRlaGVhdF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCmluZGV4IDk4Yjg5ZWEuLmM3YmY4OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKQEAgLTc4LDggKzc4LDggQEAKIHJlc3VibWl0OgogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVyciAoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2lucHV0MCwgcmV0dmFsICVkIiwKLQkJCW9uZXRvdWNoLT51ZGV2LT5idXMtPmJ1c19uYW1lLAorCQlkZXZfZXJyKCZkZXYtPmRldiwgImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2lucHV0MCwgIgorCQkJInJldHZhbCAlZFxuIiwgb25ldG91Y2gtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCiAJCQlvbmV0b3VjaC0+dWRldi0+ZGV2cGF0aCwgcmV0dmFsKTsKIH0KIApAQCAtOTAsNyArOTAsNyBAQAogCW9uZXRvdWNoLT5pc19vcGVuID0gMTsKIAlvbmV0b3VjaC0+aXJxLT5kZXYgPSBvbmV0b3VjaC0+dWRldjsKIAlpZiAodXNiX3N1Ym1pdF91cmIob25ldG91Y2gtPmlycSwgR0ZQX0tFUk5FTCkpIHsKLQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQiKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJ1c2Jfc3VibWl0X3VyYiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTExNyw3ICsxMTcsOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgVVNfUkVTVU1FOgogCQkJaWYgKHVzYl9zdWJtaXRfdXJiKG9uZXRvdWNoLT5pcnEsIEdGUF9LRVJORUwpICE9IDApCi0JCQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQiKTsKKwkJCQlkZXZfZXJyKCZvbmV0b3VjaC0+aXJxLT5kZXYtPmRldiwKKwkJCQkJInVzYl9zdWJtaXRfdXJiIGZhaWxlZFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggMzUyM2EwYi4uNzkxMDhkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC02NjMsNyArNjYzLDcgQEAKIAl9CiAKIAkvKiBEaWQgd2UgdHJhbnNmZXIgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIGFtb3VudCByZXF1aXJlZD8gKi8KLQlpZiAoc3JiLT5yZXN1bHQgPT0gU0FNX1NUQVRfR09PRCAmJgorCWlmICgoc3JiLT5yZXN1bHQgPT0gU0FNX1NUQVRfR09PRCB8fCBzcmItPnNlbnNlX2J1ZmZlclsyXSA9PSAwKSAmJgogCQkJc2NzaV9idWZmbGVuKHNyYikgLSBzY3NpX2dldF9yZXNpZChzcmIpIDwgc3JiLT51bmRlcmZsb3cpCiAJCXNyYi0+cmVzdWx0ID0gKERJRF9FUlJPUiA8PCAxNikgfCAoU1VHR0VTVF9SRVRSWSA8PCAyNCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCBmNzljMjA0Li4wZjEzNDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9LY29uZmlnCkBAIC03Niw2ICs3NiwxNCBAQAogICAgICAgIHNlbGVjdCBJMkMKICAgICAgICBkZWZhdWx0IG4KIAorY29uZmlnIEZCX0JPT1RfVkVTQV9TVVBQT1JUCisJYm9vbAorCWRlcGVuZHMgb24gRkIKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBJZiB0cnVlLCBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgZnJhbWVidWZmZXIgZHJpdmVyIGNhbiB0YWtlIGFkdmFudGFnZQorCSAgb2YgVkVTQSB2aWRlbyBtb2RlcyBzZXQgYXQgYW4gZWFybHkgYm9vdCBzdGFnZSB2aWEgdGhlIHZnYT0gcGFyYW1ldGVyLgorCiBjb25maWcgRkJfQ0ZCX0ZJTExSRUNUCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIEZCCkBAIC0yNTQsMTYgKzI2MiwyNCBAQAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAogCWhlbHAKLQkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciB0aGUgUGVybWVkaWEyIEFHUCBmcmFtZQotCSAgYnVmZmVyIGNhcmQgZnJvbSBBU0ssIGFrYSBgR3JhcGhpYyBCbGFzdGVyIEV4eHRyZW1lJy4gIFRoZXJlIGlzIGEKLQkgIHByb2R1Y3QgcGFnZSBhdAotCSAgPGh0dHA6Ly93d3cuYXNrLmNvbS5oay9wcm9kdWN0L1Blcm1lZGlhJTIwMi9wZXJtZWRpYTIuaHRtPi4KKwkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciBjYXJkcyBiYXNlZCBvbgorCSAgdGhlIDNEIExhYnMgUGVybWVkaWEsIFBlcm1lZGlhIDIgYW5kIFBlcm1lZGlhIDJWIGNoaXBzLgorCSAgVGhlIGRyaXZlciB3YXMgdGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgY2FyZHM6CisJCURpYW1vbmQgRmlyZUdMIDEwMDAgUFJPIEFHUAorCQlFTFNBIEdsb3JpYSBTeW5lcmd5IFBDSQorCQlBcHBpYW4gSmVyb25pbW8gUFJPIChib3RoIGhlYWRzKSBQQ0kKKwkJM0RMYWJzIE94eWdlbiBBQ1ggYWthIEVPTnRyb25pY3MgUGljYXNzbyBQMiBQQ0kKKwkJVGVjaHNvdXJjZSBSYXB0b3IgR0ZYLThQIChha2EgU3VuIFBHWC0zMikgb24gU1BBUkMKKwkJQVNLIEdyYXBoaWMgQmxhc3RlciBFeHh0cmVtZSBBR1AKKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcG0yZmIuCiAKIGNvbmZpZyBGQl9QTTJfRklGT19ESVNDT05ORUNUCiAJYm9vbCAiZW5hYmxlIEZJRk8gZGlzY29ubmVjdCBmZWF0dXJlIgogCWRlcGVuZHMgb24gRkJfUE0yICYmIFBDSQogCWhlbHAKLQkgIFN1cHBvcnQgdGhlIFBlcm1lZGlhMiBGSUZPIGRpc2Nvbm5lY3QgZmVhdHVyZSAoc2VlIENPTkZJR19GQl9QTTIpLgorCSAgU3VwcG9ydCB0aGUgUGVybWVkaWEyIEZJRk8gZGlzY29ubmVjdCBmZWF0dXJlLgogCiBjb25maWcgRkJfQVJNQ0xDRAogCXRyaXN0YXRlICJBUk0gUHJpbWVDZWxsIFBMMTEwIHN1cHBvcnQiCkBAIC02NzMsNiArNjg5LDcgQEAKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJc2VsZWN0IEZCX0JPT1RfVkVTQV9TVVBQT1JUCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIGdlbmVyaWMgVkVTQSAyLjAKIAkgIGNvbXBsaWFudCBncmFwaGljIGNhcmRzLiBUaGUgb2xkZXIgVkVTQSAxLjIgY2FyZHMgYXJlIG5vdCBzdXBwb3J0ZWQuCkBAIC02ODEsMjMgKzY5OCwxNCBAQAogCiBjb25maWcgRkJfRUZJCiAJYm9vbCAiRUZJLWJhc2VkIEZyYW1lYnVmZmVyIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBYODYKLQlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCi0Jc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQotCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCi0JaGVscAotCSAgVGhpcyBpcyB0aGUgRUZJIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyLiBJZiB0aGUgZmlybXdhcmUgb24KLQkgIHlvdXIgcGxhdGZvcm0gaXMgVUVGSTIuMCwgc2VsZWN0IFkgdG8gYWRkIHN1cHBvcnQgZm9yCi0JICBHcmFwaGljcyBPdXRwdXQgUHJvdG9jb2wgZm9yIGVhcmx5IGNvbnNvbGUgbWVzc2FnZXMgdG8gYXBwZWFyLgotCi1jb25maWcgRkJfSU1BQwotCWJvb2wgIkludGVsLWJhc2VkIE1hY2ludG9zaCBGcmFtZWJ1ZmZlciBTdXBwb3J0IgogCWRlcGVuZHMgb24gKEZCID0geSkgJiYgWDg2ICYmIEVGSQogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKIAloZWxwCi0JICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIEludGVsLWJhc2VkIE1hY2ludG9zaAorCSAgVGhpcyBpcyB0aGUgRUZJIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyLiBJZiB0aGUgZmlybXdhcmUgb24KKwkgIHlvdXIgcGxhdGZvcm0gaXMgRUZJIDEuMTAgb3IgVUVGSSAyLjAsIHNlbGVjdCBZIHRvIGFkZCBzdXBwb3J0IGZvcgorCSAgdXNpbmcgdGhlIEVGSSBmcmFtZWJ1ZmZlciBhcyB5b3VyIGNvbnNvbGUuCiAKIGNvbmZpZyBGQl9ONDExCiAgICAgICAgdHJpc3RhdGUgIk40MTEgQXBvbGxvL0hlY3ViYSBkZXZraXQgc3VwcG9ydCIKQEAgLTExMTgsNiArMTEyNiw3IEBACiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCXNlbGVjdCBGQl9CT09UX1ZFU0FfU1VQUE9SVAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBvbi1ib2FyZCBncmFwaGljcyBidWlsdCBpbiB0byB0aGUgSW50ZWwKICAgICAgICAgICA4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHLzkxNUdNLzk0NUcvOTQ1R00vOTY1Ry85NjVHTSBjaGlwc2V0cy4KQEAgLTE0NzAsNiArMTQ3OSw3IEBACiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCXNlbGVjdCBGQl9CT09UX1ZFU0FfU1VQUE9SVAogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciB0aGUgU2lTIDMwMCwgMzE1LCAzMzAKIAkgIGFuZCAzNDAgc2VyaWVzIGFzIHdlbGwgYXMgWEdJIFYzWFQsIFY1LCBWOCwgWjcgZ3JhcGhpY3MgY2hpcHNldHMuCkBAIC0xNDkyLDYgKzE1MDIsMjQgQEAKIAkgICgzMTUvSC9QUk8sIDU1eCwgNjUwLCA2NTEsIDc0MCwgMzMwLCA2NjEsIDc0MSwgNzYwLCA3NjEpIGFzIHdlbGwKIAkgIGFzIFhHSSBWM1hULCBWNSwgVjggYW5kIFo3LgogCitjb25maWcgRkJfVklBCisgICAgICAgdHJpc3RhdGUgIlZJQSBVbmlDaHJvbWUgKFBybykgYW5kIENocm9tZTkgZGlzcGxheSBzdXBwb3J0IgorICAgICAgIGRlcGVuZHMgb24gRkIgJiYgUENJCisgICAgICAgc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAorICAgICAgIHNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKyAgICAgICBzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorICAgICAgIHNlbGVjdCBGQl9TT0ZUX0NVUlNPUgorICAgICAgIHNlbGVjdCBJMkNfQUxHT0JJVAorICAgICAgIHNlbGVjdCBJMkMKKyAgICAgICBoZWxwCisJICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgR3JhcGhpY3MgY2hpcHMgb2YgVklBCisJICBVbmlDaHJvbWUgKFBybykgRmFtaWx5IChDTEUyNjYsUE04MDAvQ040MDAsUDRNODAwQ0UvUDRNODAwUHJvLworCSAgQ043MDAvVk44MDAsQ1g3MDAvVlg3MDAsUDRNODkwKSBhbmQgQ2hyb21lOSBGYW1pbHkgKEs4TTg5MCxDTjg5NgorIAkgIC9QNE05MDAsVlg4MDApCisJICBTYXkgWSBpZiB5b3UgaGF2ZSBhIFZJQSBVbmlDaHJvbWUgZ3JhcGhpY3MgYm9hcmQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZpYWZiLgogY29uZmlnIEZCX05FT01BR0lDCiAJdHJpc3RhdGUgIk5lb01hZ2ljIGRpc3BsYXkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFBDSQpAQCAtMTUyMSwyNSArMTU0OSwyNSBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGt5cm9mYi4KIAogY29uZmlnIEZCXzNERlgKLQl0cmlzdGF0ZSAiM0RmeCBCYW5zaGVlL1Zvb2RvbzMgZGlzcGxheSBzdXBwb3J0IgorCXRyaXN0YXRlICIzRGZ4IEJhbnNoZWUvVm9vZG9vMy9Wb29kb281IGRpc3BsYXkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFBDSQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAloZWxwCi0JICBUaGlzIGRyaXZlciBzdXBwb3J0cyBncmFwaGljcyBib2FyZHMgd2l0aCB0aGUgM0RmeCBCYW5zaGVlL1Zvb2RvbzMKLQkgIGNoaXBzLiBTYXkgWSBpZiB5b3UgaGF2ZSBzdWNoIGEgZ3JhcGhpY3MgYm9hcmQuCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBncmFwaGljcyBib2FyZHMgd2l0aCB0aGUgM0RmeCBCYW5zaGVlLAorCSAgVm9vZG9vMyBvciBWU0EtMTAwIChha2EgVm9vZG9vNC81KSBjaGlwcy4gU2F5IFkgaWYgeW91IGhhdmUKKwkgIHN1Y2ggYSBncmFwaGljcyBib2FyZC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGRmeGZiLgogCiBjb25maWcgRkJfM0RGWF9BQ0NFTAotCWJvb2wgIjNEZnggQmFuc2hlZS9Wb29kb28zIEFjY2VsZXJhdGlvbiBmdW5jdGlvbnMgKEVYUEVSSU1FTlRBTCkiCisJYm9vbCAiM0RmeCBBY2NlbGVyYXRpb24gZnVuY3Rpb25zIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRkJfM0RGWCAmJiBFWFBFUklNRU5UQUwKIAktLS1oZWxwLS0tCi0JVGhpcyB3aWxsIGNvbXBpbGUgdGhlIDNEZnggQmFuc2hlZS9Wb29kb28zIGZyYW1lIGJ1ZmZlciBkZXZpY2UKLQl3aXRoIGFjY2VsZXJhdGlvbiBmdW5jdGlvbnMuCi0KKwlUaGlzIHdpbGwgY29tcGlsZSB0aGUgM0RmeCBCYW5zaGVlL1Zvb2RvbzMvVlNBLTEwMCBmcmFtZSBidWZmZXIKKwlkZXZpY2UgZHJpdmVyIHdpdGggYWNjZWxlcmF0aW9uIGZ1bmN0aW9ucy4KIAogY29uZmlnIEZCX1ZPT0RPTzEKIAl0cmlzdGF0ZSAiM0RmeCBWb29kb28gR3JhcGhpY3MgKHNzdDEpIHN1cHBvcnQiCkBAIC0xNjA0LDE3ICsxNjMyLDE2IEBACiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCiAJLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gc3VwcG9ydCBncmFwaGljcyBib2FyZHMgd2l0aCB0aGUKLQkgIFRyaWRlbnQgQ3liZXJYWFhYL0ltYWdlL0N5YmVyQmxhZGUgY2hpcHMgbW9zdGx5IGZvdW5kIGluIGxhcHRvcHMKKwkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciBUcmlkZW50IFBDSS9BR1AgY2hpcHNldHMuCisJICBTdXBwb3J0ZWQgY2hpcHNldCBmYW1pbGllcyBhcmUgVEdVSSA5NDQwLzk2WFgsIDNESW1hZ2UsIEJsYWRlM0QKKwkgIGFuZCBCbGFkZSBYUC4KKwkgIFRoZXJlIGFyZSBhbHNvIGludGVncmF0ZWQgdmVyc2lvbnMgb2YgdGhlc2UgY2hpcHMgY2FsbGVkIEN5YmVyWFhYWCwKKwkgIEN5YmVySW1hZ2Ugb3IgQ3liZXJCbGFkZS4gVGhlc2UgY2hpcHMgYXJlIG1vc3RseSBmb3VuZCBpbiBsYXB0b3BzCiAJICBidXQgYWxzbyBvbiBzb21lIG1vdGhlcmJvYXJkcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vZmIvdHJpZGVudGZiLnR4dD4KIAotCSAgQ3liZXJibGFkZS9pMSBzdXBwb3J0IHdpbGwgYmUgcmVtb3ZlZCBzb29uLCB1c2UgdGhlIGN5YmxhZmIgZHJpdmVyCi0JICBpbnN0ZWFkLgotCiAJICBTYXkgWSBpZiB5b3UgaGF2ZSBzdWNoIGEgZ3JhcGhpY3MgYm9hcmQuCiAKLQogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdHJpZGVudGZiLgogCkBAIC0xODY5LDYgKzE4OTYsMjggQEAKIAktLS1oZWxwLS0tCiAJICBGcmFtZSBidWZmZXIgZHJpdmVyIGZvciB0aGUgb24tY2hpcCBTSC1Nb2JpbGUgTENEIGNvbnRyb2xsZXIuCiAKK2NvbmZpZyBGQl9UTUlPCisJdHJpc3RhdGUgIlRvc2hpYmEgTW9iaWxlIElPIEZyYW1lQnVmZmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQiAmJiBNRkRfQ09SRQorCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwktLS1oZWxwLS0tCisJICBGcmFtZSBidWZmZXIgZHJpdmVyIGZvciB0aGUgVG9zaGliYSBNb2JpbGUgSU8gaW50ZWdyYXRlZCBhcyBmb3VuZAorCSAgb24gdGhlIFNoYXJwIFNMLTYwMDAgc2VyaWVzCisKKwkgIFRoaXMgZHJpdmVyIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoIGNhbiBiZQorCSAgaW5zZXJ0ZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91IHdhbnQpLiBUaGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0bWlvZmIuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsCisJICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEZCX1RNSU9fQUNDRUxMCisJYm9vbCAidG1pb2ZiIGFjY2VsZXJhdGlvbiIKKwlkZXBlbmRzIG9uIEZCX1RNSU8KKwlkZWZhdWx0IHkKKwogY29uZmlnIEZCX1MzQzI0MTAKIAl0cmlzdGF0ZSAiUzNDMjQxMCBMQ0QgZnJhbWVidWZmZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIEFSQ0hfUzNDMjQxMApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKaW5kZXggYWQwMzMwYi4uMjQ4YmRkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCkBAIC00Miw2ICs0Miw3IEBACiBvYmotJChDT05GSUdfRkJfQVRZMTI4KQkJICArPSBhdHkvIG1hY21vZGVzLm8KIG9iai0kKENPTkZJR19GQl9SQURFT04pCQkgICs9IGF0eS8KIG9iai0kKENPTkZJR19GQl9TSVMpCQkgICs9IHNpcy8KK29iai0kKENPTkZJR19GQl9WSUEpCQkgICs9IHZpYS8KIG9iai0kKENPTkZJR19GQl9LWVJPKSAgICAgICAgICAgICArPSBreXJvLwogb2JqLSQoQ09ORklHX0ZCX1NBVkFHRSkJCSAgKz0gc2F2YWdlLwogb2JqLSQoQ09ORklHX0ZCX0dFT0RFKQkJICArPSBnZW9kZS8KQEAgLTk3LDYgKzk4LDcgQEAKIG9iai0kKENPTkZJR19GQl9BU0lMSUFOVCkJICArPSBhc2lsaWFudGZiLm8KIG9iai0kKENPTkZJR19GQl9QWEEpCQkgICs9IHB4YWZiLm8KIG9iai0kKENPTkZJR19GQl9XMTAwKQkJICArPSB3MTAwZmIubworb2JqLSQoQ09ORklHX0ZCX1RNSU8pCQkgICs9IHRtaW9mYi5vCiBvYmotJChDT05GSUdfRkJfQVUxMTAwKQkJICArPSBhdTExMDBmYi5vCiBvYmotJChDT05GSUdfRkJfQVUxMjAwKQkJICArPSBhdTEyMDBmYi5vCiBvYmotJChDT05GSUdfRkJfUE1BR19BQSkJICArPSBwbWFnLWFhLWZiLm8KQEAgLTEyNCw3ICsxMjYsNiBAQAogIyBQbGF0Zm9ybSBvciBmYWxsYmFjayBkcml2ZXJzIGdvIGhlcmUKIG9iai0kKENPTkZJR19GQl9VVkVTQSkgICAgICAgICAgICArPSB1dmVzYWZiLm8KIG9iai0kKENPTkZJR19GQl9WRVNBKSAgICAgICAgICAgICArPSB2ZXNhZmIubwotb2JqLSQoQ09ORklHX0ZCX0lNQUMpICAgICAgICAgICAgICs9IGltYWNmYi5vCiBvYmotJChDT05GSUdfRkJfRUZJKSAgICAgICAgICAgICAgKz0gZWZpZmIubwogb2JqLSQoQ09ORklHX0ZCX1ZHQTE2KSAgICAgICAgICAgICs9IHZnYTE2ZmIubwogb2JqLSQoQ09ORklHX0ZCX09GKSAgICAgICAgICAgICAgICs9IG9mZmIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jIGIvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCmluZGV4IGQzOGZkNTIuLmY4ZDBhNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKQEAgLTM3Miw2ICszNzIsMTMgQEAKIAl2YXItPnRyYW5zcC5vZmZzZXQgPSB2YXItPnRyYW5zcC5sZW5ndGggPSAwOwogCXZhci0+eG9mZnNldCA9IHZhci0+eW9mZnNldCA9IDA7CiAKKwlpZiAoaW5mby0+Zml4LnNtZW1fbGVuKSB7CisJCXVuc2lnbmVkIGludCBzbWVtX2xlbiA9ICh2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+eXJlc192aXJ0dWFsCisJCQkJCSAqICgodmFyLT5iaXRzX3Blcl9waXhlbCArIDcpIC8gOCkpOworCQlpZiAoc21lbV9sZW4gPiBpbmZvLT5maXguc21lbV9sZW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAkvKiBTYXR1cmF0ZSB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCB0aW1pbmdzIGF0IG1heGltdW0gdmFsdWVzICovCiAJdmFyLT52c3luY19sZW4gPSBtaW5fdCh1MzIsIHZhci0+dnN5bmNfbGVuLAogCQkJKEFUTUVMX0xDRENfVlBXID4+IEFUTUVMX0xDRENfVlBXX09GRlNFVCkgKyAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9hY2NlbC5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2FjY2VsLmMKaW5kZXggYWE5NWY4My4uODcxOGY3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2FjY2VsLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2FjY2VsLmMKQEAgLTUsNjEgKzUsNjEgQEAKICAqIC0tZHRlCiAgKi8KIAotc3RhdGljIHZvaWQgcmFkZW9uX2ZpeHVwX29mZnNldChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCisjZGVmaW5lIEZMVVNIX0NBQ0hFX1dPUktBUk9VTkQJMQorCit2b2lkIHJhZGVvbl9maWZvX3VwZGF0ZV9hbmRfd2FpdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIGludCBlbnRyaWVzKQogewotCXUzMiBsb2NhbF9iYXNlOworCWludCBpOwogCi0JLyogKioqIFVnbHkgd29ya2Fyb3VuZCAqKiogKi8KLQkvKgotCSAqIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgdmlkZW8gbWVtb3J5IGlzIG1hcHBlZCBhdCAwIGluIHJhZGVvbiBjaGlwIHNwYWNlCi0JICogKGxpa2UgUFBDcykgYnkgdGhlIGZpcm13YXJlLiBYIHdpbGwgYWx3YXlzIG1vdmUgaXQgdXAgc28gdGhhdCBpdCdzIHNlZW4KLQkgKiBieSB0aGUgY2hpcCB0byBiZSBhdCB0aGUgc2FtZSBhZGRyZXNzIGFzIHRoZSBQQ0kgQkFSLgotCSAqIFRoYXQgbWVhbnMgdGhhdCB3aGVuIHN3aXRjaGluZyBiYWNrIGZyb20gWCwgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuCi0JICogdGhlIG9mZnNldHMgcHJvZ3JhbW1lZCBpbnRvIHRoZSBlbmdpbmUuIFRoaXMgbWVhbnMgdGhhdCBwb3RlbnRpYWxseSwKLQkgKiBhY2NlbCBvcGVyYXRpb25zIGRvbmUgYmVmb3JlIHJhZGVvbmZiIGhhcyBhIGNoYW5jZSB0byByZS1pbml0IHRoZSBlbmdpbmUKLQkgKiB3aWxsIGhhdmUgaW5jb3JyZWN0IG9mZnNldHMsIGFuZCBwb3RlbnRpYWxseSB0cmFzaCBzeXN0ZW0gbWVtb3J5ICEKLQkgKgotCSAqIFRoZSBjb3JyZWN0IGZpeCBpcyBmb3IgZmJjb24gdG8gbmV2ZXIgY2FsbCBhbnkgYWNjZWwgb3AgYmVmb3JlIHRoZSBlbmdpbmUKLQkgKiBoYXMgcHJvcGVybHkgYmVlbiByZS1pbml0aWFsaXplZCAoYnkgYSBjYWxsIHRvIHNldF92YXIpLCBidXQgdGhpcyBpcyBhCi0JICogY29tcGxleCBmaXguIFRoaXMgd29ya2Fyb3VuZCBpbiB0aGUgbWVhbnRpbWUsIGNhbGxlZCBiZWZvcmUgZXZlcnkgYWNjZWwKLQkgKiBvcGVyYXRpb24sIG1ha2VzIHN1cmUgdGhlIG9mZnNldHMgYXJlIGluIHN5bmMuCi0JICovCisJZm9yIChpPTA7IGk8MjAwMDAwMDsgaSsrKSB7CisJCXJpbmZvLT5maWZvX2ZyZWUgPSBJTlJFRyhSQkJNX1NUQVRVUykgJiAweDdmOworCQlpZiAocmluZm8tPmZpZm9fZnJlZSA+PSBlbnRyaWVzKQorCQkJcmV0dXJuOworCQl1ZGVsYXkoMTApOworCX0KKwlwcmludGsoS0VSTl9FUlIgInJhZGVvbmZiOiBGSUZPIFRpbWVvdXQgIVxuIik7CisJLyogWFhYIFRvZG86IGF0dGVtcHQgdG8gcmVzZXQgdGhlIGVuZ2luZSAqLworfQogCi0JcmFkZW9uX2ZpZm9fd2FpdCAoMSk7Ci0JbG9jYWxfYmFzZSA9IElOUkVHKE1DX0ZCX0xPQ0FUSU9OKSA8PCAxNjsKLQlpZiAobG9jYWxfYmFzZSA9PSByaW5mby0+ZmJfbG9jYWxfYmFzZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCByYWRlb25fZmlmb193YWl0KHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgaW50IGVudHJpZXMpCit7CisJaWYgKGVudHJpZXMgPD0gcmluZm8tPmZpZm9fZnJlZSkKKwkJcmluZm8tPmZpZm9fZnJlZSAtPSBlbnRyaWVzOworCWVsc2UKKwkJcmFkZW9uX2ZpZm9fdXBkYXRlX2FuZF93YWl0KHJpbmZvLCBlbnRyaWVzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJhZGVvbmZiX3NldF9jcmVnKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgdTMyIHJlZywKKwkJCQkgICAgIHUzMiAqY2FjaGUsIHUzMiBuZXdfdmFsKQoreworCWlmIChuZXdfdmFsID09ICpjYWNoZSkKIAkJcmV0dXJuOwotCi0JcmluZm8tPmZiX2xvY2FsX2Jhc2UgPSBsb2NhbF9iYXNlOwotCi0JcmFkZW9uX2ZpZm9fd2FpdCAoMyk7Ci0JT1VUUkVHKERFRkFVTFRfUElUQ0hfT0ZGU0VULCAocmluZm8tPnBpdGNoIDw8IDB4MTYpIHwKLQkJCQkgICAgIChyaW5mby0+ZmJfbG9jYWxfYmFzZSA+PiAxMCkpOwotCU9VVFJFRyhEU1RfUElUQ0hfT0ZGU0VULCAocmluZm8tPnBpdGNoIDw8IDB4MTYpIHwgKHJpbmZvLT5mYl9sb2NhbF9iYXNlID4+IDEwKSk7Ci0JT1VUUkVHKFNSQ19QSVRDSF9PRkZTRVQsIChyaW5mby0+cGl0Y2ggPDwgMHgxNikgfCAocmluZm8tPmZiX2xvY2FsX2Jhc2UgPj4gMTApKTsKKwkqY2FjaGUgPSBuZXdfdmFsOworCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDEpOworCU9VVFJFRyhyZWcsIG5ld192YWwpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25mYl9wcmltX2ZpbGxyZWN0KHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgCiAJCQkJICAgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWdpb24pCiB7Ci0JcmFkZW9uX2ZpZm9fd2FpdCg0KTsgIAotICAKLQlPVVRSRUcoRFBfR1VJX01BU1RFUl9DTlRMLCAgCi0JCXJpbmZvLT5kcF9ndWlfbWFzdGVyX2NudGwgIC8qIGNvbnRhaW5zLCBsaWtlIEdNQ19EU1RfMzJCUFAgKi8KLSAgICAgICAgICAgICAgICB8IEdNQ19CUlVTSF9TT0xJRF9DT0xPUgotICAgICAgICAgICAgICAgIHwgUk9QM19QKTsKLQlpZiAocmFkZW9uX2dldF9kc3RicHAocmluZm8tPmRlcHRoKSAhPSBEU1RfOEJQUCkKLQkJT1VUUkVHKERQX0JSVVNIX0ZSR0RfQ0xSLCByaW5mby0+cHNldWRvX3BhbGV0dGVbcmVnaW9uLT5jb2xvcl0pOwotCWVsc2UKLQkJT1VUUkVHKERQX0JSVVNIX0ZSR0RfQ0xSLCByZWdpb24tPmNvbG9yKTsKLQlPVVRSRUcoRFBfV1JJVEVfTVNLLCAweGZmZmZmZmZmKTsKLQlPVVRSRUcoRFBfQ05UTCwgKERTVF9YX0xFRlRfVE9fUklHSFQgfCBEU1RfWV9UT1BfVE9fQk9UVE9NKSk7CisJcmFkZW9uZmJfc2V0X2NyZWcocmluZm8sIERQX0dVSV9NQVNURVJfQ05UTCwgJnJpbmZvLT5kcF9ndWlfbWNfY2FjaGUsCisJCQkgIHJpbmZvLT5kcF9ndWlfbWNfYmFzZSB8IEdNQ19CUlVTSF9TT0xJRF9DT0xPUiB8IFJPUDNfUCk7CisJcmFkZW9uZmJfc2V0X2NyZWcocmluZm8sIERQX0NOVEwsICZyaW5mby0+ZHBfY250bF9jYWNoZSwKKwkJCSAgRFNUX1hfTEVGVF9UT19SSUdIVCB8IERTVF9ZX1RPUF9UT19CT1RUT00pOworCXJhZGVvbmZiX3NldF9jcmVnKHJpbmZvLCBEUF9CUlVTSF9GUkdEX0NMUiwgJnJpbmZvLT5kcF9icnVzaF9mZ19jYWNoZSwKKwkJCSAgcmVnaW9uLT5jb2xvcik7CiAKLQlyYWRlb25fZmlmb193YWl0KDIpOworCS8qIEVuc3VyZSB0aGUgZHN0IGNhY2hlIGlzIGZsdXNoZWQgYW5kIHRoZSBlbmdpbmUgaWRsZSBiZWZvcmUKKwkgKiBpc3N1aW5nIHRoZSBvcGVyYXRpb24uCisJICoKKwkgKiBUaGlzIHdvcmtzIGFyb3VuZCBlbmdpbmUgbG9ja3VwcyBvbiBzb21lIGNhcmRzCisJICovCisjaWYgRkxVU0hfQ0FDSEVfV09SS0FST1VORAorCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDIpOwogCU9VVFJFRyhEU1RDQUNIRV9DVExTVEFULCBSQjJEX0RDX0ZMVVNIX0FMTCk7CiAJT1VUUkVHKFdBSVRfVU5USUwsIChXQUlUXzJEX0lETEVDTEVBTiB8IFdBSVRfRE1BX0dVSV9JRExFKSk7Ci0KLQlyYWRlb25fZmlmb193YWl0KDIpOyAgCisjZW5kaWYKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAyKTsKIAlPVVRSRUcoRFNUX1lfWCwgKHJlZ2lvbi0+ZHkgPDwgMTYpIHwgcmVnaW9uLT5keCk7CiAJT1VUUkVHKERTVF9XSURUSF9IRUlHSFQsIChyZWdpb24tPndpZHRoIDw8IDE2KSB8IHJlZ2lvbi0+aGVpZ2h0KTsKIH0KQEAgLTcwLDE1ICs3MCwxNCBAQAogCXN0cnVjdCBmYl9maWxscmVjdCBtb2RkZWQ7CiAJaW50IHZ4cmVzLCB2eXJlczsKICAgCi0JaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCVdBUk5fT04ocmluZm8tPmdmeF9tb2RlKTsKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcgfHwgcmluZm8tPmdmeF9tb2RlKQogCQlyZXR1cm47CiAJaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpIHsKIAkJY2ZiX2ZpbGxyZWN0KGluZm8sIHJlZ2lvbik7CiAJCXJldHVybjsKIAl9CiAKLQlyYWRlb25fZml4dXBfb2Zmc2V0KHJpbmZvKTsKLQogCXZ4cmVzID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbDsKIAl2eXJlcyA9IGluZm8tPnZhci55cmVzX3ZpcnR1YWw7CiAKQEAgLTkxLDYgKzkwLDEwIEBACiAJaWYobW9kZGVkLmR4ICsgbW9kZGVkLndpZHRoICA+IHZ4cmVzKSBtb2RkZWQud2lkdGggID0gdnhyZXMgLSBtb2RkZWQuZHg7CiAJaWYobW9kZGVkLmR5ICsgbW9kZGVkLmhlaWdodCA+IHZ5cmVzKSBtb2RkZWQuaGVpZ2h0ID0gdnlyZXMgLSBtb2RkZWQuZHk7CiAKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNPTE9SIHx8CisJICAgIGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX0RJUkVDVENPTE9SICkKKwkJbW9kZGVkLmNvbG9yID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnaW9uLT5jb2xvcl07CisKIAlyYWRlb25mYl9wcmltX2ZpbGxyZWN0KHJpbmZvLCAmbW9kZGVkKTsKIH0KIApAQCAtMTA5LDIyICsxMTIsMjIgQEAKIAlpZiAoIHhkaXIgPCAwICkgeyBzeCArPSB3LTE7IGR4ICs9IHctMTsgfQogCWlmICggeWRpciA8IDAgKSB7IHN5ICs9IGgtMTsgZHkgKz0gaC0xOyB9CiAKLQlyYWRlb25fZmlmb193YWl0KDMpOwotCU9VVFJFRyhEUF9HVUlfTUFTVEVSX0NOVEwsCi0JCXJpbmZvLT5kcF9ndWlfbWFzdGVyX2NudGwgLyogaS5lLiBHTUNfRFNUXzMyQlBQICovCi0JCXwgR01DX0JSVVNIX05PTkUKLQkJfCBHTUNfU1JDX0RTVENPTE9SCi0JCXwgUk9QM19TIAotCQl8IERQX1NSQ19TT1VSQ0VfTUVNT1JZICk7Ci0JT1VUUkVHKERQX1dSSVRFX01TSywgMHhmZmZmZmZmZik7Ci0JT1VUUkVHKERQX0NOVEwsICh4ZGlyPj0wID8gRFNUX1hfTEVGVF9UT19SSUdIVCA6IDApCi0JCQl8ICh5ZGlyPj0wID8gRFNUX1lfVE9QX1RPX0JPVFRPTSA6IDApKTsKKwlyYWRlb25mYl9zZXRfY3JlZyhyaW5mbywgRFBfR1VJX01BU1RFUl9DTlRMLCAmcmluZm8tPmRwX2d1aV9tY19jYWNoZSwKKwkJCSAgcmluZm8tPmRwX2d1aV9tY19iYXNlIHwKKwkJCSAgR01DX0JSVVNIX05PTkUgfAorCQkJICBHTUNfU1JDX0RBVEFUWVBFX0NPTE9SIHwKKwkJCSAgUk9QM19TIHwKKwkJCSAgRFBfU1JDX1NPVVJDRV9NRU1PUlkpOworCXJhZGVvbmZiX3NldF9jcmVnKHJpbmZvLCBEUF9DTlRMLCAmcmluZm8tPmRwX2NudGxfY2FjaGUsCisJCQkgICh4ZGlyPj0wID8gRFNUX1hfTEVGVF9UT19SSUdIVCA6IDApIHwKKwkJCSAgKHlkaXI+PTAgPyBEU1RfWV9UT1BfVE9fQk9UVE9NIDogMCkpOwogCi0JcmFkZW9uX2ZpZm9fd2FpdCgyKTsKKyNpZiBGTFVTSF9DQUNIRV9XT1JLQVJPVU5ECisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMik7CiAJT1VUUkVHKERTVENBQ0hFX0NUTFNUQVQsIFJCMkRfRENfRkxVU0hfQUxMKTsKIAlPVVRSRUcoV0FJVF9VTlRJTCwgKFdBSVRfMkRfSURMRUNMRUFOIHwgV0FJVF9ETUFfR1VJX0lETEUpKTsKLQotCXJhZGVvbl9maWZvX3dhaXQoMyk7CisjZW5kaWYKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAzKTsKIAlPVVRSRUcoU1JDX1lfWCwgKHN5IDw8IDE2KSB8IHN4KTsKIAlPVVRSRUcoRFNUX1lfWCwgKGR5IDw8IDE2KSB8IGR4KTsKIAlPVVRSRUcoRFNUX0hFSUdIVF9XSURUSCwgKGggPDwgMTYpIHwgdyk7CkBAIC0xNDMsMTUgKzE0NiwxNCBAQAogCW1vZGRlZC53aWR0aCAgPSBhcmVhLT53aWR0aDsKIAltb2RkZWQuaGVpZ2h0ID0gYXJlYS0+aGVpZ2h0OwogICAKLQlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJV0FSTl9PTihyaW5mby0+Z2Z4X21vZGUpOworCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORyB8fCByaW5mby0+Z2Z4X21vZGUpCiAJCXJldHVybjsKIAlpZiAoaW5mby0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgewogCQljZmJfY29weWFyZWEoaW5mbywgYXJlYSk7CiAJCXJldHVybjsKIAl9CiAKLQlyYWRlb25fZml4dXBfb2Zmc2V0KHJpbmZvKTsKLQogCXZ4cmVzID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbDsKIAl2eXJlcyA9IGluZm8tPnZhci55cmVzX3ZpcnR1YWw7CiAKQEAgLTE2OCwxMyArMTcwLDExMiBAQAogCXJhZGVvbmZiX3ByaW1fY29weWFyZWEocmluZm8sICZtb2RkZWQpOwogfQogCitzdGF0aWMgdm9pZCByYWRlb25mYl9wcmltX2ltYWdlYmxpdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sCisJCQkJICAgIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UsCisJCQkJICAgIHUzMiBmZywgdTMyIGJnKQoreworCXVuc2lnbmVkIGludCBzcmNfYnl0ZXMsIGR3b3JkczsKKwl1MzIgKmJpdHM7CisKKwlyYWRlb25mYl9zZXRfY3JlZyhyaW5mbywgRFBfR1VJX01BU1RFUl9DTlRMLCAmcmluZm8tPmRwX2d1aV9tY19jYWNoZSwKKwkJCSAgcmluZm8tPmRwX2d1aV9tY19iYXNlIHwKKwkJCSAgR01DX0JSVVNIX05PTkUgfAorCQkJICBHTUNfU1JDX0RBVEFUWVBFX01PTk9fRkdfQkcgfAorCQkJICBST1AzX1MgfAorCQkJICBHTUNfQllURV9PUkRFUl9NU0JfVE9fTFNCIHwKKwkJCSAgRFBfU1JDX1NPVVJDRV9IT1NUX0RBVEEpOworCXJhZGVvbmZiX3NldF9jcmVnKHJpbmZvLCBEUF9DTlRMLCAmcmluZm8tPmRwX2NudGxfY2FjaGUsCisJCQkgIERTVF9YX0xFRlRfVE9fUklHSFQgfCBEU1RfWV9UT1BfVE9fQk9UVE9NKTsKKwlyYWRlb25mYl9zZXRfY3JlZyhyaW5mbywgRFBfU1JDX0ZSR0RfQ0xSLCAmcmluZm8tPmRwX3NyY19mZ19jYWNoZSwgZmcpOworCXJhZGVvbmZiX3NldF9jcmVnKHJpbmZvLCBEUF9TUkNfQktHRF9DTFIsICZyaW5mby0+ZHBfc3JjX2JnX2NhY2hlLCBiZyk7CisKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAxKTsKKwlPVVRSRUcoRFNUX1lfWCwgKGltYWdlLT5keSA8PCAxNikgfCBpbWFnZS0+ZHgpOworCisJLyogRW5zdXJlIHRoZSBkc3QgY2FjaGUgaXMgZmx1c2hlZCBhbmQgdGhlIGVuZ2luZSBpZGxlIGJlZm9yZQorCSAqIGlzc3VpbmcgdGhlIG9wZXJhdGlvbi4KKwkgKgorCSAqIFRoaXMgd29ya3MgYXJvdW5kIGVuZ2luZSBsb2NrdXBzIG9uIHNvbWUgY2FyZHMKKwkgKi8KKyNpZiBGTFVTSF9DQUNIRV9XT1JLQVJPVU5ECisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMik7CisJT1VUUkVHKERTVENBQ0hFX0NUTFNUQVQsIFJCMkRfRENfRkxVU0hfQUxMKTsKKwlPVVRSRUcoV0FJVF9VTlRJTCwgKFdBSVRfMkRfSURMRUNMRUFOIHwgV0FJVF9ETUFfR1VJX0lETEUpKTsKKyNlbmRpZgorCisJLyogWCBoZXJlIHBhZHMgd2lkdGggdG8gYSBtdWx0aXBsZSBvZiAzMiBhbmQgdXNlcyB0aGUgY2xpcHBlciB0bworCSAqIGFkanVzdCB0aGUgcmVzdWx0LiBJcyB0aGF0IHJlYWxseSBuZWNlc3NhcnkgPyBUaGluZ3Mgc2VlbSB0bworCSAqIHdvcmsgb2sgZm9yIG1lIHdpdGhvdXQgdGhhdCBhbmQgdGhlIGRvY28gZG9lc24ndCBzZWVtIHRvIGltcGx5CisJICogdGhlcmUgaXMgc3VjaCBhIHJlc3RyaWN0aW9uLgorCSAqLworCU9VVFJFRyhEU1RfV0lEVEhfSEVJR0hULCAoaW1hZ2UtPndpZHRoIDw8IDE2KSB8IGltYWdlLT5oZWlnaHQpOworCisJc3JjX2J5dGVzID0gKCgoaW1hZ2UtPndpZHRoICogaW1hZ2UtPmRlcHRoKSArIDcpIC8gOCkgKiBpbWFnZS0+aGVpZ2h0OworCWR3b3JkcyA9IChzcmNfYnl0ZXMgKyAzKSAvIDQ7CisJYml0cyA9ICh1MzIqKShpbWFnZS0+ZGF0YSk7CisKKwl3aGlsZShkd29yZHMgPj0gOCkgeworCQlyYWRlb25fZmlmb193YWl0KHJpbmZvLCA4KTsKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJCV9fcmF3X3dyaXRlcSgqKCh1NjQgKikoYml0cykpLCByaW5mby0+bW1pb19iYXNlICsgSE9TVF9EQVRBMCk7CisJCV9fcmF3X3dyaXRlcSgqKCh1NjQgKikoYml0cysyKSksIHJpbmZvLT5tbWlvX2Jhc2UgKyBIT1NUX0RBVEEyKTsKKwkJX19yYXdfd3JpdGVxKCooKHU2NCAqKShiaXRzKzQpKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTQpOworCQlfX3Jhd193cml0ZXEoKigodTY0ICopKGJpdHMrNikpLCByaW5mby0+bW1pb19iYXNlICsgSE9TVF9EQVRBNik7CisJCWJpdHMgKz0gODsKKyNlbHNlCisJCV9fcmF3X3dyaXRlbCgqKGJpdHMrKyksIHJpbmZvLT5tbWlvX2Jhc2UgKyBIT1NUX0RBVEEwKTsKKwkJX19yYXdfd3JpdGVsKCooYml0cysrKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTEpOworCQlfX3Jhd193cml0ZWwoKihiaXRzKyspLCByaW5mby0+bW1pb19iYXNlICsgSE9TVF9EQVRBMik7CisJCV9fcmF3X3dyaXRlbCgqKGJpdHMrKyksIHJpbmZvLT5tbWlvX2Jhc2UgKyBIT1NUX0RBVEEzKTsKKwkJX19yYXdfd3JpdGVsKCooYml0cysrKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTQpOworCQlfX3Jhd193cml0ZWwoKihiaXRzKyspLCByaW5mby0+bW1pb19iYXNlICsgSE9TVF9EQVRBNSk7CisJCV9fcmF3X3dyaXRlbCgqKGJpdHMrKyksIHJpbmZvLT5tbWlvX2Jhc2UgKyBIT1NUX0RBVEE2KTsKKwkJX19yYXdfd3JpdGVsKCooYml0cysrKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTcpOworI2VuZGlmCisJCWR3b3JkcyAtPSA4OworCX0KKwl3aGlsZShkd29yZHMtLSkgeworCQlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAxKTsKKwkJX19yYXdfd3JpdGVsKCooYml0cysrKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTApOworCX0KK30KKwogdm9pZCByYWRlb25mYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCiB7CiAJc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvID0gaW5mby0+cGFyOworCXUzMiBmZywgYmc7CiAKLQlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJV0FSTl9PTihyaW5mby0+Z2Z4X21vZGUpOworCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORyB8fCByaW5mby0+Z2Z4X21vZGUpCiAJCXJldHVybjsKLQlyYWRlb25fZW5naW5lX2lkbGUoKTsKKworCWlmICghaW1hZ2UtPndpZHRoIHx8ICFpbWFnZS0+aGVpZ2h0KQorCQlyZXR1cm47CisKKwkvKiBXZSBvbmx5IGRvIDEgYnBwIGNvbG9yIGV4cGFuc2lvbiBmb3Igbm93ICovCisJaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQgfHwgaW1hZ2UtPmRlcHRoICE9IDEpCisJCWdvdG8gZmFsbGJhY2s7CisKKwkvKiBGYWxsYmFjayBpZiBydW5uaW5nIG91dCBvZiB0aGUgc2NyZWVuLiBXZSBtYXkgZG8gY2xpcHBpbmcKKwkgKiBpbiB0aGUgZnV0dXJlICovCisJaWYgKChpbWFnZS0+ZHggKyBpbWFnZS0+d2lkdGgpID4gaW5mby0+dmFyLnhyZXNfdmlydHVhbCB8fAorCSAgICAoaW1hZ2UtPmR5ICsgaW1hZ2UtPmhlaWdodCkgPiBpbmZvLT52YXIueXJlc192aXJ0dWFsKQorCQlnb3RvIGZhbGxiYWNrOworCisJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUiB8fAorCSAgICBpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUikgeworCQlmZyA9ICgodTMyKikoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+ZmdfY29sb3JdOworCQliZyA9ICgodTMyKikoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+YmdfY29sb3JdOworCX0gZWxzZSB7CisJCWZnID0gaW1hZ2UtPmZnX2NvbG9yOworCQliZyA9IGltYWdlLT5iZ19jb2xvcjsKKwl9CisKKwlyYWRlb25mYl9wcmltX2ltYWdlYmxpdChyaW5mbywgaW1hZ2UsIGZnLCBiZyk7CisJcmV0dXJuOworCisgZmFsbGJhY2s6CisJcmFkZW9uX2VuZ2luZV9pZGxlKHJpbmZvKTsKIAogCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwogfQpAQCAtMTg1LDcgKzI4Niw4IEBACiAKIAlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCiAJCXJldHVybiAwOwotCXJhZGVvbl9lbmdpbmVfaWRsZSgpOworCisJcmFkZW9uX2VuZ2luZV9pZGxlKHJpbmZvKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjExLDkgKzMxMyw3IEBACiAJaG9zdF9wYXRoX2NudGwgPSBJTlJFRyhIT1NUX1BBVEhfQ05UTCk7CiAJcmJibV9zb2Z0X3Jlc2V0ID0gSU5SRUcoUkJCTV9TT0ZUX1JFU0VUKTsKIAotCWlmIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1IzMDAgfHwKLQkgICAgcmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SMzUwIHx8Ci0JICAgIHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUlYzNTApIHsKKwlpZiAoSVNfUjMwMF9WQVJJQU5UKHJpbmZvKSkgewogCQl1MzIgdG1wOwogCiAJCU9VVFJFRyhSQkJNX1NPRlRfUkVTRVQsIChyYmJtX3NvZnRfcmVzZXQgfApAQCAtMjQ5LDkgKzM0OSw3IEBACiAJSU5SRUcoSE9TVF9QQVRIX0NOVEwpOwogCU9VVFJFRyhIT1NUX1BBVEhfQ05UTCwgaG9zdF9wYXRoX2NudGwpOwogCi0JaWYgKHJpbmZvLT5mYW1pbHkgIT0gQ0hJUF9GQU1JTFlfUjMwMCAmJgotCSAgICByaW5mby0+ZmFtaWx5ICE9IENISVBfRkFNSUxZX1IzNTAgJiYKLQkgICAgcmluZm8tPmZhbWlseSAhPSBDSElQX0ZBTUlMWV9SVjM1MCkKKwlpZiAoIUlTX1IzMDBfVkFSSUFOVChyaW5mbykpCiAJCU9VVFJFRyhSQkJNX1NPRlRfUkVTRVQsIHJiYm1fc29mdF9yZXNldCk7CiAKIAlPVVRSRUcoQ0xPQ0tfQ05UTF9JTkRFWCwgY2xvY2tfY250bF9pbmRleCk7CkBAIC0yNjUsMTUgKzM2MywyNCBAQAogCS8qIGRpc2FibGUgM0QgZW5naW5lICovCiAJT1VUUkVHKFJCM0RfQ05UTCwgMCk7CiAKKwlyaW5mby0+Zmlmb19mcmVlID0gMDsKIAlyYWRlb25mYl9lbmdpbmVfcmVzZXQocmluZm8pOwogCi0JcmFkZW9uX2ZpZm9fd2FpdCAoMSk7Ci0JaWYgKChyaW5mby0+ZmFtaWx5ICE9IENISVBfRkFNSUxZX1IzMDApICYmCi0JICAgIChyaW5mby0+ZmFtaWx5ICE9IENISVBfRkFNSUxZX1IzNTApICYmCi0JICAgIChyaW5mby0+ZmFtaWx5ICE9IENISVBfRkFNSUxZX1JWMzUwKSkKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAxKTsKKwlpZiAoSVNfUjMwMF9WQVJJQU5UKHJpbmZvKSkgeworCQlPVVRSRUcoUkIyRF9EU1RDQUNIRV9NT0RFLCBJTlJFRyhSQjJEX0RTVENBQ0hFX01PREUpIHwKKwkJICAgICAgIFJCMkRfRENfQVVUT0ZMVVNIX0VOQUJMRSB8CisJCSAgICAgICBSQjJEX0RDX0RDX0RJU0FCTEVfSUdOT1JFX1BFKTsKKwl9IGVsc2UgeworCQkvKiBUaGlzIG5lZWRzIHRvIGJlIGRvdWJsZSBjaGVja2VkIHdpdGggQVRJLiBMYXRlc3QgWCBkcml2ZXIKKwkJICogY29tcGxldGVseSAiZm9yZ2V0cyIgdG8gc2V0IHRoaXMgcmVnaXN0ZXIgb24gPCByM3h4LCBhbmQKKwkJICogd2UgdXNlZCB0byBqdXN0IHdyaXRlIDAgdGhlcmUuLi4gSSdsbCBrZWVwIHRoZSAwIGFuZCB1cGRhdGUKKwkJICogdGhhdCB3aGVuIHdlIGhhdmUgc29ydGVkIHRoaW5ncyBvdXQgb24gWCBzaWRlLgorCQkgKi8KIAkJT1VUUkVHKFJCMkRfRFNUQ0FDSEVfTU9ERSwgMCk7CisJfQogCi0JcmFkZW9uX2ZpZm9fd2FpdCAoMyk7CisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMyk7CiAJLyogV2UgcmUtcmVhZCBNQ19GQl9MT0NBVElPTiBmcm9tIGNhcmQgYXMgaXQgY2FuIGhhdmUgYmVlbgogCSAqIG1vZGlmaWVkIGJ5IFhGcmVlIGRyaXZlcnMgKG91Y2ggISkKIAkgKi8KQEAgLTI4NCw0MSArMzkxLDU3IEBACiAJT1VUUkVHKERTVF9QSVRDSF9PRkZTRVQsIChyaW5mby0+cGl0Y2ggPDwgMHgxNikgfCAocmluZm8tPmZiX2xvY2FsX2Jhc2UgPj4gMTApKTsKIAlPVVRSRUcoU1JDX1BJVENIX09GRlNFVCwgKHJpbmZvLT5waXRjaCA8PCAweDE2KSB8IChyaW5mby0+ZmJfbG9jYWxfYmFzZSA+PiAxMCkpOwogCi0JcmFkZW9uX2ZpZm9fd2FpdCAoMSk7Ci0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCiAJT1VUUkVHUChEUF9EQVRBVFlQRSwgSE9TVF9CSUdfRU5ESUFOX0VOLCB+SE9TVF9CSUdfRU5ESUFOX0VOKTsKICNlbHNlCiAJT1VUUkVHUChEUF9EQVRBVFlQRSwgMCwgfkhPU1RfQklHX0VORElBTl9FTik7CiAjZW5kaWYKLQlyYWRlb25fZmlmb193YWl0ICgyKTsKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAyKTsKIAlPVVRSRUcoREVGQVVMVF9TQ19UT1BfTEVGVCwgMCk7CiAJT1VUUkVHKERFRkFVTFRfU0NfQk9UVE9NX1JJR0hULCAoREVGQVVMVF9TQ19SSUdIVF9NQVggfAogCQkJCQkgREVGQVVMVF9TQ19CT1RUT01fTUFYKSk7CiAKKwkvKiBzZXQgZGVmYXVsdCBEUF9HVUlfTUFTVEVSX0NOVEwgKi8KIAl0ZW1wID0gcmFkZW9uX2dldF9kc3RicHAocmluZm8tPmRlcHRoKTsKLQlyaW5mby0+ZHBfZ3VpX21hc3Rlcl9jbnRsID0gKCh0ZW1wIDw8IDgpIHwgR01DX0NMUl9DTVBfQ05UTF9ESVMpOworCXJpbmZvLT5kcF9ndWlfbWNfYmFzZSA9ICgodGVtcCA8PCA4KSB8IEdNQ19DTFJfQ01QX0NOVExfRElTKTsKIAotCXJhZGVvbl9maWZvX3dhaXQgKDEpOwotCU9VVFJFRyhEUF9HVUlfTUFTVEVSX0NOVEwsIChyaW5mby0+ZHBfZ3VpX21hc3Rlcl9jbnRsIHwKLQkJCQkgICAgR01DX0JSVVNIX1NPTElEX0NPTE9SIHwKLQkJCQkgICAgR01DX1NSQ19EQVRBVFlQRV9DT0xPUikpOworCXJpbmZvLT5kcF9ndWlfbWNfY2FjaGUgPSByaW5mby0+ZHBfZ3VpX21jX2Jhc2UgfAorCQlHTUNfQlJVU0hfU09MSURfQ09MT1IgfAorCQlHTUNfU1JDX0RBVEFUWVBFX0NPTE9SOworCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDEpOworCU9VVFJFRyhEUF9HVUlfTUFTVEVSX0NOVEwsIHJpbmZvLT5kcF9ndWlfbWNfY2FjaGUpOwogCi0JcmFkZW9uX2ZpZm9fd2FpdCAoNyk7CiAKIAkvKiBjbGVhciBsaW5lIGRyYXdpbmcgcmVncyAqLworCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDIpOwogCU9VVFJFRyhEU1RfTElORV9TVEFSVCwgMCk7CiAJT1VUUkVHKERTVF9MSU5FX0VORCwgMCk7CiAKLQkvKiBzZXQgYnJ1c2ggY29sb3IgcmVncyAqLwotCU9VVFJFRyhEUF9CUlVTSF9GUkdEX0NMUiwgMHhmZmZmZmZmZik7Ci0JT1VUUkVHKERQX0JSVVNIX0JLR0RfQ0xSLCAweDAwMDAwMDAwKTsKKwkvKiBzZXQgYnJ1c2ggYW5kIHNvdXJjZSBjb2xvciByZWdzICovCisJcmluZm8tPmRwX2JydXNoX2ZnX2NhY2hlID0gMHhmZmZmZmZmZjsKKwlyaW5mby0+ZHBfYnJ1c2hfYmdfY2FjaGUgPSAweDAwMDAwMDAwOworCXJpbmZvLT5kcF9zcmNfZmdfY2FjaGUgPSAweGZmZmZmZmZmOworCXJpbmZvLT5kcF9zcmNfYmdfY2FjaGUgPSAweDAwMDAwMDAwOworCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDQpOworCU9VVFJFRyhEUF9CUlVTSF9GUkdEX0NMUiwgcmluZm8tPmRwX2JydXNoX2ZnX2NhY2hlKTsKKwlPVVRSRUcoRFBfQlJVU0hfQktHRF9DTFIsIHJpbmZvLT5kcF9icnVzaF9iZ19jYWNoZSk7CisJT1VUUkVHKERQX1NSQ19GUkdEX0NMUiwgcmluZm8tPmRwX3NyY19mZ19jYWNoZSk7CisJT1VUUkVHKERQX1NSQ19CS0dEX0NMUiwgcmluZm8tPmRwX3NyY19iZ19jYWNoZSk7CiAKLQkvKiBzZXQgc291cmNlIGNvbG9yIHJlZ3MgKi8KLQlPVVRSRUcoRFBfU1JDX0ZSR0RfQ0xSLCAweGZmZmZmZmZmKTsKLQlPVVRSRUcoRFBfU1JDX0JLR0RfQ0xSLCAweDAwMDAwMDAwKTsKKwkvKiBEZWZhdWx0IGRpcmVjdGlvbiAqLworCXJpbmZvLT5kcF9jbnRsX2NhY2hlID0gRFNUX1hfTEVGVF9UT19SSUdIVCB8IERTVF9ZX1RPUF9UT19CT1RUT007CisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMSk7CisJT1VUUkVHKERQX0NOVEwsIHJpbmZvLT5kcF9jbnRsX2NhY2hlKTsKIAogCS8qIGRlZmF1bHQgd3JpdGUgbWFzayAqLworCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDEpOwogCU9VVFJFRyhEUF9XUklURV9NU0ssIDB4ZmZmZmZmZmYpOwogCi0JcmFkZW9uX2VuZ2luZV9pZGxlICgpOworCS8qIERlZmF1bHQgdG8gbm8gc3dhcHBpbmcgb2YgaG9zdCBkYXRhICovCisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMSk7CisJT1VUUkVHKFJCQk1fR1VJQ05UTCwgUkJCTV9HVUlDTlRMX0hPU1RfREFUQV9TV0FQX05PTkUpOworCisJLyogTWFrZSBzdXJlIGl0J3Mgc2V0dGxlZCAqLworCXJhZGVvbl9lbmdpbmVfaWRsZShyaW5mbyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKaW5kZXggMWEwNTZhZC4uZjM0M2JhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYwpAQCAtNjYsNyArNjYsNyBAQAogCQlsZXZlbCA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwogCiAJZGVsX3RpbWVyX3N5bmMoJnJpbmZvLT5sdmRzX3RpbWVyKTsKLQlyYWRlb25fZW5naW5lX2lkbGUoKTsKKwlyYWRlb25fZW5naW5lX2lkbGUocmluZm8pOwogCiAJbHZkc19nZW5fY250bCA9IElOUkVHKExWRFNfR0VOX0NOVEwpOwogCWlmIChsZXZlbCA+IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jCmluZGV4IDY1MjI3M2UuLjlhNTgyMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYwpAQCAtODUyLDcgKzg1Miw2IEBACiAgICAgICAgIGlmIChyaW5mby0+YXNsZWVwKQogICAgICAgICAJcmV0dXJuIDA7CiAKLQlyYWRlb25fZmlmb193YWl0KDIpOwogICAgICAgICBPVVRSRUcoQ1JUQ19PRkZTRVQsICgodmFyLT55b2Zmc2V0ICogdmFyLT54cmVzX3ZpcnR1YWwgKyB2YXItPnhvZmZzZXQpCiAJCQkgICAgICogdmFyLT5iaXRzX3Blcl9waXhlbCAvIDgpICYgfjcpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTg4Miw3ICs4ODEsNiBAQAogCQkJaWYgKHJjKQogCQkJCXJldHVybiByYzsKIAotCQkJcmFkZW9uX2ZpZm9fd2FpdCgyKTsKIAkJCWlmICh2YWx1ZSAmIDB4MDEpIHsKIAkJCQl0bXAgPSBJTlJFRyhMVkRTX0dFTl9DTlRMKTsKIApAQCAtOTQwLDcgKzkzOCw3IEBACiAJaWYgKHJpbmZvLT5sb2NrX2JsYW5rKQogCQlyZXR1cm4gMDsKIAotCXJhZGVvbl9lbmdpbmVfaWRsZSgpOworCXJhZGVvbl9lbmdpbmVfaWRsZShyaW5mbyk7CiAKIAl2YWwgPSBJTlJFRyhDUlRDX0VYVF9DTlRMKTsKICAgICAgICAgdmFsICY9IH4oQ1JUQ19ESVNQTEFZX0RJUyB8IENSVENfSFNZTkNfRElTIHwKQEAgLTEwNDgsNyArMTA0Niw3IEBACiAKIAlpZiAocmluZm8tPmFzbGVlcCkKIAkJcmV0dXJuIDA7Ci0JCQorCiAJcmV0dXJuIHJhZGVvbl9zY3JlZW5fYmxhbmsocmluZm8sIGJsYW5rLCAwKTsKIH0KIApAQCAtMTA3NCw4ICsxMDcyLDYgQEAKICAgICAgICAgcGluZGV4ID0gcmVnbm87CiAKICAgICAgICAgaWYgKCFyaW5mby0+YXNsZWVwKSB7Ci0JCXJhZGVvbl9maWZvX3dhaXQoOSk7Ci0KIAkJaWYgKHJpbmZvLT5icHAgPT0gMTYpIHsKIAkJCXBpbmRleCA9IHJlZ25vICogODsKIApAQCAtMTI0NCw4ICsxMjQwLDYgQEAKIHsKIAlpbnQgaTsKIAotCXJhZGVvbl9maWZvX3dhaXQoMjApOwotCiAJLyogV29ya2Fyb3VuZCBmcm9tIFhGcmVlICovCiAJaWYgKHJpbmZvLT5pc19tb2JpbGl0eSkgewogCSAgICAgICAgLyogQSB0ZW1wb3JhbCB3b3JrYXJvdW5kIGZvciB0aGUgb2NjYXRpb25hbCBibGFua2luZyBvbiBjZXJ0YWluIGxhcHRvcApAQCAtMTI4NiwxMSArMTI4MCwxMCBAQAogCXJhZGVvbl9wbGxfZXJyYXRhX2FmdGVyX2RhdGEocmluZm8pOwogCiAJLyogU2V0IFBQTEwgcmVmLiBkaXYgKi8KLQlpZiAocmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SMzAwIHx8CisJaWYgKElTX1IzMDBfVkFSSUFOVChyaW5mbykgfHwKIAkgICAgcmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SUzMwMCB8fAotCSAgICByaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1IzNTAgfHwKLQkgICAgcmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SVjM1MCB8fAotCSAgICByaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JWMzgwICkgeworCSAgICByaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JTNDAwIHx8CisJICAgIHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUlM0ODApIHsKIAkJaWYgKG1vZGUtPnBwbGxfcmVmX2RpdiAmIFIzMDBfUFBMTF9SRUZfRElWX0FDQ19NQVNLKSB7CiAJCQkvKiBXaGVuIHJlc3RvcmluZyBjb25zb2xlIG1vZGUsIHVzZSBzYXZlZCBQUExMX1JFRl9ESVYKIAkJCSAqIHNldHRpbmcuCkBAIC0xMzQyLDcgKzEzMzUsNyBAQAogewogCXN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyA9IChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqKWRhdGE7CiAKLQlyYWRlb25fZW5naW5lX2lkbGUoKTsKKwlyYWRlb25fZW5naW5lX2lkbGUocmluZm8pOwogCiAJT1VUUkVHKExWRFNfR0VOX0NOVEwsIHJpbmZvLT5wZW5kaW5nX2x2ZHNfZ2VuX2NudGwpOwogfQpAQCAtMTM2MCwxMCArMTM1MywxMSBAQAogCWlmIChub21vZGVzZXQpCiAJCXJldHVybjsKIAorCXJhZGVvbl9lbmdpbmVfaWRsZShyaW5mbyk7CisKIAlpZiAoIXJlZ3Nfb25seSkKIAkJcmFkZW9uX3NjcmVlbl9ibGFuayhyaW5mbywgRkJfQkxBTktfTk9STUFMLCAwKTsKIAotCXJhZGVvbl9maWZvX3dhaXQoMzEpOwogCWZvciAoaT0wOyBpPDEwOyBpKyspCiAJCU9VVFJFRyhjb21tb25fcmVnc1tpXS5yZWcsIGNvbW1vbl9yZWdzW2ldLnZhbCk7CiAKQEAgLTEzOTEsNyArMTM4NSw2IEBACiAJcmFkZW9uX3dyaXRlX3BsbF9yZWdzKHJpbmZvLCBtb2RlKTsKIAogCWlmICgocHJpbWFyeV9tb24gPT0gTVRfREZQKSB8fCAocHJpbWFyeV9tb24gPT0gTVRfTENEKSkgewotCQlyYWRlb25fZmlmb193YWl0KDEwKTsKIAkJT1VUUkVHKEZQX0NSVENfSF9UT1RBTF9ESVNQLCBtb2RlLT5mcF9jcnRjX2hfdG90YWxfZGlzcCk7CiAJCU9VVFJFRyhGUF9DUlRDX1ZfVE9UQUxfRElTUCwgbW9kZS0+ZnBfY3J0Y192X3RvdGFsX2Rpc3ApOwogCQlPVVRSRUcoRlBfSF9TWU5DX1NUUlRfV0lELCBtb2RlLT5mcF9oX3N5bmNfc3RydF93aWQpOwpAQCAtMTQwNiw3ICsxMzk5LDYgQEAKIAlpZiAoIXJlZ3Nfb25seSkKIAkJcmFkZW9uX3NjcmVlbl9ibGFuayhyaW5mbywgRkJfQkxBTktfVU5CTEFOSywgMCk7CiAKLQlyYWRlb25fZmlmb193YWl0KDIpOwogCU9VVFBMTChWQ0xLX0VDUF9DTlRMLCBtb2RlLT52Y2xrX2VjcF9jbnRsKTsKIAkKIAlyZXR1cm47CkBAIC0xNDYxLDEwICsxNDUzLDcgQEAKIAkJLyogTm90IGFsbCBjaGlwIHJldnMgaGF2ZSB0aGUgc2FtZSBmb3JtYXQgZm9yIHRoaXMgcmVnaXN0ZXIsCiAJCSAqIGV4dHJhY3QgdGhlIHNvdXJjZSBzZWxlY3Rpb24KIAkJICovCi0JCWlmIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1IyMDAgfHwKLQkJICAgIHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUjMwMCB8fAotCQkgICAgcmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SMzUwIHx8Ci0JCSAgICByaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JWMzUwKSB7CisJCWlmIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1IyMDAgfHwgSVNfUjMwMF9WQVJJQU5UKHJpbmZvKSkgewogCQkJc291cmNlID0gKGZwMl9nZW5fY250bCA+PiAxMCkgJiAweDM7CiAJCQkvKiBzb3VyY2VkIGZyb20gdHJhbnNmb3JtIHVuaXQsIGNoZWNrIGZvciB0cmFuc2Zvcm0gdW5pdAogCQkJICogb3duIHNvdXJjZQpAQCAtMTU2MCw3ICsxNTQ5LDcgQEAKIAkvKiBXZSBhbHdheXMgd2FudCBlbmdpbmUgdG8gYmUgaWRsZSBvbiBhIG1vZGUgc3dpdGNoLCBldmVuCiAJICogaWYgd2Ugd29uJ3QgYWN0dWFsbHkgY2hhbmdlIHRoZSBtb2RlCiAJICovCi0JcmFkZW9uX2VuZ2luZV9pZGxlKCk7CisJcmFkZW9uX2VuZ2luZV9pZGxlKHJpbmZvKTsKIAogCWhTeW5jU3RhcnQgPSBtb2RlLT54cmVzICsgbW9kZS0+cmlnaHRfbWFyZ2luOwogCWhTeW5jRW5kID0gaFN5bmNTdGFydCArIG1vZGUtPmhzeW5jX2xlbjsKQEAgLTE4NTUsNyArMTg0NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBmYl9vcHMgcmFkZW9uZmJfb3BzID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmZiX2NoZWNrX3ZhcgkJPSByYWRlb25mYl9jaGVja192YXIsCkBAIC0xODc5LDYgKzE4NjcsNyBAQAogCWluZm8tPnBhciA9IHJpbmZvOwogCWluZm8tPnBzZXVkb19wYWxldHRlID0gcmluZm8tPnBzZXVkb19wYWxldHRlOwogCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQKKwkJICAgIHwgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUCiAJCSAgICB8IEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBCiAJCSAgICB8IEZCSU5GT19IV0FDQ0VMX0ZJTExSRUNUCiAJCSAgICB8IEZCSU5GT19IV0FDQ0VMX1hQQU4KQEAgLTIwMDUsMTEgKzE5OTQsMTEgQEAKICAgICAgICAgICAgIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JTMjAwKSB8fAogICAgICAgICAgICAgKHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUlMzMDApIHx8CiAgICAgICAgICAgICAocmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SQzQxMCkgfHwKKyAgICAgICAgICAgIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JTNDAwKSB8fAogCSAgICAocmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SUzQ4MCkgKSB7CiAgICAgICAgICAgdTMyIHRvbSA9IElOUkVHKE5CX1RPTSk7CiAgICAgICAgICAgdG1wID0gKCgoKHRvbSA+PiAxNikgLSAodG9tICYgMHhmZmZmKSArIDEpIDw8IDYpICogMTAyNCk7CiAKLSAJCXJhZGVvbl9maWZvX3dhaXQoNik7CiAgICAgICAgICAgT1VUUkVHKE1DX0ZCX0xPQ0FUSU9OLCB0b20pOwogICAgICAgICAgIE9VVFJFRyhESVNQTEFZX0JBU0VfQUREUiwgKHRvbSAmIDB4ZmZmZikgPDwgMTYpOwogICAgICAgICAgIE9VVFJFRyhDUlRDMl9ESVNQTEFZX0JBU0VfQUREUiwgKHRvbSAmIDB4ZmZmZikgPDwgMTYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2kyYy5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2kyYy5jCmluZGV4IDhjOGZhMzUuLjJjNTU2NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9pMmMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25faTJjLmMKQEAgLTEzOSwxMiArMTM5LDggQEAKIGludCByYWRlb25fcHJvYmVfaTJjX2Nvbm5lY3RvcihzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIGludCBjb25uLAogCQkJICAgICAgIHU4ICoqb3V0X2VkaWQpCiB7Ci0JdTMyIHJlZyA9IHJpbmZvLT5pMmNbY29ubi0xXS5kZGNfcmVnOwogCXU4ICplZGlkOwogCi0JT1VUUkVHKHJlZywgSU5SRUcocmVnKSAmCi0JCQl+KFZHQV9ERENfREFUQV9PVVRQVVQgfCBWR0FfRERDX0NMS19PVVRQVVQpKTsKLQogCWVkaWQgPSBmYl9kZGNfcmVhZCgmcmluZm8tPmkyY1tjb25uLTFdLmFkYXB0ZXIpOwogCiAJaWYgKG91dF9lZGlkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwppbmRleCA2NzVhYmRhLi4zZGY1MDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwpAQCAtMjY1Myw5ICsyNjUzLDkgQEAKIAogCWlmICghKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpKSB7CiAJCS8qIE1ha2Ugc3VyZSBlbmdpbmUgaXMgcmVzZXQgKi8KLQkJcmFkZW9uX2VuZ2luZV9pZGxlKCk7CisJCXJhZGVvbl9lbmdpbmVfaWRsZShyaW5mbyk7CiAJCXJhZGVvbmZiX2VuZ2luZV9yZXNldChyaW5mbyk7Ci0JCXJhZGVvbl9lbmdpbmVfaWRsZSgpOworCQlyYWRlb25fZW5naW5lX2lkbGUocmluZm8pOwogCX0KIAogCS8qIEJsYW5rIGRpc3BsYXkgYW5kIExDRCAqLwpAQCAtMjc2Nyw3ICsyNzY3LDcgQEAKIAogCQlyaW5mby0+YXNsZWVwID0gMDsKIAl9IGVsc2UKLQkJcmFkZW9uX2VuZ2luZV9pZGxlKCk7CisJCXJhZGVvbl9lbmdpbmVfaWRsZShyaW5mbyk7CiAKIAkvKiBSZXN0b3JlIGRpc3BsYXkgJiBlbmdpbmUgKi8KIAlyYWRlb25fd3JpdGVfbW9kZSAocmluZm8sICZyaW5mby0+c3RhdGUsIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uZmIuaCBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbmZiLmgKaW5kZXggY2NiZmZmZC4uZWEwYjViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25mYi5oCkBAIC01Myw2ICs1Myw3IEBACiAJQ0hJUF9GQU1JTFlfUlYzODAsICAgIC8qIFJWMzcwL1JWMzgwL00yMi9NMjQgKi8KIAlDSElQX0ZBTUlMWV9SNDIwLCAgICAgLyogUjQyMC9SNDIzL00xOCAqLwogCUNISVBfRkFNSUxZX1JDNDEwLAorCUNISVBfRkFNSUxZX1JTNDAwLAogCUNISVBfRkFNSUxZX1JTNDgwLAogCUNISVBfRkFNSUxZX0xBU1QsCiB9OwpAQCAtMzM1LDcgKzMzNiwxNSBAQAogCWludAkJCW1vbjJfdHlwZTsKIAl1OAkJICAgICAgICAqbW9uMl9FRElEOwogCi0JdTMyCQkJZHBfZ3VpX21hc3Rlcl9jbnRsOworCS8qIGFjY2VsIGJpdHMgKi8KKwl1MzIJCQlkcF9ndWlfbWNfYmFzZTsKKwl1MzIJCQlkcF9ndWlfbWNfY2FjaGU7CisJdTMyCQkJZHBfY250bF9jYWNoZTsKKwl1MzIJCQlkcF9icnVzaF9mZ19jYWNoZTsKKwl1MzIJCQlkcF9icnVzaF9iZ19jYWNoZTsKKwl1MzIJCQlkcF9zcmNfZmdfY2FjaGU7CisJdTMyCQkJZHBfc3JjX2JnX2NhY2hlOworCXUzMgkJCWZpZm9fZnJlZTsKIAogCXN0cnVjdCBwbGxfaW5mbwkJcGxsOwogCkBAIC0zNDcsNiArMzU2LDcgQEAKIAlpbnQJCQlsb2NrX2JsYW5rOwogCWludAkJCWR5bmNsazsKIAlpbnQJCQlub19zY2hlZHVsZTsKKwlpbnQgCQkJZ2Z4X21vZGU7CiAJZW51bSByYWRlb25fcG1fbW9kZQlwbV9tb2RlOwogCXJlaW5pdF9mdW5jdGlvbl9wdHIgICAgIHJlaW5pdF9mdW5jOwogCkBAIC0zOTEsOCArNDAxLDE0IEBACiAjZGVmaW5lIE9VVFJFRzgoYWRkcix2YWwpCXdyaXRlYih2YWwsIChyaW5mby0+bW1pb19iYXNlKSthZGRyKQogI2RlZmluZSBJTlJFRzE2KGFkZHIpCQlyZWFkdygocmluZm8tPm1taW9fYmFzZSkrYWRkcikKICNkZWZpbmUgT1VUUkVHMTYoYWRkcix2YWwpCXdyaXRldyh2YWwsIChyaW5mby0+bW1pb19iYXNlKSthZGRyKQorCisjaWZkZWYgQ09ORklHX1BQQworI2RlZmluZSBJTlJFRyhhZGRyKQkgICAgIAkoeyBlaWVpbygpOyBsZF9sZTMyKHJpbmZvLT5tbWlvX2Jhc2UrKGFkZHIpKTsgfSkKKyNkZWZpbmUgT1VUUkVHKGFkZHIsdmFsKQlkbyB7IGVpZWlvKCk7IHN0X2xlMzIocmluZm8tPm1taW9fYmFzZSsoYWRkciksKHZhbCkpOyB9IHdoaWxlKDApCisjZWxzZQogI2RlZmluZSBJTlJFRyhhZGRyKQkJcmVhZGwoKHJpbmZvLT5tbWlvX2Jhc2UpK2FkZHIpCiAjZGVmaW5lIE9VVFJFRyhhZGRyLHZhbCkJd3JpdGVsKHZhbCwgKHJpbmZvLT5tbWlvX2Jhc2UpK2FkZHIpCisjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIF9PVVRSRUdQKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgdTMyIGFkZHIsCiAJCSAgICAgICB1MzIgdmFsLCB1MzIgbWFzaykKQEAgLTUzMywxNiArNTQ5LDI1IEBACiAvKgogICogMkQgRW5naW5lIGhlbHBlciByb3V0aW5lcwogICovCisKK2V4dGVybiB2b2lkIHJhZGVvbl9maWZvX3VwZGF0ZV9hbmRfd2FpdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIGludCBlbnRyaWVzKTsKKwogc3RhdGljIGlubGluZSB2b2lkIHJhZGVvbl9lbmdpbmVfZmx1c2ggKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKIHsKIAlpbnQgaTsKIAotCS8qIGluaXRpYXRlIGZsdXNoICovCi0JT1VUUkVHUChSQjJEX0RTVENBQ0hFX0NUTFNUQVQsIFJCMkRfRENfRkxVU0hfQUxMLAorCS8qIEluaXRpYXRlIGZsdXNoICovCisJT1VUUkVHUChEU1RDQUNIRV9DVExTVEFULCBSQjJEX0RDX0ZMVVNIX0FMTCwKIAkgICAgICAgIH5SQjJEX0RDX0ZMVVNIX0FMTCk7CiAKKwkvKiBFbnN1cmUgRklGTyBpcyBlbXB0eSwgaWUsIG1ha2Ugc3VyZSB0aGUgZmx1c2ggY29tbWFuZHMKKwkgKiBoYXMgcmVhY2hlZCB0aGUgY2FjaGUKKwkgKi8KKwlyYWRlb25fZmlmb191cGRhdGVfYW5kX3dhaXQocmluZm8sIDY0KTsKKworCS8qIFdhaXQgZm9yIHRoZSBmbHVzaCB0byBjb21wbGV0ZSAqLwogCWZvciAoaT0wOyBpIDwgMjAwMDAwMDsgaSsrKSB7Ci0JCWlmICghKElOUkVHKFJCMkRfRFNUQ0FDSEVfQ1RMU1RBVCkgJiBSQjJEX0RDX0JVU1kpKQorCQlpZiAoIShJTlJFRyhEU1RDQUNIRV9DVExTVEFUKSAmIFJCMkRfRENfQlVTWSkpCiAJCQlyZXR1cm47CiAJCXVkZWxheSgxKTsKIAl9CkBAIC01NTAsMjUgKzU3NSwxMiBAQAogfQogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfcmFkZW9uX2ZpZm9fd2FpdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIGludCBlbnRyaWVzKQotewotCWludCBpOwotCi0JZm9yIChpPTA7IGk8MjAwMDAwMDsgaSsrKSB7Ci0JCWlmICgoSU5SRUcoUkJCTV9TVEFUVVMpICYgMHg3ZikgPj0gZW50cmllcykKLQkJCXJldHVybjsKLQkJdWRlbGF5KDEpOwotCX0KLQlwcmludGsoS0VSTl9FUlIgInJhZGVvbmZiOiBGSUZPIFRpbWVvdXQgIVxuIik7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIF9yYWRlb25fZW5naW5lX2lkbGUoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKQorc3RhdGljIGlubGluZSB2b2lkIHJhZGVvbl9lbmdpbmVfaWRsZShzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCiB7CiAJaW50IGk7CiAKIAkvKiBlbnN1cmUgRklGTyBpcyBlbXB0eSBiZWZvcmUgd2FpdGluZyBmb3IgaWRsZSAqLwotCV9yYWRlb25fZmlmb193YWl0IChyaW5mbywgNjQpOworCXJhZGVvbl9maWZvX3VwZGF0ZV9hbmRfd2FpdCAocmluZm8sIDY0KTsKIAogCWZvciAoaT0wOyBpPDIwMDAwMDA7IGkrKykgewogCQlpZiAoKChJTlJFRyhSQkJNX1NUQVRVUykgJiBHVUlfQUNUSVZFKSkgPT0gMCkgewpAQCAtNTgxLDggKzU5Myw2IEBACiB9CiAKIAotI2RlZmluZSByYWRlb25fZW5naW5lX2lkbGUoKQkJX3JhZGVvbl9lbmdpbmVfaWRsZShyaW5mbykKLSNkZWZpbmUgcmFkZW9uX2ZpZm9fd2FpdChlbnRyaWVzKQlfcmFkZW9uX2ZpZm9fd2FpdChyaW5mbyxlbnRyaWVzKQogI2RlZmluZSByYWRlb25fbXNsZWVwKG1zKQkJX3JhZGVvbl9tc2xlZXAocmluZm8sbXMpCiAKIApAQCAtNjEyLDYgKzYyMiw3IEBACiBleHRlcm4gaW50IHJhZGVvbmZiX3N5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pOwogZXh0ZXJuIHZvaWQgcmFkZW9uZmJfZW5naW5lX2luaXQgKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyk7CiBleHRlcm4gdm9pZCByYWRlb25mYl9lbmdpbmVfcmVzZXQoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9maXh1cF9tZW1fb2Zmc2V0KHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyk7CiAKIC8qIE90aGVyIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCByYWRlb25fc2NyZWVuX2JsYW5rKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgaW50IGJsYW5rLCBpbnQgbW9kZV9zd2l0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKaW5kZXggNmZhMGI5ZC4uZDRjZmVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAKICNpbmNsdWRlIDxjcHUvZGFjLmg+Ci0jaW5jbHVkZSA8YXNtL2hwNnh4Lmg+CisjaW5jbHVkZSA8bWFjaC9ocDZ4eC5oPgogI2luY2x1ZGUgPGFzbS9oZDY0NDYxLmg+CiAKICNkZWZpbmUgSFA2ODBfTUFYX0lOVEVOU0lUWSAyNTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21icF9udmlkaWFfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21icF9udmlkaWFfYmwuYwppbmRleCAzODVjYmE0Li4wNjk2NGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jCkBAIC0xMTEsNiArMTExLDQgQEAKIE1PRFVMRV9BVVRIT1IoIk1hdHRoZXcgR2FycmV0dCA8bWpnQHJlZGhhdC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk52aWRpYS1iYXNlZCBNYWNib29rIFBybyBCYWNrbGlnaHQgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQUxJQVMoInN2bkFwcGxlSW5jLjpwbk1hY0Jvb2tQcm8zLDEiKTsKLU1PRFVMRV9BTElBUygic3ZuQXBwbGVJbmMuOnBuTWFjQm9va1BybzMsMiIpOwotTU9EVUxFX0FMSUFTKCJzdm5BcHBsZUluYy46cG5NYWNCb29rUHJvNCwxIik7CitNT0RVTEVfREVWSUNFX1RBQkxFKGRtaSwgbWJwX2RldmljZV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Nhcm1pbmVmYi5jIGIvZHJpdmVycy92aWRlby9jYXJtaW5lZmIuYwppbmRleCBlMTViYjQ0Li5jOWIxOTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Nhcm1pbmVmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2FybWluZWZiLmMKQEAgLTUzNSw3ICs1MzUsNyBAQAogCS5mYl9zZXRjb2xyZWcJPSBjYXJtaW5lX3NldGNvbHJlZywKIH07CiAKLXN0YXRpYyBpbnQgYWxsb2NfY2FybWluZV9mYih2b2lkIF9faW9tZW0gKnJlZ3MsIHZvaWQgX19pb21lbSAqc21lbV9iYXNlLAorc3RhdGljIGludCBfX2RldmluaXQgYWxsb2NfY2FybWluZV9mYih2b2lkIF9faW9tZW0gKnJlZ3MsIHZvaWQgX19pb21lbSAqc21lbV9iYXNlLAogCQlpbnQgc21lbV9vZmZzZXQsIHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGZiX2luZm8gKipyaW5mbykKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jaXJydXNmYi5jIGIvZHJpdmVycy92aWRlby9jaXJydXNmYi5jCmluZGV4IGU3MjlmYjIuLjA0OGIxMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2lycnVzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NpcnJ1c2ZiLmMKQEAgLTMyNywyOSArMzI3LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfWk9SUk8gKi8KIAogc3RydWN0IGNpcnJ1c2ZiX3JlZ3MgewotCWxvbmcgZnJlcTsKLQlsb25nIG5vbTsKLQlsb25nIGRlbjsKLQlsb25nIGRpdjsKLQlsb25nIG11bHRpcGxleGluZzsKLQlsb25nIG1jbGs7Ci0JbG9uZyBkaXZNQ0xLOwotCi0JbG9uZyBIb3JpelJlczsJCS8qIFRoZSB4IHJlc29sdXRpb24gaW4gcGl4ZWwgKi8KLQlsb25nIEhvcml6VG90YWw7Ci0JbG9uZyBIb3JpekRpc3BFbmQ7Ci0JbG9uZyBIb3JpekJsYW5rU3RhcnQ7Ci0JbG9uZyBIb3JpekJsYW5rRW5kOwotCWxvbmcgSG9yaXpTeW5jU3RhcnQ7Ci0JbG9uZyBIb3JpelN5bmNFbmQ7Ci0KLQlsb25nIFZlcnRSZXM7CQkvKiB0aGUgcGh5c2ljYWwgeSByZXNvbHV0aW9uIGluIHNjYW5saW5lcyAqLwotCWxvbmcgVmVydFRvdGFsOwotCWxvbmcgVmVydERpc3BFbmQ7Ci0JbG9uZyBWZXJ0U3luY1N0YXJ0OwotCWxvbmcgVmVydFN5bmNFbmQ7Ci0JbG9uZyBWZXJ0QmxhbmtTdGFydDsKLQlsb25nIFZlcnRCbGFua0VuZDsKKwlpbnQgbXVsdGlwbGV4aW5nOwogfTsKIAogI2lmZGVmIENJUlJVU0ZCX0RFQlVHCkBAIC0zNjcsMTEwICszNDUsMTMgQEAKIAogCXN0cnVjdCBjaXJydXNmYl9yZWdzIGN1cnJlbnRtb2RlOwogCWludCBibGFua19tb2RlOworCXUzMiBwc2V1ZG9fcGFsZXR0ZVsxNl07CiAKLQl1MzIJcHNldWRvX3BhbGV0dGVbMTZdOwotCi0jaWZkZWYgQ09ORklHX1pPUlJPCi0Jc3RydWN0IHpvcnJvX2RldiAqemRldjsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19QQ0kKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLSNlbmRpZgogCXZvaWQgKCp1bm1hcCkoc3RydWN0IGZiX2luZm8gKmluZm8pOwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGNpcnJ1c2ZiX2RlZl9tb2RlID0gMTsKLXN0YXRpYyBpbnQgbm9hY2NlbDsKLQotLyoKLSAqICAgIFByZWRlZmluZWQgVmlkZW8gTW9kZXMKLSAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQljb25zdCBjaGFyICpuYW1lOwotCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7Ci19IGNpcnJ1c2ZiX3ByZWRlZmluZWRbXSA9IHsKLQl7Ci0JCS8qIGF1dG9kZXRlY3QgbW9kZSAqLwotCQkubmFtZQk9ICJBdXRvZGV0ZWN0IiwKLQl9LCB7Ci0JCS8qIDY0MHg0ODAsIDMxLjI1IGtIeiwgNjAgSHosIDI1IE1IeiBQaXhDbG9jayAqLwotCQkubmFtZQk9ICI2NDB4NDgwIiwKLQkJLnZhcgk9IHsKLQkJCS54cmVzCQk9IDY0MCwKLQkJCS55cmVzCQk9IDQ4MCwKLQkJCS54cmVzX3ZpcnR1YWwJPSA2NDAsCi0JCQkueXJlc192aXJ0dWFsCT0gNDgwLAotCQkJLmJpdHNfcGVyX3BpeGVsCT0gOCwKLQkJCS5yZWQJCT0geyAubGVuZ3RoID0gOCB9LAotCQkJLmdyZWVuCQk9IHsgLmxlbmd0aCA9IDggfSwKLQkJCS5ibHVlCQk9IHsgLmxlbmd0aCA9IDggfSwKLQkJCS53aWR0aAkJPSAtMSwKLQkJCS5oZWlnaHQJCT0gLTEsCi0JCQkucGl4Y2xvY2sJPSA0MDAwMCwKLQkJCS5sZWZ0X21hcmdpbgk9IDQ4LAotCQkJLnJpZ2h0X21hcmdpbgk9IDE2LAotCQkJLnVwcGVyX21hcmdpbgk9IDMyLAotCQkJLmxvd2VyX21hcmdpbgk9IDgsCi0JCQkuaHN5bmNfbGVuCT0gOTYsCi0JCQkudnN5bmNfbGVuCT0gNCwKLQkJCS5zeW5jCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCi0JCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRAotCQkgfQotCX0sIHsKLQkJLyogODAweDYwMCwgNDgga0h6LCA3NiBIeiwgNTAgTUh6IFBpeENsb2NrICovCi0JCS5uYW1lCT0gIjgwMHg2MDAiLAotCQkudmFyCT0gewotCQkJLnhyZXMJCT0gODAwLAotCQkJLnlyZXMJCT0gNjAwLAotCQkJLnhyZXNfdmlydHVhbAk9IDgwMCwKLQkJCS55cmVzX3ZpcnR1YWwJPSA2MDAsCi0JCQkuYml0c19wZXJfcGl4ZWwJPSA4LAotCQkJLnJlZAkJPSB7IC5sZW5ndGggPSA4IH0sCi0JCQkuZ3JlZW4JCT0geyAubGVuZ3RoID0gOCB9LAotCQkJLmJsdWUJCT0geyAubGVuZ3RoID0gOCB9LAotCQkJLndpZHRoCQk9IC0xLAotCQkJLmhlaWdodAkJPSAtMSwKLQkJCS5waXhjbG9jawk9IDIwMDAwLAotCQkJLmxlZnRfbWFyZ2luCT0gMTI4LAotCQkJLnJpZ2h0X21hcmdpbgk9IDE2LAotCQkJLnVwcGVyX21hcmdpbgk9IDI0LAotCQkJLmxvd2VyX21hcmdpbgk9IDIsCi0JCQkuaHN5bmNfbGVuCT0gOTYsCi0JCQkudnN5bmNfbGVuCT0gNiwKLQkJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECi0JCSB9Ci0JfSwgewotCQkvKgotCQkgKiBNb2RlbGluZSBmcm9tIFhGODZDb25maWc6Ci0JCSAqIE1vZGUgIjEwMjR4NzY4IiA4MCAgMTAyNCAxMTM2IDEzNDAgMTQzMiAgNzY4IDc3MCA3NzQgODA1Ci0JCSAqLwotCQkvKiAxMDI0eDc2OCwgNTUuOCBrSHosIDcwIEh6LCA4MCBNSHogUGl4Q2xvY2sgKi8KLQkJLm5hbWUJPSAiMTAyNHg3NjgiLAotCQkudmFyCT0gewotCQkJLnhyZXMJCT0gMTAyNCwKLQkJCS55cmVzCQk9IDc2OCwKLQkJCS54cmVzX3ZpcnR1YWwJPSAxMDI0LAotCQkJLnlyZXNfdmlydHVhbAk9IDc2OCwKLQkJCS5iaXRzX3Blcl9waXhlbAk9IDgsCi0JCQkucmVkCQk9IHsgLmxlbmd0aCA9IDggfSwKLQkJCS5ncmVlbgkJPSB7IC5sZW5ndGggPSA4IH0sCi0JCQkuYmx1ZQkJPSB7IC5sZW5ndGggPSA4IH0sCi0JCQkud2lkdGgJCT0gLTEsCi0JCQkuaGVpZ2h0CQk9IC0xLAotCQkJLnBpeGNsb2NrCT0gMTI1MDAsCi0JCQkubGVmdF9tYXJnaW4JPSAxNDQsCi0JCQkucmlnaHRfbWFyZ2luCT0gMzIsCi0JCQkudXBwZXJfbWFyZ2luCT0gMzAsCi0JCQkubG93ZXJfbWFyZ2luCT0gMiwKLQkJCS5oc3luY19sZW4JPSAxOTIsCi0JCQkudnN5bmNfbGVuCT0gNiwKLQkJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECi0JCX0KLQl9Ci19OwotCi0jZGVmaW5lIE5VTV9UT1RBTF9NT0RFUyAgICBBUlJBWV9TSVpFKGNpcnJ1c2ZiX3ByZWRlZmluZWQpCitzdGF0aWMgaW50IG5vYWNjZWwgX19kZXZpbml0ZGF0YTsKK3N0YXRpYyBjaGFyICptb2RlX29wdGlvbiBfX2RldmluaXRkYXRhID0gIjY0MHg0ODBANjAiOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqIEJFR0lOIFBST1RPVFlQRVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTE0LDEwICszOTUsNiBAQAogCS5mYl9pbWFnZWJsaXQJPSBjaXJydXNmYl9pbWFnZWJsaXQsCiB9OwogCi0vKi0tLSBIYXJkd2FyZSBTcGVjaWZpYyBSb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgY2lycnVzZmJfZGVjb2RlX3Zhcihjb25zdCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQkJCQlzdHJ1Y3QgY2lycnVzZmJfcmVncyAqcmVncywKLQkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAvKi0tLSBJbnRlcm5hbCByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIGluaXRfdmdhY2hpcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiBzdGF0aWMgdm9pZCBzd2l0Y2hfbW9uaXRvcihzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8sIGludCBvbik7CkBAIC01NDYsOSArNDIzLDcgQEAKIAkJCSAgICAgIHVfc2hvcnQgd2lkdGgsIHVfc2hvcnQgaGVpZ2h0LAogCQkJICAgICAgdV9jaGFyIGNvbG9yLCB1X3Nob3J0IGxpbmVfbGVuZ3RoKTsKIAotc3RhdGljIHZvaWQgYmVzdGNsb2NrKGxvbmcgZnJlcSwgbG9uZyAqYmVzdCwKLQkJICAgICAgbG9uZyAqbm9tLCBsb25nICpkZW4sCi0JCSAgICAgIGxvbmcgKmRpdiwgbG9uZyBtYXhmcmVxKTsKK3N0YXRpYyB2b2lkIGJlc3RjbG9jayhsb25nIGZyZXEsIGludCAqbm9tLCBpbnQgKmRlbiwgaW50ICpkaXYpOwogCiAjaWZkZWYgQ0lSUlVTRkJfREVCVUcKIHN0YXRpYyB2b2lkIGNpcnJ1c2ZiX2R1bXAodm9pZCk7CkBAIC01ODQsNDUgKzQ1OSwyOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKiBCRUdJTiBIYXJkd2FyZSBzcGVjaWZpYyBSb3V0aW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogR2V0IGEgZ29vZCBNQ0xLIHZhbHVlICovCi1zdGF0aWMgbG9uZyBjaXJydXNmYl9nZXRfbWNsayhsb25nIGZyZXEsIGludCBicHAsIGxvbmcgKmRpdikKKy8qIENoZWNrIGlmIHRoZSBNQ0xLIGlzIG5vdCBhIGJldHRlciBjbG9jayBzb3VyY2UgKi8KK3N0YXRpYyBpbnQgY2lycnVzZmJfY2hlY2tfbWNsayhzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8sIGxvbmcgZnJlcSkKIHsKLQlsb25nIG1jbGs7CisJbG9uZyBtY2xrID0gdmdhX3JzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRikgJiAweDNmOwogCi0JYXNzZXJ0KGRpdiAhPSBOVUxMKTsKLQotCS8qIENhbGN1bGF0ZSBNQ0xLLCBpbiBjYXNlIFZDTEsgaXMgaGlnaCBlbm91Z2ggdG8gcmVxdWlyZSA+IDUwTUh6LgotCSAqIEFzc3VtZSBhIDY0LWJpdCBkYXRhIHBhdGggZm9yIG5vdy4gIFRoZSBmb3JtdWxhIGlzOgotCSAqICgoQiAqIFBDTEsgKiAyKS9XKSAqIDEuMgotCSAqIEIgPSBieXRlcyBwZXIgcGl4ZWwsIFBDTEsgPSBwaXhjbG9jaywgVyA9IGRhdGEgd2lkdGggaW4gYnl0ZXMgKi8KLQltY2xrID0gKChicHAgLyA4KSAqIGZyZXEgKiAyKSAvIDQ7Ci0JbWNsayA9IChtY2xrICogMTIpIC8gMTA7Ci0JaWYgKG1jbGsgPCA1MDAwMCkKLQkJbWNsayA9IDUwMDAwOwotCURQUklOVEsoIlVzZSBNQ0xLIG9mICVsZCBrSHpcbiIsIG1jbGspOwotCi0JLyogQ2FsY3VsYXRlIHZhbHVlIGZvciBTUjFGLiAgTXVsdGlwbHkgYnkgMiBzbyB3ZSBjYW4gcm91bmQgdXAuICovCi0JbWNsayA9ICgobWNsayAqIDE2KSAvIDE0MzE4KTsKLQltY2xrID0gKG1jbGsgKyAxKSAvIDI7Ci0JRFBSSU5USygiU2V0IFNSMUZbNTowXSB0byAweCVseFxuIiwgbWNsayk7CisJLyogUmVhZCBNQ0xLIHZhbHVlICovCisJbWNsayA9ICgxNDMxOCAqIG1jbGspID4+IDM7CisJRFBSSU5USygiUmVhZCBNQ0xLIG9mICVsZCBrSHpcbiIsIG1jbGspOwogCiAJLyogRGV0ZXJtaW5lIGlmIHdlIHNob3VsZCB1c2UgTUNMSyBpbnN0ZWFkIG9mIFZDTEssIGFuZCBpZiBzbywgd2hhdCB3ZQotCSAgICogc2hvdWxkIGRpdmlkZSBpdCBieSB0byBnZXQgVkNMSyAqLwotCXN3aXRjaCAoZnJlcSkgewotCWNhc2UgMjQ3NTEgLi4uIDI1MjQ5OgotCQkqZGl2ID0gMjsKLQkJRFBSSU5USygiVXNpbmcgVkNMSyA9IE1DTEsvMlxuIik7Ci0JCWJyZWFrOwotCWNhc2UgNDk1MDEgLi4uIDUwNDk5OgotCQkqZGl2ID0gMTsKKwkgKiBzaG91bGQgZGl2aWRlIGl0IGJ5IHRvIGdldCBWQ0xLCisJICovCisKKwlpZiAoYWJzKGZyZXEgLSBtY2xrKSA8IDI1MCkgewogCQlEUFJJTlRLKCJVc2luZyBWQ0xLID0gTUNMS1xuIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCSpkaXYgPSAwOwotCQlicmVhazsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChhYnMoZnJlcSAtIChtY2xrIC8gMikpIDwgMjUwKSB7CisJCURQUklOVEsoIlVzaW5nIFZDTEsgPSBNQ0xLLzJcbiIpOworCQlyZXR1cm4gMjsKIAl9CiAKLQlyZXR1cm4gbWNsazsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjaXJydXNmYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCkBAIC02MzgsNyArNDk2LDYgQEAKIAkJYnJlYWs7CQkvKiA4IHBpeGVsIHBlciBieXRlLCBvbmx5IDEvNHRoIG9mIG1lbSB1c2FibGUgKi8KIAljYXNlIDg6CiAJY2FzZSAxNjoKLQljYXNlIDI0OgogCWNhc2UgMzI6CiAJCWJyZWFrOwkJLyogMSBwaXhlbCA9PSAxIGJ5dGUgKi8KIAlkZWZhdWx0OgpAQCAtNzEzLDcgKzU3MCw2IEBACiAJCXZhci0+Ymx1ZS5sZW5ndGggPSA1OwogCQlicmVhazsKIAotCWNhc2UgMjQ6CiAJY2FzZSAzMjoKIAkJaWYgKGlzUFJlUCkgewogCQkJdmFyLT5yZWQub2Zmc2V0ID0gODsKQEAgLTc2Nyw4ICs2MjMsNiBAQAogCWxvbmcgbWF4Y2xvY2s7CiAJaW50IG1heGNsb2NraWR4ID0gdmFyLT5iaXRzX3Blcl9waXhlbCA+PiAzOwogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKLQlpbnQgeHJlcywgaGZyb250LCBoc3luYywgaGJhY2s7Ci0JaW50IHlyZXMsIHZmcm9udCwgdnN5bmMsIHZiYWNrOwogCiAJc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7CiAJY2FzZSAxOgpAQCAtNzgyLDEwICs2MzYsOSBAQAogCQlicmVhazsKIAogCWNhc2UgMTY6Ci0JY2FzZSAyNDoKIAljYXNlIDMyOgogCQlpbmZvLT5maXgubGluZV9sZW5ndGggPSB2YXItPnhyZXNfdmlydHVhbCAqIG1heGNsb2NraWR4OwotCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX0RJUkVDVENPTE9SOworCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtODI3LDkwICs2ODAsMzMgQEAKIAlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDE2OgogCWNhc2UgMzI6Ci0JCWlmIChyZWdzLT5Ib3JpelJlcyA8PSA4MDApCisJCWlmICh2YXItPnhyZXMgPD0gODAwKQogCQkJLyogWGJoIGhhcyB0aGlzIHR5cGUgb2YgY2xvY2sgZm9yIDMyLWJpdCAqLwogCQkJZnJlcSAvPSAyOwogCQlicmVhazsKIAl9CiAjZW5kaWYKLQotCWJlc3RjbG9jayhmcmVxLCAmcmVncy0+ZnJlcSwgJnJlZ3MtPm5vbSwgJnJlZ3MtPmRlbiwgJnJlZ3MtPmRpdiwKLQkJICBtYXhjbG9jayk7Ci0JcmVncy0+bWNsayA9IGNpcnJ1c2ZiX2dldF9tY2xrKGZyZXEsIHZhci0+Yml0c19wZXJfcGl4ZWwsCi0JCQkJCSZyZWdzLT5kaXZNQ0xLKTsKLQotCXhyZXMgPSB2YXItPnhyZXM7Ci0JaGZyb250ID0gdmFyLT5yaWdodF9tYXJnaW47Ci0JaHN5bmMgPSB2YXItPmhzeW5jX2xlbjsKLQloYmFjayA9IHZhci0+bGVmdF9tYXJnaW47Ci0KLQl5cmVzID0gdmFyLT55cmVzOwotCXZmcm9udCA9IHZhci0+bG93ZXJfbWFyZ2luOwotCXZzeW5jID0gdmFyLT52c3luY19sZW47Ci0JdmJhY2sgPSB2YXItPnVwcGVyX21hcmdpbjsKLQotCWlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfRE9VQkxFKSB7Ci0JCXlyZXMgKj0gMjsKLQkJdmZyb250ICo9IDI7Ci0JCXZzeW5jICo9IDI7Ci0JCXZiYWNrICo9IDI7Ci0JfSBlbHNlIGlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkgewotCQl5cmVzID0gKHlyZXMgKyAxKSAvIDI7Ci0JCXZmcm9udCA9ICh2ZnJvbnQgKyAxKSAvIDI7Ci0JCXZzeW5jID0gKHZzeW5jICsgMSkgLyAyOwotCQl2YmFjayA9ICh2YmFjayArIDEpIC8gMjsKLQl9Ci0JcmVncy0+SG9yaXpSZXMgPSB4cmVzOwotCXJlZ3MtPkhvcml6VG90YWwgPSAoeHJlcyArIGhmcm9udCArIGhzeW5jICsgaGJhY2spIC8gOCAtIDU7Ci0JcmVncy0+SG9yaXpEaXNwRW5kID0geHJlcyAvIDggLSAxOwotCXJlZ3MtPkhvcml6QmxhbmtTdGFydCA9IHhyZXMgLyA4OwotCS8qIGRvZXMgbm90IGNvdW50IHdpdGggIi01IiAqLwotCXJlZ3MtPkhvcml6QmxhbmtFbmQgPSByZWdzLT5Ib3JpelRvdGFsICsgNTsKLQlyZWdzLT5Ib3JpelN5bmNTdGFydCA9ICh4cmVzICsgaGZyb250KSAvIDggKyAxOwotCXJlZ3MtPkhvcml6U3luY0VuZCA9ICh4cmVzICsgaGZyb250ICsgaHN5bmMpIC8gOCArIDE7Ci0KLQlyZWdzLT5WZXJ0UmVzID0geXJlczsKLQlyZWdzLT5WZXJ0VG90YWwgPSB5cmVzICsgdmZyb250ICsgdnN5bmMgKyB2YmFjayAtIDI7Ci0JcmVncy0+VmVydERpc3BFbmQgPSB5cmVzIC0gMTsKLQlyZWdzLT5WZXJ0QmxhbmtTdGFydCA9IHlyZXM7Ci0JcmVncy0+VmVydEJsYW5rRW5kID0gcmVncy0+VmVydFRvdGFsOwotCXJlZ3MtPlZlcnRTeW5jU3RhcnQgPSB5cmVzICsgdmZyb250IC0gMTsKLQlyZWdzLT5WZXJ0U3luY0VuZCA9IHlyZXMgKyB2ZnJvbnQgKyB2c3luYyAtIDE7Ci0KLQlpZiAocmVncy0+VmVydFJlcyA+PSAxMDI0KSB7Ci0JCXJlZ3MtPlZlcnRUb3RhbCAvPSAyOwotCQlyZWdzLT5WZXJ0U3luY1N0YXJ0IC89IDI7Ci0JCXJlZ3MtPlZlcnRTeW5jRW5kIC89IDI7Ci0JCXJlZ3MtPlZlcnREaXNwRW5kIC89IDI7Ci0JfQotCWlmIChyZWdzLT5tdWx0aXBsZXhpbmcpIHsKLQkJcmVncy0+SG9yaXpUb3RhbCAvPSAyOwotCQlyZWdzLT5Ib3JpelN5bmNTdGFydCAvPSAyOwotCQlyZWdzLT5Ib3JpelN5bmNFbmQgLz0gMjsKLQkJcmVncy0+SG9yaXpEaXNwRW5kIC89IDI7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNpcnJ1c2ZiX3NldF9tY2xrKGNvbnN0IHN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbywgaW50IHZhbCwKLQkJCQlpbnQgZGl2KQorc3RhdGljIHZvaWQgY2lycnVzZmJfc2V0X21jbGtfYXNfc291cmNlKGNvbnN0IHN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbywKKwkJCQkJaW50IGRpdikKIHsKKwl1bnNpZ25lZCBjaGFyIG9sZDFmLCBvbGQxZTsKIAlhc3NlcnQoY2luZm8gIT0gTlVMTCk7CisJb2xkMWYgPSB2Z2FfcnNlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFGKSAmIH4weDQwOwogCi0JaWYgKGRpdiA9PSAyKSB7Ci0JCS8qIFZDTEsgPSBNQ0xLLzIgKi8KLQkJdW5zaWduZWQgY2hhciBvbGQgPSB2Z2FfcnNlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFFKTsKLQkJdmdhX3dzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRSwgb2xkIHwgMHgxKTsKLQkJdmdhX3dzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRiwgMHg0MCB8ICh2YWwgJiAweDNmKSk7Ci0JfSBlbHNlIGlmIChkaXYgPT0gMSkgewotCQkvKiBWQ0xLID0gTUNMSyAqLwotCQl1bnNpZ25lZCBjaGFyIG9sZCA9IHZnYV9yc2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUUpOwotCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFFLCBvbGQgJiB+MHgxKTsKLQkJdmdhX3dzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRiwgMHg0MCB8ICh2YWwgJiAweDNmKSk7Ci0JfSBlbHNlIHsKLQkJdmdhX3dzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRiwgdmFsICYgMHgzZik7CisJaWYgKGRpdikgeworCQlEUFJJTlRLKCJTZXQgJXMgYXMgcGl4Y2xvY2sgc291cmNlLlxuIiwKKwkJCQkJKGRpdiA9PSAyKSA/ICJNQ0xLLzIiIDogIk1DTEsiKTsKKwkJb2xkMWYgfD0gMHg0MDsKKwkJb2xkMWUgPSB2Z2FfcnNlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFFKSAmIH4weDE7CisJCWlmIChkaXYgPT0gMikKKwkJCW9sZDFlIHw9IDE7CisKKwkJdmdhX3dzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRSwgb2xkMWUpOwogCX0KKwl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFGLCBvbGQxZik7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC05MjcsNiArNzIzLDEwIEBACiAJdW5zaWduZWQgY2hhciB0bXA7CiAJaW50IG9mZnNldCA9IDAsIGVycjsKIAljb25zdCBzdHJ1Y3QgY2lycnVzZmJfYm9hcmRfaW5mb19yZWMgKmJpOworCWludCBoZGlzcGVuZCwgaHN5bmNzdGFydCwgaHN5bmNlbmQsIGh0b3RhbDsKKwlpbnQgeXJlcywgdmRpc3BlbmQsIHZzeW5jc3RhcnQsIHZzeW5jZW5kLCB2dG90YWw7CisJbG9uZyBmcmVxOworCWludCBub20sIGRlbiwgZGl2OwogCiAJRFBSSU5USygiRU5URVJcbiIpOwogCURQUklOVEsoIlJlcXVlc3RlZCBtb2RlOiAlZHglZHglZFxuIiwKQEAgLTk0NCw3NiArNzQ0LDExNyBAQAogCiAJYmkgPSAmY2lycnVzZmJfYm9hcmRfaW5mb1tjaW5mby0+YnR5cGVdOwogCisJaHN5bmNzdGFydCA9IHZhci0+eHJlcyArIHZhci0+cmlnaHRfbWFyZ2luOworCWhzeW5jZW5kID0gaHN5bmNzdGFydCArIHZhci0+aHN5bmNfbGVuOworCWh0b3RhbCA9IChoc3luY2VuZCArIHZhci0+bGVmdF9tYXJnaW4pIC8gOCAtIDU7CisJaGRpc3BlbmQgPSB2YXItPnhyZXMgLyA4IC0gMTsKKwloc3luY3N0YXJ0ID0gaHN5bmNzdGFydCAvIDggKyAxOworCWhzeW5jZW5kID0gaHN5bmNlbmQgLyA4ICsgMTsKKworCXlyZXMgPSB2YXItPnlyZXM7CisJdnN5bmNzdGFydCA9IHlyZXMgKyB2YXItPmxvd2VyX21hcmdpbjsKKwl2c3luY2VuZCA9IHZzeW5jc3RhcnQgKyB2YXItPnZzeW5jX2xlbjsKKwl2dG90YWwgPSB2c3luY2VuZCArIHZhci0+dXBwZXJfbWFyZ2luOworCXZkaXNwZW5kID0geXJlcyAtIDE7CisKKwlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX0RPVUJMRSkgeworCQl5cmVzICo9IDI7CisJCXZzeW5jc3RhcnQgKj0gMjsKKwkJdnN5bmNlbmQgKj0gMjsKKwkJdnRvdGFsICo9IDI7CisJfSBlbHNlIGlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkgeworCQl5cmVzID0gKHlyZXMgKyAxKSAvIDI7CisJCXZzeW5jc3RhcnQgPSAodnN5bmNzdGFydCArIDEpIC8gMjsKKwkJdnN5bmNlbmQgPSAodnN5bmNlbmQgKyAxKSAvIDI7CisJCXZ0b3RhbCA9ICh2dG90YWwgKyAxKSAvIDI7CisJfQorCisJdnRvdGFsIC09IDI7CisJdnN5bmNzdGFydCAtPSAxOworCXZzeW5jZW5kIC09IDE7CisKKwlpZiAoeXJlcyA+PSAxMDI0KSB7CisJCXZ0b3RhbCAvPSAyOworCQl2c3luY3N0YXJ0IC89IDI7CisJCXZzeW5jZW5kIC89IDI7CisJCXZkaXNwZW5kIC89IDI7CisJfQorCWlmIChyZWdzLm11bHRpcGxleGluZykgeworCQlodG90YWwgLz0gMjsKKwkJaHN5bmNzdGFydCAvPSAyOworCQloc3luY2VuZCAvPSAyOworCQloZGlzcGVuZCAvPSAyOworCX0KIAkvKiB1bmxvY2sgcmVnaXN0ZXIgVkdBX0NSVENfSF9UT1RBTC4uQ1JUNyAqLwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfU1lOQ19FTkQsIDB4MjApOwkvKiBwcmV2aW91c2x5OiAweDAwKSAqLwogCiAJLyogaWYgZGVidWdnaW5nIGlzIGVuYWJsZWQsIGFsbCBwYXJhbWV0ZXJzIGdldCBvdXRwdXQgYmVmb3JlIHdyaXRpbmcgKi8KLQlEUFJJTlRLKCJDUlQwOiAlbGRcbiIsIHJlZ3MuSG9yaXpUb3RhbCk7Ci0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9UT1RBTCwgcmVncy5Ib3JpelRvdGFsKTsKKwlEUFJJTlRLKCJDUlQwOiAlZFxuIiwgaHRvdGFsKTsKKwl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX1RPVEFMLCBodG90YWwpOwogCi0JRFBSSU5USygiQ1JUMTogJWxkXG4iLCByZWdzLkhvcml6RGlzcEVuZCk7Ci0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9ESVNQLCByZWdzLkhvcml6RGlzcEVuZCk7CisJRFBSSU5USygiQ1JUMTogJWRcbiIsIGhkaXNwZW5kKTsKKwl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX0RJU1AsIGhkaXNwZW5kKTsKIAotCURQUklOVEsoIkNSVDI6ICVsZFxuIiwgcmVncy5Ib3JpekJsYW5rU3RhcnQpOwotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX0hfQkxBTktfU1RBUlQsIHJlZ3MuSG9yaXpCbGFua1N0YXJ0KTsKKwlEUFJJTlRLKCJDUlQyOiAlZFxuIiwgdmFyLT54cmVzIC8gOCk7CisJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9CTEFOS19TVEFSVCwgdmFyLT54cmVzIC8gOCk7CiAKIAkvKiAgKyAxMjg6IENvbXBhdGlibGUgcmVhZCAqLwotCURQUklOVEsoIkNSVDM6IDEyOCslbGRcbiIsIHJlZ3MuSG9yaXpCbGFua0VuZCAlIDMyKTsKKwlEUFJJTlRLKCJDUlQzOiAxMjgrJWRcbiIsIChodG90YWwgKyA1KSAlIDMyKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX0JMQU5LX0VORCwKLQkJIDEyOCArIChyZWdzLkhvcml6QmxhbmtFbmQgJSAzMikpOworCQkgMTI4ICsgKChodG90YWwgKyA1KSAlIDMyKSk7CiAKLQlEUFJJTlRLKCJDUlQ0OiAlbGRcbiIsIHJlZ3MuSG9yaXpTeW5jU3RhcnQpOwotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX0hfU1lOQ19TVEFSVCwgcmVncy5Ib3JpelN5bmNTdGFydCk7CisJRFBSSU5USygiQ1JUNDogJWRcbiIsIGhzeW5jc3RhcnQpOworCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX0hfU1lOQ19TVEFSVCwgaHN5bmNzdGFydCk7CiAKLQl0bXAgPSByZWdzLkhvcml6U3luY0VuZCAlIDMyOwotCWlmIChyZWdzLkhvcml6QmxhbmtFbmQgJiAzMikKKwl0bXAgPSBoc3luY2VuZCAlIDMyOworCWlmICgoaHRvdGFsICsgNSkgJiAzMikKIAkJdG1wICs9IDEyODsKIAlEUFJJTlRLKCJDUlQ1OiAlZFxuIiwgdG1wKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX1NZTkNfRU5ELCB0bXApOwogCi0JRFBSSU5USygiQ1JUNjogJWxkXG4iLCByZWdzLlZlcnRUb3RhbCAmIDB4ZmYpOwotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfVE9UQUwsIChyZWdzLlZlcnRUb3RhbCAmIDB4ZmYpKTsKKwlEUFJJTlRLKCJDUlQ2OiAlZFxuIiwgdnRvdGFsICYgMHhmZik7CisJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfVl9UT1RBTCwgdnRvdGFsICYgMHhmZik7CiAKIAl0bXAgPSAxNjsJCS8qIExpbmVDb21wYXJlIGJpdCAjOSAqLwotCWlmIChyZWdzLlZlcnRUb3RhbCAmIDI1NikKKwlpZiAodnRvdGFsICYgMjU2KQogCQl0bXAgfD0gMTsKLQlpZiAocmVncy5WZXJ0RGlzcEVuZCAmIDI1NikKKwlpZiAodmRpc3BlbmQgJiAyNTYpCiAJCXRtcCB8PSAyOwotCWlmIChyZWdzLlZlcnRTeW5jU3RhcnQgJiAyNTYpCisJaWYgKHZzeW5jc3RhcnQgJiAyNTYpCiAJCXRtcCB8PSA0OwotCWlmIChyZWdzLlZlcnRCbGFua1N0YXJ0ICYgMjU2KQorCWlmICgodmRpc3BlbmQgKyAxKSAmIDI1NikKIAkJdG1wIHw9IDg7Ci0JaWYgKHJlZ3MuVmVydFRvdGFsICYgNTEyKQorCWlmICh2dG90YWwgJiA1MTIpCiAJCXRtcCB8PSAzMjsKLQlpZiAocmVncy5WZXJ0RGlzcEVuZCAmIDUxMikKKwlpZiAodmRpc3BlbmQgJiA1MTIpCiAJCXRtcCB8PSA2NDsKLQlpZiAocmVncy5WZXJ0U3luY1N0YXJ0ICYgNTEyKQorCWlmICh2c3luY3N0YXJ0ICYgNTEyKQogCQl0bXAgfD0gMTI4OwogCURQUklOVEsoIkNSVDc6ICVkXG4iLCB0bXApOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX09WRVJGTE9XLCB0bXApOwogCiAJdG1wID0gMHg0MDsJCS8qIExpbmVDb21wYXJlIGJpdCAjOCAqLwotCWlmIChyZWdzLlZlcnRCbGFua1N0YXJ0ICYgNTEyKQorCWlmICgodmRpc3BlbmQgKyAxKSAmIDUxMikKIAkJdG1wIHw9IDB4MjA7CiAJaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9ET1VCTEUpCiAJCXRtcCB8PSAweDgwOwogCURQUklOVEsoIkNSVDk6ICVkXG4iLCB0bXApOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX01BWF9TQ0FOLCB0bXApOwogCi0JRFBSSU5USygiQ1JUMTA6ICVsZFxuIiwgcmVncy5WZXJ0U3luY1N0YXJ0ICYgMHhmZik7Ci0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfVl9TWU5DX1NUQVJULCByZWdzLlZlcnRTeW5jU3RhcnQgJiAweGZmKTsKKwlEUFJJTlRLKCJDUlQxMDogJWRcbiIsIHZzeW5jc3RhcnQgJiAweGZmKTsKKwl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX1NZTkNfU1RBUlQsIHZzeW5jc3RhcnQgJiAweGZmKTsKIAotCURQUklOVEsoIkNSVDExOiA2NCszMislbGRcbiIsIHJlZ3MuVmVydFN5bmNFbmQgJSAxNik7Ci0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfVl9TWU5DX0VORCwgcmVncy5WZXJ0U3luY0VuZCAlIDE2ICsgNjQgKyAzMik7CisJRFBSSU5USygiQ1JUMTE6IDY0KzMyKyVkXG4iLCB2c3luY2VuZCAlIDE2KTsKKwl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX1NZTkNfRU5ELCB2c3luY2VuZCAlIDE2ICsgNjQgKyAzMik7CiAKLQlEUFJJTlRLKCJDUlQxMjogJWxkXG4iLCByZWdzLlZlcnREaXNwRW5kICYgMHhmZik7Ci0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfVl9ESVNQX0VORCwgcmVncy5WZXJ0RGlzcEVuZCAmIDB4ZmYpOworCURQUklOVEsoIkNSVDEyOiAlZFxuIiwgdmRpc3BlbmQgJiAweGZmKTsKKwl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX0RJU1BfRU5ELCB2ZGlzcGVuZCAmIDB4ZmYpOwogCi0JRFBSSU5USygiQ1JUMTU6ICVsZFxuIiwgcmVncy5WZXJ0QmxhbmtTdGFydCAmIDB4ZmYpOwotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfQkxBTktfU1RBUlQsIHJlZ3MuVmVydEJsYW5rU3RhcnQgJiAweGZmKTsKKwlEUFJJTlRLKCJDUlQxNTogJWRcbiIsICh2ZGlzcGVuZCArIDEpICYgMHhmZik7CisJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfVl9CTEFOS19TVEFSVCwgKHZkaXNwZW5kICsgMSkgJiAweGZmKTsKIAotCURQUklOVEsoIkNSVDE2OiAlbGRcbiIsIHJlZ3MuVmVydEJsYW5rRW5kICYgMHhmZik7Ci0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfVl9CTEFOS19FTkQsIHJlZ3MuVmVydEJsYW5rRW5kICYgMHhmZik7CisJRFBSSU5USygiQ1JUMTY6ICVkXG4iLCB2dG90YWwgJiAweGZmKTsKKwl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX0JMQU5LX0VORCwgdnRvdGFsICYgMHhmZik7CiAKIAlEUFJJTlRLKCJDUlQxODogMHhmZlxuIik7CiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfTElORV9DT01QQVJFLCAweGZmKTsKQEAgLTEwMjEsMzggKzg2Miw1MyBAQAogCXRtcCA9IDA7CiAJaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9JTlRFUkxBQ0VEKQogCQl0bXAgfD0gMTsKLQlpZiAocmVncy5Ib3JpekJsYW5rRW5kICYgNjQpCisJaWYgKChodG90YWwgKyA1KSAmIDY0KQogCQl0bXAgfD0gMTY7Ci0JaWYgKHJlZ3MuSG9yaXpCbGFua0VuZCAmIDEyOCkKKwlpZiAoKGh0b3RhbCArIDUpICYgMTI4KQogCQl0bXAgfD0gMzI7Ci0JaWYgKHJlZ3MuVmVydEJsYW5rRW5kICYgMjU2KQorCWlmICh2dG90YWwgJiAyNTYpCiAJCXRtcCB8PSA2NDsKLQlpZiAocmVncy5WZXJ0QmxhbmtFbmQgJiA1MTIpCisJaWYgKHZ0b3RhbCAmIDUxMikKIAkJdG1wIHw9IDEyODsKIAogCURQUklOVEsoIkNSVDFhOiAlZFxuIiwgdG1wKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBDTF9DUlQxQSwgdG1wKTsKIAorCWZyZXEgPSBQSUNPUzJLSFoodmFyLT5waXhjbG9jayk7CisJYmVzdGNsb2NrKGZyZXEsICZub20sICZkZW4sICZkaXYpOworCiAJLyogc2V0IFZDTEswICovCiAJLyogaGFyZHdhcmUgUmVmQ2xvY2s6IDE0LjMxODE4IE1IeiAqLwogCS8qIGZvcm11bGE6IFZDbGsgPSAoT1NDICogTikgLyAoRCAqICgxK1ApKSAqLwogCS8qIEV4YW1wbGU6IFZDbGsgPSAoMTQuMzE4MTggKiA5MSkgLyAoMjMgKiAoMSsxKSkgPSAyOC4zMjUgTUh6ICovCiAKLQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSQiwgcmVncy5ub20pOwotCXRtcCA9IHJlZ3MuZGVuIDw8IDE7Ci0JaWYgKHJlZ3MuZGl2ICE9IDApCi0JCXRtcCB8PSAxOworCWlmIChjaW5mby0+YnR5cGUgPT0gQlRfQUxQSU5FKSB7CisJCS8qIGlmIGZyZXEgaXMgY2xvc2UgdG8gbWNsayBvciBtY2xrLzIgc2VsZWN0IG1jbGsKKwkJICogYXMgY2xvY2sgc291cmNlCisJCSAqLworCQlpbnQgZGl2TUNMSyA9IGNpcnJ1c2ZiX2NoZWNrX21jbGsoY2luZm8sIGZyZXEpOworCQlpZiAoZGl2TUNMSykgIHsKKwkJCW5vbSA9IDA7CisJCQljaXJydXNmYl9zZXRfbWNsa19hc19zb3VyY2UoY2luZm8sIGRpdk1DTEspOworCQl9CisJfQorCWlmIChub20pIHsKKwkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUkIsIG5vbSk7CisJCXRtcCA9IGRlbiA8PCAxOworCQlpZiAoZGl2ICE9IDApCisJCQl0bXAgfD0gMTsKIAotCS8qIDYgYml0IGRlbm9tOyBPTkxZIDU0MzQhISEgKGJ1Z2dlZCBtZSAxMCBkYXlzKSAqLwotCWlmICgoY2luZm8tPmJ0eXBlID09IEJUX1NENjQpIHx8Ci0JICAgIChjaW5mby0+YnR5cGUgPT0gQlRfQUxQSU5FKSB8fAotCSAgICAoY2luZm8tPmJ0eXBlID09IEJUX0dENTQ4MCkpCi0JCXRtcCB8PSAweDgwOworCQkvKiA2IGJpdCBkZW5vbTsgT05MWSA1NDM0ISEhIChidWdnZWQgbWUgMTAgZGF5cykgKi8KKwkJaWYgKChjaW5mby0+YnR5cGUgPT0gQlRfU0Q2NCkgfHwKKwkJICAgIChjaW5mby0+YnR5cGUgPT0gQlRfQUxQSU5FKSB8fAorCQkgICAgKGNpbmZvLT5idHlwZSA9PSBCVF9HRDU0ODApKQorCQkJdG1wIHw9IDB4ODA7CiAKLQlEUFJJTlRLKCJDTF9TRVFSMUI6ICVsZFxuIiwgKGxvbmcpIHRtcCk7Ci0JdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFCLCB0bXApOworCQlEUFJJTlRLKCJDTF9TRVFSMUI6ICVsZFxuIiwgKGxvbmcpIHRtcCk7CisJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVIxQiwgdG1wKTsKKwl9CiAKLQlpZiAocmVncy5WZXJ0UmVzID49IDEwMjQpCisJaWYgKHlyZXMgPj0gMTAyNCkKIAkJLyogMTI4MHgxMDI0ICovCiAJCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX01PREUsIDB4YzcpOwogCWVsc2UKQEAgLTEwNjYsNyArOTIyLDcgQEAKIAkvKiBkb24ndCBrbm93IGlmIGl0IHdvdWxkIGh1cnQgdG8gYWxzbyBwcm9ncmFtIHRoaXMgaWYgbm8gaW50ZXJsYWNlZCAqLwogCS8qIG1vZGUgaXMgdXNlZCwgYnV0IEkgZmVlbCBiZXR0ZXIgdGhpcyB3YXkuLiA6LSkgKi8KIAlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX0lOVEVSTEFDRUQpCi0JCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1JFR1MsIHJlZ3MuSG9yaXpUb3RhbCAvIDIpOworCQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19SRUdTLCBodG90YWwgLyAyKTsKIAllbHNlCiAJCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1JFR1MsIDB4MDApOwkvKiBpbnRlcmxhY2UgY29udHJvbCAqLwogCkBAIC0xMjQwLDcgKzEwOTYsNiBAQAogCiAJCWNhc2UgQlRfQUxQSU5FOgogCQkJRFBSSU5USygiIChmb3IgR0Q1NDN4KVxuIik7Ci0JCQljaXJydXNmYl9zZXRfbWNsayhjaW5mbywgcmVncy5tY2xrLCByZWdzLmRpdk1DTEspOwogCQkJLyogV2UgYWxyZWFkeSBzZXQgU1JGIGFuZCBTUjFGICovCiAJCQlicmVhazsKIApAQCAtMTMxMiwxMSArMTE2Nyw3IEBACiAKIAkJY2FzZSBCVF9BTFBJTkU6CiAJCQlEUFJJTlRLKCIgKGZvciBHRDU0M3gpXG4iKTsKLQkJCWlmIChyZWdzLkhvcml6UmVzID49IDEwMjQpCi0JCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsIDB4YTcpOwotCQkJZWxzZQotCQkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LCAweGEzKTsKLQkJCWNpcnJ1c2ZiX3NldF9tY2xrKGNpbmZvLCByZWdzLm1jbGssIHJlZ3MuZGl2TUNMSyk7CisJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHhhNyk7CiAJCQlicmVhazsKIAogCQljYXNlIEJUX0dENTQ4MDoKQEAgLTEzNjAsNyArMTIxMSw3IEBACiAJICovCiAKIAllbHNlIGlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDMyKSB7Ci0JCURQUklOVEsoImNpcnJ1c2ZiOiBwcmVwYXJpbmcgZm9yIDI0LzMyIGJpdCBkZWVwIGRpc3BsYXlcbiIpOworCQlEUFJJTlRLKCJjaXJydXNmYjogcHJlcGFyaW5nIGZvciAzMiBiaXQgZGVlcCBkaXNwbGF5XG4iKTsKIAkJc3dpdGNoIChjaW5mby0+YnR5cGUpIHsKIAkJY2FzZSBCVF9TRDY0OgogCQkJLyogRXh0ZW5kZWQgU2VxdWVuY2VyIE1vZGU6IDI1NmMgY29sLiBtb2RlICovCkBAIC0xMzk0LDcgKzEyNDUsNiBAQAogCQljYXNlIEJUX0FMUElORToKIAkJCURQUklOVEsoIiAoZm9yIEdENTQzeClcbiIpOwogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsIDB4YTkpOwotCQkJY2lycnVzZmJfc2V0X21jbGsoY2luZm8sIHJlZ3MubWNsaywgcmVncy5kaXZNQ0xLKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRfR0Q1NDgwOgpAQCAtMTk0OSw4ICsxNzk5LDYgQEAKIAkvKiBtaXNjLi4uICovCiAJV0hEUihjaW5mbywgMCk7CS8qIEhpZGRlbiBEQUMgcmVnaXN0ZXI6IC0gKi8KIAotCXByaW50ayhLRVJOX0RFQlVHICJjaXJydXNmYjogVGhpcyBib2FyZCBoYXMgJWxkIGJ5dGVzIG9mIERSQU0gbWVtb3J5XG4iLAotCQlpbmZvLT5zY3JlZW5fc2l6ZSk7CiAJRFBSSU5USygiRVhJVFxuIik7CiAJcmV0dXJuOwogfQpAQCAtMjEyMiw3ICsxOTcwLDcgQEAKICAqIGJhc2VkIG9uIHRoZSBEUkFNIGJhbmR3aWR0aCBiaXQgYW5kIERSQU0gYmFuayBzd2l0Y2hpbmcgYml0LiAgVGhpcwogICogd29ya3Mgd2l0aCAxTUIsIDJNQiBhbmQgNE1CIGNvbmZpZ3VyYXRpb25zICh3aGljaCB0aGUgTW90b3JvbGEgYm9hcmRzCiAgKiBzZWVtIHRvIGhhdmUuICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGNpcnJ1c2ZiX2dldF9tZW1zaXplKHU4IF9faW9tZW0gKnJlZ2Jhc2UpCitzdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdCBjaXJydXNmYl9nZXRfbWVtc2l6ZSh1OCBfX2lvbWVtICpyZWdiYXNlKQogewogCXVuc2lnbmVkIGxvbmcgbWVtOwogCXVuc2lnbmVkIGNoYXIgU1JGOwpAQCAtMjE4OCw4ICsyMDM2LDcgQEAKIAogc3RhdGljIHZvaWQgY2lycnVzZmJfcGNpX3VubWFwKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGNpbmZvLT5wZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihpbmZvLT5kZXZpY2UpOwogCiAJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CiAjaWYgMCAvKiBpZiBzeXN0ZW0gZGlkbid0IGNsYWltIHRoaXMgcmVnaW9uLCB3ZSB3b3VsZC4uLiAqLwpAQCAtMjIwNSwyMCArMjA1MiwyMiBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0IGNpcnJ1c2ZiX3pvcnJvX3VubWFwKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKLQl6b3Jyb19yZWxlYXNlX2RldmljZShjaW5mby0+emRldik7CisJc3RydWN0IHpvcnJvX2RldiAqemRldiA9IHRvX3pvcnJvX2RldihpbmZvLT5kZXZpY2UpOworCisJem9ycm9fcmVsZWFzZV9kZXZpY2UoemRldik7CiAKIAlpZiAoY2luZm8tPmJ0eXBlID09IEJUX1BJQ0FTU080KSB7CiAJCWNpbmZvLT5yZWdiYXNlIC09IDB4NjAwMDAwOwogCQlpb3VubWFwKCh2b2lkICopY2luZm8tPnJlZ2Jhc2UpOwogCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKIAl9IGVsc2UgewotCQlpZiAoem9ycm9fcmVzb3VyY2Vfc3RhcnQoY2luZm8tPnpkZXYpID4gMHgwMTAwMDAwMCkKKwkJaWYgKHpvcnJvX3Jlc291cmNlX3N0YXJ0KHpkZXYpID4gMHgwMTAwMDAwMCkKIAkJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwogCX0KIH0KICNlbmRpZiAvKiBDT05GSUdfWk9SUk8gKi8KIAotc3RhdGljIGludCBjaXJydXNmYl9zZXRfZmJpbmZvKHN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIGludCBfX2RldmluaXQgY2lycnVzZmJfc2V0X2ZiaW5mbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7CiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmaW5mby0+dmFyOwpAQCAtMjIzNSw3ICsyMDg0LDcgQEAKIAlpZiAoY2luZm8tPmJ0eXBlID09IEJUX0dENTQ4MCkgewogCQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSAxNikKIAkJCWluZm8tPnNjcmVlbl9iYXNlICs9IDEgKiBNQl87Ci0JCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDI0IHx8IHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMzIpCisJCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDMyKQogCQkJaW5mby0+c2NyZWVuX2Jhc2UgKz0gMiAqIE1CXzsKIAl9CiAKQEAgLTIyNjIsNyArMjExMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY2lycnVzZmJfcmVnaXN0ZXIoc3RydWN0IGZiX2luZm8gKmluZm8pCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjaXJydXNmYl9yZWdpc3RlcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7CiAJaW50IGVycjsKQEAgLTIyNzgsMjMgKzIxMjcsMjcgQEAKIAkvKiBzYW5pdHkgY2hlY2tzICovCiAJYXNzZXJ0KGJ0eXBlICE9IEJUX05PTkUpOwogCisJLyogc2V0IGFsbCB0aGUgdml0YWwgc3R1ZmYgKi8KKwljaXJydXNmYl9zZXRfZmJpbmZvKGluZm8pOworCiAJRFBSSU5USygiY2lycnVzZmI6IChSQU0gc3RhcnQgc2V0IHRvOiAweCVwKVxuIiwgaW5mby0+c2NyZWVuX2Jhc2UpOwogCi0JLyogTWFrZSBwcmV0ZW5kIHdlJ3ZlIHNldCB0aGUgdmFyIHNvIG91ciBzdHJ1Y3R1cmVzIGFyZSBpbiBhICJnb29kIiAqLwotCS8qIHN0YXRlLCBldmVuIHRob3VnaCB3ZSBoYXZlbid0IHdyaXR0ZW4gdGhlIG1vZGUgdG8gdGhlIGh3IHlldC4uLiAgKi8KLQlpbmZvLT52YXIgPSBjaXJydXNmYl9wcmVkZWZpbmVkW2NpcnJ1c2ZiX2RlZl9tb2RlXS52YXI7CisJZXJyID0gZmJfZmluZF9tb2RlKCZpbmZvLT52YXIsIGluZm8sIG1vZGVfb3B0aW9uLCBOVUxMLCAwLCBOVUxMLCA4KTsKKwlpZiAoIWVycikgeworCQlEUFJJTlRLKCJ3cm9uZyBpbml0aWFsIHZpZGVvIG1vZGVcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9kZWFsbG9jX2NtYXA7CisJfQorCiAJaW5mby0+dmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwogCiAJZXJyID0gY2lycnVzZmJfZGVjb2RlX3ZhcigmaW5mby0+dmFyLCAmY2luZm8tPmN1cnJlbnRtb2RlLCBpbmZvKTsKIAlpZiAoZXJyIDwgMCkgewogCQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCiAJCURQUklOVEsoImNob2tpbmcgb24gZGVmYXVsdCB2YXIuLi4gdW1tLCBubyBnb29kLlxuIik7Ci0JCWdvdG8gZXJyX3VubWFwX2NpcnJ1c2ZiOworCQlnb3RvIGVycl9kZWFsbG9jX2NtYXA7CiAJfQogCi0JLyogc2V0IGFsbCB0aGUgdml0YWwgc3R1ZmYgKi8KLQljaXJydXNmYl9zZXRfZmJpbmZvKGluZm8pOwotCiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjaXJydXNmYjogY291bGQgbm90IHJlZ2lzdGVyICIKQEAgLTIzMDcsNyArMjE2MCw2IEBACiAKIGVycl9kZWFsbG9jX2NtYXA6CiAJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKLWVycl91bm1hcF9jaXJydXNmYjoKIAljaW5mby0+dW5tYXAoaW5mbyk7CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIAlyZXR1cm4gZXJyOwpAQCAtMjMzMCw4ICsyMTgyLDggQEAKIH0KIAogI2lmZGVmIENPTkZJR19QQ0kKLXN0YXRpYyBpbnQgY2lycnVzZmJfcGNpX3JlZ2lzdGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNpcnJ1c2ZiX3BjaV9yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm87CiAJc3RydWN0IGZiX2luZm8gKmluZm87CkBAIC0yMzUzLDcgKzIyMDUsNiBAQAogCX0KIAogCWNpbmZvID0gaW5mby0+cGFyOwotCWNpbmZvLT5wZGV2ID0gcGRldjsKIAljaW5mby0+YnR5cGUgPSBidHlwZSA9IChlbnVtIGNpcnJ1c19ib2FyZCkgZW50LT5kcml2ZXJfZGF0YTsKIAogCURQUklOVEsoIiBGb3VuZCBQQ0kgZGV2aWNlLCBiYXNlIGFkZHJlc3MgMCBpcyAweCV4LCBidHlwZSBzZXQgdG8gJWRcbiIsCkBAIC0yNDU5LDggKzIzMTAsOCBAQAogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAogI2lmZGVmIENPTkZJR19aT1JSTwotc3RhdGljIGludCBjaXJydXNmYl96b3Jyb19yZWdpc3RlcihzdHJ1Y3Qgem9ycm9fZGV2ICp6LAotCQkJCSAgIGNvbnN0IHN0cnVjdCB6b3Jyb19kZXZpY2VfaWQgKmVudCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNpcnJ1c2ZiX3pvcnJvX3JlZ2lzdGVyKHN0cnVjdCB6b3Jyb19kZXYgKnosCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IHpvcnJvX2RldmljZV9pZCAqZW50KQogewogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbzsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKQEAgLTI0ODksNyArMjM0MCw2IEBACiAJYXNzZXJ0KHopOwogCWFzc2VydChidHlwZSAhPSBCVF9OT05FKTsKIAotCWNpbmZvLT56ZGV2ID0gejsKIAlib2FyZF9hZGRyID0gem9ycm9fcmVzb3VyY2Vfc3RhcnQoeik7CiAJYm9hcmRfc2l6ZSA9IHpvcnJvX3Jlc291cmNlX2xlbih6KTsKIAlpbmZvLT5zY3JlZW5fc2l6ZSA9IHNpemU7CkBAIC0yNjIxLDE3ICsyNDcxLDE3IEBACiAJCXJldHVybiAwOwogCiAJd2hpbGUgKCh0aGlzX29wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgewotCQlpZiAoISp0aGlzX29wdCkgY29udGludWU7CisJCWlmICghKnRoaXNfb3B0KQorCQkJY29udGludWU7CiAKIAkJRFBSSU5USygiY2lycnVzZmJfc2V0dXA6IG9wdGlvbiAnJXMnXG4iLCB0aGlzX29wdCk7CiAKLQkJZm9yIChpID0gMDsgaSA8IE5VTV9UT1RBTF9NT0RFUzsgaSsrKSB7Ci0JCQlzcHJpbnRmKHMsICJtb2RlOiVzIiwgY2lycnVzZmJfcHJlZGVmaW5lZFtpXS5uYW1lKTsKLQkJCWlmIChzdHJjbXAodGhpc19vcHQsIHMpID09IDApCi0JCQkJY2lycnVzZmJfZGVmX21vZGUgPSBpOwotCQl9CiAJCWlmICghc3RyY21wKHRoaXNfb3B0LCAibm9hY2NlbCIpKQogCQkJbm9hY2NlbCA9IDE7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAibW9kZToiLCA1KSkKKwkJCW1vZGVfb3B0aW9uID0gdGhpc19vcHQgKyA1OworCQllbHNlCisJCQltb2RlX29wdGlvbiA9IHRoaXNfb3B0OwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI2NTcsNiArMjUwNywxMSBAQAogCiBtb2R1bGVfaW5pdChjaXJydXNmYl9pbml0KTsKIAorbW9kdWxlX3BhcmFtKG1vZGVfb3B0aW9uLCBjaGFycCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1vZGVfb3B0aW9uLCAiSW5pdGlhbCB2aWRlbyBtb2RlIGUuZy4gJzY0OHg0ODAtOEA2MCciKTsKK21vZHVsZV9wYXJhbShub2FjY2VsLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm9hY2NlbCwgIkRpc2FibGUgYWNjZWxlcmF0aW9uIik7CisKICNpZmRlZiBNT0RVTEUKIG1vZHVsZV9leGl0KGNpcnJ1c2ZiX2V4aXQpOwogI2VuZGlmCkBAIC0zMDUwLDE2ICsyOTA1LDE0IEBACiAgKiBiZXN0Y2xvY2soKSAtIGRldGVybWluZSBjbG9zZXN0IHBvc3NpYmxlIGNsb2NrIGxvd2VyKD8pIHRoYW4gdGhlCiAgKiBkZXNpcmVkIHBpeGVsIGNsb2NrCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBiZXN0Y2xvY2sobG9uZyBmcmVxLCBsb25nICpiZXN0LCBsb25nICpub20sCi0JCSAgICAgICBsb25nICpkZW4sIGxvbmcgKmRpdiwgbG9uZyBtYXhmcmVxKQorc3RhdGljIHZvaWQgYmVzdGNsb2NrKGxvbmcgZnJlcSwgaW50ICpub20sIGludCAqZGVuLCBpbnQgKmRpdikKIHsKLQlsb25nIG4sIGgsIGQsIGY7CisJaW50IG4sIGQ7CisJbG9uZyBoLCBkaWZmOwogCi0JYXNzZXJ0KGJlc3QgIT0gTlVMTCk7CiAJYXNzZXJ0KG5vbSAhPSBOVUxMKTsKIAlhc3NlcnQoZGVuICE9IE5VTEwpOwogCWFzc2VydChkaXYgIT0gTlVMTCk7Ci0JYXNzZXJ0KG1heGZyZXEgPiAwKTsKIAogCSpub20gPSAwOwogCSpkZW4gPSAwOwpAQCAtMzA3MCw1MSArMjkyMyw0NyBAQAogCWlmIChmcmVxIDwgODAwMCkKIAkJZnJlcSA9IDgwMDA7CiAKLQlpZiAoZnJlcSA+IG1heGZyZXEpCi0JCWZyZXEgPSBtYXhmcmVxOwotCi0JKmJlc3QgPSAwOwotCWYgPSBmcmVxICogMTA7CisJZGlmZiA9IGZyZXE7CiAKIAlmb3IgKG4gPSAzMjsgbiA8IDEyODsgbisrKSB7Ci0JCWQgPSAoMTQzMTgxICogbikgLyBmOworCQlpbnQgcyA9IDA7CisKKwkJZCA9ICgxNDMxOCAqIG4pIC8gZnJlcTsKIAkJaWYgKChkID49IDcpICYmIChkIDw9IDYzKSkgewotCQkJaWYgKGQgPiAzMSkKLQkJCQlkID0gKGQgLyAyKSAqIDI7Ci0JCQloID0gKDE0MzE4ICogbikgLyBkOwotCQkJaWYgKGFicyhoIC0gZnJlcSkgPCBhYnMoKmJlc3QgLSBmcmVxKSkgewotCQkJCSpiZXN0ID0gaDsKKwkJCWludCB0ZW1wID0gZDsKKworCQkJaWYgKHRlbXAgPiAzMSkgeworCQkJCXMgPSAxOworCQkJCXRlbXAgPj49IDE7CisJCQl9CisJCQloID0gKCgxNDMxOCAqIG4pIC8gdGVtcCkgPj4gczsKKwkJCWggPSBoID4gZnJlcSA/IGggLSBmcmVxIDogZnJlcSAtIGg7CisJCQlpZiAoaCA8IGRpZmYpIHsKKwkJCQlkaWZmID0gaDsKIAkJCQkqbm9tID0gbjsKLQkJCQlpZiAoZCA8IDMyKSB7Ci0JCQkJCSpkZW4gPSBkOwotCQkJCQkqZGl2ID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCQkqZGVuID0gZCAvIDI7Ci0JCQkJCSpkaXYgPSAxOwotCQkJCX0KKwkJCQkqZGVuID0gdGVtcDsKKwkJCQkqZGl2ID0gczsKIAkJCX0KIAkJfQotCQlkID0gRElWX1JPVU5EX1VQKDE0MzE4MSAqIG4sIGYpOworCQlkKys7CiAJCWlmICgoZCA+PSA3KSAmJiAoZCA8PSA2MykpIHsKLQkJCWlmIChkID4gMzEpCi0JCQkJZCA9IChkIC8gMikgKiAyOwotCQkJaCA9ICgxNDMxOCAqIG4pIC8gZDsKLQkJCWlmIChhYnMoaCAtIGZyZXEpIDwgYWJzKCpiZXN0IC0gZnJlcSkpIHsKLQkJCQkqYmVzdCA9IGg7CisJCQlpZiAoZCA+IDMxKSB7CisJCQkJcyA9IDE7CisJCQkJZCA+Pj0gMTsKKwkJCX0KKwkJCWggPSAoKDE0MzE4ICogbikgLyBkKSA+PiBzOworCQkJaCA9IGggPiBmcmVxID8gaCAtIGZyZXEgOiBmcmVxIC0gaDsKKwkJCWlmIChoIDwgZGlmZikgeworCQkJCWRpZmYgPSBoOwogCQkJCSpub20gPSBuOwotCQkJCWlmIChkIDwgMzIpIHsKLQkJCQkJKmRlbiA9IGQ7Ci0JCQkJCSpkaXYgPSAwOwotCQkJCX0gZWxzZSB7Ci0JCQkJCSpkZW4gPSBkIC8gMjsKLQkJCQkJKmRpdiA9IDE7Ci0JCQkJfQorCQkJCSpkZW4gPSBkOworCQkJCSpkaXYgPSBzOwogCQkJfQogCQl9CiAJfQogCiAJRFBSSU5USygiQmVzdCBwb3NzaWJsZSB2YWx1ZXMgZm9yIGdpdmVuIGZyZXF1ZW5jeTpcbiIpOwotCURQUklOVEsoIgliZXN0OiAlbGQga0h6ICBub206ICVsZCAgZGVuOiAlbGQgIGRpdjogJWxkXG4iLAorCURQUklOVEsoIglmcmVxOiAlbGQga0h6ICBub206ICVkICBkZW46ICVkICBkaXY6ICVkXG4iLAogCQlmcmVxLCAqbm9tLCAqZGVuLCAqZGl2KTsKIAogCURQUklOVEsoIkVYSVRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCA5Y2JmZjg0Li42NGIzZDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwpAQCAtMTg1NSw4ICsxODU1LDYgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFt2Yy0+dmNfbnVtXV07CiAJc3RydWN0IGRpc3BsYXkgKnAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKIAlpbnQgc2Nyb2xsX3BhcnRpYWwgPSBpbmZvLT5mbGFncyAmIEZCSU5GT19QQVJUSUFMX1BBTl9PSzsKLQl1bnNpZ25lZCBzaG9ydCBzYXZlZF9lYzsKLQlpbnQgcmV0OwogCiAJaWYgKGZiY29uX2lzX2luYWN0aXZlKHZjLCBpbmZvKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xODY5LDExICsxODY3LDYgQEAKIAkgKiAgICAgICAgICAgd2hvbGUgc2NyZWVuIChwcmV2ZW50cyBmbGlja2VyKS4KIAkgKi8KIAotCXNhdmVkX2VjID0gdmMtPnZjX3ZpZGVvX2VyYXNlX2NoYXI7Ci0JdmMtPnZjX3ZpZGVvX2VyYXNlX2NoYXIgPSB2Yy0+dmNfc2NybF9lcmFzZV9jaGFyOwotCi0JcmV0ID0gMDsKLQogCXN3aXRjaCAoZGlyKSB7CiAJY2FzZSBTTV9VUDoKIAkJaWYgKGNvdW50ID4gdmMtPnZjX3Jvd3MpCS8qIE1heGltdW0gcmVhbGlzdGljIHNpemUgKi8KQEAgLTE4OTAsOSArMTg4Myw5IEBACiAJCQlzY3JfbWVtc2V0dygodW5zaWduZWQgc2hvcnQgKikgKHZjLT52Y19vcmlnaW4gKwogCQkJCQkJCXZjLT52Y19zaXplX3JvdyAqCiAJCQkJCQkJKGIgLSBjb3VudCkpLAotCQkJCSAgICB2Yy0+dmNfc2NybF9lcmFzZV9jaGFyLAorCQkJCSAgICB2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciwKIAkJCQkgICAgdmMtPnZjX3NpemVfcm93ICogY291bnQpOwotCQkJcmV0ID0gMTsKKwkJCXJldHVybiAxOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTQ1JPTExfV1JBUF9NT1ZFOgpAQCAtMTk2MiwxMCArMTk1NSw5IEBACiAJCQlzY3JfbWVtc2V0dygodW5zaWduZWQgc2hvcnQgKikgKHZjLT52Y19vcmlnaW4gKwogCQkJCQkJCXZjLT52Y19zaXplX3JvdyAqCiAJCQkJCQkJKGIgLSBjb3VudCkpLAotCQkJCSAgICB2Yy0+dmNfc2NybF9lcmFzZV9jaGFyLAorCQkJCSAgICB2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciwKIAkJCQkgICAgdmMtPnZjX3NpemVfcm93ICogY291bnQpOwotCQkJcmV0ID0gMTsKLQkJCWJyZWFrOworCQkJcmV0dXJuIDE7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTE5ODIsOSArMTk3NCw5IEBACiAJCQlzY3JfbWVtc2V0dygodW5zaWduZWQgc2hvcnQgKikgKHZjLT52Y19vcmlnaW4gKwogCQkJCQkJCXZjLT52Y19zaXplX3JvdyAqCiAJCQkJCQkJdCksCi0JCQkJICAgIHZjLT52Y19zY3JsX2VyYXNlX2NoYXIsCisJCQkJICAgIHZjLT52Y192aWRlb19lcmFzZV9jaGFyLAogCQkJCSAgICB2Yy0+dmNfc2l6ZV9yb3cgKiBjb3VudCk7Ci0JCQlyZXQgPSAxOworCQkJcmV0dXJuIDE7CiAJCQlicmVhazsKIAogCQljYXNlIFNDUk9MTF9XUkFQX01PVkU6CkBAIC0yMDUyLDE1ICsyMDQ0LDEyIEBACiAJCQlzY3JfbWVtc2V0dygodW5zaWduZWQgc2hvcnQgKikgKHZjLT52Y19vcmlnaW4gKwogCQkJCQkJCXZjLT52Y19zaXplX3JvdyAqCiAJCQkJCQkJdCksCi0JCQkJICAgIHZjLT52Y19zY3JsX2VyYXNlX2NoYXIsCisJCQkJICAgIHZjLT52Y192aWRlb19lcmFzZV9jaGFyLAogCQkJCSAgICB2Yy0+dmNfc2l6ZV9yb3cgKiBjb3VudCk7Ci0JCQlyZXQgPSAxOwotCQkJYnJlYWs7CisJCQlyZXR1cm4gMTsKIAkJfQotCQlicmVhazsKIAl9Ci0JdmMtPnZjX3ZpZGVvX2VyYXNlX2NoYXIgPSBzYXZlZF9lYzsKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAKQEAgLTI1MjIsOSArMjUxMSw2IEBACiAJCQljID0gdmMtPnZjX3ZpZGVvX2VyYXNlX2NoYXI7CiAJCQl2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciA9CiAJCQkgICAgKChjICYgMHhmZTAwKSA+PiAxKSB8IChjICYgMHhmZik7Ci0JCQljID0gdmMtPnZjX3NjcmxfZXJhc2VfY2hhcjsKLQkJCXZjLT52Y19zY3JsX2VyYXNlX2NoYXIgPQotCQkJICAgICgoYyAmIDB4RkUwMCkgPj4gMSkgfCAoYyAmIDB4RkYpOwogCQkJdmMtPnZjX2F0dHIgPj49IDE7CiAJCX0KIAl9IGVsc2UgaWYgKCF2Yy0+dmNfaGlfZm9udF9tYXNrICYmIGNudCA9PSA1MTIpIHsKQEAgLTI1NTUsMTQgKzI1NDEsOSBAQAogCQkJaWYgKHZjLT52Y19jYW5fZG9fY29sb3IpIHsKIAkJCQl2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciA9CiAJCQkJICAgICgoYyAmIDB4ZmYwMCkgPDwgMSkgfCAoYyAmIDB4ZmYpOwotCQkJCWMgPSB2Yy0+dmNfc2NybF9lcmFzZV9jaGFyOwotCQkJCXZjLT52Y19zY3JsX2VyYXNlX2NoYXIgPQotCQkJCSAgICAoKGMgJiAweEZGMDApIDw8IDEpIHwgKGMgJiAweEZGKTsKIAkJCQl2Yy0+dmNfYXR0ciA8PD0gMTsKLQkJCX0gZWxzZSB7CisJCQl9IGVsc2UKIAkJCQl2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciA9IGMgJiB+MHgxMDA7Ci0JCQkJdmMtPnZjX3NjcmxfZXJhc2VfY2hhciA9IGMgJiB+MHgxMDA7Ci0JCQl9CiAJCX0KIAogCX0KQEAgLTI5OTYsOCArMjk3Nyw4IEBACiAJCXAgPSAmZmJfZGlzcGxheVt2Yy0+dmNfbnVtXTsKIAkJc2V0X2JsaXR0aW5nX3R5cGUodmMsIGluZm8pOwogCQl2YXJfdG9fZGlzcGxheShwLCAmaW5mby0+dmFyLCBpbmZvKTsKLQkJY29scyA9IEZCQ09OX1NXQVAocC0+cm90YXRlLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMpOwotCQlyb3dzID0gRkJDT05fU1dBUChwLT5yb3RhdGUsIGluZm8tPnZhci55cmVzLCBpbmZvLT52YXIueHJlcyk7CisJCWNvbHMgPSBGQkNPTl9TV0FQKG9wcy0+cm90YXRlLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMpOworCQlyb3dzID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+dmFyLnlyZXMsIGluZm8tPnZhci54cmVzKTsKIAkJY29scyAvPSB2Yy0+dmNfZm9udC53aWR0aDsKIAkJcm93cyAvPSB2Yy0+dmNfZm9udC5oZWlnaHQ7CiAJCXZjX3Jlc2l6ZSh2YywgY29scywgcm93cyk7CkBAIC0zNTkyLDggKzM1NzMsOCBAQAogCiAJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCWZiX3JlZ2lzdGVyX2NsaWVudCgmZmJjb25fZXZlbnRfbm90aWZpZXIpOwotCWZiY29uX2RldmljZSA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShmYl9jbGFzcywgTlVMTCwgTUtERVYoMCwgMCksCi0JCQkJCSAgICAgTlVMTCwgImZiY29uIik7CisJZmJjb25fZGV2aWNlID0gZGV2aWNlX2NyZWF0ZShmYl9jbGFzcywgTlVMTCwgTUtERVYoMCwgMCksIE5VTEwsCisJCQkJICAgICAiZmJjb24iKTsKIAogCWlmIChJU19FUlIoZmJjb25fZGV2aWNlKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gY3JlYXRlIGRldmljZSAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvbWRhY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvbWRhY29uLmMKaW5kZXggOTkwMTA2NC4uZGQzZWFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL21kYWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9tZGFjb24uYwpAQCAtNTMzLDcgKzUzMyw3IEBACiAKIHN0YXRpYyBpbnQgbWRhY29uX3Njcm9sbChzdHJ1Y3QgdmNfZGF0YSAqYywgaW50IHQsIGludCBiLCBpbnQgZGlyLCBpbnQgbGluZXMpCiB7Ci0JdTE2IGVhdHRyID0gbWRhX2NvbnZlcnRfYXR0cihjLT52Y19zY3JsX2VyYXNlX2NoYXIpOworCXUxNiBlYXR0ciA9IG1kYV9jb252ZXJ0X2F0dHIoYy0+dmNfdmlkZW9fZXJhc2VfY2hhcik7CiAKIAlpZiAoIWxpbmVzKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zdGljb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zdGljb24uYwppbmRleCA0MDU1ZGJkLi40OTFjMWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvc3RpY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3N0aWNvbi5jCkBAIC0xNzAsMTIgKzE3MCwxMiBAQAogICAgIHN3aXRjaCAoZGlyKSB7CiAgICAgY2FzZSBTTV9VUDoKIAlzdGlfYm1vdmUoc3RpLCB0ICsgY291bnQsIDAsIHQsIDAsIGIgLSB0IC0gY291bnQsIGNvbnAtPnZjX2NvbHMpOwotCXN0aV9jbGVhcihzdGksIGIgLSBjb3VudCwgMCwgY291bnQsIGNvbnAtPnZjX2NvbHMsIGNvbnAtPnZjX3NjcmxfZXJhc2VfY2hhcik7CisJc3RpX2NsZWFyKHN0aSwgYiAtIGNvdW50LCAwLCBjb3VudCwgY29ucC0+dmNfY29scywgY29ucC0+dmNfdmlkZW9fZXJhc2VfY2hhcik7CiAJYnJlYWs7CiAKICAgICBjYXNlIFNNX0RPV046CiAJc3RpX2Jtb3ZlKHN0aSwgdCwgMCwgdCArIGNvdW50LCAwLCBiIC0gdCAtIGNvdW50LCBjb25wLT52Y19jb2xzKTsKLQlzdGlfY2xlYXIoc3RpLCB0LCAwLCBjb3VudCwgY29ucC0+dmNfY29scywgY29ucC0+dmNfc2NybF9lcmFzZV9jaGFyKTsKKwlzdGlfY2xlYXIoc3RpLCB0LCAwLCBjb3VudCwgY29ucC0+dmNfY29scywgY29ucC0+dmNfdmlkZW9fZXJhc2VfY2hhcik7CiAJYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKaW5kZXggYmQxZjU3Yi4uNDQ4ZDIwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwpAQCAtMjM5LDggKzIzOSw3IEBACiAKIHN0YXRpYyBpbnQgdmdhY29uX3Njcm9sbGRlbHRhKHN0cnVjdCB2Y19kYXRhICpjLCBpbnQgbGluZXMpCiB7Ci0JaW50IHN0YXJ0LCBlbmQsIGNvdW50LCBzb2ZmLCBkaWZmOwotCXZvaWQgKmQsICpzOworCWludCBzdGFydCwgZW5kLCBjb3VudCwgc29mZjsKIAogCWlmICghbGluZXMpIHsKIAkJYy0+dmNfdmlzaWJsZV9vcmlnaW4gPSBjLT52Y19vcmlnaW47CkBAIC0yODcsMjkgKzI4NiwyOSBAQAogCWlmIChjb3VudCA+IGMtPnZjX3Jvd3MpCiAJCWNvdW50ID0gYy0+dmNfcm93czsKIAotCWRpZmYgPSBjLT52Y19yb3dzIC0gY291bnQ7CisJaWYgKGNvdW50KSB7CisJCWludCBjb3B5c2l6ZTsKIAotCWQgPSAodm9pZCAqKSBjLT52Y19vcmlnaW47Ci0JcyA9ICh2b2lkICopIGMtPnZjX3NjcmVlbmJ1ZjsKKwkJaW50IGRpZmYgPSBjLT52Y19yb3dzIC0gY291bnQ7CisJCXZvaWQgKmQgPSAodm9pZCAqKSBjLT52Y19vcmlnaW47CisJCXZvaWQgKnMgPSAodm9pZCAqKSBjLT52Y19zY3JlZW5idWY7CiAKLQl3aGlsZSAoY291bnQtLSkgewotCQlzY3JfbWVtY3B5dyhkLCB2Z2Fjb25fc2Nyb2xsYmFjayArIHNvZmYsIGMtPnZjX3NpemVfcm93KTsKLQkJZCArPSBjLT52Y19zaXplX3JvdzsKLQkJc29mZiArPSBjLT52Y19zaXplX3JvdzsKKwkJY291bnQgKj0gYy0+dmNfc2l6ZV9yb3c7CisJCS8qIGhvdyBtdWNoIG1lbW9yeSB0byBlbmQgb2YgYnVmZmVyIGxlZnQ/ICovCisJCWNvcHlzaXplID0gbWluKGNvdW50LCB2Z2Fjb25fc2Nyb2xsYmFja19zaXplIC0gc29mZik7CisJCXNjcl9tZW1jcHl3KGQsIHZnYWNvbl9zY3JvbGxiYWNrICsgc29mZiwgY29weXNpemUpOworCQlkICs9IGNvcHlzaXplOworCQljb3VudCAtPSBjb3B5c2l6ZTsKIAotCQlpZiAoc29mZiA+PSB2Z2Fjb25fc2Nyb2xsYmFja19zaXplKQotCQkJc29mZiA9IDA7Ci0JfQotCi0JaWYgKGRpZmYgPT0gYy0+dmNfcm93cykgewotCQl2Z2Fjb25fY3Vyc29yKGMsIENNX01PVkUpOwotCX0gZWxzZSB7Ci0JCXdoaWxlIChkaWZmLS0pIHsKLQkJCXNjcl9tZW1jcHl3KGQsIHMsIGMtPnZjX3NpemVfcm93KTsKLQkJCWQgKz0gYy0+dmNfc2l6ZV9yb3c7Ci0JCQlzICs9IGMtPnZjX3NpemVfcm93OworCQlpZiAoY291bnQpIHsKKwkJCXNjcl9tZW1jcHl3KGQsIHZnYWNvbl9zY3JvbGxiYWNrLCBjb3VudCk7CisJCQlkICs9IGNvdW50OwogCQl9Ci0JfQorCisJCWlmIChkaWZmKQorCQkJc2NyX21lbWNweXcoZCwgcywgZGlmZiAqIGMtPnZjX3NpemVfcm93KTsKKwl9IGVsc2UKKwkJdmdhY29uX2N1cnNvcihjLCBDTV9NT1ZFKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTM1MCw3ICsxMzQ5LDcgQEAKIAkJfSBlbHNlCiAJCQljLT52Y19vcmlnaW4gKz0gZGVsdGE7CiAJCXNjcl9tZW1zZXR3KCh1MTYgKikgKGMtPnZjX29yaWdpbiArIGMtPnZjX3NjcmVlbmJ1Zl9zaXplIC0KLQkJCQkgICAgIGRlbHRhKSwgYy0+dmNfc2NybF9lcmFzZV9jaGFyLAorCQkJCSAgICAgZGVsdGEpLCBjLT52Y192aWRlb19lcmFzZV9jaGFyLAogCQkJICAgIGRlbHRhKTsKIAl9IGVsc2UgewogCQlpZiAob2xkbyAtIGRlbHRhIDwgdmdhX3ZyYW1fYmFzZSkgewpAQCAtMTM2Myw3ICsxMzYyLDcgQEAKIAkJfSBlbHNlCiAJCQljLT52Y19vcmlnaW4gLT0gZGVsdGE7CiAJCWMtPnZjX3Njcl9lbmQgPSBjLT52Y19vcmlnaW4gKyBjLT52Y19zY3JlZW5idWZfc2l6ZTsKLQkJc2NyX21lbXNldHcoKHUxNiAqKSAoYy0+dmNfb3JpZ2luKSwgYy0+dmNfc2NybF9lcmFzZV9jaGFyLAorCQlzY3JfbWVtc2V0dygodTE2ICopIChjLT52Y19vcmlnaW4pLCBjLT52Y192aWRlb19lcmFzZV9jaGFyLAogCQkJICAgIGRlbHRhKTsKIAl9CiAJYy0+dmNfc2NyX2VuZCA9IGMtPnZjX29yaWdpbiArIGMtPnZjX3NjcmVlbmJ1Zl9zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9kaXNwbGF5L2Rpc3BsYXktc3lzZnMuYyBiL2RyaXZlcnMvdmlkZW8vZGlzcGxheS9kaXNwbGF5LXN5c2ZzLmMKaW5kZXggNmVmODAwYi4uNDgzMGIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9kaXNwbGF5L2Rpc3BsYXktc3lzZnMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Rpc3BsYXkvZGlzcGxheS1zeXNmcy5jCkBAIC0xNTMsMTIgKzE1Myw5IEBACiAJCW11dGV4X3VubG9jaygmYWxsb2NhdGVkX2RzcF9sb2NrKTsKIAogCQlpZiAoIXJldCkgewotCQkJbmV3X2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGRpc3BsYXlfY2xhc3MsCi0JCQkJCQkJICAgICBwYXJlbnQsCi0JCQkJCQkJICAgICBNS0RFVigwLDApLAotCQkJCQkJCSAgICAgbmV3X2RldiwKLQkJCQkJCQkgICAgICJkaXNwbGF5JWQiLAotCQkJCQkJCSAgICAgbmV3X2Rldi0+aWR4KTsKKwkJCW5ld19kZXYtPmRldiA9IGRldmljZV9jcmVhdGUoZGlzcGxheV9jbGFzcywgcGFyZW50LAorCQkJCQkJICAgICBNS0RFVigwLCAwKSwgbmV3X2RldiwKKwkJCQkJCSAgICAgImRpc3BsYXklZCIsIG5ld19kZXYtPmlkeCk7CiAJCQlpZiAoIUlTX0VSUihuZXdfZGV2LT5kZXYpKSB7CiAJCQkJbmV3X2Rldi0+cGFyZW50ID0gcGFyZW50OwogCQkJCW5ld19kZXYtPmRyaXZlciA9IGRyaXZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZWZpZmIuYyBiL2RyaXZlcnMvdmlkZW8vZWZpZmIuYwppbmRleCBiZDc3OWFlLi5kYWY5YjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9lZmlmYi5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiAjaW5jbHVkZSA8dmlkZW8vdmdhLmg+CiAKQEAgLTMzLDYgKzM0LDEwNSBAQAogCS52aXN1YWwJCQk9IEZCX1ZJU1VBTF9UUlVFQ09MT1IsCiB9OwogCitlbnVtIHsKKwlNX0kxNywJCS8qIDE3LUluY2ggaU1hYyAqLworCU1fSTIwLAkJLyogMjAtSW5jaCBpTWFjICovCisJTV9JMjBfU1IsCS8qIDIwLUluY2ggaU1hYyAoU2FudGEgUm9zYSkgKi8KKwlNX0kyNCwJCS8qIDI0LUluY2ggaU1hYyAqLworCU1fTUlOSSwJCS8qIE1hYyBNaW5pICovCisJTV9NQiwJCS8qIE1hY0Jvb2sgKi8KKwlNX01CXzIsCQkvKiBNYWNCb29rLCAybmQgcmV2LiAqLworCU1fTUJfMywJCS8qIE1hY0Jvb2ssIDNyZCByZXYuICovCisJTV9NQl9TUiwJLyogTWFjQm9vaywgMm5kIGdlbiwgKFNhbnRhIFJvc2EpICovCisJTV9NQkEsCQkvKiBNYWNCb29rIEFpciAqLworCU1fTUJQLAkJLyogTWFjQm9vayBQcm8gKi8KKwlNX01CUF8yLAkvKiBNYWNCb29rIFBybyAybmQgZ2VuICovCisJTV9NQlBfU1IsCS8qIE1hY0Jvb2sgUHJvIChTYW50YSBSb3NhKSAqLworCU1fTUJQXzQsCS8qIE1hY0Jvb2sgUHJvLCA0dGggZ2VuICovCisJTV9VTktOT1dOCS8qIHBsYWNlaG9sZGVyICovCit9OworCitzdGF0aWMgc3RydWN0IGVmaWZiX2RtaV9pbmZvIHsKKwljaGFyICpvcHRuYW1lOworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwlpbnQgc3RyaWRlOworCWludCB3aWR0aDsKKwlpbnQgaGVpZ2h0OworfSBkbWlfbGlzdFtdID0geworCVtNX0kxN10gPSB7ICJpMTciLCAweDgwMDEwMDAwLCAxNDcyICogNCwgMTQ0MCwgOTAwIH0sCisJW01fSTIwXSA9IHsgImkyMCIsIDB4ODAwMTAwMDAsIDE3MjggKiA0LCAxNjgwLCAxMDUwIH0sIC8qIGd1ZXNzICovCisJW01fSTIwX1NSXSA9IHsgImltYWM3IiwgMHg0MDAxMDAwMCwgMTcyOCAqIDQsIDE2ODAsIDEwNTAgfSwKKwlbTV9JMjRdID0geyAiaTI0IiwgMHg4MDAxMDAwMCwgMjA0OCAqIDQsIDE5MjAsIDEyMDAgfSwgLyogZ3Vlc3MgKi8KKwlbTV9NSU5JXT0geyAibWluaSIsIDB4ODAwMDAwMDAsIDIwNDggKiA0LCAxMDI0LCA3NjggfSwKKwlbTV9NQl0gPSB7ICJtYWNib29rIiwgMHg4MDAwMDAwMCwgMjA0OCAqIDQsIDEyODAsIDgwMCB9LAorCVtNX01CQV0gPSB7ICJtYmEiLCAweDgwMDAwMDAwLCAyMDQ4ICogNCwgMTI4MCwgODAwIH0sCisJW01fTUJQXSA9IHsgIm1icCIsIDB4ODAwMTAwMDAsIDE0NzIgKiA0LCAxNDQwLCA5MDAgfSwKKwlbTV9NQlBfMl0gPSB7ICJtYnAyIiwgMCwgMCwgMCwgMCB9LCAvKiBwbGFjZWhvbGRlciAqLworCVtNX01CUF9TUl0gPSB7ICJtYnAzIiwgMHg4MDAzMDAwMCwgMjA0OCAqIDQsIDE0NDAsIDkwMCB9LAorCVtNX01CUF80XSA9IHsgIm1icDQiLCAweGMwMDYwMDAwLCAyMDQ4ICogNCwgMTkyMCwgMTIwMCB9LAorCVtNX1VOS05PV05dID0geyBOVUxMLCAwLCAwLCAwLCAwIH0KK307CisKK3N0YXRpYyBpbnQgc2V0X3N5c3RlbShjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpOworCisjZGVmaW5lIEVGSUZCX0RNSV9TWVNURU1fSUQodmVuZG9yLCBuYW1lLCBlbnVtaWQpCQlcCisJeyBzZXRfc3lzdGVtLCBuYW1lLCB7CQkJCQlcCisJCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsIHZlbmRvciksCQlcCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCBuYW1lKSB9LAkJXAorCSAgJmRtaV9saXN0W2VudW1pZF0gfQorCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBkbWlfc3lzdGVtX3RhYmxlW10gPSB7CisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiaU1hYzQsMSIsIE1fSTE3KSwKKwkvKiBBdCBsZWFzdCBvbmUgb2YgdGhlc2UgdHdvIHdpbGwgYmUgcmlnaHQ7IG1heWJlIGJvdGg/ICovCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiaU1hYzUsMSIsIE1fSTIwKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgImlNYWM1LDEiLCBNX0kyMCksCisJLyogQXQgbGVhc3Qgb25lIG9mIHRoZXNlIHR3byB3aWxsIGJlIHJpZ2h0OyBtYXliZSBib3RoPyAqLworCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwgImlNYWM2LDEiLCBNX0kyNCksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJpTWFjNiwxIiwgTV9JMjQpLAorCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIEluYy4iLCAiaU1hYzcsMSIsIE1fSTIwX1NSKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBDb21wdXRlciwgSW5jLiIsICJNYWNtaW5pMSwxIiwgTV9NSU5JKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBDb21wdXRlciwgSW5jLiIsICJNYWNCb29rMSwxIiwgTV9NQiksCisJLyogQXQgbGVhc3Qgb25lIG9mIHRoZXNlIHR3byB3aWxsIGJlIHJpZ2h0OyBtYXliZSBib3RoPyAqLworCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwgIk1hY0Jvb2syLDEiLCBNX01CKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2syLDEiLCBNX01CKSwKKwkvKiBBdCBsZWFzdCBvbmUgb2YgdGhlc2UgdHdvIHdpbGwgYmUgcmlnaHQ7IG1heWJlIGJvdGg/ICovCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiTWFjQm9vazMsMSIsIE1fTUIpLAorCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIEluYy4iLCAiTWFjQm9vazMsMSIsIE1fTUIpLAorCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIEluYy4iLCAiTWFjQm9vazQsMSIsIE1fTUIpLAorCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIEluYy4iLCAiTWFjQm9va0FpcjEsMSIsIE1fTUJBKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBDb21wdXRlciwgSW5jLiIsICJNYWNCb29rUHJvMSwxIiwgTV9NQlApLAorCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwgIk1hY0Jvb2tQcm8yLDEiLCBNX01CUF8yKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2tQcm8yLDEiLCBNX01CUF8yKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBDb21wdXRlciwgSW5jLiIsICJNYWNCb29rUHJvMywxIiwgTV9NQlBfU1IpLAorCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIEluYy4iLCAiTWFjQm9va1BybzMsMSIsIE1fTUJQX1NSKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2tQcm80LDEiLCBNX01CUF80KSwKKwl7fSwKK307CisKK3N0YXRpYyBpbnQgc2V0X3N5c3RlbShjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJc3RydWN0IGVmaWZiX2RtaV9pbmZvICppbmZvID0gaWQtPmRyaXZlcl9kYXRhOworCWlmIChpbmZvLT5iYXNlID09IDApCisJCXJldHVybiAtRU5PREVWOworCisJcHJpbnRrKEtFUk5fSU5GTyAiZWZpZmI6IGRtaSBkZXRlY3RlZCAlcyAtIGZyYW1lYnVmZmVyIGF0ICVwICIKKwkJCSAiKCVkeCVkLCBzdHJpZGUgJWQpXG4iLCBpZC0+aWRlbnQsCisJCQkgKHZvaWQgKilpbmZvLT5iYXNlLCBpbmZvLT53aWR0aCwgaW5mby0+aGVpZ2h0LAorCQkJIGluZm8tPnN0cmlkZSk7CisKKwkvKiBUcnVzdCB0aGUgYm9vdGxvYWRlciBvdmVyIHRoZSBETUkgdGFibGVzICovCisJaWYgKHNjcmVlbl9pbmZvLmxmYl9iYXNlID09IDApCisJCXNjcmVlbl9pbmZvLmxmYl9iYXNlID0gaW5mby0+YmFzZTsKKwlpZiAoc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGggPT0gMCkKKwkJc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGggPSBpbmZvLT5zdHJpZGU7CisJaWYgKHNjcmVlbl9pbmZvLmxmYl93aWR0aCA9PSAwKQorCQlzY3JlZW5faW5mby5sZmJfd2lkdGggPSBpbmZvLT53aWR0aDsKKwlpZiAoc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9PSAwKQorCQlzY3JlZW5faW5mby5sZmJfaGVpZ2h0ID0gaW5mby0+aGVpZ2h0OworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZWZpZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAogCQkJICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLAogCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pCkBAIC02Nyw2ICsxNjcsMzggQEAKIAkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKIH07CiAKK3N0YXRpYyBpbnQgX19pbml0IGVmaWZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCit7CisJY2hhciAqdGhpc19vcHQ7CisJaW50IGk7CisKKwlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgodGhpc19vcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKKwkJaWYgKCEqdGhpc19vcHQpIGNvbnRpbnVlOworCisJCWZvciAoaSA9IDA7IGkgPCBNX1VOS05PV047IGkrKykgeworCQkJaWYgKCFzdHJjbXAodGhpc19vcHQsIGRtaV9saXN0W2ldLm9wdG5hbWUpICYmCisJCQkJCWRtaV9saXN0W2ldLmJhc2UgIT0gMCkgeworCQkJCXNjcmVlbl9pbmZvLmxmYl9iYXNlID0gZG1pX2xpc3RbaV0uYmFzZTsKKwkJCQlzY3JlZW5faW5mby5sZmJfbGluZWxlbmd0aCA9IGRtaV9saXN0W2ldLnN0cmlkZTsKKwkJCQlzY3JlZW5faW5mby5sZmJfd2lkdGggPSBkbWlfbGlzdFtpXS53aWR0aDsKKwkJCQlzY3JlZW5faW5mby5sZmJfaGVpZ2h0ID0gZG1pX2xpc3RbaV0uaGVpZ2h0OworCQkJfQorCQl9CisJCWlmICghc3RybmNtcCh0aGlzX29wdCwgImJhc2U6IiwgNSkpCisJCQlzY3JlZW5faW5mby5sZmJfYmFzZSA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0KzUsIE5VTEwsIDApOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInN0cmlkZToiLCA3KSkKKwkJCXNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrNywgTlVMTCwgMCkgKiA0OworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgImhlaWdodDoiLCA3KSkKKwkJCXNjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPSBzaW1wbGVfc3RydG91bCh0aGlzX29wdCs3LCBOVUxMLCAwKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ3aWR0aDoiLCA2KSkKKwkJCXNjcmVlbl9pbmZvLmxmYl93aWR0aCA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0KzYsIE5VTEwsIDApOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgZWZpZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvOwpAQCAtNzQsNiArMjA2LDI2IEBACiAJdW5zaWduZWQgaW50IHNpemVfdm1vZGU7CiAJdW5zaWduZWQgaW50IHNpemVfcmVtYXA7CiAJdW5zaWduZWQgaW50IHNpemVfdG90YWw7CisJaW50IHJlcXVlc3Rfc3VjY2VlZGVkID0gMDsKKworCXByaW50ayhLRVJOX0lORk8gImVmaWZiOiBwcm9iaW5nIGZvciBlZmlmYlxuIik7CisKKwlpZiAoIXNjcmVlbl9pbmZvLmxmYl9kZXB0aCkKKwkJc2NyZWVuX2luZm8ubGZiX2RlcHRoID0gMzI7CisJaWYgKCFzY3JlZW5faW5mby5wYWdlcykKKwkJc2NyZWVuX2luZm8ucGFnZXMgPSAxOworCisJLyoganVzdCBhc3N1bWUgdGhleSdyZSBhbGwgdW5zZXQgaWYgYW55IGFyZSAqLworCWlmICghc2NyZWVuX2luZm8uYmx1ZV9zaXplKSB7CisJCXNjcmVlbl9pbmZvLmJsdWVfc2l6ZSA9IDg7CisJCXNjcmVlbl9pbmZvLmJsdWVfcG9zID0gMDsKKwkJc2NyZWVuX2luZm8uZ3JlZW5fc2l6ZSA9IDg7CisJCXNjcmVlbl9pbmZvLmdyZWVuX3BvcyA9IDg7CisJCXNjcmVlbl9pbmZvLnJlZF9zaXplID0gODsKKwkJc2NyZWVuX2luZm8ucmVkX3BvcyA9IDE2OworCQlzY3JlZW5faW5mby5yc3ZkX3NpemUgPSA4OworCQlzY3JlZW5faW5mby5yc3ZkX3BvcyA9IDI0OworCX0KIAogCWVmaWZiX2ZpeC5zbWVtX3N0YXJ0ID0gc2NyZWVuX2luZm8ubGZiX2Jhc2U7CiAJZWZpZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCA9IHNjcmVlbl9pbmZvLmxmYl9kZXB0aDsKQEAgLTk4LDIxICsyNTAsMjUgQEAKIAkgKiAgICAgICAgICAgICAgICAgb3B0aW9uIHRvIHNpbXBseSB1c2Ugc2l6ZV90b3RhbCBhcyB0aGF0CiAJICogICAgICAgICAgICAgICAgIHdhc3RlcyBwbGVudHkgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2UuICovCiAJc2l6ZV9yZW1hcCAgPSBzaXplX3Ztb2RlICogMjsKLQlpZiAoc2l6ZV9yZW1hcCA8IHNpemVfdm1vZGUpCi0JCXNpemVfcmVtYXAgPSBzaXplX3Ztb2RlOwogCWlmIChzaXplX3JlbWFwID4gc2l6ZV90b3RhbCkKIAkJc2l6ZV9yZW1hcCA9IHNpemVfdG90YWw7CisJaWYgKHNpemVfcmVtYXAgJSBQQUdFX1NJWkUpCisJCXNpemVfcmVtYXAgKz0gUEFHRV9TSVpFIC0gKHNpemVfcmVtYXAgJSBQQUdFX1NJWkUpOwogCWVmaWZiX2ZpeC5zbWVtX2xlbiA9IHNpemVfcmVtYXA7CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihlZmlmYl9maXguc21lbV9zdGFydCwgc2l6ZV90b3RhbCwgImVmaWZiIikpCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihlZmlmYl9maXguc21lbV9zdGFydCwgc2l6ZV9yZW1hcCwgImVmaWZiIikpIHsKKwkJcmVxdWVzdF9zdWNjZWVkZWQgPSAxOworCX0gZWxzZSB7CiAJCS8qIFdlIGNhbm5vdCBtYWtlIHRoaXMgZmF0YWwuIFNvbWV0aW1lcyB0aGlzIGNvbWVzIGZyb20gbWFnaWMKIAkJICAgc3BhY2VzIG91ciByZXNvdXJjZSBoYW5kbGVycyBzaW1wbHkgZG9uJ3Qga25vdyBhYm91dCAqLwogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiZWZpZmI6IGNhbm5vdCByZXNlcnZlIHZpZGVvIG1lbW9yeSBhdCAweCVseFxuIiwKIAkJCWVmaWZiX2ZpeC5zbWVtX3N0YXJ0KTsKKwl9CiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHUzMikgKiAxNiwgJmRldi0+ZGV2KTsKIAlpZiAoIWluZm8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJlZmlmYjogY2Fubm90IGFsbG9jYXRlIGZyYW1lYnVmZmVyXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfcmVsZWFzZV9tZW07CiAJfQpAQCAtMTI1LDcgKzI4MSw3IEBACiAJCQkJIjB4JXggQCAweCVseFxuIiwKIAkJCWVmaWZiX2ZpeC5zbWVtX2xlbiwgZWZpZmJfZml4LnNtZW1fc3RhcnQpOwogCQllcnIgPSAtRUlPOwotCQlnb3RvIGVycl91bm1hcDsKKwkJZ290byBlcnJfcmVsZWFzZV9mYjsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJlZmlmYjogZnJhbWVidWZmZXIgYXQgMHglbHgsIG1hcHBlZCB0byAweCVwLCAiCkBAIC0xNzgsMjUgKzMzNCwyNyBAQAogCWluZm8tPmZpeCA9IGVmaWZiX2ZpeDsKIAlpbmZvLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7CiAKLQlpZiAoZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKSA8IDApIHsKLQkJZXJyID0gLUVOT01FTTsKKwlpZiAoKGVyciA9IGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImVmaWZiOiBjYW5ub3QgYWxsb2NhdGUgY29sb3JtYXBcbiIpOwogCQlnb3RvIGVycl91bm1hcDsKIAl9Ci0JaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pIDwgMCkgewotCQllcnIgPSAtRUlOVkFMOworCWlmICgoZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImVmaWZiOiBjYW5ub3QgcmVnaXN0ZXIgZnJhbWVidWZmZXJcbiIpOwogCQlnb3RvIGVycl9mYl9kZWFsb2M7CiAJfQogCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsCi0JICAgICAgIGluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCk7CisJCWluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCk7CiAJcmV0dXJuIDA7CiAKIGVycl9mYl9kZWFsb2M6CiAJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKIGVycl91bm1hcDoKIAlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKK2Vycl9yZWxlYXNlX2ZiOgogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiBlcnJfcmVsZWFzZV9tZW06Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGVmaWZiX2ZpeC5zbWVtX3N0YXJ0LCBzaXplX3RvdGFsKTsKKwlpZiAocmVxdWVzdF9zdWNjZWVkZWQpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihlZmlmYl9maXguc21lbV9zdGFydCwgc2l6ZV90b3RhbCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjE0LDkgKzM3MiwyMiBAQAogc3RhdGljIGludCBfX2luaXQgZWZpZmJfaW5pdCh2b2lkKQogewogCWludCByZXQ7CisJY2hhciAqb3B0aW9uID0gTlVMTDsKIAogCWlmIChzY3JlZW5faW5mby5vcmlnX3ZpZGVvX2lzVkdBICE9IFZJREVPX1RZUEVfRUZJKQogCQlyZXR1cm4gLUVOT0RFVjsKKwlkbWlfY2hlY2tfc3lzdGVtKGRtaV9zeXN0ZW1fdGFibGUpOworCisJaWYgKGZiX2dldF9vcHRpb25zKCJlZmlmYiIsICZvcHRpb24pKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllZmlmYl9zZXR1cChvcHRpb24pOworCisJLyogV2UgZG9uJ3QgZ2V0IGxpbmVsZW5ndGggZnJvbSBVR0EgRHJhdyBQcm90b2NvbCwgb25seSBmcm9tCisJICogRUZJIEdyYXBoaWNzIFByb3RvY29sLiAgU28gaWYgaXQncyBub3QgaW4gRE1JLCBhbmQgaXQncyBub3QKKwkgKiBwYXNzZWQgaW4gZnJvbSB0aGUgdXNlciwgd2UgcmVhbGx5IGNhbid0IHVzZSB0aGUgZnJhbWVidWZmZXIuCisJICovCisJaWYgKCFzY3JlZW5faW5mby5sZmJfbGluZWxlbmd0aCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmVmaWZiX2RyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCAwNzM3NTcwLi5jZDVmMjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC0yOCw5ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgotI2lmZGVmIENPTkZJR19LTU9ECiAjaW5jbHVkZSA8bGludXgva21vZC5oPgotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CkBAIC04MzcsMTMgKzgzNSw2IEBACiAJcmV0dXJuIChjbnQpID8gY250IDogZXJyOwogfQogCi0jaWZkZWYgQ09ORklHX0tNT0QKLXN0YXRpYyB2b2lkIHRyeV90b19sb2FkKGludCBmYikKLXsKLQlyZXF1ZXN0X21vZHVsZSgiZmIlZCIsIGZiKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfS01PRCAqLwotCiBpbnQKIGZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKIHsKQEAgLTEwMTEsMTAzICsxMDAyLDEzMiBAQAogIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IAotZmJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCitzdGF0aWMgbG9uZworZmJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJIHVuc2lnbmVkIGxvbmcgYXJnKQogeworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCBmYmlkeCA9IGltaW5vcihpbm9kZSk7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKLQlzdHJ1Y3QgZmJfb3BzICpmYiA9IGluZm8tPmZib3BzOworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCBmYl9vcHMgKmZiOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7CiAJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGZpeDsKIAlzdHJ1Y3QgZmJfY29uMmZibWFwIGNvbjJmYjsKIAlzdHJ1Y3QgZmJfY21hcF91c2VyIGNtYXA7CiAJc3RydWN0IGZiX2V2ZW50IGV2ZW50OwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwotCWludCBpOwotCQotCWlmICghZmIpCisJbG9uZyByZXQgPSAwOworCisJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOworCW11dGV4X2xvY2soJmluZm8tPmxvY2spOworCWZiID0gaW5mby0+ZmJvcHM7CisKKwlpZiAoIWZiKSB7CisJCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRkJJT0dFVF9WU0NSRUVOSU5GTzoKLQkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCAmaW5mby0+dmFyLAorCQlyZXQgPSBjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8tPnZhciwKIAkJCQkgICAgc2l6ZW9mKHZhcikpID8gLUVGQVVMVCA6IDA7CisJCWJyZWFrOwogCWNhc2UgRkJJT1BVVF9WU0NSRUVOSU5GTzoKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YXIsIGFyZ3AsIHNpemVvZih2YXIpKSkKLQkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhciwgYXJncCwgc2l6ZW9mKHZhcikpKSB7CisJCQlyZXQgPSAgLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CiAJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKIAkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX01JU0NfVVNFUkVWRU5UOwotCQlpID0gZmJfc2V0X3ZhcihpbmZvLCAmdmFyKTsKKwkJcmV0ID0gZmJfc2V0X3ZhcihpbmZvLCAmdmFyKTsKIAkJaW5mby0+ZmxhZ3MgJj0gfkZCSU5GT19NSVNDX1VTRVJFVkVOVDsKIAkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCQlpZiAoaSkgcmV0dXJuIGk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnZhciwgc2l6ZW9mKHZhcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOworCQlpZiAocmV0ID09IDAgJiYgY29weV90b191c2VyKGFyZ3AsICZ2YXIsIHNpemVvZih2YXIpKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOwogCWNhc2UgRkJJT0dFVF9GU0NSRUVOSU5GTzoKLQkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCAmaW5mby0+Zml4LAorCQlyZXQgPSBjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8tPmZpeCwKIAkJCQkgICAgc2l6ZW9mKGZpeCkpID8gLUVGQVVMVCA6IDA7CisJCWJyZWFrOwogCWNhc2UgRkJJT1BVVENNQVA6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmY21hcCwgYXJncCwgc2l6ZW9mKGNtYXApKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gKGZiX3NldF91c2VyX2NtYXAoJmNtYXAsIGluZm8pKTsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJldCA9IGZiX3NldF91c2VyX2NtYXAoJmNtYXAsIGluZm8pOworCQlicmVhazsKIAljYXNlIEZCSU9HRVRDTUFQOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJmNtYXAsIGFyZ3AsIHNpemVvZihjbWFwKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIGZiX2NtYXBfdG9fdXNlcigmaW5mby0+Y21hcCwgJmNtYXApOworCQkJcmV0ID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJcmV0ID0gZmJfY21hcF90b191c2VyKCZpbmZvLT5jbWFwLCAmY21hcCk7CisJCWJyZWFrOwogCWNhc2UgRkJJT1BBTl9ESVNQTEFZOgotCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhciwgYXJncCwgc2l6ZW9mKHZhcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmFyLCBhcmdwLCBzaXplb2YodmFyKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQogCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0JCWkgPSBmYl9wYW5fZGlzcGxheShpbmZvLCAmdmFyKTsKKwkJcmV0ID0gZmJfcGFuX2Rpc3BsYXkoaW5mbywgJnZhcik7CiAJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJaWYgKGkpCi0JCQlyZXR1cm4gaTsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdmFyLCBzaXplb2YodmFyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIDA7CisJCWlmIChyZXQgPT0gMCAmJiBjb3B5X3RvX3VzZXIoYXJncCwgJnZhciwgc2l6ZW9mKHZhcikpKQorCQkJcmV0ID0gLUVGQVVMVDsKKwkJYnJlYWs7CiAJY2FzZSBGQklPX0NVUlNPUjoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOwogCWNhc2UgRkJJT0dFVF9DT04yRkJNQVA6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmY29uMmZiLCBhcmdwLCBzaXplb2YoY29uMmZiKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKGNvbjJmYi5jb25zb2xlIDwgMSB8fCBjb24yZmIuY29uc29sZSA+IE1BWF9OUl9DT05TT0xFUykKLQkJICAgIHJldHVybiAtRUlOVkFMOwotCQljb24yZmIuZnJhbWVidWZmZXIgPSAtMTsKLQkJZXZlbnQuaW5mbyA9IGluZm87Ci0JCWV2ZW50LmRhdGEgPSAmY29uMmZiOwotCQlmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX0dFVF9DT05TT0xFX01BUCwgJmV2ZW50KTsKLQkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCAmY29uMmZiLAorCQkJcmV0ID0gLUVGQVVMVDsKKwkJZWxzZSBpZiAoY29uMmZiLmNvbnNvbGUgPCAxIHx8IGNvbjJmYi5jb25zb2xlID4gTUFYX05SX0NPTlNPTEVTKQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJZWxzZSB7CisJCQljb24yZmIuZnJhbWVidWZmZXIgPSAtMTsKKwkJCWV2ZW50LmluZm8gPSBpbmZvOworCQkJZXZlbnQuZGF0YSA9ICZjb24yZmI7CisJCQlmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX0dFVF9DT05TT0xFX01BUCwKKwkJCQkJCQkJJmV2ZW50KTsKKwkJCXJldCA9IGNvcHlfdG9fdXNlcihhcmdwLCAmY29uMmZiLAogCQkJCSAgICBzaXplb2YoY29uMmZiKSkgPyAtRUZBVUxUIDogMDsKKwkJfQorCQlicmVhazsKIAljYXNlIEZCSU9QVVRfQ09OMkZCTUFQOgotCQlpZiAoY29weV9mcm9tX3VzZXIoJmNvbjJmYiwgYXJncCwgc2l6ZW9mKGNvbjJmYikpKQotCQkJcmV0dXJuIC0gRUZBVUxUOwotCQlpZiAoY29uMmZiLmNvbnNvbGUgPCAxIHx8IGNvbjJmYi5jb25zb2xlID4gTUFYX05SX0NPTlNPTEVTKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChjb24yZmIuZnJhbWVidWZmZXIgPCAwIHx8IGNvbjJmYi5mcmFtZWJ1ZmZlciA+PSBGQl9NQVgpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKLSNpZmRlZiBDT05GSUdfS01PRAorCQlpZiAoY29weV9mcm9tX3VzZXIoJmNvbjJmYiwgYXJncCwgc2l6ZW9mKGNvbjJmYikpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNvbjJmYi5jb25zb2xlIDwgMSB8fCBjb24yZmIuY29uc29sZSA+IE1BWF9OUl9DT05TT0xFUykgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb24yZmIuZnJhbWVidWZmZXIgPCAwIHx8IGNvbjJmYi5mcmFtZWJ1ZmZlciA+PSBGQl9NQVgpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQogCQlpZiAoIXJlZ2lzdGVyZWRfZmJbY29uMmZiLmZyYW1lYnVmZmVyXSkKLQkJICAgIHRyeV90b19sb2FkKGNvbjJmYi5mcmFtZWJ1ZmZlcik7Ci0jZW5kaWYgLyogQ09ORklHX0tNT0QgKi8KLQkJaWYgKCFyZWdpc3RlcmVkX2ZiW2NvbjJmYi5mcmFtZWJ1ZmZlcl0pCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKKwkJCXJlcXVlc3RfbW9kdWxlKCJmYiVkIiwgY29uMmZiLmZyYW1lYnVmZmVyKTsKKwkJaWYgKCFyZWdpc3RlcmVkX2ZiW2NvbjJmYi5mcmFtZWJ1ZmZlcl0pIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQogCQlldmVudC5pbmZvID0gaW5mbzsKIAkJZXZlbnQuZGF0YSA9ICZjb24yZmI7Ci0JCXJldHVybiBmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX1NFVF9DT05TT0xFX01BUCwKKwkJcmV0ID0gZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9TRVRfQ09OU09MRV9NQVAsCiAJCQkJCSAgICAgICZldmVudCk7CisJCWJyZWFrOwogCWNhc2UgRkJJT0JMQU5LOgogCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAJCWluZm8tPmZsYWdzIHw9IEZCSU5GT19NSVNDX1VTRVJFVkVOVDsKLQkJaSA9IGZiX2JsYW5rKGluZm8sIGFyZyk7CisJCXJldCA9IGZiX2JsYW5rKGluZm8sIGFyZyk7CiAJCWluZm8tPmZsYWdzICY9IH5GQklORk9fTUlTQ19VU0VSRVZFTlQ7CiAJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJcmV0dXJuIGk7CisJCWJyZWFrOzsKIAlkZWZhdWx0OgogCQlpZiAoZmItPmZiX2lvY3RsID09IE5VTEwpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIGZiLT5mYl9pb2N0bChpbmZvLCBjbWQsIGFyZyk7CisJCQlyZXQgPSAtRU5PVFRZOworCQllbHNlCisJCQlyZXQgPSBmYi0+ZmJfaW9jdGwoaW5mbywgY21kLCBhcmcpOwogCX0KKwltdXRleF91bmxvY2soJmluZm8tPmxvY2spOworCXJldHVybiByZXQ7CiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCkBAIC0xMTYxLDcgKzExODEsNyBAQAogCSAgICBwdXRfdXNlcihjb21wYXRfcHRyKGRhdGEpLCAmY21hcC0+dHJhbnNwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBmYl9pb2N0bChpbm9kZSwgZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgY21hcCk7CisJZXJyID0gZmJfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgY21hcCk7CiAKIAlpZiAoIWVycikgewogCQlpZiAoY29weV9pbl91c2VyKCZjbWFwMzItPnN0YXJ0LApAQCAtMTIxNSw3ICsxMjM1LDcgQEAKIAogCW9sZF9mcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwotCWVyciA9IGZiX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKSAmZml4KTsKKwllcnIgPSBmYl9pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKSAmZml4KTsKIAlzZXRfZnMob2xkX2ZzKTsKIAogCWlmICghZXJyKQpAQCAtMTIzMyw3ICsxMjUzLDcgQEAKIAlzdHJ1Y3QgZmJfb3BzICpmYiA9IGluZm8tPmZib3BzOwogCWxvbmcgcmV0ID0gLUVOT0lPQ1RMQ01EOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKIAlzd2l0Y2goY21kKSB7CiAJY2FzZSBGQklPR0VUX1ZTQ1JFRU5JTkZPOgogCWNhc2UgRkJJT1BVVF9WU0NSRUVOSU5GTzoKQEAgLTEyNDIsNyArMTI2Miw3IEBACiAJY2FzZSBGQklPUFVUX0NPTjJGQk1BUDoKIAkJYXJnID0gKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKTsKIAljYXNlIEZCSU9CTEFOSzoKLQkJcmV0ID0gZmJfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJcmV0ID0gZmJfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwogCQlicmVhazsKIAogCWNhc2UgRkJJT0dFVF9GU0NSRUVOSU5GTzoKQEAgLTEyNTksNyArMTI3OSw3IEBACiAJCQlyZXQgPSBmYi0+ZmJfY29tcGF0X2lvY3RsKGluZm8sIGNtZCwgYXJnKTsKIAkJYnJlYWs7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKQEAgLTEyODEsMTMgKzEzMDEsMTMgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKGZiLT5mYl9tbWFwKSB7CiAJCWludCByZXM7Ci0JCWxvY2tfa2VybmVsKCk7CisJCW11dGV4X2xvY2soJmluZm8tPmxvY2spOwogCQlyZXMgPSBmYi0+ZmJfbW1hcChpbmZvLCB2bWEpOwotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CiAJCXJldHVybiByZXM7CiAJfQogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKIAogCS8qIGZyYW1lIGJ1ZmZlciBtZW1vcnkgKi8KIAlzdGFydCA9IGluZm8tPmZpeC5zbWVtX3N0YXJ0OwpAQCAtMTI5NiwxMyArMTMxNiwxMyBAQAogCQkvKiBtZW1vcnkgbWFwcGVkIGlvICovCiAJCW9mZiAtPSBsZW47CiAJCWlmIChpbmZvLT52YXIuYWNjZWxfZmxhZ3MpIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKKwkJCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlzdGFydCA9IGluZm8tPmZpeC5tbWlvX3N0YXJ0OwogCQlsZW4gPSBQQUdFX0FMSUdOKChzdGFydCAmIH5QQUdFX01BU0spICsgaW5mby0+Zml4Lm1taW9fbGVuKTsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CiAJc3RhcnQgJj0gUEFHRV9NQVNLOwogCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0ICsgb2ZmKSA+IGxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzI2LDE1ICsxMzQ2LDEzIEBACiAKIAlpZiAoZmJpZHggPj0gRkJfTUFYKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlsb2NrX2tlcm5lbCgpOwotI2lmZGVmIENPTkZJR19LTU9ECi0JaWYgKCEoaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdKSkKLQkJdHJ5X3RvX2xvYWQoZmJpZHgpOwotI2VuZGlmIC8qIENPTkZJR19LTU9EICovCi0JaWYgKCEoaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdKSkgewotCQlyZXMgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9CisJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOworCWlmICghaW5mbykKKwkJcmVxdWVzdF9tb2R1bGUoImZiJWQiLCBmYmlkeCk7CisJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9ERVY7CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChpbmZvLT5mYm9wcy0+b3duZXIpKSB7CiAJCXJlcyA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwpAQCAtMTM1MCw3ICsxMzY4LDcgQEAKIAkJZmJfZGVmZXJyZWRfaW9fb3BlbihpbmZvLCBpbm9kZSwgZmlsZSk7CiAjZW5kaWYKIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xMzU5LDExICsxMzc3LDExIEBACiB7CiAJc3RydWN0IGZiX2luZm8gKiBjb25zdCBpbmZvID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKIAlpZiAoaW5mby0+ZmJvcHMtPmZiX3JlbGVhc2UpCiAJCWluZm8tPmZib3BzLT5mYl9yZWxlYXNlKGluZm8sMSk7CiAJbW9kdWxlX3B1dChpbmZvLT5mYm9wcy0+b3duZXIpOwotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMzcxLDcgKzEzODksNyBAQAogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5yZWFkID0JCWZiX3JlYWQsCiAJLndyaXRlID0JZmJfd3JpdGUsCi0JLmlvY3RsID0JZmJfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0gZmJfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwgPSBmYl9jb21wYXRfaW9jdGwsCiAjZW5kaWYKQEAgLTE0NDIsMTAgKzE0NjAsMTAgQEAKIAkJaWYgKCFyZWdpc3RlcmVkX2ZiW2ldKQogCQkJYnJlYWs7CiAJZmJfaW5mby0+bm9kZSA9IGk7CisJbXV0ZXhfaW5pdCgmZmJfaW5mby0+bG9jayk7CiAKLQlmYl9pbmZvLT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoZmJfY2xhc3MsIGZiX2luZm8tPmRldmljZSwKLQkJCQkJICAgICBNS0RFVihGQl9NQUpPUiwgaSksIE5VTEwsCi0JCQkJCSAgICAgImZiJWQiLCBpKTsKKwlmYl9pbmZvLT5kZXYgPSBkZXZpY2VfY3JlYXRlKGZiX2NsYXNzLCBmYl9pbmZvLT5kZXZpY2UsCisJCQkJICAgICBNS0RFVihGQl9NQUpPUiwgaSksIE5VTEwsICJmYiVkIiwgaSk7CiAJaWYgKElTX0VSUihmYl9pbmZvLT5kZXYpKSB7CiAJCS8qIE5vdCBmYXRhbCAqLwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gY3JlYXRlIGRldmljZSBmb3IgZnJhbWVidWZmZXIgJWQ7IGVycm5vID0gJWxkXG4iLCBpLCBQVFJfRVJSKGZiX2luZm8tPmRldikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYm1vbi5jIGIvZHJpdmVycy92aWRlby9mYm1vbi5jCmluZGV4IDZhMGFhMTguLjVjMWEyYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJtb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZibW9uLmMKQEAgLTU2NCw3ICs1NjQsMTMgQEAKIAkJbW9kZS0+c3luYyB8PSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1Q7CiAJbW9kZS0+cmVmcmVzaCA9IFBJWEVMX0NMT0NLLygoSF9BQ1RJVkUgKyBIX0JMQU5LSU5HKSAqCiAJCQkJICAgICAoVl9BQ1RJVkUgKyBWX0JMQU5LSU5HKSk7Ci0JbW9kZS0+dm1vZGUgPSAwOworCWlmIChJTlRFUkxBQ0VEKSB7CisJCW1vZGUtPnlyZXMgKj0gMjsKKwkJbW9kZS0+dXBwZXJfbWFyZ2luICo9IDI7CisJCW1vZGUtPmxvd2VyX21hcmdpbiAqPSAyOworCQltb2RlLT52c3luY19sZW4gKj0gMjsKKwkJbW9kZS0+dm1vZGUgfD0gRkJfVk1PREVfSU5URVJMQUNFRDsKKwl9CiAJbW9kZS0+ZmxhZyA9IEZCX01PREVfSVNfREVUQUlMRUQ7CiAKIAlEUFJJTlRLKCIgICAgICAlZCBNSHogIiwgIFBJWEVMX0NMT0NLLzEwMDAwMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbWFjZmIuYyBiL2RyaXZlcnMvdmlkZW8vaW1hY2ZiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNjZlZjIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy92aWRlby9pbWFjZmIuYworKysgL2Rldi9udWxsCkBAIC0xLDM3NiArMCwwIEBACi0vKgotICogZnJhbWVidWZmZXIgZHJpdmVyIGZvciBJbnRlbCBCYXNlZCBNYWMncwotICoKLSAqIChjKSAyMDA2IEVkZ2FyIEh1Y2VrIDxnaW1saUBkYXJrLWdyZWVuLmNvbT4KLSAqIE9yaWdpbmFsIGltYWMgZHJpdmVyIHdyaXR0ZW4gYnkgR2VyZCBLbm9yciA8a3JheGVsQGdvbGRiYWNoLmluLWJlcmxpbi5kZT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgotI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDx2aWRlby92Z2EuaD4KLQotdHlwZWRlZiBlbnVtIF9NQUNfVFlQRSB7Ci0JTV9JMTcsCi0JTV9JMjAsCi0JTV9NSU5JLAotCU1fTUFDQk9PSywKLQlNX1VOS05PV04KLX0gTUFDX1RZUEU7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGltYWNmYl9kZWZpbmVkIF9faW5pdGRhdGEgPSB7Ci0JLmFjdGl2YXRlCQk9IEZCX0FDVElWQVRFX05PVywKLQkuaGVpZ2h0CQkJPSAtMSwKLQkud2lkdGgJCQk9IC0xLAotCS5yaWdodF9tYXJnaW4JCT0gMzIsCi0JLnVwcGVyX21hcmdpbgkJPSAxNiwKLQkubG93ZXJfbWFyZ2luCQk9IDQsCi0JLnZzeW5jX2xlbgkJPSA0LAotCS52bW9kZQkJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gaW1hY2ZiX2ZpeCBfX2luaXRkYXRhID0gewotCS5pZAkJCT0gIklNQUMgVkdBIiwKLQkudHlwZQkJCT0gRkJfVFlQRV9QQUNLRURfUElYRUxTLAotCS5hY2NlbAkJCT0gRkJfQUNDRUxfTk9ORSwKLQkudmlzdWFsCQkJPSBGQl9WSVNVQUxfVFJVRUNPTE9SLAotfTsKLQotc3RhdGljIGludCBpbnZlcnNlOwotc3RhdGljIGludCBtb2RlbAkJPSBNX1VOS05PV047Ci1zdGF0aWMgaW50IG1hbnVhbF9oZWlnaHQ7Ci1zdGF0aWMgaW50IG1hbnVhbF93aWR0aDsKLQotc3RhdGljIGludCBzZXRfc3lzdGVtKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKLXsKLQlwcmludGsoS0VSTl9JTkZPICJpbWFjZmI6ICVzIGRldGVjdGVkIC0gc2V0IHN5c3RlbSB0byAlbGRcbiIsCi0JCWlkLT5pZGVudCwgKGxvbmcpaWQtPmRyaXZlcl9kYXRhKTsKLQotCW1vZGVsID0gKGxvbmcpaWQtPmRyaXZlcl9kYXRhOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIGRtaV9zeXN0ZW1fdGFibGVbXSA9IHsKLQl7IHNldF9zeXN0ZW0sICJpTWFjNCwxIiwgewotCSAgRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwiQXBwbGUgQ29tcHV0ZXIsIEluYy4iKSwKLQkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJpTWFjNCwxIikgfSwgKHZvaWQqKU1fSTE3fSwKLQl7IHNldF9zeXN0ZW0sICJNYWNCb29rUHJvMSwxIiwgewotCSAgRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwiQXBwbGUgQ29tcHV0ZXIsIEluYy4iKSwKLQkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNCb29rUHJvMSwxIikgfSwgKHZvaWQqKU1fSTE3fSwKLQl7IHNldF9zeXN0ZW0sICJNYWNCb29rMSwxIiwgewotCSAgRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwiQXBwbGUgQ29tcHV0ZXIsIEluYy4iKSwKLQkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNCb29rMSwxIil9LCAodm9pZCAqKU1fTUFDQk9PS30sCi0JeyBzZXRfc3lzdGVtLCAiTWFjbWluaTEsMSIsIHsKLQkgIERNSV9NQVRDSChETUlfQklPU19WRU5ET1IsIkFwcGxlIENvbXB1dGVyLCBJbmMuIiksCi0JICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjbWluaTEsMSIpfSwgKHZvaWQgKilNX01JTkl9LAotCXt9LAotfTsKLQotI2RlZmluZQlERUZBVUxUX0ZCX01FTQkxMDI0KjEwMjQqMTYKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgaW1hY2ZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKLQkJCSAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCi0JCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JLyoKLQkgKiAgU2V0IGEgc2luZ2xlIGNvbG9yIHJlZ2lzdGVyLiBUaGUgdmFsdWVzIHN1cHBsaWVkIGFyZQotCSAqICBhbHJlYWR5IHJvdW5kZWQgZG93biB0byB0aGUgaGFyZHdhcmUncyBjYXBhYmlsaXRpZXMKLQkgKiAgKGFjY29yZGluZyB0byB0aGUgZW50cmllcyBpbiB0aGUgYHZhcicgc3RydWN0dXJlKS4gUmV0dXJuCi0JICogICE9IDAgZm9yIGludmFsaWQgcmVnbm8uCi0JICovCi0KLQlpZiAocmVnbm8gPj0gaW5mby0+Y21hcC5sZW4pCi0JCXJldHVybiAxOwotCi0JaWYgKHJlZ25vIDwgMTYpIHsKLQkJcmVkICAgPj49IDg7Ci0JCWdyZWVuID4+PSA4OwotCQlibHVlICA+Pj0gODsKLQkJKCh1MzIgKikoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWdub10gPQotCQkJKHJlZCAgIDw8IGluZm8tPnZhci5yZWQub2Zmc2V0KSAgIHwKLQkJCShncmVlbiA8PCBpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0KSB8Ci0JCQkoYmx1ZSAgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfb3BzIGltYWNmYl9vcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5mYl9zZXRjb2xyZWcJPSBpbWFjZmJfc2V0Y29scmVnLAotCS5mYl9maWxscmVjdAk9IGNmYl9maWxscmVjdCwKLQkuZmJfY29weWFyZWEJPSBjZmJfY29weWFyZWEsCi0JLmZiX2ltYWdlYmxpdAk9IGNmYl9pbWFnZWJsaXQsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbWFjZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKLXsKLQljaGFyICp0aGlzX29wdDsKLQotCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCi0JCXJldHVybiAwOwotCi0Jd2hpbGUgKCh0aGlzX29wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgewotCQlpZiAoISp0aGlzX29wdCkgY29udGludWU7Ci0KLQkJaWYgKCFzdHJjbXAodGhpc19vcHQsICJpbnZlcnNlIikpCi0JCQlpbnZlcnNlID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcCh0aGlzX29wdCwgImkxNyIpKQotCQkJbW9kZWwgPSBNX0kxNzsKLQkJZWxzZSBpZiAoIXN0cmNtcCh0aGlzX29wdCwgImkyMCIpKQotCQkJbW9kZWwgPSBNX0kyMDsKLQkJZWxzZSBpZiAoIXN0cmNtcCh0aGlzX29wdCwgIm1pbmkiKSkKLQkJCW1vZGVsID0gTV9NSU5JOwotCQllbHNlIGlmICghc3RyY21wKHRoaXNfb3B0LCAibWFjYm9vayIpKQotCQkJbW9kZWwgPSBNX01BQ0JPT0s7Ci0JCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAiaGVpZ2h0OiIsIDcpKQotCQkJbWFudWFsX2hlaWdodCA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0KzcsIE5VTEwsIDApOwotCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgIndpZHRoOiIsIDYpKQotCQkJbWFudWFsX3dpZHRoID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrNiwgTlVMTCwgMCk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpbWFjZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmYl9pbmZvICppbmZvOwotCWludCBlcnI7Ci0JdW5zaWduZWQgaW50IHNpemVfdm1vZGU7Ci0JdW5zaWduZWQgaW50IHNpemVfcmVtYXA7Ci0JdW5zaWduZWQgaW50IHNpemVfdG90YWw7Ci0KLQlzY3JlZW5faW5mby5sZmJfZGVwdGggPSAzMjsKLQlzY3JlZW5faW5mby5sZmJfc2l6ZSA9IERFRkFVTFRfRkJfTUVNIC8gMHgxMDAwMDsKLQlzY3JlZW5faW5mby5wYWdlcz0xOwotCXNjcmVlbl9pbmZvLmJsdWVfc2l6ZSA9IDg7Ci0Jc2NyZWVuX2luZm8uYmx1ZV9wb3MgPSAwOwotCXNjcmVlbl9pbmZvLmdyZWVuX3NpemUgPSA4OwotCXNjcmVlbl9pbmZvLmdyZWVuX3BvcyA9IDg7Ci0Jc2NyZWVuX2luZm8ucmVkX3NpemUgPSA4OwotCXNjcmVlbl9pbmZvLnJlZF9wb3MgPSAxNjsKLQlzY3JlZW5faW5mby5yc3ZkX3NpemUgPSA4OwotCXNjcmVlbl9pbmZvLnJzdmRfcG9zID0gMjQ7Ci0KLQlzd2l0Y2ggKG1vZGVsKSB7Ci0JY2FzZSBNX0kxNzoKLQkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gMTQ0MDsKLQkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IDkwMDsKLQkJc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGggPSAxNDcyICogNDsKLQkJc2NyZWVuX2luZm8ubGZiX2Jhc2UgPSAweDgwMDEwMDAwOwotCQlicmVhazsKLQljYXNlIE1fSTIwOgotCQlzY3JlZW5faW5mby5sZmJfd2lkdGggPSAxNjgwOwotCQlzY3JlZW5faW5mby5sZmJfaGVpZ2h0ID0gMTA1MDsKLQkJc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGggPSAxNzI4ICogNDsKLQkJc2NyZWVuX2luZm8ubGZiX2Jhc2UgPSAweDgwMDEwMDAwOwotCQlicmVhazsKLQljYXNlIE1fTUlOSToKLQkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gMTAyNDsKLQkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IDc2ODsKLQkJc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGggPSAyMDQ4ICogNDsKLQkJc2NyZWVuX2luZm8ubGZiX2Jhc2UgPSAweDgwMDAwMDAwOwotCQlicmVhazsKLQljYXNlIE1fTUFDQk9PSzoKLQkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gMTI4MDsKLQkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IDgwMDsKLQkJc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGggPSAyMDQ4ICogNDsKLQkJc2NyZWVuX2luZm8ubGZiX2Jhc2UgPSAweDgwMDAwMDAwOwotCQlicmVhazsKLSAJfQotCi0JLyogaWYgdGhlIHVzZXIgd2FudHMgdG8gbWFudWFsbHkgc3BlY2lmeSBoZWlnaHQvd2lkdGgsCi0JICAgd2Ugd2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdHMgKi8KLQkvKiBUT0RPOiBldmVudHVhbGx5IGdldCBhdXRvLWRldGVjdGlvbiB3b3JraW5nICovCi0JaWYgKG1hbnVhbF9oZWlnaHQgPiAwKQotCQlzY3JlZW5faW5mby5sZmJfaGVpZ2h0ID0gbWFudWFsX2hlaWdodDsKLQlpZiAobWFudWFsX3dpZHRoID4gMCkKLQkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gbWFudWFsX3dpZHRoOwotCi0JaW1hY2ZiX2ZpeC5zbWVtX3N0YXJ0ID0gc2NyZWVuX2luZm8ubGZiX2Jhc2U7Ci0JaW1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwgPSBzY3JlZW5faW5mby5sZmJfZGVwdGg7Ci0JaW1hY2ZiX2RlZmluZWQueHJlcyA9IHNjcmVlbl9pbmZvLmxmYl93aWR0aDsKLQlpbWFjZmJfZGVmaW5lZC55cmVzID0gc2NyZWVuX2luZm8ubGZiX2hlaWdodDsKLQlpbWFjZmJfZml4LmxpbmVfbGVuZ3RoID0gc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGg7Ci0KLQkvKiAgIHNpemVfdm1vZGUgLS0gdGhhdCBpcyB0aGUgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgZm9yIHRoZQotCSAqICAgICAgICAgICAgICAgICB1c2VkIHZpZGVvIG1vZGUsIGkuZS4gdGhlIG1pbmltdW0gYW1vdW50IG9mCi0JICogICAgICAgICAgICAgICAgIG1lbW9yeSB3ZSBuZWVkLiAqLwotCXNpemVfdm1vZGUgPSBpbWFjZmJfZGVmaW5lZC55cmVzICogaW1hY2ZiX2ZpeC5saW5lX2xlbmd0aDsKLQotCS8qICAgc2l6ZV90b3RhbCAtLSBhbGwgdmlkZW8gbWVtb3J5IHdlIGhhdmUuIFVzZWQgZm9yCi0JICogICAgICAgICAgICAgICAgIGVudHJpZXMsIHJlc3NvdXJjZSBhbGxvY2F0aW9uIGFuZCBib3VuZHMKLQkgKiAgICAgICAgICAgICAgICAgY2hlY2tpbmcuICovCi0Jc2l6ZV90b3RhbCA9IHNjcmVlbl9pbmZvLmxmYl9zaXplICogNjU1MzY7Ci0JaWYgKHNpemVfdG90YWwgPCBzaXplX3Ztb2RlKQotCQlzaXplX3RvdGFsID0gc2l6ZV92bW9kZTsKLQotCS8qICAgc2l6ZV9yZW1hcCAtLSB0aGUgYW1vdW50IG9mIHZpZGVvIG1lbW9yeSB3ZSBhcmUgZ29pbmcgdG8KLQkgKiAgICAgICAgICAgICAgICAgdXNlIGZvciBpbWFjZmIuICBXaXRoIG1vZGVybiBjYXJkcyBpdCBpcyBubwotCSAqICAgICAgICAgICAgICAgICBvcHRpb24gdG8gc2ltcGx5IHVzZSBzaXplX3RvdGFsIGFzIHRoYXQKLQkgKiAgICAgICAgICAgICAgICAgd2FzdGVzIHBsZW50eSBvZiBrZXJuZWwgYWRkcmVzcyBzcGFjZS4gKi8KLQlzaXplX3JlbWFwICA9IHNpemVfdm1vZGUgKiAyOwotCWlmIChzaXplX3JlbWFwIDwgc2l6ZV92bW9kZSkKLQkJc2l6ZV9yZW1hcCA9IHNpemVfdm1vZGU7Ci0JaWYgKHNpemVfcmVtYXAgPiBzaXplX3RvdGFsKQotCQlzaXplX3JlbWFwID0gc2l6ZV90b3RhbDsKLQlpbWFjZmJfZml4LnNtZW1fbGVuID0gc2l6ZV9yZW1hcDsKLQotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGltYWNmYl9maXguc21lbV9zdGFydCwgc2l6ZV90b3RhbCwgImltYWNmYiIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJpbWFjZmI6IGNhbm5vdCByZXNlcnZlIHZpZGVvIG1lbW9yeSBhdCAweCVseFxuIiwKLQkJCWltYWNmYl9maXguc21lbV9zdGFydCk7Ci0JCS8qIFdlIGNhbm5vdCBtYWtlIHRoaXMgZmF0YWwuIFNvbWV0aW1lcyB0aGlzIGNvbWVzIGZyb20gbWFnaWMKLQkJICAgc3BhY2VzIG91ciByZXNvdXJjZSBoYW5kbGVycyBzaW1wbHkgZG9uJ3Qga25vdyBhYm91dCAqLwotCX0KLQotCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2YodTMyKSAqIDE2LCAmZGV2LT5kZXYpOwotCWlmICghaW5mbykgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9yZWxlYXNlX21lbTsKLQl9Ci0JaW5mby0+cHNldWRvX3BhbGV0dGUgPSBpbmZvLT5wYXI7Ci0JaW5mby0+cGFyID0gTlVMTDsKLQotCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcChpbWFjZmJfZml4LnNtZW1fc3RhcnQsIGltYWNmYl9maXguc21lbV9sZW4pOwotCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpbWFjZmI6IGFib3J0LCBjYW5ub3QgaW9yZW1hcCB2aWRlbyBtZW1vcnkgIgotCQkJCSIweCV4IEAgMHglbHhcbiIsCi0JCQlpbWFjZmJfZml4LnNtZW1fbGVuLCBpbWFjZmJfZml4LnNtZW1fc3RhcnQpOwotCQllcnIgPSAtRUlPOwotCQlnb3RvIGVycl91bm1hcDsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJpbWFjZmI6IGZyYW1lYnVmZmVyIGF0IDB4JWx4LCBtYXBwZWQgdG8gMHglcCwgIgotCSAgICAgICAidXNpbmcgJWRrLCB0b3RhbCAlZGtcbiIsCi0JICAgICAgIGltYWNmYl9maXguc21lbV9zdGFydCwgaW5mby0+c2NyZWVuX2Jhc2UsCi0JICAgICAgIHNpemVfcmVtYXAvMTAyNCwgc2l6ZV90b3RhbC8xMDI0KTsKLQlwcmludGsoS0VSTl9JTkZPICJpbWFjZmI6IG1vZGUgaXMgJWR4JWR4JWQsIGxpbmVsZW5ndGg9JWQsIHBhZ2VzPSVkXG4iLAotCSAgICAgICBpbWFjZmJfZGVmaW5lZC54cmVzLCBpbWFjZmJfZGVmaW5lZC55cmVzLAotCSAgICAgICBpbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCwgaW1hY2ZiX2ZpeC5saW5lX2xlbmd0aCwKLQkgICAgICAgc2NyZWVuX2luZm8ucGFnZXMpOwotCi0JaW1hY2ZiX2RlZmluZWQueHJlc192aXJ0dWFsID0gaW1hY2ZiX2RlZmluZWQueHJlczsKLQlpbWFjZmJfZGVmaW5lZC55cmVzX3ZpcnR1YWwgPSBpbWFjZmJfZml4LnNtZW1fbGVuIC8KLQkJCQkJaW1hY2ZiX2ZpeC5saW5lX2xlbmd0aDsKLQlwcmludGsoS0VSTl9JTkZPICJpbWFjZmI6IHNjcm9sbGluZzogcmVkcmF3XG4iKTsKLQlpbWFjZmJfZGVmaW5lZC55cmVzX3ZpcnR1YWwgPSBpbWFjZmJfZGVmaW5lZC55cmVzOwotCi0JLyogc29tZSBkdW1teSB2YWx1ZXMgZm9yIHRpbWluZyB0byBtYWtlIGZic2V0IGhhcHB5ICovCi0JaW1hY2ZiX2RlZmluZWQucGl4Y2xvY2sgICAgID0gMTAwMDAwMDAgLyBpbWFjZmJfZGVmaW5lZC54cmVzICoKLQkJCQkJMTAwMCAvIGltYWNmYl9kZWZpbmVkLnlyZXM7Ci0JaW1hY2ZiX2RlZmluZWQubGVmdF9tYXJnaW4gID0gKGltYWNmYl9kZWZpbmVkLnhyZXMgLyA4KSAmIDB4Zjg7Ci0JaW1hY2ZiX2RlZmluZWQuaHN5bmNfbGVuICAgID0gKGltYWNmYl9kZWZpbmVkLnhyZXMgLyA4KSAmIDB4Zjg7Ci0KLQlpbWFjZmJfZGVmaW5lZC5yZWQub2Zmc2V0ICAgID0gc2NyZWVuX2luZm8ucmVkX3BvczsKLQlpbWFjZmJfZGVmaW5lZC5yZWQubGVuZ3RoICAgID0gc2NyZWVuX2luZm8ucmVkX3NpemU7Ci0JaW1hY2ZiX2RlZmluZWQuZ3JlZW4ub2Zmc2V0ICA9IHNjcmVlbl9pbmZvLmdyZWVuX3BvczsKLQlpbWFjZmJfZGVmaW5lZC5ncmVlbi5sZW5ndGggID0gc2NyZWVuX2luZm8uZ3JlZW5fc2l6ZTsKLQlpbWFjZmJfZGVmaW5lZC5ibHVlLm9mZnNldCAgID0gc2NyZWVuX2luZm8uYmx1ZV9wb3M7Ci0JaW1hY2ZiX2RlZmluZWQuYmx1ZS5sZW5ndGggICA9IHNjcmVlbl9pbmZvLmJsdWVfc2l6ZTsKLQlpbWFjZmJfZGVmaW5lZC50cmFuc3Aub2Zmc2V0ID0gc2NyZWVuX2luZm8ucnN2ZF9wb3M7Ci0JaW1hY2ZiX2RlZmluZWQudHJhbnNwLmxlbmd0aCA9IHNjcmVlbl9pbmZvLnJzdmRfc2l6ZTsKLQotCXByaW50ayhLRVJOX0lORk8gImltYWNmYjogJXM6ICIKLQkgICAgICAgInNpemU9JWQ6JWQ6JWQ6JWQsIHNoaWZ0PSVkOiVkOiVkOiVkXG4iLAotCSAgICAgICAiVHJ1ZWNvbG9yIiwKLQkgICAgICAgc2NyZWVuX2luZm8ucnN2ZF9zaXplLAotCSAgICAgICBzY3JlZW5faW5mby5yZWRfc2l6ZSwKLQkgICAgICAgc2NyZWVuX2luZm8uZ3JlZW5fc2l6ZSwKLQkgICAgICAgc2NyZWVuX2luZm8uYmx1ZV9zaXplLAotCSAgICAgICBzY3JlZW5faW5mby5yc3ZkX3BvcywKLQkgICAgICAgc2NyZWVuX2luZm8ucmVkX3BvcywKLQkgICAgICAgc2NyZWVuX2luZm8uZ3JlZW5fcG9zLAotCSAgICAgICBzY3JlZW5faW5mby5ibHVlX3Bvcyk7Ci0KLQlpbWFjZmJfZml4LnlwYW5zdGVwICA9IDA7Ci0JaW1hY2ZiX2ZpeC55d3JhcHN0ZXAgPSAwOwotCi0JLyogcmVxdWVzdCBmYWlsdXJlIGRvZXMgbm90IGZhemUgdXMsIGFzIHZnYWNvbiBwcm9iYWJseSBoYXMgdGhpcwotCSAqIHJlZ2lvbiBhbHJlYWR5IChGSVhNRSkgKi8KLQlyZXF1ZXN0X3JlZ2lvbigweDNjMCwgMzIsICJpbWFjZmIiKTsKLQotCWluZm8tPmZib3BzID0gJmltYWNmYl9vcHM7Ci0JaW5mby0+dmFyID0gaW1hY2ZiX2RlZmluZWQ7Ci0JaW5mby0+Zml4ID0gaW1hY2ZiX2ZpeDsKLQlpbmZvLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7Ci0KLQlpZiAoZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKSA8IDApIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfdW5tYXA7Ci0JfQotCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTwwKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX2ZiX2RlYWxvYzsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwKLQkgICAgICAgaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkKTsKLQlyZXR1cm4gMDsKLQotZXJyX2ZiX2RlYWxvYzoKLQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwotZXJyX3VubWFwOgotCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwotCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7Ci1lcnJfcmVsZWFzZV9tZW06Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGltYWNmYl9maXguc21lbV9zdGFydCwgc2l6ZV90b3RhbCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW1hY2ZiX2RyaXZlciA9IHsKLQkucHJvYmUJPSBpbWFjZmJfcHJvYmUsCi0JLmRyaXZlcgk9IHsKLQkJLm5hbWUJPSAiaW1hY2ZiIiwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW1hY2ZiX2RldmljZSA9IHsKLQkubmFtZQk9ICJpbWFjZmIiLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW1hY2ZiX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCWNoYXIgKm9wdGlvbiA9IE5VTEw7Ci0KLQlpZiAoIWVmaV9lbmFibGVkKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoIWRtaV9jaGVja19zeXN0ZW0oZG1pX3N5c3RlbV90YWJsZSkpCi0JCXJldHVybiAtRU5PREVWOwotCWlmIChtb2RlbCA9PSBNX1VOS05PV04pCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKGZiX2dldF9vcHRpb25zKCJpbWFjZmIiLCAmb3B0aW9uKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpbWFjZmJfc2V0dXAob3B0aW9uKTsKLQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmltYWNmYl9kcml2ZXIpOwotCi0JaWYgKCFyZXQpIHsKLQkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpbWFjZmJfZGV2aWNlKTsKLQkJaWYgKHJldCkKLQkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpbWFjZmJfZHJpdmVyKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLW1vZHVsZV9pbml0KGltYWNmYl9pbml0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmIuaCBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiLmgKaW5kZXggMzMyNWZiZC4uYTUwYmVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYi5oCkBAIC0xMiw5ICsxMiw5IEBACiAjZW5kaWYKIAogLyoqKiBWZXJzaW9uL25hbWUgKioqLwotI2RlZmluZSBJTlRFTEZCX1ZFUlNJT04JCQkiMC45LjUiCisjZGVmaW5lIElOVEVMRkJfVkVSU0lPTgkJCSIwLjkuNiIKICNkZWZpbmUgSU5URUxGQl9NT0RVTEVfTkFNRQkJImludGVsZmIiCi0jZGVmaW5lIFNVUFBPUlRFRF9DSElQU0VUUwkJIjgzME0vODQ1Ry84NTJHTS84NTVHTS84NjVHLzkxNUcvOTE1R00vOTQ1Ry85NDVHTS85NjVHLzk2NUdNIgorI2RlZmluZSBTVVBQT1JURURfQ0hJUFNFVFMJCSI4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHLzkxNUdNLzk0NUcvOTQ1R00vOTQ1R01FLzk2NUcvOTY1R00iCiAKIAogLyoqKiBEZWJ1Zy9mZWF0dXJlIGRlZmluZXMgKioqLwpAQCAtNTgsNiArNTgsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzkxNUdNCTB4MjU5MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUcJMHgyNzcyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1R00JMHgyN0EyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1R01FCTB4MjdBRQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk2NUcJMHgyOUEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfOTY1R00JMHgyQTAyCiAKQEAgLTE2MCw2ICsxNjEsNyBAQAogCUlOVEVMXzkxNUdNLAogCUlOVEVMXzk0NUcsCiAJSU5URUxfOTQ1R00sCisJSU5URUxfOTQ1R01FLAogCUlOVEVMXzk2NUcsCiAJSU5URUxfOTY1R00sCiB9OwpAQCAtMzYzLDYgKzM2NSw3IEBACiAJCQkoKGRpbmZvKS0+Y2hpcHNldCA9PSBJTlRFTF85MTVHTSkgfHwJXAogCQkJKChkaW5mbyktPmNoaXBzZXQgPT0gSU5URUxfOTQ1RykgfHwJXAogCQkJKChkaW5mbyktPmNoaXBzZXQgPT0gSU5URUxfOTQ1R00pIHx8CVwKKwkJCSgoZGluZm8pLT5jaGlwc2V0ID09IElOVEVMXzk0NUdNRSkgfHwJXAogCQkJKChkaW5mbyktPmNoaXBzZXQgPT0gSU5URUxfOTY1RykgfHwJXAogCQkJKChkaW5mbyktPmNoaXBzZXQgPT0gSU5URUxfOTY1R00pKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYl9pMmMuYyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiX2kyYy5jCmluZGV4IGZjZjlmYWQuLjVkODk2YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiX2kyYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiX2kyYy5jCkBAIC0xNzEsNiArMTcxLDcgQEAKIAkJLyogaGFzIHNvbWUgTFZEUyArIHR2LW91dCAqLwogCWNhc2UgSU5URUxfOTQ1RzoKIAljYXNlIElOVEVMXzk0NUdNOgorCWNhc2UgSU5URUxfOTQ1R01FOgogCWNhc2UgSU5URUxfOTY1RzoKIAljYXNlIElOVEVMXzk2NUdNOgogCQkvKiBTRFZPIHBvcnRzIGhhdmUgYSBzaW5nbGUgY29udHJvbCBidXMgLSAyIGRldmljZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCmluZGV4IGU0NDMwM2YuLmEwOWUyMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwpAQCAtMiw3ICsyLDcgQEAKICAqIGludGVsZmIKICAqCiAgKiBMaW51eCBmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIEludGVsKFIpIDgzME0vODQ1Ry84NTJHTS84NTVHTS84NjVHLzkxNUcvOTE1R00vCi0gKiA5NDVHLzk0NUdNLzk2NUcvOTY1R00gaW50ZWdyYXRlZCBncmFwaGljcyBjaGlwcy4KKyAqIDk0NUcvOTQ1R00vOTQ1R01FLzk2NUcvOTY1R00gaW50ZWdyYXRlZCBncmFwaGljcyBjaGlwcy4KICAqCiAgKiBDb3B5cmlnaHQgwqkgMjAwMiwgMjAwMyBEYXZpZCBEYXdlcyA8ZGF3ZXNAeGZyZWU4Ni5vcmc+CiAgKiAgICAgICAgICAgICAgICAgICAyMDA0IFN5bHZhaW4gTWV5ZXIKQEAgLTEwMiw2ICsxMDIsOSBAQAogICoKICAqICAgIDA0LzIwMDggLSBWZXJzaW9uIDAuOS41CiAgKiAgICAgICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIDk2NUcvOTY1R00uIChNYWlrIEJyb2VtbWUgPG1icm9lbW1lQHBsdXNzZXJ2ZXIuZGU+KQorICoKKyAqICAgIDA4LzIwMDggLSBWZXJzaW9uIDAuOS42CisgKiAgICAgICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIDk0NUdNRS4gKFBoaWwgRW5kZWNvdHQgPHNwYW1fZnJvbV9pbnRlbGZiQGNoZXpwaGlsLm9yZz4pCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTgzLDYgKzE4Niw3IEBACiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzkxNUdNLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgSU5URUxGQl9DTEFTU19NQVNLLCBJTlRFTF85MTVHTSB9LAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF85NDVHLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgSU5URUxGQl9DTEFTU19NQVNLLCBJTlRFTF85NDVHIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgSU5URUxGQl9DTEFTU19NQVNLLCBJTlRFTF85NDVHTSB9LAorCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF85NDVHTUUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCBJTlRFTEZCX0NMQVNTX01BU0ssIElOVEVMXzk0NUdNRSB9LAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF85NjVHLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgSU5URUxGQl9DTEFTU19NQVNLLCBJTlRFTF85NjVHIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzk2NUdNLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgSU5URUxGQl9DTEFTU19NQVNLLCBJTlRFTF85NjVHTSB9LAogCXsgMCwgfQpAQCAtNTU1LDYgKzU1OSw3IEBACiAJICAgIChlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzkxNUdNKSB8fAogCSAgICAoZW50LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF85NDVHKSAgfHwKIAkgICAgKGVudC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1R00pIHx8CisJICAgIChlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNRSkgfHwKIAkgICAgKGVudC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfOTY1RykgfHwKIAkgICAgKGVudC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfOTY1R00pKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYwppbmRleCA4ZTZkNmE0Li44YjI2YjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jCkBAIC0xNDMsNiArMTQzLDEyIEBACiAJCWRpbmZvLT5tb2JpbGUgPSAxOwogCQlkaW5mby0+cGxsX2luZGV4ID0gUExMU19JOXh4OwogCQlyZXR1cm4gMDsKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1R01FOgorCQlkaW5mby0+bmFtZSA9ICJJbnRlbChSKSA5NDVHTUUiOworCQlkaW5mby0+Y2hpcHNldCA9IElOVEVMXzk0NUdNRTsKKwkJZGluZm8tPm1vYmlsZSA9IDE7CisJCWRpbmZvLT5wbGxfaW5kZXggPSBQTExTX0k5eHg7CisJCXJldHVybiAwOwogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85NjVHOgogCQlkaW5mby0+bmFtZSA9ICJJbnRlbChSKSA5NjVHIjsKIAkJZGluZm8tPmNoaXBzZXQgPSBJTlRFTF85NjVHOwpAQCAtMTg2LDYgKzE5Miw3IEBACiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzkxNUdNOgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85NDVHOgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85NDVHTToKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1R01FOgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85NjVHOgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85NjVHTToKIAkJLyogOTE1LCA5NDUgYW5kIDk2NSBjaGlwc2V0cyBzdXBwb3J0IGEgMjU2TUIgYXBlcnR1cmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMKaW5kZXggYzAyMTM2Mi4uOGU3YTI3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYwpAQCAtMTQ1Myw2ICsxNDUzLDEzIEBACiAJCU1HQV9HMTAwLAogCQkmdmJHMTAwLAogCQkiTUdBLUcxMDAgKEFHUCkifSwKKwl7UENJX1ZFTkRPUl9JRF9NQVRST1gsCVBDSV9ERVZJQ0VfSURfTUFUUk9YX0cyMDBFVl9QQ0ksCTB4RkYsCisJCTAsCQkJMCwKKwkJREVWRl9HMjAwLAorCQkyMzAwMDAsCisJCU1HQV9HMjAwLAorCQkmdmJHMjAwLAorCQkiTUdBLUcyMDBlViAoUENJKSJ9LAogCXtQQ0lfVkVORE9SX0lEX01BVFJPWCwJUENJX0RFVklDRV9JRF9NQVRST1hfRzIwMF9QQ0ksCTB4RkYsCiAJCTAsCQkJMCwKIAkJREVWRl9HMjAwLApAQCAtMjExOCw2ICsyMTI1LDggQEAKIAkJUENJX0FOWV9JRCwJUENJX0FOWV9JRCwJMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfTUFUUk9YLAlQQ0lfREVWSUNFX0lEX01BVFJPWF9HMTAwX0FHUCwKIAkJUENJX0FOWV9JRCwJUENJX0FOWV9JRCwJMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTUFUUk9YLAlQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwRVZfUENJLAorCQlQQ0lfQU5ZX0lELAlQQ0lfQU5ZX0lELAkwLCAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9NQVRST1gsCVBDSV9ERVZJQ0VfSURfTUFUUk9YX0cyMDBfUENJLAogCQlQQ0lfQU5ZX0lELAlQQ0lfQU5ZX0lELAkwLCAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9NQVRST1gsCVBDSV9ERVZJQ0VfSURfTUFUUk9YX0cyMDBfQUdQLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tZXRyb25vbWVmYi5jIGIvZHJpdmVycy92aWRlby9tZXRyb25vbWVmYi5jCmluZGV4IGFmZWVkMDYuLmRmMWY3NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21ldHJvbm9tZWZiLmMKQEAgLTE4OCw3ICsxODgsNyBAQAogCQllcGRfZnJhbWVfdGFibGVbcGFyLT5kdF0ud2ZtX3NpemUgPSB1c2VyX3dmbV9zaXplOwogCiAJaWYgKHNpemUgIT0gZXBkX2ZyYW1lX3RhYmxlW3Bhci0+ZHRdLndmbV9zaXplKSB7Ci0JCWRldl9lcnIoZGV2LCAiRXJyb3I6IHVuZXhwZWN0ZWQgc2l6ZSAlZCAhPSAlZFxuIiwgc2l6ZSwKKwkJZGV2X2VycihkZXYsICJFcnJvcjogdW5leHBlY3RlZCBzaXplICVaZCAhPSAlZFxuIiwgc2l6ZSwKIAkJCQkJZXBkX2ZyYW1lX3RhYmxlW3Bhci0+ZHRdLndmbV9zaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9uZW9mYi5jIGIvZHJpdmVycy92aWRlby9uZW9mYi5jCmluZGV4IDI1MTcyYjIuLmJmYjgwMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbmVvZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL25lb2ZiLmMKQEAgLTQyNiwxMSArNDI2LDExIEBACiB7CiAJdW5zaWduZWQgY2hhciB0bXA7CiAKKwl0bXAgPSB2Z2FfcnNlcShOVUxMLCAweDAxKTsKIAlpZiAob24pIHsKIAkJLyoKIAkJICogVHVybiBvZmYgc2NyZWVuIGFuZCBkaXNhYmxlIHNlcXVlbmNlci4KIAkJICovCi0JCXRtcCA9IHZnYV9yc2VxKE5VTEwsIDB4MDEpOwogCQl2Z2Ffd3NlcShOVUxMLCAweDAwLCAweDAxKTsJCS8qIFN5bmNocm9ub3VzIFJlc2V0ICovCiAJCXZnYV93c2VxKE5VTEwsIDB4MDEsIHRtcCB8IDB4MjApOwkvKiBkaXNhYmxlIHRoZSBkaXNwbGF5ICovCiAKQEAgLTQzOSw3ICs0MzksNiBAQAogCQkvKgogCQkgKiBSZWVuYWJsZSBzZXF1ZW5jZXIsIHRoZW4gdHVybiBvbiBzY3JlZW4uCiAJCSAqLwotCQl0bXAgPSB2Z2FfcnNlcShOVUxMLCAweDAxKTsKIAkJdmdhX3dzZXEoTlVMTCwgMHgwMSwgdG1wICYgfjB4MjApOwkvKiByZWVuYWJsZSBkaXNwbGF5ICovCiAJCXZnYV93c2VxKE5VTEwsIDB4MDAsIDB4MDMpOwkJLyogY2xlYXIgc3luY2hyb25vdXNyZXNldCAqLwogCkBAIC01NTgsMTQgKzU1NywxMiBAQAogewogCXN0cnVjdCBuZW9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCW11dGV4X2xvY2soJnBhci0+b3Blbl9sb2NrKTsKIAlpZiAoIXBhci0+cmVmX2NvdW50KSB7CiAJCW1lbXNldCgmcGFyLT5zdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCB2Z2FzdGF0ZSkpOwogCQlwYXItPnN0YXRlLmZsYWdzID0gVkdBX1NBVkVfTU9ERSB8IFZHQV9TQVZFX0ZPTlRTOwogCQlzYXZlX3ZnYSgmcGFyLT5zdGF0ZSk7CiAJfQogCXBhci0+cmVmX2NvdW50Kys7Ci0JbXV0ZXhfdW5sb2NrKCZwYXItPm9wZW5fbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU3NSwxNiArNTcyLDEzIEBACiB7CiAJc3RydWN0IG5lb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCi0JbXV0ZXhfbG9jaygmcGFyLT5vcGVuX2xvY2spOwotCWlmICghcGFyLT5yZWZfY291bnQpIHsKLQkJbXV0ZXhfdW5sb2NrKCZwYXItPm9wZW5fbG9jayk7CisJaWYgKCFwYXItPnJlZl9jb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCiAJaWYgKHBhci0+cmVmX2NvdW50ID09IDEpIHsKIAkJcmVzdG9yZV92Z2EoJnBhci0+c3RhdGUpOwogCX0KIAlwYXItPnJlZl9jb3VudC0tOwotCW11dGV4X3VubG9jaygmcGFyLT5vcGVuX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NDgsMTAgKzY0MiwxMCBAQAogCXZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOwogCXZhci0+dHJhbnNwLm1zYl9yaWdodCA9IDA7CiAKKwl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CiAJc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7CiAJY2FzZSA4OgkJLyogUFNFVURPQ09MT1VSLCAyNTYgKi8KLQkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKLQkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKIAkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKIAkJdmFyLT5yZWQubGVuZ3RoID0gODsKIAkJdmFyLT5ncmVlbi5vZmZzZXQgPSAwOwpAQCAtNjYxLDggKzY1NSw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSAxNjoJCS8qIERJUkVDVENPTE9VUiwgNjRrICovCi0JCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7Ci0JCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CiAJCXZhci0+cmVkLm9mZnNldCA9IDExOwogCQl2YXItPnJlZC5sZW5ndGggPSA1OwogCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7CkBAIC02NzIsOCArNjY0LDYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIDI0OgkJLyogVFJVRUNPTE9VUiwgMTZtICovCi0JCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7Ci0JCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CiAJCXZhci0+cmVkLm9mZnNldCA9IDE2OwogCQl2YXItPnJlZC5sZW5ndGggPSA4OwogCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7CkBAIC03MDQsOCArNjk0LDYgQEAKIAlpZiAodnJhbWxlbiA+IDQgKiAxMDI0ICogMTAyNCkKIAkJdnJhbWxlbiA9IDQgKiAxMDI0ICogMTAyNDsKIAotCWlmICh2YXItPnlyZXNfdmlydHVhbCA8IHZhci0+eXJlcykKLQkJdmFyLT55cmVzX3ZpcnR1YWwgPSB2YXItPnlyZXM7CiAJaWYgKHZhci0+eHJlc192aXJ0dWFsIDwgdmFyLT54cmVzKQogCQl2YXItPnhyZXNfdmlydHVhbCA9IHZhci0+eHJlczsKIApAQCAtNzIyLDggKzcxMCw2IEBACiAJICAgaWYgaXQgd2FzIHBvc3NpYmxlLiBXZSBzaG91bGQgcmV0dXJuIC1FSU5WQUwsIGJ1dCBJIGRpc2FncmVlICovCiAJaWYgKHZhci0+eXJlc192aXJ0dWFsIDwgdmFyLT55cmVzKQogCQl2YXItPnlyZXMgPSB2YXItPnlyZXNfdmlydHVhbDsKLQlpZiAodmFyLT54cmVzX3ZpcnR1YWwgPCB2YXItPnhyZXMpCi0JCXZhci0+eHJlcyA9IHZhci0+eHJlc192aXJ0dWFsOwogCWlmICh2YXItPnhvZmZzZXQgKyB2YXItPnhyZXMgPiB2YXItPnhyZXNfdmlydHVhbCkKIAkJdmFyLT54b2Zmc2V0ID0gdmFyLT54cmVzX3ZpcnR1YWwgLSB2YXItPnhyZXM7CiAJaWYgKHZhci0+eW9mZnNldCArIHZhci0+eXJlcyA+IHZhci0+eXJlc192aXJ0dWFsKQpAQCAtMTE4Niw4ICsxMTcyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG5lb2ZiX3VwZGF0ZV9zdGFydChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKKy8qCisgKiAgICBQYW4gb3IgV3JhcCB0aGUgRGlzcGxheQorICovCitzdGF0aWMgaW50IG5lb2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbmVvZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJc3RydWN0IHZnYXN0YXRlICpzdGF0ZSA9ICZwYXItPnN0YXRlOwpAQCAtMTIxNiwzNSArMTIwNSw3IEBACiAJdmdhX3dnZngoc3RhdGUtPnZnYWJhc2UsIDB4MEUsICgoKEJhc2UgPj4gMTYpICYgMHgwZikgfCAob2xkRXh0Q1JURGlzcEFkZHIgJiAweGYwKSkpOwogCiAJbmVvTG9jayhzdGF0ZSk7Ci19CiAKLS8qCi0gKiAgICBQYW4gb3IgV3JhcCB0aGUgRGlzcGxheQotICovCi1zdGF0aWMgaW50IG5lb2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQl1X2ludCB5X2JvdHRvbTsKLQotCXlfYm90dG9tID0gdmFyLT55b2Zmc2V0OwotCi0JaWYgKCEodmFyLT52bW9kZSAmIEZCX1ZNT0RFX1lXUkFQKSkKLQkJeV9ib3R0b20gKz0gdmFyLT55cmVzOwotCi0JaWYgKHZhci0+eG9mZnNldCA+ICh2YXItPnhyZXNfdmlydHVhbCAtIHZhci0+eHJlcykpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICh5X2JvdHRvbSA+IGluZm8tPnZhci55cmVzX3ZpcnR1YWwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbmVvZmJfdXBkYXRlX3N0YXJ0KGluZm8sIHZhcik7Ci0KLQlpbmZvLT52YXIueG9mZnNldCA9IHZhci0+eG9mZnNldDsKLQlpbmZvLT52YXIueW9mZnNldCA9IHZhci0+eW9mZnNldDsKLQotCWlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfWVdSQVApCi0JCWluZm8tPnZhci52bW9kZSB8PSBGQl9WTU9ERV9ZV1JBUDsKLQllbHNlCi0JCWluZm8tPnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5OTIsNyArMTk1Myw2IEBACiAKIAlpbmZvLT5maXguYWNjZWwgPSBpZC0+ZHJpdmVyX2RhdGE7CiAKLQltdXRleF9pbml0KCZwYXItPm9wZW5fbG9jayk7CiAJcGFyLT5wY2lfYnVyc3QgPSAhbm9wY2lidXJzdDsKIAlwYXItPmxjZF9zdHJldGNoID0gIW5vc3RyZXRjaDsKIAlwYXItPmxpYnJldHRvID0gbGlicmV0dG87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCmluZGV4IDZlZmNmODkuLmRmYjcyZjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHsKLQl1MzIJCWJhc2U7CisJdm9pZCBfX2lvbWVtCSpiYXNlOwogCiAJc3RydWN0IG9tYXBmYl9tZW1fZGVzYwltZW1fZGVzYzsKIAlzdHJ1Y3QgcmVzbWFwCQkqcmVzX21hcFtESVNQQ19NRU1UWVBFX05VTV07CkBAIC0yMTIsOSArMjEyLDkgQEAKIAlkaXNwY193cml0ZV9yZWcoRElTUENfQ09OVFJPTCwgbCk7CiAKIAkvKiBTZXQgYnlwYXNzIG1vZGUgaW4gUkZCSSBtb2R1bGUgKi8KLQlsID0gX19yYXdfcmVhZGwoaW9fcDJ2KFJGQklfQ09OVFJPTCkpOworCWwgPSBfX3Jhd19yZWFkbChJT19BRERSRVNTKFJGQklfQ09OVFJPTCkpOwogCWwgfD0gZW5hYmxlID8gMCA6ICgxIDw8IDEpOwotCV9fcmF3X3dyaXRlbChsLCBpb19wMnYoUkZCSV9DT05UUk9MKSk7CisJX19yYXdfd3JpdGVsKGwsIElPX0FERFJFU1MoUkZCSV9DT05UUk9MKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9sY2RfZGF0YV9saW5lcyhpbnQgZGF0YV9saW5lcykKQEAgLTEzNDksMTQgKzEzNDksMTkgQEAKIAogCW1lbXNldCgmZGlzcGMsIDAsIHNpemVvZihkaXNwYykpOwogCi0JZGlzcGMuYmFzZSA9IGlvX3AydihESVNQQ19CQVNFKTsKKwlkaXNwYy5iYXNlID0gaW9yZW1hcChESVNQQ19CQVNFLCBTWl8xSyk7CisJaWYgKCFkaXNwYy5iYXNlKSB7CisJCWRldl9lcnIoZmJkZXYtPmRldiwgImNhbid0IGlvcmVtYXAgRElTUENcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKIAlkaXNwYy5mYmRldiA9IGZiZGV2OwogCWRpc3BjLmV4dF9tb2RlID0gZXh0X21vZGU7CiAKIAlpbml0X2NvbXBsZXRpb24oJmRpc3BjLmZyYW1lX2RvbmUpOwogCiAJaWYgKChyID0gZ2V0X2Rzc19jbG9ja3MoKSkgPCAwKQotCQlyZXR1cm4gcjsKKwkJZ290byBmYWlsMDsKIAogCWVuYWJsZV9pbnRlcmZhY2VfY2xvY2tzKDEpOwogCWVuYWJsZV9sY2RfY2xvY2tzKDEpOwpAQCAtMTQxNCw3ICsxNDE5LDcgQEAKIAl9CiAKIAkvKiBMMyBmaXJld2FsbCBzZXR0aW5nOiBlbmFibGUgYWNjZXNzIHRvIE9DTSBSQU0gKi8KLQlfX3Jhd193cml0ZWwoMHg0MDIwMDBiMCwgaW9fcDJ2KDB4NjgwMDUwYTApKTsKKwlfX3Jhd193cml0ZWwoMHg0MDIwMDBiMCwgSU9fQUREUkVTUygweDY4MDA1MGEwKSk7CiAKIAlpZiAoKHIgPSBhbGxvY19wYWxldHRlX3JhbSgpKSA8IDApCiAJCWdvdG8gZmFpbDI7CkBAIC0xNDY0LDcgKzE0NjksOCBAQAogCWVuYWJsZV9sY2RfY2xvY2tzKDApOwogCWVuYWJsZV9pbnRlcmZhY2VfY2xvY2tzKDApOwogCXB1dF9kc3NfY2xvY2tzKCk7Ci0KK2ZhaWwwOgorCWlvdW5tYXAoZGlzcGMuYmFzZSk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE0ODEsNiArMTQ4Nyw3IEBACiAJZnJlZV9pcnEoSU5UXzI0WFhfRFNTX0lSUSwgZGlzcGMuZmJkZXYpOwogCWVuYWJsZV9pbnRlcmZhY2VfY2xvY2tzKDApOwogCXB1dF9kc3NfY2xvY2tzKCk7CisJaW91bm1hcChkaXNwYy5iYXNlKTsKIH0KIAogY29uc3Qgc3RydWN0IGxjZF9jdHJsIG9tYXAyX2ludF9jdHJsID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmggYi9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuaAppbmRleCBlYjE1MTJiLi5lZjcyMGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuaAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuaApAQCAtNDAsNCArNDAsNiBAQAogZXh0ZXJuIGludCAgb21hcF9kaXNwY19yZXF1ZXN0X2lycSh2b2lkICgqY2FsbGJhY2spKHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTsKIGV4dGVybiB2b2lkIG9tYXBfZGlzcGNfZnJlZV9pcnEodm9pZCk7CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbGNkX2N0cmwgb21hcDJfaW50X2N0cmw7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9oNC5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9oNC5jCmluZGV4IDg4YzE5ZDQuLjZmZjU2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaDQuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2g0LmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGxjZF9wYW5lbCBoNF9wYW5lbCA9IHsKK3N0YXRpYyBzdHJ1Y3QgbGNkX3BhbmVsIGg0X3BhbmVsID0gewogCS5uYW1lCQk9ICJoNCIsCiAJLmNvbmZpZwkJPSBPTUFQX0xDRENfUEFORUxfVEZULAogCkBAIC05MSw3ICs5MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaDRfcGFuZWxfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaDRfcGFuZWxfZHJpdmVyID0gewogCS5wcm9iZQkJPSBoNF9wYW5lbF9wcm9iZSwKIAkucmVtb3ZlCQk9IGg0X3BhbmVsX3JlbW92ZSwKIAkuc3VzcGVuZAk9IGg0X3BhbmVsX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2lubjE2MTAuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaW5uMTYxMC5jCmluZGV4IDZhNDJjNmEuLjRjNGY3ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaW5uMTYxMC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaW5uMTYxMC5jCkBAIC0zMiw0MyArMzIsNDMgQEAKIHsKIAlpbnQgciA9IDA7CiAKLQlpZiAob21hcF9yZXF1ZXN0X2dwaW8oMTQpKSB7CisJaWYgKGdwaW9fcmVxdWVzdCgxNCwgImxjZF9lbjAiKSkgewogCQlwcl9lcnIoTU9EVUxFX05BTUUgIjogY2FuJ3QgcmVxdWVzdCBHUElPIDE0XG4iKTsKIAkJciA9IC0xOwogCQlnb3RvIGV4aXQ7CiAJfQotCWlmIChvbWFwX3JlcXVlc3RfZ3BpbygxNSkpIHsKKwlpZiAoZ3Bpb19yZXF1ZXN0KDE1LCAibGNkX2VuMSIpKSB7CiAJCXByX2VycihNT0RVTEVfTkFNRSAiOiBjYW4ndCByZXF1ZXN0IEdQSU8gMTVcbiIpOwotCQlvbWFwX2ZyZWVfZ3BpbygxNCk7CisJCWdwaW9fZnJlZSgxNCk7CiAJCXIgPSAtMTsKIAkJZ290byBleGl0OwogCX0KIAkvKiBjb25maWd1cmUgR1BJTygxNCwgMTUpIGFzIG91dHB1dHMgKi8KLQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbigxNCwgMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oMTUsIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxNCwgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDE1LCAwKTsKIGV4aXQ6CiAJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyB2b2lkIGlubm92YXRvcjE2MTBfcGFuZWxfY2xlYW51cChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKIHsKLQlvbWFwX2ZyZWVfZ3BpbygxNSk7Ci0Jb21hcF9mcmVlX2dwaW8oMTQpOworCWdwaW9fZnJlZSgxNSk7CisJZ3Bpb19mcmVlKDE0KTsKIH0KIAogc3RhdGljIGludCBpbm5vdmF0b3IxNjEwX3BhbmVsX2VuYWJsZShzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCkKIHsKIAkvKiBzZXQgR1BJTzE0IGFuZCBHUElPMTUgaGlnaCAqLwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgxNCwgMSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDE1LCAxKTsKKwlncGlvX3NldF92YWx1ZSgxNCwgMSk7CisJZ3Bpb19zZXRfdmFsdWUoMTUsIDEpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBpbm5vdmF0b3IxNjEwX3BhbmVsX2Rpc2FibGUoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCiB7CiAJLyogc2V0IEdQSU8xMywgR1BJTzE0IGFuZCBHUElPMTUgbG93ICovCi0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDE0LCAwKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoMTUsIDApOworCWdwaW9fc2V0X3ZhbHVlKDE0LCAwKTsKKwlncGlvX3NldF92YWx1ZSgxNSwgMCk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlubm92YXRvcjE2MTBfcGFuZWxfZ2V0X2NhcHMoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29zay5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vc2suYwppbmRleCBhNGE3MjVmLi4zNzljOTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29zay5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb3NrLmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogc3RhdGljIGludCBvc2tfcGFuZWxfaW5pdChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCwgc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KQogeworCS8qIGdwaW8yIHdhcyBhbGxvY2F0ZWQgaW4gYm9hcmQgaW5pdCAqLwogCXJldHVybiAwOwogfQogCkBAIC00NywxMSArNDgsOCBAQAogCS8qIFNldCBQV0wgbGV2ZWwgKi8KIAlvbWFwX3dyaXRlYigweEZGLCBPTUFQX1BXTF9FTkFCTEUpOwogCi0JLyogY29uZmlndXJlIEdQSU8yIGFzIG91dHB1dCAqLwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDIsIDApOwotCi0JLyogc2V0IEdQSU8yIGhpZ2ggKi8KLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoMiwgMSk7CisJLyogc2V0IEdQSU8yIGhpZ2ggKGxjZCBwb3dlciBlbmFibGVkKSAqLworCWdwaW9fc2V0X3ZhbHVlKDIsIDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NSw3ICs2Myw3IEBACiAJb21hcF93cml0ZWIoMHgwMCwgT01BUF9QV0xfQ0xLX0VOQUJMRSk7CiAKIAkvKiBzZXQgR1BJTzIgbG93ICovCi0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDIsIDApOworCWdwaW9fc2V0X3ZhbHVlKDIsIDApOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBvc2tfcGFuZWxfZ2V0X2NhcHMoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX3N4MS5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9zeDEuYwppbmRleCBjYWE2YTg5Li5lNTVkZTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX3N4MS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfc3gxLmMKQEAgLTgxLDIxICs4MSwyMSBAQAogCWludCBpLCBzaGlmdGVyID0gMHg4MDsKIAogCWlmICghZmxhZykKLQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQTAsIDApOworCQlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0EwLCAwKTsKIAltZGVsYXkoMik7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEFfTENEX1NTQ19SRCwgMSk7CisJZ3Bpb19zZXRfdmFsdWUoQV9MQ0RfU1NDX1JELCAxKTsKIAotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChBX0xDRF9TU0NfU0QsIGZsYWcpOworCWdwaW9fc2V0X3ZhbHVlKEFfTENEX1NTQ19TRCwgZmxhZyk7CiAKIAlPTUFQX01DQlNQX1dSSVRFKE9NQVAxNTEwX01DQlNQM19CQVNFLCBQQ1IwLCAweDIyMDApOwogCU9NQVBfTUNCU1BfV1JJVEUoT01BUDE1MTBfTUNCU1AzX0JBU0UsIFBDUjAsIDB4MjIwMik7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQlPTUFQX01DQlNQX1dSSVRFKE9NQVAxNTEwX01DQlNQM19CQVNFLCBQQ1IwLCAweDIyMDApOwotCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoQV9MQ0RfU1NDX1NELCBzaGlmdGVyICYgYnl0ZSk7CisJCWdwaW9fc2V0X3ZhbHVlKEFfTENEX1NTQ19TRCwgc2hpZnRlciAmIGJ5dGUpOwogCQlPTUFQX01DQlNQX1dSSVRFKE9NQVAxNTEwX01DQlNQM19CQVNFLCBQQ1IwLCAweDIyMDIpOwogCQlzaGlmdGVyID4+PSAxOwogCX0KLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19BMCwgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19BMCwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfc3lzdGVtKHZvaWQpCkBAIC0xMDcsMjUgKzEwNywxOCBAQAogc3RhdGljIHZvaWQgc2V0dXBfR1BJTyh2b2lkKQogewogCS8qIG5ldyB3YXZlICovCi0Jb21hcF9yZXF1ZXN0X2dwaW8oQV9MQ0RfU1NDX1JEKTsKLQlvbWFwX3JlcXVlc3RfZ3BpbyhBX0xDRF9TU0NfU0QpOwotCW9tYXBfcmVxdWVzdF9ncGlvKF9BX0xDRF9SRVNFVCk7Ci0Jb21hcF9yZXF1ZXN0X2dwaW8oX0FfTENEX1NTQ19DUyk7Ci0Jb21hcF9yZXF1ZXN0X2dwaW8oX0FfTENEX1NTQ19BMCk7CisJZ3Bpb19yZXF1ZXN0KEFfTENEX1NTQ19SRCwgImxjZF9zc2NfcmQiKTsKKwlncGlvX3JlcXVlc3QoQV9MQ0RfU1NDX1NELCAibGNkX3NzY19zZCIpOworCWdwaW9fcmVxdWVzdChfQV9MQ0RfUkVTRVQsICJsY2RfcmVzZXQiKTsKKwlncGlvX3JlcXVlc3QoX0FfTENEX1NTQ19DUywgImxjZF9zc2NfY3MiKTsKKwlncGlvX3JlcXVlc3QoX0FfTENEX1NTQ19BMCwgImxjZF9zc2NfYTAiKTsKIAotCS8qIHNldCBhbGwgR1BJT3MgdG8gb3V0cHV0ICovCi0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oQV9MQ0RfU1NDX1JELCAwKTsKLQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihBX0xDRF9TU0NfU0QsIDApOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKF9BX0xDRF9SRVNFVCwgMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oX0FfTENEX1NTQ19DUywgMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oX0FfTENEX1NTQ19BMCwgMCk7Ci0KLQkvKiBzZXQgR1BJTyBkYXRhICovCi0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEFfTENEX1NTQ19SRCwgMSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEFfTENEX1NTQ19TRCwgMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9SRVNFVCwgMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0EwLCAxKTsKKwkvKiBzZXQgR1BJT3MgdG8gb3V0cHV0LCB3aXRoIGluaXRpYWwgZGF0YSAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChBX0xDRF9TU0NfUkQsIDEpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChBX0xDRF9TU0NfU0QsIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChfQV9MQ0RfUkVTRVQsIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChfQV9MQ0RfU1NDX0NTLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoX0FfTENEX1NTQ19BMCwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpc3BsYXlfaW5pdCh2b2lkKQpAQCAtMTM5LDYxICsxMzIsNjEgQEAKIAltZGVsYXkoMik7CiAKIAkvKiByZXNldCBMQ0QgKi8KLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoQV9MQ0RfU1NDX1NELCAxKTsKKwlncGlvX3NldF92YWx1ZShBX0xDRF9TU0NfU0QsIDEpOwogCWVwc29uX3NlbmRieXRlKDAsIDB4MjUpOwogCi0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9SRVNFVCwgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1JFU0VULCAwKTsKIAltZGVsYXkoMTApOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfUkVTRVQsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9SRVNFVCwgMSk7CiAKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CiAJbWRlbGF5KDIpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAwKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAwKTsKIAogCS8qIGluaXQgTENELCBwaGFzZSAxICovCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHhDQSk7CiAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCiAJCWVwc29uX3NlbmRieXRlKDEsIElOSVRfMVtpXSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAwKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAxKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAwKTsKIAogCS8qIGluaXQgTENEIHBoYXNlIDIgKi8KIAllcHNvbl9zZW5kYnl0ZSgwLCAweENCKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTI1OyBpKyspCiAJCWVwc29uX3NlbmRieXRlKDEsIElOSVRfMltpXSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAwKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAxKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAwKTsKIAogCS8qIGluaXQgTENEIHBoYXNlIDJhICovCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHhDQyk7CiAJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspCiAJCWVwc29uX3NlbmRieXRlKDEsIElOSVRfM1tpXSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAwKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAxKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAwKTsKIAogCS8qIGluaXQgTENEIHBoYXNlIDMgKi8KIAllcHNvbl9zZW5kYnl0ZSgwLCAweEJDKTsKIAllcHNvbl9zZW5kYnl0ZSgxLCAweDA4KTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDApOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDApOwogCiAJLyogaW5pdCBMQ0QgcGhhc2UgNCAqLwogCWVwc29uX3NlbmRieXRlKDAsIDB4MDcpOwogCWVwc29uX3NlbmRieXRlKDEsIDB4MDUpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCBwaGFzZSA1ICovCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHg5NCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAwKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAxKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAwKTsKIAogCS8qIGluaXQgTENEIHBoYXNlIDYgKi8KIAllcHNvbl9zZW5kYnl0ZSgwLCAweEM2KTsKIAllcHNvbl9zZW5kYnl0ZSgxLCAweDgwKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CiAJbWRlbGF5KDEwMCk7IC8qIHVzZWQgdG8gYmUgMTAwMCAqLwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAwKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAwKTsKIAogCS8qIGluaXQgTENEIHBoYXNlIDcgKi8KIAllcHNvbl9zZW5kYnl0ZSgwLCAweDE2KTsKQEAgLTIwMSw4ICsxOTQsOCBAQAogCWVwc29uX3NlbmRieXRlKDEsIDB4MDApOwogCWVwc29uX3NlbmRieXRlKDEsIDB4QjEpOwogCWVwc29uX3NlbmRieXRlKDEsIDB4MDApOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCBwaGFzZSA4ICovCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHg3Nik7CkBAIC0yMTAsMTIgKzIwMywxMiBAQAogCWVwc29uX3NlbmRieXRlKDEsIDB4MDApOwogCWVwc29uX3NlbmRieXRlKDEsIDB4REIpOwogCWVwc29uX3NlbmRieXRlKDEsIDB4MDApOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCBwaGFzZSA5ICovCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHhBRik7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOwogfQogCiBzdGF0aWMgaW50IHN4MV9wYW5lbF9pbml0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLCBzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYpCkBAIC0yMzEsMTggKzIyNCwxOCBAQAogewogCXByaW50ayhLRVJOX0lORk8gIlNYMTogTENEIHBhbmVsIGRpc2FibGVcbiIpOwogCXN4MV9zZXRtbWlwb3dlcigwKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CiAKIAllcHNvbl9zZW5kYnl0ZSgwLCAweDI1KTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAllcHNvbl9zZW5kYnl0ZSgwLCAweEFFKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CiAJbWRlbGF5KDEwMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDApOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDApOwogCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHg5NSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOwogfQogCiBzdGF0aWMgaW50IHN4MV9wYW5lbF9lbmFibGUoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkYy5jIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZGMuYwppbmRleCA4MzUxNGYwLi42ZTJlYTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RjLmMKQEAgLTM0LDYgKzM0LDggQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKKyNpbmNsdWRlICJsY2RjLmgiCisKICNkZWZpbmUgTU9EVUxFX05BTUUJCQkibGNkYyIKIAogI2RlZmluZSBPTUFQX0xDRENfQkFTRQkJCTB4ZmZmZWMwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RjLmggYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkYy5oCmluZGV4IGFkYjczMWUuLjg0NTIyMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RjLmgKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZGMuaApAQCAtNCw0ICs0LDYgQEAKIGludCBvbWFwX2xjZGNfc2V0X2RtYV9jYWxsYmFjayh2b2lkICgqY2FsbGJhY2spKHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTsKIHZvaWQgb21hcF9sY2RjX2ZyZWVfZG1hX2NhbGxiYWNrKHZvaWQpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGxjZF9jdHJsIG9tYXAxX2ludF9jdHJsOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jIGIvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMKaW5kZXggNTFhMTM4Yi4uNWE1ZTQwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMKQEAgLTMxLDExICszMSwxNCBAQAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9vbWFwZmIuaD4KIAorI2luY2x1ZGUgImxjZGMuaCIKKyNpbmNsdWRlICJkaXNwYy5oIgorCiAjZGVmaW5lIE1PRFVMRV9OQU1FCSJvbWFwZmIiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQJZGVmX2FjY2VsOwogc3RhdGljIHVuc2lnbmVkIGxvbmcJZGVmX3ZyYW1bT01BUEZCX1BMQU5FX05VTV07Ci1zdGF0aWMgaW50CQlkZWZfdnJhbV9jbnQ7CitzdGF0aWMgdW5zaWduZWQgaW50CWRlZl92cmFtX2NudDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nCWRlZl92eHJlczsKIHN0YXRpYyB1bnNpZ25lZCBsb25nCWRlZl92eXJlczsKIHN0YXRpYyB1bnNpZ25lZCBpbnQJZGVmX3JvdGF0ZTsKQEAgLTg0LDEyICs4NywxMCBAQAogICogTENEIHBhbmVsCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotZXh0ZXJuIHN0cnVjdCBsY2RfY3RybCBvbWFwMV9pbnRfY3RybDsKLWV4dGVybiBzdHJ1Y3QgbGNkX2N0cmwgb21hcDJfaW50X2N0cmw7CiBleHRlcm4gc3RydWN0IGxjZF9jdHJsIGh3YTc0Ml9jdHJsOwogZXh0ZXJuIHN0cnVjdCBsY2RfY3RybCBibGl6emFyZF9jdHJsOwogCi1zdGF0aWMgc3RydWN0IGxjZF9jdHJsICpjdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBsY2RfY3RybCAqY3RybHNbXSA9IHsKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogCSZvbWFwMV9pbnRfY3RybCwKICNlbHNlCkBAIC03NDAsNyArNzQxLDcgQEAKIAlpbnQgcmV0OwogCiAJb21hcGZiX3JxdWV1ZV9sb2NrKHBsYW5lLT5mYmRldik7Ci0JcmV0ID0gb21hcGZiX3VwZGF0ZV93aW5kb3dfYXN5bmMoZmJpLCB3aW4sIE5VTEwsIDApOworCXJldCA9IG9tYXBmYl91cGRhdGVfd2luZG93X2FzeW5jKGZiaSwgd2luLCBOVUxMLCBOVUxMKTsKIAlvbWFwZmJfcnF1ZXVlX3VubG9jayhwbGFuZS0+ZmJkZXYpOwogCiAJcmV0dXJuIHJldDsKQEAgLTc2OCw3ICs3NjksNyBAQAogCXdpbi5mb3JtYXQgPSAwOwogCiAJb21hcGZiX3JxdWV1ZV9sb2NrKGZiZGV2KTsKLQlyID0gZmJkZXYtPmN0cmwtPnVwZGF0ZV93aW5kb3coZmJpLCAmd2luLCBOVUxMLCAwKTsKKwlyID0gZmJkZXYtPmN0cmwtPnVwZGF0ZV93aW5kb3coZmJpLCAmd2luLCBOVUxMLCBOVUxMKTsKIAlvbWFwZmJfcnF1ZXVlX3VubG9jayhmYmRldik7CiAKIAlyZXR1cm4gcjsKQEAgLTEwNDcsNyArMTA0OCw3IEBACiAJCXdpbi5oZWlnaHQgPSAyOwogCQl3aW4ub3V0X3dpZHRoID0gMjsKIAkJd2luLm91dF9oZWlnaHQgPSAyOwotCQlmYmRldi0+Y3RybC0+dXBkYXRlX3dpbmRvdyhmYmRldi0+ZmJfaW5mb1swXSwgJndpbiwgTlVMTCwgMCk7CisJCWZiZGV2LT5jdHJsLT51cGRhdGVfd2luZG93KGZiZGV2LT5mYl9pbmZvWzBdLCAmd2luLCBOVUxMLCBOVUxMKTsKIAl9CiAJb21hcGZiX3JxdWV1ZV91bmxvY2soZmJkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL3JmYmkuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9yZmJpLmMKaW5kZXggNGE2ZjEzZC4uYTEzYzhkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL3JmYmkuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvcmZiaS5jCkBAIC01OSw3ICs1OSw3IEBACiAjZGVmaW5lIERJU1BDX0NPTlRST0wJCTB4MDA0MAogCiBzdGF0aWMgc3RydWN0IHsKLQl1MzIJCWJhc2U7CisJdm9pZCBfX2lvbWVtCSpiYXNlOwogCXZvaWQJCSgqbGNkY19jYWxsYmFjaykodm9pZCAqZGF0YSk7CiAJdm9pZAkJKmxjZGNfY2FsbGJhY2tfZGF0YTsKIAl1bnNpZ25lZCBsb25nCWw0X2toejsKQEAgLTUxOCw3ICs1MTgsMTEgQEAKIAlpbnQgcjsKIAogCXJmYmkuZmJkZXYgPSBmYmRldjsKLQlyZmJpLmJhc2UgPSBpb19wMnYoUkZCSV9CQVNFKTsKKwlyZmJpLmJhc2UgPSBpb3JlbWFwKFJGQklfQkFTRSwgU1pfMUspOworCWlmICghcmZiaS5iYXNlKSB7CisJCWRldl9lcnIoZmJkZXYtPmRldiwgImNhbid0IGlvcmVtYXAgUkZCSVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCWlmICgociA9IHJmYmlfZ2V0X2Nsb2NrcygpKSA8IDApCiAJCXJldHVybiByOwpAQCAtNTY2LDYgKzU3MCw3IEBACiB7CiAJb21hcF9kaXNwY19mcmVlX2lycSgpOwogCXJmYmlfcHV0X2Nsb2NrcygpOworCWlvdW5tYXAocmZiaS5iYXNlKTsKIH0KIAogY29uc3Qgc3RydWN0IGxjZF9jdHJsX2V4dGlmIG9tYXAyX2V4dF9pZiA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9zb3NzaS5jIGIvZHJpdmVycy92aWRlby9vbWFwL3Nvc3NpLmMKaW5kZXggNjM1OTM1My4uYTc2OTQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL3Nvc3NpLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL3Nvc3NpLmMKQEAgLTU3NCw3ICs1NzQsMTIgQEAKIAlzdHJ1Y3QgY2xrICpkcGxsMW91dF9jazsKIAlpbnQgcjsKIAotCXNvc3NpLmJhc2UgPSAodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQX1NPU1NJX0JBU0UpOworCXNvc3NpLmJhc2UgPSBpb3JlbWFwKE9NQVBfU09TU0lfQkFTRSwgU1pfMUspOworCWlmICghc29zc2kuYmFzZSkgeworCQlkZXZfZXJyKGZiZGV2LT5kZXYsICJjYW4ndCBpb3JlbWFwIFNvU1NJXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJc29zc2kuZmJkZXYgPSBmYmRldjsKIAlzcGluX2xvY2tfaW5pdCgmc29zc2kubG9jayk7CiAKQEAgLTY2NSw2ICs2NzAsNyBAQAogewogCW9tYXBfbGNkY19mcmVlX2RtYV9jYWxsYmFjaygpOwogCWNsa19wdXQoc29zc2kuZmNrKTsKKwlpb3VubWFwKHNvc3NpLmJhc2UpOwogfQogCiBzdHJ1Y3QgbGNkX2N0cmxfZXh0aWYgb21hcDFfZXh0X2lmID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwppbmRleCBiODI5ZGM3Li5hN2IwMWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwpAQCAtNTAsNiArNTAsMTEgQEAKICNkZWZpbmUgZGJnKGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBpbnQgX19kZXZpbml0Y29uc3QgczFkMTN4eHhmYl9yZXZpc2lvbnNbXSA9IHsKKwlTMUQxMzUwNl9DSElQX1JFViwJLyogUmV2LjQgb24gSFAgSm9ybmFkYSA3eHggUzFEMTM1MDYgKi8KKwlTMUQxMzgwNl9DSElQX1JFViwJLyogUmV2Ljcgb24gLi4gKi8KK307CisKIC8qCiAgKiBIZXJlIHdlIGRlZmluZSB0aGUgZGVmYXVsdCBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8KICAqLwpAQCAtNTM4LDYgKzU0Myw3IEBACiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJc3RydWN0IHMxZDEzeHh4ZmJfcGRhdGEgKnBkYXRhID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKIAl1OCByZXZpc2lvbjsKIAogCWRiZygicHJvYmUgY2FsbGVkOiBkZXZpY2UgaXMgJXBcbiIsIHBkZXYpOwpAQCAtNjA3LDEwICs2MTMsMTkgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXJldmlzaW9uID0gczFkMTN4eHhmYl9yZWFkcmVnKGRlZmF1bHRfcGFyLCBTMURSRUdfUkVWX0NPREUpOwotCWlmICgocmV2aXNpb24gPj4gMikgIT0gUzFEX0NISVBfUkVWKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJjaGlwIG5vdCBmb3VuZDogJWlcbiIsIChyZXZpc2lvbiA+PiAyKSk7Ci0JCXJldCA9IC1FTk9ERVY7CisJcmV2aXNpb24gPSBzMWQxM3h4eGZiX3JlYWRyZWcoZGVmYXVsdF9wYXIsIFMxRFJFR19SRVZfQ09ERSkgPj4gMjsKKworCXJldCA9IC1FTk9ERVY7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzMWQxM3h4eGZiX3JldmlzaW9ucyk7IGkrKykgeworCQlpZiAocmV2aXNpb24gPT0gczFkMTN4eHhmYl9yZXZpc2lvbnNbaV0pCisJCQlyZXQgPSAwOworCX0KKworCWlmICghcmV0KQorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiY2hpcCByZXZpc2lvbiAlaVxuIiwgcmV2aXNpb24pOworCWVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAidW5rbm93biBjaGlwIHJldmlzaW9uICVpXG4iLCByZXZpc2lvbik7CiAJCWdvdG8gYmFpbDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggNGMzMmMwNi4uZWZmZjY3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGFzbS9zaF9tb2JpbGVfbGNkYy5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAKICNkZWZpbmUgUEFMRVRURV9OUiAxNgogCkBAIC0zNCw3ICszNCw5IEBACiAKIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19wcml2IHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CisjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCiAJc3RydWN0IGNsayAqY2xrOworI2VuZGlmCiAJdW5zaWduZWQgbG9uZyBsZGRja3I7CiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW4gY2hbMl07CiB9OwpAQCAtMjYwLDYgKzI2MiwxMSBAQAogCQl0bXAgPSBjaC0+bGRtdDFyX3ZhbHVlOwogCQl0bXAgfD0gKGxjZF9jZmctPnN5bmMgJiBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QpID8gMCA6IDEgPDwgMjg7CiAJCXRtcCB8PSAobGNkX2NmZy0+c3luYyAmIEZCX1NZTkNfSE9SX0hJR0hfQUNUKSA/IDAgOiAxIDw8IDI3OworCQl0bXAgfD0gKGNoLT5jZmcuZmxhZ3MgJiBMQ0RDX0ZMQUdTX0RXUE9MKSA/IDEgPDwgMjYgOiAwOworCQl0bXAgfD0gKGNoLT5jZmcuZmxhZ3MgJiBMQ0RDX0ZMQUdTX0RJUE9MKSA/IDEgPDwgMjUgOiAwOworCQl0bXAgfD0gKGNoLT5jZmcuZmxhZ3MgJiBMQ0RDX0ZMQUdTX0RBUE9MKSA/IDEgPDwgMjQgOiAwOworCQl0bXAgfD0gKGNoLT5jZmcuZmxhZ3MgJiBMQ0RDX0ZMQUdTX0hTQ05UKSA/IDEgPDwgMTcgOiAwOworCQl0bXAgfD0gKGNoLT5jZmcuZmxhZ3MgJiBMQ0RDX0ZMQUdTX0RXQ05UKSA/IDEgPDwgMTYgOiAwOwogCQlsY2RjX3dyaXRlX2NoYW4oY2gsIExETVQxUiwgdG1wKTsKIAogCQkvKiBzZXR1cCBTWVMgYnVzICovCkBAIC00MjIsNiArNDI5LDcgQEAKIAogCXByaXYtPmxkZGNrciA9IGlja3NlbCA8PCAxNjsKIAorI2lmZGVmIENPTkZJR19IQVZFX0NMSwogCWlmIChzdHIpIHsKIAkJcHJpdi0+Y2xrID0gY2xrX2dldChkZXYsIHN0cik7CiAJCWlmIChJU19FUlIocHJpdi0+Y2xrKSkgewpAQCAtNDMxLDYgKzQzOSw3IEBACiAKIAkJY2xrX2VuYWJsZShwcml2LT5jbGspOwogCX0KKyNlbmRpZgogCiAJcmV0dXJuIDA7CiB9CkBAIC01ODUsNyArNTk0LDYgQEAKIAkJZ290byBlcnIxOwogCX0KIAotCXByaXYtPmxkZGNrciA9IHBkYXRhLT5sZGRja3I7CiAJcHJpdi0+YmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSArIDEpOwogCiAJZm9yIChpID0gMDsgaSA8IGo7IGkrKykgewpAQCAtNjg4LDEwICs2OTYsMTIgQEAKIAkJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKIAl9CiAKKyNpZmRlZiBDT05GSUdfSEFWRV9DTEsKIAlpZiAocHJpdi0+Y2xrKSB7CiAJCWNsa19kaXNhYmxlKHByaXYtPmNsayk7CiAJCWNsa19wdXQocHJpdi0+Y2xrKTsKIAl9CisjZW5kaWYKIAogCWlmIChwcml2LT5iYXNlKQogCQlpb3VubWFwKHByaXYtPmJhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90ZGZ4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMKaW5kZXggNDU5OWE0My4uMTRiZDNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90ZGZ4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jCkBAIC0xMTk1LDU3ICsxMTk1LDU4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJZGVmYXVsdF9wYXIgPSBpbmZvLT5wYXI7CisJaW5mby0+Zml4ID0gdGRmeF9maXg7CiAKIAkvKiBDb25maWd1cmUgdGhlIGRlZmF1bHQgZmJfZml4X3NjcmVlbmluZm8gZmlyc3QgKi8KIAlzd2l0Y2ggKHBkZXYtPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF8zREZYX0JBTlNIRUU6Ci0JCXN0cmNweSh0ZGZ4X2ZpeC5pZCwgIjNEZnggQmFuc2hlZSIpOworCQlzdHJjcHkoaW5mby0+Zml4LmlkLCAiM0RmeCBCYW5zaGVlIik7CiAJCWRlZmF1bHRfcGFyLT5tYXhfcGl4Y2xvY2sgPSBCQU5TSEVFX01BWF9QSVhDTE9DSzsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEXzNERlhfVk9PRE9PMzoKLQkJc3RyY3B5KHRkZnhfZml4LmlkLCAiM0RmeCBWb29kb28zIik7CisJCXN0cmNweShpbmZvLT5maXguaWQsICIzRGZ4IFZvb2RvbzMiKTsKIAkJZGVmYXVsdF9wYXItPm1heF9waXhjbG9jayA9IFZPT0RPTzNfTUFYX1BJWENMT0NLOwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfM0RGWF9WT09ET081OgotCQlzdHJjcHkodGRmeF9maXguaWQsICIzRGZ4IFZvb2RvbzUiKTsKKwkJc3RyY3B5KGluZm8tPmZpeC5pZCwgIjNEZnggVm9vZG9vNSIpOwogCQlkZWZhdWx0X3Bhci0+bWF4X3BpeGNsb2NrID0gVk9PRE9PNV9NQVhfUElYQ0xPQ0s7CiAJCWJyZWFrOwogCX0KIAotCXRkZnhfZml4Lm1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JdGRmeF9maXgubW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHRkZnhfZml4Lm1taW9fc3RhcnQsIHRkZnhfZml4Lm1taW9fbGVuLAorCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWluZm8tPmZpeC5tbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbiwKIAkJCQkidGRmeCByZWdiYXNlIikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0ZGZ4ZmI6IENhbid0IHJlc2VydmUgcmVnYmFzZVxuIik7CiAJCWdvdG8gb3V0X2VycjsKIAl9CiAKIAlkZWZhdWx0X3Bhci0+cmVnYmFzZV92aXJ0ID0KLQkJaW9yZW1hcF9ub2NhY2hlKHRkZnhfZml4Lm1taW9fc3RhcnQsIHRkZnhfZml4Lm1taW9fbGVuKTsKKwkJaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOwogCWlmICghZGVmYXVsdF9wYXItPnJlZ2Jhc2VfdmlydCkgewogCQlwcmludGsoS0VSTl9FUlIgImZiOiBDYW4ndCByZW1hcCAlcyByZWdpc3RlciBhcmVhLlxuIiwKLQkJCQl0ZGZ4X2ZpeC5pZCk7CisJCQkJaW5mby0+Zml4LmlkKTsKIAkJZ290byBvdXRfZXJyX3JlZ2Jhc2U7CiAJfQogCi0JdGRmeF9maXguc21lbV9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKLQl0ZGZ4X2ZpeC5zbWVtX2xlbiA9IGRvX2xmYl9zaXplKGRlZmF1bHRfcGFyLCBwZGV2LT5kZXZpY2UpOwotCWlmICghdGRmeF9maXguc21lbV9sZW4pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJmYjogQ2FuJ3QgY291bnQgJXMgbWVtb3J5LlxuIiwgdGRmeF9maXguaWQpOworCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCWluZm8tPmZpeC5zbWVtX2xlbiA9IGRvX2xmYl9zaXplKGRlZmF1bHRfcGFyLCBwZGV2LT5kZXZpY2UpOworCWlmICghaW5mby0+Zml4LnNtZW1fbGVuKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmI6IENhbid0IGNvdW50ICVzIG1lbW9yeS5cbiIsIGluZm8tPmZpeC5pZCk7CiAJCWdvdG8gb3V0X2Vycl9yZWdiYXNlOwogCX0KIAotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHRkZnhfZml4LnNtZW1fc3RhcnQsCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaW5mby0+Zml4LnNtZW1fc3RhcnQsCiAJCQkJcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwgInRkZnggc21lbSIpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidGRmeGZiOiBDYW4ndCByZXNlcnZlIHNtZW1cbiIpOwogCQlnb3RvIG91dF9lcnJfcmVnYmFzZTsKIAl9CiAKLQlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXBfbm9jYWNoZSh0ZGZ4X2ZpeC5zbWVtX3N0YXJ0LAotCQkJCQkgICAgdGRmeF9maXguc21lbV9sZW4pOworCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5zbWVtX3N0YXJ0LAorCQkJCQkgICAgaW5mby0+Zml4LnNtZW1fbGVuKTsKIAlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmI6IENhbid0IHJlbWFwICVzIGZyYW1lYnVmZmVyLlxuIiwKLQkJCQl0ZGZ4X2ZpeC5pZCk7CisJCQkJaW5mby0+Zml4LmlkKTsKIAkJZ290byBvdXRfZXJyX3NjcmVlbmJhc2U7CiAJfQogCkBAIC0xMjU3LDIwICsxMjU4LDE5IEBACiAJCWdvdG8gb3V0X2Vycl9zY3JlZW5iYXNlOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gImZiOiAlcyBtZW1vcnkgPSAlZEtcbiIsIHRkZnhfZml4LmlkLAotCQkJdGRmeF9maXguc21lbV9sZW4gPj4gMTApOworCXByaW50ayhLRVJOX0lORk8gImZiOiAlcyBtZW1vcnkgPSAlZEtcbiIsIGluZm8tPmZpeC5pZCwKKwkJCWluZm8tPmZpeC5zbWVtX2xlbiA+PiAxMCk7CiAKIAlkZWZhdWx0X3Bhci0+bXRycl9oYW5kbGUgPSAtMTsKIAlpZiAoIW5vbXRycikKIAkJZGVmYXVsdF9wYXItPm10cnJfaGFuZGxlID0KLQkJCW10cnJfYWRkKHRkZnhfZml4LnNtZW1fc3RhcnQsIHRkZnhfZml4LnNtZW1fbGVuLAorCQkJbXRycl9hZGQoaW5mby0+Zml4LnNtZW1fc3RhcnQsIGluZm8tPmZpeC5zbWVtX2xlbiwKIAkJCQkgTVRSUl9UWVBFX1dSQ09NQiwgMSk7CiAKLQl0ZGZ4X2ZpeC55cGFuc3RlcAk9IG5vcGFuID8gMCA6IDE7Ci0JdGRmeF9maXgueXdyYXBzdGVwCT0gbm93cmFwID8gMCA6IDE7CisJaW5mby0+Zml4LnlwYW5zdGVwCT0gbm9wYW4gPyAwIDogMTsKKwlpbmZvLT5maXgueXdyYXBzdGVwCT0gbm93cmFwID8gMCA6IDE7CiAKIAlpbmZvLT5mYm9wcwkJPSAmdGRmeGZiX29wczsKLQlpbmZvLT5maXgJCT0gdGRmeF9maXg7CiAJaW5mby0+cHNldWRvX3BhbGV0dGUJPSBkZWZhdWx0X3Bhci0+cGFsZXR0ZTsKIAlpbmZvLT5mbGFncwkJPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19IV0FDQ0VMX1lQQU47CiAjaWZkZWYgQ09ORklHX0ZCXzNERlhfQUNDRUwKQEAgLTEzMjMsMTQgKzEzMjMsMTQgQEAKIG91dF9lcnJfc2NyZWVuYmFzZToKIAlpZiAoaW5mby0+c2NyZWVuX2Jhc2UpCiAJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbih0ZGZ4X2ZpeC5zbWVtX3N0YXJ0LCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+Zml4LnNtZW1fc3RhcnQsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkpOwogb3V0X2Vycl9yZWdiYXNlOgogCS8qCiAJICogQ2xlYW51cCBhZnRlciBhbnl0aGluZyB0aGF0IHdhcyByZW1hcHBlZC9hbGxvY2F0ZWQuCiAJICovCiAJaWYgKGRlZmF1bHRfcGFyLT5yZWdiYXNlX3ZpcnQpCiAJCWlvdW5tYXAoZGVmYXVsdF9wYXItPnJlZ2Jhc2VfdmlydCk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHRkZnhfZml4Lm1taW9fc3RhcnQsIHRkZnhfZml4Lm1taW9fbGVuKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CiBvdXRfZXJyOgogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJcmV0dXJuIC1FTlhJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMzgwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCkBAIC0wLDAgKzEsMTA1MCBAQAorLyoKKyAqIEZyYW1lIEJ1ZmZlciBEZXZpY2UgZm9yIFRvc2hpYmEgTW9iaWxlIElPKFRNSU8pIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQoQykgMjAwNS0yMDA2IENocmlzIEh1bWJlcnQKKyAqIENvcHlyaWdodChDKSAyMDA1IERpcmsgT3BmZXIKKyAqIENvcHl0aWdodChDKSAyMDA3LDIwMDggRG1pdHJ5IEJhcnlzaGtvdgorICoKKyAqIEJhc2VkIG9uOgorICoJZHJpdmVycy92aWRlby93MTAwZmIuYworICoJY29kZSB3cml0dGVuIGJ5IFNoYXJwL0xpbmVvIGZvciAyLjQga2VybmVscworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorLyogV2h5IHNob3VsZCBmYiBkcml2ZXIgY2FsbCBjb25zb2xlIGZ1bmN0aW9ucz8gYmVjYXVzZSBhY3F1aXJlX2NvbnNvbGVfc2VtKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdG1pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworLyoKKyAqIGFjY2VsZXJhdG9yIGNvbW1hbmRzCisgKi8KKyNkZWZpbmUgVE1JT0ZCX0FDQ19DU0FEUih4KQkoMHgwMDAwMDAwMCB8ICgoeCkgJiAweDAwMWZmZmZlKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19DSFBJWCh4KQkoMHgwMTAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19DVlBJWCh4KQkoMHgwMjAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19QU0FEUih4KQkoMHgwMzAwMDAwMCB8ICgoeCkgJiAweDAwZmZmZmZlKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19QSFBJWCh4KQkoMHgwNDAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19QVlBJWCh4KQkoMHgwNTAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19QSE9GUyh4KQkoMHgwNjAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19QVk9GUyh4KQkoMHgwNzAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19QT0FEUih4KQkoMHgwODAwMDAwMCB8ICgoeCkgJiAweDAwZmZmZmZlKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19SU1RSKHgpCSgweDA5MDAwMDAwIHwgKCh4KSAmIDB4MDAwMDAwZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1RDTE9SKHgpCSgweDBBMDAwMDAwIHwgKCh4KSAmIDB4MDAwMGZmZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX0ZJTEwoeCkJKDB4MEIwMDAwMDAgfCAoKHgpICYgMHgwMDAwZmZmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfRFNBRFIoeCkJKDB4MEMwMDAwMDAgfCAoKHgpICYgMHgwMGZmZmZmZSkpCisjZGVmaW5lIFRNSU9GQl9BQ0NfU1NBRFIoeCkJKDB4MEQwMDAwMDAgfCAoKHgpICYgMHgwMGZmZmZmZSkpCisjZGVmaW5lIFRNSU9GQl9BQ0NfREhQSVgoeCkJKDB4MEUwMDAwMDAgfCAoKHgpICYgMHgwMDAwMDNmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfRFZQSVgoeCkJKDB4MEYwMDAwMDAgfCAoKHgpICYgMHgwMDAwMDNmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0hQSVgoeCkJKDB4MTAwMDAwMDAgfCAoKHgpICYgMHgwMDAwMDNmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfU1ZQSVgoeCkJKDB4MTEwMDAwMDAgfCAoKHgpICYgMHgwMDAwMDNmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfTEJJTkkoeCkJKDB4MTIwMDAwMDAgfCAoKHgpICYgMHgwMDAwZmZmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfTEJLMih4KQkoMHgxMzAwMDAwMCB8ICgoeCkgJiAweDAwMDBmZmZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TSEJJTkkoeCkJKDB4MTQwMDAwMDAgfCAoKHgpICYgMHgwMDAwZmZmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0hCSzIoeCkJKDB4MTUwMDAwMDAgfCAoKHgpICYgMHgwMDAwZmZmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfU1ZCSU5JKHgpCSgweDE2MDAwMDAwIHwgKCh4KSAmIDB4MDAwMGZmZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1NWQksyKHgpCSgweDE3MDAwMDAwIHwgKCh4KSAmIDB4MDAwMGZmZmYpKQorCisjZGVmaW5lIFRNSU9GQl9BQ0NfQ01HTwkJMHgyMDAwMDAwMAorI2RlZmluZSBUTUlPRkJfQUNDX0NNR09fQ0VORAkweDAwMDAwMDAxCisjZGVmaW5lIFRNSU9GQl9BQ0NfQ01HT19JTlQJMHgwMDAwMDAwMgorI2RlZmluZSBUTUlPRkJfQUNDX0NNR09fQ01PRAkweDAwMDAwMDEwCisjZGVmaW5lIFRNSU9GQl9BQ0NfQ01HT19DRFZSVgkweDAwMDAwMDIwCisjZGVmaW5lIFRNSU9GQl9BQ0NfQ01HT19DREhSVgkweDAwMDAwMDQwCisjZGVmaW5lIFRNSU9GQl9BQ0NfQ01HT19SVU5ECTB4MDAwMDgwMDAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQ0dPCQkweDIxMDAwMDAwCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0NHT19DRU5ECTB4MDAwMDAwMDEKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQ0dPX0lOVAkweDAwMDAwMDAyCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0NHT19ST1AzCTB4MDAwMDAwMDQKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQ0dPX1RSTlMJMHgwMDAwMDAwOAorI2RlZmluZSBUTUlPRkJfQUNDX1NDR09fRFZSVgkweDAwMDAwMDEwCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0NHT19ESFJWCTB4MDAwMDAwMjAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQ0dPX1NWUlYJMHgwMDAwMDA0MAorI2RlZmluZSBUTUlPRkJfQUNDX1NDR09fU0hSVgkweDAwMDAwMDgwCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0NHT19EU1RYWQkweDAwMDA4MDAwCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0JHTwkJMHgyMjAwMDAwMAorI2RlZmluZSBUTUlPRkJfQUNDX1NCR09fQ0VORAkweDAwMDAwMDAxCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0JHT19JTlQJMHgwMDAwMDAwMgorI2RlZmluZSBUTUlPRkJfQUNDX1NCR09fRFZSVgkweDAwMDAwMDEwCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0JHT19ESFJWCTB4MDAwMDAwMjAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQkdPX1NWUlYJMHgwMDAwMDA0MAorI2RlZmluZSBUTUlPRkJfQUNDX1NCR09fU0hSVgkweDAwMDAwMDgwCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0JHT19TQk1ECTB4MDAwMDAxMDAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19GTEdPCQkweDIzMDAwMDAwCisjZGVmaW5lIFRNSU9GQl9BQ0NfRkxHT19DRU5ECTB4MDAwMDAwMDEKKyNkZWZpbmUgVE1JT0ZCX0FDQ19GTEdPX0lOVAkweDAwMDAwMDAyCisjZGVmaW5lIFRNSU9GQl9BQ0NfRkxHT19ST1AzCTB4MDAwMDAwMDQKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MREdPCQkweDI0MDAwMDAwCisjZGVmaW5lIFRNSU9GQl9BQ0NfTERHT19DRU5ECTB4MDAwMDAwMDEKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MREdPX0lOVAkweDAwMDAwMDAyCisjZGVmaW5lIFRNSU9GQl9BQ0NfTERHT19ST1AzCTB4MDAwMDAwMDQKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MREdPX0VORFBYCTB4MDAwMDAwMDgKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MREdPX0xWUlYJMHgwMDAwMDAxMAorI2RlZmluZSBUTUlPRkJfQUNDX0xER09fTEhSVgkweDAwMDAwMDIwCisjZGVmaW5lIFRNSU9GQl9BQ0NfTERHT19MRE1PRAkweDAwMDAwMDQwCisKKy8qIGEgRklGTyBpcyBhbHdheXMgYWxsb2NhdGVkLCBldmVuIGlmIGFjY2VsZXJhdGlvbiBpcyBub3QgdXNlZCAqLworI2RlZmluZSBUTUlPRkJfRklGT19TSVpFCTUxMgorCisvKgorICogTENEIEhvc3QgQ29udHJvbGxlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKgorICogVGhpcyBpb21lbSBhcmVhIHN1cHBvcnRzIG9ubHkgMTYtYml0IElPLgorICovCisjZGVmaW5lIENDUl9DTUQJCQkweDA0IC8qIENvbW1hbmQJCQkJKi8KKyNkZWZpbmUgQ0NSX1JFVklECQkweDA4IC8qIFJldmlzaW9uIElECQkJKi8KKyNkZWZpbmUgQ0NSX0JBU0VMCQkweDEwIC8qIExDRCBDb250cm9sIFJlZyBCYXNlIEFkZHIgTG93CSovCisjZGVmaW5lIENDUl9CQVNFSAkJMHgxMiAvKiBMQ0QgQ29udHJvbCBSZWcgQmFzZSBBZGRyIEhpZ2gJKi8KKyNkZWZpbmUgQ0NSX1VHQ0MJCTB4NDAgLyogVW5pZmllZCBHYXRlZCBDbG9jayBDb250cm9sCSovCisjZGVmaW5lIENDUl9HQ0MJCQkweDQyIC8qIEdhdGVkIENsb2NrIENvbnRyb2wJCSovCisjZGVmaW5lIENDUl9VU0MJCQkweDUwIC8qIFVuaWZpZWQgU29mdHdhcmUgQ2xlYXIJCSovCisjZGVmaW5lIENDUl9WUkFNUlRDCQkweDYwIC8qIFZSQU0gVGltaW5nIENvbnRyb2wJCSovCisJCQkJLyogMHg2MSBWUkFNIFJlZnJlc2ggQ29udHJvbAkJKi8KKyNkZWZpbmUgQ0NSX1ZSQU1TQUMJCTB4NjIgLyogVlJBTSBBY2Nlc3MgQ29udHJvbAkJKi8KKwkJCQkvKiAweDYzCVZSQU0gU3RhdHVzCQkJKi8KKyNkZWZpbmUgQ0NSX1ZSQU1CQwkJMHg2NCAvKiBWUkFNIEJsb2NrIENvbnRyb2wJCSovCisKKy8qCisgKiBMQ0QgQ29udHJvbCBSZWdpc3RlcgorICoKKyAqIFRoaXMgaW9tZW0gYXJlYSBzdXBwb3J0cyBvbmx5IDE2LWJpdCBJTy4KKyAqLworI2RlZmluZSBMQ1JfVUlTCQkJMHgwMDAgLyogVW5pZmllZCBJbnRlcnJ1cHQgU3RhdHVzCSovCisjZGVmaW5lIExDUl9WSFBOCQkweDAwOCAvKiBWUkFNIEhvcml6b250YWwgUGl4ZWwgTnVtYmVyCSovCisjZGVmaW5lIExDUl9DRlNBTAkJMHgwMGEgLyogQ29tbWFuZCBGSUZPIFN0YXJ0IEFkZHJlc3MgTG93CSovCisjZGVmaW5lIExDUl9DRlNBSAkJMHgwMGMgLyogQ29tbWFuZCBGSUZPIFN0YXJ0IEFkZHJlc3MgSGlnaCAqLworI2RlZmluZSBMQ1JfQ0ZTCQkJMHgwMGUgLyogQ29tbWFuZCBGSUZPIFNpemUJCSovCisjZGVmaW5lIExDUl9DRldTCQkweDAxMCAvKiBDb21tYW5kIEZJRk8gV3JpdGVhYmxlIFNpemUJKi8KKyNkZWZpbmUgTENSX0JCSUUJCTB4MDEyIC8qIEJpdEJMVCBJbnRlcnJ1cHQgRW5hYmxlCSovCisjZGVmaW5lIExDUl9CQklTQwkJMHgwMTQgLyogQml0QkxUIEludGVycnVwdCBTdGF0dXMgYW5kIENsZWFyICovCisjZGVmaW5lIExDUl9DQ1MJCQkweDAxNiAvKiBDb21tYW5kIENvdW50IFN0YXR1cwkJKi8KKyNkZWZpbmUgTENSX0JCRVMJCTB4MDE4IC8qIEJpdEJMVCBFeGVjdXRpb24gU3RhdHVzCSovCisjZGVmaW5lIExDUl9DTURMCQkweDAxYyAvKiBDb21tYW5kIExvdwkJCSovCisjZGVmaW5lIExDUl9DTURICQkweDAxZSAvKiBDb21tYW5kIEhpZ2gJCQkqLworI2RlZmluZSBMQ1JfQ0ZDCQkJMHgwMjIgLyogQ29tbWFuZCBGSUZPIENsZWFyCQkqLworI2RlZmluZSBMQ1JfQ0NJRkMJCTB4MDI0IC8qIENNT1MgQ2FtZXJhIElGIENvbnRyb2wJCSovCisjZGVmaW5lIExDUl9IV1QJCQkweDAyNiAvKiBIYXJkd2FyZSBUZXN0CQkJKi8KKyNkZWZpbmUgTENSX0xDRENDUkMJCTB4MTAwIC8qIExDREMgQ2xvY2sgYW5kIFJlc2V0IENvbnRyb2wJKi8KKyNkZWZpbmUgTENSX0xDRENDCQkweDEwMiAvKiBMQ0RDIENvbnRyb2wJCQkqLworI2RlZmluZSBMQ1JfTENEQ09QQwkJMHgxMDQgLyogTENEQyBPdXRwdXQgUGluIENvbnRyb2wJKi8KKyNkZWZpbmUgTENSX0xDRElTCQkweDEwOCAvKiBMQ0QgSW50ZXJydXB0IFN0YXR1cwkJKi8KKyNkZWZpbmUgTENSX0xDRElNCQkweDEwYSAvKiBMQ0QgSW50ZXJydXB0IE1hc2sJCSovCisjZGVmaW5lIExDUl9MQ0RJRQkJMHgxMGMgLyogTENEIEludGVycnVwdCBFbmFibGUJCSovCisjZGVmaW5lIExDUl9HRFNBTAkJMHgxMjIgLyogR3JhcGhpY3MgRGlzcGxheSBTdGFydCBBZGRyZXNzIExvdyAqLworI2RlZmluZSBMQ1JfR0RTQUgJCTB4MTI0IC8qIEdyYXBoaWNzIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBIaWdoICovCisjZGVmaW5lIExDUl9WSFBDTAkJMHgxMmEgLyogVlJBTSBIb3Jpem9udGFsIFBpeGVsIENvdW50IExvdyAqLworI2RlZmluZSBMQ1JfVkhQQ0gJCTB4MTJjIC8qIFZSQU0gSG9yaXpvbnRhbCBQaXhlbCBDb3VudCBIaWdoICovCisjZGVmaW5lIExDUl9HTQkJCTB4MTJlIC8qIEdyYXBoaWMgTW9kZShWUkFNIGFjY2VzcyBlbmFibGUpICovCisjZGVmaW5lIExDUl9IVAkJCTB4MTQwIC8qIEhvcml6b250YWwgVG90YWwJCSovCisjZGVmaW5lIExDUl9IRFMJCQkweDE0MiAvKiBIb3Jpem9udGFsIERpc3BsYXkgU3RhcnQJKi8KKyNkZWZpbmUgTENSX0hTUwkJCTB4MTQ0IC8qIEgtU3luYyBTdGFydAkJCSovCisjZGVmaW5lIExDUl9IU0UJCQkweDE0NiAvKiBILVN5bmMgRW5kCQkJKi8KKyNkZWZpbmUgTENSX0hOUAkJCTB4MTRjIC8qIEhvcml6b250YWwgTnVtYmVyIG9mIFBpeGVscwkqLworI2RlZmluZSBMQ1JfVlQJCQkweDE1MCAvKiBWZXJ0aWNhbCBUb3RhbAkJCSovCisjZGVmaW5lIExDUl9WRFMJCQkweDE1MiAvKiBWZXJ0aWNhbCBEaXNwbGF5IFN0YXJ0CQkqLworI2RlZmluZSBMQ1JfVlNTCQkJMHgxNTQgLyogVi1TeW5jIFN0YXJ0CQkJKi8KKyNkZWZpbmUgTENSX1ZTRQkJCTB4MTU2IC8qIFYtU3luYyBFbmQJCQkqLworI2RlZmluZSBMQ1JfQ0RMTgkJMHgxNjAgLyogQ3VycmVudCBEaXNwbGF5IExpbmUgTnVtYmVyCSovCisjZGVmaW5lIExDUl9JTE4JCQkweDE2MiAvKiBJbnRlcnJ1cHQgTGluZSBOdW1iZXIJCSovCisjZGVmaW5lIExDUl9TUAkJCTB4MTY0IC8qIFN5bmMgUG9sYXJpdHkJCQkqLworI2RlZmluZSBMQ1JfTUlTQwkJMHgxNjYgLyogTUlTQyhSR0I1NjUgbW9kZSkJCSovCisjZGVmaW5lIExDUl9WSUhTUwkJMHgxNmEgLyogVmlkZW8gSW50ZXJmYWNlIEgtU3luYyBTdGFydAkqLworI2RlZmluZSBMQ1JfVklWUwkJMHgxNmMgLyogVmlkZW8gSW50ZXJmYWNlIFZlcnRpY2FsIFN0YXJ0CSovCisjZGVmaW5lIExDUl9WSVZFCQkweDE2ZSAvKiBWaWRlbyBJbnRlcmZhY2UgVmVydGljYWwgRW5kCSovCisjZGVmaW5lIExDUl9WSVZTUwkJMHgxNzAgLyogVmlkZW8gSW50ZXJmYWNlIFYtU3luYyBTdGFydAkqLworI2RlZmluZSBMQ1JfVkNDSVMJCTB4MTdlIC8qIFZpZGVvIC8gQ01PUyBDYW1lcmEgSW50ZXJmYWNlIFNlbGVjdCAqLworI2RlZmluZSBMQ1JfVklEV1NBTAkJMHgxODAgLyogVkkgRGF0YSBXcml0ZSBTdGFydCBBZGRyZXNzIExvdyAqLworI2RlZmluZSBMQ1JfVklEV1NBSAkJMHgxODIgLyogVkkgRGF0YSBXcml0ZSBTdGFydCBBZGRyZXNzIEhpZ2ggKi8KKyNkZWZpbmUgTENSX1ZJRFJTQUwJCTB4MTg0IC8qIFZJIERhdGEgUmVhZCBTdGFydCBBZGRyZXNzIExvdwkqLworI2RlZmluZSBMQ1JfVklEUlNBSAkJMHgxODYgLyogVkkgRGF0YSBSZWFkIFN0YXJ0IEFkZHJlc3MgSGlnaCAqLworI2RlZmluZSBMQ1JfVklQRERTVAkJMHgxODggLyogVkkgUGljdHVyZSBEYXRhIERpc3BsYXkgU3RhcnQgVGltaW5nICovCisjZGVmaW5lIExDUl9WSVBEREVUCQkweDE4NiAvKiBWSSBQaWN0dXJlIERhdGEgRGlzcGxheSBFbmQgVGltaW5nICovCisjZGVmaW5lIExDUl9WSUUJCQkweDE4YyAvKiBWaWRlbyBJbnRlcmZhY2UgRW5hYmxlCQkqLworI2RlZmluZSBMQ1JfVkNTCQkJMHgxOGUgLyogVmlkZW8vQ2FtZXJhIFNlbGVjdAkJKi8KKyNkZWZpbmUgTENSX1ZQSFdDCQkweDE5NCAvKiBWaWRlbyBQaWN0dXJlIEhvcml6b250YWwgV2FpdCBDb3VudCAqLworI2RlZmluZSBMQ1JfVlBIUwkJMHgxOTYgLyogVmlkZW8gUGljdHVyZSBIb3Jpem9udGFsIFNpemUJKi8KKyNkZWZpbmUgTENSX1ZQVldDCQkweDE5OCAvKiBWaWRlbyBQaWN0dXJlIFZlcnRpY2FsIFdhaXQgQ291bnQgKi8KKyNkZWZpbmUgTENSX1ZQVlMJCTB4MTlhIC8qIFZpZGVvIFBpY3R1cmUgVmVydGljYWwgU2l6ZQkqLworI2RlZmluZSBMQ1JfUExIUElYCQkweDFhMCAvKiBQTEhQSVgJCQkJKi8KKyNkZWZpbmUgTENSX1hTCQkJMHgxYTIgLyogWFN0YXJ0CQkJCSovCisjZGVmaW5lIExDUl9YQ0tIVwkJMHgxYTQgLyogWENLIEhpZ2ggV2lkdGgJCQkqLworI2RlZmluZSBMQ1JfU1RIUwkJMHgxYTggLyogU1RIIFN0YXJ0CQkJKi8KKyNkZWZpbmUgTENSX1ZUMgkJCTB4MWFhIC8qIFZlcnRpY2FsIFRvdGFsCQkJKi8KKyNkZWZpbmUgTENSX1lDS1NXCQkweDFhYyAvKiBZQ0sgU3RhcnQgV2FpdAkJCSovCisjZGVmaW5lIExDUl9ZU1RTCQkweDFhZSAvKiBZU1QgU3RhcnQJCQkqLworI2RlZmluZSBMQ1JfUFBPTFMJCTB4MWIwIC8qICNQUE9MIFN0YXJ0CQkJKi8KKyNkZWZpbmUgTENSX1BSRUNXCQkweDFiMiAvKiBQUkVDIFdpZHRoCQkJKi8KKyNkZWZpbmUgTENSX1ZDTEtIVwkJMHgxYjQgLyogVkNMSyBIaWdoIFdpZHRoCQkqLworI2RlZmluZSBMQ1JfT0MJCQkweDFiNiAvKiBPdXRwdXQgQ29udHJvbAkJCSovCisKK3N0YXRpYyBjaGFyICptb2RlX29wdGlvbiBfX2RldmluaXRkYXRhOworCitzdHJ1Y3QgdG1pb2ZiX3BhciB7CisJdTMyCQkJCXBzZXVkb19wYWxldHRlWzE2XTsKKworI2lmZGVmIENPTkZJR19GQl9UTUlPX0FDQ0VMTAorCXdhaXRfcXVldWVfaGVhZF90CQl3YWl0X2FjYzsKKwlib29sCQkJCXVzZV9wb2xsaW5nOworI2VuZGlmCisKKwl2b2lkIF9faW9tZW0JCQkqY2NyOworCXZvaWQgX19pb21lbQkJCSpsY3I7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIHJlYXNvbnMgZm9yIGFuIGludGVycnVwdDoKKyAqCXVpcwliYmlzYwlsY2RpcworICoJMDEwMAkwMDAxCWFjY2VsZXJhdG9yIGNvbW1hbmQgY29tcGxldGVkCisgKiAJMjAwMAkwMDAxCXZzeW5jIHN0YXJ0CisgKiAJMjAwMAkwMDAyCWRpc3BsYXkgc3RhcnQKKyAqIAkyMDAwCTAwMDQJbGluZSBudW1iZXIgbWF0Y2goMHgxZmYgbWFzaz8/PykKKyAqLworc3RhdGljIGlycXJldHVybl90IHRtaW9mYl9pcnEoaW50IGlycSwgdm9pZCAqX19pbmZvKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gX19pbmZvOworCXN0cnVjdCB0bWlvZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJdW5zaWduZWQgaW50IGJiaXNjID0gdG1pb19pb3JlYWQxNihwYXItPmxjciArIExDUl9CQklTQyk7CisKKworCS8qCisJICogV2Ugd2VyZSBpbiBwb2xsaW5nIG1vZGUgYW5kIG5vdyB3ZSBnb3QgY29ycmVjdCBpcnEuCisJICogU3dpdGNoIGJhY2sgdG8gSVJRLWJhc2VkIHN5bmMgb2YgY29tbWFuZCBGSUZPCisJICovCisJaWYgKHVubGlrZWx5KHBhci0+dXNlX3BvbGxpbmcgJiYgaXJxICE9IC0xKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJ0bWlvZmI6IHN3aXRjaGluZyB0byB3YWl0cVxuIik7CisJCXBhci0+dXNlX3BvbGxpbmcgPSBmYWxzZTsKKwl9CisKKwl0bWlvX2lvd3JpdGUxNihiYmlzYywgcGFyLT5sY3IgKyBMQ1JfQkJJU0MpOworCisjaWZkZWYgQ09ORklHX0ZCX1RNSU9fQUNDRUxMCisJaWYgKGJiaXNjICYgMSkKKwkJd2FrZV91cCgmcGFyLT53YWl0X2FjYyk7CisjZW5kaWYKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisvKgorICogVHVybnMgb2ZmIHRoZSBMQ0QgY29udHJvbGxlciBhbmQgTENEIGhvc3QgY29udHJvbGxlci4KKyAqLworc3RhdGljIGludCB0bWlvZmJfaHdfc3RvcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1mZF9jZWxsICpjZWxsID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdG1pb19mYl9kYXRhICpkYXRhID0gY2VsbC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0bWlvZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwl0bWlvX2lvd3JpdGUxNigwLCBwYXItPmNjciArIENDUl9VR0NDKTsKKwl0bWlvX2lvd3JpdGUxNigwLCBwYXItPmxjciArIExDUl9HTSk7CisJZGF0YS0+bGNkX3NldF9wb3dlcihkZXYsIDApOworCXRtaW9faW93cml0ZTE2KDB4MDAxMCwgcGFyLT5sY3IgKyBMQ1JfTENEQ0NSQyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEluaXRpYWxpemVzIHRoZSBMQ0QgaG9zdCBjb250cm9sbGVyLgorICovCitzdGF0aWMgaW50IHRtaW9mYl9od19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqbmxjciA9ICZjZWxsLT5yZXNvdXJjZXNbMF07CisJY29uc3Qgc3RydWN0IHJlc291cmNlICp2cmFtID0gJmNlbGwtPnJlc291cmNlc1syXTsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisKKwlpZiAobmxjciA9PSBOVUxMIHx8IHZyYW0gPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliYXNlID0gbmxjci0+c3RhcnQ7CisKKwl0bWlvX2lvd3JpdGUxNigweDAwM2EsIHBhci0+Y2NyICsgQ0NSX1VHQ0MpOworCXRtaW9faW93cml0ZTE2KDB4MDAzYSwgcGFyLT5jY3IgKyBDQ1JfR0NDKTsKKwl0bWlvX2lvd3JpdGUxNigweDNmMDAsIHBhci0+Y2NyICsgQ0NSX1VTQyk7CisKKwltc2xlZXAoMik7IC8qIHdhaXQgZm9yIGRldmljZSB0byBzZXR0bGUgKi8KKworCXRtaW9faW93cml0ZTE2KDB4MDAwMCwgcGFyLT5jY3IgKyBDQ1JfVVNDKTsKKwl0bWlvX2lvd3JpdGUxNihiYXNlID4+IDE2LCBwYXItPmNjciArIENDUl9CQVNFSCk7CisJdG1pb19pb3dyaXRlMTYoYmFzZSwgcGFyLT5jY3IgKyBDQ1JfQkFTRUwpOworCXRtaW9faW93cml0ZTE2KDB4MDAwMiwgcGFyLT5jY3IgKyBDQ1JfQ01EKTsgLyogYmFzZSBhZGRyZXNzIGVuYWJsZSAqLworCXRtaW9faW93cml0ZTE2KDB4NDBhOCwgcGFyLT5jY3IgKyBDQ1JfVlJBTVJUQyk7IC8qIFZSQU1SQywgVlJBTVRDICovCisJdG1pb19pb3dyaXRlMTYoMHgwMDE4LCBwYXItPmNjciArIENDUl9WUkFNU0FDKTsgLyogVlJBTVNUUywgVlJBTUFDICovCisJdG1pb19pb3dyaXRlMTYoMHgwMDAyLCBwYXItPmNjciArIENDUl9WUkFNQkMpOworCW1zbGVlcCgyKTsgLyogd2FpdCBmb3IgZGV2aWNlIHRvIHNldHRsZSAqLworCXRtaW9faW93cml0ZTE2KDB4MDAwYiwgcGFyLT5jY3IgKyBDQ1JfVlJBTUJDKTsKKworCWJhc2UgPSB2cmFtLT5zdGFydCArIGluZm8tPnNjcmVlbl9zaXplOworCXRtaW9faW93cml0ZTE2KGJhc2UgPj4gMTYsIHBhci0+bGNyICsgTENSX0NGU0FIKTsKKwl0bWlvX2lvd3JpdGUxNihiYXNlLCBwYXItPmxjciArIExDUl9DRlNBTCk7CisJdG1pb19pb3dyaXRlMTYoVE1JT0ZCX0ZJRk9fU0laRSAtIDEsIHBhci0+bGNyICsgTENSX0NGUyk7CisJdG1pb19pb3dyaXRlMTYoMSwgcGFyLT5sY3IgKyBMQ1JfQ0ZDKTsKKwl0bWlvX2lvd3JpdGUxNigxLCBwYXItPmxjciArIExDUl9CQklFKTsKKwl0bWlvX2lvd3JpdGUxNigwLCBwYXItPmxjciArIExDUl9DRldTKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2V0cyB0aGUgTENEIGNvbnRyb2xsZXIncyBvdXRwdXQgcmVzb2x1dGlvbiBhbmQgcGl4ZWwgY2xvY2sKKyAqLworc3RhdGljIHZvaWQgdG1pb2ZiX2h3X21vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRtaW9fZmJfZGF0YSAqZGF0YSA9IGNlbGwtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlID0gaW5mby0+bW9kZTsKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGludCBpOworCisJdG1pb19pb3dyaXRlMTYoMCwgcGFyLT5sY3IgKyBMQ1JfR00pOworCWRhdGEtPmxjZF9zZXRfcG93ZXIoZGV2LCAwKTsKKwl0bWlvX2lvd3JpdGUxNigweDAwMTAsIHBhci0+bGNyICsgTENSX0xDRENDUkMpOworCWRhdGEtPmxjZF9tb2RlKGRldiwgbW9kZSk7CisJZGF0YS0+bGNkX3NldF9wb3dlcihkZXYsIDEpOworCisJdG1pb19pb3dyaXRlMTYoaW5mby0+Zml4LmxpbmVfbGVuZ3RoLCBwYXItPmxjciArIExDUl9WSFBOKTsKKwl0bWlvX2lvd3JpdGUxNigwLCBwYXItPmxjciArIExDUl9HRFNBSCk7CisJdG1pb19pb3dyaXRlMTYoMCwgcGFyLT5sY3IgKyBMQ1JfR0RTQUwpOworCXRtaW9faW93cml0ZTE2KGluZm8tPmZpeC5saW5lX2xlbmd0aCA+PiAxNiwgcGFyLT5sY3IgKyBMQ1JfVkhQQ0gpOworCXRtaW9faW93cml0ZTE2KGluZm8tPmZpeC5saW5lX2xlbmd0aCwgcGFyLT5sY3IgKyBMQ1JfVkhQQ0wpOworCXRtaW9faW93cml0ZTE2KGkgPSAwLCBwYXItPmxjciArIExDUl9IU1MpOworCXRtaW9faW93cml0ZTE2KGkgKz0gbW9kZS0+aHN5bmNfbGVuLCBwYXItPmxjciArIExDUl9IU0UpOworCXRtaW9faW93cml0ZTE2KGkgKz0gbW9kZS0+bGVmdF9tYXJnaW4sIHBhci0+bGNyICsgTENSX0hEUyk7CisJdG1pb19pb3dyaXRlMTYoaSArPSBtb2RlLT54cmVzICsgbW9kZS0+cmlnaHRfbWFyZ2luLCBwYXItPmxjciArIExDUl9IVCk7CisJdG1pb19pb3dyaXRlMTYobW9kZS0+eHJlcywgcGFyLT5sY3IgKyBMQ1JfSE5QKTsKKwl0bWlvX2lvd3JpdGUxNihpID0gMCwgcGFyLT5sY3IgKyBMQ1JfVlNTKTsKKwl0bWlvX2lvd3JpdGUxNihpICs9IG1vZGUtPnZzeW5jX2xlbiwgcGFyLT5sY3IgKyBMQ1JfVlNFKTsKKwl0bWlvX2lvd3JpdGUxNihpICs9IG1vZGUtPnVwcGVyX21hcmdpbiwgcGFyLT5sY3IgKyBMQ1JfVkRTKTsKKwl0bWlvX2lvd3JpdGUxNihpICs9IG1vZGUtPnlyZXMsIHBhci0+bGNyICsgTENSX0lMTik7CisJdG1pb19pb3dyaXRlMTYoaSArPSBtb2RlLT5sb3dlcl9tYXJnaW4sIHBhci0+bGNyICsgTENSX1ZUKTsKKwl0bWlvX2lvd3JpdGUxNigzLCBwYXItPmxjciArIExDUl9NSVNDKTsgLyogUkdCNTY1IG1vZGUgKi8KKwl0bWlvX2lvd3JpdGUxNigxLCBwYXItPmxjciArIExDUl9HTSk7IC8qIFZSQU0gZW5hYmxlICovCisJdG1pb19pb3dyaXRlMTYoMHg0MDA3LCBwYXItPmxjciArIExDUl9MQ0RDQyk7CisJdG1pb19pb3dyaXRlMTYoMywgcGFyLT5sY3IgKyBMQ1JfU1ApOyAgLyogc3luYyBwb2xhcml0eSAqLworCisJdG1pb19pb3dyaXRlMTYoMHgwMDEwLCBwYXItPmxjciArIExDUl9MQ0RDQ1JDKTsKKwltc2xlZXAoNSk7IC8qIHdhaXQgZm9yIGRldmljZSB0byBzZXR0bGUgKi8KKwl0bWlvX2lvd3JpdGUxNigweDAwMTQsIHBhci0+bGNyICsgTENSX0xDRENDUkMpOyAvKiBTVE9QX0NLUCAqLworCW1zbGVlcCg1KTsgLyogd2FpdCBmb3IgZGV2aWNlIHRvIHNldHRsZSAqLworCXRtaW9faW93cml0ZTE2KDB4MDAxNSwgcGFyLT5sY3IgKyBMQ1JfTENEQ0NSQyk7IC8qIFNUT1BfQ0tQfFNPRlRfUkVTRVQqLworCXRtaW9faW93cml0ZTE2KDB4ZmZmYSwgcGFyLT5sY3IgKyBMQ1JfVkNTKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBDT05GSUdfRkJfVE1JT19BQ0NFTEwKK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrCit0bWlvZmJfYWNjX3dhaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjY3MpCit7CisJc3RydWN0IHRtaW9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwkvKgorCSAqIFRoaXMgY29kZSBjYW4gYmUgY2FsbGVkIHdoaXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisJICogU28gaW5zdGVhZCBvZiByZWxheWluZyBvbiBpcnEgdG8gdHJpZ2dlciB0aGUgZXZlbnQsCisJICogcG9sbCB0aGUgc3RhdGUgdGlsbCB0aGUgbmVjZXNzYXJ5IGNvbW1hbmQgaXMgZXhlY3V0ZWQuCisJICovCisJaWYgKGlycXNfZGlzYWJsZWQoKSB8fCBwYXItPnVzZV9wb2xsaW5nKSB7CisJCWludCBpID0gMDsKKwkJd2hpbGUgKHRtaW9faW9yZWFkMTYocGFyLT5sY3IgKyBMQ1JfQ0NTKSA+IGNjcykgeworCQkJdWRlbGF5KDEpOworCQkJaSsrOworCQkJaWYgKGkgPiAxMDAwMCkgeworCQkJCXByX2VycigidG1pb2ZiOiB0aW1lb3V0IHdhaXRpbmcgZm9yICVkXG4iLAorCQkJCQkJY2NzKTsKKwkJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJCX0KKwkJCXRtaW9mYl9pcnEoLTEsIGluZm8pOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCF3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwYXItPndhaXRfYWNjLAorCQkJCXRtaW9faW9yZWFkMTYocGFyLT5sY3IgKyBMQ1JfQ0NTKSA8PSBjY3MsCisJCQkJMTAwMCkpIHsKKwkJCXByX2VycigidG1pb2ZiOiB0aW1lb3V0IHdhaXRpbmcgZm9yICVkXG4iLCBjY3MpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdyaXRlcyBhbiBhY2NlbGVyYXRvciBjb21tYW5kIHRvIHRoZSBhY2NlbGVyYXRvcidzIEZJRk8uCisgKi8KK3N0YXRpYyBpbnQKK3RtaW9mYl9hY2Nfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHUzMiAqY21kLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IHRtaW9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwlpbnQgcmV0OworCisJcmV0ID0gdG1pb2ZiX2FjY193YWl0KGluZm8sIFRNSU9GQl9GSUZPX1NJWkUgLSBjb3VudCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoOyBjb3VudDsgY291bnQtLSwgY21kKyspIHsKKwkJdG1pb19pb3dyaXRlMTYoKmNtZCA+PiAxNiwgcGFyLT5sY3IgKyBMQ1JfQ01ESCk7CisJCXRtaW9faW93cml0ZTE2KCpjbWQsIHBhci0+bGNyICsgTENSX0NNREwpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBXYWl0IGZvciB0aGUgYWNjZWxlcmF0b3IgdG8gZmluaXNoIGl0cyBvcGVyYXRpb25zIGJlZm9yZSB3cml0aW5nCisgKiB0byB0aGUgZnJhbWVidWZmZXIgZm9yIGNvbnNpc3RlbnQgZGlzcGxheSBvdXRwdXQuCisgKi8KK3N0YXRpYyBpbnQgdG1pb2ZiX3N5bmMoc3RydWN0IGZiX2luZm8gKmZiaSkKK3sKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gZmJpLT5wYXI7CisKKwlpbnQgcmV0OworCWludCBpID0gMDsKKworCXJldCA9IHRtaW9mYl9hY2Nfd2FpdChmYmksIDApOworCisJd2hpbGUgKHRtaW9faW9yZWFkMTYocGFyLT5sY3IgKyBMQ1JfQkJFUykgJiAyKSB7IC8qIGJsaXQgYWN0aXZlICovCisJCXVkZWxheSgxKTsKKwkJaSsrIDsKKwkJaWYgKGkgPiAxMDAwMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ0aW1lb3V0IHdhaXRpbmcgZm9yIGJsaXQgdG8gZW5kIVxuIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCit0bWlvZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmZiaSwgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KQoreworCWNvbnN0IHUzMiBjbWRbXSA9IHsKKwkJVE1JT0ZCX0FDQ19EU0FEUigocmVjdC0+ZHkgKiBmYmktPm1vZGUtPnhyZXMgKyByZWN0LT5keCkgKiAyKSwKKwkJVE1JT0ZCX0FDQ19ESFBJWChyZWN0LT53aWR0aCAtIDEpLAorCQlUTUlPRkJfQUNDX0RWUElYKHJlY3QtPmhlaWdodCAtIDEpLAorCQlUTUlPRkJfQUNDX0ZJTEwocmVjdC0+Y29sb3IpLAorCQlUTUlPRkJfQUNDX0ZMR08sCisJfTsKKworCWlmIChmYmktPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HIHx8CisJICAgIGZiaS0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgeworCQljZmJfZmlsbHJlY3QoZmJpLCByZWN0KTsKKwkJcmV0dXJuOworCX0KKworCXRtaW9mYl9hY2Nfd3JpdGUoZmJpLCBjbWQsIEFSUkFZX1NJWkUoY21kKSk7Cit9CisKK3N0YXRpYyB2b2lkCit0bWlvZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmZiaSwgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQoreworCWNvbnN0IHUzMiBjbWRbXSA9IHsKKwkJVE1JT0ZCX0FDQ19EU0FEUigoYXJlYS0+ZHkgKiBmYmktPm1vZGUtPnhyZXMgKyBhcmVhLT5keCkgKiAyKSwKKwkJVE1JT0ZCX0FDQ19ESFBJWChhcmVhLT53aWR0aCAtIDEpLAorCQlUTUlPRkJfQUNDX0RWUElYKGFyZWEtPmhlaWdodCAtIDEpLAorCQlUTUlPRkJfQUNDX1NTQURSKChhcmVhLT5zeSAqIGZiaS0+bW9kZS0+eHJlcyArIGFyZWEtPnN4KSAqIDIpLAorCQlUTUlPRkJfQUNDX1NDR08sCisJfTsKKworCWlmIChmYmktPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HIHx8CisJICAgIGZiaS0+ZmxhZ3MgJiBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRCkgeworCQljZmJfY29weWFyZWEoZmJpLCBhcmVhKTsKKwkJcmV0dXJuOworCX0KKworCXRtaW9mYl9hY2Nfd3JpdGUoZmJpLCBjbWQsIEFSUkFZX1NJWkUoY21kKSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgdG1pb2ZiX2NsZWFyc2NyZWVuKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCByZWN0ID0geworCQkuZHgJPSAwLAorCQkuZHkJPSAwLAorCQkud2lkdGgJPSBpbmZvLT5tb2RlLT54cmVzLAorCQkuaGVpZ2h0CT0gaW5mby0+bW9kZS0+eXJlcywKKwkJLmNvbG9yCT0gMCwKKwkJLnJvcAk9IFJPUF9DT1BZLAorCX07CisKKwlpbmZvLT5mYm9wcy0+ZmJfZmlsbHJlY3QoaW5mbywgJnJlY3QpOworfQorCitzdGF0aWMgaW50IHRtaW9mYl92Ymxhbmsoc3RydWN0IGZiX2luZm8gKmZiaSwgc3RydWN0IGZiX3ZibGFuayAqdmJsYW5rKQoreworCXN0cnVjdCB0bWlvZmJfcGFyICpwYXIgPSBmYmktPnBhcjsKKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlID0gZmJpLT5tb2RlOworCXVuc2lnbmVkIGludCB2Y291bnQgPSB0bWlvX2lvcmVhZDE2KHBhci0+bGNyICsgTENSX0NETE4pOworCXVuc2lnbmVkIGludCB2ZHMgPSBtb2RlLT52c3luY19sZW4gKyBtb2RlLT51cHBlcl9tYXJnaW47CisKKwl2YmxhbmstPnZjb3VudCA9IHZjb3VudDsKKwl2YmxhbmstPmZsYWdzID0gRkJfVkJMQU5LX0hBVkVfVkJMQU5LIHwgRkJfVkJMQU5LX0hBVkVfVkNPVU5UCisJCQkJCQl8IEZCX1ZCTEFOS19IQVZFX1ZTWU5DOworCisJaWYgKHZjb3VudCA8IG1vZGUtPnZzeW5jX2xlbikKKwkJdmJsYW5rLT5mbGFncyB8PSBGQl9WQkxBTktfVlNZTkNJTkc7CisKKwlpZiAodmNvdW50IDwgdmRzIHx8IHZjb3VudCA+IHZkcyArIG1vZGUtPnlyZXMpCisJCXZibGFuay0+ZmxhZ3MgfD0gRkJfVkJMQU5LX1ZCTEFOS0lORzsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdG1pb2ZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICpmYmksCisJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBGQklPR0VUX1ZCTEFOSzogeworCQlzdHJ1Y3QgZmJfdmJsYW5rIHZibGFuayA9IHswfTsKKwkJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKikgYXJnOworCisJCXRtaW9mYl92YmxhbmsoZmJpLCAmdmJsYW5rKTsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdmJsYW5rLCBzaXplb2YgdmJsYW5rKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBDT05GSUdfRkJfVE1JT19BQ0NFTEwKKwljYXNlIEZCSU9fVE1JT19BQ0NfU1lOQzoKKwkJdG1pb2ZiX3N5bmMoZmJpKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEZCSU9fVE1JT19BQ0NfV1JJVEU6IHsKKwkJdTMyIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CisJCXUzMiBsZW47CisJCXUzMiBhY2NbMTZdOworCisJCWlmIChnZXRfdXNlcihsZW4sIGFyZ3ApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChsZW4gPiBBUlJBWV9TSVpFKGFjYykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGFjYywgYXJncCArIDEsIHNpemVvZih1MzIpICogbGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiB0bWlvZmJfYWNjX3dyaXRlKGZiaSwgYWNjLCBsZW4pOworCX0KKyNlbmRpZgorCX0KKworCXJldHVybiAtRU5PVFRZOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogU2VsZWN0IHRoZSBzbWFsbGVzdCBtb2RlIHRoYXQgYWxsb3dzIHRoZSBkZXNpcmVkIHJlc29sdXRpb24gdG8gYmUKKyAqIGRpc3BsYXllZC4gIElmIGRlc2lyZWQsIHRoZSB4IGFuZCB5IHBhcmFtZXRlcnMgY2FuIGJlIHJvdW5kZWQgdXAgdG8KKyAqIG1hdGNoIHRoZSBzZWxlY3RlZCBtb2RlLgorICovCitzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSAqCit0bWlvZmJfZmluZF9tb2RlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKK3sKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPQorCQlpbmZvLT5kZXZpY2UtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRtaW9fZmJfZGF0YSAqZGF0YSA9IGNlbGwtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBmYl92aWRlb21vZGUgKmJlc3QgPSBOVUxMOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bV9tb2RlczsgaSsrKSB7CisJCXN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUgPSBkYXRhLT5tb2RlcyArIGk7CisKKwkJaWYgKG1vZGUtPnhyZXMgPj0gdmFyLT54cmVzICYmIG1vZGUtPnlyZXMgPj0gdmFyLT55cmVzCisJCQkJJiYgKCFiZXN0IHx8IChtb2RlLT54cmVzIDwgYmVzdC0+eHJlcworCQkJCQkgICAmJiBtb2RlLT55cmVzIDwgYmVzdC0+eXJlcykpKQorCQkJYmVzdCA9IG1vZGU7CisJfQorCisJcmV0dXJuIGJlc3Q7Cit9CisKK3N0YXRpYyBpbnQgdG1pb2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisKKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlOworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9CisJCWluZm8tPmRldmljZS0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdG1pb19mYl9kYXRhICpkYXRhID0gY2VsbC0+ZHJpdmVyX2RhdGE7CisKKwltb2RlID0gdG1pb2ZiX2ZpbmRfbW9kZShpbmZvLCB2YXIpOworCWlmICghbW9kZSB8fCB2YXItPmJpdHNfcGVyX3BpeGVsID4gMTYpCisJCXJldHVybiAtRUlOVkFMOworCisJZmJfdmlkZW9tb2RlX3RvX3Zhcih2YXIsIG1vZGUpOworCisJdmFyLT54cmVzX3ZpcnR1YWwgPSBtb2RlLT54cmVzOworCXZhci0+eXJlc192aXJ0dWFsID0gaW5mby0+c2NyZWVuX3NpemUgLyAobW9kZS0+eHJlcyAqIDIpOworCisJaWYgKHZhci0+eXJlc192aXJ0dWFsIDwgdmFyLT55cmVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhci0+eG9mZnNldCA9IDA7CisJdmFyLT55b2Zmc2V0ID0gMDsKKwl2YXItPmJpdHNfcGVyX3BpeGVsID0gMTY7CisJdmFyLT5ncmF5c2NhbGUgPSAwOworCXZhci0+cmVkLm9mZnNldCA9IDExOworCXZhci0+cmVkLmxlbmd0aCA9IDU7CisJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OworCXZhci0+Z3JlZW4ubGVuZ3RoID0gNjsKKwl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwl2YXItPmJsdWUubGVuZ3RoID0gNTsKKwl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CisJdmFyLT5ub25zdGQgPSAwOworCXZhci0+aGVpZ2h0ID0gZGF0YS0+aGVpZ2h0OyAvKiBtbSAqLworCXZhci0+d2lkdGggPSBkYXRhLT53aWR0aDsgLyogbW0gKi8KKwl2YXItPnJvdGF0ZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG1pb2ZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmaW5mby0+dmFyOworCXN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGU7CisKKwltb2RlID0gdG1pb2ZiX2ZpbmRfbW9kZShpbmZvLCB2YXIpOworCWlmICghbW9kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbmZvLT5tb2RlID0gbW9kZTsKKwlpbmZvLT5maXgubGluZV9sZW5ndGggPSBpbmZvLT5tb2RlLT54cmVzICoKKwkJCXZhci0+Yml0c19wZXJfcGl4ZWwgLyA4OworCisJdG1pb2ZiX2h3X21vZGUodG9fcGxhdGZvcm1fZGV2aWNlKGluZm8tPmRldmljZSkpOworCXRtaW9mYl9jbGVhcnNjcmVlbihpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0bWlvZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAorCQkJICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLAorCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHRtaW9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCWlmIChyZWdubyA8IEFSUkFZX1NJWkUocGFyLT5wc2V1ZG9fcGFsZXR0ZSkpIHsKKwkJcGFyLT5wc2V1ZG9fcGFsZXR0ZVtyZWdub10gPQorCQkJKChyZWQgJiAweGY4MDApKSB8CisJCQkoKGdyZWVuICYgMHhmYzAwKSA+PiAgNSkgfAorCQkJKChibHVlICYgMHhmODAwKSA+PiAxMSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHRtaW9mYl9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCS8qCisJICogZXZlcnl0aGluZyBpcyBkb25lIGluIGxjZC9ibCBkcml2ZXJzLgorCSAqIHRoaXMgaXMgcHVyZWx5IHRvIG1ha2Ugc3lzZnMgaGFwcHkgYW5kIHdvcmsuCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIHRtaW9mYl9vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCisJLmZiX2lvY3RsCT0gdG1pb2ZiX2lvY3RsLAorCS5mYl9jaGVja192YXIJPSB0bWlvZmJfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyCT0gdG1pb2ZiX3NldF9wYXIsCisJLmZiX3NldGNvbHJlZwk9IHRtaW9mYl9zZXRjb2xyZWcsCisJLmZiX2JsYW5rCT0gdG1pb2ZiX2JsYW5rLAorCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAorI2lmZGVmIENPTkZJR19GQl9UTUlPX0FDQ0VMTAorCS5mYl9zeW5jCT0gdG1pb2ZiX3N5bmMsCisJLmZiX2ZpbGxyZWN0CT0gdG1pb2ZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYQk9IHRtaW9mYl9jb3B5YXJlYSwKKyNlbHNlCisJLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYQk9IGNmYl9jb3B5YXJlYSwKKyNlbmRpZgorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRtaW9mYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1mZF9jZWxsICpjZWxsID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdG1pb19mYl9kYXRhICpkYXRhID0gY2VsbC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHJlc291cmNlICpjY3IgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJc3RydWN0IHJlc291cmNlICpsY3IgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJc3RydWN0IHJlc291cmNlICp2cmFtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDIpOworCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IHRtaW9mYl9wYXIgKnBhcjsKKwlpbnQgcmV0dmFsOworCisJLyoKKwkgKiBUaGlzIGlzIHRoZSBvbmx5IHdheSBBVE0gdG8gZGlzYWJsZSB0aGUgZmIKKwkgKi8KKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiTlVMTCBwbGF0Zm9ybSBkYXRhIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IHRtaW9mYl9wYXIpLCAmZGV2LT5kZXYpOworCisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhciA9IGluZm8tPnBhcjsKKworI2lmZGVmIENPTkZJR19GQl9UTUlPX0FDQ0VMTAorCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBhci0+d2FpdF9hY2MpOworCisJcGFyLT51c2VfcG9sbGluZyA9IHRydWU7CisKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX0hXQUNDRUxfQ09QWUFSRUEKKwkJCXwgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1Q7CisjZWxzZQorCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQ7CisjZW5kaWYKKworCWluZm8tPmZib3BzID0gJnRtaW9mYl9vcHM7CisKKwlzdHJjcHkoaW5mby0+Zml4LmlkLCAidG1pby1mYiIpOworCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gdnJhbS0+c3RhcnQ7CisJaW5mby0+Zml4LnNtZW1fbGVuID0gcmVzb3VyY2Vfc2l6ZSh2cmFtKTsKKwlpbmZvLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwlpbmZvLT5maXgubW1pb19zdGFydCA9IGxjci0+c3RhcnQ7CisJaW5mby0+Zml4Lm1taW9fbGVuID0gcmVzb3VyY2Vfc2l6ZShsY3IpOworCWluZm8tPmZpeC5hY2NlbCA9IEZCX0FDQ0VMX05PTkU7CisJaW5mby0+c2NyZWVuX3NpemUgPSBpbmZvLT5maXguc21lbV9sZW4gLSAoNCAqIFRNSU9GQl9GSUZPX1NJWkUpOworCWluZm8tPnBzZXVkb19wYWxldHRlID0gcGFyLT5wc2V1ZG9fcGFsZXR0ZTsKKworCXBhci0+Y2NyID0gaW9yZW1hcChjY3ItPnN0YXJ0LCByZXNvdXJjZV9zaXplKGNjcikpOworCWlmICghcGFyLT5jY3IpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcF9jY3I7CisJfQorCisJcGFyLT5sY3IgPSBpb3JlbWFwKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOworCWlmICghcGFyLT5sY3IpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcF9sY3I7CisJfQorCisJaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwKGluZm8tPmZpeC5zbWVtX3N0YXJ0LCBpbmZvLT5maXguc21lbV9sZW4pOworCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcF92cmFtOworCX0KKworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGlycSwgJnRtaW9mYl9pcnEsIElSUUZfRElTQUJMRUQsCisJCQkJCWRldi0+ZGV2LmJ1c19pZCwgaW5mbyk7CisKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisKKwlyZXR2YWwgPSBmYl9maW5kX21vZGUoJmluZm8tPnZhciwgaW5mbywgbW9kZV9vcHRpb24sCisJCQlkYXRhLT5tb2RlcywgZGF0YS0+bnVtX21vZGVzLAorCQkJZGF0YS0+bW9kZXMsIDE2KTsKKwlpZiAoIXJldHZhbCkgeworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGVycl9maW5kX21vZGU7CisJfQorCisJaWYgKGNlbGwtPmVuYWJsZSkgeworCQlyZXR2YWwgPSBjZWxsLT5lbmFibGUoZGV2KTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisKKwlyZXR2YWwgPSB0bWlvZmJfaHdfaW5pdChkZXYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX2h3X2luaXQ7CisKKwlmYl92aWRlb21vZGVfdG9fbW9kZWxpc3QoZGF0YS0+bW9kZXMsIGRhdGEtPm51bV9tb2RlcywKKwkJCQkgJmluZm8tPm1vZGVsaXN0KTsKKworCXJldHZhbCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGVycl9yZWdpc3Rlcl9mcmFtZWJ1ZmZlcjsKKworCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsCisJCQkJaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkKTsKKworCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXJfZnJhbWVidWZmZXI6CisvKmVycl9zZXRfcGFyOiovCisJdG1pb2ZiX2h3X3N0b3AoZGV2KTsKK2Vycl9od19pbml0OgorCWlmIChjZWxsLT5kaXNhYmxlKQorCQljZWxsLT5kaXNhYmxlKGRldik7CitlcnJfZW5hYmxlOgorZXJyX2ZpbmRfbW9kZToKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWZyZWVfaXJxKGlycSwgaW5mbyk7CitlcnJfcmVxdWVzdF9pcnE6CisJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CitlcnJfaW9yZW1hcF92cmFtOgorCWlvdW5tYXAocGFyLT5sY3IpOworZXJyX2lvcmVtYXBfbGNyOgorCWlvdW5tYXAocGFyLT5jY3IpOworZXJyX2lvcmVtYXBfY2NyOgorCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdG1pb2ZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1mZF9jZWxsICpjZWxsID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyOworCisJaWYgKGluZm8pIHsKKwkJcGFyID0gaW5mby0+cGFyOworCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCisJCXRtaW9mYl9od19zdG9wKGRldik7CisKKwkJaWYgKGNlbGwtPmRpc2FibGUpCisJCQljZWxsLT5kaXNhYmxlKGRldik7CisKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCQlmcmVlX2lycShpcnEsIGluZm8pOworCisJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOworCQlpb3VubWFwKHBhci0+bGNyKTsKKwkJaW91bm1hcChwYXItPmNjcik7CisKKwkJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCB0bWlvZmJfZHVtcF9yZWdzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRtaW9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCXByaW50ayhLRVJOX0RFQlVHICJsaGNjcjpcbiIpOworI2RlZmluZSBDQ1JfUFIobikJcHJpbnRrKEtFUk5fREVCVUcgIlx0IiAjbiAiID0gXHQlMDR4XG4iLFwKKwkJdG1pb19pb3JlYWQxNihwYXItPmNjciArIENDUl8gIyMgbikpOworCUNDUl9QUihDTUQpOworCUNDUl9QUihSRVZJRCk7CisJQ0NSX1BSKEJBU0VMKTsKKwlDQ1JfUFIoQkFTRUgpOworCUNDUl9QUihVR0NDKTsKKwlDQ1JfUFIoR0NDKTsKKwlDQ1JfUFIoVVNDKTsKKwlDQ1JfUFIoVlJBTVJUQyk7CisJQ0NSX1BSKFZSQU1TQUMpOworCUNDUl9QUihWUkFNQkMpOworI3VuZGVmIENDUl9QUgorCisJcHJpbnRrKEtFUk5fREVCVUcgImxjcjogXG4iKTsKKyNkZWZpbmUgTENSX1BSKG4pCXByaW50ayhLRVJOX0RFQlVHICJcdCIgI24gIiA9IFx0JTA0eFxuIixcCisJCXRtaW9faW9yZWFkMTYocGFyLT5sY3IgKyBMQ1JfICMjIG4pKTsKKwlMQ1JfUFIoVUlTKTsKKwlMQ1JfUFIoVkhQTik7CisJTENSX1BSKENGU0FMKTsKKwlMQ1JfUFIoQ0ZTQUgpOworCUxDUl9QUihDRlMpOworCUxDUl9QUihDRldTKTsKKwlMQ1JfUFIoQkJJRSk7CisJTENSX1BSKEJCSVNDKTsKKwlMQ1JfUFIoQ0NTKTsKKwlMQ1JfUFIoQkJFUyk7CisJTENSX1BSKENNREwpOworCUxDUl9QUihDTURIKTsKKwlMQ1JfUFIoQ0ZDKTsKKwlMQ1JfUFIoQ0NJRkMpOworCUxDUl9QUihIV1QpOworCUxDUl9QUihMQ0RDQ1JDKTsKKwlMQ1JfUFIoTENEQ0MpOworCUxDUl9QUihMQ0RDT1BDKTsKKwlMQ1JfUFIoTENESVMpOworCUxDUl9QUihMQ0RJTSk7CisJTENSX1BSKExDRElFKTsKKwlMQ1JfUFIoR0RTQUwpOworCUxDUl9QUihHRFNBSCk7CisJTENSX1BSKFZIUENMKTsKKwlMQ1JfUFIoVkhQQ0gpOworCUxDUl9QUihHTSk7CisJTENSX1BSKEhUKTsKKwlMQ1JfUFIoSERTKTsKKwlMQ1JfUFIoSFNTKTsKKwlMQ1JfUFIoSFNFKTsKKwlMQ1JfUFIoSE5QKTsKKwlMQ1JfUFIoVlQpOworCUxDUl9QUihWRFMpOworCUxDUl9QUihWU1MpOworCUxDUl9QUihWU0UpOworCUxDUl9QUihDRExOKTsKKwlMQ1JfUFIoSUxOKTsKKwlMQ1JfUFIoU1ApOworCUxDUl9QUihNSVNDKTsKKwlMQ1JfUFIoVklIU1MpOworCUxDUl9QUihWSVZTKTsKKwlMQ1JfUFIoVklWRSk7CisJTENSX1BSKFZJVlNTKTsKKwlMQ1JfUFIoVkNDSVMpOworCUxDUl9QUihWSURXU0FMKTsKKwlMQ1JfUFIoVklEV1NBSCk7CisJTENSX1BSKFZJRFJTQUwpOworCUxDUl9QUihWSURSU0FIKTsKKwlMQ1JfUFIoVklQRERTVCk7CisJTENSX1BSKFZJUERERVQpOworCUxDUl9QUihWSUUpOworCUxDUl9QUihWQ1MpOworCUxDUl9QUihWUEhXQyk7CisJTENSX1BSKFZQSFMpOworCUxDUl9QUihWUFZXQyk7CisJTENSX1BSKFZQVlMpOworCUxDUl9QUihQTEhQSVgpOworCUxDUl9QUihYUyk7CisJTENSX1BSKFhDS0hXKTsKKwlMQ1JfUFIoU1RIUyk7CisJTENSX1BSKFZUMik7CisJTENSX1BSKFlDS1NXKTsKKwlMQ1JfUFIoWVNUUyk7CisJTENSX1BSKFBQT0xTKTsKKwlMQ1JfUFIoUFJFQ1cpOworCUxDUl9QUihWQ0xLSFcpOworCUxDUl9QUihPQyk7CisjdW5kZWYgTENSX1BSCit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB0bWlvZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRtaW9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXR2YWwgPSAwOworCisJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCisJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7CisKKwlpZiAoaW5mby0+ZmJvcHMtPmZiX3N5bmMpCisJCWluZm8tPmZib3BzLT5mYl9zeW5jKGluZm8pOworCisKKwkvKgorCSAqIFRoZSBmYiBzaG91bGQgYmUgdXNhYmxlIGV2ZW4gaWYgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgKGFuZCB0aGV5IGFyZQorCSAqIGR1cmluZyBzdXNwZW5kL3Jlc3VtZSkuIFN3aXRjaCB0ZW1wb3JhcnkgdG8gZm9yY2VkIHBvbGxpbmcuCisJICovCisJcHJpbnRrKEtFUk5fSU5GTyAidG1pb2ZiOiBzd2l0Y2hpbmcgdG8gcG9sbGluZ1xuIik7CisJcGFyLT51c2VfcG9sbGluZyA9IHRydWU7CisJdG1pb2ZiX2h3X3N0b3AoZGV2KTsKKworCWlmIChjZWxsLT5zdXNwZW5kKQorCQlyZXR2YWwgPSBjZWxsLT5zdXNwZW5kKGRldik7CisKKwlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHRtaW9mYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXR2YWw7CisKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisKKwlpZiAoY2VsbC0+cmVzdW1lKSB7CisJCXJldHZhbCA9IGNlbGwtPnJlc3VtZShkZXYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBvdXQ7CisJfQorCisJdG1pb2ZiX2lycSgtMSwgaW5mbyk7CisKKwl0bWlvZmJfaHdfaW5pdChkZXYpOworCisJdG1pb2ZiX2h3X21vZGUoZGV2KTsKKworCWZiX3NldF9zdXNwZW5kKGluZm8sIDApOworb3V0OgorCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwlyZXR1cm4gcmV0dmFsOworfQorI2Vsc2UKKyNkZWZpbmUgdG1pb2ZiX3N1c3BlbmQJTlVMTAorI2RlZmluZSB0bWlvZmJfcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0bWlvZmJfZHJpdmVyID0geworCS5kcml2ZXIubmFtZQk9ICJ0bWlvLWZiIiwKKwkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCisJLnByb2JlCQk9IHRtaW9mYl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRtaW9mYl9yZW1vdmUpLAorCS5zdXNwZW5kCT0gdG1pb2ZiX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB0bWlvZmJfcmVzdW1lLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgTU9EVUxFCitzdGF0aWMgdm9pZCBfX2luaXQgdG1pb2ZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCit7CisJY2hhciAqdGhpc19vcHQ7CisKKwlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQorCQlyZXR1cm47CisKKwl3aGlsZSAoKHRoaXNfb3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7CisJCWlmICghKnRoaXNfb3B0KQorCQkJY29udGludWU7CisJCS8qCisJCSAqIEZJWE1FCisJCSAqLworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCB0bWlvZmJfaW5pdCh2b2lkKQoreworI2lmbmRlZiBNT0RVTEUKKwljaGFyICpvcHRpb24gPSBOVUxMOworCisJaWYgKGZiX2dldF9vcHRpb25zKCJ0bWlvZmIiLCAmb3B0aW9uKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJdG1pb2ZiX3NldHVwKG9wdGlvbik7CisjZW5kaWYKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0bWlvZmJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRtaW9mYl9jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRtaW9mYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0bWlvZmJfaW5pdCk7Cittb2R1bGVfZXhpdCh0bWlvZmJfY2xlYW51cCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVE1JTyBmcmFtZWJ1ZmZlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkNocmlzIEh1bWJlcnQsIERpcmsgT3BmZXIsIERtaXRyeSBCYXJ5c2hrb3YiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKaW5kZXggNTA3NDQyMi4uNmMyZDM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby91dmVzYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKQEAgLTUxNiwxMCArNTE2LDEyIEBACiAKIAkJZXJyID0gdXZlc2FmYl9leGVjKHRhc2spOwogCQlpZiAoZXJyIHx8ICh0YXNrLT50LnJlZ3MuZWF4ICYgMHhmZmZmKSAhPSAweDAwNGYpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidXZlc2FmYjogR2V0dGluZyBtb2RlIGluZm8gYmxvY2sgIgorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXZlc2FmYjogR2V0dGluZyBtb2RlIGluZm8gYmxvY2sgIgogCQkJCSJmb3IgbW9kZSAweCV4IGZhaWxlZCAoZWF4PTB4JXgsIGVycj0lZClcbiIsCiAJCQkJKm1vZGUsICh1MzIpdGFzay0+dC5yZWdzLmVheCwgZXJyKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJbW9kZSsrOworCQkJcGFyLT52YmVfbW9kZXNfY250LS07CisJCQljb250aW51ZTsKIAkJfQogCiAJCW1pYiA9IHRhc2stPmJ1ZjsKQEAgLTU0OCw3ICs1NTAsMTAgQEAKIAkJCW1pYi0+ZGVwdGggPSBtaWItPmJpdHNfcGVyX3BpeGVsOwogCX0KIAotCXJldHVybiAwOworCWlmIChwYXItPnZiZV9tb2Rlc19jbnQgPiAwKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92Z2ExNmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYwppbmRleCBlMzFiY2E4Li41YjI5Mzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYwpAQCAtNTgsNyArNTgsNiBAQAogCQl1bnNpZ25lZCBjaGFyCUNsb2NraW5nTW9kZTsJICAvKiBTZXEtQ29udHJvbGxlcjowMWggKi8KIAl9IHZnYV9zdGF0ZTsKIAlzdHJ1Y3Qgdmdhc3RhdGUgc3RhdGU7Ci0Jc3RydWN0IG11dGV4IG9wZW5fbG9jazsKIAl1bnNpZ25lZCBpbnQgcmVmX2NvdW50OwogCWludCBwYWxldHRlX2JsYW5rZWQsIHZlc2FfYmxhbmtlZCwgbW9kZSwgaXNWR0E7CiAJdTggbWlzYywgcGVsX21zaywgdnNzLCBjbGtkaXY7CkBAIC0yODYsNyArMjg1LDYgQEAKIHsKIAlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCW11dGV4X2xvY2soJnBhci0+b3Blbl9sb2NrKTsKIAlpZiAoIXBhci0+cmVmX2NvdW50KSB7CiAJCW1lbXNldCgmcGFyLT5zdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCB2Z2FzdGF0ZSkpOwogCQlwYXItPnN0YXRlLmZsYWdzID0gVkdBX1NBVkVfRk9OVFMgfCBWR0FfU0FWRV9NT0RFIHwKQEAgLTI5NCw3ICsyOTIsNiBAQAogCQlzYXZlX3ZnYSgmcGFyLT5zdGF0ZSk7CiAJfQogCXBhci0+cmVmX2NvdW50Kys7Ci0JbXV0ZXhfdW5sb2NrKCZwYXItPm9wZW5fbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMwMywxNSArMzAwLDEyIEBACiB7CiAJc3RydWN0IHZnYTE2ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAKLQltdXRleF9sb2NrKCZwYXItPm9wZW5fbG9jayk7Ci0JaWYgKCFwYXItPnJlZl9jb3VudCkgewotCQltdXRleF91bmxvY2soJnBhci0+b3Blbl9sb2NrKTsKKwlpZiAoIXBhci0+cmVmX2NvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlpZiAocGFyLT5yZWZfY291bnQgPT0gMSkKIAkJcmVzdG9yZV92Z2EoJnBhci0+c3RhdGUpOwogCXBhci0+cmVmX2NvdW50LS07Ci0JbXV0ZXhfdW5sb2NrKCZwYXItPm9wZW5fbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMjYsNyArMTMyMCw2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAidmdhMTZmYjogbWFwcGVkIHRvIDB4JXBcbiIsIGluZm8tPnNjcmVlbl9iYXNlKTsKIAlwYXIgPSBpbmZvLT5wYXI7CiAKLQltdXRleF9pbml0KCZwYXItPm9wZW5fbG9jayk7CiAJcGFyLT5pc1ZHQSA9IHNjcmVlbl9pbmZvLm9yaWdfdmlkZW9faXNWR0E7CiAJcGFyLT5wYWxldHRlX2JsYW5rZWQgPSAwOwogCXBhci0+dmVzYV9ibGFua2VkID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL01ha2VmaWxlIGIvZHJpdmVycy92aWRlby92aWEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzM2I0YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIFZJQSBmcmFtZWJ1ZmZlciBkcml2ZXIgKGZvciBMaW51eCBLZXJuZWwgMi42KQorIworCitvYmotJChDT05GSUdfRkJfVklBKSArPSB2aWFmYi5vCisKK3ZpYWZiLXkJOj12aWFmYmRldi5vIGh3Lm8gaWZhY2UubyAgdmlhX2kyYy5vIGR2aS5vIGxjZC5vIGlvY3RsLm8gYWNjZWwubyB2aWFfdXRpbGl0eS5vIHZ0MTYzNi5vIGdsb2JhbC5vIHRibERQQVNldHRpbmcubyB2aWFtb2RlLm8gdGJsMTYzNi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5jIGIvZHJpdmVycy92aWRlby92aWEvYWNjZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzI1MjNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvYWNjZWwuYwpAQCAtMCwwICsxLDI3OSBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpbmNsdWRlICJnbG9iYWwuaCIKKwordm9pZCB2aWFmYl9pbml0X2FjY2VsKHZvaWQpCit7CisJdmlhcGFyaW5mby0+ZmJtZW1fZnJlZSAtPSBDVVJTT1JfU0laRTsKKwl2aWFwYXJpbmZvLT5jdXJzb3Jfc3RhcnQgPSB2aWFwYXJpbmZvLT5mYm1lbV9mcmVlOworCXZpYXBhcmluZm8tPmZibWVtX3VzZWQgKz0gQ1VSU09SX1NJWkU7CisKKwkvKiBSZXZlcnNlIDgqMTAyNCBtZW1vcnkgc3BhY2UgZm9yIGN1cnNvciBpbWFnZSAqLworCXZpYXBhcmluZm8tPmZibWVtX2ZyZWUgLT0gKENVUlNPUl9TSVpFICsgVlFfU0laRSk7CisJdmlhcGFyaW5mby0+VlFfc3RhcnQgPSB2aWFwYXJpbmZvLT5mYm1lbV9mcmVlOworCXZpYXBhcmluZm8tPlZRX2VuZCA9IHZpYXBhcmluZm8tPlZRX3N0YXJ0ICsgVlFfU0laRSAtIDE7CisJdmlhcGFyaW5mby0+ZmJtZW1fdXNlZCArPSAoQ1VSU09SX1NJWkUgKyBWUV9TSVpFKTsgfQorCit2b2lkIHZpYWZiX2luaXRfMmRfZW5naW5lKHZvaWQpCit7CisJdTMyIGR3VlFTdGFydEFkZHIsIGR3VlFFbmRBZGRyOworCXUzMiBkd1ZRTGVuLCBkd1ZRU3RhcnRMLCBkd1ZRRW5kTCwgZHdWUVN0YXJ0RW5kSDsKKworCS8qIGluaXQgMkQgZW5naW5lIHJlZ3MgdG8gcmVzZXQgMkQgZW5naW5lICovCisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfR0VNT0RFKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TUkNQT1MpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVFBPUyk7CisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRElNRU5TSU9OKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19QQVRBRERSKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19GR0NPTE9SKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19CR0NPTE9SKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DTElQVEwpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NMSVBCUik7CisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfT0ZGU0VUKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19LRVlDT05UUk9MKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TUkNCQVNFKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19EU1RCQVNFKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19QSVRDSCk7CisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfTU9OT1BBVDEpOworCisJLyogSW5pdCBBR1AgYW5kIFZRIHJlZ3MgKi8KKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCXdyaXRlbCgweDAwMTAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU0VUKTsKKwkJd3JpdGVsKDB4NjgwQTAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDAyMDAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXdyaXRlbCgweDAwMTAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU0VUKTsKKwkJd3JpdGVsKDB4MDAwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDAwMzMzMDA0LCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHg2MDAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NjEwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDYyMDAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHg2MzAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NjQwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDdEMDAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCisJCXdyaXRlbCgweEZFMDIwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU0VUKTsKKwkJd3JpdGVsKDB4MDAwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCWJyZWFrOworCX0KKwlpZiAodmlhcGFyaW5mby0+VlFfc3RhcnQgIT0gMCkgeworCQkvKiBFbmFibGUgVlEgKi8KKwkJZHdWUVN0YXJ0QWRkciA9IHZpYXBhcmluZm8tPlZRX3N0YXJ0OworCQlkd1ZRRW5kQWRkciA9IHZpYXBhcmluZm8tPlZRX2VuZDsKKworCQlkd1ZRU3RhcnRMID0gMHg1MDAwMDAwMCB8IChkd1ZRU3RhcnRBZGRyICYgMHhGRkZGRkYpOworCQlkd1ZRRW5kTCA9IDB4NTEwMDAwMDAgfCAoZHdWUUVuZEFkZHIgJiAweEZGRkZGRik7CisJCWR3VlFTdGFydEVuZEggPSAweDUyMDAwMDAwIHwKKwkJCSgoZHdWUVN0YXJ0QWRkciAmIDB4RkYwMDAwMDApID4+IDI0KSB8CisJCQkoKGR3VlFFbmRBZGRyICYgMHhGRjAwMDAwMCkgPj4gMTYpOworCQlkd1ZRTGVuID0gMHg1MzAwMDAwMCB8IChWUV9TSVpFID4+IDMpOworCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJCWR3VlFTdGFydEwgfD0gMHgyMDAwMDAwMDsKKwkJCWR3VlFFbmRMIHw9IDB4MjAwMDAwMDA7CisJCQlkd1ZRU3RhcnRFbmRIIHw9IDB4MjAwMDAwMDA7CisJCQlkd1ZRTGVuIHw9IDB4MjAwMDAwMDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCQl3cml0ZWwoMHgwMDEwMDAwMCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU0VUKTsKKwkJCXdyaXRlbChkd1ZRU3RhcnRFbmRILAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoZHdWUVN0YXJ0TCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOworCQkJd3JpdGVsKGR3VlFFbmRMLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoZHdWUUxlbiwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4NzQzMDEwMDEsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDAwMDAwMDAwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXdyaXRlbCgweDAwRkUwMDAwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TRVQpOworCQkJd3JpdGVsKDB4MDgwMDAzRkUsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDBBMDAwMjdDLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHgwQjAwMDI2MCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4MEMwMDAyNzQsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDBEMDAwMjY0LAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHgwRTAwMDAwMCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4MEYwMDAwMjAsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDEwMDAwMjdFLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHgxMTAwMDJGRSwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4MjAwRjAwNjAsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKworCQkJd3JpdGVsKDB4MDAwMDAwMDYsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDQwMDA4QzBGLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHg0NDAwMDAwMCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4NDUwODBDMDQsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDQ2ODAwNDA4LAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisKKwkJCXdyaXRlbChkd1ZRU3RhcnRFbmRILAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoZHdWUVN0YXJ0TCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKGR3VlFFbmRMLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoZHdWUUxlbiwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQkvKiBEaXNhYmxlIFZRICovCisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQkJd3JpdGVsKDB4MDAxMDAwMDAsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNFVCk7CisJCQl3cml0ZWwoMHg3NDMwMTAwMCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl3cml0ZWwoMHgwMEZFMDAwMCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU0VUKTsKKwkJCXdyaXRlbCgweDAwMDAwMDA0LAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHg0MDAwOEMwRiwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4NDQwMDAwMDAsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDQ1MDgwQzA0LAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHg0NjgwMDQwOCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwl2aWFmYl9zZXRfMmRfY29sb3JfZGVwdGgodmlhcGFyaW5mby0+YnBwKTsKKworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ0JBU0UpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVEJBU0UpOworCisJd3JpdGVsKFZJQV9QSVRDSF9FTkFCTEUgfAorCQkgICAoKCh2aWFwYXJpbmZvLT5ocmVzICoKKwkJICAgICAgdmlhcGFyaW5mby0+YnBwID4+IDMpID4+IDMpIHwgKCgodmlhcGFyaW5mby0+aHJlcyAqCisJCQkJCQkgICB2aWFwYXJpbmZvLT4KKwkJCQkJCSAgIGJwcCA+PiAzKSA+PiAzKSA8PCAxNikpLAorCQkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19QSVRDSCk7Cit9CisKK3ZvaWQgdmlhZmJfc2V0XzJkX2NvbG9yX2RlcHRoKGludCBicHApCit7CisJdTMyIGR3R0VNb2RlOworCisJZHdHRU1vZGUgPSByZWFkbCh2aWFwYXJpbmZvLT5pb192aXJ0ICsgMHgwNCkgJiAweEZGRkZGQ0ZGOworCisJc3dpdGNoIChicHApIHsKKwljYXNlIDE2OgorCQlkd0dFTW9kZSB8PSBWSUFfR0VNXzE2YnBwOworCQlicmVhazsKKwljYXNlIDMyOgorCQlkd0dFTW9kZSB8PSBWSUFfR0VNXzMyYnBwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkd0dFTW9kZSB8PSBWSUFfR0VNXzhicHA7CisJCWJyZWFrOworCX0KKworCS8qIFNldCBCUFAgYW5kIFBpdGNoICovCisJd3JpdGVsKGR3R0VNb2RlLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19HRU1PREUpOworfQorCit2b2lkIHZpYWZiX2h3X2N1cnNvcl9pbml0KHZvaWQpCit7CisJLyogU2V0IEN1cnNvciBJbWFnZSBCYXNlIEFkZHJlc3MgKi8KKwl3cml0ZWwodmlhcGFyaW5mby0+Y3Vyc29yX3N0YXJ0LAorCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfTU9ERSk7CisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX1BPUyk7CisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX09SRyk7CisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX0JHKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfRkcpOworfQorCit2b2lkIHZpYWZiX3Nob3dfaHdfY3Vyc29yKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgU3RhdHVzKQoreworCXUzMiB0ZW1wOworCXUzMiBpZ2FfcGF0aCA9ICgoc3RydWN0IHZpYWZiX3BhciAqKShpbmZvLT5wYXIpKS0+aWdhX3BhdGg7CisKKwl0ZW1wID0gcmVhZGwodmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX01PREUpOworCXN3aXRjaCAoU3RhdHVzKSB7CisJY2FzZSBIV19DdXJzb3JfT046CisJCXRlbXAgfD0gMHgxOworCQlicmVhazsKKwljYXNlIEhXX0N1cnNvcl9PRkY6CisJCXRlbXAgJj0gMHhGRkZGRkZGRTsKKwkJYnJlYWs7CisJfQorCXN3aXRjaCAoaWdhX3BhdGgpIHsKKwljYXNlIElHQTI6CisJCXRlbXAgfD0gMHg4MDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBJR0ExOgorCWRlZmF1bHQ6CisJCXRlbXAgJj0gMHg3RkZGRkZGRjsKKwl9CisJd3JpdGVsKHRlbXAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9NT0RFKTsKK30KKworaW50IHZpYWZiX3dhaXRfZW5naW5lX2lkbGUodm9pZCkKK3sKKwlpbnQgbG9vcCA9IDA7CisKKwl3aGlsZSAoIShyZWFkbCh2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TVEFUVVMpICYKKwkJCVZJQV9WUl9RVUVVRV9CVVNZKSAmJiAobG9vcCsrIDwgTUFYTE9PUCkpCisJCWNwdV9yZWxheCgpOworCisJd2hpbGUgKChyZWFkbCh2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TVEFUVVMpICYKKwkJICAgIChWSUFfQ01EX1JHVFJfQlVTWSB8IFZJQV8yRF9FTkdfQlVTWSB8IFZJQV8zRF9FTkdfQlVTWSkpICYmCisJCSAgICAobG9vcCsrIDwgTUFYTE9PUCkpCisJCWNwdV9yZWxheCgpOworCisJcmV0dXJuIGxvb3AgPj0gTUFYTE9PUDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YmY4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5oCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQUNDRUxfSF9fCisjZGVmaW5lIF9fQUNDRUxfSF9fCisKKyNkZWZpbmUgRkJfQUNDRUxfVklBX1VOSUNIUk9NRSAgNTAKKworLyogTU1JTyBCYXNlIEFkZHJlc3MgRGVmaW5pdGlvbiAqLworI2RlZmluZSBNTUlPX1ZHQUJBU0UgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIE1NSU9fQ1JfUkVBRCAgICAgICAgICAgICAgICAoTU1JT19WR0FCQVNFICsgMHgzRDQpCisjZGVmaW5lIE1NSU9fQ1JfV1JJVEUgICAgICAgICAgICAgICAoTU1JT19WR0FCQVNFICsgMHgzRDUpCisjZGVmaW5lIE1NSU9fU1JfUkVBRCAgICAgICAgICAgICAgICAoTU1JT19WR0FCQVNFICsgMHgzQzQpCisjZGVmaW5lIE1NSU9fU1JfV1JJVEUgICAgICAgICAgICAgICAoTU1JT19WR0FCQVNFICsgMHgzQzUpCisKKy8qIEhXIEN1cnNvciBTdGF0dXMgRGVmaW5lICovCisjZGVmaW5lIEhXX0N1cnNvcl9PTiAgICAwCisjZGVmaW5lIEhXX0N1cnNvcl9PRkYgICAxCisKKyNkZWZpbmUgQ1VSU09SX1NJWkUgICAgICg4ICogMTAyNCkKKyNkZWZpbmUgVlFfU0laRSAgICAgICAgICgyNTYgKiAxMDI0KQorCisjZGVmaW5lIFZJQV9NTUlPX0JMVEJBU0UgICAgICAgIDB4MjAwMDAwCisjZGVmaW5lIFZJQV9NTUlPX0JMVFNJWkUgICAgICAgIDB4MjAwMDAwCisKKy8qIERlZmluZXMgZm9yIDJEIHJlZ2lzdGVycyAqLworI2RlZmluZSBWSUFfUkVHX0dFQ01EICAgICAgICAgICAweDAwMAorI2RlZmluZSBWSUFfUkVHX0dFTU9ERSAgICAgICAgICAweDAwNAorI2RlZmluZSBWSUFfUkVHX1NSQ1BPUyAgICAgICAgICAweDAwOAorI2RlZmluZSBWSUFfUkVHX0RTVFBPUyAgICAgICAgICAweDAwQworLyogd2lkdGggYW5kIGhlaWdodCAqLworI2RlZmluZSBWSUFfUkVHX0RJTUVOU0lPTiAgICAgICAweDAxMAorI2RlZmluZSBWSUFfUkVHX1BBVEFERFIgICAgICAgICAweDAxNAorI2RlZmluZSBWSUFfUkVHX0ZHQ09MT1IgICAgICAgICAweDAxOAorI2RlZmluZSBWSUFfUkVHX0JHQ09MT1IgICAgICAgICAweDAxQworLyogdG9wIGFuZCBsZWZ0IG9mIGNsaXBwaW5nICovCisjZGVmaW5lIFZJQV9SRUdfQ0xJUFRMICAgICAgICAgIDB4MDIwCisvKiBib3R0b20gYW5kIHJpZ2h0IG9mIGNsaXBwaW5nICovCisjZGVmaW5lIFZJQV9SRUdfQ0xJUEJSICAgICAgICAgIDB4MDI0CisjZGVmaW5lIFZJQV9SRUdfT0ZGU0VUICAgICAgICAgIDB4MDI4CisvKiBjb2xvciBrZXkgY29udHJvbCAqLworI2RlZmluZSBWSUFfUkVHX0tFWUNPTlRST0wgICAgICAweDAyQworI2RlZmluZSBWSUFfUkVHX1NSQ0JBU0UgICAgICAgICAweDAzMAorI2RlZmluZSBWSUFfUkVHX0RTVEJBU0UgICAgICAgICAweDAzNAorLyogcGl0Y2ggb2Ygc3JjIGFuZCBkc3QgKi8KKyNkZWZpbmUgVklBX1JFR19QSVRDSCAgICAgICAgICAgMHgwMzgKKyNkZWZpbmUgVklBX1JFR19NT05PUEFUMCAgICAgICAgMHgwM0MKKyNkZWZpbmUgVklBX1JFR19NT05PUEFUMSAgICAgICAgMHgwNDAKKy8qIGZyb20gMHgxMDAgdG8gMHgxZmYgKi8KKyNkZWZpbmUgVklBX1JFR19DT0xPUlBBVCAgICAgICAgMHgxMDAKKworLyogVklBX1JFR19QSVRDSCgweDM4KTogUGl0Y2ggU2V0dGluZyAqLworI2RlZmluZSBWSUFfUElUQ0hfRU5BQkxFICAgICAgICAweDgwMDAwMDAwCisKKy8qIGRlZmluZXMgZm9yIFZJQSBIVyBjdXJzb3IgcmVnaXN0ZXJzICovCisjZGVmaW5lIFZJQV9SRUdfQ1VSU09SX01PREUgICAgIDB4MkQwCisjZGVmaW5lIFZJQV9SRUdfQ1VSU09SX1BPUyAgICAgIDB4MkQ0CisjZGVmaW5lIFZJQV9SRUdfQ1VSU09SX09SRyAgICAgIDB4MkQ4CisjZGVmaW5lIFZJQV9SRUdfQ1VSU09SX0JHICAgICAgIDB4MkRDCisjZGVmaW5lIFZJQV9SRUdfQ1VSU09SX0ZHICAgICAgIDB4MkUwCisKKy8qIFZJQV9SRUdfR0VNT0RFKDB4MDQpOiBHRSBtb2RlICovCisjZGVmaW5lIFZJQV9HRU1fOGJwcCAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVklBX0dFTV8xNmJwcCAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBWSUFfR0VNXzMyYnBwICAgICAgICAgICAweDAwMDAwMzAwCisKKy8qIFZJQV9SRUdfR0VDTUQoMHgwMCk6IDJEIEVuZ2luZSBDb21tYW5kICAqLworI2RlZmluZSBWSUFfR0VDX05PT1AgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZJQV9HRUNfQkxUICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVklBX0dFQ19MSU5FICAgICAgICAgICAgMHgwMDAwMDAwNQorCisvKiBSb3RhdGUgQ29tbWFuZCAqLworI2RlZmluZSBWSUFfR0VDX1JPVCAgICAgICAgICAgICAweDAwMDAwMDA4CisKKyNkZWZpbmUgVklBX0dFQ19TUkNfWFkgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX1NSQ19MSU5FQVIgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFZJQV9HRUNfRFNUX1hZICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVklBX0dFQ19EU1RfTElOUkFUICAgICAgMHgwMDAwMDAyMAorCisjZGVmaW5lIFZJQV9HRUNfU1JDX0ZCICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVklBX0dFQ19TUkNfU1lTICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBWSUFfR0VDX0RTVF9GQiAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZJQV9HRUNfRFNUX1NZUyAgICAgICAgIDB4MDAwMDAwODAKKworLyogc291cmNlIGlzIG1vbm8gKi8KKyNkZWZpbmUgVklBX0dFQ19TUkNfTU9OTyAgICAgICAgMHgwMDAwMDEwMAorLyogcGF0dGVybiBpcyBtb25vICovCisjZGVmaW5lIFZJQV9HRUNfUEFUX01PTk8gICAgICAgIDB4MDAwMDAyMDAKKy8qIG1vbm8gc3JjIGlzIG9wYXF1ZSAqLworI2RlZmluZSBWSUFfR0VDX01TUkNfT1BBUVVFICAgICAweDAwMDAwMDAwCisvKiBtb25vIHNyYyBpcyB0cmFuc3BhcmVudCAqLworI2RlZmluZSBWSUFfR0VDX01TUkNfVFJBTlMgICAgICAweDAwMDAwNDAwCisvKiBwYXR0ZXJuIGlzIGluIGZyYW1lIGJ1ZmZlciAqLworI2RlZmluZSBWSUFfR0VDX1BBVF9GQiAgICAgICAgICAweDAwMDAwMDAwCisvKiBwYXR0ZXJuIGlzIGZyb20gcmVnIHNldHRpbmcgKi8KKyNkZWZpbmUgVklBX0dFQ19QQVRfUkVHICAgICAgICAgMHgwMDAwMDgwMAorCisjZGVmaW5lIFZJQV9HRUNfQ0xJUF9ESVNBQkxFICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVklBX0dFQ19DTElQX0VOQUJMRSAgICAgMHgwMDAwMTAwMAorCisjZGVmaW5lIFZJQV9HRUNfRklYQ09MT1JfUEFUICAgIDB4MDAwMDIwMDAKKworI2RlZmluZSBWSUFfR0VDX0lOQ1ggICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZJQV9HRUNfREVDWSAgICAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgVklBX0dFQ19JTkNZICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX0RFQ1ggICAgICAgICAgICAweDAwMDA4MDAwCisvKiBtb25vIHBhdHRlcm4gaXMgb3BhcXVlICovCisjZGVmaW5lIFZJQV9HRUNfTVBBVF9PUEFRVUUgICAgIDB4MDAwMDAwMDAKKy8qIG1vbm8gcGF0dGVybiBpcyB0cmFuc3BhcmVudCAqLworI2RlZmluZSBWSUFfR0VDX01QQVRfVFJBTlMgICAgICAweDAwMDEwMDAwCisKKyNkZWZpbmUgVklBX0dFQ19NT05PX1VOUEFDSyAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX01PTk9fUEFDSyAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFZJQV9HRUNfTU9OT19EV09SRCAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVklBX0dFQ19NT05PX1dPUkQgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBWSUFfR0VDX01PTk9fQllURSAgICAgICAweDAwMDgwMDAwCisKKyNkZWZpbmUgVklBX0dFQ19MQVNUUElYRUxfT04gICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX0xBU1RQSVhFTF9PRkYgICAweDAwMTAwMDAwCisjZGVmaW5lIFZJQV9HRUNfWF9NQUpPUiAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVklBX0dFQ19ZX01BSk9SICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBWSUFfR0VDX1FVSUNLX1NUQVJUICAgICAweDAwODAwMDAwCisKKy8qIGRlZmluZXMgZm9yIFZJQSAzRCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVklBX1JFR19TVEFUVVMgICAgICAgICAgMHg0MDAKKyNkZWZpbmUgVklBX1JFR19DUl9UUkFOU0VUICAgICAgMHg0MUMKKyNkZWZpbmUgVklBX1JFR19DUl9UUkFOU1BBQ0UJMHg0MjAKKyNkZWZpbmUgVklBX1JFR19UUkFOU0VUICAgICAgICAgMHg0M0MKKyNkZWZpbmUgVklBX1JFR19UUkFOU1BBQ0UgICAgICAgMHg0NDAKKworLyogVklBX1JFR19TVEFUVVMoMHg0MDApOiBFbmdpbmUgU3RhdHVzICovCisKKy8qIENvbW1hbmQgUmVndWxhdG9yIGlzIGJ1c3kgKi8KKyNkZWZpbmUgVklBX0NNRF9SR1RSX0JVU1kgICAgICAgMHgwMDAwMDA4MAorLyogMkQgRW5naW5lIGlzIGJ1c3kgKi8KKyNkZWZpbmUgVklBXzJEX0VOR19CVVNZICAgICAgICAgMHgwMDAwMDAwMgorLyogM0QgRW5naW5lIGlzIGJ1c3kgKi8KKyNkZWZpbmUgVklBXzNEX0VOR19CVVNZICAgICAgICAgMHgwMDAwMDAwMQorLyogVmlydHVhbCBRdWV1ZSBpcyBidXN5ICovCisjZGVmaW5lIFZJQV9WUl9RVUVVRV9CVVNZICAgICAgIDB4MDAwMjAwMDAKKworI2RlZmluZSBNQVhMT09QICAgICAgICAgICAgICAgICAweEZGRkZGRgorCit2b2lkIHZpYWZiX2luaXRfYWNjZWwodm9pZCk7Cit2b2lkIHZpYWZiX2luaXRfMmRfZW5naW5lKHZvaWQpOwordm9pZCBzZXRfMmRfY29sb3JfZGVwdGgoaW50KTsKK3ZvaWQgdmlhZmJfaHdfY3Vyc29yX2luaXQodm9pZCk7Cit2b2lkIHZpYWZiX3Nob3dfaHdfY3Vyc29yKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgU3RhdHVzKTsgaW50Cit2aWFmYl93YWl0X2VuZ2luZV9pZGxlKHZvaWQpOyB2b2lkIHZpYWZiX3NldF8yZF9jb2xvcl9kZXB0aChpbnQgYnBwKTsKKworI2VuZGlmIC8qIF9fQUNDRUxfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9jaGlwLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9jaGlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlOTVlZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaApAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpZm5kZWYgX19DSElQX0hfXworI2RlZmluZSBfX0NISVBfSF9fCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlZmluaXRpb24gR3JhcGhpYyBDaGlwIEluZm9ybWF0aW9uICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lICAgICBQQ0lfVklBX1ZFTkRPUl9JRCAgICAgICAweDExMDYKKworLyogRGVmaW5lIFZJQSBHcmFwaGljIENoaXAgTmFtZSAqLworI2RlZmluZSAgICAgVU5JQ0hST01FX0NMRTI2NiAgICAgICAgMQorI2RlZmluZSAgICAgVU5JQ0hST01FX0NMRTI2Nl9ESUQgICAgMHgzMTIyCisjZGVmaW5lICAgICBDTEUyNjZfUkVWSVNJT05fQVggICAgICAweDBBCisjZGVmaW5lICAgICBDTEUyNjZfUkVWSVNJT05fQ1ggICAgICAweDBDCisKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9LNDAwICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9LNDAwX0RJRCAgICAgIDB4NzIwNQorCisjZGVmaW5lICAgICBVTklDSFJPTUVfSzgwMCAgICAgICAgICAzCisjZGVmaW5lICAgICBVTklDSFJPTUVfSzgwMF9ESUQgICAgICAweDMxMDgKKworI2RlZmluZSAgICAgVU5JQ0hST01FX1BNODAwICAgICAgICAgNAorI2RlZmluZSAgICAgVU5JQ0hST01FX1BNODAwX0RJRCAgICAgMHgzMTE4CisKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9DTjcwMCAgICAgICAgIDUKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9DTjcwMF9ESUQgICAgIDB4MzM0NAorCisjZGVmaW5lICAgICBVTklDSFJPTUVfQ1g3MDAgICAgICAgICA2CisjZGVmaW5lICAgICBVTklDSFJPTUVfQ1g3MDBfRElEICAgICAweDMxNTcKKyNkZWZpbmUgICAgIENYNzAwX1JFVklTSU9OXzcwMCAgICAgIDB4MAorI2RlZmluZSAgICAgQ1g3MDBfUkVWSVNJT05fNzAwTSAgICAgMHgxCisjZGVmaW5lICAgICBDWDcwMF9SRVZJU0lPTl83MDBNMiAgICAweDIKKworI2RlZmluZSAgICAgVU5JQ0hST01FX0NONzUwICAgICAgICAgNworI2RlZmluZSAgICAgVU5JQ0hST01FX0NONzUwX0RJRCAgICAgMHgzMjI1CisKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9LOE04OTAgICAgICAgIDgKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9LOE04OTBfRElEICAgIDB4MzIzMAorCisjZGVmaW5lICAgICBVTklDSFJPTUVfUDRNODkwICAgICAgICA5CisjZGVmaW5lICAgICBVTklDSFJPTUVfUDRNODkwX0RJRCAgICAweDMzNDMKKworI2RlZmluZSAgICAgVU5JQ0hST01FX1A0TTkwMCAgICAgICAgMTAKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9QNE05MDBfRElEICAgIDB4MzM3MQorCisjZGVmaW5lICAgICBVTklDSFJPTUVfVlg4MDAgICAgICAgICAxMQorI2RlZmluZSAgICAgVU5JQ0hST01FX1ZYODAwX0RJRCAgICAgMHgxMTIyCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlZmluaXRpb24gVE1EUyBUcmFzbWl0dGVyIEluZm9ybWF0aW9uICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRGVmaW5pdGlvbiBUTURTIFRyYXNtaXR0ZXIgSW5kZXggKi8KKyNkZWZpbmUgICAgIE5PTl9UTURTX1RSQU5TTUlUVEVSICAgIDB4MDAKKyNkZWZpbmUgICAgIFZUMTYzMl9UTURTICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgICAgIElOVEVHUkFURURfVE1EUyAgICAgICAgIDB4NDIKKworLyogRGVmaW5pdGlvbiBUTURTIFRyYXNtaXR0ZXIgSTJDIFNsYXZlIEFkZHJlc3MgKi8KKyNkZWZpbmUgICAgIFZUMTYzMl9UTURTX0kyQ19BRERSICAgIDB4MTAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVmaW5pdGlvbiBMVkRTIFRyYXNtaXR0ZXIgSW5mb3JtYXRpb24gICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEZWZpbml0aW9uIExWRFMgVHJhc21pdHRlciBJbmRleCAqLworI2RlZmluZSAgICAgTk9OX0xWRFNfVFJBTlNNSVRURVIgICAgMHgwMAorI2RlZmluZSAgICAgVlQxNjMxX0xWRFMgICAgICAgICAgICAgMHgwMQorI2RlZmluZSAgICAgVlQxNjM2X0xWRFMgICAgICAgICAgICAgMHgwRQorI2RlZmluZSAgICAgSU5URUdSQVRFRF9MVkRTICAgICAgICAgMHg0MQorCisvKiBEZWZpbml0aW9uIERpZ2l0YWwgVHJhbnNtaXR0ZXIgTW9kZSAqLworI2RlZmluZSAgICAgVFhfREFUQV8xMl9CSVRTICAgICAgICAgMHgwMQorI2RlZmluZSAgICAgVFhfREFUQV8yNF9CSVRTICAgICAgICAgMHgwMgorI2RlZmluZSAgICAgVFhfREFUQV9ERFJfTU9ERSAgICAgICAgMHgwNAorI2RlZmluZSAgICAgVFhfREFUQV9TRFJfTU9ERSAgICAgICAgMHgwOAorCisvKiBEZWZpbml0aW9uIExWRFMgVHJhc21pdHRlciBJMkMgU2xhdmUgQWRkcmVzcyAqLworI2RlZmluZSAgICAgVlQxNjMxX0xWRFNfSTJDX0FERFIgICAgMHg3MAorI2RlZmluZSAgICAgVlQzMjcxX0xWRFNfSTJDX0FERFIgICAgMHg4MAorI2RlZmluZSAgICAgVlQxNjM2X0xWRFNfSTJDX0FERFIgICAgMHg4MAorCitzdHJ1Y3QgdG1kc19jaGlwX2luZm9ybWF0aW9uIHsKKwlpbnQgdG1kc19jaGlwX25hbWU7CisJaW50IHRtZHNfY2hpcF9zbGF2ZV9hZGRyOworCWludCBkdmlfcGFuZWxfaWQ7CisJaW50IGRhdGFfbW9kZTsKKwlpbnQgb3V0cHV0X2ludGVyZmFjZTsKKwlpbnQgaTJjX3BvcnQ7CisJaW50IGRldmljZV90eXBlOworfTsKKworc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiB7CisJaW50IGx2ZHNfY2hpcF9uYW1lOworCWludCBsdmRzX2NoaXBfc2xhdmVfYWRkcjsKKwlpbnQgZGF0YV9tb2RlOworCWludCBvdXRwdXRfaW50ZXJmYWNlOworCWludCBpMmNfcG9ydDsKK307CisKK3N0cnVjdCBjaGlwX2luZm9ybWF0aW9uIHsKKwlpbnQgZ2Z4X2NoaXBfbmFtZTsKKwlpbnQgZ2Z4X2NoaXBfcmV2aXNpb247CisJaW50IGNoaXBfb25fc2xvdDsKKwlzdHJ1Y3QgdG1kc19jaGlwX2luZm9ybWF0aW9uIHRtZHNfY2hpcF9pbmZvOworCXN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gbHZkc19jaGlwX2luZm87CisJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiBsdmRzX2NoaXBfaW5mbzI7Cit9OworCitzdHJ1Y3QgY3J0X3NldHRpbmdfaW5mb3JtYXRpb24geworCWludCBpZ2FfcGF0aDsKKwlpbnQgaF9hY3RpdmU7CisJaW50IHZfYWN0aXZlOworCWludCBicHA7CisJaW50IHJlZnJlc2hfcmF0ZTsKK307CisKK3N0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24geworCWludCBpZ2FfcGF0aDsKKwlpbnQgaF9hY3RpdmU7CisJaW50IHZfYWN0aXZlOworCWludCBicHA7CisJaW50IHJlZnJlc2hfcmF0ZTsKKwlpbnQgZ2V0X2R2aV9zaXplX21ldGhvZDsKKwlpbnQgbWF4X3BpeGVsX2Nsb2NrOworCWludCBkdmlfcGFuZWxfc2l6ZTsKKwlpbnQgZHZpX3BhbmVsX2hyZXM7CisJaW50IGR2aV9wYW5lbF92cmVzOworCWludCBuYXRpdmVfc2l6ZTsKK307CisKK3N0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24geworCWludCBpZ2FfcGF0aDsKKwlpbnQgaF9hY3RpdmU7CisJaW50IHZfYWN0aXZlOworCWludCBicHA7CisJaW50IHJlZnJlc2hfcmF0ZTsKKwlpbnQgZ2V0X2xjZF9zaXplX21ldGhvZDsKKwlpbnQgbGNkX3BhbmVsX2lkOworCWludCBsY2RfcGFuZWxfc2l6ZTsKKwlpbnQgbGNkX3BhbmVsX2hyZXM7CisJaW50IGxjZF9wYW5lbF92cmVzOworCWludCBkaXNwbGF5X21ldGhvZDsKKwlpbnQgZGV2aWNlX2xjZF9kdWFsZWRnZTsKKwlpbnQgTENERGl0aGVyaW5nOworCWludCBsY2RfbW9kZTsKKwl1MzIgdmNsazsJCS8qcGFuZWwgbW9kZSBjbG9jayB2YWx1ZSAqLworfTsKKworc3RydWN0IEdGWF9EUEFfU0VUVElORyB7CisJaW50IENsa1JhbmdlSW5kZXg7CisJdTggRFZQMDsJCS8qIENSOTZbMzowXSAqLworCXU4IERWUDBEYXRhRHJpX1MxOwkvKiBTUjJBWzVdICAgKi8KKwl1OCBEVlAwRGF0YURyaV9TOwkvKiBTUjFCWzFdICAgKi8KKwl1OCBEVlAwQ2xvY2tEcmlfUzE7CS8qIFNSMkFbNF0gICAqLworCXU4IERWUDBDbG9ja0RyaV9TOwkvKiBTUjFFWzJdICAgKi8KKwl1OCBEVlAxOwkJLyogQ1I5QlszOjBdICovCisJdTggRFZQMURyaXZpbmc7CQkvKiBTUjY1WzM6MF0sIERhdGEgYW5kIENsb2NrIGRyaXZpbmcgKi8KKwl1OCBERlBIaWdoOwkJLyogQ1I5N1szOjBdICovCisJdTggREZQTG93OwkJLyogQ1I5OVszOjBdICovCisKK307CisKK3N0cnVjdCBWVDE2MzZfRFBBX1NFVFRJTkcgeworCWludCBQYW5lbFNpemVJRDsKKwl1OCBDTEtfU0VMX1NUMTsKKwl1OCBDTEtfU0VMX1NUMjsKK307CisjZW5kaWYgLyogX19DSElQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvZGVidWcuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZlYWNjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2RlYnVnLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpZm5kZWYgX19ERUJVR19IX18KKyNkZWZpbmUgX19ERUJVR19IX18KKworI2lmbmRlZiBWSUFGQl9ERUJVRworI2RlZmluZSBWSUFGQl9ERUJVRyAwCisjZW5kaWYKKworI2lmIFZJQUZCX0RFQlVHCisjZGVmaW5lIERFQlVHX01TRyhmLCBhLi4uKSAgIHByaW50ayhmLCAjIyBhKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdfTVNHKGYsIGEuLi4pCisjZW5kaWYKKworI2RlZmluZSBWSUFGQl9XQVJOIDAKKyNpZiBWSUFGQl9XQVJOCisjZGVmaW5lIFdBUk5fTVNHKGYsIGEuLi4pICAgcHJpbnRrKGYsICMjIGEpCisjZWxzZQorI2RlZmluZSBXQVJOX01TRyhmLCBhLi4uKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0RFQlVHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvZHZpLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjk2NTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvZHZpLmMKQEAgLTAsMCArMSw2ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisKK3N0YXRpYyB2b2lkIHRtZHNfcmVnaXN0ZXJfd3JpdGUoaW50IGluZGV4LCB1OCBkYXRhKTsKK3N0YXRpYyBpbnQgdG1kc19yZWdpc3Rlcl9yZWFkKGludCBpbmRleCk7CitzdGF0aWMgaW50IHRtZHNfcmVnaXN0ZXJfcmVhZF9ieXRlcyhpbnQgaW5kZXgsIHU4ICpidWZmLCBpbnQgYnVmZl9sZW4pOworc3RhdGljIGludCBjaGVja19yZWR1Y2VfYmxhbmtpbmdfbW9kZShpbnQgbW9kZV9pbmRleCwKKwlpbnQgcmVmcmVzaF9yYXRlKTsKK3N0YXRpYyBpbnQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjEodm9pZCk7CitzdGF0aWMgaW50IGR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YyKHZvaWQpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZHZpX2dldF9wYW5lbF9pbmZvKHZvaWQpOworc3RhdGljIGludCB2aWFmYl9kdmlfcXVlcnlfRURJRCh2b2lkKTsKKworc3RhdGljIGludCBjaGVja190bWRzX2NoaXAoaW50IGRldmljZV9pZF9zdWJhZGRyLCBpbnQgZGV2aWNlX2lkKQoreworCWlmICh0bWRzX3JlZ2lzdGVyX3JlYWQoZGV2aWNlX2lkX3N1YmFkZHIpID09IGRldmljZV9pZCkKKwkJcmV0dXJuIE9LOworCWVsc2UKKwkJcmV0dXJuIEZBSUw7Cit9CisKK3ZvaWQgdmlhZmJfaW5pdF9kdmlfc2l6ZSh2b2lkKQoreworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2luaXRfZHZpX3NpemUoKVxuIik7CisJREVCVUdfTVNHKEtFUk5fSU5GTworCQkidmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmdldF9kdmlfc2l6ZV9tZXRob2QgJWRcbiIsCisJCSAgdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmdldF9kdmlfc2l6ZV9tZXRob2QpOworCisJc3dpdGNoICh2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+Z2V0X2R2aV9zaXplX21ldGhvZCkgeworCWNhc2UgR0VUX0RWSV9TSVpFX0JZX1NZU1RFTV9CSU9TOgorCQlicmVhazsKKwljYXNlIEdFVF9EVklfU1pJRV9CWV9IV19TVFJBUFBJTkc6CisJCWJyZWFrOworCWNhc2UgR0VUX0RWSV9TSVpFX0JZX1ZHQV9CSU9TOgorCWRlZmF1bHQ6CisJCWR2aV9nZXRfcGFuZWxfaW5mbygpOworCQlicmVhazsKKwl9CisJcmV0dXJuOworfQorCitpbnQgdmlhZmJfdG1kc190cmFzbWl0dGVyX2lkZW50aWZ5KHZvaWQpCit7CisJdW5zaWduZWQgY2hhciBzcjJhID0gMCwgc3IxZSA9IDAsIHNyM2UgPSAwOworCisJLyogVHVybiBvbiBvdXB1dHRpbmcgcGFkICovCisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJICAgIC8qPSogREZQIExvdyBQYWQgb24gKj0qLworCQlzcjJhID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMkEpOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwgMHgwMywgQklUMCArIEJJVDEpOworCQlicmVhazsKKworCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCS8qIERGUCBMb3cgUGFkIG9uICovCisJCXNyMmEgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IyQSk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDAzLCBCSVQwICsgQklUMSk7CisJCS8qIERWUDAgUGFkIG9uICovCisJCXNyMWUgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxRSk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUUsIFZJQVNSLCAweEMwLCBCSVQ2ICsgQklUNyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkgICAgLyogRFZQMC9EVlAxIFBhZCBvbiAqLworCQlzcjFlID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMUUpOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFFLCBWSUFTUiwgMHhGMCwgQklUNCArCisJCQlCSVQ1ICsgQklUNiArIEJJVDcpOworCSAgICAvKiBTUjNFWzFdTXVsdGktZnVuY3Rpb24gc2VsZWN0aW9uOgorCSAgICAwID0gRW11bGF0ZSBJMkMgYW5kIEREQyBidXMgYnkgR1BJTzIvMy80LiAqLworCQlzcjNlID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSM0UpOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjNFLCBWSUFTUiwgMHgwLCBCSVQ1KTsKKwkJYnJlYWs7CisJfQorCisJLyogQ2hlY2sgZm9yIFZUMTYzMjogKi8KKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9uYW1lID0gVlQxNjMyX1RNRFM7CisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJdG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHIgPSBWVDE2MzJfVE1EU19JMkNfQUREUjsKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLmkyY19wb3J0ID0gSTJDUE9SVElOREVYOworCWlmIChjaGVja190bWRzX2NoaXAoVlQxNjMyX0RFVklDRV9JRF9SRUcsIFZUMTYzMl9ERVZJQ0VfSUQpICE9IEZBSUwpIHsKKwkJLyoKKwkJICogQ3VycmVudGx5IG9ubHkgc3VwcG9ydCAxMmJpdHMsZHVhbCBlZGdlLGFkZCAyNGJpdHMgbW9kZSBsYXRlcgorCQkgKi8KKwkJdG1kc19yZWdpc3Rlcl93cml0ZSgweDA4LCAweDNiKTsKKworCQlERUJVR19NU0coS0VSTl9JTkZPICJcbiBWVDE2MzIgVE1EUyAhIFxuIik7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuICUyZCIsCisJCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJcbiAlMmQiLAorCQkJICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLmkyY19wb3J0KTsKKwkJcmV0dXJuIE9LOworCX0gZWxzZSB7CisJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uaTJjX3BvcnQgPSBHUElPUE9SVElOREVYOworCQlpZiAoY2hlY2tfdG1kc19jaGlwKFZUMTYzMl9ERVZJQ0VfSURfUkVHLCBWVDE2MzJfREVWSUNFX0lEKQorCQkgICAgIT0gRkFJTCkgeworCQkJdG1kc19yZWdpc3Rlcl93cml0ZSgweDA4LCAweDNiKTsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuIFZUMTYzMiBUTURTICEgXG4iKTsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuICUyZCIsCisJCQkJICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQkJCSAgdG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUpOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gJTJkIiwKKwkJCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCQkJICB0bWRzX2NoaXBfaW5mby5pMmNfcG9ydCk7CisJCQlyZXR1cm4gT0s7CisJCX0KKwl9CisKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9uYW1lID0gSU5URUdSQVRFRF9UTURTOworCisJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NYNzAwKSAmJgorCSAgICAoKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0ID09IEhXX0xBWU9VVF9EVklfT05MWSkgfHwKKwkgICAgICh2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCA9PSBIV19MQVlPVVRfTENEX0RWSSkpKSB7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuIEludGVncmF0ZWQgVE1EUyAhIFxuIik7CisJCXJldHVybiBPSzsKKwl9CisKKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJdmlhZmJfd3JpdGVfcmVnKFNSMkEsIFZJQVNSLCBzcjJhKTsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJY2FzZSBVTklDSFJPTUVfUDRNODkwOgorCQl2aWFmYl93cml0ZV9yZWcoU1IyQSwgVklBU1IsIHNyMmEpOworCQl2aWFmYl93cml0ZV9yZWcoU1IxRSwgVklBU1IsIHNyMWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXZpYWZiX3dyaXRlX3JlZyhTUjFFLCBWSUFTUiwgc3IxZSk7CisJCXZpYWZiX3dyaXRlX3JlZyhTUjNFLCBWSUFTUiwgc3IzZSk7CisJCWJyZWFrOworCX0KKworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCXRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9uYW1lID0gTk9OX1RNRFNfVFJBTlNNSVRURVI7CisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby4KKwkJdG1kc19jaGlwX3NsYXZlX2FkZHIgPSBWVDE2MzJfVE1EU19JMkNfQUREUjsKKwlyZXR1cm4gRkFJTDsKK30KKworc3RhdGljIHZvaWQgdG1kc19yZWdpc3Rlcl93cml0ZShpbnQgaW5kZXgsIHU4IGRhdGEpCit7CisJdmlhcGFyaW5mby0+aTJjX3N0dWZmLmkyY19wb3J0ID0KKwkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby5pMmNfcG9ydDsKKworCXZpYWZiX2kyY193cml0ZWJ5dGUodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby4KKwkJdG1kc19jaGlwX3NsYXZlX2FkZHIsIGluZGV4LAorCQkgICAgIGRhdGEpOworfQorCitzdGF0aWMgaW50IHRtZHNfcmVnaXN0ZXJfcmVhZChpbnQgaW5kZXgpCit7CisJdTggZGF0YTsKKworCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9CisJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uaTJjX3BvcnQ7CisJdmlhZmJfaTJjX3JlYWRieXRlKCh1OCkgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkgICAgdG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHIsCisJCQkodTgpIGluZGV4LCAmZGF0YSk7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgdG1kc19yZWdpc3Rlcl9yZWFkX2J5dGVzKGludCBpbmRleCwgdTggKmJ1ZmYsIGludCBidWZmX2xlbikKK3sKKwl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPQorCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLmkyY19wb3J0OworCXZpYWZiX2kyY19yZWFkYnl0ZXMoKHU4KSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLgorCQkJIHRtZHNfY2hpcF9zbGF2ZV9hZGRyLCAodTgpIGluZGV4LCBidWZmLCBidWZmX2xlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVkdWNlX2JsYW5raW5nX21vZGUoaW50IG1vZGVfaW5kZXgsCisJaW50IHJlZnJlc2hfcmF0ZSkKK3sKKwlpZiAocmVmcmVzaF9yYXRlICE9IDYwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzd2l0Y2ggKG1vZGVfaW5kZXgpIHsKKwkJLyogRm9sbG93aW5nIG1vZGVzIGhhdmUgcmVkdWNlIGJsYW5raW5nIG1vZGUuICovCisJY2FzZSBWSUFfUkVTXzEzNjBYNzY4OgorCWNhc2UgVklBX1JFU18xNDAwWDEwNTA6CisJY2FzZSBWSUFfUkVTXzE0NDBYOTAwOgorCWNhc2UgVklBX1JFU18xNjAwWDkwMDoKKwljYXNlIFZJQV9SRVNfMTY4MFgxMDUwOgorCWNhc2UgVklBX1JFU18xOTIwWDEwODA6CisJY2FzZSBWSUFfUkVTXzE5MjBYMTIwMDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlERUJVR19NU0coS0VSTl9JTkZPCisJCQkgICJUaGlzIGR2aSBtb2RlICVkIGhhdmUgbm8gcmVkdWNlIGJsYW5raW5nIG1vZGUhXG4iLAorCQkJICBtb2RlX2luZGV4KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKiBEVkkgU2V0IE1vZGUgKi8KK3ZvaWQgdmlhZmJfZHZpX3NldF9tb2RlKGludCB2aWRlb19pbmRleCwgaW50IG1vZGVfYnBwLCBpbnQgc2V0X2lnYSkKK3sKKwlzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpZGVvTW9kZSA9IE5VTEw7CisJc3RydWN0IGNydF9tb2RlX3RhYmxlICpwRHZpVGltaW5nOworCXVuc2lnbmVkIGxvbmcgZGVzaXJlUGl4ZWxDbG9jaywgbWF4UGl4ZWxDbG9jazsKKwlpbnQgc3RhdHVzID0gMDsKKwl2aWRlb01vZGUgPSB2aWFmYl9nZXRfbW9kZXRibF9wb2ludGVyKHZpZGVvX2luZGV4KTsKKwlwRHZpVGltaW5nID0gdmlkZW9Nb2RlLT5jcnRjOworCWRlc2lyZVBpeGVsQ2xvY2sgPSBwRHZpVGltaW5nLT5jbGsgLyAxMDAwMDAwOworCW1heFBpeGVsQ2xvY2sgPSAodW5zaWduZWQgbG9uZyl2aWFwYXJpbmZvLT4KKwkJdG1kc19zZXR0aW5nX2luZm8tPm1heF9waXhlbF9jbG9jazsKKworCURFQlVHX01TRyhLRVJOX0lORk8gIlxuRFZJX3NldF9tb2RlISFcbiIpOworCisJaWYgKChtYXhQaXhlbENsb2NrICE9IDApICYmIChkZXNpcmVQaXhlbENsb2NrID4gbWF4UGl4ZWxDbG9jaykpIHsKKwkJLypDaGVjayBpZiByZWR1Y2UtYmxhbmtpbmcgbW9kZSBpcyBleGlzdCAqLworCQlzdGF0dXMgPQorCQkgICAgY2hlY2tfcmVkdWNlX2JsYW5raW5nX21vZGUodmlkZW9faW5kZXgsCisJCQkJCSAgICAgICBwRHZpVGltaW5nLT5yZWZyZXNoX3JhdGUpOworCQlpZiAoc3RhdHVzKSB7CisJCQl2aWRlb19pbmRleCArPSAxMDA7CS8qVXNlIHJlZHVjZS1ibGFua2luZyBtb2RlICovCisJCQl2aWRlb01vZGUgPSB2aWFmYl9nZXRfbW9kZXRibF9wb2ludGVyKHZpZGVvX2luZGV4KTsKKwkJCXBEdmlUaW1pbmcgPSB2aWRlb01vZGUtPmNydGM7CisJCQlERUJVR19NU0coS0VSTl9JTkZPCisJCQkJICAiRFZJIHVzZSByZWR1Y2UgYmxhbmtpbmcgbW9kZSAlZCEhXG4iLAorCQkJCSAgdmlkZW9faW5kZXgpOworCQl9CisJfQorCXZpYWZiX2ZpbGxfY3J0Y190aW1pbmcocER2aVRpbWluZywgdmlkZW9faW5kZXgsIG1vZGVfYnBwIC8gOCwgc2V0X2lnYSk7CisJdmlhZmJfc2V0X291dHB1dF9wYXRoKERFVklDRV9EVkksIHNldF9pZ2EsCisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLm91dHB1dF9pbnRlcmZhY2UpOworfQorCisvKiBTZW5zZSBEVkkgQ29ubmVjdG9yICovCitpbnQgdmlhZmJfZHZpX3NlbnNlKHZvaWQpCit7CisJdTggUmVnU1IxRSA9IDAsIFJlZ1NSM0UgPSAwLCBSZWdDUjZCID0gMCwgUmVnQ1I5MSA9IDAsCisJCVJlZ0NSOTMgPSAwLCBSZWdDUjlCID0gMCwgZGF0YTsKKwlpbnQgcmV0ID0gZmFsc2U7CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9kdmlfc2Vuc2UhIVxuIik7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpIHsKKwkJLyogREkxIFBhZCBvbiAqLworCQlSZWdTUjFFID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMUUpOworCQl2aWFmYl93cml0ZV9yZWcoU1IxRSwgVklBU1IsIFJlZ1NSMUUgfCAweDMwKTsKKworCQkvKiBDUjZCWzBdVkNLIElucHV0IFNlbGVjdGlvbjogMSA9IEV4dGVybmFsIGNsb2NrLiAqLworCQlSZWdDUjZCID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSNkIpOworCQl2aWFmYl93cml0ZV9yZWcoQ1I2QiwgVklBQ1IsIFJlZ0NSNkIgfCAweDA4KTsKKworCQkvKiBDUjkxWzRdIFZERCBPbiBbM10gRGF0YSBPbiBbMl0gVkVFIE9uIFsxXSBCYWNrIExpZ2h0IE9mZgorCQkgICBbMF0gU29mdHdhcmUgQ29udHJvbCBQb3dlciBTZXF1ZW5jZSAqLworCQlSZWdDUjkxID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOTEpOworCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsIDB4MUQpOworCisJCS8qIENSOTNbN10gREkxIERhdGEgU291cmNlIFNlbGVjdGlvbjogMSA9IERTUDIuCisJCSAgIENSOTNbNV0gREkxIENsb2NrIFNvdXJjZTogMSA9IGludGVybmFsLgorCQkgICBDUjkzWzRdIERJMSBDbG9jayBQb2xhcml0eS4KKwkJICAgQ1I5M1szOjFdIERJMSBDbG9jayBBZGp1c3QuIENSOTNbMF0gREkxIGVuYWJsZSAqLworCQlSZWdDUjkzID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOTMpOworCQl2aWFmYl93cml0ZV9yZWcoQ1I5MywgVklBQ1IsIDB4MDEpOworCX0gZWxzZSB7CisJCS8qIERWUDAvRFZQMSBQYWQgb24gKi8KKwkJUmVnU1IxRSA9IHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjFFKTsKKwkJdmlhZmJfd3JpdGVfcmVnKFNSMUUsIFZJQVNSLCBSZWdTUjFFIHwgMHhGMCk7CisKKwkJLyogU1IzRVsxXU11bHRpLWZ1bmN0aW9uIHNlbGVjdGlvbjoKKwkJICAgMCA9IEVtdWxhdGUgSTJDIGFuZCBEREMgYnVzIGJ5IEdQSU8yLzMvNC4gKi8KKwkJUmVnU1IzRSA9IHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjNFKTsKKwkJdmlhZmJfd3JpdGVfcmVnKFNSM0UsIFZJQVNSLCBSZWdTUjNFICYgKH4weDIwKSk7CisKKwkJLyogQ1I5MVs0XSBWREQgT24gWzNdIERhdGEgT24gWzJdIFZFRSBPbiBbMV0gQmFjayBMaWdodCBPZmYKKwkJICAgWzBdIFNvZnR3YXJlIENvbnRyb2wgUG93ZXIgU2VxdWVuY2UgKi8KKwkJUmVnQ1I5MSA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjkxKTsKKwkJdmlhZmJfd3JpdGVfcmVnKENSOTEsIFZJQUNSLCAweDFEKTsKKworCQkvKkNSOUJbNF0gRFZQMSBEYXRhIFNvdXJjZSBTZWxlY3Rpb246IDEgPSBGcm9tIHNlY29uZGFyeQorCQlkaXNwbGF5LkNSOUJbMjowXSBEVlAxIENsb2NrIEFkanVzdCAqLworCQlSZWdDUjlCID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOUIpOworCQl2aWFmYl93cml0ZV9yZWcoQ1I5QiwgVklBQ1IsIDB4MDEpOworCX0KKworCWRhdGEgPSAodTgpIHRtZHNfcmVnaXN0ZXJfcmVhZCgweDA5KTsKKwlpZiAoZGF0YSAmIDB4MDQpCisJCXJldCA9IHRydWU7CisKKwlpZiAocmV0ID09IGZhbHNlKSB7CisJCWlmICh2aWFmYl9kdmlfcXVlcnlfRURJRCgpKQorCQkJcmV0ID0gdHJ1ZTsKKwl9CisKKwkvKiBSZXN0b3JlIHN0YXR1cyAqLworCXZpYWZiX3dyaXRlX3JlZyhTUjFFLCBWSUFTUiwgUmVnU1IxRSk7CisJdmlhZmJfd3JpdGVfcmVnKENSOTEsIFZJQUNSLCBSZWdDUjkxKTsKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpIHsKKwkJdmlhZmJfd3JpdGVfcmVnKENSNkIsIFZJQUNSLCBSZWdDUjZCKTsKKwkJdmlhZmJfd3JpdGVfcmVnKENSOTMsIFZJQUNSLCBSZWdDUjkzKTsKKwl9IGVsc2UgeworCQl2aWFmYl93cml0ZV9yZWcoU1IzRSwgVklBU1IsIFJlZ1NSM0UpOworCQl2aWFmYl93cml0ZV9yZWcoQ1I5QiwgVklBQ1IsIFJlZ0NSOUIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIFF1ZXJ5IEZsYXQgUGFuZWwncyBFRElEIFRhYmxlIFZlcnNpb24gVGhyb3VnaCBEVkkgQ29ubmVjdG9yICovCitzdGF0aWMgaW50IHZpYWZiX2R2aV9xdWVyeV9FRElEKHZvaWQpCit7CisJdTggZGF0YTAsIGRhdGExOworCWludCByZXN0b3JlOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfZHZpX3F1ZXJ5X0VESUQhIVxuIik7CisKKwlyZXN0b3JlID0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkcjsKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9zbGF2ZV9hZGRyID0gMHhBMDsKKworCWRhdGEwID0gKHU4KSB0bWRzX3JlZ2lzdGVyX3JlYWQoMHgwMCk7CisJZGF0YTEgPSAodTgpIHRtZHNfcmVnaXN0ZXJfcmVhZCgweDAxKTsKKwlpZiAoKGRhdGEwID09IDApICYmIChkYXRhMSA9PSAweEZGKSkgeworCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQkJdG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHIgPSByZXN0b3JlOworCQlyZXR1cm4gRURJRF9WRVJTSU9OXzE7CS8qIEZvdW5kIEVESUQxIFRhYmxlICovCisJfQorCisJZGF0YTAgPSAodTgpIHRtZHNfcmVnaXN0ZXJfcmVhZCgweDAwKTsKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9zbGF2ZV9hZGRyID0gcmVzdG9yZTsKKwlpZiAoZGF0YTAgPT0gMHgyMCkKKwkJcmV0dXJuIEVESURfVkVSU0lPTl8yOwkvKiBGb3VuZCBFRElEMiBUYWJsZSAqLworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCisvKgorICoKKyAqIGludCBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MSh2b2lkKQorICoKKyAqICAgICAtIEdldCBQYW5lbCBTaXplIFVzaW5nIEVESUQxIFRhYmxlCisgKgorICogUmV0dXJuIFR5cGU6ICAgIGludAorICoKKyAqLworc3RhdGljIGludCBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MSh2b2lkKQoreworCWludCBpLCBtYXhfaCA9IDAsIG1heF92ID0gMCwgdG1wLCByZXN0b3JlOworCXVuc2lnbmVkIGNoYXIgckRhdGE7CisJdW5zaWduZWQgY2hhciBFRElEX0RBVEFbMThdOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjEgXG4iKTsKKworCXJlc3RvcmUgPSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9zbGF2ZV9hZGRyOworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHIgPSAweEEwOworCisJckRhdGEgPSB0bWRzX3JlZ2lzdGVyX3JlYWQoMHgyMyk7CisJaWYgKHJEYXRhICYgMHgzQykKKwkJbWF4X2ggPSA2NDA7CisJaWYgKHJEYXRhICYgMHhDMCkKKwkJbWF4X2ggPSA3MjA7CisJaWYgKHJEYXRhICYgMHgwMykKKwkJbWF4X2ggPSA4MDA7CisKKwlyRGF0YSA9IHRtZHNfcmVnaXN0ZXJfcmVhZCgweDI0KTsKKwlpZiAockRhdGEgJiAweEMwKQorCQltYXhfaCA9IDgwMDsKKwlpZiAockRhdGEgJiAweDFFKQorCQltYXhfaCA9IDEwMjQ7CisJaWYgKHJEYXRhICYgMHgwMSkKKwkJbWF4X2ggPSAxMjgwOworCisJZm9yIChpID0gMHgyNTsgaSA8IDB4NkQ7IGkrKykgeworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAweDI2OgorCQljYXNlIDB4Mjg6CisJCWNhc2UgMHgyQToKKwkJY2FzZSAweDJDOgorCQljYXNlIDB4MkU6CisJCWNhc2UgMHgzMDoKKwkJY2FzZSAweDMyOgorCQljYXNlIDB4MzQ6CisJCQlyRGF0YSA9IHRtZHNfcmVnaXN0ZXJfcmVhZChpKTsKKwkJCWlmIChyRGF0YSA9PSAxKQorCQkJCWJyZWFrOworCQkJLyogZGF0YSA9IChkYXRhICsgMzEpICogOCAqLworCQkJdG1wID0gKHJEYXRhICsgMzEpIDw8IDM7CisJCQlpZiAodG1wID4gbWF4X2gpCisJCQkJbWF4X2ggPSB0bXA7CisJCQlicmVhazsKKworCQljYXNlIDB4MzY6CisJCWNhc2UgMHg0ODoKKwkJY2FzZSAweDVBOgorCQljYXNlIDB4NkM6CisJCQl0bWRzX3JlZ2lzdGVyX3JlYWRfYnl0ZXMoaSwgRURJRF9EQVRBLCAxMCk7CisJCQlpZiAoIShFRElEX0RBVEFbMF0gfHwgRURJRF9EQVRBWzFdKSkgeworCQkJCS8qIFRoZSBmaXJzdCB0d28gYnl0ZSBtdXN0IGJlIHplcm8uICovCisJCQkJaWYgKEVESURfREFUQVszXSA9PSAweEZEKSB7CisJCQkJCS8qIFRvIGdldCBtYXggcGl4ZWwgY2xvY2suICovCisJCQkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT4KKwkJCQkJbWF4X3BpeGVsX2Nsb2NrID0gRURJRF9EQVRBWzldICogMTA7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3dpdGNoIChtYXhfaCkgeworCWNhc2UgNjQwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU182NDBYNDgwOworCQlicmVhazsKKwljYXNlIDgwMDoKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KKwkJCVZJQV9SRVNfODAwWDYwMDsKKwkJYnJlYWs7CisJY2FzZSAxMDI0OgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU18xMDI0WDc2ODsKKwkJYnJlYWs7CisJY2FzZSAxMjgwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU18xMjgwWDEwMjQ7CisJCWJyZWFrOworCWNhc2UgMTQwMDoKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KKwkJCVZJQV9SRVNfMTQwMFgxMDUwOworCQlicmVhazsKKwljYXNlIDE0NDA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzE0NDBYMTA1MDsKKwkJYnJlYWs7CisJY2FzZSAxNjAwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU18xNjAwWDEyMDA7CisJCWJyZWFrOworCWNhc2UgMTkyMDoKKwkJaWYgKG1heF92ID09IDEyMDApIHsKKwkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQkJVklBX1JFU18xOTIwWDEyMDA7CisJCX0gZWxzZSB7CisJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJCVZJQV9SRVNfMTkyMFgxMDgwOworCQl9CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KKwkJCVZJQV9SRVNfMTAyNFg3Njg7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIlVua25vdyBwYW5lbCBzaXplIG1heCByZXNvbHV0aW9uID0gJWQgIVwKKwkJCQkJIHNldCBkZWZhdWx0IHBhbmVsIHNpemUuXG4iLCBtYXhfaCk7CisJCWJyZWFrOworCX0KKworCURFQlVHX01TRyhLRVJOX0lORk8gIkRWSSBtYXggcGl4ZWxjbG9jayA9ICVkXG4iLAorCQkgIHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5tYXhfcGl4ZWxfY2xvY2spOworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHIgPSByZXN0b3JlOworCXJldHVybiB2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemU7Cit9CisKKy8qCisgKgorICogaW50IGR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YyKHZvaWQpCisgKgorICogICAgIC0gR2V0IFBhbmVsIFNpemUgVXNpbmcgRURJRDIgVGFibGUKKyAqCisgKiBSZXR1cm4gVHlwZTogICAgaW50CisgKgorICovCitzdGF0aWMgaW50IGR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YyKHZvaWQpCit7CisJaW50IEhTaXplID0gMCwgcmVzdG9yZTsKKwl1bnNpZ25lZCBjaGFyIFJfQnVmZmVyWzJdOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIgXG4iKTsKKworCXJlc3RvcmUgPSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9zbGF2ZV9hZGRyOworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHIgPSAweEEyOworCisJLyogSG9yaXpvbnRhbDogMHg3NiwgMHg3NyAqLworCXRtZHNfcmVnaXN0ZXJfcmVhZF9ieXRlcygweDc2LCBSX0J1ZmZlciwgMik7CisJSFNpemUgPSBSX0J1ZmZlclswXTsKKwlIU2l6ZSArPSBSX0J1ZmZlclsxXSA8PCA4OworCisJc3dpdGNoIChIU2l6ZSkgeworCWNhc2UgNjQwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU182NDBYNDgwOworCQlicmVhazsKKwljYXNlIDgwMDoKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KKwkJCVZJQV9SRVNfODAwWDYwMDsKKwkJYnJlYWs7CisJY2FzZSAxMDI0OgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU18xMDI0WDc2ODsKKwkJYnJlYWs7CisJY2FzZSAxMjgwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU18xMjgwWDEwMjQ7CisJCWJyZWFrOworCWNhc2UgMTQwMDoKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KKwkJCVZJQV9SRVNfMTQwMFgxMDUwOworCQlicmVhazsKKwljYXNlIDE0NDA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzE0NDBYMTA1MDsKKwkJYnJlYWs7CisJY2FzZSAxNjAwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU18xNjAwWDEyMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzEwMjRYNzY4OworCQlERUJVR19NU0coS0VSTl9JTkZPICJVbmtub3cgcGFuZWwgc2l6ZSBtYXggcmVzb2x1dGlvbiA9ICVkIVwKKwkJCQkJc2V0IGRlZmF1bHQgcGFuZWwgc2l6ZS5cbiIsIEhTaXplKTsKKwkJYnJlYWs7CisJfQorCisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IHJlc3RvcmU7CisJcmV0dXJuIHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZTsKK30KKworLyoKKyAqCisgKiB1bnNpZ25lZCBjaGFyIGR2aV9nZXRfcGFuZWxfaW5mbyh2b2lkKQorICoKKyAqICAgICAtIEdldCBQYW5lbCBTaXplCisgKgorICogUmV0dXJuIFR5cGU6ICAgIHVuc2lnbmVkIGNoYXIKKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgZHZpX2dldF9wYW5lbF9pbmZvKHZvaWQpCit7CisJdW5zaWduZWQgY2hhciBkdmlwYW5lbHNpemU7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiZHZpX2dldF9wYW5lbF9pbmZvISBcbiIpOworCisJdmlhZmJfZHZpX3NlbnNlKCk7CisJc3dpdGNoICh2aWFmYl9kdmlfcXVlcnlfRURJRCgpKSB7CisJY2FzZSAxOgorCQlkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MSgpOworCQlicmVhazsKKwljYXNlIDI6CisJCWR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YyKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCURFQlVHX01TRyhLRVJOX0lORk8gImR2aSBwYW5lbCBzaXplIGlzICUyZCBcbiIsCisJCSAgdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplKTsKKwlkdmlwYW5lbHNpemUgPSAodW5zaWduZWQgY2hhcikodmlhcGFyaW5mby0+CisJCXRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSk7CisJcmV0dXJuIGR2aXBhbmVsc2l6ZTsKK30KKworLyogSWYgRGlzYWJsZSBEVkksIHR1cm4gb2ZmIHBhZCAqLwordm9pZCB2aWFmYl9kdmlfZGlzYWJsZSh2b2lkKQoreworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQl0bWRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID09IElOVEVSRkFDRV9EVlAwKQorCQl2aWFmYl93cml0ZV9yZWcoU1IxRSwgVklBU1IsCisJCXZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjFFKSAmICh+MHhDMCkpOworCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCXRtZHNfY2hpcF9pbmZvLm91dHB1dF9pbnRlcmZhY2UgPT0gSU5URVJGQUNFX0RWUDEpCisJCXZpYWZiX3dyaXRlX3JlZyhTUjFFLCBWSUFTUiwKKwkJdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMUUpICYgKH4weDMwKSk7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJdG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSA9PSBJTlRFUkZBQ0VfREZQX0hJR0gpCisJCXZpYWZiX3dyaXRlX3JlZyhTUjJBLCBWSUFTUiwKKwkJdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMkEpICYgKH4weDBDKSk7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJdG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSA9PSBJTlRFUkZBQ0VfREZQX0xPVykKKwkJdmlhZmJfd3JpdGVfcmVnKFNSMkEsIFZJQVNSLAorCQl2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IyQSkgJiAofjB4MDMpKTsKKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQl0bWRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID09IElOVEVSRkFDRV9UTURTKQorCQkvKiBUdXJuIG9mZiBUTURTIHBvd2VyLiAqLworCQl2aWFmYl93cml0ZV9yZWcoQ1JEMiwgVklBQ1IsCisJCXZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUkQyKSB8IDB4MDgpOworfQorCisvKiBJZiBFbmFibGUgRFZJLCB0dXJuIG9mZiBwYWQgKi8KK3ZvaWQgdmlhZmJfZHZpX2VuYWJsZSh2b2lkKQoreworCXU4IGRhdGE7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJdG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSA9PSBJTlRFUkZBQ0VfRFZQMCkgeworCQl2aWFmYl93cml0ZV9yZWcoU1IxRSwgVklBU1IsCisJCQl2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxRSkgfCAweEMwKTsKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2KQorCQkJdG1kc19yZWdpc3Rlcl93cml0ZSgweDg4LCAweDNiKTsKKwkJZWxzZQorCQkJLypjbGVhciBDUjkxWzVdIHRvIGRpcmVjdCBvbiBkaXNwbGF5IHBlcmlvZAorCQkJICAgaW4gdGhlIHNlY29uZGFyeSBkaXBsYXkgcGF0aCAqLworCQkJdmlhZmJfd3JpdGVfcmVnKENSOTEsIFZJQUNSLAorCQkJdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOTEpICYgMHhERik7CisJfQorCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCXRtZHNfY2hpcF9pbmZvLm91dHB1dF9pbnRlcmZhY2UgPT0gSU5URVJGQUNFX0RWUDEpIHsKKwkJdmlhZmJfd3JpdGVfcmVnKFNSMUUsIFZJQVNSLAorCQkJdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMUUpIHwgMHgzMCk7CisKKwkJLypmaXggZHZpIGNhbm4ndCBiZSBlbmFibGVkIHdpdGggTUIgVlQ1NzE4QzQgLSBBbCBaaGFuZyAqLworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpIHsKKwkJCXRtZHNfcmVnaXN0ZXJfd3JpdGUoMHg4OCwgMHgzYik7CisJCX0gZWxzZSB7CisJCQkvKmNsZWFyIENSOTFbNV0gdG8gZGlyZWN0IG9uIGRpc3BsYXkgcGVyaW9kCisJCQkgIGluIHRoZSBzZWNvbmRhcnkgZGlwbGF5IHBhdGggKi8KKwkJCXZpYWZiX3dyaXRlX3JlZyhDUjkxLCBWSUFDUiwKKwkJCXZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjkxKSAmIDB4REYpOworCQl9CisKKwkJLypmaXggRFZJIGNhbm5vdCBlbmFibGUgb24gRVBJQS1NIGJvYXJkICovCisJCWlmICh2aWFmYl9wbGF0Zm9ybV9lcGlhX2R2aSA9PSAxKSB7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjkxLCBWSUFDUiwgMHgxZiwgMHgxZik7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjg4LCBWSUFDUiwgMHgwMCwgQklUNiArIEJJVDApOworCQkJaWYgKHZpYWZiX2J1c193aWR0aCA9PSAyNCkgeworCQkJCWlmICh2aWFmYl9kZXZpY2VfbGNkX2R1YWxlZGdlID09IDEpCisJCQkJCWRhdGEgPSAweDNGOworCQkJCWVsc2UKKwkJCQkJZGF0YSA9IDB4Mzc7CisJCQkJdmlhZmJfaTJjX3dyaXRlYnl0ZSh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQkJCQkgICAgIHRtZHNfY2hpcF9pbmZvLgorCQkJCQkgICAgIHRtZHNfY2hpcF9zbGF2ZV9hZGRyLAorCQkJCQkgICAgIDB4MDgsIGRhdGEpOworCQkJfQorCQl9CisJfQorCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCXRtZHNfY2hpcF9pbmZvLm91dHB1dF9pbnRlcmZhY2UgPT0gSU5URVJGQUNFX0RGUF9ISUdIKSB7CisJCXZpYWZiX3dyaXRlX3JlZyhTUjJBLCBWSUFTUiwKKwkJCXZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjJBKSB8IDB4MEMpOworCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsCisJCQl2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5MSkgJiAweERGKTsKKwl9CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJdG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSA9PSBJTlRFUkZBQ0VfREZQX0xPVykgeworCQl2aWFmYl93cml0ZV9yZWcoU1IyQSwgVklBU1IsCisJCQl2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IyQSkgfCAweDAzKTsKKwkJdmlhZmJfd3JpdGVfcmVnKENSOTEsIFZJQUNSLAorCQkJdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOTEpICYgMHhERik7CisJfQorCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQl0bWRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID09IElOVEVSRkFDRV9UTURTKSB7CisJCS8qIFR1cm4gb24gRGlzcGxheSBwZXJpb2QgaW4gdGhlIHBhbmVsIHBhdGguICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTEsIFZJQUNSLCAwLCBCSVQ3KTsKKworCQkvKiBUdXJuIG9uIFRNRFMgcG93ZXIuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAwLCBCSVQzKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5oIGIvZHJpdmVycy92aWRlby92aWEvZHZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFlYzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19EVklfSF9fCisjZGVmaW5lIF9fRFZJX0hfXworCisvKkRlZmluaXRpb24gVE1EUyBEZXZpY2UgSUQgcmVnaXN0ZXIqLworI2RlZmluZSAgICAgVlQxNjMyX0RFVklDRV9JRF9SRUcgICAgICAgIDB4MDIKKyNkZWZpbmUgICAgIFZUMTYzMl9ERVZJQ0VfSUQgICAgICAgICAgICAweDkyCisKKyNkZWZpbmUgICAgIEdFVF9EVklfU0laRV9CWV9TWVNURU1fQklPUyAgICAgMHgwMQorI2RlZmluZSAgICAgR0VUX0RWSV9TSVpFX0JZX1ZHQV9CSU9TICAgICAgICAweDAyCisjZGVmaW5lICAgICBHRVRfRFZJX1NaSUVfQllfSFdfU1RSQVBQSU5HICAgIDB4MDMKKworLyogRGVmaW5pdGlvbiBEVkkgUGFuZWwgSUQqLworLyogUmVzb2x1dGlvbjogNjQweDQ4MCwgICBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRW5hYmxlICovCisjZGVmaW5lICAgICBEVklfUEFORUxfSUQwXzY0MFg0ODAgICAgICAgMHgwMAorLyogUmVzb2x1dGlvbjogODAweDYwMCwgICBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRW5hYmxlICovCisjZGVmaW5lICAgICBEVklfUEFORUxfSUQxXzgwMHg2MDAgICAgICAgMHgwMQorLyogUmVzb2x1dGlvbjogMTAyNHg3NjgsICBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRW5hYmxlICovCisjZGVmaW5lICAgICBEVklfUEFORUxfSUQxXzEwMjR4NzY4ICAgICAgMHgwMgorLyogUmVzb2x1dGlvbjogMTI4MHg3NjgsICBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRW5hYmxlICovCisjZGVmaW5lICAgICBEVklfUEFORUxfSUQxXzEyODB4NzY4ICAgICAgMHgwMworLyogUmVzb2x1dGlvbjogMTI4MHgxMDI0LCBDaGFubmVsOiBkdWFsLCAgIERpdGhlcmluZzogRW5hYmxlICovCisjZGVmaW5lICAgICBEVklfUEFORUxfSUQxXzEyODB4MTAyNCAgICAgMHgwNAorLyogUmVzb2x1dGlvbjogMTQwMHgxMDUwLCBDaGFubmVsOiBkdWFsLCAgIERpdGhlcmluZzogRW5hYmxlICovCisjZGVmaW5lICAgICBEVklfUEFORUxfSUQxXzE0MDB4MTA1MCAgICAgMHgwNQorLyogUmVzb2x1dGlvbjogMTYwMHgxMjAwLCBDaGFubmVsOiBkdWFsLCAgIERpdGhlcmluZzogRW5hYmxlICovCisjZGVmaW5lICAgICBEVklfUEFORUxfSUQxXzE2MDB4MTIwMCAgICAgMHgwNgorCisvKiBEZWZpbmUgdGhlIHZlcnNpb24gb2YgRURJRCovCisjZGVmaW5lICAgICBFRElEX1ZFUlNJT05fMSAgICAgIDEKKyNkZWZpbmUgICAgIEVESURfVkVSU0lPTl8yICAgICAgMgorCisjZGVmaW5lICAgICBERVZfQ09OTkVDVF9EVkkgICAgIDB4MDEKKyNkZWZpbmUgICAgIERFVl9DT05ORUNUX0hETUkgICAgMHgwMgorCitzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpYWZiX2dldF9jZWFfbW9kZV90YmxfcG9pbnRlcihpbnQgSW5kZXgpOworaW50IHZpYWZiX2R2aV9zZW5zZSh2b2lkKTsKK3ZvaWQgdmlhZmJfZHZpX2Rpc2FibGUodm9pZCk7Cit2b2lkIHZpYWZiX2R2aV9lbmFibGUodm9pZCk7CitpbnQgdmlhZmJfdG1kc190cmFzbWl0dGVyX2lkZW50aWZ5KHZvaWQpOwordm9pZCB2aWFmYl9pbml0X2R2aV9zaXplKHZvaWQpOwordm9pZCB2aWFmYl9kdmlfc2V0X21vZGUoaW50IHZpZGVvX2luZGV4LCBpbnQgbW9kZV9icHAsIGludCBzZXRfaWdhKTsKKworI2VuZGlmIC8qIF9fRFZJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjhiZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmMKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpbmNsdWRlICJnbG9iYWwuaCIKK2ludCB2aWFmYl9wbGF0Zm9ybV9lcGlhX2R2aSA9IFNUQVRFX09GRjsKK2ludCB2aWFmYl9kZXZpY2VfbGNkX2R1YWxlZGdlID0gU1RBVEVfT0ZGOworaW50IHZpYWZiX2J1c193aWR0aCA9IDEyOworaW50IHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0ID0gSFdfTEFZT1VUX0xDRF9EVkk7CitpbnQgdmlhZmJfbWVtc2l6ZTsKK2ludCB2aWFmYl9EZXZpY2VTdGF0dXMgPSBDUlRfRGV2aWNlOworaW50IHZpYWZiX2hvdHBsdWc7CitpbnQgdmlhZmJfcmVmcmVzaCA9IDYwOworaW50IHZpYWZiX3JlZnJlc2gxID0gNjA7CitpbnQgdmlhZmJfbGNkX2RzcF9tZXRob2QgPSBMQ0RfRVhQQU5EU0lPTjsKK2ludCB2aWFmYl9sY2RfbW9kZSA9IExDRF9PUEVOTERJOworaW50IHZpYWZiX2JwcCA9IDMyOworaW50IHZpYWZiX2JwcDEgPSAzMjsKK2ludCB2aWFmYl9hY2NlbCA9IDE7CitpbnQgdmlhZmJfQ1JUX09OID0gMTsKK2ludCB2aWFmYl9EVklfT047CitpbnQgdmlhZmJfTENEX09OIDsKK2ludCB2aWFmYl9MQ0QyX09OOworaW50IHZpYWZiX1NBTU1fT047CitpbnQgdmlhZmJfZHVhbF9mYjsKK2ludCB2aWFmYl9ob3RwbHVnX1hyZXMgPSA2NDA7CitpbnQgdmlhZmJfaG90cGx1Z19ZcmVzID0gNDgwOworaW50IHZpYWZiX2hvdHBsdWdfYnBwID0gMzI7CitpbnQgdmlhZmJfaG90cGx1Z19yZWZyZXNoID0gNjA7Cit1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX29mZnNldDsKK2ludCB2aWFmYl9zZWNvbmRfc2l6ZTsKK2ludCB2aWFmYl9wcmltYXJ5X2RldiA9IE5vbmVfRGV2aWNlOwordm9pZCBfX2lvbWVtICp2aWFmYl9GQl9NTTsKK3Vuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeHJlcyA9IDY0MDsKK3Vuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeXJlcyA9IDQ4MDsKK3Vuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzOwordW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXM7CitpbnQgdmlhZmJfbGNkX3BhbmVsX2lkID0gTENEX1BBTkVMX0lEX01BWElNVU0gKyAxOworc3RydWN0IGZiX2N1cnNvciB2aWFjdXJzb3I7CitzdHJ1Y3QgZmJfaW5mbyAqdmlhZmJpbmZvOworc3RydWN0IGZiX2luZm8gKnZpYWZiaW5mbzE7CitzdHJ1Y3QgdmlhZmJfcGFyICp2aWFwYXJpbmZvOworc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyaW5mbzE7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5oIGIvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1MjYzYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19HTE9CQUxfSF9fCisjZGVmaW5lIF9fR0xPQkFMX0hfXworCisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNpbmNsdWRlICJkZWJ1Zy5oIgorCisjaW5jbHVkZSAiaWZhY2UuaCIKKyNpbmNsdWRlICJ2aWFmYmRldi5oIgorI2luY2x1ZGUgImNoaXAuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImFjY2VsLmgiCisjaW5jbHVkZSAic2hhcmUuaCIKKyNpbmNsdWRlICJkdmkuaCIKKyNpbmNsdWRlICJ2aWFtb2RlLmgiCisjaW5jbHVkZSAidmlhX2kyYy5oIgorI2luY2x1ZGUgImh3LmgiCisKKyNpbmNsdWRlICJsY2QuaCIKKyNpbmNsdWRlICJpb2N0bC5oIgorI2luY2x1ZGUgInZpYW1vZGUuaCIKKyNpbmNsdWRlICJ2aWFfdXRpbGl0eS5oIgorI2luY2x1ZGUgInZ0MTYzNi5oIgorI2luY2x1ZGUgInRibERQQVNldHRpbmcuaCIKKyNpbmNsdWRlICJ0YmwxNjM2LmgiCisjaW5jbHVkZSAidmlhZmJkZXYuaCIKKworLyogRXh0ZXJuYWwgc3RydWN0Ki8KKworZXh0ZXJuIGludCB2aWFmYl9wbGF0Zm9ybV9lcGlhX2R2aTsKK2V4dGVybiBpbnQgdmlhZmJfZGV2aWNlX2xjZF9kdWFsZWRnZTsKK2V4dGVybiBpbnQgdmlhZmJfYnVzX3dpZHRoOworZXh0ZXJuIGludCB2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dDsKK2V4dGVybiBzdHJ1Y3Qgb2Zmc2V0IG9mZnNldF9yZWc7CitleHRlcm4gc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyaW5mbzsKK2V4dGVybiBzdHJ1Y3QgdmlhZmJfcGFyICp2aWFwYXJpbmZvMTsKK2V4dGVybiBzdHJ1Y3QgZmJfaW5mbyAqdmlhZmJpbmZvOworZXh0ZXJuIHN0cnVjdCBmYl9pbmZvICp2aWFmYmluZm8xOworZXh0ZXJuIGludCB2aWFmYl9EZXZpY2VTdGF0dXM7CitleHRlcm4gaW50IHZpYWZiX3JlZnJlc2g7CitleHRlcm4gaW50IHZpYWZiX3JlZnJlc2gxOworZXh0ZXJuIGludCB2aWFmYl9sY2RfZHNwX21ldGhvZDsKK2V4dGVybiBpbnQgdmlhZmJfbGNkX21vZGU7CitleHRlcm4gaW50IHZpYWZiX2JwcDsKK2V4dGVybiBpbnQgdmlhZmJfYnBwMTsKKworZXh0ZXJuIGludCB2aWFmYl9DUlRfT047CitleHRlcm4gaW50IHZpYWZiX2hvdHBsdWdfWHJlczsKK2V4dGVybiBpbnQgdmlhZmJfaG90cGx1Z19ZcmVzOworZXh0ZXJuIGludCB2aWFmYl9ob3RwbHVnX2JwcDsKK2V4dGVybiBpbnQgdmlhZmJfaG90cGx1Z19yZWZyZXNoOworZXh0ZXJuIGludCB2aWFmYl9wcmltYXJ5X2RldjsKK2V4dGVybiB2b2lkIF9faW9tZW0gKnZpYWZiX0ZCX01NOworZXh0ZXJuIHN0cnVjdCBmYl9jdXJzb3IgdmlhY3Vyc29yOworCitleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF94cmVzOworZXh0ZXJuIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeXJlczsKK2V4dGVybiBpbnQgdmlhZmJfbGNkX3BhbmVsX2lkOworCisjZW5kaWYgLyogX19HTE9CQUxfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5jIGIvZHJpdmVycy92aWRlby92aWEvaHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Q1M2NlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvaHcuYwpAQCAtMCwwICsxLDI4NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkX2luZm8gcGNpaWRsaXN0W10gPSB7CisJe1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfQ0xFMjY2X0RJRCwgVU5JQ0hST01FX0NMRTI2Nn0sCisJe1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfUE04MDBfRElELCBVTklDSFJPTUVfUE04MDB9LAorCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0s0MDBfRElELCBVTklDSFJPTUVfSzQwMH0sCisJe1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfSzgwMF9ESUQsIFVOSUNIUk9NRV9LODAwfSwKKwl7UENJX1ZJQV9WRU5ET1JfSUQsIFVOSUNIUk9NRV9DTjcwMF9ESUQsIFVOSUNIUk9NRV9DTjcwMH0sCisJe1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfUDRNODkwX0RJRCwgVU5JQ0hST01FX1A0TTg5MH0sCisJe1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfSzhNODkwX0RJRCwgVU5JQ0hST01FX0s4TTg5MH0sCisJe1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfQ1g3MDBfRElELCBVTklDSFJPTUVfQ1g3MDB9LAorCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX1A0TTkwMF9ESUQsIFVOSUNIUk9NRV9QNE05MDB9LAorCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0NONzUwX0RJRCwgVU5JQ0hST01FX0NONzUwfSwKKwl7UENJX1ZJQV9WRU5ET1JfSUQsIFVOSUNIUk9NRV9WWDgwMF9ESUQsIFVOSUNIUk9NRV9WWDgwMH0sCisJezAsIDAsIDB9Cit9OworCitzdHJ1Y3Qgb2Zmc2V0IG9mZnNldF9yZWcgPSB7CisJLyogSUdBMSBPZmZzZXQgUmVnaXN0ZXIgKi8KKwl7SUdBMV9PRkZTRVRfUkVHX05VTSwge3tDUjEzLCAwLCA3fSwge0NSMzUsIDUsIDd9IH0gfSwKKwkvKiBJR0EyIE9mZnNldCBSZWdpc3RlciAqLworCXtJR0EyX09GRlNFVF9SRUdfTlVNLCB7e0NSNjYsIDAsIDd9LCB7Q1I2NywgMCwgMX0gfSB9Cit9OworCitzdGF0aWMgc3RydWN0IHBsbF9tYXAgcGxsX3ZhbHVlW10gPSB7CisJe0NMS18yNV8xNzVNLCBDTEUyNjZfUExMXzI1XzE3NU0sIEs4MDBfUExMXzI1XzE3NU0sIENYNzAwXzI1XzE3NU19LAorCXtDTEtfMjlfNTgxTSwgQ0xFMjY2X1BMTF8yOV81ODFNLCBLODAwX1BMTF8yOV81ODFNLCBDWDcwMF8yOV81ODFNfSwKKwl7Q0xLXzI2Xzg4ME0sIENMRTI2Nl9QTExfMjZfODgwTSwgSzgwMF9QTExfMjZfODgwTSwgQ1g3MDBfMjZfODgwTX0sCisJe0NMS18zMV80OTBNLCBDTEUyNjZfUExMXzMxXzQ5ME0sIEs4MDBfUExMXzMxXzQ5ME0sIENYNzAwXzMxXzQ5ME19LAorCXtDTEtfMzFfNTAwTSwgQ0xFMjY2X1BMTF8zMV81MDBNLCBLODAwX1BMTF8zMV81MDBNLCBDWDcwMF8zMV81MDBNfSwKKwl7Q0xLXzMxXzcyOE0sIENMRTI2Nl9QTExfMzFfNzI4TSwgSzgwMF9QTExfMzFfNzI4TSwgQ1g3MDBfMzFfNzI4TX0sCisJe0NMS18zMl82NjhNLCBDTEUyNjZfUExMXzMyXzY2OE0sIEs4MDBfUExMXzMyXzY2OE0sIENYNzAwXzMyXzY2OE19LAorCXtDTEtfMzZfMDAwTSwgQ0xFMjY2X1BMTF8zNl8wMDBNLCBLODAwX1BMTF8zNl8wMDBNLCBDWDcwMF8zNl8wMDBNfSwKKwl7Q0xLXzQwXzAwME0sIENMRTI2Nl9QTExfNDBfMDAwTSwgSzgwMF9QTExfNDBfMDAwTSwgQ1g3MDBfNDBfMDAwTX0sCisJe0NMS180MV8yOTFNLCBDTEUyNjZfUExMXzQxXzI5MU0sIEs4MDBfUExMXzQxXzI5MU0sIENYNzAwXzQxXzI5MU19LAorCXtDTEtfNDNfMTYzTSwgQ0xFMjY2X1BMTF80M18xNjNNLCBLODAwX1BMTF80M18xNjNNLCBDWDcwMF80M18xNjNNfSwKKwl7Q0xLXzQ1XzI1ME0sIENMRTI2Nl9QTExfNDVfMjUwTSwgSzgwMF9QTExfNDVfMjUwTSwgQ1g3MDBfNDVfMjUwTX0sCisJe0NMS180Nl8wMDBNLCBDTEUyNjZfUExMXzQ2XzAwME0sIEs4MDBfUExMXzQ2XzAwME0sIENYNzAwXzQ2XzAwME19LAorCXtDTEtfNDZfOTk2TSwgQ0xFMjY2X1BMTF80Nl85OTZNLCBLODAwX1BMTF80Nl85OTZNLCBDWDcwMF80Nl85OTZNfSwKKwl7Q0xLXzQ4XzAwME0sIENMRTI2Nl9QTExfNDhfMDAwTSwgSzgwMF9QTExfNDhfMDAwTSwgQ1g3MDBfNDhfMDAwTX0sCisJe0NMS180OF84NzVNLCBDTEUyNjZfUExMXzQ4Xzg3NU0sIEs4MDBfUExMXzQ4Xzg3NU0sIENYNzAwXzQ4Xzg3NU19LAorCXtDTEtfNDlfNTAwTSwgQ0xFMjY2X1BMTF80OV81MDBNLCBLODAwX1BMTF80OV81MDBNLCBDWDcwMF80OV81MDBNfSwKKwl7Q0xLXzUyXzQwNk0sIENMRTI2Nl9QTExfNTJfNDA2TSwgSzgwMF9QTExfNTJfNDA2TSwgQ1g3MDBfNTJfNDA2TX0sCisJe0NMS181Ml85NzdNLCBDTEUyNjZfUExMXzUyXzk3N00sIEs4MDBfUExMXzUyXzk3N00sIENYNzAwXzUyXzk3N019LAorCXtDTEtfNTZfMjUwTSwgQ0xFMjY2X1BMTF81Nl8yNTBNLCBLODAwX1BMTF81Nl8yNTBNLCBDWDcwMF81Nl8yNTBNfSwKKwl7Q0xLXzYwXzQ2Nk0sIENMRTI2Nl9QTExfNjBfNDY2TSwgSzgwMF9QTExfNjBfNDY2TSwgQ1g3MDBfNjBfNDY2TX0sCisJe0NMS182MV81MDBNLCBDTEUyNjZfUExMXzYxXzUwME0sIEs4MDBfUExMXzYxXzUwME0sIENYNzAwXzYxXzUwME19LAorCXtDTEtfNjVfMDAwTSwgQ0xFMjY2X1BMTF82NV8wMDBNLCBLODAwX1BMTF82NV8wMDBNLCBDWDcwMF82NV8wMDBNfSwKKwl7Q0xLXzY1XzE3OE0sIENMRTI2Nl9QTExfNjVfMTc4TSwgSzgwMF9QTExfNjVfMTc4TSwgQ1g3MDBfNjVfMTc4TX0sCisJe0NMS182Nl83NTBNLCBDTEUyNjZfUExMXzY2Xzc1ME0sIEs4MDBfUExMXzY2Xzc1ME0sIENYNzAwXzY2Xzc1ME19LAorCXtDTEtfNjhfMTc5TSwgQ0xFMjY2X1BMTF82OF8xNzlNLCBLODAwX1BMTF82OF8xNzlNLCBDWDcwMF82OF8xNzlNfSwKKwl7Q0xLXzY5XzkyNE0sIENMRTI2Nl9QTExfNjlfOTI0TSwgSzgwMF9QTExfNjlfOTI0TSwgQ1g3MDBfNjlfOTI0TX0sCisJe0NMS183MF8xNTlNLCBDTEUyNjZfUExMXzcwXzE1OU0sIEs4MDBfUExMXzcwXzE1OU0sIENYNzAwXzcwXzE1OU19LAorCXtDTEtfNzJfMDAwTSwgQ0xFMjY2X1BMTF83Ml8wMDBNLCBLODAwX1BMTF83Ml8wMDBNLCBDWDcwMF83Ml8wMDBNfSwKKwl7Q0xLXzc4Xzc1ME0sIENMRTI2Nl9QTExfNzhfNzUwTSwgSzgwMF9QTExfNzhfNzUwTSwgQ1g3MDBfNzhfNzUwTX0sCisJe0NMS184MF8xMzZNLCBDTEUyNjZfUExMXzgwXzEzNk0sIEs4MDBfUExMXzgwXzEzNk0sIENYNzAwXzgwXzEzNk19LAorCXtDTEtfODNfMzc1TSwgQ0xFMjY2X1BMTF84M18zNzVNLCBLODAwX1BMTF84M18zNzVNLCBDWDcwMF84M18zNzVNfSwKKwl7Q0xLXzgzXzk1ME0sIENMRTI2Nl9QTExfODNfOTUwTSwgSzgwMF9QTExfODNfOTUwTSwgQ1g3MDBfODNfOTUwTX0sCisJe0NMS184NF83NTBNLCBDTEUyNjZfUExMXzg0Xzc1ME0sIEs4MDBfUExMXzg0Xzc1ME0sIENYNzAwXzg0Xzc1ME19LAorCXtDTEtfODVfODYwTSwgQ0xFMjY2X1BMTF84NV84NjBNLCBLODAwX1BMTF84NV84NjBNLCBDWDcwMF84NV84NjBNfSwKKwl7Q0xLXzg4Xzc1ME0sIENMRTI2Nl9QTExfODhfNzUwTSwgSzgwMF9QTExfODhfNzUwTSwgQ1g3MDBfODhfNzUwTX0sCisJe0NMS185NF81MDBNLCBDTEUyNjZfUExMXzk0XzUwME0sIEs4MDBfUExMXzk0XzUwME0sIENYNzAwXzk0XzUwME19LAorCXtDTEtfOTdfNzUwTSwgQ0xFMjY2X1BMTF85N183NTBNLCBLODAwX1BMTF85N183NTBNLCBDWDcwMF85N183NTBNfSwKKwl7Q0xLXzEwMV8wMDBNLCBDTEUyNjZfUExMXzEwMV8wMDBNLCBLODAwX1BMTF8xMDFfMDAwTSwKKwkgQ1g3MDBfMTAxXzAwME19LAorCXtDTEtfMTA2XzUwME0sIENMRTI2Nl9QTExfMTA2XzUwME0sIEs4MDBfUExMXzEwNl81MDBNLAorCSBDWDcwMF8xMDZfNTAwTX0sCisJe0NMS18xMDhfMDAwTSwgQ0xFMjY2X1BMTF8xMDhfMDAwTSwgSzgwMF9QTExfMTA4XzAwME0sCisJIENYNzAwXzEwOF8wMDBNfSwKKwl7Q0xLXzExM18zMDlNLCBDTEUyNjZfUExMXzExM18zMDlNLCBLODAwX1BMTF8xMTNfMzA5TSwKKwkgQ1g3MDBfMTEzXzMwOU19LAorCXtDTEtfMTE4Xzg0ME0sIENMRTI2Nl9QTExfMTE4Xzg0ME0sIEs4MDBfUExMXzExOF84NDBNLAorCSBDWDcwMF8xMThfODQwTX0sCisJe0NMS18xMTlfMDAwTSwgQ0xFMjY2X1BMTF8xMTlfMDAwTSwgSzgwMF9QTExfMTE5XzAwME0sCisJIENYNzAwXzExOV8wMDBNfSwKKwl7Q0xLXzEyMV83NTBNLCBDTEUyNjZfUExMXzEyMV83NTBNLCBLODAwX1BMTF8xMjFfNzUwTSwKKwkgQ1g3MDBfMTIxXzc1ME19LAorCXtDTEtfMTI1XzEwNE0sIENMRTI2Nl9QTExfMTI1XzEwNE0sIEs4MDBfUExMXzEyNV8xMDRNLAorCSBDWDcwMF8xMjVfMTA0TX0sCisJe0NMS18xMzNfMzA4TSwgQ0xFMjY2X1BMTF8xMzNfMzA4TSwgSzgwMF9QTExfMTMzXzMwOE0sCisJIENYNzAwXzEzM18zMDhNfSwKKwl7Q0xLXzEzNV8wMDBNLCBDTEUyNjZfUExMXzEzNV8wMDBNLCBLODAwX1BMTF8xMzVfMDAwTSwKKwkgQ1g3MDBfMTM1XzAwME19LAorCXtDTEtfMTM2XzcwME0sIENMRTI2Nl9QTExfMTM2XzcwME0sIEs4MDBfUExMXzEzNl83MDBNLAorCSBDWDcwMF8xMzZfNzAwTX0sCisJe0NMS18xMzhfNDAwTSwgQ0xFMjY2X1BMTF8xMzhfNDAwTSwgSzgwMF9QTExfMTM4XzQwME0sCisJIENYNzAwXzEzOF80MDBNfSwKKwl7Q0xLXzE0Nl83NjBNLCBDTEUyNjZfUExMXzE0Nl83NjBNLCBLODAwX1BMTF8xNDZfNzYwTSwKKwkgQ1g3MDBfMTQ2Xzc2ME19LAorCXtDTEtfMTUzXzkyME0sIENMRTI2Nl9QTExfMTUzXzkyME0sIEs4MDBfUExMXzE1M185MjBNLAorCSBDWDcwMF8xNTNfOTIwTX0sCisJe0NMS18xNTZfMDAwTSwgQ0xFMjY2X1BMTF8xNTZfMDAwTSwgSzgwMF9QTExfMTU2XzAwME0sCisJIENYNzAwXzE1Nl8wMDBNfSwKKwl7Q0xLXzE1N181MDBNLCBDTEUyNjZfUExMXzE1N181MDBNLCBLODAwX1BMTF8xNTdfNTAwTSwKKwkgQ1g3MDBfMTU3XzUwME19LAorCXtDTEtfMTYyXzAwME0sIENMRTI2Nl9QTExfMTYyXzAwME0sIEs4MDBfUExMXzE2Ml8wMDBNLAorCSBDWDcwMF8xNjJfMDAwTX0sCisJe0NMS18xODdfMDAwTSwgQ0xFMjY2X1BMTF8xODdfMDAwTSwgSzgwMF9QTExfMTg3XzAwME0sCisJIENYNzAwXzE4N18wMDBNfSwKKwl7Q0xLXzE5M18yOTVNLCBDTEUyNjZfUExMXzE5M18yOTVNLCBLODAwX1BMTF8xOTNfMjk1TSwKKwkgQ1g3MDBfMTkzXzI5NU19LAorCXtDTEtfMjAyXzUwME0sIENMRTI2Nl9QTExfMjAyXzUwME0sIEs4MDBfUExMXzIwMl81MDBNLAorCSBDWDcwMF8yMDJfNTAwTX0sCisJe0NMS18yMDRfMDAwTSwgQ0xFMjY2X1BMTF8yMDRfMDAwTSwgSzgwMF9QTExfMjA0XzAwME0sCisJIENYNzAwXzIwNF8wMDBNfSwKKwl7Q0xLXzIxOF81MDBNLCBDTEUyNjZfUExMXzIxOF81MDBNLCBLODAwX1BMTF8yMThfNTAwTSwKKwkgQ1g3MDBfMjE4XzUwME19LAorCXtDTEtfMjM0XzAwME0sIENMRTI2Nl9QTExfMjM0XzAwME0sIEs4MDBfUExMXzIzNF8wMDBNLAorCSBDWDcwMF8yMzRfMDAwTX0sCisJe0NMS18yNjdfMjUwTSwgQ0xFMjY2X1BMTF8yNjdfMjUwTSwgSzgwMF9QTExfMjY3XzI1ME0sCisJIENYNzAwXzI2N18yNTBNfSwKKwl7Q0xLXzI5N181MDBNLCBDTEUyNjZfUExMXzI5N181MDBNLCBLODAwX1BMTF8yOTdfNTAwTSwKKwkgQ1g3MDBfMjk3XzUwME19LAorCXtDTEtfNzRfNDgxTSwgQ0xFMjY2X1BMTF83NF80ODFNLCBLODAwX1BMTF83NF80ODFNLCBDWDcwMF83NF80ODFNfSwKKwl7Q0xLXzE3Ml83OThNLCBDTEUyNjZfUExMXzE3Ml83OThNLCBLODAwX1BMTF8xNzJfNzk4TSwKKwkgQ1g3MDBfMTcyXzc5OE19LAorCXtDTEtfMTIyXzYxNE0sIENMRTI2Nl9QTExfMTIyXzYxNE0sIEs4MDBfUExMXzEyMl82MTRNLAorCSBDWDcwMF8xMjJfNjE0TX0sCisJe0NMS183NF8yNzBNLCBDTEUyNjZfUExMXzc0XzI3ME0sIEs4MDBfUExMXzc0XzI3ME0sIENYNzAwXzc0XzI3ME19LAorCXtDTEtfMTQ4XzUwME0sIENMRTI2Nl9QTExfMTQ4XzUwME0sIEs4MDBfUExMXzE0OF81MDBNLAorCSBDWDcwMF8xNDhfNTAwTX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlmb19kZXB0aF9zZWxlY3QgZGlzcGxheV9maWZvX2RlcHRoX3JlZyA9IHsKKwkvKiBJR0ExIEZJRk8gRGVwdGhfU2VsZWN0ICovCisJe0lHQTFfRklGT19ERVBUSF9TRUxFQ1RfUkVHX05VTSwge3tTUjE3LCAwLCA3fSB9IH0sCisJLyogSUdBMiBGSUZPIERlcHRoX1NlbGVjdCAqLworCXtJR0EyX0ZJRk9fREVQVEhfU0VMRUNUX1JFR19OVU0sCisJIHt7Q1I2OCwgNCwgN30sIHtDUjk0LCA3LCA3fSwge0NSOTUsIDcsIDd9IH0gfQorfTsKKworc3RhdGljIHN0cnVjdCBmaWZvX3RocmVzaG9sZF9zZWxlY3QgZmlmb190aHJlc2hvbGRfc2VsZWN0X3JlZyA9IHsKKwkvKiBJR0ExIEZJRk8gVGhyZXNob2xkIFNlbGVjdCAqLworCXtJR0ExX0ZJRk9fVEhSRVNIT0xEX1JFR19OVU0sIHt7U1IxNiwgMCwgNX0sIHtTUjE2LCA3LCA3fSB9IH0sCisJLyogSUdBMiBGSUZPIFRocmVzaG9sZCBTZWxlY3QgKi8KKwl7SUdBMl9GSUZPX1RIUkVTSE9MRF9SRUdfTlVNLCB7e0NSNjgsIDAsIDN9LCB7Q1I5NSwgNCwgNn0gfSB9Cit9OworCitzdGF0aWMgc3RydWN0IGZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0IGZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0X3JlZyA9IHsKKwkvKiBJR0ExIEZJRk8gSGlnaCBUaHJlc2hvbGQgU2VsZWN0ICovCisJe0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRF9SRUdfTlVNLCB7e1NSMTgsIDAsIDV9LCB7U1IxOCwgNywgN30gfSB9LAorCS8qIElHQTIgRklGTyBIaWdoIFRocmVzaG9sZCBTZWxlY3QgKi8KKwl7SUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEX1JFR19OVU0sIHt7Q1I5MiwgMCwgM30sIHtDUjk1LCAwLCAyfSB9IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtIGRpc3BsYXlfcXVldWVfZXhwaXJlX251bV9yZWcgPSB7CisJLyogSUdBMSBEaXNwbGF5IFF1ZXVlIEV4cGlyZSBOdW0gKi8KKwl7SUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU1fUkVHX05VTSwge3tTUjIyLCAwLCA0fSB9IH0sCisJLyogSUdBMiBEaXNwbGF5IFF1ZXVlIEV4cGlyZSBOdW0gKi8KKwl7SUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU1fUkVHX05VTSwge3tDUjk0LCAwLCA2fSB9IH0KK307CisKKy8qIERlZmluaXRpb24gRmV0Y2ggQ291bnQgUmVnaXN0ZXJzKi8KK3N0YXRpYyBzdHJ1Y3QgZmV0Y2hfY291bnQgZmV0Y2hfY291bnRfcmVnID0geworCS8qIElHQTEgRmV0Y2ggQ291bnQgUmVnaXN0ZXIgKi8KKwl7SUdBMV9GRVRDSF9DT1VOVF9SRUdfTlVNLCB7e1NSMUMsIDAsIDd9LCB7U1IxRCwgMCwgMX0gfSB9LAorCS8qIElHQTIgRmV0Y2ggQ291bnQgUmVnaXN0ZXIgKi8KKwl7SUdBMl9GRVRDSF9DT1VOVF9SRUdfTlVNLCB7e0NSNjUsIDAsIDd9LCB7Q1I2NywgMiwgM30gfSB9Cit9OworCitzdGF0aWMgc3RydWN0IGlnYTFfY3J0Y190aW1pbmcgaWdhMV9jcnRjX3JlZyA9IHsKKwkvKiBJR0ExIEhvcml6b250YWwgVG90YWwgKi8KKwl7SUdBMV9IT1JfVE9UQUxfUkVHX05VTSwge3tDUjAwLCAwLCA3fSwge0NSMzYsIDMsIDN9IH0gfSwKKwkvKiBJR0ExIEhvcml6b250YWwgQWRkcmVzc2FibGUgVmlkZW8gKi8KKwl7SUdBMV9IT1JfQUREUl9SRUdfTlVNLCB7e0NSMDEsIDAsIDd9IH0gfSwKKwkvKiBJR0ExIEhvcml6b250YWwgQmxhbmsgU3RhcnQgKi8KKwl7SUdBMV9IT1JfQkxBTktfU1RBUlRfUkVHX05VTSwge3tDUjAyLCAwLCA3fSB9IH0sCisJLyogSUdBMSBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtJR0ExX0hPUl9CTEFOS19FTkRfUkVHX05VTSwKKwkge3tDUjAzLCAwLCA0fSwge0NSMDUsIDcsIDd9LCB7Q1IzMywgNSwgNX0gfSB9LAorCS8qIElHQTEgSG9yaXpvbnRhbCBTeW5jIFN0YXJ0ICovCisJe0lHQTFfSE9SX1NZTkNfU1RBUlRfUkVHX05VTSwge3tDUjA0LCAwLCA3fSwge0NSMzMsIDQsIDR9IH0gfSwKKwkvKiBJR0ExIEhvcml6b250YWwgU3luYyBFbmQgKi8KKwl7SUdBMV9IT1JfU1lOQ19FTkRfUkVHX05VTSwge3tDUjA1LCAwLCA0fSB9IH0sCisJLyogSUdBMSBWZXJ0aWNhbCBUb3RhbCAqLworCXtJR0ExX1ZFUl9UT1RBTF9SRUdfTlVNLAorCSB7e0NSMDYsIDAsIDd9LCB7Q1IwNywgMCwgMH0sIHtDUjA3LCA1LCA1fSwge0NSMzUsIDAsIDB9IH0gfSwKKwkvKiBJR0ExIFZlcnRpY2FsIEFkZHJlc3NhYmxlIFZpZGVvICovCisJe0lHQTFfVkVSX0FERFJfUkVHX05VTSwKKwkge3tDUjEyLCAwLCA3fSwge0NSMDcsIDEsIDF9LCB7Q1IwNywgNiwgNn0sIHtDUjM1LCAyLCAyfSB9IH0sCisJLyogSUdBMSBWZXJ0aWNhbCBCbGFuayBTdGFydCAqLworCXtJR0ExX1ZFUl9CTEFOS19TVEFSVF9SRUdfTlVNLAorCSB7e0NSMTUsIDAsIDd9LCB7Q1IwNywgMywgM30sIHtDUjA5LCA1LCA1fSwge0NSMzUsIDMsIDN9IH0gfSwKKwkvKiBJR0ExIFZlcnRpY2FsIEJsYW5rIEVuZCAqLworCXtJR0ExX1ZFUl9CTEFOS19FTkRfUkVHX05VTSwge3tDUjE2LCAwLCA3fSB9IH0sCisJLyogSUdBMSBWZXJ0aWNhbCBTeW5jIFN0YXJ0ICovCisJe0lHQTFfVkVSX1NZTkNfU1RBUlRfUkVHX05VTSwKKwkge3tDUjEwLCAwLCA3fSwge0NSMDcsIDIsIDJ9LCB7Q1IwNywgNywgN30sIHtDUjM1LCAxLCAxfSB9IH0sCisJLyogSUdBMSBWZXJ0aWNhbCBTeW5jIEVuZCAqLworCXtJR0ExX1ZFUl9TWU5DX0VORF9SRUdfTlVNLCB7e0NSMTEsIDAsIDN9IH0gfQorfTsKKworc3RhdGljIHN0cnVjdCBpZ2EyX2NydGNfdGltaW5nIGlnYTJfY3J0Y19yZWcgPSB7CisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe0lHQTJfSE9SX1RPVEFMX1JFR19OVU0sIHt7Q1I1MCwgMCwgN30sIHtDUjU1LCAwLCAzfSB9IH0sCisJLyogSUdBMiBIb3Jpem9udGFsIEFkZHJlc3NhYmxlIFZpZGVvICovCisJe0lHQTJfSE9SX0FERFJfUkVHX05VTSwge3tDUjUxLCAwLCA3fSwge0NSNTUsIDQsIDZ9IH0gfSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgU3RhcnQgKi8KKwl7SUdBMl9IT1JfQkxBTktfU1RBUlRfUkVHX05VTSwge3tDUjUyLCAwLCA3fSwge0NSNTQsIDAsIDJ9IH0gfSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe0lHQTJfSE9SX0JMQU5LX0VORF9SRUdfTlVNLAorCSB7e0NSNTMsIDAsIDd9LCB7Q1I1NCwgMywgNX0sIHtDUjVELCA2LCA2fSB9IH0sCisJLyogSUdBMiBIb3Jpem9udGFsIFN5bmMgU3RhcnQgKi8KKwl7SUdBMl9IT1JfU1lOQ19TVEFSVF9SRUdfTlVNLAorCSB7e0NSNTYsIDAsIDd9LCB7Q1I1NCwgNiwgN30sIHtDUjVDLCA3LCA3fSwge0NSNUQsIDcsIDd9IH0gfSwKKwkvKiBJR0EyIEhvcml6b250YWwgU3luYyBFbmQgKi8KKwl7SUdBMl9IT1JfU1lOQ19FTkRfUkVHX05VTSwge3tDUjU3LCAwLCA3fSwge0NSNUMsIDYsIDZ9IH0gfSwKKwkvKiBJR0EyIFZlcnRpY2FsIFRvdGFsICovCisJe0lHQTJfVkVSX1RPVEFMX1JFR19OVU0sIHt7Q1I1OCwgMCwgN30sIHtDUjVELCAwLCAyfSB9IH0sCisJLyogSUdBMiBWZXJ0aWNhbCBBZGRyZXNzYWJsZSBWaWRlbyAqLworCXtJR0EyX1ZFUl9BRERSX1JFR19OVU0sIHt7Q1I1OSwgMCwgN30sIHtDUjVELCAzLCA1fSB9IH0sCisJLyogSUdBMiBWZXJ0aWNhbCBCbGFuayBTdGFydCAqLworCXtJR0EyX1ZFUl9CTEFOS19TVEFSVF9SRUdfTlVNLCB7e0NSNUEsIDAsIDd9LCB7Q1I1QywgMCwgMn0gfSB9LAorCS8qIElHQTIgVmVydGljYWwgQmxhbmsgRW5kICovCisJe0lHQTJfVkVSX0JMQU5LX0VORF9SRUdfTlVNLCB7e0NSNUIsIDAsIDd9LCB7Q1I1QywgMywgNX0gfSB9LAorCS8qIElHQTIgVmVydGljYWwgU3luYyBTdGFydCAqLworCXtJR0EyX1ZFUl9TWU5DX1NUQVJUX1JFR19OVU0sIHt7Q1I1RSwgMCwgN30sIHtDUjVGLCA1LCA3fSB9IH0sCisJLyogSUdBMiBWZXJ0aWNhbCBTeW5jIEVuZCAqLworCXtJR0EyX1ZFUl9TWU5DX0VORF9SRUdfTlVNLCB7e0NSNUYsIDAsIDR9IH0gfQorfTsKKworc3RhdGljIHN0cnVjdCByZ2JMVVQgcGFsTFVUX3RhYmxlW10gPSB7CisJLyoge1IsRyxCfSAqLworCS8qIEluZGV4IDB4MDB+MHgwMyAqLworCXsweDAwLCAweDAwLCAweDAwfSwgezB4MDAsIDB4MDAsIDB4MkF9LCB7MHgwMCwgMHgyQSwgMHgwMH0sIHsweDAwLAorCQkJCQkJCQkgICAgIDB4MkEsCisJCQkJCQkJCSAgICAgMHgyQX0sCisJLyogSW5kZXggMHgwNH4weDA3ICovCisJezB4MkEsIDB4MDAsIDB4MDB9LCB7MHgyQSwgMHgwMCwgMHgyQX0sIHsweDJBLCAweDE1LCAweDAwfSwgezB4MkEsCisJCQkJCQkJCSAgICAgMHgyQSwKKwkJCQkJCQkJICAgICAweDJBfSwKKwkvKiBJbmRleCAweDA4fjB4MEIgKi8KKwl7MHgxNSwgMHgxNSwgMHgxNX0sIHsweDE1LCAweDE1LCAweDNGfSwgezB4MTUsIDB4M0YsIDB4MTV9LCB7MHgxNSwKKwkJCQkJCQkJICAgICAweDNGLAorCQkJCQkJCQkgICAgIDB4M0Z9LAorCS8qIEluZGV4IDB4MEN+MHgwRiAqLworCXsweDNGLCAweDE1LCAweDE1fSwgezB4M0YsIDB4MTUsIDB4M0Z9LCB7MHgzRiwgMHgzRiwgMHgxNX0sIHsweDNGLAorCQkJCQkJCQkgICAgIDB4M0YsCisJCQkJCQkJCSAgICAgMHgzRn0sCisJLyogSW5kZXggMHgxMH4weDEzICovCisJezB4MDAsIDB4MDAsIDB4MDB9LCB7MHgwNSwgMHgwNSwgMHgwNX0sIHsweDA4LCAweDA4LCAweDA4fSwgezB4MEIsCisJCQkJCQkJCSAgICAgMHgwQiwKKwkJCQkJCQkJICAgICAweDBCfSwKKwkvKiBJbmRleCAweDE0fjB4MTcgKi8KKwl7MHgwRSwgMHgwRSwgMHgwRX0sIHsweDExLCAweDExLCAweDExfSwgezB4MTQsIDB4MTQsIDB4MTR9LCB7MHgxOCwKKwkJCQkJCQkJICAgICAweDE4LAorCQkJCQkJCQkgICAgIDB4MTh9LAorCS8qIEluZGV4IDB4MTh+MHgxQiAqLworCXsweDFDLCAweDFDLCAweDFDfSwgezB4MjAsIDB4MjAsIDB4MjB9LCB7MHgyNCwgMHgyNCwgMHgyNH0sIHsweDI4LAorCQkJCQkJCQkgICAgIDB4MjgsCisJCQkJCQkJCSAgICAgMHgyOH0sCisJLyogSW5kZXggMHgxQ34weDFGICovCisJezB4MkQsIDB4MkQsIDB4MkR9LCB7MHgzMiwgMHgzMiwgMHgzMn0sIHsweDM4LCAweDM4LCAweDM4fSwgezB4M0YsCisJCQkJCQkJCSAgICAgMHgzRiwKKwkJCQkJCQkJICAgICAweDNGfSwKKwkvKiBJbmRleCAweDIwfjB4MjMgKi8KKwl7MHgwMCwgMHgwMCwgMHgzRn0sIHsweDEwLCAweDAwLCAweDNGfSwgezB4MUYsIDB4MDAsIDB4M0Z9LCB7MHgyRiwKKwkJCQkJCQkJICAgICAweDAwLAorCQkJCQkJCQkgICAgIDB4M0Z9LAorCS8qIEluZGV4IDB4MjR+MHgyNyAqLworCXsweDNGLCAweDAwLCAweDNGfSwgezB4M0YsIDB4MDAsIDB4MkZ9LCB7MHgzRiwgMHgwMCwgMHgxRn0sIHsweDNGLAorCQkJCQkJCQkgICAgIDB4MDAsCisJCQkJCQkJCSAgICAgMHgxMH0sCisJLyogSW5kZXggMHgyOH4weDJCICovCisJezB4M0YsIDB4MDAsIDB4MDB9LCB7MHgzRiwgMHgxMCwgMHgwMH0sIHsweDNGLCAweDFGLCAweDAwfSwgezB4M0YsCisJCQkJCQkJCSAgICAgMHgyRiwKKwkJCQkJCQkJICAgICAweDAwfSwKKwkvKiBJbmRleCAweDJDfjB4MkYgKi8KKwl7MHgzRiwgMHgzRiwgMHgwMH0sIHsweDJGLCAweDNGLCAweDAwfSwgezB4MUYsIDB4M0YsIDB4MDB9LCB7MHgxMCwKKwkJCQkJCQkJICAgICAweDNGLAorCQkJCQkJCQkgICAgIDB4MDB9LAorCS8qIEluZGV4IDB4MzB+MHgzMyAqLworCXsweDAwLCAweDNGLCAweDAwfSwgezB4MDAsIDB4M0YsIDB4MTB9LCB7MHgwMCwgMHgzRiwgMHgxRn0sIHsweDAwLAorCQkJCQkJCQkgICAgIDB4M0YsCisJCQkJCQkJCSAgICAgMHgyRn0sCisJLyogSW5kZXggMHgzNH4weDM3ICovCisJezB4MDAsIDB4M0YsIDB4M0Z9LCB7MHgwMCwgMHgyRiwgMHgzRn0sIHsweDAwLCAweDFGLCAweDNGfSwgezB4MDAsCisJCQkJCQkJCSAgICAgMHgxMCwKKwkJCQkJCQkJICAgICAweDNGfSwKKwkvKiBJbmRleCAweDM4fjB4M0IgKi8KKwl7MHgxRiwgMHgxRiwgMHgzRn0sIHsweDI3LCAweDFGLCAweDNGfSwgezB4MkYsIDB4MUYsIDB4M0Z9LCB7MHgzNywKKwkJCQkJCQkJICAgICAweDFGLAorCQkJCQkJCQkgICAgIDB4M0Z9LAorCS8qIEluZGV4IDB4M0N+MHgzRiAqLworCXsweDNGLCAweDFGLCAweDNGfSwgezB4M0YsIDB4MUYsIDB4Mzd9LCB7MHgzRiwgMHgxRiwgMHgyRn0sIHsweDNGLAorCQkJCQkJCQkgICAgIDB4MUYsCisJCQkJCQkJCSAgICAgMHgyN30sCisJLyogSW5kZXggMHg0MH4weDQzICovCisJezB4M0YsIDB4MUYsIDB4MUZ9LCB7MHgzRiwgMHgyNywgMHgxRn0sIHsweDNGLCAweDJGLCAweDFGfSwgezB4M0YsCisJCQkJCQkJCSAgICAgMHgzRiwKKwkJCQkJCQkJICAgICAweDFGfSwKKwkvKiBJbmRleCAweDQ0fjB4NDcgKi8KKwl7MHgzRiwgMHgzRiwgMHgxRn0sIHsweDM3LCAweDNGLCAweDFGfSwgezB4MkYsIDB4M0YsIDB4MUZ9LCB7MHgyNywKKwkJCQkJCQkJICAgICAweDNGLAorCQkJCQkJCQkgICAgIDB4MUZ9LAorCS8qIEluZGV4IDB4NDh+MHg0QiAqLworCXsweDFGLCAweDNGLCAweDFGfSwgezB4MUYsIDB4M0YsIDB4Mjd9LCB7MHgxRiwgMHgzRiwgMHgyRn0sIHsweDFGLAorCQkJCQkJCQkgICAgIDB4M0YsCisJCQkJCQkJCSAgICAgMHgzN30sCisJLyogSW5kZXggMHg0Q34weDRGICovCisJezB4MUYsIDB4M0YsIDB4M0Z9LCB7MHgxRiwgMHgzNywgMHgzRn0sIHsweDFGLCAweDJGLCAweDNGfSwgezB4MUYsCisJCQkJCQkJCSAgICAgMHgyNywKKwkJCQkJCQkJICAgICAweDNGfSwKKwkvKiBJbmRleCAweDUwfjB4NTMgKi8KKwl7MHgyRCwgMHgyRCwgMHgzRn0sIHsweDMxLCAweDJELCAweDNGfSwgezB4MzYsIDB4MkQsIDB4M0Z9LCB7MHgzQSwKKwkJCQkJCQkJICAgICAweDJELAorCQkJCQkJCQkgICAgIDB4M0Z9LAorCS8qIEluZGV4IDB4NTR+MHg1NyAqLworCXsweDNGLCAweDJELCAweDNGfSwgezB4M0YsIDB4MkQsIDB4M0F9LCB7MHgzRiwgMHgyRCwgMHgzNn0sIHsweDNGLAorCQkJCQkJCQkgICAgIDB4MkQsCisJCQkJCQkJCSAgICAgMHgzMX0sCisJLyogSW5kZXggMHg1OH4weDVCICovCisJezB4M0YsIDB4MkQsIDB4MkR9LCB7MHgzRiwgMHgzMSwgMHgyRH0sIHsweDNGLCAweDM2LCAweDJEfSwgezB4M0YsCisJCQkJCQkJCSAgICAgMHgzQSwKKwkJCQkJCQkJICAgICAweDJEfSwKKwkvKiBJbmRleCAweDVDfjB4NUYgKi8KKwl7MHgzRiwgMHgzRiwgMHgyRH0sIHsweDNBLCAweDNGLCAweDJEfSwgezB4MzYsIDB4M0YsIDB4MkR9LCB7MHgzMSwKKwkJCQkJCQkJICAgICAweDNGLAorCQkJCQkJCQkgICAgIDB4MkR9LAorCS8qIEluZGV4IDB4NjB+MHg2MyAqLworCXsweDJELCAweDNGLCAweDJEfSwgezB4MkQsIDB4M0YsIDB4MzF9LCB7MHgyRCwgMHgzRiwgMHgzNn0sIHsweDJELAorCQkJCQkJCQkgICAgIDB4M0YsCisJCQkJCQkJCSAgICAgMHgzQX0sCisJLyogSW5kZXggMHg2NH4weDY3ICovCisJezB4MkQsIDB4M0YsIDB4M0Z9LCB7MHgyRCwgMHgzQSwgMHgzRn0sIHsweDJELCAweDM2LCAweDNGfSwgezB4MkQsCisJCQkJCQkJCSAgICAgMHgzMSwKKwkJCQkJCQkJICAgICAweDNGfSwKKwkvKiBJbmRleCAweDY4fjB4NkIgKi8KKwl7MHgwMCwgMHgwMCwgMHgxQ30sIHsweDA3LCAweDAwLCAweDFDfSwgezB4MEUsIDB4MDAsIDB4MUN9LCB7MHgxNSwKKwkJCQkJCQkJICAgICAweDAwLAorCQkJCQkJCQkgICAgIDB4MUN9LAorCS8qIEluZGV4IDB4NkN+MHg2RiAqLworCXsweDFDLCAweDAwLCAweDFDfSwgezB4MUMsIDB4MDAsIDB4MTV9LCB7MHgxQywgMHgwMCwgMHgwRX0sIHsweDFDLAorCQkJCQkJCQkgICAgIDB4MDAsCisJCQkJCQkJCSAgICAgMHgwN30sCisJLyogSW5kZXggMHg3MH4weDczICovCisJezB4MUMsIDB4MDAsIDB4MDB9LCB7MHgxQywgMHgwNywgMHgwMH0sIHsweDFDLCAweDBFLCAweDAwfSwgezB4MUMsCisJCQkJCQkJCSAgICAgMHgxNSwKKwkJCQkJCQkJICAgICAweDAwfSwKKwkvKiBJbmRleCAweDc0fjB4NzcgKi8KKwl7MHgxQywgMHgxQywgMHgwMH0sIHsweDE1LCAweDFDLCAweDAwfSwgezB4MEUsIDB4MUMsIDB4MDB9LCB7MHgwNywKKwkJCQkJCQkJICAgICAweDFDLAorCQkJCQkJCQkgICAgIDB4MDB9LAorCS8qIEluZGV4IDB4Nzh+MHg3QiAqLworCXsweDAwLCAweDFDLCAweDAwfSwgezB4MDAsIDB4MUMsIDB4MDd9LCB7MHgwMCwgMHgxQywgMHgwRX0sIHsweDAwLAorCQkJCQkJCQkgICAgIDB4MUMsCisJCQkJCQkJCSAgICAgMHgxNX0sCisJLyogSW5kZXggMHg3Q34weDdGICovCisJezB4MDAsIDB4MUMsIDB4MUN9LCB7MHgwMCwgMHgxNSwgMHgxQ30sIHsweDAwLCAweDBFLCAweDFDfSwgezB4MDAsCisJCQkJCQkJCSAgICAgMHgwNywKKwkJCQkJCQkJICAgICAweDFDfSwKKwkvKiBJbmRleCAweDgwfjB4ODMgKi8KKwl7MHgwRSwgMHgwRSwgMHgxQ30sIHsweDExLCAweDBFLCAweDFDfSwgezB4MTUsIDB4MEUsIDB4MUN9LCB7MHgxOCwKKwkJCQkJCQkJICAgICAweDBFLAorCQkJCQkJCQkgICAgIDB4MUN9LAorCS8qIEluZGV4IDB4ODR+MHg4NyAqLworCXsweDFDLCAweDBFLCAweDFDfSwgezB4MUMsIDB4MEUsIDB4MTh9LCB7MHgxQywgMHgwRSwgMHgxNX0sIHsweDFDLAorCQkJCQkJCQkgICAgIDB4MEUsCisJCQkJCQkJCSAgICAgMHgxMX0sCisJLyogSW5kZXggMHg4OH4weDhCICovCisJezB4MUMsIDB4MEUsIDB4MEV9LCB7MHgxQywgMHgxMSwgMHgwRX0sIHsweDFDLCAweDE1LCAweDBFfSwgezB4MUMsCisJCQkJCQkJCSAgICAgMHgxOCwKKwkJCQkJCQkJICAgICAweDBFfSwKKwkvKiBJbmRleCAweDhDfjB4OEYgKi8KKwl7MHgxQywgMHgxQywgMHgwRX0sIHsweDE4LCAweDFDLCAweDBFfSwgezB4MTUsIDB4MUMsIDB4MEV9LCB7MHgxMSwKKwkJCQkJCQkJICAgICAweDFDLAorCQkJCQkJCQkgICAgIDB4MEV9LAorCS8qIEluZGV4IDB4OTB+MHg5MyAqLworCXsweDBFLCAweDFDLCAweDBFfSwgezB4MEUsIDB4MUMsIDB4MTF9LCB7MHgwRSwgMHgxQywgMHgxNX0sIHsweDBFLAorCQkJCQkJCQkgICAgIDB4MUMsCisJCQkJCQkJCSAgICAgMHgxOH0sCisJLyogSW5kZXggMHg5NH4weDk3ICovCisJezB4MEUsIDB4MUMsIDB4MUN9LCB7MHgwRSwgMHgxOCwgMHgxQ30sIHsweDBFLCAweDE1LCAweDFDfSwgezB4MEUsCisJCQkJCQkJCSAgICAgMHgxMSwKKwkJCQkJCQkJICAgICAweDFDfSwKKwkvKiBJbmRleCAweDk4fjB4OUIgKi8KKwl7MHgxNCwgMHgxNCwgMHgxQ30sIHsweDE2LCAweDE0LCAweDFDfSwgezB4MTgsIDB4MTQsIDB4MUN9LCB7MHgxQSwKKwkJCQkJCQkJICAgICAweDE0LAorCQkJCQkJCQkgICAgIDB4MUN9LAorCS8qIEluZGV4IDB4OUN+MHg5RiAqLworCXsweDFDLCAweDE0LCAweDFDfSwgezB4MUMsIDB4MTQsIDB4MUF9LCB7MHgxQywgMHgxNCwgMHgxOH0sIHsweDFDLAorCQkJCQkJCQkgICAgIDB4MTQsCisJCQkJCQkJCSAgICAgMHgxNn0sCisJLyogSW5kZXggMHhBMH4weEEzICovCisJezB4MUMsIDB4MTQsIDB4MTR9LCB7MHgxQywgMHgxNiwgMHgxNH0sIHsweDFDLCAweDE4LCAweDE0fSwgezB4MUMsCisJCQkJCQkJCSAgICAgMHgxQSwKKwkJCQkJCQkJICAgICAweDE0fSwKKwkvKiBJbmRleCAweEE0fjB4QTcgKi8KKwl7MHgxQywgMHgxQywgMHgxNH0sIHsweDFBLCAweDFDLCAweDE0fSwgezB4MTgsIDB4MUMsIDB4MTR9LCB7MHgxNiwKKwkJCQkJCQkJICAgICAweDFDLAorCQkJCQkJCQkgICAgIDB4MTR9LAorCS8qIEluZGV4IDB4QTh+MHhBQiAqLworCXsweDE0LCAweDFDLCAweDE0fSwgezB4MTQsIDB4MUMsIDB4MTZ9LCB7MHgxNCwgMHgxQywgMHgxOH0sIHsweDE0LAorCQkJCQkJCQkgICAgIDB4MUMsCisJCQkJCQkJCSAgICAgMHgxQX0sCisJLyogSW5kZXggMHhBQ34weEFGICovCisJezB4MTQsIDB4MUMsIDB4MUN9LCB7MHgxNCwgMHgxQSwgMHgxQ30sIHsweDE0LCAweDE4LCAweDFDfSwgezB4MTQsCisJCQkJCQkJCSAgICAgMHgxNiwKKwkJCQkJCQkJICAgICAweDFDfSwKKwkvKiBJbmRleCAweEIwfjB4QjMgKi8KKwl7MHgwMCwgMHgwMCwgMHgxMH0sIHsweDA0LCAweDAwLCAweDEwfSwgezB4MDgsIDB4MDAsIDB4MTB9LCB7MHgwQywKKwkJCQkJCQkJICAgICAweDAwLAorCQkJCQkJCQkgICAgIDB4MTB9LAorCS8qIEluZGV4IDB4QjR+MHhCNyAqLworCXsweDEwLCAweDAwLCAweDEwfSwgezB4MTAsIDB4MDAsIDB4MEN9LCB7MHgxMCwgMHgwMCwgMHgwOH0sIHsweDEwLAorCQkJCQkJCQkgICAgIDB4MDAsCisJCQkJCQkJCSAgICAgMHgwNH0sCisJLyogSW5kZXggMHhCOH4weEJCICovCisJezB4MTAsIDB4MDAsIDB4MDB9LCB7MHgxMCwgMHgwNCwgMHgwMH0sIHsweDEwLCAweDA4LCAweDAwfSwgezB4MTAsCisJCQkJCQkJCSAgICAgMHgwQywKKwkJCQkJCQkJICAgICAweDAwfSwKKwkvKiBJbmRleCAweEJDfjB4QkYgKi8KKwl7MHgxMCwgMHgxMCwgMHgwMH0sIHsweDBDLCAweDEwLCAweDAwfSwgezB4MDgsIDB4MTAsIDB4MDB9LCB7MHgwNCwKKwkJCQkJCQkJICAgICAweDEwLAorCQkJCQkJCQkgICAgIDB4MDB9LAorCS8qIEluZGV4IDB4QzB+MHhDMyAqLworCXsweDAwLCAweDEwLCAweDAwfSwgezB4MDAsIDB4MTAsIDB4MDR9LCB7MHgwMCwgMHgxMCwgMHgwOH0sIHsweDAwLAorCQkJCQkJCQkgICAgIDB4MTAsCisJCQkJCQkJCSAgICAgMHgwQ30sCisJLyogSW5kZXggMHhDNH4weEM3ICovCisJezB4MDAsIDB4MTAsIDB4MTB9LCB7MHgwMCwgMHgwQywgMHgxMH0sIHsweDAwLCAweDA4LCAweDEwfSwgezB4MDAsCisJCQkJCQkJCSAgICAgMHgwNCwKKwkJCQkJCQkJICAgICAweDEwfSwKKwkvKiBJbmRleCAweEM4fjB4Q0IgKi8KKwl7MHgwOCwgMHgwOCwgMHgxMH0sIHsweDBBLCAweDA4LCAweDEwfSwgezB4MEMsIDB4MDgsIDB4MTB9LCB7MHgwRSwKKwkJCQkJCQkJICAgICAweDA4LAorCQkJCQkJCQkgICAgIDB4MTB9LAorCS8qIEluZGV4IDB4Q0N+MHhDRiAqLworCXsweDEwLCAweDA4LCAweDEwfSwgezB4MTAsIDB4MDgsIDB4MEV9LCB7MHgxMCwgMHgwOCwgMHgwQ30sIHsweDEwLAorCQkJCQkJCQkgICAgIDB4MDgsCisJCQkJCQkJCSAgICAgMHgwQX0sCisJLyogSW5kZXggMHhEMH4weEQzICovCisJezB4MTAsIDB4MDgsIDB4MDh9LCB7MHgxMCwgMHgwQSwgMHgwOH0sIHsweDEwLCAweDBDLCAweDA4fSwgezB4MTAsCisJCQkJCQkJCSAgICAgMHgwRSwKKwkJCQkJCQkJICAgICAweDA4fSwKKwkvKiBJbmRleCAweEQ0fjB4RDcgKi8KKwl7MHgxMCwgMHgxMCwgMHgwOH0sIHsweDBFLCAweDEwLCAweDA4fSwgezB4MEMsIDB4MTAsIDB4MDh9LCB7MHgwQSwKKwkJCQkJCQkJICAgICAweDEwLAorCQkJCQkJCQkgICAgIDB4MDh9LAorCS8qIEluZGV4IDB4RDh+MHhEQiAqLworCXsweDA4LCAweDEwLCAweDA4fSwgezB4MDgsIDB4MTAsIDB4MEF9LCB7MHgwOCwgMHgxMCwgMHgwQ30sIHsweDA4LAorCQkJCQkJCQkgICAgIDB4MTAsCisJCQkJCQkJCSAgICAgMHgwRX0sCisJLyogSW5kZXggMHhEQ34weERGICovCisJezB4MDgsIDB4MTAsIDB4MTB9LCB7MHgwOCwgMHgwRSwgMHgxMH0sIHsweDA4LCAweDBDLCAweDEwfSwgezB4MDgsCisJCQkJCQkJCSAgICAgMHgwQSwKKwkJCQkJCQkJICAgICAweDEwfSwKKwkvKiBJbmRleCAweEUwfjB4RTMgKi8KKwl7MHgwQiwgMHgwQiwgMHgxMH0sIHsweDBDLCAweDBCLCAweDEwfSwgezB4MEQsIDB4MEIsIDB4MTB9LCB7MHgwRiwKKwkJCQkJCQkJICAgICAweDBCLAorCQkJCQkJCQkgICAgIDB4MTB9LAorCS8qIEluZGV4IDB4RTR+MHhFNyAqLworCXsweDEwLCAweDBCLCAweDEwfSwgezB4MTAsIDB4MEIsIDB4MEZ9LCB7MHgxMCwgMHgwQiwgMHgwRH0sIHsweDEwLAorCQkJCQkJCQkgICAgIDB4MEIsCisJCQkJCQkJCSAgICAgMHgwQ30sCisJLyogSW5kZXggMHhFOH4weEVCICovCisJezB4MTAsIDB4MEIsIDB4MEJ9LCB7MHgxMCwgMHgwQywgMHgwQn0sIHsweDEwLCAweDBELCAweDBCfSwgezB4MTAsCisJCQkJCQkJCSAgICAgMHgwRiwKKwkJCQkJCQkJICAgICAweDBCfSwKKwkvKiBJbmRleCAweEVDfjB4RUYgKi8KKwl7MHgxMCwgMHgxMCwgMHgwQn0sIHsweDBGLCAweDEwLCAweDBCfSwgezB4MEQsIDB4MTAsIDB4MEJ9LCB7MHgwQywKKwkJCQkJCQkJICAgICAweDEwLAorCQkJCQkJCQkgICAgIDB4MEJ9LAorCS8qIEluZGV4IDB4RjB+MHhGMyAqLworCXsweDBCLCAweDEwLCAweDBCfSwgezB4MEIsIDB4MTAsIDB4MEN9LCB7MHgwQiwgMHgxMCwgMHgwRH0sIHsweDBCLAorCQkJCQkJCQkgICAgIDB4MTAsCisJCQkJCQkJCSAgICAgMHgwRn0sCisJLyogSW5kZXggMHhGNH4weEY3ICovCisJezB4MEIsIDB4MTAsIDB4MTB9LCB7MHgwQiwgMHgwRiwgMHgxMH0sIHsweDBCLCAweDBELCAweDEwfSwgezB4MEIsCisJCQkJCQkJCSAgICAgMHgwQywKKwkJCQkJCQkJICAgICAweDEwfSwKKwkvKiBJbmRleCAweEY4fjB4RkIgKi8KKwl7MHgwMCwgMHgwMCwgMHgwMH0sIHsweDAwLCAweDAwLCAweDAwfSwgezB4MDAsIDB4MDAsIDB4MDB9LCB7MHgwMCwKKwkJCQkJCQkJICAgICAweDAwLAorCQkJCQkJCQkgICAgIDB4MDB9LAorCS8qIEluZGV4IDB4RkN+MHhGRiAqLworCXsweDAwLCAweDAwLCAweDAwfSwgezB4MDAsIDB4MDAsIDB4MDB9LCB7MHgwMCwgMHgwMCwgMHgwMH0sIHsweDAwLAorCQkJCQkJCQkgICAgIDB4MDAsCisJCQkJCQkJCSAgICAgMHgwMH0KK307CisKK3N0YXRpYyB2b2lkIHNldF9jcnRfb3V0cHV0X3BhdGgoaW50IHNldF9pZ2EpOworc3RhdGljIHZvaWQgZHZpX3BhdGNoX3NrZXdfZHZwMCh2b2lkKTsKK3N0YXRpYyB2b2lkIGR2aV9wYXRjaF9za2V3X2R2cDEodm9pZCk7CitzdGF0aWMgdm9pZCBkdmlfcGF0Y2hfc2tld19kdnBfbG93KHZvaWQpOworc3RhdGljIHZvaWQgc2V0X2R2aV9vdXRwdXRfcGF0aChpbnQgc2V0X2lnYSwgaW50IG91dHB1dF9pbnRlcmZhY2UpOworc3RhdGljIHZvaWQgc2V0X2xjZF9vdXRwdXRfcGF0aChpbnQgc2V0X2lnYSwgaW50IG91dHB1dF9pbnRlcmZhY2UpOworc3RhdGljIGludCBzZWFyY2hfbW9kZV9zZXR0aW5nKGludCBNb2RlSW5mb0luZGV4KTsKK3N0YXRpYyB2b2lkIGxvYWRfZml4X2JpdF9jcnRjX3JlZyh2b2lkKTsKK3N0YXRpYyB2b2lkIGluaXRfZ2Z4X2NoaXBfaW5mbyh2b2lkKTsKK3N0YXRpYyB2b2lkIGluaXRfdG1kc19jaGlwX2luZm8odm9pZCk7CitzdGF0aWMgdm9pZCBpbml0X2x2ZHNfY2hpcF9pbmZvKHZvaWQpOworc3RhdGljIHZvaWQgZGV2aWNlX3NjcmVlbl9vZmYodm9pZCk7CitzdGF0aWMgdm9pZCBkZXZpY2Vfc2NyZWVuX29uKHZvaWQpOworc3RhdGljIHZvaWQgc2V0X2Rpc3BsYXlfY2hhbm5lbCh2b2lkKTsKK3N0YXRpYyB2b2lkIGRldmljZV9vZmYodm9pZCk7CitzdGF0aWMgdm9pZCBkZXZpY2Vfb24odm9pZCk7CitzdGF0aWMgdm9pZCBlbmFibGVfc2Vjb25kX2Rpc3BsYXlfY2hhbm5lbCh2b2lkKTsKK3N0YXRpYyB2b2lkIGRpc2FibGVfc2Vjb25kX2Rpc3BsYXlfY2hhbm5lbCh2b2lkKTsKK3N0YXRpYyBpbnQgZ2V0X2ZiX3NpemVfZnJvbV9wY2kodm9pZCk7CisKK3ZvaWQgdmlhZmJfd3JpdGVfcmVnKHU4IGluZGV4LCB1MTYgaW9fcG9ydCwgdTggZGF0YSkKK3sKKwlvdXRiKGluZGV4LCBpb19wb3J0KTsKKwlvdXRiKGRhdGEsIGlvX3BvcnQgKyAxKTsKKwkvKkRFQlVHX01TRyhLRVJOX0lORk8gIlxuSW5kZXg9JTJkIFZhbHVlPSUyZCIsIGluZGV4LCBkYXRhKTsgKi8KK30KK3U4IHZpYWZiX3JlYWRfcmVnKGludCBpb19wb3J0LCB1OCBpbmRleCkKK3sKKwlvdXRiKGluZGV4LCBpb19wb3J0KTsKKwlyZXR1cm4gaW5iKGlvX3BvcnQgKyAxKTsKK30KKwordm9pZCB2aWFmYl9sb2NrX2NydCh2b2lkKQoreworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTEsIFZJQUNSLCBCSVQ3LCBCSVQ3KTsKK30KKwordm9pZCB2aWFmYl91bmxvY2tfY3J0KHZvaWQpCit7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxMSwgVklBQ1IsIDAsIEJJVDcpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNDcsIFZJQUNSLCAwLCBCSVQwKTsKK30KKwordm9pZCB2aWFmYl93cml0ZV9yZWdfbWFzayh1OCBpbmRleCwgaW50IGlvX3BvcnQsIHU4IGRhdGEsIHU4IG1hc2spCit7CisJdTggdG1wOworCisJb3V0YihpbmRleCwgaW9fcG9ydCk7CisJdG1wID0gaW5iKGlvX3BvcnQgKyAxKTsKKwlvdXRiKChkYXRhICYgbWFzaykgfCAodG1wICYgKH5tYXNrKSksIGlvX3BvcnQgKyAxKTsKKwkvKkRFQlVHX01TRyhLRVJOX0lORk8gIlxuSW5kZXg9JTJkIFZhbHVlPSUyZCIsIGluZGV4LCB0bXApOyAqLworfQorCit2b2lkIHdyaXRlX2RhY19yZWcodTggaW5kZXgsIHU4IHIsIHU4IGcsIHU4IGIpCit7CisJb3V0YihpbmRleCwgTFVUX0lOREVYX1dSSVRFKTsKKwlvdXRiKHIsIExVVF9EQVRBKTsKKwlvdXRiKGcsIExVVF9EQVRBKTsKKwlvdXRiKGIsIExVVF9EQVRBKTsKK30KKworLypTZXQgSUdBIHBhdGggZm9yIGVhY2ggZGV2aWNlKi8KK3ZvaWQgdmlhZmJfc2V0X2lnYV9wYXRoKHZvaWQpCit7CisKKwlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7CisJCWlmICh2aWFmYl9DUlRfT04pIHsKKwkJCWlmICh2aWFmYl9wcmltYXJ5X2RldiA9PSBDUlRfRGV2aWNlKQorCQkJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJCWVsc2UKKwkJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCX0KKworCQlpZiAodmlhZmJfRFZJX09OKSB7CisJCQlpZiAodmlhZmJfcHJpbWFyeV9kZXYgPT0gRFZJX0RldmljZSkKKwkJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQkJZWxzZQorCQkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCX0KKworCQlpZiAodmlhZmJfTENEX09OKSB7CisJCQlpZiAodmlhZmJfcHJpbWFyeV9kZXYgPT0gTENEX0RldmljZSkgeworCQkJCWlmICh2aWFmYl9kdWFsX2ZiICYmCisJCQkJCSh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0KKwkJCQkJVU5JQ0hST01FX0NMRTI2NikpIHsKKwkJCQkJdmlhcGFyaW5mby0+CisJCQkJCWx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCQkJCXZpYXBhcmluZm8tPgorCQkJCQljcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCQkJCXZpYXBhcmluZm8tPgorCQkJCQl0bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQkJCX0gZWxzZQorCQkJCQl2aWFwYXJpbmZvLT4KKwkJCQkJbHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJCX0gZWxzZSB7CisJCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMjsKKwkJCX0KKwkJfQorCQlpZiAodmlhZmJfTENEMl9PTikgeworCQkJaWYgKExDRDJfRGV2aWNlID09IHZpYWZiX3ByaW1hcnlfZGV2KQorCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+aWdhX3BhdGggPSBJR0ExOworCQkJZWxzZQorCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+aWdhX3BhdGggPSBJR0EyOworCQl9CisJfSBlbHNlIHsKKwkJdmlhZmJfU0FNTV9PTiA9IDA7CisKKwkJaWYgKHZpYWZiX0NSVF9PTiAmJiB2aWFmYl9MQ0RfT04pIHsKKwkJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCX0gZWxzZSBpZiAodmlhZmJfQ1JUX09OICYmIHZpYWZiX0RWSV9PTikgeworCQkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMjsKKwkJfSBlbHNlIGlmICh2aWFmYl9MQ0RfT04gJiYgdmlhZmJfRFZJX09OKSB7CisJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMjsKKwkJfSBlbHNlIGlmICh2aWFmYl9MQ0RfT04gJiYgdmlhZmJfTENEMl9PTikgeworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMjsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+aWdhX3BhdGggPSBJR0EyOworCQl9IGVsc2UgaWYgKHZpYWZiX0NSVF9PTikgeworCQkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQl9IGVsc2UgaWYgKHZpYWZiX0xDRF9PTikgeworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMjsKKwkJfSBlbHNlIGlmICh2aWFmYl9EVklfT04pIHsKKwkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCX0KKwl9Cit9CisKK3ZvaWQgdmlhZmJfc2V0X3N0YXJ0X2FkZHIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDAsIHRtcCA9IDAsIHNpemUgPSAwOworCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfc2V0X3N0YXJ0X2FkZHIhXG4iKTsKKwl2aWFmYl91bmxvY2tfY3J0KCk7CisJLyogdXBkYXRlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgSUdBMSAqLworCXZpYWZiX3dyaXRlX3JlZyhDUjBDLCBWSUFDUiwgMHgwMCk7CS8qaW5pdGlhbCBzdGFydGluZyBhZGRyZXNzICovCisJdmlhZmJfd3JpdGVfcmVnKENSMEQsIFZJQUNSLCAweDAwKTsKKwl2aWFmYl93cml0ZV9yZWcoQ1IzNCwgVklBQ1IsIDB4MDApOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNDgsIFZJQUNSLCAweDAwLCAweDFGKTsKKworCWlmICh2aWFmYl9kdWFsX2ZiKSB7CisJCXZpYXBhcmluZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJdmlhcGFyaW5mbzEtPmlnYV9wYXRoID0gSUdBMjsKKwl9CisKKwlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7CisJCWlmICghdmlhZmJfZHVhbF9mYikgeworCQkJaWYgKHZpYWZiX3NlY29uZF9zaXplKQorCQkJCXNpemUgPSB2aWFmYl9zZWNvbmRfc2l6ZSAqIDEwMjQgKiAxMDI0OworCQkJZWxzZQorCQkJCXNpemUgPSA4ICogMTAyNCAqIDEwMjQ7CisJCX0gZWxzZSB7CisKKwkJCXNpemUgPSB2aWFwYXJpbmZvMS0+bWVtc2l6ZTsKKwkJfQorCQlvZmZzZXQgPSB2aWFmYl9zZWNvbmRfb2Zmc2V0OworCQlERUJVR19NU0coS0VSTl9JTkZPCisJCQkgICJ2aWFmYl9zZWNvbmRfc2l6ZT0lbHgsIHNlY29uZCBzdGFydF9hZGRkcmVzcz0lbHhcbiIsCisJCQkgIHNpemUsIG9mZnNldCk7CisJfQorCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKKwkJb2Zmc2V0ID0gb2Zmc2V0ID4+IDM7CisKKwkJdG1wID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIDB4NjIpICYgMHgwMTsKKwkJdG1wIHw9IChvZmZzZXQgJiAweDdGKSA8PCAxOworCQl2aWFmYl93cml0ZV9yZWcoQ1I2MiwgVklBQ1IsIHRtcCk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjYzLCBWSUFDUiwgKChvZmZzZXQgJiAweDdGODApID4+IDcpKTsKKwkJdmlhZmJfd3JpdGVfcmVnKENSNjQsIFZJQUNSLCAoKG9mZnNldCAmIDB4N0Y4MDAwKSA+PiAxNSkpOworCQl2aWFmYl93cml0ZV9yZWcoQ1JBMywgVklBQ1IsICgob2Zmc2V0ICYgMHgzODAwMDAwKSA+PiAyMykpOworCX0gZWxzZSB7CisJCS8qIHVwZGF0ZSBzdGFydGluZyBhZGRyZXNzICovCisJCXZpYWZiX3dyaXRlX3JlZyhDUjYyLCBWSUFDUiwgMHgwMCk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjYzLCBWSUFDUiwgMHgwMCk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjY0LCBWSUFDUiwgMHgwMCk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUkEzLCBWSUFDUiwgMHgwMCk7CisJfQorCisJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgeworCQlpZiAodmlhZmJfYWNjZWwpIHsKKwkJCWlmICghdmlhZmJfZHVhbF9mYikKKwkJCQlsZW5ndGggPSBzaXplIC0gdmlhcGFyaW5mby0+ZmJtZW1fdXNlZDsKKwkJCWVsc2UKKwkJCQlsZW5ndGggPSBzaXplIC0gdmlhcGFyaW5mbzEtPmZibWVtX3VzZWQ7CisJCX0gZWxzZQorCQkJbGVuZ3RoID0gc2l6ZTsKKwkJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpKHZvaWQgKil2aWFmYl9GQl9NTSArCisJCQl2aWFmYl9zZWNvbmRfb2Zmc2V0OworCQltZW1zZXQoKHZvaWQgKilvZmZzZXQsIDAsIGxlbmd0aCk7CisJfQorCisJdmlhZmJfbG9ja19jcnQoKTsKK30KKwordm9pZCB2aWFmYl9zZXRfb3V0cHV0X3BhdGgoaW50IGRldmljZSwgaW50IHNldF9pZ2EsIGludCBvdXRwdXRfaW50ZXJmYWNlKQoreworCXN3aXRjaCAoZGV2aWNlKSB7CisJY2FzZSBERVZJQ0VfQ1JUOgorCQlzZXRfY3J0X291dHB1dF9wYXRoKHNldF9pZ2EpOworCQlicmVhazsKKwljYXNlIERFVklDRV9EVkk6CisJCXNldF9kdmlfb3V0cHV0X3BhdGgoc2V0X2lnYSwgb3V0cHV0X2ludGVyZmFjZSk7CisJCWJyZWFrOworCWNhc2UgREVWSUNFX0xDRDoKKwkJc2V0X2xjZF9vdXRwdXRfcGF0aChzZXRfaWdhLCBvdXRwdXRfaW50ZXJmYWNlKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfY3J0X291dHB1dF9wYXRoKGludCBzZXRfaWdhKQoreworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzYsIFZJQUNSLCAweDAwLCBCSVQ0ICsgQklUNSk7CisKKwlzd2l0Y2ggKHNldF9pZ2EpIHsKKwljYXNlIElHQTE6CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTYsIFZJQVNSLCAweDAwLCBCSVQ2KTsKKwkJYnJlYWs7CisJY2FzZSBJR0EyOgorCWNhc2UgSUdBMV9JR0EyOgorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHhDMCwgQklUNiArIEJJVDcpOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE2LCBWSUFTUiwgMHg0MCwgQklUNik7CisJCWlmIChzZXRfaWdhID09IElHQTFfSUdBMikKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkIsIFZJQUNSLCAweDA4LCBCSVQzKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBkdmlfcGF0Y2hfc2tld19kdnAwKHZvaWQpCit7CisJLyogUmVzZXQgZGF0YSBkcml2aW5nIGZpcnN0OiAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUIsIFZJQVNSLCAwLCBCSVQxKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwgMCwgQklUNCk7CisKKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwkJeworCQkJaWYgKCh2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aF9hY3RpdmUgPT0gMTYwMCkgJiYKKwkJCQkodmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPnZfYWN0aXZlID09CisJCQkJMTIwMCkpCisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NiwgVklBQ1IsIDB4MDMsCisJCQkJCSAgICAgICBCSVQwICsgQklUMSArIEJJVDIpOworCQkJZWxzZQorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLCAweDA3LAorCQkJCQkgICAgICAgQklUMCArIEJJVDEgKyBCSVQyKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLCAweDA3LAorCQkJCSAgICAgICBCSVQwICsgQklUMSArIEJJVDIgKyBCSVQzKTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUIsIFZJQVNSLCAweDAyLCBCSVQxKTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDEwLCBCSVQ0KTsKKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQl7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZHZpX3BhdGNoX3NrZXdfZHZwMSh2b2lkKQoreworCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCXsKKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQl7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZHZpX3BhdGNoX3NrZXdfZHZwX2xvdyh2b2lkKQoreworCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgwMywgQklUMCArIEJJVDEpOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MDgsCisJCQkJICAgICAgIEJJVDAgKyBCSVQxICsgQklUMiArIEJJVDMpOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MEYsCisJCQkJICAgICAgIEJJVDAgKyBCSVQxICsgQklUMiArIEJJVDMpOworCQkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJCXsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfZHZpX291dHB1dF9wYXRoKGludCBzZXRfaWdhLCBpbnQgb3V0cHV0X2ludGVyZmFjZSkKK3sKKwlzd2l0Y2ggKG91dHB1dF9pbnRlcmZhY2UpIHsKKwljYXNlIElOVEVSRkFDRV9EVlAwOgorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZCLCBWSUFDUiwgMHgwMSwgQklUMCk7CisKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkgeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NiwgVklBQ1IsIDB4MDAsIEJJVDQpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QywgVklBQ1IsIDB4MjEsIEJJVDAgKworCQkJCUJJVDUgKyBCSVQ3KTsKKwkJfSBlbHNlIHsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkMsIFZJQUNSLCAweEExLCBCSVQwICsKKwkJCQlCSVQ1ICsgQklUNyk7CisJCX0KKworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFFLCBWSUFTUiwgMHhDMCwgQklUNyArIEJJVDYpOworCisJCWR2aV9wYXRjaF9za2V3X2R2cDAoKTsKKwkJYnJlYWs7CisKKwljYXNlIElOVEVSRkFDRV9EVlAxOgorCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpIHsKKwkJCWlmIChzZXRfaWdhID09IElHQTEpCisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5MywgVklBQ1IsIDB4MjEsCisJCQkJCSAgICAgICBCSVQwICsgQklUNSArIEJJVDcpOworCQkJZWxzZQorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTMsIFZJQUNSLCAweEExLAorCQkJCQkgICAgICAgQklUMCArIEJJVDUgKyBCSVQ3KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzZXRfaWdhID09IElHQTEpCisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5QiwgVklBQ1IsIDB4MDAsIEJJVDQpOworCQkJZWxzZQorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOUIsIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJfQorCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUUsIFZJQVNSLCAweDMwLCBCSVQ0ICsgQklUNSk7CisJCWR2aV9wYXRjaF9za2V3X2R2cDEoKTsKKwkJYnJlYWs7CisJY2FzZSBJTlRFUkZBQ0VfREZQX0hJR0g6CisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgIT0gVU5JQ0hST01FX0NMRTI2NikgeworCQkJaWYgKHNldF9pZ2EgPT0gSUdBMSkgeworCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwgMHgwMywKKwkJCQkJICAgICAgIEJJVDAgKyBCSVQxICsgQklUNCk7CisJCQl9IGVsc2UgeworCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwgMHgxMywKKwkJCQkJICAgICAgIEJJVDAgKyBCSVQxICsgQklUNCk7CisJCQl9CisJCX0KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDB4MEMsIEJJVDIgKyBCSVQzKTsKKwkJYnJlYWs7CisKKwljYXNlIElOVEVSRkFDRV9ERlBfTE9XOgorCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpCisJCQlicmVhazsKKworCQlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgwMCwgQklUNCk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjlCLCBWSUFDUiwgMHgwMCwgQklUNCk7CisJCX0gZWxzZSB7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjlCLCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCX0KKworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwgMHgwMywgQklUMCArIEJJVDEpOworCQlkdmlfcGF0Y2hfc2tld19kdnBfbG93KCk7CisJCWJyZWFrOworCisJY2FzZSBJTlRFUkZBQ0VfVE1EUzoKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJZWxzZQorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MTAsIEJJVDQpOworCQlicmVhazsKKwl9CisKKwlpZiAoc2V0X2lnYSA9PSBJR0EyKSB7CisJCWVuYWJsZV9zZWNvbmRfZGlzcGxheV9jaGFubmVsKCk7CisJCS8qIERpc2FibGUgTENEIFNjYWxpbmcgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I3OSwgVklBQ1IsIDB4MDAsIEJJVDApOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0X2xjZF9vdXRwdXRfcGF0aChpbnQgc2V0X2lnYSwgaW50IG91dHB1dF9pbnRlcmZhY2UpCit7CisJREVCVUdfTVNHKEtFUk5fSU5GTworCQkgICJzZXRfbGNkX291dHB1dF9wYXRoLCBpZ2E6JWQsb3V0X2ludGVyZmFjZTolZFxuIiwKKwkJICBzZXRfaWdhLCBvdXRwdXRfaW50ZXJmYWNlKTsKKwlzd2l0Y2ggKHNldF9pZ2EpIHsKKwljYXNlIElHQTE6CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkIsIFZJQUNSLCAweDAwLCBCSVQzKTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDgsIEJJVDMpOworCisJCWRpc2FibGVfc2Vjb25kX2Rpc3BsYXlfY2hhbm5lbCgpOworCQlicmVhazsKKworCWNhc2UgSUdBMjoKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QiwgVklBQ1IsIDB4MDAsIEJJVDMpOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHgwOCwgQklUMyk7CisKKwkJZW5hYmxlX3NlY29uZF9kaXNwbGF5X2NoYW5uZWwoKTsKKwkJYnJlYWs7CisKKwljYXNlIElHQTFfSUdBMjoKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QiwgVklBQ1IsIDB4MDgsIEJJVDMpOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHgwOCwgQklUMyk7CisKKwkJZGlzYWJsZV9zZWNvbmRfZGlzcGxheV9jaGFubmVsKCk7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAob3V0cHV0X2ludGVyZmFjZSkgeworCWNhc2UgSU5URVJGQUNFX0RWUDA6CisJCWlmIChzZXRfaWdhID09IElHQTEpIHsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJfSBlbHNlIHsKKwkJCXZpYWZiX3dyaXRlX3JlZyhDUjkxLCBWSUFDUiwgMHgwMCk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElOVEVSRkFDRV9EVlAxOgorCQlpZiAoc2V0X2lnYSA9PSBJR0ExKQorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5QiwgVklBQ1IsIDB4MDAsIEJJVDQpOworCQllbHNlIHsKKwkJCXZpYWZiX3dyaXRlX3JlZyhDUjkxLCBWSUFDUiwgMHgwMCk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjlCLCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElOVEVSRkFDRV9ERlBfSElHSDoKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJZWxzZSB7CisJCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsIDB4MDApOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsIDB4MTAsIEJJVDQpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NiwgVklBQ1IsIDB4MTAsIEJJVDQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJTlRFUkZBQ0VfREZQX0xPVzoKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJZWxzZSB7CisJCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsIDB4MDApOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MTAsIEJJVDQpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5QiwgVklBQ1IsIDB4MTAsIEJJVDQpOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIElOVEVSRkFDRV9ERlA6CisJCWlmICgoVU5JQ0hST01FX0s4TTg5MCA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpCisJCSAgICB8fCAoVU5JQ0hST01FX1A0TTg5MCA9PQorCQkgICAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSkKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCAweDg0LAorCQkJCSAgICAgICBCSVQ3ICsgQklUMiArIEJJVDEgKyBCSVQwKTsKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkgeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsIDB4MDAsIEJJVDQpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MDAsIEJJVDQpOworCQl9IGVsc2UgeworCQkJdmlhZmJfd3JpdGVfcmVnKENSOTEsIFZJQUNSLCAweDAwKTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSU5URVJGQUNFX0xWRFMwOgorCWNhc2UgSU5URVJGQUNFX0xWRFMwTFZEUzE6CisJCWlmIChzZXRfaWdhID09IElHQTEpCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgwMCwgQklUNCk7CisJCWVsc2UKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDEwLCBCSVQ0KTsKKworCQlicmVhazsKKworCWNhc2UgSU5URVJGQUNFX0xWRFMxOgorCQlpZiAoc2V0X2lnYSA9PSBJR0ExKQorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsIDB4MDAsIEJJVDQpOworCQllbHNlCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCWJyZWFrOworCX0KK30KKworLyogU2VhcmNoIE1vZGUgSW5kZXggKi8KK3N0YXRpYyBpbnQgc2VhcmNoX21vZGVfc2V0dGluZyhpbnQgTW9kZUluZm9JbmRleCkKK3sKKwlpbnQgaSA9IDA7CisKKwl3aGlsZSAoKGkgPCBOVU1fVE9UQUxfTU9ERVRBQkxFKSAmJgorCQkJKE1vZGVJbmZvSW5kZXggIT0gQ0xFMjY2TW9kZXNbaV0uTW9kZUluZGV4KSkKKwkJaSsrOworCWlmIChpID49IE5VTV9UT1RBTF9NT0RFVEFCTEUpCisJCWkgPSAwOworCXJldHVybiBpOworCit9CisKK3N0cnVjdCBWaWRlb01vZGVUYWJsZSAqdmlhZmJfZ2V0X21vZGV0YmxfcG9pbnRlcihpbnQgSW5kZXgpCit7CisJc3RydWN0IFZpZGVvTW9kZVRhYmxlICpUbXBUYmwgPSBOVUxMOworCVRtcFRibCA9ICZDTEUyNjZNb2Rlc1tzZWFyY2hfbW9kZV9zZXR0aW5nKEluZGV4KV07CisJcmV0dXJuIFRtcFRibDsKK30KKworc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2aWFmYl9nZXRfY2VhX21vZGVfdGJsX3BvaW50ZXIoaW50IEluZGV4KQoreworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqVG1wVGJsID0gTlVMTDsKKwlpbnQgaSA9IDA7CisJd2hpbGUgKChpIDwgTlVNX1RPVEFMX0NFQV9NT0RFUykgJiYKKwkJCShJbmRleCAhPSBDRUFfSERNSV9Nb2Rlc1tpXS5Nb2RlSW5kZXgpKQorCQlpKys7CisJaWYgKChpIDwgTlVNX1RPVEFMX0NFQV9NT0RFUykpCisJCVRtcFRibCA9ICZDRUFfSERNSV9Nb2Rlc1tpXTsKKwkgZWxzZSB7CisJCS8qU3RpbGwgdXNlIGdlbmVyYWwgdGltaW5nIGlmIGRvbid0IGZpbmQgQ0VBIHRpbWluZyAqLworCQlpID0gMDsKKwkJd2hpbGUgKChpIDwgTlVNX1RPVEFMX01PREVUQUJMRSkgJiYKKwkJCQkoSW5kZXggIT0gQ0xFMjY2TW9kZXNbaV0uTW9kZUluZGV4KSkKKwkJICAgICAgIGkrKzsKKwkJaWYgKGkgPj0gTlVNX1RPVEFMX01PREVUQUJMRSkKKwkJCWkgPSAwOworCQlUbXBUYmwgPSAmQ0xFMjY2TW9kZXNbaV07CisJfQorCXJldHVybiBUbXBUYmw7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfZml4X2JpdF9jcnRjX3JlZyh2b2lkKQoreworCS8qIGFsd2F5cyBzZXQgdG8gMSAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMDMsIFZJQUNSLCAweDgwLCBCSVQ3KTsKKwkvKiBsaW5lIGNvbXBhcmUgc2hvdWxkIHNldCBhbGwgYml0cyA9IDEgKGV4dGVuZCBtb2RlcykgKi8KKwl2aWFmYl93cml0ZV9yZWcoQ1IxOCwgVklBQ1IsIDB4ZmYpOworCS8qIGxpbmUgY29tcGFyZSBzaG91bGQgc2V0IGFsbCBiaXRzID0gMSAoZXh0ZW5kIG1vZGVzKSAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMDcsIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkvKiBsaW5lIGNvbXBhcmUgc2hvdWxkIHNldCBhbGwgYml0cyA9IDEgKGV4dGVuZCBtb2RlcykgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjA5LCBWSUFDUiwgMHg0MCwgQklUNik7CisJLyogbGluZSBjb21wYXJlIHNob3VsZCBzZXQgYWxsIGJpdHMgPSAxIChleHRlbmQgbW9kZXMpICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IzNSwgVklBQ1IsIDB4MTAsIEJJVDQpOworCS8qIGxpbmUgY29tcGFyZSBzaG91bGQgc2V0IGFsbCBiaXRzID0gMSAoZXh0ZW5kIG1vZGVzKSAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzMsIFZJQUNSLCAweDA2LCBCSVQwICsgQklUMSArIEJJVDIpOworCS8qdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IzMiwgVklBQ1IsIDB4MDEsIEJJVDApOyAqLworCS8qIGV4dGVuZCBtb2RlIGFsd2F5cyBzZXQgdG8gZTNoICovCisJdmlhZmJfd3JpdGVfcmVnKENSMTcsIFZJQUNSLCAweGUzKTsKKwkvKiBleHRlbmQgbW9kZSBhbHdheXMgc2V0IHRvIDBoICovCisJdmlhZmJfd3JpdGVfcmVnKENSMDgsIFZJQUNSLCAweDAwKTsKKwkvKiBleHRlbmQgbW9kZSBhbHdheXMgc2V0IHRvIDBoICovCisJdmlhZmJfd3JpdGVfcmVnKENSMTQsIFZJQUNSLCAweDAwKTsKKworCS8qIElmIEs4TTgwMCwgZW5hYmxlIFByZWZldGNoIE1vZGUuICovCisJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4MDApCisJCXx8ICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4TTg5MCkpCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzMsIFZJQUNSLCAweDA4LCBCSVQzKTsKKwlpZiAoKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2KQorCSAgICAmJiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9yZXZpc2lvbiA9PSBDTEUyNjZfUkVWSVNJT05fQVgpKQorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFBLCBWSUFTUiwgMHgwMiwgQklUMSk7CisKK30KKwordm9pZCB2aWFmYl9sb2FkX3JlZyhpbnQgdGltaW5nX3ZhbHVlLCBpbnQgdmlhZmJfbG9hZF9yZWdfbnVtLAorCXN0cnVjdCBpb19yZWdpc3RlciAqcmVnLAorCSAgICAgIGludCBpb190eXBlKQoreworCWludCByZWdfbWFzazsKKwlpbnQgYml0X251bSA9IDA7CisJaW50IGRhdGE7CisJaW50IGksIGo7CisJaW50IHNoaWZ0X25leHRfcmVnOworCWludCBzdGFydF9pbmRleCwgZW5kX2luZGV4LCBjcl9pbmRleDsKKwl1MTYgZ2V0X2JpdDsKKworCWZvciAoaSA9IDA7IGkgPCB2aWFmYl9sb2FkX3JlZ19udW07IGkrKykgeworCQlyZWdfbWFzayA9IDA7CisJCWRhdGEgPSAwOworCQlzdGFydF9pbmRleCA9IHJlZ1tpXS5zdGFydF9iaXQ7CisJCWVuZF9pbmRleCA9IHJlZ1tpXS5lbmRfYml0OworCQljcl9pbmRleCA9IHJlZ1tpXS5pb19hZGRyOworCisJCXNoaWZ0X25leHRfcmVnID0gYml0X251bTsKKwkJZm9yIChqID0gc3RhcnRfaW5kZXg7IGogPD0gZW5kX2luZGV4OyBqKyspIHsKKwkJCS8qaWYgKGJpdF9udW09PTgpIHRpbWluZ192YWx1ZSA9IHRpbWluZ192YWx1ZSA+Pjg7ICovCisJCQlyZWdfbWFzayA9IHJlZ19tYXNrIHwgKEJJVDAgPDwgaik7CisJCQlnZXRfYml0ID0gKHRpbWluZ192YWx1ZSAmIChCSVQwIDw8IGJpdF9udW0pKTsKKwkJCWRhdGEgPQorCQkJICAgIGRhdGEgfCAoKGdldF9iaXQgPj4gc2hpZnRfbmV4dF9yZWcpIDw8IHN0YXJ0X2luZGV4KTsKKwkJCWJpdF9udW0rKzsKKwkJfQorCQlpZiAoaW9fdHlwZSA9PSBWSUFDUikKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKGNyX2luZGV4LCBWSUFDUiwgZGF0YSwgcmVnX21hc2spOworCQllbHNlCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhjcl9pbmRleCwgVklBU1IsIGRhdGEsIHJlZ19tYXNrKTsKKwl9CisKK30KKworLyogV3JpdGUgUmVnaXN0ZXJzICovCit2b2lkIHZpYWZiX3dyaXRlX3JlZ3goc3RydWN0IGlvX3JlZyBSZWdUYWJsZVtdLCBpbnQgSXRlbU51bSkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIFJlZ1RlbXA7CisKKwkvKkRFQlVHX01TRyhLRVJOX0lORk8gIlRhYmxlIFNpemUgOiAleCEhXG4iLEl0ZW1OdW0gKTsgKi8KKworCWZvciAoaSA9IDA7IGkgPCBJdGVtTnVtOyBpKyspIHsKKwkJb3V0YihSZWdUYWJsZVtpXS5pbmRleCwgUmVnVGFibGVbaV0ucG9ydCk7CisJCVJlZ1RlbXAgPSBpbmIoUmVnVGFibGVbaV0ucG9ydCArIDEpOworCQlSZWdUZW1wID0gKFJlZ1RlbXAgJiAoflJlZ1RhYmxlW2ldLm1hc2spKSB8IFJlZ1RhYmxlW2ldLnZhbHVlOworCQlvdXRiKFJlZ1RlbXAsIFJlZ1RhYmxlW2ldLnBvcnQgKyAxKTsKKwl9Cit9CisKK3ZvaWQgdmlhZmJfbG9hZF9vZmZzZXRfcmVnKGludCBoX2FkZHIsIGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpCit7CisJaW50IHJlZ192YWx1ZTsKKwlpbnQgdmlhZmJfbG9hZF9yZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciAqcmVnOworCisJc3dpdGNoIChzZXRfaWdhKSB7CisJY2FzZSBJR0ExX0lHQTI6CisJY2FzZSBJR0ExOgorCQlyZWdfdmFsdWUgPSBJR0ExX09GRlNFVF9GT1JNVUxBKGhfYWRkciwgYnBwX2J5dGUpOworCQl2aWFmYl9sb2FkX3JlZ19udW0gPSBvZmZzZXRfcmVnLmlnYTFfb2Zmc2V0X3JlZy5yZWdfbnVtOworCQlyZWcgPSBvZmZzZXRfcmVnLmlnYTFfb2Zmc2V0X3JlZy5yZWc7CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkKKwkJCWJyZWFrOworCWNhc2UgSUdBMjoKKwkJcmVnX3ZhbHVlID0gSUdBMl9PRkZTRVRfRk9STVVMQShoX2FkZHIsIGJwcF9ieXRlKTsKKwkJdmlhZmJfbG9hZF9yZWdfbnVtID0gb2Zmc2V0X3JlZy5pZ2EyX29mZnNldF9yZWcucmVnX251bTsKKwkJcmVnID0gb2Zmc2V0X3JlZy5pZ2EyX29mZnNldF9yZWcucmVnOworCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJCWJyZWFrOworCX0KK30KKwordm9pZCB2aWFmYl9sb2FkX2ZldGNoX2NvdW50X3JlZyhpbnQgaF9hZGRyLCBpbnQgYnBwX2J5dGUsIGludCBzZXRfaWdhKQoreworCWludCByZWdfdmFsdWU7CisJaW50IHZpYWZiX2xvYWRfcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgKnJlZyA9IE5VTEw7CisKKwlzd2l0Y2ggKHNldF9pZ2EpIHsKKwljYXNlIElHQTFfSUdBMjoKKwljYXNlIElHQTE6CisJCXJlZ192YWx1ZSA9IElHQTFfRkVUQ0hfQ09VTlRfRk9STVVMQShoX2FkZHIsIGJwcF9ieXRlKTsKKwkJdmlhZmJfbG9hZF9yZWdfbnVtID0gZmV0Y2hfY291bnRfcmVnLgorCQkJaWdhMV9mZXRjaF9jb3VudF9yZWcucmVnX251bTsKKwkJcmVnID0gZmV0Y2hfY291bnRfcmVnLmlnYTFfZmV0Y2hfY291bnRfcmVnLnJlZzsKKwkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBU1IpOworCQlpZiAoc2V0X2lnYSA9PSBJR0ExKQorCQkJYnJlYWs7CisJY2FzZSBJR0EyOgorCQlyZWdfdmFsdWUgPSBJR0EyX0ZFVENIX0NPVU5UX0ZPUk1VTEEoaF9hZGRyLCBicHBfYnl0ZSk7CisJCXZpYWZiX2xvYWRfcmVnX251bSA9IGZldGNoX2NvdW50X3JlZy4KKwkJCWlnYTJfZmV0Y2hfY291bnRfcmVnLnJlZ19udW07CisJCXJlZyA9IGZldGNoX2NvdW50X3JlZy5pZ2EyX2ZldGNoX2NvdW50X3JlZy5yZWc7CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKwkJYnJlYWs7CisJfQorCit9CisKK3ZvaWQgdmlhZmJfbG9hZF9GSUZPX3JlZyhpbnQgc2V0X2lnYSwgaW50IGhvcl9hY3RpdmUsIGludCB2ZXJfYWN0aXZlKQoreworCWludCByZWdfdmFsdWU7CisJaW50IHZpYWZiX2xvYWRfcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgKnJlZyA9IE5VTEw7CisJaW50IGlnYTFfZmlmb19tYXhfZGVwdGggPSAwLCBpZ2ExX2ZpZm9fdGhyZXNob2xkID0KKwkgICAgMCwgaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0gMCwgaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPSAwOworCWludCBpZ2EyX2ZpZm9fbWF4X2RlcHRoID0gMCwgaWdhMl9maWZvX3RocmVzaG9sZCA9CisJICAgIDAsIGlnYTJfZmlmb19oaWdoX3RocmVzaG9sZCA9IDAsIGlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0gMDsKKworCWlmIChzZXRfaWdhID09IElHQTEpIHsKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfSzgwMCkgeworCQkJaWdhMV9maWZvX21heF9kZXB0aCA9IEs4MDBfSUdBMV9GSUZPX01BWF9ERVBUSDsKKwkJCWlnYTFfZmlmb190aHJlc2hvbGQgPSBLODAwX0lHQTFfRklGT19USFJFU0hPTEQ7CisJCQlpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIEs4MDBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJLyogSWYgcmVzb2x1dGlvbiA+IDEyODB4MTAyNCwgZXhwaXJlIGxlbmd0aCA9IDY0LCBlbHNlCisJCQkgICBleHBpcmUgbGVuZ3RoID0gMTI4ICovCisJCQlpZiAoKGhvcl9hY3RpdmUgPiAxMjgwKSAmJiAodmVyX2FjdGl2ZSA+IDEwMjQpKQorCQkJCWlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0gMTY7CisJCQllbHNlCisJCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJCSAgICBLODAwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCisJCX0KKworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9QTTgwMCkgeworCQkJaWdhMV9maWZvX21heF9kZXB0aCA9IFA4ODBfSUdBMV9GSUZPX01BWF9ERVBUSDsKKwkJCWlnYTFfZmlmb190aHJlc2hvbGQgPSBQODgwX0lHQTFfRklGT19USFJFU0hPTEQ7CisJCQlpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIFA4ODBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIFA4ODBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CisKKwkJCS8qIElmIHJlc29sdXRpb24gPiAxMjgweDEwMjQsIGV4cGlyZSBsZW5ndGggPSA2NCwgZWxzZQorCQkJICAgZXhwaXJlIGxlbmd0aCA9IDEyOCAqLworCQkJaWYgKChob3JfYWN0aXZlID4gMTI4MCkgJiYgKHZlcl9hY3RpdmUgPiAxMDI0KSkKKwkJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9IDE2OworCQkJZWxzZQorCQkJCWlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCQkgICAgUDg4MF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NONzAwKSB7CisJCQlpZ2ExX2ZpZm9fbWF4X2RlcHRoID0gQ043MDBfSUdBMV9GSUZPX01BWF9ERVBUSDsKKwkJCWlnYTFfZmlmb190aHJlc2hvbGQgPSBDTjcwMF9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBDTjcwMF9JR0ExX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisKKwkJCS8qIElmIHJlc29sdXRpb24gPiAxMjgweDEwMjQsIGV4cGlyZSBsZW5ndGggPSA2NCwKKwkJCSAgIGVsc2UgZXhwaXJlIGxlbmd0aCA9IDEyOCAqLworCQkJaWYgKChob3JfYWN0aXZlID4gMTI4MCkgJiYgKHZlcl9hY3RpdmUgPiAxMDI0KSkKKwkJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9IDE2OworCQkJZWxzZQorCQkJCWlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCQkgICAgQ043MDBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CisJCX0KKworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DWDcwMCkgeworCQkJaWdhMV9maWZvX21heF9kZXB0aCA9IENYNzAwX0lHQTFfRklGT19NQVhfREVQVEg7CisJCQlpZ2ExX2ZpZm9fdGhyZXNob2xkID0gQ1g3MDBfSUdBMV9GSUZPX1RIUkVTSE9MRDsKKwkJCWlnYTFfZmlmb19oaWdoX3RocmVzaG9sZCA9CisJCQkgICAgQ1g3MDBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIENYNzAwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfSzhNODkwKSB7CisJCQlpZ2ExX2ZpZm9fbWF4X2RlcHRoID0gSzhNODkwX0lHQTFfRklGT19NQVhfREVQVEg7CisJCQlpZ2ExX2ZpZm9fdGhyZXNob2xkID0gSzhNODkwX0lHQTFfRklGT19USFJFU0hPTEQ7CisJCQlpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIEs4TTg5MF9JR0ExX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkgICAgSzhNODkwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfUDRNODkwKSB7CisJCQlpZ2ExX2ZpZm9fbWF4X2RlcHRoID0gUDRNODkwX0lHQTFfRklGT19NQVhfREVQVEg7CisJCQlpZ2ExX2ZpZm9fdGhyZXNob2xkID0gUDRNODkwX0lHQTFfRklGT19USFJFU0hPTEQ7CisJCQlpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIFA0TTg5MF9JR0ExX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkgICAgUDRNODkwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfUDRNOTAwKSB7CisJCQlpZ2ExX2ZpZm9fbWF4X2RlcHRoID0gUDRNOTAwX0lHQTFfRklGT19NQVhfREVQVEg7CisJCQlpZ2ExX2ZpZm9fdGhyZXNob2xkID0gUDRNOTAwX0lHQTFfRklGT19USFJFU0hPTEQ7CisJCQlpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIFA0TTkwMF9JR0ExX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkgICAgUDRNOTAwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfVlg4MDApIHsKKwkJCWlnYTFfZmlmb19tYXhfZGVwdGggPSBWWDgwMF9JR0ExX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMV9maWZvX3RocmVzaG9sZCA9IFZYODAwX0lHQTFfRklGT19USFJFU0hPTEQ7CisJCQlpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIFZYODAwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRDsKKwkJCWlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCSAgICBWWDgwMF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCS8qIFNldCBEaXNwbGF5IEZJRk8gRGVwYXRoIFNlbGVjdCAqLworCQlyZWdfdmFsdWUgPSBJR0ExX0ZJRk9fREVQVEhfU0VMRUNUX0ZPUk1VTEEoaWdhMV9maWZvX21heF9kZXB0aCk7CisJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCSAgICBkaXNwbGF5X2ZpZm9fZGVwdGhfcmVnLmlnYTFfZmlmb19kZXB0aF9zZWxlY3RfcmVnLnJlZ19udW07CisJCXJlZyA9IGRpc3BsYXlfZmlmb19kZXB0aF9yZWcuaWdhMV9maWZvX2RlcHRoX3NlbGVjdF9yZWcucmVnOworCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFTUik7CisKKwkJLyogU2V0IERpc3BsYXkgRklGTyBUaHJlc2hvbGQgU2VsZWN0ICovCisJCXJlZ192YWx1ZSA9IElHQTFfRklGT19USFJFU0hPTERfRk9STVVMQShpZ2ExX2ZpZm9fdGhyZXNob2xkKTsKKwkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJICAgIGZpZm9fdGhyZXNob2xkX3NlbGVjdF9yZWcuCisJCSAgICBpZ2ExX2ZpZm9fdGhyZXNob2xkX3NlbGVjdF9yZWcucmVnX251bTsKKwkJcmVnID0KKwkJICAgIGZpZm9fdGhyZXNob2xkX3NlbGVjdF9yZWcuCisJCSAgICBpZ2ExX2ZpZm9fdGhyZXNob2xkX3NlbGVjdF9yZWcucmVnOworCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFTUik7CisKKwkJLyogU2V0IEZJRk8gSGlnaCBUaHJlc2hvbGQgU2VsZWN0ICovCisJCXJlZ192YWx1ZSA9CisJCSAgICBJR0ExX0ZJRk9fSElHSF9USFJFU0hPTERfRk9STVVMQShpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGQpOworCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkgICAgZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3RfcmVnLgorCQkgICAgaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkX3NlbGVjdF9yZWcucmVnX251bTsKKwkJcmVnID0KKwkJICAgIGZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0X3JlZy4KKwkJICAgIGlnYTFfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZzsKKwkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBU1IpOworCisJCS8qIFNldCBEaXNwbGF5IFF1ZXVlIEV4cGlyZSBOdW0gKi8KKwkJcmVnX3ZhbHVlID0KKwkJICAgIElHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNX0ZPUk1VTEEKKwkJICAgIChpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSk7CisJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCSAgICBkaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW1fcmVnLgorCQkgICAgaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW1fcmVnLnJlZ19udW07CisJCXJlZyA9CisJCSAgICBkaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW1fcmVnLgorCQkgICAgaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW1fcmVnLnJlZzsKKwkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBU1IpOworCisJfSBlbHNlIHsKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfSzgwMCkgeworCQkJaWdhMl9maWZvX21heF9kZXB0aCA9IEs4MDBfSUdBMl9GSUZPX01BWF9ERVBUSDsKKwkJCWlnYTJfZmlmb190aHJlc2hvbGQgPSBLODAwX0lHQTJfRklGT19USFJFU0hPTEQ7CisJCQlpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIEs4MDBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEOworCisJCQkvKiBJZiByZXNvbHV0aW9uID4gMTI4MHgxMDI0LCBleHBpcmUgbGVuZ3RoID0gNjQsCisJCQkgICBlbHNlICBleHBpcmUgbGVuZ3RoID0gMTI4ICovCisJCQlpZiAoKGhvcl9hY3RpdmUgPiAxMjgwKSAmJiAodmVyX2FjdGl2ZSA+IDEwMjQpKQorCQkJCWlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0gMTY7CisJCQllbHNlCisJCQkJaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJCSAgICBLODAwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfUE04MDApIHsKKwkJCWlnYTJfZmlmb19tYXhfZGVwdGggPSBQODgwX0lHQTJfRklGT19NQVhfREVQVEg7CisJCQlpZ2EyX2ZpZm9fdGhyZXNob2xkID0gUDg4MF9JR0EyX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBQODgwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRDsKKworCQkJLyogSWYgcmVzb2x1dGlvbiA+IDEyODB4MTAyNCwgZXhwaXJlIGxlbmd0aCA9IDY0LAorCQkJICAgZWxzZSAgZXhwaXJlIGxlbmd0aCA9IDEyOCAqLworCQkJaWYgKChob3JfYWN0aXZlID4gMTI4MCkgJiYgKHZlcl9hY3RpdmUgPiAxMDI0KSkKKwkJCQlpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9IDE2OworCQkJZWxzZQorCQkJCWlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCQkgICAgUDg4MF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NONzAwKSB7CisJCQlpZ2EyX2ZpZm9fbWF4X2RlcHRoID0gQ043MDBfSUdBMl9GSUZPX01BWF9ERVBUSDsKKwkJCWlnYTJfZmlmb190aHJlc2hvbGQgPSBDTjcwMF9JR0EyX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBDTjcwMF9JR0EyX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisKKwkJCS8qIElmIHJlc29sdXRpb24gPiAxMjgweDEwMjQsIGV4cGlyZSBsZW5ndGggPSA2NCwKKwkJCSAgIGVsc2UgZXhwaXJlIGxlbmd0aCA9IDEyOCAqLworCQkJaWYgKChob3JfYWN0aXZlID4gMTI4MCkgJiYgKHZlcl9hY3RpdmUgPiAxMDI0KSkKKwkJCQlpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9IDE2OworCQkJZWxzZQorCQkJCWlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCQkgICAgQ043MDBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CisJCX0KKworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DWDcwMCkgeworCQkJaWdhMl9maWZvX21heF9kZXB0aCA9IENYNzAwX0lHQTJfRklGT19NQVhfREVQVEg7CisJCQlpZ2EyX2ZpZm9fdGhyZXNob2xkID0gQ1g3MDBfSUdBMl9GSUZPX1RIUkVTSE9MRDsKKwkJCWlnYTJfZmlmb19oaWdoX3RocmVzaG9sZCA9CisJCQkgICAgQ1g3MDBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIENYNzAwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfSzhNODkwKSB7CisJCQlpZ2EyX2ZpZm9fbWF4X2RlcHRoID0gSzhNODkwX0lHQTJfRklGT19NQVhfREVQVEg7CisJCQlpZ2EyX2ZpZm9fdGhyZXNob2xkID0gSzhNODkwX0lHQTJfRklGT19USFJFU0hPTEQ7CisJCQlpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIEs4TTg5MF9JR0EyX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisJCQlpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkgICAgSzhNODkwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfUDRNODkwKSB7CisJCQlpZ2EyX2ZpZm9fbWF4X2RlcHRoID0gUDRNODkwX0lHQTJfRklGT19NQVhfREVQVEg7CisJCQlpZ2EyX2ZpZm9fdGhyZXNob2xkID0gUDRNODkwX0lHQTJfRklGT19USFJFU0hPTEQ7CisJCQlpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIFA0TTg5MF9JR0EyX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisJCQlpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkgICAgUDRNODkwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfUDRNOTAwKSB7CisJCQlpZ2EyX2ZpZm9fbWF4X2RlcHRoID0gUDRNOTAwX0lHQTJfRklGT19NQVhfREVQVEg7CisJCQlpZ2EyX2ZpZm9fdGhyZXNob2xkID0gUDRNOTAwX0lHQTJfRklGT19USFJFU0hPTEQ7CisJCQlpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIFA0TTkwMF9JR0EyX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisJCQlpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkgICAgUDRNOTAwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfVlg4MDApIHsKKwkJCWlnYTJfZmlmb19tYXhfZGVwdGggPSBWWDgwMF9JR0EyX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMl9maWZvX3RocmVzaG9sZCA9IFZYODAwX0lHQTJfRklGT19USFJFU0hPTEQ7CisJCQlpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIFZYODAwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRDsKKwkJCWlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCSAgICBWWDgwMF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4MDApIHsKKwkJCS8qIFNldCBEaXNwbGF5IEZJRk8gRGVwYXRoIFNlbGVjdCAqLworCQkJcmVnX3ZhbHVlID0KKwkJCSAgICBJR0EyX0ZJRk9fREVQVEhfU0VMRUNUX0ZPUk1VTEEoaWdhMl9maWZvX21heF9kZXB0aCkKKwkJCSAgICAtIDE7CisJCQkvKiBQYXRjaCBMQ0QgaW4gSUdBMiBjYXNlICovCisJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJICAgIGRpc3BsYXlfZmlmb19kZXB0aF9yZWcuCisJCQkgICAgaWdhMl9maWZvX2RlcHRoX3NlbGVjdF9yZWcucmVnX251bTsKKwkJCXJlZyA9CisJCQkgICAgZGlzcGxheV9maWZvX2RlcHRoX3JlZy4KKwkJCSAgICBpZ2EyX2ZpZm9fZGVwdGhfc2VsZWN0X3JlZy5yZWc7CisJCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsCisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKwkJfSBlbHNlIHsKKworCQkJLyogU2V0IERpc3BsYXkgRklGTyBEZXBhdGggU2VsZWN0ICovCisJCQlyZWdfdmFsdWUgPQorCQkJICAgIElHQTJfRklGT19ERVBUSF9TRUxFQ1RfRk9STVVMQShpZ2EyX2ZpZm9fbWF4X2RlcHRoKTsKKwkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkgICAgZGlzcGxheV9maWZvX2RlcHRoX3JlZy4KKwkJCSAgICBpZ2EyX2ZpZm9fZGVwdGhfc2VsZWN0X3JlZy5yZWdfbnVtOworCQkJcmVnID0KKwkJCSAgICBkaXNwbGF5X2ZpZm9fZGVwdGhfcmVnLgorCQkJICAgIGlnYTJfZmlmb19kZXB0aF9zZWxlY3RfcmVnLnJlZzsKKwkJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOworCQl9CisKKwkJLyogU2V0IERpc3BsYXkgRklGTyBUaHJlc2hvbGQgU2VsZWN0ICovCisJCXJlZ192YWx1ZSA9IElHQTJfRklGT19USFJFU0hPTERfRk9STVVMQShpZ2EyX2ZpZm9fdGhyZXNob2xkKTsKKwkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJICAgIGZpZm9fdGhyZXNob2xkX3NlbGVjdF9yZWcuCisJCSAgICBpZ2EyX2ZpZm9fdGhyZXNob2xkX3NlbGVjdF9yZWcucmVnX251bTsKKwkJcmVnID0KKwkJICAgIGZpZm9fdGhyZXNob2xkX3NlbGVjdF9yZWcuCisJCSAgICBpZ2EyX2ZpZm9fdGhyZXNob2xkX3NlbGVjdF9yZWcucmVnOworCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisKKwkJLyogU2V0IEZJRk8gSGlnaCBUaHJlc2hvbGQgU2VsZWN0ICovCisJCXJlZ192YWx1ZSA9CisJCSAgICBJR0EyX0ZJRk9fSElHSF9USFJFU0hPTERfRk9STVVMQShpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGQpOworCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkgICAgZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3RfcmVnLgorCQkgICAgaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkX3NlbGVjdF9yZWcucmVnX251bTsKKwkJcmVnID0KKwkJICAgIGZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0X3JlZy4KKwkJICAgIGlnYTJfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZzsKKwkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOworCisJCS8qIFNldCBEaXNwbGF5IFF1ZXVlIEV4cGlyZSBOdW0gKi8KKwkJcmVnX3ZhbHVlID0KKwkJICAgIElHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNX0ZPUk1VTEEKKwkJICAgIChpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSk7CisJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCSAgICBkaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW1fcmVnLgorCQkgICAgaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW1fcmVnLnJlZ19udW07CisJCXJlZyA9CisJCSAgICBkaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW1fcmVnLgorCQkgICAgaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW1fcmVnLnJlZzsKKwkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOworCisJfQorCit9CisKK3UzMiB2aWFmYl9nZXRfY2xrX3ZhbHVlKGludCBjbGspCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1RPVEFMX1BMTF9UQUJMRTsgaSsrKSB7CisJCWlmIChjbGsgPT0gcGxsX3ZhbHVlW2ldLmNsaykgeworCQkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKKwkJCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCQkJcmV0dXJuIHBsbF92YWx1ZVtpXS5jbGUyNjZfcGxsOworCisJCQljYXNlIFVOSUNIUk9NRV9LODAwOgorCQkJY2FzZSBVTklDSFJPTUVfUE04MDA6CisJCQljYXNlIFVOSUNIUk9NRV9DTjcwMDoKKwkJCQlyZXR1cm4gcGxsX3ZhbHVlW2ldLms4MDBfcGxsOworCisJCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwkJCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwkJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJCWNhc2UgVU5JQ0hST01FX1ZYODAwOgorCQkJCXJldHVybiBwbGxfdmFsdWVbaV0uY3g3MDBfcGxsOworCQkJfQorCQl9CisJfQorCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiQ2FuJ3QgZmluZCBtYXRjaCBQTEwgdmFsdWVcblxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qIFNldCBWQ0xLKi8KK3ZvaWQgdmlhZmJfc2V0X3ZjbG9jayh1MzIgQ0xLLCBpbnQgc2V0X2lnYSkKK3sKKwl1bnNpZ25lZCBjaGFyIFJlZ1RlbXA7CisKKwkvKiBILlcuIFJlc2V0IDogT04gKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHgwMCwgQklUNyk7CisKKwlpZiAoKHNldF9pZ2EgPT0gSUdBMSkgfHwgKHNldF9pZ2EgPT0gSUdBMV9JR0EyKSkgeworCQkvKiBDaGFuZ2UgRCxOIEZPUiBWQ0xLICovCisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKKwkJY2FzZSBVTklDSFJPTUVfSzQwMDoKKwkJCXZpYWZiX3dyaXRlX3JlZyhTUjQ2LCBWSUFTUiwgQ0xLIC8gMHgxMDApOworCQkJdmlhZmJfd3JpdGVfcmVnKFNSNDcsIFZJQVNSLCBDTEsgJSAweDEwMCk7CisJCQlicmVhazsKKworCQljYXNlIFVOSUNIUk9NRV9LODAwOgorCQljYXNlIFVOSUNIUk9NRV9QTTgwMDoKKwkJY2FzZSBVTklDSFJPTUVfQ043MDA6CisJCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCQljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQljYXNlIFVOSUNIUk9NRV9WWDgwMDoKKwkJCXZpYWZiX3dyaXRlX3JlZyhTUjQ0LCBWSUFTUiwgQ0xLIC8gMHgxMDAwMCk7CisJCQlERUJVR19NU0coS0VSTl9JTkZPICJcblNSNDQ9JXgiLCBDTEsgLyAweDEwMDAwKTsKKwkJCXZpYWZiX3dyaXRlX3JlZyhTUjQ1LCBWSUFTUiwgKENMSyAmIDB4RkZGRikgLyAweDEwMCk7CisJCQlERUJVR19NU0coS0VSTl9JTkZPICJcblNSNDU9JXgiLAorCQkJCSAgKENMSyAmIDB4RkZGRikgLyAweDEwMCk7CisJCQl2aWFmYl93cml0ZV9yZWcoU1I0NiwgVklBU1IsIENMSyAlIDB4MTAwKTsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuU1I0Nj0leCIsIENMSyAlIDB4MTAwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKChzZXRfaWdhID09IElHQTIpIHx8IChzZXRfaWdhID09IElHQTFfSUdBMikpIHsKKwkJLyogQ2hhbmdlIEQsTiBGT1IgTENLICovCisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKKwkJY2FzZSBVTklDSFJPTUVfSzQwMDoKKwkJCXZpYWZiX3dyaXRlX3JlZyhTUjQ0LCBWSUFTUiwgQ0xLIC8gMHgxMDApOworCQkJdmlhZmJfd3JpdGVfcmVnKFNSNDUsIFZJQVNSLCBDTEsgJSAweDEwMCk7CisJCQlicmVhazsKKworCQljYXNlIFVOSUNIUk9NRV9LODAwOgorCQljYXNlIFVOSUNIUk9NRV9QTTgwMDoKKwkJY2FzZSBVTklDSFJPTUVfQ043MDA6CisJCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCQljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQljYXNlIFVOSUNIUk9NRV9WWDgwMDoKKwkJCXZpYWZiX3dyaXRlX3JlZyhTUjRBLCBWSUFTUiwgQ0xLIC8gMHgxMDAwMCk7CisJCQl2aWFmYl93cml0ZV9yZWcoU1I0QiwgVklBU1IsIChDTEsgJiAweEZGRkYpIC8gMHgxMDApOworCQkJdmlhZmJfd3JpdGVfcmVnKFNSNEMsIFZJQVNSLCBDTEsgJSAweDEwMCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIEguVy4gUmVzZXQgOiBPRkYgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHg4MCwgQklUNyk7CisKKwkvKiBSZXNldCBQTEwgKi8KKwlpZiAoKHNldF9pZ2EgPT0gSUdBMSkgfHwgKHNldF9pZ2EgPT0gSUdBMV9JR0EyKSkgeworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMiwgQklUMSk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNDAsIFZJQVNSLCAweDAwLCBCSVQxKTsKKwl9CisKKwlpZiAoKHNldF9pZ2EgPT0gSUdBMikgfHwgKHNldF9pZ2EgPT0gSUdBMV9JR0EyKSkgeworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMSwgQklUMCk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNDAsIFZJQVNSLCAweDAwLCBCSVQwKTsKKwl9CisKKwkvKiBGaXJlISAqLworCVJlZ1RlbXAgPSBpbmIoVklBUk1pc2MpOworCW91dGIoUmVnVGVtcCB8IChCSVQyICsgQklUMyksIFZJQVdNaXNjKTsKK30KKwordm9pZCB2aWFmYl9sb2FkX2NydGNfdGltaW5nKHN0cnVjdCBkaXNwbGF5X3RpbWluZyBkZXZpY2VfdGltaW5nLAorCWludCBzZXRfaWdhKQoreworCWludCBpOworCWludCB2aWFmYl9sb2FkX3JlZ19udW0gPSAwOworCWludCByZWdfdmFsdWUgPSAwOworCXN0cnVjdCBpb19yZWdpc3RlciAqcmVnID0gTlVMTDsKKworCXZpYWZiX3VubG9ja19jcnQoKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7CisJCWlmIChzZXRfaWdhID09IElHQTEpIHsKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSBIX1RPVEFMX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfSE9SX1RPVEFMX0ZPUk1VTEEoZGV2aWNlX3RpbWluZy4KKwkJCQkJCQkgICBob3JfdG90YWwpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJCWlnYTFfY3J0Y19yZWcuaG9yX3RvdGFsLnJlZ19udW07CisJCQkJcmVnID0gaWdhMV9jcnRjX3JlZy5ob3JfdG90YWwucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBIX0FERFJfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMV9IT1JfQUREUl9GT1JNVUxBKGRldmljZV90aW1pbmcuCisJCQkJCQkJICBob3JfYWRkcik7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkJaWdhMV9jcnRjX3JlZy5ob3JfYWRkci5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTFfY3J0Y19yZWcuaG9yX2FkZHIucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBIX0JMQU5LX1NUQVJUX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfSE9SX0JMQU5LX1NUQVJUX0ZPUk1VTEEKKwkJCQkgICAgKGRldmljZV90aW1pbmcuaG9yX2JsYW5rX3N0YXJ0KTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCSAgICBpZ2ExX2NydGNfcmVnLmhvcl9ibGFua19zdGFydC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTFfY3J0Y19yZWcuaG9yX2JsYW5rX3N0YXJ0LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9CTEFOS19FTkRfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMV9IT1JfQkxBTktfRU5EX0ZPUk1VTEEKKwkJCQkgICAgKGRldmljZV90aW1pbmcuaG9yX2JsYW5rX3N0YXJ0LAorCQkJCSAgICAgZGV2aWNlX3RpbWluZy5ob3JfYmxhbmtfZW5kKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCSAgICBpZ2ExX2NydGNfcmVnLmhvcl9ibGFua19lbmQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLmhvcl9ibGFua19lbmQucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBIX1NZTkNfU1RBUlRfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMV9IT1JfU1lOQ19TVEFSVF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLmhvcl9zeW5jX3N0YXJ0KTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCSAgICBpZ2ExX2NydGNfcmVnLmhvcl9zeW5jX3N0YXJ0LnJlZ19udW07CisJCQkJcmVnID0gaWdhMV9jcnRjX3JlZy5ob3Jfc3luY19zdGFydC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIEhfU1lOQ19FTkRfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMV9IT1JfU1lOQ19FTkRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy5ob3Jfc3luY19zdGFydCwKKwkJCQkgICAgIGRldmljZV90aW1pbmcuaG9yX3N5bmNfZW5kKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCSAgICBpZ2ExX2NydGNfcmVnLmhvcl9zeW5jX2VuZC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTFfY3J0Y19yZWcuaG9yX3N5bmNfZW5kLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9UT1RBTF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX1ZFUl9UT1RBTF9GT1JNVUxBKGRldmljZV90aW1pbmcuCisJCQkJCQkJICAgdmVyX3RvdGFsKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCQlpZ2ExX2NydGNfcmVnLnZlcl90b3RhbC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTFfY3J0Y19yZWcudmVyX3RvdGFsLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9BRERSX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfVkVSX0FERFJfRk9STVVMQShkZXZpY2VfdGltaW5nLgorCQkJCQkJCSAgdmVyX2FkZHIpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJCWlnYTFfY3J0Y19yZWcudmVyX2FkZHIucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLnZlcl9hZGRyLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9CTEFOS19TVEFSVF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX1ZFUl9CTEFOS19TVEFSVF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLnZlcl9ibGFua19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMV9jcnRjX3JlZy52ZXJfYmxhbmtfc3RhcnQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLnZlcl9ibGFua19zdGFydC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfQkxBTktfRU5EX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfVkVSX0JMQU5LX0VORF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLnZlcl9ibGFua19zdGFydCwKKwkJCQkgICAgIGRldmljZV90aW1pbmcudmVyX2JsYW5rX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMV9jcnRjX3JlZy52ZXJfYmxhbmtfZW5kLnJlZ19udW07CisJCQkJcmVnID0gaWdhMV9jcnRjX3JlZy52ZXJfYmxhbmtfZW5kLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9TWU5DX1NUQVJUX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfVkVSX1NZTkNfU1RBUlRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy52ZXJfc3luY19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMV9jcnRjX3JlZy52ZXJfc3luY19zdGFydC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTFfY3J0Y19yZWcudmVyX3N5bmNfc3RhcnQucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX1NZTkNfRU5EX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfVkVSX1NZTkNfRU5EX0ZPUk1VTEEKKwkJCQkgICAgKGRldmljZV90aW1pbmcudmVyX3N5bmNfc3RhcnQsCisJCQkJICAgICBkZXZpY2VfdGltaW5nLnZlcl9zeW5jX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMV9jcnRjX3JlZy52ZXJfc3luY19lbmQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLnZlcl9zeW5jX2VuZC5yZWc7CisJCQkJYnJlYWs7CisKKwkJCX0KKwkJfQorCisJCWlmIChzZXRfaWdhID09IElHQTIpIHsKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSBIX1RPVEFMX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfSE9SX1RPVEFMX0ZPUk1VTEEoZGV2aWNlX3RpbWluZy4KKwkJCQkJCQkgICBob3JfdG90YWwpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJCWlnYTJfY3J0Y19yZWcuaG9yX3RvdGFsLnJlZ19udW07CisJCQkJcmVnID0gaWdhMl9jcnRjX3JlZy5ob3JfdG90YWwucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBIX0FERFJfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9IT1JfQUREUl9GT1JNVUxBKGRldmljZV90aW1pbmcuCisJCQkJCQkJICBob3JfYWRkcik7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkJaWdhMl9jcnRjX3JlZy5ob3JfYWRkci5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfY3J0Y19yZWcuaG9yX2FkZHIucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBIX0JMQU5LX1NUQVJUX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfSE9SX0JMQU5LX1NUQVJUX0ZPUk1VTEEKKwkJCQkgICAgKGRldmljZV90aW1pbmcuaG9yX2JsYW5rX3N0YXJ0KTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCSAgICBpZ2EyX2NydGNfcmVnLmhvcl9ibGFua19zdGFydC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfY3J0Y19yZWcuaG9yX2JsYW5rX3N0YXJ0LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9CTEFOS19FTkRfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9IT1JfQkxBTktfRU5EX0ZPUk1VTEEKKwkJCQkgICAgKGRldmljZV90aW1pbmcuaG9yX2JsYW5rX3N0YXJ0LAorCQkJCSAgICAgZGV2aWNlX3RpbWluZy5ob3JfYmxhbmtfZW5kKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCSAgICBpZ2EyX2NydGNfcmVnLmhvcl9ibGFua19lbmQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX2NydGNfcmVnLmhvcl9ibGFua19lbmQucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBIX1NZTkNfU1RBUlRfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9IT1JfU1lOQ19TVEFSVF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLmhvcl9zeW5jX3N0YXJ0KTsKKwkJCQlpZiAoVU5JQ0hST01FX0NONzAwIDw9CisJCQkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkKKwkJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkJICAgIGlnYTJfY3J0Y19yZWcuaG9yX3N5bmNfc3RhcnQuCisJCQkJCSAgICByZWdfbnVtOworCQkJCWVsc2UKKwkJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0gMzsKKwkJCQlyZWcgPSBpZ2EyX2NydGNfcmVnLmhvcl9zeW5jX3N0YXJ0LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9TWU5DX0VORF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX0hPUl9TWU5DX0VORF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLmhvcl9zeW5jX3N0YXJ0LAorCQkJCSAgICAgZGV2aWNlX3RpbWluZy5ob3Jfc3luY19lbmQpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJICAgIGlnYTJfY3J0Y19yZWcuaG9yX3N5bmNfZW5kLnJlZ19udW07CisJCQkJcmVnID0gaWdhMl9jcnRjX3JlZy5ob3Jfc3luY19lbmQucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX1RPVEFMX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX1RPVEFMX0ZPUk1VTEEoZGV2aWNlX3RpbWluZy4KKwkJCQkJCQkgICB2ZXJfdG90YWwpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJCWlnYTJfY3J0Y19yZWcudmVyX3RvdGFsLnJlZ19udW07CisJCQkJcmVnID0gaWdhMl9jcnRjX3JlZy52ZXJfdG90YWwucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX0FERFJfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfQUREUl9GT1JNVUxBKGRldmljZV90aW1pbmcuCisJCQkJCQkJICB2ZXJfYWRkcik7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkJaWdhMl9jcnRjX3JlZy52ZXJfYWRkci5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfY3J0Y19yZWcudmVyX2FkZHIucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX0JMQU5LX1NUQVJUX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX0JMQU5LX1NUQVJUX0ZPUk1VTEEKKwkJCQkgICAgKGRldmljZV90aW1pbmcudmVyX2JsYW5rX3N0YXJ0KTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCSAgICBpZ2EyX2NydGNfcmVnLnZlcl9ibGFua19zdGFydC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfY3J0Y19yZWcudmVyX2JsYW5rX3N0YXJ0LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9CTEFOS19FTkRfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfQkxBTktfRU5EX0ZPUk1VTEEKKwkJCQkgICAgKGRldmljZV90aW1pbmcudmVyX2JsYW5rX3N0YXJ0LAorCQkJCSAgICAgZGV2aWNlX3RpbWluZy52ZXJfYmxhbmtfZW5kKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCSAgICBpZ2EyX2NydGNfcmVnLnZlcl9ibGFua19lbmQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX2NydGNfcmVnLnZlcl9ibGFua19lbmQucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX1NZTkNfU1RBUlRfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfU1lOQ19TVEFSVF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLnZlcl9zeW5jX3N0YXJ0KTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCSAgICBpZ2EyX2NydGNfcmVnLnZlcl9zeW5jX3N0YXJ0LnJlZ19udW07CisJCQkJcmVnID0gaWdhMl9jcnRjX3JlZy52ZXJfc3luY19zdGFydC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfU1lOQ19FTkRfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfU1lOQ19FTkRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy52ZXJfc3luY19zdGFydCwKKwkJCQkgICAgIGRldmljZV90aW1pbmcudmVyX3N5bmNfZW5kKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCSAgICBpZ2EyX2NydGNfcmVnLnZlcl9zeW5jX2VuZC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfY3J0Y19yZWcudmVyX3N5bmNfZW5kLnJlZzsKKwkJCQlicmVhazsKKworCQkJfQorCQl9CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKwl9CisKKwl2aWFmYl9sb2NrX2NydCgpOworfQorCit2b2lkIHZpYWZiX3NldF9jb2xvcl9kZXB0aChpbnQgYnBwX2J5dGUsIGludCBzZXRfaWdhKQoreworCWlmIChzZXRfaWdhID09IElHQTEpIHsKKwkJc3dpdGNoIChicHBfYnl0ZSkgeworCQljYXNlIE1PREVfOEJQUDoKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTUsIFZJQVNSLCAweDIyLCAweDdFKTsKKwkJCWJyZWFrOworCQljYXNlIE1PREVfMTZCUFA6CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE1LCBWSUFTUiwgMHhCNiwgMHhGRSk7CisJCQlicmVhazsKKwkJY2FzZSBNT0RFXzMyQlBQOgorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNSwgVklBU1IsIDB4QUUsIDB4RkUpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGJwcF9ieXRlKSB7CisJCWNhc2UgTU9ERV84QlBQOgorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2NywgVklBQ1IsIDB4MDAsIEJJVDYgKyBCSVQ3KTsKKwkJCWJyZWFrOworCQljYXNlIE1PREVfMTZCUFA6CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjY3LCBWSUFDUiwgMHg0MCwgQklUNiArIEJJVDcpOworCQkJYnJlYWs7CisJCWNhc2UgTU9ERV8zMkJQUDoKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNjcsIFZJQUNSLCAweEMwLCBCSVQ2ICsgQklUNyk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCB2aWFmYl9maWxsX2NydGNfdGltaW5nKHN0cnVjdCBjcnRfbW9kZV90YWJsZSAqY3J0X3RhYmxlLAorCWludCBtb2RlX2luZGV4LCBpbnQgYnBwX2J5dGUsIGludCBzZXRfaWdhKQoreworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdmlkZW9fbW9kZTsKKwlzdHJ1Y3QgZGlzcGxheV90aW1pbmcgY3J0X3JlZzsKKwlpbnQgaTsKKwlpbnQgaW5kZXggPSAwOworCWludCBoX2FkZHIsIHZfYWRkcjsKKwl1MzIgcGxsX0RfTjsKKworCXZpZGVvX21vZGUgPSAmQ0xFMjY2TW9kZXNbc2VhcmNoX21vZGVfc2V0dGluZyhtb2RlX2luZGV4KV07CisKKwlmb3IgKGkgPSAwOyBpIDwgdmlkZW9fbW9kZS0+bW9kZV9hcnJheTsgaSsrKSB7CisJCWluZGV4ID0gaTsKKworCQlpZiAoY3J0X3RhYmxlW2ldLnJlZnJlc2hfcmF0ZSA9PSB2aWFwYXJpbmZvLT4KKwkJCWNydF9zZXR0aW5nX2luZm8tPnJlZnJlc2hfcmF0ZSkKKwkJCWJyZWFrOworCX0KKworCWNydF9yZWcgPSBjcnRfdGFibGVbaW5kZXhdLmNydGM7CisKKwkvKiBNb2RlIDY0MHg0ODAgaGFzIGJvcmRlciwgYnV0IExDRC9ERlAgZGlkbid0IGhhdmUgYm9yZGVyLiAqLworCS8qIFNvIHdlIHdvdWxkIGRlbGV0ZSBib3JkZXIuICovCisJaWYgKCh2aWFmYl9MQ0RfT04gfCB2aWFmYl9EVklfT04pICYmIChtb2RlX2luZGV4ID09IFZJQV9SRVNfNjQwWDQ4MCkKKwkgICAgJiYgKHZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPnJlZnJlc2hfcmF0ZSA9PSA2MCkpIHsKKwkJLyogVGhlIGJvcmRlciBpcyA4IHBpeGVscy4gKi8KKwkJY3J0X3JlZy5ob3JfYmxhbmtfc3RhcnQgPSBjcnRfcmVnLmhvcl9ibGFua19zdGFydCAtIDg7CisKKwkJLyogQmxhbmtpbmcgdGltZSBzaG91bGQgYWRkIGxlZnQgYW5kIHJpZ2h0IGJvcmRlcnMuICovCisJCWNydF9yZWcuaG9yX2JsYW5rX2VuZCA9IGNydF9yZWcuaG9yX2JsYW5rX2VuZCArIDE2OworCX0KKworCWhfYWRkciA9IGNydF9yZWcuaG9yX2FkZHI7CisJdl9hZGRyID0gY3J0X3JlZy52ZXJfYWRkcjsKKworCS8qIHVwZGF0ZSBwb2xhcml0eSBmb3IgQ1JUIHRpbWluZyAqLworCWlmIChjcnRfdGFibGVbaW5kZXhdLmhfc3luY19wb2xhcml0eSA9PSBORUdBVElWRSkgeworCQlpZiAoY3J0X3RhYmxlW2luZGV4XS52X3N5bmNfcG9sYXJpdHkgPT0gTkVHQVRJVkUpCisJCQlvdXRiKChpbmIoVklBUk1pc2MpICYgKH4oQklUNiArIEJJVDcpKSkgfAorCQkJICAgICAoQklUNiArIEJJVDcpLCBWSUFXTWlzYyk7CisJCWVsc2UKKwkJCW91dGIoKGluYihWSUFSTWlzYykgJiAofihCSVQ2ICsgQklUNykpKSB8IChCSVQ2KSwKKwkJCSAgICAgVklBV01pc2MpOworCX0gZWxzZSB7CisJCWlmIChjcnRfdGFibGVbaW5kZXhdLnZfc3luY19wb2xhcml0eSA9PSBORUdBVElWRSkKKwkJCW91dGIoKGluYihWSUFSTWlzYykgJiAofihCSVQ2ICsgQklUNykpKSB8IChCSVQ3KSwKKwkJCSAgICAgVklBV01pc2MpOworCQllbHNlCisJCQlvdXRiKChpbmIoVklBUk1pc2MpICYgKH4oQklUNiArIEJJVDcpKSksIFZJQVdNaXNjKTsKKwl9CisKKwlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCXZpYWZiX3VubG9ja19jcnQoKTsKKwkJdmlhZmJfd3JpdGVfcmVnKENSMDksIFZJQUNSLCAweDAwKTsJLyppbml0aWFsIENSMDk9MCAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjExLCBWSUFDUiwgMHgwMCwgQklUNCArIEJJVDUgKyBCSVQ2KTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxNywgVklBQ1IsIDB4MDAsIEJJVDcpOworCX0KKworCXN3aXRjaCAoc2V0X2lnYSkgeworCWNhc2UgSUdBMToKKwkJdmlhZmJfbG9hZF9jcnRjX3RpbWluZyhjcnRfcmVnLCBJR0ExKTsKKwkJYnJlYWs7CisJY2FzZSBJR0EyOgorCQl2aWFmYl9sb2FkX2NydGNfdGltaW5nKGNydF9yZWcsIElHQTIpOworCQlicmVhazsKKwl9CisKKwlsb2FkX2ZpeF9iaXRfY3J0Y19yZWcoKTsKKwl2aWFmYl9sb2NrX2NydCgpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTcsIFZJQUNSLCAweDgwLCBCSVQ3KTsKKwl2aWFmYl9sb2FkX29mZnNldF9yZWcoaF9hZGRyLCBicHBfYnl0ZSwgc2V0X2lnYSk7CisJdmlhZmJfbG9hZF9mZXRjaF9jb3VudF9yZWcoaF9hZGRyLCBicHBfYnl0ZSwgc2V0X2lnYSk7CisKKwkvKiBsb2FkIEZJRk8gKi8KKwlpZiAoKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSAhPSBVTklDSFJPTUVfQ0xFMjY2KQorCSAgICAmJiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lICE9IFVOSUNIUk9NRV9LNDAwKSkKKwkJdmlhZmJfbG9hZF9GSUZPX3JlZyhzZXRfaWdhLCBoX2FkZHIsIHZfYWRkcik7CisKKwkvKiBsb2FkIFNSIFJlZ2lzdGVyIEFib3V0IE1lbW9yeSBhbmQgQ29sb3IgcGFydCAqLworCXZpYWZiX3NldF9jb2xvcl9kZXB0aChicHBfYnl0ZSwgc2V0X2lnYSk7CisKKwlwbGxfRF9OID0gdmlhZmJfZ2V0X2Nsa192YWx1ZShjcnRfdGFibGVbaW5kZXhdLmNsayk7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiUExMPSV4IiwgcGxsX0RfTik7CisJdmlhZmJfc2V0X3ZjbG9jayhwbGxfRF9OLCBzZXRfaWdhKTsKKworfQorCit2b2lkIHZpYWZiX2luaXRfY2hpcF9pbmZvKHZvaWQpCit7CisJaW5pdF9nZnhfY2hpcF9pbmZvKCk7CisJaW5pdF90bWRzX2NoaXBfaW5mbygpOworCWluaXRfbHZkc19jaGlwX2luZm8oKTsKKworCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUgPSB2aWFmYl9yZWZyZXNoOworCisJLypTZXQgSUdBIHBhdGggZm9yIGVhY2ggZGV2aWNlICovCisJdmlhZmJfc2V0X2lnYV9wYXRoKCk7CisKKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGlzcGxheV9tZXRob2QgPSB2aWFmYl9sY2RfZHNwX21ldGhvZDsKKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+Z2V0X2xjZF9zaXplX21ldGhvZCA9CisJCUdFVF9MQ0RfU0laRV9CWV9VU0VSX1NFVFRJTkc7CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9tb2RlID0gdmlhZmJfbGNkX21vZGU7CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5kaXNwbGF5X21ldGhvZCA9CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kaXNwbGF5X21ldGhvZDsKKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmxjZF9tb2RlID0KKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9tb2RlOworfQorCit2b2lkIHZpYWZiX3VwZGF0ZV9kZXZpY2Vfc2V0dGluZyhpbnQgaHJlcywgaW50IHZyZXMsCisJaW50IGJwcCwgaW50IHZtb2RlX3JlZnJlc2gsIGludCBmbGFnKQoreworCWlmIChmbGFnID09IDApIHsKKwkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aF9hY3RpdmUgPSBocmVzOworCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT52X2FjdGl2ZSA9IHZyZXM7CisJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmJwcCA9IGJwcDsKKwkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+cmVmcmVzaF9yYXRlID0KKwkJCXZtb2RlX3JlZnJlc2g7CisKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmhfYWN0aXZlID0gaHJlczsKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPnZfYWN0aXZlID0gdnJlczsKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmJwcCA9IGJwcDsKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPnJlZnJlc2hfcmF0ZSA9CisJCQl2bW9kZV9yZWZyZXNoOworCisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSA9IGhyZXM7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZSA9IHZyZXM7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5icHAgPSBicHA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUgPQorCQkJdm1vZGVfcmVmcmVzaDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5oX2FjdGl2ZSA9IGhyZXM7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+dl9hY3RpdmUgPSB2cmVzOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmJwcCA9IGJwcDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5yZWZyZXNoX3JhdGUgPQorCQkJdm1vZGVfcmVmcmVzaDsKKwl9IGVsc2UgeworCisJCWlmICh2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMikgeworCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmhfYWN0aXZlID0gaHJlczsKKwkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZSA9IHZyZXM7CisJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+YnBwID0gYnBwOworCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPnJlZnJlc2hfcmF0ZSA9CisJCQkJdm1vZGVfcmVmcmVzaDsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMikgeworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmhfYWN0aXZlID0gaHJlczsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZSA9IHZyZXM7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+YnBwID0gYnBwOworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPnJlZnJlc2hfcmF0ZSA9CisJCQkJdm1vZGVfcmVmcmVzaDsKKwkJfQorCQlpZiAoSUdBMiA9PSB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoKSB7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmhfYWN0aXZlID0gaHJlczsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+dl9hY3RpdmUgPSB2cmVzOworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5icHAgPSBicHA7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPnJlZnJlc2hfcmF0ZSA9CisJCQkJdm1vZGVfcmVmcmVzaDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaW5pdF9nZnhfY2hpcF9pbmZvKHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCXUzMiBpOworCXU4IHRtcDsKKworCS8qIEluZGVudGlmeSBHRlggQ2hpcCBOYW1lICovCisJZm9yIChpID0gMDsgcGNpaWRsaXN0W2ldLnZlbmRvciAhPSAwOyBpKyspIHsKKwkJcGRldiA9IHBjaV9nZXRfZGV2aWNlKHBjaWlkbGlzdFtpXS52ZW5kb3IsCisJCQlwY2lpZGxpc3RbaV0uZGV2aWNlLCAwKTsKKwkJaWYgKHBkZXYpCisJCQlicmVhazsKKwl9CisKKwlpZiAoIXBjaWlkbGlzdFtpXS52ZW5kb3IpCisJCXJldHVybiA7CisKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPSBwY2lpZGxpc3RbaV0uY2hpcF9pbmRleDsKKworCS8qIENoZWNrIHJldmlzaW9uIG9mIENMRTI2NiBDaGlwICovCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2KSB7CisJCS8qIENSNEYgb25seSBkZWZpbmUgaW4gQ0xFMjY2LkNYIGNoaXAgKi8KKwkJdG1wID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSNEYpOworCQl2aWFmYl93cml0ZV9yZWcoQ1I0RiwgVklBQ1IsIDB4NTUpOworCQlpZiAodmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSNEYpICE9IDB4NTUpCisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX3JldmlzaW9uID0KKwkJCUNMRTI2Nl9SRVZJU0lPTl9BWDsKKwkJZWxzZQorCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9yZXZpc2lvbiA9CisJCQlDTEUyNjZfUkVWSVNJT05fQ1g7CisJCS8qIHJlc3RvcmUgb3JpZ25hbCBDUjRGIHZhbHVlICovCisJCXZpYWZiX3dyaXRlX3JlZyhDUjRGLCBWSUFDUiwgdG1wKTsKKwl9CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DWDcwMCkgeworCQl0bXAgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1I0Myk7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIlNSNDM6JVhcbiIsIHRtcCk7CisJCWlmICh0bXAgJiAweDAyKSB7CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX3JldmlzaW9uID0KKwkJCQlDWDcwMF9SRVZJU0lPTl83MDBNMjsKKwkJfSBlbHNlIGlmICh0bXAgJiAweDQwKSB7CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX3JldmlzaW9uID0KKwkJCQlDWDcwMF9SRVZJU0lPTl83MDBNOworCQl9IGVsc2UgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9yZXZpc2lvbiA9CisJCQkJQ1g3MDBfUkVWSVNJT05fNzAwOworCQl9CisJfQorCisJcGNpX2Rldl9wdXQocGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdG1kc19jaGlwX2luZm8odm9pZCkKK3sKKwl2aWFmYl90bWRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkoKTsKKworCWlmIChJTlRFUkZBQ0VfTk9ORSA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLgorCQlvdXRwdXRfaW50ZXJmYWNlKSB7CisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCQkJeworCQkJCS8qIHdlIHNob3VsZCBjaGVjayBzdXBwb3J0IGJ5IGhhcmR3YXJlIGxheW91dC4qLworCQkJCWlmICgodmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQgPT0KKwkJCQkgICAgIEhXX0xBWU9VVF9EVklfT05MWSkKKwkJCQkgICAgfHwgKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0ID09CisJCQkJCUhXX0xBWU9VVF9MQ0RfRFZJKSkgeworCQkJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLgorCQkJCQkgICAgb3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9UTURTOworCQkJCX0gZWxzZSB7CisJCQkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uCisJCQkJCQlvdXRwdXRfaW50ZXJmYWNlID0KKwkJCQkJCUlOVEVSRkFDRV9OT05FOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwkJCS8qIFRNRFMgb24gUENJRSwgd2Ugc2V0IERGUExPVyBhcyBkZWZhdWx0LiAqLworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID0KKwkJCSAgICBJTlRFUkZBQ0VfREZQX0xPVzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJeworCQkJCS8qIHNldCBEVlAxIGRlZmF1bHQgZm9yIERWSSAqLworCQkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8KKwkJCQkub3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9EVlAxOworCQkJfQorCQl9CisJfQorCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiVE1EUyBDaGlwID0gJWRcbiIsCisJCSAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfbmFtZSk7CisJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmdldF9kdmlfc2l6ZV9tZXRob2QgPQorCQlHRVRfRFZJX1NJWkVfQllfVkdBX0JJT1M7CisJdmlhZmJfaW5pdF9kdmlfc2l6ZSgpOworfQorCitzdGF0aWMgdm9pZCBpbml0X2x2ZHNfY2hpcF9pbmZvKHZvaWQpCit7CisJaWYgKHZpYWZiX2xjZF9wYW5lbF9pZCA+IExDRF9QQU5FTF9JRF9NQVhJTVVNKQorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+Z2V0X2xjZF9zaXplX21ldGhvZCA9CisJCSAgICBHRVRfTENEX1NJWkVfQllfVkdBX0JJT1M7CisJZWxzZQorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+Z2V0X2xjZF9zaXplX21ldGhvZCA9CisJCSAgICBHRVRfTENEX1NJWkVfQllfVVNFUl9TRVRUSU5HOworCisJdmlhZmJfbHZkc190cmFzbWl0dGVyX2lkZW50aWZ5KCk7CisJdmlhZmJfaW5pdF9sY2Rfc2l6ZSgpOworCXZpYWZiX2luaXRfbHZkc19vdXRwdXRfaW50ZXJmYWNlKCZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLAorCQkJCSAgIHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvKTsKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIubHZkc19jaGlwX25hbWUpIHsKKwkJdmlhZmJfaW5pdF9sdmRzX291dHB1dF9pbnRlcmZhY2UoJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCQlsdmRzX2NoaXBfaW5mbzIsIHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMik7CisJfQorCS8qSWYgQ1g3MDAsdHdvIHNpbmdlbCBMQ0QsIHdlIG5lZWQgdG8gcmVhc3NpZ24KKwkgICBMQ0QgaW50ZXJmYWNlIHRvIGRpZmZlcmVudCBMVkRTIHBvcnQgKi8KKwlpZiAoKFVOSUNIUk9NRV9DWDcwMCA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpCisJICAgICYmIChIV19MQVlPVVRfTENEMV9MQ0QyID09IHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0KSkgeworCQlpZiAoKElOVEVHUkFURURfTFZEUyA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLgorCQkJbHZkc19jaGlwX25hbWUpICYmIChJTlRFR1JBVEVEX0xWRFMgPT0KKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCQlsdmRzX2NoaXBfaW5mbzIubHZkc19jaGlwX25hbWUpKSB7CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLm91dHB1dF9pbnRlcmZhY2UgPQorCQkJCUlOVEVSRkFDRV9MVkRTMDsKKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLgorCQkJCW91dHB1dF9pbnRlcmZhY2UgPQorCQkJICAgIElOVEVSRkFDRV9MVkRTMTsKKwkJfQorCX0KKworCURFQlVHX01TRyhLRVJOX0lORk8gIkxWRFMgQ2hpcCA9ICVkXG4iLAorCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpOworCURFQlVHX01TRyhLRVJOX0lORk8gIkxWRFMxIG91dHB1dF9pbnRlcmZhY2UgPSAlZFxuIiwKKwkJICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLm91dHB1dF9pbnRlcmZhY2UpOworCURFQlVHX01TRyhLRVJOX0lORk8gIkxWRFMyIG91dHB1dF9pbnRlcmZhY2UgPSAlZFxuIiwKKwkJICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLm91dHB1dF9pbnRlcmZhY2UpOworfQorCit2b2lkIHZpYWZiX2luaXRfZGFjKGludCBzZXRfaWdhKQoreworCWludCBpOworCXU4IHRtcDsKKworCWlmIChzZXRfaWdhID09IElHQTEpIHsKKwkJLyogYWNjZXNzIFByaW1hcnkgRGlzcGxheSdzIExVVCAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFBLCBWSUFTUiwgMHgwMCwgQklUMCk7CisJCS8qIHR1cm4gb2ZmIExDSyAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFCLCBWSUFTUiwgMHgwMCwgQklUNyArIEJJVDYpOworCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJCXdyaXRlX2RhY19yZWcoaSwgcGFsTFVUX3RhYmxlW2ldLnJlZCwKKwkJCQkgICAgICBwYWxMVVRfdGFibGVbaV0uZ3JlZW4sCisJCQkJICAgICAgcGFsTFVUX3RhYmxlW2ldLmJsdWUpOworCQl9CisJCS8qIHR1cm4gb24gTENLICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUIsIFZJQVNSLCAweEMwLCBCSVQ3ICsgQklUNik7CisJfSBlbHNlIHsKKwkJdG1wID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSNkEpOworCQkvKiBhY2Nlc3MgU2Vjb25kYXJ5IERpc3BsYXkncyBMVVQgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4NDAsIEJJVDYpOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFBLCBWSUFTUiwgMHgwMSwgQklUMCk7CisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJd3JpdGVfZGFjX3JlZyhpLCBwYWxMVVRfdGFibGVbaV0ucmVkLAorCQkJCSAgICAgIHBhbExVVF90YWJsZVtpXS5ncmVlbiwKKwkJCQkgICAgICBwYWxMVVRfdGFibGVbaV0uYmx1ZSk7CisJCX0KKwkJLyogc2V0IElHQTEgREFDIGZvciBkZWZhdWx0ICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUEsIFZJQVNSLCAweDAwLCBCSVQwKTsKKwkJdmlhZmJfd3JpdGVfcmVnKENSNkEsIFZJQUNSLCB0bXApOworCX0KK30KKworc3RhdGljIHZvaWQgZGV2aWNlX3NjcmVlbl9vZmYodm9pZCkKK3sKKwkvKiB0dXJuIG9mZiBDUlQgc2NyZWVuIChJR0ExKSAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMDEsIFZJQVNSLCAweDIwLCBCSVQ1KTsKK30KKworc3RhdGljIHZvaWQgZGV2aWNlX3NjcmVlbl9vbih2b2lkKQoreworCS8qIHR1cm4gb24gQ1JUIHNjcmVlbiAoSUdBMSkgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjAxLCBWSUFTUiwgMHgwMCwgQklUNSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kaXNwbGF5X2NoYW5uZWwodm9pZCkKK3sKKwkvKklmIHZpYWZiX0xDRDJfT04sIG9uIGN4NzAwLCBpbnRlcm5hbCBsdmRzJ3MgaW5mb3JtYXRpb24KKwlpcyBrZWVwZWQgb24gbHZkc19zZXR0aW5nX2luZm8yICovCisJaWYgKHZpYWZiX0xDRDJfT04gJiYKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5kZXZpY2VfbGNkX2R1YWxlZGdlKSB7CisJCS8qIEZvciBkdWFsIGNoYW5uZWwgTENEOiAqLworCQkvKiBTZXQgdG8gRHVhbCBMVkRTIGNoYW5uZWwuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAweDIwLCBCSVQ0ICsgQklUNSk7CisJfSBlbHNlIGlmICh2aWFmYl9MQ0RfT04gJiYgdmlhZmJfRFZJX09OKSB7CisJCS8qIEZvciBMQ0QrREZQOiAqLworCQkvKiBTZXQgdG8gTFZEUzEgKyBUTURTIGNoYW5uZWwuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAweDEwLCBCSVQ0ICsgQklUNSk7CisJfSBlbHNlIGlmICh2aWFmYl9EVklfT04pIHsKKwkJLyogU2V0IHRvIHNpbmdsZSBUTURTIGNoYW5uZWwuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAweDMwLCBCSVQ0ICsgQklUNSk7CisJfSBlbHNlIGlmICh2aWFmYl9MQ0RfT04pIHsKKwkJaWYgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlKSB7CisJCQkvKiBGb3IgZHVhbCBjaGFubmVsIExDRDogKi8KKwkJCS8qIFNldCB0byBEdWFsIExWRFMgY2hhbm5lbC4gKi8KKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAweDIwLCBCSVQ0ICsgQklUNSk7CisJCX0gZWxzZSB7CisJCQkvKiBTZXQgdG8gTFZEUzAgKyBMVkRTMSBjaGFubmVsLiAqLworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMiwgVklBQ1IsIDB4MDAsIEJJVDQgKyBCSVQ1KTsKKwkJfQorCX0KK30KKworaW50IHZpYWZiX3NldG1vZGUoaW50IHZtb2RlX2luZGV4LCBpbnQgaG9yX3JlcywgaW50IHZlcl9yZXMsIGludCB2aWRlb19icHAsCisJaW50IHZtb2RlX2luZGV4MSwgaW50IGhvcl9yZXMxLCBpbnQgdmVyX3JlczEsIGludCB2aWRlb19icHAxKQoreworCWludCBpLCBqOworCWludCBwb3J0OworCXU4IHZhbHVlLCBpbmRleCwgbWFzazsKKwlzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZtb2RlX3RibDsKKwlzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKmNydF90aW1pbmc7CisJc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90YmwxID0gTlVMTDsKKwlzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKmNydF90aW1pbmcxID0gTlVMTDsKKworCURFQlVHX01TRyhLRVJOX0lORk8gIlNldCBNb2RlISFcbiIpOworCURFQlVHX01TRyhLRVJOX0lORk8KKwkJICAidm1vZGVfaW5kZXg9JWQgaG9yX3Jlcz0lZCB2ZXJfcmVzPSVkIHZpZGVvX2JwcD0lZFxuIiwKKwkJICB2bW9kZV9pbmRleCwgaG9yX3JlcywgdmVyX3JlcywgdmlkZW9fYnBwKTsKKworCWRldmljZV9zY3JlZW5fb2ZmKCk7CisJdm1vZGVfdGJsID0gJkNMRTI2Nk1vZGVzW3NlYXJjaF9tb2RlX3NldHRpbmcodm1vZGVfaW5kZXgpXTsKKwljcnRfdGltaW5nID0gdm1vZGVfdGJsLT5jcnRjOworCisJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgeworCQl2bW9kZV90YmwxID0gJkNMRTI2Nk1vZGVzW3NlYXJjaF9tb2RlX3NldHRpbmcodm1vZGVfaW5kZXgxKV07CisJCWNydF90aW1pbmcxID0gdm1vZGVfdGJsMS0+Y3J0YzsKKwl9CisKKwlpbmIoVklBU3RhdHVzKTsKKwlvdXRiKDB4MDAsIFZJQUFSKTsKKworCS8qIFdyaXRlIENvbW1vbiBTZXR0aW5nIGZvciBWaWRlbyBNb2RlICovCisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJCXZpYWZiX3dyaXRlX3JlZ3goQ0xFMjY2X01vZGVYcmVncywgTlVNX1RPVEFMX0NMRTI2Nl9Nb2RlWHJlZ3MpOworCQlicmVhazsKKworCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCXZpYWZiX3dyaXRlX3JlZ3goS000MDBfTW9kZVhyZWdzLCBOVU1fVE9UQUxfS000MDBfTW9kZVhyZWdzKTsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9LODAwOgorCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCQl2aWFmYl93cml0ZV9yZWd4KENONDAwX01vZGVYcmVncywgTlVNX1RPVEFMX0NONDAwX01vZGVYcmVncyk7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfQ043MDA6CisJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCXZpYWZiX3dyaXRlX3JlZ3goQ043MDBfTW9kZVhyZWdzLCBOVU1fVE9UQUxfQ043MDBfTW9kZVhyZWdzKTsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwkJdmlhZmJfd3JpdGVfcmVneChDWDcwMF9Nb2RlWHJlZ3MsIE5VTV9UT1RBTF9DWDcwMF9Nb2RlWHJlZ3MpOworCisJY2FzZSBVTklDSFJPTUVfVlg4MDA6CisJCXZpYWZiX3dyaXRlX3JlZ3goVlg4MDBfTW9kZVhyZWdzLCBOVU1fVE9UQUxfVlg4MDBfTW9kZVhyZWdzKTsKKworCQlicmVhazsKKwl9CisKKwlkZXZpY2Vfb2ZmKCk7CisKKwkvKiBGaWxsIFZQSVQgUGFyYW1ldGVycyAqLworCS8qIFdyaXRlIE1pc2MgUmVnaXN0ZXIgKi8KKwlvdXRiKFZQSVQuTWlzYywgVklBV01pc2MpOworCisJLyogV3JpdGUgU2VxdWVuY2VyICovCisJZm9yIChpID0gMTsgaSA8PSBTdGRTUjsgaSsrKSB7CisJCW91dGIoaSwgVklBU1IpOworCQlvdXRiKFZQSVQuU1JbaSAtIDFdLCBWSUFTUiArIDEpOworCX0KKworCXZpYWZiX3NldF9zdGFydF9hZGRyKCk7CisJdmlhZmJfc2V0X2lnYV9wYXRoKCk7CisKKwkvKiBXcml0ZSBDUlRDICovCisJdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhjcnRfdGltaW5nLCB2bW9kZV9pbmRleCwgdmlkZW9fYnBwIC8gOCwgSUdBMSk7CisKKwkvKiBXcml0ZSBHcmFwaGljIENvbnRyb2xsZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU3RkR1I7IGkrKykgeworCQlvdXRiKGksIFZJQUdSKTsKKwkJb3V0YihWUElULkdSW2ldLCBWSUFHUiArIDEpOworCX0KKworCS8qIFdyaXRlIEF0dHJpYnV0ZSBDb250cm9sbGVyICovCisJZm9yIChpID0gMDsgaSA8IFN0ZEFSOyBpKyspIHsKKwkJaW5iKFZJQVN0YXR1cyk7CisJCW91dGIoaSwgVklBQVIpOworCQlvdXRiKFZQSVQuQVJbaV0sIFZJQUFSKTsKKwl9CisKKwlpbmIoVklBU3RhdHVzKTsKKwlvdXRiKDB4MjAsIFZJQUFSKTsKKworCS8qIFVwZGF0ZSBQYXRjaCBSZWdpc3RlciAqLworCisJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikKKwkgICAgfHwgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfSzQwMCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9UT1RBTF9QQVRDSF9NT0RFOyBpKyspIHsKKwkJCWlmIChyZXNfcGF0Y2hfdGFibGVbaV0ubW9kZV9pbmRleCA9PSB2bW9kZV9pbmRleCkgeworCQkJCWZvciAoaiA9IDA7CisJCQkJICAgICBqIDwgcmVzX3BhdGNoX3RhYmxlW2ldLnRhYmxlX2xlbmd0aDsgaisrKSB7CisJCQkJCWluZGV4ID0KKwkJCQkJICAgIHJlc19wYXRjaF90YWJsZVtpXS4KKwkJCQkJICAgIGlvX3JlZ190YWJsZVtqXS5pbmRleDsKKwkJCQkJcG9ydCA9CisJCQkJCSAgICByZXNfcGF0Y2hfdGFibGVbaV0uCisJCQkJCSAgICBpb19yZWdfdGFibGVbal0ucG9ydDsKKwkJCQkJdmFsdWUgPQorCQkJCQkgICAgcmVzX3BhdGNoX3RhYmxlW2ldLgorCQkJCQkgICAgaW9fcmVnX3RhYmxlW2pdLnZhbHVlOworCQkJCQltYXNrID0KKwkJCQkJICAgIHJlc19wYXRjaF90YWJsZVtpXS4KKwkJCQkJICAgIGlvX3JlZ190YWJsZVtqXS5tYXNrOworCQkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhpbmRleCwgcG9ydCwgdmFsdWUsCisJCQkJCQkgICAgICAgbWFzayk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgeworCQlpZiAoKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2KQorCQkgICAgfHwgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PQorCQkgICAgVU5JQ0hST01FX0s0MDApKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1RPVEFMX1BBVENIX01PREU7IGkrKykgeworCQkJCWlmIChyZXNfcGF0Y2hfdGFibGVbaV0ubW9kZV9pbmRleCA9PQorCQkJCSAgICB2bW9kZV9pbmRleDEpIHsKKwkJCQkJZm9yIChqID0gMDsKKwkJCQkJICAgICBqIDwKKwkJCQkJICAgICByZXNfcGF0Y2hfdGFibGVbaV0uCisJCQkJCSAgICAgdGFibGVfbGVuZ3RoOyBqKyspIHsKKwkJCQkJCWluZGV4ID0KKwkJCQkJCSAgICByZXNfcGF0Y2hfdGFibGVbaV0uCisJCQkJCQkgICAgaW9fcmVnX3RhYmxlW2pdLmluZGV4OworCQkJCQkJcG9ydCA9CisJCQkJCQkgICAgcmVzX3BhdGNoX3RhYmxlW2ldLgorCQkJCQkJICAgIGlvX3JlZ190YWJsZVtqXS5wb3J0OworCQkJCQkJdmFsdWUgPQorCQkJCQkJICAgIHJlc19wYXRjaF90YWJsZVtpXS4KKwkJCQkJCSAgICBpb19yZWdfdGFibGVbal0udmFsdWU7CisJCQkJCQltYXNrID0KKwkJCQkJCSAgICByZXNfcGF0Y2hfdGFibGVbaV0uCisJCQkJCQkgICAgaW9fcmVnX3RhYmxlW2pdLm1hc2s7CisJCQkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhpbmRleCwKKwkJCQkJCQlwb3J0LCB2YWx1ZSwgbWFzayk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKiBVcGRhdGUgUmVmcmVzaCBSYXRlIFNldHRpbmcgKi8KKworCS8qIENsZWFyIE9uIFNjcmVlbiAqLworCisJLyogQ1JUIHNldCBtb2RlICovCisJaWYgKHZpYWZiX0NSVF9PTikgeworCQlpZiAodmlhZmJfU0FNTV9PTiAmJiAodmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0KKwkJCUlHQTIpKSB7CisJCQl2aWFmYl9maWxsX2NydGNfdGltaW5nKGNydF90aW1pbmcxLCB2bW9kZV9pbmRleDEsCisJCQkJdmlkZW9fYnBwMSAvIDgsCisJCQkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGgpOworCQl9IGVsc2UgeworCQkJdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhjcnRfdGltaW5nLCB2bW9kZV9pbmRleCwKKwkJCQl2aWRlb19icHAgLyA4LAorCQkJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoKTsKKwkJfQorCisJCXNldF9jcnRfb3V0cHV0X3BhdGgodmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGgpOworCisJCS8qIFBhdGNoIGlmIHNldF9ocmVzIGlzIG5vdCA4IGFsaWdubWVudCAoMTM2NikgdG8gdmlhZmJfc2V0bW9kZQorCQl0byA4IGFsaWdubWVudCAoMTM2OCksdGhlcmUgaXMgc2V2ZXJhbCBwaXhlbHMgKDIgcGl4ZWxzKQorCQlvbiByaWdodCBzaWRlIG9mIHNjcmVlbi4gKi8KKwkJaWYgKGhvcl9yZXMgJSA4KSB7CisJCQl2aWFmYl91bmxvY2tfY3J0KCk7CisJCQl2aWFmYl93cml0ZV9yZWcoQ1IwMiwgVklBQ1IsCisJCQkJdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSMDIpIC0gMSk7CisJCQl2aWFmYl9sb2NrX2NydCgpOworCQl9CisJfQorCisJaWYgKHZpYWZiX0RWSV9PTikgeworCQlpZiAodmlhZmJfU0FNTV9PTiAmJgorCQkJKHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0EyKSkgeworCQkJdmlhZmJfZHZpX3NldF9tb2RlKHZpYWZiX2dldF9tb2RlX2luZGV4CisJCQkJICAgICAodmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmhfYWN0aXZlLAorCQkJCSAgICAgIHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT4KKwkJCQkgICAgICB2X2FjdGl2ZSwgMSksCisJCQkJICAgICB2aWRlb19icHAxLCB2aWFwYXJpbmZvLT4KKwkJCQkgICAgIHRtZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCk7CisJCX0gZWxzZSB7CisJCQl2aWFmYl9kdmlfc2V0X21vZGUodmlhZmJfZ2V0X21vZGVfaW5kZXgKKwkJCQkgICAgICh2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aF9hY3RpdmUsCisJCQkJICAgICAgdmlhcGFyaW5mby0+CisJCQkJICAgICAgdG1kc19zZXR0aW5nX2luZm8tPnZfYWN0aXZlLCAwKSwKKwkJCQkgICAgIHZpZGVvX2JwcCwgdmlhcGFyaW5mby0+CisJCQkJICAgICB0bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGgpOworCQl9CisJfQorCisJaWYgKHZpYWZiX0xDRF9PTikgeworCQlpZiAodmlhZmJfU0FNTV9PTiAmJgorCQkJKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0EyKSkgeworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmJwcCA9IHZpZGVvX2JwcDE7CisJCQl2aWFmYl9sY2Rfc2V0X21vZGUoY3J0X3RpbWluZzEsIHZpYXBhcmluZm8tPgorCQkJCWx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCSAgICAgJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8pOworCQl9IGVsc2UgeworCQkJLyogSUdBMSBkb2Vzbid0IGhhdmUgTENEIHNjYWxpbmcsIHNvIHNldCBpdCBjZW50ZXIuICovCisJCQlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTEpIHsKKwkJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGlzcGxheV9tZXRob2QgPQorCQkJCSAgICBMQ0RfQ0VOVEVSSU5HOworCQkJfQorCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmJwcCA9IHZpZGVvX2JwcDsKKwkJCXZpYWZiX2xjZF9zZXRfbW9kZShjcnRfdGltaW5nLCB2aWFwYXJpbmZvLT4KKwkJCQlsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkgICAgICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvKTsKKwkJfQorCX0KKwlpZiAodmlhZmJfTENEMl9PTikgeworCQlpZiAodmlhZmJfU0FNTV9PTiAmJgorCQkJKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+aWdhX3BhdGggPT0gSUdBMikpIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+YnBwID0gdmlkZW9fYnBwMTsKKwkJCXZpYWZiX2xjZF9zZXRfbW9kZShjcnRfdGltaW5nMSwgdmlhcGFyaW5mby0+CisJCQkJbHZkc19zZXR0aW5nX2luZm8yLAorCQkJCSAgICAgJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yKTsKKwkJfSBlbHNlIHsKKwkJCS8qIElHQTEgZG9lc24ndCBoYXZlIExDRCBzY2FsaW5nLCBzbyBzZXQgaXQgY2VudGVyLiAqLworCQkJaWYgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+aWdhX3BhdGggPT0gSUdBMSkgeworCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+ZGlzcGxheV9tZXRob2QgPQorCQkJCSAgICBMQ0RfQ0VOVEVSSU5HOworCQkJfQorCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5icHAgPSB2aWRlb19icHA7CisJCQl2aWFmYl9sY2Rfc2V0X21vZGUoY3J0X3RpbWluZywgdmlhcGFyaW5mby0+CisJCQkJbHZkc19zZXR0aW5nX2luZm8yLAorCQkJCSAgICAgJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yKTsKKwkJfQorCX0KKworCWlmICgodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DWDcwMCkKKwkgICAgJiYgKHZpYWZiX0xDRF9PTiB8fCB2aWFmYl9EVklfT04pKQorCQlzZXRfZGlzcGxheV9jaGFubmVsKCk7CisKKwkvKiBJZiBzZXQgbW9kZSBub3JtYWxseSwgc2F2ZSByZXNvbHV0aW9uIGluZm9ybWF0aW9uIGZvciBob3QtcGx1ZyAuICovCisJaWYgKCF2aWFmYl9ob3RwbHVnKSB7CisJCXZpYWZiX2hvdHBsdWdfWHJlcyA9IGhvcl9yZXM7CisJCXZpYWZiX2hvdHBsdWdfWXJlcyA9IHZlcl9yZXM7CisJCXZpYWZiX2hvdHBsdWdfYnBwID0gdmlkZW9fYnBwOworCQl2aWFmYl9ob3RwbHVnX3JlZnJlc2ggPSB2aWFmYl9yZWZyZXNoOworCisJCWlmICh2aWFmYl9EVklfT04pCisJCQl2aWFmYl9EZXZpY2VTdGF0dXMgPSBEVklfRGV2aWNlOworCQllbHNlCisJCQl2aWFmYl9EZXZpY2VTdGF0dXMgPSBDUlRfRGV2aWNlOworCX0KKwlkZXZpY2Vfb24oKTsKKworCWlmICh2aWFmYl9TQU1NX09OID09IDEpCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweEMwLCBCSVQ2ICsgQklUNyk7CisKKwlkZXZpY2Vfc2NyZWVuX29uKCk7CisJcmV0dXJuIDE7Cit9CisKK2ludCB2aWFmYl9nZXRfcGl4Y2xvY2soaW50IGhyZXMsIGludCB2cmVzLCBpbnQgdm1vZGVfcmVmcmVzaCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fVE9UQUxfUkVTX01BUF9SRUZSRVNIOyBpKyspIHsKKwkJaWYgKChocmVzID09IHJlc19tYXBfcmVmcmVzaF90YmxbaV0uaHJlcykKKwkJICAgICYmICh2cmVzID09IHJlc19tYXBfcmVmcmVzaF90YmxbaV0udnJlcykKKwkJICAgICYmICh2bW9kZV9yZWZyZXNoID09IHJlc19tYXBfcmVmcmVzaF90YmxbaV0udm1vZGVfcmVmcmVzaCkpCisJCQlyZXR1cm4gcmVzX21hcF9yZWZyZXNoX3RibFtpXS5waXhjbG9jazsKKwl9CisJcmV0dXJuIFJFU182NDBYNDgwXzYwSFpfUElYQ0xPQ0s7CisKK30KKworaW50IHZpYWZiX2dldF9yZWZyZXNoKGludCBocmVzLCBpbnQgdnJlcywgdTMyIGxvbmdfcmVmcmVzaCkKK3sKKyNkZWZpbmUgUkVGUkVTSF9UT0xFUkFOQ0UgMworCWludCBpLCBuZWFyZXN0ID0gLTEsIGRpZmYgPSBSRUZSRVNIX1RPTEVSQU5DRTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1RPVEFMX1JFU19NQVBfUkVGUkVTSDsgaSsrKSB7CisJCWlmICgoaHJlcyA9PSByZXNfbWFwX3JlZnJlc2hfdGJsW2ldLmhyZXMpCisJCSAgICAmJiAodnJlcyA9PSByZXNfbWFwX3JlZnJlc2hfdGJsW2ldLnZyZXMpCisJCSAgICAmJiAoZGlmZiA+IChhYnMobG9uZ19yZWZyZXNoIC0KKwkJICAgIHJlc19tYXBfcmVmcmVzaF90YmxbaV0udm1vZGVfcmVmcmVzaCkpKSkgeworCQkJZGlmZiA9IGFicyhsb25nX3JlZnJlc2ggLSByZXNfbWFwX3JlZnJlc2hfdGJsW2ldLgorCQkJCXZtb2RlX3JlZnJlc2gpOworCQkJbmVhcmVzdCA9IGk7CisJCX0KKwl9CisjdW5kZWYgUkVGUkVTSF9UT0xFUkFOQ0UKKwlpZiAobmVhcmVzdCA+IDApCisJCXJldHVybiByZXNfbWFwX3JlZnJlc2hfdGJsW25lYXJlc3RdLnZtb2RlX3JlZnJlc2g7CisJcmV0dXJuIDYwOworfQorCitzdGF0aWMgdm9pZCBkZXZpY2Vfb2ZmKHZvaWQpCit7CisJdmlhZmJfY3J0X2Rpc2FibGUoKTsKKwl2aWFmYl9kdmlfZGlzYWJsZSgpOworCXZpYWZiX2xjZF9kaXNhYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGRldmljZV9vbih2b2lkKQoreworCWlmICh2aWFmYl9DUlRfT04gPT0gMSkKKwkJdmlhZmJfY3J0X2VuYWJsZSgpOworCWlmICh2aWFmYl9EVklfT04gPT0gMSkKKwkJdmlhZmJfZHZpX2VuYWJsZSgpOworCWlmICh2aWFmYl9MQ0RfT04gPT0gMSkKKwkJdmlhZmJfbGNkX2VuYWJsZSgpOworfQorCit2b2lkIHZpYWZiX2NydF9kaXNhYmxlKHZvaWQpCit7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IzNiwgVklBQ1IsIEJJVDUgKyBCSVQ0LCBCSVQ1ICsgQklUNCk7Cit9CisKK3ZvaWQgdmlhZmJfY3J0X2VuYWJsZSh2b2lkKQoreworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzYsIFZJQUNSLCAweDAsIEJJVDUgKyBCSVQ0KTsKK30KKwordm9pZCB2aWFmYl9nZXRfbW1pb19pbmZvKHVuc2lnbmVkIGxvbmcgKm1taW9fYmFzZSwKKwl1bnNpZ25lZCBsb25nICptbWlvX2xlbikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CisJdTMyIHZlbmRvciwgZGV2aWNlOworCXUzMiBpOworCisJZm9yIChpID0gMDsgcGNpaWRsaXN0W2ldLnZlbmRvciAhPSAwOyBpKyspCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0KKwkJCXBjaWlkbGlzdFtpXS5jaGlwX2luZGV4KQorCQkJYnJlYWs7CisKKwlpZiAoIXBjaWlkbGlzdFtpXS52ZW5kb3IpCisJCXJldHVybiA7CisKKwl2ZW5kb3IgPSBwY2lpZGxpc3RbaV0udmVuZG9yOworCWRldmljZSA9IHBjaWlkbGlzdFtpXS5kZXZpY2U7CisKKwlwZGV2ID0gcGNpX2dldF9kZXZpY2UodmVuZG9yLCBkZXZpY2UsIE5VTEwpOworCisJaWYgKCFwZGV2KSB7CisJCSptbWlvX2Jhc2UgPSAwOworCQkqbW1pb19sZW4gPSAwOworCQlyZXR1cm4gOworCX0KKworCSptbWlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisJKm1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKTsKKworCXBjaV9kZXZfcHV0KHBkZXYpOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfc2Vjb25kX2Rpc3BsYXlfY2hhbm5lbCh2b2lkKQoreworCS8qIHRvIGVuYWJsZSBzZWNvbmQgZGlzcGxheSBjaGFubmVsLiAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDAwLCBCSVQ2KTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgQklUNywgQklUNyk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIEJJVDYsIEJJVDYpOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX3NlY29uZF9kaXNwbGF5X2NoYW5uZWwodm9pZCkKK3sKKwkvKiB0byBkaXNhYmxlIHNlY29uZCBkaXNwbGF5IGNoYW5uZWwuICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDAsIEJJVDYpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDAwLCBCSVQ3KTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgQklUNiwgQklUNik7Cit9CisKK3ZvaWQgdmlhZmJfZ2V0X2ZiX2luZm8odW5zaWduZWQgaW50ICpmYl9iYXNlLCB1bnNpZ25lZCBpbnQgKmZiX2xlbikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CisJdTMyIHZlbmRvciwgZGV2aWNlOworCXUzMiBpOworCisJZm9yIChpID0gMDsgcGNpaWRsaXN0W2ldLnZlbmRvciAhPSAwOyBpKyspCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0KKwkJCXBjaWlkbGlzdFtpXS5jaGlwX2luZGV4KQorCQkJYnJlYWs7CisKKwlpZiAoIXBjaWlkbGlzdFtpXS52ZW5kb3IpCisJCXJldHVybiA7CisKKwl2ZW5kb3IgPSBwY2lpZGxpc3RbaV0udmVuZG9yOworCWRldmljZSA9IHBjaWlkbGlzdFtpXS5kZXZpY2U7CisKKwlwZGV2ID0gcGNpX2dldF9kZXZpY2UodmVuZG9yLCBkZXZpY2UsIE5VTEwpOworCisJaWYgKCFwZGV2KSB7CisJCSpmYl9iYXNlID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMzApIDw8IDI0OworCQkqZmJfbGVuID0gdmlhZmJfZ2V0X21lbXNpemUoKTsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiR2V0IEZCIGluZm8gZnJvbSBTUjMwIVxuIik7CisJCURFQlVHX01TRyhLRVJOX0lORk8gImZiX2Jhc2UgPSAlMDh4XG4iLCAqZmJfYmFzZSk7CisJCURFQlVHX01TRyhLRVJOX0lORk8gImZiX2xlbiA9ICUwOHhcbiIsICpmYl9sZW4pOworCQlyZXR1cm4gOworCX0KKworCSpmYl9iYXNlID0gKHVuc2lnbmVkIGludClwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJKmZiX2xlbiA9IGdldF9mYl9zaXplX2Zyb21fcGNpKCk7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiR2V0IEZCIGluZm8gZnJvbSBQQ0kgc3lzdGVtIVxuIik7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiZmJfYmFzZSA9ICUwOHhcbiIsICpmYl9iYXNlKTsKKwlERUJVR19NU0coS0VSTl9JTkZPICJmYl9sZW4gPSAlMDh4XG4iLCAqZmJfbGVuKTsKKworCXBjaV9kZXZfcHV0KHBkZXYpOworfQorCitzdGF0aWMgaW50IGdldF9mYl9zaXplX2Zyb21fcGNpKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjb25maWdpZCwgZGV2aWNlaWQsIEZCU2l6ZSA9IDA7CisJaW50IFZpZGVvTWVtU2l6ZTsKKwlpbnQgRGV2aWNlRm91bmQgPSBmYWxzZTsKKworCWZvciAoY29uZmlnaWQgPSAweDgwMDAwMDAwOyBjb25maWdpZCA8IDB4ODAwMTA4MDA7IGNvbmZpZ2lkICs9IDB4MTAwKSB7CisJCW91dGwoY29uZmlnaWQsICh1bnNpZ25lZCBsb25nKTB4Q0Y4KTsKKwkJZGV2aWNlaWQgPSAoaW5sKCh1bnNpZ25lZCBsb25nKTB4Q0ZDKSA+PiAxNikgJiAweGZmZmY7CisKKwkJc3dpdGNoIChkZXZpY2VpZCkgeworCQljYXNlIENMRTI2NjoKKwkJY2FzZSBLTTQwMDoKKwkJCW91dGwoY29uZmlnaWQgKyAweEUwLCAodW5zaWduZWQgbG9uZykweENGOCk7CisJCQlGQlNpemUgPSBpbmwoKHVuc2lnbmVkIGxvbmcpMHhDRkMpOworCQkJRGV2aWNlRm91bmQgPSB0cnVlOwkvKiBGb3VuZCBkZXZpY2UgaWQgKi8KKwkJCWJyZWFrOworCisJCWNhc2UgQ040MDBfRlVOQ1RJT04zOgorCQljYXNlIENONzAwX0ZVTkNUSU9OMzoKKwkJY2FzZSBDWDcwMF9GVU5DVElPTjM6CisJCWNhc2UgS004MDBfRlVOQ1RJT04zOgorCQljYXNlIEtNODkwX0ZVTkNUSU9OMzoKKwkJY2FzZSBQNE04OTBfRlVOQ1RJT04zOgorCQljYXNlIFA0TTkwMF9GVU5DVElPTjM6CisJCWNhc2UgVlg4MDBfRlVOQ1RJT04zOgorCQkJLypjYXNlIENONzUwX0ZVTkNUSU9OMzogKi8KKwkJCW91dGwoY29uZmlnaWQgKyAweEEwLCAodW5zaWduZWQgbG9uZykweENGOCk7CisJCQlGQlNpemUgPSBpbmwoKHVuc2lnbmVkIGxvbmcpMHhDRkMpOworCQkJRGV2aWNlRm91bmQgPSB0cnVlOwkvKiBGb3VuZCBkZXZpY2UgaWQgKi8KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWlmIChEZXZpY2VGb3VuZCkKKwkJCWJyZWFrOworCX0KKworCURFQlVHX01TRyhLRVJOX0lORk8gIkRldmljZSBJRCA9ICVseFxuIiwgZGV2aWNlaWQpOworCisJRkJTaXplID0gRkJTaXplICYgMHgwMDAwNzAwMDsKKwlERUJVR19NU0coS0VSTl9JTkZPICJGQiBTaXplID0gJXhcbiIsIEZCU2l6ZSk7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lIDwgVU5JQ0hST01FX0NYNzAwKSB7CisJCXN3aXRjaCAoRkJTaXplKSB7CisJCWNhc2UgMHgwMDAwNDAwMDoKKwkJCVZpZGVvTWVtU2l6ZSA9ICgxNiA8PCAyMCk7CS8qMTZNICovCisJCQlicmVhazsKKworCQljYXNlIDB4MDAwMDUwMDA6CisJCQlWaWRlb01lbVNpemUgPSAoMzIgPDwgMjApOwkvKjMyTSAqLworCQkJYnJlYWs7CisKKwkJY2FzZSAweDAwMDA2MDAwOgorCQkJVmlkZW9NZW1TaXplID0gKDY0IDw8IDIwKTsJLyo2NE0gKi8KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlWaWRlb01lbVNpemUgPSAoMzIgPDwgMjApOwkvKjMyTSAqLworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKEZCU2l6ZSkgeworCQljYXNlIDB4MDAwMDEwMDA6CisJCQlWaWRlb01lbVNpemUgPSAoOCA8PCAyMCk7CS8qOE0gKi8KKwkJCWJyZWFrOworCisJCWNhc2UgMHgwMDAwMjAwMDoKKwkJCVZpZGVvTWVtU2l6ZSA9ICgxNiA8PCAyMCk7CS8qMTZNICovCisJCQlicmVhazsKKworCQljYXNlIDB4MDAwMDMwMDA6CisJCQlWaWRlb01lbVNpemUgPSAoMzIgPDwgMjApOwkvKjMyTSAqLworCQkJYnJlYWs7CisKKwkJY2FzZSAweDAwMDA0MDAwOgorCQkJVmlkZW9NZW1TaXplID0gKDY0IDw8IDIwKTsJLyo2NE0gKi8KKwkJCWJyZWFrOworCisJCWNhc2UgMHgwMDAwNTAwMDoKKwkJCVZpZGVvTWVtU2l6ZSA9ICgxMjggPDwgMjApOwkvKjEyOE0gKi8KKwkJCWJyZWFrOworCisJCWNhc2UgMHgwMDAwNjAwMDoKKwkJCVZpZGVvTWVtU2l6ZSA9ICgyNTYgPDwgMjApOwkvKjI1Nk0gKi8KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlWaWRlb01lbVNpemUgPSAoMzIgPDwgMjApOwkvKjMyTSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gVmlkZW9NZW1TaXplOworfQorCit2b2lkIHZpYWZiX3NldF9kcGFfZ2Z4KGludCBvdXRwdXRfaW50ZXJmYWNlLCBzdHJ1Y3QgR0ZYX0RQQV9TRVRUSU5HXAorCQkJCQkqcF9nZnhfZHBhX3NldHRpbmcpCit7CisJc3dpdGNoIChvdXRwdXRfaW50ZXJmYWNlKSB7CisJY2FzZSBJTlRFUkZBQ0VfRFZQMDoKKwkJeworCQkJLyogRFZQMCBDbG9jayBQb2xhcml0eSBhbmQgQWRqdXN0OiAqLworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NiwgVklBQ1IsCisJCQkJICAgICAgIHBfZ2Z4X2RwYV9zZXR0aW5nLT5EVlAwLCAweDBGKTsKKworCQkJLyogRFZQMCBDbG9jayBhbmQgRGF0YSBQYWRzIERyaXZpbmc6ICovCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFFLCBWSUFTUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRWUDBDbG9ja0RyaV9TLCBCSVQyKTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLAorCQkJCSAgICAgICBwX2dmeF9kcGFfc2V0dGluZy0+RFZQMENsb2NrRHJpX1MxLAorCQkJCSAgICAgICBCSVQ0KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUIsIFZJQVNSLAorCQkJCSAgICAgICBwX2dmeF9kcGFfc2V0dGluZy0+RFZQMERhdGFEcmlfUywgQklUMSk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRWUDBEYXRhRHJpX1MxLCBCSVQ1KTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9EVlAxOgorCQl7CisJCQkvKiBEVlAxIENsb2NrIFBvbGFyaXR5IGFuZCBBZGp1c3Q6ICovCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjlCLCBWSUFDUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRWUDEsIDB4MEYpOworCisJCQkvKiBEVlAxIENsb2NrIGFuZCBEYXRhIFBhZHMgRHJpdmluZzogKi8KKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNjUsIFZJQVNSLAorCQkJCSAgICAgICBwX2dmeF9kcGFfc2V0dGluZy0+RFZQMURyaXZpbmcsIDB4MEYpOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSU5URVJGQUNFX0RGUF9ISUdIOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRGUEhpZ2gsIDB4MEYpOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSU5URVJGQUNFX0RGUF9MT1c6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLAorCQkJCSAgICAgICBwX2dmeF9kcGFfc2V0dGluZy0+REZQTG93LCAweDBGKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9ERlA6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLAorCQkJCSAgICAgICBwX2dmeF9kcGFfc2V0dGluZy0+REZQSGlnaCwgMHgwRik7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRGUExvdywgMHgwRik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCB2aWFmYl9tZW1vcnlfcGl0Y2hfcGF0Y2goc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaWYgKGluZm8tPnZhci54cmVzICE9IGluZm8tPnZhci54cmVzX3ZpcnR1YWwpIHsKKwkJdmlhZmJfbG9hZF9vZmZzZXRfcmVnKGluZm8tPnZhci54cmVzX3ZpcnR1YWwsCisJCQkJaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4+IDMsIElHQTEpOworCisJCWlmICh2aWFmYl9TQU1NX09OKSB7CisJCQl2aWFmYl9sb2FkX29mZnNldF9yZWcodmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlcywKKwkJCQl2aWFmYl9icHAxID4+IDMsCisJCQkJCUlHQTIpOworCQl9IGVsc2UgeworCQkJdmlhZmJfbG9hZF9vZmZzZXRfcmVnKGluZm8tPnZhci54cmVzX3ZpcnR1YWwsCisJCQkJCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PiAzLCBJR0EyKTsKKwkJfQorCisJfQorfQorCisvKkFjY29yZGluZyB2YXIncyB4cmVzLCB5cmVzIGZpbGwgdmFyJ3Mgb3RoZXIgdGltaW5nIGluZm9ybWF0aW9uKi8KK3ZvaWQgdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8oc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCByZWZyZXNoLAorCQkJICBpbnQgbW9kZV9pbmRleCkKK3sKKwlzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZtb2RlX3RibCA9IE5VTEw7CisJc3RydWN0IGNydF9tb2RlX3RhYmxlICpjcnRfdGltaW5nID0gTlVMTDsKKwlzdHJ1Y3QgZGlzcGxheV90aW1pbmcgY3J0X3JlZzsKKwlpbnQgaSA9IDAsIGluZGV4ID0gMDsKKwl2bW9kZV90YmwgPSAmQ0xFMjY2TW9kZXNbc2VhcmNoX21vZGVfc2V0dGluZyhtb2RlX2luZGV4KV07CisJY3J0X3RpbWluZyA9IHZtb2RlX3RibC0+Y3J0YzsKKwlmb3IgKGkgPSAwOyBpIDwgdm1vZGVfdGJsLT5tb2RlX2FycmF5OyBpKyspIHsKKwkJaW5kZXggPSBpOworCQlpZiAoY3J0X3RpbWluZ1tpXS5yZWZyZXNoX3JhdGUgPT0gcmVmcmVzaCkKKwkJCWJyZWFrOworCX0KKworCWNydF9yZWcgPSBjcnRfdGltaW5nW2luZGV4XS5jcnRjOworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSAwOworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gNjsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OworCQl2YXItPmJsdWUubGVuZ3RoID0gNjsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTE7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gNTsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+cmVkLmxlbmd0aCA9IDU7CisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gNjsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDU7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCXZhci0+cmVkLm9mZnNldCA9IDE2OworCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPnJlZC5sZW5ndGggPSA4OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBuZXZlciBoYXBwZWQsIHB1dCBoZXJlIHRvIGtlZXAgY29uc2lzdGVudCAqLworCQlicmVhazsKKwl9CisKKwl2YXItPnBpeGNsb2NrID0gdmlhZmJfZ2V0X3BpeGNsb2NrKHZhci0+eHJlcywgdmFyLT55cmVzLCByZWZyZXNoKTsKKwl2YXItPmxlZnRfbWFyZ2luID0KKwkgICAgY3J0X3JlZy5ob3JfdG90YWwgLSAoY3J0X3JlZy5ob3Jfc3luY19zdGFydCArIGNydF9yZWcuaG9yX3N5bmNfZW5kKTsKKwl2YXItPnJpZ2h0X21hcmdpbiA9IGNydF9yZWcuaG9yX3N5bmNfc3RhcnQgLSBjcnRfcmVnLmhvcl9hZGRyOworCXZhci0+aHN5bmNfbGVuID0gY3J0X3JlZy5ob3Jfc3luY19lbmQ7CisJdmFyLT51cHBlcl9tYXJnaW4gPQorCSAgICBjcnRfcmVnLnZlcl90b3RhbCAtIChjcnRfcmVnLnZlcl9zeW5jX3N0YXJ0ICsgY3J0X3JlZy52ZXJfc3luY19lbmQpOworCXZhci0+bG93ZXJfbWFyZ2luID0gY3J0X3JlZy52ZXJfc3luY19zdGFydCAtIGNydF9yZWcudmVyX2FkZHI7CisJdmFyLT52c3luY19sZW4gPSBjcnRfcmVnLnZlcl9zeW5jX2VuZDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZjM4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5oCkBAIC0wLDAgKzEsOTMzIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fSFdfSF9fCisjZGVmaW5lIF9fSFdfSF9fCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBEZWZpbml0aW9uIElHQTEgRGVzaWduIE1ldGhvZCBvZiBDUlRDIFJlZ2lzdGVycyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJR0ExX0hPUl9UT1RBTF9GT1JNVUxBKHgpICAgICAgICAgICAoKCh4KS84KS01KQorI2RlZmluZSBJR0ExX0hPUl9BRERSX0ZPUk1VTEEoeCkgICAgICAgICAgICAoKCh4KS84KS0xKQorI2RlZmluZSBJR0ExX0hPUl9CTEFOS19TVEFSVF9GT1JNVUxBKHgpICAgICAoKCh4KS84KS0xKQorI2RlZmluZSBJR0ExX0hPUl9CTEFOS19FTkRfRk9STVVMQSh4LCB5KSAgICAgKCgoeCt5KS84KS0xKQorI2RlZmluZSBJR0ExX0hPUl9TWU5DX1NUQVJUX0ZPUk1VTEEoeCkgICAgICAoKHgpLzgpCisjZGVmaW5lIElHQTFfSE9SX1NZTkNfRU5EX0ZPUk1VTEEoeCwgeSkgICAgICAoKHgreSkvOCkKKworI2RlZmluZSBJR0ExX1ZFUl9UT1RBTF9GT1JNVUxBKHgpICAgICAgICAgICAoKHgpLTIpCisjZGVmaW5lIElHQTFfVkVSX0FERFJfRk9STVVMQSh4KSAgICAgICAgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMV9WRVJfQkxBTktfU1RBUlRfRk9STVVMQSh4KSAgICAgKCh4KS0xKQorI2RlZmluZSBJR0ExX1ZFUl9CTEFOS19FTkRfRk9STVVMQSh4LCB5KSAgICAgKCh4K3kpLTEpCisjZGVmaW5lIElHQTFfVkVSX1NZTkNfU1RBUlRfRk9STVVMQSh4KSAgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMV9WRVJfU1lOQ19FTkRfRk9STVVMQSh4LCB5KSAgICAgICgoeCt5KS0xKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBEZWZpbml0aW9uIElHQTIgRGVzaWduIE1ldGhvZCBvZiBDUlRDIFJlZ2lzdGVycyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJR0EyX0hPUl9UT1RBTF9GT1JNVUxBKHgpICAgICAgICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTJfSE9SX0FERFJfRk9STVVMQSh4KSAgICAgICAgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMl9IT1JfQkxBTktfU1RBUlRfRk9STVVMQSh4KSAgICAgKCh4KS0xKQorI2RlZmluZSBJR0EyX0hPUl9CTEFOS19FTkRfRk9STVVMQSh4LCB5KSAgICAgKCh4K3kpLTEpCisjZGVmaW5lIElHQTJfSE9SX1NZTkNfU1RBUlRfRk9STVVMQSh4KSAgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMl9IT1JfU1lOQ19FTkRfRk9STVVMQSh4LCB5KSAgICAgICgoeCt5KS0xKQorCisjZGVmaW5lIElHQTJfVkVSX1RPVEFMX0ZPUk1VTEEoeCkgICAgICAgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMl9WRVJfQUREUl9GT1JNVUxBKHgpICAgICAgICAgICAgKCh4KS0xKQorI2RlZmluZSBJR0EyX1ZFUl9CTEFOS19TVEFSVF9GT1JNVUxBKHgpICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTJfVkVSX0JMQU5LX0VORF9GT1JNVUxBKHgsIHkpICAgICAoKHgreSktMSkKKyNkZWZpbmUgSUdBMl9WRVJfU1lOQ19TVEFSVF9GT1JNVUxBKHgpICAgICAgKCh4KS0xKQorI2RlZmluZSBJR0EyX1ZFUl9TWU5DX0VORF9GT1JNVUxBKHgsIHkpICAgICAgKCh4K3kpLTEpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVmaW5pdGlvbiBJR0EyIERlc2lnbiBNZXRob2Qgb2YgQ1JUQyBTaGFkb3cgUmVnaXN0ZXJzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUdBMl9IT1JfVE9UQUxfU0hBRE9XX0ZPUk1VTEEoeCkgICAgICAgICAgICgoeC84KS01KQorI2RlZmluZSBJR0EyX0hPUl9CTEFOS19FTkRfU0hBRE9XX0ZPUk1VTEEoeCwgeSkgICAgICgoKHgreSkvOCktMSkKKyNkZWZpbmUgSUdBMl9WRVJfVE9UQUxfU0hBRE9XX0ZPUk1VTEEoeCkgICAgICAgICAgICgoeCktMikKKyNkZWZpbmUgSUdBMl9WRVJfQUREUl9TSEFET1dfRk9STVVMQSh4KSAgICAgICAgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMl9WRVJfQkxBTktfU1RBUlRfU0hBRE9XX0ZPUk1VTEEoeCkgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMl9WRVJfQkxBTktfRU5EX1NIQURPV19GT1JNVUxBKHgsIHkpICAgICAoKHgreSktMSkKKyNkZWZpbmUgSUdBMl9WRVJfU1lOQ19TVEFSVF9TSEFET1dfRk9STVVMQSh4KSAgICAgICh4KQorI2RlZmluZSBJR0EyX1ZFUl9TWU5DX0VORF9TSEFET1dfRk9STVVMQSh4LCB5KSAgICAgICh4K3kpCisKKy8qIERlZmluZSBSZWdpc3RlciBOdW1iZXIgZm9yIElHQTEgQ1JUQyBUaW1pbmcgKi8KKworLyogbG9jYXRpb246IHtDUjAwLDAsN30se0NSMzYsMywzfSAqLworI2RlZmluZSBJR0ExX0hPUl9UT1RBTF9SRUdfTlVNCQkyCisvKiBsb2NhdGlvbjoge0NSMDEsMCw3fSAqLworI2RlZmluZSBJR0ExX0hPUl9BRERSX1JFR19OVU0JCTEKKy8qIGxvY2F0aW9uOiB7Q1IwMiwwLDd9ICovCisjZGVmaW5lIElHQTFfSE9SX0JMQU5LX1NUQVJUX1JFR19OVU0gICAgMQorLyogbG9jYXRpb246IHtDUjAzLDAsNH0se0NSMDUsNyw3fSx7Q1IzMyw1LDV9ICovCisjZGVmaW5lIElHQTFfSE9SX0JMQU5LX0VORF9SRUdfTlVNCTMKKy8qIGxvY2F0aW9uOiB7Q1IwNCwwLDd9LHtDUjMzLDQsNH0gKi8KKyNkZWZpbmUgSUdBMV9IT1JfU1lOQ19TVEFSVF9SRUdfTlVNCTIKKy8qIGxvY2F0aW9uOiB7Q1IwNSwwLDR9ICovCisjZGVmaW5lIElHQTFfSE9SX1NZTkNfRU5EX1JFR19OVU0gICAgICAgMQorLyogbG9jYXRpb246IHtDUjA2LDAsN30se0NSMDcsMCwwfSx7Q1IwNyw1LDV9LHtDUjM1LDAsMH0gKi8KKyNkZWZpbmUgSUdBMV9WRVJfVE9UQUxfUkVHX05VTSAgICAgICAgICA0CisvKiBsb2NhdGlvbjoge0NSMTIsMCw3fSx7Q1IwNywxLDF9LHtDUjA3LDYsNn0se0NSMzUsMiwyfSAqLworI2RlZmluZSBJR0ExX1ZFUl9BRERSX1JFR19OVU0gICAgICAgICAgIDQKKy8qIGxvY2F0aW9uOiB7Q1IxNSwwLDd9LHtDUjA3LDMsM30se0NSMDksNSw1fSx7Q1IzNSwzLDN9ICovCisjZGVmaW5lIElHQTFfVkVSX0JMQU5LX1NUQVJUX1JFR19OVU0gICAgNAorLyogbG9jYXRpb246IHtDUjE2LDAsN30gKi8KKyNkZWZpbmUgSUdBMV9WRVJfQkxBTktfRU5EX1JFR19OVU0gICAgICAxCisvKiBsb2NhdGlvbjoge0NSMTAsMCw3fSx7Q1IwNywyLDJ9LHtDUjA3LDcsN30se0NSMzUsMSwxfSAqLworI2RlZmluZSBJR0ExX1ZFUl9TWU5DX1NUQVJUX1JFR19OVU0gICAgIDQKKy8qIGxvY2F0aW9uOiB7Q1IxMSwwLDN9ICovCisjZGVmaW5lIElHQTFfVkVSX1NZTkNfRU5EX1JFR19OVU0gICAgICAgMQorCisvKiBEZWZpbmUgUmVnaXN0ZXIgTnVtYmVyIGZvciBJR0EyIFNoYWRvdyBDUlRDIFRpbWluZyAqLworCisvKiBsb2NhdGlvbjoge0NSNkQsMCw3fSx7Q1I3MSwzLDN9ICovCisjZGVmaW5lIElHQTJfU0hBRE9XX0hPUl9UT1RBTF9SRUdfTlVNICAgICAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I2RSwwLDd9ICovCisjZGVmaW5lIElHQTJfU0hBRE9XX0hPUl9CTEFOS19FTkRfUkVHX05VTSAgIDEKKy8qIGxvY2F0aW9uOiB7Q1I2RiwwLDd9LHtDUjcxLDAsMn0gKi8KKyNkZWZpbmUgSUdBMl9TSEFET1dfVkVSX1RPVEFMX1JFR19OVU0gICAgICAgMgorLyogbG9jYXRpb246IHtDUjcwLDAsN30se0NSNzEsNCw2fSAqLworI2RlZmluZSBJR0EyX1NIQURPV19WRVJfQUREUl9SRUdfTlVNICAgICAgICAyCisvKiBsb2NhdGlvbjoge0NSNzIsMCw3fSx7Q1I3NCw0LDZ9ICovCisjZGVmaW5lIElHQTJfU0hBRE9XX1ZFUl9CTEFOS19TVEFSVF9SRUdfTlVNIDIKKy8qIGxvY2F0aW9uOiB7Q1I3MywwLDd9LHtDUjc0LDAsMn0gKi8KKyNkZWZpbmUgSUdBMl9TSEFET1dfVkVSX0JMQU5LX0VORF9SRUdfTlVNICAgMgorLyogbG9jYXRpb246IHtDUjc1LDAsN30se0NSNzYsNCw2fSAqLworI2RlZmluZSBJR0EyX1NIQURPV19WRVJfU1lOQ19TVEFSVF9SRUdfTlVNICAyCisvKiBsb2NhdGlvbjoge0NSNzYsMCwzfSAqLworI2RlZmluZSBJR0EyX1NIQURPV19WRVJfU1lOQ19FTkRfUkVHX05VTSAgICAxCisKKy8qIERlZmluZSBSZWdpc3RlciBOdW1iZXIgZm9yIElHQTIgQ1JUQyBUaW1pbmcgKi8KKworLyogbG9jYXRpb246IHtDUjUwLDAsN30se0NSNTUsMCwzfSAqLworI2RlZmluZSBJR0EyX0hPUl9UT1RBTF9SRUdfTlVNICAgICAgICAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I1MSwwLDd9LHtDUjU1LDQsNn0gKi8KKyNkZWZpbmUgSUdBMl9IT1JfQUREUl9SRUdfTlVNICAgICAgICAgICAyCisvKiBsb2NhdGlvbjoge0NSNTIsMCw3fSx7Q1I1NCwwLDJ9ICovCisjZGVmaW5lIElHQTJfSE9SX0JMQU5LX1NUQVJUX1JFR19OVU0gICAgMgorLyogbG9jYXRpb246IENMRTI2Njoge0NSNTMsMCw3fSx7Q1I1NCwzLDV9ID0+IENMRTI2NidzIENSNURbNl0KK2lzIHJlc2VydmVkLCBzbyBpdCBtYXkgaGF2ZSBwcm9ibGVtIHRvIHNldCAxNjAweDEyMDAgb24gSUdBMi4gKi8KKy8qICAgICAgICAgCU90aGVyczoge0NSNTMsMCw3fSx7Q1I1NCwzLDV9LHtDUjVELDYsNn0gKi8KKyNkZWZpbmUgSUdBMl9IT1JfQkxBTktfRU5EX1JFR19OVU0gICAgICAzCisvKiBsb2NhdGlvbjoge0NSNTYsMCw3fSx7Q1I1NCw2LDd9LHtDUjVDLDcsN30gKi8KKy8qIFZUMzMxNCBhbmQgTGF0ZXI6IHtDUjU2LDAsN30se0NSNTQsNiw3fSx7Q1I1Qyw3LDd9LCB7Q1I1RCw3LDd9ICovCisjZGVmaW5lIElHQTJfSE9SX1NZTkNfU1RBUlRfUkVHX05VTSAgICAgNAorCisvKiBsb2NhdGlvbjoge0NSNTcsMCw3fSx7Q1I1Qyw2LDZ9ICovCisjZGVmaW5lIElHQTJfSE9SX1NZTkNfRU5EX1JFR19OVU0gICAgICAgMgorLyogbG9jYXRpb246IHtDUjU4LDAsN30se0NSNUQsMCwyfSAqLworI2RlZmluZSBJR0EyX1ZFUl9UT1RBTF9SRUdfTlVNICAgICAgICAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I1OSwwLDd9LHtDUjVELDMsNX0gKi8KKyNkZWZpbmUgSUdBMl9WRVJfQUREUl9SRUdfTlVNICAgICAgICAgICAyCisvKiBsb2NhdGlvbjoge0NSNUEsMCw3fSx7Q1I1QywwLDJ9ICovCisjZGVmaW5lIElHQTJfVkVSX0JMQU5LX1NUQVJUX1JFR19OVU0gICAgMgorLyogbG9jYXRpb246IHtDUjVFLDAsN30se0NSNUMsMyw1fSAqLworI2RlZmluZSBJR0EyX1ZFUl9CTEFOS19FTkRfUkVHX05VTSAgICAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I1RSwwLDd9LHtDUjVGLDUsN30gKi8KKyNkZWZpbmUgSUdBMl9WRVJfU1lOQ19TVEFSVF9SRUdfTlVNICAgICAyCisvKiBsb2NhdGlvbjoge0NSNUYsMCw0fSAqLworI2RlZmluZSBJR0EyX1ZFUl9TWU5DX0VORF9SRUdfTlVNICAgICAgIDEKKworLyogRGVmaW5lIE9mZnNldCBhbmQgRmV0Y2ggQ291bnQgUmVnaXN0ZXIqLworCisvKiBsb2NhdGlvbjoge0NSMTMsMCw3fSx7Q1IzNSw1LDd9ICovCisjZGVmaW5lIElHQTFfT0ZGU0VUX1JFR19OVU0gICAgICAgICAgICAgMgorLyogOCBieXRlcyBhbGlnbm1lbnQuICovCisjZGVmaW5lIElHQTFfT0ZGU0VSX0FMSUdOX0JZVEUgICAgICAgICAgOAorLyogeDogSCByZXNvbHV0aW9uLCB5OiBjb2xvciBkZXB0aCAqLworI2RlZmluZSBJR0ExX09GRlNFVF9GT1JNVUxBKHgsIHkpICAgICAgICAoKHgqeSkvSUdBMV9PRkZTRVJfQUxJR05fQllURSkKKy8qIGxvY2F0aW9uOiB7U1IxQywwLDd9LHtTUjFELDAsMX0gKi8KKyNkZWZpbmUgSUdBMV9GRVRDSF9DT1VOVF9SRUdfTlVNICAgICAgICAyCisvKiAxNiBieXRlcyBhbGlnbm1lbnQuICovCisjZGVmaW5lIElHQTFfRkVUQ0hfQ09VTlRfQUxJR05fQllURSAgICAgMTYKKy8qIHg6IEggcmVzb2x1dGlvbiwgeTogY29sb3IgZGVwdGggKi8KKyNkZWZpbmUgSUdBMV9GRVRDSF9DT1VOVF9QQVRDSF9WQUxVRSAgICA0CisjZGVmaW5lIElHQTFfRkVUQ0hfQ09VTlRfRk9STVVMQSh4LCB5KSAgIFwKKwkoKCh4KnkpL0lHQTFfRkVUQ0hfQ09VTlRfQUxJR05fQllURSkgKyBJR0ExX0ZFVENIX0NPVU5UX1BBVENIX1ZBTFVFKQorCisvKiBsb2NhdGlvbjoge0NSNjYsMCw3fSx7Q1I2NywwLDF9ICovCisjZGVmaW5lIElHQTJfT0ZGU0VUX1JFR19OVU0gICAgICAgICAgICAgMgorI2RlZmluZSBJR0EyX09GRlNFVF9BTElHTl9CWVRFICAgICAgICAgIDgKKy8qIHg6IEggcmVzb2x1dGlvbiwgeTogY29sb3IgZGVwdGggKi8KKyNkZWZpbmUgSUdBMl9PRkZTRVRfRk9STVVMQSh4LCB5KSAgICAgICAgKCh4KnkpL0lHQTJfT0ZGU0VUX0FMSUdOX0JZVEUpCisvKiBsb2NhdGlvbjoge0NSNjUsMCw3fSx7Q1I2NywyLDN9ICovCisjZGVmaW5lIElHQTJfRkVUQ0hfQ09VTlRfUkVHX05VTSAgICAgICAgMgorI2RlZmluZSBJR0EyX0ZFVENIX0NPVU5UX0FMSUdOX0JZVEUgICAgIDE2CisjZGVmaW5lIElHQTJfRkVUQ0hfQ09VTlRfUEFUQ0hfVkFMVUUgICAgMAorI2RlZmluZSBJR0EyX0ZFVENIX0NPVU5UX0ZPUk1VTEEoeCwgeSkgICBcCisJKCgoeCp5KS9JR0EyX0ZFVENIX0NPVU5UX0FMSUdOX0JZVEUpICsgSUdBMl9GRVRDSF9DT1VOVF9QQVRDSF9WQUxVRSkKKworLyogU3RhcmluZyBBZGRyZXNzKi8KKworLyogbG9jYXRpb246IHtDUjBDLDAsN30se0NSMEQsMCw3fSx7Q1IzNCwwLDd9LHtDUjQ4LDAsMX0gKi8KKyNkZWZpbmUgSUdBMV9TVEFSVElOR19BRERSX1JFR19OVU0gICAgICA0CisvKiBsb2NhdGlvbjoge0NSNjIsMSw3fSx7Q1I2MywwLDd9LHtDUjY0LDAsN30gKi8KKyNkZWZpbmUgSUdBMl9TVEFSVElOR19BRERSX1JFR19OVU0gICAgICAzCisKKy8qIERlZmluZSBEaXNwbGF5IE9GRlNFVCovCisvKiBUaGVzZSB2YWx1ZSBhcmUgYnkgSFcgc3VnZ2VzdGVkIHZhbHVlKi8KKy8qIGxvY2F0aW9uOiB7U1IxNywwLDd9ICovCisjZGVmaW5lIEs4MDBfSUdBMV9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgICAzODQKKy8qIGxvY2F0aW9uOiB7U1IxNiwwLDV9LHtTUjE2LDcsN30gKi8KKyNkZWZpbmUgSzgwMF9JR0ExX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgIDMyOAorLyogbG9jYXRpb246IHtTUjE4LDAsNX0se1NSMTgsNyw3fSAqLworI2RlZmluZSBLODAwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAgMjk2CisvKiBsb2NhdGlvbjoge1NSMjIsMCw0fS4gKDEyOC80KSA9NjQsIEs4MDAgbXVzdCBiZSBzZXQgemVybywgKi8KKwkJCQkvKiBiZWNhdXNlIEhXIG9ubHkgNSBiaXRzICovCisjZGVmaW5lIEs4MDBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgICAwCisKKy8qIGxvY2F0aW9uOiB7Q1I2OCw0LDd9LHtDUjk0LDcsN30se0NSOTUsNyw3fSAqLworI2RlZmluZSBLODAwX0lHQTJfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICAgMzg0CisvKiBsb2NhdGlvbjoge0NSNjgsMCwzfSx7Q1I5NSw0LDZ9ICovCisjZGVmaW5lIEs4MDBfSUdBMl9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMjgKKy8qIGxvY2F0aW9uOiB7Q1I5MiwwLDN9LHtDUjk1LDAsMn0gKi8KKyNkZWZpbmUgSzgwMF9JR0EyX0ZJRk9fSElHSF9USFJFU0hPTEQgICAgICAgICAgIDI5NgorLyogbG9jYXRpb246IHtDUjk0LDAsNn0gKi8KKyNkZWZpbmUgSzgwMF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgIDEyOAorCisvKiBsb2NhdGlvbjoge1NSMTcsMCw3fSAqLworI2RlZmluZSBQODgwX0lHQTFfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICAgMTkyCisvKiBsb2NhdGlvbjoge1NSMTYsMCw1fSx7U1IxNiw3LDd9ICovCisjZGVmaW5lIFA4ODBfSUdBMV9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxMjgKKy8qIGxvY2F0aW9uOiB7U1IxOCwwLDV9LHtTUjE4LDcsN30gKi8KKyNkZWZpbmUgUDg4MF9JR0ExX0ZJRk9fSElHSF9USFJFU0hPTEQgICAgICAgICAgIDY0CisvKiBsb2NhdGlvbjoge1NSMjIsMCw0fS4gKDEyOC80KSA9NjQsIEs4MDAgbXVzdCBiZSBzZXQgemVybywgKi8KKwkJCQkvKiBiZWNhdXNlIEhXIG9ubHkgNSBiaXRzICovCisjZGVmaW5lIFA4ODBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgICAwCisKKy8qIGxvY2F0aW9uOiB7Q1I2OCw0LDd9LHtDUjk0LDcsN30se0NSOTUsNyw3fSAqLworI2RlZmluZSBQODgwX0lHQTJfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICAgOTYKKy8qIGxvY2F0aW9uOiB7Q1I2OCwwLDN9LHtDUjk1LDQsNn0gKi8KKyNkZWZpbmUgUDg4MF9JR0EyX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgIDY0CisvKiBsb2NhdGlvbjoge0NSOTIsMCwzfSx7Q1I5NSwwLDJ9ICovCisjZGVmaW5lIFA4ODBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgICAzMgorLyogbG9jYXRpb246IHtDUjk0LDAsNn0gKi8KKyNkZWZpbmUgUDg4MF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgIDEyOAorCisvKiBWVDMzMTQgY2hpcHNldCovCisKKy8qIGxvY2F0aW9uOiB7U1IxNywwLDd9ICovCisjZGVmaW5lIENONzAwX0lHQTFfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICA5NgorLyogbG9jYXRpb246IHtTUjE2LDAsNX0se1NSMTYsNyw3fSAqLworI2RlZmluZSBDTjcwMF9JR0ExX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgODAKKy8qIGxvY2F0aW9uOiB7U1IxOCwwLDV9LHtTUjE4LDcsN30gKi8KKyNkZWZpbmUgQ043MDBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDY0CisvKiBsb2NhdGlvbjoge1NSMjIsMCw0fS4gKDEyOC80KSA9NjQsIFA4MDAgbXVzdCBiZSBzZXQgemVybywKKwkJCQliZWNhdXNlIEhXIG9ubHkgNSBiaXRzICovCisjZGVmaW5lIENONzAwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAwCisvKiBsb2NhdGlvbjoge0NSNjgsNCw3fSx7Q1I5NCw3LDd9LHtDUjk1LDcsN30gKi8KKyNkZWZpbmUgQ043MDBfSUdBMl9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDk2CisvKiBsb2NhdGlvbjoge0NSNjgsMCwzfSx7Q1I5NSw0LDZ9ICovCisjZGVmaW5lIENONzAwX0lHQTJfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICA4MAorLyogbG9jYXRpb246IHtDUjkyLDAsM30se0NSOTUsMCwyfSAqLworI2RlZmluZSBDTjcwMF9JR0EyX0ZJRk9fSElHSF9USFJFU0hPTEQgICAgICAgICAgMzIKKy8qIGxvY2F0aW9uOiB7Q1I5NCwwLDZ9ICovCisjZGVmaW5lIENONzAwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAxMjgKKworLyogRm9yIFZUMzMyNCwgdGhlc2UgdmFsdWVzIGFyZSBzdWdnZXN0ZWQgYnkgSFcgKi8KKy8qIGxvY2F0aW9uOiB7U1IxNywwLDd9ICovCisjZGVmaW5lIENYNzAwX0lHQTFfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICAxOTIKKy8qIGxvY2F0aW9uOiB7U1IxNiwwLDV9LHtTUjE2LDcsN30gKi8KKyNkZWZpbmUgQ1g3MDBfSUdBMV9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDEyOAorLyogbG9jYXRpb246IHtTUjE4LDAsNX0se1NSMTgsNyw3fSAqLworI2RlZmluZSBDWDcwMF9JR0ExX0ZJRk9fSElHSF9USFJFU0hPTEQgICAgICAgICAgMTI4CisvKiBsb2NhdGlvbjoge1NSMjIsMCw0fSAqLworI2RlZmluZSBDWDcwMF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMTI0CisKKy8qIGxvY2F0aW9uOiB7Q1I2OCw0LDd9LHtDUjk0LDcsN30se0NSOTUsNyw3fSAqLworI2RlZmluZSBDWDcwMF9JR0EyX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgOTYKKy8qIGxvY2F0aW9uOiB7Q1I2OCwwLDN9LHtDUjk1LDQsNn0gKi8KKyNkZWZpbmUgQ1g3MDBfSUdBMl9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDY0CisvKiBsb2NhdGlvbjoge0NSOTIsMCwzfSx7Q1I5NSwwLDJ9ICovCisjZGVmaW5lIENYNzAwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAzMgorLyogbG9jYXRpb246IHtDUjk0LDAsNn0gKi8KKyNkZWZpbmUgQ1g3MDBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgIDEyOAorCisvKiBWVDMzMzYgY2hpcHNldCovCisvKiBsb2NhdGlvbjoge1NSMTcsMCw3fSAqLworI2RlZmluZSBLOE04OTBfSUdBMV9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDM2MAorLyogbG9jYXRpb246IHtTUjE2LDAsNX0se1NSMTYsNyw3fSAqLworI2RlZmluZSBLOE04OTBfSUdBMV9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMyOAorLyogbG9jYXRpb246IHtTUjE4LDAsNX0se1NSMTgsNyw3fSAqLworI2RlZmluZSBLOE04OTBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDI5NgorLyogbG9jYXRpb246IHtTUjIyLDAsNH0uICovCisjZGVmaW5lIEs4TTg5MF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMTI0CisKKy8qIGxvY2F0aW9uOiB7Q1I2OCw0LDd9LHtDUjk0LDcsN30se0NSOTUsNyw3fSAqLworI2RlZmluZSBLOE04OTBfSUdBMl9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDM2MAorLyogbG9jYXRpb246IHtDUjY4LDAsM30se0NSOTUsNCw2fSAqLworI2RlZmluZSBLOE04OTBfSUdBMl9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMyOAorLyogbG9jYXRpb246IHtDUjkyLDAsM30se0NSOTUsMCwyfSAqLworI2RlZmluZSBLOE04OTBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDI5NgorLyogbG9jYXRpb246IHtDUjk0LDAsNn0gKi8KKyNkZWZpbmUgSzhNODkwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAxMjQKKworLyogVlQzMzI3IGNoaXBzZXQqLworLyogbG9jYXRpb246IHtTUjE3LDAsN30gKi8KKyNkZWZpbmUgUDRNODkwX0lHQTFfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICA5NgorLyogbG9jYXRpb246IHtTUjE2LDAsNX0se1NSMTYsNyw3fSAqLworI2RlZmluZSBQNE04OTBfSUdBMV9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDc2CisvKiBsb2NhdGlvbjoge1NSMTgsMCw1fSx7U1IxOCw3LDd9ICovCisjZGVmaW5lIFA0TTg5MF9JR0ExX0ZJRk9fSElHSF9USFJFU0hPTEQgICAgICAgICAgNjQKKy8qIGxvY2F0aW9uOiB7U1IyMiwwLDR9LiAoMzIvNCkgPTggKi8KKyNkZWZpbmUgUDRNODkwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAzMgorLyogbG9jYXRpb246IHtDUjY4LDQsN30se0NSOTQsNyw3fSx7Q1I5NSw3LDd9ICovCisjZGVmaW5lIFA0TTg5MF9JR0EyX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgOTYKKy8qIGxvY2F0aW9uOiB7Q1I2OCwwLDN9LHtDUjk1LDQsNn0gKi8KKyNkZWZpbmUgUDRNODkwX0lHQTJfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICA3NgorLyogbG9jYXRpb246IHtDUjkyLDAsM30se0NSOTUsMCwyfSAqLworI2RlZmluZSBQNE04OTBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDY0CisvKiBsb2NhdGlvbjoge0NSOTQsMCw2fSAqLworI2RlZmluZSBQNE04OTBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgIDMyCisKKy8qIFZUMzM2NCBjaGlwc2V0Ki8KKy8qIGxvY2F0aW9uOiB7U1IxNywwLDd9ICovCisjZGVmaW5lIFA0TTkwMF9JR0ExX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgOTYKKy8qIGxvY2F0aW9uOiB7U1IxNiwwLDV9LHtTUjE2LDcsN30gKi8KKyNkZWZpbmUgUDRNOTAwX0lHQTFfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICA3NgorLyogbG9jYXRpb246IHtTUjE4LDAsNX0se1NSMTgsNyw3fSAqLworI2RlZmluZSBQNE05MDBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDc2CisvKiBsb2NhdGlvbjoge1NSMjIsMCw0fS4gKi8KKyNkZWZpbmUgUDRNOTAwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAzMgorLyogbG9jYXRpb246IHtDUjY4LDQsN30se0NSOTQsNyw3fSx7Q1I5NSw3LDd9ICovCisjZGVmaW5lIFA0TTkwMF9JR0EyX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgOTYKKy8qIGxvY2F0aW9uOiB7Q1I2OCwwLDN9LHtDUjk1LDQsNn0gKi8KKyNkZWZpbmUgUDRNOTAwX0lHQTJfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICA3NgorLyogbG9jYXRpb246IHtDUjkyLDAsM30se0NSOTUsMCwyfSAqLworI2RlZmluZSBQNE05MDBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDc2CisvKiBsb2NhdGlvbjoge0NSOTQsMCw2fSAqLworI2RlZmluZSBQNE05MDBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgIDMyCisKKy8qIEZvciBWVDMzNTMsIHRoZXNlIHZhbHVlcyBhcmUgc3VnZ2VzdGVkIGJ5IEhXICovCisvKiBsb2NhdGlvbjoge1NSMTcsMCw3fSAqLworI2RlZmluZSBWWDgwMF9JR0ExX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgMTkyCisvKiBsb2NhdGlvbjoge1NSMTYsMCw1fSx7U1IxNiw3LDd9ICovCisjZGVmaW5lIFZYODAwX0lHQTFfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICAxNTIKKy8qIGxvY2F0aW9uOiB7U1IxOCwwLDV9LHtTUjE4LDcsN30gKi8KKyNkZWZpbmUgVlg4MDBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDE1MgorLyogbG9jYXRpb246IHtTUjIyLDAsNH0gKi8KKyNkZWZpbmUgVlg4MDBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgICA2NAorLyogbG9jYXRpb246IHtDUjY4LDQsN30se0NSOTQsNyw3fSx7Q1I5NSw3LDd9ICovCisjZGVmaW5lIFZYODAwX0lHQTJfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICA5NgorLyogbG9jYXRpb246IHtDUjY4LDAsM30se0NSOTUsNCw2fSAqLworI2RlZmluZSBWWDgwMF9JR0EyX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgNjQKKy8qIGxvY2F0aW9uOiB7Q1I5MiwwLDN9LHtDUjk1LDAsMn0gKi8KKyNkZWZpbmUgVlg4MDBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDMyCisvKiBsb2NhdGlvbjoge0NSOTQsMCw2fSAqLworI2RlZmluZSBWWDgwMF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMTI4CisKKyNkZWZpbmUgSUdBMV9GSUZPX0RFUFRIX1NFTEVDVF9SRUdfTlVNICAgICAgICAgIDEKKyNkZWZpbmUgSUdBMV9GSUZPX1RIUkVTSE9MRF9SRUdfTlVNICAgICAgICAgICAgIDIKKyNkZWZpbmUgSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEX1JFR19OVU0gICAgICAgIDIKKyNkZWZpbmUgSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU1fUkVHX05VTSAgIDEKKworI2RlZmluZSBJR0EyX0ZJRk9fREVQVEhfU0VMRUNUX1JFR19OVU0gICAgICAgICAgMworI2RlZmluZSBJR0EyX0ZJRk9fVEhSRVNIT0xEX1JFR19OVU0gICAgICAgICAgICAgMgorI2RlZmluZSBJR0EyX0ZJRk9fSElHSF9USFJFU0hPTERfUkVHX05VTSAgICAgICAgMgorI2RlZmluZSBJR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTV9SRUdfTlVNICAgMQorCisjZGVmaW5lIElHQTFfRklGT19ERVBUSF9TRUxFQ1RfRk9STVVMQSh4KSAgICAgICAgICAgICAgICAgICAoKHgvMiktMSkKKyNkZWZpbmUgSUdBMV9GSUZPX1RIUkVTSE9MRF9GT1JNVUxBKHgpICAgICAgICAgICAgICAgICAgICAgICh4LzQpCisjZGVmaW5lIElHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNX0ZPUk1VTEEoeCkgICAgICAgICAgICAoeC80KQorI2RlZmluZSBJR0ExX0ZJRk9fSElHSF9USFJFU0hPTERfRk9STVVMQSh4KSAgICAgICAgICAgICAgICAgKHgvNCkKKyNkZWZpbmUgSUdBMl9GSUZPX0RFUFRIX1NFTEVDVF9GT1JNVUxBKHgpICAgICAgICAgICAgICAgICAgICgoKHgvMikvNCktMSkKKyNkZWZpbmUgSUdBMl9GSUZPX1RIUkVTSE9MRF9GT1JNVUxBKHgpICAgICAgICAgICAgICAgICAgICAgICh4LzQpCisjZGVmaW5lIElHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNX0ZPUk1VTEEoeCkgICAgICAgICAgICAoeC80KQorI2RlZmluZSBJR0EyX0ZJRk9fSElHSF9USFJFU0hPTERfRk9STVVMQSh4KSAgICAgICAgICAgICAgICAgKHgvNCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICBMQ0QgVGltaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiA1MDAgbXMgPSA1MDAwMDAgdXMgKi8KKyNkZWZpbmUgTENEX1BPV0VSX1NFUV9URDAgICAgICAgICAgICAgICA1MDAwMDAKKy8qIDUwIG1zID0gNTAwMDAgdXMgKi8KKyNkZWZpbmUgTENEX1BPV0VSX1NFUV9URDEgICAgICAgICAgICAgICA1MDAwMAorLyogMCB1cyAqLworI2RlZmluZSBMQ0RfUE9XRVJfU0VRX1REMiAgICAgICAgICAgICAgIDAKKy8qIDIxMCBtcyA9IDIxMDAwMCB1cyAqLworI2RlZmluZSBMQ0RfUE9XRVJfU0VRX1REMyAgICAgICAgICAgICAgIDIxMDAwMAorLyogMl4xMCAqICgxLzE0LjMxODE4TSkgPSA3MS40NzUgdXMgKEs0MDAucmV2QSkgKi8KKyNkZWZpbmUgQ0xFMjY2X1BPV0VSX1NFUV9VTklUICAgICAgICAgICA3MQorLyogMl4xMSAqICgxLzE0LjMxODE4TSkgPSAxNDIuOTUgdXMgKEs0MDAucmV2QikgKi8KKyNkZWZpbmUgSzgwMF9QT1dFUl9TRVFfVU5JVCAgICAgICAgICAgICAxNDIKKy8qIDJeMTMgKiAoMS8xNC4zMTgxOE0pID0gNTcyLjEgdXMgKi8KKyNkZWZpbmUgUDg4MF9QT1dFUl9TRVFfVU5JVCAgICAgICAgICAgICA1NzIKKworI2RlZmluZSBDTEUyNjZfUE9XRVJfU0VRX0ZPUk1VTEEoeCkgICAgICgoeCkvQ0xFMjY2X1BPV0VSX1NFUV9VTklUKQorI2RlZmluZSBLODAwX1BPV0VSX1NFUV9GT1JNVUxBKHgpICAgICAgICgoeCkvSzgwMF9QT1dFUl9TRVFfVU5JVCkKKyNkZWZpbmUgUDg4MF9QT1dFUl9TRVFfRk9STVVMQSh4KSAgICAgICAoKHgpL1A4ODBfUE9XRVJfU0VRX1VOSVQpCisKKy8qIGxvY2F0aW9uOiB7Q1I4QiwwLDd9LHtDUjhGLDAsM30gKi8KKyNkZWZpbmUgTENEX1BPV0VSX1NFUV9URDBfUkVHX05VTSAgICAgICAyCisvKiBsb2NhdGlvbjoge0NSOEMsMCw3fSx7Q1I4Riw0LDd9ICovCisjZGVmaW5lIExDRF9QT1dFUl9TRVFfVEQxX1JFR19OVU0gICAgICAgMgorLyogbG9jYXRpb246IHtDUjhELDAsN30se0NSOTAsMCwzfSAqLworI2RlZmluZSBMQ0RfUE9XRVJfU0VRX1REMl9SRUdfTlVNICAgICAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I4RSwwLDd9LHtDUjkwLDQsN30gKi8KKyNkZWZpbmUgTENEX1BPV0VSX1NFUV9URDNfUkVHX05VTSAgICAgICAyCisKKy8qIExDRCBTY2FsaW5nIGZhY3RvciovCisvKiB4OiBpbmRpY2F0ZSBzZXR0aW5nIGhvcml6b250YWwgc2l6ZSovCisvKiB5OiBpbmRpY2F0ZSBwYW5lbCBob3Jpem9udGFsIHNpemUqLworCisvKiBIb3Jpem9udGFsIHNjYWxpbmcgZmFjdG9yIDEwIGJpdHMgKDJeMTApICovCisjZGVmaW5lIENMRTI2Nl9MQ0RfSE9SX1NDRl9GT1JNVUxBKHgsIHkpICAgKCgoeC0xKSoxMDI0KS8oeS0xKSkKKy8qIFZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yIDEwIGJpdHMgKDJeMTApICovCisjZGVmaW5lIENMRTI2Nl9MQ0RfVkVSX1NDRl9GT1JNVUxBKHgsIHkpICAgKCgoeC0xKSoxMDI0KS8oeS0xKSkKKy8qIEhvcml6b250YWwgc2NhbGluZyBmYWN0b3IgMTAgYml0cyAoMl4xMikgKi8KKyNkZWZpbmUgSzgwMF9MQ0RfSE9SX1NDRl9GT1JNVUxBKHgsIHkpICAgICAoKCh4LTEpKjQwOTYpLyh5LTEpKQorLyogVmVydGljYWwgc2NhbGluZyBmYWN0b3IgMTAgYml0cyAoMl4xMSkgKi8KKyNkZWZpbmUgSzgwMF9MQ0RfVkVSX1NDRl9GT1JNVUxBKHgsIHkpICAgICAoKCh4LTEpKjIwNDgpLyh5LTEpKQorCisvKiBsb2NhdGlvbjoge0NSOUYsMCwxfSx7Q1I3NywwLDd9LHtDUjc5LDQsNX0gKi8KKyNkZWZpbmUgTENEX0hPUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNICAzCisvKiBsb2NhdGlvbjoge0NSNzksMywzfSx7Q1I3OCwwLDd9LHtDUjc5LDYsN30gKi8KKyNkZWZpbmUgTENEX1ZFUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNICAzCisvKiBsb2NhdGlvbjoge0NSNzcsMCw3fSx7Q1I3OSw0LDV9ICovCisjZGVmaW5lIExDRF9IT1JfU0NBTElOR19GQUNUT1JfUkVHX05VTV9DTEUgIDIKKy8qIGxvY2F0aW9uOiB7Q1I3OCwwLDd9LHtDUjc5LDYsN30gKi8KKyNkZWZpbmUgTENEX1ZFUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNX0NMRSAgMgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKiogICAgIERlZmluZSBJR0ExIERpc3BsYXkgVGltaW5nICAgICAgICoqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlvX3JlZ2lzdGVyIHsKKwl1OCBpb19hZGRyOworCXU4IHN0YXJ0X2JpdDsKKwl1OCBlbmRfYml0OworfTsKKworLyogSUdBMSBIb3Jpem9udGFsIFRvdGFsICovCitzdHJ1Y3QgaWdhMV9ob3JfdG90YWwgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9IT1JfVE9UQUxfUkVHX05VTV07Cit9OworCisvKiBJR0ExIEhvcml6b250YWwgQWRkcmVzc2FibGUgVmlkZW8gKi8KK3N0cnVjdCBpZ2ExX2hvcl9hZGRyIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfSE9SX0FERFJfUkVHX05VTV07Cit9OworCisvKiBJR0ExIEhvcml6b250YWwgQmxhbmsgU3RhcnQgKi8KK3N0cnVjdCBpZ2ExX2hvcl9ibGFua19zdGFydCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX0hPUl9CTEFOS19TVEFSVF9SRUdfTlVNXTsKK307CisKKy8qIElHQTEgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KK3N0cnVjdCBpZ2ExX2hvcl9ibGFua19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9IT1JfQkxBTktfRU5EX1JFR19OVU1dOworfTsKKworLyogSUdBMSBIb3Jpem9udGFsIFN5bmMgU3RhcnQgKi8KK3N0cnVjdCBpZ2ExX2hvcl9zeW5jX3N0YXJ0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfSE9SX1NZTkNfU1RBUlRfUkVHX05VTV07Cit9OworCisvKiBJR0ExIEhvcml6b250YWwgU3luYyBFbmQgKi8KK3N0cnVjdCBpZ2ExX2hvcl9zeW5jX2VuZCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX0hPUl9TWU5DX0VORF9SRUdfTlVNXTsKK307CisKKy8qIElHQTEgVmVydGljYWwgVG90YWwgKi8KK3N0cnVjdCBpZ2ExX3Zlcl90b3RhbCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX1ZFUl9UT1RBTF9SRUdfTlVNXTsKK307CisKKy8qIElHQTEgVmVydGljYWwgQWRkcmVzc2FibGUgVmlkZW8gKi8KK3N0cnVjdCBpZ2ExX3Zlcl9hZGRyIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfVkVSX0FERFJfUkVHX05VTV07Cit9OworCisvKiBJR0ExIFZlcnRpY2FsIEJsYW5rIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMV92ZXJfYmxhbmtfc3RhcnQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9WRVJfQkxBTktfU1RBUlRfUkVHX05VTV07Cit9OworCisvKiBJR0ExIFZlcnRpY2FsIEJsYW5rIEVuZCAqLworc3RydWN0IGlnYTFfdmVyX2JsYW5rX2VuZCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX1ZFUl9CTEFOS19FTkRfUkVHX05VTV07Cit9OworCisvKiBJR0ExIFZlcnRpY2FsIFN5bmMgU3RhcnQgKi8KK3N0cnVjdCBpZ2ExX3Zlcl9zeW5jX3N0YXJ0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfVkVSX1NZTkNfU1RBUlRfUkVHX05VTV07Cit9OworCisvKiBJR0ExIFZlcnRpY2FsIFN5bmMgRW5kICovCitzdHJ1Y3QgaWdhMV92ZXJfc3luY19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9WRVJfU1lOQ19FTkRfUkVHX05VTV07Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqICAgICAgRGVmaW5lIElHQTIgU2hhZG93IERpc3BsYXkgVGltaW5nICAgICAgICAgKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIElHQTIgU2hhZG93IEhvcml6b250YWwgVG90YWwgKi8KK3N0cnVjdCBpZ2EyX3NoYWRvd19ob3JfdG90YWwgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9TSEFET1dfSE9SX1RPVEFMX1JFR19OVU1dOworfTsKKworLyogSUdBMiBTaGFkb3cgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KK3N0cnVjdCBpZ2EyX3NoYWRvd19ob3JfYmxhbmtfZW5kIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfU0hBRE9XX0hPUl9CTEFOS19FTkRfUkVHX05VTV07Cit9OworCisvKiBJR0EyIFNoYWRvdyBWZXJ0aWNhbCBUb3RhbCAqLworc3RydWN0IGlnYTJfc2hhZG93X3Zlcl90b3RhbCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1NIQURPV19WRVJfVE9UQUxfUkVHX05VTV07Cit9OworCisvKiBJR0EyIFNoYWRvdyBWZXJ0aWNhbCBBZGRyZXNzYWJsZSBWaWRlbyAqLworc3RydWN0IGlnYTJfc2hhZG93X3Zlcl9hZGRyIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfU0hBRE9XX1ZFUl9BRERSX1JFR19OVU1dOworfTsKKworLyogSUdBMiBTaGFkb3cgVmVydGljYWwgQmxhbmsgU3RhcnQgKi8KK3N0cnVjdCBpZ2EyX3NoYWRvd192ZXJfYmxhbmtfc3RhcnQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9TSEFET1dfVkVSX0JMQU5LX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMiBTaGFkb3cgVmVydGljYWwgQmxhbmsgRW5kICovCitzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX2JsYW5rX2VuZCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1NIQURPV19WRVJfQkxBTktfRU5EX1JFR19OVU1dOworfTsKKworLyogSUdBMiBTaGFkb3cgVmVydGljYWwgU3luYyBTdGFydCAqLworc3RydWN0IGlnYTJfc2hhZG93X3Zlcl9zeW5jX3N0YXJ0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfU0hBRE9XX1ZFUl9TWU5DX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMiBTaGFkb3cgVmVydGljYWwgU3luYyBFbmQgKi8KK3N0cnVjdCBpZ2EyX3NoYWRvd192ZXJfc3luY19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9TSEFET1dfVkVSX1NZTkNfRU5EX1JFR19OVU1dOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgICAgIERlZmluZSBJR0EyIERpc3BsYXkgVGltaW5nICAgICAgICAgICAgICAgICoqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCitzdHJ1Y3QgaWdhMl9ob3JfdG90YWwgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9IT1JfVE9UQUxfUkVHX05VTV07Cit9OworCisvKiBJR0EyIEhvcml6b250YWwgQWRkcmVzc2FibGUgVmlkZW8gKi8KK3N0cnVjdCBpZ2EyX2hvcl9hZGRyIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfSE9SX0FERFJfUkVHX05VTV07Cit9OworCisvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgU3RhcnQgKi8KK3N0cnVjdCBpZ2EyX2hvcl9ibGFua19zdGFydCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX0hPUl9CTEFOS19TVEFSVF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KK3N0cnVjdCBpZ2EyX2hvcl9ibGFua19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9IT1JfQkxBTktfRU5EX1JFR19OVU1dOworfTsKKworLyogSUdBMiBIb3Jpem9udGFsIFN5bmMgU3RhcnQgKi8KK3N0cnVjdCBpZ2EyX2hvcl9zeW5jX3N0YXJ0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfSE9SX1NZTkNfU1RBUlRfUkVHX05VTV07Cit9OworCisvKiBJR0EyIEhvcml6b250YWwgU3luYyBFbmQgKi8KK3N0cnVjdCBpZ2EyX2hvcl9zeW5jX2VuZCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX0hPUl9TWU5DX0VORF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgVmVydGljYWwgVG90YWwgKi8KK3N0cnVjdCBpZ2EyX3Zlcl90b3RhbCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1ZFUl9UT1RBTF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgVmVydGljYWwgQWRkcmVzc2FibGUgVmlkZW8gKi8KK3N0cnVjdCBpZ2EyX3Zlcl9hZGRyIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfVkVSX0FERFJfUkVHX05VTV07Cit9OworCisvKiBJR0EyIFZlcnRpY2FsIEJsYW5rIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMl92ZXJfYmxhbmtfc3RhcnQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9WRVJfQkxBTktfU1RBUlRfUkVHX05VTV07Cit9OworCisvKiBJR0EyIFZlcnRpY2FsIEJsYW5rIEVuZCAqLworc3RydWN0IGlnYTJfdmVyX2JsYW5rX2VuZCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1ZFUl9CTEFOS19FTkRfUkVHX05VTV07Cit9OworCisvKiBJR0EyIFZlcnRpY2FsIFN5bmMgU3RhcnQgKi8KK3N0cnVjdCBpZ2EyX3Zlcl9zeW5jX3N0YXJ0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfVkVSX1NZTkNfU1RBUlRfUkVHX05VTV07Cit9OworCisvKiBJR0EyIFZlcnRpY2FsIFN5bmMgRW5kICovCitzdHJ1Y3QgaWdhMl92ZXJfc3luY19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9WRVJfU1lOQ19FTkRfUkVHX05VTV07Cit9OworCisvKiBJR0ExIE9mZnNldCBSZWdpc3RlciAqLworc3RydWN0IGlnYTFfb2Zmc2V0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfT0ZGU0VUX1JFR19OVU1dOworfTsKKworLyogSUdBMiBPZmZzZXQgUmVnaXN0ZXIgKi8KK3N0cnVjdCBpZ2EyX29mZnNldCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX09GRlNFVF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBvZmZzZXQgeworCXN0cnVjdCBpZ2ExX29mZnNldCBpZ2ExX29mZnNldF9yZWc7CisJc3RydWN0IGlnYTJfb2Zmc2V0IGlnYTJfb2Zmc2V0X3JlZzsKK307CisKKy8qIElHQTEgRmV0Y2ggQ291bnQgUmVnaXN0ZXIgKi8KK3N0cnVjdCBpZ2ExX2ZldGNoX2NvdW50IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfRkVUQ0hfQ09VTlRfUkVHX05VTV07Cit9OworCisvKiBJR0EyIEZldGNoIENvdW50IFJlZ2lzdGVyICovCitzdHJ1Y3QgaWdhMl9mZXRjaF9jb3VudCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX0ZFVENIX0NPVU5UX1JFR19OVU1dOworfTsKKworc3RydWN0IGZldGNoX2NvdW50IHsKKwlzdHJ1Y3QgaWdhMV9mZXRjaF9jb3VudCBpZ2ExX2ZldGNoX2NvdW50X3JlZzsKKwlzdHJ1Y3QgaWdhMl9mZXRjaF9jb3VudCBpZ2EyX2ZldGNoX2NvdW50X3JlZzsKK307CisKKy8qIFN0YXJ0aW5nIEFkZHJlc3MgUmVnaXN0ZXIgKi8KK3N0cnVjdCBpZ2ExX3N0YXJ0aW5nX2FkZHIgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9TVEFSVElOR19BRERSX1JFR19OVU1dOworfTsKKworc3RydWN0IGlnYTJfc3RhcnRpbmdfYWRkciB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1NUQVJUSU5HX0FERFJfUkVHX05VTV07Cit9OworCitzdHJ1Y3Qgc3RhcnRpbmdfYWRkciB7CisJc3RydWN0IGlnYTFfc3RhcnRpbmdfYWRkciBpZ2ExX3N0YXJ0aW5nX2FkZHJfcmVnOworCXN0cnVjdCBpZ2EyX3N0YXJ0aW5nX2FkZHIgaWdhMl9zdGFydGluZ19hZGRyX3JlZzsKK307CisKKy8qIExDRCBQb3dlciBTZXF1ZW5jZSBUaW1lciAqLworc3RydWN0IGxjZF9wd2Rfc2VxX3RkMCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tMQ0RfUE9XRVJfU0VRX1REMF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBsY2RfcHdkX3NlcV90ZDEgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbTENEX1BPV0VSX1NFUV9URDFfUkVHX05VTV07Cit9OworCitzdHJ1Y3QgbGNkX3B3ZF9zZXFfdGQyIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0xDRF9QT1dFUl9TRVFfVEQyX1JFR19OVU1dOworfTsKKworc3RydWN0IGxjZF9wd2Rfc2VxX3RkMyB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tMQ0RfUE9XRVJfU0VRX1REM19SRUdfTlVNXTsKK307CisKK3N0cnVjdCBfbGNkX3B3ZF9zZXFfdGltZXIgeworCXN0cnVjdCBsY2RfcHdkX3NlcV90ZDAgdGQwOworCXN0cnVjdCBsY2RfcHdkX3NlcV90ZDEgdGQxOworCXN0cnVjdCBsY2RfcHdkX3NlcV90ZDIgdGQyOworCXN0cnVjdCBsY2RfcHdkX3NlcV90ZDMgdGQzOworfTsKKworLyogTENEIFNjYWxpbmcgRmFjdG9yICovCitzdHJ1Y3QgX2xjZF9ob3Jfc2NhbGluZ19mYWN0b3IgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbTENEX0hPUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBfbGNkX3Zlcl9zY2FsaW5nX2ZhY3RvciB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tMQ0RfVkVSX1NDQUxJTkdfRkFDVE9SX1JFR19OVU1dOworfTsKKworc3RydWN0IF9sY2Rfc2NhbGluZ19mYWN0b3IgeworCXN0cnVjdCBfbGNkX2hvcl9zY2FsaW5nX2ZhY3RvciBsY2RfaG9yX3NjYWxpbmdfZmFjdG9yOworCXN0cnVjdCBfbGNkX3Zlcl9zY2FsaW5nX2ZhY3RvciBsY2RfdmVyX3NjYWxpbmdfZmFjdG9yOworfTsKKworc3RydWN0IHBsbF9tYXAgeworCXUzMiBjbGs7CisJdTMyIGNsZTI2Nl9wbGw7CisJdTMyIGs4MDBfcGxsOworCXUzMiBjeDcwMF9wbGw7Cit9OworCitzdHJ1Y3QgcmdiTFVUIHsKKwl1OCByZWQ7CisJdTggZ3JlZW47CisJdTggYmx1ZTsKK307CisKK3N0cnVjdCBsY2RfcHdkX3NlcV90aW1lciB7CisJdTE2IHRkMDsKKwl1MTYgdGQxOworCXUxNiB0ZDI7CisJdTE2IHRkMzsKK307CisKKy8qIERpc3BsYXkgRklGTyBSZWxhdGlvbiBSZWdpc3RlcnMqLworc3RydWN0IGlnYTFfZmlmb19kZXB0aF9zZWxlY3QgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9GSUZPX0RFUFRIX1NFTEVDVF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2ExX2ZpZm9fdGhyZXNob2xkX3NlbGVjdCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX0ZJRk9fVEhSRVNIT0xEX1JFR19OVU1dOworfTsKKworc3RydWN0IGlnYTFfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3QgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEX1JFR19OVU1dOworfTsKKworc3RydWN0IGlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNX1JFR19OVU1dOworfTsKKworc3RydWN0IGlnYTJfZmlmb19kZXB0aF9zZWxlY3QgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9GSUZPX0RFUFRIX1NFTEVDVF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2EyX2ZpZm9fdGhyZXNob2xkX3NlbGVjdCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX0ZJRk9fVEhSRVNIT0xEX1JFR19OVU1dOworfTsKKworc3RydWN0IGlnYTJfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3QgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEX1JFR19OVU1dOworfTsKKworc3RydWN0IGlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNX1JFR19OVU1dOworfTsKKworc3RydWN0IGZpZm9fZGVwdGhfc2VsZWN0IHsKKwlzdHJ1Y3QgaWdhMV9maWZvX2RlcHRoX3NlbGVjdCBpZ2ExX2ZpZm9fZGVwdGhfc2VsZWN0X3JlZzsKKwlzdHJ1Y3QgaWdhMl9maWZvX2RlcHRoX3NlbGVjdCBpZ2EyX2ZpZm9fZGVwdGhfc2VsZWN0X3JlZzsKK307CisKK3N0cnVjdCBmaWZvX3RocmVzaG9sZF9zZWxlY3QgeworCXN0cnVjdCBpZ2ExX2ZpZm9fdGhyZXNob2xkX3NlbGVjdCBpZ2ExX2ZpZm9fdGhyZXNob2xkX3NlbGVjdF9yZWc7CisJc3RydWN0IGlnYTJfZmlmb190aHJlc2hvbGRfc2VsZWN0IGlnYTJfZmlmb190aHJlc2hvbGRfc2VsZWN0X3JlZzsKK307CisKK3N0cnVjdCBmaWZvX2hpZ2hfdGhyZXNob2xkX3NlbGVjdCB7CisJc3RydWN0IGlnYTFfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3QKKwkgaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkX3NlbGVjdF9yZWc7CisJc3RydWN0IGlnYTJfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3QKKwkgaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkX3NlbGVjdF9yZWc7Cit9OworCitzdHJ1Y3QgZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtIHsKKwlzdHJ1Y3QgaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0KKwkgaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW1fcmVnOworCXN0cnVjdCBpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bQorCSBpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bV9yZWc7Cit9OworCitzdHJ1Y3QgaWdhMV9jcnRjX3RpbWluZyB7CisJc3RydWN0IGlnYTFfaG9yX3RvdGFsIGhvcl90b3RhbDsKKwlzdHJ1Y3QgaWdhMV9ob3JfYWRkciBob3JfYWRkcjsKKwlzdHJ1Y3QgaWdhMV9ob3JfYmxhbmtfc3RhcnQgaG9yX2JsYW5rX3N0YXJ0OworCXN0cnVjdCBpZ2ExX2hvcl9ibGFua19lbmQgaG9yX2JsYW5rX2VuZDsKKwlzdHJ1Y3QgaWdhMV9ob3Jfc3luY19zdGFydCBob3Jfc3luY19zdGFydDsKKwlzdHJ1Y3QgaWdhMV9ob3Jfc3luY19lbmQgaG9yX3N5bmNfZW5kOworCXN0cnVjdCBpZ2ExX3Zlcl90b3RhbCB2ZXJfdG90YWw7CisJc3RydWN0IGlnYTFfdmVyX2FkZHIgdmVyX2FkZHI7CisJc3RydWN0IGlnYTFfdmVyX2JsYW5rX3N0YXJ0IHZlcl9ibGFua19zdGFydDsKKwlzdHJ1Y3QgaWdhMV92ZXJfYmxhbmtfZW5kIHZlcl9ibGFua19lbmQ7CisJc3RydWN0IGlnYTFfdmVyX3N5bmNfc3RhcnQgdmVyX3N5bmNfc3RhcnQ7CisJc3RydWN0IGlnYTFfdmVyX3N5bmNfZW5kIHZlcl9zeW5jX2VuZDsKK307CisKK3N0cnVjdCBpZ2EyX3NoYWRvd19jcnRjX3RpbWluZyB7CisJc3RydWN0IGlnYTJfc2hhZG93X2hvcl90b3RhbCBob3JfdG90YWxfc2hhZG93OworCXN0cnVjdCBpZ2EyX3NoYWRvd19ob3JfYmxhbmtfZW5kIGhvcl9ibGFua19lbmRfc2hhZG93OworCXN0cnVjdCBpZ2EyX3NoYWRvd192ZXJfdG90YWwgdmVyX3RvdGFsX3NoYWRvdzsKKwlzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX2FkZHIgdmVyX2FkZHJfc2hhZG93OworCXN0cnVjdCBpZ2EyX3NoYWRvd192ZXJfYmxhbmtfc3RhcnQgdmVyX2JsYW5rX3N0YXJ0X3NoYWRvdzsKKwlzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX2JsYW5rX2VuZCB2ZXJfYmxhbmtfZW5kX3NoYWRvdzsKKwlzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX3N5bmNfc3RhcnQgdmVyX3N5bmNfc3RhcnRfc2hhZG93OworCXN0cnVjdCBpZ2EyX3NoYWRvd192ZXJfc3luY19lbmQgdmVyX3N5bmNfZW5kX3NoYWRvdzsKK307CisKK3N0cnVjdCBpZ2EyX2NydGNfdGltaW5nIHsKKwlzdHJ1Y3QgaWdhMl9ob3JfdG90YWwgaG9yX3RvdGFsOworCXN0cnVjdCBpZ2EyX2hvcl9hZGRyIGhvcl9hZGRyOworCXN0cnVjdCBpZ2EyX2hvcl9ibGFua19zdGFydCBob3JfYmxhbmtfc3RhcnQ7CisJc3RydWN0IGlnYTJfaG9yX2JsYW5rX2VuZCBob3JfYmxhbmtfZW5kOworCXN0cnVjdCBpZ2EyX2hvcl9zeW5jX3N0YXJ0IGhvcl9zeW5jX3N0YXJ0OworCXN0cnVjdCBpZ2EyX2hvcl9zeW5jX2VuZCBob3Jfc3luY19lbmQ7CisJc3RydWN0IGlnYTJfdmVyX3RvdGFsIHZlcl90b3RhbDsKKwlzdHJ1Y3QgaWdhMl92ZXJfYWRkciB2ZXJfYWRkcjsKKwlzdHJ1Y3QgaWdhMl92ZXJfYmxhbmtfc3RhcnQgdmVyX2JsYW5rX3N0YXJ0OworCXN0cnVjdCBpZ2EyX3Zlcl9ibGFua19lbmQgdmVyX2JsYW5rX2VuZDsKKwlzdHJ1Y3QgaWdhMl92ZXJfc3luY19zdGFydCB2ZXJfc3luY19zdGFydDsKKwlzdHJ1Y3QgaWdhMl92ZXJfc3luY19lbmQgdmVyX3N5bmNfZW5kOworfTsKKworLyogZGV2aWNlIElEICovCisjZGVmaW5lIENMRTI2NiAgICAgICAgICAgICAgMHgzMTIzCisjZGVmaW5lIEtNNDAwICAgICAgICAgICAgICAgMHgzMjA1CisjZGVmaW5lIENONDAwX0ZVTkNUSU9OMiAgICAgMHgyMjU5CisjZGVmaW5lIENONDAwX0ZVTkNUSU9OMyAgICAgMHgzMjU5CisvKiBzdXBwb3J0IFZUMzMxNCBjaGlwc2V0ICovCisjZGVmaW5lIENONzAwX0ZVTkNUSU9OMiAgICAgMHgyMzE0CisjZGVmaW5lIENONzAwX0ZVTkNUSU9OMyAgICAgMHgzMjA4CisvKiBWVDMzMjQgY2hpcHNldCAqLworI2RlZmluZSBDWDcwMF9GVU5DVElPTjIgICAgIDB4MjMyNAorI2RlZmluZSBDWDcwMF9GVU5DVElPTjMgICAgIDB4MzMyNAorLyogVlQzMjA0IGNoaXBzZXQqLworI2RlZmluZSBLTTgwMF9GVU5DVElPTjMgICAgICAweDMyMDQKKy8qIFZUMzMzNiBjaGlwc2V0Ki8KKyNkZWZpbmUgS004OTBfRlVOQ1RJT04zICAgICAgMHgzMzM2CisvKiBWVDMzMjcgY2hpcHNldCovCisjZGVmaW5lIFA0TTg5MF9GVU5DVElPTjMgICAgIDB4MzMyNworLyogVlQzMjkzIGNoaXBzZXQqLworI2RlZmluZSBDTjc1MF9GVU5DVElPTjMgICAgIDB4MzIwOAorLyogVlQzMzY0IGNoaXBzZXQqLworI2RlZmluZSBQNE05MDBfRlVOQ1RJT04zICAgIDB4MzM2NAorLyogVlQzMzUzIGNoaXBzZXQqLworI2RlZmluZSBWWDgwMF9GVU5DVElPTjMgICAgIDB4MzM1MworCisjZGVmaW5lIE5VTV9UT1RBTF9QTExfVEFCTEUgQVJSQVlfU0laRShwbGxfdmFsdWUpCisKK3N0cnVjdCBJT0RBVEEgeworCXU4IEluZGV4OworCXU4IE1hc2s7CisJdTggRGF0YTsKK307CisKK3N0cnVjdCBwY2lfZGV2aWNlX2lkX2luZm8geworCXUzMiB2ZW5kb3I7CisJdTMyIGRldmljZTsKKwl1MzIgY2hpcF9pbmRleDsKK307CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX29mZnNldDsKK2V4dGVybiBpbnQgdmlhZmJfc2Vjb25kX3NpemU7CitleHRlcm4gaW50IHZpYWZiX1NBTU1fT047CitleHRlcm4gaW50IHZpYWZiX2R1YWxfZmI7CitleHRlcm4gaW50IHZpYWZiX0xDRDJfT047CitleHRlcm4gaW50IHZpYWZiX0xDRF9PTjsKK2V4dGVybiBpbnQgdmlhZmJfRFZJX09OOworZXh0ZXJuIGludCB2aWFmYl9hY2NlbDsKK2V4dGVybiBpbnQgdmlhZmJfaG90cGx1ZzsKKwordm9pZCB2aWFmYl93cml0ZV9yZWdfbWFzayh1OCBpbmRleCwgaW50IGlvX3BvcnQsIHU4IGRhdGEsIHU4IG1hc2spOwordm9pZCB2aWFmYl9zZXRfb3V0cHV0X3BhdGgoaW50IGRldmljZSwgaW50IHNldF9pZ2EsCisJaW50IG91dHB1dF9pbnRlcmZhY2UpOwordm9pZCB2aWFmYl9maWxsX2NydGNfdGltaW5nKHN0cnVjdCBjcnRfbW9kZV90YWJsZSAqY3J0X3RhYmxlLAorCQkgICAgICBpbnQgbW9kZV9pbmRleCwgaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSk7CisKK3ZvaWQgdmlhZmJfc2V0X3ZjbG9jayh1MzIgQ0xLLCBpbnQgc2V0X2lnYSk7Cit2b2lkIHZpYWZiX2xvYWRfcmVnKGludCB0aW1pbmdfdmFsdWUsIGludCB2aWFmYl9sb2FkX3JlZ19udW0sCisJc3RydWN0IGlvX3JlZ2lzdGVyICpyZWcsCisJICAgICAgaW50IGlvX3R5cGUpOwordm9pZCB2aWFmYl9jcnRfZGlzYWJsZSh2b2lkKTsKK3ZvaWQgdmlhZmJfY3J0X2VuYWJsZSh2b2lkKTsKK3ZvaWQgaW5pdF9hZDkzODkodm9pZCk7CisvKiBBY2Nlc3MgSS9PIEZ1bmN0aW9uICovCit2b2lkIHZpYWZiX3dyaXRlX3JlZyh1OCBpbmRleCwgdTE2IGlvX3BvcnQsIHU4IGRhdGEpOwordTggdmlhZmJfcmVhZF9yZWcoaW50IGlvX3BvcnQsIHU4IGluZGV4KTsKK3ZvaWQgdmlhZmJfbG9ja19jcnQodm9pZCk7Cit2b2lkIHZpYWZiX3VubG9ja19jcnQodm9pZCk7Cit2b2lkIHZpYWZiX2xvYWRfb2Zmc2V0X3JlZyhpbnQgaF9hZGRyLCBpbnQgYnBwX2J5dGUsIGludCBzZXRfaWdhKTsKK3ZvaWQgdmlhZmJfbG9hZF9mZXRjaF9jb3VudF9yZWcoaW50IGhfYWRkciwgaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSk7Cit2b2lkIHZpYWZiX3dyaXRlX3JlZ3goc3RydWN0IGlvX3JlZyBSZWdUYWJsZVtdLCBpbnQgSXRlbU51bSk7CitzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpYWZiX2dldF9tb2RldGJsX3BvaW50ZXIoaW50IEluZGV4KTsKK3UzMiB2aWFmYl9nZXRfY2xrX3ZhbHVlKGludCBjbGspOwordm9pZCB2aWFmYl9sb2FkX0ZJRk9fcmVnKGludCBzZXRfaWdhLCBpbnQgaG9yX2FjdGl2ZSwgaW50IHZlcl9hY3RpdmUpOwordm9pZCB2aWFmYl9zZXRfY29sb3JfZGVwdGgoaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSk7Cit2b2lkIHZpYWZiX3NldF9kcGFfZ2Z4KGludCBvdXRwdXRfaW50ZXJmYWNlLCBzdHJ1Y3QgR0ZYX0RQQV9TRVRUSU5HXAorCQkJCQkqcF9nZnhfZHBhX3NldHRpbmcpOworCitpbnQgdmlhZmJfc2V0bW9kZShpbnQgdm1vZGVfaW5kZXgsIGludCBob3JfcmVzLCBpbnQgdmVyX3JlcywKKwkgICAgaW50IHZpZGVvX2JwcCwgaW50IHZtb2RlX2luZGV4MSwgaW50IGhvcl9yZXMxLAorCSAgICBpbnQgdmVyX3JlczEsIGludCB2aWRlb19icHAxKTsKK3ZvaWQgdmlhZmJfaW5pdF9jaGlwX2luZm8odm9pZCk7Cit2b2lkIHZpYWZiX2luaXRfZGFjKGludCBzZXRfaWdhKTsKK2ludCB2aWFmYl9nZXRfcGl4Y2xvY2soaW50IGhyZXMsIGludCB2cmVzLCBpbnQgdm1vZGVfcmVmcmVzaCk7CitpbnQgdmlhZmJfZ2V0X3JlZnJlc2goaW50IGhyZXMsIGludCB2cmVzLCB1MzIgZmxvYXRfcmVmcmVzaCk7Cit2b2lkIHZpYWZiX3VwZGF0ZV9kZXZpY2Vfc2V0dGluZyhpbnQgaHJlcywgaW50IHZyZXMsIGludCBicHAsCisJCQkgICBpbnQgdm1vZGVfcmVmcmVzaCwgaW50IGZsYWcpOwordm9pZCB2aWFmYl9nZXRfbW1pb19pbmZvKHVuc2lnbmVkIGxvbmcgKm1taW9fYmFzZSwKKwl1bnNpZ25lZCBsb25nICptbWlvX2xlbik7CisKK3ZvaWQgdmlhZmJfc2V0X2lnYV9wYXRoKHZvaWQpOwordm9pZCB2aWFmYl9zZXRfc3RhcnRfYWRkcih2b2lkKTsKK3ZvaWQgdmlhZmJfZ2V0X2ZiX2luZm8odW5zaWduZWQgaW50ICpmYl9iYXNlLCB1bnNpZ25lZCBpbnQgKmZiX2xlbik7CisKKyNlbmRpZiAvKiBfX0hXX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvaWZhY2UuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2lmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3MDYzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2lmYWNlLmMKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImdsb2JhbC5oIgorCisvKiBHZXQgZnJhbWUgYnVmZmVyIHNpemUgZnJvbSBWR0EgQklPUyAqLworCit1bnNpZ25lZCBpbnQgdmlhZmJfZ2V0X21lbXNpemUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgbTsKKworCS8qIElmIG1lbW9yeSBzaXplIHByb3ZpZGVkIGJ5IHVzZXIgKi8KKwlpZiAodmlhZmJfbWVtc2l6ZSkKKwkJbSA9IHZpYWZiX21lbXNpemUgKiBNYjsKKwllbHNlIHsKKwkJbSA9ICh1bnNpZ25lZCBpbnQpdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMzkpOworCQltID0gbSAqICg0ICogTWIpOworCisJCWlmICgobSA8ICgxNiAqIE1iKSkgfHwgKG0gPiAoNjQgKiBNYikpKQorCQkJbSA9IDE2ICogTWI7CisJfQorCURFQlVHX01TRyhLRVJOX0lORk8gImZyYW1lYnVmZmVyIHNpemUgPSAlZCBNYlxuIiwgbSAvIE1iKTsKKwlyZXR1cm4gbTsKK30KKworLyogR2V0IFZpZGVvIEJ1ZmZlciBTdGFydGluZyBQaHlzaWNhbCBBZGRyZXNzKGJhY2sgZG9vcikqLworCit1bnNpZ25lZCBsb25nIHZpYWZiX2dldF92aWRlb2J1Zl9hZGRyKHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgc3lzX21lbTsKKwl1bnNpZ25lZCBjaGFyIHZpZGVvX21lbTsKKwl1bnNpZ25lZCBsb25nIHN5c19tZW1fc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHZpZGVvX21lbV9zaXplOworCS8qc3lzdGVtIG1lbW9yeSA9IDI1NiBNQiwgdmlkZW8gbWVtb3J5IDY0IE1CICovCisJdW5zaWduZWQgbG9uZyB2bWVtX3N0YXJ0aW5nX2FkciA9IDB4MEMwMDAwMDA7CisKKwlwZGV2ID0KKwkgICAgKHN0cnVjdCBwY2lfZGV2ICopcGNpX2dldF9kZXZpY2UoVklBX0s4MDBfQlJJREdFX1ZJRCwKKwkJCQkJICAgICBWSUFfSzgwMF9CUklER0VfRElELCBOVUxMKTsKKwlpZiAocGRldiAhPSBOVUxMKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFZJQV9LODAwX1NZU1RFTV9NRU1PUllfUkVHLAorCQkJCSAgICAgJnN5c19tZW0pOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBWSUFfSzgwMF9WSURFT19NRU1PUllfUkVHLAorCQkJCSAgICAgJnZpZGVvX21lbSk7CisJCXZpZGVvX21lbSA9ICh2aWRlb19tZW0gJiAweDcwKSA+PiA0OworCQlzeXNfbWVtX3NpemUgPSAoKHVuc2lnbmVkIGxvbmcpc3lzX21lbSkgPDwgMjQ7CisJCWlmICh2aWRlb19tZW0gIT0gMCkKKwkJCXZpZGVvX21lbV9zaXplID0gKDEgPDwgKHZpZGVvX21lbSkpICogMTAyNCAqIDEwMjQ7CisJCWVsc2UKKwkJCXZpZGVvX21lbV9zaXplID0gMDsKKworCQl2bWVtX3N0YXJ0aW5nX2FkciA9IHN5c19tZW1fc2l6ZSAtIHZpZGVvX21lbV9zaXplOworCQlwY2lfZGV2X3B1dChwZGV2KTsKKwl9CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJWaWRlbyBNZW1vcnkgU3RhcnRpbmcgQWRkcmVzcyA9ICVseCBcbiIsCisJCSAgdm1lbV9zdGFydGluZ19hZHIpOworCXJldHVybiB2bWVtX3N0YXJ0aW5nX2FkcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2lmYWNlLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9pZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MGVjM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9pZmFjZS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19JRkFDRV9IX18KKyNkZWZpbmUgX19JRkFDRV9IX18KKworI2RlZmluZSBLYiAgKDEwMjQpCisjZGVmaW5lIE1iICAoS2IqS2IpCisKKyNkZWZpbmUgVklBX0s4MDBfQlJJREdFX1ZJRCAgICAgICAgIDB4MTEwNgorI2RlZmluZSBWSUFfSzgwMF9CUklER0VfRElEICAgICAgICAgMHgzMjA0CisKKyNkZWZpbmUgVklBX0s4MDBfU1lTVEVNX01FTU9SWV9SRUcgIDB4NDcKKyNkZWZpbmUgVklBX0s4MDBfVklERU9fTUVNT1JZX1JFRyAgIDB4QTEKKworZXh0ZXJuIGludCB2aWFmYl9tZW1zaXplOwordW5zaWduZWQgaW50IHZpYWZiX2dldF9tZW1zaXplKHZvaWQpOwordW5zaWduZWQgbG9uZyB2aWFmYl9nZXRfdmlkZW9idWZfYWRkcih2b2lkKTsKKworI2VuZGlmIC8qIF9fSUZBQ0VfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9pb2N0bC5jIGIvZHJpdmVycy92aWRlby92aWEvaW9jdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTAzYzA3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvaW9jdGwuYwpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImdsb2JhbC5oIgorCitpbnQgdmlhZmJfaW9jdGxfZ2V0X3ZpYWZiX2luZm8odV9sb25nIGFyZykKK3sKKwlzdHJ1Y3QgdmlhZmJfaW9jdGxfaW5mbyB2aWFpbmZvOworCisJdmlhaW5mby52aWFmYl9pZCA9IFZJQUlEOworCXZpYWluZm8udmVuZG9yX2lkID0gUENJX1ZJQV9WRU5ET1JfSUQ7CisKKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKKwkJdmlhaW5mby5kZXZpY2VfaWQgPSBVTklDSFJPTUVfQ0xFMjY2X0RJRDsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9LNDAwOgorCQl2aWFpbmZvLmRldmljZV9pZCA9IFVOSUNIUk9NRV9LNDAwX0RJRDsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9LODAwOgorCQl2aWFpbmZvLmRldmljZV9pZCA9IFVOSUNIUk9NRV9LODAwX0RJRDsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9QTTgwMDoKKwkJdmlhaW5mby5kZXZpY2VfaWQgPSBVTklDSFJPTUVfUE04MDBfRElEOworCQlicmVhazsKKworCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCQl2aWFpbmZvLmRldmljZV9pZCA9IFVOSUNIUk9NRV9DTjcwMF9ESUQ7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCXZpYWluZm8uZGV2aWNlX2lkID0gVU5JQ0hST01FX0NYNzAwX0RJRDsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJCXZpYWluZm8uZGV2aWNlX2lkID0gVU5JQ0hST01FX0s4TTg5MF9ESUQ7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfUDRNODkwOgorCQl2aWFpbmZvLmRldmljZV9pZCA9IFVOSUNIUk9NRV9QNE04OTBfRElEOworCQlicmVhazsKKworCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJdmlhaW5mby5kZXZpY2VfaWQgPSBVTklDSFJPTUVfUDRNOTAwX0RJRDsKKwkJYnJlYWs7CisJfQorCisJdmlhaW5mby52ZXJzaW9uID0gVkVSU0lPTl9NQUpPUjsKKwl2aWFpbmZvLnJldmlzaW9uID0gVkVSU0lPTl9NSU5PUjsKKworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdmlhaW5mbywgc2l6ZW9mKHZpYWluZm8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworLyogSG90LVBsdWcgUHJpb3JpdHk6IERWSSA+IENSVCovCitpbnQgdmlhZmJfaW9jdGxfaG90cGx1ZyhpbnQgaHJlcywgaW50IHZyZXMsIGludCBicHApCit7CisJaW50IERWSXNlbnNlLCBzdGF0dXMgPSAwOworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2lvY3RsX2hvdHBsdWchIVxuIik7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfbmFtZSAhPQorCQlOT05fVE1EU19UUkFOU01JVFRFUikgeworCQlEVklzZW5zZSA9IHZpYWZiX2R2aV9zZW5zZSgpOworCisJCWlmIChEVklzZW5zZSkgeworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiRFZJIEF0dGFjaGVkLi4uXG4iKTsKKwkJCWlmICh2aWFmYl9EZXZpY2VTdGF0dXMgIT0gRFZJX0RldmljZSkgeworCQkJCXZpYWZiX0RWSV9PTiA9IDE7CisJCQkJdmlhZmJfQ1JUX09OID0gMDsKKwkJCQl2aWFmYl9MQ0RfT04gPSAwOworCQkJCXZpYWZiX0RldmljZVN0YXR1cyA9IERWSV9EZXZpY2U7CisJCQkJcmV0dXJuIHZpYWZiX0RldmljZVN0YXR1czsKKwkJCX0KKwkJCXN0YXR1cyA9IDE7CisJCX0gZWxzZQorCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiRFZJIERlLWF0dGFjaGVkLi4uXG4iKTsKKwl9CisKKwlpZiAoKHZpYWZiX0RldmljZVN0YXR1cyAhPSBDUlRfRGV2aWNlKSAmJiAoc3RhdHVzID09IDApKSB7CisJCXZpYWZiX0NSVF9PTiA9IDE7CisJCXZpYWZiX0RWSV9PTiA9IDA7CisJCXZpYWZiX0xDRF9PTiA9IDA7CisKKwkJdmlhZmJfRGV2aWNlU3RhdHVzID0gQ1JUX0RldmljZTsKKwkJcmV0dXJuIHZpYWZiX0RldmljZVN0YXR1czsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2lvY3RsLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MmZlMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9pb2N0bC5oCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fSU9DVExfSF9fCisjZGVmaW5lIF9fSU9DVExfSF9fCisKKyNpZm5kZWYgX191c2VyCisjZGVmaW5lIF9fdXNlcgorI2VuZGlmCisKKy8qIFZJQUZCIElPQ1RMIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgVklBRkJfR0VUX0lORk9fU0laRQkJMHg1NjQ5NDEwMQkvKiAnVklBXDAxJyAqLworI2RlZmluZSBWSUFGQl9HRVRfSU5GTwkJCTB4NTY0OTQxMDIJLyogJ1ZJQVwwMicgKi8KKyNkZWZpbmUgVklBRkJfSE9UUExVRwkJCTB4NTY0OTQxMDMJLyogJ1ZJQVwwMycgKi8KKyNkZWZpbmUgVklBRkJfU0VUX0hPVFBMVUdfRkxBRwkJMHg1NjQ5NDEwNAkvKiAnVklBXDA0JyAqLworI2RlZmluZSBWSUFGQl9HRVRfUkVTT0xVVElPTgkJMHg1NjQ5NDEwNQkvKiAnVklBXDA1JyAqLworI2RlZmluZSBWSUFGQl9HRVRfU0FNTV9JTkZPCQkweDU2NDk0MTA3CS8qICdWSUFcMDcnICovCisjZGVmaW5lIFZJQUZCX1RVUk5fT05fT1VUUFVUX0RFVklDRSAgICAgMHg1NjQ5NDEwOAkvKiAnVklBXDA4JyAqLworI2RlZmluZSBWSUFGQl9UVVJOX09GRl9PVVRQVVRfREVWSUNFICAgIDB4NTY0OTQxMDkJLyogJ1ZJQVwwOScgKi8KKyNkZWZpbmUgVklBRkJfU0VUX0RFVklDRQkJMHg1NjQ5NDEwQQorI2RlZmluZSBWSUFGQl9HRVRfREVWSUNFCQkweDU2NDk0MTBCCisjZGVmaW5lIFZJQUZCX0dFVF9EUklWRVJfVkVSU0lPTgkweDU2NDk0MTEyCS8qICdWSUFcMTInICovCisjZGVmaW5lIFZJQUZCX0dFVF9DSElQX0lORk8JCTB4NTY0OTQxMTMJLyogJ1ZJQVwxMycgKi8KKyNkZWZpbmUgVklBRkJfU0VUX0RFVklDRV9JTkZPICAgICAgICAgICAweDU2NDk0MTE0CisjZGVmaW5lIFZJQUZCX0dFVF9ERVZJQ0VfSU5GTyAgICAgICAgICAgMHg1NjQ5NDExNQorCisjZGVmaW5lIFZJQUZCX0dFVF9ERVZJQ0VfU1VQUE9SVAkweDU2NDk0MTE4CisjZGVmaW5lIFZJQUZCX0dFVF9ERVZJQ0VfQ09OTkVDVAkweDU2NDk0MTE5CisjZGVmaW5lIFZJQUZCX0dFVF9QQU5FTF9TVVBQT1JUX0VYUEFORAkweDU2NDk0MTFBCisjZGVmaW5lIFZJQUZCX0dFVF9EUklWRVJfTkFNRQkJMHg1NjQ5NDEyMgorI2RlZmluZSBWSUFGQl9HRVRfREVWSUNFX1NVUFBPUlRfU1RBVEUJMHg1NjQ5NDEyMworI2RlZmluZSBWSUFGQl9HRVRfR0FNTUFfTFVUCQkweDU2NDk0MTI0CisjZGVmaW5lIFZJQUZCX1NFVF9HQU1NQV9MVVQJCTB4NTY0OTQxMjUKKyNkZWZpbmUgVklBRkJfR0VUX0dBTU1BX1NVUFBPUlRfU1RBVEUJMHg1NjQ5NDEyNgorI2RlZmluZSBWSUFGQl9TRVRfVklERU9fREVWSUNFCQkweDU2NDk0MTI3CisjZGVmaW5lIFZJQUZCX0dFVF9WSURFT19ERVZJQ0UJCTB4NTY0OTQxMjgKKyNkZWZpbmUgVklBRkJfU0VUX1NFQ09ORF9NT0RFCQkweDU2NDk0MTI5CisjZGVmaW5lIFZJQUZCX1NZTkNfU1VSRkFDRQkJMHg1NjQ5NDEzMAorI2RlZmluZSBWSUFGQl9HRVRfRFJJVkVSX0NBUFMJCTB4NTY0OTQxMzEKKyNkZWZpbmUgVklBRkJfR0VUX0lHQV9TQ0FMSU5HX0lORk8JMHg1NjQ5NDEzMgorI2RlZmluZSBWSUFGQl9HRVRfUEFORUxfTUFYX1NJWkUJMHg1NjQ5NDEzMworI2RlZmluZSBWSUFGQl9HRVRfUEFORUxfTUFYX1BPU0lUSU9OCTB4NTY0OTQxMzQKKyNkZWZpbmUgVklBRkJfU0VUX1BBTkVMX1NJWkUJCTB4NTY0OTQxMzUKKyNkZWZpbmUgVklBRkJfU0VUX1BBTkVMX1BPU0lUSU9OICAgICAgICAweDU2NDk0MTM2CisjZGVmaW5lIFZJQUZCX0dFVF9QQU5FTF9QT1NJVElPTiAgICAgICAgMHg1NjQ5NDEzNworI2RlZmluZSBWSUFGQl9HRVRfUEFORUxfU0laRQkJMHg1NjQ5NDEzOAorCisjZGVmaW5lIE5vbmVfRGV2aWNlIDB4MDAKKyNkZWZpbmUgQ1JUX0RldmljZSAgMHgwMQorI2RlZmluZSBMQ0RfRGV2aWNlICAweDAyCisjZGVmaW5lIERWSV9EZXZpY2UgIDB4MDgKKyNkZWZpbmUgQ1JUMl9EZXZpY2UgMHgxMAorI2RlZmluZSBMQ0QyX0RldmljZSAweDQwCisKKyNkZWZpbmUgT1BfTENEX0NFTlRFUklORyAgIDB4MDEKKyNkZWZpbmUgT1BfTENEX1BBTkVMX0lEICAgIDB4MDIKKyNkZWZpbmUgT1BfTENEX01PREUgICAgICAgIDB4MDMKKworLypTQU1NIG9wZXJhdGlvbiBmbGFnKi8KKyNkZWZpbmUgT1BfU0FNTSAgICAgICAgICAgIDB4ODAKKworI2RlZmluZSBMQ0RfUEFORUxfSURfTUFYSU1VTQkyMgorCisjZGVmaW5lIFNUQVRFX09OICAgICAgICAgICAgMHgxCisjZGVmaW5lIFNUQVRFX09GRiAgICAgICAgICAgMHgwCisjZGVmaW5lIFNUQVRFX0RFRkFVTFQgICAgICAgMHhGRkZGCisKKyNkZWZpbmUgTUFYX0FDVElWRV9ERVZfTlVNICAyCisKK3N0cnVjdCBkZXZpY2VfdCB7CisJdW5zaWduZWQgc2hvcnQgY3J0OjE7CisJdW5zaWduZWQgc2hvcnQgZHZpOjE7CisJdW5zaWduZWQgc2hvcnQgbGNkOjE7CisJdW5zaWduZWQgc2hvcnQgc2FtbToxOworCXVuc2lnbmVkIHNob3J0IGxjZF9kc3BfY2VudDoxOworCXVuc2lnbmVkIGNoYXIgbGNkX21vZGU6MTsKKwl1bnNpZ25lZCBzaG9ydCBlcGlhX2R2aToxOworCXVuc2lnbmVkIHNob3J0IGxjZF9kdWFsX2VkZ2U6MTsKKwl1bnNpZ25lZCBzaG9ydCBsY2QyOjE7CisKKwl1bnNpZ25lZCBzaG9ydCBwcmltYXJ5X2RldjsKKwl1bnNpZ25lZCBjaGFyIGxjZF9wYW5lbF9pZDsKKwl1bnNpZ25lZCBzaG9ydCB4cmVzLCB5cmVzOworCXVuc2lnbmVkIHNob3J0IHhyZXMxLCB5cmVzMTsKKwl1bnNpZ25lZCBzaG9ydCByZWZyZXNoOworCXVuc2lnbmVkIHNob3J0IGJwcDsKKwl1bnNpZ25lZCBzaG9ydCByZWZyZXNoMTsKKwl1bnNpZ25lZCBzaG9ydCBicHAxOworCXVuc2lnbmVkIHNob3J0IHNlcXVlbmNlOworCXVuc2lnbmVkIHNob3J0IGJ1c193aWR0aDsKK307CisKK3N0cnVjdCB2aWFmYl9pb2N0bF9pbmZvIHsKKwl1MzIgdmlhZmJfaWQ7CQkvKiBmb3IgaWRlbnRpZnlpbmcgdmlhZmIgKi8KKyNkZWZpbmUgVklBSUQgICAgICAgMHg1NjQ5NDE0NgkvKiBJZGVudGlmeSBteXNlbGYgd2l0aCAnVklBRicgKi8KKwl1MTYgdmVuZG9yX2lkOworCXUxNiBkZXZpY2VfaWQ7CisJdTggdmVyc2lvbjsKKwl1OCByZXZpc2lvbjsKKwl1OCByZXNlcnZlZFsyNDZdOwkvKiBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworc3RydWN0IHZpYWZiX2lvY3RsX21vZGUgeworCXUzMiB4cmVzOworCXUzMiB5cmVzOworCXUzMiByZWZyZXNoOworCXUzMiBicHA7CisJdTMyIHhyZXNfc2VjOworCXUzMiB5cmVzX3NlYzsKKwl1MzIgdmlydHVhbF94cmVzX3NlYzsKKwl1MzIgdmlydHVhbF95cmVzX3NlYzsKKwl1MzIgcmVmcmVzaF9zZWM7CisJdTMyIGJwcF9zZWM7Cit9Oworc3RydWN0IHZpYWZiX2lvY3RsX3NhbW0geworCXUzMiBzYW1tX3N0YXR1czsKKwl1MzIgc2l6ZV9wcmltOworCXUzMiBzaXplX3NlYzsKKwl1MzIgbWVtX2Jhc2U7CisJdTMyIG9mZnNldF9zZWM7Cit9OworCitzdHJ1Y3QgdmlhZmJfZHJpdmVyX3ZlcnNpb24geworCWludCBpTWFqb3JOdW07CisJaW50IGlLZXJuZWxOdW07CisJaW50IGlPU051bTsKKwlpbnQgaU1pbm9yTnVtOworfTsKKworc3RydWN0IHZpYWZiX2lvY3RsX2xjZF9hdHRyaWJ1dGUgeworCXVuc2lnbmVkIGludCBwYW5lbF9pZDsKKwl1bnNpZ25lZCBpbnQgZGlzcGxheV9jZW50ZXI7CisJdW5zaWduZWQgaW50IGxjZF9tb2RlOworfTsKKworc3RydWN0IHZpYWZiX2lvY3RsX3NldHRpbmcgeworCS8qIEVuYWJsZSBvciBkaXNhYmxlIGFjdGl2ZSBkZXZpY2VzICovCisJdW5zaWduZWQgc2hvcnQgZGV2aWNlX2ZsYWc7CisJLyogSW5kaWNhdGUgd2hpY2ggZGV2aWNlIHNob3VsZCBiZSB0dXJuIG9uIG9yIHR1cm4gb2ZmLiAqLworCXVuc2lnbmVkIHNob3J0IGRldmljZV9zdGF0dXM7CisJdW5zaWduZWQgaW50IHJlc2VydmVkOworCS8qIEluZGljYXRlIHdoaWNoIExDRCdzIGF0dHJpYnV0ZSBjYW4gYmUgY2hhbmdlZC4gKi8KKwl1bnNpZ25lZCBzaG9ydCBsY2Rfb3BlcmF0aW9uX2ZsYWc7CisJLyogMTogU0FNTSBPTiAgMDogU0FNTSBPRkYgKi8KKwl1bnNpZ25lZCBzaG9ydCBzYW1tX3N0YXR1czsKKwkvKiBob3Jpem9udGFsIHJlc29sdXRpb24gb2YgZmlyc3QgZGV2aWNlICovCisJdW5zaWduZWQgc2hvcnQgZmlyc3RfZGV2X2hvcl9yZXM7CisJLyogdmVydGljYWwgcmVzb2x1dGlvbiBvZiBmaXJzdCBkZXZpY2UgKi8KKwl1bnNpZ25lZCBzaG9ydCBmaXJzdF9kZXZfdmVyX3JlczsKKwkvKiBob3Jpem9udGFsIHJlc29sdXRpb24gb2Ygc2Vjb25kIGRldmljZSAqLworCXVuc2lnbmVkIHNob3J0IHNlY29uZF9kZXZfaG9yX3JlczsKKwkvKiB2ZXJ0aWNhbCByZXNvbHV0aW9uIG9mIHNlY29uZCBkZXZpY2UgKi8KKwl1bnNpZ25lZCBzaG9ydCBzZWNvbmRfZGV2X3Zlcl9yZXM7CisJLyogcmVmcmVzaCByYXRlIG9mIGZpcnN0IGRldmljZSAqLworCXVuc2lnbmVkIHNob3J0IGZpcnN0X2Rldl9yZWZyZXNoOworCS8qIGJwcCBvZiBmaXJzdCBkZXZpY2UgKi8KKwl1bnNpZ25lZCBzaG9ydCBmaXJzdF9kZXZfYnBwOworCS8qIHJlZnJlc2ggcmF0ZSBvZiBzZWNvbmQgZGV2aWNlICovCisJdW5zaWduZWQgc2hvcnQgc2Vjb25kX2Rldl9yZWZyZXNoOworCS8qIGJwcCBvZiBzZWNvbmQgZGV2aWNlICovCisJdW5zaWduZWQgc2hvcnQgc2Vjb25kX2Rldl9icHA7CisJLyogSW5kaWNhdGUgd2hpY2ggZGV2aWNlIGFyZSBwcmltYXJ5IGRpc3BsYXkgZGV2aWNlLiAqLworCXVuc2lnbmVkIGludCBwcmltYXJ5X2RldmljZTsKKwkvKiBJbmRpY2F0ZSB3aGljaCBkZXZpY2Ugd2lsbCBzaG93IHZpZGVvLiBvbmx5IHZhbGlkIGluIGR1b3ZpZXcgbW9kZSAqLworCXVuc2lnbmVkIGludCB2aWRlb19kZXZpY2Vfc3RhdHVzOworCXVuc2lnbmVkIGludCBzdHJ1Y3RfcmVzZXJ2ZWRbMzRdOworCXN0cnVjdCB2aWFmYl9pb2N0bF9sY2RfYXR0cmlidXRlIGxjZF9hdHRyaWJ1dGVzOworfTsKKworc3RydWN0IF9VVEZ1bmN0aW9uQ2FwcyB7CisJdW5zaWduZWQgaW50IGR3M0RTY2FsaW5nU3RhdGU7CisJdW5zaWduZWQgaW50IHJlc2VydmVkWzMxXTsKK307CisKK3N0cnVjdCBfUE9TSVRJT05WQUxVRSB7CisJdW5zaWduZWQgaW50IGR3WDsKKwl1bnNpZ25lZCBpbnQgZHdZOworfTsKKworc3RydWN0IF9wYW5lbF9zaXplX3Bvc19pbmZvIHsKKwl1bnNpZ25lZCBpbnQgZGV2aWNlX3R5cGU7CisJaW50IHg7CisJaW50IHk7Cit9OworCitleHRlcm4gaW50IHZpYWZiX0xDRF9PTjsKK2V4dGVybiBpbnQgdmlhZmJfRFZJX09OOworCitpbnQgdmlhZmJfaW9jdGxfZ2V0X3ZpYWZiX2luZm8odV9sb25nIGFyZyk7CitpbnQgdmlhZmJfaW9jdGxfaG90cGx1ZyhpbnQgaHJlcywgaW50IHZyZXMsIGludCBicHApOworCisjZW5kaWYgLyogX19JT0NUTF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5jIGIvZHJpdmVycy92aWRlby92aWEvbGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM3MjkwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5jCkBAIC0wLDAgKzEsMTgyMSBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImdsb2JhbC5oIgorI2luY2x1ZGUgImxjZHRibC5oIgorCitzdGF0aWMgc3RydWN0IGlnYTJfc2hhZG93X2NydGNfdGltaW5nIGlnYTJfc2hhZG93X2NydGNfcmVnID0geworCS8qIElHQTIgU2hhZG93IEhvcml6b250YWwgVG90YWwgKi8KKwl7SUdBMl9TSEFET1dfSE9SX1RPVEFMX1JFR19OVU0sIHt7Q1I2RCwgMCwgN30sIHtDUjcxLCAzLCAzfSB9IH0sCisJLyogSUdBMiBTaGFkb3cgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7SUdBMl9TSEFET1dfSE9SX0JMQU5LX0VORF9SRUdfTlVNLCB7e0NSNkUsIDAsIDd9IH0gfSwKKwkvKiBJR0EyIFNoYWRvdyBWZXJ0aWNhbCBUb3RhbCAqLworCXtJR0EyX1NIQURPV19WRVJfVE9UQUxfUkVHX05VTSwge3tDUjZGLCAwLCA3fSwge0NSNzEsIDAsIDJ9IH0gfSwKKwkvKiBJR0EyIFNoYWRvdyBWZXJ0aWNhbCBBZGRyZXNzYWJsZSBWaWRlbyAqLworCXtJR0EyX1NIQURPV19WRVJfQUREUl9SRUdfTlVNLCB7e0NSNzAsIDAsIDd9LCB7Q1I3MSwgNCwgNn0gfSB9LAorCS8qIElHQTIgU2hhZG93IFZlcnRpY2FsIEJsYW5rIFN0YXJ0ICovCisJe0lHQTJfU0hBRE9XX1ZFUl9CTEFOS19TVEFSVF9SRUdfTlVNLAorCSB7e0NSNzIsIDAsIDd9LCB7Q1I3NCwgNCwgNn0gfSB9LAorCS8qIElHQTIgU2hhZG93IFZlcnRpY2FsIEJsYW5rIEVuZCAqLworCXtJR0EyX1NIQURPV19WRVJfQkxBTktfRU5EX1JFR19OVU0sIHt7Q1I3MywgMCwgN30sIHtDUjc0LCAwLCAyfSB9IH0sCisJLyogSUdBMiBTaGFkb3cgVmVydGljYWwgU3luYyBTdGFydCAqLworCXtJR0EyX1NIQURPV19WRVJfU1lOQ19TVEFSVF9SRUdfTlVNLCB7e0NSNzUsIDAsIDd9LCB7Q1I3NiwgNCwgNn0gfSB9LAorCS8qIElHQTIgU2hhZG93IFZlcnRpY2FsIFN5bmMgRW5kICovCisJe0lHQTJfU0hBRE9XX1ZFUl9TWU5DX0VORF9SRUdfTlVNLCB7e0NSNzYsIDAsIDN9IH0gfQorfTsKKworc3RhdGljIHN0cnVjdCBfbGNkX3NjYWxpbmdfZmFjdG9yIGxjZF9zY2FsaW5nX2ZhY3RvciA9IHsKKwkvKiBMQ0QgSG9yaXpvbnRhbCBTY2FsaW5nIEZhY3RvciBSZWdpc3RlciAqLworCXtMQ0RfSE9SX1NDQUxJTkdfRkFDVE9SX1JFR19OVU0sCisJIHt7Q1I5RiwgMCwgMX0sIHtDUjc3LCAwLCA3fSwge0NSNzksIDQsIDV9IH0gfSwKKwkvKiBMQ0QgVmVydGljYWwgU2NhbGluZyBGYWN0b3IgUmVnaXN0ZXIgKi8KKwl7TENEX1ZFUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNLAorCSB7e0NSNzksIDMsIDN9LCB7Q1I3OCwgMCwgN30sIHtDUjc5LCA2LCA3fSB9IH0KK307CitzdGF0aWMgc3RydWN0IF9sY2Rfc2NhbGluZ19mYWN0b3IgbGNkX3NjYWxpbmdfZmFjdG9yX0NMRSA9IHsKKwkvKiBMQ0QgSG9yaXpvbnRhbCBTY2FsaW5nIEZhY3RvciBSZWdpc3RlciAqLworCXtMQ0RfSE9SX1NDQUxJTkdfRkFDVE9SX1JFR19OVU1fQ0xFLCB7e0NSNzcsIDAsIDd9LCB7Q1I3OSwgNCwgNX0gfSB9LAorCS8qIExDRCBWZXJ0aWNhbCBTY2FsaW5nIEZhY3RvciBSZWdpc3RlciAqLworCXtMQ0RfVkVSX1NDQUxJTkdfRkFDVE9SX1JFR19OVU1fQ0xFLCB7e0NSNzgsIDAsIDd9LCB7Q1I3OSwgNiwgN30gfSB9Cit9OworCitzdGF0aWMgaW50IGNoZWNrX2x2ZHNfY2hpcChpbnQgZGV2aWNlX2lkX3N1YmFkZHIsIGludCBkZXZpY2VfaWQpOworc3RhdGljIGJvb2wgbHZkc19pZGVudGlmeV9pbnRlZ3JhdGVkbHZkcyh2b2lkKTsKK3N0YXRpYyBpbnQgZnBfaWRfdG9fdmluZGV4KGludCBwYW5lbF9pZCk7CitzdGF0aWMgaW50IGx2ZHNfcmVnaXN0ZXJfcmVhZChpbnQgaW5kZXgpOworc3RhdGljIHZvaWQgbG9hZF9sY2Rfc2NhbGluZyhpbnQgc2V0X2hyZXMsIGludCBzZXRfdnJlcywgaW50IHBhbmVsX2hyZXMsCisJCSAgICAgIGludCBwYW5lbF92cmVzKTsKK3N0YXRpYyB2b2lkIGxvYWRfbGNkX2s0MDBfcGF0Y2hfdGJsKGludCBzZXRfaHJlcywgaW50IHNldF92cmVzLAorCWludCBwYW5lbF9pZCk7CitzdGF0aWMgdm9pZCBsb2FkX2xjZF9wODgwX3BhdGNoX3RibChpbnQgc2V0X2hyZXMsIGludCBzZXRfdnJlcywKKwlpbnQgcGFuZWxfaWQpOworc3RhdGljIHZvaWQgbG9hZF9sY2RfcGF0Y2hfcmVncyhpbnQgc2V0X2hyZXMsIGludCBzZXRfdnJlcywKKwlpbnQgcGFuZWxfaWQsIGludCBzZXRfaWdhKTsKK3N0YXRpYyB2b2lkIHZpYV9waXRjaF9hbGlnbm1lbnRfcGF0Y2hfbGNkKAorCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkgICBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uCisJCQkJICAgKnBsdmRzX2NoaXBfaW5mbyk7CitzdGF0aWMgdm9pZCBsY2RfcGF0Y2hfc2tld19kdnAwKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSAqcGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbyk7CitzdGF0aWMgdm9pZCBsY2RfcGF0Y2hfc2tld19kdnAxKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSAqcGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbyk7CitzdGF0aWMgdm9pZCBsY2RfcGF0Y2hfc2tldyhzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJKnBsdmRzX3NldHRpbmdfaW5mbywgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKKworc3RhdGljIHZvaWQgaW50ZWdyYXRlZF9sdmRzX2Rpc2FibGUoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJICAgICAqcGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJICAgICBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOworc3RhdGljIHZvaWQgaW50ZWdyYXRlZF9sdmRzX2VuYWJsZShzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgICAgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSAgICBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOworc3RhdGljIHZvaWQgbGNkX3Bvd2Vyc2VxdWVuY2Vfb2ZmKHZvaWQpOworc3RhdGljIHZvaWQgbGNkX3Bvd2Vyc2VxdWVuY2Vfb24odm9pZCk7CitzdGF0aWMgdm9pZCBmaWxsX2xjZF9mb3JtYXQodm9pZCk7CitzdGF0aWMgdm9pZCBjaGVja19kaXBvcnRfb2ZfaW50ZWdyYXRlZF9sdmRzKAorCXN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbywKKwkJCQkgICAgIHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCQkgICAgICpwbHZkc19zZXR0aW5nX2luZm8pOworc3RhdGljIHN0cnVjdCBkaXNwbGF5X3RpbWluZyBsY2RfY2VudGVyaW5nX3RpbWdpbmcoc3RydWN0IGRpc3BsYXlfdGltaW5nCisJCQkJCSAgICBtb2RlX2NydF9yZWcsCisJCQkJCSAgIHN0cnVjdCBkaXNwbGF5X3RpbWluZyBwYW5lbF9jcnRfcmVnKTsKK3N0YXRpYyB2b2lkIGxvYWRfY3J0Y19zaGFkb3dfdGltaW5nKHN0cnVjdCBkaXNwbGF5X3RpbWluZyBtb2RlX3RpbWluZywKKwkJCSAgICAgc3RydWN0IGRpc3BsYXlfdGltaW5nIHBhbmVsX3RpbWluZyk7CitzdGF0aWMgdm9pZCB2aWFmYl9sb2FkX3NjYWxpbmdfZmFjdG9yX2Zvcl9wNG05MDAoaW50IHNldF9ocmVzLAorCWludCBzZXRfdnJlcywgaW50IHBhbmVsX2hyZXMsIGludCBwYW5lbF92cmVzKTsKKworc3RhdGljIGludCBjaGVja19sdmRzX2NoaXAoaW50IGRldmljZV9pZF9zdWJhZGRyLCBpbnQgZGV2aWNlX2lkKQoreworCWlmIChsdmRzX3JlZ2lzdGVyX3JlYWQoZGV2aWNlX2lkX3N1YmFkZHIpID09IGRldmljZV9pZCkKKwkJcmV0dXJuIE9LOworCWVsc2UKKwkJcmV0dXJuIEZBSUw7Cit9CisKK3ZvaWQgdmlhZmJfaW5pdF9sY2Rfc2l6ZSh2b2lkKQoreworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2luaXRfbGNkX3NpemUoKVxuIik7CisJREVCVUdfTVNHKEtFUk5fSU5GTworCQkidmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmdldF9sY2Rfc2l6ZV9tZXRob2QgJWRcbiIsCisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5nZXRfbGNkX3NpemVfbWV0aG9kKTsKKworCXN3aXRjaCAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmdldF9sY2Rfc2l6ZV9tZXRob2QpIHsKKwljYXNlIEdFVF9MQ0RfU0laRV9CWV9TWVNURU1fQklPUzoKKwkJYnJlYWs7CisJY2FzZSBHRVRfTENEX1NaSUVfQllfSFdfU1RSQVBQSU5HOgorCQlicmVhazsKKwljYXNlIEdFVF9MQ0RfU0laRV9CWV9WR0FfQklPUzoKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiR2V0IExDRCBTaXplIG1ldGhvZCBieSBWR0EgQklPUyAhIVxuIik7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfc2l6ZSA9CisJCSAgICBmcF9pZF90b192aW5kZXgodmlhZmJfbGNkX3BhbmVsX2lkKTsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiTENEIFBhbmVsX0lEID0gJWRcbiIsCisJCQkgIHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJMQ0QgUGFuZWwgU2l6ZSA9ICVkXG4iLAorCQkJICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3NpemUpOworCQlicmVhazsKKwljYXNlIEdFVF9MQ0RfU0laRV9CWV9VU0VSX1NFVFRJTkc6CisJCURFQlVHX01TRyhLRVJOX0lORk8gIkdldCBMQ0QgU2l6ZSBtZXRob2QgYnkgdXNlciBzZXR0aW5nICEhXG4iKTsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9zaXplID0KKwkJICAgIGZwX2lkX3RvX3ZpbmRleCh2aWFmYl9sY2RfcGFuZWxfaWQpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJMQ0QgUGFuZWxfSUQgPSAlZFxuIiwKKwkJCSAgdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCk7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIkxDRCBQYW5lbCBTaXplID0gJWRcbiIsCisJCQkgIHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfc2l6ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2luaXRfbGNkX3NpemUgZmFpbFxuIik7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEMV84MDBYNjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3NpemUgPQorCQkgICAgZnBfaWRfdG9fdmluZGV4KExDRF9QQU5FTF9JRDFfODAwWDYwMCk7CisJfQorCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+bGNkX3BhbmVsX2lkID0KKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZDsKKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmxjZF9wYW5lbF9zaXplID0KKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9zaXplOworCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+bGNkX3BhbmVsX2hyZXMgPQorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXM7CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5sY2RfcGFuZWxfdnJlcyA9CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlczsKKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmRldmljZV9sY2RfZHVhbGVkZ2UgPQorCSAgICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZTsKKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPkxDRERpdGhlcmluZyA9CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmc7Cit9CisKK3N0YXRpYyBib29sIGx2ZHNfaWRlbnRpZnlfaW50ZWdyYXRlZGx2ZHModm9pZCkKK3sKKwlpZiAodmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQgPT0gSFdfTEFZT1VUX0xDRF9FWFRFUk5BTF9MQ0QyKSB7CisJCS8qIFR3byBkdWFsIGNoYW5uZWwgTENEIChJbnRlcm5hbCBMVkRTICsgRXh0ZXJuYWwgTFZEUyk6ICovCisJCS8qIElmIHdlIGhhdmUgYW4gZXh0ZXJuYWwgTFZEUywgc3VjaCBhcyBWVDE2MzYsIHdlIHNob3VsZAorCQkgICBoYXZlIGl0cyBjaGlwIElEIGFscmVhZHkuICovCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKSB7CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5sdmRzX2NoaXBfbmFtZSA9CisJCQkgICAgSU5URUdSQVRFRF9MVkRTOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiU3VwcG9ydCB0d28gZHVhbCBjaGFubmVsIExWRFMhXAorCQkJCSAgKEludGVybmFsIExWRFMgKyBFeHRlcm5hbCBMVkRTKVxuIik7CisJCX0gZWxzZSB7CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lID0KKwkJCSAgICBJTlRFR1JBVEVEX0xWRFM7CisJCQlERUJVR19NU0coS0VSTl9JTkZPICJOb3QgZm91bmQgZXh0ZXJuYWwgTFZEUyxcCisJCQkJICBzbyBjYW4ndCBzdXBwb3J0IHR3byBkdWFsIGNoYW5uZWwgTFZEUyFcbiIpOworCQl9CisJfSBlbHNlIGlmICh2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCA9PSBIV19MQVlPVVRfTENEMV9MQ0QyKSB7CisJCS8qIFR3byBzaW5nbGUgY2hhbm5lbCBMQ0QgKEludGVybmFsIExWRFMgKyBJbnRlcm5hbCBMVkRTKTogKi8KKwkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSA9CisJCUlOVEVHUkFURURfTFZEUzsKKwkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIubHZkc19jaGlwX25hbWUgPQorCQkJSU5URUdSQVRFRF9MVkRTOworCQlERUJVR19NU0coS0VSTl9JTkZPICJTdXBwb3J0IHR3byBzaW5nbGUgY2hhbm5lbCBMVkRTIVwKKwkJCSAgKEludGVybmFsIExWRFMgKyBJbnRlcm5hbCBMVkRTKVxuIik7CisJfSBlbHNlIGlmICh2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCAhPSBIV19MQVlPVVRfRFZJX09OTFkpIHsKKwkJLyogSWYgd2UgaGF2ZSBmb3VuZCBleHRlcm5hbCBMVkRTLCBqdXN0IHVzZSBpdCwKKwkJICAgb3RoZXJ3aXNlLCB3ZSB3aWxsIHVzZSBpbnRlcm5hbCBMVkRTIGFzIGRlZmF1bHQuICovCisJCWlmICghdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSkgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSA9CisJCQkgICAgSU5URUdSQVRFRF9MVkRTOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiRm91bmQgSW50ZWdyYXRlZCBMVkRTIVxuIik7CisJCX0KKwl9IGVsc2UgeworCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lID0KKwkJCU5PTl9MVkRTX1RSQU5TTUlUVEVSOworCQlERUJVR19NU0coS0VSTl9JTkZPICJEbyBub3Qgc3VwcG9ydCBMVkRTIVxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworaW50IHZpYWZiX2x2ZHNfdHJhc21pdHRlcl9pZGVudGlmeSh2b2lkKQoreworCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9IEkyQ1BPUlRJTkRFWDsKKwlpZiAodmlhZmJfbHZkc19pZGVudGlmeV92dDE2MzYoKSkgeworCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmkyY19wb3J0ID0gSTJDUE9SVElOREVYOworCQlERUJVR19NU0coS0VSTl9JTkZPCisJCQkgICJGb3VuZCBWSUEgVlQxNjM2IExWRFMgb24gcG9ydCBpMmMgMHgzMSBcbiIpOworCX0gZWxzZSB7CisJCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9IEdQSU9QT1JUSU5ERVg7CisJCWlmICh2aWFmYl9sdmRzX2lkZW50aWZ5X3Z0MTYzNigpKSB7CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmkyY19wb3J0ID0KKwkJCQlHUElPUE9SVElOREVYOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTworCQkJCSAgIkZvdW5kIFZJQSBWVDE2MzYgTFZEUyBvbiBwb3J0IGdwaW8gMHgyYyBcbiIpOworCQl9CisJfQorCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDApCisJCWx2ZHNfaWRlbnRpZnlfaW50ZWdyYXRlZGx2ZHMoKTsKKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKQorCQlyZXR1cm4gdHJ1ZTsKKwkvKiBDaGVjayBmb3IgVlQxNjMxOiAqLworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUgPSBWVDE2MzFfTFZEUzsKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9zbGF2ZV9hZGRyID0KKwkJVlQxNjMxX0xWRFNfSTJDX0FERFI7CisKKwlpZiAoY2hlY2tfbHZkc19jaGlwKFZUMTYzMV9ERVZJQ0VfSURfUkVHLCBWVDE2MzFfREVWSUNFX0lEKSAhPSBGQUlMKSB7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuIFZUMTYzMSBMVkRTICEgXG4iKTsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gJTJkIiwKKwkJCSAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSk7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuICUyZCIsCisJCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpOworCQlyZXR1cm4gT0s7CisJfQorCisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSA9CisJCU5PTl9MVkRTX1RSQU5TTUlUVEVSOworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX3NsYXZlX2FkZHIgPQorCQlWVDE2MzFfTFZEU19JMkNfQUREUjsKKwlyZXR1cm4gRkFJTDsKK30KKworc3RhdGljIGludCBmcF9pZF90b192aW5kZXgoaW50IHBhbmVsX2lkKQoreworCURFQlVHX01TRyhLRVJOX0lORk8gImZwX2dldF9wYW5lbF9pZCgpXG4iKTsKKworCWlmIChwYW5lbF9pZCA+IExDRF9QQU5FTF9JRF9NQVhJTVVNKQorCQl2aWFmYl9sY2RfcGFuZWxfaWQgPSBwYW5lbF9pZCA9CisJCXZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjNGKSAmIDB4MEY7CisKKwlzd2l0Y2ggKHBhbmVsX2lkKSB7CisJY2FzZSAweDA6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDY0MDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzID0gNDgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDBfNjQwWDQ4MDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKKwkJcmV0dXJuIFZJQV9SRVNfNjQwWDQ4MDsKKwkJYnJlYWs7CisJY2FzZSAweDE6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDgwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzID0gNjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDFfODAwWDYwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKKwkJcmV0dXJuIFZJQV9SRVNfODAwWDYwMDsKKwkJYnJlYWs7CisJY2FzZSAweDI6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEwMjQ7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQyXzEwMjRYNzY4OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU18xMDI0WDc2ODsKKwkJYnJlYWs7CisJY2FzZSAweDM6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEyODA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQzXzEyODBYNzY4OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU18xMjgwWDc2ODsKKwkJYnJlYWs7CisJY2FzZSAweDQ6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEyODA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDEwMjQ7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lENF8xMjgwWDEwMjQ7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMTsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzEyODBYMTAyNDsKKwkJYnJlYWs7CisJY2FzZSAweDU6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDE0MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDEwNTA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lENV8xNDAwWDEwNTA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMTsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzE0MDBYMTA1MDsKKwkJYnJlYWs7CisJY2FzZSAweDY6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDE2MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDEyMDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lENl8xNjAwWDEyMDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMTsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzE2MDBYMTIwMDsKKwkJYnJlYWs7CisJY2FzZSAweDg6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDgwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzID0gNDgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JREFfODAwWDQ4MDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKKwkJcmV0dXJuIFZJQV9SRVNfODAwWDQ4MDsKKwkJYnJlYWs7CisJY2FzZSAweDk6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEwMjQ7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQyXzEwMjRYNzY4OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU18xMDI0WDc2ODsKKwkJYnJlYWs7CisJY2FzZSAweEE6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEwMjQ7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQyXzEwMjRYNzY4OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOworCQlyZXR1cm4gVklBX1JFU18xMDI0WDc2ODsKKwkJYnJlYWs7CisJY2FzZSAweEI6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEwMjQ7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQyXzEwMjRYNzY4OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOworCQlyZXR1cm4gVklBX1JFU18xMDI0WDc2ODsKKwkJYnJlYWs7CisJY2FzZSAweEM6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEyODA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQzXzEyODBYNzY4OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOworCQlyZXR1cm4gVklBX1JFU18xMjgwWDc2ODsKKwkJYnJlYWs7CisJY2FzZSAweEQ6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEyODA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDEwMjQ7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lENF8xMjgwWDEwMjQ7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMTsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDA7CisJCXJldHVybiBWSUFfUkVTXzEyODBYMTAyNDsKKwkJYnJlYWs7CisJY2FzZSAweEU6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDE0MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDEwNTA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lENV8xNDAwWDEwNTA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMTsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDA7CisJCXJldHVybiBWSUFfUkVTXzE0MDBYMTA1MDsKKwkJYnJlYWs7CisJY2FzZSAweEY6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDE2MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDEyMDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lENl8xNjAwWDEyMDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMTsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDA7CisJCXJldHVybiBWSUFfUkVTXzE2MDBYMTIwMDsKKwkJYnJlYWs7CisJY2FzZSAweDEwOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMzY2OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEN18xMzY2WDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMDsKKwkJcmV0dXJuIFZJQV9SRVNfMTM2OFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHgxMToKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gMTAyNDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzID0gNjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDhfMTAyNFg2MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzEwMjRYNjAwOworCQlicmVhazsKKwljYXNlIDB4MTI6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEyODA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQzXzEyODBYNzY4OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU18xMjgwWDc2ODsKKwkJYnJlYWs7CisJY2FzZSAweDEzOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA4MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEOV8xMjgwWDgwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKKwkJcmV0dXJuIFZJQV9SRVNfMTI4MFg4MDA7CisJCWJyZWFrOworCWNhc2UgMHgxNDoKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gMTM2MDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzID0gNzY4OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JREJfMTM2MFg3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDA7CisJCXJldHVybiBWSUFfUkVTXzEzNjBYNzY4OworCQlicmVhazsKKwljYXNlIDB4MTU6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEyODA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQzXzEyODBYNzY4OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOworCQlyZXR1cm4gVklBX1JFU18xMjgwWDc2ODsKKwkJYnJlYWs7CisJY2FzZSAweDE2OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSA0ODA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDY0MDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSURDXzQ4MFg2NDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzQ4MFg2NDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDgwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzID0gNjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDFfODAwWDYwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKKwkJcmV0dXJuIFZJQV9SRVNfODAwWDYwMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbHZkc19yZWdpc3Rlcl9yZWFkKGludCBpbmRleCkKK3sKKwl1OCBkYXRhOworCisJdmlhcGFyaW5mby0+aTJjX3N0dWZmLmkyY19wb3J0ID0gR1BJT1BPUlRJTkRFWDsKKwl2aWFmYl9pMmNfcmVhZGJ5dGUoKHU4KSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCSAgICBsdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfc2xhdmVfYWRkciwKKwkJCSh1OCkgaW5kZXgsICZkYXRhKTsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgbG9hZF9sY2Rfc2NhbGluZyhpbnQgc2V0X2hyZXMsIGludCBzZXRfdnJlcywgaW50IHBhbmVsX2hyZXMsCisJCSAgICAgIGludCBwYW5lbF92cmVzKQoreworCWludCByZWdfdmFsdWUgPSAwOworCWludCB2aWFmYl9sb2FkX3JlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyICpyZWcgPSBOVUxMOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAibG9hZF9sY2Rfc2NhbGluZygpISFcbiIpOworCisJLyogTENEIFNjYWxpbmcgRW5hYmxlICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I3OSwgVklBQ1IsIDB4MDcsIEJJVDAgKyBCSVQxICsgQklUMik7CisJaWYgKFVOSUNIUk9NRV9QNE05MDAgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCXZpYWZiX2xvYWRfc2NhbGluZ19mYWN0b3JfZm9yX3A0bTkwMChzZXRfaHJlcywgc2V0X3ZyZXMsCisJCQkJCSAgICAgICBwYW5lbF9ocmVzLCBwYW5lbF92cmVzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIENoZWNrIGlmIGV4cGFuc2lvbiBmb3IgaG9yaXpvbnRhbCAqLworCWlmIChzZXRfaHJlcyAhPSBwYW5lbF9ocmVzKSB7CisJCS8qIExvYWQgSG9yaXpvbnRhbCBTY2FsaW5nIEZhY3RvciAqLworCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCQlyZWdfdmFsdWUgPQorCQkJICAgIENMRTI2Nl9MQ0RfSE9SX1NDRl9GT1JNVUxBKHNldF9ocmVzLCBwYW5lbF9ocmVzKTsKKwkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkgICAgbGNkX3NjYWxpbmdfZmFjdG9yX0NMRS5sY2RfaG9yX3NjYWxpbmdfZmFjdG9yLgorCQkJICAgIHJlZ19udW07CisJCQlyZWcgPSBsY2Rfc2NhbGluZ19mYWN0b3JfQ0xFLmxjZF9ob3Jfc2NhbGluZ19mYWN0b3IucmVnOworCQkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLAorCQkJCXZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJCQlicmVhazsKKwkJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwkJY2FzZSBVTklDSFJPTUVfUE04MDA6CisJCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCQlyZWdfdmFsdWUgPQorCQkJICAgIEs4MDBfTENEX0hPUl9TQ0ZfRk9STVVMQShzZXRfaHJlcywgcGFuZWxfaHJlcyk7CisJCQkvKiBIb3Jpem9udGFsIHNjYWxpbmcgZW5hYmxlZCAqLworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JBMiwgVklBQ1IsIDB4QzAsIEJJVDcgKyBCSVQ2KTsKKwkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkgICAgbGNkX3NjYWxpbmdfZmFjdG9yLmxjZF9ob3Jfc2NhbGluZ19mYWN0b3IucmVnX251bTsKKwkJCXJlZyA9IGxjZF9zY2FsaW5nX2ZhY3Rvci5sY2RfaG9yX3NjYWxpbmdfZmFjdG9yLnJlZzsKKwkJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOworCQkJYnJlYWs7CisJCX0KKworCQlERUJVR19NU0coS0VSTl9JTkZPICJIb3Jpem9udGFsIFNjYWxpbmcgdmFsdWUgPSAlZCIsIHJlZ192YWx1ZSk7CisJfSBlbHNlIHsKKwkJLyogSG9yaXpvbnRhbCBzY2FsaW5nIGRpc2FibGVkICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSQTIsIFZJQUNSLCAweDAwLCBCSVQ3KTsKKwl9CisKKwkvKiBDaGVjayBpZiBleHBhbnNpb24gZm9yIHZlcnRpY2FsICovCisJaWYgKHNldF92cmVzICE9IHBhbmVsX3ZyZXMpIHsKKwkJLyogTG9hZCBWZXJ0aWNhbCBTY2FsaW5nIEZhY3RvciAqLworCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCQlyZWdfdmFsdWUgPQorCQkJICAgIENMRTI2Nl9MQ0RfVkVSX1NDRl9GT1JNVUxBKHNldF92cmVzLCBwYW5lbF92cmVzKTsKKwkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkgICAgbGNkX3NjYWxpbmdfZmFjdG9yX0NMRS5sY2RfdmVyX3NjYWxpbmdfZmFjdG9yLgorCQkJICAgIHJlZ19udW07CisJCQlyZWcgPSBsY2Rfc2NhbGluZ19mYWN0b3JfQ0xFLmxjZF92ZXJfc2NhbGluZ19mYWN0b3IucmVnOworCQkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLAorCQkJCXZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJCQlicmVhazsKKwkJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwkJY2FzZSBVTklDSFJPTUVfUE04MDA6CisJCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCQlyZWdfdmFsdWUgPQorCQkJICAgIEs4MDBfTENEX1ZFUl9TQ0ZfRk9STVVMQShzZXRfdnJlcywgcGFuZWxfdnJlcyk7CisJCQkvKiBWZXJ0aWNhbCBzY2FsaW5nIGVuYWJsZWQgKi8KKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSQTIsIFZJQUNSLCAweDA4LCBCSVQzKTsKKwkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkgICAgbGNkX3NjYWxpbmdfZmFjdG9yLmxjZF92ZXJfc2NhbGluZ19mYWN0b3IucmVnX251bTsKKwkJCXJlZyA9IGxjZF9zY2FsaW5nX2ZhY3Rvci5sY2RfdmVyX3NjYWxpbmdfZmFjdG9yLnJlZzsKKwkJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOworCQkJYnJlYWs7CisJCX0KKworCQlERUJVR19NU0coS0VSTl9JTkZPICJWZXJ0aWNhbCBTY2FsaW5nIHZhbHVlID0gJWQiLCByZWdfdmFsdWUpOworCX0gZWxzZSB7CisJCS8qIFZlcnRpY2FsIHNjYWxpbmcgZGlzYWJsZWQgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JBMiwgVklBQ1IsIDB4MDAsIEJJVDMpOworCX0KK30KKworc3RhdGljIHZvaWQgbG9hZF9sY2RfazQwMF9wYXRjaF90YmwoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsCisJaW50IHBhbmVsX2lkKQoreworCWludCB2bW9kZV9pbmRleDsKKwlpbnQgcmVnX251bSA9IDA7CisJc3RydWN0IGlvX3JlZyAqbGNkX3BhdGNoX3JlZyA9IE5VTEw7CisKKwlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTIpCisJCXZtb2RlX2luZGV4ID0gdmlhZmJfZ2V0X21vZGVfaW5kZXgoc2V0X2hyZXMsIHNldF92cmVzLCAxKTsKKwllbHNlCisJCXZtb2RlX2luZGV4ID0gdmlhZmJfZ2V0X21vZGVfaW5kZXgoc2V0X2hyZXMsIHNldF92cmVzLCAwKTsKKwlzd2l0Y2ggKHBhbmVsX2lkKSB7CisJCS8qIExDRCA4MDB4NjAwICovCisJY2FzZSBMQ0RfUEFORUxfSUQxXzgwMFg2MDA6CisJCXN3aXRjaCAodm1vZGVfaW5kZXgpIHsKKwkJY2FzZSBWSUFfUkVTXzY0MFg0MDA6CisJCWNhc2UgVklBX1JFU182NDBYNDgwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfNlg0XzhYNjsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfNlg0XzhYNjsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfNzIwWDQ4MDoKKwkJY2FzZSBWSUFfUkVTXzcyMFg1NzY6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU183WDRfOFg2OworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU183WDRfOFg2OworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwkJLyogTENEIDEwMjR4NzY4ICovCisJY2FzZSBMQ0RfUEFORUxfSUQyXzEwMjRYNzY4OgorCQlzd2l0Y2ggKHZtb2RlX2luZGV4KSB7CisJCWNhc2UgVklBX1JFU182NDBYNDAwOgorCQljYXNlIFZJQV9SRVNfNjQwWDQ4MDoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF8xMFg3OworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU182WDRfMTBYNzsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfNzIwWDQ4MDoKKwkJY2FzZSBWSUFfUkVTXzcyMFg1NzY6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU183WDRfMTBYNzsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfN1g0XzEwWDc7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTBYNzsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfOFg2XzEwWDc7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCQkvKiBMQ0QgMTI4MHgxMDI0ICovCisJY2FzZSBMQ0RfUEFORUxfSUQ0XzEyODBYMTAyNDoKKwkJc3dpdGNoICh2bW9kZV9pbmRleCkgeworCQljYXNlIFZJQV9SRVNfNjQwWDQwMDoKKwkJY2FzZSBWSUFfUkVTXzY0MFg0ODA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTJYMTA7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzZYNF8xMlgxMDsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfNzIwWDQ4MDoKKwkJY2FzZSBWSUFfUkVTXzcyMFg1NzY6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU183WDRfMTJYMTA7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzdYNF8xMlgxMDsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfODAwWDYwMDoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzhYNl8xMlgxMDsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfOFg2XzEyWDEwOworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU18xMDI0WDc2ODoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzEwWDdfMTJYMTA7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzEwWDdfMTJYMTA7CisJCQlicmVhazsKKworCQl9CisJCWJyZWFrOworCisJCS8qIExDRCAxNDAweDEwNTAgKi8KKwljYXNlIExDRF9QQU5FTF9JRDVfMTQwMFgxMDUwOgorCQlzd2l0Y2ggKHZtb2RlX2luZGV4KSB7CisJCWNhc2UgVklBX1JFU182NDBYNDgwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfNlg0XzE0WDEwOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU182WDRfMTRYMTA7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTRYMTA7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzhYNl8xNFgxMDsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfMTAyNFg3Njg6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMFg3XzE0WDEwOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMFg3XzE0WDEwOworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU18xMjgwWDc2ODoKKwkJY2FzZSBWSUFfUkVTXzEyODBYODAwOgorCQljYXNlIFZJQV9SRVNfMTI4MFg5NjA6CisJCWNhc2UgVklBX1JFU18xMjgwWDEwMjQ6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMlgxMF8xNFgxMDsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfMTJYMTBfMTRYMTA7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCQkvKiBMQ0QgMTYwMHgxMjAwICovCisJY2FzZSBMQ0RfUEFORUxfSUQ2XzE2MDBYMTIwMDoKKwkJc3dpdGNoICh2bW9kZV9pbmRleCkgeworCQljYXNlIFZJQV9SRVNfNjQwWDQwMDoKKwkJY2FzZSBWSUFfUkVTXzY0MFg0ODA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTZYMTI7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzZYNF8xNlgxMjsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfNzIwWDQ4MDoKKwkJY2FzZSBWSUFfUkVTXzcyMFg1NzY6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU183WDRfMTZYMTI7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzdYNF8xNlgxMjsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfODAwWDYwMDoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzhYNl8xNlgxMjsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfOFg2XzE2WDEyOworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU18xMDI0WDc2ODoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzEwWDdfMTZYMTI7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzEwWDdfMTZYMTI7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzEyODBYNzY4OgorCQljYXNlIFZJQV9SRVNfMTI4MFg4MDA6CisJCWNhc2UgVklBX1JFU18xMjgwWDk2MDoKKwkJY2FzZSBWSUFfUkVTXzEyODBYMTAyNDoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzEyWDEwXzE2WDEyOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMlgxMF8xNlgxMjsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJCS8qIExDRCAxMzY2eDc2OCAqLworCWNhc2UgTENEX1BBTkVMX0lEN18xMzY2WDc2ODoKKwkJc3dpdGNoICh2bW9kZV9pbmRleCkgeworCQljYXNlIFZJQV9SRVNfNjQwWDQ4MDoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF8xMzY2WDc7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzZYNF8xMzY2WDc7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6CisJCWNhc2UgVklBX1JFU183MjBYNTc2OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzEzNjZYNzsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfN1g0XzEzNjZYNzsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfODAwWDYwMDoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzhYNl8xMzY2WDc7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzhYNl8xMzY2WDc7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzEwMjRYNzY4OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTBYN18xMzY2WDc7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzEwWDdfMTM2Nlg3OworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU18xMjgwWDc2ODoKKwkJY2FzZSBWSUFfUkVTXzEyODBYODAwOgorCQljYXNlIFZJQV9SRVNfMTI4MFg5NjA6CisJCWNhc2UgVklBX1JFU18xMjgwWDEwMjQ6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMlgxMF8xMzY2WDc7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzEyWDEwXzEzNjZYNzsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJCS8qIExDRCAxMzYweDc2OCAqLworCWNhc2UgTENEX1BBTkVMX0lEQl8xMzYwWDc2ODoKKwkJYnJlYWs7CisJfQorCWlmIChyZWdfbnVtICE9IDApIHsKKwkJLyogSC5XLiBSZXNldCA6IE9OICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTcsIFZJQUNSLCAweDAwLCBCSVQ3KTsKKworCQl2aWFmYl93cml0ZV9yZWd4KGxjZF9wYXRjaF9yZWcsIHJlZ19udW0pOworCisJCS8qIEguVy4gUmVzZXQgOiBPRkYgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxNywgVklBQ1IsIDB4ODAsIEJJVDcpOworCisJCS8qIFJlc2V0IFBMTCAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMiwgQklUMSk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNDAsIFZJQVNSLCAweDAwLCBCSVQxKTsKKworCQkvKiBGaXJlISAqLworCQlvdXRiKGluYihWSUFSTWlzYykgfCAoQklUMiArIEJJVDMpLCBWSUFXTWlzYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2FkX2xjZF9wODgwX3BhdGNoX3RibChpbnQgc2V0X2hyZXMsIGludCBzZXRfdnJlcywKKwlpbnQgcGFuZWxfaWQpCit7CisJaW50IHZtb2RlX2luZGV4OworCWludCByZWdfbnVtID0gMDsKKwlzdHJ1Y3QgaW9fcmVnICpsY2RfcGF0Y2hfcmVnID0gTlVMTDsKKworCWlmICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMikKKwkJdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleChzZXRfaHJlcywgc2V0X3ZyZXMsIDEpOworCWVsc2UKKwkJdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleChzZXRfaHJlcywgc2V0X3ZyZXMsIDApOworCisJc3dpdGNoIChwYW5lbF9pZCkgeworCWNhc2UgTENEX1BBTkVMX0lENV8xNDAwWDEwNTA6CisJCXN3aXRjaCAodm1vZGVfaW5kZXgpIHsKKwkJY2FzZSBWSUFfUkVTXzY0MFg0ODA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX1A4ODBfTENEX1JFU182WDRfMTRYMTA7CisJCQlsY2RfcGF0Y2hfcmVnID0gUDg4MF9MQ0RfUkVTXzZYNF8xNFgxMDsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfODAwWDYwMDoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzhYNl8xNFgxMDsKKwkJCWxjZF9wYXRjaF9yZWcgPSBQODgwX0xDRF9SRVNfOFg2XzE0WDEwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBMQ0RfUEFORUxfSUQ2XzE2MDBYMTIwMDoKKwkJc3dpdGNoICh2bW9kZV9pbmRleCkgeworCQljYXNlIFZJQV9SRVNfNjQwWDQwMDoKKwkJY2FzZSBWSUFfUkVTXzY0MFg0ODA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX1A4ODBfTENEX1JFU182WDRfMTZYMTI7CisJCQlsY2RfcGF0Y2hfcmVnID0gUDg4MF9MQ0RfUkVTXzZYNF8xNlgxMjsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfNzIwWDQ4MDoKKwkJY2FzZSBWSUFfUkVTXzcyMFg1NzY6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX1A4ODBfTENEX1JFU183WDRfMTZYMTI7CisJCQlsY2RfcGF0Y2hfcmVnID0gUDg4MF9MQ0RfUkVTXzdYNF8xNlgxMjsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfODAwWDYwMDoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzhYNl8xNlgxMjsKKwkJCWxjZF9wYXRjaF9yZWcgPSBQODgwX0xDRF9SRVNfOFg2XzE2WDEyOworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU18xMDI0WDc2ODoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzEwWDdfMTZYMTI7CisJCQlsY2RfcGF0Y2hfcmVnID0gUDg4MF9MQ0RfUkVTXzEwWDdfMTZYMTI7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzEyODBYNzY4OgorCQljYXNlIFZJQV9SRVNfMTI4MFg5NjA6CisJCWNhc2UgVklBX1JFU18xMjgwWDEwMjQ6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX1A4ODBfTENEX1JFU18xMlgxMF8xNlgxMjsKKwkJCWxjZF9wYXRjaF9yZWcgPSBQODgwX0xDRF9SRVNfMTJYMTBfMTZYMTI7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCX0KKwlpZiAocmVnX251bSAhPSAwKSB7CisJCS8qIEguVy4gUmVzZXQgOiBPTiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHgwMCwgQklUNyk7CisKKwkJdmlhZmJfd3JpdGVfcmVneChsY2RfcGF0Y2hfcmVnLCByZWdfbnVtKTsKKworCQkvKiBILlcuIFJlc2V0IDogT0ZGICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTcsIFZJQUNSLCAweDgwLCBCSVQ3KTsKKworCQkvKiBSZXNldCBQTEwgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1I0MCwgVklBU1IsIDB4MDIsIEJJVDEpOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMCwgQklUMSk7CisKKwkJLyogRmlyZSEgKi8KKwkJb3V0YihpbmIoVklBUk1pc2MpIHwgKEJJVDIgKyBCSVQzKSwgVklBV01pc2MpOworCX0KK30KKworc3RhdGljIHZvaWQgbG9hZF9sY2RfcGF0Y2hfcmVncyhpbnQgc2V0X2hyZXMsIGludCBzZXRfdnJlcywKKwlpbnQgcGFuZWxfaWQsIGludCBzZXRfaWdhKQoreworCWludCB2bW9kZV9pbmRleDsKKworCWlmICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMikKKwkJdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleChzZXRfaHJlcywgc2V0X3ZyZXMsIDEpOworCWVsc2UKKwkJdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleChzZXRfaHJlcywgc2V0X3ZyZXMsIDApOworCisJdmlhZmJfdW5sb2NrX2NydCgpOworCisJLyogUGF0Y2ggZm9yIHNpbXVsdGFuZW91cyAmIEV4cGFuc2lvbiAqLworCWlmICgoc2V0X2lnYSA9PSBJR0ExX0lHQTIpICYmCisJCSh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGlzcGxheV9tZXRob2QgPT0KKwkgICAgTENEX0VYUEFORFNJT04pKSB7CisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKKwkJY2FzZSBVTklDSFJPTUVfSzQwMDoKKwkJCWxvYWRfbGNkX2s0MDBfcGF0Y2hfdGJsKHNldF9ocmVzLCBzZXRfdnJlcywgcGFuZWxfaWQpOworCQkJYnJlYWs7CisJCWNhc2UgVU5JQ0hST01FX0s4MDA6CisJCQlicmVhazsKKwkJY2FzZSBVTklDSFJPTUVfUE04MDA6CisJCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwkJCWxvYWRfbGNkX3A4ODBfcGF0Y2hfdGJsKHNldF9ocmVzLCBzZXRfdnJlcywgcGFuZWxfaWQpOworCQl9CisJfQorCisJdmlhZmJfbG9ja19jcnQoKTsKK30KKworc3RhdGljIHZvaWQgdmlhX3BpdGNoX2FsaWdubWVudF9wYXRjaF9sY2QoCisJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqcGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCSAgIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24KKwkJCQkgICAqcGx2ZHNfY2hpcF9pbmZvKQoreworCXVuc2lnbmVkIGNoYXIgY3IxMywgY3IzNSwgY3I2NSwgY3I2NiwgY3I2NzsKKwl1bnNpZ25lZCBsb25nIGR3U2NyZWVuUGl0Y2ggPSAwOworCXVuc2lnbmVkIGxvbmcgZHdQaXRjaDsKKworCWR3UGl0Y2ggPSBwbHZkc19zZXR0aW5nX2luZm8tPmhfYWN0aXZlICogKHBsdmRzX3NldHRpbmdfaW5mby0+YnBwID4+IDMpOworCWlmIChkd1BpdGNoICYgMHgxRikgeworCQlkd1NjcmVlblBpdGNoID0gKChkd1BpdGNoICsgMzEpICYgfjMxKSA+PiAzOworCQlpZiAocGx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0EyKSB7CisJCQlpZiAocGx2ZHNfc2V0dGluZ19pbmZvLT5icHAgPiA4KSB7CisJCQkJY3I2NiA9ICh1bnNpZ25lZCBjaGFyKShkd1NjcmVlblBpdGNoICYgMHhGRik7CisJCQkJdmlhZmJfd3JpdGVfcmVnKENSNjYsIFZJQUNSLCBjcjY2KTsKKwkJCQljcjY3ID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSNjcpICYgMHhGQzsKKwkJCQljcjY3IHw9CisJCQkJICAgICh1bnNpZ25lZAorCQkJCSAgICAgY2hhcikoKGR3U2NyZWVuUGl0Y2ggJiAweDMwMCkgPj4gOCk7CisJCQkJdmlhZmJfd3JpdGVfcmVnKENSNjcsIFZJQUNSLCBjcjY3KTsKKwkJCX0KKworCQkJLyogRmV0Y2ggQ291bnQgKi8KKwkJCWNyNjcgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I2NykgJiAweEYzOworCQkJY3I2NyB8PSAodW5zaWduZWQgY2hhcikoKGR3U2NyZWVuUGl0Y2ggJiAweDYwMCkgPj4gNyk7CisJCQl2aWFmYl93cml0ZV9yZWcoQ1I2NywgVklBQ1IsIGNyNjcpOworCQkJY3I2NSA9ICh1bnNpZ25lZCBjaGFyKSgoZHdTY3JlZW5QaXRjaCA+PiAxKSAmIDB4RkYpOworCQkJY3I2NSArPSAyOworCQkJdmlhZmJfd3JpdGVfcmVnKENSNjUsIFZJQUNSLCBjcjY1KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChwbHZkc19zZXR0aW5nX2luZm8tPmJwcCA+IDgpIHsKKwkJCQljcjEzID0gKHVuc2lnbmVkIGNoYXIpKGR3U2NyZWVuUGl0Y2ggJiAweEZGKTsKKwkJCQl2aWFmYl93cml0ZV9yZWcoQ1IxMywgVklBQ1IsIGNyMTMpOworCQkJCWNyMzUgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1IzNSkgJiAweDFGOworCQkJCWNyMzUgfD0KKwkJCQkgICAgKHVuc2lnbmVkCisJCQkJICAgICBjaGFyKSgoZHdTY3JlZW5QaXRjaCAmIDB4NzAwKSA+PiAzKTsKKwkJCQl2aWFmYl93cml0ZV9yZWcoQ1IzNSwgVklBQ1IsIGNyMzUpOworCQkJfQorCQl9CisJfQorfQorc3RhdGljIHZvaWQgbGNkX3BhdGNoX3NrZXdfZHZwMChzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pCit7CisJaWYgKFZUMTYzNl9MVkRTID09IHBsdmRzX2NoaXBfaW5mby0+bHZkc19jaGlwX25hbWUpIHsKKwkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQkJdmlhZmJfdnQxNjM2X3BhdGNoX3NrZXdfb25fdnQzMzY0KHBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkJCSAgICBwbHZkc19jaGlwX2luZm8pOworCQkJYnJlYWs7CisJCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwkJCXZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzMyNyhwbHZkc19zZXR0aW5nX2luZm8sCisJCQkJCQkgICAgcGx2ZHNfY2hpcF9pbmZvKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorc3RhdGljIHZvaWQgbGNkX3BhdGNoX3NrZXdfZHZwMShzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pCit7CisJaWYgKFZUMTYzNl9MVkRTID09IHBsdmRzX2NoaXBfaW5mby0+bHZkc19jaGlwX25hbWUpIHsKKwkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCQl2aWFmYl92dDE2MzZfcGF0Y2hfc2tld19vbl92dDMzMjQocGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCQkJICAgIHBsdmRzX2NoaXBfaW5mbyk7CisJCQlicmVhazsKKwkJfQorCX0KK30KK3N0YXRpYyB2b2lkIGxjZF9wYXRjaF9za2V3KHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkqcGx2ZHNfc2V0dGluZ19pbmZvLCBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pCit7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAibGNkX3BhdGNoX3NrZXdcbiIpOworCXN3aXRjaCAocGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKSB7CisJY2FzZSBJTlRFUkZBQ0VfRFZQMDoKKwkJbGNkX3BhdGNoX3NrZXdfZHZwMChwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbyk7CisJCWJyZWFrOworCWNhc2UgSU5URVJGQUNFX0RWUDE6CisJCWxjZF9wYXRjaF9za2V3X2R2cDEocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8pOworCQlicmVhazsKKwljYXNlIElOVEVSRkFDRV9ERlBfTE9XOgorCQlpZiAoVU5JQ0hST01FX1A0TTkwMCA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDA4LAorCQkJCSAgICAgICBCSVQwICsgQklUMSArIEJJVDIgKyBCSVQzKTsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKKy8qIExDRCBTZXQgTW9kZSAqLwordm9pZCB2aWFmYl9sY2Rfc2V0X21vZGUoc3RydWN0IGNydF9tb2RlX3RhYmxlICptb2RlX2NydF90YWJsZSwKKwkJICBzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJCSAgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWludCB2aWRlb19pbmRleCA9IHBsdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3NpemU7CisJaW50IHNldF9pZ2EgPSBwbHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoOworCWludCBtb2RlX2JwcCA9IHBsdmRzX3NldHRpbmdfaW5mby0+YnBwOworCWludCB2aWFmYl9sb2FkX3JlZ19udW0gPSAwOworCWludCByZWdfdmFsdWUgPSAwOworCWludCBzZXRfaHJlcywgc2V0X3ZyZXM7CisJaW50IHBhbmVsX2hyZXMsIHBhbmVsX3ZyZXM7CisJdTMyIHBsbF9EX047CisJaW50IG9mZnNldDsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgKnJlZyA9IE5VTEw7CisJc3RydWN0IGRpc3BsYXlfdGltaW5nIG1vZGVfY3J0X3JlZywgcGFuZWxfY3J0X3JlZzsKKwlzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKnBhbmVsX2NydF90YWJsZSA9IE5VTEw7CisJc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90YmwgPSBOVUxMOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfbGNkX3NldF9tb2RlISFcbiIpOworCS8qIEdldCBtb2RlIHRhYmxlICovCisJbW9kZV9jcnRfcmVnID0gbW9kZV9jcnRfdGFibGUtPmNydGM7CisJLyogR2V0IHBhbmVsIHRhYmxlIFBvaW50ZXIgKi8KKwl2bW9kZV90YmwgPSB2aWFmYl9nZXRfbW9kZXRibF9wb2ludGVyKHZpZGVvX2luZGV4KTsKKwlwYW5lbF9jcnRfdGFibGUgPSB2bW9kZV90YmwtPmNydGM7CisJcGFuZWxfY3J0X3JlZyA9IHBhbmVsX2NydF90YWJsZS0+Y3J0YzsKKwlERUJVR19NU0coS0VSTl9JTkZPICJiZWxsb3cgdmlhZmJfbGNkX3NldF9tb2RlISFcbiIpOworCXNldF9ocmVzID0gcGx2ZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZTsKKwlzZXRfdnJlcyA9IHBsdmRzX3NldHRpbmdfaW5mby0+dl9hY3RpdmU7CisJcGFuZWxfaHJlcyA9IHBsdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXM7CisJcGFuZWxfdnJlcyA9IHBsdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXM7CisJaWYgKFZUMTYzNl9MVkRTID09IHBsdmRzX2NoaXBfaW5mby0+bHZkc19jaGlwX25hbWUpCisJCXZpYWZiX2luaXRfbHZkc192dDE2MzYocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8pOworCXBsdmRzX3NldHRpbmdfaW5mby0+dmNsayA9IHBhbmVsX2NydF90YWJsZS0+Y2xrOworCWlmIChzZXRfaWdhID09IElHQTEpIHsKKwkJLyogSUdBMSBkb2Vzbid0IGhhdmUgTENEIHNjYWxpbmcsIHNvIHNldCBpdCBhcyBjZW50ZXJpbmcuICovCisJCXZpYWZiX2xvYWRfY3J0Y190aW1pbmcobGNkX2NlbnRlcmluZ190aW1naW5nCisJCQkJIChtb2RlX2NydF9yZWcsIHBhbmVsX2NydF9yZWcpLCBJR0ExKTsKKwl9IGVsc2UgeworCQkvKiBFeHBhbnNpb24gKi8KKwkJaWYgKChwbHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID09CisJCSAgICAgTENEX0VYUEFORFNJT04pICYgKChzZXRfaHJlcyAhPSBwYW5lbF9ocmVzKQorCQkJCQl8fCAoc2V0X3ZyZXMgIT0gcGFuZWxfdnJlcykpKSB7CisJCQkvKiBleHBhbnNpb24gdGltaW5nIElHQTIgbG9hZGVkIHBhbmVsIHNldCB0aW1pbmcqLworCQkJdmlhZmJfbG9hZF9jcnRjX3RpbWluZyhwYW5lbF9jcnRfcmVnLCBJR0EyKTsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2xvYWRfY3J0Y190aW1pbmchIVxuIik7CisJCQlsb2FkX2xjZF9zY2FsaW5nKHNldF9ocmVzLCBzZXRfdnJlcywgcGFuZWxfaHJlcywKKwkJCQkJIHBhbmVsX3ZyZXMpOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAibG9hZF9sY2Rfc2NhbGluZyEhXG4iKTsKKwkJfSBlbHNlIHsJLyogQ2VudGVyaW5nICovCisJCQkvKiBjZW50ZXJpbmcgdGltaW5nIElHQTIgYWx3YXlzIGxvYWRlZCBwYW5lbAorCQkJICAgYW5kIG1vZGUgcmVsZWF0aXZlIHRpbWluZyAqLworCQkJdmlhZmJfbG9hZF9jcnRjX3RpbWluZyhsY2RfY2VudGVyaW5nX3RpbWdpbmcKKwkJCQkJIChtb2RlX2NydF9yZWcsIHBhbmVsX2NydF9yZWcpLCBJR0EyKTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNzksIFZJQUNSLCAweDAwLAorCQkJCUJJVDAgKyBCSVQxICsgQklUMik7CisJCQkvKiBMQ0Qgc2NhbGluZyBkaXNhYmxlZCAqLworCQl9CisJfQorCisJaWYgKHNldF9pZ2EgPT0gSUdBMV9JR0EyKSB7CisJCWxvYWRfY3J0Y19zaGFkb3dfdGltaW5nKG1vZGVfY3J0X3JlZywgcGFuZWxfY3J0X3JlZyk7CisJCS8qIEZpbGwgc2hhZG93IHJlZ2lzdGVycyAqLworCisJCXN3aXRjaCAocGx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQpIHsKKwkJY2FzZSBMQ0RfUEFORUxfSUQwXzY0MFg0ODA6CisJCQlvZmZzZXQgPSA4MDsKKwkJCWJyZWFrOworCQljYXNlIExDRF9QQU5FTF9JRDFfODAwWDYwMDoKKwkJY2FzZSBMQ0RfUEFORUxfSURBXzgwMFg0ODA6CisJCQlvZmZzZXQgPSAxMTA7CisJCQlicmVhazsKKwkJY2FzZSBMQ0RfUEFORUxfSUQyXzEwMjRYNzY4OgorCQkJb2Zmc2V0ID0gMTUwOworCQkJYnJlYWs7CisJCWNhc2UgTENEX1BBTkVMX0lEM18xMjgwWDc2ODoKKwkJY2FzZSBMQ0RfUEFORUxfSUQ0XzEyODBYMTAyNDoKKwkJY2FzZSBMQ0RfUEFORUxfSUQ1XzE0MDBYMTA1MDoKKwkJY2FzZSBMQ0RfUEFORUxfSUQ5XzEyODBYODAwOgorCQkJb2Zmc2V0ID0gMTkwOworCQkJYnJlYWs7CisJCWNhc2UgTENEX1BBTkVMX0lENl8xNjAwWDEyMDA6CisJCQlvZmZzZXQgPSAyNTA7CisJCQlicmVhazsKKwkJY2FzZSBMQ0RfUEFORUxfSUQ3XzEzNjZYNzY4OgorCQljYXNlIExDRF9QQU5FTF9JREJfMTM2MFg3Njg6CisJCQlvZmZzZXQgPSAyMTI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW9mZnNldCA9IDE0MDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogT2Zmc2V0IGZvciBzaW11bHRhbmVvdXMgKi8KKwkJcmVnX3ZhbHVlID0gb2Zmc2V0OworCQl2aWFmYl9sb2FkX3JlZ19udW0gPSBvZmZzZXRfcmVnLmlnYTJfb2Zmc2V0X3JlZy5yZWdfbnVtOworCQlyZWcgPSBvZmZzZXRfcmVnLmlnYTJfb2Zmc2V0X3JlZy5yZWc7CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfbG9hZF9yZWchIVxuIik7CisJCXZpYWZiX2xvYWRfZmV0Y2hfY291bnRfcmVnKHNldF9ocmVzLCA0LCBJR0EyKTsKKwkJLyogRmV0Y2ggY291bnQgZm9yIHNpbXVsdGFuZW91cyAqLworCX0gZWxzZSB7CQkvKiBTQU1NICovCisJCS8qIE9mZnNldCBmb3IgSUdBMiBvbmx5ICovCisJCXZpYWZiX2xvYWRfb2Zmc2V0X3JlZyhzZXRfaHJlcywgbW9kZV9icHAgLyA4LCBzZXRfaWdhKTsKKwkJLyogRmV0Y2ggY291bnQgZm9yIElHQTIgb25seSAqLworCQl2aWFmYl9sb2FkX2ZldGNoX2NvdW50X3JlZyhzZXRfaHJlcywgbW9kZV9icHAgLyA4LCBzZXRfaWdhKTsKKworCQlpZiAoKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSAhPSBVTklDSFJPTUVfQ0xFMjY2KQorCQkgICAgJiYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSAhPSBVTklDSFJPTUVfSzQwMCkpCisJCQl2aWFmYl9sb2FkX0ZJRk9fcmVnKHNldF9pZ2EsIHNldF9ocmVzLCBzZXRfdnJlcyk7CisKKwkJdmlhZmJfc2V0X2NvbG9yX2RlcHRoKG1vZGVfYnBwIC8gOCwgc2V0X2lnYSk7CisJfQorCisJZmlsbF9sY2RfZm9ybWF0KCk7CisKKwlwbGxfRF9OID0gdmlhZmJfZ2V0X2Nsa192YWx1ZShwYW5lbF9jcnRfdGFibGVbMF0uY2xrKTsKKwlERUJVR19NU0coS0VSTl9JTkZPICJQTEw9MHgleCIsIHBsbF9EX04pOworCXZpYWZiX3NldF92Y2xvY2socGxsX0RfTiwgc2V0X2lnYSk7CisKKwl2aWFmYl9zZXRfb3V0cHV0X3BhdGgoREVWSUNFX0xDRCwgc2V0X2lnYSwKKwkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKTsKKwlsY2RfcGF0Y2hfc2tldyhwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbyk7CisKKwkvKiBJZiBLOE04MDAsIGVuYWJsZSBMQ0QgUHJlZmV0Y2ggTW9kZS4gKi8KKwlpZiAoKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfSzgwMCkKKwkgICAgfHwgKFVOSUNIUk9NRV9LOE04OTAgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSkKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDEsIEJJVDApOworCisJbG9hZF9sY2RfcGF0Y2hfcmVncyhzZXRfaHJlcywgc2V0X3ZyZXMsCisJCQkgICAgcGx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQsIHNldF9pZ2EpOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAibG9hZF9sY2RfcGF0Y2hfcmVncyEhXG4iKTsKKworCS8qIFBhdGNoIGZvciBub24gMzJiaXQgYWxpZ25tZW50IG1vZGUgKi8KKwl2aWFfcGl0Y2hfYWxpZ25tZW50X3BhdGNoX2xjZChwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVncmF0ZWRfbHZkc19kaXNhYmxlKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSAgICAgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSAgICAgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWJvb2wgdHVybl9vZmZfZmlyc3RfcG93ZXJzZXF1ZW5jZSA9IGZhbHNlOworCWJvb2wgdHVybl9vZmZfc2Vjb25kX3Bvd2Vyc2VxdWVuY2UgPSBmYWxzZTsKKwlpZiAoSU5URVJGQUNFX0xWRFMwTFZEUzEgPT0gcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKQorCQl0dXJuX29mZl9maXJzdF9wb3dlcnNlcXVlbmNlID0gdHJ1ZTsKKwlpZiAoSU5URVJGQUNFX0xWRFMwID09IHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkKKwkJdHVybl9vZmZfZmlyc3RfcG93ZXJzZXF1ZW5jZSA9IHRydWU7CisJaWYgKElOVEVSRkFDRV9MVkRTMSA9PSBwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpCisJCXR1cm5fb2ZmX3NlY29uZF9wb3dlcnNlcXVlbmNlID0gdHJ1ZTsKKwlpZiAodHVybl9vZmZfc2Vjb25kX3Bvd2Vyc2VxdWVuY2UpIHsKKwkJLyogVXNlIHNlY29uZCBwb3dlciBzZXF1ZW5jZSBjb250cm9sOiAqLworCisJCS8qIFR1cm4gb2ZmIHBvd2VyIHNlcXVlbmNlLiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQ0LCBWSUFDUiwgMCwgQklUMSk7CisKKwkJLyogVHVybiBvZmYgYmFjayBsaWdodC4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMywgVklBQ1IsIDB4QzAsIEJJVDYgKyBCSVQ3KTsKKwl9CisJaWYgKHR1cm5fb2ZmX2ZpcnN0X3Bvd2Vyc2VxdWVuY2UpIHsKKwkJLyogVXNlIGZpcnN0IHBvd2VyIHNlcXVlbmNlIGNvbnRyb2w6ICovCisKKwkJLyogVHVybiBvZmYgcG93ZXIgc2VxdWVuY2UuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAwLCBCSVQzKTsKKworCQkvKiBUdXJuIG9mZiBiYWNrIGxpZ2h0LiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjkxLCBWSUFDUiwgMHhDMCwgQklUNiArIEJJVDcpOworCX0KKworCS8qIFR1cm4gREZQIEhpZ2gvTG93IFBhZCBvZmYuICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDAsIEJJVDAgKyBCSVQxICsgQklUMiArIEJJVDMpOworCisJLyogUG93ZXIgb2ZmIExWRFMgY2hhbm5lbC4gKi8KKwlzd2l0Y2ggKHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkgeworCWNhc2UgSU5URVJGQUNFX0xWRFMwOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHg4MCwgQklUNyk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfTFZEUzE6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAweDQwLCBCSVQ2KTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9MVkRTMExWRFMxOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHhDMCwgQklUNiArIEJJVDcpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGludGVncmF0ZWRfbHZkc19lbmFibGUoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJICAgICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkgICAgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWJvb2wgdHVybl9vbl9maXJzdF9wb3dlcnNlcXVlbmNlID0gZmFsc2U7CisJYm9vbCB0dXJuX29uX3NlY29uZF9wb3dlcnNlcXVlbmNlID0gZmFsc2U7CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJpbnRlZ3JhdGVkX2x2ZHNfZW5hYmxlLCBvdXRfaW50ZXJmYWNlOiVkXG4iLAorCQkgIHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSk7CisJaWYgKHBsdmRzX3NldHRpbmdfaW5mby0+bGNkX21vZGUgPT0gTENEX1NQV0cpCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAweDAwLCBCSVQwICsgQklUMSk7CisJIGVsc2UKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMiwgVklBQ1IsIDB4MDMsIEJJVDAgKyBCSVQxKTsKKwlpZiAoSU5URVJGQUNFX0xWRFMwTFZEUzEgPT0gcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKQorCQl0dXJuX29uX2ZpcnN0X3Bvd2Vyc2VxdWVuY2UgPSB0cnVlOworCWlmIChJTlRFUkZBQ0VfTFZEUzAgPT0gcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKQorCQl0dXJuX29uX2ZpcnN0X3Bvd2Vyc2VxdWVuY2UgPSB0cnVlOworCWlmIChJTlRFUkZBQ0VfTFZEUzEgPT0gcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKQorCQl0dXJuX29uX3NlY29uZF9wb3dlcnNlcXVlbmNlID0gdHJ1ZTsKKworCWlmICh0dXJuX29uX3NlY29uZF9wb3dlcnNlcXVlbmNlKSB7CisJCS8qIFVzZSBzZWNvbmQgcG93ZXIgc2VxdWVuY2UgY29udHJvbDogKi8KKworCQkvKiBVc2UgaGFyZHdhcmUgY29udHJvbCBwb3dlciBzZXF1ZW5jZS4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMywgVklBQ1IsIDAsIEJJVDApOworCisJCS8qIFR1cm4gb24gYmFjayBsaWdodC4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMywgVklBQ1IsIDAsIEJJVDYgKyBCSVQ3KTsKKworCQkvKiBUdXJuIG9uIGhhcmR3YXJlIHBvd2VyIHNlcXVlbmNlLiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQ0LCBWSUFDUiwgMHgwMiwgQklUMSk7CisJfQorCWlmICh0dXJuX29uX2ZpcnN0X3Bvd2Vyc2VxdWVuY2UpIHsKKwkJLyogVXNlIGZpcnN0IHBvd2VyIHNlcXVlbmNlIGNvbnRyb2w6ICovCisKKwkJLyogVXNlIGhhcmR3YXJlIGNvbnRyb2wgcG93ZXIgc2VxdWVuY2UuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTEsIFZJQUNSLCAwLCBCSVQwKTsKKworCQkvKiBUdXJuIG9uIGJhY2sgbGlnaHQuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTEsIFZJQUNSLCAwLCBCSVQ2ICsgQklUNyk7CisKKwkJLyogVHVybiBvbiBoYXJkd2FyZSBwb3dlciBzZXF1ZW5jZS4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDgsIEJJVDMpOworCX0KKworCS8qIFR1cm4gREZQIEhpZ2gvTG93IHBhZCBvbi4gKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwgMHgwRiwgQklUMCArIEJJVDEgKyBCSVQyICsgQklUMyk7CisKKwkvKiBQb3dlciBvbiBMVkRTIGNoYW5uZWwuICovCisJc3dpdGNoIChwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpIHsKKwljYXNlIElOVEVSRkFDRV9MVkRTMDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMiwgVklBQ1IsIDAsIEJJVDcpOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSU5URVJGQUNFX0xWRFMxOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMCwgQklUNik7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfTFZEUzBMVkRTMToKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMiwgVklBQ1IsIDAsIEJJVDYgKyBCSVQ3KTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIHZpYWZiX2xjZF9kaXNhYmxlKHZvaWQpCit7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpIHsKKwkJbGNkX3Bvd2Vyc2VxdWVuY2Vfb2ZmKCk7CisJCS8qIERJMSBwYWQgb2ZmICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUUsIFZJQVNSLCAweDAwLCAweDMwKTsKKwl9IGVsc2UgaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDApIHsKKwkJaWYgKHZpYWZiX0xDRDJfT04KKwkJICAgICYmIChJTlRFR1JBVEVEX0xWRFMgPT0KKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lKSkKKwkJCWludGVncmF0ZWRfbHZkc19kaXNhYmxlKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCSZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMik7CisJCWlmIChJTlRFR1JBVEVEX0xWRFMgPT0KKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpCisJCQlpbnRlZ3JhdGVkX2x2ZHNfZGlzYWJsZSh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJCQkmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbyk7CisJCWlmIChWVDE2MzZfTFZEUyA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQkJbHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpCisJCQl2aWFmYl9kaXNhYmxlX2x2ZHNfdnQxNjM2KHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCSZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvKTsKKwl9IGVsc2UgaWYgKFZUMTYzNl9MVkRTID09CisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSkgeworCQl2aWFmYl9kaXNhYmxlX2x2ZHNfdnQxNjM2KHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCSAgICAmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbyk7CisJfSBlbHNlIHsKKwkJLyogREZQLUhMIHBhZCBvZmYgICAgICAgICAgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDB4MDAsIDB4MEYpOworCQkvKiBCYWNrbGlnaHQgb2ZmICAgICAgICAgICAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjNELCBWSUFTUiwgMHgwMCwgMHgyMCk7CisJCS8qIDI0IGJpdCBESSBkYXRhIHBhaHQgb2ZmICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTEsIFZJQUNSLCAweDgwLCAweDgwKTsKKwkJLyogU2ltdWx0YW5lb3V0IGRpc2FibGVkICAgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QiwgVklBQ1IsIDB4MDAsIDB4MDgpOworCX0KKworCS8qIERpc2FibGUgZXhwYW5zaW9uIGJpdCAgICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I3OSwgVklBQ1IsIDB4MDAsIDB4MDEpOworCS8qIENSVCBwYXRoIHNldCB0byBJR0ExICAgICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNiwgVklBU1IsIDB4MDAsIDB4NDApOworCS8qIFNpbXVsdGFuZW91dCBkaXNhYmxlZCAgICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QiwgVklBQ1IsIDB4MDAsIDB4MDgpOworCS8qIElHQTIgcGF0aCBkaXNhYmxlZCAgICAgICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDAsIDB4ODApOworCit9CisKK3ZvaWQgdmlhZmJfbGNkX2VuYWJsZSh2b2lkKQoreworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikgeworCQkvKiBESTEgcGFkIG9uICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUUsIFZJQVNSLCAweDMwLCAweDMwKTsKKwkJbGNkX3Bvd2Vyc2VxdWVuY2Vfb24oKTsKKwl9IGVsc2UgaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDApIHsKKwkJaWYgKHZpYWZiX0xDRDJfT04gJiYgKElOVEVHUkFURURfTFZEUyA9PQorCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIubHZkc19jaGlwX25hbWUpKQorCQkJaW50ZWdyYXRlZF9sdmRzX2VuYWJsZSh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIsIFwKKwkJCQkmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIpOworCQlpZiAoSU5URUdSQVRFRF9MVkRTID09CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKQorCQkJaW50ZWdyYXRlZF9sdmRzX2VuYWJsZSh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJCQkmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbyk7CisJCWlmIChWVDE2MzZfTFZEUyA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQkJbHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpCisJCQl2aWFmYl9lbmFibGVfbHZkc192dDE2MzYodmlhcGFyaW5mby0+CisJCQlsdmRzX3NldHRpbmdfaW5mbywgJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCQlsdmRzX2NoaXBfaW5mbyk7CisJfSBlbHNlIGlmIChWVDE2MzZfTFZEUyA9PQorCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpIHsKKwkJdmlhZmJfZW5hYmxlX2x2ZHNfdnQxNjM2KHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCSAgICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvKTsKKwl9IGVsc2UgeworCQkvKiBERlAtSEwgcGFkIG9uICAgICAgICAgICAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwgMHgwRiwgMHgwRik7CisJCS8qIEJhY2tsaWdodCBvbiAgICAgICAgICAgICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSM0QsIFZJQVNSLCAweDIwLCAweDIwKTsKKwkJLyogMjQgYml0IERJIGRhdGEgcGFodCBvbiAgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5MSwgVklBQ1IsIDB4MDAsIDB4ODApOworCisJCS8qIFNldCBkYXRhIHNvdXJjZSBzZWxlY3Rpb24gYml0IGJ5IGlnYSBwYXRoICovCisJCWlmICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMSkgeworCQkJLyogREZQLUggc2V0IHRvIElHQTEgICAgICAgKi8KKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCAweDAwLCAweDEwKTsKKwkJCS8qIERGUC1MIHNldCB0byBJR0ExICAgICAgICovCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgwMCwgMHgxMCk7CisJCX0gZWxzZSB7CisJCQkvKiBERlAtSCBzZXQgdG8gSUdBMiAgICAgICAqLworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsIDB4MTAsIDB4MTApOworCQkJLyogREZQLUwgc2V0IHRvIElHQTIgICAgICAgKi8KKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDEwLCAweDEwKTsKKwkJfQorCQkvKiBMQ0QgZW5hYmxlZCAgICAgICAgICAgICAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHg0OCwgMHg0OCk7CisJfQorCisJaWYgKCh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMSkKKwkgICAgfHwgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0ExX0lHQTIpKSB7CisJCS8qIENSVCBwYXRoIHNldCB0byBJR0EyICAgICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTYsIFZJQVNSLCAweDQwLCAweDQwKTsKKwkJLyogSUdBMiBwYXRoIGRpc2FibGVkICAgICAgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDAsIDB4ODApOworCQkvKiBJR0EyIHBhdGggZW5hYmxlZCAgICAgICAqLworCX0gZWxzZSB7CQkvKiBJR0EyICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDgwLCAweDgwKTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgbGNkX3Bvd2Vyc2VxdWVuY2Vfb2ZmKHZvaWQpCit7CisJaW50IGksIG1hc2ssIGRhdGE7CisKKwkvKiBTb2Z0d2FyZSBjb250cm9sIHBvd2VyIHNlcXVlbmNlICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5MSwgVklBQ1IsIDB4MTEsIDB4MTEpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQltYXNrID0gUG93ZXJTZXF1ZW5jZU9mZlswXVtpXTsKKwkJZGF0YSA9IFBvd2VyU2VxdWVuY2VPZmZbMV1baV0gJiBtYXNrOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjkxLCBWSUFDUiwgKHU4KSBkYXRhLCAodTgpIG1hc2spOworCQl1ZGVsYXkoUG93ZXJTZXF1ZW5jZU9mZlsyXVtpXSk7CisJfQorCisJLyogRGlzYWJsZSBMQ0QgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHgwMCwgMHgwOCk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9wb3dlcnNlcXVlbmNlX29uKHZvaWQpCit7CisJaW50IGksIG1hc2ssIGRhdGE7CisKKwkvKiBTb2Z0d2FyZSBjb250cm9sIHBvd2VyIHNlcXVlbmNlICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5MSwgVklBQ1IsIDB4MTEsIDB4MTEpOworCisJLyogRW5hYmxlIExDRCAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDA4LCAweDA4KTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJbWFzayA9IFBvd2VyU2VxdWVuY2VPblswXVtpXTsKKwkJZGF0YSA9IFBvd2VyU2VxdWVuY2VPblsxXVtpXSAmIG1hc2s7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTEsIFZJQUNSLCAodTgpIGRhdGEsICh1OCkgbWFzayk7CisJCXVkZWxheShQb3dlclNlcXVlbmNlT25bMl1baV0pOworCX0KKworCXVkZWxheSgxKTsKK30KKworc3RhdGljIHZvaWQgZmlsbF9sY2RfZm9ybWF0KHZvaWQpCit7CisJdTggYmRpdGhlcmluZyA9IDAsIGJkdWFsID0gMDsKKworCWlmICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSkKKwkJYmR1YWwgPSBCSVQ0OworCWlmICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nKQorCQliZGl0aGVyaW5nID0gQklUMDsKKwkvKiBEdWFsICYgRGl0aGVyaW5nICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I4OCwgVklBQ1IsIChiZGl0aGVyaW5nIHwgYmR1YWwpLCBCSVQ0ICsgQklUMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2RpcG9ydF9vZl9pbnRlZ3JhdGVkX2x2ZHMoCisJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvLAorCQkJCSAgICAgc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJCSAgICAgKnBsdmRzX3NldHRpbmdfaW5mbykKK3sKKwkvKiBEZXRlcm1pbmUgTENEIERJIFBvcnQgYnkgaGFyZHdhcmUgbGF5b3V0LiAqLworCXN3aXRjaCAodmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQpIHsKKwljYXNlIEhXX0xBWU9VVF9MQ0RfT05MWToKKwkJeworCQkJaWYgKHBsdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSkgeworCQkJCXBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSA9CisJCQkJICAgIElOVEVSRkFDRV9MVkRTMExWRFMxOworCQkJfSBlbHNlIHsKKwkJCQlwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UgPQorCQkJCSAgICBJTlRFUkZBQ0VfTFZEUzA7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIEhXX0xBWU9VVF9EVklfT05MWToKKwkJeworCQkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlID0gSU5URVJGQUNFX05PTkU7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBIV19MQVlPVVRfTENEMV9MQ0QyOgorCWNhc2UgSFdfTEFZT1VUX0xDRF9FWFRFUk5BTF9MQ0QyOgorCQl7CisJCQlwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UgPQorCQkJICAgIElOVEVSRkFDRV9MVkRTMExWRFMxOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSFdfTEFZT1VUX0xDRF9EVkk6CisJCXsKKwkJCXBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9MVkRTMTsKKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQl7CisJCQlwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfTFZEUzE7CisJCQlicmVhazsKKwkJfQorCX0KKworCURFQlVHX01TRyhLRVJOX0lORk8KKwkJICAiRGlzcGxheSBIYXJkd2FyZSBMYXlvdXQ6IDB4JXgsIExDRCBESSBQb3J0OiAweCV4XG4iLAorCQkgIHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0LAorCQkgIHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSk7Cit9CisKK3ZvaWQgdmlhZmJfaW5pdF9sdmRzX291dHB1dF9pbnRlcmZhY2Uoc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbgorCQkJCSpwbHZkc19jaGlwX2luZm8sCisJCQkJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJCSpwbHZkc19zZXR0aW5nX2luZm8pCit7CisJaWYgKElOVEVSRkFDRV9OT05FICE9IHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkgeworCQkvKkRvIG5vdGhpbmcsIGxjZCBwb3J0IGlzIHNwZWNpZmllZCBieSBtb2R1bGUgcGFyYW1ldGVyICovCisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKHBsdmRzX2NoaXBfaW5mby0+bHZkc19jaGlwX25hbWUpIHsKKworCWNhc2UgVlQxNjM2X0xWRFM6CisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCQkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlID0gSU5URVJGQUNFX0RWUDE7CisJCQlicmVhazsKKwkJY2FzZSBVTklDSFJPTUVfQ043MDA6CisJCQlwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfREZQX0xPVzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlID0gSU5URVJGQUNFX0RWUDA7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSU5URUdSQVRFRF9MVkRTOgorCQljaGVja19kaXBvcnRfb2ZfaW50ZWdyYXRlZF9sdmRzKHBsdmRzX2NoaXBfaW5mbywKKwkJCQkJCXBsdmRzX3NldHRpbmdfaW5mbyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwkJCXBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9ERlBfTE9XOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfREZQOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGRpc3BsYXlfdGltaW5nIGxjZF9jZW50ZXJpbmdfdGltZ2luZyhzdHJ1Y3QgZGlzcGxheV90aW1pbmcKKwkJCQkJICAgIG1vZGVfY3J0X3JlZywKKwkJCQkJICAgIHN0cnVjdCBkaXNwbGF5X3RpbWluZyBwYW5lbF9jcnRfcmVnKQoreworCXN0cnVjdCBkaXNwbGF5X3RpbWluZyBjcnRfcmVnOworCisJY3J0X3JlZy5ob3JfdG90YWwgPSBwYW5lbF9jcnRfcmVnLmhvcl90b3RhbDsKKwljcnRfcmVnLmhvcl9hZGRyID0gbW9kZV9jcnRfcmVnLmhvcl9hZGRyOworCWNydF9yZWcuaG9yX2JsYW5rX3N0YXJ0ID0KKwkgICAgKHBhbmVsX2NydF9yZWcuaG9yX2FkZHIgLSBtb2RlX2NydF9yZWcuaG9yX2FkZHIpIC8gMiArCisJICAgIGNydF9yZWcuaG9yX2FkZHI7CisJY3J0X3JlZy5ob3JfYmxhbmtfZW5kID0gcGFuZWxfY3J0X3JlZy5ob3JfYmxhbmtfZW5kOworCWNydF9yZWcuaG9yX3N5bmNfc3RhcnQgPQorCSAgICAocGFuZWxfY3J0X3JlZy5ob3Jfc3luY19zdGFydCAtCisJICAgICBwYW5lbF9jcnRfcmVnLmhvcl9ibGFua19zdGFydCkgKyBjcnRfcmVnLmhvcl9ibGFua19zdGFydDsKKwljcnRfcmVnLmhvcl9zeW5jX2VuZCA9IHBhbmVsX2NydF9yZWcuaG9yX3N5bmNfZW5kOworCisJY3J0X3JlZy52ZXJfdG90YWwgPSBwYW5lbF9jcnRfcmVnLnZlcl90b3RhbDsKKwljcnRfcmVnLnZlcl9hZGRyID0gbW9kZV9jcnRfcmVnLnZlcl9hZGRyOworCWNydF9yZWcudmVyX2JsYW5rX3N0YXJ0ID0KKwkgICAgKHBhbmVsX2NydF9yZWcudmVyX2FkZHIgLSBtb2RlX2NydF9yZWcudmVyX2FkZHIpIC8gMiArCisJICAgIGNydF9yZWcudmVyX2FkZHI7CisJY3J0X3JlZy52ZXJfYmxhbmtfZW5kID0gcGFuZWxfY3J0X3JlZy52ZXJfYmxhbmtfZW5kOworCWNydF9yZWcudmVyX3N5bmNfc3RhcnQgPQorCSAgICAocGFuZWxfY3J0X3JlZy52ZXJfc3luY19zdGFydCAtCisJICAgICBwYW5lbF9jcnRfcmVnLnZlcl9ibGFua19zdGFydCkgKyBjcnRfcmVnLnZlcl9ibGFua19zdGFydDsKKwljcnRfcmVnLnZlcl9zeW5jX2VuZCA9IHBhbmVsX2NydF9yZWcudmVyX3N5bmNfZW5kOworCisJcmV0dXJuIGNydF9yZWc7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfY3J0Y19zaGFkb3dfdGltaW5nKHN0cnVjdCBkaXNwbGF5X3RpbWluZyBtb2RlX3RpbWluZywKKwkJCSAgICAgc3RydWN0IGRpc3BsYXlfdGltaW5nIHBhbmVsX3RpbWluZykKK3sKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgKnJlZyA9IE5VTEw7CisJaW50IGk7CisJaW50IHZpYWZiX2xvYWRfcmVnX051bSA9IDA7CisJaW50IHJlZ192YWx1ZSA9IDA7CisKKwlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID09IExDRF9FWFBBTkRTSU9OKSB7CisJCS8qIEV4cGFuc2lvbiAqLworCQlmb3IgKGkgPSAxMjsgaSA8IDIwOyBpKyspIHsKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSBIX1RPVEFMX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX0hPUl9UT1RBTF9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLmhvcl90b3RhbCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuaG9yX3RvdGFsX3NoYWRvdy4KKwkJCQkgICAgcmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX3NoYWRvd19jcnRjX3JlZy5ob3JfdG90YWxfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9CTEFOS19FTkRfU0hBRE9XX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfSE9SX0JMQU5LX0VORF9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLmhvcl9ibGFua19zdGFydCwKKwkJCQkgICAgIHBhbmVsX3RpbWluZy5ob3JfYmxhbmtfZW5kKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KKwkJCQkgICAgaG9yX2JsYW5rX2VuZF9zaGFkb3cucmVnX251bTsKKwkJCQlyZWcgPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KKwkJCQkgICAgaG9yX2JsYW5rX2VuZF9zaGFkb3cucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX1RPVEFMX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9UT1RBTF9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl90b3RhbCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX3RvdGFsX3NoYWRvdy4KKwkJCQkgICAgcmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfdG90YWxfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9BRERSX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9BRERSX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChwYW5lbF90aW1pbmcudmVyX2FkZHIpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl9hZGRyX3NoYWRvdy4KKwkJCQkgICAgcmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfYWRkcl9zaGFkb3cucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX0JMQU5LX1NBVFJUX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9CTEFOS19TVEFSVF9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl9ibGFua19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIHZlcl9ibGFua19zdGFydF9zaGFkb3cucmVnX251bTsKKwkJCQlyZWcgPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KKwkJCQkgICAgdmVyX2JsYW5rX3N0YXJ0X3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfQkxBTktfRU5EX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9CTEFOS19FTkRfU0hBRE9XX0ZPUk1VTEEKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQsCisJCQkJICAgICBwYW5lbF90aW1pbmcudmVyX2JsYW5rX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIHZlcl9ibGFua19lbmRfc2hhZG93LnJlZ19udW07CisJCQkJcmVnID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIHZlcl9ibGFua19lbmRfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9TWU5DX1NBVFJUX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9TWU5DX1NUQVJUX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChwYW5lbF90aW1pbmcudmVyX3N5bmNfc3RhcnQpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfc3luY19zdGFydF9zaGFkb3cucmVnX251bTsKKwkJCQlyZWcgPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KKwkJCQkgICAgdmVyX3N5bmNfc3RhcnRfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9TWU5DX0VORF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfU1lOQ19FTkRfU0hBRE9XX0ZPUk1VTEEKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfc3luY19zdGFydCwKKwkJCQkgICAgIHBhbmVsX3RpbWluZy52ZXJfc3luY19lbmQpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfc3luY19lbmRfc2hhZG93LnJlZ19udW07CisJCQkJcmVnID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIHZlcl9zeW5jX2VuZF9zaGFkb3cucmVnOworCQkJCWJyZWFrOworCQkJfQorCQkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLAorCQkJCXZpYWZiX2xvYWRfcmVnX051bSwgcmVnLCBWSUFDUik7CisJCX0KKwl9IGVsc2UgewkJLyogQ2VudGVyaW5nICovCisJCWZvciAoaSA9IDEyOyBpIDwgMjA7IGkrKykgeworCQkJc3dpdGNoIChpKSB7CisJCQljYXNlIEhfVE9UQUxfU0hBRE9XX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfSE9SX1RPVEFMX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChwYW5lbF90aW1pbmcuaG9yX3RvdGFsKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy5ob3JfdG90YWxfc2hhZG93LgorCQkJCSAgICByZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfc2hhZG93X2NydGNfcmVnLmhvcl90b3RhbF9zaGFkb3cucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBIX0JMQU5LX0VORF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9IT1JfQkxBTktfRU5EX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChwYW5lbF90aW1pbmcuaG9yX2JsYW5rX3N0YXJ0LAorCQkJCSAgICAgcGFuZWxfdGltaW5nLmhvcl9ibGFua19lbmQpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICBob3JfYmxhbmtfZW5kX3NoYWRvdy5yZWdfbnVtOworCQkJCXJlZyA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICBob3JfYmxhbmtfZW5kX3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfVE9UQUxfU0hBRE9XX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX1RPVEFMX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChwYW5lbF90aW1pbmcudmVyX3RvdGFsKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfdG90YWxfc2hhZG93LgorCQkJCSAgICByZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl90b3RhbF9zaGFkb3cucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX0FERFJfU0hBRE9XX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX0FERFJfU0hBRE9XX0ZPUk1VTEEKKwkJCQkgICAgKG1vZGVfdGltaW5nLnZlcl9hZGRyKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfYWRkcl9zaGFkb3cuCisJCQkJICAgIHJlZ19udW07CisJCQkJcmVnID0gaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX2FkZHJfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9CTEFOS19TQVRSVF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfQkxBTktfU1RBUlRfU0hBRE9XX0ZPUk1VTEEKKwkJCQkgICAgKG1vZGVfdGltaW5nLnZlcl9ibGFua19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIHZlcl9ibGFua19zdGFydF9zaGFkb3cucmVnX251bTsKKwkJCQlyZWcgPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KKwkJCQkgICAgdmVyX2JsYW5rX3N0YXJ0X3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfQkxBTktfRU5EX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9CTEFOS19FTkRfU0hBRE9XX0ZPUk1VTEEKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQsCisJCQkJICAgICBwYW5lbF90aW1pbmcudmVyX2JsYW5rX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIHZlcl9ibGFua19lbmRfc2hhZG93LnJlZ19udW07CisJCQkJcmVnID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIHZlcl9ibGFua19lbmRfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9TWU5DX1NBVFJUX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9TWU5DX1NUQVJUX1NIQURPV19GT1JNVUxBKAorCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl9zeW5jX3N0YXJ0IC0KKwkJCQkgICAgcGFuZWxfdGltaW5nLnZlcl9ibGFua19zdGFydCkgKworCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl9hZGRyIC0KKwkJCQkgICAgbW9kZV90aW1pbmcudmVyX2FkZHIpIC8gMiArCisJCQkJICAgIG1vZGVfdGltaW5nLnZlcl9hZGRyKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfc3luY19zdGFydF9zaGFkb3cuCisJCQkJICAgIHJlZ19udW07CisJCQkJcmVnID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX3N5bmNfc3RhcnRfc2hhZG93LgorCQkJCSAgICByZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfU1lOQ19FTkRfU0hBRE9XX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX1NZTkNfRU5EX1NIQURPV19GT1JNVUxBKAorCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl9zeW5jX3N0YXJ0IC0KKwkJCQkgICAgcGFuZWxfdGltaW5nLnZlcl9ibGFua19zdGFydCkgKworCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl9hZGRyIC0KKwkJCQkgICAgbW9kZV90aW1pbmcudmVyX2FkZHIpIC8gMiArCisJCQkJICAgIG1vZGVfdGltaW5nLnZlcl9hZGRyLAorCQkJCSAgICBwYW5lbF90aW1pbmcudmVyX3N5bmNfZW5kKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfc3luY19lbmRfc2hhZG93LgorCQkJCSAgICByZWdfbnVtOworCQkJCXJlZyA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl9zeW5jX2VuZF9zaGFkb3cuCisJCQkJICAgIHJlZzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0sIHJlZywgVklBQ1IpOworCQl9CisJfQorfQorCitib29sIHZpYWZiX2xjZF9nZXRfbW9iaWxlX3N0YXRlKGJvb2wgKm1vYmlsZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpyb21wdHIsICp0YWJsZXB0cjsKKwl1OCBjb3JlX2Jhc2U7CisJdW5zaWduZWQgY2hhciAqYmlvc3B0cjsKKwkvKiBSb20gYWRkcmVzcyAqLworCXUzMiByb21hZGRyID0gMHgwMDBDMDAwMDsKKwl1MTYgc3RhcnRfcGF0dGVybiA9IDA7CisKKwliaW9zcHRyID0gaW9yZW1hcChyb21hZGRyLCAweDEwMDAwKTsKKworCW1lbWNweSgmc3RhcnRfcGF0dGVybiwgYmlvc3B0ciwgMik7CisJLyogQ29tcGFyZSBwYXR0ZXJuICovCisJaWYgKHN0YXJ0X3BhdHRlcm4gPT0gMHhBQTU1KSB7CisJCS8qIEdldCB0aGUgc3RhcnQgb2YgVGFibGUgKi8KKwkJLyogMHgxQiBtZWFucyBCSU9TIG9mZnNldCBwb3NpdGlvbiAqLworCQlyb21wdHIgPSBiaW9zcHRyICsgMHgxQjsKKwkJdGFibGVwdHIgPSBiaW9zcHRyICsgKigodTE2ICopIHJvbXB0cik7CisKKwkJLyogR2V0IHRoZSBzdGFydCBvZiBiaW9zdmVyIHN0cnVjdHVyZSAqLworCQkvKiAxOCBtZWFucyBCSU9TIHZlcnNpb24gcG9zaXRpb24uICovCisJCXJvbXB0ciA9IHRhYmxlcHRyICsgMTg7CisJCXJvbXB0ciA9IGJpb3NwdHIgKyAqKCh1MTYgKikgcm9tcHRyKTsKKworCQkvKiBUaGUgb2Zmc2V0IHNob3VsZCBiZSA0NCwgYnV0IHRoZQorCQkgICBhY3R1YWwgaW1hZ2UgaXMgbGVzcyB0aHJlZSBjaGFyLiAqLworCQkvKiBwUm9tICs9IDQ0OyAqLworCQlyb21wdHIgKz0gNDE7CisKKwkJY29yZV9iYXNlID0gKnJvbXB0cisrOworCisJCWlmIChjb3JlX2Jhc2UgJiAweDgpCisJCQkqbW9iaWxlID0gZmFsc2U7CisJCWVsc2UKKwkJCSptb2JpbGUgPSB0cnVlOworCQkvKiByZWxlYXNlIG1lbW9yeSAqLworCQlpb3VubWFwKGJpb3NwdHIpOworCisJCXJldHVybiB0cnVlOworCX0gZWxzZSB7CisJCWlvdW5tYXAoYmlvc3B0cik7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZpYWZiX2xvYWRfc2NhbGluZ19mYWN0b3JfZm9yX3A0bTkwMChpbnQgc2V0X2hyZXMsCisJaW50IHNldF92cmVzLCBpbnQgcGFuZWxfaHJlcywgaW50IHBhbmVsX3ZyZXMpCit7CisJaW50IGhfc2NhbGluZ19mYWN0b3I7CisJaW50IHZfc2NhbGluZ19mYWN0b3I7CisJdTggY3JhMiA9IDA7CisJdTggY3I3NyA9IDA7CisJdTggY3I3OCA9IDA7CisJdTggY3I3OSA9IDA7CisJdTggY3I5ZiA9IDA7CisJLyogQ2hlY2sgaWYgZXhwYW5zaW9uIGZvciBob3Jpem9udGFsICovCisJaWYgKHNldF9ocmVzIDwgcGFuZWxfaHJlcykgeworCQkvKiBMb2FkIEhvcml6b250YWwgU2NhbGluZyBGYWN0b3IgKi8KKworCQkvKiBGb3IgVklBX0s4TTgwMCBvciBsYXRlciBjaGlwc2V0cy4gKi8KKwkJaF9zY2FsaW5nX2ZhY3RvciA9CisJCSAgICBLODAwX0xDRF9IT1JfU0NGX0ZPUk1VTEEoc2V0X2hyZXMsIHBhbmVsX2hyZXMpOworCQkvKiBIU0NhbGVGYWN0b3JbMTowXSBhdCBDUjlGWzE6MF0gKi8KKwkJY3I5ZiA9IGhfc2NhbGluZ19mYWN0b3IgJiAweDAwMDM7CisJCS8qIEhTQ2FsZUZhY3Rvcls5OjJdIGF0IENSNzdbNzowXSAqLworCQljcjc3ID0gKGhfc2NhbGluZ19mYWN0b3IgJiAweDAzRkMpID4+IDI7CisJCS8qIEhTQ2FsZUZhY3RvclsxMToxMF0gYXQgQ1I3OVs1OjRdICovCisJCWNyNzkgPSAoaF9zY2FsaW5nX2ZhY3RvciAmIDB4MEMwMCkgPj4gMTA7CisJCWNyNzkgPDw9IDQ7CisKKwkJLyogSG9yaXpvbnRhbCBzY2FsaW5nIGVuYWJsZWQgKi8KKwkJY3JhMiA9IDB4QzA7CisKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiSG9yaXpvbnRhbCBTY2FsaW5nIHZhbHVlID0gJWRcbiIsCisJCQkgIGhfc2NhbGluZ19mYWN0b3IpOworCX0gZWxzZSB7CisJCS8qIEhvcml6b250YWwgc2NhbGluZyBkaXNhYmxlZCAqLworCQljcmEyID0gMHgwMDsKKwl9CisKKwkvKiBDaGVjayBpZiBleHBhbnNpb24gZm9yIHZlcnRpY2FsICovCisJaWYgKHNldF92cmVzIDwgcGFuZWxfdnJlcykgeworCQkvKiBMb2FkIFZlcnRpY2FsIFNjYWxpbmcgRmFjdG9yICovCisKKwkJLyogRm9yIFZJQV9LOE04MDAgb3IgbGF0ZXIgY2hpcHNldHMuICovCisJCXZfc2NhbGluZ19mYWN0b3IgPQorCQkgICAgSzgwMF9MQ0RfVkVSX1NDRl9GT1JNVUxBKHNldF92cmVzLCBwYW5lbF92cmVzKTsKKworCQkvKiBWZXJ0aWNhbCBzY2FsaW5nIGVuYWJsZWQgKi8KKwkJY3JhMiB8PSAweDA4OworCQkvKiBWU0NhbGVGYWN0b3JbMF0gYXQgQ1I3OVszXSAqLworCQljcjc5IHw9ICgodl9zY2FsaW5nX2ZhY3RvciAmIDB4MDAwMSkgPDwgMyk7CisJCS8qIFZTQ2FsZUZhY3Rvcls4OjFdIGF0IENSNzhbNzowXSAqLworCQljcjc4IHw9ICh2X3NjYWxpbmdfZmFjdG9yICYgMHgwMUZFKSA+PiAxOworCQkvKiBWU0NhbGVGYWN0b3JbMTA6OV0gYXQgQ1I3OVs3OjZdICovCisJCWNyNzkgfD0gKCh2X3NjYWxpbmdfZmFjdG9yICYgMHgwNjAwKSA+PiA5KSA8PCA2OworCisJCURFQlVHX01TRyhLRVJOX0lORk8gIlZlcnRpY2FsIFNjYWxpbmcgdmFsdWUgPSAlZFxuIiwKKwkJCSAgdl9zY2FsaW5nX2ZhY3Rvcik7CisJfSBlbHNlIHsKKwkJLyogVmVydGljYWwgc2NhbGluZyBkaXNhYmxlZCAqLworCQljcmEyIHw9IDB4MDA7CisJfQorCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JBMiwgVklBQ1IsIGNyYTIsIEJJVDMgKyBCSVQ2ICsgQklUNyk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I3NywgVklBQ1IsIGNyNzcsIDB4RkYpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNzgsIFZJQUNSLCBjcjc4LCAweEZGKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjc5LCBWSUFDUiwgY3I3OSwgMHhGOCk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5RiwgVklBQ1IsIGNyOWYsIEJJVDAgKyBCSVQxKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5oIGIvZHJpdmVycy92aWRlby92aWEvbGNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxZjQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisjaWZuZGVmIF9fTENEX0hfXworI2RlZmluZSBfX0xDRF9IX18KKworLypEZWZpbml0aW9uIFRNRFMgRGV2aWNlIElEIHJlZ2lzdGVyKi8KKyNkZWZpbmUgICAgIFZUMTYzMV9ERVZJQ0VfSURfUkVHICAgICAgICAweDAyCisjZGVmaW5lICAgICBWVDE2MzFfREVWSUNFX0lEICAgICAgICAgICAgMHg5MgorCisjZGVmaW5lICAgICBWVDMyNzFfREVWSUNFX0lEX1JFRyAgICAgICAgMHgwMgorI2RlZmluZSAgICAgVlQzMjcxX0RFVklDRV9JRCAgICAgICAgICAgIDB4NzEKKworI2RlZmluZSAgICAgR0VUX0xDRF9TSVpFX0JZX1NZU1RFTV9CSU9TICAgICAweDAxCisjZGVmaW5lICAgICBHRVRfTENEX1NJWkVfQllfVkdBX0JJT1MgICAgICAgIDB4MDIKKyNkZWZpbmUgICAgIEdFVF9MQ0RfU1pJRV9CWV9IV19TVFJBUFBJTkcgICAgMHgwMworI2RlZmluZSAgICAgR0VUX0xDRF9TSVpFX0JZX1VTRVJfU0VUVElORyAgICAweDA0CisKKy8qIERlZmluaXRpb24gRFZJIFBhbmVsIElEKi8KKy8qIFJlc29sdXRpb246IDY0MHg0ODAsICAgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZSAqLworI2RlZmluZSAgICAgTENEX1BBTkVMX0lEMF82NDBYNDgwICAgICAgIDB4MDAKKy8qIFJlc29sdXRpb246IDgwMHg2MDAsICAgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZSAqLworI2RlZmluZSAgICAgTENEX1BBTkVMX0lEMV84MDBYNjAwICAgICAgIDB4MDEKKy8qIFJlc29sdXRpb246IDEwMjR4NzY4LCAgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZSAqLworI2RlZmluZSAgICAgTENEX1BBTkVMX0lEMl8xMDI0WDc2OCAgICAgIDB4MDIKKy8qIFJlc29sdXRpb246IDEyODB4NzY4LCAgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZSAqLworI2RlZmluZSAgICAgTENEX1BBTkVMX0lEM18xMjgwWDc2OCAgICAgIDB4MDMKKy8qIFJlc29sdXRpb246IDEyODB4MTAyNCwgQ2hhbm5lbDogZHVhbCwgICBEaXRoZXJpbmc6IEVuYWJsZSAqLworI2RlZmluZSAgICAgTENEX1BBTkVMX0lENF8xMjgwWDEwMjQgICAgIDB4MDQKKy8qIFJlc29sdXRpb246IDE0MDB4MTA1MCwgQ2hhbm5lbDogZHVhbCwgICBEaXRoZXJpbmc6IEVuYWJsZSAqLworI2RlZmluZSAgICAgTENEX1BBTkVMX0lENV8xNDAwWDEwNTAgICAgIDB4MDUKKy8qIFJlc29sdXRpb246IDE2MDB4MTIwMCwgQ2hhbm5lbDogZHVhbCwgICBEaXRoZXJpbmc6IEVuYWJsZSAqLworI2RlZmluZSAgICAgTENEX1BBTkVMX0lENl8xNjAwWDEyMDAgICAgIDB4MDYKKy8qIFJlc29sdXRpb246IDEzNjZ4NzY4LCAgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IERpc2FibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDdfMTM2Nlg3NjggICAgICAweDA3CisvKiBSZXNvbHV0aW9uOiAxMDI0eDYwMCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUqLworI2RlZmluZSAgICAgTENEX1BBTkVMX0lEOF8xMDI0WDYwMCAgICAgIDB4MDgKKy8qIFJlc29sdXRpb246IDEyODB4ODAwLCAgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZSovCisjZGVmaW5lICAgICBMQ0RfUEFORUxfSUQ5XzEyODBYODAwICAgICAgMHgwOQorLyogUmVzb2x1dGlvbjogODAweDQ4MCwgICBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRW5hYmxlKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JREFfODAwWDQ4MCAgICAgICAweDBBCisvKiBSZXNvbHV0aW9uOiAxMzYweDc2OCwgICBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRGlzYWJsZSovCisjZGVmaW5lICAgICBMQ0RfUEFORUxfSURCXzEzNjBYNzY4ICAgICAweDBCCisvKiBSZXNvbHV0aW9uOiA0ODB4NjQwLCAgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZSAqLworI2RlZmluZSAgICAgTENEX1BBTkVMX0lEQ180ODBYNjQwICAgICAgMHgwQworCisKK2V4dGVybiBpbnQgdmlhZmJfTENEMl9PTjsKK2V4dGVybiBpbnQgdmlhZmJfTENEX09OOworZXh0ZXJuIGludCB2aWFmYl9EVklfT047CisKK3ZvaWQgdmlhZmJfZGlzYWJsZV9sdmRzX3Z0MTYzNihzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOwordm9pZCB2aWFmYl9lbmFibGVfbHZkc192dDE2MzYoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCXN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbyk7Cit2b2lkIHZpYWZiX2xjZF9kaXNhYmxlKHZvaWQpOwordm9pZCB2aWFmYl9sY2RfZW5hYmxlKHZvaWQpOwordm9pZCB2aWFmYl9pbml0X2xjZF9zaXplKHZvaWQpOwordm9pZCB2aWFmYl9pbml0X2x2ZHNfb3V0cHV0X2ludGVyZmFjZShzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uCisJCQkJKnBsdmRzX2NoaXBfaW5mbywKKwkJCQlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkJKnBsdmRzX3NldHRpbmdfaW5mbyk7Cit2b2lkIHZpYWZiX2xjZF9zZXRfbW9kZShzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKm1vZGVfY3J0X3RhYmxlLAorCQkgIHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJICBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOworaW50IHZpYWZiX2x2ZHNfdHJhc21pdHRlcl9pZGVudGlmeSh2b2lkKTsKK3ZvaWQgdmlhZmJfaW5pdF9sdmRzX291dHB1dF9pbnRlcmZhY2Uoc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbgorCQkJCSpwbHZkc19jaGlwX2luZm8sCisJCQkJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJCSpwbHZkc19zZXR0aW5nX2luZm8pOworYm9vbCB2aWFmYl9sY2RfZ2V0X21vYmlsZV9zdGF0ZShib29sICptb2JpbGUpOwordm9pZCB2aWFmYl9sb2FkX2NydGNfdGltaW5nKHN0cnVjdCBkaXNwbGF5X3RpbWluZyBkZXZpY2VfdGltaW5nLAorCWludCBzZXRfaWdhKTsKKworI2VuZGlmIC8qIF9fTENEX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvbGNkdGJsLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2R0YmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjNkZDgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvbGNkdGJsLmgKQEAgLTAsMCArMSw1OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisjaWZuZGVmIF9fTENEVEJMX0hfXworI2RlZmluZSBfX0xDRFRCTF9IX18KKworI2luY2x1ZGUgInNoYXJlLmgiCisKKy8qIENMRTI2NiBTb2Z0d2FyZSBQb3dlciBTZXF1ZW5jZSAqLworLyoge01hc2t9LCB7RGF0YX0sIHtEZWxheX0gKi8KK2ludCBQb3dlclNlcXVlbmNlT25bM11bM10gPQorICAgIHsgezB4MTAsIDB4MDgsIDB4MDZ9LCB7MHgxMCwgMHgwOCwgMHgwNn0sIHsweDE5LCAweDFGRSwgMHgwMX0gfTsKK2ludCBQb3dlclNlcXVlbmNlT2ZmWzNdWzNdID0KKyAgICB7IHsweDA2LCAweDA4LCAweDEwfSwgezB4MDAsIDB4MDAsIDB4MDB9LCB7MHhEMiwgMHgxOSwgMHgwMX0gfTsKKworLyogKysrKysrIFA4ODAgKysrKysrICovCisvKiAgIFBhbmVsIDE2MDB4MTIwMCAgICovCitzdHJ1Y3QgaW9fcmVnIFA4ODBfTENEX1JFU182WDRfMTZYMTJbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg3M30sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgwOH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDczfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDAwfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4NDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg1QX0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgwMH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg1RX0sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhENn0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NCwgMHhGRiwgMHg3RH0sIHtWSUFTUiwgU1I0NSwgMHhGRiwgMHg4Q30sCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDAyfQorCit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfNlg0XzE2WDEyIEFSUkFZX1NJWkUoUDg4MF9MQ0RfUkVTXzZYNF8xNlgxMikKKworc3RydWN0IGlvX3JlZyBQODgwX0xDRF9SRVNfN1g0XzE2WDEyW10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4Njd9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MDh9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg2N30sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgwMH0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDQwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4NzR9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4Nzh9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4RjV9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDQsIDB4RkYsIDB4Nzh9LCB7VklBU1IsIFNSNDUsIDB4RkYsIDB4OEN9LAorCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwMX0KKworfTsKKworI2RlZmluZSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzdYNF8xNlgxMiBBUlJBWV9TSVpFKFA4ODBfTENEX1JFU183WDRfMTZYMTIpCisKK3N0cnVjdCBpb19yZWcgUDg4MF9MQ0RfUkVTXzhYNl8xNlgxMltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDY1fSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDA4fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4NjV9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4MDB9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHg0MH0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDdGfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDAwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDgzfSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEUxfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ0LCAweEZGLCAweDZEfSwge1ZJQVNSLCBTUjQ1LCAweEZGLCAweDg4fSwKKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDN9CisKK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX1A4ODBfTENEX1JFU184WDZfMTZYMTIgQVJSQVlfU0laRShQODgwX0xDRF9SRVNfOFg2XzE2WDEyKQorCitzdHJ1Y3QgaW9fcmVnIFA4ODBfTENEX1JFU18xMFg3XzE2WDEyW10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4NjV9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MDh9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg2NX0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgwMH0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDQwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4QUJ9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4QUZ9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4RjB9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDQsIDB4RkYsIDB4OTJ9LCB7VklBU1IsIFNSNDUsIDB4RkYsIDB4ODh9LAorCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwM30KKworfTsKKworI2RlZmluZSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzEwWDdfMTZYMTIgQVJSQVlfU0laRShQODgwX0xDRF9SRVNfMTBYN18xNlgxMikKKworc3RydWN0IGlvX3JlZyBQODgwX0xDRF9SRVNfMTJYMTBfMTZYMTJbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg3RH0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgwOH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDdEfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDAwfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4NDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHhEMH0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgwMH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHhENH0sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhGQX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NCwgMHhGRiwgMHhGNn0sIHtWSUFTUiwgU1I0NSwgMHhGRiwgMHg4OH0sCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDA1fQorCit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfMTJYMTBfMTZYMTIgQVJSQVlfU0laRShQODgwX0xDRF9SRVNfMTJYMTBfMTZYMTIpCisKKy8qICAgUGFuZWwgMTQwMHgxMDUwICAgKi8KK3N0cnVjdCBpb19yZWcgUDg4MF9MQ0RfUkVTXzZYNF8xNFgxMFtdID0geworCS8qIDY0MHg0ODAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4NTZ9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgICAgICAgICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc1fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MjR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgICAgICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDVGfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDQ0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg2M30sCisJLyogSUdBMiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4QjR9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCS8qIFZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjQ0LCAweEZGLCAweEM2fSwge1ZJQVNSLCBTUjQ1LCAweEZGLCAweDhDfSwKKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDV9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfNlg0XzE0WDEwIEFSUkFZX1NJWkUoUDg4MF9MQ0RfUkVTXzZYNF8xNFgxMCkKKworc3RydWN0IGlvX3JlZyBQODgwX0xDRF9SRVNfOFg2XzE0WDEwW10gPSB7CisJLyogODAweDYwMCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg1Nn0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAgICAgICAgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4NzV9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgyNH0sCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAgICAgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4N0Z9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4NDR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDgzfSwKKwkvKiBJR0EyIE9mZnNldCAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhCRX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJLyogVkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSNDQsIDB4RkYsIDB4MDZ9LCB7VklBU1IsIFNSNDUsIDB4RkYsIDB4OER9LAorCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwNX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX1A4ODBfTENEX1JFU184WDZfMTRYMTAgQVJSQVlfU0laRShQODgwX0xDRF9SRVNfOFg2XzE0WDEwKQorCisvKiArKysrKysgSzQwMCArKysrKysgKi8KKy8qICAgUGFuZWwgMTYwMHgxMjAwICAgKi8KK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzZYNF8xNlgxMltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDczfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDA4fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4NzN9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4MDB9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHg0MH0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDVBfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDAwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDVFfSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweERBfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ2LCAweEZGLCAweEM0fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDdGfQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF8xNlgxMiBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU182WDRfMTZYMTIpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzdYNF8xNlgxMltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDY3fSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDA4fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4Njd9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4MDB9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHg0MH0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDc0fSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDAwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDc4fSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEY1fSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ2LCAweEZGLCAweDQ2fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDNEfQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzdYNF8xNlgxMiBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU183WDRfMTZYMTIpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzhYNl8xNlgxMltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDY1fSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDA4fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4NjV9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4MDB9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHg0MH0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDdGfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDAwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDgzfSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEUxfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ2LCAweEZGLCAweDg1fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDZGfQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzhYNl8xNlgxMiBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU184WDZfMTZYMTIpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzEwWDdfMTZYMTJbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg2NX0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgwOH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDY1fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDAwfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4NDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHhBQn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgwMH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHhBRn0sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhGMH0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHg0NX0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHg0QX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMFg3XzE2WDEyIEFSUkFZX1NJWkUoSzQwMF9MQ0RfUkVTXzEwWDdfMTZYMTIpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzEyWDEwXzE2WDEyW10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4N0R9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MDh9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg3RH0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgwMH0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDQwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4RDB9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4RDR9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4RkF9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDYsIDB4RkYsIDB4NDd9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4N0N9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTJYMTBfMTZYMTIgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfMTJYMTBfMTZYMTIpCisKKy8qICAgUGFuZWwgMTQwMHgxMDUwICAgKi8KK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzZYNF8xNFgxMFtdID0geworCS8qIDY0MHg0MDAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4NTZ9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgICAgICAgICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc1fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MjR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgICAgICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDVGfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDQ0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg2M30sCisJLyogSUdBMiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4QjR9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCS8qIFZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDA3fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDE5fQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF8xNFgxMCBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU182WDRfMTRYMTApCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzhYNl8xNFgxMFtdID0geworCS8qIDgwMHg2MDAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4NTZ9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgICAgICAgICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc1fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MjR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgICAgICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDdGfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDQ0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg4M30sCisJLyogSUdBMiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4QkV9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCS8qIFZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDA3fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDIxfQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzhYNl8xNFgxMCBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU184WDZfMTRYMTApCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzEwWDdfMTRYMTBbXSA9IHsKKwkvKiAxMDI0eDc2OCAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDU2fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICAgICAgICAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHg3NX0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDI0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICAgICAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHhBM30sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHg0NH0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4QTd9LAorCS8qIElHQTIgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEMzfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDA0fSwKKwkvKiBWQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwNX0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgxRX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMFg3XzE0WDEwIEFSUkFZX1NJWkUoSzQwMF9MQ0RfUkVTXzEwWDdfMTRYMTApCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzEyWDEwXzE0WDEwW10gPSB7CisJLyogMTI4MHg3NjgsIDEyODB4OTYwLCAxMjgweDEwMjQgICAgKi8KKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5N30sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg1Nn0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAgICAgICAgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4OTd9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4NzV9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgyNH0sCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAgICAgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4Q0V9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4NDR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweEQyfSwKKwkvKiBJR0EyIE9mZnNldCAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhDOX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwNH0sCisJLyogVkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4ODR9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4Nzl9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTJYMTBfMTRYMTAgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfMTJYMTBfMTRYMTApCisKKy8qICsrKysrKyBLNDAwICsrKysrKyAqLworLyogICBQYW5lbCAxMzY2eDc2OCAgICovCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU182WDRfMTM2Nlg3W10gPSB7CisJLyogNjQweDQwMCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg0N30sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgzNX0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAgICAgICAgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4NDd9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4MkJ9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgxM30sCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAgICAgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4NjB9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MjN9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDY0fSwKKwkvKiBJR0EyIE9mZnNldCAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHg4Q30sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJLyogVkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4ODd9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4NEN9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfNlg0XzEzNjZYNyBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU182WDRfMTM2Nlg3KQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU183WDRfMTM2Nlg3W10gPSB7CisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4M0J9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MzV9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgICAgICAgICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDNCfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDJCfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MTN9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgICAgICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDcxfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDIzfSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg3NX0sCisJLyogSUdBMiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4OTZ9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCS8qIFZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDA1fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDEwfQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzdYNF8xMzY2WDcgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfN1g0XzEzNjZYNykKKworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfOFg2XzEzNjZYN1tdID0geworCS8qIDgwMHg2MDAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4Mzd9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MzV9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgICAgICAgICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDM3fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDJCfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MTN9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgICAgICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDdFfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDIzfSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg4Mn0sCisJLyogSUdBMiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4OEN9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCS8qIFZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDg0fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweEI5fQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzhYNl8xMzY2WDcgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfOFg2XzEzNjZYNykKKworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfMTBYN18xMzY2WDdbXSA9IHsKKwkvKiAxMDI0eDc2OCAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDU2fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICAgICAgICAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHg3NX0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDI0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICAgICAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHhBM30sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHg0NH0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4QTd9LAorCS8qIElHQTIgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEMzfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDA0fSwKKwkvKiBWQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwNX0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgxRX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMFg3XzEzNjZYNyBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU18xMFg3XzEzNjZYNykKKworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfMTJYMTBfMTM2Nlg3W10gPSB7CisJLyogMTI4MHg3NjgsIDEyODB4OTYwLCAxMjgweDEwMjQgICAgKi8KKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5N30sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg1Nn0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAgICAgICAgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4OTd9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4NzV9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgyNH0sCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAgICAgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4Q0V9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4NDR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweEQyfSwKKwkvKiBJR0EyIE9mZnNldCAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhDOX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwNH0sCisJLyogVkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4ODR9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4Nzl9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTJYMTBfMTM2Nlg3XAorCQkJQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfMTJYMTBfMTM2Nlg3KQorCisvKiArKysrKysgSzQwMCArKysrKysgKi8KKy8qICAgUGFuZWwgMTI4MHgxMDI0ICAgKi8KK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzZYNF8xMlgxMFtdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDQ2fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4NzR9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgxQ30sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDVGfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDM0fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDYzfSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEFBfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ2LCAweEZGLCAweDA3fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDE5fQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF8xMlgxMCBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU182WDRfMTJYMTApCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzdYNF8xMlgxMFtdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDQ2fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4NzR9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgxQ30sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDY4fSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDM0fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDZDfSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEE4fSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ2LCAweEZGLCAweDg3fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweEVEfQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzdYNF8xMlgxMCBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU183WDRfMTJYMTApCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzhYNl8xMlgxMFtdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDQ2fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4NzR9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgxQ30sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDdGfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDM0fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDgzfSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEJFfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ2LCAweEZGLCAweDA3fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDIxfQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzhYNl8xMlgxMCBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU184WDZfMTJYMTApCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzEwWDdfMTJYMTBbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg0Nn0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc0fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MUN9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHhBM30sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgzNH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHhBN30sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhCRX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwNH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwNX0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgxRX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMFg3XzEyWDEwIEFSUkFZX1NJWkUoSzQwMF9MQ0RfUkVTXzEwWDdfMTJYMTApCisKKy8qICsrKysrKyBLNDAwICsrKysrKyAqLworLyogICBQYW5lbCAxMDI0eDc2OCAgICAqLworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfNlg0XzEwWDdbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg0N30sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgzNX0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDQ3fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDJCfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MTN9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg2MH0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgyM30sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg2NH0sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHg4Q30sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHg4N30sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHg0Q30KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTBYNyBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU182WDRfMTBYNykKKworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfN1g0XzEwWDdbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHgzQn0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgzNX0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDNCfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDJCfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MTN9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3MX0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgyM30sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg3NX0sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHg5Nn0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwNX0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgxMH0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU183WDRfMTBYNyBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU183WDRfMTBYNykKKworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfOFg2XzEwWDdbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHgzN30sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgzNX0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDM3fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDJCfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MTN9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3RX0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgyM30sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg4Mn0sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHg4Q30sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHg4NH0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHhCOX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTBYNyBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU184WDZfMTBYNykKKworLyogKysrKysrIEs0MDAgKysrKysrICovCisvKiAgIFBhbmVsIDgwMHg2MDAgICAgICovCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU182WDRfOFg2W10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4MUF9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MzR9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHgxQX0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHhFM30sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDEyfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4NUZ9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MjJ9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4NjN9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4NkV9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDYsIDB4RkYsIDB4ODZ9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4QjN9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfNlg0XzhYNiBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU182WDRfOFg2KQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU183WDRfOFg2W10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4MUZ9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MzR9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHgxRn0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHhFM30sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDEyfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4N0Z9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MjJ9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4ODN9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4Nzh9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDYsIDB4RkYsIDB4QzR9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4NTl9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzhYNiBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU183WDRfOFg2KQorCisjZW5kaWYgLyogX19MQ0RUQkxfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9zaGFyZS5oIGIvZHJpdmVycy92aWRlby92aWEvc2hhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTEyNTRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvc2hhcmUuaApAQCAtMCwwICsxLDExMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19TSEFSRV9IX18KKyNkZWZpbmUgX19TSEFSRV9IX18KKworLyogRGVmaW5lIFJldHVybiBWYWx1ZSAqLworI2RlZmluZSBGQUlMICAgICAgICAtMQorI2RlZmluZSBPSyAgICAgICAgICAxCisKKyNpZm5kZWYgTlVMTAorI2RlZmluZSBOVUxMIDAKKyNlbmRpZgorCisvKiBEZWZpbmUgQml0IEZpZWxkICovCisjZGVmaW5lIEJJVDAgICAgMHgwMQorI2RlZmluZSBCSVQxICAgIDB4MDIKKyNkZWZpbmUgQklUMiAgICAweDA0CisjZGVmaW5lIEJJVDMgICAgMHgwOAorI2RlZmluZSBCSVQ0ICAgIDB4MTAKKyNkZWZpbmUgQklUNSAgICAweDIwCisjZGVmaW5lIEJJVDYgICAgMHg0MAorI2RlZmluZSBCSVQ3ICAgIDB4ODAKKworLyogVmlkZW8gTWVtb3J5IFNpemUgKi8KKyNkZWZpbmUgVklERU9fTUVNT1JZX1NJWkVfMTZNICAgIDB4MTAwMDAwMAorCisvKiBEZWZpbml0aW9uIE1vZGUgSW5kZXgKKyovCisjZGVmaW5lICAgICBWSUFfUkVTXzY0MFg0ODAgICAgICAgICAgICAgICAgIAkwCisjZGVmaW5lICAgICBWSUFfUkVTXzgwMFg2MDAgICAgICAgICAgICAgICAgIAkxCisjZGVmaW5lICAgICBWSUFfUkVTXzEwMjRYNzY4ICAgICAgICAgICAgICAgIAkyCisjZGVmaW5lICAgICBWSUFfUkVTXzExNTJYODY0ICAgICAgICAgICAgICAgIAkzCisjZGVmaW5lICAgICBWSUFfUkVTXzEyODBYMTAyNCAgICAgICAgICAgICAgIAk0CisjZGVmaW5lICAgICBWSUFfUkVTXzE2MDBYMTIwMCAgICAgICAgICAgICAgIAk1CisjZGVmaW5lICAgICBWSUFfUkVTXzE0NDBYMTA1MCAgICAgICAgICAgICAgIAk2CisjZGVmaW5lICAgICBWSUFfUkVTXzEyODBYNzY4ICAgICAgICAgICAgICAgIAk3CisjZGVmaW5lICAgICBWSUFfUkVTXzEyODBYOTYwICAgICAgICAgICAgICAgIAk4CisjZGVmaW5lICAgICBWSUFfUkVTXzE5MjBYMTQ0MCAgICAgICAgICAgICAgIAk5CisjZGVmaW5lICAgICBWSUFfUkVTXzg0OFg0ODAgICAgICAgICAgICAgICAgIAkxMAorI2RlZmluZSAgICAgVklBX1JFU18xNDAwWDEwNTAgICAgICAgICAgICAgICAJMTEKKyNkZWZpbmUgICAgIFZJQV9SRVNfNzIwWDQ4MCAgICAgICAgICAgICAgICAgCTEyCisjZGVmaW5lICAgICBWSUFfUkVTXzcyMFg1NzYgICAgICAgICAgICAgICAgIAkxMworI2RlZmluZSAgICAgVklBX1JFU18xMDI0WDUxMiAgICAgICAgICAgICAgICAJMTQKKyNkZWZpbmUgICAgIFZJQV9SRVNfODU2WDQ4MCAgICAgICAgICAgICAgICAgCTE1CisjZGVmaW5lICAgICBWSUFfUkVTXzEwMjRYNTc2ICAgICAgICAgICAgICAgIAkxNgorI2RlZmluZSAgICAgVklBX1JFU182NDBYNDAwICAgICAgICAgICAgICAgICAJMTcKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTI4MFg3MjAgICAgICAgICAgICAgICAgCTE4CisjZGVmaW5lICAgICBWSUFfUkVTXzE5MjBYMTA4MCAgICAgICAgICAgICAgIAkxOQorI2RlZmluZSAgICAgVklBX1JFU184MDBYNDgwICAgICAgICAgICAgICAgICAJMjAKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTM2OFg3NjggICAgICAgICAgICAgICAgCTIxCisjZGVmaW5lICAgICBWSUFfUkVTXzEwMjRYNjAwICAgICAgICAgICAgICAgIAkyMgorI2RlZmluZSAgICAgVklBX1JFU18xMjgwWDgwMCAgICAgICAgICAgICAgICAJMjMKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTY4MFgxMDUwICAgICAgICAgICAgICAgCTI0CisjZGVmaW5lICAgICBWSUFfUkVTXzk2MFg2MDAJCQkyNQorI2RlZmluZSAgICAgVklBX1JFU18xMDAwWDYwMCAgICAgICAgICAgICAgIAkyNgorI2RlZmluZSAgICAgVklBX1JFU18xMDg4WDYxMiAgICAgICAgICAgICAgIAkyNworI2RlZmluZSAgICAgVklBX1JFU18xMTUyWDcyMCAgICAgICAgICAgICAgIAkyOAorI2RlZmluZSAgICAgVklBX1JFU18xMjAwWDcyMCAgICAgICAgICAgICAgIAkyOQorI2RlZmluZSAgICAgVklBX1JFU18xMjgwWDYwMCAgICAgICAgICAgICAgIAkzMAorI2RlZmluZSAgICAgVklBX1JFU18xMzYwWDc2OCAgICAgICAgICAgICAgIAkzMQorI2RlZmluZSAgICAgVklBX1JFU18xMzY2WDc2OCAgICAgICAgICAgICAgIAkzMgorI2RlZmluZSAgICAgVklBX1JFU18xNDQwWDkwMCAgICAgICAgICAgICAgIAkzMworI2RlZmluZSAgICAgVklBX1JFU18xNjAwWDkwMCAgICAgICAgICAgICAgIAkzNAorI2RlZmluZSAgICAgVklBX1JFU18xNjAwWDEwMjQgICAgICAgICAgICAgIAkzNQorI2RlZmluZSAgICAgVklBX1JFU18xNzkyWDEzNDQgICAgICAgICAgICAgIAkzNgorI2RlZmluZSAgICAgVklBX1JFU18xODU2WDEzOTIgICAgICAgICAgICAgIAkzNworI2RlZmluZSAgICAgVklBX1JFU18xOTIwWDEyMDAgICAgICAgICAgICAgIAkzOAorI2RlZmluZSAgICAgVklBX1JFU18yMDQ4WDE1MzYgICAgICAgICAgICAgIAkzOQorI2RlZmluZSAgICAgVklBX1JFU180ODBYNjQwICAgICAgICAgICAgICAgICAgCTQwCisKKy8qUmVkdWNlIEJsYW5raW5nKi8KKyNkZWZpbmUgICAgIFZJQV9SRVNfMTM2MFg3NjhfUkIgICAgICAgICAgCTEzMQorI2RlZmluZSAgICAgVklBX1JFU18xNDQwWDkwMF9SQiAgICAgICAgICAJMTMzCisjZGVmaW5lICAgICBWSUFfUkVTXzE0MDBYMTA1MF9SQiAgICAgICAgCTExMQorI2RlZmluZSAgICAgVklBX1JFU18xNjAwWDkwMF9SQiAgICAgICAgICAJMTM0CisjZGVmaW5lICAgICBWSUFfUkVTXzE2ODBYMTA1MF9SQiAgICAgICAgCTEyNAorI2RlZmluZSAgICAgVklBX1JFU18xOTIwWDEwODBfUkIgICAgICAgIAkxMTkKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTkyMFgxMjAwX1JCICAgICAgICAJMTM4CisKKyNkZWZpbmUgICAgIFZJQV9SRVNfSU5WQUxJRCAgICAgICAgICAgICAgICAgCTI1NQorCisvKiBzdGFuZGFyZCBWR0EgSU8gcG9ydAorKi8KKyNkZWZpbmUgVklBUk1pc2MgICAgMHgzQ0MKKyNkZWZpbmUgVklBV01pc2MgICAgMHgzQzIKKyNkZWZpbmUgVklBU3RhdHVzICAgMHgzREEKKyNkZWZpbmUgVklBQ1IgICAgICAgMHgzRDQKKyNkZWZpbmUgVklBU1IgICAgICAgMHgzQzQKKyNkZWZpbmUgVklBR1IgICAgICAgMHgzQ0UKKyNkZWZpbmUgVklBQVIgICAgICAgMHgzQzAKKworI2RlZmluZSBTdGRDUiAgICAgICAweDE5CisjZGVmaW5lIFN0ZFNSICAgICAgIDB4MDQKKyNkZWZpbmUgU3RkR1IgICAgICAgMHgwOQorI2RlZmluZSBTdGRBUiAgICAgICAweDE0CisKKyNkZWZpbmUgUGF0Y2hDUiAgICAgMTEKKworLyogRGlzcGxheSBwYXRoICovCisjZGVmaW5lIElHQTEgICAgICAgIDEKKyNkZWZpbmUgSUdBMiAgICAgICAgMgorI2RlZmluZSBJR0ExX0lHQTIgICAzCisKKy8qIERlZmluZSBDb2xvciBEZXB0aCAgKi8KKyNkZWZpbmUgTU9ERV84QlBQICAgICAgIDEKKyNkZWZpbmUgTU9ERV8xNkJQUCAgICAgIDIKKyNkZWZpbmUgTU9ERV8zMkJQUCAgICAgIDQKKworI2RlZmluZSBHUjIwICAgIDB4MjAKKyNkZWZpbmUgR1IyMSAgICAweDIxCisjZGVmaW5lIEdSMjIgICAgMHgyMgorCisvKiBTZXF1ZW5jZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNSMDEgICAgMHgwMQorI2RlZmluZSBTUjEwICAgIDB4MTAKKyNkZWZpbmUgU1IxMiAgICAweDEyCisjZGVmaW5lIFNSMTUgICAgMHgxNQorI2RlZmluZSBTUjE2ICAgIDB4MTYKKyNkZWZpbmUgU1IxNyAgICAweDE3CisjZGVmaW5lIFNSMTggICAgMHgxOAorI2RlZmluZSBTUjFCICAgIDB4MUIKKyNkZWZpbmUgU1IxQSAgICAweDFBCisjZGVmaW5lIFNSMUMgICAgMHgxQworI2RlZmluZSBTUjFEICAgIDB4MUQKKyNkZWZpbmUgU1IxRSAgICAweDFFCisjZGVmaW5lIFNSMUYgICAgMHgxRgorI2RlZmluZSBTUjIwICAgIDB4MjAKKyNkZWZpbmUgU1IyMSAgICAweDIxCisjZGVmaW5lIFNSMjIgICAgMHgyMgorI2RlZmluZSBTUjJBICAgIDB4MkEKKyNkZWZpbmUgU1IyRCAgICAweDJECisjZGVmaW5lIFNSMkUgICAgMHgyRQorCisjZGVmaW5lIFNSMzAgICAgMHgzMAorI2RlZmluZSBTUjM5ICAgIDB4MzkKKyNkZWZpbmUgU1IzRCAgICAweDNECisjZGVmaW5lIFNSM0UgICAgMHgzRQorI2RlZmluZSBTUjNGICAgIDB4M0YKKyNkZWZpbmUgU1I0MCAgICAweDQwCisjZGVmaW5lIFNSNDMgICAgMHg0MworI2RlZmluZSBTUjQ0ICAgIDB4NDQKKyNkZWZpbmUgU1I0NSAgICAweDQ1CisjZGVmaW5lIFNSNDYgICAgMHg0NgorI2RlZmluZSBTUjQ3ICAgIDB4NDcKKyNkZWZpbmUgU1I0OCAgICAweDQ4CisjZGVmaW5lIFNSNDkgICAgMHg0OQorI2RlZmluZSBTUjRBICAgIDB4NEEKKyNkZWZpbmUgU1I0QiAgICAweDRCCisjZGVmaW5lIFNSNEMgICAgMHg0QworI2RlZmluZSBTUjUyICAgIDB4NTIKKyNkZWZpbmUgU1I1RSAgICAweDVFCisjZGVmaW5lIFNSNjUgICAgMHg2NQorCisvKiBDUlQgQ29udHJvbGxlciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ1IwMCAgICAweDAwCisjZGVmaW5lIENSMDEgICAgMHgwMQorI2RlZmluZSBDUjAyICAgIDB4MDIKKyNkZWZpbmUgQ1IwMyAgICAweDAzCisjZGVmaW5lIENSMDQgICAgMHgwNAorI2RlZmluZSBDUjA1ICAgIDB4MDUKKyNkZWZpbmUgQ1IwNiAgICAweDA2CisjZGVmaW5lIENSMDcgICAgMHgwNworI2RlZmluZSBDUjA4ICAgIDB4MDgKKyNkZWZpbmUgQ1IwOSAgICAweDA5CisjZGVmaW5lIENSMEEgICAgMHgwQQorI2RlZmluZSBDUjBCICAgIDB4MEIKKyNkZWZpbmUgQ1IwQyAgICAweDBDCisjZGVmaW5lIENSMEQgICAgMHgwRAorI2RlZmluZSBDUjBFICAgIDB4MEUKKyNkZWZpbmUgQ1IwRiAgICAweDBGCisjZGVmaW5lIENSMTAgICAgMHgxMAorI2RlZmluZSBDUjExICAgIDB4MTEKKyNkZWZpbmUgQ1IxMiAgICAweDEyCisjZGVmaW5lIENSMTMgICAgMHgxMworI2RlZmluZSBDUjE0ICAgIDB4MTQKKyNkZWZpbmUgQ1IxNSAgICAweDE1CisjZGVmaW5lIENSMTYgICAgMHgxNgorI2RlZmluZSBDUjE3ICAgIDB4MTcKKyNkZWZpbmUgQ1IxOCAgICAweDE4CisKKy8qIEV4dGVuZCBDUlQgQ29udHJvbGxlciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ1IzMCAgICAweDMwCisjZGVmaW5lIENSMzEgICAgMHgzMQorI2RlZmluZSBDUjMyICAgIDB4MzIKKyNkZWZpbmUgQ1IzMyAgICAweDMzCisjZGVmaW5lIENSMzQgICAgMHgzNAorI2RlZmluZSBDUjM1ICAgIDB4MzUKKyNkZWZpbmUgQ1IzNiAgICAweDM2CisjZGVmaW5lIENSMzcgICAgMHgzNworI2RlZmluZSBDUjM4ICAgIDB4MzgKKyNkZWZpbmUgQ1IzOSAgICAweDM5CisjZGVmaW5lIENSM0EgICAgMHgzQQorI2RlZmluZSBDUjNCICAgIDB4M0IKKyNkZWZpbmUgQ1IzQyAgICAweDNDCisjZGVmaW5lIENSM0QgICAgMHgzRAorI2RlZmluZSBDUjNFICAgIDB4M0UKKyNkZWZpbmUgQ1IzRiAgICAweDNGCisjZGVmaW5lIENSNDAgICAgMHg0MAorI2RlZmluZSBDUjQxICAgIDB4NDEKKyNkZWZpbmUgQ1I0MiAgICAweDQyCisjZGVmaW5lIENSNDMgICAgMHg0MworI2RlZmluZSBDUjQ0ICAgIDB4NDQKKyNkZWZpbmUgQ1I0NSAgICAweDQ1CisjZGVmaW5lIENSNDYgICAgMHg0NgorI2RlZmluZSBDUjQ3ICAgIDB4NDcKKyNkZWZpbmUgQ1I0OCAgICAweDQ4CisjZGVmaW5lIENSNDkgICAgMHg0OQorI2RlZmluZSBDUjRBICAgIDB4NEEKKyNkZWZpbmUgQ1I0QiAgICAweDRCCisjZGVmaW5lIENSNEMgICAgMHg0QworI2RlZmluZSBDUjREICAgIDB4NEQKKyNkZWZpbmUgQ1I0RSAgICAweDRFCisjZGVmaW5lIENSNEYgICAgMHg0RgorI2RlZmluZSBDUjUwICAgIDB4NTAKKyNkZWZpbmUgQ1I1MSAgICAweDUxCisjZGVmaW5lIENSNTIgICAgMHg1MgorI2RlZmluZSBDUjUzICAgIDB4NTMKKyNkZWZpbmUgQ1I1NCAgICAweDU0CisjZGVmaW5lIENSNTUgICAgMHg1NQorI2RlZmluZSBDUjU2ICAgIDB4NTYKKyNkZWZpbmUgQ1I1NyAgICAweDU3CisjZGVmaW5lIENSNTggICAgMHg1OAorI2RlZmluZSBDUjU5ICAgIDB4NTkKKyNkZWZpbmUgQ1I1QSAgICAweDVBCisjZGVmaW5lIENSNUIgICAgMHg1QgorI2RlZmluZSBDUjVDICAgIDB4NUMKKyNkZWZpbmUgQ1I1RCAgICAweDVECisjZGVmaW5lIENSNUUgICAgMHg1RQorI2RlZmluZSBDUjVGICAgIDB4NUYKKyNkZWZpbmUgQ1I2MCAgICAweDYwCisjZGVmaW5lIENSNjEgICAgMHg2MQorI2RlZmluZSBDUjYyICAgIDB4NjIKKyNkZWZpbmUgQ1I2MyAgICAweDYzCisjZGVmaW5lIENSNjQgICAgMHg2NAorI2RlZmluZSBDUjY1ICAgIDB4NjUKKyNkZWZpbmUgQ1I2NiAgICAweDY2CisjZGVmaW5lIENSNjcgICAgMHg2NworI2RlZmluZSBDUjY4ICAgIDB4NjgKKyNkZWZpbmUgQ1I2OSAgICAweDY5CisjZGVmaW5lIENSNkEgICAgMHg2QQorI2RlZmluZSBDUjZCICAgIDB4NkIKKyNkZWZpbmUgQ1I2QyAgICAweDZDCisjZGVmaW5lIENSNkQgICAgMHg2RAorI2RlZmluZSBDUjZFICAgIDB4NkUKKyNkZWZpbmUgQ1I2RiAgICAweDZGCisjZGVmaW5lIENSNzAgICAgMHg3MAorI2RlZmluZSBDUjcxICAgIDB4NzEKKyNkZWZpbmUgQ1I3MiAgICAweDcyCisjZGVmaW5lIENSNzMgICAgMHg3MworI2RlZmluZSBDUjc0ICAgIDB4NzQKKyNkZWZpbmUgQ1I3NSAgICAweDc1CisjZGVmaW5lIENSNzYgICAgMHg3NgorI2RlZmluZSBDUjc3ICAgIDB4NzcKKyNkZWZpbmUgQ1I3OCAgICAweDc4CisjZGVmaW5lIENSNzkgICAgMHg3OQorI2RlZmluZSBDUjdBICAgIDB4N0EKKyNkZWZpbmUgQ1I3QiAgICAweDdCCisjZGVmaW5lIENSN0MgICAgMHg3QworI2RlZmluZSBDUjdEICAgIDB4N0QKKyNkZWZpbmUgQ1I3RSAgICAweDdFCisjZGVmaW5lIENSN0YgICAgMHg3RgorI2RlZmluZSBDUjgwICAgIDB4ODAKKyNkZWZpbmUgQ1I4MSAgICAweDgxCisjZGVmaW5lIENSODIgICAgMHg4MgorI2RlZmluZSBDUjgzICAgIDB4ODMKKyNkZWZpbmUgQ1I4NCAgICAweDg0CisjZGVmaW5lIENSODUgICAgMHg4NQorI2RlZmluZSBDUjg2ICAgIDB4ODYKKyNkZWZpbmUgQ1I4NyAgICAweDg3CisjZGVmaW5lIENSODggICAgMHg4OAorI2RlZmluZSBDUjg5ICAgIDB4ODkKKyNkZWZpbmUgQ1I4QSAgICAweDhBCisjZGVmaW5lIENSOEIgICAgMHg4QgorI2RlZmluZSBDUjhDICAgIDB4OEMKKyNkZWZpbmUgQ1I4RCAgICAweDhECisjZGVmaW5lIENSOEUgICAgMHg4RQorI2RlZmluZSBDUjhGICAgIDB4OEYKKyNkZWZpbmUgQ1I5MCAgICAweDkwCisjZGVmaW5lIENSOTEgICAgMHg5MQorI2RlZmluZSBDUjkyICAgIDB4OTIKKyNkZWZpbmUgQ1I5MyAgICAweDkzCisjZGVmaW5lIENSOTQgICAgMHg5NAorI2RlZmluZSBDUjk1ICAgIDB4OTUKKyNkZWZpbmUgQ1I5NiAgICAweDk2CisjZGVmaW5lIENSOTcgICAgMHg5NworI2RlZmluZSBDUjk4ICAgIDB4OTgKKyNkZWZpbmUgQ1I5OSAgICAweDk5CisjZGVmaW5lIENSOUEgICAgMHg5QQorI2RlZmluZSBDUjlCICAgIDB4OUIKKyNkZWZpbmUgQ1I5QyAgICAweDlDCisjZGVmaW5lIENSOUQgICAgMHg5RAorI2RlZmluZSBDUjlFICAgIDB4OUUKKyNkZWZpbmUgQ1I5RiAgICAweDlGCisjZGVmaW5lIENSQTAgICAgMHhBMAorI2RlZmluZSBDUkExICAgIDB4QTEKKyNkZWZpbmUgQ1JBMiAgICAweEEyCisjZGVmaW5lIENSQTMgICAgMHhBMworI2RlZmluZSBDUkQyICAgIDB4RDIKKyNkZWZpbmUgQ1JEMyAgICAweEQzCisjZGVmaW5lIENSRDQgICAgMHhENAorCisvKiBMVVQgVGFibGUqLworI2RlZmluZSBMVVRfREFUQSAgICAgICAgICAgICAweDNDOQkvKiBEQUNEQVRBICovCisjZGVmaW5lIExVVF9JTkRFWF9SRUFEICAgICAgIDB4M0M3CS8qIERBQ1JYICovCisjZGVmaW5lIExVVF9JTkRFWF9XUklURSAgICAgIDB4M0M4CS8qIERBQ1dYICovCisjZGVmaW5lIERBQ01BU0sgICAgICAgICAgICAgIDB4M0M2CisKKy8qIERlZmluaXRpb24gRGV2aWNlICovCisjZGVmaW5lIERFVklDRV9DUlQgIDB4MDEKKyNkZWZpbmUgREVWSUNFX0RWSSAgMHgwMworI2RlZmluZSBERVZJQ0VfTENEICAweDA0CisKKy8qIERldmljZSBvdXRwdXQgaW50ZXJmYWNlICovCisjZGVmaW5lIElOVEVSRkFDRV9OT05FICAgICAgICAgIDB4MDAKKyNkZWZpbmUgSU5URVJGQUNFX0FOQUxPR19SR0IgICAgMHgwMQorI2RlZmluZSBJTlRFUkZBQ0VfRFZQMCAgICAgICAgICAweDAyCisjZGVmaW5lIElOVEVSRkFDRV9EVlAxICAgICAgICAgIDB4MDMKKyNkZWZpbmUgSU5URVJGQUNFX0RGUF9ISUdIICAgICAgMHgwNAorI2RlZmluZSBJTlRFUkZBQ0VfREZQX0xPVyAgICAgICAweDA1CisjZGVmaW5lIElOVEVSRkFDRV9ERlAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgSU5URVJGQUNFX0xWRFMwICAgICAgICAgMHgwNworI2RlZmluZSBJTlRFUkZBQ0VfTFZEUzEgICAgICAgICAweDA4CisjZGVmaW5lIElOVEVSRkFDRV9MVkRTMExWRFMxICAgIDB4MDkKKyNkZWZpbmUgSU5URVJGQUNFX1RNRFMgICAgICAgICAgMHgwQQorCisjZGVmaW5lIEhXX0xBWU9VVF9MQ0RfT05MWSAgICAgIDB4MDEKKyNkZWZpbmUgSFdfTEFZT1VUX0RWSV9PTkxZICAgICAgMHgwMgorI2RlZmluZSBIV19MQVlPVVRfTENEX0RWSSAgICAgICAweDAzCisjZGVmaW5lIEhXX0xBWU9VVF9MQ0QxX0xDRDIgICAgIDB4MDQKKyNkZWZpbmUgSFdfTEFZT1VUX0xDRF9FWFRFUk5BTF9MQ0QyIDB4MTAKKworLyogRGVmaW5pdGlvbiBSZWZyZXNoIFJhdGUgKi8KKyNkZWZpbmUgUkVGUkVTSF81MCAgICAgIDUwCisjZGVmaW5lIFJFRlJFU0hfNjAgICAgICA2MAorI2RlZmluZSBSRUZSRVNIXzc1ICAgICAgNzUKKyNkZWZpbmUgUkVGUkVTSF84NSAgICAgIDg1CisjZGVmaW5lIFJFRlJFU0hfMTAwICAgICAxMDAKKyNkZWZpbmUgUkVGUkVTSF8xMjAgICAgIDEyMAorCisvKiBEZWZpbml0aW9uIFN5bmMgUG9sYXJpdHkqLworI2RlZmluZSBORUdBVElWRSAgICAgICAgMQorI2RlZmluZSBQT1NJVElWRSAgICAgICAgMAorCisvKjQ4MHg2NDBANjAgU3luYyBQb2xhcml0eSAoR1RGKQorKi8KKyNkZWZpbmUgTTQ4MFg2NDBfUjYwX0hTUCAgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTQ4MFg2NDBfUjYwX1ZTUCAgICAgICAgUE9TSVRJVkUKKworLyo2NDB4NDgwQDYwIFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE02NDBYNDgwX1I2MF9IU1AgICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE02NDBYNDgwX1I2MF9WU1AgICAgICAgIE5FR0FUSVZFCisKKy8qNjQweDQ4MEA3NSBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNNjQwWDQ4MF9SNzVfSFNQICAgICAgICBORUdBVElWRQorI2RlZmluZSBNNjQwWDQ4MF9SNzVfVlNQICAgICAgICBORUdBVElWRQorCisvKjY0MHg0ODBAODUgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKQorKi8KKyNkZWZpbmUgTTY0MFg0ODBfUjg1X0hTUCAgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTY0MFg0ODBfUjg1X1ZTUCAgICAgICAgTkVHQVRJVkUKKworLyo2NDB4NDgwQDEwMCBTeW5jIFBvbGFyaXR5IChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE02NDBYNDgwX1IxMDBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE02NDBYNDgwX1IxMDBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qNjQweDQ4MEAxMjAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpCisqLworI2RlZmluZSBNNjQwWDQ4MF9SMTIwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNNjQwWDQ4MF9SMTIwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjcyMHg0ODBANjAgU3luYyBQb2xhcml0eSAgKEdURiBNb2RlKQorKi8KKyNkZWZpbmUgTTcyMFg0ODBfUjYwX0hTUCAgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTcyMFg0ODBfUjYwX1ZTUCAgICAgICAgUE9TSVRJVkUKKworLyo3MjB4NTc2QDYwIFN5bmMgUG9sYXJpdHkgIChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE03MjBYNTc2X1I2MF9IU1AgICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE03MjBYNTc2X1I2MF9WU1AgICAgICAgIFBPU0lUSVZFCisKKy8qODAweDYwMEA2MCBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNODAwWDYwMF9SNjBfSFNQICAgICAgICBQT1NJVElWRQorI2RlZmluZSBNODAwWDYwMF9SNjBfVlNQICAgICAgICBQT1NJVElWRQorCisvKjgwMHg2MDBANzUgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKQorKi8KKyNkZWZpbmUgTTgwMFg2MDBfUjc1X0hTUCAgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTgwMFg2MDBfUjc1X1ZTUCAgICAgICAgUE9TSVRJVkUKKworLyo4MDB4NjAwQDg1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE04MDBYNjAwX1I4NV9IU1AgICAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE04MDBYNjAwX1I4NV9WU1AgICAgICAgIFBPU0lUSVZFCisKKy8qODAweDYwMEAxMDAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpCisqLworI2RlZmluZSBNODAwWDYwMF9SMTAwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNODAwWDYwMF9SMTAwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjgwMHg2MDBAMTIwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKQorKi8KKyNkZWZpbmUgTTgwMFg2MDBfUjEyMF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTgwMFg2MDBfUjEyMF9WU1AgICAgICAgUE9TSVRJVkUKKworLyo4MDB4NDgwQDYwIFN5bmMgUG9sYXJpdHkgIChDVlQgTW9kZSkKKyovCisjZGVmaW5lIE04MDBYNDgwX1I2MF9IU1AgICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE04MDBYNDgwX1I2MF9WU1AgICAgICAgIFBPU0lUSVZFCisKKy8qODQ4eDQ4MEA2MCBTeW5jIFBvbGFyaXR5ICAoQ1ZUIE1vZGUpCisqLworI2RlZmluZSBNODQ4WDQ4MF9SNjBfSFNQICAgICAgICBORUdBVElWRQorI2RlZmluZSBNODQ4WDQ4MF9SNjBfVlNQICAgICAgICBQT1NJVElWRQorCisvKjg1Mng0ODBANjAgU3luYyBQb2xhcml0eSAgKEdURiBNb2RlKQorKi8KKyNkZWZpbmUgTTg1Mlg0ODBfUjYwX0hTUCAgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTg1Mlg0ODBfUjYwX1ZTUCAgICAgICAgUE9TSVRJVkUKKworLyoxMDI0eDUxMkA2MCBTeW5jIFBvbGFyaXR5IChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE0xMDI0WDUxMl9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMDI0WDUxMl9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qMTAyNHg2MDBANjAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpCisqLworI2RlZmluZSBNMTAyNFg2MDBfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTAyNFg2MDBfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjEwMjR4NzY4QDYwIFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xMDI0WDc2OF9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMDI0WDc2OF9SNjBfVlNQICAgICAgIE5FR0FUSVZFCisKKy8qMTAyNHg3NjhANzUgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKQorKi8KKyNkZWZpbmUgTTEwMjRYNzY4X1I3NV9IU1AgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTEwMjRYNzY4X1I3NV9WU1AgICAgICAgUE9TSVRJVkUKKworLyoxMDI0eDc2OEA4NSBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTAyNFg3NjhfUjg1X0hTUCAgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTAyNFg3NjhfUjg1X1ZTUCAgICAgICBQT1NJVElWRQorCisvKjEwMjR4NzY4QDEwMCBTeW5jIFBvbGFyaXR5IChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE0xMDI0WDc2OF9SMTAwX0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMDI0WDc2OF9SMTAwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qMTE1Mng4NjRANzUgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKQorKi8KKyNkZWZpbmUgTTExNTJYODY0X1I3NV9IU1AgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTExNTJYODY0X1I3NV9WU1AgICAgICAgUE9TSVRJVkUKKworLyoxMjgweDcyMEA2MCBTeW5jIFBvbGFyaXR5ICAoR1RGIE1vZGUpCisqLworI2RlZmluZSBNMTI4MFg3MjBfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTI4MFg3MjBfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKiAxMjgweDc2OEA1MCBTeW5jIFBvbGFyaXR5ICAoR1RGIE1vZGUpICovCisjZGVmaW5lIE0xMjgwWDc2OF9SNTBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMjgwWDc2OF9SNTBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qMTI4MHg3NjhANjAgU3luYyBQb2xhcml0eSAgKEdURiBNb2RlKQorKi8KKyNkZWZpbmUgTTEyODBYNzY4X1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTEyODBYNzY4X1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyoxMjgweDgwMEA2MCBTeW5jIFBvbGFyaXR5ICAoQ1ZUIE1vZGUpCisqLworI2RlZmluZSBNMTI4MFg4MDBfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTI4MFg4MDBfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjEyODB4OTYwQDYwIFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xMjgwWDk2MF9SNjBfSFNQICAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xMjgwWDk2MF9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qMTI4MHgxMDI0QDYwIFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xMjgwWDEwMjRfUjYwX0hTUCAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xMjgwWDEwMjRfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qIDEzNjB4NzY4QDYwIFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLworI2RlZmluZSBNMTM2MFg3NjhfUjYwX0hTUCAgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTM2MFg3NjhfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKiAxMzYweDc2OEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgUmVkdWNlIEJsYW5raW5nIE1vZGUpICovCisjZGVmaW5lIE0xMzYwWDc2OF9SQl9SNjBfSFNQICAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xMzYwWDc2OF9SQl9SNjBfVlNQICAgICAgIE5FR0FUSVZFCisKKy8qIDEzNjh4NzY4QDUwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKSAqLworI2RlZmluZSBNMTM2OFg3NjhfUjUwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTM2OFg3NjhfUjUwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKiAxMzY4eDc2OEA2MCBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpICovCisjZGVmaW5lIE0xMzY4WDc2OF9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMzY4WDc2OF9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qMTI4MHgxMDI0QDc1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xMjgwWDEwMjRfUjc1X0hTUCAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xMjgwWDEwMjRfUjc1X1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qMTI4MHgxMDI0QDg1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xMjgwWDEwMjRfUjg1X0hTUCAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xMjgwWDEwMjRfUjg1X1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qMTQ0MHgxMDUwQDYwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKQorKi8KKyNkZWZpbmUgTTE0NDBYMTA1MF9SNjBfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE0NDBYMTA1MF9SNjBfVlNQICAgICAgUE9TSVRJVkUKKworLyoxNjAweDEyMDBANjAgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKQorKi8KKyNkZWZpbmUgTTE2MDBYMTIwMF9SNjBfSFNQICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTE2MDBYMTIwMF9SNjBfVlNQICAgICAgUE9TSVRJVkUKKworLyoxNjAweDEyMDBANzUgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKQorKi8KKyNkZWZpbmUgTTE2MDBYMTIwMF9SNzVfSFNQICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTE2MDBYMTIwMF9SNzVfVlNQICAgICAgUE9TSVRJVkUKKworLyogMTY4MHgxMDUwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLworI2RlZmluZSBNMTY4MHgxMDUwX1I2MF9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTY4MHgxMDUwX1I2MF9WU1AgICAgICBORUdBVElWRQorCisvKiAxNjgweDEwNTBANjAgU3luYyBQb2xhcml0eSAoQ1ZUIFJlZHVjZSBCbGFua2luZyBNb2RlKSAqLworI2RlZmluZSBNMTY4MHgxMDUwX1JCX1I2MF9IU1AgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTY4MHgxMDUwX1JCX1I2MF9WU1AgICAgICBORUdBVElWRQorCisvKiAxNjgweDEwNTBANzUgU3luYyBQb2xhcml0eSAoQ1ZUIE1vZGUpICovCisjZGVmaW5lIE0xNjgweDEwNTBfUjc1X0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xNjgweDEwNTBfUjc1X1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qMTkyMHgxMDgwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKQorKi8KKyNkZWZpbmUgTTE5MjBYMTA4MF9SNjBfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE5MjBYMTA4MF9SNjBfVlNQICAgICAgUE9TSVRJVkUKKworLyogMTkyMHgxMDgwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBSZWR1Y2UgQmxhbmtpbmcgTW9kZSkgKi8KKyNkZWZpbmUgTTE5MjBYMTA4MF9SQl9SNjBfSFNQICBQT1NJVElWRQorI2RlZmluZSBNMTkyMFgxMDgwX1JCX1I2MF9WU1AgIE5FR0FUSVZFCisKKy8qMTkyMHgxNDQwQDYwIFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xOTIwWDE0NDBfUjYwX0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xOTIwWDE0NDBfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qMTkyMHgxNDQwQDc1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xOTIwWDE0NDBfUjc1X0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xOTIwWDE0NDBfUjc1X1ZTUCAgICAgIFBPU0lUSVZFCisKKyNpZiAwCisvKiAxNDAweDEwNTBANjAgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKSAqLworI2RlZmluZSBNMTQwMFgxMDUwX1I2MF9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTQwMFgxMDUwX1I2MF9WU1AgICAgICBORUdBVElWRQorI2VuZGlmCisKKy8qIDE0MDB4MTA1MEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTE0MDBYMTA1MF9SNjBfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE0MDBYMTA1MF9SNjBfVlNQICAgICAgUE9TSVRJVkUKKworLyogMTQwMHgxMDUwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBSZWR1Y2UgQmxhbmtpbmcgTW9kZSkgKi8KKyNkZWZpbmUgTTE0MDBYMTA1MF9SQl9SNjBfSFNQICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTE0MDBYMTA1MF9SQl9SNjBfVlNQICAgICAgTkVHQVRJVkUKKworLyogMTQwMHgxMDUwQDc1IFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLworI2RlZmluZSBNMTQwMFgxMDUwX1I3NV9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTQwMFgxMDUwX1I3NV9WU1AgICAgICBQT1NJVElWRQorCisvKiA5NjB4NjAwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLworI2RlZmluZSBNOTYwWDYwMF9SNjBfSFNQICAgICAgICBORUdBVElWRQorI2RlZmluZSBNOTYwWDYwMF9SNjBfVlNQICAgICAgICBQT1NJVElWRQorCisvKiAxMDAweDYwMEA2MCBTeW5jIFBvbGFyaXR5IChHVEYgTW9kZSkgKi8KKyNkZWZpbmUgTTEwMDBYNjAwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTEwMDBYNjAwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTAyNHg1NzZANjAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpICovCisjZGVmaW5lIE0xMDI0WDU3Nl9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMDI0WDU3Nl9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qMTAyNHg2MDBANjAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpKi8KKyNkZWZpbmUgTTEwMjRYNjAwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTEwMjRYNjAwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTA4OHg2MTJANjAgU3luYyBQb2xhcml0eSAoQ1ZUIE1vZGUpICovCisjZGVmaW5lIE0xMDg4WDYxMl9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMDg4WDYxMl9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDExNTJ4NzIwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLworI2RlZmluZSBNMTE1Mlg3MjBfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTE1Mlg3MjBfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKiAxMjAweDcyMEA2MCBTeW5jIFBvbGFyaXR5IChHVEYgTW9kZSkgKi8KKyNkZWZpbmUgTTEyMDBYNzIwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTEyMDBYNzIwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTI4MHg2MDBANjAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpICovCisjZGVmaW5lIE0xMjgweDYwMF9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMjgweDYwMF9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDEyODB4NzIwQDUwIFN5bmMgUG9sYXJpdHkgIChHVEYgTW9kZSkgKi8KKyNkZWZpbmUgTTEyODBYNzIwX1I1MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTEyODBYNzIwX1I1MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTI4MHg3MjBANjAgU3luYyBQb2xhcml0eSAgKENFQSBNb2RlKSAqLworI2RlZmluZSBNMTI4MFg3MjBfQ0VBX1I2MF9IU1AgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTEyODBYNzIwX0NFQV9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDE0NDB4OTAwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLworI2RlZmluZSBNMTQ0MFg5MDBfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTQ0MFg5MDBfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKiAxNDQweDkwMEA3NSBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTE0NDBYOTAwX1I3NV9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE0NDBYOTAwX1I3NV9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTQ0MHg5MDBANjAgU3luYyBQb2xhcml0eSAoQ1ZUIFJlZHVjZSBCbGFua2luZyBNb2RlKSAqLworI2RlZmluZSBNMTQ0MFg5MDBfUkJfUjYwX0hTUCAgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTQ0MFg5MDBfUkJfUjYwX1ZTUCAgICAgICBORUdBVElWRQorCisvKiAxNjAweDkwMEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTE2MDBYOTAwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE2MDBYOTAwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTYwMHg5MDBANjAgU3luYyBQb2xhcml0eSAoQ1ZUIFJlZHVjZSBCbGFua2luZyBNb2RlKSAqLworI2RlZmluZSBNMTYwMFg5MDBfUkJfUjYwX0hTUCAgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTYwMFg5MDBfUkJfUjYwX1ZTUCAgICAgICBORUdBVElWRQorCisvKiAxNjAweDEwMjRANjAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpICovCisjZGVmaW5lIE0xNjAwWDEwMjRfUjYwX0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xNjAwWDEwMjRfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qIDE3OTJ4MTM0NEA2MCBTeW5jIFBvbGFyaXR5IChETVQgTW9kZSkgKi8KKyNkZWZpbmUgTTE3OTJ4MTM0NF9SNjBfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE3OTJ4MTM0NF9SNjBfVlNQICAgICAgUE9TSVRJVkUKKworLyogMTg1NngxMzkyQDYwIFN5bmMgUG9sYXJpdHkgKERNVCBNb2RlKSAqLworI2RlZmluZSBNMTg1NngxMzkyX1I2MF9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTg1NngxMzkyX1I2MF9WU1AgICAgICBQT1NJVElWRQorCisvKiAxOTIweDEyMDBANjAgU3luYyBQb2xhcml0eSAoQ1ZUIE1vZGUpICovCisjZGVmaW5lIE0xOTIwWDEyMDBfUjYwX0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xOTIwWDEyMDBfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qIDE5MjB4MTIwMEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgUmVkdWNlIEJsYW5raW5nIE1vZGUpICovCisjZGVmaW5lIE0xOTIwWDEyMDBfUkJfUjYwX0hTUCAgUE9TSVRJVkUKKyNkZWZpbmUgTTE5MjBYMTIwMF9SQl9SNjBfVlNQICBORUdBVElWRQorCisvKiAxOTIweDEwODBANjAgU3luYyBQb2xhcml0eSAgKENFQSBNb2RlKSAqLworI2RlZmluZSBNMTkyMFgxMDgwX0NFQV9SNjBfSFNQICAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xOTIwWDEwODBfQ0VBX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMjA0OHgxNTM2QDYwIFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLworI2RlZmluZSBNMjA0OHgxNTM2X1I2MF9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMjA0OHgxNTM2X1I2MF9WU1AgICAgICBQT1NJVElWRQorCisvKiBkZWZpbmUgUExMIGluZGV4OiAqLworI2RlZmluZSBDTEtfMjVfMTc1TSAgICAgMjUxNzUwMDAKKyNkZWZpbmUgQ0xLXzI2Xzg4ME0gICAgIDI2ODgwMDAwCisjZGVmaW5lIENMS18yOV81ODFNICAgICAyOTU4MTAwMAorI2RlZmluZSBDTEtfMzFfNDkwTSAgICAgMzE0OTAwMDAKKyNkZWZpbmUgQ0xLXzMxXzUwME0gICAgIDMxNTAwMDAwCisjZGVmaW5lIENMS18zMV83MjhNICAgICAzMTcyODAwMAorI2RlZmluZSBDTEtfMzJfNjY4TSAgICAgMzI2ODgwMDAKKyNkZWZpbmUgQ0xLXzM2XzAwME0gICAgIDM2MDAwMDAwCisjZGVmaW5lIENMS180MF8wMDBNICAgICA0MDAwMDAwMAorI2RlZmluZSBDTEtfNDFfMjkxTSAgICAgNDEyOTEwMDAKKyNkZWZpbmUgQ0xLXzQzXzE2M00gICAgIDQzMTYzMDAwCisjZGVmaW5lIENMS180NV8yNTBNICAgICA0NTI1MDAwMAkvKiA0NS40Nk1IeiAqLworI2RlZmluZSBDTEtfNDZfMDAwTSAgICAgNDYwMDAwMDAKKyNkZWZpbmUgQ0xLXzQ2Xzk5Nk0gICAgIDQ2OTk2MDAwCisjZGVmaW5lIENMS180OF8wMDBNICAgICA0ODAwMDAwMAorI2RlZmluZSBDTEtfNDhfODc1TSAgICAgNDg4NzUwMDAKKyNkZWZpbmUgQ0xLXzQ5XzUwME0gICAgIDQ5NTAwMDAwCisjZGVmaW5lIENMS181Ml80MDZNICAgICA1MjQwNjAwMAorI2RlZmluZSBDTEtfNTJfOTc3TSAgICAgNTI5NzcwMDAKKyNkZWZpbmUgQ0xLXzU2XzI1ME0gICAgIDU2MjUwMDAwCisjZGVmaW5lIENMS182MF80NjZNICAgICA2MDQ2NjAwMAorI2RlZmluZSBDTEtfNjFfNTAwTSAgICAgNjE1MDAwMDAKKyNkZWZpbmUgQ0xLXzY1XzAwME0gICAgIDY1MDAwMDAwCisjZGVmaW5lIENMS182NV8xNzhNICAgICA2NTE3ODAwMAorI2RlZmluZSBDTEtfNjZfNzUwTSAgICAgNjY3NTAwMDAJLyogNjcuMTE2TUh6ICovCisjZGVmaW5lIENMS182OF8xNzlNICAgICA2ODE3OTAwMAorI2RlZmluZSBDTEtfNjlfOTI0TSAgICAgNjk5MjQwMDAKKyNkZWZpbmUgQ0xLXzcwXzE1OU0gICAgIDcwMTU5MDAwCisjZGVmaW5lIENMS183Ml8wMDBNICAgICA3MjAwMDAwMAorI2RlZmluZSBDTEtfNzRfMjcwTSAgICAgNzQyNzAwMDAKKyNkZWZpbmUgQ0xLXzc4Xzc1ME0gICAgIDc4NzUwMDAwCisjZGVmaW5lIENMS184MF8xMzZNICAgICA4MDEzNjAwMAorI2RlZmluZSBDTEtfODNfMzc1TSAgICAgODMzNzUwMDAKKyNkZWZpbmUgQ0xLXzgzXzk1ME0gICAgIDgzOTUwMDAwCisjZGVmaW5lIENMS184NF83NTBNICAgICA4NDc1MDAwMAkvKiA4NC41MzdNaHogKi8KKyNkZWZpbmUgQ0xLXzg1Xzg2ME0gICAgIDg1ODYwMDAwCisjZGVmaW5lIENMS184OF83NTBNICAgICA4ODc1MDAwMAorI2RlZmluZSBDTEtfOTRfNTAwTSAgICAgOTQ1MDAwMDAKKyNkZWZpbmUgQ0xLXzk3Xzc1ME0gICAgIDk3NzUwMDAwCisjZGVmaW5lIENMS18xMDFfMDAwTSAgICAxMDEwMDAwMDAKKyNkZWZpbmUgQ0xLXzEwNl81MDBNICAgIDEwNjUwMDAwMAorI2RlZmluZSBDTEtfMTA4XzAwME0gICAgMTA4MDAwMDAwCisjZGVmaW5lIENMS18xMTNfMzA5TSAgICAxMTMzMDkwMDAKKyNkZWZpbmUgQ0xLXzExOF84NDBNICAgIDExODg0MDAwMAorI2RlZmluZSBDTEtfMTE5XzAwME0gICAgMTE5MDAwMDAwCisjZGVmaW5lIENMS18xMjFfNzUwTSAgICAxMjE3NTAwMDAJLyogMTIxLjcwNE1IeiAqLworI2RlZmluZSBDTEtfMTI1XzEwNE0gICAgMTI1MTA0MDAwCisjZGVmaW5lIENMS18xMzNfMzA4TSAgICAxMzMzMDgwMDAKKyNkZWZpbmUgQ0xLXzEzNV8wMDBNICAgIDEzNTAwMDAwMAorI2RlZmluZSBDTEtfMTM2XzcwME0gICAgMTM2NzAwMDAwCisjZGVmaW5lIENMS18xMzhfNDAwTSAgICAxMzg0MDAwMDAKKyNkZWZpbmUgQ0xLXzE0Nl83NjBNICAgIDE0Njc2MDAwMAorI2RlZmluZSBDTEtfMTQ4XzUwME0gICAgMTQ4NTAwMDAwCisKKyNkZWZpbmUgQ0xLXzE1M185MjBNICAgIDE1MzkyMDAwMAorI2RlZmluZSBDTEtfMTU2XzAwME0gICAgMTU2MDAwMDAwCisjZGVmaW5lIENMS18xNTdfNTAwTSAgICAxNTc1MDAwMDAKKyNkZWZpbmUgQ0xLXzE2Ml8wMDBNICAgIDE2MjAwMDAwMAorI2RlZmluZSBDTEtfMTg3XzAwME0gICAgMTg3MDAwMDAwCisjZGVmaW5lIENMS18xOTNfMjk1TSAgICAxOTMyOTUwMDAKKyNkZWZpbmUgQ0xLXzIwMl81MDBNICAgIDIwMjUwMDAwMAorI2RlZmluZSBDTEtfMjA0XzAwME0gICAgMjA0MDAwMDAwCisjZGVmaW5lIENMS18yMThfNTAwTSAgICAyMTg1MDAwMDAKKyNkZWZpbmUgQ0xLXzIzNF8wMDBNICAgIDIzNDAwMDAwMAorI2RlZmluZSBDTEtfMjY3XzI1ME0gICAgMjY3MjUwMDAwCisjZGVmaW5lIENMS18yOTdfNTAwTSAgICAyOTc1MDAwMDAKKyNkZWZpbmUgQ0xLXzc0XzQ4MU0gICAgIDc0NDgxMDAwCisjZGVmaW5lIENMS18xNzJfNzk4TSAgICAxNzI3OTgwMDAKKyNkZWZpbmUgQ0xLXzEyMl82MTRNICAgIDEyMjYxNDAwMAorCisvKiBDTEUyNjYgUExMIHZhbHVlCisqLworI2RlZmluZSBDTEUyNjZfUExMXzI1XzE3NU0gICAgIDB4MDAwMEM3NjMKKyNkZWZpbmUgQ0xFMjY2X1BMTF8yNl84ODBNICAgICAweDAwMDA0NDBGCisjZGVmaW5lIENMRTI2Nl9QTExfMjlfNTgxTSAgICAgMHgwMDAwODQyMQorI2RlZmluZSBDTEUyNjZfUExMXzMxXzQ5ME0gICAgIDB4MDAwMDQ3MjEKKyNkZWZpbmUgQ0xFMjY2X1BMTF8zMV81MDBNICAgICAweDAwMDBDM0I1CisjZGVmaW5lIENMRTI2Nl9QTExfMzFfNzI4TSAgICAgMHgwMDAwNDcxRgorI2RlZmluZSBDTEUyNjZfUExMXzMyXzY2OE0gICAgIDB4MDAwMEM0NDkKKyNkZWZpbmUgQ0xFMjY2X1BMTF8zNl8wMDBNICAgICAweDAwMDBDNUU1CisjZGVmaW5lIENMRTI2Nl9QTExfNDBfMDAwTSAgICAgMHgwMDAwQzQ1OQorI2RlZmluZSBDTEUyNjZfUExMXzQxXzI5MU0gICAgIDB4MDAwMDQ0MTcKKyNkZWZpbmUgQ0xFMjY2X1BMTF80M18xNjNNICAgICAweDAwMDBDNTc5CisjZGVmaW5lIENMRTI2Nl9QTExfNDVfMjUwTSAgICAgMHgwMDAwQzU3RgkvKiA0NS40Nk1IeiAqLworI2RlZmluZSBDTEUyNjZfUExMXzQ2XzAwME0gICAgIDB4MDAwMDg3NUEKKyNkZWZpbmUgQ0xFMjY2X1BMTF80Nl85OTZNICAgICAweDAwMDBDNEU5CisjZGVmaW5lIENMRTI2Nl9QTExfNDhfMDAwTSAgICAgMHgwMDAwMTQ0MworI2RlZmluZSBDTEUyNjZfUExMXzQ4Xzg3NU0gICAgIDB4MDAwMDFENjMKKyNkZWZpbmUgQ0xFMjY2X1BMTF80OV81MDBNICAgICAweDAwMDA4NjUzCisjZGVmaW5lIENMRTI2Nl9QTExfNTJfNDA2TSAgICAgMHgwMDAwQzQ3NQorI2RlZmluZSBDTEUyNjZfUExMXzUyXzk3N00gICAgIDB4MDAwMDQ1MjUKKyNkZWZpbmUgQ0xFMjY2X1BMTF81Nl8yNTBNICAgICAweDAwMDA0N0I3CisjZGVmaW5lIENMRTI2Nl9QTExfNjBfNDY2TSAgICAgMHgwMDAwNDk0QworI2RlZmluZSBDTEUyNjZfUExMXzYxXzUwME0gICAgIDB4MDAwMDE0NTYKKyNkZWZpbmUgQ0xFMjY2X1BMTF82NV8wMDBNICAgICAweDAwMDA4NkVECisjZGVmaW5lIENMRTI2Nl9QTExfNjVfMTc4TSAgICAgMHgwMDAwODU1QgorI2RlZmluZSBDTEUyNjZfUExMXzY2Xzc1ME0gICAgIDB4MDAwMDg0NEIJLyogNjcuMTE2TUh6ICovCisjZGVmaW5lIENMRTI2Nl9QTExfNjhfMTc5TSAgICAgMHgwMDAwMDQxMworI2RlZmluZSBDTEUyNjZfUExMXzY5XzkyNE0gICAgIDB4MDAwMDExNTMKKyNkZWZpbmUgQ0xFMjY2X1BMTF83MF8xNTlNICAgICAweDAwMDAxNDYyCisjZGVmaW5lIENMRTI2Nl9QTExfNzJfMDAwTSAgICAgMHgwMDAwMTg3OQorI2RlZmluZSBDTEUyNjZfUExMXzc0XzI3ME0gICAgIDB4MDAwMDQ4NTMKKyNkZWZpbmUgQ0xFMjY2X1BMTF83OF83NTBNICAgICAweDAwMDA0MzIxCisjZGVmaW5lIENMRTI2Nl9QTExfODBfMTM2TSAgICAgMHgwMDAwMDUxQworI2RlZmluZSBDTEUyNjZfUExMXzgzXzM3NU0gICAgIDB4MDAwMEMyNUQKKyNkZWZpbmUgQ0xFMjY2X1BMTF84M185NTBNICAgICAweDAwMDAwNzI5CisjZGVmaW5lIENMRTI2Nl9QTExfODRfNzUwTSAgICAgMHgwMDAwODU3NgkvKiA4NC41MzdNSHogKi8KKyNkZWZpbmUgQ0xFMjY2X1BMTF84NV84NjBNICAgICAweDAwMDA0NzU0CisjZGVmaW5lIENMRTI2Nl9QTExfODhfNzUwTSAgICAgMHgwMDAwMDUxRgorI2RlZmluZSBDTEUyNjZfUExMXzk0XzUwME0gICAgIDB4MDAwMDA1MjEKKyNkZWZpbmUgQ0xFMjY2X1BMTF85N183NTBNICAgICAweDAwMDA0NjUyCisjZGVmaW5lIENMRTI2Nl9QTExfMTAxXzAwME0gICAgMHgwMDAwNDk3RgorI2RlZmluZSBDTEUyNjZfUExMXzEwNl81MDBNICAgIDB4MDAwMDg0NzcJLyogMTA2LjQ5MTQ2MyBNSHogKi8KKyNkZWZpbmUgQ0xFMjY2X1BMTF8xMDhfMDAwTSAgICAweDAwMDA4NDc5CisjZGVmaW5lIENMRTI2Nl9QTExfMTEzXzMwOU0gICAgMHgwMDAwMEM1RgorI2RlZmluZSBDTEUyNjZfUExMXzExOF84NDBNICAgIDB4MDAwMDQ1NTMKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xMTlfMDAwTSAgICAweDAwMDAwRDZDCisjZGVmaW5lIENMRTI2Nl9QTExfMTIxXzc1ME0gICAgMHgwMDAwNDU1NQkvKiAxMjEuNzA0TUh6ICovCisjZGVmaW5lIENMRTI2Nl9QTExfMTI1XzEwNE0gICAgMHgwMDAwMDZCNQorI2RlZmluZSBDTEUyNjZfUExMXzEzM18zMDhNICAgIDB4MDAwMDQ2NUYKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xMzVfMDAwTSAgICAweDAwMDA0NTVFCisjZGVmaW5lIENMRTI2Nl9QTExfMTM2XzcwME0gICAgMHgwMDAwMEM3MworI2RlZmluZSBDTEUyNjZfUExMXzEzOF80MDBNICAgIDB4MDAwMDA5NTcKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xNDZfNzYwTSAgICAweDAwMDA0NTY3CisjZGVmaW5lIENMRTI2Nl9QTExfMTQ4XzUwME0gICAgMHgwMDAwMDg1MworI2RlZmluZSBDTEUyNjZfUExMXzE1M185MjBNICAgIDB4MDAwMDA4NTYKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xNTZfMDAwTSAgICAweDAwMDA0NTZECisjZGVmaW5lIENMRTI2Nl9QTExfMTU3XzUwME0gICAgMHgwMDAwMDVCNworI2RlZmluZSBDTEUyNjZfUExMXzE2Ml8wMDBNICAgIDB4MDAwMDQ1NzEKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xODdfMDAwTSAgICAweDAwMDAwOTc2CisjZGVmaW5lIENMRTI2Nl9QTExfMTkzXzI5NU0gICAgMHgwMDAwMDg2QworI2RlZmluZSBDTEUyNjZfUExMXzIwMl81MDBNICAgIDB4MDAwMDA3NjMKKyNkZWZpbmUgQ0xFMjY2X1BMTF8yMDRfMDAwTSAgICAweDAwMDAwNzY0CisjZGVmaW5lIENMRTI2Nl9QTExfMjE4XzUwME0gICAgMHgwMDAwMDY1QworI2RlZmluZSBDTEUyNjZfUExMXzIzNF8wMDBNICAgIDB4MDAwMDA2NjIKKyNkZWZpbmUgQ0xFMjY2X1BMTF8yNjdfMjUwTSAgICAweDAwMDAwNjcwCisjZGVmaW5lIENMRTI2Nl9QTExfMjk3XzUwME0gICAgMHgwMDAwMDVFNgorI2RlZmluZSBDTEUyNjZfUExMXzc0XzQ4MU0gICAgIDB4MDAwMDA1MUEKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xNzJfNzk4TSAgICAweDAwMDA0NTc5CisjZGVmaW5lIENMRTI2Nl9QTExfMTIyXzYxNE0gICAgMHgwMDAwMDczQworCisvKiBLODAwIFBMTCB2YWx1ZQorKi8KKyNkZWZpbmUgSzgwMF9QTExfMjVfMTc1TSAgICAgMHgwMDUzOTAwMQorI2RlZmluZSBLODAwX1BMTF8yNl84ODBNICAgICAweDAwMUM4QzgwCisjZGVmaW5lIEs4MDBfUExMXzI5XzU4MU0gICAgIDB4MDA0MDkwODAKKyNkZWZpbmUgSzgwMF9QTExfMzFfNDkwTSAgICAgMHgwMDZGOTAwMQorI2RlZmluZSBLODAwX1BMTF8zMV81MDBNICAgICAweDAwOEI5MDAyCisjZGVmaW5lIEs4MDBfUExMXzMxXzcyOE0gICAgIDB4MDBBRjkwMDMKKyNkZWZpbmUgSzgwMF9QTExfMzJfNjY4TSAgICAgMHgwMDkwOTAwMgorI2RlZmluZSBLODAwX1BMTF8zNl8wMDBNICAgICAweDAwOUY5MDAyCisjZGVmaW5lIEs4MDBfUExMXzQwXzAwME0gICAgIDB4MDA1NzhDMDIKKyNkZWZpbmUgSzgwMF9QTExfNDFfMjkxTSAgICAgMHgwMDQzOEMwMQorI2RlZmluZSBLODAwX1BMTF80M18xNjNNICAgICAweDAwNzc4QzAzCisjZGVmaW5lIEs4MDBfUExMXzQ1XzI1ME0gICAgIDB4MDA3RDhDODMJLyogNDUuNDZNSHogKi8KKyNkZWZpbmUgSzgwMF9QTExfNDZfMDAwTSAgICAgMHgwMDY1OEMwMgorI2RlZmluZSBLODAwX1BMTF80Nl85OTZNICAgICAweDAwODE4QzgzCisjZGVmaW5lIEs4MDBfUExMXzQ4XzAwME0gICAgIDB4MDA4NDhDODMKKyNkZWZpbmUgSzgwMF9QTExfNDhfODc1TSAgICAgMHgwMDUwOEM4MQorI2RlZmluZSBLODAwX1BMTF80OV81MDBNICAgICAweDAwNTE4QzAxCisjZGVmaW5lIEs4MDBfUExMXzUyXzQwNk0gICAgIDB4MDA3MzhDMDIKKyNkZWZpbmUgSzgwMF9QTExfNTJfOTc3TSAgICAgMHgwMDkyOEM4MworI2RlZmluZSBLODAwX1BMTF81Nl8yNTBNICAgICAweDAwN0M4QzAyCisjZGVmaW5lIEs4MDBfUExMXzYwXzQ2Nk0gICAgIDB4MDBBNzhDODMKKyNkZWZpbmUgSzgwMF9QTExfNjFfNTAwTSAgICAgMHgwMEFBOEM4MworI2RlZmluZSBLODAwX1BMTF82NV8wMDBNICAgICAweDAwNkI4QzAxCisjZGVmaW5lIEs4MDBfUExMXzY1XzE3OE0gICAgIDB4MDBCNDhDODMKKyNkZWZpbmUgSzgwMF9QTExfNjZfNzUwTSAgICAgMHgwMDk0OEM4MgkvKiA2Ny4xMTZNSHogKi8KKyNkZWZpbmUgSzgwMF9QTExfNjhfMTc5TSAgICAgMHgwMDcwOEMwMQorI2RlZmluZSBLODAwX1BMTF82OV85MjRNICAgICAweDAwQzE4QzgzCisjZGVmaW5lIEs4MDBfUExMXzcwXzE1OU0gICAgIDB4MDBDMjhDODMKKyNkZWZpbmUgSzgwMF9QTExfNzJfMDAwTSAgICAgMHgwMDlGOEM4MgorI2RlZmluZSBLODAwX1BMTF83NF8yNzBNICAgICAweDAwY2UwYzAzCisjZGVmaW5lIEs4MDBfUExMXzc4Xzc1ME0gICAgIDB4MDA0MDg4MDEKKyNkZWZpbmUgSzgwMF9QTExfODBfMTM2TSAgICAgMHgwMDQyODgwMQorI2RlZmluZSBLODAwX1BMTF84M18zNzVNICAgICAweDAwNUIwODgyCisjZGVmaW5lIEs4MDBfUExMXzgzXzk1ME0gICAgIDB4MDA3Mzg4MDMKKyNkZWZpbmUgSzgwMF9QTExfODRfNzUwTSAgICAgMHgwMDc0ODg4MwkvKiA4NC40NzdNSHogKi8KKyNkZWZpbmUgSzgwMF9QTExfODVfODYwTSAgICAgMHgwMDc2ODg4MworI2RlZmluZSBLODAwX1BMTF84OF83NTBNICAgICAweDAwN0E4ODgzCisjZGVmaW5lIEs4MDBfUExMXzk0XzUwME0gICAgIDB4MDA4Mjg4MDMKKyNkZWZpbmUgSzgwMF9QTExfOTdfNzUwTSAgICAgMHgwMDg3ODg4MworI2RlZmluZSBLODAwX1BMTF8xMDFfMDAwTSAgICAweDAwOEI4ODgzCisjZGVmaW5lIEs4MDBfUExMXzEwNl81MDBNICAgIDB4MDA3NTg4ODIJLyogMTA2LjQ5MTQ2MyBNSHogKi8KKyNkZWZpbmUgSzgwMF9QTExfMTA4XzAwME0gICAgMHgwMDc3ODg4MgorI2RlZmluZSBLODAwX1BMTF8xMTNfMzA5TSAgICAweDAwNUQ4ODgxCisjZGVmaW5lIEs4MDBfUExMXzExOF84NDBNICAgIDB4MDBBNDg4ODMKKyNkZWZpbmUgSzgwMF9QTExfMTE5XzAwME0gICAgMHgwMDgzODg4MgorI2RlZmluZSBLODAwX1BMTF8xMjFfNzUwTSAgICAweDAwQTg4ODgzCS8qIDEyMS43MDRNSHogKi8KKyNkZWZpbmUgSzgwMF9QTExfMTI1XzEwNE0gICAgMHgwMDY4ODgwMQorI2RlZmluZSBLODAwX1BMTF8xMzNfMzA4TSAgICAweDAwNUQ4ODAxCisjZGVmaW5lIEs4MDBfUExMXzEzNV8wMDBNICAgIDB4MDAxQTQwODEKKyNkZWZpbmUgSzgwMF9QTExfMTM2XzcwME0gICAgMHgwMEJEODg4MworI2RlZmluZSBLODAwX1BMTF8xMzhfNDAwTSAgICAweDAwNzI4ODgxCisjZGVmaW5lIEs4MDBfUExMXzE0Nl83NjBNICAgIDB4MDBDQzg4ODMKKyNkZWZpbmUgSzgwMF9QTExfMTQ4XzUwME0gICAgMHgwMGNlMDgwMworI2RlZmluZSBLODAwX1BMTF8xNTNfOTIwTSAgICAweDAwNTQ4NDgyCisjZGVmaW5lIEs4MDBfUExMXzE1Nl8wMDBNICAgIDB4MDA2Qjg0ODMKKyNkZWZpbmUgSzgwMF9QTExfMTU3XzUwME0gICAgMHgwMDE0MjA4MAorI2RlZmluZSBLODAwX1BMTF8xNjJfMDAwTSAgICAweDAwNkY4NDgzCisjZGVmaW5lIEs4MDBfUExMXzE4N18wMDBNICAgIDB4MDA4MTg0ODMKKyNkZWZpbmUgSzgwMF9QTExfMTkzXzI5NU0gICAgMHgwMDRGODQ4MQorI2RlZmluZSBLODAwX1BMTF8yMDJfNTAwTSAgICAweDAwNTM4NDgxCisjZGVmaW5lIEs4MDBfUExMXzIwNF8wMDBNICAgIDB4MDA4RDg0ODMKKyNkZWZpbmUgSzgwMF9QTExfMjE4XzUwME0gICAgMHgwMDk3ODQ4MworI2RlZmluZSBLODAwX1BMTF8yMzRfMDAwTSAgICAweDAwNjA4NDAxCisjZGVmaW5lIEs4MDBfUExMXzI2N18yNTBNICAgIDB4MDA2RTg0ODEKKyNkZWZpbmUgSzgwMF9QTExfMjk3XzUwME0gICAgMHgwMEE0ODQwMgorI2RlZmluZSBLODAwX1BMTF83NF80ODFNICAgICAweDAwN0I4QzgxCisjZGVmaW5lIEs4MDBfUExMXzE3Ml83OThNICAgIDB4MDA3Nzg0ODMKKyNkZWZpbmUgSzgwMF9QTExfMTIyXzYxNE0gICAgMHgwMDg3ODg4MgorCisvKiBQTEwgZm9yIFZUMzMyNCAqLworI2RlZmluZSBDWDcwMF8yNV8xNzVNICAgICAweDAwOEIxMDAzCisjZGVmaW5lIENYNzAwXzI2XzcxOU0gICAgIDB4MDA5MzEwMDMKKyNkZWZpbmUgQ1g3MDBfMjZfODgwTSAgICAgMHgwMDk0MTAwMworI2RlZmluZSBDWDcwMF8yOV81ODFNICAgICAweDAwQTQ5MDAzCisjZGVmaW5lIENYNzAwXzMxXzQ5ME0gICAgIDB4MDBBRTEwMDMKKyNkZWZpbmUgQ1g3MDBfMzFfNTAwTSAgICAgMHgwMEFFMTAwMworI2RlZmluZSBDWDcwMF8zMV83MjhNICAgICAweDAwQUYxMDAzCisjZGVmaW5lIENYNzAwXzMyXzY2OE0gICAgIDB4MDBCNTEwMDMKKyNkZWZpbmUgQ1g3MDBfMzZfMDAwTSAgICAgMHgwMEM4MTAwMworI2RlZmluZSBDWDcwMF80MF8wMDBNICAgICAweDAwNkUwQzAzCisjZGVmaW5lIENYNzAwXzQxXzI5MU0gICAgIDB4MDA3MTBDMDMKKyNkZWZpbmUgQ1g3MDBfNDNfMTYzTSAgICAgMHgwMDc3MEMwMworI2RlZmluZSBDWDcwMF80NV8yNTBNICAgICAweDAwN0QwQzAzCS8qIDQ1LjQ2TUh6ICovCisjZGVmaW5lIENYNzAwXzQ2XzAwME0gICAgIDB4MDA3RjBDMDMKKyNkZWZpbmUgQ1g3MDBfNDZfOTk2TSAgICAgMHgwMDgxOEM4MworI2RlZmluZSBDWDcwMF80OF8wMDBNICAgICAweDAwODQwQzAzCisjZGVmaW5lIENYNzAwXzQ4Xzg3NU0gICAgIDB4MDA1MDhDODEKKyNkZWZpbmUgQ1g3MDBfNDlfNTAwTSAgICAgMHgwMDg4MEMwMworI2RlZmluZSBDWDcwMF81Ml80MDZNICAgICAweDAwNzMwQzAyCisjZGVmaW5lIENYNzAwXzUyXzk3N00gICAgIDB4MDA5MjBDMDMKKyNkZWZpbmUgQ1g3MDBfNTZfMjUwTSAgICAgMHgwMDlCMEMwMworI2RlZmluZSBDWDcwMF82MF80NjZNICAgICAweDAwNDYwQzAwCisjZGVmaW5lIENYNzAwXzYxXzUwME0gICAgIDB4MDBBQTBDMDMKKyNkZWZpbmUgQ1g3MDBfNjVfMDAwTSAgICAgMHgwMDZCMEMwMQorI2RlZmluZSBDWDcwMF82NV8xNzhNICAgICAweDAwNkIwQzAxCisjZGVmaW5lIENYNzAwXzY2Xzc1ME0gICAgIDB4MDA5NDBDMDIJLyo2Ny4xMTZNSHogKi8KKyNkZWZpbmUgQ1g3MDBfNjhfMTc5TSAgICAgMHgwMEJDMEMwMworI2RlZmluZSBDWDcwMF82OV85MjRNICAgICAweDAwQzEwQzAzCisjZGVmaW5lIENYNzAwXzcwXzE1OU0gICAgIDB4MDBDMjBDMDMKKyNkZWZpbmUgQ1g3MDBfNzJfMDAwTSAgICAgMHgwMDlGMEMwMgorI2RlZmluZSBDWDcwMF83NF8yNzBNICAgICAweDAwQ0UwQzAzCisjZGVmaW5lIENYNzAwXzc0XzQ4MU0gICAgIDB4MDBDRTBDMDMKKyNkZWZpbmUgQ1g3MDBfNzhfNzUwTSAgICAgMHgwMDZDMDgwMworI2RlZmluZSBDWDcwMF84MF8xMzZNICAgICAweDAwNkUwODAzCisjZGVmaW5lIENYNzAwXzgzXzM3NU0gICAgIDB4MDA1QjA4ODIKKyNkZWZpbmUgQ1g3MDBfODNfOTUwTSAgICAgMHgwMDczMDgwMworI2RlZmluZSBDWDcwMF84NF83NTBNICAgICAweDAwNzQwODAzCS8qIDg0LjUzN01oeiAqLworI2RlZmluZSBDWDcwMF84NV84NjBNICAgICAweDAwNzYwODAzCisjZGVmaW5lIENYNzAwXzg4Xzc1ME0gICAgIDB4MDBBQzg4ODUKKyNkZWZpbmUgQ1g3MDBfOTRfNTAwTSAgICAgMHgwMDgyMDgwMworI2RlZmluZSBDWDcwMF85N183NTBNICAgICAweDAwODcwODAzCisjZGVmaW5lIENYNzAwXzEwMV8wMDBNICAgIDB4MDA4QjA4MDMKKyNkZWZpbmUgQ1g3MDBfMTA2XzUwME0gICAgMHgwMDc1MDgwMgorI2RlZmluZSBDWDcwMF8xMDhfMDAwTSAgICAweDAwOTUwODAzCisjZGVmaW5lIENYNzAwXzExM18zMDlNICAgIDB4MDA1RDA4MDEKKyNkZWZpbmUgQ1g3MDBfMTE4Xzg0ME0gICAgMHgwMEE0MDgwMworI2RlZmluZSBDWDcwMF8xMTlfMDAwTSAgICAweDAwODMwODAyCisjZGVmaW5lIENYNzAwXzEyMV83NTBNICAgIDB4MDA0MjA4MDAJLyogMTIxLjcwNE1IeiAqLworI2RlZmluZSBDWDcwMF8xMjVfMTA0TSAgICAweDAwQUQwODAzCisjZGVmaW5lIENYNzAwXzEzM18zMDhNICAgIDB4MDA5MzA4MDIKKyNkZWZpbmUgQ1g3MDBfMTM1XzAwME0gICAgMHgwMDk1MDgwMgorI2RlZmluZSBDWDcwMF8xMzZfNzAwTSAgICAweDAwQkQwODAzCisjZGVmaW5lIENYNzAwXzEzOF80MDBNICAgIDB4MDA3MjA4MDEKKyNkZWZpbmUgQ1g3MDBfMTQ2Xzc2ME0gICAgMHgwMENDMDgwMworI2RlZmluZSBDWDcwMF8xNDhfNTAwTSAgICAweDAwYTQwODAyCisjZGVmaW5lIENYNzAwXzE1M185MjBNICAgIDB4MDA1NDA0MDIKKyNkZWZpbmUgQ1g3MDBfMTU2XzAwME0gICAgMHgwMDZCMDQwMworI2RlZmluZSBDWDcwMF8xNTdfNTAwTSAgICAweDAwNkMwNDAzCisjZGVmaW5lIENYNzAwXzE2Ml8wMDBNICAgIDB4MDA2RjA0MDMKKyNkZWZpbmUgQ1g3MDBfMTcyXzc5OE0gICAgMHgwMDc3MDQwMworI2RlZmluZSBDWDcwMF8xODdfMDAwTSAgICAweDAwODEwNDAzCisjZGVmaW5lIENYNzAwXzE5M18yOTVNICAgIDB4MDA4NTA0MDMKKyNkZWZpbmUgQ1g3MDBfMjAyXzUwME0gICAgMHgwMDhDMDQwMworI2RlZmluZSBDWDcwMF8yMDRfMDAwTSAgICAweDAwOEQwNDAzCisjZGVmaW5lIENYNzAwXzIxOF81MDBNICAgIDB4MDA5NzA0MDMKKyNkZWZpbmUgQ1g3MDBfMjM0XzAwME0gICAgMHgwMDYwMDQwMQorI2RlZmluZSBDWDcwMF8yNjdfMjUwTSAgICAweDAwQjkwNDAzCisjZGVmaW5lIENYNzAwXzI5N181MDBNICAgIDB4MDBDRTA0MDMKKyNkZWZpbmUgQ1g3MDBfMTIyXzYxNE0gICAgMHgwMDg3MDgwMgorCisvKiBEZWZpbml0aW9uIENSVEMgVGltaW5nIEluZGV4ICovCisjZGVmaW5lIEhfVE9UQUxfSU5ERVggICAgICAgICAgICAgICAwCisjZGVmaW5lIEhfQUREUl9JTkRFWCAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEhfQkxBTktfU1RBUlRfSU5ERVggICAgICAgICAyCisjZGVmaW5lIEhfQkxBTktfRU5EX0lOREVYICAgICAgICAgICAzCisjZGVmaW5lIEhfU1lOQ19TVEFSVF9JTkRFWCAgICAgICAgICA0CisjZGVmaW5lIEhfU1lOQ19FTkRfSU5ERVggICAgICAgICAgICA1CisjZGVmaW5lIFZfVE9UQUxfSU5ERVggICAgICAgICAgICAgICA2CisjZGVmaW5lIFZfQUREUl9JTkRFWCAgICAgICAgICAgICAgICA3CisjZGVmaW5lIFZfQkxBTktfU1RBUlRfSU5ERVggICAgICAgICA4CisjZGVmaW5lIFZfQkxBTktfRU5EX0lOREVYICAgICAgICAgICA5CisjZGVmaW5lIFZfU1lOQ19TVEFSVF9JTkRFWCAgICAgICAgICAxMAorI2RlZmluZSBWX1NZTkNfRU5EX0lOREVYICAgICAgICAgICAgMTEKKyNkZWZpbmUgSF9UT1RBTF9TSEFET1dfSU5ERVggICAgICAgIDEyCisjZGVmaW5lIEhfQkxBTktfRU5EX1NIQURPV19JTkRFWCAgICAxMworI2RlZmluZSBWX1RPVEFMX1NIQURPV19JTkRFWCAgICAgICAgMTQKKyNkZWZpbmUgVl9BRERSX1NIQURPV19JTkRFWCAgICAgICAgIDE1CisjZGVmaW5lIFZfQkxBTktfU0FUUlRfU0hBRE9XX0lOREVYICAxNgorI2RlZmluZSBWX0JMQU5LX0VORF9TSEFET1dfSU5ERVggICAgMTcKKyNkZWZpbmUgVl9TWU5DX1NBVFJUX1NIQURPV19JTkRFWCAgIDE4CisjZGVmaW5lIFZfU1lOQ19FTkRfU0hBRE9XX0lOREVYICAgICAxOQorCisvKiBEZWZpbml0aW9uIFZpZGVvIE1vZGUgUGl4ZWwgQ2xvY2sgKHBpY29zZWNvbmRzKQorKi8KKyNkZWZpbmUgUkVTXzQ4MFg2NDBfNjBIWl9QSVhDTE9DSyAgICAzOTcyMgorI2RlZmluZSBSRVNfNjQwWDQ4MF82MEhaX1BJWENMT0NLICAgIDM5NzIyCisjZGVmaW5lIFJFU182NDBYNDgwXzc1SFpfUElYQ0xPQ0sgICAgMzE3NDcKKyNkZWZpbmUgUkVTXzY0MFg0ODBfODVIWl9QSVhDTE9DSyAgICAyNzc3NworI2RlZmluZSBSRVNfNjQwWDQ4MF8xMDBIWl9QSVhDTE9DSyAgIDIzMTY4CisjZGVmaW5lIFJFU182NDBYNDgwXzEyMEhaX1BJWENMT0NLICAgMTkwODEKKyNkZWZpbmUgUkVTXzcyMFg0ODBfNjBIWl9QSVhDTE9DSyAgICAzNzAyMAorI2RlZmluZSBSRVNfNzIwWDU3Nl82MEhaX1BJWENMT0NLICAgIDMwNjExCisjZGVmaW5lIFJFU184MDBYNjAwXzYwSFpfUElYQ0xPQ0sgICAgMjUwMDAKKyNkZWZpbmUgUkVTXzgwMFg2MDBfNzVIWl9QSVhDTE9DSyAgICAyMDIwMworI2RlZmluZSBSRVNfODAwWDYwMF84NUhaX1BJWENMT0NLICAgIDE3Nzc3CisjZGVmaW5lIFJFU184MDBYNjAwXzEwMEhaX1BJWENMT0NLICAgMTQ2NjcKKyNkZWZpbmUgUkVTXzgwMFg2MDBfMTIwSFpfUElYQ0xPQ0sgICAxMTkxMgorI2RlZmluZSBSRVNfODAwWDQ4MF82MEhaX1BJWENMT0NLICAgIDMzODA1CisjZGVmaW5lIFJFU184NDhYNDgwXzYwSFpfUElYQ0xPQ0sgICAgMzE3NTYKKyNkZWZpbmUgUkVTXzg1Nlg0ODBfNjBIWl9QSVhDTE9DSyAgICAzMTUxOAorI2RlZmluZSBSRVNfMTAyNFg1MTJfNjBIWl9QSVhDTE9DSyAgIDI0MjE4CisjZGVmaW5lIFJFU18xMDI0WDYwMF82MEhaX1BJWENMT0NLICAgMjA0NjAKKyNkZWZpbmUgUkVTXzEwMjRYNzY4XzYwSFpfUElYQ0xPQ0sgICAxNTM4NQorI2RlZmluZSBSRVNfMTAyNFg3NjhfNzVIWl9QSVhDTE9DSyAgIDEyNjk5CisjZGVmaW5lIFJFU18xMDI0WDc2OF84NUhaX1BJWENMT0NLICAgMTA1ODIKKyNkZWZpbmUgUkVTXzEwMjRYNzY4XzEwMEhaX1BJWENMT0NLICA4ODI1CisjZGVmaW5lIFJFU18xMTUyWDg2NF83NUhaX1BJWENMT0NLICAgOTI1OQorI2RlZmluZSBSRVNfMTI4MFg3NjhfNjBIWl9QSVhDTE9DSyAgIDEyNDgwCisjZGVmaW5lIFJFU18xMjgwWDgwMF82MEhaX1BJWENMT0NLICAgMTE5OTQKKyNkZWZpbmUgUkVTXzEyODBYOTYwXzYwSFpfUElYQ0xPQ0sgICA5MjU5CisjZGVmaW5lIFJFU18xMjgwWDEwMjRfNjBIWl9QSVhDTE9DSyAgOTI2MAorI2RlZmluZSBSRVNfMTI4MFgxMDI0Xzc1SFpfUElYQ0xPQ0sgIDc0MDgKKyNkZWZpbmUgUkVTXzEyODBYNzY4Xzg1SFpfUElYQ0xPQ0sgICA2MzQ5CisjZGVmaW5lIFJFU18xNDQwWDEwNTBfNjBIWl9QSVhDTE9DSyAgNzk5MworI2RlZmluZSBSRVNfMTYwMFgxMjAwXzYwSFpfUElYQ0xPQ0sgIDYxNzIKKyNkZWZpbmUgUkVTXzE2MDBYMTIwMF83NUhaX1BJWENMT0NLICA0OTM4CisjZGVmaW5lIFJFU18xMjgwWDcyMF82MEhaX1BJWENMT0NLICAgMTM0MjYKKyNkZWZpbmUgUkVTXzE5MjBYMTA4MF82MEhaX1BJWENMT0NLICA1Nzg3CisjZGVmaW5lIFJFU18xNDAwWDEwNTBfNjBIWl9QSVhDTE9DSyAgODIxNAorI2RlZmluZSBSRVNfMTQwMFgxMDUwXzc1SFpfUElYQ0xPQ0sgIDY0MTAKKyNkZWZpbmUgUkVTXzEzNjhYNzY4XzYwSFpfUElYQ0xPQ0sgICAxMTY0NworI2RlZmluZSBSRVNfOTYwWDYwMF82MEhaX1BJWENMT0NLICAgICAgMjIwOTkKKyNkZWZpbmUgUkVTXzEwMDBYNjAwXzYwSFpfUElYQ0xPQ0sgICAgMjA4MzQKKyNkZWZpbmUgUkVTXzEwMjRYNTc2XzYwSFpfUElYQ0xPQ0sgICAgMjEyNzgKKyNkZWZpbmUgUkVTXzEwODhYNjEyXzYwSFpfUElYQ0xPQ0sgICAgMTg4NzcKKyNkZWZpbmUgUkVTXzExNTJYNzIwXzYwSFpfUElYQ0xPQ0sgICAgMTQ5ODEKKyNkZWZpbmUgUkVTXzEyMDBYNzIwXzYwSFpfUElYQ0xPQ0sgICAgMTQyNTMKKyNkZWZpbmUgUkVTXzEyODBYNjAwXzYwSFpfUElYQ0xPQ0sgICAgMTYyNjAKKyNkZWZpbmUgUkVTXzEyODBYNzIwXzUwSFpfUElYQ0xPQ0sgICAgMTY1MzgKKyNkZWZpbmUgUkVTXzEyODBYNzY4XzUwSFpfUElYQ0xPQ0sgICAgMTUzNDIKKyNkZWZpbmUgUkVTXzEzNjZYNzY4XzUwSFpfUElYQ0xPQ0sgICAgMTQzMDEKKyNkZWZpbmUgUkVTXzEzNjZYNzY4XzYwSFpfUElYQ0xPQ0sgICAgMTE2NDYKKyNkZWZpbmUgUkVTXzEzNjBYNzY4XzYwSFpfUElYQ0xPQ0sgICAgMTE3OTkKKyNkZWZpbmUgUkVTXzE0NDBYOTAwXzYwSFpfUElYQ0xPQ0sgICAgOTM5MAorI2RlZmluZSBSRVNfMTQ0MFg5MDBfNzVIWl9QSVhDTE9DSyAgICA3MzE1CisjZGVmaW5lIFJFU18xNjAwWDkwMF82MEhaX1BJWENMT0NLICAgIDg0MTUKKyNkZWZpbmUgUkVTXzE2MDBYMTAyNF82MEhaX1BJWENMT0NLICAgNzMxNQorI2RlZmluZSBSRVNfMTY4MFgxMDUwXzYwSFpfUElYQ0xPQ0sgICA2ODE0CisjZGVmaW5lIFJFU18xNjgwWDEwNTBfNzVIWl9QSVhDTE9DSyAgIDUzNDgKKyNkZWZpbmUgUkVTXzE3OTJYMTM0NF82MEhaX1BJWENMT0NLICAgNDkwMgorI2RlZmluZSBSRVNfMTg1NlgxMzkyXzYwSFpfUElYQ0xPQ0sgICA0NTc3CisjZGVmaW5lIFJFU18xOTIwWDEyMDBfNjBIWl9QSVhDTE9DSyAgIDUxNzMKKyNkZWZpbmUgUkVTXzE5MjBYMTQ0MF82MEhaX1BJWENMT0NLICAgNDI3NAorI2RlZmluZSBSRVNfMTkyMFgxNDQwXzc1SFpfUElYQ0xPQ0sgICAzMzY3CisjZGVmaW5lIFJFU18yMDQ4WDE1MzZfNjBIWl9QSVhDTE9DSyAgIDM3NDIKKworI2RlZmluZSBSRVNfMTM2MFg3NjhfUkJfNjBIWl9QSVhDTE9DSyAxMzg4OQorI2RlZmluZSBSRVNfMTQwMFgxMDUwX1JCXzYwSFpfUElYQ0xPQ0sgOTkwMQorI2RlZmluZSBSRVNfMTQ0MFg5MDBfUkJfNjBIWl9QSVhDTE9DSyAgIDExMjY4CisjZGVmaW5lIFJFU18xNjAwWDkwMF9SQl82MEhaX1BJWENMT0NLICAgMTAyMzAKKyNkZWZpbmUgUkVTXzE2ODBYMTA1MF9SQl82MEhaX1BJWENMT0NLIDg0MDMKKyNkZWZpbmUgUkVTXzE5MjBYMTA4MF9SQl82MEhaX1BJWENMT0NLIDcyMjUKKyNkZWZpbmUgUkVTXzE5MjBYMTIwMF9SQl82MEhaX1BJWENMT0NLIDY0OTcKKworLyogTENEIGRpc3BsYXkgbWV0aG9kCisqLworI2RlZmluZSAgICAgTENEX0VYUEFORFNJT04gICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgICAgIExDRF9DRU5URVJJTkcgICAgICAgICAgICAgICAweDAxCisKKy8qIExDRCBtb2RlCisqLworI2RlZmluZSAgICAgTENEX09QRU5MREkgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lICAgICBMQ0RfU1BXRyAgICAgICAgICAgICAgICAgIDB4MDEKKworLyogRGVmaW5lIGRpc3BsYXkgdGltaW5nCisqLworc3RydWN0IGRpc3BsYXlfdGltaW5nIHsKKwl1MTYgaG9yX3RvdGFsOworCXUxNiBob3JfYWRkcjsKKwl1MTYgaG9yX2JsYW5rX3N0YXJ0OworCXUxNiBob3JfYmxhbmtfZW5kOworCXUxNiBob3Jfc3luY19zdGFydDsKKwl1MTYgaG9yX3N5bmNfZW5kOworCXUxNiB2ZXJfdG90YWw7CisJdTE2IHZlcl9hZGRyOworCXUxNiB2ZXJfYmxhbmtfc3RhcnQ7CisJdTE2IHZlcl9ibGFua19lbmQ7CisJdTE2IHZlcl9zeW5jX3N0YXJ0OworCXUxNiB2ZXJfc3luY19lbmQ7Cit9OworCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgeworCWludCByZWZyZXNoX3JhdGU7CisJdW5zaWduZWQgbG9uZyBjbGs7CisJaW50IGhfc3luY19wb2xhcml0eTsKKwlpbnQgdl9zeW5jX3BvbGFyaXR5OworCXN0cnVjdCBkaXNwbGF5X3RpbWluZyBjcnRjOworfTsKKworc3RydWN0IGlvX3JlZyB7CisJaW50IHBvcnQ7CisJdTggaW5kZXg7CisJdTggbWFzazsKKwl1OCB2YWx1ZTsKK307CisKKyNlbmRpZiAvKiBfX1NIQVJFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdGJsMTYzNi5jIGIvZHJpdmVycy92aWRlby92aWEvdGJsMTYzNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODQ1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS90YmwxNjM2LmMKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImdsb2JhbC5oIgorc3RydWN0IElPREFUQSBDT01NT05fSU5JVF9UQkxfVlQxNjM2W10gPSB7CisvKiAgSW5kZXgsIE1hc2ssIFZhbHVlICovCisJLyogU2V0IHBhbmVsIHBvd2VyIHNlcXVlbmNlIHRpbWluZyAqLworCXsweDEwLCAweEMwLCAweDAwfSwKKwkvKiBUMTogVkREIG9uIC0gRGF0YSBvbi4gRWFjaCBpbmNyZW1lbnQgaXMgMSBtcy4gKDUwbXMgPSAwMzFoKSAqLworCXsweDBCLCAweEZGLCAweDQwfSwKKwkvKiBUMjogRGF0YSBvbiAtIEJhY2tsaWdodCBvbi4gRWFjaCBpbmNyZW1lbnQgaXMgMiBtcy4gKDIxMG1zID0gMDY4aCkgKi8KKwl7MHgwQywgMHhGRiwgMHgzMX0sCisJLyogVDM6IEJhY2tsaWdodCBvZmYgLURhdGEgb2ZmLiBFYWNoIGluY3JlbWVudCBpcyAyIG1zLiAoMjEwbXMgPSAwNjhoKSovCisJezB4MEQsIDB4RkYsIDB4MzF9LAorCS8qIFQ0OiBEYXRhIG9mZiAtIFZERCBvZmYuIEVhY2ggaW5jcmVtZW50IGlzIDEgbXMuICg1MG1zID0gMDMxaCkgKi8KKwl7MHgwRSwgMHhGRiwgMHg2OH0sCisJLyogVDU6IFZERCBvZmYgLSBWREQgb24uIEVhY2ggaW5jcmVtZW50IGlzIDEwMCBtcy4gKDUwMG1zID0gMDRoKSAqLworCXsweDBGLCAweEZGLCAweDY4fSwKKwkvKiBMVkRTIG91dHB1dCBwb3dlciB1cCAqLworCXsweDA5LCAweEEwLCAweEEwfSwKKwkvKiB0dXJuIG9uIGJhY2sgbGlnaHQgKi8KKwl7MHgxMCwgMHgzMywgMHgxM30KK307CisKK3N0cnVjdCBJT0RBVEEgRFVBTF9DSEFOTkVMX0VOQUJMRV9UQkxfVlQxNjM2W10gPSB7CisvKiAgSW5kZXgsIE1hc2ssIFZhbHVlICovCisJezB4MDgsIDB4RjAsIDB4RTB9CS8qIElucHV0IERhdGEgTW9kZSBTZWxlY3QgKi8KK307CisKK3N0cnVjdCBJT0RBVEEgU0lOR0xFX0NIQU5ORUxfRU5BQkxFX1RCTF9WVDE2MzZbXSA9IHsKKy8qICBJbmRleCwgTWFzaywgVmFsdWUgKi8KKwl7MHgwOCwgMHhGMCwgMHgwMH0JLyogSW5wdXQgRGF0YSBNb2RlIFNlbGVjdCAqLworfTsKKworc3RydWN0IElPREFUQSBESVRIRVJJTkdfRU5BQkxFX1RCTF9WVDE2MzZbXSA9IHsKKy8qICBJbmRleCwgTWFzaywgVmFsdWUgKi8KKwl7MHgwQSwgMHg3MCwgMHg1MH0KK307CisKK3N0cnVjdCBJT0RBVEEgRElUSEVSSU5HX0RJU0FCTEVfVEJMX1ZUMTYzNltdID0geworLyogIEluZGV4LCBNYXNrLCBWYWx1ZSAqLworCXsweDBBLCAweDcwLCAweDAwfQorfTsKKworc3RydWN0IElPREFUQSBWRERfT05fVEJMX1ZUMTYzNltdID0geworLyogIEluZGV4LCBNYXNrLCBWYWx1ZSAqLworCXsweDEwLCAweDIwLCAweDIwfQorfTsKKworc3RydWN0IElPREFUQSBWRERfT0ZGX1RCTF9WVDE2MzZbXSA9IHsKKy8qICBJbmRleCwgTWFzaywgVmFsdWUgKi8KKwl7MHgxMCwgMHgyMCwgMHgwMH0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS90YmwxNjM2LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS90YmwxNjM2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwNjA1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3RibDE2MzYuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9UQkwxNjM2X0hfCisjZGVmaW5lIF9UQkwxNjM2X0hfCisjaW5jbHVkZSAiaHcuaCIKKworZXh0ZXJuIHN0cnVjdCBJT0RBVEEgQ09NTU9OX0lOSVRfVEJMX1ZUMTYzNls4XTsKK2V4dGVybiBzdHJ1Y3QgSU9EQVRBIERVQUxfQ0hBTk5FTF9FTkFCTEVfVEJMX1ZUMTYzNlsxXTsKK2V4dGVybiBzdHJ1Y3QgSU9EQVRBIFNJTkdMRV9DSEFOTkVMX0VOQUJMRV9UQkxfVlQxNjM2WzFdOworZXh0ZXJuIHN0cnVjdCBJT0RBVEEgRElUSEVSSU5HX0VOQUJMRV9UQkxfVlQxNjM2WzFdOworZXh0ZXJuIHN0cnVjdCBJT0RBVEEgRElUSEVSSU5HX0RJU0FCTEVfVEJMX1ZUMTYzNlsxXTsKK2V4dGVybiBzdHJ1Y3QgSU9EQVRBIFZERF9PTl9UQkxfVlQxNjM2WzFdOworZXh0ZXJuIHN0cnVjdCBJT0RBVEEgVkREX09GRl9UQkxfVlQxNjM2WzFdOworCisjZW5kaWYgLyogX1ZJQV9UQkwxNjM2X0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS90YmxEUEFTZXR0aW5nLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS90YmxEUEFTZXR0aW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM0YzhjYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3RibERQQVNldHRpbmcuYwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImdsb2JhbC5oIgorLyogRm9yIFZUMzMyNDogKi8KK3N0cnVjdCBWVDE2MzZfRFBBX1NFVFRJTkcgVlQxNjM2X0RQQV9TRVRUSU5HX1RCTF9WVDMzMjRbXSA9IHsKKwkvKiBQYW5lbCBJRCwgICAgICAgQ0xLX1NFTF9TVDFbMDldLCAgICBDTEtfU0VMX1NUMlswOF0gKi8KKwl7TENEX1BBTkVMX0lEMF82NDBYNDgwLCAweDAwLCAweDAwfSwJLyogRm9yIDY0MHg0ODAgICAqLworCXtMQ0RfUEFORUxfSUQxXzgwMFg2MDAsIDB4MDAsIDB4MDB9LAkvKiBGb3IgODAweDYwMCAgICovCisJe0xDRF9QQU5FTF9JRDJfMTAyNFg3NjgsIDB4MDAsIDB4MDB9LAkvKiBGb3IgMTAyNHg3NjggICovCisJe0xDRF9QQU5FTF9JRDNfMTI4MFg3NjgsIDB4MDAsIDB4MDB9LAkvKiBGb3IgMTI4MHg3NjggICovCisJe0xDRF9QQU5FTF9JRDRfMTI4MFgxMDI0LCAweDAwLCAweDAwfSwJLyogRm9yIDEyODB4MTAyNCAqLworCXtMQ0RfUEFORUxfSUQ1XzE0MDBYMTA1MCwgMHgwMCwgMHgwMH0sCS8qIEZvciAxNDAweDEwNTAgKi8KKwl7TENEX1BBTkVMX0lENl8xNjAwWDEyMDAsIDB4MEIsIDB4MDN9CS8qIEZvciAxNjAweDEyMDAgKi8KK307CisKK3N0cnVjdCBHRlhfRFBBX1NFVFRJTkcgR0ZYX0RQQV9TRVRUSU5HX1RCTF9WVDMzMjRbXSA9IHsKKy8qICBDbGtSYW5nZSwgRFZQMCwgRFZQMERhdGFEcml2aW5nLCAgRFZQMENsb2NrRHJpdmluZywgRFZQMSwKKwkJCQkJRFZQMURyaXZpbmcsIERGUEhpZ2gsIERGUExvdyAqLworLyogIENSOTYsIFNSMkFbNV0sIFNSMUJbMV0sIFNSMkFbNF0sIFNSMUVbMl0sIENSOUIsCisJCQkJCVNSNjUsICAgICAgICBDUjk3LCAgICBDUjk5ICAgKi8KKwkvKiBMQ0svVkNLIDwgMzAwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLworCXtEUEFfQ0xLX1JBTkdFXzMwTSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwKKwkgMHgwMH0sCisJLyogMzAwMDAwMDAgPCBMQ0svVkNLIDwgNTAwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLworCXtEUEFfQ0xLX1JBTkdFXzMwXzUwTSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwKKwkgMHgwMH0sCisJLyogNTAwMDAwMDAgPCBMQ0svVkNLIDwgNzAwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLworCXtEUEFfQ0xLX1JBTkdFXzUwXzcwTSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKwkgMHgwMH0sCisJLyogNzAwMDAwMDAgPCBMQ0svVkNLIDwgMTAwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KKwl7RFBBX0NMS19SQU5HRV83MF8xMDBNLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorCSAweDAwfSwKKwkvKiAxMDAwMDAwMDAgPCBMQ0svVkNLIDwgMTUwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLworCXtEUEFfQ0xLX1JBTkdFXzEwMF8xNTBNLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorCSAweDAwfSwKKwkvKiAxNTAwMDAwMCA8IExDSy9WQ0sgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLworCXtEUEFfQ0xLX1JBTkdFXzE1ME0sIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MEUsIDB4MDAsCisJIDB4MDB9LAorfTsKKworLyogRm9yIFZUMzMyNzogKi8KK3N0cnVjdCBWVDE2MzZfRFBBX1NFVFRJTkcgVlQxNjM2X0RQQV9TRVRUSU5HX1RCTF9WVDMzMjdbXSA9IHsKKwkvKiBQYW5lbCBJRCwgICAgICAgQ0xLX1NFTF9TVDFbMDldLCAgICBDTEtfU0VMX1NUMlswOF0gKi8KKwl7TENEX1BBTkVMX0lEMF82NDBYNDgwLCAweDAwLCAweDAwfSwJLyogRm9yIDY0MHg0ODAgICAqLworCXtMQ0RfUEFORUxfSUQxXzgwMFg2MDAsIDB4MDAsIDB4MDB9LAkvKiBGb3IgODAweDYwMCAgICovCisJe0xDRF9QQU5FTF9JRDJfMTAyNFg3NjgsIDB4MDAsIDB4MDB9LAkvKiBGb3IgMTAyNHg3NjggICovCisJe0xDRF9QQU5FTF9JRDNfMTI4MFg3NjgsIDB4MDAsIDB4MDB9LAkvKiBGb3IgMTI4MHg3NjggICovCisJe0xDRF9QQU5FTF9JRDRfMTI4MFgxMDI0LCAweDAwLCAweDAwfSwJLyogRm9yIDEyODB4MTAyNCAqLworCXtMQ0RfUEFORUxfSUQ1XzE0MDBYMTA1MCwgMHgwMCwgMHgwMH0sCS8qIEZvciAxNDAweDEwNTAgKi8KKwl7TENEX1BBTkVMX0lENl8xNjAwWDEyMDAsIDB4MDAsIDB4MDB9CS8qIEZvciAxNjAweDEyMDAgKi8KK307CisKK3N0cnVjdCBHRlhfRFBBX1NFVFRJTkcgR0ZYX0RQQV9TRVRUSU5HX1RCTF9WVDMzMjdbXSA9IHsKKy8qICBDbGtSYW5nZSxEVlAwLCBEVlAwRGF0YURyaXZpbmcsICBEVlAwQ2xvY2tEcml2aW5nLCBEVlAxLAorCQkJCQlEVlAxRHJpdmluZywgREZQSGlnaCwgICBERlBMb3cgKi8KKy8qICAgQ1I5NiwgU1IyQVs1XSwgU1IxQlsxXSwgU1IyQVs0XSwgU1IxRVsyXSwgQ1I5QiwKKwkJCQkJU1I2NSwgICAgICAgIENSOTcsICAgICAgQ1I5OSAgICovCisvKiBMQ0svVkNLIDwgMzAwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLwore0RQQV9DTEtfUkFOR0VfMzBNLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDA4LCAweDAxfSwKKy8qIDMwMDAwMDAwIDwgTENLL1ZDSyA8IDUwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KK3tEUEFfQ0xLX1JBTkdFXzMwXzUwTSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwOCwgMHgwMX0sCisvKiA1MDAwMDAwMCA8IExDSy9WQ0sgPCA3MDAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCit7RFBBX0NMS19SQU5HRV81MF83ME0sIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDgsIDB4MDF9LAorLyogNzAwMDAwMDAgPCBMQ0svVkNLIDwgMTAwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KK3tEUEFfQ0xLX1JBTkdFXzcwXzEwME0sIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDgsIDB4MDN9LAorLyogMTAwMDAwMDAwIDwgTENLL1ZDSyA8IDE1MDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KK3tEUEFfQ0xLX1JBTkdFXzEwMF8xNTBNLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAxLCAweDAyfSwKKy8qIDE1MDAwMDAwIDwgTENLL1ZDSyB3aWxsIHVzZSB0aGlzIHZhbHVlICovCit7RFBBX0NMS19SQU5HRV8xNTBNLCAweDAwLCAweDIwLCAweDAwLCAweDEwLCAweDAwLCAweDAzLCAweDAwLCAweDBELCAweDAzfSwKK307CisKKy8qIEZvciBWVDMzNjQ6ICovCitzdHJ1Y3QgR0ZYX0RQQV9TRVRUSU5HIEdGWF9EUEFfU0VUVElOR19UQkxfVlQzMzY0W10gPSB7CisvKiAgQ2xrUmFuZ2UsRFZQMCwgRFZQMERhdGFEcml2aW5nLCAgRFZQMENsb2NrRHJpdmluZywgRFZQMSwKKwkJCQkJRFZQMURyaXZpbmcsIERGUEhpZ2gsICAgREZQTG93ICovCisvKiAgIENSOTYsIFNSMkFbNV0sIFNSMUJbMV0sIFNSMkFbNF0sIFNSMUVbMl0sIENSOUIsCisJCQkJCVNSNjUsICAgICAgICBDUjk3LCAgICAgIENSOTkgICAqLworLyogTENLL1ZDSyA8IDMwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KK3tEUEFfQ0xLX1JBTkdFXzMwTSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwOH0sCisvKiAzMDAwMDAwMCA8IExDSy9WQ0sgPCA1MDAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCit7RFBBX0NMS19SQU5HRV8zMF81ME0sIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDh9LAorLyogNTAwMDAwMDAgPCBMQ0svVkNLIDwgNzAwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLwore0RQQV9DTEtfUkFOR0VfNTBfNzBNLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA4fSwKKy8qIDcwMDAwMDAwIDwgTENLL1ZDSyA8IDEwMDAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCit7RFBBX0NMS19SQU5HRV83MF8xMDBNLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA4fSwKKy8qIDEwMDAwMDAwMCA8IExDSy9WQ0sgPCAxNTAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCit7RFBBX0NMS19SQU5HRV8xMDBfMTUwTSwgMHgwMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwOH0sCisvKiAxNTAwMDAwMCA8IExDSy9WQ0sgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLwore0RQQV9DTEtfUkFOR0VfMTUwTSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgxMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwOH0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdGJsRFBBU2V0dGluZy5oIGIvZHJpdmVycy92aWRlby92aWEvdGJsRFBBU2V0dGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNjVhODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS90YmxEUEFTZXR0aW5nLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfVEJMRFBBU0VUVElOR19IXworI2RlZmluZSBfVEJMRFBBU0VUVElOR19IXworI2luY2x1ZGUgImdsb2JhbC5oIgorCisjZGVmaW5lIERQQV9DTEtfMzBNICAgICAgIDMwMDAwMDAwCisjZGVmaW5lIERQQV9DTEtfNTBNICAgICAgIDUwMDAwMDAwCisjZGVmaW5lIERQQV9DTEtfNzBNICAgICAgIDcwMDAwMDAwCisjZGVmaW5lIERQQV9DTEtfMTAwTSAgICAgIDEwMDAwMDAwMAorI2RlZmluZSBEUEFfQ0xLXzE1ME0gICAgICAxNTAwMDAwMDAKKworZW51bSBEUEFfUkFOR0UgeworCURQQV9DTEtfUkFOR0VfMzBNLAorCURQQV9DTEtfUkFOR0VfMzBfNTBNLAorCURQQV9DTEtfUkFOR0VfNTBfNzBNLAorCURQQV9DTEtfUkFOR0VfNzBfMTAwTSwKKwlEUEFfQ0xLX1JBTkdFXzEwMF8xNTBNLAorCURQQV9DTEtfUkFOR0VfMTUwTQorfTsKKworZXh0ZXJuIHN0cnVjdCBWVDE2MzZfRFBBX1NFVFRJTkcgVlQxNjM2X0RQQV9TRVRUSU5HX1RCTF9WVDMzMjRbN107CitleHRlcm4gc3RydWN0IEdGWF9EUEFfU0VUVElORyBHRlhfRFBBX1NFVFRJTkdfVEJMX1ZUMzMyNFs2XTsKK2V4dGVybiBzdHJ1Y3QgVlQxNjM2X0RQQV9TRVRUSU5HIFZUMTYzNl9EUEFfU0VUVElOR19UQkxfVlQzMzI3WzddOworZXh0ZXJuIHN0cnVjdCBHRlhfRFBBX1NFVFRJTkcgR0ZYX0RQQV9TRVRUSU5HX1RCTF9WVDMzMjdbXTsKK2V4dGVybiBzdHJ1Y3QgR0ZYX0RQQV9TRVRUSU5HIEdGWF9EUEFfU0VUVElOR19UQkxfVlQzMzY0WzZdOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV9pMmMuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjNlZDRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhX2kyYy5jCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisKK3N0YXRpYyB2b2lkIHZpYV9pMmNfc2V0c2NsKHZvaWQgKmRhdGEsIGludCBzdGF0ZSkKK3sKKwl1OCB2YWw7CisJc3RydWN0IHZpYV9pMmNfc3R1ZmYgKnZpYV9pMmNfY2hhbiA9IChzdHJ1Y3QgdmlhX2kyY19zdHVmZiAqKWRhdGE7CisKKwl2YWwgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgdmlhX2kyY19jaGFuLT5pMmNfcG9ydCkgJiAweEYwOworCWlmIChzdGF0ZSkKKwkJdmFsIHw9IDB4MjA7CisJZWxzZQorCQl2YWwgJj0gfjB4MjA7CisJc3dpdGNoICh2aWFfaTJjX2NoYW4tPmkyY19wb3J0KSB7CisJY2FzZSBJMkNQT1JUSU5ERVg6CisJCXZhbCB8PSAweDAxOworCQlicmVhazsKKwljYXNlIEdQSU9QT1JUSU5ERVg6CisJCXZhbCB8PSAweDgwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVR19NU0coInZpYV9pMmM6IHNwZWNpZnkgd3JvbmcgaTJjIHBvcnQuXG4iKTsKKwl9CisJdmlhZmJfd3JpdGVfcmVnKHZpYV9pMmNfY2hhbi0+aTJjX3BvcnQsIFZJQVNSLCB2YWwpOworfQorCitzdGF0aWMgaW50IHZpYV9pMmNfZ2V0c2NsKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHZpYV9pMmNfc3R1ZmYgKnZpYV9pMmNfY2hhbiA9IChzdHJ1Y3QgdmlhX2kyY19zdHVmZiAqKWRhdGE7CisKKwlpZiAodmlhZmJfcmVhZF9yZWcoVklBU1IsIHZpYV9pMmNfY2hhbi0+aTJjX3BvcnQpICYgMHgwOCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlhX2kyY19nZXRzZGEodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdmlhX2kyY19zdHVmZiAqdmlhX2kyY19jaGFuID0gKHN0cnVjdCB2aWFfaTJjX3N0dWZmICopZGF0YTsKKworCWlmICh2aWFmYl9yZWFkX3JlZyhWSUFTUiwgdmlhX2kyY19jaGFuLT5pMmNfcG9ydCkgJiAweDA0KQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmlhX2kyY19zZXRzZGEodm9pZCAqZGF0YSwgaW50IHN0YXRlKQoreworCXU4IHZhbDsKKwlzdHJ1Y3QgdmlhX2kyY19zdHVmZiAqdmlhX2kyY19jaGFuID0gKHN0cnVjdCB2aWFfaTJjX3N0dWZmICopZGF0YTsKKworCXZhbCA9IHZpYWZiX3JlYWRfcmVnKFZJQVNSLCB2aWFfaTJjX2NoYW4tPmkyY19wb3J0KSAmIDB4RjA7CisJaWYgKHN0YXRlKQorCQl2YWwgfD0gMHgxMDsKKwllbHNlCisJCXZhbCAmPSB+MHgxMDsKKwlzd2l0Y2ggKHZpYV9pMmNfY2hhbi0+aTJjX3BvcnQpIHsKKwljYXNlIEkyQ1BPUlRJTkRFWDoKKwkJdmFsIHw9IDB4MDE7CisJCWJyZWFrOworCWNhc2UgR1BJT1BPUlRJTkRFWDoKKwkJdmFsIHw9IDB4NDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFQlVHX01TRygidmlhX2kyYzogc3BlY2lmeSB3cm9uZyBpMmMgcG9ydC5cbiIpOworCX0KKwl2aWFmYl93cml0ZV9yZWcodmlhX2kyY19jaGFuLT5pMmNfcG9ydCwgVklBU1IsIHZhbCk7Cit9CisKK2ludCB2aWFmYl9pMmNfcmVhZGJ5dGUodTggc2xhdmVfYWRkciwgdTggaW5kZXgsIHU4ICpwZGF0YSkKK3sKKwl1OCBtbTFbXSA9IHsweDAwfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdOworCisJKnBkYXRhID0gMDsKKwltc2dzWzBdLmZsYWdzID0gMDsKKwltc2dzWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnc1swXS5hZGRyID0gbXNnc1sxXS5hZGRyID0gc2xhdmVfYWRkciAvIDI7CisJbW0xWzBdID0gaW5kZXg7CisJbXNnc1swXS5sZW4gPSAxOyBtc2dzWzFdLmxlbiA9IDE7CisJbXNnc1swXS5idWYgPSBtbTE7IG1zZ3NbMV0uYnVmID0gcGRhdGE7CisJaTJjX3RyYW5zZmVyKCZ2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuYWRhcHRlciwgbXNncywgMik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZpYWZiX2kyY193cml0ZWJ5dGUodTggc2xhdmVfYWRkciwgdTggaW5kZXgsIHU4IGRhdGEpCit7CisJdTggbXNnWzJdID0geyBpbmRleCwgZGF0YSB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ3M7CisKKwltc2dzLmZsYWdzID0gMDsKKwltc2dzLmFkZHIgPSBzbGF2ZV9hZGRyIC8gMjsKKwltc2dzLmxlbiA9IDI7CisJbXNncy5idWYgPSBtc2c7CisJcmV0dXJuIGkyY190cmFuc2ZlcigmdmlhcGFyaW5mby0+aTJjX3N0dWZmLmFkYXB0ZXIsICZtc2dzLCAxKTsKK30KKworaW50IHZpYWZiX2kyY19yZWFkYnl0ZXModTggc2xhdmVfYWRkciwgdTggaW5kZXgsIHU4ICpidWZmLCBpbnQgYnVmZl9sZW4pCit7CisJdTggbW0xW10gPSB7MHgwMH07CisJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKKworCW1zZ3NbMF0uZmxhZ3MgPSAwOworCW1zZ3NbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKKwltc2dzWzBdLmFkZHIgPSBtc2dzWzFdLmFkZHIgPSBzbGF2ZV9hZGRyIC8gMjsKKwltbTFbMF0gPSBpbmRleDsKKwltc2dzWzBdLmxlbiA9IDE7IG1zZ3NbMV0ubGVuID0gYnVmZl9sZW47CisJbXNnc1swXS5idWYgPSBtbTE7IG1zZ3NbMV0uYnVmID0gYnVmZjsKKwlpMmNfdHJhbnNmZXIoJnZpYXBhcmluZm8tPmkyY19zdHVmZi5hZGFwdGVyLCBtc2dzLCAyKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHZpYWZiX2NyZWF0ZV9pMmNfYnVzKHZvaWQgKnZpYXBhcikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB2aWFmYl9wYXIgKnBhciA9IChzdHJ1Y3QgdmlhZmJfcGFyICopdmlhcGFyOworCisJc3RyY3B5KHBhci0+aTJjX3N0dWZmLmFkYXB0ZXIubmFtZSwgInZpYV9pMmMiKTsKKwlwYXItPmkyY19zdHVmZi5pMmNfcG9ydCA9IDB4MDsKKwlwYXItPmkyY19zdHVmZi5hZGFwdGVyLm93bmVyID0gVEhJU19NT0RVTEU7CisJcGFyLT5pMmNfc3R1ZmYuYWRhcHRlci5pZCA9IDB4MDFGRkZGOworCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIuY2xhc3MgPSAwOworCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIuYWxnb19kYXRhID0gJnBhci0+aTJjX3N0dWZmLmFsZ287CisJcGFyLT5pMmNfc3R1ZmYuYWRhcHRlci5kZXYucGFyZW50ID0gTlVMTDsKKwlwYXItPmkyY19zdHVmZi5hbGdvLnNldHNkYSA9IHZpYV9pMmNfc2V0c2RhOworCXBhci0+aTJjX3N0dWZmLmFsZ28uc2V0c2NsID0gdmlhX2kyY19zZXRzY2w7CisJcGFyLT5pMmNfc3R1ZmYuYWxnby5nZXRzZGEgPSB2aWFfaTJjX2dldHNkYTsKKwlwYXItPmkyY19zdHVmZi5hbGdvLmdldHNjbCA9IHZpYV9pMmNfZ2V0c2NsOworCXBhci0+aTJjX3N0dWZmLmFsZ28udWRlbGF5ID0gNDA7CisJcGFyLT5pMmNfc3R1ZmYuYWxnby50aW1lb3V0ID0gMjA7CisJcGFyLT5pMmNfc3R1ZmYuYWxnby5kYXRhID0gJnBhci0+aTJjX3N0dWZmOworCisJaTJjX3NldF9hZGFwZGF0YSgmcGFyLT5pMmNfc3R1ZmYuYWRhcHRlciwgJnBhci0+aTJjX3N0dWZmKTsKKworCS8qIFJhaXNlIFNDTCBhbmQgU0RBICovCisJcGFyLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBJMkNQT1JUSU5ERVg7CisJdmlhX2kyY19zZXRzZGEoJnBhci0+aTJjX3N0dWZmLCAxKTsKKwl2aWFfaTJjX3NldHNjbCgmcGFyLT5pMmNfc3R1ZmYsIDEpOworCisJcGFyLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBHUElPUE9SVElOREVYOworCXZpYV9pMmNfc2V0c2RhKCZwYXItPmkyY19zdHVmZiwgMSk7CisJdmlhX2kyY19zZXRzY2woJnBhci0+aTJjX3N0dWZmLCAxKTsKKwl1ZGVsYXkoMjApOworCisJcmV0ID0gaTJjX2JpdF9hZGRfYnVzKCZwYXItPmkyY19zdHVmZi5hZGFwdGVyKTsKKwlpZiAocmV0ID09IDApCisJCURFQlVHX01TRygiSTJDIGJ1cyAlcyByZWdpc3RlcmVkLlxuIiwKKwkJcGFyLT5pMmNfc3R1ZmYuYWRhcHRlci5uYW1lKTsKKwllbHNlCisJCURFQlVHX01TRygiRmFpbGVkIHRvIHJlZ2lzdGVyIEkyQyBidXMgJXMuXG4iLAorCQkJcGFyLT5pMmNfc3R1ZmYuYWRhcHRlci5uYW1lKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHZpYWZiX2RlbGV0ZV9pMmNfYnVzcyh2b2lkICpwYXIpCit7CisJaTJjX2RlbF9hZGFwdGVyKCYoKHN0cnVjdCB2aWFmYl9wYXIgKilwYXIpLT5pMmNfc3R1ZmYuYWRhcHRlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfaTJjLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExMzI0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV9pMmMuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX1ZJQV9JMkNfSF9fCisjZGVmaW5lIF9fVklBX0kyQ19IX18KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorCitzdHJ1Y3QgdmlhX2kyY19zdHVmZiB7CisJdTE2IGkyY19wb3J0OwkJCS8qIEdQSU8gb3IgSTJDIHBvcnQgKi8KKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYWxnbzsKK307CisKKyNkZWZpbmUgSTJDUE9SVCAgICAgICAgICAgMHgzYzQKKyNkZWZpbmUgSTJDUE9SVElOREVYICAgICAgMHgzMQorI2RlZmluZSBHUElPUE9SVCAgICAgICAgICAweDNDNAorI2RlZmluZSBHUElPUE9SVElOREVYICAgICAweDJDCisjZGVmaW5lIEkyQ19CVVMgICAgICAgICAgICAgMQorI2RlZmluZSBHUElPX0JVUyAgICAgICAgICAgIDIKKyNkZWZpbmUgREVMQVlQT1JUICAgICAgICAgICAweDNDMworCitpbnQgdmlhZmJfaTJjX3JlYWRieXRlKHU4IHNsYXZlX2FkZHIsIHU4IGluZGV4LCB1OCAqcGRhdGEpOworaW50IHZpYWZiX2kyY193cml0ZWJ5dGUodTggc2xhdmVfYWRkciwgdTggaW5kZXgsIHU4IGRhdGEpOworaW50IHZpYWZiX2kyY19yZWFkYnl0ZXModTggc2xhdmVfYWRkciwgdTggaW5kZXgsIHU4ICpidWZmLCBpbnQgYnVmZl9sZW4pOworaW50IHZpYWZiX2NyZWF0ZV9pMmNfYnVzKHZvaWQgKnBhcik7Cit2b2lkIHZpYWZiX2RlbGV0ZV9pMmNfYnVzcyh2b2lkICpwYXIpOworI2VuZGlmIC8qIF9fVklBX0kyQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV91dGlsaXR5LmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1M2MzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5jCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisKK3ZvaWQgdmlhZmJfZ2V0X2RldmljZV9zdXBwb3J0X3N0YXRlKHUzMiAqc3VwcG9ydF9zdGF0ZSkKK3sKKwkqc3VwcG9ydF9zdGF0ZSA9IENSVF9EZXZpY2U7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfbmFtZSA9PSBWVDE2MzJfVE1EUykKKwkJKnN1cHBvcnRfc3RhdGUgfD0gRFZJX0RldmljZTsKKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lID09IFZUMTYzMV9MVkRTKQorCQkqc3VwcG9ydF9zdGF0ZSB8PSBMQ0RfRGV2aWNlOworfQorCit2b2lkIHZpYWZiX2dldF9kZXZpY2VfY29ubmVjdF9zdGF0ZSh1MzIgKmNvbm5lY3Rfc3RhdGUpCit7CisJYm9vbCBtb2JpbGUgPSBmYWxzZTsKKworCSpjb25uZWN0X3N0YXRlID0gQ1JUX0RldmljZTsKKworCWlmICh2aWFmYl9kdmlfc2Vuc2UoKSkKKwkJKmNvbm5lY3Rfc3RhdGUgfD0gRFZJX0RldmljZTsKKworCXZpYWZiX2xjZF9nZXRfbW9iaWxlX3N0YXRlKCZtb2JpbGUpOworCWlmIChtb2JpbGUpCisJCSpjb25uZWN0X3N0YXRlIHw9IExDRF9EZXZpY2U7Cit9CisKK2Jvb2wgdmlhZmJfbGNkX2dldF9zdXBwb3J0X2V4cGFuZF9zdGF0ZSh1MzIgeHJlcywgdTMyIHlyZXMpCit7CisJdW5zaWduZWQgaW50IHN1cHBvcnRfc3RhdGUgPSAwOworCisJc3dpdGNoICh2aWFmYl9sY2RfcGFuZWxfaWQpIHsKKwljYXNlIExDRF9QQU5FTF9JRDBfNjQwWDQ4MDoKKwkJaWYgKCh4cmVzIDwgNjQwKSAmJiAoeXJlcyA8IDQ4MCkpCisJCQlzdXBwb3J0X3N0YXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIExDRF9QQU5FTF9JRDFfODAwWDYwMDoKKwkJaWYgKCh4cmVzIDwgODAwKSAmJiAoeXJlcyA8IDYwMCkpCisJCQlzdXBwb3J0X3N0YXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIExDRF9QQU5FTF9JRDJfMTAyNFg3Njg6CisJCWlmICgoeHJlcyA8IDEwMjQpICYmICh5cmVzIDwgNzY4KSkKKwkJCXN1cHBvcnRfc3RhdGUgPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgTENEX1BBTkVMX0lEM18xMjgwWDc2ODoKKwkJaWYgKCh4cmVzIDwgMTI4MCkgJiYgKHlyZXMgPCA3NjgpKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSUQ0XzEyODBYMTAyNDoKKwkJaWYgKCh4cmVzIDwgMTI4MCkgJiYgKHlyZXMgPCAxMDI0KSkKKwkJCXN1cHBvcnRfc3RhdGUgPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgTENEX1BBTkVMX0lENV8xNDAwWDEwNTA6CisJCWlmICgoeHJlcyA8IDE0MDApICYmICh5cmVzIDwgMTA1MCkpCisJCQlzdXBwb3J0X3N0YXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIExDRF9QQU5FTF9JRDZfMTYwMFgxMjAwOgorCQlpZiAoKHhyZXMgPCAxNjAwKSAmJiAoeXJlcyA8IDEyMDApKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSUQ3XzEzNjZYNzY4OgorCQlpZiAoKHhyZXMgPCAxMzY2KSAmJiAoeXJlcyA8IDc2OCkpCisJCQlzdXBwb3J0X3N0YXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIExDRF9QQU5FTF9JRDhfMTAyNFg2MDA6CisJCWlmICgoeHJlcyA8IDEwMjQpICYmICh5cmVzIDwgNjAwKSkKKwkJCXN1cHBvcnRfc3RhdGUgPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgTENEX1BBTkVMX0lEOV8xMjgwWDgwMDoKKwkJaWYgKCh4cmVzIDwgMTI4MCkgJiYgKHlyZXMgPCA4MDApKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSURBXzgwMFg0ODA6CisJCWlmICgoeHJlcyA8IDgwMCkgJiYgKHlyZXMgPCA0ODApKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSURCXzEzNjBYNzY4OgorCQlpZiAoKHhyZXMgPCAxMzYwKSAmJiAoeXJlcyA8IDc2OCkpCisJCQlzdXBwb3J0X3N0YXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIExDRF9QQU5FTF9JRENfNDgwWDY0MDoKKwkJaWYgKCh4cmVzIDwgNDgwKSAmJiAoeXJlcyA8IDY0MCkpCisJCQlzdXBwb3J0X3N0YXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzdXBwb3J0X3N0YXRlID0gZmFsc2U7CisJCWJyZWFrOworCX0KKworCXJldHVybiBzdXBwb3J0X3N0YXRlOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qICAgICAgICAgICAgICAgICAgICAgIEdhbW1hIEZ1bmN0aW9uIEltcGxlbWVudGF0aW9uKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCit2b2lkIHZpYWZiX3NldF9nYW1tYV90YWJsZShpbnQgYnBwLCB1bnNpZ25lZCBpbnQgKmdhbW1hX3RhYmxlKQoreworCWludCBpLCBzcjFhOworCWludCBhY3RpdmVfZGV2aWNlX2Ftb3VudCA9IDA7CisJaW50IGRldmljZV9zdGF0dXMgPSB2aWFmYl9EZXZpY2VTdGF0dXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHZpYWZiX0RldmljZVN0YXR1cykgKiA4OyBpKyspIHsKKwkJaWYgKGRldmljZV9zdGF0dXMgJiAxKQorCQkJYWN0aXZlX2RldmljZV9hbW91bnQrKzsKKwkJZGV2aWNlX3N0YXR1cyA+Pj0gMTsKKwl9CisKKwkvKiA4IGJwcCBtb2RlIGNhbid0IGFkanVzdCBnYW1tYSAqLworCWlmIChicHAgPT0gOCkKKwkJcmV0dXJuIDsKKworCS8qIEVuYWJsZSBHYW1tYSAqLworCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgorCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTYsIFZJQVNSLCAweDgwLCBCSVQ3KTsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9LODAwOgorCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjMzLCBWSUFDUiwgMHg4MCwgQklUNyk7CisJCWJyZWFrOworCX0KKwlzcjFhID0gKHVuc2lnbmVkIGludCl2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxQSk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxQSwgVklBU1IsIDB4MCwgQklUMCk7CisKKwkvKiBGaWxsIElHQTEgR2FtbWEgVGFibGUgKi8KKwlvdXRiKDAsIExVVF9JTkRFWF9XUklURSk7CisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCW91dGIoZ2FtbWFfdGFibGVbaV0gPj4gMTYsIExVVF9EQVRBKTsKKwkJb3V0YihnYW1tYV90YWJsZVtpXSA+PiA4ICYgMHhGRiwgTFVUX0RBVEEpOworCQlvdXRiKGdhbW1hX3RhYmxlW2ldICYgMHhGRiwgTFVUX0RBVEEpOworCX0KKworCS8qIElmIGFkanVzdCBHYW1tYSB2YWx1ZSBpbiBTQU1NLCBmaWxsIElHQTEsCisJICAgSUdBMiBHYW1tYSB0YWJsZSBzaW11bHRhbm91cy4gKi8KKwkvKiBTd2l0Y2ggdG8gSUdBMiBHYW1tYSBUYWJsZSAqLworCWlmICgoYWN0aXZlX2RldmljZV9hbW91bnQgPiAxKSAmJgorCQkhKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0KKwkJVU5JQ0hST01FX0NMRTI2NikgJiYKKwkJKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfcmV2aXNpb24gPCAxNSkpKSB7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUEsIFZJQVNSLCAweDAxLCBCSVQwKTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDIsIEJJVDEpOworCisJCS8qIEZpbGwgSUdBMiBHYW1tYSBUYWJsZSAqLworCQlvdXRiKDAsIExVVF9JTkRFWF9XUklURSk7CisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJb3V0YihnYW1tYV90YWJsZVtpXSA+PiAxNiwgTFVUX0RBVEEpOworCQkJb3V0YihnYW1tYV90YWJsZVtpXSA+PiA4ICYgMHhGRiwgTFVUX0RBVEEpOworCQkJb3V0YihnYW1tYV90YWJsZVtpXSAmIDB4RkYsIExVVF9EQVRBKTsKKwkJfQorCX0KKwl2aWFmYl93cml0ZV9yZWcoU1IxQSwgVklBU1IsIHNyMWEpOworfQorCit2b2lkIHZpYWZiX2dldF9nYW1tYV90YWJsZSh1bnNpZ25lZCBpbnQgKmdhbW1hX3RhYmxlKQoreworCXVuc2lnbmVkIGNoYXIgY29sb3JfciwgY29sb3JfZywgY29sb3JfYjsKKwl1bnNpZ25lZCBjaGFyIHNyMWEgPSAwOworCWludCBpOworCisJLyogRW5hYmxlIEdhbW1hICovCisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJY2FzZSBVTklDSFJPTUVfSzQwMDoKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNiwgVklBU1IsIDB4ODAsIEJJVDcpOworCQlicmVhazsKKworCWNhc2UgVU5JQ0hST01FX0s4MDA6CisJY2FzZSBVTklDSFJPTUVfUE04MDA6CisJY2FzZSBVTklDSFJPTUVfQ043MDA6CisJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzMsIFZJQUNSLCAweDgwLCBCSVQ3KTsKKwkJYnJlYWs7CisJfQorCXNyMWEgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxQSk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxQSwgVklBU1IsIDB4MCwgQklUMCk7CisKKwkvKiBSZWFkaW5nIGdhbW1hIHRhYmxlIHRvIGdldCBjb2xvciB2YWx1ZSAqLworCW91dGIoMCwgTFVUX0lOREVYX1JFQUQpOworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQljb2xvcl9yID0gaW5iKExVVF9EQVRBKTsKKwkJY29sb3JfZyA9IGluYihMVVRfREFUQSk7CisJCWNvbG9yX2IgPSBpbmIoTFVUX0RBVEEpOworCQlnYW1tYV90YWJsZVtpXSA9CisJCSAgICAoKCgodTMyKSBjb2xvcl9yKSA8PCAxNikgfAorCQkgICAgICgoKHUxNikgY29sb3JfZykgPDwgOCkpIHwgY29sb3JfYjsKKwl9CisJdmlhZmJfd3JpdGVfcmVnKFNSMUEsIFZJQVNSLCBzcjFhKTsKK30KKwordm9pZCB2aWFmYl9nZXRfZ2FtbWFfc3VwcG9ydF9zdGF0ZShpbnQgYnBwLCB1bnNpZ25lZCBpbnQgKnN1cHBvcnRfc3RhdGUpCit7CisJaWYgKGJwcCA9PSA4KQorCQkqc3VwcG9ydF9zdGF0ZSA9IE5vbmVfRGV2aWNlOworCWVsc2UKKwkJKnN1cHBvcnRfc3RhdGUgPSBDUlRfRGV2aWNlIHwgRFZJX0RldmljZSB8IExDRF9EZXZpY2U7Cit9CisKK2ludCB2aWFmYl9pbnB1dF9wYXJhbWV0ZXJfY29udmVydGVyKGludCBwYXJhbWV0ZXJfdmFsdWUpCit7CisJaW50IHJlc3VsdDsKKworCWlmIChwYXJhbWV0ZXJfdmFsdWUgPj0gMSAmJiBwYXJhbWV0ZXJfdmFsdWUgPD0gOSkKKwkJcmVzdWx0ID0gMSA8PCAocGFyYW1ldGVyX3ZhbHVlIC0gMSk7CisJZWxzZQorCQlyZXN1bHQgPSAxOworCisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV91dGlsaXR5LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZDQ1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisjaWZuZGVmIF9fVklBVVRJTElUWV9IX18KKyNkZWZpbmUgX19WSUFVVElMSVRZX0hfXworCisvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gZ2V0IGluZm9tYXRpb24gYWJvdXQgZGV2aWNlJ3Mgc3RhdGUgKi8KK3ZvaWQgdmlhZmJfZ2V0X2RldmljZV9zdXBwb3J0X3N0YXRlKHUzMiAqc3VwcG9ydF9zdGF0ZSk7Cit2b2lkIHZpYWZiX2dldF9kZXZpY2VfY29ubmVjdF9zdGF0ZSh1MzIgKmNvbm5lY3Rfc3RhdGUpOworYm9vbCB2aWFmYl9sY2RfZ2V0X3N1cHBvcnRfZXhwYW5kX3N0YXRlKHUzMiB4cmVzLCB1MzIgeXJlcyk7CisKKy8qIFRoZXNlIGZ1bmN0aW9uIGFyZSB1c2VkIHRvIGFjY2VzcyBnYW1tYSB0YWJsZSAqLwordm9pZCB2aWFmYl9zZXRfZ2FtbWFfdGFibGUoaW50IGJwcCwgdW5zaWduZWQgaW50ICpnYW1tYV90YWJsZSk7Cit2b2lkIHZpYWZiX2dldF9nYW1tYV90YWJsZSh1bnNpZ25lZCBpbnQgKmdhbW1hX3RhYmxlKTsKK3ZvaWQgdmlhZmJfZ2V0X2dhbW1hX3N1cHBvcnRfc3RhdGUoaW50IGJwcCwgdW5zaWduZWQgaW50ICpzdXBwb3J0X3N0YXRlKTsKK2ludCB2aWFmYl9pbnB1dF9wYXJhbWV0ZXJfY29udmVydGVyKGludCBwYXJhbWV0ZXJfdmFsdWUpOworCisjZW5kaWYgLyogX19WSUFVVElMSVRZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEzMmVhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKQEAgLTAsMCArMSwyNTcxIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjZGVmaW5lIF9NQVNURVJfRklMRQorCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisKK3N0YXRpYyBpbnQgTUFYX0NVUlMgPSAzMjsKK3N0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gZGVmYXVsdF92YXI7CitzdGF0aWMgY2hhciAqdmlhZmJfbmFtZSA9ICJWaWEiOworc3RhdGljIHUzMiBwc2V1ZG9fcGFsWzE3XTsKKworLyogdmlkZW8gbW9kZSAqLworc3RhdGljIGNoYXIgKnZpYWZiX21vZGUgPSAiNjQweDQ4MCI7CitzdGF0aWMgY2hhciAqdmlhZmJfbW9kZTEgPSAiNjQweDQ4MCI7CitzdGF0aWMgaW50IHZpYWZiX3Jlc01vZGUgPSBWSUFfUkVTXzY0MFg0ODA7CisKKy8qIEFkZGVkIGZvciBzcGVjaWZ5aW5nIGFjdGl2ZSBkZXZpY2VzLiovCitjaGFyICp2aWFmYl9hY3RpdmVfZGV2ID0gIiI7CisKKy8qIEFkZGVkIGZvciBzcGVjaWZ5aW5nIHZpZGVvIG9uIGRldmljZXMuKi8KK2NoYXIgKnZpYWZiX3ZpZGVvX2RldiA9ICIiOworCisvKkFkZGVkIGZvciBzcGVjaWZ5IGxjZCBvdXRwdXQgcG9ydCovCitjaGFyICp2aWFmYl9sY2RfcG9ydCA9ICIiOworY2hhciAqdmlhZmJfZHZpX3BvcnQgPSAiIjsKKworc3RhdGljIHZvaWQgdmlhZmJfc2V0X2RldmljZShzdHJ1Y3QgZGV2aWNlX3QgYWN0aXZlX2Rldik7CitzdGF0aWMgaW50IGFwcGx5X2RldmljZV9zZXR0aW5nKHN0cnVjdCB2aWFmYl9pb2N0bF9zZXR0aW5nIHNldHRpbmdfaW5mbywKKwkJCSBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CitzdGF0aWMgdm9pZCBhcHBseV9zZWNvbmRfbW9kZV9zZXR0aW5nKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbworCSpzZWNfdmFyKTsKK3N0YXRpYyB2b2lkIHJldHJpZXZlX2RldmljZV9zZXR0aW5nKHN0cnVjdCB2aWFmYl9pb2N0bF9zZXR0aW5nCisJKnNldHRpbmdfaW5mbyk7CitzdGF0aWMgdm9pZCB2aWFmYl9zZXRfdmlkZW9fZGV2aWNlKHUzMiB2aWRlb19kZXZfaW5mbyk7CitzdGF0aWMgdm9pZCB2aWFmYl9nZXRfdmlkZW9fZGV2aWNlKHUzMiAqdmlkZW9fZGV2X2luZm8pOworCisvKiBNb2RlIGluZm9ybWF0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHZpYWZiX21vZGVpbmZvIHZpYWZiX21vZGVudHJ5W10gPSB7CisJezQ4MCwgNjQwLCBWSUFfUkVTXzQ4MFg2NDAsICI0ODB4NjQwIn0sCisJezY0MCwgNDgwLCBWSUFfUkVTXzY0MFg0ODAsICI2NDB4NDgwIn0sCisJezgwMCwgNDgwLCBWSUFfUkVTXzgwMFg0ODAsICI4MDB4NDgwIn0sCisJezgwMCwgNjAwLCBWSUFfUkVTXzgwMFg2MDAsICI4MDB4NjAwIn0sCisJezEwMjQsIDc2OCwgVklBX1JFU18xMDI0WDc2OCwgIjEwMjR4NzY4In0sCisJezExNTIsIDg2NCwgVklBX1JFU18xMTUyWDg2NCwgIjExNTJ4ODY0In0sCisJezEyODAsIDEwMjQsIFZJQV9SRVNfMTI4MFgxMDI0LCAiMTI4MHgxMDI0In0sCisJezE2MDAsIDEyMDAsIFZJQV9SRVNfMTYwMFgxMjAwLCAiMTYwMHgxMjAwIn0sCisJezE0NDAsIDEwNTAsIFZJQV9SRVNfMTQ0MFgxMDUwLCAiMTQ0MHgxMDUwIn0sCisJezEyODAsIDc2OCwgVklBX1JFU18xMjgwWDc2OCwgIjEyODB4NzY4In0sCisJezEyODAsIDgwMCwgVklBX1JFU18xMjgwWDgwMCwgIjEyODB4ODAwIn0sCisJezEyODAsIDk2MCwgVklBX1JFU18xMjgwWDk2MCwgIjEyODB4OTYwIn0sCisJezE5MjAsIDE0NDAsIFZJQV9SRVNfMTkyMFgxNDQwLCAiMTkyMHgxNDQwIn0sCisJezg0OCwgNDgwLCBWSUFfUkVTXzg0OFg0ODAsICI4NDh4NDgwIn0sCisJezE0MDAsIDEwNTAsIFZJQV9SRVNfMTQwMFgxMDUwLCAiMTQwMHgxMDUwIn0sCisJezcyMCwgNDgwLCBWSUFfUkVTXzcyMFg0ODAsICI3MjB4NDgwIn0sCisJezcyMCwgNTc2LCBWSUFfUkVTXzcyMFg1NzYsICI3MjB4NTc2In0sCisJezEwMjQsIDUxMiwgVklBX1JFU18xMDI0WDUxMiwgIjEwMjR4NTEyIn0sCisJezEwMjQsIDU3NiwgVklBX1JFU18xMDI0WDU3NiwgIjEwMjR4NTc2In0sCisJezEwMjQsIDYwMCwgVklBX1JFU18xMDI0WDYwMCwgIjEwMjR4NjAwIn0sCisJezEyODAsIDcyMCwgVklBX1JFU18xMjgwWDcyMCwgIjEyODB4NzIwIn0sCisJezE5MjAsIDEwODAsIFZJQV9SRVNfMTkyMFgxMDgwLCAiMTkyMHgxMDgwIn0sCisJezEzNjYsIDc2OCwgVklBX1JFU18xMzY4WDc2OCwgIjEzNjh4NzY4In0sCisJezE2ODAsIDEwNTAsIFZJQV9SRVNfMTY4MFgxMDUwLCAiMTY4MHgxMDUwIn0sCisJezk2MCwgNjAwLCBWSUFfUkVTXzk2MFg2MDAsICI5NjB4NjAwIn0sCisJezEwMDAsIDYwMCwgVklBX1JFU18xMDAwWDYwMCwgIjEwMDB4NjAwIn0sCisJezEwMjQsIDU3NiwgVklBX1JFU18xMDI0WDU3NiwgIjEwMjR4NTc2In0sCisJezEwMjQsIDYwMCwgVklBX1JFU18xMDI0WDYwMCwgIjEwMjR4NjAwIn0sCisJezEwODgsIDYxMiwgVklBX1JFU18xMDg4WDYxMiwgIjEwODh4NjEyIn0sCisJezExNTIsIDcyMCwgVklBX1JFU18xMTUyWDcyMCwgIjExNTJ4NzIwIn0sCisJezEyMDAsIDcyMCwgVklBX1JFU18xMjAwWDcyMCwgIjEyMDB4NzIwIn0sCisJezEyODAsIDYwMCwgVklBX1JFU18xMjgwWDYwMCwgIjEyODB4NjAwIn0sCisJezEzNjAsIDc2OCwgVklBX1JFU18xMzYwWDc2OCwgIjEzNjB4NzY4In0sCisJezE0NDAsIDkwMCwgVklBX1JFU18xNDQwWDkwMCwgIjE0NDB4OTAwIn0sCisJezE2MDAsIDkwMCwgVklBX1JFU18xNjAwWDkwMCwgIjE2MDB4OTAwIn0sCisJezE2MDAsIDEwMjQsIFZJQV9SRVNfMTYwMFgxMDI0LCAiMTYwMHgxMDI0In0sCisJezE3OTIsIDEzNDQsIFZJQV9SRVNfMTc5MlgxMzQ0LCAiMTc5MngxMzQ0In0sCisJezE4NTYsIDEzOTIsIFZJQV9SRVNfMTg1NlgxMzkyLCAiMTg1NngxMzkyIn0sCisJezE5MjAsIDEyMDAsIFZJQV9SRVNfMTkyMFgxMjAwLCAiMTkyMHgxMjAwIn0sCisJezIwNDgsIDE1MzYsIFZJQV9SRVNfMjA0OFgxNTM2LCAiMjA0OHgxNTM2In0sCisJezAsIDAsIFZJQV9SRVNfSU5WQUxJRCwgIjY0MHg0ODAifQorfTsKKworc3RhdGljIHN0cnVjdCBmYl9vcHMgdmlhZmJfb3BzOworCitzdGF0aWMgaW50IHZpYWZiX3VwZGF0ZV9maXgoc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCB2aWFmYl9wYXIgKnBwYXI7CisJcHBhciA9IGluZm8tPnBhcjsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3VwZGF0ZV9maXghXG4iKTsKKworCWZpeC0+dmlzdWFsID0KKwkgICAgcHBhci0+YnBwID09IDggPyBGQl9WSVNVQUxfUFNFVURPQ09MT1IgOiBGQl9WSVNVQUxfVFJVRUNPTE9SOworCWZpeC0+bGluZV9sZW5ndGggPSBwcGFyLT5saW5lbGVuZ3RoOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgdmlhZmJfc2V0dXBfZml4aW5mbyhzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwKKwlzdHJ1Y3QgdmlhZmJfcGFyICp2aWFwYXJpbmZvKQoreworCW1lbXNldChmaXgsIDAsIHNpemVvZihzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8pKTsKKwlzdHJjcHkoZml4LT5pZCwgdmlhZmJfbmFtZSk7CisKKwlmaXgtPnNtZW1fc3RhcnQgPSB2aWFwYXJpbmZvLT5mYm1lbTsKKwlmaXgtPnNtZW1fbGVuID0gdmlhcGFyaW5mby0+ZmJtZW1fZnJlZTsKKwlmaXgtPm1taW9fc3RhcnQgPSB2aWFwYXJpbmZvLT5tbWlvX2Jhc2U7CisJZml4LT5tbWlvX2xlbiA9IHZpYXBhcmluZm8tPm1taW9fbGVuOworCisJZml4LT50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOworCWZpeC0+dHlwZV9hdXggPSAwOworCisJZml4LT54cGFuc3RlcCA9IGZpeC0+eXdyYXBzdGVwID0gMDsKKwlmaXgtPnlwYW5zdGVwID0gMTsKKworCS8qIEp1c3QgdGVsbCB0aGUgYWNjZWwgbmFtZSAqLworCXZpYWZiaW5mby0+Zml4LmFjY2VsID0gRkJfQUNDRUxfVklBX1VOSUNIUk9NRTsKK30KK3N0YXRpYyBpbnQgdmlhZmJfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfb3BlbiFcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpYWZiX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3JlbGVhc2UhXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmlhZmJfdXBkYXRlX3ZpYWZiX3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdmlhZmJfcGFyICpwcGFyOworCisJcHBhciA9IGluZm8tPnBhcjsKKwlwcGFyLT5icHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7CisJcHBhci0+bGluZWxlbmd0aCA9ICgoaW5mby0+dmFyLnhyZXNfdmlydHVhbCArIDcpICYgfjcpICogcHBhci0+YnBwIC8gODsKKwlwcGFyLT5ocmVzID0gaW5mby0+dmFyLnhyZXM7CisJcHBhci0+dnJlcyA9IGluZm8tPnZhci55cmVzOworCXBwYXItPnhvZmZzZXQgPSBpbmZvLT52YXIueG9mZnNldDsKKwlwcGFyLT55b2Zmc2V0ID0gaW5mby0+dmFyLnlvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmlhZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCXN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWludCB2bW9kZV9pbmRleCwgaHRvdGFsLCB2dG90YWw7CisJc3RydWN0IHZpYWZiX3BhciAqcHBhcjsKKwl1MzIgbG9uZ19yZWZyZXNoOworCXN0cnVjdCB2aWFmYl9wYXIgKnBfdmlhZmJfcGFyOworCXBwYXIgPSBpbmZvLT5wYXI7CisKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2NoZWNrX3ZhciFcbiIpOworCS8qIFNhbml0eSBjaGVjayAqLworCS8qIEhXIG5laXRoZXIgc3VwcG9ydCBpbnRlcmxhY3RlIG5vciBkb3VibGUtc2NhbmVkIG1vZGUgKi8KKwlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX0lOVEVSTEFDRUQgfHwgdmFyLT52bW9kZSAmIEZCX1ZNT0RFX0RPVUJMRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2bW9kZV9pbmRleCA9IHZpYWZiX2dldF9tb2RlX2luZGV4KHZhci0+eHJlcywgdmFyLT55cmVzLCAwKTsKKwlpZiAodm1vZGVfaW5kZXggPT0gVklBX1JFU19JTlZBTElEKSB7CisJCURFQlVHX01TRyhLRVJOX0lORk8KKwkJCSAgInZpYWZiOiBNb2RlICVkeCVkeCVkIG5vdCBzdXBwb3J0ZWQhIVxuIiwKKwkJCSAgdmFyLT54cmVzLCB2YXItPnlyZXMsIHZhci0+Yml0c19wZXJfcGl4ZWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoMjQgPT0gdmFyLT5iaXRzX3Blcl9waXhlbCkKKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDMyOworCisJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgIT0gOCAmJiB2YXItPmJpdHNfcGVyX3BpeGVsICE9IDE2ICYmCisJCXZhci0+Yml0c19wZXJfcGl4ZWwgIT0gMzIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCh2YXItPnhyZXNfdmlydHVhbCAqICh2YXItPmJpdHNfcGVyX3BpeGVsID4+IDMpKSAmIDB4MUYpCisJCS8qMzIgcGl4ZWwgYWxpZ25tZW50ICovCisJCXZhci0+eHJlc192aXJ0dWFsID0gKHZhci0+eHJlc192aXJ0dWFsICsgMzEpICYgfjMxOworCWlmICh2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+eXJlc192aXJ0dWFsICogdmFyLT5iaXRzX3Blcl9waXhlbCAvIDggPgorCQlwcGFyLT5tZW1zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEJhc2VkIG9uIHZhciBwYXNzZWQgaW4gdG8gY2FsY3VsYXRlIHRoZSByZWZyZXNoLAorCSAqIGJlY2F1c2Ugb3VyIGRyaXZlciB1c2Ugc29tZSBtb2RlcyBzcGVjaWFsLgorCSAqLworCWh0b3RhbCA9IHZhci0+eHJlcyArIHZhci0+bGVmdF9tYXJnaW4gKworCXZhci0+cmlnaHRfbWFyZ2luICsgdmFyLT5oc3luY19sZW47CisJdnRvdGFsID0gdmFyLT55cmVzICsgdmFyLT51cHBlcl9tYXJnaW4gKworCQl2YXItPmxvd2VyX21hcmdpbiArIHZhci0+dnN5bmNfbGVuOworCWxvbmdfcmVmcmVzaCA9IDEwMDAwMDAwMDBVTCAvIHZhci0+cGl4Y2xvY2sgKiAxMDAwOworCWxvbmdfcmVmcmVzaCAvPSAoaHRvdGFsICogdnRvdGFsKTsKKworCXZpYWZiX3JlZnJlc2ggPSB2aWFmYl9nZXRfcmVmcmVzaCh2YXItPnhyZXMsIHZhci0+eXJlcywgbG9uZ19yZWZyZXNoKTsKKworCS8qIEFkanVzdCB2YXIgYWNjb3JkaW5nIHRvIG91ciBkcml2ZXIncyBvd24gdGFibGUgKi8KKwl2aWFmYl9maWxsX3Zhcl90aW1pbmdfaW5mbyh2YXIsIHZpYWZiX3JlZnJlc2gsIHZtb2RlX2luZGV4KTsKKworCS8qIFRoaXMgaXMgaW5kZWVkIGEgcGF0Y2ggZm9yIFZUMzM1MyAqLworCWlmICghaW5mby0+cGFyKQorCQlyZXR1cm4gLTE7CisJcF92aWFmYl9wYXIgPSAoc3RydWN0IHZpYWZiX3BhciAqKWluZm8tPnBhcjsKKwlpZiAocF92aWFmYl9wYXItPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfVlg4MDApCisJCXZhci0+YWNjZWxfZmxhZ3MgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlhZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpbnQgdm1vZGVfaW5kZXg7CisJaW50IHZtb2RlX2luZGV4MSA9IDA7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfc2V0X3BhciFcbiIpOworCisJdmlhZmJfdXBkYXRlX2RldmljZV9zZXR0aW5nKGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcywKKwkJCSAgICAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwgdmlhZmJfcmVmcmVzaCwgMCk7CisKKwl2bW9kZV9pbmRleCA9IHZpYWZiX2dldF9tb2RlX2luZGV4KGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcywgMCk7CisKKwlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7CisJCURFQlVHX01TRyhLRVJOX0lORk8KKwkJInZpYWZiX3NlY29uZF94cmVzID0gJWQsIHZpYWZiX3NlY29uZF95cmVzID0gJWQsIGJwcCA9ICVkXG4iLAorCQkJICB2aWFmYl9zZWNvbmRfeHJlcywgdmlhZmJfc2Vjb25kX3lyZXMsIHZpYWZiX2JwcDEpOworCQl2bW9kZV9pbmRleDEgPSB2aWFmYl9nZXRfbW9kZV9pbmRleCh2aWFmYl9zZWNvbmRfeHJlcywKKwkJCXZpYWZiX3NlY29uZF95cmVzLCAxKTsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiLT52aWFmYl9TQU1NX09OOiBpbmRleD0lZFxuIiwKKwkJCXZtb2RlX2luZGV4MSk7CisKKwkJdmlhZmJfdXBkYXRlX2RldmljZV9zZXR0aW5nKHZpYWZiX3NlY29uZF94cmVzLAorCQkJdmlhZmJfc2Vjb25kX3lyZXMsIHZpYWZiX2JwcDEsIHZpYWZiX3JlZnJlc2gxLCAxKTsKKwl9CisKKwlpZiAodm1vZGVfaW5kZXggIT0gVklBX1JFU19JTlZBTElEKSB7CisJCXZpYWZiX3NldG1vZGUodm1vZGVfaW5kZXgsIGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcywKKwkJCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwgdm1vZGVfaW5kZXgxLAorCQkJdmlhZmJfc2Vjb25kX3hyZXMsIHZpYWZiX3NlY29uZF95cmVzLCB2aWFmYl9icHAxKTsKKworCQkvKldlIHNob3VsZCBzZXQgbWVtb3J5IG9mZnNldCBhY2NvcmRpbmcgdmlydHVhbF94ICovCisJCS8qRml4IG1lOnB1dCB0aGlzIGZ1bmN0aW9uIGludG8gdmlhZmJfc2V0bW9kZSAqLworCQl2aWFmYl9tZW1vcnlfcGl0Y2hfcGF0Y2goaW5mbyk7CisKKwkJLyogVXBkYXRlICoqKmZiX3BhciBpbmZvcm1hdGlvbiAqLworCQl2aWFmYl91cGRhdGVfdmlhZmJfcGFyKGluZm8pOworCisJCS8qIFVwZGF0ZSBvdGhlciBmaXhlZCBpbmZvcm1hdGlvbiAqLworCQl2aWFmYl91cGRhdGVfZml4KCZpbmZvLT5maXgsIGluZm8pOworCQl2aWFmYl9icHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7CisJCS8qIFVwZGF0ZSB2aWFmYl9hY2NlbCwgaXQgaXMgbmVjZXNzYXJ5IHRvIG91ciAyRCBhY2NlbGVyYXRlICovCisJCXZpYWZiX2FjY2VsID0gaW5mby0+dmFyLmFjY2VsX2ZsYWdzOworCisJCWlmICh2aWFmYl9hY2NlbCkKKwkJCXZpYWZiX3NldF8yZF9jb2xvcl9kZXB0aChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpOworCX0KKworCXJldHVybiAwOworfQorCisvKiBTZXQgb25lIGNvbG9yIHJlZ2lzdGVyICovCitzdGF0aWMgaW50IHZpYWZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKK3Vuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJdTggc3IxYSwgc3IxYiwgY3I2NywgY3I2YSwgcmV2ID0gMCwgc2hpZnQgPSAxMDsKKwl1bnNpZ25lZCBjbWFwX2VudHJpZXMgPSAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDgpID8gMjU2IDogMTY7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfc2V0Y29scmVnIVxuIik7CisJaWYgKHJlZ25vID49IGNtYXBfZW50cmllcykKKwkJcmV0dXJuIDE7CisJaWYgKFVOSUNIUk9NRV9DTEUyNjYgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCS8qCisJCSAqIFJlYWQgUENJIGJ1cyAwLGRldiAwLGZ1bmN0aW9uIDAsaW5kZXggMHhGNiB0byBnZXQgY2hpcCByZXYuCisJCSAqLworCQlvdXRsKDB4ODAwMDAwMDAgfCAoMHhmNiAmIH4zKSwgKHVuc2lnbmVkIGxvbmcpMHhDRjgpOworCQlyZXYgPSAoaW5sKCh1bnNpZ25lZCBsb25nKTB4Q0ZDKSA+PiAoKDB4ZjYgJiAzKSAqIDgpKSAmIDB4ZmY7CisJfQorCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSA4OgorCQlvdXRiKDB4MUEsIDB4M0M0KTsKKwkJc3IxYSA9IGluYigweDNDNSk7CisJCW91dGIoMHgxQiwgMHgzQzQpOworCQlzcjFiID0gaW5iKDB4M0M1KTsKKwkJb3V0YigweDY3LCAweDNENCk7CisJCWNyNjcgPSBpbmIoMHgzRDUpOworCQlvdXRiKDB4NkEsIDB4M0Q0KTsKKwkJY3I2YSA9IGluYigweDNENSk7CisKKwkJLyogTWFwIHRoZSAzQzYvNy84LzkgdG8gdGhlIElHQTIgKi8KKwkJb3V0YigweDFBLCAweDNDNCk7CisJCW91dGIoc3IxYSB8IDB4MDEsIDB4M0M1KTsKKwkJLyogU2Vjb25kIERpc3BsYXkgRW5naW5lIGNvbGNrIGFsd2F5cyBvbiAqLworCQlvdXRiKDB4MUIsIDB4M0M0KTsKKwkJb3V0YihzcjFiIHwgMHg4MCwgMHgzQzUpOworCQkvKiBTZWNvbmQgRGlzcGxheSBDb2xvciBEZXB0aCA4ICovCisJCW91dGIoMHg2NywgMHgzRDQpOworCQlvdXRiKGNyNjcgJiAweDNGLCAweDNENSk7CisJCW91dGIoMHg2QSwgMHgzRDQpOworCQkvKiBTZWNvbmQgRGlzcGxheSBDaGFubmVsIFJlc2V0IENSNkFbNl0pICovCisJCW91dGIoY3I2YSAmIDB4QkYsIDB4M0Q1KTsKKwkJLyogU2Vjb25kIERpc3BsYXkgQ2hhbm5lbCBFbmFibGUgQ1I2QVs3XSAqLworCQlvdXRiKGNyNmEgfCAweDgwLCAweDNENSk7CisJCS8qIFNlY29uZCBEaXNwbGF5IENoYW5uZWwgc3RvcCByZXNldCkgKi8KKwkJb3V0YihjcjZhIHwgMHg0MCwgMHgzRDUpOworCisJCS8qIEJpdCBtYXNrIG9mIHBhbGV0dGUgKi8KKwkJb3V0YigweEZGLCAweDNjNik7CisJCS8qIFdyaXRlIG9uZSByZWdpc3RlciBvZiBJR0EyICovCisJCW91dGIocmVnbm8sIDB4M0M4KTsKKwkJaWYgKFVOSUNIUk9NRV9DTEUyNjYgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lICYmCisJCQlyZXYgPj0gMTUpIHsKKwkJCXNoaWZ0ID0gODsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCBCSVQ1LCBCSVQ1KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTUsIFZJQVNSLCBCSVQ3LCBCSVQ3KTsKKwkJfSBlbHNlIHsKKwkJCXNoaWZ0ID0gMTA7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMCwgQklUNSk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE1LCBWSUFTUiwgMCwgQklUNyk7CisJCX0KKwkJb3V0YihyZWQgPj4gc2hpZnQsIDB4M0M5KTsKKwkJb3V0YihncmVlbiA+PiBzaGlmdCwgMHgzQzkpOworCQlvdXRiKGJsdWUgPj4gc2hpZnQsIDB4M0M5KTsKKworCQkvKiBNYXAgdGhlIDNDNi83LzgvOSB0byB0aGUgSUdBMSAqLworCQlvdXRiKDB4MUEsIDB4M0M0KTsKKwkJb3V0YihzcjFhICYgMHhGRSwgMHgzQzUpOworCQkvKiBCaXQgbWFzayBvZiBwYWxldHRlICovCisJCW91dGIoMHhGRiwgMHgzYzYpOworCQkvKiBXcml0ZSBvbmUgcmVnaXN0ZXIgb2YgSUdBMSAqLworCQlvdXRiKHJlZ25vLCAweDNDOCk7CisJCW91dGIocmVkID4+IHNoaWZ0LCAweDNDOSk7CisJCW91dGIoZ3JlZW4gPj4gc2hpZnQsIDB4M0M5KTsKKwkJb3V0YihibHVlID4+IHNoaWZ0LCAweDNDOSk7CisKKwkJb3V0YigweDFBLCAweDNDNCk7CisJCW91dGIoc3IxYSwgMHgzQzUpOworCQlvdXRiKDB4MUIsIDB4M0M0KTsKKwkJb3V0YihzcjFiLCAweDNDNSk7CisJCW91dGIoMHg2NywgMHgzRDQpOworCQlvdXRiKGNyNjcsIDB4M0Q1KTsKKwkJb3V0YigweDZBLCAweDNENCk7CisJCW91dGIoY3I2YSwgMHgzRDUpOworCQlicmVhazsKKwljYXNlIDE2OgorCQkoKHUzMiAqKSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnbm9dID0gKHJlZCAmIDB4RjgwMCkgfAorCQkgICAgKChncmVlbiAmIDB4RkMwMCkgPj4gNSkgfCAoKGJsdWUgJiAweEY4MDApID4+IDExKTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJKCh1MzIgKikgaW5mby0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9CisJCSAgICAoKHRyYW5zcCAmIDB4RkYwMCkgPDwgMTYpIHwKKwkJICAgICgocmVkICYgMHhGRjAwKSA8PCA4KSB8CisJCSAgICAoKGdyZWVuICYgMHhGRjAwKSkgfCAoKGJsdWUgJiAweEZGMDApID4+IDgpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKKworfQorCisvKkNBTExFRCBCWTogZmJfc2V0X2NtYXAgKi8KKy8qICAgICAgICAgICBmYl9zZXRfdmFyLCBwYXNzIDI1NiBjb2xvcnMgKi8KKy8qQ0FMTEVEIEJZOiBmYl9zZXRfY21hcCAqLworLyogICAgICAgICAgIGZiY29uX3NldF9wYWxldHRlLCBwYXNzIDE2IGNvbG9ycyAqLworc3RhdGljIGludCB2aWFmYl9zZXRjbWFwKHN0cnVjdCBmYl9jbWFwICpjbWFwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwl1MzIgbGVuID0gY21hcC0+bGVuOworCXUzMiBpOworCXUxNiAqcHJlZCA9IGNtYXAtPnJlZDsKKwl1MTYgKnBncmVlbiA9IGNtYXAtPmdyZWVuOworCXUxNiAqcGJsdWUgPSBjbWFwLT5ibHVlOworCXUxNiAqcHRyYW5zcCA9IGNtYXAtPnRyYW5zcDsKKwl1OCBzcjFhLCBzcjFiLCBjcjY3LCBjcjZhLCByZXYgPSAwLCBzaGlmdCA9IDEwOworCWlmIChsZW4gPiAyNTYpCisJCXJldHVybiAxOworCWlmIChVTklDSFJPTUVfQ0xFMjY2ID09IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQkvKgorCQkgKiBSZWFkIFBDSSBidXMgMCwgZGV2IDAsIGZ1bmN0aW9uIDAsIGluZGV4IDB4RjYgdG8gZ2V0IGNoaXAKKwkJICogcmV2LgorCQkgKi8KKwkJb3V0bCgweDgwMDAwMDAwIHwgKDB4ZjYgJiB+MyksICh1bnNpZ25lZCBsb25nKTB4Q0Y4KTsKKwkJcmV2ID0gKGlubCgodW5zaWduZWQgbG9uZykweENGQykgPj4gKCgweGY2ICYgMykgKiA4KSkgJiAweGZmOworCX0KKwlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJb3V0YigweDFBLCAweDNDNCk7CisJCXNyMWEgPSBpbmIoMHgzQzUpOworCQlvdXRiKDB4MUIsIDB4M0M0KTsKKwkJc3IxYiA9IGluYigweDNDNSk7CisJCW91dGIoMHg2NywgMHgzRDQpOworCQljcjY3ID0gaW5iKDB4M0Q1KTsKKwkJb3V0YigweDZBLCAweDNENCk7CisJCWNyNmEgPSBpbmIoMHgzRDUpOworCQkvKiBNYXAgdGhlIDNDNi83LzgvOSB0byB0aGUgSUdBMiAqLworCQlvdXRiKDB4MUEsIDB4M0M0KTsKKwkJb3V0YihzcjFhIHwgMHgwMSwgMHgzQzUpOworCQlvdXRiKDB4MUIsIDB4M0M0KTsKKwkJLyogU2Vjb25kIERpc3BsYXkgRW5naW5lIGNvbGNrIGFsd2F5cyBvbiAqLworCQlvdXRiKHNyMWIgfCAweDgwLCAweDNDNSk7CisJCW91dGIoMHg2NywgMHgzRDQpOworCQkvKiBTZWNvbmQgRGlzcGxheSBDb2xvciBEZXB0aCA4ICovCisJCW91dGIoY3I2NyAmIDB4M0YsIDB4M0Q1KTsKKwkJb3V0YigweDZBLCAweDNENCk7CisJCS8qIFNlY29uZCBEaXNwbGF5IENoYW5uZWwgUmVzZXQgQ1I2QVs2XSkgKi8KKwkJb3V0YihjcjZhICYgMHhCRiwgMHgzRDUpOworCQkvKiBTZWNvbmQgRGlzcGxheSBDaGFubmVsIEVuYWJsZSBDUjZBWzddICovCisJCW91dGIoY3I2YSB8IDB4ODAsIDB4M0Q1KTsKKwkJLyogU2Vjb25kIERpc3BsYXkgQ2hhbm5lbCBzdG9wIHJlc2V0KSAqLworCQlvdXRiKGNyNmEgfCAweEMwLCAweDNENSk7CisKKwkJLyogQml0IG1hc2sgb2YgcGFsZXR0ZSAqLworCQlvdXRiKDB4RkYsIDB4M2M2KTsKKwkJb3V0YigweDAwLCAweDNDOCk7CisJCWlmIChVTklDSFJPTUVfQ0xFMjY2ID09IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSAmJgorCQkJcmV2ID49IDE1KSB7CisJCQlzaGlmdCA9IDg7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgQklUNSwgQklUNSk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE1LCBWSUFTUiwgQklUNywgQklUNyk7CisJCX0gZWxzZSB7CisJCQlzaGlmdCA9IDEwOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDAsIEJJVDUpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNSwgVklBU1IsIDAsIEJJVDcpOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQkJb3V0YigoKihwcmVkICsgaSkpID4+IHNoaWZ0LCAweDNDOSk7CisJCQlvdXRiKCgqKHBncmVlbiArIGkpKSA+PiBzaGlmdCwgMHgzQzkpOworCQkJb3V0YigoKihwYmx1ZSArIGkpKSA+PiBzaGlmdCwgMHgzQzkpOworCQl9CisKKwkJb3V0YigweDFBLCAweDNDNCk7CisJCS8qIE1hcCB0aGUgM0M2LzcvOC85IHRvIHRoZSBJR0ExICovCisJCW91dGIoc3IxYSAmIDB4RkUsIDB4M0M1KTsKKwkJLyogQml0IG1hc2sgb2YgcGFsZXR0ZSAqLworCQlvdXRiKDB4RkYsIDB4M2M2KTsKKwkJb3V0YigweDAwLCAweDNDOCk7CisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQkJb3V0YigoKihwcmVkICsgaSkpID4+IHNoaWZ0LCAweDNDOSk7CisJCQlvdXRiKCgqKHBncmVlbiArIGkpKSA+PiBzaGlmdCwgMHgzQzkpOworCQkJb3V0YigoKihwYmx1ZSArIGkpKSA+PiBzaGlmdCwgMHgzQzkpOworCQl9CisKKwkJb3V0YigweDFBLCAweDNDNCk7CisJCW91dGIoc3IxYSwgMHgzQzUpOworCQlvdXRiKDB4MUIsIDB4M0M0KTsKKwkJb3V0YihzcjFiLCAweDNDNSk7CisJCW91dGIoMHg2NywgMHgzRDQpOworCQlvdXRiKGNyNjcsIDB4M0Q1KTsKKwkJb3V0YigweDZBLCAweDNENCk7CisJCW91dGIoY3I2YSwgMHgzRDUpOworCQlicmVhazsKKwljYXNlIDE2OgorCQlpZiAobGVuID4gMTcpCisJCQlyZXR1cm4gMDsJLyogQmVjYXVzZSBzdGF0aWMgdTMyIHBzZXVkb19wYWxbMTddOyAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCQkoKHUzMiAqKSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbaV0gPQorCQkJICAgICgqKHByZWQgKyBpKSAmIDB4RjgwMCkgfAorCQkJICAgICgoKihwZ3JlZW4gKyBpKSAmIDB4RkMwMCkgPj4gNSkgfAorCQkJICAgICgoKihwYmx1ZSArIGkpICYgMHhGODAwKSA+PiAxMSk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWlmIChsZW4gPiAxNykKKwkJCXJldHVybiAwOworCQlpZiAocHRyYW5zcCkgeworCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkJCSgodTMyICopIGluZm8tPnBzZXVkb19wYWxldHRlKVtpXSA9CisJCQkJICAgICgoKihwdHJhbnNwICsgaSkgJiAweEZGMDApIDw8IDE2KSB8CisJCQkJICAgICgoKihwcmVkICsgaSkgJiAweEZGMDApIDw8IDgpIHwKKwkJCQkgICAgKCgqKHBncmVlbiArIGkpICYgMHhGRjAwKSkgfAorCQkJCSAgICAoKCoocGJsdWUgKyBpKSAmIDB4RkYwMCkgPj4gOCk7CisJCX0gZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCQkJKCh1MzIgKikgaW5mby0+cHNldWRvX3BhbGV0dGUpW2ldID0KKwkJCQkgICAgMHgwMDAwMDAwMCB8CisJCQkJICAgICgoKihwcmVkICsgaSkgJiAweEZGMDApIDw8IDgpIHwKKwkJCQkgICAgKCgqKHBncmVlbiArIGkpICYgMHhGRjAwKSkgfAorCQkJCSAgICAoKCoocGJsdWUgKyBpKSAmIDB4RkYwMCkgPj4gOCk7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpYWZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCXN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9wYW5fZGlzcGxheSFcbiIpOworCisJb2Zmc2V0ID0gKHZhci0+eG9mZnNldCArICh2YXItPnlvZmZzZXQgKiB2YXItPnhyZXNfdmlydHVhbCkpICoKKwkgICAgdmFyLT5iaXRzX3Blcl9waXhlbCAvIDE2OworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG52aWFmYl9wYW5fZGlzcGxheSxvZmZzZXQgPSVkICIsIG9mZnNldCk7CisKKwl2aWFmYl93cml0ZV9yZWdfbWFzaygweDQ4LCAweDNkNCwgKChvZmZzZXQgPj4gMjQpICYgMHgzKSwgMHgzKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzaygweDM0LCAweDNkNCwgKChvZmZzZXQgPj4gMTYpICYgMHhmZiksIDB4ZmYpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKDB4MGMsIDB4M2Q0LCAoKG9mZnNldCA+PiA4KSAmIDB4ZmYpLCAweGZmKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzaygweDBkLCAweDNkNCwgKG9mZnNldCAmIDB4ZmYpLCAweGZmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpYWZiX2JsYW5rKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9ibGFuayFcbiIpOworCS8qIGNsZWFyIERQTVMgc2V0dGluZyAqLworCisJc3dpdGNoIChibGFua19tb2RlKSB7CisJY2FzZSBGQl9CTEFOS19VTkJMQU5LOgorCQkvKiBTY3JlZW46IE9uLCBIU3luYzogT24sIFZTeW5jOiBPbiAqLworCQkvKiBjb250cm9sIENSVCBtb25pdG9yIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IzNiwgVklBQ1IsIDB4MDAsIEJJVDQgKyBCSVQ1KTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19IU1lOQ19TVVNQRU5EOgorCQkvKiBTY3JlZW46IE9mZiwgSFN5bmM6IE9mZiwgVlN5bmM6IE9uICovCisJCS8qIGNvbnRyb2wgQ1JUIG1vbml0b3IgcG93ZXIgbWFuYWdlbWVudCAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjM2LCBWSUFDUiwgMHgxMCwgQklUNCArIEJJVDUpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6CisJCS8qIFNjcmVlbjogT2ZmLCBIU3luYzogT24sIFZTeW5jOiBPZmYgKi8KKwkJLyogY29udHJvbCBDUlQgbW9uaXRvciBwb3dlciBtYW5hZ2VtZW50ICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzYsIFZJQUNSLCAweDIwLCBCSVQ0ICsgQklUNSk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgorCQkvKiBTY3JlZW46IE9mZiwgSFN5bmM6IE9mZiwgVlN5bmM6IE9mZiAqLworCQkvKiBjb250cm9sIENSVCBtb25pdG9yIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IzNiwgVklBQ1IsIDB4MzAsIEJJVDQgKyBCSVQ1KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlhZmJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVfaW50IGNtZCwgdV9sb25nIGFyZykKK3sKKwlzdHJ1Y3QgdmlhZmJfaW9jdGxfbW9kZSB2aWFtb2RlOworCXN0cnVjdCB2aWFmYl9pb2N0bF9zYW1tIHZpYXNhbW07CisJc3RydWN0IHZpYWZiX2RyaXZlcl92ZXJzaW9uIGRyaXZlcl92ZXJzaW9uOworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBzZWNfdmFyOworCXN0cnVjdCBfcGFuZWxfc2l6ZV9wb3NfaW5mbyBwYW5lbF9wb3Nfc2l6ZV9wYXJhOworCXUzMiBzdGF0ZV9pbmZvID0gMDsKKwl1MzIgdmlhaW5mb19zaXplID0gc2l6ZW9mKHN0cnVjdCB2aWFmYl9pb2N0bF9pbmZvKTsKKwl1MzIgKnZpYWZiX2dhbW1hX3RhYmxlOworCWNoYXIgZHJpdmVyX25hbWVbXSA9ICJ2aWFmYiI7CisKKwl1MzIgX191c2VyICphcmdwID0gKHUzMiBfX3VzZXIgKikgYXJnOworCXUzMiBncHUzMjsKKwl1MzIgdmlkZW9fZGV2X2luZm8gPSAwOworCXN0cnVjdCB2aWFmYl9pb2N0bF9zZXR0aW5nIHZpYWZiX3NldHRpbmcgPSB7fTsKKwlzdHJ1Y3QgZGV2aWNlX3QgYWN0aXZlX2RldiA9IHt9OworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfaW9jdGw6IDB4JVggISFcbiIsIGNtZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklBRkJfR0VUX0NISVBfSU5GTzoKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCB2aWFwYXJpbmZvLT5jaGlwX2luZm8sCisJCQkJc2l6ZW9mKHN0cnVjdCBjaGlwX2luZm9ybWF0aW9uKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBWSUFGQl9HRVRfSU5GT19TSVpFOgorCQlyZXR1cm4gcHV0X3VzZXIodmlhaW5mb19zaXplLCBhcmdwKTsKKwljYXNlIFZJQUZCX0dFVF9JTkZPOgorCQlyZXR1cm4gdmlhZmJfaW9jdGxfZ2V0X3ZpYWZiX2luZm8oYXJnKTsKKwljYXNlIFZJQUZCX0hPVFBMVUc6CisJCXJldHVybiBwdXRfdXNlcih2aWFmYl9pb2N0bF9ob3RwbHVnKGluZm8tPnZhci54cmVzLAorCQkJCQkgICAgICBpbmZvLT52YXIueXJlcywKKwkJCQkJICAgICAgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSwgYXJncCk7CisJY2FzZSBWSUFGQl9TRVRfSE9UUExVR19GTEFHOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJmdwdTMyLCBhcmdwLCBzaXplb2YoZ3B1MzIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQl2aWFmYl9ob3RwbHVnID0gKGdwdTMyKSA/IDEgOiAwOworCQlicmVhazsKKwljYXNlIFZJQUZCX0dFVF9SRVNPTFVUSU9OOgorCQl2aWFtb2RlLnhyZXMgPSAodTMyKSB2aWFmYl9ob3RwbHVnX1hyZXM7CisJCXZpYW1vZGUueXJlcyA9ICh1MzIpIHZpYWZiX2hvdHBsdWdfWXJlczsKKwkJdmlhbW9kZS5yZWZyZXNoID0gKHUzMikgdmlhZmJfaG90cGx1Z19yZWZyZXNoOworCQl2aWFtb2RlLmJwcCA9ICh1MzIpIHZpYWZiX2hvdHBsdWdfYnBwOworCQlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7CisJCQl2aWFtb2RlLnhyZXNfc2VjID0gdmlhZmJfc2Vjb25kX3hyZXM7CisJCQl2aWFtb2RlLnlyZXNfc2VjID0gdmlhZmJfc2Vjb25kX3lyZXM7CisJCQl2aWFtb2RlLnZpcnR1YWxfeHJlc19zZWMgPSB2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzOworCQkJdmlhbW9kZS52aXJ0dWFsX3lyZXNfc2VjID0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeXJlczsKKwkJCXZpYW1vZGUucmVmcmVzaF9zZWMgPSB2aWFmYl9yZWZyZXNoMTsKKwkJCXZpYW1vZGUuYnBwX3NlYyA9IHZpYWZiX2JwcDE7CisJCX0gZWxzZSB7CisJCQl2aWFtb2RlLnhyZXNfc2VjID0gMDsKKwkJCXZpYW1vZGUueXJlc19zZWMgPSAwOworCQkJdmlhbW9kZS52aXJ0dWFsX3hyZXNfc2VjID0gMDsKKwkJCXZpYW1vZGUudmlydHVhbF95cmVzX3NlYyA9IDA7CisJCQl2aWFtb2RlLnJlZnJlc2hfc2VjID0gMDsKKwkJCXZpYW1vZGUuYnBwX3NlYyA9IDA7CisJCX0KKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdmlhbW9kZSwgc2l6ZW9mKHZpYW1vZGUpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwljYXNlIFZJQUZCX0dFVF9TQU1NX0lORk86CisJCXZpYXNhbW0uc2FtbV9zdGF0dXMgPSB2aWFmYl9TQU1NX09OOworCisJCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKKwkJCWlmICh2aWFmYl9kdWFsX2ZiKSB7CisJCQkJdmlhc2FtbS5zaXplX3ByaW0gPSB2aWFwYXJpbmZvLT5mYm1lbV9mcmVlOworCQkJCXZpYXNhbW0uc2l6ZV9zZWMgPSB2aWFwYXJpbmZvMS0+ZmJtZW1fZnJlZTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHZpYWZiX3NlY29uZF9zaXplKSB7CisJCQkJCXZpYXNhbW0uc2l6ZV9wcmltID0KKwkJCQkJICAgIHZpYXBhcmluZm8tPmZibWVtX2ZyZWUgLQorCQkJCQkgICAgdmlhZmJfc2Vjb25kX3NpemUgKiAxMDI0ICogMTAyNDsKKwkJCQkJdmlhc2FtbS5zaXplX3NlYyA9CisJCQkJCSAgICB2aWFmYl9zZWNvbmRfc2l6ZSAqIDEwMjQgKiAxMDI0OworCQkJCX0gZWxzZSB7CisJCQkJCXZpYXNhbW0uc2l6ZV9wcmltID0KKwkJCQkJICAgIHZpYXBhcmluZm8tPmZibWVtX2ZyZWUgPj4gMTsKKwkJCQkJdmlhc2FtbS5zaXplX3NlYyA9CisJCQkJCSAgICAodmlhcGFyaW5mby0+ZmJtZW1fZnJlZSA+PiAxKTsKKwkJCQl9CisJCQl9CisJCQl2aWFzYW1tLm1lbV9iYXNlID0gdmlhcGFyaW5mby0+ZmJtZW07CisJCQl2aWFzYW1tLm9mZnNldF9zZWMgPSB2aWFmYl9zZWNvbmRfb2Zmc2V0OworCQl9IGVsc2UgeworCQkJdmlhc2FtbS5zaXplX3ByaW0gPQorCQkJICAgIHZpYXBhcmluZm8tPm1lbXNpemUgLSB2aWFwYXJpbmZvLT5mYm1lbV91c2VkOworCQkJdmlhc2FtbS5zaXplX3NlYyA9IDA7CisJCQl2aWFzYW1tLm1lbV9iYXNlID0gdmlhcGFyaW5mby0+ZmJtZW07CisJCQl2aWFzYW1tLm9mZnNldF9zZWMgPSAwOworCQl9CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdmlhc2FtbSwgc2l6ZW9mKHZpYXNhbW0pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWJyZWFrOworCWNhc2UgVklBRkJfVFVSTl9PTl9PVVRQVVRfREVWSUNFOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJmdwdTMyLCBhcmdwLCBzaXplb2YoZ3B1MzIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoZ3B1MzIgJiBDUlRfRGV2aWNlKQorCQkJdmlhZmJfY3J0X2VuYWJsZSgpOworCQlpZiAoZ3B1MzIgJiBEVklfRGV2aWNlKQorCQkJdmlhZmJfZHZpX2VuYWJsZSgpOworCQlpZiAoZ3B1MzIgJiBMQ0RfRGV2aWNlKQorCQkJdmlhZmJfbGNkX2VuYWJsZSgpOworCQlicmVhazsKKwljYXNlIFZJQUZCX1RVUk5fT0ZGX09VVFBVVF9ERVZJQ0U6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZ3B1MzIsIGFyZ3AsIHNpemVvZihncHUzMikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChncHUzMiAmIENSVF9EZXZpY2UpCisJCQl2aWFmYl9jcnRfZGlzYWJsZSgpOworCQlpZiAoZ3B1MzIgJiBEVklfRGV2aWNlKQorCQkJdmlhZmJfZHZpX2Rpc2FibGUoKTsKKwkJaWYgKGdwdTMyICYgTENEX0RldmljZSkKKwkJCXZpYWZiX2xjZF9kaXNhYmxlKCk7CisJCWJyZWFrOworCWNhc2UgVklBRkJfU0VUX0RFVklDRToKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZhY3RpdmVfZGV2LCAodm9pZCAqKWFyZ3AsCisJCQlzaXplb2YoYWN0aXZlX2RldikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXZpYWZiX3NldF9kZXZpY2UoYWN0aXZlX2Rldik7CisJCXZpYWZiX3NldF9wYXIoaW5mbyk7CisJCWJyZWFrOworCWNhc2UgVklBRkJfR0VUX0RFVklDRToKKwkJYWN0aXZlX2Rldi5jcnQgPSB2aWFmYl9DUlRfT047CisJCWFjdGl2ZV9kZXYuZHZpID0gdmlhZmJfRFZJX09OOworCQlhY3RpdmVfZGV2LmxjZCA9IHZpYWZiX0xDRF9PTjsKKwkJYWN0aXZlX2Rldi5zYW1tID0gdmlhZmJfU0FNTV9PTjsKKwkJYWN0aXZlX2Rldi5wcmltYXJ5X2RldiA9IHZpYWZiX3ByaW1hcnlfZGV2OworCisJCWFjdGl2ZV9kZXYubGNkX2RzcF9jZW50ID0gdmlhZmJfbGNkX2RzcF9tZXRob2Q7CisJCWFjdGl2ZV9kZXYubGNkX3BhbmVsX2lkID0gdmlhZmJfbGNkX3BhbmVsX2lkOworCQlhY3RpdmVfZGV2LmxjZF9tb2RlID0gdmlhZmJfbGNkX21vZGU7CisKKwkJYWN0aXZlX2Rldi54cmVzID0gdmlhZmJfaG90cGx1Z19YcmVzOworCQlhY3RpdmVfZGV2LnlyZXMgPSB2aWFmYl9ob3RwbHVnX1lyZXM7CisKKwkJYWN0aXZlX2Rldi54cmVzMSA9IHZpYWZiX3NlY29uZF94cmVzOworCQlhY3RpdmVfZGV2LnlyZXMxID0gdmlhZmJfc2Vjb25kX3lyZXM7CisKKwkJYWN0aXZlX2Rldi5icHAgPSB2aWFmYl9icHA7CisJCWFjdGl2ZV9kZXYuYnBwMSA9IHZpYWZiX2JwcDE7CisJCWFjdGl2ZV9kZXYucmVmcmVzaCA9IHZpYWZiX3JlZnJlc2g7CisJCWFjdGl2ZV9kZXYucmVmcmVzaDEgPSB2aWFmYl9yZWZyZXNoMTsKKworCQlhY3RpdmVfZGV2LmVwaWFfZHZpID0gdmlhZmJfcGxhdGZvcm1fZXBpYV9kdmk7CisJCWFjdGl2ZV9kZXYubGNkX2R1YWxfZWRnZSA9IHZpYWZiX2RldmljZV9sY2RfZHVhbGVkZ2U7CisJCWFjdGl2ZV9kZXYuYnVzX3dpZHRoID0gdmlhZmJfYnVzX3dpZHRoOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmFjdGl2ZV9kZXYsIHNpemVvZihhY3RpdmVfZGV2KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX0dFVF9EUklWRVJfVkVSU0lPTjoKKwkJZHJpdmVyX3ZlcnNpb24uaU1ham9yTnVtID0gVkVSU0lPTl9NQUpPUjsKKwkJZHJpdmVyX3ZlcnNpb24uaUtlcm5lbE51bSA9IFZFUlNJT05fS0VSTkVMOworCQlkcml2ZXJfdmVyc2lvbi5pT1NOdW0gPSBWRVJTSU9OX09TOworCQlkcml2ZXJfdmVyc2lvbi5pTWlub3JOdW0gPSBWRVJTSU9OX01JTk9SOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmRyaXZlcl92ZXJzaW9uLAorCQkJc2l6ZW9mKGRyaXZlcl92ZXJzaW9uKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlicmVhazsKKworCWNhc2UgVklBRkJfU0VUX0RFVklDRV9JTkZPOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnZpYWZiX3NldHRpbmcsCisJCQlhcmdwLCBzaXplb2YodmlhZmJfc2V0dGluZykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChhcHBseV9kZXZpY2Vfc2V0dGluZyh2aWFmYl9zZXR0aW5nLCBpbmZvKSA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlicmVhazsKKworCWNhc2UgVklBRkJfU0VUX1NFQ09ORF9NT0RFOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnNlY192YXIsIGFyZ3AsIHNpemVvZihzZWNfdmFyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYXBwbHlfc2Vjb25kX21vZGVfc2V0dGluZygmc2VjX3Zhcik7CisJCWJyZWFrOworCisJY2FzZSBWSUFGQl9HRVRfREVWSUNFX0lORk86CisKKwkJcmV0cmlldmVfZGV2aWNlX3NldHRpbmcoJnZpYWZiX3NldHRpbmcpOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnZpYWZiX3NldHRpbmcsIHNpemVvZih2aWFmYl9zZXR0aW5nKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlicmVhazsKKworCWNhc2UgVklBRkJfR0VUX0RFVklDRV9TVVBQT1JUOgorCQl2aWFmYl9nZXRfZGV2aWNlX3N1cHBvcnRfc3RhdGUoJnN0YXRlX2luZm8pOworCQlpZiAocHV0X3VzZXIoc3RhdGVfaW5mbywgYXJncCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX0dFVF9ERVZJQ0VfQ09OTkVDVDoKKwkJdmlhZmJfZ2V0X2RldmljZV9jb25uZWN0X3N0YXRlKCZzdGF0ZV9pbmZvKTsKKwkJaWYgKHB1dF91c2VyKHN0YXRlX2luZm8sIGFyZ3ApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBWSUFGQl9HRVRfUEFORUxfU1VQUE9SVF9FWFBBTkQ6CisJCXN0YXRlX2luZm8gPQorCQkgICAgdmlhZmJfbGNkX2dldF9zdXBwb3J0X2V4cGFuZF9zdGF0ZShpbmZvLT52YXIueHJlcywKKwkJCQkJCSBpbmZvLT52YXIueXJlcyk7CisJCWlmIChwdXRfdXNlcihzdGF0ZV9pbmZvLCBhcmdwKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKworCWNhc2UgVklBRkJfR0VUX0RSSVZFUl9OQU1FOgorCQlpZiAoY29weV90b191c2VyKGFyZ3AsIGRyaXZlcl9uYW1lLCBzaXplb2YoZHJpdmVyX25hbWUpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKworCWNhc2UgVklBRkJfU0VUX0dBTU1BX0xVVDoKKwkJdmlhZmJfZ2FtbWFfdGFibGUgPSBrbWFsbG9jKDI1NiAqIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF2aWFmYl9nYW1tYV90YWJsZSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlpZiAoY29weV9mcm9tX3VzZXIodmlhZmJfZ2FtbWFfdGFibGUsIGFyZ3AsCisJCQkJc2l6ZW9mKHZpYWZiX2dhbW1hX3RhYmxlKSkpIHsKKwkJCWtmcmVlKHZpYWZiX2dhbW1hX3RhYmxlKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCXZpYWZiX3NldF9nYW1tYV90YWJsZSh2aWFmYl9icHAsIHZpYWZiX2dhbW1hX3RhYmxlKTsKKwkJa2ZyZWUodmlhZmJfZ2FtbWFfdGFibGUpOworCQlicmVhazsKKworCWNhc2UgVklBRkJfR0VUX0dBTU1BX0xVVDoKKwkJdmlhZmJfZ2FtbWFfdGFibGUgPSBrbWFsbG9jKDI1NiAqIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF2aWFmYl9nYW1tYV90YWJsZSkKKwkJCXJldHVybiAtRU5PTUVNOworCQl2aWFmYl9nZXRfZ2FtbWFfdGFibGUodmlhZmJfZ2FtbWFfdGFibGUpOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsIHZpYWZiX2dhbW1hX3RhYmxlLAorCQkJc2l6ZW9mKHZpYWZiX2dhbW1hX3RhYmxlKSkpIHsKKwkJCWtmcmVlKHZpYWZiX2dhbW1hX3RhYmxlKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCWtmcmVlKHZpYWZiX2dhbW1hX3RhYmxlKTsKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX0dFVF9HQU1NQV9TVVBQT1JUX1NUQVRFOgorCQl2aWFmYl9nZXRfZ2FtbWFfc3VwcG9ydF9zdGF0ZSh2aWFmYl9icHAsICZzdGF0ZV9pbmZvKTsKKwkJaWYgKHB1dF91c2VyKHN0YXRlX2luZm8sIGFyZ3ApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgVklBRkJfU0VUX1ZJREVPX0RFVklDRToKKwkJZ2V0X3VzZXIodmlkZW9fZGV2X2luZm8sIGFyZ3ApOworCQl2aWFmYl9zZXRfdmlkZW9fZGV2aWNlKHZpZGVvX2Rldl9pbmZvKTsKKwkJYnJlYWs7CisJY2FzZSBWSUFGQl9HRVRfVklERU9fREVWSUNFOgorCQl2aWFmYl9nZXRfdmlkZW9fZGV2aWNlKCZ2aWRlb19kZXZfaW5mbyk7CisJCWlmIChwdXRfdXNlcih2aWRlb19kZXZfaW5mbywgYXJncCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBWSUFGQl9TWU5DX1NVUkZBQ0U6CisJCURFQlVHX01TRyhLRVJOX0lORk8gImxvYm8gVklBRkJfU1lOQ19TVVJGQUNFXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBWSUFGQl9HRVRfRFJJVkVSX0NBUFM6CisJCWJyZWFrOworCisJY2FzZSBWSUFGQl9HRVRfUEFORUxfTUFYX1NJWkU6CisJCWlmIChjb3B5X2Zyb21fdXNlcgorCQkgICAgKCZwYW5lbF9wb3Nfc2l6ZV9wYXJhLCBhcmdwLCBzaXplb2YocGFuZWxfcG9zX3NpemVfcGFyYSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXBhbmVsX3Bvc19zaXplX3BhcmEueCA9IHBhbmVsX3Bvc19zaXplX3BhcmEueSA9IDA7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnBhbmVsX3Bvc19zaXplX3BhcmEsCisJCSAgICAgc2l6ZW9mKHBhbmVsX3Bvc19zaXplX3BhcmEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwljYXNlIFZJQUZCX0dFVF9QQU5FTF9NQVhfUE9TSVRJT046CisJCWlmIChjb3B5X2Zyb21fdXNlcgorCQkgICAgKCZwYW5lbF9wb3Nfc2l6ZV9wYXJhLCBhcmdwLCBzaXplb2YocGFuZWxfcG9zX3NpemVfcGFyYSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXBhbmVsX3Bvc19zaXplX3BhcmEueCA9IHBhbmVsX3Bvc19zaXplX3BhcmEueSA9IDA7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnBhbmVsX3Bvc19zaXplX3BhcmEsCisJCSAgICAgc2l6ZW9mKHBhbmVsX3Bvc19zaXplX3BhcmEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKworCWNhc2UgVklBRkJfR0VUX1BBTkVMX1BPU0lUSU9OOgorCQlpZiAoY29weV9mcm9tX3VzZXIKKwkJICAgICgmcGFuZWxfcG9zX3NpemVfcGFyYSwgYXJncCwgc2l6ZW9mKHBhbmVsX3Bvc19zaXplX3BhcmEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlwYW5lbF9wb3Nfc2l6ZV9wYXJhLnggPSBwYW5lbF9wb3Nfc2l6ZV9wYXJhLnkgPSAwOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwYW5lbF9wb3Nfc2l6ZV9wYXJhLAorCQkgICAgIHNpemVvZihwYW5lbF9wb3Nfc2l6ZV9wYXJhKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBWSUFGQl9HRVRfUEFORUxfU0laRToKKwkJaWYgKGNvcHlfZnJvbV91c2VyCisJCSAgICAoJnBhbmVsX3Bvc19zaXplX3BhcmEsIGFyZ3AsIHNpemVvZihwYW5lbF9wb3Nfc2l6ZV9wYXJhKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcGFuZWxfcG9zX3NpemVfcGFyYS54ID0gcGFuZWxfcG9zX3NpemVfcGFyYS55ID0gMDsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmcGFuZWxfcG9zX3NpemVfcGFyYSwKKwkJICAgICBzaXplb2YocGFuZWxfcG9zX3NpemVfcGFyYSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBWSUFGQl9TRVRfUEFORUxfUE9TSVRJT046CisJCWlmIChjb3B5X2Zyb21fdXNlcgorCQkgICAgKCZwYW5lbF9wb3Nfc2l6ZV9wYXJhLCBhcmdwLCBzaXplb2YocGFuZWxfcG9zX3NpemVfcGFyYSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgVklBRkJfU0VUX1BBTkVMX1NJWkU6CisJCWlmIChjb3B5X2Zyb21fdXNlcgorCQkgICAgKCZwYW5lbF9wb3Nfc2l6ZV9wYXJhLCBhcmdwLCBzaXplb2YocGFuZWxfcG9zX3NpemVfcGFyYSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZpYWZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAorCWNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwl1MzIgY29sID0gMCwgcm9wID0gMDsKKwlpbnQgcGl0Y2g7CisKKwlpZiAoIXZpYWZiX2FjY2VsKQorCQlyZXR1cm4gY2ZiX2ZpbGxyZWN0KGluZm8sIHJlY3QpOworCisJaWYgKCFyZWN0LT53aWR0aCB8fCAhcmVjdC0+aGVpZ2h0KQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHJlY3QtPnJvcCkgeworCWNhc2UgUk9QX1hPUjoKKwkJcm9wID0gMHg1QTsKKwkJYnJlYWs7CisJY2FzZSBST1BfQ09QWToKKwlkZWZhdWx0OgorCQlyb3AgPSAweEYwOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJY29sID0gcmVjdC0+Y29sb3I7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCWNvbCA9ICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlY3QtPmNvbG9yXTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbcmVjdC0+Y29sb3JdOworCQlicmVhazsKKwl9CisKKwkvKiBCaXRCbHQgU291cmNlIEFkZHJlc3MgKi8KKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TUkNQT1MpOworCS8qIFNvdXJjZSBCYXNlIEFkZHJlc3MgKi8KKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TUkNCQVNFKTsKKwkvKiBEZXN0aW5hdGlvbiBCYXNlIEFkZHJlc3MgKi8KKwl3cml0ZWwoKCh1bnNpZ25lZCBsb25nKSAoaW5mby0+c2NyZWVuX2Jhc2UpIC0KKwkJICAgKHVuc2lnbmVkIGxvbmcpIHZpYWZiX0ZCX01NKSA+PiAzLAorCQkgICB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19EU1RCQVNFKTsKKwkvKiBQaXRjaCAqLworCXBpdGNoID0gKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKyA3KSAmIH43OworCXdyaXRlbChWSUFfUElUQ0hfRU5BQkxFIHwKKwkJICAgKCgocGl0Y2ggKgorCQkgICAgICBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPj4gMykgPj4gMykgfAorCQkgICAgICAoKChwaXRjaCAqIGluZm8tPgorCQkgICAgICB2YXIuYml0c19wZXJfcGl4ZWwgPj4gMykgPj4gMykgPDwgMTYpKSwKKwkJICAgICAgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfUElUQ0gpOworCS8qIEJpdEJsdCBEZXN0aW5hdGlvbiBBZGRyZXNzICovCisJd3JpdGVsKCgocmVjdC0+ZHkgPDwgMTYpIHwgcmVjdC0+ZHgpLAorCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19EU1RQT1MpOworCS8qIERpbWVuc2lvbjogd2lkdGggJiBoZWlnaHQgKi8KKwl3cml0ZWwoKCgocmVjdC0+aGVpZ2h0IC0gMSkgPDwgMTYpIHwgKHJlY3QtPndpZHRoIC0gMSkpLAorCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19ESU1FTlNJT04pOworCS8qIEZvcmdyb3VuZCBjb2xvciBvciBEZXN0aW5hdGlvbiBjb2xvciAqLworCXdyaXRlbChjb2wsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0ZHQ09MT1IpOworCS8qIEdFIENvbW1hbmQgKi8KKwl3cml0ZWwoKDB4MDEgfCAweDIwMDAgfCAocm9wIDw8IDI0KSksCisJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0dFQ01EKTsKKworfQorCitzdGF0aWMgdm9pZCB2aWFmYl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwljb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCit7CisJdTMyIGR5ID0gYXJlYS0+ZHksIHN5ID0gYXJlYS0+c3ksIGRpcmVjdGlvbiA9IDB4MDsKKwl1MzIgc3ggPSBhcmVhLT5zeCwgZHggPSBhcmVhLT5keCwgd2lkdGggPSBhcmVhLT53aWR0aDsKKwlpbnQgcGl0Y2g7CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9jb3B5YXJlYSEhXG4iKTsKKworCWlmICghdmlhZmJfYWNjZWwpCisJCXJldHVybiBjZmJfY29weWFyZWEoaW5mbywgYXJlYSk7CisKKwlpZiAoIWFyZWEtPndpZHRoIHx8ICFhcmVhLT5oZWlnaHQpCisJCXJldHVybjsKKworCWlmIChzeSA8IGR5KSB7CisJCWR5ICs9IGFyZWEtPmhlaWdodCAtIDE7CisJCXN5ICs9IGFyZWEtPmhlaWdodCAtIDE7CisJCWRpcmVjdGlvbiB8PSAweDQwMDA7CisJfQorCisJaWYgKHN4IDwgZHgpIHsKKwkJZHggKz0gd2lkdGggLSAxOworCQlzeCArPSB3aWR0aCAtIDE7CisJCWRpcmVjdGlvbiB8PSAweDgwMDA7CisJfQorCisJLyogU291cmNlIEJhc2UgQWRkcmVzcyAqLworCXdyaXRlbCgoKHVuc2lnbmVkIGxvbmcpIChpbmZvLT5zY3JlZW5fYmFzZSkgLQorCQkgICAodW5zaWduZWQgbG9uZykgdmlhZmJfRkJfTU0pID4+IDMsCisJCSAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ0JBU0UpOworCS8qIERlc3RpbmF0aW9uIEJhc2UgQWRkcmVzcyAqLworCXdyaXRlbCgoKHVuc2lnbmVkIGxvbmcpIChpbmZvLT5zY3JlZW5fYmFzZSkgLQorCQkgICAodW5zaWduZWQgbG9uZykgdmlhZmJfRkJfTU0pID4+IDMsCisJCSAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVEJBU0UpOworCS8qIFBpdGNoICovCisJcGl0Y2ggPSAoaW5mby0+dmFyLnhyZXNfdmlydHVhbCArIDcpICYgfjc7CisJLyogVklBX1BJVENIX0VOQUJMRSBjYW4gYmUgb21pdHRlZCBub3cuICovCisJd3JpdGVsKFZJQV9QSVRDSF9FTkFCTEUgfAorCQkgICAoKChwaXRjaCAqCisJCSAgICAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PiAzKSA+PiAzKSB8ICgoKHBpdGNoICoKKwkJCQkJCQkJaW5mby0+dmFyLgorCQkJCQkJCQliaXRzX3Blcl9waXhlbAorCQkJCQkJCQk+PiAzKSA+PiAzKQorCQkJCQkJCSAgICAgIDw8IDE2KSksCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfUElUQ0gpOworCS8qIEJpdEJsdCBTb3VyY2UgQWRkcmVzcyAqLworCXdyaXRlbCgoKHN5IDw8IDE2KSB8IHN4KSwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1JDUE9TKTsKKwkvKiBCaXRCbHQgRGVzdGluYXRpb24gQWRkcmVzcyAqLworCXdyaXRlbCgoKGR5IDw8IDE2KSB8IGR4KSwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUUE9TKTsKKwkvKiBEaW1lbnNpb246IHdpZHRoICYgaGVpZ2h0ICovCisJd3JpdGVsKCgoKGFyZWEtPmhlaWdodCAtIDEpIDw8IDE2KSB8IChhcmVhLT53aWR0aCAtIDEpKSwKKwkJICAgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRElNRU5TSU9OKTsKKwkvKiBHRSBDb21tYW5kICovCisJd3JpdGVsKCgweDAxIHwgZGlyZWN0aW9uIHwgKDB4Q0MgPDwgMjQpKSwKKwkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfR0VDTUQpOworCit9CisKK3N0YXRpYyB2b2lkIHZpYWZiX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwljb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQoreworCXUzMiBzaXplLCBiZ19jb2wgPSAwLCBmZ19jb2wgPSAwLCAqdWRhdGE7CisJaW50IGk7CisJaW50IHBpdGNoOworCisJaWYgKCF2aWFmYl9hY2NlbCkKKwkJcmV0dXJuIGNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCisJdWRhdGEgPSAodTMyICopIGltYWdlLT5kYXRhOworCisJc3dpdGNoIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCWJnX2NvbCA9IGltYWdlLT5iZ19jb2xvcjsKKwkJZmdfY29sID0gaW1hZ2UtPmZnX2NvbG9yOworCQlicmVhazsKKwljYXNlIDE2OgorCQliZ19jb2wgPSAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+YmdfY29sb3JdOworCQlmZ19jb2wgPSAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+ZmdfY29sb3JdOworCQlicmVhazsKKwljYXNlIDMyOgorCQliZ19jb2wgPSAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+YmdfY29sb3JdOworCQlmZ19jb2wgPSAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+ZmdfY29sb3JdOworCQlicmVhazsKKwl9CisJc2l6ZSA9IGltYWdlLT53aWR0aCAqIGltYWdlLT5oZWlnaHQ7CisKKwkvKiBTb3VyY2UgQmFzZSBBZGRyZXNzICovCisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1JDQkFTRSk7CisJLyogRGVzdGluYXRpb24gQmFzZSBBZGRyZXNzICovCisJd3JpdGVsKCgodW5zaWduZWQgbG9uZykgKGluZm8tPnNjcmVlbl9iYXNlKSAtCisJCSAgICh1bnNpZ25lZCBsb25nKSB2aWFmYl9GQl9NTSkgPj4gMywKKwkJICAgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUQkFTRSk7CisJLyogUGl0Y2ggKi8KKwlwaXRjaCA9IChpbmZvLT52YXIueHJlc192aXJ0dWFsICsgNykgJiB+NzsKKwl3cml0ZWwoVklBX1BJVENIX0VOQUJMRSB8CisJCSAgICgoKHBpdGNoICoKKwkJICAgICAgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4+IDMpID4+IDMpIHwgKCgocGl0Y2ggKgorCQkJCQkJCQlpbmZvLT52YXIuCisJCQkJCQkJCWJpdHNfcGVyX3BpeGVsCisJCQkJCQkJCT4+IDMpID4+IDMpCisJCQkJCQkJICAgICAgPDwgMTYpKSwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19QSVRDSCk7CisJLyogQml0Qmx0IFNvdXJjZSBBZGRyZXNzICovCisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1JDUE9TKTsKKwkvKiBCaXRCbHQgRGVzdGluYXRpb24gQWRkcmVzcyAqLworCXdyaXRlbCgoKGltYWdlLT5keSA8PCAxNikgfCBpbWFnZS0+ZHgpLAorCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19EU1RQT1MpOworCS8qIERpbWVuc2lvbjogd2lkdGggJiBoZWlnaHQgKi8KKwl3cml0ZWwoKCgoaW1hZ2UtPmhlaWdodCAtIDEpIDw8IDE2KSB8IChpbWFnZS0+d2lkdGggLSAxKSksCisJCSAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RJTUVOU0lPTik7CisJLyogZmIgY29sb3IgKi8KKwl3cml0ZWwoZmdfY29sLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19GR0NPTE9SKTsKKwkvKiBiZyBjb2xvciAqLworCXdyaXRlbChiZ19jb2wsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0JHQ09MT1IpOworCS8qIEdFIENvbW1hbmQgKi8KKwl3cml0ZWwoMHhDQzAyMDE0MiwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfR0VDTUQpOworCisJZm9yIChpID0gMDsgaSA8IHNpemUgLyA0OyBpKyspIHsKKwkJd3JpdGVsKCp1ZGF0YSwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9NTUlPX0JMVEJBU0UpOworCQl1ZGF0YSsrOworCX0KKworfQorCitzdGF0aWMgaW50IHZpYWZiX2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKQoreworCXU4IGRhdGFbQ1VSU09SX1NJWkUgLyA4XTsKKwl1MzIgZGF0YV9iYWtbQ1VSU09SX1NJWkUgLyAzMl07CisJdTMyIHRlbXAsIHh4LCB5eSwgYmdfY29sID0gMCwgZmdfY29sID0gMDsKKwlpbnQgc2l6ZSwgaSwgaiA9IDA7CisJc3RhdGljIGludCBod19jdXJzb3I7CisJc3RydWN0IHZpYWZiX3BhciAqcF92aWFmYl9wYXI7CisKKwlpZiAodmlhZmJfYWNjZWwpCisJCWh3X2N1cnNvciA9IDE7CisKKwlpZiAoIXZpYWZiX2FjY2VsKSB7CisJCWlmIChod19jdXJzb3IpIHsKKwkJCXZpYWZiX3Nob3dfaHdfY3Vyc29yKGluZm8sIEhXX0N1cnNvcl9PRkYpOworCQkJaHdfY3Vyc29yID0gMDsKKwkJfQorCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoKCgoc3RydWN0IHZpYWZiX3BhciAqKShpbmZvLT5wYXIpKS0+aWdhX3BhdGggPT0gSUdBMikKKwkgICAgJiYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBXaGVuIGR1b3ZpZXcgYW5kIHVzaW5nIGxjZCAsIHVzZSBzb2Z0IGN1cnNvciAqLworCWlmICh2aWFmYl9MQ0RfT04gfHwgKChzdHJ1Y3QgdmlhZmJfcGFyICopKGluZm8tPnBhcikpLT5kdW92aWV3KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZpYWZiX3Nob3dfaHdfY3Vyc29yKGluZm8sIEhXX0N1cnNvcl9PRkYpOworCXZpYWN1cnNvciA9ICpjdXJzb3I7CisKKwlpZiAoY3Vyc29yLT5zZXQgJiBGQl9DVVJfU0VUSE9UKSB7CisJCXZpYWN1cnNvci5ob3QgPSBjdXJzb3ItPmhvdDsKKwkJdGVtcCA9ICgodmlhY3Vyc29yLmhvdC54KSA8PCAxNikgKyB2aWFjdXJzb3IuaG90Lnk7CisJCXdyaXRlbCh0ZW1wLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfT1JHKTsKKwl9CisKKwlpZiAoY3Vyc29yLT5zZXQgJiBGQl9DVVJfU0VUUE9TKSB7CisJCXZpYWN1cnNvci5pbWFnZS5keCA9IGN1cnNvci0+aW1hZ2UuZHg7CisJCXZpYWN1cnNvci5pbWFnZS5keSA9IGN1cnNvci0+aW1hZ2UuZHk7CisJCXl5ID0gY3Vyc29yLT5pbWFnZS5keSAtIGluZm8tPnZhci55b2Zmc2V0OworCQl4eCA9IGN1cnNvci0+aW1hZ2UuZHggLSBpbmZvLT52YXIueG9mZnNldDsKKwkJdGVtcCA9IHl5ICYgMHhGRkZGOworCQl0ZW1wIHw9ICh4eCA8PCAxNik7CisJCXdyaXRlbCh0ZW1wLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfUE9TKTsKKwl9CisKKwlpZiAoY3Vyc29yLT5zZXQgJiBGQl9DVVJfU0VUU0laRSkgeworCQl0ZW1wID0gcmVhZGwodmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX01PREUpOworCisJCWlmICgoY3Vyc29yLT5pbWFnZS53aWR0aCA8PSAzMikKKwkJICAgICYmIChjdXJzb3ItPmltYWdlLmhlaWdodCA8PSAzMikpIHsKKwkJCU1BWF9DVVJTID0gMzI7CisJCQl0ZW1wIHw9IDB4MjsKKwkJfSBlbHNlIGlmICgoY3Vyc29yLT5pbWFnZS53aWR0aCA8PSA2NCkKKwkJCSAgICYmIChjdXJzb3ItPmltYWdlLmhlaWdodCA8PSA2NCkpIHsKKwkJCU1BWF9DVVJTID0gNjQ7CisJCQl0ZW1wICY9IDB4RkZGRkZGRkQ7CisJCX0gZWxzZSB7CisJCQlERUJVR19NU0coS0VSTl9JTkZPCisJCQkiVGhlIGN1cnNvciBpbWFnZSBpcyBiaWdlciB0aGFuIDY0eDY0IGJpdHMuLi5cbiIpOworCQkJcmV0dXJuIC1FTlhJTzsKKwkJfQorCQl3cml0ZWwodGVtcCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX01PREUpOworCisJCXZpYWN1cnNvci5pbWFnZS5oZWlnaHQgPSBjdXJzb3ItPmltYWdlLmhlaWdodDsKKwkJdmlhY3Vyc29yLmltYWdlLndpZHRoID0gY3Vyc29yLT5pbWFnZS53aWR0aDsKKwl9CisKKwlpZiAoY3Vyc29yLT5zZXQgJiBGQl9DVVJfU0VUQ01BUCkgeworCQl2aWFjdXJzb3IuaW1hZ2UuZmdfY29sb3IgPSBjdXJzb3ItPmltYWdlLmZnX2NvbG9yOworCQl2aWFjdXJzb3IuaW1hZ2UuYmdfY29sb3IgPSBjdXJzb3ItPmltYWdlLmJnX2NvbG9yOworCisJCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJCWNhc2UgODoKKwkJY2FzZSAxNjoKKwkJY2FzZSAzMjoKKwkJCWJnX2NvbCA9CisJCQkgICAgKDB4RkYgPDwgMjQpIHwKKwkJCSAgICAoKChpbmZvLT5jbWFwLnJlZClbdmlhY3Vyc29yLmltYWdlLmJnX2NvbG9yXSAmCisJCQkgICAgMHhGRjAwKSA8PCA4KSB8CisJCQkgICAgKChpbmZvLT5jbWFwLmdyZWVuKVt2aWFjdXJzb3IuaW1hZ2UuYmdfY29sb3JdICYKKwkJCSAgICAweEZGMDApIHwKKwkJCSAgICAoKChpbmZvLT5jbWFwLmJsdWUpW3ZpYWN1cnNvci5pbWFnZS5iZ19jb2xvcl0gJgorCQkJICAgIDB4RkYwMCkgPj4gOCk7CisJCQlmZ19jb2wgPQorCQkJICAgICgweEZGIDw8IDI0KSB8CisJCQkgICAgKCgoaW5mby0+Y21hcC5yZWQpW3ZpYWN1cnNvci5pbWFnZS5mZ19jb2xvcl0gJgorCQkJICAgIDB4RkYwMCkgPDwgOCkgfAorCQkJICAgICgoaW5mby0+Y21hcC5ncmVlbilbdmlhY3Vyc29yLmltYWdlLmZnX2NvbG9yXSAmCisJCQkgICAgMHhGRjAwKSB8CisJCQkgICAgKCgoaW5mby0+Y21hcC5ibHVlKVt2aWFjdXJzb3IuaW1hZ2UuZmdfY29sb3JdICYKKwkJCSAgICAweEZGMDApID4+IDgpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIFRoaXMgaXMgaW5kZWVkIGEgcGF0Y2ggZm9yIFZUMzMyNC9WVDMzNTMgKi8KKwkJaWYgKCFpbmZvLT5wYXIpCisJCQlyZXR1cm4gMDsKKwkJcF92aWFmYl9wYXIgPSAoc3RydWN0IHZpYWZiX3BhciAqKWluZm8tPnBhcjsKKworCQlpZiAoKHBfdmlhZmJfcGFyLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0KKwkJCVVOSUNIUk9NRV9DWDcwMCkgfHwKKwkJCSgocF92aWFmYl9wYXItPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PQorCQkJVU5JQ0hST01FX1ZYODAwKSkpIHsKKwkJCWJnX2NvbCA9CisJCQkgICAgKCgoaW5mby0+Y21hcC5yZWQpW3ZpYWN1cnNvci5pbWFnZS5iZ19jb2xvcl0gJgorCQkJICAgIDB4RkZDMCkgPDwgMTQpIHwKKwkJCSAgICAoKChpbmZvLT5jbWFwLmdyZWVuKVt2aWFjdXJzb3IuaW1hZ2UuYmdfY29sb3JdICYKKwkJCSAgICAweEZGQzApIDw8IDQpIHwKKwkJCSAgICAoKChpbmZvLT5jbWFwLmJsdWUpW3ZpYWN1cnNvci5pbWFnZS5iZ19jb2xvcl0gJgorCQkJICAgIDB4RkZDMCkgPj4gNik7CisJCQlmZ19jb2wgPQorCQkJICAgICgoKGluZm8tPmNtYXAucmVkKVt2aWFjdXJzb3IuaW1hZ2UuZmdfY29sb3JdICYKKwkJCSAgICAweEZGQzApIDw8IDE0KSB8CisJCQkgICAgKCgoaW5mby0+Y21hcC5ncmVlbilbdmlhY3Vyc29yLmltYWdlLmZnX2NvbG9yXSAmCisJCQkgICAgMHhGRkMwKSA8PCA0KSB8CisJCQkgICAgKCgoaW5mby0+Y21hcC5ibHVlKVt2aWFjdXJzb3IuaW1hZ2UuZmdfY29sb3JdICYKKwkJCSAgICAweEZGQzApID4+IDYpOworCQl9CisKKwkJd3JpdGVsKGJnX2NvbCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX0JHKTsKKwkJd3JpdGVsKGZnX2NvbCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX0ZHKTsKKwl9CisKKwlpZiAoY3Vyc29yLT5zZXQgJiBGQl9DVVJfU0VUU0hBUEUpIHsKKwkJc2l6ZSA9CisJCSAgICAoKHZpYWN1cnNvci5pbWFnZS53aWR0aCArIDcpID4+IDMpICoKKwkJICAgIHZpYWN1cnNvci5pbWFnZS5oZWlnaHQ7CisKKwkJaWYgKE1BWF9DVVJTID09IDMyKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgKENVUlNPUl9TSVpFIC8gMzIpOyBpKyspIHsKKwkJCQlkYXRhX2Jha1tpXSA9IDB4MDsKKwkJCQlkYXRhX2Jha1tpICsgMV0gPSAweEZGRkZGRkZGOworCQkJCWkgKz0gMTsKKwkJCX0KKwkJfSBlbHNlIGlmIChNQVhfQ1VSUyA9PSA2NCkgeworCQkJZm9yIChpID0gMDsgaSA8IChDVVJTT1JfU0laRSAvIDMyKTsgaSsrKSB7CisJCQkJZGF0YV9iYWtbaV0gPSAweDA7CisJCQkJZGF0YV9iYWtbaSArIDFdID0gMHgwOworCQkJCWRhdGFfYmFrW2kgKyAyXSA9IDB4RkZGRkZGRkY7CisJCQkJZGF0YV9iYWtbaSArIDNdID0gMHhGRkZGRkZGRjsKKwkJCQlpICs9IDM7CisJCQl9CisJCX0KKworCQlzd2l0Y2ggKHZpYWN1cnNvci5yb3ApIHsKKwkJY2FzZSBST1BfWE9SOgorCQkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJCQlkYXRhW2ldID0gdmlhY3Vyc29yLm1hc2tbaV07CisJCQlicmVhazsKKwkJY2FzZSBST1BfQ09QWToKKworCQkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJCQlkYXRhW2ldID0gdmlhY3Vyc29yLm1hc2tbaV07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKE1BWF9DVVJTID09IDMyKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQkJZGF0YV9iYWtbal0gPSAodTMyKSBkYXRhW2ldOworCQkJCWRhdGFfYmFrW2ogKyAxXSA9IH5kYXRhX2Jha1tqXTsKKwkJCQlqICs9IDI7CisJCQl9CisJCX0gZWxzZSBpZiAoTUFYX0NVUlMgPT0gNjQpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCQlkYXRhX2Jha1tqXSA9ICh1MzIpIGRhdGFbaV07CisJCQkJZGF0YV9iYWtbaiArIDFdID0gMHgwOworCQkJCWRhdGFfYmFrW2ogKyAyXSA9IH5kYXRhX2Jha1tqXTsKKwkJCQlkYXRhX2Jha1tqICsgM10gPSB+ZGF0YV9iYWtbaiArIDFdOworCQkJCWogKz0gNDsKKwkJCX0KKwkJfQorCisJCW1lbWNweSgoKHN0cnVjdCB2aWFmYl9wYXIgKikoaW5mby0+cGFyKSktPmZibWVtX3ZpcnQgKworCQkgICAgICAgKChzdHJ1Y3QgdmlhZmJfcGFyICopKGluZm8tPnBhcikpLT5jdXJzb3Jfc3RhcnQsCisJCSAgICAgICBkYXRhX2JhaywgQ1VSU09SX1NJWkUpOworCX0KKworCWlmICh2aWFjdXJzb3IuZW5hYmxlKQorCQl2aWFmYl9zaG93X2h3X2N1cnNvcihpbmZvLCBIV19DdXJzb3JfT04pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlhZmJfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpZiAodmlhZmJfYWNjZWwpCisJCXZpYWZiX3dhaXRfZW5naW5lX2lkbGUoKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHZpYWZiX2dldF9tb2RlX2luZGV4KGludCBocmVzLCBpbnQgdnJlcywgaW50IGZsYWcpCit7CisJdTMyIGk7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfZ2V0X21vZGVfaW5kZXghXG4iKTsKKworCWZvciAoaSA9IDA7IHZpYWZiX21vZGVudHJ5W2ldLm1vZGVfaW5kZXggIT0gVklBX1JFU19JTlZBTElEOyBpKyspCisJCWlmICh2aWFmYl9tb2RlbnRyeVtpXS54cmVzID09IGhyZXMgJiYKKwkJCXZpYWZiX21vZGVudHJ5W2ldLnlyZXMgPT0gdnJlcykKKwkJCWJyZWFrOworCisJdmlhZmJfcmVzTW9kZSA9IHZpYWZiX21vZGVudHJ5W2ldLm1vZGVfaW5kZXg7CisJaWYgKGZsYWcpCisJCXZpYWZiX21vZGUxID0gdmlhZmJfbW9kZW50cnlbaV0ubW9kZV9yZXM7CisJZWxzZQorCQl2aWFmYl9tb2RlID0gdmlhZmJfbW9kZW50cnlbaV0ubW9kZV9yZXM7CisKKwlyZXR1cm4gdmlhZmJfcmVzTW9kZTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfYXZhaWxhYmxlX2RldmljZV90b19lbmFibGUoaW50IGRldmljZV9pZCkKK3sKKwlpbnQgZGV2aWNlX251bSA9IDA7CisKKwkvKiBJbml0aWFsaXplOiAqLworCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09GRjsKKwl2aWFmYl9EVklfT04gPSBTVEFURV9PRkY7CisJdmlhZmJfTENEX09OID0gU1RBVEVfT0ZGOworCXZpYWZiX0xDRDJfT04gPSBTVEFURV9PRkY7CisJdmlhZmJfRGV2aWNlU3RhdHVzID0gTm9uZV9EZXZpY2U7CisKKwlpZiAoKGRldmljZV9pZCAmIENSVF9EZXZpY2UpICYmIChkZXZpY2VfbnVtIDwgTUFYX0FDVElWRV9ERVZfTlVNKSkgeworCQl2aWFmYl9DUlRfT04gPSBTVEFURV9PTjsKKwkJZGV2aWNlX251bSsrOworCQl2aWFmYl9EZXZpY2VTdGF0dXMgfD0gQ1JUX0RldmljZTsKKwl9CisKKwlpZiAoKGRldmljZV9pZCAmIERWSV9EZXZpY2UpICYmIChkZXZpY2VfbnVtIDwgTUFYX0FDVElWRV9ERVZfTlVNKSkgeworCQl2aWFmYl9EVklfT04gPSBTVEFURV9PTjsKKwkJZGV2aWNlX251bSsrOworCQl2aWFmYl9EZXZpY2VTdGF0dXMgfD0gRFZJX0RldmljZTsKKwl9CisKKwlpZiAoKGRldmljZV9pZCAmIExDRF9EZXZpY2UpICYmIChkZXZpY2VfbnVtIDwgTUFYX0FDVElWRV9ERVZfTlVNKSkgeworCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJZGV2aWNlX251bSsrOworCQl2aWFmYl9EZXZpY2VTdGF0dXMgfD0gTENEX0RldmljZTsKKwl9CisKKwlpZiAoKGRldmljZV9pZCAmIExDRDJfRGV2aWNlKSAmJiAoZGV2aWNlX251bSA8IE1BWF9BQ1RJVkVfREVWX05VTSkpIHsKKwkJdmlhZmJfTENEMl9PTiA9IFNUQVRFX09OOworCQlkZXZpY2VfbnVtKys7CisJCXZpYWZiX0RldmljZVN0YXR1cyB8PSBMQ0QyX0RldmljZTsKKwl9CisKKwlpZiAodmlhZmJfRGV2aWNlU3RhdHVzID09IE5vbmVfRGV2aWNlKSB7CisJCS8qIFVzZSBDUlQgYXMgZGVmYXVsdCBhY3RpdmUgZGV2aWNlOiAqLworCQl2aWFmYl9DUlRfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfRGV2aWNlU3RhdHVzID0gQ1JUX0RldmljZTsKKwl9CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiRGV2aWNlIFN0YXR1czoleCIsIHZpYWZiX0RldmljZVN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIHZpYWZiX3NldF9kZXZpY2Uoc3RydWN0IGRldmljZV90IGFjdGl2ZV9kZXYpCit7CisJLyogQ2hlY2sgYXZhaWxhYmxlIGRldmljZSB0byBlbmFibGU6ICovCisJaW50IGRldmljZV9pZCA9IE5vbmVfRGV2aWNlOworCWlmIChhY3RpdmVfZGV2LmNydCkKKwkJZGV2aWNlX2lkIHw9IENSVF9EZXZpY2U7CisJaWYgKGFjdGl2ZV9kZXYuZHZpKQorCQlkZXZpY2VfaWQgfD0gRFZJX0RldmljZTsKKwlpZiAoYWN0aXZlX2Rldi5sY2QpCisJCWRldmljZV9pZCB8PSBMQ0RfRGV2aWNlOworCisJY2hlY2tfYXZhaWxhYmxlX2RldmljZV90b19lbmFibGUoZGV2aWNlX2lkKTsKKworCS8qIENoZWNrIHByb3BlcnR5IG9mIExDRDogKi8KKwlpZiAodmlhZmJfTENEX09OKSB7CisJCWlmIChhY3RpdmVfZGV2LmxjZF9kc3BfY2VudCkgeworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID0KKwkJCQl2aWFmYl9sY2RfZHNwX21ldGhvZCA9IExDRF9DRU5URVJJTkc7CisJCX0gZWxzZSB7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGlzcGxheV9tZXRob2QgPQorCQkJCXZpYWZiX2xjZF9kc3BfbWV0aG9kID0gTENEX0VYUEFORFNJT047CisJCX0KKworCQlpZiAoYWN0aXZlX2Rldi5sY2RfbW9kZSA9PSBMQ0RfU1BXRykgeworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9tb2RlID0KKwkJCQl2aWFmYl9sY2RfbW9kZSA9IExDRF9TUFdHOworCQl9IGVsc2UgeworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9tb2RlID0KKwkJCQl2aWFmYl9sY2RfbW9kZSA9IExDRF9PUEVOTERJOworCQl9CisKKwkJaWYgKGFjdGl2ZV9kZXYubGNkX3BhbmVsX2lkIDw9IExDRF9QQU5FTF9JRF9NQVhJTVVNKSB7CisJCQl2aWFmYl9sY2RfcGFuZWxfaWQgPSBhY3RpdmVfZGV2LmxjZF9wYW5lbF9pZDsKKwkJCXZpYWZiX2luaXRfbGNkX3NpemUoKTsKKwkJfQorCX0KKworCS8qIENoZWNrIHByb3BlcnR5IG9mIG1vZGU6ICovCisJaWYgKCFhY3RpdmVfZGV2LnhyZXMxKQorCQl2aWFmYl9zZWNvbmRfeHJlcyA9IDY0MDsKKwllbHNlCisJCXZpYWZiX3NlY29uZF94cmVzID0gYWN0aXZlX2Rldi54cmVzMTsKKwlpZiAoIWFjdGl2ZV9kZXYueXJlczEpCisJCXZpYWZiX3NlY29uZF95cmVzID0gNDgwOworCWVsc2UKKwkJdmlhZmJfc2Vjb25kX3lyZXMgPSBhY3RpdmVfZGV2LnlyZXMxOworCWlmIChhY3RpdmVfZGV2LmJwcCAhPSAwKQorCQl2aWFmYl9icHAgPSBhY3RpdmVfZGV2LmJwcDsKKwlpZiAoYWN0aXZlX2Rldi5icHAxICE9IDApCisJCXZpYWZiX2JwcDEgPSBhY3RpdmVfZGV2LmJwcDE7CisJaWYgKGFjdGl2ZV9kZXYucmVmcmVzaCAhPSAwKQorCQl2aWFmYl9yZWZyZXNoID0gYWN0aXZlX2Rldi5yZWZyZXNoOworCWlmIChhY3RpdmVfZGV2LnJlZnJlc2gxICE9IDApCisJCXZpYWZiX3JlZnJlc2gxID0gYWN0aXZlX2Rldi5yZWZyZXNoMTsKKwlpZiAoKGFjdGl2ZV9kZXYuc2FtbSA9PSBTVEFURV9PRkYpIHx8IChhY3RpdmVfZGV2LnNhbW0gPT0gU1RBVEVfT04pKQorCQl2aWFmYl9TQU1NX09OID0gYWN0aXZlX2Rldi5zYW1tOworCXZpYWZiX3ByaW1hcnlfZGV2ID0gYWN0aXZlX2Rldi5wcmltYXJ5X2RldjsKKworCXZpYWZiX3NldF9zdGFydF9hZGRyKCk7CisJdmlhZmJfc2V0X2lnYV9wYXRoKCk7Cit9CisKK3N0YXRpYyB2b2lkIHZpYWZiX3NldF92aWRlb19kZXZpY2UodTMyIHZpZGVvX2Rldl9pbmZvKQoreworCXZpYXBhcmluZm8tPnZpZGVvX29uX2NydCA9IFNUQVRFX09GRjsKKwl2aWFwYXJpbmZvLT52aWRlb19vbl9kdmkgPSBTVEFURV9PRkY7CisJdmlhcGFyaW5mby0+dmlkZW9fb25fbGNkID0gU1RBVEVfT0ZGOworCisJLyogQ2hlY2sgYXZhaWxhYmxlIGRldmljZSB0byBlbmFibGU6ICovCisJaWYgKCh2aWRlb19kZXZfaW5mbyAmIENSVF9EZXZpY2UpID09IENSVF9EZXZpY2UpCisJCXZpYXBhcmluZm8tPnZpZGVvX29uX2NydCA9IFNUQVRFX09OOworCWVsc2UgaWYgKCh2aWRlb19kZXZfaW5mbyAmIERWSV9EZXZpY2UpID09IERWSV9EZXZpY2UpCisJCXZpYXBhcmluZm8tPnZpZGVvX29uX2R2aSA9IFNUQVRFX09OOworCWVsc2UgaWYgKCh2aWRlb19kZXZfaW5mbyAmIExDRF9EZXZpY2UpID09IExDRF9EZXZpY2UpCisJCXZpYXBhcmluZm8tPnZpZGVvX29uX2xjZCA9IFNUQVRFX09OOworfQorCitzdGF0aWMgdm9pZCB2aWFmYl9nZXRfdmlkZW9fZGV2aWNlKHUzMiAqdmlkZW9fZGV2X2luZm8pCit7CisJKnZpZGVvX2Rldl9pbmZvID0gTm9uZV9EZXZpY2U7CisJaWYgKHZpYXBhcmluZm8tPnZpZGVvX29uX2NydCA9PSBTVEFURV9PTikKKwkJKnZpZGVvX2Rldl9pbmZvIHw9IENSVF9EZXZpY2U7CisJZWxzZSBpZiAodmlhcGFyaW5mby0+dmlkZW9fb25fZHZpID09IFNUQVRFX09OKQorCQkqdmlkZW9fZGV2X2luZm8gfD0gRFZJX0RldmljZTsKKwllbHNlIGlmICh2aWFwYXJpbmZvLT52aWRlb19vbl9sY2QgPT0gU1RBVEVfT04pCisJCSp2aWRlb19kZXZfaW5mbyB8PSBMQ0RfRGV2aWNlOworfQorCitzdGF0aWMgaW50IGdldF9wcmltYXJ5X2RldmljZSh2b2lkKQoreworCWludCBwcmltYXJ5X2RldmljZSA9IDA7CisJLyogUnVsZTogZGV2aWNlIG9uIGlnYTEgcGF0aCBhcmUgdGhlIHByaW1hcnkgZGV2aWNlLiAqLworCWlmICh2aWFmYl9TQU1NX09OKSB7CisJCWlmICh2aWFmYl9DUlRfT04pIHsKKwkJCWlmICh2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0ExKSB7CisJCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiQ1JUIElHQSBQYXRoOiVkXG4iLAorCQkJCQl2aWFwYXJpbmZvLT4KKwkJCQkJY3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGgpOworCQkJCXByaW1hcnlfZGV2aWNlID0gQ1JUX0RldmljZTsKKwkJCX0KKwkJfQorCQlpZiAodmlhZmJfRFZJX09OKSB7CisJCQlpZiAodmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTEpIHsKKwkJCQlERUJVR19NU0coS0VSTl9JTkZPICJEVkkgSUdBIFBhdGg6JWRcbiIsCisJCQkJCXZpYXBhcmluZm8tPgorCQkJCQl0bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGgpOworCQkJCXByaW1hcnlfZGV2aWNlID0gRFZJX0RldmljZTsKKwkJCX0KKwkJfQorCQlpZiAodmlhZmJfTENEX09OKSB7CisJCQlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTEpIHsKKwkJCQlERUJVR19NU0coS0VSTl9JTkZPICJMQ0QgSUdBIFBhdGg6JWRcbiIsCisJCQkJCXZpYXBhcmluZm8tPgorCQkJCQlsdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGgpOworCQkJCXByaW1hcnlfZGV2aWNlID0gTENEX0RldmljZTsKKwkJCX0KKwkJfQorCQlpZiAodmlhZmJfTENEMl9PTikgeworCQkJaWYgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+aWdhX3BhdGggPT0gSUdBMSkgeworCQkJCURFQlVHX01TRyhLRVJOX0lORk8gIkxDRDIgSUdBIFBhdGg6JWRcbiIsCisJCQkJCXZpYXBhcmluZm8tPgorCQkJCQlsdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoKTsKKwkJCQlwcmltYXJ5X2RldmljZSA9IExDRDJfRGV2aWNlOworCQkJfQorCQl9CisJfQorCXJldHVybiBwcmltYXJ5X2RldmljZTsKK30KKworc3RhdGljIHU4IGlzX2R1b3ZpZXcodm9pZCkKK3sKKwlpZiAoMCA9PSB2aWFmYl9TQU1NX09OKSB7CisJCWlmICh2aWFmYl9MQ0RfT04gKyB2aWFmYl9MQ0QyX09OICsKKwkJCXZpYWZiX0RWSV9PTiArIHZpYWZiX0NSVF9PTiA9PSAyKQorCQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgeworCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdm9pZCBhcHBseV9zZWNvbmRfbW9kZV9zZXR0aW5nKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbworCSpzZWNfdmFyKQoreworCXUzMiBodG90YWwsIHZ0b3RhbCwgbG9uZ19yZWZyZXNoOworCisJaHRvdGFsID0gc2VjX3Zhci0+eHJlcyArIHNlY192YXItPmxlZnRfbWFyZ2luICsKKwkJc2VjX3Zhci0+cmlnaHRfbWFyZ2luICsgc2VjX3Zhci0+aHN5bmNfbGVuOworCXZ0b3RhbCA9IHNlY192YXItPnlyZXMgKyBzZWNfdmFyLT51cHBlcl9tYXJnaW4gKworCQlzZWNfdmFyLT5sb3dlcl9tYXJnaW4gKyBzZWNfdmFyLT52c3luY19sZW47CisJaWYgKChzZWNfdmFyLT54cmVzX3ZpcnR1YWwgKiAoc2VjX3Zhci0+Yml0c19wZXJfcGl4ZWwgPj4gMykpICYgMHgxRikgeworCQkvKklzIDMyIGJ5dGVzIGFsaWdubWVudD8gKi8KKwkJLyozMiBwaXhlbCBhbGlnbm1lbnQgKi8KKwkJc2VjX3Zhci0+eHJlc192aXJ0dWFsID0gKHNlY192YXItPnhyZXNfdmlydHVhbCArIDMxKSAmIH4zMTsKKwl9CisKKwlodG90YWwgPSBzZWNfdmFyLT54cmVzICsgc2VjX3Zhci0+bGVmdF9tYXJnaW4gKworCQlzZWNfdmFyLT5yaWdodF9tYXJnaW4gKyBzZWNfdmFyLT5oc3luY19sZW47CisJdnRvdGFsID0gc2VjX3Zhci0+eXJlcyArIHNlY192YXItPnVwcGVyX21hcmdpbiArCisJCXNlY192YXItPmxvd2VyX21hcmdpbiArIHNlY192YXItPnZzeW5jX2xlbjsKKwlsb25nX3JlZnJlc2ggPSAxMDAwMDAwMDAwVUwgLyBzZWNfdmFyLT5waXhjbG9jayAqIDEwMDA7CisJbG9uZ19yZWZyZXNoIC89IChodG90YWwgKiB2dG90YWwpOworCisJdmlhZmJfc2Vjb25kX3hyZXMgPSBzZWNfdmFyLT54cmVzOworCXZpYWZiX3NlY29uZF95cmVzID0gc2VjX3Zhci0+eXJlczsKKwl2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzID0gc2VjX3Zhci0+eHJlc192aXJ0dWFsOworCXZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXMgPSBzZWNfdmFyLT55cmVzX3ZpcnR1YWw7CisJdmlhZmJfYnBwMSA9IHNlY192YXItPmJpdHNfcGVyX3BpeGVsOworCXZpYWZiX3JlZnJlc2gxID0gdmlhZmJfZ2V0X3JlZnJlc2goc2VjX3Zhci0+eHJlcywgc2VjX3Zhci0+eXJlcywKKwkJbG9uZ19yZWZyZXNoKTsKK30KKworc3RhdGljIGludCBhcHBseV9kZXZpY2Vfc2V0dGluZyhzdHJ1Y3QgdmlhZmJfaW9jdGxfc2V0dGluZyBzZXR0aW5nX2luZm8sCisJc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaW50IG5lZWRfc2V0X21vZGUgPSAwOworCURFQlVHX01TRyhLRVJOX0lORk8gImFwcGx5X2RldmljZV9zZXR0aW5nXG4iKTsKKworCWlmIChzZXR0aW5nX2luZm8uZGV2aWNlX2ZsYWcpIHsKKwkJbmVlZF9zZXRfbW9kZSA9IDE7CisJCWNoZWNrX2F2YWlsYWJsZV9kZXZpY2VfdG9fZW5hYmxlKHNldHRpbmdfaW5mby5kZXZpY2Vfc3RhdHVzKTsKKwl9CisKKwkvKiBVbmxvY2sgTENEJ3Mgb3BlcmF0aW9uIGFjY29yZGluZyB0byBMQ0QgZmxhZworCSAgIGFuZCBjaGVjayBpZiB0aGUgc2V0dGluZyB2YWx1ZSBpcyB2YWxpZC4gKi8KKwkvKiBJZiB0aGUgdmFsdWUgaXMgdmFsaWQsIGFwcGx5IHRoZSBuZXcgc2V0dGluZyB2YWx1ZSB0byB0aGUgZGV2aWNlLiAqLworCWlmICh2aWFmYl9MQ0RfT04pIHsKKwkJaWYgKHNldHRpbmdfaW5mby5sY2Rfb3BlcmF0aW9uX2ZsYWcgJiBPUF9MQ0RfQ0VOVEVSSU5HKSB7CisJCQluZWVkX3NldF9tb2RlID0gMTsKKwkJCWlmIChzZXR0aW5nX2luZm8ubGNkX2F0dHJpYnV0ZXMuZGlzcGxheV9jZW50ZXIpIHsKKwkJCQkvKiBDZW50ZXJpbmcgKi8KKwkJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGlzcGxheV9tZXRob2QgPQorCQkJCSAgICBMQ0RfQ0VOVEVSSU5HOworCQkJCXZpYWZiX2xjZF9kc3BfbWV0aG9kID0gTENEX0NFTlRFUklORzsKKwkJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmRpc3BsYXlfbWV0aG9kID0KKwkJCQkgICAgdmlhZmJfbGNkX2RzcF9tZXRob2QgPSBMQ0RfQ0VOVEVSSU5HOworCQkJfSBlbHNlIHsKKwkJCQkvKiBleHBhbmRzaW9uICovCisJCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID0KKwkJCQkgICAgTENEX0VYUEFORFNJT047CisJCQkJdmlhZmJfbGNkX2RzcF9tZXRob2QgPSBMQ0RfRVhQQU5EU0lPTjsKKwkJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmRpc3BsYXlfbWV0aG9kID0KKwkJCQkgICAgTENEX0VYUEFORFNJT047CisJCQkJdmlhZmJfbGNkX2RzcF9tZXRob2QgPSBMQ0RfRVhQQU5EU0lPTjsKKwkJCX0KKwkJfQorCisJCWlmIChzZXR0aW5nX2luZm8ubGNkX29wZXJhdGlvbl9mbGFnICYgT1BfTENEX01PREUpIHsKKwkJCW5lZWRfc2V0X21vZGUgPSAxOworCQkJaWYgKHNldHRpbmdfaW5mby5sY2RfYXR0cmlidXRlcy5sY2RfbW9kZSA9PQorCQkJCUxDRF9TUFdHKSB7CisJCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9tb2RlID0KKwkJCQkJdmlhZmJfbGNkX21vZGUgPSBMQ0RfU1BXRzsKKwkJCX0gZWxzZSB7CisJCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9tb2RlID0KKwkJCQkJdmlhZmJfbGNkX21vZGUgPSBMQ0RfT1BFTkxESTsKKwkJCX0KKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+bGNkX21vZGUgPQorCQkJICAgIHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZTsKKwkJfQorCisJCWlmIChzZXR0aW5nX2luZm8ubGNkX29wZXJhdGlvbl9mbGFnICYgT1BfTENEX1BBTkVMX0lEKSB7CisJCQluZWVkX3NldF9tb2RlID0gMTsKKwkJCWlmIChzZXR0aW5nX2luZm8ubGNkX2F0dHJpYnV0ZXMucGFuZWxfaWQgPD0KKwkJCSAgICBMQ0RfUEFORUxfSURfTUFYSU1VTSkgeworCQkJCXZpYWZiX2xjZF9wYW5lbF9pZCA9CisJCQkJICAgIHNldHRpbmdfaW5mby5sY2RfYXR0cmlidXRlcy5wYW5lbF9pZDsKKwkJCQl2aWFmYl9pbml0X2xjZF9zaXplKCk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoMCAhPSAoc2V0dGluZ19pbmZvLnNhbW1fc3RhdHVzICYgT1BfU0FNTSkpIHsKKwkJc2V0dGluZ19pbmZvLnNhbW1fc3RhdHVzID0KKwkJICAgIHNldHRpbmdfaW5mby5zYW1tX3N0YXR1cyAmICh+T1BfU0FNTSk7CisJCWlmIChzZXR0aW5nX2luZm8uc2FtbV9zdGF0dXMgPT0gMAorCQkgICAgfHwgc2V0dGluZ19pbmZvLnNhbW1fc3RhdHVzID09IDEpIHsKKwkJCXZpYWZiX1NBTU1fT04gPSBzZXR0aW5nX2luZm8uc2FtbV9zdGF0dXM7CisKKwkJCWlmICh2aWFmYl9TQU1NX09OKQorCQkJCXZpYWZiX3ByaW1hcnlfZGV2ID0gc2V0dGluZ19pbmZvLnByaW1hcnlfZGV2aWNlOworCisJCQl2aWFmYl9zZXRfc3RhcnRfYWRkcigpOworCQkJdmlhZmJfc2V0X2lnYV9wYXRoKCk7CisJCX0KKwkJbmVlZF9zZXRfbW9kZSA9IDE7CisJfQorCisJdmlhcGFyaW5mby0+ZHVvdmlldyA9IGlzX2R1b3ZpZXcoKTsKKworCWlmICghbmVlZF9zZXRfbW9kZSkgeworCQk7CisJfSBlbHNlIHsKKwkJdmlhZmJfc2V0X2lnYV9wYXRoKCk7CisJCXZpYWZiX3NldF9wYXIoaW5mbyk7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCByZXRyaWV2ZV9kZXZpY2Vfc2V0dGluZyhzdHJ1Y3QgdmlhZmJfaW9jdGxfc2V0dGluZworCSpzZXR0aW5nX2luZm8pCit7CisKKwkvKiBnZXQgZGV2aWNlIHN0YXR1cyAqLworCWlmICh2aWFmYl9DUlRfT04gPT0gMSkKKwkJc2V0dGluZ19pbmZvLT5kZXZpY2Vfc3RhdHVzID0gQ1JUX0RldmljZTsKKwlpZiAodmlhZmJfRFZJX09OID09IDEpCisJCXNldHRpbmdfaW5mby0+ZGV2aWNlX3N0YXR1cyB8PSBEVklfRGV2aWNlOworCWlmICh2aWFmYl9MQ0RfT04gPT0gMSkKKwkJc2V0dGluZ19pbmZvLT5kZXZpY2Vfc3RhdHVzIHw9IExDRF9EZXZpY2U7CisJaWYgKHZpYWZiX0xDRDJfT04gPT0gMSkKKwkJc2V0dGluZ19pbmZvLT5kZXZpY2Vfc3RhdHVzIHw9IExDRDJfRGV2aWNlOworCWlmICgodmlhcGFyaW5mby0+dmlkZW9fb25fY3J0ID09IDEpICYmICh2aWFmYl9DUlRfT04gPT0gMSkpIHsKKwkJc2V0dGluZ19pbmZvLT52aWRlb19kZXZpY2Vfc3RhdHVzID0KKwkJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoOworCX0gZWxzZSBpZiAoKHZpYXBhcmluZm8tPnZpZGVvX29uX2R2aSA9PSAxKSAmJiAodmlhZmJfRFZJX09OID09IDEpKSB7CisJCXNldHRpbmdfaW5mby0+dmlkZW9fZGV2aWNlX3N0YXR1cyA9CisJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGg7CisJfSBlbHNlIGlmICgodmlhcGFyaW5mby0+dmlkZW9fb25fbGNkID09IDEpICYmICh2aWFmYl9MQ0RfT04gPT0gMSkpIHsKKwkJc2V0dGluZ19pbmZvLT52aWRlb19kZXZpY2Vfc3RhdHVzID0KKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aDsKKwl9IGVsc2UgeworCQlzZXR0aW5nX2luZm8tPnZpZGVvX2RldmljZV9zdGF0dXMgPSAwOworCX0KKworCXNldHRpbmdfaW5mby0+c2FtbV9zdGF0dXMgPSB2aWFmYl9TQU1NX09OOworCXNldHRpbmdfaW5mby0+cHJpbWFyeV9kZXZpY2UgPSBnZXRfcHJpbWFyeV9kZXZpY2UoKTsKKworCXNldHRpbmdfaW5mby0+Zmlyc3RfZGV2X2JwcCA9IHZpYWZiX2JwcDsKKwlzZXR0aW5nX2luZm8tPnNlY29uZF9kZXZfYnBwID0gdmlhZmJfYnBwMTsKKworCXNldHRpbmdfaW5mby0+Zmlyc3RfZGV2X3JlZnJlc2ggPSB2aWFmYl9yZWZyZXNoOworCXNldHRpbmdfaW5mby0+c2Vjb25kX2Rldl9yZWZyZXNoID0gdmlhZmJfcmVmcmVzaDE7CisKKwlzZXR0aW5nX2luZm8tPmZpcnN0X2Rldl9ob3JfcmVzID0gdmlhZmJfaG90cGx1Z19YcmVzOworCXNldHRpbmdfaW5mby0+Zmlyc3RfZGV2X3Zlcl9yZXMgPSB2aWFmYl9ob3RwbHVnX1lyZXM7CisJc2V0dGluZ19pbmZvLT5zZWNvbmRfZGV2X2hvcl9yZXMgPSB2aWFmYl9zZWNvbmRfeHJlczsKKwlzZXR0aW5nX2luZm8tPnNlY29uZF9kZXZfdmVyX3JlcyA9IHZpYWZiX3NlY29uZF95cmVzOworCisJLyogR2V0IGxjZCBhdHRyaWJ1dGVzICovCisJc2V0dGluZ19pbmZvLT5sY2RfYXR0cmlidXRlcy5kaXNwbGF5X2NlbnRlciA9IHZpYWZiX2xjZF9kc3BfbWV0aG9kOworCXNldHRpbmdfaW5mby0+bGNkX2F0dHJpYnV0ZXMucGFuZWxfaWQgPSB2aWFmYl9sY2RfcGFuZWxfaWQ7CisJc2V0dGluZ19pbmZvLT5sY2RfYXR0cmlidXRlcy5sY2RfbW9kZSA9IHZpYWZiX2xjZF9tb2RlOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9hY3RpdmVfZGV2KHZvaWQpCit7CisJdmlhZmJfQ1JUX09OID0gU1RBVEVfT0ZGOworCXZpYWZiX0RWSV9PTiA9IFNUQVRFX09GRjsKKwl2aWFmYl9MQ0RfT04gPSBTVEFURV9PRkY7CisJdmlhZmJfTENEMl9PTiA9IFNUQVRFX09GRjsKKwkvKiAxLiBNb2RpZnkgdGhlIGFjdGl2ZSBzdGF0dXMgb2YgZGV2aWNlcy4gKi8KKwkvKiAyLiBLZWVwIHRoZSBvcmRlciBvZiBkZXZpY2VzLCBzbyB3ZSBjYW4gc2V0IGNvcnJlc3BvbmRpbmcKKwkgICBJR0EgcGF0aCB0byBkZXZpY2VzIGluIFNBTU0gY2FzZS4gKi8KKwkvKiAgICBOb3RlOiBUaGUgcHJldmlvdXMgb2YgYWN0aXZlX2RldiBpcyBwcmltYXJ5IGRldmljZSwKKwkgICBhbmQgdGhlIGZvbGxvd2luZyBpcyBzZWNvbmRhcnkgZGV2aWNlLiAqLworCWlmICghc3RybmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiQ1JUK0RWSSIsIDcpKSB7CisJCS8qIENSVCtEVkkgKi8KKwkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047CisJCXZpYWZiX0RWSV9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9wcmltYXJ5X2RldiA9IENSVF9EZXZpY2U7CisJfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiRFZJK0NSVCIsIDcpKSB7CisJCS8qIERWSStDUlQgKi8KKwkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047CisJCXZpYWZiX0RWSV9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9wcmltYXJ5X2RldiA9IERWSV9EZXZpY2U7CisJfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiQ1JUK0xDRCIsIDcpKSB7CisJCS8qIENSVCtMQ0QgKi8KKwkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047CisJCXZpYWZiX0xDRF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9wcmltYXJ5X2RldiA9IENSVF9EZXZpY2U7CisJfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiTENEK0NSVCIsIDcpKSB7CisJCS8qIExDRCtDUlQgKi8KKwkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047CisJCXZpYWZiX0xDRF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9wcmltYXJ5X2RldiA9IExDRF9EZXZpY2U7CisJfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiRFZJK0xDRCIsIDcpKSB7CisJCS8qIERWSStMQ0QgKi8KKwkJdmlhZmJfRFZJX09OID0gU1RBVEVfT047CisJCXZpYWZiX0xDRF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9wcmltYXJ5X2RldiA9IERWSV9EZXZpY2U7CisJfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiTENEK0RWSSIsIDcpKSB7CisJCS8qIExDRCtEVkkgKi8KKwkJdmlhZmJfRFZJX09OID0gU1RBVEVfT047CisJCXZpYWZiX0xDRF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9wcmltYXJ5X2RldiA9IExDRF9EZXZpY2U7CisJfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiTENEK0xDRDIiLCA4KSkgeworCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfTENEMl9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9wcmltYXJ5X2RldiA9IExDRF9EZXZpY2U7CisJfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiTENEMitMQ0QiLCA4KSkgeworCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfTENEMl9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9wcmltYXJ5X2RldiA9IExDRDJfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkNSVCIsIDMpKSB7CisJCS8qIENSVCBvbmx5ICovCisJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9TQU1NX09OID0gU1RBVEVfT0ZGOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkRWSSIsIDMpKSB7CisJCS8qIERWSSBvbmx5ICovCisJCXZpYWZiX0RWSV9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9TQU1NX09OID0gU1RBVEVfT0ZGOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkxDRCIsIDMpKSB7CisJCS8qIExDRCBvbmx5ICovCisJCXZpYWZiX0xDRF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9TQU1NX09OID0gU1RBVEVfT0ZGOworCX0gZWxzZSB7CisJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9TQU1NX09OID0gU1RBVEVfT0ZGOworCX0KKwl2aWFwYXJpbmZvLT5kdW92aWV3ID0gaXNfZHVvdmlldygpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV92aWRlb19kZXYodm9pZCkKK3sKKwl2aWFwYXJpbmZvLT52aWRlb19vbl9jcnQgPSBTVEFURV9PRkY7CisJdmlhcGFyaW5mby0+dmlkZW9fb25fZHZpID0gU1RBVEVfT0ZGOworCXZpYXBhcmluZm8tPnZpZGVvX29uX2xjZCA9IFNUQVRFX09GRjsKKworCWlmICghc3RybmNtcCh2aWFmYl92aWRlb19kZXYsICJDUlQiLCAzKSkgeworCQkvKiBWaWRlbyBvbiBDUlQgKi8KKwkJdmlhcGFyaW5mby0+dmlkZW9fb25fY3J0ID0gU1RBVEVfT047CisJfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl92aWRlb19kZXYsICJEVkkiLCAzKSkgeworCQkvKiBWaWRlbyBvbiBEVkkgKi8KKwkJdmlhcGFyaW5mby0+dmlkZW9fb25fZHZpID0gU1RBVEVfT047CisJfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl92aWRlb19kZXYsICJMQ0QiLCAzKSkgeworCQkvKiBWaWRlbyBvbiBMQ0QgKi8KKwkJdmlhcGFyaW5mby0+dmlkZW9fb25fbGNkID0gU1RBVEVfT047CisJfQorfQorCitzdGF0aWMgaW50IHBhcnNlX3BvcnQoY2hhciAqb3B0X3N0ciwgaW50ICpvdXRwdXRfaW50ZXJmYWNlKQoreworCWlmICghc3RybmNtcChvcHRfc3RyLCAiRFZQMCIsIDQpKQorCQkqb3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9EVlAwOworCWVsc2UgaWYgKCFzdHJuY21wKG9wdF9zdHIsICJEVlAxIiwgNCkpCisJCSpvdXRwdXRfaW50ZXJmYWNlID0gSU5URVJGQUNFX0RWUDE7CisJZWxzZSBpZiAoIXN0cm5jbXAob3B0X3N0ciwgIkRGUF9ISUdITE9XIiwgMTEpKQorCQkqb3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9ERlA7CisJZWxzZSBpZiAoIXN0cm5jbXAob3B0X3N0ciwgIkRGUF9ISUdIIiwgOCkpCisJCSpvdXRwdXRfaW50ZXJmYWNlID0gSU5URVJGQUNFX0RGUF9ISUdIOworCWVsc2UgaWYgKCFzdHJuY21wKG9wdF9zdHIsICJERlBfTE9XIiwgNykpCisJCSpvdXRwdXRfaW50ZXJmYWNlID0gSU5URVJGQUNFX0RGUF9MT1c7CisJZWxzZQorCQkqb3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9OT05FOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9sY2RfcG9ydCh2b2lkKQoreworCXBhcnNlX3BvcnQodmlhZmJfbGNkX3BvcnQsICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLgorCQlvdXRwdXRfaW50ZXJmYWNlKTsKKwkvKkluaXRpYWxpemUgdG8gYXZvaWQgdW5leHBlY3RlZCBiZWhhdmlvciAqLworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLm91dHB1dF9pbnRlcmZhY2UgPQorCUlOVEVSRkFDRV9OT05FOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAicGFyc2VfbGNkX3BvcnQ6IHZpYWZiX2xjZF9wb3J0OiVzLGludGVyZmFjZTolZFxuIiwKKwkJICB2aWFmYl9sY2RfcG9ydCwgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby4KKwkJICBvdXRwdXRfaW50ZXJmYWNlKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZHZpX3BvcnQodm9pZCkKK3sKKwlwYXJzZV9wb3J0KHZpYWZiX2R2aV9wb3J0LCAmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby4KKwkJb3V0cHV0X2ludGVyZmFjZSk7CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJwYXJzZV9kdmlfcG9ydDogdmlhZmJfZHZpX3BvcnQ6JXMsaW50ZXJmYWNlOiVkXG4iLAorCQkgIHZpYWZiX2R2aV9wb3J0LCB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLgorCQkgIG91dHB1dF9pbnRlcmZhY2UpOworfQorCisvKgorICogVGhlIHByb2MgZmlsZXN5c3RlbSByZWFkL3dyaXRlIGZ1bmN0aW9uLCBhIHNpbXBsZSBwcm9jIGltcGxlbWVudCB0bworICogZ2V0L3NldCB0aGUgdmFsdWUgb2YgRFBBICBEVlAwLCAgIERWUDBEYXRhRHJpdmluZywgIERWUDBDbG9ja0RyaXZpbmcsIERWUDEsCisgKiBEVlAxRHJpdmluZywgREZQSGlnaCwgREZQTG93IENSOTYsICAgU1IyQVs1XSwgU1IxQlsxXSwgU1IyQVs0XSwgU1IxRVsyXSwKKyAqIENSOUIsICAgIFNSNjUsICAgIENSOTcsICAgIENSOTkKKyAqLworc3RhdGljIGludCB2aWFmYl9kdnAwX3Byb2NfcmVhZChjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAoraW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgbGVuID0gMDsKKwl1OCBkdnAwX2RhdGFfZHJpID0gMCwgZHZwMF9jbGtfZHJpID0gMCwgZHZwMCA9IDA7CisJZHZwMF9kYXRhX2RyaSA9CisJICAgICh2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IyQSkgJiBCSVQ1KSA+PiA0IHwKKwkgICAgKHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjFCKSAmIEJJVDEpID4+IDE7CisJZHZwMF9jbGtfZHJpID0KKwkgICAgKHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjJBKSAmIEJJVDQpID4+IDMgfAorCSAgICAodmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMUUpICYgQklUMikgPj4gMjsKKwlkdnAwID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOTYpICYgMHgwZjsKKwlsZW4gKz0KKwkgICAgc3ByaW50ZihidWYgKyBsZW4sICIleCAleCAleFxuIiwgZHZwMCwgZHZwMF9kYXRhX2RyaSwgZHZwMF9jbGtfZHJpKTsKKwkqZW9mID0gMTsJCS8qSW5mb3JtIGtlcm5lbCBlbmQgb2YgZGF0YSAqLworCXJldHVybiBsZW47Cit9CitzdGF0aWMgaW50IHZpYWZiX2R2cDBfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCWNoYXIgYnVmWzIwXSwgKnZhbHVlLCAqcGJ1ZjsKKwl1OCByZWdfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aCwgaTsKKwlpZiAoY291bnQgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlsZW5ndGggPSBjb3VudCA+IDIwID8gMjAgOiBjb3VudDsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZlswXSwgYnVmZmVyLCBsZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlidWZbbGVuZ3RoIC0gMV0gPSAnXDAnOwkvKkVuc3VyZSBlbmQgc3RyaW5nICovCisJcGJ1ZiA9ICZidWZbMF07CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQl2YWx1ZSA9IHN0cnNlcCgmcGJ1ZiwgIiAiKTsKKwkJaWYgKHZhbHVlICE9IE5VTEwpIHsKKwkJCXN0cmljdF9zdHJ0b3VsKHZhbHVlLCAwLCAodW5zaWduZWQgbG9uZyAqKSZyZWdfdmFsKTsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gIkRWUDA6cmVnX3ZhbFslbF09OiV4XG4iLCBpLAorCQkJCSAgcmVnX3ZhbCk7CisJCQlzd2l0Y2ggKGkpIHsKKwkJCWNhc2UgMDoKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwKKwkJCQkJcmVnX3ZhbCwgMHgwZik7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsCisJCQkJCXJlZ192YWwgPDwgNCwgQklUNSk7CisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxQiwgVklBU1IsCisJCQkJCXJlZ192YWwgPDwgMSwgQklUMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsCisJCQkJCXJlZ192YWwgPDwgMywgQklUNCk7CisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxRSwgVklBU1IsCisJCQkJCXJlZ192YWwgPDwgMiwgQklUMik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIGludCB2aWFmYl9kdnAxX3Byb2NfcmVhZChjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50IGxlbiA9IDA7CisJdTggZHZwMSA9IDAsIGR2cDFfZGF0YV9kcmkgPSAwLCBkdnAxX2Nsa19kcmkgPSAwOworCWR2cDEgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5QikgJiAweDBmOworCWR2cDFfZGF0YV9kcmkgPSAodmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSNjUpICYgMHgwYykgPj4gMjsKKwlkdnAxX2Nsa19kcmkgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1I2NSkgJiAweDAzOworCWxlbiArPQorCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIiV4ICV4ICV4XG4iLCBkdnAxLCBkdnAxX2RhdGFfZHJpLCBkdnAxX2Nsa19kcmkpOworCSplb2YgPSAxOwkJLypJbmZvcm0ga2VybmVsIGVuZCBvZiBkYXRhICovCisJcmV0dXJuIGxlbjsKK30KK3N0YXRpYyBpbnQgdmlhZmJfZHZwMV9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCit7CisJY2hhciBidWZbMjBdLCAqdmFsdWUsICpwYnVmOworCXU4IHJlZ192YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBpOworCWlmIChjb3VudCA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCWxlbmd0aCA9IGNvdW50ID4gMjAgPyAyMCA6IGNvdW50OworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmWzBdLCBidWZmZXIsIGxlbmd0aCkpCisJCXJldHVybiAtRUZBVUxUOworCWJ1ZltsZW5ndGggLSAxXSA9ICdcMCc7CS8qRW5zdXJlIGVuZCBzdHJpbmcgKi8KKwlwYnVmID0gJmJ1ZlswXTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXZhbHVlID0gc3Ryc2VwKCZwYnVmLCAiICIpOworCQlpZiAodmFsdWUgIT0gTlVMTCkgeworCQkJc3RyaWN0X3N0cnRvdWwodmFsdWUsIDAsICh1bnNpZ25lZCBsb25nICopJnJlZ192YWwpOworCQkJc3dpdGNoIChpKSB7CisJCQljYXNlIDA6CisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5QiwgVklBQ1IsCisJCQkJCXJlZ192YWwsIDB4MGYpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNjUsIFZJQVNSLAorCQkJCQlyZWdfdmFsIDw8IDIsIDB4MGMpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNjUsIFZJQVNSLAorCQkJCQlyZWdfdmFsLCAweDAzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgdmlhZmJfZGZwaF9wcm9jX3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWludCBsZW4gPSAwOworCXU4IGRmcF9oaWdoID0gMDsKKwlkZnBfaGlnaCA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjk3KSAmIDB4MGY7CisJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJXhcbiIsIGRmcF9oaWdoKTsKKwkqZW9mID0gMTsJCS8qSW5mb3JtIGtlcm5lbCBlbmQgb2YgZGF0YSAqLworCXJldHVybiBsZW47Cit9CitzdGF0aWMgaW50IHZpYWZiX2RmcGhfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCWNoYXIgYnVmWzIwXTsKKwl1OCByZWdfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aDsKKwlpZiAoY291bnQgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlsZW5ndGggPSBjb3VudCA+IDIwID8gMjAgOiBjb3VudDsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZlswXSwgYnVmZmVyLCBsZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlidWZbbGVuZ3RoIC0gMV0gPSAnXDAnOwkvKkVuc3VyZSBlbmQgc3RyaW5nICovCisJc3RyaWN0X3N0cnRvdWwoJmJ1ZlswXSwgMCwgKHVuc2lnbmVkIGxvbmcgKikmcmVnX3ZhbCk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsIHJlZ192YWwsIDB4MGYpOworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBpbnQgdmlhZmJfZGZwbF9wcm9jX3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWludCBsZW4gPSAwOworCXU4IGRmcF9sb3cgPSAwOworCWRmcF9sb3cgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5OSkgJiAweDBmOworCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiV4XG4iLCBkZnBfbG93KTsKKwkqZW9mID0gMTsJCS8qSW5mb3JtIGtlcm5lbCBlbmQgb2YgZGF0YSAqLworCXJldHVybiBsZW47Cit9CitzdGF0aWMgaW50IHZpYWZiX2RmcGxfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCWNoYXIgYnVmWzIwXTsKKwl1OCByZWdfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aDsKKwlpZiAoY291bnQgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlsZW5ndGggPSBjb3VudCA+IDIwID8gMjAgOiBjb3VudDsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZlswXSwgYnVmZmVyLCBsZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlidWZbbGVuZ3RoIC0gMV0gPSAnXDAnOwkvKkVuc3VyZSBlbmQgc3RyaW5nICovCisJc3RyaWN0X3N0cnRvdWwoJmJ1ZlswXSwgMCwgKHVuc2lnbmVkIGxvbmcgKikmcmVnX3ZhbCk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIHJlZ192YWwsIDB4MGYpOworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBpbnQgdmlhZmJfdnQxNjM2X3Byb2NfcmVhZChjaGFyICpidWYsIGNoYXIgKipzdGFydCwKKwlvZmZfdCBvZmZzZXQsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50IGxlbiA9IDA7CisJdTggdnQxNjM2XzA4ID0gMCwgdnQxNjM2XzA5ID0gMDsKKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpIHsKKwljYXNlIFZUMTYzNl9MVkRTOgorCQl2dDE2MzZfMDggPQorCQkgICAgdmlhZmJfZ3Bpb19pMmNfcmVhZF9sdmRzKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLAorCQkgICAgJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8sIDB4MDgpICYgMHgwZjsKKwkJdnQxNjM2XzA5ID0KKwkJICAgIHZpYWZiX2dwaW9faTJjX3JlYWRfbHZkcyh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJICAgICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLCAweDA5KSAmIDB4MWY7CisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiV4ICV4XG4iLCB2dDE2MzZfMDgsIHZ0MTYzNl8wOSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lKSB7CisJY2FzZSBWVDE2MzZfTFZEUzoKKwkJdnQxNjM2XzA4ID0KKwkJICAgIHZpYWZiX2dwaW9faTJjX3JlYWRfbHZkcyh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIsCisJCQkmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIsIDB4MDgpICYgMHgwZjsKKwkJdnQxNjM2XzA5ID0KKwkJICAgIHZpYWZiX2dwaW9faTJjX3JlYWRfbHZkcyh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIsCisJCQkmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIsIDB4MDkpICYgMHgxZjsKKwkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiICV4ICV4XG4iLCB2dDE2MzZfMDgsIHZ0MTYzNl8wOSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwkqZW9mID0gMTsJCS8qSW5mb3JtIGtlcm5lbCBlbmQgb2YgZGF0YSAqLworCXJldHVybiBsZW47Cit9CitzdGF0aWMgaW50IHZpYWZiX3Z0MTYzNl9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCit7CisJY2hhciBidWZbMzBdLCAqdmFsdWUsICpwYnVmOworCXN0cnVjdCBJT0RBVEEgcmVnX3ZhbDsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aCwgaTsKKwlpZiAoY291bnQgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlsZW5ndGggPSBjb3VudCA+IDMwID8gMzAgOiBjb3VudDsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZlswXSwgYnVmZmVyLCBsZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlidWZbbGVuZ3RoIC0gMV0gPSAnXDAnOwkvKkVuc3VyZSBlbmQgc3RyaW5nICovCisJcGJ1ZiA9ICZidWZbMF07CisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKSB7CisJY2FzZSBWVDE2MzZfTFZEUzoKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJdmFsdWUgPSBzdHJzZXAoJnBidWYsICIgIik7CisJCQlpZiAodmFsdWUgIT0gTlVMTCkgeworCQkJCXN0cmljdF9zdHJ0b3VsKHZhbHVlLCAwLAorCQkJCQkodW5zaWduZWQgbG9uZyAqKSZyZWdfdmFsLkRhdGEpOworCQkJCXN3aXRjaCAoaSkgeworCQkJCWNhc2UgMDoKKwkJCQkJcmVnX3ZhbC5JbmRleCA9IDB4MDg7CisJCQkJCXJlZ192YWwuTWFzayA9IDB4MGY7CisJCQkJCXZpYWZiX2dwaW9faTJjX3dyaXRlX21hc2tfbHZkcworCQkJCQkgICAgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCQkgICAgJnZpYXBhcmluZm8tPgorCQkJCQkgICAgY2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbywKKwkJCQkJICAgICByZWdfdmFsKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxOgorCQkJCQlyZWdfdmFsLkluZGV4ID0gMHgwOTsKKwkJCQkJcmVnX3ZhbC5NYXNrID0gMHgxZjsKKwkJCQkJdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzCisJCQkJCSAgICAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8sCisJCQkJCSAgICAmdmlhcGFyaW5mby0+CisJCQkJCSAgICBjaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLAorCQkJCQkgICAgIHJlZ192YWwpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lKSB7CisJY2FzZSBWVDE2MzZfTFZEUzoKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJdmFsdWUgPSBzdHJzZXAoJnBidWYsICIgIik7CisJCQlpZiAodmFsdWUgIT0gTlVMTCkgeworCQkJCXN0cmljdF9zdHJ0b3VsKHZhbHVlLCAwLAorCQkJCQkodW5zaWduZWQgbG9uZyAqKSZyZWdfdmFsLkRhdGEpOworCQkJCXN3aXRjaCAoaSkgeworCQkJCWNhc2UgMDoKKwkJCQkJcmVnX3ZhbC5JbmRleCA9IDB4MDg7CisJCQkJCXJlZ192YWwuTWFzayA9IDB4MGY7CisJCQkJCXZpYWZiX2dwaW9faTJjX3dyaXRlX21hc2tfbHZkcworCQkJCQkgICAgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMiwKKwkJCQkJICAgICZ2aWFwYXJpbmZvLT4KKwkJCQkJICAgIGNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLAorCQkJCQkgICAgIHJlZ192YWwpOworCQkJCQlicmVhazsKKwkJCQljYXNlIDE6CisJCQkJCXJlZ192YWwuSW5kZXggPSAweDA5OworCQkJCQlyZWdfdmFsLk1hc2sgPSAweDFmOworCQkJCQl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMKKwkJCQkJICAgICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIsCisJCQkJCSAgICAmdmlhcGFyaW5mby0+CisJCQkJCSAgICBjaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMiwKKwkJCQkJICAgICByZWdfdmFsKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCB2aWFmYl9pbml0X3Byb2Moc3RydWN0IHByb2NfZGlyX2VudHJ5ICp2aWFmYl9lbnRyeSkKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OworCXZpYWZiX2VudHJ5ID0gcHJvY19ta2RpcigidmlhZmIiLCBOVUxMKTsKKwlpZiAodmlhZmJfZW50cnkpIHsKKwkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZHZwMCIsIDAsIHZpYWZiX2VudHJ5KTsKKwkJaWYgKGVudHJ5KSB7CisJCQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwkJCWVudHJ5LT5yZWFkX3Byb2MgPSB2aWFmYl9kdnAwX3Byb2NfcmVhZDsKKwkJCWVudHJ5LT53cml0ZV9wcm9jID0gdmlhZmJfZHZwMF9wcm9jX3dyaXRlOworCQl9CisJCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImR2cDEiLCAwLCB2aWFmYl9lbnRyeSk7CisJCWlmIChlbnRyeSkgeworCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CisJCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfZHZwMV9wcm9jX3JlYWQ7CisJCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX2R2cDFfcHJvY193cml0ZTsKKwkJfQorCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkZnBoIiwgMCwgdmlhZmJfZW50cnkpOworCQlpZiAoZW50cnkpIHsKKwkJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOworCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX2RmcGhfcHJvY19yZWFkOworCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl9kZnBoX3Byb2Nfd3JpdGU7CisJCX0KKwkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZGZwbCIsIDAsIHZpYWZiX2VudHJ5KTsKKwkJaWYgKGVudHJ5KSB7CisJCQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwkJCWVudHJ5LT5yZWFkX3Byb2MgPSB2aWFmYl9kZnBsX3Byb2NfcmVhZDsKKwkJCWVudHJ5LT53cml0ZV9wcm9jID0gdmlhZmJfZGZwbF9wcm9jX3dyaXRlOworCQl9CisJCWlmIChWVDE2MzZfTFZEUyA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLgorCQkJbHZkc19jaGlwX25hbWUgfHwgVlQxNjM2X0xWRFMgPT0KKwkJICAgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lKSB7CisJCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJ2dDE2MzYiLCAwLCB2aWFmYl9lbnRyeSk7CisJCQlpZiAoZW50cnkpIHsKKwkJCQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwkJCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfdnQxNjM2X3Byb2NfcmVhZDsKKwkJCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX3Z0MTYzNl9wcm9jX3dyaXRlOworCQkJfQorCQl9CisKKwl9Cit9CitzdGF0aWMgdm9pZCB2aWFmYl9yZW1vdmVfcHJvYyhzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnZpYWZiX2VudHJ5KQoreworCS8qIG5vIHByb2JsZW0gaWYgaXQgd2FzIG5vdCByZWdpc3RlcmVkICovCisJcmVtb3ZlX3Byb2NfZW50cnkoImR2cDAiLCB2aWFmYl9lbnRyeSk7LyogcGFyZW50IGRpciAqLworCXJlbW92ZV9wcm9jX2VudHJ5KCJkdnAxIiwgdmlhZmJfZW50cnkpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJkZnBoIiwgdmlhZmJfZW50cnkpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJkZnBsIiwgdmlhZmJfZW50cnkpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJ2dDE2MzYiLCB2aWFmYl9lbnRyeSk7CisJcmVtb3ZlX3Byb2NfZW50cnkoInZ0MTYyNSIsIHZpYWZiX2VudHJ5KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdmlhX3BjaV9wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGludCBkZWZhdWx0X3hyZXMsIGRlZmF1bHRfeXJlczsKKwljaGFyICp0bXBjLCAqdG1wbTsKKwljaGFyICp0bXBjX3NlYywgKnRtcG1fc2VjOworCWludCB2bW9kZV9pbmRleDsKKwl1MzIgdG1kc19sZW5ndGgsIGx2ZHNfbGVuZ3RoLCBjcnRfbGVuZ3RoLCBjaGlwX2xlbmd0aCwgdmlhZmJfcGFyX2xlbmd0aDsKKworCURFQlVHX01TRyhLRVJOX0lORk8gIlZJQUZCIFBDSSBQcm9iZSEhXG4iKTsKKworCXZpYWZiX3Bhcl9sZW5ndGggPSBBTElHTihzaXplb2Yoc3RydWN0IHZpYWZiX3BhciksIEJJVFNfUEVSX0xPTkcvOCk7CisJdG1kc19sZW5ndGggPSBBTElHTihzaXplb2Yoc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiksCisJCUJJVFNfUEVSX0xPTkcvOCk7CisJbHZkc19sZW5ndGggPSBBTElHTihzaXplb2Yoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiksCisJCUJJVFNfUEVSX0xPTkcvOCk7CisJY3J0X2xlbmd0aCA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uKSwKKwkJQklUU19QRVJfTE9ORy84KTsKKwljaGlwX2xlbmd0aCA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgY2hpcF9pbmZvcm1hdGlvbiksIEJJVFNfUEVSX0xPTkcvOCk7CisKKwkvKiBBbGxvY2F0ZSBmYl9pbmZvIGFuZCAqKipfcGFyIGhlcmUsIGFsc28gaW5jbHVkaW5nIHNvbWUgb3RoZXIgbmVlZGVkCisJICogdmFyaWFibGVzCisJKi8KKwl2aWFmYmluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyh2aWFmYl9wYXJfbGVuZ3RoICsgMiAqIGx2ZHNfbGVuZ3RoICsKKwl0bWRzX2xlbmd0aCArIGNydF9sZW5ndGggKyBjaGlwX2xlbmd0aCwgTlVMTCk7CisJaWYgKCF2aWFmYmluZm8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHZpYWZiX2luZm8uXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdmlhcGFyaW5mbyA9IChzdHJ1Y3QgdmlhZmJfcGFyICopdmlhZmJpbmZvLT5wYXI7CisJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8gPSAoc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqKQorCQkoKHVuc2lnbmVkIGxvbmcpdmlhcGFyaW5mbyArIHZpYWZiX3Bhcl9sZW5ndGgpOworCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvID0gKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKikKKwkJKCh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvICsgdG1kc19sZW5ndGgpOworCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMiA9IChzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICopCisJCSgodW5zaWduZWQgbG9uZyl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbyArIGx2ZHNfbGVuZ3RoKTsKKwl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvID0gKHN0cnVjdCBjcnRfc2V0dGluZ19pbmZvcm1hdGlvbiAqKQorCQkoKHVuc2lnbmVkIGxvbmcpdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yICsgbHZkc19sZW5ndGgpOworCXZpYXBhcmluZm8tPmNoaXBfaW5mbyA9IChzdHJ1Y3QgY2hpcF9pbmZvcm1hdGlvbiAqKQorCQkoKHVuc2lnbmVkIGxvbmcpdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mbyArIGNydF9sZW5ndGgpOworCisJaWYgKHZpYWZiX2R1YWxfZmIpCisJCXZpYWZiX1NBTU1fT04gPSAxOworCXBhcnNlX2FjdGl2ZV9kZXYoKTsKKwlwYXJzZV92aWRlb19kZXYoKTsKKwlwYXJzZV9sY2RfcG9ydCgpOworCXBhcnNlX2R2aV9wb3J0KCk7CisKKwkvKiBmb3IgZHVhbC1mYiBtdXN0IHZpYWZiX1NBTU1fT049MSBhbmQgdmlhZmJfZHVhbF9mYj0xICovCisJaWYgKCF2aWFmYl9TQU1NX09OKQorCQl2aWFmYl9kdWFsX2ZiID0gMDsKKworCS8qIFNldCB1cCBJMkMgYnVzIHN0dWZmICovCisJdmlhZmJfY3JlYXRlX2kyY19idXModmlhcGFyaW5mbyk7CisKKwl2aWFmYl9pbml0X2NoaXBfaW5mbygpOworCXZpYWZiX2dldF9mYl9pbmZvKCZ2aWFwYXJpbmZvLT5mYm1lbSwgJnZpYXBhcmluZm8tPm1lbXNpemUpOworCXZpYXBhcmluZm8tPmZibWVtX2ZyZWUgPSB2aWFwYXJpbmZvLT5tZW1zaXplOworCXZpYXBhcmluZm8tPmZibWVtX3VzZWQgPSAwOworCXZpYXBhcmluZm8tPmZibWVtX3ZpcnQgPSBpb3JlbWFwX25vY2FjaGUodmlhcGFyaW5mby0+ZmJtZW0sCisJCXZpYXBhcmluZm8tPm1lbXNpemUpOworCXZpYWZiaW5mby0+c2NyZWVuX2Jhc2UgPSAoY2hhciAqKXZpYXBhcmluZm8tPmZibWVtX3ZpcnQ7CisKKwlpZiAoIXZpYXBhcmluZm8tPmZibWVtX3ZpcnQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJdmlhZmJfZ2V0X21taW9faW5mbygmdmlhcGFyaW5mby0+bW1pb19iYXNlLCAmdmlhcGFyaW5mby0+bW1pb19sZW4pOworCXZpYXBhcmluZm8tPmlvX3ZpcnQgPSBpb3JlbWFwX25vY2FjaGUodmlhcGFyaW5mby0+bW1pb19iYXNlLAorCQl2aWFwYXJpbmZvLT5tbWlvX2xlbik7CisKKwl2aWFmYmluZm8tPm5vZGUgPSAwOworCXZpYWZiaW5mby0+ZmJvcHMgPSAmdmlhZmJfb3BzOworCXZpYWZiaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19IV0FDQ0VMX1lQQU47CisKKwl2aWFmYmluZm8tPnBzZXVkb19wYWxldHRlID0gcHNldWRvX3BhbDsKKwlpZiAodmlhZmJfYWNjZWwpIHsKKwkJdmlhZmJfaW5pdF9hY2NlbCgpOworCQl2aWFmYl9pbml0XzJkX2VuZ2luZSgpOworCQl2aWFmYl9od19jdXJzb3JfaW5pdCgpOworCX0KKworCWlmICh2aWFmYl9zZWNvbmRfc2l6ZSAmJiAodmlhZmJfc2Vjb25kX3NpemUgPCA4KSkgeworCQl2aWFmYl9zZWNvbmRfb2Zmc2V0ID0gdmlhcGFyaW5mby0+ZmJtZW1fZnJlZSAtCisJCQl2aWFmYl9zZWNvbmRfc2l6ZSAqIDEwMjQgKiAxMDI0OworCX0gZWxzZSB7CisJCXZpYWZiX3NlY29uZF9zaXplID0gODsKKwkJdmlhZmJfc2Vjb25kX29mZnNldCA9IHZpYXBhcmluZm8tPmZibWVtX2ZyZWUgLQorCQkJdmlhZmJfc2Vjb25kX3NpemUgKiAxMDI0ICogMTAyNDsKKwl9CisKKwl2aWFmYl9GQl9NTSA9IHZpYXBhcmluZm8tPmZibWVtX3ZpcnQ7CisJdG1wbSA9IHZpYWZiX21vZGU7CisJdG1wYyA9IHN0cnNlcCgmdG1wbSwgIngiKTsKKwlzdHJpY3Rfc3RydG91bCh0bXBjLCAwLCAodW5zaWduZWQgbG9uZyAqKSZkZWZhdWx0X3hyZXMpOworCXN0cmljdF9zdHJ0b3VsKHRtcG0sIDAsICh1bnNpZ25lZCBsb25nICopJmRlZmF1bHRfeXJlcyk7CisKKwl2bW9kZV9pbmRleCA9IHZpYWZiX2dldF9tb2RlX2luZGV4KGRlZmF1bHRfeHJlcywgZGVmYXVsdF95cmVzLCAwKTsKKwlERUJVR19NU0coS0VSTl9JTkZPICIwLT5pbmRleD0lZFxuIiwgdm1vZGVfaW5kZXgpOworCisJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgeworCQlpZiAoc3RyY21wKHZpYWZiX21vZGUsIHZpYWZiX21vZGUxKSkgeworCQkJdG1wbV9zZWMgPSB2aWFmYl9tb2RlMTsKKwkJCXRtcGNfc2VjID0gc3Ryc2VwKCZ0bXBtX3NlYywgIngiKTsKKwkJCXN0cmljdF9zdHJ0b3VsKHRtcGNfc2VjLCAwLAorCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX3NlY29uZF94cmVzKTsKKwkJCXN0cmljdF9zdHJ0b3VsKHRtcG1fc2VjLCAwLAorCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX3NlY29uZF95cmVzKTsKKwkJfSBlbHNlIHsKKwkJCXZpYWZiX3NlY29uZF94cmVzID0gZGVmYXVsdF94cmVzOworCQkJdmlhZmJfc2Vjb25kX3lyZXMgPSBkZWZhdWx0X3lyZXM7CisJCX0KKwkJaWYgKDAgPT0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlcykgeworCQkJc3dpdGNoICh2aWFmYl9zZWNvbmRfeHJlcykgeworCQkJY2FzZSAxNDAwOgorCQkJCXZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXMgPSAxNDA4OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzID0gdmlhZmJfc2Vjb25kX3hyZXM7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKDAgPT0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeXJlcykKKwkJCXZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXMgPSB2aWFmYl9zZWNvbmRfeXJlczsKKwl9CisKKwlzd2l0Y2ggKHZpYWZiX2JwcCkgeworCWNhc2UgMCAuLi4gODoKKwkJdmlhZmJfYnBwID0gODsKKwkJYnJlYWs7CisJY2FzZSA5IC4uLiAxNjoKKwkJdmlhZmJfYnBwID0gMTY7CisJCWJyZWFrOworCWNhc2UgMTcgLi4uIDMyOgorCQl2aWFmYl9icHAgPSAzMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmlhZmJfYnBwID0gODsKKwl9CisJZGVmYXVsdF92YXIueHJlcyA9IGRlZmF1bHRfeHJlczsKKwlkZWZhdWx0X3Zhci55cmVzID0gZGVmYXVsdF95cmVzOworCXN3aXRjaCAoZGVmYXVsdF94cmVzKSB7CisJY2FzZSAxNDAwOgorCQlkZWZhdWx0X3Zhci54cmVzX3ZpcnR1YWwgPSAxNDA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZWZhdWx0X3Zhci54cmVzX3ZpcnR1YWwgPSBkZWZhdWx0X3hyZXM7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0X3Zhci55cmVzX3ZpcnR1YWwgPSBkZWZhdWx0X3lyZXM7CisJZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwgPSB2aWFmYl9icHA7CisJaWYgKGRlZmF1bHRfdmFyLmJpdHNfcGVyX3BpeGVsID09IDE1KQorCQlkZWZhdWx0X3Zhci5iaXRzX3Blcl9waXhlbCA9IDE2OworCWRlZmF1bHRfdmFyLnBpeGNsb2NrID0KKwkgICAgdmlhZmJfZ2V0X3BpeGNsb2NrKGRlZmF1bHRfeHJlcywgZGVmYXVsdF95cmVzLCB2aWFmYl9yZWZyZXNoKTsKKwlkZWZhdWx0X3Zhci5sZWZ0X21hcmdpbiA9IChkZWZhdWx0X3hyZXMgPj4gMykgJiAweGY4OworCWRlZmF1bHRfdmFyLnJpZ2h0X21hcmdpbiA9IDMyOworCWRlZmF1bHRfdmFyLnVwcGVyX21hcmdpbiA9IDE2OworCWRlZmF1bHRfdmFyLmxvd2VyX21hcmdpbiA9IDQ7CisJZGVmYXVsdF92YXIuaHN5bmNfbGVuID0gZGVmYXVsdF92YXIubGVmdF9tYXJnaW47CisJZGVmYXVsdF92YXIudnN5bmNfbGVuID0gNDsKKwlkZWZhdWx0X3Zhci5hY2NlbF9mbGFncyA9IDA7CisKKwlpZiAodmlhZmJfYWNjZWwpIHsKKwkJdmlhZmJpbmZvLT5mbGFncyB8PQorCQkgICAgKEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBIHwgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QgfAorCQkgICAgIEZCSU5GT19IV0FDQ0VMX0lNQUdFQkxJVCk7CisJCWRlZmF1bHRfdmFyLmFjY2VsX2ZsYWdzIHw9IEZCX0FDQ0VMRl9URVhUOworCX0gZWxzZQorCQl2aWFmYmluZm8tPmZsYWdzIHw9IEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEOworCisJaWYgKHZpYWZiX2R1YWxfZmIpIHsKKwkJdmlhZmJpbmZvMSA9IGZyYW1lYnVmZmVyX2FsbG9jKHZpYWZiX3Bhcl9sZW5ndGgsIE5VTEwpOworCQlpZiAoIXZpYWZiaW5mbzEpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJImFsbG9jYXRlIHRoZSBzZWNvbmQgZnJhbWVidWZmZXIgc3RydWN0IGVycm9yXG4iKTsKKwkJCWZyYW1lYnVmZmVyX3JlbGVhc2UodmlhZmJpbmZvKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXZpYXBhcmluZm8xID0gdmlhZmJpbmZvMS0+cGFyOworCQltZW1jcHkodmlhcGFyaW5mbzEsIHZpYXBhcmluZm8sIHZpYWZiX3Bhcl9sZW5ndGgpOworCQl2aWFwYXJpbmZvMS0+bWVtc2l6ZSA9IHZpYXBhcmluZm8tPm1lbXNpemUgLQorCQkJdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJdmlhcGFyaW5mby0+bWVtc2l6ZSA9IHZpYWZiX3NlY29uZF9vZmZzZXQ7CisJCXZpYXBhcmluZm8xLT5mYm1lbV92aXJ0ID0gdmlhcGFyaW5mby0+ZmJtZW1fdmlydCArCisJCQl2aWFmYl9zZWNvbmRfb2Zmc2V0OworCQl2aWFwYXJpbmZvMS0+ZmJtZW0gPSB2aWFwYXJpbmZvLT5mYm1lbSArIHZpYWZiX3NlY29uZF9vZmZzZXQ7CisKKwkJdmlhcGFyaW5mbzEtPmZibWVtX3VzZWQgPSB2aWFwYXJpbmZvLT5mYm1lbV91c2VkOworCQl2aWFwYXJpbmZvMS0+ZmJtZW1fZnJlZSA9IHZpYXBhcmluZm8xLT5tZW1zaXplIC0KKwkJCXZpYXBhcmluZm8xLT5mYm1lbV91c2VkOworCQl2aWFwYXJpbmZvLT5mYm1lbV9mcmVlID0gdmlhcGFyaW5mby0+bWVtc2l6ZTsKKwkJdmlhcGFyaW5mby0+ZmJtZW1fdXNlZCA9IDA7CisJCWlmICh2aWFmYl9hY2NlbCkgeworCQkJdmlhcGFyaW5mbzEtPmN1cnNvcl9zdGFydCA9CisJCQkgICAgdmlhcGFyaW5mby0+Y3Vyc29yX3N0YXJ0IC0gdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJCXZpYXBhcmluZm8xLT5WUV9zdGFydCA9IHZpYXBhcmluZm8tPlZRX3N0YXJ0IC0KKwkJCQl2aWFmYl9zZWNvbmRfb2Zmc2V0OworCQkJdmlhcGFyaW5mbzEtPlZRX2VuZCA9IHZpYXBhcmluZm8tPlZRX2VuZCAtCisJCQkJdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJfQorCisJCW1lbWNweSh2aWFmYmluZm8xLCB2aWFmYmluZm8sIHNpemVvZihzdHJ1Y3QgZmJfaW5mbykpOworCQl2aWFmYmluZm8xLT5zY3JlZW5fYmFzZSA9IHZpYWZiaW5mby0+c2NyZWVuX2Jhc2UgKworCQkJdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJdmlhZmJpbmZvMS0+Zml4LnNtZW1fc3RhcnQgPSB2aWFwYXJpbmZvMS0+ZmJtZW07CisJCXZpYWZiaW5mbzEtPmZpeC5zbWVtX2xlbiA9IHZpYXBhcmluZm8xLT5mYm1lbV9mcmVlOworCisJCWRlZmF1bHRfdmFyLnhyZXMgPSB2aWFmYl9zZWNvbmRfeHJlczsKKwkJZGVmYXVsdF92YXIueXJlcyA9IHZpYWZiX3NlY29uZF95cmVzOworCQlkZWZhdWx0X3Zhci54cmVzX3ZpcnR1YWwgPSB2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzOworCQlkZWZhdWx0X3Zhci55cmVzX3ZpcnR1YWwgPSB2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzOworCQlpZiAodmlhZmJfYnBwMSAhPSB2aWFmYl9icHApCisJCQl2aWFmYl9icHAxID0gdmlhZmJfYnBwOworCQlkZWZhdWx0X3Zhci5iaXRzX3Blcl9waXhlbCA9IHZpYWZiX2JwcDE7CisJCWRlZmF1bHRfdmFyLnBpeGNsb2NrID0KKwkJICAgIHZpYWZiX2dldF9waXhjbG9jayh2aWFmYl9zZWNvbmRfeHJlcywgdmlhZmJfc2Vjb25kX3lyZXMsCisJCSAgICB2aWFmYl9yZWZyZXNoKTsKKwkJZGVmYXVsdF92YXIubGVmdF9tYXJnaW4gPSAodmlhZmJfc2Vjb25kX3hyZXMgPj4gMykgJiAweGY4OworCQlkZWZhdWx0X3Zhci5yaWdodF9tYXJnaW4gPSAzMjsKKwkJZGVmYXVsdF92YXIudXBwZXJfbWFyZ2luID0gMTY7CisJCWRlZmF1bHRfdmFyLmxvd2VyX21hcmdpbiA9IDQ7CisJCWRlZmF1bHRfdmFyLmhzeW5jX2xlbiA9IGRlZmF1bHRfdmFyLmxlZnRfbWFyZ2luOworCQlkZWZhdWx0X3Zhci52c3luY19sZW4gPSA0OworCisJCXZpYWZiX3NldHVwX2ZpeGluZm8oJnZpYWZiaW5mbzEtPmZpeCwgdmlhcGFyaW5mbzEpOworCQl2aWFmYl9jaGVja192YXIoJmRlZmF1bHRfdmFyLCB2aWFmYmluZm8xKTsKKwkJdmlhZmJpbmZvMS0+dmFyID0gZGVmYXVsdF92YXI7CisJCXZpYWZiX3VwZGF0ZV92aWFmYl9wYXIodmlhZmJpbmZvKTsKKwkJdmlhZmJfdXBkYXRlX2ZpeCgmdmlhZmJpbmZvMS0+Zml4LCB2aWFmYmluZm8xKTsKKwl9CisKKwl2aWFmYl9zZXR1cF9maXhpbmZvKCZ2aWFmYmluZm8tPmZpeCwgdmlhcGFyaW5mbyk7CisJdmlhZmJfY2hlY2tfdmFyKCZkZWZhdWx0X3ZhciwgdmlhZmJpbmZvKTsKKwl2aWFmYmluZm8tPnZhciA9IGRlZmF1bHRfdmFyOworCXZpYWZiX3VwZGF0ZV92aWFmYl9wYXIodmlhZmJpbmZvKTsKKwl2aWFmYl91cGRhdGVfZml4KCZ2aWFmYmluZm8tPmZpeCwgdmlhZmJpbmZvKTsKKwlkZWZhdWx0X3Zhci5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKKwlmYl9hbGxvY19jbWFwKCZ2aWFmYmluZm8tPmNtYXAsIDI1NiwgMCk7CisKKwlpZiAodmlhZmJfZHVhbF9mYiAmJiAodmlhZmJfcHJpbWFyeV9kZXYgPT0gTENEX0RldmljZSkKKwkgICAgJiYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2KSkgeworCQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIodmlhZmJpbmZvMSkgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcih2aWFmYmluZm8pIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmlhZmJfZHVhbF9mYiAmJiAoKHZpYWZiX3ByaW1hcnlfZGV2ICE9IExDRF9EZXZpY2UpCisJCQl8fCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lICE9CisJCQlVTklDSFJPTUVfQ0xFMjY2KSkpIHsKKwkJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHZpYWZiaW5mbzEpIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlERUJVR19NU0coS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlICVkeCVkLSVkYnBwXG4iLAorCQkgIHZpYWZiaW5mby0+bm9kZSwgdmlhZmJpbmZvLT5maXguaWQsIGRlZmF1bHRfdmFyLnhyZXMsCisJCSAgZGVmYXVsdF92YXIueXJlcywgZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwpOworCisJdmlhZmJfaW5pdF9wcm9jKHZpYXBhcmluZm8tPnByb2NfZW50cnkpOworCXZpYWZiX2luaXRfZGFjKElHQTIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdmlhX3BjaV9yZW1vdmUodm9pZCkKK3sKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFfcGNpX3JlbW92ZSFcbiIpOworCWZiX2RlYWxsb2NfY21hcCgmdmlhZmJpbmZvLT5jbWFwKTsKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHZpYWZiaW5mbyk7CisJaWYgKHZpYWZiX2R1YWxfZmIpCisJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIodmlhZmJpbmZvMSk7CisJaW91bm1hcCgodm9pZCAqKXZpYXBhcmluZm8tPmZibWVtX3ZpcnQpOworCWlvdW5tYXAodmlhcGFyaW5mby0+aW9fdmlydCk7CisKKwl2aWFmYl9kZWxldGVfaTJjX2J1c3ModmlhcGFyaW5mbyk7CisKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKHZpYWZiaW5mbyk7CisJaWYgKHZpYWZiX2R1YWxfZmIpCisJCWZyYW1lYnVmZmVyX3JlbGVhc2UodmlhZmJpbmZvMSk7CisKKwl2aWFmYl9yZW1vdmVfcHJvYyh2aWFwYXJpbmZvLT5wcm9jX2VudHJ5KTsKK30KKworI2lmbmRlZiBNT0RVTEUKK3N0YXRpYyBpbnQgX19pbml0IHZpYWZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCit7CisJY2hhciAqdGhpc19vcHQ7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfc2V0dXAhXG4iKTsKKworCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCisJCXJldHVybiAwOworCisJd2hpbGUgKCh0aGlzX29wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgeworCQlpZiAoISp0aGlzX29wdCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX21vZGUxPSIsIDEyKSkKKwkJCXZpYWZiX21vZGUxID0ga3N0cmR1cCh0aGlzX29wdCArIDEyLCBHRlBfS0VSTkVMKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9tb2RlPSIsIDExKSkKKwkJCXZpYWZiX21vZGUgPSBrc3RyZHVwKHRoaXNfb3B0ICsgMTEsIEdGUF9LRVJORUwpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX2JwcDE9IiwgMTEpKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAxMSwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9icHAxKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9icHA9IiwgMTApKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAxMCwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9icHApOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX3JlZnJlc2gxPSIsIDE1KSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTUsIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfcmVmcmVzaDEpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX3JlZnJlc2g9IiwgMTQpKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAxNCwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9yZWZyZXNoKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9sY2RfZHNwX21ldGhvZD0iLCAyMSkpCisJCQlzdHJpY3Rfc3RydG91bCh0aGlzX29wdCArIDIxLCAwLAorCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX2xjZF9kc3BfbWV0aG9kKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9sY2RfcGFuZWxfaWQ9IiwgMTkpKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAxOSwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9sY2RfcGFuZWxfaWQpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX2FjY2VsPSIsIDEyKSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTIsIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfYWNjZWwpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX1NBTU1fT049IiwgMTQpKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAxNCwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9TQU1NX09OKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9hY3RpdmVfZGV2PSIsIDE3KSkKKwkJCXZpYWZiX2FjdGl2ZV9kZXYgPSBrc3RyZHVwKHRoaXNfb3B0ICsgMTcsIEdGUF9LRVJORUwpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwKKwkJCSJ2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dD0iLCAzMCkpCisJCQlzdHJpY3Rfc3RydG91bCh0aGlzX29wdCArIDMwLCAwLAorCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX3NlY29uZF9zaXplPSIsIDE4KSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTgsIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfc2Vjb25kX3NpemUpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwKKwkJCSJ2aWFmYl9wbGF0Zm9ybV9lcGlhX2R2aT0iLCAyNCkpCisJCQlzdHJpY3Rfc3RydG91bCh0aGlzX29wdCArIDI0LCAwLAorCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX3BsYXRmb3JtX2VwaWFfZHZpKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsCisJCQkidmlhZmJfZGV2aWNlX2xjZF9kdWFsZWRnZT0iLCAyNikpCisJCQlzdHJpY3Rfc3RydG91bCh0aGlzX29wdCArIDI2LCAwLAorCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX2RldmljZV9sY2RfZHVhbGVkZ2UpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX2J1c193aWR0aD0iLCAxNikpCisJCQlzdHJpY3Rfc3RydG91bCh0aGlzX29wdCArIDE2LCAwLAorCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX2J1c193aWR0aCk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfbGNkX21vZGU9IiwgMTUpKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAxNSwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9sY2RfbW9kZSk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfdmlkZW9fZGV2PSIsIDE2KSkKKwkJCXZpYWZiX3ZpZGVvX2RldiA9IGtzdHJkdXAodGhpc19vcHQgKyAxNiwgR0ZQX0tFUk5FTCk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfbGNkX3BvcnQ9IiwgMTUpKQorCQkJdmlhZmJfbGNkX3BvcnQgPSBrc3RyZHVwKHRoaXNfb3B0ICsgMTUsIEdGUF9LRVJORUwpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX2R2aV9wb3J0PSIsIDE1KSkKKwkJCXZpYWZiX2R2aV9wb3J0ID0ga3N0cmR1cCh0aGlzX29wdCArIDE1LCBHRlBfS0VSTkVMKTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgdmlhZmJfaW5pdCh2b2lkKQoreworI2lmbmRlZiBNT0RVTEUKKwljaGFyICpvcHRpb24gPSBOVUxMOworCWlmIChmYl9nZXRfb3B0aW9ucygidmlhZmIiLCAmb3B0aW9uKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJdmlhZmJfc2V0dXAob3B0aW9uKTsKKyNlbmRpZgorCXByaW50ayhLRVJOX0lORk8KKyAgICAgICAiVklBIEdyYXBoaWNzIEludGVyZ3JhdGlvbiBDaGlwc2V0IGZyYW1lYnVmZmVyICVkLiVkIGluaXRpYWxpemluZ1xuIiwKKwkgICAgICAgVkVSU0lPTl9NQUpPUiwgVkVSU0lPTl9NSU5PUik7CisJcmV0dXJuIHZpYV9wY2lfcHJvYmUoKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHZpYWZiX2V4aXQodm9pZCkKK3sKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9leGl0IVxuIik7CisJdmlhX3BjaV9yZW1vdmUoKTsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgdmlhZmJfb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mYl9vcGVuID0gdmlhZmJfb3BlbiwKKwkuZmJfcmVsZWFzZSA9IHZpYWZiX3JlbGVhc2UsCisJLmZiX2NoZWNrX3ZhciA9IHZpYWZiX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3BhciA9IHZpYWZiX3NldF9wYXIsCisJLmZiX3NldGNvbHJlZyA9IHZpYWZiX3NldGNvbHJlZywKKwkuZmJfcGFuX2Rpc3BsYXkgPSB2aWFmYl9wYW5fZGlzcGxheSwKKwkuZmJfYmxhbmsgPSB2aWFmYl9ibGFuaywKKwkuZmJfZmlsbHJlY3QgPSB2aWFmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEgPSB2aWFmYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0ID0gdmlhZmJfaW1hZ2VibGl0LAorCS5mYl9jdXJzb3IgPSB2aWFmYl9jdXJzb3IsCisJLmZiX2lvY3RsID0gdmlhZmJfaW9jdGwsCisJLmZiX3N5bmMgPSB2aWFmYl9zeW5jLAorCS5mYl9zZXRjbWFwID0gdmlhZmJfc2V0Y21hcCwKK307CisKK21vZHVsZV9pbml0KHZpYWZiX2luaXQpOworbW9kdWxlX2V4aXQodmlhZmJfZXhpdCk7CisKKyNpZmRlZiBNT0RVTEUKK21vZHVsZV9wYXJhbSh2aWFmYl9tZW1zaXplLCBpbnQsIDApOworCittb2R1bGVfcGFyYW0odmlhZmJfbW9kZSwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9tb2RlLCAiU2V0IHJlc29sdXRpb24gKGRlZmF1bHQ9NjQweDQ4MCkiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX21vZGUxLCBjaGFycCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX21vZGUxLCAiU2V0IHJlc29sdXRpb24gKGRlZmF1bHQ9NjQweDQ4MCkiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX2JwcCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfYnBwLCAiU2V0IGNvbG9yIGRlcHRoIChkZWZhdWx0PTMyYnBwKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfYnBwMSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfYnBwMSwgIlNldCBjb2xvciBkZXB0aCAoZGVmYXVsdD0zMmJwcCkiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX3JlZnJlc2gsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX3JlZnJlc2gsCisJIlNldCBDUlQgdmlhZmJfcmVmcmVzaCByYXRlIChkZWZhdWx0ID0gNjApIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9yZWZyZXNoMSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfcmVmcmVzaDEsCisJIlNldCBDUlQgcmVmcmVzaCByYXRlIChkZWZhdWx0ID0gNjApIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9sY2RfcGFuZWxfaWQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2xjZF9wYW5lbF9pZCwKKwkiU2V0IEZsYXQgUGFuZWwgdHlwZShEZWZhdWx0PTEwMjR4NzY4KSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfbGNkX2RzcF9tZXRob2QsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2xjZF9kc3BfbWV0aG9kLAorCSJTZXQgRmxhdCBQYW5lbCBkaXNwbGF5IHNjYWxpbmcgbWV0aG9kLihEZWZhdWx0PUV4cGFuZHNpb24pIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9TQU1NX09OLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9TQU1NX09OLAorCSJUdXJuIG9uL29mZiBmbGFnIG9mIFNBTU0oRGVmYXVsdD1PRkYpIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9hY2NlbCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfYWNjZWwsCisJIlNldCAyRCBIYXJkd2FyZSBBY2NlbGVyYXRpb24uKERlZmF1bHQgPSBPRkYpIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9hY3RpdmVfZGV2LCBjaGFycCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2FjdGl2ZV9kZXYsICJTcGVjaWZ5IGFjdGl2ZSBkZXZpY2VzLiIpOworCittb2R1bGVfcGFyYW0odmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0LAorCSJEaXNwbGF5IEhhcmR3YXJlIExheW91dCAoTENEIE9ubHksIERWSSBPbmx5Li4uLGV0YykiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX3NlY29uZF9zaXplLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9zZWNvbmRfc2l6ZSwKKwkiU2V0IHNlY29uZGFyeSBkZXZpY2UgbWVtb3J5IHNpemUiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX2R1YWxfZmIsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2R1YWxfZmIsCisJIlR1cm4gb24vb2ZmIGZsYWcgb2YgZHVhbCBmcmFtZWJ1ZmZlciBkZXZpY2VzLihEZWZhdWx0ID0gT0ZGKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfcGxhdGZvcm1fZXBpYV9kdmksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX3BsYXRmb3JtX2VwaWFfZHZpLAorCSJUdXJuIG9uL29mZiBmbGFnIG9mIERWSSBkZXZpY2VzIG9uIEVQSUEgYm9hcmQuKERlZmF1bHQgPSBPRkYpIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9kZXZpY2VfbGNkX2R1YWxlZGdlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9kZXZpY2VfbGNkX2R1YWxlZGdlLAorCSJUdXJuIG9uL29mZiBmbGFnIG9mIGR1YWwgZWRnZSBwYW5lbC4oRGVmYXVsdCA9IE9GRikiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX2J1c193aWR0aCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfYnVzX3dpZHRoLAorCSJTZXQgYnVzIHdpZHRoIG9mIHBhbmVsLihEZWZhdWx0ID0gMTIpIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9sY2RfbW9kZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfbGNkX21vZGUsCisJIlNldCBGbGF0IFBhbmVsIG1vZGUoRGVmYXVsdD1PUEVOTERJKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfdmlkZW9fZGV2LCBjaGFycCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX3ZpZGVvX2RldiwgIlNwZWNpZnkgdmlkZW8gZGV2aWNlcy4iKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX2xjZF9wb3J0LCBjaGFycCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2xjZF9wb3J0LCAiU3BlY2lmeSBMQ0Qgb3V0cHV0IHBvcnQuIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9kdmlfcG9ydCwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9kdmlfcG9ydCwgIlNwZWNpZnkgRFZJIG91dHB1dCBwb3J0LiIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MTU4ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fVklBRkJERVZfSF9fCisjZGVmaW5lIF9fVklBRkJERVZfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAic2hhcmUuaCIKKyNpbmNsdWRlICJjaGlwLmgiCisjaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJ2aWFfaTJjLmgiCisKKyNkZWZpbmUgVkVSU0lPTl9NQUpPUiAgICAgICAyCisjZGVmaW5lIFZFUlNJT05fS0VSTkVMICAgICAgNgkvKiBGb3Iga2VybmVsIDIuNiAqLworCisjZGVmaW5lIFZFUlNJT05fT1MgICAgICAgICAgMAkvKiAwOiBmb3IgMzIgYml0cyBPUywgMTogZm9yIDY0IGJpdHMgT1MgKi8KKyNkZWZpbmUgVkVSU0lPTl9NSU5PUiAgICAgICA0CisKK3N0cnVjdCB2aWFmYl9wYXIgeworCWludCBicHA7CisJaW50IGhyZXM7CisJaW50IHZyZXM7CisJaW50IGxpbmVsZW5ndGg7CisJdTMyIHhvZmZzZXQ7CisJdTMyIHlvZmZzZXQ7CisKKwl2b2lkIF9faW9tZW0gKmZibWVtX3ZpcnQ7CS8qZnJhbWVidWZmZXIgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyAqLworCXZvaWQgX19pb21lbSAqaW9fdmlydDsJLyppb3NwYWNlIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgZmJtZW07CS8qZnJhbWVidWZmZXIgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgbWVtc2l6ZTsJLypzaXplIG9mIGZibWVtICovCisJdW5zaWduZWQgaW50IGlvOwkvKmlvIHNwYWNlIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIG1taW9fYmFzZTsJLyptbWlvIGJhc2UgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgbW1pb19sZW47CS8qbW1pbyBiYXNlIGxlbmd0aCAqLworCXUzMiBmYm1lbV9mcmVlOwkJLyogRnJlZSBGQiBtZW1vcnkgKi8KKwl1MzIgZmJtZW1fdXNlZDsJCS8qIFVzZSBGQiBtZW1vcnkgc2l6ZSAqLworCXUzMiBjdXJzb3Jfc3RhcnQ7CS8qIEN1cnNvciBTdGFydCBBZGRyZXNzICovCisJdTMyIFZRX3N0YXJ0OwkJLyogVmlydHVhbCBRdWV1ZSBTdGFydCBBZGRyZXNzICovCisJdTMyIFZRX2VuZDsJCS8qIFZpcnR1YWwgUXVldWUgRW5kIEFkZHJlc3MgKi8KKwl1MzIgaWdhX3BhdGg7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2VudHJ5OwkvKnZpYWZiIHByb2MgZW50cnkgKi8KKwl1OCBkdW92aWV3OwkJLypJcyB3b3JraW5nIGluIGR1b3ZpZXcgbW9kZT8gKi8KKworCS8qIEkyQyBzdHVmZiAqLworCXN0cnVjdCB2aWFfaTJjX3N0dWZmIGkyY19zdHVmZjsKKworCS8qIEFsbCB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSBuZWVkZWQgdG8gc2V0IGVuZ2luZSAqLworCXN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnRtZHNfc2V0dGluZ19pbmZvOworCXN0cnVjdCBjcnRfc2V0dGluZ19pbmZvcm1hdGlvbiAqY3J0X3NldHRpbmdfaW5mbzsKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpsdmRzX3NldHRpbmdfaW5mbzsKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpsdmRzX3NldHRpbmdfaW5mbzI7CisJc3RydWN0IGNoaXBfaW5mb3JtYXRpb24gKmNoaXBfaW5mbzsKKworCS8qIHNvbWUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB2aWRlbyBwbGF5aW5nICovCisJaW50IHZpZGVvX29uX2NydDsKKwlpbnQgdmlkZW9fb25fZHZpOworCWludCB2aWRlb19vbl9sY2Q7CisKK307CitzdHJ1Y3QgdmlhZmJfbW9kZWluZm8geworCXUzMiB4cmVzOworCXUzMiB5cmVzOworCWludCBtb2RlX2luZGV4OworCWNoYXIgKm1vZGVfcmVzOworfTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeXJlczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX29mZnNldDsKK2V4dGVybiBpbnQgdmlhZmJfc2Vjb25kX3NpemU7CitleHRlcm4gaW50IHZpYWZiX1NBTU1fT047CitleHRlcm4gaW50IHZpYWZiX2R1YWxfZmI7CitleHRlcm4gaW50IHZpYWZiX0xDRDJfT047CitleHRlcm4gaW50IHZpYWZiX0xDRF9PTjsKK2V4dGVybiBpbnQgdmlhZmJfRFZJX09OOworZXh0ZXJuIGludCB2aWFmYl9hY2NlbDsKK2V4dGVybiBpbnQgdmlhZmJfaG90cGx1ZzsKK2V4dGVybiBpbnQgdmlhZmJfbWVtc2l6ZTsKKworZXh0ZXJuIGludCBzdHJpY3Rfc3RydG91bChjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgaW50IGJhc2UsCisJdW5zaWduZWQgbG9uZyAqcmVzKTsKKwordm9pZCB2aWFmYl9tZW1vcnlfcGl0Y2hfcGF0Y2goc3RydWN0IGZiX2luZm8gKmluZm8pOwordm9pZCB2aWFmYl9maWxsX3Zhcl90aW1pbmdfaW5mbyhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgaW50IHJlZnJlc2gsCisJCQkgIGludCBtb2RlX2luZGV4KTsKK2ludCB2aWFmYl9nZXRfbW9kZV9pbmRleChpbnQgaHJlcywgaW50IHZyZXMsIGludCBmbGFnKTsKK3U4IHZpYWZiX2dwaW9faTJjX3JlYWRfbHZkcyhzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJKnBsdmRzX3NldHRpbmdfaW5mbywgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbgorCSpwbHZkc19jaGlwX2luZm8sIHU4IGluZGV4KTsKK3ZvaWQgdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSAgICAgICpwbHZkc19zZXR0aW5nX2luZm8sIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24KKwkJCSAgICAgICpwbHZkc19jaGlwX2luZm8sIHN0cnVjdCBJT0RBVEEgaW9fZGF0YSk7CisjZW5kaWYgLyogX19WSUFGQkRFVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGNmNTgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5jCkBAIC0wLDAgKzEsMTA4NiBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImdsb2JhbC5oIgorc3RydWN0IHJlc19tYXBfcmVmcmVzaCByZXNfbWFwX3JlZnJlc2hfdGJsW10gPSB7CisvKmhyZXMsIHZyZXMsIHZjbG9jaywgdm1vZGVfcmVmcmVzaCovCisJezQ4MCwgNjQwLCBSRVNfNDgwWDY0MF82MEhaX1BJWENMT0NLLCA2MH0sCisJezY0MCwgNDgwLCBSRVNfNjQwWDQ4MF82MEhaX1BJWENMT0NLLCA2MH0sCisJezY0MCwgNDgwLCBSRVNfNjQwWDQ4MF83NUhaX1BJWENMT0NLLCA3NX0sCisJezY0MCwgNDgwLCBSRVNfNjQwWDQ4MF84NUhaX1BJWENMT0NLLCA4NX0sCisJezY0MCwgNDgwLCBSRVNfNjQwWDQ4MF8xMDBIWl9QSVhDTE9DSywgMTAwfSwKKwl7NjQwLCA0ODAsIFJFU182NDBYNDgwXzEyMEhaX1BJWENMT0NLLCAxMjB9LAorCXs3MjAsIDQ4MCwgUkVTXzcyMFg0ODBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXs3MjAsIDU3NiwgUkVTXzcyMFg1NzZfNjBIWl9QSVhDTE9DSywgNjB9LAorCXs4MDAsIDQ4MCwgUkVTXzgwMFg0ODBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXs4MDAsIDYwMCwgUkVTXzgwMFg2MDBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXs4MDAsIDYwMCwgUkVTXzgwMFg2MDBfNzVIWl9QSVhDTE9DSywgNzV9LAorCXs4MDAsIDYwMCwgUkVTXzgwMFg2MDBfODVIWl9QSVhDTE9DSywgODV9LAorCXs4MDAsIDYwMCwgUkVTXzgwMFg2MDBfMTAwSFpfUElYQ0xPQ0ssIDEwMH0sCisJezgwMCwgNjAwLCBSRVNfODAwWDYwMF8xMjBIWl9QSVhDTE9DSywgMTIwfSwKKwl7ODQ4LCA0ODAsIFJFU184NDhYNDgwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7ODU2LCA0ODAsIFJFU184NTZYNDgwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTAyNCwgNTEyLCBSRVNfMTAyNFg1MTJfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMDI0LCA2MDAsIFJFU18xMDI0WDYwMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEwMjQsIDc2OCwgUkVTXzEwMjRYNzY4XzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTAyNCwgNzY4LCBSRVNfMTAyNFg3NjhfNzVIWl9QSVhDTE9DSywgNzV9LAorCXsxMDI0LCA3NjgsIFJFU18xMDI0WDc2OF84NUhaX1BJWENMT0NLLCA4NX0sCisJezEwMjQsIDc2OCwgUkVTXzEwMjRYNzY4XzEwMEhaX1BJWENMT0NLLCAxMDB9LAorLyogIHsxMTUyLDg2NCwgUkVTXzExNTJYODY0XzcwSFpfUElYQ0xPQ0ssICA3MH0sKi8KKwl7MTE1MiwgODY0LCBSRVNfMTE1Mlg4NjRfNzVIWl9QSVhDTE9DSywgNzV9LAorCXsxMjgwLCA3NjgsIFJFU18xMjgwWDc2OF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEyODAsIDgwMCwgUkVTXzEyODBYODAwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTI4MCwgOTYwLCBSRVNfMTI4MFg5NjBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMjgwLCAxMDI0LCBSRVNfMTI4MFgxMDI0XzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTI4MCwgMTAyNCwgUkVTXzEyODBYMTAyNF83NUhaX1BJWENMT0NLLCA3NX0sCisJezEyODAsIDEwMjQsIFJFU18xMjgwWDc2OF84NUhaX1BJWENMT0NLLCA4NX0sCisJezE0NDAsIDEwNTAsIFJFU18xNDQwWDEwNTBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxNjAwLCAxMjAwLCBSRVNfMTYwMFgxMjAwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTYwMCwgMTIwMCwgUkVTXzE2MDBYMTIwMF83NUhaX1BJWENMT0NLLCA3NX0sCisJezEyODAsIDcyMCwgUkVTXzEyODBYNzIwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTkyMCwgMTA4MCwgUkVTXzE5MjBYMTA4MF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE0MDAsIDEwNTAsIFJFU18xNDAwWDEwNTBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxNDAwLCAxMDUwLCBSRVNfMTQwMFgxMDUwXzc1SFpfUElYQ0xPQ0ssIDc1fSwKKwl7MTM2OCwgNzY4LCBSRVNfMTM2OFg3NjhfNjBIWl9QSVhDTE9DSywgNjB9LAorCXs5NjAsIDYwMCwgUkVTXzk2MFg2MDBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMDAwLCA2MDAsIFJFU18xMDAwWDYwMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEwMjQsIDU3NiwgUkVTXzEwMjRYNTc2XzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTA4OCwgNjEyLCBSRVNfMTA4OFg2MTJfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMTUyLCA3MjAsIFJFU18xMTUyWDcyMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEyMDAsIDcyMCwgUkVTXzEyMDBYNzIwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTI4MCwgNjAwLCBSRVNfMTI4MFg2MDBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMjgwLCA3MjAsIFJFU18xMjgwWDcyMF81MEhaX1BJWENMT0NLLCA1MH0sCisJezEyODAsIDc2OCwgUkVTXzEyODBYNzY4XzUwSFpfUElYQ0xPQ0ssIDUwfSwKKwl7MTM2MCwgNzY4LCBSRVNfMTM2MFg3NjhfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMzY2LCA3NjgsIFJFU18xMzY2WDc2OF81MEhaX1BJWENMT0NLLCA1MH0sCisJezEzNjYsIDc2OCwgUkVTXzEzNjZYNzY4XzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTQ0MCwgOTAwLCBSRVNfMTQ0MFg5MDBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxNDQwLCA5MDAsIFJFU18xNDQwWDkwMF83NUhaX1BJWENMT0NLLCA3NX0sCisJezE2MDAsIDkwMCwgUkVTXzE2MDBYOTAwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTYwMCwgMTAyNCwgUkVTXzE2MDBYMTAyNF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE2ODAsIDEwNTAsIFJFU18xNjgwWDEwNTBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxNjgwLCAxMDUwLCBSRVNfMTY4MFgxMDUwXzc1SFpfUElYQ0xPQ0ssIDc1fSwKKwl7MTc5MiwgMTM0NCwgUkVTXzE3OTJYMTM0NF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE4NTYsIDEzOTIsIFJFU18xODU2WDEzOTJfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxOTIwLCAxMjAwLCBSRVNfMTkyMFgxMjAwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTkyMCwgMTQ0MCwgUkVTXzE5MjBYMTQ0MF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE5MjAsIDE0NDAsIFJFU18xOTIwWDE0NDBfNzVIWl9QSVhDTE9DSywgNzV9LAorCXsyMDQ4LCAxNTM2LCBSRVNfMjA0OFgxNTM2XzYwSFpfUElYQ0xPQ0ssIDYwfQorfTsKKworc3RydWN0IGlvX3JlZyBDTjQwMF9Nb2RlWHJlZ3NbXSA9IHsge1ZJQVNSLCBTUjEwLCAweEZGLCAweDAxfSwKK3tWSUFTUiwgU1IxNSwgMHgwMiwgMHgwMn0sCit7VklBU1IsIFNSMTYsIDB4QkYsIDB4MDh9LAore1ZJQVNSLCBTUjE3LCAweEZGLCAweDFGfSwKK3tWSUFTUiwgU1IxOCwgMHhGRiwgMHg0RX0sCit7VklBU1IsIFNSMUEsIDB4RkIsIDB4MDh9LAore1ZJQVNSLCBTUjFFLCAweDBGLCAweDAxfSwKK3tWSUFTUiwgU1IyQSwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMEEsIDB4RkYsIDB4MUV9LAkvKiBDdXJzb3IgU3RhcnQgICAgICAgICAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjBCLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIEVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IwRSwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhdGlvbiBIaWdoICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSMEYsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYWx0aW9uIExvdyAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjMyLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzMywgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzQsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM1LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNiwgMHgwOCwgMHgwMH0sCit7VklBQ1IsIENSNjIsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwore1ZJQUNSLCBDUjYzLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KK3tWSUFDUiwgQ1I2NCwgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCit7VklBQ1IsIENSNjksIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjZBLCAweEZGLCAweDQwfSwKK3tWSUFDUiwgQ1I2QiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSNkMsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjdBLCAweEZGLCAweDAxfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3QiwgMHhGRiwgMHgwMn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAyICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0MsIDB4RkYsIDB4MDN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMyAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdELCAweEZGLCAweDA0fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDQgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3RSwgMHhGRiwgMHgwN30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA1ICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0YsIDB4RkYsIDB4MEF9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNiAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgwLCAweEZGLCAweDBEfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDcgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MSwgMHhGRiwgMHgxM30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA4ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODIsIDB4RkYsIDB4MTZ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgOSAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgzLCAweEZGLCAweDE5fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEwICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NCwgMHhGRiwgMHgxQ30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMSAgICAgICAgICAgICovCit7VklBQ1IsIENSODUsIDB4RkYsIDB4MUR9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTIgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg2LCAweEZGLCAweDFFfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEzICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NywgMHhGRiwgMHgxRn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxNCAgICAgICAgICAgICovCit7VklBQ1IsIENSODgsIDB4RkYsIDB4NDB9LAkvKiBMQ0QgUGFuZWwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg5LCAweEZGLCAweDAwfSwJLyogTENEIFRpbWluZyBDb250cm9sIDAgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4QSwgMHhGRiwgMHg4OH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAxICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSOEIsIDB4RkYsIDB4Njl9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAwICAgICAgICAqLwore1ZJQUNSLCBDUjhDLCAweEZGLCAweDU3fSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMSAgICAgICAgKi8KK3tWSUFDUiwgQ1I4RCwgMHhGRiwgMHgwMH0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDIgICAgICAgICovCit7VklBQ1IsIENSOEUsIDB4RkYsIDB4N0J9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAzICAgICAgICAqLwore1ZJQUNSLCBDUjhGLCAweEZGLCAweDAzfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgNCAgICAgICAgKi8KK3tWSUFDUiwgQ1I5MCwgMHhGRiwgMHgzMH0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDUgICAgICAgICovCit7VklBQ1IsIENSOTEsIDB4RkYsIDB4QTB9LAkvKiAyNC8xMiBiaXQgTFZEUyBEYXRhIG9mZiAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjk2LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I5NywgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOTksIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjlCLCAweEZGLCAweDAwfQorfTsKKworLyogVmlkZW8gTW9kZSBUYWJsZSBmb3IgVlQzMzE0IGNoaXBzZXQqLworLyogQ29tbW9uIFNldHRpbmcgZm9yIFZpZGVvIE1vZGUgKi8KK3N0cnVjdCBpb19yZWcgQ043MDBfTW9kZVhyZWdzW10gPSB7IHtWSUFTUiwgU1IxMCwgMHhGRiwgMHgwMX0sCit7VklBU1IsIFNSMTUsIDB4MDIsIDB4MDJ9LAore1ZJQVNSLCBTUjE2LCAweEJGLCAweDA4fSwKK3tWSUFTUiwgU1IxNywgMHhGRiwgMHgxRn0sCit7VklBU1IsIFNSMTgsIDB4RkYsIDB4NEV9LAore1ZJQVNSLCBTUjFBLCAweEZCLCAweDgyfSwKK3tWSUFTUiwgU1IxQiwgMHhGRiwgMHhGMH0sCit7VklBU1IsIFNSMUYsIDB4RkYsIDB4MDB9LAore1ZJQVNSLCBTUjFFLCAweEZGLCAweDAxfSwKK3tWSUFTUiwgU1IyMiwgMHhGRiwgMHgxRn0sCit7VklBU1IsIFNSMkEsIDB4MEYsIDB4MDB9LAore1ZJQVNSLCBTUjJFLCAweEZGLCAweEZGfSwKK3tWSUFTUiwgU1IzRiwgMHhGRiwgMHhGRn0sCit7VklBU1IsIFNSNDAsIDB4RjcsIDB4MDB9LAore1ZJQVNSLCBDUjMwLCAweEZGLCAweDA0fSwKK3tWSUFDUiwgQ1IzMiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzMsIDB4N0YsIDB4MDB9LAore1ZJQUNSLCBDUjM0LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNSwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzYsIDB4RkYsIDB4MzF9LAore1ZJQUNSLCBDUjQxLCAweEZGLCAweDgwfSwKK3tWSUFDUiwgQ1I0MiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSNTUsIDB4ODAsIDB4MDB9LAore1ZJQUNSLCBDUjVELCAweDgwLCAweDAwfSwJLypIb3Jpem9udGFsIFJldHJhY2UgU3RhcnQgYml0WzExXSBzaG91bGQgYmUgMCovCit7VklBQ1IsIENSNjIsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICovCit7VklBQ1IsIENSNjMsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICovCit7VklBQ1IsIENSNjQsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICovCit7VklBQ1IsIENSNjgsIDB4RkYsIDB4Njd9LAkvKiBEZWZhdWx0IEZJRk8gRm9yIElHQTIgKi8KK3tWSUFDUiwgQ1I2OSwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSNkEsIDB4RkQsIDB4NDB9LAore1ZJQUNSLCBDUjZCLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I2QywgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSNzcsIDB4RkYsIDB4MDB9LAkvKiBMQ0Qgc2NhbGluZyBGYWN0b3IgKi8KK3tWSUFDUiwgQ1I3OCwgMHhGRiwgMHgwMH0sCS8qIExDRCBzY2FsaW5nIEZhY3RvciAqLwore1ZJQUNSLCBDUjc5LCAweEZGLCAweDAwfSwJLyogTENEIHNjYWxpbmcgRmFjdG9yICovCit7VklBQ1IsIENSOUYsIDB4MDMsIDB4MDB9LAkvKiBMQ0Qgc2NhbGluZyBGYWN0b3IgKi8KK3tWSUFDUiwgQ1I3QSwgMHhGRiwgMHgwMX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxICovCit7VklBQ1IsIENSN0IsIDB4RkYsIDB4MDJ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMiAqLwore1ZJQUNSLCBDUjdDLCAweEZGLCAweDAzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDMgKi8KK3tWSUFDUiwgQ1I3RCwgMHhGRiwgMHgwNH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA0ICovCit7VklBQ1IsIENSN0UsIDB4RkYsIDB4MDd9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNSAqLwore1ZJQUNSLCBDUjdGLCAweEZGLCAweDBBfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDYgKi8KK3tWSUFDUiwgQ1I4MCwgMHhGRiwgMHgwRH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA3ICovCit7VklBQ1IsIENSODEsIDB4RkYsIDB4MTN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgOCAqLwore1ZJQUNSLCBDUjgyLCAweEZGLCAweDE2fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDkgKi8KK3tWSUFDUiwgQ1I4MywgMHhGRiwgMHgxOX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMCAqLwore1ZJQUNSLCBDUjg0LCAweEZGLCAweDFDfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDExICovCit7VklBQ1IsIENSODUsIDB4RkYsIDB4MUR9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTIgKi8KK3tWSUFDUiwgQ1I4NiwgMHhGRiwgMHgxRX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMyAqLwore1ZJQUNSLCBDUjg3LCAweEZGLCAweDFGfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDE0ICovCit7VklBQ1IsIENSODgsIDB4RkYsIDB4NDB9LAkvKiBMQ0QgUGFuZWwgVHlwZSAqLwore1ZJQUNSLCBDUjg5LCAweEZGLCAweDAwfSwJLyogTENEIFRpbWluZyBDb250cm9sIDAgKi8KK3tWSUFDUiwgQ1I4QSwgMHhGRiwgMHg4OH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAxICovCit7VklBQ1IsIENSOEIsIDB4RkYsIDB4NUR9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAwICovCit7VklBQ1IsIENSOEMsIDB4RkYsIDB4MkJ9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAxICovCit7VklBQ1IsIENSOEQsIDB4RkYsIDB4NkZ9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAyICovCit7VklBQ1IsIENSOEUsIDB4RkYsIDB4MkJ9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAzICovCit7VklBQ1IsIENSOEYsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCA0ICovCit7VklBQ1IsIENSOTAsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCA1ICovCit7VklBQ1IsIENSOTEsIDB4RkYsIDB4QTB9LAkvKiAyNC8xMiBiaXQgTFZEUyBEYXRhIG9mZiAqLwore1ZJQUNSLCBDUjk2LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I5NywgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOTksIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjlCLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I5RCwgMHhGRiwgMHg4MH0sCit7VklBQ1IsIENSOUUsIDB4RkYsIDB4ODB9Cit9OworCitzdHJ1Y3QgaW9fcmVnIEtNNDAwX01vZGVYcmVnc1tdID0geworCXtWSUFTUiwgU1IxMCwgMHhGRiwgMHgwMX0sCS8qIFVubG9jayBSZWdpc3RlciAgICAgICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSMTYsIDB4RkYsIDB4MDh9LAkvKiBEaXNwbGF5IEZJRk8gdGhyZXNob2xkIENvbnRyb2wgICovCisJe1ZJQVNSLCBTUjE3LCAweEZGLCAweDFGfSwJLyogRGlzcGxheSBGSUZPIENvbnRyb2wgICAgICAgICAgICAqLworCXtWSUFTUiwgU1IxOCwgMHhGRiwgMHg0RX0sCS8qIEdGWCBQUkVRIHRocmVzaG9sZCAgICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSMUEsIDB4RkYsIDB4MGF9LAkvKiBHRlggUFJFUSB0aHJlc2hvbGQgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjFGLCAweEZGLCAweDAwfSwJLyogTWVtb3J5IENvbnRyb2wgMCAgICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1IxQiwgMHhGRiwgMHhGMH0sCS8qIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbCAwICAgICAgKi8KKwl7VklBU1IsIFNSMUUsIDB4RkYsIDB4MDF9LAkvKiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2wgICAgICAgICovCisJe1ZJQVNSLCBTUjIwLCAweEZGLCAweDAwfSwJLyogU2VxdWVuY2VyIEFyYml0ZXIgQ29udHJvbCAwICAgICAqLworCXtWSUFTUiwgU1IyMSwgMHhGRiwgMHgwMH0sCS8qIFNlcXVlbmNlciBBcmJpdGVyIENvbnRyb2wgMSAgICAgKi8KKwl7VklBU1IsIFNSMjIsIDB4RkYsIDB4MUZ9LAkvKiBEaXNwbGF5IEFyYml0ZXIgQ29udHJvbCAxICAgICAgICovCisJe1ZJQVNSLCBTUjJBLCAweEZGLCAweDAwfSwJLyogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sIDUgICAgICAqLworCXtWSUFTUiwgU1IyRCwgMHhGRiwgMHhGRn0sCS8qIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbCAxICAgICAgKi8KKwl7VklBU1IsIFNSMkUsIDB4RkYsIDB4RkZ9LAkvKiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2wgMiAgICAgICovCisJe1ZJQUNSLCBDUjBBLCAweEZGLCAweDFFfSwJLyogQ3Vyc29yIFN0YXJ0ICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1IwQiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBFbmQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSMEUsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYXRpb24gSGlnaCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjBGLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2FsdGlvbiBMb3cgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1IzMywgMHhGRiwgMHgwMH0sCisJe1ZJQUNSLCBDUjU1LCAweDgwLCAweDAwfSwKKwl7VklBQ1IsIENSNUQsIDB4ODAsIDB4MDB9LAorCXtWSUFDUiwgQ1IzNiwgMHhGRiwgMHgwMX0sCS8qIFBvd2VyIE1hbmdlbWVudCAzICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjIsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICovCisJe1ZJQUNSLCBDUjYzLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLworCXtWSUFDUiwgQ1I2NCwgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgKi8KKwl7VklBQ1IsIENSNjgsIDB4RkYsIDB4Njd9LAkvKiBEZWZhdWx0IEZJRk8gRm9yIElHQTIgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjZBLCAweDIwLCAweDIwfSwJLyogRXh0ZW5kZWQgRklGTyBPbiAgICAgICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I3QSwgMHhGRiwgMHgwMX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSN0IsIDB4RkYsIDB4MDJ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMiAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjdDLCAweEZGLCAweDAzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDMgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I3RCwgMHhGRiwgMHgwNH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA0ICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSN0UsIDB4RkYsIDB4MDd9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNSAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjdGLCAweEZGLCAweDBBfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDYgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I4MCwgMHhGRiwgMHgwRH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA3ICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSODEsIDB4RkYsIDB4MTN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgOCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjgyLCAweEZGLCAweDE2fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDkgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I4MywgMHhGRiwgMHgxOX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMCAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSODQsIDB4RkYsIDB4MUN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTEgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjg1LCAweEZGLCAweDFEfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEyICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I4NiwgMHhGRiwgMHgxRX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMyAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSODcsIDB4RkYsIDB4MUZ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTQgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjg4LCAweEZGLCAweDQwfSwJLyogTENEIFBhbmVsIFR5cGUgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I4OSwgMHhGRiwgMHgwMH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAwICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSOEEsIDB4RkYsIDB4ODh9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMSAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjhCLCAweEZGLCAweDJEfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMCAgICAgICAqLworCXtWSUFDUiwgQ1I4QywgMHhGRiwgMHgyRH0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDEgICAgICAgKi8KKwl7VklBQ1IsIENSOEQsIDB4RkYsIDB4Qzh9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAyICAgICAgICovCisJe1ZJQUNSLCBDUjhFLCAweEZGLCAweDM2fSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMyAgICAgICAqLworCXtWSUFDUiwgQ1I4RiwgMHhGRiwgMHgwMH0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDQgICAgICAgKi8KKwl7VklBQ1IsIENSOTAsIDB4RkYsIDB4MTB9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCA1ICAgICAgICovCisJe1ZJQUNSLCBDUjkxLCAweEZGLCAweEEwfSwJLyogMjQvMTIgYml0IExWRFMgRGF0YSBvZmYgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I5NiwgMHhGRiwgMHgwM30sCS8qIERWUDAgICAgICAgIDsgRFZQMCBDbG9jayBTa2V3ICovCisJe1ZJQUNSLCBDUjk3LCAweEZGLCAweDAzfSwJLyogREZQIGhpZ2ggICAgOyBERlBIIENsb2NrIFNrZXcgKi8KKwl7VklBQ1IsIENSOTksIDB4RkYsIDB4MDN9LAkvKiBERlAgbG93ICAgICAgICAgICA7IERGUEwgQ2xvY2sgU2tldyovCisJe1ZJQUNSLCBDUjlCLCAweEZGLCAweDA3fQkvKiBEVkkgb24gRFZQMSAgICAgICA7IERWUDEgQ2xvY2sgU2tldyovCit9OworCisvKiBGb3IgVlQzMzI0OiBDb21tb24gU2V0dGluZyBmb3IgVmlkZW8gTW9kZSAqLworc3RydWN0IGlvX3JlZyBDWDcwMF9Nb2RlWHJlZ3NbXSA9IHsge1ZJQVNSLCBTUjEwLCAweEZGLCAweDAxfSwKK3tWSUFTUiwgU1IxNSwgMHgwMiwgMHgwMn0sCit7VklBU1IsIFNSMTYsIDB4QkYsIDB4MDh9LAore1ZJQVNSLCBTUjE3LCAweEZGLCAweDFGfSwKK3tWSUFTUiwgU1IxOCwgMHhGRiwgMHg0RX0sCit7VklBU1IsIFNSMUEsIDB4RkIsIDB4MDh9LAore1ZJQVNSLCBTUjFCLCAweEZGLCAweEYwfSwKK3tWSUFTUiwgU1IxRSwgMHhGRiwgMHgwMX0sCit7VklBU1IsIFNSMkEsIDB4RkYsIDB4MDB9LAore1ZJQVNSLCBTUjJELCAweEZGLCAweEZGfSwJLyogVkNLIGFuZCBMQ0sgUExMIHBvd2VyIG9uLiAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IwQSwgMHhGRiwgMHgxRX0sCS8qIEN1cnNvciBTdGFydCAgICAgICAgICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSMEIsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgRW5kICAgICAgICAgICAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjBFLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2F0aW9uIEhpZ2ggICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IwRiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhbHRpb24gTG93ICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSMzIsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjMzLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNCwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzUsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM2LCAweDA4LCAweDAwfSwKK3tWSUFDUiwgQ1I0NywgMHhDOCwgMHgwMH0sCS8qIENsZWFyIFZDSyBQbHVzLiAqLwore1ZJQUNSLCBDUjYyLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KK3tWSUFDUiwgQ1I2MywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCit7VklBQ1IsIENSNjQsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwore1ZJQUNSLCBDUkEzLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KK3tWSUFDUiwgQ1I2OSwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSNkEsIDB4RkYsIDB4NDB9LAore1ZJQUNSLCBDUjZCLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I2QywgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSN0EsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMSAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdCLCAweEZGLCAweDAyfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDIgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3QywgMHhGRiwgMHgwM30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAzICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0QsIDB4RkYsIDB4MDR9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNCAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdFLCAweEZGLCAweDA3fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDUgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3RiwgMHhGRiwgMHgwQX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA2ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODAsIDB4RkYsIDB4MER9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNyAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgxLCAweEZGLCAweDEzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDggICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MiwgMHhGRiwgMHgxNn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA5ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODMsIDB4RkYsIDB4MTl9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg0LCAweEZGLCAweDFDfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDExICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NSwgMHhGRiwgMHgxRH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMiAgICAgICAgICAgICovCit7VklBQ1IsIENSODYsIDB4RkYsIDB4MUV9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTMgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg3LCAweEZGLCAweDFGfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDE0ICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4OCwgMHhGRiwgMHg0MH0sCS8qIExDRCBQYW5lbCBUeXBlICAgICAgICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSODksIDB4RkYsIDB4MDB9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMCAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjhBLCAweEZGLCAweDg4fSwJLyogTENEIFRpbWluZyBDb250cm9sIDEgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1JENCwgMHhGRiwgMHg4MX0sCS8qIFNlY29uZCBwb3dlciBzZXF1ZW5jZSBjb250cm9sICAgICAgICovCit7VklBQ1IsIENSOEIsIDB4RkYsIDB4NUR9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAwICAgICAgICAqLwore1ZJQUNSLCBDUjhDLCAweEZGLCAweDJCfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMSAgICAgICAgKi8KK3tWSUFDUiwgQ1I4RCwgMHhGRiwgMHg2Rn0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDIgICAgICAgICovCit7VklBQ1IsIENSOEUsIDB4RkYsIDB4MkJ9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAzICAgICAgICAqLwore1ZJQUNSLCBDUjhGLCAweEZGLCAweDAxfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgNCAgICAgICAgKi8KK3tWSUFDUiwgQ1I5MCwgMHhGRiwgMHgwMX0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDUgICAgICAgICovCit7VklBQ1IsIENSOTEsIDB4RkYsIDB4ODB9LAkvKiAyNC8xMiBiaXQgTFZEUyBEYXRhIG9mZiAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjk2LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I5NywgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOTksIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjlCLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1JEMiwgMHhGRiwgMHhGRn0JLyogVE1EUy9MVkRTIGNvbnRyb2wgcmVnaXN0ZXIuICAgICAgICAgKi8KK307CisKKy8qIEZvciBWVDMzNTM6IENvbW1vbiBTZXR0aW5nIGZvciBWaWRlbyBNb2RlICovCitzdHJ1Y3QgaW9fcmVnIFZYODAwX01vZGVYcmVnc1tdID0geyB7VklBU1IsIFNSMTAsIDB4RkYsIDB4MDF9LAore1ZJQVNSLCBTUjE1LCAweDAyLCAweDAyfSwKK3tWSUFTUiwgU1IxNiwgMHhCRiwgMHgwOH0sCit7VklBU1IsIFNSMTcsIDB4RkYsIDB4MUZ9LAore1ZJQVNSLCBTUjE4LCAweEZGLCAweDRFfSwKK3tWSUFTUiwgU1IxQSwgMHhGQiwgMHgwOH0sCit7VklBU1IsIFNSMUIsIDB4RkYsIDB4RjB9LAore1ZJQVNSLCBTUjFFLCAweEZGLCAweDAxfSwKK3tWSUFTUiwgU1IyQSwgMHhGRiwgMHgwMH0sCit7VklBU1IsIFNSMkQsIDB4RkYsIDB4RkZ9LAkvKiBWQ0sgYW5kIExDSyBQTEwgcG93ZXIgb24uICAgICAgICAgICAqLwore1ZJQUNSLCBDUjBBLCAweEZGLCAweDFFfSwJLyogQ3Vyc29yIFN0YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IwQiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBFbmQgICAgICAgICAgICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSMEUsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYXRpb24gSGlnaCAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjBGLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2FsdGlvbiBMb3cgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IzMiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzMsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM0LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNSwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzYsIDB4MDgsIDB4MDB9LAore1ZJQUNSLCBDUjQ3LCAweEM4LCAweDAwfSwJLyogQ2xlYXIgVkNLIFBsdXMuICovCit7VklBQ1IsIENSNjIsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwore1ZJQUNSLCBDUjYzLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KK3tWSUFDUiwgQ1I2NCwgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCit7VklBQ1IsIENSQTMsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwore1ZJQUNSLCBDUjY5LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I2QSwgMHhGRiwgMHg0MH0sCit7VklBQ1IsIENSNkIsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjZDLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I3QSwgMHhGRiwgMHgwMX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0IsIDB4RkYsIDB4MDJ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMiAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdDLCAweEZGLCAweDAzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDMgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3RCwgMHhGRiwgMHgwNH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA0ICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0UsIDB4RkYsIDB4MDd9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNSAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdGLCAweEZGLCAweDBBfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDYgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MCwgMHhGRiwgMHgwRH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA3ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODEsIDB4RkYsIDB4MTN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgOCAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgyLCAweEZGLCAweDE2fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDkgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MywgMHhGRiwgMHgxOX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMCAgICAgICAgICAgICovCit7VklBQ1IsIENSODQsIDB4RkYsIDB4MUN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTEgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg1LCAweEZGLCAweDFEfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEyICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NiwgMHhGRiwgMHgxRX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMyAgICAgICAgICAgICovCit7VklBQ1IsIENSODcsIDB4RkYsIDB4MUZ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTQgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg4LCAweEZGLCAweDQwfSwJLyogTENEIFBhbmVsIFR5cGUgICAgICAgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4OSwgMHhGRiwgMHgwMH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAwICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSOEEsIDB4RkYsIDB4ODh9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMSAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUkQ0LCAweEZGLCAweDgxfSwJLyogU2Vjb25kIHBvd2VyIHNlcXVlbmNlIGNvbnRyb2wgICAgICAgKi8KK3tWSUFDUiwgQ1I4QiwgMHhGRiwgMHg1RH0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDAgICAgICAgICovCit7VklBQ1IsIENSOEMsIDB4RkYsIDB4MkJ9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAxICAgICAgICAqLwore1ZJQUNSLCBDUjhELCAweEZGLCAweDZGfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMiAgICAgICAgKi8KK3tWSUFDUiwgQ1I4RSwgMHhGRiwgMHgyQn0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDMgICAgICAgICovCit7VklBQ1IsIENSOEYsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCA0ICAgICAgICAqLwore1ZJQUNSLCBDUjkwLCAweEZGLCAweDAxfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgNSAgICAgICAgKi8KK3tWSUFDUiwgQ1I5MSwgMHhGRiwgMHg4MH0sCS8qIDI0LzEyIGJpdCBMVkRTIERhdGEgb2ZmICAgICAgICAgICAgICovCit7VklBQ1IsIENSOTYsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjk3LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I5OSwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOUIsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUkQyLCAweEZGLCAweEZGfQkvKiBUTURTL0xWRFMgY29udHJvbCByZWdpc3Rlci4gICAgICAgICAqLworfTsKKworLyogVmlkZW8gTW9kZSBUYWJsZSAqLworLyogQ29tbW9uIFNldHRpbmcgZm9yIFZpZGVvIE1vZGUgKi8KK3N0cnVjdCBpb19yZWcgQ0xFMjY2X01vZGVYcmVnc1tdID0geyB7VklBU1IsIFNSMUUsIDB4RjAsIDB4MDB9LAore1ZJQVNSLCBTUjJBLCAweDBGLCAweDAwfSwKK3tWSUFTUiwgU1IxNSwgMHgwMiwgMHgwMn0sCit7VklBU1IsIFNSMTYsIDB4QkYsIDB4MDh9LAore1ZJQVNSLCBTUjE3LCAweEZGLCAweDFGfSwKK3tWSUFTUiwgU1IxOCwgMHhGRiwgMHg0RX0sCit7VklBU1IsIFNSMUEsIDB4RkIsIDB4MDh9LAorCit7VklBQ1IsIENSMzIsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM0LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNSwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzYsIDB4MDgsIDB4MDB9LAore1ZJQUNSLCBDUjZBLCAweEZGLCAweDgwfSwKK3tWSUFDUiwgQ1I2QSwgMHhGRiwgMHhDMH0sCisKK3tWSUFDUiwgQ1I1NSwgMHg4MCwgMHgwMH0sCit7VklBQ1IsIENSNUQsIDB4ODAsIDB4MDB9LAorCit7VklBR1IsIEdSMjAsIDB4RkYsIDB4MDB9LAore1ZJQUdSLCBHUjIxLCAweEZGLCAweDAwfSwKK3tWSUFHUiwgR1IyMiwgMHhGRiwgMHgwMH0sCisJLyogTENEIFBhcmFtZXRlcnMgKi8KK3tWSUFDUiwgQ1I3QSwgMHhGRiwgMHgwMX0sCS8qIExDRCBQYXJhbWV0ZXIgMSAqLwore1ZJQUNSLCBDUjdCLCAweEZGLCAweDAyfSwJLyogTENEIFBhcmFtZXRlciAyICovCit7VklBQ1IsIENSN0MsIDB4RkYsIDB4MDN9LAkvKiBMQ0QgUGFyYW1ldGVyIDMgKi8KK3tWSUFDUiwgQ1I3RCwgMHhGRiwgMHgwNH0sCS8qIExDRCBQYXJhbWV0ZXIgNCAqLwore1ZJQUNSLCBDUjdFLCAweEZGLCAweDA3fSwJLyogTENEIFBhcmFtZXRlciA1ICovCit7VklBQ1IsIENSN0YsIDB4RkYsIDB4MEF9LAkvKiBMQ0QgUGFyYW1ldGVyIDYgKi8KK3tWSUFDUiwgQ1I4MCwgMHhGRiwgMHgwRH0sCS8qIExDRCBQYXJhbWV0ZXIgNyAqLwore1ZJQUNSLCBDUjgxLCAweEZGLCAweDEzfSwJLyogTENEIFBhcmFtZXRlciA4ICovCit7VklBQ1IsIENSODIsIDB4RkYsIDB4MTZ9LAkvKiBMQ0QgUGFyYW1ldGVyIDkgKi8KK3tWSUFDUiwgQ1I4MywgMHhGRiwgMHgxOX0sCS8qIExDRCBQYXJhbWV0ZXIgMTAgKi8KK3tWSUFDUiwgQ1I4NCwgMHhGRiwgMHgxQ30sCS8qIExDRCBQYXJhbWV0ZXIgMTEgKi8KK3tWSUFDUiwgQ1I4NSwgMHhGRiwgMHgxRH0sCS8qIExDRCBQYXJhbWV0ZXIgMTIgKi8KK3tWSUFDUiwgQ1I4NiwgMHhGRiwgMHgxRX0sCS8qIExDRCBQYXJhbWV0ZXIgMTMgKi8KK3tWSUFDUiwgQ1I4NywgMHhGRiwgMHgxRn0sCS8qIExDRCBQYXJhbWV0ZXIgMTQgKi8KKworfTsKKworLyogTW9kZToxMDI0WDc2OCAqLworc3RydWN0IGlvX3JlZyBQTTEwMjR4NzY4W10gPSB7IHtWSUFTUiwgMHgxNiwgMHhCRiwgMHgwQ30sCit7VklBU1IsIDB4MTgsIDB4RkYsIDB4NEN9Cit9OworCitzdHJ1Y3QgcGF0Y2hfdGFibGUgcmVzX3BhdGNoX3RhYmxlW10gPSB7CisJe1ZJQV9SRVNfMTAyNFg3NjgsIEFSUkFZX1NJWkUoUE0xMDI0eDc2OCksIFBNMTAyNHg3Njh9Cit9OworCisvKiBzdHJ1Y3QgVlBJVFRhYmxlIHsKKwl1bnNpZ25lZCBjaGFyICBNaXNjOworCXVuc2lnbmVkIGNoYXIgIFNSW1N0ZFNSXTsKKwl1bnNpZ25lZCBjaGFyICBDUltTdGRDUl07CisJdW5zaWduZWQgY2hhciAgR1JbU3RkR1JdOworCXVuc2lnbmVkIGNoYXIgIEFSW1N0ZEFSXTsKKyB9OyovCisKK3N0cnVjdCBWUElUVGFibGUgVlBJVCA9IHsKKwkvKiBNc2ljICovCisJMHhDNywKKwkvKiBTZXF1ZW5jZXIgKi8KKwl7MHgwMSwgMHgwRiwgMHgwMCwgMHgwRX0sCisJLyogR3JhcGhpYyBDb250cm9sbGVyICovCisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MEYsIDB4RkZ9LAorCS8qIEF0dHJpYnV0ZSBDb250cm9sbGVyICovCisJezB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisJIDB4MDEsIDB4MDAsIDB4MEYsIDB4MDB9Cit9OworCisvKioqKioqKioqKioqKioqKioqKiovCisvKiBNb2RlIFRhYmxlICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKiovCisKKy8qIDQ4MHg2NDAgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNNDgweDY0MFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18yNV8xNzVNLCBNNDgwWDY0MF9SNjBfSFNQLCBNNDgwWDY0MF9SNjBfVlNQLAorCSB7NjI0LCA0ODAsIDQ4MCwgMTQ0LCA1MDQsIDQ4LCA2NjMsIDY0MCwgNjQwLCAyMywgNjQxLCAzfSB9CS8qIEdURiovCit9OworCisvKiA2NDB4NDgwKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNNjQweDQ4MFtdID0geworCS8qcl9yYXRlLHZjbGssaHNwLHZzcCAqLworCS8qSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMjVfMTc1TSwgTTY0MFg0ODBfUjYwX0hTUCwgTTY0MFg0ODBfUjYwX1ZTUCwKKwkgezgwMCwgNjQwLCA2NDgsIDE0NCwgNjU2LCA5NiwgNTI1LCA0ODAsIDQ4MCwgNDUsIDQ5MCwgMn0gfSwKKwl7UkVGUkVTSF83NSwgQ0xLXzMxXzUwME0sIE02NDBYNDgwX1I3NV9IU1AsIE02NDBYNDgwX1I3NV9WU1AsCisJIHs4NDAsIDY0MCwgNjQwLCAyMDAsIDY1NiwgNjQsIDUwMCwgNDgwLCA0ODAsIDIwLCA0ODEsIDN9IH0sCisJe1JFRlJFU0hfODUsIENMS18zNl8wMDBNLCBNNjQwWDQ4MF9SODVfSFNQLCBNNjQwWDQ4MF9SODVfVlNQLAorCSB7ODMyLCA2NDAsIDY0MCwgMTkyLCA2OTYsIDU2LCA1MDksIDQ4MCwgNDgwLCAyOSwgNDgxLCAzfSB9LAorCXtSRUZSRVNIXzEwMCwgQ0xLXzQzXzE2M00sIE02NDBYNDgwX1IxMDBfSFNQLCBNNjQwWDQ4MF9SMTAwX1ZTUCwKKwkgezg0OCwgNjQwLCA2NDAsIDIwOCwgNjgwLCA2NCwgNTA5LCA0ODAsIDQ4MCwgMjksIDQ4MSwgM30gfSwgLypHVEYqLworCSAgICB7UkVGUkVTSF8xMjAsIENMS181Ml80MDZNLCBNNjQwWDQ4MF9SMTIwX0hTUCwKKwkgICAgIE02NDBYNDgwX1IxMjBfVlNQLAorCSAgICAgezg0OCwgNjQwLCA2NDAsIDIwOCwgNjgwLCA2NCwgNTE1LCA0ODAsIDQ4MCwgMzUsIDQ4MSwKKwkgICAgICAzfSB9IC8qR1RGKi8KK307CisKKy8qNzIweDQ4MCAoR1RGKSovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTcyMHg0ODBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgICAgICAqLworCS8qSFQsIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18yNl84ODBNLCBNNzIwWDQ4MF9SNjBfSFNQLCBNNzIwWDQ4MF9SNjBfVlNQLAorCSB7ODk2LCA3MjAsIDcyMCwgMTc2LCA3MzYsIDcyLCA0OTcsIDQ4MCwgNDgwLCAxNywgNDgxLCAzfSB9CisKK307CisKKy8qNzIweDU3NiAoR1RGKSovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTcyMHg1NzZbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzMyXzY2OE0sIE03MjBYNTc2X1I2MF9IU1AsIE03MjBYNTc2X1I2MF9WU1AsCisJIHs5MTIsIDcyMCwgNzIwLCAxOTIsIDc0NCwgNzIsIDU5NywgNTc2LCA1NzYsIDIxLCA1NzcsIDN9IH0KK307CisKKy8qIDgwMHg0ODAgKENWVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNODAweDQ4MFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18yOV81ODFNLCBNODAwWDQ4MF9SNjBfSFNQLCBNODAwWDQ4MF9SNjBfVlNQLAorCSB7OTkyLCA4MDAsIDgwMCwgMTkyLCA4MjQsIDcyLCA1MDAsIDQ4MCwgNDgwLCAyMCwgNDgzLCA3fSB9Cit9OworCisvKiA4MDB4NjAwKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNODAweDYwMFtdID0geworCS8qcl9yYXRlLHZjbGssaHNwLHZzcCAgICAgKi8KKwkvKkhULCAgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS180MF8wMDBNLCBNODAwWDYwMF9SNjBfSFNQLCBNODAwWDYwMF9SNjBfVlNQLAorCSB7MTA1NiwgODAwLCA4MDAsIDI1NiwgODQwLCAxMjgsIDYyOCwgNjAwLCA2MDAsIDI4LCA2MDEsIDR9IH0sCisJe1JFRlJFU0hfNzUsIENMS180OV81MDBNLCBNODAwWDYwMF9SNzVfSFNQLCBNODAwWDYwMF9SNzVfVlNQLAorCSB7MTA1NiwgODAwLCA4MDAsIDI1NiwgODE2LCA4MCwgNjI1LCA2MDAsIDYwMCwgMjUsIDYwMSwgM30gfSwKKwl7UkVGUkVTSF84NSwgQ0xLXzU2XzI1ME0sIE04MDBYNjAwX1I4NV9IU1AsIE04MDBYNjAwX1I4NV9WU1AsCisJIHsxMDQ4LCA4MDAsIDgwMCwgMjQ4LCA4MzIsIDY0LCA2MzEsIDYwMCwgNjAwLCAzMSwgNjAxLCAzfSB9LAorCXtSRUZSRVNIXzEwMCwgQ0xLXzY4XzE3OU0sIE04MDBYNjAwX1IxMDBfSFNQLCBNODAwWDYwMF9SMTAwX1ZTUCwKKwkgezEwNzIsIDgwMCwgODAwLCAyNzIsIDg0OCwgODgsIDYzNiwgNjAwLCA2MDAsIDM2LCA2MDEsIDN9IH0sCisJe1JFRlJFU0hfMTIwLCBDTEtfODNfOTUwTSwgTTgwMFg2MDBfUjEyMF9IU1AsCisJCSAgTTgwMFg2MDBfUjEyMF9WU1AsCisJCSAgezEwODgsIDgwMCwgODAwLCAyODgsIDg1NiwgODgsIDY0MywgNjAwLCA2MDAsIDQzLCA2MDEsCisJCSAgIDN9IH0KK307CisKKy8qIDg0OHg0ODAgKENWVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNODQ4eDQ4MFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18zMV81MDBNLCBNODQ4WDQ4MF9SNjBfSFNQLCBNODQ4WDQ4MF9SNjBfVlNQLAorCSB7MTA1NiwgODQ4LCA4NDgsIDIwOCwgODcyLCA4MCwgNTAwLCA0ODAsIDQ4MCwgMjAsIDQ4MywgNX0gfQorfTsKKworLyo4NTZ4NDgwIChHVEYpIGNvbnZlcnQgdG8gODUyeDQ4MCovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTg1Mng0ODBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgICAgICovCisJLypIVCwgICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMzFfNzI4TSwgTTg1Mlg0ODBfUjYwX0hTUCwgTTg1Mlg0ODBfUjYwX1ZTUCwKKwl7MTA2NCwgODU2LCA4NTYsIDIwOCwgODcyLCA4OCwgNDk3LCA0ODAsIDQ4MCwgMTcsIDQ4MSwgM30gfQorfTsKKworLyoxMDI0eDUxMiAoR1RGKSovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMjR4NTEyW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICAgICAqLworCS8qSFQsICAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzQxXzI5MU0sIE0xMDI0WDUxMl9SNjBfSFNQLCBNMTAyNFg1MTJfUjYwX1ZTUCwKKwkgezEyOTYsIDEwMjQsIDEwMjQsIDI3MiwgMTA1NiwgMTA0LCA1MzEsIDUxMiwgNTEyLCAxOSwgNTEzLCAzfSB9CisKK307CisKKy8qIDEwMjR4NjAwKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTAyNHg2MDBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzQ4Xzg3NU0sIE0xMDI0WDYwMF9SNjBfSFNQLCBNMTAyNFg2MDBfUjYwX1ZTUCwKKwkgezEzMTIsIDEwMjQsIDEwMjQsIDI4OCwgMTA2NCwgMTA0LCA2MjIsIDYwMCwgNjAwLCAyMiwgNjAxLCAzfSB9LAorfTsKKworLyogMTAyNHg3NjgqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDI0eDc2OFtdID0geworCS8qcl9yYXRlLHZjbGssaHNwLHZzcCAqLworCS8qSFQsICBIQSwgICBIQlMsICBIQkUsIEhTUywgIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfNjVfMDAwTSwgTTEwMjRYNzY4X1I2MF9IU1AsIE0xMDI0WDc2OF9SNjBfVlNQLAorCXsxMzQ0LCAxMDI0LCAxMDI0LCAzMjAsIDEwNDgsIDEzNiwgODA2LCA3NjgsIDc2OCwgMzgsIDc3MSwgNn0gfSwKKwl7UkVGUkVTSF83NSwgQ0xLXzc4Xzc1ME0sIE0xMDI0WDc2OF9SNzVfSFNQLCBNMTAyNFg3NjhfUjc1X1ZTUCwKKwl7MTMxMiwgMTAyNCwgMTAyNCwgMjg4LCAxMDQwLCA5NiwgODAwLCA3NjgsIDc2OCwgMzIsIDc2OSwgM30gfSwKKwl7UkVGUkVTSF84NSwgQ0xLXzk0XzUwME0sIE0xMDI0WDc2OF9SODVfSFNQLCBNMTAyNFg3NjhfUjg1X1ZTUCwKKwl7MTM3NiwgMTAyNCwgMTAyNCwgMzUyLCAxMDcyLCA5NiwgODA4LCA3NjgsIDc2OCwgNDAsIDc2OSwgM30gfSwKKwl7UkVGUkVTSF8xMDAsIENMS18xMTNfMzA5TSwgTTEwMjRYNzY4X1IxMDBfSFNQLCBNMTAyNFg3NjhfUjEwMF9WU1AsCisJezEzOTIsIDEwMjQsIDEwMjQsIDM2OCwgMTA5NiwgMTEyLCA4MTQsIDc2OCwgNzY4LCA0NiwgNzY5LCAzfSB9Cit9OworCisvKiAxMTUyeDg2NCovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTExNTJ4ODY0W10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICAgICAgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF83NSwgQ0xLXzEwOF8wMDBNLCBNMTE1Mlg4NjRfUjc1X0hTUCwgTTExNTJYODY0X1I3NV9WU1AsCisJIHsxNjAwLCAxMTUyLCAxMTUyLCA0NDgsIDEyMTYsIDEyOCwgOTAwLCA4NjQsIDg2NCwgMzYsIDg2NSwgM30gfQorCit9OworCisvKiAxMjgweDcyMCAoSERNSSA3MjBQKSovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4NzIwW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICovCisJLypIVCwgIEhBLCAgIEhCUywgIEhCRSwgSFNTLCAgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICAgICAgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzc0XzQ4MU0sIE0xMjgwWDcyMF9SNjBfSFNQLCBNMTI4MFg3MjBfUjYwX1ZTUCwKKwkgezE2NDgsIDEyODAsIDEyODAsIDM2OCwgMTM5MiwgNDAsIDc1MCwgNzIwLCA3MjAsIDMwLCA3MjUsIDV9IH0sCisJe1JFRlJFU0hfNTAsIENMS182MF80NjZNLCBNMTI4MFg3MjBfUjUwX0hTUCwgTTEyODBYNzIwX1I1MF9WU1AsCisJIHsxNjMyLCAxMjgwLCAxMjgwLCAzNTIsIDEzMjgsIDEyOCwgNzQxLCA3MjAsIDcyMCwgMjEsIDcyMSwgM30gfQorfTsKKworLyoxMjgweDc2OCAoR1RGKSovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4NzY4W10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICAgICAqLworCS8qSFQsICBIQSwgICBIQlMsICBIQkUsIEhTUywgIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfODBfMTM2TSwgTTEyODBYNzY4X1I2MF9IU1AsIE0xMjgwWDc2OF9SNjBfVlNQLAorCSB7MTY4MCwgMTI4MCwgMTI4MCwgNDAwLCAxMzQ0LCAxMzYsIDc5NSwgNzY4LCA3NjgsIDI3LCA3NjksIDN9IH0sCisJe1JFRlJFU0hfNTAsIENMS182NV8xNzhNLCBNMTI4MFg3NjhfUjUwX0hTUCwgTTEyODBYNzY4X1I1MF9WU1AsCisJIHsxNjQ4LCAxMjgwLCAxMjgwLCAzNjgsIDEzMzYsIDEyOCwgNzkxLCA3NjgsIDc2OCwgMjMsIDc2OSwgM30gfQorfTsKKworLyogMTI4MHg4MDAgKENWVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTI4MHg4MDBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfODNfMzc1TSwgTTEyODBYODAwX1I2MF9IU1AsIE0xMjgwWDgwMF9SNjBfVlNQLAorCSB7MTY4MCwgMTI4MCwgMTI4MCwgNDAwLCAxMzUyLCAxMjgsIDgzMSwgODAwLCA4MDAsIDMxLCA4MDMsIDZ9IH0KK307CisKKy8qMTI4MHg5NjAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDk2MFtdID0geworCS8qcl9yYXRlLHZjbGssaHNwLHZzcCAqLworCS8qSFQsICBIQSwgICBIQlMsICBIQkUsIEhTUywgIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTA4XzAwME0sIE0xMjgwWDk2MF9SNjBfSFNQLCBNMTI4MFg5NjBfUjYwX1ZTUCwKKwkgezE4MDAsIDEyODAsIDEyODAsIDUyMCwgMTM3NiwgMTEyLCAxMDAwLCA5NjAsIDk2MCwgNDAsIDk2MSwgM30gfQorfTsKKworLyogMTI4MHgxMDI0Ki8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTI4MHgxMDI0W10gPSB7CisJLypyX3JhdGUsdmNsaywsaHNwLHZzcCAqLworCS8qSFQsICBIQSwgICBIQlMsICBIQkUsIEhTUywgIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTA4XzAwME0sIE0xMjgwWDEwMjRfUjYwX0hTUCwgTTEyODBYMTAyNF9SNjBfVlNQLAorCSB7MTY4OCwgMTI4MCwgMTI4MCwgNDA4LCAxMzI4LCAxMTIsIDEwNjYsIDEwMjQsIDEwMjQsIDQyLCAxMDI1LAorCSAgM30gfSwKKwl7UkVGUkVTSF83NSwgQ0xLXzEzNV8wMDBNLCBNMTI4MFgxMDI0X1I3NV9IU1AsIE0xMjgwWDEwMjRfUjc1X1ZTUCwKKwkgezE2ODgsIDEyODAsIDEyODAsIDQwOCwgMTI5NiwgMTQ0LCAxMDY2LCAxMDI0LCAxMDI0LCA0MiwgMTAyNSwKKwkgIDN9IH0sCisJe1JFRlJFU0hfODUsIENMS18xNTdfNTAwTSwgTTEyODBYMTAyNF9SODVfSFNQLCBNMTI4MFgxMDI0X1I4NV9WU1AsCisJIHsxNzI4LCAxMjgwLCAxMjgwLCA0NDgsIDEzNDQsIDE2MCwgMTA3MiwgMTAyNCwgMTAyNCwgNDgsIDEwMjUsIDN9IH0KK307CisKKy8qIDEzNjh4NzY4IChHVEYpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEzNjh4NzY4W10gPSB7CisJLyogcl9yYXRlLCAgdmNsaywgaHNwLCB2c3AgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS184NV84NjBNLCBNMTM2OFg3NjhfUjYwX0hTUCwgTTEzNjhYNzY4X1I2MF9WU1AsCisJIHsxODAwLCAxMzY4LCAxMzY4LCA0MzIsIDE0NDAsIDE0NCwgNzk1LCA3NjgsIDc2OCwgMjcsIDc2OSwgM30gfQorfTsKKworLyoxNDQweDEwNTAgKEdURikqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNDQweDEwNTBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgICAgICAqLworCS8qSFQsICBIQSwgICBIQlMsICBIQkUsIEhTUywgIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTI1XzEwNE0sIE0xNDQwWDEwNTBfUjYwX0hTUCwgTTE0NDBYMTA1MF9SNjBfVlNQLAorCSB7MTkzNiwgMTQ0MCwgMTQ0MCwgNDk2LCAxNTM2LCAxNTIsIDEwNzcsIDEwNDAsIDEwNDAsIDM3LCAxMDQxLCAzfSB9Cit9OworCisvKiAxNjAweDEyMDAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjAweDEyMDBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzE2Ml8wMDBNLCBNMTYwMFgxMjAwX1I2MF9IU1AsIE0xNjAwWDEyMDBfUjYwX1ZTUCwKKwkgezIxNjAsIDE2MDAsIDE2MDAsIDU2MCwgMTY2NCwgMTkyLCAxMjUwLCAxMjAwLCAxMjAwLCA1MCwgMTIwMSwKKwkgIDN9IH0sCisJe1JFRlJFU0hfNzUsIENMS18yMDJfNTAwTSwgTTE2MDBYMTIwMF9SNzVfSFNQLCBNMTYwMFgxMjAwX1I3NV9WU1AsCisJIHsyMTYwLCAxNjAwLCAxNjAwLCA1NjAsIDE2NjQsIDE5MiwgMTI1MCwgMTIwMCwgMTIwMCwgNTAsIDEyMDEsIDN9IH0KKworfTsKKworLyogMTY4MHgxMDUwIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2ODB4MTA1MFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsICAgIFZULCAgVkEsICBWQlMsIFZCRSwgIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18xNDZfNzYwTSwgTTE2ODB4MTA1MF9SNjBfSFNQLCBNMTY4MHgxMDUwX1I2MF9WU1AsCisJIHsyMjQwLCAxNjgwLCAxNjgwLCA1NjAsIDE3ODQsIDE3NiwgMTA4OSwgMTA1MCwgMTA1MCwgMzksIDEwNTMsCisJICA2fSB9LAorCXtSRUZSRVNIXzc1LCBDTEtfMTg3XzAwME0sIE0xNjgweDEwNTBfUjc1X0hTUCwgTTE2ODB4MTA1MF9SNzVfVlNQLAorCSB7MjI3MiwgMTY4MCwgMTY4MCwgNTkyLCAxODAwLCAxNzYsIDEwOTksIDEwNTAsIDEwNTAsIDQ5LCAxMDUzLCA2fSB9Cit9OworCisvKiAxNjgweDEwNTAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2ODB4MTA1MF9SQltdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCAgICBWVCwgIFZBLCAgVkJTLCBWQkUsICBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTE5XzAwME0sIE0xNjgweDEwNTBfUkJfUjYwX0hTUCwKKwkgTTE2ODB4MTA1MF9SQl9SNjBfVlNQLAorCSB7MTg0MCwgMTY4MCwgMTY4MCwgMTYwLCAxNzI4LCAzMiwgMTA4MCwgMTA1MCwgMTA1MCwgMzAsIDEwNTMsIDZ9IH0KK307CisKKy8qIDE5MjB4MTA4MCAoQ1ZUKSovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTA4MFtdID0geworCS8qcl9yYXRlLHZjbGssaHNwLHZzcCAqLworCS8qSFQsICBIQSwgICBIQlMsICBIQkUsIEhTUywgIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTcyXzc5OE0sIE0xOTIwWDEwODBfUjYwX0hTUCwgTTE5MjBYMTA4MF9SNjBfVlNQLAorCSB7MjU3NiwgMTkyMCwgMTkyMCwgNjU2LCAyMDQ4LCAyMDAsIDExMjAsIDEwODAsIDEwODAsIDQwLCAxMDgzLCA1fSB9Cit9OworCisvKiAxOTIweDEwODAgKENWVCB3aXRoIFJlZHVjZSBCbGFua2luZykgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxMDgwX1JCW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzEzOF80MDBNLCBNMTkyMFgxMDgwX1JCX1I2MF9IU1AsCisJIE0xOTIwWDEwODBfUkJfUjYwX1ZTUCwKKwkgezIwODAsIDE5MjAsIDE5MjAsIDE2MCwgMTk2OCwgMzIsIDExMTEsIDEwODAsIDEwODAsIDMxLCAxMDgzLCA1fSB9Cit9OworCisvKiAxOTIweDE0NDAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xOTIweDE0NDBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzIzNF8wMDBNLCBNMTkyMFgxNDQwX1I2MF9IU1AsIE0xOTIwWDE0NDBfUjYwX1ZTUCwKKwkgezI2MDAsIDE5MjAsIDE5MjAsIDY4MCwgMjA0OCwgMjA4LCAxNTAwLCAxNDQwLCAxNDQwLCA2MCwgMTQ0MSwKKwkgIDN9IH0sCisJe1JFRlJFU0hfNzUsIENMS18yOTdfNTAwTSwgTTE5MjBYMTQ0MF9SNzVfSFNQLCBNMTkyMFgxNDQwX1I3NV9WU1AsCisJIHsyNjQwLCAxOTIwLCAxOTIwLCA3MjAsIDIwNjQsIDIyNCwgMTUwMCwgMTQ0MCwgMTQ0MCwgNjAsIDE0NDEsIDN9IH0KK307CisKKy8qIDE0MDB4MTA1MCAoQ1ZUKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNDAweDEwNTBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCAgSFNTLCBIU0UsICAgVlQsICBWQSwgIFZCUywgVkJFLCAgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzEyMV83NTBNLCBNMTQwMFgxMDUwX1I2MF9IU1AsIE0xNDAwWDEwNTBfUjYwX1ZTUCwKKwkgezE4NjQsIDE0MDAsIDE0MDAsIDQ2NCwgMTQ4OCwgMTQ0LCAxMDg5LCAxMDUwLCAxMDUwLCAzOSwgMTA1MywKKwkgIDR9IH0sCisJe1JFRlJFU0hfNzUsIENMS18xNTZfMDAwTSwgTTE0MDBYMTA1MF9SNzVfSFNQLCBNMTQwMFgxMDUwX1I3NV9WU1AsCisJIHsxODk2LCAxNDAwLCAxNDAwLCA0OTYsIDE1MDQsIDE0NCwgMTA5OSwgMTA1MCwgMTA1MCwgNDksIDEwNTMsIDR9IH0KK307CisKKy8qIDE0MDB4MTA1MCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQwMHgxMDUwX1JCW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgIEhTUywgSFNFLCAgIFZULCAgVkEsICBWQlMsIFZCRSwgIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18xMDFfMDAwTSwgTTE0MDBYMTA1MF9SQl9SNjBfSFNQLAorCSBNMTQwMFgxMDUwX1JCX1I2MF9WU1AsCisJIHsxNTYwLCAxNDAwLCAxNDAwLCAxNjAsIDE0NDgsIDMyLCAxMDgwLCAxMDUwLCAxMDUwLCAzMCwgMTA1MywgNH0gfQorfTsKKworLyogOTYweDYwMCAoQ1ZUKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE05NjB4NjAwW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzQ1XzI1ME0sIE05NjBYNjAwX1I2MF9IU1AsIE05NjBYNjAwX1I2MF9WU1AsCisJIHsxMjE2LCA5NjAsIDk2MCwgMjU2LCA5OTIsIDk2LCA2MjQsIDYwMCwgNjAwLCAyNCwgNjAzLCA2fSB9Cit9OworCisvKiAxMDAweDYwMCAoR1RGKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDAweDYwMFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS180OF8wMDBNLCBNMTAwMFg2MDBfUjYwX0hTUCwgTTEwMDBYNjAwX1I2MF9WU1AsCisJIHsxMjg4LCAxMDAwLCAxMDAwLCAyODgsIDEwNDAsIDEwNCwgNjIyLCA2MDAsIDYwMCwgMjIsIDYwMSwgM30gfQorfTsKKworLyogMTAyNHg1NzYgKEdURikgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTAyNHg1NzZbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfNDZfOTk2TSwgTTEwMjRYNTc2X1I2MF9IU1AsIE0xMDI0WDU3Nl9SNjBfVlNQLAorCSB7MTMxMiwgMTAyNCwgMTAyNCwgMjg4LCAxMDY0LCAxMDQsIDU5NywgNTc2LCA1NzYsIDIxLCA1NzcsIDN9IH0KK307CisKKy8qIDEwODh4NjEyIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwODh4NjEyW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzUyXzk3N00sIE0xMDg4WDYxMl9SNjBfSFNQLCBNMTA4OFg2MTJfUjYwX1ZTUCwKKwkgezEzOTIsIDEwODgsIDEwODgsIDMwNCwgMTEzNiwgMTA0LCA2MzYsIDYxMiwgNjEyLCAyNCwgNjE1LCA1fSB9Cit9OworCisvKiAxMTUyeDcyMCAoQ1ZUKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMTUyeDcyMFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS182Nl83NTBNLCBNMTE1Mlg3MjBfUjYwX0hTUCwgTTExNTJYNzIwX1I2MF9WU1AsCisJIHsxNDg4LCAxMTUyLCAxMTUyLCAzMzYsIDEyMDgsIDExMiwgNzQ4LCA3MjAsIDcyMCwgMjgsIDcyMywgNn0gfQorfTsKKworLyogMTIwMHg3MjAgKEdURikgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTIwMHg3MjBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfNzBfMTU5TSwgTTEyMDBYNzIwX1I2MF9IU1AsIE0xMjAwWDcyMF9SNjBfVlNQLAorCSB7MTU2OCwgMTIwMCwgMTIwMCwgMzY4LCAxMjU2LCAxMjgsIDc0NiwgNzIwLCA3MjAsIDI2LCA3MjEsIDN9IH0KK307CisKKy8qIDEyODB4NjAwIChHVEYpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4NjAwW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsICBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfNjFfNTAwTSwgTTEyODB4NjAwX1I2MF9IU1AsIE0xMjgweDYwMF9SNjBfVlNQLAorCSB7MTY0OCwgMTI4MCwgMTI4MCwgMzY4LCAxMzM2LCAxMjgsIDYyMiwgNjAwLCA2MDAsIDIyLCA2MDEsIDN9IH0KK307CisKKy8qIDEzNjB4NzY4IChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEzNjB4NzY4W10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzg0Xzc1ME0sIE0xMzYwWDc2OF9SNjBfSFNQLCBNMTM2MFg3NjhfUjYwX1ZTUCwKKwkgezE3NzYsIDEzNjAsIDEzNjAsIDQxNiwgMTQzMiwgMTM2LCA3OTgsIDc2OCwgNzY4LCAzMCwgNzcxLCA1fSB9Cit9OworCisvKiAxMzYweDc2OCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTM2MHg3NjhfUkJbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfNzJfMDAwTSwgTTEzNjBYNzY4X1JCX1I2MF9IU1AsCisJIE0xMzYwWDc2OF9SQl9SNjBfVlNQLAorCSB7MTUyMCwgMTM2MCwgMTM2MCwgMTYwLCAxNDA4LCAzMiwgNzkwLCA3NjgsIDc2OCwgMjIsIDc3MSwgNX0gfQorfTsKKworLyogMTM2Nng3NjggKEdURikgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTM2Nng3NjhbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfODVfODYwTSwgTTEzNjhYNzY4X1I2MF9IU1AsIE0xMzY4WDc2OF9SNjBfVlNQLAorCSB7MTgwMCwgMTM2OCwgMTM2OCwgNDMyLCAxNDQwLCAxNDQsIDc5NSwgNzY4LCA3NjgsIDI3LCA3NjksIDN9IH0sCisJe1JFRlJFU0hfNTAsIENMS182OV85MjRNLCBNMTM2OFg3NjhfUjUwX0hTUCwgTTEzNjhYNzY4X1I1MF9WU1AsCisJIHsxNzY4LCAxMzY4LCAxMzY4LCA0MDAsIDE0MjQsIDE0NCwgNzkxLCA3NjgsIDc2OCwgMjMsIDc2OSwgM30gfQorfTsKKworLyogMTQ0MHg5MDAgKENWVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQ0MHg5MDBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTA2XzUwME0sIE0xNDQwWDkwMF9SNjBfSFNQLCBNMTQ0MFg5MDBfUjYwX1ZTUCwKKwkgezE5MDQsIDE0NDAsIDE0NDAsIDQ2NCwgMTUyMCwgMTUyLCA5MzQsIDkwMCwgOTAwLCAzNCwgOTAzLCA2fSB9LAorCXtSRUZSRVNIXzc1LCBDTEtfMTM2XzcwME0sIE0xNDQwWDkwMF9SNzVfSFNQLCBNMTQ0MFg5MDBfUjc1X1ZTUCwKKwkgezE5MzYsIDE0NDAsIDE0NDAsIDQ5NiwgMTUzNiwgMTUyLCA5NDIsIDkwMCwgOTAwLCA0MiwgOTAzLCA2fSB9Cit9OworCisvKiAxNDQweDkwMCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQ0MHg5MDBfUkJbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfODhfNzUwTSwgTTE0NDBYOTAwX1JCX1I2MF9IU1AsCisJIE0xNDQwWDkwMF9SQl9SNjBfVlNQLAorCSB7MTYwMCwgMTQ0MCwgMTQ0MCwgMTYwLCAxNDg4LCAzMiwgOTI2LCA5MDAsIDkwMCwgMjYsIDkwMywgNn0gfQorfTsKKworLyogMTYwMHg5MDAgKENWVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTYwMHg5MDBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTE4Xzg0ME0sIE0xNjAwWDkwMF9SNjBfSFNQLCBNMTYwMFg5MDBfUjYwX1ZTUCwKKwkgezIxMTIsIDE2MDAsIDE2MDAsIDUxMiwgMTY4OCwgMTY4LCA5MzQsIDkwMCwgOTAwLCAzNCwgOTAzLCA1fSB9Cit9OworCisvKiAxNjAweDkwMCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTYwMHg5MDBfUkJbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICB2Y2xrLCAgICAgICAgICAgaHNwLCAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS185N183NTBNLCBNMTYwMFg5MDBfUkJfUjYwX0hTUCwKKwkgTTE2MDBYOTAwX1JCX1I2MF9WU1AsCisJIHsxNzYwLCAxNjAwLCAxNjAwLCAxNjAsIDE2NDgsIDMyLCA5MjYsIDkwMCwgOTAwLCAyNiwgOTAzLCA1fSB9Cit9OworCisvKiAxNjAweDEwMjQgKEdURikgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTYwMHgxMDI0W10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgIEhTUywgSFNFLCAgIFZULCAgVkEsICBWQlMsIFZCRSwgIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18xMzZfNzAwTSwgTTE2MDBYMTAyNF9SNjBfSFNQLCBNMTYwMFgxMDI0X1I2MF9WU1AsCisJIHsyMTQ0LCAxNjAwLCAxNjAwLCA1NDQsIDE3MDQsIDE2OCwgMTA2MCwgMTAyNCwgMTAyNCwgMzYsIDEwMjUsIDN9IH0KK307CisKKy8qIDE3OTJ4MTM0NCAoRE1UKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNzkyeDEzNDRbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCAgSFNTLCBIU0UsICAgVlQsICBWQSwgIFZCUywgVkJFLCAgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzIwNF8wMDBNLCBNMTc5MngxMzQ0X1I2MF9IU1AsIE0xNzkyeDEzNDRfUjYwX1ZTUCwKKwkgezI0NDgsIDE3OTIsIDE3OTIsIDY1NiwgMTkyMCwgMjAwLCAxMzk0LCAxMzQ0LCAxMzQ0LCA1MCwgMTM0NSwgM30gfQorfTsKKworLyogMTg1NngxMzkyIChETVQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE4NTZ4MTM5MltdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsICBIU1MsIEhTRSwgICBWVCwgIFZBLCAgVkJTLCBWQkUsICBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMjE4XzUwME0sIE0xODU2eDEzOTJfUjYwX0hTUCwgTTE4NTZ4MTM5Ml9SNjBfVlNQLAorCSB7MjUyOCwgMTg1NiwgMTg1NiwgNjcyLCAxOTUyLCAyMjQsIDE0MzksIDEzOTIsIDEzOTIsIDQ3LCAxMzkzLCAzfSB9Cit9OworCisvKiAxOTIweDEyMDAgKENWVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxMjAwW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzE5M18yOTVNLCBNMTkyMFgxMjAwX1I2MF9IU1AsIE0xOTIwWDEyMDBfUjYwX1ZTUCwKKwkgezI1OTIsIDE5MjAsIDE5MjAsIDY3MiwgMjA1NiwgMjAwLCAxMjQ1LCAxMjAwLCAxMjAwLCA0NSwgMTIwMywgNn0gfQorfTsKKworLyogMTkyMHgxMjAwIChDVlQgd2l0aCBSZWR1Y2UgQmxhbmtpbmcpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTIwMF9SQltdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18xNTNfOTIwTSwgTTE5MjBYMTIwMF9SQl9SNjBfSFNQLAorCSBNMTkyMFgxMjAwX1JCX1I2MF9WU1AsCisJIHsyMDgwLCAxOTIwLCAxOTIwLCAxNjAsIDE5NjgsIDMyLCAxMjM1LCAxMjAwLCAxMjAwLCAzNSwgMTIwMywgNn0gfQorfTsKKworLyogMjA0OHgxNTM2IChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTIwNDh4MTUzNltdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsICBIU1MsIEhTRSwgICBWVCwgIFZBLCAgVkJTLCBWQkUsICBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMjY3XzI1ME0sIE0yMDQ4eDE1MzZfUjYwX0hTUCwgTTIwNDh4MTUzNl9SNjBfVlNQLAorCSB7MjgwMCwgMjA0OCwgMjA0OCwgNzUyLCAyMjAwLCAyMjQsIDE1OTIsIDE1MzYsIDE1MzYsIDU2LCAxNTM5LCA0fSB9Cit9OworCisvKiBWaWRlbyBNb2RlIFRhYmxlICovCisvKiBzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgeyovCisvKiAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVJbmRleDsqLworLyogIHN0cnVjdCBjcnRfbW9kZV90YWJsZSAgICAgICAgICAgICAqY3J0YzsqLworLyogIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2FycmF5OyovCisvKiB9OyovCitzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgQ0xFMjY2TW9kZXNbXSA9IHsKKwkvKiBEaXNwbGF5IDogNDgweDY0MCAoR1RGKSAqLworCXtWSUFfUkVTXzQ4MFg2NDAsIENSVE00ODB4NjQwLCBBUlJBWV9TSVpFKENSVE00ODB4NjQwKX0sCisKKwkvKiBEaXNwbGF5IDogNjQweDQ4MCAqLworCXtWSUFfUkVTXzY0MFg0ODAsIENSVE02NDB4NDgwLCBBUlJBWV9TSVpFKENSVE02NDB4NDgwKX0sCisKKwkvKiBEaXNwbGF5IDogNzIweDQ4MCAoR1RGKSAqLworCXtWSUFfUkVTXzcyMFg0ODAsIENSVE03MjB4NDgwLCBBUlJBWV9TSVpFKENSVE03MjB4NDgwKX0sCisKKwkvKiBEaXNwbGF5IDogNzIweDU3NiAoR1RGKSAqLworCXtWSUFfUkVTXzcyMFg1NzYsIENSVE03MjB4NTc2LCBBUlJBWV9TSVpFKENSVE03MjB4NTc2KX0sCisKKwkvKiBEaXNwbGF5IDogODAweDYwMCAqLworCXtWSUFfUkVTXzgwMFg2MDAsIENSVE04MDB4NjAwLCBBUlJBWV9TSVpFKENSVE04MDB4NjAwKX0sCisKKwkvKiBEaXNwbGF5IDogODAweDQ4MCAoQ1ZUKSAqLworCXtWSUFfUkVTXzgwMFg0ODAsIENSVE04MDB4NDgwLCBBUlJBWV9TSVpFKENSVE04MDB4NDgwKX0sCisKKwkvKiBEaXNwbGF5IDogODQ4eDQ4MCAoQ1ZUKSAqLworCXtWSUFfUkVTXzg0OFg0ODAsIENSVE04NDh4NDgwLCBBUlJBWV9TSVpFKENSVE04NDh4NDgwKX0sCisKKwkvKiBEaXNwbGF5IDogODUyeDQ4MCAoR1RGKSAqLworCXtWSUFfUkVTXzg1Nlg0ODAsIENSVE04NTJ4NDgwLCBBUlJBWV9TSVpFKENSVE04NTJ4NDgwKX0sCisKKwkvKiBEaXNwbGF5IDogMTAyNHg1MTIgKEdURikgKi8KKwl7VklBX1JFU18xMDI0WDUxMiwgQ1JUTTEwMjR4NTEyLCBBUlJBWV9TSVpFKENSVE0xMDI0eDUxMil9LAorCisJLyogRGlzcGxheSA6IDEwMjR4NjAwICovCisJe1ZJQV9SRVNfMTAyNFg2MDAsIENSVE0xMDI0eDYwMCwgQVJSQVlfU0laRShDUlRNMTAyNHg2MDApfSwKKworCS8qIERpc3BsYXkgOiAxMDI0eDU3NiAoR1RGKSAqLworCS8qeyBWSUFfUkVTXzEwMjRYNTc2LCBDUlRNMTAyNHg1NzYsIEFSUkFZX1NJWkUoQ1JUTTEwMjR4NTc2KX0sICovCisKKwkvKiBEaXNwbGF5IDogMTAyNHg3NjggKi8KKwl7VklBX1JFU18xMDI0WDc2OCwgQ1JUTTEwMjR4NzY4LCBBUlJBWV9TSVpFKENSVE0xMDI0eDc2OCl9LAorCisJLyogRGlzcGxheSA6IDExNTJ4ODY0ICovCisJe1ZJQV9SRVNfMTE1Mlg4NjQsIENSVE0xMTUyeDg2NCwgQVJSQVlfU0laRShDUlRNMTE1Mng4NjQpfSwKKworCS8qIERpc3BsYXkgOiAxMjgweDc2OCAoR1RGKSAqLworCXtWSUFfUkVTXzEyODBYNzY4LCBDUlRNMTI4MHg3NjgsIEFSUkFZX1NJWkUoQ1JUTTEyODB4NzY4KX0sCisKKwkvKiBEaXNwbGF5IDogOTYweDYwMCAoQ1ZUKSAqLworCXtWSUFfUkVTXzk2MFg2MDAsIENSVE05NjB4NjAwLCBBUlJBWV9TSVpFKENSVE05NjB4NjAwKX0sCisKKwkvKiBEaXNwbGF5IDogMTAwMHg2MDAgKEdURikgKi8KKwl7VklBX1JFU18xMDAwWDYwMCwgQ1JUTTEwMDB4NjAwLCBBUlJBWV9TSVpFKENSVE0xMDAweDYwMCl9LAorCisJLyogRGlzcGxheSA6IDEwMjR4NTc2IChHVEYpICovCisJe1ZJQV9SRVNfMTAyNFg1NzYsIENSVE0xMDI0eDU3NiwgQVJSQVlfU0laRShDUlRNMTAyNHg1NzYpfSwKKworCS8qIERpc3BsYXkgOiAxMDg4eDYxMiAoR1RGKSAqLworCXtWSUFfUkVTXzEwODhYNjEyLCBDUlRNMTA4OHg2MTIsIEFSUkFZX1NJWkUoQ1JUTTEwODh4NjEyKX0sCisKKwkvKiBEaXNwbGF5IDogMTE1Mng3MjAgKENWVCkgKi8KKwl7VklBX1JFU18xMTUyWDcyMCwgQ1JUTTExNTJ4NzIwLCBBUlJBWV9TSVpFKENSVE0xMTUyeDcyMCl9LAorCisJLyogRGlzcGxheSA6IDEyMDB4NzIwIChHVEYpICovCisJe1ZJQV9SRVNfMTIwMFg3MjAsIENSVE0xMjAweDcyMCwgQVJSQVlfU0laRShDUlRNMTIwMHg3MjApfSwKKworCS8qIERpc3BsYXkgOiAxMjgweDYwMCAoR1RGKSAqLworCXtWSUFfUkVTXzEyODBYNjAwLCBDUlRNMTI4MHg2MDAsIEFSUkFZX1NJWkUoQ1JUTTEyODB4NjAwKX0sCisKKwkvKiBEaXNwbGF5IDogMTI4MHg4MDAgKENWVCkgKi8KKwl7VklBX1JFU18xMjgwWDgwMCwgQ1JUTTEyODB4ODAwLCBBUlJBWV9TSVpFKENSVE0xMjgweDgwMCl9LAorCisJLyogRGlzcGxheSA6IDEyODB4ODAwIChHVEYpICovCisJLyp7IE0xMjgweDgwMCwgQ1JUTTEyODB4ODAwLCBBUlJBWV9TSVpFKENSVE0xMjgweDgwMCl9LCAqLworCisJLyogRGlzcGxheSA6IDEyODB4OTYwICovCisJe1ZJQV9SRVNfMTI4MFg5NjAsIENSVE0xMjgweDk2MCwgQVJSQVlfU0laRShDUlRNMTI4MHg5NjApfSwKKworCS8qIERpc3BsYXkgOiAxMjgweDEwMjQgKi8KKwl7VklBX1JFU18xMjgwWDEwMjQsIENSVE0xMjgweDEwMjQsIEFSUkFZX1NJWkUoQ1JUTTEyODB4MTAyNCl9LAorCisJLyogRGlzcGxheSA6IDEzNjB4NzY4IChDVlQpICovCisJe1ZJQV9SRVNfMTM2MFg3NjgsIENSVE0xMzYweDc2OCwgQVJSQVlfU0laRShDUlRNMTM2MHg3NjgpfSwKKworCS8qIERpc3BsYXkgOiAxMzYweDc2OCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KKwl7VklBX1JFU18xMzYwWDc2OF9SQiwgQ1JUTTEzNjB4NzY4X1JCLAorCSBBUlJBWV9TSVpFKENSVE0xMzYweDc2OF9SQil9LAorCisJLyogRGlzcGxheSA6IDEzNjZ4NzY4ICovCisJe1ZJQV9SRVNfMTM2Nlg3NjgsIENSVE0xMzY2eDc2OCwgQVJSQVlfU0laRShDUlRNMTM2Nng3NjgpfSwKKworCS8qIERpc3BsYXkgOiAxMzY4eDc2OCAoR1RGKSAqLworCS8qeyBNMTM2OHg3NjgsQ1JUTTEzNjh4NzY4LEFSUkFZX1NJWkUoQ1JUTTEzNjh4NzY4KX0sICovCisJLyogRGlzcGxheSA6IDEzNjh4NzY4IChHVEYpICovCisJe1ZJQV9SRVNfMTM2OFg3NjgsIENSVE0xMzY4eDc2OCwgQVJSQVlfU0laRShDUlRNMTM2OHg3NjgpfSwKKworCS8qIERpc3BsYXkgOiAxNDQweDkwMCAoQ1ZUKSAqLworCXtWSUFfUkVTXzE0NDBYOTAwLCBDUlRNMTQ0MHg5MDAsIEFSUkFZX1NJWkUoQ1JUTTE0NDB4OTAwKX0sCisKKwkvKiBEaXNwbGF5IDogMTQ0MHg5MDAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCisJe1ZJQV9SRVNfMTQ0MFg5MDBfUkIsIENSVE0xNDQweDkwMF9SQiwKKwkgQVJSQVlfU0laRShDUlRNMTQ0MHg5MDBfUkIpfSwKKworCS8qIERpc3BsYXkgOiAxNDQweDEwNTAgKEdURikgKi8KKwl7VklBX1JFU18xNDQwWDEwNTAsIENSVE0xNDQweDEwNTAsIEFSUkFZX1NJWkUoQ1JUTTE0NDB4MTA1MCl9LAorCisJLyogRGlzcGxheSA6IDE0MDB4MTA1MCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KKwl7VklBX1JFU18xNDAwWDEwNTBfUkIsIENSVE0xNDAweDEwNTBfUkIsCisJIEFSUkFZX1NJWkUoQ1JUTTE0MDB4MTA1MF9SQil9LAorCisJLyogRGlzcGxheSA6IDE2MDB4OTAwIChDVlQpICovCisJe1ZJQV9SRVNfMTYwMFg5MDAsIENSVE0xNjAweDkwMCwgQVJSQVlfU0laRShDUlRNMTYwMHg5MDApfSwKKworCS8qIERpc3BsYXkgOiAxNjAweDkwMCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KKwl7VklBX1JFU18xNjAwWDkwMF9SQiwgQ1JUTTE2MDB4OTAwX1JCLAorCSBBUlJBWV9TSVpFKENSVE0xNjAweDkwMF9SQil9LAorCisJLyogRGlzcGxheSA6IDE2MDB4MTAyNCAoR1RGKSAqLworCXtWSUFfUkVTXzE2MDBYMTAyNCwgQ1JUTTE2MDB4MTAyNCwgQVJSQVlfU0laRShDUlRNMTYwMHgxMDI0KX0sCisKKwkvKiBEaXNwbGF5IDogMTYwMHgxMjAwICovCisJe1ZJQV9SRVNfMTYwMFgxMjAwLCBDUlRNMTYwMHgxMjAwLCBBUlJBWV9TSVpFKENSVE0xNjAweDEyMDApfSwKKworCS8qIERpc3BsYXkgOiAxNjgweDEwNTAgKENWVCkgKi8KKwl7VklBX1JFU18xNjgwWDEwNTAsIENSVE0xNjgweDEwNTAsIEFSUkFZX1NJWkUoQ1JUTTE2ODB4MTA1MCl9LAorCisJLyogRGlzcGxheSA6IDE2ODB4MTA1MCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KKwl7VklBX1JFU18xNjgwWDEwNTBfUkIsIENSVE0xNjgweDEwNTBfUkIsCisJIEFSUkFZX1NJWkUoQ1JUTTE2ODB4MTA1MF9SQil9LAorCisJLyogRGlzcGxheSA6IDE3OTJ4MTM0NCAoRE1UKSAqLworCXtWSUFfUkVTXzE3OTJYMTM0NCwgQ1JUTTE3OTJ4MTM0NCwgQVJSQVlfU0laRShDUlRNMTc5MngxMzQ0KX0sCisKKwkvKiBEaXNwbGF5IDogMTg1NngxMzkyIChETVQpICovCisJe1ZJQV9SRVNfMTg1NlgxMzkyLCBDUlRNMTg1NngxMzkyLCBBUlJBWV9TSVpFKENSVE0xODU2eDEzOTIpfSwKKworCS8qIERpc3BsYXkgOiAxOTIweDE0NDAgKi8KKwl7VklBX1JFU18xOTIwWDE0NDAsIENSVE0xOTIweDE0NDAsIEFSUkFZX1NJWkUoQ1JUTTE5MjB4MTQ0MCl9LAorCisJLyogRGlzcGxheSA6IDIwNDh4MTUzNiAqLworCXtWSUFfUkVTXzIwNDhYMTUzNiwgQ1JUTTIwNDh4MTUzNiwgQVJSQVlfU0laRShDUlRNMjA0OHgxNTM2KX0sCisKKwkvKiBEaXNwbGF5IDogMTI4MHg3MjAgKi8KKwl7VklBX1JFU18xMjgwWDcyMCwgQ1JUTTEyODB4NzIwLCBBUlJBWV9TSVpFKENSVE0xMjgweDcyMCl9LAorCisJLyogRGlzcGxheSA6IDE5MjB4MTA4MCAoQ1ZUKSAqLworCXtWSUFfUkVTXzE5MjBYMTA4MCwgQ1JUTTE5MjB4MTA4MCwgQVJSQVlfU0laRShDUlRNMTkyMHgxMDgwKX0sCisKKwkvKiBEaXNwbGF5IDogMTkyMHgxMDgwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworCXtWSUFfUkVTXzE5MjBYMTA4MF9SQiwgQ1JUTTE5MjB4MTA4MF9SQiwKKwkgQVJSQVlfU0laRShDUlRNMTkyMHgxMDgwX1JCKX0sCisKKwkvKiBEaXNwbGF5IDogMTkyMHgxMjAwIChDVlQpICovCisJe1ZJQV9SRVNfMTkyMFgxMjAwLCBDUlRNMTkyMHgxMjAwLCBBUlJBWV9TSVpFKENSVE0xOTIweDEyMDApfSwKKworCS8qIERpc3BsYXkgOiAxOTIweDEyMDAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCisJe1ZJQV9SRVNfMTkyMFgxMjAwX1JCLCBDUlRNMTkyMHgxMjAwX1JCLAorCSBBUlJBWV9TSVpFKENSVE0xOTIweDEyMDBfUkIpfSwKKworCS8qIERpc3BsYXkgOiAxNDAweDEwNTAgKENWVCkgKi8KKwl7VklBX1JFU18xNDAwWDEwNTAsIENSVE0xNDAweDEwNTAsIEFSUkFZX1NJWkUoQ1JUTTE0MDB4MTA1MCl9Cit9Oworc3RydWN0IGNydF9tb2RlX3RhYmxlIENFQU0xMjgweDcyMFtdID0geworCXtSRUZSRVNIXzYwLCBDTEtfNzRfMjcwTSwgTTEyODBYNzIwX0NFQV9SNjBfSFNQLAorCSBNMTI4MFg3MjBfQ0VBX1I2MF9WU1AsCisJIC8qIEhULCAgICBIQSwgICBIQlMsICBIQkUsICBIU1MsIEhTRSwgIFZULCAgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJIHsxNjUwLCAxMjgwLCAxMjgwLCAzNzAsIDEzOTAsIDQwLCA3NTAsIDcyMCwgNzIwLCAzMCwgNzI1LCA1fSB9Cit9Oworc3RydWN0IGNydF9tb2RlX3RhYmxlIENFQU0xOTIweDEwODBbXSA9IHsKKwl7UkVGUkVTSF82MCwgQ0xLXzE0OF81MDBNLCBNMTkyMFgxMDgwX0NFQV9SNjBfSFNQLAorCSBNMTkyMFgxMDgwX0NFQV9SNjBfVlNQLAorCSAvKiBIVCwgICAgSEEsICAgSEJTLCAgSEJFLCAgSFNTLCBIU0UsICBWVCwgIFZBLCBWQlMsIFZCRSwgIFZTUywgVlNFICovCisJIHsyMjAwLCAxOTIwLCAxOTIwLCAzMDAsIDIwMDgsIDQ0LCAxMTI1LCAxMDgwLCAxMDgwLCA0NSwgMTA4NCwgNX0gfQorfTsKK3N0cnVjdCBWaWRlb01vZGVUYWJsZSBDRUFfSERNSV9Nb2Rlc1tdID0geworCS8qIERpc3BsYXkgOiAxMjgweDcyMCAqLworCXtWSUFfUkVTXzEyODBYNzIwLCBDRUFNMTI4MHg3MjAsIEFSUkFZX1NJWkUoQ0VBTTEyODB4NzIwKX0sCisJe1ZJQV9SRVNfMTkyMFgxMDgwLCBDRUFNMTkyMHgxMDgwLCBBUlJBWV9TSVpFKENFQU0xOTIweDEwODApfQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTVkZTUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5oCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fVklBTU9ERV9IX18KKyNkZWZpbmUgX19WSUFNT0RFX0hfXworCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisKK3N0cnVjdCBWUElUVGFibGUgeworCXVuc2lnbmVkIGNoYXIgTWlzYzsKKwl1bnNpZ25lZCBjaGFyIFNSW1N0ZFNSXTsKKwl1bnNpZ25lZCBjaGFyIEdSW1N0ZEdSXTsKKwl1bnNpZ25lZCBjaGFyIEFSW1N0ZEFSXTsKK307CisKK3N0cnVjdCBWaWRlb01vZGVUYWJsZSB7CisJaW50IE1vZGVJbmRleDsKKwlzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKmNydGM7CisJaW50IG1vZGVfYXJyYXk7Cit9OworCitzdHJ1Y3QgcGF0Y2hfdGFibGUgeworCWludCBtb2RlX2luZGV4OworCWludCB0YWJsZV9sZW5ndGg7CisJc3RydWN0IGlvX3JlZyAqaW9fcmVnX3RhYmxlOworfTsKKworc3RydWN0IHJlc19tYXBfcmVmcmVzaCB7CisJaW50IGhyZXM7CisJaW50IHZyZXM7CisJaW50IHBpeGNsb2NrOworCWludCB2bW9kZV9yZWZyZXNoOworfTsKKworI2RlZmluZSBOVU1fVE9UQUxfUkVTX01BUF9SRUZSRVNIIEFSUkFZX1NJWkUocmVzX21hcF9yZWZyZXNoX3RibCkKKyNkZWZpbmUgTlVNX1RPVEFMX0NFQV9NT0RFUyAgQVJSQVlfU0laRShDRUFfSERNSV9Nb2RlcykKKyNkZWZpbmUgTlVNX1RPVEFMX0NONDAwX01vZGVYcmVncyBBUlJBWV9TSVpFKENONDAwX01vZGVYcmVncykKKyNkZWZpbmUgTlVNX1RPVEFMX0NONzAwX01vZGVYcmVncyBBUlJBWV9TSVpFKENONzAwX01vZGVYcmVncykKKyNkZWZpbmUgTlVNX1RPVEFMX0tNNDAwX01vZGVYcmVncyBBUlJBWV9TSVpFKEtNNDAwX01vZGVYcmVncykKKyNkZWZpbmUgTlVNX1RPVEFMX0NYNzAwX01vZGVYcmVncyBBUlJBWV9TSVpFKENYNzAwX01vZGVYcmVncykKKyNkZWZpbmUgTlVNX1RPVEFMX1ZYODAwX01vZGVYcmVncyBBUlJBWV9TSVpFKFZYODAwX01vZGVYcmVncykKKyNkZWZpbmUgTlVNX1RPVEFMX0NMRTI2Nl9Nb2RlWHJlZ3MgQVJSQVlfU0laRShDTEUyNjZfTW9kZVhyZWdzKQorI2RlZmluZSBOVU1fVE9UQUxfUEFUQ0hfTU9ERSBBUlJBWV9TSVpFKHJlc19wYXRjaF90YWJsZSkKKyNkZWZpbmUgTlVNX1RPVEFMX01PREVUQUJMRSBBUlJBWV9TSVpFKENMRTI2Nk1vZGVzKQorCisvKioqKioqKioqKioqKioqKioqKiovCisvKiBNb2RlIFRhYmxlICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKiovCisKKy8qIDQ4MHg2NDAgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTQ4MHg2NDBbMV07CisvKiA2NDB4NDgwKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTY0MHg0ODBbNV07CisvKjcyMHg0ODAgKEdURikqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNNzIweDQ4MFsxXTsKKy8qNzIweDU3NiAoR1RGKSovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE03MjB4NTc2WzFdOworLyogODAweDQ4MCAoQ1ZUKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNODAweDQ4MFsxXTsKKy8qIDgwMHg2MDAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNODAweDYwMFs1XTsKKy8qIDg0OHg0ODAgKENWVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTg0OHg0ODBbMV07CisvKjg1Nng0ODAgKEdURikgY29udmVydCB0byA4NTJ4NDgwKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTg1Mng0ODBbMV07CisvKjEwMjR4NTEyIChHVEYpKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMjR4NTEyWzFdOworLyogMTAyNHg2MDAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTAyNHg2MDBbMV07CisvKiAxMDI0eDc2OCovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDI0eDc2OFs0XTsKKy8qIDExNTJ4ODY0Ki8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTExNTJ4ODY0WzFdOworLyogMTI4MHg3MjAgKEhETUkgNzIwUCkqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTI4MHg3MjBbMl07CisvKjEyODB4NzY4IChHVEYpKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4NzY4WzJdOworLyogMTI4MHg4MDAgKENWVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4ODAwWzFdOworLyoxMjgweDk2MCovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDk2MFsxXTsKKy8qIDEyODB4MTAyNCovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDEwMjRbM107CisvKiAxMzY4eDc2OCAoR1RGKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTM2OHg3NjhbMV07CisvKjE0NDB4MTA1MCAoR1RGKSovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNDQweDEwNTBbMV07CisvKiAxNjAweDEyMDAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTYwMHgxMjAwWzJdOworLyogMTY4MHgxMDUwIChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjgweDEwNTBbMl07CisvKiAxNjgweDEwNTAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjgweDEwNTBfUkJbMV07CisvKiAxOTIweDEwODAgKENWVCkqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxMDgwWzFdOworLyogMTkyMHgxMDgwIChDVlQgd2l0aCBSZWR1Y2UgQmxhbmtpbmcpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xOTIweDEwODBfUkJbMV07CisvKiAxOTIweDE0NDAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxNDQwWzJdOworLyogMTQwMHgxMDUwIChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNDAweDEwNTBbMl07CisvKiAxNDAweDEwNTAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNDAweDEwNTBfUkJbMV07CisvKiA5NjB4NjAwIChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE05NjB4NjAwWzFdOworLyogMTAwMHg2MDAgKEdURikgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMDB4NjAwWzFdOworLyogMTAyNHg1NzYgKEdURikgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMjR4NTc2WzFdOworLyogMTA4OHg2MTIgKENWVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwODh4NjEyWzFdOworLyogMTE1Mng3MjAgKENWVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTExNTJ4NzIwWzFdOworLyogMTIwMHg3MjAgKEdURikgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyMDB4NzIwWzFdOworLyogMTI4MHg2MDAgKEdURikgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4NjAwWzFdOworLyogMTM2MHg3NjggKENWVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEzNjB4NzY4WzFdOworLyogMTM2MHg3NjggKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMzYweDc2OF9SQlsxXTsKKy8qIDEzNjZ4NzY4IChHVEYpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMzY2eDc2OFsyXTsKKy8qIDE0NDB4OTAwIChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNDQweDkwMFsyXTsKKy8qIDE0NDB4OTAwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQ0MHg5MDBfUkJbMV07CisvKiAxNjAweDkwMCAoQ1ZUKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTYwMHg5MDBbMV07CisvKiAxNjAweDkwMCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4OTAwX1JCWzFdOworLyogMTYwMHgxMDI0IChHVEYpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjAweDEwMjRbMV07CisvKiAxNzkyeDEzNDQgKERNVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE3OTJ4MTM0NFsxXTsKKy8qIDE4NTZ4MTM5MiAoRE1UKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTg1NngxMzkyWzFdOworLyogMTkyMHgxMjAwIChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xOTIweDEyMDBbMV07CisvKiAxOTIweDEyMDAgKENWVCB3aXRoIFJlZHVjZSBCbGFua2luZykgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTIwMF9SQlsxXTsKKy8qIDIwNDh4MTUzNiAoQ1ZUKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMjA0OHgxNTM2WzFdOworZXh0ZXJuIHN0cnVjdCBWaWRlb01vZGVUYWJsZSBDTEUyNjZNb2Rlc1s0N107CitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENFQU0xMjgweDcyMFsxXTsKK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ0VBTTE5MjB4MTA4MFsxXTsKK2V4dGVybiBzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgQ0VBX0hETUlfTW9kZXNbMl07CisKK2V4dGVybiBzdHJ1Y3QgcmVzX21hcF9yZWZyZXNoIHJlc19tYXBfcmVmcmVzaF90YmxbNjFdOworZXh0ZXJuIHN0cnVjdCBpb19yZWcgQ040MDBfTW9kZVhyZWdzWzUyXTsKK2V4dGVybiBzdHJ1Y3QgaW9fcmVnIENONzAwX01vZGVYcmVnc1s2Nl07CitleHRlcm4gc3RydWN0IGlvX3JlZyBLTTQwMF9Nb2RlWHJlZ3NbNTVdOworZXh0ZXJuIHN0cnVjdCBpb19yZWcgQ1g3MDBfTW9kZVhyZWdzWzU4XTsKK2V4dGVybiBzdHJ1Y3QgaW9fcmVnIFZYODAwX01vZGVYcmVnc1s1OF07CitleHRlcm4gc3RydWN0IGlvX3JlZyBDTEUyNjZfTW9kZVhyZWdzWzMyXTsKK2V4dGVybiBzdHJ1Y3QgaW9fcmVnIFBNMTAyNHg3NjhbMl07CitleHRlcm4gc3RydWN0IHBhdGNoX3RhYmxlIHJlc19wYXRjaF90YWJsZVsxXTsKK2V4dGVybiBzdHJ1Y3QgVlBJVFRhYmxlIFZQSVQ7CisjZW5kaWYgLyogX19WSUFNT0RFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdnQxNjM2LmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92dDE2MzYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjJhOWY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdnQxNjM2LmMKQEAgLTAsMCArMSwzMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKKwordTggdmlhZmJfZ3Bpb19pMmNfcmVhZF9sdmRzKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkqcGx2ZHNfc2V0dGluZ19pbmZvLCBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8sCisJdTggaW5kZXgpCit7CisJdTggZGF0YTsKKworCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9IHBsdmRzX2NoaXBfaW5mby0+aTJjX3BvcnQ7CisJdmlhZmJfaTJjX3JlYWRieXRlKHBsdmRzX2NoaXBfaW5mby0+bHZkc19jaGlwX3NsYXZlX2FkZHIsIGluZGV4LCAmZGF0YSk7CisKKwlyZXR1cm4gZGF0YTsKK30KKwordm9pZCB2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJICAgICAgKnBsdmRzX3NldHRpbmdfaW5mbywgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbgorCQkJICAgICAgKnBsdmRzX2NoaXBfaW5mbywgc3RydWN0IElPREFUQSBpb19kYXRhKQoreworCWludCBpbmRleCwgZGF0YTsKKworCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9IHBsdmRzX2NoaXBfaW5mby0+aTJjX3BvcnQ7CisKKwlpbmRleCA9IGlvX2RhdGEuSW5kZXg7CisJZGF0YSA9IHZpYWZiX2dwaW9faTJjX3JlYWRfbHZkcyhwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbywKKwkJaW5kZXgpOworCWRhdGEgPSAoZGF0YSAmICh+aW9fZGF0YS5NYXNrKSkgfCBpb19kYXRhLkRhdGE7CisKKwl2aWFmYl9pMmNfd3JpdGVieXRlKHBsdmRzX2NoaXBfaW5mby0+bHZkc19jaGlwX3NsYXZlX2FkZHIsIGluZGV4LCBkYXRhKTsKK30KKwordm9pZCB2aWFmYl9pbml0X2x2ZHNfdnQxNjM2KHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkqcGx2ZHNfc2V0dGluZ19pbmZvLCBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pCit7CisJaW50IHJlZ19udW0sIGk7CisKKwkvKiBDb21tb24gc2V0dGluZ3M6ICovCisJcmVnX251bSA9IEFSUkFZX1NJWkUoQ09NTU9OX0lOSVRfVEJMX1ZUMTYzNik7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVnX251bTsgaSsrKSB7CisJCXZpYWZiX2dwaW9faTJjX3dyaXRlX21hc2tfbHZkcyhwbHZkc19zZXR0aW5nX2luZm8sCisJCQkJCSBwbHZkc19jaGlwX2luZm8sCisJCQkJCSBDT01NT05fSU5JVF9UQkxfVlQxNjM2W2ldKTsKKwl9CisKKwkvKiBJbnB1dCBEYXRhIE1vZGUgU2VsZWN0ICovCisJaWYgKHBsdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSkgeworCQl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMocGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCQkgcGx2ZHNfY2hpcF9pbmZvLAorCQkJCQkgRFVBTF9DSEFOTkVMX0VOQUJMRV9UQkxfVlQxNjM2WzBdKTsKKwl9IGVsc2UgeworCQl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMocGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCQkgcGx2ZHNfY2hpcF9pbmZvLAorCQkJCQkgU0lOR0xFX0NIQU5ORUxfRU5BQkxFX1RCTF9WVDE2MzZbMF0pOworCX0KKworCWlmIChwbHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZykgeworCQl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMocGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCQkgcGx2ZHNfY2hpcF9pbmZvLAorCQkJCQkgRElUSEVSSU5HX0VOQUJMRV9UQkxfVlQxNjM2WzBdKTsKKwl9IGVsc2UgeworCQl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMocGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCQkgcGx2ZHNfY2hpcF9pbmZvLAorCQkJCQkgRElUSEVSSU5HX0RJU0FCTEVfVEJMX1ZUMTYzNlswXSk7CisJfQorfQorCit2b2lkIHZpYWZiX2VuYWJsZV9sdmRzX3Z0MTYzNihzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkqcGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCisJdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzKHBsdmRzX3NldHRpbmdfaW5mbywgcGx2ZHNfY2hpcF9pbmZvLAorCQkJCSBWRERfT05fVEJMX1ZUMTYzNlswXSk7CisKKwkvKiBQYWQgb246ICovCisJc3dpdGNoIChwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpIHsKKwljYXNlIElOVEVSRkFDRV9EVlAwOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFFLCBWSUFTUiwgMHhDMCwgMHhDMCk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfRFZQMToKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxRSwgVklBU1IsIDB4MzAsIDB4MzApOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSU5URVJGQUNFX0RGUF9MT1c6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDAzLCAweDAzKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9ERlBfSElHSDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDB4MDMsIDB4MEMpOworCQkJYnJlYWs7CisJCX0KKworCX0KK30KKwordm9pZCB2aWFmYl9kaXNhYmxlX2x2ZHNfdnQxNjM2KHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSAqcGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbykKK3sKKworCXZpYWZiX2dwaW9faTJjX3dyaXRlX21hc2tfbHZkcyhwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbywKKwkJCQkgVkREX09GRl9UQkxfVlQxNjM2WzBdKTsKKworCS8qIFBhZCBvZmY6ICovCisJc3dpdGNoIChwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpIHsKKwljYXNlIElOVEVSRkFDRV9EVlAwOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFFLCBWSUFTUiwgMHgwMCwgMHhDMCk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfRFZQMToKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxRSwgVklBU1IsIDB4MDAsIDB4MzApOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSU5URVJGQUNFX0RGUF9MT1c6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDAwLCAweDAzKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9ERlBfSElHSDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDB4MDAsIDB4MEMpOworCQkJYnJlYWs7CisJCX0KKworCX0KK30KKworYm9vbCB2aWFmYl9sdmRzX2lkZW50aWZ5X3Z0MTYzNih2b2lkKQoreworCXU4IEJ1ZmZlclsyXTsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2x2ZHNfaWRlbnRpZnlfdnQxNjM2LlxuIik7CisKKwkvKiBTZW5zZSBWVDE2MzYgTFZEUyBUcmFuc21pdGVyICovCisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfc2xhdmVfYWRkciA9CisJVlQxNjM2X0xWRFNfSTJDX0FERFI7CisKKwkvKiBDaGVjayB2ZW5kb3IgSUQgZmlyc3Q6ICovCisJdmlhZmJfaTJjX3JlYWRieXRlKCh1OCkgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby4KKwlsdmRzX2NoaXBfc2xhdmVfYWRkciwKKwkJICAgIDB4MDAsICZCdWZmZXJbMF0pOworCXZpYWZiX2kyY19yZWFkYnl0ZSgodTgpIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8uCisJCWx2ZHNfY2hpcF9zbGF2ZV9hZGRyLAorCQkgICAgMHgwMSwgJkJ1ZmZlclsxXSk7CisKKwlpZiAoISgoQnVmZmVyWzBdID09IDB4MDYpICYmIChCdWZmZXJbMV0gPT0gMHgxMSkpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBDaGVjayBDaGlwIElEOiAqLworCXZpYWZiX2kyY19yZWFkYnl0ZSgodTgpIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8uCisJbHZkc19jaGlwX3NsYXZlX2FkZHIsCisJCSAgICAweDAyLCAmQnVmZmVyWzBdKTsKKwl2aWFmYl9pMmNfcmVhZGJ5dGUoKHU4KSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLgorCQlsdmRzX2NoaXBfc2xhdmVfYWRkciwKKwkJICAgIDB4MDMsICZCdWZmZXJbMV0pOworCWlmICgoQnVmZmVyWzBdID09IDB4NDUpICYmIChCdWZmZXJbMV0gPT0gMHgzMykpIHsKKwkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSA9CisJCQlWVDE2MzZfTFZEUzsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IGdldF9jbGtfcmFuZ2VfaW5kZXgodTMyIENsaykKK3sKKwlpZiAoQ2xrIDwgRFBBX0NMS18zME0pCisJCXJldHVybiBEUEFfQ0xLX1JBTkdFXzMwTTsKKwllbHNlIGlmIChDbGsgPCBEUEFfQ0xLXzUwTSkKKwkJcmV0dXJuIERQQV9DTEtfUkFOR0VfMzBfNTBNOworCWVsc2UgaWYgKENsayA8IERQQV9DTEtfNzBNKQorCQlyZXR1cm4gRFBBX0NMS19SQU5HRV81MF83ME07CisJZWxzZSBpZiAoQ2xrIDwgRFBBX0NMS18xMDBNKQorCQlyZXR1cm4gRFBBX0NMS19SQU5HRV83MF8xMDBNOworCWVsc2UgaWYgKENsayA8IERQQV9DTEtfMTUwTSkKKwkJcmV0dXJuIERQQV9DTEtfUkFOR0VfMTAwXzE1ME07CisJZWxzZQorCQlyZXR1cm4gRFBBX0NMS19SQU5HRV8xNTBNOworfQorCitzdGF0aWMgaW50IGdldF9sdmRzX2RwYV9zZXR0aW5nX2luZGV4KGludCBwYW5lbF9zaXplX2lkLAorCQkJICAgICBzdHJ1Y3QgVlQxNjM2X0RQQV9TRVRUSU5HICpwX3Z0MTYzNl9kcGFzZXR0aW5nX3RibCwKKwkJCSAgICAgICBpbnQgdGJsX3NpemUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGJsX3NpemU7IGkrKykgeworCQlpZiAocGFuZWxfc2l6ZV9pZCA9PSBwX3Z0MTYzNl9kcGFzZXR0aW5nX3RibC0+UGFuZWxTaXplSUQpCisJCQlyZXR1cm4gaTsKKworCQlwX3Z0MTYzNl9kcGFzZXR0aW5nX3RibCsrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfZHBhX3Z0MTYzNihzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJKnBsdmRzX3NldHRpbmdfaW5mbywgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvLAorCQkgICAgc3RydWN0IFZUMTYzNl9EUEFfU0VUVElORyAqcF92dDE2MzZfZHBhX3NldHRpbmcpCit7CisJc3RydWN0IElPREFUQSBpb19kYXRhOworCisJaW9fZGF0YS5JbmRleCA9IDB4MDk7CisJaW9fZGF0YS5NYXNrID0gMHgxRjsKKwlpb19kYXRhLkRhdGEgPSBwX3Z0MTYzNl9kcGFfc2V0dGluZy0+Q0xLX1NFTF9TVDE7CisJdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzKHBsdmRzX3NldHRpbmdfaW5mbywKKwkJcGx2ZHNfY2hpcF9pbmZvLCBpb19kYXRhKTsKKworCWlvX2RhdGEuSW5kZXggPSAweDA4OworCWlvX2RhdGEuTWFzayA9IDB4MEY7CisJaW9fZGF0YS5EYXRhID0gcF92dDE2MzZfZHBhX3NldHRpbmctPkNMS19TRUxfU1QyOworCXZpYWZiX2dwaW9faTJjX3dyaXRlX21hc2tfbHZkcyhwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbywKKwkJaW9fZGF0YSk7Cit9CisKK3ZvaWQgdmlhZmJfdnQxNjM2X3BhdGNoX3NrZXdfb25fdnQzMzI0KAorCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnBsdmRzX3NldHRpbmdfaW5mbywKKwlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pCit7CisJaW50IGluZGV4LCBzaXplOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfdnQxNjM2X3BhdGNoX3NrZXdfb25fdnQzMzI0LlxuIik7CisKKwkvKiBHcmFwaGljcyBEUEEgc2V0dGluZ3M6ICovCisJaW5kZXggPSBnZXRfY2xrX3JhbmdlX2luZGV4KHBsdmRzX3NldHRpbmdfaW5mby0+dmNsayk7CisJdmlhZmJfc2V0X2RwYV9nZngocGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlLAorCQkgICAgJkdGWF9EUEFfU0VUVElOR19UQkxfVlQzMzI0W2luZGV4XSk7CisKKwkvKiBMVkRTIFRyYW5zbWl0dGVyIERQQSBzZXR0aW5nczogKi8KKwlzaXplID0gQVJSQVlfU0laRShWVDE2MzZfRFBBX1NFVFRJTkdfVEJMX1ZUMzMyNCk7CisJaW5kZXggPQorCSAgICBnZXRfbHZkc19kcGFfc2V0dGluZ19pbmRleChwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCwKKwkJCQkgICAgICAgVlQxNjM2X0RQQV9TRVRUSU5HX1RCTF9WVDMzMjQsIHNpemUpOworCXNldF9kcGFfdnQxNjM2KHBsdmRzX3NldHRpbmdfaW5mbywgcGx2ZHNfY2hpcF9pbmZvLAorCQkgICAgICAgJlZUMTYzNl9EUEFfU0VUVElOR19UQkxfVlQzMzI0W2luZGV4XSk7Cit9CisKK3ZvaWQgdmlhZmJfdnQxNjM2X3BhdGNoX3NrZXdfb25fdnQzMzI3KAorCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnBsdmRzX3NldHRpbmdfaW5mbywKKwlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pCit7CisJaW50IGluZGV4LCBzaXplOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfdnQxNjM2X3BhdGNoX3NrZXdfb25fdnQzMzI3LlxuIik7CisKKwkvKiBHcmFwaGljcyBEUEEgc2V0dGluZ3M6ICovCisJaW5kZXggPSBnZXRfY2xrX3JhbmdlX2luZGV4KHBsdmRzX3NldHRpbmdfaW5mby0+dmNsayk7CisJdmlhZmJfc2V0X2RwYV9nZngocGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlLAorCQkgICAgJkdGWF9EUEFfU0VUVElOR19UQkxfVlQzMzI3W2luZGV4XSk7CisKKwkvKiBMVkRTIFRyYW5zbWl0dGVyIERQQSBzZXR0aW5nczogKi8KKwlzaXplID0gQVJSQVlfU0laRShWVDE2MzZfRFBBX1NFVFRJTkdfVEJMX1ZUMzMyNyk7CisJaW5kZXggPQorCSAgICBnZXRfbHZkc19kcGFfc2V0dGluZ19pbmRleChwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCwKKwkJCQkgICAgICAgVlQxNjM2X0RQQV9TRVRUSU5HX1RCTF9WVDMzMjcsIHNpemUpOworCXNldF9kcGFfdnQxNjM2KHBsdmRzX3NldHRpbmdfaW5mbywgcGx2ZHNfY2hpcF9pbmZvLAorCQkgICAgICAgJlZUMTYzNl9EUEFfU0VUVElOR19UQkxfVlQzMzI3W2luZGV4XSk7Cit9CisKK3ZvaWQgdmlhZmJfdnQxNjM2X3BhdGNoX3NrZXdfb25fdnQzMzY0KAorCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnBsdmRzX3NldHRpbmdfaW5mbywKKwlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pCit7CisJaW50IGluZGV4OworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfdnQxNjM2X3BhdGNoX3NrZXdfb25fdnQzMzY0LlxuIik7CisKKwkvKiBHcmFwaGljcyBEUEEgc2V0dGluZ3M6ICovCisJaW5kZXggPSBnZXRfY2xrX3JhbmdlX2luZGV4KHBsdmRzX3NldHRpbmdfaW5mby0+dmNsayk7CisJdmlhZmJfc2V0X2RwYV9nZngocGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlLAorCQkgICAgJkdGWF9EUEFfU0VUVElOR19UQkxfVlQzMzY0W2luZGV4XSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92dDE2MzYuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL3Z0MTYzNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMTUwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92dDE2MzYuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9WVDE2MzZfSF8KKyNkZWZpbmUgX1ZUMTYzNl9IXworI2luY2x1ZGUgImNoaXAuaCIKK2Jvb2wgdmlhZmJfbHZkc19pZGVudGlmeV92dDE2MzYodm9pZCk7Cit2b2lkIHZpYWZiX2luaXRfbHZkc192dDE2MzYoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCSpwbHZkc19zZXR0aW5nX2luZm8sIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbyk7Cit2b2lkIHZpYWZiX2VuYWJsZV9sdmRzX3Z0MTYzNihzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkqcGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKK3ZvaWQgdmlhZmJfZGlzYWJsZV9sdmRzX3Z0MTYzNihzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOwordm9pZCB2aWFmYl92dDE2MzZfcGF0Y2hfc2tld19vbl92dDMzMjQoCisJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqcGx2ZHNfc2V0dGluZ19pbmZvLAorCXN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbyk7Cit2b2lkIHZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzMyNygKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKK3ZvaWQgdmlhZmJfdnQxNjM2X3BhdGNoX3NrZXdfb25fdnQzMzY0KAorCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnBsdmRzX3NldHRpbmdfaW5mbywKKwlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9kczF3bS5jIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMXdtLmMKaW5kZXggMTAyMTFlNC4uMjllMTQ0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9tYXN0ZXJzL2RzMXdtLmMKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMXdtLmMKQEAgLTE2MCw4ICsxNjAsMTAgQEAKIAkgKiAgICAgNjI1IHVzIC0gNjAgdXMgLSAyNDAgdXMgLSAxMDAgbnMgPSAzMjQuOSB1cwogCSAqCiAJICogV2UnbGwgd2FpdCBhIGJpdCBsb25nZXIganVzdCB0byBiZSBzdXJlLgorCSAqIFdhcyB1ZGVsYXkoNTAwKSwgYnV0IGlmIGl0IGlzIGdvaW5nIHRvIGJ1c3l3YWl0IHRoZSBjcHUgdGhhdCBsb25nLAorCSAqIG1pZ2h0IGFzIHdlbGwgY29tZSBiYWNrIGxhdGVyLgogCSAqLwotCXVkZWxheSg1MDApOworCW1zbGVlcCgxKTsKIAogCWRzMXdtX3dyaXRlX3JlZ2lzdGVyKGRzMXdtX2RhdGEsIERTMVdNX0lOVF9FTiwKIAkJRFMxV01fSU5URU5fRVJCRiB8IERTMVdNX0lOVEVOX0VUTVQgfCBEUzFXTV9JTlRFTl9FUEQgfApAQCAtMjc0LDggKzI3Niw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRzMXdtX3NlYXJjaCh2b2lkICpkYXRhLCB1OCBzZWFyY2hfdHlwZSwKLQkJCSB3MV9zbGF2ZV9mb3VuZF9jYWxsYmFjayBzbGF2ZV9mb3VuZCkKK3N0YXRpYyB2b2lkIGRzMXdtX3NlYXJjaCh2b2lkICpkYXRhLCBzdHJ1Y3QgdzFfbWFzdGVyICptYXN0ZXJfZGV2LAorCQkJdTggc2VhcmNoX3R5cGUsIHcxX3NsYXZlX2ZvdW5kX2NhbGxiYWNrIHNsYXZlX2ZvdW5kKQogewogCXN0cnVjdCBkczF3bV9kYXRhICpkczF3bV9kYXRhID0gZGF0YTsKIAlpbnQgaTsKQEAgLTMxMyw3ICszMTUsNyBAQAogCWRzMXdtX3dyaXRlX3JlZ2lzdGVyKGRzMXdtX2RhdGEsIERTMVdNX0NNRCwgfkRTMVdNX0NNRF9TUkEpOwogCWRzMXdtX3Jlc2V0KGRzMXdtX2RhdGEpOwogCi0Jc2xhdmVfZm91bmQoZHMxd21fZGF0YSwgcm9tX2lkKTsKKwlzbGF2ZV9mb3VuZChtYXN0ZXJfZGV2LCByb21faWQpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0OTAuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0OTAuYwppbmRleCBiNjNiNWUwLi41OWFkNmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDkwLmMKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ5MC5jCkBAIC04OCw3ICs4OCw3IEBACiAjZGVmaW5lIENPTU1fRFQJCQkJMHgyMDAwCiAjZGVmaW5lIENPTU1fU1BVCQkJMHgxMDAwCiAjZGVmaW5lIENPTU1fRgkJCQkweDA4MDAKLSNkZWZpbmUgQ09NTV9OVFAJCQkweDA0MDAKKyNkZWZpbmUgQ09NTV9OVEYJCQkweDA0MDAKICNkZWZpbmUgQ09NTV9JQ1AJCQkweDAyMDAKICNkZWZpbmUgQ09NTV9SU1QJCQkweDAxMDAKIApAQCAtOTgsMTEgKzk4LDYgQEAKICNkZWZpbmUgQlJBTkNIX01BSU4JCQkweENDCiAjZGVmaW5lIEJSQU5DSF9BVVgJCQkweDMzCiAKLS8qCi0gKiBEdXJhdGlvbiBvZiB0aGUgc3Ryb25nIHB1bGwtdXAgcHVsc2UgaW4gbWlsbGlzZWNvbmRzLgotICovCi0jZGVmaW5lIFBVTExVUF9QVUxTRV9EVVJBVElPTgkJNzUwCi0KIC8qIFN0YXR1cyBmbGFncyAqLwogI2RlZmluZSBTVF9TUFVBCQkJCTB4MDEgIC8qIFN0cm9uZyBQdWxsLXVwIGlzIGFjdGl2ZSAqLwogI2RlZmluZSBTVF9QUkdBCQkJCTB4MDIgIC8qIDEyViBwcm9ncmFtbWluZyBwdWxzZSBpcyBiZWluZyBnZW5lcmF0ZWQgKi8KQEAgLTExMiw2ICsxMDcsMTcgQEAKICNkZWZpbmUgU1RfSURMRQkJCQkweDIwICAvKiBEUzI0OTAgaXMgY3VycmVudGx5IGlkbGUgKi8KICNkZWZpbmUgU1RfRVBPRgkJCQkweDgwCiAKKy8qIFJlc3VsdCBSZWdpc3RlciBmbGFncyAqLworI2RlZmluZSBSUl9ERVRFQ1QJCQkweEE1IC8qIE5ldyBkZXZpY2UgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgUlJfTlJTCQkJCTB4MDEgLyogUmVzZXQgbm8gcHJlc2VuY2Ugb3IgLi4uICovCisjZGVmaW5lIFJSX1NICQkJCTB4MDIgLyogc2hvcnQgb24gcmVzZXQgb3Igc2V0IHBhdGggKi8KKyNkZWZpbmUgUlJfQVBQCQkJCTB4MDQgLyogYWxhcm1pbmcgcHJlc2VuY2Ugb24gcmVzZXQgKi8KKyNkZWZpbmUgUlJfVlBQCQkJCTB4MDggLyogMTJWIGV4cGVjdGVkIG5vdCBzZWVuICovCisjZGVmaW5lIFJSX0NNUAkJCQkweDEwIC8qIGNvbXBhcmUgZXJyb3IgKi8KKyNkZWZpbmUgUlJfQ1JDCQkJCTB4MjAgLyogQ1JDIGVycm9yIGRldGVjdGVkICovCisjZGVmaW5lIFJSX1JEUAkJCQkweDQwIC8qIHJlZGlyZWN0ZWQgcGFnZSAqLworI2RlZmluZSBSUl9FT1MJCQkJMHg4MCAvKiBlbmQgb2Ygc2VhcmNoIGVycm9yICovCisKICNkZWZpbmUgU1BFRURfTk9STUFMCQkJMHgwMAogI2RlZmluZSBTUEVFRF9GTEVYSUJMRQkJCTB4MDEKICNkZWZpbmUgU1BFRURfT1ZFUkRSSVZFCQkJMHgwMgpAQCAtMTMxLDYgKzEzNywxNSBAQAogCiAJaW50CQkJZXBbTlVNX0VQXTsKIAorCS8qIFN0cm9uZyBQdWxsVXAKKwkgKiAwOiBwdWxsdXAgbm90IGFjdGl2ZSwgZWxzZSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMKKwkgKi8KKwlpbnQJCQlzcHVfc2xlZXA7CisJLyogc3B1X2JpdCBjb250YWlucyBDT01NX1NQVSBvciAwIGRlcGVuZGluZyBvbiBpZiB0aGUgc3Ryb25nIHB1bGx1cAorCSAqIHNob3VsZCBiZSBhY3RpdmUgb3Igbm90IGZvciB3cml0ZXMuCisJICovCisJdTE2CQkJc3B1X2JpdDsKKwogCXN0cnVjdCB3MV9idXNfbWFzdGVyCW1hc3RlcjsKIH07CiAKQEAgLTE2NCw3ICsxNzksNiBAQAogc3RhdGljIGludCBkc19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqKTsKIHN0YXRpYyB2b2lkIGRzX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkc19kdW1wX3N0YXR1cyh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKIHN0YXRpYyBpbnQgZHNfc2VuZF9jb250cm9sKHN0cnVjdCBkc19kZXZpY2UgKiwgdTE2LCB1MTYpOwogc3RhdGljIGludCBkc19zZW5kX2NvbnRyb2xfY21kKHN0cnVjdCBkc19kZXZpY2UgKiwgdTE2LCB1MTYpOwogCkBAIC0xOTIsNyArMjA2LDcgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0jaWYgMAorCiBzdGF0aWMgaW50IGRzX3NlbmRfY29udHJvbF9tb2RlKHN0cnVjdCBkc19kZXZpY2UgKmRldiwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpCiB7CiAJaW50IGVycjsKQEAgLTIwNyw3ICsyMjEsNyBAQAogCiAJcmV0dXJuIGVycjsKIH0KLSNlbmRpZgorCiBzdGF0aWMgaW50IGRzX3NlbmRfY29udHJvbChzdHJ1Y3QgZHNfZGV2aWNlICpkZXYsIHUxNiB2YWx1ZSwgdTE2IGluZGV4KQogewogCWludCBlcnI7CkBAIC0yMjMsMTEgKzIzNyw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRzX2R1bXBfc3RhdHVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqc3RyLCBpbnQgb2ZmKQotewotCXByaW50aygiJTQ1czogJTh4XG4iLCBzdHIsIGJ1ZltvZmZdKTsKLX0KLQogc3RhdGljIGludCBkc19yZWN2X3N0YXR1c19ub2R1bXAoc3RydWN0IGRzX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHNfc3RhdHVzICpzdCwKIAkJCQkgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgc2l6ZSkKIHsKQEAgLTI0OCw2MiArMjU3LDgxIEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgaW50IGRzX3JlY3Zfc3RhdHVzKHN0cnVjdCBkc19kZXZpY2UgKmRldiwgc3RydWN0IGRzX3N0YXR1cyAqc3QpCitzdGF0aWMgaW5saW5lIHZvaWQgZHNfcHJpbnRfbXNnKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqc3RyLCBpbnQgb2ZmKQogewotCXVuc2lnbmVkIGNoYXIgYnVmWzY0XTsKLQlpbnQgY291bnQsIGVyciA9IDAsIGk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJTQ1czogJTh4XG4iLCBzdHIsIGJ1ZltvZmZdKTsKK30KIAotCW1lbWNweShzdCwgYnVmLCBzaXplb2YoKnN0KSk7CitzdGF0aWMgdm9pZCBkc19kdW1wX3N0YXR1cyhzdHJ1Y3QgZHNfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWludCBpOwogCi0JY291bnQgPSBkc19yZWN2X3N0YXR1c19ub2R1bXAoZGV2LCBzdCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKGNvdW50IDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCXByaW50aygiMHgleDogY291bnQ9JWQsIHN0YXR1czogIiwgZGV2LT5lcFtFUF9TVEFUVVNdLCBjb3VudCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiMHgleDogY291bnQ9JWQsIHN0YXR1czogIiwgZGV2LT5lcFtFUF9TVEFUVVNdLCBjb3VudCk7CiAJZm9yIChpPTA7IGk8Y291bnQ7ICsraSkKIAkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltpXSk7Ci0JcHJpbnRrKCJcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlxuIik7CiAKIAlpZiAoY291bnQgPj0gMTYpIHsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAiZW5hYmxlIGZsYWciLCAwKTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAiMS13aXJlIHNwZWVkIiwgMSk7Ci0JCWRzX2R1bXBfc3RhdHVzKGJ1ZiwgInN0cm9uZyBwdWxsdXAgZHVyYXRpb24iLCAyKTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAicHJvZ3JhbW1pbmcgcHVsc2UgZHVyYXRpb24iLCAzKTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAicHVsbGRvd24gc2xldyByYXRlIGNvbnRyb2wiLCA0KTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAid3JpdGUtMSBsb3cgdGltZSIsIDUpOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICJkYXRhIHNhbXBsZSBvZmZzZXQvd3JpdGUtMCByZWNvdmVyeSB0aW1lIiwgNik7Ci0JCWRzX2R1bXBfc3RhdHVzKGJ1ZiwgInJlc2VydmVkICh0ZXN0IHJlZ2lzdGVyKSIsIDcpOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICJkZXZpY2Ugc3RhdHVzIGZsYWdzIiwgOCk7Ci0JCWRzX2R1bXBfc3RhdHVzKGJ1ZiwgImNvbW11bmljYXRpb24gY29tbWFuZCBieXRlIDEiLCA5KTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAiY29tbXVuaWNhdGlvbiBjb21tYW5kIGJ5dGUgMiIsIDEwKTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAiY29tbXVuaWNhdGlvbiBjb21tYW5kIGJ1ZmZlciBzdGF0dXMiLCAxMSk7Ci0JCWRzX2R1bXBfc3RhdHVzKGJ1ZiwgIjEtd2lyZSBkYXRhIG91dHB1dCBidWZmZXIgc3RhdHVzIiwgMTIpOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICIxLXdpcmUgZGF0YSBpbnB1dCBidWZmZXIgc3RhdHVzIiwgMTMpOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICJyZXNlcnZlZCIsIDE0KTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAicmVzZXJ2ZWQiLCAxNSk7CisJCWRzX3ByaW50X21zZyhidWYsICJlbmFibGUgZmxhZyIsIDApOworCQlkc19wcmludF9tc2coYnVmLCAiMS13aXJlIHNwZWVkIiwgMSk7CisJCWRzX3ByaW50X21zZyhidWYsICJzdHJvbmcgcHVsbHVwIGR1cmF0aW9uIiwgMik7CisJCWRzX3ByaW50X21zZyhidWYsICJwcm9ncmFtbWluZyBwdWxzZSBkdXJhdGlvbiIsIDMpOworCQlkc19wcmludF9tc2coYnVmLCAicHVsbGRvd24gc2xldyByYXRlIGNvbnRyb2wiLCA0KTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgIndyaXRlLTEgbG93IHRpbWUiLCA1KTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgImRhdGEgc2FtcGxlIG9mZnNldC93cml0ZS0wIHJlY292ZXJ5IHRpbWUiLAorCQkJNik7CisJCWRzX3ByaW50X21zZyhidWYsICJyZXNlcnZlZCAodGVzdCByZWdpc3RlcikiLCA3KTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgImRldmljZSBzdGF0dXMgZmxhZ3MiLCA4KTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgImNvbW11bmljYXRpb24gY29tbWFuZCBieXRlIDEiLCA5KTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgImNvbW11bmljYXRpb24gY29tbWFuZCBieXRlIDIiLCAxMCk7CisJCWRzX3ByaW50X21zZyhidWYsICJjb21tdW5pY2F0aW9uIGNvbW1hbmQgYnVmZmVyIHN0YXR1cyIsIDExKTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgIjEtd2lyZSBkYXRhIG91dHB1dCBidWZmZXIgc3RhdHVzIiwgMTIpOworCQlkc19wcmludF9tc2coYnVmLCAiMS13aXJlIGRhdGEgaW5wdXQgYnVmZmVyIHN0YXR1cyIsIDEzKTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgInJlc2VydmVkIiwgMTQpOworCQlkc19wcmludF9tc2coYnVmLCAicmVzZXJ2ZWQiLCAxNSk7CiAJfQotCi0JbWVtY3B5KHN0LCBidWYsIHNpemVvZigqc3QpKTsKLQotCWlmIChzdC0+c3RhdHVzICYgU1RfRVBPRikgewotCQlwcmludGsoS0VSTl9JTkZPICJSZXNldHRpbmcgZGV2aWNlIGFmdGVyIFNUX0VQT0YuXG4iKTsKLQkJZXJyID0gZHNfc2VuZF9jb250cm9sX2NtZChkZXYsIENUTF9SRVNFVF9ERVZJQ0UsIDApOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJY291bnQgPSBkc19yZWN2X3N0YXR1c19ub2R1bXAoZGV2LCBzdCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JCWlmIChjb3VudCA8IDApCi0JCQlyZXR1cm4gZXJyOworCWZvciAoaSA9IDE2OyBpIDwgY291bnQ7ICsraSkgeworCQlpZiAoYnVmW2ldID09IFJSX0RFVEVDVCkgeworCQkJZHNfcHJpbnRfbXNnKGJ1ZiwgIm5ldyBkZXZpY2UgZGV0ZWN0IiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCQlkc19wcmludF9tc2coYnVmLCAiUmVzdWx0IFJlZ2lzdGVyIFZhbHVlOiAiLCBpKTsKKwkJaWYgKGJ1ZltpXSAmIFJSX05SUykKKwkJCXByaW50ayhLRVJOX0lORk8gIk5SUzogUmVzZXQgbm8gcHJlc2VuY2Ugb3IgLi4uXG4iKTsKKwkJaWYgKGJ1ZltpXSAmIFJSX1NIKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiU0g6IHNob3J0IG9uIHJlc2V0IG9yIHNldCBwYXRoXG4iKTsKKwkJaWYgKGJ1ZltpXSAmIFJSX0FQUCkKKwkJCXByaW50ayhLRVJOX0lORk8gIkFQUDogYWxhcm1pbmcgcHJlc2VuY2Ugb24gcmVzZXRcbiIpOworCQlpZiAoYnVmW2ldICYgUlJfVlBQKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiVlBQOiAxMlYgZXhwZWN0ZWQgbm90IHNlZW5cbiIpOworCQlpZiAoYnVmW2ldICYgUlJfQ01QKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ01QOiBjb21wYXJlIGVycm9yXG4iKTsKKwkJaWYgKGJ1ZltpXSAmIFJSX0NSQykKKwkJCXByaW50ayhLRVJOX0lORk8gIkNSQzogQ1JDIGVycm9yIGRldGVjdGVkXG4iKTsKKwkJaWYgKGJ1ZltpXSAmIFJSX1JEUCkKKwkJCXByaW50ayhLRVJOX0lORk8gIlJEUDogcmVkaXJlY3RlZCBwYWdlXG4iKTsKKwkJaWYgKGJ1ZltpXSAmIFJSX0VPUykKKwkJCXByaW50ayhLRVJOX0lORk8gIkVPUzogZW5kIG9mIHNlYXJjaCBlcnJvclxuIik7CiAJfQotI2lmIDAKLQlpZiAoc3QtPnN0YXR1cyAmIFNUX0lETEUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUmVzZXR0aW5nIHB1bHNlIGFmdGVyIFNUX0lETEUuXG4iKTsKLQkJZXJyID0gZHNfc3RhcnRfcHVsc2UoZGV2LCBQVUxMVVBfUFVMU0VfRFVSQVRJT04pOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0jZW5kaWYKK30KIAotCXJldHVybiBlcnI7CitzdGF0aWMgdm9pZCBkc19yZXNldF9kZXZpY2Uoc3RydWN0IGRzX2RldmljZSAqZGV2KQoreworCWRzX3NlbmRfY29udHJvbF9jbWQoZGV2LCBDVExfUkVTRVRfREVWSUNFLCAwKTsKKwkvKiBBbHdheXMgYWxsb3cgc3Ryb25nIHB1bGx1cCB3aGljaCBhbGxvdyBpbmRpdmlkdWFsIHdyaXRlcyB0byB1c2UKKwkgKiB0aGUgc3Ryb25nIHB1bGx1cC4KKwkgKi8KKwlpZiAoZHNfc2VuZF9jb250cm9sX21vZGUoZGV2LCBNT0RfUFVMU0VfRU4sIFBVTFNFX1NQVUUpKQorCQlwcmludGsoS0VSTl9FUlIgImRzX3Jlc2V0X2RldmljZTogIgorCQkJIkVycm9yIGFsbG93aW5nIHN0cm9uZyBwdWxsdXBcbiIpOworCS8qIENoaXAgc3Ryb25nIHB1bGx1cCB0aW1lIHdhcyBjbGVhcmVkLiAqLworCWlmIChkZXYtPnNwdV9zbGVlcCkgeworCQkvKiBsb3dlciA0IGJpdHMgYXJlIDAsIHNlZSBkc19zZXRfcHVsbHVwICovCisJCXU4IGRlbCA9IGRldi0+c3B1X3NsZWVwPj40OworCQlpZiAoZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9TRVRfRFVSQVRJT04gfCBDT01NX0lNLCBkZWwpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJkc19yZXNldF9kZXZpY2U6ICIKKwkJCQkiRXJyb3Igc2V0dGluZyBkdXJhdGlvblxuIik7CisJfQogfQogCiBzdGF0aWMgaW50IGRzX3JlY3ZfZGF0YShzdHJ1Y3QgZHNfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHNpemUpCkBAIC0zMTEsMTMgKzMzOSwyNyBAQAogCWludCBjb3VudCwgZXJyOwogCXN0cnVjdCBkc19zdGF0dXMgc3Q7CiAKKwkvKiBDYXJlZnVsIG9uIHNpemUuICBJZiBzaXplIGlzIGxlc3MgdGhhbiB3aGF0IGlzIGF2YWlsYWJsZSBpbgorCSAqIHRoZSBpbnB1dCBidWZmZXIsIHRoZSBkZXZpY2UgZmFpbHMgdGhlIGJ1bGsgdHJhbnNmZXIgYW5kCisJICogY2xlYXJzIHRoZSBpbnB1dCBidWZmZXIuICBJdCBjb3VsZCByZWFkIHRoZSBtYXhpbXVtIHNpemUgb2YKKwkgKiB0aGUgZGF0YSBidWZmZXIsIGJ1dCB0aGVuIGRvIHlvdSByZXR1cm4gdGhlIGZpcnN0LCBsYXN0LCBvcgorCSAqIHNvbWUgc2V0IG9mIHRoZSBtaWRkbGUgc2l6ZSBieXRlcz8gIEFzIGxvbmcgYXMgdGhlIHJlc3Qgb2YKKwkgKiB0aGUgY29kZSBpcyBjb3JyZWN0IHRoZXJlIHdpbGwgYmUgc2l6ZSBieXRlcyB3YWl0aW5nLiAgQQorCSAqIGNhbGwgdG8gZHNfd2FpdF9zdGF0dXMgd2lsbCB3YWl0IHVudGlsIHRoZSBkZXZpY2UgaXMgaWRsZQorCSAqIGFuZCBhbnkgZGF0YSB0byBiZSByZWNlaXZlZCB3b3VsZCBoYXZlIGJlZW4gYXZhaWxhYmxlLgorCSAqLwogCWNvdW50ID0gMDsKIAllcnIgPSB1c2JfYnVsa19tc2coZGV2LT51ZGV2LCB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCBkZXYtPmVwW0VQX0RBVEFfSU5dKSwKIAkJCQlidWYsIHNpemUsICZjb3VudCwgMTAwMCk7CiAJaWYgKGVyciA8IDApIHsKKwkJdTggYnVmWzB4MjBdOworCQlpbnQgY291bnQ7CisKIAkJcHJpbnRrKEtFUk5fSU5GTyAiQ2xlYXJpbmcgZXAweCV4LlxuIiwgZGV2LT5lcFtFUF9EQVRBX0lOXSk7CiAJCXVzYl9jbGVhcl9oYWx0KGRldi0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwgZGV2LT5lcFtFUF9EQVRBX0lOXSkpOwotCQlkc19yZWN2X3N0YXR1cyhkZXYsICZzdCk7CisKKwkJY291bnQgPSBkc19yZWN2X3N0YXR1c19ub2R1bXAoZGV2LCAmc3QsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlkc19kdW1wX3N0YXR1cyhkZXYsIGJ1ZiwgY291bnQpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMzQxLDcgKzM4Myw4IEBACiAJY291bnQgPSAwOwogCWVyciA9IHVzYl9idWxrX21zZyhkZXYtPnVkZXYsIHVzYl9zbmRidWxrcGlwZShkZXYtPnVkZXYsIGRldi0+ZXBbRVBfREFUQV9PVVRdKSwgYnVmLCBsZW4sICZjb3VudCwgMTAwMCk7CiAJaWYgKGVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVhZCAxLXdpcmUgZGF0YSBmcm9tIDB4MDI6IGVycj0lZC5cbiIsIGVycik7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHdyaXRlIDEtd2lyZSBkYXRhIHRvIGVwMHgleDogIgorCQkJImVycj0lZC5cbiIsIGRldi0+ZXBbRVBfREFUQV9PVVRdLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMzk3LDcgKzQ0MCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IGRzX3JlY3Zfc3RhdHVzKGRldiwgc3QpOworCWVyciA9IGRzX2R1bXBfc3RhdHVzKGRldiwgc3QpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTQyMCwzMyArNDYzLDQ5IEBACiAJCQlwcmludGsoIlxuIik7CiAJCX0KICNlbmRpZgotCX0gd2hpbGUoIShidWZbMHgwOF0gJiAweDIwKSAmJiAhKGVyciA8IDApICYmICsrY291bnQgPCAxMDApOworCX0gd2hpbGUgKCEoYnVmWzB4MDhdICYgU1RfSURMRSkgJiYgIShlcnIgPCAwKSAmJiArK2NvdW50IDwgMTAwKTsKIAorCWlmIChlcnIgPj0gMTYgJiYgc3QtPnN0YXR1cyAmIFNUX0VQT0YpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUmVzZXR0aW5nIGRldmljZSBhZnRlciBTVF9FUE9GLlxuIik7CisJCWRzX3Jlc2V0X2RldmljZShkZXYpOworCQkvKiBBbHdheXMgZHVtcCB0aGUgZGV2aWNlIHN0YXR1cy4gKi8KKwkJY291bnQgPSAxMDE7CisJfQogCi0JaWYgKCgoZXJyID4gMTYpICYmIChidWZbMHgxMF0gJiAweDAxKSkgfHwgY291bnQgPj0gMTAwIHx8IGVyciA8IDApIHsKLQkJZHNfcmVjdl9zdGF0dXMoZGV2LCBzdCk7CisJLyogRHVtcCB0aGUgc3RhdHVzIGZvciBlcnJvcnMgb3IgaWYgdGhlcmUgaXMgZXh0ZW5kZWQgcmV0dXJuIGRhdGEuCisJICogVGhlIGV4dGVuZGVkIHN0YXR1cyBpbmNsdWRlcyBuZXcgZGV2aWNlIGRldGVjdGlvbiAobWF5YmUgc29tZW9uZQorCSAqIGNhbiBkbyBzb21ldGhpbmcgd2l0aCBpdCkuCisJICovCisJaWYgKGVyciA+IDE2IHx8IGNvdW50ID49IDEwMCB8fCBlcnIgPCAwKQorCQlkc19kdW1wX3N0YXR1cyhkZXYsIGJ1ZiwgZXJyKTsKKworCS8qIEV4dGVuZGVkIGRhdGEgaXNuJ3QgYW4gZXJyb3IuICBXZWxsLCBhIHNob3J0IGlzLCBidXQgdGhlIGR1bXAKKwkgKiB3b3VsZCBoYXZlIGFscmVhZHkgdG9sZCB0aGUgdXNlciB0aGF0IGFuZCB3ZSBjYW4ndCBkbyBhbnl0aGluZworCSAqIGFib3V0IGl0IGluIHNvZnR3YXJlIGFueXdheS4KKwkgKi8KKwlpZiAoY291bnQgPj0gMTAwIHx8IGVyciA8IDApCiAJCXJldHVybiAtMTsKLQl9IGVsc2UKKwllbHNlCiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRzX3Jlc2V0KHN0cnVjdCBkc19kZXZpY2UgKmRldiwgc3RydWN0IGRzX3N0YXR1cyAqc3QpCitzdGF0aWMgaW50IGRzX3Jlc2V0KHN0cnVjdCBkc19kZXZpY2UgKmRldikKIHsKIAlpbnQgZXJyOwogCi0JLy9lcnIgPSBkc19zZW5kX2NvbnRyb2woZGV2LCBDT01NXzFfV0lSRV9SRVNFVCB8IENPTU1fRiB8IENPTU1fSU0gfCBDT01NX1NFLCBTUEVFRF9GTEVYSUJMRSk7Ci0JZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgMHg0MywgU1BFRURfTk9STUFMKTsKKwkvKiBPdGhlciBwb3RlbnRpb25hbGx5IGludGVyZXN0aW5nIGZsYWdzIGZvciByZXNldC4KKwkgKgorCSAqIENPTU1fTlRGOiBSZXR1cm4gcmVzdWx0IHJlZ2lzdGVyIGZlZWRiYWNrLiAgVGhpcyBjb3VsZCBiZSB1c2VkIHRvCisJICogZGV0ZWN0IHNvbWUgY29uZGl0aW9ucyBzdWNoIGFzIHNob3J0LCBhbGFybWluZyBwcmVzZW5jZSwgb3IKKwkgKiBkZXRlY3QgaWYgYSBuZXcgZGV2aWNlIHdhcyBkZXRlY3RlZC4KKwkgKgorCSAqIENPTU1fU0Ugd2hpY2ggYWxsb3dzIFNQRUVEX05PUk1BTCwgU1BFRURfRkxFWElCTEUsIFNQRUVEX09WRVJEUklWRToKKwkgKiBTZWxlY3QgdGhlIGRhdGEgdHJhbnNmZXIgcmF0ZS4KKwkgKi8KKwllcnIgPSBkc19zZW5kX2NvbnRyb2woZGV2LCBDT01NXzFfV0lSRV9SRVNFVCB8IENPTU1fSU0sIFNQRUVEX05PUk1BTCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWRzX3dhaXRfc3RhdHVzKGRldiwgc3QpOwotI2lmIDAKLQlpZiAoc3QtPmNvbW1hbmRfYnVmZmVyX3N0YXR1cykgewotCQlwcmludGsoS0VSTl9JTkZPICJTaG9ydCBjaXJjdWl0LlxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLSNlbmRpZgotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3MSw2MCArNTMwLDQzIEBACiB9CiAjZW5kaWYgIC8qICAwICAqLwogCi1zdGF0aWMgaW50IGRzX3N0YXJ0X3B1bHNlKHN0cnVjdCBkc19kZXZpY2UgKmRldiwgaW50IGRlbGF5KQorc3RhdGljIGludCBkc19zZXRfcHVsbHVwKHN0cnVjdCBkc19kZXZpY2UgKmRldiwgaW50IGRlbGF5KQogewotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAJdTggZGVsID0gMSArICh1OCkoZGVsYXkgPj4gNCk7Ci0Jc3RydWN0IGRzX3N0YXR1cyBzdDsKKwkvKiBKdXN0IHN0b3JpbmcgZGVsYXkgd291bGQgbm90IGdldCB0aGUgdHJ1bmljYXRpb24gYW5kIHJvdW5kdXAuICovCisJaW50IG1zID0gZGVsPDw0OwogCi0jaWYgMAotCWVyciA9IGRzX3N0b3BfcHVsc2UoZGV2LCAxMCk7Ci0JaWYgKGVycikKKwkvKiBFbmFibGUgc3B1X2JpdCBpZiBhIGRlbGF5IGlzIHNldC4gKi8KKwlkZXYtPnNwdV9iaXQgPSBkZWxheSA/IENPTU1fU1BVIDogMDsKKwkvKiBJZiBkZWxheSBpcyB6ZXJvLCBpdCBoYXMgYWxyZWFkeSBiZWVuIGRpc2FibGVkLCBpZiB0aGUgdGltZSBpcworCSAqIHRoZSBzYW1lIGFzIHRoZSBoYXJkd2FyZSB3YXMgbGFzdCBwcm9ncmFtbWVkIHRvLCB0aGVyZSBpcyBhbHNvCisJICogbm90aGluZyBtb3JlIHRvIGRvLiAgQ29tcGFyZSB3aXRoIHRoZSByZWNhbGN1bGF0ZWQgdmFsdWUgbXMKKwkgKiByYXRoZXIgdGhhbiBkZWwgb3IgZGVsYXkgd2hpY2ggY2FuIGhhdmUgYSBkaWZmZXJlbnQgdmFsdWUuCisJICovCisJaWYgKGRlbGF5ID09IDAgfHwgbXMgPT0gZGV2LT5zcHVfc2xlZXApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBkc19zZW5kX2NvbnRyb2xfbW9kZShkZXYsIE1PRF9QVUxTRV9FTiwgUFVMU0VfU1BVRSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLSNlbmRpZgogCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fU0VUX0RVUkFUSU9OIHwgQ09NTV9JTSwgZGVsKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9QVUxTRSB8IENPTU1fSU0gfCBDT01NX0YsIDApOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQltZGVsYXkoZGVsYXkpOwotCi0JZHNfd2FpdF9zdGF0dXMoZGV2LCAmc3QpOworCWRldi0+c3B1X3NsZWVwID0gbXM7CiAKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGRzX3RvdWNoX2JpdChzdHJ1Y3QgZHNfZGV2aWNlICpkZXYsIHU4IGJpdCwgdTggKnRiaXQpCiB7Ci0JaW50IGVyciwgY291bnQ7CisJaW50IGVycjsKIAlzdHJ1Y3QgZHNfc3RhdHVzIHN0OwotCXUxNiB2YWx1ZSA9IChDT01NX0JJVF9JTyB8IENPTU1fSU0pIHwgKChiaXQpID8gQ09NTV9EIDogMCk7Ci0JdTE2IGNtZDsKIAotCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIHZhbHVlLCAwKTsKKwllcnIgPSBkc19zZW5kX2NvbnRyb2woZGV2LCBDT01NX0JJVF9JTyB8IENPTU1fSU0gfCAoYml0ID8gQ09NTV9EIDogMCksCisJCTApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQljb3VudCA9IDA7Ci0JZG8gewotCQllcnIgPSBkc193YWl0X3N0YXR1cyhkZXYsICZzdCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCi0JCWNtZCA9IHN0LmNvbW1hbmQwIHwgKHN0LmNvbW1hbmQxIDw8IDgpOwotCX0gd2hpbGUgKGNtZCAhPSB2YWx1ZSAmJiArK2NvdW50IDwgMTApOwotCi0JaWYgKGVyciA8IDAgfHwgY291bnQgPj0gMTApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gb2J0YWluIHN0YXR1cy5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJZHNfd2FpdF9zdGF0dXMoZGV2LCAmc3QpOwogCiAJZXJyID0gZHNfcmVjdl9kYXRhKGRldiwgdGJpdCwgc2l6ZW9mKCp0Yml0KSk7CiAJaWYgKGVyciA8IDApCkBAIC01MzMsMTIgKzU3NSwxOCBAQAogCXJldHVybiAwOwogfQogCisjaWYgMAogc3RhdGljIGludCBkc193cml0ZV9iaXQoc3RydWN0IGRzX2RldmljZSAqZGV2LCB1OCBiaXQpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgZHNfc3RhdHVzIHN0OwogCi0JZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9CSVRfSU8gfCBDT01NX0lNIHwgKGJpdCkgPyBDT01NX0QgOiAwLCAwKTsKKwkvKiBTZXQgQ09NTV9JQ1AgdG8gd3JpdGUgd2l0aG91dCBhIHJlYWRiYWNrLiAgTm90ZSwgdGhpcyB3aWxsCisJICogcHJvZHVjZSBvbmUgdGltZSBzbG90LCBhIGRvd24gZm9sbG93ZWQgYnkgYW4gdXAgd2l0aCBDT01NX0QKKwkgKiBvbmx5IGRldGVybWluZyB0aGUgdGltaW5nLgorCSAqLworCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fQklUX0lPIHwgQ09NTV9JTSB8IENPTU1fSUNQIHwKKwkJKGJpdCA/IENPTU1fRCA6IDApLCAwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01NDYsNiArNTk0LDcgQEAKIAogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgZHNfd3JpdGVfYnl0ZShzdHJ1Y3QgZHNfZGV2aWNlICpkZXYsIHU4IGJ5dGUpCiB7CkBAIC01NTMsMTAgKzYwMiwxMyBAQAogCXN0cnVjdCBkc19zdGF0dXMgc3Q7CiAJdTggcmJ5dGU7CiAKLQllcnIgPSBkc19zZW5kX2NvbnRyb2woZGV2LCBDT01NX0JZVEVfSU8gfCBDT01NX0lNIHwgQ09NTV9TUFUsIGJ5dGUpOworCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fQllURV9JTyB8IENPTU1fSU0gfCBkZXYtPnNwdV9iaXQsIGJ5dGUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwlpZiAoZGV2LT5zcHVfYml0KQorCQltc2xlZXAoZGV2LT5zcHVfc2xlZXApOworCiAJZXJyID0gZHNfd2FpdF9zdGF0dXMoZGV2LCAmc3QpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC01NjUsOCArNjE3LDYgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWRzX3N0YXJ0X3B1bHNlKGRldiwgUFVMTFVQX1BVTFNFX0RVUkFUSU9OKTsKLQogCXJldHVybiAhKGJ5dGUgPT0gcmJ5dGUpOwogfQogCkBAIC02MDIsNyArNjUyLDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fQkxPQ0tfSU8gfCBDT01NX0lNIHwgQ09NTV9TUFUsIGxlbik7CisJZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9CTE9DS19JTyB8IENPTU1fSU0sIGxlbik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNjIzLDIwICs2NzMsMTkgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWRzX3dhaXRfc3RhdHVzKGRldiwgJnN0KTsKLQotCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fQkxPQ0tfSU8gfCBDT01NX0lNIHwgQ09NTV9TUFUsIGxlbik7CisJZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9CTE9DS19JTyB8IENPTU1fSU0gfCBkZXYtPnNwdV9iaXQsIGxlbik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCWlmIChkZXYtPnNwdV9iaXQpCisJCW1zbGVlcChkZXYtPnNwdV9zbGVlcCk7CisKIAlkc193YWl0X3N0YXR1cyhkZXYsICZzdCk7CiAKIAllcnIgPSBkc19yZWN2X2RhdGEoZGV2LCBidWYsIGxlbik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlkc19zdGFydF9wdWxzZShkZXYsIFBVTExVUF9QVUxTRV9EVVJBVElPTik7Ci0KIAlyZXR1cm4gIShlcnIgPT0gbGVuKTsKIH0KIApAQCAtNzI4LDYgKzc3Nyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmIDAKIHN0YXRpYyB2b2lkIGRzOTQ5MHJfd3JpdGVfYml0KHZvaWQgKmRhdGEsIHU4IGJpdCkKIHsKIAlzdHJ1Y3QgZHNfZGV2aWNlICpkZXYgPSBkYXRhOwpAQCAtNzM1LDEzICs3ODUsNiBAQAogCWRzX3dyaXRlX2JpdChkZXYsIGJpdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzOTQ5MHJfd3JpdGVfYnl0ZSh2b2lkICpkYXRhLCB1OCBieXRlKQotewotCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IGRhdGE7Ci0KLQlkc193cml0ZV9ieXRlKGRldiwgYnl0ZSk7Ci19Ci0KIHN0YXRpYyB1OCBkczk0OTByX3JlYWRfYml0KHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRzX2RldmljZSAqZGV2ID0gZGF0YTsKQEAgLTc1NCw2ICs3OTcsMTQgQEAKIAogCXJldHVybiBiaXQgJiAxOwogfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGRzOTQ5MHJfd3JpdGVfYnl0ZSh2b2lkICpkYXRhLCB1OCBieXRlKQoreworCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IGRhdGE7CisKKwlkc193cml0ZV9ieXRlKGRldiwgYnl0ZSk7Cit9CiAKIHN0YXRpYyB1OCBkczk0OTByX3JlYWRfYnl0ZSh2b2lkICpkYXRhKQogewpAQCAtNzkwLDMxICs4NDEsNTggQEAKIHN0YXRpYyB1OCBkczk0OTByX3Jlc2V0KHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRzX2RldmljZSAqZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgZHNfc3RhdHVzIHN0OwogCWludCBlcnI7CiAKLQltZW1zZXQoJnN0LCAwLCBzaXplb2Yoc3QpKTsKLQotCWVyciA9IGRzX3Jlc2V0KGRldiwgJnN0KTsKKwllcnIgPSBkc19yZXNldChkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1OCBkczk0OTByX3NldF9wdWxsdXAodm9pZCAqZGF0YSwgaW50IGRlbGF5KQoreworCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IGRhdGE7CisKKwlpZiAoZHNfc2V0X3B1bGx1cChkZXYsIGRlbGF5KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkc193MV9pbml0KHN0cnVjdCBkc19kZXZpY2UgKmRldikKIHsKIAltZW1zZXQoJmRldi0+bWFzdGVyLCAwLCBzaXplb2Yoc3RydWN0IHcxX2J1c19tYXN0ZXIpKTsKIAorCS8qIFJlc2V0IHRoZSBkZXZpY2UgYXMgaXQgY2FuIGJlIGluIGEgYmFkIHN0YXRlLgorCSAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYSBibG9jayB3cml0ZSB3aWxsIHdhaXQgZm9yIGRhdGEKKwkgKiB0byBiZSBwbGFjZWQgaW4gdGhlIG91dHB1dCBidWZmZXIgYW5kIGJsb2NrIGFueSBsYXRlcgorCSAqIGNvbW1hbmRzIHdoaWNoIHdpbGwga2VlcCBhY2N1bXVsYXRpbmcgYW5kIHRoZSBkZXZpY2Ugd2lsbAorCSAqIG5vdCBiZSBpZGxlLiAgQW5vdGhlciBjYXNlIGlzIHJlbW92aW5nIHRoZSBkczI0OTAgbW9kdWxlCisJICogd2hpbGUgYSBidXMgc2VhcmNoIGlzIGluIHByb2dyZXNzLCBzb21laG93IGEgZmV3IGNvbW1hbmRzCisJICogZ2V0IHRocm91Z2gsIGJ1dCB0aGUgaW5wdXQgdHJhbnNmZXJzIGZhaWwgbGVhdmluZyBkYXRhIGluCisJICogdGhlIGlucHV0IGJ1ZmZlci4gIFRoaXMgd2lsbCBjYXVzZSB0aGUgbmV4dCByZWFkIHRvIGZhaWwKKwkgKiBzZWUgdGhlIG5vdGUgaW4gZHNfcmVjdl9kYXRhLgorCSAqLworCWRzX3Jlc2V0X2RldmljZShkZXYpOworCiAJZGV2LT5tYXN0ZXIuZGF0YQk9IGRldjsKIAlkZXYtPm1hc3Rlci50b3VjaF9iaXQJPSAmZHM5NDkwcl90b3VjaF9iaXQ7CisJLyogcmVhZF9iaXQgYW5kIHdyaXRlX2JpdCBpbiB3MV9idXNfbWFzdGVyIGFyZSBleHBlY3RlZCB0byBzZXQgYW5kCisJICogc2FtcGxlIHRoZSBsaW5lIGxldmVsLiAgRm9yIHdyaXRlX2JpdCB0aGF0IG1lYW5zIGl0IGlzIGV4cGVjdGVkIHRvCisJICogc2V0IGl0IHRvIHRoYXQgdmFsdWUgYW5kIGxlYXZlIGl0IHRoZXJlLiAgZHMyNDkwIG9ubHkgc3VwcG9ydHMgYW4KKwkgKiBpbmRpdmlkdWFsIHRpbWUgc2xvdCBhdCB0aGUgbG93ZXN0IGxldmVsLiAgVGhlIHJlcXVpcmVtZW50IGZyb20KKwkgKiBwdWxsaW5nIHRoZSBidXMgc3RhdGUgZG93biB0byByZWFkaW5nIHRoZSBzdGF0ZSBpcyAxNXVzLCBzb21ldGhpbmcKKwkgKiB0aGF0IGlzbid0IHJlYWxpc3RpYyBvbiB0aGUgVVNCIGJ1cyBhbnl3YXkuCiAJZGV2LT5tYXN0ZXIucmVhZF9iaXQJPSAmZHM5NDkwcl9yZWFkX2JpdDsKIAlkZXYtPm1hc3Rlci53cml0ZV9iaXQJPSAmZHM5NDkwcl93cml0ZV9iaXQ7CisJKi8KIAlkZXYtPm1hc3Rlci5yZWFkX2J5dGUJPSAmZHM5NDkwcl9yZWFkX2J5dGU7CiAJZGV2LT5tYXN0ZXIud3JpdGVfYnl0ZQk9ICZkczk0OTByX3dyaXRlX2J5dGU7CiAJZGV2LT5tYXN0ZXIucmVhZF9ibG9jawk9ICZkczk0OTByX3JlYWRfYmxvY2s7CiAJZGV2LT5tYXN0ZXIud3JpdGVfYmxvY2sJPSAmZHM5NDkwcl93cml0ZV9ibG9jazsKIAlkZXYtPm1hc3Rlci5yZXNldF9idXMJPSAmZHM5NDkwcl9yZXNldDsKKwlkZXYtPm1hc3Rlci5zZXRfcHVsbHVwCT0gJmRzOTQ5MHJfc2V0X3B1bGx1cDsKIAogCXJldHVybiB3MV9hZGRfbWFzdGVyX2RldmljZSgmZGV2LT5tYXN0ZXIpOwogfQpAQCAtODM4LDYgKzkxNiw4IEBACiAJCXByaW50ayhLRVJOX0lORk8gIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgRFM5NDkwUiBzdHJ1Y3R1cmUuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCWRldi0+c3B1X3NsZWVwID0gMDsKKwlkZXYtPnNwdV9iaXQgPSAwOwogCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOwogCWlmICghZGV2LT51ZGV2KSB7CiAJCWVyciA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3NsYXZlcy93MV9kczI0MzEuYyBiL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjQzMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNmMwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3cxL3NsYXZlcy93MV9kczI0MzEuYwpAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIHcxX2RzMjQzMS5jIC0gdzEgZmFtaWx5IDJkIChEUzI0MzEpIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBCZXJuaGFyZCBXZWlyaWNoIDxiZXJuaGFyZC53ZWlyaWNoQHJpZWRlbC5uZXQ+CisgKgorICogSGVhdmlseSBpbnNwaXJlZCBieSB3MV9EUzI0MzMgZHJpdmVyIGZyb20gQmVuIEdhcmRuZXIgPGJnYXJkbmVyQHdhYnRlYy5jb20+CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiBWZXJzaW9uIDIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiLi4vdzEuaCIKKyNpbmNsdWRlICIuLi93MV9pbnQuaCIKKyNpbmNsdWRlICIuLi93MV9mYW1pbHkuaCIKKworI2RlZmluZSBXMV9GMkRfRUVQUk9NX1NJWkUJCTEyOAorI2RlZmluZSBXMV9GMkRfUEFHRV9DT1VOVAkJNAorI2RlZmluZSBXMV9GMkRfUEFHRV9CSVRTCQk1CisjZGVmaW5lIFcxX0YyRF9QQUdFX1NJWkUJCSgxPDxXMV9GMkRfUEFHRV9CSVRTKQorI2RlZmluZSBXMV9GMkRfUEFHRV9NQVNLCQkweDFGCisKKyNkZWZpbmUgVzFfRjJEX1NDUkFUQ0hfQklUUyAgMworI2RlZmluZSBXMV9GMkRfU0NSQVRDSF9TSVpFICAoMTw8VzFfRjJEX1NDUkFUQ0hfQklUUykKKyNkZWZpbmUgVzFfRjJEX1NDUkFUQ0hfTUFTSyAgKFcxX0YyRF9TQ1JBVENIX1NJWkUtMSkKKworI2RlZmluZSBXMV9GMkRfUkVBRF9FRVBST00JMHhGMAorI2RlZmluZSBXMV9GMkRfV1JJVEVfU0NSQVRDSAkweDBGCisjZGVmaW5lIFcxX0YyRF9SRUFEX1NDUkFUQ0gJMHhBQQorI2RlZmluZSBXMV9GMkRfQ09QWV9TQ1JBVENICTB4NTUKKworCisjZGVmaW5lIFcxX0YyRF9UUFJPR19NUwkJMTEKKworI2RlZmluZSBXMV9GMkRfUkVBRF9SRVRSSUVTCQkxMAorI2RlZmluZSBXMV9GMkRfUkVBRF9NQVhMRU4JCTgKKworLyoKKyAqIENoZWNrIHRoZSBmaWxlIHNpemUgYm91bmRzIGFuZCBhZGp1c3RzIGNvdW50IGFzIG5lZWRlZC4KKyAqIFRoaXMgd291bGQgbm90IGJlIG5lZWRlZCBpZiB0aGUgZmlsZSBzaXplIGRpZG4ndCByZXNldCB0byAwIGFmdGVyIGEgd3JpdGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHcxX2YyZF9maXhfY291bnQobG9mZl90IG9mZiwgc2l6ZV90IGNvdW50LCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAob2ZmID4gc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKG9mZiArIGNvdW50KSA+IHNpemUpCisJCXJldHVybiBzaXplIC0gb2ZmOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogUmVhZCBhIGJsb2NrIGZyb20gVzEgUk9NIHR3byB0aW1lcyBhbmQgY29tcGFyZXMgdGhlIHJlc3VsdHMuCisgKiBJZiB0aGV5IGFyZSBlcXVhbCB0aGV5IGFyZSByZXR1cm5lZCwgb3RoZXJ3aXNlIHRoZSByZWFkCisgKiBpcyByZXBlYXRlZCBXMV9GMkRfUkVBRF9SRVRSSUVTIHRpbWVzLgorICoKKyAqIGNvdW50IG11c3Qgbm90IGV4Y2VlZCBXMV9GMkRfUkVBRF9NQVhMRU4uCisgKi8KK3N0YXRpYyBpbnQgdzFfZjJkX3JlYWRibG9jayhzdHJ1Y3QgdzFfc2xhdmUgKnNsLCBpbnQgb2ZmLCBpbnQgY291bnQsIGNoYXIgKmJ1ZikKK3sKKwl1OCB3cmJ1ZlszXTsKKwl1OCBjbXBbVzFfRjJEX1JFQURfTUFYTEVOXTsKKwlpbnQgdHJpZXMgPSBXMV9GMkRfUkVBRF9SRVRSSUVTOworCisJZG8geworCQl3cmJ1ZlswXSA9IFcxX0YyRF9SRUFEX0VFUFJPTTsKKwkJd3JidWZbMV0gPSBvZmYgJiAweGZmOworCQl3cmJ1ZlsyXSA9IG9mZiA+PiA4OworCisJCWlmICh3MV9yZXNldF9zZWxlY3Rfc2xhdmUoc2wpKQorCQkJcmV0dXJuIC0xOworCisJCXcxX3dyaXRlX2Jsb2NrKHNsLT5tYXN0ZXIsIHdyYnVmLCAzKTsKKwkJdzFfcmVhZF9ibG9jayhzbC0+bWFzdGVyLCBidWYsIGNvdW50KTsKKworCQlpZiAodzFfcmVzZXRfc2VsZWN0X3NsYXZlKHNsKSkKKwkJCXJldHVybiAtMTsKKworCQl3MV93cml0ZV9ibG9jayhzbC0+bWFzdGVyLCB3cmJ1ZiwgMyk7CisJCXcxX3JlYWRfYmxvY2soc2wtPm1hc3RlciwgY21wLCBjb3VudCk7CisKKwkJaWYgKCFtZW1jbXAoY21wLCBidWYsIGNvdW50KSkKKwkJCXJldHVybiAwOworCX0gd2hpbGUgKC0tdHJpZXMpOworCisJZGV2X2Vycigmc2wtPmRldiwgInByb29mIHJlYWRpbmcgZmFpbGVkICVkIHRpbWVzXG4iLAorCQkJVzFfRjJEX1JFQURfUkVUUklFUyk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHcxX2YyZF9yZWFkX2JpbihzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCisJCQkgICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHcxX3NsYXZlICpzbCA9IGtvYmpfdG9fdzFfc2xhdmUoa29iaik7CisJaW50IHRvZG8gPSBjb3VudDsKKworCWNvdW50ID0gdzFfZjJkX2ZpeF9jb3VudChvZmYsIGNvdW50LCBXMV9GMkRfRUVQUk9NX1NJWkUpOworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJnNsLT5tYXN0ZXItPm11dGV4KTsKKworCS8qIHJlYWQgZGlyZWN0bHkgZnJvbSB0aGUgRUVQUk9NIGluIGNodW5rcyBvZiBXMV9GMkRfUkVBRF9NQVhMRU4gKi8KKwl3aGlsZSAodG9kbyA+IDApIHsKKwkJaW50IGJsb2NrX3JlYWQ7CisKKwkJaWYgKHRvZG8gPj0gVzFfRjJEX1JFQURfTUFYTEVOKQorCQkJYmxvY2tfcmVhZCA9IFcxX0YyRF9SRUFEX01BWExFTjsKKwkJZWxzZQorCQkJYmxvY2tfcmVhZCA9IHRvZG87CisKKwkJaWYgKHcxX2YyZF9yZWFkYmxvY2soc2wsIG9mZiwgYmxvY2tfcmVhZCwgYnVmKSA8IDApCisJCQljb3VudCA9IC1FSU87CisKKwkJdG9kbyAtPSBXMV9GMkRfUkVBRF9NQVhMRU47CisJCWJ1ZiArPSBXMV9GMkRfUkVBRF9NQVhMRU47CisJCW9mZiArPSBXMV9GMkRfUkVBRF9NQVhMRU47CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzbC0+bWFzdGVyLT5tdXRleCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBXcml0ZXMgdG8gdGhlIHNjcmF0Y2hwYWQgYW5kIHJlYWRzIGl0IGJhY2sgZm9yIHZlcmlmaWNhdGlvbi4KKyAqIFRoZW4gY29waWVzIHRoZSBzY3JhdGNocGFkIHRvIEVFUFJPTS4KKyAqIFRoZSBkYXRhIG11c3QgYmUgYWxpZ25lZCBhdCBXMV9GMkRfU0NSQVRDSF9TSVpFIGJ5dGVzIGFuZAorICogbXVzdCBiZSBXMV9GMkRfU0NSQVRDSF9TSVpFIGJ5dGVzIGxvbmcuCisgKiBUaGUgbWFzdGVyIG11c3QgYmUgbG9ja2VkLgorICoKKyAqIEBwYXJhbSBzbAlUaGUgc2xhdmUgc3RydWN0dXJlCisgKiBAcGFyYW0gYWRkcglBZGRyZXNzIGZvciB0aGUgd3JpdGUKKyAqIEBwYXJhbSBsZW4gICBsZW5ndGggbXVzdCBiZSA8PSAoVzFfRjJEX1BBR0VfU0laRSAtIChhZGRyICYgVzFfRjJEX1BBR0VfTUFTSykpCisgKiBAcGFyYW0gZGF0YQlUaGUgZGF0YSB0byB3cml0ZQorICogQHJldHVybgkwPVN1Y2Nlc3MgLTE9ZmFpbHVyZQorICovCitzdGF0aWMgaW50IHcxX2YyZF93cml0ZShzdHJ1Y3QgdzFfc2xhdmUgKnNsLCBpbnQgYWRkciwgaW50IGxlbiwgY29uc3QgdTggKmRhdGEpCit7CisJaW50IHRyaWVzID0gVzFfRjJEX1JFQURfUkVUUklFUzsKKwl1OCB3cmJ1Zls0XTsKKwl1OCByZGJ1ZltXMV9GMkRfU0NSQVRDSF9TSVpFICsgM107CisJdTggZXMgPSAoYWRkciArIGxlbiAtIDEpICUgVzFfRjJEX1NDUkFUQ0hfU0laRTsKKworcmV0cnk6CisKKwkvKiBXcml0ZSB0aGUgZGF0YSB0byB0aGUgc2NyYXRjaHBhZCAqLworCWlmICh3MV9yZXNldF9zZWxlY3Rfc2xhdmUoc2wpKQorCQlyZXR1cm4gLTE7CisKKwl3cmJ1ZlswXSA9IFcxX0YyRF9XUklURV9TQ1JBVENIOworCXdyYnVmWzFdID0gYWRkciAmIDB4ZmY7CisJd3JidWZbMl0gPSBhZGRyID4+IDg7CisKKwl3MV93cml0ZV9ibG9jayhzbC0+bWFzdGVyLCB3cmJ1ZiwgMyk7CisJdzFfd3JpdGVfYmxvY2soc2wtPm1hc3RlciwgZGF0YSwgbGVuKTsKKworCS8qIFJlYWQgdGhlIHNjcmF0Y2hwYWQgYW5kIHZlcmlmeSAqLworCWlmICh3MV9yZXNldF9zZWxlY3Rfc2xhdmUoc2wpKQorCQlyZXR1cm4gLTE7CisKKwl3MV93cml0ZV84KHNsLT5tYXN0ZXIsIFcxX0YyRF9SRUFEX1NDUkFUQ0gpOworCXcxX3JlYWRfYmxvY2soc2wtPm1hc3RlciwgcmRidWYsIGxlbiArIDMpOworCisJLyogQ29tcGFyZSB3aGF0IHdhcyByZWFkIGFnYWluc3QgdGhlIGRhdGEgd3JpdHRlbiAqLworCWlmICgocmRidWZbMF0gIT0gd3JidWZbMV0pIHx8IChyZGJ1ZlsxXSAhPSB3cmJ1ZlsyXSkgfHwKKwkgICAgKHJkYnVmWzJdICE9IGVzKSB8fCAobWVtY21wKGRhdGEsICZyZGJ1ZlszXSwgbGVuKSAhPSAwKSkgeworCisJCWlmICgtLXRyaWVzKQorCQkJZ290byByZXRyeTsKKworCQlkZXZfZXJyKCZzbC0+ZGV2LAorCQkJImNvdWxkIG5vdCB3cml0ZSB0byBlZXByb20sIHNjcmF0Y2hwYWQgY29tcGFyZSBmYWlsZWQgJWQgdGltZXNcbiIsCisJCQlXMV9GMkRfUkVBRF9SRVRSSUVTKTsKKworCQlyZXR1cm4gLTE7CisJfQorCisJLyogQ29weSB0aGUgc2NyYXRjaHBhZCB0byBFRVBST00gKi8KKwlpZiAodzFfcmVzZXRfc2VsZWN0X3NsYXZlKHNsKSkKKwkJcmV0dXJuIC0xOworCisJd3JidWZbMF0gPSBXMV9GMkRfQ09QWV9TQ1JBVENIOworCXdyYnVmWzNdID0gZXM7CisJdzFfd3JpdGVfYmxvY2soc2wtPm1hc3Rlciwgd3JidWYsIDQpOworCisJLyogU2xlZXAgZm9yIHRwcm9nIG1zIHRvIHdhaXQgZm9yIHRoZSB3cml0ZSB0byBjb21wbGV0ZSAqLworCW1zbGVlcChXMV9GMkRfVFBST0dfTVMpOworCisJLyogUmVzZXQgdGhlIGJ1cyB0byB3YWtlIHVwIHRoZSBFRVBST00gICovCisJdzFfcmVzZXRfYnVzKHNsLT5tYXN0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHcxX2YyZF93cml0ZV9iaW4oc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAorCQkJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB3MV9zbGF2ZSAqc2wgPSBrb2JqX3RvX3cxX3NsYXZlKGtvYmopOworCWludCBhZGRyLCBsZW47CisJaW50IGNvcHk7CisKKwljb3VudCA9IHcxX2YyZF9maXhfY291bnQob2ZmLCBjb3VudCwgVzFfRjJEX0VFUFJPTV9TSVpFKTsKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZzbC0+bWFzdGVyLT5tdXRleCk7CisKKwkvKiBDYW4gb25seSB3cml0ZSBkYXRhIGluIGJsb2NrcyBvZiB0aGUgc2l6ZSBvZiB0aGUgc2NyYXRjaHBhZCAqLworCWFkZHIgPSBvZmY7CisJbGVuID0gY291bnQ7CisJd2hpbGUgKGxlbiA+IDApIHsKKworCQkvKiBpZiBsZW4gdG9vIHNob3J0IG9yIGFkZHIgbm90IGFsaWduZWQgKi8KKwkJaWYgKGxlbiA8IFcxX0YyRF9TQ1JBVENIX1NJWkUgfHwgYWRkciAmIFcxX0YyRF9TQ1JBVENIX01BU0spIHsKKwkJCWNoYXIgdG1wW1cxX0YyRF9TQ1JBVENIX1NJWkVdOworCisJCQkvKiByZWFkIHRoZSBibG9jayBhbmQgdXBkYXRlIHRoZSBwYXJ0cyB0byBiZSB3cml0dGVuICovCisJCQlpZiAodzFfZjJkX3JlYWRibG9jayhzbCwgYWRkciAmIH5XMV9GMkRfU0NSQVRDSF9NQVNLLAorCQkJCQlXMV9GMkRfU0NSQVRDSF9TSVpFLCB0bXApKSB7CisJCQkJY291bnQgPSAtRUlPOworCQkJCWdvdG8gb3V0X3VwOworCQkJfQorCisJCQkvKiBjb3B5IGF0IG1vc3QgdG8gdGhlIGJvdW5kYXJ5IG9mIHRoZSBQQUdFIG9yIGxlbiAqLworCQkJY29weSA9IFcxX0YyRF9TQ1JBVENIX1NJWkUgLQorCQkJCShhZGRyICYgVzFfRjJEX1NDUkFUQ0hfTUFTSyk7CisKKwkJCWlmIChjb3B5ID4gbGVuKQorCQkJCWNvcHkgPSBsZW47CisKKwkJCW1lbWNweSgmdG1wW2FkZHIgJiBXMV9GMkRfU0NSQVRDSF9NQVNLXSwgYnVmLCBjb3B5KTsKKwkJCWlmICh3MV9mMmRfd3JpdGUoc2wsIGFkZHIgJiB+VzFfRjJEX1NDUkFUQ0hfTUFTSywKKwkJCQkJVzFfRjJEX1NDUkFUQ0hfU0laRSwgdG1wKSA8IDApIHsKKwkJCQljb3VudCA9IC1FSU87CisJCQkJZ290byBvdXRfdXA7CisJCQl9CisJCX0gZWxzZSB7CisKKwkJCWNvcHkgPSBXMV9GMkRfU0NSQVRDSF9TSVpFOworCQkJaWYgKHcxX2YyZF93cml0ZShzbCwgYWRkciwgY29weSwgYnVmKSA8IDApIHsKKwkJCQljb3VudCA9IC1FSU87CisJCQkJZ290byBvdXRfdXA7CisJCQl9CisJCX0KKwkJYnVmICs9IGNvcHk7CisJCWFkZHIgKz0gY29weTsKKwkJbGVuIC09IGNvcHk7CisJfQorCitvdXRfdXA6CisJbXV0ZXhfdW5sb2NrKCZzbC0+bWFzdGVyLT5tdXRleCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSB3MV9mMmRfYmluX2F0dHIgPSB7CisJLmF0dHIgPSB7CisJCS5uYW1lID0gImVlcHJvbSIsCisJCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IsCisJfSwKKwkuc2l6ZSA9IFcxX0YyRF9FRVBST01fU0laRSwKKwkucmVhZCA9IHcxX2YyZF9yZWFkX2JpbiwKKwkud3JpdGUgPSB3MV9mMmRfd3JpdGVfYmluLAorfTsKKworc3RhdGljIGludCB3MV9mMmRfYWRkX3NsYXZlKHN0cnVjdCB3MV9zbGF2ZSAqc2wpCit7CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmc2wtPmRldi5rb2JqLCAmdzFfZjJkX2Jpbl9hdHRyKTsKK30KKworc3RhdGljIHZvaWQgdzFfZjJkX3JlbW92ZV9zbGF2ZShzdHJ1Y3QgdzFfc2xhdmUgKnNsKQoreworCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmc2wtPmRldi5rb2JqLCAmdzFfZjJkX2Jpbl9hdHRyKTsKK30KKworc3RhdGljIHN0cnVjdCB3MV9mYW1pbHlfb3BzIHcxX2YyZF9mb3BzID0geworCS5hZGRfc2xhdmUgICAgICA9IHcxX2YyZF9hZGRfc2xhdmUsCisJLnJlbW92ZV9zbGF2ZSAgID0gdzFfZjJkX3JlbW92ZV9zbGF2ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzFfZmFtaWx5IHcxX2ZhbWlseV8yZCA9IHsKKwkuZmlkID0gVzFfRUVQUk9NX0RTMjQzMSwKKwkuZm9wcyA9ICZ3MV9mMmRfZm9wcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHcxX2YyZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHcxX3JlZ2lzdGVyX2ZhbWlseSgmdzFfZmFtaWx5XzJkKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHcxX2YyZF9maW5pKHZvaWQpCit7CisJdzFfdW5yZWdpc3Rlcl9mYW1pbHkoJncxX2ZhbWlseV8yZCk7Cit9CisKK21vZHVsZV9pbml0KHcxX2YyZF9pbml0KTsKK21vZHVsZV9leGl0KHcxX2YyZF9maW5pKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQmVybmhhcmQgV2VpcmljaCA8YmVybmhhcmQud2VpcmljaEByaWVkZWwubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJ3MSBmYW1pbHkgMmQgZHJpdmVyIGZvciBEUzI0MzEsIDFrYiBFRVBST00iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjc2MC5jIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNzYwLmMKaW5kZXggZWQ2YjA1Ny4uMWYwOWQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNzYwLmMKKysrIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNzYwLmMKQEAgLTgwLDcgKzgwLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAidzFfc2xhdmUiLAogCQkubW9kZSA9IFNfSVJVR08sCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSBEUzI3NjBfREFUQV9TSVpFLAogCS5yZWFkID0gdzFfZHMyNzYwX3JlYWRfYmluLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9zbGF2ZXMvdzFfdGhlcm0uYyBiL2RyaXZlcnMvdzEvc2xhdmVzL3cxX3RoZXJtLmMKaW5kZXggZmIyOGFjYS4uMmM4ZGZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9zbGF2ZXMvdzFfdGhlcm0uYworKysgYi9kcml2ZXJzL3cxL3NsYXZlcy93MV90aGVybS5jCkBAIC0zNywzMSArMzcsMzMgQEAKIE1PRFVMRV9BVVRIT1IoIkV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgMS13aXJlIERhbGxhcyBuZXR3b3JrIHByb3RvY29sLCB0ZW1wZXJhdHVyZSBmYW1pbHkuIik7CiAKKy8qIEFsbG93IHRoZSBzdHJvbmcgcHVsbHVwIHRvIGJlIGRpc2FibGVkLCBidXQgZGVmYXVsdCB0byBlbmFibGVkLgorICogSWYgaXQgd2FzIGRpc2FibGVkIGEgcGFyYXNpdGUgcG93ZXJlZCBkZXZpY2UgbWlnaHQgbm90IGdldCB0aGUgcmVxdWlyZQorICogY3VycmVudCB0byBkbyBhIHRlbXBlcmF0dXJlIGNvbnZlcnNpb24uICBJZiBpdCBpcyBlbmFibGVkIHBhcmFzaXRlIHBvd2VyZWQKKyAqIGRldmljZXMgaGF2ZSBhIGJldHRlciBjaGFuY2Ugb2YgZ2V0dGluZyB0aGUgY3VycmVudCByZXF1aXJlZC4KKyAqLworc3RhdGljIGludCB3MV9zdHJvbmdfcHVsbHVwID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChzdHJvbmdfcHVsbHVwLCB3MV9zdHJvbmdfcHVsbHVwLCBpbnQsIDApOworCiBzdGF0aWMgdTggYmFkX3JvbXNbXVs5XSA9IHsKIAkJCQl7MHhhYSwgMHgwMCwgMHg0YiwgMHg0NiwgMHhmZiwgMHhmZiwgMHgwYywgMHgxMCwgMHg4N30sCiAJCQkJe30KIAkJCX07CiAKLXN0YXRpYyBzc2l6ZV90IHcxX3RoZXJtX3JlYWRfYmluKHN0cnVjdCBrb2JqZWN0ICosIHN0cnVjdCBiaW5fYXR0cmlidXRlICosCi0JCQkJIGNoYXIgKiwgbG9mZl90LCBzaXplX3QpOworc3RhdGljIHNzaXplX3QgdzFfdGhlcm1fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CiAKLXN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSB3MV90aGVybV9iaW5fYXR0ciA9IHsKLQkuYXR0ciA9IHsKLQkJLm5hbWUgPSAidzFfc2xhdmUiLAotCQkubW9kZSA9IFNfSVJVR08sCi0JfSwKLQkuc2l6ZSA9IFcxX1NMQVZFX0RBVEFfU0laRSwKLQkucmVhZCA9IHcxX3RoZXJtX3JlYWRfYmluLAotfTsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB3MV90aGVybV9hdHRyID0KKwlfX0FUVFIodzFfc2xhdmUsIFNfSVJVR08sIHcxX3RoZXJtX3JlYWQsIE5VTEwpOwogCiBzdGF0aWMgaW50IHcxX3RoZXJtX2FkZF9zbGF2ZShzdHJ1Y3QgdzFfc2xhdmUgKnNsKQogewotCXJldHVybiBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnNsLT5kZXYua29iaiwgJncxX3RoZXJtX2Jpbl9hdHRyKTsKKwlyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKCZzbC0+ZGV2LCAmdzFfdGhlcm1fYXR0cik7CiB9CiAKIHN0YXRpYyB2b2lkIHcxX3RoZXJtX3JlbW92ZV9zbGF2ZShzdHJ1Y3QgdzFfc2xhdmUgKnNsKQogewotCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmc2wtPmRldi5rb2JqLCAmdzFfdGhlcm1fYmluX2F0dHIpOworCWRldmljZV9yZW1vdmVfZmlsZSgmc2wtPmRldiwgJncxX3RoZXJtX2F0dHIpOwogfQogCiBzdGF0aWMgc3RydWN0IHcxX2ZhbWlseV9vcHMgdzFfdGhlcm1fZm9wcyA9IHsKQEAgLTE2MCwzMCArMTYyLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHcxX3RoZXJtX3JlYWRfYmluKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkJIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgdzFfdGhlcm1fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgdzFfc2xhdmUgKnNsID0ga29ial90b193MV9zbGF2ZShrb2JqKTsKKwlzdHJ1Y3QgdzFfc2xhdmUgKnNsID0gZGV2X3RvX3cxX3NsYXZlKGRldmljZSk7CiAJc3RydWN0IHcxX21hc3RlciAqZGV2ID0gc2wtPm1hc3RlcjsKIAl1OCByb21bOV0sIGNyYywgdmVyZGljdDsKIAlpbnQgaSwgbWF4X3RyeWluZyA9IDEwOworCXNzaXplX3QgYyA9IFBBR0VfU0laRTsKIAotCW11dGV4X2xvY2soJnNsLT5tYXN0ZXItPm11dGV4KTsKKwltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAotCWlmIChvZmYgPiBXMV9TTEFWRV9EQVRBX1NJWkUpIHsKLQkJY291bnQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKG9mZiArIGNvdW50ID4gVzFfU0xBVkVfREFUQV9TSVpFKSB7Ci0JCWNvdW50ID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbWVtc2V0KGJ1ZiwgMCwgY291bnQpOwogCW1lbXNldChyb20sIDAsIHNpemVvZihyb20pKTsKIAotCWNvdW50ID0gMDsKIAl2ZXJkaWN0ID0gMDsKIAljcmMgPSAwOwogCkBAIC0xOTIsMTUgKzE4MywyMCBAQAogCQkJaW50IGNvdW50ID0gMDsKIAkJCXVuc2lnbmVkIGludCB0bSA9IDc1MDsKIAorCQkJLyogNzUwbXMgc3Ryb25nIHB1bGx1cCAob3IgZGVsYXkpIGFmdGVyIHRoZSBjb252ZXJ0ICovCisJCQlpZiAodzFfc3Ryb25nX3B1bGx1cCkKKwkJCQl3MV9uZXh0X3B1bGx1cChkZXYsIHRtKTsKIAkJCXcxX3dyaXRlXzgoZGV2LCBXMV9DT05WRVJUX1RFTVApOwotCi0JCQltc2xlZXAodG0pOworCQkJaWYgKCF3MV9zdHJvbmdfcHVsbHVwKQorCQkJCW1zbGVlcCh0bSk7CiAKIAkJCWlmICghdzFfcmVzZXRfc2VsZWN0X3NsYXZlKHNsKSkgewogCiAJCQkJdzFfd3JpdGVfOChkZXYsIFcxX1JFQURfU0NSQVRDSFBBRCk7CiAJCQkJaWYgKChjb3VudCA9IHcxX3JlYWRfYmxvY2soZGV2LCByb20sIDkpKSAhPSA5KSB7Ci0JCQkJCWRldl93YXJuKCZkZXYtPmRldiwgIncxX3JlYWRfYmxvY2soKSByZXR1cm5lZCAlZCBpbnN0ZWFkIG9mIDkuXG4iLCBjb3VudCk7CisJCQkJCWRldl93YXJuKGRldmljZSwgIncxX3JlYWRfYmxvY2soKSAiCisJCQkJCQkicmV0dXJuZWQgJXUgaW5zdGVhZCBvZiA5LlxuIiwKKwkJCQkJCWNvdW50KTsKIAkJCQl9CiAKIAkJCQljcmMgPSB3MV9jYWxjX2NyYzgocm9tLCA4KTsKQEAgLTIxNSwyMiArMjExLDIyIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IDk7ICsraSkKLQkJY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwgIiUwMnggIiwgcm9tW2ldKTsKLQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAiOiBjcmM9JTAyeCAlc1xuIiwKKwkJYyAtPSBzbnByaW50ZihidWYgKyBQQUdFX1NJWkUgLSBjLCBjLCAiJTAyeCAiLCByb21baV0pOworCWMgLT0gc25wcmludGYoYnVmICsgUEFHRV9TSVpFIC0gYywgYywgIjogY3JjPSUwMnggJXNcbiIsCiAJCQkgICBjcmMsICh2ZXJkaWN0KSA/ICJZRVMiIDogIk5PIik7CiAJaWYgKHZlcmRpY3QpCiAJCW1lbWNweShzbC0+cm9tLCByb20sIHNpemVvZihzbC0+cm9tKSk7CiAJZWxzZQotCQlkZXZfd2FybigmZGV2LT5kZXYsICIxOFMyMCBkb2Vzbid0IHJlc3BvbmQgdG8gQ09OVkVSVF9URU1QLlxuIik7CisJCWRldl93YXJuKGRldmljZSwgIjE4UzIwIGRvZXNuJ3QgcmVzcG9uZCB0byBDT05WRVJUX1RFTVAuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCA5OyArK2kpCi0JCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICIlMDJ4ICIsIHNsLT5yb21baV0pOworCQljIC09IHNucHJpbnRmKGJ1ZiArIFBBR0VfU0laRSAtIGMsIGMsICIlMDJ4ICIsIHNsLT5yb21baV0pOwogCi0JY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwgInQ9JWRcbiIsIHcxX2NvbnZlcnRfdGVtcChyb20sIHNsLT5mYW1pbHktPmZpZCkpOwotb3V0OgorCWMgLT0gc25wcmludGYoYnVmICsgUEFHRV9TSVpFIC0gYywgYywgInQ9JWRcbiIsCisJCXcxX2NvbnZlcnRfdGVtcChyb20sIHNsLT5mYW1pbHktPmZpZCkpOwogCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIFBBR0VfU0laRSAtIGM7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHcxX3RoZXJtX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvdzEuYyBiL2RyaXZlcnMvdzEvdzEuYwppbmRleCA3MjkzYzliLi4zYjYxNWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxLmMKKysrIGIvZHJpdmVycy93MS93MS5jCkBAIC00NiwxOSArNDYsMTcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciAxLXdpcmUgRGFsbGFzIG5ldHdvcmsgcHJvdG9jb2wuIik7CiAKIHN0YXRpYyBpbnQgdzFfdGltZW91dCA9IDEwOwotc3RhdGljIGludCB3MV9jb250cm9sX3RpbWVvdXQgPSAxOwogaW50IHcxX21heF9zbGF2ZV9jb3VudCA9IDEwOwogaW50IHcxX21heF9zbGF2ZV90dGwgPSAxMDsKIAogbW9kdWxlX3BhcmFtX25hbWVkKHRpbWVvdXQsIHcxX3RpbWVvdXQsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoY29udHJvbF90aW1lb3V0LCB3MV9jb250cm9sX3RpbWVvdXQsIGludCwgMCk7CiBtb2R1bGVfcGFyYW1fbmFtZWQobWF4X3NsYXZlX2NvdW50LCB3MV9tYXhfc2xhdmVfY291bnQsIGludCwgMCk7CiBtb2R1bGVfcGFyYW1fbmFtZWQoc2xhdmVfdHRsLCB3MV9tYXhfc2xhdmVfdHRsLCBpbnQsIDApOwogCiBERUZJTkVfTVVURVgodzFfbWxvY2spOwogTElTVF9IRUFEKHcxX21hc3RlcnMpOwogCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICp3MV9jb250cm9sX3RocmVhZDsKK3N0YXRpYyBpbnQgdzFfYXR0YWNoX3NsYXZlX2RldmljZShzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsIHN0cnVjdCB3MV9yZWdfbnVtICpybik7CiAKIHN0YXRpYyBpbnQgdzFfbWFzdGVyX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKQEAgLTgzLDEwICs4MSwxMCBAQAogewogCXN0cnVjdCB3MV9zbGF2ZSAqc2wgPSBkZXZfdG9fdzFfc2xhdmUoZGV2KTsKIAotCXByaW50aygiJXM6IFJlbGVhc2luZyAlcy5cbiIsIF9fZnVuY19fLCBzbC0+bmFtZSk7CisJZGV2X2RiZyhkZXYsICIlczogUmVsZWFzaW5nICVzLlxuIiwgX19mdW5jX18sIHNsLT5uYW1lKTsKIAogCXdoaWxlIChhdG9taWNfcmVhZCgmc2wtPnJlZmNudCkpIHsKLQkJcHJpbnRrKCJXYWl0aW5nIGZvciAlcyB0byBiZWNvbWUgZnJlZTogcmVmY250PSVkLlxuIiwKKwkJZGV2X2RiZyhkZXYsICJXYWl0aW5nIGZvciAlcyB0byBiZWNvbWUgZnJlZTogcmVmY250PSVkLlxuIiwKIAkJCQlzbC0+bmFtZSwgYXRvbWljX3JlYWQoJnNsLT5yZWZjbnQpKTsKIAkJaWYgKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMDApKQogCQkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKQEAgLTEwNSwzNSArMTAzLDIwIEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHNsLT5uYW1lKTsKIH0KIAotc3RhdGljIHNzaXplX3QgdzFfc2xhdmVfcmVhZF9pZChzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCB3MV9zbGF2ZV9yZWFkX2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCB3MV9zbGF2ZSAqc2wgPSBrb2JqX3RvX3cxX3NsYXZlKGtvYmopOworCXN0cnVjdCB3MV9zbGF2ZSAqc2wgPSBkZXZfdG9fdzFfc2xhdmUoZGV2KTsKKwlzc2l6ZV90IGNvdW50ID0gc2l6ZW9mKHNsLT5yZWdfbnVtKTsKIAotCWlmIChvZmYgPiA4KSB7Ci0JCWNvdW50ID0gMDsKLQl9IGVsc2UgewotCQlpZiAob2ZmICsgY291bnQgPiA4KQotCQkJY291bnQgPSA4IC0gb2ZmOwotCi0JCW1lbWNweShidWYsICh1OCAqKSZzbC0+cmVnX251bSwgY291bnQpOwotCX0KLQorCW1lbWNweShidWYsICh1OCAqKSZzbC0+cmVnX251bSwgY291bnQpOwogCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHcxX3NsYXZlX2F0dHJfbmFtZSA9CiAJX19BVFRSKG5hbWUsIFNfSVJVR08sIHcxX3NsYXZlX3JlYWRfbmFtZSwgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSB3MV9zbGF2ZV9hdHRyX2Jpbl9pZCA9IHsKLSAgICAgIC5hdHRyID0gewotICAgICAgICAgICAgICAubmFtZSA9ICJpZCIsCi0gICAgICAgICAgICAgIC5tb2RlID0gU19JUlVHTywKLSAgICAgIH0sCi0gICAgICAuc2l6ZSA9IDgsCi0gICAgICAucmVhZCA9IHcxX3NsYXZlX3JlYWRfaWQsCi19Oworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHcxX3NsYXZlX2F0dHJfaWQgPQorCV9fQVRUUihpZCwgU19JUlVHTywgdzFfc2xhdmVfcmVhZF9pZCwgTlVMTCk7CiAKIC8qIERlZmF1bHQgZmFtaWx5ICovCiAKQEAgLTI1MCwxMSArMjMzLDE2IEBACiAJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJCWNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCkKIHsKKwlsb25nIHRtcDsKIAlzdHJ1Y3QgdzFfbWFzdGVyICptZCA9IGRldl90b193MV9tYXN0ZXIoZGV2KTsKIAorCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMCwgJnRtcCkgPT0gLUVJTlZBTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltdXRleF9sb2NrKCZtZC0+bXV0ZXgpOwotCW1kLT5zZWFyY2hfY291bnQgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMCk7CisJbWQtPnNlYXJjaF9jb3VudCA9IHRtcDsKIAltdXRleF91bmxvY2soJm1kLT5tdXRleCk7CisJd2FrZV91cF9wcm9jZXNzKG1kLT50aHJlYWQpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMjczLDYgKzI2MSwzOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHNzaXplX3QgdzFfbWFzdGVyX2F0dHJpYnV0ZV9zdG9yZV9wdWxsdXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlsb25nIHRtcDsKKwlzdHJ1Y3QgdzFfbWFzdGVyICptZCA9IGRldl90b193MV9tYXN0ZXIoZGV2KTsKKworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMCwgJnRtcCkgPT0gLUVJTlZBTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZtZC0+bXV0ZXgpOworCW1kLT5lbmFibGVfcHVsbHVwID0gdG1wOworCW11dGV4X3VubG9jaygmbWQtPm11dGV4KTsKKwl3YWtlX3VwX3Byb2Nlc3MobWQtPnRocmVhZCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHcxX21hc3Rlcl9hdHRyaWJ1dGVfc2hvd19wdWxsdXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHcxX21hc3RlciAqbWQgPSBkZXZfdG9fdzFfbWFzdGVyKGRldik7CisJc3NpemVfdCBjb3VudDsKKworCW11dGV4X2xvY2soJm1kLT5tdXRleCk7CisJY291bnQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBtZC0+ZW5hYmxlX3B1bGx1cCk7CisJbXV0ZXhfdW5sb2NrKCZtZC0+bXV0ZXgpOworCisJcmV0dXJuIGNvdW50OworfQorCiBzdGF0aWMgc3NpemVfdCB3MV9tYXN0ZXJfYXR0cmlidXRlX3Nob3dfcG9pbnRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHcxX21hc3RlciAqbWQgPSBkZXZfdG9fdzFfbWFzdGVyKGRldik7CkBAIC0zMjQsNyArMzQ0LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHcxX21hc3Rlcl9hdHRyaWJ1dGVfc2hvd19zbGF2ZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgdzFfbWFzdGVyX2F0dHJpYnV0ZV9zaG93X3NsYXZlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdzFfbWFzdGVyICptZCA9IGRldl90b193MV9tYXN0ZXIoZGV2KTsKIAlpbnQgYyA9IFBBR0VfU0laRTsKQEAgLTM0OSw2ICszNzAsMTM1IEBACiAJcmV0dXJuIFBBR0VfU0laRSAtIGM7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHcxX21hc3Rlcl9hdHRyaWJ1dGVfc2hvd19hZGQoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJaW50IGMgPSBQQUdFX1NJWkU7CisJYyAtPSBzbnByaW50ZihidWYrUEFHRV9TSVpFIC0gYywgYywKKwkJIndyaXRlIGRldmljZSBpZCB4eC14eHh4eHh4eHh4eHggdG8gYWRkIHNsYXZlXG4iKTsKKwlyZXR1cm4gUEFHRV9TSVpFIC0gYzsKK30KKworc3RhdGljIGludCB3MV9hdG9yZWdfbnVtKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCisJc3RydWN0IHcxX3JlZ19udW0gKnJuKQoreworCXVuc2lnbmVkIGludCBmYW1pbHk7CisJdW5zaWduZWQgbG9uZyBsb25nIGlkOworCWludCBpOworCXU2NCBybjY0X2xlOworCisJLyogVGhlIENSQyB2YWx1ZSBpc24ndCByZWFkIGZyb20gdGhlIHVzZXIgYmVjYXVzZSB0aGUgc3lzZnMgZGlyZWN0b3J5CisJICogZG9lc24ndCBpbmNsdWRlIGl0IGFuZCBtb3N0IG1lc3NhZ2VzIGZyb20gdGhlIGJ1cyBzZWFyY2ggZG9uJ3QKKwkgKiBwcmludCBpdCBlaXRoZXIuICBJdCB3b3VsZCBiZSB1bnJlYXNvbmFibGUgZm9yIHRoZSB1c2VyIHRvIHRoZW4KKwkgKiBwcm92aWRlIGl0LgorCSAqLworCWNvbnN0IGNoYXIgKmVycm9yX21zZyA9ICJiYWQgc2xhdmUgc3RyaW5nIGZvcm1hdCwgZXhwZWN0aW5nICIKKwkJImZmLWRkZGRkZGRkZGRkZFxuIjsKKworCWlmIChidWZbMl0gIT0gJy0nKSB7CisJCWRldl9lcnIoZGV2LCAiJXMiLCBlcnJvcl9tc2cpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaSA9IHNzY2FuZihidWYsICIlMDJ4LSUwMTJsbHgiLCAmZmFtaWx5LCAmaWQpOworCWlmIChpICE9IDIpIHsKKwkJZGV2X2VycihkZXYsICIlcyIsIGVycm9yX21zZyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlybi0+ZmFtaWx5ID0gZmFtaWx5OworCXJuLT5pZCA9IGlkOworCisJcm42NF9sZSA9IGNwdV90b19sZTY0KCoodTY0ICopcm4pOworCXJuLT5jcmMgPSB3MV9jYWxjX2NyYzgoKHU4ICopJnJuNjRfbGUsIDcpOworCisjaWYgMAorCWRldl9pbmZvKGRldiwgIldpdGggQ1JDIGRldmljZSBpcyAlMDJ4LiUwMTJsbHguJTAyeC5cbiIsCisJCSAgcm4tPmZhbWlseSwgKHVuc2lnbmVkIGxvbmcgbG9uZylybi0+aWQsIHJuLT5jcmMpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworLyogU2VhcmNoZXMgdGhlIHNsYXZlcyBpbiB0aGUgdzFfbWFzdGVyIGFuZCByZXR1cm5zIGEgcG9pbnRlciBvciBOVUxMLgorICogTm90ZTogbXVzdCBob2xkIHRoZSBtdXRleAorICovCitzdGF0aWMgc3RydWN0IHcxX3NsYXZlICp3MV9zbGF2ZV9zZWFyY2hfZGV2aWNlKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwKKwlzdHJ1Y3QgdzFfcmVnX251bSAqcm4pCit7CisJc3RydWN0IHcxX3NsYXZlICpzbDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsLCAmZGV2LT5zbGlzdCwgdzFfc2xhdmVfZW50cnkpIHsKKwkJaWYgKHNsLT5yZWdfbnVtLmZhbWlseSA9PSBybi0+ZmFtaWx5ICYmCisJCQkJc2wtPnJlZ19udW0uaWQgPT0gcm4tPmlkICYmCisJCQkJc2wtPnJlZ19udW0uY3JjID09IHJuLT5jcmMpIHsKKwkJCXJldHVybiBzbDsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHNzaXplX3QgdzFfbWFzdGVyX2F0dHJpYnV0ZV9zdG9yZV9hZGQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdzFfbWFzdGVyICptZCA9IGRldl90b193MV9tYXN0ZXIoZGV2KTsKKwlzdHJ1Y3QgdzFfcmVnX251bSBybjsKKwlzdHJ1Y3QgdzFfc2xhdmUgKnNsOworCXNzaXplX3QgcmVzdWx0ID0gY291bnQ7CisKKwlpZiAodzFfYXRvcmVnX251bShkZXYsIGJ1ZiwgY291bnQsICZybikpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmbWQtPm11dGV4KTsKKwlzbCA9IHcxX3NsYXZlX3NlYXJjaF9kZXZpY2UobWQsICZybik7CisJLyogSXQgd291bGQgYmUgbmljZSB0byBkbyBhIHRhcmdldGVkIHNlYXJjaCBvbmUgdGhlIG9uZS13aXJlIGJ1cworCSAqIGZvciB0aGUgbmV3IGRldmljZSB0byBzZWUgaWYgaXQgaXMgb3V0IHRoZXJlIG9yIG5vdC4gIEJ1dCB0aGUKKwkgKiBjdXJyZW50IHNlYXJjaCBkb2Vzbid0IHN1cHBvcnQgdGhhdC4KKwkgKi8KKwlpZiAoc2wpIHsKKwkJZGV2X2luZm8oZGV2LCAiRGV2aWNlICVzIGFscmVhZHkgZXhpc3RzXG4iLCBzbC0+bmFtZSk7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJdzFfYXR0YWNoX3NsYXZlX2RldmljZShtZCwgJnJuKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZtZC0+bXV0ZXgpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHNzaXplX3QgdzFfbWFzdGVyX2F0dHJpYnV0ZV9zaG93X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgYyA9IFBBR0VfU0laRTsKKwljIC09IHNucHJpbnRmKGJ1ZitQQUdFX1NJWkUgLSBjLCBjLAorCQkid3JpdGUgZGV2aWNlIGlkIHh4LXh4eHh4eHh4eHh4eCB0byByZW1vdmUgc2xhdmVcbiIpOworCXJldHVybiBQQUdFX1NJWkUgLSBjOworfQorCitzdGF0aWMgc3NpemVfdCB3MV9tYXN0ZXJfYXR0cmlidXRlX3N0b3JlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB3MV9tYXN0ZXIgKm1kID0gZGV2X3RvX3cxX21hc3RlcihkZXYpOworCXN0cnVjdCB3MV9yZWdfbnVtIHJuOworCXN0cnVjdCB3MV9zbGF2ZSAqc2w7CisJc3NpemVfdCByZXN1bHQgPSBjb3VudDsKKworCWlmICh3MV9hdG9yZWdfbnVtKGRldiwgYnVmLCBjb3VudCwgJnJuKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZtZC0+bXV0ZXgpOworCXNsID0gdzFfc2xhdmVfc2VhcmNoX2RldmljZShtZCwgJnJuKTsKKwlpZiAoc2wpIHsKKwkJdzFfc2xhdmVfZGV0YWNoKHNsKTsKKwl9IGVsc2UgeworCQlkZXZfaW5mbyhkZXYsICJEZXZpY2UgJTAyeC0lMDEybGx4IGRvZXNuJ3QgZXhpc3RzXG4iLCBybi5mYW1pbHksCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXJuLmlkKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZtZC0+bXV0ZXgpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwogI2RlZmluZSBXMV9NQVNURVJfQVRUUl9STyhfbmFtZSwgX21vZGUpCQkJCVwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB3MV9tYXN0ZXJfYXR0cmlidXRlXyMjX25hbWUgPQlcCiAJCV9fQVRUUih3MV9tYXN0ZXJfIyNfbmFtZSwgX21vZGUsCQlcCkBAIC0zNjgsNiArNTE4LDkgQEAKIHN0YXRpYyBXMV9NQVNURVJfQVRUUl9STyh0aW1lb3V0LCBTX0lSVUdPKTsKIHN0YXRpYyBXMV9NQVNURVJfQVRUUl9STyhwb2ludGVyLCBTX0lSVUdPKTsKIHN0YXRpYyBXMV9NQVNURVJfQVRUUl9SVyhzZWFyY2gsIFNfSVJVR08gfCBTX0lXVUdPKTsKK3N0YXRpYyBXMV9NQVNURVJfQVRUUl9SVyhwdWxsdXAsIFNfSVJVR08gfCBTX0lXVUdPKTsKK3N0YXRpYyBXMV9NQVNURVJfQVRUUl9SVyhhZGQsIFNfSVJVR08gfCBTX0lXVUdPKTsKK3N0YXRpYyBXMV9NQVNURVJfQVRUUl9SVyhyZW1vdmUsIFNfSVJVR08gfCBTX0lXVUdPKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKncxX21hc3Rlcl9kZWZhdWx0X2F0dHJzW10gPSB7CiAJJncxX21hc3Rlcl9hdHRyaWJ1dGVfbmFtZS5hdHRyLApAQCAtMzc4LDYgKzUzMSw5IEBACiAJJncxX21hc3Rlcl9hdHRyaWJ1dGVfdGltZW91dC5hdHRyLAogCSZ3MV9tYXN0ZXJfYXR0cmlidXRlX3BvaW50ZXIuYXR0ciwKIAkmdzFfbWFzdGVyX2F0dHJpYnV0ZV9zZWFyY2guYXR0ciwKKwkmdzFfbWFzdGVyX2F0dHJpYnV0ZV9wdWxsdXAuYXR0ciwKKwkmdzFfbWFzdGVyX2F0dHJpYnV0ZV9hZGQuYXR0ciwKKwkmdzFfbWFzdGVyX2F0dHJpYnV0ZV9yZW1vdmUuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC0zOTAsNyArNTQ2LDcgQEAKIAlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZtYXN0ZXItPmRldi5rb2JqLCAmdzFfbWFzdGVyX2RlZmF0dHJfZ3JvdXApOwogfQogCi1zdGF0aWMgdm9pZCB3MV9kZXN0cm95X21hc3Rlcl9hdHRyaWJ1dGVzKHN0cnVjdCB3MV9tYXN0ZXIgKm1hc3RlcikKK3ZvaWQgdzFfZGVzdHJveV9tYXN0ZXJfYXR0cmlidXRlcyhzdHJ1Y3QgdzFfbWFzdGVyICptYXN0ZXIpCiB7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtYXN0ZXItPmRldi5rb2JqLCAmdzFfbWFzdGVyX2RlZmF0dHJfZ3JvdXApOwogfQpAQCAtNDc5LDcgKzYzNSw3IEBACiAJfQogCiAJLyogQ3JlYXRlICJpZCIgZW50cnkgKi8KLQllcnIgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnNsLT5kZXYua29iaiwgJncxX3NsYXZlX2F0dHJfYmluX2lkKTsKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNsLT5kZXYsICZ3MV9zbGF2ZV9hdHRyX2lkKTsKIAlpZiAoZXJyIDwgMCkgewogCQlkZXZfZXJyKCZzbC0+ZGV2LAogCQkJInN5c2ZzIGZpbGUgY3JlYXRpb24gZm9yIFslc10gZmFpbGVkLiBlcnI9JWRcbiIsCkBAIC01MDEsNyArNjU3LDcgQEAKIAlyZXR1cm4gMDsKIAogb3V0X3JlbTI6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZzbC0+ZGV2LmtvYmosICZ3MV9zbGF2ZV9hdHRyX2Jpbl9pZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZzbC0+ZGV2LCAmdzFfc2xhdmVfYXR0cl9pZCk7CiBvdXRfcmVtMToKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNsLT5kZXYsICZ3MV9zbGF2ZV9hdHRyX25hbWUpOwogb3V0X3VucmVnOgpAQCAtNTY3LDcgKzcyMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHcxX3NsYXZlX2RldGFjaChzdHJ1Y3QgdzFfc2xhdmUgKnNsKQordm9pZCB3MV9zbGF2ZV9kZXRhY2goc3RydWN0IHcxX3NsYXZlICpzbCkKIHsKIAlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgbXNnOwogCkBAIC01ODMsNyArNzM5LDcgQEAKIAltc2cudHlwZSA9IFcxX1NMQVZFX1JFTU9WRTsKIAl3MV9uZXRsaW5rX3NlbmQoc2wtPm1hc3RlciwgJm1zZyk7CiAKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnNsLT5kZXYua29iaiwgJncxX3NsYXZlX2F0dHJfYmluX2lkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNsLT5kZXYsICZ3MV9zbGF2ZV9hdHRyX2lkKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNsLT5kZXYsICZ3MV9zbGF2ZV9hdHRyX25hbWUpOwogCWRldmljZV91bnJlZ2lzdGVyKCZzbC0+ZGV2KTsKIApAQCAtNTkxLDI0ICs3NDcsNiBAQAogCWtmcmVlKHNsKTsKIH0KIAotc3RhdGljIHN0cnVjdCB3MV9tYXN0ZXIgKncxX3NlYXJjaF9tYXN0ZXIodm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgdzFfbWFzdGVyICpkZXY7Ci0JaW50IGZvdW5kID0gMDsKLQotCW11dGV4X2xvY2soJncxX21sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJncxX21hc3RlcnMsIHcxX21hc3Rlcl9lbnRyeSkgewotCQlpZiAoZGV2LT5idXNfbWFzdGVyLT5kYXRhID09IGRhdGEpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWF0b21pY19pbmMoJmRldi0+cmVmY250KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmdzFfbWxvY2spOwotCi0JcmV0dXJuIChmb3VuZCk/ZGV2Ok5VTEw7Ci19Ci0KIHN0cnVjdCB3MV9tYXN0ZXIgKncxX3NlYXJjaF9tYXN0ZXJfaWQodTMyIGlkKQogewogCXN0cnVjdCB3MV9tYXN0ZXIgKmRldjsKQEAgLTY1Niw1NSArNzk0LDU2IEBACiAJcmV0dXJuIChmb3VuZCk/c2w6TlVMTDsKIH0KIAotdm9pZCB3MV9yZWNvbm5lY3Rfc2xhdmVzKHN0cnVjdCB3MV9mYW1pbHkgKmYpCit2b2lkIHcxX3JlY29ubmVjdF9zbGF2ZXMoc3RydWN0IHcxX2ZhbWlseSAqZiwgaW50IGF0dGFjaCkKIHsKKwlzdHJ1Y3QgdzFfc2xhdmUgKnNsLCAqc2xuOwogCXN0cnVjdCB3MV9tYXN0ZXIgKmRldjsKIAogCW11dGV4X2xvY2soJncxX21sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJncxX21hc3RlcnMsIHcxX21hc3Rlcl9lbnRyeSkgewotCQlkZXZfZGJnKCZkZXYtPmRldiwgIlJlY29ubmVjdGluZyBzbGF2ZXMgaW4gJXMgaW50byBuZXcgZmFtaWx5ICUwMnguXG4iLAotCQkJCWRldi0+bmFtZSwgZi0+ZmlkKTsKLQkJc2V0X2JpdChXMV9NQVNURVJfTkVFRF9SRUNPTk5FQ1QsICZkZXYtPmZsYWdzKTsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJSZWNvbm5lY3Rpbmcgc2xhdmVzIGluIGRldmljZSAlcyAiCisJCQkiZm9yIGZhbWlseSAlMDJ4LlxuIiwgZGV2LT5uYW1lLCBmLT5maWQpOworCQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsLCBzbG4sICZkZXYtPnNsaXN0LCB3MV9zbGF2ZV9lbnRyeSkgeworCQkJLyogSWYgaXQgaXMgYSBuZXcgZmFtaWx5LCBzbGF2ZXMgd2l0aCB0aGUgZGVmYXVsdAorCQkJICogZmFtaWx5IGRyaXZlciBhbmQgYXJlIHRoYXQgZmFtaWx5IHdpbGwgYmUKKwkJCSAqIGNvbm5lY3RlZC4gIElmIHRoZSBmYW1pbHkgaXMgZ29pbmcgYXdheSwgZGV2aWNlcworCQkJICogbWF0Y2hpbmcgdGhhdCBmYW1pbHkgYXJlIHJlY29ubmVjZWQuCisJCQkgKi8KKwkJCWlmICgoYXR0YWNoICYmIHNsLT5mYW1pbHktPmZpZCA9PSBXMV9GQU1JTFlfREVGQVVMVAorCQkJCSYmIHNsLT5yZWdfbnVtLmZhbWlseSA9PSBmLT5maWQpIHx8CisJCQkJKCFhdHRhY2ggJiYgc2wtPmZhbWlseS0+ZmlkID09IGYtPmZpZCkpIHsKKwkJCQlzdHJ1Y3QgdzFfcmVnX251bSBybjsKKworCQkJCW1lbWNweSgmcm4sICZzbC0+cmVnX251bSwgc2l6ZW9mKHJuKSk7CisJCQkJdzFfc2xhdmVfZGV0YWNoKHNsKTsKKworCQkJCXcxX2F0dGFjaF9zbGF2ZV9kZXZpY2UoZGV2LCAmcm4pOworCQkJfQorCQl9CisJCWRldl9kYmcoJmRldi0+ZGV2LCAiUmVjb25uZWN0aW5nIHNsYXZlcyBpbiBkZXZpY2UgJXMgIgorCQkJImhhcyBiZWVuIGZpbmlzaGVkLlxuIiwgZGV2LT5uYW1lKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ3MV9tbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHcxX3NsYXZlX2ZvdW5kKHZvaWQgKmRhdGEsIHU2NCBybikKK3N0YXRpYyB2b2lkIHcxX3NsYXZlX2ZvdW5kKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwgdTY0IHJuKQogewotCWludCBzbGF2ZV9jb3VudDsKIAlzdHJ1Y3QgdzFfc2xhdmUgKnNsOwotCXN0cnVjdCBsaXN0X2hlYWQgKmVudDsKIAlzdHJ1Y3QgdzFfcmVnX251bSAqdG1wOwotCXN0cnVjdCB3MV9tYXN0ZXIgKmRldjsKIAl1NjQgcm5fbGUgPSBjcHVfdG9fbGU2NChybik7CiAKLQlkZXYgPSB3MV9zZWFyY2hfbWFzdGVyKGRhdGEpOwotCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGZpbmQgdzEgbWFzdGVyIGRldmljZSBmb3IgZGF0YSAlcCwgIgotCQkgICAgICAgIml0IGlzIGltcG9zc2libGUuXG4iLCBkYXRhKTsKLQkJcmV0dXJuOwotCX0KKwlhdG9taWNfaW5jKCZkZXYtPnJlZmNudCk7CiAKIAl0bXAgPSAoc3RydWN0IHcxX3JlZ19udW0gKikgJnJuOwogCi0Jc2xhdmVfY291bnQgPSAwOwotCWxpc3RfZm9yX2VhY2goZW50LCAmZGV2LT5zbGlzdCkgewotCi0JCXNsID0gbGlzdF9lbnRyeShlbnQsIHN0cnVjdCB3MV9zbGF2ZSwgdzFfc2xhdmVfZW50cnkpOwotCi0JCWlmIChzbC0+cmVnX251bS5mYW1pbHkgPT0gdG1wLT5mYW1pbHkgJiYKLQkJICAgIHNsLT5yZWdfbnVtLmlkID09IHRtcC0+aWQgJiYKLQkJICAgIHNsLT5yZWdfbnVtLmNyYyA9PSB0bXAtPmNyYykgewotCQkJc2V0X2JpdChXMV9TTEFWRV9BQ1RJVkUsIChsb25nICopJnNsLT5mbGFncyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXNsYXZlX2NvdW50Kys7Ci0JfQotCi0JaWYgKHNsYXZlX2NvdW50ID09IGRldi0+c2xhdmVfY291bnQgJiYKLQkJcm4gJiYgKChybiA+PiA1NikgJiAweGZmKSA9PSB3MV9jYWxjX2NyYzgoKHU4ICopJnJuX2xlLCA3KSkgewotCQl3MV9hdHRhY2hfc2xhdmVfZGV2aWNlKGRldiwgdG1wKTsKKwlzbCA9IHcxX3NsYXZlX3NlYXJjaF9kZXZpY2UoZGV2LCB0bXApOworCWlmIChzbCkgeworCQlzZXRfYml0KFcxX1NMQVZFX0FDVElWRSwgKGxvbmcgKikmc2wtPmZsYWdzKTsKKwl9IGVsc2UgeworCQlpZiAocm4gJiYgdG1wLT5jcmMgPT0gdzFfY2FsY19jcmM4KCh1OCAqKSZybl9sZSwgNykpCisJCQl3MV9hdHRhY2hfc2xhdmVfZGV2aWNlKGRldiwgdG1wKTsKIAl9CiAKIAlhdG9taWNfZGVjKCZkZXYtPnJlZmNudCk7CkBAIC03NzksODIgKzkxOCwyMiBAQAogCQkJLyogZXh0cmFjdCB0aGUgZGlyZWN0aW9uIHRha2VuICYgdXBkYXRlIHRoZSBkZXZpY2UgbnVtYmVyICovCiAJCQl0bXA2NCA9ICh0cmlwbGV0X3JldCA+PiAyKTsKIAkJCXJuIHw9ICh0bXA2NCA8PCBpKTsKKworCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQkJCWRldl9kYmcoJmRldi0+ZGV2LCAiQWJvcnQgdzFfc2VhcmNoXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CiAJCX0KIAogCQlpZiAoICh0cmlwbGV0X3JldCAmIDB4MDMpICE9IDB4MDMgKSB7CiAJCQlpZiAoIChkZXNjX2JpdCA9PSBsYXN0X3plcm8pIHx8IChsYXN0X3plcm8gPCAwKSkKIAkJCQlsYXN0X2RldmljZSA9IDE7CiAJCQlkZXNjX2JpdCA9IGxhc3RfemVybzsKLQkJCWNiKGRldi0+YnVzX21hc3Rlci0+ZGF0YSwgcm4pOworCQkJY2IoZGV2LCBybik7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyBpbnQgdzFfY29udHJvbCh2b2lkICpkYXRhKQotewotCXN0cnVjdCB3MV9zbGF2ZSAqc2wsICpzbG47Ci0Jc3RydWN0IHcxX21hc3RlciAqZGV2LCAqbjsKLQlpbnQgaGF2ZV90b193YWl0ID0gMDsKLQotCXNldF9mcmVlemFibGUoKTsKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCBoYXZlX3RvX3dhaXQpIHsKLQkJaGF2ZV90b193YWl0ID0gMDsKLQotCQl0cnlfdG9fZnJlZXplKCk7Ci0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHcxX2NvbnRyb2xfdGltZW91dCAqIDEwMDApOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXYsIG4sICZ3MV9tYXN0ZXJzLCB3MV9tYXN0ZXJfZW50cnkpIHsKLQkJCWlmICgha3RocmVhZF9zaG91bGRfc3RvcCgpICYmICFkZXYtPmZsYWdzKQotCQkJCWNvbnRpbnVlOwotCQkJLyoKLQkJCSAqIExpdHRsZSByYWNlOiB3ZSBjYW4gY3JlYXRlIHRocmVhZCBidXQgbm90IHNldCB0aGUgZmxhZy4KLQkJCSAqIEdldCBhIGNoYW5jZSBmb3IgZXh0ZXJuYWwgcHJvY2VzcyB0byBzZXQgZmxhZyB1cC4KLQkJCSAqLwotCQkJaWYgKCFkZXYtPmluaXRpYWxpemVkKSB7Ci0JCQkJaGF2ZV90b193YWl0ID0gMTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCB0ZXN0X2JpdChXMV9NQVNURVJfTkVFRF9FWElULCAmZGV2LT5mbGFncykpIHsKLQkJCQlzZXRfYml0KFcxX01BU1RFUl9ORUVEX0VYSVQsICZkZXYtPmZsYWdzKTsKLQotCQkJCW11dGV4X2xvY2soJncxX21sb2NrKTsKLQkJCQlsaXN0X2RlbCgmZGV2LT53MV9tYXN0ZXJfZW50cnkpOwotCQkJCW11dGV4X3VubG9jaygmdzFfbWxvY2spOwotCi0JCQkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7Ci0JCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsLCBzbG4sICZkZXYtPnNsaXN0LCB3MV9zbGF2ZV9lbnRyeSkgewotCQkJCQl3MV9zbGF2ZV9kZXRhY2goc2wpOwotCQkJCX0KLQkJCQl3MV9kZXN0cm95X21hc3Rlcl9hdHRyaWJ1dGVzKGRldik7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKLQkJCQlhdG9taWNfZGVjKCZkZXYtPnJlZmNudCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWlmICh0ZXN0X2JpdChXMV9NQVNURVJfTkVFRF9SRUNPTk5FQ1QsICZkZXYtPmZsYWdzKSkgewotCQkJCWRldl9kYmcoJmRldi0+ZGV2LCAiUmVjb25uZWN0aW5nIHNsYXZlcyBpbiBkZXZpY2UgJXMuXG4iLCBkZXYtPm5hbWUpOwotCQkJCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwotCQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbCwgc2xuLCAmZGV2LT5zbGlzdCwgdzFfc2xhdmVfZW50cnkpIHsKLQkJCQkJaWYgKHNsLT5mYW1pbHktPmZpZCA9PSBXMV9GQU1JTFlfREVGQVVMVCkgewotCQkJCQkJc3RydWN0IHcxX3JlZ19udW0gcm47Ci0KLQkJCQkJCW1lbWNweSgmcm4sICZzbC0+cmVnX251bSwgc2l6ZW9mKHJuKSk7Ci0JCQkJCQl3MV9zbGF2ZV9kZXRhY2goc2wpOwotCi0JCQkJCQl3MV9hdHRhY2hfc2xhdmVfZGV2aWNlKGRldiwgJnJuKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlkZXZfZGJnKCZkZXYtPmRldiwgIlJlY29ubmVjdGluZyBzbGF2ZXMgaW4gZGV2aWNlICVzIGhhcyBiZWVuIGZpbmlzaGVkLlxuIiwgZGV2LT5uYW1lKTsKLQkJCQljbGVhcl9iaXQoVzFfTUFTVEVSX05FRURfUkVDT05ORUNULCAmZGV2LT5mbGFncyk7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCiB2b2lkIHcxX3NlYXJjaF9wcm9jZXNzKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwgdTggc2VhcmNoX3R5cGUpCiB7CiAJc3RydWN0IHcxX3NsYXZlICpzbCwgKnNsbjsKQEAgLTg3OCwyMyArOTU3LDI5IEBACiBpbnQgdzFfcHJvY2Vzcyh2b2lkICpkYXRhKQogewogCXN0cnVjdCB3MV9tYXN0ZXIgKmRldiA9IChzdHJ1Y3QgdzFfbWFzdGVyICopIGRhdGE7CisJLyogQXMgbG9uZyBhcyB3MV90aW1lb3V0IGlzIG9ubHkgc2V0IGJ5IGEgbW9kdWxlIHBhcmFtZXRlciB0aGUgc2xlZXAKKwkgKiB0aW1lIGNhbiBiZSBjYWxjdWxhdGVkIGluIGppZmZpZXMgb25jZS4KKwkgKi8KKwljb25zdCB1bnNpZ25lZCBsb25nIGp0aW1lID0gbXNlY3NfdG9famlmZmllcyh3MV90aW1lb3V0ICogMTAwMCk7CiAKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJiAhdGVzdF9iaXQoVzFfTUFTVEVSX05FRURfRVhJVCwgJmRldi0+ZmxhZ3MpKSB7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJaWYgKGRldi0+c2VhcmNoX2NvdW50KSB7CisJCQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKKwkJCXcxX3NlYXJjaF9wcm9jZXNzKGRldiwgVzFfU0VBUkNIKTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJCX0KKwogCQl0cnlfdG9fZnJlZXplKCk7Ci0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHcxX3RpbWVvdXQgKiAxMDAwKTsKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCi0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgdGVzdF9iaXQoVzFfTUFTVEVSX05FRURfRVhJVCwgJmRldi0+ZmxhZ3MpKQorCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJYnJlYWs7CiAKLQkJaWYgKCFkZXYtPmluaXRpYWxpemVkKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGRldi0+c2VhcmNoX2NvdW50ID09IDApCi0JCQljb250aW51ZTsKLQotCQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKLQkJdzFfc2VhcmNoX3Byb2Nlc3MoZGV2LCBXMV9TRUFSQ0gpOwotCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOworCQkvKiBPbmx5IHNsZWVwIHdoZW4gdGhlIHNlYXJjaCBpcyBhY3RpdmUuICovCisJCWlmIChkZXYtPnNlYXJjaF9jb3VudCkKKwkJCXNjaGVkdWxlX3RpbWVvdXQoanRpbWUpOworCQllbHNlCisJCQlzY2hlZHVsZSgpOwogCX0KIAogCWF0b21pY19kZWMoJmRldi0+cmVmY250KTsKQEAgLTkzMiwxOCArMTAxNywxMyBAQAogCQlnb3RvIGVycl9vdXRfbWFzdGVyX3VucmVnaXN0ZXI7CiAJfQogCi0JdzFfY29udHJvbF90aHJlYWQgPSBrdGhyZWFkX3J1bih3MV9jb250cm9sLCBOVUxMLCAidzFfY29udHJvbCIpOwotCWlmIChJU19FUlIodzFfY29udHJvbF90aHJlYWQpKSB7Ci0JCXJldHZhbCA9IFBUUl9FUlIodzFfY29udHJvbF90aHJlYWQpOwotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBjcmVhdGUgY29udHJvbCB0aHJlYWQuIGVycj0lZFxuIiwKLQkJCXJldHZhbCk7Ci0JCWdvdG8gZXJyX291dF9zbGF2ZV91bnJlZ2lzdGVyOwotCX0KLQogCXJldHVybiAwOwogCisjaWYgMAorLyogRm9yIHVuZG9pbmcgdGhlIHNsYXZlIHJlZ2lzdGVyIGlmIHRoZXJlIHdhcyBhIHN0ZXAgYWZ0ZXIgaXQuICovCiBlcnJfb3V0X3NsYXZlX3VucmVnaXN0ZXI6CiAJZHJpdmVyX3VucmVnaXN0ZXIoJncxX3NsYXZlX2RyaXZlcik7CisjZW5kaWYKIAogZXJyX291dF9tYXN0ZXJfdW5yZWdpc3RlcjoKIAlkcml2ZXJfdW5yZWdpc3RlcigmdzFfbWFzdGVyX2RyaXZlcik7CkBAIC05NTksMTMgKzEwMzksMTIgQEAKIHsKIAlzdHJ1Y3QgdzFfbWFzdGVyICpkZXY7CiAKKwkvKiBTZXQgbmV0bGluayByZW1vdmFsIG1lc3NhZ2VzIGFuZCBzb21lIGNsZWFudXAgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJncxX21hc3RlcnMsIHcxX21hc3Rlcl9lbnRyeSkKIAkJX193MV9yZW1vdmVfbWFzdGVyX2RldmljZShkZXYpOwogCiAJdzFfZmluaV9uZXRsaW5rKCk7CiAKLQlrdGhyZWFkX3N0b3AodzFfY29udHJvbF90aHJlYWQpOwotCiAJZHJpdmVyX3VucmVnaXN0ZXIoJncxX3NsYXZlX2RyaXZlcik7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJncxX21hc3Rlcl9kcml2ZXIpOwogCWJ1c191bnJlZ2lzdGVyKCZ3MV9idXNfdHlwZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxLmggYi9kcml2ZXJzL3cxL3cxLmgKaW5kZXggZjFkZjUzNC4uY2RhYTZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MS5oCisrKyBiL2RyaXZlcnMvdzEvdzEuaApAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgIncxX2ZhbWlseS5oIgogCiAjZGVmaW5lIFcxX01BWE5BTUVMRU4JCTMyCi0jZGVmaW5lIFcxX1NMQVZFX0RBVEFfU0laRQkxMjgKIAogI2RlZmluZSBXMV9TRUFSQ0gJCTB4RjAKICNkZWZpbmUgVzFfQUxBUk1fU0VBUkNICQkweEVDCkBAIC03Nyw3ICs3Niw3IEBACiAJc3RydWN0IGNvbXBsZXRpb24JcmVsZWFzZWQ7CiB9OwogCi10eXBlZGVmIHZvaWQgKCogdzFfc2xhdmVfZm91bmRfY2FsbGJhY2spKHZvaWQgKiwgdTY0KTsKK3R5cGVkZWYgdm9pZCAoKncxX3NsYXZlX2ZvdW5kX2NhbGxiYWNrKShzdHJ1Y3QgdzFfbWFzdGVyICosIHU2NCk7CiAKIAogLyoqCkBAIC0xNDIsMTIgKzE0MSwxOCBAQAogCSAqLwogCXU4CQkoKnJlc2V0X2J1cykodm9pZCAqKTsKIAotCS8qKiBSZWFsbHkgbmljZSBoYXJkd2FyZSBjYW4gaGFuZGxlcyB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIFJPTSBzZWFyY2ggKi8KLQl2b2lkCQkoKnNlYXJjaCkodm9pZCAqLCB1OCwgdzFfc2xhdmVfZm91bmRfY2FsbGJhY2spOwotfTsKKwkvKioKKwkgKiBQdXQgb3V0IGEgc3Ryb25nIHB1bGwtdXAgcHVsc2Ugb2YgdGhlIHNwZWNpZmllZCBkdXJhdGlvbi4KKwkgKiBAcmV0dXJuIC0xPUVycm9yLCAwPWNvbXBsZXRlZAorCSAqLworCXU4CQkoKnNldF9wdWxsdXApKHZvaWQgKiwgaW50KTsKIAotI2RlZmluZSBXMV9NQVNURVJfTkVFRF9FWElUCQkwCi0jZGVmaW5lIFcxX01BU1RFUl9ORUVEX1JFQ09OTkVDVAkxCisJLyoqIFJlYWxseSBuaWNlIGhhcmR3YXJlIGNhbiBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgUk9NIHNlYXJjaAorCSAqICB3MV9tYXN0ZXIqIGlzIHBhc3NlZCB0byB0aGUgc2xhdmUgZm91bmQgY2FsbGJhY2suCisJICovCisJdm9pZAkJKCpzZWFyY2gpKHZvaWQgKiwgc3RydWN0IHcxX21hc3RlciAqLAorCQl1OCwgdzFfc2xhdmVfZm91bmRfY2FsbGJhY2spOworfTsKIAogc3RydWN0IHcxX21hc3RlcgogewpAQCAtMTY3LDcgKzE3MiwxMCBAQAogCXZvaWQJCQkqcHJpdjsKIAlpbnQJCQlwcml2X3NpemU7CiAKLQlsb25nCQkJZmxhZ3M7CisJLyoqIDVWIHN0cm9uZyBwdWxsdXAgZW5hYmxlZCBmbGFnLCAxIGVuYWJsZWQsIHplcm8gZGlzYWJsZWQuICovCisJaW50CQkJZW5hYmxlX3B1bGx1cDsKKwkvKiogNVYgc3Ryb25nIHB1bGx1cCBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMsIHplcm8gZGlzYWJsZWQuICovCisJaW50CQkJcHVsbHVwX2R1cmF0aW9uOwogCiAJc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWQ7CiAJc3RydWN0IG11dGV4CQltdXRleDsKQEAgLTE4MSwxMiArMTg5LDIxIEBACiB9OwogCiBpbnQgdzFfY3JlYXRlX21hc3Rlcl9hdHRyaWJ1dGVzKHN0cnVjdCB3MV9tYXN0ZXIgKik7Cit2b2lkIHcxX2Rlc3Ryb3lfbWFzdGVyX2F0dHJpYnV0ZXMoc3RydWN0IHcxX21hc3RlciAqbWFzdGVyKTsKIHZvaWQgdzFfc2VhcmNoKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwgdTggc2VhcmNoX3R5cGUsIHcxX3NsYXZlX2ZvdW5kX2NhbGxiYWNrIGNiKTsKIHZvaWQgdzFfc2VhcmNoX2RldmljZXMoc3RydWN0IHcxX21hc3RlciAqZGV2LCB1OCBzZWFyY2hfdHlwZSwgdzFfc2xhdmVfZm91bmRfY2FsbGJhY2sgY2IpOwogc3RydWN0IHcxX3NsYXZlICp3MV9zZWFyY2hfc2xhdmUoc3RydWN0IHcxX3JlZ19udW0gKmlkKTsKIHZvaWQgdzFfc2VhcmNoX3Byb2Nlc3Moc3RydWN0IHcxX21hc3RlciAqZGV2LCB1OCBzZWFyY2hfdHlwZSk7CiBzdHJ1Y3QgdzFfbWFzdGVyICp3MV9zZWFyY2hfbWFzdGVyX2lkKHUzMiBpZCk7CiAKKy8qIERpc2Nvbm5lY3QgYW5kIHJlY29ubmVjdCBkZXZpY2VzIGluIHRoZSBnaXZlbiBmYW1pbHkuICBVc2VkIGZvciBmaW5kaW5nCisgKiB1bmNsYWltZWQgZGV2aWNlcyBhZnRlciBhIGZhbWlseSBoYXMgYmVlbiByZWdpc3RlcmVkIG9yIHJlbGVhc2luZyBkZXZpY2VzCisgKiBhZnRlciBhIGZhbWlseSBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQuICBTZXQgYXR0YWNoIHRvIDEgd2hlbiBhIG5ldyBmYW1pbHkKKyAqIGhhcyBqdXN0IGJlZW4gcmVnaXN0ZXJlZCwgdG8gMCB3aGVuIGl0IGhhcyBiZWVuIHVucmVnaXN0ZXJlZC4KKyAqLwordm9pZCB3MV9yZWNvbm5lY3Rfc2xhdmVzKHN0cnVjdCB3MV9mYW1pbHkgKmYsIGludCBhdHRhY2gpOwordm9pZCB3MV9zbGF2ZV9kZXRhY2goc3RydWN0IHcxX3NsYXZlICpzbCk7CisKIHU4IHcxX3RyaXBsZXQoc3RydWN0IHcxX21hc3RlciAqZGV2LCBpbnQgYmRpcik7CiB2b2lkIHcxX3dyaXRlXzgoc3RydWN0IHcxX21hc3RlciAqLCB1OCk7CiBpbnQgdzFfcmVzZXRfYnVzKHN0cnVjdCB3MV9tYXN0ZXIgKik7CkBAIC0xOTQsNiArMjExLDcgQEAKIHZvaWQgdzFfd3JpdGVfYmxvY2soc3RydWN0IHcxX21hc3RlciAqLCBjb25zdCB1OCAqLCBpbnQpOwogdTggdzFfcmVhZF9ibG9jayhzdHJ1Y3QgdzFfbWFzdGVyICosIHU4ICosIGludCk7CiBpbnQgdzFfcmVzZXRfc2VsZWN0X3NsYXZlKHN0cnVjdCB3MV9zbGF2ZSAqc2wpOwordm9pZCB3MV9uZXh0X3B1bGx1cChzdHJ1Y3QgdzFfbWFzdGVyICosIGludCk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHcxX3NsYXZlKiBkZXZfdG9fdzFfc2xhdmUoc3RydWN0IGRldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MV9mYW1pbHkuYyBiL2RyaXZlcnMvdzEvdzFfZmFtaWx5LmMKaW5kZXggYTNjOTViZC4uNGEwOTkwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MV9mYW1pbHkuYworKysgYi9kcml2ZXJzL3cxL3cxX2ZhbWlseS5jCkBAIC00OCwxMiArNDgsMTIgQEAKIAogCWlmICghcmV0KSB7CiAJCWF0b21pY19zZXQoJm5ld2YtPnJlZmNudCwgMCk7Ci0JCW5ld2YtPm5lZWRfZXhpdCA9IDA7CiAJCWxpc3RfYWRkX3RhaWwoJm5ld2YtPmZhbWlseV9lbnRyeSwgJncxX2ZhbWlsaWVzKTsKIAl9CiAJc3Bpbl91bmxvY2soJncxX2Zsb2NrKTsKIAotCXcxX3JlY29ubmVjdF9zbGF2ZXMobmV3Zik7CisJLyogY2hlY2sgZGVmYXVsdCBkZXZpY2VzIGFnYWluc3QgdGhlIG5ldyBzZXQgb2YgZHJpdmVycyAqLworCXcxX3JlY29ubmVjdF9zbGF2ZXMobmV3ZiwgMSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzIsMTEgKzcyLDExIEBACiAJCQlicmVhazsKIAkJfQogCX0KLQotCWZlbnQtPm5lZWRfZXhpdCA9IDE7Ci0KIAlzcGluX3VubG9jaygmdzFfZmxvY2spOwogCisJLyogZGVhdGNoIGRldmljZXMgdXNpbmcgdGhpcyBmYW1pbHkgY29kZSAqLworCXcxX3JlY29ubmVjdF9zbGF2ZXMoZmVudCwgMCk7CisKIAl3aGlsZSAoYXRvbWljX3JlYWQoJmZlbnQtPnJlZmNudCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiV2FpdGluZyBmb3IgZmFtaWx5ICV1IHRvIGJlY29tZSBmcmVlOiByZWZjbnQ9JWQuXG4iLAogCQkJCWZlbnQtPmZpZCwgYXRvbWljX3JlYWQoJmZlbnQtPnJlZmNudCkpOwpAQCAtMTA5LDggKzEwOSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fdzFfZmFtaWx5X3B1dChzdHJ1Y3QgdzFfZmFtaWx5ICpmKQogewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZmLT5yZWZjbnQpKQotCQlmLT5uZWVkX2V4aXQgPSAxOworCWF0b21pY19kZWMoJmYtPnJlZmNudCk7CiB9CiAKIHZvaWQgdzFfZmFtaWx5X3B1dChzdHJ1Y3QgdzFfZmFtaWx5ICpmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MV9mYW1pbHkuaCBiL2RyaXZlcnMvdzEvdzFfZmFtaWx5LmgKaW5kZXggZWYxZTFkYS4uM2NhMWI5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MV9mYW1pbHkuaAorKysgYi9kcml2ZXJzL3cxL3cxX2ZhbWlseS5oCkBAIC0zMyw2ICszMyw3IEBACiAjZGVmaW5lIFcxX1RIRVJNX0RTMTgyMiAgCTB4MjIKICNkZWZpbmUgVzFfRUVQUk9NX0RTMjQzMyAgCTB4MjMKICNkZWZpbmUgVzFfVEhFUk1fRFMxOEIyMCAJMHgyOAorI2RlZmluZSBXMV9FRVBST01fRFMyNDMxCTB4MkQKICNkZWZpbmUgVzFfRkFNSUxZX0RTMjc2MAkweDMwCiAKICNkZWZpbmUgTUFYTkFNRUxFTgkJMzIKQEAgLTUzLDcgKzU0LDYgQEAKIAlzdHJ1Y3QgdzFfZmFtaWx5X29wcwkqZm9wczsKIAogCWF0b21pY190CQlyZWZjbnQ7Ci0JdTgJCQluZWVkX2V4aXQ7CiB9OwogCiBleHRlcm4gc3BpbmxvY2tfdCB3MV9mbG9jazsKQEAgLTYzLDYgKzYzLDUgQEAKIHN0cnVjdCB3MV9mYW1pbHkgKiB3MV9mYW1pbHlfcmVnaXN0ZXJlZCh1OCk7CiB2b2lkIHcxX3VucmVnaXN0ZXJfZmFtaWx5KHN0cnVjdCB3MV9mYW1pbHkgKik7CiBpbnQgdzFfcmVnaXN0ZXJfZmFtaWx5KHN0cnVjdCB3MV9mYW1pbHkgKik7Ci12b2lkIHcxX3JlY29ubmVjdF9zbGF2ZXMoc3RydWN0IHcxX2ZhbWlseSAqZik7CiAKICNlbmRpZiAvKiBfX1cxX0ZBTUlMWV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2ludC5jIGIvZHJpdmVycy93MS93MV9pbnQuYwppbmRleCA2ODQwZGZlLi5hM2E1NDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2ludC5jCisrKyBiL2RyaXZlcnMvdzEvdzFfaW50LmMKQEAgLTI5LDcgKzI5LDExIEBACiAjaW5jbHVkZSAidzFfbmV0bGluay5oIgogI2luY2x1ZGUgIncxX2ludC5oIgogCi1zdGF0aWMgdTMyIHcxX2lkcyA9IDE7CitzdGF0aWMgaW50IHcxX3NlYXJjaF9jb3VudCA9IC0xOyAvKiBEZWZhdWx0IGlzIGNvbnRpbnVhbCBzY2FuICovCittb2R1bGVfcGFyYW1fbmFtZWQoc2VhcmNoX2NvdW50LCB3MV9zZWFyY2hfY291bnQsIGludCwgMCk7CisKK3N0YXRpYyBpbnQgdzFfZW5hYmxlX3B1bGx1cCA9IDE7Cittb2R1bGVfcGFyYW1fbmFtZWQoZW5hYmxlX3B1bGx1cCwgdzFfZW5hYmxlX3B1bGx1cCwgaW50LCAwKTsKIAogc3RhdGljIHN0cnVjdCB3MV9tYXN0ZXIgKiB3MV9hbGxvY19kZXYodTMyIGlkLCBpbnQgc2xhdmVfY291bnQsIGludCBzbGF2ZV90dGwsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsCkBAIC01OSw4ICs2MywxMiBAQAogCWRldi0+aW5pdGlhbGl6ZWQJPSAwOwogCWRldi0+aWQJCQk9IGlkOwogCWRldi0+c2xhdmVfdHRsCQk9IHNsYXZlX3R0bDsKLSAgICAgICAgZGV2LT5zZWFyY2hfY291bnQJPSAtMTsgLyogY29udGludWFsIHNjYW4gKi8KKwlkZXYtPnNlYXJjaF9jb3VudAk9IHcxX3NlYXJjaF9jb3VudDsKKwlkZXYtPmVuYWJsZV9wdWxsdXAJPSB3MV9lbmFibGVfcHVsbHVwOwogCisJLyogMSBmb3IgdzFfcHJvY2VzcyB0byBkZWNyZW1lbnQKKwkgKiAxIGZvciBfX3cxX3JlbW92ZV9tYXN0ZXJfZGV2aWNlIHRvIGRlY3JlbWVudAorCSAqLwogCWF0b21pY19zZXQoJmRldi0+cmVmY250LCAyKTsKIAogCUlOSVRfTElTVF9IRUFEKCZkZXYtPnNsaXN0KTsKQEAgLTkzLDkgKzEwMSwxMCBAQAogCiBpbnQgdzFfYWRkX21hc3Rlcl9kZXZpY2Uoc3RydWN0IHcxX2J1c19tYXN0ZXIgKm1hc3RlcikKIHsKLQlzdHJ1Y3QgdzFfbWFzdGVyICpkZXY7CisJc3RydWN0IHcxX21hc3RlciAqZGV2LCAqZW50cnk7CiAJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IHcxX25ldGxpbmtfbXNnIG1zZzsKKwlpbnQgaWQsIGZvdW5kOwogCiAgICAgICAgIC8qIHZhbGlkYXRlIG1pbmltdW0gZnVuY3Rpb25hbGl0eSAqLwogICAgICAgICBpZiAoIShtYXN0ZXItPnRvdWNoX2JpdCAmJiBtYXN0ZXItPnJlc2V0X2J1cykgJiYKQEAgLTEwNCwxMCArMTEzLDUwIEBACiAJCXByaW50ayhLRVJOX0VSUiAidzFfYWRkX21hc3Rlcl9kZXZpY2U6IGludmFsaWQgZnVuY3Rpb24gc2V0XG4iKTsKIAkJcmV0dXJuKC1FSU5WQUwpOwogICAgICAgICB9CisJLyogV2hpbGUgaXQgd291bGQgYmUgZWxlY3RyaWNhbGx5IHBvc3NpYmxlIHRvIG1ha2UgYSBkZXZpY2UgdGhhdAorCSAqIGdlbmVyYXRlZCBhIHN0cm9uZyBwdWxsdXAgaW4gYml0IGJhbmcgbW9kZSwgb25seSBoYXJkYXJlIHRoYXQKKwkgKiBjb250cm9scyAxLXdpcmUgdGltZSBmcmFtZXMgYXJlIGV2ZW4gZXhwZWN0ZWQgdG8gc3VwcG9ydCBhIHN0cm9uZworCSAqIHB1bGx1cC4gIHcxX2lvLmMgd291bGQgbmVlZCB0byBzdXBwb3J0IGNhbGxpbmcgc2V0X3B1bGx1cCBiZWZvcmUKKwkgKiB0aGUgbGFzdCB3cml0ZV9iaXQgb3BlcmF0aW9uIG9mIGEgdzFfd3JpdGVfOCB3aGljaCBpdCBjdXJyZW50bHkKKwkgKiBkb2Vzbid0LgorCSAqLworCWlmICghbWFzdGVyLT53cml0ZV9ieXRlICYmICFtYXN0ZXItPnRvdWNoX2JpdCAmJiBtYXN0ZXItPnNldF9wdWxsdXApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ3MV9hZGRfbWFzdGVyX2RldmljZTogc2V0X3B1bGx1cCByZXF1aXJlcyAiCisJCQkid3JpdGVfYnl0ZSBvciB0b3VjaF9iaXQsIGRpc2FibGluZ1xuIik7CisJCW1hc3Rlci0+c2V0X3B1bGx1cCA9IE5VTEw7CisJfQogCi0JZGV2ID0gdzFfYWxsb2NfZGV2KHcxX2lkcysrLCB3MV9tYXhfc2xhdmVfY291bnQsIHcxX21heF9zbGF2ZV90dGwsICZ3MV9tYXN0ZXJfZHJpdmVyLCAmdzFfbWFzdGVyX2RldmljZSk7Ci0JaWYgKCFkZXYpCisJLyogTG9jayB1bnRpbCB0aGUgZGV2aWNlIGlzIGFkZGVkIChvciBub3QpIHRvIHcxX21hc3RlcnMuICovCisJbXV0ZXhfbG9jaygmdzFfbWxvY2spOworCS8qIFNlYXJjaCBmb3IgdGhlIGZpcnN0IGF2YWlsYWJsZSBpZCAoc3RhcnRpbmcgYXQgMSkuICovCisJaWQgPSAwOworCWRvIHsKKwkJKytpZDsKKwkJZm91bmQgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmdzFfbWFzdGVycywgdzFfbWFzdGVyX2VudHJ5KSB7CisJCQlpZiAoZW50cnktPmlkID09IGlkKSB7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSB3aGlsZSAoZm91bmQpOworCisJZGV2ID0gdzFfYWxsb2NfZGV2KGlkLCB3MV9tYXhfc2xhdmVfY291bnQsIHcxX21heF9zbGF2ZV90dGwsCisJCSZ3MV9tYXN0ZXJfZHJpdmVyLCAmdzFfbWFzdGVyX2RldmljZSk7CisJaWYgKCFkZXYpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ3MV9tbG9jayk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHZhbCA9ICB3MV9jcmVhdGVfbWFzdGVyX2F0dHJpYnV0ZXMoZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCW11dGV4X3VubG9jaygmdzFfbWxvY2spOworCQlnb3RvIGVycl9vdXRfZnJlZV9kZXY7CisJfQorCisJbWVtY3B5KGRldi0+YnVzX21hc3RlciwgbWFzdGVyLCBzaXplb2Yoc3RydWN0IHcxX2J1c19tYXN0ZXIpKTsKKworCWRldi0+aW5pdGlhbGl6ZWQgPSAxOwogCiAJZGV2LT50aHJlYWQgPSBrdGhyZWFkX3J1bigmdzFfcHJvY2VzcywgZGV2LCAiJXMiLCBkZXYtPm5hbWUpOwogCWlmIChJU19FUlIoZGV2LT50aHJlYWQpKSB7CkBAIC0xMTUsMTggKzE2NCwxMCBAQAogCQlkZXZfZXJyKCZkZXYtPmRldiwKIAkJCSAiRmFpbGVkIHRvIGNyZWF0ZSBuZXcga2VybmVsIHRocmVhZC4gZXJyPSVkXG4iLAogCQkJIHJldHZhbCk7Ci0JCWdvdG8gZXJyX291dF9mcmVlX2RldjsKKwkJbXV0ZXhfdW5sb2NrKCZ3MV9tbG9jayk7CisJCWdvdG8gZXJyX291dF9ybV9hdHRyOwogCX0KIAotCXJldHZhbCA9ICB3MV9jcmVhdGVfbWFzdGVyX2F0dHJpYnV0ZXMoZGV2KTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGVycl9vdXRfa2lsbF90aHJlYWQ7Ci0KLQltZW1jcHkoZGV2LT5idXNfbWFzdGVyLCBtYXN0ZXIsIHNpemVvZihzdHJ1Y3QgdzFfYnVzX21hc3RlcikpOwotCi0JZGV2LT5pbml0aWFsaXplZCA9IDE7Ci0KLQltdXRleF9sb2NrKCZ3MV9tbG9jayk7CiAJbGlzdF9hZGQoJmRldi0+dzFfbWFzdGVyX2VudHJ5LCAmdzFfbWFzdGVycyk7CiAJbXV0ZXhfdW5sb2NrKCZ3MV9tbG9jayk7CiAKQEAgLTEzNyw4ICsxNzgsMTIgQEAKIAogCXJldHVybiAwOwogCisjaWYgMCAvKiBUaHJlYWQgY2xlYW51cCBjb2RlLCBub3QgcmVxdWlyZWQgY3VycmVudGx5LiAqLwogZXJyX291dF9raWxsX3RocmVhZDoKIAlrdGhyZWFkX3N0b3AoZGV2LT50aHJlYWQpOworI2VuZGlmCitlcnJfb3V0X3JtX2F0dHI6CisJdzFfZGVzdHJveV9tYXN0ZXJfYXR0cmlidXRlcyhkZXYpOwogZXJyX291dF9mcmVlX2RldjoKIAl3MV9mcmVlX2RldihkZXYpOwogCkBAIC0xNDgsMTAgKzE5MywyMSBAQAogdm9pZCBfX3cxX3JlbW92ZV9tYXN0ZXJfZGV2aWNlKHN0cnVjdCB3MV9tYXN0ZXIgKmRldikKIHsKIAlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgbXNnOworCXN0cnVjdCB3MV9zbGF2ZSAqc2wsICpzbG47CiAKLQlzZXRfYml0KFcxX01BU1RFUl9ORUVEX0VYSVQsICZkZXYtPmZsYWdzKTsKIAlrdGhyZWFkX3N0b3AoZGV2LT50aHJlYWQpOwogCisJbXV0ZXhfbG9jaygmdzFfbWxvY2spOworCWxpc3RfZGVsKCZkZXYtPncxX21hc3Rlcl9lbnRyeSk7CisJbXV0ZXhfdW5sb2NrKCZ3MV9tbG9jayk7CisKKwltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2wsIHNsbiwgJmRldi0+c2xpc3QsIHcxX3NsYXZlX2VudHJ5KQorCQl3MV9zbGF2ZV9kZXRhY2goc2wpOworCXcxX2Rlc3Ryb3lfbWFzdGVyX2F0dHJpYnV0ZXMoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOworCWF0b21pY19kZWMoJmRldi0+cmVmY250KTsKKwogCXdoaWxlIChhdG9taWNfcmVhZCgmZGV2LT5yZWZjbnQpKSB7CiAJCWRldl9pbmZvKCZkZXYtPmRldiwgIldhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlOiByZWZjbnQ9JWQuXG4iLAogCQkJCWRldi0+bmFtZSwgYXRvbWljX3JlYWQoJmRldi0+cmVmY250KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2lvLmMgYi9kcml2ZXJzL3cxL3cxX2lvLmMKaW5kZXggMzBiNmZiZi4uZjRmODJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MV9pby5jCisrKyBiL2RyaXZlcnMvdzEvdzFfaW8uYwpAQCAtOTMsNiArOTMsNDAgQEAKIH0KIAogLyoqCisgKiBQcmUtd3JpdGUgb3BlcmF0aW9uLCBjdXJyZW50bHkgb25seSBzdXBwb3J0aW5nIHN0cm9uZyBwdWxsdXBzLgorICogUHJvZ3JhbSB0aGUgaGFyZHdhcmUgZm9yIGEgc3Ryb25nIHB1bGx1cCwgaWYgb25lIGhhcyBiZWVuIHJlcXVlc3RlZCBhbmQKKyAqIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBpdC4KKyAqCisgKiBAcGFyYW0gZGV2ICAgICB0aGUgbWFzdGVyIGRldmljZQorICovCitzdGF0aWMgdm9pZCB3MV9wcmVfd3JpdGUoc3RydWN0IHcxX21hc3RlciAqZGV2KQoreworCWlmIChkZXYtPnB1bGx1cF9kdXJhdGlvbiAmJgorCQlkZXYtPmVuYWJsZV9wdWxsdXAgJiYgZGV2LT5idXNfbWFzdGVyLT5zZXRfcHVsbHVwKSB7CisJCWRldi0+YnVzX21hc3Rlci0+c2V0X3B1bGx1cChkZXYtPmJ1c19tYXN0ZXItPmRhdGEsCisJCQlkZXYtPnB1bGx1cF9kdXJhdGlvbik7CisJfQorfQorCisvKioKKyAqIFBvc3Qtd3JpdGUgb3BlcmF0aW9uLCBjdXJyZW50bHkgb25seSBzdXBwb3J0aW5nIHN0cm9uZyBwdWxsdXBzLgorICogSWYgYSBzdHJvbmcgcHVsbHVwIHdhcyByZXF1ZXN0ZWQsIGNsZWFyIGl0IGlmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cworICogdGhlbSwgb3IgZXhlY3V0ZSB0aGUgZGVsYXkgb3RoZXJ3aXNlLCBpbiBlaXRoZXIgY2FzZSBjbGVhciB0aGUgcmVxdWVzdC4KKyAqCisgKiBAcGFyYW0gZGV2ICAgICB0aGUgbWFzdGVyIGRldmljZQorICovCitzdGF0aWMgdm9pZCB3MV9wb3N0X3dyaXRlKHN0cnVjdCB3MV9tYXN0ZXIgKmRldikKK3sKKwlpZiAoZGV2LT5wdWxsdXBfZHVyYXRpb24pIHsKKwkJaWYgKGRldi0+ZW5hYmxlX3B1bGx1cCAmJiBkZXYtPmJ1c19tYXN0ZXItPnNldF9wdWxsdXApCisJCQlkZXYtPmJ1c19tYXN0ZXItPnNldF9wdWxsdXAoZGV2LT5idXNfbWFzdGVyLT5kYXRhLCAwKTsKKwkJZWxzZQorCQkJbXNsZWVwKGRldi0+cHVsbHVwX2R1cmF0aW9uKTsKKwkJZGV2LT5wdWxsdXBfZHVyYXRpb24gPSAwOworCX0KK30KKworLyoqCiAgKiBXcml0ZXMgOCBiaXRzLgogICoKICAqIEBwYXJhbSBkZXYgICAgIHRoZSBtYXN0ZXIgZGV2aWNlCkBAIC0xMDIsMTEgKzEzNiwxNyBAQAogewogCWludCBpOwogCi0JaWYgKGRldi0+YnVzX21hc3Rlci0+d3JpdGVfYnl0ZSkKKwlpZiAoZGV2LT5idXNfbWFzdGVyLT53cml0ZV9ieXRlKSB7CisJCXcxX3ByZV93cml0ZShkZXYpOwogCQlkZXYtPmJ1c19tYXN0ZXItPndyaXRlX2J5dGUoZGV2LT5idXNfbWFzdGVyLT5kYXRhLCBieXRlKTsKKwl9CiAJZWxzZQotCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7CisJCQlpZiAoaSA9PSA3KQorCQkJCXcxX3ByZV93cml0ZShkZXYpOwogCQkJdzFfdG91Y2hfYml0KGRldiwgKGJ5dGUgPj4gaSkgJiAweDEpOworCQl9CisJdzFfcG9zdF93cml0ZShkZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodzFfd3JpdGVfOCk7CiAKQEAgLTIwMywxMSArMjQzLDE0IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoZGV2LT5idXNfbWFzdGVyLT53cml0ZV9ibG9jaykKKwlpZiAoZGV2LT5idXNfbWFzdGVyLT53cml0ZV9ibG9jaykgeworCQl3MV9wcmVfd3JpdGUoZGV2KTsKIAkJZGV2LT5idXNfbWFzdGVyLT53cml0ZV9ibG9jayhkZXYtPmJ1c19tYXN0ZXItPmRhdGEsIGJ1ZiwgbGVuKTsKKwl9CiAJZWxzZQogCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCi0JCQl3MV93cml0ZV84KGRldiwgYnVmW2ldKTsKKwkJCXcxX3dyaXRlXzgoZGV2LCBidWZbaV0pOyAvKiBjYWxscyB3MV9wcmVfd3JpdGUgKi8KKwl3MV9wb3N0X3dyaXRlKGRldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh3MV93cml0ZV9ibG9jayk7CiAKQEAgLTI1MCwxMiArMjkzLDI0IEBACiAJCXJlc3VsdCA9IGRldi0+YnVzX21hc3Rlci0+cmVzZXRfYnVzKGRldi0+YnVzX21hc3Rlci0+ZGF0YSkgJiAweDE7CiAJZWxzZSB7CiAJCWRldi0+YnVzX21hc3Rlci0+d3JpdGVfYml0KGRldi0+YnVzX21hc3Rlci0+ZGF0YSwgMCk7CisJCS8qIG1pbmltdW0gNDgwLCBtYXggPyB1cworCQkgKiBiZSBuaWNlIGFuZCBzbGVlcCwgZXhjZXB0IDE4YjIwIHNwZWMgbGlzdHMgOTYwdXMgbWF4aW11bSwKKwkJICogc28gdW50aWwgd2UgY2FuIHNsZWVwIHdpdGggbWljcm9zZWNvbmQgYWNjdXJhY3ksIHNwaW4uCisJCSAqIEZlZWwgZnJlZSB0byBjb21lIHVwIHdpdGggc29tZSBvdGhlciB3YXkgdG8gZ2l2ZSB1cCB0aGUKKwkJICogY3B1IGZvciBzdWNoIGEgc2hvcnQgYW1vdW50IG9mIHRpbWUgQU5EIGdldCBpdCBiYWNrIGluCisJCSAqIHRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lLgorCQkgKi8KIAkJdzFfZGVsYXkoNDgwKTsKIAkJZGV2LT5idXNfbWFzdGVyLT53cml0ZV9iaXQoZGV2LT5idXNfbWFzdGVyLT5kYXRhLCAxKTsKIAkJdzFfZGVsYXkoNzApOwogCiAJCXJlc3VsdCA9IGRldi0+YnVzX21hc3Rlci0+cmVhZF9iaXQoZGV2LT5idXNfbWFzdGVyLT5kYXRhKSAmIDB4MTsKLQkJdzFfZGVsYXkoNDEwKTsKKwkJLyogbWlubXVtIDcwIChhYm92ZSkgKyA0MTAgPSA0ODAgdXMKKwkJICogVGhlcmUgYXJlbid0IGFueSB0aW1pbmcgcmVxdWlyZW1lbnRzIGJldHdlZW4gYSByZXNldCBhbmQKKwkJICogdGhlIGZvbGxvd2luZyB0cmFuc2FjdGlvbnMuICBTbGVlcGluZyBpcyBzYWZlIGhlcmUuCisJCSAqLworCQkvKiB3MV9kZWxheSg0MTApOyBtaW4gcmVxdWlyZWQgdGltZSAqLworCQltc2xlZXAoMSk7CiAJfQogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTI3Nyw3ICszMzIsOCBAQAogewogCWRldi0+YXR0ZW1wdHMrKzsKIAlpZiAoZGV2LT5idXNfbWFzdGVyLT5zZWFyY2gpCi0JCWRldi0+YnVzX21hc3Rlci0+c2VhcmNoKGRldi0+YnVzX21hc3Rlci0+ZGF0YSwgc2VhcmNoX3R5cGUsIGNiKTsKKwkJZGV2LT5idXNfbWFzdGVyLT5zZWFyY2goZGV2LT5idXNfbWFzdGVyLT5kYXRhLCBkZXYsCisJCQlzZWFyY2hfdHlwZSwgY2IpOwogCWVsc2UKIAkJdzFfc2VhcmNoKGRldiwgc2VhcmNoX3R5cGUsIGNiKTsKIH0KQEAgLTMwNSwzICszNjEsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHcxX3Jlc2V0X3NlbGVjdF9zbGF2ZSk7CisKKy8qKgorICogUHV0IG91dCBhIHN0cm9uZyBwdWxsLXVwIG9mIHRoZSBzcGVjaWZpZWQgZHVyYXRpb24gYWZ0ZXIgdGhlIG5leHQgd3JpdGUKKyAqIG9wZXJhdGlvbi4gIE5vdCBhbGwgaGFyZHdhcmUgc3VwcG9ydHMgc3Ryb25nIHB1bGx1cHMuICBIYXJkd2FyZSB0aGF0CisgKiBkb2Vzbid0IHN1cHBvcnQgc3Ryb25nIHB1bGx1cHMgd2lsbCBzbGVlcCBmb3IgdGhlIGdpdmVuIHRpbWUgYWZ0ZXIgdGhlCisgKiB3cml0ZSBvcGVyYXRpb24gd2l0aG91dCBhIHN0cm9uZyBwdWxsdXAuICBUaGlzIGlzIGEgb25lIHNob3QgcmVxdWVzdCBmb3IKKyAqIHRoZSBuZXh0IHdyaXRlLCBzcGVjaWZ5aW5nIHplcm8gd2lsbCBjbGVhciBhIHByZXZpb3VzIHJlcXVlc3QuCisgKiBUaGUgdzEgbWFzdGVyIGxvY2sgbXVzdCBiZSBoZWxkLgorICoKKyAqIEBwYXJhbSBkZWxheQl0aW1lIGluIG1pbGxpc2Vjb25kcworICogQHJldHVybgkwPXN1Y2Nlc3MsIGFueXRoaW5nIGVsc2U9ZXJyb3IKKyAqLwordm9pZCB3MV9uZXh0X3B1bGx1cChzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsIGludCBkZWxheSkKK3sKKwlkZXYtPnB1bGx1cF9kdXJhdGlvbiA9IGRlbGF5OworfQorRVhQT1JUX1NZTUJPTF9HUEwodzFfbmV4dF9wdWxsdXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pYjcwMHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pYjcwMHdkdC5jCmluZGV4IDA1YTI4MTAuLjg3ODJlYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaWI3MDB3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2liNzAwd2R0LmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZvciAoaSA9IDB4MEY7IGkgPiAtMTsgaS0tKQotCQlpZiAod2RfdGltZXNbaV0gPiB0KQorCQlpZiAod2RfdGltZXNbaV0gPj0gdCkKIAkJCWJyZWFrOwogCXdkX21hcmdpbiA9IGk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9ldmVudHMuYyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCmluZGV4IGMzMjkwYmMuLjljZTFhYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2V2ZW50cy5jCisrKyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAogCUJVR19PTihpcnEgPT0gLTEpOwogI2lmZGVmIENPTkZJR19TTVAKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gY3B1bWFza19vZl9jcHUoY3B1KTsKKwlpcnFfdG9fZGVzYyhpcnEpLT5hZmZpbml0eSA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CiAjZW5kaWYKIAogCV9fY2xlYXJfYml0KGNobiwgY3B1X2V2dGNobl9tYXNrW2NwdV9ldnRjaG5bY2huXV0pOwpAQCAtMTM3LDEwICsxMzcsMTIgQEAKIHN0YXRpYyB2b2lkIGluaXRfZXZ0Y2huX2NwdV9iaW5kaW5ncyh2b2lkKQogewogI2lmZGVmIENPTkZJR19TTVAKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJaW50IGk7CisKIAkvKiBCeSBkZWZhdWx0IGFsbCBldmVudCBjaGFubmVscyBub3RpZnkgQ1BVIzAuICovCi0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKLQkJaXJxX2Rlc2NbaV0uYWZmaW5pdHkgPSBjcHVtYXNrX29mX2NwdSgwKTsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKQorCQlkZXNjLT5hZmZpbml0eSA9IGNwdW1hc2tfb2ZfY3B1KDApOwogI2VuZGlmCiAKIAltZW1zZXQoY3B1X2V2dGNobiwgMCwgc2l6ZW9mKGNwdV9ldnRjaG4pKTsKQEAgLTIyOSwxMiArMjMxLDEyIEBACiAJaW50IGlycTsKIAogCS8qIE9ubHkgYWxsb2NhdGUgZnJvbSBkeW5pcnEgcmFuZ2UgKi8KLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKQorCWZvcl9lYWNoX2lycV9ucihpcnEpCiAJCWlmIChpcnFfYmluZGNvdW50W2lycV0gPT0gMCkKIAkJCWJyZWFrOwogCi0JaWYgKGlycSA9PSBOUl9JUlFTKQotCQlwYW5pYygiTm8gYXZhaWxhYmxlIElSUSB0byBiaW5kIHRvOiBpbmNyZWFzZSBOUl9JUlFTIVxuIik7CisJaWYgKGlycSA9PSBucl9pcnFzKQorCQlwYW5pYygiTm8gYXZhaWxhYmxlIElSUSB0byBiaW5kIHRvOiBpbmNyZWFzZSBucl9pcnFzIVxuIik7CiAKIAlyZXR1cm4gaXJxOwogfQpAQCAtNzkwLDcgKzc5Miw3IEBACiAJCW1hc2tfZXZ0Y2huKGV2dGNobik7CiAKIAkvKiBObyBJUlEgPC0+IGV2ZW50LWNoYW5uZWwgbWFwcGluZ3MuICovCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykKKwlmb3JfZWFjaF9pcnFfbnIoaXJxKQogCQlpcnFfaW5mb1tpcnFdLmV2dGNobiA9IDA7IC8qIHphcCBldmVudC1jaGFubmVsIGJpbmRpbmcgKi8KIAogCWZvciAoZXZ0Y2huID0gMDsgZXZ0Y2huIDwgTlJfRVZFTlRfQ0hBTk5FTFM7IGV2dGNobisrKQpAQCAtODIyLDcgKzgyNCw3IEBACiAJCW1hc2tfZXZ0Y2huKGkpOwogCiAJLyogRHluYW1pYyBJUlEgc3BhY2UgaXMgY3VycmVudGx5IHVuYm91bmQuIFplcm8gdGhlIHJlZmNudHMuICovCi0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKKwlmb3JfZWFjaF9pcnFfbnIoaSkKIAkJaXJxX2JpbmRjb3VudFtpXSA9IDA7CiAKIAlpcnFfY3R4X2luaXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnMuYyBiL2ZzLzlwL3Y5ZnMuYwppbmRleCAwNDdjNzkxLi4yNGViMDEwIDEwMDY0NAotLS0gYS9mcy85cC92OWZzLmMKKysrIGIvZnMvOXAvdjlmcy5jCkBAIC0zMCw4ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bmV0LzlwLzlwLmg+Ci0jaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KKyNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSAidjlmcy5oIgogI2luY2x1ZGUgInY5ZnNfdmZzLmgiCiAKQEAgLTU1LDcgKzU1LDcgQEAKIAlPcHRfZXJyCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9kZWJ1ZywgImRlYnVnPSV4In0sCiAJe09wdF9kZmx0dWlkLCAiZGZsdHVpZD0ldSJ9LAogCXtPcHRfZGZsdGdpZCwgImRmbHRnaWQ9JXUifSwKQEAgLTIzNCw3ICsyMzQsNyBAQAogCWlmICghdjlzZXMtPmNsbnQtPmRvdHUpCiAJCXY5c2VzLT5mbGFncyAmPSB+VjlGU19FWFRFTkRFRDsKIAotCXY5c2VzLT5tYXhkYXRhID0gdjlzZXMtPmNsbnQtPm1zaXplOworCXY5c2VzLT5tYXhkYXRhID0gdjlzZXMtPmNsbnQtPm1zaXplIC0gUDlfSU9IRFJTWjsKIAogCS8qIGZvciBsZWdhY3kgbW9kZSwgZmFsbCBiYWNrIHRvIFY5RlNfQUNDRVNTX0FOWSAqLwogCWlmICghdjlmc19leHRlbmRlZCh2OXNlcykgJiYKZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnNfdmZzLmggYi9mcy85cC92OWZzX3Zmcy5oCmluZGV4IDU3OTk3ZmEuLmMyOTViYTcgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Y5ZnNfdmZzLmgKKysrIGIvZnMvOXAvdjlmc192ZnMuaApAQCAtNDYsOSArNDYsMTEgQEAKIAogc3RydWN0IGlub2RlICp2OWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSk7CiBpbm9fdCB2OWZzX3FpZDJpbm8oc3RydWN0IHA5X3FpZCAqcWlkKTsKLXZvaWQgdjlmc19zdGF0Mmlub2RlKHN0cnVjdCBwOV9zdGF0ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Cit2b2lkIHY5ZnNfc3RhdDJpbm9kZShzdHJ1Y3QgcDlfd3N0YXQgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGludCB2OWZzX2Rpcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKIGludCB2OWZzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci12b2lkIHY5ZnNfaW5vZGUyc3RhdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcDlfc3RhdCAqc3RhdCk7Cit2b2lkIHY5ZnNfaW5vZGUyc3RhdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcDlfd3N0YXQgKnN0YXQpOwogdm9pZCB2OWZzX2RlbnRyeV9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKik7CiBpbnQgdjlmc191ZmxhZ3Myb21vZGUoaW50IHVmbGFncywgaW50IGV4dGVuZGVkKTsKKworc3NpemVfdCB2OWZzX2ZpbGVfcmVhZG4oc3RydWN0IGZpbGUgKiwgY2hhciAqLCBjaGFyIF9fdXNlciAqLCB1MzIsIHU2NCk7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfYWRkci5jIGIvZnMvOXAvdmZzX2FkZHIuYwppbmRleCA5N2QzYWVkLi42ZmNiMWU3IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfYWRkci5jCisrKyBiL2ZzLzlwL3Zmc19hZGRyLmMKQEAgLTM4LDcgKzM4LDYgQEAKIAogI2luY2x1ZGUgInY5ZnMuaCIKICNpbmNsdWRlICJ2OWZzX3Zmcy5oIgotI2luY2x1ZGUgImZpZC5oIgogCiAvKioKICAqIHY5ZnNfdmZzX3JlYWRwYWdlIC0gcmVhZCBhbiBlbnRpcmUgcGFnZSBpbiBmcm9tIDlQCkBAIC01MywxNCArNTIsMTIgQEAKIAlpbnQgcmV0dmFsOwogCWxvZmZfdCBvZmZzZXQ7CiAJY2hhciAqYnVmZmVyOwotCXN0cnVjdCBwOV9maWQgKmZpZDsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiXG4iKTsKLQlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJYnVmZmVyID0ga21hcChwYWdlKTsKIAlvZmZzZXQgPSBwYWdlX29mZnNldChwYWdlKTsKIAotCXJldHZhbCA9IHA5X2NsaWVudF9yZWFkbihmaWQsIGJ1ZmZlciwgb2Zmc2V0LCBQQUdFX0NBQ0hFX1NJWkUpOworCXJldHZhbCA9IHY5ZnNfZmlsZV9yZWFkbihmaWxwLCBidWZmZXIsIE5VTEwsIG9mZnNldCwgUEFHRV9DQUNIRV9TSVpFKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBkb25lOwogCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZGlyLmMgYi9mcy85cC92ZnNfZGlyLmMKaW5kZXggZTI5OGZlMS4uODczY2QzMSAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2Rpci5jCisrKyBiL2ZzLzlwL3Zmc19kaXIuYwpAQCAtNDUsNyArNDUsNyBAQAogICoKICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBkdF90eXBlKHN0cnVjdCBwOV9zdGF0ICptaXN0YXQpCitzdGF0aWMgaW5saW5lIGludCBkdF90eXBlKHN0cnVjdCBwOV93c3RhdCAqbWlzdGF0KQogewogCXVuc2lnbmVkIGxvbmcgcGVybSA9IG1pc3RhdC0+bW9kZTsKIAlpbnQgcmV0dHlwZSA9IERUX1JFRzsKQEAgLTY5LDMyICs2OSw1OCBAQAogc3RhdGljIGludCB2OWZzX2Rpcl9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewogCWludCBvdmVyOworCXN0cnVjdCBwOV93c3RhdCBzdDsKKwlpbnQgZXJyOwogCXN0cnVjdCBwOV9maWQgKmZpZDsKLQlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IHA5X3N0YXQgKnN0OworCWludCBidWZsZW47CisJY2hhciAqc3RhdGJ1ZjsKKwlpbnQgbiwgaSA9IDA7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIm5hbWUgJXNcbiIsIGZpbHAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKLQlpbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGlub2RlKTsKIAlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0Jd2hpbGUgKChzdCA9IHA5X2NsaWVudF9kaXJyZWFkKGZpZCwgZmlscC0+Zl9wb3MpKSAhPSBOVUxMKSB7Ci0JCWlmIChJU19FUlIoc3QpKQotCQkJcmV0dXJuIFBUUl9FUlIoc3QpOwogCi0JCW92ZXIgPSBmaWxsZGlyKGRpcmVudCwgc3QtPm5hbWUuc3RyLCBzdC0+bmFtZS5sZW4sIGZpbHAtPmZfcG9zLAotCQkJdjlmc19xaWQyaW5vKCZzdC0+cWlkKSwgZHRfdHlwZShzdCkpOworCWJ1ZmxlbiA9IGZpZC0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOworCXN0YXRidWYgPSBrbWFsbG9jKGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0YnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCQlpZiAob3ZlcikKKwl3aGlsZSAoMSkgeworCQllcnIgPSB2OWZzX2ZpbGVfcmVhZG4oZmlscCwgc3RhdGJ1ZiwgTlVMTCwgYnVmbGVuLAorCQkJCQkJCQlmaWQtPnJkaXJfZnBvcyk7CisJCWlmIChlcnIgPD0gMCkKIAkJCWJyZWFrOwogCi0JCWZpbHAtPmZfcG9zICs9IHN0LT5zaXplOwotCQlrZnJlZShzdCk7Ci0JCXN0ID0gTlVMTDsKKwkJbiA9IGVycjsKKwkJd2hpbGUgKGkgPCBuKSB7CisJCQllcnIgPSBwOXN0YXRfcmVhZChzdGF0YnVmICsgaSwgYnVmbGVuLWksICZzdCwKKwkJCQkJCQlmaWQtPmNsbnQtPmRvdHUpOworCQkJaWYgKGVycikgeworCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicmV0dXJuZWQgJWRcbiIsIGVycik7CisJCQkJZXJyID0gLUVJTzsKKwkJCQlwOXN0YXRfZnJlZSgmc3QpOworCQkJCWdvdG8gZnJlZV9hbmRfZXhpdDsKKwkJCX0KKworCQkJaSArPSBzdC5zaXplKzI7CisJCQlmaWQtPnJkaXJfZnBvcyArPSBzdC5zaXplKzI7CisKKwkJCW92ZXIgPSBmaWxsZGlyKGRpcmVudCwgc3QubmFtZSwgc3RybGVuKHN0Lm5hbWUpLAorCQkJICAgIGZpbHAtPmZfcG9zLCB2OWZzX3FpZDJpbm8oJnN0LnFpZCksIGR0X3R5cGUoJnN0KSk7CisKKwkJCWZpbHAtPmZfcG9zICs9IHN0LnNpemUrMjsKKworCQkJcDlzdGF0X2ZyZWUoJnN0KTsKKworCQkJaWYgKG92ZXIpIHsKKwkJCQllcnIgPSAwOworCQkJCWdvdG8gZnJlZV9hbmRfZXhpdDsKKwkJCX0KKwkJfQogCX0KIAotCWtmcmVlKHN0KTsKLQlyZXR1cm4gMDsKK2ZyZWVfYW5kX2V4aXQ6CisJa2ZyZWUoc3RhdGJ1Zik7CisJcmV0dXJuIGVycjsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZmlsZS5jIGIvZnMvOXAvdmZzX2ZpbGUuYwppbmRleCA1Mjk0NGQyLi4wNDFjNTI2IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZmlsZS5jCisrKyBiL2ZzLzlwL3Zmc19maWxlLmMKQEAgLTEyMCwyMyArMTIwLDcyIEBACiB9CiAKIC8qKgotICogdjlmc19maWxlX3JlYWQgLSByZWFkIGZyb20gYSBmaWxlCisgKiB2OWZzX2ZpbGVfcmVhZG4gLSByZWFkIGZyb20gYSBmaWxlCiAgKiBAZmlscDogZmlsZSBwb2ludGVyIHRvIHJlYWQKICAqIEBkYXRhOiBkYXRhIGJ1ZmZlciB0byByZWFkIGRhdGEgaW50bworICogQHVkYXRhOiB1c2VyIGRhdGEgYnVmZmVyIHRvIHJlYWQgZGF0YSBpbnRvCiAgKiBAY291bnQ6IHNpemUgb2YgYnVmZmVyCiAgKiBAb2Zmc2V0OiBvZmZzZXQgYXQgd2hpY2ggdG8gcmVhZCBkYXRhCiAgKgogICovCisKK3NzaXplX3QKK3Y5ZnNfZmlsZV9yZWFkbihzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciAqZGF0YSwgY2hhciBfX3VzZXIgKnVkYXRhLCB1MzIgY291bnQsCisJICAgICAgIHU2NCBvZmZzZXQpCit7CisJaW50IG4sIHRvdGFsOworCXN0cnVjdCBwOV9maWQgKmZpZCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZmlkICVkIG9mZnNldCAlbGx1IGNvdW50ICVkXG4iLCBmaWQtPmZpZCwKKwkJCQkJKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7CisKKwluID0gMDsKKwl0b3RhbCA9IDA7CisJZG8geworCQluID0gcDlfY2xpZW50X3JlYWQoZmlkLCBkYXRhLCB1ZGF0YSwgb2Zmc2V0LCBjb3VudCk7CisJCWlmIChuIDw9IDApCisJCQlicmVhazsKKworCQlpZiAoZGF0YSkKKwkJCWRhdGEgKz0gbjsKKwkJaWYgKHVkYXRhKQorCQkJdWRhdGEgKz0gbjsKKworCQlvZmZzZXQgKz0gbjsKKwkJY291bnQgLT0gbjsKKwkJdG90YWwgKz0gbjsKKwl9IHdoaWxlIChjb3VudCA+IDAgJiYgbiA9PSAoZmlkLT5jbG50LT5tc2l6ZSAtIFA5X0lPSERSU1opKTsKKworCWlmIChuIDwgMCkKKwkJdG90YWwgPSBuOworCisJcmV0dXJuIHRvdGFsOworfQorCisvKioKKyAqIHY5ZnNfZmlsZV9yZWFkIC0gcmVhZCBmcm9tIGEgZmlsZQorICogQGZpbHA6IGZpbGUgcG9pbnRlciB0byByZWFkCisgKiBAdWRhdGE6IHVzZXIgZGF0YSBidWZmZXIgdG8gcmVhZCBkYXRhIGludG8KKyAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKKyAqIEBvZmZzZXQ6IG9mZnNldCBhdCB3aGljaCB0byByZWFkIGRhdGEKKyAqCisgKi8KKwogc3RhdGljIHNzaXplX3QKLXY5ZnNfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqIGRhdGEsIHNpemVfdCBjb3VudCwKK3Y5ZnNfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWRhdGEsIHNpemVfdCBjb3VudCwKIAkgICAgICAgbG9mZl90ICogb2Zmc2V0KQogewogCWludCByZXQ7CiAJc3RydWN0IHA5X2ZpZCAqZmlkOwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJcbiIpOworCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiY291bnQgJWQgb2Zmc2V0ICVsbGRcbiIsIGNvdW50LCAqb2Zmc2V0KTsKIAlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JcmV0ID0gcDlfY2xpZW50X3VyZWFkKGZpZCwgZGF0YSwgKm9mZnNldCwgY291bnQpOworCisJaWYgKGNvdW50ID4gKGZpZC0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaKSkKKwkJcmV0ID0gdjlmc19maWxlX3JlYWRuKGZpbHAsIE5VTEwsIHVkYXRhLCBjb3VudCwgKm9mZnNldCk7CisJZWxzZQorCQlyZXQgPSBwOV9jbGllbnRfcmVhZChmaWQsIE5VTEwsIHVkYXRhLCAqb2Zmc2V0LCBjb3VudCk7CisKIAlpZiAocmV0ID4gMCkKIAkJKm9mZnNldCArPSByZXQ7CiAKQEAgLTE1NiwxOSArMjA1LDM4IEBACiB2OWZzX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICogZGF0YSwKIAkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmZzZXQpCiB7Ci0JaW50IHJldDsKKwlpbnQgbiwgcnNpemUsIHRvdGFsID0gMDsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgb3JpZ2luID0gKm9mZnNldDsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZGF0YSAlcCBjb3VudCAlZCBvZmZzZXQgJXhcbiIsIGRhdGEsCiAJCShpbnQpY291bnQsIChpbnQpKm9mZnNldCk7CiAKIAlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JcmV0ID0gcDlfY2xpZW50X3V3cml0ZShmaWQsIGRhdGEsICpvZmZzZXQsIGNvdW50KTsKLQlpZiAocmV0ID4gMCkgewotCQlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCAqb2Zmc2V0LAotCQkJCQkJCQkqb2Zmc2V0K3JldCk7Ci0JCSpvZmZzZXQgKz0gcmV0OworCWNsbnQgPSBmaWQtPmNsbnQ7CisKKwlyc2l6ZSA9IGZpZC0+aW91bml0OworCWlmICghcnNpemUgfHwgcnNpemUgPiBjbG50LT5tc2l6ZS1QOV9JT0hEUlNaKQorCQlyc2l6ZSA9IGNsbnQtPm1zaXplIC0gUDlfSU9IRFJTWjsKKworCWRvIHsKKwkJaWYgKGNvdW50IDwgcnNpemUpCisJCQlyc2l6ZSA9IGNvdW50OworCisJCW4gPSBwOV9jbGllbnRfd3JpdGUoZmlkLCBOVUxMLCBkYXRhK3RvdGFsLCAqb2Zmc2V0K3RvdGFsLAorCQkJCQkJCQkJcnNpemUpOworCQlpZiAobiA8PSAwKQorCQkJYnJlYWs7CisJCWNvdW50IC09IG47CisJCXRvdGFsICs9IG47CisJfSB3aGlsZSAoY291bnQgPiAwKTsKKworCWlmICh0b3RhbCA+IDApIHsKKwkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgb3JpZ2luLAorCQkJCQkJCQlvcmlnaW4rdG90YWwpOworCQkqb2Zmc2V0ICs9IHRvdGFsOwogCX0KIAogCWlmICgqb2Zmc2V0ID4gaW5vZGUtPmlfc2l6ZSkgewpAQCAtMTc2LDcgKzI0NCwxMCBAQAogCQlpbm9kZS0+aV9ibG9ja3MgPSAoaW5vZGUtPmlfc2l6ZSArIDUxMiAtIDEpID4+IDk7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlpZiAobiA8IDApCisJCXJldHVybiBuOworCisJcmV0dXJuIHRvdGFsOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2OWZzX2NhY2hlZF9maWxlX29wZXJhdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jCmluZGV4IGU4M2FhNWUuLjgzMTRkM2YgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIHsKIAlpbnQgZXJyLCB1bW9kZTsKIAlzdHJ1Y3QgaW5vZGUgKnJldDsKLQlzdHJ1Y3QgcDlfc3RhdCAqc3Q7CisJc3RydWN0IHA5X3dzdGF0ICpzdDsKIAogCXJldCA9IE5VTEw7CiAJc3QgPSBwOV9jbGllbnRfc3RhdChmaWQpOwpAQCAtNDE3LDYgKzQxNyw4IEBACiAJc3RydWN0IHA5X2ZpZCAqZGZpZCwgKm9maWQsICpmaWQ7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAorCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAibmFtZSAlc1xuIiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisKIAllcnIgPSAwOwogCW9maWQgPSBOVUxMOwogCWZpZCA9IE5VTEw7CkBAIC00MjQsNiArNDI2LDcgQEAKIAlkZmlkID0gdjlmc19maWRfY2xvbmUoZGVudHJ5LT5kX3BhcmVudCk7CiAJaWYgKElTX0VSUihkZmlkKSkgewogCQllcnIgPSBQVFJfRVJSKGRmaWQpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImZpZCBjbG9uZSBmYWlsZWQgJWRcbiIsIGVycik7CiAJCWRmaWQgPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTQzMiwxOCArNDM1LDIyIEBACiAJb2ZpZCA9IHA5X2NsaWVudF93YWxrKGRmaWQsIDAsIE5VTEwsIDEpOwogCWlmIChJU19FUlIob2ZpZCkpIHsKIAkJZXJyID0gUFRSX0VSUihvZmlkKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJwOV9jbGllbnRfd2FsayBmYWlsZWQgJWRcbiIsIGVycik7CiAJCW9maWQgPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0KIAogCWVyciA9IHA5X2NsaWVudF9mY3JlYXRlKG9maWQsIG5hbWUsIHBlcm0sIG1vZGUsIGV4dGVuc2lvbik7Ci0JaWYgKGVyciA8IDApCisJaWYgKGVyciA8IDApIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJwOV9jbGllbnRfZmNyZWF0ZSBmYWlsZWQgJWRcbiIsIGVycik7CiAJCWdvdG8gZXJyb3I7CisJfQogCiAJLyogbm93IHdhbGsgZnJvbSB0aGUgcGFyZW50IHNvIHdlIGNhbiBnZXQgdW5vcGVuZWQgZmlkICovCiAJZmlkID0gcDlfY2xpZW50X3dhbGsoZGZpZCwgMSwgJm5hbWUsIDApOwogCWlmIChJU19FUlIoZmlkKSkgewogCQllcnIgPSBQVFJfRVJSKGZpZCk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicDlfY2xpZW50X3dhbGsgZmFpbGVkICVkXG4iLCBlcnIpOwogCQlmaWQgPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0gZWxzZQpAQCAtNDUzLDYgKzQ2MCw3IEBACiAJaW5vZGUgPSB2OWZzX2lub2RlX2Zyb21fZmlkKHY5c2VzLCBmaWQsIGRpci0+aV9zYik7CiAJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJZXJyID0gUFRSX0VSUihpbm9kZSk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiaW5vZGUgY3JlYXRpb24gZmFpbGVkICVkXG4iLCBlcnIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtNzM0LDcgKzc0Miw3IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwogCXN0cnVjdCBwOV9maWQgKmZpZDsKLQlzdHJ1Y3QgcDlfc3RhdCAqc3Q7CisJc3RydWN0IHA5X3dzdGF0ICpzdDsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZGVudHJ5OiAlcFxuIiwgZGVudHJ5KTsKIAllcnIgPSAtRVBFUk07CkBAIC04MTUsMTAgKzgyMyw5IEBACiAgKi8KIAogdm9pZAotdjlmc19zdGF0Mmlub2RlKHN0cnVjdCBwOV9zdGF0ICpzdGF0LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAordjlmc19zdGF0Mmlub2RlKHN0cnVjdCBwOV93c3RhdCAqc3RhdCwgc3RydWN0IGlub2RlICppbm9kZSwKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCWludCBuOwogCWNoYXIgZXh0WzMyXTsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzID0gc2ItPnNfZnNfaW5mbzsKIApAQCAtODQyLDExICs4NDksNyBAQAogCQlpbnQgbWFqb3IgPSAtMTsKIAkJaW50IG1pbm9yID0gLTE7CiAKLQkJbiA9IHN0YXQtPmV4dGVuc2lvbi5sZW47Ci0JCWlmIChuID4gc2l6ZW9mKGV4dCktMSkKLQkJCW4gPSBzaXplb2YoZXh0KS0xOwotCQltZW1tb3ZlKGV4dCwgc3RhdC0+ZXh0ZW5zaW9uLnN0ciwgbik7Ci0JCWV4dFtuXSA9IDA7CisJCXN0cm5jcHkoZXh0LCBzdGF0LT5leHRlbnNpb24sIHNpemVvZihleHQpKTsKIAkJc3NjYW5mKGV4dCwgIiVjICV1ICV1IiwgJnR5cGUsICZtYWpvciwgJm1pbm9yKTsKIAkJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgJ2MnOgpAQCAtODU3LDEwICs4NjAsMTEgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKLQkJCQkiVW5rbm93biBzcGVjaWFsIHR5cGUgJWMgKCUuKnMpXG4iLCB0eXBlLAotCQkJCXN0YXQtPmV4dGVuc2lvbi5sZW4sIHN0YXQtPmV4dGVuc2lvbi5zdHIpOworCQkJCSJVbmtub3duIHNwZWNpYWwgdHlwZSAlYyAlc1xuIiwgdHlwZSwKKwkJCQlzdGF0LT5leHRlbnNpb24pOwogCQl9OwogCQlpbm9kZS0+aV9yZGV2ID0gTUtERVYobWFqb3IsIG1pbm9yKTsKKwkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9yZGV2KTsKIAl9IGVsc2UKIAkJaW5vZGUtPmlfcmRldiA9IDA7CiAKQEAgLTkwNCw3ICs5MDgsNyBAQAogCiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7Ci0Jc3RydWN0IHA5X3N0YXQgKnN0OworCXN0cnVjdCBwOV93c3RhdCAqc3Q7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiAlc1xuIiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAJcmV0dmFsID0gLUVQRVJNOwpAQCAtOTI2LDE1ICs5MzAsMTAgQEAKIAl9CiAKIAkvKiBjb3B5IGV4dGVuc2lvbiBidWZmZXIgaW50byBidWZmZXIgKi8KLQlpZiAoc3QtPmV4dGVuc2lvbi5sZW4gPCBidWZsZW4pCi0JCWJ1ZmxlbiA9IHN0LT5leHRlbnNpb24ubGVuICsgMTsKLQotCW1lbW1vdmUoYnVmZmVyLCBzdC0+ZXh0ZW5zaW9uLnN0ciwgYnVmbGVuIC0gMSk7Ci0JYnVmZmVyW2J1Zmxlbi0xXSA9IDA7CisJc3RybmNweShidWZmZXIsIHN0LT5leHRlbnNpb24sIGJ1Zmxlbik7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywKLQkJIiVzIC0+ICUuKnMgKCVzKVxuIiwgZGVudHJ5LT5kX25hbWUubmFtZSwgc3QtPmV4dGVuc2lvbi5sZW4sCi0JCXN0LT5leHRlbnNpb24uc3RyLCBidWZmZXIpOworCQkiJXMgLT4gJXMgKCVzKVxuIiwgZGVudHJ5LT5kX25hbWUubmFtZSwgc3QtPmV4dGVuc2lvbiwgYnVmZmVyKTsKIAogCXJldHZhbCA9IGJ1ZmxlbjsKIApkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX3N1cGVyLmMgYi9mcy85cC92ZnNfc3VwZXIuYwppbmRleCBiZjU5YzM5Li5kNmNiMWEwIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfc3VwZXIuYworKysgYi9mcy85cC92ZnNfc3VwZXIuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAJc3RydWN0IGRlbnRyeSAqcm9vdCA9IE5VTEw7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyA9IE5VTEw7Ci0Jc3RydWN0IHA5X3N0YXQgKnN0ID0gTlVMTDsKKwlzdHJ1Y3QgcDlfd3N0YXQgKnN0ID0gTlVMTDsKIAlpbnQgbW9kZSA9IFNfSVJXWFVHTyB8IFNfSVNWVFg7CiAJdWlkX3QgdWlkID0gY3VycmVudC0+ZnN1aWQ7CiAJZ2lkX3QgZ2lkID0gY3VycmVudC0+ZnNnaWQ7CkBAIC0xNjEsMTAgKzE2MSwxNCBAQAogCiAJc2ItPnNfcm9vdCA9IHJvb3Q7CiAJcm9vdC0+ZF9pbm9kZS0+aV9pbm8gPSB2OWZzX3FpZDJpbm8oJnN0LT5xaWQpOworCiAJdjlmc19zdGF0Mmlub2RlKHN0LCByb290LT5kX2lub2RlLCBzYik7CisKIAl2OWZzX2ZpZF9hZGQocm9vdCwgZmlkKTsKKwlwOXN0YXRfZnJlZShzdCk7CiAJa2ZyZWUoc3QpOwogCitQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiByZXR1cm4gc2ltcGxlIHNldCBtb3VudFxuIik7CiAJcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOwogCiByZWxlYXNlX3NiOgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggZjU0YTE1Ny4uZTQ2Mjk3ZiAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC02LDYxICs2LDkgQEAKIAogaWYgQkxPQ0sKIAotY29uZmlnIEVYVDJfRlMKLQl0cmlzdGF0ZSAiU2Vjb25kIGV4dGVuZGVkIGZzIHN1cHBvcnQiCi0JaGVscAotCSAgRXh0MiBpcyBhIHN0YW5kYXJkIExpbnV4IGZpbGUgc3lzdGVtIGZvciBoYXJkIGRpc2tzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0Mi4KLQotCSAgSWYgdW5zdXJlLCBzYXkgWS4KLQotY29uZmlnIEVYVDJfRlNfWEFUVFIKLQlib29sICJFeHQyIGV4dGVuZGVkIGF0dHJpYnV0ZXMiCi0JZGVwZW5kcyBvbiBFWFQyX0ZTCi0JaGVscAotCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5Ci0JICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0Ci0JICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIEVYVDJfRlNfUE9TSVhfQUNMCi0JYm9vbCAiRXh0MiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKLQlkZXBlbmRzIG9uIEVYVDJfRlNfWEFUVFIKLQlzZWxlY3QgRlNfUE9TSVhfQUNMCi0JaGVscAotCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAotCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgotCi0JICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUG9zaXggQUNMcyBmb3IKLQkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCi0KLWNvbmZpZyBFWFQyX0ZTX1NFQ1VSSVRZCi0JYm9vbCAiRXh0MiBTZWN1cml0eSBMYWJlbHMiCi0JZGVwZW5kcyBvbiBFWFQyX0ZTX1hBVFRSCi0JaGVscAotCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCi0JICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCi0JICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5Ci0JICBsYWJlbHMgaW4gdGhlIGV4dDIgZmlsZXN5c3RlbS4KLQotCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZwotCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgotCi1jb25maWcgRVhUMl9GU19YSVAKLQlib29sICJFeHQyIGV4ZWN1dGUgaW4gcGxhY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEVYVDJfRlMgJiYgTU1VCi0JaGVscAotCSAgRXhlY3V0ZSBpbiBwbGFjZSBjYW4gYmUgdXNlZCBvbiBtZW1vcnktYmFja2VkIGJsb2NrIGRldmljZXMuIElmIHlvdQotCSAgZW5hYmxlIHRoaXMgb3B0aW9uLCB5b3UgY2FuIHNlbGVjdCB0byBtb3VudCBibG9jayBkZXZpY2VzIHdoaWNoIGFyZQotCSAgY2FwYWJsZSBvZiB0aGlzIGZlYXR1cmUgd2l0aG91dCB1c2luZyB0aGUgcGFnZSBjYWNoZS4KLQotCSAgSWYgeW91IGRvIG5vdCB1c2UgYSBibG9jayBkZXZpY2UgdGhhdCBpcyBjYXBhYmxlIG9mIHVzaW5nIHRoaXMsCi0JICBvciBpZiB1bnN1cmUsIHNheSBOLgorc291cmNlICJmcy9leHQyL0tjb25maWciCitzb3VyY2UgImZzL2V4dDMvS2NvbmZpZyIKK3NvdXJjZSAiZnMvZXh0NC9LY29uZmlnIgogCiBjb25maWcgRlNfWElQCiAjIGV4ZWN1dGUgaW4gcGxhY2UKQEAgLTY4LDIxOCArMTYsOCBAQAogCWRlcGVuZHMgb24gRVhUMl9GU19YSVAKIAlkZWZhdWx0IHkKIAotY29uZmlnIEVYVDNfRlMKLQl0cmlzdGF0ZSAiRXh0MyBqb3VybmFsbGluZyBmaWxlIHN5c3RlbSBzdXBwb3J0IgotCXNlbGVjdCBKQkQKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBqb3VybmFsbGluZyB2ZXJzaW9uIG9mIHRoZSBTZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0KLQkgIChvZnRlbiBjYWxsZWQgZXh0MyksIHRoZSBkZSBmYWN0byBzdGFuZGFyZCBMaW51eCBmaWxlIHN5c3RlbQotCSAgKG1ldGhvZCB0byBvcmdhbml6ZSBmaWxlcyBvbiBhIHN0b3JhZ2UgZGV2aWNlKSBmb3IgaGFyZCBkaXNrcy4KLQotCSAgVGhlIGpvdXJuYWxsaW5nIGNvZGUgaW5jbHVkZWQgaW4gdGhpcyBkcml2ZXIgbWVhbnMgeW91IGRvIG5vdCBoYXZlCi0JICB0byBydW4gZTJmc2NrIChmaWxlIHN5c3RlbSBjaGVja2VyKSBvbiB5b3VyIGZpbGUgc3lzdGVtcyBhZnRlciBhCi0JICBjcmFzaC4gIFRoZSBqb3VybmFsIGtlZXBzIHRyYWNrIG9mIGFueSBjaGFuZ2VzIHRoYXQgd2VyZSBiZWluZyBtYWRlCi0JICBhdCB0aGUgdGltZSB0aGUgc3lzdGVtIGNyYXNoZWQsIGFuZCBjYW4gZW5zdXJlIHRoYXQgeW91ciBmaWxlIHN5c3RlbQotCSAgaXMgY29uc2lzdGVudCB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGxlbmd0aHkgY2hlY2suCi0KLQkgIE90aGVyIHRoYW4gYWRkaW5nIHRoZSBqb3VybmFsIHRvIHRoZSBmaWxlIHN5c3RlbSwgdGhlIG9uLWRpc2sgZm9ybWF0Ci0JICBvZiBleHQzIGlzIGlkZW50aWNhbCB0byBleHQyLiAgSXQgaXMgcG9zc2libGUgdG8gZnJlZWx5IHN3aXRjaAotCSAgYmV0d2VlbiB1c2luZyB0aGUgZXh0MyBkcml2ZXIgYW5kIHRoZSBleHQyIGRyaXZlciwgYXMgbG9uZyBhcyB0aGUKLQkgIGZpbGUgc3lzdGVtIGhhcyBiZWVuIGNsZWFubHkgdW5tb3VudGVkLCBvciBlMmZzY2sgaXMgcnVuIG9uIHRoZSBmaWxlCi0JICBzeXN0ZW0uCi0KLQkgIFRvIGFkZCBhIGpvdXJuYWwgb24gYW4gZXhpc3RpbmcgZXh0MiBmaWxlIHN5c3RlbSBvciBjaGFuZ2UgdGhlCi0JICBiZWhhdmlvciBvZiBleHQzIGZpbGUgc3lzdGVtcywgeW91IGNhbiB1c2UgdGhlIHR1bmUyZnMgdXRpbGl0eSAoIm1hbgotCSAgdHVuZTJmcyIpLiAgVG8gbW9kaWZ5IGF0dHJpYnV0ZXMgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG9uIGV4dDMKLQkgIGZpbGUgc3lzdGVtcywgdXNlIGNoYXR0ciAoIm1hbiBjaGF0dHIiKS4gIFlvdSBuZWVkIHRvIGJlIHVzaW5nCi0JICBlMmZzcHJvZ3MgdmVyc2lvbiAxLjIwIG9yIGxhdGVyIGluIG9yZGVyIHRvIGNyZWF0ZSBleHQzIGpvdXJuYWxzCi0JICAoYXZhaWxhYmxlIGF0IDxodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UyZnNwcm9ncy8+KS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDMuCi0KLWNvbmZpZyBFWFQzX0ZTX1hBVFRSCi0JYm9vbCAiRXh0MyBleHRlbmRlZCBhdHRyaWJ1dGVzIgotCWRlcGVuZHMgb24gRVhUM19GUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQotCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAotCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLQkgIFlvdSBuZWVkIHRoaXMgZm9yIFBPU0lYIEFDTCBzdXBwb3J0IG9uIGV4dDMuCi0KLWNvbmZpZyBFWFQzX0ZTX1BPU0lYX0FDTAotCWJvb2wgIkV4dDMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCi0JZGVwZW5kcyBvbiBFWFQzX0ZTX1hBVFRSCi0Jc2VsZWN0IEZTX1BPU0lYX0FDTAotCWhlbHAKLQkgIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKLQkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KLQotCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBvc2l4IEFDTHMgZm9yCi0JICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCi0KLQkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgotCi1jb25maWcgRVhUM19GU19TRUNVUklUWQotCWJvb2wgIkV4dDMgU2VjdXJpdHkgTGFiZWxzIgotCWRlcGVuZHMgb24gRVhUM19GU19YQVRUUgotCWhlbHAKLQkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscwotCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgotCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQotCSAgbGFiZWxzIGluIHRoZSBleHQzIGZpbGVzeXN0ZW0uCi0KLQkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKLQkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KLQotY29uZmlnIEVYVDRfRlMKLQl0cmlzdGF0ZSAiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW0iCi0Jc2VsZWN0IEpCRDIKLQlzZWxlY3QgQ1JDMTYKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS4KLQotCSAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLAotCSAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aAotCSAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdAotCSAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkCi0JICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcywKLQkgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZAotCSAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdAotCSAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLgotCi0JICBUaGUgZXh0NCBmaWxlc3lzdGVtIHdpbGwgc3VwcG9ydCBtb3VudGluZyBhbiBleHQzCi0JICBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZSB3aWxsIGJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbQotCSAgdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGUgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdAotCSAgcGVyZm9ybWFuY2UgZ2FpbnMgd2lsbCByZXF1aXJlIGVuYWJsaW5nIGV4dDQgZmVhdHVyZXMgaW4gdGhlCi0JICBmaWxlc3lzdGVtLCBvciBmb3JtYXRpbmcgYSBuZXcgZmlsZXN5c3RlbSBhcyBhbiBleHQ0Ci0JICBmaWxlc3lzdGVtIGluaXRpYWxseS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDRkZXYuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBFWFQ0REVWX0NPTVBBVAotCWJvb2wgIkVuYWJsZSBleHQ0ZGV2IGNvbXBhdGliaWxpdHkiCi0JZGVwZW5kcyBvbiBFWFQ0X0ZTCi0JaGVscAotCSAgU3RhcnRpbmcgd2l0aCAyLjYuMjgsIHRoZSBuYW1lIG9mIHRoZSBleHQ0IGZpbGVzeXN0ZW0gd2FzCi0JICByZW5hbWVkIGZyb20gZXh0NGRldiB0byBleHQ0LiAgVW5mb3J0dW5hdGVseSB0aGVyZSBhcmUgc29tZQotCSAgbGVnYWN5IHVzZXJzcGFjZSBwcm9ncmFtcyAoc3VjaCBhcyBrbGliYydzIGZzdHlwZSkgaGF2ZQotCSAgImV4dDRkZXYiIGhhcmRjb2RlZC4KLQotCSAgVG8gZW5hYmxlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHNvIHRoYXQgc3lzdGVtcyB0aGF0IGFyZQotCSAgc3RpbGwgZXhwZWN0aW5nIHRvIG1vdW50IGV4dDQgZmlsZXN5c3RlbXMgdXNpbmcgZXh0NGRldiwKLQkgIGNob3NlIFkgaGVyZS4gICBUaGlzIGZlYXR1cmUgd2lsbCBnbyBhd2F5IGJ5IDIuNi4zMSwgc28KLQkgIHBsZWFzZSBhcnJhbmdlIHRvIGdldCB5b3VyIHVzZXJzcGFjZSBwcm9ncmFtcyBmaXhlZCEKLQotY29uZmlnIEVYVDRfRlNfWEFUVFIKLQlib29sICJFeHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMiCi0JZGVwZW5kcyBvbiBFWFQ0X0ZTCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5Ci0JICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0Ci0JICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotCSAgWW91IG5lZWQgdGhpcyBmb3IgUE9TSVggQUNMIHN1cHBvcnQgb24gZXh0NC4KLQotY29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMCi0JYm9vbCAiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKLQlkZXBlbmRzIG9uIEVYVDRfRlNfWEFUVFIKLQlzZWxlY3QgRlNfUE9TSVhfQUNMCi0JaGVscAotCSAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAotCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgotCi0JICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUE9TSVggQUNMcyBmb3IKLQkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCi0KLWNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZCi0JYm9vbCAiRXh0NCBTZWN1cml0eSBMYWJlbHMiCi0JZGVwZW5kcyBvbiBFWFQ0X0ZTX1hBVFRSCi0JaGVscAotCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCi0JICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCi0JICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5Ci0JICBsYWJlbHMgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4KLQotCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZwotCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgotCi1jb25maWcgSkJECi0JdHJpc3RhdGUKLQloZWxwCi0JICBUaGlzIGlzIGEgZ2VuZXJpYyBqb3VybmFsbGluZyBsYXllciBmb3IgYmxvY2sgZGV2aWNlcy4gIEl0IGlzCi0JICBjdXJyZW50bHkgdXNlZCBieSB0aGUgZXh0MyBhbmQgT0NGUzIgZmlsZSBzeXN0ZW1zLCBidXQgaXQgY291bGQKLQkgIGFsc28gYmUgdXNlZCB0byBhZGQgam91cm5hbCBzdXBwb3J0IHRvIG90aGVyIGZpbGUgc3lzdGVtcyBvciBibG9jawotCSAgZGV2aWNlcyBzdWNoIGFzIFJBSUQgb3IgTFZNLgotCi0JICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBleHQzIG9yIE9DRlMyIGZpbGUgc3lzdGVtcywgeW91IG5lZWQgdG8KLQkgIHNheSBZIGhlcmUuIElmIHlvdSBhcmUgbm90IHVzaW5nIGV4dDMgT0NGUzIgdGhlbiB5b3Ugd2lsbCBwcm9iYWJseQotCSAgd2FudCB0byBzYXkgTi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRldmljZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCi0JICBjYWxsZWQgamJkLiAgSWYgeW91IGFyZSBjb21waWxpbmcgZXh0MyBvciBPQ0ZTMiBpbnRvIHRoZSBrZXJuZWwsCi0JICB5b3UgY2Fubm90IGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLgotCi1jb25maWcgSkJEX0RFQlVHCi0JYm9vbCAiSkJEIChleHQzKSBkZWJ1Z2dpbmcgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEpCRCAmJiBERUJVR19GUwotCWhlbHAKLQkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDMgam91cm5hbGVkIGZpbGUgc3lzdGVtIChvciBwb3RlbnRpYWxseSBhbnkKLQkgIG90aGVyIGZpbGUgc3lzdGVtL2RldmljZSB1c2luZyBKQkQpLCB0aGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvCi0JICBlbmFibGUgZGVidWdnaW5nIG91dHB1dCB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsIGluIG9yZGVyIHRvCi0JICBoZWxwIHRyYWNrIGRvd24gYW55IHByb2JsZW1zIHlvdSBhcmUgaGF2aW5nLiAgQnkgZGVmYXVsdCB0aGUKLQkgIGRlYnVnZ2luZyBvdXRwdXQgd2lsbCBiZSB0dXJuZWQgb2ZmLgotCi0JICBJZiB5b3Ugc2VsZWN0IFkgaGVyZSwgdGhlbiB5b3Ugd2lsbCBiZSBhYmxlIHRvIHR1cm4gb24gZGVidWdnaW5nCi0JICB3aXRoICJlY2hvIE4gPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQvamJkLWRlYnVnIiwgd2hlcmUgTiBpcyBhCi0JICBudW1iZXIgYmV0d2VlbiAxIGFuZCA1LCB0aGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBtb3JlIGRlYnVnZ2luZwotCSAgb3V0cHV0IGlzIGdlbmVyYXRlZC4gIFRvIHR1cm4gZGVidWdnaW5nIG9mZiBhZ2FpbiwgZG8KLQkgICJlY2hvIDAgPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQvamJkLWRlYnVnIi4KLQotY29uZmlnIEpCRDIKLQl0cmlzdGF0ZQotCXNlbGVjdCBDUkMzMgotCWhlbHAKLQkgIFRoaXMgaXMgYSBnZW5lcmljIGpvdXJuYWxpbmcgbGF5ZXIgZm9yIGJsb2NrIGRldmljZXMgdGhhdCBzdXBwb3J0Ci0JICBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGJsb2NrIG51bWJlcnMuICBJdCBpcyBjdXJyZW50bHkgdXNlZCBieQotCSAgdGhlIGV4dDQgZmlsZXN5c3RlbSwgYnV0IGl0IGNvdWxkIGFsc28gYmUgdXNlZCB0byBhZGQKLQkgIGpvdXJuYWwgc3VwcG9ydCB0byBvdGhlciBmaWxlIHN5c3RlbXMgb3IgYmxvY2sgZGV2aWNlcyBzdWNoCi0JICBhcyBSQUlEIG9yIExWTS4KLQotCSAgSWYgeW91IGFyZSB1c2luZyBleHQ0LCB5b3UgbmVlZCB0byBzYXkgWSBoZXJlLiBJZiB5b3UgYXJlIG5vdAotCSAgdXNpbmcgZXh0NCB0aGVuIHlvdSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gc2F5IE4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkZXZpY2UgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZQotCSAgY2FsbGVkIGpiZDIuICBJZiB5b3UgYXJlIGNvbXBpbGluZyBleHQ0IGludG8gdGhlIGtlcm5lbCwKLQkgIHlvdSBjYW5ub3QgY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUuCi0KLWNvbmZpZyBKQkQyX0RFQlVHCi0JYm9vbCAiSkJEMiAoZXh0NCkgZGVidWdnaW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBKQkQyICYmIERFQlVHX0ZTCi0JaGVscAotCSAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXh0NCBqb3VybmFsZWQgZmlsZSBzeXN0ZW0gKG9yCi0JICBwb3RlbnRpYWxseSBhbnkgb3RoZXIgZmlsZXN5c3RlbS9kZXZpY2UgdXNpbmcgSkJEMiksIHRoaXMgb3B0aW9uCi0JICBhbGxvd3MgeW91IHRvIGVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IHdoaWxlIHRoZSBzeXN0ZW0gaXMgcnVubmluZywKLQkgIGluIG9yZGVyIHRvIGhlbHAgdHJhY2sgZG93biBhbnkgcHJvYmxlbXMgeW91IGFyZSBoYXZpbmcuCi0JICBCeSBkZWZhdWx0LCB0aGUgZGVidWdnaW5nIG91dHB1dCB3aWxsIGJlIHR1cm5lZCBvZmYuCi0KLQkgIElmIHlvdSBzZWxlY3QgWSBoZXJlLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHVybiBvbiBkZWJ1Z2dpbmcKLQkgIHdpdGggImVjaG8gTiA+IC9zeXMva2VybmVsL2RlYnVnL2piZDIvamJkMi1kZWJ1ZyIsIHdoZXJlIE4gaXMgYQotCSAgbnVtYmVyIGJldHdlZW4gMSBhbmQgNS4gVGhlIGhpZ2hlciB0aGUgbnVtYmVyLCB0aGUgbW9yZSBkZWJ1Z2dpbmcKLQkgIG91dHB1dCBpcyBnZW5lcmF0ZWQuICBUbyB0dXJuIGRlYnVnZ2luZyBvZmYgYWdhaW4sIGRvCi0JICAiZWNobyAwID4gL3N5cy9rZXJuZWwvZGVidWcvamJkMi9qYmQyLWRlYnVnIi4KK3NvdXJjZSAiZnMvamJkL0tjb25maWciCitzb3VyY2UgImZzL2piZDIvS2NvbmZpZyIKIAogY29uZmlnIEZTX01CQ0FDSEUKICMgTWV0YSBibG9jayBjYWNoZSBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyAoZXh0Mi9leHQzL2V4dDQpCkBAIC00MzMsNiArMTcxLDE0IEBACiAJYm9vbAogCWRlZmF1bHQgbgogCitjb25maWcgRklMRV9MT0NLSU5HCisJYm9vbCAiRW5hYmxlIFBPU0lYIGZpbGUgbG9ja2luZyBBUEkiIGlmIEVNQkVEREVECisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdGFuZGFyZCBmaWxlIGxvY2tpbmcgc3VwcG9ydCwgcmVxdWlyZWQKKyAgICAgICAgICBmb3IgZmlsZXN5c3RlbXMgbGlrZSBORlMgYW5kIGZvciB0aGUgZmxvY2soKSBzeXN0ZW0KKyAgICAgICAgICBjYWxsLiBEaXNhYmxpbmcgdGhpcyBvcHRpb24gc2F2ZXMgYWJvdXQgMTFrLgorCiBzb3VyY2UgImZzL3hmcy9LY29uZmlnIgogc291cmNlICJmcy9nZnMyL0tjb25maWciCiAKQEAgLTQ0MCw3ICsxODYsNyBAQAogCXRyaXN0YXRlICJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0IgogCWRlcGVuZHMgb24gTkVUICYmIFNZU0ZTCiAJc2VsZWN0IENPTkZJR0ZTX0ZTCi0Jc2VsZWN0IEpCRAorCXNlbGVjdCBKQkQyCiAJc2VsZWN0IENSQzMyCiAJaGVscAogCSAgT0NGUzIgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZXh0ZW50IGJhc2VkIHNoYXJlZCBkaXNrIGNsdXN0ZXIgZmlsZQpAQCAtNTExLDYgKzI1NywxNiBAQAogCSAgdGhpcyBvcHRpb24gZm9yIGRlYnVnZ2luZyBvbmx5IGFzIGl0IGlzIGxpa2VseSB0byBkZWNyZWFzZQogCSAgcGVyZm9ybWFuY2Ugb2YgdGhlIGZpbGVzeXN0ZW0uCiAKK2NvbmZpZyBPQ0ZTMl9DT01QQVRfSkJECisJYm9vbCAiVXNlIEpCRCBmb3IgY29tcGF0aWJpbGl0eSIKKwlkZXBlbmRzIG9uIE9DRlMyX0ZTCisJZGVmYXVsdCBuCisJc2VsZWN0IEpCRAorCWhlbHAKKwkgIFRoZSBvY2ZzMiBmaWxlc3lzdGVtIG5vdyB1c2VzIEpCRDIgZm9yIGl0cyBqb3VybmFsbGluZy4gIEpCRDIKKwkgIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggSkJELiAgSXQgaXMgc2FmZSB0byBzYXkgTiBoZXJlLgorCSAgSG93ZXZlciwgaWYgeW91IHJlYWxseSB3YW50IHRvIHVzZSB0aGUgb3JpZ2luYWwgSkJELCBzYXkgWSBoZXJlLgorCiBlbmRpZiAjIEJMT0NLCiAKIGNvbmZpZyBETk9USUZZCkBAIC02NDcsNyArNDAzLDcgQEAKIAkgIE4gaGVyZS4KIAogY29uZmlnIEZVU0VfRlMKLQl0cmlzdGF0ZSAiRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2Ugc3VwcG9ydCIKKwl0cmlzdGF0ZSAiRlVTRSAoRmlsZXN5c3RlbSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnQiCiAJaGVscAogCSAgV2l0aCBGVVNFIGl0IGlzIHBvc3NpYmxlIHRvIGltcGxlbWVudCBhIGZ1bGx5IGZ1bmN0aW9uYWwgZmlsZXN5c3RlbQogCSAgaW4gYSB1c2Vyc3BhY2UgcHJvZ3JhbS4KQEAgLTExNTAsMTk1ICs5MDYsNyBAQAogCSAgVG8gY29tcGlsZSB0aGUgRUZTIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVmcy4KIAotY29uZmlnIEpGRlMyX0ZTCi0JdHJpc3RhdGUgIkpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtIHYyIChKRkZTMikgc3VwcG9ydCIKLQlzZWxlY3QgQ1JDMzIKLQlkZXBlbmRzIG9uIE1URAotCWhlbHAKLQkgIEpGRlMyIGlzIHRoZSBzZWNvbmQgZ2VuZXJhdGlvbiBvZiB0aGUgSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0KLQkgIGZvciB1c2Ugb24gZGlza2xlc3MgZW1iZWRkZWQgZGV2aWNlcy4gSXQgcHJvdmlkZXMgaW1wcm92ZWQgd2VhcgotCSAgbGV2ZWxsaW5nLCBjb21wcmVzc2lvbiBhbmQgc3VwcG9ydCBmb3IgaGFyZCBsaW5rcy4gWW91IGNhbm5vdCB1c2UKLQkgIHRoaXMgb24gbm9ybWFsIGJsb2NrIGRldmljZXMsIG9ubHkgb24gJ01URCcgZGV2aWNlcy4KLQotCSAgRnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBKRkZTMiBpcwotCSAgYXZhaWxhYmxlIGF0IDxodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2pmZnMyLz4uCi0KLWNvbmZpZyBKRkZTMl9GU19ERUJVRwotCWludCAiSkZGUzIgZGVidWdnaW5nIHZlcmJvc2l0eSAoMCA9IHF1aWV0LCAyID0gbm9pc3kpIgotCWRlcGVuZHMgb24gSkZGUzJfRlMKLQlkZWZhdWx0ICIwIgotCWhlbHAKLQkgIFRoaXMgY29udHJvbHMgdGhlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgbWVzc2FnZXMgcHJvZHVjZWQgYnkgdGhlIEpGRlMyCi0JICBjb2RlLiBTZXQgaXQgdG8gemVybyBmb3IgdXNlIGluIHByb2R1Y3Rpb24gc3lzdGVtcy4gRm9yIGV2YWx1YXRpb24sCi0JICB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcsIGl0J3MgYWR2aXNhYmxlIHRvIHNldCBpdCB0byBvbmUuIFRoaXMgd2lsbAotCSAgZW5hYmxlIGEgZmV3IGFzc2VydGlvbnMgYW5kIHdpbGwgcHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIGF0IHRoZQotCSAgS0VSTl9ERUJVRyBsb2dsZXZlbCwgd2hlcmUgdGhleSB3b24ndCBub3JtYWxseSBiZSB2aXNpYmxlLiBMZXZlbCAyCi0JICBpcyB1bmxpa2VseSB0byBiZSB1c2VmdWwgLSBpdCBlbmFibGVzIGV4dHJhIGRlYnVnZ2luZyBpbiBjZXJ0YWluCi0JICBhcmVhcyB3aGljaCBhdCBvbmUgcG9pbnQgbmVlZGVkIGRlYnVnZ2luZywgYnV0IHdoZW4gdGhlIGJ1Z3Mgd2VyZQotCSAgbG9jYXRlZCBhbmQgZml4ZWQsIHRoZSBkZXRhaWxlZCBtZXNzYWdlcyB3ZXJlIHJlbGVnYXRlZCB0byBsZXZlbCAyLgotCi0JICBJZiByZXBvcnRpbmcgYnVncywgcGxlYXNlIHRyeSB0byBoYXZlIGF2YWlsYWJsZSBhIGZ1bGwgZHVtcCBvZiB0aGUKLQkgIG1lc3NhZ2VzIGF0IGRlYnVnIGxldmVsIDEgd2hpbGUgdGhlIG1pc2JlaGF2aW91ciB3YXMgb2NjdXJyaW5nLgotCi1jb25maWcgSkZGUzJfRlNfV1JJVEVCVUZGRVIKLQlib29sICJKRkZTMiB3cml0ZS1idWZmZXJpbmcgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgVGhpcyBlbmFibGVzIHRoZSB3cml0ZS1idWZmZXJpbmcgc3VwcG9ydCBpbiBKRkZTMi4KLQotCSAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgSkZGUzIgb24gdGhlIGZvbGxvd2luZwotCSAgdHlwZXMgb2YgZmxhc2ggZGV2aWNlczoKLQkgICAgLSBOQU5EIGZsYXNoCi0JICAgIC0gTk9SIGZsYXNoIHdpdGggdHJhbnNwYXJlbnQgRUNDCi0JICAgIC0gRGF0YUZsYXNoCi0KLWNvbmZpZyBKRkZTMl9GU19XQlVGX1ZFUklGWQotCWJvb2wgIlZlcmlmeSBKRkZTMiB3cml0ZS1idWZmZXIgcmVhZHMiCi0JZGVwZW5kcyBvbiBKRkZTMl9GU19XUklURUJVRkZFUgotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgY2F1c2VzIEpGRlMyIHRvIHJlYWQgYmFjayBldmVyeSBwYWdlIHdyaXR0ZW4gdGhyb3VnaCB0aGUKLQkgIHdyaXRlLWJ1ZmZlciwgYW5kIGNoZWNrIGZvciBlcnJvcnMuCi0KLWNvbmZpZyBKRkZTMl9TVU1NQVJZCi0JYm9vbCAiSkZGUzIgc3VtbWFyeSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gSkZGUzJfRlMgJiYgRVhQRVJJTUVOVEFMCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgVGhpcyBmZWF0dXJlIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBzdW1tYXJ5IGluZm9ybWF0aW9uCi0JICBmb3IgZmFzdGVyIGZpbGVzeXN0ZW0gbW91bnQuCi0KLQkgIFRoZSBzdW1tYXJ5IGluZm9ybWF0aW9uIGNhbiBiZSBpbnNlcnRlZCBpbnRvIGEgZmlsZXN5c3RlbSBpbWFnZQotCSAgYnkgdGhlIHV0aWxpdHkgJ3N1bXRvb2wnLgotCi0JICBJZiB1bnN1cmUsIHNheSAnTicuCi0KLWNvbmZpZyBKRkZTMl9GU19YQVRUUgotCWJvb2wgIkpGRlMyIFhBVFRSIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBKRkZTMl9GUyAmJiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKLQkgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKLQkgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgSkZGUzJfRlNfUE9TSVhfQUNMCi0JYm9vbCAiSkZGUzIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCi0JZGVwZW5kcyBvbiBKRkZTMl9GU19YQVRUUgotCWRlZmF1bHQgeQotCXNlbGVjdCBGU19QT1NJWF9BQ0wKLQloZWxwCi0JICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCi0JICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCi0KLQkgIFRvIGxlYXJuIG1vcmUgYWJvdXQgQWNjZXNzIENvbnRyb2wgTGlzdHMsIHZpc2l0IHRoZSBQb3NpeCBBQ0xzIGZvcgotCSAgTGludXggd2Vic2l0ZSA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+LgotCi0JICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4KLQotY29uZmlnIEpGRlMyX0ZTX1NFQ1VSSVRZCi0JYm9vbCAiSkZGUzIgU2VjdXJpdHkgTGFiZWxzIgotCWRlcGVuZHMgb24gSkZGUzJfRlNfWEFUVFIKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBTZWN1cml0eSBsYWJlbHMgc3VwcG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHMKLQkgIGltcGxlbWVudGVkIGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb24KLQkgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHkKLQkgIGxhYmVscyBpbiB0aGUgamZmczIgZmlsZXN5c3RlbS4KLQotCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZwotCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgotCi1jb25maWcgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUwotCWJvb2wgIkFkdmFuY2VkIGNvbXByZXNzaW9uIG9wdGlvbnMgZm9yIEpGRlMyIgotCWRlcGVuZHMgb24gSkZGUzJfRlMKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBFbmFibGluZyB0aGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGV4cGxpY2l0bHkgY2hvb3NlIHdoaWNoCi0JICBjb21wcmVzc2lvbiBtb2R1bGVzLCBpZiBhbnksIGFyZSBlbmFibGVkIGluIEpGRlMyLiBSZW1vdmluZwotCSAgY29tcHJlc3NvcnMgY2FuIG1lYW4geW91IGNhbm5vdCByZWFkIGV4aXN0aW5nIGZpbGUgc3lzdGVtcywKLQkgIGFuZCBlbmFibGluZyBleHBlcmltZW50YWwgY29tcHJlc3NvcnMgY2FuIG1lYW4gdGhhdCB5b3UKLQkgIHdyaXRlIGEgZmlsZSBzeXN0ZW0gd2hpY2ggY2Fubm90IGJlIHJlYWQgYnkgYSBzdGFuZGFyZCBrZXJuZWwuCi0KLQkgIElmIHVuc3VyZSwgeW91IHNob3VsZCBfZGVmaW5pdGVseV8gc2F5ICdOJy4KLQotY29uZmlnIEpGRlMyX1pMSUIKLQlib29sICJKRkZTMiBaTElCIGNvbXByZXNzaW9uIHN1cHBvcnQiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKLQlzZWxlY3QgWkxJQl9JTkZMQVRFCi0Jc2VsZWN0IFpMSUJfREVGTEFURQotCWRlcGVuZHMgb24gSkZGUzJfRlMKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBabGliIGlzIGRlc2lnbmVkIHRvIGJlIGEgZnJlZSwgZ2VuZXJhbC1wdXJwb3NlLCBsZWdhbGx5IHVuZW5jdW1iZXJlZCwKLQkgIGxvc3NsZXNzIGRhdGEtY29tcHJlc3Npb24gbGlicmFyeSBmb3IgdXNlIG9uIHZpcnR1YWxseSBhbnkgY29tcHV0ZXIKLQkgIGhhcmR3YXJlIGFuZCBvcGVyYXRpbmcgc3lzdGVtLiBTZWUgPGh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi8+IGZvcgotCSAgZnVydGhlciBpbmZvcm1hdGlvbi4KLQotCSAgU2F5ICdZJyBpZiB1bnN1cmUuCi0KLWNvbmZpZyBKRkZTMl9MWk8KLQlib29sICJKRkZTMiBMWk8gY29tcHJlc3Npb24gc3VwcG9ydCIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUwotCXNlbGVjdCBMWk9fQ09NUFJFU1MKLQlzZWxlY3QgTFpPX0RFQ09NUFJFU1MKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgbWluaWx6by1iYXNlZCBjb21wcmVzc2lvbi4gR2VuZXJhbGx5IHdvcmtzIGJldHRlciB0aGFuIFpsaWIuCi0KLQkgIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgaW4gSnVseSwgMjAwNy4gU2F5ICdOJyBpZiB5b3UgbmVlZAotCSAgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGJvb3Rsb2FkZXJzIG9yIGtlcm5lbHMuCi0KLWNvbmZpZyBKRkZTMl9SVElNRQotCWJvb2wgIkpGRlMyIFJUSU1FIGNvbXByZXNzaW9uIHN1cHBvcnQiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgUnRpbWUgZG9lcyBtYW5hZ2UgdG8gcmVjb21wcmVzcyBhbHJlYWR5LWNvbXByZXNzZWQgZGF0YS4gU2F5ICdZJyBpZiB1bnN1cmUuCi0KLWNvbmZpZyBKRkZTMl9SVUJJTgotCWJvb2wgIkpGRlMyIFJVQklOIGNvbXByZXNzaW9uIHN1cHBvcnQiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgUlVCSU5NSVBTIGFuZCBEWU5SVUJJTiBjb21wcmVzc29ycy4gU2F5ICdOJyBpZiB1bnN1cmUuCi0KLWNob2ljZQotCXByb21wdCAiSkZGUzIgZGVmYXVsdCBjb21wcmVzc2lvbiBtb2RlIiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCi0JZGVmYXVsdCBKRkZTMl9DTU9ERV9QUklPUklUWQotCWRlcGVuZHMgb24gSkZGUzJfRlMKLQloZWxwCi0JICBZb3UgY2FuIHNldCBoZXJlIHRoZSBkZWZhdWx0IGNvbXByZXNzaW9uIG1vZGUgb2YgSkZGUzIgZnJvbQotCSAgdGhlIGF2YWlsYWJsZSBjb21wcmVzc2lvbiBtb2Rlcy4gRG9uJ3QgdG91Y2ggaWYgdW5zdXJlLgotCi1jb25maWcgSkZGUzJfQ01PREVfTk9ORQotCWJvb2wgIm5vIGNvbXByZXNzaW9uIgotCWhlbHAKLQkgIFVzZXMgbm8gY29tcHJlc3Npb24uCi0KLWNvbmZpZyBKRkZTMl9DTU9ERV9QUklPUklUWQotCWJvb2wgInByaW9yaXR5IgotCWhlbHAKLQkgIFRyaWVzIHRoZSBjb21wcmVzc29ycyBpbiBhIHByZWRlZmluZWQgb3JkZXIgYW5kIGNob29zZXMgdGhlIGZpcnN0Ci0JICBzdWNjZXNzZnVsIG9uZS4KLQotY29uZmlnIEpGRlMyX0NNT0RFX1NJWkUKLQlib29sICJzaXplIChFWFBFUklNRU5UQUwpIgotCWhlbHAKLQkgIFRyaWVzIGFsbCBjb21wcmVzc29ycyBhbmQgY2hvb3NlcyB0aGUgb25lIHdoaWNoIGhhcyB0aGUgc21hbGxlc3QKLQkgIHJlc3VsdC4KLQotY29uZmlnIEpGRlMyX0NNT0RFX0ZBVk9VUkxaTwotCWJvb2wgIkZhdm91ciBMWk8iCi0JaGVscAotCSAgVHJpZXMgYWxsIGNvbXByZXNzb3JzIGFuZCBjaG9vc2VzIHRoZSBvbmUgd2hpY2ggaGFzIHRoZSBzbWFsbGVzdAotCSAgcmVzdWx0IGJ1dCBnaXZlcyBzb21lIHByZWZlcmVuY2UgdG8gTFpPICh3aGljaCBoYXMgZmFzdGVyCi0JICBkZWNvbXByZXNzaW9uKSBhdCB0aGUgZXhwZW5zZSBvZiBzaXplLgotCi1lbmRjaG9pY2UKLQorc291cmNlICJmcy9qZmZzMi9LY29uZmlnIgogIyBVQklGUyBGaWxlIHN5c3RlbSBjb25maWd1cmF0aW9uCiBzb3VyY2UgImZzL3ViaWZzL0tjb25maWciCiAKQEAgLTE3NzksNiArMTM0NywyOCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgU1VOUlBDX1JFR0lTVEVSX1Y0CisJYm9vbCAiUmVnaXN0ZXIgbG9jYWwgUlBDIHNlcnZpY2VzIHZpYSBycGNiaW5kIHY0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gU1VOUlBDICYmIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFN1biBhZGRlZCBzdXBwb3J0IGZvciByZWdpc3RlcmluZyBSUEMgc2VydmljZXMgYXQgYW4gSVB2NgorCSAgYWRkcmVzcyBieSBjcmVhdGluZyB0d28gbmV3IHZlcnNpb25zIG9mIHRoZSBycGNiaW5kIHByb3RvY29sCisJICAoUkZDIDE4MzMpLgorCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgaW4gdGhlIGtlcm5lbCBSUEMgc2VydmVyIGZvcgorCSAgcmVnaXN0ZXJpbmcga2VybmVsIFJQQyBzZXJ2aWNlcyB2aWEgdmVyc2lvbiA0IG9mIHRoZSBycGNiaW5kCisJICBwcm90b2NvbC4gIElmIHlvdSBlbmFibGUgdGhpcyBvcHRpb24sIHlvdSBtdXN0IHJ1biBhIHBvcnRtYXBwZXIKKwkgIGRhZW1vbiB0aGF0IHN1cHBvcnRzIHJwY2JpbmQgcHJvdG9jb2wgdmVyc2lvbiA0LgorCisJICBTZXJ2aW5nIE5GUyBvdmVyIElQdjYgZnJvbSBrbmZzZCAodGhlIGtlcm5lbCdzIE5GUyBzZXJ2ZXIpCisJICByZXF1aXJlcyB0aGF0IHlvdSBlbmFibGUgdGhpcyBvcHRpb24gYW5kIHVzZSBhIHBvcnRtYXBwZXIgdGhhdAorCSAgc3VwcG9ydHMgcnBjYmluZCB2ZXJzaW9uIDQuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4gdG8gZ2V0IHRyYWRpdGlvbmFsIGJlaGF2aW9yIChyZWdpc3RlciBrZXJuZWwKKwkgIFJQQyBzZXJ2aWNlcyB1c2luZyBvbmx5IHJwY2JpbmQgdmVyc2lvbiAyKS4gIERpc3RyaWJ1dGlvbnMKKwkgIHVzaW5nIHRoZSBsZWdhY3kgTGludXggcG9ydG1hcHBlciBkYWVtb24gbXVzdCBzYXkgTiBoZXJlLgorCiBjb25maWcgUlBDU0VDX0dTU19LUkI1CiAJdHJpc3RhdGUgIlNlY3VyZSBSUEM6IEtlcmJlcm9zIFYgbWVjaGFuaXNtIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gU1VOUlBDICYmIEVYUEVSSU1FTlRBTApAQCAtMTg3MywxNDggKzE0NjMsNyBAQAogCiAJICBzbWJtb3VudCBmcm9tIHNhbWJhIDIuMi4wIG9yIGxhdGVyIHN1cHBvcnRzIHRoaXMuCiAKLWNvbmZpZyBDSUZTCi0JdHJpc3RhdGUgIkNJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtLCBTTUJGUyBzdWNjZXNzb3IpIgotCWRlcGVuZHMgb24gSU5FVAotCXNlbGVjdCBOTFMKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBjbGllbnQgVkZTIG1vZHVsZSBmb3IgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbQotCSAgKENJRlMpIHByb3RvY29sIHdoaWNoIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIFNlcnZlciBNZXNzYWdlIEJsb2NrIAotCSAgKFNNQikgcHJvdG9jb2wsIHRoZSBuYXRpdmUgZmlsZSBzaGFyaW5nIG1lY2hhbmlzbSBmb3IgbW9zdCBlYXJseQotCSAgUEMgb3BlcmF0aW5nIHN5c3RlbXMuICBUaGUgQ0lGUyBwcm90b2NvbCBpcyBmdWxseSBzdXBwb3J0ZWQgYnkgCi0JICBmaWxlIHNlcnZlcnMgc3VjaCBhcyBXaW5kb3dzIDIwMDAgKGluY2x1ZGluZyBXaW5kb3dzIDIwMDMsIE5UIDQgIAotCSAgYW5kIFdpbmRvd3MgWFApIGFzIHdlbGwgYnkgU2FtYmEgKHdoaWNoIHByb3ZpZGVzIGV4Y2VsbGVudCBDSUZTCi0JICBzZXJ2ZXIgc3VwcG9ydCBmb3IgTGludXggYW5kIG1hbnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMpLiBMaW1pdGVkCi0JICBzdXBwb3J0IGZvciBPUy8yIGFuZCBXaW5kb3dzIE1FIGFuZCBzaW1pbGFyIHNlcnZlcnMgaXMgcHJvdmlkZWQgYXMKLQkgIHdlbGwuCi0KLQkgIFRoZSBjaWZzIG1vZHVsZSBwcm92aWRlcyBhbiBhZHZhbmNlZCBuZXR3b3JrIGZpbGUgc3lzdGVtCi0JICBjbGllbnQgZm9yIG1vdW50aW5nIHRvIENJRlMgY29tcGxpYW50IHNlcnZlcnMuICBJdCBpbmNsdWRlcwotCSAgc3VwcG9ydCBmb3IgREZTIChoaWVyYXJjaGljYWwgbmFtZSBzcGFjZSksIHNlY3VyZSBwZXItdXNlcgotCSAgc2Vzc2lvbiBlc3RhYmxpc2htZW50IHZpYSBLZXJiZXJvcyBvciBOVExNIG9yIE5UTE12MiwKLQkgIHNhZmUgZGlzdHJpYnV0ZWQgY2FjaGluZyAob3Bsb2NrKSwgb3B0aW9uYWwgcGFja2V0Ci0JICBzaWduaW5nLCBVbmljb2RlIGFuZCBvdGhlciBpbnRlcm5hdGlvbmFsaXphdGlvbiBpbXByb3ZlbWVudHMuCi0JICBJZiB5b3UgbmVlZCB0byBtb3VudCB0byBTYW1iYSBvciBXaW5kb3dzIGZyb20gdGhpcyBtYWNoaW5lLCBzYXkgWS4KLQotY29uZmlnIENJRlNfU1RBVFMKLSAgICAgICAgYm9vbCAiQ0lGUyBzdGF0aXN0aWNzIgotICAgICAgICBkZXBlbmRzIG9uIENJRlMKLSAgICAgICAgaGVscAotICAgICAgICAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugc3RhdGlzdGljcyBmb3IgZWFjaCBzZXJ2ZXIgc2hhcmUKLQkgIG1vdW50ZWQgYnkgdGhlIGNpZnMgY2xpZW50IHRvIGJlIGRpc3BsYXllZCBpbiAvcHJvYy9mcy9jaWZzL1N0YXRzCi0KLWNvbmZpZyBDSUZTX1NUQVRTMgotCWJvb2wgIkV4dGVuZGVkIHN0YXRpc3RpY3MiCi0JZGVwZW5kcyBvbiBDSUZTX1NUQVRTCi0JaGVscAotCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBhbGxvdyBtb3JlIGRldGFpbGVkIHN0YXRpc3RpY3Mgb24gU01CCi0JICByZXF1ZXN0IHRpbWluZyB0byBiZSBkaXNwbGF5ZWQgaW4gL3Byb2MvZnMvY2lmcy9EZWJ1Z0RhdGEgYW5kIGFsc28KLQkgIGFsbG93IG9wdGlvbmFsIGxvZ2dpbmcgb2Ygc2xvdyByZXNwb25zZXMgdG8gZG1lc2cgKGRlcGVuZGluZyBvbiB0aGUKLQkgIHZhbHVlIG9mIC9wcm9jL2ZzL2NpZnMvY2lmc0ZZSSwgc2VlIGZzL2NpZnMvUkVBRE1FIGZvciBtb3JlIGRldGFpbHMpLgotCSAgVGhlc2UgYWRkaXRpb25hbCBzdGF0aXN0aWNzIG1heSBoYXZlIGEgbWlub3IgZWZmZWN0IG9uIHBlcmZvcm1hbmNlCi0JICBhbmQgbWVtb3J5IHV0aWxpemF0aW9uLgotCi0JICBVbmxlc3MgeW91IGFyZSBhIGRldmVsb3BlciBvciBhcmUgZG9pbmcgbmV0d29yayBwZXJmb3JtYW5jZSBhbmFseXNpcwotCSAgb3IgdHVuaW5nLCBzYXkgTi4KLQotY29uZmlnIENJRlNfV0VBS19QV19IQVNICi0JYm9vbCAiU3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2Ugd2Vha2VyIExBTk1BTiBzZWN1cml0eSIKLQlkZXBlbmRzIG9uIENJRlMKLQloZWxwCi0JICBNb2Rlcm4gQ0lGUyBzZXJ2ZXJzIGluY2x1ZGluZyBTYW1iYSBhbmQgbW9zdCBXaW5kb3dzIHZlcnNpb25zCi0JICAoc2luY2UgMTk5Nykgc3VwcG9ydCBzdHJvbmdlciBOVExNIChhbmQgZXZlbiBOVExNdjIgYW5kIEtlcmJlcm9zKQotCSAgc2VjdXJpdHkgbWVjaGFuaXNtcy4gVGhlc2UgaGFzaCB0aGUgcGFzc3dvcmQgbW9yZSBzZWN1cmVseQotCSAgdGhhbiB0aGUgbWVjaGFuaXNtcyB1c2VkIGluIHRoZSBvbGRlciBMQU5NQU4gdmVyc2lvbiBvZiB0aGUKLQkgIFNNQiBwcm90b2NvbCBidXQgTEFOTUFOIGJhc2VkIGF1dGhlbnRpY2F0aW9uIGlzIG5lZWRlZCB0bwotCSAgZXN0YWJsaXNoIHNlc3Npb25zIHdpdGggc29tZSBvbGQgU01CIHNlcnZlcnMuCi0KLQkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGFsbG93cyB0aGUgY2lmcyBtb2R1bGUgdG8gbW91bnQgdG8gb2xkZXIKLQkgIExBTk1BTiBiYXNlZCBzZXJ2ZXJzIHN1Y2ggYXMgT1MvMiBhbmQgV2luZG93cyA5NSwgYnV0IHN1Y2gKLQkgIG1vdW50cyBtYXkgYmUgbGVzcyBzZWN1cmUgdGhhbiBtb3VudHMgdXNpbmcgTlRMTSBvciBtb3JlIHJlY2VudAotCSAgc2VjdXJpdHkgbWVjaGFuaXNtcyBpZiB5b3UgYXJlIG9uIGEgcHVibGljIG5ldHdvcmsuICBVbmxlc3MgeW91Ci0JICBoYXZlIGEgbmVlZCB0byBhY2Nlc3Mgb2xkIFNNQiBzZXJ2ZXJzIChhbmQgYXJlIG9uIGEgcHJpdmF0ZQotCSAgbmV0d29yaykgeW91IHByb2JhYmx5IHdhbnQgdG8gc2F5IE4uICBFdmVuIGlmIHRoaXMgc3VwcG9ydAotCSAgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLCBMQU5NQU4gYXV0aGVudGljYXRpb24gd2lsbCBub3QgYmUKLQkgIHVzZWQgYXV0b21hdGljYWxseS4gQXQgcnVudGltZSBMQU5NQU4gbW91bnRzIGFyZSBkaXNhYmxlZCBidXQKLQkgIGNhbiBiZSBzZXQgdG8gcmVxdWlyZWQgKG9yIG9wdGlvbmFsKSBlaXRoZXIgaW4KLQkgIC9wcm9jL2ZzL2NpZnMgKHNlZSBmcy9jaWZzL1JFQURNRSBmb3IgbW9yZSBkZXRhaWwpIG9yIHZpYSBhbgotCSAgb3B0aW9uIG9uIHRoZSBtb3VudCBjb21tYW5kLiBUaGlzIHN1cHBvcnQgaXMgZGlzYWJsZWQgYnkKLQkgIGRlZmF1bHQgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBwb3NzaWJpbGl0eSBvZiBhIGRvd25ncmFkZQotCSAgYXR0YWNrLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQ0lGU19VUENBTEwKLQkgIGJvb2wgIktlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwIgotCSAgZGVwZW5kcyBvbiBDSUZTICYmIEtFWVMKLQkgIGhlbHAKLQkgICAgRW5hYmxlcyBhbiB1cGNhbGwgbWVjaGFuaXNtIGZvciBDSUZTIHdoaWNoIGFjY2Vzc2VzCi0JICAgIHVzZXJzcGFjZSBoZWxwZXIgdXRpbGl0aWVzIHRvIHByb3ZpZGUgU1BORUdPIHBhY2thZ2VkIChSRkMgNDE3OCkKLQkgICAgS2VyYmVyb3MgdGlja2V0cyB3aGljaCBhcmUgbmVlZGVkIHRvIG1vdW50IHRvIGNlcnRhaW4gc2VjdXJlIHNlcnZlcnMKLQkgICAgKGZvciB3aGljaCBtb3JlIHNlY3VyZSBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZCkuIElmCi0JICAgIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBDSUZTX1hBVFRSCi0gICAgICAgIGJvb2wgIkNJRlMgZXh0ZW5kZWQgYXR0cmlidXRlcyIKLSAgICAgICAgZGVwZW5kcyBvbiBDSUZTCi0gICAgICAgIGhlbHAKLSAgICAgICAgICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKLSAgICAgICAgICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0Ci0gICAgICAgICAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuICBDSUZTIG1hcHMgdGhlIG5hbWUgb2YKLSAgICAgICAgICBleHRlbmRlZCBhdHRyaWJ1dGVzIGJlZ2lubmluZyB3aXRoIHRoZSB1c2VyIG5hbWVzcGFjZSBwcmVmaXgKLSAgICAgICAgICB0byBTTUIvQ0lGUyBFQXMuIEVBcyBhcmUgc3RvcmVkIG9uIFdpbmRvd3Mgc2VydmVycyB3aXRob3V0IHRoZQotICAgICAgICAgIHVzZXIgbmFtZXNwYWNlIHByZWZpeCwgYnV0IHRoZWlyIG5hbWVzIGFyZSBzZWVuIGJ5IExpbnV4IGNpZnMgY2xpZW50cwotICAgICAgICAgIHByZWZhY2VkIGJ5IHRoZSB1c2VyIG5hbWVzcGFjZSBwcmVmaXguIFRoZSBzeXN0ZW0gbmFtZXNwYWNlCi0gICAgICAgICAgKHVzZWQgYnkgc29tZSBmaWxlc3lzdGVtcyB0byBzdG9yZSBBQ0xzKSBpcyBub3Qgc3VwcG9ydGVkIGF0Ci0gICAgICAgICAgdGhpcyB0aW1lLgotCi0gICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIENJRlNfUE9TSVgKLSAgICAgICAgYm9vbCAiQ0lGUyBQT1NJWCBFeHRlbnNpb25zIgotICAgICAgICBkZXBlbmRzIG9uIENJRlNfWEFUVFIKLSAgICAgICAgaGVscAotICAgICAgICAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIGNpZnMgY2xpZW50IHRvIGF0dGVtcHQgdG8KLQkgIG5lZ290aWF0ZSBhIG5ld2VyIGRpYWxlY3Qgd2l0aCBzZXJ2ZXJzLCBzdWNoIGFzIFNhbWJhIDMuMC41Ci0JICBvciBsYXRlciwgdGhhdCBvcHRpb25hbGx5IGNhbiBoYW5kbGUgbW9yZSBQT1NJWCBsaWtlIChyYXRoZXIKLQkgIHRoYW4gV2luZG93cyBsaWtlKSBmaWxlIGJlaGF2aW9yLiAgSXQgYWxzbyBlbmFibGVzCi0JICBzdXBwb3J0IGZvciBQT1NJWCBBQ0xzIChnZXRmYWNsIGFuZCBzZXRmYWNsKSB0byBzZXJ2ZXJzCi0JICAoc3VjaCBhcyBTYW1iYSAzLjEwIGFuZCBsYXRlcikgd2hpY2ggY2FuIG5lZ290aWF0ZQotCSAgQ0lGUyBQT1NJWCBBQ0wgc3VwcG9ydC4gIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBDSUZTX0RFQlVHMgotCWJvb2wgIkVuYWJsZSBhZGRpdGlvbmFsIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzIgotCWRlcGVuZHMgb24gQ0lGUwotCWhlbHAKLQkgICBFbmFibGluZyB0aGlzIG9wdGlvbiBhZGRzIGEgZmV3IG1vcmUgZGVidWdnaW5nIHJvdXRpbmVzCi0JICAgdG8gdGhlIGNpZnMgY29kZSB3aGljaCBzbGlnaHRseSBpbmNyZWFzZXMgdGhlIHNpemUgb2YKLQkgICB0aGUgY2lmcyBtb2R1bGUgYW5kIGNhbiBjYXVzZSBhZGRpdGlvbmFsIGxvZ2dpbmcgb2YgZGVidWcKLQkgICBtZXNzYWdlcyBpbiBzb21lIGVycm9yIHBhdGhzLCBzbG93aW5nIHBlcmZvcm1hbmNlLiBUaGlzCi0JICAgb3B0aW9uIGNhbiBiZSB0dXJuZWQgb2ZmIHVubGVzcyB5b3UgYXJlIGRlYnVnZ2luZwotCSAgIGNpZnMgcHJvYmxlbXMuICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQ0lGU19FWFBFUklNRU5UQUwKLQkgIGJvb2wgIkNJRlMgRXhwZXJpbWVudGFsIEZlYXR1cmVzIChFWFBFUklNRU5UQUwpIgotCSAgZGVwZW5kcyBvbiBDSUZTICYmIEVYUEVSSU1FTlRBTAotCSAgaGVscAotCSAgICBFbmFibGVzIGNpZnMgZmVhdHVyZXMgdW5kZXIgdGVzdGluZy4gVGhlc2UgZmVhdHVyZXMgYXJlCi0JICAgIGV4cGVyaW1lbnRhbCBhbmQgY3VycmVudGx5IGluY2x1ZGUgREZTIHN1cHBvcnQgYW5kIGRpcmVjdG9yeSAKLQkgICAgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZSBmY250bChGX0ROT1RJRlkpLCBhcyB3ZWxsIGFzIHRoZSB1cGNhbGwKLQkgICAgbWVjaGFuaXNtIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgS2VyYmVyb3Mgc2Vzc2lvbiBuZWdvdGlhdGlvbgotCSAgICBhbmQgdWlkIHJlbWFwcGluZy4gIFNvbWUgb2YgdGhlc2UgZmVhdHVyZXMgYWxzbyBtYXkgZGVwZW5kIG9uIAotCSAgICBzZXR0aW5nIGEgdmFsdWUgb2YgMSB0byB0aGUgcHNldWRvLWZpbGUgL3Byb2MvZnMvY2lmcy9FeHBlcmltZW50YWwKLQkgICAgKHdoaWNoIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQpLiBTZWUgdGhlIGZpbGUgZnMvY2lmcy9SRUFETUUgCi0JICAgIGZvciBtb3JlIGRldGFpbHMuICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQ0lGU19ERlNfVVBDQUxMCi0JICBib29sICJERlMgZmVhdHVyZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCSAgZGVwZW5kcyBvbiBDSUZTX0VYUEVSSU1FTlRBTAotCSAgZGVwZW5kcyBvbiBLRVlTCi0JICBoZWxwCi0JICAgIEVuYWJsZXMgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCBjb250YWN0cyB1c2Vyc3BhY2UKLQkgICAgaGVscGVyIHV0aWxpdGllcyB0byBwcm92aWRlIHNlcnZlciBuYW1lIHJlc29sdXRpb24gKGhvc3QgbmFtZXMgdG8KLQkgICAgSVAgYWRkcmVzc2VzKSB3aGljaCBpcyBuZWVkZWQgZm9yIGltcGxpY2l0IG1vdW50cyBvZiBERlMganVuY3Rpb24KLQkgICAgcG9pbnRzLiBJZiB1bnN1cmUsIHNheSBOLgorc291cmNlICJmcy9jaWZzL0tjb25maWciCiAKIGNvbmZpZyBOQ1BfRlMKIAl0cmlzdGF0ZSAiTkNQIGZpbGUgc3lzdGVtIHN1cHBvcnQgKHRvIG1vdW50IE5ldFdhcmUgdm9sdW1lcykiCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnLmJpbmZtdCBiL2ZzL0tjb25maWcuYmluZm10CmluZGV4IDRhNTUxYWYuLmNlOWZiM2YgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcuYmluZm10CisrKyBiL2ZzL0tjb25maWcuYmluZm10CkBAIC0yNSw3ICsyNSw3IEBACiAKIGNvbmZpZyBDT01QQVRfQklORk1UX0VMRgogCWJvb2wKLQlkZXBlbmRzIG9uIENPTVBBVCAmJiBNTVUKKwlkZXBlbmRzIG9uIENPTVBBVCAmJiBCSU5GTVRfRUxGCiAKIGNvbmZpZyBCSU5GTVRfRUxGX0ZEUElDCiAJYm9vbCAiS2VybmVsIHN1cHBvcnQgZm9yIEZEUElDIEVMRiBiaW5hcmllcyIKQEAgLTQwLDYgKzQwLDI4IEBACiAKIAkgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gcnVuIEZEUElDIEVMRiBiaW5hcmllcyBvbiBNTVUgbGludXggYWxzby4KIAorY29uZmlnIENPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTCisJYm9vbCAiV3JpdGUgRUxGIGNvcmUgZHVtcHMgd2l0aCBwYXJ0aWFsIHNlZ21lbnRzIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gQklORk1UX0VMRgorCWhlbHAKKwkgIEVMRiBjb3JlIGR1bXAgZmlsZXMgZGVzY3JpYmUgZWFjaCBtZW1vcnkgbWFwcGluZyBvZiB0aGUgY3Jhc2hlZAorCSAgcHJvY2VzcywgYW5kIGNhbiBjb250YWluIG9yIG9taXQgdGhlIG1lbW9yeSBjb250ZW50cyBvZiBlYWNoIG9uZS4KKwkgIFRoZSBjb250ZW50cyBvZiBhbiB1bm1vZGlmaWVkIHRleHQgbWFwcGluZyBhcmUgb21pdHRlZCBieSBkZWZhdWx0LgorCisJICBGb3IgYW4gdW5tb2RpZmllZCB0ZXh0IG1hcHBpbmcgb2YgYW4gRUxGIG9iamVjdCwgaW5jbHVkaW5nIGp1c3QKKwkgIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBmaWxlIGluIGEgY29yZSBkdW1wIG1ha2VzIGl0IHBvc3NpYmxlIHRvCisJICBpZGVudGlmeSB0aGUgYnVpbGQgSUQgYml0cyBpbiB0aGUgZmlsZSwgd2l0aG91dCBwYXlpbmcgdGhlIGkvbworCSAgY29zdCBhbmQgZGlzayBzcGFjZSB0byBkdW1wIGFsbCB0aGUgdGV4dC4gIEhvd2V2ZXIsIHZlcnNpb25zIG9mCisJICBHREIgYmVmb3JlIDYuNyBhcmUgY29uZnVzZWQgYnkgRUxGIGNvcmUgZHVtcCBmaWxlcyBpbiB0aGlzIGZvcm1hdC4KKworCSAgVGhlIGNvcmUgZHVtcCBiZWhhdmlvciBjYW4gYmUgY29udHJvbGxlZCBwZXIgcHJvY2VzcyB1c2luZworCSAgdGhlIC9wcm9jL1BJRC9jb3JlZHVtcF9maWx0ZXIgcHNldWRvLWZpbGU7IHRoaXMgc2V0dGluZyBpcworCSAgaW5oZXJpdGVkLiAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgZm9yIGRldGFpbHMuCisKKwkgIFRoaXMgY29uZmlnIG9wdGlvbiBjaGFuZ2VzIHRoZSBkZWZhdWx0IHNldHRpbmcgb2YgY29yZWR1bXBfZmlsdGVyCisJICBzZWVuIGF0IGJvb3QgdGltZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBCSU5GTVRfRkxBVAogCWJvb2wgIktlcm5lbCBzdXBwb3J0IGZvciBmbGF0IGJpbmFyaWVzIgogCWRlcGVuZHMgb24gIU1NVSAmJiAoIUZSViB8fCBCUk9LRU4pCkBAIC01OSwxMCArODEsMTIgQEAKIAloZWxwCiAJICBTdXBwb3J0IEZMQVQgc2hhcmVkIGxpYnJhcmllcwogCitjb25maWcgSEFWRV9BT1VUCisgICAgICAgZGVmX2Jvb2wgbgorCiBjb25maWcgQklORk1UX0FPVVQKIAl0cmlzdGF0ZSAiS2VybmVsIHN1cHBvcnQgZm9yIGEub3V0IGFuZCBFQ09GRiBiaW5hcmllcyIKLQlkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfQU9VVCAmJiBcCi0JCShYODZfMzIgfHwgQUxQSEEgfHwgQVJNIHx8IE02OEspCisJZGVwZW5kcyBvbiBIQVZFX0FPVVQKIAktLS1oZWxwLS0tCiAJICBBLm91dCAoQXNzZW1ibGVyLk9VVHB1dCkgaXMgYSBzZXQgb2YgZm9ybWF0cyBmb3IgbGlicmFyaWVzIGFuZAogCSAgZXhlY3V0YWJsZXMgdXNlZCBpbiB0aGUgZWFybGllc3QgdmVyc2lvbnMgb2YgVU5JWC4gIExpbnV4IHVzZWQKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggZGU0MDRiMC4uMjE2OGM5MCAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTcsOCArNyw4IEBACiAKIG9iai15IDo9CW9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXAogCQljaGFyX2Rldi5vIHN0YXQubyBleGVjLm8gcGlwZS5vIG5hbWVpLm8gZmNudGwubyBcCi0JCWlvY3RsLm8gcmVhZGRpci5vIHNlbGVjdC5vIGZpZm8ubyBsb2Nrcy5vIGRjYWNoZS5vIGlub2RlLm8gXAotCQlhdHRyLm8gYmFkX2lub2RlLm8gZmlsZS5vIGZpbGVzeXN0ZW1zLm8gbmFtZXNwYWNlLm8gYWlvLm8gXAorCQlpb2N0bC5vIHJlYWRkaXIubyBzZWxlY3QubyBmaWZvLm8gZGNhY2hlLm8gaW5vZGUubyBcCisJCWF0dHIubyBiYWRfaW5vZGUubyBmaWxlLm8gZmlsZXN5c3RlbXMubyBuYW1lc3BhY2UubyBcCiAJCXNlcV9maWxlLm8geGF0dHIubyBsaWJmcy5vIGZzLXdyaXRlYmFjay5vIFwKIAkJcG5vZGUubyBkcm9wX2NhY2hlcy5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubyBcCiAJCXN0YWNrLm8KQEAgLTI3LDYgKzI3LDggQEAKIG9iai0kKENPTkZJR19TSUdOQUxGRCkJCSs9IHNpZ25hbGZkLm8KIG9iai0kKENPTkZJR19USU1FUkZEKQkJKz0gdGltZXJmZC5vCiBvYmotJChDT05GSUdfRVZFTlRGRCkJCSs9IGV2ZW50ZmQubworb2JqLSQoQ09ORklHX0FJTykgICAgICAgICAgICAgICArPSBhaW8ubworb2JqLSQoQ09ORklHX0ZJTEVfTE9DS0lORykgICAgICArPSBsb2Nrcy5vCiBvYmotJChDT05GSUdfQ09NUEFUKQkJKz0gY29tcGF0Lm8gY29tcGF0X2lvY3RsLm8KIAogbmZzZC0kKENPTkZJR19ORlNEKQkJOj0gbmZzY3RsLm8KQEAgLTY5LDcgKzcxLDcgQEAKICMgRG8gbm90IGFkZCBhbnkgZmlsZXN5c3RlbXMgYmVmb3JlIHRoaXMgbGluZQogb2JqLSQoQ09ORklHX1JFSVNFUkZTX0ZTKQkrPSByZWlzZXJmcy8KIG9iai0kKENPTkZJR19FWFQzX0ZTKQkJKz0gZXh0My8gIyBCZWZvcmUgZXh0MiBzbyByb290IGZzIGNhbiBiZSBleHQzCi1vYmotJChDT05GSUdfRVhUNF9GUykJCSs9IGV4dDQvICMgQmVmb3JlIGV4dDIgc28gcm9vdCBmcyBjYW4gYmUgZXh0NGRldgorb2JqLSQoQ09ORklHX0VYVDRfRlMpCQkrPSBleHQ0LyAjIEJlZm9yZSBleHQyIHNvIHJvb3QgZnMgY2FuIGJlIGV4dDQKIG9iai0kKENPTkZJR19KQkQpCQkrPSBqYmQvCiBvYmotJChDT05GSUdfSkJEMikJCSs9IGpiZDIvCiBvYmotJChDT05GSUdfRVhUMl9GUykJCSs9IGV4dDIvCmRpZmYgLS1naXQgYS9mcy9hZGZzL3N1cGVyLmMgYi9mcy9hZGZzL3N1cGVyLmMKaW5kZXggMjZmM2I0My4uN2Y4M2E0NiAxMDA2NDQKLS0tIGEvZnMvYWRmcy9zdXBlci5jCisrKyBiL2ZzL2FkZnMvc3VwZXIuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAKIGVudW0ge09wdF91aWQsIE9wdF9naWQsIE9wdF9vd25tYXNrLCBPcHRfb3RobWFzaywgT3B0X2Vycn07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X3VpZCwgInVpZD0ldSJ9LAogCXtPcHRfZ2lkLCAiZ2lkPSV1In0sCiAJe09wdF9vd25tYXNrLCAib3dubWFzaz0lbyJ9LApkaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jCmluZGV4IDNhODkwOTQuLjg5ODljOTMgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvc3VwZXIuYworKysgYi9mcy9hZmZzL3N1cGVyLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogCU9wdF92ZXJib3NlLCBPcHRfdm9sdW1lLCBPcHRfaWdub3JlLCBPcHRfZXJyLAogfTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewogCXtPcHRfYnMsICJicz0ldSJ9LAogCXtPcHRfbW9kZSwgIm1vZGU9JW8ifSwKIAl7T3B0X211ZnMsICJtdWZzIn0sCmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuYwppbmRleCA1MjVmN2M1Li5hMzkwMTc2IDEwMDY0NAotLS0gYS9mcy9hZnMvZmlsZS5jCisrKyBiL2ZzL2Fmcy9maWxlLmMKQEAgLTUwLDggKzUwLDggQEAKIAkubGF1bmRlcl9wYWdlCT0gYWZzX2xhdW5kZXJfcGFnZSwKIAkucmVsZWFzZXBhZ2UJPSBhZnNfcmVsZWFzZXBhZ2UsCiAJLmludmFsaWRhdGVwYWdlCT0gYWZzX2ludmFsaWRhdGVwYWdlLAotCS5wcmVwYXJlX3dyaXRlCT0gYWZzX3ByZXBhcmVfd3JpdGUsCi0JLmNvbW1pdF93cml0ZQk9IGFmc19jb21taXRfd3JpdGUsCisJLndyaXRlX2JlZ2luCT0gYWZzX3dyaXRlX2JlZ2luLAorCS53cml0ZV9lbmQJPSBhZnNfd3JpdGVfZW5kLAogCS53cml0ZXBhZ2UJPSBhZnNfd3JpdGVwYWdlLAogCS53cml0ZXBhZ2VzCT0gYWZzX3dyaXRlcGFnZXMsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaAppbmRleCAzY2I2OTIwLi42N2YyNTlkIDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAorKysgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtNzI4LDggKzcyOCwxMiBAQAogICovCiBleHRlcm4gaW50IGFmc19zZXRfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqKTsKIGV4dGVybiB2b2lkIGFmc19wdXRfd3JpdGViYWNrKHN0cnVjdCBhZnNfd3JpdGViYWNrICopOwotZXh0ZXJuIGludCBhZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwotZXh0ZXJuIGludCBhZnNfY29tbWl0X3dyaXRlKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CitleHRlcm4gaW50IGFmc193cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAorCQkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSk7CitleHRlcm4gaW50IGFmc193cml0ZV9lbmQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqZnNkYXRhKTsKIGV4dGVybiBpbnQgYWZzX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7CiBleHRlcm4gaW50IGFmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKIGV4dGVybiBpbnQgYWZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL3N1cGVyLmMgYi9mcy9hZnMvc3VwZXIuYwppbmRleCAyNTBkOGM0Li5hZWUyMzlhIDEwMDY0NAotLS0gYS9mcy9hZnMvc3VwZXIuYworKysgYi9mcy9hZnMvc3VwZXIuYwpAQCAtNjQsNyArNjQsNyBAQAogCWFmc19vcHRfdm9sLAogfTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgYWZzX29wdGlvbnNfbGlzdCA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IGFmc19vcHRpb25zX2xpc3QgPSB7CiAJeyBhZnNfb3B0X2NlbGwsCQkiY2VsbD0lcyIJfSwKIAl7IGFmc19vcHRfcndwYXRoLAkicndwYXRoIgl9LAogCXsgYWZzX29wdF92b2wsCQkidm9sPSVzIgl9LApkaWZmIC0tZ2l0IGEvZnMvYWZzL3dyaXRlLmMgYi9mcy9hZnMvd3JpdGUuYwppbmRleCAwNjViNGUxLi5kNmI4NWRhIDEwMDY0NAotLS0gYS9mcy9hZnMvd3JpdGUuYworKysgYi9mcy9hZnMvd3JpdGUuYwpAQCAtODQsMTUgKzg0LDIzIEBACiAgKiBwYXJ0bHkgb3Igd2hvbGx5IGZpbGwgYSBwYWdlIHRoYXQncyB1bmRlciBwcmVwYXJhdGlvbiBmb3Igd3JpdGluZwogICovCiBzdGF0aWMgaW50IGFmc19maWxsX3BhZ2Uoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsIHN0cnVjdCBrZXkgKmtleSwKLQkJCSB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKKwkJCSBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHN0cnVjdCBwYWdlICpwYWdlKQogeworCWxvZmZfdCBpX3NpemU7CisJdW5zaWduZWQgZW9mOwogCWludCByZXQ7CiAKLQlfZW50ZXIoIiwsJXUsJXUiLCBzdGFydCwgbGVuKTsKKwlfZW50ZXIoIiwsJWxsdSwldSIsICh1bnNpZ25lZCBsb25nIGxvbmcpcG9zLCBsZW4pOwogCi0JQVNTRVJUQ01QKHN0YXJ0ICsgbGVuLCA8PSwgUEFHRV9TSVpFKTsKKwlBU1NFUlRDTVAobGVuLCA8PSwgUEFHRV9DQUNIRV9TSVpFKTsKIAotCXJldCA9IGFmc192bm9kZV9mZXRjaF9kYXRhKHZub2RlLCBrZXksIHN0YXJ0LCBsZW4sIHBhZ2UpOworCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKCZ2bm9kZS0+dmZzX2lub2RlKTsKKwlpZiAocG9zICsgbGVuID4gaV9zaXplKQorCQllb2YgPSBpX3NpemU7CisJZWxzZQorCQllb2YgPSBQQUdFX0NBQ0hFX1NJWkU7CisKKwlyZXQgPSBhZnNfdm5vZGVfZmV0Y2hfZGF0YSh2bm9kZSwga2V5LCAwLCBlb2YsIHBhZ2UpOwogCWlmIChyZXQgPCAwKSB7CiAJCWlmIChyZXQgPT0gLUVOT0VOVCkgewogCQkJX2RlYnVnKCJnb3QgTk9FTlQgZnJvbSBzZXJ2ZXIiCkBAIC0xMDcsMTA5ICsxMTUsNTUgQEAKIH0KIAogLyoKLSAqIHByZXBhcmUgYSBwYWdlIGZvciBiZWluZyB3cml0dGVuIHRvCi0gKi8KLXN0YXRpYyBpbnQgYWZzX3ByZXBhcmVfcGFnZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkgICAgc3RydWN0IGtleSAqa2V5LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHRvKQotewotCXVuc2lnbmVkIGVvZiwgdGFpbCwgc3RhcnQsIHN0b3AsIGxlbjsKLQlsb2ZmX3QgaV9zaXplLCBwb3M7Ci0Jdm9pZCAqcDsKLQlpbnQgcmV0OwotCi0JX2VudGVyKCIiKTsKLQotCWlmIChvZmZzZXQgPT0gMCAmJiB0byA9PSBQQUdFX1NJWkUpCi0JCXJldHVybiAwOwotCi0JcCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQotCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKCZ2bm9kZS0+dmZzX2lub2RlKTsKLQlwb3MgPSAobG9mZl90KSBwYWdlLT5pbmRleCA8PCBQQUdFX1NISUZUOwotCWlmIChwb3MgPj0gaV9zaXplKSB7Ci0JCS8qIHBhcnRpYWwgd3JpdGUsIHBhZ2UgYmV5b25kIEVPRiAqLwotCQlfZGVidWcoImJleW9uZCIpOwotCQlpZiAob2Zmc2V0ID4gMCkKLQkJCW1lbXNldChwLCAwLCBvZmZzZXQpOwotCQlpZiAodG8gPCBQQUdFX1NJWkUpCi0JCQltZW1zZXQocCArIHRvLCAwLCBQQUdFX1NJWkUgLSB0byk7Ci0JCWt1bm1hcF9hdG9taWMocCwgS01fVVNFUjApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoaV9zaXplIC0gcG9zID49IFBBR0VfU0laRSkgewotCQkvKiBwYXJ0aWFsIHdyaXRlLCBwYWdlIGVudGlyZWx5IGJlZm9yZSBFT0YgKi8KLQkJX2RlYnVnKCJiZWZvcmUiKTsKLQkJdGFpbCA9IGVvZiA9IFBBR0VfU0laRTsKLQl9IGVsc2UgewotCQkvKiBwYXJ0aWFsIHdyaXRlLCBwYWdlIG92ZXJsYXBzIEVPRiAqLwotCQllb2YgPSBpX3NpemUgLSBwb3M7Ci0JCV9kZWJ1Zygib3ZlcmxhcCAldSIsIGVvZik7Ci0JCXRhaWwgPSBtYXgoZW9mLCB0byk7Ci0JCWlmICh0YWlsIDwgUEFHRV9TSVpFKQotCQkJbWVtc2V0KHAgKyB0YWlsLCAwLCBQQUdFX1NJWkUgLSB0YWlsKTsKLQkJaWYgKG9mZnNldCA+IGVvZikKLQkJCW1lbXNldChwICsgZW9mLCAwLCBQQUdFX1NJWkUgLSBlb2YpOwotCX0KLQotCWt1bm1hcF9hdG9taWMocCwgS01fVVNFUjApOwotCi0JcmV0ID0gMDsKLQlpZiAob2Zmc2V0ID4gMCB8fCBlb2YgPiB0bykgewotCQkvKiBuZWVkIHRvIGZpbGwgb25lIG9yIHR3byBiaXRzIHRoYXQgYXJlbid0IGdvaW5nIHRvIGJlIHdyaXR0ZW4KLQkJICogKGNvdmVyIGJvdGggZmlsbGVycyBpbiBvbmUgcmVhZCBpZiB0aGVyZSBhcmUgdHdvKSAqLwotCQlzdGFydCA9IChvZmZzZXQgPiAwKSA/IDAgOiB0bzsKLQkJc3RvcCA9IChlb2YgPiB0bykgPyBlb2YgOiBvZmZzZXQ7Ci0JCWxlbiA9IHN0b3AgLSBzdGFydDsKLQkJX2RlYnVnKCJ3cj0ldS0ldSBhdj0wLSV1IHJkPSV1QCV1IiwKLQkJICAgICAgIG9mZnNldCwgdG8sIGVvZiwgc3RhcnQsIGxlbik7Ci0JCXJldCA9IGFmc19maWxsX3BhZ2Uodm5vZGUsIGtleSwgc3RhcnQsIGxlbiwgcGFnZSk7Ci0JfQotCi0JX2xlYXZlKCIgPSAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKICAqIHByZXBhcmUgdG8gcGVyZm9ybSBwYXJ0IG9mIGEgd3JpdGUgdG8gYSBwYWdlCi0gKiAtIHRoZSBjYWxsZXIgaG9sZHMgdGhlIHBhZ2UgbG9ja2VkLCBwcmV2ZW50aW5nIGl0IGZyb20gYmVpbmcgd3JpdHRlbiBvdXQgb3IKLSAqICAgbW9kaWZpZWQgYnkgYW55b25lIGVsc2UKICAqLwotaW50IGFmc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJICAgICAgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCB0bykKK2ludCBhZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkgICAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKKwkJICAgIHN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCiB7CiAJc3RydWN0IGFmc193cml0ZWJhY2sgKmNhbmRpZGF0ZSwgKndiOwogCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBrZXkgKmtleSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlwZ29mZl90IGluZGV4OworCXVuc2lnbmVkIGZyb20gPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJdW5zaWduZWQgdG8gPSBmcm9tICsgbGVuOworCXBnb2ZmX3QgaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAlpbnQgcmV0OwogCiAJX2VudGVyKCJ7JXg6JXV9LHslbHh9LCV1LCV1IiwKLQkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIHBhZ2UtPmluZGV4LCBvZmZzZXQsIHRvKTsKKwkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIGluZGV4LCBmcm9tLCB0byk7CiAKIAljYW5kaWRhdGUgPSBremFsbG9jKHNpemVvZigqY2FuZGlkYXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYW5kaWRhdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCWNhbmRpZGF0ZS0+dm5vZGUgPSB2bm9kZTsKLQljYW5kaWRhdGUtPmZpcnN0ID0gY2FuZGlkYXRlLT5sYXN0ID0gcGFnZS0+aW5kZXg7Ci0JY2FuZGlkYXRlLT5vZmZzZXRfZmlyc3QgPSBvZmZzZXQ7CisJY2FuZGlkYXRlLT5maXJzdCA9IGNhbmRpZGF0ZS0+bGFzdCA9IGluZGV4OworCWNhbmRpZGF0ZS0+b2Zmc2V0X2ZpcnN0ID0gZnJvbTsKIAljYW5kaWRhdGUtPnRvX2xhc3QgPSB0bzsKIAljYW5kaWRhdGUtPnVzYWdlID0gMTsKIAljYW5kaWRhdGUtPnN0YXRlID0gQUZTX1dCQUNLX1BFTkRJTkc7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FuZGlkYXRlLT53YWl0cSk7CiAKKwlwYWdlID0gX19ncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgpOworCWlmICghcGFnZSkgeworCQlrZnJlZShjYW5kaWRhdGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJKnBhZ2VwID0gcGFnZTsKKwkvKiBwYWdlIHdvbid0IGxlYWsgaW4gZXJyb3IgY2FzZTogaXQgZXZlbnR1YWxseSBnZXRzIGNsZWFuZWQgb2ZmIExSVSAqLworCiAJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKIAkJX2RlYnVnKCJub3QgdXAgdG8gZGF0ZSIpOwotCQlyZXQgPSBhZnNfcHJlcGFyZV9wYWdlKHZub2RlLCBwYWdlLCBrZXksIG9mZnNldCwgdG8pOworCQlyZXQgPSBhZnNfZmlsbF9wYWdlKHZub2RlLCBrZXksIHBvcywgbGVuLCBwYWdlKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWtmcmVlKGNhbmRpZGF0ZSk7CiAJCQlfbGVhdmUoIiA9ICVkIFtwcmVwXSIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAl9CiAKIHRyeV9hZ2FpbjoKLQlpbmRleCA9IHBhZ2UtPmluZGV4OwogCXNwaW5fbG9jaygmdm5vZGUtPndyaXRlYmFja19sb2NrKTsKIAogCS8qIHNlZSBpZiB0aGlzIHBhZ2UgaXMgYWxyZWFkeSBwZW5kaW5nIGEgd3JpdGViYWNrIHVuZGVyIGEgc3VpdGFibGUga2V5CkBAIC0yNDIsOCArMTk2LDggQEAKIHN1YnN1bWVfaW5fY3VycmVudF93YjoKIAlfZGVidWcoInN1YnN1bWUiKTsKIAlBU1NFUlRSQU5HRSh3Yi0+Zmlyc3QsIDw9LCBpbmRleCwgPD0sIHdiLT5sYXN0KTsKLQlpZiAoaW5kZXggPT0gd2ItPmZpcnN0ICYmIG9mZnNldCA8IHdiLT5vZmZzZXRfZmlyc3QpCi0JCXdiLT5vZmZzZXRfZmlyc3QgPSBvZmZzZXQ7CisJaWYgKGluZGV4ID09IHdiLT5maXJzdCAmJiBmcm9tIDwgd2ItPm9mZnNldF9maXJzdCkKKwkJd2ItPm9mZnNldF9maXJzdCA9IGZyb207CiAJaWYgKGluZGV4ID09IHdiLT5sYXN0ICYmIHRvID4gd2ItPnRvX2xhc3QpCiAJCXdiLT50b19sYXN0ID0gdG87CiAJc3Bpbl91bmxvY2soJnZub2RlLT53cml0ZWJhY2tfbG9jayk7CkBAIC0yODksMTcgKzI0MywxNyBAQAogLyoKICAqIGZpbmFsaXNlIHBhcnQgb2YgYSB3cml0ZSB0byBhIHBhZ2UKICAqLwotaW50IGFmc19jb21taXRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkgICAgIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgdG8pCitpbnQgYWZzX3dyaXRlX2VuZChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCSAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCisJCSAgc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmZzZGF0YSkKIHsKIAlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlsb2ZmX3QgaV9zaXplLCBtYXliZV9pX3NpemU7CiAKLQlfZW50ZXIoInsleDoldX0seyVseH0sJXUsJXUiLAotCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwgcGFnZS0+aW5kZXgsIG9mZnNldCwgdG8pOworCV9lbnRlcigieyV4OiV1fSx7JWx4fSIsCisJICAgICAgIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlLCBwYWdlLT5pbmRleCk7CiAKLQltYXliZV9pX3NpemUgPSAobG9mZl90KSBwYWdlLT5pbmRleCA8PCBQQUdFX1NISUZUOwotCW1heWJlX2lfc2l6ZSArPSB0bzsKKwltYXliZV9pX3NpemUgPSBwb3MgKyBjb3BpZWQ7CiAKIAlpX3NpemUgPSBpX3NpemVfcmVhZCgmdm5vZGUtPnZmc19pbm9kZSk7CiAJaWYgKG1heWJlX2lfc2l6ZSA+IGlfc2l6ZSkgewpAQCAtMzEwLDEyICsyNjQsMTMgQEAKIAkJc3Bpbl91bmxvY2soJnZub2RlLT53cml0ZWJhY2tfbG9jayk7CiAJfQogCi0JU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCWlmIChQYWdlRGlydHkocGFnZSkpCiAJCV9kZWJ1ZygiZGlydGllZCIpOworCXVubG9ja19wYWdlKHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAotCXJldHVybiAwOworCXJldHVybiBjb3BpZWQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9hdXRvZnMvaW5vZGUuYyBiL2ZzL2F1dG9mcy9pbm9kZS5jCmluZGV4IGRkYTUxMGQuLmI3MGVlYTEgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mcy9pbm9kZS5jCisrKyBiL2ZzL2F1dG9mcy9pbm9kZS5jCkBAIC01OSw3ICs1OSw3IEBACiAKIGVudW0ge09wdF9lcnIsIE9wdF9mZCwgT3B0X3VpZCwgT3B0X2dpZCwgT3B0X3BncnAsIE9wdF9taW5wcm90bywgT3B0X21heHByb3RvfTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgYXV0b2ZzX3Rva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IGF1dG9mc190b2tlbnMgPSB7CiAJe09wdF9mZCwgImZkPSV1In0sCiAJe09wdF91aWQsICJ1aWQ9JXUifSwKIAl7T3B0X2dpZCwgImdpZD0ldSJ9LApkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9NYWtlZmlsZSBiL2ZzL2F1dG9mczQvTWFrZWZpbGUKaW5kZXggZjJjM2I3OS4uYTgxMWMxZiAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9NYWtlZmlsZQorKysgYi9mcy9hdXRvZnM0L01ha2VmaWxlCkBAIC00LDQgKzQsNCBAQAogCiBvYmotJChDT05GSUdfQVVUT0ZTNF9GUykgKz0gYXV0b2ZzNC5vCiAKLWF1dG9mczQtb2JqcyA6PSBpbml0Lm8gaW5vZGUubyByb290Lm8gc3ltbGluay5vIHdhaXRxLm8gZXhwaXJlLm8KK2F1dG9mczQtb2JqcyA6PSBpbml0Lm8gaW5vZGUubyByb290Lm8gc3ltbGluay5vIHdhaXRxLm8gZXhwaXJlLm8gZGV2LWlvY3RsLm8KZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaCBiL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaAppbmRleCA2OWEyZjVjLi5lMGYxNmRhIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2F1dG9mc19pLmgKKysrIGIvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCkBAIC0xNCw2ICsxNCw3IEBACiAvKiBJbnRlcm5hbCBoZWFkZXIgZmlsZSBmb3IgYXV0b2ZzICovCiAKICNpbmNsdWRlIDxsaW51eC9hdXRvX2ZzNC5oPgorI2luY2x1ZGUgPGxpbnV4L2F1dG9fZGV2LWlvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKQEAgLTIxLDYgKzIyLDExIEBACiAjZGVmaW5lIEFVVE9GU19JT0NfRklSU1QgICAgIEFVVE9GU19JT0NfUkVBRFkKICNkZWZpbmUgQVVUT0ZTX0lPQ19DT1VOVCAgICAgMzIKIAorI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX0lPQ19GSVJTVAkoQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OKQorI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX0lPQ19DT1VOVAkoQVVUT0ZTX0lPQ19DT1VOVCAtIDExKQorCisjZGVmaW5lIEFVVE9GU19UWVBFX1RSSUdHRVIJKEFVVE9GU19UWVBFX0RJUkVDVHxBVVRPRlNfVFlQRV9PRkZTRVQpCisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpAQCAtMzUsMTEgKzQxLDI3IEBACiAvKiAjZGVmaW5lIERFQlVHICovCiAKICNpZmRlZiBERUJVRwotI2RlZmluZSBEUFJJTlRLKGZtdCxhcmdzLi4uKSBkbyB7IHByaW50ayhLRVJOX0RFQlVHICJwaWQgJWQ6ICVzOiAiIGZtdCAiXG4iICwgY3VycmVudC0+cGlkICwgX19mdW5jX18gLCAjI2FyZ3MpOyB9IHdoaWxlKDApCisjZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKQkJCQlcCitkbyB7CQkJCQkJCVwKKwlwcmludGsoS0VSTl9ERUJVRyAicGlkICVkOiAlczogIiBmbXQgIlxuIiwJXAorCQljdXJyZW50LT5waWQsIF9fZnVuY19fLCAjI2FyZ3MpOwlcCit9IHdoaWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgRFBSSU5USyhmbXQsYXJncy4uLikgZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKKyNkZWZpbmUgQVVUT0ZTX1dBUk4oZm10LCBhcmdzLi4uKQkJCVwKK2RvIHsJCQkJCQkJXAorCXByaW50ayhLRVJOX1dBUk5JTkcgInBpZCAlZDogJXM6ICIgZm10ICJcbiIsCVwKKwkJY3VycmVudC0+cGlkLCBfX2Z1bmNfXywgIyNhcmdzKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBBVVRPRlNfRVJST1IoZm10LCBhcmdzLi4uKQkJCVwKK2RvIHsJCQkJCQkJXAorCXByaW50ayhLRVJOX0VSUiAicGlkICVkOiAlczogIiBmbXQgIlxuIiwJXAorCQljdXJyZW50LT5waWQsIF9fZnVuY19fLCAjI2FyZ3MpOwlcCit9IHdoaWxlICgwKQorCiAvKiBVbmlmaWVkIGluZm8gc3RydWN0dXJlLiAgVGhpcyBpcyBwb2ludGVkIHRvIGJ5IGJvdGggdGhlIGRlbnRyeSBhbmQKICAgIGlub2RlIHN0cnVjdHVyZXMuICBFYWNoIGZpbGUgaW4gdGhlIGZpbGVzeXN0ZW0gaGFzIGFuIGluc3RhbmNlIG9mIHRoaXMKICAgIHN0cnVjdHVyZS4gIEl0IGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBkZW50cnksIHNvIGRlbnRyaWVzIGFyZSBuZXZlcgpAQCAtNjEsNiArODMsOSBAQAogCXVuc2lnbmVkIGxvbmcgbGFzdF91c2VkOwogCWF0b21pY190IGNvdW50OwogCisJdWlkX3QgdWlkOworCWdpZF90IGdpZDsKKwogCW1vZGVfdAltb2RlOwogCXNpemVfdAlzaXplOwogCkBAIC05MiwxMCArMTE3LDYgQEAKIAogI2RlZmluZSBBVVRPRlNfU0JJX01BR0lDIDB4NmQ0YTU1NmQKIAotI2RlZmluZSBBVVRPRlNfVFlQRV9JTkRJUkVDVCAgICAgMHgwMDAxCi0jZGVmaW5lIEFVVE9GU19UWVBFX0RJUkVDVCAgICAgICAweDAwMDIKLSNkZWZpbmUgQVVUT0ZTX1RZUEVfT0ZGU0VUICAgICAgIDB4MDAwNAotCiBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gewogCXUzMiBtYWdpYzsKIAlpbnQgcGlwZWZkOwpAQCAtMTY5LDYgKzE5MCwxNyBAQAogCQkJc3RydWN0IGF1dG9mc19wYWNrZXRfZXhwaXJlIF9fdXNlciAqKTsKIGludCBhdXRvZnM0X2V4cGlyZV9tdWx0aShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IHZmc21vdW50ICosCiAJCQlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKiwgaW50IF9fdXNlciAqKTsKK3N0cnVjdCBkZW50cnkgKmF1dG9mczRfZXhwaXJlX2RpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgICAgc3RydWN0IHZmc21vdW50ICptbnQsCisJCQkJICAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwgaW50IGhvdyk7CitzdHJ1Y3QgZGVudHJ5ICphdXRvZnM0X2V4cGlyZV9pbmRpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKKwkJCQkgICAgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksIGludCBob3cpOworCisvKiBEZXZpY2Ugbm9kZSBpbml0aWFsaXphdGlvbiAqLworCitpbnQgYXV0b2ZzX2Rldl9pb2N0bF9pbml0KHZvaWQpOwordm9pZCBhdXRvZnNfZGV2X2lvY3RsX2V4aXQodm9pZCk7CiAKIC8qIE9wZXJhdGlvbnMgc3RydWN0dXJlcyAqLwogCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2Rldi1pb2N0bC5jIGIvZnMvYXV0b2ZzNC9kZXYtaW9jdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjVhYmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvYXV0b2ZzNC9kZXYtaW9jdGwuYwpAQCAtMCwwICsxLDg2MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IElhbiBLZW50IDxyYXZlbkB0aGVtYXcubmV0PgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIG9yIGF0IHlvdXIKKyAqIG9wdGlvbiwgYW55IGxhdGVyIHZlcnNpb24sIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mZHRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJhdXRvZnNfaS5oIgorCisvKgorICogVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhbiBpbnRlcmZhY2UgZm9yIHJvdXRpbmcgYXV0b2ZzIGlvY3RsIGNvbnRyb2wKKyAqIGNvbW1hbmRzIHZpYSBhIG1pc2NlbGxhbmVvdXMgZGV2aWNlIGZpbGUuCisgKgorICogVGhlIGFsdGVybmF0ZSBpbnRlcmZhY2UgaXMgbmVlZGVkIGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIG9wZW4KKyAqIGFuIGlvY3RsIGZpbGUgZGVzY3JpcHRvciBvbiBhbiBhdXRvZnMgbW91bnQgdGhhdCBtYXkgYmUgY292ZXJlZCBieQorICogYW5vdGhlciBtb3VudC4gVGhpcyBzaXR1YXRpb24gYXJpc2VzIHdoZW4gc3RhcnRpbmcgYXV0b21vdW50KDgpCisgKiBvciBvdGhlciB1c2VyIHNwYWNlIGRhZW1vbiB3aGljaCB1c2VzIGRpcmVjdCBtb3VudHMgb3Igb2Zmc2V0CisgKiBtb3VudHMgKHVzZWQgZm9yIGF1dG9mcyBsYXp5IG1vdW50L3Vtb3VudCBvZiBuZXN0ZWQgbW91bnQgdHJlZXMpLAorICogd2hpY2ggaGF2ZSBiZWVuIGxlZnQgYnVzeSBhdCBhdCBzZXJ2aWNlIHNodXRkb3duLgorICovCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9TSVpFCXNpemVvZihzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKwordHlwZWRlZiBpbnQgKCppb2N0bF9mbikoc3RydWN0IGZpbGUgKiwgc3RydWN0IGF1dG9mc19zYl9pbmZvICosCisJCQlzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqKTsKKworc3RhdGljIGludCBjaGVja19uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKCFzdHJjaHIobmFtZSwgJy8nKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGVjayBhIHN0cmluZyBkb2Vzbid0IG92ZXJydW4gdGhlIGNodW5rIG9mCisgKiBtZW1vcnkgd2UgY29waWVkIGZyb20gdXNlciBsYW5kLgorICovCitzdGF0aWMgaW50IGludmFsaWRfc3RyKGNoYXIgKnN0ciwgdm9pZCAqZW5kKQoreworCXdoaWxlICgodm9pZCAqKSBzdHIgPD0gZW5kKQorCQlpZiAoISpzdHIrKykKKwkJCXJldHVybiAwOworCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogQ2hlY2sgdGhhdCB0aGUgdXNlciBjb21waWxlZCBhZ2FpbnN0IGNvcnJlY3QgdmVyc2lvbiBvZiBhdXRvZnMKKyAqIG1pc2MgZGV2aWNlIGNvZGUuCisgKgorICogQXMgd2VsbCBhcyBjaGVja2luZyB0aGUgdmVyc2lvbiBjb21wYXRpYmlsaXR5IHRoaXMgYWx3YXlzIGNvcGllcworICogdGhlIGtlcm5lbCBpbnRlcmZhY2UgdmVyc2lvbiBvdXQuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfZGV2X2lvY3RsX3ZlcnNpb24oaW50IGNtZCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCWludCBlcnIgPSAwOworCisJaWYgKChBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fTUFKT1IgIT0gcGFyYW0tPnZlcl9tYWpvcikgfHwKKwkgICAgKEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9NSU5PUiA8IHBhcmFtLT52ZXJfbWlub3IpKSB7CisJCUFVVE9GU19XQVJOKCJpb2N0bCBjb250cm9sIGludGVyZmFjZSB2ZXJzaW9uIG1pc21hdGNoOiAiCisJCSAgICAgImtlcm5lbCgldS4ldSksIHVzZXIoJXUuJXUpLCBjbWQoJWQpIiwKKwkJICAgICBBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fTUFKT1IsCisJCSAgICAgQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX01JTk9SLAorCQkgICAgIHBhcmFtLT52ZXJfbWFqb3IsIHBhcmFtLT52ZXJfbWlub3IsIGNtZCk7CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJLyogRmlsbCBpbiB0aGUga2VybmVsIHZlcnNpb24uICovCisJcGFyYW0tPnZlcl9tYWpvciA9IEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9NQUpPUjsKKwlwYXJhbS0+dmVyX21pbm9yID0gQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX01JTk9SOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIENvcHkgcGFyYW1ldGVyIGNvbnRyb2wgc3RydWN0LCBpbmNsdWRpbmcgYSBwb3NzaWJsZSBwYXRoIGFsbG9jYXRlZAorICogYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0LgorICovCitzdGF0aWMgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKmNvcHlfZGV2X2lvY3RsKHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIF9fdXNlciAqaW4pCit7CisJc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgdG1wLCAqYWRzOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIGluLCBzaXplb2YodG1wKSkpCisJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOworCisJaWYgKHRtcC5zaXplIDwgc2l6ZW9mKHRtcCkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJYWRzID0ga21hbGxvYyh0bXAuc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhZHMpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGFkcywgaW4sIHRtcC5zaXplKSkgeworCQlrZnJlZShhZHMpOworCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKKwl9CisKKwlyZXR1cm4gYWRzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9kZXZfaW9jdGwoc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCWtmcmVlKHBhcmFtKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBDaGVjayBzYW5pdHkgb2YgcGFyYW1ldGVyIGNvbnRyb2wgZmllbGRzIGFuZCBpZiBhIHBhdGggaXMgcHJlc2VudAorICogY2hlY2sgdGhhdCBpdCBoYXMgYSAiLyIgYW5kIGlzIHRlcm1pbmF0ZWQuCisgKi8KK3N0YXRpYyBpbnQgdmFsaWRhdGVfZGV2X2lvY3RsKGludCBjbWQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCWlmIChjaGVja19kZXZfaW9jdGxfdmVyc2lvbihjbWQsIHBhcmFtKSkgeworCQlBVVRPRlNfV0FSTigiaW52YWxpZCBkZXZpY2UgY29udHJvbCBtb2R1bGUgdmVyc2lvbiAiCisJCSAgICAgInN1cHBsaWVkIGZvciBjbWQoMHglMDh4KSIsIGNtZCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwYXJhbS0+c2l6ZSA+IHNpemVvZigqcGFyYW0pKSB7CisJCWVyciA9IGNoZWNrX25hbWUocGFyYW0tPnBhdGgpOworCQlpZiAoZXJyKSB7CisJCQlBVVRPRlNfV0FSTigiaW52YWxpZCBwYXRoIHN1cHBsaWVkIGZvciBjbWQoMHglMDh4KSIsCisJCQkJICAgIGNtZCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWVyciA9IGludmFsaWRfc3RyKHBhcmFtLT5wYXRoLAorCQkJCSAodm9pZCAqKSAoKHNpemVfdCkgcGFyYW0gKyBwYXJhbS0+c2l6ZSkpOworCQlpZiAoZXJyKSB7CisJCQlBVVRPRlNfV0FSTigiaW52YWxpZCBwYXRoIHN1cHBsaWVkIGZvciBjbWQoMHglMDh4KSIsCisJCQkJICAgIGNtZCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWVyciA9IDA7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEdldCB0aGUgYXV0b2ZzIHN1cGVyIGJsb2NrIGluZm8gc3RydWN0IGZyb20gdGhlIGZpbGUgb3BlbmVkIG9uCisgKiB0aGUgYXV0b2ZzIG1vdW50IHBvaW50LgorICovCitzdGF0aWMgc3RydWN0IGF1dG9mc19zYl9pbmZvICphdXRvZnNfZGV2X2lvY3RsX3NiaShzdHJ1Y3QgZmlsZSAqZikKK3sKKwlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IE5VTEw7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWlmIChmKSB7CisJCWlub2RlID0gZi0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwkJc2JpID0gYXV0b2ZzNF9zYmkoaW5vZGUtPmlfc2IpOworCX0KKwlyZXR1cm4gc2JpOworfQorCisvKiBSZXR1cm4gYXV0b2ZzIG1vZHVsZSBwcm90b2NvbCB2ZXJzaW9uICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfcHJvdG92ZXIoc3RydWN0IGZpbGUgKmZwLAorCQkJCSAgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJICAgICBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJcGFyYW0tPmFyZzEgPSBzYmktPnZlcnNpb247CisJcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybiBhdXRvZnMgbW9kdWxlIHByb3RvY29sIHN1YiB2ZXJzaW9uICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfcHJvdG9zdWJ2ZXIoc3RydWN0IGZpbGUgKmZwLAorCQkJCQlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkJc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCXBhcmFtLT5hcmcxID0gc2JpLT5zdWJfdmVyc2lvbjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdhbGsgZG93biB0aGUgbW91bnQgc3RhY2sgbG9va2luZyBmb3IgYW4gYXV0b2ZzIG1vdW50IHRoYXQKKyAqIGhhcyB0aGUgcmVxdWVzdGVkIGRldmljZSBudW1iZXIgKGFrYS4gbmV3X2VuY29kZV9kZXYoc2ItPnNfZGV2KS4KKyAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX2ZpbmRfc3VwZXIoc3RydWN0IG5hbWVpZGF0YSAqbmQsIGRldl90IGRldm5vKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisJZGV2X3Qgc19kZXY7CisJdW5zaWduZWQgaW50IGVycjsKKworCWVyciA9IC1FTk9FTlQ7CisKKwkvKiBMb29rdXAgdGhlIGRlbnRyeSBuYW1lIGF0IHRoZSBiYXNlIG9mIG91ciBtb3VudCBwb2ludCAqLworCWRlbnRyeSA9IGRfbG9va3VwKG5kLT5wYXRoLmRlbnRyeSwgJm5kLT5sYXN0KTsKKwlpZiAoIWRlbnRyeSkKKwkJZ290byBvdXQ7CisKKwlkcHV0KG5kLT5wYXRoLmRlbnRyeSk7CisJbmQtPnBhdGguZGVudHJ5ID0gZGVudHJ5OworCisJLyogQW5kIGZvbGxvdyB0aGUgbW91bnQgc3RhY2sgbG9va2luZyBmb3Igb3VyIGF1dG9mcyBtb3VudCAqLworCXdoaWxlIChmb2xsb3dfZG93bigmbmQtPnBhdGgubW50LCAmbmQtPnBhdGguZGVudHJ5KSkgeworCQlpbm9kZSA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwkJaWYgKCFpbm9kZSkKKwkJCWJyZWFrOworCisJCXNiID0gaW5vZGUtPmlfc2I7CisJCXNfZGV2ID0gbmV3X2VuY29kZV9kZXYoc2ItPnNfZGV2KTsKKwkJaWYgKGRldm5vID09IHNfZGV2KSB7CisJCQlpZiAoc2ItPnNfbWFnaWMgPT0gQVVUT0ZTX1NVUEVSX01BR0lDKSB7CisJCQkJZXJyID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogV2FsayBkb3duIHRoZSBtb3VudCBzdGFjayBsb29raW5nIGZvciBhbiBhdXRvZnMgbW91bnQgdGhhdAorICogaGFzIHRoZSByZXF1ZXN0ZWQgbW91bnQgdHlwZSAoaWUuIGluZGlyZWN0LCBkaXJlY3Qgb3Igb2Zmc2V0KS4KKyAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX2ZpbmRfc2JpX3R5cGUoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubzsKKwl1bnNpZ25lZCBpbnQgZXJyOworCisJZXJyID0gLUVOT0VOVDsKKworCS8qIExvb2t1cCB0aGUgZGVudHJ5IG5hbWUgYXQgdGhlIGJhc2Ugb2Ygb3VyIG1vdW50IHBvaW50ICovCisJZGVudHJ5ID0gZF9sb29rdXAobmQtPnBhdGguZGVudHJ5LCAmbmQtPmxhc3QpOworCWlmICghZGVudHJ5KQorCQlnb3RvIG91dDsKKworCWRwdXQobmQtPnBhdGguZGVudHJ5KTsKKwluZC0+cGF0aC5kZW50cnkgPSBkZW50cnk7CisKKwkvKiBBbmQgZm9sbG93IHRoZSBtb3VudCBzdGFjayBsb29raW5nIGZvciBvdXIgYXV0b2ZzIG1vdW50ICovCisJd2hpbGUgKGZvbGxvd19kb3duKCZuZC0+cGF0aC5tbnQsICZuZC0+cGF0aC5kZW50cnkpKSB7CisJCWlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhuZC0+cGF0aC5kZW50cnkpOworCQlpZiAoaW5vICYmIGluby0+c2JpLT50eXBlICYgdHlwZSkgeworCQkJZXJyID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGF1dG9mc19kZXZfaW9jdGxfZmRfaW5zdGFsbCh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzID0gY3VycmVudC0+ZmlsZXM7CisJc3RydWN0IGZkdGFibGUgKmZkdDsKKworCXNwaW5fbG9jaygmZmlsZXMtPmZpbGVfbG9jayk7CisJZmR0ID0gZmlsZXNfZmR0YWJsZShmaWxlcyk7CisJQlVHX09OKGZkdC0+ZmRbZmRdICE9IE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihmZHQtPmZkW2ZkXSwgZmlsZSk7CisJRkRfU0VUKGZkLCBmZHQtPmNsb3NlX29uX2V4ZWMpOworCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKK30KKworCisvKgorICogT3BlbiBhIGZpbGUgZGVzY3JpcHRvciBvbiB0aGUgYXV0b2ZzIG1vdW50IHBvaW50IGNvcnJlc3BvbmRpbmcKKyAqIHRvIHRoZSBnaXZlbiBwYXRoIGFuZCBkZXZpY2UgbnVtYmVyIChha2EuIG5ld19lbmNvZGVfZGV2KHNiLT5zX2RldikpLgorICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfb3Blbl9tb3VudHBvaW50KGNvbnN0IGNoYXIgKnBhdGgsIGRldl90IGRldmlkKQoreworCXN0cnVjdCBmaWxlICpmaWxwOworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJaW50IGVyciwgZmQ7CisKKwlmZCA9IGdldF91bnVzZWRfZmQoKTsKKwlpZiAobGlrZWx5KGZkID49IDApKSB7CisJCS8qIEdldCBuYW1laWRhdGEgb2YgdGhlIHBhcmVudCBkaXJlY3RvcnkgKi8KKwkJZXJyID0gcGF0aF9sb29rdXAocGF0aCwgTE9PS1VQX1BBUkVOVCwgJm5kKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCisJCS8qCisJCSAqIFNlYXJjaCBkb3duLCB3aXRoaW4gdGhlIHBhcmVudCwgbG9va2luZyBmb3IgYW4KKwkJICogYXV0b2ZzIHN1cGVyIGJsb2NrIHRoYXQgaGFzIHRoZSBkZXZpY2UgbnVtYmVyCisJCSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGF1dG9mcyBmcyB3ZSB3YW50IHRvIG9wZW4uCisJCSAqLworCQllcnIgPSBhdXRvZnNfZGV2X2lvY3RsX2ZpbmRfc3VwZXIoJm5kLCBkZXZpZCk7CisJCWlmIChlcnIpIHsKKwkJCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZmlscCA9IGRlbnRyeV9vcGVuKG5kLnBhdGguZGVudHJ5LCBuZC5wYXRoLm1udCwgT19SRE9OTFkpOworCQlpZiAoSVNfRVJSKGZpbHApKSB7CisJCQllcnIgPSBQVFJfRVJSKGZpbHApOworCQkJZ290byBvdXQ7CisJCX0KKworCQlhdXRvZnNfZGV2X2lvY3RsX2ZkX2luc3RhbGwoZmQsIGZpbHApOworCX0KKworCXJldHVybiBmZDsKKworb3V0OgorCXB1dF91bnVzZWRfZmQoZmQpOworCXJldHVybiBlcnI7Cit9CisKKy8qIE9wZW4gYSBmaWxlIGRlc2NyaXB0b3Igb24gYW4gYXV0b2ZzIG1vdW50IHBvaW50ICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfb3Blbm1vdW50KHN0cnVjdCBmaWxlICpmcCwKKwkJCQkgICAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkgICAgICBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJY29uc3QgY2hhciAqcGF0aDsKKwlkZXZfdCBkZXZpZDsKKwlpbnQgZXJyLCBmZDsKKworCS8qIHBhcmFtLT5wYXRoIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCAqLworCWlmICghcGFyYW0tPmFyZzEpCisJCXJldHVybiAtRUlOVkFMOworCisJcGFyYW0tPmlvY3RsZmQgPSAtMTsKKworCXBhdGggPSBwYXJhbS0+cGF0aDsKKwlkZXZpZCA9IHBhcmFtLT5hcmcxOworCisJZXJyID0gMDsKKwlmZCA9IGF1dG9mc19kZXZfaW9jdGxfb3Blbl9tb3VudHBvaW50KHBhdGgsIGRldmlkKTsKKwlpZiAodW5saWtlbHkoZmQgPCAwKSkgeworCQllcnIgPSBmZDsKKwkJZ290byBvdXQ7CisJfQorCisJcGFyYW0tPmlvY3RsZmQgPSBmZDsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKiBDbG9zZSBmaWxlIGRlc2NyaXB0b3IgYWxsb2NhdGVkIGFib3ZlICh1c2VyIGNhbiBhbHNvIHVzZSBjbG9zZSgyKSkuICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfY2xvc2Vtb3VudChzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJICAgICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCSAgICAgICBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJcmV0dXJuIHN5c19jbG9zZShwYXJhbS0+aW9jdGxmZCk7Cit9CisKKy8qCisgKiBTZW5kICJyZWFkeSIgc3RhdHVzIGZvciBhbiBleGlzdGluZyB3YWl0IChlaXRoZXIgYSBtb3VudCBvciBhbiBleHBpcmUKKyAqIHJlcXVlc3QpLgorICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfcmVhZHkoc3RydWN0IGZpbGUgKmZwLAorCQkJCSAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJICBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJYXV0b2ZzX3dxdF90IHRva2VuOworCisJdG9rZW4gPSAoYXV0b2ZzX3dxdF90KSBwYXJhbS0+YXJnMTsKKwlyZXR1cm4gYXV0b2ZzNF93YWl0X3JlbGVhc2Uoc2JpLCB0b2tlbiwgMCk7Cit9CisKKy8qCisgKiBTZW5kICJmYWlsIiBzdGF0dXMgZm9yIGFuIGV4aXN0aW5nIHdhaXQgKGVpdGhlciBhIG1vdW50IG9yIGFuIGV4cGlyZQorICogcmVxdWVzdCkuCisgKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9mYWlsKHN0cnVjdCBmaWxlICpmcCwKKwkJCQkgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlhdXRvZnNfd3F0X3QgdG9rZW47CisJaW50IHN0YXR1czsKKworCXRva2VuID0gKGF1dG9mc193cXRfdCkgcGFyYW0tPmFyZzE7CisJc3RhdHVzID0gcGFyYW0tPmFyZzIgPyBwYXJhbS0+YXJnMiA6IC1FTk9FTlQ7CisJcmV0dXJuIGF1dG9mczRfd2FpdF9yZWxlYXNlKHNiaSwgdG9rZW4sIHN0YXR1cyk7Cit9CisKKy8qCisgKiBTZXQgdGhlIHBpcGUgZmQgZm9yIGtlcm5lbCBjb21tdW5pY2F0aW9uIHRvIHRoZSBkYWVtb24uCisgKgorICogTm9ybWFsbHkgdGhpcyBpcyBzZXQgYXQgbW91bnQgdXNpbmcgYW4gb3B0aW9uIGJ1dCBpZiB3ZQorICogYXJlIHJlY29ubmVjdGluZyB0byBhIGJ1c3kgbW91bnQgdGhlbiB3ZSBuZWVkIHRvIHVzZSB0aGlzCisgKiB0byB0ZWxsIHRoZSBhdXRvZnMgbW91bnQgYWJvdXQgdGhlIG5ldyBrZXJuZWwgcGlwZSBmZC4gSW4KKyAqIG9yZGVyIHRvIHByb3RlY3QgbW91bnRzIGFnYWluc3QgaW5jb3JyZWN0bHkgc2V0dGluZyB0aGUKKyAqIHBpcGVmZCB3ZSBhbHNvIHJlcXVpcmUgdGhhdCB0aGUgYXV0b2ZzIG1vdW50IGJlIGNhdGF0b25pYy4KKyAqCisgKiBUaGlzIGFsc28gc2V0cyB0aGUgcHJvY2VzcyBncm91cCBpZCB1c2VkIHRvIGlkZW50aWZ5IHRoZQorICogY29udHJvbGxpbmcgcHJvY2VzcyAoZWcuIHRoZSBvd25pbmcgYXV0b21vdW50KDgpIGRhZW1vbikuCisgKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9zZXRwaXBlZmQoc3RydWN0IGZpbGUgKmZwLAorCQkJCSAgICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCSAgICAgIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlpbnQgcGlwZWZkOworCWludCBlcnIgPSAwOworCisJaWYgKHBhcmFtLT5hcmcxID09IC0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBpcGVmZCA9IHBhcmFtLT5hcmcxOworCisJbXV0ZXhfbG9jaygmc2JpLT53cV9tdXRleCk7CisJaWYgKCFzYmktPmNhdGF0b25pYykgeworCQltdXRleF91bmxvY2soJnNiaS0+d3FfbXV0ZXgpOworCQlyZXR1cm4gLUVCVVNZOworCX0gZWxzZSB7CisJCXN0cnVjdCBmaWxlICpwaXBlID0gZmdldChwaXBlZmQpOworCQlpZiAoIXBpcGUtPmZfb3AgfHwgIXBpcGUtPmZfb3AtPndyaXRlKSB7CisJCQllcnIgPSAtRVBJUEU7CisJCQlmcHV0KHBpcGUpOworCQkJZ290byBvdXQ7CisJCX0KKwkJc2JpLT5vel9wZ3JwID0gdGFza19wZ3JwX25yKGN1cnJlbnQpOworCQlzYmktPnBpcGVmZCA9IHBpcGVmZDsKKwkJc2JpLT5waXBlID0gcGlwZTsKKwkJc2JpLT5jYXRhdG9uaWMgPSAwOworCX0KK291dDoKKwltdXRleF91bmxvY2soJnNiaS0+d3FfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBNYWtlIHRoZSBhdXRvZnMgbW91bnQgcG9pbnQgY2F0YXRvbmljLCBubyBsb25nZXIgcmVzcG9uc2l2ZSB0bworICogbW91bnQgcmVxdWVzdHMuIEFsc28gY2xvc2VzIHRoZSBrZXJuZWwgcGlwZSBmaWxlIGRlc2NyaXB0b3IuCisgKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9jYXRhdG9uaWMoc3RydWN0IGZpbGUgKmZwLAorCQkJCSAgICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCSAgICAgIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlhdXRvZnM0X2NhdGF0b25pY19tb2RlKHNiaSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFNldCB0aGUgYXV0b2ZzIG1vdW50IHRpbWVvdXQgKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF90aW1lb3V0KHN0cnVjdCBmaWxlICpmcCwKKwkJCQkgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJICAgIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwl0aW1lb3V0ID0gcGFyYW0tPmFyZzE7CisJcGFyYW0tPmFyZzEgPSBzYmktPmV4cF90aW1lb3V0IC8gSFo7CisJc2JpLT5leHBfdGltZW91dCA9IHRpbWVvdXQgKiBIWjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgdWlkIGFuZCBnaWQgb2YgdGhlIGxhc3QgcmVxdWVzdCBmb3IgdGhlIG1vdW50CisgKgorICogV2hlbiByZWNvbnN0cnVjdGluZyBhbiBhdXRvZnMgbW91bnQgdHJlZSB3aXRoIGFjdGl2ZSBtb3VudHMKKyAqIHdlIG5lZWQgdG8gcmUtY29ubmVjdCB0byBtb3VudHMgdGhhdCBtYXkgaGF2ZSB1c2VkIHRoZSBvcmlnaW5hbAorICogcHJvY2VzcyB1aWQgYW5kIGdpZCAob3Igc3RyaW5nIHZhcmlhdGlvbnMgb2YgdGhlbSkgZm9yIG1vdW50CisgKiBsb29rdXBzIHdpdGhpbiB0aGUgbWFwIGVudHJ5LgorICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfcmVxdWVzdGVyKHN0cnVjdCBmaWxlICpmcCwKKwkJCQkgICAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkgICAgICBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJc3RydWN0IGF1dG9mc19pbmZvICppbm87CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKwljb25zdCBjaGFyICpwYXRoOworCWRldl90IGRldmlkOworCWludCBlcnIgPSAtRU5PRU5UOworCisJaWYgKHBhcmFtLT5zaXplIDw9IHNpemVvZigqcGFyYW0pKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXBhdGggPSBwYXJhbS0+cGF0aDsKKwlkZXZpZCA9IHNiaS0+c2ItPnNfZGV2OworCisJcGFyYW0tPmFyZzEgPSBwYXJhbS0+YXJnMiA9IC0xOworCisJLyogR2V0IG5hbWVpZGF0YSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeSAqLworCWVyciA9IHBhdGhfbG9va3VwKHBhdGgsIExPT0tVUF9QQVJFTlQsICZuZCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBhdXRvZnNfZGV2X2lvY3RsX2ZpbmRfc3VwZXIoJm5kLCBkZXZpZCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfcmVsZWFzZTsKKworCWlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhuZC5wYXRoLmRlbnRyeSk7CisJaWYgKGlubykgeworCQllcnIgPSAwOworCQlhdXRvZnM0X2V4cGlyZV93YWl0KG5kLnBhdGguZGVudHJ5KTsKKwkJc3Bpbl9sb2NrKCZzYmktPmZzX2xvY2spOworCQlwYXJhbS0+YXJnMSA9IGluby0+dWlkOworCQlwYXJhbS0+YXJnMiA9IGluby0+Z2lkOworCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKKwl9CisKK291dF9yZWxlYXNlOgorCXBhdGhfcHV0KCZuZC5wYXRoKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ2FsbCByZXBlYXRlZGx5IHVudGlsIGl0IHJldHVybnMgLUVBR0FJTiwgbWVhbmluZyB0aGVyZSdzIG5vdGhpbmcKKyAqIG1vcmUgdGhhdCBjYW4gYmUgZG9uZS4KKyAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX2V4cGlyZShzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJICAgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKKwlpbnQgZXJyID0gLUVBR0FJTjsKKwlpbnQgaG93OworCisJaG93ID0gcGFyYW0tPmFyZzE7CisJbW50ID0gZnAtPmZfcGF0aC5tbnQ7CisKKwlpZiAoc2JpLT50eXBlICYgQVVUT0ZTX1RZUEVfVFJJR0dFUikKKwkJZGVudHJ5ID0gYXV0b2ZzNF9leHBpcmVfZGlyZWN0KHNiaS0+c2IsIG1udCwgc2JpLCBob3cpOworCWVsc2UKKwkJZGVudHJ5ID0gYXV0b2ZzNF9leHBpcmVfaW5kaXJlY3Qoc2JpLT5zYiwgbW50LCBzYmksIGhvdyk7CisKKwlpZiAoZGVudHJ5KSB7CisJCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7CisKKwkJLyoKKwkJICogVGhpcyBpcyBzeW5jaHJvbm91cyBiZWNhdXNlIGl0IG1ha2VzIHRoZSBkYWVtb24gYQorCQkgKiBsaXR0bGUgZWFzaWVyCisJCSovCisJCWVyciA9IGF1dG9mczRfd2FpdChzYmksIGRlbnRyeSwgTkZZX0VYUElSRSk7CisKKwkJc3Bpbl9sb2NrKCZzYmktPmZzX2xvY2spOworCQlpZiAoaW5vLT5mbGFncyAmIEFVVE9GU19JTkZfTU9VTlRQT0lOVCkgeworCQkJaW5vLT5mbGFncyAmPSB+QVVUT0ZTX0lORl9NT1VOVFBPSU5UOworCQkJc2JpLT5zYi0+c19yb290LT5kX21vdW50ZWQrKzsKKwkJfQorCQlpbm8tPmZsYWdzICY9IH5BVVRPRlNfSU5GX0VYUElSSU5HOworCQljb21wbGV0ZV9hbGwoJmluby0+ZXhwaXJlX2NvbXBsZXRlKTsKKwkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisJCWRwdXQoZGVudHJ5KTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBDaGVjayBpZiBhdXRvZnMgbW91bnQgcG9pbnQgaXMgaW4gdXNlICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfYXNrdW1vdW50KHN0cnVjdCBmaWxlICpmcCwKKwkJCQkgICAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkgICAgICBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJcGFyYW0tPmFyZzEgPSAwOworCWlmIChtYXlfdW1vdW50KGZwLT5mX3BhdGgubW50KSkKKwkJcGFyYW0tPmFyZzEgPSAxOworCXJldHVybiAwOworfQorCisvKgorICogQ2hlY2sgaWYgdGhlIGdpdmVuIHBhdGggaXMgYSBtb3VudHBvaW50LgorICoKKyAqIElmIHdlIGFyZSBzdXBwbGllZCB3aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYW4gYXV0b2ZzCisgKiBtb3VudCB3ZSdyZSBsb29raW5nIGZvciBhIHNwZWNpZmljIG1vdW50LiBJbiB0aGlzIGNhc2UKKyAqIHRoZSBwYXRoIGlzIGNvbnNpZGVyZWQgYSBtb3VudHBvaW50IGlmIGl0IGlzIGl0c2VsZiBhCisgKiBtb3VudHBvaW50IG9yIGNvbnRhaW5zIGEgbW91bnQsIHN1Y2ggYXMgYSBtdWx0aS1tb3VudAorICogd2l0aG91dCBhIHJvb3QgbW91bnQuIEluIHRoaXMgY2FzZSB3ZSByZXR1cm4gMSBpZiB0aGUKKyAqIHBhdGggaXMgYSBtb3VudCBwb2ludCBhbmQgdGhlIHN1cGVyIG1hZ2ljIG9mIHRoZSBjb3ZlcmluZworICogbW91bnQgaWYgdGhlcmUgaXMgb25lIG9yIDAgaWYgaXQgaXNuJ3QgYSBtb3VudHBvaW50LgorICoKKyAqIElmIHdlIGFyZW4ndCBzdXBwbGllZCB3aXRoIGEgZmlsZSBkZXNjcmlwdG9yIHRoZW4gd2UKKyAqIGxvb2t1cCB0aGUgbmFtZWlkYXRhIG9mIHRoZSBwYXRoIGFuZCBjaGVjayBpZiBpdCBpcyB0aGUKKyAqIHJvb3Qgb2YgYSBtb3VudC4gSWYgYSB0eXBlIGlzIGdpdmVuIHdlIGFyZSBsb29raW5nIGZvcgorICogYSBwYXJ0aWN1bGFyIGF1dG9mcyBtb3VudCBhbmQgaWYgd2UgZG9uJ3QgZmluZCBhIG1hdGNoCisgKiB3ZSByZXR1cm4gZmFpbC4gSWYgdGhlIGxvY2F0ZWQgbmFtZWlkYXRhIHBhdGggaXMgdGhlCisgKiByb290IG9mIGEgbW91bnQgd2UgcmV0dXJuIDEgYWxvbmcgd2l0aCB0aGUgc3VwZXIgbWFnaWMKKyAqIG9mIHRoZSBtb3VudCBvciAwIG90aGVyd2lzZS4KKyAqCisgKiBJbiBib3RoIGNhc2VzIHRoZSB0aGUgZGV2aWNlIG51bWJlciAoYXMgcmV0dXJuZWQgYnkKKyAqIG5ld19lbmNvZGVfZGV2KCkpIGlzIGFsc28gcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9pc21vdW50cG9pbnQoc3RydWN0IGZpbGUgKmZwLAorCQkJCQkgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJCSBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKwljb25zdCBjaGFyICpwYXRoOworCXVuc2lnbmVkIGludCB0eXBlOworCWludCBlcnIgPSAtRU5PRU5UOworCisJaWYgKHBhcmFtLT5zaXplIDw9IHNpemVvZigqcGFyYW0pKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXBhdGggPSBwYXJhbS0+cGF0aDsKKwl0eXBlID0gcGFyYW0tPmFyZzE7CisKKwlwYXJhbS0+YXJnMSA9IDA7CisJcGFyYW0tPmFyZzIgPSAwOworCisJaWYgKCFmcCB8fCBwYXJhbS0+aW9jdGxmZCA9PSAtMSkgeworCQlpZiAodHlwZSA9PSBBVVRPRlNfVFlQRV9BTlkpIHsKKwkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisKKwkJCWVyciA9IHBhdGhfbG9va3VwKHBhdGgsIExPT0tVUF9GT0xMT1csICZuZCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OworCisJCQlzYiA9IG5kLnBhdGguZGVudHJ5LT5kX3NiOworCQkJcGFyYW0tPmFyZzEgPSBuZXdfZW5jb2RlX2RldihzYi0+c19kZXYpOworCQl9IGVsc2UgeworCQkJc3RydWN0IGF1dG9mc19pbmZvICppbm87CisKKwkJCWVyciA9IHBhdGhfbG9va3VwKHBhdGgsIExPT0tVUF9QQVJFTlQsICZuZCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OworCisJCQllcnIgPSBhdXRvZnNfZGV2X2lvY3RsX2ZpbmRfc2JpX3R5cGUoJm5kLCB0eXBlKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXRfcmVsZWFzZTsKKworCQkJaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKG5kLnBhdGguZGVudHJ5KTsKKwkJCXBhcmFtLT5hcmcxID0gYXV0b2ZzNF9nZXRfZGV2KGluby0+c2JpKTsKKwkJfQorCisJCWVyciA9IDA7CisJCWlmIChuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZSAmJgorCQkgICAgbmQucGF0aC5tbnQtPm1udF9yb290ID09IG5kLnBhdGguZGVudHJ5KSB7CisJCQllcnIgPSAxOworCQkJcGFyYW0tPmFyZzIgPSBuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zYi0+c19tYWdpYzsKKwkJfQorCX0gZWxzZSB7CisJCWRldl90IGRldmlkID0gbmV3X2VuY29kZV9kZXYoc2JpLT5zYi0+c19kZXYpOworCisJCWVyciA9IHBhdGhfbG9va3VwKHBhdGgsIExPT0tVUF9QQVJFTlQsICZuZCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKworCQllcnIgPSBhdXRvZnNfZGV2X2lvY3RsX2ZpbmRfc3VwZXIoJm5kLCBkZXZpZCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9yZWxlYXNlOworCisJCXBhcmFtLT5hcmcxID0gYXV0b2ZzNF9nZXRfZGV2KHNiaSk7CisKKwkJZXJyID0gaGF2ZV9zdWJtb3VudHMobmQucGF0aC5kZW50cnkpOworCisJCWlmIChuZC5wYXRoLm1udC0+bW50X21vdW50cG9pbnQgIT0gbmQucGF0aC5tbnQtPm1udF9yb290KSB7CisJCQlpZiAoZm9sbG93X2Rvd24oJm5kLnBhdGgubW50LCAmbmQucGF0aC5kZW50cnkpKSB7CisJCQkJc3RydWN0IGlub2RlICppbm9kZSA9IG5kLnBhdGguZGVudHJ5LT5kX2lub2RlOworCQkJCXBhcmFtLT5hcmcyID0gaW5vZGUtPmlfc2ItPnNfbWFnaWM7CisJCQl9CisJCX0KKwl9CisKK291dF9yZWxlYXNlOgorCXBhdGhfcHV0KCZuZC5wYXRoKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogT3VyIHJhbmdlIG9mIGlvY3RsIG51bWJlcnMgaXNuJ3QgMCBiYXNlZCBzbyB3ZSBuZWVkIHRvIHNoaWZ0CisgKiB0aGUgYXJyYXkgaW5kZXggYnkgX0lPQ19OUihBVVRPRlNfQ1RMX0lPQ19GSVJTVCkgZm9yIHRoZSB0YWJsZQorICogbG9va3VwLgorICovCisjZGVmaW5lIGNtZF9pZHgoY21kKQkoY21kIC0gX0lPQ19OUihBVVRPRlNfREVWX0lPQ1RMX0lPQ19GSVJTVCkpCisKK3N0YXRpYyBpb2N0bF9mbiBsb29rdXBfZGV2X2lvY3RsKHVuc2lnbmVkIGludCBjbWQpCit7CisJc3RhdGljIHN0cnVjdCB7CisJCWludCBjbWQ7CisJCWlvY3RsX2ZuIGZuOworCX0gX2lvY3Rsc1tdID0geworCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fQ01EKSwgTlVMTH0sCisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfUFJPVE9WRVJfQ01EKSwKKwkJCSBhdXRvZnNfZGV2X2lvY3RsX3Byb3RvdmVyfSwKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9QUk9UT1NVQlZFUl9DTUQpLAorCQkJIGF1dG9mc19kZXZfaW9jdGxfcHJvdG9zdWJ2ZXJ9LAorCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX09QRU5NT1VOVF9DTUQpLAorCQkJIGF1dG9mc19kZXZfaW9jdGxfb3Blbm1vdW50fSwKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9DTE9TRU1PVU5UX0NNRCksCisJCQkgYXV0b2ZzX2Rldl9pb2N0bF9jbG9zZW1vdW50fSwKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9SRUFEWV9DTUQpLAorCQkJIGF1dG9mc19kZXZfaW9jdGxfcmVhZHl9LAorCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX0ZBSUxfQ01EKSwKKwkJCSBhdXRvZnNfZGV2X2lvY3RsX2ZhaWx9LAorCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX1NFVFBJUEVGRF9DTUQpLAorCQkJIGF1dG9mc19kZXZfaW9jdGxfc2V0cGlwZWZkfSwKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9DQVRBVE9OSUNfQ01EKSwKKwkJCSBhdXRvZnNfZGV2X2lvY3RsX2NhdGF0b25pY30sCisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfVElNRU9VVF9DTUQpLAorCQkJIGF1dG9mc19kZXZfaW9jdGxfdGltZW91dH0sCisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfUkVRVUVTVEVSX0NNRCksCisJCQkgYXV0b2ZzX2Rldl9pb2N0bF9yZXF1ZXN0ZXJ9LAorCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX0VYUElSRV9DTUQpLAorCQkJIGF1dG9mc19kZXZfaW9jdGxfZXhwaXJlfSwKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9BU0tVTU9VTlRfQ01EKSwKKwkJCSBhdXRvZnNfZGV2X2lvY3RsX2Fza3Vtb3VudH0sCisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfSVNNT1VOVFBPSU5UX0NNRCksCisJCQkgYXV0b2ZzX2Rldl9pb2N0bF9pc21vdW50cG9pbnR9CisJfTsKKwl1bnNpZ25lZCBpbnQgaWR4ID0gY21kX2lkeChjbWQpOworCisJcmV0dXJuIChpZHggPj0gQVJSQVlfU0laRShfaW9jdGxzKSkgPyBOVUxMIDogX2lvY3Rsc1tpZHhdLmZuOworfQorCisvKiBpb2N0bCBkaXNwYXRjaGVyICovCitzdGF0aWMgaW50IF9hdXRvZnNfZGV2X2lvY3RsKHVuc2lnbmVkIGludCBjb21tYW5kLCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCBfX3VzZXIgKnVzZXIpCit7CisJc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtOworCXN0cnVjdCBmaWxlICpmcDsKKwlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaTsKKwl1bnNpZ25lZCBpbnQgY21kX2ZpcnN0LCBjbWQ7CisJaW9jdGxfZm4gZm4gPSBOVUxMOworCWludCBlcnIgPSAwOworCisJLyogb25seSByb290IGNhbiBwbGF5IHdpdGggdGhpcyAqLworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWNtZF9maXJzdCA9IF9JT0NfTlIoQVVUT0ZTX0RFVl9JT0NUTF9JT0NfRklSU1QpOworCWNtZCA9IF9JT0NfTlIoY29tbWFuZCk7CisKKwlpZiAoX0lPQ19UWVBFKGNvbW1hbmQpICE9IF9JT0NfVFlQRShBVVRPRlNfREVWX0lPQ1RMX0lPQ19GSVJTVCkgfHwKKwkgICAgY21kIC0gY21kX2ZpcnN0ID49IEFVVE9GU19ERVZfSU9DVExfSU9DX0NPVU5UKSB7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCS8qIENvcHkgdGhlIHBhcmFtZXRlcnMgaW50byBrZXJuZWwgc3BhY2UuICovCisJcGFyYW0gPSBjb3B5X2Rldl9pb2N0bCh1c2VyKTsKKwlpZiAoSVNfRVJSKHBhcmFtKSkKKwkJcmV0dXJuIFBUUl9FUlIocGFyYW0pOworCisJZXJyID0gdmFsaWRhdGVfZGV2X2lvY3RsKGNvbW1hbmQsIHBhcmFtKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qIFRoZSB2YWxpZGF0ZSByb3V0aW5lIGFib3ZlIGFsd2F5cyBzZXRzIHRoZSB2ZXJzaW9uICovCisJaWYgKGNtZCA9PSBBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fQ01EKQorCQlnb3RvIGRvbmU7CisKKwlmbiA9IGxvb2t1cF9kZXZfaW9jdGwoY21kKTsKKwlpZiAoIWZuKSB7CisJCUFVVE9GU19XQVJOKCJ1bmtub3duIGNvbW1hbmQgMHglMDh4IiwgY29tbWFuZCk7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCWZwID0gTlVMTDsKKwlzYmkgPSBOVUxMOworCisJLyoKKwkgKiBGb3Igb2J2aW91cyByZWFzb25zIHRoZSBvcGVubW91bnQgY2FuJ3QgaGF2ZSBhIGZpbGUKKwkgKiBkZXNjcmlwdG9yIHlldC4gV2UgZG9uJ3QgdGFrZSBhIHJlZmVyZW5jZSB0byB0aGUKKwkgKiBmaWxlIGR1cmluZyBjbG9zZSB0byBhbGxvdyBmb3IgaW1tZWRpYXRlIHJlbGVhc2UuCisJICovCisJaWYgKGNtZCAhPSBBVVRPRlNfREVWX0lPQ1RMX09QRU5NT1VOVF9DTUQgJiYKKwkgICAgY21kICE9IEFVVE9GU19ERVZfSU9DVExfQ0xPU0VNT1VOVF9DTUQpIHsKKwkJZnAgPSBmZ2V0KHBhcmFtLT5pb2N0bGZkKTsKKwkJaWYgKCFmcCkgeworCQkJaWYgKGNtZCA9PSBBVVRPRlNfREVWX0lPQ1RMX0lTTU9VTlRQT0lOVF9DTUQpCisJCQkJZ290byBjb250OworCQkJZXJyID0gLUVCQURGOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoIWZwLT5mX29wKSB7CisJCQllcnIgPSAtRU5PVFRZOworCQkJZnB1dChmcCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXNiaSA9IGF1dG9mc19kZXZfaW9jdGxfc2JpKGZwKTsKKwkJaWYgKCFzYmkgfHwgc2JpLT5tYWdpYyAhPSBBVVRPRlNfU0JJX01BR0lDKSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZnB1dChmcCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qCisJCSAqIEFkbWluIG5lZWRzIHRvIGJlIGFibGUgdG8gc2V0IHRoZSBtb3VudCBjYXRhdG9uaWMgaW4KKwkJICogb3JkZXIgdG8gYmUgYWJsZSB0byBwZXJmb3JtIHRoZSByZS1vcGVuLgorCQkgKi8KKwkJaWYgKCFhdXRvZnM0X296X21vZGUoc2JpKSAmJgorCQkgICAgY21kICE9IEFVVE9GU19ERVZfSU9DVExfQ0FUQVRPTklDX0NNRCkgeworCQkJZXJyID0gLUVBQ0NFUzsKKwkJCWZwdXQoZnApOworCQkJZ290byBvdXQ7CisJCX0KKwl9Citjb250OgorCWVyciA9IGZuKGZwLCBzYmksIHBhcmFtKTsKKworCWlmIChmcCkKKwkJZnB1dChmcCk7Citkb25lOgorCWlmIChlcnIgPj0gMCAmJiBjb3B5X3RvX3VzZXIodXNlciwgcGFyYW0sIEFVVE9GU19ERVZfSU9DVExfU0laRSkpCisJCWVyciA9IC1FRkFVTFQ7CitvdXQ6CisJZnJlZV9kZXZfaW9jdGwocGFyYW0pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBsb25nIGF1dG9mc19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVpbnQgY29tbWFuZCwgdWxvbmcgdSkKK3sKKwlpbnQgZXJyOworCWVyciA9IF9hdXRvZnNfZGV2X2lvY3RsKGNvbW1hbmQsIChzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCBfX3VzZXIgKikgdSk7CisJcmV0dXJuIChsb25nKSBlcnI7Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgbG9uZyBhdXRvZnNfZGV2X2lvY3RsX2NvbXBhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdWludCBjb21tYW5kLCB1bG9uZyB1KQoreworCXJldHVybiAobG9uZykgYXV0b2ZzX2Rldl9pb2N0bChmaWxlLCBjb21tYW5kLCAodWxvbmcpIGNvbXBhdF9wdHIodSkpOworfQorI2Vsc2UKKyNkZWZpbmUgYXV0b2ZzX2Rldl9pb2N0bF9jb21wYXQgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9kZXZfaW9jdGxfZm9wcyA9IHsKKwkudW5sb2NrZWRfaW9jdGwJID0gYXV0b2ZzX2Rldl9pb2N0bCwKKwkuY29tcGF0X2lvY3RsID0gYXV0b2ZzX2Rldl9pb2N0bF9jb21wYXQsCisJLm93bmVyCSA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIF9hdXRvZnNfZGV2X2lvY3RsX21pc2MgPSB7CisJLm1pbm9yIAkJPSBNSVNDX0RZTkFNSUNfTUlOT1IsCisJLm5hbWUgIAkJPSBBVVRPRlNfREVWSUNFX05BTUUsCisJLmZvcHMgIAkJPSAmX2Rldl9pb2N0bF9mb3BzCit9OworCisvKiBSZWdpc3Rlci9kZXJlZ2lzdGVyIG1pc2MgY2hhcmFjdGVyIGRldmljZSAqLworaW50IGF1dG9mc19kZXZfaW9jdGxfaW5pdCh2b2lkKQoreworCWludCByOworCisJciA9IG1pc2NfcmVnaXN0ZXIoJl9hdXRvZnNfZGV2X2lvY3RsX21pc2MpOworCWlmIChyKSB7CisJCUFVVE9GU19FUlJPUigibWlzY19yZWdpc3RlciBmYWlsZWQgZm9yIGNvbnRyb2wgZGV2aWNlIik7CisJCXJldHVybiByOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGF1dG9mc19kZXZfaW9jdGxfZXhpdCh2b2lkKQoreworCW1pc2NfZGVyZWdpc3RlcigmX2F1dG9mc19kZXZfaW9jdGxfbWlzYyk7CisJcmV0dXJuOworfQorCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2V4cGlyZS5jIGIvZnMvYXV0b2ZzNC9leHBpcmUuYwppbmRleCBjZGFiYjc5Li5jZGUyZjhlIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2V4cGlyZS5jCisrKyBiL2ZzL2F1dG9mczQvZXhwaXJlLmMKQEAgLTI0NCwxMCArMjQ0LDEwIEBACiB9CiAKIC8qIENoZWNrIGlmIHdlIGNhbiBleHBpcmUgYSBkaXJlY3QgbW91bnQgKHBvc3NpYmx5IGEgdHJlZSkgKi8KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdXRvZnM0X2V4cGlyZV9kaXJlY3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCQkJICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50LAotCQkJCQkgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCi0JCQkJCSAgICBpbnQgaG93KQorc3RydWN0IGRlbnRyeSAqYXV0b2ZzNF9leHBpcmVfZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKKwkJCQkgICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCSAgICAgaW50IGhvdykKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJc3RydWN0IGRlbnRyeSAqcm9vdCA9IGRnZXQoc2ItPnNfcm9vdCk7CkBAIC0yODMsMTAgKzI4MywxMCBAQAogICogIC0gaXQgaXMgdW51c2VkIGJ5IGFueSB1c2VyIHByb2Nlc3MKICAqICAtIGl0IGhhcyBiZWVuIHVudXNlZCBmb3IgZXhwX3RpbWVvdXQgdGltZQogICovCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYXV0b2ZzNF9leHBpcmVfaW5kaXJlY3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCQkJICAgICAgc3RydWN0IHZmc21vdW50ICptbnQsCi0JCQkJCSAgICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAotCQkJCQkgICAgICBpbnQgaG93KQorc3RydWN0IGRlbnRyeSAqYXV0b2ZzNF9leHBpcmVfaW5kaXJlY3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICAgICAgc3RydWN0IHZmc21vdW50ICptbnQsCisJCQkJICAgICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCSAgICAgICBpbnQgaG93KQogewogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAlzdHJ1Y3QgZGVudHJ5ICpyb290ID0gc2ItPnNfcm9vdDsKQEAgLTQ3OSw3ICs0NzksNyBAQAogCWlmIChhcmcgJiYgZ2V0X3VzZXIoZG9fbm93LCBhcmcpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChzYmktPnR5cGUgJiBBVVRPRlNfVFlQRV9ESVJFQ1QpCisJaWYgKHNiaS0+dHlwZSAmIEFVVE9GU19UWVBFX1RSSUdHRVIpCiAJCWRlbnRyeSA9IGF1dG9mczRfZXhwaXJlX2RpcmVjdChzYiwgbW50LCBzYmksIGRvX25vdyk7CiAJZWxzZQogCQlkZW50cnkgPSBhdXRvZnM0X2V4cGlyZV9pbmRpcmVjdChzYiwgbW50LCBzYmksIGRvX25vdyk7CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2luaXQuYyBiL2ZzL2F1dG9mczQvaW5pdC5jCmluZGV4IDcyM2ExYzVlLi45NzIyZTRiIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2luaXQuYworKysgYi9mcy9hdXRvZnM0L2luaXQuYwpAQCAtMjksMTEgKzI5LDIwIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYXV0b2ZzNF9mcyh2b2lkKQogewotCXJldHVybiByZWdpc3Rlcl9maWxlc3lzdGVtKCZhdXRvZnNfZnNfdHlwZSk7CisJaW50IGVycjsKKworCWVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmF1dG9mc19mc190eXBlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJYXV0b2ZzX2Rldl9pb2N0bF9pbml0KCk7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9hdXRvZnM0X2ZzKHZvaWQpCiB7CisJYXV0b2ZzX2Rldl9pb2N0bF9leGl0KCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZhdXRvZnNfZnNfdHlwZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvaW5vZGUuYyBiL2ZzL2F1dG9mczQvaW5vZGUuYwppbmRleCA3YmIzZTViLi5jN2U2NWJiIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2lub2RlLmMKKysrIGIvZnMvYXV0b2ZzNC9pbm9kZS5jCkBAIC01Myw2ICs1Myw4IEBACiAJCWF0b21pY19zZXQoJmluby0+Y291bnQsIDApOwogCX0KIAorCWluby0+dWlkID0gMDsKKwlpbm8tPmdpZCA9IDA7CiAJaW5vLT5tb2RlID0gbW9kZTsKIAlpbm8tPmxhc3RfdXNlZCA9IGppZmZpZXM7CiAKQEAgLTIxMyw3ICsyMTUsNyBAQAogZW51bSB7T3B0X2VyciwgT3B0X2ZkLCBPcHRfdWlkLCBPcHRfZ2lkLCBPcHRfcGdycCwgT3B0X21pbnByb3RvLCBPcHRfbWF4cHJvdG8sCiAJT3B0X2luZGlyZWN0LCBPcHRfZGlyZWN0LCBPcHRfb2Zmc2V0fTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewogCXtPcHRfZmQsICJmZD0ldSJ9LAogCXtPcHRfdWlkLCAidWlkPSV1In0sCiAJe09wdF9naWQsICJnaWQ9JXUifSwKQEAgLTI4OCw3ICsyOTAsNyBAQAogCQkJKnR5cGUgPSBBVVRPRlNfVFlQRV9ESVJFQ1Q7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfb2Zmc2V0OgotCQkJKnR5cGUgPSBBVVRPRlNfVFlQRV9ESVJFQ1QgfCBBVVRPRlNfVFlQRV9PRkZTRVQ7CisJCQkqdHlwZSA9IEFVVE9GU19UWVBFX09GRlNFVDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIDE7CkBAIC0zMzYsNyArMzM4LDcgQEAKIAlzYmktPnNiID0gczsKIAlzYmktPnZlcnNpb24gPSAwOwogCXNiaS0+c3ViX3ZlcnNpb24gPSAwOwotCXNiaS0+dHlwZSA9IDA7CisJc2JpLT50eXBlID0gQVVUT0ZTX1RZUEVfSU5ESVJFQ1Q7CiAJc2JpLT5taW5fcHJvdG8gPSAwOwogCXNiaS0+bWF4X3Byb3RvID0gMDsKIAltdXRleF9pbml0KCZzYmktPndxX211dGV4KTsKQEAgLTM3OCw3ICszODAsNyBAQAogCX0KIAogCXJvb3RfaW5vZGUtPmlfZm9wID0gJmF1dG9mczRfcm9vdF9vcGVyYXRpb25zOwotCXJvb3RfaW5vZGUtPmlfb3AgPSBzYmktPnR5cGUgJiBBVVRPRlNfVFlQRV9ESVJFQ1QgPworCXJvb3RfaW5vZGUtPmlfb3AgPSBzYmktPnR5cGUgJiBBVVRPRlNfVFlQRV9UUklHR0VSID8KIAkJCSZhdXRvZnM0X2RpcmVjdF9yb290X2lub2RlX29wZXJhdGlvbnMgOgogCQkJJmF1dG9mczRfaW5kaXJlY3Rfcm9vdF9pbm9kZV9vcGVyYXRpb25zOwogCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L3dhaXRxLmMgYi9mcy9hdXRvZnM0L3dhaXRxLmMKaW5kZXggMzUyMTZkMS4uNGI2N2MyYSAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC93YWl0cS5jCisrKyBiL2ZzL2F1dG9mczQvd2FpdHEuYwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJCSAqIGlzIHZlcnkgc2ltaWxhciBmb3IgaW5kaXJlY3QgbW91bnRzIGV4Y2VwdCBvbmx5IGRlbnRyeXMKIAkJICogaW4gdGhlIHJvb3Qgb2YgdGhlIGF1dG9mcyBmaWxlIHN5c3RlbSBtYXkgYmUgbmVnYXRpdmUuCiAJCSAqLwotCQlpZiAoc2JpLT50eXBlICYgKEFVVE9GU19UWVBFX0RJUkVDVHxBVVRPRlNfVFlQRV9PRkZTRVQpKQorCQlpZiAoc2JpLT50eXBlICYgQVVUT0ZTX1RZUEVfVFJJR0dFUikKIAkJCXJldHVybiAtRU5PRU5UOwogCQllbHNlIGlmICghSVNfUk9PVChkZW50cnktPmRfcGFyZW50KSkKIAkJCXJldHVybiAtRU5PRU5UOwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogSWYgdGhpcyBpcyBhIGRpcmVjdCBtb3VudCByZXF1ZXN0IGNyZWF0ZSBhIGR1bW15IG5hbWUgKi8KLQlpZiAoSVNfUk9PVChkZW50cnkpICYmIChzYmktPnR5cGUgJiBBVVRPRlNfVFlQRV9ESVJFQ1QpKQorCWlmIChJU19ST09UKGRlbnRyeSkgJiYgc2JpLT50eXBlICYgQVVUT0ZTX1RZUEVfVFJJR0dFUikKIAkJcXN0ci5sZW4gPSBzcHJpbnRmKG5hbWUsICIlcCIsIGRlbnRyeSk7CiAJZWxzZSB7CiAJCXFzdHIubGVuID0gYXV0b2ZzNF9nZXRwYXRoKHNiaSwgZGVudHJ5LCAmbmFtZSk7CkBAIC00MDYsMTEgKzQwNiwxMSBAQAogCQkJCXR5cGUgPSBhdXRvZnNfcHR5cGVfZXhwaXJlX211bHRpOwogCQl9IGVsc2UgewogCQkJaWYgKG5vdGlmeSA9PSBORllfTU9VTlQpCi0JCQkJdHlwZSA9IChzYmktPnR5cGUgJiBBVVRPRlNfVFlQRV9ESVJFQ1QpID8KKwkJCQl0eXBlID0gKHNiaS0+dHlwZSAmIEFVVE9GU19UWVBFX1RSSUdHRVIpID8KIAkJCQkJYXV0b2ZzX3B0eXBlX21pc3NpbmdfZGlyZWN0IDoKIAkJCQkJIGF1dG9mc19wdHlwZV9taXNzaW5nX2luZGlyZWN0OwogCQkJZWxzZQotCQkJCXR5cGUgPSAoc2JpLT50eXBlICYgQVVUT0ZTX1RZUEVfRElSRUNUKSA/CisJCQkJdHlwZSA9IChzYmktPnR5cGUgJiBBVVRPRlNfVFlQRV9UUklHR0VSKSA/CiAJCQkJCWF1dG9mc19wdHlwZV9leHBpcmVfZGlyZWN0IDoKIAkJCQkJYXV0b2ZzX3B0eXBlX2V4cGlyZV9pbmRpcmVjdDsKIAkJfQpAQCAtNDU3LDYgKzQ1Nyw0MCBAQAogCiAJc3RhdHVzID0gd3EtPnN0YXR1czsKIAorCS8qCisJICogRm9yIGRpcmVjdCBhbmQgb2Zmc2V0IG1vdW50cyB3ZSBuZWVkIHRvIHRyYWNrIHRoZSByZXF1ZXN0ZXIncworCSAqIHVpZCBhbmQgZ2lkIGluIHRoZSBkZW50cnkgaW5mbyBzdHJ1Y3QuIFRoaXMgaXMgc28gaXQgY2FuIGJlCisJICogc3VwcGxpZWQsIG9uIHJlcXVlc3QsIGJ5IHRoZSBtaXNjIGRldmljZSBpb2N0bCBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBuZWVkZWQgZHVyaW5nIGRhZW1vbiByZXNhdGFydCB3aGVuIHJlY29ubmVjdGluZworCSAqIHRvIGV4aXN0aW5nLCBhY3RpdmUsIGF1dG9mcyBtb3VudHMuIFRoZSB1aWQgYW5kIGdpZCAoYW5kCisJICogcmVsYXRlZCBzdHJpbmcgdmFsdWVzKSBtYXkgYmUgdXNlZCBmb3IgbWFjcm8gc3Vic3RpdHV0aW9uCisJICogaW4gYXV0b2ZzIG1vdW50IG1hcHMuCisJICovCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGF1dG9mc19pbmZvICppbm87CisJCXN0cnVjdCBkZW50cnkgKmRlID0gTlVMTDsKKworCQkvKiBkaXJlY3QgbW91bnQgb3IgYnJvd3NhYmxlIG1hcCAqLworCQlpbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZGVudHJ5KTsKKwkJaWYgKCFpbm8pIHsKKwkJCS8qIElmIG5vdCBsb29rdXAgYWN0dWFsIGRlbnRyeSB1c2VkICovCisJCQlkZSA9IGRfbG9va3VwKGRlbnRyeS0+ZF9wYXJlbnQsICZkZW50cnktPmRfbmFtZSk7CisJCQlpZiAoZGUpCisJCQkJaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlKTsKKwkJfQorCisJCS8qIFNldCBtb3VudCByZXF1ZXN0ZXIgKi8KKwkJaWYgKGlubykgeworCQkJc3Bpbl9sb2NrKCZzYmktPmZzX2xvY2spOworCQkJaW5vLT51aWQgPSB3cS0+dWlkOworCQkJaW5vLT5naWQgPSB3cS0+Z2lkOworCQkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisJCX0KKworCQlpZiAoZGUpCisJCQlkcHV0KGRlKTsKKwl9CisKIAkvKiBBcmUgd2UgdGhlIGxhc3QgcHJvY2VzcyB0byBuZWVkIHN0YXR1cz8gKi8KIAltdXRleF9sb2NrKCZzYmktPndxX211dGV4KTsKIAlpZiAoIS0td3EtPndhaXRfY3RyKQpkaWZmIC0tZ2l0IGEvZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmggYi9mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaAppbmRleCBlMjU5NWMyLi43ODkzZWFhIDEwMDY0NAotLS0gYS9mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaAorKysgYi9mcy9iZWZzL2JlZnNfZnNfdHlwZXMuaApAQCAtNTUsOCArNTUsMTIgQEAKIH07CiAKICNkZWZpbmUgQkVGU19CWVRFT1JERVJfTkFUSVZFIDB4NDI0OTQ3NDUKKyNkZWZpbmUgQkVGU19CWVRFT1JERVJfTkFUSVZFX0xFIChfX2ZvcmNlIGZzMzIpY3B1X3RvX2xlMzIoQkVGU19CWVRFT1JERVJfTkFUSVZFKQorI2RlZmluZSBCRUZTX0JZVEVPUkRFUl9OQVRJVkVfQkUgKF9fZm9yY2UgZnMzMiljcHVfdG9fYmUzMihCRUZTX0JZVEVPUkRFUl9OQVRJVkUpCiAKICNkZWZpbmUgQkVGU19TVVBFUl9NQUdJQyBCRUZTX1NVUEVSX01BR0lDMQorI2RlZmluZSBCRUZTX1NVUEVSX01BR0lDMV9MRSAoX19mb3JjZSBmczMyKWNwdV90b19sZTMyKEJFRlNfU1VQRVJfTUFHSUMxKQorI2RlZmluZSBCRUZTX1NVUEVSX01BR0lDMV9CRSAoX19mb3JjZSBmczMyKWNwdV90b19iZTMyKEJFRlNfU1VQRVJfTUFHSUMxKQogCiAvKgogICogRmxhZ3Mgb2YgaW5vZGUKZGlmZiAtLWdpdCBhL2ZzL2JlZnMvbGludXh2ZnMuYyBiL2ZzL2JlZnMvbGludXh2ZnMuYwppbmRleCA3NDBmNTM2Li5iNmRmZWUzIDEwMDY0NAotLS0gYS9mcy9iZWZzL2xpbnV4dmZzLmMKKysrIGIvZnMvYmVmcy9saW51eHZmcy5jCkBAIC02NTAsNyArNjUwLDcgQEAKIAlPcHRfdWlkLCBPcHRfZ2lkLCBPcHRfY2hhcnNldCwgT3B0X2RlYnVnLCBPcHRfZXJyLAogfTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgYmVmc190b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBiZWZzX3Rva2VucyA9IHsKIAl7T3B0X3VpZCwgInVpZD0lZCJ9LAogCXtPcHRfZ2lkLCAiZ2lkPSVkIn0sCiAJe09wdF9jaGFyc2V0LCAiaW9jaGFyc2V0PSVzIn0sCkBAIC04MDksOCArODA5LDggQEAKIAogCS8qIGFjY291bnQgZm9yIG9mZnNldCBvZiBzdXBlciBibG9jayBvbiB4ODYgKi8KIAlkaXNrX3NiID0gKGJlZnNfc3VwZXJfYmxvY2sgKikgYmgtPmJfZGF0YTsKLQlpZiAoKGxlMzJfdG9fY3B1KGRpc2tfc2ItPm1hZ2ljMSkgPT0gQkVGU19TVVBFUl9NQUdJQzEpIHx8Ci0JICAgIChiZTMyX3RvX2NwdShkaXNrX3NiLT5tYWdpYzEpID09IEJFRlNfU1VQRVJfTUFHSUMxKSkgeworCWlmICgoZGlza19zYi0+bWFnaWMxID09IEJFRlNfU1VQRVJfTUFHSUMxX0xFKSB8fAorCSAgICAoZGlza19zYi0+bWFnaWMxID09IEJFRlNfU1VQRVJfTUFHSUMxX0JFKSkgewogCQliZWZzX2RlYnVnKHNiLCAiVXNpbmcgUFBDIHN1cGVyYmxvY2sgbG9jYXRpb24iKTsKIAl9IGVsc2UgewogCQliZWZzX2RlYnVnKHNiLCAiVXNpbmcgeDg2IHN1cGVyYmxvY2sgbG9jYXRpb24iKTsKZGlmZiAtLWdpdCBhL2ZzL2JlZnMvc3VwZXIuYyBiL2ZzL2JlZnMvc3VwZXIuYwppbmRleCA4YzM0MDFmLi40MWYyYjRkIDEwMDY0NAotLS0gYS9mcy9iZWZzL3N1cGVyLmMKKysrIGIvZnMvYmVmcy9zdXBlci5jCkBAIC0yNiwxMCArMjYsMTAgQEAKIAliZWZzX3NiX2luZm8gKmJlZnNfc2IgPSBCRUZTX1NCKHNiKTsKIAogCS8qIENoZWNrIHRoZSBieXRlIG9yZGVyIG9mIHRoZSBmaWxlc3lzdGVtICovCi0JaWYgKGxlMzJfdG9fY3B1KGRpc2tfc2ItPmZzX2J5dGVfb3JkZXIpID09IEJFRlNfQllURU9SREVSX05BVElWRSkKKwlpZiAoZGlza19zYi0+ZnNfYnl0ZV9vcmRlciA9PSBCRUZTX0JZVEVPUkRFUl9OQVRJVkVfTEUpCiAJICAgIGJlZnNfc2ItPmJ5dGVfb3JkZXIgPSBCRUZTX0JZVEVTRVhfTEU7Ci0JZWxzZSBpZiAoYmUzMl90b19jcHUoZGlza19zYi0+ZnNfYnl0ZV9vcmRlcikgPT0gQkVGU19CWVRFT1JERVJfTkFUSVZFKQotCSAgICBiZWZzX3NiLT5ieXRlX29yZGVyID0gQkVGU19CWVRFU0VYX0JFOwkKKwllbHNlIGlmIChkaXNrX3NiLT5mc19ieXRlX29yZGVyID09IEJFRlNfQllURU9SREVSX05BVElWRV9CRSkKKwkgICAgYmVmc19zYi0+Ynl0ZV9vcmRlciA9IEJFRlNfQllURVNFWF9CRTsKIAogCWJlZnNfc2ItPm1hZ2ljMSA9IGZzMzJfdG9fY3B1KHNiLCBkaXNrX3NiLT5tYWdpYzEpOwogCWJlZnNfc2ItPm1hZ2ljMiA9IGZzMzJfdG9fY3B1KHNiLCBkaXNrX3NiLT5tYWdpYzIpOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZi5jIGIvZnMvYmluZm10X2VsZi5jCmluZGV4IDY1NWVkOGQuLjhmY2ZhMzkgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbGYuYworKysgYi9mcy9iaW5mbXRfZWxmLmMKQEAgLTY4Myw3ICs2ODMsNyBAQAogCQkJICogc3dpdGNoIHJlYWxseSBpcyBnb2luZyB0byBoYXBwZW4gLSBkbyB0aGlzIGluCiAJCQkgKiBmbHVzaF90aHJlYWQoKS4JLSBha3BtCiAJCQkgKi8KLQkJCVNFVF9QRVJTT05BTElUWShsb2MtPmVsZl9leCwgMCk7CisJCQlTRVRfUEVSU09OQUxJVFkobG9jLT5lbGZfZXgpOwogCiAJCQlpbnRlcnByZXRlciA9IG9wZW5fZXhlYyhlbGZfaW50ZXJwcmV0ZXIpOwogCQkJcmV0dmFsID0gUFRSX0VSUihpbnRlcnByZXRlcik7CkBAIC03MzQsNyArNzM0LDcgQEAKIAkJCWdvdG8gb3V0X2ZyZWVfZGVudHJ5OwogCX0gZWxzZSB7CiAJCS8qIEV4ZWN1dGFibGVzIHdpdGhvdXQgYW4gaW50ZXJwcmV0ZXIgYWxzbyBuZWVkIGEgcGVyc29uYWxpdHkgICovCi0JCVNFVF9QRVJTT05BTElUWShsb2MtPmVsZl9leCwgMCk7CisJCVNFVF9QRVJTT05BTElUWShsb2MtPmVsZl9leCk7CiAJfQogCiAJLyogRmx1c2ggYWxsIHRyYWNlcyBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgZXhlY3V0YWJsZSAqLwpAQCAtNzQ4LDcgKzc0OCw3IEBACiAKIAkvKiBEbyB0aGlzIGltbWVkaWF0ZWx5LCBzaW5jZSBTVEFDS19UT1AgYXMgdXNlZCBpbiBzZXR1cF9hcmdfcGFnZXMKIAkgICBtYXkgZGVwZW5kIG9uIHRoZSBwZXJzb25hbGl0eS4gICovCi0JU0VUX1BFUlNPTkFMSVRZKGxvYy0+ZWxmX2V4LCAwKTsKKwlTRVRfUEVSU09OQUxJVFkobG9jLT5lbGZfZXgpOwogCWlmIChlbGZfcmVhZF9pbXBsaWVzX2V4ZWMobG9jLT5lbGZfZXgsIGV4ZWN1dGFibGVfc3RhY2spKQogCQljdXJyZW50LT5wZXJzb25hbGl0eSB8PSBSRUFEX0lNUExJRVNfRVhFQzsKIApAQCAtMTE1NiwxNiArMTE1NiwyNCBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdm1hX2R1bXBfc2l6ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgICB1bnNpZ25lZCBsb25nIG1tX2ZsYWdzKQogeworI2RlZmluZSBGSUxURVIodHlwZSkJKG1tX2ZsYWdzICYgKDFVTCA8PCBNTUZfRFVNUF8jI3R5cGUpKQorCiAJLyogVGhlIHZtYSBjYW4gYmUgc2V0IHVwIHRvIHRlbGwgdXMgdGhlIGFuc3dlciBkaXJlY3RseS4gICovCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9BTFdBWVNEVU1QKQogCQlnb3RvIHdob2xlOwogCisJLyogSHVnZXRsYiBtZW1vcnkgY2hlY2sgKi8KKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0hVR0VUTEIpIHsKKwkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSAmJiBGSUxURVIoSFVHRVRMQl9TSEFSRUQpKQorCQkJZ290byB3aG9sZTsKKwkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkgJiYgRklMVEVSKEhVR0VUTEJfUFJJVkFURSkpCisJCQlnb3RvIHdob2xlOworCX0KKwogCS8qIERvIG5vdCBkdW1wIEkvTyBtYXBwZWQgZGV2aWNlcyBvciBzcGVjaWFsIG1hcHBpbmdzICovCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9SRVNFUlZFRCkpCiAJCXJldHVybiAwOwogCi0jZGVmaW5lIEZJTFRFUih0eXBlKQkobW1fZmxhZ3MgJiAoMVVMIDw8IE1NRl9EVU1QXyMjdHlwZSkpCi0KIAkvKiBCeSBkZWZhdWx0LCBkdW1wIHNoYXJlZCBtZW1vcnkgaWYgbWFwcGVkIGZyb20gYW4gYW5vbnltb3VzIGZpbGUuICovCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpIHsKIAkJaWYgKHZtYS0+dm1fZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9ubGluayA9PSAwID8KQEAgLTEzMzMsMjAgKzEzNDEsMTUgQEAKIAlwcnN0YXR1cy0+cHJfcGdycCA9IHRhc2tfcGdycF92bnIocCk7CiAJcHJzdGF0dXMtPnByX3NpZCA9IHRhc2tfc2Vzc2lvbl92bnIocCk7CiAJaWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpIHsKKwkJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOworCiAJCS8qCi0JCSAqIFRoaXMgaXMgdGhlIHJlY29yZCBmb3IgdGhlIGdyb3VwIGxlYWRlci4gIEFkZCBpbiB0aGUKLQkJICogY3VtdWxhdGl2ZSB0aW1lcyBvZiBwcmV2aW91cyBkZWFkIHRocmVhZHMuICBUaGlzIHRvdGFsCi0JCSAqIHdvbid0IGluY2x1ZGUgdGhlIHRpbWUgb2YgZWFjaCBsaXZlIHRocmVhZCB3aG9zZSBzdGF0ZQotCQkgKiBpcyBpbmNsdWRlZCBpbiB0aGUgY29yZSBkdW1wLiAgVGhlIGZpbmFsIHRvdGFsIHJlcG9ydGVkCi0JCSAqIHRvIG91ciBwYXJlbnQgcHJvY2VzcyB3aGVuIGl0IGNhbGxzIHdhaXQ0IHdpbGwgaW5jbHVkZQotCQkgKiB0aG9zZSBzdW1zIGFzIHdlbGwgYXMgdGhlIGxpdHRsZSBiaXQgbW9yZSB0aW1lIGl0IHRha2VzCi0JCSAqIHRoaXMgYW5kIGVhY2ggb3RoZXIgdGhyZWFkIHRvIGZpbmlzaCBkeWluZyBhZnRlciB0aGUKLQkJICogY29yZSBkdW1wIHN5bmNocm9uaXphdGlvbiBwaGFzZS4KKwkJICogVGhpcyBpcyB0aGUgcmVjb3JkIGZvciB0aGUgZ3JvdXAgbGVhZGVyLiAgSXQgc2hvd3MgdGhlCisJCSAqIGdyb3VwLXdpZGUgdG90YWwsIG5vdCBpdHMgaW5kaXZpZHVhbCB0aHJlYWQgdG90YWwuCiAJCSAqLwotCQljcHV0aW1lX3RvX3RpbWV2YWwoY3B1dGltZV9hZGQocC0+dXRpbWUsIHAtPnNpZ25hbC0+dXRpbWUpLAotCQkJCSAgICZwcnN0YXR1cy0+cHJfdXRpbWUpOwotCQljcHV0aW1lX3RvX3RpbWV2YWwoY3B1dGltZV9hZGQocC0+c3RpbWUsIHAtPnNpZ25hbC0+c3RpbWUpLAotCQkJCSAgICZwcnN0YXR1cy0+cHJfc3RpbWUpOworCQl0aHJlYWRfZ3JvdXBfY3B1dGltZShwLCAmY3B1dGltZSk7CisJCWNwdXRpbWVfdG9fdGltZXZhbChjcHV0aW1lLnV0aW1lLCAmcHJzdGF0dXMtPnByX3V0aW1lKTsKKwkJY3B1dGltZV90b190aW1ldmFsKGNwdXRpbWUuc3RpbWUsICZwcnN0YXR1cy0+cHJfc3RpbWUpOwogCX0gZWxzZSB7CiAJCWNwdXRpbWVfdG9fdGltZXZhbChwLT51dGltZSwgJnByc3RhdHVzLT5wcl91dGltZSk7CiAJCWNwdXRpbWVfdG9fdGltZXZhbChwLT5zdGltZSwgJnByc3RhdHVzLT5wcl9zdGltZSk7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmX2ZkcGljLmMgYi9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKaW5kZXggODBjMWY5NS4uMGU4MzY3YyAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZl9mZHBpYy5jCisrKyBiL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KQEAgLTQ1NSw4ICs0NTYsMTkgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIEVMRl9CQVNFX1BMQVRGT1JNCiAvKgotICogcHJlc2VudCB1c2VmdWwgaW5mb3JtYXRpb24gdG8gdGhlIHByb2dyYW0KKyAqIEFUX0JBU0VfUExBVEZPUk0gaW5kaWNhdGVzIHRoZSAicmVhbCIgaGFyZHdhcmUvbWljcm9hcmNoaXRlY3R1cmUuCisgKiBJZiB0aGUgYXJjaCBkZWZpbmVzIEVMRl9CQVNFX1BMQVRGT1JNIChpbiBhc20vZWxmLmgpLCB0aGUgdmFsdWUKKyAqIHdpbGwgYmUgY29waWVkIHRvIHRoZSB1c2VyIHN0YWNrIGluIHRoZSBzYW1lIG1hbm5lciBhcyBBVF9QTEFURk9STS4KKyAqLworI2RlZmluZSBFTEZfQkFTRV9QTEFURk9STSBOVUxMCisjZW5kaWYKKworLyoKKyAqIHByZXNlbnQgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHRoZSBwcm9ncmFtIGJ5IHNob3ZlbGxpbmcgaXQgb250byB0aGUgbmV3CisgKiBwcm9jZXNzJ3Mgc3RhY2sKICAqLwogc3RhdGljIGludCBjcmVhdGVfZWxmX2ZkcGljX3RhYmxlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAogCQkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLApAQCAtNDY2LDE1ICs0NzgsMTkgQEAKIAl1bnNpZ25lZCBsb25nIHNwLCBjc3AsIG5pdGVtczsKIAllbGZfY2FkZHJfdCBfX3VzZXIgKmFyZ3YsICplbnZwOwogCXNpemVfdCBwbGF0Zm9ybV9sZW4gPSAwLCBsZW47Ci0JY2hhciAqa19wbGF0Zm9ybTsKLQljaGFyIF9fdXNlciAqdV9wbGF0Zm9ybSwgKnA7CisJY2hhciAqa19wbGF0Zm9ybSwgKmtfYmFzZV9wbGF0Zm9ybTsKKwljaGFyIF9fdXNlciAqdV9wbGF0Zm9ybSwgKnVfYmFzZV9wbGF0Zm9ybSwgKnA7CiAJbG9uZyBod2NhcDsKIAlpbnQgbG9vcDsKIAlpbnQgbnI7CS8qIHJlc2V0IGZvciBlYWNoIGNzcCBhZGp1c3RtZW50ICovCiAKLQkvKiB3ZSdyZSBnb2luZyB0byBzaG92ZWwgYSB3aG9sZSBsb2FkIG9mIHN0dWZmIG9udG8gdGhlIHN0YWNrICovCiAjaWZkZWYgQ09ORklHX01NVQotCXNwID0gYnBybS0+cDsKKwkvKiBJbiBzb21lIGNhc2VzIChlLmcuIEh5cGVyLVRocmVhZGluZyksIHdlIHdhbnQgdG8gYXZvaWQgTDEgZXZpY3Rpb25zCisJICogYnkgdGhlIHByb2Nlc3NlcyBydW5uaW5nIG9uIHRoZSBzYW1lIHBhY2thZ2UuIE9uZSB0aGluZyB3ZSBjYW4gZG8gaXMKKwkgKiB0byBzaHVmZmxlIHRoZSBpbml0aWFsIHN0YWNrIGZvciB0aGVtLCBzbyB3ZSBnaXZlIHRoZSBhcmNoaXRlY3R1cmUKKwkgKiBhbiBvcHBvcnR1bml0eSB0byBkbyBzbyBoZXJlLgorCSAqLworCXNwID0gYXJjaF9hbGlnbl9zdGFjayhicHJtLT5wKTsKICNlbHNlCiAJc3AgPSBtbS0+c3RhcnRfc3RhY2s7CiAKQEAgLTQ4MywxMSArNDk5LDE0IEBACiAJCXJldHVybiAtRUZBVUxUOwogI2VuZGlmCiAKLQkvKiBnZXQgaG9sZCBvZiBwbGF0Zm9ybSBhbmQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIG1hc2tzIGZvciB0aGUgbWFjaGluZQotCSAqIHdlIGFyZSBydW5uaW5nIG9uLiAgSW4gc29tZSBjYXNlcyAoU3BhcmMpLCB0aGlzIGluZm8gaXMgaW1wb3NzaWJsZQotCSAqIHRvIGdldCwgaW4gb3RoZXJzIChpMzg2KSBpdCBpcyBtZXJlbHkgZGlmZmljdWx0LgotCSAqLwogCWh3Y2FwID0gRUxGX0hXQ0FQOworCisJLyoKKwkgKiBJZiB0aGlzIGFyY2hpdGVjdHVyZSBoYXMgYSBwbGF0Zm9ybSBjYXBhYmlsaXR5IHN0cmluZywgY29weSBpdAorCSAqIHRvIHVzZXJzcGFjZS4gIEluIHNvbWUgY2FzZXMgKFNwYXJjKSwgdGhpcyBpbmZvIGlzIGltcG9zc2libGUKKwkgKiBmb3IgdXNlcnNwYWNlIHRvIGdldCBhbnkgb3RoZXIgd2F5LCBpbiBvdGhlcnMgKGkzODYpIGl0IGlzCisJICogbWVyZWx5IGRpZmZpY3VsdC4KKwkgKi8KIAlrX3BsYXRmb3JtID0gRUxGX1BMQVRGT1JNOwogCXVfcGxhdGZvcm0gPSBOVUxMOwogCkBAIC00OTksMTkgKzUxOCwyMCBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0jaWYgZGVmaW5lZChfX2kzODZfXykgJiYgZGVmaW5lZChDT05GSUdfU01QKQotCS8qIGluIHNvbWUgY2FzZXMgKGUuZy4gSHlwZXItVGhyZWFkaW5nKSwgd2Ugd2FudCB0byBhdm9pZCBMMSBldmljdGlvbnMKLQkgKiBieSB0aGUgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHNhbWUgcGFja2FnZS4gT25lIHRoaW5nIHdlIGNhbiBkbyBpcwotCSAqIHRvIHNodWZmbGUgdGhlIGluaXRpYWwgc3RhY2sgZm9yIHRoZW0uCi0JICoKLQkgKiB0aGUgY29uZGl0aW9uYWxzIGhlcmUgYXJlIHVubmVlZGVkLCBidXQga2VwdCBpbiB0byBtYWtlIHRoZSBjb2RlCi0JICogYmVoYXZpb3VyIHRoZSBzYW1lIGFzIHByZSBjaGFuZ2UgdW5sZXNzIHdlIGhhdmUgaHlwZXJ0aHJlYWRlZAotCSAqIHByb2Nlc3NvcnMuIFRoaXMga2VlcHMgTXIgTWFyY2VsbyBQZXJzb24gaGFwcGllciBidXQgc2hvdWxkIGJlCi0JICogcmVtb3ZlZCBmb3IgMi41CisJLyoKKwkgKiBJZiB0aGlzIGFyY2hpdGVjdHVyZSBoYXMgYSAiYmFzZSIgcGxhdGZvcm0gY2FwYWJpbGl0eQorCSAqIHN0cmluZywgY29weSBpdCB0byB1c2Vyc3BhY2UuCiAJICovCi0JaWYgKHNtcF9udW1fc2libGluZ3MgPiAxKQotCQlzcCA9IHNwIC0gKChjdXJyZW50LT5waWQgJSA2NCkgPDwgNyk7Ci0jZW5kaWYKKwlrX2Jhc2VfcGxhdGZvcm0gPSBFTEZfQkFTRV9QTEFURk9STTsKKwl1X2Jhc2VfcGxhdGZvcm0gPSBOVUxMOworCisJaWYgKGtfYmFzZV9wbGF0Zm9ybSkgeworCQlwbGF0Zm9ybV9sZW4gPSBzdHJsZW4oa19iYXNlX3BsYXRmb3JtKSArIDE7CisJCXNwIC09IHBsYXRmb3JtX2xlbjsKKwkJdV9iYXNlX3BsYXRmb3JtID0gKGNoYXIgX191c2VyICopIHNwOworCQlpZiAoX19jb3B5X3RvX3VzZXIodV9iYXNlX3BsYXRmb3JtLCBrX2Jhc2VfcGxhdGZvcm0sIHBsYXRmb3JtX2xlbikgIT0gMCkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KIAogCXNwICY9IH43VUw7CiAKQEAgLTU0MSw5ICs1NjEsMTMgQEAKIAl9CiAKIAkvKiBmb3JjZSAxNiBieXRlIF9maW5hbF8gYWxpZ25tZW50IGhlcmUgZm9yIGdlbmVyYWxpdHkgKi8KLSNkZWZpbmUgRExJTkZPX0lURU1TIDEzCisjZGVmaW5lIERMSU5GT19JVEVNUyAxNQogCi0Jbml0ZW1zID0gMSArIERMSU5GT19JVEVNUyArIChrX3BsYXRmb3JtID8gMSA6IDApICsgQVRfVkVDVE9SX1NJWkVfQVJDSDsKKwluaXRlbXMgPSAxICsgRExJTkZPX0lURU1TICsgKGtfcGxhdGZvcm0gPyAxIDogMCkgKworCQkoa19iYXNlX3BsYXRmb3JtID8gMSA6IDApICsgQVRfVkVDVE9SX1NJWkVfQVJDSDsKKworCWlmIChicHJtLT5pbnRlcnBfZmxhZ3MgJiBCSU5QUk1fRkxBR1NfRVhFQ0ZEKQorCQluaXRlbXMrKzsKIAogCWNzcCA9IHNwOwogCXNwIC09IG5pdGVtcyAqIDIgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CkBAIC01NzUsNiArNTk5LDE5IEBACiAJCQkgICAgKGVsZl9hZGRyX3QpICh1bnNpZ25lZCBsb25nKSB1X3BsYXRmb3JtKTsKIAl9CiAKKwlpZiAoa19iYXNlX3BsYXRmb3JtKSB7CisJCW5yID0gMDsKKwkJY3NwIC09IDIgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJCU5FV19BVVhfRU5UKEFUX0JBU0VfUExBVEZPUk0sCisJCQkgICAgKGVsZl9hZGRyX3QpICh1bnNpZ25lZCBsb25nKSB1X2Jhc2VfcGxhdGZvcm0pOworCX0KKworCWlmIChicHJtLT5pbnRlcnBfZmxhZ3MgJiBCSU5QUk1fRkxBR1NfRVhFQ0ZEKSB7CisJCW5yID0gMDsKKwkJY3NwIC09IDIgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJCU5FV19BVVhfRU5UKEFUX0VYRUNGRCwgYnBybS0+aW50ZXJwX2RhdGEpOworCX0KKwogCW5yID0gMDsKIAljc3AgLT0gRExJTkZPX0lURU1TICogMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKIAlORVdfQVVYX0VOVChBVF9IV0NBUCwJaHdjYXApOwpAQCAtNTkwLDYgKzYyNyw4IEBACiAJTkVXX0FVWF9FTlQoQVRfRVVJRCwJKGVsZl9hZGRyX3QpIGN1cnJlbnQtPmV1aWQpOwogCU5FV19BVVhfRU5UKEFUX0dJRCwJKGVsZl9hZGRyX3QpIGN1cnJlbnQtPmdpZCk7CiAJTkVXX0FVWF9FTlQoQVRfRUdJRCwJKGVsZl9hZGRyX3QpIGN1cnJlbnQtPmVnaWQpOworCU5FV19BVVhfRU5UKEFUX1NFQ1VSRSwJc2VjdXJpdHlfYnBybV9zZWN1cmVleGVjKGJwcm0pKTsKKwlORVdfQVVYX0VOVChBVF9FWEVDRk4sCWJwcm0tPmV4ZWMpOwogCiAjaWZkZWYgQVJDSF9ETElORk8KIAluciA9IDA7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZW04Ni5jIGIvZnMvYmluZm10X2VtODYuYwppbmRleCBmOWM4OGQwLi4zMmZiMDBiIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZW04Ni5jCisrKyBiL2ZzL2JpbmZtdF9lbTg2LmMKQEAgLTQzLDcgKzQzLDcgQEAKIAkJCXJldHVybiAtRU5PRVhFQzsKIAl9CiAKLQlicHJtLT5zaF9iYW5nID0gMTsJLyogV2VsbCwgdGhlIGJhbmctc2hlbGwgaXMgaW1wbGljaXQuLi4gKi8KKwlicHJtLT5yZWN1cnNpb25fZGVwdGgrKzsgLyogV2VsbCwgdGhlIGJhbmctc2hlbGwgaXMgaW1wbGljaXQuLi4gKi8KIAlhbGxvd193cml0ZV9hY2Nlc3MoYnBybS0+ZmlsZSk7CiAJZnB1dChicHJtLT5maWxlKTsKIAlicHJtLT5maWxlID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9mbGF0LmMgYi9mcy9iaW5mbXRfZmxhdC5jCmluZGV4IGRmYzAxOTcuLmNjYjc4MWEgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9mbGF0LmMKKysrIGIvZnMvYmluZm10X2ZsYXQuYwpAQCAtMjI5LDEzICsyMjksMTMgQEAKIAlyZXQgPSAxMDsKIAlpZiAoYnVmWzNdICYgRVhUUkFfRklFTEQpIHsKIAkJcmV0ICs9IDIgKyBidWZbMTBdICsgKGJ1ZlsxMV0gPDwgOCk7Ci0JCWlmICh1bmxpa2VseShMQlVGU0laRSA9PSByZXQpKSB7CisJCWlmICh1bmxpa2VseShMQlVGU0laRSA8PSByZXQpKSB7CiAJCQlEQkdfRkxUKCJiaW5mbXRfZmxhdDogYnVmZmVyIG92ZXJmbG93IChFWFRSQSk/XG4iKTsKIAkJCWdvdG8gb3V0X2ZyZWVfYnVmOwogCQl9CiAJfQogCWlmIChidWZbM10gJiBPUklHX05BTUUpIHsKLQkJZm9yICg7IHJldCA8IExCVUZTSVpFICYmIChidWZbcmV0XSAhPSAwKTsgcmV0KyspCisJCXdoaWxlIChyZXQgPCBMQlVGU0laRSAmJiBidWZbcmV0KytdICE9IDApCiAJCQk7CiAJCWlmICh1bmxpa2VseShMQlVGU0laRSA9PSByZXQpKSB7CiAJCQlEQkdfRkxUKCJiaW5mbXRfZmxhdDogYnVmZmVyIG92ZXJmbG93IChPUklHX05BTUUpP1xuIik7CkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJfQogCX0KIAlpZiAoYnVmWzNdICYgQ09NTUVOVCkgewotCQlmb3IgKDsgIHJldCA8IExCVUZTSVpFICYmIChidWZbcmV0XSAhPSAwKTsgcmV0KyspCisJCXdoaWxlIChyZXQgPCBMQlVGU0laRSAmJiBidWZbcmV0KytdICE9IDApCiAJCQk7CiAJCWlmICh1bmxpa2VseShMQlVGU0laRSA9PSByZXQpKSB7CiAJCQlEQkdfRkxUKCJiaW5mbXRfZmxhdDogYnVmZmVyIG92ZXJmbG93IChDT01NRU5UKT9cbiIpOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmMKaW5kZXggOGQ3ZTg4ZS4uZjI3NDRhYiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X21pc2MuYworKysgYi9mcy9iaW5mbXRfbWlzYy5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJZ290byBfcmV0OwogCiAJcmV0dmFsID0gLUVOT0VYRUM7Ci0JaWYgKGJwcm0tPm1pc2NfYmFuZykKKwlpZiAoYnBybS0+cmVjdXJzaW9uX2RlcHRoID4gQklOUFJNX01BWF9SRUNVUlNJT04pCiAJCWdvdG8gX3JldDsKIAogCS8qIHRvIGtlZXAgbG9ja2luZyB0aW1lIGxvdywgd2UgY29weSB0aGUgaW50ZXJwcmV0ZXIgc3RyaW5nICovCkBAIC0xOTcsNyArMTk3LDcgQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBfZXJyb3I7CiAKLQlicHJtLT5taXNjX2JhbmcgPSAxOworCWJwcm0tPnJlY3Vyc2lvbl9kZXB0aCsrOwogCiAJcmV0dmFsID0gc2VhcmNoX2JpbmFyeV9oYW5kbGVyIChicHJtLCByZWdzKTsKIAlpZiAocmV0dmFsIDwgMCkKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9zY3JpcHQuYyBiL2ZzL2JpbmZtdF9zY3JpcHQuYwppbmRleCA5ZTM5NjNmLi4wODM0MzUwIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfc2NyaXB0LmMKKysrIGIvZnMvYmluZm10X3NjcmlwdC5jCkBAIC0yMiwxNCArMjIsMTUgQEAKIAljaGFyIGludGVycFtCSU5QUk1fQlVGX1NJWkVdOwogCWludCByZXR2YWw7CiAKLQlpZiAoKGJwcm0tPmJ1ZlswXSAhPSAnIycpIHx8IChicHJtLT5idWZbMV0gIT0gJyEnKSB8fCAoYnBybS0+c2hfYmFuZykpIAorCWlmICgoYnBybS0+YnVmWzBdICE9ICcjJykgfHwgKGJwcm0tPmJ1ZlsxXSAhPSAnIScpIHx8CisJICAgIChicHJtLT5yZWN1cnNpb25fZGVwdGggPiBCSU5QUk1fTUFYX1JFQ1VSU0lPTikpCiAJCXJldHVybiAtRU5PRVhFQzsKIAkvKgogCSAqIFRoaXMgc2VjdGlvbiBkb2VzIHRoZSAjISBpbnRlcnByZXRhdGlvbi4KIAkgKiBTb3J0YSBjb21wbGljYXRlZCwgYnV0IGhvcGVmdWxseSBpdCB3aWxsIHdvcmsuICAtVFlUCiAJICovCiAKLQlicHJtLT5zaF9iYW5nID0gMTsKKwlicHJtLT5yZWN1cnNpb25fZGVwdGgrKzsKIAlhbGxvd193cml0ZV9hY2Nlc3MoYnBybS0+ZmlsZSk7CiAJZnB1dChicHJtLT5maWxlKTsKIAlicHJtLT5maWxlID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9zb20uYyBiL2ZzL2JpbmZtdF9zb20uYwppbmRleCA2OGJlNTgwLi43NGU1ODdhIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfc29tLmMKKysrIGIvZnMvYmluZm10X3NvbS5jCkBAIC0zMDYsMyArMzA2LDUgQEAKIAogY29yZV9pbml0Y2FsbChpbml0X3NvbV9iaW5mbXQpOwogbW9kdWxlX2V4aXQoZXhpdF9zb21fYmluZm10KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCBkODRmMDQ2OS4uMjE4NDA4ZSAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTEyNjIsNyArMTI2Miw3IEBACiAKIC8qKgogICogbG9va3VwX2JkZXYgIC0gbG9va3VwIGEgc3RydWN0IGJsb2NrX2RldmljZSBieSBuYW1lCi0gKiBAcGF0aG5hbWU6CXNwZWNpYWwgZmlsZSByZXByZXNlbnRpbmcgdGhlIGJsb2NrIGRldmljZQorICogQHBhdGg6CXNwZWNpYWwgZmlsZSByZXByZXNlbnRpbmcgdGhlIGJsb2NrIGRldmljZQogICoKICAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgYmxvY2tkZXZpY2UgYXQgQHBhdGhuYW1lIGluIHRoZSBjdXJyZW50CiAgKiBuYW1lc3BhY2UgaWYgcG9zc2libGUgYW5kIHJldHVybiBpdC4gIFJldHVybiBFUlJfUFRSKGVycm9yKQpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCBhYzc4ZDRjLi42NTY5ZmRhIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtNzYsOCArNzYsNyBAQAogCiB2b2lkIHVubG9ja19idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKLQljbGVhcl9idWZmZXJfbG9ja2VkKGJoKTsKKwljbGVhcl9iaXRfdW5sb2NrKEJIX0xvY2ssICZiaC0+Yl9zdGF0ZSk7CiAJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKIAl3YWtlX3VwX2JpdCgmYmgtPmJfc3RhdGUsIEJIX0xvY2spOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2hhcl9kZXYuYyBiL2ZzL2NoYXJfZGV2LmMKaW5kZXggM2NiN2NkYS4uMjYyZmExMCAxMDA2NDQKLS0tIGEvZnMvY2hhcl9kZXYuYworKysgYi9mcy9jaGFyX2Rldi5jCkBAIC0yMiw5ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogCi0jaWZkZWYgQ09ORklHX0tNT0QKLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9LY29uZmlnIGIvZnMvY2lmcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MWE5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jaWZzL0tjb25maWcKQEAgLTAsMCArMSwxNDIgQEAKK2NvbmZpZyBDSUZTCisJdHJpc3RhdGUgIkNJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtLCBTTUJGUyBzdWNjZXNzb3IpIgorCWRlcGVuZHMgb24gSU5FVAorCXNlbGVjdCBOTFMKKwloZWxwCisJICBUaGlzIGlzIHRoZSBjbGllbnQgVkZTIG1vZHVsZSBmb3IgdGhlIENvbW1vbiBJbnRlcm5ldCBGaWxlIFN5c3RlbQorCSAgKENJRlMpIHByb3RvY29sIHdoaWNoIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIFNlcnZlciBNZXNzYWdlIEJsb2NrCisJICAoU01CKSBwcm90b2NvbCwgdGhlIG5hdGl2ZSBmaWxlIHNoYXJpbmcgbWVjaGFuaXNtIGZvciBtb3N0IGVhcmx5CisJICBQQyBvcGVyYXRpbmcgc3lzdGVtcy4gIFRoZSBDSUZTIHByb3RvY29sIGlzIGZ1bGx5IHN1cHBvcnRlZCBieQorCSAgZmlsZSBzZXJ2ZXJzIHN1Y2ggYXMgV2luZG93cyAyMDAwIChpbmNsdWRpbmcgV2luZG93cyAyMDAzLCBOVCA0CisJICBhbmQgV2luZG93cyBYUCkgYXMgd2VsbCBieSBTYW1iYSAod2hpY2ggcHJvdmlkZXMgZXhjZWxsZW50IENJRlMKKwkgIHNlcnZlciBzdXBwb3J0IGZvciBMaW51eCBhbmQgbWFueSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcykuIExpbWl0ZWQKKwkgIHN1cHBvcnQgZm9yIE9TLzIgYW5kIFdpbmRvd3MgTUUgYW5kIHNpbWlsYXIgc2VydmVycyBpcyBwcm92aWRlZCBhcworCSAgd2VsbC4KKworCSAgVGhlIGNpZnMgbW9kdWxlIHByb3ZpZGVzIGFuIGFkdmFuY2VkIG5ldHdvcmsgZmlsZSBzeXN0ZW0KKwkgIGNsaWVudCBmb3IgbW91bnRpbmcgdG8gQ0lGUyBjb21wbGlhbnQgc2VydmVycy4gIEl0IGluY2x1ZGVzCisJICBzdXBwb3J0IGZvciBERlMgKGhpZXJhcmNoaWNhbCBuYW1lIHNwYWNlKSwgc2VjdXJlIHBlci11c2VyCisJICBzZXNzaW9uIGVzdGFibGlzaG1lbnQgdmlhIEtlcmJlcm9zIG9yIE5UTE0gb3IgTlRMTXYyLAorCSAgc2FmZSBkaXN0cmlidXRlZCBjYWNoaW5nIChvcGxvY2spLCBvcHRpb25hbCBwYWNrZXQKKwkgIHNpZ25pbmcsIFVuaWNvZGUgYW5kIG90aGVyIGludGVybmF0aW9uYWxpemF0aW9uIGltcHJvdmVtZW50cy4KKwkgIElmIHlvdSBuZWVkIHRvIG1vdW50IHRvIFNhbWJhIG9yIFdpbmRvd3MgZnJvbSB0aGlzIG1hY2hpbmUsIHNheSBZLgorCitjb25maWcgQ0lGU19TVEFUUworICAgICAgICBib29sICJDSUZTIHN0YXRpc3RpY3MiCisgICAgICAgIGRlcGVuZHMgb24gQ0lGUworICAgICAgICBoZWxwCisgICAgICAgICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSBzdGF0aXN0aWNzIGZvciBlYWNoIHNlcnZlciBzaGFyZQorCSAgbW91bnRlZCBieSB0aGUgY2lmcyBjbGllbnQgdG8gYmUgZGlzcGxheWVkIGluIC9wcm9jL2ZzL2NpZnMvU3RhdHMKKworY29uZmlnIENJRlNfU1RBVFMyCisJYm9vbCAiRXh0ZW5kZWQgc3RhdGlzdGljcyIKKwlkZXBlbmRzIG9uIENJRlNfU1RBVFMKKwloZWxwCisJICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGFsbG93IG1vcmUgZGV0YWlsZWQgc3RhdGlzdGljcyBvbiBTTUIKKwkgIHJlcXVlc3QgdGltaW5nIHRvIGJlIGRpc3BsYXllZCBpbiAvcHJvYy9mcy9jaWZzL0RlYnVnRGF0YSBhbmQgYWxzbworCSAgYWxsb3cgb3B0aW9uYWwgbG9nZ2luZyBvZiBzbG93IHJlc3BvbnNlcyB0byBkbWVzZyAoZGVwZW5kaW5nIG9uIHRoZQorCSAgdmFsdWUgb2YgL3Byb2MvZnMvY2lmcy9jaWZzRllJLCBzZWUgZnMvY2lmcy9SRUFETUUgZm9yIG1vcmUgZGV0YWlscykuCisJICBUaGVzZSBhZGRpdGlvbmFsIHN0YXRpc3RpY3MgbWF5IGhhdmUgYSBtaW5vciBlZmZlY3Qgb24gcGVyZm9ybWFuY2UKKwkgIGFuZCBtZW1vcnkgdXRpbGl6YXRpb24uCisKKwkgIFVubGVzcyB5b3UgYXJlIGEgZGV2ZWxvcGVyIG9yIGFyZSBkb2luZyBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuYWx5c2lzCisJICBvciB0dW5pbmcsIHNheSBOLgorCitjb25maWcgQ0lGU19XRUFLX1BXX0hBU0gKKwlib29sICJTdXBwb3J0IGxlZ2FjeSBzZXJ2ZXJzIHdoaWNoIHVzZSB3ZWFrZXIgTEFOTUFOIHNlY3VyaXR5IgorCWRlcGVuZHMgb24gQ0lGUworCWhlbHAKKwkgIE1vZGVybiBDSUZTIHNlcnZlcnMgaW5jbHVkaW5nIFNhbWJhIGFuZCBtb3N0IFdpbmRvd3MgdmVyc2lvbnMKKwkgIChzaW5jZSAxOTk3KSBzdXBwb3J0IHN0cm9uZ2VyIE5UTE0gKGFuZCBldmVuIE5UTE12MiBhbmQgS2VyYmVyb3MpCisJICBzZWN1cml0eSBtZWNoYW5pc21zLiBUaGVzZSBoYXNoIHRoZSBwYXNzd29yZCBtb3JlIHNlY3VyZWx5CisJICB0aGFuIHRoZSBtZWNoYW5pc21zIHVzZWQgaW4gdGhlIG9sZGVyIExBTk1BTiB2ZXJzaW9uIG9mIHRoZQorCSAgU01CIHByb3RvY29sIGJ1dCBMQU5NQU4gYmFzZWQgYXV0aGVudGljYXRpb24gaXMgbmVlZGVkIHRvCisJICBlc3RhYmxpc2ggc2Vzc2lvbnMgd2l0aCBzb21lIG9sZCBTTUIgc2VydmVycy4KKworCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWxsb3dzIHRoZSBjaWZzIG1vZHVsZSB0byBtb3VudCB0byBvbGRlcgorCSAgTEFOTUFOIGJhc2VkIHNlcnZlcnMgc3VjaCBhcyBPUy8yIGFuZCBXaW5kb3dzIDk1LCBidXQgc3VjaAorCSAgbW91bnRzIG1heSBiZSBsZXNzIHNlY3VyZSB0aGFuIG1vdW50cyB1c2luZyBOVExNIG9yIG1vcmUgcmVjZW50CisJICBzZWN1cml0eSBtZWNoYW5pc21zIGlmIHlvdSBhcmUgb24gYSBwdWJsaWMgbmV0d29yay4gIFVubGVzcyB5b3UKKwkgIGhhdmUgYSBuZWVkIHRvIGFjY2VzcyBvbGQgU01CIHNlcnZlcnMgKGFuZCBhcmUgb24gYSBwcml2YXRlCisJICBuZXR3b3JrKSB5b3UgcHJvYmFibHkgd2FudCB0byBzYXkgTi4gIEV2ZW4gaWYgdGhpcyBzdXBwb3J0CisJICBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgYnVpbGQsIExBTk1BTiBhdXRoZW50aWNhdGlvbiB3aWxsIG5vdCBiZQorCSAgdXNlZCBhdXRvbWF0aWNhbGx5LiBBdCBydW50aW1lIExBTk1BTiBtb3VudHMgYXJlIGRpc2FibGVkIGJ1dAorCSAgY2FuIGJlIHNldCB0byByZXF1aXJlZCAob3Igb3B0aW9uYWwpIGVpdGhlciBpbgorCSAgL3Byb2MvZnMvY2lmcyAoc2VlIGZzL2NpZnMvUkVBRE1FIGZvciBtb3JlIGRldGFpbCkgb3IgdmlhIGFuCisJICBvcHRpb24gb24gdGhlIG1vdW50IGNvbW1hbmQuIFRoaXMgc3VwcG9ydCBpcyBkaXNhYmxlZCBieQorCSAgZGVmYXVsdCBpbiBvcmRlciB0byByZWR1Y2UgdGhlIHBvc3NpYmlsaXR5IG9mIGEgZG93bmdyYWRlCisJICBhdHRhY2suCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDSUZTX1VQQ0FMTAorCSAgYm9vbCAiS2VyYmVyb3MvU1BORUdPIGFkdmFuY2VkIHNlc3Npb24gc2V0dXAiCisJICBkZXBlbmRzIG9uIENJRlMgJiYgS0VZUworCSAgaGVscAorCSAgICBFbmFibGVzIGFuIHVwY2FsbCBtZWNoYW5pc20gZm9yIENJRlMgd2hpY2ggYWNjZXNzZXMKKwkgICAgdXNlcnNwYWNlIGhlbHBlciB1dGlsaXRpZXMgdG8gcHJvdmlkZSBTUE5FR08gcGFja2FnZWQgKFJGQyA0MTc4KQorCSAgICBLZXJiZXJvcyB0aWNrZXRzIHdoaWNoIGFyZSBuZWVkZWQgdG8gbW91bnQgdG8gY2VydGFpbiBzZWN1cmUgc2VydmVycworCSAgICAoZm9yIHdoaWNoIG1vcmUgc2VjdXJlIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkKS4gSWYKKwkgICAgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENJRlNfWEFUVFIKKyAgICAgICAgYm9vbCAiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzIgorICAgICAgICBkZXBlbmRzIG9uIENJRlMKKyAgICAgICAgaGVscAorICAgICAgICAgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQorICAgICAgICAgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKKyAgICAgICAgICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4gIENJRlMgbWFwcyB0aGUgbmFtZSBvZgorICAgICAgICAgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYmVnaW5uaW5nIHdpdGggdGhlIHVzZXIgbmFtZXNwYWNlIHByZWZpeAorICAgICAgICAgIHRvIFNNQi9DSUZTIEVBcy4gRUFzIGFyZSBzdG9yZWQgb24gV2luZG93cyBzZXJ2ZXJzIHdpdGhvdXQgdGhlCisgICAgICAgICAgdXNlciBuYW1lc3BhY2UgcHJlZml4LCBidXQgdGhlaXIgbmFtZXMgYXJlIHNlZW4gYnkgTGludXggY2lmcyBjbGllbnRzCisgICAgICAgICAgcHJlZmFjZWQgYnkgdGhlIHVzZXIgbmFtZXNwYWNlIHByZWZpeC4gVGhlIHN5c3RlbSBuYW1lc3BhY2UKKyAgICAgICAgICAodXNlZCBieSBzb21lIGZpbGVzeXN0ZW1zIHRvIHN0b3JlIEFDTHMpIGlzIG5vdCBzdXBwb3J0ZWQgYXQKKyAgICAgICAgICB0aGlzIHRpbWUuCisKKyAgICAgICAgICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQ0lGU19QT1NJWAorICAgICAgICBib29sICJDSUZTIFBPU0lYIEV4dGVuc2lvbnMiCisgICAgICAgIGRlcGVuZHMgb24gQ0lGU19YQVRUUgorICAgICAgICBoZWxwCisgICAgICAgICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUgY2lmcyBjbGllbnQgdG8gYXR0ZW1wdCB0bworCSAgbmVnb3RpYXRlIGEgbmV3ZXIgZGlhbGVjdCB3aXRoIHNlcnZlcnMsIHN1Y2ggYXMgU2FtYmEgMy4wLjUKKwkgIG9yIGxhdGVyLCB0aGF0IG9wdGlvbmFsbHkgY2FuIGhhbmRsZSBtb3JlIFBPU0lYIGxpa2UgKHJhdGhlcgorCSAgdGhhbiBXaW5kb3dzIGxpa2UpIGZpbGUgYmVoYXZpb3IuICBJdCBhbHNvIGVuYWJsZXMKKwkgIHN1cHBvcnQgZm9yIFBPU0lYIEFDTHMgKGdldGZhY2wgYW5kIHNldGZhY2wpIHRvIHNlcnZlcnMKKwkgIChzdWNoIGFzIFNhbWJhIDMuMTAgYW5kIGxhdGVyKSB3aGljaCBjYW4gbmVnb3RpYXRlCisJICBDSUZTIFBPU0lYIEFDTCBzdXBwb3J0LiAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENJRlNfREVCVUcyCisJYm9vbCAiRW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXMiCisJZGVwZW5kcyBvbiBDSUZTCisJaGVscAorCSAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGFkZHMgYSBmZXcgbW9yZSBkZWJ1Z2dpbmcgcm91dGluZXMKKwkgICB0byB0aGUgY2lmcyBjb2RlIHdoaWNoIHNsaWdodGx5IGluY3JlYXNlcyB0aGUgc2l6ZSBvZgorCSAgIHRoZSBjaWZzIG1vZHVsZSBhbmQgY2FuIGNhdXNlIGFkZGl0aW9uYWwgbG9nZ2luZyBvZiBkZWJ1ZworCSAgIG1lc3NhZ2VzIGluIHNvbWUgZXJyb3IgcGF0aHMsIHNsb3dpbmcgcGVyZm9ybWFuY2UuIFRoaXMKKwkgICBvcHRpb24gY2FuIGJlIHR1cm5lZCBvZmYgdW5sZXNzIHlvdSBhcmUgZGVidWdnaW5nCisJICAgY2lmcyBwcm9ibGVtcy4gIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDSUZTX0VYUEVSSU1FTlRBTAorCSAgYm9vbCAiQ0lGUyBFeHBlcmltZW50YWwgRmVhdHVyZXMgKEVYUEVSSU1FTlRBTCkiCisJICBkZXBlbmRzIG9uIENJRlMgJiYgRVhQRVJJTUVOVEFMCisJICBoZWxwCisJICAgIEVuYWJsZXMgY2lmcyBmZWF0dXJlcyB1bmRlciB0ZXN0aW5nLiBUaGVzZSBmZWF0dXJlcyBhcmUKKwkgICAgZXhwZXJpbWVudGFsIGFuZCBjdXJyZW50bHkgaW5jbHVkZSBERlMgc3VwcG9ydCBhbmQgZGlyZWN0b3J5CisJICAgIGNoYW5nZSBub3RpZmljYXRpb24gaWUgZmNudGwoRl9ETk9USUZZKSwgYXMgd2VsbCBhcyB0aGUgdXBjYWxsCisJICAgIG1lY2hhbmlzbSB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIEtlcmJlcm9zIHNlc3Npb24gbmVnb3RpYXRpb24KKwkgICAgYW5kIHVpZCByZW1hcHBpbmcuICBTb21lIG9mIHRoZXNlIGZlYXR1cmVzIGFsc28gbWF5IGRlcGVuZCBvbgorCSAgICBzZXR0aW5nIGEgdmFsdWUgb2YgMSB0byB0aGUgcHNldWRvLWZpbGUgL3Byb2MvZnMvY2lmcy9FeHBlcmltZW50YWwKKwkgICAgKHdoaWNoIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQpLiBTZWUgdGhlIGZpbGUgZnMvY2lmcy9SRUFETUUKKwkgICAgZm9yIG1vcmUgZGV0YWlscy4gIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDSUZTX0RGU19VUENBTEwKKwkgIGJvb2wgIkRGUyBmZWF0dXJlIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJICBkZXBlbmRzIG9uIENJRlNfRVhQRVJJTUVOVEFMCisJICBkZXBlbmRzIG9uIEtFWVMKKwkgIGhlbHAKKwkgICAgRW5hYmxlcyBhbiB1cGNhbGwgbWVjaGFuaXNtIGZvciBDSUZTIHdoaWNoIGNvbnRhY3RzIHVzZXJzcGFjZQorCSAgICBoZWxwZXIgdXRpbGl0aWVzIHRvIHByb3ZpZGUgc2VydmVyIG5hbWUgcmVzb2x1dGlvbiAoaG9zdCBuYW1lcyB0bworCSAgICBJUCBhZGRyZXNzZXMpIHdoaWNoIGlzIG5lZWRlZCBmb3IgaW1wbGljaXQgbW91bnRzIG9mIERGUyBqdW5jdGlvbgorCSAgICBwb2ludHMuIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGM0YThhMDYuLjYyZDhiZDggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC0xNzkxLDcgKzE3OTEsNyBAQAogCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJCXVubG9ja19wYWdlKHBhZ2UpOwogCQlpZiAoIXBhZ2V2ZWNfYWRkKHBscnVfcHZlYywgcGFnZSkpCi0JCQlfX3BhZ2V2ZWNfbHJ1X2FkZChwbHJ1X3B2ZWMpOworCQkJX19wYWdldmVjX2xydV9hZGRfZmlsZShwbHJ1X3B2ZWMpOwogCQlkYXRhICs9IFBBR0VfQ0FDSEVfU0laRTsKIAl9CiAJcmV0dXJuOwpAQCAtMTkyNSw3ICsxOTI1LDcgQEAKIAkJYnl0ZXNfcmVhZCA9IDA7CiAJfQogCi0JcGFnZXZlY19scnVfYWRkKCZscnVfcHZlYyk7CisJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAogLyogbmVlZCB0byBmcmVlIHNtYl9yZWFkX2RhdGEgYnVmIGJlZm9yZSBleGl0ICovCiAJaWYgKHNtYl9yZWFkX2RhdGEpIHsKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvcHNkZXYuYyBiL2ZzL2NvZGEvcHNkZXYuYwppbmRleCAwZDliODBlLi5jZmQyOWRhIDEwMDY0NAotLS0gYS9mcy9jb2RhL3BzZGV2LmMKKysrIGIvZnMvY29kYS9wc2Rldi5jCkBAIC0zNjIsOSArMzYyLDggQEAKIAkJZ290byBvdXRfY2hyZGV2OwogCX0JCQogCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09EQURFVlM7IGkrKykKLQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGNvZGFfcHNkZXZfY2xhc3MsIE5VTEwsCi0JCQkJICAgICAgTUtERVYoQ09EQV9QU0RFVl9NQUpPUiwgaSksCi0JCQkJICAgICAgTlVMTCwgImNmcyVkIiwgaSk7CisJCWRldmljZV9jcmVhdGUoY29kYV9wc2Rldl9jbGFzcywgTlVMTCwKKwkJCSAgICAgIE1LREVWKENPREFfUFNERVZfTUFKT1IsIGkpLCBOVUxMLCAiY2ZzJWQiLCBpKTsKIAljb2RhX3N5c2N0bF9pbml0KCk7CiAJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdC5jIGIvZnMvY29tcGF0LmMKaW5kZXggMDc1ZDA1MC4uNWY5ZWM0NCAxMDA2NDQKLS0tIGEvZnMvY29tcGF0LmMKKysrIGIvZnMvY29tcGF0LmMKQEAgLTEzNyw2ICsxMzcsNDUgQEAKIAlyZXR1cm4gY29tcGF0X3N5c19mdXRpbWVzYXQoQVRfRkRDV0QsIGZpbGVuYW1lLCB0KTsKIH0KIAorc3RhdGljIGludCBjcF9jb21wYXRfc3RhdChzdHJ1Y3Qga3N0YXQgKnN0YXQsIHN0cnVjdCBjb21wYXRfc3RhdCBfX3VzZXIgKnVidWYpCit7CisJY29tcGF0X2lub190IGlubyA9IHN0YXQtPmlubzsKKwl0eXBlb2YodWJ1Zi0+c3RfdWlkKSB1aWQgPSAwOworCXR5cGVvZih1YnVmLT5zdF9naWQpIGdpZCA9IDA7CisJaW50IGVycjsKKworCVNFVF9VSUQodWlkLCBzdGF0LT51aWQpOworCVNFVF9HSUQoZ2lkLCBzdGF0LT5naWQpOworCisJaWYgKCh1NjQpIHN0YXQtPnNpemUgPiBNQVhfTk9OX0xGUyB8fAorCSAgICAhb2xkX3ZhbGlkX2RldihzdGF0LT5kZXYpIHx8CisJICAgICFvbGRfdmFsaWRfZGV2KHN0YXQtPnJkZXYpKQorCQlyZXR1cm4gLUVPVkVSRkxPVzsKKwlpZiAoc2l6ZW9mKGlubykgPCBzaXplb2Yoc3RhdC0+aW5vKSAmJiBpbm8gIT0gc3RhdC0+aW5vKQorCQlyZXR1cm4gLUVPVkVSRkxPVzsKKworCWlmIChjbGVhcl91c2VyKHVidWYsIHNpemVvZigqdWJ1ZikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWVyciAgPSBfX3B1dF91c2VyKG9sZF9lbmNvZGVfZGV2KHN0YXQtPmRldiksICZ1YnVmLT5zdF9kZXYpOworCWVyciB8PSBfX3B1dF91c2VyKGlubywgJnVidWYtPnN0X2lubyk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+bW9kZSwgJnVidWYtPnN0X21vZGUpOworCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm5saW5rLCAmdWJ1Zi0+c3RfbmxpbmspOworCWVyciB8PSBfX3B1dF91c2VyKHVpZCwgJnVidWYtPnN0X3VpZCk7CisJZXJyIHw9IF9fcHV0X3VzZXIoZ2lkLCAmdWJ1Zi0+c3RfZ2lkKTsKKwllcnIgfD0gX19wdXRfdXNlcihvbGRfZW5jb2RlX2RldihzdGF0LT5yZGV2KSwgJnVidWYtPnN0X3JkZXYpOworCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPnNpemUsICZ1YnVmLT5zdF9zaXplKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5hdGltZS50dl9zZWMsICZ1YnVmLT5zdF9hdGltZSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+YXRpbWUudHZfbnNlYywgJnVidWYtPnN0X2F0aW1lX25zZWMpOworCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm10aW1lLnR2X3NlYywgJnVidWYtPnN0X210aW1lKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5tdGltZS50dl9uc2VjLCAmdWJ1Zi0+c3RfbXRpbWVfbnNlYyk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+Y3RpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfY3RpbWUpOworCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmN0aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9jdGltZV9uc2VjKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5ibGtzaXplLCAmdWJ1Zi0+c3RfYmxrc2l6ZSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+YmxvY2tzLCAmdWJ1Zi0+c3RfYmxvY2tzKTsKKwlyZXR1cm4gZXJyOworfQorCiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19uZXdzdGF0KGNoYXIgX191c2VyICogZmlsZW5hbWUsCiAJCXN0cnVjdCBjb21wYXRfc3RhdCBfX3VzZXIgKnN0YXRidWYpCiB7CkBAIC0xMjM5LDcgKzEyNzgsNyBAQAogCQkJaWYgKCFwKQogCQkJCWJyZWFrOwogCQkJYXJndisrOwotCQkJaWYoKytpID4gbWF4KQorCQkJaWYgKGkrKyA+PSBtYXgpCiAJCQkJcmV0dXJuIC1FMkJJRzsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2ZzL2RlYnVnZnMvaW5vZGUuYyBiL2ZzL2RlYnVnZnMvaW5vZGUuYwppbmRleCAwOGUyOGM5Li4zZGJlMjE2IDEwMDY0NAotLS0gYS9mcy9kZWJ1Z2ZzL2lub2RlLmMKKysrIGIvZnMvZGVidWdmcy9pbm9kZS5jCkBAIC0yNiw4ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0KLSNkZWZpbmUgREVCVUdGU19NQUdJQwkweDY0NjI2NzIwCisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KIAogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqZGVidWdmc19tb3VudDsKIHN0YXRpYyBpbnQgZGVidWdmc19tb3VudF9jb3VudDsKZGlmZiAtLWdpdCBhL2ZzL2RldnB0cy9pbm9kZS5jIGIvZnMvZGV2cHRzL2lub2RlLmMKaW5kZXggYTcwZDVkMC4uNGE3MTRmNmMgMTAwNjQ0Ci0tLSBhL2ZzL2RldnB0cy9pbm9kZS5jCisrKyBiL2ZzL2RldnB0cy9pbm9kZS5jCkBAIC00OSw3ICs0OSw3IEBACiAJT3B0X2VycgogfTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewogCXtPcHRfdWlkLCAidWlkPSV1In0sCiAJe09wdF9naWQsICJnaWQ9JXUifSwKIAl7T3B0X21vZGUsICJtb2RlPSVvIn0sCmRpZmYgLS1naXQgYS9mcy9kaXJlY3QtaW8uYyBiL2ZzL2RpcmVjdC1pby5jCmluZGV4IDk2MDZlZTguLmFmMDU1OGQgMTAwNjQ0Ci0tLSBhL2ZzL2RpcmVjdC1pby5jCisrKyBiL2ZzL2RpcmVjdC1pby5jCkBAIC01LDExICs1LDExIEBACiAgKgogICogT19ESVJFQ1QKICAqCi0gKiAwNEp1bDIwMDIJYWtwbUB6aXAuY29tLmF1CisgKiAwNEp1bDIwMDIJQW5kcmV3IE1vcnRvbgogICoJCUluaXRpYWwgdmVyc2lvbgogICogMTFTZXAyMDAyCWphbmV0aW5jQHVzLmlibS5jb20KICAqIAkJYWRkZWQgcmVhZHYvd3JpdGV2IHN1cHBvcnQuCi0gKiAyOU9jdDIwMDIJYWtwbUB6aXAuY29tLmF1CisgKiAyOU9jdDIwMDIJQW5kcmV3IE1vcnRvbgogICoJCXJld3JvdGUgYmlvX2FkZF9wYWdlKCkgc3VwcG9ydC4KICAqIDMwT2N0MjAwMglwYmFkYXJpQHVzLmlibS5jb20KICAqCQlhZGRlZCBzdXBwb3J0IGZvciBub24tYWxpZ25lZCBJTy4KZGlmZiAtLWdpdCBhL2ZzL2RxdW90LmMgYi9mcy9kcXVvdC5jCmluZGV4IGFkN2U1OTAuLmRhMzBhMjcgMTAwNjQ0Ci0tLSBhL2ZzL2RxdW90LmMKKysrIGIvZnMvZHF1b3QuYwpAQCAtOSw4ICs5LDYgQEAKICAqIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIG9uZSBvZiB0aGUgc2V2ZXJhbCB2YXJpYW50cyBvZiB0aGUgTElOVVgKICAqIGlub2RlLXN1YnN5c3RlbSB3aXRoIGFkZGVkIGNvbXBsZXhpdHkgb2YgdGhlIGRpc2txdW90YSBzeXN0ZW0uCiAgKiAKLSAqIFZlcnNpb246ICRJZDogZHF1b3QuYyx2IDYuMyAxOTk2LzExLzE3IDE4OjM1OjM0IG12dyBFeHAgbXZ3ICQKLSAqIAogICogQXV0aG9yOglNYXJjbyB2YW4gV2llcmluZ2VuIDxtdndAcGxhbmV0cy5lbG0ubmV0PgogICoKICAqIEZpeGVzOiAgIERtaXRyeSBHb3JvZGNoYW5pbiA8cGdtZHNnQGliaS5jb20+LCAxMSBGZWIgOTYKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL01ha2VmaWxlIGIvZnMvZWNyeXB0ZnMvTWFrZWZpbGUKaW5kZXggYjQ3NTVhOC4uMmNjOWVlNCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvTWFrZWZpbGUKKysrIGIvZnMvZWNyeXB0ZnMvTWFrZWZpbGUKQEAgLTQsNCArNCw0IEBACiAKIG9iai0kKENPTkZJR19FQ1JZUFRfRlMpICs9IGVjcnlwdGZzLm8KIAotZWNyeXB0ZnMtb2JqcyA6PSBkZW50cnkubyBmaWxlLm8gaW5vZGUubyBtYWluLm8gc3VwZXIubyBtbWFwLm8gcmVhZF93cml0ZS5vIGNyeXB0by5vIGtleXN0b3JlLm8gbWVzc2FnaW5nLm8gbmV0bGluay5vIG1pc2NkZXYubyBrdGhyZWFkLm8gZGVidWcubworZWNyeXB0ZnMtb2JqcyA6PSBkZW50cnkubyBmaWxlLm8gaW5vZGUubyBtYWluLm8gc3VwZXIubyBtbWFwLm8gcmVhZF93cml0ZS5vIGNyeXB0by5vIGtleXN0b3JlLm8gbWVzc2FnaW5nLm8gbWlzY2Rldi5vIGt0aHJlYWQubyBkZWJ1Zy5vCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaCBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCmluZGV4IGI3M2ZiNzUuLjM1MDRjZjkgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCisrKyBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCkBAIC03OSwxMSArNzksNiBAQAogI2RlZmluZSBFQ1JZUFRGU19NQVhfUEtJX05BTUVfQllURVMgMTYKICNkZWZpbmUgRUNSWVBURlNfREVGQVVMVF9OVU1fVVNFUlMgNAogI2RlZmluZSBFQ1JZUFRGU19NQVhfTlVNX1VTRVJTIDMyNzY4Ci0jZGVmaW5lIEVDUllQVEZTX1RSQU5TUE9SVF9ORVRMSU5LIDAKLSNkZWZpbmUgRUNSWVBURlNfVFJBTlNQT1JUX0NPTk5FQ1RPUiAxCi0jZGVmaW5lIEVDUllQVEZTX1RSQU5TUE9SVF9SRUxBWUZTIDIKLSNkZWZpbmUgRUNSWVBURlNfVFJBTlNQT1JUX01JU0NERVYgMwotI2RlZmluZSBFQ1JZUFRGU19ERUZBVUxUX1RSQU5TUE9SVCBFQ1JZUFRGU19UUkFOU1BPUlRfTUlTQ0RFVgogI2RlZmluZSBFQ1JZUFRGU19YQVRUUl9OQU1FICJ1c2VyLmVjcnlwdGZzIgogCiAjZGVmaW5lIFJGQzI0NDBfQ0lQSEVSX0RFUzNfRURFIDB4MDIKQEAgLTQwMCw4ICszOTUsNiBAQAogCXN0cnVjdCBtdXRleCBtdXg7CiB9OwogCi1leHRlcm4gdW5zaWduZWQgaW50IGVjcnlwdGZzX3RyYW5zcG9ydDsKLQogc3RydWN0IGVjcnlwdGZzX2RhZW1vbjsKIAogc3RydWN0IGVjcnlwdGZzX2RhZW1vbiB7CkBAIC02MjcsMzEgKzYyMCwyMCBAQAogZWNyeXB0ZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKIGludCBlY3J5cHRmc19yZWFkX3hhdHRyX3JlZ2lvbihjaGFyICpwYWdlX3ZpcnQsIHN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGUpOwotaW50IGVjcnlwdGZzX3Byb2Nlc3NfaGVsbyh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0LCB1aWRfdCBldWlkLAotCQkJICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCBwaWQgKnBpZCk7CitpbnQgZWNyeXB0ZnNfcHJvY2Vzc19oZWxvKHVpZF90IGV1aWQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywKKwkJCSAgc3RydWN0IHBpZCAqcGlkKTsKIGludCBlY3J5cHRmc19wcm9jZXNzX3F1aXQodWlkX3QgZXVpZCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLAogCQkJICBzdHJ1Y3QgcGlkICpwaWQpOwogaW50IGVjcnlwdGZzX3Byb2Nlc3NfcmVzcG9uc2Uoc3RydWN0IGVjcnlwdGZzX21lc3NhZ2UgKm1zZywgdWlkX3QgZXVpZCwKIAkJCSAgICAgIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IHBpZCAqcGlkLAogCQkJICAgICAgdTMyIHNlcSk7Ci1pbnQgZWNyeXB0ZnNfc2VuZF9tZXNzYWdlKHVuc2lnbmVkIGludCB0cmFuc3BvcnQsIGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwKK2ludCBlY3J5cHRmc19zZW5kX21lc3NhZ2UoY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLAogCQkJICBzdHJ1Y3QgZWNyeXB0ZnNfbXNnX2N0eCAqKm1zZ19jdHgpOwogaW50IGVjcnlwdGZzX3dhaXRfZm9yX3Jlc3BvbnNlKHN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICptc2dfY3R4LAogCQkJICAgICAgIHN0cnVjdCBlY3J5cHRmc19tZXNzYWdlICoqZW1zZyk7Ci1pbnQgZWNyeXB0ZnNfaW5pdF9tZXNzYWdpbmcodW5zaWduZWQgaW50IHRyYW5zcG9ydCk7Ci12b2lkIGVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHVuc2lnbmVkIGludCB0cmFuc3BvcnQpOworaW50IGVjcnlwdGZzX2luaXRfbWVzc2FnaW5nKHZvaWQpOwordm9pZCBlY3J5cHRmc19yZWxlYXNlX21lc3NhZ2luZyh2b2lkKTsKIAotaW50IGVjcnlwdGZzX3NlbmRfbmV0bGluayhjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCi0JCQkgIHN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICptc2dfY3R4LCB1OCBtc2dfdHlwZSwKLQkJCSAgdTE2IG1zZ19mbGFncywgc3RydWN0IHBpZCAqZGFlbW9uX3BpZCk7Ci1pbnQgZWNyeXB0ZnNfaW5pdF9uZXRsaW5rKHZvaWQpOwotdm9pZCBlY3J5cHRmc19yZWxlYXNlX25ldGxpbmsodm9pZCk7Ci0KLWludCBlY3J5cHRmc19zZW5kX2Nvbm5lY3RvcihjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCi0JCQkgICAgc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKm1zZ19jdHgsIHU4IG1zZ190eXBlLAotCQkJICAgIHUxNiBtc2dfZmxhZ3MsIHN0cnVjdCBwaWQgKmRhZW1vbl9waWQpOwotaW50IGVjcnlwdGZzX2luaXRfY29ubmVjdG9yKHZvaWQpOwotdm9pZCBlY3J5cHRmc19yZWxlYXNlX2Nvbm5lY3Rvcih2b2lkKTsKIHZvaWQKIGVjcnlwdGZzX3dyaXRlX2hlYWRlcl9tZXRhZGF0YShjaGFyICp2aXJ0LAogCQkJICAgICAgIHN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0LApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZmlsZS5jIGIvZnMvZWNyeXB0ZnMvZmlsZS5jCmluZGV4IDkyNDRkNjUuLmViM2RjNGMgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2ZpbGUuYworKysgYi9mcy9lY3J5cHRmcy9maWxlLmMKQEAgLTcxLDEyICs3MSwxMSBAQAogCXZvaWQgKmRpcmVudDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJZmlsbGRpcl90IGZpbGxkaXI7Ci0JaW50IGVycjsKIAlpbnQgZmlsbGRpcl9jYWxsZWQ7CiAJaW50IGVudHJpZXNfd3JpdHRlbjsKIH07CiAKLS8qIEluc3BpcmVkIGJ5IGdlbmVyaWMgZmlsbGRpciBpbiBmcy9yZWFkaXIuYyAqLworLyogSW5zcGlyZWQgYnkgZ2VuZXJpYyBmaWxsZGlyIGluIGZzL3JlYWRkaXIuYyAqLwogc3RhdGljIGludAogZWNyeXB0ZnNfZmlsbGRpcih2b2lkICpkaXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBsb2ZmX3Qgb2Zmc2V0LAogCQkgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKQEAgLTEyNSwxOCArMTI0LDE4IEBACiAJYnVmLmRpcmVudCA9IGRpcmVudDsKIAlidWYuZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlidWYuZmlsbGRpciA9IGZpbGxkaXI7Ci1yZXRyeToKIAlidWYuZmlsbGRpcl9jYWxsZWQgPSAwOwogCWJ1Zi5lbnRyaWVzX3dyaXR0ZW4gPSAwOwotCWJ1Zi5lcnIgPSAwOwogCXJjID0gdmZzX3JlYWRkaXIobG93ZXJfZmlsZSwgZWNyeXB0ZnNfZmlsbGRpciwgKHZvaWQgKikmYnVmKTsKLQlpZiAoYnVmLmVycikKLQkJcmMgPSBidWYuZXJyOwotCWlmIChidWYuZmlsbGRpcl9jYWxsZWQgJiYgIWJ1Zi5lbnRyaWVzX3dyaXR0ZW4pCi0JCWdvdG8gcmV0cnk7CiAJZmlsZS0+Zl9wb3MgPSBsb3dlcl9maWxlLT5mX3BvczsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKwlpZiAoYnVmLmZpbGxkaXJfY2FsbGVkICYmICFidWYuZW50cmllc193cml0dGVuKQorCQlnb3RvIG91dDsKIAlpZiAocmMgPj0gMCkKLQkJZnNzdGFja19jb3B5X2F0dHJfYXRpbWUoaW5vZGUsIGxvd2VyX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCQlmc3N0YWNrX2NvcHlfYXR0cl9hdGltZShpbm9kZSwKKwkJCQkJbG93ZXJfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CitvdXQ6CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jIGIvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYwppbmRleCBmNWI3NmEzLi5lMjJiYzM5IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMKQEAgLTIzNCw4ICsyMzQsOCBAQAogCX0KIAlpICs9IGRhdGFfbGVuOwogCWlmIChtZXNzYWdlX2xlbiA8IChpICsgbV9zaXplKSkgewotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJUaGUgcmVjZWl2ZWQgbmV0bGluayBtZXNzYWdlIGlzICIKLQkJCQkic2hvcnRlciB0aGFuIGV4cGVjdGVkXG4iKTsKKwkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiVGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBlY3J5cHRmc2QgIgorCQkJCSJpcyBzaG9ydGVyIHRoYW4gZXhwZWN0ZWRcbiIpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQzOCw4ICs0MzgsOCBAQAogCXN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICptc2dfY3R4OwogCXN0cnVjdCBlY3J5cHRmc19tZXNzYWdlICptc2cgPSBOVUxMOwogCWNoYXIgKmF1dGhfdG9rX3NpZzsKLQljaGFyICpuZXRsaW5rX21lc3NhZ2U7Ci0Jc2l6ZV90IG5ldGxpbmtfbWVzc2FnZV9sZW5ndGg7CisJY2hhciAqcGF5bG9hZDsKKwlzaXplX3QgcGF5bG9hZF9sZW47CiAJaW50IHJjOwogCiAJcmMgPSBlY3J5cHRmc19nZXRfYXV0aF90b2tfc2lnKCZhdXRoX3Rva19zaWcsIGF1dGhfdG9rKTsKQEAgLTQ0OSwxNSArNDQ5LDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAlyYyA9IHdyaXRlX3RhZ182NF9wYWNrZXQoYXV0aF90b2tfc2lnLCAmKGF1dGhfdG9rLT5zZXNzaW9uX2tleSksCi0JCQkJICZuZXRsaW5rX21lc3NhZ2UsICZuZXRsaW5rX21lc3NhZ2VfbGVuZ3RoKTsKKwkJCQkgJnBheWxvYWQsICZwYXlsb2FkX2xlbik7CiAJaWYgKHJjKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkZhaWxlZCB0byB3cml0ZSB0YWcgNjQgcGFja2V0XG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCXJjID0gZWNyeXB0ZnNfc2VuZF9tZXNzYWdlKGVjcnlwdGZzX3RyYW5zcG9ydCwgbmV0bGlua19tZXNzYWdlLAotCQkJCSAgIG5ldGxpbmtfbWVzc2FnZV9sZW5ndGgsICZtc2dfY3R4KTsKKwlyYyA9IGVjcnlwdGZzX3NlbmRfbWVzc2FnZShwYXlsb2FkLCBwYXlsb2FkX2xlbiwgJm1zZ19jdHgpOwogCWlmIChyYykgewotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBzZW5kaW5nIG5ldGxpbmsgbWVzc2FnZVxuIik7CisJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIHNlbmRpbmcgbWVzc2FnZSB0byAiCisJCQkJImVjcnlwdGZzZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlyYyA9IGVjcnlwdGZzX3dhaXRfZm9yX3Jlc3BvbnNlKG1zZ19jdHgsICZtc2cpOwpAQCAtMTMzMywyMyArMTMzMywyMiBAQAogCQkJc3RydWN0IGVjcnlwdGZzX2tleV9yZWNvcmQgKmtleV9yZWMpCiB7CiAJc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKm1zZ19jdHggPSBOVUxMOwotCWNoYXIgKm5ldGxpbmtfcGF5bG9hZDsKLQlzaXplX3QgbmV0bGlua19wYXlsb2FkX2xlbmd0aDsKKwljaGFyICpwYXlsb2FkID0gTlVMTDsKKwlzaXplX3QgcGF5bG9hZF9sZW47CiAJc3RydWN0IGVjcnlwdGZzX21lc3NhZ2UgKm1zZzsKIAlpbnQgcmM7CiAKIAlyYyA9IHdyaXRlX3RhZ182Nl9wYWNrZXQoYXV0aF90b2stPnRva2VuLnByaXZhdGVfa2V5LnNpZ25hdHVyZSwKIAkJCQkgZWNyeXB0ZnNfY29kZV9mb3JfY2lwaGVyX3N0cmluZyhjcnlwdF9zdGF0KSwKLQkJCQkgY3J5cHRfc3RhdCwgJm5ldGxpbmtfcGF5bG9hZCwKLQkJCQkgJm5ldGxpbmtfcGF5bG9hZF9sZW5ndGgpOworCQkJCSBjcnlwdF9zdGF0LCAmcGF5bG9hZCwgJnBheWxvYWRfbGVuKTsKIAlpZiAocmMpIHsKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRXJyb3IgZ2VuZXJhdGluZyB0YWcgNjYgcGFja2V0XG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCXJjID0gZWNyeXB0ZnNfc2VuZF9tZXNzYWdlKGVjcnlwdGZzX3RyYW5zcG9ydCwgbmV0bGlua19wYXlsb2FkLAotCQkJCSAgIG5ldGxpbmtfcGF5bG9hZF9sZW5ndGgsICZtc2dfY3R4KTsKKwlyYyA9IGVjcnlwdGZzX3NlbmRfbWVzc2FnZShwYXlsb2FkLCBwYXlsb2FkX2xlbiwgJm1zZ19jdHgpOwogCWlmIChyYykgewotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBzZW5kaW5nIG5ldGxpbmsgbWVzc2FnZVxuIik7CisJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIHNlbmRpbmcgbWVzc2FnZSB0byAiCisJCQkJImVjcnlwdGZzZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlyYyA9IGVjcnlwdGZzX3dhaXRfZm9yX3Jlc3BvbnNlKG1zZ19jdHgsICZtc2cpOwpAQCAtMTM2NCw4ICsxMzYzLDcgQEAKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRXJyb3IgcGFyc2luZyB0YWcgNjcgcGFja2V0XG4iKTsKIAlrZnJlZShtc2cpOwogb3V0OgotCWlmIChuZXRsaW5rX3BheWxvYWQpCi0JCWtmcmVlKG5ldGxpbmtfcGF5bG9hZCk7CisJa2ZyZWUocGF5bG9hZCk7CiAJcmV0dXJuIHJjOwogfQogLyoqCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tYWluLmMgYi9mcy9lY3J5cHRmcy9tYWluLmMKaW5kZXggNDQ4ZGZkNS4uMDQ2ZTAyNyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbWFpbi5jCisrKyBiL2ZzL2VjcnlwdGZzL21haW4uYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2tleS5oPgpAQCAtNDksOCArNDgsNyBAQAogCQkgIjAsIHdoaWNoIGlzIFF1aWV0KSIpOwogCiAvKioKLSAqIE1vZHVsZSBwYXJhbWV0ZXIgdGhhdCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgbmV0bGluayBtZXNzYWdlIGJ1ZmZlcgotICogZWxlbWVudHMKKyAqIE1vZHVsZSBwYXJhbWV0ZXIgdGhhdCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgbWVzc2FnZSBidWZmZXIgZWxlbWVudHMKICAqLwogdW5zaWduZWQgaW50IGVjcnlwdGZzX21lc3NhZ2VfYnVmX2xlbiA9IEVDUllQVEZTX0RFRkFVTFRfTVNHX0NUWF9FTEVNUzsKIApAQCAtNjAsOSArNTgsOSBAQAogCiAvKioKICAqIE1vZHVsZSBwYXJhbWV0ZXIgdGhhdCBkZWZpbmVzIHRoZSBtYXhpbXVtIGd1YXJhbnRlZWQgYW1vdW50IG9mIHRpbWUgdG8gd2FpdAotICogZm9yIGEgcmVzcG9uc2UgdGhyb3VnaCBuZXRsaW5rLiAgVGhlIGFjdHVhbCBzbGVlcCB0aW1lIHdpbGwgYmUsIG1vcmUgdGhhbgorICogZm9yIGEgcmVzcG9uc2UgZnJvbSBlY3J5cHRmc2QuICBUaGUgYWN0dWFsIHNsZWVwIHRpbWUgd2lsbCBiZSwgbW9yZSB0aGFuCiAgKiBsaWtlbHksIGEgc21hbGwgYW1vdW50IGdyZWF0ZXIgdGhhbiB0aGlzIHNwZWNpZmllZCB2YWx1ZSwgYnV0IG9ubHkgbGVzcyBpZgotICogdGhlIG5ldGxpbmsgbWVzc2FnZSBzdWNjZXNzZnVsbHkgYXJyaXZlcy4KKyAqIHRoZSBtZXNzYWdlIHN1Y2Nlc3NmdWxseSBhcnJpdmVzLgogICovCiBzaWduZWQgbG9uZyBlY3J5cHRmc19tZXNzYWdlX3dhaXRfdGltZW91dCA9IEVDUllQVEZTX01BWF9NU0dfQ1RYX1RUTCAvIEhaOwogCkBAIC04Myw4ICs4MSw2IEBACiBNT0RVTEVfUEFSTV9ERVNDKGVjcnlwdGZzX251bWJlcl9vZl91c2VycywgIkFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgIgogCQkgImNvbmN1cnJlbnQgdXNlcnMgb2YgZUNyeXB0ZnMiKTsKIAotdW5zaWduZWQgaW50IGVjcnlwdGZzX3RyYW5zcG9ydCA9IEVDUllQVEZTX0RFRkFVTFRfVFJBTlNQT1JUOwotCiB2b2lkIF9fZWNyeXB0ZnNfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKQEAgLTIxMSw3ICsyMDcsNyBAQAogICAgICAgIGVjcnlwdGZzX29wdF9wYXNzdGhyb3VnaCwgZWNyeXB0ZnNfb3B0X3hhdHRyX21ldGFkYXRhLAogICAgICAgIGVjcnlwdGZzX29wdF9lbmNyeXB0ZWRfdmlldywgZWNyeXB0ZnNfb3B0X2VyciB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe2VjcnlwdGZzX29wdF9zaWcsICJzaWc9JXMifSwKIAl7ZWNyeXB0ZnNfb3B0X2VjcnlwdGZzX3NpZywgImVjcnlwdGZzX3NpZz0lcyJ9LAogCXtlY3J5cHRmc19vcHRfY2lwaGVyLCAiY2lwaGVyPSVzIn0sCkBAIC03NzksMTAgKzc3NSwxMSBAQAogCQkgICAgICAgInJjID0gWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAkJZ290byBvdXRfZG9fc3lzZnNfdW5yZWdpc3RyYXRpb247CiAJfQotCXJjID0gZWNyeXB0ZnNfaW5pdF9tZXNzYWdpbmcoZWNyeXB0ZnNfdHJhbnNwb3J0KTsKKwlyYyA9IGVjcnlwdGZzX2luaXRfbWVzc2FnaW5nKCk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbHVyZSBvY2N1cmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gIgotCQkJCSJpbml0aWFsaXplIHRoZSBlQ3J5cHRmcyBuZXRsaW5rIHNvY2tldFxuIik7CisJCQkJImluaXRpYWxpemUgdGhlIGNvbW11bmljYXRpb25zIGNoYW5uZWwgdG8gIgorCQkJCSJlY3J5cHRmc2RcbiIpOwogCQlnb3RvIG91dF9kZXN0cm95X2t0aHJlYWQ7CiAJfQogCXJjID0gZWNyeXB0ZnNfaW5pdF9jcnlwdG8oKTsKQEAgLTc5Nyw3ICs3OTQsNyBAQAogCiAJZ290byBvdXQ7CiBvdXRfcmVsZWFzZV9tZXNzYWdpbmc6Ci0JZWNyeXB0ZnNfcmVsZWFzZV9tZXNzYWdpbmcoZWNyeXB0ZnNfdHJhbnNwb3J0KTsKKwllY3J5cHRmc19yZWxlYXNlX21lc3NhZ2luZygpOwogb3V0X2Rlc3Ryb3lfa3RocmVhZDoKIAllY3J5cHRmc19kZXN0cm95X2t0aHJlYWQoKTsKIG91dF9kb19zeXNmc191bnJlZ2lzdHJhdGlvbjoKQEAgLTgxOCw3ICs4MTUsNyBAQAogCWlmIChyYykKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsdXJlIHdoaWxzdCBhdHRlbXB0aW5nIHRvIGRlc3Ryb3kgY3J5cHRvOyAiCiAJCSAgICAgICAicmMgPSBbJWRdXG4iLCByYyk7Ci0JZWNyeXB0ZnNfcmVsZWFzZV9tZXNzYWdpbmcoZWNyeXB0ZnNfdHJhbnNwb3J0KTsKKwllY3J5cHRmc19yZWxlYXNlX21lc3NhZ2luZygpOwogCWVjcnlwdGZzX2Rlc3Ryb3lfa3RocmVhZCgpOwogCWRvX3N5c2ZzX3VucmVnaXN0cmF0aW9uKCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZlY3J5cHRmc19mc190eXBlKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jIGIvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKaW5kZXggMWI1YzIwMC4uYzY5ODM5NyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKKysrIGIvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKQEAgLTEzNCwxMiArMTM0LDExIEBACiB9CiAKIHN0YXRpYyBpbnQKLWVjcnlwdGZzX3NlbmRfbWVzc2FnZV9sb2NrZWQodW5zaWduZWQgaW50IHRyYW5zcG9ydCwgY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLAotCQkJICAgICB1OCBtc2dfdHlwZSwgc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKiptc2dfY3R4KTsKK2VjcnlwdGZzX3NlbmRfbWVzc2FnZV9sb2NrZWQoY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLCB1OCBtc2dfdHlwZSwKKwkJCSAgICAgc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKiptc2dfY3R4KTsKIAogLyoqCiAgKiBlY3J5cHRmc19zZW5kX3Jhd19tZXNzYWdlCi0gKiBAdHJhbnNwb3J0OiBUcmFuc3BvcnQgdHlwZQogICogQG1zZ190eXBlOiBNZXNzYWdlIHR5cGUKICAqIEBkYWVtb246IERhZW1vbiBzdHJ1Y3QgZm9yIHJlY2lwaWVudCBvZiBtZXNzYWdlCiAgKgpAQCAtMTUwLDM4ICsxNDksMjUgQEAKICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgZWNyeXB0ZnNfc2VuZF9yYXdfbWVzc2FnZSh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0LCB1OCBtc2dfdHlwZSwKK3N0YXRpYyBpbnQgZWNyeXB0ZnNfc2VuZF9yYXdfbWVzc2FnZSh1OCBtc2dfdHlwZSwKIAkJCQkgICAgIHN0cnVjdCBlY3J5cHRmc19kYWVtb24gKmRhZW1vbikKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfbXNnX2N0eCAqbXNnX2N0eDsKIAlpbnQgcmM7CiAKLQlzd2l0Y2godHJhbnNwb3J0KSB7Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfTkVUTElOSzoKLQkJcmMgPSBlY3J5cHRmc19zZW5kX25ldGxpbmsoTlVMTCwgMCwgTlVMTCwgbXNnX3R5cGUsIDAsCi0JCQkJCSAgIGRhZW1vbi0+cGlkKTsKLQkJYnJlYWs7Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfTUlTQ0RFVjoKLQkJcmMgPSBlY3J5cHRmc19zZW5kX21lc3NhZ2VfbG9ja2VkKHRyYW5zcG9ydCwgTlVMTCwgMCwgbXNnX3R5cGUsCi0JCQkJCQkgICZtc2dfY3R4KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciB3aGlsc3QgYXR0ZW1wdGluZyB0byBzZW5kICIKLQkJCSAgICAgICAibWVzc2FnZSB2aWEgcHJvY2ZzOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLCByYyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQkvKiBSYXcgbWVzc2FnZXMgYXJlIGxvZ2ljYWxseSBjb250ZXh0LWZyZWUgKGUuZy4sIG5vCi0JCSAqIHJlcGx5IGlzIGV4cGVjdGVkKSwgc28gd2Ugc2V0IHRoZSBzdGF0ZSBvZiB0aGUKLQkJICogZWNyeXB0ZnNfbXNnX2N0eCBvYmplY3QgdG8gaW5kaWNhdGUgdGhhdCBpdCBzaG91bGQKLQkJICogYmUgZnJlZWQgYXMgc29vbiBhcyB0aGUgdHJhbnNwb3J0IHNlbmRzIG91dCB0aGUgbWVzc2FnZS4gKi8KLQkJbXV0ZXhfbG9jaygmbXNnX2N0eC0+bXV4KTsKLQkJbXNnX2N0eC0+c3RhdGUgPSBFQ1JZUFRGU19NU0dfQ1RYX1NUQVRFX05PX1JFUExZOwotCQltdXRleF91bmxvY2soJm1zZ19jdHgtPm11eCk7Ci0JCWJyZWFrOwotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX0NPTk5FQ1RPUjoKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9SRUxBWUZTOgotCWRlZmF1bHQ6Ci0JCXJjID0gLUVOT1NZUzsKKwlyYyA9IGVjcnlwdGZzX3NlbmRfbWVzc2FnZV9sb2NrZWQoTlVMTCwgMCwgbXNnX3R5cGUsICZtc2dfY3R4KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3Igd2hpbHN0IGF0dGVtcHRpbmcgdG8gc2VuZCAiCisJCSAgICAgICAibWVzc2FnZSB0byBlY3J5cHRmc2Q7IHJjID0gWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKKwkJZ290byBvdXQ7CiAJfQorCS8qIFJhdyBtZXNzYWdlcyBhcmUgbG9naWNhbGx5IGNvbnRleHQtZnJlZSAoZS5nLiwgbm8KKwkgKiByZXBseSBpcyBleHBlY3RlZCksIHNvIHdlIHNldCB0aGUgc3RhdGUgb2YgdGhlCisJICogZWNyeXB0ZnNfbXNnX2N0eCBvYmplY3QgdG8gaW5kaWNhdGUgdGhhdCBpdCBzaG91bGQKKwkgKiBiZSBmcmVlZCBhcyBzb29uIGFzIHRoZSBtZXNzYWdlIGlzIHNlbnQuICovCisJbXV0ZXhfbG9jaygmbXNnX2N0eC0+bXV4KTsKKwltc2dfY3R4LT5zdGF0ZSA9IEVDUllQVEZTX01TR19DVFhfU1RBVEVfTk9fUkVQTFk7CisJbXV0ZXhfdW5sb2NrKCZtc2dfY3R4LT5tdXgpOwogb3V0OgogCXJldHVybiByYzsKIH0KQEAgLTIyNyw3ICsyMTMsNiBAQAogCiAvKioKICAqIGVjcnlwdGZzX3Byb2Nlc3NfaGVsbwotICogQHRyYW5zcG9ydDogVGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IChuZXRsaW5rLCBldGMuKQogICogQGV1aWQ6IFRoZSB1c2VyIElEIG93bmVyIG9mIHRoZSBtZXNzYWdlCiAgKiBAdXNlcl9uczogVGhlIG5hbWVzcGFjZSBpbiB3aGljaCBAZXVpZCBhcHBsaWVzCiAgKiBAcGlkOiBUaGUgcHJvY2VzcyBJRCBmb3IgdGhlIHVzZXJzcGFjZSBwcm9ncmFtIHRoYXQgc2VudCB0aGUKQEAgLTIzOSw4ICsyMjQsOCBAQAogICogUmV0dXJucyB6ZXJvIGFmdGVyIGFkZGluZyBhIG5ldyBkYWVtb24gdG8gdGhlIGhhc2ggbGlzdDsKICAqIG5vbi16ZXJvIG90aGVyd2lzZS4KICAqLwotaW50IGVjcnlwdGZzX3Byb2Nlc3NfaGVsbyh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0LCB1aWRfdCBldWlkLAotCQkJICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCBwaWQgKnBpZCkKK2ludCBlY3J5cHRmc19wcm9jZXNzX2hlbG8odWlkX3QgZXVpZCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLAorCQkJICBzdHJ1Y3QgcGlkICpwaWQpCiB7CiAJc3RydWN0IGVjcnlwdGZzX2RhZW1vbiAqbmV3X2RhZW1vbjsKIAlzdHJ1Y3QgZWNyeXB0ZnNfZGFlbW9uICpvbGRfZGFlbW9uOwpAQCAtMjUyLDggKzIzNyw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJlY2VpdmVkIHJlcXVlc3QgZnJvbSB1c2VyIFslZF0gIgogCQkgICAgICAgInRvIHJlZ2lzdGVyIGRhZW1vbiBbMHglcF07IHVucmVnaXN0ZXJpbmcgZGFlbW9uICIKIAkJICAgICAgICJbMHglcF1cbiIsIGV1aWQsIHBpZCwgb2xkX2RhZW1vbi0+cGlkKTsKLQkJcmMgPSBlY3J5cHRmc19zZW5kX3Jhd19tZXNzYWdlKHRyYW5zcG9ydCwgRUNSWVBURlNfTVNHX1FVSVQsCi0JCQkJCSAgICAgICBvbGRfZGFlbW9uKTsKKwkJcmMgPSBlY3J5cHRmc19zZW5kX3Jhd19tZXNzYWdlKEVDUllQVEZTX01TR19RVUlULCBvbGRfZGFlbW9uKTsKIAkJaWYgKHJjKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHNlbmQgUVVJVCAiCiAJCQkgICAgICAgIm1lc3NhZ2UgdG8gZGFlbW9uIFsweCVwXTsgcmMgPSBbJWRdXG4iLApAQCAtNDY3LDggKzQ1MSw2IEBACiAKIC8qKgogICogZWNyeXB0ZnNfc2VuZF9tZXNzYWdlX2xvY2tlZAotICogQHRyYW5zcG9ydDogVGhlIHRyYW5zcG9ydCBvdmVyIHdoaWNoIHRvIHNlbmQgdGhlIG1lc3NhZ2UgKGkuZS4sCi0gKiAgICAgICAgICAgICBuZXRsaW5rKQogICogQGRhdGE6IFRoZSBkYXRhIHRvIHNlbmQKICAqIEBkYXRhX2xlbjogVGhlIGxlbmd0aCBvZiBkYXRhCiAgKiBAbXNnX2N0eDogVGhlIG1lc3NhZ2UgY29udGV4dCBhbGxvY2F0ZWQgZm9yIHRoZSBzZW5kCkBAIC00NzgsOCArNDYwLDggQEAKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBub24temVybyBvdGhlcndpc2UKICAqLwogc3RhdGljIGludAotZWNyeXB0ZnNfc2VuZF9tZXNzYWdlX2xvY2tlZCh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0LCBjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCi0JCQkgICAgIHU4IG1zZ190eXBlLCBzdHJ1Y3QgZWNyeXB0ZnNfbXNnX2N0eCAqKm1zZ19jdHgpCitlY3J5cHRmc19zZW5kX21lc3NhZ2VfbG9ja2VkKGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwgdTggbXNnX3R5cGUsCisJCQkgICAgIHN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICoqbXNnX2N0eCkKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfZGFlbW9uICpkYWVtb247CiAJaW50IHJjOwpAQCAtNTAzLDIwICs0ODUsOCBAQAogCWVjcnlwdGZzX21zZ19jdHhfZnJlZV90b19hbGxvYygqbXNnX2N0eCk7CiAJbXV0ZXhfdW5sb2NrKCYoKm1zZ19jdHgpLT5tdXgpOwogCW11dGV4X3VubG9jaygmZWNyeXB0ZnNfbXNnX2N0eF9saXN0c19tdXgpOwotCXN3aXRjaCAodHJhbnNwb3J0KSB7Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfTkVUTElOSzoKLQkJcmMgPSBlY3J5cHRmc19zZW5kX25ldGxpbmsoZGF0YSwgZGF0YV9sZW4sICptc2dfY3R4LCBtc2dfdHlwZSwKLQkJCQkJICAgMCwgZGFlbW9uLT5waWQpOwotCQlicmVhazsKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9NSVNDREVWOgotCQlyYyA9IGVjcnlwdGZzX3NlbmRfbWlzY2RldihkYXRhLCBkYXRhX2xlbiwgKm1zZ19jdHgsIG1zZ190eXBlLAotCQkJCQkgICAwLCBkYWVtb24pOwotCQlicmVhazsKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9DT05ORUNUT1I6Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfUkVMQVlGUzoKLQlkZWZhdWx0OgotCQlyYyA9IC1FTk9TWVM7Ci0JfQorCXJjID0gZWNyeXB0ZnNfc2VuZF9taXNjZGV2KGRhdGEsIGRhdGFfbGVuLCAqbXNnX2N0eCwgbXNnX3R5cGUsIDAsCisJCQkJICAgZGFlbW9uKTsKIAlpZiAocmMpCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGF0dGVtcHRpbmcgdG8gc2VuZCBtZXNzYWdlIHRvICIKIAkJICAgICAgICJ1c2Vyc3BhY2UgZGFlbW9uOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLCByYyk7CkBAIC01MjYsOCArNDk2LDYgQEAKIAogLyoqCiAgKiBlY3J5cHRmc19zZW5kX21lc3NhZ2UKLSAqIEB0cmFuc3BvcnQ6IFRoZSB0cmFuc3BvcnQgb3ZlciB3aGljaCB0byBzZW5kIHRoZSBtZXNzYWdlIChpLmUuLAotICogICAgICAgICAgICAgbmV0bGluaykKICAqIEBkYXRhOiBUaGUgZGF0YSB0byBzZW5kCiAgKiBAZGF0YV9sZW46IFRoZSBsZW5ndGggb2YgZGF0YQogICogQG1zZ19jdHg6IFRoZSBtZXNzYWdlIGNvbnRleHQgYWxsb2NhdGVkIGZvciB0aGUgc2VuZApAQCAtNTM2LDE0ICs1MDQsMTQgQEAKICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCiAgKi8KLWludCBlY3J5cHRmc19zZW5kX21lc3NhZ2UodW5zaWduZWQgaW50IHRyYW5zcG9ydCwgY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLAoraW50IGVjcnlwdGZzX3NlbmRfbWVzc2FnZShjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCiAJCQkgIHN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICoqbXNnX2N0eCkKIHsKIAlpbnQgcmM7CiAKIAltdXRleF9sb2NrKCZlY3J5cHRmc19kYWVtb25faGFzaF9tdXgpOwotCXJjID0gZWNyeXB0ZnNfc2VuZF9tZXNzYWdlX2xvY2tlZCh0cmFuc3BvcnQsIGRhdGEsIGRhdGFfbGVuLAotCQkJCQkgIEVDUllQVEZTX01TR19SRVFVRVNULCBtc2dfY3R4KTsKKwlyYyA9IGVjcnlwdGZzX3NlbmRfbWVzc2FnZV9sb2NrZWQoZGF0YSwgZGF0YV9sZW4sIEVDUllQVEZTX01TR19SRVFVRVNULAorCQkJCQkgIG1zZ19jdHgpOwogCW11dGV4X3VubG9jaygmZWNyeXB0ZnNfZGFlbW9uX2hhc2hfbXV4KTsKIAlyZXR1cm4gcmM7CiB9CkBAIC01ODYsNyArNTU0LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBlY3J5cHRmc19pbml0X21lc3NhZ2luZyh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0KQoraW50IGVjcnlwdGZzX2luaXRfbWVzc2FnaW5nKHZvaWQpCiB7CiAJaW50IGk7CiAJaW50IHJjID0gMDsKQEAgLTYzOSwyNyArNjA3LDE0IEBACiAJCW11dGV4X3VubG9jaygmZWNyeXB0ZnNfbXNnX2N0eF9hcnJbaV0ubXV4KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZlY3J5cHRmc19tc2dfY3R4X2xpc3RzX211eCk7Ci0Jc3dpdGNoKHRyYW5zcG9ydCkgewotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX05FVExJTks6Ci0JCXJjID0gZWNyeXB0ZnNfaW5pdF9uZXRsaW5rKCk7Ci0JCWlmIChyYykKLQkJCWVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHRyYW5zcG9ydCk7Ci0JCWJyZWFrOwotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX01JU0NERVY6Ci0JCXJjID0gZWNyeXB0ZnNfaW5pdF9lY3J5cHRmc19taXNjZGV2KCk7Ci0JCWlmIChyYykKLQkJCWVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHRyYW5zcG9ydCk7Ci0JCWJyZWFrOwotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX0NPTk5FQ1RPUjoKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9SRUxBWUZTOgotCWRlZmF1bHQ6Ci0JCXJjID0gLUVOT1NZUzsKLQl9CisJcmMgPSBlY3J5cHRmc19pbml0X2VjcnlwdGZzX21pc2NkZXYoKTsKKwlpZiAocmMpCisJCWVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKCk7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQogCi12b2lkIGVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHVuc2lnbmVkIGludCB0cmFuc3BvcnQpCit2b2lkIGVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHZvaWQpCiB7CiAJaWYgKGVjcnlwdGZzX21zZ19jdHhfYXJyKSB7CiAJCWludCBpOwpAQCAtNjk4LDE3ICs2NTMsNiBAQAogCQlrZnJlZShlY3J5cHRmc19kYWVtb25faGFzaCk7CiAJCW11dGV4X3VubG9jaygmZWNyeXB0ZnNfZGFlbW9uX2hhc2hfbXV4KTsKIAl9Ci0Jc3dpdGNoKHRyYW5zcG9ydCkgewotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX05FVExJTks6Ci0JCWVjcnlwdGZzX3JlbGVhc2VfbmV0bGluaygpOwotCQlicmVhazsKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9NSVNDREVWOgotCQllY3J5cHRmc19kZXN0cm95X2VjcnlwdGZzX21pc2NkZXYoKTsKLQkJYnJlYWs7Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfQ09OTkVDVE9SOgotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX1JFTEFZRlM6Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQorCWVjcnlwdGZzX2Rlc3Ryb3lfZWNyeXB0ZnNfbWlzY2RldigpOwogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21tYXAuYyBiL2ZzL2VjcnlwdGZzL21tYXAuYwppbmRleCAyNDVjMmRjLi4wNGQ3YjNmIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tbWFwLmMKKysrIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCkBAIC0yNjUsMjIgKzI2NSwzNCBAQAogfQogCiAvKioKLSAqIGVjcnlwdGZzX3ByZXBhcmVfd3JpdGUKKyAqIGVjcnlwdGZzX3dyaXRlX2JlZ2luCiAgKiBAZmlsZTogVGhlIGVDcnlwdGZzIGZpbGUKLSAqIEBwYWdlOiBUaGUgZUNyeXB0ZnMgcGFnZQotICogQGZyb206IFRoZSBzdGFydCBieXRlIGZyb20gd2hpY2ggd2Ugd2lsbCB3cml0ZQotICogQHRvOiBUaGUgZW5kIGJ5dGUgdG8gd2hpY2ggd2Ugd2lsbCB3cml0ZQorICogQG1hcHBpbmc6IFRoZSBlQ3J5cHRmcyBvYmplY3QKKyAqIEBwb3M6IFRoZSBmaWxlIG9mZnNldCBhdCB3aGljaCB0byBzdGFydCB3cml0aW5nCisgKiBAbGVuOiBMZW5ndGggb2YgdGhlIHdyaXRlCisgKiBAZmxhZ3M6IFZhcmlvdXMgZmxhZ3MKKyAqIEBwYWdlcDogUG9pbnRlciB0byByZXR1cm4gdGhlIHBhZ2UKKyAqIEBmc2RhdGE6IFBvaW50ZXIgdG8gcmV0dXJuIGZzIGRhdGEgKHVudXNlZCkKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgemVybyBhbnkgaG9sZSB3ZSBjcmVhdGUKICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgZWNyeXB0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJICB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKK3N0YXRpYyBpbnQgZWNyeXB0ZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsCisJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCisJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQogeworCXBnb2ZmX3QgaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlsb2ZmX3QgcHJldl9wYWdlX2VuZF9zaXplOwogCWludCByYyA9IDA7CiAKKwlwYWdlID0gX19ncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgpOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJKnBhZ2VwID0gcGFnZTsKKwogCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CiAJCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0ID0KIAkJCSZlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKApAQCAtMjg5LDggKzMwMSw3IEBACiAJCWlmICghKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfRU5DUllQVEVEKQogCQkgICAgfHwgKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfTkVXX0ZJTEUpKSB7CiAJCQlyYyA9IGVjcnlwdGZzX3JlYWRfbG93ZXJfcGFnZV9zZWdtZW50KAotCQkJCXBhZ2UsIHBhZ2UtPmluZGV4LCAwLCBQQUdFX0NBQ0hFX1NJWkUsCi0JCQkJcGFnZS0+bWFwcGluZy0+aG9zdCk7CisJCQkJcGFnZSwgaW5kZXgsIDAsIFBBR0VfQ0FDSEVfU0laRSwgbWFwcGluZy0+aG9zdCk7CiAJCQlpZiAocmMpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBhdHRlbXBpbmcgdG8gcmVhZCAiCiAJCQkJICAgICAgICJsb3dlciBwYWdlIHNlZ21lbnQ7IHJjID0gWyVkXVxuIiwKQEAgLTMxNiw4ICszMjcsOCBAQAogCQkJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJCX0gZWxzZSB7CiAJCQkJcmMgPSBlY3J5cHRmc19yZWFkX2xvd2VyX3BhZ2Vfc2VnbWVudCgKLQkJCQkJcGFnZSwgcGFnZS0+aW5kZXgsIDAsIFBBR0VfQ0FDSEVfU0laRSwKLQkJCQkJcGFnZS0+bWFwcGluZy0+aG9zdCk7CisJCQkJCXBhZ2UsIGluZGV4LCAwLCBQQUdFX0NBQ0hFX1NJWkUsCisJCQkJCW1hcHBpbmctPmhvc3QpOwogCQkJCWlmIChyYykgewogCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciByZWFkaW5nICIKIAkJCQkJICAgICAgICJwYWdlOyByYyA9IFslZF1cbiIsCkBAIC0zMzksMTAgKzM1MCwxMCBAQAogCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCQl9CiAJfQotCXByZXZfcGFnZV9lbmRfc2l6ZSA9ICgobG9mZl90KXBhZ2UtPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpOworCXByZXZfcGFnZV9lbmRfc2l6ZSA9ICgobG9mZl90KWluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpOwogCS8qIElmIGNyZWF0aW5nIGEgcGFnZSBvciBtb3JlIG9mIGhvbGVzLCB6ZXJvIHRoZW0gb3V0IHZpYSB0cnVuY2F0ZS4KIAkgKiBOb3RlLCB0aGlzIHdpbGwgaW5jcmVhc2UgaV9zaXplLiAqLwotCWlmIChwYWdlLT5pbmRleCAhPSAwKSB7CisJaWYgKGluZGV4ICE9IDApIHsKIAkJaWYgKHByZXZfcGFnZV9lbmRfc2l6ZSA+IGlfc2l6ZV9yZWFkKHBhZ2UtPm1hcHBpbmctPmhvc3QpKSB7CiAJCQlyYyA9IGVjcnlwdGZzX3RydW5jYXRlKGZpbGUtPmZfcGF0aC5kZW50cnksCiAJCQkJCSAgICAgICBwcmV2X3BhZ2VfZW5kX3NpemUpOwpAQCAtMzU3LDggKzM2OCw4IEBACiAJfQogCS8qIFdyaXRpbmcgdG8gYSBuZXcgcGFnZSwgYW5kIGNyZWF0aW5nIGEgc21hbGwgaG9sZSBmcm9tIHN0YXJ0CiAJICogb2YgcGFnZT8gIFplcm8gaXQgb3V0LiAqLwotCWlmICgoaV9zaXplX3JlYWQocGFnZS0+bWFwcGluZy0+aG9zdCkgPT0gcHJldl9wYWdlX2VuZF9zaXplKQotCSAgICAmJiAoZnJvbSAhPSAwKSkKKwlpZiAoKGlfc2l6ZV9yZWFkKG1hcHBpbmctPmhvc3QpID09IHByZXZfcGFnZV9lbmRfc2l6ZSkKKwkgICAgJiYgKHBvcyAhPSAwKSkKIAkJemVyb191c2VyKHBhZ2UsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtNDQ1LDIxICs0NTYsMjggQEAKIH0KIAogLyoqCi0gKiBlY3J5cHRmc19jb21taXRfd3JpdGUKKyAqIGVjcnlwdGZzX3dyaXRlX2VuZAogICogQGZpbGU6IFRoZSBlQ3J5cHRmcyBmaWxlIG9iamVjdAorICogQG1hcHBpbmc6IFRoZSBlQ3J5cHRmcyBvYmplY3QKKyAqIEBwb3M6IFRoZSBmaWxlIHBvc2l0aW9uCisgKiBAbGVuOiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhICh1bnVzZWQpCisgKiBAY29waWVkOiBUaGUgYW1vdW50IG9mIGRhdGEgY29waWVkCiAgKiBAcGFnZTogVGhlIGVDcnlwdGZzIHBhZ2UKLSAqIEBmcm9tOiBJZ25vcmVkICh3ZSByb3RhdGUgdGhlIHBhZ2UgSVYgb24gZWFjaCB3cml0ZSkKLSAqIEB0bzogSWdub3JlZAorICogQGZzZGF0YTogVGhlIGZzZGF0YSAodW51c2VkKQogICoKICAqIFRoaXMgaXMgd2hlcmUgd2UgZW5jcnlwdCB0aGUgZGF0YSBhbmQgcGFzcyB0aGUgZW5jcnlwdGVkIGRhdGEgdG8KICAqIHRoZSBsb3dlciBmaWxlc3lzdGVtLiAgSW4gT3BlblBHUC1jb21wYXRpYmxlIG1vZGUsIHdlIG9wZXJhdGUgb24KICAqIGVudGlyZSB1bmRlcmx5aW5nIHBhY2tldHMuCiAgKi8KLXN0YXRpYyBpbnQgZWNyeXB0ZnNfY29tbWl0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCitzdGF0aWMgaW50IGVjcnlwdGZzX3dyaXRlX2VuZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqZnNkYXRhKQogewotCWxvZmZfdCBwb3M7Ci0Jc3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJcGdvZmZfdCBpbmRleCA9IHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOworCXVuc2lnbmVkIGZyb20gPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJdW5zaWduZWQgdG8gPSBmcm9tICsgY29waWVkOworCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwogCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0ID0KIAkJJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmNyeXB0X3N0YXQ7CiAJaW50IHJjOwpAQCAtNDcxLDI1ICs0ODksMjIgQEAKIAl9IGVsc2UKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICJOb3QgYSBuZXcgZmlsZVxuIik7CiAJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICJDYWxsaW5nIGZpbGxfemVyb3NfdG9fZW5kX29mX3BhZ2UiCi0JCQkiKHBhZ2Ugdy8gaW5kZXggPSBbMHglLjE2eF0sIHRvID0gWyVkXSlcbiIsIHBhZ2UtPmluZGV4LAotCQkJdG8pOworCQkJIihwYWdlIHcvIGluZGV4ID0gWzB4JS4xNnhdLCB0byA9IFslZF0pXG4iLCBpbmRleCwgdG8pOwogCS8qIEZpbGxzIGluIHplcm9zIGlmICd0bycgZ29lcyBiZXlvbmQgaW5vZGUgc2l6ZSAqLwogCXJjID0gZmlsbF96ZXJvc190b19lbmRfb2ZfcGFnZShwYWdlLCB0byk7CiAJaWYgKHJjKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJFcnJvciBhdHRlbXB0aW5nIHRvIGZpbGwgIgotCQkJCSJ6ZXJvcyBpbiBwYWdlIHdpdGggaW5kZXggPSBbMHglLjE2eF1cbiIsCi0JCQkJcGFnZS0+aW5kZXgpOworCQkJInplcm9zIGluIHBhZ2Ugd2l0aCBpbmRleCA9IFsweCUuMTZ4XVxuIiwgaW5kZXgpOwogCQlnb3RvIG91dDsKIAl9CiAJcmMgPSBlY3J5cHRmc19lbmNyeXB0X3BhZ2UocGFnZSk7CiAJaWYgKHJjKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJFcnJvciBlbmNyeXB0aW5nIHBhZ2UgKHVwcGVyICIKLQkJCQkiaW5kZXggWzB4JS4xNnhdKVxuIiwgcGFnZS0+aW5kZXgpOworCQkJCSJpbmRleCBbMHglLjE2eF0pXG4iLCBpbmRleCk7CiAJCWdvdG8gb3V0OwogCX0KLQlwb3MgPSAoKChsb2ZmX3QpcGFnZS0+aW5kZXgpIDw8IFBBR0VfQ0FDSEVfU0hJRlQpICsgdG87Ci0JaWYgKHBvcyA+IGlfc2l6ZV9yZWFkKGVjcnlwdGZzX2lub2RlKSkgewotCQlpX3NpemVfd3JpdGUoZWNyeXB0ZnNfaW5vZGUsIHBvcyk7CisJaWYgKHBvcyArIGNvcGllZCA+IGlfc2l6ZV9yZWFkKGVjcnlwdGZzX2lub2RlKSkgeworCQlpX3NpemVfd3JpdGUoZWNyeXB0ZnNfaW5vZGUsIHBvcyArIGNvcGllZCk7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0RFQlVHLCAiRXhwYW5kZWQgZmlsZSBzaXplIHRvICIKIAkJCQkiWzB4JS4xNnhdXG4iLCBpX3NpemVfcmVhZChlY3J5cHRmc19pbm9kZSkpOwogCX0KQEAgLTQ5Nyw3ICs1MTIsMTEgQEAKIAlpZiAocmMpCiAJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd3JpdGluZyBpbm9kZSBzaXplIHRvIG1ldGFkYXRhOyAiCiAJCSAgICAgICAicmMgPSBbJWRdXG4iLCByYyk7CisJZWxzZQorCQlyYyA9IGNvcGllZDsKIG91dDoKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01MTgsNyArNTM3LDcgQEAKIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZWNyeXB0ZnNfYW9wcyA9IHsKIAkud3JpdGVwYWdlID0gZWNyeXB0ZnNfd3JpdGVwYWdlLAogCS5yZWFkcGFnZSA9IGVjcnlwdGZzX3JlYWRwYWdlLAotCS5wcmVwYXJlX3dyaXRlID0gZWNyeXB0ZnNfcHJlcGFyZV93cml0ZSwKLQkuY29tbWl0X3dyaXRlID0gZWNyeXB0ZnNfY29tbWl0X3dyaXRlLAorCS53cml0ZV9iZWdpbiA9IGVjcnlwdGZzX3dyaXRlX2JlZ2luLAorCS53cml0ZV9lbmQgPSBlY3J5cHRmc193cml0ZV9lbmQsCiAJLmJtYXAgPSBlY3J5cHRmc19ibWFwLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL25ldGxpbmsuYyBiL2ZzL2VjcnlwdGZzL25ldGxpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBhYmFkNi4uMDAwMDAwMAotLS0gYS9mcy9lY3J5cHRmcy9uZXRsaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoqCi0gKiBlQ3J5cHRmczogTGludXggZmlsZXN5c3RlbSBlbmNyeXB0aW9uIGxheWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3JwLgotICogICBBdXRob3Iocyk6IE1pY2hhZWwgQS4gSGFsY3JvdyA8bWhhbGNyb3dAdXMuaWJtLmNvbT4KLSAqCQlUeWxlciBIaWNrcyA8dHloaWNrc0BvdS5lZHU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgotICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCi0gKiAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaGFzaC5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgImVjcnlwdGZzX2tlcm5lbC5oIgotCi1zdGF0aWMgc3RydWN0IHNvY2sgKmVjcnlwdGZzX25sX3NvY2s7Ci0KLS8qKgotICogZWNyeXB0ZnNfc2VuZF9uZXRsaW5rCi0gKiBAZGF0YTogVGhlIGRhdGEgdG8gaW5jbHVkZSBhcyB0aGUgcGF5bG9hZAotICogQGRhdGFfbGVuOiBUaGUgYnl0ZSBjb3VudCBvZiB0aGUgZGF0YQotICogQG1zZ19jdHg6IFRoZSBuZXRsaW5rIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gaGFuZGxlIHRoZQotICogICAgICAgICAgcmVzcG9uc2UgbWVzc2FnZQotICogQG1zZ190eXBlOiBUaGUgdHlwZSBvZiBuZXRsaW5rIG1lc3NhZ2UgdG8gc2VuZAotICogQG1zZ19mbGFnczogVGhlIGZsYWdzIHRvIGluY2x1ZGUgaW4gdGhlIG5ldGxpbmsgaGVhZGVyCi0gKiBAZGFlbW9uX3BpZDogVGhlIHByb2Nlc3MgaWQgb2YgdGhlIGRhZW1vbiB0byBzZW5kIHRoZSBtZXNzYWdlIHRvCi0gKgotICogU2VuZHMgdGhlIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBkYWVtb24gcGlkIGFuZCB1c2VzIHRoZSBuZXRsaW5rCi0gKiBjb250ZXh0IGVsZW1lbnQgdG8gc3RvcmUgdGhlIGRhdGEgbmVlZGVkIGZvciB2YWxpZGF0aW9uIHVwb24KLSAqIHJlY2VpdmluZyB0aGUgcmVzcG9uc2UuICBUaGUgZGF0YSBhbmQgdGhlIG5ldGxpbmsgY29udGV4dCBjYW4gYmUKLSAqIG51bGwgaWYganVzdCBzZW5kaW5nIGEgbmV0bGluayBoZWFkZXIgaXMgc3VmZmljaWVudC4gIFJldHVybnMgemVybwotICogdXBvbiBzZW5kaW5nIHRoZSBtZXNzYWdlOyBub24temVybyB1cG9uIGVycm9yLgotICovCi1pbnQgZWNyeXB0ZnNfc2VuZF9uZXRsaW5rKGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwKLQkJCSAgc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKm1zZ19jdHgsIHU4IG1zZ190eXBlLAotCQkJICB1MTYgbXNnX2ZsYWdzLCBzdHJ1Y3QgcGlkICpkYWVtb25fcGlkKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IG5sbXNnaGRyICpubGg7Ci0Jc3RydWN0IGVjcnlwdGZzX21lc3NhZ2UgKm1zZzsKLQlzaXplX3QgcGF5bG9hZF9sZW47Ci0JaW50IHJjOwotCi0JcGF5bG9hZF9sZW4gPSAoKGRhdGEgJiYgZGF0YV9sZW4pID8gKHNpemVvZigqbXNnKSArIGRhdGFfbGVuKSA6IDApOwotCXNrYiA9IGFsbG9jX3NrYihOTE1TR19TUEFDRShwYXlsb2FkX2xlbiksIEdGUF9LRVJORUwpOwotCWlmICghc2tiKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNvY2tldCBidWZmZXJcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JbmxoID0gTkxNU0dfUFVUKHNrYiwgcGlkX25yKGRhZW1vbl9waWQpLCBtc2dfY3R4ID8gbXNnX2N0eC0+Y291bnRlciA6IDAsCi0JCQltc2dfdHlwZSwgcGF5bG9hZF9sZW4pOwotCW5saC0+bmxtc2dfZmxhZ3MgPSBtc2dfZmxhZ3M7Ci0JaWYgKG1zZ19jdHggJiYgcGF5bG9hZF9sZW4pIHsKLQkJbXNnID0gKHN0cnVjdCBlY3J5cHRmc19tZXNzYWdlICopTkxNU0dfREFUQShubGgpOwotCQltc2ctPmluZGV4ID0gbXNnX2N0eC0+aW5kZXg7Ci0JCW1zZy0+ZGF0YV9sZW4gPSBkYXRhX2xlbjsKLQkJbWVtY3B5KG1zZy0+ZGF0YSwgZGF0YSwgZGF0YV9sZW4pOwotCX0KLQlyYyA9IG5ldGxpbmtfdW5pY2FzdChlY3J5cHRmc19ubF9zb2NrLCBza2IsIHBpZF9ucihkYWVtb25fcGlkKSwgMCk7Ci0JaWYgKHJjIDwgMCkgewotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJGYWlsZWQgdG8gc2VuZCBlQ3J5cHRmcyBuZXRsaW5rICIKLQkJCQkibWVzc2FnZTsgcmMgPSBbJWRdXG4iLCByYyk7Ci0JCWdvdG8gb3V0OwotCX0KLQlyYyA9IDA7Ci0JZ290byBvdXQ7Ci1ubG1zZ19mYWlsdXJlOgotCXJjID0gLUVNU0dTSVpFOwotCWtmcmVlX3NrYihza2IpOwotb3V0OgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBlY3J5cHRmc19wcm9jZXNzX25sX3JlcG9uc2UKLSAqIEBza2I6IFRoZSBzb2NrZXQgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG5ldGxpbmsgbWVzc2FnZSBvZiBzdGF0ZQotICogICAgICAgUkVTUE9OU0UKLSAqCi0gKiBQcm9jZXNzZXMgYSByZXNwb25zZSBtZXNzYWdlIGFmdGVyIHNlbmRpbmcgYSBvcGVyYXRpb24gcmVxdWVzdCB0bwotICogdXNlcnNwYWNlLiAgQXR0ZW1wdHMgdG8gYXNzaWduIHRoZSBtc2cgdG8gYSBuZXRsaW5rIGNvbnRleHQgZWxlbWVudAotICogYXQgdGhlIGluZGV4IHNwZWNpZmllZCBpbiB0aGUgbXNnLiAgVGhlIHNrX2J1ZmYgYW5kIG5sbXNnaGRyIG11c3QKLSAqIGJlIHZhbGlkYXRlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbi4gUmV0dXJucyB6ZXJvIHVwb24gZGVsaXZlcnkgdG8KLSAqIGRlc2lyZWQgY29udGV4dCBlbGVtZW50OyBub24temVybyB1cG9uIGRlbGl2ZXJ5IGZhaWx1cmUgb3IgZXJyb3IuCi0gKi8KLXN0YXRpYyBpbnQgZWNyeXB0ZnNfcHJvY2Vzc19ubF9yZXNwb25zZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBubG1zZ2hkciAqbmxoID0gbmxtc2dfaGRyKHNrYik7Ci0Jc3RydWN0IGVjcnlwdGZzX21lc3NhZ2UgKm1zZyA9IE5MTVNHX0RBVEEobmxoKTsKLQlzdHJ1Y3QgcGlkICpwaWQ7Ci0JaW50IHJjOwotCi0JaWYgKHNrYi0+bGVuIC0gTkxNU0dfSERSTEVOIC0gc2l6ZW9mKCptc2cpICE9IG1zZy0+ZGF0YV9sZW4pIHsKLQkJcmMgPSAtRUlOVkFMOwotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJSZWNlaXZlZCBuZXRsaW5rIG1lc3NhZ2Ugd2l0aCAiCi0JCQkJImluY29ycmVjdGx5IHNwZWNpZmllZCBkYXRhIGxlbmd0aFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQlwaWQgPSBmaW5kX2dldF9waWQoTkVUTElOS19DUkVEUyhza2IpLT5waWQpOwotCXJjID0gZWNyeXB0ZnNfcHJvY2Vzc19yZXNwb25zZShtc2csIE5FVExJTktfQ1JFRFMoc2tiKS0+dWlkLCBOVUxMLAotCQkJCSAgICAgICBwaWQsIG5saC0+bmxtc2dfc2VxKTsKLQlwdXRfcGlkKHBpZCk7Ci0JaWYgKHJjKQotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJFcnJvciBwcm9jZXNzaW5nIHJlc3BvbnNlIG1lc3NhZ2U7IHJjID0gWyVkXVxuIiwgcmMpOwotb3V0OgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBlY3J5cHRmc19wcm9jZXNzX25sX2hlbG8KLSAqIEBza2I6IFRoZSBzb2NrZXQgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG5sbXNnaGRyIGluIEhFTE8gc3RhdGUKLSAqCi0gKiBHZXRzIHVpZCBhbmQgcGlkIG9mIHRoZSBza2IgYW5kIGFkZHMgdGhlIHZhbHVlcyB0byB0aGUgZGFlbW9uIGlkCi0gKiBoYXNoLiBSZXR1cm5zIHplcm8gYWZ0ZXIgYWRkaW5nIGEgbmV3IGRhZW1vbiBpZCB0byB0aGUgaGFzaCBsaXN0OwotICogbm9uLXplcm8gb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW50IGVjcnlwdGZzX3Byb2Nlc3NfbmxfaGVsbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBwaWQgKnBpZDsKLQlpbnQgcmM7Ci0KLQlwaWQgPSBmaW5kX2dldF9waWQoTkVUTElOS19DUkVEUyhza2IpLT5waWQpOwotCXJjID0gZWNyeXB0ZnNfcHJvY2Vzc19oZWxvKEVDUllQVEZTX1RSQU5TUE9SVF9ORVRMSU5LLAotCQkJCSAgIE5FVExJTktfQ1JFRFMoc2tiKS0+dWlkLCBOVUxMLCBwaWQpOwotCXB1dF9waWQocGlkKTsKLQlpZiAocmMpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkVycm9yIHByb2Nlc3NpbmcgSEVMTzsgcmMgPSBbJWRdXG4iLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGVjcnlwdGZzX3Byb2Nlc3NfbmxfcXVpdAotICogQHNrYjogVGhlIHNvY2tldCBidWZmZXIgY29udGFpbmluZyB0aGUgbmxtc2doZHIgaW4gUVVJVCBzdGF0ZQotICoKLSAqIEdldHMgdWlkIGFuZCBwaWQgb2YgdGhlIHNrYiBhbmQgZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyBkYWVtb24KLSAqIGlkLCBpZiBpdCBpcyB0aGUgcmVnaXN0ZXJlZCB0aGF0IGlzIHJlcXVlc3RpbmcgdGhlCi0gKiBkZWxldGlvbi4gUmV0dXJucyB6ZXJvIGFmdGVyIGRlbGV0aW5nIHRoZSBkZXNpcmVkIGRhZW1vbiBpZDsKLSAqIG5vbi16ZXJvIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludCBlY3J5cHRmc19wcm9jZXNzX25sX3F1aXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcGlkICpwaWQ7Ci0JaW50IHJjOwotCi0JcGlkID0gZmluZF9nZXRfcGlkKE5FVExJTktfQ1JFRFMoc2tiKS0+cGlkKTsKLQlyYyA9IGVjcnlwdGZzX3Byb2Nlc3NfcXVpdChORVRMSU5LX0NSRURTKHNrYiktPnVpZCwgTlVMTCwgcGlkKTsKLQlwdXRfcGlkKHBpZCk7Ci0JaWYgKHJjKQotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiRXJyb3IgcHJvY2Vzc2luZyBRVUlUIG1lc3NhZ2U7IHJjID0gWyVkXVxuIiwgcmMpOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBlY3J5cHRmc19yZWNlaXZlX25sX21lc3NhZ2UKLSAqCi0gKiBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgYnkgbmV0bGluayBzeXN0ZW0gd2hlbiBhIG1lc3NhZ2UgYXJyaXZlcy4KLSAqIElmIHRoZSBtZXNzYWdlIGxvb2tzIHRvIGJlIHZhbGlkLCB0aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhc3NpZ24KLSAqIGl0IHRvIGl0cyBkZXNpcmVkIG5ldGxpbmsgY29udGV4dCBlbGVtZW50IGFuZCB3YWtlIHVwIHRoZSBwcm9jZXNzCi0gKiB0aGF0IGlzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UuCi0gKi8KLXN0YXRpYyB2b2lkIGVjcnlwdGZzX3JlY2VpdmVfbmxfbWVzc2FnZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBubG1zZ2hkciAqbmxoOwotCi0JbmxoID0gbmxtc2dfaGRyKHNrYik7Ci0JaWYgKCFOTE1TR19PSyhubGgsIHNrYi0+bGVuKSkgewotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJSZWNlaXZlZCBjb3JydXB0IG5ldGxpbmsgIgotCQkJCSJtZXNzYWdlXG4iKTsKLQkJZ290byBmcmVlOwotCX0KLQlzd2l0Y2ggKG5saC0+bmxtc2dfdHlwZSkgewotCQljYXNlIEVDUllQVEZTX01TR19SRVNQT05TRToKLQkJCWlmIChlY3J5cHRmc19wcm9jZXNzX25sX3Jlc3BvbnNlKHNrYikpIHsKLQkJCQllY3J5cHRmc19wcmludGsoS0VSTl9XQVJOSU5HLCAiRmFpbGVkIHRvICIKLQkJCQkJCSJkZWxpdmVyIG5ldGxpbmsgcmVzcG9uc2UgdG8gIgotCQkJCQkJInJlcXVlc3Rpbmcgb3BlcmF0aW9uXG4iKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEVDUllQVEZTX01TR19IRUxPOgotCQkJaWYgKGVjcnlwdGZzX3Byb2Nlc3NfbmxfaGVsbyhza2IpKSB7Ci0JCQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fV0FSTklORywgIkZhaWxlZCB0byAiCi0JCQkJCQkiZnVsZmlsbCBIRUxPIHJlcXVlc3RcbiIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgRUNSWVBURlNfTVNHX1FVSVQ6Ci0JCQlpZiAoZWNyeXB0ZnNfcHJvY2Vzc19ubF9xdWl0KHNrYikpIHsKLQkJCQllY3J5cHRmc19wcmludGsoS0VSTl9XQVJOSU5HLCAiRmFpbGVkIHRvICIKLQkJCQkJCSJmdWxmaWxsIFFVSVQgcmVxdWVzdFxuIik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJEcm9wcGluZyBuZXRsaW5rICIKLQkJCQkJIm1lc3NhZ2Ugb2YgdW5yZWNvZ25pemVkIHR5cGUgWyVkXVxuIiwKLQkJCQkJbmxoLT5ubG1zZ190eXBlKTsKLQkJCWJyZWFrOwotCX0KLWZyZWU6Ci0Ja2ZyZWVfc2tiKHNrYik7Ci19Ci0KLS8qKgotICogZWNyeXB0ZnNfaW5pdF9uZXRsaW5rCi0gKgotICogSW5pdGlhbGl6ZXMgdGhlIGRhZW1vbiBpZCBoYXNoIGxpc3QsIG5ldGxpbmsgY29udGV4dCBhcnJheSwgYW5kCi0gKiBuZWNlc3NhcnkgbG9ja3MuICBSZXR1cm5zIHplcm8gdXBvbiBzdWNjZXNzOyBub24temVybyB1cG9uIGVycm9yLgotICovCi1pbnQgZWNyeXB0ZnNfaW5pdF9uZXRsaW5rKHZvaWQpCi17Ci0JaW50IHJjOwotCi0JZWNyeXB0ZnNfbmxfc29jayA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZSgmaW5pdF9uZXQsIE5FVExJTktfRUNSWVBURlMsIDAsCi0JCQkJCQkgZWNyeXB0ZnNfcmVjZWl2ZV9ubF9tZXNzYWdlLAotCQkJCQkJIE5VTEwsIFRISVNfTU9EVUxFKTsKLQlpZiAoIWVjcnlwdGZzX25sX3NvY2spIHsKLQkJcmMgPSAtRUlPOwotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJGYWlsZWQgdG8gY3JlYXRlIG5ldGxpbmsgc29ja2V0XG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWVjcnlwdGZzX25sX3NvY2stPnNrX3NuZHRpbWVvID0gRUNSWVBURlNfREVGQVVMVF9TRU5EX1RJTUVPVVQ7Ci0JcmMgPSAwOwotb3V0OgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBlY3J5cHRmc19yZWxlYXNlX25ldGxpbmsKLSAqCi0gKiBGcmVlcyBhbGwgbWVtb3J5IHVzZWQgYnkgdGhlIG5ldGxpbmsgY29udGV4dCBhcnJheSBhbmQgcmVsZWFzZXMgdGhlCi0gKiBuZXRsaW5rIHNvY2tldC4KLSAqLwotdm9pZCBlY3J5cHRmc19yZWxlYXNlX25ldGxpbmsodm9pZCkKLXsKLQluZXRsaW5rX2tlcm5lbF9yZWxlYXNlKGVjcnlwdGZzX25sX3NvY2spOwotCWVjcnlwdGZzX25sX3NvY2sgPSBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvZnMvZWZzL3N1cGVyLmMgYi9mcy9lZnMvc3VwZXIuYwppbmRleCA1NjdiMTM0Li43M2IxOWNmIDEwMDY0NAotLS0gYS9mcy9lZnMvc3VwZXIuYworKysgYi9mcy9lZnMvc3VwZXIuYwpAQCAtMzQxLDggKzM0MSw2IEBACiAJCQlzYi0+aW5vZGVfYmxvY2tzICoKIAkJCShFRlNfQkxPQ0tTSVpFIC8gc2l6ZW9mKHN0cnVjdCBlZnNfZGlub2RlKSk7CiAJYnVmLT5mX2ZmcmVlICAgPSBzYi0+aW5vZGVfZnJlZTsJLyogZnJlZSBpbm9kZXMgKi8KLQlidWYtPmZfZnNpZC52YWxbMF0gPSAoc2ItPmZzX21hZ2ljID4+IDE2KSAmIDB4ZmZmZjsgLyogZnMgSUQgKi8KLQlidWYtPmZfZnNpZC52YWxbMV0gPSAgc2ItPmZzX21hZ2ljICAgICAgICAmIDB4ZmZmZjsgLyogZnMgSUQgKi8KIAlidWYtPmZfbmFtZWxlbiA9IEVGU19NQVhOQU1FTEVOOwkvKiBtYXggZmlsZW5hbWUgbGVuZ3RoICovCiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggN2NjMGViNy4uOTkzNjhiZCAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTkyNywxNCArOTI3LDExIEBACiAJLyoKIAkgKiBEdXJpbmcgdGhlIHRpbWUgd2Ugc3BlbnQgaW4gdGhlIGxvb3AgYWJvdmUsIHNvbWUgb3RoZXIgZXZlbnRzCiAJICogbWlnaHQgaGF2ZSBiZWVuIHF1ZXVlZCBieSB0aGUgcG9sbCBjYWxsYmFjay4gV2UgcmUtaW5zZXJ0IHRoZW0KLQkgKiBoZXJlIChpbiBjYXNlIHRoZXkgYXJlIG5vdCBhbHJlYWR5IHF1ZXVlZCwgb3IgdGhleSdyZSBvbmUtc2hvdCkuCisJICogaW5zaWRlIHRoZSBtYWluIHJlYWR5LWxpc3QgaGVyZS4KIAkgKi8KIAlmb3IgKG5lcGkgPSBlcC0+b3ZmbGlzdDsgKGVwaSA9IG5lcGkpICE9IE5VTEw7Ci0JICAgICBuZXBpID0gZXBpLT5uZXh0LCBlcGktPm5leHQgPSBFUF9VTkFDVElWRV9QVFIpIHsKLQkJaWYgKCFlcF9pc19saW5rZWQoJmVwaS0+cmRsbGluaykgJiYKLQkJICAgIChlcGktPmV2ZW50LmV2ZW50cyAmIH5FUF9QUklWQVRFX0JJVFMpKQotCQkJbGlzdF9hZGRfdGFpbCgmZXBpLT5yZGxsaW5rLCAmZXAtPnJkbGxpc3QpOwotCX0KKwkgICAgIG5lcGkgPSBlcGktPm5leHQsIGVwaS0+bmV4dCA9IEVQX1VOQUNUSVZFX1BUUikKKwkJbGlzdF9hZGRfdGFpbCgmZXBpLT5yZGxsaW5rLCAmZXAtPnJkbGxpc3QpOwogCS8qCiAJICogV2UgbmVlZCB0byBzZXQgYmFjayBlcC0+b3ZmbGlzdCB0byBFUF9VTkFDVElWRV9QVFIsIHNvIHRoYXQgYWZ0ZXIKIAkgKiByZWxlYXNpbmcgdGhlIGxvY2ssIGV2ZW50cyB3aWxsIGJlIHF1ZXVlZCBpbiB0aGUgbm9ybWFsIHdheSBpbnNpZGUKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBjZWNlZTUwLi40ZTgzNGYxIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC01MCwxNSArNTAsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9jbl9wcm9jLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KIAotI2lmZGVmIENPTkZJR19LTU9ECi0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2VuZGlmCi0KICNpZmRlZiBfX2FscGhhX18KIC8qIGZvciAvc2Jpbi9sb2FkZXIgaGFuZGxpbmcgaW4gc2VhcmNoX2JpbmFyeV9oYW5kbGVyKCkgKi8KICNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgpAQCAtMzkxLDcgKzM4OCw3IEBACiAJCQlpZiAoIXApCiAJCQkJYnJlYWs7CiAJCQlhcmd2Kys7Ci0JCQlpZigrK2kgPiBtYXgpCisJCQlpZiAoaSsrID49IG1heCkKIAkJCQlyZXR1cm4gLUUyQklHOwogCQkJY29uZF9yZXNjaGVkKCk7CiAJCX0KQEAgLTgyNSw4ICs4MjIsNiBAQAogCQkJc2NoZWR1bGUoKTsKIAkJfQogCi0JCWlmICh1bmxpa2VseSh0YXNrX2NoaWxkX3JlYXBlcih0c2spID09IGxlYWRlcikpCi0JCQl0YXNrX2FjdGl2ZV9waWRfbnModHNrKS0+Y2hpbGRfcmVhcGVyID0gdHNrOwogCQkvKgogCQkgKiBUaGUgb25seSByZWNvcmQgd2UgaGF2ZSBvZiB0aGUgcmVhbC10aW1lIGFnZSBvZiBhCiAJCSAqIHByb2Nlc3MsIHJlZ2FyZGxlc3Mgb2YgZXhlY3MgaXQncyBkb25lLCBpcyBzdGFydF90aW1lLgpAQCAtMTE4OSw3ICsxMTg0LDcgQEAKIAkJCXJldHVybiByZXR2YWw7CiAKIAkJLyogUmVtZW1iZXIgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIFRBU08uICAqLwotCQlicHJtLT5zaF9iYW5nID0gZWgtPmFoLmVudHJ5IDwgMHgxMDAwMDAwMDBVTDsKKwkJYnBybS0+dGFzbyA9IGVoLT5haC5lbnRyeSA8IDB4MTAwMDAwMDAwVUw7CiAKIAkJYnBybS0+ZmlsZSA9IGZpbGU7CiAJCWJwcm0tPmxvYWRlciA9IGxvYWRlcjsKQEAgLTEyNDcsOCArMTI0Miw4IEBACiAJCXJlYWRfdW5sb2NrKCZiaW5mbXRfbG9jayk7CiAJCWlmIChyZXR2YWwgIT0gLUVOT0VYRUMgfHwgYnBybS0+bW0gPT0gTlVMTCkgewogCQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX0tNT0QKLQkJfWVsc2V7CisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwkJfSBlbHNlIHsKICNkZWZpbmUgcHJpbnRhYmxlKGMpICgoKGMpPT0nXHQnKSB8fCAoKGMpPT0nXG4nKSB8fCAoMHgyMDw9KGMpICYmIChjKTw9MHg3ZSkpCiAJCQlpZiAocHJpbnRhYmxlKGJwcm0tPmJ1ZlswXSkgJiYKIAkJCSAgICBwcmludGFibGUoYnBybS0+YnVmWzFdKSAmJgpAQCAtMTM5MSw3ICsxMzg2LDcgQEAKICAqIG5hbWUgaW50byBjb3JlbmFtZSwgd2hpY2ggbXVzdCBoYXZlIHNwYWNlIGZvciBhdCBsZWFzdAogICogQ09SRU5BTUVfTUFYX1NJWkUgYnl0ZXMgcGx1cyBvbmUgYnl0ZSBmb3IgdGhlIHplcm8gdGVybWluYXRvci4KICAqLwotc3RhdGljIGludCBmb3JtYXRfY29yZW5hbWUoY2hhciAqY29yZW5hbWUsIGludCBucl90aHJlYWRzLCBsb25nIHNpZ25yKQorc3RhdGljIGludCBmb3JtYXRfY29yZW5hbWUoY2hhciAqY29yZW5hbWUsIGxvbmcgc2lnbnIpCiB7CiAJY29uc3QgY2hhciAqcGF0X3B0ciA9IGNvcmVfcGF0dGVybjsKIAlpbnQgaXNwaXBlID0gKCpwYXRfcHRyID09ICd8Jyk7CkBAIC0xNDk4LDggKzE0OTMsNyBAQAogCSAqIElmIGNvcmVfcGF0dGVybiBkb2VzIG5vdCBpbmNsdWRlIGEgJXAgKGFzIGlzIHRoZSBkZWZhdWx0KQogCSAqIGFuZCBjb3JlX3VzZXNfcGlkIGlzIHNldCwgdGhlbiAuJXBpZCB3aWxsIGJlIGFwcGVuZGVkIHRvCiAJICogdGhlIGZpbGVuYW1lLiBEbyBub3QgZG8gdGhpcyBmb3IgcGlwZWQgY29tbWFuZHMuICovCi0JaWYgKCFpc3BpcGUgJiYgIXBpZF9pbl9wYXR0ZXJuCi0JICAgICYmIChjb3JlX3VzZXNfcGlkIHx8IG5yX3RocmVhZHMpKSB7CisJaWYgKCFpc3BpcGUgJiYgIXBpZF9pbl9wYXR0ZXJuICYmIGNvcmVfdXNlc19waWQpIHsKIAkJcmMgPSBzbnByaW50ZihvdXRfcHRyLCBvdXRfZW5kIC0gb3V0X3B0ciwKIAkJCSAgICAgICIuJWQiLCB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpKTsKIAkJaWYgKHJjID4gb3V0X2VuZCAtIG91dF9wdHIpCkBAIC0xNzYyLDcgKzE3NTYsNyBAQAogCSAqIHVzZXMgbG9ja19rZXJuZWwoKQogCSAqLwogIAlsb2NrX2tlcm5lbCgpOwotCWlzcGlwZSA9IGZvcm1hdF9jb3JlbmFtZShjb3JlbmFtZSwgcmV0dmFsLCBzaWducik7CisJaXNwaXBlID0gZm9ybWF0X2NvcmVuYW1lKGNvcmVuYW1lLCBzaWducik7CiAJdW5sb2NrX2tlcm5lbCgpOwogCS8qCiAJICogRG9uJ3QgYm90aGVyIHRvIGNoZWNrIHRoZSBSTElNSVRfQ09SRSB2YWx1ZSBpZiBjb3JlX3BhdHRlcm4gcG9pbnRzCmRpZmYgLS1naXQgYS9mcy9leHQyL0tjb25maWcgYi9mcy9leHQyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhNjc4MAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4dDIvS2NvbmZpZwpAQCAtMCwwICsxLDU1IEBACitjb25maWcgRVhUMl9GUworCXRyaXN0YXRlICJTZWNvbmQgZXh0ZW5kZWQgZnMgc3VwcG9ydCIKKwloZWxwCisJICBFeHQyIGlzIGEgc3RhbmRhcmQgTGludXggZmlsZSBzeXN0ZW0gZm9yIGhhcmQgZGlza3MuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQyLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgRVhUMl9GU19YQVRUUgorCWJvb2wgIkV4dDIgZXh0ZW5kZWQgYXR0cmlidXRlcyIKKwlkZXBlbmRzIG9uIEVYVDJfRlMKKwloZWxwCisJICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKKwkgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKKwkgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgRVhUMl9GU19QT1NJWF9BQ0wKKwlib29sICJFeHQyIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgorCWRlcGVuZHMgb24gRVhUMl9GU19YQVRUUgorCXNlbGVjdCBGU19QT1NJWF9BQ0wKKwloZWxwCisJICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCisJICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCisKKwkgIFRvIGxlYXJuIG1vcmUgYWJvdXQgQWNjZXNzIENvbnRyb2wgTGlzdHMsIHZpc2l0IHRoZSBQb3NpeCBBQ0xzIGZvcgorCSAgTGludXggd2Vic2l0ZSA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+LgorCisJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4KKworY29uZmlnIEVYVDJfRlNfU0VDVVJJVFkKKwlib29sICJFeHQyIFNlY3VyaXR5IExhYmVscyIKKwlkZXBlbmRzIG9uIEVYVDJfRlNfWEFUVFIKKwloZWxwCisJICBTZWN1cml0eSBsYWJlbHMgc3VwcG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHMKKwkgIGltcGxlbWVudGVkIGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb24KKwkgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHkKKwkgIGxhYmVscyBpbiB0aGUgZXh0MiBmaWxlc3lzdGVtLgorCisJICBJZiB5b3UgYXJlIG5vdCB1c2luZyBhIHNlY3VyaXR5IG1vZHVsZSB0aGF0IHJlcXVpcmVzIHVzaW5nCisJICBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBmaWxlIHNlY3VyaXR5IGxhYmVscywgc2F5IE4uCisKK2NvbmZpZyBFWFQyX0ZTX1hJUAorCWJvb2wgIkV4dDIgZXhlY3V0ZSBpbiBwbGFjZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gRVhUMl9GUyAmJiBNTVUKKwloZWxwCisJICBFeGVjdXRlIGluIHBsYWNlIGNhbiBiZSB1c2VkIG9uIG1lbW9yeS1iYWNrZWQgYmxvY2sgZGV2aWNlcy4gSWYgeW91CisJICBlbmFibGUgdGhpcyBvcHRpb24sIHlvdSBjYW4gc2VsZWN0IHRvIG1vdW50IGJsb2NrIGRldmljZXMgd2hpY2ggYXJlCisJICBjYXBhYmxlIG9mIHRoaXMgZmVhdHVyZSB3aXRob3V0IHVzaW5nIHRoZSBwYWdlIGNhY2hlLgorCisJICBJZiB5b3UgZG8gbm90IHVzZSBhIGJsb2NrIGRldmljZSB0aGF0IGlzIGNhcGFibGUgb2YgdXNpbmcgdGhpcywKKwkgIG9yIGlmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9mcy9leHQyL2JhbGxvYy5jIGIvZnMvZXh0Mi9iYWxsb2MuYwppbmRleCAxMGJiMDJjLi42ZGFjN2JhIDEwMDY0NAotLS0gYS9mcy9leHQyL2JhbGxvYy5jCisrKyBiL2ZzL2V4dDIvYmFsbG9jLmMKQEAgLTEyOTUsNiArMTI5NSw3IEBACiAJICogdHVybiBvZmYgcmVzZXJ2YXRpb24gZm9yIHRoaXMgYWxsb2NhdGlvbgogCSAqLwogCWlmIChteV9yc3YgJiYgKGZyZWVfYmxvY2tzIDwgd2luZG93c3opCisJCSYmIChmcmVlX2Jsb2NrcyA+IDApCiAJCSYmIChyc3ZfaXNfZW1wdHkoJm15X3Jzdi0+cnN2X3dpbmRvdykpKQogCQlteV9yc3YgPSBOVUxMOwogCkBAIC0xMzMyLDcgKzEzMzMsNyBAQAogCQkgKiBmcmVlIGJsb2NrcyBpcyBsZXNzIHRoYW4gaGFsZiBvZiB0aGUgcmVzZXJ2YXRpb24KIAkJICogd2luZG93IHNpemUuCiAJCSAqLwotCQlpZiAoZnJlZV9ibG9ja3MgPD0gKHdpbmRvd3N6LzIpKQorCQlpZiAobXlfcnN2ICYmIChmcmVlX2Jsb2NrcyA8PSAod2luZG93c3ovMikpKQogCQkJY29udGludWU7CiAKIAkJYnJlbHNlKGJpdG1hcF9iaCk7CmRpZmYgLS1naXQgYS9mcy9leHQyL2Rpci5jIGIvZnMvZXh0Mi9kaXIuYwppbmRleCBhNzhjNmI0Li4xMWE0OWNlIDEwMDY0NAotLS0gYS9mcy9leHQyL2Rpci5jCisrKyBiL2ZzL2V4dDIvZGlyLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGV4dDJfY2hlY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyB2b2lkIGV4dDJfY2hlY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHF1aWV0KQogewogCXN0cnVjdCBpbm9kZSAqZGlyID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOwpAQCAtMTQ2LDEwICsxNDYsMTAgQEAKIAkvKiBUb28gYmFkLCB3ZSBoYWQgYW4gZXJyb3IgKi8KIAogRWJhZHNpemU6Ci0JZXh0Ml9lcnJvcihzYiwgImV4dDJfY2hlY2tfcGFnZSIsCi0JCSJzaXplIG9mIGRpcmVjdG9yeSAjJWx1IGlzIG5vdCBhIG11bHRpcGxlIG9mIGNodW5rIHNpemUiLAotCQlkaXItPmlfaW5vCi0JKTsKKwlpZiAoIXF1aWV0KQorCQlleHQyX2Vycm9yKHNiLCBfX2Z1bmNfXywKKwkJCSJzaXplIG9mIGRpcmVjdG9yeSAjJWx1IGlzIG5vdCBhIG11bHRpcGxlICIKKwkJCSJvZiBjaHVuayBzaXplIiwgZGlyLT5pX2lubyk7CiAJZ290byBmYWlsOwogRXNob3J0OgogCWVycm9yID0gInJlY19sZW4gaXMgc21hbGxlciB0aGFuIG1pbmltYWwiOwpAQCAtMTY2LDMyICsxNjYsMzYgQEAKIEVpbnVtYmVyOgogCWVycm9yID0gImlub2RlIG91dCBvZiBib3VuZHMiOwogYmFkX2VudHJ5OgotCWV4dDJfZXJyb3IgKHNiLCAiZXh0Ml9jaGVja19wYWdlIiwgImJhZCBlbnRyeSBpbiBkaXJlY3RvcnkgIyVsdTogJXMgLSAiCi0JCSJvZmZzZXQ9JWx1LCBpbm9kZT0lbHUsIHJlY19sZW49JWQsIG5hbWVfbGVuPSVkIiwKLQkJZGlyLT5pX2lubywgZXJyb3IsIChwYWdlLT5pbmRleDw8UEFHRV9DQUNIRV9TSElGVCkrb2ZmcywKLQkJKHVuc2lnbmVkIGxvbmcpIGxlMzJfdG9fY3B1KHAtPmlub2RlKSwKLQkJcmVjX2xlbiwgcC0+bmFtZV9sZW4pOworCWlmICghcXVpZXQpCisJCWV4dDJfZXJyb3Ioc2IsIF9fZnVuY19fLCAiYmFkIGVudHJ5IGluIGRpcmVjdG9yeSAjJWx1OiA6ICVzIC0gIgorCQkJIm9mZnNldD0lbHUsIGlub2RlPSVsdSwgcmVjX2xlbj0lZCwgbmFtZV9sZW49JWQiLAorCQkJZGlyLT5pX2lubywgZXJyb3IsIChwYWdlLT5pbmRleDw8UEFHRV9DQUNIRV9TSElGVCkrb2ZmcywKKwkJCSh1bnNpZ25lZCBsb25nKSBsZTMyX3RvX2NwdShwLT5pbm9kZSksCisJCQlyZWNfbGVuLCBwLT5uYW1lX2xlbik7CiAJZ290byBmYWlsOwogRWVuZDoKLQlwID0gKGV4dDJfZGlyZW50ICopKGthZGRyICsgb2Zmcyk7Ci0JZXh0Ml9lcnJvciAoc2IsICJleHQyX2NoZWNrX3BhZ2UiLAotCQkiZW50cnkgaW4gZGlyZWN0b3J5ICMlbHUgc3BhbnMgdGhlIHBhZ2UgYm91bmRhcnkiCi0JCSJvZmZzZXQ9JWx1LCBpbm9kZT0lbHUiLAotCQlkaXItPmlfaW5vLCAocGFnZS0+aW5kZXg8PFBBR0VfQ0FDSEVfU0hJRlQpK29mZnMsCi0JCSh1bnNpZ25lZCBsb25nKSBsZTMyX3RvX2NwdShwLT5pbm9kZSkpOworCWlmICghcXVpZXQpIHsKKwkJcCA9IChleHQyX2RpcmVudCAqKShrYWRkciArIG9mZnMpOworCQlleHQyX2Vycm9yKHNiLCAiZXh0Ml9jaGVja19wYWdlIiwKKwkJCSJlbnRyeSBpbiBkaXJlY3RvcnkgIyVsdSBzcGFucyB0aGUgcGFnZSBib3VuZGFyeSIKKwkJCSJvZmZzZXQ9JWx1LCBpbm9kZT0lbHUiLAorCQkJZGlyLT5pX2lubywgKHBhZ2UtPmluZGV4PDxQQUdFX0NBQ0hFX1NISUZUKStvZmZzLAorCQkJKHVuc2lnbmVkIGxvbmcpIGxlMzJfdG9fY3B1KHAtPmlub2RlKSk7CisJfQogZmFpbDoKIAlTZXRQYWdlQ2hlY2tlZChwYWdlKTsKIAlTZXRQYWdlRXJyb3IocGFnZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqIGV4dDJfZ2V0X3BhZ2Uoc3RydWN0IGlub2RlICpkaXIsIHVuc2lnbmVkIGxvbmcgbikKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqIGV4dDJfZ2V0X3BhZ2Uoc3RydWN0IGlub2RlICpkaXIsIHVuc2lnbmVkIGxvbmcgbiwKKwkJCQkgICBpbnQgcXVpZXQpCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBkaXItPmlfbWFwcGluZzsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG4sIE5VTEwpOwogCWlmICghSVNfRVJSKHBhZ2UpKSB7CiAJCWttYXAocGFnZSk7CiAJCWlmICghUGFnZUNoZWNrZWQocGFnZSkpCi0JCQlleHQyX2NoZWNrX3BhZ2UocGFnZSk7CisJCQlleHQyX2NoZWNrX3BhZ2UocGFnZSwgcXVpZXQpOwogCQlpZiAoUGFnZUVycm9yKHBhZ2UpKQogCQkJZ290byBmYWlsOwogCX0KQEAgLTI5Miw3ICsyOTYsNyBAQAogCWZvciAoIDsgbiA8IG5wYWdlczsgbisrLCBvZmZzZXQgPSAwKSB7CiAJCWNoYXIgKmthZGRyLCAqbGltaXQ7CiAJCWV4dDJfZGlyZW50ICpkZTsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBleHQyX2dldF9wYWdlKGlub2RlLCBuKTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBleHQyX2dldF9wYWdlKGlub2RlLCBuLCAwKTsKIAogCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CiAJCQlleHQyX2Vycm9yKHNiLCBfX2Z1bmNfXywKQEAgLTM2MSw2ICszNjUsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAlzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IEVYVDJfSShkaXIpOwogCWV4dDJfZGlyZW50ICogZGU7CisJaW50IGRpcl9oYXNfZXJyb3IgPSAwOwogCiAJaWYgKG5wYWdlcyA9PSAwKQogCQlnb3RvIG91dDsKQEAgLTM3NCw3ICszNzksNyBAQAogCW4gPSBzdGFydDsKIAlkbyB7CiAJCWNoYXIgKmthZGRyOwotCQlwYWdlID0gZXh0Ml9nZXRfcGFnZShkaXIsIG4pOworCQlwYWdlID0gZXh0Ml9nZXRfcGFnZShkaXIsIG4sIGRpcl9oYXNfZXJyb3IpOwogCQlpZiAoIUlTX0VSUihwYWdlKSkgewogCQkJa2FkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CiAJCQlkZSA9IChleHQyX2RpcmVudCAqKSBrYWRkcjsKQEAgLTM5MSw3ICszOTYsOSBAQAogCQkJCWRlID0gZXh0Ml9uZXh0X2VudHJ5KGRlKTsKIAkJCX0KIAkJCWV4dDJfcHV0X3BhZ2UocGFnZSk7Ci0JCX0KKwkJfSBlbHNlCisJCQlkaXJfaGFzX2Vycm9yID0gMTsKKwogCQlpZiAoKytuID49IG5wYWdlcykKIAkJCW4gPSAwOwogCQkvKiBuZXh0IHBhZ2UgaXMgcGFzdCB0aGUgYmxvY2tzIHdlJ3ZlIGdvdCAqLwpAQCAtNDE0LDcgKzQyMSw3IEBACiAKIHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICogZXh0Ml9kb3Rkb3QgKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgcGFnZSAqKnApCiB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBleHQyX2dldF9wYWdlKGRpciwgMCk7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBleHQyX2dldF9wYWdlKGRpciwgMCwgMCk7CiAJZXh0Ml9kaXJlbnQgKmRlID0gTlVMTDsKIAogCWlmICghSVNfRVJSKHBhZ2UpKSB7CkBAIC00ODcsNyArNDk0LDcgQEAKIAlmb3IgKG4gPSAwOyBuIDw9IG5wYWdlczsgbisrKSB7CiAJCWNoYXIgKmRpcl9lbmQ7CiAKLQkJcGFnZSA9IGV4dDJfZ2V0X3BhZ2UoZGlyLCBuKTsKKwkJcGFnZSA9IGV4dDJfZ2V0X3BhZ2UoZGlyLCBuLCAwKTsKIAkJZXJyID0gUFRSX0VSUihwYWdlKTsKIAkJaWYgKElTX0VSUihwYWdlKSkKIAkJCWdvdG8gb3V0OwpAQCAtNjU1LDE0ICs2NjIsMTcgQEAKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBpLCBucGFnZXMgPSBkaXJfcGFnZXMoaW5vZGUpOworCWludCBkaXJfaGFzX2Vycm9yID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgewogCQljaGFyICprYWRkcjsKIAkJZXh0Ml9kaXJlbnQgKiBkZTsKLQkJcGFnZSA9IGV4dDJfZ2V0X3BhZ2UoaW5vZGUsIGkpOworCQlwYWdlID0gZXh0Ml9nZXRfcGFnZShpbm9kZSwgaSwgZGlyX2hhc19lcnJvcik7CiAKLQkJaWYgKElTX0VSUihwYWdlKSkKKwkJaWYgKElTX0VSUihwYWdlKSkgeworCQkJZGlyX2hhc19lcnJvciA9IDE7CiAJCQljb250aW51ZTsKKwkJfQogCiAJCWthZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCQlkZSA9IChleHQyX2RpcmVudCAqKWthZGRyOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jCmluZGV4IGZkODhjN2IuLjY0N2NkODggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvc3VwZXIuYworKysgYi9mcy9leHQyL3N1cGVyLmMKQEAgLTM5Myw3ICszOTMsNyBAQAogCU9wdF91c3JxdW90YSwgT3B0X2dycHF1b3RhLCBPcHRfcmVzZXJ2YXRpb24sIE9wdF9ub3Jlc2VydmF0aW9uCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9ic2RfZGYsICJic2RkZiJ9LAogCXtPcHRfbWluaXhfZGYsICJtaW5peGRmIn0sCiAJe09wdF9ncnBpZCwgImdycGlkIn0sCmRpZmYgLS1naXQgYS9mcy9leHQzL0tjb25maWcgYi9mcy9leHQzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwY2ZlNAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4dDMvS2NvbmZpZwpAQCAtMCwwICsxLDY3IEBACitjb25maWcgRVhUM19GUworCXRyaXN0YXRlICJFeHQzIGpvdXJuYWxsaW5nIGZpbGUgc3lzdGVtIHN1cHBvcnQiCisJc2VsZWN0IEpCRAorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGpvdXJuYWxsaW5nIHZlcnNpb24gb2YgdGhlIFNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbQorCSAgKG9mdGVuIGNhbGxlZCBleHQzKSwgdGhlIGRlIGZhY3RvIHN0YW5kYXJkIExpbnV4IGZpbGUgc3lzdGVtCisJICAobWV0aG9kIHRvIG9yZ2FuaXplIGZpbGVzIG9uIGEgc3RvcmFnZSBkZXZpY2UpIGZvciBoYXJkIGRpc2tzLgorCisJICBUaGUgam91cm5hbGxpbmcgY29kZSBpbmNsdWRlZCBpbiB0aGlzIGRyaXZlciBtZWFucyB5b3UgZG8gbm90IGhhdmUKKwkgIHRvIHJ1biBlMmZzY2sgKGZpbGUgc3lzdGVtIGNoZWNrZXIpIG9uIHlvdXIgZmlsZSBzeXN0ZW1zIGFmdGVyIGEKKwkgIGNyYXNoLiAgVGhlIGpvdXJuYWwga2VlcHMgdHJhY2sgb2YgYW55IGNoYW5nZXMgdGhhdCB3ZXJlIGJlaW5nIG1hZGUKKwkgIGF0IHRoZSB0aW1lIHRoZSBzeXN0ZW0gY3Jhc2hlZCwgYW5kIGNhbiBlbnN1cmUgdGhhdCB5b3VyIGZpbGUgc3lzdGVtCisJICBpcyBjb25zaXN0ZW50IHdpdGhvdXQgdGhlIG5lZWQgZm9yIGEgbGVuZ3RoeSBjaGVjay4KKworCSAgT3RoZXIgdGhhbiBhZGRpbmcgdGhlIGpvdXJuYWwgdG8gdGhlIGZpbGUgc3lzdGVtLCB0aGUgb24tZGlzayBmb3JtYXQKKwkgIG9mIGV4dDMgaXMgaWRlbnRpY2FsIHRvIGV4dDIuICBJdCBpcyBwb3NzaWJsZSB0byBmcmVlbHkgc3dpdGNoCisJICBiZXR3ZWVuIHVzaW5nIHRoZSBleHQzIGRyaXZlciBhbmQgdGhlIGV4dDIgZHJpdmVyLCBhcyBsb25nIGFzIHRoZQorCSAgZmlsZSBzeXN0ZW0gaGFzIGJlZW4gY2xlYW5seSB1bm1vdW50ZWQsIG9yIGUyZnNjayBpcyBydW4gb24gdGhlIGZpbGUKKwkgIHN5c3RlbS4KKworCSAgVG8gYWRkIGEgam91cm5hbCBvbiBhbiBleGlzdGluZyBleHQyIGZpbGUgc3lzdGVtIG9yIGNoYW5nZSB0aGUKKwkgIGJlaGF2aW9yIG9mIGV4dDMgZmlsZSBzeXN0ZW1zLCB5b3UgY2FuIHVzZSB0aGUgdHVuZTJmcyB1dGlsaXR5ICgibWFuCisJICB0dW5lMmZzIikuICBUbyBtb2RpZnkgYXR0cmlidXRlcyBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgb24gZXh0MworCSAgZmlsZSBzeXN0ZW1zLCB1c2UgY2hhdHRyICgibWFuIGNoYXR0ciIpLiAgWW91IG5lZWQgdG8gYmUgdXNpbmcKKwkgIGUyZnNwcm9ncyB2ZXJzaW9uIDEuMjAgb3IgbGF0ZXIgaW4gb3JkZXIgdG8gY3JlYXRlIGV4dDMgam91cm5hbHMKKwkgIChhdmFpbGFibGUgYXQgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTJmc3Byb2dzLz4pLgorCisJICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0My4KKworY29uZmlnIEVYVDNfRlNfWEFUVFIKKwlib29sICJFeHQzIGV4dGVuZGVkIGF0dHJpYnV0ZXMiCisJZGVwZW5kcyBvbiBFWFQzX0ZTCisJZGVmYXVsdCB5CisJaGVscAorCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5CisJICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0CisJICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworCSAgWW91IG5lZWQgdGhpcyBmb3IgUE9TSVggQUNMIHN1cHBvcnQgb24gZXh0My4KKworY29uZmlnIEVYVDNfRlNfUE9TSVhfQUNMCisJYm9vbCAiRXh0MyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKKwlkZXBlbmRzIG9uIEVYVDNfRlNfWEFUVFIKKwlzZWxlY3QgRlNfUE9TSVhfQUNMCisJaGVscAorCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAorCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgorCisJICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUG9zaXggQUNMcyBmb3IKKwkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCisKK2NvbmZpZyBFWFQzX0ZTX1NFQ1VSSVRZCisJYm9vbCAiRXh0MyBTZWN1cml0eSBMYWJlbHMiCisJZGVwZW5kcyBvbiBFWFQzX0ZTX1hBVFRSCisJaGVscAorCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCisJICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCisJICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5CisJICBsYWJlbHMgaW4gdGhlIGV4dDMgZmlsZXN5c3RlbS4KKworCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZworCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9iYWxsb2MuYyBiL2ZzL2V4dDMvYmFsbG9jLmMKaW5kZXggOTJmZDAzMy4uZjViNTdhMiAxMDA2NDQKLS0tIGEvZnMvZXh0My9iYWxsb2MuYworKysgYi9mcy9leHQzL2JhbGxvYy5jCkBAIC0xNTQ3LDYgKzE1NDcsNyBAQAogCSAqIHR1cm4gb2ZmIHJlc2VydmF0aW9uIGZvciB0aGlzIGFsbG9jYXRpb24KIAkgKi8KIAlpZiAobXlfcnN2ICYmIChmcmVlX2Jsb2NrcyA8IHdpbmRvd3N6KQorCQkmJiAoZnJlZV9ibG9ja3MgPiAwKQogCQkmJiAocnN2X2lzX2VtcHR5KCZteV9yc3YtPnJzdl93aW5kb3cpKSkKIAkJbXlfcnN2ID0gTlVMTDsKIApAQCAtMTU4NSw3ICsxNTg2LDcgQEAKIAkJICogZnJlZSBibG9ja3MgaXMgbGVzcyB0aGFuIGhhbGYgb2YgdGhlIHJlc2VydmF0aW9uCiAJCSAqIHdpbmRvdyBzaXplLgogCQkgKi8KLQkJaWYgKGZyZWVfYmxvY2tzIDw9ICh3aW5kb3dzei8yKSkKKwkJaWYgKG15X3JzdiAmJiAoZnJlZV9ibG9ja3MgPD0gKHdpbmRvd3N6LzIpKSkKIAkJCWNvbnRpbnVlOwogCiAJCWJyZWxzZShiaXRtYXBfYmgpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9kaXIuYyBiL2ZzL2V4dDMvZGlyLmMKaW5kZXggMmVlYTk2ZS4uNGM4MjUzMSAxMDA2NDQKLS0tIGEvZnMvZXh0My9kaXIuYworKysgYi9mcy9leHQzL2Rpci5jCkBAIC0xMDIsNiArMTAyLDcgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWludCByZXQgPSAwOworCWludCBkaXJfaGFzX2Vycm9yID0gMDsKIAogCXNiID0gaW5vZGUtPmlfc2I7CiAKQEAgLTE0OCw5ICsxNDksMTIgQEAKIAkJICogb2YgcmVjb3ZlcmluZyBkYXRhIHdoZW4gdGhlcmUncyBhIGJhZCBzZWN0b3IKIAkJICovCiAJCWlmICghYmgpIHsKLQkJCWV4dDNfZXJyb3IgKHNiLCAiZXh0M19yZWFkZGlyIiwKLQkJCQkiZGlyZWN0b3J5ICMlbHUgY29udGFpbnMgYSBob2xlIGF0IG9mZnNldCAlbHUiLAotCQkJCWlub2RlLT5pX2lubywgKHVuc2lnbmVkIGxvbmcpZmlscC0+Zl9wb3MpOworCQkJaWYgKCFkaXJfaGFzX2Vycm9yKSB7CisJCQkJZXh0M19lcnJvcihzYiwgX19mdW5jX18sICJkaXJlY3RvcnkgIyVsdSAiCisJCQkJCSJjb250YWlucyBhIGhvbGUgYXQgb2Zmc2V0ICVsbGQiLAorCQkJCQlpbm9kZS0+aV9pbm8sIGZpbHAtPmZfcG9zKTsKKwkJCQlkaXJfaGFzX2Vycm9yID0gMTsKKwkJCX0KIAkJCS8qIGNvcnJ1cHQgc2l6ZT8gIE1heWJlIG5vIG1vcmUgYmxvY2tzIHRvIHJlYWQgKi8KIAkJCWlmIChmaWxwLT5mX3BvcyA+IGlub2RlLT5pX2Jsb2NrcyA8PCA5KQogCQkJCWJyZWFrOwpAQCAtNDEwLDcgKzQxNCw3IEBACiAJCQkJZ2V0X2R0eXBlKHNiLCBmbmFtZS0+ZmlsZV90eXBlKSk7CiAJCWlmIChlcnJvcikgewogCQkJZmlscC0+Zl9wb3MgPSBjdXJyX3BvczsKLQkJCWluZm8tPmV4dHJhX2ZuYW1lID0gZm5hbWUtPm5leHQ7CisJCQlpbmZvLT5leHRyYV9mbmFtZSA9IGZuYW1lOwogCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJCWZuYW1lID0gZm5hbWUtPm5leHQ7CkBAIC00NDksMTEgKzQ1MywyMSBAQAogCSAqIElmIHRoZXJlIGFyZSBhbnkgbGVmdG92ZXIgbmFtZXMgb24gdGhlIGhhc2ggY29sbGlzaW9uCiAJICogY2hhaW4sIHJldHVybiB0aGVtIGZpcnN0LgogCSAqLwotCWlmIChpbmZvLT5leHRyYV9mbmFtZSAmJgotCSAgICBjYWxsX2ZpbGxkaXIoZmlscCwgZGlyZW50LCBmaWxsZGlyLCBpbmZvLT5leHRyYV9mbmFtZSkpCi0JCWdvdG8gZmluaXNoZWQ7CisJaWYgKGluZm8tPmV4dHJhX2ZuYW1lKSB7CisJCWlmIChjYWxsX2ZpbGxkaXIoZmlscCwgZGlyZW50LCBmaWxsZGlyLCBpbmZvLT5leHRyYV9mbmFtZSkpCisJCQlnb3RvIGZpbmlzaGVkOwogCi0JaWYgKCFpbmZvLT5jdXJyX25vZGUpCisJCWluZm8tPmV4dHJhX2ZuYW1lID0gTlVMTDsKKwkJaW5mby0+Y3Vycl9ub2RlID0gcmJfbmV4dChpbmZvLT5jdXJyX25vZGUpOworCQlpZiAoIWluZm8tPmN1cnJfbm9kZSkgeworCQkJaWYgKGluZm8tPm5leHRfaGFzaCA9PSB+MCkgeworCQkJCWZpbHAtPmZfcG9zID0gRVhUM19IVFJFRV9FT0Y7CisJCQkJZ290byBmaW5pc2hlZDsKKwkJCX0KKwkJCWluZm8tPmN1cnJfaGFzaCA9IGluZm8tPm5leHRfaGFzaDsKKwkJCWluZm8tPmN1cnJfbWlub3JfaGFzaCA9IDA7CisJCX0KKwl9IGVsc2UgaWYgKCFpbmZvLT5jdXJyX25vZGUpCiAJCWluZm8tPmN1cnJfbm9kZSA9IHJiX2ZpcnN0KCZpbmZvLT5yb290KTsKIAogCXdoaWxlICgxKSB7CmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggZWJmZWM0ZC4uZjg0MjRhZCAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtMTE4Niw2ICsxMTg2LDEzIEBACiAJCWV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJCXVubG9ja19wYWdlKHBhZ2UpOwogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCS8qCisJCSAqIGJsb2NrX3dyaXRlX2JlZ2luIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZldyBibG9ja3MKKwkJICogb3V0c2lkZSBpX3NpemUuICBUcmltIHRoZXNlIG9mZiBhZ2Fpbi4gRG9uJ3QgbmVlZAorCQkgKiBpX3NpemVfcmVhZCBiZWNhdXNlIHdlIGhvbGQgaV9tdXRleC4KKwkJICovCisJCWlmIChwb3MgKyBsZW4gPiBpbm9kZS0+aV9zaXplKQorCQkJdm10cnVuY2F0ZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSk7CiAJfQogCWlmIChyZXQgPT0gLUVOT1NQQyAmJiBleHQzX3Nob3VsZF9yZXRyeV9hbGxvYyhpbm9kZS0+aV9zYiwgJnJldHJpZXMpKQogCQlnb3RvIHJldHJ5OwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9yZXNpemUuYyBiL2ZzL2V4dDMvcmVzaXplLmMKaW5kZXggNzcyNzhlOS4uNzhmZGYzOCAxMDA2NDQKLS0tIGEvZnMvZXh0My9yZXNpemUuYworKysgYi9mcy9leHQzL3Jlc2l6ZS5jCkBAIC03OTAsNyArNzkwLDggQEAKIAogCWlmIChyZXNlcnZlZF9nZGIgfHwgZ2RiX29mZiA9PSAwKSB7CiAJCWlmICghRVhUM19IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsCi0JCQkJCSAgICAgRVhUM19GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREUpKXsKKwkJCQkJICAgICBFWFQzX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSkKKwkJICAgIHx8ICFsZTE2X3RvX2NwdShlcy0+c19yZXNlcnZlZF9nZHRfYmxvY2tzKSkgewogCQkJZXh0M193YXJuaW5nKHNiLCBfX2Z1bmNfXywKIAkJCQkgICAgICJObyByZXNlcnZlZCBHRFQgYmxvY2tzLCBjYW4ndCByZXNpemUiKTsKIAkJCXJldHVybiAtRVBFUk07CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggZjM4YTVhZi4uM2EyNjBhZiAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtNjI1LDYgKzYyNSw5IEBACiAJZWxzZSBpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDNfTU9VTlRfV1JJVEVCQUNLX0RBVEEpCiAJCXNlcV9wdXRzKHNlcSwgIixkYXRhPXdyaXRlYmFjayIpOwogCisJaWYgKHRlc3Rfb3B0KHNiLCBEQVRBX0VSUl9BQk9SVCkpCisJCXNlcV9wdXRzKHNlcSwgIixkYXRhX2Vycj1hYm9ydCIpOworCiAJZXh0M19zaG93X3F1b3RhX29wdGlvbnMoc2VxLCBzYik7CiAKIAlyZXR1cm4gMDsKQEAgLTc1NCwxMyArNzU3LDE0IEBACiAJT3B0X3Jlc2VydmF0aW9uLCBPcHRfbm9yZXNlcnZhdGlvbiwgT3B0X25vbG9hZCwgT3B0X25vYmgsIE9wdF9iaCwKIAlPcHRfY29tbWl0LCBPcHRfam91cm5hbF91cGRhdGUsIE9wdF9qb3VybmFsX2ludW0sIE9wdF9qb3VybmFsX2RldiwKIAlPcHRfYWJvcnQsIE9wdF9kYXRhX2pvdXJuYWwsIE9wdF9kYXRhX29yZGVyZWQsIE9wdF9kYXRhX3dyaXRlYmFjaywKKwlPcHRfZGF0YV9lcnJfYWJvcnQsIE9wdF9kYXRhX2Vycl9pZ25vcmUsCiAJT3B0X3VzcmpxdW90YSwgT3B0X2dycGpxdW90YSwgT3B0X29mZnVzcmpxdW90YSwgT3B0X29mZmdycGpxdW90YSwKIAlPcHRfanFmbXRfdmZzb2xkLCBPcHRfanFmbXRfdmZzdjAsIE9wdF9xdW90YSwgT3B0X25vcXVvdGEsCiAJT3B0X2lnbm9yZSwgT3B0X2JhcnJpZXIsIE9wdF9lcnIsIE9wdF9yZXNpemUsIE9wdF91c3JxdW90YSwKIAlPcHRfZ3JwcXVvdGEKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2JzZF9kZiwgImJzZGRmIn0sCiAJe09wdF9taW5peF9kZiwgIm1pbml4ZGYifSwKIAl7T3B0X2dycGlkLCAiZ3JwaWQifSwKQEAgLTc5Niw2ICs4MDAsOCBAQAogCXtPcHRfZGF0YV9qb3VybmFsLCAiZGF0YT1qb3VybmFsIn0sCiAJe09wdF9kYXRhX29yZGVyZWQsICJkYXRhPW9yZGVyZWQifSwKIAl7T3B0X2RhdGFfd3JpdGViYWNrLCAiZGF0YT13cml0ZWJhY2sifSwKKwl7T3B0X2RhdGFfZXJyX2Fib3J0LCAiZGF0YV9lcnI9YWJvcnQifSwKKwl7T3B0X2RhdGFfZXJyX2lnbm9yZSwgImRhdGFfZXJyPWlnbm9yZSJ9LAogCXtPcHRfb2ZmdXNyanF1b3RhLCAidXNyanF1b3RhPSJ9LAogCXtPcHRfdXNyanF1b3RhLCAidXNyanF1b3RhPSVzIn0sCiAJe09wdF9vZmZncnBqcXVvdGEsICJncnBqcXVvdGE9In0sCkBAIC0xMDExLDYgKzEwMTcsMTIgQEAKIAkJCQlzYmktPnNfbW91bnRfb3B0IHw9IGRhdGFfb3B0OwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2RhdGFfZXJyX2Fib3J0OgorCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBEQVRBX0VSUl9BQk9SVCk7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZGF0YV9lcnJfaWdub3JlOgorCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIERBVEFfRVJSX0FCT1JUKTsKKwkJCWJyZWFrOwogI2lmZGVmIENPTkZJR19RVU9UQQogCQljYXNlIE9wdF91c3JqcXVvdGE6CiAJCQlxdHlwZSA9IFVTUlFVT1RBOwpAQCAtMTk4Niw2ICsxOTk4LDEwIEBACiAJCWpvdXJuYWwtPmpfZmxhZ3MgfD0gSkZTX0JBUlJJRVI7CiAJZWxzZQogCQlqb3VybmFsLT5qX2ZsYWdzICY9IH5KRlNfQkFSUklFUjsKKwlpZiAodGVzdF9vcHQoc2IsIERBVEFfRVJSX0FCT1JUKSkKKwkJam91cm5hbC0+al9mbGFncyB8PSBKRlNfQUJPUlRfT05fU1lOQ0RBVEFfRVJSOworCWVsc2UKKwkJam91cm5hbC0+al9mbGFncyAmPSB+SkZTX0FCT1JUX09OX1NZTkNEQVRBX0VSUjsKIAlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9LY29uZmlnIGIvZnMvZXh0NC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MDU0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leHQ0L0tjb25maWcKQEAgLTAsMCArMSw3OSBAQAorY29uZmlnIEVYVDRfRlMKKwl0cmlzdGF0ZSAiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW0iCisJc2VsZWN0IEpCRDIKKwlzZWxlY3QgQ1JDMTYKKwloZWxwCisJICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS4KKworCSAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLAorCSAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aAorCSAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdAorCSAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkCisJICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcywKKwkgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZAorCSAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdAorCSAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLgorCisJICBUaGUgZXh0NCBmaWxlc3lzdGVtIHdpbGwgc3VwcG9ydCBtb3VudGluZyBhbiBleHQzCisJICBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZSB3aWxsIGJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbQorCSAgdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGUgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdAorCSAgcGVyZm9ybWFuY2UgZ2FpbnMgd2lsbCByZXF1aXJlIGVuYWJsaW5nIGV4dDQgZmVhdHVyZXMgaW4gdGhlCisJICBmaWxlc3lzdGVtLCBvciBmb3JtYXRpbmcgYSBuZXcgZmlsZXN5c3RlbSBhcyBhbiBleHQ0CisJICBmaWxlc3lzdGVtIGluaXRpYWxseS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBFWFQ0REVWX0NPTVBBVAorCWJvb2wgIkVuYWJsZSBleHQ0ZGV2IGNvbXBhdGliaWxpdHkiCisJZGVwZW5kcyBvbiBFWFQ0X0ZTCisJaGVscAorCSAgU3RhcnRpbmcgd2l0aCAyLjYuMjgsIHRoZSBuYW1lIG9mIHRoZSBleHQ0IGZpbGVzeXN0ZW0gd2FzCisJICByZW5hbWVkIGZyb20gZXh0NGRldiB0byBleHQ0LiAgVW5mb3J0dW5hdGVseSB0aGVyZSBhcmUgc29tZQorCSAgbGVnYWN5IHVzZXJzcGFjZSBwcm9ncmFtcyAoc3VjaCBhcyBrbGliYydzIGZzdHlwZSkgaGF2ZQorCSAgImV4dDRkZXYiIGhhcmRjb2RlZC4KKworCSAgVG8gZW5hYmxlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHNvIHRoYXQgc3lzdGVtcyB0aGF0IGFyZQorCSAgc3RpbGwgZXhwZWN0aW5nIHRvIG1vdW50IGV4dDQgZmlsZXN5c3RlbXMgdXNpbmcgZXh0NGRldiwKKwkgIGNob3NlIFkgaGVyZS4gICBUaGlzIGZlYXR1cmUgd2lsbCBnbyBhd2F5IGJ5IDIuNi4zMSwgc28KKwkgIHBsZWFzZSBhcnJhbmdlIHRvIGdldCB5b3VyIHVzZXJzcGFjZSBwcm9ncmFtcyBmaXhlZCEKKworY29uZmlnIEVYVDRfRlNfWEFUVFIKKwlib29sICJFeHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMiCisJZGVwZW5kcyBvbiBFWFQ0X0ZTCisJZGVmYXVsdCB5CisJaGVscAorCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5CisJICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0CisJICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworCSAgWW91IG5lZWQgdGhpcyBmb3IgUE9TSVggQUNMIHN1cHBvcnQgb24gZXh0NC4KKworY29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMCisJYm9vbCAiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKKwlkZXBlbmRzIG9uIEVYVDRfRlNfWEFUVFIKKwlzZWxlY3QgRlNfUE9TSVhfQUNMCisJaGVscAorCSAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAorCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgorCisJICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUE9TSVggQUNMcyBmb3IKKwkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCisKK2NvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZCisJYm9vbCAiRXh0NCBTZWN1cml0eSBMYWJlbHMiCisJZGVwZW5kcyBvbiBFWFQ0X0ZTX1hBVFRSCisJaGVscAorCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCisJICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCisJICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5CisJICBsYWJlbHMgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4KKworCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZworCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmMKaW5kZXggYmQyZWNlMi4uYjk4MjFiZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9iYWxsb2MuYworKysgYi9mcy9leHQ0L2JhbGxvYy5jCkBAIC01NjgsOCArNTY4LDE2IEBACiAKIAkvKiB0aGlzIGlzbid0IHRoZSByaWdodCBwbGFjZSB0byBkZWNpZGUgd2hldGhlciBibG9jayBpcyBtZXRhZGF0YQogCSAqIGlub2RlLmMvZXh0ZW50cy5jIGtub3dzIGJldHRlciwgYnV0IGZvciBzYWZldHkgLi4uICovCi0JaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS0+aV9tb2RlKSB8fAotCQkJZXh0NF9zaG91bGRfam91cm5hbF9kYXRhKGlub2RlKSkKKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLT5pX21vZGUpKQorCQltZXRhZGF0YSA9IDE7CisKKwkvKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCByZXVzZQorCSAqIGJsb2NrIHJlbGVhc2VkIHVudGlsbCB0aGUgdHJhbnNhY3Rpb24gY29tbWl0LgorCSAqIHdyaXRlYmFjayBtb2RlIGhhdmUgd2VhayBkYXRhIGNvbnNpc3RlbmN5IHNvCisJICogZG9uJ3QgZm9yY2UgZGF0YSBhcyBtZXRhZGF0YSB3aGVuIGZyZWVpbmcgYmxvY2sKKwkgKiBmb3Igd3JpdGViYWNrIG1vZGUuCisJICovCisJaWYgKG1ldGFkYXRhID09IDAgJiYgIWV4dDRfc2hvdWxkX3dyaXRlYmFja19kYXRhKGlub2RlKSkKIAkJbWV0YWRhdGEgPSAxOwogCiAJc2IgPSBpbm9kZS0+aV9zYjsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggNjY5MGE0MS4uNDg4MGNjMyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTUxMSw3ICs1MTEsNiBAQAogLyoKICAqIE1vdW50IGZsYWdzCiAgKi8KLSNkZWZpbmUgRVhUNF9NT1VOVF9DSEVDSwkJMHgwMDAwMQkvKiBEbyBtb3VudC10aW1lIGNoZWNrcyAqLwogI2RlZmluZSBFWFQ0X01PVU5UX09MREFMTE9DCQkweDAwMDAyICAvKiBEb24ndCB1c2UgdGhlIG5ldyBPcmxvdiBhbGxvY2F0b3IgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9HUlBJRAkJMHgwMDAwNAkvKiBDcmVhdGUgZmlsZXMgd2l0aCBkaXJlY3RvcnkncyBncm91cCAqLwogI2RlZmluZSBFWFQ0X01PVU5UX0RFQlVHCQkweDAwMDA4CS8qIFNvbWUgZGVidWdnaW5nIG1lc3NhZ2VzICovCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfc2IuaCBiL2ZzL2V4dDQvZXh0NF9zYi5oCmluZGV4IDZhMGI0MGQuLjQ0NWZkZTYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9zYi5oCisrKyBiL2ZzL2V4dDQvZXh0NF9zYi5oCkBAIC05OSw5ICs5OSw2IEBACiAJc3RydWN0IGlub2RlICpzX2J1ZGR5X2NhY2hlOwogCWxvbmcgc19ibG9ja3NfcmVzZXJ2ZWQ7CiAJc3BpbmxvY2tfdCBzX3Jlc2VydmVfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHNfYWN0aXZlX3RyYW5zYWN0aW9uOwotCXN0cnVjdCBsaXN0X2hlYWQgc19jbG9zZWRfdHJhbnNhY3Rpb247Ci0Jc3RydWN0IGxpc3RfaGVhZCBzX2NvbW1pdHRlZF90cmFuc2FjdGlvbjsKIAlzcGlubG9ja190IHNfbWRfbG9jazsKIAl0aWRfdCBzX2xhc3RfdHJhbnNhY3Rpb247CiAJdW5zaWduZWQgc2hvcnQgKnNfbWJfb2Zmc2V0cywgKnNfbWJfbWF4czsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCA5YjRlYzlkLi44ZGJmNjk1IDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKKysrIGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0xNjQ4LDYgKzE2NDgsNyBAQAogCWludCByZXQgPSAwLCBlcnIsIG5yX3BhZ2VzLCBpOwogCXVuc2lnbmVkIGxvbmcgaW5kZXgsIGVuZDsKIAlzdHJ1Y3QgcGFnZXZlYyBwdmVjOworCWxvbmcgcGFnZXNfc2tpcHBlZDsKIAogCUJVR19PTihtcGQtPm5leHRfcGFnZSA8PSBtcGQtPmZpcnN0X3BhZ2UpOwogCXBhZ2V2ZWNfaW5pdCgmcHZlYywgMCk7CkBAIC0xNjU1LDIwICsxNjU2LDMwIEBACiAJZW5kID0gbXBkLT5uZXh0X3BhZ2UgLSAxOwogCiAJd2hpbGUgKGluZGV4IDw9IGVuZCkgewotCQkvKiBYWFg6IG9wdGltaXplIHRhaWwgKi8KLQkJbnJfcGFnZXMgPSBwYWdldmVjX2xvb2t1cCgmcHZlYywgbWFwcGluZywgaW5kZXgsIFBBR0VWRUNfU0laRSk7CisJCS8qCisJCSAqIFdlIGNhbiB1c2UgUEFHRUNBQ0hFX1RBR19ESVJUWSBsb29rdXAgaGVyZSBiZWNhdXNlCisJCSAqIGV2ZW4gdGhvdWdoIHdlIGhhdmUgY2xlYXJlZCB0aGUgZGlydHkgZmxhZyBvbiB0aGUgcGFnZQorCQkgKiBXZSBzdGlsbCBrZWVwIHRoZSBwYWdlIGluIHRoZSByYWRpeCB0cmVlIHdpdGggdGFnCisJCSAqIFBBR0VDQUNIRV9UQUdfRElSVFkuIFNlZSBjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pby4KKwkJICogVGhlIFBBR0VDQUNIRV9UQUdfRElSVFkgaXMgY2xlYXJlZCBpbiBzZXRfcGFnZV93cml0ZWJhY2sKKwkJICogd2hpY2ggaXMgY2FsbGVkIHZpYSB0aGUgYmVsb3cgd3JpdGVwYWdlIGNhbGxiYWNrLgorCQkgKi8KKwkJbnJfcGFnZXMgPSBwYWdldmVjX2xvb2t1cF90YWcoJnB2ZWMsIG1hcHBpbmcsICZpbmRleCwKKwkJCQkJUEFHRUNBQ0hFX1RBR19ESVJUWSwKKwkJCQkJbWluKGVuZCAtIGluZGV4LAorCQkJCQkocGdvZmZfdClQQUdFVkVDX1NJWkUtMSkgKyAxKTsKIAkJaWYgKG5yX3BhZ2VzID09IDApCiAJCQlicmVhazsKIAkJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKIAkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKIAotCQkJaW5kZXggPSBwYWdlLT5pbmRleDsKLQkJCWlmIChpbmRleCA+IGVuZCkKLQkJCQlicmVhazsKLQkJCWluZGV4Kys7Ci0KKwkJCXBhZ2VzX3NraXBwZWQgPSBtcGQtPndiYy0+cGFnZXNfc2tpcHBlZDsKIAkJCWVyciA9IG1hcHBpbmctPmFfb3BzLT53cml0ZXBhZ2UocGFnZSwgbXBkLT53YmMpOwotCQkJaWYgKCFlcnIpCisJCQlpZiAoIWVyciAmJiAocGFnZXNfc2tpcHBlZCA9PSBtcGQtPndiYy0+cGFnZXNfc2tpcHBlZCkpCisJCQkJLyoKKwkJCQkgKiBoYXZlIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRoZSBwYWdlCisJCQkJICogd2l0aG91dCBza2lwcGluZyB0aGUgc2FtZQorCQkJCSAqLwogCQkJCW1wZC0+cGFnZXNfd3JpdHRlbisrOwogCQkJLyoKIAkJCSAqIEluIGVycm9yIGNhc2UsIHdlIGhhdmUgdG8gY29udGludWUgYmVjYXVzZQpAQCAtMjEwNCw3ICsyMTE1LDYgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKIAkJCSAgICAgICBzdHJ1Y3QgbXBhZ2VfZGFfZGF0YSAqbXBkKQogewotCWxvbmcgdG9fd3JpdGU7CiAJaW50IHJldDsKIAogCWlmICghbXBkLT5nZXRfYmxvY2spCkBAIC0yMTE5LDE5ICsyMTI5LDE4IEBACiAJbXBkLT5wYWdlc193cml0dGVuID0gMDsKIAltcGQtPnJldHZhbCA9IDA7CiAKLQl0b193cml0ZSA9IHdiYy0+bnJfdG9fd3JpdGU7Ci0KIAlyZXQgPSB3cml0ZV9jYWNoZV9wYWdlcyhtYXBwaW5nLCB3YmMsIF9fbXBhZ2VfZGFfd3JpdGVwYWdlLCBtcGQpOwotCiAJLyoKIAkgKiBIYW5kbGUgbGFzdCBleHRlbnQgb2YgcGFnZXMKIAkgKi8KIAlpZiAoIW1wZC0+aW9fZG9uZSAmJiBtcGQtPm5leHRfcGFnZSAhPSBtcGQtPmZpcnN0X3BhZ2UpIHsKIAkJaWYgKG1wYWdlX2RhX21hcF9ibG9ja3MobXBkKSA9PSAwKQogCQkJbXBhZ2VfZGFfc3VibWl0X2lvKG1wZCk7Ci0JfQogCi0Jd2JjLT5ucl90b193cml0ZSA9IHRvX3dyaXRlIC0gbXBkLT5wYWdlc193cml0dGVuOworCQltcGQtPmlvX2RvbmUgPSAxOworCQlyZXQgPSBNUEFHRV9EQV9FWFRFTlRfVEFJTDsKKwl9CisJd2JjLT5ucl90b193cml0ZSAtPSBtcGQtPnBhZ2VzX3dyaXR0ZW47CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjM2MCwxMiArMjM2OSwxNCBAQAogc3RhdGljIGludCBleHQ0X2RhX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKKwlwZ29mZl90CWluZGV4OworCWludCByYW5nZV93aG9sZSA9IDA7CiAJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7Ci0JbG9mZl90IHJhbmdlX3N0YXJ0ID0gMDsKIAlzdHJ1Y3QgbXBhZ2VfZGFfZGF0YSBtcGQ7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJaW50IG5vX25yd3JpdGVfaW5kZXhfdXBkYXRlOworCWxvbmcgcGFnZXNfd3JpdHRlbiA9IDAsIHBhZ2VzX3NraXBwZWQ7CiAJaW50IG5lZWRlZF9ibG9ja3MsIHJldCA9IDAsIG5yX3RvX3dyaXRlYnVtcCA9IDA7Ci0JbG9uZyB0b193cml0ZSwgcGFnZXNfc2tpcHBlZCA9IDA7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihtYXBwaW5nLT5ob3N0LT5pX3NiKTsKIAogCS8qCkBAIC0yMzg1LDIzICsyMzk2LDI2IEBACiAJCW5yX3RvX3dyaXRlYnVtcCA9IHNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdCAtIHdiYy0+bnJfdG9fd3JpdGU7CiAJCXdiYy0+bnJfdG9fd3JpdGUgPSBzYmktPnNfbWJfc3RyZWFtX3JlcXVlc3Q7CiAJfQorCWlmICh3YmMtPnJhbmdlX3N0YXJ0ID09IDAgJiYgd2JjLT5yYW5nZV9lbmQgPT0gTExPTkdfTUFYKQorCQlyYW5nZV93aG9sZSA9IDE7CiAKLQlpZiAoIXdiYy0+cmFuZ2VfY3ljbGljKQotCQkvKgotCQkgKiBJZiByYW5nZV9jeWNsaWMgaXMgbm90IHNldCBmb3JjZSByYW5nZV9jb250Ci0JCSAqIGFuZCBzYXZlIHRoZSBvbGQgd3JpdGViYWNrX2luZGV4Ci0JCSAqLwotCQl3YmMtPnJhbmdlX2NvbnQgPSAxOwotCi0JcmFuZ2Vfc3RhcnQgPSAgd2JjLT5yYW5nZV9zdGFydDsKLQlwYWdlc19za2lwcGVkID0gd2JjLT5wYWdlc19za2lwcGVkOworCWlmICh3YmMtPnJhbmdlX2N5Y2xpYykKKwkJaW5kZXggPSBtYXBwaW5nLT53cml0ZWJhY2tfaW5kZXg7CisJZWxzZQorCQlpbmRleCA9IHdiYy0+cmFuZ2Vfc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAogCW1wZC53YmMgPSB3YmM7CiAJbXBkLmlub2RlID0gbWFwcGluZy0+aG9zdDsKIAotcmVzdGFydF9sb29wOgotCXRvX3dyaXRlID0gd2JjLT5ucl90b193cml0ZTsKLQl3aGlsZSAoIXJldCAmJiB0b193cml0ZSA+IDApIHsKKwkvKgorCSAqIHdlIGRvbid0IHdhbnQgd3JpdGVfY2FjaGVfcGFnZXMgdG8gdXBkYXRlCisJICogbnJfdG9fd3JpdGUgYW5kIHdyaXRlYmFja19pbmRleAorCSAqLworCW5vX25yd3JpdGVfaW5kZXhfdXBkYXRlID0gd2JjLT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZTsKKwl3YmMtPm5vX25yd3JpdGVfaW5kZXhfdXBkYXRlID0gMTsKKwlwYWdlc19za2lwcGVkID0gd2JjLT5wYWdlc19za2lwcGVkOworCisJd2hpbGUgKCFyZXQgJiYgd2JjLT5ucl90b193cml0ZSA+IDApIHsKIAogCQkvKgogCQkgKiB3ZSAgaW5zZXJ0IG9uZSBleHRlbnQgYXQgYSB0aW1lLiBTbyB3ZSBuZWVkCkBAIC0yNDIyLDQ4ICsyNDM2LDUzIEBACiAJCQlkdW1wX3N0YWNrKCk7CiAJCQlnb3RvIG91dF93cml0ZXBhZ2VzOwogCQl9Ci0JCXRvX3dyaXRlIC09IHdiYy0+bnJfdG9fd3JpdGU7Ci0KIAkJbXBkLmdldF9ibG9jayA9IGV4dDRfZGFfZ2V0X2Jsb2NrX3dyaXRlOwogCQlyZXQgPSBtcGFnZV9kYV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgJm1wZCk7CiAKIAkJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAotCQlpZiAobXBkLnJldHZhbCA9PSAtRU5PU1BDKQorCQlpZiAobXBkLnJldHZhbCA9PSAtRU5PU1BDKSB7CisJCQkvKiBjb21taXQgdGhlIHRyYW5zYWN0aW9uIHdoaWNoIHdvdWxkCisJCQkgKiBmcmVlIGJsb2NrcyByZWxlYXNlZCBpbiB0aGUgdHJhbnNhY3Rpb24KKwkJCSAqIGFuZCB0cnkgYWdhaW4KKwkJCSAqLwogCQkJamJkMl9qb3VybmFsX2ZvcmNlX2NvbW1pdF9uZXN0ZWQoc2JpLT5zX2pvdXJuYWwpOwotCi0JCS8qIHJlc2V0IHRoZSByZXRyeSBjb3VudCAqLwotCQlpZiAocmV0ID09IE1QQUdFX0RBX0VYVEVOVF9UQUlMKSB7CisJCQl3YmMtPnBhZ2VzX3NraXBwZWQgPSBwYWdlc19za2lwcGVkOworCQkJcmV0ID0gMDsKKwkJfSBlbHNlIGlmIChyZXQgPT0gTVBBR0VfREFfRVhURU5UX1RBSUwpIHsKIAkJCS8qCiAJCQkgKiBnb3Qgb25lIGV4dGVudCBub3cgdHJ5IHdpdGgKIAkJCSAqIHJlc3Qgb2YgdGhlIHBhZ2VzCiAJCQkgKi8KLQkJCXRvX3dyaXRlICs9IHdiYy0+bnJfdG9fd3JpdGU7CisJCQlwYWdlc193cml0dGVuICs9IG1wZC5wYWdlc193cml0dGVuOworCQkJd2JjLT5wYWdlc19za2lwcGVkID0gcGFnZXNfc2tpcHBlZDsKIAkJCXJldCA9IDA7Ci0JCX0gZWxzZSBpZiAod2JjLT5ucl90b193cml0ZSkgeworCQl9IGVsc2UgaWYgKHdiYy0+bnJfdG9fd3JpdGUpCiAJCQkvKgogCQkJICogVGhlcmUgaXMgbm8gbW9yZSB3cml0ZW91dCBuZWVkZWQKIAkJCSAqIG9yIHdlIHJlcXVlc3RlZCBmb3IgYSBub2Jsb2NraW5nIHdyaXRlb3V0CiAJCQkgKiBhbmQgd2UgZm91bmQgdGhlIGRldmljZSBjb25nZXN0ZWQKIAkJCSAqLwotCQkJdG9fd3JpdGUgKz0gd2JjLT5ucl90b193cml0ZTsKIAkJCWJyZWFrOwotCQl9Ci0JCXdiYy0+bnJfdG9fd3JpdGUgPSB0b193cml0ZTsKIAl9CisJaWYgKHBhZ2VzX3NraXBwZWQgIT0gd2JjLT5wYWdlc19za2lwcGVkKQorCQlwcmludGsoS0VSTl9FTUVSRyAiVGhpcyBzaG91bGQgbm90IGhhcHBlbiBsZWF2aW5nICVzICIKKwkJCQkid2l0aCBucl90b193cml0ZSA9ICVsZCByZXQgPSAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgd2JjLT5ucl90b193cml0ZSwgcmV0KTsKIAotCWlmICh3YmMtPnJhbmdlX2NvbnQgJiYgKHBhZ2VzX3NraXBwZWQgIT0gd2JjLT5wYWdlc19za2lwcGVkKSkgewotCQkvKiBXZSBza2lwcGVkIHBhZ2VzIGluIHRoaXMgbG9vcCAqLwotCQl3YmMtPnJhbmdlX3N0YXJ0ID0gcmFuZ2Vfc3RhcnQ7Ci0JCXdiYy0+bnJfdG9fd3JpdGUgPSB0b193cml0ZSArCi0JCQkJd2JjLT5wYWdlc19za2lwcGVkIC0gcGFnZXNfc2tpcHBlZDsKLQkJd2JjLT5wYWdlc19za2lwcGVkID0gcGFnZXNfc2tpcHBlZDsKLQkJZ290byByZXN0YXJ0X2xvb3A7Ci0JfQorCS8qIFVwZGF0ZSBpbmRleCAqLworCWluZGV4ICs9IHBhZ2VzX3dyaXR0ZW47CisJaWYgKHdiYy0+cmFuZ2VfY3ljbGljIHx8IChyYW5nZV93aG9sZSAmJiB3YmMtPm5yX3RvX3dyaXRlID4gMCkpCisJCS8qCisJCSAqIHNldCB0aGUgd3JpdGViYWNrX2luZGV4IHNvIHRoYXQgcmFuZ2VfY3ljbGljCisJCSAqIG1vZGUgd2lsbCB3cml0ZSBpdCBiYWNrIGxhdGVyCisJCSAqLworCQltYXBwaW5nLT53cml0ZWJhY2tfaW5kZXggPSBpbmRleDsKIAogb3V0X3dyaXRlcGFnZXM6Ci0Jd2JjLT5ucl90b193cml0ZSA9IHRvX3dyaXRlIC0gbnJfdG9fd3JpdGVidW1wOwotCXdiYy0+cmFuZ2Vfc3RhcnQgPSByYW5nZV9zdGFydDsKKwlpZiAoIW5vX25yd3JpdGVfaW5kZXhfdXBkYXRlKQorCQl3YmMtPm5vX25yd3JpdGVfaW5kZXhfdXBkYXRlID0gMDsKKwl3YmMtPm5yX3RvX3dyaXRlIC09IG5yX3RvX3dyaXRlYnVtcDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00MTc1LDcgKzQxOTQsNiBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAmKGVpLT52ZnNfaW5vZGUpOwogCXU2NCBpX2Jsb2NrcyA9IGlub2RlLT5pX2Jsb2NrczsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7Ci0JaW50IGVyciA9IDA7CiAKIAlpZiAoaV9ibG9ja3MgPD0gfjBVKSB7CiAJCS8qCkBAIC00MTg1LDM2ICs0MjAzLDI3IEBACiAJCXJhd19pbm9kZS0+aV9ibG9ja3NfbG8gICA9IGNwdV90b19sZTMyKGlfYmxvY2tzKTsKIAkJcmF3X2lub2RlLT5pX2Jsb2Nrc19oaWdoID0gMDsKIAkJZWktPmlfZmxhZ3MgJj0gfkVYVDRfSFVHRV9GSUxFX0ZMOwotCX0gZWxzZSBpZiAoaV9ibG9ja3MgPD0gMHhmZmZmZmZmZmZmZmZVTEwpIHsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghRVhUNF9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSkKKwkJcmV0dXJuIC1FRkJJRzsKKworCWlmIChpX2Jsb2NrcyA8PSAweGZmZmZmZmZmZmZmZlVMTCkgewogCQkvKgogCQkgKiBpX2Jsb2NrcyBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gYSA0OCBiaXQgdmFyaWFibGUKIAkJICogYXMgbXVsdGlwbGUgb2YgNTEyIGJ5dGVzCiAJCSAqLwotCQllcnIgPSBleHQ0X3VwZGF0ZV9yb2NvbXBhdF9mZWF0dXJlKGhhbmRsZSwgc2IsCi0JCQkJCSAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvICBlcnJfb3V0OwotCQkvKiBpX2Jsb2NrIGlzIHN0b3JlZCBpbiB0aGUgc3BsaXQgIDQ4IGJpdCBmaWVsZHMgKi8KIAkJcmF3X2lub2RlLT5pX2Jsb2Nrc19sbyAgID0gY3B1X3RvX2xlMzIoaV9ibG9ja3MpOwogCQlyYXdfaW5vZGUtPmlfYmxvY2tzX2hpZ2ggPSBjcHVfdG9fbGUxNihpX2Jsb2NrcyA+PiAzMik7CiAJCWVpLT5pX2ZsYWdzICY9IH5FWFQ0X0hVR0VfRklMRV9GTDsKIAl9IGVsc2UgewotCQkvKgotCQkgKiBpX2Jsb2NrcyBzaG91bGQgYmUgcmVwcmVzZW50ZWQgaW4gYSA0OCBiaXQgdmFyaWFibGUKLQkJICogYXMgbXVsdGlwbGUgb2YgIGZpbGUgc3lzdGVtIGJsb2NrIHNpemUKLQkJICovCi0JCWVyciA9IGV4dDRfdXBkYXRlX3JvY29tcGF0X2ZlYXR1cmUoaGFuZGxlLCBzYiwKLQkJCQkJICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gIGVycl9vdXQ7CiAJCWVpLT5pX2ZsYWdzIHw9IEVYVDRfSFVHRV9GSUxFX0ZMOwogCQkvKiBpX2Jsb2NrIGlzIHN0b3JlZCBpbiBmaWxlIHN5c3RlbSBibG9jayBzaXplICovCiAJCWlfYmxvY2tzID0gaV9ibG9ja3MgPj4gKGlub2RlLT5pX2Jsa2JpdHMgLSA5KTsKIAkJcmF3X2lub2RlLT5pX2Jsb2Nrc19sbyAgID0gY3B1X3RvX2xlMzIoaV9ibG9ja3MpOwogCQlyYXdfaW5vZGUtPmlfYmxvY2tzX2hpZ2ggPSBjcHVfdG9fbGUxNihpX2Jsb2NrcyA+PiAzMik7CiAJfQotZXJyX291dDoKLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCBiNTgwNzE0Li5kZmUxN2ExIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYworKysgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtMjMwMCw2ICsyMzAwLDcgQEAKIAl9CiAKIAlJTklUX0xJU1RfSEVBRCgmbWV0YV9ncm91cF9pbmZvW2ldLT5iYl9wcmVhbGxvY19saXN0KTsKKwltZXRhX2dyb3VwX2luZm9baV0tPmJiX2ZyZWVfcm9vdC5yYl9ub2RlID0gTlVMTDs7CiAKICNpZmRlZiBET1VCTEVfQ0hFQ0sKIAl7CkBAIC0yNTIyLDkgKzI1MjMsNiBAQAogCX0KIAogCXNwaW5fbG9ja19pbml0KCZzYmktPnNfbWRfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnNiaS0+c19hY3RpdmVfdHJhbnNhY3Rpb24pOwotCUlOSVRfTElTVF9IRUFEKCZzYmktPnNfY2xvc2VkX3RyYW5zYWN0aW9uKTsKLQlJTklUX0xJU1RfSEVBRCgmc2JpLT5zX2NvbW1pdHRlZF90cmFuc2FjdGlvbik7CiAJc3Bpbl9sb2NrX2luaXQoJnNiaS0+c19iYWxfbG9jayk7CiAKIAlzYmktPnNfbWJfbWF4X3RvX3NjYW4gPSBNQl9ERUZBVUxUX01BWF9UT19TQ0FOOwpAQCAtMjU1Myw2ICsyNTUxLDggQEAKIAlleHQ0X21iX2luaXRfcGVyX2Rldl9wcm9jKHNiKTsKIAlleHQ0X21iX2hpc3RvcnlfaW5pdChzYik7CiAKKwlzYmktPnNfam91cm5hbC0+al9jb21taXRfY2FsbGJhY2sgPSByZWxlYXNlX2Jsb2Nrc19vbl9jb21taXQ7CisKIAlwcmludGsoS0VSTl9JTkZPICJFWFQ0LWZzOiBtYmFsbG9jIGVuYWJsZWRcbiIpOwogCXJldHVybiAwOwogfQpAQCAtMjU2OCw3ICsyNTY4LDcgQEAKIAkJcGEgPSBsaXN0X2VudHJ5KGN1ciwgc3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UsIHBhX2dyb3VwX2xpc3QpOwogCQlsaXN0X2RlbCgmcGEtPnBhX2dyb3VwX2xpc3QpOwogCQljb3VudCsrOwotCQlrZnJlZShwYSk7CisJCWttZW1fY2FjaGVfZnJlZShleHQ0X3BzcGFjZV9jYWNoZXAsIHBhKTsKIAl9CiAJaWYgKGNvdW50KQogCQltYl9kZWJ1ZygibWJhbGxvYzogJXUgUEFzIGxlZnRcbiIsIGNvdW50KTsKQEAgLTI1ODIsMTUgKzI1ODIsNiBAQAogCXN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmdyaW5mbzsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKIAotCS8qIHJlbGVhc2UgZnJlZWQsIG5vbi1jb21taXR0ZWQgYmxvY2tzICovCi0Jc3Bpbl9sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0JbGlzdF9zcGxpY2VfaW5pdCgmc2JpLT5zX2Nsb3NlZF90cmFuc2FjdGlvbiwKLQkJCSZzYmktPnNfY29tbWl0dGVkX3RyYW5zYWN0aW9uKTsKLQlsaXN0X3NwbGljZV9pbml0KCZzYmktPnNfYWN0aXZlX3RyYW5zYWN0aW9uLAotCQkJJnNiaS0+c19jb21taXR0ZWRfdHJhbnNhY3Rpb24pOwotCXNwaW5fdW5sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0JZXh0NF9tYl9mcmVlX2NvbW1pdHRlZF9ibG9ja3Moc2IpOwotCiAJaWYgKHNiaS0+c19ncm91cF9pbmZvKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBzYmktPnNfZ3JvdXBzX2NvdW50OyBpKyspIHsKIAkJCWdyaW5mbyA9IGV4dDRfZ2V0X2dyb3VwX2luZm8oc2IsIGkpOwpAQCAtMjY0NCw2MSArMjYzNSw1NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQKLWV4dDRfbWJfZnJlZV9jb21taXR0ZWRfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGpiZDIgbGF5ZXIgb25jZSB0aGUgY29tbWl0IGhhcyBmaW5pc2hlZCwKKyAqIHNvIHdlIGtub3cgd2UgY2FuIGZyZWUgdGhlIGJsb2NrcyB0aGF0IHdlcmUgcmVsZWFzZWQgd2l0aCB0aGF0IGNvbW1pdC4KKyAqLworc3RhdGljIHZvaWQgcmVsZWFzZV9ibG9ja3Nfb25fY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdHJhbnNhY3Rpb25fdCAqdHhuKQogewotCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwotCWludCBlcnI7Ci0JaW50IGk7Ci0JaW50IGNvdW50ID0gMDsKLQlpbnQgY291bnQyID0gMDsKLQlzdHJ1Y3QgZXh0NF9mcmVlX21ldGFkYXRhICptZDsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gam91cm5hbC0+al9wcml2YXRlOwogCXN0cnVjdCBleHQ0X2J1ZGR5IGU0YjsKKwlzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpkYjsKKwlpbnQgZXJyLCBjb3VudCA9IDAsIGNvdW50MiA9IDA7CisJc3RydWN0IGV4dDRfZnJlZV9kYXRhICplbnRyeTsKKwlleHQ0X2ZzYmxrX3QgZGlzY2FyZF9ibG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbHRtcDsKIAotCWlmIChsaXN0X2VtcHR5KCZzYmktPnNfY29tbWl0dGVkX3RyYW5zYWN0aW9uKSkKLQkJcmV0dXJuOwotCi0JLyogdGhlcmUgaXMgY29tbWl0dGVkIGJsb2NrcyB0byBiZSBmcmVlZCB5ZXQgKi8KLQlkbyB7Ci0JCS8qIGdldCBuZXh0IGFycmF5IG9mIGJsb2NrcyAqLwotCQltZCA9IE5VTEw7Ci0JCXNwaW5fbG9jaygmc2JpLT5zX21kX2xvY2spOwotCQlpZiAoIWxpc3RfZW1wdHkoJnNiaS0+c19jb21taXR0ZWRfdHJhbnNhY3Rpb24pKSB7Ci0JCQltZCA9IGxpc3RfZW50cnkoc2JpLT5zX2NvbW1pdHRlZF90cmFuc2FjdGlvbi5uZXh0LAotCQkJCQlzdHJ1Y3QgZXh0NF9mcmVlX21ldGFkYXRhLCBsaXN0KTsKLQkJCWxpc3RfZGVsKCZtZC0+bGlzdCk7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJnNiaS0+c19tZF9sb2NrKTsKLQotCQlpZiAobWQgPT0gTlVMTCkKLQkJCWJyZWFrOworCWxpc3RfZm9yX2VhY2hfc2FmZShsLCBsdG1wLCAmdHhuLT50X3ByaXZhdGVfbGlzdCkgeworCQllbnRyeSA9IGxpc3RfZW50cnkobCwgc3RydWN0IGV4dDRfZnJlZV9kYXRhLCBsaXN0KTsKIAogCQltYl9kZWJ1ZygiZ29ubmEgZnJlZSAldSBibG9ja3MgaW4gZ3JvdXAgJWx1ICgweCVwKToiLAotCQkJCW1kLT5udW0sIG1kLT5ncm91cCwgbWQpOworCQkJIGVudHJ5LT5jb3VudCwgZW50cnktPmdyb3VwLCBlbnRyeSk7CiAKLQkJZXJyID0gZXh0NF9tYl9sb2FkX2J1ZGR5KHNiLCBtZC0+Z3JvdXAsICZlNGIpOworCQllcnIgPSBleHQ0X21iX2xvYWRfYnVkZHkoc2IsIGVudHJ5LT5ncm91cCwgJmU0Yik7CiAJCS8qIHdlIGV4cGVjdCB0byBmaW5kIGV4aXN0aW5nIGJ1ZGR5IGJlY2F1c2UgaXQncyBwaW5uZWQgKi8KIAkJQlVHX09OKGVyciAhPSAwKTsKIAorCQlkYiA9IGU0Yi5iZF9pbmZvOwogCQkvKiB0aGVyZSBhcmUgYmxvY2tzIHRvIHB1dCBpbiBidWRkeSB0byBtYWtlIHRoZW0gcmVhbGx5IGZyZWUgKi8KLQkJY291bnQgKz0gbWQtPm51bTsKKwkJY291bnQgKz0gZW50cnktPmNvdW50OwogCQljb3VudDIrKzsKLQkJZXh0NF9sb2NrX2dyb3VwKHNiLCBtZC0+Z3JvdXApOwotCQlmb3IgKGkgPSAwOyBpIDwgbWQtPm51bTsgaSsrKSB7Ci0JCQltYl9kZWJ1ZygiICV1IiwgbWQtPmJsb2Nrc1tpXSk7Ci0JCQltYl9mcmVlX2Jsb2NrcyhOVUxMLCAmZTRiLCBtZC0+YmxvY2tzW2ldLCAxKTsKKwkJZXh0NF9sb2NrX2dyb3VwKHNiLCBlbnRyeS0+Z3JvdXApOworCQkvKiBUYWtlIGl0IG91dCBvZiBwZXIgZ3JvdXAgcmIgdHJlZSAqLworCQlyYl9lcmFzZSgmZW50cnktPm5vZGUsICYoZGItPmJiX2ZyZWVfcm9vdCkpOworCQltYl9mcmVlX2Jsb2NrcyhOVUxMLCAmZTRiLCBlbnRyeS0+c3RhcnRfYmxrLCBlbnRyeS0+Y291bnQpOworCisJCWlmICghZGItPmJiX2ZyZWVfcm9vdC5yYl9ub2RlKSB7CisJCQkvKiBObyBtb3JlIGl0ZW1zIGluIHRoZSBwZXIgZ3JvdXAgcmIgdHJlZQorCQkJICogYmFsYW5jZSByZWZjb3VudHMgZnJvbSBleHQ0X21iX2ZyZWVfbWV0YWRhdGEoKQorCQkJICovCisJCQlwYWdlX2NhY2hlX3JlbGVhc2UoZTRiLmJkX2J1ZGR5X3BhZ2UpOworCQkJcGFnZV9jYWNoZV9yZWxlYXNlKGU0Yi5iZF9iaXRtYXBfcGFnZSk7CiAJCX0KLQkJbWJfZGVidWcoIlxuIik7Ci0JCWV4dDRfdW5sb2NrX2dyb3VwKHNiLCBtZC0+Z3JvdXApOworCQlleHQ0X3VubG9ja19ncm91cChzYiwgZW50cnktPmdyb3VwKTsKKwkJZGlzY2FyZF9ibG9jayA9IChleHQ0X2ZzYmxrX3QpIGVudHJ5LT5ncm91cCAqIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikKKwkJCSsgZW50cnktPnN0YXJ0X2JsaworCQkJKyBsZTMyX3RvX2NwdShFWFQ0X1NCKHNiKS0+c19lcy0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwkJdHJhY2VfbWFyayhleHQ0X2Rpc2NhcmRfYmxvY2tzLCAiZGV2ICVzIGJsayAlbGx1IGNvdW50ICV1Iiwgc2ItPnNfaWQsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBkaXNjYXJkX2Jsb2NrLCBlbnRyeS0+Y291bnQpOworCQlzYl9pc3N1ZV9kaXNjYXJkKHNiLCBkaXNjYXJkX2Jsb2NrLCBlbnRyeS0+Y291bnQpOwogCi0JCS8qIGJhbGFuY2UgcmVmY291bnRzIGZyb20gZXh0NF9tYl9mcmVlX21ldGFkYXRhKCkgKi8KLQkJcGFnZV9jYWNoZV9yZWxlYXNlKGU0Yi5iZF9idWRkeV9wYWdlKTsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKGU0Yi5iZF9iaXRtYXBfcGFnZSk7Ci0KLQkJa2ZyZWUobWQpOworCQlrbWVtX2NhY2hlX2ZyZWUoZXh0NF9mcmVlX2V4dF9jYWNoZXAsIGVudHJ5KTsKIAkJZXh0NF9tYl9yZWxlYXNlX2Rlc2MoJmU0Yik7Ci0KLQl9IHdoaWxlIChtZCk7CisJfQogCiAJbWJfZGVidWcoImZyZWVkICV1IGJsb2NrcyBpbiAldSBzdHJ1Y3R1cmVzXG4iLCBjb3VudCwgY291bnQyKTsKIH0KQEAgLTI3MTIsNiArMjY5OSw3IEBACiAKIHN0YXRpYyBpbnQgZXh0NF9tYl9pbml0X3Blcl9kZXZfcHJvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogeworI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJbW9kZV90IG1vZGUgPSBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1I7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwpAQCAtMjczNSwxMCArMjcyMywxNCBAQAogCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfTUFYX1RPX1NDQU5fTkFNRSwgc2JpLT5zX3Byb2MpOwogCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfU1RBVFNfTkFNRSwgc2JpLT5zX3Byb2MpOwogCXJldHVybiAtRU5PTUVNOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW50IGV4dDRfbWJfZGVzdHJveV9wZXJfZGV2X3Byb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwogCiAJaWYgKHNiaS0+c19wcm9jID09IE5VTEwpCkBAIC0yNzUwLDcgKzI3NDIsNyBAQAogCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfTUlOX1RPX1NDQU5fTkFNRSwgc2JpLT5zX3Byb2MpOwogCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfTUFYX1RPX1NDQU5fTkFNRSwgc2JpLT5zX3Byb2MpOwogCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfU1RBVFNfTkFNRSwgc2JpLT5zX3Byb2MpOwotCisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjc3MSw2ICsyNzYzLDE2IEBACiAJCWttZW1fY2FjaGVfZGVzdHJveShleHQ0X3BzcGFjZV9jYWNoZXApOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisKKwlleHQ0X2ZyZWVfZXh0X2NhY2hlcCA9CisJCWttZW1fY2FjaGVfY3JlYXRlKCJleHQ0X2ZyZWVfYmxvY2tfZXh0ZW50cyIsCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGV4dDRfZnJlZV9kYXRhKSwKKwkJCQkgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULCBOVUxMKTsKKwlpZiAoZXh0NF9mcmVlX2V4dF9jYWNoZXAgPT0gTlVMTCkgeworCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9wc3BhY2VfY2FjaGVwKTsKKwkJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfYWNfY2FjaGVwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yNzc5LDYgKzI3ODEsNyBAQAogCS8qIFhYWDogc3luY2hyb25pemVfcmN1KCk7ICovCiAJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfcHNwYWNlX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfYWNfY2FjaGVwKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9mcmVlX2V4dF9jYWNoZXApOwogfQogCiAKQEAgLTQzMjQsOCArNDMyNyw2IEBACiAJCWdvdG8gb3V0MTsKIAl9CiAKLQlleHQ0X21iX3BvbGxfbmV3X3RyYW5zYWN0aW9uKHNiLCBoYW5kbGUpOwotCiAJKmVycnAgPSBleHQ0X21iX2luaXRpYWxpemVfY29udGV4dChhYywgYXIpOwogCWlmICgqZXJycCkgewogCQlhci0+bGVuID0gMDsKQEAgLTQzODQsMzUgKzQzODUsMjAgQEAKIAogCXJldHVybiBibG9jazsKIH0KLXN0YXRpYyB2b2lkIGV4dDRfbWJfcG9sbF9uZXdfdHJhbnNhY3Rpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCQkJCWhhbmRsZV90ICpoYW5kbGUpCisKKy8qCisgKiBXZSBjYW4gbWVyZ2UgdHdvIGZyZWUgZGF0YSBleHRlbnRzIG9ubHkgaWYgdGhlIHBoeXNpY2FsIGJsb2NrcworICogYXJlIGNvbnRpZ3VvdXMsIEFORCB0aGUgZXh0ZW50cyB3ZXJlIGZyZWVkIGJ5IHRoZSBzYW1lIHRyYW5zYWN0aW9uLAorICogQU5EIHRoZSBibG9ja3MgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBncm91cC4KKyAqLworc3RhdGljIGludCBjYW5fbWVyZ2Uoc3RydWN0IGV4dDRfZnJlZV9kYXRhICplbnRyeTEsCisJCQlzdHJ1Y3QgZXh0NF9mcmVlX2RhdGEgKmVudHJ5MikKIHsKLQlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKLQotCWlmIChzYmktPnNfbGFzdF90cmFuc2FjdGlvbiA9PSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKQotCQlyZXR1cm47Ci0KLQkvKiBuZXcgdHJhbnNhY3Rpb24hIHRpbWUgdG8gY2xvc2UgbGFzdCBvbmUgYW5kIGZyZWUgYmxvY2tzIGZvcgotCSAqIGNvbW1pdHRlZCB0cmFuc2FjdGlvbi4gd2Uga25vdyB0aGF0IG9ubHkgdHJhbnNhY3Rpb24gY2FuIGJlCi0JICogYWN0aXZlLCBzbyBwcmV2aW9zIHRyYW5zYWN0aW9uIGNhbiBiZSBiZWluZyBsb2dnZWQgYW5kIHdlCi0JICoga25vdyB0aGF0IHRyYW5zYWN0aW9uIGJlZm9yZSBwcmV2aW91cyBpcyBrbm93biB0byBiZSBhbHJlYWR5Ci0JICogbG9nZ2VkLiB0aGlzIG1lYW5zIHRoYXQgbm93IHdlIG1heSBmcmVlIGJsb2NrcyBmcmVlZCBpbiBhbGwKLQkgKiB0cmFuc2FjdGlvbnMgYmVmb3JlIHByZXZpb3VzIG9uZS4gaG9wZSBJJ20gY2xlYXIgZW5vdWdoIC4uLiAqLwotCi0Jc3Bpbl9sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0JaWYgKHNiaS0+c19sYXN0X3RyYW5zYWN0aW9uICE9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQpIHsKLQkJbWJfZGVidWcoIm5ldyB0cmFuc2FjdGlvbiAlbHUsIG9sZCAlbHVcbiIsCi0JCQkJKHVuc2lnbmVkIGxvbmcpIGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQsCi0JCQkJKHVuc2lnbmVkIGxvbmcpIHNiaS0+c19sYXN0X3RyYW5zYWN0aW9uKTsKLQkJbGlzdF9zcGxpY2VfaW5pdCgmc2JpLT5zX2Nsb3NlZF90cmFuc2FjdGlvbiwKLQkJCQkmc2JpLT5zX2NvbW1pdHRlZF90cmFuc2FjdGlvbik7Ci0JCWxpc3Rfc3BsaWNlX2luaXQoJnNiaS0+c19hY3RpdmVfdHJhbnNhY3Rpb24sCi0JCQkJJnNiaS0+c19jbG9zZWRfdHJhbnNhY3Rpb24pOwotCQlzYmktPnNfbGFzdF90cmFuc2FjdGlvbiA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQ7Ci0JfQotCXNwaW5fdW5sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0KLQlleHQ0X21iX2ZyZWVfY29tbWl0dGVkX2Jsb2NrcyhzYik7CisJaWYgKChlbnRyeTEtPnRfdGlkID09IGVudHJ5Mi0+dF90aWQpICYmCisJICAgIChlbnRyeTEtPmdyb3VwID09IGVudHJ5Mi0+Z3JvdXApICYmCisJICAgICgoZW50cnkxLT5zdGFydF9ibGsgKyBlbnRyeTEtPmNvdW50KSA9PSBlbnRyeTItPnN0YXJ0X2JsaykpCisJCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludApAQCAtNDQyMiw1NyArNDQwOCw4MCBAQAogCXN0cnVjdCBleHQ0X2dyb3VwX2luZm8gKmRiID0gZTRiLT5iZF9pbmZvOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBlNGItPmJkX3NiOwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwotCXN0cnVjdCBleHQ0X2ZyZWVfbWV0YWRhdGEgKm1kOwotCWludCBpOworCXN0cnVjdCBleHQ0X2ZyZWVfZGF0YSAqZW50cnksICpuZXdfZW50cnk7CisJc3RydWN0IHJiX25vZGUgKipuID0gJmRiLT5iYl9mcmVlX3Jvb3QucmJfbm9kZSwgKm5vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEwsICpuZXdfbm9kZTsKKwogCiAJQlVHX09OKGU0Yi0+YmRfYml0bWFwX3BhZ2UgPT0gTlVMTCk7CiAJQlVHX09OKGU0Yi0+YmRfYnVkZHlfcGFnZSA9PSBOVUxMKTsKIAorCW5ld19lbnRyeSAgPSBrbWVtX2NhY2hlX2FsbG9jKGV4dDRfZnJlZV9leHRfY2FjaGVwLCBHRlBfTk9GUyk7CisJbmV3X2VudHJ5LT5zdGFydF9ibGsgPSBibG9jazsKKwluZXdfZW50cnktPmdyb3VwICA9IGdyb3VwOworCW5ld19lbnRyeS0+Y291bnQgPSBjb3VudDsKKwluZXdfZW50cnktPnRfdGlkID0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X3RpZDsKKwluZXdfbm9kZSA9ICZuZXdfZW50cnktPm5vZGU7CisKIAlleHQ0X2xvY2tfZ3JvdXAoc2IsIGdyb3VwKTsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQltZCA9IGRiLT5iYl9tZF9jdXI7Ci0JCWlmIChtZCAmJiBkYi0+YmJfdGlkICE9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQpIHsKLQkJCWRiLT5iYl9tZF9jdXIgPSBOVUxMOwotCQkJbWQgPSBOVUxMOwotCQl9Ci0KLQkJaWYgKG1kID09IE5VTEwpIHsKLQkJCWV4dDRfdW5sb2NrX2dyb3VwKHNiLCBncm91cCk7Ci0JCQltZCA9IGttYWxsb2Moc2l6ZW9mKCptZCksIEdGUF9OT0ZTKTsKLQkJCWlmIChtZCA9PSBOVUxMKQotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJbWQtPm51bSA9IDA7Ci0JCQltZC0+Z3JvdXAgPSBncm91cDsKLQotCQkJZXh0NF9sb2NrX2dyb3VwKHNiLCBncm91cCk7Ci0JCQlpZiAoZGItPmJiX21kX2N1ciA9PSBOVUxMKSB7Ci0JCQkJc3Bpbl9sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0JCQkJbGlzdF9hZGQoJm1kLT5saXN0LCAmc2JpLT5zX2FjdGl2ZV90cmFuc2FjdGlvbik7Ci0JCQkJc3Bpbl91bmxvY2soJnNiaS0+c19tZF9sb2NrKTsKLQkJCQkvKiBwcm90ZWN0IGJ1ZGR5IGNhY2hlIGZyb20gYmVpbmcgZnJlZWQsCi0JCQkJICogb3RoZXJ3aXNlIHdlJ2xsIHJlZnJlc2ggaXQgZnJvbQotCQkJCSAqIG9uLWRpc2sgYml0bWFwIGFuZCBsb3NlIG5vdC15ZXQtYXZhaWxhYmxlCi0JCQkJICogYmxvY2tzICovCi0JCQkJcGFnZV9jYWNoZV9nZXQoZTRiLT5iZF9idWRkeV9wYWdlKTsKLQkJCQlwYWdlX2NhY2hlX2dldChlNGItPmJkX2JpdG1hcF9wYWdlKTsKLQkJCQlkYi0+YmJfbWRfY3VyID0gbWQ7Ci0JCQkJZGItPmJiX3RpZCA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQ7Ci0JCQkJbWJfZGVidWcoIm5ldyBtZCAweCVwIGZvciBncm91cCAlbHVcbiIsCi0JCQkJCQltZCwgbWQtPmdyb3VwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJa2ZyZWUobWQpOwotCQkJCW1kID0gZGItPmJiX21kX2N1cjsKLQkJCX0KLQkJfQotCi0JCUJVR19PTihtZC0+bnVtID49IEVYVDRfQkJfTUFYX0JMT0NLUyk7Ci0JCW1kLT5ibG9ja3NbbWQtPm51bV0gPSBibG9jayArIGk7Ci0JCW1kLT5udW0rKzsKLQkJaWYgKG1kLT5udW0gPT0gRVhUNF9CQl9NQVhfQkxPQ0tTKSB7Ci0JCQkvKiBubyBtb3JlIHNwYWNlLCBwdXQgZnVsbCBjb250YWluZXIgb24gYSBzYidzIGxpc3QgKi8KLQkJCWRiLT5iYl9tZF9jdXIgPSBOVUxMOworCWlmICghKm4pIHsKKwkJLyogZmlyc3QgZnJlZSBibG9jayBleGVudC4gV2UgbmVlZCB0bworCQkgICBwcm90ZWN0IGJ1ZGR5IGNhY2hlIGZyb20gYmVpbmcgZnJlZWQsCisJCSAqIG90aGVyd2lzZSB3ZSdsbCByZWZyZXNoIGl0IGZyb20KKwkJICogb24tZGlzayBiaXRtYXAgYW5kIGxvc2Ugbm90LXlldC1hdmFpbGFibGUKKwkJICogYmxvY2tzICovCisJCXBhZ2VfY2FjaGVfZ2V0KGU0Yi0+YmRfYnVkZHlfcGFnZSk7CisJCXBhZ2VfY2FjaGVfZ2V0KGU0Yi0+YmRfYml0bWFwX3BhZ2UpOworCX0KKwl3aGlsZSAoKm4pIHsKKwkJcGFyZW50ID0gKm47CisJCWVudHJ5ID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgZXh0NF9mcmVlX2RhdGEsIG5vZGUpOworCQlpZiAoYmxvY2sgPCBlbnRyeS0+c3RhcnRfYmxrKQorCQkJbiA9ICYoKm4pLT5yYl9sZWZ0OworCQllbHNlIGlmIChibG9jayA+PSAoZW50cnktPnN0YXJ0X2JsayArIGVudHJ5LT5jb3VudCkpCisJCQluID0gJigqbiktPnJiX3JpZ2h0OworCQllbHNlIHsKKwkJCWV4dDRfZXJyb3Ioc2IsIF9fZnVuY19fLAorCQkJICAgICJEb3VibGUgZnJlZSBvZiBibG9ja3MgJWQgKCVkICVkKVxuIiwKKwkJCSAgICBibG9jaywgZW50cnktPnN0YXJ0X2JsaywgZW50cnktPmNvdW50KTsKKwkJCXJldHVybiAwOwogCQl9CiAJfQorCisJcmJfbGlua19ub2RlKG5ld19ub2RlLCBwYXJlbnQsIG4pOworCXJiX2luc2VydF9jb2xvcihuZXdfbm9kZSwgJmRiLT5iYl9mcmVlX3Jvb3QpOworCisJLyogTm93IHRyeSB0byBzZWUgdGhlIGV4dGVudCBjYW4gYmUgbWVyZ2VkIHRvIGxlZnQgYW5kIHJpZ2h0ICovCisJbm9kZSA9IHJiX3ByZXYobmV3X25vZGUpOworCWlmIChub2RlKSB7CisJCWVudHJ5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGV4dDRfZnJlZV9kYXRhLCBub2RlKTsKKwkJaWYgKGNhbl9tZXJnZShlbnRyeSwgbmV3X2VudHJ5KSkgeworCQkJbmV3X2VudHJ5LT5zdGFydF9ibGsgPSBlbnRyeS0+c3RhcnRfYmxrOworCQkJbmV3X2VudHJ5LT5jb3VudCArPSBlbnRyeS0+Y291bnQ7CisJCQlyYl9lcmFzZShub2RlLCAmKGRiLT5iYl9mcmVlX3Jvb3QpKTsKKwkJCXNwaW5fbG9jaygmc2JpLT5zX21kX2xvY2spOworCQkJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZzYmktPnNfbWRfbG9jayk7CisJCQlrbWVtX2NhY2hlX2ZyZWUoZXh0NF9mcmVlX2V4dF9jYWNoZXAsIGVudHJ5KTsKKwkJfQorCX0KKworCW5vZGUgPSByYl9uZXh0KG5ld19ub2RlKTsKKwlpZiAobm9kZSkgeworCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBleHQ0X2ZyZWVfZGF0YSwgbm9kZSk7CisJCWlmIChjYW5fbWVyZ2UobmV3X2VudHJ5LCBlbnRyeSkpIHsKKwkJCW5ld19lbnRyeS0+Y291bnQgKz0gZW50cnktPmNvdW50OworCQkJcmJfZXJhc2Uobm9kZSwgJihkYi0+YmJfZnJlZV9yb290KSk7CisJCQlzcGluX2xvY2soJnNiaS0+c19tZF9sb2NrKTsKKwkJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCQlzcGluX3VubG9jaygmc2JpLT5zX21kX2xvY2spOworCQkJa21lbV9jYWNoZV9mcmVlKGV4dDRfZnJlZV9leHRfY2FjaGVwLCBlbnRyeSk7CisJCX0KKwl9CisJLyogQWRkIHRoZSBleHRlbnQgdG8gdHJhbnNhY3Rpb24ncyBwcml2YXRlIGxpc3QgKi8KKwlzcGluX2xvY2soJnNiaS0+c19tZF9sb2NrKTsKKwlsaXN0X2FkZCgmbmV3X2VudHJ5LT5saXN0LCAmaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X3ByaXZhdGVfbGlzdCk7CisJc3Bpbl91bmxvY2soJnNiaS0+c19tZF9sb2NrKTsKIAlleHQ0X3VubG9ja19ncm91cChzYiwgZ3JvdXApOwogCXJldHVybiAwOwogfQpAQCAtNDUwMCw4ICs0NTA5LDYgQEAKIAogCSpmcmVlZCA9IDA7CiAKLQlleHQ0X21iX3BvbGxfbmV3X3RyYW5zYWN0aW9uKHNiLCBoYW5kbGUpOwotCiAJc2JpID0gRVhUNF9TQihzYik7CiAJZXMgPSBFWFQ0X1NCKHNiKS0+c19lczsKIAlpZiAoYmxvY2sgPCBsZTMyX3RvX2NwdShlcy0+c19maXJzdF9kYXRhX2Jsb2NrKSB8fApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmggYi9mcy9leHQ0L21iYWxsb2MuaAppbmRleCBiM2I0ODI4Li5iNWRmZjFmIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuaAorKysgYi9mcy9leHQ0L21iYWxsb2MuaApAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KICNpbmNsdWRlICJleHQ0X2piZDIuaCIKICNpbmNsdWRlICJleHQ0LmgiCiAjaW5jbHVkZSAiZ3JvdXAuaCIKQEAgLTk4LDIzICsxMDAsMjkgQEAKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpleHQ0X3BzcGFjZV9jYWNoZXA7CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmV4dDRfYWNfY2FjaGVwOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpleHQ0X2ZyZWVfZXh0X2NhY2hlcDsKIAotI2lmZGVmIEVYVDRfQkJfTUFYX0JMT0NLUwotI3VuZGVmIEVYVDRfQkJfTUFYX0JMT0NLUwotI2VuZGlmCi0jZGVmaW5lIEVYVDRfQkJfTUFYX0JMT0NLUwkzMAorc3RydWN0IGV4dDRfZnJlZV9kYXRhIHsKKwkvKiB0aGlzIGxpbmtzIHRoZSBmcmVlIGJsb2NrIGluZm9ybWF0aW9uIGZyb20gZ3JvdXBfaW5mbyAqLworCXN0cnVjdCByYl9ub2RlIG5vZGU7CiAKLXN0cnVjdCBleHQ0X2ZyZWVfbWV0YWRhdGEgewotCWV4dDRfZ3JvdXBfdCBncm91cDsKLQl1bnNpZ25lZCBzaG9ydCBudW07Ci0JZXh0NF9ncnBibGtfdCAgYmxvY2tzW0VYVDRfQkJfTUFYX0JMT0NLU107CisJLyogdGhpcyBsaW5rcyB0aGUgZnJlZSBibG9jayBpbmZvcm1hdGlvbiBmcm9tIGV4dDRfc2JfaW5mbyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIGdyb3VwIHdoaWNoIGZyZWUgYmxvY2sgZXh0ZW50IGJlbG9uZ3MgKi8KKwlleHQ0X2dyb3VwX3QgZ3JvdXA7CisKKwkvKiBmcmVlIGJsb2NrIGV4dGVudCAqLworCWV4dDRfZ3JwYmxrX3Qgc3RhcnRfYmxrOworCWV4dDRfZ3JwYmxrX3QgY291bnQ7CisKKwkvKiB0cmFuc2FjdGlvbiB3aGljaCBmcmVlZCB0aGlzIGV4dGVudCAqLworCXRpZF90CXRfdGlkOwogfTsKIAogc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyB7CiAJdW5zaWduZWQgbG9uZwliYl9zdGF0ZTsKLQl1bnNpZ25lZCBsb25nCWJiX3RpZDsKLQlzdHJ1Y3QgZXh0NF9mcmVlX21ldGFkYXRhICpiYl9tZF9jdXI7CisJc3RydWN0IHJiX3Jvb3QgIGJiX2ZyZWVfcm9vdDsKIAl1bnNpZ25lZCBzaG9ydAliYl9maXJzdF9mcmVlOwogCXVuc2lnbmVkIHNob3J0CWJiX2ZyZWU7CiAJdW5zaWduZWQgc2hvcnQJYmJfZnJhZ21lbnRzOwpAQCAtMjYxLDggKzI2OSw2IEBACiAKIHN0YXRpYyB2b2lkIGV4dDRfbWJfZ2VuZXJhdGVfZnJvbV9wYShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpiaXRtYXAsCiAJCQkJCWV4dDRfZ3JvdXBfdCBncm91cCk7Ci1zdGF0aWMgdm9pZCBleHQ0X21iX3BvbGxfbmV3X3RyYW5zYWN0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBoYW5kbGVfdCAqKTsKLXN0YXRpYyB2b2lkIGV4dDRfbWJfZnJlZV9jb21taXR0ZWRfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIHN0YXRpYyB2b2lkIGV4dDRfbWJfcmV0dXJuX3RvX3ByZWFsbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJc3RydWN0IGV4dDRfYnVkZHkgKmU0Yiwgc2VjdG9yX3QgYmxvY2ssCiAJCQkJCWludCBjb3VudCk7CkBAIC0yNzAsNiArMjc2LDcgQEAKIAkJCXN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZSAqcGEpOwogc3RhdGljIGludCBleHQ0X21iX2luaXRfcGVyX2Rldl9wcm9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogc3RhdGljIGludCBleHQ0X21iX2Rlc3Ryb3lfcGVyX2Rldl9wcm9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworc3RhdGljIHZvaWQgcmVsZWFzZV9ibG9ja3Nfb25fY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdHJhbnNhY3Rpb25fdCAqdHhuKTsKIAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9sb2NrX2dyb3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZ3JvdXBfdCBncm91cCkKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCBmYjk0MGMyLi45YjJiMmJjIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC0zNzQsNjYgKzM3NCw2IEBACiAJICovCiB9CiAKLWludCBleHQ0X3VwZGF0ZV9jb21wYXRfZmVhdHVyZShoYW5kbGVfdCAqaGFuZGxlLAotCQkJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3UzMiBjb21wYXQpCi17Ci0JaW50IGVyciA9IDA7Ci0JaWYgKCFFWFQ0X0hBU19DT01QQVRfRkVBVFVSRShzYiwgY29tcGF0KSkgewotCQllcnIgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsCi0JCQkJRVhUNF9TQihzYiktPnNfc2JoKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JCUVYVDRfU0VUX0NPTVBBVF9GRUFUVVJFKHNiLCBjb21wYXQpOwotCQlzYi0+c19kaXJ0ID0gMTsKLQkJaGFuZGxlLT5oX3N5bmMgPSAxOwotCQlCVUZGRVJfVFJBQ0UoRVhUNF9TQihzYiktPnNfc2JoLAotCQkJCQkiY2FsbCBleHQ0X2pvdXJuYWxfZGlydHlfbWV0IGFkYXRhIik7Ci0JCWVyciA9IGV4dDRfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsCi0JCQkJRVhUNF9TQihzYiktPnNfc2JoKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotaW50IGV4dDRfdXBkYXRlX3JvY29tcGF0X2ZlYXR1cmUoaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgcm9jb21wYXQpCi17Ci0JaW50IGVyciA9IDA7Ci0JaWYgKCFFWFQ0X0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwgcm9jb21wYXQpKSB7Ci0JCWVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwKLQkJCQlFWFQ0X1NCKHNiKS0+c19zYmgpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJRVhUNF9TRVRfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsIHJvY29tcGF0KTsKLQkJc2ItPnNfZGlydCA9IDE7Ci0JCWhhbmRsZS0+aF9zeW5jID0gMTsKLQkJQlVGRkVSX1RSQUNFKEVYVDRfU0Ioc2IpLT5zX3NiaCwKLQkJCQkJImNhbGwgZXh0NF9qb3VybmFsX2RpcnR5X21ldCBhZGF0YSIpOwotCQllcnIgPSBleHQ0X2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLAotCQkJCUVYVDRfU0Ioc2IpLT5zX3NiaCk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLWludCBleHQ0X3VwZGF0ZV9pbmNvbXBhdF9mZWF0dXJlKGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTMyIGluY29tcGF0KQotewotCWludCBlcnIgPSAwOwotCWlmICghRVhUNF9IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgaW5jb21wYXQpKSB7Ci0JCWVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwKLQkJCQlFWFQ0X1NCKHNiKS0+c19zYmgpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJRVhUNF9TRVRfSU5DT01QQVRfRkVBVFVSRShzYiwgaW5jb21wYXQpOwotCQlzYi0+c19kaXJ0ID0gMTsKLQkJaGFuZGxlLT5oX3N5bmMgPSAxOwotCQlCVUZGRVJfVFJBQ0UoRVhUNF9TQihzYiktPnNfc2JoLAotCQkJCQkiY2FsbCBleHQ0X2pvdXJuYWxfZGlydHlfbWV0IGFkYXRhIik7Ci0JCWVyciA9IGV4dDRfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsCi0JCQkJRVhUNF9TQihzYiktPnNfc2JoKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQogLyoKICAqIE9wZW4gdGhlIGV4dGVybmFsIGpvdXJuYWwgZGV2aWNlCiAgKi8KQEAgLTkwNCw3ICs4NDQsNyBAQAogZW51bSB7CiAJT3B0X2JzZF9kZiwgT3B0X21pbml4X2RmLCBPcHRfZ3JwaWQsIE9wdF9ub2dycGlkLAogCU9wdF9yZXNnaWQsIE9wdF9yZXN1aWQsIE9wdF9zYiwgT3B0X2Vycl9jb250LCBPcHRfZXJyX3BhbmljLCBPcHRfZXJyX3JvLAotCU9wdF9ub3VpZDMyLCBPcHRfbm9jaGVjaywgT3B0X2RlYnVnLCBPcHRfb2xkYWxsb2MsIE9wdF9vcmxvdiwKKwlPcHRfbm91aWQzMiwgT3B0X2RlYnVnLCBPcHRfb2xkYWxsb2MsIE9wdF9vcmxvdiwKIAlPcHRfdXNlcl94YXR0ciwgT3B0X25vdXNlcl94YXR0ciwgT3B0X2FjbCwgT3B0X25vYWNsLAogCU9wdF9yZXNlcnZhdGlvbiwgT3B0X25vcmVzZXJ2YXRpb24sIE9wdF9ub2xvYWQsIE9wdF9ub2JoLCBPcHRfYmgsCiAJT3B0X2NvbW1pdCwgT3B0X2pvdXJuYWxfdXBkYXRlLCBPcHRfam91cm5hbF9pbnVtLCBPcHRfam91cm5hbF9kZXYsCkBAIC05MTUsMTEgKzg1NSwxMSBAQAogCU9wdF9qcWZtdF92ZnNvbGQsIE9wdF9qcWZtdF92ZnN2MCwgT3B0X3F1b3RhLCBPcHRfbm9xdW90YSwKIAlPcHRfaWdub3JlLCBPcHRfYmFycmllciwgT3B0X2VyciwgT3B0X3Jlc2l6ZSwgT3B0X3VzcnF1b3RhLAogCU9wdF9ncnBxdW90YSwgT3B0X2V4dGVudHMsIE9wdF9ub2V4dGVudHMsIE9wdF9pX3ZlcnNpb24sCi0JT3B0X21iYWxsb2MsIE9wdF9ub21iYWxsb2MsIE9wdF9zdHJpcGUsIE9wdF9kZWxhbGxvYywgT3B0X25vZGVsYWxsb2MsCisJT3B0X3N0cmlwZSwgT3B0X2RlbGFsbG9jLCBPcHRfbm9kZWxhbGxvYywKIAlPcHRfaW5vZGVfcmVhZGFoZWFkX2Jsa3MKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2JzZF9kZiwgImJzZGRmIn0sCiAJe09wdF9taW5peF9kZiwgIm1pbml4ZGYifSwKIAl7T3B0X2dycGlkLCAiZ3JwaWQifSwKQEAgLTkzMyw4ICs4NzMsNiBAQAogCXtPcHRfZXJyX3BhbmljLCAiZXJyb3JzPXBhbmljIn0sCiAJe09wdF9lcnJfcm8sICJlcnJvcnM9cmVtb3VudC1ybyJ9LAogCXtPcHRfbm91aWQzMiwgIm5vdWlkMzIifSwKLQl7T3B0X25vY2hlY2ssICJub2NoZWNrIn0sCi0Je09wdF9ub2NoZWNrLCAiY2hlY2s9bm9uZSJ9LAogCXtPcHRfZGVidWcsICJkZWJ1ZyJ9LAogCXtPcHRfb2xkYWxsb2MsICJvbGRhbGxvYyJ9LAogCXtPcHRfb3Jsb3YsICJvcmxvdiJ9LApAQCAtOTczLDggKzkxMSw2IEBACiAJe09wdF9leHRlbnRzLCAiZXh0ZW50cyJ9LAogCXtPcHRfbm9leHRlbnRzLCAibm9leHRlbnRzIn0sCiAJe09wdF9pX3ZlcnNpb24sICJpX3ZlcnNpb24ifSwKLQl7T3B0X21iYWxsb2MsICJtYmFsbG9jIn0sCi0Je09wdF9ub21iYWxsb2MsICJub21iYWxsb2MifSwKIAl7T3B0X3N0cmlwZSwgInN0cmlwZT0ldSJ9LAogCXtPcHRfcmVzaXplLCAicmVzaXplIn0sCiAJe09wdF9kZWxhbGxvYywgImRlbGFsbG9jIn0sCkBAIC0xMDczLDkgKzEwMDksNiBAQAogCQljYXNlIE9wdF9ub3VpZDMyOgogCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBOT19VSUQzMik7CiAJCQlicmVhazsKLQkJY2FzZSBPcHRfbm9jaGVjazoKLQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBDSEVDSyk7Ci0JCQlicmVhazsKIAkJY2FzZSBPcHRfZGVidWc6CiAJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIERFQlVHKTsKIAkJCWJyZWFrOwpAQCAtMTYxOCwxNCArMTU1MSwxNCBAQAogCQlpZiAoYmxvY2tfYml0bWFwIDwgZmlyc3RfYmxvY2sgfHwgYmxvY2tfYml0bWFwID4gbGFzdF9ibG9jaykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBleHQ0X2NoZWNrX2Rlc2NyaXB0b3JzOiAiCiAJCQkgICAgICAgIkJsb2NrIGJpdG1hcCBmb3IgZ3JvdXAgJWx1IG5vdCBpbiBncm91cCAiCi0JCQkgICAgICAgIihibG9jayAlbGx1KSEiLCBpLCBibG9ja19iaXRtYXApOworCQkJICAgICAgICIoYmxvY2sgJWxsdSkhXG4iLCBpLCBibG9ja19iaXRtYXApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaW5vZGVfYml0bWFwID0gZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGdkcCk7CiAJCWlmIChpbm9kZV9iaXRtYXAgPCBmaXJzdF9ibG9jayB8fCBpbm9kZV9iaXRtYXAgPiBsYXN0X2Jsb2NrKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IGV4dDRfY2hlY2tfZGVzY3JpcHRvcnM6ICIKIAkJCSAgICAgICAiSW5vZGUgYml0bWFwIGZvciBncm91cCAlbHUgbm90IGluIGdyb3VwICIKLQkJCSAgICAgICAiKGJsb2NrICVsbHUpISIsIGksIGlub2RlX2JpdG1hcCk7CisJCQkgICAgICAgIihibG9jayAlbGx1KSFcbiIsIGksIGlub2RlX2JpdG1hcCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpbm9kZV90YWJsZSA9IGV4dDRfaW5vZGVfdGFibGUoc2IsIGdkcCk7CkBAIC0xNjMzLDcgKzE1NjYsNyBAQAogCQkgICAgaW5vZGVfdGFibGUgKyBzYmktPnNfaXRiX3Blcl9ncm91cCAtIDEgPiBsYXN0X2Jsb2NrKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IGV4dDRfY2hlY2tfZGVzY3JpcHRvcnM6ICIKIAkJCSAgICAgICAiSW5vZGUgdGFibGUgZm9yIGdyb3VwICVsdSBub3QgaW4gZ3JvdXAgIgotCQkJICAgICAgICIoYmxvY2sgJWxsdSkhIiwgaSwgaW5vZGVfdGFibGUpOworCQkJICAgICAgICIoYmxvY2sgJWxsdSkhXG4iLCBpLCBpbm9kZV90YWJsZSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlzcGluX2xvY2soc2JfYmdsX2xvY2soc2JpLCBpKSk7CkBAIC0xNzc4LDEzICsxNzExLDEzIEBACiAgKgogICogTm90ZSwgdGhpcyBkb2VzICpub3QqIGNvbnNpZGVyIGFueSBtZXRhZGF0YSBvdmVyaGVhZCBmb3IgdmZzIGlfYmxvY2tzLgogICovCi1zdGF0aWMgbG9mZl90IGV4dDRfbWF4X3NpemUoaW50IGJsa2JpdHMpCitzdGF0aWMgbG9mZl90IGV4dDRfbWF4X3NpemUoaW50IGJsa2JpdHMsIGludCBoYXNfaHVnZV9maWxlcykKIHsKIAlsb2ZmX3QgcmVzOwogCWxvZmZfdCB1cHBlcl9saW1pdCA9IE1BWF9MRlNfRklMRVNJWkU7CiAKIAkvKiBzbWFsbCBpX2Jsb2NrcyBpbiB2ZnMgaW5vZGU/ICovCi0JaWYgKHNpemVvZihibGtjbnRfdCkgPCBzaXplb2YodTY0KSkgeworCWlmICghaGFzX2h1Z2VfZmlsZXMgfHwgc2l6ZW9mKGJsa2NudF90KSA8IHNpemVvZih1NjQpKSB7CiAJCS8qCiAJCSAqIENPTkZJR19MU0YgaXMgbm90IGVuYWJsZWQgaW1wbGllcyB0aGUgaW5vZGUKIAkJICogaV9ibG9jayByZXByZXNlbnQgdG90YWwgYmxvY2tzIGluIDUxMiBieXRlcwpAQCAtMTgxNCw3ICsxNzQ3LDcgQEAKICAqIGJsb2NrIGxpbWl0LCBhbmQgYWxzbyBhIGxpbWl0IG9mICgyXjQ4IC0gMSkgNTEyLWJ5dGUgc2VjdG9ycyBpbiBpX2Jsb2Nrcy4KICAqIFdlIG5lZWQgdG8gYmUgMSBmaWxlc3lzdGVtIGJsb2NrIGxlc3MgdGhhbiB0aGUgMl40OCBzZWN0b3IgbGltaXQuCiAgKi8KLXN0YXRpYyBsb2ZmX3QgZXh0NF9tYXhfYml0bWFwX3NpemUoaW50IGJpdHMpCitzdGF0aWMgbG9mZl90IGV4dDRfbWF4X2JpdG1hcF9zaXplKGludCBiaXRzLCBpbnQgaGFzX2h1Z2VfZmlsZXMpCiB7CiAJbG9mZl90IHJlcyA9IEVYVDRfTkRJUl9CTE9DS1M7CiAJaW50IG1ldGFfYmxvY2tzOwpAQCAtMTgyNywxMSArMTc2MCwxMSBAQAogCSAqIHRvdGFsIG51bWJlciBvZiAgNTEyIGJ5dGVzIGJsb2NrcyBvZiB0aGUgZmlsZQogCSAqLwogCi0JaWYgKHNpemVvZihibGtjbnRfdCkgPCBzaXplb2YodTY0KSkgeworCWlmICghaGFzX2h1Z2VfZmlsZXMgfHwgc2l6ZW9mKGJsa2NudF90KSA8IHNpemVvZih1NjQpKSB7CiAJCS8qCi0JCSAqIENPTkZJR19MU0YgaXMgbm90IGVuYWJsZWQgaW1wbGllcyB0aGUgaW5vZGUKLQkJICogaV9ibG9jayByZXByZXNlbnQgdG90YWwgYmxvY2tzIGluIDUxMiBieXRlcwotCQkgKiAzMiA9PSBzaXplIG9mIHZmcyBpbm9kZSBpX2Jsb2NrcyAqIDgKKwkJICogIWhhc19odWdlX2ZpbGVzIG9yIENPTkZJR19MU0YgaXMgbm90IGVuYWJsZWQKKwkJICogaW1wbGllcyB0aGUgaW5vZGUgaV9ibG9jayByZXByZXNlbnQgdG90YWwgYmxvY2tzIGluCisJCSAqIDUxMiBieXRlcyAzMiA9PSBzaXplIG9mIHZmcyBpbm9kZSBpX2Jsb2NrcyAqIDgKIAkJICovCiAJCXVwcGVyX2xpbWl0ID0gKDFMTCA8PCAzMikgLSAxOwogCkBAIC0xOTQwLDcgKzE4NzMsNyBAQAogCWludCBibG9ja3NpemU7CiAJaW50IGRiX2NvdW50OwogCWludCBpOwotCWludCBuZWVkc19yZWNvdmVyeTsKKwlpbnQgbmVlZHNfcmVjb3ZlcnksIGhhc19odWdlX2ZpbGVzOwogCV9fbGUzMiBmZWF0dXJlczsKIAlfX3U2NCBibG9ja3NfY291bnQ7CiAJaW50IGVycjsKQEAgLTIwODEsNyArMjAxNCw5IEBACiAJCSAgICAgICBzYi0+c19pZCwgbGUzMl90b19jcHUoZmVhdHVyZXMpKTsKIAkJZ290byBmYWlsZWRfbW91bnQ7CiAJfQotCWlmIChFWFQ0X0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpKSB7CisJaGFzX2h1Z2VfZmlsZXMgPSBFWFQ0X0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwKKwkJCQkgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpOworCWlmIChoYXNfaHVnZV9maWxlcykgewogCQkvKgogCQkgKiBMYXJnZSBmaWxlIHNpemUgZW5hYmxlZCBmaWxlIHN5c3RlbSBjYW4gb25seSBiZQogCQkgKiBtb3VudCBpZiBrZXJuZWwgaXMgYnVpbGQgd2l0aCBDT05GSUdfTFNGCkBAIC0yMTMxLDggKzIwNjYsOSBAQAogCQl9CiAJfQogCi0Jc2JpLT5zX2JpdG1hcF9tYXhieXRlcyA9IGV4dDRfbWF4X2JpdG1hcF9zaXplKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKLQlzYi0+c19tYXhieXRlcyA9IGV4dDRfbWF4X3NpemUoc2ItPnNfYmxvY2tzaXplX2JpdHMpOworCXNiaS0+c19iaXRtYXBfbWF4Ynl0ZXMgPSBleHQ0X21heF9iaXRtYXBfc2l6ZShzYi0+c19ibG9ja3NpemVfYml0cywKKwkJCQkJCSAgICAgIGhhc19odWdlX2ZpbGVzKTsKKwlzYi0+c19tYXhieXRlcyA9IGV4dDRfbWF4X3NpemUoc2ItPnNfYmxvY2tzaXplX2JpdHMsIGhhc19odWdlX2ZpbGVzKTsKIAogCWlmIChsZTMyX3RvX2NwdShlcy0+c19yZXZfbGV2ZWwpID09IEVYVDRfR09PRF9PTERfUkVWKSB7CiAJCXNiaS0+c19pbm9kZV9zaXplID0gRVhUNF9HT09EX09MRF9JTk9ERV9TSVpFOwpAQCAtMjQ1Niw2ICsyMzkyLDIxIEBACiAJCQkiYXZhaWxhYmxlLlxuIik7CiAJfQogCisJaWYgKHRlc3Rfb3B0KHNiLCBEQVRBX0ZMQUdTKSA9PSBFWFQ0X01PVU5UX0pPVVJOQUxfREFUQSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFWFQ0LWZzOiBJZ25vcmluZyBkZWxhbGxvYyBvcHRpb24gLSAiCisJCQkJInJlcXVlc3RlZCBkYXRhIGpvdXJuYWxpbmcgbW9kZVxuIik7CisJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBERUxBTExPQyk7CisJfSBlbHNlIGlmICh0ZXN0X29wdChzYiwgREVMQUxMT0MpKQorCQlwcmludGsoS0VSTl9JTkZPICJFWFQ0LWZzOiBkZWxheWVkIGFsbG9jYXRpb24gZW5hYmxlZFxuIik7CisKKwlleHQ0X2V4dF9pbml0KHNiKTsKKwllcnIgPSBleHQ0X21iX2luaXQoc2IsIG5lZWRzX3JlY292ZXJ5KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogZmFpbGVkIHRvIGluaXRhbGl6ZSBtYmFsbG9jICglZClcbiIsCisJCSAgICAgICBlcnIpOworCQlnb3RvIGZhaWxlZF9tb3VudDQ7CisJfQorCiAJLyoKIAkgKiBha3BtOiBjb3JlIHJlYWRfc3VwZXIoKSBjYWxscyBpbiBoZXJlIHdpdGggdGhlIHN1cGVyYmxvY2sgbG9ja2VkLgogCSAqIFRoYXQgZGVhZGxvY2tzLCBiZWNhdXNlIG9ycGhhbiBjbGVhbnVwIG5lZWRzIHRvIGxvY2sgdGhlIHN1cGVyYmxvY2sKQEAgLTI0NzUsMjEgKzI0MjYsNiBAQAogCSAgICAgICB0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUNF9NT1VOVF9PUkRFUkVEX0RBVEEgPyAib3JkZXJlZCI6CiAJICAgICAgICJ3cml0ZWJhY2siKTsKIAotCWlmICh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUNF9NT1VOVF9KT1VSTkFMX0RBVEEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVhUNC1mczogSWdub3JpbmcgZGVsYWxsb2Mgb3B0aW9uIC0gIgotCQkJCSJyZXF1ZXN0ZWQgZGF0YSBqb3VybmFsaW5nIG1vZGVcbiIpOwotCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgREVMQUxMT0MpOwotCX0gZWxzZSBpZiAodGVzdF9vcHQoc2IsIERFTEFMTE9DKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRVhUNC1mczogZGVsYXllZCBhbGxvY2F0aW9uIGVuYWJsZWRcbiIpOwotCi0JZXh0NF9leHRfaW5pdChzYik7Ci0JZXJyID0gZXh0NF9tYl9pbml0KHNiLCBuZWVkc19yZWNvdmVyeSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IGZhaWxlZCB0byBpbml0YWxpemUgbWJhbGxvYyAoJWQpXG4iLAotCQkgICAgICAgZXJyKTsKLQkJZ290byBmYWlsZWRfbW91bnQ0OwotCX0KLQogCWxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmMKaW5kZXggODBmZjMzOC4uZDEyY2RmMiAxMDA2NDQKLS0tIGEvZnMvZmF0L2lub2RlLmMKKysrIGIvZnMvZmF0L2lub2RlLmMKQEAgLTg1NSw3ICs4NTUsNyBAQAogCU9wdF9vYnNvbGF0ZSwgT3B0X2ZsdXNoLCBPcHRfdHpfdXRjLCBPcHRfZXJyLAogfTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgZmF0X3Rva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IGZhdF90b2tlbnMgPSB7CiAJe09wdF9jaGVja19yLCAiY2hlY2s9cmVsYXhlZCJ9LAogCXtPcHRfY2hlY2tfcywgImNoZWNrPXN0cmljdCJ9LAogCXtPcHRfY2hlY2tfbiwgImNoZWNrPW5vcm1hbCJ9LApAQCAtODkwLDE0ICs4OTAsMTQgQEAKIAl7T3B0X3R6X3V0YywgInR6PVVUQyJ9LAogCXtPcHRfZXJyLCBOVUxMfSwKIH07Ci1zdGF0aWMgbWF0Y2hfdGFibGVfdCBtc2Rvc190b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBtc2Rvc190b2tlbnMgPSB7CiAJe09wdF9ub2RvdHMsICJub2RvdHMifSwKIAl7T3B0X25vZG90cywgImRvdHNPSz1ubyJ9LAogCXtPcHRfZG90cywgImRvdHMifSwKIAl7T3B0X2RvdHMsICJkb3RzT0s9eWVzIn0sCiAJe09wdF9lcnIsIE5VTEx9CiB9Owotc3RhdGljIG1hdGNoX3RhYmxlX3QgdmZhdF90b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB2ZmF0X3Rva2VucyA9IHsKIAl7T3B0X2NoYXJzZXQsICJpb2NoYXJzZXQ9JXMifSwKIAl7T3B0X3Nob3J0bmFtZV9sb3dlciwgInNob3J0bmFtZT1sb3dlciJ9LAogCXtPcHRfc2hvcnRuYW1lX3dpbjk1LCAic2hvcnRuYW1lPXdpbjk1In0sCmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IDI1YWRmYzMuLmQwZmYwYjggMTAwNjQ0Ci0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jCisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jCkBAIC04LDcgKzgsNyBAQAogICogcGFnZXMgYWdhaW5zdCBpbm9kZXMuICBpZTogZGF0YSB3cml0ZWJhY2suICBXcml0ZW91dCBvZiB0aGUKICAqIGlub2RlIGl0c2VsZiBpcyBub3QgaGFuZGxlZCBoZXJlLgogICoKLSAqIDEwQXByMjAwMglha3BtQHppcC5jb20uYXUKKyAqIDEwQXByMjAwMglBbmRyZXcgTW9ydG9uCiAgKgkJU3BsaXQgb3V0IG9mIGZzL2lub2RlLmMKICAqCQlBZGRpdGlvbnMgZm9yIGFkZHJlc3Nfc3BhY2UtYmFzZWQgd3JpdGViYWNrCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggMmJhZGE2Yi4uMzQ5MzBhOSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKKysrIGIvZnMvZnVzZS9maWxlLmMKQEAgLTEwMSw2ICsxMDEsOCBAQAogCQlmaWxlLT5mX29wID0gJmZ1c2VfZGlyZWN0X2lvX2ZpbGVfb3BlcmF0aW9uczsKIAlpZiAoIShvdXRhcmctPm9wZW5fZmxhZ3MgJiBGT1BFTl9LRUVQX0NBQ0hFKSkKIAkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoaW5vZGUtPmlfbWFwcGluZyk7CisJaWYgKG91dGFyZy0+b3Blbl9mbGFncyAmIEZPUEVOX05PTlNFRUtBQkxFKQorCQlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIAlmZi0+ZmggPSBvdXRhcmctPmZoOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZ1c2VfZmlsZV9nZXQoZmYpOwogfQpAQCAtMTQ0OCw2ICsxNDUwLDkgQEAKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJc3dpdGNoIChvcmlnaW4pIHsKIAljYXNlIFNFRUtfRU5EOgorCQlyZXR2YWwgPSBmdXNlX3VwZGF0ZV9hdHRyaWJ1dGVzKGlub2RlLCBOVUxMLCBmaWxlLCBOVUxMKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CiAJCW9mZnNldCArPSBpX3NpemVfcmVhZChpbm9kZSk7CiAJCWJyZWFrOwogCWNhc2UgU0VFS19DVVI6CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaAppbmRleCAzYTg3NjA3Li4zNWFjY2ZkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Z1c2VfaS5oCisrKyBiL2ZzL2Z1c2UvZnVzZV9pLmgKQEAgLTYsNiArNiw5IEBACiAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HLgogKi8KIAorI2lmbmRlZiBfRlNfRlVTRV9JX0gKKyNkZWZpbmUgX0ZTX0ZVU0VfSV9ICisKICNpbmNsdWRlIDxsaW51eC9mdXNlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgpAQCAtNjU1LDMgKzY1OCw1IEBACiB2b2lkIGZ1c2VfcmVsZWFzZV9ub3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiB1NjQgZnVzZV9nZXRfYXR0cl92ZXJzaW9uKHN0cnVjdCBmdXNlX2Nvbm4gKmZjKTsKKworI2VuZGlmIC8qIF9GU19GVVNFX0lfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9pbm9kZS5jIGIvZnMvZnVzZS9pbm9kZS5jCmluZGV4IGQyMjQ5ZjEuLjU0YjFmMGUxIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC0zNTQsNyArMzU0LDcgQEAKIAlPUFRfRVJSCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09QVF9GRCwJCQkiZmQ9JXUifSwKIAl7T1BUX1JPT1RNT0RFLAkJCSJyb290bW9kZT0lbyJ9LAogCXtPUFRfVVNFUl9JRCwJCQkidXNlcl9pZD0ldSJ9LApAQCAtODY1LDcgKzg2NSw3IEBACiAJaWYgKGlzX2JkZXYpIHsKIAkJZmMtPmRlc3Ryb3lfcmVxID0gZnVzZV9yZXF1ZXN0X2FsbG9jKCk7CiAJCWlmICghZmMtPmRlc3Ryb3lfcmVxKQotCQkJZ290byBlcnJfcHV0X3Jvb3Q7CisJCQlnb3RvIGVycl9mcmVlX2luaXRfcmVxOwogCX0KIAogCW11dGV4X2xvY2soJmZ1c2VfbXV0ZXgpOwpAQCAtODk1LDYgKzg5NSw3IEBACiAKICBlcnJfdW5sb2NrOgogCW11dGV4X3VubG9jaygmZnVzZV9tdXRleCk7CisgZXJyX2ZyZWVfaW5pdF9yZXE6CiAJZnVzZV9yZXF1ZXN0X2ZyZWUoaW5pdF9yZXEpOwogIGVycl9wdXRfcm9vdDoKIAlkcHV0KHJvb3RfZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbW91bnQuYyBiL2ZzL2dmczIvbW91bnQuYwppbmRleCBkZjQ4MzMzLi5mOTZlYjkwIDEwMDY0NAotLS0gYS9mcy9nZnMyL21vdW50LmMKKysrIGIvZnMvZ2ZzMi9tb3VudC5jCkBAIC00Niw3ICs0Niw3IEBACiAJT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2xvY2twcm90bywgImxvY2twcm90bz0lcyJ9LAogCXtPcHRfbG9ja3RhYmxlLCAibG9ja3RhYmxlPSVzIn0sCiAJe09wdF9ob3N0ZGF0YSwgImhvc3RkYXRhPSVzIn0sCmRpZmYgLS1naXQgYS9mcy9oZnMvY2F0YWxvZy5jIGIvZnMvaGZzL2NhdGFsb2cuYwppbmRleCBiYTg1MTU3Li42ZDk4ZjExIDEwMDY0NAotLS0gYS9mcy9oZnMvY2F0YWxvZy5jCisrKyBiL2ZzL2hmcy9jYXRhbG9nLmMKQEAgLTE5MCw2ICsxOTAsMTAgQEAKIAogCWZkLT5zZWFyY2hfa2V5LT5jYXQuUGFySUQgPSByZWMudGhyZWFkLlBhcklEOwogCWxlbiA9IGZkLT5zZWFyY2hfa2V5LT5jYXQuQ05hbWUubGVuID0gcmVjLnRocmVhZC5DTmFtZS5sZW47CisJaWYgKGxlbiA+IEhGU19OQU1FTEVOKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGZzOiBiYWQgY2F0YWxvZyBuYW1lbGVuZ3RoXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCW1lbWNweShmZC0+c2VhcmNoX2tleS0+Y2F0LkNOYW1lLm5hbWUsIHJlYy50aHJlYWQuQ05hbWUubmFtZSwgbGVuKTsKIAlyZXR1cm4gaGZzX2JyZWNfZmluZChmZCk7CiB9CmRpZmYgLS1naXQgYS9mcy9oZnMvc3VwZXIuYyBiL2ZzL2hmcy9zdXBlci5jCmluZGV4IDRhYmIxMDQuLjNjN2M3NjMgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9zdXBlci5jCisrKyBiL2ZzL2hmcy9zdXBlci5jCkBAIC0xNzMsNyArMTczLDcgQEAKIAlvcHRfZXJyCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJeyBvcHRfdWlkLCAidWlkPSV1IiB9LAogCXsgb3B0X2dpZCwgImdpZD0ldSIgfSwKIAl7IG9wdF91bWFzaywgInVtYXNrPSVvIiB9LApkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmMKaW5kZXggZDEyOGEyNWIuLmVhMzBhZmMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYml0bWFwLmMKKysrIGIvZnMvaGZzcGx1cy9iaXRtYXAuYwpAQCAtMzIsNiArMzIsMTAgQEAKIAltdXRleF9sb2NrKCZIRlNQTFVTX1NCKHNiKS5hbGxvY19maWxlLT5pX211dGV4KTsKIAltYXBwaW5nID0gSEZTUExVU19TQihzYikuYWxsb2NfZmlsZS0+aV9tYXBwaW5nOwogCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBvZmZzZXQgLyBQQUdFX0NBQ0hFX0JJVFMsIE5VTEwpOworCWlmIChJU19FUlIocGFnZSkpIHsKKwkJc3RhcnQgPSBzaXplOworCQlnb3RvIG91dDsKKwl9CiAJcHB0ciA9IGttYXAocGFnZSk7CiAJY3VyciA9IHBwdHIgKyAob2Zmc2V0ICYgKFBBR0VfQ0FDSEVfQklUUyAtIDEpKSAvIDMyOwogCWkgPSBvZmZzZXQgJSAzMjsKQEAgLTczLDYgKzc3LDEwIEBACiAJCQlicmVhazsKIAkJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG9mZnNldCAvIFBBR0VfQ0FDSEVfQklUUywKIAkJCQkJIE5VTEwpOworCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCQlzdGFydCA9IHNpemU7CisJCQlnb3RvIG91dDsKKwkJfQogCQljdXJyID0gcHB0ciA9IGttYXAocGFnZSk7CiAJCWlmICgoc2l6ZSBeIG9mZnNldCkgLyBQQUdFX0NBQ0hFX0JJVFMpCiAJCQllbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CkBAIC0xMjAsNiArMTI4LDEwIEBACiAJCW9mZnNldCArPSBQQUdFX0NBQ0hFX0JJVFM7CiAJCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBvZmZzZXQgLyBQQUdFX0NBQ0hFX0JJVFMsCiAJCQkJCSBOVUxMKTsKKwkJaWYgKElTX0VSUihwYWdlKSkgeworCQkJc3RhcnQgPSBzaXplOworCQkJZ290byBvdXQ7CisJCX0KIAkJcHB0ciA9IGttYXAocGFnZSk7CiAJCWN1cnIgPSBwcHRyOwogCQllbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2NhdGFsb2cuYyBiL2ZzL2hmc3BsdXMvY2F0YWxvZy5jCmluZGV4IGJhMTE3YzQuLmY2ODc0YWMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvY2F0YWxvZy5jCisrKyBiL2ZzL2hmc3BsdXMvY2F0YWxvZy5jCkBAIC0xNjgsNiArMTY4LDExIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAorCWlmIChiZTE2X3RvX2NwdSh0bXAudGhyZWFkLm5vZGVOYW1lLmxlbmd0aCkgPiAyNTUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGNhdGFsb2cgbmFtZSBsZW5ndGggY29ycnVwdGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCiAJaGZzcGx1c19jYXRfYnVpbGRfa2V5X3VuaShmZC0+c2VhcmNoX2tleSwgYmUzMl90b19jcHUodG1wLnRocmVhZC5wYXJlbnRJRCksCiAJCQkJICZ0bXAudGhyZWFkLm5vZGVOYW1lKTsKIAlyZXR1cm4gaGZzX2JyZWNfZmluZChmZCk7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCmluZGV4IGZlYzhmNjEuLjAwMjJlZWMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCisrKyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCkBAIC0xOTksNiArMTk5LDkgQEAKIAkJZ290byBkb25lOwogCX0KIAorCWlmIChpbm9kZS0+aV9pbm8gPT0gSEZTUExVU19FWFRfQ05JRCkKKwkJcmV0dXJuIC1FSU87CisKIAltdXRleF9sb2NrKCZIRlNQTFVTX0koaW5vZGUpLmV4dGVudHNfbG9jayk7CiAJcmVzID0gaGZzcGx1c19leHRfcmVhZF9leHRlbnQoaW5vZGUsIGFibG9jayk7CiAJaWYgKCFyZXMpIHsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCBiMDg1ZDY0Li45NjNiZTY0IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0yNTQsNiArMjU0LDggQEAKIHsKIAlpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSkKIAkJaW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLnJzcmNfaW5vZGU7CisJaWYgKCEoZmlsZS0+Zl9mbGFncyAmIE9fTEFSR0VGSUxFKSAmJiBpX3NpemVfcmVhZChpbm9kZSkgPiBNQVhfTk9OX0xGUykKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAJYXRvbWljX2luYygmSEZTUExVU19JKGlub2RlKS5vcGVuY250KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvb3B0aW9ucy5jIGIvZnMvaGZzcGx1cy9vcHRpb25zLmMKaW5kZXggOTk5N2NiZi4uOTY5OWM1NiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9vcHRpb25zLmMKKysrIGIvZnMvaGZzcGx1cy9vcHRpb25zLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAlvcHRfZm9yY2UsIG9wdF9lcnIKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7IG9wdF9jcmVhdG9yLCAiY3JlYXRvcj0lcyIgfSwKIAl7IG9wdF90eXBlLCAidHlwZT0lcyIgfSwKIAl7IG9wdF91bWFzaywgInVtYXNrPSVvIiB9LApkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9zdXBlci5jIGIvZnMvaGZzcGx1cy9zdXBlci5jCmluZGV4IGU4MzRlNTcuLmViNzQ1MzEgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuYworKysgYi9mcy9oZnNwbHVzL3N1cGVyLmMKQEAgLTM1Niw3ICszNTYsNyBAQAogCX0gZWxzZSBpZiAodmhkci0+YXR0cmlidXRlcyAmIGNwdV90b19iZTMyKEhGU1BMVVNfVk9MX1NPRlRMT0NLKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZnM6IEZpbGVzeXN0ZW0gaXMgbWFya2VkIGxvY2tlZCwgbW91bnRpbmcgcmVhZC1vbmx5LlxuIik7CiAJCXNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKLQl9IGVsc2UgaWYgKHZoZHItPmF0dHJpYnV0ZXMgJiBjcHVfdG9fYmUzMihIRlNQTFVTX1ZPTF9KT1VSTkFMRUQpKSB7CisJfSBlbHNlIGlmICgodmhkci0+YXR0cmlidXRlcyAmIGNwdV90b19iZTMyKEhGU1BMVVNfVk9MX0pPVVJOQUxFRCkpICYmICEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImhmczogd3JpdGUgYWNjZXNzIHRvIGEgam91cm5hbGVkIGZpbGVzeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCwgIgogCQkgICAgICAgInVzZSB0aGUgZm9yY2Ugb3B0aW9uIGF0IHlvdXIgb3duIHJpc2ssIG1vdW50aW5nIHJlYWQtb25seS5cbiIpOwogCQlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7CmRpZmYgLS1naXQgYS9mcy9ocGZzL3N1cGVyLmMgYi9mcy9ocGZzL3N1cGVyLmMKaW5kZXggYjhhZTljOS4uMjlhZDQ2MSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9zdXBlci5jCisrKyBiL2ZzL2hwZnMvc3VwZXIuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJT3B0X3RpbWVzaGlmdCwgT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2hlbHAsICJoZWxwIn0sCiAJe09wdF91aWQsICJ1aWQ9JXUifSwKIAl7T3B0X2dpZCwgImdpZD0ldSJ9LApkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCAzZjU4OTIzLi42MWVkYzcwIDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYworKysgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtNTcsNyArNTcsNyBAQAogCU9wdF9lcnIsCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9zaXplLAkic2l6ZT0lcyJ9LAogCXtPcHRfbnJfaW5vZGVzLAkibnJfaW5vZGVzPSVzIn0sCiAJe09wdF9tb2RlLAkibW9kZT0lbyJ9LApkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaW5vZGUuYyBiL2ZzL2lzb2ZzL2lub2RlLmMKaW5kZXggMjY5NDhhNi4uM2Y4YWYwZiAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvaW5vZGUuYworKysgYi9mcy9pc29mcy9pbm9kZS5jCkBAIC0zMTAsNyArMzEwLDcgQEAKIAlPcHRfbm9jb21wcmVzcywgT3B0X2hpZGUsIE9wdF9zaG93YXNzb2MsIE9wdF9kbW9kZSwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X25vcm9jaywgIm5vcm9jayJ9LAogCXtPcHRfbm9qb2xpZXQsICJub2pvbGlldCJ9LAogCXtPcHRfdW5oaWRlLCAidW5oaWRlIn0sCmRpZmYgLS1naXQgYS9mcy9qYmQvS2NvbmZpZyBiL2ZzL2piZC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMjhiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9qYmQvS2NvbmZpZwpAQCAtMCwwICsxLDMwIEBACitjb25maWcgSkJECisJdHJpc3RhdGUKKwloZWxwCisJICBUaGlzIGlzIGEgZ2VuZXJpYyBqb3VybmFsbGluZyBsYXllciBmb3IgYmxvY2sgZGV2aWNlcy4gIEl0IGlzCisJICBjdXJyZW50bHkgdXNlZCBieSB0aGUgZXh0MyBmaWxlIHN5c3RlbSwgYnV0IGl0IGNvdWxkIGFsc28gYmUKKwkgIHVzZWQgdG8gYWRkIGpvdXJuYWwgc3VwcG9ydCB0byBvdGhlciBmaWxlIHN5c3RlbXMgb3IgYmxvY2sKKwkgIGRldmljZXMgc3VjaCBhcyBSQUlEIG9yIExWTS4KKworCSAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXh0MyBmaWxlIHN5c3RlbSwgeW91IG5lZWQgdG8gc2F5IFkgaGVyZS4KKwkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGV4dDMgdGhlbiB5b3Ugd2lsbCBwcm9iYWJseSB3YW50IHRvIHNheSBOLgorCisJICBUbyBjb21waWxlIHRoaXMgZGV2aWNlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBqYmQuICBJZiB5b3UgYXJlIGNvbXBpbGluZyBleHQzIGludG8gdGhlIGtlcm5lbCwgeW91CisJICBjYW5ub3QgY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUuCisKK2NvbmZpZyBKQkRfREVCVUcKKwlib29sICJKQkQgKGV4dDMpIGRlYnVnZ2luZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gSkJEICYmIERFQlVHX0ZTCisJaGVscAorCSAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXh0MyBqb3VybmFsZWQgZmlsZSBzeXN0ZW0gKG9yIHBvdGVudGlhbGx5IGFueQorCSAgb3RoZXIgZmlsZSBzeXN0ZW0vZGV2aWNlIHVzaW5nIEpCRCksIHRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8KKwkgIGVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IHdoaWxlIHRoZSBzeXN0ZW0gaXMgcnVubmluZywgaW4gb3JkZXIgdG8KKwkgIGhlbHAgdHJhY2sgZG93biBhbnkgcHJvYmxlbXMgeW91IGFyZSBoYXZpbmcuICBCeSBkZWZhdWx0IHRoZQorCSAgZGVidWdnaW5nIG91dHB1dCB3aWxsIGJlIHR1cm5lZCBvZmYuCisKKwkgIElmIHlvdSBzZWxlY3QgWSBoZXJlLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHVybiBvbiBkZWJ1Z2dpbmcKKwkgIHdpdGggImVjaG8gTiA+IC9zeXMva2VybmVsL2RlYnVnL2piZC9qYmQtZGVidWciLCB3aGVyZSBOIGlzIGEKKwkgIG51bWJlciBiZXR3ZWVuIDEgYW5kIDUsIHRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgZGVidWdnaW5nCisJICBvdXRwdXQgaXMgZ2VuZXJhdGVkLiAgVG8gdHVybiBkZWJ1Z2dpbmcgb2ZmIGFnYWluLCBkbworCSAgImVjaG8gMCA+IC9zeXMva2VybmVsL2RlYnVnL2piZC9qYmQtZGVidWciLgpkaWZmIC0tZ2l0IGEvZnMvamJkL2NvbW1pdC5jIGIvZnMvamJkL2NvbW1pdC5jCmluZGV4IGFlMDhjMDUuLjI1NzE5ZDkgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9jb21taXQuYworKysgYi9mcy9qYmQvY29tbWl0LmMKQEAgLTQ4Miw2ICs0ODIsOCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiSkJEOiBEZXRlY3RlZCBJTyBlcnJvcnMgd2hpbGUgZmx1c2hpbmcgZmlsZSBkYXRhICIKIAkJCSJvbiAlc1xuIiwgYmRldm5hbWUoam91cm5hbC0+al9mc19kZXYsIGIpKTsKKwkJaWYgKGpvdXJuYWwtPmpfZmxhZ3MgJiBKRlNfQUJPUlRfT05fU1lOQ0RBVEFfRVJSKQorCQkJam91cm5hbF9hYm9ydChqb3VybmFsLCBlcnIpOwogCQllcnIgPSAwOwogCX0KIApAQCAtNTE4LDkgKzUyMCwxMCBAQAogCQlqaCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9idWZmZXJzOwogCiAJCS8qIElmIHdlJ3JlIGluIGFib3J0IG1vZGUsIHdlIGp1c3QgdW4tam91cm5hbCB0aGUgYnVmZmVyIGFuZAotCQkgICByZWxlYXNlIGl0IGZvciBiYWNrZ3JvdW5kIHdyaXRpbmcuICovCisJCSAgIHJlbGVhc2UgaXQuICovCiAKIAkJaWYgKGlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkgeworCQkJY2xlYXJfYnVmZmVyX2piZGRpcnR5KGpoMmJoKGpoKSk7CiAJCQlKQlVGRkVSX1RSQUNFKGpoLCAiam91cm5hbCBpcyBhYm9ydGluZzogcmVmaWxlIik7CiAJCQlqb3VybmFsX3JlZmlsZV9idWZmZXIoam91cm5hbCwgamgpOwogCQkJLyogSWYgdGhhdCB3YXMgdGhlIGxhc3Qgb25lLCB3ZSBuZWVkIHRvIGNsZWFuIHVwCkBAIC03NjIsNiArNzY1LDkgQEAKIAkJLyogQUtQTTogYmZvcmdldCBoZXJlICovCiAJfQogCisJaWYgKGVycikKKwkJam91cm5hbF9hYm9ydChqb3VybmFsLCBlcnIpOworCiAJamJkX2RlYnVnKDMsICJKQkQ6IGNvbW1pdCBwaGFzZSA2XG4iKTsKIAogCWlmIChqb3VybmFsX3dyaXRlX2NvbW1pdF9yZWNvcmQoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKSkKQEAgLTg1Miw2ICs4NTgsOCBAQAogCQlpZiAoYnVmZmVyX2piZGRpcnR5KGJoKSkgewogCQkJSkJVRkZFUl9UUkFDRShqaCwgImFkZCB0byBuZXcgY2hlY2twb2ludGluZyB0cmFucyIpOwogCQkJX19qb3VybmFsX2luc2VydF9jaGVja3BvaW50KGpoLCBjb21taXRfdHJhbnNhY3Rpb24pOworCQkJaWYgKGlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkKKwkJCQljbGVhcl9idWZmZXJfamJkZGlydHkoYmgpOwogCQkJSkJVRkZFUl9UUkFDRShqaCwgInJlZmlsZSBmb3IgY2hlY2twb2ludCB3cml0ZWJhY2siKTsKIAkJCV9fam91cm5hbF9yZWZpbGVfYnVmZmVyKGpoKTsKIAkJCWpiZF91bmxvY2tfYmhfc3RhdGUoYmgpOwpkaWZmIC0tZ2l0IGEvZnMvamJkL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwppbmRleCAwNTQwY2EyLi5kMTVjZDZlIDEwMDY0NAotLS0gYS9mcy9qYmQvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwpAQCAtOTU0LDkgKzk1NCwxMCBAQAogCWpvdXJuYWxfdCAqam91cm5hbCA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF9qb3VybmFsOwogCWludCBuZWVkX2JyZWxzZSA9IDA7CiAJc3RydWN0IGpvdXJuYWxfaGVhZCAqamg7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoaXNfaGFuZGxlX2Fib3J0ZWQoaGFuZGxlKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiByZXQ7CiAKIAlqaCA9IGpvdXJuYWxfYWRkX2pvdXJuYWxfaGVhZChiaCk7CiAJSkJVRkZFUl9UUkFDRShqaCwgImVudHJ5Iik7CkBAIC0xMDY3LDcgKzEwNjgsMTYgQEAKIAkJCQkgICB0aW1lIGlmIGl0IGlzIHJlZGlydGllZCAqLwogCQkJfQogCi0JCQkvKiBqb3VybmFsX2NsZWFuX2RhdGFfbGlzdCgpIG1heSBoYXZlIGdvdCB0aGVyZSBmaXJzdCAqLworCQkJLyoKKwkJCSAqIFdlIGNhbm5vdCByZW1vdmUgdGhlIGJ1ZmZlciB3aXRoIGlvIGVycm9yIGZyb20gdGhlCisJCQkgKiBjb21taXR0aW5nIHRyYW5zYWN0aW9uLCBiZWNhdXNlIG90aGVyd2lzZSBpdCB3b3VsZAorCQkJICogbWlzcyB0aGUgZXJyb3IgYW5kIHRoZSBjb21taXQgd291bGQgbm90IGFib3J0LgorCQkJICovCisJCQlpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpKSB7CisJCQkJcmV0ID0gLUVJTzsKKwkJCQlnb3RvIG5vX2pvdXJuYWw7CisJCQl9CisKIAkJCWlmIChqaC0+Yl90cmFuc2FjdGlvbiAhPSBOVUxMKSB7CiAJCQkJSkJVRkZFUl9UUkFDRShqaCwgInVuZmlsZSBmcm9tIGNvbW1pdCIpOwogCQkJCV9fam91cm5hbF90ZW1wX3VubGlua19idWZmZXIoamgpOwpAQCAtMTEwOCw3ICsxMTE4LDcgQEAKIAl9CiAJSkJVRkZFUl9UUkFDRShqaCwgImV4aXQiKTsKIAlqb3VybmFsX3B1dF9qb3VybmFsX2hlYWQoamgpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvamJkMi9LY29uZmlnIGIvZnMvamJkMi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMmYzNDYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9qYmQyL0tjb25maWcKQEAgLTAsMCArMSwzMyBAQAorY29uZmlnIEpCRDIKKwl0cmlzdGF0ZQorCXNlbGVjdCBDUkMzMgorCWhlbHAKKwkgIFRoaXMgaXMgYSBnZW5lcmljIGpvdXJuYWxpbmcgbGF5ZXIgZm9yIGJsb2NrIGRldmljZXMgdGhhdCBzdXBwb3J0CisJICBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGJsb2NrIG51bWJlcnMuICBJdCBpcyBjdXJyZW50bHkgdXNlZCBieQorCSAgdGhlIGV4dDQgYW5kIE9DRlMyIGZpbGVzeXN0ZW1zLCBidXQgaXQgY291bGQgYWxzbyBiZSB1c2VkIHRvIGFkZAorCSAgam91cm5hbCBzdXBwb3J0IHRvIG90aGVyIGZpbGUgc3lzdGVtcyBvciBibG9jayBkZXZpY2VzIHN1Y2gKKwkgIGFzIFJBSUQgb3IgTFZNLgorCisJICBJZiB5b3UgYXJlIHVzaW5nIGV4dDQgb3IgT0NGUzIsIHlvdSBuZWVkIHRvIHNheSBZIGhlcmUuCisJICBJZiB5b3UgYXJlIG5vdCB1c2luZyBleHQ0IG9yIE9DRlMyIHRoZW4geW91IHdpbGwKKwkgIHByb2JhYmx5IHdhbnQgdG8gc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkZXZpY2UgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIGpiZDIuICBJZiB5b3UgYXJlIGNvbXBpbGluZyBleHQ0IG9yIE9DRlMyIGludG8gdGhlIGtlcm5lbCwKKwkgIHlvdSBjYW5ub3QgY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUuCisKK2NvbmZpZyBKQkQyX0RFQlVHCisJYm9vbCAiSkJEMiAoZXh0NCkgZGVidWdnaW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBKQkQyICYmIERFQlVHX0ZTCisJaGVscAorCSAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXh0NCBqb3VybmFsZWQgZmlsZSBzeXN0ZW0gKG9yCisJICBwb3RlbnRpYWxseSBhbnkgb3RoZXIgZmlsZXN5c3RlbS9kZXZpY2UgdXNpbmcgSkJEMiksIHRoaXMgb3B0aW9uCisJICBhbGxvd3MgeW91IHRvIGVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0IHdoaWxlIHRoZSBzeXN0ZW0gaXMgcnVubmluZywKKwkgIGluIG9yZGVyIHRvIGhlbHAgdHJhY2sgZG93biBhbnkgcHJvYmxlbXMgeW91IGFyZSBoYXZpbmcuCisJICBCeSBkZWZhdWx0LCB0aGUgZGVidWdnaW5nIG91dHB1dCB3aWxsIGJlIHR1cm5lZCBvZmYuCisKKwkgIElmIHlvdSBzZWxlY3QgWSBoZXJlLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHVybiBvbiBkZWJ1Z2dpbmcKKwkgIHdpdGggImVjaG8gTiA+IC9zeXMva2VybmVsL2RlYnVnL2piZDIvamJkMi1kZWJ1ZyIsIHdoZXJlIE4gaXMgYQorCSAgbnVtYmVyIGJldHdlZW4gMSBhbmQgNS4gVGhlIGhpZ2hlciB0aGUgbnVtYmVyLCB0aGUgbW9yZSBkZWJ1Z2dpbmcKKwkgIG91dHB1dCBpcyBnZW5lcmF0ZWQuICBUbyB0dXJuIGRlYnVnZ2luZyBvZmYgYWdhaW4sIGRvCisJICAiZWNobyAwID4gL3N5cy9rZXJuZWwvZGVidWcvamJkMi9qYmQyLWRlYnVnIi4KZGlmZiAtLWdpdCBhL2ZzL2piZDIvY29tbWl0LmMgYi9mcy9qYmQyL2NvbW1pdC5jCmluZGV4IDBhYmUwMmMuLjhiMTE5ZTEgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY29tbWl0LmMKKysrIGIvZnMvamJkMi9jb21taXQuYwpAQCAtOTk1LDYgKzk5NSw5IEBACiAJfQogCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAKKwlpZiAoam91cm5hbC0+al9jb21taXRfY2FsbGJhY2spCisJCWpvdXJuYWwtPmpfY29tbWl0X2NhbGxiYWNrKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbik7CisKIAl0cmFjZV9tYXJrKGpiZDJfZW5kX2NvbW1pdCwgImRldiAlcyB0cmFuc2FjdGlvbiAlZCBoZWFkICVkIiwKIAkJICAgam91cm5hbC0+al9kZXZuYW1lLCBjb21taXRfdHJhbnNhY3Rpb24tPnRfdGlkLAogCQkgICBqb3VybmFsLT5qX3RhaWxfc2VxdWVuY2UpOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi90cmFuc2FjdGlvbi5jIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCmluZGV4IGU1ZDU0MDUuLjM5Yjc4MDUgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKQEAgLTUyLDYgKzUyLDcgQEAKIAl0cmFuc2FjdGlvbi0+dF9leHBpcmVzID0gamlmZmllcyArIGpvdXJuYWwtPmpfY29tbWl0X2ludGVydmFsOwogCXNwaW5fbG9ja19pbml0KCZ0cmFuc2FjdGlvbi0+dF9oYW5kbGVfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnRyYW5zYWN0aW9uLT50X2lub2RlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZ0cmFuc2FjdGlvbi0+dF9wcml2YXRlX2xpc3QpOwogCiAJLyogU2V0IHVwIHRoZSBjb21taXQgdGltZXIgZm9yIHRoZSBuZXcgdHJhbnNhY3Rpb24uICovCiAJam91cm5hbC0+al9jb21taXRfdGltZXIuZXhwaXJlcyA9IHJvdW5kX2ppZmZpZXModHJhbnNhY3Rpb24tPnRfZXhwaXJlcyk7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9LY29uZmlnIGIvZnMvamZmczIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWUxNjljCi0tLSAvZGV2L251bGwKKysrIGIvZnMvamZmczIvS2NvbmZpZwpAQCAtMCwwICsxLDE4OCBAQAorY29uZmlnIEpGRlMyX0ZTCisJdHJpc3RhdGUgIkpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtIHYyIChKRkZTMikgc3VwcG9ydCIKKwlzZWxlY3QgQ1JDMzIKKwlkZXBlbmRzIG9uIE1URAorCWhlbHAKKwkgIEpGRlMyIGlzIHRoZSBzZWNvbmQgZ2VuZXJhdGlvbiBvZiB0aGUgSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0KKwkgIGZvciB1c2Ugb24gZGlza2xlc3MgZW1iZWRkZWQgZGV2aWNlcy4gSXQgcHJvdmlkZXMgaW1wcm92ZWQgd2VhcgorCSAgbGV2ZWxsaW5nLCBjb21wcmVzc2lvbiBhbmQgc3VwcG9ydCBmb3IgaGFyZCBsaW5rcy4gWW91IGNhbm5vdCB1c2UKKwkgIHRoaXMgb24gbm9ybWFsIGJsb2NrIGRldmljZXMsIG9ubHkgb24gJ01URCcgZGV2aWNlcy4KKworCSAgRnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBKRkZTMiBpcworCSAgYXZhaWxhYmxlIGF0IDxodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2pmZnMyLz4uCisKK2NvbmZpZyBKRkZTMl9GU19ERUJVRworCWludCAiSkZGUzIgZGVidWdnaW5nIHZlcmJvc2l0eSAoMCA9IHF1aWV0LCAyID0gbm9pc3kpIgorCWRlcGVuZHMgb24gSkZGUzJfRlMKKwlkZWZhdWx0ICIwIgorCWhlbHAKKwkgIFRoaXMgY29udHJvbHMgdGhlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgbWVzc2FnZXMgcHJvZHVjZWQgYnkgdGhlIEpGRlMyCisJICBjb2RlLiBTZXQgaXQgdG8gemVybyBmb3IgdXNlIGluIHByb2R1Y3Rpb24gc3lzdGVtcy4gRm9yIGV2YWx1YXRpb24sCisJICB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcsIGl0J3MgYWR2aXNhYmxlIHRvIHNldCBpdCB0byBvbmUuIFRoaXMgd2lsbAorCSAgZW5hYmxlIGEgZmV3IGFzc2VydGlvbnMgYW5kIHdpbGwgcHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIGF0IHRoZQorCSAgS0VSTl9ERUJVRyBsb2dsZXZlbCwgd2hlcmUgdGhleSB3b24ndCBub3JtYWxseSBiZSB2aXNpYmxlLiBMZXZlbCAyCisJICBpcyB1bmxpa2VseSB0byBiZSB1c2VmdWwgLSBpdCBlbmFibGVzIGV4dHJhIGRlYnVnZ2luZyBpbiBjZXJ0YWluCisJICBhcmVhcyB3aGljaCBhdCBvbmUgcG9pbnQgbmVlZGVkIGRlYnVnZ2luZywgYnV0IHdoZW4gdGhlIGJ1Z3Mgd2VyZQorCSAgbG9jYXRlZCBhbmQgZml4ZWQsIHRoZSBkZXRhaWxlZCBtZXNzYWdlcyB3ZXJlIHJlbGVnYXRlZCB0byBsZXZlbCAyLgorCisJICBJZiByZXBvcnRpbmcgYnVncywgcGxlYXNlIHRyeSB0byBoYXZlIGF2YWlsYWJsZSBhIGZ1bGwgZHVtcCBvZiB0aGUKKwkgIG1lc3NhZ2VzIGF0IGRlYnVnIGxldmVsIDEgd2hpbGUgdGhlIG1pc2JlaGF2aW91ciB3YXMgb2NjdXJyaW5nLgorCitjb25maWcgSkZGUzJfRlNfV1JJVEVCVUZGRVIKKwlib29sICJKRkZTMiB3cml0ZS1idWZmZXJpbmcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBlbmFibGVzIHRoZSB3cml0ZS1idWZmZXJpbmcgc3VwcG9ydCBpbiBKRkZTMi4KKworCSAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgSkZGUzIgb24gdGhlIGZvbGxvd2luZworCSAgdHlwZXMgb2YgZmxhc2ggZGV2aWNlczoKKwkgICAgLSBOQU5EIGZsYXNoCisJICAgIC0gTk9SIGZsYXNoIHdpdGggdHJhbnNwYXJlbnQgRUNDCisJICAgIC0gRGF0YUZsYXNoCisKK2NvbmZpZyBKRkZTMl9GU19XQlVGX1ZFUklGWQorCWJvb2wgIlZlcmlmeSBKRkZTMiB3cml0ZS1idWZmZXIgcmVhZHMiCisJZGVwZW5kcyBvbiBKRkZTMl9GU19XUklURUJVRkZFUgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgY2F1c2VzIEpGRlMyIHRvIHJlYWQgYmFjayBldmVyeSBwYWdlIHdyaXR0ZW4gdGhyb3VnaCB0aGUKKwkgIHdyaXRlLWJ1ZmZlciwgYW5kIGNoZWNrIGZvciBlcnJvcnMuCisKK2NvbmZpZyBKRkZTMl9TVU1NQVJZCisJYm9vbCAiSkZGUzIgc3VtbWFyeSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gSkZGUzJfRlMgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBmZWF0dXJlIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBzdW1tYXJ5IGluZm9ybWF0aW9uCisJICBmb3IgZmFzdGVyIGZpbGVzeXN0ZW0gbW91bnQuCisKKwkgIFRoZSBzdW1tYXJ5IGluZm9ybWF0aW9uIGNhbiBiZSBpbnNlcnRlZCBpbnRvIGEgZmlsZXN5c3RlbSBpbWFnZQorCSAgYnkgdGhlIHV0aWxpdHkgJ3N1bXRvb2wnLgorCisJICBJZiB1bnN1cmUsIHNheSAnTicuCisKK2NvbmZpZyBKRkZTMl9GU19YQVRUUgorCWJvb2wgIkpGRlMyIFhBVFRSIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBKRkZTMl9GUyAmJiBFWFBFUklNRU5UQUwKKwlkZWZhdWx0IG4KKwloZWxwCisJICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKKwkgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKKwkgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgSkZGUzJfRlNfUE9TSVhfQUNMCisJYm9vbCAiSkZGUzIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCisJZGVwZW5kcyBvbiBKRkZTMl9GU19YQVRUUgorCWRlZmF1bHQgeQorCXNlbGVjdCBGU19QT1NJWF9BQ0wKKwloZWxwCisJICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCisJICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCisKKwkgIFRvIGxlYXJuIG1vcmUgYWJvdXQgQWNjZXNzIENvbnRyb2wgTGlzdHMsIHZpc2l0IHRoZSBQb3NpeCBBQ0xzIGZvcgorCSAgTGludXggd2Vic2l0ZSA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+LgorCisJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4KKworY29uZmlnIEpGRlMyX0ZTX1NFQ1VSSVRZCisJYm9vbCAiSkZGUzIgU2VjdXJpdHkgTGFiZWxzIgorCWRlcGVuZHMgb24gSkZGUzJfRlNfWEFUVFIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTZWN1cml0eSBsYWJlbHMgc3VwcG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHMKKwkgIGltcGxlbWVudGVkIGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb24KKwkgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHkKKwkgIGxhYmVscyBpbiB0aGUgamZmczIgZmlsZXN5c3RlbS4KKworCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZworCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgorCitjb25maWcgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUworCWJvb2wgIkFkdmFuY2VkIGNvbXByZXNzaW9uIG9wdGlvbnMgZm9yIEpGRlMyIgorCWRlcGVuZHMgb24gSkZGUzJfRlMKKwlkZWZhdWx0IG4KKwloZWxwCisJICBFbmFibGluZyB0aGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGV4cGxpY2l0bHkgY2hvb3NlIHdoaWNoCisJICBjb21wcmVzc2lvbiBtb2R1bGVzLCBpZiBhbnksIGFyZSBlbmFibGVkIGluIEpGRlMyLiBSZW1vdmluZworCSAgY29tcHJlc3NvcnMgY2FuIG1lYW4geW91IGNhbm5vdCByZWFkIGV4aXN0aW5nIGZpbGUgc3lzdGVtcywKKwkgIGFuZCBlbmFibGluZyBleHBlcmltZW50YWwgY29tcHJlc3NvcnMgY2FuIG1lYW4gdGhhdCB5b3UKKwkgIHdyaXRlIGEgZmlsZSBzeXN0ZW0gd2hpY2ggY2Fubm90IGJlIHJlYWQgYnkgYSBzdGFuZGFyZCBrZXJuZWwuCisKKwkgIElmIHVuc3VyZSwgeW91IHNob3VsZCBfZGVmaW5pdGVseV8gc2F5ICdOJy4KKworY29uZmlnIEpGRlMyX1pMSUIKKwlib29sICJKRkZTMiBaTElCIGNvbXByZXNzaW9uIHN1cHBvcnQiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKKwlzZWxlY3QgWkxJQl9JTkZMQVRFCisJc2VsZWN0IFpMSUJfREVGTEFURQorCWRlcGVuZHMgb24gSkZGUzJfRlMKKwlkZWZhdWx0IHkKKwloZWxwCisJICBabGliIGlzIGRlc2lnbmVkIHRvIGJlIGEgZnJlZSwgZ2VuZXJhbC1wdXJwb3NlLCBsZWdhbGx5IHVuZW5jdW1iZXJlZCwKKwkgIGxvc3NsZXNzIGRhdGEtY29tcHJlc3Npb24gbGlicmFyeSBmb3IgdXNlIG9uIHZpcnR1YWxseSBhbnkgY29tcHV0ZXIKKwkgIGhhcmR3YXJlIGFuZCBvcGVyYXRpbmcgc3lzdGVtLiBTZWUgPGh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi8+IGZvcgorCSAgZnVydGhlciBpbmZvcm1hdGlvbi4KKworCSAgU2F5ICdZJyBpZiB1bnN1cmUuCisKK2NvbmZpZyBKRkZTMl9MWk8KKwlib29sICJKRkZTMiBMWk8gY29tcHJlc3Npb24gc3VwcG9ydCIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUworCXNlbGVjdCBMWk9fQ09NUFJFU1MKKwlzZWxlY3QgTFpPX0RFQ09NUFJFU1MKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCBuCisJaGVscAorCSAgbWluaWx6by1iYXNlZCBjb21wcmVzc2lvbi4gR2VuZXJhbGx5IHdvcmtzIGJldHRlciB0aGFuIFpsaWIuCisKKwkgIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgaW4gSnVseSwgMjAwNy4gU2F5ICdOJyBpZiB5b3UgbmVlZAorCSAgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGJvb3Rsb2FkZXJzIG9yIGtlcm5lbHMuCisKK2NvbmZpZyBKRkZTMl9SVElNRQorCWJvb2wgIkpGRlMyIFJUSU1FIGNvbXByZXNzaW9uIHN1cHBvcnQiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCB5CisJaGVscAorCSAgUnRpbWUgZG9lcyBtYW5hZ2UgdG8gcmVjb21wcmVzcyBhbHJlYWR5LWNvbXByZXNzZWQgZGF0YS4gU2F5ICdZJyBpZiB1bnN1cmUuCisKK2NvbmZpZyBKRkZTMl9SVUJJTgorCWJvb2wgIkpGRlMyIFJVQklOIGNvbXByZXNzaW9uIHN1cHBvcnQiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCBuCisJaGVscAorCSAgUlVCSU5NSVBTIGFuZCBEWU5SVUJJTiBjb21wcmVzc29ycy4gU2F5ICdOJyBpZiB1bnN1cmUuCisKK2Nob2ljZQorCXByb21wdCAiSkZGUzIgZGVmYXVsdCBjb21wcmVzc2lvbiBtb2RlIiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCisJZGVmYXVsdCBKRkZTMl9DTU9ERV9QUklPUklUWQorCWRlcGVuZHMgb24gSkZGUzJfRlMKKwloZWxwCisJICBZb3UgY2FuIHNldCBoZXJlIHRoZSBkZWZhdWx0IGNvbXByZXNzaW9uIG1vZGUgb2YgSkZGUzIgZnJvbQorCSAgdGhlIGF2YWlsYWJsZSBjb21wcmVzc2lvbiBtb2Rlcy4gRG9uJ3QgdG91Y2ggaWYgdW5zdXJlLgorCitjb25maWcgSkZGUzJfQ01PREVfTk9ORQorCWJvb2wgIm5vIGNvbXByZXNzaW9uIgorCWhlbHAKKwkgIFVzZXMgbm8gY29tcHJlc3Npb24uCisKK2NvbmZpZyBKRkZTMl9DTU9ERV9QUklPUklUWQorCWJvb2wgInByaW9yaXR5IgorCWhlbHAKKwkgIFRyaWVzIHRoZSBjb21wcmVzc29ycyBpbiBhIHByZWRlZmluZWQgb3JkZXIgYW5kIGNob29zZXMgdGhlIGZpcnN0CisJICBzdWNjZXNzZnVsIG9uZS4KKworY29uZmlnIEpGRlMyX0NNT0RFX1NJWkUKKwlib29sICJzaXplIChFWFBFUklNRU5UQUwpIgorCWhlbHAKKwkgIFRyaWVzIGFsbCBjb21wcmVzc29ycyBhbmQgY2hvb3NlcyB0aGUgb25lIHdoaWNoIGhhcyB0aGUgc21hbGxlc3QKKwkgIHJlc3VsdC4KKworY29uZmlnIEpGRlMyX0NNT0RFX0ZBVk9VUkxaTworCWJvb2wgIkZhdm91ciBMWk8iCisJaGVscAorCSAgVHJpZXMgYWxsIGNvbXByZXNzb3JzIGFuZCBjaG9vc2VzIHRoZSBvbmUgd2hpY2ggaGFzIHRoZSBzbWFsbGVzdAorCSAgcmVzdWx0IGJ1dCBnaXZlcyBzb21lIHByZWZlcmVuY2UgdG8gTFpPICh3aGljaCBoYXMgZmFzdGVyCisJICBkZWNvbXByZXNzaW9uKSBhdCB0aGUgZXhwZW5zZSBvZiBzaXplLgorCitlbmRjaG9pY2UKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2NvbXByLmMgYi9mcy9qZmZzMi9jb21wci5jCmluZGV4IDg2NzM5ZWUuLmYyNWU3MGMgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2NvbXByLmMKKysrIGIvZnMvamZmczIvY29tcHIuYwpAQCAtNTMsOCArNTMsOCBAQAogfQogCiAvKiBqZmZzMl9jb21wcmVzczoKLSAqIEBkYXRhOiBQb2ludGVyIHRvIHVuY29tcHJlc3NlZCBkYXRhCi0gKiBAY2RhdGE6IFBvaW50ZXIgdG8gcmV0dXJuZWQgcG9pbnRlciB0byBidWZmZXIgZm9yIGNvbXByZXNzZWQgZGF0YQorICogQGRhdGFfaW46IFBvaW50ZXIgdG8gdW5jb21wcmVzc2VkIGRhdGEKKyAqIEBjcGFnZV9vdXQ6IFBvaW50ZXIgdG8gcmV0dXJuZWQgcG9pbnRlciB0byBidWZmZXIgZm9yIGNvbXByZXNzZWQgZGF0YQogICogQGRhdGFsZW46IE9uIGVudHJ5LCBob2xkcyB0aGUgYW1vdW50IG9mIGRhdGEgYXZhaWxhYmxlIGZvciBjb21wcmVzc2lvbi4KICAqCU9uIGV4aXQsIGV4cGVjdGVkIHRvIGhvbGQgdGhlIGFtb3VudCBvZiBkYXRhIGFjdHVhbGx5IGNvbXByZXNzZWQuCiAgKiBAY2RhdGFsZW46IE9uIGVudHJ5LCBob2xkcyB0aGUgYW1vdW50IG9mIHNwYWNlIGF2YWlsYWJsZSBmb3IgY29tcHJlc3NlZApkaWZmIC0tZ2l0IGEvZnMvamZmczIvZGlyLmMgYi9mcy9qZmZzMi9kaXIuYwppbmRleCBjZDIxOWVmLi5iMWFhYWU4IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9kaXIuYworKysgYi9mcy9qZmZzMi9kaXIuYwpAQCAtMzExLDcgKzMxMSw3IEBACiAJLyogRklYTUU6IElmIHlvdSBjYXJlLiBXZSdkIG5lZWQgdG8gdXNlIGZyYWdzIGZvciB0aGUgdGFyZ2V0CiAJICAgaWYgaXQgZ3Jvd3MgbXVjaCBtb3JlIHRoYW4gdGhpcyAqLwogCWlmICh0YXJnZXRsZW4gPiAyNTQpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAogCXJpID0gamZmczJfYWxsb2NfcmF3X2lub2RlKCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2VyYXNlLmMgYi9mcy9qZmZzMi9lcmFzZS5jCmluZGV4IGRkZGIyYTYuLjI1OTQ2MWIgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2VyYXNlLmMKKysrIGIvZnMvamZmczIvZXJhc2UuYwpAQCAtNjgsNyArNjgsNyBAQAogCWluc3RyLT5sZW4gPSBjLT5zZWN0b3Jfc2l6ZTsKIAlpbnN0ci0+Y2FsbGJhY2sgPSBqZmZzMl9lcmFzZV9jYWxsYmFjazsKIAlpbnN0ci0+cHJpdiA9ICh1bnNpZ25lZCBsb25nKSgmaW5zdHJbMV0pOwotCWluc3RyLT5mYWlsX2FkZHIgPSAweGZmZmZmZmZmOworCWluc3RyLT5mYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV047CiAKIAkoKHN0cnVjdCBlcmFzZV9wcml2X3N0cnVjdCAqKWluc3RyLT5wcml2KS0+amViID0gamViOwogCSgoc3RydWN0IGVyYXNlX3ByaXZfc3RydWN0ICopaW5zdHItPnByaXYpLT5jID0gYzsKQEAgLTE3NSw3ICsxNzUsNyBAQAogewogCS8qIEZvciBOQU5ELCBpZiB0aGUgZmFpbHVyZSBkaWQgbm90IG9jY3VyIGF0IHRoZSBkZXZpY2UgbGV2ZWwgZm9yIGEKIAkgICBzcGVjaWZpYyBwaHlzaWNhbCBwYWdlLCBkb24ndCBib3RoZXIgdXBkYXRpbmcgdGhlIGJhZCBibG9jayB0YWJsZS4gKi8KLQlpZiAoamZmczJfY2xlYW5tYXJrZXJfb29iKGMpICYmIChiYWRfb2Zmc2V0ICE9IDB4ZmZmZmZmZmYpKSB7CisJaWYgKGpmZnMyX2NsZWFubWFya2VyX29vYihjKSAmJiAoYmFkX29mZnNldCAhPSBNVERfRkFJTF9BRERSX1VOS05PV04pKSB7CiAJCS8qIFdlIGhhZCBhIGRldmljZS1sZXZlbCBmYWlsdXJlIHRvIGVyYXNlLiAgTGV0J3Mgc2VlIGlmIHdlJ3ZlCiAJCSAgIGZhaWxlZCB0b28gbWFueSB0aW1lcy4gKi8KIAkJaWYgKCFqZmZzMl93cml0ZV9uYW5kX2JhZGJsb2NrKGMsIGplYiwgYmFkX29mZnNldCkpIHsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2ZzLmMgYi9mcy9qZmZzMi9mcy5jCmluZGV4IDA4NmM0MzguLjI0OTMwNWQgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2ZzLmMKKysrIGIvZnMvamZmczIvZnMuYwpAQCAtMjA3LDYgKzIwNyw4IEBACiAJYnVmLT5mX2ZpbGVzID0gMDsKIAlidWYtPmZfZmZyZWUgPSAwOwogCWJ1Zi0+Zl9uYW1lbGVuID0gSkZGUzJfTUFYX05BTUVfTEVOOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9IEpGRlMyX1NVUEVSX01BR0lDOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9IGMtPm10ZC0+aW5kZXg7CiAKIAlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAJYXZhaWwgPSBjLT5kaXJ0eV9zaXplICsgYy0+ZnJlZV9zaXplOwpAQCAtNDQwLDE0ICs0NDIsMTQgQEAKIAogCW1lbXNldChyaSwgMCwgc2l6ZW9mKCpyaSkpOwogCS8qIFNldCBPUy1zcGVjaWZpYyBkZWZhdWx0cyBmb3IgbmV3IGlub2RlcyAqLwotCXJpLT51aWQgPSBjcHVfdG9famUxNihjdXJyZW50LT5mc3VpZCk7CisJcmktPnVpZCA9IGNwdV90b19qZTE2KGN1cnJlbnRfZnN1aWQoKSk7CiAKIAlpZiAoZGlyX2ktPmlfbW9kZSAmIFNfSVNHSUQpIHsKIAkJcmktPmdpZCA9IGNwdV90b19qZTE2KGRpcl9pLT5pX2dpZCk7CiAJCWlmIChTX0lTRElSKG1vZGUpKQogCQkJbW9kZSB8PSBTX0lTR0lEOwogCX0gZWxzZSB7Ci0JCXJpLT5naWQgPSBjcHVfdG9famUxNihjdXJyZW50LT5mc2dpZCk7CisJCXJpLT5naWQgPSBjcHVfdG9famUxNihjdXJyZW50X2ZzZ2lkKCkpOwogCX0KIAogCS8qIFBPU0lYIEFDTHMgaGF2ZSB0byBiZSBwcm9jZXNzZWQgbm93LCBhdCBsZWFzdCBwYXJ0bHkuCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9ub2RlbWdtdC5jIGIvZnMvamZmczIvbm9kZW1nbXQuYwppbmRleCBhOWJmOTYwLi4wODc1YjYwIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9ub2RlbWdtdC5jCisrKyBiL2ZzL2pmZnMyL25vZGVtZ210LmMKQEAgLTI2MSw2ICsyNjEsMTAgQEAKIAogCWpmZnMyX3N1bV9yZXNldF9jb2xsZWN0ZWQoYy0+c3VtbWFyeSk7IC8qIHJlc2V0IGNvbGxlY3RlZCBzdW1tYXJ5ICovCiAKKwkvKiBhZGp1c3Qgd3JpdGUgYnVmZmVyIG9mZnNldCwgZWxzZSB3ZSBnZXQgYSBub24gY29udGlndW91cyB3cml0ZSBidWcgKi8KKwlpZiAoIShjLT53YnVmX29mcyAlIGMtPnNlY3Rvcl9zaXplKSAmJiAhYy0+d2J1Zl9sZW4pCisJCWMtPndidWZfb2ZzID0gMHhmZmZmZmZmZjsKKwogCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9maW5kX25leHRibG9jaygpOiBuZXcgbmV4dGJsb2NrID0gMHglMDh4XG4iLCBjLT5uZXh0YmxvY2stPm9mZnNldCkpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi93YnVmLmMgYi9mcy9qZmZzMi93YnVmLmMKaW5kZXggMGU3OGIwMC4uZDlhNzIxZSAxMDA2NDQKLS0tIGEvZnMvamZmczIvd2J1Zi5jCisrKyBiL2ZzL2pmZnMyL3didWYuYwpAQCAtNjc5LDEwICs2NzksNyBAQAogCiAJbWVtc2V0KGMtPndidWYsMHhmZixjLT53YnVmX3BhZ2VzaXplKTsKIAkvKiBhZGp1c3Qgd3JpdGUgYnVmZmVyIG9mZnNldCwgZWxzZSB3ZSBnZXQgYSBub24gY29udGlndW91cyB3cml0ZSBidWcgKi8KLQlpZiAoU0VDVE9SX0FERFIoYy0+d2J1Zl9vZnMpID09IFNFQ1RPUl9BRERSKGMtPndidWZfb2ZzK2MtPndidWZfcGFnZXNpemUpKQotCQljLT53YnVmX29mcyArPSBjLT53YnVmX3BhZ2VzaXplOwotCWVsc2UKLQkJYy0+d2J1Zl9vZnMgPSAweGZmZmZmZmZmOworCWMtPndidWZfb2ZzICs9IGMtPndidWZfcGFnZXNpemU7CiAJYy0+d2J1Zl9sZW4gPSAwOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvamZzL3N1cGVyLmMgYi9mcy9qZnMvc3VwZXIuYwppbmRleCAzNjMwNzE4Li4wZGFlMzQ1IDEwMDY0NAotLS0gYS9mcy9qZnMvc3VwZXIuYworKysgYi9mcy9qZnMvc3VwZXIuYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAJT3B0X3VzcnF1b3RhLCBPcHRfZ3JwcXVvdGEsIE9wdF91aWQsIE9wdF9naWQsIE9wdF91bWFzawogfTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewogCXtPcHRfaW50ZWdyaXR5LCAiaW50ZWdyaXR5In0sCiAJe09wdF9ub2ludGVncml0eSwgIm5vaW50ZWdyaXR5In0sCiAJe09wdF9pb2NoYXJzZXQsICJpb2NoYXJzZXQ9JXMifSwKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL01ha2VmaWxlIGIvZnMvbG9ja2QvTWFrZWZpbGUKaW5kZXggNzcyNWEwYS4uOTdmNjA3MyAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvTWFrZWZpbGUKKysrIGIvZnMvbG9ja2QvTWFrZWZpbGUKQEAgLTUsNiArNSw2IEBACiBvYmotJChDT05GSUdfTE9DS0QpICs9IGxvY2tkLm8KIAogbG9ja2Qtb2Jqcy15IDo9IGNsbnRsb2NrLm8gY2xudHByb2MubyBob3N0Lm8gc3ZjLm8gc3ZjbG9jay5vIHN2Y3NoYXJlLm8gXAotCSAgICAgICAgc3ZjcHJvYy5vIHN2Y3N1YnMubyBtb24ubyB4ZHIubworCSAgICAgICAgc3ZjcHJvYy5vIHN2Y3N1YnMubyBtb24ubyB4ZHIubyBncmFjZS5vCiBsb2NrZC1vYmpzLSQoQ09ORklHX0xPQ0tEX1Y0KSArPSB4ZHI0Lm8gc3ZjNHByb2MubwogbG9ja2Qtb2JqcwkJICAgICAgOj0gJChsb2NrZC1vYmpzLXkpCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9jbG50bG9jay5jIGIvZnMvbG9ja2QvY2xudGxvY2suYwppbmRleCAwYjQ1ZmQzLi44MzA3ZGQ2IDEwMDY0NAotLS0gYS9mcy9sb2NrZC9jbG50bG9jay5jCisrKyBiL2ZzL2xvY2tkL2NsbnRsb2NrLmMKQEAgLTU0LDE0ICs1NCwxMyBAQAogCXUzMiBubG1fdmVyc2lvbiA9IChubG1faW5pdC0+bmZzX3ZlcnNpb24gPT0gMikgPyAxIDogNDsKIAlpbnQgc3RhdHVzOwogCi0Jc3RhdHVzID0gbG9ja2RfdXAobmxtX2luaXQtPnByb3RvY29sKTsKKwlzdGF0dXMgPSBsb2NrZF91cCgpOwogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gRVJSX1BUUihzdGF0dXMpOwogCi0JaG9zdCA9IG5sbWNsbnRfbG9va3VwX2hvc3QoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW5sbV9pbml0LT5hZGRyZXNzLAorCWhvc3QgPSBubG1jbG50X2xvb2t1cF9ob3N0KG5sbV9pbml0LT5hZGRyZXNzLCBubG1faW5pdC0+YWRkcmxlbiwKIAkJCQkgICBubG1faW5pdC0+cHJvdG9jb2wsIG5sbV92ZXJzaW9uLAotCQkJCSAgIG5sbV9pbml0LT5ob3N0bmFtZSwKLQkJCQkgICBzdHJsZW4obmxtX2luaXQtPmhvc3RuYW1lKSk7CisJCQkJICAgbmxtX2luaXQtPmhvc3RuYW1lKTsKIAlpZiAoaG9zdCA9PSBOVUxMKSB7CiAJCWxvY2tkX2Rvd24oKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0xDSyk7CkBAIC0xNDIsNyArMTQxLDcgQEAKIC8qCiAgKiBUaGUgc2VydmVyIGxvY2tkIGhhcyBjYWxsZWQgdXMgYmFjayB0byB0ZWxsIHVzIHRoZSBsb2NrIHdhcyBncmFudGVkCiAgKi8KLV9fYmUzMiBubG1jbG50X2dyYW50KGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwgY29uc3Qgc3RydWN0IG5sbV9sb2NrICpsb2NrKQorX19iZTMyIG5sbWNsbnRfZ3JhbnQoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLCBjb25zdCBzdHJ1Y3QgbmxtX2xvY2sgKmxvY2spCiB7CiAJY29uc3Qgc3RydWN0IGZpbGVfbG9jayAqZmwgPSAmbG9jay0+Zmw7CiAJY29uc3Qgc3RydWN0IG5mc19maCAqZmggPSAmbG9jay0+Zmg7CkBAIC0xNjYsNyArMTY1LDcgQEAKIAkJICovCiAJCWlmIChmbF9ibG9ja2VkLT5mbF91Lm5mc19mbC5vd25lci0+cGlkICE9IGxvY2stPnN2aWQpCiAJCQljb250aW51ZTsKLQkJaWYgKCFubG1fY21wX2FkZHIoJmJsb2NrLT5iX2hvc3QtPmhfYWRkciwgYWRkcikpCisJCWlmICghbmxtX2NtcF9hZGRyKG5sbV9hZGRyKGJsb2NrLT5iX2hvc3QpLCBhZGRyKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAobmZzX2NvbXBhcmVfZmgoTkZTX0ZIKGZsX2Jsb2NrZWQtPmZsX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpICxmaCkgIT0gMCkKIAkJCWNvbnRpbnVlOwpAQCAtMjE2LDcgKzIxNSw3IEBACiAJLyogVGhpcyBvbmUgZW5zdXJlcyB0aGF0IG91ciBwYXJlbnQgZG9lc24ndCB0ZXJtaW5hdGUgd2hpbGUgdGhlCiAJICogcmVjbGFpbSBpcyBpbiBwcm9ncmVzcyAqLwogCWxvY2tfa2VybmVsKCk7Ci0JbG9ja2RfdXAoMCk7IC8qIG5vdGU6IHRoaXMgY2Fubm90IGZhaWwgYXMgbG9ja2QgaXMgYWxyZWFkeSBydW5uaW5nICovCisJbG9ja2RfdXAoKTsJLyogbm90ZTogdGhpcyBjYW5ub3QgZmFpbCBhcyBsb2NrZCBpcyBhbHJlYWR5IHJ1bm5pbmcgKi8KIAogCWRwcmludGsoImxvY2tkOiByZWNsYWltaW5nIGxvY2tzIGZvciBob3N0ICVzXG4iLCBob3N0LT5oX25hbWUpOwogCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9ncmFjZS5jIGIvZnMvbG9ja2QvZ3JhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODNjYzFmCi0tLSAvZGV2L251bGwKKysrIGIvZnMvbG9ja2QvZ3JhY2UuYwpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29tbW9uIGNvZGUgZm9yIGNvbnRyb2wgb2YgbG9ja2QgYW5kIG5mc3Y0IGdyYWNlIHBlcmlvZHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2JpbmQuaD4KKworc3RhdGljIExJU1RfSEVBRChncmFjZV9saXN0KTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3JhY2VfbG9jayk7CisKKy8qKgorICogbG9ja3Nfc3RhcnRfZ3JhY2UKKyAqIEBsbTogd2hvIHRoaXMgZ3JhY2UgcGVyaW9kIGlzIGZvcgorICoKKyAqIEEgZ3JhY2UgcGVyaW9kIGlzIGEgcGVyaW9kIGR1cmluZyB3aGljaCBsb2NrcyBzaG91bGQgbm90IGJlIGdpdmVuCisgKiBvdXQuICBDdXJyZW50bHkgZ3JhY2UgcGVyaW9kcyBhcmUgb25seSBlbmZvcmNlZCBieSB0aGUgdHdvIGxvY2sKKyAqIG1hbmFnZXJzIChsb2NrZCBhbmQgbmZzZCksIHVzaW5nIHRoZSBsb2Nrc19pbl9ncmFjZSgpIGZ1bmN0aW9uIHRvCisgKiBjaGVjayB3aGVuIHRoZXkgYXJlIGluIGEgZ3JhY2UgcGVyaW9kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHN0YXJ0IGEgZ3JhY2UgcGVyaW9kLgorICovCit2b2lkIGxvY2tzX3N0YXJ0X2dyYWNlKHN0cnVjdCBsb2NrX21hbmFnZXIgKmxtKQoreworCXNwaW5fbG9jaygmZ3JhY2VfbG9jayk7CisJbGlzdF9hZGQoJmxtLT5saXN0LCAmZ3JhY2VfbGlzdCk7CisJc3Bpbl91bmxvY2soJmdyYWNlX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwobG9ja3Nfc3RhcnRfZ3JhY2UpOworCisvKioKKyAqIGxvY2tzX2VuZF9ncmFjZQorICogQGxtOiB3aG8gdGhpcyBncmFjZSBwZXJpb2QgaXMgZm9yCisgKgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHN0YXRlIHRoYXQgdGhlIGdpdmVuIGxvY2sgbWFuYWdlciBpcyByZWFkeSB0bworICogcmVzdW1lIHJlZ3VsYXIgbG9ja2luZy4gIFRoZSBncmFjZSBwZXJpb2Qgd2lsbCBub3QgZW5kIHVudGlsIGFsbCBsb2NrCisgKiBtYW5hZ2VycyB0aGF0IGNhbGxlZCBsb2Nrc19zdGFydF9ncmFjZSgpIGFsc28gY2FsbCBsb2Nrc19lbmRfZ3JhY2UoKS4KKyAqIE5vdGUgdGhhdCBjYWxsZXJzIGNvdW50IG9uIGl0IGJlaW5nIHNhZmUgdG8gY2FsbCB0aGlzIG1vcmUgdGhhbiBvbmNlLAorICogYW5kIHRoZSBzZWNvbmQgY2FsbCBzaG91bGQgYmUgYSBuby1vcC4KKyAqLwordm9pZCBsb2Nrc19lbmRfZ3JhY2Uoc3RydWN0IGxvY2tfbWFuYWdlciAqbG0pCit7CisJc3Bpbl9sb2NrKCZncmFjZV9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZsbS0+bGlzdCk7CisJc3Bpbl91bmxvY2soJmdyYWNlX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwobG9ja3NfZW5kX2dyYWNlKTsKKworLyoqCisgKiBsb2Nrc19pbl9ncmFjZQorICoKKyAqIExvY2sgbWFuYWdlcnMgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGVuIGl0IGlzIE9LIGZvciB0aGVtCisgKiB0byBhbnN3ZXIgb3JkaW5hcnkgbG9jayByZXF1ZXN0cywgYW5kIHdoZW4gdGhleSBzaG91bGQgYWNjZXB0IG9ubHkKKyAqIGxvY2sgcmVjbGFpbXMuCisgKi8KK2ludCBsb2Nrc19pbl9ncmFjZSh2b2lkKQoreworCXJldHVybiAhbGlzdF9lbXB0eSgmZ3JhY2VfbGlzdCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsb2Nrc19pbl9ncmFjZSk7CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9ob3N0LmMgYi9mcy9sb2NrZC9ob3N0LmMKaW5kZXggYTE3NjY0Yy4uOWZkODg4OSAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvaG9zdC5jCisrKyBiL2ZzL2xvY2tkL2hvc3QuYwpAQCAtMTEsMTYgKzExLDE3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZC9sb2NrZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkL3NtX2ludGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAKICNkZWZpbmUgTkxNREJHX0ZBQ0lMSVRZCQlOTE1EQkdfSE9TVENBQ0hFCiAjZGVmaW5lIE5MTV9IT1NUX05SSEFTSAkJMzIKLSNkZWZpbmUgTkxNX0FERFJIQVNIKGFkZHIpCShudG9obChhZGRyKSAmIChOTE1fSE9TVF9OUkhBU0gtMSkpCiAjZGVmaW5lIE5MTV9IT1NUX1JFQklORAkJKDYwICogSFopCiAjZGVmaW5lIE5MTV9IT1NUX0VYUElSRQkJKDMwMCAqIEhaKQogI2RlZmluZSBOTE1fSE9TVF9DT0xMRUNUCSgxMjAgKiBIWikKQEAgLTMwLDQyICszMSwxMTUgQEAKIHN0YXRpYyBpbnQJCQlucmhvc3RzOwogc3RhdGljIERFRklORV9NVVRFWChubG1faG9zdF9tdXRleCk7CiAKLQogc3RhdGljIHZvaWQJCQlubG1fZ2NfaG9zdHModm9pZCk7Ci1zdGF0aWMgc3RydWN0IG5zbV9oYW5kbGUgKglfX25zbV9maW5kKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqLAotCQkJCQljb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwgaW50KTsKLXN0YXRpYyBzdHJ1Y3QgbnNtX2hhbmRsZSAqCW5zbV9maW5kKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLAotCQkJCQkgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0JCQkJCSB1bnNpZ25lZCBpbnQgaG9zdG5hbWVfbGVuKTsKK3N0YXRpYyBzdHJ1Y3QgbnNtX2hhbmRsZQkqbnNtX2ZpbmQoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAsCisJCQkJCQljb25zdCBzaXplX3Qgc2FsZW4sCisJCQkJCQljb25zdCBjaGFyICpob3N0bmFtZSwKKwkJCQkJCWNvbnN0IHNpemVfdCBob3N0bmFtZV9sZW4sCisJCQkJCQljb25zdCBpbnQgY3JlYXRlKTsKKworc3RydWN0IG5sbV9sb29rdXBfaG9zdF9pbmZvIHsKKwljb25zdCBpbnQJCXNlcnZlcjsJCS8qIHNlYXJjaCBmb3Igc2VydmVyfGNsaWVudCAqLworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcgkqc2FwOwkJLyogYWRkcmVzcyB0byBzZWFyY2ggZm9yICovCisJY29uc3Qgc2l6ZV90CQlzYWxlbjsJCS8qIGl0J3MgbGVuZ3RoICovCisJY29uc3QgdW5zaWduZWQgc2hvcnQJcHJvdG9jb2w7CS8qIHRyYW5zcG9ydCB0byBzZWFyY2ggZm9yKi8KKwljb25zdCB1MzIJCXZlcnNpb247CS8qIE5MTSB2ZXJzaW9uIHRvIHNlYXJjaCBmb3IgKi8KKwljb25zdCBjaGFyCQkqaG9zdG5hbWU7CS8qIHJlbW90ZSdzIGhvc3RuYW1lICovCisJY29uc3Qgc2l6ZV90CQlob3N0bmFtZV9sZW47CS8qIGl0J3MgbGVuZ3RoICovCisJY29uc3Qgc3RydWN0IHNvY2thZGRyCSpzcmNfc2FwOwkvKiBvdXIgYWRkcmVzcyAob3B0aW9uYWwpICovCisJY29uc3Qgc2l6ZV90CQlzcmNfbGVuOwkvKiBpdCdzIGxlbmd0aCAqLworfTsKKworLyoKKyAqIEhhc2ggZnVuY3Rpb24gbXVzdCB3b3JrIHdlbGwgb24gYmlnLSBhbmQgbGl0dGxlLWVuZGlhbiBwbGF0Zm9ybXMKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBfX25sbV9oYXNoMzIoY29uc3QgX19iZTMyIG4pCit7CisJdW5zaWduZWQgaW50IGhhc2ggPSAoX19mb3JjZSB1MzIpbiBeICgoX19mb3JjZSB1MzIpbiA+PiAxNik7CisJcmV0dXJuIGhhc2ggXiAoaGFzaCA+PiA4KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX25sbV9oYXNoX2FkZHI0KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDsKKwlyZXR1cm4gX19ubG1faGFzaDMyKHNpbi0+c2luX2FkZHIuc19hZGRyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX25sbV9oYXNoX2FkZHI2KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgYWRkciA9IHNpbjYtPnNpbjZfYWRkcjsKKwlyZXR1cm4gX19ubG1faGFzaDMyKGFkZHIuczZfYWRkcjMyWzBdKSBeCisJICAgICAgIF9fbmxtX2hhc2gzMihhZGRyLnM2X2FkZHIzMlsxXSkgXgorCSAgICAgICBfX25sbV9oYXNoMzIoYWRkci5zNl9hZGRyMzJbMl0pIF4KKwkgICAgICAgX19ubG1faGFzaDMyKGFkZHIuczZfYWRkcjMyWzNdKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBubG1faGFzaF9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwKQoreworCXVuc2lnbmVkIGludCBoYXNoOworCisJc3dpdGNoIChzYXAtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJaGFzaCA9IF9fbmxtX2hhc2hfYWRkcjQoc2FwKTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJaGFzaCA9IF9fbmxtX2hhc2hfYWRkcjYoc2FwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaGFzaCA9IDA7CisJfQorCXJldHVybiBoYXNoICYgKE5MTV9IT1NUX05SSEFTSCAtIDEpOworfQorCitzdGF0aWMgdm9pZCBubG1fY2xlYXJfcG9ydChzdHJ1Y3Qgc29ja2FkZHIgKnNhcCkKK3sKKwlzd2l0Y2ggKHNhcC0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcCktPnNpbl9wb3J0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwKS0+c2luNl9wb3J0ID0gMDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBubG1fZGlzcGxheV9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLAorCQkJCWNoYXIgKmJ1ZiwgY29uc3Qgc2l6ZV90IGxlbikKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXA7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwOworCisJc3dpdGNoIChzYXAtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfVU5TUEVDOgorCQlzbnByaW50ZihidWYsIGxlbiwgInVuc3BlY2lmaWVkIik7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDoKKwkJc25wcmludGYoYnVmLCBsZW4sIE5JUFFVQURfRk1ULCBOSVBRVUFEKHNpbi0+c2luX2FkZHIuc19hZGRyKSk7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCWlmIChpcHY2X2FkZHJfdjRtYXBwZWQoJnNpbjYtPnNpbjZfYWRkcikpCisJCQlzbnByaW50ZihidWYsIGxlbiwgTklQUVVBRF9GTVQsCisJCQkJIE5JUFFVQUQoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlszXSkpOworCQllbHNlCisJCQlzbnByaW50ZihidWYsIGxlbiwgTklQNl9GTVQsIE5JUDYoc2luNi0+c2luNl9hZGRyKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNucHJpbnRmKGJ1ZiwgbGVuLCAidW5zdXBwb3J0ZWQgYWRkcmVzcyBmYW1pbHkiKTsKKwkJYnJlYWs7CisJfQorfQogCiAvKgogICogQ29tbW9uIGhvc3QgbG9va3VwIHJvdXRpbmUgZm9yIHNlcnZlciAmIGNsaWVudAogICovCi1zdGF0aWMgc3RydWN0IG5sbV9ob3N0ICpubG1fbG9va3VwX2hvc3QoaW50IHNlcnZlciwKLQkJCQkJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4sCi0JCQkJCWludCBwcm90bywgdTMyIHZlcnNpb24sCi0JCQkJCWNvbnN0IGNoYXIgKmhvc3RuYW1lLAotCQkJCQl1bnNpZ25lZCBpbnQgaG9zdG5hbWVfbGVuLAotCQkJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNzaW4pCitzdGF0aWMgc3RydWN0IG5sbV9ob3N0ICpubG1fbG9va3VwX2hvc3Qoc3RydWN0IG5sbV9sb29rdXBfaG9zdF9pbmZvICpuaSkKIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47CiAJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKIAlzdHJ1Y3QgbmxtX2hvc3QJKmhvc3Q7CiAJc3RydWN0IG5zbV9oYW5kbGUgKm5zbSA9IE5VTEw7Ci0JaW50CQloYXNoOwogCi0JZHByaW50aygibG9ja2Q6IG5sbV9sb29rdXBfaG9zdCgiTklQUVVBRF9GTVQiLT4iTklQUVVBRF9GTVQKLQkJCSIsIHA9JWQsIHY9JXUsIG15IHJvbGU9JXMsIG5hbWU9JS4qcylcbiIsCi0JCQlOSVBRVUFEKHNzaW4tPnNpbl9hZGRyLnNfYWRkciksCi0JCQlOSVBRVUFEKHNpbi0+c2luX2FkZHIuc19hZGRyKSwgcHJvdG8sIHZlcnNpb24sCi0JCQlzZXJ2ZXI/ICJzZXJ2ZXIiIDogImNsaWVudCIsCi0JCQlob3N0bmFtZV9sZW4sCi0JCQlob3N0bmFtZT8gaG9zdG5hbWUgOiAiPG5vbmU+Iik7Ci0KLQotCWhhc2ggPSBOTE1fQUREUkhBU0goc2luLT5zaW5fYWRkci5zX2FkZHIpOwotCi0JLyogTG9jayBoYXNoIHRhYmxlICovCiAJbXV0ZXhfbG9jaygmbmxtX2hvc3RfbXV0ZXgpOwogCiAJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgbmV4dF9nYykpCkBAIC03OCwyMiArMTUyLDIyIEBACiAJICogZGlmZmVyZW50IE5MTSBycGNfY2xpZW50cyBpbnRvIG9uZSBzaW5nbGUgbmxtX2hvc3Qgb2JqZWN0LgogCSAqIFRoaXMgd291bGQgYWxsb3cgdXMgdG8gaGF2ZSBvbmUgbmxtX2hvc3QgcGVyIGFkZHJlc3MuCiAJICovCi0JY2hhaW4gPSAmbmxtX2hvc3RzW2hhc2hdOworCWNoYWluID0gJm5sbV9ob3N0c1tubG1faGFzaF9hZGRyZXNzKG5pLT5zYXApXTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShob3N0LCBwb3MsIGNoYWluLCBoX2hhc2gpIHsKLQkJaWYgKCFubG1fY21wX2FkZHIoJmhvc3QtPmhfYWRkciwgc2luKSkKKwkJaWYgKCFubG1fY21wX2FkZHIobmxtX2FkZHIoaG9zdCksIG5pLT5zYXApKQogCQkJY29udGludWU7CiAKIAkJLyogU2VlIGlmIHdlIGhhdmUgYW4gTlNNIGhhbmRsZSBmb3IgdGhpcyBjbGllbnQgKi8KIAkJaWYgKCFuc20pCiAJCQluc20gPSBob3N0LT5oX25zbWhhbmRsZTsKIAotCQlpZiAoaG9zdC0+aF9wcm90byAhPSBwcm90bykKKwkJaWYgKGhvc3QtPmhfcHJvdG8gIT0gbmktPnByb3RvY29sKQogCQkJY29udGludWU7Ci0JCWlmIChob3N0LT5oX3ZlcnNpb24gIT0gdmVyc2lvbikKKwkJaWYgKGhvc3QtPmhfdmVyc2lvbiAhPSBuaS0+dmVyc2lvbikKIAkJCWNvbnRpbnVlOwotCQlpZiAoaG9zdC0+aF9zZXJ2ZXIgIT0gc2VydmVyKQorCQlpZiAoaG9zdC0+aF9zZXJ2ZXIgIT0gbmktPnNlcnZlcikKIAkJCWNvbnRpbnVlOwotCQlpZiAoIW5sbV9jbXBfYWRkcigmaG9zdC0+aF9zYWRkciwgc3NpbikpCisJCWlmICghbmxtX2NtcF9hZGRyKG5sbV9zcmNhZGRyKGhvc3QpLCBuaS0+c3JjX3NhcCkpCiAJCQljb250aW51ZTsKIAogCQkvKiBNb3ZlIHRvIGhlYWQgb2YgaGFzaCBjaGFpbi4gKi8KQEAgLTEwMSwzMCArMTc1LDQxIEBACiAJCWhsaXN0X2FkZF9oZWFkKCZob3N0LT5oX2hhc2gsIGNoYWluKTsKIAogCQlubG1fZ2V0X2hvc3QoaG9zdCk7CisJCWRwcmludGsoImxvY2tkOiBubG1fbG9va3VwX2hvc3QgZm91bmQgaG9zdCAlcyAoJXMpXG4iLAorCQkJCWhvc3QtPmhfbmFtZSwgaG9zdC0+aF9hZGRyYnVmKTsKIAkJZ290byBvdXQ7CiAJfQorCisJLyoKKwkgKiBUaGUgaG9zdCB3YXNuJ3QgaW4gb3VyIGhhc2ggdGFibGUuICBJZiB3ZSBkb24ndAorCSAqIGhhdmUgYW4gTlNNIGhhbmRsZSBmb3IgaXQgeWV0LCBjcmVhdGUgb25lLgorCSAqLwogCWlmIChuc20pCiAJCWF0b21pY19pbmMoJm5zbS0+c21fY291bnQpOwotCi0JaG9zdCA9IE5VTEw7Ci0KLQkvKiBTYWRseSwgdGhlIGhvc3QgaXNuJ3QgaW4gb3VyIGhhc2ggdGFibGUgeWV0LiBTZWUgaWYKLQkgKiB3ZSBoYXZlIGFuIE5TTSBoYW5kbGUgZm9yIGl0LiBJZiBub3QsIGNyZWF0ZSBvbmUuCi0JICovCi0JaWYgKCFuc20gJiYgIShuc20gPSBuc21fZmluZChzaW4sIGhvc3RuYW1lLCBob3N0bmFtZV9sZW4pKSkKLQkJZ290byBvdXQ7CisJZWxzZSB7CisJCWhvc3QgPSBOVUxMOworCQluc20gPSBuc21fZmluZChuaS0+c2FwLCBuaS0+c2FsZW4sCisJCQkJbmktPmhvc3RuYW1lLCBuaS0+aG9zdG5hbWVfbGVuLCAxKTsKKwkJaWYgKCFuc20pIHsKKwkJCWRwcmludGsoImxvY2tkOiBubG1fbG9va3VwX2hvc3QgZmFpbGVkOyAiCisJCQkJIm5vIG5zbSBoYW5kbGVcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CiAKIAlob3N0ID0ga3phbGxvYyhzaXplb2YoKmhvc3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhvc3QpIHsKIAkJbnNtX3JlbGVhc2UobnNtKTsKKwkJZHByaW50aygibG9ja2Q6IG5sbV9sb29rdXBfaG9zdCBmYWlsZWQ7IG5vIG1lbW9yeVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlob3N0LT5oX25hbWUJICAgPSBuc20tPnNtX25hbWU7Ci0JaG9zdC0+aF9hZGRyICAgICAgID0gKnNpbjsKLQlob3N0LT5oX2FkZHIuc2luX3BvcnQgPSAwOwkvKiBvdWNoISAqLwotCWhvc3QtPmhfc2FkZHIJICAgPSAqc3NpbjsKLQlob3N0LT5oX3ZlcnNpb24gICAgPSB2ZXJzaW9uOwotCWhvc3QtPmhfcHJvdG8gICAgICA9IHByb3RvOworCW1lbWNweShubG1fYWRkcihob3N0KSwgbmktPnNhcCwgbmktPnNhbGVuKTsKKwlob3N0LT5oX2FkZHJsZW4gPSBuaS0+c2FsZW47CisJbmxtX2NsZWFyX3BvcnQobmxtX2FkZHIoaG9zdCkpOworCW1lbWNweShubG1fc3JjYWRkcihob3N0KSwgbmktPnNyY19zYXAsIG5pLT5zcmNfbGVuKTsKKwlob3N0LT5oX3ZlcnNpb24gICAgPSBuaS0+dmVyc2lvbjsKKwlob3N0LT5oX3Byb3RvICAgICAgPSBuaS0+cHJvdG9jb2w7CiAJaG9zdC0+aF9ycGNjbG50ICAgID0gTlVMTDsKIAltdXRleF9pbml0KCZob3N0LT5oX211dGV4KTsKIAlob3N0LT5oX25leHRyZWJpbmQgPSBqaWZmaWVzICsgTkxNX0hPU1RfUkVCSU5EOwpAQCAtMTM1LDcgKzIyMCw3IEBACiAJaG9zdC0+aF9zdGF0ZSAgICAgID0gMDsJCQkvKiBwc2V1ZG8gTlNNIHN0YXRlICovCiAJaG9zdC0+aF9uc21zdGF0ZSAgID0gMDsJCQkvKiByZWFsIE5TTSBzdGF0ZSAqLwogCWhvc3QtPmhfbnNtaGFuZGxlICA9IG5zbTsKLQlob3N0LT5oX3NlcnZlcgkgICA9IHNlcnZlcjsKKwlob3N0LT5oX3NlcnZlcgkgICA9IG5pLT5zZXJ2ZXI7CiAJaGxpc3RfYWRkX2hlYWQoJmhvc3QtPmhfaGFzaCwgY2hhaW4pOwogCUlOSVRfTElTVF9IRUFEKCZob3N0LT5oX2xvY2tvd25lcnMpOwogCXNwaW5fbG9ja19pbml0KCZob3N0LT5oX2xvY2spOwpAQCAtMTQzLDYgKzIyOCwxNSBAQAogCUlOSVRfTElTVF9IRUFEKCZob3N0LT5oX3JlY2xhaW0pOwogCiAJbnJob3N0cysrOworCisJbmxtX2Rpc3BsYXlfYWRkcmVzcygoc3RydWN0IHNvY2thZGRyICopJmhvc3QtPmhfYWRkciwKKwkJCQlob3N0LT5oX2FkZHJidWYsIHNpemVvZihob3N0LT5oX2FkZHJidWYpKTsKKwlubG1fZGlzcGxheV9hZGRyZXNzKChzdHJ1Y3Qgc29ja2FkZHIgKikmaG9zdC0+aF9zcmNhZGRyLAorCQkJCWhvc3QtPmhfc3JjYWRkcmJ1Ziwgc2l6ZW9mKGhvc3QtPmhfc3JjYWRkcmJ1ZikpOworCisJZHByaW50aygibG9ja2Q6IG5sbV9sb29rdXBfaG9zdCBjcmVhdGVkIGhvc3QgJXNcbiIsCisJCQlob3N0LT5oX25hbWUpOworCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZubG1faG9zdF9tdXRleCk7CiAJcmV0dXJuIGhvc3Q7CkBAIC0xNzAsMzMgKzI2NCwxMDMgQEAKIAlrZnJlZShob3N0KTsKIH0KIAotLyoKLSAqIEZpbmQgYW4gTkxNIHNlcnZlciBoYW5kbGUgaW4gdGhlIGNhY2hlLiBJZiB0aGVyZSBpcyBub25lLCBjcmVhdGUgaXQuCisvKioKKyAqIG5sbWNsbnRfbG9va3VwX2hvc3QgLSBGaW5kIGFuIE5MTSBob3N0IGhhbmRsZSBtYXRjaGluZyBhIHJlbW90ZSBzZXJ2ZXIKKyAqIEBzYXA6IG5ldHdvcmsgYWRkcmVzcyBvZiBzZXJ2ZXIKKyAqIEBzYWxlbjogbGVuZ3RoIG9mIHNlcnZlciBhZGRyZXNzCisgKiBAcHJvdG9jb2w6IHRyYW5zcG9ydCBwcm90b2NvbCB0byB1c2UKKyAqIEB2ZXJzaW9uOiBOTE0gcHJvdG9jb2wgdmVyc2lvbgorICogQGhvc3RuYW1lOiAnXDAnLXRlcm1pbmF0ZWQgaG9zdG5hbWUgb2Ygc2VydmVyCisgKgorICogUmV0dXJucyBhbiBubG1faG9zdCBzdHJ1Y3R1cmUgdGhhdCBtYXRjaGVzIHRoZSBwYXNzZWQtaW4KKyAqIFtzZXJ2ZXIgYWRkcmVzcywgdHJhbnNwb3J0IHByb3RvY29sLCBOTE0gdmVyc2lvbiwgc2VydmVyIGhvc3RuYW1lXS4KKyAqIElmIG9uZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIGhvc3QgY2FjaGUsIGEgbmV3IGhhbmRsZSBpcworICogY3JlYXRlZCBhbmQgcmV0dXJuZWQuCiAgKi8KLXN0cnVjdCBubG1faG9zdCAqbmxtY2xudF9sb29rdXBfaG9zdChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiwKLQkJCQkgICAgIGludCBwcm90bywgdTMyIHZlcnNpb24sCi0JCQkJICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBob3N0bmFtZV9sZW4pCitzdHJ1Y3QgbmxtX2hvc3QgKm5sbWNsbnRfbG9va3VwX2hvc3QoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAsCisJCQkJICAgICBjb25zdCBzaXplX3Qgc2FsZW4sCisJCQkJICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBwcm90b2NvbCwKKwkJCQkgICAgIGNvbnN0IHUzMiB2ZXJzaW9uLCBjb25zdCBjaGFyICpob3N0bmFtZSkKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc3NpbiA9IHswfTsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgc291cmNlID0geworCQkuc2FfZmFtaWx5CT0gQUZfVU5TUEVDLAorCX07CisJc3RydWN0IG5sbV9sb29rdXBfaG9zdF9pbmZvIG5pID0geworCQkuc2VydmVyCQk9IDAsCisJCS5zYXAJCT0gc2FwLAorCQkuc2FsZW4JCT0gc2FsZW4sCisJCS5wcm90b2NvbAk9IHByb3RvY29sLAorCQkudmVyc2lvbgk9IHZlcnNpb24sCisJCS5ob3N0bmFtZQk9IGhvc3RuYW1lLAorCQkuaG9zdG5hbWVfbGVuCT0gc3RybGVuKGhvc3RuYW1lKSwKKwkJLnNyY19zYXAJPSAmc291cmNlLAorCQkuc3JjX2xlbgk9IHNpemVvZihzb3VyY2UpLAorCX07CiAKLQlyZXR1cm4gbmxtX2xvb2t1cF9ob3N0KDAsIHNpbiwgcHJvdG8sIHZlcnNpb24sCi0JCQkgICAgICAgaG9zdG5hbWUsIGhvc3RuYW1lX2xlbiwgJnNzaW4pOworCWRwcmludGsoImxvY2tkOiAlcyhob3N0PSclcycsIHZlcnM9JXUsIHByb3RvPSVzKVxuIiwgX19mdW5jX18sCisJCQkoaG9zdG5hbWUgPyBob3N0bmFtZSA6ICI8bm9uZT4iKSwgdmVyc2lvbiwKKwkJCShwcm90b2NvbCA9PSBJUFBST1RPX1VEUCA/ICJ1ZHAiIDogInRjcCIpKTsKKworCXJldHVybiBubG1fbG9va3VwX2hvc3QoJm5pKTsKIH0KIAotLyoKLSAqIEZpbmQgYW4gTkxNIGNsaWVudCBoYW5kbGUgaW4gdGhlIGNhY2hlLiBJZiB0aGVyZSBpcyBub25lLCBjcmVhdGUgaXQuCisvKioKKyAqIG5sbXN2Y19sb29rdXBfaG9zdCAtIEZpbmQgYW4gTkxNIGhvc3QgaGFuZGxlIG1hdGNoaW5nIGEgcmVtb3RlIGNsaWVudAorICogQHJxc3RwOiBpbmNvbWluZyBOTE0gcmVxdWVzdAorICogQGhvc3RuYW1lOiBuYW1lIG9mIGNsaWVudCBob3N0CisgKiBAaG9zdG5hbWVfbGVuOiBsZW5ndGggb2YgY2xpZW50IGhvc3RuYW1lCisgKgorICogUmV0dXJucyBhbiBubG1faG9zdCBzdHJ1Y3R1cmUgdGhhdCBtYXRjaGVzIHRoZSBbY2xpZW50IGFkZHJlc3MsCisgKiB0cmFuc3BvcnQgcHJvdG9jb2wsIE5MTSB2ZXJzaW9uLCBjbGllbnQgaG9zdG5hbWVdIG9mIHRoZSBwYXNzZWQtaW4KKyAqIE5MTSByZXF1ZXN0LiAgSWYgb25lIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgaG9zdCBjYWNoZSwgYQorICogbmV3IGhhbmRsZSBpcyBjcmVhdGVkIGFuZCByZXR1cm5lZC4KKyAqCisgKiBCZWZvcmUgcG9zc2libHkgY3JlYXRpbmcgYSBuZXcgbmxtX2hvc3QsIGNvbnN0cnVjdCBhIHNvY2thZGRyCisgKiBmb3IgYSBzcGVjaWZpYyBzb3VyY2UgYWRkcmVzcyBpbiBjYXNlIHRoZSBsb2NhbCBzeXN0ZW0gaGFzCisgKiBtdWx0aXBsZSBuZXR3b3JrIGFkZHJlc3Nlcy4gIFRoZSBmYW1pbHkgb2YgdGhlIGFkZHJlc3MgaW4KKyAqIHJxX2RhZGRyIGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGZhbWlseSBvZiB0aGUKKyAqIGFkZHJlc3MgaW4gcnFfYWRkciwgc28gaXQncyBzYWZlIHRvIHVzZSB0aGUgc2FtZSBmYW1pbHkgZm9yCisgKiB0aGUgc291cmNlIGFkZHJlc3MuCiAgKi8KLXN0cnVjdCBubG1faG9zdCAqCi1ubG1zdmNfbG9va3VwX2hvc3Qoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKLQkJCWNvbnN0IGNoYXIgKmhvc3RuYW1lLCB1bnNpZ25lZCBpbnQgaG9zdG5hbWVfbGVuKQorc3RydWN0IG5sbV9ob3N0ICpubG1zdmNfbG9va3VwX2hvc3QoY29uc3Qgc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKKwkJCQkgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisJCQkJICAgIGNvbnN0IHNpemVfdCBob3N0bmFtZV9sZW4pCiB7Ci0Jc3RydWN0IHNvY2thZGRyX2luIHNzaW4gPSB7MH07CisJc3RydWN0IHNvY2thZGRyX2luIHNpbiA9IHsKKwkJLnNpbl9mYW1pbHkJPSBBRl9JTkVULAorCX07CisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42ID0geworCQkuc2luNl9mYW1pbHkJPSBBRl9JTkVUNiwKKwl9OworCXN0cnVjdCBubG1fbG9va3VwX2hvc3RfaW5mbyBuaSA9IHsKKwkJLnNlcnZlcgkJPSAxLAorCQkuc2FwCQk9IHN2Y19hZGRyKHJxc3RwKSwKKwkJLnNhbGVuCQk9IHJxc3RwLT5ycV9hZGRybGVuLAorCQkucHJvdG9jb2wJPSBycXN0cC0+cnFfcHJvdCwKKwkJLnZlcnNpb24JPSBycXN0cC0+cnFfdmVycywKKwkJLmhvc3RuYW1lCT0gaG9zdG5hbWUsCisJCS5ob3N0bmFtZV9sZW4JPSBob3N0bmFtZV9sZW4sCisJCS5zcmNfbGVuCT0gcnFzdHAtPnJxX2FkZHJsZW4sCisJfTsKIAotCXNzaW4uc2luX2FkZHIgPSBycXN0cC0+cnFfZGFkZHIuYWRkcjsKLQlyZXR1cm4gbmxtX2xvb2t1cF9ob3N0KDEsIHN2Y19hZGRyX2luKHJxc3RwKSwKLQkJCSAgICAgICBycXN0cC0+cnFfcHJvdCwgcnFzdHAtPnJxX3ZlcnMsCi0JCQkgICAgICAgaG9zdG5hbWUsIGhvc3RuYW1lX2xlbiwgJnNzaW4pOworCWRwcmludGsoImxvY2tkOiAlcyhob3N0PSclKnMnLCB2ZXJzPSV1LCBwcm90bz0lcylcbiIsIF9fZnVuY19fLAorCQkJKGludClob3N0bmFtZV9sZW4sIGhvc3RuYW1lLCBycXN0cC0+cnFfdmVycywKKwkJCShycXN0cC0+cnFfcHJvdCA9PSBJUFBST1RPX1VEUCA/ICJ1ZHAiIDogInRjcCIpKTsKKworCXN3aXRjaCAobmkuc2FwLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBycXN0cC0+cnFfZGFkZHIuYWRkci5zX2FkZHI7CisJCW5pLnNyY19zYXAgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJaXB2Nl9hZGRyX2NvcHkoJnNpbjYuc2luNl9hZGRyLCAmcnFzdHAtPnJxX2RhZGRyLmFkZHI2KTsKKwkJbmkuc3JjX3NhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIG5sbV9sb29rdXBfaG9zdCgmbmkpOwogfQogCiAvKgpAQCAtMjA3LDkgKzM3MSw4IEBACiB7CiAJc3RydWN0IHJwY19jbG50CSpjbG50OwogCi0JZHByaW50aygibG9ja2Q6IG5sbV9iaW5kX2hvc3QoIk5JUFFVQURfRk1UIi0+Ik5JUFFVQURfRk1UIilcbiIsCi0JCQlOSVBRVUFEKGhvc3QtPmhfc2FkZHIuc2luX2FkZHIpLAotCQkJTklQUVVBRChob3N0LT5oX2FkZHIuc2luX2FkZHIpKTsKKwlkcHJpbnRrKCJsb2NrZDogbmxtX2JpbmRfaG9zdCAlcyAoJXMpLCBteSBhZGRyPSVzXG4iLAorCQkJaG9zdC0+aF9uYW1lLCBob3N0LT5oX2FkZHJidWYsIGhvc3QtPmhfc3JjYWRkcmJ1Zik7CiAKIAkvKiBMb2NrIGhvc3QgaGFuZGxlICovCiAJbXV0ZXhfbG9jaygmaG9zdC0+aF9tdXRleCk7CkBAIC0yMjEsNyArMzg0LDcgQEAKIAkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgaG9zdC0+aF9uZXh0cmViaW5kKSkgewogCQkJcnBjX2ZvcmNlX3JlYmluZChjbG50KTsKIAkJCWhvc3QtPmhfbmV4dHJlYmluZCA9IGppZmZpZXMgKyBOTE1fSE9TVF9SRUJJTkQ7Ci0JCQlkcHJpbnRrKCJsb2NrZDogbmV4dCByZWJpbmQgaW4gJWxkIGppZmZpZXNcbiIsCisJCQlkcHJpbnRrKCJsb2NrZDogbmV4dCByZWJpbmQgaW4gJWx1IGppZmZpZXNcbiIsCiAJCQkJCWhvc3QtPmhfbmV4dHJlYmluZCAtIGppZmZpZXMpOwogCQl9CiAJfSBlbHNlIHsKQEAgLTIzNCw5ICszOTcsOSBAQAogCQl9OwogCQlzdHJ1Y3QgcnBjX2NyZWF0ZV9hcmdzIGFyZ3MgPSB7CiAJCQkucHJvdG9jb2wJPSBob3N0LT5oX3Byb3RvLAotCQkJLmFkZHJlc3MJPSAoc3RydWN0IHNvY2thZGRyICopJmhvc3QtPmhfYWRkciwKLQkJCS5hZGRyc2l6ZQk9IHNpemVvZihob3N0LT5oX2FkZHIpLAotCQkJLnNhZGRyZXNzCT0gKHN0cnVjdCBzb2NrYWRkciAqKSZob3N0LT5oX3NhZGRyLAorCQkJLmFkZHJlc3MJPSBubG1fYWRkcihob3N0KSwKKwkJCS5hZGRyc2l6ZQk9IGhvc3QtPmhfYWRkcmxlbiwKKwkJCS5zYWRkcmVzcwk9IG5sbV9zcmNhZGRyKGhvc3QpLAogCQkJLnRpbWVvdXQJPSAmdGltZXBhcm1zLAogCQkJLnNlcnZlcm5hbWUJPSBob3N0LT5oX25hbWUsCiAJCQkucHJvZ3JhbQk9ICZubG1fcHJvZ3JhbSwKQEAgLTMyNCwxMiArNDg3LDE2IEBACiAJc3RydWN0IG5zbV9oYW5kbGUgKm5zbTsKIAlzdHJ1Y3QgbmxtX2hvc3QJKmhvc3Q7CiAKLQlkcHJpbnRrKCJsb2NrZDogbmxtX2hvc3RfcmVib290ZWQoJXMsICV1LiV1LiV1LiV1KVxuIiwKLQkJCWhvc3RuYW1lLCBOSVBRVUFEKHNpbi0+c2luX2FkZHIpKTsKLQotCS8qIEZpbmQgdGhlIE5TTSBoYW5kbGUgZm9yIHRoaXMgcGVlciAqLwotCWlmICghKG5zbSA9IF9fbnNtX2ZpbmQoc2luLCBob3N0bmFtZSwgaG9zdG5hbWVfbGVuLCAwKSkpCisJbnNtID0gbnNtX2ZpbmQoKHN0cnVjdCBzb2NrYWRkciAqKXNpbiwgc2l6ZW9mKCpzaW4pLAorCQkJaG9zdG5hbWUsIGhvc3RuYW1lX2xlbiwgMCk7CisJaWYgKG5zbSA9PSBOVUxMKSB7CisJCWRwcmludGsoImxvY2tkOiBuZXZlciBzYXcgcmVib290ZWQgcGVlciAnJS4qcycgYmVmb3JlXG4iLAorCQkJCWhvc3RuYW1lX2xlbiwgaG9zdG5hbWUpOwogCQlyZXR1cm47CisJfQorCisJZHByaW50aygibG9ja2Q6IG5sbV9ob3N0X3JlYm9vdGVkKCUuKnMsICVzKVxuIiwKKwkJCWhvc3RuYW1lX2xlbiwgaG9zdG5hbWUsIG5zbS0+c21fYWRkcmJ1Zik7CiAKIAkvKiBXaGVuIHJlY2xhaW1pbmcgbG9ja3Mgb24gdGhpcyBwZWVyLCBtYWtlIHN1cmUgdGhhdAogCSAqIHdlIHNldCB1cCBhIG5ldyBub3RpZmljYXRpb24gKi8KQEAgLTQ2MSwyMiArNjI4LDIzIEBACiBzdGF0aWMgTElTVF9IRUFEKG5zbV9oYW5kbGVzKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobnNtX2xvY2spOwogCi1zdGF0aWMgc3RydWN0IG5zbV9oYW5kbGUgKgotX19uc21fZmluZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiwKLQkJY29uc3QgY2hhciAqaG9zdG5hbWUsIHVuc2lnbmVkIGludCBob3N0bmFtZV9sZW4sCi0JCWludCBjcmVhdGUpCitzdGF0aWMgc3RydWN0IG5zbV9oYW5kbGUgKm5zbV9maW5kKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLAorCQkJCSAgIGNvbnN0IHNpemVfdCBzYWxlbiwKKwkJCQkgICBjb25zdCBjaGFyICpob3N0bmFtZSwKKwkJCQkgICBjb25zdCBzaXplX3QgaG9zdG5hbWVfbGVuLAorCQkJCSAgIGNvbnN0IGludCBjcmVhdGUpCiB7CiAJc3RydWN0IG5zbV9oYW5kbGUgKm5zbSA9IE5VTEw7CiAJc3RydWN0IG5zbV9oYW5kbGUgKnBvczsKIAotCWlmICghc2luKQorCWlmICghc2FwKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChob3N0bmFtZSAmJiBtZW1jaHIoaG9zdG5hbWUsICcvJywgaG9zdG5hbWVfbGVuKSAhPSBOVUxMKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgaG9zdG5hbWUgXCIlLipzXCIgIgogCQkJCQkgICAgImluIE5GUyBsb2NrIHJlcXVlc3RcbiIsCi0JCQkJaG9zdG5hbWVfbGVuLCBob3N0bmFtZSk7CisJCQkJKGludClob3N0bmFtZV9sZW4sIGhvc3RuYW1lKTsKIAkJfQogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC00ODksNyArNjU3LDcgQEAKIAkJCWlmIChzdHJsZW4ocG9zLT5zbV9uYW1lKSAhPSBob3N0bmFtZV9sZW4KIAkJCSB8fCBtZW1jbXAocG9zLT5zbV9uYW1lLCBob3N0bmFtZSwgaG9zdG5hbWVfbGVuKSkKIAkJCQljb250aW51ZTsKLQkJfSBlbHNlIGlmICghbmxtX2NtcF9hZGRyKCZwb3MtPnNtX2FkZHIsIHNpbikpCisJCX0gZWxzZSBpZiAoIW5sbV9jbXBfYWRkcihuc21fYWRkcihwb3MpLCBzYXApKQogCQkJY29udGludWU7CiAJCWF0b21pY19pbmMoJnBvcy0+c21fY291bnQpOwogCQlrZnJlZShuc20pOwpAQCAtNTA5LDEwICs2NzcsMTMgQEAKIAlpZiAobnNtID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JbnNtLT5zbV9hZGRyID0gKnNpbjsKKwltZW1jcHkobnNtX2FkZHIobnNtKSwgc2FwLCBzYWxlbik7CisJbnNtLT5zbV9hZGRybGVuID0gc2FsZW47CiAJbnNtLT5zbV9uYW1lID0gKGNoYXIgKikgKG5zbSArIDEpOwogCW1lbWNweShuc20tPnNtX25hbWUsIGhvc3RuYW1lLCBob3N0bmFtZV9sZW4pOwogCW5zbS0+c21fbmFtZVtob3N0bmFtZV9sZW5dID0gJ1wwJzsKKwlubG1fZGlzcGxheV9hZGRyZXNzKChzdHJ1Y3Qgc29ja2FkZHIgKikmbnNtLT5zbV9hZGRyLAorCQkJCW5zbS0+c21fYWRkcmJ1Ziwgc2l6ZW9mKG5zbS0+c21fYWRkcmJ1ZikpOwogCWF0b21pY19zZXQoJm5zbS0+c21fY291bnQsIDEpOwogCWdvdG8gcmV0cnk7CiAKQEAgLTUyMSwxMyArNjkyLDYgQEAKIAlyZXR1cm4gbnNtOwogfQogCi1zdGF0aWMgc3RydWN0IG5zbV9oYW5kbGUgKgotbnNtX2ZpbmQoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4sIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAotCSB1bnNpZ25lZCBpbnQgaG9zdG5hbWVfbGVuKQotewotCXJldHVybiBfX25zbV9maW5kKHNpbiwgaG9zdG5hbWUsIGhvc3RuYW1lX2xlbiwgMSk7Ci19Ci0KIC8qCiAgKiBSZWxlYXNlIGFuIE5TTSBoYW5kbGUKICAqLwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvbW9uLmMgYi9mcy9sb2NrZC9tb24uYwppbmRleCBlNGQ1NjM1Li40ZTdlOTU4IDEwMDY0NAotLS0gYS9mcy9sb2NrZC9tb24uYworKysgYi9mcy9sb2NrZC9tb24uYwpAQCAtNTEsNyArNTEsNyBAQAogCiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCWFyZ3MubW9uX25hbWUgPSBuc20tPnNtX25hbWU7Ci0JYXJncy5hZGRyID0gbnNtLT5zbV9hZGRyLnNpbl9hZGRyLnNfYWRkcjsKKwlhcmdzLmFkZHIgPSBuc21fYWRkcl9pbihuc20pLT5zaW5fYWRkci5zX2FkZHI7CiAJYXJncy5wcm9nID0gTkxNX1BST0dSQU07CiAJYXJncy52ZXJzID0gMzsKIAlhcmdzLnByb2MgPSBOTE1QUk9DX05TTV9OT1RJRlk7CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmMuYyBiL2ZzL2xvY2tkL3N2Yy5jCmluZGV4IDViZDliZjAuLmM2MzFhODMgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Yy5jCisrKyBiL2ZzL2xvY2tkL3N2Yy5jCkBAIC01MSw3ICs1MSw2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50CQlubG1zdmNfdXNlcnM7CiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0CSpubG1zdmNfdGFzazsKIHN0YXRpYyBzdHJ1Y3Qgc3ZjX3Jxc3QJCSpubG1zdmNfcnFzdDsKLWludAkJCQlubG1zdmNfZ3JhY2VfcGVyaW9kOwogdW5zaWduZWQgbG9uZwkJCW5sbXN2Y190aW1lb3V0OwogCiAvKgpAQCAtODUsMjcgKzg0LDIzIEBACiAJCXJldHVybiBubG1fdGltZW91dCAqIDUgKiBIWjsKIH0KIAotdW5zaWduZWQgbG9uZyBnZXRfbmZzX2dyYWNlX3BlcmlvZCh2b2lkKQorc3RhdGljIHN0cnVjdCBsb2NrX21hbmFnZXIgbG9ja2RfbWFuYWdlciA9IHsKK307CisKK3N0YXRpYyB2b2lkIGdyYWNlX2VuZGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqbm90X3VzZWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb2NrZGdyYWNlID0gZ2V0X2xvY2tkX2dyYWNlX3BlcmlvZCgpOwotCXVuc2lnbmVkIGxvbmcgbmZzZGdyYWNlID0gMDsKLQotCWlmIChubG1zdmNfb3BzKQotCQluZnNkZ3JhY2UgPSBubG1zdmNfb3BzLT5nZXRfZ3JhY2VfcGVyaW9kKCk7Ci0KLQlyZXR1cm4gbWF4KGxvY2tkZ3JhY2UsIG5mc2RncmFjZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGdldF9uZnNfZ3JhY2VfcGVyaW9kKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0X2dyYWNlX3BlcmlvZCh2b2lkKQotewotCW5sbXN2Y19ncmFjZV9wZXJpb2QgPSAxOwotCXJldHVybiBnZXRfbmZzX2dyYWNlX3BlcmlvZCgpICsgamlmZmllczsKKwlsb2Nrc19lbmRfZ3JhY2UoJmxvY2tkX21hbmFnZXIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfZ3JhY2VfcGVyaW9kKHZvaWQpCitzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksoZ3JhY2VfcGVyaW9kX2VuZCwgZ3JhY2VfZW5kZXIpOworCitzdGF0aWMgdm9pZCBzZXRfZ3JhY2VfcGVyaW9kKHZvaWQpCiB7Ci0Jbmxtc3ZjX2dyYWNlX3BlcmlvZCA9IDA7CisJdW5zaWduZWQgbG9uZyBncmFjZV9wZXJpb2QgPSBnZXRfbG9ja2RfZ3JhY2VfcGVyaW9kKCk7CisKKwlsb2Nrc19zdGFydF9ncmFjZSgmbG9ja2RfbWFuYWdlcik7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZncmFjZV9wZXJpb2RfZW5kKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmdyYWNlX3BlcmlvZF9lbmQsIGdyYWNlX3BlcmlvZCk7CiB9CiAKIC8qCkBAIC0xMTYsNyArMTExLDYgQEAKIHsKIAlpbnQJCWVyciA9IDAsIHByZXZlcnIgPSAwOwogCXN0cnVjdCBzdmNfcnFzdCAqcnFzdHAgPSB2cnFzdHA7Ci0JdW5zaWduZWQgbG9uZyBncmFjZV9wZXJpb2RfZXhwaXJlOwogCiAJLyogdHJ5X3RvX2ZyZWV6ZSgpIGlzIGNhbGxlZCBmcm9tIHN2Y19yZWN2KCkgKi8KIAlzZXRfZnJlZXphYmxlKCk7CkBAIC0xMzksNyArMTMzLDcgQEAKIAkJbmxtX3RpbWVvdXQgPSBMT0NLRF9ERkxUX1RJTUVPOwogCW5sbXN2Y190aW1lb3V0ID0gbmxtX3RpbWVvdXQgKiBIWjsKIAotCWdyYWNlX3BlcmlvZF9leHBpcmUgPSBzZXRfZ3JhY2VfcGVyaW9kKCk7CisJc2V0X2dyYWNlX3BlcmlvZCgpOwogCiAJLyoKIAkgKiBUaGUgbWFpbiByZXF1ZXN0IGxvb3AuIFdlIGRvbid0IHRlcm1pbmF0ZSB1bnRpbCB0aGUgbGFzdApAQCAtMTUzLDIxICsxNDcsMTIgQEAKIAkJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7CiAJCQlpZiAobmxtc3ZjX29wcykgewogCQkJCW5sbXN2Y19pbnZhbGlkYXRlX2FsbCgpOwotCQkJCWdyYWNlX3BlcmlvZF9leHBpcmUgPSBzZXRfZ3JhY2VfcGVyaW9kKCk7CisJCQkJc2V0X2dyYWNlX3BlcmlvZCgpOwogCQkJfQogCQkJY29udGludWU7CiAJCX0KIAotCQkvKgotCQkgKiBSZXRyeSBhbnkgYmxvY2tlZCBsb2NrcyB0aGF0IGhhdmUgYmVlbiBub3RpZmllZCBieQotCQkgKiB0aGUgVkZTLiBEb24ndCBkbyB0aGlzIGR1cmluZyBncmFjZSBwZXJpb2QuCi0JCSAqIChUaGVvcmV0aWNhbGx5LCB0aGVyZSBzaG91bGRuJ3QgZXZlbiBiZSBibG9ja2VkIGxvY2tzCi0JCSAqIGR1cmluZyBncmFjZSBwZXJpb2QpLgotCQkgKi8KLQkJaWYgKCFubG1zdmNfZ3JhY2VfcGVyaW9kKSB7Ci0JCQl0aW1lb3V0ID0gbmxtc3ZjX3JldHJ5X2Jsb2NrZWQoKTsKLQkJfSBlbHNlIGlmICh0aW1lX2JlZm9yZShncmFjZV9wZXJpb2RfZXhwaXJlLCBqaWZmaWVzKSkKLQkJCWNsZWFyX2dyYWNlX3BlcmlvZCgpOworCQl0aW1lb3V0ID0gbmxtc3ZjX3JldHJ5X2Jsb2NrZWQoKTsKIAogCQkvKgogCQkgKiBGaW5kIGEgc29ja2V0IHdpdGggZGF0YSBhdmFpbGFibGUgYW5kIGNhbGwgaXRzCkBAIC0xOTUsNiArMTgwLDcgQEAKIAkJc3ZjX3Byb2Nlc3MocnFzdHApOwogCX0KIAlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZ3JhY2VfcGVyaW9kX2VuZCk7CiAJaWYgKG5sbXN2Y19vcHMpCiAJCW5sbXN2Y19pbnZhbGlkYXRlX2FsbCgpOwogCW5sbV9zaHV0ZG93bl9ob3N0cygpOwpAQCAtMjAzLDI1ICsxODksMjggQEAKIH0KIAogLyoKLSAqIE1ha2UgYW55IHNvY2tldHMgdGhhdCBhcmUgbmVlZGVkIGJ1dCBub3QgcHJlc2VudC4KLSAqIElmIG5sbV91ZHBwb3J0IG9yIG5sbV90Y3Bwb3J0IHdlcmUgc2V0IGFzIG1vZHVsZQotICogb3B0aW9ucywgbWFrZSB0aG9zZSBzb2NrZXRzIHVuY29uZGl0aW9uYWxseQorICogRW5zdXJlIHRoZXJlIGFyZSBhY3RpdmUgVURQIGFuZCBUQ1AgbGlzdGVuZXJzIGZvciBsb2NrZC4KKyAqCisgKiBFdmVuIGlmIHdlIGhhdmUgb25seSBUQ1AgTkZTIG1vdW50cyBhbmQvb3IgVENQIE5GU0RzLCBzb21lCisgKiBsb2NhbCBzZXJ2aWNlcyAoc3VjaCBhcyBycGMuc3RhdGQpIHN0aWxsIHJlcXVpcmUgVURQLCBhbmQKKyAqIHNvbWUgTkZTIHNlcnZlcnMgZG8gbm90IHlldCBzdXBwb3J0IE5MTSBvdmVyIFRDUC4KKyAqCisgKiBSZXR1cm5zIHplcm8gaWYgYWxsIGxpc3RlbmVycyBhcmUgYXZhaWxhYmxlOyBvdGhlcndpc2UgYQorICogbmVnYXRpdmUgZXJybm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgKi8KLXN0YXRpYyBpbnQgbWFrZV9zb2NrcyhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIGludCBwcm90bykKK3N0YXRpYyBpbnQgbWFrZV9zb2NrcyhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpCiB7CiAJc3RhdGljIGludCB3YXJuZWQ7CiAJc3RydWN0IHN2Y194cHJ0ICp4cHJ0OwogCWludCBlcnIgPSAwOwogCi0JaWYgKHByb3RvID09IElQUFJPVE9fVURQIHx8IG5sbV91ZHBwb3J0KSB7Ci0JCXhwcnQgPSBzdmNfZmluZF94cHJ0KHNlcnYsICJ1ZHAiLCAwLCAwKTsKLQkJaWYgKCF4cHJ0KQotCQkJZXJyID0gc3ZjX2NyZWF0ZV94cHJ0KHNlcnYsICJ1ZHAiLCBubG1fdWRwcG9ydCwKLQkJCQkJICAgICAgU1ZDX1NPQ0tfREVGQVVMVFMpOwotCQllbHNlCi0JCQlzdmNfeHBydF9wdXQoeHBydCk7Ci0JfQotCWlmIChlcnIgPj0gMCAmJiAocHJvdG8gPT0gSVBQUk9UT19UQ1AgfHwgbmxtX3RjcHBvcnQpKSB7CisJeHBydCA9IHN2Y19maW5kX3hwcnQoc2VydiwgInVkcCIsIDAsIDApOworCWlmICgheHBydCkKKwkJZXJyID0gc3ZjX2NyZWF0ZV94cHJ0KHNlcnYsICJ1ZHAiLCBubG1fdWRwcG9ydCwKKwkJCQkgICAgICBTVkNfU09DS19ERUZBVUxUUyk7CisJZWxzZQorCQlzdmNfeHBydF9wdXQoeHBydCk7CisJaWYgKGVyciA+PSAwKSB7CiAJCXhwcnQgPSBzdmNfZmluZF94cHJ0KHNlcnYsICJ0Y3AiLCAwLCAwKTsKIAkJaWYgKCF4cHJ0KQogCQkJZXJyID0gc3ZjX2NyZWF0ZV94cHJ0KHNlcnYsICJ0Y3AiLCBubG1fdGNwcG9ydCwKQEAgLTI0MSw4ICsyMzAsNyBAQAogLyoKICAqIEJyaW5nIHVwIHRoZSBsb2NrZCBwcm9jZXNzIGlmIGl0J3Mgbm90IGFscmVhZHkgdXAuCiAgKi8KLWludAotbG9ja2RfdXAoaW50IHByb3RvKSAvKiBNYXliZSBhZGQgYSAnZmFtaWx5JyBvcHRpb24gd2hlbiBJUHY2IGlzIHN1cHBvcnRlZCA/PyAqLworaW50IGxvY2tkX3VwKHZvaWQpCiB7CiAJc3RydWN0IHN2Y19zZXJ2ICpzZXJ2OwogCWludAkJZXJyb3IgPSAwOwpAQCAtMjUxLDExICsyMzksOCBAQAogCS8qCiAJICogQ2hlY2sgd2hldGhlciB3ZSdyZSBhbHJlYWR5IHVwIGFuZCBydW5uaW5nLgogCSAqLwotCWlmIChubG1zdmNfcnFzdCkgewotCQlpZiAocHJvdG8pCi0JCQllcnJvciA9IG1ha2Vfc29ja3Mobmxtc3ZjX3Jxc3QtPnJxX3NlcnZlciwgcHJvdG8pOworCWlmIChubG1zdmNfcnFzdCkKIAkJZ290byBvdXQ7Ci0JfQogCiAJLyoKIAkgKiBTYW5pdHkgY2hlY2s6IGlmIHRoZXJlJ3Mgbm8gcGlkLApAQCAtMjY2LDEzICsyNTEsMTQgQEAKIAkJCSJsb2NrZF91cDogbm8gcGlkLCAlZCB1c2Vycz8/XG4iLCBubG1zdmNfdXNlcnMpOwogCiAJZXJyb3IgPSAtRU5PTUVNOwotCXNlcnYgPSBzdmNfY3JlYXRlKCZubG1zdmNfcHJvZ3JhbSwgTE9DS0RfQlVGU0laRSwgTlVMTCk7CisJc2VydiA9IHN2Y19jcmVhdGUoJm5sbXN2Y19wcm9ncmFtLCBMT0NLRF9CVUZTSVpFLCBBRl9JTkVULCBOVUxMKTsKIAlpZiAoIXNlcnYpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAibG9ja2RfdXA6IGNyZWF0ZSBzZXJ2aWNlIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICgoZXJyb3IgPSBtYWtlX3NvY2tzKHNlcnYsIHByb3RvKSkgPCAwKQorCWVycm9yID0gbWFrZV9zb2NrcyhzZXJ2KTsKKwlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIGRlc3Ryb3lfYW5kX291dDsKIAogCS8qCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmM0cHJvYy5jIGIvZnMvbG9ja2Qvc3ZjNHByb2MuYwppbmRleCA0YTcxNGY2NC4uMDE0ZjZjZSAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjNHByb2MuYworKysgYi9mcy9sb2NrZC9zdmM0cHJvYy5jCkBAIC04OCwxMiArODgsNiBAQAogCWRwcmludGsoImxvY2tkOiBURVNUNCAgICAgICAgY2FsbGVkXG4iKTsKIAlyZXNwLT5jb29raWUgPSBhcmdwLT5jb29raWU7CiAKLQkvKiBEb24ndCBhY2NlcHQgdGVzdCByZXF1ZXN0cyBkdXJpbmcgZ3JhY2UgcGVyaW9kICovCi0JaWYgKG5sbXN2Y19ncmFjZV9wZXJpb2QpIHsKLQkJcmVzcC0+c3RhdHVzID0gbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kOwotCQlyZXR1cm4gcmM7Ci0JfQotCiAJLyogT2J0YWluIGNsaWVudCBhbmQgZmlsZSAqLwogCWlmICgocmVzcC0+c3RhdHVzID0gbmxtNHN2Y19yZXRyaWV2ZV9hcmdzKHJxc3RwLCBhcmdwLCAmaG9zdCwgJmZpbGUpKSkKIAkJcmV0dXJuIHJlc3AtPnN0YXR1cyA9PSBubG1fZHJvcF9yZXBseSA/IHJwY19kcm9wX3JlcGx5IDpycGNfc3VjY2VzczsKQEAgLTEyMiwxMiArMTE2LDYgQEAKIAogCXJlc3AtPmNvb2tpZSA9IGFyZ3AtPmNvb2tpZTsKIAotCS8qIERvbid0IGFjY2VwdCBuZXcgbG9jayByZXF1ZXN0cyBkdXJpbmcgZ3JhY2UgcGVyaW9kICovCi0JaWYgKG5sbXN2Y19ncmFjZV9wZXJpb2QgJiYgIWFyZ3AtPnJlY2xhaW0pIHsKLQkJcmVzcC0+c3RhdHVzID0gbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kOwotCQlyZXR1cm4gcmM7Ci0JfQotCiAJLyogT2J0YWluIGNsaWVudCBhbmQgZmlsZSAqLwogCWlmICgocmVzcC0+c3RhdHVzID0gbmxtNHN2Y19yZXRyaWV2ZV9hcmdzKHJxc3RwLCBhcmdwLCAmaG9zdCwgJmZpbGUpKSkKIAkJcmV0dXJuIHJlc3AtPnN0YXR1cyA9PSBubG1fZHJvcF9yZXBseSA/IHJwY19kcm9wX3JlcGx5IDpycGNfc3VjY2VzczsKQEAgLTE0Niw3ICsxMzQsOCBAQAogCiAJLyogTm93IHRyeSB0byBsb2NrIHRoZSBmaWxlICovCiAJcmVzcC0+c3RhdHVzID0gbmxtc3ZjX2xvY2socnFzdHAsIGZpbGUsIGhvc3QsICZhcmdwLT5sb2NrLAotCQkJCQlhcmdwLT5ibG9jaywgJmFyZ3AtPmNvb2tpZSk7CisJCQkJCWFyZ3AtPmJsb2NrLCAmYXJncC0+Y29va2llLAorCQkJCQlhcmdwLT5yZWNsYWltKTsKIAlpZiAocmVzcC0+c3RhdHVzID09IG5sbV9kcm9wX3JlcGx5KQogCQlyYyA9IHJwY19kcm9wX3JlcGx5OwogCWVsc2UKQEAgLTE2OSw3ICsxNTgsNyBAQAogCXJlc3AtPmNvb2tpZSA9IGFyZ3AtPmNvb2tpZTsKIAogCS8qIERvbid0IGFjY2VwdCByZXF1ZXN0cyBkdXJpbmcgZ3JhY2UgcGVyaW9kICovCi0JaWYgKG5sbXN2Y19ncmFjZV9wZXJpb2QpIHsKKwlpZiAobG9ja3NfaW5fZ3JhY2UoKSkgewogCQlyZXNwLT5zdGF0dXMgPSBubG1fbGNrX2RlbmllZF9ncmFjZV9wZXJpb2Q7CiAJCXJldHVybiBycGNfc3VjY2VzczsKIAl9CkBAIC0yMDIsNyArMTkxLDcgQEAKIAlyZXNwLT5jb29raWUgPSBhcmdwLT5jb29raWU7CiAKIAkvKiBEb24ndCBhY2NlcHQgbmV3IGxvY2sgcmVxdWVzdHMgZHVyaW5nIGdyYWNlIHBlcmlvZCAqLwotCWlmIChubG1zdmNfZ3JhY2VfcGVyaW9kKSB7CisJaWYgKGxvY2tzX2luX2dyYWNlKCkpIHsKIAkJcmVzcC0+c3RhdHVzID0gbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kOwogCQlyZXR1cm4gcnBjX3N1Y2Nlc3M7CiAJfQpAQCAtMjMxLDcgKzIyMCw3IEBACiAJcmVzcC0+Y29va2llID0gYXJncC0+Y29va2llOwogCiAJZHByaW50aygibG9ja2Q6IEdSQU5URUQgICAgICAgY2FsbGVkXG4iKTsKLQlyZXNwLT5zdGF0dXMgPSBubG1jbG50X2dyYW50KHN2Y19hZGRyX2luKHJxc3RwKSwgJmFyZ3AtPmxvY2spOworCXJlc3AtPnN0YXR1cyA9IG5sbWNsbnRfZ3JhbnQoc3ZjX2FkZHIocnFzdHApLCAmYXJncC0+bG9jayk7CiAJZHByaW50aygibG9ja2Q6IEdSQU5URUQgICAgICAgc3RhdHVzICVkXG4iLCBudG9obChyZXNwLT5zdGF0dXMpKTsKIAlyZXR1cm4gcnBjX3N1Y2Nlc3M7CiB9CkBAIC0zNDEsNyArMzMwLDcgQEAKIAlyZXNwLT5jb29raWUgPSBhcmdwLT5jb29raWU7CiAKIAkvKiBEb24ndCBhY2NlcHQgbmV3IGxvY2sgcmVxdWVzdHMgZHVyaW5nIGdyYWNlIHBlcmlvZCAqLwotCWlmIChubG1zdmNfZ3JhY2VfcGVyaW9kICYmICFhcmdwLT5yZWNsYWltKSB7CisJaWYgKGxvY2tzX2luX2dyYWNlKCkgJiYgIWFyZ3AtPnJlY2xhaW0pIHsKIAkJcmVzcC0+c3RhdHVzID0gbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kOwogCQlyZXR1cm4gcnBjX3N1Y2Nlc3M7CiAJfQpAQCAtMzc0LDcgKzM2Myw3IEBACiAJcmVzcC0+Y29va2llID0gYXJncC0+Y29va2llOwogCiAJLyogRG9uJ3QgYWNjZXB0IHJlcXVlc3RzIGR1cmluZyBncmFjZSBwZXJpb2QgKi8KLQlpZiAobmxtc3ZjX2dyYWNlX3BlcmlvZCkgeworCWlmIChsb2Nrc19pbl9ncmFjZSgpKSB7CiAJCXJlc3AtPnN0YXR1cyA9IG5sbV9sY2tfZGVuaWVkX2dyYWNlX3BlcmlvZDsKIAkJcmV0dXJuIHJwY19zdWNjZXNzOwogCX0KQEAgLTQzMiwxMSArNDIxLDkgQEAKIHsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4Jc2FkZHI7CiAKLQltZW1jcHkoJnNhZGRyLCBzdmNfYWRkcl9pbihycXN0cCksIHNpemVvZihzYWRkcikpOwotCiAJZHByaW50aygibG9ja2Q6IFNNX05PVElGWSAgICAgY2FsbGVkXG4iKTsKLQlpZiAoc2FkZHIuc2luX2FkZHIuc19hZGRyICE9IGh0b25sKElOQUREUl9MT09QQkFDSykKLQkgfHwgbnRvaHMoc2FkZHIuc2luX3BvcnQpID49IDEwMjQpIHsKKworCWlmICghbmxtX3ByaXZpbGVnZWRfcmVxdWVzdGVyKHJxc3RwKSkgewogCQljaGFyIGJ1ZltSUENfTUFYX0FERFJCVUZMRU5dOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJsb2NrZDogcmVqZWN0ZWQgTlNNIGNhbGxiYWNrIGZyb20gJXNcbiIsCiAJCQkJc3ZjX3ByaW50X2FkZHIocnFzdHAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Y2xvY2suYyBiL2ZzL2xvY2tkL3N2Y2xvY2suYwppbmRleCBjZjBkNWMyLi42MDYzYThlIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmNsb2NrLmMKKysrIGIvZnMvbG9ja2Qvc3ZjbG9jay5jCkBAIC0zNjAsNyArMzYwLDcgQEAKIF9fYmUzMgogbmxtc3ZjX2xvY2soc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5sbV9maWxlICpmaWxlLAogCSAgICBzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QsIHN0cnVjdCBubG1fbG9jayAqbG9jaywgaW50IHdhaXQsCi0JICAgIHN0cnVjdCBubG1fY29va2llICpjb29raWUpCisJICAgIHN0cnVjdCBubG1fY29va2llICpjb29raWUsIGludCByZWNsYWltKQogewogCXN0cnVjdCBubG1fYmxvY2sJKmJsb2NrID0gTlVMTDsKIAlpbnQJCQllcnJvcjsKQEAgLTQwNiw2ICs0MDYsMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKGxvY2tzX2luX2dyYWNlKCkgJiYgIXJlY2xhaW0pIHsKKwkJcmV0ID0gbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kOworCQlnb3RvIG91dDsKKwl9CisJaWYgKHJlY2xhaW0gJiYgIWxvY2tzX2luX2dyYWNlKCkpIHsKKwkJcmV0ID0gbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kOworCQlnb3RvIG91dDsKKwl9CisKIAlpZiAoIXdhaXQpCiAJCWxvY2stPmZsLmZsX2ZsYWdzICY9IH5GTF9TTEVFUDsKIAllcnJvciA9IHZmc19sb2NrX2ZpbGUoZmlsZS0+Zl9maWxlLCBGX1NFVExLLCAmbG9jay0+ZmwsIE5VTEwpOwpAQCAtNTAyLDYgKzUxMSwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAobG9ja3NfaW5fZ3JhY2UoKSkgeworCQlyZXQgPSBubG1fbGNrX2RlbmllZF9ncmFjZV9wZXJpb2Q7CisJCWdvdG8gb3V0OworCX0KIAllcnJvciA9IHZmc190ZXN0X2xvY2soZmlsZS0+Zl9maWxlLCAmbG9jay0+ZmwpOwogCWlmIChlcnJvciA9PSBGSUxFX0xPQ0tfREVGRVJSRUQpIHsKIAkJcmV0ID0gbmxtc3ZjX2RlZmVyX2xvY2tfcnFzdChycXN0cCwgYmxvY2spOwpAQCAtNTgyLDYgKzU5NSw5IEBACiAJCQkJKGxvbmcgbG9uZylsb2NrLT5mbC5mbF9zdGFydCwKIAkJCQkobG9uZyBsb25nKWxvY2stPmZsLmZsX2VuZCk7CiAKKwlpZiAobG9ja3NfaW5fZ3JhY2UoKSkKKwkJcmV0dXJuIG5sbV9sY2tfZGVuaWVkX2dyYWNlX3BlcmlvZDsKKwogCW11dGV4X2xvY2soJmZpbGUtPmZfbXV0ZXgpOwogCWJsb2NrID0gbmxtc3ZjX2xvb2t1cF9ibG9jayhmaWxlLCBsb2NrKTsKIAltdXRleF91bmxvY2soJmZpbGUtPmZfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjcHJvYy5jIGIvZnMvbG9ja2Qvc3ZjcHJvYy5jCmluZGV4IDc2MjYyYzEuLjU0OGIwYmIgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y3Byb2MuYworKysgYi9mcy9sb2NrZC9zdmNwcm9jLmMKQEAgLTExNywxMiArMTE3LDYgQEAKIAlkcHJpbnRrKCJsb2NrZDogVEVTVCAgICAgICAgICBjYWxsZWRcbiIpOwogCXJlc3AtPmNvb2tpZSA9IGFyZ3AtPmNvb2tpZTsKIAotCS8qIERvbid0IGFjY2VwdCB0ZXN0IHJlcXVlc3RzIGR1cmluZyBncmFjZSBwZXJpb2QgKi8KLQlpZiAobmxtc3ZjX2dyYWNlX3BlcmlvZCkgewotCQlyZXNwLT5zdGF0dXMgPSBubG1fbGNrX2RlbmllZF9ncmFjZV9wZXJpb2Q7Ci0JCXJldHVybiByYzsKLQl9Ci0KIAkvKiBPYnRhaW4gY2xpZW50IGFuZCBmaWxlICovCiAJaWYgKChyZXNwLT5zdGF0dXMgPSBubG1zdmNfcmV0cmlldmVfYXJncyhycXN0cCwgYXJncCwgJmhvc3QsICZmaWxlKSkpCiAJCXJldHVybiByZXNwLT5zdGF0dXMgPT0gbmxtX2Ryb3BfcmVwbHkgPyBycGNfZHJvcF9yZXBseSA6cnBjX3N1Y2Nlc3M7CkBAIC0xNTIsMTIgKzE0Niw2IEBACiAKIAlyZXNwLT5jb29raWUgPSBhcmdwLT5jb29raWU7CiAKLQkvKiBEb24ndCBhY2NlcHQgbmV3IGxvY2sgcmVxdWVzdHMgZHVyaW5nIGdyYWNlIHBlcmlvZCAqLwotCWlmIChubG1zdmNfZ3JhY2VfcGVyaW9kICYmICFhcmdwLT5yZWNsYWltKSB7Ci0JCXJlc3AtPnN0YXR1cyA9IG5sbV9sY2tfZGVuaWVkX2dyYWNlX3BlcmlvZDsKLQkJcmV0dXJuIHJjOwotCX0KLQogCS8qIE9idGFpbiBjbGllbnQgYW5kIGZpbGUgKi8KIAlpZiAoKHJlc3AtPnN0YXR1cyA9IG5sbXN2Y19yZXRyaWV2ZV9hcmdzKHJxc3RwLCBhcmdwLCAmaG9zdCwgJmZpbGUpKSkKIAkJcmV0dXJuIHJlc3AtPnN0YXR1cyA9PSBubG1fZHJvcF9yZXBseSA/IHJwY19kcm9wX3JlcGx5IDpycGNfc3VjY2VzczsKQEAgLTE3Niw3ICsxNjQsOCBAQAogCiAJLyogTm93IHRyeSB0byBsb2NrIHRoZSBmaWxlICovCiAJcmVzcC0+c3RhdHVzID0gY2FzdF9zdGF0dXMobmxtc3ZjX2xvY2socnFzdHAsIGZpbGUsIGhvc3QsICZhcmdwLT5sb2NrLAotCQkJCQkgICAgICAgYXJncC0+YmxvY2ssICZhcmdwLT5jb29raWUpKTsKKwkJCQkJICAgICAgIGFyZ3AtPmJsb2NrLCAmYXJncC0+Y29va2llLAorCQkJCQkgICAgICAgYXJncC0+cmVjbGFpbSkpOwogCWlmIChyZXNwLT5zdGF0dXMgPT0gbmxtX2Ryb3BfcmVwbHkpCiAJCXJjID0gcnBjX2Ryb3BfcmVwbHk7CiAJZWxzZQpAQCAtMTk5LDcgKzE4OCw3IEBACiAJcmVzcC0+Y29va2llID0gYXJncC0+Y29va2llOwogCiAJLyogRG9uJ3QgYWNjZXB0IHJlcXVlc3RzIGR1cmluZyBncmFjZSBwZXJpb2QgKi8KLQlpZiAobmxtc3ZjX2dyYWNlX3BlcmlvZCkgeworCWlmIChsb2Nrc19pbl9ncmFjZSgpKSB7CiAJCXJlc3AtPnN0YXR1cyA9IG5sbV9sY2tfZGVuaWVkX2dyYWNlX3BlcmlvZDsKIAkJcmV0dXJuIHJwY19zdWNjZXNzOwogCX0KQEAgLTIzMiw3ICsyMjEsNyBAQAogCXJlc3AtPmNvb2tpZSA9IGFyZ3AtPmNvb2tpZTsKIAogCS8qIERvbid0IGFjY2VwdCBuZXcgbG9jayByZXF1ZXN0cyBkdXJpbmcgZ3JhY2UgcGVyaW9kICovCi0JaWYgKG5sbXN2Y19ncmFjZV9wZXJpb2QpIHsKKwlpZiAobG9ja3NfaW5fZ3JhY2UoKSkgewogCQlyZXNwLT5zdGF0dXMgPSBubG1fbGNrX2RlbmllZF9ncmFjZV9wZXJpb2Q7CiAJCXJldHVybiBycGNfc3VjY2VzczsKIAl9CkBAIC0yNjEsNyArMjUwLDcgQEAKIAlyZXNwLT5jb29raWUgPSBhcmdwLT5jb29raWU7CiAKIAlkcHJpbnRrKCJsb2NrZDogR1JBTlRFRCAgICAgICBjYWxsZWRcbiIpOwotCXJlc3AtPnN0YXR1cyA9IG5sbWNsbnRfZ3JhbnQoc3ZjX2FkZHJfaW4ocnFzdHApLCAmYXJncC0+bG9jayk7CisJcmVzcC0+c3RhdHVzID0gbmxtY2xudF9ncmFudChzdmNfYWRkcihycXN0cCksICZhcmdwLT5sb2NrKTsKIAlkcHJpbnRrKCJsb2NrZDogR1JBTlRFRCAgICAgICBzdGF0dXMgJWRcbiIsIG50b2hsKHJlc3AtPnN0YXR1cykpOwogCXJldHVybiBycGNfc3VjY2VzczsKIH0KQEAgLTM3Myw3ICszNjIsNyBAQAogCXJlc3AtPmNvb2tpZSA9IGFyZ3AtPmNvb2tpZTsKIAogCS8qIERvbid0IGFjY2VwdCBuZXcgbG9jayByZXF1ZXN0cyBkdXJpbmcgZ3JhY2UgcGVyaW9kICovCi0JaWYgKG5sbXN2Y19ncmFjZV9wZXJpb2QgJiYgIWFyZ3AtPnJlY2xhaW0pIHsKKwlpZiAobG9ja3NfaW5fZ3JhY2UoKSAmJiAhYXJncC0+cmVjbGFpbSkgewogCQlyZXNwLT5zdGF0dXMgPSBubG1fbGNrX2RlbmllZF9ncmFjZV9wZXJpb2Q7CiAJCXJldHVybiBycGNfc3VjY2VzczsKIAl9CkBAIC00MDYsNyArMzk1LDcgQEAKIAlyZXNwLT5jb29raWUgPSBhcmdwLT5jb29raWU7CiAKIAkvKiBEb24ndCBhY2NlcHQgcmVxdWVzdHMgZHVyaW5nIGdyYWNlIHBlcmlvZCAqLwotCWlmIChubG1zdmNfZ3JhY2VfcGVyaW9kKSB7CisJaWYgKGxvY2tzX2luX2dyYWNlKCkpIHsKIAkJcmVzcC0+c3RhdHVzID0gbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kOwogCQlyZXR1cm4gcnBjX3N1Y2Nlc3M7CiAJfQpAQCAtNDY0LDExICs0NTMsOSBAQAogewogCXN0cnVjdCBzb2NrYWRkcl9pbglzYWRkcjsKIAotCW1lbWNweSgmc2FkZHIsIHN2Y19hZGRyX2luKHJxc3RwKSwgc2l6ZW9mKHNhZGRyKSk7Ci0KIAlkcHJpbnRrKCJsb2NrZDogU01fTk9USUZZICAgICBjYWxsZWRcbiIpOwotCWlmIChzYWRkci5zaW5fYWRkci5zX2FkZHIgIT0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKQotCSB8fCBudG9ocyhzYWRkci5zaW5fcG9ydCkgPj0gMTAyNCkgeworCisJaWYgKCFubG1fcHJpdmlsZWdlZF9yZXF1ZXN0ZXIocnFzdHApKSB7CiAJCWNoYXIgYnVmW1JQQ19NQVhfQUREUkJVRkxFTl07CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImxvY2tkOiByZWplY3RlZCBOU00gY2FsbGJhY2sgZnJvbSAlc1xuIiwKIAkJCQlzdmNfcHJpbnRfYWRkcihycXN0cCwgYnVmLCBzaXplb2YoYnVmKSkpOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3Zjc3Vicy5jIGIvZnMvbG9ja2Qvc3Zjc3Vicy5jCmluZGV4IDE5OGI0ZTUuLjM0YzI3NjYgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y3N1YnMuYworKysgYi9mcy9sb2NrZC9zdmNzdWJzLmMKQEAgLTQxOCw3ICs0MTgsNyBAQAogc3RhdGljIGludAogbmxtc3ZjX21hdGNoX2lwKHZvaWQgKmRhdGFwLCBzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QpCiB7Ci0JcmV0dXJuIG5sbV9jbXBfYWRkcigmaG9zdC0+aF9zYWRkciwgZGF0YXApOworCXJldHVybiBubG1fY21wX2FkZHIobmxtX3NyY2FkZHIoaG9zdCksIGRhdGFwKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9mcy9sb2NrZC94ZHIuYyBiL2ZzL2xvY2tkL3hkci5jCmluZGV4IDNlNDU5ZTEuLjFmMjI2MjkgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3hkci5jCisrKyBiL2ZzL2xvY2tkL3hkci5jCkBAIC0zNTEsOCArMzUxLDYgQEAKIAlhcmdwLT5zdGF0ZSA9IG50b2hsKCpwKyspOwogCS8qIFByZXNlcnZlIHRoZSBhZGRyZXNzIGluIG5ldHdvcmsgYnl0ZSBvcmRlciAqLwogCWFyZ3AtPmFkZHIgPSAqcCsrOwotCWFyZ3AtPnZlcnMgPSAqcCsrOwotCWFyZ3AtPnByb3RvID0gKnArKzsKIAlyZXR1cm4geGRyX2FyZ3NpemVfY2hlY2socnFzdHAsIHApOwogfQogCmRpZmYgLS1naXQgYS9mcy9sb2NrZC94ZHI0LmMgYi9mcy9sb2NrZC94ZHI0LmMKaW5kZXggNDNmZjkzOS4uNTBjNDkzYSAxMDA2NDQKLS0tIGEvZnMvbG9ja2QveGRyNC5jCisrKyBiL2ZzL2xvY2tkL3hkcjQuYwpAQCAtMzU4LDggKzM1OCw2IEBACiAJYXJncC0+c3RhdGUgPSBudG9obCgqcCsrKTsKIAkvKiBQcmVzZXJ2ZSB0aGUgYWRkcmVzcyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KIAlhcmdwLT5hZGRyICA9ICpwKys7Ci0JYXJncC0+dmVycyAgPSAqcCsrOwotCWFyZ3AtPnByb3RvID0gKnArKzsKIAlyZXR1cm4geGRyX2FyZ3NpemVfY2hlY2socnFzdHAsIHApOwogfQogCmRpZmYgLS1naXQgYS9mcy9tcGFnZS5jIGIvZnMvbXBhZ2UuYwppbmRleCBkYmNjN2FmLi41NTJiODBiIDEwMDY0NAotLS0gYS9mcy9tcGFnZS5jCisrKyBiL2ZzL21wYWdlLmMKQEAgLTYsNyArNiw3IEBACiAgKiBDb250YWlucyBmdW5jdGlvbnMgcmVsYXRlZCB0byBwcmVwYXJpbmcgYW5kIHN1Ym1pdHRpbmcgQklPcyB3aGljaCBjb250YWluCiAgKiBtdWx0aXBsZSBwYWdlY2FjaGUgcGFnZXMuCiAgKgotICogMTVNYXkyMDAyCWFrcG1AemlwLmNvbS5hdQorICogMTVNYXkyMDAyCUFuZHJldyBNb3J0b24KICAqCQlJbml0aWFsIHZlcnNpb24KICAqIDI3SnVuMjAwMglheGJvZUBzdXNlLmRlCiAgKgkJdXNlIGJpb19hZGRfcGFnZSgpIHRvIGJ1aWxkIGJpbydzIGp1c3QgdGhlIHJpZ2h0IHNpemUKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFjay5jIGIvZnMvbmZzL2NhbGxiYWNrLmMKaW5kZXggZjQ0N2Y0Yi4uYzJlOWNmZCAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrLmMKQEAgLTQwLDYgKzQwLDE2IEBACiBzdGF0aWMgY29uc3QgaW50IG5mc19zZXRfcG9ydF9taW4gPSAwOwogc3RhdGljIGNvbnN0IGludCBuZnNfc2V0X3BvcnRfbWF4ID0gNjU1MzU7CiAKKy8qCisgKiBJZiB0aGUga2VybmVsIGhhcyBJUHY2IHN1cHBvcnQgYXZhaWxhYmxlLCBhbHdheXMgbGlzdGVuIGZvcgorICogYm90aCBBRl9JTkVUIGFuZCBBRl9JTkVUNiByZXF1ZXN0cy4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorc3RhdGljIGNvbnN0IHNhX2ZhbWlseV90CW5mc19jYWxsYmFja19mYW1pbHkgPSBBRl9JTkVUNjsKKyNlbHNlCitzdGF0aWMgY29uc3Qgc2FfZmFtaWx5X3QJbmZzX2NhbGxiYWNrX2ZhbWlseSA9IEFGX0lORVQ7CisjZW5kaWYKKwogc3RhdGljIGludCBwYXJhbV9zZXRfcG9ydChjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewogCWNoYXIgKmVuZHA7CkBAIC0xMDUsNyArMTE1LDggQEAKIAltdXRleF9sb2NrKCZuZnNfY2FsbGJhY2tfbXV0ZXgpOwogCWlmIChuZnNfY2FsbGJhY2tfaW5mby51c2VycysrIHx8IG5mc19jYWxsYmFja19pbmZvLnRhc2sgIT0gTlVMTCkKIAkJZ290byBvdXQ7Ci0Jc2VydiA9IHN2Y19jcmVhdGUoJm5mczRfY2FsbGJhY2tfcHJvZ3JhbSwgTkZTNF9DQUxMQkFDS19CVUZTSVpFLCBOVUxMKTsKKwlzZXJ2ID0gc3ZjX2NyZWF0ZSgmbmZzNF9jYWxsYmFja19wcm9ncmFtLCBORlM0X0NBTExCQUNLX0JVRlNJWkUsCisJCQkJbmZzX2NhbGxiYWNrX2ZhbWlseSwgTlVMTCk7CiAJcmV0ID0gLUVOT01FTTsKIAlpZiAoIXNlcnYpCiAJCWdvdG8gb3V0X2VycjsKQEAgLTExNSw3ICsxMjYsOCBAQAogCWlmIChyZXQgPD0gMCkKIAkJZ290byBvdXRfZXJyOwogCW5mc19jYWxsYmFja190Y3Bwb3J0ID0gcmV0OwotCWRwcmludGsoIkNhbGxiYWNrIHBvcnQgPSAweCV4XG4iLCBuZnNfY2FsbGJhY2tfdGNwcG9ydCk7CisJZHByaW50aygiTkZTOiBDYWxsYmFjayBsaXN0ZW5lciBwb3J0ID0gJXUgKGFmICV1KVxuIiwKKwkJCW5mc19jYWxsYmFja190Y3Bwb3J0LCBuZnNfY2FsbGJhY2tfZmFtaWx5KTsKIAogCW5mc19jYWxsYmFja19pbmZvLnJxc3QgPSBzdmNfcHJlcGFyZV90aHJlYWQoc2VydiwgJnNlcnYtPnN2X3Bvb2xzWzBdKTsKIAlpZiAoSVNfRVJSKG5mc19jYWxsYmFja19pbmZvLnJxc3QpKSB7CkBAIC0xNDgsOCArMTYwLDggQEAKIAltdXRleF91bmxvY2soJm5mc19jYWxsYmFja19tdXRleCk7CiAJcmV0dXJuIHJldDsKIG91dF9lcnI6Ci0JZHByaW50aygiQ291bGRuJ3QgY3JlYXRlIGNhbGxiYWNrIHNvY2tldCBvciBzZXJ2ZXIgdGhyZWFkOyBlcnIgPSAlZFxuIiwKLQkJcmV0KTsKKwlkcHJpbnRrKCJORlM6IENvdWxkbid0IGNyZWF0ZSBjYWxsYmFjayBzb2NrZXQgb3Igc2VydmVyIHRocmVhZDsgIgorCQkiZXJyID0gJWRcbiIsIHJldCk7CiAJbmZzX2NhbGxiYWNrX2luZm8udXNlcnMtLTsKIAlnb3RvIG91dDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9jbGllbnQuYyBiL2ZzL25mcy9jbGllbnQuYwppbmRleCA1ZWUyM2U3Li43NTQ3NjAwIDEwMDY0NAotLS0gYS9mcy9uZnMvY2xpZW50LmMKKysrIGIvZnMvbmZzL2NsaWVudC5jCkBAIC02NzUsNyArNjc1LDcgQEAKIAlzZXJ2ZXItPm5mc19jbGllbnQgPSBjbHA7CiAKIAkvKiBJbml0aWFsaXNlIHRoZSBjbGllbnQgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgbW91bnQgZGF0YSAqLwotCXNlcnZlci0+ZmxhZ3MgPSBkYXRhLT5mbGFncyAmIE5GU19NT1VOVF9GTEFHTUFTSzsKKwlzZXJ2ZXItPmZsYWdzID0gZGF0YS0+ZmxhZ3M7CiAKIAlpZiAoZGF0YS0+cnNpemUpCiAJCXNlcnZlci0+cnNpemUgPSBuZnNfYmxvY2tfc2l6ZShkYXRhLT5yc2l6ZSwgTlVMTCk7CkBAIC04NTAsNyArODUwLDYgQEAKIAlJTklUX0xJU1RfSEVBRCgmc2VydmVyLT5jbGllbnRfbGluayk7CiAJSU5JVF9MSVNUX0hFQUQoJnNlcnZlci0+bWFzdGVyX2xpbmspOwogCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmc2VydmVyLT5hY3RpdmVfd3EpOwogCWF0b21pY19zZXQoJnNlcnZlci0+YWN0aXZlLCAwKTsKIAogCXNlcnZlci0+aW9fc3RhdHMgPSBuZnNfYWxsb2NfaW9zdGF0cygpOwpAQCAtMTA3Myw3ICsxMDcyLDcgQEAKIAkJZ290byBlcnJvcjsKIAogCS8qIEluaXRpYWxpc2UgdGhlIGNsaWVudCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBtb3VudCBkYXRhICovCi0Jc2VydmVyLT5mbGFncyA9IGRhdGEtPmZsYWdzICYgTkZTX01PVU5UX0ZMQUdNQVNLOworCXNlcnZlci0+ZmxhZ3MgPSBkYXRhLT5mbGFnczsKIAlzZXJ2ZXItPmNhcHMgfD0gTkZTX0NBUF9BVE9NSUNfT1BFTjsKIAogCWlmIChkYXRhLT5yc2l6ZSkKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCA3NGY5MmI3Li5lZmRiYTJlIDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC0xNTYsNiArMTU2LDcgQEAKIAlkZWNvZGVfZGlyZW50X3QJZGVjb2RlOwogCWludAkJcGx1czsKIAl1bnNpZ25lZCBsb25nCXRpbWVzdGFtcDsKKwl1bnNpZ25lZCBsb25nCWdlbmNvdW50OwogCWludAkJdGltZXN0YW1wX3ZhbGlkOwogfSBuZnNfcmVhZGRpcl9kZXNjcmlwdG9yX3Q7CiAKQEAgLTE3Nyw3ICsxNzgsNyBAQAogCXN0cnVjdCBmaWxlCSpmaWxlID0gZGVzYy0+ZmlsZTsKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcnBjX2NyZWQJKmNyZWQgPSBuZnNfZmlsZV9jcmVkKGZpbGUpOwotCXVuc2lnbmVkIGxvbmcJdGltZXN0YW1wOworCXVuc2lnbmVkIGxvbmcJdGltZXN0YW1wLCBnZW5jb3VudDsKIAlpbnQJCWVycm9yOwogCiAJZGZwcmludGsoRElSQ0FDSEUsICJORlM6ICVzOiByZWFkaW5nIGNvb2tpZSAlTHUgaW50byBwYWdlICVsdVxuIiwKQEAgLTE4Niw2ICsxODcsNyBAQAogCiAgYWdhaW46CiAJdGltZXN0YW1wID0gamlmZmllczsKKwlnZW5jb3VudCA9IG5mc19pbmNfYXR0cl9nZW5lcmF0aW9uX2NvdW50ZXIoKTsKIAllcnJvciA9IE5GU19QUk9UTyhpbm9kZSktPnJlYWRkaXIoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgY3JlZCwgZGVzYy0+ZW50cnktPmNvb2tpZSwgcGFnZSwKIAkJCQkJICBORlNfU0VSVkVSKGlub2RlKS0+ZHRzaXplLCBkZXNjLT5wbHVzKTsKIAlpZiAoZXJyb3IgPCAwKSB7CkBAIC0xOTksNiArMjAxLDcgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAJZGVzYy0+dGltZXN0YW1wID0gdGltZXN0YW1wOworCWRlc2MtPmdlbmNvdW50ID0gZ2VuY291bnQ7CiAJZGVzYy0+dGltZXN0YW1wX3ZhbGlkID0gMTsKIAlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJLyogRW5zdXJlIGNvbnNpc3RlbnQgcGFnZSBhbGlnbm1lbnQgb2YgdGhlIGRhdGEuCkBAIC0yMjQsOSArMjI3LDEwIEBACiAJaWYgKElTX0VSUihwKSkKIAkJcmV0dXJuIFBUUl9FUlIocCk7CiAJZGVzYy0+cHRyID0gcDsKLQlpZiAoZGVzYy0+dGltZXN0YW1wX3ZhbGlkKQorCWlmIChkZXNjLT50aW1lc3RhbXBfdmFsaWQpIHsKIAkJZGVzYy0+ZW50cnktPmZhdHRyLT50aW1lX3N0YXJ0ID0gZGVzYy0+dGltZXN0YW1wOwotCWVsc2UKKwkJZGVzYy0+ZW50cnktPmZhdHRyLT5nZW5jb3VudCA9IGRlc2MtPmdlbmNvdW50OworCX0gZWxzZQogCQlkZXNjLT5lbnRyeS0+ZmF0dHItPnZhbGlkICY9IH5ORlNfQVRUUl9GQVRUUjsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ3MSw3ICs0NzUsNyBAQAogCXN0cnVjdCBycGNfY3JlZAkqY3JlZCA9IG5mc19maWxlX2NyZWQoZmlsZSk7CiAJc3RydWN0IHBhZ2UJKnBhZ2UgPSBOVUxMOwogCWludAkJc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcJdGltZXN0YW1wOworCXVuc2lnbmVkIGxvbmcJdGltZXN0YW1wLCBnZW5jb3VudDsKIAogCWRmcHJpbnRrKERJUkNBQ0hFLCAiTkZTOiB1bmNhY2hlZF9yZWFkZGlyKCkgc2VhcmNoaW5nIGZvciBjb29raWUgJUx1XG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykqZGVzYy0+ZGlyX2Nvb2tpZSk7CkBAIC00ODIsNiArNDg2LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCXRpbWVzdGFtcCA9IGppZmZpZXM7CisJZ2VuY291bnQgPSBuZnNfaW5jX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyKCk7CiAJc3RhdHVzID0gTkZTX1BST1RPKGlub2RlKS0+cmVhZGRpcihmaWxlLT5mX3BhdGguZGVudHJ5LCBjcmVkLAogCQkJCQkJKmRlc2MtPmRpcl9jb29raWUsIHBhZ2UsCiAJCQkJCQlORlNfU0VSVkVSKGlub2RlKS0+ZHRzaXplLApAQCAtNDkwLDYgKzQ5NSw3IEBACiAJZGVzYy0+cHRyID0ga21hcChwYWdlKTsJCS8qIG1hdGNoaW5nIGt1bm1hcCBpbiBuZnNfZG9fZmlsbGRpciAqLwogCWlmIChzdGF0dXMgPj0gMCkgewogCQlkZXNjLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisJCWRlc2MtPmdlbmNvdW50ID0gZ2VuY291bnQ7CiAJCWRlc2MtPnRpbWVzdGFtcF92YWxpZCA9IDE7CiAJCWlmICgoc3RhdHVzID0gZGlyX2RlY29kZShkZXNjKSkgPT0gMCkKIAkJCWRlc2MtPmVudHJ5LT5wcmV2X2Nvb2tpZSA9ICpkZXNjLT5kaXJfY29va2llOwpAQCAtNjU1LDcgKzY2MSw3IEBACiAgKi8KIHZvaWQgbmZzX2ZvcmNlX2xvb2t1cF9yZXZhbGlkYXRlKHN0cnVjdCBpbm9kZSAqZGlyKQogewotCU5GU19JKGRpciktPmNhY2hlX2NoYW5nZV9hdHRyaWJ1dGUgPSBqaWZmaWVzOworCU5GU19JKGRpciktPmNhY2hlX2NoYW5nZV9hdHRyaWJ1dGUrKzsKIH0KIAogLyoKQEAgLTY2Nyw2ICs2NzMsOCBAQAogewogCWlmIChJU19ST09UKGRlbnRyeSkpCiAJCXJldHVybiAxOworCWlmIChORlNfU0VSVkVSKGRpciktPmZsYWdzICYgTkZTX01PVU5UX0xPT0tVUF9DQUNIRV9OT05FKQorCQlyZXR1cm4gMDsKIAlpZiAoIW5mc192ZXJpZnlfY2hhbmdlX2F0dHJpYnV0ZShkaXIsIGRlbnRyeS0+ZF90aW1lKSkKIAkJcmV0dXJuIDA7CiAJLyogUmV2YWxpZGF0ZSBuZnNpLT5jYWNoZV9jaGFuZ2VfYXR0cmlidXRlIGJlZm9yZSB3ZSBkZWNsYXJlIGEgbWF0Y2ggKi8KQEAgLTc1MCw2ICs3NTgsOCBAQAogCS8qIERvbid0IHJldmFsaWRhdGUgYSBuZWdhdGl2ZSBkZW50cnkgaWYgd2UncmUgY3JlYXRpbmcgYSBuZXcgZmlsZSAqLwogCWlmIChuZCAhPSBOVUxMICYmIG5mc19sb29rdXBfY2hlY2tfaW50ZW50KG5kLCBMT09LVVBfQ1JFQVRFKSAhPSAwKQogCQlyZXR1cm4gMDsKKwlpZiAoTkZTX1NFUlZFUihkaXIpLT5mbGFncyAmIE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORUcpCisJCXJldHVybiAxOwogCXJldHVybiAhbmZzX2NoZWNrX3ZlcmlmaWVyKGRpciwgZGVudHJ5KTsKIH0KIApAQCAtMTUwNyw3ICsxNTE3LDcgQEAKIAlpZiAoIWFkZF90b19wYWdlX2NhY2hlKHBhZ2UsIGRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nLCAwLAogCQkJCQkJCUdGUF9LRVJORUwpKSB7CiAJCXBhZ2V2ZWNfYWRkKCZscnVfcHZlYywgcGFnZSk7Ci0JCXBhZ2V2ZWNfbHJ1X2FkZCgmbHJ1X3B2ZWMpOworCQlwYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOwogCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJCXVubG9ja19wYWdlKHBhZ2UpOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGUuYyBiL2ZzL25mcy9maWxlLmMKaW5kZXggNzg0NjA2NS4uZDMxOWI0OSAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGUuYworKysgYi9mcy9uZnMvZmlsZS5jCkBAIC0xODgsMTMgKzE4OCwxNiBAQAogCS8qIG9yaWdpbiA9PSBTRUVLX0VORCA9PiB3ZSBtdXN0IHJldmFsaWRhdGUgdGhlIGNhY2hlZCBmaWxlIGxlbmd0aCAqLwogCWlmIChvcmlnaW4gPT0gU0VFS19FTkQpIHsKIAkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfbWFwcGluZy0+aG9zdDsKKwogCQlpbnQgcmV0dmFsID0gbmZzX3JldmFsaWRhdGVfZmlsZV9zaXplKGlub2RlLCBmaWxwKTsKIAkJaWYgKHJldHZhbCA8IDApCiAJCQlyZXR1cm4gKGxvZmZfdClyZXR2YWw7Ci0JfQotCWxvY2tfa2VybmVsKCk7CS8qIEJLTCBuZWVkZWQ/ICovCi0JbG9mZiA9IGdlbmVyaWNfZmlsZV9sbHNlZWtfdW5sb2NrZWQoZmlscCwgb2Zmc2V0LCBvcmlnaW4pOwotCXVubG9ja19rZXJuZWwoKTsKKworCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCQlsb2ZmID0gZ2VuZXJpY19maWxlX2xsc2Vla191bmxvY2tlZChmaWxwLCBvZmZzZXQsIG9yaWdpbik7CisJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwl9IGVsc2UKKwkJbG9mZiA9IGdlbmVyaWNfZmlsZV9sbHNlZWtfdW5sb2NrZWQoZmlscCwgb2Zmc2V0LCBvcmlnaW4pOwogCXJldHVybiBsb2ZmOwogfQogCkBAIC02OTksMTMgKzcwMiw2IEBACiAJCQlmaWxwLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJCWZsLT5mbF90eXBlLCBmbC0+ZmxfZmxhZ3MpOwogCi0JLyoKLQkgKiBObyBCU0QgZmxvY2tzIG92ZXIgTkZTIGFsbG93ZWQuCi0JICogTm90ZTogd2UgY291bGQgdHJ5IHRvIGZha2UgYSBQT1NJWCBsb2NrIHJlcXVlc3QgaGVyZSBieQotCSAqIHVzaW5nICgodTMyKSBmaWxwIHwgMHg4MDAwMDAwMCkgb3Igc29tZSBzdWNoIGFzIHRoZSBwaWQuCi0JICogTm90IHN1cmUgd2hldGhlciB0aGF0IHdvdWxkIGJlIHVuaXF1ZSwgdGhvdWdoLCBvciB3aGV0aGVyCi0JICogdGhhdCB3b3VsZCBicmVhayBpbiBvdGhlciBwbGFjZXMuCi0JICovCiAJaWYgKCEoZmwtPmZsX2ZsYWdzICYgRkxfRkxPQ0spKQogCQlyZXR1cm4gLUVOT0xDSzsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5vZGUuYwppbmRleCA1MmRhZWZhLi5iOTE5NWMwIDEwMDY0NAotLS0gYS9mcy9uZnMvaW5vZGUuYworKysgYi9mcy9uZnMvaW5vZGUuYwpAQCAtMzA1LDggKzMwNSw3IEBACiAJCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsIGZhdHRyLT5yZGV2KTsKIAogCQluZnNpLT5yZWFkX2NhY2hlX2ppZmZpZXMgPSBmYXR0ci0+dGltZV9zdGFydDsKLQkJbmZzaS0+bGFzdF91cGRhdGVkID0gbm93OwotCQluZnNpLT5jYWNoZV9jaGFuZ2VfYXR0cmlidXRlID0gbm93OworCQluZnNpLT5hdHRyX2dlbmNvdW50ID0gZmF0dHItPmdlbmNvdW50OwogCQlpbm9kZS0+aV9hdGltZSA9IGZhdHRyLT5hdGltZTsKIAkJaW5vZGUtPmlfbXRpbWUgPSBmYXR0ci0+bXRpbWU7CiAJCWlub2RlLT5pX2N0aW1lID0gZmF0dHItPmN0aW1lOwpAQCAtNDUzLDYgKzQ1Miw3IEBACiB2b2lkIG5mc19zZXRhdHRyX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiB7CiAJaWYgKChhdHRyLT5pYV92YWxpZCAmIChBVFRSX01PREV8QVRUUl9VSUR8QVRUUl9HSUQpKSAhPSAwKSB7CisJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01PREUpICE9IDApIHsKIAkJCWludCBtb2RlID0gYXR0ci0+aWFfbW9kZSAmIFNfSUFMTFVHTzsKIAkJCW1vZGUgfD0gaW5vZGUtPmlfbW9kZSAmIH5TX0lBTExVR087CkBAIC00NjIsNyArNDYyLDYgQEAKIAkJCWlub2RlLT5pX3VpZCA9IGF0dHItPmlhX3VpZDsKIAkJaWYgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfR0lEKSAhPSAwKQogCQkJaW5vZGUtPmlfZ2lkID0gYXR0ci0+aWFfZ2lkOwotCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCQlORlNfSShpbm9kZSktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9BQ0NFU1N8TkZTX0lOT19JTlZBTElEX0FDTDsKIAkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCX0KQEAgLTQ3MiwzNyArNDcxLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbmZzX3dhaXRfc2NoZWR1bGUodm9pZCAqd29yZCkKLXsKLQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0Jc2NoZWR1bGUoKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFdhaXQgZm9yIHRoZSBpbm9kZSB0byBnZXQgdW5sb2NrZWQuCi0gKi8KLXN0YXRpYyBpbnQgbmZzX3dhaXRfb25faW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOwotCWludCBlcnJvcjsKLQotCWVycm9yID0gd2FpdF9vbl9iaXRfbG9jaygmbmZzaS0+ZmxhZ3MsIE5GU19JTk9fUkVWQUxJREFUSU5HLAotCQkJCQluZnNfd2FpdF9zY2hlZHVsZSwgVEFTS19LSUxMQUJMRSk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyB2b2lkIG5mc193YWtlX3VwX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0Jc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKLQotCWNsZWFyX2JpdChORlNfSU5PX1JFVkFMSURBVElORywgJm5mc2ktPmZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwotCXdha2VfdXBfYml0KCZuZnNpLT5mbGFncywgTkZTX0lOT19SRVZBTElEQVRJTkcpOwotfQotCiBpbnQgbmZzX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ICpzdGF0KQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CkBAIC02OTcsMjAgKzY2NSwxNSBAQAogCWRmcHJpbnRrKFBBR0VDQUNIRSwgIk5GUzogcmV2YWxpZGF0aW5nICglcy8lTGQpXG4iLAogCQlpbm9kZS0+aV9zYi0+c19pZCwgKGxvbmcgbG9uZylORlNfRklMRUlEKGlub2RlKSk7CiAKLQluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfSU5PREVSRVZBTElEQVRFKTsKIAlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkKLSAJCWdvdG8gb3V0X25vd2FpdDsKLQlpZiAoTkZTX1NUQUxFKGlub2RlKSkKLSAJCWdvdG8gb3V0X25vd2FpdDsKLQotCXN0YXR1cyA9IG5mc193YWl0X29uX2lub2RlKGlub2RlKTsKLQlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBvdXQ7Ci0KLQlzdGF0dXMgPSAtRVNUQUxFOwogCWlmIChORlNfU1RBTEUoaW5vZGUpKQogCQlnb3RvIG91dDsKIAorCWlmIChORlNfU1RBTEUoaW5vZGUpKQorCQlnb3RvIG91dDsKKworCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19JTk9ERVJFVkFMSURBVEUpOwogCXN0YXR1cyA9IE5GU19QUk9UTyhpbm9kZSktPmdldGF0dHIoc2VydmVyLCBORlNfRkgoaW5vZGUpLCAmZmF0dHIpOwogCWlmIChzdGF0dXMgIT0gMCkgewogCQlkZnByaW50ayhQQUdFQ0FDSEUsICJuZnNfcmV2YWxpZGF0ZV9pbm9kZTogKCVzLyVMZCkgZ2V0YXR0ciBmYWlsZWQsIGVycm9yPSVkXG4iLApAQCAtNzI0LDE2ICs2ODcsMTMgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlzdGF0dXMgPSBuZnNfdXBkYXRlX2lub2RlKGlub2RlLCAmZmF0dHIpOworCXN0YXR1cyA9IG5mc19yZWZyZXNoX2lub2RlKGlub2RlLCAmZmF0dHIpOwogCWlmIChzdGF0dXMpIHsKLQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCQlkZnByaW50ayhQQUdFQ0FDSEUsICJuZnNfcmV2YWxpZGF0ZV9pbm9kZTogKCVzLyVMZCkgcmVmcmVzaCBmYWlsZWQsIGVycm9yPSVkXG4iLAogCQkJIGlub2RlLT5pX3NiLT5zX2lkLAogCQkJIChsb25nIGxvbmcpTkZTX0ZJTEVJRChpbm9kZSksIHN0YXR1cyk7CiAJCWdvdG8gb3V0OwogCX0KLQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAKIAlpZiAobmZzaS0+Y2FjaGVfdmFsaWRpdHkgJiBORlNfSU5PX0lOVkFMSURfQUNMKQogCQluZnNfemFwX2FjbF9jYWNoZShpbm9kZSk7CkBAIC03NDMsOSArNzAzLDYgQEAKIAkJKGxvbmcgbG9uZylORlNfRklMRUlEKGlub2RlKSk7CiAKICBvdXQ6Ci0JbmZzX3dha2VfdXBfaW5vZGUoaW5vZGUpOwotCi0gb3V0X25vd2FpdDoKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC05MDgsOSArODY1LDYgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JLyogRG8gYXRvbWljIHdlYWsgY2FjaGUgY29uc2lzdGVuY3kgdXBkYXRlcyAqLwotCW5mc193Y2NfdXBkYXRlX2lub2RlKGlub2RlLCBmYXR0cik7Ci0KIAlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1Y0KSAhPSAwICYmCiAJCQluZnNpLT5jaGFuZ2VfYXR0ciAhPSBmYXR0ci0+Y2hhbmdlX2F0dHIpCiAJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19SRVZBTF9QQUdFQ0FDSEU7CkBAIC05MzksMTUgKzg5Myw4MSBAQAogCiAJaWYgKGludmFsaWQgIT0gMCkKIAkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gaW52YWxpZDsKLQllbHNlCi0JCW5mc2ktPmNhY2hlX3ZhbGlkaXR5ICY9IH4oTkZTX0lOT19JTlZBTElEX0FUVFIKLQkJCQl8IE5GU19JTk9fSU5WQUxJRF9BVElNRQotCQkJCXwgTkZTX0lOT19SRVZBTF9QQUdFQ0FDSEUpOwogCiAJbmZzaS0+cmVhZF9jYWNoZV9qaWZmaWVzID0gZmF0dHItPnRpbWVfc3RhcnQ7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbmZzX2N0aW1lX25lZWRfdXBkYXRlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQoreworCXJldHVybiB0aW1lc3BlY19jb21wYXJlKCZmYXR0ci0+Y3RpbWUsICZpbm9kZS0+aV9jdGltZSkgPiAwOworfQorCitzdGF0aWMgaW50IG5mc19zaXplX25lZWRfdXBkYXRlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQoreworCXJldHVybiBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnNpemUpID4gaV9zaXplX3JlYWQoaW5vZGUpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZnNfYXR0cl9nZW5lcmF0aW9uX2NvdW50ZXI7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5mc19yZWFkX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyKHZvaWQpCit7CisJc21wX3JtYigpOworCXJldHVybiBuZnNfYXR0cl9nZW5lcmF0aW9uX2NvdW50ZXI7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbmZzX2luY19hdHRyX2dlbmVyYXRpb25fY291bnRlcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCXNtcF9ybWIoKTsKKwlyZXQgPSArK25mc19hdHRyX2dlbmVyYXRpb25fY291bnRlcjsKKwlzbXBfd21iKCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBuZnNfZmF0dHJfaW5pdChzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3sKKwlmYXR0ci0+dmFsaWQgPSAwOworCWZhdHRyLT50aW1lX3N0YXJ0ID0gamlmZmllczsKKwlmYXR0ci0+Z2VuY291bnQgPSBuZnNfaW5jX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyKCk7Cit9CisKKy8qKgorICogbmZzX2lub2RlX2F0dHJzX25lZWRfdXBkYXRlIC0gY2hlY2sgaWYgdGhlIGlub2RlIGF0dHJpYnV0ZXMgbmVlZCB1cGRhdGluZworICogQGlub2RlIC0gcG9pbnRlciB0byBpbm9kZQorICogQGZhdHRyIC0gYXR0cmlidXRlcworICoKKyAqIEF0dGVtcHQgdG8gZGl2aW5lIHdoZXRoZXIgb3Igbm90IGFuIFJQQyBjYWxsIHJlcGx5IGNhcnJ5aW5nIHN0YWxlCisgKiBhdHRyaWJ1dGVzIGdvdCBzY2hlZHVsZWQgYWZ0ZXIgYW5vdGhlciBjYWxsIGNhcnJ5aW5nIHVwZGF0ZWQgb25lcy4KKyAqCisgKiBUbyBkbyBzbywgdGhlIGZ1bmN0aW9uIGZpcnN0IGFzc3VtZXMgdGhhdCBhIG1vcmUgcmVjZW50IGN0aW1lIG1lYW5zCisgKiB0aGF0IHRoZSBhdHRyaWJ1dGVzIGluIGZhdHRyIGFyZSBuZXdlciwgaG93ZXZlciBpdCBhbHNvIGF0dGVtcHQgdG8KKyAqIGNhdGNoIHRoZSBjYXNlIHdoZXJlIGN0aW1lIGVpdGhlciBkaWRuJ3QgY2hhbmdlLCBvciB3ZW50IGJhY2t3YXJkcworICogKGlmIHNvbWVvbmUgcmVzZXQgdGhlIGNsb2NrIG9uIHRoZSBzZXJ2ZXIpIGJ5IGxvb2tpbmcgYXQgd2hldGhlcgorICogb3Igbm90IHRoaXMgUlBDIGNhbGwgd2FzIHN0YXJ0ZWQgYWZ0ZXIgdGhlIGlub2RlIHdhcyBsYXN0IHVwZGF0ZWQuCisgKiBOb3RlIGFsc28gdGhlIGNoZWNrIGZvciB3cmFwYXJvdW5kIG9mICdhdHRyX2dlbmNvdW50JworICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zICd0cnVlJyBpZiBpdCB0aGlua3MgdGhlIGF0dHJpYnV0ZXMgaW4gJ2ZhdHRyJyBhcmUKKyAqIG1vcmUgcmVjZW50IHRoYW4gdGhlIG9uZXMgY2FjaGVkIGluIHRoZSBpbm9kZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgbmZzX2lub2RlX2F0dHJzX25lZWRfdXBkYXRlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQoreworCWNvbnN0IHN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CisKKwlyZXR1cm4gKChsb25nKWZhdHRyLT5nZW5jb3VudCAtIChsb25nKW5mc2ktPmF0dHJfZ2VuY291bnQpID4gMCB8fAorCQluZnNfY3RpbWVfbmVlZF91cGRhdGUoaW5vZGUsIGZhdHRyKSB8fAorCQluZnNfc2l6ZV9uZWVkX3VwZGF0ZShpbm9kZSwgZmF0dHIpIHx8CisJCSgobG9uZyluZnNpLT5hdHRyX2dlbmNvdW50IC0gKGxvbmcpbmZzX3JlYWRfYXR0cl9nZW5lcmF0aW9uX2NvdW50ZXIoKSA+IDApOworfQorCitzdGF0aWMgaW50IG5mc19yZWZyZXNoX2lub2RlX2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3sKKwlpZiAobmZzX2lub2RlX2F0dHJzX25lZWRfdXBkYXRlKGlub2RlLCBmYXR0cikpCisJCXJldHVybiBuZnNfdXBkYXRlX2lub2RlKGlub2RlLCBmYXR0cik7CisJcmV0dXJuIG5mc19jaGVja19pbm9kZV9hdHRyaWJ1dGVzKGlub2RlLCBmYXR0cik7Cit9CisKIC8qKgogICogbmZzX3JlZnJlc2hfaW5vZGUgLSB0cnkgdG8gdXBkYXRlIHRoZSBpbm9kZSBhdHRyaWJ1dGUgY2FjaGUKICAqIEBpbm9kZSAtIHBvaW50ZXIgdG8gaW5vZGUKQEAgLTk2MCwyMSArOTgwLDI4IEBACiAgKi8KIGludCBuZnNfcmVmcmVzaF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKIHsKLQlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOwogCWludCBzdGF0dXM7CiAKIAlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSKSA9PSAwKQogCQlyZXR1cm4gMDsKIAlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCWlmICh0aW1lX2FmdGVyKGZhdHRyLT50aW1lX3N0YXJ0LCBuZnNpLT5sYXN0X3VwZGF0ZWQpKQotCQlzdGF0dXMgPSBuZnNfdXBkYXRlX2lub2RlKGlub2RlLCBmYXR0cik7Ci0JZWxzZQotCQlzdGF0dXMgPSBuZnNfY2hlY2tfaW5vZGVfYXR0cmlidXRlcyhpbm9kZSwgZmF0dHIpOwotCisJc3RhdHVzID0gbmZzX3JlZnJlc2hfaW5vZGVfbG9ja2VkKGlub2RlLCBmYXR0cik7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQgbmZzX3Bvc3Rfb3BfdXBkYXRlX2lub2RlX2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3sKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCisJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19SRVZBTF9QQUdFQ0FDSEU7CisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9EQVRBOworCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFIpID09IDApCisJCXJldHVybiAwOworCXJldHVybiBuZnNfcmVmcmVzaF9pbm9kZV9sb2NrZWQoaW5vZGUsIGZhdHRyKTsKK30KKwogLyoqCiAgKiBuZnNfcG9zdF9vcF91cGRhdGVfaW5vZGUgLSB0cnkgdG8gdXBkYXRlIHRoZSBpbm9kZSBhdHRyaWJ1dGUgY2FjaGUKICAqIEBpbm9kZSAtIHBvaW50ZXIgdG8gaW5vZGUKQEAgLTk5MSwxNCArMTAxOCwxMiBAQAogICovCiBpbnQgbmZzX3Bvc3Rfb3BfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQogewotCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CisJaW50IHN0YXR1czsKIAogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19SRVZBTF9QQUdFQ0FDSEU7Ci0JaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCi0JCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9EQVRBOworCXN0YXR1cyA9IG5mc19wb3N0X29wX3VwZGF0ZV9pbm9kZV9sb2NrZWQoaW5vZGUsIGZhdHRyKTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JcmV0dXJuIG5mc19yZWZyZXNoX2lub2RlKGlub2RlLCBmYXR0cik7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xMDE0LDYgKzEwMzksMTUgQEAKICAqLwogaW50IG5mc19wb3N0X29wX3VwZGF0ZV9pbm9kZV9mb3JjZV93Y2Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCiB7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJLyogRG9uJ3QgZG8gYSBXQ0MgdXBkYXRlIGlmIHRoZXNlIGF0dHJpYnV0ZXMgYXJlIGFscmVhZHkgc3RhbGUgKi8KKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSKSA9PSAwIHx8CisJCQkhbmZzX2lub2RlX2F0dHJzX25lZWRfdXBkYXRlKGlub2RlLCBmYXR0cikpIHsKKwkJZmF0dHItPnZhbGlkICY9IH4oTkZTX0FUVFJfV0NDX1Y0fE5GU19BVFRSX1dDQyk7CisJCWdvdG8gb3V0X25vZm9yY2U7CisJfQogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVjQpICE9IDAgJiYKIAkJCShmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9XQ0NfVjQpID09IDApIHsKIAkJZmF0dHItPnByZV9jaGFuZ2VfYXR0ciA9IE5GU19JKGlub2RlKS0+Y2hhbmdlX2F0dHI7CkBAIC0xMDI2LDcgKzEwNjAsMTAgQEAKIAkJZmF0dHItPnByZV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCQlmYXR0ci0+dmFsaWQgfD0gTkZTX0FUVFJfV0NDOwogCX0KLQlyZXR1cm4gbmZzX3Bvc3Rfb3BfdXBkYXRlX2lub2RlKGlub2RlLCBmYXR0cik7CitvdXRfbm9mb3JjZToKKwlzdGF0dXMgPSBuZnNfcG9zdF9vcF91cGRhdGVfaW5vZGVfbG9ja2VkKGlub2RlLCBmYXR0cik7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qCkBAIC0xMDkyLDcgKzExMjksNyBAQAogCQl9CiAJCS8qIElmIGN0aW1lIGhhcyBjaGFuZ2VkIHdlIHNob3VsZCBkZWZpbml0ZWx5IGNsZWFyIGFjY2VzcythY2wgY2FjaGVzICovCiAJCWlmICghdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPmN0aW1lKSkKLQkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FDQ0VTU3xORlNfSU5PX0lOVkFMSURfQUNMOworCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX0lOVkFMSURfQUNDRVNTfE5GU19JTk9fSU5WQUxJRF9BQ0w7CiAJfSBlbHNlIGlmIChuZnNpLT5jaGFuZ2VfYXR0ciAhPSBmYXR0ci0+Y2hhbmdlX2F0dHIpIHsKIAkJZHByaW50aygiTkZTOiBjaGFuZ2VfYXR0ciBjaGFuZ2Ugb24gc2VydmVyIGZvciBmaWxlICVzLyVsZFxuIiwKIAkJCQlpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vKTsKQEAgLTExMjYsNiArMTE2Myw5IEBACiAJICAgIGlub2RlLT5pX2dpZCAhPSBmYXR0ci0+Z2lkKQogCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fSU5WQUxJRF9BQ0NFU1N8TkZTX0lOT19JTlZBTElEX0FDTDsKIAorCWlmIChpbm9kZS0+aV9ubGluayAhPSBmYXR0ci0+bmxpbmspCisJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFI7CisKIAlpbm9kZS0+aV9tb2RlID0gZmF0dHItPm1vZGU7CiAJaW5vZGUtPmlfbmxpbmsgPSBmYXR0ci0+bmxpbms7CiAJaW5vZGUtPmlfdWlkID0gZmF0dHItPnVpZDsKQEAgLTExNDUsMTggKzExODUsMTMgQEAKIAkJbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX0FUVFJJTlZBTElEQVRFKTsKIAkJbmZzaS0+YXR0cnRpbWVvID0gTkZTX01JTkFUVFJUSU1FTyhpbm9kZSk7CiAJCW5mc2ktPmF0dHJ0aW1lb190aW1lc3RhbXAgPSBub3c7Ci0JCW5mc2ktPmxhc3RfdXBkYXRlZCA9IG5vdzsKKwkJbmZzaS0+YXR0cl9nZW5jb3VudCA9IG5mc19pbmNfYXR0cl9nZW5lcmF0aW9uX2NvdW50ZXIoKTsKIAl9IGVsc2UgewogCQlpZiAoIXRpbWVfaW5fcmFuZ2Uobm93LCBuZnNpLT5hdHRydGltZW9fdGltZXN0YW1wLCBuZnNpLT5hdHRydGltZW9fdGltZXN0YW1wICsgbmZzaS0+YXR0cnRpbWVvKSkgewogCQkJaWYgKChuZnNpLT5hdHRydGltZW8gPDw9IDEpID4gTkZTX01BWEFUVFJUSU1FTyhpbm9kZSkpCiAJCQkJbmZzaS0+YXR0cnRpbWVvID0gTkZTX01BWEFUVFJUSU1FTyhpbm9kZSk7CiAJCQluZnNpLT5hdHRydGltZW9fdGltZXN0YW1wID0gbm93OwogCQl9Ci0JCS8qCi0JCSAqIEF2b2lkIGppZmZ5IHdyYXBhcm91bmQgaXNzdWVzIHdpdGggbmZzaS0+bGFzdF91cGRhdGVkCi0JCSAqLwotCQlpZiAoIXRpbWVfaW5fcmFuZ2UobmZzaS0+bGFzdF91cGRhdGVkLCBuZnNpLT5yZWFkX2NhY2hlX2ppZmZpZXMsIG5vdykpCi0JCQluZnNpLT5sYXN0X3VwZGF0ZWQgPSBuZnNpLT5yZWFkX2NhY2hlX2ppZmZpZXM7CiAJfQogCWludmFsaWQgJj0gfk5GU19JTk9fSU5WQUxJRF9BVFRSOwogCS8qIERvbid0IGludmFsaWRhdGUgdGhlIGRhdGEgaWYgd2Ugd2VyZSB0byBibGFtZSAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ludGVybmFsLmggYi9mcy9uZnMvaW50ZXJuYWwuaAppbmRleCAyNDI0MWZjLi5kMjEyZWU0IDEwMDY0NAotLS0gYS9mcy9uZnMvaW50ZXJuYWwuaAorKysgYi9mcy9uZnMvaW50ZXJuYWwuaApAQCAtMTUzLDYgKzE1Myw3IEBACiB2b2lkIG5mc196YXBfYWNsX2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiAvKiBzdXBlci5jICovCit2b2lkIG5mc19wYXJzZV9pcF9hZGRyZXNzKGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc2l6ZV90ICopOwogZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG5mc194ZGV2X2ZzX3R5cGU7CiAjaWZkZWYgQ09ORklHX05GU19WNAogZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIG5mczRfeGRldl9mc190eXBlOwpAQCAtMTYzLDggKzE2NCw4IEBACiAKIGV4dGVybiBpbnQgX19pbml0IHJlZ2lzdGVyX25mc19mcyh2b2lkKTsKIGV4dGVybiB2b2lkIF9fZXhpdCB1bnJlZ2lzdGVyX25mc19mcyh2b2lkKTsKLWV4dGVybiB2b2lkIG5mc19zYl9hY3RpdmUoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcik7Ci1leHRlcm4gdm9pZCBuZnNfc2JfZGVhY3RpdmUoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcik7CitleHRlcm4gdm9pZCBuZnNfc2JfYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworZXh0ZXJuIHZvaWQgbmZzX3NiX2RlYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogCiAvKiBuYW1lc3BhY2UuYyAqLwogZXh0ZXJuIGNoYXIgKm5mc19wYXRoKGNvbnN0IGNoYXIgKmJhc2UsCkBAIC0yNzYsMyArMjc3LDIzIEBACiAJCVBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CiB9CiAKKyNkZWZpbmUgSVBWNl9TQ09QRV9ERUxJTUlURVIJJyUnCisKKy8qCisgKiBTZXQgdGhlIHBvcnQgbnVtYmVyIGluIGFuIGFkZHJlc3MuICBCZSBhZ25vc3RpYyBhYm91dCB0aGUgYWRkcmVzcworICogZmFtaWx5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX3NldF9wb3J0KHN0cnVjdCBzb2NrYWRkciAqc2FwLCB1bnNpZ25lZCBzaG9ydCBwb3J0KQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqYXAgPSAoc3RydWN0IHNvY2thZGRyX2luICopc2FwOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmFwNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwOworCisJc3dpdGNoIChzYXAtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJYXAtPnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCWFwNi0+c2luNl9wb3J0ID0gaHRvbnMocG9ydCk7CisJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL2ZzL25mcy9tb3VudF9jbG50LmMgYi9mcy9uZnMvbW91bnRfY2xudC5jCmluZGV4IDc3OWQyZWIuLjA4NmE2ODMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9tb3VudF9jbG50LmMKKysrIGIvZnMvbmZzL21vdW50X2NsbnQuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogI2lmZGVmIFJQQ19ERUJVRwogIyBkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZCU5GU0RCR19NT1VOVApAQCAtOTgsNyArOTksNyBAQAogCiBvdXRfbW50X2VycjoKIAlkcHJpbnRrKCJORlM6IE1OVCBzZXJ2ZXIgcmV0dXJuZWQgcmVzdWx0ICVkXG4iLCByZXN1bHQuc3RhdHVzKTsKLQlzdGF0dXMgPSAtRUFDQ0VTOworCXN0YXR1cyA9IG5mc19zdGF0X3RvX2Vycm5vKHJlc3VsdC5zdGF0dXMpOwogCWdvdG8gb3V0OwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvbmFtZXNwYWNlLmMgYi9mcy9uZnMvbmFtZXNwYWNlLmMKaW5kZXggNjZkZjA4ZC4uNjRhMjg4ZSAxMDA2NDQKLS0tIGEvZnMvbmZzL25hbWVzcGFjZS5jCisrKyBiL2ZzL25mcy9uYW1lc3BhY2UuYwpAQCAtMTA1LDcgKzEwNSwxMCBAQAogCiAJZHByaW50aygiLS0+IG5mc19mb2xsb3dfbW91bnRwb2ludCgpXG4iKTsKIAotCUJVR19PTihJU19ST09UKGRlbnRyeSkpOworCWVyciA9IC1FU1RBTEU7CisJaWYgKElTX1JPT1QoZGVudHJ5KSkKKwkJZ290byBvdXRfZXJyOworCiAJZHByaW50aygiJXM6IGVudGVyXG4iLCBfX2Z1bmNfXyk7CiAJZHB1dChuZC0+cGF0aC5kZW50cnkpOwogCW5kLT5wYXRoLmRlbnRyeSA9IGRnZXQoZGVudHJ5KTsKQEAgLTE4OSw3ICsxOTIsNyBAQAogCQkJCQkgICBzdHJ1Y3QgbmZzX2Nsb25lX21vdW50ICptb3VudGRhdGEpCiB7CiAjaWZkZWYgQ09ORklHX05GU19WNAotCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gTlVMTDsKKwlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJc3dpdGNoIChzZXJ2ZXItPm5mc19jbGllbnQtPnJwY19vcHMtPnZlcnNpb24pIHsKIAkJY2FzZSAyOgogCQljYXNlIDM6CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM2FjbC5jIGIvZnMvbmZzL25mczNhY2wuYwppbmRleCA0MjM4NDJmLi5jZWY2MjU1IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzM2FjbC5jCisrKyBiL2ZzL25mcy9uZnMzYWNsLmMKQEAgLTIyOSw2ICsyMjksNyBAQAogCiAJZHByaW50aygiTkZTIGNhbGwgZ2V0YWNsXG4iKTsKIAltc2cucnBjX3Byb2MgPSAmc2VydmVyLT5jbGllbnRfYWNsLT5jbF9wcm9jaW5mb1tBQ0xQUk9DM19HRVRBQ0xdOworCW5mc19mYXR0cl9pbml0KCZmYXR0cik7CiAJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhzZXJ2ZXItPmNsaWVudF9hY2wsICZtc2csIDApOwogCWRwcmludGsoIk5GUyByZXBseSBnZXRhY2w6ICVkXG4iLCBzdGF0dXMpOwogCkBAIC0zMjIsNiArMzIzLDcgQEAKIAogCWRwcmludGsoIk5GUyBjYWxsIHNldGFjbFxuIik7CiAJbXNnLnJwY19wcm9jID0gJnNlcnZlci0+Y2xpZW50X2FjbC0+Y2xfcHJvY2luZm9bQUNMUFJPQzNfU0VUQUNMXTsKKwluZnNfZmF0dHJfaW5pdCgmZmF0dHIpOwogCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2VydmVyLT5jbGllbnRfYWNsLCAmbXNnLCAwKTsKIAluZnNfYWNjZXNzX3phcF9jYWNoZShpbm9kZSk7CiAJbmZzX3phcF9hY2xfY2FjaGUoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczNwcm9jLmMgYi9mcy9uZnMvbmZzM3Byb2MuYwppbmRleCAxZTc1MGU0NS4uYzU1YmU3YSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNwcm9jLmMKKysrIGIvZnMvbmZzL25mczNwcm9jLmMKQEAgLTY5OSw3ICs2OTksNyBAQAogfQogCiBzdGF0aWMgaW50Ci1uZnMzX3Byb2NfZnNpbmZvKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBuZnNfZmggKmZoYW5kbGUsCitkb19wcm9jX2ZzaW5mbyhzdHJ1Y3QgcnBjX2NsbnQgKmNsaWVudCwgc3RydWN0IG5mc19maCAqZmhhbmRsZSwKIAkJIHN0cnVjdCBuZnNfZnNpbmZvICppbmZvKQogewogCXN0cnVjdCBycGNfbWVzc2FnZSBtc2cgPSB7CkBAIC03MTEsMTEgKzcxMSwyNyBAQAogCiAJZHByaW50aygiTkZTIGNhbGwgIGZzaW5mb1xuIik7CiAJbmZzX2ZhdHRyX2luaXQoaW5mby0+ZmF0dHIpOwotCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2VydmVyLT5uZnNfY2xpZW50LT5jbF9ycGNjbGllbnQsICZtc2csIDApOworCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xpZW50LCAmbXNnLCAwKTsKIAlkcHJpbnRrKCJORlMgcmVwbHkgZnNpbmZvOiAlZFxuIiwgc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKgorICogQmFyZS1ib25lcyBhY2Nlc3MgdG8gZnNpbmZvOiB0aGlzIGlzIGZvciBuZnNfZ2V0X3Jvb3QvbmZzX2dldF9zYiB2aWEKKyAqIG5mc19jcmVhdGVfc2VydmVyCisgKi8KK3N0YXRpYyBpbnQKK25mczNfcHJvY19mc2luZm8oc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IG5mc19maCAqZmhhbmRsZSwKKwkJICAgc3RydWN0IG5mc19mc2luZm8gKmluZm8pCit7CisJaW50CXN0YXR1czsKKworCXN0YXR1cyA9IGRvX3Byb2NfZnNpbmZvKHNlcnZlci0+Y2xpZW50LCBmaGFuZGxlLCBpbmZvKTsKKwlpZiAoc3RhdHVzICYmIHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfcnBjY2xpZW50ICE9IHNlcnZlci0+Y2xpZW50KQorCQlzdGF0dXMgPSBkb19wcm9jX2ZzaW5mbyhzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JwY2NsaWVudCwgZmhhbmRsZSwgaW5mbyk7CisJcmV0dXJuIHN0YXR1czsKK30KKwogc3RhdGljIGludAogbmZzM19wcm9jX3BhdGhjb25mKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBuZnNfZmggKmZoYW5kbGUsCiAJCSAgIHN0cnVjdCBuZnNfcGF0aGNvbmYgKmluZm8pCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jIGIvZnMvbmZzL25mczRuYW1lc3BhY2UuYwppbmRleCBiMTEyODU3Li4zMGJlZmMzIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jCisrKyBiL2ZzL25mcy9uZnM0bmFtZXNwYWNlLmMKQEAgLTkzLDIxICs5Myw1MiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogQ2hlY2sgaWYgdGhlIHN0cmluZyByZXByZXNlbnRzIGEgInZhbGlkIiBJUHY0IGFkZHJlc3MKLSAqLwotc3RhdGljIGlubGluZSBpbnQgdmFsaWRfaXBhZGRyNChjb25zdCBjaGFyICpidWYpCitzdGF0aWMgc3RydWN0IHZmc21vdW50ICp0cnlfbG9jYXRpb24oc3RydWN0IG5mc19jbG9uZV9tb3VudCAqbW91bnRkYXRhLAorCQkJCSAgICAgY2hhciAqcGFnZSwgY2hhciAqcGFnZTIsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZzNF9mc19sb2NhdGlvbiAqbG9jYXRpb24pCiB7Ci0JaW50IHJjLCBjb3VudCwgaW5bNF07CisJc3RydWN0IHZmc21vdW50ICptbnQgPSBFUlJfUFRSKC1FTk9FTlQpOworCWNoYXIgKm1udF9wYXRoOworCWludCBwYWdlMmxlbjsKKwl1bnNpZ25lZCBpbnQgczsKIAotCXJjID0gc3NjYW5mKGJ1ZiwgIiVkLiVkLiVkLiVkIiwgJmluWzBdLCAmaW5bMV0sICZpblsyXSwgJmluWzNdKTsKLQlpZiAocmMgIT0gNCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgNDsgY291bnQrKykgewotCQlpZiAoaW5bY291bnRdID4gMjU1KQotCQkJcmV0dXJuIC1FSU5WQUw7CisJbW50X3BhdGggPSBuZnM0X3BhdGhuYW1lX3N0cmluZygmbG9jYXRpb24tPnJvb3RwYXRoLCBwYWdlMiwgUEFHRV9TSVpFKTsKKwlpZiAoSVNfRVJSKG1udF9wYXRoKSkKKwkJcmV0dXJuIG1udDsKKwltb3VudGRhdGEtPm1udF9wYXRoID0gbW50X3BhdGg7CisJcGFnZTIgKz0gc3RybGVuKG1udF9wYXRoKSArIDE7CisJcGFnZTJsZW4gPSBQQUdFX1NJWkUgLSBzdHJsZW4obW50X3BhdGgpIC0gMTsKKworCWZvciAocyA9IDA7IHMgPCBsb2NhdGlvbi0+bnNlcnZlcnM7IHMrKykgeworCQljb25zdCBzdHJ1Y3QgbmZzNF9zdHJpbmcgKmJ1ZiA9ICZsb2NhdGlvbi0+c2VydmVyc1tzXTsKKwkJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjsKKworCQlpZiAoYnVmLT5sZW4gPD0gMCB8fCBidWYtPmxlbiA+PSBQQUdFX1NJWkUpCisJCQljb250aW51ZTsKKworCQltb3VudGRhdGEtPmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI7CisKKwkJaWYgKG1lbWNocihidWYtPmRhdGEsIElQVjZfU0NPUEVfREVMSU1JVEVSLCBidWYtPmxlbikpCisJCQljb250aW51ZTsKKwkJbmZzX3BhcnNlX2lwX2FkZHJlc3MoYnVmLT5kYXRhLCBidWYtPmxlbiwKKwkJCQltb3VudGRhdGEtPmFkZHIsICZtb3VudGRhdGEtPmFkZHJsZW4pOworCQlpZiAobW91bnRkYXRhLT5hZGRyLT5zYV9mYW1pbHkgPT0gQUZfVU5TUEVDKQorCQkJY29udGludWU7CisJCW5mc19zZXRfcG9ydChtb3VudGRhdGEtPmFkZHIsIE5GU19QT1JUKTsKKworCQlzdHJuY3B5KHBhZ2UyLCBidWYtPmRhdGEsIHBhZ2UybGVuKTsKKwkJcGFnZTJbcGFnZTJsZW5dID0gJ1wwJzsKKwkJbW91bnRkYXRhLT5ob3N0bmFtZSA9IHBhZ2UyOworCisJCXNucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgIiVzOiVzIiwKKwkJCQltb3VudGRhdGEtPmhvc3RuYW1lLAorCQkJCW1vdW50ZGF0YS0+bW50X3BhdGgpOworCisJCW1udCA9IHZmc19rZXJuX21vdW50KCZuZnM0X3JlZmVycmFsX2ZzX3R5cGUsIDAsIHBhZ2UsIG1vdW50ZGF0YSk7CisJCWlmICghSVNfRVJSKG1udCkpCisJCQlicmVhazsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIG1udDsKIH0KIAogLyoqCkBAIC0xMjgsNyArMTU5LDYgQEAKIAkJLmF1dGhmbGF2b3IgPSBORlNfU0IobW50X3BhcmVudC0+bW50X3NiKS0+Y2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3IsCiAJfTsKIAljaGFyICpwYWdlID0gTlVMTCwgKnBhZ2UyID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgczsKIAlpbnQgbG9jLCBlcnJvcjsKIAogCWlmIChsb2NhdGlvbnMgPT0gTlVMTCB8fCBsb2NhdGlvbnMtPm5sb2NhdGlvbnMgPD0gMCkKQEAgLTE1Miw1MyArMTgyLDE2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWxvYyA9IDA7Ci0Jd2hpbGUgKGxvYyA8IGxvY2F0aW9ucy0+bmxvY2F0aW9ucyAmJiBJU19FUlIobW50KSkgeworCWZvciAobG9jID0gMDsgbG9jIDwgbG9jYXRpb25zLT5ubG9jYXRpb25zOyBsb2MrKykgewogCQljb25zdCBzdHJ1Y3QgbmZzNF9mc19sb2NhdGlvbiAqbG9jYXRpb24gPSAmbG9jYXRpb25zLT5sb2NhdGlvbnNbbG9jXTsKLQkJY2hhciAqbW50X3BhdGg7CiAKIAkJaWYgKGxvY2F0aW9uID09IE5VTEwgfHwgbG9jYXRpb24tPm5zZXJ2ZXJzIDw9IDAgfHwKLQkJICAgIGxvY2F0aW9uLT5yb290cGF0aC5uY29tcG9uZW50cyA9PSAwKSB7Ci0JCQlsb2MrKzsKKwkJICAgIGxvY2F0aW9uLT5yb290cGF0aC5uY29tcG9uZW50cyA9PSAwKQogCQkJY29udGludWU7Ci0JCX0KIAotCQltbnRfcGF0aCA9IG5mczRfcGF0aG5hbWVfc3RyaW5nKCZsb2NhdGlvbi0+cm9vdHBhdGgsIHBhZ2UyLCBQQUdFX1NJWkUpOwotCQlpZiAoSVNfRVJSKG1udF9wYXRoKSkgewotCQkJbG9jKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQltb3VudGRhdGEubW50X3BhdGggPSBtbnRfcGF0aDsKLQotCQlzID0gMDsKLQkJd2hpbGUgKHMgPCBsb2NhdGlvbi0+bnNlcnZlcnMpIHsKLQkJCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyID0gewotCQkJCS5zaW5fZmFtaWx5CT0gQUZfSU5FVCwKLQkJCQkuc2luX3BvcnQJPSBodG9ucyhORlNfUE9SVCksCi0JCQl9OwotCi0JCQlpZiAobG9jYXRpb24tPnNlcnZlcnNbc10ubGVuIDw9IDAgfHwKLQkJCSAgICB2YWxpZF9pcGFkZHI0KGxvY2F0aW9uLT5zZXJ2ZXJzW3NdLmRhdGEpIDwgMCkgewotCQkJCXMrKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJbW91bnRkYXRhLmhvc3RuYW1lID0gbG9jYXRpb24tPnNlcnZlcnNbc10uZGF0YTsKLQkJCWFkZHIuc2luX2FkZHIuc19hZGRyID0gaW5fYXRvbihtb3VudGRhdGEuaG9zdG5hbWUpLAotCQkJbW91bnRkYXRhLmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI7Ci0JCQltb3VudGRhdGEuYWRkcmxlbiA9IHNpemVvZihhZGRyKTsKLQotCQkJc25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAiJXM6JXMiLAotCQkJCQltb3VudGRhdGEuaG9zdG5hbWUsCi0JCQkJCW1vdW50ZGF0YS5tbnRfcGF0aCk7Ci0KLQkJCW1udCA9IHZmc19rZXJuX21vdW50KCZuZnM0X3JlZmVycmFsX2ZzX3R5cGUsIDAsIHBhZ2UsICZtb3VudGRhdGEpOwotCQkJaWYgKCFJU19FUlIobW50KSkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJcysrOwotCQl9Ci0JCWxvYysrOworCQltbnQgPSB0cnlfbG9jYXRpb24oJm1vdW50ZGF0YSwgcGFnZSwgcGFnZTIsIGxvY2F0aW9uKTsKKwkJaWYgKCFJU19FUlIobW50KSkKKwkJCWJyZWFrOwogCX0KIAogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCBjOTEwNDEzLi44M2U3MDBhIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtMTY1OSw4ICsxNjU5LDEwIEBACiAJCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHg7CiAKIAkJY3R4ID0gbmZzX2ZpbGVfb3Blbl9jb250ZXh0KHNhdHRyLT5pYV9maWxlKTsKLQkJY3JlZCA9IGN0eC0+Y3JlZDsKLQkJc3RhdGUgPSBjdHgtPnN0YXRlOworCQlpZiAoY3R4KSB7CisJCQljcmVkID0gY3R4LT5jcmVkOworCQkJc3RhdGUgPSBjdHgtPnN0YXRlOworCQl9CiAJfQogCiAJc3RhdHVzID0gbmZzNF9kb19zZXRhdHRyKGlub2RlLCBjcmVkLCBmYXR0ciwgc2F0dHIsIHN0YXRlKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnNyb290LmMgYi9mcy9uZnMvbmZzcm9vdC5jCmluZGV4IDQ2NzYzZDEuLjg0NzhmYzIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnNyb290LmMKKysrIGIvZnMvbmZzL25mc3Jvb3QuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAJT3B0X2VycgogfTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgX19pbml0ZGF0YSB0b2tlbnMgPSB7CitzdGF0aWMgbWF0Y2hfdGFibGVfdCBfX2luaXRjb25zdCB0b2tlbnMgPSB7CiAJe09wdF9wb3J0LCAicG9ydD0ldSJ9LAogCXtPcHRfcnNpemUsICJyc2l6ZT0ldSJ9LAogCXtPcHRfd3NpemUsICJ3c2l6ZT0ldSJ9LApkaWZmIC0tZ2l0IGEvZnMvbmZzL3Byb2MuYyBiL2ZzL25mcy9wcm9jLmMKaW5kZXggNGRiYjg0ZC4uMTkzNDY1MiAxMDA2NDQKLS0tIGEvZnMvbmZzL3Byb2MuYworKysgYi9mcy9uZnMvcHJvYy5jCkBAIC02NSwxNCArNjUsMjAgQEAKIAogCWRwcmludGsoIiVzOiBjYWxsIGdldGF0dHJcbiIsIF9fZnVuY19fKTsKIAluZnNfZmF0dHJfaW5pdChmYXR0cik7Ci0Jc3RhdHVzID0gcnBjX2NhbGxfc3luYyhzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7CisJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhzZXJ2ZXItPmNsaWVudCwgJm1zZywgMCk7CisJLyogUmV0cnkgd2l0aCBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uIGlmIGRpZmZlcmVudCAqLworCWlmIChzdGF0dXMgJiYgc2VydmVyLT5uZnNfY2xpZW50LT5jbF9ycGNjbGllbnQgIT0gc2VydmVyLT5jbGllbnQpCisJCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2VydmVyLT5uZnNfY2xpZW50LT5jbF9ycGNjbGllbnQsICZtc2csIDApOwogCWRwcmludGsoIiVzOiByZXBseSBnZXRhdHRyOiAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIAlkcHJpbnRrKCIlczogY2FsbCBzdGF0ZnNcbiIsIF9fZnVuY19fKTsKIAltc2cucnBjX3Byb2MgPSAmbmZzX3Byb2NlZHVyZXNbTkZTUFJPQ19TVEFURlNdOwogCW1zZy5ycGNfcmVzcCA9ICZmc2luZm87Ci0Jc3RhdHVzID0gcnBjX2NhbGxfc3luYyhzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7CisJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhzZXJ2ZXItPmNsaWVudCwgJm1zZywgMCk7CisJLyogUmV0cnkgd2l0aCBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uIGlmIGRpZmZlcmVudCAqLworCWlmIChzdGF0dXMgJiYgc2VydmVyLT5uZnNfY2xpZW50LT5jbF9ycGNjbGllbnQgIT0gc2VydmVyLT5jbGllbnQpCisJCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2VydmVyLT5uZnNfY2xpZW50LT5jbF9ycGNjbGllbnQsICZtc2csIDApOwogCWRwcmludGsoIiVzOiByZXBseSBzdGF0ZnM6ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3N1cGVyLmMgYi9mcy9uZnMvc3VwZXIuYwppbmRleCBlOWIyMDE3Li5hM2IwMDYxIDEwMDY0NAotLS0gYS9mcy9uZnMvc3VwZXIuYworKysgYi9mcy9uZnMvc3VwZXIuYwpAQCAtOTEsNiArOTEsNyBAQAogCS8qIE1vdW50IG9wdGlvbnMgdGhhdCB0YWtlIHN0cmluZyBhcmd1bWVudHMgKi8KIAlPcHRfc2VjLCBPcHRfcHJvdG8sIE9wdF9tb3VudHByb3RvLCBPcHRfbW91bnRob3N0LAogCU9wdF9hZGRyLCBPcHRfbW91bnRhZGRyLCBPcHRfY2xpZW50YWRkciwKKwlPcHRfbG9va3VwY2FjaGUsCiAKIAkvKiBTcGVjaWFsIG1vdW50IG9wdGlvbnMgKi8KIAlPcHRfdXNlcnNwYWNlLCBPcHRfZGVwcmVjYXRlZCwgT3B0X3Nsb3BweSwKQEAgLTk4LDcgKzk5LDcgQEAKIAlPcHRfZXJyCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCBuZnNfbW91bnRfb3B0aW9uX3Rva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IG5mc19tb3VudF9vcHRpb25fdG9rZW5zID0gewogCXsgT3B0X3VzZXJzcGFjZSwgImJnIiB9LAogCXsgT3B0X3VzZXJzcGFjZSwgImZnIiB9LAogCXsgT3B0X3VzZXJzcGFjZSwgInJldHJ5PSVzIiB9LApAQCAtMTU0LDYgKzE1NSw4IEBACiAJeyBPcHRfbW91bnRob3N0LCAibW91bnRob3N0PSVzIiB9LAogCXsgT3B0X21vdW50YWRkciwgIm1vdW50YWRkcj0lcyIgfSwKIAorCXsgT3B0X2xvb2t1cGNhY2hlLCAibG9va3VwY2FjaGU9JXMiIH0sCisKIAl7IE9wdF9lcnIsIE5VTEwgfQogfTsKIApAQCAtMTYzLDcgKzE2Niw3IEBACiAJT3B0X3hwcnRfZXJyCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCBuZnNfeHBydF9wcm90b2NvbF90b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBuZnNfeHBydF9wcm90b2NvbF90b2tlbnMgPSB7CiAJeyBPcHRfeHBydF91ZHAsICJ1ZHAiIH0sCiAJeyBPcHRfeHBydF90Y3AsICJ0Y3AiIH0sCiAJeyBPcHRfeHBydF9yZG1hLCAicmRtYSIgfSwKQEAgLTE4MCw3ICsxODMsNyBAQAogCU9wdF9zZWNfZXJyCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCBuZnNfc2VjZmxhdm9yX3Rva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IG5mc19zZWNmbGF2b3JfdG9rZW5zID0gewogCXsgT3B0X3NlY19ub25lLCAibm9uZSIgfSwKIAl7IE9wdF9zZWNfbm9uZSwgIm51bGwiIH0sCiAJeyBPcHRfc2VjX3N5cywgInN5cyIgfSwKQEAgLTIwMCw2ICsyMDMsMjIgQEAKIAl7IE9wdF9zZWNfZXJyLCBOVUxMIH0KIH07CiAKK2VudW0geworCU9wdF9sb29rdXBjYWNoZV9hbGwsIE9wdF9sb29rdXBjYWNoZV9wb3NpdGl2ZSwKKwlPcHRfbG9va3VwY2FjaGVfbm9uZSwKKworCU9wdF9sb29rdXBjYWNoZV9lcnIKK307CisKK3N0YXRpYyBtYXRjaF90YWJsZV90IG5mc19sb29rdXBjYWNoZV90b2tlbnMgPSB7CisJeyBPcHRfbG9va3VwY2FjaGVfYWxsLCAiYWxsIiB9LAorCXsgT3B0X2xvb2t1cGNhY2hlX3Bvc2l0aXZlLCAicG9zIiB9LAorCXsgT3B0X2xvb2t1cGNhY2hlX3Bvc2l0aXZlLCAicG9zaXRpdmUiIH0sCisJeyBPcHRfbG9va3VwY2FjaGVfbm9uZSwgIm5vbmUiIH0sCisKKwl7IE9wdF9sb29rdXBjYWNoZV9lcnIsIE5VTEwgfQorfTsKKwogCiBzdGF0aWMgdm9pZCBuZnNfdW1vdW50X2JlZ2luKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIHN0YXRpYyBpbnQgIG5mc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXRmcyAqKTsKQEAgLTIwOSw3ICsyMjgsNiBAQAogc3RhdGljIGludCBuZnNfeGRldl9nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCiAJCWludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKnJhd19kYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CiBzdGF0aWMgdm9pZCBuZnNfa2lsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Ci1zdGF0aWMgdm9pZCBuZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIHN0YXRpYyBpbnQgbmZzX3JlbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqcmF3X2RhdGEpOwogCiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbmZzX2ZzX3R5cGUgPSB7CkBAIC0yMzIsNyArMjUwLDYgQEAKIAkuYWxsb2NfaW5vZGUJPSBuZnNfYWxsb2NfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBuZnNfZGVzdHJveV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBuZnNfd3JpdGVfaW5vZGUsCi0JLnB1dF9zdXBlcgk9IG5mc19wdXRfc3VwZXIsCiAJLnN0YXRmcwkJPSBuZnNfc3RhdGZzLAogCS5jbGVhcl9pbm9kZQk9IG5mc19jbGVhcl9pbm9kZSwKIAkudW1vdW50X2JlZ2luCT0gbmZzX3Vtb3VudF9iZWdpbiwKQEAgLTMzNywyNiArMzU0LDIwIEBACiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZuZnNfZnNfdHlwZSk7CiB9CiAKLXZvaWQgbmZzX3NiX2FjdGl2ZShzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQotewotCWF0b21pY19pbmMoJnNlcnZlci0+YWN0aXZlKTsKLX0KLQotdm9pZCBuZnNfc2JfZGVhY3RpdmUoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcikKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2VydmVyLT5hY3RpdmUpKQotCQl3YWtlX3VwKCZzZXJ2ZXItPmFjdGl2ZV93cSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG5mc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3ZvaWQgbmZzX3NiX2FjdGl2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0Ioc2IpOwotCS8qCi0JICogTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyBvcHMgdG8gdGhpcyBzZXJ2ZXIuCi0JICogSWYgc28sIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoIGJlZm9yZSBhbGxvd2luZyB0aGUKLQkgKiB1bm1vdW50IHRvIGNvbnRpbnVlLgotCSAqLwotCXdhaXRfZXZlbnQoc2VydmVyLT5hY3RpdmVfd3EsIGF0b21pY19yZWFkKCZzZXJ2ZXItPmFjdGl2ZSkgPT0gMCk7CisKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnNlcnZlci0+YWN0aXZlKSA9PSAxKQorCQlhdG9taWNfaW5jKCZzYi0+c19hY3RpdmUpOworfQorCit2b2lkIG5mc19zYl9kZWFjdGl2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0Ioc2IpOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNlcnZlci0+YWN0aXZlKSkKKwkJZGVhY3RpdmF0ZV9zdXBlcihzYik7CiB9CiAKIC8qCkBAIC02NjQsMjUgKzY3NSw2IEBACiB9CiAKIC8qCi0gKiBTZXQgdGhlIHBvcnQgbnVtYmVyIGluIGFuIGFkZHJlc3MuICBCZSBhZ25vc3RpYyBhYm91dCB0aGUgYWRkcmVzcyBmYW1pbHkuCi0gKi8KLXN0YXRpYyB2b2lkIG5mc19zZXRfcG9ydChzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgdW5zaWduZWQgc2hvcnQgcG9ydCkKLXsKLQlzd2l0Y2ggKHNhcC0+c2FfZmFtaWx5KSB7Ci0JY2FzZSBBRl9JTkVUOiB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqYXAgPSAoc3RydWN0IHNvY2thZGRyX2luICopc2FwOwotCQlhcC0+c2luX3BvcnQgPSBodG9ucyhwb3J0KTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgQUZfSU5FVDY6IHsKLQkJc3RydWN0IHNvY2thZGRyX2luNiAqYXAgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDsKLQkJYXAtPnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOwotCQlicmVhazsKLQl9Ci0JfQotfQotCi0vKgogICogU2FuaXR5LWNoZWNrIGEgc2VydmVyIGFkZHJlc3MgcHJvdmlkZWQgYnkgdGhlIG1vdW50IGNvbW1hbmQuCiAgKgogICogQWRkcmVzcyBmYW1pbHkgbXVzdCBiZSBpbml0aWFsaXplZCwgYW5kIGFkZHJlc3MgbXVzdCBub3QgYmUKQEAgLTcyNCwyMCArNzE2LDIyIEBACiAJKmFkZHJfbGVuID0gMDsKIH0KIAotI2RlZmluZSBJUFY2X1NDT1BFX0RFTElNSVRFUgknJScKLQogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotc3RhdGljIHZvaWQgbmZzX3BhcnNlX2lwdjZfc2NvcGVfaWQoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBzaXplX3Qgc3RyX2xlbiwKLQkJCQkgICAgY29uc3QgY2hhciAqZGVsaW0sCi0JCQkJICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYpCitzdGF0aWMgaW50IG5mc19wYXJzZV9pcHY2X3Njb3BlX2lkKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3Qgc2l6ZV90IHN0cl9sZW4sCisJCQkJICAgY29uc3QgY2hhciAqZGVsaW0sCisJCQkJICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNikKIHsKIAljaGFyICpwOwogCXNpemVfdCBsZW47CiAKLQlpZiAoIShpcHY2X2FkZHJfdHlwZSgmc2luNi0+c2luNl9hZGRyKSAmIElQVjZfQUREUl9MSU5LTE9DQUwpKQotCQlyZXR1cm4gOworCWlmICgoc3RyaW5nICsgc3RyX2xlbikgPT0gZGVsaW0pCisJCXJldHVybiAxOworCiAJaWYgKCpkZWxpbSAhPSBJUFY2X1NDT1BFX0RFTElNSVRFUikKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKKworCWlmICghKGlwdjZfYWRkcl90eXBlKCZzaW42LT5zaW42X2FkZHIpICYgSVBWNl9BRERSX0xJTktMT0NBTCkpCisJCXJldHVybiAwOwogCiAJbGVuID0gKHN0cmluZyArIHN0cl9sZW4pIC0gZGVsaW0gLSAxOwogCXAgPSBrc3RybmR1cChkZWxpbSArIDEsIGxlbiwgR0ZQX0tFUk5FTCk7CkBAIC03NTAsMTQgKzc0NCwyMCBAQAogCQkJc2NvcGVfaWQgPSBkZXYtPmlmaW5kZXg7CiAJCQlkZXZfcHV0KGRldik7CiAJCX0gZWxzZSB7Ci0JCQkvKiBzY29wZV9pZCBpcyBzZXQgdG8gemVybyBvbiBlcnJvciAqLwotCQkJc3RyaWN0X3N0cnRvdWwocCwgMTAsICZzY29wZV9pZCk7CisJCQlpZiAoc3RyaWN0X3N0cnRvdWwocCwgMTAsICZzY29wZV9pZCkgPT0gMCkgeworCQkJCWtmcmVlKHApOworCQkJCXJldHVybiAwOworCQkJfQogCQl9CiAKIAkJa2ZyZWUocCk7CisKIAkJc2luNi0+c2luNl9zY29wZV9pZCA9IHNjb3BlX2lkOwogCQlkZnByaW50ayhNT1VOVCwgIk5GUzogSVB2NiBzY29wZSBJRCA9ICVsdVxuIiwgc2NvcGVfaWQpOworCQlyZXR1cm4gMTsKIAl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgbmZzX3BhcnNlX2lwdjZfYWRkcmVzcyhjaGFyICpzdHJpbmcsIHNpemVfdCBzdHJfbGVuLApAQCAtNzczLDkgKzc3MywxMSBAQAogCiAJCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CiAJCSphZGRyX2xlbiA9IHNpemVvZigqc2luNik7Ci0JCWlmIChpbjZfcHRvbihzdHJpbmcsIHN0cl9sZW4sIGFkZHIsIElQVjZfU0NPUEVfREVMSU1JVEVSLCAmZGVsaW0pKSB7Ci0JCQluZnNfcGFyc2VfaXB2Nl9zY29wZV9pZChzdHJpbmcsIHN0cl9sZW4sIGRlbGltLCBzaW42KTsKLQkJCXJldHVybjsKKwkJaWYgKGluNl9wdG9uKHN0cmluZywgc3RyX2xlbiwgYWRkciwKKwkJCQkJSVBWNl9TQ09QRV9ERUxJTUlURVIsICZkZWxpbSkgIT0gMCkgeworCQkJaWYgKG5mc19wYXJzZV9pcHY2X3Njb3BlX2lkKHN0cmluZywgc3RyX2xlbiwKKwkJCQkJCQlkZWxpbSwgc2luNikgIT0gMCkKKwkJCQlyZXR1cm47CiAJCX0KIAl9CiAKQEAgLTc5OCw3ICs4MDAsNyBAQAogICogSWYgdGhlcmUgaXMgYSBwcm9ibGVtIGNvbnN0cnVjdGluZyB0aGUgbmV3IHNvY2thZGRyLCBzZXQgdGhlIGFkZHJlc3MKICAqIGZhbWlseSB0byBBRl9VTlNQRUMuCiAgKi8KLXN0YXRpYyB2b2lkIG5mc19wYXJzZV9pcF9hZGRyZXNzKGNoYXIgKnN0cmluZywgc2l6ZV90IHN0cl9sZW4sCit2b2lkIG5mc19wYXJzZV9pcF9hZGRyZXNzKGNoYXIgKnN0cmluZywgc2l6ZV90IHN0cl9sZW4sCiAJCQkJIHN0cnVjdCBzb2NrYWRkciAqc2FwLCBzaXplX3QgKmFkZHJfbGVuKQogewogCXVuc2lnbmVkIGludCBpLCBjb2xvbnM7CkBAIC0xMjU4LDYgKzEyNjAsMzAgQEAKIAkJCQkJICAgICAmbW50LT5tb3VudF9zZXJ2ZXIuYWRkcmxlbik7CiAJCQlrZnJlZShzdHJpbmcpOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2xvb2t1cGNhY2hlOgorCQkJc3RyaW5nID0gbWF0Y2hfc3RyZHVwKGFyZ3MpOworCQkJaWYgKHN0cmluZyA9PSBOVUxMKQorCQkJCWdvdG8gb3V0X25vbWVtOworCQkJdG9rZW4gPSBtYXRjaF90b2tlbihzdHJpbmcsCisJCQkJCW5mc19sb29rdXBjYWNoZV90b2tlbnMsIGFyZ3MpOworCQkJa2ZyZWUoc3RyaW5nKTsKKwkJCXN3aXRjaCAodG9rZW4pIHsKKwkJCQljYXNlIE9wdF9sb29rdXBjYWNoZV9hbGw6CisJCQkJCW1udC0+ZmxhZ3MgJj0gfihORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05PTkVHfE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgT3B0X2xvb2t1cGNhY2hlX3Bvc2l0aXZlOgorCQkJCQltbnQtPmZsYWdzICY9IH5ORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05PTkU7CisJCQkJCW1udC0+ZmxhZ3MgfD0gTkZTX01PVU5UX0xPT0tVUF9DQUNIRV9OT05FRzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBPcHRfbG9va3VwY2FjaGVfbm9uZToKKwkJCQkJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05PTkVHfE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZXJyb3JzKys7CisJCQkJCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiAgIGludmFsaWQgIgorCQkJCQkJCSJsb29rdXBjYWNoZSBhcmd1bWVudFxuIik7CisJCQl9OworCQkJYnJlYWs7CiAKIAkJLyoKIAkJICogU3BlY2lhbCBvcHRpb25zCkBAIC0xNTU4LDcgKzE1ODQsNyBAQAogCQkgKiBUcmFuc2xhdGUgdG8gbmZzX3BhcnNlZF9tb3VudF9kYXRhLCB3aGljaCBuZnNfZmlsbF9zdXBlcgogCQkgKiBjYW4gZGVhbCB3aXRoLgogCQkgKi8KLQkJYXJncy0+ZmxhZ3MJCT0gZGF0YS0+ZmxhZ3M7CisJCWFyZ3MtPmZsYWdzCQk9IGRhdGEtPmZsYWdzICYgTkZTX01PVU5UX0ZMQUdNQVNLOwogCQlhcmdzLT5yc2l6ZQkJPSBkYXRhLT5yc2l6ZTsKIAkJYXJncy0+d3NpemUJCT0gZGF0YS0+d3NpemU7CiAJCWFyZ3MtPnRpbWVvCQk9IGRhdGEtPnRpbWVvOwpAQCAtMjQzMyw3ICsyNDU5LDcgQEAKIAkJY29tcGFyZV9zdXBlciA9IE5VTEw7CiAKIAkvKiBHZXQgYSBzdXBlcmJsb2NrIC0gbm90ZSB0aGF0IHdlIG1heSBlbmQgdXAgc2hhcmluZyBvbmUgdGhhdCBhbHJlYWR5IGV4aXN0cyAqLwotCXMgPSBzZ2V0KCZuZnNfZnNfdHlwZSwgY29tcGFyZV9zdXBlciwgbmZzX3NldF9zdXBlciwgJnNiX21udGRhdGEpOworCXMgPSBzZ2V0KCZuZnM0X2ZzX3R5cGUsIGNvbXBhcmVfc3VwZXIsIG5mc19zZXRfc3VwZXIsICZzYl9tbnRkYXRhKTsKIAlpZiAoSVNfRVJSKHMpKSB7CiAJCWVycm9yID0gUFRSX0VSUihzKTsKIAkJZ290byBvdXRfZXJyX25vc2I7CkBAIC0yNTE4LDcgKzI1NDQsNyBAQAogCQljb21wYXJlX3N1cGVyID0gTlVMTDsKIAogCS8qIEdldCBhIHN1cGVyYmxvY2sgLSBub3RlIHRoYXQgd2UgbWF5IGVuZCB1cCBzaGFyaW5nIG9uZSB0aGF0IGFscmVhZHkgZXhpc3RzICovCi0JcyA9IHNnZXQoJm5mc19mc190eXBlLCBjb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1cGVyLCAmc2JfbW50ZGF0YSk7CisJcyA9IHNnZXQoJm5mczRfZnNfdHlwZSwgY29tcGFyZV9zdXBlciwgbmZzX3NldF9zdXBlciwgJnNiX21udGRhdGEpOwogCWlmIChJU19FUlIocykpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKHMpOwogCQlnb3RvIG91dF9lcnJfbm9zYjsKZGlmZiAtLWdpdCBhL2ZzL25mcy91bmxpbmsuYyBiL2ZzL25mcy91bmxpbmsuYwppbmRleCBmMDg5ZTU4Li5lY2MyOTUzIDEwMDY0NAotLS0gYS9mcy9uZnMvdW5saW5rLmMKKysrIGIvZnMvbmZzL3VubGluay5jCkBAIC05OSw3ICs5OSw3IEBACiAKIAluZnNfZGVjX3NpbGx5Y291bnQoZGF0YS0+ZGlyKTsKIAluZnNfZnJlZV91bmxpbmtkYXRhKGRhdGEpOwotCW5mc19zYl9kZWFjdGl2ZShORlNfU0Ioc2IpKTsKKwluZnNfc2JfZGVhY3RpdmUoc2IpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBuZnNfdW5saW5rX29wcyA9IHsKQEAgLTExOCw2ICsxMTgsNyBAQAogCQkucnBjX21lc3NhZ2UgPSAmbXNnLAogCQkuY2FsbGJhY2tfb3BzID0gJm5mc191bmxpbmtfb3BzLAogCQkuY2FsbGJhY2tfZGF0YSA9IGRhdGEsCisJCS53b3JrcXVldWUgPSBuZnNpb2Rfd29ya3F1ZXVlLAogCQkuZmxhZ3MgPSBSUENfVEFTS19BU1lOQywKIAl9OwogCXN0cnVjdCBycGNfdGFzayAqdGFzazsKQEAgLTE0OSw3ICsxNTAsNyBAQAogCQluZnNfZGVjX3NpbGx5Y291bnQoZGlyKTsKIAkJcmV0dXJuIDA7CiAJfQotCW5mc19zYl9hY3RpdmUoTkZTX1NFUlZFUihkaXIpKTsKKwluZnNfc2JfYWN0aXZlKGRpci0+aV9zYik7CiAJZGF0YS0+YXJncy5maCA9IE5GU19GSChkaXIpOwogCW5mc19mYXR0cl9pbml0KCZkYXRhLT5yZXMuZGlyX2F0dHIpOwogCmRpZmYgLS1naXQgYS9mcy9uZnMvd3JpdGUuYyBiL2ZzL25mcy93cml0ZS5jCmluZGV4IDMyMjllMjEuLjlmOTg0NTggMTAwNjQ0Ci0tLSBhL2ZzL25mcy93cml0ZS5jCisrKyBiL2ZzL25mcy93cml0ZS5jCkBAIC0xNDI3LDggKzE0MjcsOSBAQAogCQkuYmRpID0gbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbywKIAkJLnN5bmNfbW9kZSA9IFdCX1NZTkNfTk9ORSwKIAkJLm5yX3RvX3dyaXRlID0gTE9OR19NQVgsCisJCS5yYW5nZV9zdGFydCA9IDAsCisJCS5yYW5nZV9lbmQgPSBMTE9OR19NQVgsCiAJCS5mb3Jfd3JpdGVwYWdlcyA9IDEsCi0JCS5yYW5nZV9jeWNsaWMgPSAxLAogCX07CiAJaW50IHJldDsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9sb2NrZC5jIGIvZnMvbmZzZC9sb2NrZC5jCmluZGV4IDE1YzZmYWUuLmIyNzg2YTUgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbG9ja2QuYworKysgYi9mcy9uZnNkL2xvY2tkLmMKQEAgLTcwLDcgKzcwLDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgbmxtc3ZjX2JpbmRpbmcJbmZzZF9ubG1fb3BzID0gewogCS5mb3BlbgkJPSBubG1fZm9wZW4sCQkvKiBvcGVuIGZpbGUgZm9yIGxvY2tpbmcgKi8KIAkuZmNsb3NlCQk9IG5sbV9mY2xvc2UsCQkvKiBjbG9zZSBmaWxlICovCi0JLmdldF9ncmFjZV9wZXJpb2QgPSBnZXRfbmZzNF9ncmFjZV9wZXJpb2QsCiB9OwogCiB2b2lkCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczNwcm9jLmMgYi9mcy9uZnNkL25mczNwcm9jLmMKaW5kZXggNGQ2MTdlYS4uOWRiZDJlYiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnMzcHJvYy5jCisrKyBiL2ZzL25mc2QvbmZzM3Byb2MuYwpAQCAtNjMsNyArNjMsOCBAQAogCQlTVkNGSF9mbXQoJmFyZ3AtPmZoKSk7CiAKIAlmaF9jb3B5KCZyZXNwLT5maCwgJmFyZ3AtPmZoKTsKLQluZnNlcnIgPSBmaF92ZXJpZnkocnFzdHAsICZyZXNwLT5maCwgMCwgTkZTRF9NQVlfTk9QKTsKKwluZnNlcnIgPSBmaF92ZXJpZnkocnFzdHAsICZyZXNwLT5maCwgMCwKKwkJCU5GU0RfTUFZX05PUCB8IE5GU0RfTUFZX0JZUEFTU19HU1NfT05fUk9PVCk7CiAJaWYgKG5mc2VycikKIAkJUkVUVVJOX1NUQVRVUyhuZnNlcnIpOwogCkBAIC01MzAsNyArNTMxLDcgQEAKIAlkcHJpbnRrKCJuZnNkOiBGU1NUQVQoMykgICAlc1xuIiwKIAkJCQlTVkNGSF9mbXQoJmFyZ3AtPmZoKSk7CiAKLQluZnNlcnIgPSBuZnNkX3N0YXRmcyhycXN0cCwgJmFyZ3AtPmZoLCAmcmVzcC0+c3RhdHMpOworCW5mc2VyciA9IG5mc2Rfc3RhdGZzKHJxc3RwLCAmYXJncC0+ZmgsICZyZXNwLT5zdGF0cywgMCk7CiAJZmhfcHV0KCZhcmdwLT5maCk7CiAJUkVUVVJOX1NUQVRVUyhuZnNlcnIpOwogfQpAQCAtNTU4LDcgKzU1OSw4IEBACiAJcmVzcC0+Zl9tYXhmaWxlc2l6ZSA9IH4odTMyKSAwOwogCXJlc3AtPmZfcHJvcGVydGllcyA9IE5GUzNfRlNGX0RFRkFVTFQ7CiAKLQluZnNlcnIgPSBmaF92ZXJpZnkocnFzdHAsICZhcmdwLT5maCwgMCwgTkZTRF9NQVlfTk9QKTsKKwluZnNlcnIgPSBmaF92ZXJpZnkocnFzdHAsICZhcmdwLT5maCwgMCwKKwkJCU5GU0RfTUFZX05PUCB8IE5GU0RfTUFZX0JZUEFTU19HU1NfT05fUk9PVCk7CiAKIAkvKiBDaGVjayBzcGVjaWFsIGZlYXR1cmVzIG9mIHRoZSBmaWxlIHN5c3RlbS4gTWF5IHJlcXVlc3QKIAkgKiBkaWZmZXJlbnQgcmVhZC93cml0ZSBzaXplcyBmb3IgZmlsZSBzeXN0ZW1zIGtub3duIHRvIGhhdmUKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMgYi9mcy9uZnNkL25mczRjYWxsYmFjay5jCmluZGV4IDcwMmZhNTcuLjA5NDc0N2EgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKKysrIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwpAQCAtMjI1LDcgKzIyNSw4IEBACiAKIAlSRVNFUlZFX1NQQUNFKDEyK3NpemVvZihjYl9yZWMtPmNicl9zdGF0ZWlkKSArIGxlbik7CiAJV1JJVEUzMihPUF9DQl9SRUNBTEwpOwotCVdSSVRFTUVNKCZjYl9yZWMtPmNicl9zdGF0ZWlkLCBzaXplb2Yoc3RhdGVpZF90KSk7CisJV1JJVEUzMihjYl9yZWMtPmNicl9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOworCVdSSVRFTUVNKCZjYl9yZWMtPmNicl9zdGF0ZWlkLnNpX29wYXF1ZSwgc2l6ZW9mKHN0YXRlaWRfb3BhcXVlX3QpKTsKIAlXUklURTMyKGNiX3JlYy0+Y2JyX3RydW5jKTsKIAlXUklURTMyKGxlbik7CiAJV1JJVEVNRU0oY2JfcmVjLT5jYnJfZmh2YWwsIGxlbik7CkBAIC0zNzksNiArMzgwLDcgQEAKIAkJLmFkZHJzaXplCT0gc2l6ZW9mKGFkZHIpLAogCQkudGltZW91dAk9ICZ0aW1lcGFybXMsCiAJCS5wcm9ncmFtCT0gJmNiX3Byb2dyYW0sCisJCS5wcm9nbnVtYmVyCT0gY2ItPmNiX3Byb2csCiAJCS52ZXJzaW9uCT0gbmZzX2NiX3ZlcnNpb25bMV0tPm51bWJlciwKIAkJLmF1dGhmbGF2b3IJPSBSUENfQVVUSF9VTklYLCAvKiBYWFg6IG5lZWQgQVVUSF9HU1MuLi4gKi8KIAkJLmZsYWdzCQk9IChSUENfQ0xOVF9DUkVBVEVfTk9QSU5HIHwgUlBDX0NMTlRfQ1JFQVRFX1FVSUVUKSwKQEAgLTM5Niw5ICszOTgsNiBAQAogCWFkZHIuc2luX3BvcnQgPSBodG9ucyhjYi0+Y2JfcG9ydCk7CiAJYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChjYi0+Y2JfYWRkcik7CiAKLQkvKiBJbml0aWFsaXplIHJwY19zdGF0ICovCi0JbWVtc2V0KGFyZ3MucHJvZ3JhbS0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgcnBjX3N0YXQpKTsKLQogCS8qIENyZWF0ZSBSUEMgY2xpZW50ICovCiAJY2xpZW50ID0gcnBjX2NyZWF0ZSgmYXJncyk7CiAJaWYgKElTX0VSUihjbGllbnQpKSB7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRwcm9jLmMgYi9mcy9uZnNkL25mczRwcm9jLmMKaW5kZXggZTViNTFmZi4uNjY5NDYxZSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0cHJvYy5jCisrKyBiL2ZzL25mc2QvbmZzNHByb2MuYwpAQCAtMjAxLDEwICsyMDEsMTAgQEAKIAkvKiBPcGVub3duZXIgaXMgbm93IHNldCwgc28gc2VxdWVuY2UgaWQgd2lsbCBnZXQgYnVtcGVkLiAgTm93IHdlIG5lZWQKIAkgKiB0aGVzZSBjaGVja3MgYmVmb3JlIHdlIGRvIGFueSBjcmVhdGVzOiAqLwogCXN0YXR1cyA9IG5mc2Vycl9ncmFjZTsKLQlpZiAobmZzNF9pbl9ncmFjZSgpICYmIG9wZW4tPm9wX2NsYWltX3R5cGUgIT0gTkZTNF9PUEVOX0NMQUlNX1BSRVZJT1VTKQorCWlmIChsb2Nrc19pbl9ncmFjZSgpICYmIG9wZW4tPm9wX2NsYWltX3R5cGUgIT0gTkZTNF9PUEVOX0NMQUlNX1BSRVZJT1VTKQogCQlnb3RvIG91dDsKIAlzdGF0dXMgPSBuZnNlcnJfbm9fZ3JhY2U7Ci0JaWYgKCFuZnM0X2luX2dyYWNlKCkgJiYgb3Blbi0+b3BfY2xhaW1fdHlwZSA9PSBORlM0X09QRU5fQ0xBSU1fUFJFVklPVVMpCisJaWYgKCFsb2Nrc19pbl9ncmFjZSgpICYmIG9wZW4tPm9wX2NsYWltX3R5cGUgPT0gTkZTNF9PUEVOX0NMQUlNX1BSRVZJT1VTKQogCQlnb3RvIG91dDsKIAogCXN3aXRjaCAob3Blbi0+b3BfY2xhaW1fdHlwZSkgewpAQCAtNTc1LDcgKzU3NSw3IEBACiB7CiAJX19iZTMyIHN0YXR1czsKIAotCWlmIChuZnM0X2luX2dyYWNlKCkpCisJaWYgKGxvY2tzX2luX2dyYWNlKCkpCiAJCXJldHVybiBuZnNlcnJfZ3JhY2U7CiAJc3RhdHVzID0gbmZzZF91bmxpbmsocnFzdHAsICZjc3RhdGUtPmN1cnJlbnRfZmgsIDAsCiAJCQkgICAgIHJlbW92ZS0+cm1fbmFtZSwgcmVtb3ZlLT5ybV9uYW1lbGVuKTsKQEAgLTU5Niw3ICs1OTYsNyBAQAogCiAJaWYgKCFjc3RhdGUtPnNhdmVfZmguZmhfZGVudHJ5KQogCQlyZXR1cm4gc3RhdHVzOwotCWlmIChuZnM0X2luX2dyYWNlKCkgJiYgIShjc3RhdGUtPnNhdmVfZmguZmhfZXhwb3J0LT5leF9mbGFncworCWlmIChsb2Nrc19pbl9ncmFjZSgpICYmICEoY3N0YXRlLT5zYXZlX2ZoLmZoX2V4cG9ydC0+ZXhfZmxhZ3MKIAkJCQkJJiBORlNFWFBfTk9TVUJUUkVFQ0hFQ0spKQogCQlyZXR1cm4gbmZzZXJyX2dyYWNlOwogCXN0YXR1cyA9IG5mc2RfcmVuYW1lKHJxc3RwLCAmY3N0YXRlLT5zYXZlX2ZoLCByZW5hbWUtPnJuX3NuYW1lLApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0c3RhdGUuYyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKaW5kZXggMTU3OGQ3YS4uMGNjN2ZmNSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0c3RhdGUuYworKysgYi9mcy9uZnNkL25mczRzdGF0ZS5jCkBAIC02MSw3ICs2MSw2IEBACiBzdGF0aWMgdGltZV90IGxlYXNlX3RpbWUgPSA5MDsgICAgIC8qIGRlZmF1bHQgbGVhc2UgdGltZSAqLwogc3RhdGljIHRpbWVfdCB1c2VyX2xlYXNlX3RpbWUgPSA5MDsKIHN0YXRpYyB0aW1lX3QgYm9vdF90aW1lOwotc3RhdGljIGludCBpbl9ncmFjZSA9IDE7CiBzdGF0aWMgdTMyIGN1cnJlbnRfb3duZXJpZCA9IDE7CiBzdGF0aWMgdTMyIGN1cnJlbnRfZmlsZWlkID0gMTsKIHN0YXRpYyB1MzIgY3VycmVudF9kZWxlZ2lkID0gMTsKQEAgLTE2NDAsNyArMTYzOSw3IEBACiAJCWNhc2UgTkZTNF9PUEVOX0NMQUlNX05VTEw6CiAJCQkvKiBMZXQncyBub3QgZ2l2ZSBvdXQgYW55IGRlbGVnYXRpb25zIHRpbGwgZXZlcnlvbmUncwogCQkJICogaGFkIHRoZSBjaGFuY2UgdG8gcmVjbGFpbSB0aGVpcnMuLi4uICovCi0JCQlpZiAobmZzNF9pbl9ncmFjZSgpKQorCQkJaWYgKGxvY2tzX2luX2dyYWNlKCkpCiAJCQkJZ290byBvdXQ7CiAJCQlpZiAoIWF0b21pY19yZWFkKCZjYi0+Y2Jfc2V0KSB8fCAhc29wLT5zb19jb25maXJtZWQpCiAJCQkJZ290byBvdXQ7CkBAIC0xODE2LDEyICsxODE1LDE1IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RydWN0IGxvY2tfbWFuYWdlciBuZnNkNF9tYW5hZ2VyID0geworfTsKKwogc3RhdGljIHZvaWQKLWVuZF9ncmFjZSh2b2lkKQorbmZzZDRfZW5kX2dyYWNlKHZvaWQpCiB7CiAJZHByaW50aygiTkZTRDogZW5kIG9mIGdyYWNlIHBlcmlvZFxuIik7CiAJbmZzZDRfcmVjZGlyX3B1cmdlX29sZCgpOwotCWluX2dyYWNlID0gMDsKKwlsb2Nrc19lbmRfZ3JhY2UoJm5mc2Q0X21hbmFnZXIpOwogfQogCiBzdGF0aWMgdGltZV90CkBAIC0xODM4LDggKzE4NDAsOCBAQAogCW5mczRfbG9ja19zdGF0ZSgpOwogCiAJZHByaW50aygiTkZTRDogbGF1bmRyb21hdCBzZXJ2aWNlIC0gc3RhcnRpbmdcbiIpOwotCWlmIChpbl9ncmFjZSkKLQkJZW5kX2dyYWNlKCk7CisJaWYgKGxvY2tzX2luX2dyYWNlKCkpCisJCW5mc2Q0X2VuZF9ncmFjZSgpOwogCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsICZjbGllbnRfbHJ1KSB7CiAJCWNscCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgbmZzNF9jbGllbnQsIGNsX2xydSk7CiAJCWlmICh0aW1lX2FmdGVyKCh1bnNpZ25lZCBsb25nKWNscC0+Y2xfdGltZSwgKHVuc2lnbmVkIGxvbmcpY3V0b2ZmKSkgewpAQCAtMTk3NCw3ICsxOTc2LDcgQEAKIAkJcmV0dXJuIG5mc2Vycl9iYWRfc3RhdGVpZDsKIAllbHNlIGlmIChPTkVfU1RBVEVJRChzdGF0ZWlkKSAmJiAoZmxhZ3MgJiBSRF9TVEFURSkpCiAJCXJldHVybiBuZnNfb2s7Ci0JZWxzZSBpZiAobmZzNF9pbl9ncmFjZSgpKSB7CisJZWxzZSBpZiAobG9ja3NfaW5fZ3JhY2UoKSkgewogCQkvKiBBbnN3ZXIgaW4gcmVtYWluaW5nIGNhc2VzIGRlcGVuZHMgb24gZXhpc3RhbmNlIG9mCiAJCSAqIGNvbmZsaWN0aW5nIHN0YXRlOyBzbyB3ZSBtdXN0IHdhaXQgb3V0IHRoZSBncmFjZSBwZXJpb2QuICovCiAJCXJldHVybiBuZnNlcnJfZ3JhY2U7CkBAIC0xOTkzLDcgKzE5OTUsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIGlvX2R1cmluZ19ncmFjZV9kaXNhbGxvd2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBmbGFncykKIHsKLQlyZXR1cm4gbmZzNF9pbl9ncmFjZSgpICYmIChmbGFncyAmIChSRF9TVEFURSB8IFdSX1NUQVRFKSkKKwlyZXR1cm4gbG9ja3NfaW5fZ3JhY2UoKSAmJiAoZmxhZ3MgJiAoUkRfU1RBVEUgfCBXUl9TVEFURSkpCiAJCSYmIG1hbmRhdG9yeV9sb2NrKGlub2RlKTsKIH0KIApAQCAtMjY5MywxMCArMjY5NSwxMCBAQAogCWZpbHAgPSBsb2NrX3N0cC0+c3RfdmZzX2ZpbGU7CiAKIAlzdGF0dXMgPSBuZnNlcnJfZ3JhY2U7Ci0JaWYgKG5mczRfaW5fZ3JhY2UoKSAmJiAhbG9jay0+bGtfcmVjbGFpbSkKKwlpZiAobG9ja3NfaW5fZ3JhY2UoKSAmJiAhbG9jay0+bGtfcmVjbGFpbSkKIAkJZ290byBvdXQ7CiAJc3RhdHVzID0gbmZzZXJyX25vX2dyYWNlOwotCWlmICghbmZzNF9pbl9ncmFjZSgpICYmIGxvY2stPmxrX3JlY2xhaW0pCisJaWYgKCFsb2Nrc19pbl9ncmFjZSgpICYmIGxvY2stPmxrX3JlY2xhaW0pCiAJCWdvdG8gb3V0OwogCiAJbG9ja3NfaW5pdF9sb2NrKCZmaWxlX2xvY2spOwpAQCAtMjc3OSw3ICsyNzgxLDcgQEAKIAlpbnQgZXJyb3I7CiAJX19iZTMyIHN0YXR1czsKIAotCWlmIChuZnM0X2luX2dyYWNlKCkpCisJaWYgKGxvY2tzX2luX2dyYWNlKCkpCiAJCXJldHVybiBuZnNlcnJfZ3JhY2U7CiAKIAlpZiAoY2hlY2tfbG9ja19sZW5ndGgobG9ja3QtPmx0X29mZnNldCwgbG9ja3QtPmx0X2xlbmd0aCkpCkBAIC0zMTkyLDkgKzMxOTQsOSBAQAogCXVuc2lnbmVkIGxvbmcgZ3JhY2VfdGltZTsKIAogCWJvb3RfdGltZSA9IGdldF9zZWNvbmRzKCk7Ci0JZ3JhY2VfdGltZSA9IGdldF9uZnNfZ3JhY2VfcGVyaW9kKCk7CisJZ3JhY2VfdGltZSA9IGdldF9uZnM0X2dyYWNlX3BlcmlvZCgpOwogCWxlYXNlX3RpbWUgPSB1c2VyX2xlYXNlX3RpbWU7Ci0JaW5fZ3JhY2UgPSAxOworCWxvY2tzX3N0YXJ0X2dyYWNlKCZuZnNkNF9tYW5hZ2VyKTsKIAlwcmludGsoS0VSTl9JTkZPICJORlNEOiBzdGFydGluZyAlbGQtc2Vjb25kIGdyYWNlIHBlcmlvZFxuIiwKIAkgICAgICAgZ3JhY2VfdGltZS9IWik7CiAJbGF1bmRyeV93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJuZnNkNCIpOwpAQCAtMzIxMywxMiArMzIxNSw2IEBACiAJcmV0dXJuOwogfQogCi1pbnQKLW5mczRfaW5fZ3JhY2Uodm9pZCkKLXsKLQlyZXR1cm4gaW5fZ3JhY2U7Ci19Ci0KIHRpbWVfdAogbmZzNF9sZWFzZV90aW1lKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IDE0YmE0ZDkuLmFmY2RmNGIgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHhkci5jCisrKyBiL2ZzL25mc2QvbmZzNHhkci5jCkBAIC00MTMsNiArNDEzLDE4IEBACiB9CiAKIHN0YXRpYyBfX2JlMzIKK25mc2Q0X2RlY29kZV9zdGF0ZWlkKHN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKmFyZ3AsIHN0YXRlaWRfdCAqc2lkKQoreworCURFQ09ERV9IRUFEOworCisJUkVBRF9CVUYoc2l6ZW9mKHN0YXRlaWRfdCkpOworCVJFQUQzMihzaWQtPnNpX2dlbmVyYXRpb24pOworCUNPUFlNRU0oJnNpZC0+c2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOworCisJREVDT0RFX1RBSUw7Cit9CisKK3N0YXRpYyBfX2JlMzIKIG5mc2Q0X2RlY29kZV9hY2Nlc3Moc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncyAqYXJncCwgc3RydWN0IG5mc2Q0X2FjY2VzcyAqYWNjZXNzKQogewogCURFQ09ERV9IRUFEOwpAQCAtNDI5LDEwICs0NDEsOSBAQAogCURFQ09ERV9IRUFEOwogCiAJY2xvc2UtPmNsX3N0YXRlb3duZXIgPSBOVUxMOwotCVJFQURfQlVGKDQgKyBzaXplb2Yoc3RhdGVpZF90KSk7CisJUkVBRF9CVUYoNCk7CiAJUkVBRDMyKGNsb3NlLT5jbF9zZXFpZCk7Ci0JUkVBRDMyKGNsb3NlLT5jbF9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCUNPUFlNRU0oJmNsb3NlLT5jbF9zdGF0ZWlkLnNpX29wYXF1ZSwgc2l6ZW9mKHN0YXRlaWRfb3BhcXVlX3QpKTsKKwlyZXR1cm4gbmZzZDRfZGVjb2RlX3N0YXRlaWQoYXJncCwgJmNsb3NlLT5jbF9zdGF0ZWlkKTsKIAogCURFQ09ERV9UQUlMOwogfQpAQCAtNDkzLDEzICs1MDQsNyBAQAogc3RhdGljIGlubGluZSBfX2JlMzIKIG5mc2Q0X2RlY29kZV9kZWxlZ3JldHVybihzdHJ1Y3QgbmZzZDRfY29tcG91bmRhcmdzICphcmdwLCBzdHJ1Y3QgbmZzZDRfZGVsZWdyZXR1cm4gKmRyKQogewotCURFQ09ERV9IRUFEOwotCi0JUkVBRF9CVUYoc2l6ZW9mKHN0YXRlaWRfdCkpOwotCVJFQUQzMihkci0+ZHJfc3RhdGVpZC5zaV9nZW5lcmF0aW9uKTsKLQlDT1BZTUVNKCZkci0+ZHJfc3RhdGVpZC5zaV9vcGFxdWUsIHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSk7Ci0KLQlERUNPREVfVEFJTDsKKwlyZXR1cm4gbmZzZDRfZGVjb2RlX3N0YXRlaWQoYXJncCwgJmRyLT5kcl9zdGF0ZWlkKTsKIH0KIAogc3RhdGljIGlubGluZSBfX2JlMzIKQEAgLTU0MiwyMCArNTQ3LDIyIEBACiAJUkVBRDMyKGxvY2stPmxrX2lzX25ldyk7CiAKIAlpZiAobG9jay0+bGtfaXNfbmV3KSB7Ci0JCVJFQURfQlVGKDM2KTsKKwkJUkVBRF9CVUYoNCk7CiAJCVJFQUQzMihsb2NrLT5sa19uZXdfb3Blbl9zZXFpZCk7Ci0JCVJFQUQzMihsb2NrLT5sa19uZXdfb3Blbl9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCi0JCUNPUFlNRU0oJmxvY2stPmxrX25ld19vcGVuX3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOworCQlzdGF0dXMgPSBuZnNkNF9kZWNvZGVfc3RhdGVpZChhcmdwLCAmbG9jay0+bGtfbmV3X29wZW5fc3RhdGVpZCk7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gc3RhdHVzOworCQlSRUFEX0JVRig4ICsgc2l6ZW9mKGNsaWVudGlkX3QpKTsKIAkJUkVBRDMyKGxvY2stPmxrX25ld19sb2NrX3NlcWlkKTsKIAkJQ09QWU1FTSgmbG9jay0+bGtfbmV3X2NsaWVudGlkLCBzaXplb2YoY2xpZW50aWRfdCkpOwogCQlSRUFEMzIobG9jay0+bGtfbmV3X293bmVyLmxlbik7CiAJCVJFQURfQlVGKGxvY2stPmxrX25ld19vd25lci5sZW4pOwogCQlSRUFETUVNKGxvY2stPmxrX25ld19vd25lci5kYXRhLCBsb2NrLT5sa19uZXdfb3duZXIubGVuKTsKIAl9IGVsc2UgewotCQlSRUFEX0JVRigyMCk7Ci0JCVJFQUQzMihsb2NrLT5sa19vbGRfbG9ja19zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCQlDT1BZTUVNKCZsb2NrLT5sa19vbGRfbG9ja19zdGF0ZWlkLnNpX29wYXF1ZSwgc2l6ZW9mKHN0YXRlaWRfb3BhcXVlX3QpKTsKKwkJc3RhdHVzID0gbmZzZDRfZGVjb2RlX3N0YXRlaWQoYXJncCwgJmxvY2stPmxrX29sZF9sb2NrX3N0YXRlaWQpOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJUkVBRF9CVUYoNCk7CiAJCVJFQUQzMihsb2NrLT5sa19vbGRfbG9ja19zZXFpZCk7CiAJfQogCkBAIC01ODcsMTMgKzU5NCwxNSBAQAogCURFQ09ERV9IRUFEOwogCiAJbG9ja3UtPmx1X3N0YXRlb3duZXIgPSBOVUxMOwotCVJFQURfQlVGKDI0ICsgc2l6ZW9mKHN0YXRlaWRfdCkpOworCVJFQURfQlVGKDgpOwogCVJFQUQzMihsb2NrdS0+bHVfdHlwZSk7CiAJaWYgKChsb2NrdS0+bHVfdHlwZSA8IE5GUzRfUkVBRF9MVCkgfHwgKGxvY2t1LT5sdV90eXBlID4gTkZTNF9XUklURVdfTFQpKQogCQlnb3RvIHhkcl9lcnJvcjsKIAlSRUFEMzIobG9ja3UtPmx1X3NlcWlkKTsKLQlSRUFEMzIobG9ja3UtPmx1X3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7Ci0JQ09QWU1FTSgmbG9ja3UtPmx1X3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOworCXN0YXR1cyA9IG5mc2Q0X2RlY29kZV9zdGF0ZWlkKGFyZ3AsICZsb2NrdS0+bHVfc3RhdGVpZCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlSRUFEX0JVRigxNik7CiAJUkVBRDY0KGxvY2t1LT5sdV9vZmZzZXQpOwogCVJFQUQ2NChsb2NrdS0+bHVfbGVuZ3RoKTsKIApAQCAtNjc4LDggKzY4NywxMCBAQAogCQlSRUFEMzIob3Blbi0+b3BfZGVsZWdhdGVfdHlwZSk7CiAJCWJyZWFrOwogCWNhc2UgTkZTNF9PUEVOX0NMQUlNX0RFTEVHQVRFX0NVUjoKLQkJUkVBRF9CVUYoc2l6ZW9mKHN0YXRlaWRfdCkgKyA0KTsKLQkJQ09QWU1FTSgmb3Blbi0+b3BfZGVsZWdhdGVfc3RhdGVpZCwgc2l6ZW9mKHN0YXRlaWRfdCkpOworCQlzdGF0dXMgPSBuZnNkNF9kZWNvZGVfc3RhdGVpZChhcmdwLCAmb3Blbi0+b3BfZGVsZWdhdGVfc3RhdGVpZCk7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gc3RhdHVzOworCQlSRUFEX0JVRig0KTsKIAkJUkVBRDMyKG9wZW4tPm9wX2ZuYW1lLmxlbik7CiAJCVJFQURfQlVGKG9wZW4tPm9wX2ZuYW1lLmxlbik7CiAJCVNBVkVNRU0ob3Blbi0+b3BfZm5hbWUuZGF0YSwgb3Blbi0+b3BfZm5hbWUubGVuKTsKQEAgLTY5OSw5ICs3MTAsMTAgQEAKIAlERUNPREVfSEVBRDsKIAkJICAgIAogCW9wZW5fY29uZi0+b2Nfc3RhdGVvd25lciA9IE5VTEw7Ci0JUkVBRF9CVUYoNCArIHNpemVvZihzdGF0ZWlkX3QpKTsKLQlSRUFEMzIob3Blbl9jb25mLT5vY19yZXFfc3RhdGVpZC5zaV9nZW5lcmF0aW9uKTsKLQlDT1BZTUVNKCZvcGVuX2NvbmYtPm9jX3JlcV9zdGF0ZWlkLnNpX29wYXF1ZSwgc2l6ZW9mKHN0YXRlaWRfb3BhcXVlX3QpKTsKKwlzdGF0dXMgPSBuZnNkNF9kZWNvZGVfc3RhdGVpZChhcmdwLCAmb3Blbl9jb25mLT5vY19yZXFfc3RhdGVpZCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlSRUFEX0JVRig0KTsKIAlSRUFEMzIob3Blbl9jb25mLT5vY19zZXFpZCk7CiAJCQkJCQkgICAgICAgIAogCURFQ09ERV9UQUlMOwpAQCAtNzEzLDkgKzcyNSwxMCBAQAogCURFQ09ERV9IRUFEOwogCQkgICAgCiAJb3Blbl9kb3duLT5vZF9zdGF0ZW93bmVyID0gTlVMTDsKLQlSRUFEX0JVRigxMiArIHNpemVvZihzdGF0ZWlkX3QpKTsKLQlSRUFEMzIob3Blbl9kb3duLT5vZF9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCUNPUFlNRU0oJm9wZW5fZG93bi0+b2Rfc3RhdGVpZC5zaV9vcGFxdWUsIHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSk7CisJc3RhdHVzID0gbmZzZDRfZGVjb2RlX3N0YXRlaWQoYXJncCwgJm9wZW5fZG93bi0+b2Rfc3RhdGVpZCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlSRUFEX0JVRigxMik7CiAJUkVBRDMyKG9wZW5fZG93bi0+b2Rfc2VxaWQpOwogCVJFQUQzMihvcGVuX2Rvd24tPm9kX3NoYXJlX2FjY2Vzcyk7CiAJUkVBRDMyKG9wZW5fZG93bi0+b2Rfc2hhcmVfZGVueSk7CkBAIC03NDMsOSArNzU2LDEwIEBACiB7CiAJREVDT0RFX0hFQUQ7CiAKLQlSRUFEX0JVRihzaXplb2Yoc3RhdGVpZF90KSArIDEyKTsKLQlSRUFEMzIocmVhZC0+cmRfc3RhdGVpZC5zaV9nZW5lcmF0aW9uKTsKLQlDT1BZTUVNKCZyZWFkLT5yZF9zdGF0ZWlkLnNpX29wYXF1ZSwgc2l6ZW9mKHN0YXRlaWRfb3BhcXVlX3QpKTsKKwlzdGF0dXMgPSBuZnNkNF9kZWNvZGVfc3RhdGVpZChhcmdwLCAmcmVhZC0+cmRfc3RhdGVpZCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlSRUFEX0JVRigxMik7CiAJUkVBRDY0KHJlYWQtPnJkX29mZnNldCk7CiAJUkVBRDMyKHJlYWQtPnJkX2xlbmd0aCk7CiAKQEAgLTgzNCwxNSArODQ4LDEzIEBACiBzdGF0aWMgX19iZTMyCiBuZnNkNF9kZWNvZGVfc2V0YXR0cihzdHJ1Y3QgbmZzZDRfY29tcG91bmRhcmdzICphcmdwLCBzdHJ1Y3QgbmZzZDRfc2V0YXR0ciAqc2V0YXR0cikKIHsKLQlERUNPREVfSEVBRDsKKwlfX2JlMzIgc3RhdHVzOwogCi0JUkVBRF9CVUYoc2l6ZW9mKHN0YXRlaWRfdCkpOwotCVJFQUQzMihzZXRhdHRyLT5zYV9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCUNPUFlNRU0oJnNldGF0dHItPnNhX3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOwotCWlmICgoc3RhdHVzID0gbmZzZDRfZGVjb2RlX2ZhdHRyKGFyZ3AsIHNldGF0dHItPnNhX2JtdmFsLCAmc2V0YXR0ci0+c2FfaWF0dHIsICZzZXRhdHRyLT5zYV9hY2wpKSkKLQkJZ290byBvdXQ7Ci0KLQlERUNPREVfVEFJTDsKKwlzdGF0dXMgPSBuZnNkNF9kZWNvZGVfc3RhdGVpZChhcmdwLCAmc2V0YXR0ci0+c2Ffc3RhdGVpZCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gbmZzZDRfZGVjb2RlX2ZhdHRyKGFyZ3AsIHNldGF0dHItPnNhX2JtdmFsLAorCQkJCSAgJnNldGF0dHItPnNhX2lhdHRyLCAmc2V0YXR0ci0+c2FfYWNsKTsKIH0KIAogc3RhdGljIF9fYmUzMgpAQCAtOTI3LDkgKzkzOSwxMCBAQAogCWludCBsZW47CiAJREVDT0RFX0hFQUQ7CiAKLQlSRUFEX0JVRihzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkgKyAyMCk7Ci0JUkVBRDMyKHdyaXRlLT53cl9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCUNPUFlNRU0oJndyaXRlLT53cl9zdGF0ZWlkLnNpX29wYXF1ZSwgc2l6ZW9mKHN0YXRlaWRfb3BhcXVlX3QpKTsKKwlzdGF0dXMgPSBuZnNkNF9kZWNvZGVfc3RhdGVpZChhcmdwLCAmd3JpdGUtPndyX3N0YXRlaWQpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJUkVBRF9CVUYoMTYpOwogCVJFQUQ2NCh3cml0ZS0+d3Jfb2Zmc2V0KTsKIAlSRUFEMzIod3JpdGUtPndyX3N0YWJsZV9ob3cpOwogCWlmICh3cml0ZS0+d3Jfc3RhYmxlX2hvdyA+IDIpCkBAIC0xMTgzLDcgKzExOTYsNiBAQAogICogSGVhZGVyIHJvdXRpbmUgdG8gc2V0dXAgc2VxaWQgb3BlcmF0aW9uIHJlcGxheSBjYWNoZQogICovCiAjZGVmaW5lIEVOQ09ERV9TRVFJRF9PUF9IRUFECQkJCQlcCi0JX19iZTMyICpwOwkJCQkJCVwKIAlfX2JlMzIgKnNhdmU7CQkJCQkJXAogCQkJCQkJCQlcCiAJc2F2ZSA9IHJlc3AtPnA7CkBAIC0xOTUwLDYgKzE5NjIsMTcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIHZvaWQKK25mc2Q0X2VuY29kZV9zdGF0ZWlkKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCwgc3RhdGVpZF90ICpzaWQpCit7CisJRU5DT0RFX0hFQUQ7CisKKwlSRVNFUlZFX1NQQUNFKHNpemVvZihzdGF0ZWlkX3QpKTsKKwlXUklURTMyKHNpZC0+c2lfZ2VuZXJhdGlvbik7CisJV1JJVEVNRU0oJnNpZC0+c2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOworCUFESlVTVF9BUkdTKCk7Cit9CisKIHN0YXRpYyBfX2JlMzIKIG5mc2Q0X2VuY29kZV9hY2Nlc3Moc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLCBfX2JlMzIgbmZzZXJyLCBzdHJ1Y3QgbmZzZDRfYWNjZXNzICphY2Nlc3MpCiB7CkBAIC0xOTY5LDEyICsxOTkyLDkgQEAKIHsKIAlFTkNPREVfU0VRSURfT1BfSEVBRDsKIAotCWlmICghbmZzZXJyKSB7Ci0JCVJFU0VSVkVfU1BBQ0Uoc2l6ZW9mKHN0YXRlaWRfdCkpOwotCQlXUklURTMyKGNsb3NlLT5jbF9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCQlXUklURU1FTSgmY2xvc2UtPmNsX3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOwotCQlBREpVU1RfQVJHUygpOwotCX0KKwlpZiAoIW5mc2VycikKKwkJbmZzZDRfZW5jb2RlX3N0YXRlaWQocmVzcCwgJmNsb3NlLT5jbF9zdGF0ZWlkKTsKKwogCUVOQ09ERV9TRVFJRF9PUF9UQUlMKGNsb3NlLT5jbF9zdGF0ZW93bmVyKTsKIAlyZXR1cm4gbmZzZXJyOwogfQpAQCAtMjA3NCwxMiArMjA5NCw5IEBACiB7CiAJRU5DT0RFX1NFUUlEX09QX0hFQUQ7CiAKLQlpZiAoIW5mc2VycikgewotCQlSRVNFUlZFX1NQQUNFKDQgKyBzaXplb2Yoc3RhdGVpZF90KSk7Ci0JCVdSSVRFMzIobG9jay0+bGtfcmVzcF9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCQlXUklURU1FTSgmbG9jay0+bGtfcmVzcF9zdGF0ZWlkLnNpX29wYXF1ZSwgc2l6ZW9mKHN0YXRlaWRfb3BhcXVlX3QpKTsKLQkJQURKVVNUX0FSR1MoKTsKLQl9IGVsc2UgaWYgKG5mc2VyciA9PSBuZnNlcnJfZGVuaWVkKQorCWlmICghbmZzZXJyKQorCQluZnNkNF9lbmNvZGVfc3RhdGVpZChyZXNwLCAmbG9jay0+bGtfcmVzcF9zdGF0ZWlkKTsKKwllbHNlIGlmIChuZnNlcnIgPT0gbmZzZXJyX2RlbmllZCkKIAkJbmZzZDRfZW5jb2RlX2xvY2tfZGVuaWVkKHJlc3AsICZsb2NrLT5sa19kZW5pZWQpOwogCiAJRU5DT0RFX1NFUUlEX09QX1RBSUwobG9jay0+bGtfcmVwbGF5X293bmVyKTsKQEAgLTIwOTksMTMgKzIxMTYsOSBAQAogewogCUVOQ09ERV9TRVFJRF9PUF9IRUFEOwogCi0JaWYgKCFuZnNlcnIpIHsKLQkJUkVTRVJWRV9TUEFDRShzaXplb2Yoc3RhdGVpZF90KSk7Ci0JCVdSSVRFMzIobG9ja3UtPmx1X3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7Ci0JCVdSSVRFTUVNKCZsb2NrdS0+bHVfc3RhdGVpZC5zaV9vcGFxdWUsIHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSk7Ci0JCUFESlVTVF9BUkdTKCk7Ci0JfQotCQkJCSAgICAgICAgCisJaWYgKCFuZnNlcnIpCisJCW5mc2Q0X2VuY29kZV9zdGF0ZWlkKHJlc3AsICZsb2NrdS0+bHVfc3RhdGVpZCk7CisKIAlFTkNPREVfU0VRSURfT1BfVEFJTChsb2NrdS0+bHVfc3RhdGVvd25lcik7CiAJcmV0dXJuIG5mc2VycjsKIH0KQEAgLTIxMjgsMTQgKzIxNDEsMTQgQEAKIHN0YXRpYyBfX2JlMzIKIG5mc2Q0X2VuY29kZV9vcGVuKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCwgX19iZTMyIG5mc2Vyciwgc3RydWN0IG5mc2Q0X29wZW4gKm9wZW4pCiB7CisJRU5DT0RFX0hFQUQ7CiAJRU5DT0RFX1NFUUlEX09QX0hFQUQ7CiAKIAlpZiAobmZzZXJyKQogCQlnb3RvIG91dDsKIAotCVJFU0VSVkVfU1BBQ0UoMzYgKyBzaXplb2Yoc3RhdGVpZF90KSk7Ci0JV1JJVEUzMihvcGVuLT5vcF9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCVdSSVRFTUVNKCZvcGVuLT5vcF9zdGF0ZWlkLnNpX29wYXF1ZSwgc2l6ZW9mKHN0YXRlaWRfb3BhcXVlX3QpKTsKKwluZnNkNF9lbmNvZGVfc3RhdGVpZChyZXNwLCAmb3Blbi0+b3Bfc3RhdGVpZCk7CisJUkVTRVJWRV9TUEFDRSg0MCk7CiAJV1JJVEVDSU5GTyhvcGVuLT5vcF9jaW5mbyk7CiAJV1JJVEUzMihvcGVuLT5vcF9yZmxhZ3MpOwogCVdSSVRFMzIoMik7CkBAIC0yMTQ4LDggKzIxNjEsOCBAQAogCWNhc2UgTkZTNF9PUEVOX0RFTEVHQVRFX05PTkU6CiAJCWJyZWFrOwogCWNhc2UgTkZTNF9PUEVOX0RFTEVHQVRFX1JFQUQ6Ci0JCVJFU0VSVkVfU1BBQ0UoMjAgKyBzaXplb2Yoc3RhdGVpZF90KSk7Ci0JCVdSSVRFTUVNKCZvcGVuLT5vcF9kZWxlZ2F0ZV9zdGF0ZWlkLCBzaXplb2Yoc3RhdGVpZF90KSk7CisJCW5mc2Q0X2VuY29kZV9zdGF0ZWlkKHJlc3AsICZvcGVuLT5vcF9kZWxlZ2F0ZV9zdGF0ZWlkKTsKKwkJUkVTRVJWRV9TUEFDRSgyMCk7CiAJCVdSSVRFMzIob3Blbi0+b3BfcmVjYWxsKTsKIAogCQkvKgpAQCAtMjE2Miw4ICsyMTc1LDggQEAKIAkJQURKVVNUX0FSR1MoKTsKIAkJYnJlYWs7CiAJY2FzZSBORlM0X09QRU5fREVMRUdBVEVfV1JJVEU6Ci0JCVJFU0VSVkVfU1BBQ0UoMzIgKyBzaXplb2Yoc3RhdGVpZF90KSk7Ci0JCVdSSVRFTUVNKCZvcGVuLT5vcF9kZWxlZ2F0ZV9zdGF0ZWlkLCBzaXplb2Yoc3RhdGVpZF90KSk7CisJCW5mc2Q0X2VuY29kZV9zdGF0ZWlkKHJlc3AsICZvcGVuLT5vcF9kZWxlZ2F0ZV9zdGF0ZWlkKTsKKwkJUkVTRVJWRV9TUEFDRSgzMik7CiAJCVdSSVRFMzIoMCk7CiAKIAkJLyoKQEAgLTIxOTUsMTMgKzIyMDgsOSBAQAogbmZzZDRfZW5jb2RlX29wZW5fY29uZmlybShzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AsIF9fYmUzMiBuZnNlcnIsIHN0cnVjdCBuZnNkNF9vcGVuX2NvbmZpcm0gKm9jKQogewogCUVOQ09ERV9TRVFJRF9PUF9IRUFEOwotCQkJCSAgICAgICAgCi0JaWYgKCFuZnNlcnIpIHsKLQkJUkVTRVJWRV9TUEFDRShzaXplb2Yoc3RhdGVpZF90KSk7Ci0JCVdSSVRFMzIob2MtPm9jX3Jlc3Bfc3RhdGVpZC5zaV9nZW5lcmF0aW9uKTsKLQkJV1JJVEVNRU0oJm9jLT5vY19yZXNwX3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOwotCQlBREpVU1RfQVJHUygpOwotCX0KKworCWlmICghbmZzZXJyKQorCQluZnNkNF9lbmNvZGVfc3RhdGVpZChyZXNwLCAmb2MtPm9jX3Jlc3Bfc3RhdGVpZCk7CiAKIAlFTkNPREVfU0VRSURfT1BfVEFJTChvYy0+b2Nfc3RhdGVvd25lcik7CiAJcmV0dXJuIG5mc2VycjsKQEAgLTIyMTEsMTMgKzIyMjAsOSBAQAogbmZzZDRfZW5jb2RlX29wZW5fZG93bmdyYWRlKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCwgX19iZTMyIG5mc2Vyciwgc3RydWN0IG5mc2Q0X29wZW5fZG93bmdyYWRlICpvZCkKIHsKIAlFTkNPREVfU0VRSURfT1BfSEVBRDsKLQkJCQkgICAgICAgIAotCWlmICghbmZzZXJyKSB7Ci0JCVJFU0VSVkVfU1BBQ0Uoc2l6ZW9mKHN0YXRlaWRfdCkpOwotCQlXUklURTMyKG9kLT5vZF9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCQlXUklURU1FTSgmb2QtPm9kX3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOwotCQlBREpVU1RfQVJHUygpOwotCX0KKworCWlmICghbmZzZXJyKQorCQluZnNkNF9lbmNvZGVfc3RhdGVpZChyZXNwLCAmb2QtPm9kX3N0YXRlaWQpOwogCiAJRU5DT0RFX1NFUUlEX09QX1RBSUwob2QtPm9kX3N0YXRlb3duZXIpOwogCXJldHVybiBuZnNlcnI7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2N0bC5jIGIvZnMvbmZzZC9uZnNjdGwuYwppbmRleCBjNTNlNjVmLi45NzU0M2RmIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2N0bC5jCisrKyBiL2ZzL25mc2QvbmZzY3RsLmMKQEAgLTYxNCwxMCArNjE0LDkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQllcnIgPSBuZnNkX2NyZWF0ZV9zZXJ2KCk7CiAJCWlmICghZXJyKSB7Ci0JCQlpbnQgcHJvdG8gPSAwOwotCQkJZXJyID0gc3ZjX2FkZHNvY2sobmZzZF9zZXJ2LCBmZCwgYnVmLCAmcHJvdG8pOworCQkJZXJyID0gc3ZjX2FkZHNvY2sobmZzZF9zZXJ2LCBmZCwgYnVmKTsKIAkJCWlmIChlcnIgPj0gMCkgewotCQkJCWVyciA9IGxvY2tkX3VwKHByb3RvKTsKKwkJCQllcnIgPSBsb2NrZF91cCgpOwogCQkJCWlmIChlcnIgPCAwKQogCQkJCQlzdmNfc29ja19uYW1lcyhidWYrc3RybGVuKGJ1ZikrMSwgbmZzZF9zZXJ2LCBidWYpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNmaC5jIGIvZnMvbmZzZC9uZnNmaC5jCmluZGV4IGVhMzdjOTYuLmNkMjVkOTEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzZmguYworKysgYi9mcy9uZnNkL25mc2ZoLmMKQEAgLTMwMiwxNyArMzAyLDI3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKIAotCWlmICghKGFjY2VzcyAmIE5GU0RfTUFZX0xPQ0spKSB7Ci0JCS8qCi0JCSAqIHBzZXVkb2ZsYXZvciByZXN0cmljdGlvbnMgYXJlIG5vdCBlbmZvcmNlZCBvbiBOTE0sCi0JCSAqIHdoaWNoIGNsaWVudHMgdmlydHVhbGx5IGFsd2F5cyB1c2UgYXV0aF9zeXMgZm9yLAotCQkgKiBldmVuIHdoaWxlIHVzaW5nIFJQQ1NFQ19HU1MgZm9yIE5GUy4KLQkJICovCi0JCWVycm9yID0gY2hlY2tfbmZzZF9hY2Nlc3MoZXhwLCBycXN0cCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0OwotCX0KKwkvKgorCSAqIHBzZXVkb2ZsYXZvciByZXN0cmljdGlvbnMgYXJlIG5vdCBlbmZvcmNlZCBvbiBOTE0sCisJICogd2hpY2ggY2xpZW50cyB2aXJ0dWFsbHkgYWx3YXlzIHVzZSBhdXRoX3N5cyBmb3IsCisJICogZXZlbiB3aGlsZSB1c2luZyBSUENTRUNfR1NTIGZvciBORlMuCisJICovCisJaWYgKGFjY2VzcyAmIE5GU0RfTUFZX0xPQ0spCisJCWdvdG8gc2tpcF9wc2V1ZG9mbGF2b3JfY2hlY2s7CisJLyoKKwkgKiBDbGllbnRzIG1heSBleHBlY3QgdG8gYmUgYWJsZSB0byB1c2UgYXV0aF9zeXMgZHVyaW5nIG1vdW50LAorCSAqIGV2ZW4gaWYgdGhleSB1c2UgZ3NzIGZvciBldmVyeXRoaW5nIGVsc2U7IHNlZSBzZWN0aW9uIDIuMy4yCisJICogb2YgcmZjIDI2MjMuCisJICovCisJaWYgKGFjY2VzcyAmIE5GU0RfTUFZX0JZUEFTU19HU1NfT05fUk9PVAorCQkJJiYgZXhwLT5leF9wYXRoLmRlbnRyeSA9PSBkZW50cnkpCisJCWdvdG8gc2tpcF9wc2V1ZG9mbGF2b3JfY2hlY2s7CiAKKwllcnJvciA9IGNoZWNrX25mc2RfYWNjZXNzKGV4cCwgcnFzdHApOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisKK3NraXBfcHNldWRvZmxhdm9yX2NoZWNrOgogCS8qIEZpbmFsbHksIGNoZWNrIGFjY2VzcyBwZXJtaXNzaW9ucy4gKi8KIAllcnJvciA9IG5mc2RfcGVybWlzc2lvbihycXN0cCwgZXhwLCBkZW50cnksIGFjY2Vzcyk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzcHJvYy5jIGIvZnMvbmZzZC9uZnNwcm9jLmMKaW5kZXggMDc2NmY5NS4uNWNmZmVjYSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnNwcm9jLmMKQEAgLTY1LDcgKzY1LDggQEAKIAlkcHJpbnRrKCJuZnNkOiBHRVRBVFRSICAlc1xuIiwgU1ZDRkhfZm10KCZhcmdwLT5maCkpOwogCiAJZmhfY29weSgmcmVzcC0+ZmgsICZhcmdwLT5maCk7Ci0JbmZzZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCAmcmVzcC0+ZmgsIDAsIE5GU0RfTUFZX05PUCk7CisJbmZzZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCAmcmVzcC0+ZmgsIDAsCisJCQlORlNEX01BWV9OT1AgfCBORlNEX01BWV9CWVBBU1NfR1NTX09OX1JPT1QpOwogCXJldHVybiBuZnNkX3JldHVybl9hdHRycyhuZnNlcnIsIHJlc3ApOwogfQogCkBAIC01MjEsNyArNTIyLDggQEAKIAogCWRwcmludGsoIm5mc2Q6IFNUQVRGUyAgICVzXG4iLCBTVkNGSF9mbXQoJmFyZ3AtPmZoKSk7CiAKLQluZnNlcnIgPSBuZnNkX3N0YXRmcyhycXN0cCwgJmFyZ3AtPmZoLCAmcmVzcC0+c3RhdHMpOworCW5mc2VyciA9IG5mc2Rfc3RhdGZzKHJxc3RwLCAmYXJncC0+ZmgsICZyZXNwLT5zdGF0cywKKwkJCU5GU0RfTUFZX0JZUEFTU19HU1NfT05fUk9PVCk7CiAJZmhfcHV0KCZhcmdwLT5maCk7CiAJcmV0dXJuIG5mc2VycjsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzc3ZjLmMgYi9mcy9uZnNkL25mc3N2Yy5jCmluZGV4IDgwMjkyZmYuLjU5ZWViNDYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzc3ZjLmMKKysrIGIvZnMvbmZzZC9uZnNzdmMuYwpAQCAtMjI5LDYgKzIyOSw3IEBACiAKIAlhdG9taWNfc2V0KCZuZnNkX2J1c3ksIDApOwogCW5mc2Rfc2VydiA9IHN2Y19jcmVhdGVfcG9vbGVkKCZuZnNkX3Byb2dyYW0sIG5mc2RfbWF4X2Jsa3NpemUsCisJCQkJICAgICAgQUZfSU5FVCwKIAkJCQkgICAgICBuZnNkX2xhc3RfdGhyZWFkLCBuZnNkLCBUSElTX01PRFVMRSk7CiAJaWYgKG5mc2Rfc2VydiA9PSBOVUxMKQogCQllcnIgPSAtRU5PTUVNOwpAQCAtMjQzLDI1ICsyNDQsMjAgQEAKIAlpZiAoIWxpc3RfZW1wdHkoJm5mc2Rfc2Vydi0+c3ZfcGVybXNvY2tzKSkKIAkJcmV0dXJuIDA7CiAKLQllcnJvciA9IGxvY2tkX3VwKElQUFJPVE9fVURQKTsKLQlpZiAoZXJyb3IgPj0gMCkgewotCQllcnJvciA9IHN2Y19jcmVhdGVfeHBydChuZnNkX3NlcnYsICJ1ZHAiLCBwb3J0LAorCWVycm9yID0gc3ZjX2NyZWF0ZV94cHJ0KG5mc2Rfc2VydiwgInVkcCIsIHBvcnQsCiAJCQkJCVNWQ19TT0NLX0RFRkFVTFRTKTsKLQkJaWYgKGVycm9yIDwgMCkKLQkJCWxvY2tkX2Rvd24oKTsKLQl9CiAJaWYgKGVycm9yIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSBsb2NrZF91cChJUFBST1RPX1RDUCk7Ci0JaWYgKGVycm9yID49IDApIHsKLQkJZXJyb3IgPSBzdmNfY3JlYXRlX3hwcnQobmZzZF9zZXJ2LCAidGNwIiwgcG9ydCwKKwllcnJvciA9IHN2Y19jcmVhdGVfeHBydChuZnNkX3NlcnYsICJ0Y3AiLCBwb3J0LAogCQkJCQlTVkNfU09DS19ERUZBVUxUUyk7Ci0JCWlmIChlcnJvciA8IDApCi0JCQlsb2NrZF9kb3duKCk7Ci0JfQogCWlmIChlcnJvciA8IDApCiAJCXJldHVybiBlcnJvcjsKKworCWVycm9yID0gbG9ja2RfdXAoKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggMTgwNjBiZS4uYWExZDBkNiAxMDA2NDQKLS0tIGEvZnMvbmZzZC92ZnMuYworKysgYi9mcy9uZnNkL3Zmcy5jCkBAIC04Myw3ICs4Myw2IEBACiAJc3BpbmxvY2tfdAkJcGJfbG9jazsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAotc3RhdGljIHN0cnVjdCByYXBhcm1zICoJCXJhcGFybWw7CiAjZGVmaW5lIFJBUEFSTV9IQVNIX0JJVFMJNAogI2RlZmluZSBSQVBBUk1fSEFTSF9TSVpFCSgxPDxSQVBBUk1fSEFTSF9CSVRTKQogI2RlZmluZSBSQVBBUk1fSEFTSF9NQVNLCShSQVBBUk1fSEFTSF9TSVpFLTEpCkBAIC0xODY2LDkgKzE4NjUsOSBAQAogICogTi5CLiBBZnRlciB0aGlzIGNhbGwgZmhwIG5lZWRzIGFuIGZoX3B1dAogICovCiBfX2JlMzIKLW5mc2Rfc3RhdGZzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCwgc3RydWN0IGtzdGF0ZnMgKnN0YXQpCituZnNkX3N0YXRmcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsIHN0cnVjdCBrc3RhdGZzICpzdGF0LCBpbnQgYWNjZXNzKQogewotCV9fYmUzMiBlcnIgPSBmaF92ZXJpZnkocnFzdHAsIGZocCwgMCwgTkZTRF9NQVlfTk9QKTsKKwlfX2JlMzIgZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIDAsIE5GU0RfTUFZX05PUCB8IGFjY2Vzcyk7CiAJaWYgKCFlcnIgJiYgdmZzX3N0YXRmcyhmaHAtPmZoX2RlbnRyeSxzdGF0KSkKIAkJZXJyID0gbmZzZXJyX2lvOwogCXJldHVybiBlcnI7CkBAIC0xOTY2LDExICsxOTY1LDIwIEBACiB2b2lkCiBuZnNkX3JhY2FjaGVfc2h1dGRvd24odm9pZCkKIHsKLQlpZiAoIXJhcGFybWwpCi0JCXJldHVybjsKKwlzdHJ1Y3QgcmFwYXJtcyAqcmFwYXJtLCAqbGFzdF9yYXBhcm07CisJdW5zaWduZWQgaW50IGk7CisKIAlkcHJpbnRrKCJuZnNkOiBmcmVlaW5nIHJlYWRhaGVhZCBidWZmZXJzLlxuIik7Ci0Ja2ZyZWUocmFwYXJtbCk7Ci0JcmFwYXJtbCA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgUkFQQVJNX0hBU0hfU0laRTsgaSsrKSB7CisJCXJhcGFybSA9IHJhcGFybV9oYXNoW2ldLnBiX2hlYWQ7CisJCXdoaWxlKHJhcGFybSkgeworCQkJbGFzdF9yYXBhcm0gPSByYXBhcm07CisJCQlyYXBhcm0gPSByYXBhcm0tPnBfbmV4dDsKKwkJCWtmcmVlKGxhc3RfcmFwYXJtKTsKKwkJfQorCQlyYXBhcm1faGFzaFtpXS5wYl9oZWFkID0gTlVMTDsKKwl9CiB9CiAvKgogICogSW5pdGlhbGl6ZSByZWFkYWhlYWQgcGFyYW0gY2FjaGUKQEAgLTE5ODEsMzUgKzE5ODksMzggQEAKIAlpbnQJaTsKIAlpbnQJaiA9IDA7CiAJaW50CW5wZXJidWNrZXQ7CisJc3RydWN0IHJhcGFybXMgKipyYXBhcm0gPSBOVUxMOwogCiAKLQlpZiAocmFwYXJtbCkKKwlpZiAocmFwYXJtX2hhc2hbMF0ucGJfaGVhZCkKIAkJcmV0dXJuIDA7Ci0JaWYgKGNhY2hlX3NpemUgPCAyKlJBUEFSTV9IQVNIX1NJWkUpCi0JCWNhY2hlX3NpemUgPSAyKlJBUEFSTV9IQVNIX1NJWkU7Ci0JcmFwYXJtbCA9IGtjYWxsb2MoY2FjaGVfc2l6ZSwgc2l6ZW9mKHN0cnVjdCByYXBhcm1zKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXJhcGFybWwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJIm5mc2Q6IENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgcmVhZC1haGVhZCBjYWNoZS5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJbnBlcmJ1Y2tldCA9IERJVl9ST1VORF9VUChjYWNoZV9zaXplLCBSQVBBUk1fSEFTSF9TSVpFKTsKKwlpZiAobnBlcmJ1Y2tldCA8IDIpCisJCW5wZXJidWNrZXQgPSAyOworCWNhY2hlX3NpemUgPSBucGVyYnVja2V0ICogUkFQQVJNX0hBU0hfU0laRTsKIAogCWRwcmludGsoIm5mc2Q6IGFsbG9jYXRpbmcgJWQgcmVhZGFoZWFkIGJ1ZmZlcnMuXG4iLCBjYWNoZV9zaXplKTsKLQlmb3IgKGkgPSAwIDsgaSA8IFJBUEFSTV9IQVNIX1NJWkUgOyBpKyspIHsKLQkJcmFwYXJtX2hhc2hbaV0ucGJfaGVhZCA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgUkFQQVJNX0hBU0hfU0laRTsgaSsrKSB7CiAJCXNwaW5fbG9ja19pbml0KCZyYXBhcm1faGFzaFtpXS5wYl9sb2NrKTsKLQl9Ci0JbnBlcmJ1Y2tldCA9IERJVl9ST1VORF9VUChjYWNoZV9zaXplLCBSQVBBUk1fSEFTSF9TSVpFKTsKLQlmb3IgKGkgPSAwOyBpIDwgY2FjaGVfc2l6ZSAtIDE7IGkrKykgewotCQlpZiAoaSAlIG5wZXJidWNrZXQgPT0gMCkKLQkJCXJhcGFybV9oYXNoW2orK10ucGJfaGVhZCA9IHJhcGFybWwgKyBpOwotCQlpZiAoaSAlIG5wZXJidWNrZXQgPCBucGVyYnVja2V0LTEpCi0JCQlyYXBhcm1sW2ldLnBfbmV4dCA9IHJhcGFybWwgKyBpICsgMTsKKworCQlyYXBhcm0gPSAmcmFwYXJtX2hhc2hbaV0ucGJfaGVhZDsKKwkJZm9yIChqID0gMDsgaiA8IG5wZXJidWNrZXQ7IGorKykgeworCQkJKnJhcGFybSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYXBhcm1zKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoISpyYXBhcm0pCisJCQkJZ290byBvdXRfbm9tZW07CisJCQlyYXBhcm0gPSAmKCpyYXBhcm0pLT5wX25leHQ7CisJCX0KKwkJKnJhcGFybSA9IE5VTEw7CiAJfQogCiAJbmZzZHN0YXRzLnJhX3NpemUgPSBjYWNoZV9zaXplOwogCXJldHVybiAwOworCitvdXRfbm9tZW06CisJZHByaW50aygibmZzZDoga21hbGxvYyBmYWlsZWQsIGZyZWVpbmcgcmVhZGFoZWFkIGJ1ZmZlcnNcbiIpOworCW5mc2RfcmFjYWNoZV9zaHV0ZG93bigpOworCXJldHVybiAtRU5PTUVNOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTRF9WMl9BQ0wpIHx8IGRlZmluZWQoQ09ORklHX05GU0RfVjNfQUNMKQpkaWZmIC0tZ2l0IGEvZnMvbmxzL25sc19iYXNlLmMgYi9mcy9ubHMvbmxzX2Jhc2UuYwppbmRleCA2NDk2NWUxLi45YjBlZmRhIDEwMDY0NAotLS0gYS9mcy9ubHMvbmxzX2Jhc2UuYworKysgYi9mcy9ubHMvbmxzX2Jhc2UuYwpAQCAtMTMsOSArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25scy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaWZkZWYgQ09ORklHX0tNT0QKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiBzdGF0aWMgc3RydWN0IG5sc190YWJsZSBkZWZhdWx0X3RhYmxlOwpAQCAtMjE1LDI0ICsyMTMsNyBAQAogCiBzdHJ1Y3QgbmxzX3RhYmxlICpsb2FkX25scyhjaGFyICpjaGFyc2V0KQogewotCXN0cnVjdCBubHNfdGFibGUgKm5sczsKLSNpZmRlZiBDT05GSUdfS01PRAotCWludCByZXQ7Ci0jZW5kaWYKLQotCW5scyA9IGZpbmRfbmxzKGNoYXJzZXQpOwotCWlmIChubHMpCi0JCXJldHVybiBubHM7Ci0KLSNpZmRlZiBDT05GSUdfS01PRAotCXJldCA9IHJlcXVlc3RfbW9kdWxlKCJubHNfJXMiLCBjaGFyc2V0KTsKLQlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKCJVbmFibGUgdG8gbG9hZCBOTFMgY2hhcnNldCAlc1xuIiwgY2hhcnNldCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlubHMgPSBmaW5kX25scyhjaGFyc2V0KTsKLSNlbmRpZgotCXJldHVybiBubHM7CisJcmV0dXJuIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKGZpbmRfbmxzKGNoYXJzZXQpLCAibmxzXyVzIiwgY2hhcnNldCk7CiB9CiAKIHZvaWQgdW5sb2FkX25scyhzdHJ1Y3QgbmxzX3RhYmxlICpubHMpCmRpZmYgLS1naXQgYS9mcy9udGZzL2ZpbGUuYyBiL2ZzL250ZnMvZmlsZS5jCmluZGV4IGQwMjA4NjYuLjMxNDBhNDQgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvZmlsZS5jCisrKyBiL2ZzL250ZnMvZmlsZS5jCkBAIC00MzksNyArNDM5LDcgQEAKIAkJCXBhZ2VzW25yXSA9ICpjYWNoZWRfcGFnZTsKIAkJCXBhZ2VfY2FjaGVfZ2V0KCpjYWNoZWRfcGFnZSk7CiAJCQlpZiAodW5saWtlbHkoIXBhZ2V2ZWNfYWRkKGxydV9wdmVjLCAqY2FjaGVkX3BhZ2UpKSkKLQkJCQlfX3BhZ2V2ZWNfbHJ1X2FkZChscnVfcHZlYyk7CisJCQkJX19wYWdldmVjX2xydV9hZGRfZmlsZShscnVfcHZlYyk7CiAJCQkqY2FjaGVkX3BhZ2UgPSBOVUxMOwogCQl9CiAJCWluZGV4Kys7CkBAIC0yMDg0LDcgKzIwODQsNyBAQAogCQkJCQkJT1NZTkNfTUVUQURBVEF8T1NZTkNfREFUQSk7CiAJCX0KICAgCX0KLQlwYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwlwYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOwogCW50ZnNfZGVidWcoIkRvbmUuICBSZXR1cm5pbmcgJXMgKHdyaXR0ZW4gMHglbHgsIHN0YXR1cyAlbGkpLiIsCiAJCQl3cml0dGVuID8gIndyaXR0ZW4iIDogInN0YXR1cyIsICh1bnNpZ25lZCBsb25nKXdyaXR0ZW4sCiAJCQkobG9uZylzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvTWFrZWZpbGUgYi9mcy9vY2ZzMi9NYWtlZmlsZQppbmRleCBmNjk1NmRlLi41ODlkY2RmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9NYWtlZmlsZQorKysgYi9mcy9vY2ZzMi9NYWtlZmlsZQpAQCAtMzQsNyArMzQsOCBAQAogCXN5bWxpbmsubyAJCVwKIAlzeXNmaWxlLm8gCQlcCiAJdXB0b2RhdGUubwkJXAotCXZlci5vCisJdmVyLm8JCQlcCisJeGF0dHIubwogCiBvY2ZzMl9zdGFja2dsdWUtb2JqcyA6PSBzdGFja2dsdWUubwogb2NmczJfc3RhY2tfbzJjYi1vYmpzIDo9IHN0YWNrX28yY2IubwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWxsb2MuYyBiL2ZzL29jZnMyL2FsbG9jLmMKaW5kZXggMjlmZjU3ZS4uMGNjMmRlYiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWxsb2MuYworKysgYi9mcy9vY2ZzMi9hbGxvYy5jCkBAIC00OSw2ICs0OSwzNDAgQEAKIAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCiAKKworLyoKKyAqIE9wZXJhdGlvbnMgZm9yIGEgc3BlY2lmaWMgZXh0ZW50IHRyZWUgdHlwZS4KKyAqCisgKiBUbyBpbXBsZW1lbnQgYW4gb24tZGlzayBidHJlZSAoZXh0ZW50IHRyZWUpIHR5cGUgaW4gb2NmczIsIGFkZAorICogYW4gb2NmczJfZXh0ZW50X3RyZWVfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgYW5kIHRoZSBtYXRjaGluZworICogb2NmczJfaW5pdF88dGhpbmd5Pl9leHRlbnRfdHJlZSgpIGZ1bmN0aW9uLiAgVGhhdCdzIHByZXR0eSBtdWNoIGl0CisgKiBmb3IgdGhlIGFsbG9jYXRpb24gcG9ydGlvbiBvZiB0aGUgZXh0ZW50IHRyZWUuCisgKi8KK3N0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZV9vcGVyYXRpb25zIHsKKwkvKgorCSAqIGxhc3RfZWJfYmxrIGlzIHRoZSBibG9jayBudW1iZXIgb2YgdGhlIHJpZ2h0IG1vc3QgbGVhZiBleHRlbnQKKwkgKiBibG9jay4gIE1vc3Qgb24tZGlzayBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgYW4gZXh0ZW50IHRyZWUgc3RvcmUKKwkgKiB0aGlzIHZhbHVlIGZvciBmYXN0IGFjY2Vzcy4gIFRoZSAtPmVvX3NldF9sYXN0X2ViX2JsaygpIGFuZAorCSAqIC0+ZW9fZ2V0X2xhc3RfZWJfYmxrKCkgb3BlcmF0aW9ucyBhY2Nlc3MgdGhpcyB2YWx1ZS4gIFRoZXkgYXJlCisJICogIGJvdGggcmVxdWlyZWQuCisJICovCisJdm9pZCAoKmVvX3NldF9sYXN0X2ViX2Jsaykoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgICB1NjQgYmxrbm8pOworCXU2NCAoKmVvX2dldF9sYXN0X2ViX2Jsaykoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CisKKwkvKgorCSAqIFRoZSBvbi1kaXNrIHN0cnVjdHVyZSB1c3VhbGx5IGtlZXBzIHRyYWNrIG9mIGhvdyBtYW55IHRvdGFsCisJICogY2x1c3RlcnMgYXJlIHN0b3JlZCBpbiB0aGlzIGV4dGVudCB0cmVlLiAgVGhpcyBmdW5jdGlvbiB1cGRhdGVzCisJICogdGhhdCB2YWx1ZS4gIG5ld19jbHVzdGVycyBpcyB0aGUgZGVsdGEsIGFuZCBtdXN0IGJlCisJICogYWRkZWQgdG8gdGhlIHRvdGFsLiAgUmVxdWlyZWQuCisJICovCisJdm9pZCAoKmVvX3VwZGF0ZV9jbHVzdGVycykoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgIHUzMiBuZXdfY2x1c3RlcnMpOworCisJLyoKKwkgKiBJZiAtPmVvX2luc2VydF9jaGVjaygpIGV4aXN0cywgaXQgaXMgY2FsbGVkIGJlZm9yZSByZWMgaXMKKwkgKiBpbnNlcnRlZCBpbnRvIHRoZSBleHRlbnQgdHJlZS4gIEl0IGlzIG9wdGlvbmFsLgorCSAqLworCWludCAoKmVvX2luc2VydF9jaGVjaykoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMpOworCWludCAoKmVvX3Nhbml0eV9jaGVjaykoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CisKKwkvKgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogVGhlIHJlbWFpbmluZyBhcmUgaW50ZXJuYWwgdG8gb2NmczJfZXh0ZW50X3RyZWUgYW5kIGRvbid0IGhhdmUKKwkgKiBhY2Nlc3NvciBmdW5jdGlvbnMKKwkgKi8KKworCS8qCisJICogLT5lb19maWxsX3Jvb3RfZWwoKSB0YWtlcyBldC0+ZXRfb2JqZWN0IGFuZCBzZXRzIGV0LT5ldF9yb290X2VsLgorCSAqIEl0IGlzIHJlcXVpcmVkLgorCSAqLworCXZvaWQgKCplb19maWxsX3Jvb3RfZWwpKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpOworCisJLyoKKwkgKiAtPmVvX2ZpbGxfbWF4X2xlYWZfY2x1c3RlcnMgc2V0cyBldC0+ZXRfbWF4X2xlYWZfY2x1c3RlcnMgaWYKKwkgKiBpdCBleGlzdHMuICBJZiBpdCBkb2VzIG5vdCwgZXQtPmV0X21heF9sZWFmX2NsdXN0ZXJzIGlzIHNldAorCSAqIHRvIDAgKHVubGltaXRlZCkuICBPcHRpb25hbC4KKwkgKi8KKwl2b2lkICgqZW9fZmlsbF9tYXhfbGVhZl9jbHVzdGVycykoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KTsKK307CisKKworLyoKKyAqIFByZS1kZWNsYXJlIG9jZnMyX2Rpbm9kZV9ldF9vcHMgc28gd2UgY2FuIHVzZSBpdCBhcyBhIHNhbml0eSBjaGVjaworICogaW4gdGhlIG1ldGhvZHMuCisgKi8KK3N0YXRpYyB1NjQgb2NmczJfZGlub2RlX2dldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KTsKK3N0YXRpYyB2b2lkIG9jZnMyX2Rpbm9kZV9zZXRfbGFzdF9lYl9ibGsoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJIHU2NCBibGtubyk7CitzdGF0aWMgdm9pZCBvY2ZzMl9kaW5vZGVfdXBkYXRlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQkgdTMyIGNsdXN0ZXJzKTsKK3N0YXRpYyBpbnQgb2NmczJfZGlub2RlX2luc2VydF9jaGVjayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMpOworc3RhdGljIGludCBvY2ZzMl9kaW5vZGVfc2FuaXR5X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KTsKK3N0YXRpYyB2b2lkIG9jZnMyX2Rpbm9kZV9maWxsX3Jvb3RfZWwoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CitzdGF0aWMgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlX29wZXJhdGlvbnMgb2NmczJfZGlub2RlX2V0X29wcyA9IHsKKwkuZW9fc2V0X2xhc3RfZWJfYmxrCT0gb2NmczJfZGlub2RlX3NldF9sYXN0X2ViX2JsaywKKwkuZW9fZ2V0X2xhc3RfZWJfYmxrCT0gb2NmczJfZGlub2RlX2dldF9sYXN0X2ViX2JsaywKKwkuZW9fdXBkYXRlX2NsdXN0ZXJzCT0gb2NmczJfZGlub2RlX3VwZGF0ZV9jbHVzdGVycywKKwkuZW9faW5zZXJ0X2NoZWNrCT0gb2NmczJfZGlub2RlX2luc2VydF9jaGVjaywKKwkuZW9fc2FuaXR5X2NoZWNrCT0gb2NmczJfZGlub2RlX3Nhbml0eV9jaGVjaywKKwkuZW9fZmlsbF9yb290X2VsCT0gb2NmczJfZGlub2RlX2ZpbGxfcm9vdF9lbCwKK307CisKK3N0YXRpYyB2b2lkIG9jZnMyX2Rpbm9kZV9zZXRfbGFzdF9lYl9ibGsoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJIHU2NCBibGtubykKK3sKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IGV0LT5ldF9vYmplY3Q7CisKKwlCVUdfT04oZXQtPmV0X29wcyAhPSAmb2NmczJfZGlub2RlX2V0X29wcyk7CisJZGktPmlfbGFzdF9lYl9ibGsgPSBjcHVfdG9fbGU2NChibGtubyk7Cit9CisKK3N0YXRpYyB1NjQgb2NmczJfZGlub2RlX2dldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQoreworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gZXQtPmV0X29iamVjdDsKKworCUJVR19PTihldC0+ZXRfb3BzICE9ICZvY2ZzMl9kaW5vZGVfZXRfb3BzKTsKKwlyZXR1cm4gbGU2NF90b19jcHUoZGktPmlfbGFzdF9lYl9ibGspOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9kaW5vZGVfdXBkYXRlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQkgdTMyIGNsdXN0ZXJzKQoreworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gZXQtPmV0X29iamVjdDsKKworCWxlMzJfYWRkX2NwdSgmZGktPmlfY2x1c3RlcnMsIGNsdXN0ZXJzKTsKKwlzcGluX2xvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9sb2NrKTsKKwlPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdShkaS0+aV9jbHVzdGVycyk7CisJc3Bpbl91bmxvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9sb2NrKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9kaW5vZGVfaW5zZXJ0X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnJlYykKK3sKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKworCUJVR19PTihPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpOworCW1sb2dfYnVnX29uX21zZyghb2NmczJfc3BhcnNlX2FsbG9jKG9zYikgJiYKKwkJCShPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMgIT0gcmVjLT5lX2Nwb3MpLAorCQkJIkRldmljZSAlcywgYXNraW5nIGZvciBzcGFyc2UgYWxsb2NhdGlvbjogaW5vZGUgJWxsdSwgIgorCQkJImNwb3MgJXUsIGNsdXN0ZXJzICV1XG4iLAorCQkJb3NiLT5kZXZfc3RyLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCisJCQlyZWMtPmVfY3BvcywKKwkJCU9DRlMyX0koaW5vZGUpLT5pcF9jbHVzdGVycyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvY2ZzMl9kaW5vZGVfc2FuaXR5X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpOworCisJQlVHX09OKGV0LT5ldF9vcHMgIT0gJm9jZnMyX2Rpbm9kZV9ldF9vcHMpOworCisJZGkgPSBldC0+ZXRfb2JqZWN0OworCWlmICghT0NGUzJfSVNfVkFMSURfRElOT0RFKGRpKSkgeworCQlyZXQgPSAtRUlPOworCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKKwkJCSJJbm9kZSAlbGx1IGhhcyBpbnZhbGlkIHBhdGggcm9vdCIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX2ZpbGxfcm9vdF9lbChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQoreworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gZXQtPmV0X29iamVjdDsKKworCWV0LT5ldF9yb290X2VsID0gJmRpLT5pZDIuaV9saXN0OworfQorCisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX3ZhbHVlX2ZpbGxfcm9vdF9lbChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diA9IGV0LT5ldF9vYmplY3Q7CisKKwlldC0+ZXRfcm9vdF9lbCA9ICZ4di0+eHJfbGlzdDsKK30KKworc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdmFsdWVfc2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCSAgICAgIHU2NCBibGtubykKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYgPQorCQkoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKilldC0+ZXRfb2JqZWN0OworCisJeHYtPnhyX2xhc3RfZWJfYmxrID0gY3B1X3RvX2xlNjQoYmxrbm8pOworfQorCitzdGF0aWMgdTY0IG9jZnMyX3hhdHRyX3ZhbHVlX2dldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diA9CisJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqKSBldC0+ZXRfb2JqZWN0OworCisJcmV0dXJuIGxlNjRfdG9fY3B1KHh2LT54cl9sYXN0X2ViX2Jsayk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX3ZhbHVlX3VwZGF0ZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQkgICAgICB1MzIgY2x1c3RlcnMpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2ID0KKwkJKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopZXQtPmV0X29iamVjdDsKKworCWxlMzJfYWRkX2NwdSgmeHYtPnhyX2NsdXN0ZXJzLCBjbHVzdGVycyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWVfb3BlcmF0aW9ucyBvY2ZzMl94YXR0cl92YWx1ZV9ldF9vcHMgPSB7CisJLmVvX3NldF9sYXN0X2ViX2Jsawk9IG9jZnMyX3hhdHRyX3ZhbHVlX3NldF9sYXN0X2ViX2JsaywKKwkuZW9fZ2V0X2xhc3RfZWJfYmxrCT0gb2NmczJfeGF0dHJfdmFsdWVfZ2V0X2xhc3RfZWJfYmxrLAorCS5lb191cGRhdGVfY2x1c3RlcnMJPSBvY2ZzMl94YXR0cl92YWx1ZV91cGRhdGVfY2x1c3RlcnMsCisJLmVvX2ZpbGxfcm9vdF9lbAk9IG9jZnMyX3hhdHRyX3ZhbHVlX2ZpbGxfcm9vdF9lbCwKK307CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX3RyZWVfZmlsbF9yb290X2VsKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9IGV0LT5ldF9vYmplY3Q7CisKKwlldC0+ZXRfcm9vdF9lbCA9ICZ4Yi0+eGJfYXR0cnMueGJfcm9vdC54dF9saXN0OworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YXR0cl90cmVlX2ZpbGxfbWF4X2xlYWZfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQoreworCWV0LT5ldF9tYXhfbGVhZl9jbHVzdGVycyA9CisJCW9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhpbm9kZS0+aV9zYiwKKwkJCQkJIE9DRlMyX01BWF9YQVRUUl9UUkVFX0xFQUZfU0laRSk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX3RyZWVfc2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCSAgICAgdTY0IGJsa25vKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGIgPSBldC0+ZXRfb2JqZWN0OworCXN0cnVjdCBvY2ZzMl94YXR0cl90cmVlX3Jvb3QgKnh0ID0gJnhiLT54Yl9hdHRycy54Yl9yb290OworCisJeHQtPnh0X2xhc3RfZWJfYmxrID0gY3B1X3RvX2xlNjQoYmxrbm8pOworfQorCitzdGF0aWMgdTY0IG9jZnMyX3hhdHRyX3RyZWVfZ2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9IGV0LT5ldF9vYmplY3Q7CisJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeHQgPSAmeGItPnhiX2F0dHJzLnhiX3Jvb3Q7CisKKwlyZXR1cm4gbGU2NF90b19jcHUoeHQtPnh0X2xhc3RfZWJfYmxrKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdHJlZV91cGRhdGVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQkgICAgIHUzMiBjbHVzdGVycykKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiID0gZXQtPmV0X29iamVjdDsKKworCWxlMzJfYWRkX2NwdSgmeGItPnhiX2F0dHJzLnhiX3Jvb3QueHRfY2x1c3RlcnMsIGNsdXN0ZXJzKTsKK30KKworc3RhdGljIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZV9vcGVyYXRpb25zIG9jZnMyX3hhdHRyX3RyZWVfZXRfb3BzID0geworCS5lb19zZXRfbGFzdF9lYl9ibGsJPSBvY2ZzMl94YXR0cl90cmVlX3NldF9sYXN0X2ViX2JsaywKKwkuZW9fZ2V0X2xhc3RfZWJfYmxrCT0gb2NmczJfeGF0dHJfdHJlZV9nZXRfbGFzdF9lYl9ibGssCisJLmVvX3VwZGF0ZV9jbHVzdGVycwk9IG9jZnMyX3hhdHRyX3RyZWVfdXBkYXRlX2NsdXN0ZXJzLAorCS5lb19maWxsX3Jvb3RfZWwJPSBvY2ZzMl94YXR0cl90cmVlX2ZpbGxfcm9vdF9lbCwKKwkuZW9fZmlsbF9tYXhfbGVhZl9jbHVzdGVycyA9IG9jZnMyX3hhdHRyX3RyZWVfZmlsbF9tYXhfbGVhZl9jbHVzdGVycywKK307CisKK3N0YXRpYyB2b2lkIF9fb2NmczJfaW5pdF9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCQkJICAgICB2b2lkICpvYmosCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWVfb3BlcmF0aW9ucyAqb3BzKQoreworCWV0LT5ldF9vcHMgPSBvcHM7CisJZXQtPmV0X3Jvb3RfYmggPSBiaDsKKwlpZiAoIW9iaikKKwkJb2JqID0gKHZvaWQgKiliaC0+Yl9kYXRhOworCWV0LT5ldF9vYmplY3QgPSBvYmo7CisKKwlldC0+ZXRfb3BzLT5lb19maWxsX3Jvb3RfZWwoZXQpOworCWlmICghZXQtPmV0X29wcy0+ZW9fZmlsbF9tYXhfbGVhZl9jbHVzdGVycykKKwkJZXQtPmV0X21heF9sZWFmX2NsdXN0ZXJzID0gMDsKKwllbHNlCisJCWV0LT5ldF9vcHMtPmVvX2ZpbGxfbWF4X2xlYWZfY2x1c3RlcnMoaW5vZGUsIGV0KTsKK30KKwordm9pZCBvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlfX29jZnMyX2luaXRfZXh0ZW50X3RyZWUoZXQsIGlub2RlLCBiaCwgTlVMTCwgJm9jZnMyX2Rpbm9kZV9ldF9vcHMpOworfQorCit2b2lkIG9jZnMyX2luaXRfeGF0dHJfdHJlZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCV9fb2NmczJfaW5pdF9leHRlbnRfdHJlZShldCwgaW5vZGUsIGJoLCBOVUxMLAorCQkJCSAmb2NmczJfeGF0dHJfdHJlZV9ldF9vcHMpOworfQorCit2b2lkIG9jZnMyX2luaXRfeGF0dHJfdmFsdWVfZXh0ZW50X3RyZWUoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2KQoreworCV9fb2NmczJfaW5pdF9leHRlbnRfdHJlZShldCwgaW5vZGUsIGJoLCB4diwKKwkJCQkgJm9jZnMyX3hhdHRyX3ZhbHVlX2V0X29wcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9ldF9zZXRfbGFzdF9lYl9ibGsoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJICAgIHU2NCBuZXdfbGFzdF9lYl9ibGspCit7CisJZXQtPmV0X29wcy0+ZW9fc2V0X2xhc3RfZWJfYmxrKGV0LCBuZXdfbGFzdF9lYl9ibGspOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBvY2ZzMl9ldF9nZXRfbGFzdF9lYl9ibGsoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKK3sKKwlyZXR1cm4gZXQtPmV0X29wcy0+ZW9fZ2V0X2xhc3RfZWJfYmxrKGV0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX2V0X3VwZGF0ZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJICAgIHUzMiBjbHVzdGVycykKK3sKKwlldC0+ZXRfb3BzLT5lb191cGRhdGVfY2x1c3RlcnMoaW5vZGUsIGV0LCBjbHVzdGVycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2V0X2luc2VydF9jaGVjayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjKQoreworCWludCByZXQgPSAwOworCisJaWYgKGV0LT5ldF9vcHMtPmVvX2luc2VydF9jaGVjaykKKwkJcmV0ID0gZXQtPmV0X29wcy0+ZW9faW5zZXJ0X2NoZWNrKGlub2RlLCBldCwgcmVjKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9ldF9zYW5pdHlfY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChldC0+ZXRfb3BzLT5lb19zYW5pdHlfY2hlY2spCisJCXJldCA9IGV0LT5ldF9vcHMtPmVvX3Nhbml0eV9jaGVjayhpbm9kZSwgZXQpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyB2b2lkIG9jZnMyX2ZyZWVfdHJ1bmNhdGVfY29udGV4dChzdHJ1Y3Qgb2NmczJfdHJ1bmNhdGVfY29udGV4dCAqdGMpOwogc3RhdGljIGludCBvY2ZzMl9jYWNoZV9leHRlbnRfYmxvY2tfZnJlZShzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqY3R4dCwKIAkJCQkJIHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViKTsKQEAgLTIwNSwxNyArNTM5LDYgQEAKIH0KIAogLyoKLSAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IHBhdGggYmFzZWQgb24gYSBkaXNrIGlub2RlIHRyZWUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgb2NmczJfcGF0aCAqb2NmczJfbmV3X2lub2RlX3BhdGgoc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCkKLXsKLQlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKLQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJmRpLT5pZDIuaV9saXN0OwotCi0JcmV0dXJuIG9jZnMyX25ld19wYXRoKGRpX2JoLCBlbCk7Ci19Ci0KLS8qCiAgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBqb3VybmFsIGFsbCBjb21wb25lbnRzIGluIGEgcGF0aC4KICAqLwogc3RhdGljIGludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19wYXRoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCkBAIC0zNjgsMzkgKzY5MSwzNSBAQAogICovCiBpbnQgb2NmczJfbnVtX2ZyZWVfZXh0ZW50cyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSkKKwkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCiB7CiAJaW50IHJldHZhbDsKLQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZWJfYmggPSBOVUxMOworCXU2NCBsYXN0X2ViX2JsayA9IDA7CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAotCWlmICghT0NGUzJfSVNfVkFMSURfRElOT0RFKGZlKSkgewotCQlPQ0ZTMl9ST19PTl9JTlZBTElEX0RJTk9ERShpbm9kZS0+aV9zYiwgZmUpOwotCQlyZXR2YWwgPSAtRUlPOwotCQlnb3RvIGJhaWw7Ci0JfQorCWVsID0gZXQtPmV0X3Jvb3RfZWw7CisJbGFzdF9lYl9ibGsgPSBvY2ZzMl9ldF9nZXRfbGFzdF9lYl9ibGsoZXQpOwogCi0JaWYgKGZlLT5pX2xhc3RfZWJfYmxrKSB7Ci0JCXJldHZhbCA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBsZTY0X3RvX2NwdShmZS0+aV9sYXN0X2ViX2JsayksCi0JCQkJCSAgJmViX2JoLCBPQ0ZTMl9CSF9DQUNIRUQsIGlub2RlKTsKKwlpZiAobGFzdF9lYl9ibGspIHsKKwkJcmV0dmFsID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgbGFzdF9lYl9ibGssCisJCQkJCSAgJmViX2JoKTsKIAkJaWYgKHJldHZhbCA8IDApIHsKIAkJCW1sb2dfZXJybm8ocmV0dmFsKTsKIAkJCWdvdG8gYmFpbDsKIAkJfQogCQllYiA9IChzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICopIGViX2JoLT5iX2RhdGE7CiAJCWVsID0gJmViLT5oX2xpc3Q7Ci0JfSBlbHNlCi0JCWVsID0gJmZlLT5pZDIuaV9saXN0OworCX0KIAogCUJVR19PTihlbC0+bF90cmVlX2RlcHRoICE9IDApOwogCiAJcmV0dmFsID0gbGUxNl90b19jcHUoZWwtPmxfY291bnQpIC0gbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYyk7CiBiYWlsOgotCWlmIChlYl9iaCkKLQkJYnJlbHNlKGViX2JoKTsKKwlicmVsc2UoZWJfYmgpOwogCiAJbWxvZ19leGl0KHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTQ4Niw4ICs4MDUsNyBAQAogYmFpbDoKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlmb3IoaSA9IDA7IGkgPCB3YW50ZWQ7IGkrKykgewotCQkJaWYgKGJoc1tpXSkKLQkJCQlicmVsc2UoYmhzW2ldKTsKKwkJCWJyZWxzZShiaHNbaV0pOwogCQkJYmhzW2ldID0gTlVMTDsKIAkJfQogCX0KQEAgLTUzMSw3ICs4NDksNyBAQAogc3RhdGljIGludCBvY2ZzMl9hZGRfYnJhbmNoKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICAgIGhhbmRsZV90ICpoYW5kbGUsCiAJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAorCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICplYl9iaCwKIAkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsYXN0X2ViX2JoLAogCQkJICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjKQpAQCAtNTQwLDcgKzg1OCw2IEBACiAJdTY0IG5leHRfYmxrbm8sIG5ld19sYXN0X2ViX2JsazsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqKm5ld19lYl9iaHMgPSBOVUxMOwotCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAgKmViX2VsOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAgKmVsOwpAQCAtNTUwLDEzICs4NjcsMTEgQEAKIAogCUJVR19PTighbGFzdF9lYl9iaCB8fCAhKmxhc3RfZWJfYmgpOwogCi0JZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBmZV9iaC0+Yl9kYXRhOwotCiAJaWYgKGViX2JoKSB7CiAJCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKikgZWJfYmgtPmJfZGF0YTsKIAkJZWwgPSAmZWItPmhfbGlzdDsKIAl9IGVsc2UKLQkJZWwgPSAmZmUtPmlkMi5pX2xpc3Q7CisJCWVsID0gZXQtPmV0X3Jvb3RfZWw7CiAKIAkvKiB3ZSBuZXZlciBhZGQgYSBicmFuY2ggdG8gYSBsZWFmLiAqLwogCUJVR19PTighZWwtPmxfdHJlZV9kZXB0aCk7CkBAIC02NDYsNyArOTYxLDcgQEAKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CiAJfQotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGZlX2JoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGV0LT5ldF9yb290X2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02NjIsNyArOTc3LDcgQEAKIAl9CiAKIAkvKiBMaW5rIHRoZSBuZXcgYnJhbmNoIGludG8gdGhlIHJlc3Qgb2YgdGhlIHRyZWUgKGVsIHdpbGwKLQkgKiBlaXRoZXIgYmUgb24gdGhlIGZlLCBvciB0aGUgZXh0ZW50IGJsb2NrIHBhc3NlZCBpbi4gKi8KKwkgKiBlaXRoZXIgYmUgb24gdGhlIHJvb3RfYmgsIG9yIHRoZSBleHRlbnQgYmxvY2sgcGFzc2VkIGluLiAqLwogCWkgPSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKTsKIAllbC0+bF9yZWNzW2ldLmVfYmxrbm8gPSBjcHVfdG9fbGU2NChuZXh0X2Jsa25vKTsKIAllbC0+bF9yZWNzW2ldLmVfY3BvcyA9IGNwdV90b19sZTMyKG5ld19jcG9zKTsKQEAgLTY3MSw3ICs5ODYsNyBAQAogCiAJLyogZmUgbmVlZHMgYSBuZXcgbGFzdCBleHRlbnQgYmxvY2sgcG9pbnRlciwgYXMgZG9lcyB0aGUKIAkgKiBuZXh0X2xlYWYgb24gdGhlIHByZXZpb3VzbHkgbGFzdC1leHRlbnQtYmxvY2suICovCi0JZmUtPmlfbGFzdF9lYl9ibGsgPSBjcHVfdG9fbGU2NChuZXdfbGFzdF9lYl9ibGspOworCW9jZnMyX2V0X3NldF9sYXN0X2ViX2JsayhldCwgbmV3X2xhc3RfZWJfYmxrKTsKIAogCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKikgKCpsYXN0X2ViX2JoKS0+Yl9kYXRhOwogCWViLT5oX25leHRfbGVhZl9ibGsgPSBjcHVfdG9fbGU2NChuZXdfbGFzdF9lYl9ibGspOwpAQCAtNjc5LDcgKzk5NCw3IEBACiAJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsICpsYXN0X2ViX2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBmZV9iaCk7CisJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGV0LT5ldF9yb290X2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCWlmIChlYl9iaCkgewpAQCAtNzAwLDggKzEwMTUsNyBAQAogYmFpbDoKIAlpZiAobmV3X2ViX2JocykgewogCQlmb3IgKGkgPSAwOyBpIDwgbmV3X2Jsb2NrczsgaSsrKQotCQkJaWYgKG5ld19lYl9iaHNbaV0pCi0JCQkJYnJlbHNlKG5ld19lYl9iaHNbaV0pOworCQkJYnJlbHNlKG5ld19lYl9iaHNbaV0pOwogCQlrZnJlZShuZXdfZWJfYmhzKTsKIAl9CiAKQEAgLTcxNywxNiArMTAzMSwxNSBAQAogc3RhdGljIGludCBvY2ZzMl9zaGlmdF90cmVlX2RlcHRoKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSAgaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAorCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAogCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X25ld19lYl9iaCkKIHsKIAlpbnQgc3RhdHVzLCBpOwogCXUzMiBuZXdfY2x1c3RlcnM7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfZWJfYmggPSBOVUxMOwotCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwotCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAgKmZlX2VsOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAgKnJvb3RfZWw7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICAqZWJfZWw7CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKQEAgLTc0Niw4ICsxMDU5LDcgQEAKIAl9CiAKIAllYl9lbCA9ICZlYi0+aF9saXN0OwotCWZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgZmVfYmgtPmJfZGF0YTsKLQlmZV9lbCA9ICZmZS0+aWQyLmlfbGlzdDsKKwlyb290X2VsID0gZXQtPmV0X3Jvb3RfZWw7CiAKIAlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBuZXdfZWJfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKQEAgLTc1NiwxMSArMTA2OCwxMSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JLyogY29weSB0aGUgZmUgZGF0YSBpbnRvIHRoZSBuZXcgZXh0ZW50IGJsb2NrICovCi0JZWJfZWwtPmxfdHJlZV9kZXB0aCA9IGZlX2VsLT5sX3RyZWVfZGVwdGg7Ci0JZWJfZWwtPmxfbmV4dF9mcmVlX3JlYyA9IGZlX2VsLT5sX25leHRfZnJlZV9yZWM7Ci0JZm9yKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoZmVfZWwtPmxfbmV4dF9mcmVlX3JlYyk7IGkrKykKLQkJZWJfZWwtPmxfcmVjc1tpXSA9IGZlX2VsLT5sX3JlY3NbaV07CisJLyogY29weSB0aGUgcm9vdCBleHRlbnQgbGlzdCBkYXRhIGludG8gdGhlIG5ldyBleHRlbnQgYmxvY2sgKi8KKwllYl9lbC0+bF90cmVlX2RlcHRoID0gcm9vdF9lbC0+bF90cmVlX2RlcHRoOworCWViX2VsLT5sX25leHRfZnJlZV9yZWMgPSByb290X2VsLT5sX25leHRfZnJlZV9yZWM7CisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KHJvb3RfZWwtPmxfbmV4dF9mcmVlX3JlYyk7IGkrKykKKwkJZWJfZWwtPmxfcmVjc1tpXSA9IHJvb3RfZWwtPmxfcmVjc1tpXTsKIAogCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBuZXdfZWJfYmgpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC03NjgsNyArMTA4MCw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBmZV9iaCwKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBldC0+ZXRfcm9vdF9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNzc3LDIxICsxMDg5LDIxIEBACiAKIAluZXdfY2x1c3RlcnMgPSBvY2ZzMl9zdW1fcmlnaHRtb3N0X3JlYyhlYl9lbCk7CiAKLQkvKiB1cGRhdGUgZmUgbm93ICovCi0JbGUxNl9hZGRfY3B1KCZmZV9lbC0+bF90cmVlX2RlcHRoLCAxKTsKLQlmZV9lbC0+bF9yZWNzWzBdLmVfY3BvcyA9IDA7Ci0JZmVfZWwtPmxfcmVjc1swXS5lX2Jsa25vID0gZWItPmhfYmxrbm87Ci0JZmVfZWwtPmxfcmVjc1swXS5lX2ludF9jbHVzdGVycyA9IGNwdV90b19sZTMyKG5ld19jbHVzdGVycyk7Ci0JZm9yKGkgPSAxOyBpIDwgbGUxNl90b19jcHUoZmVfZWwtPmxfbmV4dF9mcmVlX3JlYyk7IGkrKykKLQkJbWVtc2V0KCZmZV9lbC0+bF9yZWNzW2ldLCAwLCBzaXplb2Yoc3RydWN0IG9jZnMyX2V4dGVudF9yZWMpKTsKLQlmZV9lbC0+bF9uZXh0X2ZyZWVfcmVjID0gY3B1X3RvX2xlMTYoMSk7CisJLyogdXBkYXRlIHJvb3RfYmggbm93ICovCisJbGUxNl9hZGRfY3B1KCZyb290X2VsLT5sX3RyZWVfZGVwdGgsIDEpOworCXJvb3RfZWwtPmxfcmVjc1swXS5lX2Nwb3MgPSAwOworCXJvb3RfZWwtPmxfcmVjc1swXS5lX2Jsa25vID0gZWItPmhfYmxrbm87CisJcm9vdF9lbC0+bF9yZWNzWzBdLmVfaW50X2NsdXN0ZXJzID0gY3B1X3RvX2xlMzIobmV3X2NsdXN0ZXJzKTsKKwlmb3IgKGkgPSAxOyBpIDwgbGUxNl90b19jcHUocm9vdF9lbC0+bF9uZXh0X2ZyZWVfcmVjKTsgaSsrKQorCQltZW1zZXQoJnJvb3RfZWwtPmxfcmVjc1tpXSwgMCwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKSk7CisJcm9vdF9lbC0+bF9uZXh0X2ZyZWVfcmVjID0gY3B1X3RvX2xlMTYoMSk7CiAKIAkvKiBJZiB0aGlzIGlzIG91ciAxc3QgdHJlZSBkZXB0aCBzaGlmdCwgdGhlbiBsYXN0X2ViX2JsawogCSAqIGJlY29tZXMgdGhlIGFsbG9jYXRlZCBleHRlbnQgYmxvY2sgKi8KLQlpZiAoZmVfZWwtPmxfdHJlZV9kZXB0aCA9PSBjcHVfdG9fbGUxNigxKSkKLQkJZmUtPmlfbGFzdF9lYl9ibGsgPSBlYi0+aF9ibGtubzsKKwlpZiAocm9vdF9lbC0+bF90cmVlX2RlcHRoID09IGNwdV90b19sZTE2KDEpKQorCQlvY2ZzMl9ldF9zZXRfbGFzdF9lYl9ibGsoZXQsIGxlNjRfdG9fY3B1KGViLT5oX2Jsa25vKSk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZmVfYmgpOworCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBldC0+ZXRfcm9vdF9iaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC04MDEsOCArMTExMyw3IEBACiAJbmV3X2ViX2JoID0gTlVMTDsKIAlzdGF0dXMgPSAwOwogYmFpbDoKLQlpZiAobmV3X2ViX2JoKQotCQlicmVsc2UobmV3X2ViX2JoKTsKKwlicmVsc2UobmV3X2ViX2JoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CkBAIC04MTcsMjIgKzExMjgsMjEgQEAKICAqIDEpIGEgbG93ZXN0IGV4dGVudCBibG9jayBpcyBmb3VuZCwgdGhlbiB3ZSBwYXNzIGl0IGJhY2sgaW4KICAqICAgICpsb3dlc3RfZWJfYmggYW5kIHJldHVybiAnMCcKICAqCi0gKiAyKSB0aGUgc2VhcmNoIGZhaWxzIHRvIGZpbmQgYW55dGhpbmcsIGJ1dCB0aGUgZGlub2RlIGhhcyByb29tLiBXZQorICogMikgdGhlIHNlYXJjaCBmYWlscyB0byBmaW5kIGFueXRoaW5nLCBidXQgdGhlIHJvb3RfZWwgaGFzIHJvb20uIFdlCiAgKiAgICBwYXNzIE5VTEwgYmFjayBpbiAqbG93ZXN0X2ViX2JoLCBidXQgc3RpbGwgcmV0dXJuICcwJwogICoKLSAqIDMpIHRoZSBzZWFyY2ggZmFpbHMgdG8gZmluZCBhbnl0aGluZyBBTkQgdGhlIGRpbm9kZSBpcyBmdWxsLCBpbgorICogMykgdGhlIHNlYXJjaCBmYWlscyB0byBmaW5kIGFueXRoaW5nIEFORCB0aGUgcm9vdF9lbCBpcyBmdWxsLCBpbgogICogICAgd2hpY2ggY2FzZSB3ZSByZXR1cm4gPiAwCiAgKgogICogcmV0dXJuIHN0YXR1cyA8IDAgaW5kaWNhdGVzIGFuIGVycm9yLgogICovCiBzdGF0aWMgaW50IG9jZnMyX2ZpbmRfYnJhbmNoX3RhcmdldChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqdGFyZ2V0X2JoKQogewogCWludCBzdGF0dXMgPSAwLCBpOwogCXU2NCBibGtubzsKLQlzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZTsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYjsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgICplbDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKQEAgLTg0Miw4ICsxMTUyLDcgQEAKIAogCSp0YXJnZXRfYmggPSBOVUxMOwogCi0JZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBmZV9iaC0+Yl9kYXRhOwotCWVsID0gJmZlLT5pZDIuaV9saXN0OworCWVsID0gZXQtPmV0X3Jvb3RfZWw7CiAKIAl3aGlsZShsZTE2X3RvX2NwdShlbC0+bF90cmVlX2RlcHRoKSA+IDEpIHsKIAkJaWYgKGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpID09IDApIHsKQEAgLTg2NCwxMyArMTE3MywxMCBAQAogCQkJZ290byBiYWlsOwogCQl9CiAKLQkJaWYgKGJoKSB7Ci0JCQlicmVsc2UoYmgpOwotCQkJYmggPSBOVUxMOwotCQl9CisJCWJyZWxzZShiaCk7CisJCWJoID0gTlVMTDsKIAotCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgYmxrbm8sICZiaCwgT0NGUzJfQkhfQ0FDSEVELAotCQkJCQkgIGlub2RlKTsKKwkJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgYmxrbm8sICZiaCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWw7CkBAIC04ODYsOCArMTE5Miw3IEBACiAKIAkJaWYgKGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpIDwKIAkJICAgIGxlMTZfdG9fY3B1KGVsLT5sX2NvdW50KSkgewotCQkJaWYgKGxvd2VzdF9iaCkKLQkJCQlicmVsc2UobG93ZXN0X2JoKTsKKwkJCWJyZWxzZShsb3dlc3RfYmgpOwogCQkJbG93ZXN0X2JoID0gYmg7CiAJCQlnZXRfYmgobG93ZXN0X2JoKTsKIAkJfQpAQCAtODk1LDE0ICsxMjAwLDEzIEBACiAKIAkvKiBJZiB3ZSBkaWRuJ3QgZmluZCBvbmUgYW5kIHRoZSBmZSBkb2Vzbid0IGhhdmUgYW55IHJvb20sCiAJICogdGhlbiByZXR1cm4gJzEnICovCi0JaWYgKCFsb3dlc3RfYmgKLQkgICAgJiYgKGZlLT5pZDIuaV9saXN0LmxfbmV4dF9mcmVlX3JlYyA9PSBmZS0+aWQyLmlfbGlzdC5sX2NvdW50KSkKKwllbCA9IGV0LT5ldF9yb290X2VsOworCWlmICghbG93ZXN0X2JoICYmIChlbC0+bF9uZXh0X2ZyZWVfcmVjID09IGVsLT5sX2NvdW50KSkKIAkJc3RhdHVzID0gMTsKIAogCSp0YXJnZXRfYmggPSBsb3dlc3RfYmg7CiBiYWlsOgotCWlmIChiaCkKLQkJYnJlbHNlKGJoKTsKKwlicmVsc2UoYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTkxOSwxOSArMTIyMywxOSBAQAogICogKmxhc3RfZWJfYmggd2lsbCBiZSB1cGRhdGVkIGJ5IG9jZnMyX2FkZF9icmFuY2goKS4KICAqLwogc3RhdGljIGludCBvY2ZzMl9ncm93X3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsIGludCAqZmluYWxfZGVwdGgsCisJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LCBpbnQgKmZpbmFsX2RlcHRoLAogCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqbGFzdF9lYl9iaCwKIAkJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjKQogewogCWludCByZXQsIHNoaWZ0OwotCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOwotCWludCBkZXB0aCA9IGxlMTZfdG9fY3B1KGRpLT5pZDIuaV9saXN0LmxfdHJlZV9kZXB0aCk7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9IGV0LT5ldF9yb290X2VsOworCWludCBkZXB0aCA9IGxlMTZfdG9fY3B1KGVsLT5sX3RyZWVfZGVwdGgpOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCiAJQlVHX09OKG1ldGFfYWMgPT0gTlVMTCk7CiAKLQlzaGlmdCA9IG9jZnMyX2ZpbmRfYnJhbmNoX3RhcmdldChvc2IsIGlub2RlLCBkaV9iaCwgJmJoKTsKKwlzaGlmdCA9IG9jZnMyX2ZpbmRfYnJhbmNoX3RhcmdldChvc2IsIGlub2RlLCBldCwgJmJoKTsKIAlpZiAoc2hpZnQgPCAwKSB7CiAJCXJldCA9IHNoaWZ0OwogCQltbG9nX2Vycm5vKHJldCk7CkBAIC05NDgsNyArMTI1Miw3IEBACiAJCS8qIG9jZnMyX3NoaWZ0X3RyZWVfZGVwdGggd2lsbCByZXR1cm4gdXMgYSBidWZmZXIgd2l0aAogCQkgKiB0aGUgbmV3IGV4dGVudCBibG9jayAoc28gd2UgY2FuIHBhc3MgdGhhdCB0bwogCQkgKiBvY2ZzMl9hZGRfYnJhbmNoKS4gKi8KLQkJcmV0ID0gb2NmczJfc2hpZnRfdHJlZV9kZXB0aChvc2IsIGhhbmRsZSwgaW5vZGUsIGRpX2JoLAorCQlyZXQgPSBvY2ZzMl9zaGlmdF90cmVlX2RlcHRoKG9zYiwgaGFuZGxlLCBpbm9kZSwgZXQsCiAJCQkJCSAgICAgbWV0YV9hYywgJmJoKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTk3NSw3ICsxMjc5LDcgQEAKIAkvKiBjYWxsIG9jZnMyX2FkZF9icmFuY2ggdG8gYWRkIHRoZSBmaW5hbCBwYXJ0IG9mIHRoZSB0cmVlIHdpdGgKIAkgKiB0aGUgbmV3IGRhdGEuICovCiAJbWxvZygwLCAiYWRkIGJyYW5jaC4gYmggPSAlcFxuIiwgYmgpOwotCXJldCA9IG9jZnMyX2FkZF9icmFuY2gob3NiLCBoYW5kbGUsIGlub2RlLCBkaV9iaCwgYmgsIGxhc3RfZWJfYmgsCisJcmV0ID0gb2NmczJfYWRkX2JyYW5jaChvc2IsIGhhbmRsZSwgaW5vZGUsIGV0LCBiaCwgbGFzdF9lYl9iaCwKIAkJCSAgICAgICBtZXRhX2FjKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0xMjM2LDggKzE1NDAsNyBAQAogCiAJCWJyZWxzZShiaCk7CiAJCWJoID0gTlVMTDsKLQkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGJsa25vLAotCQkJCSAgICAgICAmYmgsIE9DRlMyX0JIX0NBQ0hFRCwgaW5vZGUpOworCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBibGtubywgJmJoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0yMDU4LDExICsyMzYxLDExIEBACiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHRfcGF0aCwKIAkJCQkgICAgIGludCBzdWJ0cmVlX2luZGV4LAogCQkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCi0JCQkJICAgICBpbnQgKmRlbGV0ZWQpCisJCQkJICAgICBpbnQgKmRlbGV0ZWQsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQogewogCWludCByZXQsIGksIGRlbF9yaWdodF9zdWJ0cmVlID0gMCwgcmlnaHRfaGFzX2VtcHR5ID0gMDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJvb3RfYmgsICpkaV9iaCA9IHBhdGhfcm9vdF9iaChyaWdodF9wYXRoKTsKLQlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJvb3RfYmgsICpldF9yb290X2JoID0gcGF0aF9yb290X2JoKHJpZ2h0X3BhdGgpOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqcmlnaHRfbGVhZl9lbCwgKmxlZnRfbGVhZl9lbDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYjsKIApAQCAtMjExNCw3ICsyNDE3LDcgQEAKIAkJICogV2UgaGF2ZSB0byB1cGRhdGUgaV9sYXN0X2ViX2JsayBkdXJpbmcgdGhlIG1ldGEKIAkJICogZGF0YSBkZWxldGUuCiAJCSAqLwotCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBkaV9iaCwKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZXRfcm9vdF9iaCwKIAkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yMTg5LDcgKzI0OTIsNyBAQAogCQlvY2ZzMl91cGRhdGVfZWRnZV9sZW5ndGhzKGlub2RlLCBoYW5kbGUsIGxlZnRfcGF0aCk7CiAKIAkJZWIgPSAoc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqKXBhdGhfbGVhZl9iaChsZWZ0X3BhdGgpLT5iX2RhdGE7Ci0JCWRpLT5pX2xhc3RfZWJfYmxrID0gZWItPmhfYmxrbm87CisJCW9jZnMyX2V0X3NldF9sYXN0X2ViX2JsayhldCwgbGU2NF90b19jcHUoZWItPmhfYmxrbm8pKTsKIAogCQkvKgogCQkgKiBSZW1vdmFsIG9mIHRoZSBleHRlbnQgaW4gdGhlIGxlZnQgbGVhZiB3YXMgc2tpcHBlZApAQCAtMjE5OSw3ICsyNTAyLDcgQEAKIAkJaWYgKHJpZ2h0X2hhc19lbXB0eSkKIAkJCW9jZnMyX3JlbW92ZV9lbXB0eV9leHRlbnQobGVmdF9sZWFmX2VsKTsKIAotCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZGlfYmgpOworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZXRfcm9vdF9iaCk7CiAJCWlmIChyZXQpCiAJCQltbG9nX2Vycm5vKHJldCk7CiAKQEAgLTIzMjIsNyArMjYyNSw4IEBACiAJCQkJICAgIGhhbmRsZV90ICpoYW5kbGUsIGludCBvcmlnX2NyZWRpdHMsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCSAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYywKLQkJCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKiplbXB0eV9leHRlbnRfcGF0aCkKKwkJCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKiplbXB0eV9leHRlbnRfcGF0aCwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKIHsKIAlpbnQgcmV0LCBzdWJ0cmVlX3Jvb3QsIGRlbGV0ZWQ7CiAJdTMyIHJpZ2h0X2Nwb3M7CkBAIC0yMzk1LDcgKzI2OTksNyBAQAogCiAJCXJldCA9IG9jZnMyX3JvdGF0ZV9zdWJ0cmVlX2xlZnQoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoLAogCQkJCQkJcmlnaHRfcGF0aCwgc3VidHJlZV9yb290LAotCQkJCQkJZGVhbGxvYywgJmRlbGV0ZWQpOworCQkJCQkJZGVhbGxvYywgJmRlbGV0ZWQsIGV0KTsKIAkJaWYgKHJldCA9PSAtRUFHQUlOKSB7CiAJCQkvKgogCQkJICogVGhlIHJvdGF0aW9uIGhhcyB0byB0ZW1wb3JhcmlseSBzdG9wIGR1ZSB0bwpAQCAtMjQzOCwyOSArMjc0MiwyMCBAQAogfQogCiBzdGF0aWMgaW50IG9jZnMyX3JlbW92ZV9yaWdodG1vc3RfcGF0aChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLAotCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKLQkJCQkgICAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCisJCQkJc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCisJCQkJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCisJCQkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKIHsKIAlpbnQgcmV0LCBzdWJ0cmVlX2luZGV4OwogCXUzMiBjcG9zOwogCXN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGggPSBOVUxMOwotCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWw7CiAKLQkvKgotCSAqIFhYWDogVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgcm9vdCBpcyBhbiBpbm9kZSwgd2hpY2ggaXMKLQkgKiB0cnVlIGZvciBub3cgYnV0IG1heSBjaGFuZ2UgYXMgdHJlZSBjb2RlIGdldHMgZ2VuZXJpYy4KLQkgKi8KLQlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopcGF0aF9yb290X2JoKHBhdGgpLT5iX2RhdGE7Ci0JaWYgKCFPQ0ZTMl9JU19WQUxJRF9ESU5PREUoZGkpKSB7Ci0JCXJldCA9IC1FSU87Ci0JCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAotCQkJICAgICJJbm9kZSAlbGx1IGhhcyBpbnZhbGlkIHBhdGggcm9vdCIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8pOwotCQlnb3RvIG91dDsKLQl9CiAKKwlyZXQgPSBvY2ZzMl9ldF9zYW5pdHlfY2hlY2soaW5vZGUsIGV0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKIAkvKgogCSAqIFRoZXJlJ3MgdHdvIHdheXMgd2UgaGFuZGxlIHRoaXMgZGVwZW5kaW5nIG9uCiAJICogd2hldGhlciBwYXRoIGlzIHRoZSBvbmx5IGV4aXN0aW5nIG9uZS4KQEAgLTI1MTcsNyArMjgxMiw3IEBACiAJCW9jZnMyX3VwZGF0ZV9lZGdlX2xlbmd0aHMoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoKTsKIAogCQllYiA9IChzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICopcGF0aF9sZWFmX2JoKGxlZnRfcGF0aCktPmJfZGF0YTsKLQkJZGktPmlfbGFzdF9lYl9ibGsgPSBlYi0+aF9ibGtubzsKKwkJb2NmczJfZXRfc2V0X2xhc3RfZWJfYmxrKGV0LCBsZTY0X3RvX2NwdShlYi0+aF9ibGtubykpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqICdwYXRoJyBpcyBhbHNvIHRoZSBsZWZ0bW9zdCBwYXRoIHdoaWNoCkBAIC0yNTI4LDEyICsyODIzLDEyIEBACiAJCSAqLwogCQlvY2ZzMl91bmxpbmtfcGF0aChpbm9kZSwgaGFuZGxlLCBkZWFsbG9jLCBwYXRoLCAxKTsKIAotCQllbCA9ICZkaS0+aWQyLmlfbGlzdDsKKwkJZWwgPSBldC0+ZXRfcm9vdF9lbDsKIAkJZWwtPmxfdHJlZV9kZXB0aCA9IDA7CiAJCWVsLT5sX25leHRfZnJlZV9yZWMgPSAwOwogCQltZW1zZXQoJmVsLT5sX3JlY3NbMF0sIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYykpOwogCi0JCWRpLT5pX2xhc3RfZWJfYmxrID0gMDsKKwkJb2NmczJfZXRfc2V0X2xhc3RfZWJfYmxrKGV0LCAwKTsKIAl9CiAKIAlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgcGF0aF9yb290X2JoKHBhdGgpKTsKQEAgLTI1NjEsNyArMjg1Niw4IEBACiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfcm90YXRlX3RyZWVfbGVmdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCi0JCQkJICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKKwkJCQkgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAorCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKIHsKIAlpbnQgcmV0LCBvcmlnX2NyZWRpdHMgPSBoYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHM7CiAJc3RydWN0IG9jZnMyX3BhdGggKnRtcF9wYXRoID0gTlVMTCwgKnJlc3RhcnRfcGF0aCA9IE5VTEw7CkBAIC0yNTc1LDcgKzI4NzEsNyBAQAogCWlmIChwYXRoLT5wX3RyZWVfZGVwdGggPT0gMCkgewogcmlnaHRtb3N0X25vX2RlbGV0ZToKIAkJLyoKLQkJICogSW4taW5vZGUgZXh0ZW50cy4gVGhpcyBpcyB0cml2aWFsbHkgaGFuZGxlZCwgc28gZG8KKwkJICogSW5saW5lIGV4dGVudHMuIFRoaXMgaXMgdHJpdmlhbGx5IGhhbmRsZWQsIHNvIGRvCiAJCSAqIGl0IHVwIGZyb250LgogCQkgKi8KIAkJcmV0ID0gb2NmczJfcm90YXRlX3JpZ2h0bW9zdF9sZWFmX2xlZnQoaW5vZGUsIGhhbmRsZSwKQEAgLTI2MjksNyArMjkyNSw3IEBACiAJCSAqLwogCiAJCXJldCA9IG9jZnMyX3JlbW92ZV9yaWdodG1vc3RfcGF0aChpbm9kZSwgaGFuZGxlLCBwYXRoLAotCQkJCQkJICBkZWFsbG9jKTsKKwkJCQkJCSAgZGVhbGxvYywgZXQpOwogCQlpZiAocmV0KQogCQkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTI2NDEsNyArMjkzNyw3IEBACiAJICovCiB0cnlfcm90YXRlOgogCXJldCA9IF9fb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBvcmlnX2NyZWRpdHMsIHBhdGgsCi0JCQkJICAgICAgIGRlYWxsb2MsICZyZXN0YXJ0X3BhdGgpOworCQkJCSAgICAgICBkZWFsbG9jLCAmcmVzdGFydF9wYXRoLCBldCk7CiAJaWYgKHJldCAmJiByZXQgIT0gLUVBR0FJTikgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMjY1Myw3ICsyOTQ5LDcgQEAKIAogCQlyZXQgPSBfX29jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaW5vZGUsIGhhbmRsZSwgb3JpZ19jcmVkaXRzLAogCQkJCQkgICAgICAgdG1wX3BhdGgsIGRlYWxsb2MsCi0JCQkJCSAgICAgICAmcmVzdGFydF9wYXRoKTsKKwkJCQkJICAgICAgICZyZXN0YXJ0X3BhdGgsIGV0KTsKIAkJaWYgKHJldCAmJiByZXQgIT0gLUVBR0FJTikgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0yOTM5LDYgKzMyMzUsNyBAQAogCQkJCWhhbmRsZV90ICpoYW5kbGUsCiAJCQkJc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnNwbGl0X3JlYywKIAkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYywKKwkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCWludCBpbmRleCkKIHsKIAlpbnQgcmV0LCBpLCBzdWJ0cmVlX2luZGV4ID0gMCwgaGFzX2VtcHR5X2V4dGVudCA9IDA7CkBAIC0zMDU5LDcgKzMzNTYsOCBAQAogCQkgICAgbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgPT0gMSkgewogCiAJCQlyZXQgPSBvY2ZzMl9yZW1vdmVfcmlnaHRtb3N0X3BhdGgoaW5vZGUsIGhhbmRsZSwKLQkJCQkJCQkgIHJpZ2h0X3BhdGgsIGRlYWxsb2MpOworCQkJCQkJCSAgcmlnaHRfcGF0aCwKKwkJCQkJCQkgIGRlYWxsb2MsIGV0KTsKIAkJCWlmIChyZXQpIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CiAJCQkJZ290byBvdXQ7CkBAIC0zMDg2LDcgKzMzODQsOCBAQAogCQkJCSAgICAgaW50IHNwbGl0X2luZGV4LAogCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnNwbGl0X3JlYywKIAkJCQkgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAotCQkJCSAgICAgc3RydWN0IG9jZnMyX21lcmdlX2N0eHQgKmN0eHQpCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfbWVyZ2VfY3R4dCAqY3R4dCwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCiAKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTMxMDQsNyArMzQwMyw3IEBACiAJCSAqIGlsbGVnYWwuCiAJCSAqLwogCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsCi0JCQkJCSAgICAgZGVhbGxvYyk7CisJCQkJCSAgICAgZGVhbGxvYywgZXQpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTMxNDcsNyArMzQ0Niw4IEBACiAJCUJVR19PTighb2NmczJfaXNfZW1wdHlfZXh0ZW50KCZlbC0+bF9yZWNzWzBdKSk7CiAKIAkJLyogVGhlIG1lcmdlIGxlZnQgdXMgd2l0aCBhbiBlbXB0eSBleHRlbnQsIHJlbW92ZSBpdC4gKi8KLQkJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBwYXRoLCBkZWFsbG9jKTsKKwkJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBwYXRoLAorCQkJCQkgICAgIGRlYWxsb2MsIGV0KTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC0zMTYxLDcgKzM0NjEsNyBAQAogCQkgKi8KIAkJcmV0ID0gb2NmczJfbWVyZ2VfcmVjX2xlZnQoaW5vZGUsIHBhdGgsCiAJCQkJCSAgIGhhbmRsZSwgcmVjLAotCQkJCQkgICBkZWFsbG9jLAorCQkJCQkgICBkZWFsbG9jLCBldCwKIAkJCQkJICAgc3BsaXRfaW5kZXgpOwogCiAJCWlmIChyZXQpIHsKQEAgLTMxNzAsNyArMzQ3MCw3IEBACiAJCX0KIAogCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsCi0JCQkJCSAgICAgZGVhbGxvYyk7CisJCQkJCSAgICAgZGVhbGxvYywgZXQpOwogCQkvKgogCQkgKiBFcnJvciBmcm9tIHRoaXMgbGFzdCByb3RhdGUgaXMgbm90IGNyaXRpY2FsLCBzbwogCQkgKiBwcmludCBidXQgZG9uJ3QgYnViYmxlIGl0IHVwLgpAQCAtMzE5MCw3ICszNDkwLDcgQEAKIAkJCXJldCA9IG9jZnMyX21lcmdlX3JlY19sZWZ0KGlub2RlLAogCQkJCQkJICAgcGF0aCwKIAkJCQkJCSAgIGhhbmRsZSwgc3BsaXRfcmVjLAotCQkJCQkJICAgZGVhbGxvYywKKwkJCQkJCSAgIGRlYWxsb2MsIGV0LAogCQkJCQkJICAgc3BsaXRfaW5kZXgpOwogCQkJaWYgKHJldCkgewogCQkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTMyMTMsNyArMzUxMyw3IEBACiAJCQkgKiBvdXIgbGVhZi4gVHJ5IHRvIHJvdGF0ZSBpdCBhd2F5LgogCQkJICovCiAJCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsCi0JCQkJCQkgICAgIGRlYWxsb2MpOworCQkJCQkJICAgICBkZWFsbG9jLCBldCk7CiAJCQlpZiAocmV0KQogCQkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCXJldCA9IDA7CkBAIC0zMzQ3LDE2ICszNjQ3LDYgQEAKIAlvY2ZzMl9yb3RhdGVfbGVhZihlbCwgaW5zZXJ0X3JlYyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl91cGRhdGVfZGlub2RlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCQlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSwKLQkJCQkJCXUzMiBjbHVzdGVycykKLXsKLQlsZTMyX2FkZF9jcHUoJmRpLT5pX2NsdXN0ZXJzLCBjbHVzdGVycyk7Ci0Jc3Bpbl9sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfbG9jayk7Ci0JT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzID0gbGUzMl90b19jcHUoZGktPmlfY2x1c3RlcnMpOwotCXNwaW5fdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfbG9jayk7Ci19Ci0KIHN0YXRpYyB2b2lkIG9jZnMyX2FkanVzdF9yaWdodG1vc3RfcmVjb3JkcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgICBoYW5kbGVfdCAqaGFuZGxlLAogCQkJCQkgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKQEAgLTM1NTgsOCArMzg0OCw4IEBACiB9CiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgZG9lcyBpbnNlcnRzIG9uIGFuIGFsbG9jYXRpb24gYi10cmVlLiBGb3IgZGlub2RlCi0gKiBsaXN0cywgb2NmczJfaW5zZXJ0X2F0X2xlYWYoKSBpcyBjYWxsZWQgZGlyZWN0bHkuCisgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgZG9lcyBpbnNlcnRzIG9uIGFuIGFsbG9jYXRpb24gYi10cmVlLiBGb3IgdHJlZQorICogZGVwdGggPSAwLCBvY2ZzMl9pbnNlcnRfYXRfbGVhZigpIGlzIGNhbGxlZCBkaXJlY3RseS4KICAqCiAgKiByaWdodF9wYXRoIGlzIHRoZSBwYXRoIHdlIHdhbnQgdG8gZG8gdGhlIGFjdHVhbCBpbnNlcnQKICAqIGluLiBsZWZ0X3BhdGggc2hvdWxkIG9ubHkgYmUgcGFzc2VkIGluIGlmIHdlIG5lZWQgdG8gdXBkYXRlIHRoYXQKQEAgLTM2NTYsNyArMzk0Niw3IEBACiAKIHN0YXRpYyBpbnQgb2NmczJfZG9faW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMsCiAJCQkJICBzdHJ1Y3Qgb2NmczJfaW5zZXJ0X3R5cGUgKnR5cGUpCiB7CkBAIC0zNjY0LDEzICszOTU0LDExIEBACiAJdTMyIGNwb3M7CiAJc3RydWN0IG9jZnMyX3BhdGggKnJpZ2h0X3BhdGggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9wYXRoICpsZWZ0X3BhdGggPSBOVUxMOwotCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWw7CiAKLQlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGRpX2JoLT5iX2RhdGE7Ci0JZWwgPSAmZGktPmlkMi5pX2xpc3Q7CisJZWwgPSBldC0+ZXRfcm9vdF9lbDsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGRpX2JoLAorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGV0LT5ldF9yb290X2JoLAogCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTM2ODIsNyArMzk3MCw3IEBACiAJCWdvdG8gb3V0X3VwZGF0ZV9jbHVzdGVyczsKIAl9CiAKLQlyaWdodF9wYXRoID0gb2NmczJfbmV3X2lub2RlX3BhdGgoZGlfYmgpOworCXJpZ2h0X3BhdGggPSBvY2ZzMl9uZXdfcGF0aChldC0+ZXRfcm9vdF9iaCwgZXQtPmV0X3Jvb3RfZWwpOwogCWlmICghcmlnaHRfcGF0aCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0zNzMyLDcgKzQwMjAsNyBAQAogCQkgKiBvY2ZzMl9yb3RhdGVfdHJlZV9yaWdodCgpIG1pZ2h0IGhhdmUgZXh0ZW5kZWQgdGhlCiAJCSAqIHRyYW5zYWN0aW9uIHdpdGhvdXQgcmUtam91cm5hbGluZyBvdXIgdHJlZSByb290LgogCQkgKi8KLQkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZGlfYmgsCisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGV0LT5ldF9yb290X2JoLAogCQkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTM3NTcsMTAgKzQwNDUsMTAgQEAKIAogb3V0X3VwZGF0ZV9jbHVzdGVyczoKIAlpZiAodHlwZS0+aW5zX3NwbGl0ID09IFNQTElUX05PTkUpCi0JCW9jZnMyX3VwZGF0ZV9kaW5vZGVfY2x1c3RlcnMoaW5vZGUsIGRpLAotCQkJCQkgICAgIGxlMTZfdG9fY3B1KGluc2VydF9yZWMtPmVfbGVhZl9jbHVzdGVycykpOworCQlvY2ZzMl9ldF91cGRhdGVfY2x1c3RlcnMoaW5vZGUsIGV0LAorCQkJCQkgbGUxNl90b19jcHUoaW5zZXJ0X3JlYy0+ZV9sZWFmX2NsdXN0ZXJzKSk7CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZGlfYmgpOworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBldC0+ZXRfcm9vdF9iaCk7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCkBAIC0zODkwLDcgKzQxNzgsOCBAQAogc3RhdGljIHZvaWQgb2NmczJfZmlndXJlX2NvbnRpZ190eXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfaW5zZXJ0X3R5cGUgKmluc2VydCwKIAkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwsCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqaW5zZXJ0X3JlYykKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICppbnNlcnRfcmVjLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKIHsKIAlpbnQgaTsKIAllbnVtIG9jZnMyX2NvbnRpZ190eXBlIGNvbnRpZ190eXBlID0gQ09OVElHX05PTkU7CkBAIC0zOTA2LDYgKzQxOTUsMjEgQEAKIAkJfQogCX0KIAlpbnNlcnQtPmluc19jb250aWcgPSBjb250aWdfdHlwZTsKKworCWlmIChpbnNlcnQtPmluc19jb250aWcgIT0gQ09OVElHX05PTkUpIHsKKwkJc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnJlYyA9CisJCQkJJmVsLT5sX3JlY3NbaW5zZXJ0LT5pbnNfY29udGlnX2luZGV4XTsKKwkJdW5zaWduZWQgaW50IGxlbiA9IGxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKSArCisJCQkJICAgbGUxNl90b19jcHUoaW5zZXJ0X3JlYy0+ZV9sZWFmX2NsdXN0ZXJzKTsKKworCQkvKgorCQkgKiBDYWxsZXIgbWlnaHQgd2FudCB1cyB0byBsaW1pdCB0aGUgc2l6ZSBvZiBleHRlbnRzLCBkb24ndAorCQkgKiBjYWxjdWxhdGUgY29udGlndW91c25lc3MgaWYgd2UgbWlnaHQgZXhjZWVkIHRoYXQgbGltaXQuCisJCSAqLworCQlpZiAoZXQtPmV0X21heF9sZWFmX2NsdXN0ZXJzICYmCisJCSAgICAobGVuID4gZXQtPmV0X21heF9sZWFmX2NsdXN0ZXJzKSkKKwkJCWluc2VydC0+aW5zX2NvbnRpZyA9IENPTlRJR19OT05FOworCX0KIH0KIAogLyoKQEAgLTM5MTQsOCArNDIxOCw4IEBACiAgKiBvY2ZzMl9maWd1cmVfYXBwZW5kaW5nX3R5cGUoKSB3aWxsIGZpZ3VyZSBvdXQgd2hldGhlciB3ZSdsbCBoYXZlIHRvCiAgKiBpbnNlcnQgYXQgdGhlIHRhaWwgb2YgdGhlIHJpZ2h0bW9zdCBsZWFmLgogICoKLSAqIFRoaXMgc2hvdWxkIGFsc28gd29yayBhZ2FpbnN0IHRoZSBkaW5vZGUgbGlzdCBmb3IgdHJlZSdzIHdpdGggMAotICogZGVwdGguIElmIHdlIGNvbnNpZGVyIHRoZSBkaW5vZGUgbGlzdCB0byBiZSB0aGUgcmlnaHRtb3N0IGxlYWYgbm9kZQorICogVGhpcyBzaG91bGQgYWxzbyB3b3JrIGFnYWluc3QgdGhlIHJvb3QgZXh0ZW50IGxpc3QgZm9yIHRyZWUncyB3aXRoIDAKKyAqIGRlcHRoLiBJZiB3ZSBjb25zaWRlciB0aGUgcm9vdCBleHRlbnQgbGlzdCB0byBiZSB0aGUgcmlnaHRtb3N0IGxlYWYgbm9kZQogICogdGhlbiB0aGUgbG9naWMgaGVyZSBtYWtlcyBzZW5zZS4KICAqLwogc3RhdGljIHZvaWQgb2NmczJfZmlndXJlX2FwcGVuZGluZ190eXBlKHN0cnVjdCBvY2ZzMl9pbnNlcnRfdHlwZSAqaW5zZXJ0LApAQCAtMzk2NiwxNCArNDI3MCwxMyBAQAogICogc3RydWN0dXJlLgogICovCiBzdGF0aWMgaW50IG9jZnMyX2ZpZ3VyZV9pbnNlcnRfdHlwZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsYXN0X2ViX2JoLAogCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqaW5zZXJ0X3JlYywKIAkJCQkgICAgaW50ICpmcmVlX3JlY29yZHMsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9pbnNlcnRfdHlwZSAqaW5zZXJ0KQogewogCWludCByZXQ7Ci0Jc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKIAlzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCA9IE5VTEw7CkBAIC0zOTgxLDcgKzQyODQsNyBAQAogCiAJaW5zZXJ0LT5pbnNfc3BsaXQgPSBTUExJVF9OT05FOwogCi0JZWwgPSAmZGktPmlkMi5pX2xpc3Q7CisJZWwgPSBldC0+ZXRfcm9vdF9lbDsKIAlpbnNlcnQtPmluc190cmVlX2RlcHRoID0gbGUxNl90b19jcHUoZWwtPmxfdHJlZV9kZXB0aCk7CiAKIAlpZiAoZWwtPmxfdHJlZV9kZXB0aCkgewpAQCAtMzk5MSw5ICs0Mjk0LDcgQEAKIAkJICogb2NmczJfZmlndXJlX2luc2VydF90eXBlKCkgYW5kIG9jZnMyX2FkZF9icmFuY2goKQogCQkgKiBtYXkgd2FudCBpdCBsYXRlci4KIAkJICovCi0JCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLAotCQkJCSAgICAgICBsZTY0X3RvX2NwdShkaS0+aV9sYXN0X2ViX2JsayksICZiaCwKLQkJCQkgICAgICAgT0NGUzJfQkhfQ0FDSEVELCBpbm9kZSk7CisJCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIG9jZnMyX2V0X2dldF9sYXN0X2ViX2JsayhldCksICZiaCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXhpdChyZXQpOwogCQkJZ290byBvdXQ7CkBAIC00MDE0LDEyICs0MzE1LDEyIEBACiAJCWxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpOwogCiAJaWYgKCFpbnNlcnQtPmluc190cmVlX2RlcHRoKSB7Ci0JCW9jZnMyX2ZpZ3VyZV9jb250aWdfdHlwZShpbm9kZSwgaW5zZXJ0LCBlbCwgaW5zZXJ0X3JlYyk7CisJCW9jZnMyX2ZpZ3VyZV9jb250aWdfdHlwZShpbm9kZSwgaW5zZXJ0LCBlbCwgaW5zZXJ0X3JlYywgZXQpOwogCQlvY2ZzMl9maWd1cmVfYXBwZW5kaW5nX3R5cGUoaW5zZXJ0LCBlbCwgaW5zZXJ0X3JlYyk7CiAJCXJldHVybiAwOwogCX0KIAotCXBhdGggPSBvY2ZzMl9uZXdfaW5vZGVfcGF0aChkaV9iaCk7CisJcGF0aCA9IG9jZnMyX25ld19wYXRoKGV0LT5ldF9yb290X2JoLCBldC0+ZXRfcm9vdF9lbCk7CiAJaWYgKCFwYXRoKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQwNDgsNyArNDM0OSw3IEBACiAgICAgICAgICAqICAgICBpbnRvIHR3byB0eXBlcyBvZiBhcHBlbmRzOiBzaW1wbGUgcmVjb3JkIGFwcGVuZCwgb3IgYQogICAgICAgICAgKiAgICAgcm90YXRlIGluc2lkZSB0aGUgdGFpbCBsZWFmLgogCSAqLwotCW9jZnMyX2ZpZ3VyZV9jb250aWdfdHlwZShpbm9kZSwgaW5zZXJ0LCBlbCwgaW5zZXJ0X3JlYyk7CisJb2NmczJfZmlndXJlX2NvbnRpZ190eXBlKGlub2RlLCBpbnNlcnQsIGVsLCBpbnNlcnRfcmVjLCBldCk7CiAKIAkvKgogCSAqIFRoZSBpbnNlcnQgY29kZSBpc24ndCBxdWl0ZSByZWFkeSB0byBkZWFsIHdpdGggYWxsIGNhc2VzIG9mCkBAIC00MDY5LDcgKzQzNzAsOCBAQAogCSAqIHRoZSBjYXNlIHRoYXQgd2UncmUgZG9pbmcgYSB0YWlsIGFwcGVuZCwgc28gbWF5YmUgd2UgY2FuCiAJICogdGFrZSBhZHZhbnRhZ2Ugb2YgdGhhdCBpbmZvcm1hdGlvbiBzb21laG93LgogCSAqLwotCWlmIChsZTY0X3RvX2NwdShkaS0+aV9sYXN0X2ViX2JsaykgPT0gcGF0aF9sZWFmX2JoKHBhdGgpLT5iX2Jsb2NrbnIpIHsKKwlpZiAob2NmczJfZXRfZ2V0X2xhc3RfZWJfYmxrKGV0KSA9PQorCSAgICBwYXRoX2xlYWZfYmgocGF0aCktPmJfYmxvY2tucikgewogCQkvKgogCQkgKiBPaywgb2NmczJfZmluZF9wYXRoKCkgcmV0dXJuZWQgdXMgdGhlIHJpZ2h0bW9zdAogCQkgKiB0cmVlIHBhdGguIFRoaXMgbWlnaHQgYmUgYW4gYXBwZW5kaW5nIGluc2VydC4gVGhlcmUgYXJlCkBAIC00MDk5LDcgKzQ0MDEsNyBAQAogaW50IG9jZnMyX2luc2VydF9leHRlbnQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQloYW5kbGVfdCAqaGFuZGxlLAogCQkJc3RydWN0IGlub2RlICppbm9kZSwKLQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmgsCisJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJdTMyIGNwb3MsCiAJCQl1NjQgc3RhcnRfYmxrLAogCQkJdTMyIG5ld19jbHVzdGVycywKQEAgLTQxMTIsMjYgKzQ0MTQsMjEgQEAKIAlzdHJ1Y3Qgb2NmczJfaW5zZXJ0X3R5cGUgaW5zZXJ0ID0gezAsIH07CiAJc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgcmVjOwogCi0JQlVHX09OKE9DRlMyX0koaW5vZGUpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCk7Ci0KIAltbG9nKDAsICJhZGQgJXUgY2x1c3RlcnMgYXQgcG9zaXRpb24gJXUgdG8gaW5vZGUgJWxsdVxuIiwKIAkgICAgIG5ld19jbHVzdGVycywgY3BvcywgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8pOwogCi0JbWxvZ19idWdfb25fbXNnKCFvY2ZzMl9zcGFyc2VfYWxsb2Mob3NiKSAmJgotCQkJKE9DRlMyX0koaW5vZGUpLT5pcF9jbHVzdGVycyAhPSBjcG9zKSwKLQkJCSJEZXZpY2UgJXMsIGFza2luZyBmb3Igc3BhcnNlIGFsbG9jYXRpb246IGlub2RlICVsbHUsICIKLQkJCSJjcG9zICV1LCBjbHVzdGVycyAldVxuIiwKLQkJCW9zYi0+ZGV2X3N0ciwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCBjcG9zLAotCQkJT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzKTsKLQogCW1lbXNldCgmcmVjLCAwLCBzaXplb2YocmVjKSk7CiAJcmVjLmVfY3BvcyA9IGNwdV90b19sZTMyKGNwb3MpOwogCXJlYy5lX2Jsa25vID0gY3B1X3RvX2xlNjQoc3RhcnRfYmxrKTsKIAlyZWMuZV9sZWFmX2NsdXN0ZXJzID0gY3B1X3RvX2xlMTYobmV3X2NsdXN0ZXJzKTsKIAlyZWMuZV9mbGFncyA9IGZsYWdzOworCXN0YXR1cyA9IG9jZnMyX2V0X2luc2VydF9jaGVjayhpbm9kZSwgZXQsICZyZWMpOworCWlmIChzdGF0dXMpIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGJhaWw7CisJfQogCi0Jc3RhdHVzID0gb2NmczJfZmlndXJlX2luc2VydF90eXBlKGlub2RlLCBmZV9iaCwgJmxhc3RfZWJfYmgsICZyZWMsCisJc3RhdHVzID0gb2NmczJfZmlndXJlX2luc2VydF90eXBlKGlub2RlLCBldCwgJmxhc3RfZWJfYmgsICZyZWMsCiAJCQkJCSAgJmZyZWVfcmVjb3JkcywgJmluc2VydCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNDE0NSw3ICs0NDQyLDcgQEAKIAkgICAgIGZyZWVfcmVjb3JkcywgaW5zZXJ0Lmluc190cmVlX2RlcHRoKTsKIAogCWlmIChpbnNlcnQuaW5zX2NvbnRpZyA9PSBDT05USUdfTk9ORSAmJiBmcmVlX3JlY29yZHMgPT0gMCkgewotCQlzdGF0dXMgPSBvY2ZzMl9ncm93X3RyZWUoaW5vZGUsIGhhbmRsZSwgZmVfYmgsCisJCXN0YXR1cyA9IG9jZnMyX2dyb3dfdHJlZShpbm9kZSwgaGFuZGxlLCBldCwKIAkJCQkJICZpbnNlcnQuaW5zX3RyZWVfZGVwdGgsICZsYXN0X2ViX2JoLAogCQkJCQkgbWV0YV9hYyk7CiAJCWlmIChzdGF0dXMpIHsKQEAgLTQxNTUsMjAgKzQ0NTIsMTI3IEBACiAJfQogCiAJLyogRmluYWxseSwgd2UgY2FuIGFkZCBjbHVzdGVycy4gVGhpcyBtaWdodCByb3RhdGUgdGhlIHRyZWUgZm9yIHVzLiAqLwotCXN0YXR1cyA9IG9jZnMyX2RvX2luc2VydF9leHRlbnQoaW5vZGUsIGhhbmRsZSwgZmVfYmgsICZyZWMsICZpbnNlcnQpOworCXN0YXR1cyA9IG9jZnMyX2RvX2luc2VydF9leHRlbnQoaW5vZGUsIGhhbmRsZSwgZXQsICZyZWMsICZpbnNlcnQpOwogCWlmIChzdGF0dXMgPCAwKQogCQltbG9nX2Vycm5vKHN0YXR1cyk7Ci0JZWxzZQorCWVsc2UgaWYgKGV0LT5ldF9vcHMgPT0gJm9jZnMyX2Rpbm9kZV9ldF9vcHMpCiAJCW9jZnMyX2V4dGVudF9tYXBfaW5zZXJ0X3JlYyhpbm9kZSwgJnJlYyk7CiAKIGJhaWw6Ci0JaWYgKGxhc3RfZWJfYmgpCi0JCWJyZWxzZShsYXN0X2ViX2JoKTsKKwlicmVsc2UobGFzdF9lYl9iaCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKgorICogQWxsY2F0ZSBhbmQgYWRkIGNsdXN0ZXJzIGludG8gdGhlIGV4dGVudCBiLXRyZWUuCisgKiBUaGUgbmV3IGNsdXN0ZXJzKGNsdXN0ZXJzX3RvX2FkZCkgd2lsbCBiZSBpbnNlcnRlZCBhdCBsb2dpY2FsX29mZnNldC4KKyAqIFRoZSBleHRlbnQgYi10cmVlJ3Mgcm9vdCBpcyBzcGVjaWZpZWQgYnkgZXQsIGFuZAorICogaXQgaXMgbm90IGxpbWl0ZWQgdG8gdGhlIGZpbGUgc3RvcmFnZS4gQW55IGV4dGVudCB0cmVlIGNhbiB1c2UgdGhpcworICogZnVuY3Rpb24gaWYgaXQgaW1wbGVtZW50cyB0aGUgcHJvcGVyIG9jZnMyX2V4dGVudF90cmVlLgorICovCitpbnQgb2NmczJfYWRkX2NsdXN0ZXJzX2luX2J0cmVlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJdTMyICpsb2dpY2FsX29mZnNldCwKKwkJCQl1MzIgY2x1c3RlcnNfdG9fYWRkLAorCQkJCWludCBtYXJrX3Vud3JpdHRlbiwKKwkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCWhhbmRsZV90ICpoYW5kbGUsCisJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCisJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkJZW51bSBvY2ZzMl9hbGxvY19yZXN0YXJ0ZWQgKnJlYXNvbl9yZXQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IGZyZWVfZXh0ZW50czsKKwllbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCByZWFzb24gPSBSRVNUQVJUX05PTkU7CisJdTMyIGJpdF9vZmYsIG51bV9iaXRzOworCXU2NCBibG9jazsKKwl1OCBmbGFncyA9IDA7CisKKwlCVUdfT04oIWNsdXN0ZXJzX3RvX2FkZCk7CisKKwlpZiAobWFya191bndyaXR0ZW4pCisJCWZsYWdzID0gT0NGUzJfRVhUX1VOV1JJVFRFTjsKKworCWZyZWVfZXh0ZW50cyA9IG9jZnMyX251bV9mcmVlX2V4dGVudHMob3NiLCBpbm9kZSwgZXQpOworCWlmIChmcmVlX2V4dGVudHMgPCAwKSB7CisJCXN0YXR1cyA9IGZyZWVfZXh0ZW50czsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCS8qIHRoZXJlIGFyZSB0d28gY2FzZXMgd2hpY2ggY291bGQgY2F1c2UgdXMgdG8gRUFHQUlOIGluIHRoZQorCSAqIHdlLW5lZWQtbW9yZS1tZXRhZGF0YSBjYXNlOgorCSAqIDEpIHdlIGhhdmVuJ3QgcmVzZXJ2ZWQgKmFueSoKKwkgKiAyKSB3ZSBhcmUgc28gZnJhZ21lbnRlZCwgd2UndmUgbmVlZGVkIHRvIGFkZCBtZXRhZGF0YSB0b28KKwkgKiAgICBtYW55IHRpbWVzLiAqLworCWlmICghZnJlZV9leHRlbnRzICYmICFtZXRhX2FjKSB7CisJCW1sb2coMCwgIndlIGhhdmVuJ3QgcmVzZXJ2ZWQgYW55IG1ldGFkYXRhIVxuIik7CisJCXN0YXR1cyA9IC1FQUdBSU47CisJCXJlYXNvbiA9IFJFU1RBUlRfTUVUQTsKKwkJZ290byBsZWF2ZTsKKwl9IGVsc2UgaWYgKCghZnJlZV9leHRlbnRzKQorCQkgICAmJiAob2NmczJfYWxsb2NfY29udGV4dF9iaXRzX2xlZnQobWV0YV9hYykKKwkJICAgICAgIDwgb2NmczJfZXh0ZW5kX21ldGFfbmVlZGVkKGV0LT5ldF9yb290X2VsKSkpIHsKKwkJbWxvZygwLCAiZmlsZXN5c3RlbSBpcyByZWFsbHkgZnJhZ21lbnRlZC4uLlxuIik7CisJCXN0YXR1cyA9IC1FQUdBSU47CisJCXJlYXNvbiA9IFJFU1RBUlRfTUVUQTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlzdGF0dXMgPSBfX29jZnMyX2NsYWltX2NsdXN0ZXJzKG9zYiwgaGFuZGxlLCBkYXRhX2FjLCAxLAorCQkJCQljbHVzdGVyc190b19hZGQsICZiaXRfb2ZmLCAmbnVtX2JpdHMpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKKwkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlCVUdfT04obnVtX2JpdHMgPiBjbHVzdGVyc190b19hZGQpOworCisJLyogcmVzZXJ2ZSBvdXIgd3JpdGUgZWFybHkgLS0gaW5zZXJ0X2V4dGVudCBtYXkgdXBkYXRlIHRoZSBpbm9kZSAqLworCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGV0LT5ldF9yb290X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJYmxvY2sgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Mob3NiLT5zYiwgYml0X29mZik7CisJbWxvZygwLCAiQWxsb2NhdGluZyAldSBjbHVzdGVycyBhdCBibG9jayAldSBmb3IgaW5vZGUgJWxsdVxuIiwKKwkgICAgIG51bV9iaXRzLCBiaXRfb2ZmLCAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CisJc3RhdHVzID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgaW5vZGUsIGV0LAorCQkJCSAgICAgKmxvZ2ljYWxfb2Zmc2V0LCBibG9jaywKKwkJCQkgICAgIG51bV9iaXRzLCBmbGFncywgbWV0YV9hYyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBldC0+ZXRfcm9vdF9iaCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCWNsdXN0ZXJzX3RvX2FkZCAtPSBudW1fYml0czsKKwkqbG9naWNhbF9vZmZzZXQgKz0gbnVtX2JpdHM7CisKKwlpZiAoY2x1c3RlcnNfdG9fYWRkKSB7CisJCW1sb2coMCwgIm5lZWQgdG8gYWxsb2Mgb25jZSBtb3JlLCB3YW50ZWQgPSAldVxuIiwKKwkJICAgICBjbHVzdGVyc190b19hZGQpOworCQlzdGF0dXMgPSAtRUFHQUlOOworCQlyZWFzb24gPSBSRVNUQVJUX1RSQU5TOworCX0KKworbGVhdmU6CisJbWxvZ19leGl0KHN0YXR1cyk7CisJaWYgKHJlYXNvbl9yZXQpCisJCSpyZWFzb25fcmV0ID0gcmVhc29uOworCXJldHVybiBzdGF0dXM7Cit9CisKIHN0YXRpYyB2b2lkIG9jZnMyX21ha2VfcmlnaHRfc3BsaXRfcmVjKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpzcGxpdF9yZWMsCiAJCQkJICAgICAgIHUzMiBjcG9zLApAQCAtNDE5Miw3ICs0NTk2LDcgQEAKIHN0YXRpYyBpbnQgb2NmczJfc3BsaXRfYW5kX2luc2VydChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQkgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAotCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsYXN0X2ViX2JoLAogCQkJCSAgaW50IHNwbGl0X2luZGV4LAogCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKm9yaWdfc3BsaXRfcmVjLApAQCAtNDIwNiw3ICs0NjEwLDYgQEAKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyBzcGxpdF9yZWMgPSAqb3JpZ19zcGxpdF9yZWM7CiAJc3RydWN0IG9jZnMyX2luc2VydF90eXBlIGluc2VydDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYjsKLQlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaTsKIAogbGVmdHJpZ2h0OgogCS8qCkBAIC00MjE1LDggKzQ2MTgsNyBAQAogCSAqLwogCXJlYyA9IHBhdGhfbGVhZl9lbChwYXRoKS0+bF9yZWNzW3NwbGl0X2luZGV4XTsKIAotCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOwotCXJpZ2h0bW9zdF9lbCA9ICZkaS0+aWQyLmlfbGlzdDsKKwlyaWdodG1vc3RfZWwgPSBldC0+ZXRfcm9vdF9lbDsKIAogCWRlcHRoID0gbGUxNl90b19jcHUocmlnaHRtb3N0X2VsLT5sX3RyZWVfZGVwdGgpOwogCWlmIChkZXB0aCkgewpAQCAtNDIyNyw4ICs0NjI5LDggQEAKIAogCWlmIChsZTE2X3RvX2NwdShyaWdodG1vc3RfZWwtPmxfbmV4dF9mcmVlX3JlYykgPT0KIAkgICAgbGUxNl90b19jcHUocmlnaHRtb3N0X2VsLT5sX2NvdW50KSkgewotCQlyZXQgPSBvY2ZzMl9ncm93X3RyZWUoaW5vZGUsIGhhbmRsZSwgZGlfYmgsICZkZXB0aCwgbGFzdF9lYl9iaCwKLQkJCQkgICAgICBtZXRhX2FjKTsKKwkJcmV0ID0gb2NmczJfZ3Jvd190cmVlKGlub2RlLCBoYW5kbGUsIGV0LAorCQkJCSAgICAgICZkZXB0aCwgbGFzdF9lYl9iaCwgbWV0YV9hYyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtNDI2NSw4ICs0NjY3LDcgQEAKIAkJZG9fbGVmdHJpZ2h0ID0gMTsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9kb19pbnNlcnRfZXh0ZW50KGlub2RlLCBoYW5kbGUsIGRpX2JoLCAmc3BsaXRfcmVjLAotCQkJCSAgICAgJmluc2VydCk7CisJcmV0ID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChpbm9kZSwgaGFuZGxlLCBldCwgJnNwbGl0X3JlYywgJmluc2VydCk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtNDMwOCw4ICs0NzA5LDkgQEAKICAqIG9mIHRoZSB0cmVlIGlzIHJlcXVpcmVkLiBBbGwgb3RoZXIgY2FzZXMgd2lsbCBkZWdyYWRlIGludG8gYSBsZXNzCiAgKiBvcHRpbWFsIHRyZWUgbGF5b3V0LgogICoKLSAqIGxhc3RfZWJfYmggc2hvdWxkIGJlIHRoZSByaWdodG1vc3QgbGVhZiBibG9jayBmb3IgYW55IGlub2RlIHdpdGggYQotICogYnRyZWUuIFNpbmNlIGEgc3BsaXQgbWF5IGdyb3cgdGhlIHRyZWUgb3IgYSBtZXJnZSBtaWdodCBzaHJpbmsgaXQsIHRoZSBjYWxsZXIgY2Fubm90IHRydXN0IHRoZSBjb250ZW50cyBvZiB0aGF0IGJ1ZmZlciBhZnRlciB0aGlzIGNhbGwuCisgKiBsYXN0X2ViX2JoIHNob3VsZCBiZSB0aGUgcmlnaHRtb3N0IGxlYWYgYmxvY2sgZm9yIGFueSBleHRlbnQKKyAqIGJ0cmVlLiBTaW5jZSBhIHNwbGl0IG1heSBncm93IHRoZSB0cmVlIG9yIGEgbWVyZ2UgbWlnaHQgc2hyaW5rIGl0LAorICogdGhlIGNhbGxlciBjYW5ub3QgdHJ1c3QgdGhlIGNvbnRlbnRzIG9mIHRoYXQgYnVmZmVyIGFmdGVyIHRoaXMgY2FsbC4KICAqCiAgKiBUaGlzIGNvZGUgaXMgb3B0aW1pemVkIGZvciByZWFkYWJpbGl0eSAtIHNldmVyYWwgcGFzc2VzIG1pZ2h0IGJlCiAgKiBtYWRlIG92ZXIgY2VydGFpbiBwb3J0aW9ucyBvZiB0aGUgdHJlZS4gQWxsIG9mIHRob3NlIGJsb2NrcyB3aWxsCkBAIC00MzE3LDcgKzQ3MTksNyBAQAogICogZXh0cmEgb3ZlcmhlYWQgaXMgbm90IGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiBkaXNrIHJlYWRzLgogICovCiBzdGF0aWMgaW50IF9fb2NmczJfbWFya19leHRlbnRfd3JpdHRlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgICAgICBoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKIAkJCQkgICAgICAgaW50IHNwbGl0X2luZGV4LApAQCAtNDM1NywxMSArNDc1OSw5IEBACiAJICovCiAJaWYgKHBhdGgtPnBfdHJlZV9kZXB0aCkgewogCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYjsKLQkJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CiAKLQkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksCi0JCQkJICAgICAgIGxlNjRfdG9fY3B1KGRpLT5pX2xhc3RfZWJfYmxrKSwKLQkJCQkgICAgICAgJmxhc3RfZWJfYmgsIE9DRlMyX0JIX0NBQ0hFRCwgaW5vZGUpOworCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBvY2ZzMl9ldF9nZXRfbGFzdF9lYl9ibGsoZXQpLAorCQkJCSAgICAgICAmbGFzdF9lYl9iaCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXhpdChyZXQpOwogCQkJZ290byBvdXQ7CkBAIC00Mzk0LDcgKzQ3OTQsNyBAQAogCQlpZiAoY3R4dC5jX3NwbGl0X2NvdmVyc19yZWMpCiAJCQllbC0+bF9yZWNzW3NwbGl0X2luZGV4XSA9ICpzcGxpdF9yZWM7CiAJCWVsc2UKLQkJCXJldCA9IG9jZnMyX3NwbGl0X2FuZF9pbnNlcnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwgZGlfYmgsCisJCQlyZXQgPSBvY2ZzMl9zcGxpdF9hbmRfaW5zZXJ0KGlub2RlLCBoYW5kbGUsIHBhdGgsIGV0LAogCQkJCQkJICAgICAmbGFzdF9lYl9iaCwgc3BsaXRfaW5kZXgsCiAJCQkJCQkgICAgIHNwbGl0X3JlYywgbWV0YV9hYyk7CiAJCWlmIChyZXQpCkBAIC00NDAyLDcgKzQ4MDIsNyBAQAogCX0gZWxzZSB7CiAJCXJldCA9IG9jZnMyX3RyeV90b19tZXJnZV9leHRlbnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwKIAkJCQkJCXNwbGl0X2luZGV4LCBzcGxpdF9yZWMsCi0JCQkJCQlkZWFsbG9jLCAmY3R4dCk7CisJCQkJCQlkZWFsbG9jLCAmY3R4dCwgZXQpOwogCQlpZiAocmV0KQogCQkJbWxvZ19lcnJubyhyZXQpOwogCX0KQEAgLTQ0MjAsNyArNDgyMCw4IEBACiAgKgogICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcGFzc2luZyBkb3duIG1ldGFfYWMgaWYgd2UnbGwgbmVlZCBpdC4KICAqLwotaW50IG9jZnMyX21hcmtfZXh0ZW50X3dyaXR0ZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKK2ludCBvY2ZzMl9tYXJrX2V4dGVudF93cml0dGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJICAgICAgaGFuZGxlX3QgKmhhbmRsZSwgdTMyIGNwb3MsIHUzMiBsZW4sIHUzMiBwaHlzLAogCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCQkgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKQEAgLTQ0NDYsMTAgKzQ4NDcsMTQgQEAKIAkvKgogCSAqIFhYWDogVGhpcyBzaG91bGQgYmUgZml4ZWQgdXAgc28gdGhhdCB3ZSBqdXN0IHJlLWluc2VydCB0aGUKIAkgKiBuZXh0IGV4dGVudCByZWNvcmRzLgorCSAqCisJICogWFhYOiBUaGlzIGlzIGEgaGFjayBvbiB0aGUgZXh0ZW50IHRyZWUsIG1heWJlIGl0IHNob3VsZCBiZQorCSAqIGFuIG9wPwogCSAqLwotCW9jZnMyX2V4dGVudF9tYXBfdHJ1bmMoaW5vZGUsIDApOworCWlmIChldC0+ZXRfb3BzID09ICZvY2ZzMl9kaW5vZGVfZXRfb3BzKQorCQlvY2ZzMl9leHRlbnRfbWFwX3RydW5jKGlub2RlLCAwKTsKIAotCWxlZnRfcGF0aCA9IG9jZnMyX25ld19pbm9kZV9wYXRoKGRpX2JoKTsKKwlsZWZ0X3BhdGggPSBvY2ZzMl9uZXdfcGF0aChldC0+ZXRfcm9vdF9iaCwgZXQtPmV0X3Jvb3RfZWwpOwogCWlmICghbGVmdF9wYXRoKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQ0ODAsOCArNDg4NSw5IEBACiAJc3BsaXRfcmVjLmVfZmxhZ3MgPSBwYXRoX2xlYWZfZWwobGVmdF9wYXRoKS0+bF9yZWNzW2luZGV4XS5lX2ZsYWdzOwogCXNwbGl0X3JlYy5lX2ZsYWdzICY9IH5PQ0ZTMl9FWFRfVU5XUklUVEVOOwogCi0JcmV0ID0gX19vY2ZzMl9tYXJrX2V4dGVudF93cml0dGVuKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBsZWZ0X3BhdGgsCi0JCQkJCSAgaW5kZXgsICZzcGxpdF9yZWMsIG1ldGFfYWMsIGRlYWxsb2MpOworCXJldCA9IF9fb2NmczJfbWFya19leHRlbnRfd3JpdHRlbihpbm9kZSwgZXQsIGhhbmRsZSwgbGVmdF9wYXRoLAorCQkJCQkgIGluZGV4LCAmc3BsaXRfcmVjLCBtZXRhX2FjLAorCQkJCQkgIGRlYWxsb2MpOwogCWlmIChyZXQpCiAJCW1sb2dfZXJybm8ocmV0KTsKIApAQCAtNDQ5MCwxMyArNDg5NiwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfc3BsaXRfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAorc3RhdGljIGludCBvY2ZzMl9zcGxpdF90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCiAJCQkgICAgaW50IGluZGV4LCB1MzIgbmV3X3JhbmdlLAogCQkJICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjKQogewogCWludCByZXQsIGRlcHRoLCBjcmVkaXRzID0gaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzOwotCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqbGFzdF9lYl9iaCA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpyaWdodG1vc3RfZWwsICplbDsKQEAgLTQ1MTMsOSArNDkxOCw4IEBACiAKIAlkZXB0aCA9IHBhdGgtPnBfdHJlZV9kZXB0aDsKIAlpZiAoZGVwdGggPiAwKSB7Ci0JCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLAotCQkJCSAgICAgICBsZTY0X3RvX2NwdShkaS0+aV9sYXN0X2ViX2JsayksCi0JCQkJICAgICAgICZsYXN0X2ViX2JoLCBPQ0ZTMl9CSF9DQUNIRUQsIGlub2RlKTsKKwkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgb2NmczJfZXRfZ2V0X2xhc3RfZWJfYmxrKGV0KSwKKwkJCQkgICAgICAgJmxhc3RfZWJfYmgpOwogCQlpZiAocmV0IDwgMCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC00NTI2LDcgKzQ5MzAsOCBAQAogCX0gZWxzZQogCQlyaWdodG1vc3RfZWwgPSBwYXRoX2xlYWZfZWwocGF0aCk7CiAKLQljcmVkaXRzICs9IHBhdGgtPnBfdHJlZV9kZXB0aCArIG9jZnMyX2V4dGVuZF9tZXRhX25lZWRlZChkaSk7CisJY3JlZGl0cyArPSBwYXRoLT5wX3RyZWVfZGVwdGggKworCQkgICBvY2ZzMl9leHRlbmRfbWV0YV9uZWVkZWQoZXQtPmV0X3Jvb3RfZWwpOwogCXJldCA9IG9jZnMyX2V4dGVuZF90cmFucyhoYW5kbGUsIGNyZWRpdHMpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDUzNSw3ICs0OTQwLDcgQEAKIAogCWlmIChsZTE2X3RvX2NwdShyaWdodG1vc3RfZWwtPmxfbmV4dF9mcmVlX3JlYykgPT0KIAkgICAgbGUxNl90b19jcHUocmlnaHRtb3N0X2VsLT5sX2NvdW50KSkgewotCQlyZXQgPSBvY2ZzMl9ncm93X3RyZWUoaW5vZGUsIGhhbmRsZSwgZGlfYmgsICZkZXB0aCwgJmxhc3RfZWJfYmgsCisJCXJldCA9IG9jZnMyX2dyb3dfdHJlZShpbm9kZSwgaGFuZGxlLCBldCwgJmRlcHRoLCAmbGFzdF9lYl9iaCwKIAkJCQkgICAgICBtZXRhX2FjKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDU0OSw3ICs0OTU0LDcgQEAKIAlpbnNlcnQuaW5zX3NwbGl0ID0gU1BMSVRfUklHSFQ7CiAJaW5zZXJ0Lmluc190cmVlX2RlcHRoID0gZGVwdGg7CiAKLQlyZXQgPSBvY2ZzMl9kb19pbnNlcnRfZXh0ZW50KGlub2RlLCBoYW5kbGUsIGRpX2JoLCAmc3BsaXRfcmVjLCAmaW5zZXJ0KTsKKwlyZXQgPSBvY2ZzMl9kb19pbnNlcnRfZXh0ZW50KGlub2RlLCBoYW5kbGUsIGV0LCAmc3BsaXRfcmVjLCAmaW5zZXJ0KTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiAKQEAgLTQ1NjEsNyArNDk2Niw4IEBACiBzdGF0aWMgaW50IG9jZnMyX3RydW5jYXRlX3JlYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLAogCQkJICAgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsIGludCBpbmRleCwKIAkJCSAgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAotCQkJICAgICAgdTMyIGNwb3MsIHUzMiBsZW4pCisJCQkgICAgICB1MzIgY3BvcywgdTMyIGxlbiwKKwkJCSAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCiB7CiAJaW50IHJldDsKIAl1MzIgbGVmdF9jcG9zLCByZWNfcmFuZ2UsIHRydW5jX3JhbmdlOwpAQCAtNDU3Myw3ICs0OTc5LDcgQEAKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYjsKIAogCWlmIChvY2ZzMl9pc19lbXB0eV9leHRlbnQoJmVsLT5sX3JlY3NbMF0pICYmIGluZGV4ID4gMCkgewotCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsIGRlYWxsb2MpOworCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsIGRlYWxsb2MsIGV0KTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC00NzA0LDcgKzUxMTAsNyBAQAogCiAJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHBhdGhfbGVhZl9iaChwYXRoKSk7CiAKLQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsIGRlYWxsb2MpOworCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwgZGVhbGxvYywgZXQpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTQ3MTUsNyArNTEyMSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IG9jZnMyX3JlbW92ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKK2ludCBvY2ZzMl9yZW1vdmVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJdTMyIGNwb3MsIHUzMiBsZW4sIGhhbmRsZV90ICpoYW5kbGUsCiAJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKIAkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQpAQCAtNDcyNCwxMSArNTEzMSwxMSBAQAogCXUzMiByZWNfcmFuZ2UsIHRydW5jX3JhbmdlOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWM7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKLQlzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aDsKKwlzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCA9IE5VTEw7CiAKIAlvY2ZzMl9leHRlbnRfbWFwX3RydW5jKGlub2RlLCAwKTsKIAotCXBhdGggPSBvY2ZzMl9uZXdfaW5vZGVfcGF0aChkaV9iaCk7CisJcGF0aCA9IG9jZnMyX25ld19wYXRoKGV0LT5ldF9yb290X2JoLCBldC0+ZXRfcm9vdF9lbCk7CiAJaWYgKCFwYXRoKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQ3ODEsMTMgKzUxODgsMTMgQEAKIAogCWlmIChsZTMyX3RvX2NwdShyZWMtPmVfY3BvcykgPT0gY3BvcyB8fCByZWNfcmFuZ2UgPT0gdHJ1bmNfcmFuZ2UpIHsKIAkJcmV0ID0gb2NmczJfdHJ1bmNhdGVfcmVjKGlub2RlLCBoYW5kbGUsIHBhdGgsIGluZGV4LCBkZWFsbG9jLAotCQkJCQkgY3BvcywgbGVuKTsKKwkJCQkJIGNwb3MsIGxlbiwgZXQpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7Ci0JCXJldCA9IG9jZnMyX3NwbGl0X3RyZWUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIHBhdGgsIGluZGV4LAorCQlyZXQgPSBvY2ZzMl9zcGxpdF90cmVlKGlub2RlLCBldCwgaGFuZGxlLCBwYXRoLCBpbmRleCwKIAkJCQkgICAgICAgdHJ1bmNfcmFuZ2UsIG1ldGFfYWMpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC00ODM2LDcgKzUyNDMsNyBAQAogCQl9CiAKIAkJcmV0ID0gb2NmczJfdHJ1bmNhdGVfcmVjKGlub2RlLCBoYW5kbGUsIHBhdGgsIGluZGV4LCBkZWFsbG9jLAotCQkJCQkgY3BvcywgbGVuKTsKKwkJCQkJIGNwb3MsIGxlbiwgZXQpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTUxNzksOCArNTU4Niw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCAmYmgsCi0JCQkJICBPQ0ZTMl9CSF9DQUNIRUQsIGlub2RlKTsKKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sICZiaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJaXB1dChpbm9kZSk7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTUyNTUsOCArNTY2MSw3IEBACiBiYWlsOgogCWlmICh0bF9pbm9kZSkKIAkJaXB1dCh0bF9pbm9kZSk7Ci0JaWYgKHRsX2JoKQotCQlicmVsc2UodGxfYmgpOworCWJyZWxzZSh0bF9iaCk7CiAKIAlpZiAoc3RhdHVzIDwgMCAmJiAoKnRsX2NvcHkpKSB7CiAJCWtmcmVlKCp0bF9jb3B5KTsKQEAgLTU5OTksMjAgKzY0MDQsMTMgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3dyaXRlYmFja196ZXJvX2Z1bmMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3N0YXRpYyBpbnQgb2NmczJfemVyb19mdW5jKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiAJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX29yZGVyZWRfemVyb19mdW5jKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCi17Ci0Jc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7Ci0JbWFya19idWZmZXJfZGlydHkoYmgpOwotCXJldHVybiBvY2ZzMl9qb3VybmFsX2RpcnR5X2RhdGEoaGFuZGxlLCBiaCk7Ci19Ci0KIHN0YXRpYyB2b2lkIG9jZnMyX21hcF9hbmRfZGlydHlfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgICAgdW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCB0bywKIAkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgemVybywgdTY0ICpwaHlzKQpAQCAtNjAzMSwxNyArNjQyOSwxOCBAQAogCSAqIGhlcmUgaWYgdGhleSBhcmVuJ3QgLSBvY2ZzMl9tYXBfcGFnZV9ibG9ja3MoKQogCSAqIG1pZ2h0J3ZlIHNraXBwZWQgc29tZQogCSAqLwotCWlmIChvY2ZzMl9zaG91bGRfb3JkZXJfZGF0YShpbm9kZSkpIHsKLQkJcmV0ID0gd2Fsa19wYWdlX2J1ZmZlcnMoaGFuZGxlLAotCQkJCQlwYWdlX2J1ZmZlcnMocGFnZSksCi0JCQkJCWZyb20sIHRvLCAmcGFydGlhbCwKLQkJCQkJb2NmczJfb3JkZXJlZF96ZXJvX2Z1bmMpOwotCQlpZiAocmV0IDwgMCkKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQl9IGVsc2UgeworCXJldCA9IHdhbGtfcGFnZV9idWZmZXJzKGhhbmRsZSwgcGFnZV9idWZmZXJzKHBhZ2UpLAorCQkJCWZyb20sIHRvLCAmcGFydGlhbCwKKwkJCQlvY2ZzMl96ZXJvX2Z1bmMpOworCWlmIChyZXQgPCAwKQorCQltbG9nX2Vycm5vKHJldCk7CisJZWxzZSBpZiAob2NmczJfc2hvdWxkX29yZGVyX2RhdGEoaW5vZGUpKSB7CisJCXJldCA9IG9jZnMyX2piZDJfZmlsZV9pbm9kZShoYW5kbGUsIGlub2RlKTsKKyNpZmRlZiBDT05GSUdfT0NGUzJfQ09NUEFUX0pCRAogCQlyZXQgPSB3YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIHBhZ2VfYnVmZmVycyhwYWdlKSwKIAkJCQkJZnJvbSwgdG8sICZwYXJ0aWFsLAotCQkJCQlvY2ZzMl93cml0ZWJhY2tfemVyb19mdW5jKTsKKwkJCQkJb2NmczJfam91cm5hbF9kaXJ0eV9kYXRhKTsKKyNlbmRpZgogCQlpZiAocmV0IDwgMCkKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAl9CkBAIC02MjA2LDIwICs2NjA1LDI5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfemVyb19kaW5vZGVfaWQyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpKQorc3RhdGljIHZvaWQgb2NmczJfemVyb19kaW5vZGVfaWQyX3dpdGhfeGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSkKIHsKIAl1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gMSA8PCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwl1bnNpZ25lZCBpbnQgeGF0dHJzaXplID0gbGUxNl90b19jcHUoZGktPmlfeGF0dHJfaW5saW5lX3NpemUpOwogCi0JbWVtc2V0KCZkaS0+aWQyLCAwLCBibG9ja3NpemUgLSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZGlub2RlLCBpZDIpKTsKKwlpZiAobGUxNl90b19jcHUoZGktPmlfZHluX2ZlYXR1cmVzKSAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkKKwkJbWVtc2V0KCZkaS0+aWQyLCAwLCBibG9ja3NpemUgLQorCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZGlub2RlLCBpZDIpIC0KKwkJCQkgICAgeGF0dHJzaXplKTsKKwllbHNlCisJCW1lbXNldCgmZGktPmlkMiwgMCwgYmxvY2tzaXplIC0KKwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2Rpbm9kZSwgaWQyKSk7CiB9CiAKIHZvaWQgb2NmczJfZGlub2RlX25ld19leHRlbnRfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkpCiB7Ci0Jb2NmczJfemVyb19kaW5vZGVfaWQyKGlub2RlLCBkaSk7CisJb2NmczJfemVyb19kaW5vZGVfaWQyX3dpdGhfeGF0dHIoaW5vZGUsIGRpKTsKIAlkaS0+aWQyLmlfbGlzdC5sX3RyZWVfZGVwdGggPSAwOwogCWRpLT5pZDIuaV9saXN0LmxfbmV4dF9mcmVlX3JlYyA9IDA7Ci0JZGktPmlkMi5pX2xpc3QubF9jb3VudCA9IGNwdV90b19sZTE2KG9jZnMyX2V4dGVudF9yZWNzX3Blcl9pbm9kZShpbm9kZS0+aV9zYikpOworCWRpLT5pZDIuaV9saXN0LmxfY291bnQgPSBjcHVfdG9fbGUxNigKKwkJb2NmczJfZXh0ZW50X3JlY3NfcGVyX2lub2RlX3dpdGhfeGF0dHIoaW5vZGUtPmlfc2IsIGRpKSk7CiB9CiAKIHZvaWQgb2NmczJfc2V0X2lub2RlX2RhdGFfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpKQpAQCAtNjIzNiw5ICs2NjQ0LDEwIEBACiAJICogV2UgY2xlYXIgdGhlIGVudGlyZSBpX2RhdGEgc3RydWN0dXJlIGhlcmUgc28gdGhhdCBhbGwKIAkgKiBmaWVsZHMgY2FuIGJlIHByb3Blcmx5IGluaXRpYWxpemVkLgogCSAqLwotCW9jZnMyX3plcm9fZGlub2RlX2lkMihpbm9kZSwgZGkpOworCW9jZnMyX3plcm9fZGlub2RlX2lkMl93aXRoX3hhdHRyKGlub2RlLCBkaSk7CiAKLQlpZGF0YS0+aWRfY291bnQgPSBjcHVfdG9fbGUxNihvY2ZzMl9tYXhfaW5saW5lX2RhdGEoaW5vZGUtPmlfc2IpKTsKKwlpZGF0YS0+aWRfY291bnQgPSBjcHVfdG9fbGUxNigKKwkJCW9jZnMyX21heF9pbmxpbmVfZGF0YV93aXRoX3hhdHRyKGlub2RlLT5pX3NiLCBkaSkpOwogfQogCiBpbnQgb2NmczJfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCkBAIC02MjUzLDYgKzY2NjIsNyBAQAogCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDsKIAlsb2ZmX3QgZW5kID0gb3NiLT5zX2NsdXN0ZXJzaXplOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKIAogCWhhc19kYXRhID0gaV9zaXplX3JlYWQoaW5vZGUpID8gMSA6IDA7CiAKQEAgLTYzNTIsNyArNjc2Miw4IEBACiAJCSAqIHRoaXMgcHJvdmVzIHRvIGJlIGZhbHNlLCB3ZSBjb3VsZCBhbHdheXMgcmUtYnVpbGQKIAkJICogdGhlIGluLWlub2RlIGRhdGEgZnJvbSBvdXIgcGFnZXMuCiAJCSAqLwotCQlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBpbm9kZSwgZGlfYmgsCisJCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgaW5vZGUsIGRpX2JoKTsKKwkJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgaW5vZGUsICZldCwKIAkJCQkJICAwLCBibG9jaywgMSwgMCwgTlVMTCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTYzOTUsMTMgKzY4MDYsMTQgQEAKIAloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKIAlzdHJ1Y3QgaW5vZGUgKnRsX2lub2RlID0gb3NiLT5vc2JfdGxfaW5vZGU7CiAJc3RydWN0IG9jZnMyX3BhdGggKnBhdGggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilmZV9iaC0+Yl9kYXRhOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKIAluZXdfaGlnaGVzdF9jcG9zID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKG9zYi0+c2IsCiAJCQkJCQkgICAgIGlfc2l6ZV9yZWFkKGlub2RlKSk7CiAKLQlwYXRoID0gb2NmczJfbmV3X2lub2RlX3BhdGgoZmVfYmgpOworCXBhdGggPSBvY2ZzMl9uZXdfcGF0aChmZV9iaCwgJmRpLT5pZDIuaV9saXN0KTsKIAlpZiAoIXBhdGgpIHsKIAkJc3RhdHVzID0gLUVOT01FTTsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNjU3Miw4ICs2OTg0LDggQEAKIAlvY2ZzMl9pbml0X2RlYWxsb2NfY3R4dCgmKCp0YyktPnRjX2RlYWxsb2MpOwogCiAJaWYgKGZlLT5pZDIuaV9saXN0LmxfdHJlZV9kZXB0aCkgewotCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgbGU2NF90b19jcHUoZmUtPmlfbGFzdF9lYl9ibGspLAotCQkJCQkgICZsYXN0X2ViX2JoLCBPQ0ZTMl9CSF9DQUNIRUQsIGlub2RlKTsKKwkJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgbGU2NF90b19jcHUoZmUtPmlfbGFzdF9lYl9ibGspLAorCQkJCQkgICZsYXN0X2ViX2JoKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gYmFpbDsKQEAgLTY2ODYsOCArNzA5OCw3IEBACiAJCW1sb2coTUxfTk9USUNFLAogCQkgICAgICJUcnVuY2F0ZSBjb21wbGV0aW9uIGhhcyBub24tZW1wdHkgZGVhbGxvYyBjb250ZXh0XG4iKTsKIAotCWlmICh0Yy0+dGNfbGFzdF9lYl9iaCkKLQkJYnJlbHNlKHRjLT50Y19sYXN0X2ViX2JoKTsKKwlicmVsc2UodGMtPnRjX2xhc3RfZWJfYmgpOwogCiAJa2ZyZWUodGMpOwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWxsb2MuaCBiL2ZzL29jZnMyL2FsbG9jLmgKaW5kZXggNjBjZDNkNS4uNzAyNTdjOCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWxsb2MuaAorKysgYi9mcy9vY2ZzMi9hbGxvYy5oCkBAIC0yNiwzMCArMjYsMTAyIEBACiAjaWZuZGVmIE9DRlMyX0FMTE9DX0gKICNkZWZpbmUgT0NGUzJfQUxMT0NfSAogCisKKy8qCisgKiBGb3IgeGF0dHIgdHJlZSBsZWFmLCB3ZSBsaW1pdCB0aGUgbGVhZiBieXRlIHNpemUgdG8gYmUgNjRLLgorICovCisjZGVmaW5lIE9DRlMyX01BWF9YQVRUUl9UUkVFX0xFQUZfU0laRSA2NTUzNgorCisvKgorICogb2NmczJfZXh0ZW50X3RyZWUgYW5kIG9jZnMyX2V4dGVudF90cmVlX29wZXJhdGlvbnMgYXJlIHVzZWQgdG8gYWJzdHJhY3QKKyAqIHRoZSBiLXRyZWUgb3BlcmF0aW9ucyBpbiBvY2ZzMi4gTm93IGFsbCB0aGUgYi10cmVlIG9wZXJhdGlvbnMgYXJlIG5vdAorICogbGltaXRlZCB0byBvY2ZzMl9kaW5vZGUgb25seS4gQW55IGRhdGEgd2hpY2ggbmVlZCB0byBhbGxvY2F0ZSBjbHVzdGVycworICogdG8gc3RvcmUgY2FuIHVzZSBiLXRyZWUuIEFuZCBpdCBvbmx5IG5lZWRzIHRvIGltcGxlbWVudCBpdHMgb2NmczJfZXh0ZW50X3RyZWUKKyAqIGFuZCBvcGVyYXRpb24uCisgKgorICogb2NmczJfZXh0ZW50X3RyZWUgYmVjb21lcyB0aGUgZmlyc3QtY2xhc3Mgb2JqZWN0IGZvciBleHRlbnQgdHJlZQorICogbWFuaXB1bGF0aW9uLiAgQ2FsbGVycyBvZiB0aGUgYWxsb2MuYyBjb2RlIG5lZWQgdG8gZmlsbCBpdCB2aWEgb25lIG9mCisgKiB0aGUgb2NmczJfaW5pdF8qX2V4dGVudF90cmVlKCkgb3BlcmF0aW9ucyBiZWxvdy4KKyAqCisgKiBvY2ZzMl9leHRlbnRfdHJlZSBjb250YWlucyBpbmZvIGZvciB0aGUgcm9vdCBvZiB0aGUgYi10cmVlLCBpdCBtdXN0IGhhdmUgYQorICogcm9vdCBvY2ZzMl9leHRlbnRfbGlzdCBhbmQgYSByb290X2JoIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBpbiB0aGUgYi10cmVlCisgKiBmdW5jdGlvbnMuCisgKiBvY2ZzMl9leHRlbnRfdHJlZV9vcGVyYXRpb25zIGFic3RyYWN0IHRoZSBub3JtYWwgb3BlcmF0aW9ucyB3ZSBkbyBmb3IKKyAqIHRoZSByb290IG9mIGV4dGVudCBiLXRyZWUuCisgKi8KK3N0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZV9vcGVyYXRpb25zOworc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIHsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWVfb3BlcmF0aW9ucwkqZXRfb3BzOworCXN0cnVjdCBidWZmZXJfaGVhZAkJCSpldF9yb290X2JoOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdAkJKmV0X3Jvb3RfZWw7CisJdm9pZAkJCQkJKmV0X29iamVjdDsKKwl1bnNpZ25lZCBpbnQJCQkJZXRfbWF4X2xlYWZfY2x1c3RlcnM7Cit9OworCisvKgorICogb2NmczJfaW5pdF8qX2V4dGVudF90cmVlKCkgd2lsbCBmaWxsIGFuIG9jZnMyX2V4dGVudF90cmVlIGZyb20gdGhlCisgKiBzcGVjaWZpZWQgb2JqZWN0IGJ1ZmZlci4KKyAqLwordm9pZCBvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7Cit2b2lkIG9jZnMyX2luaXRfeGF0dHJfdHJlZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKK3ZvaWQgb2NmczJfaW5pdF94YXR0cl92YWx1ZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYpOworCiBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dDsKIGludCBvY2ZzMl9pbnNlcnRfZXh0ZW50KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJaGFuZGxlX3QgKmhhbmRsZSwKIAkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAorCQkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCXUzMiBjcG9zLAogCQkJdTY0IHN0YXJ0X2JsaywKIAkJCXUzMiBuZXdfY2x1c3RlcnMsCiAJCQl1OCBmbGFncywKIAkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjKTsKKworZW51bSBvY2ZzMl9hbGxvY19yZXN0YXJ0ZWQgeworCVJFU1RBUlRfTk9ORSA9IDAsCisJUkVTVEFSVF9UUkFOUywKKwlSRVNUQVJUX01FVEEKK307CitpbnQgb2NmczJfYWRkX2NsdXN0ZXJzX2luX2J0cmVlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJdTMyICpsb2dpY2FsX29mZnNldCwKKwkJCQl1MzIgY2x1c3RlcnNfdG9fYWRkLAorCQkJCWludCBtYXJrX3Vud3JpdHRlbiwKKwkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCWhhbmRsZV90ICpoYW5kbGUsCisJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCisJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkJZW51bSBvY2ZzMl9hbGxvY19yZXN0YXJ0ZWQgKnJlYXNvbl9yZXQpOwogc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQ7Ci1pbnQgb2NmczJfbWFya19leHRlbnRfd3JpdHRlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAoraW50IG9jZnMyX21hcmtfZXh0ZW50X3dyaXR0ZW4oc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgICBoYW5kbGVfdCAqaGFuZGxlLCB1MzIgY3BvcywgdTMyIGxlbiwgdTMyIHBoeXMsCiAJCQkgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKIAkJCSAgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKTsKLWludCBvY2ZzMl9yZW1vdmVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCitpbnQgb2NmczJfcmVtb3ZlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCXUzMiBjcG9zLCB1MzIgbGVuLCBoYW5kbGVfdCAqaGFuZGxlLAogCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCQlzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7CiBpbnQgb2NmczJfbnVtX2ZyZWVfZXh0ZW50cyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSk7Ci0vKiBob3cgbWFueSBuZXcgbWV0YWRhdGEgY2h1bmtzIHdvdWxkIGFuIGFsbG9jYXRpb24gbmVlZCBhdCBtYXhpbXVtPyAqLwotc3RhdGljIGlubGluZSBpbnQgb2NmczJfZXh0ZW5kX21ldGFfbmVlZGVkKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlKQorCQkJICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CisKKy8qCisgKiBob3cgbWFueSBuZXcgbWV0YWRhdGEgY2h1bmtzIHdvdWxkIGFuIGFsbG9jYXRpb24gbmVlZCBhdCBtYXhpbXVtPworICoKKyAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IHJvb3RfZWwgaXMgdGhlIHJvb3QKKyAqIG9mIGV4dGVudCB0cmVlLiBTbyBmb3IgYW4gaW5vZGUsIGl0IHNob3VsZCBiZSAmZmUtPmlkMi5pX2xpc3QuIE90aGVyd2lzZQorICogdGhlIHJlc3VsdCBtYXkgYmUgd3JvbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2V4dGVuZF9tZXRhX25lZWRlZChzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKnJvb3RfZWwpCiB7CiAJLyoKIAkgKiBSYXRoZXIgdGhhbiBkbyBhbGwgdGhlIHdvcmsgb2YgZGV0ZXJtaW5pbmcgaG93IG11Y2ggd2UgbmVlZApAQCAtNTksNyArMTMxLDcgQEAKIAkgKiBuZXcgdHJlZV9kZXB0aD09MCBleHRlbnRfYmxvY2ssIGFuZCBvbmUgYmxvY2sgYXQgdGhlIG5ldwogCSAqIHRvcC1vZi10aGUgdHJlZS4KIAkgKi8KLQlyZXR1cm4gbGUxNl90b19jcHUoZmUtPmlkMi5pX2xpc3QubF90cmVlX2RlcHRoKSArIDI7CisJcmV0dXJuIGxlMTZfdG9fY3B1KHJvb3RfZWwtPmxfdHJlZV9kZXB0aCkgKyAyOwogfQogCiB2b2lkIG9jZnMyX2Rpbm9kZV9uZXdfZXh0ZW50X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYW9wcy5jIGIvZnMvb2NmczIvYW9wcy5jCmluZGV4IGE1M2RhMTQuLmMyMjU0M2IgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FvcHMuYworKysgYi9mcy9vY2ZzMi9hb3BzLmMKQEAgLTY4LDkgKzY4LDcgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLAotCQkJCSAgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAotCQkJCSAgJmJoLCBPQ0ZTMl9CSF9DQUNIRUQsIGlub2RlKTsKKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sICZiaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC0xMjgsOCArMTI2LDcgQEAKIAllcnIgPSAwOwogCiBiYWlsOgotCWlmIChiaCkKLQkJYnJlbHNlKGJoKTsKKwlicmVsc2UoYmgpOwogCiAJbWxvZ19leGl0KGVycik7CiAJcmV0dXJuIGVycjsKQEAgLTI2MSwxMyArMjU4LDExIEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKIAogCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAJQlVHX09OKCEoT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKSk7CiAKLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCAmZGlfYmgsCi0JCQkgICAgICAgT0NGUzJfQkhfQ0FDSEVELCBpbm9kZSk7CisJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCAmZGlfYmgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTQ4NSwxMSArNDgwLDE0IEBACiAJfQogCiAJaWYgKG9jZnMyX3Nob3VsZF9vcmRlcl9kYXRhKGlub2RlKSkgeworCQlyZXQgPSBvY2ZzMl9qYmQyX2ZpbGVfaW5vZGUoaGFuZGxlLCBpbm9kZSk7CisjaWZkZWYgQ09ORklHX09DRlMyX0NPTVBBVF9KQkQKIAkJcmV0ID0gd2Fsa19wYWdlX2J1ZmZlcnMoaGFuZGxlLAogCQkJCQlwYWdlX2J1ZmZlcnMocGFnZSksCiAJCQkJCWZyb20sIHRvLCBOVUxMLAogCQkJCQlvY2ZzMl9qb3VybmFsX2RpcnR5X2RhdGEpOwotCQlpZiAocmV0IDwgMCkgCisjZW5kaWYKKwkJaWYgKHJldCA8IDApCiAJCQltbG9nX2Vycm5vKHJldCk7CiAJfQogb3V0OgpAQCAtNjY5LDcgKzY2Nyw3IEBACiB7CiAJam91cm5hbF90ICpqb3VybmFsID0gT0NGUzJfU0IocGFnZS0+bWFwcGluZy0+aG9zdC0+aV9zYiktPmpvdXJuYWwtPmpfam91cm5hbDsKIAotCWpvdXJuYWxfaW52YWxpZGF0ZXBhZ2Uoam91cm5hbCwgcGFnZSwgb2Zmc2V0KTsKKwlqYmQyX2pvdXJuYWxfaW52YWxpZGF0ZXBhZ2Uoam91cm5hbCwgcGFnZSwgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGludCBvY2ZzMl9yZWxlYXNlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3Qgd2FpdCkKQEAgLTY3OCw3ICs2NzYsNyBAQAogCiAJaWYgKCFwYWdlX2hhc19idWZmZXJzKHBhZ2UpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gam91cm5hbF90cnlfdG9fZnJlZV9idWZmZXJzKGpvdXJuYWwsIHBhZ2UsIHdhaXQpOworCXJldHVybiBqYmQyX2pvdXJuYWxfdHJ5X3RvX2ZyZWVfYnVmZmVycyhqb3VybmFsLCBwYWdlLCB3YWl0KTsKIH0KIAogc3RhdGljIHNzaXplX3Qgb2NmczJfZGlyZWN0X0lPKGludCBydywKQEAgLTEwNzQsMTEgKzEwNzIsMTUgQEAKIAkJdG1wcGFnZSA9IHdjLT53X3BhZ2VzW2ldOwogCiAJCWlmIChwYWdlX2hhc19idWZmZXJzKHRtcHBhZ2UpKSB7Ci0JCQlpZiAob2NmczJfc2hvdWxkX29yZGVyX2RhdGEoaW5vZGUpKQorCQkJaWYgKG9jZnMyX3Nob3VsZF9vcmRlcl9kYXRhKGlub2RlKSkgeworCQkJCW9jZnMyX2piZDJfZmlsZV9pbm9kZSh3Yy0+d19oYW5kbGUsIGlub2RlKTsKKyNpZmRlZiBDT05GSUdfT0NGUzJfQ09NUEFUX0pCRAogCQkJCXdhbGtfcGFnZV9idWZmZXJzKHdjLT53X2hhbmRsZSwKIAkJCQkJCSAgcGFnZV9idWZmZXJzKHRtcHBhZ2UpLAogCQkJCQkJICBmcm9tLCB0bywgTlVMTCwKIAkJCQkJCSAgb2NmczJfam91cm5hbF9kaXJ0eV9kYXRhKTsKKyNlbmRpZgorCQkJfQogCiAJCQlibG9ja19jb21taXRfd3JpdGUodG1wcGFnZSwgZnJvbSwgdG8pOwogCQl9CkBAIC0xMjQyLDYgKzEyNDQsNyBAQAogCWludCByZXQsIGksIG5ldywgc2hvdWxkX3plcm8gPSAwOwogCXU2NCB2X2Jsa25vLCBwX2Jsa25vOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKIAogCW5ldyA9IHBoeXMgPT0gMCA/IDEgOiAwOwogCWlmIChuZXcgfHwgdW53cml0dGVuKQpAQCAtMTI1NSwxMCArMTI1OCwxMCBAQAogCQkgKiBhbnkgYWRkaXRpb25hbCBzZW1hcGhvcmVzIG9yIGNsdXN0ZXIgbG9ja3MuCiAJCSAqLwogCQl0bXBfcG9zID0gY3BvczsKLQkJcmV0ID0gb2NmczJfZG9fZXh0ZW5kX2FsbG9jYXRpb24oT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCBpbm9kZSwKLQkJCQkJCSAmdG1wX3BvcywgMSwgMCwgd2MtPndfZGlfYmgsCi0JCQkJCQkgd2MtPndfaGFuZGxlLCBkYXRhX2FjLAotCQkJCQkJIG1ldGFfYWMsIE5VTEwpOworCQlyZXQgPSBvY2ZzMl9hZGRfaW5vZGVfZGF0YShPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGlub2RlLAorCQkJCQkgICAmdG1wX3BvcywgMSwgMCwgd2MtPndfZGlfYmgsCisJCQkJCSAgIHdjLT53X2hhbmRsZSwgZGF0YV9hYywKKwkJCQkJICAgbWV0YV9hYywgTlVMTCk7CiAJCS8qCiAJCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBiZWNhdXNlIHdlIG11c3QgaGF2ZSBhbHJlYWR5CiAJCSAqIGNhbGN1bGF0ZWQgdGhlIGNvcnJlY3QgbWV0YSBkYXRhIGFsbG9jYXRpb24gcmVxdWlyZWQuIFRoZQpAQCAtMTI3Niw3ICsxMjc5LDggQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJfSBlbHNlIGlmICh1bndyaXR0ZW4pIHsKLQkJcmV0ID0gb2NmczJfbWFya19leHRlbnRfd3JpdHRlbihpbm9kZSwgd2MtPndfZGlfYmgsCisJCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgaW5vZGUsIHdjLT53X2RpX2JoKTsKKwkJcmV0ID0gb2NmczJfbWFya19leHRlbnRfd3JpdHRlbihpbm9kZSwgJmV0LAogCQkJCQkJd2MtPndfaGFuZGxlLCBjcG9zLCAxLCBwaHlzLAogCQkJCQkJbWV0YV9hYywgJndjLT53X2RlYWxsb2MpOwogCQlpZiAocmV0IDwgMCkgewpAQCAtMTY2NSw2ICsxNjY5LDcgQEAKIAlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMgPSBOVUxMOwogCWhhbmRsZV90ICpoYW5kbGU7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OwogCiAJcmV0ID0gb2NmczJfYWxsb2Nfd3JpdGVfY3R4dCgmd2MsIG9zYiwgcG9zLCBsZW4sIGRpX2JoKTsKIAlpZiAocmV0KSB7CkBAIC0xNzEyLDE0ICsxNzE3LDIzIEBACiAJCSAqIG9jZnMyX2xvY2tfYWxsb2NhdG9ycygpLiBJdCBncmVhdGx5IG92ZXItZXN0aW1hdGVzCiAJCSAqIHRoZSB3b3JrIHRvIGJlIGRvbmUuCiAJCSAqLwotCQlyZXQgPSBvY2ZzMl9sb2NrX2FsbG9jYXRvcnMoaW5vZGUsIGRpLCBjbHVzdGVyc190b19hbGxvYywKLQkJCQkJICAgIGV4dGVudHNfdG9fc3BsaXQsICZkYXRhX2FjLCAmbWV0YV9hYyk7CisJCW1sb2coMCwgImV4dGVuZCBpbm9kZSAlbGx1LCBpX3NpemUgPSAlbGxkLCBkaS0+aV9jbHVzdGVycyA9ICV1LCIKKwkJICAgICAiIGNsdXN0ZXJzX3RvX2FkZCA9ICV1LCBleHRlbnRzX3RvX3NwbGl0ID0gJXVcbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCisJCSAgICAgKGxvbmcgbG9uZylpX3NpemVfcmVhZChpbm9kZSksIGxlMzJfdG9fY3B1KGRpLT5pX2NsdXN0ZXJzKSwKKwkJICAgICBjbHVzdGVyc190b19hbGxvYywgZXh0ZW50c190b19zcGxpdCk7CisKKwkJb2NmczJfaW5pdF9kaW5vZGVfZXh0ZW50X3RyZWUoJmV0LCBpbm9kZSwgd2MtPndfZGlfYmgpOworCQlyZXQgPSBvY2ZzMl9sb2NrX2FsbG9jYXRvcnMoaW5vZGUsICZldCwKKwkJCQkJICAgIGNsdXN0ZXJzX3RvX2FsbG9jLCBleHRlbnRzX3RvX3NwbGl0LAorCQkJCQkgICAgJmRhdGFfYWMsICZtZXRhX2FjKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQljcmVkaXRzID0gb2NmczJfY2FsY19leHRlbmRfY3JlZGl0cyhpbm9kZS0+aV9zYiwgZGksCisJCWNyZWRpdHMgPSBvY2ZzMl9jYWxjX2V4dGVuZF9jcmVkaXRzKGlub2RlLT5pX3NiLAorCQkJCQkJICAgICZkaS0+aWQyLmlfbGlzdCwKIAkJCQkJCSAgICBjbHVzdGVyc190b19hbGxvYyk7CiAKIAl9CkBAIC0xOTA1LDExICsxOTE5LDE1IEBACiAJCX0KIAogCQlpZiAocGFnZV9oYXNfYnVmZmVycyh0bXBwYWdlKSkgewotCQkJaWYgKG9jZnMyX3Nob3VsZF9vcmRlcl9kYXRhKGlub2RlKSkKKwkJCWlmIChvY2ZzMl9zaG91bGRfb3JkZXJfZGF0YShpbm9kZSkpIHsKKwkJCQlvY2ZzMl9qYmQyX2ZpbGVfaW5vZGUod2MtPndfaGFuZGxlLCBpbm9kZSk7CisjaWZkZWYgQ09ORklHX09DRlMyX0NPTVBBVF9KQkQKIAkJCQl3YWxrX3BhZ2VfYnVmZmVycyh3Yy0+d19oYW5kbGUsCiAJCQkJCQkgIHBhZ2VfYnVmZmVycyh0bXBwYWdlKSwKIAkJCQkJCSAgZnJvbSwgdG8sIE5VTEwsCiAJCQkJCQkgIG9jZnMyX2pvdXJuYWxfZGlydHlfZGF0YSk7CisjZW5kaWYKKwkJCX0KIAkJCWJsb2NrX2NvbW1pdF93cml0ZSh0bXBwYWdlLCBmcm9tLCB0byk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jIGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYwppbmRleCBmMTM2NjM5Li43ZTk0N2M2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jCisrKyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAkvKiByZW1vdmUgZnJvbSBkaXJ0eSBsaXN0IGJlZm9yZSBJL08uICovCiAJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAotCWdldF9iaChiaCk7IC8qIGZvciBlbmRfYnVmZmVyX3dyaXRlX3N5bmMoKSAqLyAgICAgICAgICAgICAgICAgICAKKwlnZXRfYmgoYmgpOyAvKiBmb3IgZW5kX2J1ZmZlcl93cml0ZV9zeW5jKCkgKi8KIAliaC0+Yl9lbmRfaW8gPSBlbmRfYnVmZmVyX3dyaXRlX3N5bmM7CiAJc3VibWl0X2JoKFdSSVRFLCBiaCk7CiAKQEAgLTg4LDIyICs4OCwxMDMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgb2NmczJfcmVhZF9ibG9ja3Moc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHU2NCBibG9jaywgaW50IG5yLAotCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoc1tdLCBpbnQgZmxhZ3MsCi0JCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCitpbnQgb2NmczJfcmVhZF9ibG9ja3Nfc3luYyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGJsb2NrLAorCQkJICAgdW5zaWduZWQgaW50IG5yLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoc1tdKQogewogCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKworCWlmICghbnIpIHsKKwkJbWxvZyhNTF9CSF9JTywgIk5vIGJ1ZmZlcnMgd2lsbCBiZSByZWFkIVxuIik7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlmb3IgKGkgPSAwIDsgaSA8IG5yIDsgaSsrKSB7CisJCWlmIChiaHNbaV0gPT0gTlVMTCkgeworCQkJYmhzW2ldID0gc2JfZ2V0YmxrKG9zYi0+c2IsIGJsb2NrKyspOworCQkJaWYgKGJoc1tpXSA9PSBOVUxMKSB7CisJCQkJc3RhdHVzID0gLUVJTzsKKwkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCQkJZ290byBiYWlsOworCQkJfQorCQl9CisJCWJoID0gYmhzW2ldOworCisJCWlmIChidWZmZXJfamJkKGJoKSkgeworCQkJbWxvZyhNTF9FUlJPUiwKKwkJCSAgICAgInRyeWluZyB0byBzeW5jIHJlYWQgYSBqYmQgIgorCQkJICAgICAibWFuYWdlZCBiaCAoYmxvY2tuciA9ICVsbHUpLCBza2lwcGluZ1xuIiwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGJ1ZmZlcl9kaXJ0eShiaCkpIHsKKwkJCS8qIFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGEgQlVHLCBvcgorCQkJICogYXQgbGVhc3QgcmV0dXJuIGFuIGVycm9yLiAqLworCQkJbWxvZyhNTF9FUlJPUiwKKwkJCSAgICAgInRyeWluZyB0byBzeW5jIHJlYWQgYSBkaXJ0eSAiCisJCQkgICAgICJidWZmZXIhIChibG9ja25yID0gJWxsdSksIHNraXBwaW5nXG4iLAorCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIpOworCQkJY29udGludWU7CisJCX0KKworCQlsb2NrX2J1ZmZlcihiaCk7CisJCWlmIChidWZmZXJfamJkKGJoKSkgeworCQkJbWxvZyhNTF9FUlJPUiwKKwkJCSAgICAgImJsb2NrICVsbHUgaGFkIHRoZSBKQkQgYml0IHNldCAiCisJCQkgICAgICJ3aGlsZSBJIHdhcyBpbiBsb2NrX2J1ZmZlciEiLAorCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIpOworCQkJQlVHKCk7CisJCX0KKworCQljbGVhcl9idWZmZXJfdXB0b2RhdGUoYmgpOworCQlnZXRfYmgoYmgpOyAvKiBmb3IgZW5kX2J1ZmZlcl9yZWFkX3N5bmMoKSAqLworCQliaC0+Yl9lbmRfaW8gPSBlbmRfYnVmZmVyX3JlYWRfc3luYzsKKwkJc3VibWl0X2JoKFJFQUQsIGJoKTsKKwl9CisKKwlmb3IgKGkgPSBucjsgaSA+IDA7IGktLSkgeworCQliaCA9IGJoc1tpIC0gMV07CisKKwkJaWYgKGJ1ZmZlcl9qYmQoYmgpKSB7CisJCQltbG9nKE1MX0VSUk9SLAorCQkJICAgICAidGhlIGpvdXJuYWwgZ290IHRoZSBidWZmZXIgd2hpbGUgaXQgd2FzICIKKwkJCSAgICAgImxvY2tlZCBmb3IgaW8hIChibG9ja25yID0gJWxsdSlcbiIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tucik7CisJCQlCVUcoKTsKKwkJfQorCisJCXdhaXRfb25fYnVmZmVyKGJoKTsKKwkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7CisJCQkvKiBTdGF0dXMgd29uJ3QgYmUgY2xlYXJlZCBmcm9tIGhlcmUgb24gb3V0LAorCQkJICogc28gd2UgY2FuIHNhZmVseSByZWNvcmQgdGhpcyBhbmQgbG9vcCBiYWNrCisJCQkgKiB0byBjbGVhbnVwIHRoZSBvdGhlciBidWZmZXJzLiAqLworCQkJc3RhdHVzID0gLUVJTzsKKwkJCXB1dF9iaChiaCk7CisJCQliaHNbaSAtIDFdID0gTlVMTDsKKwkJfQorCX0KKworYmFpbDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgb2NmczJfcmVhZF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJsb2NrLCBpbnQgbnIsCisJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW10sIGludCBmbGFncykKK3sKKwlpbnQgc3RhdHVzID0gMDsKIAlpbnQgaSwgaWdub3JlX2NhY2hlID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCi0JbWxvZ19lbnRyeSgiKGJsb2NrPSglbGx1KSwgbnI9KCVkKSwgZmxhZ3M9JWQsIGlub2RlPSVwKVxuIiwKLQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jaywgbnIsIGZsYWdzLCBpbm9kZSk7CisJbWxvZ19lbnRyeSgiKGlub2RlPSVwLCBibG9jaz0oJWxsdSksIG5yPSglZCksIGZsYWdzPSVkKVxuIiwKKwkJICAgaW5vZGUsICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2ssIG5yLCBmbGFncyk7CiAKKwlCVUdfT04oIWlub2RlKTsKIAlCVUdfT04oKGZsYWdzICYgT0NGUzJfQkhfUkVBREFIRUFEKSAmJgotCSAgICAgICAoIWlub2RlIHx8ICEoZmxhZ3MgJiBPQ0ZTMl9CSF9DQUNIRUQpKSk7CisJICAgICAgIChmbGFncyAmIE9DRlMyX0JIX0lHTk9SRV9DQUNIRSkpOwogCi0JaWYgKG9zYiA9PSBOVUxMIHx8IG9zYi0+c2IgPT0gTlVMTCB8fCBiaHMgPT0gTlVMTCkgeworCWlmIChiaHMgPT0gTlVMTCkgewogCQlzdGF0dXMgPSAtRUlOVkFMOwogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKQEAgLTEyMiwyNiArMjAzLDE5IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlzYiA9IG9zYi0+c2I7Ci0KLQlpZiAoZmxhZ3MgJiBPQ0ZTMl9CSF9DQUNIRUQgJiYgIWlub2RlKQotCQlmbGFncyAmPSB+T0NGUzJfQkhfQ0FDSEVEOwotCi0JaWYgKGlub2RlKQotCQltdXRleF9sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfaW9fbXV0ZXgpOworCW11dGV4X2xvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9pb19tdXRleCk7CiAJZm9yIChpID0gMCA7IGkgPCBuciA7IGkrKykgewogCQlpZiAoYmhzW2ldID09IE5VTEwpIHsKLQkJCWJoc1tpXSA9IHNiX2dldGJsayhzYiwgYmxvY2srKyk7CisJCQliaHNbaV0gPSBzYl9nZXRibGsoaW5vZGUtPmlfc2IsIGJsb2NrKyspOwogCQkJaWYgKGJoc1tpXSA9PSBOVUxMKSB7Ci0JCQkJaWYgKGlub2RlKQotCQkJCQltdXRleF91bmxvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9pb19tdXRleCk7CisJCQkJbXV0ZXhfdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfaW9fbXV0ZXgpOwogCQkJCXN0YXR1cyA9IC1FSU87CiAJCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJCWdvdG8gYmFpbDsKIAkJCX0KIAkJfQogCQliaCA9IGJoc1tpXTsKLQkJaWdub3JlX2NhY2hlID0gMDsKKwkJaWdub3JlX2NhY2hlID0gKGZsYWdzICYgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFKTsKIAogCQkvKiBUaGVyZSBhcmUgdGhyZWUgcmVhZC1haGVhZCBjYXNlcyBoZXJlIHdoaWNoIHdlIG5lZWQgdG8KIAkJICogYmUgY29uY2VybmVkIHdpdGguIEFsbCB0aHJlZSBhc3N1bWUgYSBidWZmZXIgaGFzCkBAIC0xNjcsMjYgKzI0MSwyNyBAQAogCQkgKiAgICBiZWZvcmUgb3VyIGlzLWl0LWluLWZsaWdodCBjaGVjay4KIAkJICovCiAKLQkJaWYgKGZsYWdzICYgT0NGUzJfQkhfQ0FDSEVEICYmCi0JCSAgICAhb2NmczJfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBiaCkpIHsKKwkJaWYgKCFpZ25vcmVfY2FjaGUgJiYgIW9jZnMyX2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgYmgpKSB7CiAJCQltbG9nKE1MX1VQVE9EQVRFLAogCQkJICAgICAiYmggKCVsbHUpLCBpbm9kZSAlbGx1IG5vdCB1cHRvZGF0ZVxuIiwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yLAogCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CisJCQkvKiBXZSdyZSB1c2luZyBpZ25vcmVfY2FjaGUgaGVyZSB0byBzYXkKKwkJCSAqICJnbyB0byBkaXNrIiAqLwogCQkJaWdub3JlX2NhY2hlID0gMTsKIAkJfQogCiAJCS8qIFhYWDogQ2FuIHdlIGV2ZXIgZ2V0IHRoaXMgYW5kICpub3QqIGhhdmUgdGhlIGNhY2hlZAogCQkgKiBmbGFnIHNldD8gKi8KIAkJaWYgKGJ1ZmZlcl9qYmQoYmgpKSB7Ci0JCQlpZiAoIShmbGFncyAmIE9DRlMyX0JIX0NBQ0hFRCkgfHwgaWdub3JlX2NhY2hlKQorCQkJaWYgKGlnbm9yZV9jYWNoZSkKIAkJCQltbG9nKE1MX0JIX0lPLCAidHJ5aW5nIHRvIHN5bmMgcmVhZCBhIGpiZCAiCiAJCQkJCSAgICAgICAibWFuYWdlZCBiaCAoYmxvY2tuciA9ICVsbHUpXG4iLAogCQkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCEoZmxhZ3MgJiBPQ0ZTMl9CSF9DQUNIRUQpIHx8IGlnbm9yZV9jYWNoZSkgeworCQlpZiAoaWdub3JlX2NhY2hlKSB7CiAJCQlpZiAoYnVmZmVyX2RpcnR5KGJoKSkgewogCQkJCS8qIFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGEgQlVHLCBvcgogCQkJCSAqIGF0IGxlYXN0IHJldHVybiBhbiBlcnJvci4gKi8KQEAgLTIyMSw3ICsyOTYsNyBAQAogCQkJICogcHJldmlvdXNseSByZWFkLWFoZWFkIGJ1ZmZlciBtYXkgaGF2ZQogCQkJICogY29tcGxldGVkIEkvTyB3aGlsZSB3ZSB3ZXJlIHdhaXRpbmcgZm9yIHRoZQogCQkJICogYnVmZmVyIGxvY2suICovCi0JCQlpZiAoKGZsYWdzICYgT0NGUzJfQkhfQ0FDSEVEKQorCQkJaWYgKCEoZmxhZ3MgJiBPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUpCiAJCQkgICAgJiYgIShmbGFncyAmIE9DRlMyX0JIX1JFQURBSEVBRCkKIAkJCSAgICAmJiBvY2ZzMl9idWZmZXJfdXB0b2RhdGUoaW5vZGUsIGJoKSkgewogCQkJCXVubG9ja19idWZmZXIoYmgpOwpAQCAtMjY1LDE1ICszNDAsMTQgQEAKIAkJLyogQWx3YXlzIHNldCB0aGUgYnVmZmVyIGluIHRoZSBjYWNoZSwgZXZlbiBpZiBpdCB3YXMKIAkJICogYSBmb3JjZWQgcmVhZCwgb3IgcmVhZC1haGVhZCB3aGljaCBoYXNuJ3QgeWV0CiAJCSAqIGNvbXBsZXRlZC4gKi8KLQkJaWYgKGlub2RlKQotCQkJb2NmczJfc2V0X2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgYmgpOworCQlvY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBiaCk7CiAJfQotCWlmIChpbm9kZSkKLQkJbXV0ZXhfdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmT0NGUzJfSShpbm9kZSktPmlwX2lvX211dGV4KTsKIAogCW1sb2coTUxfQkhfSU8sICJibG9jaz0oJWxsdSksIG5yPSglZCksIGNhY2hlZD0lcywgZmxhZ3M9MHgleFxuIiwgCiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrLCBuciwKLQkgICAgICghKGZsYWdzICYgT0NGUzJfQkhfQ0FDSEVEKSB8fCBpZ25vcmVfY2FjaGUpID8gIm5vIiA6ICJ5ZXMiLCBmbGFncyk7CisJICAgICAoKGZsYWdzICYgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFKSB8fCBpZ25vcmVfY2FjaGUpID8gIm5vIiA6ICJ5ZXMiLAorCSAgICAgZmxhZ3MpOwogCiBiYWlsOgogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5oIGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uaAppbmRleCBjMmU3ODYxLi43NWUxZGNiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5oCisrKyBiL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmgKQEAgLTMxLDMxICszMSwyOSBAQAogdm9pZCBvY2ZzMl9lbmRfYnVmZmVyX2lvX3N5bmMoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKIAkJCSAgICAgaW50IHVwdG9kYXRlKTsKIAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfcmVhZF9ibG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgICAgICAgICAgKm9zYiwKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3JlYWRfYmxvY2soc3RydWN0IGlub2RlCSAgICAgICAqaW5vZGUsCiAJCQkJICAgdTY0ICAgICAgICAgICAgICAgICAgb2ZmLAotCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLAotCQkJCSAgIGludCAgICAgICAgICAgICAgICAgIGZsYWdzLAotCQkJCSAgIHN0cnVjdCBpbm9kZSAgICAgICAgKmlub2RlKTsKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCk7CiAKIGludCBvY2ZzMl93cml0ZV9ibG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgICAgICAgICAgKm9zYiwKIAkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICAqYmgsCiAJCSAgICAgIHN0cnVjdCBpbm9kZSAgICAgICAgKmlub2RlKTsKLWludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3Qgb2NmczJfc3VwZXIgICAgICAgICAgKm9zYiwKK2ludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUJICAqaW5vZGUsCiAJCSAgICAgIHU2NCAgICAgICAgICAgICAgICAgIGJsb2NrLAogCQkgICAgICBpbnQgICAgICAgICAgICAgICAgICBuciwKIAkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICAqYmhzW10sCi0JCSAgICAgIGludCAgICAgICAgICAgICAgICAgIGZsYWdzLAotCQkgICAgICBzdHJ1Y3QgaW5vZGUgICAgICAgICppbm9kZSk7CisJCSAgICAgIGludCAgICAgICAgICAgICAgICAgIGZsYWdzKTsKK2ludCBvY2ZzMl9yZWFkX2Jsb2Nrc19zeW5jKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxvY2ssCisJCQkgICB1bnNpZ25lZCBpbnQgbnIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW10pOwogCiBpbnQgb2NmczJfd3JpdGVfc3VwZXJfb3JfYmFja3VwKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogCi0jZGVmaW5lIE9DRlMyX0JIX0NBQ0hFRCAgICAgICAgICAgIDEKKyNkZWZpbmUgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFICAgICAgMQogI2RlZmluZSBPQ0ZTMl9CSF9SRUFEQUhFQUQgICAgICAgICA4CiAKLXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3JlYWRfYmxvY2soc3RydWN0IG9jZnMyX3N1cGVyICogb3NiLCB1NjQgb2ZmLAotCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLCBpbnQgZmxhZ3MsCi0JCQkJICAgc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3JlYWRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG9mZiwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCkKIHsKIAlpbnQgc3RhdHVzID0gMDsKIApAQCAtNjUsOCArNjMsNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfcmVhZF9ibG9ja3Mob3NiLCBvZmYsIDEsIGJoLAotCQkJCSAgIGZsYWdzLCBpbm9kZSk7CisJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsIG9mZiwgMSwgYmgsIDApOwogCiBiYWlsOgogCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jCmluZGV4IDIzYzczMmYuLmQ4YTBjYjkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jCkBAIC0xMDksNiArMTA5LDcgQEAKIAlkZWZpbmVfbWFzayhDT05OKSwKIAlkZWZpbmVfbWFzayhRVU9SVU0pLAogCWRlZmluZV9tYXNrKEVYUE9SVCksCisJZGVmaW5lX21hc2soWEFUVFIpLAogCWRlZmluZV9tYXNrKEVSUk9SKSwKIAlkZWZpbmVfbWFzayhOT1RJQ0UpLAogCWRlZmluZV9tYXNrKEtUSFJFQUQpLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmggYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAppbmRleCA1OTdlMDY0Li41NzY3MGM2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaApAQCAtMTEyLDYgKzExMiw3IEBACiAjZGVmaW5lIE1MX0NPTk4JCTB4MDAwMDAwMDAwNDAwMDAwMFVMTCAvKiBuZXQgY29ubmVjdGlvbiBtYW5hZ2VtZW50ICovCiAjZGVmaW5lIE1MX1FVT1JVTQkweDAwMDAwMDAwMDgwMDAwMDBVTEwgLyogbmV0IGNvbm5lY3Rpb24gcXVvcnVtICovCiAjZGVmaW5lIE1MX0VYUE9SVAkweDAwMDAwMDAwMTAwMDAwMDBVTEwgLyogb2NmczIgZXhwb3J0IG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTUxfWEFUVFIJMHgwMDAwMDAwMDIwMDAwMDAwVUxMIC8qIG9jZnMyIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKi8KIC8qIGJpdHMgdGhhdCBhcmUgaW5mcmVxdWVudGx5IGdpdmVuIGFuZCBmcmVxdWVudGx5IG1hdGNoZWQgaW4gdGhlIGhpZ2ggd29yZCAqLwogI2RlZmluZSBNTF9FUlJPUgkweDAwMDAwMDAxMDAwMDAwMDBVTEwgLyogc2VudCB0byBLRVJOX0VSUiAqLwogI2RlZmluZSBNTF9OT1RJQ0UJMHgwMDAwMDAwMjAwMDAwMDAwVUxMIC8qIHNldG4gdG8gS0VSTl9OT1RJQ0UgKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2Rpci5jIGIvZnMvb2NmczIvZGlyLmMKaW5kZXggOWNjZTU2My4uMDI2ZTZlYiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGlyLmMKKysrIGIvZnMvb2NmczIvZGlyLmMKQEAgLTgyLDYgKzgyLDQ5IEBACiAJCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqbmV3X2JoKTsKIAorc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqb2NmczJfYnJlYWQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICAgaW50IGJsb2NrLCBpbnQgKmVyciwgaW50IHJlYWRhKQoreworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOworCWludCB0bXBlcnI7CisJdTY0IHBfYmxrbm87CisJaW50IHJlYWRmbGFncyA9IDA7CisKKwlpZiAocmVhZGEpCisJCXJlYWRmbGFncyB8PSBPQ0ZTMl9CSF9SRUFEQUhFQUQ7CisKKwlpZiAoKCh1NjQpYmxvY2sgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpID49CisJICAgIGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQlCVUdfT04oIXJlYWRhKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZG93bl9yZWFkKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKKwl0bXBlcnIgPSBvY2ZzMl9leHRlbnRfbWFwX2dldF9ibG9ja3MoaW5vZGUsIGJsb2NrLCAmcF9ibGtubywgTlVMTCwKKwkJCQkJICAgICBOVUxMKTsKKwl1cF9yZWFkKCZPQ0ZTMl9JKGlub2RlKS0+aXBfYWxsb2Nfc2VtKTsKKwlpZiAodG1wZXJyIDwgMCkgeworCQltbG9nX2Vycm5vKHRtcGVycik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwl0bXBlcnIgPSBvY2ZzMl9yZWFkX2Jsb2Nrcyhpbm9kZSwgcF9ibGtubywgMSwgJmJoLCByZWFkZmxhZ3MpOworCWlmICh0bXBlcnIgPCAwKQorCQlnb3RvIGZhaWw7CisKKwl0bXBlcnIgPSAwOworCisJKmVyciA9IDA7CisJcmV0dXJuIGJoOworCitmYWlsOgorCWJyZWxzZShiaCk7CisJYmggPSBOVUxMOworCisJKmVyciA9IC1FSU87CisJcmV0dXJuIE5VTEw7Cit9CisKIC8qCiAgKiBiaCBwYXNzZWQgaGVyZSBjYW4gYmUgYW4gaW5vZGUgYmxvY2sgb3IgYSBkaXIgZGF0YSBibG9jaywgZGVwZW5kaW5nCiAgKiBvbiB0aGUgaW5vZGUgaW5saW5lIGRhdGEgZmxhZy4KQEAgLTE4OCw4ICsyMzEsNyBAQAogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpOwogCXN0cnVjdCBvY2ZzMl9pbmxpbmVfZGF0YSAqZGF0YTsKIAotCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soT0NGUzJfU0IoZGlyLT5pX3NiKSwgT0NGUzJfSShkaXIpLT5pcF9ibGtubywKLQkJCSAgICAgICAmZGlfYmgsIE9DRlMyX0JIX0NBQ0hFRCwgZGlyKTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGRpciwgT0NGUzJfSShkaXIpLT5pcF9ibGtubywgJmRpX2JoKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC0yNjAsMTQgKzMwMiwxMyBAQAogCQl9CiAJCWlmICgoYmggPSBiaF91c2VbcmFfcHRyKytdKSA9PSBOVUxMKQogCQkJZ290byBuZXh0OwotCQl3YWl0X29uX2J1ZmZlcihiaCk7Ci0JCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkgewotCQkJLyogcmVhZCBlcnJvciwgc2tpcCBibG9jayAmIGhvcGUgZm9yIHRoZSBiZXN0ICovCisJCWlmIChvY2ZzMl9yZWFkX2Jsb2NrKGRpciwgYmxvY2ssICZiaCkpIHsKKwkJCS8qIHJlYWQgZXJyb3IsIHNraXAgYmxvY2sgJiBob3BlIGZvciB0aGUgYmVzdC4KKwkJCSAqIG9jZnMyX3JlYWRfYmxvY2soKSBoYXMgcmVsZWFzZWQgdGhlIGJoLiAqLwogCQkJb2NmczJfZXJyb3IoZGlyLT5pX3NiLCAicmVhZGluZyBkaXJlY3RvcnkgJWxsdSwgIgogCQkJCSAgICAib2Zmc2V0ICVsdVxuIiwKIAkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLAogCQkJCSAgICBibG9jayk7Ci0JCQlicmVsc2UoYmgpOwogCQkJZ290byBuZXh0OwogCQl9CiAJCWkgPSBvY2ZzMl9zZWFyY2hfZGlyYmxvY2soYmgsIGRpciwgbmFtZSwgbmFtZWxlbiwKQEAgLTQxNyw4ICs0NTgsNyBAQAogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpOwogCXN0cnVjdCBvY2ZzMl9pbmxpbmVfZGF0YSAqZGF0YTsKIAotCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soT0NGUzJfU0IoZGlyLT5pX3NiKSwgT0NGUzJfSShkaXIpLT5pcF9ibGtubywKLQkJCSAgICAgICAmZGlfYmgsIE9DRlMyX0JIX0NBQ0hFRCwgZGlyKTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGRpciwgT0NGUzJfSShkaXIpLT5pcF9ibGtubywgJmRpX2JoKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC01OTYsOCArNjM2LDcgQEAKIAlzdHJ1Y3Qgb2NmczJfaW5saW5lX2RhdGEgKmRhdGE7CiAJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGU7CiAKLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAotCQkJICAgICAgICZkaV9iaCwgT0NGUzJfQkhfQ0FDSEVELCBpbm9kZSk7CisJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCAmZGlfYmgpOwogCWlmIChyZXQpIHsKIAkJbWxvZyhNTF9FUlJPUiwgIlVuYWJsZSB0byByZWFkIGlub2RlIGJsb2NrIGZvciBkaXIgJWxsdVxuIiwKIAkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CkBAIC03MTYsOCArNzU1LDcgQEAKIAkJCWZvciAoaSA9IHJhX3NlY3RvcnMgPj4gKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gOSk7CiAJCQkgICAgIGkgPiAwOyBpLS0pIHsKIAkJCQl0bXAgPSBvY2ZzMl9icmVhZChpbm9kZSwgKytibGssICZlcnIsIDEpOwotCQkJCWlmICh0bXApCi0JCQkJCWJyZWxzZSh0bXApOworCQkJCWJyZWxzZSh0bXApOwogCQkJfQogCQkJbGFzdF9yYV9ibGsgPSBibGs7CiAJCQlyYV9zZWN0b3JzID0gODsKQEAgLTg5OSwxMCArOTM3LDggQEAKIGxlYXZlOgogCWlmIChzdGF0dXMgPCAwKSB7CiAJCSpkaXJlbnQgPSBOVUxMOwotCQlpZiAoKmRpcmVudF9iaCkgewotCQkJYnJlbHNlKCpkaXJlbnRfYmgpOwotCQkJKmRpcmVudF9iaCA9IE5VTEw7Ci0JCX0KKwkJYnJlbHNlKCpkaXJlbnRfYmgpOworCQkqZGlyZW50X2JoID0gTlVMTDsKIAl9CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKQEAgLTk1MSw4ICs5ODcsNyBAQAogCiAJcmV0ID0gMDsKIGJhaWw6Ci0JaWYgKGRpcmVudF9iaCkKLQkJYnJlbHNlKGRpcmVudF9iaCk7CisJYnJlbHNlKGRpcmVudF9iaCk7CiAKIAltbG9nX2V4aXQocmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtMTEyNyw4ICsxMTYyLDcgQEAKIAogCXN0YXR1cyA9IDA7CiBiYWlsOgotCWlmIChuZXdfYmgpCi0JCWJyZWxzZShuZXdfYmgpOworCWJyZWxzZShuZXdfYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTExOTIsNiArMTIyNiw5IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJkYXRhX2JoID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKIAloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKworCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgZGlyLCBkaV9iaCk7CiAKIAlhbGxvYyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhzYiwgYnl0ZXMpOwogCkBAIC0xMzA1LDggKzEzNDIsOCBAQAogCSAqIFRoaXMgc2hvdWxkIG5ldmVyIGZhaWwgYXMgb3VyIGV4dGVudCBsaXN0IGlzIGVtcHR5IGFuZCBhbGwKIAkgKiByZWxhdGVkIGJsb2NrcyBoYXZlIGJlZW4gam91cm5hbGVkIGFscmVhZHkuCiAJICovCi0JcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgZGlyLCBkaV9iaCwgMCwgYmxrbm8sIGxlbiwgMCwKLQkJCQkgIE5VTEwpOworCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGRpciwgJmV0LCAwLCBibGtubywgbGVuLAorCQkJCSAgMCwgTlVMTCk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0X2NvbW1pdDsKQEAgLTEzMzcsOCArMTM3NCw4IEBACiAJCX0KIAkJYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLT5pX3NiLCBiaXRfb2ZmKTsKIAotCQlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBkaXIsIGRpX2JoLCAxLCBibGtubywKLQkJCQkJICBsZW4sIDAsIE5VTEwpOworCQlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBkaXIsICZldCwgMSwKKwkJCQkJICBibGtubywgbGVuLCAwLCBOVUxMKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXRfY29tbWl0OwpAQCAtMTM4Myw5ICsxNDIwLDkgQEAKIAlpZiAoZXh0ZW5kKSB7CiAJCXUzMiBvZmZzZXQgPSBPQ0ZTMl9JKGRpciktPmlwX2NsdXN0ZXJzOwogCi0JCXN0YXR1cyA9IG9jZnMyX2RvX2V4dGVuZF9hbGxvY2F0aW9uKE9DRlMyX1NCKHNiKSwgZGlyLCAmb2Zmc2V0LAotCQkJCQkJICAgIDEsIDAsIHBhcmVudF9mZV9iaCwgaGFuZGxlLAotCQkJCQkJICAgIGRhdGFfYWMsIG1ldGFfYWMsIE5VTEwpOworCQlzdGF0dXMgPSBvY2ZzMl9hZGRfaW5vZGVfZGF0YShPQ0ZTMl9TQihzYiksIGRpciwgJm9mZnNldCwKKwkJCQkJICAgICAgMSwgMCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsCisJCQkJCSAgICAgIGRhdGFfYWMsIG1ldGFfYWMsIE5VTEwpOwogCQlCVUdfT04oc3RhdHVzID09IC1FQUdBSU4pOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTQzMCwxMiArMTQ2NywxNCBAQAogCWludCBjcmVkaXRzLCBudW1fZnJlZV9leHRlbnRzLCBkcm9wX2FsbG9jX3NlbSA9IDA7CiAJbG9mZl90IGRpcl9pX3NpemU7CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBwYXJlbnRfZmVfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJmZlLT5pZDIuaV9saXN0OwogCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CiAJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKiBkZTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gb3NiLT5zYjsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIApAQCAtMTQ3OSw3ICsxNTE4LDggQEAKIAlzcGluX2xvY2soJk9DRlMyX0koZGlyKS0+aXBfbG9jayk7CiAJaWYgKGRpcl9pX3NpemUgPT0gb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMoc2IsIE9DRlMyX0koZGlyKS0+aXBfY2x1c3RlcnMpKSB7CiAJCXNwaW5fdW5sb2NrKCZPQ0ZTMl9JKGRpciktPmlwX2xvY2spOwotCQludW1fZnJlZV9leHRlbnRzID0gb2NmczJfbnVtX2ZyZWVfZXh0ZW50cyhvc2IsIGRpciwgZmUpOworCQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGRpciwgcGFyZW50X2ZlX2JoKTsKKwkJbnVtX2ZyZWVfZXh0ZW50cyA9IG9jZnMyX251bV9mcmVlX2V4dGVudHMob3NiLCBkaXIsICZldCk7CiAJCWlmIChudW1fZnJlZV9leHRlbnRzIDwgMCkgewogCQkJc3RhdHVzID0gbnVtX2ZyZWVfZXh0ZW50czsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTE0ODcsNyArMTUyNyw3IEBACiAJCX0KIAogCQlpZiAoIW51bV9mcmVlX2V4dGVudHMpIHsKLQkJCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhKG9zYiwgZmUsICZtZXRhX2FjKTsKKwkJCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhKG9zYiwgZWwsICZtZXRhX2FjKTsKIAkJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQkJaWYgKHN0YXR1cyAhPSAtRU5PU1BDKQogCQkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xNTAyLDcgKzE1NDIsNyBAQAogCQkJZ290byBiYWlsOwogCQl9CiAKLQkJY3JlZGl0cyA9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMoc2IsIGZlLCAxKTsKKwkJY3JlZGl0cyA9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMoc2IsIGVsLCAxKTsKIAl9IGVsc2UgewogCQlzcGluX3VubG9jaygmT0NGUzJfSShkaXIpLT5pcF9sb2NrKTsKIAkJY3JlZGl0cyA9IE9DRlMyX1NJTVBMRV9ESVJfRVhURU5EX0NSRURJVFM7CkBAIC0xNTY4LDggKzE2MDgsNyBAQAogCWlmIChtZXRhX2FjKQogCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7CiAKLQlpZiAobmV3X2JoKQotCQlicmVsc2UobmV3X2JoKTsKKwlicmVsc2UobmV3X2JoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CkBAIC0xNjk2LDggKzE3MzUsNyBAQAogCiAJc3RhdHVzID0gMDsKIGJhaWw6Ci0JaWYgKGJoKQotCQlicmVsc2UoYmgpOworCWJyZWxzZShiaCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTc1Niw3ICsxNzk0LDYgQEAKIAkqcmV0X2RlX2JoID0gYmg7CiAJYmggPSBOVUxMOwogb3V0OgotCWlmIChiaCkKLQkJYnJlbHNlKGJoKTsKKwlicmVsc2UoYmgpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1nbHVlLmMgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKaW5kZXggZWFlM2Q2NC4uZWM2ODQ0MiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtZ2x1ZS5jCisrKyBiL2ZzL29jZnMyL2RsbWdsdWUuYwpAQCAtMjAyNCw4ICsyMDI0LDcgQEAKIAl9IGVsc2UgewogCQkvKiBCb28sIHdlIGhhdmUgdG8gZ28gdG8gZGlzay4gKi8KIAkJLyogcmVhZCBiaCwgY2FzdCwgb2NmczJfcmVmcmVzaF9pbm9kZSAqLwotCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgb2ktPmlwX2Jsa25vLAotCQkJCQkgIGJoLCBPQ0ZTMl9CSF9DQUNIRUQsIGlub2RlKTsKKwkJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgb2ktPmlwX2Jsa25vLCBiaCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWxfcmVmcmVzaDsKQEAgLTIwODYsMTEgKzIwODUsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKLQkJCQkgIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKLQkJCQkgIHJldF9iaCwKLQkJCQkgIE9DRlMyX0JIX0NBQ0hFRCwKLQkJCQkgIGlub2RlKTsKKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIHJldF9iaCk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZXh0ZW50X21hcC5jIGIvZnMvb2NmczIvZXh0ZW50X21hcC5jCmluZGV4IGFlZDI2OGUuLjJiYWVkYWMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2V4dGVudF9tYXAuYworKysgYi9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKQEAgLTI5Myw4ICsyOTMsNyBAQAogCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWw7CiAKLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgbGFzdF9lYl9ibGssCi0JCQkgICAgICAgJmViX2JoLCBPQ0ZTMl9CSF9DQUNIRUQsIGlub2RlKTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBsYXN0X2ViX2JsaywgJmViX2JoKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC0zODIsOSArMzgxLDkgQEAKIAkJaWYgKGxlNjRfdG9fY3B1KGViLT5oX25leHRfbGVhZl9ibGspID09IDBVTEwpCiAJCQlnb3RvIG5vX21vcmVfZXh0ZW50czsKIAotCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKKwkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwKIAkJCQkgICAgICAgbGU2NF90b19jcHUoZWItPmhfbmV4dF9sZWFmX2JsayksCi0JCQkJICAgICAgICZuZXh0X2ViX2JoLCBPQ0ZTMl9CSF9DQUNIRUQsIGlub2RlKTsKKwkJCQkgICAgICAgJm5leHRfZWJfYmgpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTU1MSw2ICs1NTAsNjYgQEAKIAkJKm51bV9jbHVzdGVycyA9IGxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKSAtIGNvZmY7CiB9CiAKK2ludCBvY2ZzMl94YXR0cl9nZXRfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIHZfY2x1c3RlciwKKwkJCSAgICAgdTMyICpwX2NsdXN0ZXIsIHUzMiAqbnVtX2NsdXN0ZXJzLAorCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsKQoreworCWludCByZXQgPSAwLCBpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZWJfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWM7CisJdTMyIGNvZmY7CisKKwlpZiAoZWwtPmxfdHJlZV9kZXB0aCkgeworCQlyZXQgPSBvY2ZzMl9maW5kX2xlYWYoaW5vZGUsIGVsLCB2X2NsdXN0ZXIsICZlYl9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZWIgPSAoc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqKSBlYl9iaC0+Yl9kYXRhOworCQllbCA9ICZlYi0+aF9saXN0OworCisJCWlmIChlbC0+bF90cmVlX2RlcHRoKSB7CisJCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKKwkJCQkgICAgIklub2RlICVsdSBoYXMgbm9uIHplcm8gdHJlZSBkZXB0aCBpbiAiCisJCQkJICAgICJ4YXR0ciBsZWFmIGJsb2NrICVsbHVcbiIsIGlub2RlLT5pX2lubywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyllYl9iaC0+Yl9ibG9ja25yKTsKKwkJCXJldCA9IC1FUk9GUzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaSA9IG9jZnMyX3NlYXJjaF9leHRlbnRfbGlzdChlbCwgdl9jbHVzdGVyKTsKKwlpZiAoaSA9PSAtMSkgeworCQlyZXQgPSAtRVJPRlM7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJcmVjID0gJmVsLT5sX3JlY3NbaV07CisJCUJVR19PTih2X2NsdXN0ZXIgPCBsZTMyX3RvX2NwdShyZWMtPmVfY3BvcykpOworCisJCWlmICghcmVjLT5lX2Jsa25vKSB7CisJCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwgIklub2RlICVsdSBoYXMgYmFkIGV4dGVudCAiCisJCQkJICAgICJyZWNvcmQgKCV1LCAldSwgMCkgaW4geGF0dHIiLCBpbm9kZS0+aV9pbm8sCisJCQkJICAgIGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSwKKwkJCQkgICAgb2NmczJfcmVjX2NsdXN0ZXJzKGVsLCByZWMpKTsKKwkJCXJldCA9IC1FUk9GUzsKKwkJCWdvdG8gb3V0OworCQl9CisJCWNvZmYgPSB2X2NsdXN0ZXIgLSBsZTMyX3RvX2NwdShyZWMtPmVfY3Bvcyk7CisJCSpwX2NsdXN0ZXIgPSBvY2ZzMl9ibG9ja3NfdG9fY2x1c3RlcnMoaW5vZGUtPmlfc2IsCisJCQkJCQkgICAgbGU2NF90b19jcHUocmVjLT5lX2Jsa25vKSk7CisJCSpwX2NsdXN0ZXIgPSAqcF9jbHVzdGVyICsgY29mZjsKKwkJaWYgKG51bV9jbHVzdGVycykKKwkJCSpudW1fY2x1c3RlcnMgPSBvY2ZzMl9yZWNfY2x1c3RlcnMoZWwsIHJlYykgLSBjb2ZmOworCX0KK291dDoKKwlpZiAoZWJfYmgpCisJCWJyZWxzZShlYl9iaCk7CisJcmV0dXJuIHJldDsKK30KKwogaW50IG9jZnMyX2dldF9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgdl9jbHVzdGVyLAogCQkgICAgICAgdTMyICpwX2NsdXN0ZXIsIHUzMiAqbnVtX2NsdXN0ZXJzLAogCQkgICAgICAgdW5zaWduZWQgaW50ICpleHRlbnRfZmxhZ3MpCkBAIC01NzEsOCArNjMwLDcgQEAKIAlpZiAocmV0ID09IDApCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKLQkJCSAgICAgICAmZGlfYmgsIE9DRlMyX0JIX0NBQ0hFRCwgaW5vZGUpOworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgJmRpX2JoKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9leHRlbnRfbWFwLmggYi9mcy9vY2ZzMi9leHRlbnRfbWFwLmgKaW5kZXggMWI5NzQ5MC4uMWM0YWE4YiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZXh0ZW50X21hcC5oCisrKyBiL2ZzL29jZnMyL2V4dGVudF9tYXAuaApAQCAtNTMsNCArNTMsOCBAQAogaW50IG9jZnMyX2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmllbWFwX2V4dGVudF9pbmZvICpmaWVpbmZvLAogCQkgdTY0IG1hcF9zdGFydCwgdTY0IG1hcF9sZW4pOwogCitpbnQgb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiB2X2NsdXN0ZXIsCisJCQkgICAgIHUzMiAqcF9jbHVzdGVyLCB1MzIgKm51bV9jbHVzdGVycywKKwkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCk7CisKICNlbmRpZiAgLyogX0VYVEVOVF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZmlsZS5jIGIvZnMvb2NmczIvZmlsZS5jCmluZGV4IGVkMzg3OTYuLjhkMzIyNWEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2ZpbGUuYworKysgYi9mcy9vY2ZzMi9maWxlLmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJtbWFwLmgiCiAjaW5jbHVkZSAic3ViYWxsb2MuaCIKICNpbmNsdWRlICJzdXBlci5oIgorI2luY2x1ZGUgInhhdHRyLmgiCiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgogCkBAIC0xODQsNyArMTg1LDcgQEAKIAkJZ290byBiYWlsOwogCiAJam91cm5hbCA9IG9zYi0+am91cm5hbC0+al9qb3VybmFsOwotCWVyciA9IGpvdXJuYWxfZm9yY2VfY29tbWl0KGpvdXJuYWwpOworCWVyciA9IGpiZDJfam91cm5hbF9mb3JjZV9jb21taXQoam91cm5hbCk7CiAKIGJhaWw6CiAJbWxvZ19leGl0KGVycik7CkBAIC00ODgsNyArNDg5LDcgQEAKIH0KIAogLyoKLSAqIGV4dGVuZCBhbGxvY2F0aW9uIG9ubHkgaGVyZS4KKyAqIGV4dGVuZCBmaWxlIGFsbG9jYXRpb24gb25seSBoZXJlLgogICogd2UnbGwgdXBkYXRlIGFsbCB0aGUgZGlzayBzdHVmZiwgYW5kIG9pcC0+YWxsb2Nfc2l6ZQogICoKICAqIGV4cGVjdCBzdHVmZiB0byBiZSBsb2NrZWQsIGEgdHJhbnNhY3Rpb24gc3RhcnRlZCBhbmQgZW5vdWdoIGRhdGEgLwpAQCAtNDk3LDE4OSArNDk4LDI1IEBACiAgKiBXaWxsIHJldHVybiAtRUFHQUlOLCBhbmQgYSByZWFzb24gaWYgYSByZXN0YXJ0IGlzIG5lZWRlZC4KICAqIElmIHBhc3NlZCBpbiwgKnJlYXNvbiB3aWxsIGFsd2F5cyBiZSBzZXQsIGV2ZW4gaW4gZXJyb3IuCiAgKi8KLWludCBvY2ZzMl9kb19leHRlbmRfYWxsb2NhdGlvbihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgIHUzMiAqbG9naWNhbF9vZmZzZXQsCi0JCQkgICAgICAgdTMyIGNsdXN0ZXJzX3RvX2FkZCwKLQkJCSAgICAgICBpbnQgbWFya191bndyaXR0ZW4sCi0JCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKLQkJCSAgICAgICBoYW5kbGVfdCAqaGFuZGxlLAotCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAotCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAotCQkJICAgICAgIGVudW0gb2NmczJfYWxsb2NfcmVzdGFydGVkICpyZWFzb25fcmV0KQoraW50IG9jZnMyX2FkZF9pbm9kZV9kYXRhKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgdTMyICpsb2dpY2FsX29mZnNldCwKKwkJCSB1MzIgY2x1c3RlcnNfdG9fYWRkLAorCQkJIGludCBtYXJrX3Vud3JpdHRlbiwKKwkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAorCQkJIGhhbmRsZV90ICpoYW5kbGUsCisJCQkgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCisJCQkgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkgZW51bSBvY2ZzMl9hbGxvY19yZXN0YXJ0ZWQgKnJlYXNvbl9yZXQpCiB7Ci0JaW50IHN0YXR1cyA9IDA7Ci0JaW50IGZyZWVfZXh0ZW50czsKLQlzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGZlX2JoLT5iX2RhdGE7Ci0JZW51bSBvY2ZzMl9hbGxvY19yZXN0YXJ0ZWQgcmVhc29uID0gUkVTVEFSVF9OT05FOwotCXUzMiBiaXRfb2ZmLCBudW1fYml0czsKLQl1NjQgYmxvY2s7Ci0JdTggZmxhZ3MgPSAwOworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OwogCi0JQlVHX09OKCFjbHVzdGVyc190b19hZGQpOwotCi0JaWYgKG1hcmtfdW53cml0dGVuKQotCQlmbGFncyA9IE9DRlMyX0VYVF9VTldSSVRURU47Ci0KLQlmcmVlX2V4dGVudHMgPSBvY2ZzMl9udW1fZnJlZV9leHRlbnRzKG9zYiwgaW5vZGUsIGZlKTsKLQlpZiAoZnJlZV9leHRlbnRzIDwgMCkgewotCQlzdGF0dXMgPSBmcmVlX2V4dGVudHM7Ci0JCW1sb2dfZXJybm8oc3RhdHVzKTsKLQkJZ290byBsZWF2ZTsKLQl9Ci0KLQkvKiB0aGVyZSBhcmUgdHdvIGNhc2VzIHdoaWNoIGNvdWxkIGNhdXNlIHVzIHRvIEVBR0FJTiBpbiB0aGUKLQkgKiB3ZS1uZWVkLW1vcmUtbWV0YWRhdGEgY2FzZToKLQkgKiAxKSB3ZSBoYXZlbid0IHJlc2VydmVkICphbnkqCi0JICogMikgd2UgYXJlIHNvIGZyYWdtZW50ZWQsIHdlJ3ZlIG5lZWRlZCB0byBhZGQgbWV0YWRhdGEgdG9vCi0JICogICAgbWFueSB0aW1lcy4gKi8KLQlpZiAoIWZyZWVfZXh0ZW50cyAmJiAhbWV0YV9hYykgewotCQltbG9nKDAsICJ3ZSBoYXZlbid0IHJlc2VydmVkIGFueSBtZXRhZGF0YSFcbiIpOwotCQlzdGF0dXMgPSAtRUFHQUlOOwotCQlyZWFzb24gPSBSRVNUQVJUX01FVEE7Ci0JCWdvdG8gbGVhdmU7Ci0JfSBlbHNlIGlmICgoIWZyZWVfZXh0ZW50cykKLQkJICAgJiYgKG9jZnMyX2FsbG9jX2NvbnRleHRfYml0c19sZWZ0KG1ldGFfYWMpCi0JCSAgICAgICA8IG9jZnMyX2V4dGVuZF9tZXRhX25lZWRlZChmZSkpKSB7Ci0JCW1sb2coMCwgImZpbGVzeXN0ZW0gaXMgcmVhbGx5IGZyYWdtZW50ZWQuLi5cbiIpOwotCQlzdGF0dXMgPSAtRUFHQUlOOwotCQlyZWFzb24gPSBSRVNUQVJUX01FVEE7Ci0JCWdvdG8gbGVhdmU7Ci0JfQotCi0Jc3RhdHVzID0gX19vY2ZzMl9jbGFpbV9jbHVzdGVycyhvc2IsIGhhbmRsZSwgZGF0YV9hYywgMSwKLQkJCQkJY2x1c3RlcnNfdG9fYWRkLCAmYml0X29mZiwgJm51bV9iaXRzKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCi0JCQltbG9nX2Vycm5vKHN0YXR1cyk7Ci0JCWdvdG8gbGVhdmU7Ci0JfQotCi0JQlVHX09OKG51bV9iaXRzID4gY2x1c3RlcnNfdG9fYWRkKTsKLQotCS8qIHJlc2VydmUgb3VyIHdyaXRlIGVhcmx5IC0tIGluc2VydF9leHRlbnQgbWF5IHVwZGF0ZSB0aGUgaW5vZGUgKi8KLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBmZV9iaCwKLQkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJbWxvZ19lcnJubyhzdGF0dXMpOwotCQlnb3RvIGxlYXZlOwotCX0KLQotCWJsb2NrID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKG9zYi0+c2IsIGJpdF9vZmYpOwotCW1sb2coMCwgIkFsbG9jYXRpbmcgJXUgY2x1c3RlcnMgYXQgYmxvY2sgJXUgZm9yIGlub2RlICVsbHVcbiIsCi0JICAgICBudW1fYml0cywgYml0X29mZiwgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8pOwotCXN0YXR1cyA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGlub2RlLCBmZV9iaCwKLQkJCQkgICAgICpsb2dpY2FsX29mZnNldCwgYmxvY2ssIG51bV9iaXRzLAotCQkJCSAgICAgZmxhZ3MsIG1ldGFfYWMpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCW1sb2dfZXJybm8oc3RhdHVzKTsKLQkJZ290byBsZWF2ZTsKLQl9Ci0KLQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZmVfYmgpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCW1sb2dfZXJybm8oc3RhdHVzKTsKLQkJZ290byBsZWF2ZTsKLQl9Ci0KLQljbHVzdGVyc190b19hZGQgLT0gbnVtX2JpdHM7Ci0JKmxvZ2ljYWxfb2Zmc2V0ICs9IG51bV9iaXRzOwotCi0JaWYgKGNsdXN0ZXJzX3RvX2FkZCkgewotCQltbG9nKDAsICJuZWVkIHRvIGFsbG9jIG9uY2UgbW9yZSwgY2x1c3RlcnMgPSAldSwgd2FudGVkID0gIgotCQkgICAgICIldVxuIiwgZmUtPmlfY2x1c3RlcnMsIGNsdXN0ZXJzX3RvX2FkZCk7Ci0JCXN0YXR1cyA9IC1FQUdBSU47Ci0JCXJlYXNvbiA9IFJFU1RBUlRfVFJBTlM7Ci0JfQotCi1sZWF2ZToKLQltbG9nX2V4aXQoc3RhdHVzKTsKLQlpZiAocmVhc29uX3JldCkKLQkJKnJlYXNvbl9yZXQgPSByZWFzb247Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKLSAqIEZvciBhIGdpdmVuIGFsbG9jYXRpb24sIGRldGVybWluZSB3aGljaCBhbGxvY2F0b3JzIHdpbGwgbmVlZCB0byBiZQotICogYWNjZXNzZWQsIGFuZCBsb2NrIHRoZW0sIHJlc2VydmluZyB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIGJpdHMuCi0gKgotICogU3BhcnNlIGZpbGUgc3lzdGVtcyBjYWxsIHRoaXMgZnJvbSBvY2ZzMl93cml0ZV9iZWdpbl9ub2xvY2soKQotICogYW5kIG9jZnMyX2FsbG9jYXRlX3Vud3JpdHRlbl9leHRlbnRzKCkuCi0gKgotICogRmlsZSBzeXN0ZW1zIHdoaWNoIGRvbid0IHN1cHBvcnQgaG9sZXMgY2FsbCB0aGlzIGZyb20KLSAqIG9jZnMyX2V4dGVuZF9hbGxvY2F0aW9uKCkuCi0gKi8KLWludCBvY2ZzMl9sb2NrX2FsbG9jYXRvcnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksCi0JCQkgIHUzMiBjbHVzdGVyc190b19hZGQsIHUzMiBleHRlbnRzX3RvX3NwbGl0LAotCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmRhdGFfYWMsCi0JCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqbWV0YV9hYykKLXsKLQlpbnQgcmV0ID0gMCwgbnVtX2ZyZWVfZXh0ZW50czsKLQl1bnNpZ25lZCBpbnQgbWF4X3JlY3NfbmVlZGVkID0gY2x1c3RlcnNfdG9fYWRkICsgMiAqIGV4dGVudHNfdG9fc3BsaXQ7Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7Ci0KLQkqbWV0YV9hYyA9IE5VTEw7Ci0JaWYgKGRhdGFfYWMpCi0JCSpkYXRhX2FjID0gTlVMTDsKLQotCUJVR19PTihjbHVzdGVyc190b19hZGQgIT0gMCAmJiBkYXRhX2FjID09IE5VTEwpOwotCi0JbWxvZygwLCAiZXh0ZW5kIGlub2RlICVsbHUsIGlfc2l6ZSA9ICVsbGQsIGRpLT5pX2NsdXN0ZXJzID0gJXUsICIKLQkgICAgICJjbHVzdGVyc190b19hZGQgPSAldSwgZXh0ZW50c190b19zcGxpdCA9ICV1XG4iLAotCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIChsb25nIGxvbmcpaV9zaXplX3JlYWQoaW5vZGUpLAotCSAgICAgbGUzMl90b19jcHUoZGktPmlfY2x1c3RlcnMpLCBjbHVzdGVyc190b19hZGQsIGV4dGVudHNfdG9fc3BsaXQpOwotCi0JbnVtX2ZyZWVfZXh0ZW50cyA9IG9jZnMyX251bV9mcmVlX2V4dGVudHMob3NiLCBpbm9kZSwgZGkpOwotCWlmIChudW1fZnJlZV9leHRlbnRzIDwgMCkgewotCQlyZXQgPSBudW1fZnJlZV9leHRlbnRzOwotCQltbG9nX2Vycm5vKHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qCi0JICogU3BhcnNlIGFsbG9jYXRpb24gZmlsZSBzeXN0ZW1zIG5lZWQgdG8gYmUgbW9yZSBjb25zZXJ2YXRpdmUKLQkgKiB3aXRoIHJlc2VydmluZyByb29tIGZvciBleHBhbnNpb24gLSB0aGUgYWN0dWFsIGFsbG9jYXRpb24KLQkgKiBoYXBwZW5zIHdoaWxlIHdlJ3ZlIGdvdCBhIGpvdXJuYWwgaGFuZGxlIG9wZW4gc28gcmUtdGFraW5nCi0JICogYSBjbHVzdGVyIGxvY2sgKGJlY2F1c2Ugd2UgcmFuIG91dCBvZiByb29tIGZvciBhbm90aGVyCi0JICogZXh0ZW50KSB3aWxsIHZpb2xhdGUgb3JkZXJpbmcgcnVsZXMuCi0JICoKLQkgKiBNb3N0IG9mIHRoZSB0aW1lIHdlJ2xsIG9ubHkgYmUgc2VlaW5nIHRoaXMgMSBjbHVzdGVyIGF0IGEgdGltZQotCSAqIGFueXdheS4KLQkgKgotCSAqIEFsd2F5cyBsb2NrIGZvciBhbnkgdW53cml0dGVuIGV4dGVudHMgLSB3ZSBtaWdodCB3YW50IHRvCi0JICogYWRkIGJsb2NrcyBkdXJpbmcgYSBzcGxpdC4KLQkgKi8KLQlpZiAoIW51bV9mcmVlX2V4dGVudHMgfHwKLQkgICAgKG9jZnMyX3NwYXJzZV9hbGxvYyhvc2IpICYmIG51bV9mcmVlX2V4dGVudHMgPCBtYXhfcmVjc19uZWVkZWQpKSB7Ci0JCXJldCA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhKG9zYiwgZGksIG1ldGFfYWMpOwotCQlpZiAocmV0IDwgMCkgewotCQkJaWYgKHJldCAhPSAtRU5PU1BDKQotCQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JaWYgKGNsdXN0ZXJzX3RvX2FkZCA9PSAwKQotCQlnb3RvIG91dDsKLQotCXJldCA9IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnMob3NiLCBjbHVzdGVyc190b19hZGQsIGRhdGFfYWMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWlmIChyZXQgIT0gLUVOT1NQQykKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0JaWYgKHJldCkgewotCQlpZiAoKm1ldGFfYWMpIHsKLQkJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dCgqbWV0YV9hYyk7Ci0JCQkqbWV0YV9hYyA9IE5VTEw7Ci0JCX0KLQotCQkvKgotCQkgKiBXZSBjYW5ub3QgaGF2ZSBhbiBlcnJvciBhbmQgYSBub24gbnVsbCAqZGF0YV9hYy4KLQkJICovCi0JfQorCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgaW5vZGUsIGZlX2JoKTsKKwlyZXQgPSBvY2ZzMl9hZGRfY2x1c3RlcnNfaW5fYnRyZWUob3NiLCBpbm9kZSwgbG9naWNhbF9vZmZzZXQsCisJCQkJCSAgIGNsdXN0ZXJzX3RvX2FkZCwgbWFya191bndyaXR0ZW4sCisJCQkJCSAgICZldCwgaGFuZGxlLAorCQkJCQkgICBkYXRhX2FjLCBtZXRhX2FjLCByZWFzb25fcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC02OTgsNiArNTM1LDcgQEAKIAlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CiAJZW51bSBvY2ZzMl9hbGxvY19yZXN0YXJ0ZWQgd2h5OwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKIAogCW1sb2dfZW50cnkoIihjbHVzdGVyc190b19hZGQgPSAldSlcbiIsIGNsdXN0ZXJzX3RvX2FkZCk7CiAKQEAgLTcwNyw4ICs1NDUsNyBAQAogCSAqLwogCUJVR19PTihtYXJrX3Vud3JpdHRlbiAmJiAhb2NmczJfc3BhcnNlX2FsbG9jKG9zYikpOwogCi0Jc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhvc2IsIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgJmJoLAotCQkJCSAgT0NGUzJfQkhfQ0FDSEVELCBpbm9kZSk7CisJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCAmYmgpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTcyNCwxNCArNTYxLDIxIEBACiByZXN0YXJ0X2FsbDoKIAlCVUdfT04obGUzMl90b19jcHUoZmUtPmlfY2x1c3RlcnMpICE9IE9DRlMyX0koaW5vZGUpLT5pcF9jbHVzdGVycyk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9sb2NrX2FsbG9jYXRvcnMoaW5vZGUsIGZlLCBjbHVzdGVyc190b19hZGQsIDAsICZkYXRhX2FjLAotCQkJCSAgICAgICAmbWV0YV9hYyk7CisJbWxvZygwLCAiZXh0ZW5kIGlub2RlICVsbHUsIGlfc2l6ZSA9ICVsbGQsIGRpLT5pX2NsdXN0ZXJzID0gJXUsICIKKwkgICAgICJjbHVzdGVyc190b19hZGQgPSAldVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAorCSAgICAgKGxvbmcgbG9uZylpX3NpemVfcmVhZChpbm9kZSksIGxlMzJfdG9fY3B1KGZlLT5pX2NsdXN0ZXJzKSwKKwkgICAgIGNsdXN0ZXJzX3RvX2FkZCk7CisJb2NmczJfaW5pdF9kaW5vZGVfZXh0ZW50X3RyZWUoJmV0LCBpbm9kZSwgYmgpOworCXN0YXR1cyA9IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhpbm9kZSwgJmV0LCBjbHVzdGVyc190b19hZGQsIDAsCisJCQkJICAgICAgICZkYXRhX2FjLCAmbWV0YV9hYyk7CiAJaWYgKHN0YXR1cykgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gbGVhdmU7CiAJfQogCi0JY3JlZGl0cyA9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMob3NiLT5zYiwgZmUsIGNsdXN0ZXJzX3RvX2FkZCk7CisJY3JlZGl0cyA9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMob3NiLT5zYiwgJmZlLT5pZDIuaV9saXN0LAorCQkJCQkgICAgY2x1c3RlcnNfdG9fYWRkKTsKIAloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOwogCWlmIChJU19FUlIoaGFuZGxlKSkgewogCQlzdGF0dXMgPSBQVFJfRVJSKGhhbmRsZSk7CkBAIC03NTMsMTYgKzU5NywxNiBAQAogCiAJcHJldl9jbHVzdGVycyA9IE9DRlMyX0koaW5vZGUpLT5pcF9jbHVzdGVyczsKIAotCXN0YXR1cyA9IG9jZnMyX2RvX2V4dGVuZF9hbGxvY2F0aW9uKG9zYiwKLQkJCQkJICAgIGlub2RlLAotCQkJCQkgICAgJmxvZ2ljYWxfc3RhcnQsCi0JCQkJCSAgICBjbHVzdGVyc190b19hZGQsCi0JCQkJCSAgICBtYXJrX3Vud3JpdHRlbiwKLQkJCQkJICAgIGJoLAotCQkJCQkgICAgaGFuZGxlLAotCQkJCQkgICAgZGF0YV9hYywKLQkJCQkJICAgIG1ldGFfYWMsCi0JCQkJCSAgICAmd2h5KTsKKwlzdGF0dXMgPSBvY2ZzMl9hZGRfaW5vZGVfZGF0YShvc2IsCisJCQkJICAgICAgaW5vZGUsCisJCQkJICAgICAgJmxvZ2ljYWxfc3RhcnQsCisJCQkJICAgICAgY2x1c3RlcnNfdG9fYWRkLAorCQkJCSAgICAgIG1hcmtfdW53cml0dGVuLAorCQkJCSAgICAgIGJoLAorCQkJCSAgICAgIGhhbmRsZSwKKwkJCQkgICAgICBkYXRhX2FjLAorCQkJCSAgICAgIG1ldGFfYWMsCisJCQkJICAgICAgJndoeSk7CiAJaWYgKChzdGF0dXMgPCAwKSAmJiAoc3RhdHVzICE9IC1FQUdBSU4pKSB7CiAJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTc4OSw3ICs2MzMsNyBAQAogCQkJbWxvZygwLCAicmVzdGFydGluZyB0cmFuc2FjdGlvbi5cbiIpOwogCQkJLyogVE9ETzogVGhpcyBjYW4gYmUgbW9yZSBpbnRlbGxpZ2VudC4gKi8KIAkJCWNyZWRpdHMgPSBvY2ZzMl9jYWxjX2V4dGVuZF9jcmVkaXRzKG9zYi0+c2IsCi0JCQkJCQkJICAgIGZlLAorCQkJCQkJCSAgICAmZmUtPmlkMi5pX2xpc3QsCiAJCQkJCQkJICAgIGNsdXN0ZXJzX3RvX2FkZCk7CiAJCQlzdGF0dXMgPSBvY2ZzMl9leHRlbmRfdHJhbnMoaGFuZGxlLCBjcmVkaXRzKTsKIAkJCWlmIChzdGF0dXMgPCAwKSB7CkBAIC04MjYsMTAgKzY3MCw4IEBACiAJCXJlc3RhcnRfZnVuYyA9IDA7CiAJCWdvdG8gcmVzdGFydF9hbGw7CiAJfQotCWlmIChiaCkgewotCQlicmVsc2UoYmgpOwotCQliaCA9IE5VTEw7Ci0JfQorCWJyZWxzZShiaCk7CisJYmggPSBOVUxMOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTEwOTYsOSArOTM4LDE1IEBACiAJCQlnb3RvIGJhaWxfdW5sb2NrOwogCQl9CiAKLQkJaWYgKGlfc2l6ZV9yZWFkKGlub2RlKSA+IGF0dHItPmlhX3NpemUpCisJCWlmIChpX3NpemVfcmVhZChpbm9kZSkgPiBhdHRyLT5pYV9zaXplKSB7CisJCQlpZiAob2NmczJfc2hvdWxkX29yZGVyX2RhdGEoaW5vZGUpKSB7CisJCQkJc3RhdHVzID0gb2NmczJfYmVnaW5fb3JkZXJlZF90cnVuY2F0ZShpbm9kZSwKKwkJCQkJCQkJICAgICAgYXR0ci0+aWFfc2l6ZSk7CisJCQkJaWYgKHN0YXR1cykKKwkJCQkJZ290byBiYWlsX3VubG9jazsKKwkJCX0KIAkJCXN0YXR1cyA9IG9jZnMyX3RydW5jYXRlX2ZpbGUoaW5vZGUsIGJoLCBhdHRyLT5pYV9zaXplKTsKLQkJZWxzZQorCQl9IGVsc2UKIAkJCXN0YXR1cyA9IG9jZnMyX2V4dGVuZF9maWxlKGlub2RlLCBiaCwgYXR0ci0+aWFfc2l6ZSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCkBAIC0xMTQwLDggKzk4OCw3IEBACiAJaWYgKHNpemVfY2hhbmdlKQogCQlvY2ZzMl9yd191bmxvY2soaW5vZGUsIDEpOwogYmFpbDoKLQlpZiAoYmgpCi0JCWJyZWxzZShiaCk7CisJYnJlbHNlKGJoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CkBAIC0xMjg0LDggKzExMzEsNyBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOwogCi0JcmV0ID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksCi0JCQkgICAgICAgb2ktPmlwX2Jsa25vLCAmYmgsIE9DRlMyX0JIX0NBQ0hFRCwgaW5vZGUpOworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIG9pLT5pcF9ibGtubywgJmJoKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMTMxMSw5ICsxMTU3LDggQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoID0gTlVMTDsKIAogCWlmIChPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpIHsKLQkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksCi0JCQkJICAgICAgIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgJmRpX2JoLAotCQkJCSAgICAgICBPQ0ZTMl9CSF9DQUNIRUQsIGlub2RlKTsKKwkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAorCQkJCSAgICAgICAmZGlfYmgpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTEzOTQsOCArMTIzOSwxMSBAQAogCWhhbmRsZV90ICpoYW5kbGU7CiAJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKIAotCXJldCA9IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhpbm9kZSwgZGksIDAsIDEsIE5VTEwsICZtZXRhX2FjKTsKKwlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCBkaV9iaCk7CisKKwlyZXQgPSBvY2ZzMl9sb2NrX2FsbG9jYXRvcnMoaW5vZGUsICZldCwgMCwgMSwgTlVMTCwgJm1ldGFfYWMpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlyZXR1cm4gcmV0OwpAQCAtMTQyNSw3ICsxMjczLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gb2NmczJfcmVtb3ZlX2V4dGVudChpbm9kZSwgZGlfYmgsIGNwb3MsIGxlbiwgaGFuZGxlLCBtZXRhX2FjLAorCXJldCA9IG9jZnMyX3JlbW92ZV9leHRlbnQoaW5vZGUsICZldCwgY3BvcywgbGVuLCBoYW5kbGUsIG1ldGFfYWMsCiAJCQkJICBkZWFsbG9jKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTIwNDAsNyArMTg4OCw3IEBACiAJCSAqLwogCQlpZiAob2xkX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpIHx8CiAJCSAgICBvbGRfY2x1c3RlcnMgIT0gT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzKSB7Ci0JCQlyZXQgPSBqb3VybmFsX2ZvcmNlX2NvbW1pdChvc2ItPmpvdXJuYWwtPmpfam91cm5hbCk7CisJCQlyZXQgPSBqYmQyX2pvdXJuYWxfZm9yY2VfY29tbWl0KG9zYi0+am91cm5hbC0+al9qb3VybmFsKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCXdyaXR0ZW4gPSByZXQ7CiAJCX0KQEAgLTIyMjcsNiArMjA3NSwxMCBAQAogCS5zZXRhdHRyCT0gb2NmczJfc2V0YXR0ciwKIAkuZ2V0YXR0cgk9IG9jZnMyX2dldGF0dHIsCiAJLnBlcm1pc3Npb24JPSBvY2ZzMl9wZXJtaXNzaW9uLAorCS5zZXR4YXR0cgk9IGdlbmVyaWNfc2V0eGF0dHIsCisJLmdldHhhdHRyCT0gZ2VuZXJpY19nZXR4YXR0ciwKKwkubGlzdHhhdHRyCT0gb2NmczJfbGlzdHhhdHRyLAorCS5yZW1vdmV4YXR0cgk9IGdlbmVyaWNfcmVtb3ZleGF0dHIsCiAJLmZhbGxvY2F0ZQk9IG9jZnMyX2ZhbGxvY2F0ZSwKIAkuZmllbWFwCQk9IG9jZnMyX2ZpZW1hcCwKIH07CkBAIC0yMjM3LDYgKzIwODksMTAgQEAKIAkucGVybWlzc2lvbgk9IG9jZnMyX3Blcm1pc3Npb24sCiB9OwogCisvKgorICogT3RoZXIgdGhhbiAtPmxvY2ssIGtlZXAgb2NmczJfZm9wcyBhbmQgb2NmczJfZG9wcyBpbiBzeW5jIHdpdGgKKyAqIG9jZnMyX2ZvcHNfbm9fcGxvY2tzIGFuZCBvY2ZzMl9kb3BzX25vX3Bsb2NrcyEKKyAqLwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9mb3BzID0gewogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCkBAIC0yMjUxLDEyICsyMTA3LDU5IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwgICA9IG9jZnMyX2NvbXBhdF9pb2N0bCwKICNlbmRpZgorCS5sb2NrCQk9IG9jZnMyX2xvY2ssCisJLmZsb2NrCQk9IG9jZnMyX2Zsb2NrLAorCS5zcGxpY2VfcmVhZAk9IG9jZnMyX2ZpbGVfc3BsaWNlX3JlYWQsCisJLnNwbGljZV93cml0ZQk9IG9jZnMyX2ZpbGVfc3BsaWNlX3dyaXRlLAorfTsKKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9kb3BzID0geworCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKKwkucmVhZAkJPSBnZW5lcmljX3JlYWRfZGlyLAorCS5yZWFkZGlyCT0gb2NmczJfcmVhZGRpciwKKwkuZnN5bmMJCT0gb2NmczJfc3luY19maWxlLAorCS5yZWxlYXNlCT0gb2NmczJfZGlyX3JlbGVhc2UsCisJLm9wZW4JCT0gb2NmczJfZGlyX29wZW4sCisJLnVubG9ja2VkX2lvY3RsCT0gb2NmczJfaW9jdGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwgICA9IG9jZnMyX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorCS5sb2NrCQk9IG9jZnMyX2xvY2ssCisJLmZsb2NrCQk9IG9jZnMyX2Zsb2NrLAorfTsKKworLyoKKyAqIFBPU0lYLWxvY2tsZXNzIHZhcmlhbnRzIG9mIG91ciBmaWxlX29wZXJhdGlvbnMuCisgKgorICogVGhlc2Ugd2lsbCBiZSB1c2VkIGlmIHRoZSB1bmRlcmx5aW5nIGNsdXN0ZXIgc3RhY2sgZG9lcyBub3Qgc3VwcG9ydAorICogcG9zaXggZmlsZSBsb2NraW5nLCBpZiB0aGUgdXNlciBwYXNzZXMgdGhlICJsb2NhbGZsb2NrcyIgbW91bnQKKyAqIG9wdGlvbiwgb3IgaWYgd2UgaGF2ZSBhIGxvY2FsLW9ubHkgZnMuCisgKgorICogb2NmczJfZmxvY2sgaXMgaW4gaGVyZSBiZWNhdXNlIGFsbCBzdGFja3MgaGFuZGxlIFVOSVggZmlsZSBsb2NrcywKKyAqIHNvIHdlIHN0aWxsIHdhbnQgaXQgaW4gdGhlIGNhc2Ugb2Ygbm8gc3RhY2sgc3VwcG9ydCBmb3IKKyAqIHBsb2Nrcy4gSW50ZXJuYWxseSwgaXQgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgd2hlbiBhc2tlZCB0byBpZ25vcmUKKyAqIHRoZSBjbHVzdGVyLgorICovCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9jZnMyX2ZvcHNfbm9fcGxvY2tzID0geworCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKKwkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCisJLm1tYXAJCT0gb2NmczJfbW1hcCwKKwkuZnN5bmMJCT0gb2NmczJfc3luY19maWxlLAorCS5yZWxlYXNlCT0gb2NmczJfZmlsZV9yZWxlYXNlLAorCS5vcGVuCQk9IG9jZnMyX2ZpbGVfb3BlbiwKKwkuYWlvX3JlYWQJPSBvY2ZzMl9maWxlX2Fpb19yZWFkLAorCS5haW9fd3JpdGUJPSBvY2ZzMl9maWxlX2Fpb193cml0ZSwKKwkudW5sb2NrZWRfaW9jdGwJPSBvY2ZzMl9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCAgID0gb2NmczJfY29tcGF0X2lvY3RsLAorI2VuZGlmCiAJLmZsb2NrCQk9IG9jZnMyX2Zsb2NrLAogCS5zcGxpY2VfcmVhZAk9IG9jZnMyX2ZpbGVfc3BsaWNlX3JlYWQsCiAJLnNwbGljZV93cml0ZQk9IG9jZnMyX2ZpbGVfc3BsaWNlX3dyaXRlLAogfTsKIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9kb3BzID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9kb3BzX25vX3Bsb2NrcyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpcgk9IG9jZnMyX3JlYWRkaXIsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9maWxlLmggYi9mcy9vY2ZzMi9maWxlLmgKaW5kZXggMWUyN2I0ZC4uZTkyMzgyYyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZmlsZS5oCisrKyBiL2ZzL29jZnMyL2ZpbGUuaApAQCAtMjgsOSArMjgsMTIgQEAKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NmczJfZm9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9jZnMyX2RvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9mb3BzX25vX3Bsb2NrczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9jZnMyX2RvcHNfbm9fcGxvY2tzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2ZpbGVfaW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9zcGVjaWFsX2ZpbGVfaW9wczsKIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0OworZW51bSBvY2ZzMl9hbGxvY19yZXN0YXJ0ZWQ7CiAKIHN0cnVjdCBvY2ZzMl9maWxlX3ByaXZhdGUgewogCXN0cnVjdCBmaWxlCQkqZnBfZmlsZTsKQEAgLTM4LDI3ICs0MSwxOCBAQAogCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcwlmcF9mbG9jazsKIH07CiAKLWVudW0gb2NmczJfYWxsb2NfcmVzdGFydGVkIHsKLQlSRVNUQVJUX05PTkUgPSAwLAotCVJFU1RBUlRfVFJBTlMsCi0JUkVTVEFSVF9NRVRBCi19OwotaW50IG9jZnMyX2RvX2V4dGVuZF9hbGxvY2F0aW9uKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgICAgdTMyICpsb2dpY2FsX29mZnNldCwKLQkJCSAgICAgICB1MzIgY2x1c3RlcnNfdG9fYWRkLAotCQkJICAgICAgIGludCBtYXJrX3Vud3JpdHRlbiwKLQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAotCQkJICAgICAgIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCi0JCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCi0JCQkgICAgICAgZW51bSBvY2ZzMl9hbGxvY19yZXN0YXJ0ZWQgKnJlYXNvbl9yZXQpOworaW50IG9jZnMyX2FkZF9pbm9kZV9kYXRhKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgdTMyICpsb2dpY2FsX29mZnNldCwKKwkJCSB1MzIgY2x1c3RlcnNfdG9fYWRkLAorCQkJIGludCBtYXJrX3Vud3JpdHRlbiwKKwkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAorCQkJIGhhbmRsZV90ICpoYW5kbGUsCisJCQkgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCisJCQkgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkgZW51bSBvY2ZzMl9hbGxvY19yZXN0YXJ0ZWQgKnJlYXNvbl9yZXQpOwogaW50IG9jZnMyX2V4dGVuZF9ub19ob2xlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgbmV3X2lfc2l6ZSwKIAkJCSAgdTY0IHplcm9fdG8pOwotaW50IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSwKLQkJCSAgdTMyIGNsdXN0ZXJzX3RvX2FkZCwgdTMyIGV4dGVudHNfdG9fc3BsaXQsCi0JCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqZGF0YV9hYywKLQkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiptZXRhX2FjKTsKIGludCBvY2ZzMl9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKTsKIGludCBvY2ZzMl9nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCSAgc3RydWN0IGtzdGF0ICpzdGF0KTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmMgYi9mcy9vY2ZzMi9pbm9kZS5jCmluZGV4IDdlOWU0YzcuLjQ5MDM2ODggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmMKKysrIGIvZnMvb2NmczIvaW5vZGUuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgInN5bWxpbmsuaCIKICNpbmNsdWRlICJzeXNmaWxlLmgiCiAjaW5jbHVkZSAidXB0b2RhdGUuaCIKKyNpbmNsdWRlICJ4YXR0ci5oIgogCiAjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKIApAQCAtMjE5LDYgKzIyMCw3IEBACiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYjsKIAlpbnQgc3RhdHVzID0gLUVJTlZBTDsKKwlpbnQgdXNlX3Bsb2NrcyA9IDE7CiAKIAltbG9nX2VudHJ5KCIoMHglcCwgc2l6ZTolbGx1KVxuIiwgaW5vZGUsCiAJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoZmUtPmlfc2l6ZSkpOwpAQCAtMjI2LDYgKzIyOCwxMCBAQAogCXNiID0gaW5vZGUtPmlfc2I7CiAJb3NiID0gT0NGUzJfU0Ioc2IpOwogCisJaWYgKChvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfTE9DQUxGTE9DS1MpIHx8CisJICAgIG9jZnMyX21vdW50X2xvY2FsKG9zYikgfHwgIW9jZnMyX3N0YWNrX3N1cHBvcnRzX3Bsb2NrcygpKQorCQl1c2VfcGxvY2tzID0gMDsKKwogCS8qIHRoaXMgbWVhbnMgdGhhdCByZWFkX2lub2RlIGNhbm5vdCBjcmVhdGUgYSBzdXBlcmJsb2NrIGlub2RlCiAJICogdG9kYXkuICBjaGFuZ2UgaWYgbmVlZGVkLiAqLwogCWlmICghT0NGUzJfSVNfVkFMSURfRElOT0RFKGZlKSB8fApAQCAtMjk1LDEzICszMDEsMTkgQEAKIAogCXN3aXRjaCAoaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkgewogCSAgICBjYXNlIFNfSUZSRUc6Ci0JCSAgICBpbm9kZS0+aV9mb3AgPSAmb2NmczJfZm9wczsKKwkJICAgIGlmICh1c2VfcGxvY2tzKQorCQkJICAgIGlub2RlLT5pX2ZvcCA9ICZvY2ZzMl9mb3BzOworCQkgICAgZWxzZQorCQkJICAgIGlub2RlLT5pX2ZvcCA9ICZvY2ZzMl9mb3BzX25vX3Bsb2NrczsKIAkJICAgIGlub2RlLT5pX29wID0gJm9jZnMyX2ZpbGVfaW9wczsKIAkJICAgIGlfc2l6ZV93cml0ZShpbm9kZSwgbGU2NF90b19jcHUoZmUtPmlfc2l6ZSkpOwogCQkgICAgYnJlYWs7CiAJICAgIGNhc2UgU19JRkRJUjoKIAkJICAgIGlub2RlLT5pX29wID0gJm9jZnMyX2Rpcl9pb3BzOwotCQkgICAgaW5vZGUtPmlfZm9wID0gJm9jZnMyX2RvcHM7CisJCSAgICBpZiAodXNlX3Bsb2NrcykKKwkJCSAgICBpbm9kZS0+aV9mb3AgPSAmb2NmczJfZG9wczsKKwkJICAgIGVsc2UKKwkJCSAgICBpbm9kZS0+aV9mb3AgPSAmb2NmczJfZG9wc19ub19wbG9ja3M7CiAJCSAgICBpX3NpemVfd3JpdGUoaW5vZGUsIGxlNjRfdG9fY3B1KGZlLT5pX3NpemUpKTsKIAkJICAgIGJyZWFrOwogCSAgICBjYXNlIFNfSUZMTks6CkBAIC00NDgsOCArNDYwLDExIEBACiAJCX0KIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgYXJncy0+ZmlfYmxrbm8sICZiaCwgMCwKLQkJCQkgIGNhbl9sb2NrID8gaW5vZGUgOiBOVUxMKTsKKwlpZiAoY2FuX2xvY2spCisJCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2tzKGlub2RlLCBhcmdzLT5maV9ibGtubywgMSwgJmJoLAorCQkJCQkgICBPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUpOworCWVsc2UKKwkJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9ja3Nfc3luYyhvc2IsIGFyZ3MtPmZpX2Jsa25vLCAxLCAmYmgpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtNTIyLDYgKzUzNyw5IEBACiAJICogZGF0YSBhbmQgZmFzdCBzeW1saW5rcy4KIAkgKi8KIAlpZiAoZmUtPmlfY2x1c3RlcnMpIHsKKwkJaWYgKG9jZnMyX3Nob3VsZF9vcmRlcl9kYXRhKGlub2RlKSkKKwkJCW9jZnMyX2JlZ2luX29yZGVyZWRfdHJ1bmNhdGUoaW5vZGUsIDApOworCiAJCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMpOwogCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKIAkJCXN0YXR1cyA9IFBUUl9FUlIoaGFuZGxlKTsKQEAgLTczMCw2ICs3NDgsMTMgQEAKIAkJZ290byBiYWlsX3VubG9ja19kaXI7CiAJfQogCisJLypGcmVlIGV4dGVuZGVkIGF0dHJpYnV0ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5vZGUuKi8KKwlzdGF0dXMgPSBvY2ZzMl94YXR0cl9yZW1vdmUoaW5vZGUsIGRpX2JoKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gYmFpbF91bmxvY2tfZGlyOworCX0KKwogCXN0YXR1cyA9IG9jZnMyX3JlbW92ZV9pbm9kZShpbm9kZSwgZGlfYmgsIG9ycGhhbl9kaXJfaW5vZGUsCiAJCQkJICAgIG9ycGhhbl9kaXJfYmgpOwogCWlmIChzdGF0dXMgPCAwKQpAQCAtMTA4MSw2ICsxMTA2LDggQEAKIAlvaS0+aXBfbGFzdF90cmFucyA9IDA7CiAJb2ktPmlwX2Rpcl9zdGFydF9sb29rdXAgPSAwOwogCW9pLT5pcF9ibGtubyA9IDBVTEw7CisJamJkMl9qb3VybmFsX3JlbGVhc2VfamJkX2lub2RlKE9DRlMyX1NCKGlub2RlLT5pX3NiKS0+am91cm5hbC0+al9qb3VybmFsLAorCQkJCSAgICAgICAmb2ktPmlwX2ppbm9kZSk7CiAKIGJhaWw6CiAJbWxvZ19leGl0X3ZvaWQoKTsKQEAgLTExMDcsNTggKzExMzQsNiBAQAogfQogCiAvKgotICogVE9ETzogdGhpcyBzaG91bGQgcHJvYmFibHkgYmUgbWVyZ2VkIGludG8gb2NmczJfZ2V0X2Jsb2NrCi0gKgotICogSG93ZXZlciwgeW91IG5vdyBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gdGhlIGNvbnRfcHJlcGFyZV93cml0ZSgpCi0gKiBzdHVmZiBpbiBvY2ZzMl9nZXRfYmxvY2sgKHRoYXQgaXMsIG9jZnMyX2dldF9ibG9jayBwcmV0dHkgbXVjaAotICogZXhwZWN0cyBuZXZlciB0byBleHRlbmQpLgotICovCi1zdHJ1Y3QgYnVmZmVyX2hlYWQgKm9jZnMyX2JyZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJaW50IGJsb2NrLCBpbnQgKmVyciwgaW50IHJlYWRhKQotewotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwotCWludCB0bXBlcnI7Ci0JdTY0IHBfYmxrbm87Ci0JaW50IHJlYWRmbGFncyA9IE9DRlMyX0JIX0NBQ0hFRDsKLQotCWlmIChyZWFkYSkKLQkJcmVhZGZsYWdzIHw9IE9DRlMyX0JIX1JFQURBSEVBRDsKLQotCWlmICgoKHU2NClibG9jayA8PCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0cykgPj0KLQkgICAgaV9zaXplX3JlYWQoaW5vZGUpKSB7Ci0JCUJVR19PTighcmVhZGEpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlkb3duX3JlYWQoJk9DRlMyX0koaW5vZGUpLT5pcF9hbGxvY19zZW0pOwotCXRtcGVyciA9IG9jZnMyX2V4dGVudF9tYXBfZ2V0X2Jsb2Nrcyhpbm9kZSwgYmxvY2ssICZwX2Jsa25vLCBOVUxMLAotCQkJCQkgICAgIE5VTEwpOwotCXVwX3JlYWQoJk9DRlMyX0koaW5vZGUpLT5pcF9hbGxvY19zZW0pOwotCWlmICh0bXBlcnIgPCAwKSB7Ci0JCW1sb2dfZXJybm8odG1wZXJyKTsKLQkJZ290byBmYWlsOwotCX0KLQotCXRtcGVyciA9IG9jZnMyX3JlYWRfYmxvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCBwX2Jsa25vLCAmYmgsCi0JCQkJICByZWFkZmxhZ3MsIGlub2RlKTsKLQlpZiAodG1wZXJyIDwgMCkKLQkJZ290byBmYWlsOwotCi0JdG1wZXJyID0gMDsKLQotCSplcnIgPSAwOwotCXJldHVybiBiaDsKLQotZmFpbDoKLQlpZiAoYmgpIHsKLQkJYnJlbHNlKGJoKTsKLQkJYmggPSBOVUxMOwotCX0KLQkqZXJyID0gLUVJTzsKLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKICAqIFRoaXMgaXMgY2FsbGVkIGZyb20gb3VyIGdldGF0dHIuCiAgKi8KIGludCBvY2ZzMl9pbm9kZV9yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmggYi9mcy9vY2ZzMi9pbm9kZS5oCmluZGV4IDM5MGE4NTUuLjJmMzdhZjkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmgKKysrIGIvZnMvb2NmczIvaW5vZGUuaApAQCAtNDAsNiArNDAsOSBAQAogCS8qIHByb3RlY3RzIGFsbG9jYXRpb24gY2hhbmdlcyBvbiB0aGlzIGlub2RlLiAqLwogCXN0cnVjdCByd19zZW1hcGhvcmUJCWlwX2FsbG9jX3NlbTsKIAorCS8qIHByb3RlY3RzIGV4dGVuZGVkIGF0dHJpYnV0ZSBjaGFuZ2VzIG9uIHRoaXMgaW5vZGUgKi8KKwlzdHJ1Y3Qgcndfc2VtYXBob3JlCQlpcF94YXR0cl9zZW07CisKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSBpcF9sb2NrICovCiAJc3BpbmxvY2tfdAkJCWlwX2xvY2s7CiAJdTMyCQkJCWlwX29wZW5fY291bnQ7CkBAIC02OCw2ICs3MSw3IEBACiAJc3RydWN0IG9jZnMyX2V4dGVudF9tYXAJCWlwX2V4dGVudF9tYXA7CiAKIAlzdHJ1Y3QgaW5vZGUJCQl2ZnNfaW5vZGU7CisJc3RydWN0IGpiZDJfaW5vZGUJCWlwX2ppbm9kZTsKIH07CiAKIC8qCkBAIC0xMTMsOCArMTE3LDYgQEAKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgb2NmczJfYW9wczsKIAotc3RydWN0IGJ1ZmZlcl9oZWFkICpvY2ZzMl9icmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYmxvY2ssCi0JCQkJaW50ICplcnIsIGludCByZWFkYSk7CiB2b2lkIG9jZnMyX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogdm9pZCBvY2ZzMl9kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiB2b2lkIG9jZnMyX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pb2N0bC5jIGIvZnMvb2NmczIvaW9jdGwuYwppbmRleCA3YjE0MmYwLi45ZmNkMzZkIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9pb2N0bC5jCisrKyBiL2ZzL29jZnMyL2lvY3RsLmMKQEAgLTEwMiw4ICsxMDIsNyBAQAogYmFpbDoKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCWlmIChiaCkKLQkJYnJlbHNlKGJoKTsKKwlicmVsc2UoYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuYyBiL2ZzL29jZnMyL2pvdXJuYWwuYwppbmRleCBjNDdiYzJhLi44MWU0MDY3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9qb3VybmFsLmMKKysrIGIvZnMvb2NmczIvam91cm5hbC5jCkBAIC0yMTUsOSArMjE1LDkgQEAKIAkJZ290byBmaW5hbGx5OwogCX0KIAotCWpvdXJuYWxfbG9ja191cGRhdGVzKGpvdXJuYWwtPmpfam91cm5hbCk7Ci0Jc3RhdHVzID0gam91cm5hbF9mbHVzaChqb3VybmFsLT5qX2pvdXJuYWwpOwotCWpvdXJuYWxfdW5sb2NrX3VwZGF0ZXMoam91cm5hbC0+al9qb3VybmFsKTsKKwlqYmQyX2pvdXJuYWxfbG9ja191cGRhdGVzKGpvdXJuYWwtPmpfam91cm5hbCk7CisJc3RhdHVzID0gamJkMl9qb3VybmFsX2ZsdXNoKGpvdXJuYWwtPmpfam91cm5hbCk7CisJamJkMl9qb3VybmFsX3VubG9ja191cGRhdGVzKGpvdXJuYWwtPmpfam91cm5hbCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJdXBfd3JpdGUoJmpvdXJuYWwtPmpfdHJhbnNfYmFycmllcik7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTI2NCw3ICsyNjQsNyBAQAogCiAJZG93bl9yZWFkKCZvc2ItPmpvdXJuYWwtPmpfdHJhbnNfYmFycmllcik7CiAKLQloYW5kbGUgPSBqb3VybmFsX3N0YXJ0KGpvdXJuYWwsIG1heF9idWZmcyk7CisJaGFuZGxlID0gamJkMl9qb3VybmFsX3N0YXJ0KGpvdXJuYWwsIG1heF9idWZmcyk7CiAJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCXVwX3JlYWQoJm9zYi0+am91cm5hbC0+al90cmFuc19iYXJyaWVyKTsKIApAQCAtMjkwLDcgKzI5MCw3IEBACiAKIAlCVUdfT04oIWhhbmRsZSk7CiAKLQlyZXQgPSBqb3VybmFsX3N0b3AoaGFuZGxlKTsKKwlyZXQgPSBqYmQyX2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCWlmIChyZXQgPCAwKQogCQltbG9nX2Vycm5vKHJldCk7CiAKQEAgLTMwNCw3ICszMDQsNyBAQAogICogdHJhbnNhY3Rpb24uIGV4dGVuZF90cmFucyB3aWxsIGVpdGhlciBleHRlbmQgdGhlIGN1cnJlbnQgaGFuZGxlIGJ5CiAgKiBuYmxvY2tzLCBvciBjb21taXQgaXQgYW5kIHN0YXJ0IGEgbmV3IG9uZSB3aXRoIG5ibG9ja3MgY3JlZGl0cy4KICAqCi0gKiBUaGlzIG1pZ2h0IGNhbGwgam91cm5hbF9yZXN0YXJ0KCkgd2hpY2ggd2lsbCBjb21taXQgZGlydHkgYnVmZmVycworICogVGhpcyBtaWdodCBjYWxsIGpiZDJfam91cm5hbF9yZXN0YXJ0KCkgd2hpY2ggd2lsbCBjb21taXQgZGlydHkgYnVmZmVycwogICogYW5kIHRoZW4gcmVzdGFydCB0aGUgdHJhbnNhY3Rpb24uIEJlZm9yZSBjYWxsaW5nCiAgKiBvY2ZzMl9leHRlbmRfdHJhbnMoKSwgYW55IGNoYW5nZWQgYmxvY2tzIHNob3VsZCBoYXZlIGJlZW4KICAqIGRpcnRpZWQuIEFmdGVyIGNhbGxpbmcgaXQsIGFsbCBibG9ja3Mgd2hpY2ggbmVlZCB0byBiZSBjaGFuZ2VkIG11c3QKQEAgLTMzMiw3ICszMzIsNyBAQAogI2lmZGVmIENPTkZJR19PQ0ZTMl9ERUJVR19GUwogCXN0YXR1cyA9IDE7CiAjZWxzZQotCXN0YXR1cyA9IGpvdXJuYWxfZXh0ZW5kKGhhbmRsZSwgbmJsb2Nrcyk7CisJc3RhdHVzID0gamJkMl9qb3VybmFsX2V4dGVuZChoYW5kbGUsIG5ibG9ja3MpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtMzQwLDggKzM0MCwxMCBAQAogI2VuZGlmCiAKIAlpZiAoc3RhdHVzID4gMCkgewotCQltbG9nKDAsICJqb3VybmFsX2V4dGVuZCBmYWlsZWQsIHRyeWluZyBqb3VybmFsX3Jlc3RhcnRcbiIpOwotCQlzdGF0dXMgPSBqb3VybmFsX3Jlc3RhcnQoaGFuZGxlLCBuYmxvY2tzKTsKKwkJbWxvZygwLAorCQkgICAgICJqYmQyX2pvdXJuYWxfZXh0ZW5kIGZhaWxlZCwgdHJ5aW5nICIKKwkJICAgICAiamJkMl9qb3VybmFsX3Jlc3RhcnRcbiIpOworCQlzdGF0dXMgPSBqYmQyX2pvdXJuYWxfcmVzdGFydChoYW5kbGUsIG5ibG9ja3MpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtMzkzLDExICszOTUsMTEgQEAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURToKIAljYXNlIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFOgotCQlzdGF0dXMgPSBqb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBiaCk7CisJCXN0YXR1cyA9IGpiZDJfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpOwogCQlicmVhazsKIAogCWNhc2UgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfVU5ETzoKLQkJc3RhdHVzID0gam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoaGFuZGxlLCBiaCk7CisJCXN0YXR1cyA9IGpiZDJfam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoaGFuZGxlLCBiaCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTQyMiw3ICs0MjQsNyBAQAogCW1sb2dfZW50cnkoIihiaC0+Yl9ibG9ja25yPSVsbHUpXG4iLAogCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIpOwogCi0Jc3RhdHVzID0gam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGJoKTsKKwlzdGF0dXMgPSBqYmQyX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCW1sb2coTUxfRVJST1IsICJDb3VsZCBub3QgZGlydHkgbWV0YWRhdGEgYnVmZmVyLiAiCiAJCSAgICAgIihiaC0+Yl9ibG9ja25yPSVsbHUpXG4iLApAQCAtNDMyLDYgKzQzNCw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorI2lmZGVmIENPTkZJR19PQ0ZTMl9DT01QQVRfSkJECiBpbnQgb2NmczJfam91cm5hbF9kaXJ0eV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CkBAIC00NDMsOCArNDQ2LDkgQEAKIAogCXJldHVybiBlcnI7CiB9CisjZW5kaWYKIAotI2RlZmluZSBPQ0ZTMl9ERUZBVUxUX0NPTU1JVF9JTlRFUlZBTCAJKEhaICogSkJEX0RFRkFVTFRfTUFYX0NPTU1JVF9BR0UpCisjZGVmaW5lIE9DRlMyX0RFRkFVTFRfQ09NTUlUX0lOVEVSVkFMCShIWiAqIEpCRDJfREVGQVVMVF9NQVhfQ09NTUlUX0FHRSkKIAogdm9pZCBvY2ZzMl9zZXRfam91cm5hbF9wYXJhbXMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCiB7CkBAIC00NTcsOSArNDYxLDkgQEAKIAlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJam91cm5hbC0+al9jb21taXRfaW50ZXJ2YWwgPSBjb21taXRfaW50ZXJ2YWw7CiAJaWYgKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9CQVJSSUVSKQotCQlqb3VybmFsLT5qX2ZsYWdzIHw9IEpGU19CQVJSSUVSOworCQlqb3VybmFsLT5qX2ZsYWdzIHw9IEpCRDJfQkFSUklFUjsKIAllbHNlCi0JCWpvdXJuYWwtPmpfZmxhZ3MgJj0gfkpGU19CQVJSSUVSOworCQlqb3VybmFsLT5qX2ZsYWdzICY9IH5KQkQyX0JBUlJJRVI7CiAJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiB9CiAKQEAgLTUyNCwxNCArNTI4LDE0IEBACiAJbWxvZygwLCAiaW5vZGUtPmlwX2NsdXN0ZXJzID0gJXVcbiIsIE9DRlMyX0koaW5vZGUpLT5pcF9jbHVzdGVycyk7CiAKIAkvKiBjYWxsIHRoZSBrZXJuZWxzIGpvdXJuYWwgaW5pdCBmdW5jdGlvbiBub3cgKi8KLQlqX2pvdXJuYWwgPSBqb3VybmFsX2luaXRfaW5vZGUoaW5vZGUpOworCWpfam91cm5hbCA9IGpiZDJfam91cm5hbF9pbml0X2lub2RlKGlub2RlKTsKIAlpZiAoal9qb3VybmFsID09IE5VTEwpIHsKIAkJbWxvZyhNTF9FUlJPUiwgIkxpbnV4IGpvdXJuYWwgbGF5ZXIgZXJyb3JcbiIpOwogCQlzdGF0dXMgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQogCi0JbWxvZygwLCAiUmV0dXJuZWQgZnJvbSBqb3VybmFsX2luaXRfaW5vZGVcbiIpOworCW1sb2coMCwgIlJldHVybmVkIGZyb20gamJkMl9qb3VybmFsX2luaXRfaW5vZGVcbiIpOwogCW1sb2coMCwgImpfam91cm5hbC0+al9tYXhsZW4gPSAldVxuIiwgal9qb3VybmFsLT5qX21heGxlbik7CiAKIAkqZGlydHkgPSAobGUzMl90b19jcHUoZGktPmlkMS5qb3VybmFsMS5pal9mbGFncykgJgpAQCAtNTUwLDggKzU1NCw3IEBACiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJaWYgKGlub2RlX2xvY2spCiAJCQlvY2ZzMl9pbm9kZV91bmxvY2soaW5vZGUsIDEpOwotCQlpZiAoYmggIT0gTlVMTCkKLQkJCWJyZWxzZShiaCk7CisJCWJyZWxzZShiaCk7CiAJCWlmIChpbm9kZSkgewogCQkJT0NGUzJfSShpbm9kZSktPmlwX29wZW5fY291bnQtLTsKIAkJCWlwdXQoaW5vZGUpOwpAQCAtNjM5LDcgKzY0Miw3IEBACiAJaWYgKGpvdXJuYWwtPmpfc3RhdGUgIT0gT0NGUzJfSk9VUk5BTF9MT0FERUQpCiAJCWdvdG8gZG9uZTsKIAotCS8qIG5lZWQgdG8gaW5jIGlub2RlIHVzZSBjb3VudCBhcyBqb3VybmFsX2Rlc3Ryb3kgd2lsbCBpcHV0LiAqLworCS8qIG5lZWQgdG8gaW5jIGlub2RlIHVzZSBjb3VudCAtIGpiZDJfam91cm5hbF9kZXN0cm95IHdpbGwgaXB1dC4gKi8KIAlpZiAoIWlncmFiKGlub2RlKSkKIAkJQlVHKCk7CiAKQEAgLTY2OCw5ICs2NzEsOSBAQAogCUJVR19PTihhdG9taWNfcmVhZCgmKG9zYi0+am91cm5hbC0+al9udW1fdHJhbnMpKSAhPSAwKTsKIAogCWlmIChvY2ZzMl9tb3VudF9sb2NhbChvc2IpKSB7Ci0JCWpvdXJuYWxfbG9ja191cGRhdGVzKGpvdXJuYWwtPmpfam91cm5hbCk7Ci0JCXN0YXR1cyA9IGpvdXJuYWxfZmx1c2goam91cm5hbC0+al9qb3VybmFsKTsKLQkJam91cm5hbF91bmxvY2tfdXBkYXRlcyhqb3VybmFsLT5qX2pvdXJuYWwpOworCQlqYmQyX2pvdXJuYWxfbG9ja191cGRhdGVzKGpvdXJuYWwtPmpfam91cm5hbCk7CisJCXN0YXR1cyA9IGpiZDJfam91cm5hbF9mbHVzaChqb3VybmFsLT5qX2pvdXJuYWwpOworCQlqYmQyX2pvdXJuYWxfdW5sb2NrX3VwZGF0ZXMoam91cm5hbC0+al9qb3VybmFsKTsKIAkJaWYgKHN0YXR1cyA8IDApCiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJfQpAQCAtNjg2LDcgKzY4OSw3IEBACiAJfQogCiAJLyogU2h1dGRvd24gdGhlIGtlcm5lbCBqb3VybmFsIHN5c3RlbSAqLwotCWpvdXJuYWxfZGVzdHJveShqb3VybmFsLT5qX2pvdXJuYWwpOworCWpiZDJfam91cm5hbF9kZXN0cm95KGpvdXJuYWwtPmpfam91cm5hbCk7CiAKIAlPQ0ZTMl9JKGlub2RlKS0+aXBfb3Blbl9jb3VudC0tOwogCkBAIC03MTEsMTUgKzcxNCwxNSBAQAogewogCWludCBvbGRlcnI7CiAKLQlvbGRlcnIgPSBqb3VybmFsX2Vycm5vKGpvdXJuYWwpOworCW9sZGVyciA9IGpiZDJfam91cm5hbF9lcnJubyhqb3VybmFsKTsKIAlpZiAob2xkZXJyKSB7CiAJCW1sb2coTUxfRVJST1IsICJGaWxlIHN5c3RlbSBlcnJvciAlZCByZWNvcmRlZCBpbiAiCiAJCSAgICAgImpvdXJuYWwgJXUuXG4iLCBvbGRlcnIsIHNsb3QpOwogCQltbG9nKE1MX0VSUk9SLCAiRmlsZSBzeXN0ZW0gb24gZGV2aWNlICVzIG5lZWRzIGNoZWNraW5nLlxuIiwKIAkJICAgICBzYi0+c19pZCk7CiAKLQkJam91cm5hbF9hY2tfZXJyKGpvdXJuYWwpOwotCQlqb3VybmFsX2NsZWFyX2Vycihqb3VybmFsKTsKKwkJamJkMl9qb3VybmFsX2Fja19lcnIoam91cm5hbCk7CisJCWpiZDJfam91cm5hbF9jbGVhcl9lcnIoam91cm5hbCk7CiAJfQogfQogCkBAIC03MzQsNyArNzM3LDcgQEAKIAogCW9zYiA9IGpvdXJuYWwtPmpfb3NiOwogCi0Jc3RhdHVzID0gam91cm5hbF9sb2FkKGpvdXJuYWwtPmpfam91cm5hbCk7CisJc3RhdHVzID0gamJkMl9qb3VybmFsX2xvYWQoam91cm5hbC0+al9qb3VybmFsKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nKE1MX0VSUk9SLCAiRmFpbGVkIHRvIGxvYWQgam91cm5hbCFcbiIpOwogCQlnb3RvIGRvbmU7CkBAIC03NzgsNyArNzgxLDcgQEAKIAogCUJVR19PTigham91cm5hbCk7CiAKLQlzdGF0dXMgPSBqb3VybmFsX3dpcGUoam91cm5hbC0+al9qb3VybmFsLCBmdWxsKTsKKwlzdGF0dXMgPSBqYmQyX2pvdXJuYWxfd2lwZShqb3VybmFsLT5qX2pvdXJuYWwsIGZ1bGwpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtODQ3LDkgKzg1MCw4IEBACiAKIAkJLyogV2UgYXJlIHJlYWRpbmcgam91cm5hbCBkYXRhIHdoaWNoIHNob3VsZCBub3QKIAkJICogYmUgcHV0IGluIHRoZSB1cHRvZGF0ZSBjYWNoZSAqLwotCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrcyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksCi0JCQkJCSAgIHBfYmxrbm8sIHBfYmxvY2tzLCBiaHMsIDAsCi0JCQkJCSAgIE5VTEwpOworCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2Nrc19zeW5jKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKKwkJCQkJCXBfYmxrbm8sIHBfYmxvY2tzLCBiaHMpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtODY1LDggKzg2Nyw3IEBACiAKIGJhaWw6CiAJZm9yKGkgPSAwOyBpIDwgQ09OQ1VSUkVOVF9KT1VSTkFMX0ZJTEw7IGkrKykKLQkJaWYgKGJoc1tpXSkKLQkJCWJyZWxzZShiaHNbaV0pOworCQlicmVsc2UoYmhzW2ldKTsKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTEzMyw3ICsxMTM0LDggQEAKIAl9CiAJU0VUX0lOT0RFX0pPVVJOQUwoaW5vZGUpOwogCi0Jc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhvc2IsIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgYmgsIDAsIGlub2RlKTsKKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2Nrcyhpbm9kZSwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCAxLCBiaCwKKwkJCQkgICBPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtMTIyOSwxOSArMTIzMSwxOSBAQAogCX0KIAogCW1sb2coMCwgImNhbGxpbmcgam91cm5hbF9pbml0X2lub2RlXG4iKTsKLQlqb3VybmFsID0gam91cm5hbF9pbml0X2lub2RlKGlub2RlKTsKKwlqb3VybmFsID0gamJkMl9qb3VybmFsX2luaXRfaW5vZGUoaW5vZGUpOwogCWlmIChqb3VybmFsID09IE5VTEwpIHsKIAkJbWxvZyhNTF9FUlJPUiwgIkxpbnV4IGpvdXJuYWwgbGF5ZXIgZXJyb3JcbiIpOwogCQlzdGF0dXMgPSAtRUlPOwogCQlnb3RvIGRvbmU7CiAJfQogCi0Jc3RhdHVzID0gam91cm5hbF9sb2FkKGpvdXJuYWwpOworCXN0YXR1cyA9IGpiZDJfam91cm5hbF9sb2FkKGpvdXJuYWwpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJaWYgKCFpZ3JhYihpbm9kZSkpCiAJCQlCVUcoKTsKLQkJam91cm5hbF9kZXN0cm95KGpvdXJuYWwpOworCQlqYmQyX2pvdXJuYWxfZGVzdHJveShqb3VybmFsKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtMTI0OSw5ICsxMjUxLDkgQEAKIAogCS8qIHdpcGUgdGhlIGpvdXJuYWwgKi8KIAltbG9nKDAsICJmbHVzaGluZyB0aGUgam91cm5hbC5cbiIpOwotCWpvdXJuYWxfbG9ja191cGRhdGVzKGpvdXJuYWwpOwotCXN0YXR1cyA9IGpvdXJuYWxfZmx1c2goam91cm5hbCk7Ci0Jam91cm5hbF91bmxvY2tfdXBkYXRlcyhqb3VybmFsKTsKKwlqYmQyX2pvdXJuYWxfbG9ja191cGRhdGVzKGpvdXJuYWwpOworCXN0YXR1cyA9IGpiZDJfam91cm5hbF9mbHVzaChqb3VybmFsKTsKKwlqYmQyX2pvdXJuYWxfdW5sb2NrX3VwZGF0ZXMoam91cm5hbCk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIApAQCAtMTI3Miw3ICsxMjc0LDcgQEAKIAlpZiAoIWlncmFiKGlub2RlKSkKIAkJQlVHKCk7CiAKLQlqb3VybmFsX2Rlc3Ryb3koam91cm5hbCk7CisJamJkMl9qb3VybmFsX2Rlc3Ryb3koam91cm5hbCk7CiAKIGRvbmU6CiAJLyogZHJvcCB0aGUgbG9jayBvbiB0aGlzIG5vZGVzIGpvdXJuYWwgKi8KQEAgLTEyODIsOCArMTI4NCw3IEBACiAJaWYgKGlub2RlKQogCQlpcHV0KGlub2RlKTsKIAotCWlmIChiaCkKLQkJYnJlbHNlKGJoKTsKKwlicmVsc2UoYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuaCBiL2ZzL29jZnMyL2pvdXJuYWwuaAppbmRleCAyMTc4ZWJmLi5kNGQxNGU5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9qb3VybmFsLmgKKysrIGIvZnMvb2NmczIvam91cm5hbC5oCkBAIC0yNyw3ICsyNywxMiBAQAogI2RlZmluZSBPQ0ZTMl9KT1VSTkFMX0gKIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvamJkLmg+CisjaWZuZGVmIENPTkZJR19PQ0ZTMl9DT01QQVRfSkJECisjIGluY2x1ZGUgPGxpbnV4L2piZDIuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGxpbnV4L2piZC5oPgorIyBpbmNsdWRlICJvY2ZzMl9qYmRfY29tcGF0LmgiCisjZW5kaWYKIAogZW51bSBvY2ZzMl9qb3VybmFsX3N0YXRlIHsKIAlPQ0ZTMl9KT1VSTkFMX0ZSRUUgPSAwLApAQCAtMjE1LDggKzIyMCw4IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLiBXaWxsIGhhdmUgdG8gY2FsbCBvY2ZzMl9qb3VybmFsX2RpcnR5IG9uY2UKICAqICAgICAgICAgICAgICAgICAgICAgICAgICB3ZSd2ZSBhY3R1YWxseSBkaXJ0aWVkIGl0LiBUeXBlIGlzIG9uZSBvZiAuIG9yIC4KICAqICBvY2ZzMl9qb3VybmFsX2RpcnR5ICAgIC0gTWFyayBhIGpvdXJuYWxsZWQgYnVmZmVyIGFzIGhhdmluZyBkaXJ0eSBkYXRhLgotICogIG9jZnMyX2pvdXJuYWxfZGlydHlfZGF0YSAtIEluZGljYXRlIHRoYXQgYSBkYXRhIGJ1ZmZlciBzaG91bGQgZ28gb3V0IGJlZm9yZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IGhhbmRsZSBjb21taXRzLgorICogIG9jZnMyX2piZDJfZmlsZV9pbm9kZSAgLSBNYXJrIGFuIGlub2RlIHNvIHRoYXQgaXRzIGRhdGEgZ29lcyBvdXQgYmVmb3JlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50IGhhbmRsZSBjb21taXRzLgogICovCiAKIC8qIFlvdSBtdXN0IGFsd2F5cyBzdGFydF90cmFucyB3aXRoIGEgbnVtYmVyIG9mIGJ1ZmZzID4gMCwgYnV0IGl0J3MKQEAgLTI2OCw4ICsyNzMsMTAgQEAKICAqLwogaW50ICAgICAgICAgICAgICAgICAgb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGVfdCAqaGFuZGxlLAogCQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CisjaWZkZWYgQ09ORklHX09DRlMyX0NPTVBBVF9KQkQKIGludCAgICAgICAgICAgICAgICAgIG9jZnMyX2pvdXJuYWxfZGlydHlfZGF0YShoYW5kbGVfdCAqaGFuZGxlLAogCQkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKKyNlbmRpZgogCiAvKgogICogIENyZWRpdCBNYWNyb3M6CkBAIC0yODMsNiArMjkwLDkgQEAKIC8qIHNpbXBsZSBmaWxlIHVwZGF0ZXMgbGlrZSBjaG1vZCwgZXRjLiAqLwogI2RlZmluZSBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyAxCiAKKy8qIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayB1cGRhdGUgKi8KKyNkZWZpbmUgT0NGUzJfWEFUVFJfQkxPQ0tfVVBEQVRFX0NSRURJVFMgMQorCiAvKiBncm91cCBleHRlbmQuIGlub2RlIHVwZGF0ZSBhbmQgbGFzdCBncm91cCB1cGRhdGUuICovCiAjZGVmaW5lIE9DRlMyX0dST1VQX0VYVEVORF9DUkVESVRTCShPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyArIDEpCiAKQEAgLTM0MCwxMSArMzUwLDIzIEBACiAjZGVmaW5lIE9DRlMyX1JFTkFNRV9DUkVESVRTICgzICogT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKyAzICAgICAgICAgICAgICBcCiAJCQkgICAgICsgT0NGUzJfVU5MSU5LX0NSRURJVFMpCiAKKy8qIGdsb2JhbCBiaXRtYXAgZGlub2RlLCBncm91cCBkZXNjLiwgcmVsaW5rZWQgZ3JvdXAsCisgKiBzdWJhbGxvY2F0b3IgZGlub2RlLCBncm91cCBkZXNjLiwgcmVsaW5rZWQgZ3JvdXAsCisgKiBkaW5vZGUsIHhhdHRyIGJsb2NrICovCisjZGVmaW5lIE9DRlMyX1hBVFRSX0JMT0NLX0NSRUFURV9DUkVESVRTIChPQ0ZTMl9TVUJBTExPQ19BTExPQyAqIDIgKyBcCisJCQkJCSAgKyBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyBcCisJCQkJCSAgKyBPQ0ZTMl9YQVRUUl9CTE9DS19VUERBVEVfQ1JFRElUUykKKworLyoKKyAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IHJvb3RfZWwgaXMgdGhlIHJvb3QKKyAqIG9mIGV4dGVudCB0cmVlLiBTbyBmb3IgYW4gaW5vZGUsIGl0IHNob3VsZCBiZSAmZmUtPmlkMi5pX2xpc3QuIE90aGVyd2lzZQorICogdGhlIHJlc3VsdCBtYXkgYmUgd3JvbmcuCisgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCQkJICAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLAorCQkJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpyb290X2VsLAogCQkJCQkgICAgdTMyIGJpdHNfd2FudGVkKQogewotCWludCBiaXRtYXBfYmxvY2tzLCBzeXNmaWxlX2JpdG1hcF9ibG9ja3MsIGRpbm9kZV9ibG9ja3M7CisJaW50IGJpdG1hcF9ibG9ja3MsIHN5c2ZpbGVfYml0bWFwX2Jsb2NrcywgZXh0ZW50X2Jsb2NrczsKIAogCS8qIGJpdG1hcCBkaW5vZGUsIGdyb3VwIGRlc2MuICsgcmVsaW5rZWQgZ3JvdXAuICovCiAJYml0bWFwX2Jsb2NrcyA9IE9DRlMyX1NVQkFMTE9DX0FMTE9DOwpAQCAtMzU1LDE2ICszNzcsMTYgQEAKIAkgKiBob3dldmVyIG1hbnkgbWV0YWRhdGEgY2h1bmtzIG5lZWRlZCAqIGEgcmVtYWluaW5nIHN1YmFsbG9jCiAJICogYWxsb2MuICovCiAJc3lzZmlsZV9iaXRtYXBfYmxvY2tzID0gMSArCi0JCShPQ0ZTMl9TVUJBTExPQ19BTExPQyAtIDEpICogb2NmczJfZXh0ZW5kX21ldGFfbmVlZGVkKGZlKTsKKwkJKE9DRlMyX1NVQkFMTE9DX0FMTE9DIC0gMSkgKiBvY2ZzMl9leHRlbmRfbWV0YV9uZWVkZWQocm9vdF9lbCk7CiAKIAkvKiB0aGlzIGRvZXMgbm90IGluY2x1ZGUgKm5ldyogbWV0YWRhdGEgYmxvY2tzLCB3aGljaCBhcmUKLQkgKiBhY2NvdW50ZWQgZm9yIGluIHN5c2ZpbGVfYml0bWFwX2Jsb2Nrcy4gZmUgKworCSAqIGFjY291bnRlZCBmb3IgaW4gc3lzZmlsZV9iaXRtYXBfYmxvY2tzLiByb290X2VsICsKIAkgKiBwcmV2LiBsYXN0X2ViX2JsayArIGJsb2NrcyBhbG9uZyBlZGdlIG9mIHRyZWUuCiAJICogY2FsY19zeW1saW5rX2NyZWRpdHMgcGFzc2VzIGJlY2F1c2Ugd2UganVzdCBuZWVkIDEKIAkgKiBjcmVkaXQgZm9yIHRoZSBkaW5vZGUgdGhlcmUuICovCi0JZGlub2RlX2Jsb2NrcyA9IDEgKyAxICsgbGUxNl90b19jcHUoZmUtPmlkMi5pX2xpc3QubF90cmVlX2RlcHRoKTsKKwlleHRlbnRfYmxvY2tzID0gMSArIDEgKyBsZTE2X3RvX2NwdShyb290X2VsLT5sX3RyZWVfZGVwdGgpOwogCi0JcmV0dXJuIGJpdG1hcF9ibG9ja3MgKyBzeXNmaWxlX2JpdG1hcF9ibG9ja3MgKyBkaW5vZGVfYmxvY2tzOworCXJldHVybiBiaXRtYXBfYmxvY2tzICsgc3lzZmlsZV9iaXRtYXBfYmxvY2tzICsgZXh0ZW50X2Jsb2NrczsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgb2NmczJfY2FsY19zeW1saW5rX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTQxNSw0ICs0MzcsMTYgQEAKIAlyZXR1cm4gY3JlZGl0czsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgb2NmczJfamJkMl9maWxlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGpiZDJfam91cm5hbF9maWxlX2lub2RlKGhhbmRsZSwgJk9DRlMyX0koaW5vZGUpLT5pcF9qaW5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9iZWdpbl9vcmRlcmVkX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICAgICBsb2ZmX3QgbmV3X3NpemUpCit7CisJcmV0dXJuIGpiZDJfam91cm5hbF9iZWdpbl9vcmRlcmVkX3RydW5jYXRlKCZPQ0ZTMl9JKGlub2RlKS0+aXBfamlub2RlLAorCQkJCQkJICAgbmV3X3NpemUpOworfQorCiAjZW5kaWYgLyogT0NGUzJfSk9VUk5BTF9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMgYi9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKaW5kZXggMjhlNDkyZS4uNjg3YjI4NyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbG9jYWxhbGxvYy5jCisrKyBiL2ZzL29jZnMyL2xvY2FsYWxsb2MuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogCiAjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfRElTS19BTExPQwogI2luY2x1ZGUgPGNsdXN0ZXIvbWFza2xvZy5oPgpAQCAtNDcsOCArNDgsNiBAQAogCiAjZGVmaW5lIE9DRlMyX0xPQ0FMX0FMTE9DKGRpbm9kZSkJKCYoKGRpbm9kZSktPmlkMi5pX2xhYikpCiAKLXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2xvY2FsX2FsbG9jX3dpbmRvd19iaXRzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKLQogc3RhdGljIHUzMiBvY2ZzMl9sb2NhbF9hbGxvY19jb3VudF9iaXRzKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmFsbG9jKTsKIAogc3RhdGljIGludCBvY2ZzMl9sb2NhbF9hbGxvY19maW5kX2NsZWFyX2JpdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCkBAIC03NSwyNCArNzQsMTI5IEBACiBzdGF0aWMgaW50IG9jZnMyX2xvY2FsX2FsbG9jX3NsaWRlX3dpbmRvdyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkJICBzdHJ1Y3QgaW5vZGUgKmxvY2FsX2FsbG9jX2lub2RlKTsKIAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfbG9jYWxfYWxsb2Nfd2luZG93X2JpdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCi17Ci0JQlVHX09OKG9zYi0+c19jbHVzdGVyc2l6ZV9iaXRzID4gMjApOworI2lmZGVmIENPTkZJR19PQ0ZTMl9GU19TVEFUUwogCi0JLyogU2l6ZSBsb2NhbCBhbGxvYyB3aW5kb3dzIGJ5IHRoZSBtZWdhYnl0ZSAqLwotCXJldHVybiBvc2ItPmxvY2FsX2FsbG9jX3NpemUgPDwgKDIwIC0gb3NiLT5zX2NsdXN0ZXJzaXplX2JpdHMpOworc3RhdGljIGludCBvY2ZzMl9sYV9kZWJ1Z19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTEFfREVCVUdfQlVGX1NaCVBBR0VfQ0FDSEVfU0laRQorI2RlZmluZSBMQV9ERUJVR19WRVIJMQorc3RhdGljIHNzaXplX3Qgb2NmczJfbGFfZGVidWdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RhdGljIERFRklORV9NVVRFWChsYV9kZWJ1Z19tdXRleCk7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHdyaXR0ZW4sIHJldDsKKwljaGFyICpidWYgPSBvc2ItPmxvY2FsX2FsbG9jX2RlYnVnX2J1ZjsKKworCW11dGV4X2xvY2soJmxhX2RlYnVnX211dGV4KTsKKwltZW1zZXQoYnVmLCAwLCBMQV9ERUJVR19CVUZfU1opOworCisJd3JpdHRlbiA9IHNucHJpbnRmKGJ1ZiwgTEFfREVCVUdfQlVGX1NaLAorCQkJICAgIjB4JXhcdDB4JWxseFx0JXVcdCV1XHQweCV4XG4iLAorCQkJICAgTEFfREVCVUdfVkVSLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvc2ItPmxhX2xhc3RfZ2QsCisJCQkgICBvc2ItPmxvY2FsX2FsbG9jX2RlZmF1bHRfYml0cywKKwkJCSAgIG9zYi0+bG9jYWxfYWxsb2NfYml0cywgb3NiLT5sb2NhbF9hbGxvY19zdGF0ZSk7CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCB3cml0dGVuKTsKKworCW11dGV4X3VubG9jaygmbGFfZGVidWdfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9jZnMyX2xhX2RlYnVnX2ZvcHMgPSB7CisJLm9wZW4gPQkJb2NmczJfbGFfZGVidWdfb3BlbiwKKwkucmVhZCA9CQlvY2ZzMl9sYV9kZWJ1Z19yZWFkLAorfTsKKworc3RhdGljIHZvaWQgb2NmczJfaW5pdF9sYV9kZWJ1ZyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwlvc2ItPmxvY2FsX2FsbG9jX2RlYnVnX2J1ZiA9IGttYWxsb2MoTEFfREVCVUdfQlVGX1NaLCBHRlBfTk9GUyk7CisJaWYgKCFvc2ItPmxvY2FsX2FsbG9jX2RlYnVnX2J1ZikKKwkJcmV0dXJuOworCisJb3NiLT5sb2NhbF9hbGxvY19kZWJ1ZyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImxvY2FsX2FsbG9jX3N0YXRzIiwKKwkJCQkJCSAgICAgU19JRlJFR3xTX0lSVVNSLAorCQkJCQkJICAgICBvc2ItPm9zYl9kZWJ1Z19yb290LAorCQkJCQkJICAgICBvc2IsCisJCQkJCQkgICAgICZvY2ZzMl9sYV9kZWJ1Z19mb3BzKTsKKwlpZiAoIW9zYi0+bG9jYWxfYWxsb2NfZGVidWcpIHsKKwkJa2ZyZWUob3NiLT5sb2NhbF9hbGxvY19kZWJ1Z19idWYpOworCQlvc2ItPmxvY2FsX2FsbG9jX2RlYnVnX2J1ZiA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9zaHV0ZG93bl9sYV9kZWJ1ZyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwlpZiAob3NiLT5sb2NhbF9hbGxvY19kZWJ1ZykKKwkJZGVidWdmc19yZW1vdmUob3NiLT5sb2NhbF9hbGxvY19kZWJ1Zyk7CisKKwlpZiAob3NiLT5sb2NhbF9hbGxvY19kZWJ1Z19idWYpCisJCWtmcmVlKG9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmKTsKKworCW9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmID0gTlVMTDsKKwlvc2ItPmxvY2FsX2FsbG9jX2RlYnVnID0gTlVMTDsKK30KKyNlbHNlCS8qIENPTkZJR19PQ0ZTMl9GU19TVEFUUyAqLworc3RhdGljIHZvaWQgb2NmczJfaW5pdF9sYV9kZWJ1ZyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwlyZXR1cm47Cit9CitzdGF0aWMgdm9pZCBvY2ZzMl9zaHV0ZG93bl9sYV9kZWJ1ZyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwlyZXR1cm47Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgb2NmczJfbGFfc3RhdGVfZW5hYmxlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwlyZXR1cm4gKG9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPT0gT0NGUzJfTEFfVEhST1RUTEVEIHx8CisJCW9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPT0gT0NGUzJfTEFfRU5BQkxFRCk7Cit9CisKK3ZvaWQgb2NmczJfbG9jYWxfYWxsb2Nfc2Vlbl9mcmVlX2JpdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJICAgICAgdW5zaWduZWQgaW50IG51bV9jbHVzdGVycykKK3sKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCWlmIChvc2ItPmxvY2FsX2FsbG9jX3N0YXRlID09IE9DRlMyX0xBX0RJU0FCTEVEIHx8CisJICAgIG9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPT0gT0NGUzJfTEFfVEhST1RUTEVEKQorCQlpZiAobnVtX2NsdXN0ZXJzID49IG9zYi0+bG9jYWxfYWxsb2NfZGVmYXVsdF9iaXRzKSB7CisJCQljYW5jZWxfZGVsYXllZF93b3JrKCZvc2ItPmxhX2VuYWJsZV93cSk7CisJCQlvc2ItPmxvY2FsX2FsbG9jX3N0YXRlID0gT0NGUzJfTEFfRU5BQkxFRDsKKwkJfQorCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKK30KKwordm9pZCBvY2ZzMl9sYV9lbmFibGVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb2NmczJfc3VwZXIsCisJCQkgICAgIGxhX2VuYWJsZV93cS53b3JrKTsKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCW9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPSBPQ0ZTMl9MQV9FTkFCTEVEOworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIH0KIAogLyoKICAqIFRlbGwgdXMgd2hldGhlciBhIGdpdmVuIGFsbG9jYXRpb24gc2hvdWxkIHVzZSB0aGUgbG9jYWwgYWxsb2MKICAqIGZpbGUuIE90aGVyd2lzZSwgaXQgaGFzIHRvIGdvIHRvIHRoZSBtYWluIGJpdG1hcC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgc2VtaS1kaXJ0eSByZWFkcyBvZiBsb2NhbCBhbGxvYyBzaXplIGFuZCBzdGF0ZSEKKyAqIFRoaXMgaXMgb2sgaG93ZXZlciwgYXMgdGhlIHZhbHVlcyBhcmUgcmUtY2hlY2tlZCBvbmNlIHVuZGVyIG11dGV4LgogICovCiBpbnQgb2NmczJfYWxsb2Nfc2hvdWxkX3VzZV9sb2NhbChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGJpdHMpCiB7Ci0JaW50IGxhX2JpdHMgPSBvY2ZzMl9sb2NhbF9hbGxvY193aW5kb3dfYml0cyhvc2IpOwogCWludCByZXQgPSAwOworCWludCBsYV9iaXRzOwogCi0JaWYgKG9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgIT0gT0NGUzJfTEFfRU5BQkxFRCkKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCWxhX2JpdHMgPSBvc2ItPmxvY2FsX2FsbG9jX2JpdHM7CisKKwlpZiAoIW9jZnMyX2xhX3N0YXRlX2VuYWJsZWQob3NiKSkKIAkJZ290byBiYWlsOwogCiAJLyogbGFfYml0cyBzaG91bGQgYmUgYXQgbGVhc3QgdHdpY2UgdGhlIHNpemUgKGluIGNsdXN0ZXJzKSBvZgpAQCAtMTA2LDYgKzIxMCw3IEBACiBiYWlsOgogCW1sb2coMCwgInN0YXRlPSVkLCBiaXRzPSVsbHUsIGxhX2JpdHM9JWQsIHJldD0lZFxuIiwKIAkgICAgIG9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUsICh1bnNpZ25lZCBsb25nIGxvbmcpYml0cywgbGFfYml0cywgcmV0KTsKKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTIwLDE0ICsyMjUsMTggQEAKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCi0JaWYgKG9zYi0+bG9jYWxfYWxsb2Nfc2l6ZSA9PSAwKQorCW9jZnMyX2luaXRfbGFfZGVidWcob3NiKTsKKworCWlmIChvc2ItPmxvY2FsX2FsbG9jX2JpdHMgPT0gMCkKIAkJZ290byBiYWlsOwogCi0JaWYgKG9jZnMyX2xvY2FsX2FsbG9jX3dpbmRvd19iaXRzKG9zYikgPj0gb3NiLT5iaXRtYXBfY3BnKSB7CisJaWYgKG9zYi0+bG9jYWxfYWxsb2NfYml0cyA+PSBvc2ItPmJpdG1hcF9jcGcpIHsKIAkJbWxvZyhNTF9OT1RJQ0UsICJSZXF1ZXN0ZWQgbG9jYWwgYWxsb2Mgd2luZG93ICVkIGlzIGxhcmdlciAiCiAJCSAgICAgInRoYW4gbWF4IHBvc3NpYmxlICV1LiBVc2luZyBkZWZhdWx0cy5cbiIsCi0JCSAgICAgb2NmczJfbG9jYWxfYWxsb2Nfd2luZG93X2JpdHMob3NiKSwgKG9zYi0+Yml0bWFwX2NwZyAtIDEpKTsKLQkJb3NiLT5sb2NhbF9hbGxvY19zaXplID0gT0NGUzJfREVGQVVMVF9MT0NBTF9BTExPQ19TSVpFOworCQkgICAgIG9zYi0+bG9jYWxfYWxsb2NfYml0cywgKG9zYi0+Yml0bWFwX2NwZyAtIDEpKTsKKwkJb3NiLT5sb2NhbF9hbGxvY19iaXRzID0KKwkJCW9jZnMyX21lZ2FieXRlc190b19jbHVzdGVycyhvc2ItPnNiLAorCQkJCQkJICAgIE9DRlMyX0RFRkFVTFRfTE9DQUxfQUxMT0NfU0laRSk7CiAJfQogCiAJLyogcmVhZCB0aGUgYWxsb2Mgb2ZmIGRpc2sgKi8KQEAgLTEzOSw4ICsyNDgsOCBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhvc2IsIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKLQkJCQkgICZhbGxvY19iaCwgMCwgaW5vZGUpOworCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2tzKGlub2RlLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIDEsCisJCQkJICAgJmFsbG9jX2JoLCBPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtMTg1LDEzICsyOTQsMTQgQEAKIAogYmFpbDoKIAlpZiAoc3RhdHVzIDwgMCkKLQkJaWYgKGFsbG9jX2JoKQotCQkJYnJlbHNlKGFsbG9jX2JoKTsKKwkJYnJlbHNlKGFsbG9jX2JoKTsKIAlpZiAoaW5vZGUpCiAJCWlwdXQoaW5vZGUpOwogCi0JbWxvZygwLCAiTG9jYWwgYWxsb2Mgd2luZG93IGJpdHMgPSAlZFxuIiwKLQkgICAgIG9jZnMyX2xvY2FsX2FsbG9jX3dpbmRvd19iaXRzKG9zYikpOworCWlmIChzdGF0dXMgPCAwKQorCQlvY2ZzMl9zaHV0ZG93bl9sYV9kZWJ1Zyhvc2IpOworCisJbWxvZygwLCAiTG9jYWwgYWxsb2Mgd2luZG93IGJpdHMgPSAlZFxuIiwgb3NiLT5sb2NhbF9hbGxvY19iaXRzKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CkBAIC0yMTcsNiArMzI3LDExIEBACiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAorCWNhbmNlbF9kZWxheWVkX3dvcmsoJm9zYi0+bGFfZW5hYmxlX3dxKTsKKwlmbHVzaF93b3JrcXVldWUob2NmczJfd3EpOworCisJb2NmczJfc2h1dGRvd25fbGFfZGVidWcob3NiKTsKKwogCWlmIChvc2ItPmxvY2FsX2FsbG9jX3N0YXRlID09IE9DRlMyX0xBX1VOVVNFRCkKIAkJZ290byBvdXQ7CiAKQEAgLTI5NSw4ICs0MTAsNyBAQAogCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CiAKIG91dF91bmxvY2s6Ci0JaWYgKG1haW5fYm1fYmgpCi0JCWJyZWxzZShtYWluX2JtX2JoKTsKKwlicmVsc2UobWFpbl9ibV9iaCk7CiAKIAlvY2ZzMl9pbm9kZV91bmxvY2sobWFpbl9ibV9pbm9kZSwgMSk7CiAKQEAgLTM0NSw4ICs0NTksOCBAQAogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0Jc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhvc2IsIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKLQkJCQkgICZhbGxvY19iaCwgMCwgaW5vZGUpOworCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2tzKGlub2RlLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIDEsCisJCQkJICAgJmFsbG9jX2JoLCBPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtMzcyLDggKzQ4Niw3IEBACiAJCSphbGxvY19jb3B5ID0gTlVMTDsKIAl9CiAKLQlpZiAoYWxsb2NfYmgpCi0JCWJyZWxzZShhbGxvY19iaCk7CisJYnJlbHNlKGFsbG9jX2JoKTsKIAogCWlmIChpbm9kZSkgewogCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKQEAgLTQ0MSw4ICs1NTQsNyBAQAogb3V0X211dGV4OgogCW11dGV4X3VubG9jaygmbWFpbl9ibV9pbm9kZS0+aV9tdXRleCk7CiAKLQlpZiAobWFpbl9ibV9iaCkKLQkJYnJlbHNlKG1haW5fYm1fYmgpOworCWJyZWxzZShtYWluX2JtX2JoKTsKIAogCWlwdXQobWFpbl9ibV9pbm9kZSk7CiAKQEAgLTQ1Myw4ICs1NjUsNDggQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKiBDaGVjayB0byBzZWUgaWYgdGhlIGxvY2FsIGFsbG9jIHdpbmRvdyBpcyB3aXRoaW4gYWMtPmFjX21heF9ibG9jayAqLworc3RhdGljIGludCBvY2ZzMl9sb2NhbF9hbGxvY19pbl9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYywKKwkJCQkgICAgICB1MzIgYml0c193YW50ZWQpCit7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqYWxsb2M7CisJc3RydWN0IG9jZnMyX2xvY2FsX2FsbG9jICpsYTsKKwlpbnQgc3RhcnQ7CisJdTY0IGJsb2NrX29mZjsKKworCWlmICghYWMtPmFjX21heF9ibG9jaykKKwkJcmV0dXJuIDE7CisKKwlhbGxvYyA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIG9zYi0+bG9jYWxfYWxsb2NfYmgtPmJfZGF0YTsKKwlsYSA9IE9DRlMyX0xPQ0FMX0FMTE9DKGFsbG9jKTsKKworCXN0YXJ0ID0gb2NmczJfbG9jYWxfYWxsb2NfZmluZF9jbGVhcl9iaXRzKG9zYiwgYWxsb2MsIGJpdHNfd2FudGVkKTsKKwlpZiAoc3RhcnQgPT0gLTEpIHsKKwkJbWxvZ19lcnJubygtRU5PU1BDKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBDb252ZXJ0aW5nIChibV9vZmYgKyBzdGFydCArIGJpdHNfd2FudGVkKSB0byBibG9ja3MgZ2l2ZXMgdXMKKwkgKiB0aGUgYmxrbm8ganVzdCBwYXN0IG91ciBhY3R1YWwgYWxsb2NhdGlvbi4gIFRoaXMgaXMgcGVyZmVjdAorCSAqIHRvIGNvbXBhcmUgd2l0aCBhY19tYXhfYmxvY2suCisJICovCisJYmxvY2tfb2ZmID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLAorCQkJCQkgICAgIGxlMzJfdG9fY3B1KGxhLT5sYV9ibV9vZmYpICsKKwkJCQkJICAgICBzdGFydCArIGJpdHNfd2FudGVkKTsKKwltbG9nKDAsICJDaGVja2luZyAlbGx1IGFnYWluc3QgJWxsdVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2tfb2ZmLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhYy0+YWNfbWF4X2Jsb2NrKTsKKwlpZiAoYmxvY2tfb2ZmID4gYWMtPmFjX21heF9ibG9jaykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKwogLyoKLSAqIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYXQgbGVhc3QgYml0c3dhbnRlZCBjb250aWd1b3VzIGJpdHMgaW4gdGhlCisgKiBtYWtlIHN1cmUgd2UndmUgZ290IGF0IGxlYXN0IGJpdHNfd2FudGVkIGNvbnRpZ3VvdXMgYml0cyBpbiB0aGUKICAqIGxvY2FsIGFsbG9jLiBZb3UgbG9zZSB0aGVtIHdoZW4geW91IGRyb3AgaV9tdXRleC4KICAqCiAgKiBXZSB3aWxsIGFkZCBvdXJzZWx2ZXMgdG8gdGhlIHRyYW5zYWN0aW9uIHBhc3NlZCBpbiwgYnV0IG1heSBzdGFydApAQCAtNDg1LDE2ICs2MzcsMTggQEAKIAogCW11dGV4X2xvY2soJmxvY2FsX2FsbG9jX2lub2RlLT5pX211dGV4KTsKIAotCWlmIChvc2ItPmxvY2FsX2FsbG9jX3N0YXRlICE9IE9DRlMyX0xBX0VOQUJMRUQpIHsKKwkvKgorCSAqIFdlIG11c3QgZG91YmxlIGNoZWNrIHN0YXRlIGFuZCBhbGxvY2F0b3IgYml0cyBiZWNhdXNlCisJICogYW5vdGhlciBwcm9jZXNzIG1heSBoYXZlIGNoYW5nZWQgdGhlbSB3aGlsZSBob2xkaW5nIGlfbXV0ZXguCisJICovCisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlpZiAoIW9jZnMyX2xhX3N0YXRlX2VuYWJsZWQob3NiKSB8fAorCSAgICAoYml0c193YW50ZWQgPiBvc2ItPmxvY2FsX2FsbG9jX2JpdHMpKSB7CisJCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAkJc3RhdHVzID0gLUVOT1NQQzsKIAkJZ290byBiYWlsOwogCX0KLQotCWlmIChiaXRzX3dhbnRlZCA+IG9jZnMyX2xvY2FsX2FsbG9jX3dpbmRvd19iaXRzKG9zYikpIHsKLQkJbWxvZygwLCAiQXNraW5nIGZvciBtb3JlIHRoYW4gbXkgbWF4IHdpbmRvdyBzaXplIVxuIik7Ci0JCXN0YXR1cyA9IC1FTk9TUEM7Ci0JCWdvdG8gYmFpbDsKLQl9CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOwogCiAJYWxsb2MgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBvc2ItPmxvY2FsX2FsbG9jX2JoLT5iX2RhdGE7CiAKQEAgLTUyMiw2ICs2NzYsMzYgQEAKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWw7CiAJCX0KKworCQkvKgorCQkgKiBVbmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsIHRoZSB3aW5kb3cgc2xpZGUgY29kZQorCQkgKiBtaWdodCBoYXZlIHJlZHVjZWQgdGhlIG51bWJlciBvZiBiaXRzIGF2YWlsYWJsZSBvcgorCQkgKiBkaXNhYmxlZCB0aGUgdGhlIGxvY2FsIGFsbG9jIGVudGlyZWx5LiBSZS1jaGVjaworCQkgKiBoZXJlIGFuZCByZXR1cm4gLUVOT1NQQyBpZiBuZWNlc3NhcnkuCisJCSAqLworCQlzdGF0dXMgPSAtRU5PU1BDOworCQlpZiAoIW9jZnMyX2xhX3N0YXRlX2VuYWJsZWQob3NiKSkKKwkJCWdvdG8gYmFpbDsKKworCQlmcmVlX2JpdHMgPSBsZTMyX3RvX2NwdShhbGxvYy0+aWQxLmJpdG1hcDEuaV90b3RhbCkgLQorCQkJbGUzMl90b19jcHUoYWxsb2MtPmlkMS5iaXRtYXAxLmlfdXNlZCk7CisJCWlmIChiaXRzX3dhbnRlZCA+IGZyZWVfYml0cykKKwkJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoYWMtPmFjX21heF9ibG9jaykKKwkJbWxvZygwLCAiQ2FsbGluZyBpbl9yYW5nZSBmb3IgbWF4IGJsb2NrICVsbHVcbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhYy0+YWNfbWF4X2Jsb2NrKTsKKworCWlmICghb2NmczJfbG9jYWxfYWxsb2NfaW5fcmFuZ2UobG9jYWxfYWxsb2NfaW5vZGUsIGFjLAorCQkJCQliaXRzX3dhbnRlZCkpIHsKKwkJLyoKKwkJICogVGhlIHdpbmRvdyBpcyBvdXRzaWRlIGFjLT5hY19tYXhfYmxvY2suCisJCSAqIFRoaXMgZXJybm8gdGVsbHMgdGhlIGNhbGxlciB0byBrZWVwIGxvY2FsYWxsb2MgZW5hYmxlZAorCQkgKiBidXQgdG8gZ2V0IHRoZSBhbGxvY2F0aW9uIGZyb20gdGhlIG1haW4gYml0bWFwLgorCQkgKi8KKwkJc3RhdHVzID0gLUVGQklHOworCQlnb3RvIGJhaWw7CiAJfQogCiAJYWMtPmFjX2lub2RlID0gbG9jYWxfYWxsb2NfaW5vZGU7CkBAIC03ODksNiArOTczLDg1IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorZW51bSBvY2ZzMl9sYV9ldmVudCB7CisJT0NGUzJfTEFfRVZFTlRfU0xJREUsCQkvKiBOb3JtYWwgd2luZG93IHNsaWRlLiAqLworCU9DRlMyX0xBX0VWRU5UX0ZSQUdNRU5URUQsCS8qIFRoZSBnbG9iYWwgYml0bWFwIGhhcworCQkJCQkgKiBlbm91Z2ggYml0cyB0aGVvcmV0aWNhbGx5CisJCQkJCSAqIGZyZWUsIGJ1dCBhIGNvbnRpZ3VvdXMKKwkJCQkJICogYWxsb2NhdGlvbiBjb3VsZCBub3QgYmUKKwkJCQkJICogZm91bmQuICovCisJT0NGUzJfTEFfRVZFTlRfRU5PU1BDLAkJLyogR2xvYmFsIGJpdG1hcCBkb2Vzbid0IGhhdmUKKwkJCQkJICogZW5vdWdoIGJpdHMgZnJlZSB0byBzYXRpc2Z5CisJCQkJCSAqIG91ciByZXF1ZXN0LiAqLworfTsKKyNkZWZpbmUgT0NGUzJfTEFfRU5BQkxFX0lOVEVSVkFMICgzMCAqIEhaKQorLyoKKyAqIEdpdmVuIGFuIGV2ZW50LCBjYWxjdWxhdGUgdGhlIHNpemUgb2Ygb3VyIG5leHQgbG9jYWwgYWxsb2Mgd2luZG93LgorICoKKyAqIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgdW5kZXIgaV9tdXRleCBvZiB0aGUgbG9jYWwgYWxsb2MgaW5vZGUKKyAqIHNvIHRoYXQgbG9jYWwgYWxsb2MgZGlzYWJsaW5nIGRvZXNuJ3QgcmFjZSB3aXRoIHByb2Nlc3NlcyB0cnlpbmcgdG8KKyAqIHVzZSB0aGUgYWxsb2NhdG9yLgorICoKKyAqIFJldHVybnMgdGhlIHN0YXRlIHdoaWNoIHRoZSBsb2NhbCBhbGxvYyB3YXMgbGVmdCBpbi4gVGhpcyB2YWx1ZSBjYW4KKyAqIGJlIGlnbm9yZWQgYnkgc29tZSBwYXRocy4KKyAqLworc3RhdGljIGludCBvY2ZzMl9yZWNhbGNfbGFfd2luZG93KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCSAgZW51bSBvY2ZzMl9sYV9ldmVudCBldmVudCkKK3sKKwl1bnNpZ25lZCBpbnQgYml0czsKKwlpbnQgc3RhdGU7CisKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCWlmIChvc2ItPmxvY2FsX2FsbG9jX3N0YXRlID09IE9DRlMyX0xBX0RJU0FCTEVEKSB7CisJCVdBUk5fT05fT05DRShvc2ItPmxvY2FsX2FsbG9jX3N0YXRlID09IE9DRlMyX0xBX0RJU0FCTEVEKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCS8qCisJICogRU5PU1BDIGFuZCBmcmFnbWVudGF0aW9uIGFyZSB0cmVhdGVkIHNpbWlsYXJseSBmb3Igbm93LgorCSAqLworCWlmIChldmVudCA9PSBPQ0ZTMl9MQV9FVkVOVF9FTk9TUEMgfHwKKwkgICAgZXZlbnQgPT0gT0NGUzJfTEFfRVZFTlRfRlJBR01FTlRFRCkgeworCQkvKgorCQkgKiBXZSByYW4gb3V0IG9mIGNvbnRpZ3VvdXMgc3BhY2UgaW4gdGhlIHByaW1hcnkKKwkJICogYml0bWFwLiBEcmFzdGljYWxseSByZWR1Y2UgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQKKwkJICogYnkgbG9jYWwgYWxsb2MgdW50aWwgd2UgaGF2ZSB0byBkaXNhYmxlIGl0LgorCQkgKi8KKwkJYml0cyA9IG9zYi0+bG9jYWxfYWxsb2NfYml0cyA+PiAxOworCQlpZiAoYml0cyA+IG9jZnMyX21lZ2FieXRlc190b19jbHVzdGVycyhvc2ItPnNiLCAxKSkgeworCQkJLyoKKwkJCSAqIEJ5IHNldHRpbmcgc3RhdGUgdG8gVEhST1RUTEVELCB3ZSdsbCBrZWVwCisJCQkgKiB0aGUgbnVtYmVyIG9mIGxvY2FsIGFsbG9jIGJpdHMgdXNlZCBkb3duCisJCQkgKiB1bnRpbCBhbiBldmVudCBvY2N1cnMgd2hpY2ggd291bGQgZ2l2ZSB1cworCQkJICogcmVhc29uIHRvIGFzc3VtZSB0aGUgYml0bWFwIHNpdHVhdGlvbiBtaWdodAorCQkJICogaGF2ZSBjaGFuZ2VkLgorCQkJICovCisJCQlvc2ItPmxvY2FsX2FsbG9jX3N0YXRlID0gT0NGUzJfTEFfVEhST1RUTEVEOworCQkJb3NiLT5sb2NhbF9hbGxvY19iaXRzID0gYml0czsKKwkJfSBlbHNlIHsKKwkJCW9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPSBPQ0ZTMl9MQV9ESVNBQkxFRDsKKwkJfQorCQlxdWV1ZV9kZWxheWVkX3dvcmsob2NmczJfd3EsICZvc2ItPmxhX2VuYWJsZV93cSwKKwkJCQkgICBPQ0ZTMl9MQV9FTkFCTEVfSU5URVJWQUwpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJLyoKKwkgKiBEb24ndCBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgbG9jYWwgYWxsb2Mgd2luZG93IHVudGlsIHdlCisJICoga25vdyB3ZSBtaWdodCBiZSBhYmxlIHRvIGZ1bGZpbGwgdGhlIHJlcXVlc3QuIE90aGVyd2lzZSwgd2UKKwkgKiByaXNrIGJvdW5jaW5nIGFyb3VuZCB0aGUgZ2xvYmFsIGJpdG1hcCBkdXJpbmcgcGVyaW9kcyBvZgorCSAqIGxvdyBzcGFjZS4KKwkgKi8KKwlpZiAob3NiLT5sb2NhbF9hbGxvY19zdGF0ZSAhPSBPQ0ZTMl9MQV9USFJPVFRMRUQpCisJCW9zYi0+bG9jYWxfYWxsb2NfYml0cyA9IG9zYi0+bG9jYWxfYWxsb2NfZGVmYXVsdF9iaXRzOworCitvdXRfdW5sb2NrOgorCXN0YXRlID0gb3NiLT5sb2NhbF9hbGxvY19zdGF0ZTsKKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKIHN0YXRpYyBpbnQgb2NmczJfbG9jYWxfYWxsb2NfcmVzZXJ2ZV9mb3Jfd2luZG93KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiphYywKIAkJCQkJCXN0cnVjdCBpbm9kZSAqKmJpdG1hcF9pbm9kZSwKQEAgLTgwMywxMiArMTA2NiwyMSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JKCphYyktPmFjX2JpdHNfd2FudGVkID0gb2NmczJfbG9jYWxfYWxsb2Nfd2luZG93X2JpdHMob3NiKTsKK3JldHJ5X2Vub3NwYzoKKwkoKmFjKS0+YWNfYml0c193YW50ZWQgPSBvc2ItPmxvY2FsX2FsbG9jX2JpdHM7CiAKIAlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJfYml0bWFwX2JpdHMob3NiLCAqYWMpOworCWlmIChzdGF0dXMgPT0gLUVOT1NQQykgeworCQlpZiAob2NmczJfcmVjYWxjX2xhX3dpbmRvdyhvc2IsIE9DRlMyX0xBX0VWRU5UX0VOT1NQQykgPT0KKwkJICAgIE9DRlMyX0xBX0RJU0FCTEVEKQorCQkJZ290byBiYWlsOworCisJCW9jZnMyX2ZyZWVfYWNfcmVzb3VyY2UoKmFjKTsKKwkJbWVtc2V0KCphYywgMCwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0KSk7CisJCWdvdG8gcmV0cnlfZW5vc3BjOworCX0KIAlpZiAoc3RhdHVzIDwgMCkgewotCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCi0JCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwogCX0KIApAQCAtODQ5LDcgKzExMjEsNyBAQAogCQkgICAgICJvbmVcbiIpOwogCiAJbWxvZygwLCAiQWxsb2NhdGluZyAldSBjbHVzdGVycyBmb3IgYSBuZXcgd2luZG93LlxuIiwKLQkgICAgIG9jZnMyX2xvY2FsX2FsbG9jX3dpbmRvd19iaXRzKG9zYikpOworCSAgICAgb3NiLT5sb2NhbF9hbGxvY19iaXRzKTsKIAogCS8qIEluc3RydWN0IHRoZSBhbGxvY2F0aW9uIGNvZGUgdG8gdHJ5IHRoZSBtb3N0IHJlY2VudGx5IHVzZWQKIAkgKiBjbHVzdGVyIGdyb3VwLiBXZSdsbCByZS1yZWNvcmQgdGhlIGdyb3VwIHVzZWQgdGhpcyBwYXNzCkBAIC04NTksOSArMTEzMSwzNiBAQAogCS8qIHdlIHVzZWQgdGhlIGdlbmVyaWMgc3ViYWxsb2MgcmVzZXJ2ZSBmdW5jdGlvbiwgYnV0IHdlIHNldAogCSAqIGV2ZXJ5dGhpbmcgdXAgbmljZWx5LCBzbyB0aGVyZSdzIG5vIHJlYXNvbiB3aHkgd2UgY2FuJ3QgdXNlCiAJICogdGhlIG1vcmUgc3BlY2lmaWMgY2x1c3RlciBhcGkgdG8gY2xhaW0gYml0cy4gKi8KLQlzdGF0dXMgPSBvY2ZzMl9jbGFpbV9jbHVzdGVycyhvc2IsIGhhbmRsZSwgYWMsCi0JCQkJICAgICAgb2NmczJfbG9jYWxfYWxsb2Nfd2luZG93X2JpdHMob3NiKSwKKwlzdGF0dXMgPSBvY2ZzMl9jbGFpbV9jbHVzdGVycyhvc2IsIGhhbmRsZSwgYWMsIG9zYi0+bG9jYWxfYWxsb2NfYml0cywKIAkJCQkgICAgICAmY2x1c3Rlcl9vZmYsICZjbHVzdGVyX2NvdW50KTsKKwlpZiAoc3RhdHVzID09IC1FTk9TUEMpIHsKK3JldHJ5X2Vub3NwYzoKKwkJLyoKKwkJICogTm90ZTogV2UgY291bGQgYWxzbyB0cnkgc3luY2luZyB0aGUgam91cm5hbCBoZXJlIHRvCisJCSAqIGFsbG93IHVzZSBvZiBhbnkgZnJlZSBiaXRzIHdoaWNoIHRoZSBjdXJyZW50CisJCSAqIHRyYW5zYWN0aW9uIGNhbid0IGdpdmUgdXMgYWNjZXNzIHRvLiAtLU1hcmsKKwkJICovCisJCWlmIChvY2ZzMl9yZWNhbGNfbGFfd2luZG93KG9zYiwgT0NGUzJfTEFfRVZFTlRfRlJBR01FTlRFRCkgPT0KKwkJICAgIE9DRlMyX0xBX0RJU0FCTEVEKQorCQkJZ290byBiYWlsOworCisJCXN0YXR1cyA9IG9jZnMyX2NsYWltX2NsdXN0ZXJzKG9zYiwgaGFuZGxlLCBhYywKKwkJCQkJICAgICAgb3NiLT5sb2NhbF9hbGxvY19iaXRzLAorCQkJCQkgICAgICAmY2x1c3Rlcl9vZmYsCisJCQkJCSAgICAgICZjbHVzdGVyX2NvdW50KTsKKwkJaWYgKHN0YXR1cyA9PSAtRU5PU1BDKQorCQkJZ290byByZXRyeV9lbm9zcGM7CisJCS8qCisJCSAqIFdlIG9ubHkgc2hydW5rIHRoZSAqbWluaW11bSogbnVtYmVyIG9mIGluIG91cgorCQkgKiByZXF1ZXN0IC0gaXQncyBlbnRpcmVseSBwb3NzaWJsZSB0aGF0IHRoZSBhbGxvY2F0b3IKKwkJICogbWlnaHQgZ2l2ZSB1cyBtb3JlIHRoYW4gd2UgYXNrZWQgZm9yLgorCQkgKi8KKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCQkJb3NiLT5sb2NhbF9hbGxvY19iaXRzID0gY2x1c3Rlcl9jb3VudDsKKwkJCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwkJfQorCX0KIAlpZiAoc3RhdHVzIDwgMCkgewogCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC05MDUsNiArMTIwNCw4IEBACiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAorCW9jZnMyX3JlY2FsY19sYV93aW5kb3cob3NiLCBPQ0ZTMl9MQV9FVkVOVF9TTElERSk7CisKIAkvKiBUaGlzIHdpbGwgbG9jayB0aGUgbWFpbiBiaXRtYXAgZm9yIHVzLiAqLwogCXN0YXR1cyA9IG9jZnMyX2xvY2FsX2FsbG9jX3Jlc2VydmVfZm9yX3dpbmRvdyhvc2IsCiAJCQkJCQkgICAgICAmYWMsCkBAIC05NzYsOCArMTI3Nyw3IEBACiAJaWYgKGhhbmRsZSkKIAkJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKIAotCWlmIChtYWluX2JtX2JoKQotCQlicmVsc2UobWFpbl9ibV9iaCk7CisJYnJlbHNlKG1haW5fYm1fYmgpOwogCiAJaWYgKG1haW5fYm1faW5vZGUpCiAJCWlwdXQobWFpbl9ibV9pbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9sb2NhbGFsbG9jLmggYi9mcy9vY2ZzMi9sb2NhbGFsbG9jLmgKaW5kZXggM2Y3NjYzMS4uYWM1ZWE5ZjggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2xvY2FsYWxsb2MuaAorKysgYi9mcy9vY2ZzMi9sb2NhbGFsbG9jLmgKQEAgLTUyLDQgKzUyLDggQEAKIAkJCQkgdTMyICpiaXRfb2ZmLAogCQkJCSB1MzIgKm51bV9iaXRzKTsKIAordm9pZCBvY2ZzMl9sb2NhbF9hbGxvY19zZWVuX2ZyZWVfYml0cyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtX2NsdXN0ZXJzKTsKK3ZvaWQgb2NmczJfbGFfZW5hYmxlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCiAjZW5kaWYgLyogT0NGUzJfTE9DQUxBTExPQ19IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9sb2Nrcy5jIGIvZnMvb2NmczIvbG9ja3MuYwppbmRleCAyMDNmODcxLi41NDRhYzYyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9sb2Nrcy5jCisrKyBiL2ZzL29jZnMyL2xvY2tzLmMKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogCiAjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfSU5PREUKICNpbmNsdWRlIDxjbHVzdGVyL21hc2tsb2cuaD4KQEAgLTMyLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgImRsbWdsdWUuaCIKICNpbmNsdWRlICJmaWxlLmgiCisjaW5jbHVkZSAiaW5vZGUuaCIKICNpbmNsdWRlICJsb2Nrcy5oIgogCiBzdGF0aWMgaW50IG9jZnMyX2RvX2Zsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLApAQCAtMTIzLDMgKzEyNSwxNiBAQAogCWVsc2UKIAkJcmV0dXJuIG9jZnMyX2RvX2Zsb2NrKGZpbGUsIGlub2RlLCBjbWQsIGZsKTsKIH0KKworaW50IG9jZnMyX2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisKKwlpZiAoIShmbC0+ZmxfZmxhZ3MgJiBGTF9QT1NJWCkpCisJCXJldHVybiAtRU5PTENLOworCWlmIChfX21hbmRhdG9yeV9sb2NrKGlub2RlKSkKKwkJcmV0dXJuIC1FTk9MQ0s7CisKKwlyZXR1cm4gb2NmczJfcGxvY2sob3NiLT5jY29ubiwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCBmaWxlLCBjbWQsIGZsKTsKK30KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2xvY2tzLmggYi9mcy9vY2ZzMi9sb2Nrcy5oCmluZGV4IDk3NDNlZjIuLjQ5NmQ0ODggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2xvY2tzLmgKKysrIGIvZnMvb2NmczIvbG9ja3MuaApAQCAtMjcsNSArMjcsNiBAQAogI2RlZmluZSBPQ0ZTMl9MT0NLU19ICiAKIGludCBvY2ZzMl9mbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpOworaW50IG9jZnMyX2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKIAogI2VuZGlmIC8qIE9DRlMyX0xPQ0tTX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IGQ1ZDgwOGYuLjQ4NWE2YWEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgInN5bWxpbmsuaCIKICNpbmNsdWRlICJzeXNmaWxlLmgiCiAjaW5jbHVkZSAidXB0b2RhdGUuaCIKKyNpbmNsdWRlICJ4YXR0ci5oIgogCiAjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKIApAQCAtMzI3LDE0ICszMjgsOSBAQAogCWlmIChzdGF0dXMgPT0gLUVOT1NQQykKIAkJbWxvZygwLCAiRGlzayBpcyBmdWxsXG4iKTsKIAotCWlmIChuZXdfZmVfYmgpCi0JCWJyZWxzZShuZXdfZmVfYmgpOwotCi0JaWYgKGRlX2JoKQotCQlicmVsc2UoZGVfYmgpOwotCi0JaWYgKHBhcmVudF9mZV9iaCkKLQkJYnJlbHNlKHBhcmVudF9mZV9iaCk7CisJYnJlbHNlKG5ld19mZV9iaCk7CisJYnJlbHNlKGRlX2JoKTsKKwlicmVsc2UocGFyZW50X2ZlX2JoKTsKIAogCWlmICgoc3RhdHVzIDwgMCkgJiYgaW5vZGUpCiAJCWlwdXQoaW5vZGUpOwpAQCAtNjQ3LDEyICs2NDMsOSBAQAogb3V0OgogCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDEpOwogCi0JaWYgKGRlX2JoKQotCQlicmVsc2UoZGVfYmgpOwotCWlmIChmZV9iaCkKLQkJYnJlbHNlKGZlX2JoKTsKLQlpZiAocGFyZW50X2ZlX2JoKQotCQlicmVsc2UocGFyZW50X2ZlX2JoKTsKKwlicmVsc2UoZGVfYmgpOworCWJyZWxzZShmZV9iaCk7CisJYnJlbHNlKHBhcmVudF9mZV9iaCk7CiAKIAltbG9nX2V4aXQoZXJyKTsKIApAQCAtODUxLDE3ICs4NDQsMTAgQEAKIAkJaXB1dChvcnBoYW5fZGlyKTsKIAl9CiAKLQlpZiAoZmVfYmgpCi0JCWJyZWxzZShmZV9iaCk7Ci0KLQlpZiAoZGlyZW50X2JoKQotCQlicmVsc2UoZGlyZW50X2JoKTsKLQotCWlmIChwYXJlbnRfbm9kZV9iaCkKLQkJYnJlbHNlKHBhcmVudF9ub2RlX2JoKTsKLQotCWlmIChvcnBoYW5fZW50cnlfYmgpCi0JCWJyZWxzZShvcnBoYW5fZW50cnlfYmgpOworCWJyZWxzZShmZV9iaCk7CisJYnJlbHNlKGRpcmVudF9iaCk7CisJYnJlbHNlKHBhcmVudF9ub2RlX2JoKTsKKwlicmVsc2Uob3JwaGFuX2VudHJ5X2JoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCkBAIC0xMzcyLDI0ICsxMzU4LDE1IEBACiAKIAlpZiAobmV3X2lub2RlKQogCQlpcHV0KG5ld19pbm9kZSk7Ci0JaWYgKG5ld2ZlX2JoKQotCQlicmVsc2UobmV3ZmVfYmgpOwotCWlmIChvbGRfaW5vZGVfYmgpCi0JCWJyZWxzZShvbGRfaW5vZGVfYmgpOwotCWlmIChvbGRfZGlyX2JoKQotCQlicmVsc2Uob2xkX2Rpcl9iaCk7Ci0JaWYgKG5ld19kaXJfYmgpCi0JCWJyZWxzZShuZXdfZGlyX2JoKTsKLQlpZiAobmV3X2RlX2JoKQotCQlicmVsc2UobmV3X2RlX2JoKTsKLQlpZiAob2xkX2RlX2JoKQotCQlicmVsc2Uob2xkX2RlX2JoKTsKLQlpZiAob2xkX2lub2RlX2RlX2JoKQotCQlicmVsc2Uob2xkX2lub2RlX2RlX2JoKTsKLQlpZiAob3JwaGFuX2VudHJ5X2JoKQotCQlicmVsc2Uob3JwaGFuX2VudHJ5X2JoKTsKLQlpZiAoaW5zZXJ0X2VudHJ5X2JoKQotCQlicmVsc2UoaW5zZXJ0X2VudHJ5X2JoKTsKKwlicmVsc2UobmV3ZmVfYmgpOworCWJyZWxzZShvbGRfaW5vZGVfYmgpOworCWJyZWxzZShvbGRfZGlyX2JoKTsKKwlicmVsc2UobmV3X2Rpcl9iaCk7CisJYnJlbHNlKG5ld19kZV9iaCk7CisJYnJlbHNlKG9sZF9kZV9iaCk7CisJYnJlbHNlKG9sZF9pbm9kZV9kZV9iaCk7CisJYnJlbHNlKG9ycGhhbl9lbnRyeV9iaCk7CisJYnJlbHNlKGluc2VydF9lbnRyeV9iaCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIApAQCAtMTQ5Miw4ICsxNDY5LDcgQEAKIAogCWlmIChiaHMpIHsKIAkJZm9yKGkgPSAwOyBpIDwgYmxvY2tzOyBpKyspCi0JCQlpZiAoYmhzW2ldKQotCQkJCWJyZWxzZShiaHNbaV0pOworCQkJYnJlbHNlKGJoc1tpXSk7CiAJCWtmcmVlKGJocyk7CiAJfQogCkBAIC0xNTk4LDEwICsxNTc0LDEwIEBACiAJCXUzMiBvZmZzZXQgPSAwOwogCiAJCWlub2RlLT5pX29wID0gJm9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKLQkJc3RhdHVzID0gb2NmczJfZG9fZXh0ZW5kX2FsbG9jYXRpb24ob3NiLCBpbm9kZSwgJm9mZnNldCwgMSwgMCwKLQkJCQkJCSAgICBuZXdfZmVfYmgsCi0JCQkJCQkgICAgaGFuZGxlLCBkYXRhX2FjLCBOVUxMLAotCQkJCQkJICAgIE5VTEwpOworCQlzdGF0dXMgPSBvY2ZzMl9hZGRfaW5vZGVfZGF0YShvc2IsIGlub2RlLCAmb2Zmc2V0LCAxLCAwLAorCQkJCQkgICAgICBuZXdfZmVfYmgsCisJCQkJCSAgICAgIGhhbmRsZSwgZGF0YV9hYywgTlVMTCwKKwkJCQkJICAgICAgTlVMTCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMgJiYgc3RhdHVzICE9IC1FSU5UUikgewogCQkJCW1sb2coTUxfRVJST1IsCkBAIC0xNjU5LDEyICsxNjM1LDkgQEAKIAogCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDEpOwogCi0JaWYgKG5ld19mZV9iaCkKLQkJYnJlbHNlKG5ld19mZV9iaCk7Ci0JaWYgKHBhcmVudF9mZV9iaCkKLQkJYnJlbHNlKHBhcmVudF9mZV9iaCk7Ci0JaWYgKGRlX2JoKQotCQlicmVsc2UoZGVfYmgpOworCWJyZWxzZShuZXdfZmVfYmgpOworCWJyZWxzZShwYXJlbnRfZmVfYmgpOworCWJyZWxzZShkZV9iaCk7CiAJaWYgKGlub2RlX2FjKQogCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoaW5vZGVfYWMpOwogCWlmIChkYXRhX2FjKQpAQCAtMTc1OSw4ICsxNzMyLDcgQEAKIAkJaXB1dChvcnBoYW5fZGlyX2lub2RlKTsKIAl9CiAKLQlpZiAob3JwaGFuX2Rpcl9iaCkKLQkJYnJlbHNlKG9ycGhhbl9kaXJfYmgpOworCWJyZWxzZShvcnBoYW5fZGlyX2JoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CkBAIC0xNzgwLDEwICsxNzUyLDkgQEAKIAogCW1sb2dfZW50cnkoIihpbm9kZS0+aV9pbm8gPSAlbHUpXG4iLCBpbm9kZS0+aV9pbm8pOwogCi0Jc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhvc2IsCisJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhvcnBoYW5fZGlyX2lub2RlLAogCQkJCSAgT0NGUzJfSShvcnBoYW5fZGlyX2lub2RlKS0+aXBfYmxrbm8sCi0JCQkJICAmb3JwaGFuX2Rpcl9iaCwgT0NGUzJfQkhfQ0FDSEVELAotCQkJCSAgb3JwaGFuX2Rpcl9pbm9kZSk7CisJCQkJICAmb3JwaGFuX2Rpcl9iaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwpAQCAtMTgyOSw4ICsxODAwLDcgQEAKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCBvc2ItPnNsb3RfbnVtKTsKIAogbGVhdmU6Ci0JaWYgKG9ycGhhbl9kaXJfYmgpCi0JCWJyZWxzZShvcnBoYW5fZGlyX2JoKTsKKwlicmVsc2Uob3JwaGFuX2Rpcl9iaCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTg5OCw4ICsxODY4LDcgQEAKIAl9CiAKIGxlYXZlOgotCWlmICh0YXJnZXRfZGVfYmgpCi0JCWJyZWxzZSh0YXJnZXRfZGVfYmgpOworCWJyZWxzZSh0YXJnZXRfZGVfYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTE5MTgsNCArMTg4Nyw4IEBACiAJLnNldGF0dHIJPSBvY2ZzMl9zZXRhdHRyLAogCS5nZXRhdHRyCT0gb2NmczJfZ2V0YXR0ciwKIAkucGVybWlzc2lvbgk9IG9jZnMyX3Blcm1pc3Npb24sCisJLnNldHhhdHRyCT0gZ2VuZXJpY19zZXR4YXR0ciwKKwkuZ2V0eGF0dHIJPSBnZW5lcmljX2dldHhhdHRyLAorCS5saXN0eGF0dHIJPSBvY2ZzMl9saXN0eGF0dHIsCisJLnJlbW92ZXhhdHRyCT0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKIH07CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMi5oIGIvZnMvb2NmczIvb2NmczIuaAppbmRleCA3ZjYyNWYyLi5hMjFhNDY1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMi5oCisrKyBiL2ZzL29jZnMyL29jZnMyLmgKQEAgLTM0LDcgKzM0LDEyIEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvamJkLmg+CisjaWZuZGVmIENPTkZJR19PQ0ZTMl9DT01QQVRfSkJECisjIGluY2x1ZGUgPGxpbnV4L2piZDIuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGxpbnV4L2piZC5oPgorIyBpbmNsdWRlICJvY2ZzMl9qYmRfY29tcGF0LmgiCisjZW5kaWYKIAogLyogRm9yIHVuaW9uIG9jZnMyX2RsbV9sa3NiICovCiAjaW5jbHVkZSAic3RhY2tnbHVlLmgiCkBAIC0xNzEsOSArMTc2LDEzIEBACiAKIGVudW0gb2NmczJfbG9jYWxfYWxsb2Nfc3RhdGUKIHsKLQlPQ0ZTMl9MQV9VTlVTRUQgPSAwLAotCU9DRlMyX0xBX0VOQUJMRUQsCi0JT0NGUzJfTEFfRElTQUJMRUQKKwlPQ0ZTMl9MQV9VTlVTRUQgPSAwLAkvKiBMb2NhbCBhbGxvYyB3aWxsIG5ldmVyIGJlIHVzZWQgZm9yCisJCQkJICogdGhpcyBtb3VudHBvaW50LiAqLworCU9DRlMyX0xBX0VOQUJMRUQsCS8qIExvY2FsIGFsbG9jIGlzIGluIHVzZS4gKi8KKwlPQ0ZTMl9MQV9USFJPVFRMRUQsCS8qIExvY2FsIGFsbG9jIGlzIGluIHVzZSwgYnV0IG51bWJlcgorCQkJCSAqIG9mIGJpdHMgaGFzIGJlZW4gcmVkdWNlZC4gKi8KKwlPQ0ZTMl9MQV9ESVNBQkxFRAkvKiBMb2NhbCBhbGxvYyBoYXMgdGVtcG9yYXJpbHkgYmVlbgorCQkJCSAqIGRpc2FibGVkLiAqLwogfTsKIAogZW51bSBvY2ZzMl9tb3VudF9vcHRpb25zCkBAIC0xODQsNiArMTkzLDggQEAKIAlPQ0ZTMl9NT1VOVF9FUlJPUlNfUEFOSUMgPSAxIDw8IDMsIC8qIFBhbmljIG9uIGVycm9ycyAqLwogCU9DRlMyX01PVU5UX0RBVEFfV1JJVEVCQUNLID0gMSA8PCA0LCAvKiBObyBkYXRhIG9yZGVyaW5nICovCiAJT0NGUzJfTU9VTlRfTE9DQUxGTE9DS1MgPSAxIDw8IDUsIC8qIE5vIGNsdXN0ZXIgYXdhcmUgdXNlciBmaWxlIGxvY2tzICovCisJT0NGUzJfTU9VTlRfTk9VU0VSWEFUVFIgPSAxIDw8IDYsIC8qIE5vIHVzZXIgeGF0dHIgKi8KKwlPQ0ZTMl9NT1VOVF9JTk9ERTY0ID0gMSA8PCA3LAkvKiBBbGxvdyBpbm9kZSBudW1iZXJzID4gMl4zMiAqLwogfTsKIAogI2RlZmluZSBPQ0ZTMl9PU0JfU09GVF9STwkweDAwMDEKQEAgLTIxNCw2ICsyMjUsNyBAQAogCXUzMiBiaXRtYXBfY3BnOwogCXU4ICp1dWlkOwogCWNoYXIgKnV1aWRfc3RyOworCXUzMiB1dWlkX2hhc2g7CiAJdTggKnZvbF9sYWJlbDsKIAl1NjQgZmlyc3RfY2x1c3Rlcl9ncm91cF9ibGtubzsKIAl1MzIgZnNfZ2VuZXJhdGlvbjsKQEAgLTI0MSw2ICsyNTMsNyBAQAogCWludCBzX3NlY3RzaXplX2JpdHM7CiAJaW50IHNfY2x1c3RlcnNpemU7CiAJaW50IHNfY2x1c3RlcnNpemVfYml0czsKKwl1bnNpZ25lZCBpbnQgc194YXR0cl9pbmxpbmVfc2l6ZTsKIAogCWF0b21pY190IHZvbF9zdGF0ZTsKIAlzdHJ1Y3QgbXV0ZXggcmVjb3ZlcnlfbG9jazsKQEAgLTI1MiwxMSArMjY1LDI3IEBACiAJc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWw7CiAJdW5zaWduZWQgbG9uZyBvc2JfY29tbWl0X2ludGVydmFsOwogCi0JaW50IGxvY2FsX2FsbG9jX3NpemU7Ci0JZW51bSBvY2ZzMl9sb2NhbF9hbGxvY19zdGF0ZSBsb2NhbF9hbGxvY19zdGF0ZTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCQlsYV9lbmFibGVfd3E7CisKKwkvKgorCSAqIE11c3QgaG9sZCBsb2NhbCBhbGxvYyBpX211dGV4IGFuZCBvc2ItPm9zYl9sb2NrIHRvIGNoYW5nZQorCSAqIGxvY2FsX2FsbG9jX2JpdHMuIFJlYWRzIGNhbiBiZSBkb25lIHVuZGVyIGVpdGhlciBsb2NrLgorCSAqLworCXVuc2lnbmVkIGludCBsb2NhbF9hbGxvY19iaXRzOworCXVuc2lnbmVkIGludCBsb2NhbF9hbGxvY19kZWZhdWx0X2JpdHM7CisKKwllbnVtIG9jZnMyX2xvY2FsX2FsbG9jX3N0YXRlIGxvY2FsX2FsbG9jX3N0YXRlOyAvKiBwcm90ZWN0ZWQKKwkJCQkJCQkgKiBieSBvc2JfbG9jayAqLworCiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpsb2NhbF9hbGxvY19iaDsKKwogCXU2NCBsYV9sYXN0X2dkOwogCisjaWZkZWYgQ09ORklHX09DRlMyX0ZTX1NUQVRTCisJc3RydWN0IGRlbnRyeSAqbG9jYWxfYWxsb2NfZGVidWc7CisJY2hhciAqbG9jYWxfYWxsb2NfZGVidWdfYnVmOworI2VuZGlmCisKIAkvKiBOZXh0IHR3byBmaWVsZHMgYXJlIGZvciBsb2NhbCBub2RlIHNsb3QgcmVjb3ZlcnkgZHVyaW5nCiAJICogbW91bnQuICovCiAJaW50IGRpcnR5OwpAQCAtMzQwLDYgKzM2OSwxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9zdXBwb3J0c194YXR0cihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwlpZiAob3NiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwogLyogc2V0IC8gY2xlYXIgZnVuY3Rpb25zIGJlY2F1c2UgY2x1c3RlciBldmVudHMgY2FuIG1ha2UgdGhlc2UgaGFwcGVuCiAgKiBpbiBwYXJhbGxlbCBzbyB3ZSB3YW50IHRoZSB0cmFuc2l0aW9ucyB0byBiZSBhdG9taWMuIHRoaXMgYWxzbwogICogbWVhbnMgdGhhdCBhbnkgZnV0dXJlIGZsYWdzIG9zYl9mbGFncyBtdXN0IGJlIHByb3RlY3RlZCBieSBzcGlubG9jawpAQCAtNTU0LDYgKzU5MCwxNCBAQAogCXJldHVybiBwYWdlc19wZXJfY2x1c3RlcjsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2NmczJfbWVnYWJ5dGVzX3RvX2NsdXN0ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCQkgICAgICAgdW5zaWduZWQgaW50IG1lZ3MpCit7CisJQlVJTERfQlVHX09OKE9DRlMyX01BWF9DTFVTVEVSU0laRSA+IDEwNDg1NzYpOworCisJcmV0dXJuIG1lZ3MgPDwgKDIwIC0gT0NGUzJfU0Ioc2IpLT5zX2NsdXN0ZXJzaXplX2JpdHMpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfaW5pdF9pbm9kZV9zdGVhbF9zbG90KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQogewogCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMl9mcy5oIGIvZnMvb2NmczIvb2NmczJfZnMuaAppbmRleCA0ZjYxOTg1Li5mMjRjZTNkIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMl9mcy5oCisrKyBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKQEAgLTY0LDYgKzY0LDcgQEAKICNkZWZpbmUgT0NGUzJfSU5PREVfU0lHTkFUVVJFCQkiSU5PREUwMSIKICNkZWZpbmUgT0NGUzJfRVhURU5UX0JMT0NLX1NJR05BVFVSRQkiRVhCTEswMSIKICNkZWZpbmUgT0NGUzJfR1JPVVBfREVTQ19TSUdOQVRVUkUgICAgICAiR1JPVVAwMSIKKyNkZWZpbmUgT0NGUzJfWEFUVFJfQkxPQ0tfU0lHTkFUVVJFCSJYQVRUUjAxIgogCiAvKiBDb21wYXRpYmlsaXR5IGZsYWdzICovCiAjZGVmaW5lIE9DRlMyX0hBU19DT01QQVRfRkVBVFVSRShzYixtYXNrKQkJCVwKQEAgLTkwLDcgKzkxLDggQEAKIAkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9TUEFSU0VfQUxMT0MgXAogCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0lOTElORV9EQVRBIFwKIAkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTkRFRF9TTE9UX01BUCBcCi0JCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfVVNFUlNQQUNFX1NUQUNLKQorCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1VTRVJTUEFDRV9TVEFDSyBcCisJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFAJT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfVU5XUklUVEVOCiAKIC8qCkBAIC0xMjcsMTAgKzEyOSw2IEBACiAvKiBTdXBwb3J0IGZvciBkYXRhIHBhY2tlZCBpbnRvIGlub2RlIGJsb2NrcyAqLwogI2RlZmluZSBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0lOTElORV9EQVRBCTB4MDA0MAogCi0vKiBTdXBwb3J0IGZvciB0aGUgZXh0ZW5kZWQgc2xvdCBtYXAgKi8KLSNkZWZpbmUgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTkRFRF9TTE9UX01BUCAweDEwMAotCi0KIC8qCiAgKiBTdXBwb3J0IGZvciBhbHRlcm5hdGUsIHVzZXJzcGFjZSBjbHVzdGVyIHN0YWNrcy4gIElmIHNldCwgdGhlIHN1cGVyYmxvY2sKICAqIGZpZWxkIHNfY2x1c3Rlcl9pbmZvIGNvbnRhaW5zIGEgdGFnIGZvciB0aGUgYWx0ZXJuYXRlIHN0YWNrIGluIHVzZSBhcwpAQCAtMTQyLDYgKzE0MCwxMiBAQAogICovCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfVVNFUlNQQUNFX1NUQUNLCTB4MDA4MAogCisvKiBTdXBwb3J0IGZvciB0aGUgZXh0ZW5kZWQgc2xvdCBtYXAgKi8KKyNkZWZpbmUgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTkRFRF9TTE9UX01BUCAweDEwMAorCisvKiBTdXBwb3J0IGZvciBleHRlbmRlZCBhdHRyaWJ1dGVzICovCisjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIJCTB4MDIwMAorCiAvKgogICogYmFja3VwIHN1cGVyYmxvY2sgZmxhZyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhpcyB2b2x1bWUKICAqIGhhcyBiYWNrdXAgc3VwZXJibG9ja3MuCkBAIC0yOTksNiArMzAzLDEyIEBACiAgKi8KICNkZWZpbmUgT0NGUzJfREVGQVVMVF9MT0NBTF9BTExPQ19TSVpFCTgKIAorLyoKKyAqIElubGluZSBleHRlbmRlZCBhdHRyaWJ1dGUgc2l6ZSAoaW4gYnl0ZXMpCisgKiBUaGUgdmFsdWUgY2hvc2VuIHNob3VsZCBiZSBhbGlnbmVkIHRvIDE2IGJ5dGUgYm91bmRhcmllcy4KKyAqLworI2RlZmluZSBPQ0ZTMl9NSU5fWEFUVFJfSU5MSU5FX1NJWkUgICAgIDI1NgorCiBzdHJ1Y3Qgb2NmczJfc3lzdGVtX2lub2RlX2luZm8gewogCWNoYXIJKnNpX25hbWU7CiAJaW50CXNpX2lmbGFnczsKQEAgLTU2Myw3ICs1NzMsNyBAQAogLyo0MCovCV9fbGUxNiBzX21heF9zbG90czsJCS8qIE1heCBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIG1vdW50cwogCQkJCQkgICBiZWZvcmUgdHVuZWZzIHJlcXVpcmVkICovCiAJX19sZTE2IHNfdHVuZWZzX2ZsYWc7Ci0JX19sZTMyIHNfcmVzZXJ2ZWQxOworCV9fbGUzMiBzX3V1aWRfaGFzaDsJCS8qIGhhc2ggdmFsdWUgb2YgdXVpZCAqLwogCV9fbGU2NCBzX2ZpcnN0X2NsdXN0ZXJfZ3JvdXA7CS8qIEJsb2NrIG9mZnNldCBvZiAxc3QgY2x1c3RlcgogCQkJCQkgKiBncm91cCBoZWFkZXIgKi8KIC8qNTAqLwlfX3U4ICBzX2xhYmVsW09DRlMyX01BWF9WT0xfTEFCRUxfTEVOXTsJLyogTGFiZWwgZm9yIG1vdW50aW5nLCBldGMuICovCkBAIC01NzEsNyArNTgxLDExIEBACiAvKkEwKi8gIHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2luZm8gc19jbHVzdGVyX2luZm87IC8qIFNlbGVjdGVkIHVzZXJzcGFjZQogCQkJCQkJICAgICBzdGFjay4gIE9ubHkgdmFsaWQKIAkJCQkJCSAgICAgd2l0aCBJTkNPTVBBVCBmbGFnLiAqLwotLypCOCovICBfX2xlNjQgc19yZXNlcnZlZDJbMTddOwkJLyogRmlsbCBvdXQgc3VwZXJibG9jayAqLworLypCOCovCV9fbGUxNiBzX3hhdHRyX2lubGluZV9zaXplOwkvKiBleHRlbmRlZCBhdHRyaWJ1dGUgaW5saW5lIHNpemUKKwkJCQkJICAgZm9yIHRoaXMgZnMqLworCV9fbGUxNiBzX3Jlc2VydmVkMDsKKwlfX2xlMzIgc19yZXNlcnZlZDE7CisvKkMwKi8gIF9fbGU2NCBzX3Jlc2VydmVkMlsxNl07CQkvKiBGaWxsIG91dCBzdXBlcmJsb2NrICovCiAvKjE0MCovCiAKIAkvKgpAQCAtNjIxLDcgKzYzNSw4IEBACiAJCQkJCSAgIGJlbG9uZ3MgdG8gKi8KIAlfX2xlMTYgaV9zdWJhbGxvY19iaXQ7CQkvKiBCaXQgb2Zmc2V0IGluIHN1YmFsbG9jYXRvcgogCQkJCQkgICBibG9jayBncm91cCAqLwotLyoxMCovCV9fbGUzMiBpX3Jlc2VydmVkMDsKKy8qMTAqLwlfX2xlMTYgaV9yZXNlcnZlZDA7CisJX19sZTE2IGlfeGF0dHJfaW5saW5lX3NpemU7CiAJX19sZTMyIGlfY2x1c3RlcnM7CQkvKiBDbHVzdGVyIGNvdW50ICovCiAJX19sZTMyIGlfdWlkOwkJCS8qIE93bmVyIFVJRCAqLwogCV9fbGUzMiBpX2dpZDsJCQkvKiBPd25pbmcgR0lEICovCkBAIC02NDAsMTEgKzY1NSwxMiBAQAogCV9fbGUzMiBpX2F0aW1lX25zZWM7CiAJX19sZTMyIGlfY3RpbWVfbnNlYzsKIAlfX2xlMzIgaV9tdGltZV9uc2VjOwotCV9fbGUzMiBpX2F0dHI7CisvKjcwKi8JX19sZTMyIGlfYXR0cjsKIAlfX2xlMTYgaV9vcnBoYW5lZF9zbG90OwkJLyogT25seSB2YWxpZCB3aGVuIE9DRlMyX09SUEhBTkVEX0ZMCiAJCQkJCSAgIHdhcyBzZXQgaW4gaV9mbGFncyAqLwogCV9fbGUxNiBpX2R5bl9mZWF0dXJlczsKLS8qNzAqLwlfX2xlNjQgaV9yZXNlcnZlZDJbOF07CisJX19sZTY0IGlfeGF0dHJfbG9jOworLyo4MCovCV9fbGU2NCBpX3Jlc2VydmVkMls3XTsKIC8qQjgqLwl1bmlvbiB7CiAJCV9fbGU2NCBpX3BhZDE7CQkvKiBHZW5lcmljIHdheSB0byByZWZlciB0byB0aGlzCiAJCQkJCSAgIDY0Yml0IHVuaW9uICovCkBAIC03MTUsNiArNzMxLDEzNiBAQAogLyo0MCovCV9fdTggICAgYmdfYml0bWFwWzBdOwogfTsKIAorLyoKKyAqIE9uIGRpc2sgZXh0ZW5kZWQgYXR0cmlidXRlIHN0cnVjdHVyZSBmb3IgT0NGUzIuCisgKi8KKworLyoKKyAqIG9jZnMyX3hhdHRyX2VudHJ5IGluZGljYXRlcyBvbmUgZXh0ZW5kIGF0dHJpYnV0ZS4KKyAqCisgKiBOb3RlIHRoYXQgaXQgY2FuIGJlIHN0b3JlZCBpbiBpbm9kZSwgb25lIGJsb2NrIG9yIG9uZSB4YXR0ciBidWNrZXQuCisgKi8KK3N0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSB7CisJX19sZTMyCXhlX25hbWVfaGFzaDsgICAgLyogaGFzaCB2YWx1ZSBvZiB4YXR0ciBwcmVmaXgrc3VmZml4LiAqLworCV9fbGUxNgl4ZV9uYW1lX29mZnNldDsgIC8qIGJ5dGUgb2Zmc2V0IGZyb20gdGhlIDFzdCBldG5yeSBpbiB0aGUgbG9jYWwKKwkJCQkgICAgbG9jYWwgeGF0dHIgc3RvcmFnZShpbm9kZSwgeGF0dHIgYmxvY2sgb3IKKwkJCQkgICAgeGF0dHIgYnVja2V0KS4gKi8KKwlfX3U4CXhlX25hbWVfbGVuOwkgLyogeGF0dHIgbmFtZSBsZW4sIGRvZXMndCBpbmNsdWRlIHByZWZpeC4gKi8KKwlfX3U4CXhlX3R5cGU7ICAgICAgICAgLyogdGhlIGxvdyA3IGJpdHMgaW5kaWNhdGVzIHRoZSBuYW1lIHByZWZpeCdzCisJCQkJICAqIHR5cGUgYW5kIHRoZSBoaWdoZXN0IDEgYml0cyBpbmRpY2F0ZSB3aGV0aGVyCisJCQkJICAqIHRoZSBFQSBpcyBzdG9yZWQgaW4gdGhlIGxvY2FsIHN0b3JhZ2UuICovCisJX19sZTY0CXhlX3ZhbHVlX3NpemU7CSAvKiByZWFsIHhhdHRyIHZhbHVlIGxlbmd0aC4gKi8KK307CisKKy8qCisgKiBPbiBkaXNrIHN0cnVjdHVyZSBmb3IgeGF0dHIgaGVhZGVyLgorICoKKyAqIE9uZSBvY2ZzMl94YXR0cl9oZWFkZXIgZGVzY3JpYmVzIGhvdyBtYW55IG9jZnMyX3hhdHRyX2VudHJ5IHJlY29yZHMgaW4KKyAqIHRoZSBsb2NhbCB4YXR0ciBzdG9yYWdlLgorICovCitzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyIHsKKwlfX2xlMTYJeGhfY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250YWlucyB0aGUgY291bnQgb2YgaG93CisJCQkJCQkgICBtYW55IHJlY29yZHMgYXJlIGluIHRoZQorCQkJCQkJICAgbG9jYWwgeGF0dHIgc3RvcmFnZS4gKi8KKwlfX2xlMTYJeGhfZnJlZV9zdGFydDsgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IG9mZnNldCBmb3Igc3RvcmluZworCQkJCQkJICAgeGF0dHIuICovCisJX19sZTE2CXhoX25hbWVfdmFsdWVfbGVuOyAgICAgICAgICAgICAgLyogdG90YWwgbGVuZ3RoIG9mIG5hbWUvdmFsdWUKKwkJCQkJCSAgIGxlbmd0aCBpbiB0aGlzIGJ1Y2tldC4gKi8KKwlfX2xlMTYJeGhfbnVtX2J1Y2tldHM7ICAgICAgICAgICAgICAgICAvKiBidWNrZXQgbnVtcyBpbiBvbmUgZXh0ZW50CisJCQkJCQkgICByZWNvcmQsIG9ubHkgdmFsaWQgaW4gdGhlCisJCQkJCQkgICBmaXJzdCBidWNrZXQuICovCisJX19sZTY0ICB4aF9jc3VtOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSB4aF9lbnRyaWVzWzBdOyAvKiB4YXR0ciBlbnRyeSBsaXN0LiAqLworfTsKKworLyoKKyAqIE9uIGRpc2sgc3RydWN0dXJlIGZvciB4YXR0ciB2YWx1ZSByb290LgorICoKKyAqIEl0IGlzIHVzZWQgd2hlbiBvbmUgZXh0ZW5kZWQgYXR0cmlidXRlJ3Mgc2l6ZSBpcyBsYXJnZXIsIGFuZCB3ZSB3aWxsIHNhdmUgaXQKKyAqIGluIGFuIG91dHNpZGUgY2x1c3Rlci4gSXQgd2lsbCBzdG9yZWQgaW4gYSBiLXRyZWUgbGlrZSBmaWxlIGNvbnRlbnQuCisgKi8KK3N0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290IHsKKy8qMDAqLwlfX2xlMzIJeHJfY2x1c3RlcnM7ICAgICAgICAgICAgICAvKiBjbHVzdGVycyBjb3ZlcmVkIGJ5IHhhdHRyIHZhbHVlLiAqLworCV9fbGUzMgl4cl9yZXNlcnZlZDA7CisJX19sZTY0CXhyX2xhc3RfZWJfYmxrOyAgICAgICAgICAgLyogUG9pbnRlciB0byBsYXN0IGV4dGVudCBibG9jayAqLworLyoxMCovCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCB4cl9saXN0OyAvKiBFeHRlbnQgcmVjb3JkIGxpc3QgKi8KK307CisKKy8qCisgKiBPbiBkaXNrIHN0cnVjdHVyZSBmb3IgeGF0dHIgdHJlZSByb290LgorICoKKyAqIEl0IGlzIHVzZWQgd2hlbiB0aGVyZSBhcmUgdG9vIG1hbnkgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3Igb25lIGZpbGUuIFRoZXNlCisgKiBhdHRyaWJ1dGVzIHdpbGwgYmUgb3JnYW5pemVkIGFuZCBzdG9yZWQgaW4gYW4gaW5kZXhlZC1idHJlZS4KKyAqLworc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCB7CisvKjAwKi8JX19sZTMyCXh0X2NsdXN0ZXJzOyAgICAgICAgICAgICAgLyogY2x1c3RlcnMgY292ZXJlZCBieSB4YXR0ci4gKi8KKwlfX2xlMzIJeHRfcmVzZXJ2ZWQwOworCV9fbGU2NAl4dF9sYXN0X2ViX2JsazsgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbGFzdCBleHRlbnQgYmxvY2sgKi8KKy8qMTAqLwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgeHRfbGlzdDsgLyogRXh0ZW50IHJlY29yZCBsaXN0ICovCit9OworCisjZGVmaW5lIE9DRlMyX1hBVFRSX0lOREVYRUQJMHgxCisjZGVmaW5lIE9DRlMyX0hBU0hfU0hJRlQJNQorI2RlZmluZSBPQ0ZTMl9YQVRUUl9ST1VORAkzCisjZGVmaW5lIE9DRlMyX1hBVFRSX1NJWkUoc2l6ZSkJKCgoc2l6ZSkgKyBPQ0ZTMl9YQVRUUl9ST1VORCkgJiBcCisJCQkJfihPQ0ZTMl9YQVRUUl9ST1VORCkpCisKKyNkZWZpbmUgT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUJCQk0MDk2CisjZGVmaW5lIE9DRlMyX1hBVFRSX01BWF9CTE9DS1NfUEVSX0JVQ0tFVCAJKE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFIFwKKwkJCQkJCSAvIE9DRlMyX01JTl9CTE9DS1NJWkUpCisKKy8qCisgKiBPbiBkaXNrIHN0cnVjdHVyZSBmb3IgeGF0dHIgYmxvY2suCisgKi8KK3N0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayB7CisvKjAwKi8JX191OAl4Yl9zaWduYXR1cmVbOF07ICAgICAvKiBTaWduYXR1cmUgZm9yIHZlcmlmaWNhdGlvbiAqLworCV9fbGUxNgl4Yl9zdWJhbGxvY19zbG90OyAgICAvKiBTbG90IHN1YmFsbG9jYXRvciB0aGlzCisJCQkJCWJsb2NrIGJlbG9uZ3MgdG8uICovCisJX19sZTE2CXhiX3N1YmFsbG9jX2JpdDsgICAgIC8qIEJpdCBvZmZzZXQgaW4gc3ViYWxsb2NhdG9yCisJCQkJCWJsb2NrIGdyb3VwICovCisJX19sZTMyCXhiX2ZzX2dlbmVyYXRpb247ICAgIC8qIE11c3QgbWF0Y2ggc3VwZXIgYmxvY2sgKi8KKy8qMTAqLwlfX2xlNjQJeGJfYmxrbm87ICAgICAgICAgICAgLyogT2Zmc2V0IG9uIGRpc2ssIGluIGJsb2NrcyAqLworCV9fbGU2NAl4Yl9jc3VtOworLyoyMCovCV9fbGUxNgl4Yl9mbGFnczsgICAgICAgICAgICAvKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGJsb2NrIGNvbnRhaW5zCisJCQkJCXJlYWwgeGF0dHIgb3IgYSB4YXR0ciB0cmVlLiAqLworCV9fbGUxNgl4Yl9yZXNlcnZlZDA7CisJX19sZTMyICB4Yl9yZXNlcnZlZDE7CisJX19sZTY0CXhiX3Jlc2VydmVkMjsKKy8qMzAqLwl1bmlvbiB7CisJCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgeGJfaGVhZGVyOyAvKiB4YXR0ciBoZWFkZXIgaWYgdGhpcworCQkJCQkJCWJsb2NrIGNvbnRhaW5zIHhhdHRyICovCisJCXN0cnVjdCBvY2ZzMl94YXR0cl90cmVlX3Jvb3QgeGJfcm9vdDsvKiB4YXR0ciB0cmVlIHJvb3QgaWYgdGhpcworCQkJCQkJCWJsb2NrIGNvdGFpbnMgeGF0dHIKKwkJCQkJCQl0cmVlLiAqLworCX0geGJfYXR0cnM7Cit9OworCisjZGVmaW5lIE9DRlMyX1hBVFRSX0VOVFJZX0xPQ0FMCQkweDgwCisjZGVmaW5lIE9DRlMyX1hBVFRSX1RZUEVfTUFTSwkJMHg3Rgorc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX3hhdHRyX3NldF9sb2NhbChzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlLAorCQkJCQkgaW50IGxvY2FsKQoreworCWlmIChsb2NhbCkKKwkJeGUtPnhlX3R5cGUgfD0gT0NGUzJfWEFUVFJfRU5UUllfTE9DQUw7CisJZWxzZQorCQl4ZS0+eGVfdHlwZSAmPSB+T0NGUzJfWEFUVFJfRU5UUllfTE9DQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3hhdHRyX2lzX2xvY2FsKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpCit7CisJcmV0dXJuIHhlLT54ZV90eXBlICYgT0NGUzJfWEFUVFJfRU5UUllfTE9DQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl94YXR0cl9zZXRfdHlwZShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlLCBpbnQgdHlwZSkKK3sKKwl4ZS0+eGVfdHlwZSB8PSB0eXBlICYgT0NGUzJfWEFUVFJfVFlQRV9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl94YXR0cl9nZXRfdHlwZShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKQoreworCXJldHVybiB4ZS0+eGVfdHlwZSAmIE9DRlMyX1hBVFRSX1RZUEVfTUFTSzsKK30KKwogI2lmZGVmIF9fS0VSTkVMX18KIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2Zhc3Rfc3ltbGlua19jaGFycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewpAQCAtNzI4LDYgKzg3NCwyMCBAQAogCQlvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZGlub2RlLCBpZDIuaV9kYXRhLmlkX2RhdGEpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9tYXhfaW5saW5lX2RhdGFfd2l0aF94YXR0cihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQkJICAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkpCit7CisJdW5zaWduZWQgaW50IHhhdHRyc2l6ZSA9IGxlMTZfdG9fY3B1KGRpLT5pX3hhdHRyX2lubGluZV9zaXplKTsKKworCWlmIChsZTE2X3RvX2NwdShkaS0+aV9keW5fZmVhdHVyZXMpICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKQorCQlyZXR1cm4gc2ItPnNfYmxvY2tzaXplIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX2RhdGEuaWRfZGF0YSkgLQorCQkJeGF0dHJzaXplOworCWVsc2UKKwkJcmV0dXJuIHNiLT5zX2Jsb2Nrc2l6ZSAtCisJCQlvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZGlub2RlLCBpZDIuaV9kYXRhLmlkX2RhdGEpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9leHRlbnRfcmVjc19wZXJfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlpbnQgc2l6ZTsKQEAgLTczOCw2ICs4OTgsMjQgQEAKIAlyZXR1cm4gc2l6ZSAvIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2V4dGVudF9yZWNzX3Blcl9pbm9kZV93aXRoX3hhdHRyKAorCQkJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkJCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpKQoreworCWludCBzaXplOworCXVuc2lnbmVkIGludCB4YXR0cnNpemUgPSBsZTE2X3RvX2NwdShkaS0+aV94YXR0cl9pbmxpbmVfc2l6ZSk7CisKKwlpZiAobGUxNl90b19jcHUoZGktPmlfZHluX2ZlYXR1cmVzKSAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkKKwkJc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZSAtCisJCQlvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZGlub2RlLCBpZDIuaV9saXN0LmxfcmVjcykgLQorCQkJeGF0dHJzaXplOworCWVsc2UKKwkJc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZSAtCisJCQlvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZGlub2RlLCBpZDIuaV9saXN0LmxfcmVjcyk7CisKKwlyZXR1cm4gc2l6ZSAvIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NoYWluX3JlY3NfcGVyX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJaW50IHNpemU7CkBAIC04MDEsNiArOTc5LDE3IEBACiAJcmV0dXJuIDA7CiAKIH0KKworc3RhdGljIGlubGluZSB1MTYgb2NmczJfeGF0dHJfcmVjc19wZXJfeGIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlpbnQgc2l6ZTsKKworCXNpemUgPSBzYi0+c19ibG9ja3NpemUgLQorCQlvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2ssCisJCQkgeGJfYXR0cnMueGJfcm9vdC54dF9saXN0LmxfcmVjcyk7CisKKwlyZXR1cm4gc2l6ZSAvIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyk7Cit9CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgb2NmczJfZmFzdF9zeW1saW5rX2NoYXJzKGludCBibG9ja3NpemUpCiB7CkBAIC04ODQsNiArMTA3MywxNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3hhdHRyX3JlY3NfcGVyX3hiKGludCBibG9ja3NpemUpCit7CisJaW50IHNpemU7CisKKwlzaXplID0gYmxvY2tzaXplIC0KKwkJb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrLAorCQkJIHhiX2F0dHJzLnhiX3Jvb3QueHRfbGlzdC5sX3JlY3MpOworCisJcmV0dXJuIHNpemUgLyBzaXplb2Yoc3RydWN0IG9jZnMyX2V4dGVudF9yZWMpOworfQogI2VuZGlmICAvKiBfX0tFUk5FTF9fICovCiAKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfamJkX2NvbXBhdC5oIGIvZnMvb2NmczIvb2NmczJfamJkX2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MWM3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9qYmRfY29tcGF0LmgKQEAgLTAsMCArMSw4MiBAQAorLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4OyAtKi0KKyAqIHZpbTogbm9leHBhbmR0YWIgc3c9OCB0cz04IHN0cz0wOgorICoKKyAqIG9jZnMyX2piZF9jb21wYXQuaAorICoKKyAqIENvbXBhdGliaWxpdHkgZGVmaW5lcyBmb3IgSkJELgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE9DRlMyX0pCRF9DT01QQVRfSAorI2RlZmluZSBPQ0ZTMl9KQkRfQ09NUEFUX0gKKworI2lmbmRlZiBDT05GSUdfT0NGUzJfQ09NUEFUX0pCRAorIyBlcnJvciBTaG91bGQgbm90IGhhdmUgYmVlbiBpbmNsdWRlZAorI2VuZGlmCisKK3N0cnVjdCBqYmQyX2lub2RlIHsKKwl1bnNpZ25lZCBpbnQgZHVtbXk7Cit9OworCisjZGVmaW5lIEpCRDJfQkFSUklFUgkJCUpGU19CQVJSSUVSCisjZGVmaW5lIEpCRDJfREVGQVVMVF9NQVhfQ09NTUlUX0FHRQlKQkRfREVGQVVMVF9NQVhfQ09NTUlUX0FHRQorCisjZGVmaW5lIGpiZDJfam91cm5hbF9hY2tfZXJyCQkJam91cm5hbF9hY2tfZXJyCisjZGVmaW5lIGpiZDJfam91cm5hbF9jbGVhcl9lcnIJCQlqb3VybmFsX2NsZWFyX2VycgorI2RlZmluZSBqYmQyX2pvdXJuYWxfZGVzdHJveQkJCWpvdXJuYWxfZGVzdHJveQorI2RlZmluZSBqYmQyX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEJCWpvdXJuYWxfZGlydHlfbWV0YWRhdGEKKyNkZWZpbmUgamJkMl9qb3VybmFsX2Vycm5vCQkJam91cm5hbF9lcnJubworI2RlZmluZSBqYmQyX2pvdXJuYWxfZXh0ZW5kCQkJam91cm5hbF9leHRlbmQKKyNkZWZpbmUgamJkMl9qb3VybmFsX2ZsdXNoCQkJam91cm5hbF9mbHVzaAorI2RlZmluZSBqYmQyX2pvdXJuYWxfZm9yY2VfY29tbWl0CQlqb3VybmFsX2ZvcmNlX2NvbW1pdAorI2RlZmluZSBqYmQyX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcwkJam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzCisjZGVmaW5lIGpiZDJfam91cm5hbF9nZXRfdW5kb19hY2Nlc3MJCWpvdXJuYWxfZ2V0X3VuZG9fYWNjZXNzCisjZGVmaW5lIGpiZDJfam91cm5hbF9pbml0X2lub2RlCQkJam91cm5hbF9pbml0X2lub2RlCisjZGVmaW5lIGpiZDJfam91cm5hbF9pbnZhbGlkYXRlcGFnZQkJam91cm5hbF9pbnZhbGlkYXRlcGFnZQorI2RlZmluZSBqYmQyX2pvdXJuYWxfbG9hZAkJCWpvdXJuYWxfbG9hZAorI2RlZmluZSBqYmQyX2pvdXJuYWxfbG9ja191cGRhdGVzCQlqb3VybmFsX2xvY2tfdXBkYXRlcworI2RlZmluZSBqYmQyX2pvdXJuYWxfcmVzdGFydAkJCWpvdXJuYWxfcmVzdGFydAorI2RlZmluZSBqYmQyX2pvdXJuYWxfc3RhcnQJCQlqb3VybmFsX3N0YXJ0CisjZGVmaW5lIGpiZDJfam91cm5hbF9zdGFydF9jb21taXQJCWpvdXJuYWxfc3RhcnRfY29tbWl0CisjZGVmaW5lIGpiZDJfam91cm5hbF9zdG9wCQkJam91cm5hbF9zdG9wCisjZGVmaW5lIGpiZDJfam91cm5hbF90cnlfdG9fZnJlZV9idWZmZXJzCWpvdXJuYWxfdHJ5X3RvX2ZyZWVfYnVmZmVycworI2RlZmluZSBqYmQyX2pvdXJuYWxfdW5sb2NrX3VwZGF0ZXMJCWpvdXJuYWxfdW5sb2NrX3VwZGF0ZXMKKyNkZWZpbmUgamJkMl9qb3VybmFsX3dpcGUJCQlqb3VybmFsX3dpcGUKKyNkZWZpbmUgamJkMl9sb2dfd2FpdF9jb21taXQJCQlsb2dfd2FpdF9jb21taXQKKworc3RhdGljIGlubGluZSBpbnQgamJkMl9qb3VybmFsX2ZpbGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICBzdHJ1Y3QgamJkMl9pbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGpiZDJfam91cm5hbF9iZWdpbl9vcmRlcmVkX3RydW5jYXRlKHN0cnVjdCBqYmQyX2lub2RlICppbm9kZSwKKwkJCQkJCSAgICAgIGxvZmZfdCBuZXdfc2l6ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGpiZDJfam91cm5hbF9pbml0X2piZF9pbm9kZShzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlLAorCQkJCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBqYmQyX2pvdXJuYWxfcmVsZWFzZV9qYmRfaW5vZGUoam91cm5hbF90ICpqb3VybmFsLAorCQkJCQkJICBzdHJ1Y3QgamJkMl9pbm9kZSAqamlub2RlKQoreworCXJldHVybjsKK30KKworCisjZW5kaWYgIC8qIE9DRlMyX0pCRF9DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVzaXplLmMgYi9mcy9vY2ZzMi9yZXNpemUuYwppbmRleCA4MTY2OTY4Li5mZmQ0OGRiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9yZXNpemUuYworKysgYi9mcy9vY2ZzMi9yZXNpemUuYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJCWlmIChjbHVzdGVyID4gY2x1c3RlcnMpCiAJCQlicmVhazsKIAotCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgYmxrbm8sICZiYWNrdXAsIDAsIE5VTEwpOworCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2Nrc19zeW5jKG9zYiwgYmxrbm8sIDEsICZiYWNrdXApOwogCQlpZiAocmV0IDwgMCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJYnJlYWs7CkBAIC0yMzYsOCArMjM2LDggQEAKIAkgKiB1cGRhdGUgdGhlIHN1cGVyYmxvY2sgbGFzdC4KIAkgKiBJdCBkb2Vzbid0IG1hdHRlciBpZiB0aGUgd3JpdGUgZmFpbGVkLgogCSAqLwotCXJldCA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBPQ0ZTMl9TVVBFUl9CTE9DS19CTEtOTywKLQkJCSAgICAgICAmc3VwZXJfYmgsIDAsIE5VTEwpOworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzX3N5bmMob3NiLCBPQ0ZTMl9TVVBFUl9CTE9DS19CTEtOTywgMSwKKwkJCQkgICAgICZzdXBlcl9iaCk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTMzMiw4ICszMzIsNyBAQAogCWxnZF9ibGtubyA9IG9jZnMyX3doaWNoX2NsdXN0ZXJfZ3JvdXAobWFpbl9ibV9pbm9kZSwKIAkJCQkJICAgICAgZmlyc3RfbmV3X2NsdXN0ZXIgLSAxKTsKIAotCXJldCA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBsZ2RfYmxrbm8sICZncm91cF9iaCwgT0NGUzJfQkhfQ0FDSEVELAotCQkJICAgICAgIG1haW5fYm1faW5vZGUpOworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2sobWFpbl9ibV9pbm9kZSwgbGdkX2Jsa25vLCAmZ3JvdXBfYmgpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtNTQwLDcgKzUzOSw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgaW5wdXQtPmdyb3VwLCAmZ3JvdXBfYmgsIDAsIE5VTEwpOworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzX3N5bmMob3NiLCBpbnB1dC0+Z3JvdXAsIDEsICZncm91cF9iaCk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZyhNTF9FUlJPUiwgIkNhbid0IHJlYWQgdGhlIGdyb3VwIGRlc2NyaXB0b3IgIyAlbGx1ICIKIAkJICAgICAiZnJvbSB0aGUgZGV2aWNlLiIsICh1bnNpZ25lZCBsb25nIGxvbmcpaW5wdXQtPmdyb3VwKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3Nsb3RfbWFwLmMgYi9mcy9vY2ZzMi9zbG90X21hcC5jCmluZGV4IGJiNWZmODkuLmJkZGEyZDggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3Nsb3RfbWFwLmMKKysrIGIvZnMvb2NmczIvc2xvdF9tYXAuYwpAQCAtMTUwLDggKzE1MCw4IEBACiAJICogYmUgIU5VTEwuICBUaHVzLCBvY2ZzMl9yZWFkX2Jsb2NrcygpIHdpbGwgaWdub3JlIGJsb2NrbnIuICBJZgogCSAqIHRoaXMgaXMgbm90IHRydWUsIHRoZSByZWFkIG9mIC0xIChVSU5UNjRfTUFYKSB3aWxsIGZhaWwuCiAJICovCi0JcmV0ID0gb2NmczJfcmVhZF9ibG9ja3Mob3NiLCAtMSwgc2ktPnNpX2Jsb2Nrcywgc2ktPnNpX2JoLCAwLAotCQkJCXNpLT5zaV9pbm9kZSk7CisJcmV0ID0gb2NmczJfcmVhZF9ibG9ja3Moc2ktPnNpX2lub2RlLCAtMSwgc2ktPnNpX2Jsb2Nrcywgc2ktPnNpX2JoLAorCQkJCU9DRlMyX0JIX0lHTk9SRV9DQUNIRSk7CiAJaWYgKHJldCA9PSAwKSB7CiAJCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CiAJCW9jZnMyX3VwZGF0ZV9zbG90X2luZm8oc2kpOwpAQCAtNDA0LDcgKzQwNCw4IEBACiAJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibGtubyk7CiAKIAkJYmggPSBOVUxMOyAgLyogQWNxdWlyZSBhIGZyZXNoIGJoICovCi0JCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBibGtubywgJmJoLCAwLCBzaS0+c2lfaW5vZGUpOworCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrcyhzaS0+c2lfaW5vZGUsIGJsa25vLCAxLCAmYmgsCisJCQkJCSAgIE9DRlMyX0JIX0lHTk9SRV9DQUNIRSk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWw7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdGFja191c2VyLmMgYi9mcy9vY2ZzMi9zdGFja191c2VyLmMKaW5kZXggMzUzZmMzNS4uZmFlYzJkOCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3RhY2tfdXNlci5jCisrKyBiL2ZzL29jZnMyL3N0YWNrX3VzZXIuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIm9jZnMyLmgiICAvKiBGb3Igc3RydWN0IG9jZnMyX2xvY2tfcmVzICovCiAjaW5jbHVkZSAic3RhY2tnbHVlLmgiCiAKKyNpbmNsdWRlIDxsaW51eC9kbG1fcGxvY2suaD4KIAogLyoKICAqIFRoZSBjb250cm9sIHByb3RvY29sIHN0YXJ0cyB3aXRoIGEgaGFuZHNoYWtlLiAgVW50aWwgdGhlIGhhbmRzaGFrZQpAQCAtNzQ2LDYgKzc0NywzNyBAQAogewogfQogCitzdGF0aWMgaW50IHVzZXJfcGxvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKKwkJICAgICAgdTY0IGlubywKKwkJICAgICAgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgIGludCBjbWQsCisJCSAgICAgIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQoreworCS8qCisJICogVGhpcyBtb3JlIG9yIGxlc3MganVzdCBkZW11eGVzIHRoZSBwbG9jayByZXF1ZXN0IGludG8gYW55CisJICogb25lIG9mIHRocmVlIGRsbSBjYWxscy4KKwkgKgorCSAqIEludGVybmFsbHksIGZzL2RsbSB3aWxsIHBhc3MgdGhlc2UgdG8gYSBtaXNjIGRldmljZSwgd2hpY2gKKwkgKiBhIHVzZXJzcGFjZSBkYWVtb24gd2lsbCByZWFkIGFuZCB3cml0ZSB0by4KKwkgKgorCSAqIEZvciBub3csIGNhbmNlbCByZXF1ZXN0cyAod2hpY2ggaGFwcGVuIGludGVybmFsbHkgb25seSksCisJICogYXJlIHR1cm5lZCBpbnRvIHVubG9ja3MuIE1vc3Qgb2YgdGhpcyBmdW5jdGlvbiB0YWtlbiBmcm9tCisJICogZ2ZzMl9sb2NrLgorCSAqLworCisJaWYgKGNtZCA9PSBGX0NBTkNFTExLKSB7CisJCWNtZCA9IEZfU0VUTEs7CisJCWZsLT5mbF90eXBlID0gRl9VTkxDSzsKKwl9CisKKwlpZiAoSVNfR0VUTEsoY21kKSkKKwkJcmV0dXJuIGRsbV9wb3NpeF9nZXQoY29ubi0+Y2NfbG9ja3NwYWNlLCBpbm8sIGZpbGUsIGZsKTsKKwllbHNlIGlmIChmbC0+ZmxfdHlwZSA9PSBGX1VOTENLKQorCQlyZXR1cm4gZGxtX3Bvc2l4X3VubG9jayhjb25uLT5jY19sb2Nrc3BhY2UsIGlubywgZmlsZSwgZmwpOworCWVsc2UKKwkJcmV0dXJuIGRsbV9wb3NpeF9sb2NrKGNvbm4tPmNjX2xvY2tzcGFjZSwgaW5vLCBmaWxlLCBjbWQsIGZsKTsKK30KKwogLyoKICAqIENvbXBhcmUgYSByZXF1ZXN0ZWQgbG9ja2luZyBwcm90b2NvbCB2ZXJzaW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgb25lLgogICoKQEAgLTgzOSw2ICs4NzEsNyBAQAogCS5kbG1fdW5sb2NrCT0gdXNlcl9kbG1fdW5sb2NrLAogCS5sb2NrX3N0YXR1cwk9IHVzZXJfZGxtX2xvY2tfc3RhdHVzLAogCS5sb2NrX2x2Ygk9IHVzZXJfZGxtX2x2YiwKKwkucGxvY2sJCT0gdXNlcl9wbG9jaywKIAkuZHVtcF9sa3NiCT0gdXNlcl9kbG1fZHVtcF9sa3NiLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3RhY2tnbHVlLmMgYi9mcy9vY2ZzMi9zdGFja2dsdWUuYwppbmRleCAwN2YzNDhiLi42OGI2NjhiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdGFja2dsdWUuYworKysgYi9mcy9vY2ZzMi9zdGFja2dsdWUuYwpAQCAtMjg4LDYgKzI4OCwyNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwob2NmczJfZGxtX2R1bXBfbGtzYik7CiAKK2ludCBvY2ZzMl9zdGFja19zdXBwb3J0c19wbG9ja3Modm9pZCkKK3sKKwlyZXR1cm4gYWN0aXZlX3N0YWNrICYmIGFjdGl2ZV9zdGFjay0+c3Bfb3BzLT5wbG9jazsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX3N0YWNrX3N1cHBvcnRzX3Bsb2Nrcyk7CisKKy8qCisgKiBvY2ZzMl9wbG9jaygpIGNhbiBvbmx5IGJlIHNhZmVseSBjYWxsZWQgaWYKKyAqIG9jZnMyX3N0YWNrX3N1cHBvcnRzX3Bsb2NrcygpIHJldHVybmVkIHRydWUKKyAqLworaW50IG9jZnMyX3Bsb2NrKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sIHU2NCBpbm8sCisJCXN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKK3sKKwlXQVJOX09OX09OQ0UoYWN0aXZlX3N0YWNrLT5zcF9vcHMtPnBsb2NrID09IE5VTEwpOworCWlmIChhY3RpdmVfc3RhY2stPnNwX29wcy0+cGxvY2spCisJCXJldHVybiBhY3RpdmVfc3RhY2stPnNwX29wcy0+cGxvY2soY29ubiwgaW5vLCBmaWxlLCBjbWQsIGZsKTsKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvY2ZzMl9wbG9jayk7CisKIGludCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3QoY29uc3QgY2hhciAqc3RhY2tfbmFtZSwKIAkJCSAgY29uc3QgY2hhciAqZ3JvdXAsCiAJCQkgIGludCBncm91cGxlbiwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N0YWNrZ2x1ZS5oIGIvZnMvb2NmczIvc3RhY2tnbHVlLmgKaW5kZXggZGI1NjI4MS4uYzU3MWFmMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3RhY2tnbHVlLmgKKysrIGIvZnMvb2NmczIvc3RhY2tnbHVlLmgKQEAgLTI4LDYgKzI4LDEwIEBACiAjaW5jbHVkZSAiZGxtL2RsbWFwaS5oIgogI2luY2x1ZGUgPGxpbnV4L2RsbS5oPgogCisvKiBOZWVkZWQgZm9yIHBsb2NrLXJlbGF0ZWQgcHJvdG90eXBlcyAqLworc3RydWN0IGZpbGU7CitzdHJ1Y3QgZmlsZV9sb2NrOworCiAvKgogICogZGxtY29uc3RhbnRzLmggZG9lcyBub3QgaGF2ZSBhIExPQ0FMIGZsYWcuICBXZSBob3BlIHRvIHJlbW92ZSBpdAogICogc29tZSBkYXksIGJ1dCByaWdodCBub3cgd2UgbmVlZCBpdC4gIExldCdzIGZha2UgaXQuICBUaGlzIHZhbHVlIGlzIGxhcmdlcgpAQCAtMTg3LDYgKzE5MSwxNyBAQAogCXZvaWQgKigqbG9ja19sdmIpKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKIAogCS8qCisJICogQ2x1c3Rlci1hd2FyZSBwb3NpeCBsb2NrcworCSAqCisJICogVGhpcyBpcyBOVUxMIGZvciBzdGFja3Mgd2hpY2ggZG8gbm90IHN1cHBvcnQgcG9zaXggbG9ja3MuCisJICovCisJaW50ICgqcGxvY2spKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sCisJCSAgICAgdTY0IGlubywKKwkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICBpbnQgY21kLAorCQkgICAgIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKKworCS8qCiAJICogVGhpcyBpcyBhbiBvcHRvaW5hbCBkZWJ1Z2dpbmcgaG9vay4gIElmIHByb3ZpZGVkLCB0aGUKIAkgKiBzdGFjayBjYW4gZHVtcCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBsb2NrLgogCSAqLwpAQCAtMjQwLDYgKzI1NSwxMCBAQAogdm9pZCAqb2NmczJfZGxtX2x2Yih1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7CiB2b2lkIG9jZnMyX2RsbV9kdW1wX2xrc2IodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpOwogCitpbnQgb2NmczJfc3RhY2tfc3VwcG9ydHNfcGxvY2tzKHZvaWQpOworaW50IG9jZnMyX3Bsb2NrKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sIHU2NCBpbm8sCisJCXN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7CisKIHZvaWQgb2NmczJfc3RhY2tfZ2x1ZV9zZXRfbG9ja2luZ19wcm90b2NvbChzdHJ1Y3Qgb2NmczJfbG9ja2luZ19wcm90b2NvbCAqcHJvdG8pOwogCiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1YmFsbG9jLmMgYi9mcy9vY2ZzMi9zdWJhbGxvYy5jCmluZGV4IGQyZDI3OGYuLmM1ZmYxOGIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1YmFsbG9jLmMKKysrIGIvZnMvb2NmczIvc3ViYWxsb2MuYwpAQCAtNjIsMTUgKzYyLDE4IEBACiAJCQkJICBzdHJ1Y3Qgb2NmczJfY2hhaW5fbGlzdCAqY2wpOwogc3RhdGljIGludCBvY2ZzMl9ibG9ja19ncm91cF9hbGxvYyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkgICBzdHJ1Y3QgaW5vZGUgKmFsbG9jX2lub2RlLAotCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOworCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCQkJICAgdTY0IG1heF9ibG9jayk7CiAKIHN0YXRpYyBpbnQgb2NmczJfY2x1c3Rlcl9ncm91cF9zZWFyY2goc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmdyb3VwX2JoLAogCQkJCSAgICAgIHUzMiBiaXRzX3dhbnRlZCwgdTMyIG1pbl9iaXRzLAorCQkJCSAgICAgIHU2NCBtYXhfYmxvY2ssCiAJCQkJICAgICAgdTE2ICpiaXRfb2ZmLCB1MTYgKmJpdHNfZm91bmQpOwogc3RhdGljIGludCBvY2ZzMl9ibG9ja19ncm91cF9zZWFyY2goc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpncm91cF9iaCwKIAkJCQkgICAgdTMyIGJpdHNfd2FudGVkLCB1MzIgbWluX2JpdHMsCisJCQkJICAgIHU2NCBtYXhfYmxvY2ssCiAJCQkJICAgIHUxNiAqYml0X29mZiwgdTE2ICpiaXRzX2ZvdW5kKTsKIHN0YXRpYyBpbnQgb2NmczJfY2xhaW1fc3ViYWxsb2NfYml0cyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYywKQEAgLTExMCw4ICsxMTMsMTEgQEAKIAkJCQkJCXU2NCBkYXRhX2Jsa25vLAogCQkJCQkJdTY0ICpiZ19ibGtubywKIAkJCQkJCXUxNiAqYmdfYml0X29mZik7CitzdGF0aWMgaW50IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnNfd2l0aF9saW1pdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJICAgICB1MzIgYml0c193YW50ZWQsIHU2NCBtYXhfYmxvY2ssCisJCQkJCSAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiphYyk7CiAKLXN0YXRpYyB2b2lkIG9jZnMyX2ZyZWVfYWNfcmVzb3VyY2Uoc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKQordm9pZCBvY2ZzMl9mcmVlX2FjX3Jlc291cmNlKHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gYWMtPmFjX2lub2RlOwogCkBAIC0xMjQsMTAgKzEzMCw4IEBACiAJCWlwdXQoaW5vZGUpOwogCQlhYy0+YWNfaW5vZGUgPSBOVUxMOwogCX0KLQlpZiAoYWMtPmFjX2JoKSB7Ci0JCWJyZWxzZShhYy0+YWNfYmgpOwotCQlhYy0+YWNfYmggPSBOVUxMOwotCX0KKwlicmVsc2UoYWMtPmFjX2JoKTsKKwlhYy0+YWNfYmggPSBOVUxMOwogfQogCiB2b2lkIG9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMpCkBAIC0yNzYsNyArMjgwLDggQEAKICAqLwogc3RhdGljIGludCBvY2ZzMl9ibG9ja19ncm91cF9hbGxvYyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkgICBzdHJ1Y3QgaW5vZGUgKmFsbG9jX2lub2RlLAotCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCQkgICB1NjQgbWF4X2Jsb2NrKQogewogCWludCBzdGF0dXMsIGNyZWRpdHM7CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBiaC0+Yl9kYXRhOwpAQCAtMjk0LDkgKzI5OSw5IEBACiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKIAljbCA9ICZmZS0+aWQyLmlfY2hhaW47Ci0Jc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9jbHVzdGVycyhvc2IsCi0JCQkJCWxlMTZfdG9fY3B1KGNsLT5jbF9jcGcpLAotCQkJCQkmYWMpOworCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnNfd2l0aF9saW1pdChvc2IsCisJCQkJCQkgICBsZTE2X3RvX2NwdShjbC0+Y2xfY3BnKSwKKwkJCQkJCSAgIG1heF9ibG9jaywgJmFjKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0zOTQsOCArMzk5LDcgQEAKIAlpZiAoYWMpCiAJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChhYyk7CiAKLQlpZiAoYmdfYmgpCi0JCWJyZWxzZShiZ19iaCk7CisJYnJlbHNlKGJnX2JoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CkBAIC00NjksNyArNDczLDggQEAKIAkJCWdvdG8gYmFpbDsKIAkJfQogCi0JCXN0YXR1cyA9IG9jZnMyX2Jsb2NrX2dyb3VwX2FsbG9jKG9zYiwgYWxsb2NfaW5vZGUsIGJoKTsKKwkJc3RhdHVzID0gb2NmczJfYmxvY2tfZ3JvdXBfYWxsb2Mob3NiLCBhbGxvY19pbm9kZSwgYmgsCisJCQkJCQkgYWMtPmFjX21heF9ibG9jayk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCiAJCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNDg2LDE2ICs0OTEsMTUgQEAKIAlnZXRfYmgoYmgpOwogCWFjLT5hY19iaCA9IGJoOwogYmFpbDoKLQlpZiAoYmgpCi0JCWJyZWxzZShiaCk7CisJYnJlbHNlKGJoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSwKLQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmFjKQoraW50IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2NrcyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgICAgICBpbnQgYmxvY2tzLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqYWMpCiB7CiAJaW50IHN0YXR1czsKIAl1MzIgc2xvdDsKQEAgLTUwNyw3ICs1MTEsNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JKCphYyktPmFjX2JpdHNfd2FudGVkID0gb2NmczJfZXh0ZW5kX21ldGFfbmVlZGVkKGZlKTsKKwkoKmFjKS0+YWNfYml0c193YW50ZWQgPSBibG9ja3M7CiAJKCphYyktPmFjX3doaWNoID0gT0NGUzJfQUNfVVNFX01FVEE7CiAJc2xvdCA9IG9zYi0+c2xvdF9udW07CiAJKCphYyktPmFjX2dyb3VwX3NlYXJjaCA9IG9jZnMyX2Jsb2NrX2dyb3VwX3NlYXJjaDsKQEAgLTUzMiw2ICs1MzYsMTUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitpbnQgb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGEoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpyb290X2VsLAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqYWMpCit7CisJcmV0dXJuIG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2Nrcyhvc2IsCisJCQkJCW9jZnMyX2V4dGVuZF9tZXRhX25lZWRlZChyb290X2VsKSwKKwkJCQkJYWMpOworfQorCiBzdGF0aWMgaW50IG9jZnMyX3N0ZWFsX2lub2RlX2Zyb21fb3RoZXJfbm9kZXMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYykKIHsKQEAgLTU4Miw2ICs1OTUsMTQgQEAKIAkoKmFjKS0+YWNfZ3JvdXBfc2VhcmNoID0gb2NmczJfYmxvY2tfZ3JvdXBfc2VhcmNoOwogCiAJLyoKKwkgKiBzdGF0KDIpIGNhbid0IGhhbmRsZSBpX2lubyA+IDMyYml0cywgc28gd2UgdGVsbCB0aGUKKwkgKiBsb3dlciBsZXZlbHMgbm90IHRvIGFsbG9jYXRlIHVzIGEgYmxvY2sgZ3JvdXAgcGFzdCB0aGF0CisJICogbGltaXQuICBUaGUgJ2lub2RlNjQnIG1vdW50IG9wdGlvbiBhdm9pZHMgdGhpcyBiZWhhdmlvci4KKwkgKi8KKwlpZiAoIShvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfSU5PREU2NCkpCisJCSgqYWMpLT5hY19tYXhfYmxvY2sgPSAodTMyKX4wVTsKKworCS8qCiAJICogc2xvdCBpcyBzZXQgd2hlbiB3ZSBzdWNjZXNzZnVsbHkgc3RlYWwgaW5vZGUgZnJvbSBvdGhlciBub2Rlcy4KIAkgKiBJdCBpcyByZXNldCBpbiAzIHBsYWNlczoKIAkgKiAxLiB3aGVuIHdlIGZsdXNoIHRoZSB0cnVuY2F0ZSBsb2cKQEAgLTY2MSw5ICs2ODIsOSBAQAogLyogQ2FsbGVycyBkb24ndCBuZWVkIHRvIGNhcmUgd2hpY2ggYml0bWFwIChsb2NhbCBhbGxvYyBvciBtYWluKSB0bwogICogdXNlIHNvIHdlIGZpZ3VyZSBpdCBvdXQgZm9yIHRoZW0sIGJ1dCB1bmZvcnR1bmF0ZWx5IHRoaXMgY2x1dHRlcnMKICAqIHRoaW5ncyBhIGJpdC4gKi8KLWludCBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgdTMyIGJpdHNfd2FudGVkLAotCQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiphYykKK3N0YXRpYyBpbnQgb2NmczJfcmVzZXJ2ZV9jbHVzdGVyc193aXRoX2xpbWl0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCQkgICAgIHUzMiBiaXRzX3dhbnRlZCwgdTY0IG1heF9ibG9jaywKKwkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmFjKQogewogCWludCBzdGF0dXM7CiAKQEAgLTY3NywyNCArNjk4LDIwIEBACiAJfQogCiAJKCphYyktPmFjX2JpdHNfd2FudGVkID0gYml0c193YW50ZWQ7CisJKCphYyktPmFjX21heF9ibG9jayA9IG1heF9ibG9jazsKIAogCXN0YXR1cyA9IC1FTk9TUEM7CiAJaWYgKG9jZnMyX2FsbG9jX3Nob3VsZF91c2VfbG9jYWwob3NiLCBiaXRzX3dhbnRlZCkpIHsKIAkJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9sb2NhbF9hbGxvY19iaXRzKG9zYiwKIAkJCQkJCQliaXRzX3dhbnRlZCwKIAkJCQkJCQkqYWMpOwotCQlpZiAoKHN0YXR1cyA8IDApICYmIChzdGF0dXMgIT0gLUVOT1NQQykpIHsKKwkJaWYgKHN0YXR1cyA9PSAtRUZCSUcpIHsKKwkJCS8qIFRoZSBsb2NhbCBhbGxvYyB3aW5kb3cgaXMgb3V0c2lkZSBhY19tYXhfYmxvY2suCisJCQkgKiB1c2UgdGhlIG1haW4gYml0bWFwLiAqLworCQkJc3RhdHVzID0gLUVOT1NQQzsKKwkJfSBlbHNlIGlmICgoc3RhdHVzIDwgMCkgJiYgKHN0YXR1cyAhPSAtRU5PU1BDKSkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwotCQl9IGVsc2UgaWYgKHN0YXR1cyA9PSAtRU5PU1BDKSB7Ci0JCQkvKiByZXNlcnZlX2xvY2FsX2JpdHMgd2lsbCByZXR1cm4gZW5vc3BjIHdpdGgKLQkJCSAqIHRoZSBsb2NhbCBhbGxvYyBpbm9kZSBzdGlsbCBsb2NrZWQsIHNvIHdlCi0JCQkgKiBjYW4gY2hhbmdlIHRoaXMgc2FmZWx5IGhlcmUuICovCi0JCQltbG9nKDAsICJEaXNhYmxpbmcgbG9jYWwgYWxsb2NcbiIpOwotCQkJLyogV2Ugc2V0IHRvIE9DRlMyX0xBX0RJU0FCTEVEIHNvIHRoYXQgdW1vdW50Ci0JCQkgKiBjYW4gY2xlYW4gdXAgd2hhdCdzIGxlZnQgb2YgdGhlIGxvY2FsCi0JCQkgKiBhbGxvY2F0aW9uICovCi0JCQlvc2ItPmxvY2FsX2FsbG9jX3N0YXRlID0gT0NGUzJfTEFfRElTQUJMRUQ7CiAJCX0KIAl9CiAKQEAgLTcxOCw2ICs3MzUsMTMgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitpbnQgb2NmczJfcmVzZXJ2ZV9jbHVzdGVycyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCSAgIHUzMiBiaXRzX3dhbnRlZCwKKwkJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqYWMpCit7CisJcmV0dXJuIG9jZnMyX3Jlc2VydmVfY2x1c3RlcnNfd2l0aF9saW1pdChvc2IsIGJpdHNfd2FudGVkLCAwLCBhYyk7Cit9CisKIC8qCiAgKiBNb3JlIG9yIGxlc3MgbGlmdGVkIGZyb20gZXh0My4gSSdsbCBsZWF2ZSB0aGVpciBkZXNjcmlwdGlvbiBiZWxvdzoKICAqCkBAIC0xMDAwLDExICsxMDI0LDE0IEBACiBzdGF0aWMgaW50IG9jZnMyX2NsdXN0ZXJfZ3JvdXBfc2VhcmNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpncm91cF9iaCwKIAkJCQkgICAgICB1MzIgYml0c193YW50ZWQsIHUzMiBtaW5fYml0cywKKwkJCQkgICAgICB1NjQgbWF4X2Jsb2NrLAogCQkJCSAgICAgIHUxNiAqYml0X29mZiwgdTE2ICpiaXRzX2ZvdW5kKQogewogCWludCBzZWFyY2ggPSAtRU5PU1BDOwogCWludCByZXQ7CisJdTY0IGJsa29mZjsKIAlzdHJ1Y3Qgb2NmczJfZ3JvdXBfZGVzYyAqZ2QgPSAoc3RydWN0IG9jZnMyX2dyb3VwX2Rlc2MgKikgZ3JvdXBfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKIAl1MTYgdG1wX29mZiwgdG1wX2ZvdW5kOwogCXVuc2lnbmVkIGludCBtYXhfYml0cywgZ2RfY2x1c3Rlcl9vZmY7CiAKQEAgLTEwMzcsNiArMTA2NCwxNyBAQAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAorCQlpZiAobWF4X2Jsb2NrKSB7CisJCQlibGtvZmYgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsCisJCQkJCQkJICBnZF9jbHVzdGVyX29mZiArCisJCQkJCQkJICB0bXBfb2ZmICsgdG1wX2ZvdW5kKTsKKwkJCW1sb2coMCwgIkNoZWNraW5nICVsbHUgYWdhaW5zdCAlbGx1XG4iLAorCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsa29mZiwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyltYXhfYmxvY2spOworCQkJaWYgKGJsa29mZiA+IG1heF9ibG9jaykKKwkJCQlyZXR1cm4gLUVOT1NQQzsKKwkJfQorCiAJCS8qIG9jZnMyX2Jsb2NrX2dyb3VwX2ZpbmRfY2xlYXJfYml0cygpIG1pZ2h0CiAJCSAqIHJldHVybiBzdWNjZXNzLCBidXQgd2Ugc3RpbGwgd2FudCB0byByZXR1cm4KIAkJICogLUVOT1NQQyB1bmxlc3MgaXQgZm91bmQgdGhlIG1pbmltdW0gbnVtYmVyCkBAIC0xMDQ1LDYgKzEwODMsMTIgQEAKIAkJCSpiaXRfb2ZmID0gdG1wX29mZjsKIAkJCSpiaXRzX2ZvdW5kID0gdG1wX2ZvdW5kOwogCQkJc2VhcmNoID0gMDsgLyogc3VjY2VzcyAqLworCQl9IGVsc2UgaWYgKHRtcF9mb3VuZCkgeworCQkJLyoKKwkJCSAqIERvbid0IHNob3cgYml0cyB3aGljaCB3ZSdsbCBiZSByZXR1cm5pbmcKKwkJCSAqIGZvciBhbGxvY2F0aW9uIHRvIHRoZSBsb2NhbCBhbGxvYyBiaXRtYXAuCisJCQkgKi8KKwkJCW9jZnMyX2xvY2FsX2FsbG9jX3NlZW5fZnJlZV9iaXRzKG9zYiwgdG1wX2ZvdW5kKTsKIAkJfQogCX0KIApAQCAtMTA1NCwxOSArMTA5OCwzMSBAQAogc3RhdGljIGludCBvY2ZzMl9ibG9ja19ncm91cF9zZWFyY2goc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpncm91cF9iaCwKIAkJCQkgICAgdTMyIGJpdHNfd2FudGVkLCB1MzIgbWluX2JpdHMsCisJCQkJICAgIHU2NCBtYXhfYmxvY2ssCiAJCQkJICAgIHUxNiAqYml0X29mZiwgdTE2ICpiaXRzX2ZvdW5kKQogewogCWludCByZXQgPSAtRU5PU1BDOworCXU2NCBibGtvZmY7CiAJc3RydWN0IG9jZnMyX2dyb3VwX2Rlc2MgKmJnID0gKHN0cnVjdCBvY2ZzMl9ncm91cF9kZXNjICopIGdyb3VwX2JoLT5iX2RhdGE7CiAKIAlCVUdfT04obWluX2JpdHMgIT0gMSk7CiAJQlVHX09OKG9jZnMyX2lzX2NsdXN0ZXJfYml0bWFwKGlub2RlKSk7CiAKLQlpZiAoYmctPmJnX2ZyZWVfYml0c19jb3VudCkKKwlpZiAoYmctPmJnX2ZyZWVfYml0c19jb3VudCkgewogCQlyZXQgPSBvY2ZzMl9ibG9ja19ncm91cF9maW5kX2NsZWFyX2JpdHMoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLAogCQkJCQkJCWdyb3VwX2JoLCBiaXRzX3dhbnRlZCwKIAkJCQkJCQlsZTE2X3RvX2NwdShiZy0+YmdfYml0cyksCiAJCQkJCQkJYml0X29mZiwgYml0c19mb3VuZCk7CisJCWlmICghcmV0ICYmIG1heF9ibG9jaykgeworCQkJYmxrb2ZmID0gbGU2NF90b19jcHUoYmctPmJnX2Jsa25vKSArICpiaXRfb2ZmICsKKwkJCQkqYml0c19mb3VuZDsKKwkJCW1sb2coMCwgIkNoZWNraW5nICVsbHUgYWdhaW5zdCAlbGx1XG4iLAorCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsa29mZiwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyltYXhfYmxvY2spOworCQkJaWYgKGJsa29mZiA+IG1heF9ibG9jaykKKwkJCQlyZXQgPSAtRU5PU1BDOworCQl9CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTExMTYsOCArMTE3Miw3IEBACiAJc3RydWN0IG9jZnMyX2dyb3VwX2Rlc2MgKmdkOwogCXN0cnVjdCBpbm9kZSAqYWxsb2NfaW5vZGUgPSBhYy0+YWNfaW5vZGU7CiAKLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKE9DRlMyX1NCKGFsbG9jX2lub2RlLT5pX3NiKSwgZ2RfYmxrbm8sCi0JCQkgICAgICAgJmdyb3VwX2JoLCBPQ0ZTMl9CSF9DQUNIRUQsIGFsbG9jX2lub2RlKTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGFsbG9jX2lub2RlLCBnZF9ibGtubywgJmdyb3VwX2JoKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCXJldHVybiByZXQ7CkBAIC0xMTMxLDcgKzExODYsNyBAQAogCX0KIAogCXJldCA9IGFjLT5hY19ncm91cF9zZWFyY2goYWxsb2NfaW5vZGUsIGdyb3VwX2JoLCBiaXRzX3dhbnRlZCwgbWluX2JpdHMsCi0JCQkJICBiaXRfb2ZmLCAmZm91bmQpOworCQkJCSAgYWMtPmFjX21heF9ibG9jaywgYml0X29mZiwgJmZvdW5kKTsKIAlpZiAocmV0IDwgMCkgewogCQlpZiAocmV0ICE9IC1FTk9TUEMpCiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0xMTg2LDkgKzEyNDEsOSBAQAogCSAgICAgYml0c193YW50ZWQsIGNoYWluLAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGFsbG9jX2lub2RlKS0+aXBfYmxrbm8pOwogCi0Jc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihhbGxvY19pbm9kZS0+aV9zYiksCisJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhhbGxvY19pbm9kZSwKIAkJCQkgIGxlNjRfdG9fY3B1KGNsLT5jbF9yZWNzW2NoYWluXS5jX2Jsa25vKSwKLQkJCQkgICZncm91cF9iaCwgT0NGUzJfQkhfQ0FDSEVELCBhbGxvY19pbm9kZSk7CisJCQkJICAmZ3JvdXBfYmgpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtMTIwNCwyMSArMTI1OSwyMCBAQAogCS8qIGZvciBub3csIHRoZSBjaGFpbiBzZWFyY2ggaXMgYSBiaXQgc2ltcGxpc3RpYy4gV2UganVzdCB1c2UKIAkgKiB0aGUgMXN0IGdyb3VwIHdpdGggYW55IGVtcHR5IGJpdHMuICovCiAJd2hpbGUgKChzdGF0dXMgPSBhYy0+YWNfZ3JvdXBfc2VhcmNoKGFsbG9jX2lub2RlLCBncm91cF9iaCwKLQkJCQkJICAgICBiaXRzX3dhbnRlZCwgbWluX2JpdHMsIGJpdF9vZmYsCisJCQkJCSAgICAgYml0c193YW50ZWQsIG1pbl9iaXRzLAorCQkJCQkgICAgIGFjLT5hY19tYXhfYmxvY2ssIGJpdF9vZmYsCiAJCQkJCSAgICAgJnRtcF9iaXRzKSkgPT0gLUVOT1NQQykgewogCQlpZiAoIWJnLT5iZ19uZXh0X2dyb3VwKQogCQkJYnJlYWs7CiAKLQkJaWYgKHByZXZfZ3JvdXBfYmgpIHsKLQkJCWJyZWxzZShwcmV2X2dyb3VwX2JoKTsKLQkJCXByZXZfZ3JvdXBfYmggPSBOVUxMOwotCQl9CisJCWJyZWxzZShwcmV2X2dyb3VwX2JoKTsKKwkJcHJldl9ncm91cF9iaCA9IE5VTEw7CisKIAkJbmV4dF9ncm91cCA9IGxlNjRfdG9fY3B1KGJnLT5iZ19uZXh0X2dyb3VwKTsKIAkJcHJldl9ncm91cF9iaCA9IGdyb3VwX2JoOwogCQlncm91cF9iaCA9IE5VTEw7Ci0JCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2soT0NGUzJfU0IoYWxsb2NfaW5vZGUtPmlfc2IpLAotCQkJCQkgIG5leHRfZ3JvdXAsICZncm91cF9iaCwKLQkJCQkJICBPQ0ZTMl9CSF9DQUNIRUQsIGFsbG9jX2lub2RlKTsKKwkJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhhbGxvY19pbm9kZSwKKwkJCQkJICBuZXh0X2dyb3VwLCAmZ3JvdXBfYmgpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtMTMwNywxMCArMTM2MSw4IEBACiAJKmJnX2Jsa25vID0gbGU2NF90b19jcHUoYmctPmJnX2Jsa25vKTsKIAkqYml0c19sZWZ0ID0gbGUxNl90b19jcHUoYmctPmJnX2ZyZWVfYml0c19jb3VudCk7CiBiYWlsOgotCWlmIChncm91cF9iaCkKLQkJYnJlbHNlKGdyb3VwX2JoKTsKLQlpZiAocHJldl9ncm91cF9iaCkKLQkJYnJlbHNlKHByZXZfZ3JvdXBfYmgpOworCWJyZWxzZShncm91cF9iaCk7CisJYnJlbHNlKHByZXZfZ3JvdXBfYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTE3MjMsNyArMTc3NSw2IEBACiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJdTMyIHRtcF91c2VkOwotCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoYWxsb2NfaW5vZGUtPmlfc2IpOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgYWxsb2NfYmgtPmJfZGF0YTsKIAlzdHJ1Y3Qgb2NmczJfY2hhaW5fbGlzdCAqY2wgPSAmZmUtPmlkMi5pX2NoYWluOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZ3JvdXBfYmggPSBOVUxMOwpAQCAtMTc0Miw4ICsxNzkzLDcgQEAKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShhbGxvY19pbm9kZSktPmlwX2Jsa25vLCBjb3VudCwKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmdfYmxrbm8sIHN0YXJ0X2JpdCk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgYmdfYmxrbm8sICZncm91cF9iaCwgT0NGUzJfQkhfQ0FDSEVELAotCQkJCSAgYWxsb2NfaW5vZGUpOworCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2soYWxsb2NfaW5vZGUsIGJnX2Jsa25vLCAmZ3JvdXBfYmgpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtMTc4NCw4ICsxODM0LDcgQEAKIAl9CiAKIGJhaWw6Ci0JaWYgKGdyb3VwX2JoKQotCQlicmVsc2UoZ3JvdXBfYmgpOworCWJyZWxzZShncm91cF9iaCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTgzOCw5ICsxODg3LDE1IEBACiAJc3RhdHVzID0gb2NmczJfZnJlZV9zdWJhbGxvY19iaXRzKGhhbmRsZSwgYml0bWFwX2lub2RlLCBiaXRtYXBfYmgsCiAJCQkJCSAgYmdfc3RhcnRfYml0LCBiZ19ibGtubywKIAkJCQkJICBudW1fY2x1c3RlcnMpOwotCWlmIChzdGF0dXMgPCAwKQorCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBvdXQ7CisJfQogCisJb2NmczJfbG9jYWxfYWxsb2Nfc2Vlbl9mcmVlX2JpdHMoT0NGUzJfU0IoYml0bWFwX2lub2RlLT5pX3NiKSwKKwkJCQkJIG51bV9jbHVzdGVycyk7CisKK291dDoKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTg5MSwzICsxOTQ2LDg0IEBACiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWZlLT5pZDIuaV9jaGFpbi5jbF9yZWNzW2ldLmNfYmxrbm8pOwogCX0KIH0KKworLyoKKyAqIEZvciBhIGdpdmVuIGFsbG9jYXRpb24sIGRldGVybWluZSB3aGljaCBhbGxvY2F0b3JzIHdpbGwgbmVlZCB0byBiZQorICogYWNjZXNzZWQsIGFuZCBsb2NrIHRoZW0sIHJlc2VydmluZyB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIGJpdHMuCisgKgorICogU3BhcnNlIGZpbGUgc3lzdGVtcyBjYWxsIHRoaXMgZnJvbSBvY2ZzMl93cml0ZV9iZWdpbl9ub2xvY2soKQorICogYW5kIG9jZnMyX2FsbG9jYXRlX3Vud3JpdHRlbl9leHRlbnRzKCkuCisgKgorICogRmlsZSBzeXN0ZW1zIHdoaWNoIGRvbid0IHN1cHBvcnQgaG9sZXMgY2FsbCB0aGlzIGZyb20KKyAqIG9jZnMyX2V4dGVuZF9hbGxvY2F0aW9uKCkuCisgKi8KK2ludCBvY2ZzMl9sb2NrX2FsbG9jYXRvcnMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCSAgdTMyIGNsdXN0ZXJzX3RvX2FkZCwgdTMyIGV4dGVudHNfdG9fc3BsaXQsCisJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqZGF0YV9hYywKKwkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiptZXRhX2FjKQoreworCWludCByZXQgPSAwLCBudW1fZnJlZV9leHRlbnRzOworCXVuc2lnbmVkIGludCBtYXhfcmVjc19uZWVkZWQgPSBjbHVzdGVyc190b19hZGQgKyAyICogZXh0ZW50c190b19zcGxpdDsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKworCSptZXRhX2FjID0gTlVMTDsKKwlpZiAoZGF0YV9hYykKKwkJKmRhdGFfYWMgPSBOVUxMOworCisJQlVHX09OKGNsdXN0ZXJzX3RvX2FkZCAhPSAwICYmIGRhdGFfYWMgPT0gTlVMTCk7CisKKwludW1fZnJlZV9leHRlbnRzID0gb2NmczJfbnVtX2ZyZWVfZXh0ZW50cyhvc2IsIGlub2RlLCBldCk7CisJaWYgKG51bV9mcmVlX2V4dGVudHMgPCAwKSB7CisJCXJldCA9IG51bV9mcmVlX2V4dGVudHM7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBTcGFyc2UgYWxsb2NhdGlvbiBmaWxlIHN5c3RlbXMgbmVlZCB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZQorCSAqIHdpdGggcmVzZXJ2aW5nIHJvb20gZm9yIGV4cGFuc2lvbiAtIHRoZSBhY3R1YWwgYWxsb2NhdGlvbgorCSAqIGhhcHBlbnMgd2hpbGUgd2UndmUgZ290IGEgam91cm5hbCBoYW5kbGUgb3BlbiBzbyByZS10YWtpbmcKKwkgKiBhIGNsdXN0ZXIgbG9jayAoYmVjYXVzZSB3ZSByYW4gb3V0IG9mIHJvb20gZm9yIGFub3RoZXIKKwkgKiBleHRlbnQpIHdpbGwgdmlvbGF0ZSBvcmRlcmluZyBydWxlcy4KKwkgKgorCSAqIE1vc3Qgb2YgdGhlIHRpbWUgd2UnbGwgb25seSBiZSBzZWVpbmcgdGhpcyAxIGNsdXN0ZXIgYXQgYSB0aW1lCisJICogYW55d2F5LgorCSAqCisJICogQWx3YXlzIGxvY2sgZm9yIGFueSB1bndyaXR0ZW4gZXh0ZW50cyAtIHdlIG1pZ2h0IHdhbnQgdG8KKwkgKiBhZGQgYmxvY2tzIGR1cmluZyBhIHNwbGl0LgorCSAqLworCWlmICghbnVtX2ZyZWVfZXh0ZW50cyB8fAorCSAgICAob2NmczJfc3BhcnNlX2FsbG9jKG9zYikgJiYgbnVtX2ZyZWVfZXh0ZW50cyA8IG1heF9yZWNzX25lZWRlZCkpIHsKKwkJcmV0ID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGEob3NiLCBldC0+ZXRfcm9vdF9lbCwgbWV0YV9hYyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAocmV0ICE9IC1FTk9TUEMpCisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoY2x1c3RlcnNfdG9fYWRkID09IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gb2NmczJfcmVzZXJ2ZV9jbHVzdGVycyhvc2IsIGNsdXN0ZXJzX3RvX2FkZCwgZGF0YV9hYyk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCAhPSAtRU5PU1BDKQorCQkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlpZiAocmV0KSB7CisJCWlmICgqbWV0YV9hYykgeworCQkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KCptZXRhX2FjKTsKKwkJCSptZXRhX2FjID0gTlVMTDsKKwkJfQorCisJCS8qCisJCSAqIFdlIGNhbm5vdCBoYXZlIGFuIGVycm9yIGFuZCBhIG5vbiBudWxsICpkYXRhX2FjLgorCQkgKi8KKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ViYWxsb2MuaCBiL2ZzL29jZnMyL3N1YmFsbG9jLmgKaW5kZXggNTQ0YzYwMC4uNGRmMTU5ZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ViYWxsb2MuaAorKysgYi9mcy9vY2ZzMi9zdWJhbGxvYy5oCkBAIC0yOCwxMCArMjgsMTEgQEAKIAogdHlwZWRlZiBpbnQgKGdyb3VwX3NlYXJjaF90KShzdHJ1Y3QgaW5vZGUgKiwKIAkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICosCi0JCQkgICAgIHUzMiwKLQkJCSAgICAgdTMyLAotCQkJICAgICB1MTYgKiwKLQkJCSAgICAgdTE2ICopOworCQkJICAgICB1MzIsCQkJLyogYml0c193YW50ZWQgKi8KKwkJCSAgICAgdTMyLAkJCS8qIG1pbl9iaXRzICovCisJCQkgICAgIHU2NCwJCQkvKiBtYXhfYmxvY2sgKi8KKwkJCSAgICAgdTE2ICosCQkJLyogKmJpdF9vZmYgKi8KKwkJCSAgICAgdTE2ICopOwkJCS8qICpiaXRzX2ZvdW5kICovCiAKIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0IHsKIAlzdHJ1Y3QgaW5vZGUgKmFjX2lub2RlOyAgICAvKiB3aGljaCBiaXRtYXAgYXJlIHdlIGFsbG9jYXRpbmcgZnJvbT8gKi8KQEAgLTUxLDYgKzUyLDggQEAKIAlncm91cF9zZWFyY2hfdCAqYWNfZ3JvdXBfc2VhcmNoOwogCiAJdTY0ICAgIGFjX2xhc3RfZ3JvdXA7CisJdTY0ICAgIGFjX21heF9ibG9jazsgIC8qIEhpZ2hlc3QgYmxvY2sgbnVtYmVyIHRvIGFsbG9jYXRlLiAwIGlzCisJCQkJIGlzIHRoZSBzYW1lIGFzIH4wIC0gdW5saW1pdGVkICovCiB9OwogCiB2b2lkIG9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMpOwpAQCAtNTksOSArNjIsMTcgQEAKIAlyZXR1cm4gYWMtPmFjX2JpdHNfd2FudGVkIC0gYWMtPmFjX2JpdHNfZ2l2ZW47CiB9CiAKKy8qCisgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCByb290X2VsIGlzIHRoZSByb290CisgKiBvZiBleHRlbnQgdHJlZS4gU28gZm9yIGFuIGlub2RlLCBpdCBzaG91bGQgYmUgJmZlLT5pZDIuaV9saXN0LiBPdGhlcndpc2UKKyAqIHRoZSByZXN1bHQgbWF5IGJlIHdyb25nLgorICovCiBpbnQgb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGEoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkgICAgICAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpyb290X2VsLAogCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqYWMpOworaW50IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2NrcyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgICAgICBpbnQgYmxvY2tzLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqYWMpOwogaW50IG9jZnMyX3Jlc2VydmVfbmV3X2lub2RlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqYWMpOwogaW50IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCkBAIC0xNDcsNiArMTU4LDcgQEAKICAqIGFwaXMgYWJvdmUuICovCiBpbnQgb2NmczJfcmVzZXJ2ZV9jbHVzdGVyX2JpdG1hcF9iaXRzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYyk7Cit2b2lkIG9jZnMyX2ZyZWVfYWNfcmVzb3VyY2Uoc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKTsKIAogLyogZ2l2ZW4gYSBjbHVzdGVyIG9mZnNldCwgY2FsY3VsYXRlIHdoaWNoIGJsb2NrIGdyb3VwIGl0IGJlbG9uZ3MgdG8KICAqIGFuZCByZXR1cm4gdGhhdCBibG9jayBvZmZzZXQuICovCkBAIC0xNTYsNCArMTY4LDggQEAKIGludCBvY2ZzMl9jaGVja19ncm91cF9kZXNjcmlwdG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLAogCQkJCSBzdHJ1Y3Qgb2NmczJfZ3JvdXBfZGVzYyAqZ2QpOworaW50IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJICB1MzIgY2x1c3RlcnNfdG9fYWRkLCB1MzIgZXh0ZW50c190b19zcGxpdCwKKwkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKipkYXRhX2FjLAorCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKm1ldGFfYWMpOwogI2VuZGlmIC8qIF9DSEFJTkFMTE9DX0hfICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdXBlci5jIGIvZnMvb2NmczIvc3VwZXIuYwppbmRleCA4ODI1NWQzZi4uMzA0YjYzYSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAic3lzZmlsZS5oIgogI2luY2x1ZGUgInVwdG9kYXRlLmgiCiAjaW5jbHVkZSAidmVyLmgiCisjaW5jbHVkZSAieGF0dHIuaCIKIAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCiAKQEAgLTE1NCwxMCArMTU1LDEzIEBACiAJT3B0X2xvY2FsYWxsb2MsCiAJT3B0X2xvY2FsZmxvY2tzLAogCU9wdF9zdGFjaywKKwlPcHRfdXNlcl94YXR0ciwKKwlPcHRfbm91c2VyX3hhdHRyLAorCU9wdF9pbm9kZTY0LAogCU9wdF9lcnIsCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9iYXJyaWVyLCAiYmFycmllcj0ldSJ9LAogCXtPcHRfZXJyX3BhbmljLCAiZXJyb3JzPXBhbmljIn0sCiAJe09wdF9lcnJfcm8sICJlcnJvcnM9cmVtb3VudC1ybyJ9LApAQCAtMTczLDYgKzE3Nyw5IEBACiAJe09wdF9sb2NhbGFsbG9jLCAibG9jYWxhbGxvYz0lZCJ9LAogCXtPcHRfbG9jYWxmbG9ja3MsICJsb2NhbGZsb2NrcyJ9LAogCXtPcHRfc3RhY2ssICJjbHVzdGVyX3N0YWNrPSVzIn0sCisJe09wdF91c2VyX3hhdHRyLCAidXNlcl94YXR0ciJ9LAorCXtPcHRfbm91c2VyX3hhdHRyLCAibm91c2VyX3hhdHRyIn0sCisJe09wdF9pbm9kZTY0LCAiaW5vZGU2NCJ9LAogCXtPcHRfZXJyLCBOVUxMfQogfTsKIApAQCAtMjA1LDEwICsyMTIsMTEgQEAKIAkJb2NmczJfc2NoZWR1bGVfdHJ1bmNhdGVfbG9nX2ZsdXNoKG9zYiwgMCk7CiAJfQogCi0JaWYgKGpvdXJuYWxfc3RhcnRfY29tbWl0KE9DRlMyX1NCKHNiKS0+am91cm5hbC0+al9qb3VybmFsLCAmdGFyZ2V0KSkgeworCWlmIChqYmQyX2pvdXJuYWxfc3RhcnRfY29tbWl0KE9DRlMyX1NCKHNiKS0+am91cm5hbC0+al9qb3VybmFsLAorCQkJCSAgICAgICZ0YXJnZXQpKSB7CiAJCWlmICh3YWl0KQotCQkJbG9nX3dhaXRfY29tbWl0KE9DRlMyX1NCKHNiKS0+am91cm5hbC0+al9qb3VybmFsLAotCQkJCQl0YXJnZXQpOworCQkJamJkMl9sb2dfd2FpdF9jb21taXQoT0NGUzJfU0Ioc2IpLT5qb3VybmFsLT5qX2pvdXJuYWwsCisJCQkJCSAgICAgdGFyZ2V0KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0zMjUsNiArMzMzLDcgQEAKIAlpZiAoIW9pKQogCQlyZXR1cm4gTlVMTDsKIAorCWpiZDJfam91cm5hbF9pbml0X2piZF9pbm9kZSgmb2ktPmlwX2ppbm9kZSwgJm9pLT52ZnNfaW5vZGUpOwogCXJldHVybiAmb2ktPnZmc19pbm9kZTsKIH0KIApAQCAtNDA2LDYgKzQxNSwxNSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwkvKiBQcm9iYWJseSBkb24ndCB3YW50IHRoaXMgb24gcmVtb3VudDsgaXQgbWlnaHQKKwkgKiBtZXNzIHdpdGggb3RoZXIgbm9kZXMgKi8KKwlpZiAoIShvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfSU5PREU2NCkgJiYKKwkgICAgKHBhcnNlZF9vcHRpb25zLm1vdW50X29wdCAmIE9DRlMyX01PVU5UX0lOT0RFNjQpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCW1sb2coTUxfRVJST1IsICJDYW5ub3QgZW5hYmxlIGlub2RlNjQgb24gcmVtb3VudFxuIik7CisJCWdvdG8gb3V0OworCX0KKwogCS8qIFdlJ3JlIGdvaW5nIHRvL2Zyb20gcmVhZG9ubHkgbW9kZS4gKi8KIAlpZiAoKCpmbGFncyAmIE1TX1JET05MWSkgIT0gKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewogCQkvKiBMb2NrIGhlcmUgc28gdGhlIGNoZWNrIG9mIEhBUkRfUk8gYW5kIHRoZSBwb3RlbnRpYWwKQEAgLTYzNyw3ICs2NTUsOCBAQAogCW9zYi0+c19hdGltZV9xdWFudHVtID0gcGFyc2VkX29wdGlvbnMuYXRpbWVfcXVhbnR1bTsKIAlvc2ItPnByZWZlcnJlZF9zbG90ID0gcGFyc2VkX29wdGlvbnMuc2xvdDsKIAlvc2ItPm9zYl9jb21taXRfaW50ZXJ2YWwgPSBwYXJzZWRfb3B0aW9ucy5jb21taXRfaW50ZXJ2YWw7Ci0Jb3NiLT5sb2NhbF9hbGxvY19zaXplID0gcGFyc2VkX29wdGlvbnMubG9jYWxhbGxvY19vcHQ7CisJb3NiLT5sb2NhbF9hbGxvY19kZWZhdWx0X2JpdHMgPSBvY2ZzMl9tZWdhYnl0ZXNfdG9fY2x1c3RlcnMoc2IsIHBhcnNlZF9vcHRpb25zLmxvY2FsYWxsb2Nfb3B0KTsKKwlvc2ItPmxvY2FsX2FsbG9jX2JpdHMgPSBvc2ItPmxvY2FsX2FsbG9jX2RlZmF1bHRfYml0czsKIAogCXN0YXR1cyA9IG9jZnMyX3ZlcmlmeV91c2Vyc3BhY2Vfc3RhY2sob3NiLCAmcGFyc2VkX29wdGlvbnMpOwogCWlmIChzdGF0dXMpCkBAIC03NDMsOCArNzYyLDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogCiByZWFkX3N1cGVyX2Vycm9yOgotCWlmIChiaCAhPSBOVUxMKQotCQlicmVsc2UoYmgpOworCWJyZWxzZShiaCk7CiAKIAlpZiAoaW5vZGUpCiAJCWlwdXQoaW5vZGUpOwpAQCAtODQ3LDYgKzg2NSwxMiBAQAogCQljYXNlIE9wdF9kYXRhX3dyaXRlYmFjazoKIAkJCW1vcHQtPm1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9EQVRBX1dSSVRFQkFDSzsKIAkJCWJyZWFrOworCQljYXNlIE9wdF91c2VyX3hhdHRyOgorCQkJbW9wdC0+bW91bnRfb3B0ICY9IH5PQ0ZTMl9NT1VOVF9OT1VTRVJYQVRUUjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9ub3VzZXJfeGF0dHI6CisJCQltb3B0LT5tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9VU0VSWEFUVFI7CisJCQlicmVhazsKIAkJY2FzZSBPcHRfYXRpbWVfcXVhbnR1bToKIAkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKSB7CiAJCQkJc3RhdHVzID0gMDsKQEAgLTg3Myw3ICs4OTcsNyBAQAogCQkJaWYgKG9wdGlvbiA8IDApCiAJCQkJcmV0dXJuIDA7CiAJCQlpZiAob3B0aW9uID09IDApCi0JCQkJb3B0aW9uID0gSkJEX0RFRkFVTFRfTUFYX0NPTU1JVF9BR0U7CisJCQkJb3B0aW9uID0gSkJEMl9ERUZBVUxUX01BWF9DT01NSVRfQUdFOwogCQkJbW9wdC0+Y29tbWl0X2ludGVydmFsID0gSFogKiBvcHRpb247CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbG9jYWxhbGxvYzoKQEAgLTkxOCw2ICs5NDIsOSBAQAogCQkJICAgICAgIE9DRlMyX1NUQUNLX0xBQkVMX0xFTik7CiAJCQltb3B0LT5jbHVzdGVyX3N0YWNrW09DRlMyX1NUQUNLX0xBQkVMX0xFTl0gPSAnXDAnOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2lub2RlNjQ6CisJCQltb3B0LT5tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfSU5PREU2NDsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJbWxvZyhNTF9FUlJPUiwKIAkJCSAgICAgIlVucmVjb2duaXplZCBtb3VudCBvcHRpb24gXCIlc1wiICIKQEAgLTkzOCw2ICs5NjUsNyBAQAogewogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IobW50LT5tbnRfc2IpOwogCXVuc2lnbmVkIGxvbmcgb3B0cyA9IG9zYi0+c19tb3VudF9vcHQ7CisJdW5zaWduZWQgaW50IGxvY2FsX2FsbG9jX21lZ3M7CiAKIAlpZiAob3B0cyAmIE9DRlMyX01PVU5UX0hCX0xPQ0FMKQogCQlzZXFfcHJpbnRmKHMsICIsX25ldGRldixoZWFydGJlYXQ9bG9jYWwiKTsKQEAgLTk3MCw4ICs5OTgsOSBAQAogCQlzZXFfcHJpbnRmKHMsICIsY29tbWl0PSV1IiwKIAkJCSAgICh1bnNpZ25lZCkgKG9zYi0+b3NiX2NvbW1pdF9pbnRlcnZhbCAvIEhaKSk7CiAKLQlpZiAob3NiLT5sb2NhbF9hbGxvY19zaXplICE9IE9DRlMyX0RFRkFVTFRfTE9DQUxfQUxMT0NfU0laRSkKLQkJc2VxX3ByaW50ZihzLCAiLGxvY2FsYWxsb2M9JWQiLCBvc2ItPmxvY2FsX2FsbG9jX3NpemUpOworCWxvY2FsX2FsbG9jX21lZ3MgPSBvc2ItPmxvY2FsX2FsbG9jX2JpdHMgPj4gKDIwIC0gb3NiLT5zX2NsdXN0ZXJzaXplX2JpdHMpOworCWlmIChsb2NhbF9hbGxvY19tZWdzICE9IE9DRlMyX0RFRkFVTFRfTE9DQUxfQUxMT0NfU0laRSkKKwkJc2VxX3ByaW50ZihzLCAiLGxvY2FsYWxsb2M9JWQiLCBsb2NhbF9hbGxvY19tZWdzKTsKIAogCWlmIChvcHRzICYgT0NGUzJfTU9VTlRfTE9DQUxGTE9DS1MpCiAJCXNlcV9wcmludGYocywgIixsb2NhbGZsb2NrcywiKTsKQEAgLTk4MCw2ICsxMDA5LDE0IEBACiAJCXNlcV9wcmludGYocywgIixjbHVzdGVyX3N0YWNrPSUuKnMiLCBPQ0ZTMl9TVEFDS19MQUJFTF9MRU4sCiAJCQkgICBvc2ItPm9zYl9jbHVzdGVyX3N0YWNrKTsKIAorCWlmIChvcHRzICYgT0NGUzJfTU9VTlRfTk9VU0VSWEFUVFIpCisJCXNlcV9wcmludGYocywgIixub3VzZXJfeGF0dHIiKTsKKwllbHNlCisJCXNlcV9wcmludGYocywgIix1c2VyX3hhdHRyIik7CisKKwlpZiAob3B0cyAmIE9DRlMyX01PVU5UX0lOT0RFNjQpCisJCXNlcV9wcmludGYocywgIixpbm9kZTY0Iik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEzMiw2ICsxMTY5LDcgQEAKIAlvaS0+aXBfZGlyX3N0YXJ0X2xvb2t1cCA9IDA7CiAKIAlpbml0X3J3c2VtKCZvaS0+aXBfYWxsb2Nfc2VtKTsKKwlpbml0X3J3c2VtKCZvaS0+aXBfeGF0dHJfc2VtKTsKIAltdXRleF9pbml0KCZvaS0+aXBfaW9fbXV0ZXgpOwogCiAJb2ktPmlwX2Jsa25vID0gMFVMTDsKQEAgLTEzNzUsNiArMTQxMyw3IEBACiAJc2ItPnNfZnNfaW5mbyA9IG9zYjsKIAlzYi0+c19vcCA9ICZvY2ZzMl9zb3BzOwogCXNiLT5zX2V4cG9ydF9vcCA9ICZvY2ZzMl9leHBvcnRfb3BzOworCXNiLT5zX3hhdHRyID0gb2NmczJfeGF0dHJfaGFuZGxlcnM7CiAJc2ItPnNfdGltZV9ncmFuID0gMTsKIAlzYi0+c19mbGFncyB8PSBNU19OT0FUSU1FOwogCS8qIHRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgT19MQVJHRUZJTEUgKi8KQEAgLTE0MjEsOCArMTQ2MCwxMiBAQAogCiAJb3NiLT5zbG90X251bSA9IE9DRlMyX0lOVkFMSURfU0xPVDsKIAorCW9zYi0+c194YXR0cl9pbmxpbmVfc2l6ZSA9IGxlMTZfdG9fY3B1KAorCQkJCQlkaS0+aWQyLmlfc3VwZXIuc194YXR0cl9pbmxpbmVfc2l6ZSk7CisKIAlvc2ItPmxvY2FsX2FsbG9jX3N0YXRlID0gT0NGUzJfTEFfVU5VU0VEOwogCW9zYi0+bG9jYWxfYWxsb2NfYmggPSBOVUxMOworCUlOSVRfREVMQVlFRF9XT1JLKCZvc2ItPmxhX2VuYWJsZV93cSwgb2NmczJfbGFfZW5hYmxlX3dvcmtlcik7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZvc2ItPm9zYl9tb3VudF9ldmVudCk7CiAKQEAgLTE1NjgsNiArMTYxMSw3IEBACiAJb3NiLT5maXJzdF9jbHVzdGVyX2dyb3VwX2Jsa25vID0KIAkJbGU2NF90b19jcHUoZGktPmlkMi5pX3N1cGVyLnNfZmlyc3RfY2x1c3Rlcl9ncm91cCk7CiAJb3NiLT5mc19nZW5lcmF0aW9uID0gbGUzMl90b19jcHUoZGktPmlfZnNfZ2VuZXJhdGlvbik7CisJb3NiLT51dWlkX2hhc2ggPSBsZTMyX3RvX2NwdShkaS0+aWQyLmlfc3VwZXIuc191dWlkX2hhc2gpOwogCW1sb2coMCwgInZvbF9sYWJlbDogJXNcbiIsIG9zYi0+dm9sX2xhYmVsKTsKIAltbG9nKDAsICJ1dWlkOiAlc1xuIiwgb3NiLT51dWlkX3N0cik7CiAJbWxvZygwLCAicm9vdF9ibGtubz0lbGx1LCBzeXN0ZW1fZGlyX2Jsa25vPSVsbHVcbiIsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zeW1saW5rLmMgYi9mcy9vY2ZzMi9zeW1saW5rLmMKaW5kZXggYmE5ZGJiNS4uY2JkMDNkZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ltbGluay5jCisrKyBiL2ZzL29jZnMyL3N5bWxpbmsuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgImlub2RlLmgiCiAjaW5jbHVkZSAiam91cm5hbC5oIgogI2luY2x1ZGUgInN5bWxpbmsuaCIKKyNpbmNsdWRlICJ4YXR0ci5oIgogCiAjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKIApAQCAtODMsMTEgKzg0LDcgQEAKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCi0Jc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksCi0JCQkJICBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCi0JCQkJICBiaCwKLQkJCQkgIE9DRlMyX0JIX0NBQ0hFRCwKLQkJCQkgIGlub2RlKTsKKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIGJoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWxpbmsgPSBFUlJfUFRSKHN0YXR1cyk7CkBAIC0xNTcsOCArMTU0LDcgQEAKIAkJa3VubWFwKHBhZ2UpOwogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJfQotCWlmIChiaCkKLQkJYnJlbHNlKGJoKTsKKwlicmVsc2UoYmgpOwogCiAJcmV0dXJuIEVSUl9QVFIoc3RhdHVzKTsKIH0KQEAgLTE2OCwxMCArMTY0LDE4IEBACiAJLmZvbGxvd19saW5rCT0gb2NmczJfZm9sbG93X2xpbmssCiAJLmdldGF0dHIJPSBvY2ZzMl9nZXRhdHRyLAogCS5zZXRhdHRyCT0gb2NmczJfc2V0YXR0ciwKKwkuc2V0eGF0dHIJPSBnZW5lcmljX3NldHhhdHRyLAorCS5nZXR4YXR0cgk9IGdlbmVyaWNfZ2V0eGF0dHIsCisJLmxpc3R4YXR0cgk9IG9jZnMyX2xpc3R4YXR0ciwKKwkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAogfTsKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Zhc3Rfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0gewogCS5yZWFkbGluawk9IG9jZnMyX3JlYWRsaW5rLAogCS5mb2xsb3dfbGluawk9IG9jZnMyX2ZvbGxvd19saW5rLAogCS5nZXRhdHRyCT0gb2NmczJfZ2V0YXR0ciwKIAkuc2V0YXR0cgk9IG9jZnMyX3NldGF0dHIsCisJLnNldHhhdHRyCT0gZ2VuZXJpY19zZXR4YXR0ciwKKwkuZ2V0eGF0dHIJPSBnZW5lcmljX2dldHhhdHRyLAorCS5saXN0eGF0dHIJPSBvY2ZzMl9saXN0eGF0dHIsCisJLnJlbW92ZXhhdHRyCT0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKIH07CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi91cHRvZGF0ZS5jIGIvZnMvb2NmczIvdXB0b2RhdGUuYwppbmRleCA0ZGE4ODUxLi4xODdiOTlmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi91cHRvZGF0ZS5jCisrKyBiL2ZzL29jZnMyL3VwdG9kYXRlLmMKQEAgLTUzLDcgKzUzLDExIEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Ci0jaW5jbHVkZSA8bGludXgvamJkLmg+CisjaWZuZGVmIENPTkZJR19PQ0ZTMl9DT01QQVRfSkJECisjIGluY2x1ZGUgPGxpbnV4L2piZDIuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGxpbnV4L2piZC5oPgorI2VuZGlmCiAKICNkZWZpbmUgTUxPR19NQVNLX1BSRUZJWCBNTF9VUFRPREFURQogCkBAIC01MTEsMTQgKzUxNSwxMCBAQAogCWNpLT5jaV9udW1fY2FjaGVkLS07CiB9CiAKLS8qIENhbGxlZCB3aGVuIHdlIHJlbW92ZSBhIGNodW5rIG9mIG1ldGFkYXRhIGZyb20gYW4gaW5vZGUuIFdlIGRvbid0Ci0gKiBib3RoZXIgcmV2ZXJ0aW5nIHRoaW5ncyB0byBhbiBpbmxpbmVkIGFycmF5IGluIHRoZSBjYXNlIG9mIGEgcmVtb3ZlCi0gKiB3aGljaCBtb3ZlcyB1cyBiYWNrIHVuZGVyIHRoZSBsaW1pdC4gKi8KLXZvaWQgb2NmczJfcmVtb3ZlX2Zyb21fY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3N0YXRpYyB2b2lkIG9jZnMyX3JlbW92ZV9ibG9ja19mcm9tX2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgc2VjdG9yX3QgYmxvY2spCiB7CiAJaW50IGluZGV4OwotCXNlY3Rvcl90IGJsb2NrID0gYmgtPmJfYmxvY2tucjsKIAlzdHJ1Y3Qgb2NmczJfbWV0YV9jYWNoZV9pdGVtICppdGVtID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKIAlzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSA9ICZvaS0+aXBfbWV0YWRhdGFfY2FjaGU7CkBAIC01NDQsNiArNTQ0LDMwIEBACiAJCWttZW1fY2FjaGVfZnJlZShvY2ZzMl91cHRvZGF0ZV9jYWNoZXAsIGl0ZW0pOwogfQogCisvKgorICogQ2FsbGVkIHdoZW4gd2UgcmVtb3ZlIGEgY2h1bmsgb2YgbWV0YWRhdGEgZnJvbSBhbiBpbm9kZS4gV2UgZG9uJ3QKKyAqIGJvdGhlciByZXZlcnRpbmcgdGhpbmdzIHRvIGFuIGlubGluZWQgYXJyYXkgaW4gdGhlIGNhc2Ugb2YgYSByZW1vdmUKKyAqIHdoaWNoIG1vdmVzIHVzIGJhY2sgdW5kZXIgdGhlIGxpbWl0LgorICovCit2b2lkIG9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJc2VjdG9yX3QgYmxvY2sgPSBiaC0+Yl9ibG9ja25yOworCisJb2NmczJfcmVtb3ZlX2Jsb2NrX2Zyb21fY2FjaGUoaW5vZGUsIGJsb2NrKTsKK30KKworLyogQ2FsbGVkIHdoZW4gd2UgcmVtb3ZlIHhhdHRyIGNsdXN0ZXJzIGZyb20gYW4gaW5vZGUuICovCit2b2lkIG9jZnMyX3JlbW92ZV94YXR0cl9jbHVzdGVyc19mcm9tX2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICBzZWN0b3JfdCBibG9jaywKKwkJCQkJICAgIHUzMiBjX2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgYl9sZW4gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIDEpICogY19sZW47CisKKwlmb3IgKGkgPSAwOyBpIDwgYl9sZW47IGkrKywgYmxvY2srKykKKwkJb2NmczJfcmVtb3ZlX2Jsb2NrX2Zyb21fY2FjaGUoaW5vZGUsIGJsb2NrKTsKK30KKwogaW50IF9faW5pdCBpbml0X29jZnMyX3VwdG9kYXRlX2NhY2hlKHZvaWQpCiB7CiAJb2NmczJfdXB0b2RhdGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoIm9jZnMyX3VwdG9kYXRlIiwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3VwdG9kYXRlLmggYi9mcy9vY2ZzMi91cHRvZGF0ZS5oCmluZGV4IDJlNzMyMDYuLjUzMWI0YjMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3VwdG9kYXRlLmgKKysrIGIvZnMvb2NmczIvdXB0b2RhdGUuaApAQCAtNDAsNiArNDAsOSBAQAogCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogdm9pZCBvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKK3ZvaWQgb2NmczJfcmVtb3ZlX3hhdHRyX2NsdXN0ZXJzX2Zyb21fY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgIHNlY3Rvcl90IGJsb2NrLAorCQkJCQkgICAgdTMyIGNfbGVuKTsKIGludCBvY2ZzMl9idWZmZXJfcmVhZF9haGVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDJjNDE0Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvb2NmczIveGF0dHIuYwpAQCAtMCwwICsxLDQ4MzIgQEAKKy8qIC0qLSBtb2RlOiBjOyBjLWJhc2ljLW9mZnNldDogODsgLSotCisgKiB2aW06IG5vZXhwYW5kdGFiIHN3PTggdHM9OCBzdHM9MDoKKyAqCisgKiB4YXR0ci5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQ1JFRElUUzoKKyAqIExvdHMgb2YgY29kZSBpbiB0aGlzIGZpbGUgaXMgdGFrZW4gZnJvbSBleHQzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEwLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC91aW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwbGljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8bGludXgvZmFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX1hBVFRSCisjaW5jbHVkZSA8Y2x1c3Rlci9tYXNrbG9nLmg+CisKKyNpbmNsdWRlICJvY2ZzMi5oIgorI2luY2x1ZGUgImFsbG9jLmgiCisjaW5jbHVkZSAiZGxtZ2x1ZS5oIgorI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJzeW1saW5rLmgiCisjaW5jbHVkZSAic3lzZmlsZS5oIgorI2luY2x1ZGUgImlub2RlLmgiCisjaW5jbHVkZSAiam91cm5hbC5oIgorI2luY2x1ZGUgIm9jZnMyX2ZzLmgiCisjaW5jbHVkZSAic3ViYWxsb2MuaCIKKyNpbmNsdWRlICJ1cHRvZGF0ZS5oIgorI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCisjaW5jbHVkZSAic3VwZXIuaCIKKyNpbmNsdWRlICJ4YXR0ci5oIgorCisKK3N0cnVjdCBvY2ZzMl94YXR0cl9kZWZfdmFsdWVfcm9vdCB7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QJeHY7CisJc3RydWN0IG9jZnMyX2V4dGVudF9yZWMJCWVyOworfTsKKworc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCB7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaHNbT0NGUzJfWEFUVFJfTUFYX0JMT0NLU19QRVJfQlVDS0VUXTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aDsKK307CisKKyNkZWZpbmUgT0NGUzJfWEFUVFJfUk9PVF9TSVpFCShzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2RlZl92YWx1ZV9yb290KSkKKyNkZWZpbmUgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUJODAKKworc3RhdGljIHN0cnVjdCBvY2ZzMl94YXR0cl9kZWZfdmFsdWVfcm9vdCBkZWZfeHYgPSB7CisJLnh2LnhyX2xpc3QubF9jb3VudCA9IGNwdV90b19sZTE2KDEpLAorfTsKKworc3RydWN0IHhhdHRyX2hhbmRsZXIgKm9jZnMyX3hhdHRyX2hhbmRsZXJzW10gPSB7CisJJm9jZnMyX3hhdHRyX3VzZXJfaGFuZGxlciwKKwkmb2NmczJfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqb2NmczJfeGF0dHJfaGFuZGxlcl9tYXBbXSA9IHsKKwlbT0NGUzJfWEFUVFJfSU5ERVhfVVNFUl0JPSAmb2NmczJfeGF0dHJfdXNlcl9oYW5kbGVyLAorCVtPQ0ZTMl9YQVRUUl9JTkRFWF9UUlVTVEVEXQk9ICZvY2ZzMl94YXR0cl90cnVzdGVkX2hhbmRsZXIsCit9OworCitzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyB7CisJaW50IG5hbWVfaW5kZXg7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCB2b2lkICp2YWx1ZTsKKwlzaXplX3QgdmFsdWVfbGVuOworfTsKKworc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCB7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICppbm9kZV9iaDsKKwkvKgorCSAqIHhhdHRyX2JoIHBvaW50IHRvIHRoZSBibG9jayBidWZmZXIgaGVhZCB3aGljaCBoYXMgZXh0ZW5kZWQgYXR0cmlidXRlCisJICogd2hlbiBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUsIHhhdHRyX2JoIGlzIGVxdWFsIHRvIGlub2RlX2JoLgorCSAqLworCXN0cnVjdCBidWZmZXJfaGVhZCAqeGF0dHJfYmg7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqaGVhZGVyOworCXN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgYnVja2V0OworCXZvaWQgKmJhc2U7CisJdm9pZCAqZW5kOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqaGVyZTsKKwlpbnQgbm90X2ZvdW5kOworfTsKKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCwKKwkJCQkJICAgICBpbnQgaW5kZXgsCisJCQkJCSAgICAgaW50ICpibG9ja19vZmYsCisJCQkJCSAgICAgaW50ICpuZXdfb2Zmc2V0KTsKKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9pbmRleF9ibG9ja19maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCwKKwkJCQkJaW50IG5hbWVfaW5kZXgsCisJCQkJCWNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzKTsKKworc3RhdGljIGludCBvY2ZzMl94YXR0cl90cmVlX2xpc3RfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeHQsCisJCQkJCWNoYXIgKmJ1ZmZlciwKKwkJCQkJc2l6ZV90IGJ1ZmZlcl9zaXplKTsKKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9jcmVhdGVfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cyk7CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2V0X2VudHJ5X2luZGV4X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzKTsKKworc3RhdGljIGludCBvY2ZzMl9kZWxldGVfeGF0dHJfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnhiX2JoKTsKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpvY2ZzMl94YXR0cl9wcmVmaXgoaW50IG5hbWVfaW5kZXgpCit7CisJc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOworCisJaWYgKG5hbWVfaW5kZXggPiAwICYmIG5hbWVfaW5kZXggPCBPQ0ZTMl9YQVRUUl9NQVgpCisJCWhhbmRsZXIgPSBvY2ZzMl94YXR0cl9oYW5kbGVyX21hcFtuYW1lX2luZGV4XTsKKworCXJldHVybiBoYW5kbGVyID8gaGFuZGxlci0+cHJlZml4IDogTlVMTDsKK30KKworc3RhdGljIHUzMiBvY2ZzMl94YXR0cl9uYW1lX2hhc2goc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgaW50IG5hbWVfbGVuKQoreworCS8qIEdldCBoYXNoIHZhbHVlIG9mIHV1aWQgZnJvbSBzdXBlciBibG9jayAqLworCXUzMiBoYXNoID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpLT51dWlkX2hhc2g7CisJaW50IGk7CisKKwkvKiBoYXNoIGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lICovCisJZm9yIChpID0gMDsgaSA8IG5hbWVfbGVuOyBpKyspIHsKKwkJaGFzaCA9IChoYXNoIDw8IE9DRlMyX0hBU0hfU0hJRlQpIF4KKwkJICAgICAgIChoYXNoID4+ICg4KnNpemVvZihoYXNoKSAtIE9DRlMyX0hBU0hfU0hJRlQpKSBeCisJCSAgICAgICAqbmFtZSsrOworCX0KKworCXJldHVybiBoYXNoOworfQorCisvKgorICogb2NmczJfeGF0dHJfaGFzaF9lbnRyeSgpCisgKgorICogQ29tcHV0ZSB0aGUgaGFzaCBvZiBhbiBleHRlbmRlZCBhdHRyaWJ1dGUuCisgKi8KK3N0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX2hhc2hfZW50cnkoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpoZWFkZXIsCisJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICplbnRyeSkKK3sKKwl1MzIgaGFzaCA9IDA7CisJY2hhciAqbmFtZSA9IChjaGFyICopaGVhZGVyICsgbGUxNl90b19jcHUoZW50cnktPnhlX25hbWVfb2Zmc2V0KTsKKworCWhhc2ggPSBvY2ZzMl94YXR0cl9uYW1lX2hhc2goaW5vZGUsIG5hbWUsIGVudHJ5LT54ZV9uYW1lX2xlbik7CisJZW50cnktPnhlX25hbWVfaGFzaCA9IGNwdV90b19sZTMyKGhhc2gpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2V4dGVuZF9hbGxvY2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSB1MzIgY2x1c3RlcnNfdG9fYWRkLAorCQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICp4YXR0cl9iaCwKKwkJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4dikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgcmVzdGFydF9mdW5jID0gMDsKKwlpbnQgY3JlZGl0cyA9IDA7CisJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjID0gTlVMTDsKKwllbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCB3aHk7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJdTMyIHByZXZfY2x1c3RlcnMsIGxvZ2ljYWxfc3RhcnQgPSBsZTMyX3RvX2NwdSh4di0+eHJfY2x1c3RlcnMpOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKworCW1sb2coMCwgIihjbHVzdGVyc190b19hZGQgZm9yIHhhdHRyPSAldSlcbiIsIGNsdXN0ZXJzX3RvX2FkZCk7CisKKwlvY2ZzMl9pbml0X3hhdHRyX3ZhbHVlX2V4dGVudF90cmVlKCZldCwgaW5vZGUsIHhhdHRyX2JoLCB4dik7CisKK3Jlc3RhcnRfYWxsOgorCisJc3RhdHVzID0gb2NmczJfbG9ja19hbGxvY2F0b3JzKGlub2RlLCAmZXQsIGNsdXN0ZXJzX3RvX2FkZCwgMCwKKwkJCQkgICAgICAgJmRhdGFfYWMsICZtZXRhX2FjKTsKKwlpZiAoc3RhdHVzKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwljcmVkaXRzID0gb2NmczJfY2FsY19leHRlbmRfY3JlZGl0cyhvc2ItPnNiLCBldC5ldF9yb290X2VsLAorCQkJCQkgICAgY2x1c3RlcnNfdG9fYWRkKTsKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKGhhbmRsZSk7CisJCWhhbmRsZSA9IE5VTEw7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKK3Jlc3RhcnRlZF90cmFuc2FjdGlvbjoKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB4YXR0cl9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCXByZXZfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdSh4di0+eHJfY2x1c3RlcnMpOworCXN0YXR1cyA9IG9jZnMyX2FkZF9jbHVzdGVyc19pbl9idHJlZShvc2IsCisJCQkJCSAgICAgaW5vZGUsCisJCQkJCSAgICAgJmxvZ2ljYWxfc3RhcnQsCisJCQkJCSAgICAgY2x1c3RlcnNfdG9fYWRkLAorCQkJCQkgICAgIDAsCisJCQkJCSAgICAgJmV0LAorCQkJCQkgICAgIGhhbmRsZSwKKwkJCQkJICAgICBkYXRhX2FjLAorCQkJCQkgICAgIG1ldGFfYWMsCisJCQkJCSAgICAgJndoeSk7CisJaWYgKChzdGF0dXMgPCAwKSAmJiAoc3RhdHVzICE9IC1FQUdBSU4pKSB7CisJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKKwkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgeGF0dHJfYmgpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwljbHVzdGVyc190b19hZGQgLT0gbGUzMl90b19jcHUoeHYtPnhyX2NsdXN0ZXJzKSAtIHByZXZfY2x1c3RlcnM7CisKKwlpZiAod2h5ICE9IFJFU1RBUlRfTk9ORSAmJiBjbHVzdGVyc190b19hZGQpIHsKKwkJaWYgKHdoeSA9PSBSRVNUQVJUX01FVEEpIHsKKwkJCW1sb2coMCwgInJlc3RhcnRpbmcgZnVuY3Rpb24uXG4iKTsKKwkJCXJlc3RhcnRfZnVuYyA9IDE7CisJCX0gZWxzZSB7CisJCQlCVUdfT04od2h5ICE9IFJFU1RBUlRfVFJBTlMpOworCisJCQltbG9nKDAsICJyZXN0YXJ0aW5nIHRyYW5zYWN0aW9uLlxuIik7CisJCQkvKiBUT0RPOiBUaGlzIGNhbiBiZSBtb3JlIGludGVsbGlnZW50LiAqLworCQkJY3JlZGl0cyA9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMob3NiLT5zYiwKKwkJCQkJCQkgICAgZXQuZXRfcm9vdF9lbCwKKwkJCQkJCQkgICAgY2x1c3RlcnNfdG9fYWRkKTsKKwkJCXN0YXR1cyA9IG9jZnMyX2V4dGVuZF90cmFucyhoYW5kbGUsIGNyZWRpdHMpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQkvKiBoYW5kbGUgc3RpbGwgaGFzIHRvIGJlIGNvbW1pdHRlZCBhdAorCQkJCSAqIHRoaXMgcG9pbnQuICovCisJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCQkJZ290byBsZWF2ZTsKKwkJCX0KKwkJCWdvdG8gcmVzdGFydGVkX3RyYW5zYWN0aW9uOworCQl9CisJfQorCitsZWF2ZToKKwlpZiAoaGFuZGxlKSB7CisJCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CisJCWhhbmRsZSA9IE5VTEw7CisJfQorCWlmIChkYXRhX2FjKSB7CisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChkYXRhX2FjKTsKKwkJZGF0YV9hYyA9IE5VTEw7CisJfQorCWlmIChtZXRhX2FjKSB7CisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKwkJbWV0YV9hYyA9IE5VTEw7CisJfQorCWlmICgoIXN0YXR1cykgJiYgcmVzdGFydF9mdW5jKSB7CisJCXJlc3RhcnRfZnVuYyA9IDA7CisJCWdvdG8gcmVzdGFydF9hbGw7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBfX29jZnMyX3JlbW92ZV94YXR0cl9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYsCisJCQkJICAgICAgdTMyIGNwb3MsIHUzMiBwaHlzX2Nwb3MsIHUzMiBsZW4sCisJCQkJICAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCit7CisJaW50IHJldDsKKwl1NjQgcGh5c19ibGtubyA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgcGh5c19jcG9zKTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgaW5vZGUgKnRsX2lub2RlID0gb3NiLT5vc2JfdGxfaW5vZGU7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCisJb2NmczJfaW5pdF94YXR0cl92YWx1ZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCByb290X2JoLCB4dik7CisKKwlyZXQgPSBvY2ZzMl9sb2NrX2FsbG9jYXRvcnMoaW5vZGUsICZldCwgMCwgMSwgTlVMTCwgJm1ldGFfYWMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW11dGV4X2xvY2soJnRsX2lub2RlLT5pX211dGV4KTsKKworCWlmIChvY2ZzMl90cnVuY2F0ZV9sb2dfbmVlZHNfZmx1c2gob3NiKSkgeworCQlyZXQgPSBfX29jZnMyX2ZsdXNoX3RydW5jYXRlX2xvZyhvc2IpOworCQlpZiAocmV0IDwgMCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIE9DRlMyX1JFTU9WRV9FWFRFTlRfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCByb290X2JoLAorCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCXJldCA9IG9jZnMyX3JlbW92ZV9leHRlbnQoaW5vZGUsICZldCwgY3BvcywgbGVuLCBoYW5kbGUsIG1ldGFfYWMsCisJCQkJICBkZWFsbG9jKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCWxlMzJfYWRkX2NwdSgmeHYtPnhyX2NsdXN0ZXJzLCAtbGVuKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCByb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCXJldCA9IG9jZnMyX3RydW5jYXRlX2xvZ19hcHBlbmQob3NiLCBoYW5kbGUsIHBoeXNfYmxrbm8sIGxlbik7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ0bF9pbm9kZS0+aV9tdXRleCk7CisKKwlpZiAobWV0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9zaHJpbmtfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgIHUzMiBvbGRfY2x1c3RlcnMsCisJCQkJICAgdTMyIG5ld19jbHVzdGVycywKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJvb3RfYmgsCisJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2KQoreworCWludCByZXQgPSAwOworCXUzMiB0cnVuY19sZW4sIGNwb3MsIHBoeXNfY3BvcywgYWxsb2Nfc2l6ZTsKKwl1NjQgYmxvY2s7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgZGVhbGxvYzsKKworCW9jZnMyX2luaXRfZGVhbGxvY19jdHh0KCZkZWFsbG9jKTsKKworCWlmIChvbGRfY2x1c3RlcnMgPD0gbmV3X2NsdXN0ZXJzKQorCQlyZXR1cm4gMDsKKworCWNwb3MgPSBuZXdfY2x1c3RlcnM7CisJdHJ1bmNfbGVuID0gb2xkX2NsdXN0ZXJzIC0gbmV3X2NsdXN0ZXJzOworCXdoaWxlICh0cnVuY19sZW4pIHsKKwkJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCBjcG9zLCAmcGh5c19jcG9zLAorCQkJCQkgICAgICAgJmFsbG9jX3NpemUsICZ4di0+eHJfbGlzdCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGFsbG9jX3NpemUgPiB0cnVuY19sZW4pCisJCQlhbGxvY19zaXplID0gdHJ1bmNfbGVuOworCisJCXJldCA9IF9fb2NmczJfcmVtb3ZlX3hhdHRyX3JhbmdlKGlub2RlLCByb290X2JoLCB4diwgY3BvcywKKwkJCQkJCSBwaHlzX2Nwb3MsIGFsbG9jX3NpemUsCisJCQkJCQkgJmRlYWxsb2MpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWJsb2NrID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLCBwaHlzX2Nwb3MpOworCQlvY2ZzMl9yZW1vdmVfeGF0dHJfY2x1c3RlcnNfZnJvbV9jYWNoZShpbm9kZSwgYmxvY2ssCisJCQkJCQkgICAgICAgYWxsb2Nfc2l6ZSk7CisJCWNwb3MgKz0gYWxsb2Nfc2l6ZTsKKwkJdHJ1bmNfbGVuIC09IGFsbG9jX3NpemU7CisJfQorCitvdXQ6CisJb2NmczJfc2NoZWR1bGVfdHJ1bmNhdGVfbG9nX2ZsdXNoKG9zYiwgMSk7CisJb2NmczJfcnVuX2RlYWxsb2NzKG9zYiwgJmRlYWxsb2MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl92YWx1ZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYsCisJCQkJICAgICAgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCXUzMiBuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoaW5vZGUtPmlfc2IsIGxlbik7CisJdTMyIG9sZF9jbHVzdGVycyA9IGxlMzJfdG9fY3B1KHh2LT54cl9jbHVzdGVycyk7CisKKwlpZiAobmV3X2NsdXN0ZXJzID09IG9sZF9jbHVzdGVycykKKwkJcmV0dXJuIDA7CisKKwlpZiAobmV3X2NsdXN0ZXJzID4gb2xkX2NsdXN0ZXJzKQorCQlyZXQgPSBvY2ZzMl94YXR0cl9leHRlbmRfYWxsb2NhdGlvbihpbm9kZSwKKwkJCQkJCSAgICBuZXdfY2x1c3RlcnMgLSBvbGRfY2x1c3RlcnMsCisJCQkJCQkgICAgcm9vdF9iaCwgeHYpOworCWVsc2UKKwkJcmV0ID0gb2NmczJfeGF0dHJfc2hyaW5rX3NpemUoaW5vZGUsCisJCQkJCSAgICAgIG9sZF9jbHVzdGVycywgbmV3X2NsdXN0ZXJzLAorCQkJCQkgICAgICByb290X2JoLCB4dik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2xpc3RfZW50cnkoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgIHNpemVfdCAqcmVzdWx0LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZV9sZW4pCit7CisJY2hhciAqcCA9IGJ1ZmZlciArICpyZXN1bHQ7CisJaW50IHByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTsKKwlpbnQgdG90YWxfbGVuID0gcHJlZml4X2xlbiArIG5hbWVfbGVuICsgMTsKKworCSpyZXN1bHQgKz0gdG90YWxfbGVuOworCisJLyogd2UgYXJlIGp1c3QgbG9va2luZyBmb3IgaG93IGJpZyBvdXIgYnVmZmVyIG5lZWRzIHRvIGJlICovCisJaWYgKCFzaXplKQorCQlyZXR1cm4gMDsKKworCWlmICgqcmVzdWx0ID4gc2l6ZSkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwltZW1jcHkocCwgcHJlZml4LCBwcmVmaXhfbGVuKTsKKwltZW1jcHkocCArIHByZWZpeF9sZW4sIG5hbWUsIG5hbWVfbGVuKTsKKwlwW3ByZWZpeF9sZW4gKyBuYW1lX2xlbl0gPSAnXDAnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfbGlzdF9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKmhlYWRlciwKKwkJCQkgICAgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpCit7CisJc2l6ZV90IHJlc3VsdCA9IDA7CisJaW50IGksIHR5cGUsIHJldDsKKwljb25zdCBjaGFyICpwcmVmaXgsICpuYW1lOworCisJZm9yIChpID0gMCA7IGkgPCBsZTE2X3RvX2NwdShoZWFkZXItPnhoX2NvdW50KTsgaSsrKSB7CisJCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqZW50cnkgPSAmaGVhZGVyLT54aF9lbnRyaWVzW2ldOworCQl0eXBlID0gb2NmczJfeGF0dHJfZ2V0X3R5cGUoZW50cnkpOworCQlwcmVmaXggPSBvY2ZzMl94YXR0cl9wcmVmaXgodHlwZSk7CisKKwkJaWYgKHByZWZpeCkgeworCQkJbmFtZSA9IChjb25zdCBjaGFyICopaGVhZGVyICsKKwkJCQlsZTE2X3RvX2NwdShlbnRyeS0+eGVfbmFtZV9vZmZzZXQpOworCisJCQlyZXQgPSBvY2ZzMl94YXR0cl9saXN0X2VudHJ5KGJ1ZmZlciwgYnVmZmVyX3NpemUsCisJCQkJCQkgICAgICZyZXN1bHQsIHByZWZpeCwgbmFtZSwKKwkJCQkJCSAgICAgZW50cnktPnhlX25hbWVfbGVuKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfaWJvZHlfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksCisJCQkJICBjaGFyICpidWZmZXIsCisJCQkJICBzaXplX3QgYnVmZmVyX3NpemUpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqaGVhZGVyID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpKQorCQlyZXR1cm4gcmV0OworCisJaGVhZGVyID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKikKKwkJICgodm9pZCAqKWRpICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0KKwkJIGxlMTZfdG9fY3B1KGRpLT5pX3hhdHRyX2lubGluZV9zaXplKSk7CisKKwlyZXQgPSBvY2ZzMl94YXR0cl9saXN0X2VudHJpZXMoaW5vZGUsIGhlYWRlciwgYnVmZmVyLCBidWZmZXJfc2l6ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2Jsb2NrX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLAorCQkJCSAgY2hhciAqYnVmZmVyLAorCQkJCSAgc2l6ZV90IGJ1ZmZlcl9zaXplKQoreworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiOworCWludCByZXQgPSAwOworCisJaWYgKCFkaS0+aV94YXR0cl9sb2MpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBsZTY0X3RvX2NwdShkaS0+aV94YXR0cl9sb2MpLCAmYmxrX2JoKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCS8qVmVyaWZ5IHRoZSBzaWduYXR1cmUgb2YgeGF0dHIgYmxvY2sqLworCWlmIChtZW1jbXAoKHZvaWQgKilibGtfYmgtPmJfZGF0YSwgT0NGUzJfWEFUVFJfQkxPQ0tfU0lHTkFUVVJFLAorCQkgICBzdHJsZW4oT0NGUzJfWEFUVFJfQkxPQ0tfU0lHTkFUVVJFKSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXhiID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKWJsa19iaC0+Yl9kYXRhOworCisJaWYgKCEobGUxNl90b19jcHUoeGItPnhiX2ZsYWdzKSAmIE9DRlMyX1hBVFRSX0lOREVYRUQpKSB7CisJCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKmhlYWRlciA9ICZ4Yi0+eGJfYXR0cnMueGJfaGVhZGVyOworCQlyZXQgPSBvY2ZzMl94YXR0cl9saXN0X2VudHJpZXMoaW5vZGUsIGhlYWRlciwKKwkJCQkJICAgICAgIGJ1ZmZlciwgYnVmZmVyX3NpemUpOworCX0gZWxzZSB7CisJCXN0cnVjdCBvY2ZzMl94YXR0cl90cmVlX3Jvb3QgKnh0ID0gJnhiLT54Yl9hdHRycy54Yl9yb290OworCQlyZXQgPSBvY2ZzMl94YXR0cl90cmVlX2xpc3RfaW5kZXhfYmxvY2soaW5vZGUsIHh0LAorCQkJCQkJICAgYnVmZmVyLCBidWZmZXJfc2l6ZSk7CisJfQorY2xlYW51cDoKKwlicmVsc2UoYmxrX2JoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3NzaXplX3Qgb2NmczJfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCWNoYXIgKmJ1ZmZlciwKKwkJCXNpemVfdCBzaXplKQoreworCWludCByZXQgPSAwLCBpX3JldCA9IDAsIGJfcmV0ID0gMDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShkZW50cnktPmRfaW5vZGUpOworCisJaWYgKCFvY2ZzMl9zdXBwb3J0c194YXR0cihPQ0ZTMl9TQihkZW50cnktPmRfc2IpKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19YQVRUUl9GTCkpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvY2ZzMl9pbm9kZV9sb2NrKGRlbnRyeS0+ZF9pbm9kZSwgJmRpX2JoLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisKKwlkb3duX3JlYWQoJm9pLT5pcF94YXR0cl9zZW0pOworCWlfcmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfbGlzdChkZW50cnktPmRfaW5vZGUsIGRpLCBidWZmZXIsIHNpemUpOworCWlmIChpX3JldCA8IDApCisJCWJfcmV0ID0gMDsKKwllbHNlIHsKKwkJaWYgKGJ1ZmZlcikgeworCQkJYnVmZmVyICs9IGlfcmV0OworCQkJc2l6ZSAtPSBpX3JldDsKKwkJfQorCQliX3JldCA9IG9jZnMyX3hhdHRyX2Jsb2NrX2xpc3QoZGVudHJ5LT5kX2lub2RlLCBkaSwKKwkJCQkJICAgICAgIGJ1ZmZlciwgc2l6ZSk7CisJCWlmIChiX3JldCA8IDApCisJCQlpX3JldCA9IDA7CisJfQorCXVwX3JlYWQoJm9pLT5pcF94YXR0cl9zZW0pOworCW9jZnMyX2lub2RlX3VubG9jayhkZW50cnktPmRfaW5vZGUsIDApOworCisJYnJlbHNlKGRpX2JoKTsKKworCXJldHVybiBpX3JldCArIGJfcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2ZpbmRfZW50cnkoaW50IG5hbWVfaW5kZXgsCisJCQkJICBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICplbnRyeTsKKwlzaXplX3QgbmFtZV9sZW47CisJaW50IGksIGNtcCA9IDE7CisKKwlpZiAobmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5hbWVfbGVuID0gc3RybGVuKG5hbWUpOworCWVudHJ5ID0geHMtPmhlcmU7CisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KHhzLT5oZWFkZXItPnhoX2NvdW50KTsgaSsrKSB7CisJCWNtcCA9IG5hbWVfaW5kZXggLSBvY2ZzMl94YXR0cl9nZXRfdHlwZShlbnRyeSk7CisJCWlmICghY21wKQorCQkJY21wID0gbmFtZV9sZW4gLSBlbnRyeS0+eGVfbmFtZV9sZW47CisJCWlmICghY21wKQorCQkJY21wID0gbWVtY21wKG5hbWUsICh4cy0+YmFzZSArCisJCQkJICAgICBsZTE2X3RvX2NwdShlbnRyeS0+eGVfbmFtZV9vZmZzZXQpKSwKKwkJCQkgICAgIG5hbWVfbGVuKTsKKwkJaWYgKGNtcCA9PSAwKQorCQkJYnJlYWs7CisJCWVudHJ5ICs9IDE7CisJfQorCXhzLT5oZXJlID0gZW50cnk7CisKKwlyZXR1cm4gY21wID8gLUVOT0RBVEEgOiAwOworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2dldF92YWx1ZV9vdXRzaWRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYsCisJCQkJCSB2b2lkICpidWZmZXIsCisJCQkJCSBzaXplX3QgbGVuKQoreworCXUzMiBjcG9zLCBwX2NsdXN0ZXIsIG51bV9jbHVzdGVycywgYnBjLCBjbHVzdGVyczsKKwl1NjQgYmxrbm87CisJaW50IGksIHJldCA9IDA7CisJc2l6ZV90IGNwbGVuLCBibG9ja3NpemU7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKKworCWVsID0gJnh2LT54cl9saXN0OworCWNsdXN0ZXJzID0gbGUzMl90b19jcHUoeHYtPnhyX2NsdXN0ZXJzKTsKKwlicGMgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIDEpOworCWJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKworCWNwb3MgPSAwOworCXdoaWxlIChjcG9zIDwgY2x1c3RlcnMpIHsKKwkJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCBjcG9zLCAmcF9jbHVzdGVyLAorCQkJCQkgICAgICAgJm51bV9jbHVzdGVycywgZWwpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWJsa25vID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLCBwX2NsdXN0ZXIpOworCQkvKiBDb3B5IG9jZnMyX3hhdHRyX3ZhbHVlICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1fY2x1c3RlcnMgKiBicGM7IGkrKywgYmxrbm8rKykgeworCQkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgYmxrbm8sICZiaCk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQljcGxlbiA9IGxlbiA+PSBibG9ja3NpemUgPyBibG9ja3NpemUgOiBsZW47CisJCQltZW1jcHkoYnVmZmVyLCBiaC0+Yl9kYXRhLCBjcGxlbik7CisJCQlsZW4gLT0gY3BsZW47CisJCQlidWZmZXIgKz0gY3BsZW47CisKKwkJCWJyZWxzZShiaCk7CisJCQliaCA9IE5VTEw7CisJCQlpZiAobGVuID09IDApCisJCQkJYnJlYWs7CisJCX0KKwkJY3BvcyArPSBudW1fY2x1c3RlcnM7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfaWJvZHlfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIGludCBuYW1lX2luZGV4LAorCQkJCSBjb25zdCBjaGFyICpuYW1lLAorCQkJCSB2b2lkICpidWZmZXIsCisJCQkJIHNpemVfdCBidWZmZXJfc2l6ZSwKKwkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpCit7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXhzLT5pbm9kZV9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4djsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpKQorCQlyZXR1cm4gLUVOT0RBVEE7CisKKwl4cy0+ZW5kID0gKHZvaWQgKilkaSArIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKwl4cy0+aGVhZGVyID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKikKKwkJCSh4cy0+ZW5kIC0gbGUxNl90b19jcHUoZGktPmlfeGF0dHJfaW5saW5lX3NpemUpKTsKKwl4cy0+YmFzZSA9ICh2b2lkICopeHMtPmhlYWRlcjsKKwl4cy0+aGVyZSA9IHhzLT5oZWFkZXItPnhoX2VudHJpZXM7CisKKwlyZXQgPSBvY2ZzMl94YXR0cl9maW5kX2VudHJ5KG5hbWVfaW5kZXgsIG5hbWUsIHhzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXNpemUgPSBsZTY0X3RvX2NwdSh4cy0+aGVyZS0+eGVfdmFsdWVfc2l6ZSk7CisJaWYgKGJ1ZmZlcikgeworCQlpZiAoc2l6ZSA+IGJ1ZmZlcl9zaXplKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4cy0+aGVyZSkpIHsKKwkJCW1lbWNweShidWZmZXIsICh2b2lkICopeHMtPmJhc2UgKworCQkJICAgICAgIGxlMTZfdG9fY3B1KHhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCkgKworCQkJICAgICAgIE9DRlMyX1hBVFRSX1NJWkUoeHMtPmhlcmUtPnhlX25hbWVfbGVuKSwgc2l6ZSk7CisJCX0gZWxzZSB7CisJCQl4diA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqKQorCQkJCSh4cy0+YmFzZSArIGxlMTZfdG9fY3B1KAorCQkJCSB4cy0+aGVyZS0+eGVfbmFtZV9vZmZzZXQpICsKKwkJCQlPQ0ZTMl9YQVRUUl9TSVpFKHhzLT5oZXJlLT54ZV9uYW1lX2xlbikpOworCQkJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsIHh2LAorCQkJCQkJCSAgICBidWZmZXIsIHNpemUpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2Jsb2NrX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSBpbnQgbmFtZV9pbmRleCwKKwkJCQkgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgdm9pZCAqYnVmZmVyLAorCQkJCSBzaXplX3QgYnVmZmVyX3NpemUsCisJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzKQoreworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKil4cy0+aW5vZGVfYmgtPmJfZGF0YTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YjsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHY7CisJc2l6ZV90IHNpemU7CisJaW50IHJldCA9IC1FTk9EQVRBLCBuYW1lX29mZnNldCwgbmFtZV9sZW4sIGJsb2NrX29mZiwgaTsKKworCWlmICghZGktPmlfeGF0dHJfbG9jKQorCQlyZXR1cm4gcmV0OworCisJbWVtc2V0KCZ4cy0+YnVja2V0LCAwLCBzaXplb2YoeHMtPmJ1Y2tldCkpOworCisJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgbGU2NF90b19jcHUoZGktPmlfeGF0dHJfbG9jKSwgJmJsa19iaCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKlZlcmlmeSB0aGUgc2lnbmF0dXJlIG9mIHhhdHRyIGJsb2NrKi8KKwlpZiAobWVtY21wKCh2b2lkICopYmxrX2JoLT5iX2RhdGEsIE9DRlMyX1hBVFRSX0JMT0NLX1NJR05BVFVSRSwKKwkJICAgc3RybGVuKE9DRlMyX1hBVFRSX0JMT0NLX1NJR05BVFVSRSkpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwl4cy0+eGF0dHJfYmggPSBibGtfYmg7CisJeGIgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopYmxrX2JoLT5iX2RhdGE7CisKKwlpZiAoIShsZTE2X3RvX2NwdSh4Yi0+eGJfZmxhZ3MpICYgT0NGUzJfWEFUVFJfSU5ERVhFRCkpIHsKKwkJeHMtPmhlYWRlciA9ICZ4Yi0+eGJfYXR0cnMueGJfaGVhZGVyOworCQl4cy0+YmFzZSA9ICh2b2lkICopeHMtPmhlYWRlcjsKKwkJeHMtPmVuZCA9ICh2b2lkICopKGJsa19iaC0+Yl9kYXRhKSArIGJsa19iaC0+Yl9zaXplOworCQl4cy0+aGVyZSA9IHhzLT5oZWFkZXItPnhoX2VudHJpZXM7CisKKwkJcmV0ID0gb2NmczJfeGF0dHJfZmluZF9lbnRyeShuYW1lX2luZGV4LCBuYW1lLCB4cyk7CisJfSBlbHNlCisJCXJldCA9IG9jZnMyX3hhdHRyX2luZGV4X2Jsb2NrX2ZpbmQoaW5vZGUsIGJsa19iaCwKKwkJCQkJCSAgIG5hbWVfaW5kZXgsCisJCQkJCQkgICBuYW1lLCB4cyk7CisKKwlpZiAocmV0KQorCQlnb3RvIGNsZWFudXA7CisJc2l6ZSA9IGxlNjRfdG9fY3B1KHhzLT5oZXJlLT54ZV92YWx1ZV9zaXplKTsKKwlpZiAoYnVmZmVyKSB7CisJCXJldCA9IC1FUkFOR0U7CisJCWlmIChzaXplID4gYnVmZmVyX3NpemUpCisJCQlnb3RvIGNsZWFudXA7CisKKwkJbmFtZV9vZmZzZXQgPSBsZTE2X3RvX2NwdSh4cy0+aGVyZS0+eGVfbmFtZV9vZmZzZXQpOworCQluYW1lX2xlbiA9IE9DRlMyX1hBVFRSX1NJWkUoeHMtPmhlcmUtPnhlX25hbWVfbGVuKTsKKwkJaSA9IHhzLT5oZXJlIC0geHMtPmhlYWRlci0+eGhfZW50cmllczsKKworCQlpZiAobGUxNl90b19jcHUoeGItPnhiX2ZsYWdzKSAmIE9DRlMyX1hBVFRSX0lOREVYRUQpIHsKKwkJCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShpbm9kZSwKKwkJCQkJCQkJeHMtPmJ1Y2tldC54aCwKKwkJCQkJCQkJaSwKKwkJCQkJCQkJJmJsb2NrX29mZiwKKwkJCQkJCQkJJm5hbWVfb2Zmc2V0KTsKKwkJCXhzLT5iYXNlID0geHMtPmJ1Y2tldC5iaHNbYmxvY2tfb2ZmXS0+Yl9kYXRhOworCQl9CisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4cy0+aGVyZSkpIHsKKwkJCW1lbWNweShidWZmZXIsICh2b2lkICopeHMtPmJhc2UgKworCQkJICAgICAgIG5hbWVfb2Zmc2V0ICsgbmFtZV9sZW4sIHNpemUpOworCQl9IGVsc2UgeworCQkJeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikKKwkJCQkoeHMtPmJhc2UgKyBuYW1lX29mZnNldCArIG5hbWVfbGVuKTsKKwkJCXJldCA9IG9jZnMyX3hhdHRyX2dldF92YWx1ZV9vdXRzaWRlKGlub2RlLCB4diwKKwkJCQkJCQkgICAgYnVmZmVyLCBzaXplKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJfQorCX0KKwlyZXQgPSBzaXplOworY2xlYW51cDoKKwlmb3IgKGkgPSAwOyBpIDwgT0NGUzJfWEFUVFJfTUFYX0JMT0NLU19QRVJfQlVDS0VUOyBpKyspCisJCWJyZWxzZSh4cy0+YnVja2V0LmJoc1tpXSk7CisJbWVtc2V0KCZ4cy0+YnVja2V0LCAwLCBzaXplb2YoeHMtPmJ1Y2tldCkpOworCisJYnJlbHNlKGJsa19iaCk7CisJcmV0dXJuIHJldDsKK30KKworLyogb2NmczJfeGF0dHJfZ2V0KCkKKyAqCisgKiBDb3B5IGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbnRvIHRoZSBidWZmZXIgcHJvdmlkZWQuCisgKiBCdWZmZXIgaXMgTlVMTCB0byBjb21wdXRlIHRoZSBzaXplIG9mIGJ1ZmZlciByZXF1aXJlZC4KKyAqLworaW50IG9jZnMyX3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgaW50IG5hbWVfaW5kZXgsCisJCSAgICBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgdm9pZCAqYnVmZmVyLAorCQkgICAgc2l6ZV90IGJ1ZmZlcl9zaXplKQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggeGlzID0geworCQkubm90X2ZvdW5kID0gLUVOT0RBVEEsCisJfTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoIHhicyA9IHsKKwkJLm5vdF9mb3VuZCA9IC1FTk9EQVRBLAorCX07CisKKwlpZiAoIW9jZnMyX3N1cHBvcnRzX3hhdHRyKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICghKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9IQVNfWEFUVFJfRkwpKQorCQlyZXQgPSAtRU5PREFUQTsKKworCXJldCA9IG9jZnMyX2lub2RlX2xvY2soaW5vZGUsICZkaV9iaCwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwl4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDsKKwlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKworCWRvd25fcmVhZCgmb2ktPmlwX3hhdHRyX3NlbSk7CisJcmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfZ2V0KGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLCBidWZmZXIsCisJCQkJICAgIGJ1ZmZlcl9zaXplLCAmeGlzKTsKKwlpZiAocmV0ID09IC1FTk9EQVRBKQorCQlyZXQgPSBvY2ZzMl94YXR0cl9ibG9ja19nZXQoaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsIGJ1ZmZlciwKKwkJCQkJICAgIGJ1ZmZlcl9zaXplLCAmeGJzKTsKKwl1cF9yZWFkKCZvaS0+aXBfeGF0dHJfc2VtKTsKKwlvY2ZzMl9pbm9kZV91bmxvY2soaW5vZGUsIDApOworCisJYnJlbHNlKGRpX2JoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYsCisJCQkJCSAgIGNvbnN0IHZvaWQgKnZhbHVlLAorCQkJCQkgICBpbnQgdmFsdWVfbGVuKQoreworCWludCByZXQgPSAwLCBpLCBjcF9sZW4sIGNyZWRpdHM7CisJdTE2IGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKwl1MzIgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnM7CisJdTMyIGNwb3MgPSAwLCBicGMgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIDEpOworCXUzMiBjbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhpbm9kZS0+aV9zYiwgdmFsdWVfbGVuKTsKKwl1NjQgYmxrbm87CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CisJaGFuZGxlX3QgKmhhbmRsZTsKKworCUJVR19PTihjbHVzdGVycyA+IGxlMzJfdG9fY3B1KHh2LT54cl9jbHVzdGVycykpOworCisJY3JlZGl0cyA9IGNsdXN0ZXJzICogYnBjOworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgY3JlZGl0cyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwl3aGlsZSAoY3BvcyA8IGNsdXN0ZXJzKSB7CisJCXJldCA9IG9jZnMyX3hhdHRyX2dldF9jbHVzdGVycyhpbm9kZSwgY3BvcywgJnBfY2x1c3RlciwKKwkJCQkJICAgICAgICZudW1fY2x1c3RlcnMsICZ4di0+eHJfbGlzdCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJfQorCisJCWJsa25vID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLCBwX2NsdXN0ZXIpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1fY2x1c3RlcnMgKiBicGM7IGkrKywgYmxrbm8rKykgeworCQkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgYmxrbm8sICZiaCk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJCX0KKworCQkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLAorCQkJCQkJICAgaW5vZGUsCisJCQkJCQkgICBiaCwKKwkJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJCX0KKworCQkJY3BfbGVuID0gdmFsdWVfbGVuID4gYmxvY2tzaXplID8gYmxvY2tzaXplIDogdmFsdWVfbGVuOworCQkJbWVtY3B5KGJoLT5iX2RhdGEsIHZhbHVlLCBjcF9sZW4pOworCQkJdmFsdWVfbGVuIC09IGNwX2xlbjsKKwkJCXZhbHVlICs9IGNwX2xlbjsKKwkJCWlmIChjcF9sZW4gPCBibG9ja3NpemUpCisJCQkJbWVtc2V0KGJoLT5iX2RhdGEgKyBjcF9sZW4sIDAsCisJCQkJICAgICAgIGJsb2Nrc2l6ZSAtIGNwX2xlbik7CisKKwkJCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBiaCk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIG91dF9jb21taXQ7CisJCQl9CisJCQlicmVsc2UoYmgpOworCQkJYmggPSBOVUxMOworCisJCQkvKgorCQkJICogWFhYOiBkbyB3ZSBuZWVkIHRvIGVtcHR5IGFsbCB0aGUgZm9sbG93aW5nCisJCQkgKiBibG9ja3MgaW4gdGhpcyBjbHVzdGVyPworCQkJICovCisJCQlpZiAoIXZhbHVlX2xlbikKKwkJCQlicmVhazsKKwkJfQorCQljcG9zICs9IG51bV9jbHVzdGVyczsKKwl9CitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGhhbmRsZSk7CitvdXQ6CisJYnJlbHNlKGJoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfY2xlYW51cChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cywKKwkJCSAgICAgICBzaXplX3Qgb2ZmcykKK3sKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKwlzaXplX3QgbmFtZV9sZW4gPSBzdHJsZW4oeGktPm5hbWUpOworCXZvaWQgKnZhbCA9IHhzLT5iYXNlICsgb2ZmczsKKwlzaXplX3Qgc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsgT0NGUzJfWEFUVFJfUk9PVF9TSVpFOworCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMoKE9DRlMyX1NCKGlub2RlLT5pX3NiKSksCisJCQkJICAgT0NGUzJfWEFUVFJfQkxPQ0tfVVBEQVRFX0NSRURJVFMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHhzLT54YXR0cl9iaCwKKwkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisJLyogRGVjcmVhc2UgeGF0dHIgY291bnQgKi8KKwlsZTE2X2FkZF9jcHUoJnhzLT5oZWFkZXItPnhoX2NvdW50LCAtMSk7CisJLyogUmVtb3ZlIHRoZSB4YXR0ciBlbnRyeSBhbmQgdHJlZSByb290IHdoaWNoIGhhcyBhbHJlYWR5IGJlIHNldCovCisJbWVtc2V0KCh2b2lkICopeHMtPmhlcmUsIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKKwltZW1zZXQodmFsLCAwLCBzaXplKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCB4cy0+eGF0dHJfYmgpOworCWlmIChyZXQgPCAwKQorCQltbG9nX2Vycm5vKHJldCk7CitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGhhbmRsZSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl91cGRhdGVfZW50cnkoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cywKKwkJCQkgICAgc2l6ZV90IG9mZnMpCit7CisJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucygoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSwKKwkJCQkgICBPQ0ZTMl9YQVRUUl9CTE9DS19VUERBVEVfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgeHMtPnhhdHRyX2JoLAorCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCXhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCA9IGNwdV90b19sZTE2KG9mZnMpOworCXhzLT5oZXJlLT54ZV92YWx1ZV9zaXplID0gY3B1X3RvX2xlNjQoeGktPnZhbHVlX2xlbik7CisJaWYgKHhpLT52YWx1ZV9sZW4gPD0gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpCisJCW9jZnMyX3hhdHRyX3NldF9sb2NhbCh4cy0+aGVyZSwgMSk7CisJZWxzZQorCQlvY2ZzMl94YXR0cl9zZXRfbG9jYWwoeHMtPmhlcmUsIDApOworCW9jZnMyX3hhdHRyX2hhc2hfZW50cnkoaW5vZGUsIHhzLT5oZWFkZXIsIHhzLT5oZXJlKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCB4cy0+eGF0dHJfYmgpOworCWlmIChyZXQgPCAwKQorCQltbG9nX2Vycm5vKHJldCk7CitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGhhbmRsZSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIG9jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKCkKKyAqCisgKiBTZXQgbGFyZ2Ugc2l6ZSB2YWx1ZSBpbiBCIHRyZWUuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAorCQkJCQkgc2l6ZV90IG9mZnMpCit7CisJc2l6ZV90IG5hbWVfbGVuID0gc3RybGVuKHhpLT5uYW1lKTsKKwl2b2lkICp2YWwgPSB4cy0+YmFzZSArIG9mZnM7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2ID0gTlVMTDsKKwlzaXplX3Qgc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsgT0NGUzJfWEFUVFJfUk9PVF9TSVpFOworCWludCByZXQgPSAwOworCisJbWVtc2V0KHZhbCwgMCwgc2l6ZSk7CisJbWVtY3B5KHZhbCwgeGktPm5hbWUsIG5hbWVfbGVuKTsKKwl4diA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqKQorCQkodmFsICsgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikpOworCXh2LT54cl9jbHVzdGVycyA9IDA7CisJeHYtPnhyX2xhc3RfZWJfYmxrID0gMDsKKwl4di0+eHJfbGlzdC5sX3RyZWVfZGVwdGggPSAwOworCXh2LT54cl9saXN0LmxfY291bnQgPSBjcHVfdG9fbGUxNigxKTsKKwl4di0+eHJfbGlzdC5sX25leHRfZnJlZV9yZWMgPSAwOworCisJcmV0ID0gb2NmczJfeGF0dHJfdmFsdWVfdHJ1bmNhdGUoaW5vZGUsIHhzLT54YXR0cl9iaCwgeHYsCisJCQkJCSB4aS0+dmFsdWVfbGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IF9fb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsIHh2LCB4aS0+dmFsdWUsCisJCQkJCSAgICAgIHhpLT52YWx1ZV9sZW4pOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gb2NmczJfeGF0dHJfdXBkYXRlX2VudHJ5KGlub2RlLCB4aSwgeHMsIG9mZnMpOworCWlmIChyZXQgPCAwKQorCQltbG9nX2Vycm5vKHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogb2NmczJfeGF0dHJfc2V0X2VudHJ5X2xvY2FsKCkKKyAqCisgKiBTZXQsIHJlcGxhY2Ugb3IgcmVtb3ZlIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBsb2NhbC4KKyAqLworc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfc2V0X2VudHJ5X2xvY2FsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqbGFzdCwKKwkJCQkJc2l6ZV90IG1pbl9vZmZzKQoreworCXNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbih4aS0+bmFtZSk7CisJaW50IGk7CisKKwlpZiAoeGktPnZhbHVlICYmIHhzLT5ub3RfZm91bmQpIHsKKwkJLyogSW5zZXJ0IHRoZSBuZXcgeGF0dHIgZW50cnkuICovCisJCWxlMTZfYWRkX2NwdSgmeHMtPmhlYWRlci0+eGhfY291bnQsIDEpOworCQlvY2ZzMl94YXR0cl9zZXRfdHlwZShsYXN0LCB4aS0+bmFtZV9pbmRleCk7CisJCW9jZnMyX3hhdHRyX3NldF9sb2NhbChsYXN0LCAxKTsKKwkJbGFzdC0+eGVfbmFtZV9sZW4gPSBuYW1lX2xlbjsKKwl9IGVsc2UgeworCQl2b2lkICpmaXJzdF92YWw7CisJCXZvaWQgKnZhbDsKKwkJc2l6ZV90IG9mZnMsIHNpemU7CisKKwkJZmlyc3RfdmFsID0geHMtPmJhc2UgKyBtaW5fb2ZmczsKKwkJb2ZmcyA9IGxlMTZfdG9fY3B1KHhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCk7CisJCXZhbCA9IHhzLT5iYXNlICsgb2ZmczsKKworCQlpZiAobGU2NF90b19jcHUoeHMtPmhlcmUtPnhlX3ZhbHVlX3NpemUpID4KKwkJICAgIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKQorCQkJc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKKwkJCQlPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7CisJCWVsc2UKKwkJCXNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCisJCQlPQ0ZTMl9YQVRUUl9TSVpFKGxlNjRfdG9fY3B1KHhzLT5oZXJlLT54ZV92YWx1ZV9zaXplKSk7CisKKwkJaWYgKHhpLT52YWx1ZSAmJiBzaXplID09IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKKwkJCQlPQ0ZTMl9YQVRUUl9TSVpFKHhpLT52YWx1ZV9sZW4pKSB7CisJCQkvKiBUaGUgb2xkIGFuZCB0aGUgbmV3IHZhbHVlIGhhdmUgdGhlCisJCQkgICBzYW1lIHNpemUuIEp1c3QgcmVwbGFjZSB0aGUgdmFsdWUuICovCisJCQlvY2ZzMl94YXR0cl9zZXRfbG9jYWwoeHMtPmhlcmUsIDEpOworCQkJeHMtPmhlcmUtPnhlX3ZhbHVlX3NpemUgPSBjcHVfdG9fbGU2NCh4aS0+dmFsdWVfbGVuKTsKKwkJCS8qIENsZWFyIHZhbHVlIGJ5dGVzLiAqLworCQkJbWVtc2V0KHZhbCArIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pLAorCQkJICAgICAgIDAsCisJCQkgICAgICAgT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKSk7CisJCQltZW1jcHkodmFsICsgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbiksCisJCQkgICAgICAgeGktPnZhbHVlLAorCQkJICAgICAgIHhpLT52YWx1ZV9sZW4pOworCQkJcmV0dXJuOworCQl9CisJCS8qIFJlbW92ZSB0aGUgb2xkIG5hbWUrdmFsdWUuICovCisJCW1lbW1vdmUoZmlyc3RfdmFsICsgc2l6ZSwgZmlyc3RfdmFsLCB2YWwgLSBmaXJzdF92YWwpOworCQltZW1zZXQoZmlyc3RfdmFsLCAwLCBzaXplKTsKKwkJeHMtPmhlcmUtPnhlX25hbWVfaGFzaCA9IDA7CisJCXhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCA9IDA7CisJCW9jZnMyX3hhdHRyX3NldF9sb2NhbCh4cy0+aGVyZSwgMSk7CisJCXhzLT5oZXJlLT54ZV92YWx1ZV9zaXplID0gMDsKKworCQltaW5fb2ZmcyArPSBzaXplOworCisJCS8qIEFkanVzdCBhbGwgdmFsdWUgb2Zmc2V0cy4gKi8KKwkJbGFzdCA9IHhzLT5oZWFkZXItPnhoX2VudHJpZXM7CisJCWZvciAoaSA9IDAgOyBpIDwgbGUxNl90b19jcHUoeHMtPmhlYWRlci0+eGhfY291bnQpOyBpKyspIHsKKwkJCXNpemVfdCBvID0gbGUxNl90b19jcHUobGFzdC0+eGVfbmFtZV9vZmZzZXQpOworCisJCQlpZiAobyA8IG9mZnMpCisJCQkJbGFzdC0+eGVfbmFtZV9vZmZzZXQgPSBjcHVfdG9fbGUxNihvICsgc2l6ZSk7CisJCQlsYXN0ICs9IDE7CisJCX0KKworCQlpZiAoIXhpLT52YWx1ZSkgeworCQkJLyogUmVtb3ZlIHRoZSBvbGQgZW50cnkuICovCisJCQlsYXN0IC09IDE7CisJCQltZW1tb3ZlKHhzLT5oZXJlLCB4cy0+aGVyZSArIDEsCisJCQkJKHZvaWQgKilsYXN0IC0gKHZvaWQgKil4cy0+aGVyZSk7CisJCQltZW1zZXQobGFzdCwgMCwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkpOworCQkJbGUxNl9hZGRfY3B1KCZ4cy0+aGVhZGVyLT54aF9jb3VudCwgLTEpOworCQl9CisJfQorCWlmICh4aS0+dmFsdWUpIHsKKwkJLyogSW5zZXJ0IHRoZSBuZXcgbmFtZSt2YWx1ZS4gKi8KKwkJc2l6ZV90IHNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCisJCQkJT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKTsKKwkJdm9pZCAqdmFsID0geHMtPmJhc2UgKyBtaW5fb2ZmcyAtIHNpemU7CisKKwkJeHMtPmhlcmUtPnhlX25hbWVfb2Zmc2V0ID0gY3B1X3RvX2xlMTYobWluX29mZnMgLSBzaXplKTsKKwkJbWVtc2V0KHZhbCwgMCwgc2l6ZSk7CisJCW1lbWNweSh2YWwsIHhpLT5uYW1lLCBuYW1lX2xlbik7CisJCW1lbWNweSh2YWwgKyBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSwKKwkJICAgICAgIHhpLT52YWx1ZSwKKwkJICAgICAgIHhpLT52YWx1ZV9sZW4pOworCQl4cy0+aGVyZS0+eGVfdmFsdWVfc2l6ZSA9IGNwdV90b19sZTY0KHhpLT52YWx1ZV9sZW4pOworCQlvY2ZzMl94YXR0cl9zZXRfbG9jYWwoeHMtPmhlcmUsIDEpOworCQlvY2ZzMl94YXR0cl9oYXNoX2VudHJ5KGlub2RlLCB4cy0+aGVhZGVyLCB4cy0+aGVyZSk7CisJfQorCisJcmV0dXJuOworfQorCisvKgorICogb2NmczJfeGF0dHJfc2V0X2VudHJ5KCkKKyAqCisgKiBTZXQgZXh0ZW5kZWQgYXR0cmlidXRlIGVudHJ5IGludG8gaW5vZGUgb3IgYmxvY2suCisgKgorICogSWYgZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlIHNpemUgPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSwKKyAqIFdlIGZpcnN0IGluc2VydCB0cmVlIHJvb3Qob2NmczJfeGF0dHJfdmFsdWVfcm9vdCkgd2l0aCBzZXRfZW50cnlfbG9jYWwoKSwKKyAqIHRoZW4gc2V0IHZhbHVlIGluIEIgdHJlZSB3aXRoIHNldF92YWx1ZV9vdXRzaWRlKCkuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCisJCQkJIGludCBmbGFnKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqbGFzdDsKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopeHMtPmlub2RlX2JoLT5iX2RhdGE7CisJc2l6ZV90IG1pbl9vZmZzID0geHMtPmVuZCAtIHhzLT5iYXNlLCBuYW1lX2xlbiA9IHN0cmxlbih4aS0+bmFtZSk7CisJc2l6ZV90IHNpemVfbCA9IDA7CisJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisJaW50IGZyZWUsIGksIHJldDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyB4aV9sID0geworCQkubmFtZV9pbmRleCA9IHhpLT5uYW1lX2luZGV4LAorCQkubmFtZSA9IHhpLT5uYW1lLAorCQkudmFsdWUgPSB4aS0+dmFsdWUsCisJCS52YWx1ZV9sZW4gPSB4aS0+dmFsdWVfbGVuLAorCX07CisKKwkvKiBDb21wdXRlIG1pbl9vZmZzLCBsYXN0IGFuZCBmcmVlIHNwYWNlLiAqLworCWxhc3QgPSB4cy0+aGVhZGVyLT54aF9lbnRyaWVzOworCisJZm9yIChpID0gMCA7IGkgPCBsZTE2X3RvX2NwdSh4cy0+aGVhZGVyLT54aF9jb3VudCk7IGkrKykgeworCQlzaXplX3Qgb2ZmcyA9IGxlMTZfdG9fY3B1KGxhc3QtPnhlX25hbWVfb2Zmc2V0KTsKKwkJaWYgKG9mZnMgPCBtaW5fb2ZmcykKKwkJCW1pbl9vZmZzID0gb2ZmczsKKwkJbGFzdCArPSAxOworCX0KKworCWZyZWUgPSBtaW5fb2ZmcyAtICgodm9pZCAqKWxhc3QgLSB4cy0+YmFzZSkgLSBzaXplb2YoX191MzIpOworCWlmIChmcmVlIDwgMCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoIXhzLT5ub3RfZm91bmQpIHsKKwkJc2l6ZV90IHNpemUgPSAwOworCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeHMtPmhlcmUpKQorCQkJc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKKwkJCU9DRlMyX1hBVFRSX1NJWkUobGU2NF90b19jcHUoeHMtPmhlcmUtPnhlX3ZhbHVlX3NpemUpKTsKKwkJZWxzZQorCQkJc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKKwkJCQlPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7CisJCWZyZWUgKz0gKHNpemUgKyBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSk7CisJfQorCS8qIENoZWNrIGZyZWUgc3BhY2UgaW4gaW5vZGUgb3IgYmxvY2sgKi8KKwlpZiAoeGktPnZhbHVlICYmIHhpLT52YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgeworCQlpZiAoZnJlZSA8IHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpICsKKwkJCSAgIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKKwkJCSAgIE9DRlMyX1hBVFRSX1JPT1RfU0laRSkgeworCQkJcmV0ID0gLUVOT1NQQzsKKwkJCWdvdG8gb3V0OworCQl9CisJCXNpemVfbCA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsgT0NGUzJfWEFUVFJfUk9PVF9TSVpFOworCQl4aV9sLnZhbHVlID0gKHZvaWQgKikmZGVmX3h2OworCQl4aV9sLnZhbHVlX2xlbiA9IE9DRlMyX1hBVFRSX1JPT1RfU0laRTsKKwl9IGVsc2UgaWYgKHhpLT52YWx1ZSkgeworCQlpZiAoZnJlZSA8IHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpICsKKwkJCSAgIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKKwkJCSAgIE9DRlMyX1hBVFRSX1NJWkUoeGktPnZhbHVlX2xlbikpIHsKKwkJCXJldCA9IC1FTk9TUEM7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmICgheHMtPm5vdF9mb3VuZCkgeworCQkvKiBGb3IgZXhpc3RpbmcgZXh0ZW5kZWQgYXR0cmlidXRlICovCisJCXNpemVfdCBzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKworCQkJT0NGUzJfWEFUVFJfU0laRShsZTY0X3RvX2NwdSh4cy0+aGVyZS0+eGVfdmFsdWVfc2l6ZSkpOworCQlzaXplX3Qgb2ZmcyA9IGxlMTZfdG9fY3B1KHhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCk7CisJCXZvaWQgKnZhbCA9IHhzLT5iYXNlICsgb2ZmczsKKworCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeHMtPmhlcmUpICYmIHNpemUgPT0gc2l6ZV9sKSB7CisJCQkvKiBSZXBsYWNlIGV4aXN0aW5nIGxvY2FsIHhhdHRyIHdpdGggdHJlZSByb290ICovCisJCQlyZXQgPSBvY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgeGksIHhzLAorCQkJCQkJCSAgICBvZmZzKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgaWYgKCFvY2ZzMl94YXR0cl9pc19sb2NhbCh4cy0+aGVyZSkpIHsKKwkJCS8qIEZvciBleGlzdGluZyB4YXR0ciB3aGljaCBoYXMgdmFsdWUgb3V0c2lkZSAqLworCQkJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2ID0gTlVMTDsKKwkJCXh2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopKHZhbCArCisJCQkJT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikpOworCisJCQlpZiAoeGktPnZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7CisJCQkJLyoKKwkJCQkgKiBJZiBuZXcgdmFsdWUgbmVlZCBzZXQgb3V0c2lkZSBhbHNvLAorCQkJCSAqIGZpcnN0IHRydW5jYXRlIG9sZCB2YWx1ZSB0byBuZXcgdmFsdWUsCisJCQkJICogdGhlbiBzZXQgbmV3IHZhbHVlIHdpdGggc2V0X3ZhbHVlX291dHNpZGUoKS4KKwkJCQkgKi8KKwkJCQlyZXQgPSBvY2ZzMl94YXR0cl92YWx1ZV90cnVuY2F0ZShpbm9kZSwKKwkJCQkJCQkJIHhzLT54YXR0cl9iaCwKKwkJCQkJCQkJIHh2LAorCQkJCQkJCQkgeGktPnZhbHVlX2xlbik7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisKKwkJCQlyZXQgPSBfX29jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKGlub2RlLAorCQkJCQkJCQl4diwKKwkJCQkJCQkJeGktPnZhbHVlLAorCQkJCQkJCQl4aS0+dmFsdWVfbGVuKTsKKwkJCQlpZiAocmV0IDwgMCkgeworCQkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKworCQkJCXJldCA9IG9jZnMyX3hhdHRyX3VwZGF0ZV9lbnRyeShpbm9kZSwKKwkJCQkJCQkgICAgICAgeGksCisJCQkJCQkJICAgICAgIHhzLAorCQkJCQkJCSAgICAgICBvZmZzKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIElmIG5ldyB2YWx1ZSBuZWVkIHNldCBpbiBsb2NhbCwKKwkJCQkgKiBqdXN0IHRydWNhdGUgb2xkIHZhbHVlIHRvIHplcm8uCisJCQkJICovCisJCQkJIHJldCA9IG9jZnMyX3hhdHRyX3ZhbHVlX3RydW5jYXRlKGlub2RlLAorCQkJCQkJCQkgeHMtPnhhdHRyX2JoLAorCQkJCQkJCQkgeHYsCisJCQkJCQkJCSAwKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJfQorCQl9CisJfQorCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMoKE9DRlMyX1NCKGlub2RlLT5pX3NiKSksCisJCQkJICAgT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgeHMtPmlub2RlX2JoLAorCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCWlmICghKGZsYWcgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpKSB7CisJCS8qIHNldCBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gZXh0ZXJuYWwgYmxvY2suICovCisJCXJldCA9IG9jZnMyX2V4dGVuZF90cmFucyhoYW5kbGUsCisJCQkJCSBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyArCisJCQkJCSBPQ0ZTMl9YQVRUUl9CTE9DS19VUERBVEVfQ1JFRElUUyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJfQorCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB4cy0+eGF0dHJfYmgsCisJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisJfQorCisJLyoKKwkgKiBTZXQgdmFsdWUgaW4gbG9jYWwsIGluY2x1ZGUgc2V0IHRyZWUgcm9vdCBpbiBsb2NhbC4KKwkgKiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGZvciB2YWx1ZSBzaXplID5JTkxJTkVfU0laRS4KKwkgKi8KKwlvY2ZzMl94YXR0cl9zZXRfZW50cnlfbG9jYWwoaW5vZGUsICZ4aV9sLCB4cywgbGFzdCwgbWluX29mZnMpOworCisJaWYgKCEoZmxhZyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkpIHsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHhzLT54YXR0cl9iaCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9jb21taXQ7CisJCX0KKwl9CisKKwlpZiAoIShvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSAmJgorCSAgICAoZmxhZyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkpIHsKKwkJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJCXVuc2lnbmVkIGludCB4YXR0cnNpemUgPSBvc2ItPnNfeGF0dHJfaW5saW5lX3NpemU7CisKKwkJLyoKKwkJICogQWRqdXN0IGV4dGVudCByZWNvcmQgY291bnQgb3IgaW5saW5lIGRhdGEgc2l6ZQorCQkgKiB0byByZXNlcnZlIHNwYWNlIGZvciBleHRlbmRlZCBhdHRyaWJ1dGUuCisJCSAqLworCQlpZiAob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKSB7CisJCQlzdHJ1Y3Qgb2NmczJfaW5saW5lX2RhdGEgKmlkYXRhID0gJmRpLT5pZDIuaV9kYXRhOworCQkJbGUxNl9hZGRfY3B1KCZpZGF0YS0+aWRfY291bnQsIC14YXR0cnNpemUpOworCQl9IGVsc2UgaWYgKCEob2NmczJfaW5vZGVfaXNfZmFzdF9zeW1saW5rKGlub2RlKSkpIHsKKwkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwgPSAmZGktPmlkMi5pX2xpc3Q7CisJCQlsZTE2X2FkZF9jcHUoJmVsLT5sX2NvdW50LCAtKHhhdHRyc2l6ZSAvCisJCQkJCXNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYykpKTsKKwkJfQorCQlkaS0+aV94YXR0cl9pbmxpbmVfc2l6ZSA9IGNwdV90b19sZTE2KHhhdHRyc2l6ZSk7CisJfQorCS8qIFVwZGF0ZSB4YXR0ciBmbGFnICovCisJc3Bpbl9sb2NrKCZvaS0+aXBfbG9jayk7CisJb2ktPmlwX2R5bl9mZWF0dXJlcyB8PSBmbGFnOworCWRpLT5pX2R5bl9mZWF0dXJlcyA9IGNwdV90b19sZTE2KG9pLT5pcF9keW5fZmVhdHVyZXMpOworCXNwaW5fdW5sb2NrKCZvaS0+aXBfbG9jayk7CisJLyogVXBkYXRlIGlub2RlIGN0aW1lICovCisJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJZGktPmlfY3RpbWUgPSBjcHVfdG9fbGU2NChpbm9kZS0+aV9jdGltZS50dl9zZWMpOworCWRpLT5pX2N0aW1lX25zZWMgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9jdGltZS50dl9uc2VjKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCB4cy0+aW5vZGVfYmgpOworCWlmIChyZXQgPCAwKQorCQltbG9nX2Vycm5vKHJldCk7CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgaGFuZGxlKTsKKworCWlmICghcmV0ICYmIHhpLT52YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgeworCQkvKgorCQkgKiBTZXQgdmFsdWUgb3V0c2lkZSBpbiBCIHRyZWUuCisJCSAqIFRoaXMgaXMgdGhlIHNlY29uZCBzdGVwIGZvciB2YWx1ZSBzaXplID4gSU5MSU5FX1NJWkUuCisJCSAqLworCQlzaXplX3Qgb2ZmcyA9IGxlMTZfdG9fY3B1KHhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCk7CisJCXJldCA9IG9jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKGlub2RlLCB4aSwgeHMsIG9mZnMpOworCQlpZiAocmV0IDwgMCkgeworCQkJaW50IHJldDI7CisKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCS8qCisJCQkgKiBJZiBzZXQgdmFsdWUgb3V0c2lkZSBmYWlsZWQsIHdlIGhhdmUgdG8gY2xlYW4KKwkJCSAqIHRoZSBqdW5rIHRyZWUgcm9vdCB3ZSBoYXZlIGFscmVhZHkgc2V0IGluIGxvY2FsLgorCQkJICovCisJCQlyZXQyID0gb2NmczJfeGF0dHJfY2xlYW51cChpbm9kZSwgeGksIHhzLCBvZmZzKTsKKwkJCWlmIChyZXQyIDwgMCkKKwkJCQltbG9nX2Vycm5vKHJldDIpOworCQl9CisJfQorb3V0OgorCXJldHVybiByZXQ7CisKK30KKworc3RhdGljIGludCBvY2ZzMl9yZW1vdmVfdmFsdWVfb3V0c2lkZShzdHJ1Y3QgaW5vZGUqaW5vZGUsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpoZWFkZXIpCit7CisJaW50IHJldCA9IDAsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoaGVhZGVyLT54aF9jb3VudCk7IGkrKykgeworCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmVudHJ5ID0gJmhlYWRlci0+eGhfZW50cmllc1tpXTsKKworCQlpZiAoIW9jZnMyX3hhdHRyX2lzX2xvY2FsKGVudHJ5KSkgeworCQkJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2OworCQkJdm9pZCAqdmFsOworCisJCQl2YWwgPSAodm9pZCAqKWhlYWRlciArCisJCQkJbGUxNl90b19jcHUoZW50cnktPnhlX25hbWVfb2Zmc2V0KTsKKwkJCXh2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopCisJCQkJKHZhbCArIE9DRlMyX1hBVFRSX1NJWkUoZW50cnktPnhlX25hbWVfbGVuKSk7CisJCQlyZXQgPSBvY2ZzMl94YXR0cl92YWx1ZV90cnVuY2F0ZShpbm9kZSwgYmgsIHh2LCAwKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2lib2R5X3JlbW92ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQoreworCisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqaGVhZGVyOworCWludCByZXQ7CisKKwloZWFkZXIgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKQorCQkgKCh2b2lkICopZGkgKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLQorCQkgbGUxNl90b19jcHUoZGktPmlfeGF0dHJfaW5saW5lX3NpemUpKTsKKworCXJldCA9IG9jZnMyX3JlbW92ZV92YWx1ZV9vdXRzaWRlKGlub2RlLCBkaV9iaCwgaGVhZGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfYmxvY2tfcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGI7CisJaW50IHJldCA9IDA7CisKKwl4YiA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKilibGtfYmgtPmJfZGF0YTsKKwlpZiAoIShsZTE2X3RvX2NwdSh4Yi0+eGJfZmxhZ3MpICYgT0NGUzJfWEFUVFJfSU5ERVhFRCkpIHsKKwkJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqaGVhZGVyID0gJih4Yi0+eGJfYXR0cnMueGJfaGVhZGVyKTsKKwkJcmV0ID0gb2NmczJfcmVtb3ZlX3ZhbHVlX291dHNpZGUoaW5vZGUsIGJsa19iaCwgaGVhZGVyKTsKKwl9IGVsc2UKKwkJcmV0ID0gb2NmczJfZGVsZXRlX3hhdHRyX2luZGV4X2Jsb2NrKGlub2RlLCBibGtfYmgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICB1NjQgYmxvY2spCit7CisJc3RydWN0IGlub2RlICp4Yl9hbGxvY19pbm9kZTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnhiX2FsbG9jX2JoID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YjsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwloYW5kbGVfdCAqaGFuZGxlOworCWludCByZXQgPSAwOworCXU2NCBibGssIGJnX2Jsa25vOworCXUxNiBiaXQ7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBibG9jaywgJmJsa19iaCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKlZlcmlmeSB0aGUgc2lnbmF0dXJlIG9mIHhhdHRyIGJsb2NrKi8KKwlpZiAobWVtY21wKCh2b2lkICopYmxrX2JoLT5iX2RhdGEsIE9DRlMyX1hBVFRSX0JMT0NLX1NJR05BVFVSRSwKKwkJICAgc3RybGVuKE9DRlMyX1hBVFRSX0JMT0NLX1NJR05BVFVSRSkpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX3hhdHRyX2Jsb2NrX3JlbW92ZShpbm9kZSwgYmxrX2JoKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXhiID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKWJsa19iaC0+Yl9kYXRhOworCWJsayA9IGxlNjRfdG9fY3B1KHhiLT54Yl9ibGtubyk7CisJYml0ID0gbGUxNl90b19jcHUoeGItPnhiX3N1YmFsbG9jX2JpdCk7CisJYmdfYmxrbm8gPSBvY2ZzMl93aGljaF9zdWJhbGxvY19ncm91cChibGssIGJpdCk7CisKKwl4Yl9hbGxvY19pbm9kZSA9IG9jZnMyX2dldF9zeXN0ZW1fZmlsZV9pbm9kZShvc2IsCisJCQkJRVhURU5UX0FMTE9DX1NZU1RFTV9JTk9ERSwKKwkJCQlsZTE2X3RvX2NwdSh4Yi0+eGJfc3ViYWxsb2Nfc2xvdCkpOworCWlmICgheGJfYWxsb2NfaW5vZGUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJbXV0ZXhfbG9jaygmeGJfYWxsb2NfaW5vZGUtPmlfbXV0ZXgpOworCisJcmV0ID0gb2NmczJfaW5vZGVfbG9jayh4Yl9hbGxvY19pbm9kZSwgJnhiX2FsbG9jX2JoLCAxKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X211dGV4OworCX0KKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgT0NGUzJfU1VCQUxMT0NfRlJFRSk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJcmV0ID0gb2NmczJfZnJlZV9zdWJhbGxvY19iaXRzKGhhbmRsZSwgeGJfYWxsb2NfaW5vZGUsIHhiX2FsbG9jX2JoLAorCQkJCSAgICAgICBiaXQsIGJnX2Jsa25vLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJbWxvZ19lcnJubyhyZXQpOworCisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKK291dF91bmxvY2s6CisJb2NmczJfaW5vZGVfdW5sb2NrKHhiX2FsbG9jX2lub2RlLCAxKTsKKwlicmVsc2UoeGJfYWxsb2NfYmgpOworb3V0X211dGV4OgorCW11dGV4X3VubG9jaygmeGJfYWxsb2NfaW5vZGUtPmlfbXV0ZXgpOworCWlwdXQoeGJfYWxsb2NfaW5vZGUpOworb3V0OgorCWJyZWxzZShibGtfYmgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBvY2ZzMl94YXR0cl9yZW1vdmUoKQorICoKKyAqIEZyZWUgZXh0ZW5kZWQgYXR0cmlidXRlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbm9kZS4KKyAqLworaW50IG9jZnMyX3hhdHRyX3JlbW92ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQoreworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCWhhbmRsZV90ICpoYW5kbGU7CisJaW50IHJldDsKKworCWlmICghb2NmczJfc3VwcG9ydHNfeGF0dHIoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIShvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1hBVFRSX0ZMKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkgeworCQlyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9yZW1vdmUoaW5vZGUsIGRpX2JoKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGRpLT5pX3hhdHRyX2xvYykgeworCQlyZXQgPSBvY2ZzMl94YXR0cl9mcmVlX2Jsb2NrKGlub2RlLAorCQkJCQkgICAgIGxlNjRfdG9fY3B1KGRpLT5pX3hhdHRyX2xvYykpOworCQlpZiAocmV0IDwgMCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucygoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSwKKwkJCQkgICBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZGlfYmgsCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJZGktPmlfeGF0dHJfbG9jID0gMDsKKworCXNwaW5fbG9jaygmb2ktPmlwX2xvY2spOworCW9pLT5pcF9keW5fZmVhdHVyZXMgJj0gfihPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwgfCBPQ0ZTMl9IQVNfWEFUVFJfRkwpOworCWRpLT5pX2R5bl9mZWF0dXJlcyA9IGNwdV90b19sZTE2KG9pLT5pcF9keW5fZmVhdHVyZXMpOworCXNwaW5fdW5sb2NrKCZvaS0+aXBfbG9jayk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZGlfYmgpOworCWlmIChyZXQgPCAwKQorCQltbG9nX2Vycm5vKHJldCk7CitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGhhbmRsZSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9oYXNfc3BhY2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpKQoreworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXVuc2lnbmVkIGludCB4YXR0cnNpemUgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYiktPnNfeGF0dHJfaW5saW5lX3NpemU7CisJaW50IGZyZWU7CisKKwlpZiAoeGF0dHJzaXplIDwgT0NGUzJfTUlOX1hBVFRSX0lOTElORV9TSVpFKQorCQlyZXR1cm4gMDsKKworCWlmIChvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpIHsKKwkJc3RydWN0IG9jZnMyX2lubGluZV9kYXRhICppZGF0YSA9ICZkaS0+aWQyLmlfZGF0YTsKKwkJZnJlZSA9IGxlMTZfdG9fY3B1KGlkYXRhLT5pZF9jb3VudCkgLSBsZTY0X3RvX2NwdShkaS0+aV9zaXplKTsKKwl9IGVsc2UgaWYgKG9jZnMyX2lub2RlX2lzX2Zhc3Rfc3ltbGluayhpbm9kZSkpIHsKKwkJZnJlZSA9IG9jZnMyX2Zhc3Rfc3ltbGlua19jaGFycyhpbm9kZS0+aV9zYikgLQorCQkJbGU2NF90b19jcHUoZGktPmlfc2l6ZSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9ICZkaS0+aWQyLmlfbGlzdDsKKwkJZnJlZSA9IChsZTE2X3RvX2NwdShlbC0+bF9jb3VudCkgLQorCQkJbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykpICoKKwkJCXNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyk7CisJfQorCWlmIChmcmVlID49IHhhdHRyc2l6ZSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG9jZnMyX3hhdHRyX2lib2R5X2ZpbmQoKQorICoKKyAqIEZpbmQgZXh0ZW5kZWQgYXR0cmlidXRlIGluIGlub2RlIGJsb2NrIGFuZAorICogZmlsbCBzZWFyY2ggaW5mbyBpbnRvIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2guCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfaWJvZHlfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgaW50IG5hbWVfaW5kZXgsCisJCQkJICBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpCit7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXhzLT5pbm9kZV9iaC0+Yl9kYXRhOworCWludCByZXQ7CisJaW50IGhhc19zcGFjZSA9IDA7CisKKwlpZiAoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplID09IE9DRlMyX01JTl9CTE9DS1NJWkUpCisJCXJldHVybiAwOworCisJaWYgKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkpIHsKKwkJZG93bl9yZWFkKCZvaS0+aXBfYWxsb2Nfc2VtKTsKKwkJaGFzX3NwYWNlID0gb2NmczJfeGF0dHJfaGFzX3NwYWNlX2lubGluZShpbm9kZSwgZGkpOworCQl1cF9yZWFkKCZvaS0+aXBfYWxsb2Nfc2VtKTsKKwkJaWYgKCFoYXNfc3BhY2UpCisJCQlyZXR1cm4gMDsKKwl9CisKKwl4cy0+eGF0dHJfYmggPSB4cy0+aW5vZGVfYmg7CisJeHMtPmVuZCA9ICh2b2lkICopZGkgKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisJaWYgKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpCisJCXhzLT5oZWFkZXIgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKQorCQkJKHhzLT5lbmQgLSBsZTE2X3RvX2NwdShkaS0+aV94YXR0cl9pbmxpbmVfc2l6ZSkpOworCWVsc2UKKwkJeHMtPmhlYWRlciA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopCisJCQkoeHMtPmVuZCAtIE9DRlMyX1NCKGlub2RlLT5pX3NiKS0+c194YXR0cl9pbmxpbmVfc2l6ZSk7CisJeHMtPmJhc2UgPSAodm9pZCAqKXhzLT5oZWFkZXI7CisJeHMtPmhlcmUgPSB4cy0+aGVhZGVyLT54aF9lbnRyaWVzOworCisJLyogRmluZCB0aGUgbmFtZWQgYXR0cmlidXRlLiAqLworCWlmIChvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSB7CisJCXJldCA9IG9jZnMyX3hhdHRyX2ZpbmRfZW50cnkobmFtZV9pbmRleCwgbmFtZSwgeHMpOworCQlpZiAocmV0ICYmIHJldCAhPSAtRU5PREFUQSkKKwkJCXJldHVybiByZXQ7CisJCXhzLT5ub3RfZm91bmQgPSByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBvY2ZzMl94YXR0cl9pYm9keV9zZXQoKQorICoKKyAqIFNldCwgcmVwbGFjZSBvciByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGludG8gaW5vZGUgYmxvY2suCisgKgorICovCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2lib2R5X3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCisJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzKQoreworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKil4cy0+aW5vZGVfYmgtPmJfZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSA9PSBPQ0ZTMl9NSU5fQkxPQ0tTSVpFKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWRvd25fd3JpdGUoJm9pLT5pcF9hbGxvY19zZW0pOworCWlmICghKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpKSB7CisJCWlmICghb2NmczJfeGF0dHJfaGFzX3NwYWNlX2lubGluZShpbm9kZSwgZGkpKSB7CisJCQlyZXQgPSAtRU5PU1BDOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlyZXQgPSBvY2ZzMl94YXR0cl9zZXRfZW50cnkoaW5vZGUsIHhpLCB4cywKKwkJCQkoT0NGUzJfSU5MSU5FX1hBVFRSX0ZMIHwgT0NGUzJfSEFTX1hBVFRSX0ZMKSk7CitvdXQ6CisJdXBfd3JpdGUoJm9pLT5pcF9hbGxvY19zZW0pOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIG9jZnMyX3hhdHRyX2Jsb2NrX2ZpbmQoKQorICoKKyAqIEZpbmQgZXh0ZW5kZWQgYXR0cmlidXRlIGluIGV4dGVybmFsIGJsb2NrIGFuZAorICogZmlsbCBzZWFyY2ggaW5mbyBpbnRvIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2guCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfYmxvY2tfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgaW50IG5hbWVfaW5kZXgsCisJCQkJICBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpCit7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXhzLT5pbm9kZV9iaC0+Yl9kYXRhOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiOworCWludCByZXQgPSAwOworCisJaWYgKCFkaS0+aV94YXR0cl9sb2MpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBsZTY0X3RvX2NwdShkaS0+aV94YXR0cl9sb2MpLCAmYmxrX2JoKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCS8qVmVyaWZ5IHRoZSBzaWduYXR1cmUgb2YgeGF0dHIgYmxvY2sqLworCWlmIChtZW1jbXAoKHZvaWQgKilibGtfYmgtPmJfZGF0YSwgT0NGUzJfWEFUVFJfQkxPQ0tfU0lHTkFUVVJFLAorCQkgICBzdHJsZW4oT0NGUzJfWEFUVFJfQkxPQ0tfU0lHTkFUVVJFKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJeHMtPnhhdHRyX2JoID0gYmxrX2JoOworCXhiID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKWJsa19iaC0+Yl9kYXRhOworCisJaWYgKCEobGUxNl90b19jcHUoeGItPnhiX2ZsYWdzKSAmIE9DRlMyX1hBVFRSX0lOREVYRUQpKSB7CisJCXhzLT5oZWFkZXIgPSAmeGItPnhiX2F0dHJzLnhiX2hlYWRlcjsKKwkJeHMtPmJhc2UgPSAodm9pZCAqKXhzLT5oZWFkZXI7CisJCXhzLT5lbmQgPSAodm9pZCAqKShibGtfYmgtPmJfZGF0YSkgKyBibGtfYmgtPmJfc2l6ZTsKKwkJeHMtPmhlcmUgPSB4cy0+aGVhZGVyLT54aF9lbnRyaWVzOworCisJCXJldCA9IG9jZnMyX3hhdHRyX2ZpbmRfZW50cnkobmFtZV9pbmRleCwgbmFtZSwgeHMpOworCX0gZWxzZQorCQlyZXQgPSBvY2ZzMl94YXR0cl9pbmRleF9ibG9ja19maW5kKGlub2RlLCBibGtfYmgsCisJCQkJCQkgICBuYW1lX2luZGV4LAorCQkJCQkJICAgbmFtZSwgeHMpOworCisJaWYgKHJldCAmJiByZXQgIT0gLUVOT0RBVEEpIHsKKwkJeHMtPnhhdHRyX2JoID0gTlVMTDsKKwkJZ290byBjbGVhbnVwOworCX0KKwl4cy0+bm90X2ZvdW5kID0gcmV0OworCXJldHVybiAwOworY2xlYW51cDoKKwlicmVsc2UoYmxrX2JoKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBXaGVuIGFsbCB0aGUgeGF0dHJzIGFyZSBkZWxldGVkIGZyb20gaW5kZXggYnRyZWUsIHRoZSBvY2ZzMl94YXR0cl90cmVlCisgKiB3aWxsIGJlIGVyYXNlZCBhbmQgb2NmczJfeGF0dHJfYmxvY2sgd2lsbCBoYXZlIGl0cyBvY2ZzMl94YXR0cl9oZWFkZXIKKyAqIHJlLWluaXRpYWxpemVkLgorICovCitzdGF0aWMgaW50IG9jZnMyX3Jlc3RvcmVfeGF0dHJfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzKQoreworCWludCByZXQ7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiID0KKwkJKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKXhzLT54YXR0cl9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwgPSAmeGItPnhiX2F0dHJzLnhiX3Jvb3QueHRfbGlzdDsKKwl1MTYgeGJfZmxhZ3MgPSBsZTE2X3RvX2NwdSh4Yi0+eGJfZmxhZ3MpOworCisJQlVHX09OKCEoeGJfZmxhZ3MgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKSB8fAorCQlsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSAhPSAwKTsKKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgT0NGUzJfWEFUVFJfQkxPQ0tfVVBEQVRFX0NSRURJVFMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCWhhbmRsZSA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHhzLT54YXR0cl9iaCwKKwkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJbWVtc2V0KCZ4Yi0+eGJfYXR0cnMsIDAsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jaywgeGJfYXR0cnMpKTsKKworCXhiLT54Yl9mbGFncyA9IGNwdV90b19sZTE2KHhiX2ZsYWdzICYgfk9DRlMyX1hBVFRSX0lOREVYRUQpOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHhzLT54YXR0cl9iaCk7CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogb2NmczJfeGF0dHJfYmxvY2tfc2V0KCkKKyAqCisgKiBTZXQsIHJlcGxhY2Ugb3IgcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbnRvIGV4dGVybmFsIGJsb2NrLgorICoKKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9ibG9ja19zZXQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cykKK3sKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAgKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKil4cy0+aW5vZGVfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CisJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YmxrID0gTlVMTDsKKwl1MTYgc3ViYWxsb2NfYml0X3N0YXJ0OworCXUzMiBudW1fZ290OworCXU2NCBmaXJzdF9ibGtubzsKKwlpbnQgcmV0OworCisJaWYgKCF4cy0+eGF0dHJfYmgpIHsKKwkJLyoKKwkJICogQWxsb2Mgb25lIGV4dGVybmFsIGJsb2NrIGZvciBleHRlbmRlZCBhdHRyaWJ1dGUKKwkJICogb3V0c2lkZSBvZiBpbm9kZS4KKwkJICovCisJCXJldCA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2Nrcyhvc2IsIDEsICZtZXRhX2FjKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwKKwkJCQkJICAgT0NGUzJfWEFUVFJfQkxPQ0tfQ1JFQVRFX0NSRURJVFMpOworCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHhzLT5pbm9kZV9iaCwKKwkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJfQorCisJCXJldCA9IG9jZnMyX2NsYWltX21ldGFkYXRhKG9zYiwgaGFuZGxlLCBtZXRhX2FjLCAxLAorCQkJCQkgICAmc3ViYWxsb2NfYml0X3N0YXJ0LCAmbnVtX2dvdCwKKwkJCQkJICAgJmZpcnN0X2Jsa25vKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJfQorCisJCW5ld19iaCA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgZmlyc3RfYmxrbm8pOworCQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgbmV3X2JoKTsKKworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBuZXdfYmgsCisJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9jb21taXQ7CisJCX0KKworCQkvKiBJbml0aWFsaXplIG9jZnMyX3hhdHRyX2Jsb2NrICovCisJCXhzLT54YXR0cl9iaCA9IG5ld19iaDsKKwkJeGJsayA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKiluZXdfYmgtPmJfZGF0YTsKKwkJbWVtc2V0KHhibGssIDAsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CisJCXN0cmNweSgodm9pZCAqKXhibGssIE9DRlMyX1hBVFRSX0JMT0NLX1NJR05BVFVSRSk7CisJCXhibGstPnhiX3N1YmFsbG9jX3Nsb3QgPSBjcHVfdG9fbGUxNihvc2ItPnNsb3RfbnVtKTsKKwkJeGJsay0+eGJfc3ViYWxsb2NfYml0ID0gY3B1X3RvX2xlMTYoc3ViYWxsb2NfYml0X3N0YXJ0KTsKKwkJeGJsay0+eGJfZnNfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKG9zYi0+ZnNfZ2VuZXJhdGlvbik7CisJCXhibGstPnhiX2Jsa25vID0gY3B1X3RvX2xlNjQoZmlyc3RfYmxrbm8pOworCisJCXhzLT5oZWFkZXIgPSAmeGJsay0+eGJfYXR0cnMueGJfaGVhZGVyOworCQl4cy0+YmFzZSA9ICh2b2lkICopeHMtPmhlYWRlcjsKKwkJeHMtPmVuZCA9ICh2b2lkICopeGJsayArIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKwkJeHMtPmhlcmUgPSB4cy0+aGVhZGVyLT54aF9lbnRyaWVzOworCisKKwkJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG5ld19iaCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9jb21taXQ7CisJCX0KKwkJZGktPmlfeGF0dHJfbG9jID0gY3B1X3RvX2xlNjQoZmlyc3RfYmxrbm8pOworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgeHMtPmlub2RlX2JoKTsKKwkJaWYgKHJldCA8IDApCisJCQltbG9nX2Vycm5vKHJldCk7CitvdXRfY29tbWl0OgorCQlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworb3V0OgorCQlpZiAobWV0YV9hYykKKwkJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0gZWxzZQorCQl4YmxrID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKXhzLT54YXR0cl9iaC0+Yl9kYXRhOworCisJaWYgKCEobGUxNl90b19jcHUoeGJsay0+eGJfZmxhZ3MpICYgT0NGUzJfWEFUVFJfSU5ERVhFRCkpIHsKKwkJLyogU2V0IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbnRvIGV4dGVybmFsIGJsb2NrICovCisJCXJldCA9IG9jZnMyX3hhdHRyX3NldF9lbnRyeShpbm9kZSwgeGksIHhzLCBPQ0ZTMl9IQVNfWEFUVFJfRkwpOworCQlpZiAoIXJldCB8fCByZXQgIT0gLUVOT1NQQykKKwkJCWdvdG8gZW5kOworCisJCXJldCA9IG9jZnMyX3hhdHRyX2NyZWF0ZV9pbmRleF9ibG9jayhpbm9kZSwgeHMpOworCQlpZiAocmV0KQorCQkJZ290byBlbmQ7CisJfQorCisJcmV0ID0gb2NmczJfeGF0dHJfc2V0X2VudHJ5X2luZGV4X2Jsb2NrKGlub2RlLCB4aSwgeHMpOworCWlmICghcmV0ICYmIHhibGstPnhiX2F0dHJzLnhiX3Jvb3QueHRfbGlzdC5sX25leHRfZnJlZV9yZWMgPT0gMCkKKwkJcmV0ID0gb2NmczJfcmVzdG9yZV94YXR0cl9ibG9jayhpbm9kZSwgeHMpOworCitlbmQ6CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogb2NmczJfeGF0dHJfc2V0KCkKKyAqCisgKiBTZXQsIHJlcGxhY2Ugb3IgcmVtb3ZlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBmb3IgdGhpcyBpbm9kZS4KKyAqIHZhbHVlIGlzIE5VTEwgdG8gcmVtb3ZlIGFuIGV4aXN0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZSwgZWxzZSBlaXRoZXIKKyAqIGNyZWF0ZSBvciByZXBsYWNlIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZS4KKyAqLworaW50IG9jZnMyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgaW50IG5hbWVfaW5kZXgsCisJCSAgICBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgY29uc3Qgdm9pZCAqdmFsdWUsCisJCSAgICBzaXplX3QgdmFsdWVfbGVuLAorCQkgICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpOworCWludCByZXQ7CisJdTE2IGksIGJsa19wZXJfYnVja2V0ID0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoaW5vZGUtPmlfc2IpOworCisJc3RydWN0IG9jZnMyX3hhdHRyX2luZm8geGkgPSB7CisJCS5uYW1lX2luZGV4ID0gbmFtZV9pbmRleCwKKwkJLm5hbWUgPSBuYW1lLAorCQkudmFsdWUgPSB2YWx1ZSwKKwkJLnZhbHVlX2xlbiA9IHZhbHVlX2xlbiwKKwl9OworCisJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCB4aXMgPSB7CisJCS5ub3RfZm91bmQgPSAtRU5PREFUQSwKKwl9OworCisJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCB4YnMgPSB7CisJCS5ub3RfZm91bmQgPSAtRU5PREFUQSwKKwl9OworCisJaWYgKCFvY2ZzMl9zdXBwb3J0c194YXR0cihPQ0ZTMl9TQihpbm9kZS0+aV9zYikpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXQgPSBvY2ZzMl9pbm9kZV9sb2NrKGlub2RlLCAmZGlfYmgsIDEpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJeGlzLmlub2RlX2JoID0geGJzLmlub2RlX2JoID0gZGlfYmg7CisJZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisKKwlkb3duX3dyaXRlKCZPQ0ZTMl9JKGlub2RlKS0+aXBfeGF0dHJfc2VtKTsKKwkvKgorCSAqIFNjYW4gaW5vZGUgYW5kIGV4dGVybmFsIGJsb2NrIHRvIGZpbmQgdGhlIHNhbWUgbmFtZQorCSAqIGV4dGVuZGVkIGF0dHJpYnV0ZSBhbmQgY29sbGVjdCBzZWFyY2ggaW5mb21hdGlvbi4KKwkgKi8KKwlyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9maW5kKGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLCAmeGlzKTsKKwlpZiAocmV0KQorCQlnb3RvIGNsZWFudXA7CisJaWYgKHhpcy5ub3RfZm91bmQpIHsKKwkJcmV0ID0gb2NmczJfeGF0dHJfYmxvY2tfZmluZChpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSwgJnhicyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKHhpcy5ub3RfZm91bmQgJiYgeGJzLm5vdF9mb3VuZCkgeworCQlyZXQgPSAtRU5PREFUQTsKKwkJaWYgKGZsYWdzICYgWEFUVFJfUkVQTEFDRSkKKwkJCWdvdG8gY2xlYW51cDsKKwkJcmV0ID0gMDsKKwkJaWYgKCF2YWx1ZSkKKwkJCWdvdG8gY2xlYW51cDsKKwl9IGVsc2UgeworCQlyZXQgPSAtRUVYSVNUOworCQlpZiAoZmxhZ3MgJiBYQVRUUl9DUkVBVEUpCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKCF2YWx1ZSkgeworCQkvKiBSZW1vdmUgZXhpc3RpbmcgZXh0ZW5kZWQgYXR0cmlidXRlICovCisJCWlmICgheGlzLm5vdF9mb3VuZCkKKwkJCXJldCA9IG9jZnMyX3hhdHRyX2lib2R5X3NldChpbm9kZSwgJnhpLCAmeGlzKTsKKwkJZWxzZSBpZiAoIXhicy5ub3RfZm91bmQpCisJCQlyZXQgPSBvY2ZzMl94YXR0cl9ibG9ja19zZXQoaW5vZGUsICZ4aSwgJnhicyk7CisJfSBlbHNlIHsKKwkJLyogV2UgYWx3YXlzIHRyeSB0byBzZXQgZXh0ZW5kZWQgYXR0cmlidXRlIGludG8gaW5vZGUgZmlyc3QqLworCQlyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9zZXQoaW5vZGUsICZ4aSwgJnhpcyk7CisJCWlmICghcmV0ICYmICF4YnMubm90X2ZvdW5kKSB7CisJCQkvKgorCQkJICogSWYgc3VjY2VlZCBhbmQgdGhhdCBleHRlbmRlZCBhdHRyaWJ1dGUgZXhpc3RpbmcgaW4KKwkJCSAqIGV4dGVybmFsIGJsb2NrLCB0aGVuIHdlIHdpbGwgcmVtb3ZlIGl0LgorCQkJICovCisJCQl4aS52YWx1ZSA9IE5VTEw7CisJCQl4aS52YWx1ZV9sZW4gPSAwOworCQkJcmV0ID0gb2NmczJfeGF0dHJfYmxvY2tfc2V0KGlub2RlLCAmeGksICZ4YnMpOworCQl9IGVsc2UgaWYgKHJldCA9PSAtRU5PU1BDKSB7CisJCQlpZiAoZGktPmlfeGF0dHJfbG9jICYmICF4YnMueGF0dHJfYmgpIHsKKwkJCQlyZXQgPSBvY2ZzMl94YXR0cl9ibG9ja19maW5kKGlub2RlLCBuYW1lX2luZGV4LAorCQkJCQkJCSAgICAgbmFtZSwgJnhicyk7CisJCQkJaWYgKHJldCkKKwkJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQkJLyoKKwkJCSAqIElmIG5vIHNwYWNlIGluIGlub2RlLCB3ZSB3aWxsIHNldCBleHRlbmRlZCBhdHRyaWJ1dGUKKwkJCSAqIGludG8gZXh0ZXJuYWwgYmxvY2suCisJCQkgKi8KKwkJCXJldCA9IG9jZnMyX3hhdHRyX2Jsb2NrX3NldChpbm9kZSwgJnhpLCAmeGJzKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBjbGVhbnVwOworCQkJaWYgKCF4aXMubm90X2ZvdW5kKSB7CisJCQkJLyoKKwkJCQkgKiBJZiBzdWNjZWVkIGFuZCB0aGF0IGV4dGVuZGVkIGF0dHJpYnV0ZQorCQkJCSAqIGV4aXN0aW5nIGluIGlub2RlLCB3ZSB3aWxsIHJlbW92ZSBpdC4KKwkJCQkgKi8KKwkJCQl4aS52YWx1ZSA9IE5VTEw7CisJCQkJeGkudmFsdWVfbGVuID0gMDsKKwkJCQlyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9zZXQoaW5vZGUsICZ4aSwgJnhpcyk7CisJCQl9CisJCX0KKwl9CitjbGVhbnVwOgorCXVwX3dyaXRlKCZPQ0ZTMl9JKGlub2RlKS0+aXBfeGF0dHJfc2VtKTsKKwlvY2ZzMl9pbm9kZV91bmxvY2soaW5vZGUsIDEpOworCWJyZWxzZShkaV9iaCk7CisJYnJlbHNlKHhicy54YXR0cl9iaCk7CisJZm9yIChpID0gMDsgaSA8IGJsa19wZXJfYnVja2V0OyBpKyspCisJCWJyZWxzZSh4YnMuYnVja2V0LmJoc1tpXSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRmluZCB0aGUgeGF0dHIgZXh0ZW50IHJlYyB3aGljaCBtYXkgY29udGFpbnMgbmFtZV9oYXNoLgorICogZV9jcG9zIHdpbGwgYmUgdGhlIGZpcnN0IG5hbWUgaGFzaCBvZiB0aGUgeGF0dHIgcmVjLgorICogZWwgbXVzdCBiZSB0aGUgb2NmczJfeGF0dHJfaGVhZGVyLnhiX2F0dHJzLnhiX3Jvb3QueHRfbGlzdC4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9nZXRfcmVjKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgICAgdTMyIG5hbWVfaGFzaCwKKwkJCSAgICAgICB1NjQgKnBfYmxrbm8sCisJCQkgICAgICAgdTMyICplX2Nwb3MsCisJCQkgICAgICAgdTMyICpudW1fY2x1c3RlcnMsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCkKK3sKKwlpbnQgcmV0ID0gMCwgaTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmViX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYjsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjID0gTlVMTDsKKwl1NjQgZV9ibGtubyA9IDA7CisKKwlpZiAoZWwtPmxfdHJlZV9kZXB0aCkgeworCQlyZXQgPSBvY2ZzMl9maW5kX2xlYWYoaW5vZGUsIGVsLCBuYW1lX2hhc2gsICZlYl9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZWIgPSAoc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqKSBlYl9iaC0+Yl9kYXRhOworCQllbCA9ICZlYi0+aF9saXN0OworCisJCWlmIChlbC0+bF90cmVlX2RlcHRoKSB7CisJCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKKwkJCQkgICAgIklub2RlICVsdSBoYXMgbm9uIHplcm8gdHJlZSBkZXB0aCBpbiAiCisJCQkJICAgICJ4YXR0ciB0cmVlIGJsb2NrICVsbHVcbiIsIGlub2RlLT5pX2lubywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyllYl9iaC0+Yl9ibG9ja25yKTsKKwkJCXJldCA9IC1FUk9GUzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJZm9yIChpID0gbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgLSAxOyBpID49IDA7IGktLSkgeworCQlyZWMgPSAmZWwtPmxfcmVjc1tpXTsKKworCQlpZiAobGUzMl90b19jcHUocmVjLT5lX2Nwb3MpIDw9IG5hbWVfaGFzaCkgeworCQkJZV9ibGtubyA9IGxlNjRfdG9fY3B1KHJlYy0+ZV9ibGtubyk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZV9ibGtubykgeworCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwgIklub2RlICVsdSBoYXMgYmFkIGV4dGVudCAiCisJCQkgICAgInJlY29yZCAoJXUsICV1LCAwKSBpbiB4YXR0ciIsIGlub2RlLT5pX2lubywKKwkJCSAgICBsZTMyX3RvX2NwdShyZWMtPmVfY3BvcyksCisJCQkgICAgb2NmczJfcmVjX2NsdXN0ZXJzKGVsLCByZWMpKTsKKwkJcmV0ID0gLUVST0ZTOworCQlnb3RvIG91dDsKKwl9CisKKwkqcF9ibGtubyA9IGxlNjRfdG9fY3B1KHJlYy0+ZV9ibGtubyk7CisJKm51bV9jbHVzdGVycyA9IGxlMTZfdG9fY3B1KHJlYy0+ZV9sZWFmX2NsdXN0ZXJzKTsKKwlpZiAoZV9jcG9zKQorCQkqZV9jcG9zID0gbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpOworb3V0OgorCWJyZWxzZShlYl9iaCk7CisJcmV0dXJuIHJldDsKK30KKwordHlwZWRlZiBpbnQgKHhhdHRyX2J1Y2tldF9mdW5jKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCwKKwkJCQl2b2lkICpwYXJhKTsKKworc3RhdGljIGludCBvY2ZzMl9maW5kX3hlX2luX2J1Y2tldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqaGVhZGVyX2JoLAorCQkJCSAgIGludCBuYW1lX2luZGV4LAorCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgdTMyIG5hbWVfaGFzaCwKKwkJCQkgICB1MTYgKnhlX2luZGV4LAorCQkJCSAgIGludCAqZm91bmQpCit7CisJaW50IGksIHJldCA9IDAsIGNtcCA9IDEsIGJsb2NrX29mZiwgbmV3X29mZnNldDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9CisJCQkoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKWhlYWRlcl9iaC0+Yl9kYXRhOworCXNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5hbWVfYmggPSBOVUxMOworCWNoYXIgKnhlX25hbWU7CisKKwkvKgorCSAqIFdlIGRvbid0IHVzZSBiaW5hcnkgc2VhcmNoIGluIHRoZSBidWNrZXQgYmVjYXVzZSB0aGVyZQorCSAqIG1heSBiZSBtdWx0aXBsZSBlbnRyaWVzIHdpdGggdGhlIHNhbWUgbmFtZSBoYXNoLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpOyBpKyspIHsKKwkJeGUgPSAmeGgtPnhoX2VudHJpZXNbaV07CisKKwkJaWYgKG5hbWVfaGFzaCA+IGxlMzJfdG9fY3B1KHhlLT54ZV9uYW1lX2hhc2gpKQorCQkJY29udGludWU7CisJCWVsc2UgaWYgKG5hbWVfaGFzaCA8IGxlMzJfdG9fY3B1KHhlLT54ZV9uYW1lX2hhc2gpKQorCQkJYnJlYWs7CisKKwkJY21wID0gbmFtZV9pbmRleCAtIG9jZnMyX3hhdHRyX2dldF90eXBlKHhlKTsKKwkJaWYgKCFjbXApCisJCQljbXAgPSBuYW1lX2xlbiAtIHhlLT54ZV9uYW1lX2xlbjsKKwkJaWYgKGNtcCkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShpbm9kZSwKKwkJCQkJCQl4aCwKKwkJCQkJCQlpLAorCQkJCQkJCSZibG9ja19vZmYsCisJCQkJCQkJJm5ld19vZmZzZXQpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIGhlYWRlcl9iaC0+Yl9ibG9ja25yICsgYmxvY2tfb2ZmLAorCQkJCSAgICAgICAmbmFtZV9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWFrOworCQl9CisJCXhlX25hbWUgPSBuYW1lX2JoLT5iX2RhdGEgKyBuZXdfb2Zmc2V0OworCisJCWNtcCA9IG1lbWNtcChuYW1lLCB4ZV9uYW1lLCBuYW1lX2xlbik7CisJCWJyZWxzZShuYW1lX2JoKTsKKwkJbmFtZV9iaCA9IE5VTEw7CisKKwkJaWYgKGNtcCA9PSAwKSB7CisJCQkqeGVfaW5kZXggPSBpOworCQkJKmZvdW5kID0gMTsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBzcGVjaWZpZWQgeGF0dHIgZW50cnkgaW4gYSBzZXJpZXMgb2YgYnVja2V0cy4KKyAqIFRoaXMgc2VyaWVzIHN0YXJ0IGZyb20gcF9ibGtubyBhbmQgbGFzdCBmb3IgbnVtX2NsdXN0ZXJzLgorICogVGhlIG9jZnMyX3hhdHRyX2hlYWRlci54aF9udW1fYnVja2V0cyBvZiB0aGUgZmlyc3QgYnVja2V0IGNvbnRhaW5zCisgKiB0aGUgbnVtIG9mIHRoZSB2YWxpZCBidWNrZXRzLgorICoKKyAqIFJldHVybiB0aGUgYnVmZmVyX2hlYWQgdGhpcyB4YXR0ciBzaG91bGQgcmVzaWRlIGluLiBBbmQgaWYgdGhlIHhhdHRyJ3MKKyAqIGhhc2ggaXMgaW4gdGhlIGdhcCBvZiAyIGJ1Y2tldHMsIHJldHVybiB0aGUgbG93ZXIgYnVja2V0LgorICovCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2J1Y2tldF9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgaW50IG5hbWVfaW5kZXgsCisJCQkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICB1MzIgbmFtZV9oYXNoLAorCQkJCSAgIHU2NCBwX2Jsa25vLAorCQkJCSAgIHUzMiBmaXJzdF9oYXNoLAorCQkJCSAgIHUzMiBudW1fY2x1c3RlcnMsCisJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpCit7CisJaW50IHJldCwgZm91bmQgPSAwOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbG93ZXJfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlID0gTlVMTDsKKwl1MTYgaW5kZXggPSAwOworCXUxNiBibGtfcGVyX2J1Y2tldCA9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGlub2RlLT5pX3NiKTsKKwlpbnQgbG93X2J1Y2tldCA9IDAsIGJ1Y2tldCwgaGlnaF9idWNrZXQ7CisJdTMyIGxhc3RfaGFzaDsKKwl1NjQgYmxrbm87CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBwX2Jsa25vLCAmYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwl4aCA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopYmgtPmJfZGF0YTsKKwloaWdoX2J1Y2tldCA9IGxlMTZfdG9fY3B1KHhoLT54aF9udW1fYnVja2V0cykgLSAxOworCisJd2hpbGUgKGxvd19idWNrZXQgPD0gaGlnaF9idWNrZXQpIHsKKwkJYnJlbHNlKGJoKTsKKwkJYmggPSBOVUxMOworCQlidWNrZXQgPSAobG93X2J1Y2tldCArIGhpZ2hfYnVja2V0KSAvIDI7CisKKwkJYmxrbm8gPSBwX2Jsa25vICsgYnVja2V0ICogYmxrX3Blcl9idWNrZXQ7CisKKwkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgYmxrbm8sICZiaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJeGggPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKWJoLT5iX2RhdGE7CisJCXhlID0gJnhoLT54aF9lbnRyaWVzWzBdOworCQlpZiAobmFtZV9oYXNoIDwgbGUzMl90b19jcHUoeGUtPnhlX25hbWVfaGFzaCkpIHsKKwkJCWhpZ2hfYnVja2V0ID0gYnVja2V0IC0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogQ2hlY2sgd2hldGhlciB0aGUgaGFzaCBvZiB0aGUgbGFzdCBlbnRyeSBpbiBvdXIKKwkJICogYnVja2V0IGlzIGxhcmdlciB0aGFuIHRoZSBzZWFyY2ggb25lLiBmb3IgYW4gZW1wdHkKKwkJICogYnVja2V0LCB0aGUgbGFzdCBvbmUgaXMgYWxzbyB0aGUgZmlyc3Qgb25lLgorCQkgKi8KKwkJaWYgKHhoLT54aF9jb3VudCkKKwkJCXhlID0gJnhoLT54aF9lbnRyaWVzW2xlMTZfdG9fY3B1KHhoLT54aF9jb3VudCkgLSAxXTsKKworCQlsYXN0X2hhc2ggPSBsZTMyX3RvX2NwdSh4ZS0+eGVfbmFtZV9oYXNoKTsKKworCQkvKiByZWNvcmQgbG93ZXJfYmggd2hpY2ggbWF5IGJlIHRoZSBpbnNlcnQgcGxhY2UuICovCisJCWJyZWxzZShsb3dlcl9iaCk7CisJCWxvd2VyX2JoID0gYmg7CisJCWJoID0gTlVMTDsKKworCQlpZiAobmFtZV9oYXNoID4gbGUzMl90b19jcHUoeGUtPnhlX25hbWVfaGFzaCkpIHsKKwkJCWxvd19idWNrZXQgPSBidWNrZXQgKyAxOworCQkJY29udGludWU7CisJCX0KKworCQkvKiB0aGUgc2VhcmNoZWQgeGF0dHIgc2hvdWxkIHJlc2lkZSBpbiB0aGlzIGJ1Y2tldCBpZiBleGlzdHMuICovCisJCXJldCA9IG9jZnMyX2ZpbmRfeGVfaW5fYnVja2V0KGlub2RlLCBsb3dlcl9iaCwKKwkJCQkJICAgICAgbmFtZV9pbmRleCwgbmFtZSwgbmFtZV9oYXNoLAorCQkJCQkgICAgICAmaW5kZXgsICZmb3VuZCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWJyZWFrOworCX0KKworCS8qCisJICogUmVjb3JkIHRoZSBidWNrZXQgd2UgaGF2ZSBmb3VuZC4KKwkgKiBXaGVuIHRoZSB4YXR0cidzIGhhc2ggdmFsdWUgaXMgaW4gdGhlIGdhcCBvZiAyIGJ1Y2tldHMsIHdlIHdpbGwKKwkgKiBhbHdheXMgc2V0IGl0IHRvIHRoZSBwcmV2aW91cyBidWNrZXQuCisJICovCisJaWYgKCFsb3dlcl9iaCkgeworCQkvKgorCQkgKiBXZSBjYW4ndCBmaW5kIGFueSBidWNrZXQgd2hvc2UgZmlyc3QgbmFtZV9oYXNoIGlzIGxlc3MKKwkJICogdGhhbiB0aGUgZmluZCBuYW1lX2hhc2guCisJCSAqLworCQlCVUdfT04oYmgtPmJfYmxvY2tuciAhPSBwX2Jsa25vKTsKKwkJbG93ZXJfYmggPSBiaDsKKwkJYmggPSBOVUxMOworCX0KKwl4cy0+YnVja2V0LmJoc1swXSA9IGxvd2VyX2JoOworCXhzLT5idWNrZXQueGggPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKQorCQkJCQl4cy0+YnVja2V0LmJoc1swXS0+Yl9kYXRhOworCWxvd2VyX2JoID0gTlVMTDsKKworCXhzLT5oZWFkZXIgPSB4cy0+YnVja2V0LnhoOworCXhzLT5iYXNlID0geHMtPmJ1Y2tldC5iaHNbMF0tPmJfZGF0YTsKKwl4cy0+ZW5kID0geHMtPmJhc2UgKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisKKwlpZiAoZm91bmQpIHsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBmb3VuZCB0aGUgeGF0dHIgZW50eSwgcmVhZCBhbGwgdGhlIGJsb2NrcyBpbgorCQkgKiB0aGlzIGJ1Y2tldC4KKwkJICovCisJCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzKGlub2RlLCB4cy0+YnVja2V0LmJoc1swXS0+Yl9ibG9ja25yICsgMSwKKwkJCQkJYmxrX3Blcl9idWNrZXQgLSAxLCAmeHMtPmJ1Y2tldC5iaHNbMV0sCisJCQkJCTApOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXhzLT5oZXJlID0gJnhzLT5oZWFkZXItPnhoX2VudHJpZXNbaW5kZXhdOworCQltbG9nKDAsICJmaW5kIHhhdHRyICVzIGluIGJ1Y2tldCAlbGx1LCBlbnRyeSA9ICV1XG4iLCBuYW1lLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpeHMtPmJ1Y2tldC5iaHNbMF0tPmJfYmxvY2tuciwgaW5kZXgpOworCX0gZWxzZQorCQlyZXQgPSAtRU5PREFUQTsKKworb3V0OgorCWJyZWxzZShiaCk7CisJYnJlbHNlKGxvd2VyX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2luZGV4X2Jsb2NrX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAorCQkJCQlpbnQgbmFtZV9pbmRleCwKKwkJCQkJY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiID0KKwkJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKilyb290X2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeGJfcm9vdCA9ICZ4Yi0+eGJfYXR0cnMueGJfcm9vdDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJnhiX3Jvb3QtPnh0X2xpc3Q7CisJdTY0IHBfYmxrbm8gPSAwOworCXUzMiBmaXJzdF9oYXNoLCBudW1fY2x1c3RlcnMgPSAwOworCXUzMiBuYW1lX2hhc2ggPSBvY2ZzMl94YXR0cl9uYW1lX2hhc2goaW5vZGUsIG5hbWUsIHN0cmxlbihuYW1lKSk7CisKKwlpZiAobGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgPT0gMCkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJbWxvZygwLCAiZmluZCB4YXR0ciAlcywgaGFzaCA9ICV1LCBpbmRleCA9ICVkIGluIHhhdHRyIHRyZWVcbiIsCisJICAgICBuYW1lLCBuYW1lX2hhc2gsIG5hbWVfaW5kZXgpOworCisJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X3JlYyhpbm9kZSwgbmFtZV9oYXNoLCAmcF9ibGtubywgJmZpcnN0X2hhc2gsCisJCQkJICAmbnVtX2NsdXN0ZXJzLCBlbCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCUJVR19PTihwX2Jsa25vID09IDAgfHwgbnVtX2NsdXN0ZXJzID09IDAgfHwgZmlyc3RfaGFzaCA+IG5hbWVfaGFzaCk7CisKKwltbG9nKDAsICJmaW5kIHhhdHRyIGV4dGVudCByZWMgJXUgY2x1c3RlcnMgZnJvbSAlbGx1LCB0aGUgZmlyc3QgaGFzaCAiCisJICAgICAiaW4gdGhlIHJlYyBpcyAldVxuIiwgbnVtX2NsdXN0ZXJzLCBwX2Jsa25vLCBmaXJzdF9oYXNoKTsKKworCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9maW5kKGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLCBuYW1lX2hhc2gsCisJCQkJICAgICAgcF9ibGtubywgZmlyc3RfaGFzaCwgbnVtX2NsdXN0ZXJzLCB4cyk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2l0ZXJhdGVfeGF0dHJfYnVja2V0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICB1NjQgYmxrbm8sCisJCQkJICAgICAgIHUzMiBjbHVzdGVycywKKwkJCQkgICAgICAgeGF0dHJfYnVja2V0X2Z1bmMgKmZ1bmMsCisJCQkJICAgICAgIHZvaWQgKnBhcmEpCit7CisJaW50IGksIGosIHJldCA9IDA7CisJaW50IGJsa19wZXJfYnVja2V0ID0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoaW5vZGUtPmlfc2IpOworCXUzMiBicGMgPSBvY2ZzMl94YXR0cl9idWNrZXRzX3Blcl9jbHVzdGVyKE9DRlMyX1NCKGlub2RlLT5pX3NiKSk7CisJdTMyIG51bV9idWNrZXRzID0gY2x1c3RlcnMgKiBicGM7CisJc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCBidWNrZXQ7CisKKwltZW1zZXQoJmJ1Y2tldCwgMCwgc2l6ZW9mKGJ1Y2tldCkpOworCisJbWxvZygwLCAiaXRlcmF0aW5nIHhhdHRyIGJ1Y2tldHMgaW4gJXUgY2x1c3RlcnMgc3RhcnRpbmcgZnJvbSAlbGx1XG4iLAorCSAgICAgY2x1c3RlcnMsIGJsa25vKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrLCBibGtubyArPSBibGtfcGVyX2J1Y2tldCkgeworCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2Nrcyhpbm9kZSwgYmxrbm8sIGJsa19wZXJfYnVja2V0LAorCQkJCQlidWNrZXQuYmhzLCAwKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlidWNrZXQueGggPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKWJ1Y2tldC5iaHNbMF0tPmJfZGF0YTsKKwkJLyoKKwkJICogVGhlIHJlYWwgYnVja2V0IG51bSBpbiB0aGlzIHNlcmllcyBvZiBibG9ja3MgaXMgc3RvcmVkCisJCSAqIGluIHRoZSAxc3QgYnVja2V0LgorCQkgKi8KKwkJaWYgKGkgPT0gMCkKKwkJCW51bV9idWNrZXRzID0gbGUxNl90b19jcHUoYnVja2V0LnhoLT54aF9udW1fYnVja2V0cyk7CisKKwkJbWxvZygwLCAiaXRlcmF0aW5nIHhhdHRyIGJ1Y2tldCAlbGx1LCBmaXJzdCBoYXNoICV1XG4iLCBibGtubywKKwkJICAgICBsZTMyX3RvX2NwdShidWNrZXQueGgtPnhoX2VudHJpZXNbMF0ueGVfbmFtZV9oYXNoKSk7CisJCWlmIChmdW5jKSB7CisJCQlyZXQgPSBmdW5jKGlub2RlLCAmYnVja2V0LCBwYXJhKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgYmxrX3Blcl9idWNrZXQ7IGorKykKKwkJCWJyZWxzZShidWNrZXQuYmhzW2pdKTsKKwkJbWVtc2V0KCZidWNrZXQsIDAsIHNpemVvZihidWNrZXQpKTsKKwl9CisKK291dDoKKwlmb3IgKGogPSAwOyBqIDwgYmxrX3Blcl9idWNrZXQ7IGorKykKKwkJYnJlbHNlKGJ1Y2tldC5iaHNbal0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfbGlzdCB7CisJY2hhciAqYnVmZmVyOworCXNpemVfdCBidWZmZXJfc2l6ZTsKKwlzaXplX3QgcmVzdWx0OworfTsKKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCwKKwkJCQkJICAgICBpbnQgaW5kZXgsCisJCQkJCSAgICAgaW50ICpibG9ja19vZmYsCisJCQkJCSAgICAgaW50ICpuZXdfb2Zmc2V0KQoreworCXUxNiBuYW1lX29mZnNldDsKKworCWlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluYW1lX29mZnNldCA9IGxlMTZfdG9fY3B1KHhoLT54aF9lbnRyaWVzW2luZGV4XS54ZV9uYW1lX29mZnNldCk7CisKKwkqYmxvY2tfb2ZmID0gbmFtZV9vZmZzZXQgPj4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJKm5ld19vZmZzZXQgPSBuYW1lX29mZnNldCAlIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9jZnMyX2xpc3RfeGF0dHJfYnVja2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0LAorCQkJCSAgIHZvaWQgKnBhcmEpCit7CisJaW50IHJldCA9IDAsIHR5cGU7CisJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfbGlzdCAqeGwgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfbGlzdCAqKXBhcmE7CisJaW50IGksIGJsb2NrX29mZiwgbmV3X29mZnNldDsKKwljb25zdCBjaGFyICpwcmVmaXgsICpuYW1lOworCisJZm9yIChpID0gMCA7IGkgPCBsZTE2X3RvX2NwdShidWNrZXQtPnhoLT54aF9jb3VudCk7IGkrKykgeworCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmVudHJ5ID0gJmJ1Y2tldC0+eGgtPnhoX2VudHJpZXNbaV07CisJCXR5cGUgPSBvY2ZzMl94YXR0cl9nZXRfdHlwZShlbnRyeSk7CisJCXByZWZpeCA9IG9jZnMyX3hhdHRyX3ByZWZpeCh0eXBlKTsKKworCQlpZiAocHJlZml4KSB7CisJCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoaW5vZGUsCisJCQkJCQkJCWJ1Y2tldC0+eGgsCisJCQkJCQkJCWksCisJCQkJCQkJCSZibG9ja19vZmYsCisJCQkJCQkJCSZuZXdfb2Zmc2V0KTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisKKwkJCW5hbWUgPSAoY29uc3QgY2hhciAqKWJ1Y2tldC0+YmhzW2Jsb2NrX29mZl0tPmJfZGF0YSArCisJCQkJbmV3X29mZnNldDsKKwkJCXJldCA9IG9jZnMyX3hhdHRyX2xpc3RfZW50cnkoeGwtPmJ1ZmZlciwKKwkJCQkJCSAgICAgeGwtPmJ1ZmZlcl9zaXplLAorCQkJCQkJICAgICAmeGwtPnJlc3VsdCwKKwkJCQkJCSAgICAgcHJlZml4LCBuYW1lLAorCQkJCQkJICAgICBlbnRyeS0+eGVfbmFtZV9sZW4pOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfdHJlZV9saXN0X2luZGV4X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeHQsCisJCQkJCSAgICAgY2hhciAqYnVmZmVyLAorCQkJCQkgICAgIHNpemVfdCBidWZmZXJfc2l6ZSkKK3sKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJnh0LT54dF9saXN0OworCWludCByZXQgPSAwOworCXUzMiBuYW1lX2hhc2ggPSBVSU5UX01BWCwgZV9jcG9zID0gMCwgbnVtX2NsdXN0ZXJzID0gMDsKKwl1NjQgcF9ibGtubyA9IDA7CisJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfbGlzdCB4bCA9IHsKKwkJLmJ1ZmZlciA9IGJ1ZmZlciwKKwkJLmJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemUsCisJCS5yZXN1bHQgPSAwLAorCX07CisKKwlpZiAobGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAobmFtZV9oYXNoID4gMCkgeworCQlyZXQgPSBvY2ZzMl94YXR0cl9nZXRfcmVjKGlub2RlLCBuYW1lX2hhc2gsICZwX2Jsa25vLAorCQkJCQkgICZlX2Nwb3MsICZudW1fY2x1c3RlcnMsIGVsKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBvY2ZzMl9pdGVyYXRlX3hhdHRyX2J1Y2tldHMoaW5vZGUsIHBfYmxrbm8sIG51bV9jbHVzdGVycywKKwkJCQkJCSAgb2NmczJfbGlzdF94YXR0cl9idWNrZXQsCisJCQkJCQkgICZ4bCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGVfY3BvcyA9PSAwKQorCQkJYnJlYWs7CisKKwkJbmFtZV9oYXNoID0gZV9jcG9zIC0gMTsKKwl9CisKKwlyZXQgPSB4bC5yZXN1bHQ7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbXBfeGUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmwgPSBhLCAqciA9IGI7CisJdTMyIGxfaGFzaCA9IGxlMzJfdG9fY3B1KGwtPnhlX25hbWVfaGFzaCk7CisJdTMyIHJfaGFzaCA9IGxlMzJfdG9fY3B1KHItPnhlX25hbWVfaGFzaCk7CisKKwlpZiAobF9oYXNoID4gcl9oYXNoKQorCQlyZXR1cm4gMTsKKwlpZiAobF9oYXNoIDwgcl9oYXNoKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN3YXBfeGUodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICpsID0gYSwgKnIgPSBiLCB0bXA7CisKKwl0bXAgPSAqbDsKKwltZW1jcHkobCwgciwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkpOworCW1lbWNweShyLCAmdG1wLCBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSk7Cit9CisKKy8qCisgKiBXaGVuIHRoZSBvY2ZzMl94YXR0cl9ibG9jayBpcyBmaWxsZWQgdXAsIG5ldyBidWNrZXQgd2lsbCBiZSBjcmVhdGVkCisgKiBhbmQgYWxsIHRoZSB4YXR0ciBlbnRyaWVzIHdpbGwgYmUgbW92ZWQgdG8gdGhlIG5ldyBidWNrZXQuCisgKiBOb3RlOiB3ZSBuZWVkIHRvIHNvcnQgdGhlIGVudHJpZXMgc2luY2UgdGhleSBhcmUgbm90IHNhdmVkIGluIG9yZGVyCisgKiBpbiB0aGUgb2NmczJfeGF0dHJfYmxvY2suCisgKi8KK3N0YXRpYyB2b2lkIG9jZnMyX2NwX3hhdHRyX2Jsb2NrX3RvX2J1Y2tldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnhiX2JoLAorCQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnhoX2JoLAorCQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmgpCit7CisJaW50IGksIGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKwl1MTYgb2Zmc2V0LCBzaXplLCBvZmZfY2hhbmdlOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGU7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9CisJCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKXhiX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGJfeGggPSAmeGItPnhiX2F0dHJzLnhiX2hlYWRlcjsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9CisJCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKil4aF9iaC0+Yl9kYXRhOworCXUxNiBjb3VudCA9IGxlMTZfdG9fY3B1KHhiX3hoLT54aF9jb3VudCk7CisJY2hhciAqdGFyZ2V0ID0geGhfYmgtPmJfZGF0YSwgKnNyYyA9IHhiX2JoLT5iX2RhdGE7CisKKwltbG9nKDAsICJjcCB4YXR0ciBmcm9tIGJsb2NrICVsbHUgdG8gYnVja2V0ICVsbHVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXhiX2JoLT5iX2Jsb2NrbnIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXhoX2JoLT5iX2Jsb2NrbnIpOworCisJbWVtc2V0KHhoX2JoLT5iX2RhdGEsIDAsIGJsb2Nrc2l6ZSk7CisJaWYgKGRhdGFfYmgpCisJCW1lbXNldChkYXRhX2JoLT5iX2RhdGEsIDAsIGJsb2Nrc2l6ZSk7CisJLyoKKwkgKiBTaW5jZSB0aGUgeGVfbmFtZV9vZmZzZXQgaXMgYmFzZWQgb24gb2NmczJfeGF0dHJfaGVhZGVyLAorCSAqIHRoZXJlIGlzIGEgb2Zmc2V0IGNoYW5nZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjaGFuZ2Ugb2YKKwkgKiBvY2ZzMl94YXR0cl9oZWFkZXIncyBwb3NpdGlvbi4KKwkgKi8KKwlvZmZfY2hhbmdlID0gb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrLCB4Yl9hdHRycy54Yl9oZWFkZXIpOworCXhlID0gJnhiX3hoLT54aF9lbnRyaWVzW2NvdW50IC0gMV07CisJb2Zmc2V0ID0gbGUxNl90b19jcHUoeGUtPnhlX25hbWVfb2Zmc2V0KSArIG9mZl9jaGFuZ2U7CisJc2l6ZSA9IGJsb2Nrc2l6ZSAtIG9mZnNldDsKKworCS8qIGNvcHkgYWxsIHRoZSBuYW1lcyBhbmQgdmFsdWVzLiAqLworCWlmIChkYXRhX2JoKQorCQl0YXJnZXQgPSBkYXRhX2JoLT5iX2RhdGE7CisJbWVtY3B5KHRhcmdldCArIG9mZnNldCwgc3JjICsgb2Zmc2V0LCBzaXplKTsKKworCS8qIEluaXQgbmV3IGhlYWRlciBub3cuICovCisJeGgtPnhoX2NvdW50ID0geGJfeGgtPnhoX2NvdW50OworCXhoLT54aF9udW1fYnVja2V0cyA9IGNwdV90b19sZTE2KDEpOworCXhoLT54aF9uYW1lX3ZhbHVlX2xlbiA9IGNwdV90b19sZTE2KHNpemUpOworCXhoLT54aF9mcmVlX3N0YXJ0ID0gY3B1X3RvX2xlMTYoT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUgLSBzaXplKTsKKworCS8qIGNvcHkgYWxsIHRoZSBlbnRyaWVzLiAqLworCXRhcmdldCA9IHhoX2JoLT5iX2RhdGE7CisJb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciwgeGhfZW50cmllcyk7CisJc2l6ZSA9IGNvdW50ICogc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSk7CisJbWVtY3B5KHRhcmdldCArIG9mZnNldCwgKGNoYXIgKil4Yl94aCArIG9mZnNldCwgc2l6ZSk7CisKKwkvKiBDaGFuZ2UgdGhlIHhlIG9mZnNldCBmb3IgYWxsIHRoZSB4ZSBiZWNhdXNlIG9mIHRoZSBtb3ZlLiAqLworCW9mZl9jaGFuZ2UgPSBPQ0ZTMl9YQVRUUl9CVUNLRVRfU0laRSAtIGJsb2Nrc2l6ZSArCisJCSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2ssIHhiX2F0dHJzLnhiX2hlYWRlcik7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCWxlMTZfYWRkX2NwdSgmeGgtPnhoX2VudHJpZXNbaV0ueGVfbmFtZV9vZmZzZXQsIG9mZl9jaGFuZ2UpOworCisJbWxvZygwLCAiY29weSBlbnRyeTogc3RhcnQgPSAldSwgc2l6ZSA9ICV1LCBvZmZzZXRfY2hhbmdlID0gJXVcbiIsCisJICAgICBvZmZzZXQsIHNpemUsIG9mZl9jaGFuZ2UpOworCisJc29ydCh0YXJnZXQgKyBvZmZzZXQsIGNvdW50LCBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSwKKwkgICAgIGNtcF94ZSwgc3dhcF94ZSk7Cit9CisKKy8qCisgKiBBZnRlciB3ZSBtb3ZlIHhhdHRyIGZyb20gYmxvY2sgdG8gaW5kZXggYnRyZWUsIHdlIGhhdmUgdG8KKyAqIHVwZGF0ZSBvY2ZzMl94YXR0cl9zZWFyY2ggdG8gdGhlIG5ldyB4ZSBhbmQgYmFzZS4KKyAqCisgKiBXaGVuIHRoZSBlbnRyeSBpcyBpbiB4YXR0ciBibG9jaywgeGF0dHJfYmggaW5kaWNhdGVzIHRoZSBzdG9yYWdlIHBsYWNlLgorICogV2hpbGUgaWYgdGhlIGVudHJ5IGlzIGluIGluZGV4IGItdHJlZSwgImJ1Y2tldCIgaW5kaWNhdGVzIHRoZQorICogcmVhbCBwbGFjZSBvZiB0aGUgeGF0dHIuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfdXBkYXRlX3hhdHRyX3NlYXJjaChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cywKKwkJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsCisJCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoKQoreworCWludCByZXQgPSAwOworCWNoYXIgKmJ1ZiA9IG9sZF9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqb2xkX3hiID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKWJ1ZjsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpvbGRfeGggPSAmb2xkX3hiLT54Yl9hdHRycy54Yl9oZWFkZXI7CisJaW50IGksIGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKwl1MTYgYmxrX3Blcl9idWNrZXQgPSBvY2ZzMl9ibG9ja3NfcGVyX3hhdHRyX2J1Y2tldChpbm9kZS0+aV9zYik7CisKKwl4cy0+YnVja2V0LmJoc1swXSA9IG5ld19iaDsKKwlnZXRfYmgobmV3X2JoKTsKKwl4cy0+YnVja2V0LnhoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKil4cy0+YnVja2V0LmJoc1swXS0+Yl9kYXRhOworCXhzLT5oZWFkZXIgPSB4cy0+YnVja2V0LnhoOworCisJeHMtPmJhc2UgPSBuZXdfYmgtPmJfZGF0YTsKKwl4cy0+ZW5kID0geHMtPmJhc2UgKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisKKwlpZiAoIXhzLT5ub3RfZm91bmQpIHsKKwkJaWYgKE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFICE9IGJsb2Nrc2l6ZSkgeworCQkJcmV0ID0gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsCisJCQkJCXhzLT5idWNrZXQuYmhzWzBdLT5iX2Jsb2NrbnIgKyAxLAorCQkJCQlibGtfcGVyX2J1Y2tldCAtIDEsICZ4cy0+YnVja2V0LmJoc1sxXSwKKwkJCQkJMCk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCWkgPSB4cy0+aGVyZSAtIG9sZF94aC0+eGhfZW50cmllczsKKwkJCXhzLT5oZXJlID0gJnhzLT5oZWFkZXItPnhoX2VudHJpZXNbaV07CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2NyZWF0ZV9pbmRleF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzKQoreworCWludCByZXQsIGNyZWRpdHMgPSBPQ0ZTMl9TVUJBTExPQ19BTExPQzsKKwl1MzIgYml0X29mZiwgbGVuOworCXU2NCBibGtubzsKKwloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjOworCXN0cnVjdCBidWZmZXJfaGVhZCAqeGhfYmggPSBOVUxMLCAqZGF0YV9iaCA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICp4Yl9iaCA9IHhzLT54YXR0cl9iaDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiID0KKwkJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKil4Yl9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl94YXR0cl90cmVlX3Jvb3QgKnhyOworCXUxNiB4Yl9mbGFncyA9IGxlMTZfdG9fY3B1KHhiLT54Yl9mbGFncyk7CisJdTE2IGJwYiA9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGlub2RlLT5pX3NiKTsKKworCW1sb2coMCwgImNyZWF0ZSB4YXR0ciBpbmRleCBibG9jayBmb3IgJWxsdVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpeGJfYmgtPmJfYmxvY2tucik7CisKKwlCVUdfT04oeGJfZmxhZ3MgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKTsKKworCXJldCA9IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnMob3NiLCAxLCAmZGF0YV9hYyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogWFhYOgorCSAqIFdlIGNhbiB1c2UgdGhpcyBsb2NrIGZvciBub3csIGFuZCBtYXliZSBtb3ZlIHRvIGEgZGVkaWNhdGVkIG11dGV4CisJICogaWYgcGVyZm9ybWFuY2UgYmVjb21lcyBhIHByb2JsZW0gbGF0ZXIuCisJICovCisJZG93bl93cml0ZSgmb2ktPmlwX2FsbG9jX3NlbSk7CisKKwkvKgorCSAqIDMgbW9yZSBjcmVkaXRzLCBvbmUgZm9yIHhhdHRyIGJsb2NrIHVwZGF0ZSwgb25lIGZvciB0aGUgMXN0IGJsb2NrCisJICogb2YgdGhlIG5ldyB4YXR0ciBidWNrZXQgYW5kIG9uZSBmb3IgdGhlIHZhbHVlL2RhdGEuCisJICovCisJY3JlZGl0cyArPSAzOworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgY3JlZGl0cyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9zZW07CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgeGJfYmgsCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJcmV0ID0gb2NmczJfY2xhaW1fY2x1c3RlcnMob3NiLCBoYW5kbGUsIGRhdGFfYWMsIDEsICZiaXRfb2ZmLCAmbGVuKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCS8qCisJICogVGhlIGJ1Y2tldCBtYXkgc3ByZWFkIGluIG1hbnkgYmxvY2tzLCBhbmQKKwkgKiB3ZSB3aWxsIG9ubHkgdG91Y2ggdGhlIDFzdCBibG9jayBhbmQgdGhlIGxhc3QgYmxvY2sKKwkgKiBpbiB0aGUgd2hvbGUgYnVja2V0KG9uZSBmb3IgZW50cnkgYW5kIG9uZSBmb3IgZGF0YSkuCisJICovCisJYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIGJpdF9vZmYpOworCisJbWxvZygwLCAiYWxsb2NhdGUgMSBjbHVzdGVyIGZyb20gJWxsdSB0byB4YXR0ciBibG9ja1xuIiwgYmxrbm8pOworCisJeGhfYmggPSBzYl9nZXRibGsoaW5vZGUtPmlfc2IsIGJsa25vKTsKKwlpZiAoIXhoX2JoKSB7CisJCXJldCA9IC1FSU87CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCB4aF9iaCk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB4aF9iaCwKKwkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJaWYgKGJwYiA+IDEpIHsKKwkJZGF0YV9iaCA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgYmxrbm8gKyBicGIgLSAxKTsKKwkJaWYgKCFkYXRhX2JoKSB7CisJCQlyZXQgPSAtRUlPOworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisKKwkJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoaW5vZGUsIGRhdGFfYmgpOworCisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGRhdGFfYmgsCisJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJfQorCX0KKworCW9jZnMyX2NwX3hhdHRyX2Jsb2NrX3RvX2J1Y2tldChpbm9kZSwgeGJfYmgsIHhoX2JoLCBkYXRhX2JoKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCB4aF9iaCk7CisJaWYgKGRhdGFfYmgpCisJCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkYXRhX2JoKTsKKworCW9jZnMyX3hhdHRyX3VwZGF0ZV94YXR0cl9zZWFyY2goaW5vZGUsIHhzLCB4Yl9iaCwgeGhfYmgpOworCisJLyogQ2hhbmdlIGZyb20gb2NmczJfeGF0dHJfaGVhZGVyIHRvIG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqLworCW1lbXNldCgmeGItPnhiX2F0dHJzLCAwLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLQorCSAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2ssIHhiX2F0dHJzKSk7CisKKwl4ciA9ICZ4Yi0+eGJfYXR0cnMueGJfcm9vdDsKKwl4ci0+eHRfY2x1c3RlcnMgPSBjcHVfdG9fbGUzMigxKTsKKwl4ci0+eHRfbGFzdF9lYl9ibGsgPSAwOworCXhyLT54dF9saXN0LmxfdHJlZV9kZXB0aCA9IDA7CisJeHItPnh0X2xpc3QubF9jb3VudCA9IGNwdV90b19sZTE2KG9jZnMyX3hhdHRyX3JlY3NfcGVyX3hiKGlub2RlLT5pX3NiKSk7CisJeHItPnh0X2xpc3QubF9uZXh0X2ZyZWVfcmVjID0gY3B1X3RvX2xlMTYoMSk7CisKKwl4ci0+eHRfbGlzdC5sX3JlY3NbMF0uZV9jcG9zID0gMDsKKwl4ci0+eHRfbGlzdC5sX3JlY3NbMF0uZV9ibGtubyA9IGNwdV90b19sZTY0KGJsa25vKTsKKwl4ci0+eHRfbGlzdC5sX3JlY3NbMF0uZV9sZWFmX2NsdXN0ZXJzID0gY3B1X3RvX2xlMTYoMSk7CisKKwl4Yi0+eGJfZmxhZ3MgPSBjcHVfdG9fbGUxNih4Yl9mbGFncyB8IE9DRlMyX1hBVFRSX0lOREVYRUQpOworCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHhiX2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworb3V0X2NvbW1pdDoKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworCitvdXRfc2VtOgorCXVwX3dyaXRlKCZvaS0+aXBfYWxsb2Nfc2VtKTsKKworb3V0OgorCWlmIChkYXRhX2FjKQorCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoZGF0YV9hYyk7CisKKwlicmVsc2UoeGhfYmgpOworCWJyZWxzZShkYXRhX2JoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY21wX3hlX29mZnNldChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqbCA9IGEsICpyID0gYjsKKwl1MzIgbF9uYW1lX29mZnNldCA9IGxlMTZfdG9fY3B1KGwtPnhlX25hbWVfb2Zmc2V0KTsKKwl1MzIgcl9uYW1lX29mZnNldCA9IGxlMTZfdG9fY3B1KHItPnhlX25hbWVfb2Zmc2V0KTsKKworCWlmIChsX25hbWVfb2Zmc2V0IDwgcl9uYW1lX29mZnNldCkKKwkJcmV0dXJuIDE7CisJaWYgKGxfbmFtZV9vZmZzZXQgPiByX25hbWVfb2Zmc2V0KQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkZWZyYWcgYSB4YXR0ciBidWNrZXQgaWYgd2UgZmluZCB0aGF0IHRoZSBidWNrZXQgaGFzIHNvbWUKKyAqIGhvbGVzIGJldGVlbiBuYW1lL3ZhbHVlIHBhaXJzLgorICogV2Ugd2lsbCBtb3ZlIGFsbCB0aGUgbmFtZS92YWx1ZSBwYWlycyB0byB0aGUgZW5kIG9mIHRoZSBidWNrZXQKKyAqIHNvIHRoYXQgd2UgY2FuIHNwYXJlIHNvbWUgc3BhY2UgZm9yIGluc2VydGlvbi4KKyAqLworc3RhdGljIGludCBvY2ZzMl9kZWZyYWdfeGF0dHJfYnVja2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQpCit7CisJaW50IHJldCwgaTsKKwlzaXplX3QgZW5kLCBvZmZzZXQsIGxlbiwgdmFsdWVfbGVuOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoOworCWNoYXIgKmVudHJpZXMsICpidWYsICpidWNrZXRfYnVmID0gTlVMTDsKKwl1NjQgYmxrbm8gPSBidWNrZXQtPmJoc1swXS0+Yl9ibG9ja25yOworCXUxNiBibGtfcGVyX2J1Y2tldCA9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGlub2RlLT5pX3NiKTsKKwl1MTYgeGhfZnJlZV9zdGFydDsKKwlzaXplX3QgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCWhhbmRsZV90ICpoYW5kbGU7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGU7CisKKwliaHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQgKikgKiBibGtfcGVyX2J1Y2tldCwKKwkJCUdGUF9OT0ZTKTsKKwlpZiAoIWJocykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2Nrcyhpbm9kZSwgYmxrbm8sIGJsa19wZXJfYnVja2V0LCBiaHMsIDApOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBJbiBvcmRlciB0byBtYWtlIHRoZSBvcGVyYXRpb24gbW9yZSBlZmZpY2llbnQgYW5kIGdlbmVyaWMsCisJICogd2UgY29weSBhbGwgdGhlIGJsb2NrcyBpbnRvIGEgY29udGlndW91cyBtZW1vcnkgYW5kIGRvIHRoZQorCSAqIGRlZnJhZ21lbnQgdGhlcmUsIHNvIGlmIGFueXRoaW5nIGlzIGVycm9yLCB3ZSB3aWxsIG5vdCB0b3VjaAorCSAqIHRoZSByZWFsIGJsb2NrLgorCSAqLworCWJ1Y2tldF9idWYgPSBrbWFsbG9jKE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFLCBHRlBfTk9GUyk7CisJaWYgKCFidWNrZXRfYnVmKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCWJ1ZiA9IGJ1Y2tldF9idWY7CisJZm9yIChpID0gMDsgaSA8IGJsa19wZXJfYnVja2V0OyBpKyssIGJ1ZiArPSBibG9ja3NpemUpCisJCW1lbWNweShidWYsIGJoc1tpXS0+Yl9kYXRhLCBibG9ja3NpemUpOworCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMoKE9DRlMyX1NCKGlub2RlLT5pX3NiKSksIGJsa19wZXJfYnVja2V0KTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQloYW5kbGUgPSBOVUxMOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBibGtfcGVyX2J1Y2tldDsgaSsrKSB7CisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoc1tpXSwKKwkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCQlpZiAocmV0IDwgMCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBjb21taXQ7CisJCX0KKwl9CisKKwl4aCA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopYnVja2V0X2J1ZjsKKwllbnRyaWVzID0gKGNoYXIgKil4aC0+eGhfZW50cmllczsKKwl4aF9mcmVlX3N0YXJ0ID0gbGUxNl90b19jcHUoeGgtPnhoX2ZyZWVfc3RhcnQpOworCisJbWxvZygwLCAiYWRqdXN0IHhhdHRyIGJ1Y2tldCBpbiAlbGx1LCBjb3VudCA9ICV1LCAiCisJICAgICAieGhfZnJlZV9zdGFydCA9ICV1LCB4aF9uYW1lX3ZhbHVlX2xlbiA9ICV1LlxuIiwKKwkgICAgIGJsa25vLCBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpLCB4aF9mcmVlX3N0YXJ0LAorCSAgICAgbGUxNl90b19jcHUoeGgtPnhoX25hbWVfdmFsdWVfbGVuKSk7CisKKwkvKgorCSAqIHNvcnQgYWxsIHRoZSBlbnRyaWVzIGJ5IHRoZWlyIG9mZnNldC4KKwkgKiB0aGUgbGFyZ2VzdCB3aWxsIGJlIHRoZSBmaXJzdCwgc28gdGhhdCB3ZSBjYW4KKwkgKiBtb3ZlIHRoZW0gdG8gdGhlIGVuZCBvbmUgYnkgb25lLgorCSAqLworCXNvcnQoZW50cmllcywgbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KSwKKwkgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpLAorCSAgICAgY21wX3hlX29mZnNldCwgc3dhcF94ZSk7CisKKwkvKiBNb3ZlIGFsbCBuYW1lL3ZhbHVlcyB0byB0aGUgZW5kIG9mIHRoZSBidWNrZXQuICovCisJeGUgPSB4aC0+eGhfZW50cmllczsKKwllbmQgPSBPQ0ZTMl9YQVRUUl9CVUNLRVRfU0laRTsKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsgaSsrLCB4ZSsrKSB7CisJCW9mZnNldCA9IGxlMTZfdG9fY3B1KHhlLT54ZV9uYW1lX29mZnNldCk7CisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCisJCQl2YWx1ZV9sZW4gPSBPQ0ZTMl9YQVRUUl9TSVpFKAorCQkJCQlsZTY0X3RvX2NwdSh4ZS0+eGVfdmFsdWVfc2l6ZSkpOworCQllbHNlCisJCQl2YWx1ZV9sZW4gPSBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7CisJCWxlbiA9IE9DRlMyX1hBVFRSX1NJWkUoeGUtPnhlX25hbWVfbGVuKSArIHZhbHVlX2xlbjsKKworCQkvKgorCQkgKiBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBuYW1lL3ZhbHVlIHBhaXIKKwkJICogZXhpc3QgaW4gdGhlIHNhbWUgYmxvY2suIFNvIGFkanVzdCBlbmQgdG8KKwkJICogdGhlIHByZXZpb3VzIGJsb2NrIGVuZCBpZiBuZWVkZWQuCisJCSAqLworCQlpZiAoKChlbmQgLSBsZW4pIC8gYmxvY2tzaXplICE9CisJCQkoZW5kIC0gMSkgLyBibG9ja3NpemUpKQorCQkJZW5kID0gZW5kIC0gZW5kICUgYmxvY2tzaXplOworCisJCWlmIChlbmQgPiBvZmZzZXQgKyBsZW4pIHsKKwkJCW1lbW1vdmUoYnVja2V0X2J1ZiArIGVuZCAtIGxlbiwKKwkJCQlidWNrZXRfYnVmICsgb2Zmc2V0LCBsZW4pOworCQkJeGUtPnhlX25hbWVfb2Zmc2V0ID0gY3B1X3RvX2xlMTYoZW5kIC0gbGVuKTsKKwkJfQorCisJCW1sb2dfYnVnX29uX21zZyhlbmQgPCBvZmZzZXQgKyBsZW4sICJEZWZyYWcgY2hlY2sgZmFpbGVkIGZvciAiCisJCQkJImJ1Y2tldCAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWJsa25vKTsKKworCQllbmQgLT0gbGVuOworCX0KKworCW1sb2dfYnVnX29uX21zZyh4aF9mcmVlX3N0YXJ0ID4gZW5kLCAiRGVmcmFnIGNoZWNrIGZhaWxlZCBmb3IgIgorCQkJImJ1Y2tldCAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWJsa25vKTsKKworCWlmICh4aF9mcmVlX3N0YXJ0ID09IGVuZCkKKwkJZ290byBjb21taXQ7CisKKwltZW1zZXQoYnVja2V0X2J1ZiArIHhoX2ZyZWVfc3RhcnQsIDAsIGVuZCAtIHhoX2ZyZWVfc3RhcnQpOworCXhoLT54aF9mcmVlX3N0YXJ0ID0gY3B1X3RvX2xlMTYoZW5kKTsKKworCS8qIHNvcnQgdGhlIGVudHJpZXMgYnkgdGhlaXIgbmFtZV9oYXNoLiAqLworCXNvcnQoZW50cmllcywgbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KSwKKwkgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpLAorCSAgICAgY21wX3hlLCBzd2FwX3hlKTsKKworCWJ1ZiA9IGJ1Y2tldF9idWY7CisJZm9yIChpID0gMDsgaSA8IGJsa19wZXJfYnVja2V0OyBpKyssIGJ1ZiArPSBibG9ja3NpemUpIHsKKwkJbWVtY3B5KGJoc1tpXS0+Yl9kYXRhLCBidWYsIGJsb2Nrc2l6ZSk7CisJCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBiaHNbaV0pOworCX0KKworY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGhhbmRsZSk7CitvdXQ6CisKKwlpZiAoYmhzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBibGtfcGVyX2J1Y2tldDsgaSsrKQorCQkJYnJlbHNlKGJoc1tpXSk7CisJfQorCWtmcmVlKGJocyk7CisKKwlrZnJlZShidWNrZXRfYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTW92ZSBoYWxmIG51bXMgb2YgdGhlIHhhdHRyIGJ1Y2tldCBpbiB0aGUgcHJldmlvdXMgY2x1c3RlciB0byB0aGlzIG5ldworICogY2x1c3Rlci4gV2Ugb25seSB0b3VjaCB0aGUgbGFzdCBjbHVzdGVyIG9mIHRoZSBwcmV2aW91cyBleHRlbmQgcmVjb3JkLgorICoKKyAqIGZpcnN0X2JoIGlzIHRoZSBmaXJzdCBidWZmZXJfaGVhZCBvZiBhIHNlcmllcyBvZiBidWNrZXQgaW4gdGhlIHNhbWUKKyAqIGV4dGVudCByZWMgYW5kIGhlYWRlcl9iaCBpcyB0aGUgaGVhZGVyIG9mIG9uZSBidWNrZXQgaW4gdGhpcyBjbHVzdGVyLgorICogVGhleSB3aWxsIGJlIHVwZGF0ZWQgaWYgd2UgbW92ZSB0aGUgZGF0YSBoZWFkZXJfYmggY29udGFpbnMgdG8gdGhlIG5ldworICogY2x1c3Rlci4gZmlyc3RfaGFzaCB3aWxsIGJlIHNldCBhcyB0aGUgMXN0IHhlJ3MgbmFtZV9oYXNoIG9mIHRoZSBuZXcgY2x1c3Rlci4KKyAqLworc3RhdGljIGludCBvY2ZzMl9tdl94YXR0cl9idWNrZXRfY3Jvc3NfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgICAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmZpcnN0X2JoLAorCQkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqaGVhZGVyX2JoLAorCQkJCQkgICAgICAgdTY0IG5ld19ibGtubywKKwkJCQkJICAgICAgIHU2NCBwcmV2X2Jsa25vLAorCQkJCQkgICAgICAgdTMyIG51bV9jbHVzdGVycywKKwkJCQkJICAgICAgIHUzMiAqZmlyc3RfaGFzaCkKK3sKKwlpbnQgaSwgcmV0LCBjcmVkaXRzOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCWludCBicGMgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIDEpOworCWludCBudW1fYnVja2V0cyA9IG9jZnMyX3hhdHRyX2J1Y2tldHNfcGVyX2NsdXN0ZXIob3NiKTsKKwlpbnQgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCXN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLCAqbmV3X2JoLCAqcHJldl9iaCwgKm5ld19maXJzdF9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqbmV3X3hoOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0KKwkJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopKCgqZmlyc3RfYmgpLT5iX2RhdGEpOworCisJQlVHX09OKGxlMTZfdG9fY3B1KHhoLT54aF9udW1fYnVja2V0cykgPCBudW1fYnVja2V0cyk7CisJQlVHX09OKE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFID09IG9zYi0+c19jbHVzdGVyc2l6ZSk7CisKKwlwcmV2X2JoID0gKmZpcnN0X2JoOworCWdldF9iaChwcmV2X2JoKTsKKwl4aCA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopcHJldl9iaC0+Yl9kYXRhOworCisJcHJldl9ibGtubyArPSAobnVtX2NsdXN0ZXJzIC0gMSkgKiBicGMgKyBicGMgLyAyOworCisJbWxvZygwLCAibW92ZSBoYWxmIG9mIHhhdHRycyBpbiBjbHVzdGVyICVsbHUgdG8gJWxsdVxuIiwKKwkgICAgIHByZXZfYmxrbm8sIG5ld19ibGtubyk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSAxc3QgaGFsZiBvZiB0aGUgbmV3IGNsdXN0ZXIgYW5kCisJICogMSBtb3JlIGZvciB0aGUgdXBkYXRlIG9mIHRoZSAxc3QgYnVja2V0IG9mIHRoZSBwcmV2aW91cworCSAqIGV4dGVudCByZWNvcmQuCisJICovCisJY3JlZGl0cyA9IGJwYyAvIDIgKyAxOworCXJldCA9IG9jZnMyX2V4dGVuZF90cmFucyhoYW5kbGUsIGNyZWRpdHMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwcmV2X2JoLAorCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGJwYyAvIDI7IGkrKywgcHJldl9ibGtubysrLCBuZXdfYmxrbm8rKykgeworCQlvbGRfYmggPSBuZXdfYmggPSBOVUxMOworCQluZXdfYmggPSBzYl9nZXRibGsoaW5vZGUtPmlfc2IsIG5ld19ibGtubyk7CisJCWlmICghbmV3X2JoKSB7CisJCQlyZXQgPSAtRUlPOworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgbmV3X2JoKTsKKworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBuZXdfYmgsCisJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVsc2UobmV3X2JoKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgcHJldl9ibGtubywgJm9sZF9iaCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVsc2UobmV3X2JoKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbWVtY3B5KG5ld19iaC0+Yl9kYXRhLCBvbGRfYmgtPmJfZGF0YSwgYmxvY2tzaXplKTsKKworCQlpZiAoaSA9PSAwKSB7CisJCQluZXdfeGggPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKW5ld19iaC0+Yl9kYXRhOworCQkJbmV3X3hoLT54aF9udW1fYnVja2V0cyA9IGNwdV90b19sZTE2KG51bV9idWNrZXRzIC8gMik7CisKKwkJCWlmIChmaXJzdF9oYXNoKQorCQkJCSpmaXJzdF9oYXNoID0gbGUzMl90b19jcHUoCisJCQkJCW5ld194aC0+eGhfZW50cmllc1swXS54ZV9uYW1lX2hhc2gpOworCQkJbmV3X2ZpcnN0X2JoID0gbmV3X2JoOworCQkJZ2V0X2JoKG5ld19maXJzdF9iaCk7CisJCX0KKworCQlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgbmV3X2JoKTsKKworCQlpZiAoKmhlYWRlcl9iaCA9PSBvbGRfYmgpIHsKKwkJCWJyZWxzZSgqaGVhZGVyX2JoKTsKKwkJCSpoZWFkZXJfYmggPSBuZXdfYmg7CisJCQlnZXRfYmgoKmhlYWRlcl9iaCk7CisKKwkJCWJyZWxzZSgqZmlyc3RfYmgpOworCQkJKmZpcnN0X2JoID0gbmV3X2ZpcnN0X2JoOworCQkJZ2V0X2JoKCpmaXJzdF9iaCk7CisJCX0KKwkJYnJlbHNlKG5ld19iaCk7CisJCWJyZWxzZShvbGRfYmgpOworCX0KKworCWxlMTZfYWRkX2NwdSgmeGgtPnhoX251bV9idWNrZXRzLCAtKG51bV9idWNrZXRzIC8gMikpOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHByZXZfYmgpOworb3V0OgorCWJyZWxzZShwcmV2X2JoKTsKKwlicmVsc2UobmV3X2ZpcnN0X2JoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlYWRfeGF0dHJfYnVja2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgdTY0IGJsa25vLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocywKKwkJCQkgICBpbnQgbmV3KQoreworCWludCByZXQgPSAwOworCXUxNiBpLCBibGtfcGVyX2J1Y2tldCA9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGlub2RlLT5pX3NiKTsKKworCWlmICghbmV3KQorCQlyZXR1cm4gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsIGJsa25vLAorCQkJCQkgYmxrX3Blcl9idWNrZXQsIGJocywgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmxrX3Blcl9idWNrZXQ7IGkrKykgeworCQliaHNbaV0gPSBzYl9nZXRibGsoaW5vZGUtPmlfc2IsIGJsa25vICsgaSk7CisJCWlmIChiaHNbaV0gPT0gTlVMTCkgeworCQkJcmV0ID0gLUVJTzsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWFrOworCQl9CisJCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBiaHNbaV0pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBNb3ZlIGhhbGYgbnVtIG9mIHRoZSB4YXR0cnMgaW4gb2xkIGJ1Y2tldChibGspIHRvIG5ldyBidWNrZXQobmV3X2JsaykuCisgKiBmaXJzdF9oYXNoIHdpbGwgcmVjb3JkIHRoZSAxc3QgaGFzaCBvZiB0aGUgbmV3IGJ1Y2tldC4KKyAqLworc3RhdGljIGludCBvY2ZzMl9oYWxmX3hhdHRyX2J1Y2tldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgIGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgdTY0IGJsaywKKwkJCQkgICB1NjQgbmV3X2JsaywKKwkJCQkgICB1MzIgKmZpcnN0X2hhc2gsCisJCQkJICAgaW50IG5ld19idWNrZXRfaGVhZCkKK3sKKwlpbnQgcmV0LCBpOworCXUxNiBjb3VudCwgc3RhcnQsIGxlbiwgbmFtZV92YWx1ZV9sZW4sIHhlX2xlbiwgbmFtZV9vZmZzZXQ7CisJdTE2IGJsa19wZXJfYnVja2V0ID0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqKnNfYmhzLCAqKnRfYmhzID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlOworCWludCBibG9ja3NpemUgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisKKwltbG9nKDAsICJtb3ZlIGhhbGYgb2YgeGF0dHJzIGZyb20gYnVja2V0ICVsbHUgdG8gJWxsdVxuIiwKKwkgICAgIGJsaywgbmV3X2Jsayk7CisKKwlzX2JocyA9IGtjYWxsb2MoYmxrX3Blcl9idWNrZXQsIHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiksIEdGUF9OT0ZTKTsKKwlpZiAoIXNfYmhzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IG9jZnMyX3JlYWRfeGF0dHJfYnVja2V0KGlub2RlLCBibGssIHNfYmhzLCAwKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgc19iaHNbMF0sCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwl0X2JocyA9IGtjYWxsb2MoYmxrX3Blcl9idWNrZXQsIHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiksIEdGUF9OT0ZTKTsKKwlpZiAoIXRfYmhzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX3JlYWRfeGF0dHJfYnVja2V0KGlub2RlLCBuZXdfYmxrLCB0X2JocywgbmV3X2J1Y2tldF9oZWFkKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGJsa19wZXJfYnVja2V0OyBpKyspIHsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgdF9iaHNbaV0sCisJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogY29weSB0aGUgd2hvbGUgYnVja2V0IHRvIHRoZSBuZXcgZmlyc3QuICovCisJZm9yIChpID0gMDsgaSA8IGJsa19wZXJfYnVja2V0OyBpKyspCisJCW1lbWNweSh0X2Joc1tpXS0+Yl9kYXRhLCBzX2Joc1tpXS0+Yl9kYXRhLCBibG9ja3NpemUpOworCisJLyogdXBkYXRlIHRoZSBuZXcgYnVja2V0LiAqLworCXhoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKil0X2Joc1swXS0+Yl9kYXRhOworCWNvdW50ID0gbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsKKwlzdGFydCA9IGNvdW50IC8gMjsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSB0b3RhbCBuYW1lL3ZhbHVlIGxlbiBhbmQgeGhfZnJlZV9zdGFydCBmb3IKKwkgKiB0aGUgb2xkIGJ1Y2tldCBmaXJzdC4KKwkgKi8KKwluYW1lX29mZnNldCA9IE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFOworCW5hbWVfdmFsdWVfbGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc3RhcnQ7IGkrKykgeworCQl4ZSA9ICZ4aC0+eGhfZW50cmllc1tpXTsKKwkJeGVfbGVuID0gT0NGUzJfWEFUVFJfU0laRSh4ZS0+eGVfbmFtZV9sZW4pOworCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQorCQkJeGVfbGVuICs9CisJCQkgICBPQ0ZTMl9YQVRUUl9TSVpFKGxlNjRfdG9fY3B1KHhlLT54ZV92YWx1ZV9zaXplKSk7CisJCWVsc2UKKwkJCXhlX2xlbiArPSBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7CisJCW5hbWVfdmFsdWVfbGVuICs9IHhlX2xlbjsKKwkJaWYgKGxlMTZfdG9fY3B1KHhlLT54ZV9uYW1lX29mZnNldCkgPCBuYW1lX29mZnNldCkKKwkJCW5hbWVfb2Zmc2V0ID0gbGUxNl90b19jcHUoeGUtPnhlX25hbWVfb2Zmc2V0KTsKKwl9CisKKwkvKgorCSAqIE5vdyBiZWdpbiB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBuZXcgYnVja2V0LgorCSAqCisJICogSW4gdGhlIG5ldyBidWNrZXQsIFdlIGp1c3QgbW92ZSB0aGUgeGF0dHIgZW50cnkgdG8gdGhlIGJlZ2lubmluZworCSAqIGFuZCBkb24ndCB0b3VjaCB0aGUgbmFtZS92YWx1ZS4gU28gdGhlcmUgd2lsbCBiZSBzb21lIGhvbGVzIGluIHRoZQorCSAqIGJ1Y2tldCwgYW5kIHRoZXkgd2lsbCBiZSByZW1vdmVkIHdoZW4gb2NmczJfZGVmcmFnX3hhdHRyX2J1Y2tldCBpcworCSAqIGNhbGxlZC4KKwkgKi8KKwl4ZSA9ICZ4aC0+eGhfZW50cmllc1tzdGFydF07CisJbGVuID0gc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkgKiAoY291bnQgLSBzdGFydCk7CisJbWxvZygwLCAibXYgeGF0dHIgZW50cnkgbGVuICVkIGZyb20gJWQgdG8gJWRcbiIsIGxlbiwKKwkgICAgIChpbnQpKChjaGFyICopeGUgLSAoY2hhciAqKXhoKSwKKwkgICAgIChpbnQpKChjaGFyICopeGgtPnhoX2VudHJpZXMgLSAoY2hhciAqKXhoKSk7CisJbWVtbW92ZSgoY2hhciAqKXhoLT54aF9lbnRyaWVzLCAoY2hhciAqKXhlLCBsZW4pOworCXhlID0gJnhoLT54aF9lbnRyaWVzW2NvdW50IC0gc3RhcnRdOworCWxlbiA9IHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpICogc3RhcnQ7CisJbWVtc2V0KChjaGFyICopeGUsIDAsIGxlbik7CisKKwlsZTE2X2FkZF9jcHUoJnhoLT54aF9jb3VudCwgLXN0YXJ0KTsKKwlsZTE2X2FkZF9jcHUoJnhoLT54aF9uYW1lX3ZhbHVlX2xlbiwgLW5hbWVfdmFsdWVfbGVuKTsKKworCS8qIENhbGN1bGF0ZSB4aF9mcmVlX3N0YXJ0IGZvciB0aGUgbmV3IGJ1Y2tldC4gKi8KKwl4aC0+eGhfZnJlZV9zdGFydCA9IGNwdV90b19sZTE2KE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsgaSsrKSB7CisJCXhlID0gJnhoLT54aF9lbnRyaWVzW2ldOworCQl4ZV9sZW4gPSBPQ0ZTMl9YQVRUUl9TSVpFKHhlLT54ZV9uYW1lX2xlbik7CisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCisJCQl4ZV9sZW4gKz0KKwkJCSAgIE9DRlMyX1hBVFRSX1NJWkUobGU2NF90b19jcHUoeGUtPnhlX3ZhbHVlX3NpemUpKTsKKwkJZWxzZQorCQkJeGVfbGVuICs9IE9DRlMyX1hBVFRSX1JPT1RfU0laRTsKKwkJaWYgKGxlMTZfdG9fY3B1KHhlLT54ZV9uYW1lX29mZnNldCkgPAorCQkgICAgbGUxNl90b19jcHUoeGgtPnhoX2ZyZWVfc3RhcnQpKQorCQkJeGgtPnhoX2ZyZWVfc3RhcnQgPSB4ZS0+eGVfbmFtZV9vZmZzZXQ7CisJfQorCisJLyogc2V0IHhoLT54aF9udW1fYnVja2V0cyBmb3IgdGhlIG5ldyB4aC4gKi8KKwlpZiAobmV3X2J1Y2tldF9oZWFkKQorCQl4aC0+eGhfbnVtX2J1Y2tldHMgPSBjcHVfdG9fbGUxNigxKTsKKwllbHNlCisJCXhoLT54aF9udW1fYnVja2V0cyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmxrX3Blcl9idWNrZXQ7IGkrKykgeworCQlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgdF9iaHNbaV0pOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCX0KKworCS8qIHN0b3JlIHRoZSBmaXJzdF9oYXNoIG9mIHRoZSBuZXcgYnVja2V0LiAqLworCWlmIChmaXJzdF9oYXNoKQorCQkqZmlyc3RfaGFzaCA9IGxlMzJfdG9fY3B1KHhoLT54aF9lbnRyaWVzWzBdLnhlX25hbWVfaGFzaCk7CisKKwkvKgorCSAqIE5vdyBvbmx5IHVwZGF0ZSB0aGUgMXN0IGJsb2NrIG9mIHRoZSBvbGQgYnVja2V0LgorCSAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIGVudHJ5IGhhcyBiZWVuIHNvcnRlZCBhbHJlYWR5IGFib3ZlLgorCSAqLworCXhoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKilzX2Joc1swXS0+Yl9kYXRhOworCW1lbXNldCgmeGgtPnhoX2VudHJpZXNbc3RhcnRdLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSAqIChjb3VudCAtIHN0YXJ0KSk7CisJeGgtPnhoX2NvdW50ID0gY3B1X3RvX2xlMTYoc3RhcnQpOworCXhoLT54aF9mcmVlX3N0YXJ0ID0gY3B1X3RvX2xlMTYobmFtZV9vZmZzZXQpOworCXhoLT54aF9uYW1lX3ZhbHVlX2xlbiA9IGNwdV90b19sZTE2KG5hbWVfdmFsdWVfbGVuKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBzX2Joc1swXSk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXQ6CisJaWYgKHNfYmhzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBibGtfcGVyX2J1Y2tldDsgaSsrKQorCQkJYnJlbHNlKHNfYmhzW2ldKTsKKwl9CisJa2ZyZWUoc19iaHMpOworCisJaWYgKHRfYmhzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBibGtfcGVyX2J1Y2tldDsgaSsrKQorCQkJYnJlbHNlKHRfYmhzW2ldKTsKKwl9CisJa2ZyZWUodF9iaHMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENvcHkgeGF0dHIgZnJvbSBvbmUgYnVja2V0IHRvIGFub3RoZXIgYnVja2V0LgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgam91cm5hbCB0cmFuc2FjdGlvbgorICogaGFzIGVub3VnaCBzcGFjZSBmb3Igam91cm5hbGluZy4KKyAqLworc3RhdGljIGludCBvY2ZzMl9jcF94YXR0cl9idWNrZXQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgdTY0IHNfYmxrbm8sCisJCQkJIHU2NCB0X2Jsa25vLAorCQkJCSBpbnQgdF9pc19uZXcpCit7CisJaW50IHJldCwgaTsKKwlpbnQgYmxrX3Blcl9idWNrZXQgPSBvY2ZzMl9ibG9ja3NfcGVyX3hhdHRyX2J1Y2tldChpbm9kZS0+aV9zYik7CisJaW50IGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipzX2JocywgKip0X2JocyA9IE5VTEw7CisKKwlCVUdfT04oc19ibGtubyA9PSB0X2Jsa25vKTsKKworCW1sb2coMCwgImNwIGJ1Y2tldCAlbGx1IHRvICVsbHUsIHRhcmdldCBpcyAlZFxuIiwKKwkgICAgIHNfYmxrbm8sIHRfYmxrbm8sIHRfaXNfbmV3KTsKKworCXNfYmhzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFkICopICogYmxrX3Blcl9idWNrZXQsCisJCQlHRlBfTk9GUyk7CisJaWYgKCFzX2JocykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBvY2ZzMl9yZWFkX3hhdHRyX2J1Y2tldChpbm9kZSwgc19ibGtubywgc19iaHMsIDApOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJdF9iaHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQgKikgKiBibGtfcGVyX2J1Y2tldCwKKwkJCUdGUF9OT0ZTKTsKKwlpZiAoIXRfYmhzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX3JlYWRfeGF0dHJfYnVja2V0KGlub2RlLCB0X2Jsa25vLCB0X2JocywgdF9pc19uZXcpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJZm9yIChpID0gMDsgaSA8IGJsa19wZXJfYnVja2V0OyBpKyspIHsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgdF9iaHNbaV0sCisJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBibGtfcGVyX2J1Y2tldDsgaSsrKSB7CisJCW1lbWNweSh0X2Joc1tpXS0+Yl9kYXRhLCBzX2Joc1tpXS0+Yl9kYXRhLCBibG9ja3NpemUpOworCQlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgdF9iaHNbaV0pOworCX0KKworb3V0OgorCWlmIChzX2JocykgeworCQlmb3IgKGkgPSAwOyBpIDwgYmxrX3Blcl9idWNrZXQ7IGkrKykKKwkJCWJyZWxzZShzX2Joc1tpXSk7CisJfQorCWtmcmVlKHNfYmhzKTsKKworCWlmICh0X2JocykgeworCQlmb3IgKGkgPSAwOyBpIDwgYmxrX3Blcl9idWNrZXQ7IGkrKykKKwkJCWJyZWxzZSh0X2Joc1tpXSk7CisJfQorCWtmcmVlKHRfYmhzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDb3B5IG9uZSB4YXR0ciBjbHVzdGVyIGZyb20gc3JjX2JsayB0byB0b19ibGsuCisgKiBUaGUgdG9fYmxrIHdpbGwgYmVjb21lIHRoZSBmaXJzdCBidWNrZXQgaGVhZGVyIG9mIHRoZSBjbHVzdGVyLCBzbyBpdHMKKyAqIHhoX251bV9idWNrZXRzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYXMgdGhlIGJ1Y2tldCBudW0gaW4gdGhlIGNsdXN0ZXIuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfY3BfeGF0dHJfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZmlyc3RfYmgsCisJCQkJICB1NjQgc3JjX2JsaywKKwkJCQkgIHU2NCB0b19ibGssCisJCQkJICB1MzIgKmZpcnN0X2hhc2gpCit7CisJaW50IGksIHJldCwgY3JlZGl0czsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlpbnQgYnBjID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLCAxKTsKKwlpbnQgbnVtX2J1Y2tldHMgPSBvY2ZzMl94YXR0cl9idWNrZXRzX3Blcl9jbHVzdGVyKG9zYik7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGg7CisJdTY0IHRvX2Jsa19zdGFydCA9IHRvX2JsazsKKworCW1sb2coMCwgImNwIHhhdHRycyBmcm9tIGNsdXN0ZXIgJWxsdSB0byAlbGx1XG4iLCBzcmNfYmxrLCB0b19ibGspOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgbmV3IGNsdXN0ZXIgYW5kIDEgbW9yZSBmb3IgdGhlIHVwZGF0ZSBvZgorCSAqIHRoZSAxc3QgYnVja2V0IG9mIHRoZSBwcmV2aW91cyBleHRlbnQgcmVjLgorCSAqLworCWNyZWRpdHMgPSBicGMgKyAxOworCXJldCA9IG9jZnMyX2V4dGVuZF90cmFucyhoYW5kbGUsIGNyZWRpdHMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBmaXJzdF9iaCwKKwkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKSB7CisJCXJldCA9IG9jZnMyX2NwX3hhdHRyX2J1Y2tldChpbm9kZSwgaGFuZGxlLAorCQkJCQkgICAgc3JjX2JsaywgdG9fYmxrLCAxKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlzcmNfYmxrICs9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGlub2RlLT5pX3NiKTsKKwkJdG9fYmxrICs9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGlub2RlLT5pX3NiKTsKKwl9CisKKwkvKiB1cGRhdGUgdGhlIG9sZCBidWNrZXQgaGVhZGVyLiAqLworCXhoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKilmaXJzdF9iaC0+Yl9kYXRhOworCWxlMTZfYWRkX2NwdSgmeGgtPnhoX251bV9idWNrZXRzLCAtbnVtX2J1Y2tldHMpOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGZpcnN0X2JoKTsKKworCS8qIHVwZGF0ZSB0aGUgbmV3IGJ1Y2tldCBoZWFkZXIuICovCisJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgdG9fYmxrX3N0YXJ0LCAmYmgpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgYmgsCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwl4aCA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopYmgtPmJfZGF0YTsKKwl4aC0+eGhfbnVtX2J1Y2tldHMgPSBjcHVfdG9fbGUxNihudW1fYnVja2V0cyk7CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgYmgpOworCisJaWYgKGZpcnN0X2hhc2gpCisJCSpmaXJzdF9oYXNoID0gbGUzMl90b19jcHUoeGgtPnhoX2VudHJpZXNbMF0ueGVfbmFtZV9oYXNoKTsKK291dDoKKwlicmVsc2UoYmgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBNb3ZlIGhhbGYgb2YgdGhlIHhhdHRycyBpbiB0aGlzIGNsdXN0ZXIgdG8gdGhlIG5ldyBjbHVzdGVyLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBidWNrZXQgc2l6ZSA9PSBjbHVzdGVyIHNpemUuCisgKiBPdGhlcndpc2Ugb2NmczJfbXZfeGF0dHJfYnVja2V0X2Nyb3NzX2NsdXN0ZXIgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KKyAqLworc3RhdGljIGludCBvY2ZzMl9oYWxmX3hhdHRyX2NsdXN0ZXIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgdTY0IHByZXZfYmxrLAorCQkJCSAgICB1NjQgbmV3X2JsaywKKwkJCQkgICAgdTMyICpmaXJzdF9oYXNoKQoreworCXUxNiBibGtfcGVyX2J1Y2tldCA9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGlub2RlLT5pX3NiKTsKKwlpbnQgcmV0LCBjcmVkaXRzID0gMiAqIGJsa19wZXJfYnVja2V0OworCisJQlVHX09OKE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFIDwgT0NGUzJfU0IoaW5vZGUtPmlfc2IpLT5zX2NsdXN0ZXJzaXplKTsKKworCXJldCA9IG9jZnMyX2V4dGVuZF90cmFucyhoYW5kbGUsIGNyZWRpdHMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIE1vdmUgaGFsZiBvZiB0aGUgeGF0dHIgaW4gc3RhcnRfYmxrIHRvIHRoZSBuZXh0IGJ1Y2tldC4gKi8KKwlyZXR1cm4gIG9jZnMyX2hhbGZfeGF0dHJfYnVja2V0KGlub2RlLCBoYW5kbGUsIHByZXZfYmxrLAorCQkJCQluZXdfYmxrLCBmaXJzdF9oYXNoLCAxKTsKK30KKworLyoKKyAqIE1vdmUgc29tZSB4YXR0cnMgZnJvbSB0aGUgb2xkIGNsdXN0ZXIgdG8gdGhlIG5ldyBvbmUgc2luY2UgdGhleSBhcmUgbm90CisgKiBjb250aWd1b3VzIGluIG9jZnMyIHhhdHRyIHRyZWUuCisgKgorICogbmV3X2JsayBzdGFydHMgYSBuZXcgc2VwYXJhdGUgY2x1c3RlciwgYW5kIHdlIHdpbGwgbW92ZSBzb21lIHhhdHRycyBmcm9tCisgKiBwcmV2X2JsayB0byBpdC4gdl9zdGFydCB3aWxsIGJlIHNldCBhcyB0aGUgZmlyc3QgbmFtZSBoYXNoIHZhbHVlIGluIHRoaXMKKyAqIG5ldyBjbHVzdGVyIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgYXMgZV9jcG9zIGR1cmluZyB0cmVlIGluc2VydGlvbiBhbmQKKyAqIGRvbid0IGNvbGxpZGUgd2l0aCBvdXIgb3JpZ2luYWwgYi10cmVlIG9wZXJhdGlvbnMuIGZpcnN0X2JoIGFuZCBoZWFkZXJfYmgKKyAqIHdpbGwgYWxzbyBiZSB1cGRhdGVkIHNpbmNlIHRoZXkgd2lsbCBiZSB1c2VkIGluIG9jZnMyX2V4dGVuZF94YXR0cl9idWNrZXQKKyAqIHRvIGV4dGVuZCB0aGUgaW5zZXJ0IGJ1Y2tldC4KKyAqCisgKiBUaGUgcHJvYmxlbSBpcyBob3cgbXVjaCB4YXR0ciBzaG91bGQgd2UgbW92ZSB0byB0aGUgbmV3IG9uZSBhbmQgd2hlbiBzaG91bGQKKyAqIHdlIHVwZGF0ZSBmaXJzdF9iaCBhbmQgaGVhZGVyX2JoPworICogMS4gSWYgY2x1c3RlciBzaXplID4gYnVja2V0IHNpemUsIHRoYXQgbWVhbnMgdGhlIHByZXZpb3VzIGNsdXN0ZXIgaGFzIG1vcmUKKyAqICAgIHRoYW4gMSBidWNrZXQsIHNvIGp1c3QgbW92ZSBoYWxmIG51bXMgb2YgYnVja2V0IGludG8gdGhlIG5ldyBjbHVzdGVyIGFuZAorICogICAgdXBkYXRlIHRoZSBmaXJzdF9iaCBhbmQgaGVhZGVyX2JoIGlmIHRoZSBpbnNlcnQgYnVja2V0IGhhcyBiZWVuIG1vdmVkCisgKiAgICB0byB0aGUgbmV3IGNsdXN0ZXIuCisgKiAyLiBJZiBjbHVzdGVyX3NpemUgPT0gYnVja2V0X3NpemU6CisgKiAgICBhKSBJZiB0aGUgcHJldmlvdXMgZXh0ZW50IHJlYyBoYXMgbW9yZSB0aGFuIG9uZSBjbHVzdGVyIGFuZCB0aGUgaW5zZXJ0CisgKiAgICAgICBwbGFjZSBpc24ndCBpbiB0aGUgbGFzdCBjbHVzdGVyLCBjb3B5IHRoZSBlbnRpcmUgbGFzdCBjbHVzdGVyIHRvIHRoZQorICogICAgICAgbmV3IG9uZS4gVGhpcyB0aW1lLCB3ZSBkb24ndCBuZWVkIHRvIHVwYXRlIHRoZSBmaXJzdF9iaCBhbmQgaGVhZGVyX2JoCisgKiAgICAgICBzaW5jZSB0aGV5IHdpbGwgbm90IGJlIG1vdmVkIGludG8gdGhlIG5ldyBjbHVzdGVyLgorICogICAgYikgT3RoZXJ3aXNlLCBtb3ZlIHRoZSBib3R0b20gaGFsZiBvZiB0aGUgeGF0dHJzIGluIHRoZSBsYXN0IGNsdXN0ZXIgaW50bworICogICAgICAgdGhlIG5ldyBvbmUuIEFuZCB3ZSBzZXQgdGhlIGV4dGVuZCBmbGFnIHRvIHplcm8gaWYgdGhlIGluc2VydCBwbGFjZSBpcworICogICAgICAgbW92ZWQgaW50byB0aGUgbmV3IGFsbG9jYXRlZCBjbHVzdGVyIHNpbmNlIG5vIGV4dGVuZCBpcyBuZWVkZWQuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfYWRqdXN0X3hhdHRyX2Nyb3NzX2NsdXN0ZXIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgIGhhbmRsZV90ICpoYW5kbGUsCisJCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipmaXJzdF9iaCwKKwkJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmhlYWRlcl9iaCwKKwkJCQkJICAgIHU2NCBuZXdfYmxrLAorCQkJCQkgICAgdTY0IHByZXZfYmxrLAorCQkJCQkgICAgdTMyIHByZXZfY2x1c3RlcnMsCisJCQkJCSAgICB1MzIgKnZfc3RhcnQsCisJCQkJCSAgICBpbnQgKmV4dGVuZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgYnBjID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLCAxKTsKKworCW1sb2coMCwgImFkanVzdCB4YXR0cnMgZnJvbSBjbHVzdGVyICVsbHUgbGVuICV1IHRvICVsbHVcbiIsCisJICAgICBwcmV2X2JsaywgcHJldl9jbHVzdGVycywgbmV3X2Jsayk7CisKKwlpZiAob2NmczJfeGF0dHJfYnVja2V0c19wZXJfY2x1c3RlcihPQ0ZTMl9TQihpbm9kZS0+aV9zYikpID4gMSkKKwkJcmV0ID0gb2NmczJfbXZfeGF0dHJfYnVja2V0X2Nyb3NzX2NsdXN0ZXIoaW5vZGUsCisJCQkJCQkJICBoYW5kbGUsCisJCQkJCQkJICBmaXJzdF9iaCwKKwkJCQkJCQkgIGhlYWRlcl9iaCwKKwkJCQkJCQkgIG5ld19ibGssCisJCQkJCQkJICBwcmV2X2JsaywKKwkJCQkJCQkgIHByZXZfY2x1c3RlcnMsCisJCQkJCQkJICB2X3N0YXJ0KTsKKwllbHNlIHsKKwkJdTY0IGxhc3RfYmxrID0gcHJldl9ibGsgKyBicGMgKiAocHJldl9jbHVzdGVycyAtIDEpOworCisJCWlmIChwcmV2X2NsdXN0ZXJzID4gMSAmJiAoKmhlYWRlcl9iaCktPmJfYmxvY2tuciAhPSBsYXN0X2JsaykKKwkJCXJldCA9IG9jZnMyX2NwX3hhdHRyX2NsdXN0ZXIoaW5vZGUsIGhhbmRsZSwgKmZpcnN0X2JoLAorCQkJCQkJICAgICBsYXN0X2JsaywgbmV3X2JsaywKKwkJCQkJCSAgICAgdl9zdGFydCk7CisJCWVsc2UgeworCQkJcmV0ID0gb2NmczJfaGFsZl94YXR0cl9jbHVzdGVyKGlub2RlLCBoYW5kbGUsCisJCQkJCQkgICAgICAgbGFzdF9ibGssIG5ld19ibGssCisJCQkJCQkgICAgICAgdl9zdGFydCk7CisKKwkJCWlmICgoKmhlYWRlcl9iaCktPmJfYmxvY2tuciA9PSBsYXN0X2JsayAmJiBleHRlbmQpCisJCQkJKmV4dGVuZCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQWRkIGEgbmV3IGNsdXN0ZXIgZm9yIHhhdHRyIHN0b3JhZ2UuCisgKgorICogSWYgdGhlIG5ldyBjbHVzdGVyIGlzIGNvbnRpZ3VvdXMgd2l0aCB0aGUgcHJldmlvdXMgb25lLCBpdCB3aWxsIGJlCisgKiBhcHBlbmRlZCB0byB0aGUgc2FtZSBleHRlbnQgcmVjb3JkLCBhbmQgbnVtX2NsdXN0ZXJzIHdpbGwgYmUgdXBkYXRlZC4KKyAqIElmIG5vdCwgd2Ugd2lsbCBpbnNlcnQgYSBuZXcgZXh0ZW50IGZvciBpdCBhbmQgbW92ZSBzb21lIHhhdHRycyBpbgorICogdGhlIGxhc3QgY2x1c3RlciBpbnRvIHRoZSBuZXcgYWxsb2NhdGVkIG9uZS4KKyAqIFdlIGFsc28gbmVlZCB0byBsaW1pdCB0aGUgbWF4aW11bSBzaXplIG9mIGEgYnRyZWUgbGVhZiwgb3RoZXJ3aXNlIHdlJ2xsCisgKiBsb3NlIHRoZSBiZW5lZml0cyBvZiBoYXNoaW5nIGJlY2F1c2Ugd2UnbGwgaGF2ZSB0byBzZWFyY2ggbGFyZ2UgbGVhdmVzLgorICogU28gbm93IHRoZSBtYXhpbXVtIHNpemUgaXMgT0NGUzJfTUFYX1hBVFRSX1RSRUVfTEVBRl9TSVpFKG9yIGNsdXN0ZXJzaXplLAorICogaWYgaXQncyBiaWdnZXIpLgorICoKKyAqIGZpcnN0X2JoIGlzIHRoZSBmaXJzdCBibG9jayBvZiB0aGUgcHJldmlvdXMgZXh0ZW50IHJlYyBhbmQgaGVhZGVyX2JoCisgKiBpbmRpY2F0ZXMgdGhlIGJ1Y2tldCB3ZSB3aWxsIGluc2VydCB0aGUgbmV3IHhhdHRycy4gVGhleSB3aWxsIGJlIHVwZGF0ZWQKKyAqIHdoZW4gdGhlIGhlYWRlcl9iaCBpcyBtb3ZlZCBpbnRvIHRoZSBuZXcgY2x1c3Rlci4KKyAqLworc3RhdGljIGludCBvY2ZzMl9hZGRfbmV3X3hhdHRyX2NsdXN0ZXIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipmaXJzdF9iaCwKKwkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqaGVhZGVyX2JoLAorCQkJCSAgICAgICB1MzIgKm51bV9jbHVzdGVycywKKwkJCQkgICAgICAgdTMyIHByZXZfY3BvcywKKwkJCQkgICAgICAgdTY0IHByZXZfYmxrbm8sCisJCQkJICAgICAgIGludCAqZXh0ZW5kKQoreworCWludCByZXQsIGNyZWRpdHM7CisJdTE2IGJwYyA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgMSk7CisJdTMyIHByZXZfY2x1c3RlcnMgPSAqbnVtX2NsdXN0ZXJzOworCXUzMiBjbHVzdGVyc190b19hZGQgPSAxLCBiaXRfb2ZmLCBudW1fYml0cywgdl9zdGFydCA9IDA7CisJdTY0IGJsb2NrOworCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCisJbWxvZygwLCAiQWRkIG5ldyB4YXR0ciBjbHVzdGVyIGZvciAlbGx1LCBwcmV2aW91cyB4YXR0ciBoYXNoID0gJXUsICIKKwkgICAgICJwcmV2aW91cyB4YXR0ciBibGtubyA9ICVsbHVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKKwkgICAgIHByZXZfY3BvcywgcHJldl9ibGtubyk7CisKKwlvY2ZzMl9pbml0X3hhdHRyX3RyZWVfZXh0ZW50X3RyZWUoJmV0LCBpbm9kZSwgcm9vdF9iaCk7CisKKwlyZXQgPSBvY2ZzMl9sb2NrX2FsbG9jYXRvcnMoaW5vZGUsICZldCwgY2x1c3RlcnNfdG9fYWRkLCAwLAorCQkJCSAgICAmZGF0YV9hYywgJm1ldGFfYWMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGxlYXZlOworCX0KKworCWNyZWRpdHMgPSBvY2ZzMl9jYWxjX2V4dGVuZF9jcmVkaXRzKG9zYi0+c2IsIGV0LmV0X3Jvb3RfZWwsCisJCQkJCSAgICBjbHVzdGVyc190b19hZGQpOworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgY3JlZGl0cyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJaGFuZGxlID0gTlVMTDsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGxlYXZlOworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHJvb3RfYmgsCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlyZXQgPSBfX29jZnMyX2NsYWltX2NsdXN0ZXJzKG9zYiwgaGFuZGxlLCBkYXRhX2FjLCAxLAorCQkJCSAgICAgY2x1c3RlcnNfdG9fYWRkLCAmYml0X29mZiwgJm51bV9iaXRzKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0ICE9IC1FTk9TUEMpCisJCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJQlVHX09OKG51bV9iaXRzID4gY2x1c3RlcnNfdG9fYWRkKTsKKworCWJsb2NrID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKG9zYi0+c2IsIGJpdF9vZmYpOworCW1sb2coMCwgIkFsbG9jYXRpbmcgJXUgY2x1c3RlcnMgYXQgYmxvY2sgJXUgZm9yIHhhdHRyIGluIGlub2RlICVsbHVcbiIsCisJICAgICBudW1fYml0cywgYml0X29mZiwgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8pOworCisJaWYgKHByZXZfYmxrbm8gKyBwcmV2X2NsdXN0ZXJzICogYnBjID09IGJsb2NrICYmCisJICAgIChwcmV2X2NsdXN0ZXJzICsgbnVtX2JpdHMpIDw8IG9zYi0+c19jbHVzdGVyc2l6ZV9iaXRzIDw9CisJICAgICBPQ0ZTMl9NQVhfWEFUVFJfVFJFRV9MRUFGX1NJWkUpIHsKKwkJLyoKKwkJICogSWYgdGhpcyBjbHVzdGVyIGlzIGNvbnRpZ3VvdXMgd2l0aCB0aGUgb2xkIG9uZSBhbmQKKwkJICogYWRkaW5nIHRoaXMgbmV3IGNsdXN0ZXIsIHdlIGRvbid0IHN1cnBhc3MgdGhlIGxpbWl0IG9mCisJCSAqIE9DRlMyX01BWF9YQVRUUl9UUkVFX0xFQUZfU0laRSwgY29vbC4gV2Ugd2lsbCBsZXQgaXQgYmUKKwkJICogaW5pdGlhbGl6ZWQgYW5kIHVzZWQgbGlrZSBvdGhlciBidWNrZXRzIGluIHRoZSBwcmV2aW91cworCQkgKiBjbHVzdGVyLgorCQkgKiBTbyBhZGQgaXQgYXMgYSBjb250aWd1b3VzIG9uZS4gVGhlIGNhbGxlciB3aWxsIGhhbmRsZQorCQkgKiBpdHMgaW5pdCBwcm9jZXNzLgorCQkgKi8KKwkJdl9zdGFydCA9IHByZXZfY3BvcyArIHByZXZfY2x1c3RlcnM7CisJCSpudW1fY2x1c3RlcnMgPSBwcmV2X2NsdXN0ZXJzICsgbnVtX2JpdHM7CisJCW1sb2coMCwgIkFkZCBjb250aWd1b3VzICV1IGNsdXN0ZXJzIHRvIHByZXZpb3VzIGV4dGVudCByZWMuXG4iLAorCQkgICAgIG51bV9iaXRzKTsKKwl9IGVsc2UgeworCQlyZXQgPSBvY2ZzMl9hZGp1c3RfeGF0dHJfY3Jvc3NfY2x1c3Rlcihpbm9kZSwKKwkJCQkJCSAgICAgICBoYW5kbGUsCisJCQkJCQkgICAgICAgZmlyc3RfYmgsCisJCQkJCQkgICAgICAgaGVhZGVyX2JoLAorCQkJCQkJICAgICAgIGJsb2NrLAorCQkJCQkJICAgICAgIHByZXZfYmxrbm8sCisJCQkJCQkgICAgICAgcHJldl9jbHVzdGVycywKKwkJCQkJCSAgICAgICAmdl9zdGFydCwKKwkJCQkJCSAgICAgICBleHRlbmQpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIGxlYXZlOworCQl9CisJfQorCisJaWYgKGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0cyA8IGNyZWRpdHMpIHsKKwkJLyoKKwkJICogVGhlIGpvdXJuYWwgaGFzIGJlZW4gcmVzdGFydGVkIGJlZm9yZSwgYW5kIGRvbid0CisJCSAqIGhhdmUgZW5vdWdoIHNwYWNlIGZvciB0aGUgaW5zZXJ0aW9uLCBzbyBleHRlbmQgaXQKKwkJICogaGVyZS4KKwkJICovCisJCXJldCA9IG9jZnMyX2V4dGVuZF90cmFucyhoYW5kbGUsIGNyZWRpdHMpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIGxlYXZlOworCQl9CisJfQorCW1sb2coMCwgIkluc2VydCAldSBjbHVzdGVycyBhdCBibG9jayAlbGx1IGZvciB4YXR0ciBhdCAldVxuIiwKKwkgICAgIG51bV9iaXRzLCBibG9jaywgdl9zdGFydCk7CisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgaW5vZGUsICZldCwgdl9zdGFydCwgYmxvY2ssCisJCQkJICBudW1fYml0cywgMCwgbWV0YV9hYyk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGxlYXZlOworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCByb290X2JoKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gbGVhdmU7CisJfQorCitsZWF2ZToKKwlpZiAoaGFuZGxlKQorCQlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworCWlmIChkYXRhX2FjKQorCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoZGF0YV9hYyk7CisJaWYgKG1ldGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBFeHRlbmQgYSBuZXcgeGF0dHIgYnVja2V0IGFuZCBtb3ZlIHhhdHRycyB0byB0aGUgZW5kIG9uZSBieSBvbmUgdW50aWwKKyAqIFdlIG1lZXQgd2l0aCBzdGFydF9iaC4gT25seSBtb3ZlIGhhbGYgb2YgdGhlIHhhdHRycyB0byB0aGUgYnVja2V0IGFmdGVyIGl0LgorICovCitzdGF0aWMgaW50IG9jZnMyX2V4dGVuZF94YXR0cl9idWNrZXQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZmlyc3RfYmgsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnN0YXJ0X2JoLAorCQkJCSAgICAgdTMyIG51bV9jbHVzdGVycykKK3sKKwlpbnQgcmV0LCBjcmVkaXRzOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXUxNiBibGtfcGVyX2J1Y2tldCA9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGlub2RlLT5pX3NiKTsKKwl1NjQgc3RhcnRfYmxrID0gc3RhcnRfYmgtPmJfYmxvY2tuciwgZW5kX2JsazsKKwl1MzIgbnVtX2J1Y2tldHMgPSBudW1fY2x1c3RlcnMgKiBvY2ZzMl94YXR0cl9idWNrZXRzX3Blcl9jbHVzdGVyKG9zYik7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpmaXJzdF94aCA9CisJCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKilmaXJzdF9iaC0+Yl9kYXRhOworCXUxNiBidWNrZXQgPSBsZTE2X3RvX2NwdShmaXJzdF94aC0+eGhfbnVtX2J1Y2tldHMpOworCisJbWxvZygwLCAiZXh0ZW5kIHhhdHRyIGJ1Y2tldCBpbiAlbGx1LCB4YXR0ciBleHRlbmQgcmVjIHN0YXJ0aW5nICIKKwkgICAgICJmcm9tICVsbHUsIGxlbiA9ICV1XG4iLCBzdGFydF9ibGssCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWZpcnN0X2JoLT5iX2Jsb2NrbnIsIG51bV9jbHVzdGVycyk7CisKKwlCVUdfT04oYnVja2V0ID49IG51bV9idWNrZXRzKTsKKworCWVuZF9ibGsgPSBmaXJzdF9iaC0+Yl9ibG9ja25yICsgKGJ1Y2tldCAtIDEpICogYmxrX3Blcl9idWNrZXQ7CisKKwkvKgorCSAqIFdlIHdpbGwgdG91Y2ggYWxsIHRoZSBidWNrZXRzIGFmdGVyIHRoZSBzdGFydF9iaChpbmNsdWRlIGl0KS4KKwkgKiBBZGQgb25lIG1vcmUgYnVja2V0IGFuZCBtb2RpZnkgdGhlIGZpcnN0X2JoLgorCSAqLworCWNyZWRpdHMgPSBlbmRfYmxrIC0gc3RhcnRfYmxrICsgMiAqIGJsa19wZXJfYnVja2V0ICsgMTsKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCWhhbmRsZSA9IE5VTEw7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZmlyc3RfYmgsCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGNvbW1pdDsKKwl9CisKKwl3aGlsZSAoZW5kX2JsayAhPSBzdGFydF9ibGspIHsKKwkJcmV0ID0gb2NmczJfY3BfeGF0dHJfYnVja2V0KGlub2RlLCBoYW5kbGUsIGVuZF9ibGssCisJCQkJCSAgICBlbmRfYmxrICsgYmxrX3Blcl9idWNrZXQsIDApOworCQlpZiAocmV0KQorCQkJZ290byBjb21taXQ7CisJCWVuZF9ibGsgLT0gYmxrX3Blcl9idWNrZXQ7CisJfQorCisJLyogTW92ZSBoYWxmIG9mIHRoZSB4YXR0ciBpbiBzdGFydF9ibGsgdG8gdGhlIG5leHQgYnVja2V0LiAqLworCXJldCA9IG9jZnMyX2hhbGZfeGF0dHJfYnVja2V0KGlub2RlLCBoYW5kbGUsIHN0YXJ0X2JsaywKKwkJCQkgICAgICBzdGFydF9ibGsgKyBibGtfcGVyX2J1Y2tldCwgTlVMTCwgMCk7CisKKwlsZTE2X2FkZF9jcHUoJmZpcnN0X3hoLT54aF9udW1fYnVja2V0cywgMSk7CisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGZpcnN0X2JoKTsKKworY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEFkZCBuZXcgeGF0dHIgYnVja2V0IGluIGFuIGV4dGVudCByZWNvcmQgYW5kIGFkanVzdCB0aGUgYnVja2V0cyBhY2NvcmRpbmdseS4KKyAqIHhiX2JoIGlzIHRoZSBvY2ZzMl94YXR0cl9ibG9jay4KKyAqIFdlIHdpbGwgbW92ZSBhbGwgdGhlIGJ1Y2tldHMgc3RhcnRpbmcgZnJvbSBoZWFkZXJfYmggdG8gdGhlIG5leHQgcGxhY2UuIEFzCisgKiBmb3IgdGhpcyBvbmUsIGhhbGYgbnVtIG9mIGl0cyB4YXR0cnMgd2lsbCBiZSBtb3ZlZCB0byB0aGUgbmV4dCBvbmUuCisgKgorICogV2Ugd2lsbCBhbGxvY2F0ZSBhIG5ldyBjbHVzdGVyIGlmIGN1cnJlbnQgY2x1c3RlciBpcyBmdWxsIGFuZCBhZGp1c3QKKyAqIGhlYWRlcl9iaCBhbmQgZmlyc3RfYmggaWYgdGhlIGluc2VydCBwbGFjZSBpcyBtb3ZlZCB0byB0aGUgbmV3IGNsdXN0ZXIuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfYWRkX25ld194YXR0cl9idWNrZXQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnhiX2JoLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqaGVhZGVyX2JoKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKmZpcnN0X3hoID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZpcnN0X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiID0KKwkJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKil4Yl9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl94YXR0cl90cmVlX3Jvb3QgKnhiX3Jvb3QgPSAmeGItPnhiX2F0dHJzLnhiX3Jvb3Q7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9ICZ4Yl9yb290LT54dF9saXN0OworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0KKwkJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopaGVhZGVyX2JoLT5iX2RhdGE7CisJdTMyIG5hbWVfaGFzaCA9IGxlMzJfdG9fY3B1KHhoLT54aF9lbnRyaWVzWzBdLnhlX25hbWVfaGFzaCk7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0Ioc2IpOworCWludCByZXQsIG51bV9idWNrZXRzLCBleHRlbmQgPSAxOworCXU2NCBwX2Jsa25vOworCXUzMiBlX2Nwb3MsIG51bV9jbHVzdGVyczsKKworCW1sb2coMCwgIkFkZCBuZXcgeGF0dHIgYnVja2V0IHN0YXJ0aW5nIGZvcm0gJWxsdVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaGVhZGVyX2JoLT5iX2Jsb2NrbnIpOworCisJLyoKKwkgKiBBZGQgcmVmcmVuY2UgZm9yIGhlYWRlcl9iaCBoZXJlIGJlY2F1c2UgaXQgbWF5IGJlCisJICogY2hhbmdlZCBpbiBvY2ZzMl9hZGRfbmV3X3hhdHRyX2NsdXN0ZXIgYW5kIHdlIG5lZWQKKwkgKiB0byBmcmVlIGl0IGluIHRoZSBlbmQuCisJICovCisJZ2V0X2JoKGhlYWRlcl9iaCk7CisKKwlyZXQgPSBvY2ZzMl94YXR0cl9nZXRfcmVjKGlub2RlLCBuYW1lX2hhc2gsICZwX2Jsa25vLCAmZV9jcG9zLAorCQkJCSAgJm51bV9jbHVzdGVycywgZWwpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBwX2Jsa25vLCAmZmlyc3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwludW1fYnVja2V0cyA9IG9jZnMyX3hhdHRyX2J1Y2tldHNfcGVyX2NsdXN0ZXIob3NiKSAqIG51bV9jbHVzdGVyczsKKwlmaXJzdF94aCA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopZmlyc3RfYmgtPmJfZGF0YTsKKworCWlmIChudW1fYnVja2V0cyA9PSBsZTE2X3RvX2NwdShmaXJzdF94aC0+eGhfbnVtX2J1Y2tldHMpKSB7CisJCXJldCA9IG9jZnMyX2FkZF9uZXdfeGF0dHJfY2x1c3Rlcihpbm9kZSwKKwkJCQkJCSAgeGJfYmgsCisJCQkJCQkgICZmaXJzdF9iaCwKKwkJCQkJCSAgJmhlYWRlcl9iaCwKKwkJCQkJCSAgJm51bV9jbHVzdGVycywKKwkJCQkJCSAgZV9jcG9zLAorCQkJCQkJICBwX2Jsa25vLAorCQkJCQkJICAmZXh0ZW5kKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoZXh0ZW5kKQorCQlyZXQgPSBvY2ZzMl9leHRlbmRfeGF0dHJfYnVja2V0KGlub2RlLAorCQkJCQkJZmlyc3RfYmgsCisJCQkJCQloZWFkZXJfYmgsCisJCQkJCQludW1fY2x1c3RlcnMpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKK291dDoKKwlicmVsc2UoZmlyc3RfYmgpOworCWJyZWxzZShoZWFkZXJfYmgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqb2NmczJfeGF0dHJfYnVja2V0X2dldF92YWwoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0LAorCQkJCQlpbnQgb2ZmcykKK3sKKwlpbnQgYmxvY2tfb2ZmID0gb2ZmcyA+PiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKworCW9mZnMgPSBvZmZzICUgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCXJldHVybiBidWNrZXQtPmJoc1tibG9ja19vZmZdLT5iX2RhdGEgKyBvZmZzOworfQorCisvKgorICogSGFuZGxlIHRoZSBub3JtYWwgeGF0dHIgc2V0LCBpbmNsdWRpbmcgcmVwbGFjZSwgZGVsZXRlIGFuZCBuZXcuCisgKgorICogTm90ZTogImxvY2FsIiBpbmRpY2F0ZXMgdGhlIHJlYWwgZGF0YSdzIGxvY2FsaXR5LiBTbyB3ZSBjYW4ndAorICoganVzdCBpdHMgYnVja2V0IGxvY2FsaXR5IGJ5IGl0cyBsZW5ndGguCisgKi8KK3N0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX3NldF9lbnRyeV9ub3JtYWwoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAorCQkJCQkgdTMyIG5hbWVfaGFzaCwKKwkJCQkJIGludCBsb2NhbCkKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmxhc3QsICp4ZTsKKwlpbnQgbmFtZV9sZW4gPSBzdHJsZW4oeGktPm5hbWUpOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0geHMtPmhlYWRlcjsKKwl1MTYgY291bnQgPSBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpLCBzdGFydDsKKwlzaXplX3QgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCWNoYXIgKnZhbDsKKwlzaXplX3Qgb2Zmcywgc2l6ZSwgbmV3X3NpemU7CisKKwlsYXN0ID0gJnhoLT54aF9lbnRyaWVzW2NvdW50XTsKKwlpZiAoIXhzLT5ub3RfZm91bmQpIHsKKwkJeGUgPSB4cy0+aGVyZTsKKwkJb2ZmcyA9IGxlMTZfdG9fY3B1KHhlLT54ZV9uYW1lX29mZnNldCk7CisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCisJCQlzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKworCQkJT0NGUzJfWEFUVFJfU0laRShsZTY0X3RvX2NwdSh4ZS0+eGVfdmFsdWVfc2l6ZSkpOworCQllbHNlCisJCQlzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKworCQkJT0NGUzJfWEFUVFJfU0laRShPQ0ZTMl9YQVRUUl9ST09UX1NJWkUpOworCisJCS8qCisJCSAqIElmIHRoZSBuZXcgdmFsdWUgd2lsbCBiZSBzdG9yZWQgb3V0c2lkZSwgeGktPnZhbHVlIGhhcyBiZWVuCisJCSAqIGluaXRhbGl6ZWQgYXMgYW4gZW1wdHkgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCwgYW5kIHRoZSBzYW1lCisJCSAqIGdvZXMgd2l0aCB4aS0+dmFsdWVfbGVuLCBzbyB3ZSBjYW4gc2V0IG5ld19zaXplIHNhZmVseSBoZXJlLgorCQkgKiBTZWUgb2NmczJfeGF0dHJfc2V0X2luX2J1Y2tldC4KKwkJICovCisJCW5ld19zaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKworCQkJICAgT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKTsKKworCQlsZTE2X2FkZF9jcHUoJnhoLT54aF9uYW1lX3ZhbHVlX2xlbiwgLXNpemUpOworCQlpZiAoeGktPnZhbHVlKSB7CisJCQlpZiAobmV3X3NpemUgPiBzaXplKQorCQkJCWdvdG8gc2V0X25ld19uYW1lX3ZhbHVlOworCisJCQkvKiBOb3cgcmVwbGFjZSB0aGUgb2xkIHZhbHVlIHdpdGggbmV3IG9uZS4gKi8KKwkJCWlmIChsb2NhbCkKKwkJCQl4ZS0+eGVfdmFsdWVfc2l6ZSA9IGNwdV90b19sZTY0KHhpLT52YWx1ZV9sZW4pOworCQkJZWxzZQorCQkJCXhlLT54ZV92YWx1ZV9zaXplID0gMDsKKworCQkJdmFsID0gb2NmczJfeGF0dHJfYnVja2V0X2dldF92YWwoaW5vZGUsCisJCQkJCQkJICZ4cy0+YnVja2V0LCBvZmZzKTsKKwkJCW1lbXNldCh2YWwgKyBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSwgMCwKKwkJCSAgICAgICBzaXplIC0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikpOworCQkJaWYgKE9DRlMyX1hBVFRSX1NJWkUoeGktPnZhbHVlX2xlbikgPiAwKQorCQkJCW1lbWNweSh2YWwgKyBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSwKKwkJCQkgICAgICAgeGktPnZhbHVlLCB4aS0+dmFsdWVfbGVuKTsKKworCQkJbGUxNl9hZGRfY3B1KCZ4aC0+eGhfbmFtZV92YWx1ZV9sZW4sIG5ld19zaXplKTsKKwkJCW9jZnMyX3hhdHRyX3NldF9sb2NhbCh4ZSwgbG9jYWwpOworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFJlbW92ZSB0aGUgb2xkIGVudHJ5IGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUuCisJCQkgKiBXZSBkb24ndCByZW1vdmUgdGhlIGxhc3QgZW50cnkgc28gdGhhdCB3ZSBjYW4KKwkJCSAqIHVzZSBpdCB0byBpbmRpY2F0ZSB0aGUgaGFzaCB2YWx1ZSBvZiB0aGUgZW1wdHkKKwkJCSAqIGJ1Y2tldC4KKwkJCSAqLworCQkJbGFzdCAtPSAxOworCQkJbGUxNl9hZGRfY3B1KCZ4aC0+eGhfY291bnQsIC0xKTsKKwkJCWlmICh4aC0+eGhfY291bnQpIHsKKwkJCQltZW1tb3ZlKHhlLCB4ZSArIDEsCisJCQkJCSh2b2lkICopbGFzdCAtICh2b2lkICopeGUpOworCQkJCW1lbXNldChsYXN0LCAwLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSk7CisJCQl9IGVsc2UKKwkJCQl4aC0+eGhfZnJlZV9zdGFydCA9CisJCQkJCWNwdV90b19sZTE2KE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFKTsKKworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJLyogZmluZCBhIG5ldyBlbnRyeSBmb3IgaW5zZXJ0LiAqLworCQlpbnQgbG93ID0gMCwgaGlnaCA9IGNvdW50IC0gMSwgdG1wOworCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnRtcF94ZTsKKworCQl3aGlsZSAobG93IDw9IGhpZ2ggJiYgY291bnQpIHsKKwkJCXRtcCA9IChsb3cgKyBoaWdoKSAvIDI7CisJCQl0bXBfeGUgPSAmeGgtPnhoX2VudHJpZXNbdG1wXTsKKworCQkJaWYgKG5hbWVfaGFzaCA+IGxlMzJfdG9fY3B1KHRtcF94ZS0+eGVfbmFtZV9oYXNoKSkKKwkJCQlsb3cgPSB0bXAgKyAxOworCQkJZWxzZSBpZiAobmFtZV9oYXNoIDwKKwkJCQkgbGUzMl90b19jcHUodG1wX3hlLT54ZV9uYW1lX2hhc2gpKQorCQkJCWhpZ2ggPSB0bXAgLSAxOworCQkJZWxzZSB7CisJCQkJbG93ID0gdG1wOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJeGUgPSAmeGgtPnhoX2VudHJpZXNbbG93XTsKKwkJaWYgKGxvdyAhPSBjb3VudCkKKwkJCW1lbW1vdmUoeGUgKyAxLCB4ZSwgKHZvaWQgKilsYXN0IC0gKHZvaWQgKil4ZSk7CisKKwkJbGUxNl9hZGRfY3B1KCZ4aC0+eGhfY291bnQsIDEpOworCQltZW1zZXQoeGUsIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKKwkJeGUtPnhlX25hbWVfaGFzaCA9IGNwdV90b19sZTMyKG5hbWVfaGFzaCk7CisJCXhlLT54ZV9uYW1lX2xlbiA9IG5hbWVfbGVuOworCQlvY2ZzMl94YXR0cl9zZXRfdHlwZSh4ZSwgeGktPm5hbWVfaW5kZXgpOworCX0KKworc2V0X25ld19uYW1lX3ZhbHVlOgorCS8qIEluc2VydCB0aGUgbmV3IG5hbWUrdmFsdWUuICovCisJc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsgT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKTsKKworCS8qCisJICogV2UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbmFtZS92YWx1ZSBwYWlyCisJICogZXhpc3RzIGluIHRoZSBzYW1lIGJsb2NrLgorCSAqLworCW9mZnMgPSBsZTE2X3RvX2NwdSh4aC0+eGhfZnJlZV9zdGFydCk7CisJc3RhcnQgPSBvZmZzIC0gc2l6ZTsKKworCWlmIChzdGFydCA+PiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0cyAhPQorCSAgICAob2ZmcyAtIDEpID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSB7CisJCW9mZnMgPSBvZmZzIC0gb2ZmcyAlIGJsb2Nrc2l6ZTsKKwkJeGgtPnhoX2ZyZWVfc3RhcnQgPSBjcHVfdG9fbGUxNihvZmZzKTsKKwl9CisKKwl2YWwgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X3ZhbChpbm9kZSwKKwkJCQkJICZ4cy0+YnVja2V0LCBvZmZzIC0gc2l6ZSk7CisJeGUtPnhlX25hbWVfb2Zmc2V0ID0gY3B1X3RvX2xlMTYob2ZmcyAtIHNpemUpOworCisJbWVtc2V0KHZhbCwgMCwgc2l6ZSk7CisJbWVtY3B5KHZhbCwgeGktPm5hbWUsIG5hbWVfbGVuKTsKKwltZW1jcHkodmFsICsgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbiksIHhpLT52YWx1ZSwgeGktPnZhbHVlX2xlbik7CisKKwl4ZS0+eGVfdmFsdWVfc2l6ZSA9IGNwdV90b19sZTY0KHhpLT52YWx1ZV9sZW4pOworCW9jZnMyX3hhdHRyX3NldF9sb2NhbCh4ZSwgbG9jYWwpOworCXhzLT5oZXJlID0geGU7CisJbGUxNl9hZGRfY3B1KCZ4aC0+eGhfZnJlZV9zdGFydCwgLXNpemUpOworCWxlMTZfYWRkX2NwdSgmeGgtPnhoX25hbWVfdmFsdWVfbGVuLCBzaXplKTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9idWNrZXRfaGFuZGxlX2pvdXJuYWwoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAorCQkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocywKKwkJCQkJICAgICB1MTYgYmhfbnVtKQoreworCWludCByZXQgPSAwLCBvZmYsIGJsb2NrX29mZjsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlID0geHMtPmhlcmU7CisKKwkvKgorCSAqIEZpcnN0IGNhbGN1bGF0ZSBhbGwgdGhlIGJsb2NrcyB3ZSBzaG91bGQgam91cm5hbF9hY2Nlc3MKKwkgKiBhbmQgam91cm5hbF9kaXJ0eS4gVGhlIGZpcnN0IGJsb2NrIHNob3VsZCBhbHdheXMgYmUgdG91Y2hlZC4KKwkgKi8KKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgYmhzWzBdKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKKwkvKiBjYWxjIHRoZSBkYXRhLiAqLworCW9mZiA9IGxlMTZfdG9fY3B1KHhlLT54ZV9uYW1lX29mZnNldCk7CisJYmxvY2tfb2ZmID0gb2ZmID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBiaHNbYmxvY2tfb2ZmXSk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNldCB0aGUgeGF0dHIgZW50cnkgaW4gdGhlIHNwZWNpZmllZCBidWNrZXQuCisgKiBUaGUgYnVja2V0IGlzIGluZGljYXRlZCBieSB4cy0+YnVja2V0IGFuZCBpdCBzaG91bGQgaGF2ZSB0aGUgZW5vdWdoCisgKiBzcGFjZSBmb3IgdGhlIHhhdHRyIGluc2VydGlvbi4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9zZXRfZW50cnlfaW5fYnVja2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCisJCQkJCSAgIHUzMiBuYW1lX2hhc2gsCisJCQkJCSAgIGludCBsb2NhbCkKK3sKKwlpbnQgaSwgcmV0OworCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOworCXUxNiBibGtfcGVyX2J1Y2tldCA9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKworCW1sb2coMCwgIlNldCB4YXR0ciBlbnRyeSBsZW4gPSAlbHUgaW5kZXggPSAlZCBpbiBidWNrZXQgJWxsdVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nKXhpLT52YWx1ZV9sZW4sIHhpLT5uYW1lX2luZGV4LAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl4cy0+YnVja2V0LmJoc1swXS0+Yl9ibG9ja25yKTsKKworCWlmICgheHMtPmJ1Y2tldC5iaHNbMV0pIHsKKwkJcmV0ID0gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsCisJCQkJCXhzLT5idWNrZXQuYmhzWzBdLT5iX2Jsb2NrbnIgKyAxLAorCQkJCQlibGtfcGVyX2J1Y2tldCAtIDEsICZ4cy0+YnVja2V0LmJoc1sxXSwKKwkJCQkJMCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBibGtfcGVyX2J1Y2tldCk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJaGFuZGxlID0gTlVMTDsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYmxrX3Blcl9idWNrZXQ7IGkrKykgeworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB4cy0+YnVja2V0LmJoc1tpXSwKKwkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCQlpZiAocmV0IDwgMCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlvY2ZzMl94YXR0cl9zZXRfZW50cnlfbm9ybWFsKGlub2RlLCB4aSwgeHMsIG5hbWVfaGFzaCwgbG9jYWwpOworCisJLypPbmx5IGRpcnR5IHRoZSBibG9ja3Mgd2UgaGF2ZSB0b3VjaGVkIGluIHNldCB4YXR0ci4gKi8KKwlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfaGFuZGxlX2pvdXJuYWwoaW5vZGUsIGhhbmRsZSwgeHMsCisJCQkJCQl4cy0+YnVja2V0LmJocywgYmxrX3Blcl9idWNrZXQpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKK291dDoKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl92YWx1ZV91cGRhdGVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICp4ZV9iaCwKKwkJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUsCisJCQkJCSB1NjQgbmV3X3NpemUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgMSk7CisJaWYgKGhhbmRsZSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgeGVfYmgsCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCXhlLT54ZV92YWx1ZV9zaXplID0gY3B1X3RvX2xlNjQobmV3X3NpemUpOworCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHhlX2JoKTsKKwlpZiAocmV0IDwgMCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRydW5jYXRlIHRoZSBzcGVjaWZpZWQgeGVfb2ZmIGVudHJ5IGluIHhhdHRyIGJ1Y2tldC4KKyAqIGJ1Y2tldCBpcyBpbmRpY2F0ZWQgYnkgaGVhZGVyX2JoIGFuZCBsZW4gaXMgdGhlIG5ldyBsZW5ndGguCisgKiBCb3RoIHRoZSBvY2ZzMl94YXR0cl92YWx1ZV9yb290IGFuZCB0aGUgZW50cnkgd2lsbCBiZSB1cGRhdGVkIGhlcmUuCisgKgorICogQ29weSB0aGUgbmV3IHVwZGF0ZWQgeGUgYW5kIHhlX3ZhbHVlX3Jvb3QgdG8gbmV3X3hlIGFuZCBuZXdfeHYgaWYgbmVlZGVkLgorICovCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2J1Y2tldF92YWx1ZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqaGVhZGVyX2JoLAorCQkJCQkgICAgIGludCB4ZV9vZmYsCisJCQkJCSAgICAgaW50IGxlbikKK3sKKwlpbnQgcmV0LCBvZmZzZXQ7CisJdTY0IHZhbHVlX2JsazsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnZhbHVlX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHY7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9CisJCQkoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKWhlYWRlcl9iaC0+Yl9kYXRhOworCXNpemVfdCBibG9ja3NpemUgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisKKwl4ZSA9ICZ4aC0+eGhfZW50cmllc1t4ZV9vZmZdOworCisJQlVHX09OKCF4ZSB8fCBvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpOworCisJb2Zmc2V0ID0gbGUxNl90b19jcHUoeGUtPnhlX25hbWVfb2Zmc2V0KSArCisJCSBPQ0ZTMl9YQVRUUl9TSVpFKHhlLT54ZV9uYW1lX2xlbik7CisKKwl2YWx1ZV9ibGsgPSBvZmZzZXQgLyBibG9ja3NpemU7CisKKwkvKiBXZSBkb24ndCBhbGxvdyBvY2ZzMl94YXR0cl92YWx1ZSB0byBiZSBzdG9yZWQgaW4gZGlmZmVyZW50IGJsb2NrLiAqLworCUJVR19PTih2YWx1ZV9ibGsgIT0gKG9mZnNldCArIE9DRlMyX1hBVFRSX1JPT1RfU0laRSAtIDEpIC8gYmxvY2tzaXplKTsKKwl2YWx1ZV9ibGsgKz0gaGVhZGVyX2JoLT5iX2Jsb2NrbnI7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCB2YWx1ZV9ibGssICZ2YWx1ZV9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXh2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopCisJCSh2YWx1ZV9iaC0+Yl9kYXRhICsgb2Zmc2V0ICUgYmxvY2tzaXplKTsKKworCW1sb2coMCwgInRydW5jYXRlICV1IGluIHhhdHRyIGJ1Y2tldCAlbGx1IHRvICVkIGJ5dGVzLlxuIiwKKwkgICAgIHhlX29mZiwgKHVuc2lnbmVkIGxvbmcgbG9uZyloZWFkZXJfYmgtPmJfYmxvY2tuciwgbGVuKTsKKwlyZXQgPSBvY2ZzMl94YXR0cl92YWx1ZV90cnVuY2F0ZShpbm9kZSwgdmFsdWVfYmgsIHh2LCBsZW4pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl94YXR0cl92YWx1ZV91cGRhdGVfc2l6ZShpbm9kZSwgaGVhZGVyX2JoLCB4ZSwgbGVuKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJYnJlbHNlKHZhbHVlX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2J1Y2tldF92YWx1ZV90cnVuY2F0ZV94cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCisJCQkJCQlpbnQgbGVuKQoreworCWludCByZXQsIG9mZnNldDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlID0geHMtPmhlcmU7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKXhzLT5iYXNlOworCisJQlVHX09OKCF4cy0+YnVja2V0LmJoc1swXSB8fCAheGUgfHwgb2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKTsKKworCW9mZnNldCA9IHhlIC0geGgtPnhoX2VudHJpZXM7CisJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X3ZhbHVlX3RydW5jYXRlKGlub2RlLCB4cy0+YnVja2V0LmJoc1swXSwKKwkJCQkJCW9mZnNldCwgbGVuKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2J1Y2tldF9zZXRfdmFsdWVfb3V0c2lkZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCisJCQkJCQljaGFyICp2YWwsCisJCQkJCQlpbnQgdmFsdWVfbGVuKQoreworCWludCBvZmZzZXQ7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2OworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUgPSB4cy0+aGVyZTsKKworCUJVR19PTigheHMtPmJhc2UgfHwgIXhlIHx8IG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSk7CisKKwlvZmZzZXQgPSBsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpICsKKwkJIE9DRlMyX1hBVFRSX1NJWkUoeGUtPnhlX25hbWVfbGVuKTsKKworCXh2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopKHhzLT5iYXNlICsgb2Zmc2V0KTsKKworCXJldHVybiBfX29jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKGlub2RlLCB4diwgdmFsLCB2YWx1ZV9sZW4pOworfQorCitzdGF0aWMgaW50IG9jZnMyX3JtX3hhdHRyX2NsdXN0ZXIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCwKKwkJCQkgIHU2NCBibGtubywKKwkJCQkgIHUzMiBjcG9zLAorCQkJCSAgdTMyIGxlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBpbm9kZSAqdGxfaW5vZGUgPSBvc2ItPm9zYl90bF9pbm9kZTsKKwloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGIgPQorCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKXJvb3RfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgZGVhbGxvYzsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CisKKwlvY2ZzMl9pbml0X3hhdHRyX3RyZWVfZXh0ZW50X3RyZWUoJmV0LCBpbm9kZSwgcm9vdF9iaCk7CisKKwlvY2ZzMl9pbml0X2RlYWxsb2NfY3R4dCgmZGVhbGxvYyk7CisKKwltbG9nKDAsICJybSB4YXR0ciBleHRlbnQgcmVjIGF0ICV1IGxlbiA9ICV1LCBzdGFydCBmcm9tICVsbHVcbiIsCisJICAgICBjcG9zLCBsZW4sICh1bnNpZ25lZCBsb25nIGxvbmcpYmxrbm8pOworCisJb2NmczJfcmVtb3ZlX3hhdHRyX2NsdXN0ZXJzX2Zyb21fY2FjaGUoaW5vZGUsIGJsa25vLCBsZW4pOworCisJcmV0ID0gb2NmczJfbG9ja19hbGxvY2F0b3JzKGlub2RlLCAmZXQsIDAsIDEsIE5VTEwsICZtZXRhX2FjKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltdXRleF9sb2NrKCZ0bF9pbm9kZS0+aV9tdXRleCk7CisKKwlpZiAob2NmczJfdHJ1bmNhdGVfbG9nX25lZWRzX2ZsdXNoKG9zYikpIHsKKwkJcmV0ID0gX19vY2ZzMl9mbHVzaF90cnVuY2F0ZV9sb2cob3NiKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBPQ0ZTMl9SRU1PVkVfRVhURU5UX0NSRURJVFMpOworCWlmIChoYW5kbGUgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHJvb3RfYmgsCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJcmV0ID0gb2NmczJfcmVtb3ZlX2V4dGVudChpbm9kZSwgJmV0LCBjcG9zLCBsZW4sIGhhbmRsZSwgbWV0YV9hYywKKwkJCQkgICZkZWFsbG9jKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCWxlMzJfYWRkX2NwdSgmeGItPnhiX2F0dHJzLnhiX3Jvb3QueHRfY2x1c3RlcnMsIC1sZW4pOworCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHJvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJcmV0ID0gb2NmczJfdHJ1bmNhdGVfbG9nX2FwcGVuZChvc2IsIGhhbmRsZSwgYmxrbm8sIGxlbik7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CitvdXQ6CisJb2NmczJfc2NoZWR1bGVfdHJ1bmNhdGVfbG9nX2ZsdXNoKG9zYiwgMSk7CisKKwltdXRleF91bmxvY2soJnRsX2lub2RlLT5pX211dGV4KTsKKworCWlmIChtZXRhX2FjKQorCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7CisKKwlvY2ZzMl9ydW5fZGVhbGxvY3Mob3NiLCAmZGVhbGxvYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YXR0cl9idWNrZXRfcmVtb3ZlX3hzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cykKK3sKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IHhzLT5idWNrZXQueGg7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICpsYXN0ID0gJnhoLT54aF9lbnRyaWVzWworCQkJCQkJbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KSAtIDFdOworCWludCByZXQgPSAwOworCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMoKE9DRlMyX1NCKGlub2RlLT5pX3NiKSksIDEpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHhzLT5idWNrZXQuYmhzWzBdLAorCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCS8qIFJlbW92ZSB0aGUgb2xkIGVudHJ5LiAqLworCW1lbW1vdmUoeHMtPmhlcmUsIHhzLT5oZXJlICsgMSwKKwkJKHZvaWQgKilsYXN0IC0gKHZvaWQgKil4cy0+aGVyZSk7CisJbWVtc2V0KGxhc3QsIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKKwlsZTE2X2FkZF9jcHUoJnhoLT54aF9jb3VudCwgLTEpOworCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHhzLT5idWNrZXQuYmhzWzBdKTsKKwlpZiAocmV0IDwgMCkKKwkJbWxvZ19lcnJubyhyZXQpOworb3V0X2NvbW1pdDoKKwlvY2ZzMl9jb21taXRfdHJhbnMoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCBoYW5kbGUpOworfQorCisvKgorICogU2V0IHRoZSB4YXR0ciBuYW1lL3ZhbHVlIGluIHRoZSBidWNrZXQgc3BlY2lmaWVkIGluIHhzLgorICoKKyAqIEFzIHRoZSBuZXcgdmFsdWUgaW4geGkgbWF5IGJlIHN0b3JlZCBpbiB0aGUgYnVja2V0IG9yIGluIGFuIG91dHNpZGUgY2x1c3RlciwKKyAqIHdlIGRpdmlkZSB0aGUgd2hvbGUgcHJvY2VzcyBpbnRvIDMgc3RlcHM6CisgKiAxLiBpbnNlcnQgbmFtZS92YWx1ZSBpbiB0aGUgYnVja2V0KG9jZnMyX3hhdHRyX3NldF9lbnRyeV9pbl9idWNrZXQpCisgKiAyLiB0cnVuY2F0ZSBvZiB0aGUgb3V0c2lkZSBjbHVzdGVyKG9jZnMyX3hhdHRyX2J1Y2tldF92YWx1ZV90cnVuY2F0ZV94cykKKyAqIDMuIFNldCB0aGUgdmFsdWUgdG8gdGhlIG91dHNpZGUgY2x1c3RlcihvY2ZzMl94YXR0cl9idWNrZXRfc2V0X3ZhbHVlX291dHNpZGUpCisgKiA0LiBJZiB0aGUgY2x1c3RlcnMgZm9yIHRoZSBuZXcgb3V0c2lkZSB2YWx1ZSBjYW4ndCBiZSBhbGxvY2F0ZWQsIHdlIG5lZWQKKyAqICAgIHRvIGZyZWUgdGhlIHhhdHRyIHdlIGFsbG9jYXRlZCBpbiBzZXQuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2V0X2luX2J1Y2tldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpCit7CisJaW50IHJldCwgbG9jYWwgPSAxOworCXNpemVfdCB2YWx1ZV9sZW47CisJY2hhciAqdmFsID0gKGNoYXIgKil4aS0+dmFsdWU7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSA9IHhzLT5oZXJlOworCXUzMiBuYW1lX2hhc2ggPSBvY2ZzMl94YXR0cl9uYW1lX2hhc2goaW5vZGUsIHhpLT5uYW1lLAorCQkJCQkgICAgICBzdHJsZW4oeGktPm5hbWUpKTsKKworCWlmICgheHMtPm5vdF9mb3VuZCAmJiAhb2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKSB7CisJCS8qCisJCSAqIFdlIG5lZWQgdG8gdHJ1bmNhdGUgdGhlIHhhdHRyIHN0b3JhZ2UgZmlyc3QuCisJCSAqCisJCSAqIElmIGJvdGggdGhlIG9sZCBhbmQgbmV3IHZhbHVlIGFyZSBzdG9yZWQgdG8KKwkJICogb3V0c2lkZSBibG9jaywgd2Ugb25seSBuZWVkIHRvIHRydW5jYXRlCisJCSAqIHRoZSBzdG9yYWdlIGFuZCB0aGVuIHNldCB0aGUgdmFsdWUgb3V0c2lkZS4KKwkJICoKKwkJICogSWYgdGhlIG5ldyB2YWx1ZSBzaG91bGQgYmUgc3RvcmVkIHdpdGhpbiBibG9jaywKKwkJICogd2Ugc2hvdWxkIGZyZWUgYWxsIHRoZSBvdXRzaWRlIGJsb2NrIGZpcnN0IGFuZAorCQkgKiB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSB4YXR0ciBibG9jayB3aWxsIGJlIGRvbmUKKwkJICogYnkgZm9sbG93aW5nIHN0ZXBzLgorCQkgKi8KKwkJaWYgKHhpLT52YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkKKwkJCXZhbHVlX2xlbiA9IHhpLT52YWx1ZV9sZW47CisJCWVsc2UKKwkJCXZhbHVlX2xlbiA9IDA7CisKKwkJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X3ZhbHVlX3RydW5jYXRlX3hzKGlub2RlLCB4cywKKwkJCQkJCQkgICB2YWx1ZV9sZW4pOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisKKwkJaWYgKHZhbHVlX2xlbikKKwkJCWdvdG8gc2V0X3ZhbHVlX291dHNpZGU7CisJfQorCisJdmFsdWVfbGVuID0geGktPnZhbHVlX2xlbjsKKwkvKiBTbyB3ZSBoYXZlIHRvIGhhbmRsZSB0aGUgaW5zaWRlIGJsb2NrIGNoYW5nZSBub3cuICovCisJaWYgKHZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7CisJCS8qCisJCSAqIElmIHRoZSBuZXcgdmFsdWUgd2lsbCBiZSBzdG9yZWQgb3V0c2lkZSBvZiBibG9jaywKKwkJICogaW5pdGFsaXplIGEgbmV3IGVtcHR5IHZhbHVlIHJvb3QgYW5kIGluc2VydCBpdCBmaXJzdC4KKwkJICovCisJCWxvY2FsID0gMDsKKwkJeGktPnZhbHVlID0gJmRlZl94djsKKwkJeGktPnZhbHVlX2xlbiA9IE9DRlMyX1hBVFRSX1JPT1RfU0laRTsKKwl9CisKKwlyZXQgPSBvY2ZzMl94YXR0cl9zZXRfZW50cnlfaW5fYnVja2V0KGlub2RlLCB4aSwgeHMsIG5hbWVfaGFzaCwgbG9jYWwpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodmFsdWVfbGVuIDw9IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKQorCQlnb3RvIG91dDsKKworCS8qIGFsbG9jYXRlIHRoZSBzcGFjZSBub3cgZm9yIHRoZSBvdXRzaWRlIGJsb2NrIHN0b3JhZ2UuICovCisJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X3ZhbHVlX3RydW5jYXRlX3hzKGlub2RlLCB4cywKKwkJCQkJCSAgIHZhbHVlX2xlbik7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisKKwkJaWYgKHhzLT5ub3RfZm91bmQpIHsKKwkJCS8qCisJCQkgKiBXZSBjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggY2x1c3RlcnMgZm9yIG91dHNpZGUKKwkJCSAqIHN0b3JhZ2UgYW5kIHdlIGhhdmUgYWxsb2NhdGVkIHhhdHRyIGFscmVhZHksCisJCQkgKiBzbyBuZWVkIHRvIHJlbW92ZSBpdC4KKwkJCSAqLworCQkJb2NmczJfeGF0dHJfYnVja2V0X3JlbW92ZV94cyhpbm9kZSwgeHMpOworCQl9CisJCWdvdG8gb3V0OworCX0KKworc2V0X3ZhbHVlX291dHNpZGU6CisJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X3NldF92YWx1ZV9vdXRzaWRlKGlub2RlLCB4cywgdmFsLCB2YWx1ZV9sZW4pOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qIGNoZWNrIHdoZXRoZXIgdGhlIHhhdHRyIGJ1Y2tldCBpcyBmaWxsZWQgdXAgd2l0aCB0aGUgc2FtZSBoYXNoIHZhbHVlLiAqLworc3RhdGljIGludCBvY2ZzMl9jaGVja194YXR0cl9idWNrZXRfY29sbGlzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCkKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IGJ1Y2tldC0+eGg7CisKKwlpZiAoeGgtPnhoX2VudHJpZXNbbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KSAtIDFdLnhlX25hbWVfaGFzaCA9PQorCSAgICB4aC0+eGhfZW50cmllc1swXS54ZV9uYW1lX2hhc2gpIHsKKwkJbWxvZyhNTF9FUlJPUiwgIlRvbyBtdWNoIGhhc2ggY29sbGlzaW9uIGluIHhhdHRyIGJ1Y2tldCAlbGx1LCAiCisJCSAgICAgImhhc2ggPSAldVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJ1Y2tldC0+YmhzWzBdLT5iX2Jsb2NrbnIsCisJCSAgICAgbGUzMl90b19jcHUoeGgtPnhoX2VudHJpZXNbMF0ueGVfbmFtZV9oYXNoKSk7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3NldF9lbnRyeV9pbmRleF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cykKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlOworCXUxNiBjb3VudCwgaGVhZGVyX3NpemUsIHhoX2ZyZWVfc3RhcnQ7CisJaW50IGksIGZyZWUsIG1heF9mcmVlLCBuZWVkLCBvbGQ7CisJc2l6ZV90IHZhbHVlX3NpemUgPSAwLCBuYW1lX2xlbiA9IHN0cmxlbih4aS0+bmFtZSk7CisJc2l6ZV90IGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKwlpbnQgcmV0LCBhbGxvY2F0aW9uID0gMDsKKwl1MTYgYmxrX3Blcl9idWNrZXQgPSBvY2ZzMl9ibG9ja3NfcGVyX3hhdHRyX2J1Y2tldChpbm9kZS0+aV9zYik7CisKKwltbG9nX2VudHJ5KCJTZXQgeGF0dHIgJXMgaW4geGF0dHIgaW5kZXggYmxvY2tcbiIsIHhpLT5uYW1lKTsKKwordHJ5X2FnYWluOgorCXhoID0geHMtPmhlYWRlcjsKKwljb3VudCA9IGxlMTZfdG9fY3B1KHhoLT54aF9jb3VudCk7CisJeGhfZnJlZV9zdGFydCA9IGxlMTZfdG9fY3B1KHhoLT54aF9mcmVlX3N0YXJ0KTsKKwloZWFkZXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyKSArCisJCQljb3VudCAqIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpOworCW1heF9mcmVlID0gT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUgLQorCQlsZTE2X3RvX2NwdSh4aC0+eGhfbmFtZV92YWx1ZV9sZW4pIC0gaGVhZGVyX3NpemU7CisKKwltbG9nX2J1Z19vbl9tc2coaGVhZGVyX3NpemUgPiBibG9ja3NpemUsICJidWNrZXQgJWxsdSBoYXMgaGVhZGVyIHNpemUgIgorCQkJIm9mICV1IHdoaWNoIGV4Y2VlZCBibG9jayBzaXplXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl4cy0+YnVja2V0LmJoc1swXS0+Yl9ibG9ja25yLAorCQkJaGVhZGVyX3NpemUpOworCisJaWYgKHhpLT52YWx1ZSAmJiB4aS0+dmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpCisJCXZhbHVlX3NpemUgPSBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7CisJZWxzZSBpZiAoeGktPnZhbHVlKQorCQl2YWx1ZV9zaXplID0gT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKTsKKworCWlmICh4cy0+bm90X2ZvdW5kKQorCQluZWVkID0gc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkgKworCQkJT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyB2YWx1ZV9zaXplOworCWVsc2UgeworCQluZWVkID0gdmFsdWVfc2l6ZSArIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pOworCisJCS8qCisJCSAqIFdlIG9ubHkgcmVwbGFjZSB0aGUgb2xkIHZhbHVlIGlmIHRoZSBuZXcgbGVuZ3RoIGlzIHNtYWxsZXIKKwkJICogdGhhbiB0aGUgb2xkIG9uZS4gT3RoZXJ3aXNlIHdlIHdpbGwgYWxsb2NhdGUgbmV3IHNwYWNlIGluIHRoZQorCQkgKiBidWNrZXQgdG8gc3RvcmUgaXQuCisJCSAqLworCQl4ZSA9IHhzLT5oZXJlOworCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQorCQkJb2xkID0gT0NGUzJfWEFUVFJfU0laRShsZTY0X3RvX2NwdSh4ZS0+eGVfdmFsdWVfc2l6ZSkpOworCQllbHNlCisJCQlvbGQgPSBPQ0ZTMl9YQVRUUl9TSVpFKE9DRlMyX1hBVFRSX1JPT1RfU0laRSk7CisKKwkJaWYgKG9sZCA+PSB2YWx1ZV9zaXplKQorCQkJbmVlZCA9IDA7CisJfQorCisJZnJlZSA9IHhoX2ZyZWVfc3RhcnQgLSBoZWFkZXJfc2l6ZTsKKwkvKgorCSAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBuZXcgbmFtZS92YWx1ZSBwYWlyCisJICogY2FuIGV4aXN0IGluIHRoZSBzYW1lIGJsb2NrLgorCSAqLworCWlmICh4aF9mcmVlX3N0YXJ0ICUgYmxvY2tzaXplIDwgbmVlZCkKKwkJZnJlZSAtPSB4aF9mcmVlX3N0YXJ0ICUgYmxvY2tzaXplOworCisJbWxvZygwLCAieHMtPm5vdF9mb3VuZCA9ICVkLCBpbiB4YXR0ciBidWNrZXQgJWxsdTogZnJlZSA9ICVkLCAiCisJICAgICAibmVlZCA9ICVkLCBtYXhfZnJlZSA9ICVkLCB4aF9mcmVlX3N0YXJ0ID0gJXUsIHhoX25hbWVfdmFsdWVfbGVuID0iCisJICAgICAiICV1XG4iLCB4cy0+bm90X2ZvdW5kLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl4cy0+YnVja2V0LmJoc1swXS0+Yl9ibG9ja25yLAorCSAgICAgZnJlZSwgbmVlZCwgbWF4X2ZyZWUsIGxlMTZfdG9fY3B1KHhoLT54aF9mcmVlX3N0YXJ0KSwKKwkgICAgIGxlMTZfdG9fY3B1KHhoLT54aF9uYW1lX3ZhbHVlX2xlbikpOworCisJaWYgKGZyZWUgPCBuZWVkIHx8IGNvdW50ID09IG9jZnMyX3hhdHRyX21heF94ZV9pbl9idWNrZXQoaW5vZGUtPmlfc2IpKSB7CisJCWlmIChuZWVkIDw9IG1heF9mcmVlICYmCisJCSAgICBjb3VudCA8IG9jZnMyX3hhdHRyX21heF94ZV9pbl9idWNrZXQoaW5vZGUtPmlfc2IpKSB7CisJCQkvKgorCQkJICogV2UgY2FuIGNyZWF0ZSB0aGUgc3BhY2UgYnkgZGVmcmFnbWVudC4gU2luY2Ugb25seSB0aGUKKwkJCSAqIG5hbWUvdmFsdWUgd2lsbCBiZSBtb3ZlZCwgdGhlIHhlIHNob3VsZG4ndCBiZSBjaGFuZ2VkCisJCQkgKiBpbiB4cy4KKwkJCSAqLworCQkJcmV0ID0gb2NmczJfZGVmcmFnX3hhdHRyX2J1Y2tldChpbm9kZSwgJnhzLT5idWNrZXQpOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJeGhfZnJlZV9zdGFydCA9IGxlMTZfdG9fY3B1KHhoLT54aF9mcmVlX3N0YXJ0KTsKKwkJCWZyZWUgPSB4aF9mcmVlX3N0YXJ0IC0gaGVhZGVyX3NpemU7CisJCQlpZiAoeGhfZnJlZV9zdGFydCAlIGJsb2Nrc2l6ZSA8IG5lZWQpCisJCQkJZnJlZSAtPSB4aF9mcmVlX3N0YXJ0ICUgYmxvY2tzaXplOworCisJCQlpZiAoZnJlZSA+PSBuZWVkKQorCQkJCWdvdG8geGF0dHJfc2V0OworCisJCQltbG9nKDAsICJDYW4ndCBnZXQgZW5vdWdoIHNwYWNlIGZvciB4YXR0ciBpbnNlcnQgYnkgIgorCQkJICAgICAiZGVmcmFnbWVudC4gTmVlZCAldSBieXRlcywgYnV0IHdlIGhhdmUgJWQsIHNvICIKKwkJCSAgICAgImFsbG9jYXRlIG5ldyBidWNrZXQgZm9yIGl0LlxuIiwgbmVlZCwgZnJlZSk7CisJCX0KKworCQkvKgorCQkgKiBXZSBoYXZlIHRvIGFkZCBuZXcgYnVja2V0cyBvciBjbHVzdGVycyBhbmQgb25lCisJCSAqIGFsbG9jYXRpb24gc2hvdWxkIGxlYXZlIHVzIGVub3VnaCBzcGFjZSBmb3IgaW5zZXJ0LgorCQkgKi8KKwkJQlVHX09OKGFsbG9jYXRpb24pOworCisJCS8qCisJCSAqIFdlIGRvIG5vdCBhbGxvdyBmb3Igb3ZlcmxhcHBpbmcgcmFuZ2VzIGJldHdlZW4gYnVja2V0cy4gQW5kCisJCSAqIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2xsaXNpb25zIHdlIHdpbGwgYWxsb3cgZm9yIHRoZW4gaXMKKwkJICogb25lIGJ1Y2tldCdzIHdvcnRoLCBzbyBjaGVjayBpdCBoZXJlIHdoZXRoZXIgd2UgbmVlZCB0bworCQkgKiBhZGQgYSBuZXcgYnVja2V0IGZvciB0aGUgaW5zZXJ0LgorCQkgKi8KKwkJcmV0ID0gb2NmczJfY2hlY2tfeGF0dHJfYnVja2V0X2NvbGxpc2lvbihpbm9kZSwgJnhzLT5idWNrZXQpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJldCA9IG9jZnMyX2FkZF9uZXdfeGF0dHJfYnVja2V0KGlub2RlLAorCQkJCQkJIHhzLT54YXR0cl9iaCwKKwkJCQkJCSB4cy0+YnVja2V0LmJoc1swXSk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IGJsa19wZXJfYnVja2V0OyBpKyspCisJCQlicmVsc2UoeHMtPmJ1Y2tldC5iaHNbaV0pOworCisJCW1lbXNldCgmeHMtPmJ1Y2tldCwgMCwgc2l6ZW9mKHhzLT5idWNrZXQpKTsKKworCQlyZXQgPSBvY2ZzMl94YXR0cl9pbmRleF9ibG9ja19maW5kKGlub2RlLCB4cy0+eGF0dHJfYmgsCisJCQkJCQkgICB4aS0+bmFtZV9pbmRleCwKKwkJCQkJCSAgIHhpLT5uYW1lLCB4cyk7CisJCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9EQVRBKQorCQkJZ290byBvdXQ7CisJCXhzLT5ub3RfZm91bmQgPSByZXQ7CisJCWFsbG9jYXRpb24gPSAxOworCQlnb3RvIHRyeV9hZ2FpbjsKKwl9CisKK3hhdHRyX3NldDoKKwlyZXQgPSBvY2ZzMl94YXR0cl9zZXRfaW5fYnVja2V0KGlub2RlLCB4aSwgeHMpOworb3V0OgorCW1sb2dfZXhpdChyZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZGVsZXRlX3hhdHRyX2luX2J1Y2tldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQsCisJCQkJCXZvaWQgKnBhcmEpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSBidWNrZXQtPnhoOworCXUxNiBpOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsgaSsrKSB7CisJCXhlID0gJnhoLT54aF9lbnRyaWVzW2ldOworCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X3ZhbHVlX3RydW5jYXRlKGlub2RlLAorCQkJCQkJCWJ1Y2tldC0+YmhzWzBdLAorCQkJCQkJCWksIDApOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZGVsZXRlX3hhdHRyX2luZGV4X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICp4Yl9iaCkKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiID0KKwkJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKil4Yl9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwgPSAmeGItPnhiX2F0dHJzLnhiX3Jvb3QueHRfbGlzdDsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgbmFtZV9oYXNoID0gVUlOVF9NQVgsIGVfY3BvcywgbnVtX2NsdXN0ZXJzOworCXU2NCBwX2Jsa25vOworCisJaWYgKGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpID09IDApCisJCXJldHVybiAwOworCisJd2hpbGUgKG5hbWVfaGFzaCA+IDApIHsKKwkJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X3JlYyhpbm9kZSwgbmFtZV9oYXNoLCAmcF9ibGtubywKKwkJCQkJICAmZV9jcG9zLCAmbnVtX2NsdXN0ZXJzLCBlbCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0ID0gb2NmczJfaXRlcmF0ZV94YXR0cl9idWNrZXRzKGlub2RlLCBwX2Jsa25vLCBudW1fY2x1c3RlcnMsCisJCQkJCQkgIG9jZnMyX2RlbGV0ZV94YXR0cl9pbl9idWNrZXQsCisJCQkJCQkgIE5VTEwpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJldCA9IG9jZnMyX3JtX3hhdHRyX2NsdXN0ZXIoaW5vZGUsIHhiX2JoLAorCQkJCQkgICAgIHBfYmxrbm8sIGVfY3BvcywgbnVtX2NsdXN0ZXJzKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZV9jcG9zID09IDApCisJCQlicmVhazsKKworCQluYW1lX2hhc2ggPSBlX2Nwb3MgLSAxOworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAndHJ1c3RlZCcgYXR0cmlidXRlcyBzdXBwb3J0CisgKi8KKworI2RlZmluZSBYQVRUUl9UUlVTVEVEX1BSRUZJWCAidHJ1c3RlZC4iCisKK3N0YXRpYyBzaXplX3Qgb2NmczJfeGF0dHJfdHJ1c3RlZF9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsCisJCQkJICAgICAgIHNpemVfdCBsaXN0X3NpemUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICAgIHNpemVfdCBuYW1lX2xlbikKK3sKKwljb25zdCBzaXplX3QgcHJlZml4X2xlbiA9IHNpemVvZihYQVRUUl9UUlVTVEVEX1BSRUZJWCkgLSAxOworCWNvbnN0IHNpemVfdCB0b3RhbF9sZW4gPSBwcmVmaXhfbGVuICsgbmFtZV9sZW4gKyAxOworCisJaWYgKGxpc3QgJiYgdG90YWxfbGVuIDw9IGxpc3Rfc2l6ZSkgeworCQltZW1jcHkobGlzdCwgWEFUVFJfVFJVU1RFRF9QUkVGSVgsIHByZWZpeF9sZW4pOworCQltZW1jcHkobGlzdCArIHByZWZpeF9sZW4sIG5hbWUsIG5hbWVfbGVuKTsKKwkJbGlzdFtwcmVmaXhfbGVuICsgbmFtZV9sZW5dID0gJ1wwJzsKKwl9CisJcmV0dXJuIHRvdGFsX2xlbjsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl90cnVzdGVkX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIG9jZnMyX3hhdHRyX2dldChpbm9kZSwgT0NGUzJfWEFUVFJfSU5ERVhfVFJVU1RFRCwgbmFtZSwKKwkJCSAgICAgICBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3RydXN0ZWRfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gb2NmczJfeGF0dHJfc2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9UUlVTVEVELCBuYW1lLCB2YWx1ZSwKKwkJCSAgICAgICBzaXplLCBmbGFncyk7Cit9CisKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIG9jZnMyX3hhdHRyX3RydXN0ZWRfaGFuZGxlciA9IHsKKwkucHJlZml4CT0gWEFUVFJfVFJVU1RFRF9QUkVGSVgsCisJLmxpc3QJPSBvY2ZzMl94YXR0cl90cnVzdGVkX2xpc3QsCisJLmdldAk9IG9jZnMyX3hhdHRyX3RydXN0ZWRfZ2V0LAorCS5zZXQJPSBvY2ZzMl94YXR0cl90cnVzdGVkX3NldCwKK307CisKKworLyoKKyAqICd1c2VyJyBhdHRyaWJ1dGVzIHN1cHBvcnQKKyAqLworCisjZGVmaW5lIFhBVFRSX1VTRVJfUFJFRklYICJ1c2VyLiIKKworc3RhdGljIHNpemVfdCBvY2ZzMl94YXR0cl91c2VyX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwKKwkJCQkgICAgc2l6ZV90IGxpc3Rfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgc2l6ZV90IG5hbWVfbGVuKQoreworCWNvbnN0IHNpemVfdCBwcmVmaXhfbGVuID0gc2l6ZW9mKFhBVFRSX1VTRVJfUFJFRklYKSAtIDE7CisJY29uc3Qgc2l6ZV90IHRvdGFsX2xlbiA9IHByZWZpeF9sZW4gKyBuYW1lX2xlbiArIDE7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisKKwlpZiAob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX05PVVNFUlhBVFRSKQorCQlyZXR1cm4gMDsKKworCWlmIChsaXN0ICYmIHRvdGFsX2xlbiA8PSBsaXN0X3NpemUpIHsKKwkJbWVtY3B5KGxpc3QsIFhBVFRSX1VTRVJfUFJFRklYLCBwcmVmaXhfbGVuKTsKKwkJbWVtY3B5KGxpc3QgKyBwcmVmaXhfbGVuLCBuYW1lLCBuYW1lX2xlbik7CisJCWxpc3RbcHJlZml4X2xlbiArIG5hbWVfbGVuXSA9ICdcMCc7CisJfQorCXJldHVybiB0b3RhbF9sZW47Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfdXNlcl9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQl2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCisJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9OT1VTRVJYQVRUUikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCXJldHVybiBvY2ZzMl94YXR0cl9nZXQoaW5vZGUsIE9DRlMyX1hBVFRSX0lOREVYX1VTRVIsIG5hbWUsCisJCQkgICAgICAgYnVmZmVyLCBzaXplKTsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl91c2VyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCWNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCisJaWYgKHN0cmNtcChuYW1lLCAiIikgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9OT1VTRVJYQVRUUikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIG9jZnMyX3hhdHRyX3NldChpbm9kZSwgT0NGUzJfWEFUVFJfSU5ERVhfVVNFUiwgbmFtZSwgdmFsdWUsCisJCQkgICAgICAgc2l6ZSwgZmxhZ3MpOworfQorCitzdHJ1Y3QgeGF0dHJfaGFuZGxlciBvY2ZzMl94YXR0cl91c2VyX2hhbmRsZXIgPSB7CisJLnByZWZpeAk9IFhBVFRSX1VTRVJfUFJFRklYLAorCS5saXN0CT0gb2NmczJfeGF0dHJfdXNlcl9saXN0LAorCS5nZXQJPSBvY2ZzMl94YXR0cl91c2VyX2dldCwKKwkuc2V0CT0gb2NmczJfeGF0dHJfdXNlcl9zZXQsCit9OwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuaCBiL2ZzL29jZnMyL3hhdHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1YzdjNgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL29jZnMyL3hhdHRyLmgKQEAgLTAsMCArMSw2OCBAQAorLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4OyAtKi0KKyAqIHZpbTogbm9leHBhbmR0YWIgc3c9OCB0cz04IHN0cz0wOgorICoKKyAqIHhhdHRyLmgKKyAqCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMTAtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgT0NGUzJfWEFUVFJfSAorI2RlZmluZSBPQ0ZTMl9YQVRUUl9ICisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKworZW51bSBvY2ZzMl94YXR0cl90eXBlIHsKKwlPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSID0gMSwKKwlPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTLAorCU9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxULAorCU9DRlMyX1hBVFRSX0lOREVYX1RSVVNURUQsCisJT0NGUzJfWEFUVFJfSU5ERVhfU0VDVVJJVFksCisJT0NGUzJfWEFUVFJfTUFYCit9OworCitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgb2NmczJfeGF0dHJfdXNlcl9oYW5kbGVyOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIG9jZnMyX3hhdHRyX3RydXN0ZWRfaGFuZGxlcjsKKworZXh0ZXJuIHNzaXplX3Qgb2NmczJfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIGludCBvY2ZzMl94YXR0cl9nZXQoc3RydWN0IGlub2RlICosIGludCwgY29uc3QgY2hhciAqLCB2b2lkICosIHNpemVfdCk7CitleHRlcm4gaW50IG9jZnMyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwKKwkJCSAgIHNpemVfdCwgaW50KTsKK2V4dGVybiBpbnQgb2NmczJfeGF0dHJfcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyICpvY2ZzMl94YXR0cl9oYW5kbGVyc1tdOworCitzdGF0aWMgaW5saW5lIHUxNiBvY2ZzMl94YXR0cl9idWNrZXRzX3Blcl9jbHVzdGVyKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXJldHVybiAoMSA8PCBvc2ItPnNfY2x1c3RlcnNpemVfYml0cykgLyBPQ0ZTMl9YQVRUUl9CVUNLRVRfU0laRTsKK30KKworc3RhdGljIGlubGluZSB1MTYgb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUgLyAoMSA8PCBzYi0+c19ibG9ja3NpemVfYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG9jZnMyX3hhdHRyX21heF94ZV9pbl9idWNrZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwl1MTYgbGVuID0gc2ItPnNfYmxvY2tzaXplIC0KKwkJIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIsIHhoX2VudHJpZXMpOworCisJcmV0dXJuIGxlbiAvIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpOworfQorI2VuZGlmIC8qIE9DRlMyX1hBVFRSX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29tZnMvaW5vZGUuYyBiL2ZzL29tZnMvaW5vZGUuYwppbmRleCBkMjkwNDdiLi5jYmYwNDdhIDEwMDY0NAotLS0gYS9mcy9vbWZzL2lub2RlLmMKKysrIGIvZnMvb21mcy9pbm9kZS5jCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAlPcHRfdWlkLCBPcHRfZ2lkLCBPcHRfdW1hc2ssIE9wdF9kbWFzaywgT3B0X2ZtYXNrCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF91aWQsICJ1aWQ9JXUifSwKIAl7T3B0X2dpZCwgImdpZD0ldSJ9LAogCXtPcHRfdW1hc2ssICJ1bWFzaz0lbyJ9LApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9hY29ybi5jIGIvZnMvcGFydGl0aW9ucy9hY29ybi5jCmluZGV4IDNkM2UxNjYuLmE5N2I0NzcgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvYWNvcm4uYworKysgYi9mcy9wYXJ0aXRpb25zL2Fjb3JuLmMKQEAgLTI3NSwxNiArMjc1LDYgQEAKIAlpZCA9IGRhdGFbMHgxZmNdICYgMTU7CiAJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9NRk0KLQlpZiAoTUFKT1IoYmRldi0+YmRfZGV2KSA9PSBNRk1fQUNPUk5fTUFKT1IpIHsKLQkJZXh0ZXJuIHZvaWQgeGRfc2V0X2dlb21ldHJ5KHN0cnVjdCBibG9ja19kZXZpY2UgKiwKLQkJCXVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGludCk7Ci0JCXhkX3NldF9nZW9tZXRyeShiZGV2LCBkci0+c2Vjc3BlcnRyYWNrLCBoZWFkcywgMSk7Ci0JCWludmFsaWRhdGVfYmhfbHJ1cygpOwotCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhiZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nLCAwKTsKLQl9Ci0jZW5kaWYKLQogCS8qCiAJICogV29yayBvdXQgc3RhcnQgb2Ygbm9uLWFkZnMgcGFydGl0aW9uLgogCSAqLwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IDc0MDgyMjcuLmNmYjBjODAgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTE5NSw2ICsxOTUsMTQgQEAKIAlyZXR1cm4gRVJSX1BUUihyZXMpOwogfQogCitzdGF0aWMgc3NpemVfdCBwYXJ0X3BhcnRpdGlvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBoZF9zdHJ1Y3QgKnAgPSBkZXZfdG9fcGFydChkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHAtPnBhcnRubyk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHBhcnRfc3RhcnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTI2MCw2ICsyNjgsNyBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBERVZJQ0VfQVRUUihwYXJ0aXRpb24sIFNfSVJVR08sIHBhcnRfcGFydGl0aW9uX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHN0YXJ0LCBTX0lSVUdPLCBwYXJ0X3N0YXJ0X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHNpemUsIFNfSVJVR08sIHBhcnRfc2l6ZV9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihzdGF0LCBTX0lSVUdPLCBwYXJ0X3N0YXRfc2hvdywgTlVMTCk7CkBAIC0yNjksNiArMjc4LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGFydF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9wYXJ0aXRpb24uYXR0ciwKIAkmZGV2X2F0dHJfc3RhcnQuYXR0ciwKIAkmZGV2X2F0dHJfc2l6ZS5hdHRyLAogCSZkZXZfYXR0cl9zdGF0LmF0dHIsCkBAIC01MzgsMTAgKzU0OCwyMyBAQAogCQlzZWN0b3JfdCBmcm9tID0gc3RhdGUtPnBhcnRzW3BdLmZyb207CiAJCWlmICghc2l6ZSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoZnJvbSArIHNpemUgPiBnZXRfY2FwYWNpdHkoZGlzaykpIHsKKwkJaWYgKGZyb20gPj0gZ2V0X2NhcGFjaXR5KGRpc2spKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBwJWQgZXhjZWVkcyBkZXZpY2UgY2FwYWNpdHlcbiIsCi0JCQkJZGlzay0+ZGlza19uYW1lLCBwKTsKKwkJCSAgICAgICAiJXM6IHAlZCBpZ25vcmVkLCBzdGFydCAlbGx1IGlzIGJlaGluZCB0aGUgZW5kIG9mIHRoZSBkaXNrXG4iLAorCQkJICAgICAgIGRpc2stPmRpc2tfbmFtZSwgcCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgZnJvbSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZnJvbSArIHNpemUgPiBnZXRfY2FwYWNpdHkoZGlzaykpIHsKKwkJCS8qCisJCQkgKiB3ZSBjYW4gbm90IGlnbm9yZSBwYXJ0aXRpb25zIG9mIGJyb2tlbiB0YWJsZXMKKwkJCSAqIGNyZWF0ZWQgYnkgZm9yIGV4YW1wbGUgY2FtZXJhIGZpcm13YXJlLCBidXQgd2UKKwkJCSAqIGxpbWl0IHRoZW0gdG8gdGhlIGVuZCBvZiB0aGUgZGlzayB0byBhdm9pZAorCQkJICogY3JlYXRpbmcgaW52YWxpZCBibG9jayBkZXZpY2VzCisJCQkgKi8KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IHAlZCBzaXplICVsbHUgbGltaXRlZCB0byBlbmQgb2YgZGlza1xuIiwKKwkJCSAgICAgICBkaXNrLT5kaXNrX25hbWUsIHAsICh1bnNpZ25lZCBsb25nIGxvbmcpIHNpemUpOworCQkJc2l6ZSA9IGdldF9jYXBhY2l0eShkaXNrKSAtIGZyb207CiAJCX0KIAkJcmVzID0gYWRkX3BhcnRpdGlvbihkaXNrLCBwLCBmcm9tLCBzaXplLCBzdGF0ZS0+cGFydHNbcF0uZmxhZ3MpOwogCQlpZiAocmVzKSB7CmRpZmYgLS1naXQgYS9mcy9wcm9jL0tjb25maWcgYi9mcy9wcm9jL0tjb25maWcKaW5kZXggNzNjZDdhNC4uNTBmOGYwNiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9LY29uZmlnCisrKyBiL2ZzL3Byb2MvS2NvbmZpZwpAQCAtNTcsMyArNTcsMTMgQEAKIAkgIEFzIGl0IGlzIGdlbmVyYWxseSBhIGdvb2QgdGhpbmcsIHlvdSBzaG91bGQgc2F5IFkgaGVyZSB1bmxlc3MKIAkgIGJ1aWxkaW5nIGEga2VybmVsIGZvciBpbnN0YWxsL3Jlc2N1ZSBkaXNrcyBvciB5b3VyIHN5c3RlbSBpcyB2ZXJ5CiAJICBsaW1pdGVkIGluIG1lbW9yeS4KKworY29uZmlnIFBST0NfUEFHRV9NT05JVE9SCisgCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gUFJPQ19GUyAmJiBNTVUKKwlib29sICJFbmFibGUgL3Byb2MgcGFnZSBtb25pdG9yaW5nIiBpZiBFTUJFRERFRAorIAloZWxwCisJICBWYXJpb3VzIC9wcm9jIGZpbGVzIGV4aXN0IHRvIG1vbml0b3IgcHJvY2VzcyBtZW1vcnkgdXRpbGl6YXRpb246CisJICAvcHJvYy9waWQvc21hcHMsIC9wcm9jL3BpZC9jbGVhcl9yZWZzLCAvcHJvYy9waWQvcGFnZW1hcCwKKwkgIC9wcm9jL2twYWdlY291bnQsIGFuZCAvcHJvYy9rcGFnZWZsYWdzLiBEaXNhYmxpbmcgdGhlc2UKKyAgICAgICAgICBpbnRlcmZhY2VzIHdpbGwgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYnkgYXBwcm94aW1hdGVseSA0a2IuCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggNzFjOWJlNS4uYmI5ZjRiMCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtODYsMTEgKzg2LDYgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotLyogR2NjIG9wdGltaXplcyBhd2F5ICJzdHJsZW4oeCkiIGZvciBjb25zdGFudCB4ICovCi0jZGVmaW5lIEFEREJVRihidWZmZXIsIHN0cmluZykgXAotZG8geyBtZW1jcHkoYnVmZmVyLCBzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsgXAotICAgICBidWZmZXIgKz0gc3RybGVuKHN0cmluZyk7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX25hbWUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJaW50IGk7CkBAIC0yNjEsNyArMjU2LDYgQEAKIAlzaWdlbXB0eXNldCgmaWdub3JlZCk7CiAJc2lnZW1wdHlzZXQoJmNhdWdodCk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJaWYgKGxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncykpIHsKIAkJcGVuZGluZyA9IHAtPnBlbmRpbmcuc2lnbmFsOwogCQlzaHBlbmRpbmcgPSBwLT5zaWduYWwtPnNoYXJlZF9wZW5kaW5nLnNpZ25hbDsKQEAgLTI3Miw3ICsyNjYsNiBAQAogCQlxbGltID0gcC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TSUdQRU5ESU5HXS5ybGltX2N1cjsKIAkJdW5sb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXNlcV9wcmludGYobSwgIlRocmVhZHM6XHQlZFxuIiwgbnVtX3RocmVhZHMpOwogCXNlcV9wcmludGYobSwgIlNpZ1E6XHQlbHUvJWx1XG4iLCBxc2l6ZSwgcWxpbSk7CkBAIC0zOTUsMjAgKzM4OCwyMCBAQAogCiAJCS8qIGFkZCB1cCBsaXZlIHRocmVhZCBzdGF0cyBhdCB0aGUgZ3JvdXAgbGV2ZWwgKi8KIAkJaWYgKHdob2xlKSB7CisJCQlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CiAJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0YXNrOwogCQkJZG8gewogCQkJCW1pbl9mbHQgKz0gdC0+bWluX2ZsdDsKIAkJCQltYWpfZmx0ICs9IHQtPm1hal9mbHQ7Ci0JCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgdGFza191dGltZSh0KSk7Ci0JCQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgdGFza19zdGltZSh0KSk7CiAJCQkJZ3RpbWUgPSBjcHV0aW1lX2FkZChndGltZSwgdGFza19ndGltZSh0KSk7CiAJCQkJdCA9IG5leHRfdGhyZWFkKHQpOwogCQkJfSB3aGlsZSAodCAhPSB0YXNrKTsKIAogCQkJbWluX2ZsdCArPSBzaWctPm1pbl9mbHQ7CiAJCQltYWpfZmx0ICs9IHNpZy0+bWFqX2ZsdDsKLQkJCXV0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIHNpZy0+dXRpbWUpOwotCQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgc2lnLT5zdGltZSk7CisJCQl0aHJlYWRfZ3JvdXBfY3B1dGltZSh0YXNrLCAmY3B1dGltZSk7CisJCQl1dGltZSA9IGNwdXRpbWUudXRpbWU7CisJCQlzdGltZSA9IGNwdXRpbWUuc3RpbWU7CiAJCQlndGltZSA9IGNwdXRpbWVfYWRkKGd0aW1lLCBzaWctPmd0aW1lKTsKIAkJfQogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IGEyODg0MGIuLmI1OTE4YWUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0xNDgsOSArMTQ4LDYgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLWludCBtYXBzX3Byb3RlY3Q7Ci1FWFBPUlRfU1lNQk9MKG1hcHNfcHJvdGVjdCk7Ci0KIHN0YXRpYyBzdHJ1Y3QgZnNfc3RydWN0ICpnZXRfZnNfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlzdHJ1Y3QgZnNfc3RydWN0ICpmczsKQEAgLTE2NCw3ICsxNjEsNiBAQAogCiBzdGF0aWMgaW50IGdldF9ucl90aHJlYWRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCS8qIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHJjdV9yZWFkX2xvY2sgaGVsZCAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNvdW50ID0gMDsKIApAQCAtNDcxLDE0ICs0NjcsMTAgQEAKIAogCXN0cnVjdCBybGltaXQgcmxpbVtSTElNX05MSU1JVFNdOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWlmICghbG9ja190YXNrX3NpZ2hhbmQodGFzaywmZmxhZ3MpKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOworCWlmICghbG9ja190YXNrX3NpZ2hhbmQodGFzaywgJmZsYWdzKSkKIAkJcmV0dXJuIDA7Ci0JfQogCW1lbWNweShybGltLCB0YXNrLT5zaWduYWwtPnJsaW0sIHNpemVvZihzdHJ1Y3QgcmxpbWl0KSAqIFJMSU1fTkxJTUlUUyk7CiAJdW5sb2NrX3Rhc2tfc2lnaGFuZCh0YXNrLCAmZmxhZ3MpOwotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyoKIAkgKiBwcmludCB0aGUgZmlsZSBoZWFkZXIKQEAgLTI0NDMsNiArMjQzNSwxMyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkcgKi8KIAorc3RhdGljIGludCBwcm9jX3BpZF9wZXJzb25hbGl0eShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucywKKwkJCQlzdHJ1Y3QgcGlkICpwaWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzZXFfcHJpbnRmKG0sICIlMDh4XG4iLCB0YXNrLT5wZXJzb25hbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBUaHJlYWQgZ3JvdXBzCiAgKi8KQEAgLTI0NTksNiArMjQ1OCw3IEBACiAJUkVHKCJlbnZpcm9uIiwgICAgU19JUlVTUiwgZW52aXJvbiksCiAJSU5GKCJhdXh2IiwgICAgICAgU19JUlVTUiwgcGlkX2F1eHYpLAogCU9ORSgic3RhdHVzIiwgICAgIFNfSVJVR08sIHBpZF9zdGF0dXMpLAorCU9ORSgicGVyc29uYWxpdHkiLCBTX0lSVVNSLCBwaWRfcGVyc29uYWxpdHkpLAogCUlORigibGltaXRzIiwJICBTX0lSVVNSLCBwaWRfbGltaXRzKSwKICNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKIAlSRUcoInNjaGVkIiwgICAgICBTX0lSVUdPfFNfSVdVU1IsIHBpZF9zY2hlZCksCkBAIC0yNzk0LDYgKzI3OTQsNyBAQAogCVJFRygiZW52aXJvbiIsICAgU19JUlVTUiwgZW52aXJvbiksCiAJSU5GKCJhdXh2IiwgICAgICBTX0lSVVNSLCBwaWRfYXV4diksCiAJT05FKCJzdGF0dXMiLCAgICBTX0lSVUdPLCBwaWRfc3RhdHVzKSwKKwlPTkUoInBlcnNvbmFsaXR5IiwgU19JUlVTUiwgcGlkX3BlcnNvbmFsaXR5KSwKIAlJTkYoImxpbWl0cyIsCSBTX0lSVVNSLCBwaWRfbGltaXRzKSwKICNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKIAlSRUcoInNjaGVkIiwgICAgIFNfSVJVR098U19JV1VTUiwgcGlkX3NjaGVkKSwKQEAgLTMwODgsOSArMzA4OSw3IEBACiAJZ2VuZXJpY19maWxsYXR0cihpbm9kZSwgc3RhdCk7CiAKIAlpZiAocCkgewotCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXN0YXQtPm5saW5rICs9IGdldF9ucl90aHJlYWRzKHApOwotCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcHV0X3Rhc2tfc3RydWN0KHApOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbm9kZS5jIGIvZnMvcHJvYy9pbm9kZS5jCmluZGV4IDhiYjAzZjAuLmM2YjRmYTcgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW5vZGUuYworKysgYi9mcy9wcm9jL2lub2RlLmMKQEAgLTM0Miw3ICszNDIsNyBAQAogCWlmICghcGRlLT5wcm9jX2ZvcHMpIHsKIAkJc3Bpbl91bmxvY2soJnBkZS0+cGRlX3VubG9hZF9sb2NrKTsKIAkJa2ZyZWUocGRlbyk7Ci0JCXJldHVybiBydjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXBkZS0+cGRlX3VzZXJzKys7CiAJb3BlbiA9IHBkZS0+cHJvY19mb3BzLT5vcGVuOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbnRlcm5hbC5oIGIvZnMvcHJvYy9pbnRlcm5hbC5oCmluZGV4IDQ0MjIwMjMuLjNiZmI3YjggMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW50ZXJuYWwuaAorKysgYi9mcy9wcm9jL2ludGVybmFsLmgKQEAgLTQ1LDggKzQ1LDYgQEAKIGV4dGVybiBpbnQgbm9tbXVfdm1hX3Nob3coc3RydWN0IHNlcV9maWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKICNlbmRpZgogCi1leHRlcm4gaW50IG1hcHNfcHJvdGVjdDsKLQogZXh0ZXJuIGludCBwcm9jX3RpZF9zdGF0KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zLAogCQkJCXN0cnVjdCBwaWQgKnBpZCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIGV4dGVybiBpbnQgcHJvY190Z2lkX3N0YXQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMsCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2NfbWlzYy5jIGIvZnMvcHJvYy9wcm9jX21pc2MuYwppbmRleCAyOWUyMGM2Li43ZWE1MmM3IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Byb2NfbWlzYy5jCisrKyBiL2ZzL3Byb2MvcHJvY19taXNjLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KQEAgLTY4LDcgKzY4LDYgQEAKIGV4dGVybiBpbnQgZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqKTsKIGV4dGVybiBpbnQgZ2V0X3N0cmFtX2xpc3QoY2hhciAqKTsKIGV4dGVybiBpbnQgZ2V0X2V4ZWNfZG9tYWluX2xpc3QoY2hhciAqKTsKLWV4dGVybiBpbnQgZ2V0X2RtYV9saXN0KGNoYXIgKik7CiAKIHN0YXRpYyBpbnQgcHJvY19jYWxjX21ldHJpY3MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCiAJCQkJIGludCBjb3VudCwgaW50ICplb2YsIGludCBsZW4pCkBAIC0xMzgsNiArMTM3LDggQEAKIAl1bnNpZ25lZCBsb25nIGFsbG93ZWQ7CiAJc3RydWN0IHZtYWxsb2NfaW5mbyB2bWk7CiAJbG9uZyBjYWNoZWQ7CisJdW5zaWduZWQgbG9uZyBwYWdlc1tOUl9MUlVfTElTVFNdOworCWludCBscnU7CiAKIC8qCiAgKiBkaXNwbGF5IGluIGtpbG9ieXRlcy4KQEAgLTE1Niw1MSArMTU3LDcwIEBACiAKIAlnZXRfdm1hbGxvY19pbmZvKCZ2bWkpOwogCisJZm9yIChscnUgPSBMUlVfQkFTRTsgbHJ1IDwgTlJfTFJVX0xJU1RTOyBscnUrKykKKwkJcGFnZXNbbHJ1XSA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgbHJ1KTsKKwogCS8qCiAJICogVGFnZ2VkIGZvcm1hdCwgZm9yIGVhc3kgZ3JlcHBpbmcgYW5kIGV4cGFuc2lvbi4KIAkgKi8KIAlsZW4gPSBzcHJpbnRmKHBhZ2UsCi0JCSJNZW1Ub3RhbDogICAgICU4bHUga0JcbiIKLQkJIk1lbUZyZWU6ICAgICAgJThsdSBrQlxuIgotCQkiQnVmZmVyczogICAgICAlOGx1IGtCXG4iCi0JCSJDYWNoZWQ6ICAgICAgICU4bHUga0JcbiIKLQkJIlN3YXBDYWNoZWQ6ICAgJThsdSBrQlxuIgotCQkiQWN0aXZlOiAgICAgICAlOGx1IGtCXG4iCi0JCSJJbmFjdGl2ZTogICAgICU4bHUga0JcbiIKKwkJIk1lbVRvdGFsOiAgICAgICAlOGx1IGtCXG4iCisJCSJNZW1GcmVlOiAgICAgICAgJThsdSBrQlxuIgorCQkiQnVmZmVyczogICAgICAgICU4bHUga0JcbiIKKwkJIkNhY2hlZDogICAgICAgICAlOGx1IGtCXG4iCisJCSJTd2FwQ2FjaGVkOiAgICAgJThsdSBrQlxuIgorCQkiQWN0aXZlOiAgICAgICAgICU4bHUga0JcbiIKKwkJIkluYWN0aXZlOiAgICAgICAlOGx1IGtCXG4iCisJCSJBY3RpdmUoYW5vbik6ICAgJThsdSBrQlxuIgorCQkiSW5hY3RpdmUoYW5vbik6ICU4bHUga0JcbiIKKwkJIkFjdGl2ZShmaWxlKTogICAlOGx1IGtCXG4iCisJCSJJbmFjdGl2ZShmaWxlKTogJThsdSBrQlxuIgorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJIlVuZXZpY3RhYmxlOiAgICAlOGx1IGtCXG4iCisJCSJNbG9ja2VkOiAgICAgICAgJThsdSBrQlxuIgorI2VuZGlmCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KLQkJIkhpZ2hUb3RhbDogICAgJThsdSBrQlxuIgotCQkiSGlnaEZyZWU6ICAgICAlOGx1IGtCXG4iCi0JCSJMb3dUb3RhbDogICAgICU4bHUga0JcbiIKLQkJIkxvd0ZyZWU6ICAgICAgJThsdSBrQlxuIgorCQkiSGlnaFRvdGFsOiAgICAgICU4bHUga0JcbiIKKwkJIkhpZ2hGcmVlOiAgICAgICAlOGx1IGtCXG4iCisJCSJMb3dUb3RhbDogICAgICAgJThsdSBrQlxuIgorCQkiTG93RnJlZTogICAgICAgICU4bHUga0JcbiIKICNlbmRpZgotCQkiU3dhcFRvdGFsOiAgICAlOGx1IGtCXG4iCi0JCSJTd2FwRnJlZTogICAgICU4bHUga0JcbiIKLQkJIkRpcnR5OiAgICAgICAgJThsdSBrQlxuIgotCQkiV3JpdGViYWNrOiAgICAlOGx1IGtCXG4iCi0JCSJBbm9uUGFnZXM6ICAgICU4bHUga0JcbiIKLQkJIk1hcHBlZDogICAgICAgJThsdSBrQlxuIgotCQkiU2xhYjogICAgICAgICAlOGx1IGtCXG4iCi0JCSJTUmVjbGFpbWFibGU6ICU4bHUga0JcbiIKLQkJIlNVbnJlY2xhaW06ICAgJThsdSBrQlxuIgotCQkiUGFnZVRhYmxlczogICAlOGx1IGtCXG4iCisJCSJTd2FwVG90YWw6ICAgICAgJThsdSBrQlxuIgorCQkiU3dhcEZyZWU6ICAgICAgICU4bHUga0JcbiIKKwkJIkRpcnR5OiAgICAgICAgICAlOGx1IGtCXG4iCisJCSJXcml0ZWJhY2s6ICAgICAgJThsdSBrQlxuIgorCQkiQW5vblBhZ2VzOiAgICAgICU4bHUga0JcbiIKKwkJIk1hcHBlZDogICAgICAgICAlOGx1IGtCXG4iCisJCSJTbGFiOiAgICAgICAgICAgJThsdSBrQlxuIgorCQkiU1JlY2xhaW1hYmxlOiAgICU4bHUga0JcbiIKKwkJIlNVbnJlY2xhaW06ICAgICAlOGx1IGtCXG4iCisJCSJQYWdlVGFibGVzOiAgICAgJThsdSBrQlxuIgogI2lmZGVmIENPTkZJR19RVUlDS0xJU1QKLQkJIlF1aWNrbGlzdHM6ICAgJThsdSBrQlxuIgorCQkiUXVpY2tsaXN0czogICAgICU4bHUga0JcbiIKICNlbmRpZgotCQkiTkZTX1Vuc3RhYmxlOiAlOGx1IGtCXG4iCi0JCSJCb3VuY2U6ICAgICAgICU4bHUga0JcbiIKLQkJIldyaXRlYmFja1RtcDogJThsdSBrQlxuIgotCQkiQ29tbWl0TGltaXQ6ICAlOGx1IGtCXG4iCi0JCSJDb21taXR0ZWRfQVM6ICU4bHUga0JcbiIKLQkJIlZtYWxsb2NUb3RhbDogJThsdSBrQlxuIgotCQkiVm1hbGxvY1VzZWQ6ICAlOGx1IGtCXG4iCi0JCSJWbWFsbG9jQ2h1bms6ICU4bHUga0JcbiIsCisJCSJORlNfVW5zdGFibGU6ICAgJThsdSBrQlxuIgorCQkiQm91bmNlOiAgICAgICAgICU4bHUga0JcbiIKKwkJIldyaXRlYmFja1RtcDogICAlOGx1IGtCXG4iCisJCSJDb21taXRMaW1pdDogICAgJThsdSBrQlxuIgorCQkiQ29tbWl0dGVkX0FTOiAgICU4bHUga0JcbiIKKwkJIlZtYWxsb2NUb3RhbDogICAlOGx1IGtCXG4iCisJCSJWbWFsbG9jVXNlZDogICAgJThsdSBrQlxuIgorCQkiVm1hbGxvY0NodW5rOiAgICU4bHUga0JcbiIsCiAJCUsoaS50b3RhbHJhbSksCiAJCUsoaS5mcmVlcmFtKSwKIAkJSyhpLmJ1ZmZlcnJhbSksCiAJCUsoY2FjaGVkKSwKIAkJSyh0b3RhbF9zd2FwY2FjaGVfcGFnZXMpLAotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRSkpLAotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFKSksCisJCUsocGFnZXNbTFJVX0FDVElWRV9BTk9OXSAgICsgcGFnZXNbTFJVX0FDVElWRV9GSUxFXSksCisJCUsocGFnZXNbTFJVX0lOQUNUSVZFX0FOT05dICsgcGFnZXNbTFJVX0lOQUNUSVZFX0ZJTEVdKSwKKwkJSyhwYWdlc1tMUlVfQUNUSVZFX0FOT05dKSwKKwkJSyhwYWdlc1tMUlVfSU5BQ1RJVkVfQU5PTl0pLAorCQlLKHBhZ2VzW0xSVV9BQ1RJVkVfRklMRV0pLAorCQlLKHBhZ2VzW0xSVV9JTkFDVElWRV9GSUxFXSksCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCQlLKHBhZ2VzW0xSVV9VTkVWSUNUQUJMRV0pLAorCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX01MT0NLKSksCisjZW5kaWYKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCQlLKGkudG90YWxoaWdoKSwKIAkJSyhpLmZyZWVoaWdoKSwKQEAgLTUwMiwxNyArNTIyLDEzIEBACiAKIHN0YXRpYyBpbnQgc2hvd19zdGF0KHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKLQlpbnQgaTsKKwlpbnQgaSwgajsKIAl1bnNpZ25lZCBsb25nIGppZjsKIAljcHV0aW1lNjRfdCB1c2VyLCBuaWNlLCBzeXN0ZW0sIGlkbGUsIGlvd2FpdCwgaXJxLCBzb2Z0aXJxLCBzdGVhbDsKIAljcHV0aW1lNjRfdCBndWVzdDsKIAl1NjQgc3VtID0gMDsKIAlzdHJ1Y3QgdGltZXNwZWMgYm9vdHRpbWU7Ci0JdW5zaWduZWQgaW50ICpwZXJfaXJxX3N1bTsKLQotCXBlcl9pcnFfc3VtID0ga3phbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSpOUl9JUlFTLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBlcl9pcnFfc3VtKQotCQlyZXR1cm4gLUVOT01FTTsKKwl1bnNpZ25lZCBpbnQgcGVyX2lycV9zdW07CiAKIAl1c2VyID0gbmljZSA9IHN5c3RlbSA9IGlkbGUgPSBpb3dhaXQgPQogCQlpcnEgPSBzb2Z0aXJxID0gc3RlYWwgPSBjcHV0aW1lNjRfemVybzsKQEAgLTUyMSw4ICs1MzcsNiBAQAogCWppZiA9IGJvb3R0aW1lLnR2X3NlYzsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCWludCBqOwotCiAJCXVzZXIgPSBjcHV0aW1lNjRfYWRkKHVzZXIsIGtzdGF0X2NwdShpKS5jcHVzdGF0LnVzZXIpOwogCQluaWNlID0gY3B1dGltZTY0X2FkZChuaWNlLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5uaWNlKTsKIAkJc3lzdGVtID0gY3B1dGltZTY0X2FkZChzeXN0ZW0sIGtzdGF0X2NwdShpKS5jcHVzdGF0LnN5c3RlbSk7CkBAIC01MzIsMTEgKzU0NiwxMCBAQAogCQlzb2Z0aXJxID0gY3B1dGltZTY0X2FkZChzb2Z0aXJxLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zb2Z0aXJxKTsKIAkJc3RlYWwgPSBjcHV0aW1lNjRfYWRkKHN0ZWFsLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zdGVhbCk7CiAJCWd1ZXN0ID0gY3B1dGltZTY0X2FkZChndWVzdCwga3N0YXRfY3B1KGkpLmNwdXN0YXQuZ3Vlc3QpOwotCQlmb3IgKGogPSAwOyBqIDwgTlJfSVJRUzsgaisrKSB7Ci0JCQl1bnNpZ25lZCBpbnQgdGVtcCA9IGtzdGF0X2NwdShpKS5pcnFzW2pdOwotCQkJc3VtICs9IHRlbXA7Ci0JCQlwZXJfaXJxX3N1bVtqXSArPSB0ZW1wOwotCQl9CisKKwkJZm9yX2VhY2hfaXJxX25yKGopCisJCQlzdW0gKz0ga3N0YXRfaXJxc19jcHUoaiwgaSk7CisKIAkJc3VtICs9IGFyY2hfaXJxX3N0YXRfY3B1KGkpOwogCX0KIAlzdW0gKz0gYXJjaF9pcnFfc3RhdCgpOwpAQCAtNTc4LDggKzU5MSwxNSBAQAogCX0KIAlzZXFfcHJpbnRmKHAsICJpbnRyICVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXN1bSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQotCQlzZXFfcHJpbnRmKHAsICIgJXUiLCBwZXJfaXJxX3N1bVtpXSk7CisJLyogc3VtIGFnYWluID8gaXQgY291bGQgYmUgdXBkYXRlZD8gKi8KKwlmb3JfZWFjaF9pcnFfbnIoaikgeworCQlwZXJfaXJxX3N1bSA9IDA7CisKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCQlwZXJfaXJxX3N1bSArPSBrc3RhdF9pcnFzX2NwdShqLCBpKTsKKworCQlzZXFfcHJpbnRmKHAsICIgJXUiLCBwZXJfaXJxX3N1bSk7CisJfQogCiAJc2VxX3ByaW50ZihwLAogCQkiXG5jdHh0ICVsbHVcbiIKQEAgLTU5Myw3ICs2MTMsNiBAQAogCQlucl9ydW5uaW5nKCksCiAJCW5yX2lvd2FpdCgpKTsKIAotCWtmcmVlKHBlcl9pcnFfc3VtKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjMyLDE1ICs2NTEsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgKmludF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpmLCBsb2ZmX3QgKnBvcykKIHsKLQlyZXR1cm4gKCpwb3MgPD0gTlJfSVJRUykgPyBwb3MgOiBOVUxMOworCXJldHVybiAoKnBvcyA8PSBucl9pcnFzKSA/IHBvcyA6IE5VTEw7CiB9CiAKKwogc3RhdGljIHZvaWQgKmludF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewogCSgqcG9zKSsrOwotCWlmICgqcG9zID4gTlJfSVJRUykKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIHBvczsKKwlyZXR1cm4gKCpwb3MgPD0gbnJfaXJxcykgPyBwb3MgOiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBpbnRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQpAQCAtNjQ4LDcgKzY2Niw2IEBACiAJLyogTm90aGluZyB0byBkbyAqLwogfQogCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW50X3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gaW50X3NlcV9zdGFydCwKIAkubmV4dCAgPSBpbnRfc2VxX25leHQsCkBAIC02ODQsNiArNzAxLDcgQEAKIAlyZXR1cm4gcHJvY19jYWxjX21ldHJpY3MocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKIH0KIAorI2lmZGVmIENPTkZJR19GSUxFX0xPQ0tJTkcKIHN0YXRpYyBpbnQgbG9ja3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlyZXR1cm4gc2VxX29wZW4oZmlscCwgJmxvY2tzX3NlcV9vcGVyYXRpb25zKTsKQEAgLTY5NSw2ICs3MTMsNyBAQAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAogCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCiB9OworI2VuZGlmIC8qIENPTkZJR19GSUxFX0xPQ0tJTkcgKi8KIAogc3RhdGljIGludCBleGVjZG9tYWluc19yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCiAJCQkJIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCkBAIC03MDMsMjggKzcyMiw2IEBACiAJcmV0dXJuIHByb2NfY2FsY19tZXRyaWNzKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7CiB9CiAKLSNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKLS8qCi0gKiB3cml0aW5nICdDJyB0byAvcHJvYy9zeXNycS10cmlnZ2VyIGlzIGxpa2Ugc3lzcnEtQwotICovCi1zdGF0aWMgc3NpemVfdCB3cml0ZV9zeXNycV90cmlnZ2VyKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCWlmIChjb3VudCkgewotCQljaGFyIGM7Ci0KLQkJaWYgKGdldF91c2VyKGMsIGJ1ZikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJX19oYW5kbGVfc3lzcnEoYywgTlVMTCwgMCk7Ci0JfQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zeXNycV90cmlnZ2VyX29wZXJhdGlvbnMgPSB7Ci0JLndyaXRlCQk9IHdyaXRlX3N5c3JxX3RyaWdnZXIsCi19OwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IKICNkZWZpbmUgS1BNU0laRSBzaXplb2YodTY0KQogI2RlZmluZSBLUE1NQVNLIChLUE1TSVpFIC0gMSkKQEAgLTg4OCw3ICs4ODUsOSBAQAogI2lmZGVmIENPTkZJR19QUklOVEsKIAlwcm9jX2NyZWF0ZSgia21zZyIsIFNfSVJVU1IsIE5VTEwsICZwcm9jX2ttc2dfb3BlcmF0aW9ucyk7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfRklMRV9MT0NLSU5HCiAJcHJvY19jcmVhdGUoImxvY2tzIiwgMCwgTlVMTCwgJnByb2NfbG9ja3Nfb3BlcmF0aW9ucyk7CisjZW5kaWYKIAlwcm9jX2NyZWF0ZSgiZGV2aWNlcyIsIDAsIE5VTEwsICZwcm9jX2RldmluZm9fb3BlcmF0aW9ucyk7CiAJcHJvY19jcmVhdGUoImNwdWluZm8iLCAwLCBOVUxMLCAmcHJvY19jcHVpbmZvX29wZXJhdGlvbnMpOwogI2lmZGVmIENPTkZJR19CTE9DSwpAQCAtOTMxLDcgKzkzMCw0IEBACiAjaWZkZWYgQ09ORklHX1BST0NfVk1DT1JFCiAJcHJvY192bWNvcmUgPSBwcm9jX2NyZWF0ZSgidm1jb3JlIiwgU19JUlVTUiwgTlVMTCwgJnByb2Nfdm1jb3JlX29wZXJhdGlvbnMpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi0JcHJvY19jcmVhdGUoInN5c3JxLXRyaWdnZXIiLCBTX0lXVVNSLCBOVUxMLCAmcHJvY19zeXNycV90cmlnZ2VyX29wZXJhdGlvbnMpOwotI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMgYi9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMKaW5kZXggZjlhOGI4OS4uOTQ1YTgxMCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX3N5c2N0bC5jCisrKyBiL2ZzL3Byb2MvcHJvY19zeXNjdGwuYwpAQCAtNjYsNyArNjYsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqZ3JhYl9oZWFkZXIoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqZ3JhYl9oZWFkZXIoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlpZiAoUFJPQ19JKGlub2RlKS0+c3lzY3RsKQogCQlyZXR1cm4gc3lzY3RsX2hlYWRfZ3JhYihQUk9DX0koaW5vZGUpLT5zeXNjdGwpOwpAQCAtMzk1LDEwICszOTUsMTAgQEAKIAkuZF9jb21wYXJlCT0gcHJvY19zeXNfY29tcGFyZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfc3lzX3Jvb3Q7Ci0KIGludCBwcm9jX3N5c19pbml0KHZvaWQpCiB7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3N5c19yb290OworCiAJcHJvY19zeXNfcm9vdCA9IHByb2NfbWtkaXIoInN5cyIsIE5VTEwpOwogCXByb2Nfc3lzX3Jvb3QtPnByb2NfaW9wcyA9ICZwcm9jX3N5c19kaXJfb3BlcmF0aW9uczsKIAlwcm9jX3N5c19yb290LT5wcm9jX2ZvcHMgPSAmcHJvY19zeXNfZGlyX2ZpbGVfb3BlcmF0aW9uczsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCA3M2QxODkxLi40ODA2ODMwIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0yMTAsOSArMjEwLDYgQEAKIAlkZXZfdCBkZXYgPSAwOwogCWludCBsZW47CiAKLQlpZiAobWFwc19wcm90ZWN0ICYmICFwdHJhY2VfbWF5X2FjY2Vzcyh0YXNrLCBQVFJBQ0VfTU9ERV9SRUFEKSkKLQkJcmV0dXJuIC1FQUNDRVM7Ci0KIAlpZiAoZmlsZSkgewogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCQlkZXYgPSBpbm9kZS0+aV9zYi0+c19kZXY7CkBAIC03NDIsMjIgKzczOSwxMSBAQAogI2lmZGVmIENPTkZJR19OVU1BCiBleHRlcm4gaW50IHNob3dfbnVtYV9tYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTsKIAotc3RhdGljIGludCBzaG93X251bWFfbWFwX2NoZWNrZWQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQotewotCXN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tPnByaXZhdGU7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gcHJpdi0+dGFzazsKLQotCWlmIChtYXBzX3Byb3RlY3QgJiYgIXB0cmFjZV9tYXlfYWNjZXNzKHRhc2ssIFBUUkFDRV9NT0RFX1JFQUQpKQotCQlyZXR1cm4gLUVBQ0NFUzsKLQotCXJldHVybiBzaG93X251bWFfbWFwKG0sIHYpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHByb2NfcGlkX251bWFfbWFwc19vcCA9IHsKICAgICAgICAgLnN0YXJ0ICA9IG1fc3RhcnQsCiAgICAgICAgIC5uZXh0ICAgPSBtX25leHQsCiAgICAgICAgIC5zdG9wICAgPSBtX3N0b3AsCi0gICAgICAgIC5zaG93ICAgPSBzaG93X251bWFfbWFwX2NoZWNrZWQKKyAgICAgICAgLnNob3cgICA9IHNob3dfbnVtYV9tYXAsCiB9OwogCiBzdGF0aWMgaW50IG51bWFfbWFwc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX25vbW11LmMgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwppbmRleCA1ZDg0ZTcxLi4yMTliZDc5IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbm9tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwpAQCAtMTEwLDExICsxMTAsNiBAQAogc3RhdGljIGludCBzaG93X21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl92bWwpCiB7CiAJc3RydWN0IHZtX2xpc3Rfc3RydWN0ICp2bWwgPSBfdm1sOwotCXN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tPnByaXZhdGU7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gcHJpdi0+dGFzazsKLQotCWlmIChtYXBzX3Byb3RlY3QgJiYgIXB0cmFjZV9tYXlfYWNjZXNzKHRhc2ssIFBUUkFDRV9NT0RFX1JFQUQpKQotCQlyZXR1cm4gLUVBQ0NFUzsKIAogCXJldHVybiBub21tdV92bWFfc2hvdyhtLCB2bWwtPnZtYSk7CiB9CmRpZmYgLS1naXQgYS9mcy9wcm9jL3ZtY29yZS5jIGIvZnMvcHJvYy92bWNvcmUuYwppbmRleCA5YWMwZjVlLi5jZDljYTY3IDEwMDY0NAotLS0gYS9mcy9wcm9jL3ZtY29yZS5jCisrKyBiL2ZzL3Byb2Mvdm1jb3JlLmMKQEAgLTMyLDkgKzMyLDYgQEAKIC8qIFRvdGFsIHNpemUgb2Ygdm1jb3JlIGZpbGUuICovCiBzdGF0aWMgdTY0IHZtY29yZV9zaXplOwogCi0vKiBTdG9yZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmIGhlYWRlciBvZiBjcmFzaCBpbWFnZS4gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOwotCiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfdm1jb3JlID0gTlVMTDsKIAogLyogUmVhZHMgYSBwYWdlIGZyb20gdGhlIG9sZG1lbSBkZXZpY2UgZnJvbSBnaXZlbiBvZmZzZXQuICovCkBAIC0xNjUsMTQgKzE2Miw4IEBACiAJcmV0dXJuIGFjYzsKIH0KIAotc3RhdGljIGludCBvcGVuX3ZtY29yZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3ZtY29yZV9vcGVyYXRpb25zID0gewogCS5yZWFkCQk9IHJlYWRfdm1jb3JlLAotCS5vcGVuCQk9IG9wZW5fdm1jb3JlLAogfTsKIAogc3RhdGljIHN0cnVjdCB2bWNvcmUqIF9faW5pdCBnZXRfbmV3X2VsZW1lbnQodm9pZCkKQEAgLTY1Myw3ICs2NDQsNyBAQAogCWludCByYyA9IDA7CiAKIAkvKiBJZiBlbGZjb3JlaGRyPSBoYXMgYmVlbiBwYXNzZWQgaW4gY21kbGluZSwgdGhlbiBjYXB0dXJlIHRoZSBkdW1wLiovCi0JaWYgKCEoZWxmY29yZWhkcl9hZGRyIDwgRUxGQ09SRV9BRERSX01BWCkpCisJaWYgKCEoaXNfdm1jb3JlX3VzYWJsZSgpKSkKIAkJcmV0dXJuIHJjOwogCXJjID0gcGFyc2VfY3Jhc2hfZWxmX2hlYWRlcnMoKTsKIAlpZiAocmMpIHsKZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwppbmRleCA1MTQ1Y2I5Li43NmFjZGJjIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9maWxlLW5vbW11LmMKKysrIGIvZnMvcmFtZnMvZmlsZS1ub21tdS5jCkBAIC0xMTIsMTIgKzExMiwxMiBAQAogCQkJZ290byBhZGRfZXJyb3I7CiAKIAkJaWYgKCFwYWdldmVjX2FkZCgmbHJ1X3B2ZWMsIHBhZ2UpKQotCQkJX19wYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwkJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9CiAKLQlwYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwlwYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOwogCXJldHVybiAwOwogCiAgZnNpemVfZXhjZWVkZWQ6CmRpZmYgLS1naXQgYS9mcy9yYW1mcy9pbm9kZS5jIGIvZnMvcmFtZnMvaW5vZGUuYwppbmRleCBiMTMxMjM0Li5mMDMxZDFjIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9pbm9kZS5jCisrKyBiL2ZzL3JhbWZzL2lub2RlLmMKQEAgLTYxLDYgKzYxLDcgQEAKIAkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmcmFtZnNfYW9wczsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZyYW1mc19iYWNraW5nX2Rldl9pbmZvOwogCQltYXBwaW5nX3NldF9nZnBfbWFzayhpbm9kZS0+aV9tYXBwaW5nLCBHRlBfSElHSFVTRVIpOworCQltYXBwaW5nX3NldF91bmV2aWN0YWJsZShpbm9kZS0+aV9tYXBwaW5nKTsKIAkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCQlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKaW5kZXggYjlkYmVlYy4uMzcxNzNmYSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKKysrIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKQEAgLTgsOCArOCw2IEBACiAKIC8qIHByb2MgaW5mbyBzdXBwb3J0IGEgbGEgb25lIGNyZWF0ZWQgYnkgU2l6aWZAQm90aWsuUlUgZm9yIFBHQyAqLwogCi0vKiAkSWQ6IHByb2Nmcy5jLHYgMS4xLjguMiAyMDAxLzA3LzE1IDE3OjA4OjQyIGdvZCBFeHAgJCAqLwotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC02MjEsNyArNjE5LDYgQEAKICNlbmRpZgogCiAvKgotICogJExvZzogcHJvY2ZzLmMsdiAkCiAgKiBSZXZpc2lvbiAxLjEuOC4yICAyMDAxLzA3LzE1IDE3OjA4OjQyICBnb2QKICAqICAuIHVzZSBnZXRfc3VwZXIoKSBpbiBwcm9jZnMuYwogICogIC4gcmVtb3ZlIHJlbW92ZV9zYXZlX2xpbmsoKSBmcm9tIHJlaXNlcmZzX2RvX3RydW5jYXRlKCkKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IGJiM2NiNWIuLmFkOTI0NjEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJeGFkaXIgPSBvcGVuX3hhX2Rpcihpbm9kZSwgZmxhZ3MpOwogCWlmIChJU19FUlIoeGFkaXIpKSB7CiAJCXJldHVybiBFUlJfQ0FTVCh4YWRpcik7Ci0JfSBlbHNlIGlmICh4YWRpciAmJiAheGFkaXItPmRfaW5vZGUpIHsKKwl9IGVsc2UgaWYgKCF4YWRpci0+ZF9pbm9kZSkgewogCQlkcHV0KHhhZGlyKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0RBVEEpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3NlcV9maWxlLmMgYi9mcy9zZXFfZmlsZS5jCmluZGV4IGJkMjBmN2YuLmViYTJlYWIgMTAwNjQ0Ci0tLSBhL2ZzL3NlcV9maWxlLmMKKysrIGIvZnMvc2VxX2ZpbGUuYwpAQCAtNDUyLDE3ICs0NTIsMzQgQEAKIAogaW50IHNlcV9iaXRtYXAoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nICpiaXRzLCB1bnNpZ25lZCBpbnQgbnJfYml0cykKIHsKLQlzaXplX3QgbGVuID0gYml0bWFwX3NjbnByaW50Zl9sZW4obnJfYml0cyk7Ci0KLQlpZiAobS0+Y291bnQgKyBsZW4gPCBtLT5zaXplKSB7Ci0JCWJpdG1hcF9zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkgYml0cywgbnJfYml0cyk7Ci0JCW0tPmNvdW50ICs9IGxlbjsKLQkJcmV0dXJuIDA7CisJaWYgKG0tPmNvdW50IDwgbS0+c2l6ZSkgeworCQlpbnQgbGVuID0gYml0bWFwX3NjbnByaW50ZihtLT5idWYgKyBtLT5jb3VudCwKKwkJCQltLT5zaXplIC0gbS0+Y291bnQsIGJpdHMsIG5yX2JpdHMpOworCQlpZiAobS0+Y291bnQgKyBsZW4gPCBtLT5zaXplKSB7CisJCQltLT5jb3VudCArPSBsZW47CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAltLT5jb3VudCA9IG0tPnNpemU7CiAJcmV0dXJuIC0xOwogfQorRVhQT1JUX1NZTUJPTChzZXFfYml0bWFwKTsKKworaW50IHNlcV9iaXRtYXBfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGxvbmcgKmJpdHMsCisJCXVuc2lnbmVkIGludCBucl9iaXRzKQoreworCWlmIChtLT5jb3VudCA8IG0tPnNpemUpIHsKKwkJaW50IGxlbiA9IGJpdG1hcF9zY25saXN0cHJpbnRmKG0tPmJ1ZiArIG0tPmNvdW50LAorCQkJCW0tPnNpemUgLSBtLT5jb3VudCwgYml0cywgbnJfYml0cyk7CisJCWlmIChtLT5jb3VudCArIGxlbiA8IG0tPnNpemUpIHsKKwkJCW0tPmNvdW50ICs9IGxlbjsKKwkJCXJldHVybiAwOworCQl9CisJfQorCW0tPmNvdW50ID0gbS0+c2l6ZTsKKwlyZXR1cm4gLTE7Cit9CitFWFBPUlRfU1lNQk9MKHNlcV9iaXRtYXBfbGlzdCk7CiAKIHN0YXRpYyB2b2lkICpzaW5nbGVfc3RhcnQoc3RydWN0IHNlcV9maWxlICpwLCBsb2ZmX3QgKnBvcykKIHsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Jpbi5jIGIvZnMvc3lzZnMvYmluLmMKaW5kZXggMDA2ZmM2NC4uNjZmNmU1OCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvYmluLmMKKysrIGIvZnMvc3lzZnMvYmluLmMKQEAgLTYxLDYgKzYxLDcgQEAKIAlpbnQgc2l6ZSA9IGRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplOwogCWxvZmZfdCBvZmZzID0gKm9mZjsKIAlpbnQgY291bnQgPSBtaW5fdChzaXplX3QsIGJ5dGVzLCBQQUdFX1NJWkUpOworCWNoYXIgKnRlbXA7CiAKIAlpZiAoc2l6ZSkgewogCQlpZiAob2ZmcyA+IHNpemUpCkBAIC02OSwyMyArNzAsMzMgQEAKIAkJCWNvdW50ID0gc2l6ZSAtIG9mZnM7CiAJfQogCisJdGVtcCA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmICghdGVtcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAltdXRleF9sb2NrKCZiYi0+bXV0ZXgpOwogCiAJY291bnQgPSBmaWxsX3JlYWQoZGVudHJ5LCBiYi0+YnVmZmVyLCBvZmZzLCBjb3VudCk7Ci0JaWYgKGNvdW50IDwgMCkKLQkJZ290byBvdXRfdW5sb2NrOworCWlmIChjb3VudCA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZiYi0+bXV0ZXgpOworCQlnb3RvIG91dF9mcmVlOworCX0KIAotCWlmIChjb3B5X3RvX3VzZXIodXNlcmJ1ZiwgYmItPmJ1ZmZlciwgY291bnQpKSB7CisJbWVtY3B5KHRlbXAsIGJiLT5idWZmZXIsIGNvdW50KTsKKworCW11dGV4X3VubG9jaygmYmItPm11dGV4KTsKKworCWlmIChjb3B5X3RvX3VzZXIodXNlcmJ1ZiwgdGVtcCwgY291bnQpKSB7CiAJCWNvdW50ID0gLUVGQVVMVDsKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF9mcmVlOwogCX0KIAogCXByX2RlYnVnKCJvZmZzID0gJWxsZCwgKm9mZiA9ICVsbGQsIGNvdW50ID0gJWRcbiIsIG9mZnMsICpvZmYsIGNvdW50KTsKIAogCSpvZmYgPSBvZmZzICsgY291bnQ7CiAKLSBvdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmYmItPm11dGV4KTsKKyBvdXRfZnJlZToKKwlrZnJlZSh0ZW1wKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTExOCw2ICsxMjksNyBAQAogCWludCBzaXplID0gZGVudHJ5LT5kX2lub2RlLT5pX3NpemU7CiAJbG9mZl90IG9mZnMgPSAqb2ZmOwogCWludCBjb3VudCA9IG1pbl90KHNpemVfdCwgYnl0ZXMsIFBBR0VfU0laRSk7CisJY2hhciAqdGVtcDsKIAogCWlmIChzaXplKSB7CiAJCWlmIChvZmZzID4gc2l6ZSkKQEAgLTEyNiwxOSArMTM4LDI3IEBACiAJCQljb3VudCA9IHNpemUgLSBvZmZzOwogCX0KIAotCW11dGV4X2xvY2soJmJiLT5tdXRleCk7CisJdGVtcCA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmICghdGVtcCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoYmItPmJ1ZmZlciwgdXNlcmJ1ZiwgY291bnQpKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKHRlbXAsIHVzZXJidWYsIGNvdW50KSkgewogCQljb3VudCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXRfZnJlZTsKIAl9CiAKKwltdXRleF9sb2NrKCZiYi0+bXV0ZXgpOworCisJbWVtY3B5KGJiLT5idWZmZXIsIHRlbXAsIGNvdW50KTsKKwogCWNvdW50ID0gZmx1c2hfd3JpdGUoZGVudHJ5LCBiYi0+YnVmZmVyLCBvZmZzLCBjb3VudCk7CisJbXV0ZXhfdW5sb2NrKCZiYi0+bXV0ZXgpOworCiAJaWYgKGNvdW50ID4gMCkKIAkJKm9mZiA9IG9mZnMgKyBjb3VudDsKIAotIG91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZiYi0+bXV0ZXgpOworb3V0X2ZyZWU6CisJa2ZyZWUodGVtcCk7CiAJcmV0dXJuIGNvdW50OwogfQogCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IGFlZGFlYmEuLjNhMDVhNTkgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC0zNzAsMTcgKzM3MCwxNyBAQAogCW1lbXNldChhY3h0LCAwLCBzaXplb2YoKmFjeHQpKTsKIAlhY3h0LT5wYXJlbnRfc2QgPSBwYXJlbnRfc2Q7CiAKLQkvKiBMb29rdXAgcGFyZW50IGlub2RlLiAgaW5vZGUgaW5pdGlhbGl6YXRpb24gYW5kIElfTkVXCi0JICogY2xlYXJpbmcgYXJlIHByb3RlY3RlZCBieSBzeXNmc19tdXRleC4gIEJ5IGdyYWJiaW5nIGl0IGFuZAotCSAqIGxvb2tpbmcgdXAgd2l0aCBfbm93YWl0IHZhcmlhbnQsIGlub2RlIHN0YXRlIGNhbiBiZQotCSAqIGRldGVybWluZWQgcmVsaWFibHkuCisJLyogTG9va3VwIHBhcmVudCBpbm9kZS4gIGlub2RlIGluaXRpYWxpemF0aW9uIGlzIHByb3RlY3RlZCBieQorCSAqIHN5c2ZzX211dGV4LCBzbyBpbm9kZSBleGlzdGVuY2UgY2FuIGJlIGRldGVybWluZWQgYnkKKwkgKiBsb29raW5nIHVwIGlub2RlIHdoaWxlIGhvbGRpbmcgc3lzZnNfbXV0ZXguCiAJICovCiAJbXV0ZXhfbG9jaygmc3lzZnNfbXV0ZXgpOwogCi0JaW5vZGUgPSBpbG9va3VwNV9ub3dhaXQoc3lzZnNfc2IsIHBhcmVudF9zZC0+c19pbm8sIHN5c2ZzX2lsb29rdXBfdGVzdCwKLQkJCQlwYXJlbnRfc2QpOworCWlub2RlID0gaWxvb2t1cDUoc3lzZnNfc2IsIHBhcmVudF9zZC0+c19pbm8sIHN5c2ZzX2lsb29rdXBfdGVzdCwKKwkJCSBwYXJlbnRfc2QpOworCWlmIChpbm9kZSkgeworCQlXQVJOX09OKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpOwogCi0JaWYgKGlub2RlICYmICEoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykpIHsKIAkJLyogcGFyZW50IGlub2RlIGF2YWlsYWJsZSAqLwogCQlhY3h0LT5wYXJlbnRfaW5vZGUgPSBpbm9kZTsKIApAQCAtMzkzLDggKzM5Myw3IEBACiAJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQltdXRleF9sb2NrKCZzeXNmc19tdXRleCk7CiAJCX0KLQl9IGVsc2UKLQkJaXB1dChpbm9kZSk7CisJfQogfQogCiAvKioKQEAgLTYzNiw2ICs2MzUsNyBAQAogCiAJcmV0dXJuIHNkOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfZ2V0X2RpcmVudCk7CiAKIHN0YXRpYyBpbnQgY3JlYXRlX2RpcihzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IHN5c2ZzX2RpcmVudCAqcGFyZW50X3NkLAogCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICoqcF9zZCkKQEAgLTgyOSwxNiArODI5LDEyIEBACiAJaWYgKCFuZXdfZGVudHJ5KQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQkvKiByZW5hbWUga29iamVjdCBhbmQgc3lzZnNfZGlyZW50ICovCisJLyogcmVuYW1lIHN5c2ZzX2RpcmVudCAqLwogCWVycm9yID0gLUVOT01FTTsKIAluZXdfbmFtZSA9IGR1cF9uYW1lID0ga3N0cmR1cChuZXdfbmFtZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXdfbmFtZSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JZXJyb3IgPSBrb2JqZWN0X3NldF9uYW1lKGtvYmosICIlcyIsIG5ld19uYW1lKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3VubG9jazsKLQogCWR1cF9uYW1lID0gc2QtPnNfbmFtZTsKIAlzZC0+c19uYW1lID0gbmV3X25hbWU7CiAKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCBjOWU0ZTUwLi4xZjRhM2Y4IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC0xOSwxMCArMTksMTggQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInN5c2ZzLmgiCiAKKy8qIHVzZWQgaW4gY3Jhc2ggZHVtcHMgdG8gaGVscCB3aXRoIGRlYnVnZ2luZyAqLworc3RhdGljIGNoYXIgbGFzdF9zeXNmc19maWxlW1BBVEhfTUFYXTsKK3ZvaWQgc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSh2b2lkKQoreworCXByaW50ayhLRVJOX0VNRVJHICJsYXN0IHN5c2ZzIGZpbGU6ICVzXG4iLCBsYXN0X3N5c2ZzX2ZpbGUpOworfQorCiAvKgogICogVGhlcmUncyBvbmUgc3lzZnNfYnVmZmVyIGZvciBlYWNoIG9wZW4gZmlsZSBhbmQgb25lCiAgKiBzeXNmc19vcGVuX2RpcmVudCBmb3IgZWFjaCBzeXNmc19kaXJlbnQgd2l0aCBvbmUgb3IgbW9yZSBvcGVuCkBAIC0zMjgsNiArMzM2LDExIEBACiAJc3RydWN0IHN5c2ZzX2J1ZmZlciAqYnVmZmVyOwogCXN0cnVjdCBzeXNmc19vcHMgKm9wczsKIAlpbnQgZXJyb3IgPSAtRUFDQ0VTOworCWNoYXIgKnA7CisKKwlwID0gZF9wYXRoKCZmaWxlLT5mX3BhdGgsIGxhc3Rfc3lzZnNfZmlsZSwgc2l6ZW9mKGxhc3Rfc3lzZnNfZmlsZSkpOworCWlmIChwKQorCQltZW1tb3ZlKGxhc3Rfc3lzZnNfZmlsZSwgcCwgc3RybGVuKHApICsgMSk7CiAKIAkvKiBuZWVkIGF0dHJfc2QgZm9yIGF0dHIgYW5kIG9wcywgaXRzIHBhcmVudCBmb3Iga29iaiAqLwogCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCkBAIC00NDAsNyArNDUzLDIzIEBACiAJcmV0dXJuIFBPTExFUlJ8UE9MTFBSSTsKIH0KIAotdm9pZCBzeXNmc19ub3RpZnkoc3RydWN0IGtvYmplY3QgKmssIGNoYXIgKmRpciwgY2hhciAqYXR0cikKK3ZvaWQgc3lzZnNfbm90aWZ5X2RpcmVudChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3sKKwlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kOworCisJc3Bpbl9sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKworCW9kID0gc2QtPnNfYXR0ci5vcGVuOworCWlmIChvZCkgeworCQlhdG9taWNfaW5jKCZvZC0+ZXZlbnQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm9kLT5wb2xsKTsKKwl9CisKKwlzcGluX3VubG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzeXNmc19ub3RpZnlfZGlyZW50KTsKKwordm9pZCBzeXNmc19ub3RpZnkoc3RydWN0IGtvYmplY3QgKmssIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqYXR0cikKIHsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCA9IGstPnNkOwogCkBAIC00NTAsMTkgKzQ3OSw4IEBACiAJCXNkID0gc3lzZnNfZmluZF9kaXJlbnQoc2QsIGRpcik7CiAJaWYgKHNkICYmIGF0dHIpCiAJCXNkID0gc3lzZnNfZmluZF9kaXJlbnQoc2QsIGF0dHIpOwotCWlmIChzZCkgewotCQlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kOwotCi0JCXNwaW5fbG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7Ci0KLQkJb2QgPSBzZC0+c19hdHRyLm9wZW47Ci0JCWlmIChvZCkgewotCQkJYXRvbWljX2luYygmb2QtPmV2ZW50KTsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmb2QtPnBvbGwpOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOwotCX0KKwlpZiAoc2QpCisJCXN5c2ZzX25vdGlmeV9kaXJlbnQoc2QpOwogCiAJbXV0ZXhfdW5sb2NrKCZzeXNmc19tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9tb3VudC5jIGIvZnMvc3lzZnMvbW91bnQuYwppbmRleCAxNGYwMDIzLi5hYjM0M2UzIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9tb3VudC5jCisrKyBiL2ZzL3N5c2ZzL21vdW50LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlICJzeXNmcy5oIgogCkBAIC0xMTUsMyArMTE2LDE3IEBACiAJc3lzZnNfZGlyX2NhY2hlcCA9IE5VTEw7CiAJZ290byBvdXQ7CiB9CisKKyN1bmRlZiBzeXNmc19nZXQKK3N0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3sKKwlyZXR1cm4gX19zeXNmc19nZXQoc2QpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfZ2V0KTsKKworI3VuZGVmIHN5c2ZzX3B1dAordm9pZCBzeXNmc19wdXQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCit7CisJX19zeXNmc19wdXQoc2QpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfcHV0KTsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5c2ZzLmggYi9mcy9zeXNmcy9zeXNmcy5oCmluZGV4IGE1ZGI0OTYuLjkzYzZkNmIgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL3N5c2ZzLmgKKysrIGIvZnMvc3lzZnMvc3lzZnMuaApAQCAtMTI0LDcgKzEyNCw3IEBACiAJCQlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICoqcF9zZCk7CiB2b2lkIHN5c2ZzX3JlbW92ZV9zdWJkaXIoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN5c2ZzX2RpcmVudCAqX19zeXNmc19nZXQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCiB7CiAJaWYgKHNkKSB7CiAJCVdBUk5fT04oIWF0b21pY19yZWFkKCZzZC0+c19jb3VudCkpOwpAQCAtMTMyLDEyICsxMzIsMTQgQEAKIAl9CiAJcmV0dXJuIHNkOwogfQorI2RlZmluZSBzeXNmc19nZXQoc2QpIF9fc3lzZnNfZ2V0KHNkKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfcHV0KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQorc3RhdGljIGlubGluZSB2b2lkIF9fc3lzZnNfcHV0KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQogewogCWlmIChzZCAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZzZC0+c19jb3VudCkpCiAJCXJlbGVhc2Vfc3lzZnNfZGlyZW50KHNkKTsKIH0KKyNkZWZpbmUgc3lzZnNfcHV0KHNkKSBfX3N5c2ZzX3B1dChzZCkKIAogLyoKICAqIGlub2RlLmMKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2J1ZGdldC5jIGIvZnMvdWJpZnMvYnVkZ2V0LmMKaW5kZXggNzNkYjQ2NC4uMWE0OTczZSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvYnVkZ2V0LmMKKysrIGIvZnMvdWJpZnMvYnVkZ2V0LmMKQEAgLTQxNCwxOSArNDE0LDIxIEBACiAJICogICAgQGMtPmxzdC5lbXB0eV9sZWJzICsgQGMtPmZyZWVhYmxlX2NudCArIEBjLT5pZHhfZ2NfY250IC0KIAkgKiAgICBAYy0+bHN0LnRha2VuX2VtcHR5X2xlYnMKIAkgKgotCSAqIEBlbXB0eV9sZWJzIGFyZSBhdmFpbGFibGUgYmVjYXVzZSB0aGV5IGFyZSBlbXB0eS4gQGZyZWVhYmxlX2NudCBhcmUKLQkgKiBhdmFpbGFibGUgYmVjYXVzZSB0aGV5IGNvbnRhaW4gb25seSBmcmVlIGFuZCBkaXJ0eSBzcGFjZSBhbmQgdGhlCi0JICogaW5kZXggYWxsb2NhdGlvbiBhbHdheXMgb2NjdXJzIGFmdGVyIHdidWZzIGFyZSBzeW5jaCdlZC4KLQkgKiBAaWR4X2djX2NudCBhcmUgYXZhaWxhYmxlIGJlY2F1c2UgdGhleSBhcmUgaW5kZXggTEVCcyB0aGF0IGhhdmUgYmVlbgotCSAqIGdhcmJhZ2UgY29sbGVjdGVkIChpbmNsdWRpbmcgdHJpdmlhbCBHQykgYW5kIGFyZSBhd2FpdGluZyB0aGUgY29tbWl0Ci0JICogYmVmb3JlIHRoZXkgY2FuIGJlIHVubWFwcGVkIC0gbm90ZSB0aGF0IHRoZSBpbi10aGUtZ2FwcyBtZXRob2Qgd2lsbAotCSAqIGdyYWIgdGhlc2UgaWYgaXQgbmVlZHMgdGhlbS4gQHRha2VuX2VtcHR5X2xlYnMgYXJlIGVtcHR5X2xlYnMgdGhhdAotCSAqIGhhdmUgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCBmb3Igc29tZSBwdXJwb3NlIChhbHNvIGluY2x1ZGVzIHRob3NlCi0JICogTEVCcyBvbiB0aGUgQGlkeF9nYyBsaXN0KS4KKwkgKiBAYy0+bHN0LmVtcHR5X2xlYnMgYXJlIGF2YWlsYWJsZSBiZWNhdXNlIHRoZXkgYXJlIGVtcHR5LgorCSAqIEBjLT5mcmVlYWJsZV9jbnQgYXJlIGF2YWlsYWJsZSBiZWNhdXNlIHRoZXkgY29udGFpbiBvbmx5IGZyZWUgYW5kCisJICogZGlydHkgc3BhY2UsIEBjLT5pZHhfZ2NfY250IGFyZSBhdmFpbGFibGUgYmVjYXVzZSB0aGV5IGFyZSBpbmRleAorCSAqIExFQnMgdGhhdCBoYXZlIGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQgYW5kIGFyZSBhd2FpdGluZyB0aGUgY29tbWl0CisJICogYmVmb3JlIHRoZXkgY2FuIGJlIHVzZWQuIEFuZCB0aGUgaW4tdGhlLWdhcHMgbWV0aG9kIHdpbGwgZ3JhYiB0aGVzZQorCSAqIGlmIGl0IG5lZWRzIHRoZW0uIEBjLT5sc3QudGFrZW5fZW1wdHlfbGVicyBhcmUgZW1wdHkgTEVCcyB0aGF0IGhhdmUKKwkgKiBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkIGZvciBzb21lIHB1cnBvc2UuCiAJICoKLQkgKiBOb3RlLCBAdGFrZW5fZW1wdHlfbGVicyBtYXkgdGVtcG9yYXJpbHkgYmUgaGlnaGVyIGJ5IG9uZSBiZWNhdXNlIG9mCi0JICogdGhlIHdheSB3ZSBzZXJpYWxpemUgTEVCIGFsbG9jYXRpb25zIGFuZCBidWRnZXRpbmcuIFNlZSBhIGNvbW1lbnQgaW4KLQkgKiAndWJpZnNfZmluZF9mcmVlX3NwYWNlKCknLgorCSAqIE5vdGUsIEBjLT5pZHhfZ2NfY250IGlzIGluY2x1ZGVkIHRvIGJvdGggQGMtPmxzdC5lbXB0eV9sZWJzIChiZWNhdXNlCisJICogdGhlc2UgTEVCcyBhcmUgZW1wdHkpIGFuZCB0byBAYy0+bHN0LnRha2VuX2VtcHR5X2xlYnMgKGJlY2F1c2UgdGhleQorCSAqIGFyZSB0YWtlbiB1bnRpbCBhZnRlciB0aGUgY29tbWl0KS4KKwkgKgorCSAqIE5vdGUsIEBjLT5sc3QudGFrZW5fZW1wdHlfbGVicyBtYXkgdGVtcG9yYXJpbHkgYmUgaGlnaGVyIGJ5IG9uZQorCSAqIGJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBzZXJpYWxpemUgTEVCIGFsbG9jYXRpb25zIGFuZCBidWRnZXRpbmcuIFNlZSBhCisJICogY29tbWVudCBpbiAndWJpZnNfZmluZF9mcmVlX3NwYWNlKCknLgogCSAqLwogCWxlYnMgPSBjLT5sc3QuZW1wdHlfbGVicyArIGMtPmZyZWVhYmxlX2NudCArIGMtPmlkeF9nY19jbnQgLQogCSAgICAgICBjLT5sc3QudGFrZW5fZW1wdHlfbGViczsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2NvbXByZXNzLmMgYi9mcy91Ymlmcy9jb21wcmVzcy5jCmluZGV4IDViYjUxZGEuLmEwYWRhNTkgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2NvbXByZXNzLmMKKysrIGIvZnMvdWJpZnMvY29tcHJlc3MuYwpAQCAtOTEsOCArOTEsNiBAQAogICoKICAqIE5vdGUsIGlmIHRoZSBpbnB1dCBidWZmZXIgd2FzIG5vdCBjb21wcmVzc2VkLCBpdCBpcyBjb3BpZWQgdG8gdGhlIG91dHB1dAogICogYnVmZmVyIGFuZCAlVUJJRlNfQ09NUFJfTk9ORSBpcyByZXR1cm5lZCBpbiBAY29tcHJfdHlwZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9ucyByZXR1cm5zICUwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHZvaWQgdWJpZnNfY29tcHJlc3MoY29uc3Qgdm9pZCAqaW5fYnVmLCBpbnQgaW5fbGVuLCB2b2lkICpvdXRfYnVmLCBpbnQgKm91dF9sZW4sCiAJCSAgICBpbnQgKmNvbXByX3R5cGUpCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kZWJ1Zy5jIGIvZnMvdWJpZnMvZGVidWcuYwppbmRleCBkN2Y3NjQ1Li43MTg2NDAwIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9kZWJ1Zy5jCisrKyBiL2ZzL3ViaWZzL2RlYnVnLmMKQEAgLTIyMiwzMCArMjIyLDM4IEBACiB7CiAJY29uc3Qgc3RydWN0IHViaWZzX2lub2RlICp1aSA9IHViaWZzX2lub2RlKGlub2RlKTsKIAotCXByaW50ayhLRVJOX0RFQlVHICJpbm9kZSAgICAgICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKLQlwcmludGsoS0VSTl9ERUJVRyAic2l6ZSAgICAgICAlbGx1XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJEdW1wIGluLW1lbW9yeSBpbm9kZToiKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRpbm9kZSAgICAgICAgICAlbHVcbiIsIGlub2RlLT5pX2lubyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0c2l6ZSAgICAgICAgICAgJWxsdVxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpX3NpemVfcmVhZChpbm9kZSkpOwotCXByaW50ayhLRVJOX0RFQlVHICJubGluayAgICAgICV1XG4iLCBpbm9kZS0+aV9ubGluayk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInVpZCAgICAgICAgJXVcbiIsICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfdWlkKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiZ2lkICAgICAgICAldVxuIiwgKHVuc2lnbmVkIGludClpbm9kZS0+aV9naWQpOwotCXByaW50ayhLRVJOX0RFQlVHICJhdGltZSAgICAgICV1LiV1XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJcdG5saW5rICAgICAgICAgICV1XG4iLCBpbm9kZS0+aV9ubGluayk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0dWlkICAgICAgICAgICAgJXVcbiIsICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfdWlkKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRnaWQgICAgICAgICAgICAldVxuIiwgKHVuc2lnbmVkIGludClpbm9kZS0+aV9naWQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGF0aW1lICAgICAgICAgICV1LiV1XG4iLAogCSAgICAgICAodW5zaWduZWQgaW50KWlub2RlLT5pX2F0aW1lLnR2X3NlYywKIAkgICAgICAgKHVuc2lnbmVkIGludClpbm9kZS0+aV9hdGltZS50dl9uc2VjKTsKLQlwcmludGsoS0VSTl9ERUJVRyAibXRpbWUgICAgICAldS4ldVxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRtdGltZSAgICAgICAgICAldS4ldVxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGludClpbm9kZS0+aV9tdGltZS50dl9zZWMsCiAJICAgICAgICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfbXRpbWUudHZfbnNlYyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgImN0aW1lICAgICAgICV1LiV1XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJcdGN0aW1lICAgICAgICAgICV1LiV1XG4iLAogCSAgICAgICAodW5zaWduZWQgaW50KWlub2RlLT5pX2N0aW1lLnR2X3NlYywKIAkgICAgICAgKHVuc2lnbmVkIGludClpbm9kZS0+aV9jdGltZS50dl9uc2VjKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiY3JlYXRfc3FudW0gJWxsdVxuIiwgdWktPmNyZWF0X3NxbnVtKTsKLQlwcmludGsoS0VSTl9ERUJVRyAieGF0dHJfc2l6ZSAgJXVcbiIsIHVpLT54YXR0cl9zaXplKTsKLQlwcmludGsoS0VSTl9ERUJVRyAieGF0dHJfY250ICAgJXVcbiIsIHVpLT54YXR0cl9jbnQpOwotCXByaW50ayhLRVJOX0RFQlVHICJ4YXR0cl9uYW1lcyAldVxuIiwgdWktPnhhdHRyX25hbWVzKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiZGlydHkgICAgICAgJXVcbiIsIHVpLT5kaXJ0eSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInhhdHRyICAgICAgICV1XG4iLCB1aS0+eGF0dHIpOwotCXByaW50ayhLRVJOX0RFQlVHICJmbGFncyAgICAgICAlZFxuIiwgdWktPmZsYWdzKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiY29tcHJfdHlwZSAgJWRcbiIsIHVpLT5jb21wcl90eXBlKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiZGF0YV9sZW4gICAgJWRcbiIsIHVpLT5kYXRhX2xlbik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0Y3JlYXRfc3FudW0gICAgJWxsdVxuIiwgdWktPmNyZWF0X3NxbnVtKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHR4YXR0cl9zaXplICAgICAldVxuIiwgdWktPnhhdHRyX3NpemUpOworCXByaW50ayhLRVJOX0RFQlVHICJcdHhhdHRyX2NudCAgICAgICV1XG4iLCB1aS0+eGF0dHJfY250KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHR4YXR0cl9uYW1lcyAgICAldVxuIiwgdWktPnhhdHRyX25hbWVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRkaXJ0eSAgICAgICAgICAldVxuIiwgdWktPmRpcnR5KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHR4YXR0ciAgICAgICAgICAldVxuIiwgdWktPnhhdHRyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRidWxrX3JlYWQgICAgICAldVxuIiwgdWktPnhhdHRyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRzeW5jZWRfaV9zaXplICAlbGx1XG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXVpLT5zeW5jZWRfaV9zaXplKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHR1aV9zaXplICAgICAgICAlbGx1XG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXVpLT51aV9zaXplKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRmbGFncyAgICAgICAgICAlZFxuIiwgdWktPmZsYWdzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRjb21wcl90eXBlICAgICAlZFxuIiwgdWktPmNvbXByX3R5cGUpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxhc3RfcGFnZV9yZWFkICVsdVxuIiwgdWktPmxhc3RfcGFnZV9yZWFkKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRyZWFkX2luX2Ffcm93ICAlbHVcbiIsIHVpLT5yZWFkX2luX2Ffcm93KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRkYXRhX2xlbiAgICAgICAlZFxuIiwgdWktPmRhdGFfbGVuKTsKIH0KIAogdm9pZCBkYmdfZHVtcF9ub2RlKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBjb25zdCB2b2lkICpub2RlKQpAQCAtNjQ3LDYgKzY1NSw0MyBAQAogCX0KIH0KIAordm9pZCBkYmdfZHVtcF9scHRfaW5mbyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKK3sKKwlpbnQgaTsKKworCXNwaW5fbG9jaygmZGJnX2xvY2spOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxwdF9zejogICAgICAgICVsbGRcbiIsIGMtPmxwdF9zeik7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0cG5vZGVfc3o6ICAgICAgJWRcbiIsIGMtPnBub2RlX3N6KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRubm9kZV9zejogICAgICAlZFxuIiwgYy0+bm5vZGVfc3opOworCXByaW50ayhLRVJOX0RFQlVHICJcdGx0YWJfc3o6ICAgICAgICVkXG4iLCBjLT5sdGFiX3N6KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRsc2F2ZV9zejogICAgICAlZFxuIiwgYy0+bHNhdmVfc3opOworCXByaW50ayhLRVJOX0RFQlVHICJcdGJpZ19scHQ6ICAgICAgICVkXG4iLCBjLT5iaWdfbHB0KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRscHRfaGdodDogICAgICAlZFxuIiwgYy0+bHB0X2hnaHQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdHBub2RlX2NudDogICAgICVkXG4iLCBjLT5wbm9kZV9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdG5ub2RlX2NudDogICAgICVkXG4iLCBjLT5ubm9kZV9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGRpcnR5X3BuX2NudDogICVkXG4iLCBjLT5kaXJ0eV9wbl9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGRpcnR5X25uX2NudDogICVkXG4iLCBjLT5kaXJ0eV9ubl9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxzYXZlX2NudDogICAgICVkXG4iLCBjLT5sc2F2ZV9jbnQpOworCXByaW50ayhLRVJOX0RFQlVHICJcdHNwYWNlX2JpdHM6ICAgICVkXG4iLCBjLT5zcGFjZV9iaXRzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRscHRfbG51bV9iaXRzOiAlZFxuIiwgYy0+bHB0X2xudW1fYml0cyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlx0bHB0X29mZnNfYml0czogJWRcbiIsIGMtPmxwdF9vZmZzX2JpdHMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxwdF9zcGNfYml0czogICVkXG4iLCBjLT5scHRfc3BjX2JpdHMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdHBjbnRfYml0czogICAgICVkXG4iLCBjLT5wY250X2JpdHMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdGxudW1fYml0czogICAgICVkXG4iLCBjLT5sbnVtX2JpdHMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdExQVCByb290IGlzIGF0ICVkOiVkXG4iLCBjLT5scHRfbG51bSwgYy0+bHB0X29mZnMpOworCXByaW50ayhLRVJOX0RFQlVHICJcdExQVCBoZWFkIGlzIGF0ICVkOiVkXG4iLAorCSAgICAgICBjLT5uaGVhZF9sbnVtLCBjLT5uaGVhZF9vZmZzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXHRMUFQgbHRhYiBpcyBhdCAlZDolZFxuIiwgYy0+bHRhYl9sbnVtLCBjLT5sdGFiX29mZnMpOworCWlmIChjLT5iaWdfbHB0KQorCQlwcmludGsoS0VSTl9ERUJVRyAiXHRMUFQgbHNhdmUgaXMgYXQgJWQ6JWRcbiIsCisJCSAgICAgICBjLT5sc2F2ZV9sbnVtLCBjLT5sc2F2ZV9vZmZzKTsKKwlmb3IgKGkgPSAwOyBpIDwgYy0+bHB0X2xlYnM7IGkrKykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlx0TFBUIExFQiAlZCBmcmVlICVkIGRpcnR5ICVkIHRnYyAlZCAiCisJCSAgICAgICAiY210ICVkXG4iLCBpICsgYy0+bHB0X2ZpcnN0LCBjLT5sdGFiW2ldLmZyZWUsCisJCSAgICAgICBjLT5sdGFiW2ldLmRpcnR5LCBjLT5sdGFiW2ldLnRnYywgYy0+bHRhYltpXS5jbXQpOworCXNwaW5fdW5sb2NrKCZkYmdfbG9jayk7Cit9CisKIHZvaWQgZGJnX2R1bXBfbGViKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgbG51bSkKIHsKIAlzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWI7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9kZWJ1Zy5oIGIvZnMvdWJpZnMvZGVidWcuaAppbmRleCA1MDMxNWZjLi4zM2Q2Yjk1IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9kZWJ1Zy5oCisrKyBiL2ZzL3ViaWZzL2RlYnVnLmgKQEAgLTIyNCw2ICsyMjQsNyBAQAogdm9pZCBkYmdfZHVtcF9idWRnKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIHZvaWQgZGJnX2R1bXBfbHByb3AoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsIGNvbnN0IHN0cnVjdCB1Ymlmc19scHJvcHMgKmxwKTsKIHZvaWQgZGJnX2R1bXBfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKK3ZvaWQgZGJnX2R1bXBfbHB0X2luZm8oc3RydWN0IHViaWZzX2luZm8gKmMpOwogdm9pZCBkYmdfZHVtcF9sZWIoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBsbnVtKTsKIHZvaWQgZGJnX2R1bXBfem5vZGUoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCiAJCSAgICBjb25zdCBzdHJ1Y3QgdWJpZnNfem5vZGUgKnpub2RlKTsKQEAgLTI0OSw2ICsyNTAsOCBAQAogaW50IGRiZ19jaGVja19vbGRfaW5kZXgoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCB1Ymlmc196YnJhbmNoICp6cm9vdCk7CiBpbnQgZGJnX2NoZWNrX2NhdHMoc3RydWN0IHViaWZzX2luZm8gKmMpOwogaW50IGRiZ19jaGVja19sdGFiKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKK2ludCBkYmdfY2hrX2xwdF9mcmVlX3NwYyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CitpbnQgZGJnX2Noa19scHRfc3ooc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBhY3Rpb24sIGludCBsZW4pOwogaW50IGRiZ19jaGVja19zeW5jZWRfaV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IGRiZ19jaGVja19kaXJfc2l6ZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgY29uc3Qgc3RydWN0IGlub2RlICpkaXIpOwogaW50IGRiZ19jaGVja190bmMoc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBleHRyYSk7CkBAIC0zNjcsNiArMzcwLDcgQEAKICNkZWZpbmUgZGJnX2R1bXBfYnVkZyhjKSAgICAgICAgICAgICAgICAgICAgICAoe30pCiAjZGVmaW5lIGRiZ19kdW1wX2xwcm9wKGMsIGxwKSAgICAgICAgICAgICAgICAgKHt9KQogI2RlZmluZSBkYmdfZHVtcF9scHJvcHMoYykgICAgICAgICAgICAgICAgICAgICh7fSkKKyNkZWZpbmUgZGJnX2R1bXBfbHB0X2luZm8oYykgICAgICAgICAgICAgICAgICAoe30pCiAjZGVmaW5lIGRiZ19kdW1wX2xlYihjLCBsbnVtKSAgICAgICAgICAgICAgICAgKHt9KQogI2RlZmluZSBkYmdfZHVtcF96bm9kZShjLCB6bm9kZSkgICAgICAgICAgICAgICh7fSkKICNkZWZpbmUgZGJnX2R1bXBfaGVhcChjLCBoZWFwLCBjYXQpICAgICAgICAgICAoe30pCkBAIC0zNzksNiArMzgzLDggQEAKICNkZWZpbmUgZGJnX2NoZWNrX29sZF9pbmRleChjLCB6cm9vdCkgICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX2NhdHMoYykgICAgICAgICAgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX2x0YWIoYykgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGJnX2Noa19scHRfZnJlZV9zcGMoYykgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGJnX2Noa19scHRfc3ooYywgYWN0aW9uLCBsZW4pICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX3N5bmNlZF9pX3NpemUoaW5vZGUpICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX2Rpcl9zaXplKGMsIGRpcikgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgZGJnX2NoZWNrX3RuYyhjLCB4KSAgICAgICAgICAgICAgICAgICAgICAgIDAKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2ZpbGUuYyBiL2ZzL3ViaWZzL2ZpbGUuYwppbmRleCAzZDY5OGUyLi41MWNmNTExIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9maWxlLmMKKysrIGIvZnMvdWJpZnMvZmlsZS5jCkBAIC0xNDcsNiArMTQ3LDEyIEBACiAJCQkJZXJyID0gcmV0OwogCQkJCWlmIChlcnIgIT0gLUVOT0VOVCkKIAkJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKGJsb2NrICsgMSA9PSBiZXlvbmQpIHsKKwkJCQlpbnQgZGxlbiA9IGxlMzJfdG9fY3B1KGRuLT5zaXplKTsKKwkJCQlpbnQgaWxlbiA9IGlfc2l6ZSAmIChVQklGU19CTE9DS19TSVpFIC0gMSk7CisKKwkJCQlpZiAoaWxlbiAmJiBpbGVuIDwgZGxlbikKKwkJCQkJbWVtc2V0KGFkZHIgKyBpbGVuLCAwLCBkbGVuIC0gaWxlbik7CiAJCQl9CiAJCX0KIAkJaWYgKCsraSA+PSBVQklGU19CTE9DS1NfUEVSX1BBR0UpCkBAIC01NzcsOCArNTgzLDI2MiBAQAogCXJldHVybiBjb3BpZWQ7CiB9CiAKKy8qKgorICogcG9wdWxhdGVfcGFnZSAtIGNvcHkgZGF0YSBub2RlcyBpbnRvIGEgcGFnZSBmb3IgYnVsay1yZWFkLgorICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICogQHBhZ2U6IHBhZ2UKKyAqIEBidTogYnVsay1yZWFkIGluZm9ybWF0aW9uCisgKiBAbjogbmV4dCB6YnJhbmNoIHNsb3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgJTAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgcG9wdWxhdGVfcGFnZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgc3RydWN0IGJ1X2luZm8gKmJ1LCBpbnQgKm4pCit7CisJaW50IGkgPSAwLCBubiA9ICpuLCBvZmZzID0gYnUtPnpicmFuY2hbMF0ub2ZmcywgaG9sZSA9IDAsIHJlYWQgPSAwOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCWxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJdW5zaWduZWQgaW50IHBhZ2VfYmxvY2s7CisJdm9pZCAqYWRkciwgKnphZGRyOworCXBnb2ZmX3QgZW5kX2luZGV4OworCisJZGJnX2dlbigiaW5vICVsdSwgcGcgJWx1LCBpX3NpemUgJWxsZCwgZmxhZ3MgJSNseCIsCisJCWlub2RlLT5pX2lubywgcGFnZS0+aW5kZXgsIGlfc2l6ZSwgcGFnZS0+ZmxhZ3MpOworCisJYWRkciA9IHphZGRyID0ga21hcChwYWdlKTsKKworCWVuZF9pbmRleCA9IChpX3NpemUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCWlmICghaV9zaXplIHx8IHBhZ2UtPmluZGV4ID4gZW5kX2luZGV4KSB7CisJCWhvbGUgPSAxOworCQltZW1zZXQoYWRkciwgMCwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJZ290byBvdXRfaG9sZTsKKwl9CisKKwlwYWdlX2Jsb2NrID0gcGFnZS0+aW5kZXggPDwgVUJJRlNfQkxPQ0tTX1BFUl9QQUdFX1NISUZUOworCXdoaWxlICgxKSB7CisJCWludCBlcnIsIGxlbiwgb3V0X2xlbiwgZGxlbjsKKworCQlpZiAobm4gPj0gYnUtPmNudCkgeworCQkJaG9sZSA9IDE7CisJCQltZW1zZXQoYWRkciwgMCwgVUJJRlNfQkxPQ0tfU0laRSk7CisJCX0gZWxzZSBpZiAoa2V5X2Jsb2NrKGMsICZidS0+emJyYW5jaFtubl0ua2V5KSA9PSBwYWdlX2Jsb2NrKSB7CisJCQlzdHJ1Y3QgdWJpZnNfZGF0YV9ub2RlICpkbjsKKworCQkJZG4gPSBidS0+YnVmICsgKGJ1LT56YnJhbmNoW25uXS5vZmZzIC0gb2Zmcyk7CisKKwkJCXViaWZzX2Fzc2VydChkbi0+Y2guc3FudW0gPgorCQkJCSAgICAgdWJpZnNfaW5vZGUoaW5vZGUpLT5jcmVhdF9zcW51bSk7CisKKwkJCWxlbiA9IGxlMzJfdG9fY3B1KGRuLT5zaXplKTsKKwkJCWlmIChsZW4gPD0gMCB8fCBsZW4gPiBVQklGU19CTE9DS19TSVpFKQorCQkJCWdvdG8gb3V0X2VycjsKKworCQkJZGxlbiA9IGxlMzJfdG9fY3B1KGRuLT5jaC5sZW4pIC0gVUJJRlNfREFUQV9OT0RFX1NaOworCQkJb3V0X2xlbiA9IFVCSUZTX0JMT0NLX1NJWkU7CisJCQllcnIgPSB1Ymlmc19kZWNvbXByZXNzKCZkbi0+ZGF0YSwgZGxlbiwgYWRkciwgJm91dF9sZW4sCisJCQkJCSAgICAgICBsZTE2X3RvX2NwdShkbi0+Y29tcHJfdHlwZSkpOworCQkJaWYgKGVyciB8fCBsZW4gIT0gb3V0X2xlbikKKwkJCQlnb3RvIG91dF9lcnI7CisKKwkJCWlmIChsZW4gPCBVQklGU19CTE9DS19TSVpFKQorCQkJCW1lbXNldChhZGRyICsgbGVuLCAwLCBVQklGU19CTE9DS19TSVpFIC0gbGVuKTsKKworCQkJbm4gKz0gMTsKKwkJCXJlYWQgPSAoaSA8PCBVQklGU19CTE9DS19TSElGVCkgKyBsZW47CisJCX0gZWxzZSBpZiAoa2V5X2Jsb2NrKGMsICZidS0+emJyYW5jaFtubl0ua2V5KSA8IHBhZ2VfYmxvY2spIHsKKwkJCW5uICs9IDE7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWhvbGUgPSAxOworCQkJbWVtc2V0KGFkZHIsIDAsIFVCSUZTX0JMT0NLX1NJWkUpOworCQl9CisJCWlmICgrK2kgPj0gVUJJRlNfQkxPQ0tTX1BFUl9QQUdFKQorCQkJYnJlYWs7CisJCWFkZHIgKz0gVUJJRlNfQkxPQ0tfU0laRTsKKwkJcGFnZV9ibG9jayArPSAxOworCX0KKworCWlmIChlbmRfaW5kZXggPT0gcGFnZS0+aW5kZXgpIHsKKwkJaW50IGxlbiA9IGlfc2l6ZSAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKworCQlpZiAobGVuICYmIGxlbiA8IHJlYWQpCisJCQltZW1zZXQoemFkZHIgKyBsZW4sIDAsIHJlYWQgLSBsZW4pOworCX0KKworb3V0X2hvbGU6CisJaWYgKGhvbGUpIHsKKwkJU2V0UGFnZUNoZWNrZWQocGFnZSk7CisJCWRiZ19nZW4oImhvbGUiKTsKKwl9CisKKwlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJQ2xlYXJQYWdlRXJyb3IocGFnZSk7CisJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJa3VubWFwKHBhZ2UpOworCSpuID0gbm47CisJcmV0dXJuIDA7CisKK291dF9lcnI6CisJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7CisJU2V0UGFnZUVycm9yKHBhZ2UpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWt1bm1hcChwYWdlKTsKKwl1Ymlmc19lcnIoImJhZCBkYXRhIG5vZGUgKGJsb2NrICV1LCBpbm9kZSAlbHUpIiwKKwkJICBwYWdlX2Jsb2NrLCBpbm9kZS0+aV9pbm8pOworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHViaWZzX2RvX2J1bGtfcmVhZCAtIGRvIGJ1bGstcmVhZC4KKyAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqIEBwYWdlMTogZmlyc3QgcGFnZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMSBpZiB0aGUgYnVsay1yZWFkIGlzIGRvbmUsIG90aGVyd2lzZSAlMCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIGludCB1Ymlmc19kb19idWxrX3JlYWQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCBwYWdlICpwYWdlMSkKK3sKKwlwZ29mZl90IG9mZnNldCA9IHBhZ2UxLT5pbmRleCwgZW5kX2luZGV4OworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZTEtPm1hcHBpbmc7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJc3RydWN0IHViaWZzX2lub2RlICp1aSA9IHViaWZzX2lub2RlKGlub2RlKTsKKwlzdHJ1Y3QgYnVfaW5mbyAqYnU7CisJaW50IGVyciwgcGFnZV9pZHgsIHBhZ2VfY250LCByZXQgPSAwLCBuID0gMDsKKwlsb2ZmX3QgaXNpemU7CisKKwlidSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBidV9pbmZvKSwgR0ZQX05PRlMpOworCWlmICghYnUpCisJCXJldHVybiAwOworCisJYnUtPmJ1Zl9sZW4gPSBjLT5idWxrX3JlYWRfYnVmX3NpemU7CisJYnUtPmJ1ZiA9IGttYWxsb2MoYnUtPmJ1Zl9sZW4sIEdGUF9OT0ZTKTsKKwlpZiAoIWJ1LT5idWYpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlkYXRhX2tleV9pbml0KGMsICZidS0+a2V5LCBpbm9kZS0+aV9pbm8sCisJCSAgICAgIG9mZnNldCA8PCBVQklGU19CTE9DS1NfUEVSX1BBR0VfU0hJRlQpOworCisJZXJyID0gdWJpZnNfdG5jX2dldF9idV9rZXlzKGMsIGJ1KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF93YXJuOworCisJaWYgKGJ1LT5lb2YpIHsKKwkJLyogVHVybiBvZmYgYnVsay1yZWFkIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgKi8KKwkJdWktPnJlYWRfaW5fYV9yb3cgPSAxOworCQl1aS0+YnVsa19yZWFkID0gMDsKKwl9CisKKwlwYWdlX2NudCA9IGJ1LT5ibGtfY250ID4+IFVCSUZTX0JMT0NLU19QRVJfUEFHRV9TSElGVDsKKwlpZiAoIXBhZ2VfY250KSB7CisJCS8qCisJCSAqIFRoaXMgaGFwcGVucyB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBibG9ja3MgcGVyIHBhZ2UgYW5kIHRoZQorCQkgKiBibG9ja3MgZm9yIHRoZSBmaXJzdCBwYWdlIHdlIGFyZSBsb29raW5nIGZvciwgYXJlIG5vdAorCQkgKiB0b2dldGhlci4gSWYgYWxsIHRoZSBwYWdlcyB3ZXJlIGxpa2UgdGhpcywgYnVsay1yZWFkIHdvdWxkCisJCSAqIHJlZHVjZSBwZXJmb3JtYW5jZSwgc28gd2UgdHVybiBpdCBvZmYgZm9yIGEgd2hpbGUuCisJCSAqLworCQl1aS0+cmVhZF9pbl9hX3JvdyA9IDA7CisJCXVpLT5idWxrX3JlYWQgPSAwOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCWlmIChidS0+Y250KSB7CisJCWVyciA9IHViaWZzX3RuY19idWxrX3JlYWQoYywgYnUpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfd2FybjsKKwl9CisKKwllcnIgPSBwb3B1bGF0ZV9wYWdlKGMsIHBhZ2UxLCBidSwgJm4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3dhcm47CisKKwl1bmxvY2tfcGFnZShwYWdlMSk7CisJcmV0ID0gMTsKKworCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCWlmIChpc2l6ZSA9PSAwKQorCQlnb3RvIG91dF9mcmVlOworCWVuZF9pbmRleCA9ICgoaXNpemUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUKTsKKworCWZvciAocGFnZV9pZHggPSAxOyBwYWdlX2lkeCA8IHBhZ2VfY250OyBwYWdlX2lkeCsrKSB7CisJCXBnb2ZmX3QgcGFnZV9vZmZzZXQgPSBvZmZzZXQgKyBwYWdlX2lkeDsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwkJaWYgKHBhZ2Vfb2Zmc2V0ID4gZW5kX2luZGV4KQorCQkJYnJlYWs7CisJCXBhZ2UgPSBmaW5kX29yX2NyZWF0ZV9wYWdlKG1hcHBpbmcsIHBhZ2Vfb2Zmc2V0LAorCQkJCQkgICBHRlBfTk9GUyB8IF9fR0ZQX0NPTEQpOworCQlpZiAoIXBhZ2UpCisJCQlicmVhazsKKwkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpCisJCQllcnIgPSBwb3B1bGF0ZV9wYWdlKGMsIHBhZ2UsIGJ1LCAmbik7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwl9CisKKwl1aS0+bGFzdF9wYWdlX3JlYWQgPSBvZmZzZXQgKyBwYWdlX2lkeCAtIDE7CisKK291dF9mcmVlOgorCWtmcmVlKGJ1LT5idWYpOworCWtmcmVlKGJ1KTsKKwlyZXR1cm4gcmV0OworCitvdXRfd2FybjoKKwl1Ymlmc193YXJuKCJpZ25vcmluZyBlcnJvciAlZCBhbmQgc2tpcHBpbmcgYnVsay1yZWFkIiwgZXJyKTsKKwlnb3RvIG91dF9mcmVlOworfQorCisvKioKKyAqIHViaWZzX2J1bGtfcmVhZCAtIGRldGVybWluZSB3aGV0aGVyIHRvIGJ1bGstcmVhZCBhbmQsIGlmIHNvLCBkbyBpdC4KKyAqIEBwYWdlOiBwYWdlIGZyb20gd2hpY2ggdG8gc3RhcnQgYnVsay1yZWFkLgorICoKKyAqIFNvbWUgZmxhc2ggbWVkaWEgYXJlIGNhcGFibGUgb2YgcmVhZGluZyBzZXF1ZW50aWFsbHkgYXQgZmFzdGVyIHJhdGVzLiBVQklGUworICogYnVsay1yZWFkIGZhY2lsaXR5IGlzIGRlc2lnbmVkIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoYXQsIGJ5IHJlYWRpbmcgaW4gb25lCisgKiBnbyBjb25zZWN1dGl2ZSBkYXRhIG5vZGVzIHRoYXQgYXJlIGFsc28gbG9jYXRlZCBjb25zZWN1dGl2ZWx5IGluIHRoZSBzYW1lCisgKiBMRUIuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMSBpZiBhIGJ1bGstcmVhZCBpcyBkb25lIGFuZCAlMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdWJpZnNfYnVsa19yZWFkKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCXN0cnVjdCB1Ymlmc19pbmZvICpjID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3QgdWJpZnNfaW5vZGUgKnVpID0gdWJpZnNfaW5vZGUoaW5vZGUpOworCXBnb2ZmX3QgaW5kZXggPSBwYWdlLT5pbmRleCwgbGFzdF9wYWdlX3JlYWQgPSB1aS0+bGFzdF9wYWdlX3JlYWQ7CisJaW50IHJldCA9IDA7CisKKwl1aS0+bGFzdF9wYWdlX3JlYWQgPSBpbmRleDsKKworCWlmICghYy0+YnVsa19yZWFkKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIEJ1bGstcmVhZCBpcyBwcm90ZWN0ZWQgYnkgdWlfbXV0ZXgsIGJ1dCBpdCBpcyBhbiBvcHRpbWl6YXRpb24sIHNvCisJICogZG9uJ3QgYm90aGVyIGlmIHdlIGNhbm5vdCBsb2NrIHRoZSBtdXRleC4KKwkgKi8KKwlpZiAoIW11dGV4X3RyeWxvY2soJnVpLT51aV9tdXRleCkpCisJCXJldHVybiAwOworCWlmIChpbmRleCAhPSBsYXN0X3BhZ2VfcmVhZCArIDEpIHsKKwkJLyogVHVybiBvZmYgYnVsay1yZWFkIGlmIHdlIHN0b3AgcmVhZGluZyBzZXF1ZW50aWFsbHkgKi8KKwkJdWktPnJlYWRfaW5fYV9yb3cgPSAxOworCQlpZiAodWktPmJ1bGtfcmVhZCkKKwkJCXVpLT5idWxrX3JlYWQgPSAwOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCWlmICghdWktPmJ1bGtfcmVhZCkgeworCQl1aS0+cmVhZF9pbl9hX3JvdyArPSAxOworCQlpZiAodWktPnJlYWRfaW5fYV9yb3cgPCAzKQorCQkJZ290byBvdXRfdW5sb2NrOworCQkvKiBUaHJlZSByZWFkcyBpbiBhIHJvdywgc28gc3dpdGNoIG9uIGJ1bGstcmVhZCAqLworCQl1aS0+YnVsa19yZWFkID0gMTsKKwl9CisJcmV0ID0gdWJpZnNfZG9fYnVsa19yZWFkKGMsIHBhZ2UpOworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnVpLT51aV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCB1Ymlmc19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CisJaWYgKHViaWZzX2J1bGtfcmVhZChwYWdlKSkKKwkJcmV0dXJuIDA7CiAJZG9fcmVhZHBhZ2UocGFnZSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9maW5kLmMgYi9mcy91Ymlmcy9maW5kLmMKaW5kZXggNDc4MTRjZC4uNzE3ZDc5YyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZmluZC5jCisrKyBiL2ZzL3ViaWZzL2ZpbmQuYwpAQCAtOTAxLDExICs5MDEsMTEgQEAKIAkgKiBpdCBpcyBuZWVkZWQgbm93IGZvciB0aGlzIGNvbW1pdC4KIAkgKi8KIAlscCA9IHViaWZzX2xwdF9sb29rdXBfZGlydHkoYywgbG51bSk7Ci0JaWYgKHVubGlrZWx5KElTX0VSUihscCkpKQorCWlmIChJU19FUlIobHApKQogCQlyZXR1cm4gUFRSX0VSUihscCk7CiAJbHAgPSB1Ymlmc19jaGFuZ2VfbHAoYywgbHAsIExQUk9QU19OQywgTFBST1BTX05DLAogCQkJICAgICBscC0+ZmxhZ3MgfCBMUFJPUFNfSU5ERVgsIC0xKTsKLQlpZiAodW5saWtlbHkoSVNfRVJSKGxwKSkpCisJaWYgKElTX0VSUihscCkpCiAJCXJldHVybiBQVFJfRVJSKGxwKTsKIAlkYmdfZmluZCgiTEVCICVkLCBkaXJ0eSAlZCBhbmQgZnJlZSAlZCBmbGFncyAlI3giLAogCQkgbHAtPmxudW0sIGxwLT5kaXJ0eSwgbHAtPmZyZWUsIGxwLT5mbGFncyk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9nYy5jIGIvZnMvdWJpZnMvZ2MuYwppbmRleCAwMmFiYTM2Li4wYmVmNjUwIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9nYy5jCisrKyBiL2ZzL3ViaWZzL2djLmMKQEAgLTk2LDYgKzk2LDQ4IEBACiB9CiAKIC8qKgorICogam9pbnVwIC0gYnJpbmcgZGF0YSBub2RlcyBmb3IgYW4gaW5vZGUgdG9nZXRoZXIuCisgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAc2xlYjogZGVzY3JpYmVzIHNjYW5uZWQgTEVCCisgKiBAaW51bTogaW5vZGUgbnVtYmVyCisgKiBAYmxrOiBibG9jayBudW1iZXIKKyAqIEBkYXRhOiBsaXN0IHRvIHdoaWNoIHRvIGFkZCBkYXRhIG5vZGVzCisgKgorICogVGhpcyBmdW5jdGlvbiBsb29rcyBhdCB0aGUgZmlyc3QgZmV3IG5vZGVzIGluIHRoZSBzY2FubmVkIExFQiBAc2xlYiBhbmQgYWRkcworICogdGhlbSB0byBAZGF0YSBpZiB0aGV5IGFyZSBkYXRhIG5vZGVzIGZyb20gQGludW0gYW5kIGhhdmUgYSBsYXJnZXIgYmxvY2sKKyAqIG51bWJlciB0aGFuIEBibGsuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAlMCBvbiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yCisgKiBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgam9pbnVwKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWIsIGlub190IGludW0sCisJCSAgdW5zaWduZWQgaW50IGJsaywgc3RydWN0IGxpc3RfaGVhZCAqZGF0YSkKK3sKKwlpbnQgZXJyLCBjbnQgPSA2LCBsbnVtID0gc2xlYi0+bG51bSwgb2ZmczsKKwlzdHJ1Y3QgdWJpZnNfc2Nhbl9ub2RlICpzbm9kLCAqdG1wOworCXVuaW9uIHViaWZzX2tleSAqa2V5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNub2QsIHRtcCwgJnNsZWItPm5vZGVzLCBsaXN0KSB7CisJCWtleSA9ICZzbm9kLT5rZXk7CisJCWlmIChrZXlfaW51bShjLCBrZXkpID09IGludW0gJiYKKwkJICAgIGtleV90eXBlKGMsIGtleSkgPT0gVUJJRlNfREFUQV9LRVkgJiYKKwkJICAgIGtleV9ibG9jayhjLCBrZXkpID4gYmxrKSB7CisJCQlvZmZzID0gc25vZC0+b2ZmczsKKwkJCWVyciA9IHViaWZzX3RuY19oYXNfbm9kZShjLCBrZXksIDAsIGxudW0sIG9mZnMsIDApOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJCWxpc3RfZGVsKCZzbm9kLT5saXN0KTsKKwkJCWlmIChlcnIpIHsKKwkJCQlsaXN0X2FkZF90YWlsKCZzbm9kLT5saXN0LCBkYXRhKTsKKwkJCQlibGsgPSBrZXlfYmxvY2soYywga2V5KTsKKwkJCX0gZWxzZQorCQkJCWtmcmVlKHNub2QpOworCQkJY250ID0gNjsKKwkJfSBlbHNlIGlmICgtLWNudCA9PSAwKQorCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisvKioKICAqIG1vdmVfbm9kZXMgLSBtb3ZlIG5vZGVzLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQHNsZWI6IGRlc2NyaWJlcyBub2RlcyB0byBtb3ZlCkBAIC0xMTYsMTYgKzE1OCwyMSBAQAogc3RhdGljIGludCBtb3ZlX25vZGVzKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgdWJpZnNfc2Nhbl9sZWIgKnNsZWIpCiB7CiAJc3RydWN0IHViaWZzX3NjYW5fbm9kZSAqc25vZCwgKnRtcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxhcmdlLCBtZWRpdW0sIHNtYWxsOworCXN0cnVjdCBsaXN0X2hlYWQgZGF0YSwgbGFyZ2UsIG1lZGl1bSwgc21hbGw7CiAJc3RydWN0IHViaWZzX3didWYgKndidWYgPSAmYy0+amhlYWRzW0dDSERdLndidWY7CiAJaW50IGF2YWlsLCBlcnIsIG1pbiA9IElOVF9NQVg7CisJdW5zaWduZWQgaW50IGJsayA9IDA7CisJaW5vX3QgaW51bSA9IDA7CiAKKwlJTklUX0xJU1RfSEVBRCgmZGF0YSk7CiAJSU5JVF9MSVNUX0hFQUQoJmxhcmdlKTsKIAlJTklUX0xJU1RfSEVBRCgmbWVkaXVtKTsKIAlJTklUX0xJU1RfSEVBRCgmc21hbGwpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNub2QsIHRtcCwgJnNsZWItPm5vZGVzLCBsaXN0KSB7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKmxzdDsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnNsZWItPm5vZGVzKSkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpsc3QgPSBzbGViLT5ub2Rlcy5uZXh0OworCisJCXNub2QgPSBsaXN0X2VudHJ5KGxzdCwgc3RydWN0IHViaWZzX3NjYW5fbm9kZSwgbGlzdCk7CiAKIAkJdWJpZnNfYXNzZXJ0KHNub2QtPnR5cGUgIT0gVUJJRlNfSURYX05PREUpOwogCQl1Ymlmc19hc3NlcnQoc25vZC0+dHlwZSAhPSBVQklGU19SRUZfTk9ERSk7CkBAIC0xMzYsNyArMTgzLDYgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dDsKIAotCQlsc3QgPSAmc25vZC0+bGlzdDsKIAkJbGlzdF9kZWwobHN0KTsKIAkJaWYgKCFlcnIpIHsKIAkJCS8qIFRoZSBub2RlIGlzIG9ic29sZXRlLCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCAqLwpAQCAtMTQ1LDE1ICsxOTEsMzAgQEAKIAkJfQogCiAJCS8qCi0JCSAqIFNvcnQgdGhlIGxpc3Qgb2Ygbm9kZXMgc28gdGhhdCBsYXJnZSBub2RlcyBnbyBmaXJzdCwgYW5kCi0JCSAqIHNtYWxsIG5vZGVzIGdvIGxhc3QuCisJCSAqIFNvcnQgdGhlIGxpc3Qgb2Ygbm9kZXMgc28gdGhhdCBkYXRhIG5vZGVzIGdvIGZpcnN0LCBsYXJnZQorCQkgKiBub2RlcyBnbyBzZWNvbmQsIGFuZCBzbWFsbCBub2RlcyBnbyBsYXN0LgogCQkgKi8KLQkJaWYgKHNub2QtPmxlbiA+IE1FRElVTV9OT0RFX1dNKQotCQkJbGlzdF9hZGQobHN0LCAmbGFyZ2UpOworCQlpZiAoa2V5X3R5cGUoYywgJnNub2QtPmtleSkgPT0gVUJJRlNfREFUQV9LRVkpIHsKKwkJCWlmIChpbnVtICE9IGtleV9pbnVtKGMsICZzbm9kLT5rZXkpKSB7CisJCQkJaWYgKGludW0pIHsKKwkJCQkJLyoKKwkJCQkJICogVHJ5IHRvIG1vdmUgZGF0YSBub2RlcyBmcm9tIHRoZSBzYW1lCisJCQkJCSAqIGlub2RlIHRvZ2V0aGVyLgorCQkJCQkgKi8KKwkJCQkJZXJyID0gam9pbnVwKGMsIHNsZWIsIGludW0sIGJsaywgJmRhdGEpOworCQkJCQlpZiAoZXJyKQorCQkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCWludW0gPSBrZXlfaW51bShjLCAmc25vZC0+a2V5KTsKKwkJCQlibGsgPSBrZXlfYmxvY2soYywgJnNub2QtPmtleSk7CisJCQl9CisJCQlsaXN0X2FkZF90YWlsKGxzdCwgJmRhdGEpOworCQl9IGVsc2UgaWYgKHNub2QtPmxlbiA+IE1FRElVTV9OT0RFX1dNKQorCQkJbGlzdF9hZGRfdGFpbChsc3QsICZsYXJnZSk7CiAJCWVsc2UgaWYgKHNub2QtPmxlbiA+IFNNQUxMX05PREVfV00pCi0JCQlsaXN0X2FkZChsc3QsICZtZWRpdW0pOworCQkJbGlzdF9hZGRfdGFpbChsc3QsICZtZWRpdW0pOwogCQllbHNlCi0JCQlsaXN0X2FkZChsc3QsICZzbWFsbCk7CisJCQlsaXN0X2FkZF90YWlsKGxzdCwgJnNtYWxsKTsKIAogCQkvKiBBbmQgZmluZCB0aGUgc21hbGxlc3Qgbm9kZSAqLwogCQlpZiAoc25vZC0+bGVuIDwgbWluKQpAQCAtMTY0LDYgKzIyNSw3IEBACiAJICogSm9pbiB0aGUgdHJlZSBsaXN0cyBzbyB0aGF0IHdlJ2QgaGF2ZSBvbmUgcm91Z2hseSBzb3J0ZWQgbGlzdAogCSAqICgnbGFyZ2UnIHdpbGwgYmUgdGhlIGhlYWQgb2YgdGhlIGpvaW5lZCBsaXN0KS4KIAkgKi8KKwlsaXN0X3NwbGljZSgmZGF0YSwgJmxhcmdlKTsKIAlsaXN0X3NwbGljZSgmbWVkaXVtLCBsYXJnZS5wcmV2KTsKIAlsaXN0X3NwbGljZSgmc21hbGwsIGxhcmdlLnByZXYpOwogCkBAIC02NTMsNyArNzE1LDcgQEAKIAkgKi8KIAl3aGlsZSAoMSkgewogCQlscCA9IHViaWZzX2Zhc3RfZmluZF9mcmVlYWJsZShjKTsKLQkJaWYgKHVubGlrZWx5KElTX0VSUihscCkpKSB7CisJCWlmIChJU19FUlIobHApKSB7CiAJCQllcnIgPSBQVFJfRVJSKGxwKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC02NjUsNyArNzI3LDcgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCQlscCA9IHViaWZzX2NoYW5nZV9scChjLCBscCwgYy0+bGViX3NpemUsIDAsIGxwLT5mbGFncywgMCk7Ci0JCWlmICh1bmxpa2VseShJU19FUlIobHApKSkgeworCQlpZiAoSVNfRVJSKGxwKSkgewogCQkJZXJyID0gUFRSX0VSUihscCk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtNjgwLDcgKzc0Miw3IEBACiAJLyogUmVjb3JkIGluZGV4IGZyZWVhYmxlIExFQnMgZm9yIHVubWFwcGluZyBhZnRlciBjb21taXQgKi8KIAl3aGlsZSAoMSkgewogCQlscCA9IHViaWZzX2Zhc3RfZmluZF9mcmRpX2lkeChjKTsKLQkJaWYgKHVubGlrZWx5KElTX0VSUihscCkpKSB7CisJCWlmIChJU19FUlIobHApKSB7CiAJCQllcnIgPSBQVFJfRVJSKGxwKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC02OTYsNyArNzU4LDcgQEAKIAkJLyogRG9uJ3QgcmVsZWFzZSB0aGUgTEVCIHVudGlsIGFmdGVyIHRoZSBuZXh0IGNvbW1pdCAqLwogCQlmbGFncyA9IChscC0+ZmxhZ3MgfCBMUFJPUFNfVEFLRU4pIF4gTFBST1BTX0lOREVYOwogCQlscCA9IHViaWZzX2NoYW5nZV9scChjLCBscCwgYy0+bGViX3NpemUsIDAsIGZsYWdzLCAxKTsKLQkJaWYgKHVubGlrZWx5KElTX0VSUihscCkpKSB7CisJCWlmIChJU19FUlIobHApKSB7CiAJCQllcnIgPSBQVFJfRVJSKGxwKTsKIAkJCWtmcmVlKGlkeF9nYyk7CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2lvLmMgYi9mcy91Ymlmcy9pby5jCmluZGV4IDA1NDM2M2YuLjAxNjgyNzEgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2lvLmMKKysrIGIvZnMvdWJpZnMvaW8uYwpAQCAtNjIsNiArNjIsNyBAQAogewogCWlmICghYy0+cm9fbWVkaWEpIHsKIAkJYy0+cm9fbWVkaWEgPSAxOworCQljLT5ub19jaGtfZGF0YV9jcmMgPSAwOwogCQl1Ymlmc193YXJuKCJzd2l0Y2hlZCB0byByZWFkLW9ubHkgbW9kZSwgZXJyb3IgJWQiLCBlcnIpOwogCQlkYmdfZHVtcF9zdGFjaygpOwogCX0KQEAgLTc0LDYgKzc1LDcgQEAKICAqIEBsbnVtOiBsb2dpY2FsIGVyYXNlYmxvY2sgbnVtYmVyCiAgKiBAb2Zmczogb2Zmc2V0IHdpdGhpbiB0aGUgbG9naWNhbCBlcmFzZWJsb2NrCiAgKiBAcXVpZXQ6IHByaW50IG5vIG1lc3NhZ2VzCisgKiBAY2hrX2NyYzogaW5kaWNhdGVzIHdoZXRoZXIgdG8gYWx3YXlzIGNoZWNrIHRoZSBDUkMKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBub2RlIG1hZ2ljIG51bWJlciBhbmQgQ1JDIGNoZWNrc3VtLiBUaGlzIGZ1bmN0aW9uIGFsc28KICAqIHZhbGlkYXRlcyBub2RlIGxlbmd0aCB0byBwcmV2ZW50IFVCSUZTIGZyb20gYmVjb21pbmcgY3Jhenkgd2hlbiBhbiBhdHRhY2tlcgpAQCAtODUsNyArODcsNyBAQAogICogb3IgbWFnaWMuCiAgKi8KIGludCB1Ymlmc19jaGVja19ub2RlKGNvbnN0IHN0cnVjdCB1Ymlmc19pbmZvICpjLCBjb25zdCB2b2lkICpidWYsIGludCBsbnVtLAotCQkgICAgIGludCBvZmZzLCBpbnQgcXVpZXQpCisJCSAgICAgaW50IG9mZnMsIGludCBxdWlldCwgaW50IGNoa19jcmMpCiB7CiAJaW50IGVyciA9IC1FSU5WQUwsIHR5cGUsIG5vZGVfbGVuOwogCXVpbnQzMl90IGNyYywgbm9kZV9jcmMsIG1hZ2ljOwpAQCAtMTIxLDYgKzEyMywxMCBAQAogCQkgICBub2RlX2xlbiA+IGMtPnJhbmdlc1t0eXBlXS5tYXhfbGVuKQogCQlnb3RvIG91dF9sZW47CiAKKwlpZiAoIWNoa19jcmMgJiYgdHlwZSA9PSBVQklGU19EQVRBX05PREUgJiYgIWMtPmFsd2F5c19jaGtfY3JjKQorCQlpZiAoYy0+bm9fY2hrX2RhdGFfY3JjKQorCQkJcmV0dXJuIDA7CisKIAljcmMgPSBjcmMzMihVQklGU19DUkMzMl9JTklULCBidWYgKyA4LCBub2RlX2xlbiAtIDgpOwogCW5vZGVfY3JjID0gbGUzMl90b19jcHUoY2gtPmNyYyk7CiAJaWYgKGNyYyAhPSBub2RlX2NyYykgewpAQCAtNzIyLDcgKzcyOCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IHViaWZzX2NoZWNrX25vZGUoYywgYnVmLCBsbnVtLCBvZmZzLCAwKTsKKwllcnIgPSB1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgMCwgMCk7CiAJaWYgKGVycikgewogCQl1Ymlmc19lcnIoImV4cGVjdGVkIG5vZGUgdHlwZSAlZCIsIHR5cGUpOwogCQlyZXR1cm4gZXJyOwpAQCAtNzgxLDcgKzc4Nyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IHViaWZzX2NoZWNrX25vZGUoYywgYnVmLCBsbnVtLCBvZmZzLCAwKTsKKwllcnIgPSB1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgMCwgMCk7CiAJaWYgKGVycikgewogCQl1Ymlmc19lcnIoImV4cGVjdGVkIG5vZGUgdHlwZSAlZCIsIHR5cGUpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMva2V5LmggYi9mcy91Ymlmcy9rZXkuaAppbmRleCA4Zjc0NzYwLi45ZWU2NTA4IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9rZXkuaAorKysgYi9mcy91Ymlmcy9rZXkuaApAQCAtNDg0LDcgKzQ4NCw3IEBACiAgKiBAa2V5MjogdGhlIHNlY29uZCBrZXkgdG8gY29tcGFyZQogICoKICAqIFRoaXMgZnVuY3Rpb24gY29tcGFyZXMgMiBrZXlzIGFuZCByZXR1cm5zICUtMSBpZiBAa2V5MSBpcyBsZXNzIHRoYW4KLSAqIEBrZXkyLCAwIGlmIHRoZSBrZXlzIGFyZSBlcXVpdmFsZW50IGFuZCAlMSBpZiBAa2V5MSBpcyBncmVhdGVyIHRoYW4gQGtleTIuCisgKiBAa2V5MiwgJTAgaWYgdGhlIGtleXMgYXJlIGVxdWl2YWxlbnQgYW5kICUxIGlmIEBrZXkxIGlzIGdyZWF0ZXIgdGhhbiBAa2V5Mi4KICAqLwogc3RhdGljIGlubGluZSBpbnQga2V5c19jbXAoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsCiAJCQkgICBjb25zdCB1bmlvbiB1Ymlmc19rZXkgKmtleTEsCkBAIC01MDMsNiArNTAzLDI2IEBACiB9CiAKIC8qKgorICoga2V5c19lcSAtIGRldGVybWluZSBpZiBrZXlzIGFyZSBlcXVpdmFsZW50LgorICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICogQGtleTE6IHRoZSBmaXJzdCBrZXkgdG8gY29tcGFyZQorICogQGtleTI6IHRoZSBzZWNvbmQga2V5IHRvIGNvbXBhcmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbXBhcmVzIDIga2V5cyBhbmQgcmV0dXJucyAlMSBpZiBAa2V5MSBpcyBlcXVhbCB0byBAa2V5MiBhbmQKKyAqICUwIGlmIG5vdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQga2V5c19lcShjb25zdCBzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKKwkJCSAgY29uc3QgdW5pb24gdWJpZnNfa2V5ICprZXkxLAorCQkJICBjb25zdCB1bmlvbiB1Ymlmc19rZXkgKmtleTIpCit7CisJaWYgKGtleTEtPnUzMlswXSAhPSBrZXkyLT51MzJbMF0pCisJCXJldHVybiAwOworCWlmIChrZXkxLT51MzJbMV0gIT0ga2V5Mi0+dTMyWzFdKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoqCiAgKiBpc19oYXNoX2tleSAtIGlzIGEga2V5IHZ1bG5lcmFibGUgdG8gaGFzaCBjb2xsaXNpb25zLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQGtleToga2V5CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9scHJvcHMuYyBiL2ZzL3ViaWZzL2xwcm9wcy5jCmluZGV4IDJiYTkzZGEuLmYyNzE3NmUgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2xwcm9wcy5jCisrKyBiL2ZzL3ViaWZzL2xwcm9wcy5jCkBAIC0xMjUsNiArMTI1LDcgQEAKIAkJCX0KIAkJfQogCX0KKwogCS8qIE5vdCBncmVhdGVyIHRoYW4gcGFyZW50LCBzbyBjb21wYXJlIHRvIGNoaWxkcmVuICovCiAJd2hpbGUgKDEpIHsKIAkJLyogQ29tcGFyZSB0byBsZWZ0IGNoaWxkICovCkBAIC00NjAsMTggKzQ2MSw2IEBACiB9CiAKIC8qKgotICogdWJpZnNfZ2V0X2xwcm9wcyAtIGdldCByZWZlcmVuY2UgdG8gTEVCIHByb3BlcnRpZXMuCi0gKiBAYzogdGhlIFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAotICoKLSAqIFRoaXMgZnVuY3Rpb24gbG9ja3MgbHByb3BzLiBMcHJvcHMgaGF2ZSB0byBiZSB1bmxvY2tlZCBieQotICogJ3ViaWZzX3JlbGVhc2VfbHByb3BzKCknLgotICovCi12b2lkIHViaWZzX2dldF9scHJvcHMoc3RydWN0IHViaWZzX2luZm8gKmMpCi17Ci0JbXV0ZXhfbG9jaygmYy0+bHBfbXV0ZXgpOwotfQotCi0vKioKICAqIGNhbGNfZGFyayAtIGNhbGN1bGF0ZSBMRUIgZGFyayBzcGFjZSBzaXplLgogICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKICAqIEBzcGM6IGFtb3VudCBvZiBmcmVlIGFuZCBkaXJ0eSBzcGFjZSBpbiB0aGUgTEVCCkBAIC01NzYsNyArNTY1LDYgQEAKIAl1Ymlmc19hc3NlcnQoIShscHJvcHMtPmZyZWUgJiA3KSAmJiAhKGxwcm9wcy0+ZGlydHkgJiA3KSk7CiAKIAlzcGluX2xvY2soJmMtPnNwYWNlX2xvY2spOwotCiAJaWYgKChscHJvcHMtPmZsYWdzICYgTFBST1BTX1RBS0VOKSAmJiBscHJvcHMtPmZyZWUgPT0gYy0+bGViX3NpemUpCiAJCWMtPmxzdC50YWtlbl9lbXB0eV9sZWJzIC09IDE7CiAKQEAgLTYzNywzMSArNjI1LDEyIEBACiAJCWMtPmxzdC50YWtlbl9lbXB0eV9sZWJzICs9IDE7CiAKIAljaGFuZ2VfY2F0ZWdvcnkoYywgbHByb3BzKTsKLQogCWMtPmlkeF9nY19jbnQgKz0gaWR4X2djX2NudDsKLQogCXNwaW5fdW5sb2NrKCZjLT5zcGFjZV9sb2NrKTsKLQogCXJldHVybiBscHJvcHM7CiB9CiAKIC8qKgotICogdWJpZnNfcmVsZWFzZV9scHJvcHMgLSByZWxlYXNlIGxwcm9wcyBsb2NrLgotICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgYWZ0ZXIgZWFjaCAndWJpZnNfZ2V0X2xwcm9wcygpJyBjYWxsIHRvCi0gKiB1bmxvY2sgbHByb3BzLgotICovCi12b2lkIHViaWZzX3JlbGVhc2VfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKQotewotCXViaWZzX2Fzc2VydChtdXRleF9pc19sb2NrZWQoJmMtPmxwX211dGV4KSk7Ci0JdWJpZnNfYXNzZXJ0KGMtPmxzdC5lbXB0eV9sZWJzID49IDAgJiYKLQkJICAgICBjLT5sc3QuZW1wdHlfbGVicyA8PSBjLT5tYWluX2xlYnMpOwotCi0JbXV0ZXhfdW5sb2NrKCZjLT5scF9tdXRleCk7Ci19Ci0KLS8qKgogICogdWJpZnNfZ2V0X2xwX3N0YXRzIC0gZ2V0IGxwcm9wcyBzdGF0aXN0aWNzLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQHN0OiByZXR1cm4gc3RhdGlzdGljcwpAQCAtMTI2Miw3ICsxMjMxLDYgQEAKIAl9CiAKIAl1Ymlmc19zY2FuX2Rlc3Ryb3koc2xlYik7Ci0KIAlyZXR1cm4gTFBUX1NDQU5fQ09OVElOVUU7CiAKIG91dF9wcmludDoKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2xwdC5jIGIvZnMvdWJpZnMvbHB0LmMKaW5kZXggOWZmMjQ2My4uZGI4YmQwZSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbHB0LmMKKysrIGIvZnMvdWJpZnMvbHB0LmMKQEAgLTEwOSw3ICsxMDksOCBAQAogCWMtPmxwdF9zeiA9IChsb25nIGxvbmcpYy0+cG5vZGVfY250ICogYy0+cG5vZGVfc3o7CiAJYy0+bHB0X3N6ICs9IChsb25nIGxvbmcpYy0+bm5vZGVfY250ICogYy0+bm5vZGVfc3o7CiAJYy0+bHB0X3N6ICs9IGMtPmx0YWJfc3o7Ci0JYy0+bHB0X3N6ICs9IGMtPmxzYXZlX3N6OworCWlmIChjLT5iaWdfbHB0KQorCQljLT5scHRfc3ogKz0gYy0+bHNhdmVfc3o7CiAKIAkvKiBBZGQgd2FzdGFnZSAqLwogCXN6ID0gYy0+bHB0X3N6OwpAQCAtMjg3LDI1ICsyODgsNTYgQEAKIAljb25zdCBpbnQgayA9IDMyIC0gbnJiaXRzOwogCXVpbnQ4X3QgKnAgPSAqYWRkcjsKIAlpbnQgYiA9ICpwb3M7Ci0JdWludDMyX3QgdmFsOworCXVpbnQzMl90IHVuaW5pdGlhbGl6ZWRfdmFyKHZhbCk7CisJY29uc3QgaW50IGJ5dGVzID0gKG5yYml0cyArIGIgKyA3KSA+PiAzOwogCiAJdWJpZnNfYXNzZXJ0KG5yYml0cyA+IDApOwogCXViaWZzX2Fzc2VydChucmJpdHMgPD0gMzIpOwogCXViaWZzX2Fzc2VydCgqcG9zID49IDApOwogCXViaWZzX2Fzc2VydCgqcG9zIDwgOCk7CiAJaWYgKGIpIHsKLQkJdmFsID0gcFsxXSB8ICgodWludDMyX3QpcFsyXSA8PCA4KSB8ICgodWludDMyX3QpcFszXSA8PCAxNikgfAotCQkgICAgICAoKHVpbnQzMl90KXBbNF0gPDwgMjQpOworCQlzd2l0Y2ggKGJ5dGVzKSB7CisJCWNhc2UgMjoKKwkJCXZhbCA9IHBbMV07CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJdmFsID0gcFsxXSB8ICgodWludDMyX3QpcFsyXSA8PCA4KTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQl2YWwgPSBwWzFdIHwgKCh1aW50MzJfdClwWzJdIDw8IDgpIHwKKwkJCQkgICAgICgodWludDMyX3QpcFszXSA8PCAxNik7CisJCQlicmVhazsKKwkJY2FzZSA1OgorCQkJdmFsID0gcFsxXSB8ICgodWludDMyX3QpcFsyXSA8PCA4KSB8CisJCQkJICAgICAoKHVpbnQzMl90KXBbM10gPDwgMTYpIHwKKwkJCQkgICAgICgodWludDMyX3QpcFs0XSA8PCAyNCk7CisJCX0KIAkJdmFsIDw8PSAoOCAtIGIpOwogCQl2YWwgfD0gKnAgPj4gYjsKIAkJbnJiaXRzICs9IGI7Ci0JfSBlbHNlCi0JCXZhbCA9IHBbMF0gfCAoKHVpbnQzMl90KXBbMV0gPDwgOCkgfCAoKHVpbnQzMl90KXBbMl0gPDwgMTYpIHwKLQkJICAgICAgKCh1aW50MzJfdClwWzNdIDw8IDI0KTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGJ5dGVzKSB7CisJCWNhc2UgMToKKwkJCXZhbCA9IHBbMF07CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdmFsID0gcFswXSB8ICgodWludDMyX3QpcFsxXSA8PCA4KTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQl2YWwgPSBwWzBdIHwgKCh1aW50MzJfdClwWzFdIDw8IDgpIHwKKwkJCQkgICAgICgodWludDMyX3QpcFsyXSA8PCAxNik7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJdmFsID0gcFswXSB8ICgodWludDMyX3QpcFsxXSA8PCA4KSB8CisJCQkJICAgICAoKHVpbnQzMl90KXBbMl0gPDwgMTYpIHwKKwkJCQkgICAgICgodWludDMyX3QpcFszXSA8PCAyNCk7CisJCQlicmVhazsKKwkJfQorCX0KIAl2YWwgPDw9IGs7CiAJdmFsID4+PSBrOwogCWIgPSBucmJpdHMgJiA3OwotCXAgKz0gbnJiaXRzIC8gODsKKwlwICs9IG5yYml0cyA+PiAzOwogCSphZGRyID0gcDsKIAkqcG9zID0gYjsKIAl1Ymlmc19hc3NlcnQoKHZhbCA+PiBucmJpdHMpID09IDAgfHwgbnJiaXRzIC0gYiA9PSAzMik7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9scHRfY29tbWl0LmMgYi9mcy91Ymlmcy9scHRfY29tbWl0LmMKaW5kZXggNWYwYjgzZS4uZWVkNWEwMCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbHB0X2NvbW1pdC5jCisrKyBiL2ZzL3ViaWZzL2xwdF9jb21taXQuYwpAQCAtMTc3LDggKzE3Nyw2IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQlkYmdfZXJyKCJsYXN0IExFQiAlZCIsICpsbnVtKTsKLQlkdW1wX3N0YWNrKCk7CiAJcmV0dXJuIC1FTk9TUEM7CiB9CiAKQEAgLTE5Myw2ICsxOTEsOSBAQAogCWludCBsbnVtLCBvZmZzLCBsZW4sIGFsZW4sIGRvbmVfbHNhdmUsIGRvbmVfbHRhYiwgZXJyOwogCXN0cnVjdCB1Ymlmc19jbm9kZSAqY25vZGU7CiAKKwllcnIgPSBkYmdfY2hrX2xwdF9zeihjLCAwLCAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCWNub2RlID0gYy0+bHB0X2NuZXh0OwogCWlmICghY25vZGUpCiAJCXJldHVybiAwOwpAQCAtMjA2LDYgKzIwNyw3IEBACiAJCWMtPmxzYXZlX2xudW0gPSBsbnVtOwogCQljLT5sc2F2ZV9vZmZzID0gb2ZmczsKIAkJb2ZmcyArPSBjLT5sc2F2ZV9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHNhdmVfc3opOwogCX0KIAogCWlmIChvZmZzICsgYy0+bHRhYl9zeiA8PSBjLT5sZWJfc2l6ZSkgewpAQCAtMjEzLDYgKzIxNSw3IEBACiAJCWMtPmx0YWJfbG51bSA9IGxudW07CiAJCWMtPmx0YWJfb2ZmcyA9IG9mZnM7CiAJCW9mZnMgKz0gYy0+bHRhYl9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHRhYl9zeik7CiAJfQogCiAJZG8gewpAQCAtMjI2LDkgKzIyOSwxMCBAQAogCQl3aGlsZSAob2ZmcyArIGxlbiA+IGMtPmxlYl9zaXplKSB7CiAJCQlhbGVuID0gQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpOwogCQkJdXBkX2x0YWIoYywgbG51bSwgYy0+bGViX3NpemUgLSBhbGVuLCBhbGVuIC0gb2Zmcyk7CisJCQlkYmdfY2hrX2xwdF9zeihjLCAyLCBhbGVuIC0gb2Zmcyk7CiAJCQllcnIgPSBhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtMjM4LDYgKzI0Miw3IEBACiAJCQkJYy0+bHNhdmVfbG51bSA9IGxudW07CiAJCQkJYy0+bHNhdmVfb2ZmcyA9IG9mZnM7CiAJCQkJb2ZmcyArPSBjLT5sc2F2ZV9zejsKKwkJCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sc2F2ZV9zeik7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoIWRvbmVfbHRhYikgewpAQCAtMjQ1LDYgKzI1MCw3IEBACiAJCQkJYy0+bHRhYl9sbnVtID0gbG51bTsKIAkJCQljLT5sdGFiX29mZnMgPSBvZmZzOwogCQkJCW9mZnMgKz0gYy0+bHRhYl9zejsKKwkJCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sdGFiX3N6KTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMjU3LDYgKzI2Myw3IEBACiAJCQljLT5scHRfb2ZmcyA9IG9mZnM7CiAJCX0KIAkJb2ZmcyArPSBsZW47CisJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGxlbik7CiAJCWNub2RlID0gY25vZGUtPmNuZXh0OwogCX0gd2hpbGUgKGNub2RlICYmIGNub2RlICE9IGMtPmxwdF9jbmV4dCk7CiAKQEAgLTI2NSw5ICsyNzIsMTAgQEAKIAkJaWYgKG9mZnMgKyBjLT5sc2F2ZV9zeiA+IGMtPmxlYl9zaXplKSB7CiAJCQlhbGVuID0gQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpOwogCQkJdXBkX2x0YWIoYywgbG51bSwgYy0+bGViX3NpemUgLSBhbGVuLCBhbGVuIC0gb2Zmcyk7CisJCQlkYmdfY2hrX2xwdF9zeihjLCAyLCBhbGVuIC0gb2Zmcyk7CiAJCQllcnIgPSBhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtMjc2LDYgKzI4NCw3IEBACiAJCWMtPmxzYXZlX2xudW0gPSBsbnVtOwogCQljLT5sc2F2ZV9vZmZzID0gb2ZmczsKIAkJb2ZmcyArPSBjLT5sc2F2ZV9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHNhdmVfc3opOwogCX0KIAogCS8qIE1ha2Ugc3VyZSB0byBwbGFjZSBMUFQncyBvd24gbHByb3BzIHRhYmxlICovCkBAIC0yODMsOSArMjkyLDEwIEBACiAJCWlmIChvZmZzICsgYy0+bHRhYl9zeiA+IGMtPmxlYl9zaXplKSB7CiAJCQlhbGVuID0gQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpOwogCQkJdXBkX2x0YWIoYywgbG51bSwgYy0+bGViX3NpemUgLSBhbGVuLCBhbGVuIC0gb2Zmcyk7CisJCQlkYmdfY2hrX2xwdF9zeihjLCAyLCBhbGVuIC0gb2Zmcyk7CiAJCQllcnIgPSBhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtMjk0LDExICszMDQsMjMgQEAKIAkJYy0+bHRhYl9sbnVtID0gbG51bTsKIAkJYy0+bHRhYl9vZmZzID0gb2ZmczsKIAkJb2ZmcyArPSBjLT5sdGFiX3N6OworCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sdGFiX3N6KTsKIAl9CiAKIAlhbGVuID0gQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpOwogCXVwZF9sdGFiKGMsIGxudW0sIGMtPmxlYl9zaXplIC0gYWxlbiwgYWxlbiAtIG9mZnMpOworCWRiZ19jaGtfbHB0X3N6KGMsIDQsIGFsZW4gLSBvZmZzKTsKKwllcnIgPSBkYmdfY2hrX2xwdF9zeihjLCAzLCBhbGVuKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCXJldHVybiAwOworCitub19zcGFjZToKKwl1Ymlmc19lcnIoIkxQVCBvdXQgb2Ygc3BhY2UiKTsKKwlkYmdfZXJyKCJMUFQgb3V0IG9mIHNwYWNlIGF0IExFQiAlZDolZCBuZWVkaW5nICVkLCBkb25lX2x0YWIgJWQsICIKKwkJImRvbmVfbHNhdmUgJWQiLCBsbnVtLCBvZmZzLCBsZW4sIGRvbmVfbHRhYiwgZG9uZV9sc2F2ZSk7CisJZGJnX2R1bXBfbHB0X2luZm8oYyk7CisJcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC0zMzMsOCArMzU1LDYgQEAKIAkJCSpsbnVtID0gaSArIGMtPmxwdF9maXJzdDsKIAkJCXJldHVybiAwOwogCQl9Ci0JZGJnX2VycigibGFzdCBMRUIgJWQiLCAqbG51bSk7Ci0JZHVtcF9zdGFjaygpOwogCXJldHVybiAtRU5PU1BDOwogfQogCkBAIC0zNjksMTIgKzM4OSwxNCBAQAogCQlkb25lX2xzYXZlID0gMTsKIAkJdWJpZnNfcGFja19sc2F2ZShjLCBidWYgKyBvZmZzLCBjLT5sc2F2ZSk7CiAJCW9mZnMgKz0gYy0+bHNhdmVfc3o7CisJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGMtPmxzYXZlX3N6KTsKIAl9CiAKIAlpZiAob2ZmcyArIGMtPmx0YWJfc3ogPD0gYy0+bGViX3NpemUpIHsKIAkJZG9uZV9sdGFiID0gMTsKIAkJdWJpZnNfcGFja19sdGFiKGMsIGJ1ZiArIG9mZnMsIGMtPmx0YWJfY210KTsKIAkJb2ZmcyArPSBjLT5sdGFiX3N6OworCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBjLT5sdGFiX3N6KTsKIAl9CiAKIAkvKiBMb29wIGZvciBlYWNoIGNub2RlICovCkBAIC0zOTIsMTAgKzQxNCwxMiBAQAogCQkJCQkJICAgICAgIGFsZW4sIFVCSV9TSE9SVFRFUk0pOwogCQkJCWlmIChlcnIpCiAJCQkJCXJldHVybiBlcnI7CisJCQkJZGJnX2Noa19scHRfc3ooYywgNCwgYWxlbiAtIHdsZW4pOwogCQkJfQorCQkJZGJnX2Noa19scHRfc3ooYywgMiwgMCk7CiAJCQllcnIgPSByZWFsbG9jX2xwdF9sZWIoYywgJmxudW0pOwogCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOworCQkJCWdvdG8gbm9fc3BhY2U7CiAJCQlvZmZzID0gMDsKIAkJCWZyb20gPSAwOwogCQkJdWJpZnNfYXNzZXJ0KGxudW0gPj0gYy0+bHB0X2ZpcnN0ICYmCkBAIC00MDgsMTIgKzQzMiwxNCBAQAogCQkJCWRvbmVfbHNhdmUgPSAxOwogCQkJCXViaWZzX3BhY2tfbHNhdmUoYywgYnVmICsgb2ZmcywgYy0+bHNhdmUpOwogCQkJCW9mZnMgKz0gYy0+bHNhdmVfc3o7CisJCQkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHNhdmVfc3opOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFkb25lX2x0YWIpIHsKIAkJCQlkb25lX2x0YWIgPSAxOwogCQkJCXViaWZzX3BhY2tfbHRhYihjLCBidWYgKyBvZmZzLCBjLT5sdGFiX2NtdCk7CiAJCQkJb2ZmcyArPSBjLT5sdGFiX3N6OworCQkJCWRiZ19jaGtfbHB0X3N6KGMsIDEsIGMtPmx0YWJfc3opOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJYnJlYWs7CkBAIC00MzUsNiArNDYxLDcgQEAKIAkJY2xlYXJfYml0KENPV19aTk9ERSwgJmNub2RlLT5mbGFncyk7CiAJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAJCW9mZnMgKz0gbGVuOworCQlkYmdfY2hrX2xwdF9zeihjLCAxLCBsZW4pOwogCQljbm9kZSA9IGNub2RlLT5jbmV4dDsKIAl9IHdoaWxlIChjbm9kZSAmJiBjbm9kZSAhPSBjLT5scHRfY25leHQpOwogCkBAIC00NDgsOSArNDc1LDEwIEBACiAJCQkJCSAgICAgIFVCSV9TSE9SVFRFUk0pOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOworCQkJZGJnX2Noa19scHRfc3ooYywgMiwgYWxlbiAtIHdsZW4pOwogCQkJZXJyID0gcmVhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtNDYxLDYgKzQ4OSw3IEBACiAJCWRvbmVfbHNhdmUgPSAxOwogCQl1Ymlmc19wYWNrX2xzYXZlKGMsIGJ1ZiArIG9mZnMsIGMtPmxzYXZlKTsKIAkJb2ZmcyArPSBjLT5sc2F2ZV9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHNhdmVfc3opOwogCX0KIAogCS8qIE1ha2Ugc3VyZSB0byBwbGFjZSBMUFQncyBvd24gbHByb3BzIHRhYmxlICovCkBAIC00NzMsOSArNTAyLDEwIEBACiAJCQkJCSAgICAgIFVCSV9TSE9SVFRFUk0pOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOworCQkJZGJnX2Noa19scHRfc3ooYywgMiwgYWxlbiAtIHdsZW4pOwogCQkJZXJyID0gcmVhbGxvY19scHRfbGViKGMsICZsbnVtKTsKIAkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKKwkJCQlnb3RvIG5vX3NwYWNlOwogCQkJb2ZmcyA9IDA7CiAJCQl1Ymlmc19hc3NlcnQobG51bSA+PSBjLT5scHRfZmlyc3QgJiYKIAkJCQkgICAgIGxudW0gPD0gYy0+bHB0X2xhc3QpOwpAQCAtNDg2LDYgKzUxNiw3IEBACiAJCWRvbmVfbHRhYiA9IDE7CiAJCXViaWZzX3BhY2tfbHRhYihjLCBidWYgKyBvZmZzLCBjLT5sdGFiX2NtdCk7CiAJCW9mZnMgKz0gYy0+bHRhYl9zejsKKwkJZGJnX2Noa19scHRfc3ooYywgMSwgYy0+bHRhYl9zeik7CiAJfQogCiAJLyogV3JpdGUgcmVtYWluaW5nIGRhdGEgaW4gYnVmZmVyICovCkBAIC00OTUsNiArNTI2LDEyIEBACiAJZXJyID0gdWJpZnNfbGViX3dyaXRlKGMsIGxudW0sIGJ1ZiArIGZyb20sIGZyb20sIGFsZW4sIFVCSV9TSE9SVFRFUk0pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CisKKwlkYmdfY2hrX2xwdF9zeihjLCA0LCBhbGVuIC0gd2xlbik7CisJZXJyID0gZGJnX2Noa19scHRfc3ooYywgMywgQUxJR04ob2ZmcywgYy0+bWluX2lvX3NpemUpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJYy0+bmhlYWRfbG51bSA9IGxudW07CiAJYy0+bmhlYWRfb2ZmcyA9IEFMSUdOKG9mZnMsIGMtPm1pbl9pb19zaXplKTsKIApAQCAtNTAzLDcgKzU0MCwxNSBAQAogCWRiZ19scCgiTFBUIGx0YWIgaXMgYXQgJWQ6JWQiLCBjLT5sdGFiX2xudW0sIGMtPmx0YWJfb2Zmcyk7CiAJaWYgKGMtPmJpZ19scHQpCiAJCWRiZ19scCgiTFBUIGxzYXZlIGlzIGF0ICVkOiVkIiwgYy0+bHNhdmVfbG51bSwgYy0+bHNhdmVfb2Zmcyk7CisKIAlyZXR1cm4gMDsKKworbm9fc3BhY2U6CisJdWJpZnNfZXJyKCJMUFQgb3V0IG9mIHNwYWNlIG1pc21hdGNoIik7CisJZGJnX2VycigiTFBUIG91dCBvZiBzcGFjZSBtaXNtYXRjaCBhdCBMRUIgJWQ6JWQgbmVlZGluZyAlZCwgZG9uZV9sdGFiICIKKwkgICAgICAgICIlZCwgZG9uZV9sc2F2ZSAlZCIsIGxudW0sIG9mZnMsIGxlbiwgZG9uZV9sdGFiLCBkb25lX2xzYXZlKTsKKwlkYmdfZHVtcF9scHRfaW5mbyhjKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKioKQEAgLTEwNDQsNiArMTA4OSw4IEBACiAJaW50IHBvcyA9IDAsIG5vZGVfdHlwZSwgbm9kZV9sZW47CiAJdWludDE2X3QgY3JjLCBjYWxjX2NyYzsKIAorCWlmIChsZW4gPCBVQklGU19MUFRfQ1JDX0JZVEVTICsgKFVCSUZTX0xQVF9UWVBFX0JJVFMgKyA3KSAvIDgpCisJCXJldHVybiAwOwogCW5vZGVfdHlwZSA9IHViaWZzX3VucGFja19iaXRzKCZhZGRyLCAmcG9zLCBVQklGU19MUFRfVFlQRV9CSVRTKTsKIAlpZiAobm9kZV90eXBlID09IFVCSUZTX0xQVF9OT1RfQV9OT0RFKQogCQlyZXR1cm4gMDsKQEAgLTExNTYsNiArMTIwMyw5IEBACiAJZGJnX2xwKCIiKTsKIAogCW11dGV4X2xvY2soJmMtPmxwX211dGV4KTsKKwllcnIgPSBkYmdfY2hrX2xwdF9mcmVlX3NwYyhjKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKIAllcnIgPSBkYmdfY2hlY2tfbHRhYihjKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKQEAgLTE2NDUsNCArMTY5NSwxMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBkYmdfY2hrX2xwdF9mcmVlX3NwYyAtIGNoZWNrIExQVCBmcmVlIHNwYWNlIGlzIGVub3VnaCB0byB3cml0ZSBlbnRpcmUgTFBULgorICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgJTAgb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBkYmdfY2hrX2xwdF9mcmVlX3NwYyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKK3sKKwlsb25nIGxvbmcgZnJlZSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYy0+bHB0X2xlYnM7IGkrKykgeworCQlpZiAoYy0+bHRhYltpXS50Z2MgfHwgYy0+bHRhYltpXS5jbXQpCisJCQljb250aW51ZTsKKwkJaWYgKGkgKyBjLT5scHRfZmlyc3QgPT0gYy0+bmhlYWRfbG51bSkKKwkJCWZyZWUgKz0gYy0+bGViX3NpemUgLSBjLT5uaGVhZF9vZmZzOworCQllbHNlIGlmIChjLT5sdGFiW2ldLmZyZWUgPT0gYy0+bGViX3NpemUpCisJCQlmcmVlICs9IGMtPmxlYl9zaXplOworCX0KKwlpZiAoZnJlZSA8IGMtPmxwdF9zeikgeworCQlkYmdfZXJyKCJMUFQgc3BhY2UgZXJyb3I6IGZyZWUgJWxsZCBscHRfc3ogJWxsZCIsCisJCQlmcmVlLCBjLT5scHRfc3opOworCQlkYmdfZHVtcF9scHRfaW5mbyhjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGRiZ19jaGtfbHB0X3N6IC0gY2hlY2sgTFBUIGRvZXMgbm90IHdyaXRlIG1vcmUgdGhhbiBMUFQgc2l6ZS4KKyAqIEBjOiB0aGUgVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAYWN0aW9uOiBhY3Rpb24KKyAqIEBsZW46IGxlbmd0aCB3cml0dGVuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zICUwIG9uIHN1Y2Nlc3MgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZGJnX2Noa19scHRfc3ooc3RydWN0IHViaWZzX2luZm8gKmMsIGludCBhY3Rpb24sIGludCBsZW4pCit7CisJbG9uZyBsb25nIGNoa19scHRfc3osIGxwdF9zejsKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSAwOgorCQljLT5jaGtfbHB0X3N6ID0gMDsKKwkJYy0+Y2hrX2xwdF9zejIgPSAwOworCQljLT5jaGtfbHB0X2xlYnMgPSAwOworCQljLT5jaGtfbHB0X3dhc3RhZ2UgPSAwOworCQlpZiAoYy0+ZGlydHlfcG5fY250ID4gYy0+cG5vZGVfY250KSB7CisJCQlkYmdfZXJyKCJkaXJ0eSBwbm9kZXMgJWQgZXhjZWVkIG1heCAlZCIsCisJCQkJYy0+ZGlydHlfcG5fY250LCBjLT5wbm9kZV9jbnQpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlpZiAoYy0+ZGlydHlfbm5fY250ID4gYy0+bm5vZGVfY250KSB7CisJCQlkYmdfZXJyKCJkaXJ0eSBubm9kZXMgJWQgZXhjZWVkIG1heCAlZCIsCisJCQkJYy0+ZGlydHlfbm5fY250LCBjLT5ubm9kZV9jbnQpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlyZXR1cm4gZXJyOworCWNhc2UgMToKKwkJYy0+Y2hrX2xwdF9zeiArPSBsZW47CisJCXJldHVybiAwOworCWNhc2UgMjoKKwkJYy0+Y2hrX2xwdF9zeiArPSBsZW47CisJCWMtPmNoa19scHRfd2FzdGFnZSArPSBsZW47CisJCWMtPmNoa19scHRfbGVicyArPSAxOworCQlyZXR1cm4gMDsKKwljYXNlIDM6CisJCWNoa19scHRfc3ogPSBjLT5sZWJfc2l6ZTsKKwkJY2hrX2xwdF9zeiAqPSBjLT5jaGtfbHB0X2xlYnM7CisJCWNoa19scHRfc3ogKz0gbGVuIC0gYy0+bmhlYWRfb2ZmczsKKwkJaWYgKGMtPmNoa19scHRfc3ogIT0gY2hrX2xwdF9zeikgeworCQkJZGJnX2VycigiTFBUIHdyb3RlICVsbGQgYnV0IHNwYWNlIHVzZWQgd2FzICVsbGQiLAorCQkJCWMtPmNoa19scHRfc3osIGNoa19scHRfc3opOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlpZiAoYy0+Y2hrX2xwdF9zeiA+IGMtPmxwdF9zeikgeworCQkJZGJnX2VycigiTFBUIHdyb3RlICVsbGQgYnV0IGxwdF9zeiBpcyAlbGxkIiwKKwkJCQljLT5jaGtfbHB0X3N6LCBjLT5scHRfc3opOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlpZiAoYy0+Y2hrX2xwdF9zejIgJiYgYy0+Y2hrX2xwdF9zeiAhPSBjLT5jaGtfbHB0X3N6MikgeworCQkJZGJnX2VycigiTFBUIGxheW91dCBzaXplICVsbGQgYnV0IHdyb3RlICVsbGQiLAorCQkJCWMtPmNoa19scHRfc3osIGMtPmNoa19scHRfc3oyKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKwkJaWYgKGMtPmNoa19scHRfc3oyICYmIGMtPm5ld19uaGVhZF9vZmZzICE9IGxlbikgeworCQkJZGJnX2VycigiTFBUIG5ldyBuaGVhZCBvZmZzOiBleHBlY3RlZCAlZCB3YXMgJWQiLAorCQkJCWMtPm5ld19uaGVhZF9vZmZzLCBsZW4pOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlscHRfc3ogPSAobG9uZyBsb25nKWMtPnBub2RlX2NudCAqIGMtPnBub2RlX3N6OworCQlscHRfc3ogKz0gKGxvbmcgbG9uZyljLT5ubm9kZV9jbnQgKiBjLT5ubm9kZV9zejsKKwkJbHB0X3N6ICs9IGMtPmx0YWJfc3o7CisJCWlmIChjLT5iaWdfbHB0KQorCQkJbHB0X3N6ICs9IGMtPmxzYXZlX3N6OworCQlpZiAoYy0+Y2hrX2xwdF9zeiAtIGMtPmNoa19scHRfd2FzdGFnZSA+IGxwdF9zeikgeworCQkJZGJnX2VycigiTFBUIGNoa19scHRfc3ogJWxsZCArIHdhc3RlICVsbGQgZXhjZWVkcyAlbGxkIiwKKwkJCQljLT5jaGtfbHB0X3N6LCBjLT5jaGtfbHB0X3dhc3RhZ2UsIGxwdF9zeik7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisJCWlmIChlcnIpCisJCQlkYmdfZHVtcF9scHRfaW5mbyhjKTsKKwkJYy0+Y2hrX2xwdF9zejIgPSBjLT5jaGtfbHB0X3N6OworCQljLT5jaGtfbHB0X3N6ID0gMDsKKwkJYy0+Y2hrX2xwdF93YXN0YWdlID0gMDsKKwkJYy0+Y2hrX2xwdF9sZWJzID0gMDsKKwkJYy0+bmV3X25oZWFkX29mZnMgPSBsZW47CisJCXJldHVybiBlcnI7CisJY2FzZSA0OgorCQljLT5jaGtfbHB0X3N6ICs9IGxlbjsKKwkJYy0+Y2hrX2xwdF93YXN0YWdlICs9IGxlbjsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCiAjZW5kaWYgLyogQ09ORklHX1VCSUZTX0ZTX0RFQlVHICovCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9taXNjLmggYi9mcy91Ymlmcy9taXNjLmgKaW5kZXggNGMxMmE5Mi4uNGZhODFkOCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbWlzYy5oCisrKyBiL2ZzL3ViaWZzL21pc2MuaApAQCAtMzEwLDQgKzMxMCwzMSBAQAogCXJldHVybiB1Ymlmc190bmNfbG9jYXRlKGMsIGtleSwgbm9kZSwgTlVMTCwgTlVMTCk7CiB9CiAKKy8qKgorICogdWJpZnNfZ2V0X2xwcm9wcyAtIGdldCByZWZlcmVuY2UgdG8gTEVCIHByb3BlcnRpZXMuCisgKiBAYzogdGhlIFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gbG9ja3MgbHByb3BzLiBMcHJvcHMgaGF2ZSB0byBiZSB1bmxvY2tlZCBieQorICogJ3ViaWZzX3JlbGVhc2VfbHByb3BzKCknLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdWJpZnNfZ2V0X2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKK3sKKwltdXRleF9sb2NrKCZjLT5scF9tdXRleCk7Cit9CisKKy8qKgorICogdWJpZnNfcmVsZWFzZV9scHJvcHMgLSByZWxlYXNlIGxwcm9wcyBsb2NrLgorICogQGM6IHRoZSBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgYWZ0ZXIgZWFjaCAndWJpZnNfZ2V0X2xwcm9wcygpJyBjYWxsIHRvCisgKiB1bmxvY2sgbHByb3BzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdWJpZnNfcmVsZWFzZV9scHJvcHMoc3RydWN0IHViaWZzX2luZm8gKmMpCit7CisJdWJpZnNfYXNzZXJ0KG11dGV4X2lzX2xvY2tlZCgmYy0+bHBfbXV0ZXgpKTsKKwl1Ymlmc19hc3NlcnQoYy0+bHN0LmVtcHR5X2xlYnMgPj0gMCAmJgorCQkgICAgIGMtPmxzdC5lbXB0eV9sZWJzIDw9IGMtPm1haW5fbGVicyk7CisJbXV0ZXhfdW5sb2NrKCZjLT5scF9tdXRleCk7Cit9CisKICNlbmRpZiAvKiBfX1VCSUZTX01JU0NfSF9fICovCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zY2FuLmMgYi9mcy91Ymlmcy9zY2FuLmMKaW5kZXggYWNmNWM1Zi4uMGVkODI0NyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvc2Nhbi5jCisrKyBiL2ZzL3ViaWZzL3NjYW4uYwpAQCAtODcsNyArODcsNyBAQAogCiAJZGJnX3NjYW4oInNjYW5uaW5nICVzIiwgZGJnX250eXBlKGNoLT5ub2RlX3R5cGUpKTsKIAotCWlmICh1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgcXVpZXQpKQorCWlmICh1Ymlmc19jaGVja19ub2RlKGMsIGJ1ZiwgbG51bSwgb2ZmcywgcXVpZXQsIDEpKQogCQlyZXR1cm4gU0NBTk5FRF9BX0NPUlJVUFRfTk9ERTsKIAogCWlmIChjaC0+bm9kZV90eXBlID09IFVCSUZTX1BBRF9OT0RFKSB7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zdXBlci5jIGIvZnMvdWJpZnMvc3VwZXIuYwppbmRleCAzZjQ5MDIwLi44NzgwZWZiIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zdXBlci5jCisrKyBiL2ZzL3ViaWZzL3N1cGVyLmMKQEAgLTQwMSw2ICs0MDEsMTYgQEAKIAllbHNlIGlmIChjLT5tb3VudF9vcHRzLnVubW91bnRfbW9kZSA9PSAxKQogCQlzZXFfcHJpbnRmKHMsICIsbm9ybV91bm1vdW50Iik7CiAKKwlpZiAoYy0+bW91bnRfb3B0cy5idWxrX3JlYWQgPT0gMikKKwkJc2VxX3ByaW50ZihzLCAiLGJ1bGtfcmVhZCIpOworCWVsc2UgaWYgKGMtPm1vdW50X29wdHMuYnVsa19yZWFkID09IDEpCisJCXNlcV9wcmludGYocywgIixub19idWxrX3JlYWQiKTsKKworCWlmIChjLT5tb3VudF9vcHRzLmNoa19kYXRhX2NyYyA9PSAyKQorCQlzZXFfcHJpbnRmKHMsICIsY2hrX2RhdGFfY3JjIik7CisJZWxzZSBpZiAoYy0+bW91bnRfb3B0cy5jaGtfZGF0YV9jcmMgPT0gMSkKKwkJc2VxX3ByaW50ZihzLCAiLG5vX2Noa19kYXRhX2NyYyIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQwOCwxMyArNDE4LDI2IEBACiB7CiAJc3RydWN0IHViaWZzX2luZm8gKmMgPSBzYi0+c19mc19pbmZvOwogCWludCBpLCByZXQgPSAwLCBlcnI7CisJbG9uZyBsb25nIGJ1ZF9ieXRlczsKIAotCWlmIChjLT5qaGVhZHMpCisJaWYgKGMtPmpoZWFkcykgewogCQlmb3IgKGkgPSAwOyBpIDwgYy0+amhlYWRfY250OyBpKyspIHsKIAkJCWVyciA9IHViaWZzX3didWZfc3luYygmYy0+amhlYWRzW2ldLndidWYpOwogCQkJaWYgKGVyciAmJiAhcmV0KQogCQkJCXJldCA9IGVycjsKIAkJfQorCisJCS8qIENvbW1pdCB0aGUgam91cm5hbCB1bmxlc3MgaXQgaGFzIHRvbyBsaXR0bGUgZGF0YSAqLworCQlzcGluX2xvY2soJmMtPmJ1ZHNfbG9jayk7CisJCWJ1ZF9ieXRlcyA9IGMtPmJ1ZF9ieXRlczsKKwkJc3Bpbl91bmxvY2soJmMtPmJ1ZHNfbG9jayk7CisJCWlmIChidWRfYnl0ZXMgPiBjLT5sZWJfc2l6ZSkgeworCQkJZXJyID0gdWJpZnNfcnVuX2NvbW1pdChjKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwogCS8qCiAJICogV2Ugb3VnaHQgdG8gY2FsbCBzeW5jIGZvciBjLT51YmkgYnV0IGl0IGRvZXMgbm90IGhhdmUgb25lLiBJZiBpdCBoYWQKIAkgKiBpdCB3b3VsZCBpbiB0dXJuIGNhbGwgbXRkLT5zeW5jLCBob3dldmVyIG10ZCBvcGVyYXRpb25zIGFyZQpAQCAtNTM4LDYgKzU2MSwxOCBAQAogCSAqIGNhbGN1bGF0aW9ucyB3aGVuIHJlcG9ydGluZyBmcmVlIHNwYWNlLgogCSAqLwogCWMtPmxlYl9vdmVyaGVhZCA9IGMtPmxlYl9zaXplICUgVUJJRlNfTUFYX0RBVEFfTk9ERV9TWjsKKwkvKiBCdWZmZXIgc2l6ZSBmb3IgYnVsay1yZWFkcyAqLworCWMtPmJ1bGtfcmVhZF9idWZfc2l6ZSA9IFVCSUZTX01BWF9CVUxLX1JFQUQgKiBVQklGU19NQVhfREFUQV9OT0RFX1NaOworCWlmIChjLT5idWxrX3JlYWRfYnVmX3NpemUgPiBjLT5sZWJfc2l6ZSkKKwkJYy0+YnVsa19yZWFkX2J1Zl9zaXplID0gYy0+bGViX3NpemU7CisJaWYgKGMtPmJ1bGtfcmVhZF9idWZfc2l6ZSA+IDEyOCAqIDEwMjQpIHsKKwkJLyogQ2hlY2sgaWYgd2UgY2FuIGttYWxsb2MgbW9yZSB0aGFuIDEyOEtpQiAqLworCQl2b2lkICp0cnkgPSBrbWFsbG9jKGMtPmJ1bGtfcmVhZF9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwkJa2ZyZWUodHJ5KTsKKwkJaWYgKCF0cnkpCisJCQljLT5idWxrX3JlYWRfYnVmX3NpemUgPSAxMjggKiAxMDI0OworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODQwLDE3ICs4NzUsMjkgQEAKICAqCiAgKiBPcHRfZmFzdF91bm1vdW50OiBkbyBub3QgcnVuIGEgam91cm5hbCBjb21taXQgYmVmb3JlIHVuLW1vdW50aW5nCiAgKiBPcHRfbm9ybV91bm1vdW50OiBydW4gYSBqb3VybmFsIGNvbW1pdCBiZWZvcmUgdW4tbW91bnRpbmcKKyAqIE9wdF9idWxrX3JlYWQ6IGVuYWJsZSBidWxrLXJlYWRzCisgKiBPcHRfbm9fYnVsa19yZWFkOiBkaXNhYmxlIGJ1bGstcmVhZHMKKyAqIE9wdF9jaGtfZGF0YV9jcmM6IGNoZWNrIENSQ3Mgd2hlbiByZWFkaW5nIGRhdGEgbm9kZXMKKyAqIE9wdF9ub19jaGtfZGF0YV9jcmM6IGRvIG5vdCBjaGVjayBDUkNzIHdoZW4gcmVhZGluZyBkYXRhIG5vZGVzCiAgKiBPcHRfZXJyOiBqdXN0IGVuZCBvZiBhcnJheSBtYXJrZXIKICAqLwogZW51bSB7CiAJT3B0X2Zhc3RfdW5tb3VudCwKIAlPcHRfbm9ybV91bm1vdW50LAorCU9wdF9idWxrX3JlYWQsCisJT3B0X25vX2J1bGtfcmVhZCwKKwlPcHRfY2hrX2RhdGFfY3JjLAorCU9wdF9ub19jaGtfZGF0YV9jcmMsCiAJT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2Zhc3RfdW5tb3VudCwgImZhc3RfdW5tb3VudCJ9LAogCXtPcHRfbm9ybV91bm1vdW50LCAibm9ybV91bm1vdW50In0sCisJe09wdF9idWxrX3JlYWQsICJidWxrX3JlYWQifSwKKwl7T3B0X25vX2J1bGtfcmVhZCwgIm5vX2J1bGtfcmVhZCJ9LAorCXtPcHRfY2hrX2RhdGFfY3JjLCAiY2hrX2RhdGFfY3JjIn0sCisJe09wdF9ub19jaGtfZGF0YV9jcmMsICJub19jaGtfZGF0YV9jcmMifSwKIAl7T3B0X2VyciwgTlVMTH0sCiB9OwogCkBAIC04ODgsNiArOTM1LDIyIEBACiAJCQljLT5tb3VudF9vcHRzLnVubW91bnRfbW9kZSA9IDE7CiAJCQljLT5mYXN0X3VubW91bnQgPSAwOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2J1bGtfcmVhZDoKKwkJCWMtPm1vdW50X29wdHMuYnVsa19yZWFkID0gMjsKKwkJCWMtPmJ1bGtfcmVhZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbm9fYnVsa19yZWFkOgorCQkJYy0+bW91bnRfb3B0cy5idWxrX3JlYWQgPSAxOworCQkJYy0+YnVsa19yZWFkID0gMDsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9jaGtfZGF0YV9jcmM6CisJCQljLT5tb3VudF9vcHRzLmNoa19kYXRhX2NyYyA9IDI7CisJCQljLT5ub19jaGtfZGF0YV9jcmMgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vX2Noa19kYXRhX2NyYzoKKwkJCWMtPm1vdW50X29wdHMuY2hrX2RhdGFfY3JjID0gMTsKKwkJCWMtPm5vX2Noa19kYXRhX2NyYyA9IDE7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXViaWZzX2VycigidW5yZWNvZ25pemVkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgogCQkJCSAgIm9yIG1pc3NpbmcgdmFsdWUiLCBwKTsKQEAgLTk5Niw2ICsxMDU5LDggQEAKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCisJYy0+YWx3YXlzX2Noa19jcmMgPSAxOworCiAJZXJyID0gdWJpZnNfcmVhZF9zdXBlcmJsb2NrKGMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0xMDMyLDggKzEwOTcsNiBAQAogCiAJCS8qIENyZWF0ZSBiYWNrZ3JvdW5kIHRocmVhZCAqLwogCQljLT5iZ3QgPSBrdGhyZWFkX2NyZWF0ZSh1Ymlmc19iZ190aHJlYWQsIGMsIGMtPmJndF9uYW1lKTsKLQkJaWYgKCFjLT5iZ3QpCi0JCQljLT5iZ3QgPSBFUlJfUFRSKC1FSU5WQUwpOwogCQlpZiAoSVNfRVJSKGMtPmJndCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoYy0+Ymd0KTsKIAkJCWMtPmJndCA9IE5VTEw7CkBAIC0xMTM5LDI0ICsxMjAyLDI4IEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfaW5mb3M7CiAKKwljLT5hbHdheXNfY2hrX2NyYyA9IDA7CisKIAl1Ymlmc19tc2coIm1vdW50ZWQgVUJJIGRldmljZSAlZCwgdm9sdW1lICVkLCBuYW1lIFwiJXNcIiIsCiAJCSAgYy0+dmkudWJpX251bSwgYy0+dmkudm9sX2lkLCBjLT52aS5uYW1lKTsKIAlpZiAobW91bnRlZF9yZWFkX29ubHkpCiAJCXViaWZzX21zZygibW91bnRlZCByZWFkLW9ubHkiKTsKIAl4ID0gKGxvbmcgbG9uZyljLT5tYWluX2xlYnMgKiBjLT5sZWJfc2l6ZTsKLQl1Ymlmc19tc2coImZpbGUgc3lzdGVtIHNpemU6ICVsbGQgYnl0ZXMgKCVsbGQgS2lCLCAlbGxkIE1pQiwgJWQgTEVCcykiLAotCQkgIHgsIHggPj4gMTAsIHggPj4gMjAsIGMtPm1haW5fbGVicyk7CisJdWJpZnNfbXNnKCJmaWxlIHN5c3RlbSBzaXplOiAgICVsbGQgYnl0ZXMgKCVsbGQgS2lCLCAlbGxkIE1pQiwgJWQgIgorCQkgICJMRUJzKSIsIHgsIHggPj4gMTAsIHggPj4gMjAsIGMtPm1haW5fbGVicyk7CiAJeCA9IChsb25nIGxvbmcpYy0+bG9nX2xlYnMgKiBjLT5sZWJfc2l6ZSArIGMtPm1heF9idWRfYnl0ZXM7Ci0JdWJpZnNfbXNnKCJqb3VybmFsIHNpemU6ICVsbGQgYnl0ZXMgKCVsbGQgS2lCLCAlbGxkIE1pQiwgJWQgTEVCcykiLAotCQkgIHgsIHggPj4gMTAsIHggPj4gMjAsIGMtPmxvZ19sZWJzICsgYy0+bWF4X2J1ZF9jbnQpOwotCXViaWZzX21zZygiZGVmYXVsdCBjb21wcmVzc29yOiAlcyIsIHViaWZzX2NvbXByX25hbWUoYy0+ZGVmYXVsdF9jb21wcikpOwotCXViaWZzX21zZygibWVkaWEgZm9ybWF0ICVkLCBsYXRlc3QgZm9ybWF0ICVkIiwKKwl1Ymlmc19tc2coImpvdXJuYWwgc2l6ZTogICAgICAgJWxsZCBieXRlcyAoJWxsZCBLaUIsICVsbGQgTWlCLCAlZCAiCisJCSAgIkxFQnMpIiwgeCwgeCA+PiAxMCwgeCA+PiAyMCwgYy0+bG9nX2xlYnMgKyBjLT5tYXhfYnVkX2NudCk7CisJdWJpZnNfbXNnKCJtZWRpYSBmb3JtYXQ6ICAgICAgICVkIChsYXRlc3QgaXMgJWQpIiwKIAkJICBjLT5mbXRfdmVyc2lvbiwgVUJJRlNfRk9STUFUX1ZFUlNJT04pOworCXViaWZzX21zZygiZGVmYXVsdCBjb21wcmVzc29yOiAlcyIsIHViaWZzX2NvbXByX25hbWUoYy0+ZGVmYXVsdF9jb21wcikpOworCXViaWZzX21zZygicmVzZXJ2ZWQgZm9yIHJvb3Q6ICAlbGx1IGJ5dGVzICglbGx1IEtpQikiLAorCQljLT5yZXBvcnRfcnBfc2l6ZSwgYy0+cmVwb3J0X3JwX3NpemUgPj4gMTApOwogCiAJZGJnX21zZygiY29tcGlsZWQgb246ICAgICAgICAgIiBfX0RBVEVfXyAiIGF0ICIgX19USU1FX18pOwogCWRiZ19tc2coIm1pbi4gSS9PIHVuaXQgc2l6ZTogICVkIGJ5dGVzIiwgYy0+bWluX2lvX3NpemUpOwogCWRiZ19tc2coIkxFQiBzaXplOiAgICAgICAgICAgICVkIGJ5dGVzICglZCBLaUIpIiwKLQkJYy0+bGViX3NpemUsIGMtPmxlYl9zaXplIC8gMTAyNCk7CisJCWMtPmxlYl9zaXplLCBjLT5sZWJfc2l6ZSA+PiAxMCk7CiAJZGJnX21zZygiZGF0YSBqb3VybmFsIGhlYWRzOiAgJWQiLAogCQljLT5qaGVhZF9jbnQgLSBOT05EQVRBX0pIRUFEU19DTlQpOwogCWRiZ19tc2coIlVVSUQ6ICAgICAgICAgICAgICAgICUwMlglMDJYJTAyWCUwMlgtJTAyWCUwMlgiCkBAIC0xMjgyLDYgKzEzNDksNyBAQAogCiAJbXV0ZXhfbG9jaygmYy0+dW1vdW50X211dGV4KTsKIAljLT5yZW1vdW50aW5nX3J3ID0gMTsKKwljLT5hbHdheXNfY2hrX2NyYyA9IDE7CiAKIAkvKiBDaGVjayBmb3IgZW5vdWdoIGZyZWUgc3BhY2UgKi8KIAlpZiAodWJpZnNfY2FsY19hdmFpbGFibGUoYywgYy0+bWluX2lkeF9sZWJzKSA8PSAwKSB7CkBAIC0xMzQ1LDIwICsxNDEzLDIwIEBACiAKIAkvKiBDcmVhdGUgYmFja2dyb3VuZCB0aHJlYWQgKi8KIAljLT5iZ3QgPSBrdGhyZWFkX2NyZWF0ZSh1Ymlmc19iZ190aHJlYWQsIGMsIGMtPmJndF9uYW1lKTsKLQlpZiAoIWMtPmJndCkKLQkJYy0+Ymd0ID0gRVJSX1BUUigtRUlOVkFMKTsKIAlpZiAoSVNfRVJSKGMtPmJndCkpIHsKIAkJZXJyID0gUFRSX0VSUihjLT5iZ3QpOwogCQljLT5iZ3QgPSBOVUxMOwogCQl1Ymlmc19lcnIoImNhbm5vdCBzcGF3biBcIiVzXCIsIGVycm9yICVkIiwKIAkJCSAgYy0+Ymd0X25hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0OwogCX0KIAl3YWtlX3VwX3Byb2Nlc3MoYy0+Ymd0KTsKIAogCWMtPm9ycGhfYnVmID0gdm1hbGxvYyhjLT5sZWJfc2l6ZSk7Ci0JaWYgKCFjLT5vcnBoX2J1ZikKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFjLT5vcnBoX2J1ZikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBDaGVjayBmb3IgZW5vdWdoIGxvZyBzcGFjZSAqLwogCWxudW0gPSBjLT5saGVhZF9sbnVtICsgMTsKQEAgLTEzODUsNiArMTQ1Myw3IEBACiAJZGJnX2dlbigicmUtbW91bnRlZCByZWFkLXdyaXRlIik7CiAJYy0+dmZzX3NiLT5zX2ZsYWdzICY9IH5NU19SRE9OTFk7CiAJYy0+cmVtb3VudGluZ19ydyA9IDA7CisJYy0+YWx3YXlzX2Noa19jcmMgPSAwOwogCW11dGV4X3VubG9jaygmYy0+dW1vdW50X211dGV4KTsKIAlyZXR1cm4gMDsKIApAQCAtMTQwMCw2ICsxNDY5LDcgQEAKIAljLT5pbGViX2J1ZiA9IE5VTEw7CiAJdWJpZnNfbHB0X2ZyZWUoYywgMSk7CiAJYy0+cmVtb3VudGluZ19ydyA9IDA7CisJYy0+YWx3YXlzX2Noa19jcmMgPSAwOwogCW11dGV4X3VubG9jaygmYy0+dW1vdW50X211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTQwOCwxMiArMTQ3OCw5IEBACiAgKiBjb21taXRfb25fdW5tb3VudCAtIGNvbW1pdCB0aGUgam91cm5hbCB3aGVuIHVuLW1vdW50aW5nLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyB1bi1tb3VudGluZyBhbmQgaXQgY29tbWl0cyB0aGUgam91cm5hbCB1bmxlc3MKLSAqIHRoZSAiZmFzdCB1bm1vdW50IiBtb2RlIGlzIGVuYWJsZWQuIEl0IGFsc28gYXZvaWRzIGNvbW1pdHRpbmcgdGhlIGpvdXJuYWwgaWYKLSAqIGl0IGNvbnRhaW5zIHRvbyBmZXcgZGF0YS4KLSAqCi0gKiBTb21ldGltZXMgcmVjb3ZlcnkgcmVxdWlyZXMgdGhlIGpvdXJuYWwgdG8gYmUgY29tbWl0dGVkIGF0IGxlYXN0IG9uY2UsIGFuZAotICogdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIGFib3V0IHRoaXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdW4tbW91bnRpbmcgYW5kIHJlLW1vdW50aW5nLCBhbmQgaXQgY29tbWl0cworICogdGhlIGpvdXJuYWwgdW5sZXNzIHRoZSAiZmFzdCB1bm1vdW50IiBtb2RlIGlzIGVuYWJsZWQuIEl0IGFsc28gYXZvaWRzCisgKiBjb21taXR0aW5nIHRoZSBqb3VybmFsIGlmIGl0IGNvbnRhaW5zIHRvbyBmZXcgZGF0YS4KICAqLwogc3RhdGljIHZvaWQgY29tbWl0X29uX3VubW91bnQoc3RydWN0IHViaWZzX2luZm8gKmMpCiB7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy90bmMuYyBiL2ZzL3ViaWZzL3RuYy5jCmluZGV4IDc2MzRjNTkuLmQyN2ZkOTEgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3RuYy5jCisrKyBiL2ZzL3ViaWZzL3RuYy5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAl9CiAKIAl6biA9IGNvcHlfem5vZGUoYywgem5vZGUpOwotCWlmICh1bmxpa2VseShJU19FUlIoem4pKSkKKwlpZiAoSVNfRVJSKHpuKSkKIAkJcmV0dXJuIHpuOwogCiAJaWYgKHpici0+bGVuKSB7CkBAIC00NzAsNiArNDcwLDEwIEBACiAJaWYgKG5vZGVfbGVuICE9IGxlbikKIAkJcmV0dXJuIDA7CiAKKwlpZiAodHlwZSA9PSBVQklGU19EQVRBX05PREUgJiYgIWMtPmFsd2F5c19jaGtfY3JjKQorCQlpZiAoYy0+bm9fY2hrX2RhdGFfY3JjKQorCQkJcmV0dXJuIDA7CisKIAljcmMgPSBjcmMzMihVQklGU19DUkMzMl9JTklULCBidWYgKyA4LCBub2RlX2xlbiAtIDgpOwogCW5vZGVfY3JjID0gbGUzMl90b19jcHUoY2gtPmNyYyk7CiAJaWYgKGNyYyAhPSBub2RlX2NyYykKQEAgLTExMjgsNyArMTEzMiw3IEBACiAJCQl1Ymlmc19hc3NlcnQoem5vZGUgPT0gYy0+enJvb3Quem5vZGUpOwogCQkJem5vZGUgPSBkaXJ0eV9jb3dfem5vZGUoYywgJmMtPnpyb290KTsKIAkJfQotCQlpZiAodW5saWtlbHkoSVNfRVJSKHpub2RlKSkgfHwgIXApCisJCWlmIChJU19FUlIoem5vZGUpIHx8ICFwKQogCQkJYnJlYWs7CiAJCXViaWZzX2Fzc2VydChwYXRoW3AgLSAxXSA+PSAwKTsKIAkJdWJpZnNfYXNzZXJ0KHBhdGhbcCAtIDFdIDwgem5vZGUtPmNoaWxkX2NudCk7CkBAIC0xNDkyLDYgKzE0OTYsMjg5IEBACiB9CiAKIC8qKgorICogdWJpZnNfdG5jX2dldF9idV9rZXlzIC0gbG9va3VwIGtleXMgZm9yIGJ1bGstcmVhZC4KKyAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKKyAqIEBidTogYnVsay1yZWFkIHBhcmFtZXRlcnMgYW5kIHJlc3VsdHMKKyAqCisgKiBMb29rdXAgY29uc2VjdXRpdmUgZGF0YSBub2RlIGtleXMgZm9yIHRoZSBzYW1lIGlub2RlIHRoYXQgcmVzaWRlCisgKiBjb25zZWN1dGl2ZWx5IGluIHRoZSBzYW1lIExFQi4KKyAqLworaW50IHViaWZzX3RuY19nZXRfYnVfa2V5cyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IGJ1X2luZm8gKmJ1KQoreworCWludCBuLCBlcnIgPSAwLCBsbnVtID0gLTEsIHVuaW5pdGlhbGl6ZWRfdmFyKG9mZnMpOworCWludCB1bmluaXRpYWxpemVkX3ZhcihsZW4pOworCXVuc2lnbmVkIGludCBibG9jayA9IGtleV9ibG9jayhjLCAmYnUtPmtleSk7CisJc3RydWN0IHViaWZzX3pub2RlICp6bm9kZTsKKworCWJ1LT5jbnQgPSAwOworCWJ1LT5ibGtfY250ID0gMDsKKwlidS0+ZW9mID0gMDsKKworCW11dGV4X2xvY2soJmMtPnRuY19tdXRleCk7CisJLyogRmluZCBmaXJzdCBrZXkgKi8KKwllcnIgPSB1Ymlmc19sb29rdXBfbGV2ZWwwKGMsICZidS0+a2V5LCAmem5vZGUsICZuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisJaWYgKGVycikgeworCQkvKiBLZXkgZm91bmQgKi8KKwkJbGVuID0gem5vZGUtPnpicmFuY2hbbl0ubGVuOworCQkvKiBUaGUgYnVmZmVyIG11c3QgYmUgYmlnIGVub3VnaCBmb3IgYXQgbGVhc3QgMSBub2RlICovCisJCWlmIChsZW4gPiBidS0+YnVmX2xlbikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCS8qIEFkZCB0aGlzIGtleSAqLworCQlidS0+emJyYW5jaFtidS0+Y250KytdID0gem5vZGUtPnpicmFuY2hbbl07CisJCWJ1LT5ibGtfY250ICs9IDE7CisJCWxudW0gPSB6bm9kZS0+emJyYW5jaFtuXS5sbnVtOworCQlvZmZzID0gQUxJR04oem5vZGUtPnpicmFuY2hbbl0ub2ZmcyArIGxlbiwgOCk7CisJfQorCXdoaWxlICgxKSB7CisJCXN0cnVjdCB1Ymlmc196YnJhbmNoICp6YnI7CisJCXVuaW9uIHViaWZzX2tleSAqa2V5OworCQl1bnNpZ25lZCBpbnQgbmV4dF9ibG9jazsKKworCQkvKiBGaW5kIG5leHQga2V5ICovCisJCWVyciA9IHRuY19uZXh0KGMsICZ6bm9kZSwgJm4pOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJCXpiciA9ICZ6bm9kZS0+emJyYW5jaFtuXTsKKwkJa2V5ID0gJnpici0+a2V5OworCQkvKiBTZWUgaWYgdGhlcmUgaXMgYW5vdGhlciBkYXRhIGtleSBmb3IgdGhpcyBmaWxlICovCisJCWlmIChrZXlfaW51bShjLCBrZXkpICE9IGtleV9pbnVtKGMsICZidS0+a2V5KSB8fAorCQkgICAga2V5X3R5cGUoYywga2V5KSAhPSBVQklGU19EQVRBX0tFWSkgeworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChsbnVtIDwgMCkgeworCQkJLyogRmlyc3Qga2V5IGZvdW5kICovCisJCQlsbnVtID0gemJyLT5sbnVtOworCQkJb2ZmcyA9IEFMSUdOKHpici0+b2ZmcyArIHpici0+bGVuLCA4KTsKKwkJCWxlbiA9IHpici0+bGVuOworCQkJaWYgKGxlbiA+IGJ1LT5idWZfbGVuKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGUgZGF0YSBub2RlcyBtdXN0IGJlIGluIGNvbnNlY3V0aXZlIHBvc2l0aW9ucyBpbgorCQkJICogdGhlIHNhbWUgTEVCLgorCQkJICovCisJCQlpZiAoemJyLT5sbnVtICE9IGxudW0gfHwgemJyLT5vZmZzICE9IG9mZnMpCisJCQkJZ290byBvdXQ7CisJCQlvZmZzICs9IEFMSUdOKHpici0+bGVuLCA4KTsKKwkJCWxlbiA9IEFMSUdOKGxlbiwgOCkgKyB6YnItPmxlbjsKKwkJCS8qIE11c3Qgbm90IGV4Y2VlZCBidWZmZXIgbGVuZ3RoICovCisJCQlpZiAobGVuID4gYnUtPmJ1Zl9sZW4pCisJCQkJZ290byBvdXQ7CisJCX0KKwkJLyogQWxsb3cgZm9yIGhvbGVzICovCisJCW5leHRfYmxvY2sgPSBrZXlfYmxvY2soYywga2V5KTsKKwkJYnUtPmJsa19jbnQgKz0gKG5leHRfYmxvY2sgLSBibG9jayAtIDEpOworCQlpZiAoYnUtPmJsa19jbnQgPj0gVUJJRlNfTUFYX0JVTEtfUkVBRCkKKwkJCWdvdG8gb3V0OworCQlibG9jayA9IG5leHRfYmxvY2s7CisJCS8qIEFkZCB0aGlzIGtleSAqLworCQlidS0+emJyYW5jaFtidS0+Y250KytdID0gKnpicjsKKwkJYnUtPmJsa19jbnQgKz0gMTsKKwkJLyogU2VlIGlmIHdlIGhhdmUgcm9vbSBmb3IgbW9yZSAqLworCQlpZiAoYnUtPmNudCA+PSBVQklGU19NQVhfQlVMS19SRUFEKQorCQkJZ290byBvdXQ7CisJCWlmIChidS0+YmxrX2NudCA+PSBVQklGU19NQVhfQlVMS19SRUFEKQorCQkJZ290byBvdXQ7CisJfQorb3V0OgorCWlmIChlcnIgPT0gLUVOT0VOVCkgeworCQlidS0+ZW9mID0gMTsKKwkJZXJyID0gMDsKKwl9CisJYnUtPmdjX3NlcSA9IGMtPmdjX3NlcTsKKwltdXRleF91bmxvY2soJmMtPnRuY19tdXRleCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkvKgorCSAqIEFuIGVub3Jtb3VzIGhvbGUgY291bGQgY2F1c2UgYnVsay1yZWFkIHRvIGVuY29tcGFzcyB0b28gbWFueQorCSAqIHBhZ2UgY2FjaGUgcGFnZXMsIHNvIGxpbWl0IHRoZSBudW1iZXIgaGVyZS4KKwkgKi8KKwlpZiAoYnUtPmJsa19jbnQgPiBVQklGU19NQVhfQlVMS19SRUFEKQorCQlidS0+YmxrX2NudCA9IFVCSUZTX01BWF9CVUxLX1JFQUQ7CisJLyoKKwkgKiBFbnN1cmUgdGhhdCBidWxrLXJlYWQgY292ZXJzIGEgd2hvbGUgbnVtYmVyIG9mIHBhZ2UgY2FjaGUKKwkgKiBwYWdlcy4KKwkgKi8KKwlpZiAoVUJJRlNfQkxPQ0tTX1BFUl9QQUdFID09IDEgfHwKKwkgICAgIShidS0+YmxrX2NudCAmIChVQklGU19CTE9DS1NfUEVSX1BBR0UgLSAxKSkpCisJCXJldHVybiAwOworCWlmIChidS0+ZW9mKSB7CisJCS8qIEF0IHRoZSBlbmQgb2YgZmlsZSB3ZSBjYW4gcm91bmQgdXAgKi8KKwkJYnUtPmJsa19jbnQgKz0gVUJJRlNfQkxPQ0tTX1BFUl9QQUdFIC0gMTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIEV4Y2x1ZGUgZGF0YSBub2RlcyB0aGF0IGRvIG5vdCBtYWtlIHVwIGEgd2hvbGUgcGFnZSBjYWNoZSBwYWdlICovCisJYmxvY2sgPSBrZXlfYmxvY2soYywgJmJ1LT5rZXkpICsgYnUtPmJsa19jbnQ7CisJYmxvY2sgJj0gfihVQklGU19CTE9DS1NfUEVSX1BBR0UgLSAxKTsKKwl3aGlsZSAoYnUtPmNudCkgeworCQlpZiAoa2V5X2Jsb2NrKGMsICZidS0+emJyYW5jaFtidS0+Y250IC0gMV0ua2V5KSA8IGJsb2NrKQorCQkJYnJlYWs7CisJCWJ1LT5jbnQgLT0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcmVhZF93YnVmIC0gYnVsay1yZWFkIGZyb20gYSBMRUIgd2l0aCBhIHdidWYuCisgKiBAd2J1Zjogd2J1ZiB0aGF0IG1heSBvdmVybGFwIHRoZSByZWFkCisgKiBAYnVmOiBidWZmZXIgaW50byB3aGljaCB0byByZWFkCisgKiBAbGVuOiByZWFkIGxlbmd0aAorICogQGxudW06IExFQiBudW1iZXIgZnJvbSB3aGljaCB0byByZWFkCisgKiBAb2Zmczogb2Zmc2V0IGZyb20gd2hpY2ggdG8gcmVhZAorICoKKyAqIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgJTAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCByZWFkX3didWYoc3RydWN0IHViaWZzX3didWYgKndidWYsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IGxudW0sCisJCSAgICAgaW50IG9mZnMpCit7CisJY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMgPSB3YnVmLT5jOworCWludCBybGVuLCBvdmVybGFwOworCisJZGJnX2lvKCJMRUIgJWQ6JWQsIGxlbmd0aCAlZCIsIGxudW0sIG9mZnMsIGxlbik7CisJdWJpZnNfYXNzZXJ0KHdidWYgJiYgbG51bSA+PSAwICYmIGxudW0gPCBjLT5sZWJfY250ICYmIG9mZnMgPj0gMCk7CisJdWJpZnNfYXNzZXJ0KCEob2ZmcyAmIDcpICYmIG9mZnMgPCBjLT5sZWJfc2l6ZSk7CisJdWJpZnNfYXNzZXJ0KG9mZnMgKyBsZW4gPD0gYy0+bGViX3NpemUpOworCisJc3Bpbl9sb2NrKCZ3YnVmLT5sb2NrKTsKKwlvdmVybGFwID0gKGxudW0gPT0gd2J1Zi0+bG51bSAmJiBvZmZzICsgbGVuID4gd2J1Zi0+b2Zmcyk7CisJaWYgKCFvdmVybGFwKSB7CisJCS8qIFdlIG1heSBzYWZlbHkgdW5sb2NrIHRoZSB3cml0ZS1idWZmZXIgYW5kIHJlYWQgdGhlIGRhdGEgKi8KKwkJc3Bpbl91bmxvY2soJndidWYtPmxvY2spOworCQlyZXR1cm4gdWJpX3JlYWQoYy0+dWJpLCBsbnVtLCBidWYsIG9mZnMsIGxlbik7CisJfQorCisJLyogRG9uJ3QgcmVhZCB1bmRlciB3YnVmICovCisJcmxlbiA9IHdidWYtPm9mZnMgLSBvZmZzOworCWlmIChybGVuIDwgMCkKKwkJcmxlbiA9IDA7CisKKwkvKiBDb3B5IHRoZSByZXN0IGZyb20gdGhlIHdyaXRlLWJ1ZmZlciAqLworCW1lbWNweShidWYgKyBybGVuLCB3YnVmLT5idWYgKyBvZmZzICsgcmxlbiAtIHdidWYtPm9mZnMsIGxlbiAtIHJsZW4pOworCXNwaW5fdW5sb2NrKCZ3YnVmLT5sb2NrKTsKKworCWlmIChybGVuID4gMCkKKwkJLyogUmVhZCBldmVyeXRoaW5nIHRoYXQgZ29lcyBiZWZvcmUgd3JpdGUtYnVmZmVyICovCisJCXJldHVybiB1YmlfcmVhZChjLT51YmksIGxudW0sIGJ1Ziwgb2Zmcywgcmxlbik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2YWxpZGF0ZV9kYXRhX25vZGUgLSB2YWxpZGF0ZSBkYXRhIG5vZGVzIGZvciBidWxrLXJlYWQuCisgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAYnVmOiBidWZmZXIgY29udGFpbmluZyBkYXRhIG5vZGUgdG8gdmFsaWRhdGUKKyAqIEB6YnI6IHpicmFuY2ggb2YgZGF0YSBub2RlIHRvIHZhbGlkYXRlCisgKgorICogVGhpcyBmdW5jdGlvbnMgcmV0dXJucyAlMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHZhbGlkYXRlX2RhdGFfbm9kZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgdm9pZCAqYnVmLAorCQkJICAgICAgc3RydWN0IHViaWZzX3picmFuY2ggKnpicikKK3sKKwl1bmlvbiB1Ymlmc19rZXkga2V5MTsKKwlzdHJ1Y3QgdWJpZnNfY2ggKmNoID0gYnVmOworCWludCBlcnIsIGxlbjsKKworCWlmIChjaC0+bm9kZV90eXBlICE9IFVCSUZTX0RBVEFfTk9ERSkgeworCQl1Ymlmc19lcnIoImJhZCBub2RlIHR5cGUgKCVkIGJ1dCBleHBlY3RlZCAlZCkiLAorCQkJICBjaC0+bm9kZV90eXBlLCBVQklGU19EQVRBX05PREUpOworCQlnb3RvIG91dF9lcnI7CisJfQorCisJZXJyID0gdWJpZnNfY2hlY2tfbm9kZShjLCBidWYsIHpici0+bG51bSwgemJyLT5vZmZzLCAwLCAwKTsKKwlpZiAoZXJyKSB7CisJCXViaWZzX2VycigiZXhwZWN0ZWQgbm9kZSB0eXBlICVkIiwgVUJJRlNfREFUQV9OT0RFKTsKKwkJZ290byBvdXQ7CisJfQorCisJbGVuID0gbGUzMl90b19jcHUoY2gtPmxlbik7CisJaWYgKGxlbiAhPSB6YnItPmxlbikgeworCQl1Ymlmc19lcnIoImJhZCBub2RlIGxlbmd0aCAlZCwgZXhwZWN0ZWQgJWQiLCBsZW4sIHpici0+bGVuKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUga2V5IG9mIHRoZSByZWFkIG5vZGUgaXMgY29ycmVjdCAqLworCWtleV9yZWFkKGMsIGJ1ZiArIFVCSUZTX0tFWV9PRkZTRVQsICZrZXkxKTsKKwlpZiAoIWtleXNfZXEoYywgJnpici0+a2V5LCAma2V5MSkpIHsKKwkJdWJpZnNfZXJyKCJiYWQga2V5IGluIG5vZGUgYXQgTEVCICVkOiVkIiwKKwkJCSAgemJyLT5sbnVtLCB6YnItPm9mZnMpOworCQlkYmdfdG5jKCJsb29rZWQgZm9yIGtleSAlcyBmb3VuZCBub2RlJ3Mga2V5ICVzIiwKKwkJCURCR0tFWSgmemJyLT5rZXkpLCBEQkdLRVkxKCZrZXkxKSk7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2VycjoKKwllcnIgPSAtRUlOVkFMOworb3V0OgorCXViaWZzX2VycigiYmFkIG5vZGUgYXQgTEVCICVkOiVkIiwgemJyLT5sbnVtLCB6YnItPm9mZnMpOworCWRiZ19kdW1wX25vZGUoYywgYnVmKTsKKwlkYmdfZHVtcF9zdGFjaygpOworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogdWJpZnNfdG5jX2J1bGtfcmVhZCAtIHJlYWQgYSBudW1iZXIgb2YgZGF0YSBub2RlcyBpbiBvbmUgZ28uCisgKiBAYzogVUJJRlMgZmlsZS1zeXN0ZW0gZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAYnU6IGJ1bGstcmVhZCBwYXJhbWV0ZXJzIGFuZCByZXN1bHRzCisgKgorICogVGhpcyBmdW5jdGlvbnMgcmVhZHMgYW5kIHZhbGlkYXRlcyB0aGUgZGF0YSBub2RlcyB0aGF0IHdlcmUgaWRlbnRpZmllZCBieSB0aGUKKyAqICd1Ymlmc190bmNfZ2V0X2J1X2tleXMoKScgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgJTAgb24gc3VjY2VzcywKKyAqIC1FQUdBSU4gdG8gaW5kaWNhdGUgYSByYWNlIHdpdGggR0MsIG9yIGFub3RoZXIgbmVnYXRpdmUgZXJyb3IgY29kZSBvbgorICogZmFpbHVyZS4KKyAqLworaW50IHViaWZzX3RuY19idWxrX3JlYWQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCBidV9pbmZvICpidSkKK3sKKwlpbnQgbG51bSA9IGJ1LT56YnJhbmNoWzBdLmxudW0sIG9mZnMgPSBidS0+emJyYW5jaFswXS5vZmZzLCBsZW4sIGVyciwgaTsKKwlzdHJ1Y3QgdWJpZnNfd2J1ZiAqd2J1ZjsKKwl2b2lkICpidWY7CisKKwlsZW4gPSBidS0+emJyYW5jaFtidS0+Y250IC0gMV0ub2ZmczsKKwlsZW4gKz0gYnUtPnpicmFuY2hbYnUtPmNudCAtIDFdLmxlbiAtIG9mZnM7CisJaWYgKGxlbiA+IGJ1LT5idWZfbGVuKSB7CisJCXViaWZzX2VycigiYnVmZmVyIHRvbyBzbWFsbCAlZCB2cyAlZCIsIGJ1LT5idWZfbGVuLCBsZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBEbyB0aGUgcmVhZCAqLworCXdidWYgPSB1Ymlmc19nZXRfd2J1ZihjLCBsbnVtKTsKKwlpZiAod2J1ZikKKwkJZXJyID0gcmVhZF93YnVmKHdidWYsIGJ1LT5idWYsIGxlbiwgbG51bSwgb2Zmcyk7CisJZWxzZQorCQllcnIgPSB1YmlfcmVhZChjLT51YmksIGxudW0sIGJ1LT5idWYsIG9mZnMsIGxlbik7CisKKwkvKiBDaGVjayBmb3IgYSByYWNlIHdpdGggR0MgKi8KKwlpZiAobWF5YmVfbGViX2djZWQoYywgbG51bSwgYnUtPmdjX3NlcSkpCisJCXJldHVybiAtRUFHQUlOOworCisJaWYgKGVyciAmJiBlcnIgIT0gLUVCQURNU0cpIHsKKwkJdWJpZnNfZXJyKCJmYWlsZWQgdG8gcmVhZCBmcm9tIExFQiAlZDolZCwgZXJyb3IgJWQiLAorCQkJICBsbnVtLCBvZmZzLCBlcnIpOworCQlkYmdfZHVtcF9zdGFjaygpOworCQlkYmdfdG5jKCJrZXkgJXMiLCBEQkdLRVkoJmJ1LT5rZXkpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBWYWxpZGF0ZSB0aGUgbm9kZXMgcmVhZCAqLworCWJ1ZiA9IGJ1LT5idWY7CisJZm9yIChpID0gMDsgaSA8IGJ1LT5jbnQ7IGkrKykgeworCQllcnIgPSB2YWxpZGF0ZV9kYXRhX25vZGUoYywgYnVmLCAmYnUtPnpicmFuY2hbaV0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJYnVmID0gYnVmICsgQUxJR04oYnUtPnpicmFuY2hbaV0ubGVuLCA4KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBkb19sb29rdXBfbm0tIGxvb2sgdXAgYSAiaGFzaGVkIiBub2RlLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQGtleTogbm9kZSBrZXkgdG8gbG9va3VwCkBAIC0xNjc1LDcgKzE5NjIsNyBAQAogewogCXN0cnVjdCB1Ymlmc196bm9kZSAqem4sICp6aSwgKnpwOwogCWludCBpLCBrZWVwLCBtb3ZlLCBhcHBlbmRpbmcgPSAwOwotCXVuaW9uIHViaWZzX2tleSAqa2V5ID0gJnpici0+a2V5OworCXVuaW9uIHViaWZzX2tleSAqa2V5ID0gJnpici0+a2V5LCAqa2V5MTsKIAogCXViaWZzX2Fzc2VydChuID49IDAgJiYgbiA8PSBjLT5mYW5vdXQpOwogCkBAIC0xNzE2LDIwICsyMDAzLDMzIEBACiAJem4tPmxldmVsID0gem5vZGUtPmxldmVsOwogCiAJLyogRGVjaWRlIHdoZXJlIHRvIHNwbGl0ICovCi0JaWYgKHpub2RlLT5sZXZlbCA9PSAwICYmIG4gPT0gYy0+ZmFub3V0ICYmCi0JICAgIGtleV90eXBlKGMsIGtleSkgPT0gVUJJRlNfREFUQV9LRVkpIHsKLQkJdW5pb24gdWJpZnNfa2V5ICprZXkxOwotCi0JCS8qCi0JCSAqIElmIHRoaXMgaXMgYW4gaW5vZGUgd2hpY2ggaXMgYmVpbmcgYXBwZW5kZWQgLSBkbyBub3Qgc3BsaXQKLQkJICogaXQgYmVjYXVzZSBubyBvdGhlciB6YnJhbmNoZXMgY2FuIGJlIGluc2VydGVkIGJldHdlZW4KLQkJICogemJyYW5jaGVzIG9mIGNvbnNlY3V0aXZlIGRhdGEgbm9kZXMgYW55d2F5LgotCQkgKi8KLQkJa2V5MSA9ICZ6bm9kZS0+emJyYW5jaFtuIC0gMV0ua2V5OwotCQlpZiAoa2V5X2ludW0oYywga2V5MSkgPT0ga2V5X2ludW0oYywga2V5KSAmJgotCQkgICAga2V5X3R5cGUoYywga2V5MSkgPT0gVUJJRlNfREFUQV9LRVkgJiYKLQkJICAgIGtleV9ibG9jayhjLCBrZXkxKSA9PSBrZXlfYmxvY2soYywga2V5KSAtIDEpCi0JCQlhcHBlbmRpbmcgPSAxOworCWlmICh6bm9kZS0+bGV2ZWwgPT0gMCAmJiBrZXlfdHlwZShjLCBrZXkpID09IFVCSUZTX0RBVEFfS0VZKSB7CisJCS8qIFRyeSBub3QgdG8gc3BsaXQgY29uc2VjdXRpdmUgZGF0YSBrZXlzICovCisJCWlmIChuID09IGMtPmZhbm91dCkgeworCQkJa2V5MSA9ICZ6bm9kZS0+emJyYW5jaFtuIC0gMV0ua2V5OworCQkJaWYgKGtleV9pbnVtKGMsIGtleTEpID09IGtleV9pbnVtKGMsIGtleSkgJiYKKwkJCSAgICBrZXlfdHlwZShjLCBrZXkxKSA9PSBVQklGU19EQVRBX0tFWSkKKwkJCQlhcHBlbmRpbmcgPSAxOworCQl9IGVsc2UKKwkJCWdvdG8gY2hlY2tfc3BsaXQ7CisJfSBlbHNlIGlmIChhcHBlbmRpbmcgJiYgbiAhPSBjLT5mYW5vdXQpIHsKKwkJLyogVHJ5IG5vdCB0byBzcGxpdCBjb25zZWN1dGl2ZSBkYXRhIGtleXMgKi8KKwkJYXBwZW5kaW5nID0gMDsKK2NoZWNrX3NwbGl0OgorCQlpZiAobiA+PSAoYy0+ZmFub3V0ICsgMSkgLyAyKSB7CisJCQlrZXkxID0gJnpub2RlLT56YnJhbmNoWzBdLmtleTsKKwkJCWlmIChrZXlfaW51bShjLCBrZXkxKSA9PSBrZXlfaW51bShjLCBrZXkpICYmCisJCQkgICAga2V5X3R5cGUoYywga2V5MSkgPT0gVUJJRlNfREFUQV9LRVkpIHsKKwkJCQlrZXkxID0gJnpub2RlLT56YnJhbmNoW25dLmtleTsKKwkJCQlpZiAoa2V5X2ludW0oYywga2V5MSkgIT0ga2V5X2ludW0oYywga2V5KSB8fAorCQkJCSAgICBrZXlfdHlwZShjLCBrZXkxKSAhPSBVQklGU19EQVRBX0tFWSkgeworCQkJCQlrZWVwID0gbjsKKwkJCQkJbW92ZSA9IGMtPmZhbm91dCAtIGtlZXA7CisJCQkJCXppID0gem5vZGU7CisJCQkJCWdvdG8gZG9fc3BsaXQ7CisJCQkJfQorCQkJfQorCQl9CiAJfQogCiAJaWYgKGFwcGVuZGluZykgewpAQCAtMTc1OSw2ICsyMDU5LDggQEAKIAkJCXpici0+em5vZGUtPnBhcmVudCA9IHpuOwogCX0KIAorZG9fc3BsaXQ6CisKIAlfX3NldF9iaXQoRElSVFlfWk5PREUsICZ6bi0+ZmxhZ3MpOwogCWF0b21pY19sb25nX2luYygmYy0+ZGlydHlfem5fY250KTsKIApAQCAtMTc4NSwxNCArMjA4NywxMSBAQAogCiAJLyogSW5zZXJ0IG5ldyB6bm9kZSAocHJvZHVjZWQgYnkgc3BpdHRpbmcpIGludG8gdGhlIHBhcmVudCAqLwogCWlmICh6cCkgewotCQlpID0gbjsKKwkJaWYgKG4gPT0gMCAmJiB6aSA9PSB6bm9kZSAmJiB6bm9kZS0+aWlwID09IDApCisJCQljb3JyZWN0X3BhcmVudF9rZXlzKGMsIHpub2RlKTsKKwogCQkvKiBMb2NhdGUgaW5zZXJ0aW9uIHBvaW50ICovCiAJCW4gPSB6bm9kZS0+aWlwICsgMTsKLQkJaWYgKGFwcGVuZGluZyAmJiBuICE9IGMtPmZhbm91dCkKLQkJCWFwcGVuZGluZyA9IDA7Ci0KLQkJaWYgKGkgPT0gMCAmJiB6aSA9PSB6bm9kZSAmJiB6bm9kZS0+aWlwID09IDApCi0JCQljb3JyZWN0X3BhcmVudF9rZXlzKGMsIHpub2RlKTsKIAogCQkvKiBUYWlsIHJlY3Vyc2lvbiAqLwogCQl6YnItPmtleSA9IHpuLT56YnJhbmNoWzBdLmtleTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3RuY19taXNjLmMgYi9mcy91Ymlmcy90bmNfbWlzYy5jCmluZGV4IGEyNWMxY2MuLmI0OGRiOTkgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3RuY19taXNjLmMKKysrIGIvZnMvdWJpZnMvdG5jX21pc2MuYwpAQCAtNDgwLDggKzQ4MCw4IEBACiAJfQogCiAJLyogTWFrZSBzdXJlIHRoZSBrZXkgb2YgdGhlIHJlYWQgbm9kZSBpcyBjb3JyZWN0ICovCi0Ja2V5X3JlYWQoYywga2V5LCAma2V5MSk7Ci0JaWYgKG1lbWNtcChub2RlICsgVUJJRlNfS0VZX09GRlNFVCwgJmtleTEsIGMtPmtleV9sZW4pKSB7CisJa2V5X3JlYWQoYywgbm9kZSArIFVCSUZTX0tFWV9PRkZTRVQsICZrZXkxKTsKKwlpZiAoIWtleXNfZXEoYywga2V5LCAma2V5MSkpIHsKIAkJdWJpZnNfZXJyKCJiYWQga2V5IGluIG5vZGUgYXQgTEVCICVkOiVkIiwKIAkJCSAgemJyLT5sbnVtLCB6YnItPm9mZnMpOwogCQlkYmdfdG5jKCJsb29rZWQgZm9yIGtleSAlcyBmb3VuZCBub2RlJ3Mga2V5ICVzIiwKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3ViaWZzLW1lZGlhLmggYi9mcy91Ymlmcy91Ymlmcy1tZWRpYS5oCmluZGV4IGE5ZWNiZDkuLjBiMzc4MDQgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3ViaWZzLW1lZGlhLmgKKysrIGIvZnMvdWJpZnMvdWJpZnMtbWVkaWEuaApAQCAtNzUsNyArNzUsNiBAQAogICovCiAjZGVmaW5lIFVCSUZTX0JMT0NLX1NJWkUgIDQwOTYKICNkZWZpbmUgVUJJRlNfQkxPQ0tfU0hJRlQgMTIKLSNkZWZpbmUgVUJJRlNfQkxPQ0tfTUFTSyAgMHgwMDAwMEZGRgogCiAvKiBVQklGUyBwYWRkaW5nIGJ5dGUgcGF0dGVybiAobXVzdCBub3QgYmUgZmlyc3Qgb3IgbGFzdCBieXRlIG9mIG5vZGUgbWFnaWMpICovCiAjZGVmaW5lIFVCSUZTX1BBRERJTkdfQllURSAweENFCmRpZmYgLS1naXQgYS9mcy91Ymlmcy91Ymlmcy5oIGIvZnMvdWJpZnMvdWJpZnMuaAppbmRleCAxN2M2MjBiLi5hN2JkMzJmIDEwMDY0NAotLS0gYS9mcy91Ymlmcy91Ymlmcy5oCisrKyBiL2ZzL3ViaWZzL3ViaWZzLmgKQEAgLTE0Miw2ICsxNDIsOSBAQAogLyogTWF4aW11bSBleHBlY3RlZCB0cmVlIGhlaWdodCBmb3IgdXNlIGJ5IGJvdHRvbV91cF9idWYgKi8KICNkZWZpbmUgQk9UVE9NX1VQX0hFSUdIVCA2NAogCisvKiBNYXhpbXVtIG51bWJlciBvZiBkYXRhIG5vZGVzIHRvIGJ1bGstcmVhZCAqLworI2RlZmluZSBVQklGU19NQVhfQlVMS19SRUFEIDMyCisKIC8qCiAgKiBMb2NrZGVwIGNsYXNzZXMgZm9yIFVCSUZTIGlub2RlIEB1aV9tdXRleC4KICAqLwpAQCAtMzI4LDkgKzMzMSwxMCBAQAogICogICAgICAgICAgICAgICB0aGlzIGlub2RlCiAgKiBAZGlydHk6IG5vbi16ZXJvIGlmIHRoZSBpbm9kZSBpcyBkaXJ0eQogICogQHhhdHRyOiBub24temVybyBpZiB0aGlzIGlzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbm9kZQorICogQGJ1bGtfcmVhZDogbm9uLXplcm8gaWYgYnVsay1yZWFkIHNob3VsZCBiZSB1c2VkCiAgKiBAdWlfbXV0ZXg6IHNlcmlhbGl6ZXMgaW5vZGUgd3JpdGUtYmFjayB3aXRoIHRoZSByZXN0IG9mIFZGUyBvcGVyYXRpb25zLAotICogICAgICAgICAgICBzZXJpYWxpemVzICJjbGVhbiA8LT4gZGlydHkiIHN0YXRlIGNoYW5nZXMsIHByb3RlY3RzIEBkaXJ0eSwKLSAqICAgICAgICAgICAgQHVpX3NpemUsIGFuZCBAeGF0dHJfc2l6ZQorICogICAgICAgICAgICBzZXJpYWxpemVzICJjbGVhbiA8LT4gZGlydHkiIHN0YXRlIGNoYW5nZXMsIHNlcmlhbGl6ZXMgYnVsay1yZWFkLAorICogICAgICAgICAgICBwcm90ZWN0cyBAZGlydHksIEBidWxrX3JlYWQsIEB1aV9zaXplLCBhbmQgQHhhdHRyX3NpemUKICAqIEB1aV9sb2NrOiBwcm90ZWN0cyBAc3luY2VkX2lfc2l6ZQogICogQHN5bmNlZF9pX3NpemU6IHN5bmNocm9uaXplZCBzaXplIG9mIGlub2RlLCBpLmUuIHRoZSB2YWx1ZSBvZiBpbm9kZSBzaXplCiAgKiAgICAgICAgICAgICAgICAgY3VycmVudGx5IHN0b3JlZCBvbiB0aGUgZmxhc2g7IHVzZWQgb25seSBmb3IgcmVndWxhciBmaWxlCkBAIC0zMzgsNiArMzQyLDggQEAKICAqIEB1aV9zaXplOiBpbm9kZSBzaXplIHVzZWQgYnkgVUJJRlMgd2hlbiB3cml0aW5nIHRvIGZsYXNoCiAgKiBAZmxhZ3M6IGlub2RlIGZsYWdzIChAVUJJRlNfQ09NUFJfRkwsIGV0YykKICAqIEBjb21wcl90eXBlOiBkZWZhdWx0IGNvbXByZXNzaW9uIHR5cGUgdXNlZCBmb3IgdGhpcyBpbm9kZQorICogQGxhc3RfcGFnZV9yZWFkOiBwYWdlIG51bWJlciBvZiBsYXN0IHBhZ2UgcmVhZCAoZm9yIGJ1bGsgcmVhZCkKKyAqIEByZWFkX2luX2Ffcm93OiBudW1iZXIgb2YgY29uc2VjdXRpdmUgcGFnZXMgcmVhZCBpbiBhIHJvdyAoZm9yIGJ1bGsgcmVhZCkKICAqIEBkYXRhX2xlbjogbGVuZ3RoIG9mIHRoZSBkYXRhIGF0dGFjaGVkIHRvIHRoZSBpbm9kZQogICogQGRhdGE6IGlub2RlJ3MgZGF0YQogICoKQEAgLTM3OSwxMiArMzg1LDE1IEBACiAJdW5zaWduZWQgaW50IHhhdHRyX25hbWVzOwogCXVuc2lnbmVkIGludCBkaXJ0eToxOwogCXVuc2lnbmVkIGludCB4YXR0cjoxOworCXVuc2lnbmVkIGludCBidWxrX3JlYWQ6MTsKIAlzdHJ1Y3QgbXV0ZXggdWlfbXV0ZXg7CiAJc3BpbmxvY2tfdCB1aV9sb2NrOwogCWxvZmZfdCBzeW5jZWRfaV9zaXplOwogCWxvZmZfdCB1aV9zaXplOwogCWludCBmbGFnczsKIAlpbnQgY29tcHJfdHlwZTsKKwlwZ29mZl90IGxhc3RfcGFnZV9yZWFkOworCXBnb2ZmX3QgcmVhZF9pbl9hX3JvdzsKIAlpbnQgZGF0YV9sZW47CiAJdm9pZCAqZGF0YTsKIH07CkBAIC02OTgsOCArNzA3LDggQEAKICAqIHN0cnVjdCB1Ymlmc196YnJhbmNoIC0ga2V5L2Nvb3JkaW5hdGUvbGVuZ3RoIGJyYW5jaCBzdG9yZWQgaW4gem5vZGVzLgogICogQGtleToga2V5CiAgKiBAem5vZGU6IHpub2RlIGFkZHJlc3MgaW4gbWVtb3J5Ci0gKiBAbG51bTogTEVCIG51bWJlciBvZiB0aGUgaW5kZXhpbmcgbm9kZQotICogQG9mZnM6IG9mZnNldCBvZiB0aGUgaW5kZXhpbmcgbm9kZSB3aXRoaW4gQGxudW0KKyAqIEBsbnVtOiBMRUIgbnVtYmVyIG9mIHRoZSB0YXJnZXQgbm9kZSAoaW5kZXhpbmcgbm9kZSBvciBkYXRhIG5vZGUpCisgKiBAb2ZmczogdGFyZ2V0IG5vZGUgb2Zmc2V0IHdpdGhpbiBAbG51bQogICogQGxlbjogdGFyZ2V0IG5vZGUgbGVuZ3RoCiAgKi8KIHN0cnVjdCB1Ymlmc196YnJhbmNoIHsKQEAgLTc0NCw2ICs3NTMsMjggQEAKIH07CiAKIC8qKgorICogc3RydWN0IGJ1X2luZm8gLSBidWxrLXJlYWQgaW5mb3JtYXRpb24KKyAqIEBrZXk6IGZpcnN0IGRhdGEgbm9kZSBrZXkKKyAqIEB6YnJhbmNoOiB6YnJhbmNoZXMgb2YgZGF0YSBub2RlcyB0byBidWxrIHJlYWQKKyAqIEBidWY6IGJ1ZmZlciB0byByZWFkIGludG8KKyAqIEBidWZfbGVuOiBidWZmZXIgbGVuZ3RoCisgKiBAZ2Nfc2VxOiBHQyBzZXF1ZW5jZSBudW1iZXIgdG8gZGV0ZWN0IHJhY2VzIHdpdGggR0MKKyAqIEBjbnQ6IG51bWJlciBvZiBkYXRhIG5vZGVzIGZvciBidWxrIHJlYWQKKyAqIEBibGtfY250OiBudW1iZXIgb2YgZGF0YSBibG9ja3MgaW5jbHVkaW5nIGhvbGVzCisgKiBAb2VmOiBlbmQgb2YgZmlsZSByZWFjaGVkCisgKi8KK3N0cnVjdCBidV9pbmZvIHsKKwl1bmlvbiB1Ymlmc19rZXkga2V5OworCXN0cnVjdCB1Ymlmc196YnJhbmNoIHpicmFuY2hbVUJJRlNfTUFYX0JVTEtfUkVBRF07CisJdm9pZCAqYnVmOworCWludCBidWZfbGVuOworCWludCBnY19zZXE7CisJaW50IGNudDsKKwlpbnQgYmxrX2NudDsKKwlpbnQgZW9mOworfTsKKworLyoqCiAgKiBzdHJ1Y3QgdWJpZnNfbm9kZV9yYW5nZSAtIG5vZGUgbGVuZ3RoIHJhbmdlIGRlc2NyaXB0aW9uIGRhdGEgc3RydWN0dXJlLgogICogQGxlbjogZml4ZWQgbm9kZSBsZW5ndGgKICAqIEBtaW5fbGVuOiBtaW5pbXVtIHBvc3NpYmxlIG5vZGUgbGVuZ3RoCkBAIC04NjIsOSArODkzLDEzIEBACiAvKioKICAqIHN0cnVjdCB1Ymlmc19tb3VudF9vcHRzIC0gVUJJRlMtc3BlY2lmaWMgbW91bnQgb3B0aW9ucyBpbmZvcm1hdGlvbi4KICAqIEB1bm1vdW50X21vZGU6IHNlbGVjdGVkIHVubW91bnQgbW9kZSAoJTAgZGVmYXVsdCwgJTEgbm9ybWFsLCAlMiBmYXN0KQorICogQGJ1bGtfcmVhZDogZW5hYmxlIGJ1bGstcmVhZHMKKyAqIEBjaGtfZGF0YV9jcmM6IGNoZWNrIENSQ3Mgd2hlbiByZWFkaW5nIGRhdGEgbm9kZXMKICAqLwogc3RydWN0IHViaWZzX21vdW50X29wdHMgewogCXVuc2lnbmVkIGludCB1bm1vdW50X21vZGU6MjsKKwl1bnNpZ25lZCBpbnQgYnVsa19yZWFkOjI7CisJdW5zaWduZWQgaW50IGNoa19kYXRhX2NyYzoyOwogfTsKIAogLyoqCkBAIC05MDUsMTMgKzk0MCwxMiBAQAogICogQGNtdF9zdGF0ZTogY29tbWl0IHN0YXRlCiAgKiBAY3NfbG9jazogY29tbWl0IHN0YXRlIGxvY2sKICAqIEBjbXRfd3E6IHdhaXQgcXVldWUgdG8gc2xlZXAgb24gaWYgdGhlIGxvZyBpcyBmdWxsIGFuZCBhIGNvbW1pdCBpcyBydW5uaW5nCisgKgogICogQGZhc3RfdW5tb3VudDogZG8gbm90IHJ1biBqb3VybmFsIGNvbW1pdCBiZWZvcmUgdW4tbW91bnRpbmcKICAqIEBiaWdfbHB0OiBmbGFnIHRoYXQgTFBUIGlzIHRvbyBiaWcgdG8gd3JpdGUgd2hvbGUgZHVyaW5nIGNvbW1pdAotICogQGNoZWNrX2xwdF9mcmVlOiBmbGFnIHRoYXQgaW5kaWNhdGVzIExQVCBHQyBtYXkgYmUgbmVlZGVkCi0gKiBAbm9zcGFjZTogbm9uLXplcm8gaWYgdGhlIGZpbGUtc3lzdGVtIGRvZXMgbm90IGhhdmUgZmxhc2ggc3BhY2UgKHVzZWQgYXMKLSAqICAgICAgICAgICBvcHRpbWl6YXRpb24pCi0gKiBAbm9zcGFjZV9ycDogdGhlIHNhbWUgYXMgQG5vc3BhY2UsIGJ1dCBhZGRpdGlvbmFsbHkgbWVhbnMgdGhhdCBldmVuIHJlc2VydmVkCi0gKiAgICAgICAgICAgICAgcG9vbCBpcyBmdWxsCisgKiBAbm9fY2hrX2RhdGFfY3JjOiBkbyBub3QgY2hlY2sgQ1JDcyB3aGVuIHJlYWRpbmcgZGF0YSBub2RlcyAoZXhjZXB0IGR1cmluZworICogICAgICAgICAgICAgICAgICAgcmVjb3ZlcnkpCisgKiBAYnVsa19yZWFkOiBlbmFibGUgYnVsay1yZWFkcwogICoKICAqIEB0bmNfbXV0ZXg6IHByb3RlY3RzIHRoZSBUcmVlIE5vZGUgQ2FjaGUgKFROQyksIEB6cm9vdCwgQGNuZXh0LCBAZW5leHQsIGFuZAogICogICAgICAgICAgICAgQGNhbGNfaWR4X3N6CkBAIC05MzUsNiArOTY5LDcgQEAKICAqIEBtc3Rfbm9kZTogbWFzdGVyIG5vZGUKICAqIEBtc3Rfb2Zmczogb2Zmc2V0IG9mIHZhbGlkIG1hc3RlciBub2RlCiAgKiBAbXN0X211dGV4OiBwcm90ZWN0cyB0aGUgbWFzdGVyIG5vZGUgYXJlYSwgQG1zdF9ub2RlLCBhbmQgQG1zdF9vZmZzCisgKiBAYnVsa19yZWFkX2J1Zl9zaXplOiBidWZmZXIgc2l6ZSBmb3IgYnVsay1yZWFkcwogICoKICAqIEBsb2dfbGViczogbnVtYmVyIG9mIGxvZ2ljYWwgZXJhc2VibG9ja3MgaW4gdGhlIGxvZwogICogQGxvZ19ieXRlczogbG9nIHNpemUgaW4gYnl0ZXMKQEAgLTk3NywxMiArMTAxMiwxNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICBidXQgd2hpY2ggc3RpbGwgaGF2ZSB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQgYmVjYXVzZQogICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5kZXggaGFzIG5vdCBiZWVuIGNvbW1pdHRlZCBzbyBmYXIKICAqIEBzcGFjZV9sb2NrOiBwcm90ZWN0cyBAYnVkZ19pZHhfZ3Jvd3RoLCBAYnVkZ19kYXRhX2dyb3d0aCwgQGJ1ZGdfZGRfZ3Jvd3RoLAotICogICAgICAgICAgICAgIEBidWRnX3VuY29tbWl0ZWRfaWR4LCBAbWluX2lkeF9sZWJzLCBAb2xkX2lkeF9zeiwgYW5kIEBsc3Q7CisgKiAgICAgICAgICAgICAgQGJ1ZGdfdW5jb21taXRlZF9pZHgsIEBtaW5faWR4X2xlYnMsIEBvbGRfaWR4X3N6LCBAbHN0LAorICogICAgICAgICAgICAgIEBub3NwYWNlLCBhbmQgQG5vc3BhY2VfcnA7CiAgKiBAbWluX2lkeF9sZWJzOiBtaW5pbXVtIG51bWJlciBvZiBMRUJzIHJlcXVpcmVkIGZvciB0aGUgaW5kZXgKICAqIEBvbGRfaWR4X3N6OiBzaXplIG9mIGluZGV4IG9uIGZsYXNoCiAgKiBAY2FsY19pZHhfc3o6IHRlbXBvcmFyeSB2YXJpYWJsZSB3aGljaCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBuZXcgaW5kZXggc2l6ZQogICogICAgICAgICAgICAgICAoY29udGFpbnMgYWNjdXJhdGUgbmV3IGluZGV4IHNpemUgYXQgZW5kIG9mIFROQyBjb21taXQgc3RhcnQpCiAgKiBAbHN0OiBscHJvcHMgc3RhdGlzdGljcworICogQG5vc3BhY2U6IG5vbi16ZXJvIGlmIHRoZSBmaWxlLXN5c3RlbSBkb2VzIG5vdCBoYXZlIGZsYXNoIHNwYWNlICh1c2VkIGFzCisgKiAgICAgICAgICAgb3B0aW1pemF0aW9uKQorICogQG5vc3BhY2VfcnA6IHRoZSBzYW1lIGFzIEBub3NwYWNlLCBidXQgYWRkaXRpb25hbGx5IG1lYW5zIHRoYXQgZXZlbiByZXNlcnZlZAorICogICAgICAgICAgICAgIHBvb2wgaXMgZnVsbAogICoKICAqIEBwYWdlX2J1ZGdldDogYnVkZ2V0IGZvciBhIHBhZ2UKICAqIEBpbm9kZV9idWRnZXQ6IGJ1ZGdldCBmb3IgYW4gaW5vZGUKQEAgLTEwNjEsNiArMTEwMSw3IEBACiAgKiBAbHB0X2RydHlfZmxnczogZGlydHkgZmxhZ3MgZm9yIExQVCBzcGVjaWFsIG5vZGVzIGUuZy4gbHRhYgogICogQGRpcnR5X25uX2NudDogbnVtYmVyIG9mIGRpcnR5IG5ub2RlcwogICogQGRpcnR5X3BuX2NudDogbnVtYmVyIG9mIGRpcnR5IHBub2RlcworICogQGNoZWNrX2xwdF9mcmVlOiBmbGFnIHRoYXQgaW5kaWNhdGVzIExQVCBHQyBtYXkgYmUgbmVlZGVkCiAgKiBAbHB0X3N6OiBMUFQgc2l6ZQogICogQGxwdF9ub2RfYnVmOiBidWZmZXIgZm9yIGFuIG9uLWZsYXNoIG5ub2RlIG9yIHBub2RlCiAgKiBAbHB0X2J1ZjogYnVmZmVyIG9mIExFQiBzaXplIHVzZWQgYnkgTFBUCkBAIC0xMTAyLDYgKzExNDMsNyBAQAogICogQHJjdnJkX21zdF9ub2RlOiByZWNvdmVyZWQgbWFzdGVyIG5vZGUgdG8gd3JpdGUgd2hlbiBtb3VudGluZyBybyB0byBydwogICogQHNpemVfdHJlZTogaW5vZGUgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVjb3ZlcnkKICAqIEByZW1vdW50aW5nX3J3OiBzZXQgd2hpbGUgcmVtb3VudGluZyBmcm9tIHJvIHRvIHJ3IChzYiBmbGFncyBoYXZlIE1TX1JET05MWSkKKyAqIEBhbHdheXNfY2hrX2NyYzogYWx3YXlzIGNoZWNrIENSQ3MgKHdoaWxlIG1vdW50aW5nIGFuZCByZW1vdW50aW5nIHJ3KQogICogQG1vdW50X29wdHM6IFVCSUZTLXNwZWNpZmljIG1vdW50IG9wdGlvbnMKICAqCiAgKiBAZGJnX2J1ZjogYSBidWZmZXIgb2YgTEVCIHNpemUgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCkBAIC0xMTQ2LDExICsxMTg4LDExIEBACiAJaW50IGNtdF9zdGF0ZTsKIAlzcGlubG9ja190IGNzX2xvY2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgY210X3dxOworCiAJdW5zaWduZWQgaW50IGZhc3RfdW5tb3VudDoxOwogCXVuc2lnbmVkIGludCBiaWdfbHB0OjE7Ci0JdW5zaWduZWQgaW50IGNoZWNrX2xwdF9mcmVlOjE7Ci0JdW5zaWduZWQgaW50IG5vc3BhY2U6MTsKLQl1bnNpZ25lZCBpbnQgbm9zcGFjZV9ycDoxOworCXVuc2lnbmVkIGludCBub19jaGtfZGF0YV9jcmM6MTsKKwl1bnNpZ25lZCBpbnQgYnVsa19yZWFkOjE7CiAKIAlzdHJ1Y3QgbXV0ZXggdG5jX211dGV4OwogCXN0cnVjdCB1Ymlmc196YnJhbmNoIHpyb290OwpAQCAtMTE3NSw2ICsxMjE3LDcgQEAKIAlzdHJ1Y3QgdWJpZnNfbXN0X25vZGUgKm1zdF9ub2RlOwogCWludCBtc3Rfb2ZmczsKIAlzdHJ1Y3QgbXV0ZXggbXN0X211dGV4OworCWludCBidWxrX3JlYWRfYnVmX3NpemU7CiAKIAlpbnQgbG9nX2xlYnM7CiAJbG9uZyBsb25nIGxvZ19ieXRlczsKQEAgLTEyMTgsNiArMTI2MSw4IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIG9sZF9pZHhfc3o7CiAJdW5zaWduZWQgbG9uZyBsb25nIGNhbGNfaWR4X3N6OwogCXN0cnVjdCB1Ymlmc19scF9zdGF0cyBsc3Q7CisJdW5zaWduZWQgaW50IG5vc3BhY2U6MTsKKwl1bnNpZ25lZCBpbnQgbm9zcGFjZV9ycDoxOwogCiAJaW50IHBhZ2VfYnVkZ2V0OwogCWludCBpbm9kZV9idWRnZXQ7CkBAIC0xMjk0LDYgKzEzMzksNyBAQAogCWludCBscHRfZHJ0eV9mbGdzOwogCWludCBkaXJ0eV9ubl9jbnQ7CiAJaW50IGRpcnR5X3BuX2NudDsKKwlpbnQgY2hlY2tfbHB0X2ZyZWU7CiAJbG9uZyBsb25nIGxwdF9zejsKIAl2b2lkICpscHRfbm9kX2J1ZjsKIAl2b2lkICpscHRfYnVmOwpAQCAtMTMzNSw2ICsxMzgxLDcgQEAKIAlzdHJ1Y3QgdWJpZnNfbXN0X25vZGUgKnJjdnJkX21zdF9ub2RlOwogCXN0cnVjdCByYl9yb290IHNpemVfdHJlZTsKIAlpbnQgcmVtb3VudGluZ19ydzsKKwlpbnQgYWx3YXlzX2Noa19jcmM7CiAJc3RydWN0IHViaWZzX21vdW50X29wdHMgbW91bnRfb3B0czsKIAogI2lmZGVmIENPTkZJR19VQklGU19GU19ERUJVRwpAQCAtMTM0Nyw2ICsxMzk0LDEyIEBACiAJdW5zaWduZWQgbG9uZyBmYWlsX3RpbWVvdXQ7CiAJdW5zaWduZWQgaW50IGZhaWxfY250OwogCXVuc2lnbmVkIGludCBmYWlsX2NudF9tYXg7CisJbG9uZyBsb25nIGNoa19scHRfc3o7CisJbG9uZyBsb25nIGNoa19scHRfc3oyOworCWxvbmcgbG9uZyBjaGtfbHB0X3dhc3RhZ2U7CisJaW50IGNoa19scHRfbGViczsKKwlpbnQgbmV3X25oZWFkX2xudW07CisJaW50IG5ld19uaGVhZF9vZmZzOwogI2VuZGlmCiB9OwogCkBAIC0xMzc3LDcgKzE0MzAsNyBAQAogaW50IHViaWZzX3dyaXRlX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKm5vZGUsIGludCBsZW4sIGludCBsbnVtLAogCQkgICAgIGludCBvZmZzLCBpbnQgZHR5cGUpOwogaW50IHViaWZzX2NoZWNrX25vZGUoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IGxudW0sCi0JCSAgICAgaW50IG9mZnMsIGludCBxdWlldCk7CisJCSAgICAgaW50IG9mZnMsIGludCBxdWlldCwgaW50IGNoa19jcmMpOwogdm9pZCB1Ymlmc19wcmVwYXJlX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHBhZCk7CiB2b2lkIHViaWZzX3ByZXBfZ3JwX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKm5vZGUsIGludCBsZW4sIGludCBsYXN0KTsKIGludCB1Ymlmc19pb19pbml0KHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKQEAgLTE0OTAsNiArMTU0Myw4IEBACiBpbnQgaXNfaWR4X25vZGVfaW5fdG5jKHN0cnVjdCB1Ymlmc19pbmZvICpjLCB1bmlvbiB1Ymlmc19rZXkgKmtleSwgaW50IGxldmVsLAogCQkgICAgICAgaW50IGxudW0sIGludCBvZmZzKTsKIGludCBpbnNlcnRfb2xkX2lkeF96bm9kZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX3pub2RlICp6bm9kZSk7CitpbnQgdWJpZnNfdG5jX2dldF9idV9rZXlzKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgYnVfaW5mbyAqYnUpOworaW50IHViaWZzX3RuY19idWxrX3JlYWQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCBidV9pbmZvICpidSk7CiAKIC8qIHRuY19taXNjLmMgKi8KIHN0cnVjdCB1Ymlmc196bm9kZSAqdWJpZnNfdG5jX2xldmVsb3JkZXJfbmV4dChzdHJ1Y3QgdWJpZnNfem5vZGUgKnpyLApAQCAtMTU4NiwxMiArMTY0MSwxMCBAQAogdm9pZCB1Ymlmc19scHRfZnJlZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgaW50IHdyX29ubHkpOwogCiAvKiBscHJvcHMuYyAqLwotdm9pZCB1Ymlmc19nZXRfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIGNvbnN0IHN0cnVjdCB1Ymlmc19scHJvcHMgKnViaWZzX2NoYW5nZV9scChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKIAkJCQkJICAgY29uc3Qgc3RydWN0IHViaWZzX2xwcm9wcyAqbHAsCiAJCQkJCSAgIGludCBmcmVlLCBpbnQgZGlydHksIGludCBmbGFncywKIAkJCQkJICAgaW50IGlkeF9nY19jbnQpOwotdm9pZCB1Ymlmc19yZWxlYXNlX2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CiB2b2lkIHViaWZzX2dldF9scF9zdGF0cyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX2xwX3N0YXRzICpzdGF0cyk7CiB2b2lkIHViaWZzX2FkZF90b19jYXQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCB1Ymlmc19scHJvcHMgKmxwcm9wcywKIAkJICAgICAgaW50IGNhdCk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy94YXR0ci5jIGIvZnMvdWJpZnMveGF0dHIuYwppbmRleCA2NDliZWM3Li5jZmQzMWUyIDEwMDY0NAotLS0gYS9mcy91Ymlmcy94YXR0ci5jCisrKyBiL2ZzL3ViaWZzL3hhdHRyLmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCQlpbnQgdHlwZTsKIAogCQl4ZW50ID0gdWJpZnNfdG5jX25leHRfZW50KGMsICZrZXksICZubSk7Ci0JCWlmICh1bmxpa2VseShJU19FUlIoeGVudCkpKSB7CisJCWlmIChJU19FUlIoeGVudCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoeGVudCk7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuYwppbmRleCA1Njk4YmJmLi5lMjVlNzAxIDEwMDY0NAotLS0gYS9mcy91ZGYvc3VwZXIuYworKysgYi9mcy91ZGYvc3VwZXIuYwpAQCAtMzY5LDcgKzM2OSw3IEBACiAJT3B0X2VyciwgT3B0X3Vmb3JnZXQsIE9wdF91aWdub3JlLCBPcHRfZ2ZvcmdldCwgT3B0X2dpZ25vcmUKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X25vdnJzLAkibm92cnMifSwKIAl7T3B0X25vc3RyaWN0LAkibm9zdHJpY3QifSwKIAl7T3B0X2JzLAkiYnM9JXUifSwKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9zdXBlci5jIGIvZnMvdWZzL3N1cGVyLmMKaW5kZXggMzE0MTk2OS4uZTY1MjEyZCAxMDA2NDQKLS0tIGEvZnMvdWZzL3N1cGVyLmMKKysrIGIvZnMvdWZzL3N1cGVyLmMKQEAgLTMwOSw3ICszMDksNyBAQAogICAgICAgIE9wdF9lcnIKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X3R5cGVfb2xkLCAidWZzdHlwZT1vbGQifSwKIAl7T3B0X3R5cGVfc3VueDg2LCAidWZzdHlwZT1zdW54ODYifSwKIAl7T3B0X3R5cGVfc3VuLCAidWZzdHlwZT1zdW4ifSwKQEAgLTEyMzMsNyArMTIzMyw3IEBACiB7CiAJc3RydWN0IHVmc19zYl9pbmZvICpzYmkgPSBVRlNfU0IodmZzLT5tbnRfc2IpOwogCXVuc2lnbmVkIG12YWwgPSBzYmktPnNfbW91bnRfb3B0ICYgVUZTX01PVU5UX1VGU1RZUEU7Ci0Jc3RydWN0IG1hdGNoX3Rva2VuICp0cCA9IHRva2VuczsKKwljb25zdCBzdHJ1Y3QgbWF0Y2hfdG9rZW4gKnRwID0gdG9rZW5zOwogCiAJd2hpbGUgKHRwLT50b2tlbiAhPSBPcHRfb25lcnJvcl9wYW5pYyAmJiB0cC0+dG9rZW4gIT0gbXZhbCkKIAkJKyt0cDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IDE4ZDNjODQuLmUzOTAxMzYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJT3B0X2JhcnJpZXIsIE9wdF9ub2JhcnJpZXIsIE9wdF9lcnIKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2JhcnJpZXIsICJiYXJyaWVyIn0sCiAJe09wdF9ub2JhcnJpZXIsICJub2JhcnJpZXIifSwKIAl7T3B0X2VyciwgTlVMTH0KQEAgLTEzMjMsNyArMTMyMyw3IEBACiAJIlhGUzogbW91bnQgb3B0aW9uIFwiJXNcIiBub3Qgc3VwcG9ydGVkIGZvciByZW1vdW50XG4iLCBwKTsKIAkJCXJldHVybiAtRUlOVkFMOwogI2Vsc2UKLQkJCXJldHVybiAwOworCQkJYnJlYWs7CiAjZW5kaWYKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY21hY3Jvcy5oIGIvaW5jbHVkZS9hY3BpL2FjbWFjcm9zLmgKaW5kZXggNTdhYjllOS4uNzRhOTYxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjbWFjcm9zLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjbWFjcm9zLmgKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogLyoKICAqIElmIEFDUElfR0VUX0ZVTkNUSU9OX05BTUUgd2FzIG5vdCBkZWZpbmVkIGluIHRoZSBjb21waWxlci1kZXBlbmRlbnQgaGVhZGVyLAogICogZGVmaW5lIGl0IG5vdy4gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB0aGVyZSB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydAotICogYSBfX0ZVTkNUSU9OX18gbWFjcm8gb3IgZXF1aXZhbGVudC4KKyAqIGEgX19mdW5jX18gbWFjcm8gb3IgZXF1aXZhbGVudC4KICAqLwogI2lmbmRlZiBBQ1BJX0dFVF9GVU5DVElPTl9OQU1FCiAjZGVmaW5lIEFDUElfR0VUX0ZVTkNUSU9OX05BTUUgICAgICAgICAgX2FjcGlfZnVuY3Rpb25fbmFtZQpAQCAtNDc1LDEyICs0NzUsMTIgQEAKICAqIFRoZSBOYW1lIHBhcmFtZXRlciBzaG91bGQgYmUgdGhlIHByb2NlZHVyZSBuYW1lIGFzIGEgcXVvdGVkIHN0cmluZy4KICAqIFRoZSBmdW5jdGlvbiBuYW1lIGlzIGFsc28gdXNlZCBieSB0aGUgZnVuY3Rpb24gZXhpdCBtYWNyb3MgYmVsb3cuCiAgKiBOb3RlOiAoY29uc3QgY2hhcikgaXMgdXNlZCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGRlYnVnIGludGVyZmFjZXMKLSAqIGFuZCBtYWNyb3Mgc3VjaCBhcyBfX0ZVTkNUSU9OX18uCisgKiBhbmQgbWFjcm9zIHN1Y2ggYXMgX19mdW5jX18uCiAgKi8KICNkZWZpbmUgQUNQSV9GVU5DVElPTl9OQU1FKG5hbWUpCXN0YXRpYyBjb25zdCBjaGFyIF9hY3BpX2Z1bmN0aW9uX25hbWVbXSA9ICNuYW1lOwogCiAjZWxzZQotLyogQ29tcGlsZXIgc3VwcG9ydHMgX19GVU5DVElPTl9fIChvciBlcXVpdmFsZW50KSAtLSBJZ25vcmUgdGhpcyBtYWNybyAqLworLyogQ29tcGlsZXIgc3VwcG9ydHMgX19mdW5jX18gKG9yIGVxdWl2YWxlbnQpIC0tIElnbm9yZSB0aGlzIG1hY3JvICovCiAKICNkZWZpbmUgQUNQSV9GVU5DVElPTl9OQU1FKG5hbWUpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2djYy5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKaW5kZXggODk5NmRiYS4uOGUyY2RjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogLyogRnVuY3Rpb24gbmFtZSBpcyB1c2VkIGZvciBkZWJ1ZyBvdXRwdXQuIE5vbi1BTlNJLCBjb21waWxlci1kZXBlbmRlbnQgKi8KIAotI2RlZmluZSBBQ1BJX0dFVF9GVU5DVElPTl9OQU1FICAgICAgICAgIF9fRlVOQ1RJT05fXworI2RlZmluZSBBQ1BJX0dFVF9GVU5DVElPTl9OQU1FICAgICAgICAgIF9fZnVuY19fCiAKIC8qCiAgKiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gdGFnIGZ1bmN0aW9ucyBhcyAicHJpbnRmLWxpa2UiIGJlY2F1c2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL2RlYnVnLW1hY3JvLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YzQwYjguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL2RlYnVnLW1hY3JvLlMKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvZGVidWctbWFjcm8uUwotICoKLSAqIENvcHlyaWdodCAyMDA1LCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcwotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgotCi0vKiBUaGUgUzNDMjQ0MCBpbXBsZW1lbnRhdGlvbnMgYXJlIHVzZWQgYnkgZGVmYXVsdCBhcyB0aGV5IGFyZSB0aGUKLSAqIG1vc3Qgd2lkZWx5IHJlLXVzZWQgKi8KLQotCS5tYWNybyBmaWZvX2xldmVsX3MzYzI0NDAgcmQsIHJ4Ci0JCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVUZTVEFUIF0KLQkJYW5kCVxyZCwgXHJkLCAjUzNDMjQ0MF9VRlNUQVRfVFhNQVNLCi0JLmVuZG0KLQotI2lmbmRlZiBmaWZvX2xldmVsCi0jZGVmaW5lIGZpZm9fbGV2ZWwgZmlmb19sZXZlbF9zM2MyNDEwCi0jZW5kaWYKLQotCS5tYWNybyAgZmlmb19mdWxsX3MzYzI0NDAgcmQsIHJ4Ci0JCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVUZTVEFUIF0KLQkJdHN0CVxyZCwgI1MzQzI0NDBfVUZTVEFUX1RYRlVMTAotCS5lbmRtCi0KLSNpZm5kZWYgZmlmb19mdWxsCi0jZGVmaW5lIGZpZm9fZnVsbCBmaWZvX2Z1bGxfczNjMjQ0MAotI2VuZGlmCi0KLQkubWFjcm8Jc2VuZHVhcnQscmQscngKLQkJc3RyYiAJXHJkLCBbXHJ4LCAjIFMzQzI0MTBfVVRYSCBdCi0JLmVuZG0KLQotCS5tYWNybwlidXN5dWFydCwgcmQsIHJ4Ci0JCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVUZDT04gXQotCQl0c3QJXHJkLCAjUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQlAIGZpZm8gZW5hYmxlZD8KLQkJYmVxCTEwMDFmCQkJCUAKLQkJQCBGSUZPIGVuYWJsZWQuLi4KLTEwMDM6Ci0JCWZpZm9fZnVsbCBccmQsIFxyeAotCQlibmUJMTAwM2IKLQkJYgkxMDAyZgotCi0xMDAxOgotCQlAIGJ1c3kgd2FpdGluZyBmb3Igbm9uIGZpZm8KLQkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VVFJTVEFUIF0KLQkJdHN0CVxyZCwgI1MzQzI0MTBfVVRSU1RBVF9UWEZFCi0JCWJlcQkxMDAxYgotCi0xMDAyOgkJQCBleGl0IGJ1c3l1YXJ0Ci0JLmVuZG0KLQotCS5tYWNybwl3YWl0dWFydCxyZCxyeAotCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VGQ09OIF0KLQkJdHN0CVxyZCwgI1MzQzI0MTBfVUZDT05fRklGT01PREUJQCBmaWZvIGVuYWJsZWQ/Ci0JCWJlcQkxMDAxZgkJCQlACi0JCUAgRklGTyBlbmFibGVkLi4uCi0xMDAzOgotCQlmaWZvX2xldmVsIFxyZCwgXHJ4Ci0JCXRlcQlccmQsICMwCi0JCWJuZQkxMDAzYgotCQliCTEwMDJmCi0xMDAxOgotCQlAIGlkbGUgd2FpdGluZyBmb3Igbm9uIGZpZm8KLQkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VVFJTVEFUIF0KLQkJdHN0CVxyZCwgI1MzQzI0MTBfVVRSU1RBVF9UWEZFCi0JCWJlcQkxMDAxYgotCi0xMDAyOgkJQCBleGl0IGJ1c3l1YXJ0Ci0JLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvdW5jb21wcmVzcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWI5ZWRhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy91bmNvbXByZXNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3VuY29tcHJlc3MuaAotICoKLSAqIENvcHlyaWdodCAyMDAzLCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcwotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBTM0MgLSB1bmNvbXByZXNzIGNvZGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2lmbmRlZiBfX0FTTV9QTEFUX1VOQ09NUFJFU1NfSAotI2RlZmluZSBfX0FTTV9QTEFUX1VOQ09NUFJFU1NfSAotCi10eXBlZGVmIHVuc2lnbmVkIGludCB1cGZfdDsJLyogY2Fubm90IGluY2x1ZGUgbGludXgvc2VyaWFsX2NvcmUuaCAqLwotCi0vKiB1YXJ0IHNldHVwICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmlmb19tYXNrOwotc3RhdGljIHVuc2lnbmVkIGludCBmaWZvX21heDsKLQotLyogZm9yd2FyZCBkZWNsZXJhdGlvbnMgKi8KLQotc3RhdGljIHZvaWQgYXJjaF9kZXRlY3RfY3B1KHZvaWQpOwotCi0vKiBkZWZpbmVzIGZvciBVQVJUIHJlZ2lzdGVycyAqLwotCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtd2F0Y2hkb2cuaD4KLQotLyogd29ya2luZyBpbiBwaHlzaWNhbCBzcGFjZS4uLiAqLwotI3VuZGVmIFMzQzI0MTBfV0RPR1JFRwotI2RlZmluZSBTM0MyNDEwX1dET0dSRUcoeCkgKChTM0MyNFhYX1BBX1dBVENIRE9HICsgKHgpKSkKLQotLyogaG93IG1hbnkgYnl0ZXMgd2UgYWxsb3cgaW50byB0aGUgRklGTyBhdCBhIHRpbWUgaW4gRklGTyBtb2RlICovCi0jZGVmaW5lIEZJRk9fTUFYCSAoMTQpCi0KLSNkZWZpbmUgdWFydF9iYXNlIFMzQzI0WFhfUEFfVUFSVCArICgweDQwMDAqQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQpCi0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLXVhcnRfd3IodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnB0cjsKLQotCXB0ciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikocmVnICsgdWFydF9iYXNlKTsKLQkqcHRyID0gdmFsOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQKLXVhcnRfcmQodW5zaWduZWQgaW50IHJlZykKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnB0cjsKLQotCXB0ciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikocmVnICsgdWFydF9iYXNlKTsKLQlyZXR1cm4gKnB0cjsKLX0KLQotLyogd2UgY2FuIGRlYWwgd2l0aCB0aGUgY2FzZSB0aGUgVUFSVHMgYXJlIGJlaW5nIHJ1bgotICogaW4gRklGTyBtb2RlLCBzbyB0aGF0IHdlIGRvbid0IGhvbGQgdXAgb3VyIGV4ZWN1dGlvbgotICogd2FpdGluZyBmb3IgdHggdG8gaGFwcGVuLi4uCi0qLwotCi1zdGF0aWMgdm9pZCBwdXRjKGludCBjaCkKLXsKLQlpZiAodWFydF9yZChTM0MyNDEwX1VGQ09OKSAmIFMzQzI0MTBfVUZDT05fRklGT01PREUpIHsKLQkJaW50IGxldmVsOwotCi0JCXdoaWxlICgxKSB7Ci0JCQlsZXZlbCA9IHVhcnRfcmQoUzNDMjQxMF9VRlNUQVQpOwotCQkJbGV2ZWwgJj0gZmlmb19tYXNrOwotCi0JCQlpZiAobGV2ZWwgPCBmaWZvX21heCkKLQkJCQlicmVhazsKLQkJfQotCi0JfSBlbHNlIHsKLQkJLyogbm90IHVzaW5nIGZpZm9zICovCi0KLQkJd2hpbGUgKCh1YXJ0X3JkKFMzQzI0MTBfVVRSU1RBVCkgJiBTM0MyNDEwX1VUUlNUQVRfVFhFKSAhPSBTM0MyNDEwX1VUUlNUQVRfVFhFKQotCQkJYmFycmllcigpOwotCX0KLQotCS8qIHdyaXRlIGJ5dGUgdG8gdHJhbnNtaXNzaW9uIHJlZ2lzdGVyICovCi0JdWFydF93cihTM0MyNDEwX1VUWEgsIGNoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCi17Ci19Ci0KLSNkZWZpbmUgX19yYXdfd3JpdGVsKGQsYWQpIGRvIHsgKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKGFkKSkgPSAoZCk7IH0gd2hpbGUoMCkKLQotLyogQ09ORklHX1MzQ19CT09UX1dBVENIRE9HCi0gKgotICogU2ltcGxlIGJvb3QtdGltZSB3YXRjaGRvZyBzZXR1cCwgdG8gcmVib290IHRoZSBzeXN0ZW0gaWYgdGhlcmUgaXMKLSAqIGFueSBwcm9ibGVtIHdpdGggdGhlIGJvb3QgcHJvY2VzcwotKi8KLQotI2lmZGVmIENPTkZJR19TM0NfQk9PVF9XQVRDSERPRwotCi0jZGVmaW5lIFdET0dfQ09VTlQgKDB4ZmYwMCkKLQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3dkb2codm9pZCkKLXsKLQlfX3Jhd193cml0ZWwoV0RPR19DT1VOVCwgUzNDMjQxMF9XVENOVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyY2hfZGVjb21wX3dkb2dfc3RhcnQodm9pZCkKLXsKLQlfX3Jhd193cml0ZWwoV0RPR19DT1VOVCwgUzNDMjQxMF9XVERBVCk7Ci0JX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1RDTlQpOwotCV9fcmF3X3dyaXRlbChTM0MyNDEwX1dUQ09OX0VOQUJMRSB8IFMzQzI0MTBfV1RDT05fRElWMTI4IHwgUzNDMjQxMF9XVENPTl9SU1RFTiB8IFMzQzI0MTBfV1RDT05fUFJFU0NBTEUoMHg4MCksIFMzQzI0MTBfV1RDT04pOwotfQotCi0jZWxzZQotI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nX3N0YXJ0KCkKLSNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19TM0NfQk9PVF9FUlJPUl9SRVNFVAotCi1zdGF0aWMgdm9pZCBhcmNoX2RlY29tcF9lcnJvcihjb25zdCBjaGFyICp4KQotewotCXB1dHN0cigiXG5cbiIpOwotCXB1dHN0cih4KTsKLQlwdXRzdHIoIlxuXG4gLS0gU3lzdGVtIHJlc2V0dGluZ1xuIik7Ci0KLQlfX3Jhd193cml0ZWwoMHg0MDAwLCBTM0MyNDEwX1dUREFUKTsKLQlfX3Jhd193cml0ZWwoMHg0MDAwLCBTM0MyNDEwX1dUQ05UKTsKLQlfX3Jhd193cml0ZWwoUzNDMjQxMF9XVENPTl9FTkFCTEUgfCBTM0MyNDEwX1dUQ09OX0RJVjEyOCB8IFMzQzI0MTBfV1RDT05fUlNURU4gfCBTM0MyNDEwX1dUQ09OX1BSRVNDQUxFKDB4NDApLCBTM0MyNDEwX1dUQ09OKTsKLQotCXdoaWxlKDEpOwotfQotCi0jZGVmaW5lIGFyY2hfZXJyb3IgYXJjaF9kZWNvbXBfZXJyb3IKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBlcnJvcihjaGFyICplcnIpOwotCi1zdGF0aWMgdm9pZAotYXJjaF9kZWNvbXBfc2V0dXAodm9pZCkKLXsKLQkvKiB3ZSBtYXkgbmVlZCB0byBzZXR1cCB0aGUgdWFydChzKSBoZXJlIGlmIHdlIGFyZSBub3QgcnVubmluZwotCSAqIG9uIGFuIEJBU1QuLi4gdGhlIEJBU1Qgd2lsbCBoYXZlIGxlZnQgdGhlIHVhcnRzIGNvbmZpZ3VyZWQKLQkgKiBhZnRlciBjYWxsaW5nIGxpbnV4LgotCSAqLwotCi0JYXJjaF9kZXRlY3RfY3B1KCk7Ci0JYXJjaF9kZWNvbXBfd2RvZ19zdGFydCgpOwotfQotCi0KLSNlbmRpZiAvKiBfX0FTTV9QTEFUX1VOQ09NUFJFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hLm91dC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hLm91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODJlOWY5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYS5vdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSNpZm5kZWYgX19DUklTX0FfT1VUX0hfXwotI2RlZmluZSBfX0NSSVNfQV9PVVRfSF9fCi0KLS8qIHdlIGRvbid0IHN1cHBvcnQgYS5vdXQgYmluYXJpZXMgb24gTGludXgvQ1JJUyBhbnl3YXksIHNvIHRoaXMgaXMKLSAqIG5vdCByZWFsbHkgdXNlZCBidXQgc3RpbGwgbmVlZGVkIGJlY2F1c2UgYmluZm10X2VsZi5jIGZvciBzb21lIHJlYXNvbgotICogd2FudHMgdG8ga25vdyBhYm91dCBhLm91dCBldmVuIGlmIHRoZXJlIGlzIG5vIGludGVycHJldGVyIGF2YWlsYWJsZS4uLgotICovCi0KLXN0cnVjdCBleGVjCi17Ci0gIHVuc2lnbmVkIGxvbmcgYV9pbmZvOwkJLyogVXNlIG1hY3JvcyBOX01BR0lDLCBldGMgZm9yIGFjY2VzcyAqLwotICB1bnNpZ25lZCBhX3RleHQ7CQkvKiBsZW5ndGggb2YgdGV4dCwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9kYXRhOwkJLyogbGVuZ3RoIG9mIGRhdGEsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfYnNzOwkJLyogbGVuZ3RoIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmVhIGZvciBmaWxlLCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX3N5bXM7CQkvKiBsZW5ndGggb2Ygc3ltYm9sIHRhYmxlIGRhdGEgaW4gZmlsZSwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9lbnRyeTsJCS8qIHN0YXJ0IGFkZHJlc3MgKi8KLSAgdW5zaWduZWQgYV90cnNpemU7CQkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciB0ZXh0LCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIGRhdGEsIGluIGJ5dGVzICovCi19OwotCi0KLSNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKLSNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKLSNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvZWxmLmggYi9pbmNsdWRlL2FzbS1jcmlzL2VsZi5oCmluZGV4IDAwMWY2NGEuLmYwZDE3ZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9lbGYuaApAQCAtODgsNiArODgsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tY3Jpcy90aHJlYWRfaW5mby5oCmluZGV4IDdlZmUxMDAuLmNlZTk3ZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3RocmVhZF9pbmZvLmgKQEAgLTg4LDYgKzg4LDcgQEAKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk5CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTE3CisjZGVmaW5lIFRJRl9GUkVFWkUJCTE4CS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKQEAgLTk1LDYgKzk2LDcgQEAKICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJMHgwMDAwRkZGRQkvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCiAjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLCTB4MDAwMEZGRkYJLyogd29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHUtc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9lbGYuaCBiL2luY2x1ZGUvYXNtLWZydi9lbGYuaAppbmRleCA5ZmI5NDZiLi43Mjc5ZWMwN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvZWxmLmgKQEAgLTEzNyw2ICsxMzcsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oIGIvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCmluZGV4IDdlYmNjNTYuLjM2MTA3NjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvaWRlLmgKQEAgLTE4LDE1ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBzb21lIGJpdHMgbmVlZGVkIGZvciBwYXJ0cyBvZiB0aGUgSURFIHN1YnN5c3RlbSB0byBjb21waWxlCi0gKi8KLSNkZWZpbmUgX19pZGVfbW1faW5zdyhwb3J0LCBhZGRyLCBuKQlpbnN3KCh1bnNpZ25lZCBsb25nKSAocG9ydCksIGFkZHIsIG4pCi0jZGVmaW5lIF9faWRlX21tX2luc2wocG9ydCwgYWRkciwgbikJaW5zbCgodW5zaWduZWQgbG9uZykgKHBvcnQpLCBhZGRyLCBuKQotI2RlZmluZSBfX2lkZV9tbV9vdXRzdyhwb3J0LCBhZGRyLCBuKQlvdXRzdygodW5zaWduZWQgbG9uZykgKHBvcnQpLCBhZGRyLCBuKQotI2RlZmluZSBfX2lkZV9tbV9vdXRzbChwb3J0LCBhZGRyLCBuKQlvdXRzbCgodW5zaWduZWQgbG9uZykgKHBvcnQpLCBhZGRyLCBuKQotCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1mcnYvdW5hbGlnbmVkLmgKaW5kZXggODM5YTJmYi4uNmM2MWMwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3VuYWxpZ25lZC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi91bmFsaWduZWQuaApAQCAtMTMsNyArMTMsNyBAQAogI2RlZmluZSBfQVNNX1VOQUxJR05FRF9ICiAKICNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvbGVfYnl0ZXNoaWZ0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2JlX2J5dGVzaGlmdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9iZV9zdHJ1Y3QuaD4KICNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgogCiAjZGVmaW5lIGdldF91bmFsaWduZWQJX19nZXRfdW5hbGlnbmVkX2JlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaAppbmRleCBlZGM2YmE4Li4wZjZkYWJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2lmbmRlZiBIQVZFX0FSQ0hfQlVHCiAjZGVmaW5lIEJVRygpIGRvIHsgXAotCXByaW50aygiQlVHOiBmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7IFwKKwlwcmludGsoIkJVRzogZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7IFwKIAlwYW5pYygiQlVHISIpOyBcCiB9IHdoaWxlICgwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCmluZGV4IDBmOTlhZDMuLjgxNzk3ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCkBAIC0zNSwxMSArMzUsMTcgQEAKICAqIEBsYWJlbDogZm9yIGRpYWdub3N0aWNzCiAgKiBAZGV2OiBvcHRpb25hbCBkZXZpY2UgcHJvdmlkaW5nIHRoZSBHUElPcwogICogQG93bmVyOiBoZWxwcyBwcmV2ZW50IHJlbW92YWwgb2YgbW9kdWxlcyBleHBvcnRpbmcgYWN0aXZlIEdQSU9zCisgKiBAcmVxdWVzdDogb3B0aW9uYWwgaG9vayBmb3IgY2hpcC1zcGVjaWZpYyBhY3RpdmF0aW9uLCBzdWNoIGFzCisgKgllbmFibGluZyBtb2R1bGUgcG93ZXIgYW5kIGNsb2NrOyBtYXkgc2xlZXAKKyAqIEBmcmVlOiBvcHRpb25hbCBob29rIGZvciBjaGlwLXNwZWNpZmljIGRlYWN0aXZhdGlvbiwgc3VjaCBhcworICoJZGlzYWJsaW5nIG1vZHVsZSBwb3dlciBhbmQgY2xvY2s7IG1heSBzbGVlcAogICogQGRpcmVjdGlvbl9pbnB1dDogY29uZmlndXJlcyBzaWduYWwgIm9mZnNldCIgYXMgaW5wdXQsIG9yIHJldHVybnMgZXJyb3IKICAqIEBnZXQ6IHJldHVybnMgdmFsdWUgZm9yIHNpZ25hbCAib2Zmc2V0IjsgZm9yIG91dHB1dCBzaWduYWxzIHRoaXMKICAqCXJldHVybnMgZWl0aGVyIHRoZSB2YWx1ZSBhY3R1YWxseSBzZW5zZWQsIG9yIHplcm8KICAqIEBkaXJlY3Rpb25fb3V0cHV0OiBjb25maWd1cmVzIHNpZ25hbCAib2Zmc2V0IiBhcyBvdXRwdXQsIG9yIHJldHVybnMgZXJyb3IKICAqIEBzZXQ6IGFzc2lnbnMgb3V0cHV0IHZhbHVlIGZvciBzaWduYWwgIm9mZnNldCIKKyAqIEB0b19pcnE6IG9wdGlvbmFsIGhvb2sgc3VwcG9ydGluZyBub24tc3RhdGljIGdwaW9fdG9faXJxKCkgbWFwcGluZ3M7CisgKglpbXBsZW1lbnRhdGlvbiBtYXkgbm90IHNsZWVwCiAgKiBAZGJnX3Nob3c6IG9wdGlvbmFsIHJvdXRpbmUgdG8gc2hvdyBjb250ZW50cyBpbiBkZWJ1Z2ZzOyBkZWZhdWx0IGNvZGUKICAqCXdpbGwgYmUgdXNlZCB3aGVuIHRoaXMgaXMgb21pdHRlZCwgYnV0IGN1c3RvbSBjb2RlIGNhbiBzaG93IGV4dHJhCiAgKglzdGF0ZSAoc3VjaCBhcyBwdWxsdXAvcHVsbGRvd24gY29uZmlndXJhdGlvbikuCkBAIC02MSwxMCArNjcsMTUgQEAKICAqIGlzIGNhbGN1bGF0ZWQgYnkgc3VidHJhY3RpbmcgQGJhc2UgZnJvbSB0aGUgZ3BpbyBudW1iZXIuCiAgKi8KIHN0cnVjdCBncGlvX2NoaXAgewotCWNoYXIJCQkqbGFiZWw7CisJY29uc3QgY2hhcgkJKmxhYmVsOwogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwogCisJaW50CQkJKCpyZXF1ZXN0KShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQkJdW5zaWduZWQgb2Zmc2V0KTsKKwl2b2lkCQkJKCpmcmVlKShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQkJdW5zaWduZWQgb2Zmc2V0KTsKKwogCWludAkJCSgqZGlyZWN0aW9uX2lucHV0KShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAogCQkJCQkJdW5zaWduZWQgb2Zmc2V0KTsKIAlpbnQJCQkoKmdldCkoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKQEAgLTczLDYgKzg0LDEwIEBACiAJCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSk7CiAJdm9pZAkJCSgqc2V0KShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAogCQkJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpOworCisJaW50CQkJKCp0b19pcnEpKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCQl1bnNpZ25lZCBvZmZzZXQpOworCiAJdm9pZAkJCSgqZGJnX3Nob3cpKHN0cnVjdCBzZXFfZmlsZSAqcywKIAkJCQkJCXN0cnVjdCBncGlvX2NoaXAgKmNoaXApOwogCWludAkJCWJhc2U7CkBAIC0xMTIsNiArMTI3LDcgQEAKIAogZXh0ZXJuIGludCBfX2dwaW9fY2Fuc2xlZXAodW5zaWduZWQgZ3Bpbyk7CiAKK2V4dGVybiBpbnQgX19ncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKTsKIAogI2lmZGVmIENPTkZJR19HUElPX1NZU0ZTCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcnRjLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3J0Yy5oCmluZGV4IDcxZWYzZjAuLjg5MDYxYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcnRjLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ydGMuaApAQCAtODQsMTIgKzg0LDEyIEBACiAKIAlpZiAoIShjdHJsICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCiAJewotCQlCQ0RfVE9fQklOKHRpbWUtPnRtX3NlYyk7Ci0JCUJDRF9UT19CSU4odGltZS0+dG1fbWluKTsKLQkJQkNEX1RPX0JJTih0aW1lLT50bV9ob3VyKTsKLQkJQkNEX1RPX0JJTih0aW1lLT50bV9tZGF5KTsKLQkJQkNEX1RPX0JJTih0aW1lLT50bV9tb24pOwotCQlCQ0RfVE9fQklOKHRpbWUtPnRtX3llYXIpOworCQl0aW1lLT50bV9zZWMgPSBiY2QyYmluKHRpbWUtPnRtX3NlYyk7CisJCXRpbWUtPnRtX21pbiA9IGJjZDJiaW4odGltZS0+dG1fbWluKTsKKwkJdGltZS0+dG1faG91ciA9IGJjZDJiaW4odGltZS0+dG1faG91cik7CisJCXRpbWUtPnRtX21kYXkgPSBiY2QyYmluKHRpbWUtPnRtX21kYXkpOworCQl0aW1lLT50bV9tb24gPSBiY2QyYmluKHRpbWUtPnRtX21vbik7CisJCXRpbWUtPnRtX3llYXIgPSBiY2QyYmluKHRpbWUtPnRtX3llYXIpOwogCX0KIAogI2lmZGVmIENPTkZJR19NQUNIX0RFQ1NUQVRJT04KQEAgLTE1OSwxMiArMTU5LDEyIEBACiAKIAlpZiAoIShDTU9TX1JFQUQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkKIAkgICAgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQklOX1RPX0JDRChzZWMpOwotCQlCSU5fVE9fQkNEKG1pbik7Ci0JCUJJTl9UT19CQ0QoaHJzKTsKLQkJQklOX1RPX0JDRChkYXkpOwotCQlCSU5fVE9fQkNEKG1vbik7Ci0JCUJJTl9UT19CQ0QoeXJzKTsKKwkJc2VjID0gYmluMmJjZChzZWMpOworCQltaW4gPSBiaW4yYmNkKG1pbik7CisJCWhycyA9IGJpbjJiY2QoaHJzKTsKKwkJZGF5ID0gYmluMmJjZChkYXkpOworCQltb24gPSBiaW4yYmNkKG1vbik7CisJCXlycyA9IGJpbjJiY2QoeXJzKTsKIAl9CiAKIAlzYXZlX2NvbnRyb2wgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmgKaW5kZXggMWQwMTA0My4uNjEyOWQ2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oCkBAIC02LDMzICs2LDY0IEBACiB0eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAlmc2lkX3Q7CiAjZW5kaWYKIAorLyoKKyAqIE1vc3QgNjQtYml0IHBsYXRmb3JtcyB1c2UgJ2xvbmcnLCB3aGlsZSBtb3N0IDMyLWJpdCBwbGF0Zm9ybXMgdXNlICdfX3UzMicuCisgKiBZZXMsIHRoZXkgZGlmZmVyIGluIHNpZ25lZG5lc3MgYXMgd2VsbCBhcyBzaXplLgorICogU3BlY2lhbCBjYXNlcyBjYW4gb3ZlcnJpZGUgaXQgZm9yIHRoZW1zZWx2ZXMgLS0gZXhjZXB0IGZvciBTMzkweCwgd2hpY2gKKyAqIGlzIGp1c3QgYSBsaXR0bGUgdG9vIHNwZWNpYWwgZm9yIHVzLiBBbmQgTUlQUywgd2hpY2ggSSdtIG5vdCB0b3VjaGluZworICogd2l0aCBhIDEwJyBwb2xlLgorICovCisjaWZuZGVmIF9fc3RhdGZzX3dvcmQKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisjZGVmaW5lIF9fc3RhdGZzX3dvcmQgbG9uZworI2Vsc2UKKyNkZWZpbmUgX19zdGF0ZnNfd29yZCBfX3UzMgorI2VuZGlmCisjZW5kaWYKKwogc3RydWN0IHN0YXRmcyB7Ci0JX191MzIgZl90eXBlOwotCV9fdTMyIGZfYnNpemU7Ci0JX191MzIgZl9ibG9ja3M7Ci0JX191MzIgZl9iZnJlZTsKLQlfX3UzMiBmX2JhdmFpbDsKLQlfX3UzMiBmX2ZpbGVzOwotCV9fdTMyIGZfZmZyZWU7CisJX19zdGF0ZnNfd29yZCBmX3R5cGU7CisJX19zdGF0ZnNfd29yZCBmX2JzaXplOworCV9fc3RhdGZzX3dvcmQgZl9ibG9ja3M7CisJX19zdGF0ZnNfd29yZCBmX2JmcmVlOworCV9fc3RhdGZzX3dvcmQgZl9iYXZhaWw7CisJX19zdGF0ZnNfd29yZCBmX2ZpbGVzOworCV9fc3RhdGZzX3dvcmQgZl9mZnJlZTsKIAlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotCV9fdTMyIGZfbmFtZWxlbjsKLQlfX3UzMiBmX2Zyc2l6ZTsKLQlfX3UzMiBmX3NwYXJlWzVdOworCV9fc3RhdGZzX3dvcmQgZl9uYW1lbGVuOworCV9fc3RhdGZzX3dvcmQgZl9mcnNpemU7CisJX19zdGF0ZnNfd29yZCBmX3NwYXJlWzVdOwogfTsKIAorLyoKKyAqIEFSTSBuZWVkcyB0byBhdm9pZCB0aGUgMzItYml0IHBhZGRpbmcgYXQgdGhlIGVuZCwgZm9yIGNvbnNpc3RlbmN5CisgKiBiZXR3ZWVuIEVBQkkgYW5kIE9BQkkgCisgKi8KKyNpZm5kZWYgQVJDSF9QQUNLX1NUQVRGUzY0CisjZGVmaW5lIEFSQ0hfUEFDS19TVEFURlM2NAorI2VuZGlmCisKIHN0cnVjdCBzdGF0ZnM2NCB7Ci0JX191MzIgZl90eXBlOwotCV9fdTMyIGZfYnNpemU7CisJX19zdGF0ZnNfd29yZCBmX3R5cGU7CisJX19zdGF0ZnNfd29yZCBmX2JzaXplOwogCV9fdTY0IGZfYmxvY2tzOwogCV9fdTY0IGZfYmZyZWU7CiAJX191NjQgZl9iYXZhaWw7CiAJX191NjQgZl9maWxlczsKIAlfX3U2NCBmX2ZmcmVlOwogCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JX191MzIgZl9uYW1lbGVuOwotCV9fdTMyIGZfZnJzaXplOwotCV9fdTMyIGZfc3BhcmVbNV07Ci19OworCV9fc3RhdGZzX3dvcmQgZl9uYW1lbGVuOworCV9fc3RhdGZzX3dvcmQgZl9mcnNpemU7CisJX19zdGF0ZnNfd29yZCBmX3NwYXJlWzVdOworfSBBUkNIX1BBQ0tfU1RBVEZTNjQ7CisKKy8qIAorICogSUE2NCBhbmQgeDg2XzY0IG5lZWQgdG8gYXZvaWQgdGhlIDMyLWJpdCBwYWRkaW5nIGF0IHRoZSBlbmQsCisgKiB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGkzODYgQUJJCisgKi8KKyNpZm5kZWYgQVJDSF9QQUNLX0NPTVBBVF9TVEFURlM2NAorI2RlZmluZSBBUkNIX1BBQ0tfQ09NUEFUX1NUQVRGUzY0CisjZW5kaWYKIAogc3RydWN0IGNvbXBhdF9zdGF0ZnM2NCB7CiAJX191MzIgZl90eXBlOwpAQCAtNDYsNiArNzcsNiBAQAogCV9fdTMyIGZfbmFtZWxlbjsKIAlfX3UzMiBmX2Zyc2l6ZTsKIAlfX3UzMiBmX3NwYXJlWzVdOwotfTsKK30gQVJDSF9QQUNLX0NPTVBBVF9TVEFURlM2NDsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggODM4ZDliMi4uODA3NDQ2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtMjgwLDcgKzI4MCwxNSBAQAogCUNQVV9ESVNDQVJEKGluaXQuZGF0YSkJCQkJCQlcCiAJQ1BVX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCiAJTUVNX0RJU0NBUkQoaW5pdC5kYXRhKQkJCQkJCVwKLQlNRU1fRElTQ0FSRChpbml0LnJvZGF0YSkKKwlNRU1fRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKKwkvKiBpbXBsZW1lbnQgZHluYW1pYyBwcmludGsgZGVidWcgKi8JCQkJXAorCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICBcCisJKihfX3ZlcmJvc2Vfc3RyaW5ncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICAgXAorCS4gPSBBTElHTig4KTsJCQkJCQkJXAorCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlKSA9IC47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKihfX3ZlcmJvc2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlKSA9IC47CiAKICNkZWZpbmUgSU5JVF9URVhUCQkJCQkJCVwKIAkqKC5pbml0LnRleHQpCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3RpbWVyLmggYi9pbmNsdWRlL2FzbS1oODMwMC90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZjgwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC90aW1lci5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX19IODMwMF9USU1FUl9ICisjZGVmaW5lIF9fSDgzMDBfVElNRVJfSAorCit2b2lkIGg4MzAwX3RpbWVyX3RpY2sodm9pZCk7Cit2b2lkIGg4MzAwX3RpbWVyX3NldHVwKHZvaWQpOwordm9pZCBoODMwMF9nZXR0b2QodW5zaWduZWQgaW50ICp5ZWFyLCB1bnNpZ25lZCBpbnQgKm1vbiwgdW5zaWduZWQgaW50ICpkYXksCisJCSAgIHVuc2lnbmVkIGludCAqaG91ciwgdW5zaWduZWQgaW50ICptaW4sIHVuc2lnbmVkIGludCAqc2VjKTsKKworI2RlZmluZSBUSU1FUl9GUkVRIChDT05GSUdfQ1BVX0NMT0NLKjEwMDAwKSAvKiBUaW1lciBpbnB1dCBmcmVxLiAqLworCisjZGVmaW5lIGNhbGNfcGFyYW0oY250LCBkaXYsIHJhdGUsIGxpbWl0KQkJCVwKK2RvIHsJCQkJCQkJCVwKKwljbnQgPSBUSU1FUl9GUkVRIC8gSFo7CQkJCQlcCisJZm9yIChkaXYgPSAwOyBkaXYgPCBBUlJBWV9TSVpFKGRpdmlkZV9yYXRlKTsgZGl2KyspIHsJXAorCQlpZiAocmF0ZVtkaXZdID09IDApCQkJCVwKKwkJCWNvbnRpbnVlOwkJCQlcCisJCWlmICgoY250IC8gcmF0ZVtkaXZdKSA+IGxpbWl0KQkJCVwKKwkJCWJyZWFrOwkJCQkJXAorCX0JCQkJCQkJXAorCWlmIChkaXYgPT0gQVJSQVlfU0laRShkaXZpZGVfcmF0ZSkpCQkJXAorCQlwYW5pYygiVGltZXIgY291bnRlciBvdmVyZmxvdyIpOwkJXAorCWNudCAvPSBkaXZpZGVfcmF0ZVtkaXZdOwkJCQlcCit9IHdoaWxlKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9hLm91dC5oIGIvaW5jbHVkZS9hc20tbTMyci9hLm91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjE1MGY1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvYS5vdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NMzJSX0FfT1VUX0gKLSNkZWZpbmUgX0FTTV9NMzJSX0FfT1VUX0gKLQotc3RydWN0IGV4ZWMKLXsKLSAgdW5zaWduZWQgbG9uZyBhX2luZm87CQkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCi0gIHVuc2lnbmVkIGFfdGV4dDsJCS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2RhdGE7CQkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfc3ltczsJCS8qIGxlbmd0aCBvZiBzeW1ib2wgdGFibGUgZGF0YSBpbiBmaWxlLCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2VudHJ5OwkJLyogc3RhcnQgYWRkcmVzcyAqLwotICB1bnNpZ25lZCBhX3Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfZHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgZGF0YSwgaW4gYnl0ZXMgKi8KLX07Ci0KLSNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKLSNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKLSNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQotCi0jZW5kaWYgLyogX0FTTV9NMzJSX0FfT1VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvZWxmLmggYi9pbmNsdWRlL2FzbS1tMzJyL2VsZi5oCmluZGV4IDY3YmNkNzcuLjBjYzM0YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9lbGYuaApAQCAtMTI5LDYgKzEyOSw2IEBACiAgICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4gICovCiAjZGVmaW5lIEVMRl9QTEFURk9STQkoTlVMTCkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZiAgLyogX0FTTV9NMzJSX19FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hdGFyaWh3LmggYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpaHcuaAppbmRleCBlY2YwMDdkLi4xNDEyYjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpaHcuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpaHcuaApAQCAtMzksNyArMzksNiBAQAogI2RlZmluZSBNQUNIX0lTX1RUCSgoYXRhcmlfbWNoX2Nvb2tpZSA+PiAxNikgPT0gQVRBUklfTUNIX1RUKQogI2RlZmluZSBNQUNIX0lTX0ZBTENPTgkoKGF0YXJpX21jaF9jb29raWUgPj4gMTYpID09IEFUQVJJX01DSF9GQUxDT04pCiAjZGVmaW5lIE1BQ0hfSVNfTUVEVVNBCShhdGFyaV9tY2hfdHlwZSA9PSBBVEFSSV9NQUNIX01FRFVTQSkKLSNkZWZpbmUgTUFDSF9JU19IQURFUwkoYXRhcmlfbWNoX3R5cGUgPT0gQVRBUklfTUFDSF9IQURFUykKICNkZWZpbmUgTUFDSF9JU19BQjQwCShhdGFyaV9tY2hfdHlwZSA9PSBBVEFSSV9NQUNIX0FCNDApCiAKIC8qIHZhbHVlcyBmb3IgYXRhcmlfc3dpdGNoZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLW02OGsvZG1hLW1hcHBpbmcuaAppbmRleCA5MWY3OTQ0Li4yNmY1MDU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9kbWEtbWFwcGluZy5oCkBAIC03NCw2ICs3NCwxNCBAQAogZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsCiAJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwogCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCS8qIGp1c3Qgc3luYyBldmVyeXRoaW5nIGZvciBub3cgKi8KKwlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9oYW5kbGUsIG9mZnNldCArIHNpemUsIGRpcmVjdGlvbik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlLAogCQkJCQkgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewpAQCAtODQsNiArOTIsMTQgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwkvKiBqdXN0IHN5bmMgZXZlcnl0aGluZyBmb3Igbm93ICovCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQgKyBzaXplLCBkaXJlY3Rpb24pOworfQorCiBzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9kbWEuaCBiL2luY2x1ZGUvYXNtLW02OGsvZG1hLmgKaW5kZXggZDBjOWU2MS4uNDI0MGZiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2RtYS5oCkBAIC0xMSwxMCArMTEsNiBAQAogZXh0ZXJuIGludCByZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQpOwkvKiByZXNlcnZlIGEgRE1BIGNoYW5uZWwgKi8KIGV4dGVybiB2b2lkIGZyZWVfZG1hKHVuc2lnbmVkIGludCBkbWFucik7CS8qIHJlbGVhc2UgaXQgYWdhaW4gKi8KIAotI2lmZGVmIENPTkZJR19QQ0kKLWV4dGVybiBpbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7Ci0jZWxzZQogI2RlZmluZSBpc2FfZG1hX2JyaWRnZV9idWdneSAgICAoMCkKLSNlbmRpZgogCiAjZW5kaWYgLyogX002OEtfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZWxmLmggYi9pbmNsdWRlL2FzbS1tNjhrL2VsZi5oCmluZGV4IDE0ZWE0MjE1Li4wYjBmNDllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZWxmLmgKQEAgLTExNCw2ICsxMTQsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9lbnRyeS5oIGIvaW5jbHVkZS9hc20tbTY4ay9lbnRyeS5oCmluZGV4IGY4ZjZiMTguLjUyMDJmNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvZW50cnkuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2VudHJ5LmgKQEAgLTMxLDcgKzMxLDcgQEAKICAqLwogCiAvKiB0aGUgZm9sbG93aW5nIG1hY3JvIGlzIHVzZWQgd2hlbiBlbmFibGluZyBpbnRlcnJ1cHRzICovCi0jaWYgZGVmaW5lZChNQUNIX0FUQVJJX09OTFkpICYmICFkZWZpbmVkKENPTkZJR19IQURFUykKKyNpZiBkZWZpbmVkKE1BQ0hfQVRBUklfT05MWSkKIAkvKiBibG9jayBvdXQgSFNZTkMgb24gdGhlIGF0YXJpICovCiAjZGVmaW5lIEFMTE9XSU5UCSh+MHg0MDApCiAjZGVmaW5lCU1BWF9OT0lOVF9JUEwJMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9pZGUuaCBiL2luY2x1ZGUvYXNtLW02OGsvaWRlLmgKaW5kZXggMWRhZjZjYi4uYjk5NmEzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2lkZS5oCkBAIC05MiwxNSArOTIsNiBAQAogI2RlZmluZSBvdXRzd19zd2Fwdyhwb3J0LCBhZGRyLCBuKQlyYXdfb3V0c3dfc3dhcHcoKHUxNiAqKXBvcnQsIGFkZHIsIG4pCiAjZW5kaWYKIAotCi0vKiBRNDAgYW5kIEF0YXJpIGhhdmUgYnl0ZXN3YXBwZWQgSURFIGJ1c3NlcyBhbmQgc2luY2UgbWFueSBpbnRlcmVzdGluZwotICogdmFsdWVzIGluIHRoZSBpZGVudGlmaWNhdGlvbiBzdHJpbmcgYXJlIHRleHQsIGNoYXJzIGFuZCB3b3JkcyB0aGV5Ci0gKiBoYXBwZW5lZCB0byBiZSBhbG1vc3QgY29ycmVjdCB3aXRob3V0IHN3YXBwaW5nLi4gSG93ZXZlciAqX2NhcGFjaXR5Ci0gKiBpcyBuZWVkZWQgZm9yIGRyaXZlcyBvdmVyIDggR0IuIFJaICovCi0jaWYgZGVmaW5lZChDT05GSUdfUTQwKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkKLSNkZWZpbmUgTTY4S19JREVfU1dBUFcgIChNQUNIX0lTX1E0MCB8fCBNQUNIX0lTX0FUQVJJKQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQkxLX0RFVl9GQUxDT05fSURFCiAjZGVmaW5lIElERV9BUkNIX0xPQ0sKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9pby5oIGIvaW5jbHVkZS9hc20tbTY4ay9pby5oCmluZGV4IDY1NzE4N2YuLjllNjczZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2lvLmgKQEAgLTcsMTUgKzcsMTIgQEAKICAqICAgICAgICAgICAgLSBhZGRlZCBza2VsZXRvbiBmb3IgR0ctSUkgYW5kIEFtaWdhIFBDTUNJQQogICogMi8zLzAxIFJaOiAtIG1vdmVkIGEgZmV3IG1vcmUgZGVmcyBpbnRvIHJhd19pby5oCiAgKgotICogaW5YL291dFgvcmVhZFgvd3JpdGVYIHNob3VsZCBub3QgYmUgdXNlZCBieSBhbnkgZHJpdmVyIHVubGVzcyBpdCBkb2VzCi0gKiBJU0Egb3IgUENJIGFjY2Vzcy4gT3RoZXIgZHJpdmVycyBzaG91bGQgdXNlIGZ1bmN0aW9uIGRlZmluZWQgaW4gcmF3X2lvLmgKKyAqIGluWC9vdXRYIHNob3VsZCBub3QgYmUgdXNlZCBieSBhbnkgZHJpdmVyIHVubGVzcyBpdCBkb2VzCisgKiBJU0EgYWNjZXNzLiBPdGhlciBkcml2ZXJzIHNob3VsZCB1c2UgZnVuY3Rpb24gZGVmaW5lZCBpbiByYXdfaW8uaAogICogb3IgZGVmaW5lIGl0cyBvd24gbWFjcm9zIG9uIHRvcCBvZiB0aGVzZS4KICAqCi0gKiAgICBpblgoKSxvdXRYKCkgICAgICAgICAgICAgIGFyZSBmb3IgUENJIGFuZCBJU0EgSS9PCi0gKiAgICByZWFkWCgpLHdyaXRlWCgpICAgICAgICAgIGFyZSBmb3IgUENJIG1lbW9yeQorICogICAgaW5YKCksb3V0WCgpICAgICAgICAgICAgICBhcmUgZm9yIElTQSBJL08KICAqICAgIGlzYV9yZWFkWCgpLGlzYV93cml0ZVgoKSAgYXJlIGZvciBJU0EgbWVtb3J5Ci0gKgotICogbW92ZWQgbWVte2NweSxzZXR9XyppbyBpbnNpZGUgQ09ORklHX1BDSQogICovCiAKICNpZm5kZWYgX0lPX0gKQEAgLTI1NiwxMCArMjUzLDcgQEAKICAgICAgICAoSVNBX1NFWCA/IHJhd19vdXRzbChpc2FfaXRsKHBvcnQpLCAodTMyICopKGJ1ZiksIChucikpIDogIFwKICAgICAgICAgICAgICAgICAgIHJhd19vdXRzd19zd2Fwdyhpc2FfaXR3KHBvcnQpLCAodTE2ICopKGJ1ZiksIChucik8PDEpKQogCi0jZW5kaWYgIC8qIENPTkZJR19JU0EgKi8KIAotCi0jaWYgZGVmaW5lZChDT05GSUdfSVNBKSAmJiAhZGVmaW5lZChDT05GSUdfUENJKQogI2RlZmluZSBpbmIgICAgIGlzYV9pbmIKICNkZWZpbmUgaW5iX3AgICBpc2FfaW5iX3AKICNkZWZpbmUgb3V0YiAgICBpc2Ffb3V0YgpAQCAtMjgyLDU1ICsyNzYsOSBAQAogI2RlZmluZSByZWFkdyAgIGlzYV9yZWFkdwogI2RlZmluZSB3cml0ZWIgIGlzYV93cml0ZWIKICNkZWZpbmUgd3JpdGV3ICBpc2Ffd3JpdGV3Ci0jZW5kaWYgLyogQ09ORklHX0lTQSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQorI2Vsc2UgIC8qIENPTkZJR19JU0EgKi8KIAotI2RlZmluZSByZWFkbChhZGRyKSAgICAgIGluX2xlMzIoYWRkcikKLSNkZWZpbmUgd3JpdGVsKHZhbCxhZGRyKSBvdXRfbGUzMigoYWRkciksKHZhbCkpCi0KLS8qIHRob3NlIGNhbiBiZSBkZWZpbmVkIGZvciBib3RoIElTQSBhbmQgUENJIC0gaXQgd29uJ3Qgd29yayB0aG91Z2ggKi8KLSNkZWZpbmUgcmVhZGIoYWRkcikgICAgICAgaW5fOChhZGRyKQotI2RlZmluZSByZWFkdyhhZGRyKSAgICAgICBpbl9sZTE2KGFkZHIpCi0jZGVmaW5lIHdyaXRlYih2YWwsYWRkcikgIG91dF84KChhZGRyKSwodmFsKSkKLSNkZWZpbmUgd3JpdGV3KHZhbCxhZGRyKSAgb3V0X2xlMTYoKGFkZHIpLCh2YWwpKQotCi0jZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYWRkcikgcmVhZGIoYWRkcikKLSNkZWZpbmUgcmVhZHdfcmVsYXhlZChhZGRyKSByZWFkdyhhZGRyKQotI2RlZmluZSByZWFkbF9yZWxheGVkKGFkZHIpIHJlYWRsKGFkZHIpCi0KLSNpZm5kZWYgQ09ORklHX0lTQQotI2RlZmluZSBpbmIocG9ydCkgICAgICBpbl84KHBvcnQpCi0jZGVmaW5lIG91dGIodmFsLHBvcnQpIG91dF84KChwb3J0KSwodmFsKSkKLSNkZWZpbmUgaW53KHBvcnQpICAgICAgaW5fbGUxNihwb3J0KQotI2RlZmluZSBvdXR3KHZhbCxwb3J0KSBvdXRfbGUxNigocG9ydCksKHZhbCkpCi0jZGVmaW5lIGlubChwb3J0KSAgICAgIGluX2xlMzIocG9ydCkKLSNkZWZpbmUgb3V0bCh2YWwscG9ydCkgb3V0X2xlMzIoKHBvcnQpLCh2YWwpKQotCi0jZWxzZQotLyoKLSAqIGtlcm5lbCB3aXRoIGJvdGggSVNBIGFuZCBQQ0kgY29tcGlsZWQgaW4sIHRob3NlIGhhdmUKLSAqIGNvbmZsaWN0aW5nIGRlZnMgZm9yIGluL291dC4gU2ltcGx5IGNvbnNpZGVyIHBvcnQgPCAxMDI0Ci0gKiBJU0EgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBQQ0kuIHJlYWQsd3JpdGUgbm90IGRlZmluZWQKLSAqIGluIHRoaXMgY2FzZQotICovCi0jZGVmaW5lIGluYihwb3J0KSAoKHBvcnQpPDEwMjQgPyBpc2FfaW5iKHBvcnQpIDogaW5fOChwb3J0KSkKLSNkZWZpbmUgaW5iX3AocG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX2luYl9wKHBvcnQpIDogaW5fOChwb3J0KSkKLSNkZWZpbmUgaW53KHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9pbncocG9ydCkgOiBpbl9sZTE2KHBvcnQpKQotI2RlZmluZSBpbndfcChwb3J0KSAoKHBvcnQpPDEwMjQgPyBpc2FfaW53X3AocG9ydCkgOiBpbl9sZTE2KHBvcnQpKQotI2RlZmluZSBpbmwocG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX2lubChwb3J0KSA6IGluX2xlMzIocG9ydCkpCi0jZGVmaW5lIGlubF9wKHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9pbmxfcChwb3J0KSA6IGluX2xlMzIocG9ydCkpCi0KLSNkZWZpbmUgb3V0Yih2YWwscG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX291dGIoKHZhbCksKHBvcnQpKSA6IG91dF84KChwb3J0KSwodmFsKSkpCi0jZGVmaW5lIG91dGJfcCh2YWwscG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX291dGJfcCgodmFsKSwocG9ydCkpIDogb3V0XzgoKHBvcnQpLCh2YWwpKSkKLSNkZWZpbmUgb3V0dyh2YWwscG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX291dHcoKHZhbCksKHBvcnQpKSA6IG91dF9sZTE2KChwb3J0KSwodmFsKSkpCi0jZGVmaW5lIG91dHdfcCh2YWwscG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX291dHdfcCgodmFsKSwocG9ydCkpIDogb3V0X2xlMTYoKHBvcnQpLCh2YWwpKSkKLSNkZWZpbmUgb3V0bCh2YWwscG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX291dGwoKHZhbCksKHBvcnQpKSA6IG91dF9sZTMyKChwb3J0KSwodmFsKSkpCi0jZGVmaW5lIG91dGxfcCh2YWwscG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX291dGxfcCgodmFsKSwocG9ydCkpIDogb3V0X2xlMzIoKHBvcnQpLCh2YWwpKSkKLSNlbmRpZgotI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KLQotI2lmICFkZWZpbmVkKENPTkZJR19JU0EpICYmICFkZWZpbmVkKENPTkZJR19QQ0kpCiAvKgogICogV2UgbmVlZCB0byBkZWZpbmUgZHVtbXkgZnVuY3Rpb25zIGZvciBHRU5FUklDX0lPTUFQIHN1cHBvcnQuCiAgKi8KQEAgLTM1NywxMSArMzA1LDExIEBACiAjZGVmaW5lIHdyaXRlYih2YWwsYWRkcikgb3V0XzgoKGFkZHIpLCh2YWwpKQogI2RlZmluZSByZWFkdyhhZGRyKSAgICAgIGluX2xlMTYoYWRkcikKICNkZWZpbmUgd3JpdGV3KHZhbCxhZGRyKSBvdXRfbGUxNigoYWRkciksKHZhbCkpCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChDT05GSUdfUENJKQorCisjZW5kaWYgLyogQ09ORklHX0lTQSAqLworCiAjZGVmaW5lIHJlYWRsKGFkZHIpICAgICAgaW5fbGUzMihhZGRyKQogI2RlZmluZSB3cml0ZWwodmFsLGFkZHIpIG91dF9sZTMyKChhZGRyKSwodmFsKSkKLSNlbmRpZgogCiAjZGVmaW5lIG1taW93YigpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcGNpLmggYi9pbmNsdWRlL2FzbS1tNjhrL3BjaS5oCmluZGV4IDY3OGNiMGIuLjRhZDBhZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wY2kuaApAQCAtMSw1MiArMSw3IEBACiAjaWZuZGVmIF9BU01fTTY4S19QQ0lfSAogI2RlZmluZSBfQVNNX002OEtfUENJX0gKIAotLyoKLSAqIGFzbS1tNjhrL3BjaV9tNjhrLmggLSBtNjhrIHNwZWNpZmljIFBDSSBkZWNsYXJhdGlvbnMuCi0gKgotICogV3JpdHRlbiBieSBXb3V0IEtsYXJlbi4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+Ci0KLXN0cnVjdCBwY2lfb3BzOwotCi0vKgotICogU3RydWN0dXJlIHdpdGggaGFyZHdhcmUgZGVwZW5kZW50IGluZm9ybWF0aW9uIGFuZCBmdW5jdGlvbnMgb2YgdGhlCi0gKiBQQ0kgYnVzLgotICovCi0KLXN0cnVjdCBwY2lfYnVzX2luZm8KLXsKLQkvKgotCSAqIFJlc291cmNlcyBvZiB0aGUgUENJIGJ1cy4KLQkgKi8KLQotCXN0cnVjdCByZXNvdXJjZSBtZW1fc3BhY2U7Ci0Jc3RydWN0IHJlc291cmNlIGlvX3NwYWNlOwotCi0JLyoKLQkgKiBTeXN0ZW0gZGVwZW5kZW50IGZ1bmN0aW9ucy4KLQkgKi8KLQotCXN0cnVjdCBwY2lfb3BzICptNjhrX3BjaV9vcHM7Ci0KLQl2b2lkICgqZml4dXApKGludCBwY2lfbW9kaWZ5KTsKLQl2b2lkICgqY29uZl9kZXZpY2UpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotfTsKLQotI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkJMAotI2RlZmluZSBwY2liaW9zX3NjYW5fYWxsX2ZucyhhLCBiKQkwCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3NldF9tYXN0ZXIoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQkvKiBObyBzcGVjaWFsIGJ1cyBtYXN0ZXJpbmcgc2V0dXAgaGFuZGxpbmcgKi8KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfcGVuYWxpemVfaXNhX2lycShpbnQgaXJxLCBpbnQgYWN0aXZlKQotewotCS8qIFdlIGRvbid0IGRvIGR5bmFtaWMgUENJIElSUSBhbGxvY2F0aW9uICovCi19CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaD4KIAogLyogVGhlIFBDSSBhZGRyZXNzIHNwYWNlIGRvZXMgZXF1YWwgdGhlIHBoeXNpY2FsIG1lbW9yeQogICogYWRkcmVzcyBzcGFjZS4gIFRoZSBuZXR3b3JraW5nIGFuZCBibG9jayBkZXZpY2UgbGF5ZXJzIHVzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tbTY4ay90aHJlYWRfaW5mby5oCmluZGV4IGFiYzAwMjcuLmFmMGZkYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3RocmVhZF9pbmZvLmgKQEAgLTUyLDUgKzUyLDYgQEAKICNkZWZpbmUgVElGX0RFTEFZRURfVFJBQ0UJMTQJLyogc2luZ2xlIHN0ZXAgYSBzeXNjYWxsICovCiAjZGVmaW5lIFRJRl9TWVNDQUxMX1RSQUNFCTE1CS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTE2CisjZGVmaW5lIFRJRl9GUkVFWkUJCTE3CS8qIHRocmVhZCBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZW5kaWYJLyogX0FTTV9NNjhLX1RIUkVBRF9JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdmlydGNvbnZlcnQuaCBiL2luY2x1ZGUvYXNtLW02OGsvdmlydGNvbnZlcnQuaAppbmRleCBkZWEzMmZiLi4yMmFiMDVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3ZpcnRjb252ZXJ0LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay92aXJ0Y29udmVydC5oCkBAIC00MCwxNSArNDAsOSBAQAogCiAvKgogICogSU8gYnVzIG1lbW9yeSBhZGRyZXNzZXMgYXJlIDE6MSB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzLAotICogZXhjZXB0IG9uIHRoZSBQQ0kgYnVzIG9mIHRoZSBIYWRlcy4KICAqLwotI2lmZGVmIENPTkZJR19IQURFUwotI2RlZmluZSB2aXJ0X3RvX2J1cyhhKSAodmlydF90b19waHlzKGEpICsgKE1BQ0hfSVNfSEFERVMgPyAweDgwMDAwMDAwIDogMCkpCi0jZGVmaW5lIGJ1c190b192aXJ0KGEpIChwaHlzX3RvX3ZpcnQoKGEpIC0gKE1BQ0hfSVNfSEFERVMgPyAweDgwMDAwMDAwIDogMCkpKQotI2Vsc2UKICNkZWZpbmUgdmlydF90b19idXMgdmlydF90b19waHlzCiAjZGVmaW5lIGJ1c190b192aXJ0IHBoeXNfdG9fdmlydAotI2VuZGlmCiAKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tbjEwMzAwL2VsZi5oIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9lbGYuaAppbmRleCAyNTZhNzA0Li5iZjA5ZjhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tbjEwMzAwL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvZWxmLmgKQEAgLTE0MSw3ICsxNDEsNyBAQAogI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQogCiAjaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fRUxGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9hLm91dC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2Eub3V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMDRlMzQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2Eub3V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jaWZuZGVmIF9fUEFSSVNDX0FfT1VUX0hfXwotI2RlZmluZSBfX1BBUklTQ19BX09VVF9IX18KLQotc3RydWN0IGV4ZWMKLXsKLSAgdW5zaWduZWQgaW50IGFfaW5mbzsJCS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MgKi8KLSAgdW5zaWduZWQgYV90ZXh0OwkJLyogbGVuZ3RoIG9mIHRleHQsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfZGF0YTsJCS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2JzczsJCS8qIGxlbmd0aCBvZiB1bmluaXRpYWxpemVkIGRhdGEgYXJlYSBmb3IgZmlsZSwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9zeW1zOwkJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSBkYXRhIGluIGZpbGUsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfZW50cnk7CQkvKiBzdGFydCBhZGRyZXNzICovCi0gIHVuc2lnbmVkIGFfdHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgdGV4dCwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9kcnNpemU7CQkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciBkYXRhLCBpbiBieXRlcyAqLwotfTsKLQotI2RlZmluZSBOX1RSU0laRShhKQkoKGEpLmFfdHJzaXplKQotI2RlZmluZSBOX0RSU0laRShhKQkoKGEpLmFfZHJzaXplKQotI2RlZmluZSBOX1NZTVNJWkUoYSkJKChhKS5hX3N5bXMpCi0KLSNlbmRpZiAvKiBfX0FfT1VUX0dOVV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9lbGYuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9lbGYuaAppbmRleCBkMGE0YTgyLi43ZmE2NzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2VsZi5oCkBAIC0yMzYsNyArMjM2LDcgQEAKIAogI2RlZmluZSBFTEZfUExBVEZPUk0gICgiUEFSSVNDXDAiKQogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIFwKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBcCiAJY3VycmVudC0+cGVyc29uYWxpdHkgPSBQRVJfTElOVVg7IFwKIAljdXJyZW50LT50aHJlYWQubWFwX2Jhc2UgPSBERUZBVUxUX01BUF9CQVNFOyBcCiAJY3VycmVudC0+dGhyZWFkLnRhc2tfc2l6ZSA9IERFRkFVTFRfVEFTS19TSVpFIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pZGUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pZGUuaAppbmRleCBjMjQ2ZWY3Li44MTcwMGEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lkZS5oCkBAIC0xMywxMCArMTMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIGlkZV9yZXF1ZXN0X2lycShpcnEsaGFuZCxmbGcsZGV2LGlkKQlyZXF1ZXN0X2lycSgoaXJxKSwoaGFuZCksKGZsZyksKGRldiksKGlkKSkKLSNkZWZpbmUgaWRlX2ZyZWVfaXJxKGlycSxkZXZfaWQpCQlmcmVlX2lycSgoaXJxKSwgKGRldl9pZCkpCi0jZGVmaW5lIGlkZV9yZXF1ZXN0X3JlZ2lvbihmcm9tLGV4dGVudCxuYW1lKQlyZXF1ZXN0X3JlZ2lvbigoZnJvbSksIChleHRlbnQpLCAobmFtZSkpCi0jZGVmaW5lIGlkZV9yZWxlYXNlX3JlZ2lvbihmcm9tLGV4dGVudCkJCXJlbGVhc2VfcmVnaW9uKChmcm9tKSwgKGV4dGVudCkpCiAvKiBHZW5lcmljIEkvTyBhbmQgTUVNSU8gc3RyaW5nIG9wZXJhdGlvbnMuICAqLwogCiAjZGVmaW5lIF9faWRlX2luc3cJaW5zdwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3N0YXRmcy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3N0YXRmcy5oCmluZGV4IDFkMmI4MTMuLjMyNGJlYTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zdGF0ZnMuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc3RhdGZzLmgKQEAgLTEsNTggKzEsNyBAQAogI2lmbmRlZiBfUEFSSVNDX1NUQVRGU19ICiAjZGVmaW5lIF9QQVJJU0NfU1RBVEZTX0gKIAotI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXR5cGVkZWYgX19rZXJuZWxfZnNpZF90CWZzaWRfdDsKLQotI2VuZGlmCi0KLS8qCi0gKiBJdCBhcHBlYXJzIHRoYXQgUEFSSVNDIGNvdWxkIGJlIDY0IF9vcl8gMzIgYml0LgotICogNjQtYml0IGZpZWxkcyBtdXN0IGJlIGV4cGxpY2l0bHkgNjQtYml0IGluIHN0YXRmczY0LgotICovCi1zdHJ1Y3Qgc3RhdGZzIHsKLQlsb25nIGZfdHlwZTsKLQlsb25nIGZfYnNpemU7Ci0JbG9uZyBmX2Jsb2NrczsKLQlsb25nIGZfYmZyZWU7Ci0JbG9uZyBmX2JhdmFpbDsKLQlsb25nIGZfZmlsZXM7Ci0JbG9uZyBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JbG9uZyBmX25hbWVsZW47Ci0JbG9uZyBmX2Zyc2l6ZTsKLQlsb25nIGZfc3BhcmVbNV07Ci19OwotCi1zdHJ1Y3Qgc3RhdGZzNjQgewotCWxvbmcgZl90eXBlOwotCWxvbmcgZl9ic2l6ZTsKLQlfX3U2NCBmX2Jsb2NrczsKLQlfX3U2NCBmX2JmcmVlOwotCV9fdTY0IGZfYmF2YWlsOwotCV9fdTY0IGZfZmlsZXM7Ci0JX191NjQgZl9mZnJlZTsKLQlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotCWxvbmcgZl9uYW1lbGVuOwotCWxvbmcgZl9mcnNpemU7Ci0JbG9uZyBmX3NwYXJlWzVdOwotfTsKLQotc3RydWN0IGNvbXBhdF9zdGF0ZnM2NCB7Ci0JX191MzIgZl90eXBlOwotCV9fdTMyIGZfYnNpemU7Ci0JX191NjQgZl9ibG9ja3M7Ci0JX191NjQgZl9iZnJlZTsKLQlfX3U2NCBmX2JhdmFpbDsKLQlfX3U2NCBmX2ZpbGVzOwotCV9fdTY0IGZfZmZyZWU7Ci0JX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKLQlfX3UzMiBmX25hbWVsZW47Ci0JX191MzIgZl9mcnNpemU7Ci0JX191MzIgZl9zcGFyZVs1XTsKLX07CisjZGVmaW5lIF9fc3RhdGZzX3dvcmQgbG9uZworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RocmVhZF9pbmZvLmgKaW5kZXggOWY4MTI3NC4uMDQwNzk1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RocmVhZF9pbmZvLmgKQEAgLTU4LDYgKzU4LDcgQEAKICNkZWZpbmUgVElGXzMyQklUICAgICAgICAgICAgICAgNCAgICAgICAvKiAzMiBiaXQgYmluYXJ5ICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTUKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk2CS8qIHJlc3RvcmUgc2F2ZWQgc2lnbmFsIG1hc2sgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJNwkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMSA8PCBUSUZfU0lHUEVORElORykKQEAgLTY1LDYgKzY2LDcgQEAKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMSA8PCBUSUZfUE9MTElOR19OUkZMQUcpCiAjZGVmaW5lIF9USUZfMzJCSVQJCSgxIDw8IFRJRl8zMkJJVCkKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9VU0VSX1dPUktfTUFTSyAgICAgKF9USUZfU0lHUEVORElORyB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9USUZfTkVFRF9SRVNDSEVEIHwgX1RJRl9SRVNUT1JFX1NJR01BU0spCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9lbGYtaTM4Ni5oIGIvaW5jbHVkZS9hc20tdW0vZWxmLWkzODYuaAppbmRleCAyM2Q2ODkzLi5kMGRhOWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9lbGYtaTM4Ni5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2VsZi1pMzg2LmgKQEAgLTg2LDcgKzg2LDcgQEAKIGV4dGVybiBjaGFyICogZWxmX2F1eF9wbGF0Zm9ybTsKICNkZWZpbmUgRUxGX1BMQVRGT1JNIChlbGZfYXV4X3BsYXRmb3JtKQogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBkbyB7IH0gd2hpbGUgKDApCiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHZzeXNjYWxsX2VoZHI7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB2c3lzY2FsbF9lbmQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9lbGYtcHBjLmggYi9pbmNsdWRlL2FzbS11bS9lbGYtcHBjLmgKaW5kZXggZDNiOTBiNy4uYWY5NDYzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vZWxmLXBwYy5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2VsZi1wcGMuaApAQCAtNSw3ICs1LDcgQEAKIGV4dGVybiBsb25nIGVsZl9hdXhfaHdjYXA7CiAjZGVmaW5lIEVMRl9IV0NBUCAoZWxmX2F1eF9od2NhcCkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBkbyA7IHdoaWxlKDApCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgZG8gOyB3aGlsZSgwKQogCiAjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFIDQwOTYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZWxmLXg4Nl82NC5oIGIvaW5jbHVkZS9hc20tdW0vZWxmLXg4Nl82NC5oCmluZGV4IDNiMmQ1MjIuLjZlOGE5MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2VsZi14ODZfNjQuaAorKysgYi9pbmNsdWRlL2FzbS11bS9lbGYteDg2XzY0LmgKQEAgLTExNCw2ICsxMTQsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAieDg2XzY0IgogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIGRvIDsgd2hpbGUoMCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBkbyA7IHdoaWxlKDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmgKaW5kZXggZTA3ZTcyOC4uNjIyNzRhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oCkBAIC02OSw2ICs2OSw3IEBACiAjZGVmaW5lIFRJRl9NRU1ESUUJIAk1CiAjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTYKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk3CisjZGVmaW5lIFRJRl9GUkVFWkUJCTE2CS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxIDw8IFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxIDw8IFRJRl9TSUdQRU5ESU5HKQpAQCAtNzcsNSArNzgsNiBAQAogI2RlZmluZSBfVElGX01FTURJRQkJKDEgPDwgVElGX01FTURJRSkKICNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxIDw8IFRJRl9TWVNDQUxMX0FVRElUKQogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMSA8PCBUSUZfUkVTVE9SRV9TSUdNQVNLKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDEgPDwgVElGX0ZSRUVaRSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L2FwaWMuaAppbmRleCBkNzZhMDgzLi5lZjFkNzJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9hcGljLmgKQEAgLTQwLDggKzQwLDYgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgYXBpY192ZXJib3NpdHk7CiBleHRlcm4gaW50IGxvY2FsX2FwaWNfdGltZXJfYzJfb2s7CiAKLWV4dGVybiBpbnQgaW9hcGljX2ZvcmNlOwotCiBleHRlcm4gaW50IGRpc2FibGVfYXBpYzsKIC8qCiAgKiBCYXNpYyBmdW5jdGlvbnMgYWNjZXNzaW5nIEFQSUNzLgpAQCAtMTAwLDYgKzk4LDIwIEBACiBleHRlcm4gdm9pZCBlbmFibGVfeDJhcGljKHZvaWQpOwogZXh0ZXJuIHZvaWQgZW5hYmxlX0lSX3gyYXBpYyh2b2lkKTsKIGV4dGVybiB2b2lkIHgyYXBpY19pY3Jfd3JpdGUodTMyIGxvdywgdTMyIGlkKTsKK3N0YXRpYyBpbmxpbmUgaW50IHgyYXBpY19lbmFibGVkKHZvaWQpCit7CisJaW50IG1zciwgbXNyMjsKKworCWlmICghY3B1X2hhc194MmFwaWMpCisJCXJldHVybiAwOworCisJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zciwgbXNyMik7CisJaWYgKG1zciAmIFgyQVBJQ19FTkFCTEUpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgeDJhcGljX2VuYWJsZWQoKQkwCiAjZW5kaWYKIAogc3RydWN0IGFwaWNfb3BzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9iaWdzbXAvYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L2JpZ3NtcC9hcGljLmgKaW5kZXggMGE5Y2Q3Yy4uMWQ5NTQzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2JpZ3NtcC9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2JpZ3NtcC9hcGljLmgKQEAgLTksMjIgKzksMTcgQEAKIAlyZXR1cm4gKDEpOwogfQogCi0vKiBSb3VuZCByb2JpbiB0aGUgaXJxcyBhbW91bmcgdGhlIG9ubGluZSBjcHVzICovCiBzdGF0aWMgaW5saW5lIGNwdW1hc2tfdCB0YXJnZXRfY3B1cyh2b2lkKQogewotCXN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdSA9IE5SX0NQVVM7Ci0JZG8gewotCQlpZiAoY3B1ID49IE5SX0NQVVMpCi0JCQljcHUgPSBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApOwotCQllbHNlCi0JCQljcHUgPSBuZXh0X2NwdShjcHUsIGNwdV9vbmxpbmVfbWFwKTsKLQl9IHdoaWxlIChjcHUgPj0gTlJfQ1BVUyk7Ci0JcmV0dXJuIGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisjaWZkZWYgQ09ORklHX1NNUAorICAgICAgICByZXR1cm4gY3B1X29ubGluZV9tYXA7CisjZWxzZQorICAgICAgICByZXR1cm4gY3B1bWFza19vZl9jcHUoMCk7CisjZW5kaWYKIH0KIAogI3VuZGVmIEFQSUNfREVTVF9MT0dJQ0FMCiAjZGVmaW5lIEFQSUNfREVTVF9MT0dJQ0FMCTAKLSNkZWZpbmUgVEFSR0VUX0NQVVMJCSh0YXJnZXRfY3B1cygpKQogI2RlZmluZSBBUElDX0RGUl9WQUxVRQkJKEFQSUNfREZSX0ZMQVQpCiAjZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFCShkZXN0X0ZpeGVkKQogI2RlZmluZSBJTlRfREVTVF9NT0RFCQkoMCkgICAgLyogcGh5cyBkZWxpdmVyeSB0byB0YXJnZXQgcHJvYyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2VmaS5oIGIvaW5jbHVkZS9hc20teDg2L2VmaS5oCmluZGV4IGVkMmRlMjIuLjMxMzQzOGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9lZmkuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvZWZpLmgKQEAgLTk0LDQgKzk0LDE3IEBACiBleHRlcm4gdm9pZCBlZmlfY2FsbF9waHlzX3ByZWxvZyh2b2lkKTsKIGV4dGVybiB2b2lkIGVmaV9jYWxsX3BoeXNfZXBpbG9nKHZvaWQpOwogCisjaWZuZGVmIENPTkZJR19FRkkKKy8qCisgKiBJRiBFRkkgaXMgbm90IGNvbmZpZ3VyZWQsIGhhdmUgdGhlIEVGSSBjYWxscyByZXR1cm4gLUVOT1NZUy4KKyAqLworI2RlZmluZSBlZmlfY2FsbDAoX2YpCQkJCQkoLUVOT1NZUykKKyNkZWZpbmUgZWZpX2NhbGwxKF9mLCBfYTEpCQkJCSgtRU5PU1lTKQorI2RlZmluZSBlZmlfY2FsbDIoX2YsIF9hMSwgX2EyKQkJCQkoLUVOT1NZUykKKyNkZWZpbmUgZWZpX2NhbGwzKF9mLCBfYTEsIF9hMiwgX2EzKQkJCSgtRU5PU1lTKQorI2RlZmluZSBlZmlfY2FsbDQoX2YsIF9hMSwgX2EyLCBfYTMsIF9hNCkJCSgtRU5PU1lTKQorI2RlZmluZSBlZmlfY2FsbDUoX2YsIF9hMSwgX2EyLCBfYTMsIF9hNCwgX2E1KQkJKC1FTk9TWVMpCisjZGVmaW5lIGVmaV9jYWxsNihfZiwgX2ExLCBfYTIsIF9hMywgX2E0LCBfYTUsIF9hNikJKC1FTk9TWVMpCisjZW5kaWYgLyogQ09ORklHX0VGSSAqLworCiAjZW5kaWYgLyogQVNNX1g4Nl9fRUZJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9lbGYuaCBiL2luY2x1ZGUvYXNtLXg4Ni9lbGYuaAppbmRleCA1YzQ3NDViLi4yNmJjMTVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2VsZi5oCkBAIC0xODYsNyArMTg2LDcgQEAKIAlzZXRfZnMoVVNFUl9EUyk7CQkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgQ09NUEFUX1NFVF9QRVJTT05BTElUWShleCwgaWJjczIpCQlcCisjZGVmaW5lIENPTVBBVF9TRVRfUEVSU09OQUxJVFkoZXgpCQkJXAogZG8gewkJCQkJCQlcCiAJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX0lBMzIpKQkJCVwKIAkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX0FCSV9QRU5ESU5HKTsJXApAQCAtMjY3LDcgKzI2Nyw3IEBACiAgICBGb3IgdGhlIG1vbWVudCwgd2UgaGF2ZSBvbmx5IG9wdGltaXphdGlvbnMgZm9yIHRoZSBJbnRlbCBnZW5lcmF0aW9ucywKICAgIGJ1dCB0aGF0IGNvdWxkIGNoYW5nZS4uLiAqLwogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eV82NGJpdCgpCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5XzY0Yml0KCkKIAogLyoKICAqIEFuIGV4ZWN1dGFibGUgZm9yIHdoaWNoIGVsZl9yZWFkX2ltcGxpZXNfZXhlYygpIHJldHVybnMgVFJVRSB3aWxsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZXM3MDAwL2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9lczcwMDAvYXBpYy5oCmluZGV4IGJkMmM0NGQuLjM4MGYwYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9lczcwMDAvYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9lczcwMDAvYXBpYy5oCkBAIC0xNyw3ICsxNyw2IEBACiAJcmV0dXJuIGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAjZW5kaWYKIH0KLSNkZWZpbmUgVEFSR0VUX0NQVVMJKHRhcmdldF9jcHVzKCkpCiAKICNpZiBkZWZpbmVkIENPTkZJR19FUzcwMDBfQ0xVU1RFUkVEX0FQSUMKICNkZWZpbmUgQVBJQ19ERlJfVkFMVUUJCShBUElDX0RGUl9DTFVTVEVSKQpAQCAtODEsNyArODAsNyBAQAogCWludCBhcGljID0gcGVyX2NwdSh4ODZfYmlvc19jcHVfYXBpY2lkLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXByaW50aygiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuICBVc2luZyAlZCBJL08gQVBJQ3MsIHRhcmdldCBjcHVzICVseFxuIiwKIAkJKGFwaWNfdmVyc2lvblthcGljXSA9PSAweDE0KSA/Ci0JCSJQaHlzaWNhbCBDbHVzdGVyIiA6ICJMb2dpY2FsIENsdXN0ZXIiLCBucl9pb2FwaWNzLCBjcHVzX2FkZHIoVEFSR0VUX0NQVVMpWzBdKTsKKwkJIlBoeXNpY2FsIENsdXN0ZXIiIDogIkxvZ2ljYWwgQ2x1c3RlciIsIG5yX2lvYXBpY3MsIGNwdXNfYWRkcih0YXJnZXRfY3B1cygpKVswXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG11bHRpX3RpbWVyX2NoZWNrKGludCBhcGljLCBpbnQgaXJxKQpAQCAtMTcxLDcgKzE3MCw3IEBACiAJCQlpbnQgbmV3X2FwaWNpZCA9IGNwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOwogCQkJaWYgKGFwaWNpZF9jbHVzdGVyKGFwaWNpZCkgIT0KIAkJCQkJYXBpY2lkX2NsdXN0ZXIobmV3X2FwaWNpZCkpewotCQkJCXByaW50ayAoIiVzOiBOb3QgYSB2YWxpZCBtYXNrIVxuIixfX0ZVTkNUSU9OX18pOworCQkJCXByaW50ayAoIiVzOiBOb3QgYSB2YWxpZCBtYXNrIVxuIiwgX19mdW5jX18pOwogI2lmIGRlZmluZWQgQ09ORklHX0VTNzAwMF9DTFVTVEVSRURfQVBJQwogCQkJCXJldHVybiAweEZGOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9nZW5hcGljXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvZ2VuYXBpY18zMi5oCmluZGV4IDM0MjgwZjAuLjZmZTRmODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9nZW5hcGljXzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2dlbmFwaWNfMzIuaApAQCAtNTcsNiArNTcsNyBAQAogCXVuc2lnbmVkICgqZ2V0X2FwaWNfaWQpKHVuc2lnbmVkIGxvbmcgeCk7CiAJdW5zaWduZWQgbG9uZyBhcGljX2lkX21hc2s7CiAJdW5zaWduZWQgaW50ICgqY3B1X21hc2tfdG9fYXBpY2lkKShjcHVtYXNrX3QgY3B1bWFzayk7CisJY3B1bWFza190ICgqdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKShpbnQgY3B1KTsKIAogI2lmZGVmIENPTkZJR19TTVAKIAkvKiBpcGkgKi8KQEAgLTEwNCw2ICsxMDUsNyBAQAogCUFQSUNGVU5DKGdldF9hcGljX2lkKQkJCQlcCiAJLmFwaWNfaWRfbWFzayA9IEFQSUNfSURfTUFTSywJCQlcCiAJQVBJQ0ZVTkMoY3B1X21hc2tfdG9fYXBpY2lkKQkJCVwKKwlBUElDRlVOQyh2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4pCQkJXAogCUFQSUNGVU5DKGFjcGlfbWFkdF9vZW1fY2hlY2spCQkJXAogCUlQSUZVTkMoc2VuZF9JUElfbWFzaykJCQkJXAogCUlQSUZVTkMoc2VuZF9JUElfYWxsYnV0c2VsZikJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaHBldC5oIGIvaW5jbHVkZS9hc20teDg2L2hwZXQuaAppbmRleCBjYmJiYjZkLi41OGIyNzNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaHBldC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9ocGV0LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIEFTTV9YODZfX0hQRVRfSAogI2RlZmluZSBBU01fWDg2X19IUEVUX0gKIAorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorCiAjaWZkZWYgQ09ORklHX0hQRVRfVElNRVIKIAogI2RlZmluZSBIUEVUX01NQVBfU0laRQkJMTAyNApAQCAtMTAsNiArMTIsMTEgQEAKICNkZWZpbmUgSFBFVF9DRkcJCTB4MDEwCiAjZGVmaW5lIEhQRVRfU1RBVFVTCQkweDAyMAogI2RlZmluZSBIUEVUX0NPVU5URVIJCTB4MGYwCisKKyNkZWZpbmUgSFBFVF9Ubl9DRkcobikJCSgweDEwMCArIDB4MjAgKiBuKQorI2RlZmluZSBIUEVUX1RuX0NNUChuKQkJKDB4MTA4ICsgMHgyMCAqIG4pCisjZGVmaW5lIEhQRVRfVG5fUk9VVEUobikJKDB4MTEwICsgMHgyMCAqIG4pCisKICNkZWZpbmUgSFBFVF9UMF9DRkcJCTB4MTAwCiAjZGVmaW5lIEhQRVRfVDBfQ01QCQkweDEwOAogI2RlZmluZSBIUEVUX1QwX1JPVVRFCQkweDExMApAQCAtNjUsNiArNzIsMjAgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGhwZXRfcmVhZGwodW5zaWduZWQgbG9uZyBhKTsKIGV4dGVybiB2b2lkIGZvcmNlX2hwZXRfcmVzdW1lKHZvaWQpOwogCitleHRlcm4gdm9pZCBocGV0X21zaV91bm1hc2sodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCBocGV0X21zaV9tYXNrKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHZvaWQgaHBldF9tc2lfd3JpdGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CitleHRlcm4gdm9pZCBocGV0X21zaV9yZWFkKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpOworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKK2V4dGVybiBpbnQgYXJjaF9zZXR1cF9ocGV0X21zaSh1bnNpZ25lZCBpbnQgaXJxKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3NldHVwX2hwZXRfbXNpKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19IUEVUX0VNVUxBVEVfUlRDCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXg4Ni9od19pcnEuaAppbmRleCA1MGY2ZTAzLi43NDlkMDQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2h3X2lycS5oCkBAIC05NiwxMyArOTYsOCBAQAogCiAvKiBTTVAgKi8KIGV4dGVybiB2b2lkIHNtcF9hcGljX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiBleHRlcm4gdm9pZCBzbXBfc3B1cmlvdXNfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwogZXh0ZXJuIHZvaWQgc21wX2Vycm9yX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKLSNlbHNlCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHNtcF9zcHVyaW91c19pbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHNtcF9lcnJvcl9pbnRlcnJ1cHQodm9pZCk7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2X1NNUAogZXh0ZXJuIHZvaWQgc21wX3Jlc2NoZWR1bGVfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwogZXh0ZXJuIHZvaWQgc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwpAQCAtMTE1LDEzICsxMTAsMTMgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotZXh0ZXJuIHZvaWQgKCpjb25zdCBpbnRlcnJ1cHRbTlJfSVJRU10pKHZvaWQpOwotI2Vsc2UKLXR5cGVkZWYgaW50IHZlY3Rvcl9pcnFfdFtOUl9WRUNUT1JTXTsKLURFQ0xBUkVfUEVSX0NQVSh2ZWN0b3JfaXJxX3QsIHZlY3Rvcl9pcnEpOworZXh0ZXJuIHZvaWQgKCpjb25zdCBpbnRlcnJ1cHRbTlJfVkVDVE9SU10pKHZvaWQpOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykgJiYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQordHlwZWRlZiBpbnQgdmVjdG9yX2lycV90W05SX1ZFQ1RPUlNdOworREVDTEFSRV9QRVJfQ1BVKHZlY3Rvcl9pcnFfdCwgdmVjdG9yX2lycSk7CisKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIGV4dGVybiB2b2lkIGxvY2tfdmVjdG9yX2xvY2sodm9pZCk7CiBleHRlcm4gdm9pZCB1bmxvY2tfdmVjdG9yX2xvY2sodm9pZCk7CiBleHRlcm4gdm9pZCBfX3NldHVwX3ZlY3Rvcl9pcnEoaW50IGNwdSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaW9fYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L2lvX2FwaWMuaAppbmRleCA4ZWM2OGE1Li5kMzVjYmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaW9fYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9pb19hcGljLmgKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vaXJxX3ZlY3RvcnMuaD4KIAogLyoKICAqIEludGVsIElPLUFQSUMgc3VwcG9ydCBmb3IgU01QIGFuZCBVUCBzeXN0ZW1zLgpAQCAtODcsMjQgKzg4LDggQEAKIAkJbWFzawkJOiAgMSwJLyogMDogZW5hYmxlZCwgMTogZGlzYWJsZWQgKi8KIAkJX19yZXNlcnZlZF8yCTogMTU7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJX191MzIJX19yZXNlcnZlZF8xCTogMjQsCi0JCQkJcGh5c2ljYWxfZGVzdAk6ICA0LAotCQkJCV9fcmVzZXJ2ZWRfMgk6ICA0OwotCQl9IHBoeXNpY2FsOwotCi0JCXN0cnVjdCB7Ci0JCQlfX3UzMglfX3Jlc2VydmVkXzEJOiAyNCwKLQkJCQlsb2dpY2FsX2Rlc3QJOiAgODsKLQkJfSBsb2dpY2FsOwotCX0gZGVzdDsKLSNlbHNlCiAJX191MzIJX19yZXNlcnZlZF8zCTogMjQsCiAJCWRlc3QJCTogIDg7Ci0jZW5kaWYKLQogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBJUl9JT19BUElDX3JvdXRlX2VudHJ5IHsKQEAgLTIwMywxMCArMTg4LDE3IEBACiBleHRlcm4gdm9pZCByZWluaXRfaW50cl9yZW1hcHBlZF9JT19BUElDKGludCk7CiAjZW5kaWYKIAorZXh0ZXJuIGludCBwcm9iZV9ucl9pcnFzKHZvaWQpOworCiAjZWxzZSAgLyogIUNPTkZJR19YODZfSU9fQVBJQyAqLwogI2RlZmluZSBpb19hcGljX2Fzc2lnbl9wY2lfaXJxcyAwCiBzdGF0aWMgY29uc3QgaW50IHRpbWVyX3Rocm91Z2hfODI1OSA9IDA7CiBzdGF0aWMgaW5saW5lIHZvaWQgaW9hcGljX2luaXRfbWFwcGluZ3Modm9pZCkgeyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHByb2JlX25yX2lycXModm9pZCkKK3sKKwlyZXR1cm4gTlJfSVJRUzsKK30KICNlbmRpZgogCiAjZW5kaWYgLyogQVNNX1g4Nl9fSU9fQVBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaW9tbXUuaCBiL2luY2x1ZGUvYXNtLXg4Ni9pb21tdS5oCmluZGV4IDU0NmFkMzEuLjk2MWU3NDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pb21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9pb21tdS5oCkBAIC04LDcgKzgsNyBAQAogZXh0ZXJuIGludCBpb21tdV9kZXRlY3RlZDsKIGV4dGVybiBpbnQgZG1hcl9kaXNhYmxlZDsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9tbXVfbnVtX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9tbXVfbnJfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CiAKICNpZmRlZiBDT05GSUdfR0FSVF9JT01NVQogZXh0ZXJuIGludCBnYXJ0X2lvbW11X2FwZXJ0dXJlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lycV92ZWN0b3JzLmggYi9pbmNsdWRlL2FzbS14ODYvaXJxX3ZlY3RvcnMuaAppbmRleCBjNWQyZDc2Li5hOGQwNjVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaXJxX3ZlY3RvcnMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaXJxX3ZlY3RvcnMuaApAQCAtMTksMTkgKzE5LDE0IEBACiAKIC8qCiAgKiBSZXNlcnZlIHRoZSBsb3dlc3QgdXNhYmxlIHByaW9yaXR5IGxldmVsIDB4MjAgLSAweDJmIGZvciB0cmlnZ2VyaW5nCi0gKiBjbGVhbnVwIGFmdGVyIGlycSBtaWdyYXRpb24gb24gNjQgYml0LgorICogY2xlYW51cCBhZnRlciBpcnEgbWlncmF0aW9uLgogICovCiAjZGVmaW5lIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SCUZJUlNUX0VYVEVSTkFMX1ZFQ1RPUgogCiAvKgotICogVmVjdG9ycyAweDIwLTB4MmYgYXJlIHVzZWQgZm9yIElTQSBpbnRlcnJ1cHRzIG9uIDMyIGJpdC4KLSAqIFZlY3RvcnMgMHgzMC0weDNmIGFyZSB1c2VkIGZvciBJU0EgaW50ZXJydXB0cyBvbiA2NCBiaXQuCisgKiBWZWN0b3JzIDB4MzAtMHgzZiBhcmUgdXNlZCBmb3IgSVNBIGludGVycnVwdHMuCiAgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIElSUTBfVkVDVE9SCQkoRklSU1RfRVhURVJOQUxfVkVDVE9SKQotI2Vsc2UKICNkZWZpbmUgSVJRMF9WRUNUT1IJCShGSVJTVF9FWFRFUk5BTF9WRUNUT1IgKyAweDEwKQotI2VuZGlmCiAjZGVmaW5lIElSUTFfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxKQogI2RlZmluZSBJUlEyX1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgMikKICNkZWZpbmUgSVJRM19WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDMpCkBAIC05NiwxMSArOTEsNyBAQAogICogc3RhcnQgYXQgMHgzMSgweDQxKSB0byBzcHJlYWQgb3V0IHZlY3RvcnMgZXZlbmx5IGJldHdlZW4gcHJpb3JpdHkKICAqIGxldmVscy4gKDB4ODAgaXMgdGhlIHN5c2NhbGwgdmVjdG9yKQogICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBkZWZpbmUgRklSU1RfREVWSUNFX1ZFQ1RPUgkweDMxCi0jZWxzZQotIyBkZWZpbmUgRklSU1RfREVWSUNFX1ZFQ1RPUgkoSVJRMTVfVkVDVE9SICsgMikKLSNlbmRpZgorI2RlZmluZSBGSVJTVF9ERVZJQ0VfVkVDVE9SCShJUlExNV9WRUNUT1IgKyAyKQogCiAjZGVmaW5lIE5SX1ZFQ1RPUlMJCTI1NgogCkBAIC0xMTYsNyArMTA3LDYgQEAKICMgZWxzZQogIyAgZGVmaW5lIE5SX0lSUVMgKE5SX1ZFQ1RPUlMgKyAoMzIgKiBNQVhfSU9fQVBJQ1MpKQogIyBlbmRpZgotIyBkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMgTlJfSVJRUwogCiAjZWxpZiAhZGVmaW5lZChDT05GSUdfWDg2X1ZPWUFHRVIpCiAKQEAgLTEyNCwyMyArMTE0LDE1IEBACiAKICMgIGRlZmluZSBOUl9JUlFTCQkyMjQKIAotIyAgaWYgKDIyNCA+PSAzMiAqIE5SX0NQVVMpCi0jICAgZGVmaW5lIE5SX0lSUV9WRUNUT1JTCU5SX0lSUVMKLSMgIGVsc2UKLSMgICBkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMJKDMyICogTlJfQ1BVUykKLSMgIGVuZGlmCi0KICMgZWxzZSAvKiBJT19BUElDIHx8IFBBUkFWSVJUICovCiAKICMgIGRlZmluZSBOUl9JUlFTCQkxNgotIyAgZGVmaW5lIE5SX0lSUV9WRUNUT1JTCU5SX0lSUVMKIAogIyBlbmRpZgogCiAjZWxzZSAvKiAhVklTV1MgJiYgIVZPWUFHRVIgKi8KIAogIyBkZWZpbmUgTlJfSVJRUwkJMjI0Ci0jIGRlZmluZSBOUl9JUlFfVkVDVE9SUwkJTlJfSVJRUwogCiAjZW5kaWYgLyogVklTV1MgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2t2bS5oIGIvaW5jbHVkZS9hc20teDg2L2t2bS5oCmluZGV4IDc4ZTk1NGQuLmJhMGRkNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9rdm0uaAorKysgYi9pbmNsdWRlL2FzbS14ODYva3ZtLmgKQEAgLTIwOCwyNiArMjA4LDQgQEAKIHN0cnVjdCBrdm1fcGl0X3N0YXRlIHsKIAlzdHJ1Y3Qga3ZtX3BpdF9jaGFubmVsX3N0YXRlIGNoYW5uZWxzWzNdOwogfTsKLQotI2RlZmluZSBLVk1fVFJDX0lOSl9WSVJRICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDIpCi0jZGVmaW5lIEtWTV9UUkNfUkVERUxJVkVSX0VWVCAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwMykKLSNkZWZpbmUgS1ZNX1RSQ19QRU5EX0lOVFIgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA0KQotI2RlZmluZSBLVk1fVFJDX0lPX1JFQUQgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDUpCi0jZGVmaW5lIEtWTV9UUkNfSU9fV1JJVEUgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwNikKLSNkZWZpbmUgS1ZNX1RSQ19DUl9SRUFEICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA3KQotI2RlZmluZSBLVk1fVFJDX0NSX1dSSVRFICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDgpCi0jZGVmaW5lIEtWTV9UUkNfRFJfUkVBRCAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwOSkKLSNkZWZpbmUgS1ZNX1RSQ19EUl9XUklURSAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDBBKQotI2RlZmluZSBLVk1fVFJDX01TUl9SRUFEICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MEIpCi0jZGVmaW5lIEtWTV9UUkNfTVNSX1dSSVRFICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwQykKLSNkZWZpbmUgS1ZNX1RSQ19DUFVJRCAgICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDBEKQotI2RlZmluZSBLVk1fVFJDX0lOVFIgICAgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MEUpCi0jZGVmaW5lIEtWTV9UUkNfTk1JICAgICAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwRikKLSNkZWZpbmUgS1ZNX1RSQ19WTU1DQUxMICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDEwKQotI2RlZmluZSBLVk1fVFJDX0hMVCAgICAgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTEpCi0jZGVmaW5lIEtWTV9UUkNfQ0xUUyAgICAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxMikKLSNkZWZpbmUgS1ZNX1RSQ19MTVNXICAgICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDEzKQotI2RlZmluZSBLVk1fVFJDX0FQSUNfQUNDRVNTICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTQpCi0jZGVmaW5lIEtWTV9UUkNfVERQX0ZBVUxUICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxNSkKLQogI2VuZGlmIC8qIEFTTV9YODZfX0tWTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYva3ZtX2hvc3QuaCBiL2luY2x1ZGUvYXNtLXg4Ni9rdm1faG9zdC5oCmluZGV4IDY5Nzk0NTQuLjQxMWZiOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9rdm1faG9zdC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9rdm1faG9zdC5oCkBAIC01Nyw2ICs1NywxMCBAQAogI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFIChLVk1fSFBBR0VfU0laRSAvIFBBR0VfU0laRSkKIAogI2RlZmluZSBERV9WRUNUT1IgMAorI2RlZmluZSBEQl9WRUNUT1IgMQorI2RlZmluZSBCUF9WRUNUT1IgMworI2RlZmluZSBPRl9WRUNUT1IgNAorI2RlZmluZSBCUl9WRUNUT1IgNQogI2RlZmluZSBVRF9WRUNUT1IgNgogI2RlZmluZSBOTV9WRUNUT1IgNwogI2RlZmluZSBERl9WRUNUT1IgOApAQCAtNjUsNiArNjksNyBAQAogI2RlZmluZSBTU19WRUNUT1IgMTIKICNkZWZpbmUgR1BfVkVDVE9SIDEzCiAjZGVmaW5lIFBGX1ZFQ1RPUiAxNAorI2RlZmluZSBNRl9WRUNUT1IgMTYKICNkZWZpbmUgTUNfVkVDVE9SIDE4CiAKICNkZWZpbmUgU0VMRUNUT1JfVElfTUFTSyAoMSA8PCAyKQpAQCAtODksNyArOTQsNyBAQAogc3RydWN0IGt2bV92Y3B1Owogc3RydWN0IGt2bTsKIAotZW51bSB7CitlbnVtIGt2bV9yZWcgewogCVZDUFVfUkVHU19SQVggPSAwLAogCVZDUFVfUkVHU19SQ1ggPSAxLAogCVZDUFVfUkVHU19SRFggPSAyLApAQCAtMTA4LDYgKzExMyw3IEBACiAJVkNQVV9SRUdTX1IxNCA9IDE0LAogCVZDUFVfUkVHU19SMTUgPSAxNSwKICNlbmRpZgorCVZDUFVfUkVHU19SSVAsCiAJTlJfVkNQVV9SRUdTCiB9OwogCkBAIC0xODksMTAgKzE5NSwyMCBAQAogCQkJCSAgICAqLwogCWludCBtdWx0aW1hcHBlZDsgICAgICAgICAvKiBNb3JlIHRoYW4gb25lIHBhcmVudF9wdGU/ICovCiAJaW50IHJvb3RfY291bnQ7ICAgICAgICAgIC8qIEN1cnJlbnRseSBzZXJ2aW5nIGFzIGFjdGl2ZSByb290ICovCisJYm9vbCB1bnN5bmM7CisJYm9vbCB1bnN5bmNfY2hpbGRyZW47CiAJdW5pb24gewogCQl1NjQgKnBhcmVudF9wdGU7ICAgICAgICAgICAgICAgLyogIW11bHRpbWFwcGVkICovCiAJCXN0cnVjdCBobGlzdF9oZWFkIHBhcmVudF9wdGVzOyAvKiBtdWx0aW1hcHBlZCwga3ZtX3B0ZV9jaGFpbiAqLwogCX07CisJREVDTEFSRV9CSVRNQVAodW5zeW5jX2NoaWxkX2JpdG1hcCwgNTEyKTsKK307CisKK3N0cnVjdCBrdm1fcHZfbW11X29wX2J1ZmZlciB7CisJdm9pZCAqcHRyOworCXVuc2lnbmVkIGxlbjsKKwl1bnNpZ25lZCBwcm9jZXNzZWQ7CisJY2hhciBidWZbNTEyXSBfX2FsaWduZWQoc2l6ZW9mKGxvbmcpKTsKIH07CiAKIC8qCkBAIC0yMDcsNiArMjIzLDkgQEAKIAlncGFfdCAoKmd2YV90b19ncGEpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKTsKIAl2b2lkICgqcHJlZmV0Y2hfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJICAgICAgc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFnZSk7CisJaW50ICgqc3luY19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApOworCXZvaWQgKCppbnZscGcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKTsKIAlocGFfdCByb290X2hwYTsKIAlpbnQgcm9vdF9sZXZlbDsKIAlpbnQgc2hhZG93X3Jvb3RfbGV2ZWw7CkBAIC0yMTksOCArMjM4LDEzIEBACiAJaW50IGludGVycnVwdF93aW5kb3dfb3BlbjsKIAl1bnNpZ25lZCBsb25nIGlycV9zdW1tYXJ5OyAvKiBiaXQgdmVjdG9yOiAxIHBlciB3b3JkIGluIGlycV9wZW5kaW5nICovCiAJREVDTEFSRV9CSVRNQVAoaXJxX3BlbmRpbmcsIEtWTV9OUl9JTlRFUlJVUFRTKTsKLQl1bnNpZ25lZCBsb25nIHJlZ3NbTlJfVkNQVV9SRUdTXTsgLyogZm9yIHJzcDogdmNwdV9sb2FkX3JzcF9yaXAoKSAqLwotCXVuc2lnbmVkIGxvbmcgcmlwOyAgICAgIC8qIG5lZWRzIHZjcHVfbG9hZF9yc3BfcmlwKCkgKi8KKwkvKgorCSAqIHJpcCBhbmQgcmVncyBhY2Nlc3NlcyBtdXN0IGdvIHRocm91Z2gKKwkgKiBrdm1fe3JlZ2lzdGVyLHJpcH1fe3JlYWQsd3JpdGV9IGZ1bmN0aW9ucy4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIHJlZ3NbTlJfVkNQVV9SRUdTXTsKKwl1MzIgcmVnc19hdmFpbDsKKwl1MzIgcmVnc19kaXJ0eTsKIAogCXVuc2lnbmVkIGxvbmcgY3IwOwogCXVuc2lnbmVkIGxvbmcgY3IyOwpAQCAtMjM3LDYgKzI2MSw5IEBACiAJYm9vbCB0cHJfYWNjZXNzX3JlcG9ydGluZzsKIAogCXN0cnVjdCBrdm1fbW11IG1tdTsKKwkvKiBvbmx5IG5lZWRlZCBpbiBrdm1fcHZfbW11X29wKCkgcGF0aCwgYnV0IGl0J3MgaG90IHNvCisJICogcHV0IGl0IGhlcmUgdG8gYXZvaWQgYWxsb2NhdGlvbiAqLworCXN0cnVjdCBrdm1fcHZfbW11X29wX2J1ZmZlciBtbXVfb3BfYnVmZmVyOwogCiAJc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlIG1tdV9wdGVfY2hhaW5fY2FjaGU7CiAJc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlIG1tdV9ybWFwX2Rlc2NfY2FjaGU7CkBAIC0yNjksNiArMjk2LDExIEBACiAJCXUzMiBlcnJvcl9jb2RlOwogCX0gZXhjZXB0aW9uOwogCisJc3RydWN0IGt2bV9xdWV1ZWRfaW50ZXJydXB0IHsKKwkJYm9vbCBwZW5kaW5nOworCQl1OCBucjsKKwl9IGludGVycnVwdDsKKwogCXN0cnVjdCB7CiAJCWludCBhY3RpdmU7CiAJCXU4IHNhdmVfaW9wbDsKQEAgLTI5NCw2ICszMjYsNyBAQAogCXN0cnVjdCBwYWdlICp0aW1lX3BhZ2U7CiAKIAlib29sIG5taV9wZW5kaW5nOworCWJvb2wgbm1pX2luamVjdGVkOwogCiAJdTY0IG10cnJbMHgxMDBdOwogfTsKQEAgLTMxNiw5ICszNDksMTIgQEAKIAkgKiBIYXNoIHRhYmxlIG9mIHN0cnVjdCBrdm1fbW11X3BhZ2UuCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfbW11X3BhZ2VzOworCXN0cnVjdCBsaXN0X2hlYWQgYXNzaWduZWRfZGV2X2hlYWQ7CisJc3RydWN0IGRtYXJfZG9tYWluICppbnRlbF9pb21tdV9kb21haW47CiAJc3RydWN0IGt2bV9waWMgKnZwaWM7CiAJc3RydWN0IGt2bV9pb2FwaWMgKnZpb2FwaWM7CiAJc3RydWN0IGt2bV9waXQgKnZwaXQ7CisJc3RydWN0IGhsaXN0X2hlYWQgaXJxX2Fja19ub3RpZmllcl9saXN0OwogCiAJaW50IHJvdW5kX3JvYmluX3ByZXZfdmNwdTsKIAl1bnNpZ25lZCBpbnQgdHNzX2FkZHI7CkBAIC0zMzgsNiArMzc0LDcgQEAKIAl1MzIgbW11X2Zsb29kZWQ7CiAJdTMyIG1tdV9yZWN5Y2xlZDsKIAl1MzIgbW11X2NhY2hlX21pc3M7CisJdTMyIG1tdV91bnN5bmM7CiAJdTMyIHJlbW90ZV90bGJfZmx1c2g7CiAJdTMyIGxwYWdlczsKIH07CkBAIC0zNjQsNiArNDAxLDcgQEAKIAl1MzIgaW5zbl9lbXVsYXRpb247CiAJdTMyIGluc25fZW11bGF0aW9uX2ZhaWw7CiAJdTMyIGh5cGVyY2FsbHM7CisJdTMyIGlycV9pbmplY3Rpb25zOwogfTsKIAogc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgewpAQCAtNDE0LDggKzQ1Miw3IEBACiAJdW5zaWduZWQgbG9uZyAoKmdldF9kcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZHIpOwogCXZvaWQgKCpzZXRfZHIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbHVlLAogCQkgICAgICAgaW50ICpleGNlcHRpb24pOwotCXZvaWQgKCpjYWNoZV9yZWdzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCXZvaWQgKCpkZWNhY2hlX3JlZ3MpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJdm9pZCAoKmNhY2hlX3JlZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGt2bV9yZWcgcmVnKTsKIAl1bnNpZ25lZCBsb25nICgqZ2V0X3JmbGFncykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAl2b2lkICgqc2V0X3JmbGFncykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHJmbGFncyk7CiAKQEAgLTUyOCw2ICs1NjUsOCBAQAogdm9pZCBrdm1faW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMiwKIAkJCSAgIHUzMiBlcnJvcl9jb2RlKTsKIAordm9pZCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOworCiB2b2lkIGt2bV9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIHZvaWQgZnhfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpAQCAtNTUwLDEyICs1ODksMTQgQEAKIHZvaWQgX19rdm1fbW11X2ZyZWVfc29tZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2bV9tbXVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fbW11X3VubG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwordm9pZCBrdm1fbW11X3N5bmNfcm9vdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogaW50IGt2bV9lbXVsYXRlX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBpbnQga3ZtX2ZpeF9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogaW50IGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdTMyIGVycm9yX2NvZGUpOwordm9pZCBrdm1fbW11X2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSk7CiAKIHZvaWQga3ZtX2VuYWJsZV90ZHAodm9pZCk7CiB2b2lkIGt2bV9kaXNhYmxlX3RkcCh2b2lkKTsKQEAgLTY4NiwzMyArNzI3LDYgQEAKIAlUQVNLX1NXSVRDSF9HQVRFID0gMywKIH07CiAKLSNkZWZpbmUgS1ZNVFJBQ0VfNUQoZXZ0LCB2Y3B1LCBkMSwgZDIsIGQzLCBkNCwgZDUsIG5hbWUpIFwKLQl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKLQkJCQkJCXZjcHUsIDUsIGQxLCBkMiwgZDMsIGQ0LCBkNSkKLSNkZWZpbmUgS1ZNVFJBQ0VfNEQoZXZ0LCB2Y3B1LCBkMSwgZDIsIGQzLCBkNCwgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgNCwgZDEsIGQyLCBkMywgZDQsIDApCi0jZGVmaW5lIEtWTVRSQUNFXzNEKGV2dCwgdmNwdSwgZDEsIGQyLCBkMywgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgMywgZDEsIGQyLCBkMywgMCwgMCkKLSNkZWZpbmUgS1ZNVFJBQ0VfMkQoZXZ0LCB2Y3B1LCBkMSwgZDIsIG5hbWUpIFwKLQl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKLQkJCQkJCXZjcHUsIDIsIGQxLCBkMiwgMCwgMCwgMCkKLSNkZWZpbmUgS1ZNVFJBQ0VfMUQoZXZ0LCB2Y3B1LCBkMSwgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgMSwgZDEsIDAsIDAsIDAsIDApCi0jZGVmaW5lIEtWTVRSQUNFXzBEKGV2dCwgdmNwdSwgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgMCwgMCwgMCwgMCwgMCwgMCkKLQotI2lmZGVmIENPTkZJR182NEJJVAotIyBkZWZpbmUgS1ZNX0VYX0VOVFJZICIucXVhZCIKLSMgZGVmaW5lIEtWTV9FWF9QVVNIICJwdXNocSIKLSNlbHNlCi0jIGRlZmluZSBLVk1fRVhfRU5UUlkgIi5sb25nIgotIyBkZWZpbmUgS1ZNX0VYX1BVU0ggInB1c2hsIgotI2VuZGlmCi0KIC8qCiAgKiBIYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb24gaW5zdHJ1Y3Rpb25zIG1heSBmYXVsdCBpZiBhCiAgKiByZWJvb3QgdHVybnMgb2ZmIHZpcnR1YWxpemF0aW9uIHdoaWxlIHByb2Nlc3NlcyBhcmUgcnVubmluZy4KQEAgLTcyNCwxMSArNzM4LDExIEBACiAJIjY2NjogIiBpbnNuICJcblx0IiBcCiAJIi5wdXNoc2VjdGlvbiAuZml4dXAsIFwiYXhcIiBcbiIgXAogCSI2Njc6IFxuXHQiIFwKLQlLVk1fRVhfUFVTSCAiICQ2NjZiIFxuXHQiIFwKKwlfX0FTTV9TSVpFKHB1c2gpICIgJDY2NmIgXG5cdCIJICAgICAgXAogCSJqbXAga3ZtX2hhbmRsZV9mYXVsdF9vbl9yZWJvb3QgXG5cdCIgXAogCSIucG9wc2VjdGlvbiBcblx0IiBcCiAJIi5wdXNoc2VjdGlvbiBfX2V4X3RhYmxlLCBcImFcIiBcblx0IiBcCi0JS1ZNX0VYX0VOVFJZICIgNjY2YiwgNjY3YiBcblx0IiBcCisJX0FTTV9QVFIgIiA2NjZiLCA2NjdiIFxuXHQiIFwKIAkiLnBvcHNlY3Rpb24iCiAKICNkZWZpbmUgS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvZW50cnlfYXJjaC5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgKaW5kZXggOTI4M2I2MC4uNmIxYWRkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgKQEAgLTE0LDYgKzE0LDcgQEAKIEJVSUxEX0lOVEVSUlVQVChpbnZhbGlkYXRlX2ludGVycnVwdCxJTlZBTElEQVRFX1RMQl9WRUNUT1IpCiBCVUlMRF9JTlRFUlJVUFQoY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQsQ0FMTF9GVU5DVElPTl9WRUNUT1IpCiBCVUlMRF9JTlRFUlJVUFQoY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0LENBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChpcnFfbW92ZV9jbGVhbnVwX2ludGVycnVwdCxJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUikKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9hcGljLmgKaW5kZXggMmEzMzBhNC4uM2M2NmYyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpYy5oCkBAIC04NSw2ICs4NSwyMCBAQAogCXJldHVybiAwOwogI2VuZGlmCiB9CisKK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1KQoreworICAgICAgICAvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cworICAgICAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAorICAgICAgICAgKiBwcmlvcml0eSBpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4KKyAgICAgICAgICoKKyAgICAgICAgICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KKyAgICAgICAgICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCisgICAgICAgICAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCisgICAgICAgICAqLworICAgICAgICBjcHVtYXNrX3QgZG9tYWluID0geyB7IFswXSA9IEFQSUNfQUxMX0NQVVMsIH0gfTsKKyAgICAgICAgcmV0dXJuIGRvbWFpbjsKK30KICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCkBAIC0xMzgsNiArMTUyLDUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfYXBpY19tb2RlKHZvaWQpCiB7CiB9Ci0KICNlbmRpZiAvKiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KICNlbmRpZiAvKiBBU01fWDg2X19NQUNIX0RFRkFVTFRfX01BQ0hfQVBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL2lycV92ZWN0b3JzX2xpbWl0cy5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9pcnFfdmVjdG9yc19saW1pdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc4NzBlMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL2lycV92ZWN0b3JzX2xpbWl0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19NQUNIX0dFTkVSSUNfX0lSUV9WRUNUT1JTX0xJTUlUU19ICi0jZGVmaW5lIEFTTV9YODZfX01BQ0hfR0VORVJJQ19fSVJRX1ZFQ1RPUlNfTElNSVRTX0gKLQotLyoKLSAqIEZvciBTdW1taXQgb3IgZ2VuZXJpYyAoaS5lLiBpbnN0YWxsZXIpIGtlcm5lbHMsIHdlIGhhdmUgbG90cyBvZiBJL08gQVBJQ3MsCi0gKiBldmVuIHdpdGggdW5pLXByb2Mga2VybmVscywgc28gdXNlIGEgYmlnIGFycmF5LgotICoKLSAqIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHRoZSBzYW1lIGluIGJvdGggdGhlIGdlbmVyaWMgYW5kIHN1bW1pdCBzdWJhcmNoZXMuCi0gKiBDaGFuZ2Ugb25lLCBjaGFuZ2UgJ2VtIGJvdGguCi0gKi8KLSNkZWZpbmUgTlJfSVJRUwkyMjQKLSNkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMJMTAyNAotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTUFDSF9HRU5FUklDX19JUlFfVkVDVE9SU19MSU1JVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvbWFjaF9hcGljLmgKaW5kZXggNWQwMTBjNi4uNTA4NWI1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9tYWNoX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL21hY2hfYXBpYy5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQgKGdlbmFwaWMtPmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQpCiAjZGVmaW5lIGNoZWNrX2FwaWNpZF91c2VkIChnZW5hcGljLT5jaGVja19hcGljaWRfdXNlZCkKICNkZWZpbmUgY3B1X21hc2tfdG9fYXBpY2lkIChnZW5hcGljLT5jcHVfbWFza190b19hcGljaWQpCisjZGVmaW5lIHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiAoZ2VuYXBpYy0+dmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKQogI2RlZmluZSBlbmFibGVfYXBpY19tb2RlIChnZW5hcGljLT5lbmFibGVfYXBpY19tb2RlKQogI2RlZmluZSBwaHlzX3BrZ19pZCAoZ2VuYXBpYy0+cGh5c19wa2dfaWQpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tc3ItaW5kZXguaCBiL2luY2x1ZGUvYXNtLXg4Ni9tc3ItaW5kZXguaAppbmRleCAwYmI0MzMwLi5kYWJkMTBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbXNyLWluZGV4LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21zci1pbmRleC5oCkBAIC0xNzgsNiArMTc4LDkgQEAKICNkZWZpbmUgTVNSX0lBMzJfRUJMX0NSX1BPV0VST04JCTB4MDAwMDAwMmEKICNkZWZpbmUgTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MICAgICAgICAweDAwMDAwMDNhCiAKKyNkZWZpbmUgRkVBVFVSRV9DT05UUk9MX0xPQ0tFRAkJKDE8PDApCisjZGVmaW5lIEZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVECSgxPDwyKQorCiAjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFCQkweDAwMDAwMDFiCiAjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0JTUAkJKDE8PDgpCiAjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRQkoMTw8MTEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbnVtYXEvYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L251bWFxL2FwaWMuaAppbmRleCBhODM0NGJhLi4wYmYyYTA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbnVtYXEvYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9udW1hcS9hcGljLmgKQEAgLTEyLDggKzEyLDYgQEAKIAlyZXR1cm4gQ1BVX01BU0tfQUxMOwogfQogCi0jZGVmaW5lIFRBUkdFVF9DUFVTICh0YXJnZXRfY3B1cygpKQotCiAjZGVmaW5lIE5PX0JBTEFOQ0VfSVJRICgxKQogI2RlZmluZSBlc3JfZGlzYWJsZSAoMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BhZ2VfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzMyLmgKaW5kZXggZThkODBkMS4uYmRmNWRiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BhZ2VfMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGFnZV8zMi5oCkBAIC0zOSw3ICszOSw2IEBACiB0eXBlZGVmIHU2NAlwdWR2YWxfdDsKIHR5cGVkZWYgdTY0CXBnZHZhbF90OwogdHlwZWRlZiB1NjQJcGdwcm90dmFsX3Q7Ci10eXBlZGVmIHU2NAlwaHlzX2FkZHJfdDsKIAogdHlwZWRlZiB1bmlvbiB7CiAJc3RydWN0IHsKQEAgLTYwLDcgKzU5LDYgQEAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZwlwdWR2YWxfdDsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZwlwZ2R2YWxfdDsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZwlwZ3Byb3R2YWxfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZwlwaHlzX2FkZHJfdDsKIAogdHlwZWRlZiB1bmlvbiB7CiAJcHRldmFsX3QgcHRlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BhZ2VfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzY0LmgKaW5kZXggNWU2NGFjZi4uNDkzODBiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BhZ2VfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGFnZV82NC5oCkBAIC03OSw3ICs3OSw2IEBACiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcHVkdmFsX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdkdmFsX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGdwcm90dmFsX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJcGh5c19hZGRyX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHBhZ2UgKnBndGFibGVfdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlLmgKaW5kZXggMTgyZjlkNC4uODhhNTNiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS5oCkBAIC0xNDgsOCArMTQ4LDEzIEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogI2RlZmluZSBfX1BBR0VfS0VSTkVMX0lERU5UX0xBUkdFX0VYRUMJX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDCiAjZWxzZQorLyoKKyAqIEZvciBQREVfSURFTlRfQVRUUiBpbmNsdWRlIFVTRVIgYml0LiBBcyB0aGUgUERFIGFuZCBQVEUgcHJvdGVjdGlvbgorICogYml0cyBhcmUgY29tYmluZWQsIHRoaXMgd2lsbCBhbG93IHVzZXIgdG8gYWNjZXNzIHRoZSBoaWdoIGFkZHJlc3MgbWFwcGVkCisgKiBWRFNPIGluIHRoZSBwcmVzZW5jZSBvZiBDT05GSUdfQ09NUEFUX1ZEU08KKyAqLwogI2RlZmluZSBQVEVfSURFTlRfQVRUUgkgMHgwMDMJCS8qIFBSRVNFTlQrUlcgKi8KLSNkZWZpbmUgUERFX0lERU5UX0FUVFIJIDB4MDYzCQkvKiBQUkVTRU5UK1JXK0RJUlRZK0FDQ0VTU0VEICovCisjZGVmaW5lIFBERV9JREVOVF9BVFRSCSAweDA2NwkJLyogUFJFU0VOVCtSVytVU0VSK0RJUlRZK0FDQ0VTU0VEICovCiAjZGVmaW5lIFBHRF9JREVOVF9BVFRSCSAweDAwMQkJLyogUFJFU0VOVCAobm8gb3RoZXIgYXR0cmlidXRlcykgKi8KICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcHZjbG9jay5oIGIvaW5jbHVkZS9hc20teDg2L3B2Y2xvY2suaAppbmRleCAxYTM4ZjY4Li5hZDI5ZTI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcHZjbG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wdmNsb2NrLmgKQEAgLTYsNiArNiw3IEBACiAKIC8qIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyBmb3IgeGVuIGFuZCBrdm0gcHYgY2xvY2sgc291cmNlcyAqLwogY3ljbGVfdCBwdmNsb2NrX2Nsb2Nrc291cmNlX3JlYWQoc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKnNyYyk7Cit1bnNpZ25lZCBsb25nIHB2Y2xvY2tfdHNjX2toeihzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqc3JjKTsKIHZvaWQgcHZjbG9ja19yZWFkX3dhbGxjbG9jayhzdHJ1Y3QgcHZjbG9ja193YWxsX2Nsb2NrICp3YWxsLAogCQkJICAgIHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICp2Y3B1LAogCQkJICAgIHN0cnVjdCB0aW1lc3BlYyAqdHMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N0YXRmcy5oIGIvaW5jbHVkZS9hc20teDg2L3N0YXRmcy5oCmluZGV4IDNmMDA1YmMuLmNhNWRjMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zdGF0ZnMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvc3RhdGZzLmgKQEAgLTEsNjMgKzEsMTIgQEAKICNpZm5kZWYgQVNNX1g4Nl9fU1RBVEZTX0gKICNkZWZpbmUgQVNNX1g4Nl9fU1RBVEZTX0gKIAotI2lmZGVmIF9faTM4Nl9fCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3RhdGZzLmg+Ci0jZWxzZQotCi0jaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotdHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJZnNpZF90OwotCi0jZW5kaWYKLQogLyoKLSAqIFRoaXMgaXMgdWdseSAtLSB3ZSdyZSBhbHJlYWR5IDY0LWJpdCBjbGVhbiwgc28ganVzdCBkdXBsaWNhdGUgdGhlCi0gKiBkZWZpbml0aW9ucy4KKyAqIFdlIG5lZWQgY29tcGF0X3N0YXRmczY0IHRvIGJlIHBhY2tlZCwgYmVjYXVzZSB0aGUgaTM4NiBBQkkgd29uJ3QKKyAqIGFkZCBwYWRkaW5nIGF0IHRoZSBlbmQgdG8gYnJpbmcgaXQgdG8gYSBtdWx0aXBsZSBvZiA4IGJ5dGVzLCBidXQKKyAqIHRoZSB4ODZfNjQgQUJJIHdpbGwuCiAgKi8KLXN0cnVjdCBzdGF0ZnMgewotCWxvbmcgZl90eXBlOwotCWxvbmcgZl9ic2l6ZTsKLQlsb25nIGZfYmxvY2tzOwotCWxvbmcgZl9iZnJlZTsKLQlsb25nIGZfYmF2YWlsOwotCWxvbmcgZl9maWxlczsKLQlsb25nIGZfZmZyZWU7Ci0JX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKLQlsb25nIGZfbmFtZWxlbjsKLQlsb25nIGZfZnJzaXplOwotCWxvbmcgZl9zcGFyZVs1XTsKLX07CisjZGVmaW5lIEFSQ0hfUEFDS19DT01QQVRfU1RBVEZTNjQgX19hdHRyaWJ1dGVfXygocGFja2VkLGFsaWduZWQoNCkpKQogCi1zdHJ1Y3Qgc3RhdGZzNjQgewotCWxvbmcgZl90eXBlOwotCWxvbmcgZl9ic2l6ZTsKLQlsb25nIGZfYmxvY2tzOwotCWxvbmcgZl9iZnJlZTsKLQlsb25nIGZfYmF2YWlsOwotCWxvbmcgZl9maWxlczsKLQlsb25nIGZfZmZyZWU7Ci0JX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKLQlsb25nIGZfbmFtZWxlbjsKLQlsb25nIGZfZnJzaXplOwotCWxvbmcgZl9zcGFyZVs1XTsKLX07Ci0KLXN0cnVjdCBjb21wYXRfc3RhdGZzNjQgewotCV9fdTMyIGZfdHlwZTsKLQlfX3UzMiBmX2JzaXplOwotCV9fdTY0IGZfYmxvY2tzOwotCV9fdTY0IGZfYmZyZWU7Ci0JX191NjQgZl9iYXZhaWw7Ci0JX191NjQgZl9maWxlczsKLQlfX3U2NCBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JX191MzIgZl9uYW1lbGVuOwotCV9fdTMyIGZfZnJzaXplOwotCV9fdTMyIGZfc3BhcmVbNV07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi0jZW5kaWYgLyogIV9faTM4Nl9fICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3RhdGZzLmg+CiAjZW5kaWYgLyogQVNNX1g4Nl9fU1RBVEZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L3N1bW1pdC9hcGljLmgKaW5kZXggYzViMmU0Yi4uOWIzMDcwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N1bW1pdC9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3N1bW1pdC9hcGljLmgKQEAgLTIyLDcgKzIyLDYgQEAKIAkgKi8KIAlyZXR1cm4gY3B1bWFza19vZl9jcHUoMCk7CiB9Ci0jZGVmaW5lIFRBUkdFVF9DUFVTCSh0YXJnZXRfY3B1cygpKQogCiAjZGVmaW5lIElOVF9ERUxJVkVSWV9NT0RFIChkZXN0X0xvd2VzdFByaW8pCiAjZGVmaW5lIElOVF9ERVNUX01PREUgMSAgICAgLyogbG9naWNhbCBkZWxpdmVyeSBicm9hZGNhc3QgdG8gYWxsIHByb2NzICovCkBAIC0xNjAsNyArMTU5LDcgQEAKIAkJCWludCBuZXdfYXBpY2lkID0gY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7CiAJCQlpZiAoYXBpY2lkX2NsdXN0ZXIoYXBpY2lkKSAhPQogCQkJCQlhcGljaWRfY2x1c3RlcihuZXdfYXBpY2lkKSl7Ci0JCQkJcHJpbnRrICgiJXM6IE5vdCBhIHZhbGlkIG1hc2shXG4iLF9fRlVOQ1RJT05fXyk7CisJCQkJcHJpbnRrICgiJXM6IE5vdCBhIHZhbGlkIG1hc2shXG4iLCBfX2Z1bmNfXyk7CiAJCQkJcmV0dXJuIDB4RkY7CiAJCQl9CiAJCQlhcGljaWQgPSBhcGljaWQgfCBuZXdfYXBpY2lkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N1bW1pdC9pcnFfdmVjdG9yc19saW1pdHMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvaXJxX3ZlY3RvcnNfbGltaXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MGNlM2YuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N1bW1pdC9pcnFfdmVjdG9yc19saW1pdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9JUlFfVkVDVE9SU19MSU1JVFNfSAotI2RlZmluZSBfQVNNX0lSUV9WRUNUT1JTX0xJTUlUU19ICi0KLS8qCi0gKiBGb3IgU3VtbWl0IG9yIGdlbmVyaWMgKGkuZS4gaW5zdGFsbGVyKSBrZXJuZWxzLCB3ZSBoYXZlIGxvdHMgb2YgSS9PIEFQSUNzLAotICogZXZlbiB3aXRoIHVuaS1wcm9jIGtlcm5lbHMsIHNvIHVzZSBhIGJpZyBhcnJheS4KLSAqCi0gKiBUaGlzIHZhbHVlIHNob3VsZCBiZSB0aGUgc2FtZSBpbiBib3RoIHRoZSBnZW5lcmljIGFuZCBzdW1taXQgc3ViYXJjaGVzLgotICogQ2hhbmdlIG9uZSwgY2hhbmdlICdlbSBib3RoLgotICovCi0jZGVmaW5lIE5SX0lSUVMJMjI0Ci0jZGVmaW5lIE5SX0lSUV9WRUNUT1JTCTEwMjQKLQotI2VuZGlmIC8qIF9BU01fSVJRX1ZFQ1RPUlNfTElNSVRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91di9iaW9zLmggYi9pbmNsdWRlL2FzbS14ODYvdXYvYmlvcy5oCmluZGV4IDdjZDZkN2UuLjIxNWYxOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni91di9iaW9zLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3V2L2Jpb3MuaApAQCAtMiw5ICsyLDcgQEAKICNkZWZpbmUgQVNNX1g4Nl9fVVZfX0JJT1NfSAogCiAvKgotICogQklPUyBsYXllciBkZWZpbml0aW9ucy4KLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBVViBCSU9TIGxheWVyIGRlZmluaXRpb25zLgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xOSwxMSArMTcsNDMgQEAKICAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoYykgUnVzcyBBbmRlcnNvbgogICovCiAKICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KIAotI2RlZmluZSBCSU9TX0ZSRVFfQkFTRQkJCTB4MDEwMDAwMDEKKy8qCisgKiBWYWx1ZXMgZm9yIHRoZSBCSU9TIGNhbGxzLiAgSXQgaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCAqIGFyZ3VtZW50IGluIHRoZQorICogQklPUyBjYWxsLiAgUGFzc2luZyBhbnkgb3RoZXIgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgcmVzdWx0CisgKiBpbiBhIEJJT1NfU1RBVFVTX1VOSU1QTEVNRU5URUQgcmV0dXJuIHN0YXR1cy4KKyAqLworZW51bSB1dl9iaW9zX2NtZCB7CisJVVZfQklPU19DT01NT04sCisJVVZfQklPU19HRVRfU05fSU5GTywKKwlVVl9CSU9TX0ZSRVFfQkFTRQorfTsKKworLyoKKyAqIFN0YXR1cyB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBhIEJJT1MgY2FsbC4KKyAqLworZW51bSB7CisJQklPU19TVEFUVVNfU1VDQ0VTUwkJPSAgMCwKKwlCSU9TX1NUQVRVU19VTklNUExFTUVOVEVECT0gLUVOT1NZUywKKwlCSU9TX1NUQVRVU19FSU5WQUwJCT0gLUVJTlZBTCwKKwlCSU9TX1NUQVRVU19VTkFWQUlMCQk9IC1FQlVTWQorfTsKKworLyoKKyAqIFRoZSBVViBzeXN0ZW0gdGFibGUgZGVzY3JpYmVzIHNwZWNpZmljIGZpcm13YXJlCisgKiBjYXBhYmlsaXRpZXMgYXZhaWxhYmxlIHRvIHRoZSBMaW51eCBrZXJuZWwgYXQgcnVudGltZS4KKyAqLworc3RydWN0IHV2X3N5c3RhYiB7CisJY2hhciBzaWduYXR1cmVbNF07CS8qIG11c3QgYmUgIlVWU1QiICovCisJdTMyIHJldmlzaW9uOwkJLyogZGlzdGluZ3Vpc2ggZGlmZmVyZW50IGZpcm13YXJlIHJldnMgKi8KKwl1NjQgZnVuY3Rpb247CQkvKiBCSU9TIHJ1bnRpbWUgY2FsbGJhY2sgZnVuY3Rpb24gcHRyICovCit9OwogCiBlbnVtIHsKIAlCSU9TX0ZSRVFfQkFTRV9QTEFURk9STSA9IDAsCkBAIC0zMSwzOCArNjEsMzQgQEAKIAlCSU9TX0ZSRVFfQkFTRV9SRUFMVElNRV9DTE9DSyA9IDIKIH07CiAKLSMgZGVmaW5lIEJJT1NfQ0FMTChyZXN1bHQsIGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNykJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCS8qIFhYWCAtIHRoZSByZWFsIGNhbGwgZ29lcyBoZXJlICovCQkJXAotCQlyZXN1bHQuc3RhdHVzID0gQklPU19TVEFUVVNfVU5JTVBMRU1FTlRFRDsJCVwKLQkJaXNydi52MCA9IDA7CQkJCQkJXAotCQlpc3J2LnYxID0gMDsJCQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotZW51bSB7Ci0JQklPU19TVEFUVVNfU1VDQ0VTUwkJPSAgMCwKLQlCSU9TX1NUQVRVU19VTklNUExFTUVOVEVECT0gLTEsCi0JQklPU19TVEFUVVNfRUlOVkFMCQk9IC0yLAotCUJJT1NfU1RBVFVTX0VSUk9SCQk9IC0zCit1bmlvbiBwYXJ0aXRpb25faW5mb191IHsKKwl1NjQJdmFsOworCXN0cnVjdCB7CisJCXU2NAlodWJfdmVyc2lvbgk6ICA4LAorCQkJcGFydGl0aW9uX2lkCTogMTYsCisJCQljb2hlcmVuY2VfaWQJOiAxNiwKKwkJCXJlZ2lvbl9zaXplCTogMjQ7CisJfTsKIH07CiAKLXN0cnVjdCB1dl9iaW9zX3JldHZhbCB7Ci0JLyoKLQkgKiBBIHplcm8gc3RhdHVzIHZhbHVlIGluZGljYXRlcyBjYWxsIGNvbXBsZXRlZCB3aXRob3V0IGVycm9yLgotCSAqIEEgbmVnYXRpdmUgc3RhdHVzIHZhbHVlIGluZGljYXRlcyByZWFzb24gb2YgY2FsbCBmYWlsdXJlLgotCSAqIEEgcG9zaXRpdmUgc3RhdHVzIHZhbHVlIGluZGljYXRlcyBzdWNjZXNzIGJ1dCBhbgotCSAqIGluZm9ybWF0aW9uYWwgdmFsdWUgc2hvdWxkIGJlIHByaW50ZWQgKGUuZy4sICJyZWJvb3QgZm9yCi0JICogY2hhbmdlIHRvIHRha2UgZWZmZWN0IikuCi0JICovCi0JczY0IHN0YXR1czsKLQl1NjQgdjA7Ci0JdTY0IHYxOwotCXU2NCB2MjsKLX07CisvKgorICogYmlvcyBjYWxscyBoYXZlIDYgcGFyYW1ldGVycworICovCitleHRlcm4gczY0IHV2X2Jpb3NfY2FsbChlbnVtIHV2X2Jpb3NfY21kLCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CitleHRlcm4gczY0IHV2X2Jpb3NfY2FsbF9pcnFzYXZlKGVudW0gdXZfYmlvc19jbWQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKK2V4dGVybiBzNjQgdXZfYmlvc19jYWxsX3JlZW50cmFudChlbnVtIHV2X2Jpb3NfY21kLCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CiAKLWV4dGVybiBsb25nCi14ODZfYmlvc19mcmVxX2Jhc2UodW5zaWduZWQgbG9uZyB3aGljaCwgdW5zaWduZWQgbG9uZyAqdGlja3NfcGVyX3NlY29uZCwKLQkJICAgdW5zaWduZWQgbG9uZyAqZHJpZnRfaW5mbyk7Ci1leHRlcm4gY29uc3QgY2hhciAqeDg2X2Jpb3Nfc3RyZXJyb3IobG9uZyBzdGF0dXMpOworZXh0ZXJuIHM2NCB1dl9iaW9zX2dldF9zbl9pbmZvKGludCwgaW50ICosIGxvbmcgKiwgbG9uZyAqLCBsb25nICopOworZXh0ZXJuIHM2NCB1dl9iaW9zX2ZyZXFfYmFzZSh1NjQsIHU2NCAqKTsKKworZXh0ZXJuIHZvaWQgdXZfYmlvc19pbml0KHZvaWQpOworCitleHRlcm4gaW50IHV2X3R5cGU7CitleHRlcm4gbG9uZyBzbl9wYXJ0aXRpb25faWQ7CitleHRlcm4gbG9uZyB1dl9jb2hlcmVuY3lfaWQ7CitleHRlcm4gbG9uZyB1dl9yZWdpb25fc2l6ZTsKKyNkZWZpbmUgcGFydGl0aW9uX2NvaGVyZW5jZV9pZCgpCSh1dl9jb2hlcmVuY3lfaWQpCisKK2V4dGVybiBzdHJ1Y3Qga29iamVjdCAqc2dpX3V2X2tvYmo7CS8qIC9zeXMvZmlybXdhcmUvc2dpX3V2ICovCiAKICNlbmRpZiAvKiBBU01fWDg2X19VVl9fQklPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvdXYvdXZfaXJxLmggYi9pbmNsdWRlL2FzbS14ODYvdXYvdXZfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmNWYzMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni91di91dl9pcnEuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogU0dJIFVWIElSUSBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBBU01fWDg2X19VVl9fVVZfSVJRX0gKKyNkZWZpbmUgQVNNX1g4Nl9fVVZfX1VWX0lSUV9ICisKKy8qIElmIGEgZ2VuZXJpYyB2ZXJzaW9uIG9mIHRoaXMgc3RydWN0dXJlIGdldHMgZGVmaW5lZCwgZWxpbWluYXRlIHRoaXMgb25lLiAqLworc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgeworCV9fdTY0CXZlY3RvcgkJOiAgOCwKKwkJZGVsaXZlcnlfbW9kZQk6ICAzLAorCQlkZXN0X21vZGUJOiAgMSwKKwkJZGVsaXZlcnlfc3RhdHVzCTogIDEsCisJCXBvbGFyaXR5CTogIDEsCisJCV9fcmVzZXJ2ZWRfMQk6ICAxLAorCQl0cmlnZ2VyCQk6ICAxLAorCQltYXNrCQk6ICAxLAorCQlfX3Jlc2VydmVkXzIJOiAxNSwKKwkJZGVzdAkJOiAzMjsKK307CisKK2V4dGVybiBzdHJ1Y3QgaXJxX2NoaXAgdXZfaXJxX2NoaXA7CisKK2V4dGVybiBpbnQgYXJjaF9lbmFibGVfdXZfaXJxKGNoYXIgKiwgdW5zaWduZWQgaW50LCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBhcmNoX2Rpc2FibGVfdXZfaXJxKGludCwgdW5zaWduZWQgbG9uZyk7CisKK2V4dGVybiBpbnQgdXZfc2V0dXBfaXJxKGNoYXIgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgdXZfdGVhcmRvd25faXJxKHVuc2lnbmVkIGludCwgaW50LCB1bnNpZ25lZCBsb25nKTsKKworI2VuZGlmIC8qIEFTTV9YODZfX1VWX19VVl9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3hlbi9wYWdlLmggYi9pbmNsdWRlL2FzbS14ODYveGVuL3BhZ2UuaAppbmRleCBjNTAxODVkLi5kNWVhZGEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYveGVuL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS14ODYveGVuL3BhZ2UuaApAQCAtNzYsMTMgKzc2LDEzIEBACiBzdGF0aWMgaW5saW5lIHhtYWRkcl90IHBoeXNfdG9fbWFjaGluZSh4cGFkZHJfdCBwaHlzKQogewogCXVuc2lnbmVkIG9mZnNldCA9IHBoeXMucGFkZHIgJiB+UEFHRV9NQVNLOwotCXJldHVybiBYTUFERFIoUEZOX1BIWVMoKHU2NClwZm5fdG9fbWZuKFBGTl9ET1dOKHBoeXMucGFkZHIpKSkgfCBvZmZzZXQpOworCXJldHVybiBYTUFERFIoUEZOX1BIWVMocGZuX3RvX21mbihQRk5fRE9XTihwaHlzLnBhZGRyKSkpIHwgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGlubGluZSB4cGFkZHJfdCBtYWNoaW5lX3RvX3BoeXMoeG1hZGRyX3QgbWFjaGluZSkKIHsKIAl1bnNpZ25lZCBvZmZzZXQgPSBtYWNoaW5lLm1hZGRyICYgflBBR0VfTUFTSzsKLQlyZXR1cm4gWFBBRERSKFBGTl9QSFlTKCh1NjQpbWZuX3RvX3BmbihQRk5fRE9XTihtYWNoaW5lLm1hZGRyKSkpIHwgb2Zmc2V0KTsKKwlyZXR1cm4gWFBBRERSKFBGTl9QSFlTKG1mbl90b19wZm4oUEZOX0RPV04obWFjaGluZS5tYWRkcikpKSB8IG9mZnNldCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9hLm91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGYxMzcwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9hLm91dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXh0ZW5zYS9hLm91dC5oCi0gKgotICogRHVtbXkgYS5vdXQgZmlsZS4gWHRlbnNhIGRvZXMgbm90IHN1cHBvcnQgdGhlIGEub3V0IGZvcm1hdCwgYnV0IHRoZSBrZXJuZWwKLSAqIHNlZW1zIHRvIGRlcGVuZCBvbiBpdC4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDA1IFRlbnNpbGljYSBJbmMuCi0gKi8KLQotI2lmbmRlZiBfWFRFTlNBX0FfT1VUX0gKLSNkZWZpbmUgX1hURU5TQV9BX09VVF9ICi0KLXN0cnVjdCBleGVjCi17Ci0gIHVuc2lnbmVkIGxvbmcgYV9pbmZvOwotICB1bnNpZ25lZCBhX3RleHQ7Ci0gIHVuc2lnbmVkIGFfZGF0YTsKLSAgdW5zaWduZWQgYV9ic3M7Ci0gIHVuc2lnbmVkIGFfc3ltczsKLSAgdW5zaWduZWQgYV9lbnRyeTsKLSAgdW5zaWduZWQgYV90cnNpemU7Ci0gIHVuc2lnbmVkIGFfZHJzaXplOwotfTsKLQotI2VuZGlmIC8qIF9YVEVOU0FfQV9PVVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2VsZi5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2VsZi5oCmluZGV4IGNhNmU1MTAuLmMzZjUzZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvZWxmLmgKQEAgLTE4OSw3ICsxODksNyBAQAogI2VuZGlmCiB9IGVsZl94dHJlZ3NfdDsKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYXzMyQklUKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVhfMzJCSVQpCiAKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvdGhyZWFkX2luZm8uaAppbmRleCA3ZTQxMzFkLi4wZjRmZTFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvdGhyZWFkX2luZm8uaApAQCAtMTM0LDYgKzEzNCw3IEBACiAjZGVmaW5lIFRJRl9NRU1ESUUJCTUKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk2CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCisjZGVmaW5lIFRJRl9GUkVFWkUJCTE3CS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCkBAIC0xNDIsNiArMTQzLDcgQEAKICNkZWZpbmUgX1RJRl9JUkVUCQkoMTw8VElGX0lSRVQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJMHgwMDAwRkZGRQkvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCiAjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLCTB4MDAwMEZGRkYJLyogd29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHUtc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybS5oIGIvaW5jbHVkZS9kcm0vZHJtLmgKaW5kZXggMzhkM2M2Yi4uZjQ2YmE0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtLmgKQEAgLTM2LDcgKzM2LDYgQEAKICNpZm5kZWYgX0RSTV9IXwogI2RlZmluZSBfRFJNX0hfCiAKLSNpZiBkZWZpbmVkKF9fbGludXhfXykKICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCiAjZW5kaWYKICNpbmNsdWRlIDxhc20vaW9jdGwuaD4JCS8qIEZvciBfSU8qIG1hY3JvcyAqLwpAQCAtNDYsMjIgKzQ1LDYgQEAKICNkZWZpbmUgRFJNX0lPQ19XUklURQkJX0lPQ19XUklURQogI2RlZmluZSBEUk1fSU9DX1JFQURXUklURQlfSU9DX1JFQUR8X0lPQ19XUklURQogI2RlZmluZSBEUk1fSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKSBfSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKQotI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoSU5fTU9EVUxFKQotLyogUHJldmVudCBuYW1lIGNvbGxpc2lvbiB3aGVuIGluY2x1ZGluZyBzeXMvaW9jY29tLmggKi8KLSN1bmRlZiBpb2N0bAotI2luY2x1ZGUgPHN5cy9pb2Njb20uaD4KLSNkZWZpbmUgaW9jdGwoYSxiLGMpCQl4Zjg2aW9jdGwoYSxiLGMpCi0jZWxzZQotI2luY2x1ZGUgPHN5cy9pb2Njb20uaD4KLSNlbmRpZgkJCQkvKiBfX0ZyZWVCU0RfXyAmJiB4Zjg2aW9jdGwgKi8KLSNkZWZpbmUgRFJNX0lPQ1RMX05SKG4pCQkoKG4pICYgMHhmZikKLSNkZWZpbmUgRFJNX0lPQ19WT0lECQlJT0NfVk9JRAotI2RlZmluZSBEUk1fSU9DX1JFQUQJCUlPQ19PVVQKLSNkZWZpbmUgRFJNX0lPQ19XUklURQkJSU9DX0lOCi0jZGVmaW5lIERSTV9JT0NfUkVBRFdSSVRFCUlPQ19JTk9VVAotI2RlZmluZSBEUk1fSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKSBfSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKQotI2VuZGlmCiAKICNkZWZpbmUgRFJNX01BSk9SICAgICAgIDIyNgogI2RlZmluZSBEUk1fTUFYX01JTk9SICAgMTUKQEAgLTQ3MSw2ICs0NTQsNyBAQAogZW51bSBkcm1fdmJsYW5rX3NlcV90eXBlIHsKIAlfRFJNX1ZCTEFOS19BQlNPTFVURSA9IDB4MCwJLyoqPCBXYWl0IGZvciBzcGVjaWZpYyB2Ymxhbmsgc2VxdWVuY2UgbnVtYmVyICovCiAJX0RSTV9WQkxBTktfUkVMQVRJVkUgPSAweDEsCS8qKjwgV2FpdCBmb3IgZ2l2ZW4gbnVtYmVyIG9mIHZibGFua3MgKi8KKwlfRFJNX1ZCTEFOS19GTElQID0gMHg4MDAwMDAwLCAgIC8qKjwgU2NoZWR1bGVkIGJ1ZmZlciBzd2FwIHNob3VsZCBmbGlwICovCiAJX0RSTV9WQkxBTktfTkVYVE9OTUlTUyA9IDB4MTAwMDAwMDAsCS8qKjwgSWYgbWlzc2VkLCB3YWl0IGZvciBuZXh0IHZibGFuayAqLwogCV9EUk1fVkJMQU5LX1NFQ09OREFSWSA9IDB4MjAwMDAwMDAsCS8qKjwgU2Vjb25kYXJ5IGRpc3BsYXkgY29udHJvbGxlciAqLwogCV9EUk1fVkJMQU5LX1NJR05BTCA9IDB4NDAwMDAwMDAJLyoqPCBTZW5kIHNpZ25hbCBpbnN0ZWFkIG9mIGJsb2NraW5nICovCkBAIC01MDMsNiArNDg3LDE5IEBACiAJc3RydWN0IGRybV93YWl0X3ZibGFua19yZXBseSByZXBseTsKIH07CiAKKyNkZWZpbmUgX0RSTV9QUkVfTU9ERVNFVCAxCisjZGVmaW5lIF9EUk1fUE9TVF9NT0RFU0VUIDIKKworLyoqCisgKiBEUk1fSU9DVExfTU9ERVNFVF9DVEwgaW9jdGwgYXJndW1lbnQgdHlwZQorICoKKyAqIFxzYSBkcm1Nb2Rlc2V0Q3RsKCkuCisgKi8KK3N0cnVjdCBkcm1fbW9kZXNldF9jdGwgeworCXVpbnQzMl90IGNydGM7CisJdWludDMyX3QgY21kOworfTsKKwogLyoqCiAgKiBEUk1fSU9DVExfQUdQX0VOQUJMRSBpb2N0bCBhcmd1bWVudCB0eXBlLgogICoKQEAgLTU3Myw2ICs1NzAsMzQgQEAKIAlpbnQgZHJtX2RkX21pbm9yOwogfTsKIAorLyoqIERSTV9JT0NUTF9HRU1fQ0xPU0UgaW9jdGwgYXJndW1lbnQgdHlwZSAqLworc3RydWN0IGRybV9nZW1fY2xvc2UgeworCS8qKiBIYW5kbGUgb2YgdGhlIG9iamVjdCB0byBiZSBjbG9zZWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKK307CisKKy8qKiBEUk1fSU9DVExfR0VNX0ZMSU5LIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KK3N0cnVjdCBkcm1fZ2VtX2ZsaW5rIHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG5hbWVkICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqIFJldHVybmVkIGdsb2JhbCBuYW1lICovCisJdWludDMyX3QgbmFtZTsKK307CisKKy8qKiBEUk1fSU9DVExfR0VNX09QRU4gaW9jdGwgYXJndW1lbnQgdHlwZSAqLworc3RydWN0IGRybV9nZW1fb3BlbiB7CisJLyoqIE5hbWUgb2Ygb2JqZWN0IGJlaW5nIG9wZW5lZCAqLworCXVpbnQzMl90IG5hbWU7CisKKwkvKiogUmV0dXJuZWQgaGFuZGxlIGZvciB0aGUgb2JqZWN0ICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqIFJldHVybmVkIHNpemUgb2YgdGhlIG9iamVjdCAqLworCXVpbnQ2NF90IHNpemU7Cit9OworCiAjZGVmaW5lIERSTV9JT0NUTF9CQVNFCQkJJ2QnCiAjZGVmaW5lIERSTV9JTyhucikJCQlfSU8oRFJNX0lPQ1RMX0JBU0UsbnIpCiAjZGVmaW5lIERSTV9JT1IobnIsdHlwZSkJCV9JT1IoRFJNX0lPQ1RMX0JBU0UsbnIsdHlwZSkKQEAgLTU4Nyw2ICs2MTIsMTAgQEAKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9DTElFTlQgICAgICAgICAgICBEUk1fSU9XUigweDA1LCBzdHJ1Y3QgZHJtX2NsaWVudCkKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9TVEFUUyAgICAgICAgICAgICBEUk1fSU9SKCAweDA2LCBzdHJ1Y3QgZHJtX3N0YXRzKQogI2RlZmluZSBEUk1fSU9DVExfU0VUX1ZFUlNJT04JCURSTV9JT1dSKDB4MDcsIHN0cnVjdCBkcm1fc2V0X3ZlcnNpb24pCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFU0VUX0NUTCAgICAgICAgICAgRFJNX0lPVygweDA4LCBzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsKQorI2RlZmluZSBEUk1fSU9DVExfR0VNX0NMT1NFCQlEUk1fSU9XICgweDA5LCBzdHJ1Y3QgZHJtX2dlbV9jbG9zZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0dFTV9GTElOSwkJRFJNX0lPV1IoMHgwYSwgc3RydWN0IGRybV9nZW1fZmxpbmspCisjZGVmaW5lIERSTV9JT0NUTF9HRU1fT1BFTgkJRFJNX0lPV1IoMHgwYiwgc3RydWN0IGRybV9nZW1fb3BlbikKIAogI2RlZmluZSBEUk1fSU9DVExfU0VUX1VOSVFVRQkJRFJNX0lPVyggMHgxMCwgc3RydWN0IGRybV91bmlxdWUpCiAjZGVmaW5lIERSTV9JT0NUTF9BVVRIX01BR0lDCQlEUk1fSU9XKCAweDExLCBzdHJ1Y3QgZHJtX2F1dGgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggMWMxYjEzZS4uNTljNzk2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtMTA0LDYgKzEwNCw3IEBACiAjZGVmaW5lIERSSVZFUl9ETUFfUVVFVUUgICAweDIwMAogI2RlZmluZSBEUklWRVJfRkJfRE1BICAgICAgMHg0MDAKICNkZWZpbmUgRFJJVkVSX0lSUV9WQkwyICAgIDB4ODAwCisjZGVmaW5lIERSSVZFUl9HRU0gICAgICAgICAweDEwMDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqIFxuYW1lIEJlZ2luIHRoZSBEUk0uLi4gKi8KQEAgLTM4Nyw2ICszODgsMTAgQEAKIAlzdHJ1Y3QgZHJtX21pbm9yICptaW5vcjsKIAlpbnQgcmVtb3ZlX2F1dGhfb25fY2xvc2U7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2NvdW50OworCS8qKiBNYXBwaW5nIG9mIG1tIG9iamVjdCBoYW5kbGVzIHRvIG9iamVjdCBwb2ludGVycy4gKi8KKwlzdHJ1Y3QgaWRyIG9iamVjdF9pZHI7CisJLyoqIExvY2sgZm9yIHN5bmNocm9uaXphdGlvbiBvZiBhY2Nlc3MgdG8gb2JqZWN0X2lkci4gKi8KKwlzcGlubG9ja190IHRhYmxlX2xvY2s7CiAJc3RydWN0IGZpbGUgKmZpbHA7CiAJdm9pZCAqZHJpdmVyX3ByaXY7CiB9OwpAQCAtNTU4LDYgKzU2Myw1NiBAQAogfTsKIAogLyoqCisgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBkcm1fbW0gbWVtb3J5IG9iamVjdCwgd2hpY2ggd2lsbCBiZSB1c2VkIGJ5IHRoZQorICogRFJNIGZvciBpdHMgYnVmZmVyIG9iamVjdHMuCisgKi8KK3N0cnVjdCBkcm1fZ2VtX29iamVjdCB7CisJLyoqIFJlZmVyZW5jZSBjb3VudCBvZiB0aGlzIG9iamVjdCAqLworCXN0cnVjdCBrcmVmIHJlZmNvdW50OworCisJLyoqIEhhbmRsZSBjb3VudCBvZiB0aGlzIG9iamVjdC4gRWFjaCBoYW5kbGUgYWxzbyBob2xkcyBhIHJlZmVyZW5jZSAqLworCXN0cnVjdCBrcmVmIGhhbmRsZWNvdW50OworCisJLyoqIFJlbGF0ZWQgZHJtIGRldmljZSAqLworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisKKwkvKiogRmlsZSByZXByZXNlbnRpbmcgdGhlIHNobWVtIHN0b3JhZ2UgKi8KKwlzdHJ1Y3QgZmlsZSAqZmlscDsKKworCS8qKgorCSAqIFNpemUgb2YgdGhlIG9iamVjdCwgaW4gYnl0ZXMuICBJbW11dGFibGUgb3ZlciB0aGUgb2JqZWN0J3MKKwkgKiBsaWZldGltZS4KKwkgKi8KKwlzaXplX3Qgc2l6ZTsKKworCS8qKgorCSAqIEdsb2JhbCBuYW1lIGZvciB0aGlzIG9iamVjdCwgc3RhcnRzIGF0IDEuIDAgbWVhbnMgdW5uYW1lZC4KKwkgKiBBY2Nlc3MgaXMgY292ZXJlZCBieSB0aGUgb2JqZWN0X25hbWVfbG9jayBpbiB0aGUgcmVsYXRlZCBkcm1fZGV2aWNlCisJICovCisJaW50IG5hbWU7CisKKwkvKioKKwkgKiBNZW1vcnkgZG9tYWlucy4gVGhlc2UgbW9uaXRvciB3aGljaCBjYWNoZXMgY29udGFpbiByZWFkL3dyaXRlIGRhdGEKKwkgKiByZWxhdGVkIHRvIHRoZSBvYmplY3QuIFdoZW4gdHJhbnNpdGlvbmluZyBmcm9tIG9uZSBzZXQgb2YgZG9tYWlucworCSAqIHRvIGFub3RoZXIsIHRoZSBkcml2ZXIgaXMgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IGNhY2hlcyBhcmUgc3VpdGFibHkKKwkgKiBmbHVzaGVkIGFuZCBpbnZhbGlkYXRlZAorCSAqLworCXVpbnQzMl90IHJlYWRfZG9tYWluczsKKwl1aW50MzJfdCB3cml0ZV9kb21haW47CisKKwkvKioKKwkgKiBXaGlsZSB2YWxpZGF0aW5nIGFuIGV4ZWMgb3BlcmF0aW9uLCB0aGUKKwkgKiBuZXcgcmVhZC93cml0ZSBkb21haW4gdmFsdWVzIGFyZSBjb21wdXRlZCBoZXJlLgorCSAqIFRoZXkgd2lsbCBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgYWJvdmUgdmFsdWVzCisJICogYXQgdGhlIHBvaW50IHRoYXQgYW55IGNhY2hlIGZsdXNoaW5nIG9jY3VycworCSAqLworCXVpbnQzMl90IHBlbmRpbmdfcmVhZF9kb21haW5zOworCXVpbnQzMl90IHBlbmRpbmdfd3JpdGVfZG9tYWluOworCisJdm9pZCAqZHJpdmVyX3ByaXZhdGU7Cit9OworCisvKioKICAqIERSTSBkcml2ZXIgc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnQgdGhlIGNvbW1vbiBjb2RlIGZvcgogICogYSBmYW1pbHkgb2YgY2FyZHMuIFRoZXJlIHdpbGwgb25lIGRybV9kZXZpY2UgZm9yIGVhY2ggY2FyZCBwcmVzZW50CiAgKiBpbiB0aGlzIGZhbWlseQpAQCAtNTgwLDExICs2MzUsNTQgQEAKIAlpbnQgKCprZXJuZWxfY29udGV4dF9zd2l0Y2gpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgb2xkLAogCQkJCSAgICAgIGludCBuZXcpOwogCXZvaWQgKCprZXJuZWxfY29udGV4dF9zd2l0Y2hfdW5sb2NrKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci0JaW50ICgqdmJsYW5rX3dhaXQpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKLQlpbnQgKCp2Ymxhbmtfd2FpdDIpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKIAlpbnQgKCpkcmlfbGlicmFyeV9uYW1lKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY2hhciAqYnVmKTsKIAogCS8qKgorCSAqIGdldF92YmxhbmtfY291bnRlciAtIGdldCByYXcgaGFyZHdhcmUgdmJsYW5rIGNvdW50ZXIKKwkgKiBAZGV2OiBEUk0gZGV2aWNlCisJICogQGNydGM6IGNvdW50ZXIgdG8gZmV0Y2gKKwkgKgorCSAqIERyaXZlciBjYWxsYmFjayBmb3IgZmV0Y2hpbmcgYSByYXcgaGFyZHdhcmUgdmJsYW5rIGNvdW50ZXIKKwkgKiBmb3IgQGNydGMuICBJZiBhIGRldmljZSBkb2Vzbid0IGhhdmUgYSBoYXJkd2FyZSBjb3VudGVyLCB0aGUKKwkgKiBkcml2ZXIgY2FuIHNpbXBseSByZXR1cm4gdGhlIHZhbHVlIG9mIGRybV92YmxhbmtfY291bnQgYW5kCisJICogbWFrZSB0aGUgZW5hYmxlX3ZibGFuaygpIGFuZCBkaXNhYmxlX3ZibGFuaygpIGhvb2tzIGludG8gbm8tb3BzLAorCSAqIGxlYXZpbmcgaW50ZXJydXB0cyBlbmFibGVkIGF0IGFsbCB0aW1lcy4KKwkgKgorCSAqIFdyYXBhcm91bmQgaGFuZGxpbmcgYW5kIGxvc3Mgb2YgZXZlbnRzIGR1ZSB0byBtb2Rlc2V0dGluZyBpcyBkZWFsdAorCSAqIHdpdGggaW4gdGhlIERSTSBjb3JlIGNvZGUuCisJICoKKwkgKiBSRVRVUk5TCisJICogUmF3IHZibGFuayBjb3VudGVyIHZhbHVlLgorCSAqLworCXUzMiAoKmdldF92YmxhbmtfY291bnRlcikgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKKworCS8qKgorCSAqIGVuYWJsZV92YmxhbmsgLSBlbmFibGUgdmJsYW5rIGludGVycnVwdCBldmVudHMKKwkgKiBAZGV2OiBEUk0gZGV2aWNlCisJICogQGNydGM6IHdoaWNoIGlycSB0byBlbmFibGUKKwkgKgorCSAqIEVuYWJsZSB2YmxhbmsgaW50ZXJydXB0cyBmb3IgQGNydGMuICBJZiB0aGUgZGV2aWNlIGRvZXNuJ3QgaGF2ZQorCSAqIGEgaGFyZHdhcmUgdmJsYW5rIGNvdW50ZXIsIHRoaXMgcm91dGluZSBzaG91bGQgYmUgYSBuby1vcCwgc2luY2UKKwkgKiBpbnRlcnJ1cHRzIHdpbGwgaGF2ZSB0byBzdGF5IG9uIHRvIGtlZXAgdGhlIGNvdW50IGFjY3VyYXRlLgorCSAqCisJICogUkVUVVJOUworCSAqIFplcm8gb24gc3VjY2VzcywgYXBwcm9wcmlhdGUgZXJybm8gaWYgdGhlIGdpdmVuIEBjcnRjJ3MgdmJsYW5rCisJICogaW50ZXJydXB0IGNhbm5vdCBiZSBlbmFibGVkLgorCSAqLworCWludCAoKmVuYWJsZV92YmxhbmspIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CisKKwkvKioKKwkgKiBkaXNhYmxlX3ZibGFuayAtIGRpc2FibGUgdmJsYW5rIGludGVycnVwdCBldmVudHMKKwkgKiBAZGV2OiBEUk0gZGV2aWNlCisJICogQGNydGM6IHdoaWNoIGlycSB0byBlbmFibGUKKwkgKgorCSAqIERpc2FibGUgdmJsYW5rIGludGVycnVwdHMgZm9yIEBjcnRjLiAgSWYgdGhlIGRldmljZSBkb2Vzbid0IGhhdmUKKwkgKiBhIGhhcmR3YXJlIHZibGFuayBjb3VudGVyLCB0aGlzIHJvdXRpbmUgc2hvdWxkIGJlIGEgbm8tb3AsIHNpbmNlCisJICogaW50ZXJydXB0cyB3aWxsIGhhdmUgdG8gc3RheSBvbiB0byBrZWVwIHRoZSBjb3VudCBhY2N1cmF0ZS4KKwkgKi8KKwl2b2lkICgqZGlzYWJsZV92YmxhbmspIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CisKKwkvKioKIAkgKiBDYWxsZWQgYnkgXGMgZHJtX2RldmljZV9pc19hZ3AuICBUeXBpY2FsbHkgdXNlZCB0byBkZXRlcm1pbmUgaWYgYQogCSAqIGNhcmQgaXMgcmVhbGx5IGF0dGFjaGVkIHRvIEFHUCBvciBub3QuCiAJICoKQEAgLTYwMSw3ICs2OTksNyBAQAogCiAJaXJxcmV0dXJuX3QoKmlycV9oYW5kbGVyKSAoRFJNX0lSUV9BUkdTKTsKIAl2b2lkICgqaXJxX3ByZWluc3RhbGwpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLQl2b2lkICgqaXJxX3Bvc3RpbnN0YWxsKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisJaW50ICgqaXJxX3Bvc3RpbnN0YWxsKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAJdm9pZCAoKmlycV91bmluc3RhbGwpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAl2b2lkICgqcmVjbGFpbV9idWZmZXJzKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGRybV9maWxlICogZmlsZV9wcml2KTsKQEAgLTYxNCw2ICs3MTIsMTggQEAKIAl2b2lkICgqc2V0X3ZlcnNpb24pIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgZHJtX3NldF92ZXJzaW9uICpzdik7CiAKKwlpbnQgKCpwcm9jX2luaXQpKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKKwl2b2lkICgqcHJvY19jbGVhbnVwKShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CisKKwkvKioKKwkgKiBEcml2ZXItc3BlY2lmaWMgY29uc3RydWN0b3IgZm9yIGRybV9nZW1fb2JqZWN0cywgdG8gc2V0IHVwCisJICogb2JqLT5kcml2ZXJfcHJpdmF0ZS4KKwkgKgorCSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorCSAqLworCWludCAoKmdlbV9pbml0X29iamVjdCkgKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKKwl2b2lkICgqZ2VtX2ZyZWVfb2JqZWN0KSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworCiAJaW50IG1ham9yOwogCWludCBtaW5vcjsKIAlpbnQgcGF0Y2hsZXZlbDsKQEAgLTcxNCw3ICs4MjQsNiBAQAogCiAJLyoqIFxuYW1lIENvbnRleHQgc3VwcG9ydCAqLwogCS8qQHsgKi8KLQlpbnQgaXJxOwkJCS8qKjwgSW50ZXJydXB0IHVzZWQgYnkgYm9hcmQgKi8KIAlpbnQgaXJxX2VuYWJsZWQ7CQkvKio8IFRydWUgaWYgaXJxIGhhbmRsZXIgaXMgZW5hYmxlZCAqLwogCV9fdm9sYXRpbGVfXyBsb25nIGNvbnRleHRfZmxhZzsJLyoqPCBDb250ZXh0IHN3YXBwaW5nIGZsYWcgKi8KIAlfX3ZvbGF0aWxlX18gbG9uZyBpbnRlcnJ1cHRfZmxhZzsgLyoqPCBJbnRlcnJ1cHRpb24gaGFuZGxlciBmbGFnICovCkBAIC03MzAsMTMgKzgzOSwyOCBAQAogCS8qKiBcbmFtZSBWQkxBTksgSVJRIHN1cHBvcnQgKi8KIAkvKkB7ICovCiAKLQl3YWl0X3F1ZXVlX2hlYWRfdCB2YmxfcXVldWU7CS8qKjwgVkJMQU5LIHdhaXQgcXVldWUgKi8KLQlhdG9taWNfdCB2YmxfcmVjZWl2ZWQ7Ci0JYXRvbWljX3QgdmJsX3JlY2VpdmVkMjsJCS8qKjwgbnVtYmVyIG9mIHNlY29uZGFyeSBWQkxBTksgaW50ZXJydXB0cyAqLworCS8qCisJICogQXQgbG9hZCB0aW1lLCBkaXNhYmxpbmcgdGhlIHZibGFuayBpbnRlcnJ1cHQgd29uJ3QgYmUgYWxsb3dlZCBzaW5jZQorCSAqIG9sZCBjbGllbnRzIG1heSBub3QgY2FsbCB0aGUgbW9kZXNldCBpb2N0bCBhbmQgdGhlcmVmb3JlIG1pc2JlaGF2ZS4KKwkgKiBPbmNlIHRoZSBtb2Rlc2V0IGlvY3RsICpoYXMqIGJlZW4gY2FsbGVkIHRob3VnaCwgd2UgY2FuIHNhZmVseQorCSAqIGRpc2FibGUgdGhlbSB3aGVuIHVudXNlZC4KKwkgKi8KKwlpbnQgdmJsYW5rX2Rpc2FibGVfYWxsb3dlZDsKKworCXdhaXRfcXVldWVfaGVhZF90ICp2YmxfcXVldWU7ICAgLyoqPCBWQkxBTksgd2FpdCBxdWV1ZSAqLworCWF0b21pY190ICpfdmJsYW5rX2NvdW50OyAgICAgICAgLyoqPCBudW1iZXIgb2YgVkJMQU5LIGludGVycnVwdHMgKGRyaXZlciBtdXN0IGFsbG9jIHRoZSByaWdodCBudW1iZXIgb2YgY291bnRlcnMpICovCiAJc3BpbmxvY2tfdCB2YmxfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHZibF9zaWdzOwkJLyoqPCBzaWduYWwgbGlzdCB0byBzZW5kIG9uIFZCTEFOSyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdmJsX3NpZ3MyOwkvKio8IHNpZ25hbHMgdG8gc2VuZCBvbiBzZWNvbmRhcnkgVkJMQU5LICovCi0JdW5zaWduZWQgaW50IHZibF9wZW5kaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgKnZibF9zaWdzOwkvKio8IHNpZ25hbCBsaXN0IHRvIHNlbmQgb24gVkJMQU5LICovCisJYXRvbWljX3QgdmJsX3NpZ25hbF9wZW5kaW5nOyAgICAvKiBudW1iZXIgb2Ygc2lnbmFscyBwZW5kaW5nIG9uIGFsbCBjcnRjcyovCisJYXRvbWljX3QgKnZibGFua19yZWZjb3VudDsgICAgICAvKiBudW1iZXIgb2YgdXNlcnMgb2YgdmJsYW5rIGludGVycnVwdHNwZXIgY3J0YyAqLworCXUzMiAqbGFzdF92Ymxhbms7ICAgICAgICAgICAgICAgLyogcHJvdGVjdGVkIGJ5IGRldi0+dmJsX2xvY2ssIHVzZWQgKi8KKwkJCQkJLyogZm9yIHdyYXBhcm91bmQgaGFuZGxpbmcgKi8KKwlpbnQgKnZibGFua19lbmFibGVkOyAgICAgICAgICAgIC8qIHNvIHdlIGRvbid0IGNhbGwgZW5hYmxlIG1vcmUgdGhhbgorCQkJCQkgICBvbmNlIHBlciBkaXNhYmxlICovCisJaW50ICp2YmxhbmtfaW5tb2Rlc2V0OyAgICAgICAgICAvKiBEaXNwbGF5IGRyaXZlciBpcyBzZXR0aW5nIG1vZGUgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB2YmxhbmtfZGlzYWJsZV90aW1lcjsKKworCXUzMiBtYXhfdmJsYW5rX2NvdW50OyAgICAgICAgICAgLyoqPCBzaXplIG9mIHZibGFuayBjb3VudGVyIHJlZ2lzdGVyICovCiAJc3BpbmxvY2tfdCB0YXNrbGV0X2xvY2s7CS8qKjwgRm9yIGRybV9sb2NrZWRfdGFza2xldCAqLwogCXZvaWQgKCpsb2NrZWRfdGFza2xldF9mdW5jKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIApAQCAtNzU3LDYgKzg4MSw3IEBACiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwogI2VuZGlmCiAJc3RydWN0IGRybV9zZ19tZW0gKnNnOwkvKio8IFNjYXR0ZXIgZ2F0aGVyIG1lbW9yeSAqLworCWludCBudW1fY3J0Y3M7ICAgICAgICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgQ1JUQ3Mgb24gdGhpcyBkZXZpY2UgKi8KIAl2b2lkICpkZXZfcHJpdmF0ZTsJCS8qKjwgZGV2aWNlIHByaXZhdGUgZGF0YSAqLwogCXN0cnVjdCBkcm1fc2lnZGF0YSBzaWdkYXRhOwkgICAvKio8IEZvciBibG9ja19hbGxfc2lnbmFscyAqLwogCXNpZ3NldF90IHNpZ21hc2s7CkBAIC03NzEsOCArODk2LDI5IEBACiAJc3BpbmxvY2tfdCBkcndfbG9jazsKIAlzdHJ1Y3QgaWRyIGRyd19pZHI7CiAJLypAfSAqLworCisJLyoqIFxuYW1lIEdFTSBpbmZvcm1hdGlvbiAqLworCS8qQHsgKi8KKwlzcGlubG9ja190IG9iamVjdF9uYW1lX2xvY2s7CisJc3RydWN0IGlkciBvYmplY3RfbmFtZV9pZHI7CisJYXRvbWljX3Qgb2JqZWN0X2NvdW50OworCWF0b21pY190IG9iamVjdF9tZW1vcnk7CisJYXRvbWljX3QgcGluX2NvdW50OworCWF0b21pY190IHBpbl9tZW1vcnk7CisJYXRvbWljX3QgZ3R0X2NvdW50OworCWF0b21pY190IGd0dF9tZW1vcnk7CisJdWludDMyX3QgZ3R0X3RvdGFsOworCXVpbnQzMl90IGludmFsaWRhdGVfZG9tYWluczsgICAgLyogZG9tYWlucyBwZW5kaW5nIGludmFsaWRhdGlvbiAqLworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnM7ICAgICAgICAgLyogZG9tYWlucyBwZW5kaW5nIGZsdXNoICovCisJLypAfSAqLworCiB9OwogCitzdGF0aWMgaW5saW5lIGludCBkcm1fZGV2X3RvX2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPnBkZXYtPmlycTsKK30KKwogc3RhdGljIF9faW5saW5lX18gaW50IGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJICAgICBpbnQgZmVhdHVyZSkKIHsKQEAgLTg2Nyw2ICsxMDEzLDExIEBACiBleHRlcm4gRFJNX0FHUF9NRU0gKmRybV9hbGxvY19hZ3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBhZ2VzLCB1MzIgdHlwZSk7CiBleHRlcm4gaW50IGRybV9mcmVlX2FncChEUk1fQUdQX01FTSAqIGhhbmRsZSwgaW50IHBhZ2VzKTsKIGV4dGVybiBpbnQgZHJtX2JpbmRfYWdwKERSTV9BR1BfTUVNICogaGFuZGxlLCB1bnNpZ25lZCBpbnQgc3RhcnQpOworZXh0ZXJuIERSTV9BR1BfTUVNICpkcm1fYWdwX2JpbmRfcGFnZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMsCisJCQkJICAgICAgIHVpbnQzMl90IGd0dF9vZmZzZXQsCisJCQkJICAgICAgIHVpbnQzMl90IHR5cGUpOwogZXh0ZXJuIGludCBkcm1fdW5iaW5kX2FncChEUk1fQUdQX01FTSAqIGhhbmRsZSk7CiAKIAkJCQkvKiBNaXNjLiBJT0NUTCBzdXBwb3J0IChkcm1faW9jdGwuaCkgKi8KQEAgLTkyOSw2ICsxMDgwLDkgQEAKIGV4dGVybiBpbnQgZHJtX2F1dGhtYWdpYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIAorLyogQ2FjaGUgbWFuYWdlbWVudCAoZHJtX2NhY2hlLmMpICovCit2b2lkIGRybV9jbGZsdXNoX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlc1tdLCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcyk7CisKIAkJCQkvKiBMb2NraW5nIElPQ1RMIHN1cHBvcnQgKGRybV9sb2NrLmgpICovCiBleHRlcm4gaW50IGRybV9sb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CkBAIC05ODUsMTUgKzExMzksMjUgQEAKIGV4dGVybiBpbnQgZHJtX2NvbnRyb2woc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpcnFyZXR1cm5fdCBkcm1faXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKK2V4dGVybiBpbnQgZHJtX2lycV9pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBkcm1faXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAorZXh0ZXJuIGludCBkcm1fdmJsYW5rX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG51bV9jcnRjcyk7CiBleHRlcm4gaW50IGRybV93YWl0X3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxwKTsKIGV4dGVybiBpbnQgZHJtX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqdmJsX3NlcSk7Ci1leHRlcm4gdm9pZCBkcm1fdmJsX3NlbmRfc2lnbmFscyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9sb2NrZWRfdGFza2xldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgIHZvaWQoKmZ1bmMpKHN0cnVjdCBkcm1fZGV2aWNlICopKTsKK2V4dGVybiB1MzIgZHJtX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCBkcm1faGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gaW50IGRybV92YmxhbmtfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIGRybV92YmxhbmtfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKKy8qIE1vZGVzZXR0aW5nIHN1cHBvcnQgKi8KK2V4dGVybiBpbnQgZHJtX21vZGVzZXRfY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gdm9pZCBkcm1fbG9ja2VkX3Rhc2tsZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCgqZnVuYykoc3RydWN0IGRybV9kZXZpY2UqKSk7CiAKIAkJCQkvKiBBR1AvR0FSVCBzdXBwb3J0IChkcm1fYWdwc3VwcG9ydC5oKSAqLwpAQCAtMTAyNiw2ICsxMTkwLDcgQEAKIGV4dGVybiBpbnQgZHJtX2FncF9mcmVlX21lbW9yeShEUk1fQUdQX01FTSAqIGhhbmRsZSk7CiBleHRlcm4gaW50IGRybV9hZ3BfYmluZF9tZW1vcnkoRFJNX0FHUF9NRU0gKiBoYW5kbGUsIG9mZl90IHN0YXJ0KTsKIGV4dGVybiBpbnQgZHJtX2FncF91bmJpbmRfbWVtb3J5KERSTV9BR1BfTUVNICogaGFuZGxlKTsKK2V4dGVybiB2b2lkIGRybV9hZ3BfY2hpcHNldF9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogCQkJCS8qIFN0dWIgc3VwcG9ydCAoZHJtX3N0dWIuaCkgKi8KIGV4dGVybiBpbnQgZHJtX2dldF9kZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQsCkBAIC0xMDg4LDYgKzEyNTMsNjYgQEAKIGV4dGVybiBpbnQgZHJtX21tX3JlbW92ZV9zcGFjZV9mcm9tX3RhaWwoc3RydWN0IGRybV9tbSAqbW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gaW50IGRybV9tbV9hZGRfc3BhY2VfdG9fdGFpbChzdHJ1Y3QgZHJtX21tICptbSwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAorLyogR3JhcGhpY3MgRXhlY3V0aW9uIE1hbmFnZXIgbGlicmFyeSBmdW5jdGlvbnMgKGRybV9nZW0uYykgKi8KK2ludCBkcm1fZ2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGRybV9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpkcm1fZ2VtX29iamVjdF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgc2l6ZV90IHNpemUpOwordm9pZCBkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCWtyZWZfZ2V0KCZvYmotPnJlZmNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybjsKKworCWtyZWZfcHV0KCZvYmotPnJlZmNvdW50LCBkcm1fZ2VtX29iamVjdF9mcmVlKTsKK30KKworaW50IGRybV9nZW1faGFuZGxlX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgIGludCAqaGFuZGxlcCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJtX2dlbV9vYmplY3RfaGFuZGxlX3JlZmVyZW5jZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKwlrcmVmX2dldCgmb2JqLT5oYW5kbGVjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBNdXN0IGJ1bXAgaGFuZGxlIGNvdW50IGZpcnN0IGFzIHRoaXMgbWF5IGJlIHRoZSBsYXN0CisJICogcmVmLCBpbiB3aGljaCBjYXNlIHRoZSBvYmplY3Qgd291bGQgZGlzYXBwZWFyIGJlZm9yZSB3ZQorCSAqIGNoZWNrZWQgZm9yIGEgbmFtZQorCSAqLworCWtyZWZfcHV0KCZvYmotPmhhbmRsZWNvdW50LCBkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZSk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKK30KKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpkcm1fZ2VtX29iamVjdF9sb29rdXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCisJCQkJCSAgICAgaW50IGhhbmRsZSk7CitpbnQgZHJtX2dlbV9jbG9zZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGRybV9nZW1fZmxpbmtfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBkcm1fZ2VtX29wZW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK3ZvaWQgZHJtX2dlbV9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKK3ZvaWQgZHJtX2dlbV9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKKwogZXh0ZXJuIHZvaWQgZHJtX2NvcmVfaW9yZW1hcChzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9jb3JlX2lvcmVtYXBfd2Moc3RydWN0IGRybV9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fY29yZV9pb3JlbWFwZnJlZShzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaCBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAppbmRleCAxMzViZDE5Li5kYTA0MTA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCkBAIC04NCwxOCArODQsMTggQEAKIAl7MHgxMDAyLCAweDU0NjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NTQ2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg1NjU3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0QywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NTY0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1NjRCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDU2NEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXApAQCAtMTEzLDggKzExMywxMCBAQAogCXsweDEwMDIsIDB4NTk2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MH0sIFwKIAl7MHgxMDAyLCAweDU5NjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB9LCBcCiAJezB4MTAwMiwgMHg1OTY5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfSwgXAotCXsweDEwMDIsIDB4NWE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQ4MHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fSVNfSUdQR0FSVH0sIFwKLQl7MHgxMDAyLCAweDVhNjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0ODB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg1YTQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg1YTQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NWE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NWE2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fSVNfSUdQR0FSVH0sIFwKIAl7MHgxMDAyLCAweDViNjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1YjYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWI2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTEyMiwxNiArMTI0LDE2IEBACiAJezB4MTAwMiwgMHg1YjY1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWM2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg1YzYzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKLQl7MHgxMDAyLCAweDVkNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZDQ5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWQ0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNTcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZDQ5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjN8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NWQ0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDVlNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1ZTRhLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWU0YiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTIzNyw2ICsyMzksMTAgQEAKIAl7MHgxMDAyLCAweDc4MzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMzMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg3OTFlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNjkwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg3OTFmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNjkwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezAsIDAsIDB9CiAKICNkZWZpbmUgcjEyOF9QQ0lfSURTIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCmluZGV4IDA1YzY2Y2YuLmViNGIzNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaApAQCAtMTQzLDYgKzE0MywyMiBAQAogI2RlZmluZSBEUk1fSTkxNV9HRVRfVkJMQU5LX1BJUEUJMHgwZQogI2RlZmluZSBEUk1fSTkxNV9WQkxBTktfU1dBUAkweDBmCiAjZGVmaW5lIERSTV9JOTE1X0hXU19BRERSCTB4MTEKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0lOSVQJMHgxMworI2RlZmluZSBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUgkweDE0CisjZGVmaW5lIERSTV9JOTE1X0dFTV9QSU4JMHgxNQorI2RlZmluZSBEUk1fSTkxNV9HRU1fVU5QSU4JMHgxNgorI2RlZmluZSBEUk1fSTkxNV9HRU1fQlVTWQkweDE3CisjZGVmaW5lIERSTV9JOTE1X0dFTV9USFJPVFRMRQkweDE4CisjZGVmaW5lIERSTV9JOTE1X0dFTV9FTlRFUlZUCTB4MTkKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0xFQVZFVlQJMHgxYQorI2RlZmluZSBEUk1fSTkxNV9HRU1fQ1JFQVRFCTB4MWIKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1BSRUFECTB4MWMKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1BXUklURQkweDFkCisjZGVmaW5lIERSTV9JOTE1X0dFTV9NTUFQCTB4MWUKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1NFVF9ET01BSU4JMHgxZgorI2RlZmluZSBEUk1fSTkxNV9HRU1fU1dfRklOSVNICTB4MjAKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1NFVF9USUxJTkcJMHgyMQorI2RlZmluZSBEUk1fSTkxNV9HRU1fR0VUX1RJTElORwkweDIyCiAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfSU5JVAkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0lOSVQsIGRybV9pOTE1X2luaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfRkxVU0gJCURSTV9JTyAoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9GTFVTSCkKQEAgLTE2MCw2ICsxNzYsMjAgQEAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfU0VUX1ZCTEFOS19QSVBFCURSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9TRVRfVkJMQU5LX1BJUEUsIGRybV9pOTE1X3ZibGFua19waXBlX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFVF9WQkxBTktfUElQRQlEUk1fSU9SKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VUX1ZCTEFOS19QSVBFLCBkcm1faTkxNV92YmxhbmtfcGlwZV90KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9WQkxBTktfU1dBUAlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfVkJMQU5LX1NXQVAsIGRybV9pOTE1X3ZibGFua19zd2FwX3QpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9QSU4JCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fUElOLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbikKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1VOUElOCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9VTlBJTiwgc3RydWN0IGRybV9pOTE1X2dlbV91bnBpbikKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0JVU1kJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fQlVTWSwgc3RydWN0IGRybV9pOTE1X2dlbV9idXN5KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fVEhST1RUTEUJRFJNX0lPICggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9USFJPVFRMRSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0VOVEVSVlQJRFJNX0lPKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fRU5URVJWVCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0xFQVZFVlQJRFJNX0lPKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTEVBVkVWVCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0NSRUFURQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0NSRUFURSwgc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9QUkVBRAlEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1BSRUFELCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fUFdSSVRFCURSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fUFdSSVRFLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX01NQVAJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTU1BUCwgc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fU0VUX0RPTUFJTglEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NFVF9ET01BSU4sIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbikKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1NXX0ZJTklTSAlEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NXX0ZJTklTSCwgc3RydWN0IGRybV9pOTE1X2dlbV9zd19maW5pc2gpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9TRVRfVElMSU5HCURSTV9JT1dSIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NFVF9USUxJTkcsIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X3RpbGluZykKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0dFVF9USUxJTkcJRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fR0VUX1RJTElORywgc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nKQogCiAvKiBBbGxvdyBkcml2ZXJzIHRvIHN1Ym1pdCBiYXRjaGJ1ZmZlcnMgZGlyZWN0bHkgdG8gaGFyZHdhcmUsIHJlbHlpbmcKICAqIG9uIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHByb3ZpZGVkIGJ5IGhhcmR3YXJlLgpAQCAtMjAwLDYgKzIzMCw4IEBACiAjZGVmaW5lIEk5MTVfUEFSQU1fSVJRX0FDVElWRSAgICAgICAgICAgIDEKICNkZWZpbmUgSTkxNV9QQVJBTV9BTExPV19CQVRDSEJVRkZFUiAgICAgMgogI2RlZmluZSBJOTE1X1BBUkFNX0xBU1RfRElTUEFUQ0ggICAgICAgICAzCisjZGVmaW5lIEk5MTVfUEFSQU1fQ0hJUFNFVF9JRCAgICAgICAgICAgIDQKKyNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfR0VNICAgICAgICAgICAgICAgNQogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSB7CiAJaW50IHBhcmFtOwpAQCAtMjY3LDQgKzI5OSwzMDUgQEAKIAl1aW50NjRfdCBhZGRyOwogfSBkcm1faTkxNV9od3NfYWRkcl90OwogCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQgeworCS8qKgorCSAqIEJlZ2lubmluZyBvZmZzZXQgaW4gdGhlIEdUVCB0byBiZSBtYW5hZ2VkIGJ5IHRoZSBEUk0gbWVtb3J5CisJICogbWFuYWdlci4KKwkgKi8KKwl1aW50NjRfdCBndHRfc3RhcnQ7CisJLyoqCisJICogRW5kaW5nIG9mZnNldCBpbiB0aGUgR1RUIHRvIGJlIG1hbmFnZWQgYnkgdGhlIERSTSBtZW1vcnkKKwkgKiBtYW5hZ2VyLgorCSAqLworCXVpbnQ2NF90IGd0dF9lbmQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NyZWF0ZSB7CisJLyoqCisJICogUmVxdWVzdGVkIHNpemUgZm9yIHRoZSBvYmplY3QuCisJICoKKwkgKiBUaGUgKHBhZ2UtYWxpZ25lZCkgYWxsb2NhdGVkIHNpemUgZm9yIHRoZSBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4KKwkgKi8KKwl1aW50NjRfdCBzaXplOworCS8qKgorCSAqIFJldHVybmVkIGhhbmRsZSBmb3IgdGhlIG9iamVjdC4KKwkgKgorCSAqIE9iamVjdCBoYW5kbGVzIGFyZSBub256ZXJvLgorCSAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkIHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIHJlYWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKKwkvKiogT2Zmc2V0IGludG8gdGhlIG9iamVjdCB0byByZWFkIGZyb20gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisJLyoqIExlbmd0aCBvZiBkYXRhIHRvIHJlYWQgKi8KKwl1aW50NjRfdCBzaXplOworCS8qKgorCSAqIFBvaW50ZXIgdG8gd3JpdGUgdGhlIGRhdGEgaW50by4KKwkgKgorCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCisJICovCisJdWludDY0X3QgZGF0YV9wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyB3cml0dGVuIHRvLiAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7CisJLyoqIE9mZnNldCBpbnRvIHRoZSBvYmplY3QgdG8gd3JpdGUgdG8gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisJLyoqIExlbmd0aCBvZiBkYXRhIHRvIHdyaXRlICovCisJdWludDY0X3Qgc2l6ZTsKKwkvKioKKwkgKiBQb2ludGVyIHRvIHJlYWQgdGhlIGRhdGEgZnJvbS4KKwkgKgorCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCisJICovCisJdWludDY0X3QgZGF0YV9wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgeworCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbWFwcGVkLiAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7CisJLyoqIE9mZnNldCBpbiB0aGUgb2JqZWN0IHRvIG1hcC4gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisJLyoqCisJICogTGVuZ3RoIG9mIGRhdGEgdG8gbWFwLgorCSAqCisJICogVGhlIHZhbHVlIHdpbGwgYmUgcGFnZS1hbGlnbmVkLgorCSAqLworCXVpbnQ2NF90IHNpemU7CisJLyoqCisJICogUmV0dXJuZWQgcG9pbnRlciB0aGUgZGF0YSB3YXMgbWFwcGVkIGF0LgorCSAqCisJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KKwkgKi8KKwl1aW50NjRfdCBhZGRyX3B0cjsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbiB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLworCXVpbnQzMl90IGhhbmRsZTsKKworCS8qKiBOZXcgcmVhZCBkb21haW5zICovCisJdWludDMyX3QgcmVhZF9kb21haW5zOworCisJLyoqIE5ldyB3cml0ZSBkb21haW4gKi8KKwl1aW50MzJfdCB3cml0ZV9kb21haW47Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3N3X2ZpbmlzaCB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLworCXVpbnQzMl90IGhhbmRsZTsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSB7CisJLyoqCisJICogSGFuZGxlIG9mIHRoZSBidWZmZXIgYmVpbmcgcG9pbnRlZCB0byBieSB0aGlzIHJlbG9jYXRpb24gZW50cnkuCisJICoKKwkgKiBJdCdzIGFwcGVhbGluZyB0byBtYWtlIHRoaXMgYmUgYW4gaW5kZXggaW50byB0aGUgbW1fdmFsaWRhdGVfZW50cnkKKwkgKiBsaXN0IHRvIHJlZmVyIHRvIHRoZSBidWZmZXIsIGJ1dCB0aGlzIGFsbG93cyB0aGUgZHJpdmVyIHRvIGNyZWF0ZQorCSAqIGEgcmVsb2NhdGlvbiBsaXN0IGZvciBzdGF0ZSBidWZmZXJzIGFuZCBub3QgcmUtd3JpdGUgaXQgcGVyCisJICogZXhlYyB1c2luZyB0aGUgYnVmZmVyLgorCSAqLworCXVpbnQzMl90IHRhcmdldF9oYW5kbGU7CisKKwkvKioKKwkgKiBWYWx1ZSB0byBiZSBhZGRlZCB0byB0aGUgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgYnVmZmVyIHRvIG1ha2UgdXAKKwkgKiB0aGUgcmVsb2NhdGlvbiBlbnRyeS4KKwkgKi8KKwl1aW50MzJfdCBkZWx0YTsKKworCS8qKiBPZmZzZXQgaW4gdGhlIGJ1ZmZlciB0aGUgcmVsb2NhdGlvbiBlbnRyeSB3aWxsIGJlIHdyaXR0ZW4gaW50byAqLworCXVpbnQ2NF90IG9mZnNldDsKKworCS8qKgorCSAqIE9mZnNldCB2YWx1ZSBvZiB0aGUgdGFyZ2V0IGJ1ZmZlciB0aGF0IHRoZSByZWxvY2F0aW9uIGVudHJ5IHdhcyBsYXN0CisJICogd3JpdHRlbiBhcy4KKwkgKgorCSAqIElmIHRoZSBidWZmZXIgaGFzIHRoZSBzYW1lIG9mZnNldCBhcyBsYXN0IHRpbWUsIHdlIGNhbiBza2lwIHN5bmNpbmcKKwkgKiBhbmQgd3JpdGluZyB0aGUgcmVsb2NhdGlvbi4gIFRoaXMgdmFsdWUgaXMgd3JpdHRlbiBiYWNrIG91dCBieQorCSAqIHRoZSBleGVjYnVmZmVyIGlvY3RsIHdoZW4gdGhlIHJlbG9jYXRpb24gaXMgd3JpdHRlbi4KKwkgKi8KKwl1aW50NjRfdCBwcmVzdW1lZF9vZmZzZXQ7CisKKwkvKioKKwkgKiBUYXJnZXQgbWVtb3J5IGRvbWFpbnMgcmVhZCBieSB0aGlzIG9wZXJhdGlvbi4KKwkgKi8KKwl1aW50MzJfdCByZWFkX2RvbWFpbnM7CisKKwkvKioKKwkgKiBUYXJnZXQgbWVtb3J5IGRvbWFpbnMgd3JpdHRlbiBieSB0aGlzIG9wZXJhdGlvbi4KKwkgKgorCSAqIE5vdGUgdGhhdCBvbmx5IG9uZSBkb21haW4gbWF5IGJlIHdyaXR0ZW4gYnkgdGhlIHdob2xlCisJICogZXhlY2J1ZmZlciBvcGVyYXRpb24sIHNvIHRoYXQgd2hlcmUgdGhlcmUgYXJlIGNvbmZsaWN0cywKKwkgKiB0aGUgYXBwbGljYXRpb24gd2lsbCBnZXQgLUVJTlZBTCBiYWNrLgorCSAqLworCXVpbnQzMl90IHdyaXRlX2RvbWFpbjsKK307CisKKy8qKiBAeworICogSW50ZWwgbWVtb3J5IGRvbWFpbnMKKyAqCisgKiBNb3N0IG9mIHRoZXNlIGp1c3QgYWxpZ24gd2l0aCB0aGUgdmFyaW91cyBjYWNoZXMgaW4KKyAqIHRoZSBzeXN0ZW0gYW5kIGFyZSB1c2VkIHRvIGZsdXNoIGFuZCBpbnZhbGlkYXRlIGFzCisgKiBvYmplY3RzIGVuZCB1cCBjYWNoZWQgaW4gZGlmZmVyZW50IGRvbWFpbnMuCisgKi8KKy8qKiBDUFUgY2FjaGUgKi8KKyNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX0NQVQkJMHgwMDAwMDAwMQorLyoqIFJlbmRlciBjYWNoZSwgdXNlZCBieSAyRCBhbmQgM0QgZHJhd2luZyAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fUkVOREVSCQkweDAwMDAwMDAyCisvKiogU2FtcGxlciBjYWNoZSwgdXNlZCBieSB0ZXh0dXJlIGVuZ2luZSAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUgkJMHgwMDAwMDAwNAorLyoqIENvbW1hbmQgcXVldWUsIHVzZWQgdG8gbG9hZCBiYXRjaCBidWZmZXJzICovCisjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9DT01NQU5ECQkweDAwMDAwMDA4CisvKiogSW5zdHJ1Y3Rpb24gY2FjaGUsIHVzZWQgYnkgc2hhZGVyIHByb2dyYW1zICovCisjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTgkweDAwMDAwMDEwCisvKiogVmVydGV4IGFkZHJlc3MgY2FjaGUgKi8KKyNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWAkJMHgwMDAwMDAyMAorLyoqIEdUVCBkb21haW4gLSBhcGVydHVyZSBhbmQgc2Nhbm91dCAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fR1RUCQkweDAwMDAwMDQwCisvKiogQH0gKi8KKworc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCB7CisJLyoqCisJICogVXNlcidzIGhhbmRsZSBmb3IgYSBidWZmZXIgdG8gYmUgYm91bmQgaW50byB0aGUgR1RUIGZvciB0aGlzCisJICogb3BlcmF0aW9uLgorCSAqLworCXVpbnQzMl90IGhhbmRsZTsKKworCS8qKiBOdW1iZXIgb2YgcmVsb2NhdGlvbnMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoaXMgYnVmZmVyICovCisJdWludDMyX3QgcmVsb2NhdGlvbl9jb3VudDsKKwkvKioKKwkgKiBQb2ludGVyIHRvIGFycmF5IG9mIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBjb250YWluaW5nCisJICogdGhlIHJlbG9jYXRpb25zIHRvIGJlIHBlcmZvcm1lZCBpbiB0aGlzIGJ1ZmZlci4KKwkgKi8KKwl1aW50NjRfdCByZWxvY3NfcHRyOworCisJLyoqIFJlcXVpcmVkIGFsaWdubWVudCBpbiBncmFwaGljcyBhcGVydHVyZSAqLworCXVpbnQ2NF90IGFsaWdubWVudDsKKworCS8qKgorCSAqIFJldHVybmVkIHZhbHVlIG9mIHRoZSB1cGRhdGVkIG9mZnNldCBvZiB0aGUgb2JqZWN0LCBmb3IgZnV0dXJlCisJICogcHJlc3VtZWRfb2Zmc2V0IHdyaXRlcy4KKwkgKi8KKwl1aW50NjRfdCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIgeworCS8qKgorCSAqIExpc3Qgb2YgYnVmZmVycyB0byBiZSB2YWxpZGF0ZWQgd2l0aCB0aGVpciByZWxvY2F0aW9ucyB0byBiZQorCSAqIHBlcmZvcm1lbmQgb24gdGhlbS4KKwkgKgorCSAqIFRoaXMgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHN0cnVjdCBkcm1faTkxNV9nZW1fdmFsaWRhdGVfZW50cnkuCisJICoKKwkgKiBUaGVzZSBidWZmZXJzIG11c3QgYmUgbGlzdGVkIGluIGFuIG9yZGVyIHN1Y2ggdGhhdCBhbGwgcmVsb2NhdGlvbnMKKwkgKiBhIGJ1ZmZlciBpcyBwZXJmb3JtaW5nIHJlZmVyIHRvIGJ1ZmZlcnMgdGhhdCBoYXZlIGFscmVhZHkgYXBwZWFyZWQKKwkgKiBpbiB0aGUgdmFsaWRhdGUgbGlzdC4KKwkgKi8KKwl1aW50NjRfdCBidWZmZXJzX3B0cjsKKwl1aW50MzJfdCBidWZmZXJfY291bnQ7CisKKwkvKiogT2Zmc2V0IGluIHRoZSBiYXRjaGJ1ZmZlciB0byBzdGFydCBleGVjdXRpb24gZnJvbS4gKi8KKwl1aW50MzJfdCBiYXRjaF9zdGFydF9vZmZzZXQ7CisJLyoqIEJ5dGVzIHVzZWQgaW4gYmF0Y2hidWZmZXIgZnJvbSBiYXRjaF9zdGFydF9vZmZzZXQgKi8KKwl1aW50MzJfdCBiYXRjaF9sZW47CisJdWludDMyX3QgRFIxOworCXVpbnQzMl90IERSNDsKKwl1aW50MzJfdCBudW1fY2xpcHJlY3RzOworCS8qKiBUaGlzIGlzIGEgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyAqLworCXVpbnQ2NF90IGNsaXByZWN0c19wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiB7CisJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHBpbm5lZC4gKi8KKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgcGFkOworCisJLyoqIGFsaWdubWVudCByZXF1aXJlZCB3aXRoaW4gdGhlIGFwZXJ0dXJlICovCisJdWludDY0X3QgYWxpZ25tZW50OworCisJLyoqIFJldHVybmVkIEdUVCBvZmZzZXQgb2YgdGhlIGJ1ZmZlci4gKi8KKwl1aW50NjRfdCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VucGluIHsKKwkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgdW5waW5uZWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSB7CisJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGNoZWNrIGZvciBidXN5ICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqIFJldHVybiBidXN5IHN0YXR1cyAoMSBpZiBidXN5LCAwIGlmIGlkbGUpICovCisJdWludDMyX3QgYnVzeTsKK307CisKKyNkZWZpbmUgSTkxNV9USUxJTkdfTk9ORQkwCisjZGVmaW5lIEk5MTVfVElMSU5HX1gJCTEKKyNkZWZpbmUgSTkxNV9USUxJTkdfWQkJMgorCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV9OT05FCQkwCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85CQkxCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzEwCQkyCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzExCQkzCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzExCTQKKy8qIE5vdCBzZWVuIGJ5IHVzZXJsYW5kICovCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOCTUKKworc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfdGlsaW5nIHsKKwkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gaGF2ZSBpdHMgdGlsaW5nIHN0YXRlIHVwZGF0ZWQgKi8KKwl1aW50MzJfdCBoYW5kbGU7CisKKwkvKioKKwkgKiBUaWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdCAoSTkxNV9USUxJTkdfTk9ORSwgSTkxNV9USUxJTkdfWCwKKwkgKiBJOTE1X1RJTElOR19ZKS4KKwkgKgorCSAqIFRoaXMgdmFsdWUgaXMgdG8gYmUgc2V0IG9uIHJlcXVlc3QsIGFuZCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlCisJICoga2VybmVsIG9uIHN1Y2Nlc3NmdWwgcmV0dXJuIHdpdGggdGhlIGFjdHVhbCBjaG9zZW4gdGlsaW5nIGxheW91dC4KKwkgKgorCSAqIFRoZSB0aWxpbmcgbW9kZSBtYXkgYmUgZGVtb3RlZCB0byBJOTE1X1RJTElOR19OT05FIHdoZW4gdGhlIHN5c3RlbQorCSAqIGhhcyBiaXQgNiBzd2l6emxpbmcgdGhhdCBjYW4ndCBiZSBtYW5hZ2VkIGNvcnJlY3RseSBieSBHRU0uCisJICoKKwkgKiBCdWZmZXIgY29udGVudHMgYmVjb21lIHVuZGVmaW5lZCB3aGVuIGNoYW5naW5nIHRpbGluZ19tb2RlLgorCSAqLworCXVpbnQzMl90IHRpbGluZ19tb2RlOworCisJLyoqCisJICogU3RyaWRlIGluIGJ5dGVzIGZvciB0aGUgb2JqZWN0IHdoZW4gaW4gSTkxNV9USUxJTkdfWCBvcgorCSAqIEk5MTVfVElMSU5HX1kuCisJICovCisJdWludDMyX3Qgc3RyaWRlOworCisJLyoqCisJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAorCSAqIG1tYXAgbWFwcGluZy4KKwkgKi8KKwl1aW50MzJfdCBzd2l6emxlX21vZGU7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcgeworCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBnZXQgdGlsaW5nIHN0YXRlIGZvci4gKi8KKwl1aW50MzJfdCBoYW5kbGU7CisKKwkvKioKKwkgKiBDdXJyZW50IHRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0IChJOTE1X1RJTElOR19OT05FLCBJOTE1X1RJTElOR19YLAorCSAqIEk5MTVfVElMSU5HX1kpLgorCSAqLworCXVpbnQzMl90IHRpbGluZ19tb2RlOworCisJLyoqCisJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAorCSAqIG1tYXAgbWFwcGluZy4KKwkgKi8KKwl1aW50MzJfdCBzd2l6emxlX21vZGU7Cit9OworCiAjZW5kaWYJCQkJLyogX0k5MTVfRFJNX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDI4MmE1MDQuLmU1MzE3ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0xMDcsNiArMTA3LDcgQEAKIGhlYWRlci15ICs9IGxpbWl0cy5oCiBoZWFkZXIteSArPSBtYWdpYy5oCiBoZWFkZXIteSArPSBtYWpvci5oCitoZWFkZXIteSArPSBtYXBfdG9fN3NlZ21lbnQuaAogaGVhZGVyLXkgKz0gbWF0cm94ZmIuaAogaGVhZGVyLXkgKz0gbWV5ZS5oCiBoZWFkZXIteSArPSBtaW5peF9mcy5oCkBAIC0xODIsNiArMTgzLDcgQEAKIHVuaWZkZWYteSArPSBhdXh2ZWMuaAogdW5pZmRlZi15ICs9IGJpbmZtdHMuaAogdW5pZmRlZi15ICs9IGJsa3RyYWNlX2FwaS5oCit1bmlmZGVmLXkgKz0gYnl0ZW9yZGVyLmgKIHVuaWZkZWYteSArPSBjYXBhYmlsaXR5LmgKIHVuaWZkZWYteSArPSBjYXBpLmgKIHVuaWZkZWYteSArPSBjY2lzc19pb2N0bC5oCkBAIC0zMzksNiArMzQxLDcgQEAKIHVuaWZkZWYteSArPSBzdGF0LmgKIHVuaWZkZWYteSArPSBzdGRkZWYuaAogdW5pZmRlZi15ICs9IHN0cmluZy5oCit1bmlmZGVmLXkgKz0gc3dhYi5oCiB1bmlmZGVmLXkgKz0gc3luY2xpbmsuaAogdW5pZmRlZi15ICs9IHN5c2N0bC5oCiB1bmlmZGVmLXkgKz0gdGNwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWlvLmggYi9pbmNsdWRlL2xpbnV4L2Fpby5oCmluZGV4IDA5YjI3NmMuLmY2YjhjZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9haW8uaApAQCAtMjA0LDEyICsyMDQsMjEgQEAKIC8qIHByb3RvdHlwZXMgKi8KIGV4dGVybiB1bnNpZ25lZCBhaW9fbWF4X3NpemU7CiAKKyNpZmRlZiBDT05GSUdfQUlPCiBleHRlcm4gc3NpemVfdCB3YWl0X29uX3N5bmNfa2lvY2Ioc3RydWN0IGtpb2NiICppb2NiKTsKIGV4dGVybiBpbnQgYWlvX3B1dF9yZXEoc3RydWN0IGtpb2NiICppb2NiKTsKIGV4dGVybiB2b2lkIGtpY2tfaW9jYihzdHJ1Y3Qga2lvY2IgKmlvY2IpOwogZXh0ZXJuIGludCBhaW9fY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJlcywgbG9uZyByZXMyKTsKIHN0cnVjdCBtbV9zdHJ1Y3Q7CiBleHRlcm4gdm9pZCBleGl0X2FpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisjZWxzZQorc3RhdGljIGlubGluZSBzc2l6ZV90IHdhaXRfb25fc3luY19raW9jYihzdHJ1Y3Qga2lvY2IgKmlvY2IpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGFpb19wdXRfcmVxKHN0cnVjdCBraW9jYiAqaW9jYikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGtpY2tfaW9jYihzdHJ1Y3Qga2lvY2IgKmlvY2IpIHsgfQorc3RhdGljIGlubGluZSBpbnQgYWlvX2NvbXBsZXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgbG9uZyByZXMsIGxvbmcgcmVzMikgeyByZXR1cm4gMDsgfQorc3RydWN0IG1tX3N0cnVjdDsKK3N0YXRpYyBpbmxpbmUgdm9pZCBleGl0X2FpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyB9CisjZW5kaWYgLyogQ09ORklHX0FJTyAqLwogCiAjZGVmaW5lIGlvX3dhaXRfdG9fa2lvY2Iod2FpdCkgY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBraW9jYiwga2lfd2FpdCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdXRvX2Rldi1pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9hdXRvX2Rldi1pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZDA1Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2F1dG9fZGV2LWlvY3RsLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBJYW4gS2VudCA8cmF2ZW5AdGhlbWF3Lm5ldD4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsIGFuZCBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBvciBhdCB5b3VyCisgKiBvcHRpb24sIGFueSBsYXRlciB2ZXJzaW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9BVVRPX0RFVl9JT0NUTF9ICisjZGVmaW5lIF9MSU5VWF9BVVRPX0RFVl9JT0NUTF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEFVVE9GU19ERVZJQ0VfTkFNRQkJImF1dG9mcyIKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fTUFKT1IJMQorI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fTUlOT1IJMAorCisjZGVmaW5lIEFVVE9GU19ERVZJRF9MRU4JCTE2CisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9TSVpFCQlzaXplb2Yoc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKKy8qCisgKiBBbiBpb2N0bCBpbnRlcmZhY2UgZm9yIGF1dG9mcyBtb3VudCBwb2ludCBjb250cm9sLgorICovCisKKy8qCisgKiBBbGwgdGhlIGlvY3RscyB1c2UgdGhpcyBzdHJ1Y3R1cmUuCisgKiBXaGVuIHNlbmRpbmcgYSBwYXRoIHNpemUgbXVzdCBhY2NvdW50IGZvciB0aGUgdG90YWwgbGVuZ3RoCisgKiBvZiB0aGUgY2h1bmsgb2YgbWVtb3J5IG90aGVyd2lzZSBpcyBpcyB0aGUgc2l6ZSBvZiB0aGUKKyAqIHN0cnVjdHVyZS4KKyAqLworCitzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCB7CisJX191MzIgdmVyX21ham9yOworCV9fdTMyIHZlcl9taW5vcjsKKwlfX3UzMiBzaXplOwkJLyogdG90YWwgc2l6ZSBvZiBkYXRhIHBhc3NlZCBpbgorCQkJCSAqIGluY2x1ZGluZyB0aGlzIHN0cnVjdCAqLworCV9fczMyIGlvY3RsZmQ7CQkvKiBhdXRvbW91bnQgY29tbWFuZCBmZCAqLworCisJX191MzIgYXJnMTsJCS8qIENvbW1hbmQgcGFyYW1ldGVycyAqLworCV9fdTMyIGFyZzI7CisKKwljaGFyIHBhdGhbMF07Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9hdXRvZnNfZGV2X2lvY3RsKHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICppbikKK3sKKwlpbi0+dmVyX21ham9yID0gQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX01BSk9SOworCWluLT52ZXJfbWlub3IgPSBBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fTUlOT1I7CisJaW4tPnNpemUgPSBzaXplb2Yoc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpOworCWluLT5pb2N0bGZkID0gLTE7CisJaW4tPmFyZzEgPSAwOworCWluLT5hcmcyID0gMDsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBJZiB5b3UgY2hhbmdlIHRoaXMgbWFrZSBzdXJlIHlvdSBtYWtlIHRoZSBjb3JyZXNwb25kaW5nIGNoYW5nZQorICogdG8gYXV0b2ZzLWRldi1pb2N0bC5jOmxvb2t1cF9pb2N0bCgpCisgKi8KK2VudW0geworCS8qIEdldCB2YXJpb3VzIHZlcnNpb24gaW5mbyAqLworCUFVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9DTUQgPSAweDcxLAorCUFVVE9GU19ERVZfSU9DVExfUFJPVE9WRVJfQ01ELAorCUFVVE9GU19ERVZfSU9DVExfUFJPVE9TVUJWRVJfQ01ELAorCisJLyogT3BlbiBtb3VudCBpb2N0bCBmZCAqLworCUFVVE9GU19ERVZfSU9DVExfT1BFTk1PVU5UX0NNRCwKKworCS8qIENsb3NlIG1vdW50IGlvY3RsIGZkICovCisJQVVUT0ZTX0RFVl9JT0NUTF9DTE9TRU1PVU5UX0NNRCwKKworCS8qIE1vdW50L2V4cGlyZSBzdGF0dXMgcmV0dXJucyAqLworCUFVVE9GU19ERVZfSU9DVExfUkVBRFlfQ01ELAorCUFVVE9GU19ERVZfSU9DVExfRkFJTF9DTUQsCisKKwkvKiBBY3RpdmF0ZS9kZWFjdGl2YXRlIGF1dG9mcyBtb3VudCAqLworCUFVVE9GU19ERVZfSU9DVExfU0VUUElQRUZEX0NNRCwKKwlBVVRPRlNfREVWX0lPQ1RMX0NBVEFUT05JQ19DTUQsCisKKwkvKiBFeHBpcnkgdGltZW91dCAqLworCUFVVE9GU19ERVZfSU9DVExfVElNRU9VVF9DTUQsCisKKwkvKiBHZXQgbW91bnQgbGFzdCByZXF1ZXN0aW5nIHVpZCBhbmQgZ2lkICovCisJQVVUT0ZTX0RFVl9JT0NUTF9SRVFVRVNURVJfQ01ELAorCisJLyogQ2hlY2sgZm9yIGVsaWdpYmxlIGV4cGlyZSBjYW5kaWRhdGVzICovCisJQVVUT0ZTX0RFVl9JT0NUTF9FWFBJUkVfQ01ELAorCisJLyogUmVxdWVzdCBidXN5IHN0YXR1cyAqLworCUFVVE9GU19ERVZfSU9DVExfQVNLVU1PVU5UX0NNRCwKKworCS8qIENoZWNrIGlmIHBhdGggaXMgYSBtb3VudHBvaW50ICovCisJQVVUT0ZTX0RFVl9JT0NUTF9JU01PVU5UUE9JTlRfQ01ELAorfTsKKworI2RlZmluZSBBVVRPRlNfSU9DVEwgMHg5MworCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTiBcCisJX0lPV1IoQVVUT0ZTX0lPQ1RMLCBcCisJICAgICAgQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX0NNRCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9QUk9UT1ZFUiBcCisJX0lPV1IoQVVUT0ZTX0lPQ1RMLCBcCisJICAgICAgQVVUT0ZTX0RFVl9JT0NUTF9QUk9UT1ZFUl9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfUFJPVE9TVUJWRVIgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfUFJPVE9TVUJWRVJfQ01ELCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX09QRU5NT1VOVCBcCisJX0lPV1IoQVVUT0ZTX0lPQ1RMLCBcCisJICAgICAgQVVUT0ZTX0RFVl9JT0NUTF9PUEVOTU9VTlRfQ01ELCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX0NMT1NFTU9VTlQgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfQ0xPU0VNT1VOVF9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfUkVBRFkgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfUkVBRFlfQ01ELCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX0ZBSUwgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfRkFJTF9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfU0VUUElQRUZEIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX1NFVFBJUEVGRF9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfQ0FUQVRPTklDIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX0NBVEFUT05JQ19DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfVElNRU9VVCBcCisJX0lPV1IoQVVUT0ZTX0lPQ1RMLCBcCisJICAgICAgQVVUT0ZTX0RFVl9JT0NUTF9USU1FT1VUX0NNRCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9SRVFVRVNURVIgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfUkVRVUVTVEVSX0NNRCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9FWFBJUkUgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfRVhQSVJFX0NNRCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9BU0tVTU9VTlQgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfQVNLVU1PVU5UX0NNRCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9JU01PVU5UUE9JTlQgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfSVNNT1VOVFBPSU5UX0NNRCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKKyNlbmRpZgkvKiBfTElOVVhfQVVUT19ERVZfSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdXRvX2ZzNC5oIGIvaW5jbHVkZS9saW51eC9hdXRvX2ZzNC5oCmluZGV4IGI3ODVjNmYuLjIyNTM3MTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXV0b19mczQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F1dG9fZnM0LmgKQEAgLTIzLDEyICsyMywxNyBAQAogI2RlZmluZSBBVVRPRlNfTUlOX1BST1RPX1ZFUlNJT04JMwogI2RlZmluZSBBVVRPRlNfTUFYX1BST1RPX1ZFUlNJT04JNQogCi0jZGVmaW5lIEFVVE9GU19QUk9UT19TVUJWRVJTSU9OCQkwCisjZGVmaW5lIEFVVE9GU19QUk9UT19TVUJWRVJTSU9OCQkxCiAKIC8qIE1hc2sgZm9yIGV4cGlyZSBiZWhhdmlvdXIgKi8KICNkZWZpbmUgQVVUT0ZTX0VYUF9JTU1FRElBVEUJCTEKICNkZWZpbmUgQVVUT0ZTX0VYUF9MRUFWRVMJCTIKIAorI2RlZmluZSBBVVRPRlNfVFlQRV9BTlkJCQkweDAwMDAKKyNkZWZpbmUgQVVUT0ZTX1RZUEVfSU5ESVJFQ1QJCTB4MDAwMQorI2RlZmluZSBBVVRPRlNfVFlQRV9ESVJFQ1QJCTB4MDAwMgorI2RlZmluZSBBVVRPRlNfVFlQRV9PRkZTRVQJCTB4MDAwNAorCiAvKiBEYWVtb24gbm90aWZpY2F0aW9uIHBhY2tldCB0eXBlcyAqLwogZW51bSBhdXRvZnNfbm90aWZ5IHsKIAlORllfTk9ORSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaCBiL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaAppbmRleCAwYTI0ZDU1Li5iZWU1MmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oCkBAIC0xNzUsNiArMTc1LDggQEAKICAqIEJESV9DQVBfUkVBRF9NQVA6ICAgICAgIENhbiBiZSBtYXBwZWQgZm9yIHJlYWRpbmcKICAqIEJESV9DQVBfV1JJVEVfTUFQOiAgICAgIENhbiBiZSBtYXBwZWQgZm9yIHdyaXRpbmcKICAqIEJESV9DQVBfRVhFQ19NQVA6ICAgICAgIENhbiBiZSBtYXBwZWQgZm9yIGV4ZWN1dGlvbgorICoKKyAqIEJESV9DQVBfU1dBUF9CQUNLRUQ6ICAgIENvdW50IHNobWVtL3RtcGZzIG9iamVjdHMgYXMgc3dhcC1iYWNrZWQuCiAgKi8KICNkZWZpbmUgQkRJX0NBUF9OT19BQ0NUX0RJUlRZCTB4MDAwMDAwMDEKICNkZWZpbmUgQkRJX0NBUF9OT19XUklURUJBQ0sJMHgwMDAwMDAwMgpAQCAtMTg0LDYgKzE4Niw3IEBACiAjZGVmaW5lIEJESV9DQVBfV1JJVEVfTUFQCTB4MDAwMDAwMjAKICNkZWZpbmUgQkRJX0NBUF9FWEVDX01BUAkweDAwMDAwMDQwCiAjZGVmaW5lIEJESV9DQVBfTk9fQUNDVF9XQgkweDAwMDAwMDgwCisjZGVmaW5lIEJESV9DQVBfU1dBUF9CQUNLRUQJMHgwMDAwMDEwMAogCiAjZGVmaW5lIEJESV9DQVBfVk1GTEFHUyBcCiAJKEJESV9DQVBfUkVBRF9NQVAgfCBCRElfQ0FQX1dSSVRFX01BUCB8IEJESV9DQVBfRVhFQ19NQVApCkBAIC0yNDgsNiArMjUxLDExIEBACiAJCQkJICAgICAgQkRJX0NBUF9OT19XUklURUJBQ0spKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGJkaV9jYXBfc3dhcF9iYWNrZWQoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKK3sKKwlyZXR1cm4gYmRpLT5jYXBhYmlsaXRpZXMgJiBCRElfQ0FQX1NXQVBfQkFDS0VEOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19jYXBfd3JpdGViYWNrX2RpcnR5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewogCXJldHVybiBiZGlfY2FwX3dyaXRlYmFja19kaXJ0eShtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvKTsKQEAgLTI1OCw0ICsyNjYsOSBAQAogCXJldHVybiBiZGlfY2FwX2FjY291bnRfZGlydHkobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2NhcF9zd2FwX2JhY2tlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwlyZXR1cm4gYmRpX2NhcF9zd2FwX2JhY2tlZChtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvKTsKK30KKwogI2VuZGlmCQkvKiBfTElOVVhfQkFDS0lOR19ERVZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iY2QuaCBiL2luY2x1ZGUvbGludXgvYmNkLmgKaW5kZXggN2FjNTE4ZS4uMjJlYTU2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iY2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JjZC5oCkBAIC0xLDEyICsxLDMgQEAKLS8qIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhpcyBjb2RlCi0gKiBpbiB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyIG9yIGxhdGVyLAotICogYXQgeW91ciBvcHRpb24uCi0gKi8KLQotLyogbWFjcm9zIHRvIHRyYW5zbGF0ZSB0by9mcm9tIGJpbmFyeSBhbmQgYmluYXJ5LWNvZGVkIGRlY2ltYWwgKGZyZXF1ZW50bHkKLSAqIGZvdW5kIGluIFJUQyBjaGlwcykuCi0gKi8KLQogI2lmbmRlZiBfQkNEX0gKICNkZWZpbmUgX0JDRF9ICiAKQEAgLTE1LDExICs2LDQgQEAKIHVuc2lnbmVkIGJjZDJiaW4odW5zaWduZWQgY2hhciB2YWwpIF9fYXR0cmlidXRlX2NvbnN0X187CiB1bnNpZ25lZCBjaGFyIGJpbjJiY2QodW5zaWduZWQgdmFsKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwogCi0jZGVmaW5lIEJDRDJCSU4odmFsKQliY2QyYmluKHZhbCkKLSNkZWZpbmUgQklOMkJDRCh2YWwpCWJpbjJiY2QodmFsKQotCi0vKiBiYWNrd2FyZHMgY29tcGF0ICovCi0jZGVmaW5lIEJDRF9UT19CSU4odmFsKSAoKHZhbCk9QkNEMkJJTih2YWwpKQotI2RlZmluZSBCSU5fVE9fQkNEKHZhbCkgKCh2YWwpPUJJTjJCQ0QodmFsKSkKLQogI2VuZGlmIC8qIF9CQ0RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAppbmRleCA4MjZmNjIzLi43Mzk0YjViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaApAQCAtMzYsNiArMzYsMTAgQEAKIAl1bnNpZ25lZCBsb25nIHA7IC8qIGN1cnJlbnQgdG9wIG9mIG1lbSAqLwogCXVuc2lnbmVkIGludCBzaF9iYW5nOjEsCiAJCSAgICAgbWlzY19iYW5nOjE7CisjaWZkZWYgX19hbHBoYV9fCisJdW5zaWduZWQgaW50IHRhc286MTsKKyNlbmRpZgorCXVuc2lnbmVkIGludCByZWN1cnNpb25fZGVwdGg7CiAJc3RydWN0IGZpbGUgKiBmaWxlOwogCWludCBlX3VpZCwgZV9naWQ7CiAJa2VybmVsX2NhcF90IGNhcF9wb3N0X2V4ZWNfcGVybWl0dGVkOwpAQCAtNTgsNiArNjIsNyBAQAogI2RlZmluZSBCSU5QUk1fRkxBR1NfRVhFQ0ZEX0JJVCAxCiAjZGVmaW5lIEJJTlBSTV9GTEFHU19FWEVDRkQgKDEgPDwgQklOUFJNX0ZMQUdTX0VYRUNGRF9CSVQpCiAKKyNkZWZpbmUgQklOUFJNX01BWF9SRUNVUlNJT04gNAogCiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgdG8gbG9hZCB0aGUgYmluYXJ5IGZvcm1hdHMgdGhhdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmgKaW5kZXggZmY1YjRjZi4uMWM5MWExNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC03OSw2ICs3OSwxMyBAQAogCiAJdW5zaWduZWQgaW50CQliaV9zaXplOwkvKiByZXNpZHVhbCBJL08gY291bnQgKi8KIAorCS8qCisJICogVG8ga2VlcCB0cmFjayBvZiB0aGUgbWF4IHNlZ21lbnQgc2l6ZSwgd2UgYWNjb3VudCBmb3IgdGhlCisJICogc2l6ZXMgb2YgdGhlIGZpcnN0IGFuZCBsYXN0IG1lcmdlYWJsZSBzZWdtZW50cyBpbiB0aGlzIGJpby4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCWJpX3NlZ19mcm9udF9zaXplOworCXVuc2lnbmVkIGludAkJYmlfc2VnX2JhY2tfc2l6ZTsKKwogCXVuc2lnbmVkIGludAkJYmlfbWF4X3ZlY3M7CS8qIG1heCBidmxfdmVjcyB3ZSBjYW4gaG9sZCAqLwogCiAJdW5zaWduZWQgaW50CQliaV9jb21wX2NwdTsJLyogY29tcGxldGlvbiBDUFUgKi8KQEAgLTEyOSwyNSArMTM2LDMwIEBACiAgKiBiaXQgMiAtLSBiYXJyaWVyCiAgKglJbnNlcnQgYSBzZXJpYWxpemF0aW9uIHBvaW50IGluIHRoZSBJTyBxdWV1ZSwgZm9yY2luZyBwcmV2aW91c2x5CiAgKglzdWJtaXR0ZWQgSU8gdG8gYmUgY29tcGxldGVkIGJlZm9yZSB0aGlzIG9lbiBpcyBpc3N1ZWQuCi0gKiBiaXQgMyAtLSBmYWlsIGZhc3QsIGRvbid0IHdhbnQgbG93IGxldmVsIGRyaXZlciByZXRyaWVzCi0gKiBiaXQgNCAtLSBzeW5jaHJvbm91cyBJL08gaGludDogdGhlIGJsb2NrIGxheWVyIHdpbGwgdW5wbHVnIGltbWVkaWF0ZWx5CisgKiBiaXQgMyAtLSBzeW5jaHJvbm91cyBJL08gaGludDogdGhlIGJsb2NrIGxheWVyIHdpbGwgdW5wbHVnIGltbWVkaWF0ZWx5CiAgKglOb3RlIHRoYXQgdGhpcyBkb2VzIE5PVCBpbmRpY2F0ZSB0aGF0IHRoZSBJTyBpdHNlbGYgaXMgc3luYywganVzdAogICoJdGhhdCB0aGUgYmxvY2sgbGF5ZXIgd2lsbCBub3QgcG9zdHBvbmUgaXNzdWUgb2YgdGhpcyBJTyBieSBwbHVnZ2luZy4KLSAqIGJpdCA1IC0tIG1ldGFkYXRhIHJlcXVlc3QKKyAqIGJpdCA0IC0tIG1ldGFkYXRhIHJlcXVlc3QKICAqCVVzZWQgZm9yIHRyYWNpbmcgdG8gZGlmZmVyZW50aWF0ZSBtZXRhZGF0YSBhbmQgZGF0YSBJTy4gTWF5IGFsc28KICAqCWdldCBzb21lIHByZWZlcmVudGlhbCB0cmVhdG1lbnQgaW4gdGhlIElPIHNjaGVkdWxlcgotICogYml0IDYgLS0gZGlzY2FyZCBzZWN0b3JzCisgKiBiaXQgNSAtLSBkaXNjYXJkIHNlY3RvcnMKICAqCUluZm9ybXMgdGhlIGxvd2VyIGxldmVsIGRldmljZSB0aGF0IHRoaXMgcmFuZ2Ugb2Ygc2VjdG9ycyBpcyBubyBsb25nZXIKICAqCXVzZWQgYnkgdGhlIGZpbGUgc3lzdGVtIGFuZCBtYXkgdGh1cyBiZSBmcmVlZCBieSB0aGUgZGV2aWNlLiBVc2VkCiAgKglmb3IgZmxhc2ggYmFzZWQgc3RvcmFnZS4KKyAqIGJpdCA2IC0tIGZhaWwgZmFzdCBkZXZpY2UgZXJyb3JzCisgKiBiaXQgNyAtLSBmYWlsIGZhc3QgdHJhbnNwb3J0IGVycm9ycworICogYml0IDggLS0gZmFpbCBmYXN0IGRyaXZlciBlcnJvcnMKKyAqCURvbid0IHdhbnQgZHJpdmVyIHJldHJpZXMgZm9yIGFueSBmYXN0IGZhaWwgd2hhdGV2ZXIgdGhlIHJlYXNvbi4KICAqLwogI2RlZmluZSBCSU9fUlcJCTAJLyogTXVzdCBtYXRjaCBSVyBpbiByZXEgZmxhZ3MgKGJsa2Rldi5oKSAqLwogI2RlZmluZSBCSU9fUldfQUhFQUQJMQkvKiBNdXN0IG1hdGNoIEZBSUxGQVNUIGluIHJlcSBmbGFncyAqLwogI2RlZmluZSBCSU9fUldfQkFSUklFUgkyCi0jZGVmaW5lIEJJT19SV19GQUlMRkFTVAkzCi0jZGVmaW5lIEJJT19SV19TWU5DCTQKLSNkZWZpbmUgQklPX1JXX01FVEEJNQotI2RlZmluZSBCSU9fUldfRElTQ0FSRAk2CisjZGVmaW5lIEJJT19SV19TWU5DCTMKKyNkZWZpbmUgQklPX1JXX01FVEEJNAorI2RlZmluZSBCSU9fUldfRElTQ0FSRAk1CisjZGVmaW5lIEJJT19SV19GQUlMRkFTVF9ERVYJCTYKKyNkZWZpbmUgQklPX1JXX0ZBSUxGQVNUX1RSQU5TUE9SVAk3CisjZGVmaW5lIEJJT19SV19GQUlMRkFTVF9EUklWRVIJCTgKIAogLyoKICAqIHVwcGVyIDE2IGJpdHMgb2YgYmlfcncgZGVmaW5lIHRoZSBpbyBwcmlvcml0eSBvZiB0aGlzIGJpbwpAQCAtMTc0LDcgKzE4NiwxMCBAQAogI2RlZmluZSBiaW9fc2VjdG9ycyhiaW8pCSgoYmlvKS0+Ymlfc2l6ZSA+PiA5KQogI2RlZmluZSBiaW9fYmFycmllcihiaW8pCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfQkFSUklFUikpCiAjZGVmaW5lIGJpb19zeW5jKGJpbykJCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfU1lOQykpCi0jZGVmaW5lIGJpb19mYWlsZmFzdChiaW8pCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfRkFJTEZBU1QpKQorI2RlZmluZSBiaW9fZmFpbGZhc3RfZGV2KGJpbykJKChiaW8pLT5iaV9ydyAmCSgxIDw8IEJJT19SV19GQUlMRkFTVF9ERVYpKQorI2RlZmluZSBiaW9fZmFpbGZhc3RfdHJhbnNwb3J0KGJpbykJXAorCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JUKSkKKyNkZWZpbmUgYmlvX2ZhaWxmYXN0X2RyaXZlcihiaW8pICgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfRkFJTEZBU1RfRFJJVkVSKSkKICNkZWZpbmUgYmlvX3J3X2FoZWFkKGJpbykJKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19BSEVBRCkpCiAjZGVmaW5lIGJpb19yd19tZXRhKGJpbykJKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19NRVRBKSkKICNkZWZpbmUgYmlvX2Rpc2NhcmQoYmlvKQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0RJU0NBUkQpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRtYXAuaCBiL2luY2x1ZGUvbGludXgvYml0bWFwLmgKaW5kZXggODk3ODFmZC4uMWFiZmU2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaXRtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCkBAIC0xMTAsNyArMTEwLDYgQEAKIAogZXh0ZXJuIGludCBiaXRtYXBfc2NucHJpbnRmKGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbiwKIAkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgaW50IG5iaXRzKTsKLWV4dGVybiBpbnQgYml0bWFwX3NjbnByaW50Zl9sZW4odW5zaWduZWQgaW50IG5yX2JpdHMpOwogZXh0ZXJuIGludCBfX2JpdG1hcF9wYXJzZShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZsZW4sIGludCBpc191c2VyLAogCQkJdW5zaWduZWQgbG9uZyAqZHN0LCBpbnQgbmJpdHMpOwogZXh0ZXJuIGludCBiaXRtYXBfcGFyc2VfdXNlcihjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwgdW5zaWduZWQgaW50IHVsZW4sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCBhOTJkOWU0Li5iNGZlNjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTg3LDcgKzg3LDkgQEAKICAqLwogZW51bSBycV9mbGFnX2JpdHMgewogCV9fUkVRX1JXLAkJLyogbm90IHNldCwgcmVhZC4gc2V0LCB3cml0ZSAqLwotCV9fUkVRX0ZBSUxGQVNULAkJLyogbm8gbG93IGxldmVsIGRyaXZlciByZXRyaWVzICovCisJX19SRVFfRkFJTEZBU1RfREVWLAkvKiBubyBkcml2ZXIgcmV0cmllcyBvZiBkZXZpY2UgZXJyb3JzICovCisJX19SRVFfRkFJTEZBU1RfVFJBTlNQT1JULCAvKiBubyBkcml2ZXIgcmV0cmllcyBvZiB0cmFuc3BvcnQgZXJyb3JzICovCisJX19SRVFfRkFJTEZBU1RfRFJJVkVSLAkvKiBubyBkcml2ZXIgcmV0cmllcyBvZiBkcml2ZXIgZXJyb3JzICovCiAJX19SRVFfRElTQ0FSRCwJCS8qIHJlcXVlc3QgdG8gZGlzY2FyZCBzZWN0b3JzICovCiAJX19SRVFfU09SVEVELAkJLyogZWxldmF0b3Iga25vd3MgYWJvdXQgdGhpcyByZXF1ZXN0ICovCiAJX19SRVFfU09GVEJBUlJJRVIsCS8qIG1heSBub3QgYmUgcGFzc2VkIGJ5IGlvc2NoZWR1bGVyICovCkBAIC0xMTEsOCArMTEzLDEwIEBACiB9OwogCiAjZGVmaW5lIFJFUV9SVwkJKDEgPDwgX19SRVFfUlcpCisjZGVmaW5lIFJFUV9GQUlMRkFTVF9ERVYJKDEgPDwgX19SRVFfRkFJTEZBU1RfREVWKQorI2RlZmluZSBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUCSgxIDw8IF9fUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCkKKyNkZWZpbmUgUkVRX0ZBSUxGQVNUX0RSSVZFUgkoMSA8PCBfX1JFUV9GQUlMRkFTVF9EUklWRVIpCiAjZGVmaW5lIFJFUV9ESVNDQVJECSgxIDw8IF9fUkVRX0RJU0NBUkQpCi0jZGVmaW5lIFJFUV9GQUlMRkFTVAkoMSA8PCBfX1JFUV9GQUlMRkFTVCkKICNkZWZpbmUgUkVRX1NPUlRFRAkoMSA8PCBfX1JFUV9TT1JURUQpCiAjZGVmaW5lIFJFUV9TT0ZUQkFSUklFUgkoMSA8PCBfX1JFUV9TT0ZUQkFSUklFUikKICNkZWZpbmUgUkVRX0hBUkRCQVJSSUVSCSgxIDw8IF9fUkVRX0hBUkRCQVJSSUVSKQpAQCAtNTYwLDcgKzU2NCwxMiBAQAogI2RlZmluZSBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKQkoKHJxKS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfU1BFQ0lBTCkKICNkZWZpbmUgYmxrX3NlbnNlX3JlcXVlc3QocnEpCSgocnEpLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9TRU5TRSkKIAotI2RlZmluZSBibGtfbm9yZXRyeV9yZXF1ZXN0KHJxKQkoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUKQorI2RlZmluZSBibGtfZmFpbGZhc3RfZGV2KHJxKQkoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUX0RFVikKKyNkZWZpbmUgYmxrX2ZhaWxmYXN0X3RyYW5zcG9ydChycSkgKChycSktPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQpCisjZGVmaW5lIGJsa19mYWlsZmFzdF9kcml2ZXIocnEpCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1RfRFJJVkVSKQorI2RlZmluZSBibGtfbm9yZXRyeV9yZXF1ZXN0KHJxKQkoYmxrX2ZhaWxmYXN0X2RldihycSkgfHwJXAorCQkJCSBibGtfZmFpbGZhc3RfdHJhbnNwb3J0KHJxKSB8fAlcCisJCQkJIGJsa19mYWlsZmFzdF9kcml2ZXIocnEpKQogI2RlZmluZSBibGtfcnFfc3RhcnRlZChycSkJKChycSktPmNtZF9mbGFncyAmIFJFUV9TVEFSVEVEKQogCiAjZGVmaW5lIGJsa19hY2NvdW50X3JxKHJxKQkoYmxrX3JxX3N0YXJ0ZWQocnEpICYmIChibGtfZnNfcmVxdWVzdChycSkgfHwgYmxrX2Rpc2NhcmRfcnEocnEpKSkgCkBAIC04NTYsNyArODY1LDYgQEAKIGV4dGVybiBpbnQgYmxrX3JxX21hcF9zZyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKik7CiBleHRlcm4gdm9pZCBibGtfZHVtcF9ycV9mbGFncyhzdHJ1Y3QgcmVxdWVzdCAqLCBjaGFyICopOwogZXh0ZXJuIHZvaWQgZ2VuZXJpY191bnBsdWdfZGV2aWNlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwotZXh0ZXJuIHZvaWQgX19nZW5lcmljX3VucGx1Z19kZXZpY2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKik7CiBleHRlcm4gbG9uZyBucl9ibG9ja2Rldl9wYWdlcyh2b2lkKTsKIAogaW50IGJsa19nZXRfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAppbmRleCAzYTMxZWI1Li5iZGY1MDVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKQEAgLTI0LDYgKzI0LDcgQEAKIAlCTEtfVENfQUhFQUQJPSAxIDw8IDExLAkvKiByZWFkYWhlYWQgKi8KIAlCTEtfVENfTUVUQQk9IDEgPDwgMTIsCS8qIG1ldGFkYXRhICovCiAJQkxLX1RDX0RJU0NBUkQJPSAxIDw8IDEzLAkvKiBkaXNjYXJkIHJlcXVlc3RzICovCisJQkxLX1RDX0RSVl9EQVRBCT0gMSA8PCAxNCwJLyogYmluYXJ5IHBlci1kcml2ZXIgZGF0YSAqLwogCiAJQkxLX1RDX0VORAk9IDEgPDwgMTUsCS8qIG9ubHkgMTYtYml0cywgcmVtaW5kZXIgKi8KIH07CkBAIC01MSw2ICs1Miw3IEBACiAJX19CTEtfVEFfQk9VTkNFLAkJLyogYmlvIHdhcyBib3VuY2VkICovCiAJX19CTEtfVEFfUkVNQVAsCQkJLyogYmlvIHdhcyByZW1hcHBlZCAqLwogCV9fQkxLX1RBX0FCT1JULAkJCS8qIHJlcXVlc3QgYWJvcnRlZCAqLworCV9fQkxLX1RBX0RSVl9EQVRBLAkJLyogZHJpdmVyLXNwZWNpZmljIGJpbmFyeSBkYXRhICovCiB9OwogCiAvKgpAQCAtODIsNiArODQsNyBAQAogI2RlZmluZSBCTEtfVEFfQk9VTkNFCQkoX19CTEtfVEFfQk9VTkNFKQogI2RlZmluZSBCTEtfVEFfUkVNQVAJCShfX0JMS19UQV9SRU1BUCB8IEJMS19UQ19BQ1QoQkxLX1RDX1FVRVVFKSkKICNkZWZpbmUgQkxLX1RBX0FCT1JUCQkoX19CTEtfVEFfQUJPUlQgfCBCTEtfVENfQUNUKEJMS19UQ19RVUVVRSkpCisjZGVmaW5lIEJMS19UQV9EUlZfREFUQQkoX19CTEtfVEFfRFJWX0RBVEEgfCBCTEtfVENfQUNUKEJMS19UQ19EUlZfREFUQSkpCiAKICNkZWZpbmUgQkxLX1ROX1BST0NFU1MJCShfX0JMS19UTl9QUk9DRVNTIHwgQkxLX1RDX0FDVChCTEtfVENfTk9USUZZKSkKICNkZWZpbmUgQkxLX1ROX1RJTUVTVEFNUAkoX19CTEtfVE5fVElNRVNUQU1QIHwgQkxLX1RDX0FDVChCTEtfVENfTk9USUZZKSkKQEAgLTMxNyw2ICszMjAsMzQgQEAKIAlfX2Jsa19hZGRfdHJhY2UoYnQsIGZyb20sIGJpby0+Ymlfc2l6ZSwgYmlvLT5iaV9ydywgQkxLX1RBX1JFTUFQLCAhYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVVBUT0RBVEUpLCBzaXplb2YociksICZyKTsKIH0KIAorLyoqCisgKiBibGtfYWRkX2RyaXZlcl9kYXRhIC0gQWRkIGJpbmFyeSBtZXNzYWdlIHdpdGggZHJpdmVyLXNwZWNpZmljIGRhdGEKKyAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgorICogQHJxOgkJaW8gcmVxdWVzdAorICogQGRhdGE6CWRyaXZlci1zcGVjaWZpYyBkYXRhCisgKiBAbGVuOglsZW5ndGggb2YgZHJpdmVyLXNwZWNpZmljIGRhdGEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBTb21lIGRyaXZlcnMgbWlnaHQgd2FudCB0byB3cml0ZSBkcml2ZXItc3BlY2lmaWMgZGF0YSBwZXIgcmVxdWVzdC4KKyAqCisgKiovCitzdGF0aWMgaW5saW5lIHZvaWQgYmxrX2FkZF9kcml2ZXJfZGF0YShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJCSAgICAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCisJaWYgKGxpa2VseSghYnQpKQorCQlyZXR1cm47CisKKwlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKQorCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIHJxLT5kYXRhX2xlbiwgMCwgQkxLX1RBX0RSVl9EQVRBLAorCQkJCXJxLT5lcnJvcnMsIGxlbiwgZGF0YSk7CisJZWxzZQorCQlfX2Jsa19hZGRfdHJhY2UoYnQsIHJxLT5oYXJkX3NlY3RvciwgcnEtPmhhcmRfbnJfc2VjdG9ycyA8PCA5LAorCQkJCTAsIEJMS19UQV9EUlZfREFUQSwgcnEtPmVycm9ycywgbGVuLCBkYXRhKTsKK30KKwogZXh0ZXJuIGludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKIAkJCSAgIGNoYXIgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBibGtfdHJhY2Vfc3RhcnRzdG9wKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgc3RhcnQpOwpAQCAtMzMwLDYgKzM2MSw3IEBACiAjZGVmaW5lIGJsa19hZGRfdHJhY2VfZ2VuZXJpYyhxLCBycSwgcncsIHdoYXQpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmxrX2FkZF90cmFjZV9wZHVfaW50KHEsIHdoYXQsIGJpbywgcGR1KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJsa19hZGRfdHJhY2VfcmVtYXAocSwgYmlvLCBkZXYsIGYsIHQpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBibGtfYWRkX2RyaXZlcl9kYXRhKHEsIHJxLCBkYXRhLCBsZW4pCWRvIHt9IHdoaWxlICgwKQogI2RlZmluZSBkb19ibGtfdHJhY2Vfc2V0dXAocSwgbmFtZSwgZGV2LCBidXRzKQkoLUVOT1RUWSkKICNkZWZpbmUgYmxrX3RyYWNlX3NldHVwKHEsIG5hbWUsIGRldiwgYXJnKQkoLUVOT1RUWSkKICNkZWZpbmUgYmxrX3RyYWNlX3N0YXJ0c3RvcChxLCBzdGFydCkJCSgtRU5PVFRZKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCmluZGV4IGVhZGFhYjQuLjNjZTY0YjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKQEAgLTMyMiw3ICszMjIsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCB0cnlsb2NrX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCXJldHVybiBsaWtlbHkoIXRlc3RfYW5kX3NldF9iaXQoQkhfTG9jaywgJmJoLT5iX3N0YXRlKSk7CisJcmV0dXJuIGxpa2VseSghdGVzdF9hbmRfc2V0X2JpdF9sb2NrKEJIX0xvY2ssICZiaC0+Yl9zdGF0ZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL0tidWlsZCBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL0tidWlsZAppbmRleCAxMTMzZDVmLi5mYmFhN2Y5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvS2J1aWxkCkBAIC0xLDMgKzEsNCBAQAogdW5pZmRlZi15ICs9IGJpZ19lbmRpYW4uaAogdW5pZmRlZi15ICs9IGxpdHRsZV9lbmRpYW4uaAogdW5pZmRlZi15ICs9IHN3YWIuaAordW5pZmRlZi15ICs9IHN3YWJiLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaCBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaAppbmRleCA0NGY5NWI5Li4xY2JhM2YzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmgKKysrIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWJiLmg+CiAKICNkZWZpbmUgX19jb25zdGFudF9odG9ubCh4KSAoKF9fZm9yY2UgX19iZTMyKShfX3UzMikoeCkpCiAjZGVmaW5lIF9fY29uc3RhbnRfbnRvaGwoeCkgKChfX2ZvcmNlIF9fdTMyKShfX2JlMzIpKHgpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oCmluZGV4IDRjYzE3MGEuLmNlZGMxYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmgKQEAgLTEwLDYgKzEwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWIuaD4KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYmIuaD4KIAogI2RlZmluZSBfX2NvbnN0YW50X2h0b25sKHgpICgoX19mb3JjZSBfX2JlMzIpX19fY29uc3RhbnRfc3dhYjMyKCh4KSkpCiAjZGVmaW5lIF9fY29uc3RhbnRfbnRvaGwoeCkgX19fY29uc3RhbnRfc3dhYjMyKChfX2ZvcmNlIF9fYmUzMikoeCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAppbmRleCBjOThkZDdjLi44YjAwZjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKQEAgLTksMTIgKzksMTIgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9jZ3JvdXBzdGF0cy5oPgogI2luY2x1ZGUgPGxpbnV4L3ByaW9faGVhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAKICNpZmRlZiBDT05GSUdfQ0dST1VQUwogCkBAIC0xMzcsNiArMTM3LDE1IEBACiAJICogcmVsZWFzZV9saXN0X2xvY2sKIAkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlbGVhc2VfbGlzdDsKKworCS8qIHBpZHNfbXV0ZXggcHJvdGVjdHMgdGhlIGZpZWxkcyBiZWxvdyAqLworCXN0cnVjdCByd19zZW1hcGhvcmUgcGlkc19tdXRleDsKKwkvKiBBcnJheSBvZiBwcm9jZXNzIGlkcyBpbiB0aGUgY2dyb3VwICovCisJcGlkX3QgKnRhc2tzX3BpZHM7CisJLyogSG93IG1hbnkgZmlsZXMgYXJlIHVzaW5nIHRoZSBjdXJyZW50IHRhc2tzX3BpZHMgYXJyYXkgKi8KKwlpbnQgcGlkc191c2VfY291bnQ7CisJLyogTGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRhc2tzX3BpZHMgYXJyYXkgKi8KKwlpbnQgcGlkc19sZW5ndGg7CiB9OwogCiAvKiBBIGNzc19zZXQgaXMgYSBzdHJ1Y3R1cmUgaG9sZGluZyBwb2ludGVycyB0byBhIHNldCBvZgpAQCAtMTQ5LDcgKzE1OCw3IEBACiBzdHJ1Y3QgY3NzX3NldCB7CiAKIAkvKiBSZWZlcmVuY2UgY291bnQgKi8KLQlzdHJ1Y3Qga3JlZiByZWY7CisJYXRvbWljX3QgcmVmY291bnQ7CiAKIAkvKgogCSAqIExpc3QgcnVubmluZyB0aHJvdWdoIGFsbCBjZ3JvdXAgZ3JvdXBzIGluIHRoZSBzYW1lIGhhc2gKQEAgLTMyNiw3ICszMzUsOCBAQAogCSAqLwogCXZvaWQgKCptbV9vd25lcl9jaGFuZ2VkKShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCiAJCQkJCXN0cnVjdCBjZ3JvdXAgKm9sZCwKLQkJCQkJc3RydWN0IGNncm91cCAqbmV3KTsKKwkJCQkJc3RydWN0IGNncm91cCAqbmV3LAorCQkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCWludCBzdWJzeXNfaWQ7CiAJaW50IGFjdGl2ZTsKIAlpbnQgZGlzYWJsZWQ7CkBAIC0zOTMsNiArNDAzLDkgQEAKIGludCBjZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgY2dyb3VwX3NjYW5uZXIgKnNjYW4pOwogaW50IGNncm91cF9hdHRhY2hfdGFzayhzdHJ1Y3QgY2dyb3VwICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIAordm9pZCBjZ3JvdXBfbW1fb3duZXJfY2FsbGJhY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkLAorCQkJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3KTsKKwogI2Vsc2UgLyogIUNPTkZJR19DR1JPVVBTICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IGNncm91cF9pbml0X2Vhcmx5KHZvaWQpIHsgcmV0dXJuIDA7IH0KQEAgLTQxMSwxNSArNDI0LDkgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGNncm91cF9tbV9vd25lcl9jYWxsYmFja3Moc3RydWN0IHRhc2tfc3RydWN0ICpvbGQsCisJCQkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXcpIHt9CisKICNlbmRpZiAvKiAhQ09ORklHX0NHUk9VUFMgKi8KIAotI2lmZGVmIENPTkZJR19NTV9PV05FUgotZXh0ZXJuIHZvaWQKLWNncm91cF9tbV9vd25lcl9jYWxsYmFja3Moc3RydWN0IHRhc2tfc3RydWN0ICpvbGQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3KTsKLSNlbHNlIC8qICFDT05GSUdfTU1fT1dORVIgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotY2dyb3VwX21tX293bmVyX2NhbGxiYWNrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZCwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXcpCi17Ci19Ci0jZW5kaWYgLyogQ09ORklHX01NX09XTkVSICovCiAjZW5kaWYgLyogX0xJTlVYX0NHUk9VUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oCmluZGV4IGUyODc3NDUuLjljMjIzOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oCisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oCkBAIC00OCwzICs0OCw5IEBACiAjZW5kaWYKIAogLyogKi8KKworI2lmZGVmIENPTkZJR19DR1JPVVBfRlJFRVpFUgorU1VCU1lTKGZyZWV6ZXIpCisjZW5kaWYKKworLyogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xrLmggYi9pbmNsdWRlL2xpbnV4L2Nsay5oCmluZGV4IDVjYThjNmYuLjc3ODc3NzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xrLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbGsuaApAQCAtMzUsNiArMzUsOCBAQAogICogY2xrX2dldCBtYXkgcmV0dXJuIGRpZmZlcmVudCBjbG9jayBwcm9kdWNlcnMgZGVwZW5kaW5nIG9uIEBkZXYuKQogICoKICAqIERyaXZlcnMgbXVzdCBhc3N1bWUgdGhhdCB0aGUgY2xvY2sgc291cmNlIGlzIG5vdCBlbmFibGVkLgorICoKKyAqIGNsa19nZXQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHQuCiAgKi8KIHN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCk7CiAKQEAgLTc2LDYgKzc4LDggQEAKICAqIE5vdGU6IGRyaXZlcnMgbXVzdCBlbnN1cmUgdGhhdCBhbGwgY2xrX2VuYWJsZSBjYWxscyBtYWRlIG9uIHRoaXMKICAqIGNsb2NrIHNvdXJjZSBhcmUgYmFsYW5jZWQgYnkgY2xrX2Rpc2FibGUgY2FsbHMgcHJpb3IgdG8gY2FsbGluZwogICogdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBjbGtfcHV0IHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGludGVycnVwdCBjb250ZXh0LgogICovCiB2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCmluZGV4IDU1ZTQzNGYuLmY4OGQzMmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKQEAgLTQ1LDcgKzQ1LDggQEAKICAqIEByZWFkOgkJcmV0dXJucyBhIGN5Y2xlIHZhbHVlCiAgKiBAbWFzazoJCWJpdG1hc2sgZm9yIHR3bydzIGNvbXBsZW1lbnQKICAqCQkJc3VidHJhY3Rpb24gb2Ygbm9uIDY0IGJpdCBjb3VudGVycwotICogQG11bHQ6CQljeWNsZSB0byBuYW5vc2Vjb25kIG11bHRpcGxpZXIKKyAqIEBtdWx0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBtdWx0aXBsaWVyIChhZGp1c3RlZCBieSBOVFApCisgKiBAbXVsdF9vcmlnOgkJY3ljbGUgdG8gbmFub3NlY29uZCBtdWx0aXBsaWVyICh1bmFkanVzdGVkIGJ5IE5UUCkKICAqIEBzaGlmdDoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgZGl2aXNvciAocG93ZXIgb2YgdHdvKQogICogQGZsYWdzOgkJZmxhZ3MgZGVzY3JpYmluZyBzcGVjaWFsIHByb3BlcnRpZXMKICAqIEB2cmVhZDoJCXZzeXNjYWxsIGJhc2VkIHJlYWQKQEAgLTYzLDYgKzY0LDcgQEAKIAljeWNsZV90ICgqcmVhZCkodm9pZCk7CiAJY3ljbGVfdCBtYXNrOwogCXUzMiBtdWx0OworCXUzMiBtdWx0X29yaWc7CiAJdTMyIHNoaWZ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY3ljbGVfdCAoKnZyZWFkKSh2b2lkKTsKQEAgLTc3LDYgKzc5LDcgQEAKIAkvKiB0aW1la2VlcGluZyBzcGVjaWZpYyBkYXRhLCBpZ25vcmUgKi8KIAljeWNsZV90IGN5Y2xlX2ludGVydmFsOwogCXU2NAl4dGltZV9pbnRlcnZhbDsKKwl1MzIJcmF3X2ludGVydmFsOwogCS8qCiAJICogU2Vjb25kIHBhcnQgaXMgd3JpdHRlbiBhdCBlYWNoIHRpbWVyIGludGVycnVwdAogCSAqIEtlZXAgaXQgaW4gYSBkaWZmZXJlbnQgY2FjaGUgbGluZSB0byBkaXJ0eSBubwpAQCAtODUsNiArODgsNyBAQAogCWN5Y2xlX3QgY3ljbGVfbGFzdCBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCXU2NCB4dGltZV9uc2VjOwogCXM2NCBlcnJvcjsKKwlzdHJ1Y3QgdGltZXNwZWMgcmF3X3RpbWU7CiAKICNpZmRlZiBDT05GSUdfQ0xPQ0tTT1VSQ0VfV0FUQ0hET0cKIAkvKiBXYXRjaGRvZyByZWxhdGVkIGRhdGEsIHVzZWQgYnkgdGhlIGZyYW1ld29yayAqLwpAQCAtMjAxLDE3ICsyMDUsMTkgQEAKIHsKIAl1NjQgdG1wOwogCi0JLyogWFhYIC0gQWxsIG9mIHRoaXMgY291bGQgdXNlIGEgd2hvbGUgbG90IG9mIG9wdGltaXphdGlvbiAqLworCS8qIERvIHRoZSBucyAtPiBjeWNsZSBjb252ZXJzaW9uIGZpcnN0LCB1c2luZyBvcmlnaW5hbCBtdWx0ICovCiAJdG1wID0gbGVuZ3RoX25zZWM7CiAJdG1wIDw8PSBjLT5zaGlmdDsKLQl0bXAgKz0gYy0+bXVsdC8yOwotCWRvX2Rpdih0bXAsIGMtPm11bHQpOworCXRtcCArPSBjLT5tdWx0X29yaWcvMjsKKwlkb19kaXYodG1wLCBjLT5tdWx0X29yaWcpOwogCiAJYy0+Y3ljbGVfaW50ZXJ2YWwgPSAoY3ljbGVfdCl0bXA7CiAJaWYgKGMtPmN5Y2xlX2ludGVydmFsID09IDApCiAJCWMtPmN5Y2xlX2ludGVydmFsID0gMTsKIAorCS8qIEdvIGJhY2sgZnJvbSBjeWNsZXMgLT4gc2hpZnRlZCBucywgdGhpcyB0aW1lIHVzZSBudHAgYWRqdXNlZCBtdWx0ICovCiAJYy0+eHRpbWVfaW50ZXJ2YWwgPSAodTY0KWMtPmN5Y2xlX2ludGVydmFsICogYy0+bXVsdDsKKwljLT5yYXdfaW50ZXJ2YWwgPSAoKHU2NCljLT5jeWNsZV9pbnRlcnZhbCAqIGMtPm11bHRfb3JpZykgPj4gYy0+c2hpZnQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYXQuaCBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKaW5kZXggY2Y4ZDExYy4uZjA2MWExZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCkBAIC03OCw3ICs3OCw2IEBACiAJY29tcGF0X3NpZ3NldF93b3JkCXNpZ1tfQ09NUEFUX05TSUdfV09SRFNdOwogfSBjb21wYXRfc2lnc2V0X3Q7CiAKLWV4dGVybiBpbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICosIHN0cnVjdCBjb21wYXRfc3RhdCBfX3VzZXIgKik7CiBleHRlcm4gaW50IGdldF9jb21wYXRfdGltZXNwZWMoc3RydWN0IHRpbWVzcGVjICosIGNvbnN0IHN0cnVjdCBjb21wYXRfdGltZXNwZWMgX191c2VyICopOwogZXh0ZXJuIGludCBwdXRfY29tcGF0X3RpbWVzcGVjKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqKTsKIApAQCAtMjM1LDYgKzIzNCwxMSBAQAogZXh0ZXJuIGludCBwdXRfY29tcGF0X2l0aW1lcnNwZWMoc3RydWN0IGNvbXBhdF9pdGltZXJzcGVjIF9fdXNlciAqZHN0LAogCQkJCSBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqc3JjKTsKIAorYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfZ2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LAorCQlzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eik7Cithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19zZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsCisJCXN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KTsKKwogYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfYWRqdGltZXgoc3RydWN0IGNvbXBhdF90aW1leCBfX3VzZXIgKnV0cCk7CiAKIGV4dGVybiBpbnQgY29tcGF0X3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGVfc3RydWN0LmggYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGVfc3RydWN0LmgKaW5kZXggYjAzZjgwYS4uZDcxZjdjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25zb2xlX3N0cnVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29uc29sZV9zdHJ1Y3QuaApAQCAtNTMsNyArNTMsNiBAQAogCXVuc2lnbmVkIHNob3J0CXZjX2hpX2ZvbnRfbWFzazsJLyogWyNdIEF0dHJpYnV0ZSBzZXQgZm9yIHVwcGVyIDI1NiBjaGFycyBvZiBmb250IG9yIDAgaWYgbm90IHN1cHBvcnRlZCAqLwogCXN0cnVjdCBjb25zb2xlX2ZvbnQgdmNfZm9udDsJCS8qIEN1cnJlbnQgVkMgZm9udCBzZXQgKi8KIAl1bnNpZ25lZCBzaG9ydAl2Y192aWRlb19lcmFzZV9jaGFyOwkvKiBCYWNrZ3JvdW5kIGVyYXNlIGNoYXJhY3RlciAqLwotCXVuc2lnbmVkIHNob3J0CXZjX3NjcmxfZXJhc2VfY2hhcjsJLyogRXJhc2UgY2hhcmFjdGVyIGZvciBzY3JvbGwgKi8KIAkvKiBWVCB0ZXJtaW5hbCBkYXRhICovCiAJdW5zaWduZWQgaW50CXZjX3N0YXRlOwkJLyogRXNjYXBlIHNlcXVlbmNlIHBhcnNlciBzdGF0ZSAqLwogCXVuc2lnbmVkIGludAl2Y19ucGFyLHZjX3BhcltOUEFSXTsJLyogUGFyYW1ldGVycyBvZiBjdXJyZW50IGVzY2FwZSBzZXF1ZW5jZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmggYi9pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaAppbmRleCAwMjVlNGY1Li4wYWNmM2I3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyYXNoX2R1bXAuaApAQCAtOCwxMiArOCw5IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogCiAjZGVmaW5lIEVMRkNPUkVfQUREUl9NQVgJKC0xVUxMKQorI2RlZmluZSBFTEZDT1JFX0FERFJfRVJSCSgtMlVMTCkKIAotI2lmZGVmIENPTkZJR19QUk9DX1ZNQ09SRQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHI7Ci0jZWxzZQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOwotI2VuZGlmCiAKIGV4dGVybiBzc2l6ZV90IGNvcHlfb2xkbWVtX3BhZ2UodW5zaWduZWQgbG9uZywgY2hhciAqLCBzaXplX3QsCiAJCQkJCQl1bnNpZ25lZCBsb25nLCBpbnQpOwpAQCAtMjgsMTAgKzI1LDQzIEBACiAKICNkZWZpbmUgdm1jb3JlX2VsZl9jaGVja19hcmNoKHgpIChlbGZfY2hlY2tfYXJjaCh4KSB8fCB2bWNvcmVfZWxmX2NoZWNrX2FyY2hfY3Jvc3MoeCkpCiAKKy8qCisgKiBpc19rZHVtcF9rZXJuZWwoKSBjaGVja3Mgd2hldGhlciB0aGlzIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgb2YKKyAqIHByZXZpb3VzIGtlcm5lbCBvciBub3QuIFRoaXMgaXMgZGV0ZXJtaW5lZCBieSBjaGVja2luZyBpZiBwcmV2aW91cyBrZXJuZWwKKyAqIGhhcyBwYXNzZWQgdGhlIGVsZiBjb3JlIGhlYWRlciBhZGRyZXNzIG9uIGNvbW1hbmQgbGluZS4KKyAqCisgKiBUaGlzIGlzIG5vdCBqdXN0IGEgdGVzdCBpZiBDT05GSUdfQ1JBU0hfRFVNUCBpcyBlbmFibGVkIG9yIG5vdC4gSXQgd2lsbAorICogcmV0dXJuIDEgaWYgQ09ORklHX0NSQVNIX0RVTVA9eSBhbmQgaWYga2VybmVsIGlzIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYyBvZgorICogcHJldmlvdXMga2VybmVsLgorICovCisKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2tkdW1wX2tlcm5lbCh2b2lkKQogewogCXJldHVybiAoZWxmY29yZWhkcl9hZGRyICE9IEVMRkNPUkVfQUREUl9NQVgpID8gMSA6IDA7CiB9CisKKy8qIGlzX3ZtY29yZV91c2FibGUoKSBjaGVja3MgaWYgdGhlIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgYW5kCisgKiB0aGUgdm1jb3JlIHJlZ2lvbiBpcyB1c2FibGUuCisgKgorICogVGhpcyBtYWtlcyB1c2Ugb2YgdGhlIGZhY3QgdGhhdCBkdWUgdG8gYWxpZ25tZW50IC0yVUxMIGlzIG5vdAorICogYSB2YWxpZCBwb2ludGVyLCBtdWNoIGluIHRoZSB2YWluIG9mIElTX0VSUigpLCBleGNlcHQKKyAqIGRlYWxpbmcgZGlyZWN0bHkgd2l0aCBhbiB1bnNpZ25lZCBsb25nIGxvbmcgcmF0aGVyIHRoYW4gYSBwb2ludGVyLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3ZtY29yZV91c2FibGUodm9pZCkKK3sKKwlyZXR1cm4gaXNfa2R1bXBfa2VybmVsKCkgJiYgZWxmY29yZWhkcl9hZGRyICE9IEVMRkNPUkVfQUREUl9FUlIgPyAxIDogMDsKK30KKworLyogdm1jb3JlX3VudXNhYmxlKCkgbWFya3MgdGhlIHZtY29yZSBhcyB1bnVzYWJsZSwKKyAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgbG9naWMgb2YgaXNfa2R1bXBfa2VybmVsKCkKKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgdm1jb3JlX3VudXNhYmxlKHZvaWQpCit7CisJaWYgKGlzX2tkdW1wX2tlcm5lbCgpKQorCQllbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfRVJSOworfQogI2Vsc2UgLyogIUNPTkZJR19DUkFTSF9EVU1QICovCiBzdGF0aWMgaW5saW5lIGludCBpc19rZHVtcF9rZXJuZWwodm9pZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmIC8qIENPTkZJR19DUkFTSF9EVU1QICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCAyNDY5MzdjLi45ODdmNTkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTkwLDYgKzkwLDkgQEAKIAkJCQkgIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpzdGFydCwgdm9pZCAqZGF0YSwKIAkJCQkgIGludCAoKmZuKShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCB2b2lkICopKTsKIAordm9pZCBidXNfc29ydF9icmVhZHRoZmlyc3Qoc3RydWN0IGJ1c190eXBlICpidXMsCisJCQkgICBpbnQgKCpjb21wYXJlKShjb25zdCBzdHJ1Y3QgZGV2aWNlICphLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBkZXZpY2UgKmIpKTsKIC8qCiAgKiBCdXMgbm90aWZpZXJzOiBHZXQgbm90aWZpZWQgb2YgYWRkaXRpb24vcmVtb3ZhbCBvZiBkZXZpY2VzCiAgKiBhbmQgYmluZGluZy91bmJpbmRpbmcgb2YgZHJpdmVycyB0byBkZXZpY2VzLgpAQCAtNTAyLDcgKzUwNSw2IEBACiAJCQkJICAgIGRldl90IGRldnQsIHZvaWQgKmRydmRhdGEsCiAJCQkJICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogCQkJCSAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCA1LCA2KSkpOwotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2RydmRhdGEJZGV2aWNlX2NyZWF0ZQogZXh0ZXJuIHZvaWQgZGV2aWNlX2Rlc3Ryb3koc3RydWN0IGNsYXNzICpjbHMsIGRldl90IGRldnQpOwogCiAvKgpAQCAtNTUxLDcgKzU1MywxMSBAQAogI2RlZmluZSBkZXZfaW5mbyhkZXYsIGZvcm1hdCwgYXJnLi4uKQkJXAogCWRldl9wcmludGsoS0VSTl9JTkZPICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQogCi0jaWZkZWYgREVCVUcKKyNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKKyNkZWZpbmUgZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSBkbyB7IFwKKwlkeW5hbWljX2Rldl9kYmcoZGV2LCBmb3JtYXQsICMjX19WQV9BUkdTX18pOyBcCisJfSB3aGlsZSAoMCkKKyNlbGlmIGRlZmluZWQoREVCVUcpCiAjZGVmaW5lIGRldl9kYmcoZGV2LCBmb3JtYXQsIGFyZy4uLikJCVwKIAlkZXZfcHJpbnRrKEtFUk5fREVCVUcgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCiAjZWxzZQpAQCAtNTY3LDYgKzU3MywxNCBAQAogCSh7IGlmICgwKSBkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgZm9ybWF0LCAjI2FyZyk7IDA7IH0pCiAjZW5kaWYKIAorLyoKKyAqIGRldl9XQVJOKCkgYWN0cyBsaWtlIGRldl9wcmludGsoKSwgYnV0IHdpdGggdGhlIGtleSBkaWZmZXJlbmNlCisgKiBvZiB1c2luZyBhIFdBUk4vV0FSTl9PTiB0byBnZXQgdGhlIG1lc3NhZ2Ugb3V0LCBpbmNsdWRpbmcgdGhlCisgKiBmaWxlL2xpbmUgaW5mb3JtYXRpb24gYW5kIGEgYmFja3RyYWNlLgorICovCisjZGVmaW5lIGRldl9XQVJOKGRldiwgZm9ybWF0LCBhcmcuLi4pIFwKKwlXQVJOKDEsICJEZXZpY2U6ICVzXG4iIGZvcm1hdCwgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSwgIyMgYXJnKTsKKwogLyogQ3JlYXRlIGFsaWFzLCBzbyBJIGNhbiBiZSBhdXRvbG9hZGVkLiAqLwogI2RlZmluZSBNT0RVTEVfQUxJQVNfQ0hBUkRFVihtYWpvcixtaW5vcikgXAogCU1PRFVMRV9BTElBUygiY2hhci1tYWpvci0iIF9fc3RyaW5naWZ5KG1ham9yKSAiLSIgX19zdHJpbmdpZnkobWlub3IpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvZG1hX3JlbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWFfcmVtYXBwaW5nLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvcGNpL2RtYV9yZW1hcHBpbmcuaApyZW5hbWUgdG8gaW5jbHVkZS9saW51eC9kbWFfcmVtYXBwaW5nLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hci5oIGIvaW5jbHVkZS9saW51eC9kbWFyLmgKaW5kZXggYzM2MGM1NS4uZjE5ODRmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWFyLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWFyLmgKQEAgLTQ1LDcgKzQ1LDYgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRyaGQsICZkbWFyX2RyaGRfdW5pdHMsIGxpc3QpCiAKIGV4dGVybiBpbnQgZG1hcl90YWJsZV9pbml0KHZvaWQpOwotZXh0ZXJuIGludCBlYXJseV9kbWFyX2RldGVjdCh2b2lkKTsKIGV4dGVybiBpbnQgZG1hcl9kZXZfc2NvcGVfaW5pdCh2b2lkKTsKIAogLyogSW50ZWwgSU9NTVUgZGV0ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtaS5oIGIvaW5jbHVkZS9saW51eC9kbWkuaAppbmRleCAyYTA2M2I2Li5lNTA4NGViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtaS5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1pLmgKQEAgLTIsMjkgKzIsOSBAQAogI2RlZmluZSBfX0RNSV9IX18KIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KIAotZW51bSBkbWlfZmllbGQgewotCURNSV9OT05FLAotCURNSV9CSU9TX1ZFTkRPUiwKLQlETUlfQklPU19WRVJTSU9OLAotCURNSV9CSU9TX0RBVEUsCi0JRE1JX1NZU19WRU5ET1IsCi0JRE1JX1BST0RVQ1RfTkFNRSwKLQlETUlfUFJPRFVDVF9WRVJTSU9OLAotCURNSV9QUk9EVUNUX1NFUklBTCwKLQlETUlfUFJPRFVDVF9VVUlELAotCURNSV9CT0FSRF9WRU5ET1IsCi0JRE1JX0JPQVJEX05BTUUsCi0JRE1JX0JPQVJEX1ZFUlNJT04sCi0JRE1JX0JPQVJEX1NFUklBTCwKLQlETUlfQk9BUkRfQVNTRVRfVEFHLAotCURNSV9DSEFTU0lTX1ZFTkRPUiwKLQlETUlfQ0hBU1NJU19UWVBFLAotCURNSV9DSEFTU0lTX1ZFUlNJT04sCi0JRE1JX0NIQVNTSVNfU0VSSUFMLAotCURNSV9DSEFTU0lTX0FTU0VUX1RBRywKLQlETUlfU1RSSU5HX01BWCwKLX07CisvKiBlbnVtIGRtaV9maWVsZCBpcyBpbiBtb2RfZGV2aWNldGFibGUuaCAqLwogCiBlbnVtIGRtaV9kZXZpY2VfdHlwZSB7CiAJRE1JX0RFVl9UWVBFX0FOWSA9IDAsCkBAIC00OCwyMyArMjgsNiBAQAogCXUxNiBoYW5kbGU7CiB9OwogCi0vKgotICoJRE1JIGNhbGxiYWNrcyBmb3IgcHJvYmxlbSBib2FyZHMKLSAqLwotc3RydWN0IGRtaV9zdHJtYXRjaCB7Ci0JdTggc2xvdDsKLQljaGFyICpzdWJzdHI7Ci19OwotCi1zdHJ1Y3QgZG1pX3N5c3RlbV9pZCB7Ci0JaW50ICgqY2FsbGJhY2spKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICopOwotCWNvbnN0IGNoYXIgKmlkZW50OwotCXN0cnVjdCBkbWlfc3RybWF0Y2ggbWF0Y2hlc1s0XTsKLQl2b2lkICpkcml2ZXJfZGF0YTsKLX07Ci0KLSNkZWZpbmUgRE1JX01BVENIKGEsIGIpCXsgYSwgYiB9Ci0KIHN0cnVjdCBkbWlfZGV2aWNlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaW50IHR5cGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RzMTI4Ni5oIGIvaW5jbHVkZS9saW51eC9kczEyODYuaAppbmRleCBkODk4OTg2Li40NWVhMGFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RzMTI4Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvZHMxMjg2LmgKQEAgLTgsOCArOCw2IEBACiAjaWZuZGVmIF9fTElOVVhfRFMxMjg2X0gKICNkZWZpbmUgX19MSU5VWF9EUzEyODZfSAogCi0jaW5jbHVkZSA8YXNtL2RzMTI4Ni5oPgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogcmVnaXN0ZXIgc3VtbWFyeQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oIGIvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaAppbmRleCBjOGNiZDkwLi43OWE4ZWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmgKQEAgLTYyLDYgKzYyLDcgQEAKIAlGRV9DQU5fSElFUkFSQ0hZX0FVVE8JCT0gMHgxMDAwMDAsCiAJRkVfQ0FOXzhWU0IJCQk9IDB4MjAwMDAwLAogCUZFX0NBTl8xNlZTQgkJCT0gMHg0MDAwMDAsCisJRkVfSEFTX0VYVEVOREVEX0NBUFMJCT0gMHg4MDAwMDAsICAgLy8gV2UgbmVlZCBtb3JlIGJpdHNwYWNlIGZvciBuZXdlciBBUElzLCBpbmRpY2F0ZSB0aGlzLgogCUZFX05FRURTX0JFTkRJTkcJCT0gMHgyMDAwMDAwMCwgLy8gbm90IHN1cHBvcnRlZCBhbnltb3JlLCBkb24ndCB1c2UgKGZyb250ZW5kIHJlcXVpcmVzIGZyZXF1ZW5jeSBiZW5kaW5nKQogCUZFX0NBTl9SRUNPVkVSCQkJPSAweDQwMDAwMDAwLCAvLyBmcm9udGVuZCBjYW4gcmVjb3ZlciBmcm9tIGEgY2FibGUgdW5wbHVnIGF1dG9tYXRpY2FsbHkKIAlGRV9DQU5fTVVURV9UUwkJCT0gMHg4MDAwMDAwMCAgLy8gZnJvbnRlbmQgY2FuIHN0b3Agc3B1cmlvdXMgVFMgZGF0YSBvdXRwdXQKQEAgLTE0Nyw3ICsxNDgsOSBAQAogCUZFQ182XzcsCiAJRkVDXzdfOCwKIAlGRUNfOF85LAotCUZFQ19BVVRPCisJRkVDX0FVVE8sCisJRkVDXzNfNSwKKwlGRUNfOV8xMCwKIH0gZmVfY29kZV9yYXRlX3Q7CiAKIApAQCAtMTYwLDcgKzE2MywxMSBAQAogCVFBTV8yNTYsCiAJUUFNX0FVVE8sCiAJVlNCXzgsCi0JVlNCXzE2CisJVlNCXzE2LAorCVBTS184LAorCUFQU0tfMTYsCisJQVBTS18zMiwKKwlEUVBTSywKIH0gZmVfbW9kdWxhdGlvbl90OwogCiB0eXBlZGVmIGVudW0gZmVfdHJhbnNtaXRfbW9kZSB7CkBAIC0yMzksNiArMjQ2LDEwNyBAQAogCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogfTsKIAorLyogUzJBUEkgQ29tbWFuZHMgKi8KKyNkZWZpbmUgRFRWX1VOREVGSU5FRAkJMAorI2RlZmluZSBEVFZfVFVORQkJMQorI2RlZmluZSBEVFZfQ0xFQVIJCTIKKyNkZWZpbmUgRFRWX0ZSRVFVRU5DWQkJMworI2RlZmluZSBEVFZfTU9EVUxBVElPTgkJNAorI2RlZmluZSBEVFZfQkFORFdJRFRIX0haCTUKKyNkZWZpbmUgRFRWX0lOVkVSU0lPTgkJNgorI2RlZmluZSBEVFZfRElTRVFDX01BU1RFUgk3CisjZGVmaW5lIERUVl9TWU1CT0xfUkFURQkJOAorI2RlZmluZSBEVFZfSU5ORVJfRkVDCQk5CisjZGVmaW5lIERUVl9WT0xUQUdFCQkxMAorI2RlZmluZSBEVFZfVE9ORQkJMTEKKyNkZWZpbmUgRFRWX1BJTE9UCQkxMgorI2RlZmluZSBEVFZfUk9MTE9GRgkJMTMKKyNkZWZpbmUgRFRWX0RJU0VRQ19TTEFWRV9SRVBMWQkxNAorCisvKiBCYXNpYyBlbnVtZXJhdGlvbiBzZXQgZm9yIHF1ZXJ5aW5nIHVubGltaXRlZCBjYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgRFRWX0ZFX0NBUEFCSUxJVFlfQ09VTlQJMTUKKyNkZWZpbmUgRFRWX0ZFX0NBUEFCSUxJVFkJMTYKKyNkZWZpbmUgRFRWX0RFTElWRVJZX1NZU1RFTQkxNworCisjZGVmaW5lIERUVl9BUElfVkVSU0lPTgkJCQkzNQorI2RlZmluZSBEVFZfQVBJX1ZFUlNJT04JCQkJMzUKKyNkZWZpbmUgRFRWX0NPREVfUkFURV9IUAkJCTM2CisjZGVmaW5lIERUVl9DT0RFX1JBVEVfTFAJCQkzNworI2RlZmluZSBEVFZfR1VBUkRfSU5URVJWQUwJCQkzOAorI2RlZmluZSBEVFZfVFJBTlNNSVNTSU9OX01PREUJCQkzOQorI2RlZmluZSBEVFZfSElFUkFSQ0hZCQkJCTQwCisKKyNkZWZpbmUgRFRWX01BWF9DT01NQU5ECQkJCURUVl9ISUVSQVJDSFkKKwordHlwZWRlZiBlbnVtIGZlX3BpbG90IHsKKwlQSUxPVF9PTiwKKwlQSUxPVF9PRkYsCisJUElMT1RfQVVUTywKK30gZmVfcGlsb3RfdDsKKwordHlwZWRlZiBlbnVtIGZlX3JvbGxvZmYgeworCVJPTExPRkZfMzUsIC8qIEltcGxpZWQgdmFsdWUgaW4gRFZCLVMsIGRlZmF1bHQgZm9yIERWQi1TMiAqLworCVJPTExPRkZfMjAsCisJUk9MTE9GRl8yNSwKKwlST0xMT0ZGX0FVVE8sCit9IGZlX3JvbGxvZmZfdDsKKwordHlwZWRlZiBlbnVtIGZlX2RlbGl2ZXJ5X3N5c3RlbSB7CisJU1lTX1VOREVGSU5FRCwKKwlTWVNfRFZCQ19BTk5FWF9BQywKKwlTWVNfRFZCQ19BTk5FWF9CLAorCVNZU19EVkJULAorCVNZU19EU1MsCisJU1lTX0RWQlMsCisJU1lTX0RWQlMyLAorCVNZU19EVkJILAorCVNZU19JU0RCVCwKKwlTWVNfSVNEQlMsCisJU1lTX0lTREJDLAorCVNZU19BVFNDLAorCVNZU19BVFNDTUgsCisJU1lTX0RNQlRILAorCVNZU19DTU1CLAorCVNZU19EQUIsCit9IGZlX2RlbGl2ZXJ5X3N5c3RlbV90OworCitzdHJ1Y3QgZHR2X2NtZHNfaCB7CisJY2hhcgkqbmFtZTsJCS8qIEEgZGlzcGxheSBuYW1lIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKi8KKworCV9fdTMyCWNtZDsJCS8qIEEgdW5pcXVlIElEICovCisKKwkvKiBGbGFncyAqLworCV9fdTMyCXNldDoxOwkJLyogRWl0aGVyIGEgc2V0IG9yIGdldCBwcm9wZXJ0eSAqLworCV9fdTMyCWJ1ZmZlcjoxOwkvKiBEb2VzIHRoaXMgcHJvcGVydHkgdXNlIHRoZSBidWZmZXI/ICovCisJX191MzIJcmVzZXJ2ZWQ6MzA7CS8qIEFsaWduICovCit9OworCitzdHJ1Y3QgZHR2X3Byb3BlcnR5IHsKKwlfX3UzMiBjbWQ7CisJX191MzIgcmVzZXJ2ZWRbM107CisJdW5pb24geworCQlfX3UzMiBkYXRhOworCQlzdHJ1Y3QgeworCQkJX191OCBkYXRhWzMyXTsKKwkJCV9fdTMyIGxlbjsKKwkJCV9fdTMyIHJlc2VydmVkMVszXTsKKwkJCXZvaWQgKnJlc2VydmVkMjsKKwkJfSBidWZmZXI7CisJfSB1OworCWludCByZXN1bHQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogbnVtIG9mIHByb3BlcnRpZXMgY2Fubm90IGV4Y2VlZCBEVFZfSU9DVExfTUFYX01TR1MgcGVyIGlvY3RsICovCisjZGVmaW5lIERUVl9JT0NUTF9NQVhfTVNHUyA2NAorCitzdHJ1Y3QgZHR2X3Byb3BlcnRpZXMgeworCV9fdTMyIG51bTsKKwlzdHJ1Y3QgZHR2X3Byb3BlcnR5ICpwcm9wczsKK307CisKKyNkZWZpbmUgRkVfU0VUX1BST1BFUlRZCQkgICBfSU9XKCdvJywgODIsIHN0cnVjdCBkdHZfcHJvcGVydGllcykKKyNkZWZpbmUgRkVfR0VUX1BST1BFUlRZCQkgICBfSU9SKCdvJywgODMsIHN0cnVjdCBkdHZfcHJvcGVydGllcykKKwogCiAvKioKICAqIFdoZW4gc2V0LCB0aGlzIGZsYWcgd2lsbCBkaXNhYmxlIGFueSB6aWd6YWdnaW5nIG9yIG90aGVyICJub3JtYWwiIHR1bmluZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdmIvdmVyc2lvbi5oIGIvaW5jbHVkZS9saW51eC9kdmIvdmVyc2lvbi5oCmluZGV4IDEyNmUwYzIuLjI1YjgyM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL3ZlcnNpb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L2R2Yi92ZXJzaW9uLmgKQEAgLTIzLDcgKzIzLDcgQEAKICNpZm5kZWYgX0RWQlZFUlNJT05fSF8KICNkZWZpbmUgX0RWQlZFUlNJT05fSF8KIAotI2RlZmluZSBEVkJfQVBJX1ZFUlNJT04gMwotI2RlZmluZSBEVkJfQVBJX1ZFUlNJT05fTUlOT1IgMgorI2RlZmluZSBEVkJfQVBJX1ZFUlNJT04gNQorI2RlZmluZSBEVkJfQVBJX1ZFUlNJT05fTUlOT1IgMAogCiAjZW5kaWYgLypfRFZCVkVSU0lPTl9IXyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfcHJpbnRrLmggYi9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfcHJpbnRrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ1MjhkMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZHluYW1pY19wcmludGsuaApAQCAtMCwwICsxLDkzIEBACisjaWZuZGVmIF9EWU5BTUlDX1BSSU5US19ICisjZGVmaW5lIF9EWU5BTUlDX1BSSU5US19ICisKKyNkZWZpbmUgRFlOQU1JQ19ERUJVR19IQVNIX0JJVFMgNgorI2RlZmluZSBERUJVR19IQVNIX1RBQkxFX1NJWkUgKDEgPDwgRFlOQU1JQ19ERUJVR19IQVNIX0JJVFMpCisKKyNkZWZpbmUgVFlQRV9CT09MRUFOIDEKKworI2RlZmluZSBEWU5BTUlDX0VOQUJMRURfQUxMIDAKKyNkZWZpbmUgRFlOQU1JQ19FTkFCTEVEX05PTkUgMQorI2RlZmluZSBEWU5BTUlDX0VOQUJMRURfU09NRSAyCisKK2V4dGVybiBpbnQgZHluYW1pY19lbmFibGVkOworCisvKiBkeW5hbWljX3ByaW50a19lbmFibGVkLCBhbmQgZHluYW1pY19wcmludGtfZW5hYmxlZDIgYXJlIGJpdG1hc2tzIGluIHdoaWNoCisgKiBiaXQgbiBpcyBzZXQgdG8gMSBpZiBhbnkgbW9kbmFtZSBoYXNoZXMgaW50byB0aGUgYnVja2V0IG4sIDAgb3RoZXJ3aXNlLiBUaGV5CisgKiB1c2UgaW5kZXBlbmRlbnQgaGFzaCBmdW5jdGlvbnMsIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGZhbHNlIHBvc2l0aXZlcy4KKyAqLworZXh0ZXJuIGxvbmcgbG9uZyBkeW5hbWljX3ByaW50a19lbmFibGVkOworZXh0ZXJuIGxvbmcgbG9uZyBkeW5hbWljX3ByaW50a19lbmFibGVkMjsKKworc3RydWN0IG1vZF9kZWJ1ZyB7CisJY2hhciAqbW9kbmFtZTsKKwljaGFyICpsb2dpY2FsX21vZG5hbWU7CisJY2hhciAqZmxhZ19uYW1lczsKKwlpbnQgdHlwZTsKKwlpbnQgaGFzaDsKKwlpbnQgaGFzaDI7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKworaW50IHJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lLCBpbnQgdHlwZSwgY2hhciAqc2hhcmVfbmFtZSwKKwkJCQkJY2hhciAqZmxhZ3MsIGludCBoYXNoLCBpbnQgaGFzaDIpOworCisjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcpCitleHRlcm4gaW50IHVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUpOworZXh0ZXJuIGludCBfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKGNoYXIgKm1vZG5hbWUsIGludCB0eXBlLAorCQkJCQlpbnQgdmFsdWUsIGludCBoYXNoKTsKKworI2RlZmluZSBfX2R5bmFtaWNfZGJnX2VuYWJsZWQobW9kdWxlLCB0eXBlLCB2YWx1ZSwgbGV2ZWwsIGhhc2gpICAoewkgICAgIFwKKwlpbnQgX19yZXQgPSAwOwkJCQkJCQkgICAgIFwKKwlpZiAodW5saWtlbHkoKGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgJiAoMUxMIDw8IERFQlVHX0hBU0gpKSAmJgkgICAgIFwKKwkJCShkeW5hbWljX3ByaW50a19lbmFibGVkMiAmICgxTEwgPDwgREVCVUdfSEFTSDIpKSkpICAgXAorCQkJX19yZXQgPSBfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKG1vZHVsZSwgdHlwZSwgICBcCisJCQkJCQkJCXZhbHVlLCBoYXNoKTtcCisJX19yZXQ7IH0pCisKKyNkZWZpbmUgZHluYW1pY19wcl9kZWJ1ZyhmbXQsIC4uLikgZG8gewkJCQkJICAgIFwKKwlzdGF0aWMgY2hhciBtb2RfbmFtZVtdCQkJCQkJICAgIFwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2Vfc3RyaW5ncyIpKSkJCQkgICAgXAorCSA9IEtCVUlMRF9NT0ROQU1FOwkJCQkJCSAgICBcCisJc3RhdGljIHN0cnVjdCBtb2RfZGVidWcgZGVzY3JpcHRvcgkJCQkgICAgXAorCV9fdXNlZAkJCQkJCQkJICAgIFwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2UiKSwgYWxpZ25lZCg4KSkpID0JCSAgICBcCisJeyBtb2RfbmFtZSwgbW9kX25hbWUsIE5VTEwsIFRZUEVfQk9PTEVBTiwgREVCVUdfSEFTSCwgREVCVUdfSEFTSDIgfTtcCisJaWYgKF9fZHluYW1pY19kYmdfZW5hYmxlZChLQlVJTERfTU9ETkFNRSwgVFlQRV9CT09MRUFOLAkJICAgIFwKKwkJCQkJCTAsIDAsIERFQlVHX0hBU0gpKQkgICAgXAorCQlwcmludGsoS0VSTl9ERUJVRyBLQlVJTERfTU9ETkFNRSAiOiIgZm10LAkJICAgIFwKKwkJCQkjI19fVkFfQVJHU19fKTsJCQkJICAgIFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSBkbyB7CQkJCSAgICBcCisJc3RhdGljIGNoYXIgbW9kX25hbWVbXQkJCQkJCSAgICBcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlX3N0cmluZ3MiKSkpCQkJICAgIFwKKwkgPSBLQlVJTERfTU9ETkFNRTsJCQkJCQkgICAgXAorCXN0YXRpYyBzdHJ1Y3QgbW9kX2RlYnVnIGRlc2NyaXB0b3IJCQkJICAgIFwKKwlfX3VzZWQJCQkJCQkJCSAgICBcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQkgICAgXAorCXsgbW9kX25hbWUsIG1vZF9uYW1lLCBOVUxMLCBUWVBFX0JPT0xFQU4sIERFQlVHX0hBU0gsIERFQlVHX0hBU0gyIH07XAorCWlmIChfX2R5bmFtaWNfZGJnX2VuYWJsZWQoS0JVSUxEX01PRE5BTUUsIFRZUEVfQk9PTEVBTiwJCSAgICBcCisJCQkJCQkwLCAwLCBERUJVR19IQVNIKSkJICAgIFwKKwkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LAkJCSAgICBcCisJCQkJCUtCVUlMRF9NT0ROQU1FICI6ICIgZm9ybWF0LAkgICAgXAorCQkJCQkjI19fVkFfQVJHU19fKTsJCQkgICAgXAorCX0gd2hpbGUgKDApCisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IHVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY29uc3QgY2hhciAqbW9kX25hbWUpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKGNoYXIgKm1vZG5hbWUsIGludCB0eXBlLAorCQkJCQkJaW50IHZhbHVlLCBpbnQgaGFzaCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBfX2R5bmFtaWNfZGJnX2VuYWJsZWQobW9kdWxlLCB0eXBlLCB2YWx1ZSwgbGV2ZWwsIGhhc2gpICAoeyAwOyB9KQorI2RlZmluZSBkeW5hbWljX3ByX2RlYnVnKGZtdCwgLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkeW5hbWljX2Rldl9kYmcoZGV2LCBmb3JtYXQsIC4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oCmluZGV4IDgwNzM3M2QuLmJiNjZmZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmgKKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaApAQCAtMjA4LDYgKzIwOCw5IEBACiAjZGVmaW5lIEVGSV9HTE9CQUxfVkFSSUFCTEVfR1VJRCBcCiAgICAgRUZJX0dVSUQoICAweDhiZTRkZjYxLCAweDkzY2EsIDB4MTFkMiwgMHhhYSwgMHgwZCwgMHgwMCwgMHhlMCwgMHg5OCwgMHgwMywgMHgyYiwgMHg4YyApCiAKKyNkZWZpbmUgVVZfU1lTVEVNX1RBQkxFX0dVSUQgXAorICAgIEVGSV9HVUlEKCAgMHgzYjEzYTdkNCwgMHg2MzNlLCAweDExZGQsIDB4OTMsIDB4ZWMsIDB4ZGEsIDB4MjUsIDB4NTYsIDB4ZDgsIDB4OTUsIDB4OTMgKQorCiB0eXBlZGVmIHN0cnVjdCB7CiAJZWZpX2d1aWRfdCBndWlkOwogCXVuc2lnbmVkIGxvbmcgdGFibGU7CkBAIC0yNTUsNiArMjU4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGJvb3RfaW5mbzsJLyogYm9vdCBpbmZvIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZyBoY2RwOwkJLyogSENEUCB0YWJsZSAqLwogCXVuc2lnbmVkIGxvbmcgdWdhOwkJLyogVUdBIHRhYmxlICovCisJdW5zaWduZWQgbG9uZyB1dl9zeXN0YWI7CS8qIFVWIHN5c3RlbSB0YWJsZSAqLwogCWVmaV9nZXRfdGltZV90ICpnZXRfdGltZTsKIAllZmlfc2V0X3RpbWVfdCAqc2V0X3RpbWU7CiAJZWZpX2dldF93YWtldXBfdGltZV90ICpnZXRfd2FrZXVwX3RpbWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDJfZnMuaCBiL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCmluZGV4IDJlZmU3YjguLjc4Yzc3NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjaWZkZWYgRVhUMkZTX0RFQlVHCiAjCWRlZmluZSBleHQyX2RlYnVnKGYsIGEuLi4pCXsgXAogCQkJCQlwcmludGsgKCJFWFQyLWZzIERFQlVHICglcywgJWQpOiAlczoiLCBcCi0JCQkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7IFwKKwkJCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOyBcCiAJCQkJICAJcHJpbnRrIChmLCAjIyBhKTsgXAogCQkJCQl9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAppbmRleCA4MTIwZmExLi5kMTRmMDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaApAQCAtNDMsNyArNDMsNyBAQAogI2RlZmluZSBleHQzX2RlYnVnKGYsIGEuLi4pCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJcHJpbnRrIChLRVJOX0RFQlVHICJFWFQzLWZzIERFQlVHICglcywgJWQpOiAlczoiLAlcCi0JCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CQlcCisJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsJCVwKIAkJcHJpbnRrIChLRVJOX0RFQlVHIGYsICMjIGEpOwkJCQlcCiAJfSB3aGlsZSAoMCkKICNlbHNlCkBAIC0zODAsNiArMzgwLDggQEAKICNkZWZpbmUgRVhUM19NT1VOVF9RVU9UQQkJMHg4MDAwMCAvKiBTb21lIHF1b3RhIG9wdGlvbiBzZXQgKi8KICNkZWZpbmUgRVhUM19NT1VOVF9VU1JRVU9UQQkJMHgxMDAwMDAgLyogIm9sZCIgdXNlciBxdW90YSAqLwogI2RlZmluZSBFWFQzX01PVU5UX0dSUFFVT1RBCQkweDIwMDAwMCAvKiAib2xkIiBncm91cCBxdW90YSAqLworI2RlZmluZSBFWFQzX01PVU5UX0RBVEFfRVJSX0FCT1JUCTB4NDAwMDAwIC8qIEFib3J0IG9uIGZpbGUgZGF0YSB3cml0ZQorCQkJCQkJICAqIGVycm9yIGluIG9yZGVyZWQgbW9kZSAqLwogCiAvKiBDb21wYXRpYmlsaXR5LCBmb3IgaGF2aW5nIGJvdGggZXh0Ml9mcy5oIGFuZCBleHQzX2ZzLmggaW5jbHVkZWQgYXQgb25jZSAqLwogI2lmbmRlZiBfTElOVVhfRVhUMl9GU19ICkBAIC04NzEsNyArODczLDcgQEAKICNkZWZpbmUgZXh0M19zdGRfZXJyb3Ioc2IsIGVycm5vKQkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJaWYgKChlcnJubykpCQkJCQkJXAotCQlfX2V4dDNfc3RkX2Vycm9yKChzYiksIF9fRlVOQ1RJT05fXywgKGVycm5vKSk7CVwKKwkJX19leHQzX3N0ZF9lcnJvcigoc2IpLCBfX2Z1bmNfXywgKGVycm5vKSk7CVwKIH0gd2hpbGUgKDApCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmgKaW5kZXggOGM0M2IxMy4uY2Y4MmQ1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2piZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaApAQCAtMTM3LDE3ICsxMzcsMTcgQEAKIAkJCQloYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKIAogI2RlZmluZSBleHQzX2pvdXJuYWxfZ2V0X3VuZG9fYWNjZXNzKGhhbmRsZSwgYmgpIFwKLQlfX2V4dDNfam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoX19GVU5DVElPTl9fLCAoaGFuZGxlKSwgKGJoKSkKKwlfX2V4dDNfam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoX19mdW5jX18sIChoYW5kbGUpLCAoYmgpKQogI2RlZmluZSBleHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGJoKSBcCi0JX19leHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhfX0ZVTkNUSU9OX18sIChoYW5kbGUpLCAoYmgpKQorCV9fZXh0M19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoX19mdW5jX18sIChoYW5kbGUpLCAoYmgpKQogI2RlZmluZSBleHQzX2pvdXJuYWxfcmV2b2tlKGhhbmRsZSwgYmxvY2tuciwgYmgpIFwKLQlfX2V4dDNfam91cm5hbF9yZXZva2UoX19GVU5DVElPTl9fLCAoaGFuZGxlKSwgKGJsb2NrbnIpLCAoYmgpKQorCV9fZXh0M19qb3VybmFsX3Jldm9rZShfX2Z1bmNfXywgKGhhbmRsZSksIChibG9ja25yKSwgKGJoKSkKICNkZWZpbmUgZXh0M19qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgYmgpIFwKLQlfX2V4dDNfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhfX0ZVTkNUSU9OX18sIChoYW5kbGUpLCAoYmgpKQorCV9fZXh0M19qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKF9fZnVuY19fLCAoaGFuZGxlKSwgKGJoKSkKICNkZWZpbmUgZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgYmgpIFwKLQlfX2V4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShfX0ZVTkNUSU9OX18sIChoYW5kbGUpLCAoYmgpKQorCV9fZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKF9fZnVuY19fLCAoaGFuZGxlKSwgKGJoKSkKICNkZWZpbmUgZXh0M19qb3VybmFsX2ZvcmdldChoYW5kbGUsIGJoKSBcCi0JX19leHQzX2pvdXJuYWxfZm9yZ2V0KF9fRlVOQ1RJT05fXywgKGhhbmRsZSksIChiaCkpCisJX19leHQzX2pvdXJuYWxfZm9yZ2V0KF9fZnVuY19fLCAoaGFuZGxlKSwgKGJoKSkKIAogaW50IGV4dDNfam91cm5hbF9kaXJ0eV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogCkBAIC0xNjAsNyArMTYwLDcgQEAKIH0KIAogI2RlZmluZSBleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpIFwKLQlfX2V4dDNfam91cm5hbF9zdG9wKF9fRlVOQ1RJT05fXywgKGhhbmRsZSkpCisJX19leHQzX2pvdXJuYWxfc3RvcChfX2Z1bmNfXywgKGhhbmRsZSkpCiAKIHN0YXRpYyBpbmxpbmUgaGFuZGxlX3QgKmV4dDNfam91cm5hbF9jdXJyZW50X2hhbmRsZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mYi5oIGIvaW5jbHVkZS9saW51eC9mYi5oCmluZGV4IDUzMWNjZDUuLjc1YTgxZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZiLmgKQEAgLTgwOCw2ICs4MDgsNyBAQAogc3RydWN0IGZiX2luZm8gewogCWludCBub2RlOwogCWludCBmbGFnczsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsJCS8qIExvY2sgZm9yIG9wZW4vcmVsZWFzZS9pb2N0bCBmdW5jcyAqLwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7CS8qIEN1cnJlbnQgdmFyICovCiAJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGZpeDsJLyogQ3VycmVudCBmaXggKi8KIAlzdHJ1Y3QgZmJfbW9uc3BlY3MgbW9uc3BlY3M7CS8qIEN1cnJlbnQgTW9uaXRvciBzcGVjcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmggYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAppbmRleCAwZjBlMjcxLi40ZDA3OGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaApAQCAtMTU0LDggKzE1NCwxMyBAQAogICogQHJlcXVlc3Q6ICAgICAgIFZhbGlkIGlmIEBjb21tb24udHlwZSA9PSAlRldfQ0RFVl9FVkVOVF9SRVFVRVNUCiAgKiBAaXNvX2ludGVycnVwdDogVmFsaWQgaWYgQGNvbW1vbi50eXBlID09ICVGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFQKICAqCi0gKiBDb252ZW5pZW5jZSB1bmlvbiBmb3IgdXNlcnNwYWNlIHVzZS4gIEV2ZW50cyBjb3VsZCBiZSByZWFkKDIpIGludG8gYSBjaGFyCi0gKiBidWZmZXIgYW5kIHRoZW4gY2FzdCB0byB0aGlzIHVuaW9uIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuCisgKiBDb252ZW5pZW5jZSB1bmlvbiBmb3IgdXNlcnNwYWNlIHVzZS4gIEV2ZW50cyBjb3VsZCBiZSByZWFkKDIpIGludG8gYW4KKyAqIGFwcHJvcHJpYXRlbHkgYWxpZ25lZCBjaGFyIGJ1ZmZlciBhbmQgdGhlbiBjYXN0IHRvIHRoaXMgdW5pb24gZm9yIGZ1cnRoZXIKKyAqIHByb2Nlc3NpbmcuICBOb3RlIHRoYXQgZm9yIGEgcmVxdWVzdCwgcmVzcG9uc2Ugb3IgaXNvX2ludGVycnVwdCBldmVudCwKKyAqIHRoZSBkYXRhW10gb3IgaGVhZGVyW10gbWF5IG1ha2UgdGhlIHNpemUgb2YgdGhlIGZ1bGwgZXZlbnQgbGFyZ2VyIHRoYW4KKyAqIHNpemVvZih1bmlvbiBmd19jZGV2X2V2ZW50KS4gIEFsc28gbm90ZSB0aGF0IGlmIHlvdSBhdHRlbXB0IHRvIHJlYWQoMikKKyAqIGFuIGV2ZW50IGludG8gYSBidWZmZXIgdGhhdCBpcyBub3QgbGFyZ2UgZW5vdWdoIGZvciBpdCwgdGhlIGRhdGEgdGhhdCBkb2VzCisgKiBub3QgZml0IHdpbGwgYmUgZGlzY2FyZGVkIHNvIHRoYXQgdGhlIG5leHQgcmVhZCgyKSB3aWxsIHJldHVybiBhIG5ldyBldmVudC4KICAqLwogdW5pb24gZndfY2Rldl9ldmVudCB7CiAJc3RydWN0IGZ3X2NkZXZfZXZlbnRfY29tbW9uIGNvbW1vbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnJlZXplci5oIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKaW5kZXggZGVkZGVlZC4uOGYyMjUzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKLSNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKyNpZmRlZiBDT05GSUdfRlJFRVpFUgogLyoKICAqIENoZWNrIGlmIGEgcHJvY2VzcyBoYXMgYmVlbiBmcm96ZW4KICAqLwpAQCAtMzksMjggKzM5LDE4IEBACiAJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHAsIFRJRl9GUkVFWkUpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3NlbmRfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlyZXR1cm4gIShwLT5mbGFncyAmIFBGX0ZSRUVaRVJfTk9TSUcpOworfQorCiAvKgogICogV2FrZSB1cCBhIGZyb3plbiBwcm9jZXNzCi0gKgotICogdGFza19sb2NrKCkgaXMgdGFrZW4gdG8gcHJldmVudCB0aGUgcmFjZSB3aXRoIHJlZnJpZ2VyYXRvcigpIHdoaWNoIG1heQotICogb2NjdXIgaWYgdGhlIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxzLiAgTmFtZWx5LCB3aXRob3V0IHRoZSBsb2NrLCBpZiB0aGUKLSAqIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxlZCwgdGhhd190YXNrcygpIG1pZ2h0IGhhdmUgcnVuIGJlZm9yZSBhIHRhc2sgaW4KLSAqIHJlZnJpZ2VyYXRvcigpIGNvdWxkIGNhbGwgZnJvemVuX3Byb2Nlc3MoKSwgaW4gd2hpY2ggY2FzZSB0aGUgdGFzayB3b3VsZCBiZQotICogZnJvemVuIGFuZCBubyBvbmUgd291bGQgdGhhdyBpdC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQl0YXNrX2xvY2socCk7Ci0JaWYgKGZyb3plbihwKSkgewotCQlwLT5mbGFncyAmPSB+UEZfRlJPWkVOOwotCQl0YXNrX3VubG9jayhwKTsKLQkJd2FrZV91cF9wcm9jZXNzKHApOwotCQlyZXR1cm4gMTsKLQl9Ci0JY2xlYXJfZnJlZXplX2ZsYWcocCk7Ci0JdGFza191bmxvY2socCk7Ci0JcmV0dXJuIDA7Ci19CitleHRlcm4gaW50IF9fdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKy8qIFRha2VzIGFuZCByZWxlYXNlcyB0YXNrIGFsbG9jIGxvY2sgdXNpbmcgdGFza19sb2NrKCkgKi8KK2V4dGVybiBpbnQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAKIGV4dGVybiB2b2lkIHJlZnJpZ2VyYXRvcih2b2lkKTsKIGV4dGVybiBpbnQgZnJlZXplX3Byb2Nlc3Nlcyh2b2lkKTsKQEAgLTc1LDYgKzY1LDE1IEBACiAJCXJldHVybiAwOwogfQogCitleHRlcm4gYm9vbCBmcmVlemVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgc2lnX29ubHkpOworZXh0ZXJuIHZvaWQgY2FuY2VsX2ZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKyNpZmRlZiBDT05GSUdfQ0dST1VQX0ZSRUVaRVIKK2V4dGVybiBpbnQgY2dyb3VwX2Zyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworI2Vsc2UgLyogIUNPTkZJR19DR1JPVVBfRlJFRVpFUiAqLworc3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2Zyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spIHsgcmV0dXJuIDA7IH0KKyNlbmRpZiAvKiAhQ09ORklHX0NHUk9VUF9GUkVFWkVSICovCisKIC8qCiAgKiBUaGUgUEZfRlJFRVpFUl9TS0lQIGZsYWcgc2hvdWxkIGJlIHNldCBieSBhIHZmb3JrIHBhcmVudCByaWdodCBiZWZvcmUgaXQKICAqIGNhbGxzIHdhaXRfZm9yX2NvbXBsZXRpb24oJnZmb3JrKSBhbmQgcmVzZXQgcmlnaHQgYWZ0ZXIgaXQgcmV0dXJucyBmcm9tIHRoaXMKQEAgLTE2Niw3ICsxNjUsNyBAQAogCX0gd2hpbGUgKHRyeV90b19mcmVlemUoKSk7CQkJCQlcCiAJX19yZXR2YWw7CQkJCQkJCVwKIH0pCi0jZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCisjZWxzZSAvKiAhQ09ORklHX0ZSRUVaRVIgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGZyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIHNldF9mcmVlemVfZmxhZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9CkBAIC0xOTEsNiArMTkwLDYgQEAKICNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkJXAogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQogCi0jZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLworI2VuZGlmIC8qICFDT05GSUdfRlJFRVpFUiAqLwogCiAjZW5kaWYJLyogRlJFRVpFUl9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggNDRlM2NiMi4uYTZhNjI1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtOTQ3LDYgKzk0NywxNCBAQAogCWludCAoKmZsX2NoYW5nZSkoc3RydWN0IGZpbGVfbG9jayAqKiwgaW50KTsKIH07CiAKK3N0cnVjdCBsb2NrX21hbmFnZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3ZvaWQgbG9ja3Nfc3RhcnRfZ3JhY2Uoc3RydWN0IGxvY2tfbWFuYWdlciAqKTsKK3ZvaWQgbG9ja3NfZW5kX2dyYWNlKHN0cnVjdCBsb2NrX21hbmFnZXIgKik7CitpbnQgbG9ja3NfaW5fZ3JhY2Uodm9pZCk7CisKIC8qIHRoYXQgd2lsbCBkaWUgLSB3ZSBuZWVkIGl0IGZvciBuZnNfbG9ja19pbmZvICovCiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzX2kuaD4KIApAQCAtOTg4LDYgKzk5NiwxMyBAQAogCiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KIAorZXh0ZXJuIHZvaWQgc2VuZF9zaWdpbyhzdHJ1Y3QgZm93bl9zdHJ1Y3QgKmZvd24sIGludCBmZCwgaW50IGJhbmQpOworCisvKiBmcy9zeW5jLmMgKi8KK2V4dGVybiBpbnQgZG9fc3luY19tYXBwaW5nX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgb2Zmc2V0LAorCQkJbG9mZl90IGVuZGJ5dGUsIHVuc2lnbmVkIGludCBmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfRklMRV9MT0NLSU5HCiBleHRlcm4gaW50IGZjbnRsX2dldGxrKHN0cnVjdCBmaWxlICosIHN0cnVjdCBmbG9jayBfX3VzZXIgKik7CiBleHRlcm4gaW50IGZjbnRsX3NldGxrKHVuc2lnbmVkIGludCwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAogCQkJc3RydWN0IGZsb2NrIF9fdXNlciAqKTsKQEAgLTk5OCwxNCArMTAxMyw5IEBACiAJCQlzdHJ1Y3QgZmxvY2s2NCBfX3VzZXIgKik7CiAjZW5kaWYKIAotZXh0ZXJuIHZvaWQgc2VuZF9zaWdpbyhzdHJ1Y3QgZm93bl9zdHJ1Y3QgKmZvd24sIGludCBmZCwgaW50IGJhbmQpOwogZXh0ZXJuIGludCBmY250bF9zZXRsZWFzZSh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBsb25nIGFyZyk7CiBleHRlcm4gaW50IGZjbnRsX2dldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwKTsKIAotLyogZnMvc3luYy5jICovCi1leHRlcm4gaW50IGRvX3N5bmNfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IG9mZnNldCwKLQkJCWxvZmZfdCBlbmRieXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotCiAvKiBmcy9sb2Nrcy5jICovCiBleHRlcm4gdm9pZCBsb2Nrc19pbml0X2xvY2soc3RydWN0IGZpbGVfbG9jayAqKTsKIGV4dGVybiB2b2lkIGxvY2tzX2NvcHlfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICosIHN0cnVjdCBmaWxlX2xvY2sgKik7CkBAIC0xMDI4LDYgKzEwMzgsMzcgQEAKIGV4dGVybiBpbnQgbG9ja19tYXlfcmVhZChzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIGV4dGVybiBpbnQgbG9ja19tYXlfd3JpdGUoc3RydWN0IGlub2RlICosIGxvZmZfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CiBleHRlcm4gc3RydWN0IHNlcV9vcGVyYXRpb25zIGxvY2tzX3NlcV9vcGVyYXRpb25zOworI2Vsc2UgLyogIUNPTkZJR19GSUxFX0xPQ0tJTkcgKi8KKyNkZWZpbmUgZmNudGxfZ2V0bGsoYSwgYikgKHsgLUVJTlZBTDsgfSkKKyNkZWZpbmUgZmNudGxfc2V0bGsoYSwgYiwgYywgZCkgKHsgLUVBQ0NFUzsgfSkKKyNpZiBCSVRTX1BFUl9MT05HID09IDMyCisjZGVmaW5lIGZjbnRsX2dldGxrNjQoYSwgYikgKHsgLUVJTlZBTDsgfSkKKyNkZWZpbmUgZmNudGxfc2V0bGs2NChhLCBiLCBjLCBkKSAoeyAtRUFDQ0VTOyB9KQorI2VuZGlmCisjZGVmaW5lIGZjbnRsX3NldGxlYXNlKGEsIGIsIGMpICh7IDA7IH0pCisjZGVmaW5lIGZjbnRsX2dldGxlYXNlKGEpICh7IDA7IH0pCisjZGVmaW5lIGxvY2tzX2luaXRfbG9jayhhKSAoeyB9KQorI2RlZmluZSBfX2xvY2tzX2NvcHlfbG9jayhhLCBiKSAoeyB9KQorI2RlZmluZSBsb2Nrc19jb3B5X2xvY2soYSwgYikgKHsgfSkKKyNkZWZpbmUgbG9ja3NfcmVtb3ZlX3Bvc2l4KGEsIGIpICh7IH0pCisjZGVmaW5lIGxvY2tzX3JlbW92ZV9mbG9jayhhKSAoeyB9KQorI2RlZmluZSBwb3NpeF90ZXN0X2xvY2soYSwgYikgKHsgMDsgfSkKKyNkZWZpbmUgcG9zaXhfbG9ja19maWxlKGEsIGIsIGMpICh7IC1FTk9MQ0s7IH0pCisjZGVmaW5lIHBvc2l4X2xvY2tfZmlsZV93YWl0KGEsIGIpICh7IC1FTk9MQ0s7IH0pCisjZGVmaW5lIHBvc2l4X3VuYmxvY2tfbG9jayhhLCBiKSAoLUVOT0VOVCkKKyNkZWZpbmUgdmZzX3Rlc3RfbG9jayhhLCBiKSAoeyAwOyB9KQorI2RlZmluZSB2ZnNfbG9ja19maWxlKGEsIGIsIGMsIGQpICgtRU5PTENLKQorI2RlZmluZSB2ZnNfY2FuY2VsX2xvY2soYSwgYikgKHsgMDsgfSkKKyNkZWZpbmUgZmxvY2tfbG9ja19maWxlX3dhaXQoYSwgYikgKHsgLUVOT0xDSzsgfSkKKyNkZWZpbmUgX19icmVha19sZWFzZShhLCBiKSAoeyAwOyB9KQorI2RlZmluZSBsZWFzZV9nZXRfbXRpbWUoYSwgYikgKHsgfSkKKyNkZWZpbmUgZ2VuZXJpY19zZXRsZWFzZShhLCBiLCBjKSAoeyAtRUlOVkFMOyB9KQorI2RlZmluZSB2ZnNfc2V0bGVhc2UoYSwgYiwgYykgKHsgLUVJTlZBTDsgfSkKKyNkZWZpbmUgbGVhc2VfbW9kaWZ5KGEsIGIpICh7IC1FSU5WQUw7IH0pCisjZGVmaW5lIGxvY2tfbWF5X3JlYWQoYSwgYiwgYykgKHsgMTsgfSkKKyNkZWZpbmUgbG9ja19tYXlfd3JpdGUoYSwgYiwgYykgKHsgMTsgfSkKKyNlbmRpZiAvKiAhQ09ORklHX0ZJTEVfTE9DS0lORyAqLworCiAKIHN0cnVjdCBmYXN5bmNfc3RydWN0IHsKIAlpbnQJbWFnaWM7CkBAIC0xNTc1LDkgKzE2MTYsMTIgQEAKIC8qIC9zeXMvZnMgKi8KIGV4dGVybiBzdHJ1Y3Qga29iamVjdCAqZnNfa29iajsKIAorZXh0ZXJuIGludCByd192ZXJpZnlfYXJlYShpbnQsIHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLCBzaXplX3QpOworCiAjZGVmaW5lIEZMT0NLX1ZFUklGWV9SRUFEICAxCiAjZGVmaW5lIEZMT0NLX1ZFUklGWV9XUklURSAyCiAKKyNpZmRlZiBDT05GSUdfRklMRV9MT0NLSU5HCiBleHRlcm4gaW50IGxvY2tzX21hbmRhdG9yeV9sb2NrZWQoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBsb2Nrc19tYW5kYXRvcnlfYXJlYShpbnQsIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIHNpemVfdCk7CiAKQEAgLTE2MDgsOCArMTY1Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWV4dGVybiBpbnQgcndfdmVyaWZ5X2FyZWEoaW50LCBzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc2l6ZV90KTsKLQogc3RhdGljIGlubGluZSBpbnQgbG9ja3NfdmVyaWZ5X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxwLAogCQkJCSAgICBsb2ZmX3Qgc2l6ZSkKQEAgLTE2MzAsNiArMTY3MiwxNSBAQAogCQlyZXR1cm4gX19icmVha19sZWFzZShpbm9kZSwgbW9kZSk7CiAJcmV0dXJuIDA7CiB9CisjZWxzZSAvKiAhQ09ORklHX0ZJTEVfTE9DS0lORyAqLworI2RlZmluZSBsb2Nrc19tYW5kYXRvcnlfbG9ja2VkKGEpICh7IDA7IH0pCisjZGVmaW5lIGxvY2tzX21hbmRhdG9yeV9hcmVhKGEsIGIsIGMsIGQsIGUpICh7IDA7IH0pCisjZGVmaW5lIF9fbWFuZGF0b3J5X2xvY2soYSkgKHsgMDsgfSkKKyNkZWZpbmUgbWFuZGF0b3J5X2xvY2soYSkgKHsgMDsgfSkKKyNkZWZpbmUgbG9ja3NfdmVyaWZ5X2xvY2tlZChhKSAoeyAwOyB9KQorI2RlZmluZSBsb2Nrc192ZXJpZnlfdHJ1bmNhdGUoYSwgYiwgYykgKHsgMDsgfSkKKyNkZWZpbmUgYnJlYWtfbGVhc2UoYSwgYikgKHsgMDsgfSkKKyNlbmRpZiAvKiBDT05GSUdfRklMRV9MT0NLSU5HICovCiAKIC8qIGZzL29wZW4uYyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z1c2UuaCBiL2luY2x1ZGUvbGludXgvZnVzZS5oCmluZGV4IDI2NTYzNWQuLjM1MGZlOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnVzZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnVzZS5oCkBAIC0xNyw4ICsxNywxNCBAQAogICogIC0gYWRkIGxvY2tfb3duZXIgZmllbGQgdG8gZnVzZV9zZXRhdHRyX2luLCBmdXNlX3JlYWRfaW4gYW5kIGZ1c2Vfd3JpdGVfaW4KICAqICAtIGFkZCBibGtzaXplIGZpZWxkIHRvIGZ1c2VfYXR0cgogICogIC0gYWRkIGZpbGUgZmxhZ3MgZmllbGQgdG8gZnVzZV9yZWFkX2luIGFuZCBmdXNlX3dyaXRlX2luCisgKgorICogNy4xMAorICogIC0gYWRkIG5vbnNlZWthYmxlIG9wZW4gZmxhZwogICovCiAKKyNpZm5kZWYgX0xJTlVYX0ZVU0VfSAorI2RlZmluZSBfTElOVVhfRlVTRV9ICisKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogCkBAIC0yNiw3ICszMiw3IEBACiAjZGVmaW5lIEZVU0VfS0VSTkVMX1ZFUlNJT04gNwogCiAvKiogTWlub3IgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiA5CisjZGVmaW5lIEZVU0VfS0VSTkVMX01JTk9SX1ZFUlNJT04gMTAKIAogLyoqIFRoZSBub2RlIElEIG9mIHRoZSByb290IGlub2RlICovCiAjZGVmaW5lIEZVU0VfUk9PVF9JRCAxCkBAIC05OCw5ICsxMDQsMTEgQEAKICAqCiAgKiBGT1BFTl9ESVJFQ1RfSU86IGJ5cGFzcyBwYWdlIGNhY2hlIGZvciB0aGlzIG9wZW4gZmlsZQogICogRk9QRU5fS0VFUF9DQUNIRTogZG9uJ3QgaW52YWxpZGF0ZSB0aGUgZGF0YSBjYWNoZSBvbiBvcGVuCisgKiBGT1BFTl9OT05TRUVLQUJMRTogdGhlIGZpbGUgaXMgbm90IHNlZWthYmxlCiAgKi8KICNkZWZpbmUgRk9QRU5fRElSRUNUX0lPCQkoMSA8PCAwKQogI2RlZmluZSBGT1BFTl9LRUVQX0NBQ0hFCSgxIDw8IDEpCisjZGVmaW5lIEZPUEVOX05PTlNFRUtBQkxFCSgxIDw8IDIpCiAKIC8qKgogICogSU5JVCByZXF1ZXN0L3JlcGx5IGZsYWdzCkBAIC00MDksMyArNDE3LDUgQEAKICNkZWZpbmUgRlVTRV9ESVJFTlRfQUxJR04oeCkgKCgoeCkgKyBzaXplb2YoX191NjQpIC0gMSkgJiB+KHNpemVvZihfX3U2NCkgLSAxKSkKICNkZWZpbmUgRlVTRV9ESVJFTlRfU0laRShkKSBcCiAJRlVTRV9ESVJFTlRfQUxJR04oRlVTRV9OQU1FX09GRlNFVCArIChkKS0+bmFtZWxlbikKKworI2VuZGlmIC8qIF9MSU5VWF9GVVNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaCBiL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaAppbmRleCBmNjRlMjljLi4wY2Q4MjVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oCkBAIC0xNDYsMTAgKzE0NiwxMSBAQAogCW11dGV4X3VubG9jaygmZ2FtZXBvcnQtPmRydl9tdXRleCk7CiB9CiAKLXZvaWQgX19nYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lcik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydikKK2ludCBfX2dhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYsCisJCQkJc3RydWN0IG1vZHVsZSAqb3duZXIsIGNvbnN0IGNoYXIgKm1vZF9uYW1lKTsKK3N0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjayBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2KQogewotCV9fZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKGRydiwgVEhJU19NT0RVTEUpOworCXJldHVybiBfX2dhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcihkcnYsIFRISVNfTU9EVUxFLCBLQlVJTERfTU9ETkFNRSk7CiB9CiAKIHZvaWQgZ2FtZXBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9ncGlvLmgKaW5kZXggNzMwYTIwYi4uZTEwYzQ5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ncGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9ncGlvLmgKQEAgLTgsNiArOCw3IEBACiAKICNlbHNlCiAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKQEAgLTMyLDYgKzMzLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQogeworCW1pZ2h0X3NsZWVwKCk7CisKIAkvKiBHUElPIGNhbiBuZXZlciBoYXZlIGJlZW4gcmVxdWVzdGVkICovCiAJV0FSTl9PTigxKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlkLmggYi9pbmNsdWRlL2xpbnV4L2hpZC5oCmluZGV4IGFjNGU2NzguLmYxM2JjYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWQuaApAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4gLyogaGlkX2RldmljZV9pZCAqLwogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KQEAgLTI0Niw2ICsyNDcsMTkgQEAKICNkZWZpbmUgSElEX0ZFQVRVUkVfUkVQT1JUCTIKIAogLyoKKyAqIEhJRCBjb25uZWN0IHJlcXVlc3RzCisgKi8KKworI2RlZmluZSBISURfQ09OTkVDVF9ISURJTlBVVAkJMHgwMQorI2RlZmluZSBISURfQ09OTkVDVF9ISURJTlBVVF9GT1JDRQkweDAyCisjZGVmaW5lIEhJRF9DT05ORUNUX0hJRFJBVwkJMHgwNAorI2RlZmluZSBISURfQ09OTkVDVF9ISURERVYJCTB4MDgKKyNkZWZpbmUgSElEX0NPTk5FQ1RfSElEREVWX0ZPUkNFCTB4MTAKKyNkZWZpbmUgSElEX0NPTk5FQ1RfRkYJCQkweDIwCisjZGVmaW5lIEhJRF9DT05ORUNUX0RFRkFVTFQJKEhJRF9DT05ORUNUX0hJRElOUFVUfEhJRF9DT05ORUNUX0hJRFJBV3wgXAorCQlISURfQ09OTkVDVF9ISURERVZ8SElEX0NPTk5FQ1RfRkYpCisKKy8qCiAgKiBISUQgZGV2aWNlIHF1aXJrcy4KICAqLwogCkBAIC0yNTYsNDggKzI3MCwxMSBAQAogCiAjZGVmaW5lIEhJRF9RVUlSS19JTlZFUlQJCQkweDAwMDAwMDAxCiAjZGVmaW5lIEhJRF9RVUlSS19OT1RPVUNICQkJMHgwMDAwMDAwMgotI2RlZmluZSBISURfUVVJUktfSUdOT1JFCQkJMHgwMDAwMDAwNAogI2RlZmluZSBISURfUVVJUktfTk9HRVQJCQkJMHgwMDAwMDAwOAotI2RlZmluZSBISURfUVVJUktfSElEREVWCQkJMHgwMDAwMDAxMAogI2RlZmluZSBISURfUVVJUktfQkFEUEFECQkJMHgwMDAwMDAyMAogI2RlZmluZSBISURfUVVJUktfTVVMVElfSU5QVVQJCQkweDAwMDAwMDQwCi0jZGVmaW5lIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS183CQkweDAwMDAwMDgwCi0jZGVmaW5lIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS181CQkweDAwMDAwMTAwCi0jZGVmaW5lIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS19PTgkJMHgwMDAwMDIwMAotI2RlZmluZSBISURfUVVJUktfTUlHSFRZTU9VU0UJCQkweDAwMDAwNDAwCi0jZGVmaW5lIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4JCQkweDAwMDAwODAwCi0jZGVmaW5lIEhJRF9RVUlSS19BUFBMRV9GTl9PTgkJCTB4MDAwMDEwMDAKLSNkZWZpbmUgSElEX1FVSVJLX0lOVkVSVF9IV0hFRUwJCQkweDAwMDAyMDAwCi0jZGVmaW5lIEhJRF9RVUlSS19BUFBMRV9JU09fS0VZQk9BUkQJCTB4MDAwMDQwMDAKLSNkZWZpbmUgSElEX1FVSVJLX0JBRF9SRUxBVElWRV9LRVlTCQkweDAwMDA4MDAwCiAjZGVmaW5lIEhJRF9RVUlSS19TS0lQX09VVFBVVF9SRVBPUlRTCQkweDAwMDEwMDAwCi0jZGVmaW5lIEhJRF9RVUlSS19JR05PUkVfTU9VU0UJCQkweDAwMDIwMDAwCi0jZGVmaW5lIEhJRF9RVUlSS19TT05ZX1BTM19DT05UUk9MTEVSCQkweDAwMDQwMDAwCi0jZGVmaW5lIEhJRF9RVUlSS19EVVBMSUNBVEVfVVNBR0VTCQkweDAwMDgwMDAwCi0jZGVmaW5lIEhJRF9RVUlSS19SRVNFVF9MRURTCQkJMHgwMDEwMDAwMAotI2RlZmluZSBISURfUVVJUktfSElESU5QVVQJCQkweDAwMjAwMDAwCi0jZGVmaW5lIEhJRF9RVUlSS19MT0dJVEVDSF9JR05PUkVfRE9VQkxFRF9XSEVFTAkweDAwNDAwMDAwCi0jZGVmaW5lIEhJRF9RVUlSS19MT0dJVEVDSF9FWFBBTkRFRF9LRVlNQVAJMHgwMDgwMDAwMAotI2RlZmluZSBISURfUVVJUktfSUdOT1JFX0hJRElOUFVUCQkweDAxMDAwMDAwCi0jZGVmaW5lIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS19COAkJMHgwMjAwMDAwMAotI2RlZmluZSBISURfUVVJUktfSFdIRUVMX1dIRUVMX0lOVkVSVAkJMHgwNDAwMDAwMAotI2RlZmluZSBISURfUVVJUktfTUlDUk9TT0ZUX0tFWVMJCTB4MDgwMDAwMDAKICNkZWZpbmUgSElEX1FVSVJLX0ZVTExTUEVFRF9JTlRFUlZBTAkJMHgxMDAwMDAwMAotI2RlZmluZSBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04JMHgyMDAwMDAwMAotCi0vKgotICogU2VwYXJhdGUgcXVpcmtzIGZvciBydW50aW1lIHJlcG9ydCBkZXNjcmlwdG9yIGZpeHVwCi0gKi8KLQotI2RlZmluZSBISURfUVVJUktfUkRFU0NfQ1lNT1RJT04JCTB4MDAwMDAwMDEKLSNkZWZpbmUgSElEX1FVSVJLX1JERVNDX0xPR0lURUNICQkweDAwMDAwMDAyCi0jZGVmaW5lIEhJRF9RVUlSS19SREVTQ19TV0FQUEVEX01JTl9NQVgJCTB4MDAwMDAwMDQKLSNkZWZpbmUgSElEX1FVSVJLX1JERVNDX1BFVEFMWU5YCQkweDAwMDAwMDA4Ci0jZGVmaW5lIEhJRF9RVUlSS19SREVTQ19NQUNCT09LX0pJUwkJMHgwMDAwMDAxMAotI2RlZmluZSBISURfUVVJUktfUkRFU0NfQlVUVE9OX0NPTlNVTUVSCQkweDAwMDAwMDIwCi0jZGVmaW5lIEhJRF9RVUlSS19SREVTQ19TQU1TVU5HX1JFTU9URQkJMHgwMDAwMDA0MAotI2RlZmluZSBISURfUVVJUktfUkRFU0NfTUlDUk9TT0ZUX1JFQ1ZfMTAyOAkweDAwMDAwMDgwCi0jZGVmaW5lIEhJRF9RVUlSS19SREVTQ19TVU5QTFVTX1dERVNLVE9QCTB4MDAwMDAxMDAKIAogLyoKICAqIFRoaXMgaXMgdGhlIGdsb2JhbCBlbnZpcm9ubWVudCBvZiB0aGUgcGFyc2VyLiBUaGlzIGluZm9ybWF0aW9uIGlzCkBAIC00MTEsMTIgKzM4OCwyMSBAQAogc3RydWN0IGhpZF9jb250cm9sX2ZpZm8gewogCXVuc2lnbmVkIGNoYXIgZGlyOwogCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJY2hhciAqcmF3X3JlcG9ydDsKK307CisKK3N0cnVjdCBoaWRfb3V0cHV0X2ZpZm8geworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJY2hhciAqcmF3X3JlcG9ydDsKIH07CiAKICNkZWZpbmUgSElEX0NMQUlNRURfSU5QVVQJMQogI2RlZmluZSBISURfQ0xBSU1FRF9ISURERVYJMgogI2RlZmluZSBISURfQ0xBSU1FRF9ISURSQVcJNAogCisjZGVmaW5lIEhJRF9TVEFUX0FEREVECQkxCisjZGVmaW5lIEhJRF9TVEFUX1BBUlNFRAkJMgorCiAjZGVmaW5lIEhJRF9DVFJMX1JVTk5JTkcJMQogI2RlZmluZSBISURfT1VUX1JVTk5JTkcJCTIKICNkZWZpbmUgSElEX0lOX1JVTk5JTkcJCTMKQEAgLTQzMSwyMiArNDE3LDI4IEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiB9OwogCitzdHJ1Y3QgaGlkX2RyaXZlcjsKK3N0cnVjdCBoaWRfbGxfZHJpdmVyOworCiBzdHJ1Y3QgaGlkX2RldmljZSB7CQkJCQkJCS8qIGRldmljZSByZXBvcnQgZGVzY3JpcHRvciAqLwotCSBfX3U4ICpyZGVzYzsKKwlfX3U4ICpyZGVzYzsKIAl1bnNpZ25lZCByc2l6ZTsKIAlzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24gKmNvbGxlY3Rpb247CQkJCS8qIExpc3Qgb2YgSElEIGNvbGxlY3Rpb25zICovCiAJdW5zaWduZWQgY29sbGVjdGlvbl9zaXplOwkJCQkJLyogTnVtYmVyIG9mIGFsbG9jYXRlZCBoaWRfY29sbGVjdGlvbnMgKi8KIAl1bnNpZ25lZCBtYXhjb2xsZWN0aW9uOwkJCQkJCS8qIE51bWJlciBvZiBwYXJzZWQgY29sbGVjdGlvbnMgKi8KIAl1bnNpZ25lZCBtYXhhcHBsaWNhdGlvbjsJCQkJCS8qIE51bWJlciBvZiBhcHBsaWNhdGlvbnMgKi8KLQl1bnNpZ25lZCBzaG9ydCBidXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQlVTIElEICovCi0JdW5zaWduZWQgc2hvcnQgdmVuZG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZlbmRvciBJRCAqLwotCXVuc2lnbmVkIHNob3J0IHByb2R1Y3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9kdWN0IElEICovCi0JdW5zaWduZWQgdmVyc2lvbjsJCQkJCQkvKiBISUQgdmVyc2lvbiAqLworCV9fdTE2IGJ1czsJCQkJCQkJLyogQlVTIElEICovCisJX191MzIgdmVuZG9yOwkJCQkJCQkvKiBWZW5kb3IgSUQgKi8KKwlfX3UzMiBwcm9kdWN0OwkJCQkJCQkvKiBQcm9kdWN0IElEICovCisJX191MzIgdmVyc2lvbjsJCQkJCQkJLyogSElEIHZlcnNpb24gKi8KIAl1bnNpZ25lZCBjb3VudHJ5OwkJCQkJCS8qIEhJRCBjb3VudHJ5ICovCiAJc3RydWN0IGhpZF9yZXBvcnRfZW51bSByZXBvcnRfZW51bVtISURfUkVQT1JUX1RZUEVTXTsKIAotCXN0cnVjdCBkZXZpY2UgKmRldjsJCQkJCQkvKiBkZXZpY2UgKi8KKwlzdHJ1Y3QgZGV2aWNlIGRldjsJCQkJCQkvKiBkZXZpY2UgKi8KKwlzdHJ1Y3QgaGlkX2RyaXZlciAqZHJpdmVyOworCXN0cnVjdCBoaWRfbGxfZHJpdmVyICpsbF9kcml2ZXI7CiAKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwkJCQkJCS8qIHNlZSBTVEFUIGZsYWdzIGFib3ZlICovCiAJdW5zaWduZWQgY2xhaW1lZDsJCQkJCQkvKiBDbGFpbWVkIGJ5IGhpZGlucHV0LCBoaWRkZXY/ICovCiAJdW5zaWduZWQgcXVpcmtzOwkJCQkJCS8qIFZhcmlvdXMgcXVpcmtzIHRoZSBkZXZpY2UgY2FuIHB1bGwgb24gdXMgKi8KIApAQCAtNDYyLDI2ICs0NTQsMjkgQEAKIAogCXZvaWQgKmRyaXZlcl9kYXRhOwogCi0JX19zMzIgZGVsYXllZF92YWx1ZTsJCQkJCQkvKiBGb3IgQTQgVGVjaCBtaWNlIGh3aGVlbCBxdWlyayAqLwotCi0JLyogZGV2aWNlLXNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXJzICovCi0JaW50ICgqaGlkaW5wdXRfaW5wdXRfZXZlbnQpIChzdHJ1Y3QgaW5wdXRfZGV2ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBpbnQpOwotCWludCAoKmhpZF9vcGVuKSAoc3RydWN0IGhpZF9kZXZpY2UgKik7Ci0Jdm9pZCAoKmhpZF9jbG9zZSkgKHN0cnVjdCBoaWRfZGV2aWNlICopOworCS8qIHRlbXBvcmFyeSBoaWRfZmYgaGFuZGxpbmcgKHVudGlsIG1vdmVkIHRvIHRoZSBkcml2ZXJzKSAqLworCWludCAoKmZmX2luaXQpKHN0cnVjdCBoaWRfZGV2aWNlICopOwogCiAJLyogaGlkZGV2IGV2ZW50IGhhbmRsZXIgKi8KKwlpbnQgKCpoaWRkZXZfY29ubmVjdCkoc3RydWN0IGhpZF9kZXZpY2UgKiwgdW5zaWduZWQgaW50KTsKIAl2b2lkICgqaGlkZGV2X2hpZF9ldmVudCkgKHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAogCQkJCSAgc3RydWN0IGhpZF91c2FnZSAqLCBfX3MzMik7CiAJdm9pZCAoKmhpZGRldl9yZXBvcnRfZXZlbnQpIChzdHJ1Y3QgaGlkX2RldmljZSAqLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqKTsKIAogCS8qIGhhbmRsZXIgZm9yIHJhdyBvdXRwdXQgZGF0YSwgdXNlZCBieSBoaWRyYXcgKi8KIAlpbnQgKCpoaWRfb3V0cHV0X3Jhd19yZXBvcnQpIChzdHJ1Y3QgaGlkX2RldmljZSAqLCBfX3U4ICosIHNpemVfdCk7Ci0jaWZkZWYgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sKLQl1bnNpZ25lZCBsb25nIGFwcGxlX3ByZXNzZWRfZm5bQklUU19UT19MT05HUyhLRVlfQ05UKV07Ci0JdW5zaWduZWQgbG9uZyBwYl9wcmVzc2VkX251bWxvY2tbQklUU19UT19MT05HUyhLRVlfQ05UKV07Ci0jZW5kaWYKIH07CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCAqaGlkX2dldF9kcnZkYXRhKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoJmhkZXYtPmRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWRfc2V0X2RydmRhdGEoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHZvaWQgKmRhdGEpCit7CisJZGV2X3NldF9kcnZkYXRhKCZoZGV2LT5kZXYsIGRhdGEpOworfQorCiAjZGVmaW5lIEhJRF9HTE9CQUxfU1RBQ0tfU0laRSA0CiAjZGVmaW5lIEhJRF9DT0xMRUNUSU9OX1NUQUNLX1NJWkUgNAogCkBAIC01MTAsNiArNTA1LDEwNyBAQAogCXN0cnVjdCBoaWRfY2xhc3NfZGVzY3JpcHRvciBkZXNjWzFdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgSElEX0RFVklDRShiLCB2ZW4sIHByb2QpIFwKKwkuYnVzID0gKGIpLCBcCisJLnZlbmRvciA9ICh2ZW4pLCAucHJvZHVjdCA9IChwcm9kKQorCisjZGVmaW5lIEhJRF9VU0JfREVWSUNFKHZlbiwgcHJvZCkJSElEX0RFVklDRShCVVNfVVNCLCB2ZW4sIHByb2QpCisjZGVmaW5lIEhJRF9CTFVFVE9PVEhfREVWSUNFKHZlbiwgcHJvZCkJSElEX0RFVklDRShCVVNfQkxVRVRPT1RILCB2ZW4sIHByb2QpCisKKyNkZWZpbmUgSElEX1JFUE9SVF9JRChyZXApIFwKKwkucmVwb3J0X3R5cGUgPSAocmVwKQorI2RlZmluZSBISURfVVNBR0VfSUQodWhpZCwgdXR5cGUsIHVjb2RlKSBcCisJLnVzYWdlX2hpZCA9ICh1aGlkKSwgLnVzYWdlX3R5cGUgPSAodXR5cGUpLCAudXNhZ2VfY29kZSA9ICh1Y29kZSkKKy8qIHdlIGRvbid0IHdhbnQgdG8gY2F0Y2ggdHlwZXMgYW5kIGNvZGVzIGVxdWFsIHRvIDAgKi8KKyNkZWZpbmUgSElEX1RFUk1JTkFUT1IJCShISURfQU5ZX0lEIC0gMSkKKworc3RydWN0IGhpZF9yZXBvcnRfaWQgeworCV9fdTMyIHJlcG9ydF90eXBlOworfTsKK3N0cnVjdCBoaWRfdXNhZ2VfaWQgeworCV9fdTMyIHVzYWdlX2hpZDsKKwlfX3UzMiB1c2FnZV90eXBlOworCV9fdTMyIHVzYWdlX2NvZGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBoaWRfZHJpdmVyCisgKiBAbmFtZTogZHJpdmVyIG5hbWUgKGUuZy4gIkZvb3RlY2hfYmFyLXdoZWVsIikKKyAqIEBpZF90YWJsZTogd2hpY2ggZGV2aWNlcyBpcyB0aGlzIGRyaXZlciBmb3IgKG11c3QgYmUgbm9uLU5VTEwgZm9yIHByb2JlCisgKiAJICAgICAgdG8gYmUgY2FsbGVkKQorICogQHByb2JlOiBuZXcgZGV2aWNlIGluc2VydGVkCisgKiBAcmVtb3ZlOiBkZXZpY2UgcmVtb3ZlZCAoTlVMTCBpZiBub3QgYSBob3QtcGx1ZyBjYXBhYmxlIGRyaXZlcikKKyAqIEByZXBvcnRfdGFibGU6IG9uIHdoaWNoIHJlcG9ydHMgdG8gY2FsbCByYXdfZXZlbnQgKE5VTEwgbWVhbnMgYWxsKQorICogQHJhd19ldmVudDogaWYgcmVwb3J0IGluIHJlcG9ydF90YWJsZSwgdGhpcyBob29rIGlzIGNhbGxlZCAoTlVMTCBtZWFucyBub3ApCisgKiBAdXNhZ2VfdGFibGU6IG9uIHdoaWNoIGV2ZW50cyB0byBjYWxsIGV2ZW50IChOVUxMIG1lYW5zIGFsbCkKKyAqIEBldmVudDogaWYgdXNhZ2UgaW4gdXNhZ2VfdGFibGUsIHRoaXMgaG9vayBpcyBjYWxsZWQgKE5VTEwgbWVhbnMgbm9wKQorICogQHJlcG9ydF9maXh1cDogY2FsbGVkIGJlZm9yZSByZXBvcnQgZGVzY3JpcHRvciBwYXJzaW5nIChOVUxMIG1lYW5zIG5vcCkKKyAqIEBpbnB1dF9tYXBwaW5nOiBpbnZva2VkIG9uIGlucHV0IHJlZ2lzdGVyaW5nIGJlZm9yZSBtYXBwaW5nIGFuIHVzYWdlCisgKiBAaW5wdXRfbWFwcGVkOiBpbnZva2VkIG9uIGlucHV0IHJlZ2lzdGVyaW5nIGFmdGVyIG1hcHBpbmcgYW4gdXNhZ2UKKyAqCisgKiByYXdfZXZlbnQgYW5kIGV2ZW50IHNob3VsZCByZXR1cm4gMCBvbiBubyBhY3Rpb24gcGVyZm9ybWVkLCAxIHdoZW4gbm8KKyAqIGZ1cnRoZXIgcHJvY2Vzc2luZyBzaG91bGQgYmUgZG9uZSBhbmQgbmVnYXRpdmUgb24gZXJyb3IKKyAqCisgKiBpbnB1dF9tYXBwaW5nIHNoYWxsIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIHRvIGNvbXBsZXRlbHkgaWdub3JlIHRoaXMgdXNhZ2UKKyAqIChlLmcuIGRvdWJsZWQgb3IgaW52YWxpZCB1c2FnZSksIHplcm8gdG8gY29udGludWUgd2l0aCBwYXJzaW5nIG9mIHRoaXMKKyAqIHVzYWdlIGJ5IGdlbmVyaWMgY29kZSAobm8gc3BlY2lhbCBoYW5kbGluZyBuZWVkZWQpIG9yIHBvc2l0aXZlIHRvIHNraXAKKyAqIGdlbmVyaWMgcGFyc2luZyAobmVlZGVkIHNwZWNpYWwgaGFuZGxpbmcgd2hpY2ggd2FzIGRvbmUgaW4gdGhlIGhvb2sgYWxyZWFkeSkKKyAqIGlucHV0X21hcHBlZCBzaGFsbCByZXR1cm4gbmVnYXRpdmUgdG8gaW5mb3JtIHRoZSBsYXllciB0aGF0IHRoaXMgdXNhZ2UKKyAqIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nIG9yIHplcm8gdG8gbm90aWZ5IHRoYXQKKyAqIG5vIHByb2Nlc3Npbmcgd2FzIHBlcmZvcm1lZCBhbmQgc2hvdWxkIGJlIGRvbmUgaW4gYSBnZW5lcmljIG1hbm5lcgorICogQm90aCB0aGVzZSBmdW5jdGlvbnMgbWF5IGJlIE5VTEwgd2hpY2ggbWVhbnMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgcmV0dXJuaW5nCisgKiB6ZXJvIGZyb20gdGhlbS4KKyAqLworc3RydWN0IGhpZF9kcml2ZXIgeworCWNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkX3RhYmxlOworCisJaW50ICgqcHJvYmUpKHN0cnVjdCBoaWRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCk7CisJdm9pZCAoKnJlbW92ZSkoc3RydWN0IGhpZF9kZXZpY2UgKmRldik7CisKKwljb25zdCBzdHJ1Y3QgaGlkX3JlcG9ydF9pZCAqcmVwb3J0X3RhYmxlOworCWludCAoKnJhd19ldmVudCkoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsCisJCQl1OCAqZGF0YSwgaW50IHNpemUpOworCWNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfaWQgKnVzYWdlX3RhYmxlOworCWludCAoKmV2ZW50KShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpOworCisJdm9pZCAoKnJlcG9ydF9maXh1cCkoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIF9fdTggKmJ1ZiwKKwkJCXVuc2lnbmVkIGludCBzaXplKTsKKworCWludCAoKmlucHV0X21hcHBpbmcpKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAorCQkJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIHVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KTsKKwlpbnQgKCppbnB1dF9tYXBwZWQpKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAorCQkJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIHVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KTsKKy8qIHByaXZhdGU6ICovCisJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOworfTsKKworLyoqCisgKiBoaWRfbGxfZHJpdmVyIC0gbG93IGxldmVsIGRyaXZlciBjYWxsYmFja3MKKyAqIEBzdGFydDogY2FsbGVkIG9uIHByb2JlIHRvIHN0YXJ0IHRoZSBkZXZpY2UKKyAqIEBzdG9wOiBjYWxsZWQgb24gcmVtb3ZlCisgKiBAb3BlbjogY2FsbGVkIGJ5IGlucHV0IGxheWVyIG9uIG9wZW4KKyAqIEBjbG9zZTogY2FsbGVkIGJ5IGlucHV0IGxheWVyIG9uIGNsb3NlCisgKiBAaGlkaW5wdXRfaW5wdXRfZXZlbnQ6IGV2ZW50IGlucHV0IGV2ZW50IChlLmcuIGZmIG9yIGxlZHMpCisgKiBAcGFyc2U6IHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmx5IG9uY2UgdG8gcGFyc2UgdGhlIGRldmljZSBkYXRhLAorICoJICAgc2hvdWxkbid0IGFsbG9jYXRlIGFueXRoaW5nIHRvIG5vdCBsZWFrIG1lbW9yeQorICovCitzdHJ1Y3QgaGlkX2xsX2RyaXZlciB7CisJaW50ICgqc3RhcnQpKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KTsKKwl2b2lkICgqc3RvcCkoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpOworCisJaW50ICgqb3Blbikoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpOworCXZvaWQgKCpjbG9zZSkoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpOworCisJaW50ICgqaGlkaW5wdXRfaW5wdXRfZXZlbnQpIChzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwKKwkJCXVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpOworCisJaW50ICgqcGFyc2UpKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KTsKK307CisKIC8qIEFwcGxpY2F0aW9ucyBmcm9tIEhJRCBVc2FnZSBUYWJsZXMgNC84Lzk5IFZlcnNpb24gMS4xICovCiAvKiBXZSBpZ25vcmUgYSBmZXcgaW5wdXQgYXBwbGljYXRpb25zIHRoYXQgYXJlIG5vdCB3aWRlbHkgdXNlZCAqLwogI2RlZmluZSBJU19JTlBVVF9BUFBMSUNBVElPTihhKSAoKChhID49IDB4MDAwMTAwMDApICYmIChhIDw9IDB4MDAwMTAwMDgpKSB8fCAoYSA9PSAweDAwMDEwMDgwKSB8fCAoYSA9PSAweDAwMGMwMDAxKSB8fCAoYSA9PSAweDAwMGQwMDAyKSkKQEAgLTUyMCw0MyArNjE2LDE1NyBAQAogZXh0ZXJuIGludCBoaWRfZGVidWc7CiAjZW5kaWYKIAorZXh0ZXJuIGludCBoaWRfYWRkX2RldmljZShzdHJ1Y3QgaGlkX2RldmljZSAqKTsKK2V4dGVybiB2b2lkIGhpZF9kZXN0cm95X2RldmljZShzdHJ1Y3QgaGlkX2RldmljZSAqKTsKKworZXh0ZXJuIGludCBfX211c3RfY2hlY2sgX19oaWRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBoaWRfZHJpdmVyICosCisJCXN0cnVjdCBtb2R1bGUgKiwgY29uc3QgY2hhciAqbW9kX25hbWUpOworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIGhpZF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGhpZF9kcml2ZXIgKmRyaXZlcikKK3sKKwlyZXR1cm4gX19oaWRfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlciwgVEhJU19NT0RVTEUsIEtCVUlMRF9NT0ROQU1FKTsKK30KK2V4dGVybiB2b2lkIGhpZF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgaGlkX2RyaXZlciAqKTsKKwogZXh0ZXJuIHZvaWQgaGlkaW5wdXRfaGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBoaWRfZmllbGQgKiwgc3RydWN0IGhpZF91c2FnZSAqLCBfX3MzMik7CiBleHRlcm4gdm9pZCBoaWRpbnB1dF9yZXBvcnRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCk7Ci1leHRlcm4gaW50IGhpZGlucHV0X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKik7CitleHRlcm4gaW50IGhpZGlucHV0X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgaW50IGZvcmNlKTsKIGV4dGVybiB2b2lkIGhpZGlucHV0X2Rpc2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKik7CiAKIGludCBoaWRfc2V0X2ZpZWxkKHN0cnVjdCBoaWRfZmllbGQgKiwgdW5zaWduZWQsIF9fczMyKTsKIGludCBoaWRfaW5wdXRfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICosIGludCB0eXBlLCB1OCAqLCBpbnQsIGludCk7CiBpbnQgaGlkaW5wdXRfZmluZF9maWVsZChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIHN0cnVjdCBoaWRfZmllbGQgKipmaWVsZCk7Ci1pbnQgaGlkaW5wdXRfbWFwcGluZ19xdWlya3Moc3RydWN0IGhpZF91c2FnZSAqLCBzdHJ1Y3QgaW5wdXRfZGV2ICosIHVuc2lnbmVkIGxvbmcgKiosIGludCAqKTsKLWludCBoaWRpbnB1dF9ldmVudF9xdWlya3Moc3RydWN0IGhpZF9kZXZpY2UgKiwgc3RydWN0IGhpZF9maWVsZCAqLCBzdHJ1Y3QgaGlkX3VzYWdlICosIF9fczMyKTsKLWludCBoaWRpbnB1dF9hcHBsZV9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqLCBzdHJ1Y3QgaW5wdXRfZGV2ICosIHN0cnVjdCBoaWRfdXNhZ2UgKiwgX19zMzIpOwogdm9pZCBoaWRfb3V0cHV0X3JlcG9ydChzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCBfX3U4ICpkYXRhKTsKLXZvaWQgaGlkX2ZyZWVfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UpOwotc3RydWN0IGhpZF9kZXZpY2UgKmhpZF9wYXJzZV9yZXBvcnQoX191OCAqc3RhcnQsIHVuc2lnbmVkIHNpemUpOworc3RydWN0IGhpZF9kZXZpY2UgKmhpZF9hbGxvY2F0ZV9kZXZpY2Uodm9pZCk7CitpbnQgaGlkX3BhcnNlX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBfX3U4ICpzdGFydCwgdW5zaWduZWQgc2l6ZSk7CitpbnQgaGlkX2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdW5zaWduZWQgaW50IGNvbm5lY3RfbWFzayk7CisKKy8qKgorICogaGlkX21hcF91c2FnZSAtIG1hcCB1c2FnZSBpbnB1dCBiaXRzCisgKgorICogQGhpZGlucHV0OiBoaWRpbnB1dCB3aGljaCB3ZSBhcmUgaW50ZXJlc3RlZCBpbgorICogQHVzYWdlOiB1c2FnZSB0byBmaWxsIGluCisgKiBAYml0OiBwb2ludGVyIHRvIGlucHV0LT57fWJpdCAob3V0IHBhcmFtZXRlcikKKyAqIEBtYXg6IG1heGltYWwgdmFsaWQgdXNhZ2UtPmNvZGUgdG8gY29uc2lkZXIgbGF0ZXIgKG91dCBwYXJhbWV0ZXIpCisgKiBAdHlwZTogaW5wdXQgZXZlbnQgdHlwZSAoRVZfS0VZLCBFVl9SRUwsIC4uLikKKyAqIEBjOiBjb2RlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoaXMgdXNhZ2UgYW5kIHR5cGUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGhpZF9tYXBfdXNhZ2Uoc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQsCisJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCwKKwkJX191OCB0eXBlLCBfX3UxNiBjKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gaGlkaW5wdXQtPmlucHV0OworCisJdXNhZ2UtPnR5cGUgPSB0eXBlOworCXVzYWdlLT5jb2RlID0gYzsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRVZfQUJTOgorCQkqYml0ID0gaW5wdXQtPmFic2JpdDsKKwkJKm1heCA9IEFCU19NQVg7CisJCWJyZWFrOworCWNhc2UgRVZfUkVMOgorCQkqYml0ID0gaW5wdXQtPnJlbGJpdDsKKwkJKm1heCA9IFJFTF9NQVg7CisJCWJyZWFrOworCWNhc2UgRVZfS0VZOgorCQkqYml0ID0gaW5wdXQtPmtleWJpdDsKKwkJKm1heCA9IEtFWV9NQVg7CisJCWJyZWFrOworCWNhc2UgRVZfTEVEOgorCQkqYml0ID0gaW5wdXQtPmxlZGJpdDsKKwkJKm1heCA9IExFRF9NQVg7CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBoaWRfbWFwX3VzYWdlX2NsZWFyIC0gbWFwIHVzYWdlIGlucHV0IGJpdHMgYW5kIGNsZWFyIHRoZSBpbnB1dCBiaXQKKyAqCisgKiBUaGUgc2FtZSBhcyBoaWRfbWFwX3VzYWdlLCBleGNlcHQgdGhlIEBjIGJpdCBpcyBhbHNvIGNsZWFyZWQgaW4gc3VwcG9ydGVkCisgKiBiaXRzIChAYml0KS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGhpZF9tYXBfdXNhZ2VfY2xlYXIoc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQsCisJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCwKKwkJX191OCB0eXBlLCBfX3UxNiBjKQoreworCWhpZF9tYXBfdXNhZ2UoaGlkaW5wdXQsIHVzYWdlLCBiaXQsIG1heCwgdHlwZSwgYyk7CisJY2xlYXJfYml0KGMsICpiaXQpOworfQorCisvKioKKyAqIGhpZF9wYXJzZSAtIHBhcnNlIEhXIHJlcG9ydHMKKyAqCisgKiBAaGRldjogaGlkIGRldmljZQorICoKKyAqIENhbGwgdGhpcyBmcm9tIHByb2JlIGFmdGVyIHlvdSBzZXQgdXAgdGhlIGRldmljZSAoaWYgbmVlZGVkKS4gWW91cgorICogcmVwb3J0X2ZpeHVwIHdpbGwgYmUgY2FsbGVkIChpZiBub24tTlVMTCkgYWZ0ZXIgcmVhZGluZyByYXcgcmVwb3J0IGZyb20KKyAqIGRldmljZSBiZWZvcmUgcGFzc2luZyBpdCB0byBoaWQgbGF5ZXIgZm9yIHJlYWwgcGFyc2luZy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIGhpZF9wYXJzZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwlpbnQgcmV0OworCisJaWYgKGhkZXYtPnN0YXR1cyAmIEhJRF9TVEFUX1BBUlNFRCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBoZGV2LT5sbF9kcml2ZXItPnBhcnNlKGhkZXYpOworCWlmICghcmV0KQorCQloZGV2LT5zdGF0dXMgfD0gSElEX1NUQVRfUEFSU0VEOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBoaWRfaHdfc3RhcnQgLSBzdGFydCB1bmRlcmxheWluZyBIVworICoKKyAqIEBoZGV2OiBoaWQgZGV2aWNlCisgKiBAY29ubmVjdF9tYXNrOiB3aGljaCBvdXRwdXRzIHRvIGNvbm5lY3QsIHNlZSBISURfQ09OTkVDVF8qCisgKgorICogQ2FsbCB0aGlzIGluIHByb2JlIGZ1bmN0aW9uICphZnRlciogaGlkX3BhcnNlLiBUaGlzIHdpbGwgc2V0dXAgSFcgYnVmZmVycworICogYW5kIHN0YXJ0IHRoZSBkZXZpY2UgKGlmIG5vdCBkZWZmZXJlZCB0byBkZXZpY2Ugb3BlbikuIGhpZF9od19zdG9wIG11c3QgYmUKKyAqIGNhbGxlZCBpZiB0aGlzIHdhcyBzdWNjZXNzZnVsbC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIGhpZF9od19zdGFydChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKKwkJdW5zaWduZWQgaW50IGNvbm5lY3RfbWFzaykKK3sKKwlpbnQgcmV0ID0gaGRldi0+bGxfZHJpdmVyLT5zdGFydChoZGV2KTsKKwlpZiAocmV0IHx8ICFjb25uZWN0X21hc2spCisJCXJldHVybiByZXQ7CisJcmV0ID0gaGlkX2Nvbm5lY3QoaGRldiwgY29ubmVjdF9tYXNrKTsKKwlpZiAocmV0KQorCQloZGV2LT5sbF9kcml2ZXItPnN0b3AoaGRldik7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBoaWRfaHdfc3RvcCAtIHN0b3AgdW5kZXJsYXlpbmcgSFcKKyAqCisgKiBAaGRldjogaGlkIGRldmljZQorICoKKyAqIFRoaXMgaXMgdXN1YWxseSBjYWxsZWQgZnJvbSByZW1vdmUgZnVuY3Rpb24gb3IgZnJvbSBwcm9iZSB3aGVuIHNvbWV0aGluZworICogZmFpbGVkIGFuZCBoaWRfaHdfc3RhcnQgd2FzIGNhbGxlZCBhbHJlYWR5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGlkX2h3X3N0b3Aoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaGRldi0+bGxfZHJpdmVyLT5zdG9wKGhkZXYpOworfQorCit2b2lkIGhpZF9yZXBvcnRfcmF3X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCB0eXBlLCB1OCAqZGF0YSwgaW50IHNpemUsCisJCWludCBpbnRlcnJ1cHQpOworCitleHRlcm4gaW50IGhpZF9nZW5lcmljX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBoaWRfZ2VuZXJpY19leGl0KHZvaWQpOwogCiAvKiBISUQgcXVpcmtzIEFQSSAqLwogdTMyIHVzYmhpZF9sb29rdXBfcXVpcmsoY29uc3QgdTE2IGlkVmVuZG9yLCBjb25zdCB1MTYgaWRQcm9kdWN0KTsKIGludCB1c2JoaWRfcXVpcmtzX2luaXQoY2hhciAqKnF1aXJrc19wYXJhbSk7CiB2b2lkIHVzYmhpZF9xdWlya3NfZXhpdCh2b2lkKTsKLXZvaWQgdXNiaGlkX2ZpeHVwX3JlcG9ydF9kZXNjcmlwdG9yKGNvbnN0IHUxNiwgY29uc3QgdTE2LCBjaGFyICosIHVuc2lnbmVkLCBjaGFyICoqKTsKK3ZvaWQgdXNiaGlkX3NldF9sZWRzKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwogCi0jaWZkZWYgQ09ORklHX0hJRF9GRgotaW50IGhpZF9mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwotCi1pbnQgaGlkX2xnZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKLWludCBoaWRfbGcyZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKLWludCBoaWRfcGxmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwotaW50IGhpZF90bWZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7Ci1pbnQgaGlkX3pwZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKICNpZmRlZiBDT05GSUdfSElEX1BJRAogaW50IGhpZF9waWRmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGhpZF9waWRmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH0KLSNlbmRpZgotCi0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgaGlkX2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkgeyByZXR1cm4gLTE7IH0KKyNkZWZpbmUgaGlkX3BpZGZmX2luaXQgTlVMTAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSElEX0RFQlVHCkBAIC01NzIsMTAgKzc4MiwyMyBAQAogCXJldHVybiAwOwogfQogI2RlZmluZSBkYmdfaGlkX2xpbmUgZGJnX2hpZAotI2VuZGlmCisjZW5kaWYgLyogSElEX0RFQlVHICovCiAKICNkZWZpbmUgZXJyX2hpZChmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmb3JtYXQgIlxuIiAsIFwKIAkJX19GSUxFX18gLCAjIyBhcmcpCi0jZW5kaWYKKyNlbmRpZiAvKiBISURfRkYgKi8KKworI2lmZGVmIENPTkZJR19ISURfQ09NUEFUCisjZGVmaW5lIEhJRF9DT01QQVRfTE9BRF9EUklWRVIobmFtZSkJXAordm9pZCBoaWRfY29tcGF0XyMjbmFtZSh2b2lkKSB7IH0JXAorRVhQT1JUX1NZTUJPTChoaWRfY29tcGF0XyMjbmFtZSkKKyNlbHNlCisjZGVmaW5lIEhJRF9DT01QQVRfTE9BRF9EUklWRVIobmFtZSkKKyNlbmRpZiAvKiBISURfQ09NUEFUICovCisjZGVmaW5lIEhJRF9DT01QQVRfQ0FMTF9EUklWRVIobmFtZSkJZG8gewlcCisJZXh0ZXJuIHZvaWQgaGlkX2NvbXBhdF8jI25hbWUodm9pZCk7CVwKKwloaWRfY29tcGF0XyMjbmFtZSgpOwkJCVwKK30gd2hpbGUgKDApCisKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZGRldi5oIGIvaW5jbHVkZS9saW51eC9oaWRkZXYuaAppbmRleCBhNDE2YjkwLi5jNzYwYWUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZGRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlkZGV2LmgKQEAgLTE4MiwyNiArMTgyLDI4IEBACiAvKiBUbyB0cmF2ZXJzZSB0aGUgaW5wdXQgcmVwb3J0IGRlc2NyaXB0b3IgaW5mbyBmb3IgYSBISUQgZGV2aWNlLCBwZXJmb3JtIHRoZSAKICAqIGZvbGxvd2luZzoKICAqCi0gKiAgcmluZm8ucmVwb3J0X3R5cGUgPSBISURfUkVQT1JUX1RZUEVfSU5QVVQ7Ci0gKiAgcmluZm8ucmVwb3J0X2lkID0gSElEX1JFUE9SVF9JRF9GSVJTVDsKLSAqICByZXQgPSBpb2N0bChmZCwgSElESU9DR1JFUE9SVElORk8sICZyaW5mbyk7CisgKiByaW5mby5yZXBvcnRfdHlwZSA9IEhJRF9SRVBPUlRfVFlQRV9JTlBVVDsKKyAqIHJpbmZvLnJlcG9ydF9pZCA9IEhJRF9SRVBPUlRfSURfRklSU1Q7CisgKiByZXQgPSBpb2N0bChmZCwgSElESU9DR1JFUE9SVElORk8sICZyaW5mbyk7CiAgKgotICogIHdoaWxlIChyZXQgPj0gMCkgewotICogICAgICBmb3IgKGkgPSAwOyBpIDwgcmluZm8ubnVtX2ZpZWxkczsgaSsrKSB7IAotICoJICAgIGZpbmZvLnJlcG9ydF90eXBlID0gcmluZm8ucmVwb3J0X3R5cGU7Ci0gKiAgICAgICAgICBmaW5mby5yZXBvcnRfaWQgPSByaW5mby5yZXBvcnRfaWQ7Ci0gKiAgICAgICAgICBmaW5mby5maWVsZF9pbmRleCA9IGk7Ci0gKiAgICAgICAgICBpb2N0bChmZCwgSElESU9DR0ZJRUxESU5GTywgJmZpbmZvKTsKLSAqICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBmaW5mby5tYXh1c2FnZTsgaisrKSB7Ci0gKiAgICAgICAgICAgICAgdXJlZi5maWVsZF9pbmRleCA9IGk7Ci0gKgkJdXJlZi51c2FnZV9pbmRleCA9IGo7Ci0gKgkJaW9jdGwoZmQsIEhJRElPQ0dVQ09ERSwgJnVyZWYpOwotICoJCWlvY3RsKGZkLCBISURJT0NHVVNBR0UsICZ1cmVmKTsKLSAqICAgICAgICAgIH0KLSAqCX0KLSAqCXJpbmZvLnJlcG9ydF9pZCB8PSBISURfUkVQT1JUX0lEX05FWFQ7Ci0gKglyZXQgPSBpb2N0bChmZCwgSElESU9DR1JFUE9SVElORk8sICZyaW5mbyk7Ci0gKiAgfQorICogd2hpbGUgKHJldCA+PSAwKSB7CisgKiAJZm9yIChpID0gMDsgaSA8IHJpbmZvLm51bV9maWVsZHM7IGkrKykgeworICogCQlmaW5mby5yZXBvcnRfdHlwZSA9IHJpbmZvLnJlcG9ydF90eXBlOworICogCQlmaW5mby5yZXBvcnRfaWQgPSByaW5mby5yZXBvcnRfaWQ7CisgKiAJCWZpbmZvLmZpZWxkX2luZGV4ID0gaTsKKyAqIAkJaW9jdGwoZmQsIEhJRElPQ0dGSUVMRElORk8sICZmaW5mbyk7CisgKiAJCWZvciAoaiA9IDA7IGogPCBmaW5mby5tYXh1c2FnZTsgaisrKSB7CisgKiAJCQl1cmVmLnJlcG9ydF90eXBlID0gcmluZm8ucmVwb3J0X3R5cGU7CisgKiAJCQl1cmVmLnJlcG9ydF9pZCA9IHJpbmZvLnJlcG9ydF9pZDsKKyAqIAkJCXVyZWYuZmllbGRfaW5kZXggPSBpOworICogCQkJdXJlZi51c2FnZV9pbmRleCA9IGo7CisgKiAJCQlpb2N0bChmZCwgSElESU9DR1VDT0RFLCAmdXJlZik7CisgKiAJCQlpb2N0bChmZCwgSElESU9DR1VTQUdFLCAmdXJlZik7CisgKiAJCX0KKyAqIAl9CisgKiAJcmluZm8ucmVwb3J0X2lkIHw9IEhJRF9SRVBPUlRfSURfTkVYVDsKKyAqIAlyZXQgPSBpb2N0bChmZCwgSElESU9DR1JFUE9SVElORk8sICZyaW5mbyk7CisgKiB9CiAgKi8KIAogCkBAIC0yMTcsNyArMjE5LDcgQEAKIHN0cnVjdCBoaWRfcmVwb3J0OwogCiAjaWZkZWYgQ09ORklHX1VTQl9ISURERVYKLWludCBoaWRkZXZfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqKTsKK2ludCBoaWRkZXZfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgZm9yY2UpOwogdm9pZCBoaWRkZXZfZGlzY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqKTsKIHZvaWQgaGlkZGV2X2hpZF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKIAkJICAgICAgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKTsKQEAgLTIyNSw3ICsyMjcsOSBAQAogaW50IF9faW5pdCBoaWRkZXZfaW5pdCh2b2lkKTsKIHZvaWQgaGlkZGV2X2V4aXQodm9pZCk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaGlkZGV2X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkgeyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGhpZGRldl9jb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsCisJCXVuc2lnbmVkIGludCBmb3JjZSkKK3sgcmV0dXJuIC0xOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaGlkZGV2X2Rpc2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaGlkZGV2X2hpZF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKIAkJICAgICAgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKSB7IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKaW5kZXggMmYyNDVmZS4uOWE0ZTM1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKQEAgLTEyNSwxMiArMTI1LDEyIEBACiAJZW51bSBocnRpbWVyX3Jlc3RhcnQJCSgqZnVuY3Rpb24pKHN0cnVjdCBocnRpbWVyICopOwogCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UJKmJhc2U7CiAJdW5zaWduZWQgbG9uZwkJCXN0YXRlOwotCWVudW0gaHJ0aW1lcl9jYl9tb2RlCQljYl9tb2RlOwogCXN0cnVjdCBsaXN0X2hlYWQJCWNiX2VudHJ5OworCWVudW0gaHJ0aW1lcl9jYl9tb2RlCQljYl9tb2RlOwogI2lmZGVmIENPTkZJR19USU1FUl9TVEFUUworCWludAkJCQlzdGFydF9waWQ7CiAJdm9pZAkJCQkqc3RhcnRfc2l0ZTsKIAljaGFyCQkJCXN0YXJ0X2NvbW1bMTZdOwotCWludAkJCQlzdGFydF9waWQ7CiAjZW5kaWYKIH07CiAKQEAgLTE1NSwxMCArMTU1LDggQEAKICAqIEBmaXJzdDoJCXBvaW50ZXIgdG8gdGhlIHRpbWVyIG5vZGUgd2hpY2ggZXhwaXJlcyBmaXJzdAogICogQHJlc29sdXRpb246CQl0aGUgcmVzb2x1dGlvbiBvZiB0aGUgY2xvY2ssIGluIG5hbm9zZWNvbmRzCiAgKiBAZ2V0X3RpbWU6CQlmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBjbG9jawotICogQGdldF9zb2Z0aXJxX3RpbWU6CWZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBjdXJyZW50IHRpbWUgZnJvbSB0aGUgc29mdGlycQogICogQHNvZnRpcnFfdGltZToJdGhlIHRpbWUgd2hlbiBydW5uaW5nIHRoZSBocnRpbWVyIHF1ZXVlIGluIHRoZSBzb2Z0aXJxCiAgKiBAb2Zmc2V0OgkJb2Zmc2V0IG9mIHRoaXMgY2xvY2sgdG8gdGhlIG1vbm90b25pYyBiYXNlCi0gKiBAcmVwcm9ncmFtOgkJZnVuY3Rpb24gdG8gcmVwcm9ncmFtIHRoZSB0aW1lciBldmVudAogICovCiBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZQkqY3B1X2Jhc2U7CkBAIC0xNjcsMTMgKzE2NSw5IEBACiAJc3RydWN0IHJiX25vZGUJCSpmaXJzdDsKIAlrdGltZV90CQkJcmVzb2x1dGlvbjsKIAlrdGltZV90CQkJKCpnZXRfdGltZSkodm9pZCk7Ci0Ja3RpbWVfdAkJCSgqZ2V0X3NvZnRpcnFfdGltZSkodm9pZCk7CiAJa3RpbWVfdAkJCXNvZnRpcnFfdGltZTsKICNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCiAJa3RpbWVfdAkJCW9mZnNldDsKLQlpbnQJCQkoKnJlcHJvZ3JhbSkoc3RydWN0IGhydGltZXIgKnQsCi0JCQkJCSAgICAgc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYiwKLQkJCQkJICAgICBrdGltZV90IG4pOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaAppbmRleCBiZjM0YzVmLi4wMWQ2N2JhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKQEAgLTQxLDcgKzQxLDYgQEAKICNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxMTAJMjIJLyogdmlkZW8gZGVjb2RlcgkJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTUyNDkJMjQJLyogU0FBNTI0OSBhbmQgY29tcGF0aWJsZXMJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1BDRjg1ODMJMjUJLyogcmVhbCB0aW1lIGNsb2NrCQkqLwotI2RlZmluZSBJMkNfRFJJVkVSSURfU0FCMzAzNgkyNgkvKiBTQUIzMDM2IHR1bmVyCQkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfVERBNzQzMgkyNwkvKiBTdGVyZW8gc291bmQgcHJvY2Vzc29yCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9UVk1JWEVSICAgIDI4ICAgICAgLyogTWl4ZXIgZHJpdmVyIGZvciB0diBjYXJkcyAgICAqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfVFZBVURJTyAgICAyOSAgICAgIC8qIEdlbmVyaWMgVFYgc291bmQgZHJpdmVyICAgICAgKi8KQEAgLTYxLDcgKzYwLDcgQEAKICNkZWZpbmUgSTJDX0RSSVZFUklEX1dNODc3NQk2OQkvKiB3bTg3NzUgYXVkaW8gcHJvY2Vzc29yCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9DUzUzTDMyQQk3MAkvKiBjczUzbDMyYSBhdWRpbyBwcm9jZXNzb3IJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX0NYMjU4NDAJNzEJLyogY3gyNTg0eCB2aWRlbyBlbmNvZGVyCSovCi0jZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTI3CTcyCS8qIHNhYTcxMjQgdmlkZW8gZW5jb2RlcgkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzEyNwk3MgkvKiBzYWE3MTI3IHZpZGVvIGVuY29kZXIJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxMVgJNzMJLyogc2FhNzExeCB2aWRlbyBlbmNvZGVycwkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfQUtJVEFJT0VYUAk3NAkvKiBJTyBFeHBhbmRlciBvbiBTaGFycCBTTC1DMTAwMCAqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfSU5GUkFSRUQJNzUJLyogSTJDIEluZnJhUmVkIG9uIFZpZGVvIGJvYXJkcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYjQ1MzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiB0d2w0MDMwLmggLSBoZWFkZXIgZm9yIFRXTDQwMzAgUE0gYW5kIGF1ZGlvIENPREVDIGRldmljZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogQmFzZWQgb24gdGx2MzIwYWljMjMuYzoKKyAqIENvcHlyaWdodCAoYykgYnkgS2FpIFN2YWhuIDxrYWkuc3ZhaG5Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fVFdMNDAzMF9IXworI2RlZmluZSBfX1RXTDQwMzBfSF8KKworLyoKKyAqIFVzaW5nIHRoZSB0d2w0MDMwIGNvcmUgd2UgYWRkcmVzcyByZWdpc3RlcnMgdXNpbmcgYSBwYWlyCisgKgl7IG1vZHVsZSBpZCwgcmVsYXRpdmUgcmVnaXN0ZXIgb2Zmc2V0IH0KKyAqIHdoaWNoIHRoYXQgY29yZSB0aGVuIG1hcHMgdG8gdGhlIHJlbGV2YW50CisgKgl7IGkyYyBzbGF2ZSwgYWJzb2x1dGUgcmVnaXN0ZXIgYWRkcmVzcyB9CisgKgorICogVGhlIG1vZHVsZSBJRHMgYXJlIG1lYW5pbmdmdWwgb25seSB0byB0aGUgdHdsNDAzMCBjb3JlIGNvZGUsCisgKiB3aGljaCB1c2VzIHRoZW0gYXMgYXJyYXkgaW5kaWNlcyB0byBsb29rIHVwIHRoZSBmaXJzdCByZWdpc3RlcgorICogYWRkcmVzcyBlYWNoIG1vZHVsZSB1c2VzIHdpdGhpbiBhIGdpdmVuIGkyYyBzbGF2ZS4KKyAqLworCisvKiBTbGF2ZSAwIChpMmMgYWRkcmVzcyAweDQ4KSAqLworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9VU0IJCTB4MDAKKworLyogU2xhdmUgMSAoaTJjIGFkZHJlc3MgMHg0OSkgKi8KKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UJMHgwMQorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9HUElPCQkweDAyCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0lOVEJSCQkweDAzCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BJSAkJMHgwNAorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9URVNUCQkweDA1CisKKy8qIFNsYXZlIDIgKGkyYyBhZGRyZXNzIDB4NGEpICovCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0tFWVBBRAkJMHgwNgorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9NQURDCQkweDA3CisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0lOVEVSUlVQVFMJMHgwOAorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9MRUQJCTB4MDkKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfTUFJTl9DSEFSR0UJMHgwQQorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QUkVDSEFSR0UJMHgwQgorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QV00wCQkweDBDCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BXTTEJCTB4MEQKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUFdNQQkJMHgwRQorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QV01CCQkweDBGCisKKy8qIFNsYXZlIDMgKGkyYyBhZGRyZXNzIDB4NGIpICovCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0JBQ0tVUAkJMHgxMAorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9JTlQJCTB4MTEKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSCTB4MTIKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIJMHgxMworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9SVEMJCTB4MTQKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfU0VDVVJFRF9SRUcJMHgxNQorCisvKgorICogUmVhZCBhbmQgd3JpdGUgc2luZ2xlIDgtYml0IHJlZ2lzdGVycworICovCitpbnQgdHdsNDAzMF9pMmNfd3JpdGVfdTgodTggbW9kX25vLCB1OCB2YWwsIHU4IHJlZyk7CitpbnQgdHdsNDAzMF9pMmNfcmVhZF91OCh1OCBtb2Rfbm8sIHU4ICp2YWwsIHU4IHJlZyk7CisKKy8qCisgKiBSZWFkIGFuZCB3cml0ZSBzZXZlcmFsIDgtYml0IHJlZ2lzdGVycyBhdCBvbmNlLgorICoKKyAqIElNUE9SVEFOVDogIEZvciB0d2w0MDMwX2kyY193cml0ZSgpLCBhbGxvY2F0ZSBudW1fYnl0ZXMgKyAxCisgKiBmb3IgdGhlIHZhbHVlLCBhbmQgcG9wdWxhdGUgeW91ciBkYXRhIHN0YXJ0aW5nIGF0IG9mZnNldCAxLgorICovCitpbnQgdHdsNDAzMF9pMmNfd3JpdGUodTggbW9kX25vLCB1OCAqdmFsdWUsIHU4IHJlZywgdTggbnVtX2J5dGVzKTsKK2ludCB0d2w0MDMwX2kyY19yZWFkKHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcsIHU4IG51bV9ieXRlcyk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBOT1RFOiAgYXQgdXAgdG8gMTAyNCByZWdpc3RlcnMsIHRoaXMgaXMgYSBiaWcgY2hpcC4KKyAqCisgKiBBdm9pZCBwdXR0aW5nIHJlZ2lzdGVyIGRlY2xhcmF0aW9ucyBpbiB0aGlzIGZpbGUsIGluc3RlYWQgb2YgaW50bworICogYSBkcml2ZXItcHJpdmF0ZSBmaWxlLCB1bmxlc3Mgc29tZSBvZiB0aGUgcmVnaXN0ZXJzIGluIGEgYmxvY2sKKyAqIG5lZWQgdG8gYmUgc2hhcmVkIHdpdGggb3RoZXIgZHJpdmVycy4gIE9uZSBleGFtcGxlIGlzIGJsb2NrcyB0aGF0CisgKiBoYXZlIFNlY29uZGFyeSBJUlEgSGFuZGxlciAoU0lIKSByZWdpc3RlcnMuCisgKi8KKworI2RlZmluZSBUV0w0MDMwX1NJSF9DVFJMX0VYQ0xFTl9NQVNLCUJJVCgwKQorI2RlZmluZSBUV0w0MDMwX1NJSF9DVFJMX1BFTkRESVNfTUFTSwlCSVQoMSkKKyNkZWZpbmUgVFdMNDAzMF9TSUhfQ1RSTF9DT1JfTUFTSwlCSVQoMikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEdQSU8gQmxvY2sgUmVnaXN0ZXIgb2Zmc2V0cyAodXNlIFRXTDQwMzBfTU9EVUxFX0dQSU8pCisgKi8KKworI2RlZmluZSBSRUdfR1BJT0RBVEFJTjEJCQkweDAKKyNkZWZpbmUgUkVHX0dQSU9EQVRBSU4yCQkJMHgxCisjZGVmaW5lIFJFR19HUElPREFUQUlOMwkJCTB4MgorI2RlZmluZSBSRUdfR1BJT0RBVEFESVIxCQkweDMKKyNkZWZpbmUgUkVHX0dQSU9EQVRBRElSMgkJMHg0CisjZGVmaW5lIFJFR19HUElPREFUQURJUjMJCTB4NQorI2RlZmluZSBSRUdfR1BJT0RBVEFPVVQxCQkweDYKKyNkZWZpbmUgUkVHX0dQSU9EQVRBT1VUMgkJMHg3CisjZGVmaW5lIFJFR19HUElPREFUQU9VVDMJCTB4OAorI2RlZmluZSBSRUdfQ0xFQVJHUElPREFUQU9VVDEJCTB4OQorI2RlZmluZSBSRUdfQ0xFQVJHUElPREFUQU9VVDIJCTB4QQorI2RlZmluZSBSRUdfQ0xFQVJHUElPREFUQU9VVDMJCTB4QgorI2RlZmluZSBSRUdfU0VUR1BJT0RBVEFPVVQxCQkweEMKKyNkZWZpbmUgUkVHX1NFVEdQSU9EQVRBT1VUMgkJMHhECisjZGVmaW5lIFJFR19TRVRHUElPREFUQU9VVDMJCTB4RQorI2RlZmluZSBSRUdfR1BJT19ERUJFTjEJCQkweEYKKyNkZWZpbmUgUkVHX0dQSU9fREVCRU4yCQkJMHgxMAorI2RlZmluZSBSRUdfR1BJT19ERUJFTjMJCQkweDExCisjZGVmaW5lIFJFR19HUElPX0NUUkwJCQkweDEyCisjZGVmaW5lIFJFR19HUElPUFVQRENUUjEJCTB4MTMKKyNkZWZpbmUgUkVHX0dQSU9QVVBEQ1RSMgkJMHgxNAorI2RlZmluZSBSRUdfR1BJT1BVUERDVFIzCQkweDE1CisjZGVmaW5lIFJFR19HUElPUFVQRENUUjQJCTB4MTYKKyNkZWZpbmUgUkVHX0dQSU9QVVBEQ1RSNQkJMHgxNworI2RlZmluZSBSRUdfR1BJT19JU1IxQQkJCTB4MTkKKyNkZWZpbmUgUkVHX0dQSU9fSVNSMkEJCQkweDFBCisjZGVmaW5lIFJFR19HUElPX0lTUjNBCQkJMHgxQgorI2RlZmluZSBSRUdfR1BJT19JTVIxQQkJCTB4MUMKKyNkZWZpbmUgUkVHX0dQSU9fSU1SMkEJCQkweDFECisjZGVmaW5lIFJFR19HUElPX0lNUjNBCQkJMHgxRQorI2RlZmluZSBSRUdfR1BJT19JU1IxQgkJCTB4MUYKKyNkZWZpbmUgUkVHX0dQSU9fSVNSMkIJCQkweDIwCisjZGVmaW5lIFJFR19HUElPX0lTUjNCCQkJMHgyMQorI2RlZmluZSBSRUdfR1BJT19JTVIxQgkJCTB4MjIKKyNkZWZpbmUgUkVHX0dQSU9fSU1SMkIJCQkweDIzCisjZGVmaW5lIFJFR19HUElPX0lNUjNCCQkJMHgyNAorI2RlZmluZSBSRUdfR1BJT19FRFIxCQkJMHgyOAorI2RlZmluZSBSRUdfR1BJT19FRFIyCQkJMHgyOQorI2RlZmluZSBSRUdfR1BJT19FRFIzCQkJMHgyQQorI2RlZmluZSBSRUdfR1BJT19FRFI0CQkJMHgyQgorI2RlZmluZSBSRUdfR1BJT19FRFI1CQkJMHgyQworI2RlZmluZSBSRUdfR1BJT19TSUhfQ1RSTAkJMHgyRAorCisvKiBVcCB0byAxOCBzaWduYWxzIGFyZSBhdmFpbGFibGUgYXMgR1BJT3MsIHdoZW4gdGhlaXIKKyAqIHBpbnMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbm90aGVyIHVzZSAoc3VjaCBhcyBVTFBJL1VTQikuCisgKi8KKyNkZWZpbmUgVFdMNDAzMF9HUElPX01BWAkJMTgKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEtleXBhZCByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfS0VZUEFEKQorICogLi4uIFNJSC9pbnRlcnJ1cHQgb25seQorICovCisKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JU1IxCTB4MTEKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JTVIxCTB4MTIKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JU1IyCTB4MTMKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9JTVIyCTB4MTQKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9TSVIJCTB4MTUJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX0VEUgkJMHgxNgorI2RlZmluZSBUV0w0MDMwX0tFWVBBRF9LRVlQX1NJSF9DVFJMCTB4MTcKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIE11bHRpY2hhbm5lbCBBREMgcmVnaXN0ZXIgb2Zmc2V0cyAodXNlIFRXTDQwMzBfTU9EVUxFX01BREMpCisgKiAuLi4gU0lIL2ludGVycnVwdCBvbmx5CisgKi8KKworI2RlZmluZSBUV0w0MDMwX01BRENfSVNSMQkJMHg2MQorI2RlZmluZSBUV0w0MDMwX01BRENfSU1SMQkJMHg2MgorI2RlZmluZSBUV0w0MDMwX01BRENfSVNSMgkJMHg2MworI2RlZmluZSBUV0w0MDMwX01BRENfSU1SMgkJMHg2NAorI2RlZmluZSBUV0w0MDMwX01BRENfU0lSCQkweDY1CS8qIHRlc3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFdMNDAzMF9NQURDX0VEUgkJMHg2NgorI2RlZmluZSBUV0w0MDMwX01BRENfU0lIX0NUUkwJCTB4NjcKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEJhdHRlcnkgY2hhcmdlciByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfSU5URVJSVVBUUykKKyAqLworCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IxQQkweDAKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjJBCTB4MQorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMUEJMHgyCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIyQQkweDMKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjFCCTB4NAorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMkIJMHg1CisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIxQgkweDYKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjJCCTB4NworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lSMQkweDgJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lSMgkweDkJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJRURSMQkweGEKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUVEUjIJMHhiCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lFRFIzCTB4YworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJU0lIQ1RSTAkweGQKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFBvd2VyIEludGVycnVwdCBibG9jayByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfSU5UKQorICovCisKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0lTUjEJCTB4MAorI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfSU1SMQkJMHgxCisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9JU1IyCQkweDIKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0lNUjIJCTB4MworI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfU0lSCQkweDQJLyogdGVzdCByZWdpc3RlciAqLworI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfRURSMQkJMHg1CisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9FRFIyCQkweDYKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX1NJSF9DVFJMCTB4NworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgdHdsNDAzMF9iY2lfcGxhdGZvcm1fZGF0YSB7CisJaW50ICpiYXR0ZXJ5X3RtcF90Ymw7CisJdW5zaWduZWQgaW50IHRibHNpemU7Cit9OworCisvKiBUV0w0MDMwX0dQSU9fTUFYICgxOCkgR1BJT3MsIHdpdGggaW50ZXJydXB0cyAqLworc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQJCWdwaW9fYmFzZTsKKwl1bnNpZ25lZAlpcnFfYmFzZSwgaXJxX2VuZDsKKworCS8qIEZvciBncGlvLU4sIGJpdCAoMSA8PCBOKSBpbiAicHVsbHVwcyIgaXMgc2V0IGlmIHRoYXQgcHVsbHVwCisJICogc2hvdWxkIGJlIGVuYWJsZWQuICBFbHNlLCBpZiB0aGF0IGJpdCBpcyBzZXQgaW4gInB1bGxkb3ducyIsCisJICogdGhhdCBwdWxsZG93biBpcyBlbmFibGVkLiAgRG9uJ3Qgd2FzdGUgcG93ZXIgYnkgbGV0dGluZyBhbnkKKwkgKiBkaWdpdGFsIGlucHV0cyBmbG9hdC4uLgorCSAqLworCXUzMgkJcHVsbHVwczsKKwl1MzIJCXB1bGxkb3duczsKKworCWludAkJKCpzZXR1cCkoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIG5ncGlvKTsKKwlpbnQJCSgqdGVhcmRvd24pKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3Bpbyk7Cit9OworCitzdHJ1Y3QgdHdsNDAzMF9tYWRjX3BsYXRmb3JtX2RhdGEgeworCWludAkJaXJxX2xpbmU7Cit9OworCitzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSB7CisJaW50IHJvd3M7CisJaW50IGNvbHM7CisJaW50ICprZXltYXA7CisJaW50IGlycTsKKwl1bnNpZ25lZCBpbnQga2V5bWFwc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcmVwOjE7Cit9OworCitlbnVtIHR3bDQwMzBfdXNiX21vZGUgeworCVQyX1VTQl9NT0RFX1VMUEkgPSAxLAorCVQyX1VTQl9NT0RFX0NFQTIwMTFfM1BJTiA9IDIsCit9OworCitzdHJ1Y3QgdHdsNDAzMF91c2JfZGF0YSB7CisJZW51bSB0d2w0MDMwX3VzYl9tb2RlCXVzYl9tb2RlOworfTsKKworc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSB7CisJdW5zaWduZWQJCQkJaXJxX2Jhc2UsIGlycV9lbmQ7CisJc3RydWN0IHR3bDQwMzBfYmNpX3BsYXRmb3JtX2RhdGEJKmJjaTsKKwlzdHJ1Y3QgdHdsNDAzMF9ncGlvX3BsYXRmb3JtX2RhdGEJKmdwaW87CisJc3RydWN0IHR3bDQwMzBfbWFkY19wbGF0Zm9ybV9kYXRhCSptYWRjOworCXN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhCQkqa2V5cGFkOworCXN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhCQkJKnVzYjsKKworCS8qIFJFVklTSVQgbW9yZSB0byBjb21lIC4uLiBfbm90aGluZ18gc2hvdWxkIGJlIGhhcmQtd2lyZWQgKi8KK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBGSVhNRSBjb21wbGV0ZWx5IHN0b3AgdXNpbmcgVFdMNDAzMF9JUlFfQkFTRSAuLi4gaW5zdGVhZCwgcGFzcyB0aGUKKyAqIElSUSBkYXRhIHRvIHN1YnNpZGlhcnkgZGV2aWNlcyB1c2luZyBwbGF0Zm9ybSBkZXZpY2UgcmVzb3VyY2VzLgorICovCisKKy8qIElSUSBpbmZvcm1hdGlvbi1uZWVkIGJhc2UgKi8KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKy8qIFRXTDQwMzAgaW50ZXJydXB0cyAqLworCisvKiAjZGVmaW5lIFRXTDQwMzBfTU9ESVJRX0dQSU8JCShUV0w0MDMwX0lSUV9CQVNFICsgMCkgKi8KKyNkZWZpbmUgVFdMNDAzMF9NT0RJUlFfS0VZUEFECQkoVFdMNDAzMF9JUlFfQkFTRSArIDEpCisjZGVmaW5lIFRXTDQwMzBfTU9ESVJRX0JDSQkJKFRXTDQwMzBfSVJRX0JBU0UgKyAyKQorI2RlZmluZSBUV0w0MDMwX01PRElSUV9NQURDCQkoVFdMNDAzMF9JUlFfQkFTRSArIDMpCisvKiAjZGVmaW5lIFRXTDQwMzBfTU9ESVJRX1VTQgkJKFRXTDQwMzBfSVJRX0JBU0UgKyA0KSAqLworI2RlZmluZSBUV0w0MDMwX01PRElSUV9QV1IJCShUV0w0MDMwX0lSUV9CQVNFICsgNSkKKworI2RlZmluZSBUV0w0MDMwX1BXUklSUV9QV1JCVE4JCShUV0w0MDMwX1BXUl9JUlFfQkFTRSArIDApCisjZGVmaW5lIFRXTDQwMzBfUFdSSVJRX0NIR19QUkVTCQkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyAxKQorI2RlZmluZSBUV0w0MDMwX1BXUklSUV9VU0JfUFJFUwkJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgMikKKyNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfUlRDCQkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyAzKQorI2RlZmluZSBUV0w0MDMwX1BXUklSUV9IT1RfRElFCQkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyA0KQorI2RlZmluZSBUV0w0MDMwX1BXUklSUV9QV1JPS19USU1FT1VUCShUV0w0MDMwX1BXUl9JUlFfQkFTRSArIDUpCisjZGVmaW5lIFRXTDQwMzBfUFdSSVJRX01CQ0hHCQkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyA2KQorI2RlZmluZSBUV0w0MDMwX1BXUklSUV9TQ19ERVRFQ1QJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgNykKKworLyogUmVzdCBhcmUgdW5zdWVkIGN1cnJlbnRseSovCisKKy8qIE9mZnNldHMgdG8gUG93ZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIFRXTDQwMzBfVkRBQ19ERVZfR1JQCQkweDNCCisjZGVmaW5lIFRXTDQwMzBfVkRBQ19ERURJQ0FURUQJCTB4M0UKKyNkZWZpbmUgVFdMNDAzMF9WQVVYMV9ERVZfR1JQCQkweDE3CisjZGVmaW5lIFRXTDQwMzBfVkFVWDFfREVESUNBVEVECQkweDFBCisjZGVmaW5lIFRXTDQwMzBfVkFVWDJfREVWX0dSUAkJMHgxQgorI2RlZmluZSBUV0w0MDMwX1ZBVVgyX0RFRElDQVRFRAkJMHgxRQorI2RlZmluZSBUV0w0MDMwX1ZBVVgzX0RFVl9HUlAJCTB4MUYKKyNkZWZpbmUgVFdMNDAzMF9WQVVYM19ERURJQ0FURUQJCTB4MjIKKworLyogVFdMNDAzMCBHUElPIGludGVycnVwdCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIFRXTDQwMzBfR1BJT19JUlFfTk8obikJCShUV0w0MDMwX0dQSU9fSVJRX0JBU0UgKyAobikpCisjZGVmaW5lIFRXTDQwMzBfR1BJT19JU19FTkFCTEUJCTEKKworLyoKKyAqIEV4cG9ydGVkIFRXTDQwMzAgR1BJTyBBUElzCisgKgorICogV0FSTklORyAtLSB1c2Ugc3RhbmRhcmQgR1BJTyBhbmQgSVJRIGNhbGxzIGluc3RlYWQ7IHRoZXNlIHdpbGwgdmFuaXNoLgorICovCitpbnQgdHdsNDAzMF9nZXRfZ3Bpb19kYXRhaW4oaW50IGdwaW8pOworaW50IHR3bDQwMzBfcmVxdWVzdF9ncGlvKGludCBncGlvKTsKK2ludCB0d2w0MDMwX3NldF9ncGlvX2RlYm91bmNlKGludCBncGlvLCBpbnQgZW5hYmxlKTsKK2ludCB0d2w0MDMwX2ZyZWVfZ3BpbyhpbnQgZ3Bpbyk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0JDSV9CQVRURVJZKSB8fCBcCisJZGVmaW5lZChDT05GSUdfVFdMNDAzMF9CQ0lfQkFUVEVSWV9NT0RVTEUpCisJZXh0ZXJuIGludCB0d2w0MDMwY2hhcmdlcl91c2JfZW4oaW50IGVuYWJsZSk7CisjZWxzZQorCXN0YXRpYyBpbmxpbmUgaW50IHR3bDQwMzBjaGFyZ2VyX3VzYl9lbihpbnQgZW5hYmxlKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKworI2VuZGlmIC8qIEVuZCBvZiBfX1RXTDQwMzBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMm8uaCBiL2luY2x1ZGUvbGludXgvaTJvLmgKaW5kZXggNzVhZTZkOC4uNGM0ZTU3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyby5oCkBAIC01NzAsNyArNTcwLDYgQEAKICNlbmRpZgogCXNwaW5sb2NrX3QgbG9jazsJLyogbG9jayBmb3IgY29udHJvbGxlcgogCQkJCSAgIGNvbmZpZ3VyYXRpb24gKi8KLQogCXZvaWQgKmRyaXZlcl9kYXRhW0kyT19NQVhfRFJJVkVSU107CS8qIHN0b3JhZ2UgZm9yIGRyaXZlcnMgKi8KIH07CiAKQEAgLTY5MSwyODkgKzY5MCwyMiBAQAogfTsKICNlbmRpZgogCi0vKioKLSAqCWkyb19zZ190YWJsZXNpemUgLSBDYWxjdWxhdGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgU0dMCi0gKglAYzogSTJPIGNvbnRyb2xsZXIgZm9yIHdoaWNoIHRoZSBjYWxjdWxhdGlvbiBzaG91bGQgYmUgZG9uZQotICoJQGJvZHlfc2l6ZTogbWF4aW11bSBib2R5IHNpemUgdXNlZCBmb3IgbWVzc2FnZSBpbiAzMi1iaXQgd29yZHMuCi0gKgotICoJUmV0dXJuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBTRyBlbGVtZW50cyBpbiBhIFNHIGxpc3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTE2IGkyb19zZ190YWJsZXNpemUoc3RydWN0IGkyb19jb250cm9sbGVyICpjLCB1MTYgYm9keV9zaXplKQotewotCWkyb19zdGF0dXNfYmxvY2sgKnNiID0gYy0+c3RhdHVzX2Jsb2NrLnZpcnQ7Ci0JdTE2IHNnX2NvdW50ID0KLQkgICAgKHNiLT5pbmJvdW5kX2ZyYW1lX3NpemUgLSBzaXplb2Yoc3RydWN0IGkyb19tZXNzYWdlKSAvIDQpIC0KLQkgICAgYm9keV9zaXplOwotCi0JaWYgKGMtPnBhZV9zdXBwb3J0KSB7Ci0JCS8qCi0JCSAqIGZvciA2NC1iaXQgYSBTRyBhdHRyaWJ1dGUgZWxlbWVudCBtdXN0IGJlIGFkZGVkIGFuZCBlYWNoCi0JCSAqIFNHIGVsZW1lbnQgbmVlZHMgMTIgYnl0ZXMgaW5zdGVhZCBvZiA4LgotCQkgKi8KLQkJc2dfY291bnQgLT0gMjsKLQkJc2dfY291bnQgLz0gMzsKLQl9IGVsc2UKLQkJc2dfY291bnQgLz0gMjsKLQotCWlmIChjLT5zaG9ydF9yZXEgJiYgKHNnX2NvdW50ID4gOCkpCi0JCXNnX2NvdW50ID0gODsKLQotCXJldHVybiBzZ19jb3VudDsKLX07Ci0KLS8qKgotICoJaTJvX2RtYV9tYXBfc2luZ2xlIC0gTWFwIHBvaW50ZXIgdG8gY29udHJvbGxlciBhbmQgZmlsbCBpbiBJMk8gbWVzc2FnZS4KLSAqCUBjOiBJMk8gY29udHJvbGxlcgotICoJQHB0cjogcG9pbnRlciB0byB0aGUgZGF0YSB3aGljaCBzaG91bGQgYmUgbWFwcGVkCi0gKglAc2l6ZTogc2l6ZSBvZiBkYXRhIGluIGJ5dGVzCi0gKglAZGlyZWN0aW9uOiBETUFfVE9fREVWSUNFIC8gRE1BX0ZST01fREVWSUNFCi0gKglAc2dfcHRyOiBwb2ludGVyIHRvIHRoZSBTRyBsaXN0IGluc2lkZSB0aGUgSTJPIG1lc3NhZ2UKLSAqCi0gKglUaGlzIGZ1bmN0aW9uIGRvZXMgYWxsIG5lY2Vzc2FyeSBETUEgaGFuZGxpbmcgYW5kIGFsc28gd3JpdGVzIHRoZSBJMk8KLSAqCVNHTCBlbGVtZW50cyBpbnRvIHRoZSBJMk8gbWVzc2FnZS4gRm9yIGRldGFpbHMgb24gRE1BIGhhbmRsaW5nIHNlZSBhbHNvCi0gKglkbWFfbWFwX3NpbmdsZSgpLiBUaGUgcG9pbnRlciBzZ19wdHIgd2lsbCBvbmx5IGJlIHNldCB0byB0aGUgZW5kIG9mIHRoZQotICoJU0cgbGlzdCBpZiB0aGUgYWxsb2NhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KLSAqCi0gKglSZXR1cm5zIERNQSBhZGRyZXNzIHdoaWNoIG11c3QgYmUgY2hlY2tlZCBmb3IgZmFpbHVyZXMgdXNpbmcKLSAqCWRtYV9tYXBwaW5nX2Vycm9yKCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBpMm9fZG1hX21hcF9zaW5nbGUoc3RydWN0IGkyb19jb250cm9sbGVyICpjLCB2b2lkICpwdHIsCitleHRlcm4gdTE2IGkyb19zZ190YWJsZXNpemUoc3RydWN0IGkyb19jb250cm9sbGVyICpjLCB1MTYgYm9keV9zaXplKTsKK2V4dGVybiBkbWFfYWRkcl90IGkyb19kbWFfbWFwX3NpbmdsZShzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsIHZvaWQgKnB0ciwKIAkJCQkJICAgIHNpemVfdCBzaXplLAogCQkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQkgICAgdTMyICoqIHNnX3B0cikKLXsKLQl1MzIgc2dfZmxhZ3M7Ci0JdTMyICptcHRyID0gKnNnX3B0cjsKLQlkbWFfYWRkcl90IGRtYV9hZGRyOwotCi0Jc3dpdGNoIChkaXJlY3Rpb24pIHsKLQljYXNlIERNQV9UT19ERVZJQ0U6Ci0JCXNnX2ZsYWdzID0gMHhkNDAwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBETUFfRlJPTV9ERVZJQ0U6Ci0JCXNnX2ZsYWdzID0gMHhkMDAwMDAwMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBwdHIsIHNpemUsIGRpcmVjdGlvbik7Ci0JaWYgKCFkbWFfbWFwcGluZ19lcnJvcigmYy0+cGRldi0+ZGV2LCBkbWFfYWRkcikpIHsKLSNpZmRlZiBDT05GSUdfSTJPX0VYVF9BREFQVEVDX0RNQTY0Ci0JCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgJiYgYy0+cGFlX3N1cHBvcnQpIHsKLQkJCSptcHRyKysgPSBjcHVfdG9fbGUzMigweDdDMDIwMDAyKTsKLQkJCSptcHRyKysgPSBjcHVfdG9fbGUzMihQQUdFX1NJWkUpOwotCQl9Ci0jZW5kaWYKLQotCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoc2dfZmxhZ3MgfCBzaXplKTsKLQkJKm1wdHIrKyA9IGNwdV90b19sZTMyKGkyb19kbWFfbG93KGRtYV9hZGRyKSk7Ci0jaWZkZWYgQ09ORklHX0kyT19FWFRfQURBUFRFQ19ETUE2NAotCQlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGMtPnBhZV9zdXBwb3J0KQotCQkJKm1wdHIrKyA9IGNwdV90b19sZTMyKGkyb19kbWFfaGlnaChkbWFfYWRkcikpOwotI2VuZGlmCi0JCSpzZ19wdHIgPSBtcHRyOwotCX0KLQlyZXR1cm4gZG1hX2FkZHI7Ci19OwotCi0vKioKLSAqCWkyb19kbWFfbWFwX3NnIC0gTWFwIGEgU0cgTGlzdCB0byBjb250cm9sbGVyIGFuZCBmaWxsIGluIEkyTyBtZXNzYWdlLgotICoJQGM6IEkyTyBjb250cm9sbGVyCi0gKglAc2c6IFNHIGxpc3QgdG8gYmUgbWFwcGVkCi0gKglAc2dfY291bnQ6IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgU0cgbGlzdAotICoJQGRpcmVjdGlvbjogRE1BX1RPX0RFVklDRSAvIERNQV9GUk9NX0RFVklDRQotICoJQHNnX3B0cjogcG9pbnRlciB0byB0aGUgU0cgbGlzdCBpbnNpZGUgdGhlIEkyTyBtZXNzYWdlCi0gKgotICoJVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCBuZWNlc3NhcnkgRE1BIGhhbmRsaW5nIGFuZCBhbHNvIHdyaXRlcyB0aGUgSTJPCi0gKglTR0wgZWxlbWVudHMgaW50byB0aGUgSTJPIG1lc3NhZ2UuIEZvciBkZXRhaWxzIG9uIERNQSBoYW5kbGluZyBzZWUgYWxzbwotICoJZG1hX21hcF9zZygpLiBUaGUgcG9pbnRlciBzZ19wdHIgd2lsbCBvbmx5IGJlIHNldCB0byB0aGUgZW5kIG9mIHRoZSBTRwotICoJbGlzdCBpZiB0aGUgYWxsb2NhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KLSAqCi0gKglSZXR1cm5zIDAgb24gZmFpbHVyZSBvciAxIG9uIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGkyb19kbWFfbWFwX3NnKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywKKwkJCQkJICAgIHUzMiAqKiBzZ19wdHIpOworZXh0ZXJuIGludCBpMm9fZG1hX21hcF9zZyhzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsCiAJCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBzZ19jb3VudCwKIAkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCSB1MzIgKiogc2dfcHRyKQotewotCXUzMiBzZ19mbGFnczsKLQl1MzIgKm1wdHIgPSAqc2dfcHRyOwotCi0Jc3dpdGNoIChkaXJlY3Rpb24pIHsKLQljYXNlIERNQV9UT19ERVZJQ0U6Ci0JCXNnX2ZsYWdzID0gMHgxNDAwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBETUFfRlJPTV9ERVZJQ0U6Ci0JCXNnX2ZsYWdzID0gMHgxMDAwMDAwMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2dfY291bnQgPSBkbWFfbWFwX3NnKCZjLT5wZGV2LT5kZXYsIHNnLCBzZ19jb3VudCwgZGlyZWN0aW9uKTsKLQlpZiAoIXNnX2NvdW50KQotCQlyZXR1cm4gMDsKLQotI2lmZGVmIENPTkZJR19JMk9fRVhUX0FEQVBURUNfRE1BNjQKLQlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGMtPnBhZV9zdXBwb3J0KSB7Ci0JCSptcHRyKysgPSBjcHVfdG9fbGUzMigweDdDMDIwMDAyKTsKLQkJKm1wdHIrKyA9IGNwdV90b19sZTMyKFBBR0VfU0laRSk7Ci0JfQotI2VuZGlmCi0KLQl3aGlsZSAoc2dfY291bnQtLSA+IDApIHsKLQkJaWYgKCFzZ19jb3VudCkKLQkJCXNnX2ZsYWdzIHw9IDB4QzAwMDAwMDA7Ci0JCSptcHRyKysgPSBjcHVfdG9fbGUzMihzZ19mbGFncyB8IHNnX2RtYV9sZW4oc2cpKTsKLQkJKm1wdHIrKyA9IGNwdV90b19sZTMyKGkyb19kbWFfbG93KHNnX2RtYV9hZGRyZXNzKHNnKSkpOwotI2lmZGVmIENPTkZJR19JMk9fRVhUX0FEQVBURUNfRE1BNjQKLQkJaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSAmJiBjLT5wYWVfc3VwcG9ydCkKLQkJCSptcHRyKysgPSBjcHVfdG9fbGUzMihpMm9fZG1hX2hpZ2goc2dfZG1hX2FkZHJlc3Moc2cpKSk7Ci0jZW5kaWYKLQkJc2cgPSBzZ19uZXh0KHNnKTsKLQl9Ci0JKnNnX3B0ciA9IG1wdHI7Ci0KLQlyZXR1cm4gMTsKLX07Ci0KLS8qKgotICoJaTJvX2RtYV9hbGxvYyAtIEFsbG9jYXRlIERNQSBtZW1vcnkKLSAqCUBkZXY6IHN0cnVjdCBkZXZpY2UgcG9pbnRlciB0byB0aGUgUENJIGRldmljZSBvZiB0aGUgSTJPIGNvbnRyb2xsZXIKLSAqCUBhZGRyOiBpMm9fZG1hIHN0cnVjdCB3aGljaCBzaG91bGQgZ2V0IHRoZSBETUEgYnVmZmVyCi0gKglAbGVuOiBsZW5ndGggb2YgdGhlIG5ldyBETUEgbWVtb3J5Ci0gKglAZ2ZwX21hc2s6IEdGUCBtYXNrCi0gKgotICoJQWxsb2NhdGUgYSBjb2hlcmVudCBETUEgbWVtb3J5IGFuZCB3cml0ZSB0aGUgcG9pbnRlcnMgaW50byBhZGRyLgotICoKLSAqCVJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FTk9NRU0gb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgaTJvX2RtYV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyLAotCQkJCXNpemVfdCBsZW4sIGdmcF90IGdmcF9tYXNrKQotewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCWludCBkbWFfNjQgPSAwOwotCi0JaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSAmJiAocGRldi0+ZG1hX21hc2sgPT0gRE1BXzY0QklUX01BU0spKSB7Ci0JCWRtYV82NCA9IDE7Ci0JCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWFkZHItPnZpcnQgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBsZW4sICZhZGRyLT5waHlzLCBnZnBfbWFzayk7Ci0KLQlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGRtYV82NCkKLQkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaTJvOiB1bmFibGUgdG8gc2V0IDY0LWJpdCBETUEiKTsKLQotCWlmICghYWRkci0+dmlydCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1zZXQoYWRkci0+dmlydCwgMCwgbGVuKTsKLQlhZGRyLT5sZW4gPSBsZW47Ci0KLQlyZXR1cm4gMDsKLX07Ci0KLS8qKgotICoJaTJvX2RtYV9mcmVlIC0gRnJlZSBETUEgbWVtb3J5Ci0gKglAZGV2OiBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2Ugb2YgdGhlIEkyTyBjb250cm9sbGVyCi0gKglAYWRkcjogaTJvX2RtYSBzdHJ1Y3Qgd2hpY2ggY29udGFpbnMgdGhlIERNQSBidWZmZXIKLSAqCi0gKglGcmVlIGEgY29oZXJlbnQgRE1BIG1lbW9yeSBhbmQgc2V0IHZpcnR1YWwgYWRkcmVzcyBvZiBhZGRyIHRvIE5VTEwuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpMm9fZG1hX2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaTJvX2RtYSAqYWRkcikKLXsKLQlpZiAoYWRkci0+dmlydCkgewotCQlpZiAoYWRkci0+cGh5cykKLQkJCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgYWRkci0+bGVuLCBhZGRyLT52aXJ0LAotCQkJCQkgIGFkZHItPnBoeXMpOwotCQllbHNlCi0JCQlrZnJlZShhZGRyLT52aXJ0KTsKLQkJYWRkci0+dmlydCA9IE5VTEw7Ci0JfQotfTsKLQotLyoqCi0gKglpMm9fZG1hX3JlYWxsb2MgLSBSZWFsbG9jIERNQSBtZW1vcnkKLSAqCUBkZXY6IHN0cnVjdCBkZXZpY2UgcG9pbnRlciB0byB0aGUgUENJIGRldmljZSBvZiB0aGUgSTJPIGNvbnRyb2xsZXIKLSAqCUBhZGRyOiBwb2ludGVyIHRvIGEgaTJvX2RtYSBzdHJ1Y3QgRE1BIGJ1ZmZlcgotICoJQGxlbjogbmV3IGxlbmd0aCBvZiBtZW1vcnkKLSAqCUBnZnBfbWFzazogR0ZQIG1hc2sKLSAqCi0gKglJZiB0aGVyZSB3YXMgc29tZXRoaW5nIGFsbG9jYXRlZCBpbiB0aGUgYWRkciwgZnJlZSBpdCBmaXJzdC4gSWYgbGVuID4gMAotICoJdGhhbiB0cnkgdG8gYWxsb2NhdGUgaXQgYW5kIHdyaXRlIHRoZSBhZGRyZXNzZXMgYmFjayB0byB0aGUgYWRkcgotICoJc3RydWN0dXJlLiBJZiBsZW4gPT0gMCBzZXQgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBOVUxMLgotICoKLSAqCVJldHVybnMgdGhlIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGkyb19kbWFfcmVhbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyLAotCQkJCSAgc2l6ZV90IGxlbiwgZ2ZwX3QgZ2ZwX21hc2spCi17Ci0JaTJvX2RtYV9mcmVlKGRldiwgYWRkcik7Ci0KLQlpZiAobGVuKQotCQlyZXR1cm4gaTJvX2RtYV9hbGxvYyhkZXYsIGFkZHIsIGxlbiwgZ2ZwX21hc2spOwotCi0JcmV0dXJuIDA7Ci19OwotCi0vKgotICoJaTJvX3Bvb2xfYWxsb2MgLSBBbGxvY2F0ZSBhbiBzbGFiIGNhY2hlIGFuZCBtZW1wb29sCi0gKglAbWVtcG9vbDogcG9pbnRlciB0byBzdHJ1Y3QgaTJvX3Bvb2wgdG8gd3JpdGUgZGF0YSBpbnRvLgotICoJQG5hbWU6IG5hbWUgd2hpY2ggaXMgdXNlZCB0byBpZGVudGlmeSBjYWNoZQotICoJQHNpemU6IHNpemUgb2YgZWFjaCBvYmplY3QKLSAqCUBtaW5fbnI6IG1pbmltdW0gbnVtYmVyIG9mIG9iamVjdHMKLSAqCi0gKglGaXJzdCBhbGxvY2F0ZXMgYSBzbGFiIGNhY2hlIHdpdGggbmFtZSBhbmQgc2l6ZS4gVGhlbiBhbGxvY2F0ZXMgYQotICoJbWVtcG9vbCB3aGljaCB1c2VzIHRoZSBzbGFiIGNhY2hlIGZvciBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nLgotICoKLSAqCVJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgaTJvX3Bvb2xfYWxsb2Moc3RydWN0IGkyb19wb29sICpwb29sLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCSBzaXplX3Qgc2l6ZSwgaW50IG1pbl9ucikKLXsKLQlwb29sLT5uYW1lID0ga21hbGxvYyhzdHJsZW4obmFtZSkgKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBvb2wtPm5hbWUpCi0JCWdvdG8gZXhpdDsKLQlzdHJjcHkocG9vbC0+bmFtZSwgbmFtZSk7Ci0KLQlwb29sLT5zbGFiID0KLQkgICAga21lbV9jYWNoZV9jcmVhdGUocG9vbC0+bmFtZSwgc2l6ZSwgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKLQlpZiAoIXBvb2wtPnNsYWIpCi0JCWdvdG8gZnJlZV9uYW1lOwotCi0JcG9vbC0+bWVtcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChtaW5fbnIsIHBvb2wtPnNsYWIpOwotCWlmICghcG9vbC0+bWVtcG9vbCkKLQkJZ290byBmcmVlX3NsYWI7Ci0KLQlyZXR1cm4gMDsKLQotICAgICAgZnJlZV9zbGFiOgotCWttZW1fY2FjaGVfZGVzdHJveShwb29sLT5zbGFiKTsKLQotICAgICAgZnJlZV9uYW1lOgotCWtmcmVlKHBvb2wtPm5hbWUpOwotCi0gICAgICBleGl0OgotCXJldHVybiAtRU5PTUVNOwotfTsKLQotLyoKLSAqCWkyb19wb29sX2ZyZWUgLSBGcmVlIHNsYWIgY2FjaGUgYW5kIG1lbXBvb2wgYWdhaW4KLSAqCUBtZW1wb29sOiBwb2ludGVyIHRvIHN0cnVjdCBpMm9fcG9vbCB3aGljaCBzaG91bGQgYmUgZnJlZWQKLSAqCi0gKglOb3RlIHRoYXQgeW91IGhhdmUgdG8gcmV0dXJuIGFsbCBvYmplY3RzIHRvIHRoZSBtZW1wb29sIGFnYWluIGJlZm9yZQotICoJY2FsbGluZyBpMm9fcG9vbF9mcmVlKCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpMm9fcG9vbF9mcmVlKHN0cnVjdCBpMm9fcG9vbCAqcG9vbCkKLXsKLQltZW1wb29sX2Rlc3Ryb3kocG9vbC0+bWVtcG9vbCk7Ci0Ja21lbV9jYWNoZV9kZXN0cm95KHBvb2wtPnNsYWIpOwotCWtmcmVlKHBvb2wtPm5hbWUpOwotfTsKLQorCQkJCSB1MzIgKiogc2dfcHRyKTsKK2V4dGVybiBpbnQgaTJvX2RtYV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyLCBzaXplX3QgbGVuKTsKK2V4dGVybiB2b2lkIGkyb19kbWFfZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyKTsKK2V4dGVybiBpbnQgaTJvX2RtYV9yZWFsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGkyb19kbWEgKmFkZHIsCisJCQkJCQkJCXNpemVfdCBsZW4pOworZXh0ZXJuIGludCBpMm9fcG9vbF9hbGxvYyhzdHJ1Y3QgaTJvX3Bvb2wgKnBvb2wsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHNpemVfdCBzaXplLCBpbnQgbWluX25yKTsKK2V4dGVybiB2b2lkIGkyb19wb29sX2ZyZWUoc3RydWN0IGkyb19wb29sICpwb29sKTsKIC8qIEkyTyBkcml2ZXIgKE9TTSkgZnVuY3Rpb25zICovCiBleHRlcm4gaW50IGkyb19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGkyb19kcml2ZXIgKik7CiBleHRlcm4gdm9pZCBpMm9fZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGkyb19kcml2ZXIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oIGIvaW5jbHVkZS9saW51eC9pY21wdjYuaAppbmRleCAwMzA2NzQ0Li5hOTNhOGRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKQEAgLTQwLDE2ICs0MCwxOCBAQAogICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wdjZfbmRfcmEgewogCQkJX191OAkJaG9wX2xpbWl0OwogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQotCQkJX191OAkJcmVzZXJ2ZWQ6NCwKKwkJCV9fdTgJCXJlc2VydmVkOjMsCiAJCQkJCXJvdXRlcl9wcmVmOjIsCisJCQkJCWhvbWVfYWdlbnQ6MSwKIAkJCQkJb3RoZXI6MSwKIAkJCQkJbWFuYWdlZDoxOwogCiAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKIAkJCV9fdTgJCW1hbmFnZWQ6MSwKIAkJCQkJb3RoZXI6MSwKKwkJCQkJaG9tZV9hZ2VudDoxLAogCQkJCQlyb3V0ZXJfcHJlZjoyLAotCQkJCQlyZXNlcnZlZDo0OworCQkJCQlyZXNlcnZlZDozOwogI2Vsc2UKICNlcnJvcgkiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggYTlkODJkNi4uODllNTNjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC00OCwxMiArNDgsNiBAQAogI2RlZmluZSBFUlJPUl9SRVNFVAkzCS8qIFJlc2V0IGNvbnRyb2xsZXIgZXZlcnkgNHRoIHJldHJ5ICovCiAjZGVmaW5lIEVSUk9SX1JFQ0FMCTEJLyogUmVjYWxpYnJhdGUgZXZlcnkgMm5kIHJldHJ5ICovCiAKLS8qCi0gKiBzdGF0ZSBmbGFncwotICovCi0KLSNkZWZpbmUgRE1BX1BJT19SRVRSWQkxCS8qIHJldHJ5aW5nIGluIFBJTyAqLwotCiAjZGVmaW5lIEhXSUYoZHJpdmUpCQkoKGlkZV9od2lmX3QgKikoKGRyaXZlKS0+aHdpZikpCiAjZGVmaW5lIEhXR1JPVVAoZHJpdmUpCQkoKGlkZV9od2dyb3VwX3QgKikoSFdJRihkcml2ZSktPmh3Z3JvdXApKQogCkBAIC0xNjIsNiArMTU2LDggQEAKICAqLwogI2RlZmluZSBSRVFfRFJJVkVfUkVTRVQJCTB4MjAKICNkZWZpbmUgUkVRX0RFVlNFVF9FWEVDCQkweDIxCisjZGVmaW5lIFJFUV9QQVJLX0hFQURTCQkweDIyCisjZGVmaW5lIFJFUV9VTlBBUktfSEVBRFMJMHgyMwogCiAvKgogICogQ2hlY2sgZm9yIGFuIGludGVycnVwdCBhbmQgYWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCBzdGF0dXMKQEAgLTI2OCw4ICsyNjQsNiBAQAogICogc2V0X2dlb21ldHJ5CTogcmVzcGVjaWZ5IGRyaXZlIGdlb21ldHJ5CiAgKiByZWNhbGlicmF0ZQk6IHNlZWsgdG8gY3lsIDAKICAqIHNldF9tdWx0bW9kZQk6IHNldCBtdWx0bW9kZSBjb3VudAotICogc2V0X3R1bmUJOiB0dW5lIGludGVyZmFjZSBmb3IgZHJpdmUKLSAqIHNlcnZpY2VkCTogc2VydmljZSBjb21tYW5kCiAgKiByZXNlcnZlZAk6IHVudXNlZAogICovCiB0eXBlZGVmIHVuaW9uIHsKQEAgLTI3OCw0MyArMjcyLDExIEBACiAJCXVuc2lnbmVkIHNldF9nZW9tZXRyeQk6IDE7CiAJCXVuc2lnbmVkIHJlY2FsaWJyYXRlCTogMTsKIAkJdW5zaWduZWQgc2V0X211bHRtb2RlCTogMTsKLQkJdW5zaWduZWQgc2V0X3R1bmUJOiAxOwotCQl1bnNpZ25lZCBzZXJ2aWNlZAk6IDE7Ci0JCXVuc2lnbmVkIHJlc2VydmVkCTogMzsKKwkJdW5zaWduZWQgcmVzZXJ2ZWQJOiA1OwogCX0gYjsKIH0gc3BlY2lhbF90OwogCiAvKgotICogQVRBLUlERSBTZWxlY3QgUmVnaXN0ZXIsIGFrYSBEZXZpY2UtSGVhZAotICoKLSAqIGhlYWQJCTogYWx3YXlzIHplcm9zIGhlcmUKLSAqIHVuaXQJCTogZHJpdmUgc2VsZWN0IG51bWJlcjogMC8xCi0gKiBiaXQ1CQk6IGFsd2F5cyAxCi0gKiBsYmEJCTogdXNpbmcgTEJBIGluc3RlYWQgb2YgQ0hTCi0gKiBiaXQ3CQk6IGFsd2F5cyAxCi0gKi8KLXR5cGVkZWYgdW5pb24gewotCXVuc2lnbmVkIGFsbAkJCTogODsKLQlzdHJ1Y3QgewotI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQotCQl1bnNpZ25lZCBoZWFkCQk6IDQ7Ci0JCXVuc2lnbmVkIHVuaXQJCTogMTsKLQkJdW5zaWduZWQgYml0NQkJOiAxOwotCQl1bnNpZ25lZCBsYmEJCTogMTsKLQkJdW5zaWduZWQgYml0NwkJOiAxOwotI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCi0JCXVuc2lnbmVkIGJpdDcJCTogMTsKLQkJdW5zaWduZWQgbGJhCQk6IDE7Ci0JCXVuc2lnbmVkIGJpdDUJCTogMTsKLQkJdW5zaWduZWQgdW5pdAkJOiAxOwotCQl1bnNpZ25lZCBoZWFkCQk6IDQ7Ci0jZWxzZQotI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgotI2VuZGlmCi0JfSBiOwotfSBzZWxlY3RfdCwgYXRhX3NlbGVjdF90OwotCi0vKgogICogU3RhdHVzIHJldHVybmVkIGZyb20gdmFyaW91cyBpZGVfIGZ1bmN0aW9ucwogICovCiB0eXBlZGVmIGVudW0gewpAQCAtMzIyLDY5OSArMjg0LDYgQEAKIAlpZGVfc3RhcnRlZCwJLyogYSBkcml2ZSBvcGVyYXRpb24gd2FzIHN0YXJ0ZWQsIGhhbmRsZXIgd2FzIHNldCAqLwogfSBpZGVfc3RhcnRzdG9wX3Q7CiAKLXN0cnVjdCBpZGVfZGV2c2V0Owotc3RydWN0IGlkZV9kcml2ZXJfczsKLQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERUFDUEkKLXN0cnVjdCBpZGVfYWNwaV9kcml2ZV9saW5rOwotc3RydWN0IGlkZV9hY3BpX2h3aWZfbGluazsKLSNlbmRpZgotCi0vKiBBVEFQSSBkZXZpY2UgZmxhZ3MgKi8KLWVudW0gewotCUlERV9BRkxBR19EUlFfSU5URVJSVVBUCQk9ICgxIDw8IDApLAotCUlERV9BRkxBR19NRURJQV9DSEFOR0VECQk9ICgxIDw8IDEpLAotCS8qIERyaXZlIGNhbm5vdCBsb2NrIHRoZSBkb29yLiAqLwotCUlERV9BRkxBR19OT19ET09STE9DSwkJPSAoMSA8PCAyKSwKLQotCS8qIGlkZS1jZCAqLwotCS8qIERyaXZlIGNhbm5vdCBlamVjdCB0aGUgZGlzYy4gKi8KLQlJREVfQUZMQUdfTk9fRUpFQ1QJCT0gKDEgPDwgMyksCi0JLyogRHJpdmUgaXMgYSBwcmUgQVRBUEkgMS4yIGRyaXZlLiAqLwotCUlERV9BRkxBR19QUkVfQVRBUEkxMgkJPSAoMSA8PCA0KSwKLQkvKiBUT0MgYWRkcmVzc2VzIGFyZSBpbiBCQ0QuICovCi0JSURFX0FGTEFHX1RPQ0FERFJfQVNfQkNECT0gKDEgPDwgNSksCi0JLyogVE9DIHRyYWNrIG51bWJlcnMgYXJlIGluIEJDRC4gKi8KLQlJREVfQUZMQUdfVE9DVFJBQ0tTX0FTX0JDRAk9ICgxIDw8IDYpLAotCS8qCi0JICogRHJpdmUgZG9lcyBub3QgcHJvdmlkZSBkYXRhIGluIG11bHRpcGxlcyBvZiBTRUNUT1JfU0laRQotCSAqIHdoZW4gbW9yZSB0aGFuIG9uZSBpbnRlcnJ1cHQgaXMgbmVlZGVkLgotCSAqLwotCUlERV9BRkxBR19MSU1JVF9ORlJBTUVTCQk9ICgxIDw8IDcpLAotCS8qIFNlZWtpbmcgaW4gcHJvZ3Jlc3MuICovCi0JSURFX0FGTEFHX1NFRUtJTkcJCT0gKDEgPDwgOCksCi0JLyogU2F2ZWQgVE9DIGluZm9ybWF0aW9uIGlzIGN1cnJlbnQuICovCi0JSURFX0FGTEFHX1RPQ19WQUxJRAkJPSAoMSA8PCA5KSwKLQkvKiBXZSB0aGluayB0aGF0IHRoZSBkcml2ZSBkb29yIGlzIGxvY2tlZC4gKi8KLQlJREVfQUZMQUdfRE9PUl9MT0NLRUQJCT0gKDEgPDwgMTApLAotCS8qIFNFVF9DRF9TUEVFRCBjb21tYW5kIGlzIHVuc3VwcG9ydGVkLiAqLwotCUlERV9BRkxBR19OT19TUEVFRF9TRUxFQ1QJPSAoMSA8PCAxMSksCi0JSURFX0FGTEFHX1ZFUlRPU18zMDBfU1NECT0gKDEgPDwgMTIpLAotCUlERV9BRkxBR19WRVJUT1NfNjAwX0VTRAk9ICgxIDw8IDEzKSwKLQlJREVfQUZMQUdfU0FOWU9fM0NECQk9ICgxIDw8IDE0KSwKLQlJREVfQUZMQUdfRlVMTF9DQVBTX1BBR0UJPSAoMSA8PCAxNSksCi0JSURFX0FGTEFHX1BMQVlfQVVESU9fT0sJCT0gKDEgPDwgMTYpLAotCUlERV9BRkxBR19MRV9TUEVFRF9GSUVMRFMJPSAoMSA8PCAxNyksCi0KLQkvKiBpZGUtZmxvcHB5ICovCi0JLyogRm9ybWF0IGluIHByb2dyZXNzICovCi0JSURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUwk9ICgxIDw8IDE4KSwKLQkvKiBBdm9pZCBjb21tYW5kcyBub3Qgc3VwcG9ydGVkIGluIENsaWsgZHJpdmUgKi8KLQlJREVfQUZMQUdfQ0xJS19EUklWRQkJPSAoMSA8PCAxOSksCi0JLyogUmVxdWlyZXMgQkggYWxnb3JpdGhtIGZvciBwYWNrZXRzICovCi0JSURFX0FGTEFHX1pJUF9EUklWRQkJPSAoMSA8PCAyMCksCi0JLyogV3JpdGUgcHJvdGVjdCAqLwotCUlERV9BRkxBR19XUAkJCT0gKDEgPDwgMjEpLAotCS8qIFN1cHBvcnRzIGZvcm1hdCBwcm9ncmVzcyByZXBvcnQgKi8KLQlJREVfQUZMQUdfU1JGUAkJCT0gKDEgPDwgMjIpLAotCi0JLyogaWRlLXRhcGUgKi8KLQlJREVfQUZMQUdfSUdOT1JFX0RTQwkJPSAoMSA8PCAyMyksCi0JLyogMCBXaGVuIHRoZSB0YXBlIHBvc2l0aW9uIGlzIHVua25vd24gKi8KLQlJREVfQUZMQUdfQUREUkVTU19WQUxJRAkJPSAoMSA8PAkyNCksCi0JLyogRGV2aWNlIGFscmVhZHkgb3BlbmVkICovCi0JSURFX0FGTEFHX0JVU1kJCQk9ICgxIDw8IDI1KSwKLQkvKiBBdHRlbXB0IHRvIGF1dG8tZGV0ZWN0IHRoZSBjdXJyZW50IHVzZXIgYmxvY2sgc2l6ZSAqLwotCUlERV9BRkxBR19ERVRFQ1RfQlMJCT0gKDEgPDwgMjYpLAotCS8qIEN1cnJlbnRseSBvbiBhIGZpbGVtYXJrICovCi0JSURFX0FGTEFHX0ZJTEVNQVJLCQk9ICgxIDw8IDI3KSwKLQkvKiAwID0gbm8gdGFwZSBpcyBsb2FkZWQsIHNvIHdlIGRvbid0IHJld2luZCBhZnRlciBlamVjdGluZyAqLwotCUlERV9BRkxBR19NRURJVU1fUFJFU0VOVAk9ICgxIDw8IDI4KSwKLQotCUlERV9BRkxBR19OT19BVVRPQ0xPU0UJCT0gKDEgPDwgMjkpLAotfTsKLQotc3RydWN0IGlkZV9kcml2ZV9zIHsKLQljaGFyCQluYW1lWzRdOwkvKiBkcml2ZSBuYW1lLCBzdWNoIGFzICJoZGEiICovCi0gICAgICAgIGNoYXIgICAgICAgICAgICBkcml2ZXJfcmVxWzEwXTsJLyogcmVxdWVzdHMgc3BlY2lmaWMgZHJpdmVyICovCi0KLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZQkqcXVldWU7CS8qIHJlcXVlc3QgcXVldWUgKi8KLQotCXN0cnVjdCByZXF1ZXN0CQkqcnE7CS8qIGN1cnJlbnQgcmVxdWVzdCAqLwotCXN0cnVjdCBpZGVfZHJpdmVfcyAJKm5leHQ7CS8qIGNpcmN1bGFyIGxpc3Qgb2YgaHdncm91cCBkcml2ZXMgKi8KLQl2b2lkCQkqZHJpdmVyX2RhdGE7CS8qIGV4dHJhIGRyaXZlciBkYXRhICovCi0JdTE2CQkJKmlkOwkvKiBpZGVudGlmaWNhdGlvbiBpbmZvICovCi0jaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwkvKiAvcHJvYy9pZGUvIGRpcmVjdG9yeSBlbnRyeSAqLwotCWNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgKnNldHRpbmdzOyAvKiAvcHJvYy9pZGUvIGRyaXZlIHNldHRpbmdzICovCi0jZW5kaWYKLQlzdHJ1Y3QgaHdpZl9zCQkqaHdpZjsJLyogYWN0dWFsbHkgKGlkZV9od2lmX3QgKikgKi8KLQotCXVuc2lnbmVkIGxvbmcgc2xlZXA7CQkvKiBzbGVlcCB1bnRpbCB0aGlzIHRpbWUgKi8KLQl1bnNpZ25lZCBsb25nIHNlcnZpY2Vfc3RhcnQ7CS8qIHRpbWUgd2Ugc3RhcnRlZCBsYXN0IHJlcXVlc3QgKi8KLQl1bnNpZ25lZCBsb25nIHNlcnZpY2VfdGltZTsJLyogc2VydmljZSB0aW1lIG9mIGxhc3QgcmVxdWVzdCAqLwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsJCS8qIG1heCB0aW1lIHRvIHdhaXQgZm9yIGlycSAqLwotCi0Jc3BlY2lhbF90CXNwZWNpYWw7CS8qIHNwZWNpYWwgYWN0aW9uIGZsYWdzICovCi0Jc2VsZWN0X3QJc2VsZWN0OwkJLyogYmFzaWMgZHJpdmUvaGVhZCBzZWxlY3QgcmVnIHZhbHVlICovCi0KLQl1OAlyZXRyeV9waW87CQkvKiByZXRyeWluZyBkbWEgY2FwYWJsZSBob3N0IGluIHBpbyAqLwotCXU4CXN0YXRlOwkJCS8qIHJldHJ5IHN0YXRlICovCi0JdTgJd2FpdGluZ19mb3JfZG1hOwkvKiBkbWEgY3VycmVudGx5IGluIHByb2dyZXNzICovCi0KLQl1bnNpZ25lZCBrZWVwX3NldHRpbmdzCTogMTsJLyogcmVzdG9yZSBzZXR0aW5ncyBhZnRlciBkcml2ZSByZXNldCAqLwotCXVuc2lnbmVkIHVzaW5nX2RtYQk6IDE7CS8qIGRpc2sgaXMgdXNpbmcgZG1hIGZvciByZWFkL3dyaXRlICovCi0JdW5zaWduZWQgdW5tYXNrCQk6IDE7CS8qIG9rYXkgdG8gdW5tYXNrIG90aGVyIGlycXMgKi8KLQl1bnNpZ25lZCBub2ZsdXNoCTogMTsJLyogZG9uJ3QgYXR0ZW1wdCBmbHVzaGVzICovCi0JdW5zaWduZWQgZHNjX292ZXJsYXAJOiAxOwkvKiBEU0Mgb3ZlcmxhcCAqLwotCXVuc2lnbmVkIG5pY2UxCQk6IDE7CS8qIGdpdmUgcG90ZW50aWFsIGV4Y2VzcyBiYW5kd2lkdGggKi8KLQl1bnNpZ25lZCBwcmVzZW50CTogMTsJLyogZHJpdmUgaXMgcGh5c2ljYWxseSBwcmVzZW50ICovCi0JdW5zaWduZWQgZGVhZAkJOiAxOwkvKiBkZXZpY2UgZWplY3RlZCBoaW50ICovCi0JdW5zaWduZWQgaWRfcmVhZAk6IDE7CS8qIDE9aWQgcmVhZCBmcm9tIGRpc2sgMCA9IHN5bnRoZXRpYyAqLwotCXVuc2lnbmVkIG5vcHJvYmUgCTogMTsJLyogZnJvbTogIGhkeD1ub3Byb2JlICovCi0JdW5zaWduZWQgcmVtb3ZhYmxlCTogMTsJLyogMSBpZiBuZWVkIHRvIGRvIGNoZWNrX21lZGlhX2NoYW5nZSAqLwotCXVuc2lnbmVkIGF0dGFjaAkJOiAxOwkvKiBuZWVkZWQgZm9yIHJlbW92YWJsZSBkZXZpY2VzICovCi0JdW5zaWduZWQgZm9yY2VkX2dlb20JOiAxOwkvKiAxIGlmIGhkeD1jLGgscyB3YXMgZ2l2ZW4gYXQgYm9vdCAqLwotCXVuc2lnbmVkIG5vX3VubWFzawk6IDE7CS8qIGRpc2FsbG93IHNldHRpbmcgdW5tYXNrIGJpdCAqLwotCXVuc2lnbmVkIG5vX2lvXzMyYml0CTogMTsJLyogZGlzYWxsb3cgZW5hYmxpbmcgMzJiaXQgSS9PICovCi0JdW5zaWduZWQgZG9vcmxvY2tpbmcJOiAxOwkvKiBmb3IgcmVtb3ZhYmxlIG9ubHk6IGRvb3IgbG9jay91bmxvY2sgd29ya3MgKi8KLQl1bnNpZ25lZCBub2RtYQkJOiAxOwkvKiBkaXNhbGxvdyBETUEgKi8KLQl1bnNpZ25lZCBibG9ja2VkICAgICAgICA6IDE7CS8qIDE9cG93ZXJtYW5hZ21lbnQgdG9sZCB1cyBub3QgdG8gZG8gYW55dGhpbmcsIHNvIHNsZWVwIG5pY2VseSAqLwotCXVuc2lnbmVkIHNjc2kJCTogMTsJLyogMD1kZWZhdWx0LCAxPWlkZS1zY3NpIGVtdWxhdGlvbiAqLwotCXVuc2lnbmVkIHNsZWVwaW5nCTogMTsJLyogMT1zbGVlcGluZyAmIHNsZWVwIGZpZWxkIHZhbGlkICovCi0JdW5zaWduZWQgcG9zdF9yZXNldAk6IDE7Ci0JdW5zaWduZWQgdWRtYTMzX3dhcm5lZAk6IDE7Ci0JdW5zaWduZWQgYWRkcmVzc2luZwk6IDI7CS8qIDA9MjgtYml0LCAxPTQ4LWJpdCwgMj00OC1iaXQgZG9pbmcgMjgtYml0ICovCi0JdW5zaWduZWQgd2NhY2hlCQk6IDE7CS8qIHN0YXR1cyBvZiB3cml0ZSBjYWNoZSAqLwotCXVuc2lnbmVkIG5vd2VycgkJOiAxOwkvKiB1c2VkIGZvciBpZ25vcmluZyBBVEFfREYgKi8KLQotICAgICAgICB1OAlxdWlya19saXN0OwkvKiBjb25zaWRlcmVkIHF1aXJreSwgc2V0IGZvciBhIHNwZWNpZmljIGhvc3QgKi8KLSAgICAgICAgdTgJaW5pdF9zcGVlZDsJLyogdHJhbnNmZXIgcmF0ZSBzZXQgYXQgYm9vdCAqLwotICAgICAgICB1OAljdXJyZW50X3NwZWVkOwkvKiBjdXJyZW50IHRyYW5zZmVyIHJhdGUgc2V0ICovCi0JdTgJZGVzaXJlZF9zcGVlZDsJLyogZGVzaXJlZCB0cmFuc2ZlciByYXRlIHNldCAqLwotICAgICAgICB1OAlkbjsJCS8qIG5vdyB3aWRlIHNwcmVhZCB1c2UgKi8KLQl1OAlhY291c3RpYzsJLyogYWNvdXN0aWMgbWFuYWdlbWVudCAqLwotCXU4CW1lZGlhOwkJLyogZGlzaywgY2Ryb20sIHRhcGUsIGZsb3BweSwgLi4uICovCi0JdTgJcmVhZHlfc3RhdDsJLyogbWluIHN0YXR1cyB2YWx1ZSBmb3IgZHJpdmUgcmVhZHkgKi8KLQl1OAltdWx0X2NvdW50OwkvKiBjdXJyZW50IG11bHRpcGxlIHNlY3RvciBzZXR0aW5nICovCi0JdTgJbXVsdF9yZXE7CS8qIHJlcXVlc3RlZCBtdWx0aXBsZSBzZWN0b3Igc2V0dGluZyAqLwotCXU4CXR1bmVfcmVxOwkvKiByZXF1ZXN0ZWQgZHJpdmUgdHVuaW5nIHNldHRpbmcgKi8KLQl1OAlpb18zMmJpdDsJLyogMD0xNi1iaXQsIDE9MzItYml0LCAyLzM9MzJiaXQrc3luYyAqLwotCXU4CWJhZF93c3RhdDsJLyogdXNlZCBmb3IgaWdub3JpbmcgQVRBX0RGICovCi0JdTgJaGVhZDsJCS8qICJyZWFsIiBudW1iZXIgb2YgaGVhZHMgKi8KLQl1OAlzZWN0OwkJLyogInJlYWwiIHNlY3RvcnMgcGVyIHRyYWNrICovCi0JdTgJYmlvc19oZWFkOwkvKiBCSU9TL2ZkaXNrL0xJTE8gbnVtYmVyIG9mIGhlYWRzICovCi0JdTgJYmlvc19zZWN0OwkvKiBCSU9TL2ZkaXNrL0xJTE8gc2VjdG9ycyBwZXIgdHJhY2sgKi8KLQotCXVuc2lnbmVkIGludAliaW9zX2N5bDsJLyogQklPUy9mZGlzay9MSUxPIG51bWJlciBvZiBjeWxzICovCi0JdW5zaWduZWQgaW50CWN5bDsJCS8qICJyZWFsIiBudW1iZXIgb2YgY3lscyAqLwotCXVuc2lnbmVkIGludAlkcml2ZV9kYXRhOwkvKiB1c2VkIGJ5IHNldF9waW9fbW9kZS9zZWxlY3Rwcm9jICovCi0JdW5zaWduZWQgaW50CWZhaWx1cmVzOwkvKiBjdXJyZW50IGZhaWx1cmUgY291bnQgKi8KLQl1bnNpZ25lZCBpbnQJbWF4X2ZhaWx1cmVzOwkvKiBtYXhpbXVtIGFsbG93ZWQgZmFpbHVyZSBjb3VudCAqLwotCXU2NAkJcHJvYmVkX2NhcGFjaXR5Oy8qIGluaXRpYWwgcmVwb3J0ZWQgbWVkaWEgY2FwYWNpdHkgKGlkZS1jZCBvbmx5IGN1cnJlbnRseSkgKi8KLQotCXU2NAkJY2FwYWNpdHk2NDsJLyogdG90YWwgbnVtYmVyIG9mIHNlY3RvcnMgKi8KLQotCWludAkJbHVuOwkJLyogbG9naWNhbCB1bml0ICovCi0JaW50CQljcmNfY291bnQ7CS8qIGNyYyBjb3VudGVyIHRvIHJlZHVjZSBkcml2ZSBzcGVlZCAqLwotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERUFDUEkKLQlzdHJ1Y3QgaWRlX2FjcGlfZHJpdmVfbGluayAqYWNwaWRhdGE7Ci0jZW5kaWYKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGRldmljZQlnZW5kZXY7Ci0Jc3RydWN0IGNvbXBsZXRpb24gZ2VuZGV2X3JlbF9jb21wOwkvKiB0byBkZWFsIHdpdGggZGV2aWNlIHJlbGVhc2UoKSAqLwotCi0JLyogY2FsbGJhY2sgZm9yIHBhY2tldCBjb21tYW5kcyAqLwotCXZvaWQgKCpwY19jYWxsYmFjaykoc3RydWN0IGlkZV9kcml2ZV9zICopOwotCi0JdW5zaWduZWQgbG9uZyBhdGFwaV9mbGFnczsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IGlkZV9kcml2ZV9zIGlkZV9kcml2ZV90OwotCi0jZGVmaW5lIHRvX2lkZV9kZXZpY2UoZGV2KWNvbnRhaW5lcl9vZihkZXYsIGlkZV9kcml2ZV90LCBnZW5kZXYpCi0KLXN0cnVjdCBpZGVfdGFza19zOwotc3RydWN0IGlkZV9wb3J0X2luZm87Ci0KLXN0cnVjdCBpZGVfdHBfb3BzIHsKLQl2b2lkCSgqZXhlY19jb21tYW5kKShzdHJ1Y3QgaHdpZl9zICosIHU4KTsKLQl1OAkoKnJlYWRfc3RhdHVzKShzdHJ1Y3QgaHdpZl9zICopOwotCXU4CSgqcmVhZF9hbHRzdGF0dXMpKHN0cnVjdCBod2lmX3MgKik7Ci0JdTgJKCpyZWFkX3NmZl9kbWFfc3RhdHVzKShzdHJ1Y3QgaHdpZl9zICopOwotCi0Jdm9pZAkoKnNldF9pcnEpKHN0cnVjdCBod2lmX3MgKiwgaW50KTsKLQotCXZvaWQJKCp0Zl9sb2FkKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX3Rhc2tfcyAqKTsKLQl2b2lkCSgqdGZfcmVhZCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV90YXNrX3MgKik7Ci0KLQl2b2lkCSgqaW5wdXRfZGF0YSkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgdm9pZCAqLAotCQkJICAgICAgdW5zaWduZWQgaW50KTsKLQl2b2lkCSgqb3V0cHV0X2RhdGEpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHZvaWQgKiwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQpOwotfTsKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGRlZmF1bHRfdHBfb3BzOwotCi0vKioKLSAqIHN0cnVjdCBpZGVfcG9ydF9vcHMgLSBJREUgcG9ydCBvcGVyYXRpb25zCi0gKgotICogQGluaXRfZGV2OgkJaG9zdCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBvZiBhIGRldmljZQotICogQHNldF9waW9fbW9kZToJcm91dGluZSB0byBwcm9ncmFtIGhvc3QgZm9yIFBJTyBtb2RlCi0gKiBAc2V0X2RtYV9tb2RlOglyb3V0aW5lIHRvIHByb2dyYW0gaG9zdCBmb3IgRE1BIG1vZGUKLSAqIEBzZWxlY3Rwcm9jOgkJdHdlYWtzIGhhcmR3YXJlIHRvIHNlbGVjdCBkcml2ZQotICogQHJlc2V0X3BvbGw6CQljaGlwc2V0IHBvbGxpbmcgYmFzZWQgb24gaGJhIHNwZWNpZmljcwotICogQHByZV9yZXNldDoJCWNoaXBzZXQgc3BlY2lmaWMgY2hhbmdlcyB0byBkZWZhdWx0IGZvciBkZXZpY2UtaGJhIHJlc2V0cwotICogQHJlc2V0cHJvYzoJCXJvdXRpbmUgdG8gcmVzZXQgY29udHJvbGxlciBhZnRlciBhIGRpc2sgcmVzZXQKLSAqIEBtYXNrcHJvYzoJCXNwZWNpYWwgaG9zdCBtYXNraW5nIGZvciBkcml2ZSBzZWxlY3Rpb24KLSAqIEBxdWlya3Byb2M6CQljaGVjayBob3N0J3MgZHJpdmUgcXVpcmsgbGlzdAotICoKLSAqIEBtZG1hX2ZpbHRlcjoJZmlsdGVyIE1ETUEgbW9kZXMKLSAqIEB1ZG1hX2ZpbHRlcjoJZmlsdGVyIFVETUEgbW9kZXMKLSAqCi0gKiBAY2FibGVfZGV0ZWN0OglkZXRlY3QgY2FibGUgdHlwZQotICovCi1zdHJ1Y3QgaWRlX3BvcnRfb3BzIHsKLQl2b2lkCSgqaW5pdF9kZXYpKGlkZV9kcml2ZV90ICopOwotCXZvaWQJKCpzZXRfcGlvX21vZGUpKGlkZV9kcml2ZV90ICosIGNvbnN0IHU4KTsKLQl2b2lkCSgqc2V0X2RtYV9tb2RlKShpZGVfZHJpdmVfdCAqLCBjb25zdCB1OCk7Ci0Jdm9pZAkoKnNlbGVjdHByb2MpKGlkZV9kcml2ZV90ICopOwotCWludAkoKnJlc2V0X3BvbGwpKGlkZV9kcml2ZV90ICopOwotCXZvaWQJKCpwcmVfcmVzZXQpKGlkZV9kcml2ZV90ICopOwotCXZvaWQJKCpyZXNldHByb2MpKGlkZV9kcml2ZV90ICopOwotCXZvaWQJKCptYXNrcHJvYykoaWRlX2RyaXZlX3QgKiwgaW50KTsKLQl2b2lkCSgqcXVpcmtwcm9jKShpZGVfZHJpdmVfdCAqKTsKLQotCXU4CSgqbWRtYV9maWx0ZXIpKGlkZV9kcml2ZV90ICopOwotCXU4CSgqdWRtYV9maWx0ZXIpKGlkZV9kcml2ZV90ICopOwotCi0JdTgJKCpjYWJsZV9kZXRlY3QpKHN0cnVjdCBod2lmX3MgKik7Ci19OwotCi1zdHJ1Y3QgaWRlX2RtYV9vcHMgewotCXZvaWQJKCpkbWFfaG9zdF9zZXQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBpbnQpOwotCWludAkoKmRtYV9zZXR1cCkoc3RydWN0IGlkZV9kcml2ZV9zICopOwotCXZvaWQJKCpkbWFfZXhlY19jbWQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCB1OCk7Ci0Jdm9pZAkoKmRtYV9zdGFydCkoc3RydWN0IGlkZV9kcml2ZV9zICopOwotCWludAkoKmRtYV9lbmQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKLQlpbnQJKCpkbWFfdGVzdF9pcnEpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKLQl2b2lkCSgqZG1hX2xvc3RfaXJxKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7Ci0Jdm9pZAkoKmRtYV90aW1lb3V0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7Ci19OwotCi1zdHJ1Y3QgaWRlX2hvc3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGh3aWZfcyB7Ci0Jc3RydWN0IGh3aWZfcyAqbmV4dDsJCS8qIGZvciBsaW5rZWQtbGlzdCBpbiBpZGVfaHdncm91cF90ICovCi0Jc3RydWN0IGh3aWZfcyAqbWF0ZTsJCS8qIG90aGVyIGh3aWYgZnJvbSBzYW1lIFBDSSBjaGlwICovCi0Jc3RydWN0IGh3Z3JvdXBfcyAqaHdncm91cDsJLyogYWN0dWFsbHkgKGlkZV9od2dyb3VwX3QgKikgKi8KLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7CS8qIC9wcm9jL2lkZS8gZGlyZWN0b3J5IGVudHJ5ICovCi0KLQlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7Ci0KLQljaGFyIG5hbWVbNl07CQkJLyogbmFtZSBvZiBpbnRlcmZhY2UsIGVnLiAiaWRlMCIgKi8KLQotCXN0cnVjdCBpZGVfaW9fcG9ydHMJaW9fcG9ydHM7Ci0KLQl1bnNpZ25lZCBsb25nCXNhdGFfc2NyW1NBVEFfTlJfUE9SVFNdOwotCi0JaWRlX2RyaXZlX3QJZHJpdmVzW01BWF9EUklWRVNdOwkvKiBkcml2ZSBpbmZvICovCi0KLQl1OCBtYWpvcjsJLyogb3VyIG1ham9yIG51bWJlciAqLwotCXU4IGluZGV4OwkvKiAwIGZvciBpZGUwOyAxIGZvciBpZGUxOyAuLi4gKi8KLQl1OCBjaGFubmVsOwkvKiBmb3IgZHVhbC1wb3J0IGNoaXBzOiAwPXByaW1hcnksIDE9c2Vjb25kYXJ5ICovCi0KLQl1MzIgaG9zdF9mbGFnczsKLQotCXU4IHBpb19tYXNrOwotCi0JdTggdWx0cmFfbWFzazsKLQl1OCBtd2RtYV9tYXNrOwotCXU4IHN3ZG1hX21hc2s7Ci0KLQl1OCBjYmw7CQkvKiBjYWJsZSB0eXBlICovCi0KLQlod2lmX2NoaXBzZXRfdCBjaGlwc2V0OwkvKiBzdWItbW9kdWxlIGZvciB0dW5pbmcuLiAqLwotCi0Jc3RydWN0IGRldmljZSAqZGV2OwotCi0JaWRlX2Fja19pbnRyX3QgKmFja19pbnRyOwotCi0Jdm9pZCAoKnJ3X2Rpc2spKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwotCi0JY29uc3Qgc3RydWN0IGlkZV90cF9vcHMJCSp0cF9vcHM7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcwkqcG9ydF9vcHM7Ci0JY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzCSpkbWFfb3BzOwotCi0Jdm9pZCAoKmlkZV9kbWFfY2xlYXJfaXJxKShpZGVfZHJpdmVfdCAqZHJpdmUpOwotCi0JLyogZG1hIHBoeXNpY2FsIHJlZ2lvbiBkZXNjcmlwdG9yIHRhYmxlIChjcHUgdmlldykgKi8KLQl1bnNpZ25lZCBpbnQJKmRtYXRhYmxlX2NwdTsKLQkvKiBkbWEgcGh5c2ljYWwgcmVnaW9uIGRlc2NyaXB0b3IgdGFibGUgKGRtYSB2aWV3KSAqLwotCWRtYV9hZGRyX3QJZG1hdGFibGVfZG1hOwotCS8qIFNjYXR0ZXItZ2F0aGVyIGxpc3QgdXNlZCB0byBidWlsZCB0aGUgYWJvdmUgKi8KLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3RhYmxlOwotCWludCBzZ19tYXhfbmVudHM7CQkvKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIGl0ICovCi0JaW50IHNnX25lbnRzOwkJCS8qIEN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMgaW4gaXQgKi8KLQlpbnQgc2dfZG1hX2RpcmVjdGlvbjsJCS8qIGRtYSB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KLQotCS8qIGRhdGEgcGhhc2Ugb2YgdGhlIGFjdGl2ZSBjb21tYW5kIChjdXJyZW50bHkgb25seSB2YWxpZCBmb3IgUElPL0RNQSkgKi8KLQlpbnQJCWRhdGFfcGhhc2U7Ci0KLQl1bnNpZ25lZCBpbnQgbnNlY3Q7Ci0JdW5zaWduZWQgaW50IG5sZWZ0OwotCXN0cnVjdCBzY2F0dGVybGlzdCAqY3Vyc2c7Ci0JdW5zaWduZWQgaW50IGN1cnNnX29mczsKLQotCWludAkJcnFzaXplOwkJLyogbWF4IHNlY3RvcnMgcGVyIHJlcXVlc3QgKi8KLQlpbnQJCWlycTsJCS8qIG91ciBpcnEgbnVtYmVyICovCi0KLQl1bnNpZ25lZCBsb25nCWRtYV9iYXNlOwkvKiBiYXNlIGFkZHIgZm9yIGRtYSBwb3J0cyAqLwotCi0JdW5zaWduZWQgbG9uZwljb25maWdfZGF0YTsJLyogZm9yIHVzZSBieSBjaGlwc2V0LXNwZWNpZmljIGNvZGUgKi8KLQl1bnNpZ25lZCBsb25nCXNlbGVjdF9kYXRhOwkvKiBmb3IgdXNlIGJ5IGNoaXBzZXQtc3BlY2lmaWMgY29kZSAqLwotCi0JdW5zaWduZWQgbG9uZwlleHRyYV9iYXNlOwkvKiBleHRyYSBhZGRyIGZvciBkbWEgcG9ydHMgKi8KLQl1bnNpZ25lZAlleHRyYV9wb3J0czsJLyogbnVtYmVyIG9mIGV4dHJhIGRtYSBwb3J0cyAqLwotCi0JdW5zaWduZWQJcHJlc2VudCAgICA6IDE7CS8qIHRoaXMgaW50ZXJmYWNlIGV4aXN0cyAqLwotCXVuc2lnbmVkCXNlcmlhbGl6ZWQgOiAxOwkvKiBzZXJpYWxpemVkIGFsbCBjaGFubmVsIG9wZXJhdGlvbiAqLwotCXVuc2lnbmVkCXNoYXJpbmdfaXJxOiAxOwkvKiAxID0gc2hhcmluZyBpcnEgd2l0aCBhbm90aGVyIGh3aWYgKi8KLQl1bnNpZ25lZAlzZ19tYXBwZWQgIDogMTsJLyogc2dfdGFibGUgYW5kIHNnX25lbnRzIGFyZSByZWFkeSAqLwotCi0Jc3RydWN0IGRldmljZQkJZ2VuZGV2OwotCXN0cnVjdCBkZXZpY2UJCSpwb3J0ZGV2OwotCi0Jc3RydWN0IGNvbXBsZXRpb24gZ2VuZGV2X3JlbF9jb21wOyAvKiBUbyBkZWFsIHdpdGggZGV2aWNlIHJlbGVhc2UoKSAqLwotCi0Jdm9pZAkJKmh3aWZfZGF0YTsJLyogZXh0cmEgaHdpZiBkYXRhICovCi0KLQl1bnNpZ25lZCBkbWE7Ci0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVBQ1BJCi0Jc3RydWN0IGlkZV9hY3BpX2h3aWZfbGluayAqYWNwaWRhdGE7Ci0jZW5kaWYKLX0gX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcCBpZGVfaHdpZl90OwotCi1zdHJ1Y3QgaWRlX2hvc3QgewotCWlkZV9od2lmX3QJKnBvcnRzW01BWF9IV0lGU107Ci0JdW5zaWduZWQgaW50CW5fcG9ydHM7Ci0Jc3RydWN0IGRldmljZQkqZGV2WzJdOwotCXVuc2lnbmVkIGludAkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7Ci0JdW5zaWduZWQgbG9uZwlob3N0X2ZsYWdzOwotCXZvaWQJCSpob3N0X3ByaXY7Ci19OwotCi0vKgotICogIGludGVybmFsIGlkZSBpbnRlcnJ1cHQgaGFuZGxlciB0eXBlCi0gKi8KLXR5cGVkZWYgaWRlX3N0YXJ0c3RvcF90IChpZGVfaGFuZGxlcl90KShpZGVfZHJpdmVfdCAqKTsKLXR5cGVkZWYgaW50IChpZGVfZXhwaXJ5X3QpKGlkZV9kcml2ZV90ICopOwotCi0vKiB1c2VkIGJ5IGlkZS1jZCwgaWRlLWZsb3BweSwgZXRjLiAqLwotdHlwZWRlZiB2b2lkICh4ZmVyX2Z1bmNfdCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICosIHVuc2lnbmVkKTsKLQotdHlwZWRlZiBzdHJ1Y3QgaHdncm91cF9zIHsKLQkJLyogaXJxIGhhbmRsZXIsIGlmIGFjdGl2ZSAqLwotCWlkZV9zdGFydHN0b3BfdAkoKmhhbmRsZXIpKGlkZV9kcml2ZV90ICopOwotCi0JCS8qIEJPT0w6IHByb3RlY3RzIGFsbCBmaWVsZHMgYmVsb3cgKi8KLQl2b2xhdGlsZSBpbnQgYnVzeTsKLQkJLyogQk9PTDogd2FrZSB1cyB1cCBvbiB0aW1lciBleHBpcnkgKi8KLQl1bnNpZ25lZCBpbnQgc2xlZXBpbmcJOiAxOwotCQkvKiBCT09MOiBwb2xsaW5nIGFjdGl2ZSAmIHBvbGxfdGltZW91dCBmaWVsZCB2YWxpZCAqLwotCXVuc2lnbmVkIGludCBwb2xsaW5nCTogMTsKLQotCQkvKiBjdXJyZW50IGRyaXZlICovCi0JaWRlX2RyaXZlX3QgKmRyaXZlOwotCQkvKiBwdHIgdG8gY3VycmVudCBod2lmIGluIGxpbmtlZC1saXN0ICovCi0JaWRlX2h3aWZfdCAqaHdpZjsKLQotCQkvKiBjdXJyZW50IHJlcXVlc3QgKi8KLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0KLQkJLyogZmFpbHNhZmUgdGltZXIgKi8KLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQkJLyogdGltZW91dCB2YWx1ZSBkdXJpbmcgbG9uZyBwb2xscyAqLwotCXVuc2lnbmVkIGxvbmcgcG9sbF90aW1lb3V0OwotCQkvKiBxdWVyaWVkIHVwb24gdGltZW91dHMgKi8KLQlpbnQgKCpleHBpcnkpKGlkZV9kcml2ZV90ICopOwotCi0JaW50IHJlcV9nZW47Ci0JaW50IHJlcV9nZW5fdGltZXI7Ci19IGlkZV9od2dyb3VwX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGlkZV9kcml2ZXJfcyBpZGVfZHJpdmVyX3Q7Ci0KLWV4dGVybiBzdHJ1Y3QgbXV0ZXggaWRlX3NldHRpbmdfbXR4OwotCi0vKgotICogY29uZmlndXJhYmxlIGRyaXZlIHNldHRpbmdzCi0gKi8KLQotI2RlZmluZSBEU19TWU5DCSgxIDw8IDApCi0KLXN0cnVjdCBpZGVfZGV2c2V0IHsKLQlpbnQJCSgqZ2V0KShpZGVfZHJpdmVfdCAqKTsKLQlpbnQJCSgqc2V0KShpZGVfZHJpdmVfdCAqLCBpbnQpOwotCXVuc2lnbmVkIGludAlmbGFnczsKLX07Ci0KLSNkZWZpbmUgX19ERVZTRVQoX2ZsYWdzLCBfZ2V0LCBfc2V0KSB7IFwKLQkuZmxhZ3MJPSBfZmxhZ3MsIFwKLQkuZ2V0CT0gX2dldCwJXAotCS5zZXQJPSBfc2V0LAlcCi19Ci0KLSNkZWZpbmUgaWRlX2RldnNldF9nZXQobmFtZSwgZmllbGQpIFwKLXN0YXRpYyBpbnQgZ2V0XyMjbmFtZShpZGVfZHJpdmVfdCAqZHJpdmUpIFwKLXsgXAotCXJldHVybiBkcml2ZS0+ZmllbGQ7IFwKLX0KLQotI2RlZmluZSBpZGVfZGV2c2V0X3NldChuYW1lLCBmaWVsZCkgXAotc3RhdGljIGludCBzZXRfIyNuYW1lKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykgXAoteyBcCi0JZHJpdmUtPmZpZWxkID0gYXJnOyBcCi0JcmV0dXJuIDA7IFwKLX0KLQotI2RlZmluZSBfX0lERV9ERVZTRVQoX25hbWUsIF9mbGFncywgX2dldCwgX3NldCkgXAotY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgaWRlX2RldnNldF8jI19uYW1lID0gXAotCV9fREVWU0VUKF9mbGFncywgX2dldCwgX3NldCkKLQotI2RlZmluZSBJREVfREVWU0VUKF9uYW1lLCBfZmxhZ3MsIF9nZXQsIF9zZXQpIFwKLXN0YXRpYyBfX0lERV9ERVZTRVQoX25hbWUsIF9mbGFncywgX2dldCwgX3NldCkKLQotI2RlZmluZSBpZGVfZGV2c2V0X3J3KF9uYW1lLCBfZnVuYykgXAotSURFX0RFVlNFVChfbmFtZSwgMCwgZ2V0XyMjX2Z1bmMsIHNldF8jI19mdW5jKQotCi0jZGVmaW5lIGlkZV9kZXZzZXRfdyhfbmFtZSwgX2Z1bmMpIFwKLUlERV9ERVZTRVQoX25hbWUsIDAsIE5VTEwsIHNldF8jI19mdW5jKQotCi0jZGVmaW5lIGlkZV9kZXZzZXRfcndfc3luYyhfbmFtZSwgX2Z1bmMpIFwKLUlERV9ERVZTRVQoX25hbWUsIERTX1NZTkMsIGdldF8jI19mdW5jLCBzZXRfIyNfZnVuYykKLQotI2RlZmluZSBpZGVfZGVjbF9kZXZzZXQoX25hbWUpIFwKLWV4dGVybiBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCBpZGVfZGV2c2V0XyMjX25hbWUKLQotaWRlX2RlY2xfZGV2c2V0KGlvXzMyYml0KTsKLWlkZV9kZWNsX2RldnNldChrZWVwc2V0dGluZ3MpOwotaWRlX2RlY2xfZGV2c2V0KHBpb19tb2RlKTsKLWlkZV9kZWNsX2RldnNldCh1bm1hc2tpcnEpOwotaWRlX2RlY2xfZGV2c2V0KHVzaW5nX2RtYSk7Ci0KLS8qIEFUQVBJIHBhY2tldCBjb21tYW5kIGZsYWdzICovCi1lbnVtIHsKLQkvKiBzZXQgd2hlbiBhbiBlcnJvciBpcyBjb25zaWRlcmVkIG5vcm1hbCAtIG5vIHJldHJ5IChpZGUtdGFwZSkgKi8KLQlQQ19GTEFHX0FCT1JUCQkJPSAoMSA8PCAwKSwKLQlQQ19GTEFHX1NVUFBSRVNTX0VSUk9SCQk9ICgxIDw8IDEpLAotCVBDX0ZMQUdfV0FJVF9GT1JfRFNDCQk9ICgxIDw8IDIpLAotCVBDX0ZMQUdfRE1BX09LCQkJPSAoMSA8PCAzKSwKLQlQQ19GTEFHX0RNQV9JTl9QUk9HUkVTUwkJPSAoMSA8PCA0KSwKLQlQQ19GTEFHX0RNQV9FUlJPUgkJPSAoMSA8PCA1KSwKLQlQQ19GTEFHX1dSSVRJTkcJCQk9ICgxIDw8IDYpLAotCS8qIGNvbW1hbmQgdGltZWQgb3V0ICovCi0JUENfRkxBR19USU1FRE9VVAkJPSAoMSA8PCA3KSwKLX07Ci0KLS8qCi0gKiBXaXRoIGVhY2ggcGFja2V0IGNvbW1hbmQsIHdlIGFsbG9jYXRlIGEgYnVmZmVyIG9mIElERV9QQ19CVUZGRVJfU0laRSBieXRlcy4KLSAqIFRoaXMgaXMgdXNlZCBmb3Igc2V2ZXJhbCBwYWNrZXQgY29tbWFuZHMgKG5vdCBmb3IgUkVBRC9XUklURSBjb21tYW5kcykuCi0gKi8KLSNkZWZpbmUgSURFX1BDX0JVRkZFUl9TSVpFCTI1NgotCi1zdHJ1Y3QgaWRlX2F0YXBpX3BjIHsKLQkvKiBhY3R1YWwgcGFja2V0IGJ5dGVzICovCi0JdTggY1sxMl07Ci0JLyogaW5jcmVtZW50ZWQgb24gZWFjaCByZXRyeSAqLwotCWludCByZXRyaWVzOwotCWludCBlcnJvcjsKLQotCS8qIGJ5dGVzIHRvIHRyYW5zZmVyICovCi0JaW50IHJlcV94ZmVyOwotCS8qIGJ5dGVzIGFjdHVhbGx5IHRyYW5zZmVycmVkICovCi0JaW50IHhmZXJyZWQ7Ci0KLQkvKiBkYXRhIGJ1ZmZlciAqLwotCXU4ICpidWY7Ci0JLyogY3VycmVudCBidWZmZXIgcG9zaXRpb24gKi8KLQl1OCAqY3VyX3BvczsKLQlpbnQgYnVmX3NpemU7Ci0JLyogbWlzc2luZy9hdmFpbGFibGUgZGF0YSBvbiB0aGUgY3VycmVudCBidWZmZXIgKi8KLQlpbnQgYl9jb3VudDsKLQotCS8qIHRoZSBjb3JyZXNwb25kaW5nIHJlcXVlc3QgKi8KLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiB0aG9zZSBhcmUgbW9yZSBvciBsZXNzIGRyaXZlci1zcGVjaWZpYyBhbmQgc29tZSBvZiB0aGVtIGFyZSBzdWJqZWN0Ci0JICogdG8gY2hhbmdlL3JlbW92YWwgbGF0ZXIuCi0JICovCi0JdTggcGNfYnVmW0lERV9QQ19CVUZGRVJfU0laRV07Ci0KLQkvKiBpZGV0YXBlIG9ubHkgKi8KLQlzdHJ1Y3QgaWRldGFwZV9iaCAqYmg7Ci0JY2hhciAqYl9kYXRhOwotCi0JLyogaWRlc2NzaSBvbmx5IGZvciBub3cgKi8KLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXVuc2lnbmVkIGludCBzZ19jbnQ7Ci0KLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtZDsKLQl2b2lkICgqZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKik7Ci0KLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci19OwotCi0jaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi0vKgotICogL3Byb2MvaWRlIGludGVyZmFjZQotICovCi0KLSNkZWZpbmUgaWRlX2RldnNldF9yd19maWVsZChfbmFtZSwgX2ZpZWxkKSBcCi1pZGVfZGV2c2V0X2dldChfbmFtZSwgX2ZpZWxkKTsgXAotaWRlX2RldnNldF9zZXQoX25hbWUsIF9maWVsZCk7IFwKLUlERV9ERVZTRVQoX25hbWUsIERTX1NZTkMsIGdldF8jI19uYW1lLCBzZXRfIyNfbmFtZSkKLQotc3RydWN0IGlkZV9wcm9jX2RldnNldCB7Ci0JY29uc3QgY2hhcgkJKm5hbWU7Ci0JY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQJKnNldHRpbmc7Ci0JaW50CQkJbWluLCBtYXg7Ci0JaW50CQkJKCptdWxmKShpZGVfZHJpdmVfdCAqKTsKLQlpbnQJCQkoKmRpdmYpKGlkZV9kcml2ZV90ICopOwotfTsKLQotI2RlZmluZSBfX0lERV9QUk9DX0RFVlNFVChfbmFtZSwgX21pbiwgX21heCwgX211bGYsIF9kaXZmKSB7IFwKLQkubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgXAotCS5zZXR0aW5nID0gJmlkZV9kZXZzZXRfIyNfbmFtZSwgXAotCS5taW4gPSBfbWluLCBcCi0JLm1heCA9IF9tYXgsIFwKLQkubXVsZiA9IF9tdWxmLCBcCi0JLmRpdmYgPSBfZGl2ZiwgXAotfQotCi0jZGVmaW5lIElERV9QUk9DX0RFVlNFVChfbmFtZSwgX21pbiwgX21heCkgXAotX19JREVfUFJPQ19ERVZTRVQoX25hbWUsIF9taW4sIF9tYXgsIE5VTEwsIE5VTEwpCi0KLXR5cGVkZWYgc3RydWN0IHsKLQljb25zdCBjaGFyCSpuYW1lOwotCW1vZGVfdAkJbW9kZTsKLQlyZWFkX3Byb2NfdAkqcmVhZF9wcm9jOwotCXdyaXRlX3Byb2NfdAkqd3JpdGVfcHJvYzsKLX0gaWRlX3Byb2NfZW50cnlfdDsKLQotdm9pZCBwcm9jX2lkZV9jcmVhdGUodm9pZCk7Ci12b2lkIHByb2NfaWRlX2Rlc3Ryb3kodm9pZCk7Ci12b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaWRlX2h3aWZfdCAqKTsKLXZvaWQgaWRlX3Byb2NfcG9ydF9yZWdpc3Rlcl9kZXZpY2VzKGlkZV9od2lmX3QgKik7Ci12b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfZGV2aWNlKGlkZV9kcml2ZV90ICopOwotdm9pZCBpZGVfcHJvY191bnJlZ2lzdGVyX3BvcnQoaWRlX2h3aWZfdCAqKTsKLXZvaWQgaWRlX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKGlkZV9kcml2ZV90ICosIGlkZV9kcml2ZXJfdCAqKTsKLXZvaWQgaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2RyaXZlcl90ICopOwotCi1yZWFkX3Byb2NfdCBwcm9jX2lkZV9yZWFkX2NhcGFjaXR5OwotcmVhZF9wcm9jX3QgcHJvY19pZGVfcmVhZF9nZW9tZXRyeTsKLQotLyoKLSAqIFN0YW5kYXJkIGV4aXQgc3R1ZmY6Ci0gKi8KLSNkZWZpbmUgUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSxzdGFydCxvZmYsY291bnQsZW9mLGxlbikgXAotewkJCQkJXAotCWxlbiAtPSBvZmY7CQkJXAotCWlmIChsZW4gPCBjb3VudCkgewkJXAotCQkqZW9mID0gMTsJCVwKLQkJaWYgKGxlbiA8PSAwKQkJXAotCQkJcmV0dXJuIDA7CVwKLQl9IGVsc2UJCQkJXAotCQlsZW4gPSBjb3VudDsJCVwKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwkJXAotCXJldHVybiBsZW47CQkJXAotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX2lkZV9jcmVhdGUodm9pZCkgeyA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX2lkZV9kZXN0cm95KHZvaWQpIHsgOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChpZGVfaHdpZl90ICpod2lmKSB7IDsgfQotc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3BvcnRfcmVnaXN0ZXJfZGV2aWNlcyhpZGVfaHdpZl90ICpod2lmKSB7IDsgfQotc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfZGV2aWNlKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcHJvY191bnJlZ2lzdGVyX3BvcnQoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfZHJpdmVyX3QgKmRyaXZlcikgeyA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcHJvY191bnJlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9kcml2ZXJfdCAqZHJpdmVyKSB7IDsgfQotI2RlZmluZSBQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLHN0YXJ0LG9mZixjb3VudCxlb2YsbGVuKSByZXR1cm4gMDsKLSNlbmRpZgotCi0vKgotICogUG93ZXIgTWFuYWdlbWVudCBzdGVwIHZhbHVlIChycS0+cG0tPnBtX3N0ZXApLgotICoKLSAqIFRoZSBzdGVwIHZhbHVlIHN0YXJ0cyBhdCAwIChpZGVfcG1fc3RhdGVfc3RhcnRfc3VzcGVuZCkgZm9yIGEKLSAqIHN1c3BlbmQgb3BlcmF0aW9uIG9yIDEwMDAgKGlkZV9wbV9zdGF0ZV9zdGFydF9yZXN1bWUpIGZvciBhCi0gKiByZXN1bWUgb3BlcmF0aW9uLgotICoKLSAqIEZvciBlYWNoIHN0ZXAsIHRoZSBjb3JlIGNhbGxzIHRoZSBzdWJkcml2ZXIgc3RhcnRfcG93ZXJfc3RlcCgpIGZpcnN0LgotICogVGhpcyBjYW4gcmV0dXJuOgotICoJLSBpZGVfc3RvcHBlZCA6CUluIHRoaXMgY2FzZSwgdGhlIGNvcmUgY2FsbHMgdXMgYmFjayBhZ2FpbiB1bmxlc3MKLSAqCQkJc3RlcCBoYXZlIGJlZW4gc2V0IHRvIGlkZV9wb3dlcl9zdGF0ZV9jb21wbGV0ZWQuCi0gKgktIGlkZV9zdGFydGVkIDoJSW4gdGhpcyBjYXNlLCB0aGUgY2hhbm5lbCBpcyBsZWZ0IGJ1c3kgdW50aWwgYW4KLSAqCQkJYXN5bmMgZXZlbnQgKGludGVycnVwdCkgb2NjdXJzLgotICogVHlwaWNhbGx5LCBzdGFydF9wb3dlcl9zdGVwKCkgd2lsbCBpc3N1ZSBhIHRhc2tmaWxlIHJlcXVlc3Qgd2l0aAotICogZG9fcndfdGFza2ZpbGUoKS4KLSAqCi0gKiBVcG9uIHJlY2VwdGlvbiBvZiB0aGUgaW50ZXJydXB0LCB0aGUgY29yZSB3aWxsIGNhbGwgY29tcGxldGVfcG93ZXJfc3RlcCgpCi0gKiB3aXRoIHRoZSBlcnJvciBjb2RlIGlmIGFueS4gVGhpcyByb3V0aW5lIHNob3VsZCB1cGRhdGUgdGhlIHN0ZXAgdmFsdWUKLSAqIGFuZCByZXR1cm4uIEl0IHNob3VsZCBub3Qgc3RhcnQgYSBuZXcgcmVxdWVzdC4gVGhlIGNvcmUgd2lsbCBjYWxsCi0gKiBzdGFydF9wb3dlcl9zdGVwIGZvciB0aGUgbmV3IHN0ZXAgdmFsdWUsIHVubGVzcyBzdGVwIGhhdmUgYmVlbiBzZXQgdG8KLSAqIGlkZV9wb3dlcl9zdGF0ZV9jb21wbGV0ZWQuCi0gKgotICogU3ViZHJpdmVycyBhcmUgZXhwZWN0ZWQgdG8gZGVmaW5lIHRoZWlyIG93biBhZGRpdGlvbmFsIHBvd2VyCi0gKiBzdGVwcyBmcm9tIDEuLjk5OSBmb3Igc3VzcGVuZCBhbmQgZnJvbSAxMDAxLi4xOTk5IGZvciByZXN1bWUsCi0gKiBvdGhlciB2YWx1ZXMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgotICovCi0KLWVudW0gewotCWlkZV9wbV9zdGF0ZV9jb21wbGV0ZWQJCT0gLTEsCi0JaWRlX3BtX3N0YXRlX3N0YXJ0X3N1c3BlbmQJPSAwLAotCWlkZV9wbV9zdGF0ZV9zdGFydF9yZXN1bWUJPSAxMDAwLAotfTsKLQotLyoKLSAqIFN1YmRyaXZlcnMgc3VwcG9ydC4KLSAqCi0gKiBUaGUgZ2VuZHJpdmVyLm93bmVyIGZpZWxkIHNob3VsZCBiZSBzZXQgdG8gdGhlIG1vZHVsZSBvd25lciBvZiB0aGlzIGRyaXZlci4KLSAqIFRoZSBnZW5kcml2ZXIubmFtZSBmaWVsZCBzaG91bGQgYmUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoaXMgZHJpdmVyCi0gKi8KLXN0cnVjdCBpZGVfZHJpdmVyX3MgewotCWNvbnN0IGNoYXIJCQkqdmVyc2lvbjsKLQl1OAkJCQltZWRpYTsKLQlpZGVfc3RhcnRzdG9wX3QJKCpkb19yZXF1ZXN0KShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBzZWN0b3JfdCk7Ci0JaW50CQkoKmVuZF9yZXF1ZXN0KShpZGVfZHJpdmVfdCAqLCBpbnQsIGludCk7Ci0JaWRlX3N0YXJ0c3RvcF90CSgqZXJyb3IpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICpycSwgdTgsIHU4KTsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlcglnZW5fZHJpdmVyOwotCWludAkJKCpwcm9iZSkoaWRlX2RyaXZlX3QgKik7Ci0Jdm9pZAkJKCpyZW1vdmUpKGlkZV9kcml2ZV90ICopOwotCXZvaWQJCSgqcmVzdW1lKShpZGVfZHJpdmVfdCAqKTsKLQl2b2lkCQkoKnNodXRkb3duKShpZGVfZHJpdmVfdCAqKTsKLSNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLQlpZGVfcHJvY19lbnRyeV90CQkqcHJvYzsKLQljb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0CSpzZXR0aW5nczsKLSNlbmRpZgotfTsKLQotI2RlZmluZSB0b19pZGVfZHJpdmVyKGRydikgY29udGFpbmVyX29mKGRydiwgaWRlX2RyaXZlcl90LCBnZW5fZHJpdmVyKQotCi1pbnQgaWRlX2RldmljZV9nZXQoaWRlX2RyaXZlX3QgKik7Ci12b2lkIGlkZV9kZXZpY2VfcHV0KGlkZV9kcml2ZV90ICopOwotCi1zdHJ1Y3QgaWRlX2lvY3RsX2RldnNldCB7Ci0JdW5zaWduZWQgaW50CWdldF9pb2N0bDsKLQl1bnNpZ25lZCBpbnQJc2V0X2lvY3RsOwotCWNvbnN0IHN0cnVjdCBpZGVfZGV2c2V0ICpzZXR0aW5nOwotfTsKLQotaW50IGlkZV9zZXR0aW5nX2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQgaW50LAotCQkgICAgICB1bnNpZ25lZCBsb25nLCBjb25zdCBzdHJ1Y3QgaWRlX2lvY3RsX2RldnNldCAqKTsKLQotaW50IGdlbmVyaWNfaWRlX2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBmaWxlICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKLQkJICAgICAgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOwotCi1leHRlcm4gaW50IGlkZV92bGJfY2xrOwotZXh0ZXJuIGludCBpZGVfcGNpX2NsazsKLQotZXh0ZXJuIGludCBpZGVfZW5kX3JlcXVlc3QgKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnJzZWNzKTsKLWludCBpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkgICAgIGludCB1cHRvZGF0ZSwgaW50IG5yX3NlY3RvcnMpOwotCi1leHRlcm4gdm9pZCBpZGVfc2V0X2hhbmRsZXIgKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KTsKLQotdm9pZCBpZGVfZXhlY3V0ZV9jb21tYW5kKGlkZV9kcml2ZV90ICosIHU4LCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCwKLQkJCSBpZGVfZXhwaXJ5X3QgKik7Ci0KLXZvaWQgaWRlX2V4ZWN1dGVfcGt0X2NtZChpZGVfZHJpdmVfdCAqKTsKLQotdm9pZCBpZGVfcGFkX3RyYW5zZmVyKGlkZV9kcml2ZV90ICosIGludCwgaW50KTsKLQotaWRlX3N0YXJ0c3RvcF90IF9faWRlX2Vycm9yKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHU4LCB1OCk7Ci0KLWlkZV9zdGFydHN0b3BfdCBpZGVfZXJyb3IgKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqbXNnLCBieXRlIHN0YXQpOwotCi12b2lkIGlkZV9maXhfZHJpdmVpZCh1MTYgKik7Ci0KLWV4dGVybiB2b2lkIGlkZV9maXhzdHJpbmcodTggKiwgY29uc3QgaW50LCBjb25zdCBpbnQpOwotCi1pbnQgaWRlX2J1c3lfc2xlZXAoaWRlX2h3aWZfdCAqLCB1bnNpZ25lZCBsb25nLCBpbnQpOwotCi1pbnQgaWRlX3dhaXRfc3RhdChpZGVfc3RhcnRzdG9wX3QgKiwgaWRlX2RyaXZlX3QgKiwgdTgsIHU4LCB1bnNpZ25lZCBsb25nKTsKLQotZXh0ZXJuIGlkZV9zdGFydHN0b3BfdCBpZGVfZG9fcmVzZXQgKGlkZV9kcml2ZV90ICopOwotCi1leHRlcm4gaW50IGlkZV9kZXZzZXRfZXhlY3V0ZShpZGVfZHJpdmVfdCAqZHJpdmUsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywgaW50IGFyZyk7Ci0KLWV4dGVybiB2b2lkIGlkZV9kb19kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci0KLWV4dGVybiB2b2lkIGlkZV9lbmRfZHJpdmVfY21kKGlkZV9kcml2ZV90ICosIHU4LCB1OCk7Ci0KIGVudW0gewogCUlERV9URkxBR19MQkE0OAkJCT0gKDEgPDwgMCksCiAJSURFX1RGTEFHX0ZMQUdHRUQJCT0gKDEgPDwgMiksCkBAIC0xMTE5LDYgKzM4OCw4MTYgQEAKIAl2b2lkCQkJKnNwZWNpYWw7CS8qIHZhbGlkX3QgZ2VuZXJhbGx5ICovCiB9IGlkZV90YXNrX3Q7CiAKKy8qIEFUQVBJIHBhY2tldCBjb21tYW5kIGZsYWdzICovCitlbnVtIHsKKwkvKiBzZXQgd2hlbiBhbiBlcnJvciBpcyBjb25zaWRlcmVkIG5vcm1hbCAtIG5vIHJldHJ5IChpZGUtdGFwZSkgKi8KKwlQQ19GTEFHX0FCT1JUCQkJPSAoMSA8PCAwKSwKKwlQQ19GTEFHX1NVUFBSRVNTX0VSUk9SCQk9ICgxIDw8IDEpLAorCVBDX0ZMQUdfV0FJVF9GT1JfRFNDCQk9ICgxIDw8IDIpLAorCVBDX0ZMQUdfRE1BX09LCQkJPSAoMSA8PCAzKSwKKwlQQ19GTEFHX0RNQV9JTl9QUk9HUkVTUwkJPSAoMSA8PCA0KSwKKwlQQ19GTEFHX0RNQV9FUlJPUgkJPSAoMSA8PCA1KSwKKwlQQ19GTEFHX1dSSVRJTkcJCQk9ICgxIDw8IDYpLAorCS8qIGNvbW1hbmQgdGltZWQgb3V0ICovCisJUENfRkxBR19USU1FRE9VVAkJPSAoMSA8PCA3KSwKK307CisKKy8qCisgKiBXaXRoIGVhY2ggcGFja2V0IGNvbW1hbmQsIHdlIGFsbG9jYXRlIGEgYnVmZmVyIG9mIElERV9QQ19CVUZGRVJfU0laRSBieXRlcy4KKyAqIFRoaXMgaXMgdXNlZCBmb3Igc2V2ZXJhbCBwYWNrZXQgY29tbWFuZHMgKG5vdCBmb3IgUkVBRC9XUklURSBjb21tYW5kcykuCisgKi8KKyNkZWZpbmUgSURFX1BDX0JVRkZFUl9TSVpFCTI1NgorCitzdHJ1Y3QgaWRlX2F0YXBpX3BjIHsKKwkvKiBhY3R1YWwgcGFja2V0IGJ5dGVzICovCisJdTggY1sxMl07CisJLyogaW5jcmVtZW50ZWQgb24gZWFjaCByZXRyeSAqLworCWludCByZXRyaWVzOworCWludCBlcnJvcjsKKworCS8qIGJ5dGVzIHRvIHRyYW5zZmVyICovCisJaW50IHJlcV94ZmVyOworCS8qIGJ5dGVzIGFjdHVhbGx5IHRyYW5zZmVycmVkICovCisJaW50IHhmZXJyZWQ7CisKKwkvKiBkYXRhIGJ1ZmZlciAqLworCXU4ICpidWY7CisJLyogY3VycmVudCBidWZmZXIgcG9zaXRpb24gKi8KKwl1OCAqY3VyX3BvczsKKwlpbnQgYnVmX3NpemU7CisJLyogbWlzc2luZy9hdmFpbGFibGUgZGF0YSBvbiB0aGUgY3VycmVudCBidWZmZXIgKi8KKwlpbnQgYl9jb3VudDsKKworCS8qIHRoZSBjb3JyZXNwb25kaW5nIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiB0aG9zZSBhcmUgbW9yZSBvciBsZXNzIGRyaXZlci1zcGVjaWZpYyBhbmQgc29tZSBvZiB0aGVtIGFyZSBzdWJqZWN0CisJICogdG8gY2hhbmdlL3JlbW92YWwgbGF0ZXIuCisJICovCisJdTggcGNfYnVmW0lERV9QQ19CVUZGRVJfU0laRV07CisKKwkvKiBpZGV0YXBlIG9ubHkgKi8KKwlzdHJ1Y3QgaWRldGFwZV9iaCAqYmg7CisJY2hhciAqYl9kYXRhOworCisJLyogaWRlc2NzaSBvbmx5IGZvciBub3cgKi8KKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGludCBzZ19jbnQ7CisKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtZDsKKwl2b2lkICgqZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKik7CisKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Cit9OworCitzdHJ1Y3QgaWRlX2RldnNldDsKK3N0cnVjdCBpZGVfZHJpdmVyX3M7CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVBQ1BJCitzdHJ1Y3QgaWRlX2FjcGlfZHJpdmVfbGluazsKK3N0cnVjdCBpZGVfYWNwaV9od2lmX2xpbms7CisjZW5kaWYKKworc3RydWN0IGlkZV9kcml2ZV9zOworCitzdHJ1Y3QgaWRlX2Rpc2tfb3BzIHsKKwlpbnQJCSgqY2hlY2spKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBjb25zdCBjaGFyICopOworCWludAkJKCpnZXRfY2FwYWNpdHkpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKKwl2b2lkCQkoKnNldHVwKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CisJdm9pZAkJKCpmbHVzaCkoc3RydWN0IGlkZV9kcml2ZV9zICopOworCWludAkJKCppbml0X21lZGlhKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgc3RydWN0IGdlbmRpc2sgKik7CisJaW50CQkoKnNldF9kb29ybG9jaykoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCBnZW5kaXNrICosCisJCQkJCWludCk7CisJaWRlX3N0YXJ0c3RvcF90CSgqZG9fcmVxdWVzdCkoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCByZXF1ZXN0ICosCisJCQkJICAgICAgc2VjdG9yX3QpOworCWludAkJKCplbmRfcmVxdWVzdCkoc3RydWN0IGlkZV9kcml2ZV9zICosIGludCwgaW50KTsKKwlpbnQJCSgqaW9jdGwpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgaW5vZGUgKiwKKwkJCQkgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKK307CisKKy8qIEFUQVBJIGRldmljZSBmbGFncyAqLworZW51bSB7CisJSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQJCT0gKDEgPDwgMCksCisKKwkvKiBpZGUtY2QgKi8KKwkvKiBEcml2ZSBjYW5ub3QgZWplY3QgdGhlIGRpc2MuICovCisJSURFX0FGTEFHX05PX0VKRUNUCQk9ICgxIDw8IDMpLAorCS8qIERyaXZlIGlzIGEgcHJlIEFUQVBJIDEuMiBkcml2ZS4gKi8KKwlJREVfQUZMQUdfUFJFX0FUQVBJMTIJCT0gKDEgPDwgNCksCisJLyogVE9DIGFkZHJlc3NlcyBhcmUgaW4gQkNELiAqLworCUlERV9BRkxBR19UT0NBRERSX0FTX0JDRAk9ICgxIDw8IDUpLAorCS8qIFRPQyB0cmFjayBudW1iZXJzIGFyZSBpbiBCQ0QuICovCisJSURFX0FGTEFHX1RPQ1RSQUNLU19BU19CQ0QJPSAoMSA8PCA2KSwKKwkvKgorCSAqIERyaXZlIGRvZXMgbm90IHByb3ZpZGUgZGF0YSBpbiBtdWx0aXBsZXMgb2YgU0VDVE9SX1NJWkUKKwkgKiB3aGVuIG1vcmUgdGhhbiBvbmUgaW50ZXJydXB0IGlzIG5lZWRlZC4KKwkgKi8KKwlJREVfQUZMQUdfTElNSVRfTkZSQU1FUwkJPSAoMSA8PCA3KSwKKwkvKiBTZWVraW5nIGluIHByb2dyZXNzLiAqLworCUlERV9BRkxBR19TRUVLSU5HCQk9ICgxIDw8IDgpLAorCS8qIFNhdmVkIFRPQyBpbmZvcm1hdGlvbiBpcyBjdXJyZW50LiAqLworCUlERV9BRkxBR19UT0NfVkFMSUQJCT0gKDEgPDwgOSksCisJLyogV2UgdGhpbmsgdGhhdCB0aGUgZHJpdmUgZG9vciBpcyBsb2NrZWQuICovCisJSURFX0FGTEFHX0RPT1JfTE9DS0VECQk9ICgxIDw8IDEwKSwKKwkvKiBTRVRfQ0RfU1BFRUQgY29tbWFuZCBpcyB1bnN1cHBvcnRlZC4gKi8KKwlJREVfQUZMQUdfTk9fU1BFRURfU0VMRUNUCT0gKDEgPDwgMTEpLAorCUlERV9BRkxBR19WRVJUT1NfMzAwX1NTRAk9ICgxIDw8IDEyKSwKKwlJREVfQUZMQUdfVkVSVE9TXzYwMF9FU0QJPSAoMSA8PCAxMyksCisJSURFX0FGTEFHX1NBTllPXzNDRAkJPSAoMSA8PCAxNCksCisJSURFX0FGTEFHX0ZVTExfQ0FQU19QQUdFCT0gKDEgPDwgMTUpLAorCUlERV9BRkxBR19QTEFZX0FVRElPX09LCQk9ICgxIDw8IDE2KSwKKwlJREVfQUZMQUdfTEVfU1BFRURfRklFTERTCT0gKDEgPDwgMTcpLAorCisJLyogaWRlLWZsb3BweSAqLworCS8qIEF2b2lkIGNvbW1hbmRzIG5vdCBzdXBwb3J0ZWQgaW4gQ2xpayBkcml2ZSAqLworCUlERV9BRkxBR19DTElLX0RSSVZFCQk9ICgxIDw8IDE5KSwKKwkvKiBSZXF1aXJlcyBCSCBhbGdvcml0aG0gZm9yIHBhY2tldHMgKi8KKwlJREVfQUZMQUdfWklQX0RSSVZFCQk9ICgxIDw8IDIwKSwKKwkvKiBTdXBwb3J0cyBmb3JtYXQgcHJvZ3Jlc3MgcmVwb3J0ICovCisJSURFX0FGTEFHX1NSRlAJCQk9ICgxIDw8IDIyKSwKKworCS8qIGlkZS10YXBlICovCisJSURFX0FGTEFHX0lHTk9SRV9EU0MJCT0gKDEgPDwgMjMpLAorCS8qIDAgV2hlbiB0aGUgdGFwZSBwb3NpdGlvbiBpcyB1bmtub3duICovCisJSURFX0FGTEFHX0FERFJFU1NfVkFMSUQJCT0gKDEgPDwJMjQpLAorCS8qIERldmljZSBhbHJlYWR5IG9wZW5lZCAqLworCUlERV9BRkxBR19CVVNZCQkJPSAoMSA8PCAyNSksCisJLyogQXR0ZW1wdCB0byBhdXRvLWRldGVjdCB0aGUgY3VycmVudCB1c2VyIGJsb2NrIHNpemUgKi8KKwlJREVfQUZMQUdfREVURUNUX0JTCQk9ICgxIDw8IDI2KSwKKwkvKiBDdXJyZW50bHkgb24gYSBmaWxlbWFyayAqLworCUlERV9BRkxBR19GSUxFTUFSSwkJPSAoMSA8PCAyNyksCisJLyogMCA9IG5vIHRhcGUgaXMgbG9hZGVkLCBzbyB3ZSBkb24ndCByZXdpbmQgYWZ0ZXIgZWplY3RpbmcgKi8KKwlJREVfQUZMQUdfTUVESVVNX1BSRVNFTlQJPSAoMSA8PCAyOCksCisKKwlJREVfQUZMQUdfTk9fQVVUT0NMT1NFCQk9ICgxIDw8IDI5KSwKK307CisKKy8qIGRldmljZSBmbGFncyAqLworZW51bSB7CisJLyogcmVzdG9yZSBzZXR0aW5ncyBhZnRlciBkZXZpY2UgcmVzZXQgKi8KKwlJREVfREZMQUdfS0VFUF9TRVRUSU5HUwkJPSAoMSA8PCAwKSwKKwkvKiBkZXZpY2UgaXMgdXNpbmcgRE1BIGZvciByZWFkL3dyaXRlICovCisJSURFX0RGTEFHX1VTSU5HX0RNQQkJPSAoMSA8PCAxKSwKKwkvKiBva2F5IHRvIHVubWFzayBvdGhlciBJUlFzICovCisJSURFX0RGTEFHX1VOTUFTSwkJPSAoMSA8PCAyKSwKKwkvKiBkb24ndCBhdHRlbXB0IGZsdXNoZXMgKi8KKwlJREVfREZMQUdfTk9GTFVTSAkJPSAoMSA8PCAzKSwKKwkvKiBEU0Mgb3ZlcmxhcCAqLworCUlERV9ERkxBR19EU0NfT1ZFUkxBUAkJPSAoMSA8PCA0KSwKKwkvKiBnaXZlIHBvdGVudGlhbCBleGNlc3MgYmFuZHdpZHRoICovCisJSURFX0RGTEFHX05JQ0UxCQkJPSAoMSA8PCA1KSwKKwkvKiBkZXZpY2UgaXMgcGh5c2ljYWxseSBwcmVzZW50ICovCisJSURFX0RGTEFHX1BSRVNFTlQJCT0gKDEgPDwgNiksCisJLyogZGV2aWNlIGVqZWN0ZWQgaGludCAqLworCUlERV9ERkxBR19ERUFECQkJPSAoMSA8PCA3KSwKKwkvKiBpZCByZWFkIGZyb20gZGV2aWNlIChzeW50aGV0aWMgaWYgbm90IHNldCkgKi8KKwlJREVfREZMQUdfSURfUkVBRAkJPSAoMSA8PCA4KSwKKwlJREVfREZMQUdfTk9QUk9CRQkJPSAoMSA8PCA5KSwKKwkvKiBuZWVkIHRvIGRvIGNoZWNrX21lZGlhX2NoYW5nZSgpICovCisJSURFX0RGTEFHX1JFTU9WQUJMRQkJPSAoMSA8PCAxMCksCisJLyogbmVlZGVkIGZvciByZW1vdmFibGUgZGV2aWNlcyAqLworCUlERV9ERkxBR19BVFRBQ0gJCT0gKDEgPDwgMTEpLAorCUlERV9ERkxBR19GT1JDRURfR0VPTQkJPSAoMSA8PCAxMiksCisJLyogZGlzYWxsb3cgc2V0dGluZyB1bm1hc2sgYml0ICovCisJSURFX0RGTEFHX05PX1VOTUFTSwkJPSAoMSA8PCAxMyksCisJLyogZGlzYWxsb3cgZW5hYmxpbmcgMzItYml0IEkvTyAqLworCUlERV9ERkxBR19OT19JT18zMkJJVAkJPSAoMSA8PCAxNCksCisJLyogZm9yIHJlbW92YWJsZSBvbmx5OiBkb29yIGxvY2svdW5sb2NrIHdvcmtzICovCisJSURFX0RGTEFHX0RPT1JMT0NLSU5HCQk9ICgxIDw8IDE1KSwKKwkvKiBkaXNhbGxvdyBETUEgKi8KKwlJREVfREZMQUdfTk9ETUEJCQk9ICgxIDw8IDE2KSwKKwkvKiBwb3dlcm1hbmFnbWVudCB0b2xkIHVzIG5vdCB0byBkbyBhbnl0aGluZywgc28gc2xlZXAgbmljZWx5ICovCisJSURFX0RGTEFHX0JMT0NLRUQJCT0gKDEgPDwgMTcpLAorCS8qIGlkZS1zY3NpIGVtdWxhdGlvbiAqLworCUlERV9ERkxBR19TQ1NJCQkJPSAoMSA8PCAxOCksCisJLyogc2xlZXBpbmcgJiBzbGVlcCBmaWVsZCB2YWxpZCAqLworCUlERV9ERkxBR19TTEVFUElORwkJPSAoMSA8PCAxOSksCisJSURFX0RGTEFHX1BPU1RfUkVTRVQJCT0gKDEgPDwgMjApLAorCUlERV9ERkxBR19VRE1BMzNfV0FSTkVECQk9ICgxIDw8IDIxKSwKKwlJREVfREZMQUdfTEJBNDgJCQk9ICgxIDw8IDIyKSwKKwkvKiBzdGF0dXMgb2Ygd3JpdGUgY2FjaGUgKi8KKwlJREVfREZMQUdfV0NBQ0hFCQk9ICgxIDw8IDIzKSwKKwkvKiB1c2VkIGZvciBpZ25vcmluZyBBVEFfREYgKi8KKwlJREVfREZMQUdfTk9XRVJSCQk9ICgxIDw8IDI0KSwKKwkvKiByZXRyeWluZyBpbiBQSU8gKi8KKwlJREVfREZMQUdfRE1BX1BJT19SRVRSWQkJPSAoMSA8PCAyNSksCisJSURFX0RGTEFHX0xCQQkJCT0gKDEgPDwgMjYpLAorCS8qIGRvbid0IHVubG9hZCBoZWFkcyAqLworCUlERV9ERkxBR19OT19VTkxPQUQJCT0gKDEgPDwgMjcpLAorCS8qIGhlYWRzIHVubG9hZGVkLCBwbGVhc2UgZG9uJ3QgcmVzZXQgcG9ydCAqLworCUlERV9ERkxBR19QQVJLRUQJCT0gKDEgPDwgMjgpLAorCUlERV9ERkxBR19NRURJQV9DSEFOR0VECQk9ICgxIDw8IDI5KSwKKwkvKiB3cml0ZSBwcm90ZWN0ICovCisJSURFX0RGTEFHX1dQCQkJPSAoMSA8PCAzMCksCisJSURFX0RGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUwk9ICgxIDw8IDMxKSwKK307CisKK3N0cnVjdCBpZGVfZHJpdmVfcyB7CisJY2hhcgkJbmFtZVs0XTsJLyogZHJpdmUgbmFtZSwgc3VjaCBhcyAiaGRhIiAqLworICAgICAgICBjaGFyICAgICAgICAgICAgZHJpdmVyX3JlcVsxMF07CS8qIHJlcXVlc3RzIHNwZWNpZmljIGRyaXZlciAqLworCisJc3RydWN0IHJlcXVlc3RfcXVldWUJKnF1ZXVlOwkvKiByZXF1ZXN0IHF1ZXVlICovCisKKwlzdHJ1Y3QgcmVxdWVzdAkJKnJxOwkvKiBjdXJyZW50IHJlcXVlc3QgKi8KKwlzdHJ1Y3QgaWRlX2RyaXZlX3MgCSpuZXh0OwkvKiBjaXJjdWxhciBsaXN0IG9mIGh3Z3JvdXAgZHJpdmVzICovCisJdm9pZAkJKmRyaXZlcl9kYXRhOwkvKiBleHRyYSBkcml2ZXIgZGF0YSAqLworCXUxNgkJCSppZDsJLyogaWRlbnRpZmljYXRpb24gaW5mbyAqLworI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsJLyogL3Byb2MvaWRlLyBkaXJlY3RvcnkgZW50cnkgKi8KKwljb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0ICpzZXR0aW5nczsgLyogL3Byb2MvaWRlLyBkcml2ZSBzZXR0aW5ncyAqLworI2VuZGlmCisJc3RydWN0IGh3aWZfcwkJKmh3aWY7CS8qIGFjdHVhbGx5IChpZGVfaHdpZl90ICopICovCisKKwljb25zdCBzdHJ1Y3QgaWRlX2Rpc2tfb3BzICpkaXNrX29wczsKKworCXVuc2lnbmVkIGxvbmcgZGV2X2ZsYWdzOworCisJdW5zaWduZWQgbG9uZyBzbGVlcDsJCS8qIHNsZWVwIHVudGlsIHRoaXMgdGltZSAqLworCXVuc2lnbmVkIGxvbmcgc2VydmljZV9zdGFydDsJLyogdGltZSB3ZSBzdGFydGVkIGxhc3QgcmVxdWVzdCAqLworCXVuc2lnbmVkIGxvbmcgc2VydmljZV90aW1lOwkvKiBzZXJ2aWNlIHRpbWUgb2YgbGFzdCByZXF1ZXN0ICovCisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwkJLyogbWF4IHRpbWUgdG8gd2FpdCBmb3IgaXJxICovCisKKwlzcGVjaWFsX3QJc3BlY2lhbDsJLyogc3BlY2lhbCBhY3Rpb24gZmxhZ3MgKi8KKworCXU4CXNlbGVjdDsJCQkvKiBiYXNpYyBkcml2ZS9oZWFkIHNlbGVjdCByZWcgdmFsdWUgKi8KKwl1OAlyZXRyeV9waW87CQkvKiByZXRyeWluZyBkbWEgY2FwYWJsZSBob3N0IGluIHBpbyAqLworCXU4CXdhaXRpbmdfZm9yX2RtYTsJLyogZG1hIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqLworCXU4CWRtYTsJCQkvKiBhdGFwaSBkbWEgZmxhZyAqLworCisgICAgICAgIHU4CXF1aXJrX2xpc3Q7CS8qIGNvbnNpZGVyZWQgcXVpcmt5LCBzZXQgZm9yIGEgc3BlY2lmaWMgaG9zdCAqLworICAgICAgICB1OAlpbml0X3NwZWVkOwkvKiB0cmFuc2ZlciByYXRlIHNldCBhdCBib290ICovCisgICAgICAgIHU4CWN1cnJlbnRfc3BlZWQ7CS8qIGN1cnJlbnQgdHJhbnNmZXIgcmF0ZSBzZXQgKi8KKwl1OAlkZXNpcmVkX3NwZWVkOwkvKiBkZXNpcmVkIHRyYW5zZmVyIHJhdGUgc2V0ICovCisgICAgICAgIHU4CWRuOwkJLyogbm93IHdpZGUgc3ByZWFkIHVzZSAqLworCXU4CWFjb3VzdGljOwkvKiBhY291c3RpYyBtYW5hZ2VtZW50ICovCisJdTgJbWVkaWE7CQkvKiBkaXNrLCBjZHJvbSwgdGFwZSwgZmxvcHB5LCAuLi4gKi8KKwl1OAlyZWFkeV9zdGF0OwkvKiBtaW4gc3RhdHVzIHZhbHVlIGZvciBkcml2ZSByZWFkeSAqLworCXU4CW11bHRfY291bnQ7CS8qIGN1cnJlbnQgbXVsdGlwbGUgc2VjdG9yIHNldHRpbmcgKi8KKwl1OAltdWx0X3JlcTsJLyogcmVxdWVzdGVkIG11bHRpcGxlIHNlY3RvciBzZXR0aW5nICovCisJdTgJaW9fMzJiaXQ7CS8qIDA9MTYtYml0LCAxPTMyLWJpdCwgMi8zPTMyYml0K3N5bmMgKi8KKwl1OAliYWRfd3N0YXQ7CS8qIHVzZWQgZm9yIGlnbm9yaW5nIEFUQV9ERiAqLworCXU4CWhlYWQ7CQkvKiAicmVhbCIgbnVtYmVyIG9mIGhlYWRzICovCisJdTgJc2VjdDsJCS8qICJyZWFsIiBzZWN0b3JzIHBlciB0cmFjayAqLworCXU4CWJpb3NfaGVhZDsJLyogQklPUy9mZGlzay9MSUxPIG51bWJlciBvZiBoZWFkcyAqLworCXU4CWJpb3Nfc2VjdDsJLyogQklPUy9mZGlzay9MSUxPIHNlY3RvcnMgcGVyIHRyYWNrICovCisKKwkvKiBkZWxheSB0aGlzIGxvbmcgYmVmb3JlIHNlbmRpbmcgcGFja2V0IGNvbW1hbmQgKi8KKwl1OCBwY19kZWxheTsKKworCXVuc2lnbmVkIGludAliaW9zX2N5bDsJLyogQklPUy9mZGlzay9MSUxPIG51bWJlciBvZiBjeWxzICovCisJdW5zaWduZWQgaW50CWN5bDsJCS8qICJyZWFsIiBudW1iZXIgb2YgY3lscyAqLworCXVuc2lnbmVkIGludAlkcml2ZV9kYXRhOwkvKiB1c2VkIGJ5IHNldF9waW9fbW9kZS9zZWxlY3Rwcm9jICovCisJdW5zaWduZWQgaW50CWZhaWx1cmVzOwkvKiBjdXJyZW50IGZhaWx1cmUgY291bnQgKi8KKwl1bnNpZ25lZCBpbnQJbWF4X2ZhaWx1cmVzOwkvKiBtYXhpbXVtIGFsbG93ZWQgZmFpbHVyZSBjb3VudCAqLworCXU2NAkJcHJvYmVkX2NhcGFjaXR5Oy8qIGluaXRpYWwgcmVwb3J0ZWQgbWVkaWEgY2FwYWNpdHkgKGlkZS1jZCBvbmx5IGN1cnJlbnRseSkgKi8KKworCXU2NAkJY2FwYWNpdHk2NDsJLyogdG90YWwgbnVtYmVyIG9mIHNlY3RvcnMgKi8KKworCWludAkJbHVuOwkJLyogbG9naWNhbCB1bml0ICovCisJaW50CQljcmNfY291bnQ7CS8qIGNyYyBjb3VudGVyIHRvIHJlZHVjZSBkcml2ZSBzcGVlZCAqLworCisJdW5zaWduZWQgbG9uZwlkZWJ1Z19tYXNrOwkvKiBkZWJ1Z2dpbmcgbGV2ZWxzIHN3aXRjaCAqLworCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFQUNQSQorCXN0cnVjdCBpZGVfYWNwaV9kcml2ZV9saW5rICphY3BpZGF0YTsKKyNlbmRpZgorCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgZGV2aWNlCWdlbmRldjsKKwlzdHJ1Y3QgY29tcGxldGlvbiBnZW5kZXZfcmVsX2NvbXA7CS8qIHRvIGRlYWwgd2l0aCBkZXZpY2UgcmVsZWFzZSgpICovCisKKwkvKiBjdXJyZW50IHBhY2tldCBjb21tYW5kICovCisJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGM7CisKKwkvKiBjYWxsYmFjayBmb3IgcGFja2V0IGNvbW1hbmRzICovCisJdm9pZCAoKnBjX2NhbGxiYWNrKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgaW50KTsKKworCXZvaWQgKCpwY191cGRhdGVfYnVmZmVycykoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCBpZGVfYXRhcGlfcGMgKik7CisJaW50ICAoKnBjX2lvX2J1ZmZlcnMpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICosCisJCQkgICAgICB1bnNpZ25lZCBpbnQsIGludCk7CisKKwl1bnNpZ25lZCBsb25nIGF0YXBpX2ZsYWdzOworCisJc3RydWN0IGlkZV9hdGFwaV9wYyByZXF1ZXN0X3NlbnNlX3BjOworCXN0cnVjdCByZXF1ZXN0IHJlcXVlc3Rfc2Vuc2VfcnE7Cit9OworCit0eXBlZGVmIHN0cnVjdCBpZGVfZHJpdmVfcyBpZGVfZHJpdmVfdDsKKworI2RlZmluZSB0b19pZGVfZGV2aWNlKGRldikJCWNvbnRhaW5lcl9vZihkZXYsIGlkZV9kcml2ZV90LCBnZW5kZXYpCisKKyNkZWZpbmUgdG9faWRlX2RydihvYmosIGNvbnRfdHlwZSkJXAorCWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBjb250X3R5cGUsIGtyZWYpCisKKyNkZWZpbmUgaWRlX2Rydl9nKGRpc2ssIGNvbnRfdHlwZSkJXAorCWNvbnRhaW5lcl9vZigoZGlzayktPnByaXZhdGVfZGF0YSwgc3RydWN0IGNvbnRfdHlwZSwgZHJpdmVyKQorCitzdHJ1Y3QgaWRlX3BvcnRfaW5mbzsKKworc3RydWN0IGlkZV90cF9vcHMgeworCXZvaWQJKCpleGVjX2NvbW1hbmQpKHN0cnVjdCBod2lmX3MgKiwgdTgpOworCXU4CSgqcmVhZF9zdGF0dXMpKHN0cnVjdCBod2lmX3MgKik7CisJdTgJKCpyZWFkX2FsdHN0YXR1cykoc3RydWN0IGh3aWZfcyAqKTsKKwl1OAkoKnJlYWRfc2ZmX2RtYV9zdGF0dXMpKHN0cnVjdCBod2lmX3MgKik7CisKKwl2b2lkCSgqc2V0X2lycSkoc3RydWN0IGh3aWZfcyAqLCBpbnQpOworCisJdm9pZAkoKnRmX2xvYWQpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfdGFza19zICopOworCXZvaWQJKCp0Zl9yZWFkKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX3Rhc2tfcyAqKTsKKworCXZvaWQJKCppbnB1dF9kYXRhKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB2b2lkICosCisJCQkgICAgICB1bnNpZ25lZCBpbnQpOworCXZvaWQJKCpvdXRwdXRfZGF0YSkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgdm9pZCAqLAorCQkJICAgICAgIHVuc2lnbmVkIGludCk7Cit9OworCitleHRlcm4gY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgZGVmYXVsdF90cF9vcHM7CisKKy8qKgorICogc3RydWN0IGlkZV9wb3J0X29wcyAtIElERSBwb3J0IG9wZXJhdGlvbnMKKyAqCisgKiBAaW5pdF9kZXY6CQlob3N0IHNwZWNpZmljIGluaXRpYWxpemF0aW9uIG9mIGEgZGV2aWNlCisgKiBAc2V0X3Bpb19tb2RlOglyb3V0aW5lIHRvIHByb2dyYW0gaG9zdCBmb3IgUElPIG1vZGUKKyAqIEBzZXRfZG1hX21vZGU6CXJvdXRpbmUgdG8gcHJvZ3JhbSBob3N0IGZvciBETUEgbW9kZQorICogQHNlbGVjdHByb2M6CQl0d2Vha3MgaGFyZHdhcmUgdG8gc2VsZWN0IGRyaXZlCisgKiBAcmVzZXRfcG9sbDoJCWNoaXBzZXQgcG9sbGluZyBiYXNlZCBvbiBoYmEgc3BlY2lmaWNzCisgKiBAcHJlX3Jlc2V0OgkJY2hpcHNldCBzcGVjaWZpYyBjaGFuZ2VzIHRvIGRlZmF1bHQgZm9yIGRldmljZS1oYmEgcmVzZXRzCisgKiBAcmVzZXRwcm9jOgkJcm91dGluZSB0byByZXNldCBjb250cm9sbGVyIGFmdGVyIGEgZGlzayByZXNldAorICogQG1hc2twcm9jOgkJc3BlY2lhbCBob3N0IG1hc2tpbmcgZm9yIGRyaXZlIHNlbGVjdGlvbgorICogQHF1aXJrcHJvYzoJCWNoZWNrIGhvc3QncyBkcml2ZSBxdWlyayBsaXN0CisgKiBAY2xlYXJfaXJxOgkJY2xlYXIgSVJRCisgKgorICogQG1kbWFfZmlsdGVyOglmaWx0ZXIgTURNQSBtb2RlcworICogQHVkbWFfZmlsdGVyOglmaWx0ZXIgVURNQSBtb2RlcworICoKKyAqIEBjYWJsZV9kZXRlY3Q6CWRldGVjdCBjYWJsZSB0eXBlCisgKi8KK3N0cnVjdCBpZGVfcG9ydF9vcHMgeworCXZvaWQJKCppbml0X2RldikoaWRlX2RyaXZlX3QgKik7CisJdm9pZAkoKnNldF9waW9fbW9kZSkoaWRlX2RyaXZlX3QgKiwgY29uc3QgdTgpOworCXZvaWQJKCpzZXRfZG1hX21vZGUpKGlkZV9kcml2ZV90ICosIGNvbnN0IHU4KTsKKwl2b2lkCSgqc2VsZWN0cHJvYykoaWRlX2RyaXZlX3QgKik7CisJaW50CSgqcmVzZXRfcG9sbCkoaWRlX2RyaXZlX3QgKik7CisJdm9pZAkoKnByZV9yZXNldCkoaWRlX2RyaXZlX3QgKik7CisJdm9pZAkoKnJlc2V0cHJvYykoaWRlX2RyaXZlX3QgKik7CisJdm9pZAkoKm1hc2twcm9jKShpZGVfZHJpdmVfdCAqLCBpbnQpOworCXZvaWQJKCpxdWlya3Byb2MpKGlkZV9kcml2ZV90ICopOworCXZvaWQJKCpjbGVhcl9pcnEpKGlkZV9kcml2ZV90ICopOworCisJdTgJKCptZG1hX2ZpbHRlcikoaWRlX2RyaXZlX3QgKik7CisJdTgJKCp1ZG1hX2ZpbHRlcikoaWRlX2RyaXZlX3QgKik7CisKKwl1OAkoKmNhYmxlX2RldGVjdCkoc3RydWN0IGh3aWZfcyAqKTsKK307CisKK3N0cnVjdCBpZGVfZG1hX29wcyB7CisJdm9pZAkoKmRtYV9ob3N0X3NldCkoc3RydWN0IGlkZV9kcml2ZV9zICosIGludCk7CisJaW50CSgqZG1hX3NldHVwKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CisJdm9pZAkoKmRtYV9leGVjX2NtZCkoc3RydWN0IGlkZV9kcml2ZV9zICosIHU4KTsKKwl2b2lkCSgqZG1hX3N0YXJ0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CisJaW50CSgqZG1hX2VuZCkoc3RydWN0IGlkZV9kcml2ZV9zICopOworCWludAkoKmRtYV90ZXN0X2lycSkoc3RydWN0IGlkZV9kcml2ZV9zICopOworCXZvaWQJKCpkbWFfbG9zdF9pcnEpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKKwl2b2lkCSgqZG1hX3RpbWVvdXQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKK307CisKK3N0cnVjdCBpZGVfaG9zdDsKKwordHlwZWRlZiBzdHJ1Y3QgaHdpZl9zIHsKKwlzdHJ1Y3QgaHdpZl9zICpuZXh0OwkJLyogZm9yIGxpbmtlZC1saXN0IGluIGlkZV9od2dyb3VwX3QgKi8KKwlzdHJ1Y3QgaHdpZl9zICptYXRlOwkJLyogb3RoZXIgaHdpZiBmcm9tIHNhbWUgUENJIGNoaXAgKi8KKwlzdHJ1Y3QgaHdncm91cF9zICpod2dyb3VwOwkvKiBhY3R1YWxseSAoaWRlX2h3Z3JvdXBfdCAqKSAqLworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsJLyogL3Byb2MvaWRlLyBkaXJlY3RvcnkgZW50cnkgKi8KKworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKKworCWNoYXIgbmFtZVs2XTsJCQkvKiBuYW1lIG9mIGludGVyZmFjZSwgZWcuICJpZGUwIiAqLworCisJc3RydWN0IGlkZV9pb19wb3J0cwlpb19wb3J0czsKKworCXVuc2lnbmVkIGxvbmcJc2F0YV9zY3JbU0FUQV9OUl9QT1JUU107CisKKwlpZGVfZHJpdmVfdAlkcml2ZXNbTUFYX0RSSVZFU107CS8qIGRyaXZlIGluZm8gKi8KKworCXU4IG1ham9yOwkvKiBvdXIgbWFqb3IgbnVtYmVyICovCisJdTggaW5kZXg7CS8qIDAgZm9yIGlkZTA7IDEgZm9yIGlkZTE7IC4uLiAqLworCXU4IGNoYW5uZWw7CS8qIGZvciBkdWFsLXBvcnQgY2hpcHM6IDA9cHJpbWFyeSwgMT1zZWNvbmRhcnkgKi8KKworCXUzMiBob3N0X2ZsYWdzOworCisJdTggcGlvX21hc2s7CisKKwl1OCB1bHRyYV9tYXNrOworCXU4IG13ZG1hX21hc2s7CisJdTggc3dkbWFfbWFzazsKKworCXU4IGNibDsJCS8qIGNhYmxlIHR5cGUgKi8KKworCWh3aWZfY2hpcHNldF90IGNoaXBzZXQ7CS8qIHN1Yi1tb2R1bGUgZm9yIHR1bmluZy4uICovCisKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlpZGVfYWNrX2ludHJfdCAqYWNrX2ludHI7CisKKwl2b2lkICgqcndfZGlzaykoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CisKKwljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcwkJKnRwX29wczsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzCSpwb3J0X29wczsKKwljb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMJKmRtYV9vcHM7CisKKwkvKiBkbWEgcGh5c2ljYWwgcmVnaW9uIGRlc2NyaXB0b3IgdGFibGUgKGNwdSB2aWV3KSAqLworCXVuc2lnbmVkIGludAkqZG1hdGFibGVfY3B1OworCS8qIGRtYSBwaHlzaWNhbCByZWdpb24gZGVzY3JpcHRvciB0YWJsZSAoZG1hIHZpZXcpICovCisJZG1hX2FkZHJfdAlkbWF0YWJsZV9kbWE7CisKKwkvKiBtYXhpbXVtIG51bWJlciBvZiBQUkQgdGFibGUgZW50cmllcyAqLworCWludCBwcmRfbWF4X25lbnRzOworCS8qIFBSRCBlbnRyeSBzaXplIGluIGJ5dGVzICovCisJaW50IHByZF9lbnRfc2l6ZTsKKworCS8qIFNjYXR0ZXItZ2F0aGVyIGxpc3QgdXNlZCB0byBidWlsZCB0aGUgYWJvdmUgKi8KKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3RhYmxlOworCWludCBzZ19tYXhfbmVudHM7CQkvKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIGl0ICovCisJaW50IHNnX25lbnRzOwkJCS8qIEN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMgaW4gaXQgKi8KKwlpbnQgc2dfZG1hX2RpcmVjdGlvbjsJCS8qIGRtYSB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KKworCS8qIGRhdGEgcGhhc2Ugb2YgdGhlIGFjdGl2ZSBjb21tYW5kIChjdXJyZW50bHkgb25seSB2YWxpZCBmb3IgUElPL0RNQSkgKi8KKwlpbnQJCWRhdGFfcGhhc2U7CisKKwlzdHJ1Y3QgaWRlX3Rhc2tfcyB0YXNrOwkJLyogY3VycmVudCBjb21tYW5kICovCisKKwl1bnNpZ25lZCBpbnQgbnNlY3Q7CisJdW5zaWduZWQgaW50IG5sZWZ0OworCXN0cnVjdCBzY2F0dGVybGlzdCAqY3Vyc2c7CisJdW5zaWduZWQgaW50IGN1cnNnX29mczsKKworCWludAkJcnFzaXplOwkJLyogbWF4IHNlY3RvcnMgcGVyIHJlcXVlc3QgKi8KKwlpbnQJCWlycTsJCS8qIG91ciBpcnEgbnVtYmVyICovCisKKwl1bnNpZ25lZCBsb25nCWRtYV9iYXNlOwkvKiBiYXNlIGFkZHIgZm9yIGRtYSBwb3J0cyAqLworCisJdW5zaWduZWQgbG9uZwljb25maWdfZGF0YTsJLyogZm9yIHVzZSBieSBjaGlwc2V0LXNwZWNpZmljIGNvZGUgKi8KKwl1bnNpZ25lZCBsb25nCXNlbGVjdF9kYXRhOwkvKiBmb3IgdXNlIGJ5IGNoaXBzZXQtc3BlY2lmaWMgY29kZSAqLworCisJdW5zaWduZWQgbG9uZwlleHRyYV9iYXNlOwkvKiBleHRyYSBhZGRyIGZvciBkbWEgcG9ydHMgKi8KKwl1bnNpZ25lZAlleHRyYV9wb3J0czsJLyogbnVtYmVyIG9mIGV4dHJhIGRtYSBwb3J0cyAqLworCisJdW5zaWduZWQJcHJlc2VudCAgICA6IDE7CS8qIHRoaXMgaW50ZXJmYWNlIGV4aXN0cyAqLworCXVuc2lnbmVkCXNlcmlhbGl6ZWQgOiAxOwkvKiBzZXJpYWxpemVkIGFsbCBjaGFubmVsIG9wZXJhdGlvbiAqLworCXVuc2lnbmVkCXNoYXJpbmdfaXJxOiAxOwkvKiAxID0gc2hhcmluZyBpcnEgd2l0aCBhbm90aGVyIGh3aWYgKi8KKwl1bnNpZ25lZAlzZ19tYXBwZWQgIDogMTsJLyogc2dfdGFibGUgYW5kIHNnX25lbnRzIGFyZSByZWFkeSAqLworCisJc3RydWN0IGRldmljZQkJZ2VuZGV2OworCXN0cnVjdCBkZXZpY2UJCSpwb3J0ZGV2OworCisJc3RydWN0IGNvbXBsZXRpb24gZ2VuZGV2X3JlbF9jb21wOyAvKiBUbyBkZWFsIHdpdGggZGV2aWNlIHJlbGVhc2UoKSAqLworCisJdm9pZAkJKmh3aWZfZGF0YTsJLyogZXh0cmEgaHdpZiBkYXRhICovCisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVBQ1BJCisJc3RydWN0IGlkZV9hY3BpX2h3aWZfbGluayAqYWNwaWRhdGE7CisjZW5kaWYKK30gX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcCBpZGVfaHdpZl90OworCisjZGVmaW5lIE1BWF9IT1NUX1BPUlRTIDQKKworc3RydWN0IGlkZV9ob3N0IHsKKwlpZGVfaHdpZl90CSpwb3J0c1tNQVhfSE9TVF9QT1JUU107CisJdW5zaWduZWQgaW50CW5fcG9ydHM7CisJc3RydWN0IGRldmljZQkqZGV2WzJdOworCXVuc2lnbmVkIGludAkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CisJdW5zaWduZWQgbG9uZwlob3N0X2ZsYWdzOworCXZvaWQJCSpob3N0X3ByaXY7Cit9OworCisvKgorICogIGludGVybmFsIGlkZSBpbnRlcnJ1cHQgaGFuZGxlciB0eXBlCisgKi8KK3R5cGVkZWYgaWRlX3N0YXJ0c3RvcF90IChpZGVfaGFuZGxlcl90KShpZGVfZHJpdmVfdCAqKTsKK3R5cGVkZWYgaW50IChpZGVfZXhwaXJ5X3QpKGlkZV9kcml2ZV90ICopOworCisvKiB1c2VkIGJ5IGlkZS1jZCwgaWRlLWZsb3BweSwgZXRjLiAqLwordHlwZWRlZiB2b2lkICh4ZmVyX2Z1bmNfdCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICosIHVuc2lnbmVkKTsKKwordHlwZWRlZiBzdHJ1Y3QgaHdncm91cF9zIHsKKwkJLyogaXJxIGhhbmRsZXIsIGlmIGFjdGl2ZSAqLworCWlkZV9zdGFydHN0b3BfdAkoKmhhbmRsZXIpKGlkZV9kcml2ZV90ICopOworCisJCS8qIEJPT0w6IHByb3RlY3RzIGFsbCBmaWVsZHMgYmVsb3cgKi8KKwl2b2xhdGlsZSBpbnQgYnVzeTsKKwkJLyogQk9PTDogd2FrZSB1cyB1cCBvbiB0aW1lciBleHBpcnkgKi8KKwl1bnNpZ25lZCBpbnQgc2xlZXBpbmcJOiAxOworCQkvKiBCT09MOiBwb2xsaW5nIGFjdGl2ZSAmIHBvbGxfdGltZW91dCBmaWVsZCB2YWxpZCAqLworCXVuc2lnbmVkIGludCBwb2xsaW5nCTogMTsKKworCQkvKiBjdXJyZW50IGRyaXZlICovCisJaWRlX2RyaXZlX3QgKmRyaXZlOworCQkvKiBwdHIgdG8gY3VycmVudCBod2lmIGluIGxpbmtlZC1saXN0ICovCisJaWRlX2h3aWZfdCAqaHdpZjsKKworCQkvKiBjdXJyZW50IHJlcXVlc3QgKi8KKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisKKwkJLyogZmFpbHNhZmUgdGltZXIgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwkJLyogdGltZW91dCB2YWx1ZSBkdXJpbmcgbG9uZyBwb2xscyAqLworCXVuc2lnbmVkIGxvbmcgcG9sbF90aW1lb3V0OworCQkvKiBxdWVyaWVkIHVwb24gdGltZW91dHMgKi8KKwlpbnQgKCpleHBpcnkpKGlkZV9kcml2ZV90ICopOworCisJaW50IHJlcV9nZW47CisJaW50IHJlcV9nZW5fdGltZXI7Cit9IGlkZV9od2dyb3VwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGlkZV9kcml2ZXJfcyBpZGVfZHJpdmVyX3Q7CisKK2V4dGVybiBzdHJ1Y3QgbXV0ZXggaWRlX3NldHRpbmdfbXR4OworCisvKgorICogY29uZmlndXJhYmxlIGRyaXZlIHNldHRpbmdzCisgKi8KKworI2RlZmluZSBEU19TWU5DCSgxIDw8IDApCisKK3N0cnVjdCBpZGVfZGV2c2V0IHsKKwlpbnQJCSgqZ2V0KShpZGVfZHJpdmVfdCAqKTsKKwlpbnQJCSgqc2V0KShpZGVfZHJpdmVfdCAqLCBpbnQpOworCXVuc2lnbmVkIGludAlmbGFnczsKK307CisKKyNkZWZpbmUgX19ERVZTRVQoX2ZsYWdzLCBfZ2V0LCBfc2V0KSB7IFwKKwkuZmxhZ3MJPSBfZmxhZ3MsIFwKKwkuZ2V0CT0gX2dldCwJXAorCS5zZXQJPSBfc2V0LAlcCit9CisKKyNkZWZpbmUgaWRlX2RldnNldF9nZXQobmFtZSwgZmllbGQpIFwKK3N0YXRpYyBpbnQgZ2V0XyMjbmFtZShpZGVfZHJpdmVfdCAqZHJpdmUpIFwKK3sgXAorCXJldHVybiBkcml2ZS0+ZmllbGQ7IFwKK30KKworI2RlZmluZSBpZGVfZGV2c2V0X3NldChuYW1lLCBmaWVsZCkgXAorc3RhdGljIGludCBzZXRfIyNuYW1lKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykgXAoreyBcCisJZHJpdmUtPmZpZWxkID0gYXJnOyBcCisJcmV0dXJuIDA7IFwKK30KKworI2RlZmluZSBpZGVfZGV2c2V0X2dldF9mbGFnKG5hbWUsIGZsYWcpIFwKK3N0YXRpYyBpbnQgZ2V0XyMjbmFtZShpZGVfZHJpdmVfdCAqZHJpdmUpIFwKK3sgXAorCXJldHVybiAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgZmxhZyk7IFwKK30KKworI2RlZmluZSBpZGVfZGV2c2V0X3NldF9mbGFnKG5hbWUsIGZsYWcpIFwKK3N0YXRpYyBpbnQgc2V0XyMjbmFtZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpIFwKK3sgXAorCWlmIChhcmcpIFwKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBmbGFnOyBcCisJZWxzZSBcCisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfmZsYWc7IFwKKwlyZXR1cm4gMDsgXAorfQorCisjZGVmaW5lIF9fSURFX0RFVlNFVChfbmFtZSwgX2ZsYWdzLCBfZ2V0LCBfc2V0KSBcCitjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCBpZGVfZGV2c2V0XyMjX25hbWUgPSBcCisJX19ERVZTRVQoX2ZsYWdzLCBfZ2V0LCBfc2V0KQorCisjZGVmaW5lIElERV9ERVZTRVQoX25hbWUsIF9mbGFncywgX2dldCwgX3NldCkgXAorc3RhdGljIF9fSURFX0RFVlNFVChfbmFtZSwgX2ZsYWdzLCBfZ2V0LCBfc2V0KQorCisjZGVmaW5lIGlkZV9kZXZzZXRfcncoX25hbWUsIF9mdW5jKSBcCitJREVfREVWU0VUKF9uYW1lLCAwLCBnZXRfIyNfZnVuYywgc2V0XyMjX2Z1bmMpCisKKyNkZWZpbmUgaWRlX2RldnNldF93KF9uYW1lLCBfZnVuYykgXAorSURFX0RFVlNFVChfbmFtZSwgMCwgTlVMTCwgc2V0XyMjX2Z1bmMpCisKKyNkZWZpbmUgaWRlX2V4dF9kZXZzZXRfcncoX25hbWUsIF9mdW5jKSBcCitfX0lERV9ERVZTRVQoX25hbWUsIDAsIGdldF8jI19mdW5jLCBzZXRfIyNfZnVuYykKKworI2RlZmluZSBpZGVfZXh0X2RldnNldF9yd19zeW5jKF9uYW1lLCBfZnVuYykgXAorX19JREVfREVWU0VUKF9uYW1lLCBEU19TWU5DLCBnZXRfIyNfZnVuYywgc2V0XyMjX2Z1bmMpCisKKyNkZWZpbmUgaWRlX2RlY2xfZGV2c2V0KF9uYW1lKSBcCitleHRlcm4gY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgaWRlX2RldnNldF8jI19uYW1lCisKK2lkZV9kZWNsX2RldnNldChpb18zMmJpdCk7CitpZGVfZGVjbF9kZXZzZXQoa2VlcHNldHRpbmdzKTsKK2lkZV9kZWNsX2RldnNldChwaW9fbW9kZSk7CitpZGVfZGVjbF9kZXZzZXQodW5tYXNraXJxKTsKK2lkZV9kZWNsX2RldnNldCh1c2luZ19kbWEpOworCisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCisvKgorICogL3Byb2MvaWRlIGludGVyZmFjZQorICovCisKKyNkZWZpbmUgaWRlX2RldnNldF9yd19maWVsZChfbmFtZSwgX2ZpZWxkKSBcCitpZGVfZGV2c2V0X2dldChfbmFtZSwgX2ZpZWxkKTsgXAoraWRlX2RldnNldF9zZXQoX25hbWUsIF9maWVsZCk7IFwKK0lERV9ERVZTRVQoX25hbWUsIERTX1NZTkMsIGdldF8jI19uYW1lLCBzZXRfIyNfbmFtZSkKKworI2RlZmluZSBpZGVfZGV2c2V0X3J3X2ZsYWcoX25hbWUsIF9maWVsZCkgXAoraWRlX2RldnNldF9nZXRfZmxhZyhfbmFtZSwgX2ZpZWxkKTsgXAoraWRlX2RldnNldF9zZXRfZmxhZyhfbmFtZSwgX2ZpZWxkKTsgXAorSURFX0RFVlNFVChfbmFtZSwgRFNfU1lOQywgZ2V0XyMjX25hbWUsIHNldF8jI19uYW1lKQorCitzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0IHsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwljb25zdCBzdHJ1Y3QgaWRlX2RldnNldAkqc2V0dGluZzsKKwlpbnQJCQltaW4sIG1heDsKKwlpbnQJCQkoKm11bGYpKGlkZV9kcml2ZV90ICopOworCWludAkJCSgqZGl2ZikoaWRlX2RyaXZlX3QgKik7Cit9OworCisjZGVmaW5lIF9fSURFX1BST0NfREVWU0VUKF9uYW1lLCBfbWluLCBfbWF4LCBfbXVsZiwgX2RpdmYpIHsgXAorCS5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLCBcCisJLnNldHRpbmcgPSAmaWRlX2RldnNldF8jI19uYW1lLCBcCisJLm1pbiA9IF9taW4sIFwKKwkubWF4ID0gX21heCwgXAorCS5tdWxmID0gX211bGYsIFwKKwkuZGl2ZiA9IF9kaXZmLCBcCit9CisKKyNkZWZpbmUgSURFX1BST0NfREVWU0VUKF9uYW1lLCBfbWluLCBfbWF4KSBcCitfX0lERV9QUk9DX0RFVlNFVChfbmFtZSwgX21pbiwgX21heCwgTlVMTCwgTlVMTCkKKwordHlwZWRlZiBzdHJ1Y3QgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJbW9kZV90CQltb2RlOworCXJlYWRfcHJvY190CSpyZWFkX3Byb2M7CisJd3JpdGVfcHJvY190CSp3cml0ZV9wcm9jOworfSBpZGVfcHJvY19lbnRyeV90OworCit2b2lkIHByb2NfaWRlX2NyZWF0ZSh2b2lkKTsKK3ZvaWQgcHJvY19pZGVfZGVzdHJveSh2b2lkKTsKK3ZvaWQgaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChpZGVfaHdpZl90ICopOwordm9pZCBpZGVfcHJvY19wb3J0X3JlZ2lzdGVyX2RldmljZXMoaWRlX2h3aWZfdCAqKTsKK3ZvaWQgaWRlX3Byb2NfdW5yZWdpc3Rlcl9kZXZpY2UoaWRlX2RyaXZlX3QgKik7Cit2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfcG9ydChpZGVfaHdpZl90ICopOwordm9pZCBpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2RyaXZlcl90ICopOwordm9pZCBpZGVfcHJvY191bnJlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVfdCAqLCBpZGVfZHJpdmVyX3QgKik7CisKK3JlYWRfcHJvY190IHByb2NfaWRlX3JlYWRfY2FwYWNpdHk7CityZWFkX3Byb2NfdCBwcm9jX2lkZV9yZWFkX2dlb21ldHJ5OworCisvKgorICogU3RhbmRhcmQgZXhpdCBzdHVmZjoKKyAqLworI2RlZmluZSBQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLHN0YXJ0LG9mZixjb3VudCxlb2YsbGVuKSBcCit7CQkJCQlcCisJbGVuIC09IG9mZjsJCQlcCisJaWYgKGxlbiA8IGNvdW50KSB7CQlcCisJCSplb2YgPSAxOwkJXAorCQlpZiAobGVuIDw9IDApCQlcCisJCQlyZXR1cm4gMDsJXAorCX0gZWxzZQkJCQlcCisJCWxlbiA9IGNvdW50OwkJXAorCSpzdGFydCA9IHBhZ2UgKyBvZmY7CQlcCisJcmV0dXJuIGxlbjsJCQlcCit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHByb2NfaWRlX2NyZWF0ZSh2b2lkKSB7IDsgfQorc3RhdGljIGlubGluZSB2b2lkIHByb2NfaWRlX2Rlc3Ryb3kodm9pZCkgeyA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcHJvY19yZWdpc3Rlcl9wb3J0KGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3Byb2NfcG9ydF9yZWdpc3Rlcl9kZXZpY2VzKGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3Byb2NfdW5yZWdpc3Rlcl9kZXZpY2UoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQorc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfcG9ydChpZGVfaHdpZl90ICpod2lmKSB7IDsgfQorc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9kcml2ZXJfdCAqZHJpdmVyKSB7IDsgfQorc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2RyaXZlcl90ICpkcml2ZXIpIHsgOyB9CisjZGVmaW5lIFBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2Usc3RhcnQsb2ZmLGNvdW50LGVvZixsZW4pIHJldHVybiAwOworI2VuZGlmCisKK2VudW0geworCS8qIGVudGVyL2V4aXQgZnVuY3Rpb25zICovCisJSURFX0RCR19GVU5DID0JCQkoMSA8PCAwKSwKKwkvKiBzZW5zZSBrZXkvYXNjIGhhbmRsaW5nICovCisJSURFX0RCR19TRU5TRSA9CQkJKDEgPDwgMSksCisJLyogcGFja2V0IGNvbW1hbmRzIGhhbmRsaW5nICovCisJSURFX0RCR19QQyA9CQkJKDEgPDwgMiksCisJLyogcmVxdWVzdCBoYW5kbGluZyAqLworCUlERV9EQkdfUlEgPQkJCSgxIDw8IDMpLAorCS8qIGRyaXZlciBwcm9iaW5nL3NldHVwICovCisJSURFX0RCR19QUk9CRSA9CQkJKDEgPDwgNCksCit9OworCisvKiBEUlZfTkFNRSBoYXMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgZHJpdmVyIGJlZm9yZSB1c2luZyB0aGUgbWFjcm8gYmVsb3cgKi8KKyNkZWZpbmUgX19pZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKQkJCVwKK3sJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoZHJpdmUtPmRlYnVnX21hc2sgJiBsdmwpKQkJCVwKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAiIGZtdCwgIyMgYXJncyk7CVwKK30KKworLyoKKyAqIFBvd2VyIE1hbmFnZW1lbnQgc3RhdGUgbWFjaGluZSAocnEtPnBtLT5wbV9zdGVwKS4KKyAqCisgKiBGb3IgZWFjaCBzdGVwLCB0aGUgY29yZSBjYWxscyBpZGVfc3RhcnRfcG93ZXJfc3RlcCgpIGZpcnN0LgorICogVGhpcyBjYW4gcmV0dXJuOgorICoJLSBpZGVfc3RvcHBlZCA6CUluIHRoaXMgY2FzZSwgdGhlIGNvcmUgY2FsbHMgdXMgYmFjayBhZ2FpbiB1bmxlc3MKKyAqCQkJc3RlcCBoYXZlIGJlZW4gc2V0IHRvIGlkZV9wb3dlcl9zdGF0ZV9jb21wbGV0ZWQuCisgKgktIGlkZV9zdGFydGVkIDoJSW4gdGhpcyBjYXNlLCB0aGUgY2hhbm5lbCBpcyBsZWZ0IGJ1c3kgdW50aWwgYW4KKyAqCQkJYXN5bmMgZXZlbnQgKGludGVycnVwdCkgb2NjdXJzLgorICogVHlwaWNhbGx5LCBpZGVfc3RhcnRfcG93ZXJfc3RlcCgpIHdpbGwgaXNzdWUgYSB0YXNrZmlsZSByZXF1ZXN0IHdpdGgKKyAqIGRvX3J3X3Rhc2tmaWxlKCkuCisgKgorICogVXBvbiByZWNlcHRpb24gb2YgdGhlIGludGVycnVwdCwgdGhlIGNvcmUgd2lsbCBjYWxsIGlkZV9jb21wbGV0ZV9wb3dlcl9zdGVwKCkKKyAqIHdpdGggdGhlIGVycm9yIGNvZGUgaWYgYW55LiBUaGlzIHJvdXRpbmUgc2hvdWxkIHVwZGF0ZSB0aGUgc3RlcCB2YWx1ZQorICogYW5kIHJldHVybi4gSXQgc2hvdWxkIG5vdCBzdGFydCBhIG5ldyByZXF1ZXN0LiBUaGUgY29yZSB3aWxsIGNhbGwKKyAqIGlkZV9zdGFydF9wb3dlcl9zdGVwKCkgZm9yIHRoZSBuZXcgc3RlcCB2YWx1ZSwgdW5sZXNzIHN0ZXAgaGF2ZSBiZWVuCisgKiBzZXQgdG8gSURFX1BNX0NPTVBMRVRFRC4KKyAqLworZW51bSB7CisJSURFX1BNX1NUQVJUX1NVU1BFTkQsCisJSURFX1BNX0ZMVVNIX0NBQ0hFCT0gSURFX1BNX1NUQVJUX1NVU1BFTkQsCisJSURFX1BNX1NUQU5EQlksCisKKwlJREVfUE1fU1RBUlRfUkVTVU1FLAorCUlERV9QTV9SRVNUT1JFX1BJTwk9IElERV9QTV9TVEFSVF9SRVNVTUUsCisJSURFX1BNX0lETEUsCisJSURFX1BNX1JFU1RPUkVfRE1BLAorCisJSURFX1BNX0NPTVBMRVRFRCwKK307CisKKy8qCisgKiBTdWJkcml2ZXJzIHN1cHBvcnQuCisgKgorICogVGhlIGdlbmRyaXZlci5vd25lciBmaWVsZCBzaG91bGQgYmUgc2V0IHRvIHRoZSBtb2R1bGUgb3duZXIgb2YgdGhpcyBkcml2ZXIuCisgKiBUaGUgZ2VuZHJpdmVyLm5hbWUgZmllbGQgc2hvdWxkIGJlIHNldCB0byB0aGUgbmFtZSBvZiB0aGlzIGRyaXZlcgorICovCitzdHJ1Y3QgaWRlX2RyaXZlcl9zIHsKKwljb25zdCBjaGFyCQkJKnZlcnNpb247CisJaWRlX3N0YXJ0c3RvcF90CSgqZG9fcmVxdWVzdCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgc2VjdG9yX3QpOworCWludAkJKCplbmRfcmVxdWVzdCkoaWRlX2RyaXZlX3QgKiwgaW50LCBpbnQpOworCWlkZV9zdGFydHN0b3BfdAkoKmVycm9yKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4LCB1OCk7CisJc3RydWN0IGRldmljZV9kcml2ZXIJZ2VuX2RyaXZlcjsKKwlpbnQJCSgqcHJvYmUpKGlkZV9kcml2ZV90ICopOworCXZvaWQJCSgqcmVtb3ZlKShpZGVfZHJpdmVfdCAqKTsKKwl2b2lkCQkoKnJlc3VtZSkoaWRlX2RyaXZlX3QgKik7CisJdm9pZAkJKCpzaHV0ZG93bikoaWRlX2RyaXZlX3QgKik7CisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCisJaWRlX3Byb2NfZW50cnlfdCAqCQkoKnByb2NfZW50cmllcykoaWRlX2RyaXZlX3QgKik7CisJY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCAqCSgqcHJvY19kZXZzZXRzKShpZGVfZHJpdmVfdCAqKTsKKyNlbmRpZgorfTsKKworI2RlZmluZSB0b19pZGVfZHJpdmVyKGRydikgY29udGFpbmVyX29mKGRydiwgaWRlX2RyaXZlcl90LCBnZW5fZHJpdmVyKQorCitpbnQgaWRlX2RldmljZV9nZXQoaWRlX2RyaXZlX3QgKik7Cit2b2lkIGlkZV9kZXZpY2VfcHV0KGlkZV9kcml2ZV90ICopOworCitzdHJ1Y3QgaWRlX2lvY3RsX2RldnNldCB7CisJdW5zaWduZWQgaW50CWdldF9pb2N0bDsKKwl1bnNpZ25lZCBpbnQJc2V0X2lvY3RsOworCWNvbnN0IHN0cnVjdCBpZGVfZGV2c2V0ICpzZXR0aW5nOworfTsKKworaW50IGlkZV9zZXR0aW5nX2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwgdW5zaWduZWQgaW50LAorCQkgICAgICB1bnNpZ25lZCBsb25nLCBjb25zdCBzdHJ1Y3QgaWRlX2lvY3RsX2RldnNldCAqKTsKKworaW50IGdlbmVyaWNfaWRlX2lvY3RsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBmaWxlICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKKwkJICAgICAgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOworCitleHRlcm4gaW50IGlkZV92bGJfY2xrOworZXh0ZXJuIGludCBpZGVfcGNpX2NsazsKKworZXh0ZXJuIGludCBpZGVfZW5kX3JlcXVlc3QgKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnJzZWNzKTsKK2ludCBpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCisJCQkgICAgIGludCB1cHRvZGF0ZSwgaW50IG5yX3NlY3RvcnMpOworCitleHRlcm4gdm9pZCBpZGVfc2V0X2hhbmRsZXIgKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KTsKKwordm9pZCBpZGVfZXhlY3V0ZV9jb21tYW5kKGlkZV9kcml2ZV90ICosIHU4LCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCwKKwkJCSBpZGVfZXhwaXJ5X3QgKik7CisKK3ZvaWQgaWRlX2V4ZWN1dGVfcGt0X2NtZChpZGVfZHJpdmVfdCAqKTsKKwordm9pZCBpZGVfcGFkX3RyYW5zZmVyKGlkZV9kcml2ZV90ICosIGludCwgaW50KTsKKworaWRlX3N0YXJ0c3RvcF90IF9faWRlX2Vycm9yKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHU4LCB1OCk7CisKK2lkZV9zdGFydHN0b3BfdCBpZGVfZXJyb3IgKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqbXNnLCBieXRlIHN0YXQpOworCit2b2lkIGlkZV9maXhfZHJpdmVpZCh1MTYgKik7CisKK2V4dGVybiB2b2lkIGlkZV9maXhzdHJpbmcodTggKiwgY29uc3QgaW50LCBjb25zdCBpbnQpOworCitpbnQgaWRlX2J1c3lfc2xlZXAoaWRlX2h3aWZfdCAqLCB1bnNpZ25lZCBsb25nLCBpbnQpOworCitpbnQgaWRlX3dhaXRfc3RhdChpZGVfc3RhcnRzdG9wX3QgKiwgaWRlX2RyaXZlX3QgKiwgdTgsIHU4LCB1bnNpZ25lZCBsb25nKTsKKworZXh0ZXJuIGlkZV9zdGFydHN0b3BfdCBpZGVfZG9fcmVzZXQgKGlkZV9kcml2ZV90ICopOworCitleHRlcm4gaW50IGlkZV9kZXZzZXRfZXhlY3V0ZShpZGVfZHJpdmVfdCAqZHJpdmUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywgaW50IGFyZyk7CisKK2V4dGVybiB2b2lkIGlkZV9kb19kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CisKK2V4dGVybiB2b2lkIGlkZV9lbmRfZHJpdmVfY21kKGlkZV9kcml2ZV90ICosIHU4LCB1OCk7CisKIHZvaWQgaWRlX3RmX2R1bXAoY29uc3QgY2hhciAqLCBzdHJ1Y3QgaWRlX3Rhc2tmaWxlICopOwogCiB2b2lkIGlkZV9leGVjX2NvbW1hbmQoaWRlX2h3aWZfdCAqLCB1OCk7CkBAIC0xMTUwLDYgKzEyMjksMTMgQEAKIAogdm9pZCBpZGVfaW5pdF9wYyhzdHJ1Y3QgaWRlX2F0YXBpX3BjICopOwogCisvKiBEaXNrIGhlYWQgcGFya2luZyAqLworZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGlkZV9wYXJrX3dxOworc3NpemVfdCBpZGVfcGFya19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgIGNoYXIgKmJ1Zik7Citzc2l6ZV90IGlkZV9wYXJrX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pOworCiAvKgogICogU3BlY2lhbCByZXF1ZXN0cyBmb3IgaWRlLXRhcGUgYmxvY2sgZGV2aWNlIHN0cmF0ZWd5IHJvdXRpbmUuCiAgKgpAQCAtMTE2MywyNCArMTI0OSwyMiBAQAogCVJFUV9JREVUQVBFX1dSSVRFCT0gKDEgPDwgMyksCiB9OwogCi12b2lkIGlkZV9xdWV1ZV9wY19oZWFkKGlkZV9kcml2ZV90ICosIHN0cnVjdCBnZW5kaXNrICosIHN0cnVjdCBpZGVfYXRhcGlfcGMgKiwKLQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICopOwogaW50IGlkZV9xdWV1ZV9wY190YWlsKGlkZV9kcml2ZV90ICosIHN0cnVjdCBnZW5kaXNrICosIHN0cnVjdCBpZGVfYXRhcGlfcGMgKik7CiAKIGludCBpZGVfZG9fdGVzdF91bml0X3JlYWR5KGlkZV9kcml2ZV90ICosIHN0cnVjdCBnZW5kaXNrICopOwogaW50IGlkZV9kb19zdGFydF9zdG9wKGlkZV9kcml2ZV90ICosIHN0cnVjdCBnZW5kaXNrICosIGludCk7CiBpbnQgaWRlX3NldF9tZWRpYV9sb2NrKGlkZV9kcml2ZV90ICosIHN0cnVjdCBnZW5kaXNrICosIGludCk7Cit2b2lkIGlkZV9jcmVhdGVfcmVxdWVzdF9zZW5zZV9jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9hdGFwaV9wYyAqKTsKK3ZvaWQgaWRlX3JldHJ5X3BjKGlkZV9kcml2ZV90ICosIHN0cnVjdCBnZW5kaXNrICopOwogCi1pZGVfc3RhcnRzdG9wX3QgaWRlX3BjX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKLQlpZGVfaGFuZGxlcl90ICpoYW5kbGVyLCB1bnNpZ25lZCBpbnQgdGltZW91dCwgaWRlX2V4cGlyeV90ICpleHBpcnksCi0Jdm9pZCAoKnVwZGF0ZV9idWZmZXJzKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICopLAotCXZvaWQgKCpyZXRyeV9wYykoaWRlX2RyaXZlX3QgKiksIHZvaWQgKCpkc2NfaGFuZGxlKShpZGVfZHJpdmVfdCAqKSwKLQlpbnQgKCppb19idWZmZXJzKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICosIHVuc2lnbmVkIGludCwKLQkJCSAgIGludCkpOwotaWRlX3N0YXJ0c3RvcF90IGlkZV90cmFuc2Zlcl9wYyhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICosCi0JCQkJaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsIGlkZV9leHBpcnlfdCAqKTsKLWlkZV9zdGFydHN0b3BfdCBpZGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9hdGFwaV9wYyAqLAotCQkJICAgICBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCwgaWRlX2V4cGlyeV90ICopOworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGlkZV9zY3NpX2dldF90aW1lb3V0KHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQoreworCXJldHVybiBtYXhfdCh1bnNpZ25lZCBsb25nLCBXQUlUX0NNRCwgcGMtPnRpbWVvdXQgLSBqaWZmaWVzKTsKK30KKworaW50IGlkZV9zY3NpX2V4cGlyeShpZGVfZHJpdmVfdCAqKTsKKworaWRlX3N0YXJ0c3RvcF90IGlkZV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqLCB1bnNpZ25lZCBpbnQsIGlkZV9leHBpcnlfdCAqKTsKIAogaWRlX3N0YXJ0c3RvcF90IGRvX3J3X3Rhc2tmaWxlKGlkZV9kcml2ZV90ICosIGlkZV90YXNrX3QgKik7CiAKQEAgLTEzNTgsNiArMTQ0Miw3IEBACiBpbnQgaWRlX2luX2RyaXZlX2xpc3QodTE2ICosIGNvbnN0IHN0cnVjdCBkcml2ZV9saXN0X2VudHJ5ICopOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BCitpbnQgaWRlX2RtYV9nb29kX2RyaXZlKGlkZV9kcml2ZV90ICopOwogaW50IF9faWRlX2RtYV9iYWRfZHJpdmUoaWRlX2RyaXZlX3QgKik7CiBpbnQgaWRlX2lkX2RtYV9idWcoaWRlX2RyaXZlX3QgKik7CiAKQEAgLTEzNzUsMjUgKzE0NjAsMjkgQEAKIHZvaWQgaWRlX2NoZWNrX2RtYV9jcmMoaWRlX2RyaXZlX3QgKik7CiBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV9pbnRyKGlkZV9kcml2ZV90ICopOwogCitpbnQgaWRlX2FsbG9jYXRlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqKTsKK3ZvaWQgaWRlX3JlbGVhc2VfZG1hX2VuZ2luZShpZGVfaHdpZl90ICopOworCiBpbnQgaWRlX2J1aWxkX3NnbGlzdChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHZvaWQgaWRlX2Rlc3Ryb3lfZG1hdGFibGUoaWRlX2RyaXZlX3QgKik7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGCitpbnQgY29uZmlnX2RyaXZlX2Zvcl9kbWEoaWRlX2RyaXZlX3QgKik7CiBleHRlcm4gaW50IGlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKLWludCBpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZShpZGVfaHdpZl90ICopOwotdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKik7Ci0KIHZvaWQgaWRlX2RtYV9ob3N0X3NldChpZGVfZHJpdmVfdCAqLCBpbnQpOwogZXh0ZXJuIGludCBpZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICopOwogdm9pZCBpZGVfZG1hX2V4ZWNfY21kKGlkZV9kcml2ZV90ICosIHU4KTsKIGV4dGVybiB2b2lkIGlkZV9kbWFfc3RhcnQoaWRlX2RyaXZlX3QgKik7Ci1leHRlcm4gaW50IF9faWRlX2RtYV9lbmQoaWRlX2RyaXZlX3QgKik7CitpbnQgaWRlX2RtYV9lbmQoaWRlX2RyaXZlX3QgKik7CiBpbnQgaWRlX2RtYV90ZXN0X2lycShpZGVfZHJpdmVfdCAqKTsKLWV4dGVybiB2b2lkIGlkZV9kbWFfbG9zdF9pcnEoaWRlX2RyaXZlX3QgKik7Ci1leHRlcm4gdm9pZCBpZGVfZG1hX3RpbWVvdXQoaWRlX2RyaXZlX3QgKik7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNmZl9kbWFfb3BzOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGNvbmZpZ19kcml2ZV9mb3JfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gMDsgfQogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQV9TRkYgKi8KIAordm9pZCBpZGVfZG1hX2xvc3RfaXJxKGlkZV9kcml2ZV90ICopOwordm9pZCBpZGVfZG1hX3RpbWVvdXQoaWRlX2RyaXZlX3QgKik7CisKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBpZGVfaWRfZG1hX2J1ZyhpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdTggaWRlX2ZpbmRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzcGVlZCkgeyByZXR1cm4gMDsgfQpAQCAtMTQwNCwxMSArMTQ5Myw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2RtYV92ZXJib3NlKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGlkZV9zZXRfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gMTsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9jaGVja19kbWFfY3JjKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUEgKi8KLQotI2lmbmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGCiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3JlbGVhc2VfZG1hX2VuZ2luZShpZGVfaHdpZl90ICpod2lmKSB7IDsgfQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BICovCiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVBQ1BJCiBleHRlcm4gaW50IGlkZV9hY3BpX2V4ZWNfdGZzKGlkZV9kcml2ZV90ICpkcml2ZSk7CkBAIC0xNDM2LDcgKzE1MjIsNiBAQAogCiB2b2lkIGlkZV9wb3J0X2FwcGx5X3BhcmFtcyhpZGVfaHdpZl90ICopOwogCi1zdHJ1Y3QgaWRlX2hvc3QgKmlkZV9ob3N0X2FsbG9jX2FsbChjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqLCBod19yZWdzX3QgKiopOwogc3RydWN0IGlkZV9ob3N0ICppZGVfaG9zdF9hbGxvYyhjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqLCBod19yZWdzX3QgKiopOwogdm9pZCBpZGVfaG9zdF9mcmVlKHN0cnVjdCBpZGVfaG9zdCAqKTsKIGludCBpZGVfaG9zdF9yZWdpc3RlcihzdHJ1Y3QgaWRlX2hvc3QgKiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKiwKQEAgLTE1NDcsNiArMTYzMiw2IEBACiB7CiAJaWRlX2RyaXZlX3QgKnBlZXIgPSAmZHJpdmUtPmh3aWYtPmRyaXZlc1soZHJpdmUtPmRuIF4gMSkgJiAxXTsKIAotCXJldHVybiBwZWVyLT5wcmVzZW50ID8gcGVlciA6IE5VTEw7CisJcmV0dXJuIChwZWVyLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPyBwZWVyIDogTlVMTDsKIH0KICNlbmRpZiAvKiBfSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaCBiL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaAppbmRleCBiZjFhNTNiLi43ZjNjNzM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCkBAIC05LDcgKzksNyBAQAogICoKICAqIEF1dGhvcjoJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJRG9uYWxkIEJlY2tlciwgPGJlY2tlckBzdXBlci5vcmc+Ci0gKgkJQWxhbiBDb3gsIDxhbGFuQHJlZGhhdC5jb20+CisgKgkJQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgkJU3RldmUgV2hpdGVob3VzZSwgPGd3N3JybUBlZXNoYWNrMy5zd2FuLmFjLnVrPgogICoKICAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2ZkZGkuaCBiL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCmluZGV4IGFlNzdkYWUuLjQ1ZGUxMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCkBAIC0xMiw3ICsxMiw3IEBACiAgKgkJaWZfZmRkaS5oIGlzIGJhc2VkIG9uIHByZXZpb3VzIGlmX2V0aGVyLmggYW5kIGlmX3RyLmggd29yayBieQogICoJCQlGcmVkIE4uIHZhbiBLZW1wZW4sIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KICAqCQkJRG9uYWxkIEJlY2tlciwgPGJlY2tlckBzdXBlci5vcmc+Ci0gKgkJCUFsYW4gQ294LCA8YWxhbkByZWRoYXQuY29tPgorICoJCQlBbGFuIENveCwgPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCQkJU3RldmUgV2hpdGVob3VzZSwgPGd3N3JybUBlZXNoYWNrMy5zd2FuLmFjLnVrPgogICoJCQlQZXRlciBEZSBTY2hyaWp2ZXIsIDxzdHVkMTFAY2M0Lmt1bGV1dmVuLmFjLmJlPgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfaGlwcGkuaCBiL2luY2x1ZGUvbGludXgvaWZfaGlwcGkuaAppbmRleCA5NGQzMWNhLi5mMGYyMzUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2hpcHBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9oaXBwaS5oCkBAIC05LDcgKzksNyBAQAogICoKICAqIEF1dGhvcjoJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJRG9uYWxkIEJlY2tlciwgPGJlY2tlckBzdXBlci5vcmc+Ci0gKgkJQWxhbiBDb3gsIDxhbGFuQHJlZGhhdC5jb20+CisgKgkJQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgkJU3RldmUgV2hpdGVob3VzZSwgPGd3N3JybUBlZXNoYWNrMy5zd2FuLmFjLnVrPgogICoJCUplcyBTb3JlbnNlbiwgPEplcy5Tb3JlbnNlbkBjZXJuLmNoPgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWdtcC5oIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKaW5kZXggN2JiM2MwOS4uZjczNGEwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZ21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKQEAgLTIsNyArMiw3IEBACiAgKglMaW51eCBORVQzOglJbnRlcm5ldCBHcm91cCBNYW5hZ2VtZW50IFByb3RvY29sICBbSUdNUF0KICAqCiAgKglBdXRob3JzOgotICoJCUFsYW4gQ294IDxBbGFuLkNveEBsaW51eC5vcmc+CisgKgkJQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCiAgKglFeHRlbmRlZCB0byB0YWxrIHRoZSBCU0QgZXh0ZW5kZWQgSUdNUCBwcm90b2NvbCBvZiBtcm91dGVkIDMuNgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdC5oIGIvaW5jbHVkZS9saW51eC9pbml0LmgKaW5kZXggMjdmNjFmNi4uMGMxMjY0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0LmgKQEAgLTIzMyw5ICsyMzMsNiBAQAogCQlfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKChzaXplb2YobG9uZykpKSkpCVwKIAkJPSB7IF9fc2V0dXBfc3RyXyMjdW5pcXVlX2lkLCBmbiwgZWFybHkgfQogCi0jZGVmaW5lIF9fc2V0dXBfbnVsbF9wYXJhbShzdHIsIHVuaXF1ZV9pZCkJCQlcCi0JX19zZXR1cF9wYXJhbShzdHIsIHVuaXF1ZV9pZCwgTlVMTCwgMCkKLQogI2RlZmluZSBfX3NldHVwKHN0ciwgZm4pCQkJCQlcCiAJX19zZXR1cF9wYXJhbShzdHIsIGZuLCBmbiwgMCkKIApAQCAtMjk2LDcgKzI5Myw2IEBACiAJdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbGlhcygjZXhpdGZuKSkpOwogCiAjZGVmaW5lIF9fc2V0dXBfcGFyYW0oc3RyLCB1bmlxdWVfaWQsIGZuKQkvKiBub3RoaW5nICovCi0jZGVmaW5lIF9fc2V0dXBfbnVsbF9wYXJhbShzdHIsIHVuaXF1ZV9pZCkgCS8qIG5vdGhpbmcgKi8KICNkZWZpbmUgX19zZXR1cChzdHIsIGZ1bmMpIAkJCS8qIG5vdGhpbmcgKi8KICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKaW5kZXggYTU4MDJjOS4uYjg2ZmI1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtNTc3LDkgKzU3NywyMiBAQAogI2RlZmluZSBLRVlfQlJMX0RPVDkJCTB4MWY5CiAjZGVmaW5lIEtFWV9CUkxfRE9UMTAJCTB4MWZhCiAKKyNkZWZpbmUgS0VZX05VTUVSSUNfMAkJMHgyMDAJLyogdXNlZCBieSBwaG9uZXMsIHJlbW90ZSBjb250cm9scywgKi8KKyNkZWZpbmUgS0VZX05VTUVSSUNfMQkJMHgyMDEJLyogYW5kIG90aGVyIGtleXBhZHMgKi8KKyNkZWZpbmUgS0VZX05VTUVSSUNfMgkJMHgyMDIKKyNkZWZpbmUgS0VZX05VTUVSSUNfMwkJMHgyMDMKKyNkZWZpbmUgS0VZX05VTUVSSUNfNAkJMHgyMDQKKyNkZWZpbmUgS0VZX05VTUVSSUNfNQkJMHgyMDUKKyNkZWZpbmUgS0VZX05VTUVSSUNfNgkJMHgyMDYKKyNkZWZpbmUgS0VZX05VTUVSSUNfNwkJMHgyMDcKKyNkZWZpbmUgS0VZX05VTUVSSUNfOAkJMHgyMDgKKyNkZWZpbmUgS0VZX05VTUVSSUNfOQkJMHgyMDkKKyNkZWZpbmUgS0VZX05VTUVSSUNfU1RBUgkweDIwYQorI2RlZmluZSBLRVlfTlVNRVJJQ19QT1VORAkweDIwYgorCiAvKiBXZSBhdm9pZCBsb3cgY29tbW9uIGtleXMgaW4gbW9kdWxlIGFsaWFzZXMgc28gdGhleSBkb24ndCBnZXQgaHVnZS4gKi8KICNkZWZpbmUgS0VZX01JTl9JTlRFUkVTVElORwlLRVlfTVVURQotI2RlZmluZSBLRVlfTUFYCQkJMHgxZmYKKyNkZWZpbmUgS0VZX01BWAkJCTB4MmZmCiAjZGVmaW5lIEtFWV9DTlQJCQkoS0VZX01BWCsxKQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMTE3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmgKQEAgLTAsMCArMSwzMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCisgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+CisgKiBBdXRob3I6IEFuaWwgUyBLZXNoYXZhbXVydGh5IDxhbmlsLnMua2VzaGF2YW11cnRoeUBpbnRlbC5jb20+CisgKi8KKworI2lmbmRlZiBfSU5URUxfSU9NTVVfSF8KKyNkZWZpbmUgX0lOVEVMX0lPTU1VX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvdmEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYV9yZW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisvKgorICogSW50ZWwgSU9NTVUgcmVnaXN0ZXIgc3BlY2lmaWNhdGlvbiBwZXIgdmVyc2lvbiAxLjAgcHVibGljIHNwZWMuCisgKi8KKworI2RlZmluZQlETUFSX1ZFUl9SRUcJMHgwCS8qIEFyY2ggdmVyc2lvbiBzdXBwb3J0ZWQgYnkgdGhpcyBJT01NVSAqLworI2RlZmluZQlETUFSX0NBUF9SRUcJMHg4CS8qIEhhcmR3YXJlIHN1cHBvcnRlZCBjYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUJRE1BUl9FQ0FQX1JFRwkweDEwCS8qIEV4dGVuZGVkIGNhcGFiaWxpdGllcyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUJRE1BUl9HQ01EX1JFRwkweDE4CS8qIEdsb2JhbCBjb21tYW5kIHJlZ2lzdGVyICovCisjZGVmaW5lCURNQVJfR1NUU19SRUcJMHgxYwkvKiBHbG9iYWwgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lCURNQVJfUlRBRERSX1JFRwkweDIwCS8qIFJvb3QgZW50cnkgdGFibGUgKi8KKyNkZWZpbmUJRE1BUl9DQ01EX1JFRwkweDI4CS8qIENvbnRleHQgY29tbWFuZCByZWcgKi8KKyNkZWZpbmUJRE1BUl9GU1RTX1JFRwkweDM0CS8qIEZhdWx0IFN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZQlETUFSX0ZFQ1RMX1JFRwkweDM4CS8qIEZhdWx0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BUl9GRURBVEFfUkVHCTB4M2MJLyogRmF1bHQgZXZlbnQgaW50ZXJydXB0IGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BUl9GRUFERFJfUkVHCTB4NDAJLyogRmF1bHQgZXZlbnQgaW50ZXJydXB0IGFkZHIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BUl9GRVVBRERSX1JFRyAweDQ0CS8qIFVwcGVyIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BUl9BRkxPR19SRUcJMHg1OAkvKiBBZHZhbmNlZCBGYXVsdCBjb250cm9sICovCisjZGVmaW5lCURNQVJfUE1FTl9SRUcJMHg2NAkvKiBFbmFibGUgUHJvdGVjdGVkIE1lbW9yeSBSZWdpb24gKi8KKyNkZWZpbmUJRE1BUl9QTE1CQVNFX1JFRyAweDY4CS8qIFBNUlIgTG93IGFkZHIgKi8KKyNkZWZpbmUJRE1BUl9QTE1MSU1JVF9SRUcgMHg2YwkvKiBQTVJSIGxvdyBsaW1pdCAqLworI2RlZmluZQlETUFSX1BITUJBU0VfUkVHIDB4NzAJLyogcG1yciBoaWdoIGJhc2UgYWRkciAqLworI2RlZmluZQlETUFSX1BITUxJTUlUX1JFRyAweDc4CS8qIHBtcnIgaGlnaCBsaW1pdCAqLworI2RlZmluZSBETUFSX0lRSF9SRUcJMHg4MAkvKiBJbnZhbGlkYXRpb24gcXVldWUgaGVhZCByZWdpc3RlciAqLworI2RlZmluZSBETUFSX0lRVF9SRUcJMHg4OAkvKiBJbnZhbGlkYXRpb24gcXVldWUgdGFpbCByZWdpc3RlciAqLworI2RlZmluZSBETUFSX0lRQV9SRUcJMHg5MAkvKiBJbnZhbGlkYXRpb24gcXVldWUgYWRkciByZWdpc3RlciAqLworI2RlZmluZSBETUFSX0lDU19SRUcJMHg5OAkvKiBJbnZhbGlkYXRpb24gY29tcGxldGUgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIERNQVJfSVJUQV9SRUcJMHhiOCAgICAvKiBJbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIGFkZHIgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBPRkZTRVRfU1RSSURFCQkoOSkKKy8qCisjZGVmaW5lIGRtYXJfcmVhZGwoZG1hciwgcmVnKSByZWFkbChkbWFyICsgcmVnKQorI2RlZmluZSBkbWFyX3JlYWRxKGRtYXIsIHJlZykgKHsgXAorCQl1MzIgbG8sIGhpOyBcCisJCWxvID0gcmVhZGwoZG1hciArIHJlZyk7IFwKKwkJaGkgPSByZWFkbChkbWFyICsgcmVnICsgNCk7IFwKKwkJKCgodTY0KSBoaSkgPDwgMzIpICsgbG87IH0pCisqLworc3RhdGljIGlubGluZSB1NjQgZG1hcl9yZWFkcSh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTMyIGxvLCBoaTsKKwlsbyA9IHJlYWRsKGFkZHIpOworCWhpID0gcmVhZGwoYWRkciArIDQpOworCXJldHVybiAoKCh1NjQpIGhpKSA8PCAzMikgKyBsbzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYXJfd3JpdGVxKHZvaWQgX19pb21lbSAqYWRkciwgdTY0IHZhbCkKK3sKKwl3cml0ZWwoKHUzMil2YWwsIGFkZHIpOworCXdyaXRlbCgodTMyKSh2YWwgPj4gMzIpLCBhZGRyICsgNCk7Cit9CisKKyNkZWZpbmUgRE1BUl9WRVJfTUFKT1IodikJCSgoKHYpICYgMHhmMCkgPj4gNCkKKyNkZWZpbmUgRE1BUl9WRVJfTUlOT1IodikJCSgodikgJiAweDBmKQorCisvKgorICogRGVjb2RpbmcgQ2FwYWJpbGl0eSBSZWdpc3RlcgorICovCisjZGVmaW5lIGNhcF9yZWFkX2RyYWluKGMpCSgoKGMpID4+IDU1KSAmIDEpCisjZGVmaW5lIGNhcF93cml0ZV9kcmFpbihjKQkoKChjKSA+PiA1NCkgJiAxKQorI2RlZmluZSBjYXBfbWF4X2FtYXNrX3ZhbChjKQkoKChjKSA+PiA0OCkgJiAweDNmKQorI2RlZmluZSBjYXBfbnVtX2ZhdWx0X3JlZ3MoYykJKCgoKGMpID4+IDQwKSAmIDB4ZmYpICsgMSkKKyNkZWZpbmUgY2FwX3Bnc2VsX2ludihjKQkoKChjKSA+PiAzOSkgJiAxKQorCisjZGVmaW5lIGNhcF9zdXBlcl9wYWdlX3ZhbChjKQkoKChjKSA+PiAzNCkgJiAweGYpCisjZGVmaW5lIGNhcF9zdXBlcl9vZmZzZXQoYykJKCgoZmluZF9maXJzdF9iaXQoJmNhcF9zdXBlcl9wYWdlX3ZhbChjKSwgNCkpIFwKKwkJCQkJKiBPRkZTRVRfU1RSSURFKSArIDIxKQorCisjZGVmaW5lIGNhcF9mYXVsdF9yZWdfb2Zmc2V0KGMpCSgoKChjKSA+PiAyNCkgJiAweDNmZikgKiAxNikKKyNkZWZpbmUgY2FwX21heF9mYXVsdF9yZWdfb2Zmc2V0KGMpIFwKKwkoY2FwX2ZhdWx0X3JlZ19vZmZzZXQoYykgKyBjYXBfbnVtX2ZhdWx0X3JlZ3MoYykgKiAxNikKKworI2RlZmluZSBjYXBfemxyKGMpCQkoKChjKSA+PiAyMikgJiAxKQorI2RlZmluZSBjYXBfaXNvY2goYykJCSgoKGMpID4+IDIzKSAmIDEpCisjZGVmaW5lIGNhcF9tZ2F3KGMpCQkoKCgoYykgPj4gMTYpICYgMHgzZikgKyAxKQorI2RlZmluZSBjYXBfc2FnYXcoYykJCSgoKGMpID4+IDgpICYgMHgxZikKKyNkZWZpbmUgY2FwX2NhY2hpbmdfbW9kZShjKQkoKChjKSA+PiA3KSAmIDEpCisjZGVmaW5lIGNhcF9waG1yKGMpCQkoKChjKSA+PiA2KSAmIDEpCisjZGVmaW5lIGNhcF9wbG1yKGMpCQkoKChjKSA+PiA1KSAmIDEpCisjZGVmaW5lIGNhcF9yd2JmKGMpCQkoKChjKSA+PiA0KSAmIDEpCisjZGVmaW5lIGNhcF9hZmwoYykJCSgoKGMpID4+IDMpICYgMSkKKyNkZWZpbmUgY2FwX25kb21zKGMpCQkoKCh1bnNpZ25lZCBsb25nKTEpIDw8ICg0ICsgMiAqICgoYykgJiAweDcpKSkKKy8qCisgKiBFeHRlbmRlZCBDYXBhYmlsaXR5IFJlZ2lzdGVyCisgKi8KKworI2RlZmluZSBlY2FwX25pb3RsYl9pdW5pdHMoZSkJKCgoKGUpID4+IDI0KSAmIDB4ZmYpICsgMSkKKyNkZWZpbmUgZWNhcF9pb3RsYl9vZmZzZXQoZSkgCSgoKChlKSA+PiA4KSAmIDB4M2ZmKSAqIDE2KQorI2RlZmluZSBlY2FwX21heF9pb3RsYl9vZmZzZXQoZSkgXAorCShlY2FwX2lvdGxiX29mZnNldChlKSArIGVjYXBfbmlvdGxiX2l1bml0cyhlKSAqIDE2KQorI2RlZmluZSBlY2FwX2NvaGVyZW50KGUpCSgoZSkgJiAweDEpCisjZGVmaW5lIGVjYXBfcWlzKGUpCQkoKGUpICYgMHgyKQorI2RlZmluZSBlY2FwX2VpbV9zdXBwb3J0KGUpCSgoZSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgZWNhcF9pcl9zdXBwb3J0KGUpCSgoZSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgZWNhcF9tYXhfaGFuZGxlX21hc2soZSkgKChlID4+IDIwKSAmIDB4ZikKKworCisvKiBJT1RMQl9SRUcgKi8KKyNkZWZpbmUgRE1BX1RMQl9HTE9CQUxfRkxVU0ggKCgodTY0KTEpIDw8IDYwKQorI2RlZmluZSBETUFfVExCX0RTSV9GTFVTSCAoKCh1NjQpMikgPDwgNjApCisjZGVmaW5lIERNQV9UTEJfUFNJX0ZMVVNIICgoKHU2NCkzKSA8PCA2MCkKKyNkZWZpbmUgRE1BX1RMQl9JSVJHKHR5cGUpICgodHlwZSA+PiA2MCkgJiA3KQorI2RlZmluZSBETUFfVExCX0lBSUcodmFsKSAoKCh2YWwpID4+IDU3KSAmIDcpCisjZGVmaW5lIERNQV9UTEJfUkVBRF9EUkFJTiAoKCh1NjQpMSkgPDwgNDkpCisjZGVmaW5lIERNQV9UTEJfV1JJVEVfRFJBSU4gKCgodTY0KTEpIDw8IDQ4KQorI2RlZmluZSBETUFfVExCX0RJRChpZCkJKCgodTY0KSgoaWQpICYgMHhmZmZmKSkgPDwgMzIpCisjZGVmaW5lIERNQV9UTEJfSVZUICgoKHU2NCkxKSA8PCA2MykKKyNkZWZpbmUgRE1BX1RMQl9JSF9OT05MRUFGICgoKHU2NCkxKSA8PCA2KQorI2RlZmluZSBETUFfVExCX01BWF9TSVpFICgweDNmKQorCisvKiBJTlZBTElEX0RFU0MgKi8KKyNkZWZpbmUgRE1BX0lEX1RMQl9HTE9CQUxfRkxVU0gJKCgodTY0KTEpIDw8IDMpCisjZGVmaW5lIERNQV9JRF9UTEJfRFNJX0ZMVVNICSgoKHU2NCkyKSA8PCAzKQorI2RlZmluZSBETUFfSURfVExCX1BTSV9GTFVTSAkoKCh1NjQpMykgPDwgMykKKyNkZWZpbmUgRE1BX0lEX1RMQl9SRUFEX0RSQUlOCSgoKHU2NCkxKSA8PCA3KQorI2RlZmluZSBETUFfSURfVExCX1dSSVRFX0RSQUlOCSgoKHU2NCkxKSA8PCA2KQorI2RlZmluZSBETUFfSURfVExCX0RJRChpZCkJKCgodTY0KSgoaWQgJiAweGZmZmYpIDw8IDE2KSkpCisjZGVmaW5lIERNQV9JRF9UTEJfSUhfTk9OTEVBRgkoKCh1NjQpMSkgPDwgNikKKyNkZWZpbmUgRE1BX0lEX1RMQl9BRERSKGFkZHIpCShhZGRyKQorI2RlZmluZSBETUFfSURfVExCX0FERFJfTUFTSyhtYXNrKQkobWFzaykKKworLyogUE1FTl9SRUcgKi8KKyNkZWZpbmUgRE1BX1BNRU5fRVBNICgoKHUzMikxKTw8MzEpCisjZGVmaW5lIERNQV9QTUVOX1BSUyAoKCh1MzIpMSk8PDApCisKKy8qIEdDTURfUkVHICovCisjZGVmaW5lIERNQV9HQ01EX1RFICgoKHUzMikxKSA8PCAzMSkKKyNkZWZpbmUgRE1BX0dDTURfU1JUUCAoKCh1MzIpMSkgPDwgMzApCisjZGVmaW5lIERNQV9HQ01EX1NGTCAoKCh1MzIpMSkgPDwgMjkpCisjZGVmaW5lIERNQV9HQ01EX0VBRkwgKCgodTMyKTEpIDw8IDI4KQorI2RlZmluZSBETUFfR0NNRF9XQkYgKCgodTMyKTEpIDw8IDI3KQorI2RlZmluZSBETUFfR0NNRF9RSUUgKCgodTMyKTEpIDw8IDI2KQorI2RlZmluZSBETUFfR0NNRF9TSVJUUCAoKCh1MzIpMSkgPDwgMjQpCisjZGVmaW5lIERNQV9HQ01EX0lSRSAoKCh1MzIpIDEpIDw8IDI1KQorCisvKiBHU1RTX1JFRyAqLworI2RlZmluZSBETUFfR1NUU19URVMgKCgodTMyKTEpIDw8IDMxKQorI2RlZmluZSBETUFfR1NUU19SVFBTICgoKHUzMikxKSA8PCAzMCkKKyNkZWZpbmUgRE1BX0dTVFNfRkxTICgoKHUzMikxKSA8PCAyOSkKKyNkZWZpbmUgRE1BX0dTVFNfQUZMUyAoKCh1MzIpMSkgPDwgMjgpCisjZGVmaW5lIERNQV9HU1RTX1dCRlMgKCgodTMyKTEpIDw8IDI3KQorI2RlZmluZSBETUFfR1NUU19RSUVTICgoKHUzMikxKSA8PCAyNikKKyNkZWZpbmUgRE1BX0dTVFNfSVJUUFMgKCgodTMyKTEpIDw8IDI0KQorI2RlZmluZSBETUFfR1NUU19JUkVTICgoKHUzMikxKSA8PCAyNSkKKworLyogQ0NNRF9SRUcgKi8KKyNkZWZpbmUgRE1BX0NDTURfSUNDICgoKHU2NCkxKSA8PCA2MykKKyNkZWZpbmUgRE1BX0NDTURfR0xPQkFMX0lOVkwgKCgodTY0KTEpIDw8IDYxKQorI2RlZmluZSBETUFfQ0NNRF9ET01BSU5fSU5WTCAoKCh1NjQpMikgPDwgNjEpCisjZGVmaW5lIERNQV9DQ01EX0RFVklDRV9JTlZMICgoKHU2NCkzKSA8PCA2MSkKKyNkZWZpbmUgRE1BX0NDTURfRk0obSkgKCgodTY0KSgobSkgJiAweDMpKSA8PCAzMikKKyNkZWZpbmUgRE1BX0NDTURfTUFTS19OT0JJVCAwCisjZGVmaW5lIERNQV9DQ01EX01BU0tfMUJJVCAxCisjZGVmaW5lIERNQV9DQ01EX01BU0tfMkJJVCAyCisjZGVmaW5lIERNQV9DQ01EX01BU0tfM0JJVCAzCisjZGVmaW5lIERNQV9DQ01EX1NJRChzKSAoKCh1NjQpKChzKSAmIDB4ZmZmZikpIDw8IDE2KQorI2RlZmluZSBETUFfQ0NNRF9ESUQoZCkgKCh1NjQpKChkKSAmIDB4ZmZmZikpCisKKy8qIEZFQ1RMX1JFRyAqLworI2RlZmluZSBETUFfRkVDVExfSU0gKCgodTMyKTEpIDw8IDMxKQorCisvKiBGU1RTX1JFRyAqLworI2RlZmluZSBETUFfRlNUU19QUEYgKCh1MzIpMikKKyNkZWZpbmUgRE1BX0ZTVFNfUEZPICgodTMyKTEpCisjZGVmaW5lIGRtYV9mc3RzX2ZhdWx0X3JlY29yZF9pbmRleChzKSAoKChzKSA+PiA4KSAmIDB4ZmYpCisKKy8qIEZSQ0RfUkVHLCAzMiBiaXRzIGFjY2VzcyAqLworI2RlZmluZSBETUFfRlJDRF9GICgoKHUzMikxKSA8PCAzMSkKKyNkZWZpbmUgZG1hX2ZyY2RfdHlwZShkKSAoKGQgPj4gMzApICYgMSkKKyNkZWZpbmUgZG1hX2ZyY2RfZmF1bHRfcmVhc29uKGMpIChjICYgMHhmZikKKyNkZWZpbmUgZG1hX2ZyY2Rfc291cmNlX2lkKGMpIChjICYgMHhmZmZmKQorI2RlZmluZSBkbWFfZnJjZF9wYWdlX2FkZHIoZCkgKGQgJiAoKCh1NjQpLTEpIDw8IDEyKSkgLyogbG93IDY0IGJpdCAqLworCisjZGVmaW5lIERNQVJfT1BFUkFUSU9OX1RJTUVPVVQgKChjeWNsZXNfdCkgdHNjX2toeioxMCoxMDAwKSAvKiAxMHNlYyAqLworCisjZGVmaW5lIElPTU1VX1dBSVRfT1AoaW9tbXUsIG9mZnNldCwgb3AsIGNvbmQsIHN0cykgXAore1wKKwljeWNsZXNfdCBzdGFydF90aW1lID0gZ2V0X2N5Y2xlcygpO1wKKwl3aGlsZSAoMSkge1wKKwkJc3RzID0gb3AgKGlvbW11LT5yZWcgKyBvZmZzZXQpO1wKKwkJaWYgKGNvbmQpXAorCQkJYnJlYWs7XAorCQlpZiAoRE1BUl9PUEVSQVRJT05fVElNRU9VVCA8IChnZXRfY3ljbGVzKCkgLSBzdGFydF90aW1lKSlcCisJCQlwYW5pYygiRE1BUiBoYXJkd2FyZSBpcyBtYWxmdW5jdGlvbmluZ1xuIik7XAorCQljcHVfcmVsYXgoKTtcCisJfVwKK30KKworI2RlZmluZSBRSV9MRU5HVEgJMjU2CS8qIHF1ZXVlIGxlbmd0aCAqLworCitlbnVtIHsKKwlRSV9GUkVFLAorCVFJX0lOX1VTRSwKKwlRSV9ET05FCit9OworCisjZGVmaW5lIFFJX0NDX1RZUEUJCTB4MQorI2RlZmluZSBRSV9JT1RMQl9UWVBFCQkweDIKKyNkZWZpbmUgUUlfRElPVExCX1RZUEUJCTB4MworI2RlZmluZSBRSV9JRUNfVFlQRQkJMHg0CisjZGVmaW5lIFFJX0lXRF9UWVBFCQkweDUKKworI2RlZmluZSBRSV9JRUNfU0VMRUNUSVZFCSgoKHU2NCkxKSA8PCA0KQorI2RlZmluZSBRSV9JRUNfSUlERVgoaWR4KQkoKCh1NjQpKGlkeCAmIDB4ZmZmZikgPDwgMzIpKQorI2RlZmluZSBRSV9JRUNfSU0obSkJCSgoKHU2NCkobSAmIDB4MWYpIDw8IDI3KSkKKworI2RlZmluZSBRSV9JV0RfU1RBVFVTX0RBVEEoZCkJKCgodTY0KWQpIDw8IDMyKQorI2RlZmluZSBRSV9JV0RfU1RBVFVTX1dSSVRFCSgoKHU2NCkxKSA8PCA1KQorCitzdHJ1Y3QgcWlfZGVzYyB7CisJdTY0IGxvdywgaGlnaDsKK307CisKK3N0cnVjdCBxX2ludmFsIHsKKwlzcGlubG9ja190ICAgICAgcV9sb2NrOworCXN0cnVjdCBxaV9kZXNjICAqZGVzYzsgICAgICAgICAgLyogaW52YWxpZGF0aW9uIHF1ZXVlICovCisJaW50ICAgICAgICAgICAgICpkZXNjX3N0YXR1czsgICAvKiBkZXNjIHN0YXR1cyAqLworCWludCAgICAgICAgICAgICBmcmVlX2hlYWQ7ICAgICAgLyogZmlyc3QgZnJlZSBlbnRyeSAqLworCWludCAgICAgICAgICAgICBmcmVlX3RhaWw7ICAgICAgLyogbGFzdCBmcmVlIGVudHJ5ICovCisJaW50ICAgICAgICAgICAgIGZyZWVfY250OworfTsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisvKiAxTUIgLSBtYXhpbXVtIHBvc3NpYmxlIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgc2l6ZSAqLworI2RlZmluZSBJTlRSX1JFTUFQX1BBR0VfT1JERVIJOAorI2RlZmluZSBJTlRSX1JFTUFQX1RBQkxFX1JFR19TSVpFCTB4ZgorCisjZGVmaW5lIElOVFJfUkVNQVBfVEFCTEVfRU5UUklFUwk2NTUzNgorCitzdHJ1Y3QgaXJfdGFibGUgeworCXN0cnVjdCBpcnRlICpiYXNlOworfTsKKyNlbmRpZgorCitzdHJ1Y3QgaW50ZWxfaW9tbXUgeworCXZvaWQgX19pb21lbQkqcmVnOyAvKiBQb2ludGVyIHRvIGhhcmR3YXJlIHJlZ3MsIHZpcnR1YWwgYWRkciAqLworCXU2NAkJY2FwOworCXU2NAkJZWNhcDsKKwlpbnQJCXNlZzsKKwl1MzIJCWdjbWQ7IC8qIEhvbGRzIFRFLCBFQUZMLiBEb24ndCBuZWVkIFNSVFAsIFNGTCwgV0JGICovCisJc3BpbmxvY2tfdAlyZWdpc3Rlcl9sb2NrOyAvKiBwcm90ZWN0IHJlZ2lzdGVyIGhhbmRsaW5nICovCisJaW50CQlzZXFfaWQ7CS8qIHNlcXVlbmNlIGlkIG9mIHRoZSBpb21tdSAqLworCisjaWZkZWYgQ09ORklHX0RNQVIKKwl1bnNpZ25lZCBsb25nIAkqZG9tYWluX2lkczsgLyogYml0bWFwIG9mIGRvbWFpbnMgKi8KKwlzdHJ1Y3QgZG1hcl9kb21haW4gKipkb21haW5zOyAvKiBwdHIgdG8gZG9tYWlucyAqLworCXNwaW5sb2NrX3QJbG9jazsgLyogcHJvdGVjdCBjb250ZXh0LCBkb21haW4gaWRzICovCisJc3RydWN0IHJvb3RfZW50cnkgKnJvb3RfZW50cnk7IC8qIHZpcnR1YWwgYWRkcmVzcyAqLworCisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBjaGFyIG5hbWVbN107ICAgIC8qIERldmljZSBOYW1lICovCisJc3RydWN0IG1zaV9tc2cgc2F2ZWRfbXNnOworCXN0cnVjdCBzeXNfZGV2aWNlIHN5c2RldjsKKyNlbmRpZgorCXN0cnVjdCBxX2ludmFsICAqcWk7ICAgICAgICAgICAgLyogUXVldWVkIGludmFsaWRhdGlvbiBpbmZvICovCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlzdHJ1Y3QgaXJfdGFibGUgKmlyX3RhYmxlOwkvKiBJbnRlcnJ1cHQgcmVtYXBwaW5nIGluZm8gKi8KKyNlbmRpZgorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tbXVfZmx1c2hfY2FjaGUoCisJc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgdm9pZCAqYWRkciwgaW50IHNpemUpCit7CisJaWYgKCFlY2FwX2NvaGVyZW50KGlvbW11LT5lY2FwKSkKKwkJY2xmbHVzaF9jYWNoZV9yYW5nZShhZGRyLCBzaXplKTsKK30KKworZXh0ZXJuIHN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqIGRtYXJfZmluZF9tYXRjaGVkX2RyaGRfdW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKworZXh0ZXJuIGludCBhbGxvY19pb21tdShzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQpOworZXh0ZXJuIHZvaWQgZnJlZV9pb21tdShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKK2V4dGVybiBpbnQgZG1hcl9lbmFibGVfcWkoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CitleHRlcm4gdm9pZCBxaV9nbG9iYWxfaWVjKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOworCitleHRlcm4gdm9pZCBxaV9zdWJtaXRfc3luYyhzdHJ1Y3QgcWlfZGVzYyAqZGVzYywgc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CisKK3ZvaWQgaW50ZWxfaW9tbXVfZG9tYWluX2V4aXQoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4pOworc3RydWN0IGRtYXJfZG9tYWluICppbnRlbF9pb21tdV9kb21haW5fYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpOworaW50IGludGVsX2lvbW11X2NvbnRleHRfbWFwcGluZyhzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwKKwkJCQlzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitpbnQgaW50ZWxfaW9tbXVfcGFnZV9tYXBwaW5nKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCBkbWFfYWRkcl90IGlvdmEsCisJCQkgICAgIHU2NCBocGEsIHNpemVfdCBzaXplLCBpbnQgcHJvdCk7Cit2b2lkIGludGVsX2lvbW11X2RldGFjaF9kZXYoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sIHU4IGJ1cywgdTggZGV2Zm4pOworc3RydWN0IGRtYXJfZG9tYWluICppbnRlbF9pb21tdV9maW5kX2RvbWFpbihzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cit1NjQgaW50ZWxfaW9tbXVfaW92YV90b19wZm4oc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sIHU2NCBpb3ZhKTsKKworI2lmZGVmIENPTkZJR19ETUFSCitpbnQgaW50ZWxfaW9tbXVfZm91bmQodm9pZCk7CisjZWxzZSAvKiBDT05GSUdfRE1BUiAqLworc3RhdGljIGlubGluZSBpbnQgaW50ZWxfaW9tbXVfZm91bmQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfRE1BUiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IDU4ZmY0ZTcuLmY1OGEwY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtOCw5ICs4LDEyIEBACiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFuci5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0yNTIsNiArMjU1LDggQEAKIAlIUlRJTUVSX1NPRlRJUlEsCiAjZW5kaWYKIAlSQ1VfU09GVElSUSwgCS8qIFByZWZlcmFibGUgUkNVIHNob3VsZCBhbHdheXMgYmUgdGhlIGxhc3Qgc29mdGlycSAqLworCisJTlJfU09GVElSUVMKIH07CiAKIC8qIHNvZnRpcnEgbWFzayBhbmQgYWN0aXZlIGZpZWxkcyBtb3ZlZCB0byBpcnFfY3B1c3RhdF90IGluCkBAIC0yNzEsNiArMjc2LDI1IEBACiBleHRlcm4gdm9pZCByYWlzZV9zb2Z0aXJxX2lycW9mZih1bnNpZ25lZCBpbnQgbnIpOwogZXh0ZXJuIHZvaWQgcmFpc2Vfc29mdGlycSh1bnNpZ25lZCBpbnQgbnIpOwogCisvKiBUaGlzIGlzIHRoZSB3b3JrbGlzdCB0aGF0IHF1ZXVlcyB1cCBwZXItY3B1IHNvZnRpcnEgd29yay4KKyAqCisgKiBzZW5kX3JlbW90ZV9zZW5kaXJxKCkgYWRkcyB3b3JrIHRvIHRoZXNlIGxpc3RzLCBhbmQKKyAqIHRoZSBzb2Z0aXJxIGhhbmRsZXIgaXRzZWxmIGRlcXVldWVzIGZyb20gdGhlbS4gIFRoZSBxdWV1ZXMKKyAqIGFyZSBwcm90ZWN0ZWQgYnkgZGlzYWJsaW5nIGxvY2FsIGNwdSBpbnRlcnJ1cHRzIGFuZCB0aGV5IG11c3QKKyAqIG9ubHkgYmUgYWNjZXNzZWQgYnkgdGhlIGxvY2FsIGNwdSB0aGF0IHRoZXkgYXJlIGZvci4KKyAqLworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBsaXN0X2hlYWQgW05SX1NPRlRJUlFTXSwgc29mdGlycV93b3JrX2xpc3QpOworCisvKiBUcnkgdG8gc2VuZCBhIHNvZnRpcnEgdG8gYSByZW1vdGUgY3B1LiAgSWYgdGhpcyBjYW5ub3QgYmUgZG9uZSwgdGhlCisgKiB3b3JrIHdpbGwgYmUgcXVldWVkIHRvIHRoZSBsb2NhbCBjcHUuCisgKi8KK2V4dGVybiB2b2lkIHNlbmRfcmVtb3RlX3NvZnRpcnEoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgY3B1LCBpbnQgc29mdGlycSk7CisKKy8qIExpa2Ugc2VuZF9yZW1vdGVfc29mdGlycSgpLCBidXQgdGhlIGNhbGxlciBtdXN0IGRpc2FibGUgbG9jYWwgY3B1IGludGVycnVwdHMKKyAqIGFuZCBjb21wdXRlIHRoZSBjdXJyZW50IGNwdSwgcGFzc2VkIGluIGFzICd0aGlzX2NwdScuCisgKi8KK2V4dGVybiB2b2lkIF9fc2VuZF9yZW1vdGVfc29mdGlycShzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3AsIGludCBjcHUsCisJCQkJICBpbnQgdGhpc19jcHUsIGludCBzb2Z0aXJxKTsKIAogLyogVGFza2xldHMgLS0tIG11bHRpdGhyZWFkZWQgYW5hbG9ndWUgb2YgQkhzLgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbW11LWhlbHBlci5oIGIvaW5jbHVkZS9saW51eC9pb21tdS1oZWxwZXIuaAppbmRleCBhNmQwNTg2Li4zYjA2OGU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvbW11LWhlbHBlci5oCisrKyBiL2luY2x1ZGUvbGludXgvaW9tbXUtaGVscGVyLmgKQEAgLTIzLDQgKzIzLDcgQEAKIGV4dGVybiB2b2lkIGlvbW11X2FyZWFfZnJlZSh1bnNpZ25lZCBsb25nICptYXAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkgICAgdW5zaWduZWQgaW50IG5yKTsKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9tbXVfbnVtX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGlvX3BhZ2Vfc2l6ZSk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaCBiL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKaW5kZXggZWU5YmNjNi4uMDQxZTk1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCkBAIC0zNCw3ICszNCw4IEBACiAgKi8KICNkZWZpbmUgSU9SRVNPVVJDRV9CSVRTCQkweDAwMDAwMGZmCS8qIEJ1cy1zcGVjaWZpYyBiaXRzICovCiAKLSNkZWZpbmUgSU9SRVNPVVJDRV9JTwkJMHgwMDAwMDEwMAkvKiBSZXNvdXJjZSB0eXBlICovCisjZGVmaW5lIElPUkVTT1VSQ0VfVFlQRV9CSVRTCTB4MDAwMDBmMDAJLyogUmVzb3VyY2UgdHlwZSAqLworI2RlZmluZSBJT1JFU09VUkNFX0lPCQkweDAwMDAwMTAwCiAjZGVmaW5lIElPUkVTT1VSQ0VfTUVNCQkweDAwMDAwMjAwCiAjZGVmaW5lIElPUkVTT1VSQ0VfSVJRCQkweDAwMDAwNDAwCiAjZGVmaW5lIElPUkVTT1VSQ0VfRE1BCQkweDAwMDAwODAwCkBAIC0xMjYsNiArMTI3LDEwIEBACiB7CiAJcmV0dXJuIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CiB9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VfdHlwZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3sKKwlyZXR1cm4gcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfVFlQRV9CSVRTOworfQogCiAvKiBDb252ZW5pZW5jZSBzaG9ydGhhbmQgd2l0aCBhbGxvY2F0aW9uICovCiAjZGVmaW5lIHJlcXVlc3RfcmVnaW9uKHN0YXJ0LG4sbmFtZSkJX19yZXF1ZXN0X3JlZ2lvbigmaW9wb3J0X3Jlc291cmNlLCAoc3RhcnQpLCAobiksIChuYW1lKSkKQEAgLTE2OSw2ICsxNzQsNyBAQAogCiBleHRlcm4gdm9pZCBfX2Rldm1fcmVsZWFzZV9yZWdpb24oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwKIAkJCQkgIHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IG4pOworZXh0ZXJuIGludCBpb21lbV9tYXBfc2FuaXR5X2NoZWNrKHJlc291cmNlX3NpemVfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYJLyogX0xJTlVYX0lPUE9SVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pb3ZhLmggYi9pbmNsdWRlL2xpbnV4L2lvdmEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9wY2kvaW92YS5oCnJlbmFtZSB0byBpbmNsdWRlL2xpbnV4L2lvdmEuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnEuaCBiL2luY2x1ZGUvbGludXgvaXJxLmgKaW5kZXggOGQ5NDExYi4uZDA1OGM1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycS5oCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CisjaW5jbHVkZSA8bGludXgvaXJxbnIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTUyLDYgKzE1Myw3IEBACiAgKiBAbmFtZToJCWZsb3cgaGFuZGxlciBuYW1lIGZvciAvcHJvYy9pbnRlcnJ1cHRzIG91dHB1dAogICovCiBzdHJ1Y3QgaXJxX2Rlc2MgeworCXVuc2lnbmVkIGludAkJaXJxOwogCWlycV9mbG93X2hhbmRsZXJfdAloYW5kbGVfaXJxOwogCXN0cnVjdCBpcnFfY2hpcAkJKmNoaXA7CiAJc3RydWN0IG1zaV9kZXNjCQkqbXNpX2Rlc2M7CkBAIC0xNzAsNyArMTcyLDcgQEAKIAljcHVtYXNrX3QJCWFmZmluaXR5OwogCXVuc2lnbmVkIGludAkJY3B1OwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgfHwgZGVmaW5lZChDT05GSUdfSVJRQkFMQU5DRSkKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUQogCWNwdW1hc2tfdAkJcGVuZGluZ19tYXNrOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTE3OSw4ICsxODEsMTQgQEAKIAljb25zdCBjaGFyCQkqbmFtZTsKIH0gX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcDsKIAorCiBleHRlcm4gc3RydWN0IGlycV9kZXNjIGlycV9kZXNjW05SX0lSUVNdOwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcnFfZGVzYyAqaXJxX3RvX2Rlc2ModW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gKGlycSA8IG5yX2lycXMpID8gaXJxX2Rlc2MgKyBpcnEgOiBOVUxMOworfQorCiAvKgogICogTWlncmF0aW9uIGhlbHBlcnMgZm9yIG9ic29sZXRlIG5hbWVzLCB0aGV5IHdpbGwgZ28gYXdheToKICAqLwpAQCAtMTk4LDE5ICsyMDYsMTUgQEAKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiAKLSNpZm5kZWYgaGFuZGxlX2R5bmFtaWNfdGljawotIyBkZWZpbmUgaGFuZGxlX2R5bmFtaWNfdGljayhhKQkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfU01QCiAKLSNpZiBkZWZpbmVkKENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRKSB8fCBkZWZpbmVkKENPTkZJR19JUlFCQUxBTkNFKQorI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCiAKIHZvaWQgc2V0X3BlbmRpbmdfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKTsKIHZvaWQgbW92ZV9uYXRpdmVfaXJxKGludCBpcnEpOwogdm9pZCBtb3ZlX21hc2tlZF9pcnEoaW50IGlycSk7CiAKLSNlbHNlIC8qIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRIHx8IENPTkZJR19JUlFCQUxBTkNFICovCisjZWxzZSAvKiBDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9pcnEoaW50IGlycSkKIHsKQEAgLTIzNywxOSArMjQxLDE0IEBACiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLSNpZmRlZiBDT05GSUdfSVJRQkFMQU5DRQotZXh0ZXJuIHZvaWQgc2V0X2JhbGFuY2VfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JhbGFuY2VfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQotewotfQotI2VuZGlmCi0KIGV4dGVybiBpbnQgbm9faXJxX2FmZmluaXR5OwogCiBzdGF0aWMgaW5saW5lIGludCBpcnFfYmFsYW5jaW5nX2Rpc2FibGVkKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcmV0dXJuIGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX05PX0JBTEFOQ0lOR19NQVNLOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCXJldHVybiBkZXNjLT5zdGF0dXMgJiBJUlFfTk9fQkFMQU5DSU5HX01BU0s7CiB9CiAKIC8qIEhhbmRsZSBpcnEgYWN0aW9uIGNoYWluczogKi8KQEAgLTI3OSwxMCArMjc4LDggQEAKICAqIGlycWNoaXAtc3R5bGUgY29udHJvbGxlciB0aGVuIHdlIGNhbGwgdGhlIC0+aGFuZGxlX2lycSgpIGhhbmRsZXIsCiAgKiBhbmQgaXQgY2FsbHMgX19kb19JUlEoKSBpZiBpdCdzIGF0dGFjaGVkIHRvIGFuIGlycXR5cGUtc3R5bGUgY29udHJvbGxlci4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfaGFuZGxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfaGFuZGxlX2lycV9kZXNjKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQogI2lmZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlkZXNjLT5oYW5kbGVfaXJxKGlycSwgZGVzYyk7CiAjZWxzZQpAQCAtMjkzLDYgKzI5MCwxMSBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmljX2hhbmRsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlnZW5lcmljX2hhbmRsZV9pcnFfZGVzYyhpcnEsIGlycV90b19kZXNjKGlycSkpOworfQorCiAvKiBIYW5kbGluZyBvZiB1bmhhbmRsZWQgYW5kIHNwdXJpb3VzIGludGVycnVwdHM6ICovCiBleHRlcm4gdm9pZCBub3RlX2ludGVycnVwdCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCiAJCQkgICBpbnQgYWN0aW9uX3JldCk7CkBAIC0zMjUsNyArMzI3LDEwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQoaW50IGlycSwKIAkJCQkJICAgICAgaXJxX2Zsb3dfaGFuZGxlcl90IGhhbmRsZXIpCiB7Ci0JaXJxX2Rlc2NbaXJxXS5oYW5kbGVfaXJxID0gaGFuZGxlcjsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlcjsKIH0KIAogLyoKQEAgLTM1MywxMyArMzU4LDE0IEBACiBleHRlcm4gdm9pZCBzZXRfaXJxX3Byb2JlKHVuc2lnbmVkIGludCBpcnEpOwogCiAvKiBIYW5kbGUgZHluYW1pYyBpcnEgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uICovCitleHRlcm4gdW5zaWduZWQgaW50IGNyZWF0ZV9pcnFfbnIodW5zaWduZWQgaW50IGlycV93YW50KTsKIGV4dGVybiBpbnQgY3JlYXRlX2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIGRlc3Ryb3lfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogCiAvKiBUZXN0IHRvIHNlZSBpZiBhIGRyaXZlciBoYXMgc3VjY2Vzc2Z1bGx5IHJlcXVlc3RlZCBhbiBpcnEgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGlycV9oYXNfYWN0aW9uKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlyZXR1cm4gZGVzYy0+YWN0aW9uICE9IE5VTEw7CiB9CiAKQEAgLTM3NCwxMCArMzgwLDEwIEBACiBleHRlcm4gaW50IHNldF9pcnFfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSk7CiBleHRlcm4gaW50IHNldF9pcnFfbXNpKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfZGVzYyAqZW50cnkpOwogCi0jZGVmaW5lIGdldF9pcnFfY2hpcChpcnEpCShpcnFfZGVzY1tpcnFdLmNoaXApCi0jZGVmaW5lIGdldF9pcnFfY2hpcF9kYXRhKGlycSkJKGlycV9kZXNjW2lycV0uY2hpcF9kYXRhKQotI2RlZmluZSBnZXRfaXJxX2RhdGEoaXJxKQkoaXJxX2Rlc2NbaXJxXS5oYW5kbGVyX2RhdGEpCi0jZGVmaW5lIGdldF9pcnFfbXNpKGlycSkJKGlycV9kZXNjW2lycV0ubXNpX2Rlc2MpCisjZGVmaW5lIGdldF9pcnFfY2hpcChpcnEpCShpcnFfdG9fZGVzYyhpcnEpLT5jaGlwKQorI2RlZmluZSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpCShpcnFfdG9fZGVzYyhpcnEpLT5jaGlwX2RhdGEpCisjZGVmaW5lIGdldF9pcnFfZGF0YShpcnEpCShpcnFfdG9fZGVzYyhpcnEpLT5oYW5kbGVyX2RhdGEpCisjZGVmaW5lIGdldF9pcnFfbXNpKGlycSkJKGlycV90b19kZXNjKGlycSktPm1zaV9kZXNjKQogCiAjZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfSEFSRElSUVMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFuci5oIGIvaW5jbHVkZS9saW51eC9pcnFuci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNzFkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lycW5yLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfTElOVVhfSVJRTlJfSAorI2RlZmluZSBfTElOVVhfSVJRTlJfSAorCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCisjaW5jbHVkZSA8YXNtL2lycS5oPgorIyBkZWZpbmUgbnJfaXJxcwkJTlJfSVJRUworCisjIGRlZmluZSBmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpCQlcCisJZm9yIChpcnEgPSAwOyBpcnEgPCBucl9pcnFzOyBpcnErKykKKyNlbHNlCitleHRlcm4gaW50IG5yX2lycXM7CisKKyMgZGVmaW5lIGZvcl9lYWNoX2lycV9kZXNjKGlycSwgZGVzYykJCVwKKwlmb3IgKGlycSA9IDAsIGRlc2MgPSBpcnFfZGVzYzsgaXJxIDwgbnJfaXJxczsgaXJxKyssIGRlc2MrKykKKworIyBkZWZpbmUgZm9yX2VhY2hfaXJxX2Rlc2NfcmV2ZXJzZShpcnEsIGRlc2MpCQkJXAorCWZvciAoaXJxID0gbnJfaXJxcyAtMSwgZGVzYyA9IGlycV9kZXNjICsgKG5yX2lycXMgLTEgKTsJXAorCSAgICAgaXJxID4gMDsgaXJxLS0sIGRlc2MtLSkKKyNlbmRpZgorCisjZGVmaW5lIGZvcl9lYWNoX2lycV9ucihpcnEpCQkJXAorCWZvciAoaXJxID0gMDsgaXJxIDwgbnJfaXJxczsgaXJxKyspCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pdnR2LmggYi9pbmNsdWRlL2xpbnV4L2l2dHYuaAppbmRleCAxN2NhNjRiLi5mMjcyMDI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2l2dHYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2l2dHYuaApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCiAvKiBpdnR2IGtub3dzIHNldmVyYWwgZGlzdGluY3Qgb3V0cHV0IG1vZGVzOiBNUEVHIHN0cmVhbWluZywKICAgIFlVViBzdHJlYW1pbmcsIFlVViB1cGRhdGVzIHRocm91Z2ggdXNlciBETUEgYW5kIHRoZSBwYXNzdGhyb3VnaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQuaCBiL2luY2x1ZGUvbGludXgvamJkLmgKaW5kZXggMDdhOWI1Mi4uMzVkNGY2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qYmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZC5oCkBAIC02MSw3ICs2MSw3IEBACiAJZG8gewkJCQkJCQkJXAogCQlpZiAoKG4pIDw9IGpvdXJuYWxfZW5hYmxlX2RlYnVnKSB7CQkJXAogCQkJcHJpbnRrIChLRVJOX0RFQlVHICIoJXMsICVkKTogJXM6ICIsCQlcCi0JCQkJX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwlcCisJCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CVwKIAkJCXByaW50ayAoZiwgIyMgYSk7CQkJCVwKIAkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKQEAgLTgxNiw2ICs4MTYsOSBAQAogI2RlZmluZSBKRlNfRkxVU0hFRAkweDAwOAkvKiBUaGUgam91cm5hbCBzdXBlcmJsb2NrIGhhcyBiZWVuIGZsdXNoZWQgKi8KICNkZWZpbmUgSkZTX0xPQURFRAkweDAxMAkvKiBUaGUgam91cm5hbCBzdXBlcmJsb2NrIGhhcyBiZWVuIGxvYWRlZCAqLwogI2RlZmluZSBKRlNfQkFSUklFUgkweDAyMAkvKiBVc2UgSURFIGJhcnJpZXJzICovCisjZGVmaW5lIEpGU19BQk9SVF9PTl9TWU5DREFUQV9FUlIJMHgwNDAgIC8qIEFib3J0IHRoZSBqb3VybmFsIG9uIGZpbGUKKwkJCQkJCSogZGF0YSB3cml0ZSBlcnJvciBpbiBvcmRlcmVkCisJCQkJCQkqIG1vZGUgKi8KIAogLyoKICAqIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGpvdXJuYWxpbmcgdHJhbnNhY3Rpb24gYW5kIGJ1ZmZlcgpAQCAtOTg0LDcgKzk4Nyw3IEBACiAKICNkZWZpbmUgamJkX0VOT1NZUygpIFwKIGRvIHsJCQkJCQkJCSAgICAgICAgICAgXAotCXByaW50ayAoS0VSTl9FUlIgIkpCRCB1bmltcGxlbWVudGVkIGZ1bmN0aW9uICVzXG4iLCBfX0ZVTkNUSU9OX18pOyBcCisJcHJpbnRrIChLRVJOX0VSUiAiSkJEIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb24gJXNcbiIsIF9fZnVuY19fKTsgXAogCWN1cnJlbnQtPnN0YXRlID0gVEFTS19VTklOVEVSUlVQVElCTEU7CQkJICAgICAgICAgICBcCiAJc2NoZWR1bGUoKTsJCQkJCQkgICAgICAgICAgIFwKIH0gd2hpbGUgKDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZDIuaCBiL2luY2x1ZGUvbGludXgvamJkMi5oCmluZGV4IGQyZTkxZWEuLmM3ZDEwNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkMi5oCkBAIC02MSw3ICs2MSw3IEBACiAJZG8gewkJCQkJCQkJXAogCQlpZiAoKG4pIDw9IGpiZDJfam91cm5hbF9lbmFibGVfZGVidWcpIHsJCQlcCiAJCQlwcmludGsgKEtFUk5fREVCVUcgIiglcywgJWQpOiAlczogIiwJCVwKLQkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CVwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsJXAogCQkJcHJpbnRrIChmLCAjIyBhKTsJCQkJXAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQpAQCAtNjQxLDYgKzY0MSwxMSBAQAogCSAqLwogCWludCB0X2hhbmRsZV9jb3VudDsKIAorCS8qCisJICogRm9yIHVzZSBieSB0aGUgZmlsZXN5c3RlbSB0byBzdG9yZSBmcy1zcGVjaWZpYyBkYXRhCisJICogc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRyYW5zYWN0aW9uCisJICovCisJc3RydWN0IGxpc3RfaGVhZAl0X3ByaXZhdGVfbGlzdDsKIH07CiAKIHN0cnVjdCB0cmFuc2FjdGlvbl9ydW5fc3RhdHNfcyB7CkBAIC05MzUsNiArOTQwLDEwIEBACiAKIAlwaWRfdAkJCWpfbGFzdF9zeW5jX3dyaXRlcjsKIAorCS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSB0cmFuc2FjdGlvbiBpcyBjbG9zZWQgKi8KKwl2b2lkCQkJKCpqX2NvbW1pdF9jYWxsYmFjaykoam91cm5hbF90ICosCisJCQkJCQkgICAgIHRyYW5zYWN0aW9uX3QgKik7CisKIAkvKgogCSAqIEpvdXJuYWwgc3RhdGlzdGljcwogCSAqLwpAQCAtMTE0Myw3ICsxMTUyLDcgQEAKIAogI2RlZmluZSBqYmRfRU5PU1lTKCkgXAogZG8gewkJCQkJCQkJICAgICAgICAgICBcCi0JcHJpbnRrIChLRVJOX0VSUiAiSkJEIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb24gJXNcbiIsIF9fRlVOQ1RJT05fXyk7IFwKKwlwcmludGsgKEtFUk5fRVJSICJKQkQgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbiAlc1xuIiwgX19mdW5jX18pOyBcCiAJY3VycmVudC0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsJCQkgICAgICAgICAgIFwKIAlzY2hlZHVsZSgpOwkJCQkJCSAgICAgICAgICAgXAogfSB3aGlsZSAoMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvam91cm5hbC1oZWFkLmggYi9pbmNsdWRlL2xpbnV4L2pvdXJuYWwtaGVhZC5oCmluZGV4IDhhNjJkMWUuLmJiNzBlYmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvam91cm5hbC1oZWFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9qb3VybmFsLWhlYWQuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBidWZmZXJfaGVhZCBmaWVsZHMgZm9yIEpCRAogICoKLSAqIDI3IE1heSAyMDAxIEFuZHJldyBNb3J0b24gPGFrcG1AZGlnZW8uY29tPgorICogMjcgTWF5IDIwMDEgQW5kcmV3IE1vcnRvbgogICoJQ3JlYXRlZCAtIHB1bGxlZCBvdXQgb2YgZnMuaAogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaCBiL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaAppbmRleCBiOTYxNDQ4Li5mM2ZlMzQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgKKysrIGIvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oCkBAIC05MywxMiArOTMsMTAgQEAKIH0KIAogLyoKLSAqIFByZXR0eS1wcmludCBhIGZ1bmN0aW9uIHBvaW50ZXIuCi0gKgotICogaWE2NCBhbmQgcHBjNjQgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIHJlYWxseSBmdW5jdGlvbiBkZXNjcmlwdG9ycywKLSAqIHdoaWNoIGNvbnRhaW4gYSBwb2ludGVyIHRoZSByZWFsIGFkZHJlc3MuCisgKiBQcmV0dHktcHJpbnQgYSBmdW5jdGlvbiBwb2ludGVyLiAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLgorICogUGxlYXNlIHVzZSB0aGUgIiVwRiIgdnNwcmludGYgZm9ybWF0IGluc3RlYWQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwcmludF9mbl9kZXNjcmlwdG9yX3N5bWJvbChjb25zdCBjaGFyICpmbXQsIHZvaWQgKmFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZXByZWNhdGVkIHByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKGNvbnN0IGNoYXIgKmZtdCwgdm9pZCAqYWRkcikKIHsKICNpZiBkZWZpbmVkKENPTkZJR19JQTY0KSB8fCBkZWZpbmVkKENPTkZJR19QUEM2NCkKIAlhZGRyID0gKih2b2lkICoqKWFkZHI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCBlY2NlNGE0Li45NGQxN2ZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZWNoZWNrLmg+CiAjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CisjaW5jbHVkZSA8bGludXgvZHluYW1pY19wcmludGsuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgogCkBAIC0yMTMsNiArMjE0LDkgQEAKIAkJeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCitleHRlcm4gaW50IHByaW50a19uZWVkc19jcHUoaW50IGNwdSk7CitleHRlcm4gdm9pZCBwcmludGtfdGljayh2b2lkKTsKKwogZXh0ZXJuIHZvaWQgYXNtbGlua2FnZSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpCiAJZWFybHlfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIApAQCAtMjM1LDkgKzIzOSwxMCBAQAogZXh0ZXJuIGludCBwYW5pY190aW1lb3V0OwogZXh0ZXJuIGludCBwYW5pY19vbl9vb3BzOwogZXh0ZXJuIGludCBwYW5pY19vbl91bnJlY292ZXJlZF9ubWk7Ci1leHRlcm4gaW50IHRhaW50ZWQ7CiBleHRlcm4gY29uc3QgY2hhciAqcHJpbnRfdGFpbnRlZCh2b2lkKTsKLWV4dGVybiB2b2lkIGFkZF90YWludCh1bnNpZ25lZCk7CitleHRlcm4gdm9pZCBhZGRfdGFpbnQodW5zaWduZWQgZmxhZyk7CitleHRlcm4gaW50IHRlc3RfdGFpbnQodW5zaWduZWQgZmxhZyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfdGFpbnQodm9pZCk7CiBleHRlcm4gaW50IHJvb3RfbW91bnRmbGFnczsKIAogLyogVmFsdWVzIHVzZWQgZm9yIHN5c3RlbV9zdGF0ZSAqLwpAQCAtMjUwLDE2ICsyNTUsMTcgQEAKIAlTWVNURU1fU1VTUEVORF9ESVNLLAogfSBzeXN0ZW1fc3RhdGU7CiAKLSNkZWZpbmUgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFCSgxPDwwKQotI2RlZmluZSBUQUlOVF9GT1JDRURfTU9EVUxFCQkoMTw8MSkKLSNkZWZpbmUgVEFJTlRfVU5TQUZFX1NNUAkJKDE8PDIpCi0jZGVmaW5lIFRBSU5UX0ZPUkNFRF9STU1PRAkJKDE8PDMpCi0jZGVmaW5lIFRBSU5UX01BQ0hJTkVfQ0hFQ0sJCSgxPDw0KQotI2RlZmluZSBUQUlOVF9CQURfUEFHRQkJCSgxPDw1KQotI2RlZmluZSBUQUlOVF9VU0VSCQkJKDE8PDYpCi0jZGVmaW5lIFRBSU5UX0RJRQkJCSgxPDw3KQotI2RlZmluZSBUQUlOVF9PVkVSUklEREVOX0FDUElfVEFCTEUJKDE8PDgpCi0jZGVmaW5lIFRBSU5UX1dBUk4JCQkoMTw8OSkKKyNkZWZpbmUgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFCTAKKyNkZWZpbmUgVEFJTlRfRk9SQ0VEX01PRFVMRQkJMQorI2RlZmluZSBUQUlOVF9VTlNBRkVfU01QCQkyCisjZGVmaW5lIFRBSU5UX0ZPUkNFRF9STU1PRAkJMworI2RlZmluZSBUQUlOVF9NQUNISU5FX0NIRUNLCQk0CisjZGVmaW5lIFRBSU5UX0JBRF9QQUdFCQkJNQorI2RlZmluZSBUQUlOVF9VU0VSCQkJNgorI2RlZmluZSBUQUlOVF9ESUUJCQk3CisjZGVmaW5lIFRBSU5UX09WRVJSSURERU5fQUNQSV9UQUJMRQk4CisjZGVmaW5lIFRBSU5UX1dBUk4JCQk5CisjZGVmaW5lIFRBSU5UX0NSQVAJCQkxMAogCiBleHRlcm4gdm9pZCBkdW1wX3N0YWNrKHZvaWQpIF9fY29sZDsKIApAQCAtMzAzLDggKzMwOSwxMiBAQAogI2RlZmluZSBwcl9pbmZvKGZtdCwgYXJnLi4uKSBcCiAJcHJpbnRrKEtFUk5fSU5GTyBmbXQsICMjYXJnKQogCi0jaWZkZWYgREVCVUcKIC8qIElmIHlvdSBhcmUgd3JpdGluZyBhIGRyaXZlciwgcGxlYXNlIHVzZSBkZXZfZGJnIGluc3RlYWQgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKKyNkZWZpbmUgcHJfZGVidWcoZm10LCAuLi4pIGRvIHsgXAorCWR5bmFtaWNfcHJfZGVidWcoZm10LCAjI19fVkFfQVJHU19fKTsgXAorCX0gd2hpbGUgKDApCisjZWxpZiBkZWZpbmVkKERFQlVHKQogI2RlZmluZSBwcl9kZWJ1ZyhmbXQsIGFyZy4uLikgXAogCXByaW50ayhLRVJOX0RFQlVHIGZtdCwgIyNhcmcpCiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCmluZGV4IGNmOWY0MGEuLjRhMTQ1Y2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKQEAgLTM5LDE5ICszOSwzNCBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG5yX2NvbnRleHRfc3dpdGNoZXModm9pZCk7CiAKK3N0cnVjdCBpcnFfZGVzYzsKKworc3RhdGljIGlubGluZSB2b2lkIGtzdGF0X2luY3JfaXJxc190aGlzX2NwdSh1bnNpZ25lZCBpbnQgaXJxLAorCQkJCQkgICAgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KQoreworICAgICAgIHJldHVybiBrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV07Cit9CisKIC8qCiAgKiBOdW1iZXIgb2YgaW50ZXJydXB0cyBwZXIgc3BlY2lmaWMgSVJRIHNvdXJjZSwgc2luY2UgYm9vdHVwCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGtzdGF0X2lycXMoaW50IGlycSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtzdGF0X2lycXModW5zaWduZWQgaW50IGlycSkKIHsKLQlpbnQgY3B1LCBzdW0gPSAwOworCXVuc2lnbmVkIGludCBzdW0gPSAwOworCWludCBjcHU7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQotCQlzdW0gKz0ga3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdOworCQlzdW0gKz0ga3N0YXRfaXJxc19jcHUoaXJxLCBjcHUpOwogCiAJcmV0dXJuIHN1bTsKIH0KIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyB0YXNrX2RlbHRhX2V4ZWMoc3RydWN0IHRhc2tfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgYWNjb3VudF91c2VyX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICosIGNwdXRpbWVfdCk7CiBleHRlcm4gdm9pZCBhY2NvdW50X3VzZXJfdGltZV9zY2FsZWQoc3RydWN0IHRhc2tfc3RydWN0ICosIGNwdXRpbWVfdCk7CiBleHRlcm4gdm9pZCBhY2NvdW50X3N5c3RlbV90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnQsIGNwdXRpbWVfdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ttb2QuaCBiL2luY2x1ZGUvbGludXgva21vZC5oCmluZGV4IGExYTkxNTcuLjkyMjEzYTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21vZC5oCisrKyBiL2luY2x1ZGUvbGludXgva21vZC5oCkBAIC05OSw0ICs5OSw3IEBACiBleHRlcm4gaW50IGNhbGxfdXNlcm1vZGVoZWxwZXJfcGlwZShjaGFyICpwYXRoLCBjaGFyICphcmd2W10sIGNoYXIgKmVudnBbXSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKipmaWxwKTsKIAorZXh0ZXJuIGludCB1c2VybW9kZWhlbHBlcl9kaXNhYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgdXNlcm1vZGVoZWxwZXJfZW5hYmxlKHZvaWQpOworCiAjZW5kaWYgLyogX19MSU5VWF9LTU9EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm0uaCBiL2luY2x1ZGUvbGludXgva3ZtLmgKaW5kZXggNzBhMzA2NS4uNzk3ZmNkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bS5oCkBAIC0zMTEsMjIgKzMxMSwzMyBAQAogCiAvKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgc2luZ2xlIHRyYWNlIGJ1ZmZlciByZWNvcmQuICovCiBzdHJ1Y3Qga3ZtX3RyYWNlX3JlYyB7Ci0JX191MzIgZXZlbnQ6Mjg7Ci0JX191MzIgZXh0cmFfdTMyOjM7Ci0JX191MzIgY3ljbGVfaW46MTsKKwkvKiB2YXJpYWJsZSByZWNfdmFsCisJICogaXMgc3BsaXQgaW50bzoKKwkgKiBiaXRzIDAgLSAyNyAgLT4gZXZlbnQgaWQKKwkgKiBiaXRzIDI4IC0zMCAgLT4gbnVtYmVyIG9mIGV4dHJhIGRhdGEgYXJncyBvZiBzaXplIHUzMgorCSAqIGJpdHMgMzEgICAgICAtPiBiaW5hcnkgaW5kaWNhdG9yIGZvciBpZiB0c2MgaXMgaW4gcmVjb3JkCisJICovCisJX191MzIgcmVjX3ZhbDsKIAlfX3UzMiBwaWQ7CiAJX191MzIgdmNwdV9pZDsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQlfX3U2NCBjeWNsZV91NjQ7CisJCQlfX3U2NCB0aW1lc3RhbXA7CiAJCQlfX3UzMiBleHRyYV91MzJbS1ZNX1RSQ19FWFRSQV9NQVhdOwotCQl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGN5Y2xlOworCQl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHRpbWVzdGFtcDsKIAkJc3RydWN0IHsKIAkJCV9fdTMyIGV4dHJhX3UzMltLVk1fVFJDX0VYVFJBX01BWF07Ci0JCX0gbm9jeWNsZTsKKwkJfSBub3RpbWVzdGFtcDsKIAl9IHU7CiB9OwogCisjZGVmaW5lIFRSQUNFX1JFQ19FVkVOVF9JRCh2YWwpIFwKKwkJKDB4MGZmZmZmZmYgJiAodmFsKSkKKyNkZWZpbmUgVFJBQ0VfUkVDX05VTV9EQVRBX0FSR1ModmFsKSBcCisJCSgweDcwMDAwMDAwICYgKCh2YWwpIDw8IDI4KSkKKyNkZWZpbmUgVFJBQ0VfUkVDX1RDUyh2YWwpIFwKKwkJKDB4ODAwMDAwMDAgJiAoKHZhbCkgPDwgMzEpKQorCiAjZGVmaW5lIEtWTUlPIDB4QUUKIAogLyoKQEAgLTM3Miw2ICszODMsMTAgQEAKICNkZWZpbmUgS1ZNX0NBUF9NUF9TVEFURSAxNAogI2RlZmluZSBLVk1fQ0FQX0NPQUxFU0NFRF9NTUlPIDE1CiAjZGVmaW5lIEtWTV9DQVBfU1lOQ19NTVUgMTYgIC8qIENoYW5nZXMgdG8gaG9zdCBtbWFwIGFyZSByZWZsZWN0ZWQgaW4gZ3Vlc3QgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19YODYpfHxkZWZpbmVkKENPTkZJR19JQTY0KQorI2RlZmluZSBLVk1fQ0FQX0RFVklDRV9BU1NJR05NRU5UIDE3CisjZW5kaWYKKyNkZWZpbmUgS1ZNX0NBUF9JT01NVSAxOAogCiAvKgogICogaW9jdGxzIGZvciBWTSBmZHMKQEAgLTQwMSw2ICs0MTYsMTAgQEAKIAkJCV9JT1coS1ZNSU8sICAweDY3LCBzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3pvbmUpCiAjZGVmaW5lIEtWTV9VTlJFR0lTVEVSX0NPQUxFU0NFRF9NTUlPIFwKIAkJCV9JT1coS1ZNSU8sICAweDY4LCBzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3pvbmUpCisjZGVmaW5lIEtWTV9BU1NJR05fUENJX0RFVklDRSBfSU9SKEtWTUlPLCAweDY5LCBcCisJCQkJICAgc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2KQorI2RlZmluZSBLVk1fQVNTSUdOX0lSUSBfSU9SKEtWTUlPLCAweDcwLCBcCisJCQkgICAgc3RydWN0IGt2bV9hc3NpZ25lZF9pcnEpCiAKIC8qCiAgKiBpb2N0bHMgZm9yIHZjcHUgZmRzCkBAIC00NDAsNCArNDU5LDQ1IEBACiAjZGVmaW5lIEtWTV9HRVRfTVBfU1RBVEUgICAgICAgICAgX0lPUihLVk1JTywgIDB4OTgsIHN0cnVjdCBrdm1fbXBfc3RhdGUpCiAjZGVmaW5lIEtWTV9TRVRfTVBfU1RBVEUgICAgICAgICAgX0lPVyhLVk1JTywgIDB4OTksIHN0cnVjdCBrdm1fbXBfc3RhdGUpCiAKKyNkZWZpbmUgS1ZNX1RSQ19JTkpfVklSUSAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDAyKQorI2RlZmluZSBLVk1fVFJDX1JFREVMSVZFUl9FVlQgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDMpCisjZGVmaW5lIEtWTV9UUkNfUEVORF9JTlRSICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwNCkKKyNkZWZpbmUgS1ZNX1RSQ19JT19SRUFEICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA1KQorI2RlZmluZSBLVk1fVFJDX0lPX1dSSVRFICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDYpCisjZGVmaW5lIEtWTV9UUkNfQ1JfUkVBRCAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwNykKKyNkZWZpbmUgS1ZNX1RSQ19DUl9XUklURSAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA4KQorI2RlZmluZSBLVk1fVFJDX0RSX1JFQUQgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDkpCisjZGVmaW5lIEtWTV9UUkNfRFJfV1JJVEUgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwQSkKKyNkZWZpbmUgS1ZNX1RSQ19NU1JfUkVBRCAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDBCKQorI2RlZmluZSBLVk1fVFJDX01TUl9XUklURSAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MEMpCisjZGVmaW5lIEtWTV9UUkNfQ1BVSUQgICAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwRCkKKyNkZWZpbmUgS1ZNX1RSQ19JTlRSICAgICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDBFKQorI2RlZmluZSBLVk1fVFJDX05NSSAgICAgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MEYpCisjZGVmaW5lIEtWTV9UUkNfVk1NQ0FMTCAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxMCkKKyNkZWZpbmUgS1ZNX1RSQ19ITFQgICAgICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDExKQorI2RlZmluZSBLVk1fVFJDX0NMVFMgICAgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTIpCisjZGVmaW5lIEtWTV9UUkNfTE1TVyAgICAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxMykKKyNkZWZpbmUgS1ZNX1RSQ19BUElDX0FDQ0VTUyAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDE0KQorI2RlZmluZSBLVk1fVFJDX1REUF9GQVVMVCAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTUpCisjZGVmaW5lIEtWTV9UUkNfR1RMQl9XUklURSAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxNikKKyNkZWZpbmUgS1ZNX1RSQ19TVExCX1dSSVRFICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDE3KQorI2RlZmluZSBLVk1fVFJDX1NUTEJfSU5WQUwgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTgpCisjZGVmaW5lIEtWTV9UUkNfUFBDX0lOU1RSICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxOSkKKworc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2IHsKKwlfX3UzMiBhc3NpZ25lZF9kZXZfaWQ7CisJX191MzIgYnVzbnI7CisJX191MzIgZGV2Zm47CisJX191MzIgZmxhZ3M7Cit9OworCitzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycSB7CisJX191MzIgYXNzaWduZWRfZGV2X2lkOworCV9fdTMyIGhvc3RfaXJxOworCV9fdTMyIGd1ZXN0X2lycTsKKwlfX3UzMiBmbGFnczsKK307CisKKyNkZWZpbmUgS1ZNX0RFVl9BU1NJR05fRU5BQkxFX0lPTU1VCSgxIDw8IDApCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDg1MjVhZmMuLjM4MzNjNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTM0LDYgKzM0LDggQEAKICNkZWZpbmUgS1ZNX1JFUV9NTVVfUkVMT0FEICAgICAgICAgMwogI2RlZmluZSBLVk1fUkVRX1RSSVBMRV9GQVVMVCAgICAgICA0CiAjZGVmaW5lIEtWTV9SRVFfUEVORElOR19USU1FUiAgICAgIDUKKyNkZWZpbmUgS1ZNX1JFUV9VTkhBTFQgICAgICAgICAgICAgNgorI2RlZmluZSBLVk1fUkVRX01NVV9TWU5DICAgICAgICAgICA3CiAKIHN0cnVjdCBrdm1fdmNwdTsKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqa3ZtX3ZjcHVfY2FjaGU7CkBAIC0yNzksMTIgKzI4MSw2OCBAQAogCiBzdHJ1Y3QgIGt2bSAqa3ZtX2FyY2hfY3JlYXRlX3ZtKHZvaWQpOwogdm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSk7Cit2b2lkIGt2bV9mcmVlX2FsbF9hc3NpZ25lZF9kZXZpY2VzKHN0cnVjdCBrdm0gKmt2bSk7CiAKIGludCBrdm1fY3B1X2dldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KTsKIGludCBrdm1fY3B1X2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KTsKIGludCBrdm1fY3B1X2hhc19wZW5kaW5nX3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV92Y3B1X2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAoraW50IGt2bV9pc19tbWlvX3BmbihwZm5fdCBwZm4pOworCitzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgeworCXN0cnVjdCBobGlzdF9ub2RlIGxpbms7CisJdW5zaWduZWQgZ3NpOworCXZvaWQgKCppcnFfYWNrZWQpKHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbik7Cit9OworCitzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgeworCXN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciBhY2tfbm90aWZpZXI7CisJc3RydWN0IHdvcmtfc3RydWN0IGludGVycnVwdF93b3JrOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlpbnQgYXNzaWduZWRfZGV2X2lkOworCWludCBob3N0X2J1c25yOworCWludCBob3N0X2RldmZuOworCWludCBob3N0X2lycTsKKwlpbnQgZ3Vlc3RfaXJxOworCWludCBpcnFfcmVxdWVzdGVkOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJc3RydWN0IGt2bSAqa3ZtOworfTsKK3ZvaWQga3ZtX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwordm9pZCBrdm1fbm90aWZ5X2Fja2VkX2lycShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGdzaSk7Cit2b2lkIGt2bV9yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkgICBzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pOwordm9pZCBrdm1fdW5yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkgICAgIHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbik7CisKKyNpZmRlZiBDT05GSUdfRE1BUgoraW50IGt2bV9pb21tdV9tYXBfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBiYXNlX2dmbiwKKwkJCXVuc2lnbmVkIGxvbmcgbnBhZ2VzKTsKK2ludCBrdm1faW9tbXVfbWFwX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSwKKwkJCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqYXNzaWduZWRfZGV2KTsKK2ludCBrdm1faW9tbXVfdW5tYXBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKTsKKyNlbHNlIC8qIENPTkZJR19ETUFSICovCitzdGF0aWMgaW5saW5lIGludCBrdm1faW9tbXVfbWFwX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkgICAgICBnZm5fdCBiYXNlX2dmbiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIG5wYWdlcykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQga3ZtX2lvbW11X21hcF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgICAgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsCisJCQkJICAgICAgKmFzc2lnbmVkX2RldikKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGlubGluZSBpbnQga3ZtX2lvbW11X3VubWFwX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfRE1BUiAqLworCiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2d1ZXN0X2VudGVyKHZvaWQpCiB7CiAJYWNjb3VudF9zeXN0ZW1fdnRpbWUoY3VycmVudCk7CkBAIC0zMDcsNiArMzY1LDExIEBACiAJcmV0dXJuIChncGFfdClnZm4gPDwgUEFHRV9TSElGVDsKIH0KIAorc3RhdGljIGlubGluZSBocGFfdCBwZm5fdG9faHBhKHBmbl90IHBmbikKK3sKKwlyZXR1cm4gKGhwYV90KXBmbiA8PCBQQUdFX1NISUZUOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX21pZ3JhdGVfdGltZXJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzZXRfYml0KEtWTV9SRVFfTUlHUkFURV9USU1FUiwgJnZjcHUtPnJlcXVlc3RzKTsKQEAgLTMyNiw2ICszODksMjUgQEAKIGV4dGVybiBzdHJ1Y3Qga3ZtX3N0YXRzX2RlYnVnZnNfaXRlbSBkZWJ1Z2ZzX2VudHJpZXNbXTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICprdm1fZGVidWdmc19kaXI7CiAKKyNkZWZpbmUgS1ZNVFJBQ0VfNUQoZXZ0LCB2Y3B1LCBkMSwgZDIsIGQzLCBkNCwgZDUsIG5hbWUpIFwKKwl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKKwkJCQkJCXZjcHUsIDUsIGQxLCBkMiwgZDMsIGQ0LCBkNSkKKyNkZWZpbmUgS1ZNVFJBQ0VfNEQoZXZ0LCB2Y3B1LCBkMSwgZDIsIGQzLCBkNCwgbmFtZSkgXAorCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAorCQkJCQkJdmNwdSwgNCwgZDEsIGQyLCBkMywgZDQsIDApCisjZGVmaW5lIEtWTVRSQUNFXzNEKGV2dCwgdmNwdSwgZDEsIGQyLCBkMywgbmFtZSkgXAorCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAorCQkJCQkJdmNwdSwgMywgZDEsIGQyLCBkMywgMCwgMCkKKyNkZWZpbmUgS1ZNVFJBQ0VfMkQoZXZ0LCB2Y3B1LCBkMSwgZDIsIG5hbWUpIFwKKwl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKKwkJCQkJCXZjcHUsIDIsIGQxLCBkMiwgMCwgMCwgMCkKKyNkZWZpbmUgS1ZNVFJBQ0VfMUQoZXZ0LCB2Y3B1LCBkMSwgbmFtZSkgXAorCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAorCQkJCQkJdmNwdSwgMSwgZDEsIDAsIDAsIDAsIDApCisjZGVmaW5lIEtWTVRSQUNFXzBEKGV2dCwgdmNwdSwgbmFtZSkgXAorCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAorCQkJCQkJdmNwdSwgMCwgMCwgMCwgMCwgMCwgMCkKKwogI2lmZGVmIENPTkZJR19LVk1fVFJBQ0UKIGludCBrdm1fdHJhY2VfaW9jdGwodW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7CiB2b2lkIGt2bV90cmFjZV9jbGVhbnVwKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZC9iaW5kLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2JpbmQuaAppbmRleCAzZDI1YmNkLi5lNTg3MmRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2JpbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2JpbmQuaApAQCAtMjcsNyArMjcsNiBAQAogCQkJCQkJc3RydWN0IG5mc19maCAqLAogCQkJCQkJc3RydWN0IGZpbGUgKiopOwogCXZvaWQJCQkoKmZjbG9zZSkoc3RydWN0IGZpbGUgKik7Ci0JdW5zaWduZWQgbG9uZwkJKCpnZXRfZ3JhY2VfcGVyaW9kKSh2b2lkKTsKIH07CiAKIGV4dGVybiBzdHJ1Y3Qgbmxtc3ZjX2JpbmRpbmcgKglubG1zdmNfb3BzOwpAQCAtNTMsMTUgKzUyLDcgQEAKIAogZXh0ZXJuIGludAlubG1jbG50X3Byb2Moc3RydWN0IG5sbV9ob3N0ICpob3N0LCBpbnQgY21kLAogCQkJCQlzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7Ci1leHRlcm4gaW50CWxvY2tkX3VwKGludCBwcm90byk7CitleHRlcm4gaW50CWxvY2tkX3VwKHZvaWQpOwogZXh0ZXJuIHZvaWQJbG9ja2RfZG93bih2b2lkKTsKIAotdW5zaWduZWQgbG9uZyBnZXRfbmZzX2dyYWNlX3BlcmlvZCh2b2lkKTsKLQotI2lmZGVmIENPTkZJR19ORlNEX1Y0Ci11bnNpZ25lZCBsb25nIGdldF9uZnM0X2dyYWNlX3BlcmlvZCh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X25mczRfZ3JhY2VfcGVyaW9kKHZvaWQpIHtyZXR1cm4gMDt9Ci0jZW5kaWYKLQogI2VuZGlmIC8qIExJTlVYX0xPQ0tEX0JJTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCmluZGV4IGRiYjg3YWIuLmI1NmQ1YWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmgKQEAgLTEyLDYgKzEyLDggQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgpAQCAtMzgsOCArNDAsOSBAQAogICovCiBzdHJ1Y3QgbmxtX2hvc3QgewogCXN0cnVjdCBobGlzdF9ub2RlCWhfaGFzaDsJCS8qIGRvdWJseSBsaW5rZWQgbGlzdCAqLwotCXN0cnVjdCBzb2NrYWRkcl9pbgloX2FkZHI7CQkvKiBwZWVyIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHJfaW4JaF9zYWRkcjsJLyogb3VyIGFkZHJlc3MgKG9wdGlvbmFsKSAqLworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCWhfYWRkcjsJCS8qIHBlZXIgYWRkcmVzcyAqLworCXNpemVfdAkJCWhfYWRkcmxlbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQloX3NyY2FkZHI7CS8qIG91ciBhZGRyZXNzIChvcHRpb25hbCkgKi8KIAlzdHJ1Y3QgcnBjX2NsbnQJKgloX3JwY2NsbnQ7CS8qIFJQQyBjbGllbnQgdG8gdGFsayB0byBwZWVyICovCiAJY2hhciAqCQkJaF9uYW1lOwkJLyogcmVtb3RlIGhvc3RuYW1lICovCiAJdTMyCQkJaF92ZXJzaW9uOwkvKiBpbnRlcmZhY2UgdmVyc2lvbiAqLwpAQCAtNjEsMTggKzY0LDU2IEBACiAJc3RydWN0IGxpc3RfaGVhZAloX2dyYW50ZWQ7CS8qIExvY2tzIGluIEdSQU5URUQgc3RhdGUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWhfcmVjbGFpbTsJLyogTG9ja3MgaW4gUkVDTEFJTSBzdGF0ZSAqLwogCXN0cnVjdCBuc21faGFuZGxlICoJaF9uc21oYW5kbGU7CS8qIE5TTSBzdGF0dXMgaGFuZGxlICovCisKKwljaGFyCQkJaF9hZGRyYnVmWzQ4XSwJLyogYWRkcmVzcyBleWVjYXRjaGVycyAqLworCQkJCWhfc3JjYWRkcmJ1Zls0OF07CiB9OwogCiBzdHJ1Y3QgbnNtX2hhbmRsZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlzbV9saW5rOwogCWF0b21pY190CQlzbV9jb3VudDsKIAljaGFyICoJCQlzbV9uYW1lOwotCXN0cnVjdCBzb2NrYWRkcl9pbglzbV9hZGRyOworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCXNtX2FkZHI7CisJc2l6ZV90CQkJc21fYWRkcmxlbjsKIAl1bnNpZ25lZCBpbnQJCXNtX21vbml0b3JlZCA6IDEsCiAJCQkJc21fc3RpY2t5IDogMTsJLyogZG9uJ3QgdW5tb25pdG9yICovCisJY2hhcgkJCXNtX2FkZHJidWZbNDhdOwkvKiBhZGRyZXNzIGV5ZWNhdGNoZXIgKi8KIH07CiAKIC8qCisgKiBSaWdvcm91cyB0eXBlIGNoZWNraW5nIG9uIHNvY2thZGRyIHR5cGUgY29udmVyc2lvbnMKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29ja2FkZHJfaW4gKm5sbV9hZGRyX2luKGNvbnN0IHN0cnVjdCBubG1faG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZob3N0LT5oX2FkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2thZGRyICpubG1fYWRkcihjb25zdCBzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QpCit7CisJcmV0dXJuIChzdHJ1Y3Qgc29ja2FkZHIgKikmaG9zdC0+aF9hZGRyOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrYWRkcl9pbiAqbmxtX3NyY2FkZHJfaW4oY29uc3Qgc3RydWN0IG5sbV9ob3N0ICpob3N0KQoreworCXJldHVybiAoc3RydWN0IHNvY2thZGRyX2luICopJmhvc3QtPmhfc3JjYWRkcjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29ja2FkZHIgKm5sbV9zcmNhZGRyKGNvbnN0IHN0cnVjdCBubG1faG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBzb2NrYWRkciAqKSZob3N0LT5oX3NyY2FkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2thZGRyX2luICpuc21fYWRkcl9pbihjb25zdCBzdHJ1Y3QgbnNtX2hhbmRsZSAqaGFuZGxlKQoreworCXJldHVybiAoc3RydWN0IHNvY2thZGRyX2luICopJmhhbmRsZS0+c21fYWRkcjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29ja2FkZHIgKm5zbV9hZGRyKGNvbnN0IHN0cnVjdCBuc21faGFuZGxlICpoYW5kbGUpCit7CisJcmV0dXJuIChzdHJ1Y3Qgc29ja2FkZHIgKikmaGFuZGxlLT5zbV9hZGRyOworfQorCisvKgogICogTWFwIGFuIGZsX293bmVyX3QgaW50byBhIHVuaXF1ZSAzMi1iaXQgInBpZCIKICAqLwogc3RydWN0IG5sbV9sb2Nrb3duZXIgewpAQCAtMTY2LDcgKzIwNyw4IEBACiBzdHJ1Y3QgbmxtX3dhaXQgKiBubG1jbG50X3ByZXBhcmVfYmxvY2soc3RydWN0IG5sbV9ob3N0ICpob3N0LCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7CiB2b2lkCQkgIG5sbWNsbnRfZmluaXNoX2Jsb2NrKHN0cnVjdCBubG1fd2FpdCAqYmxvY2spOwogaW50CQkgIG5sbWNsbnRfYmxvY2soc3RydWN0IG5sbV93YWl0ICpibG9jaywgc3RydWN0IG5sbV9ycXN0ICpyZXEsIGxvbmcgdGltZW91dCk7Ci1fX2JlMzIJCSAgbmxtY2xudF9ncmFudChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsIGNvbnN0IHN0cnVjdCBubG1fbG9jayAqKTsKK19fYmUzMgkJICBubG1jbG50X2dyYW50KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKwkJCQljb25zdCBzdHJ1Y3QgbmxtX2xvY2sgKmxvY2spOwogdm9pZAkJICBubG1jbG50X3JlY292ZXJ5KHN0cnVjdCBubG1faG9zdCAqKTsKIGludAkJICBubG1jbG50X3JlY2xhaW0oc3RydWN0IG5sbV9ob3N0ICosIHN0cnVjdCBmaWxlX2xvY2sgKik7CiB2b2lkCQkgIG5sbWNsbnRfbmV4dF9jb29raWUoc3RydWN0IG5sbV9jb29raWUgKik7CkBAIC0xNzQsMTIgKzIxNiwxNCBAQAogLyoKICAqIEhvc3QgY2FjaGUKICAqLwotc3RydWN0IG5sbV9ob3N0ICAqbmxtY2xudF9sb29rdXBfaG9zdChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiwKLQkJCQkJaW50IHByb3RvLCB1MzIgdmVyc2lvbiwKK3N0cnVjdCBubG1faG9zdCAgKm5sbWNsbnRfbG9va3VwX2hvc3QoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAsCisJCQkJCWNvbnN0IHNpemVfdCBzYWxlbiwKKwkJCQkJY29uc3QgdW5zaWduZWQgc2hvcnQgcHJvdG9jb2wsCisJCQkJCWNvbnN0IHUzMiB2ZXJzaW9uLAorCQkJCQljb25zdCBjaGFyICpob3N0bmFtZSk7CitzdHJ1Y3QgbmxtX2hvc3QgICpubG1zdmNfbG9va3VwX2hvc3QoY29uc3Qgc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKIAkJCQkJY29uc3QgY2hhciAqaG9zdG5hbWUsCi0JCQkJCXVuc2lnbmVkIGludCBob3N0bmFtZV9sZW4pOwotc3RydWN0IG5sbV9ob3N0ICAqbmxtc3ZjX2xvb2t1cF9ob3N0KHN0cnVjdCBzdmNfcnFzdCAqLCBjb25zdCBjaGFyICosCi0JCQkJCXVuc2lnbmVkIGludCk7CisJCQkJCWNvbnN0IHNpemVfdCBob3N0bmFtZV9sZW4pOwogc3RydWN0IHJwY19jbG50ICogbmxtX2JpbmRfaG9zdChzdHJ1Y3QgbmxtX2hvc3QgKik7CiB2b2lkCQkgIG5sbV9yZWJpbmRfaG9zdChzdHJ1Y3QgbmxtX2hvc3QgKik7CiBzdHJ1Y3QgbmxtX2hvc3QgKiBubG1fZ2V0X2hvc3Qoc3RydWN0IG5sbV9ob3N0ICopOwpAQCAtMjAxLDcgKzI0NSw3IEBACiAgKi8KIF9fYmUzMgkJICBubG1zdmNfbG9jayhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IG5sbV9maWxlICosCiAJCQkgICAgICBzdHJ1Y3QgbmxtX2hvc3QgKiwgc3RydWN0IG5sbV9sb2NrICosIGludCwKLQkJCSAgICAgIHN0cnVjdCBubG1fY29va2llICopOworCQkJICAgICAgc3RydWN0IG5sbV9jb29raWUgKiwgaW50KTsKIF9fYmUzMgkJICBubG1zdmNfdW5sb2NrKHN0cnVjdCBubG1fZmlsZSAqLCBzdHJ1Y3QgbmxtX2xvY2sgKik7CiBfX2JlMzIJCSAgbmxtc3ZjX3Rlc3Rsb2NrKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3QgbmxtX2ZpbGUgKiwKIAkJCXN0cnVjdCBubG1faG9zdCAqLCBzdHJ1Y3QgbmxtX2xvY2sgKiwKQEAgLTIzMywxNSArMjc3LDgyIEBACiAJcmV0dXJuIGZpbGUtPmZfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIH0KIAotLyoKLSAqIENvbXBhcmUgdHdvIGhvc3QgYWRkcmVzc2VzIChuZWVkcyBtb2RpZnlpbmcgZm9yIGlwdjYpCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5sbV9jbXBfYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjEsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4yKQorc3RhdGljIGlubGluZSBpbnQgX19ubG1fcHJpdmlsZWdlZF9yZXF1ZXN0NChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCkKIHsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXA7CisJcmV0dXJuIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBodG9ubChJTkFERFJfTE9PUEJBQ0spKSAmJgorCQkJKG50b2hzKHNpbi0+c2luX3BvcnQpIDwgMTAyNCk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKK3N0YXRpYyBpbmxpbmUgaW50IF9fbmxtX3ByaXZpbGVnZWRfcmVxdWVzdDYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXApCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwOworCXJldHVybiAoaXB2Nl9hZGRyX3R5cGUoJnNpbjYtPnNpbjZfYWRkcikgJiBJUFY2X0FERFJfTE9PUEJBQ0spICYmCisJCQkobnRvaHMoc2luNi0+c2luNl9wb3J0KSA8IDEwMjQpOworfQorI2Vsc2UJLyogZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpICovCitzdGF0aWMgaW5saW5lIGludCBfX25sbV9wcml2aWxlZ2VkX3JlcXVlc3Q2KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwKQoreworCXJldHVybiAwOworfQorI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKSAqLworCisvKgorICogRW5zdXJlIGluY29taW5nIHJlcXVlc3RzIGFyZSBmcm9tIGxvY2FsIHByaXZpbGVnZWQgY2FsbGVycy4KKyAqCisgKiBSZXR1cm4gVFJVRSBpZiBzZW5kZXIgaXMgbG9jYWwgYW5kIGlzIGNvbm5lY3RpbmcgdmlhIGEgcHJpdmlsZWdlZCBwb3J0OworICogb3RoZXJ3aXNlIHJldHVybiBGQUxTRS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbmxtX3ByaXZpbGVnZWRfcmVxdWVzdGVyKGNvbnN0IHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAgPSBzdmNfYWRkcihycXN0cCk7CisKKwlzd2l0Y2ggKHNhcC0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gX19ubG1fcHJpdmlsZWdlZF9yZXF1ZXN0NChzYXApOworCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiBfX25sbV9wcml2aWxlZ2VkX3JlcXVlc3Q2KHNhcCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBfX25sbV9jbXBfYWRkcjQoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAorCQkJCSAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAyKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luMSA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXAxOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luMiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXAyOwogCXJldHVybiBzaW4xLT5zaW5fYWRkci5zX2FkZHIgPT0gc2luMi0+c2luX2FkZHIuc19hZGRyOwogfQogCitzdGF0aWMgaW5saW5lIGludCBfX25sbV9jbXBfYWRkcjYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAorCQkJCSAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAyKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjEgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDE7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luMiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwMjsKKwlyZXR1cm4gaXB2Nl9hZGRyX2VxdWFsKCZzaW4xLT5zaW42X2FkZHIsICZzaW4yLT5zaW42X2FkZHIpOworfQorCisvKgorICogQ29tcGFyZSB0d28gaG9zdCBhZGRyZXNzZXMKKyAqCisgKiBSZXR1cm4gVFJVRSBpZiB0aGUgYWRkcmVzc2VzIGFyZSB0aGUgc2FtZTsgb3RoZXJ3aXNlIEZBTFNFLgorICovCitzdGF0aWMgaW5saW5lIGludCBubG1fY21wX2FkZHIoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAxLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwMikKK3sKKwlpZiAoc2FwMS0+c2FfZmFtaWx5ID09IHNhcDItPnNhX2ZhbWlseSkgeworCQlzd2l0Y2ggKHNhcDEtPnNhX2ZhbWlseSkgeworCQljYXNlIEFGX0lORVQ6CisJCQlyZXR1cm4gX19ubG1fY21wX2FkZHI0KHNhcDEsIHNhcDIpOworCQljYXNlIEFGX0lORVQ2OgorCQkJcmV0dXJuIF9fbmxtX2NtcF9hZGRyNihzYXAxLCBzYXAyKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIENvbXBhcmUgdHdvIE5MTSBsb2Nrcy4KICAqIFdoZW4gdGhlIHNlY29uZCBsb2NrIGlzIG9mIHR5cGUgRl9VTkxDSywgdGhpcyBhY3RzIGxpa2UgYSB3aWxkY2FyZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2QveGRyLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL3hkci5oCmluZGV4IGRmMThmYTAuLmQ2YjNhODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2QveGRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZC94ZHIuaApAQCAtODEsOCArODEsNiBAQAogCXVuc2lnbmVkIGludAlsZW47CiAJdTMyCQlzdGF0ZTsKIAlfX2JlMzIJCWFkZHI7Ci0JX19iZTMyCQl2ZXJzOwotCV9fYmUzMgkJcHJvdG87CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYWdpYy5oIGIvaW5jbHVkZS9saW51eC9tYWdpYy5oCmluZGV4IDFmYTBjMmMuLmY3ZjNmZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWFnaWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21hZ2ljLmgKQEAgLTYsNiArNiwxMCBAQAogI2RlZmluZSBBRlNfU1VQRVJfTUFHSUMgICAgICAgICAgICAgICAgMHg1MzQ2NDE0RgogI2RlZmluZSBBVVRPRlNfU1VQRVJfTUFHSUMJMHgwMTg3CiAjZGVmaW5lIENPREFfU1VQRVJfTUFHSUMJMHg3Mzc1NzI0NQorI2RlZmluZSBERUJVR0ZTX01BR0lDICAgICAgICAgIDB4NjQ2MjY3MjAKKyNkZWZpbmUgU1lTRlNfTUFHSUMJCTB4NjI2NTY1NzIKKyNkZWZpbmUgU0VDVVJJVFlGU19NQUdJQwkweDczNjM2NjczCisjZGVmaW5lIFRNUEZTX01BR0lDCQkweDAxMDIxOTk0CiAjZGVmaW5lIEVGU19TVVBFUl9NQUdJQwkJMHg0MTRBNTMKICNkZWZpbmUgRVhUMl9TVVBFUl9NQUdJQwkweEVGNTMKICNkZWZpbmUgRVhUM19TVVBFUl9NQUdJQwkweEVGNTMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwX3RvXzdzZWdtZW50LmggYi9pbmNsdWRlL2xpbnV4L21hcF90b183c2VnbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZjg0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21hcF90b183c2VnbWVudC5oCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEhlbmsgVmVyZ29uZXQgPEhlbmsuVmVyZ29uZXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBNQVBfVE9fN1NFR01FTlRfSAorI2RlZmluZSBNQVBfVE9fN1NFR01FTlRfSAorCisvKiBUaGlzIGZpbGUgcHJvdmlkZXMgdHJhbnNsYXRpb24gcHJpbWl0aXZlcyBhbmQgdGFibGVzIGZvciB0aGUgY29udmVyc2lvbgorICogb2YgKEFTQ0lJKSBjaGFyYWN0ZXJzIHRvIGEgNy1zZWdtZW50cyBub3RhdGlvbi4KKyAqCisgKiBUaGUgNyBzZWdtZW50J3Mgd2lraXBlZGlhIG5vdGF0aW9uIGJlbG93IGlzIHVzZWQgYXMgc3RhbmRhcmQuCisgKiBTZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2V2ZW5fc2VnbWVudF9kaXNwbGF5CisgKgorICogTm90YXRpb246CSstYS0rCisgKgkJZiAgIGIKKyAqCQkrLWctKworICoJCWUgICBjCisgKgkJKy1kLSsKKyAqCisgKiBVc2FnZToKKyAqCisgKiAgIFJlZ2lzdGVyIGEgbWFwIHZhcmlhYmxlLCBhbmQgZmlsbCBpdCB3aXRoIGEgY2hhcmFjdGVyIHNldDoKKyAqCXN0YXRpYyBTRUc3X0RFRkFVTFRfTUFQKG1hcF9zZWc3KTsKKyAqCisgKgorICogICBUaGVuIHVzZSBmb3IgY29udmVyc2lvbjoKKyAqCXNlZzcgPSBtYXBfdG9fc2VnNygmbWFwX3NlZzcsIHNvbWVfY2hhcik7CisgKgkuLi4KKyAqCisgKiBJbiBkZXZpY2UgZHJpdmVycyBpdCBpcyByZWNvbW1lbmRlZCwgaWYgcmVxdWlyZWQsIHRvIG1ha2UgdGhlIGNoYXIgbWFwCisgKiBhY2Nlc3NpYmxlIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlIHVzaW5nIHRoZSBmb2xsb3dpbmcgc2NoZW1lOgorICoKKyAqIHN0YXRpYyBzc2l6ZV90IHNob3dfbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKSB7CisgKgltZW1jcHkoYnVmLCAmbWFwX3NlZzcsIHNpemVvZihtYXBfc2VnNykpOworICoJcmV0dXJuIHNpemVvZihtYXBfc2VnNyk7CisgKiB9CisgKiBzdGF0aWMgc3NpemVfdCBzdG9yZV9tYXAoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjbnQpIHsKKyAqCWlmKGNudCAhPSBzaXplb2YobWFwX3NlZzcpKQorICoJCXJldHVybiAtRUlOVkFMOworICoJbWVtY3B5KCZtYXBfc2VnNywgYnVmLCBjbnQpOworICoJcmV0dXJuIGNudDsKKyAqIH0KKyAqIHN0YXRpYyBERVZJQ0VfQVRUUihtYXBfc2VnNywgUEVSTVNfUlcsIHNob3dfbWFwLCBzdG9yZV9tYXApOworICoKKyAqIEhpc3Rvcnk6CisgKiAyMDA1LTA1LTMxCVJGQyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCisgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisKKyNkZWZpbmUgQklUX1NFRzdfQQkJMAorI2RlZmluZSBCSVRfU0VHN19CCQkxCisjZGVmaW5lIEJJVF9TRUc3X0MJCTIKKyNkZWZpbmUgQklUX1NFRzdfRAkJMworI2RlZmluZSBCSVRfU0VHN19FCQk0CisjZGVmaW5lIEJJVF9TRUc3X0YJCTUKKyNkZWZpbmUgQklUX1NFRzdfRwkJNgorI2RlZmluZSBCSVRfU0VHN19SRVNFUlZFRAk3CisKK3N0cnVjdCBzZWc3X2NvbnZlcnNpb25fbWFwIHsKKwl1bnNpZ25lZCBjaGFyCXRhYmxlWzEyOF07Cit9OworCitzdGF0aWMgaW5saW5lIGludCBtYXBfdG9fc2VnNyhzdHJ1Y3Qgc2VnN19jb252ZXJzaW9uX21hcCAqbWFwLCBpbnQgYykKK3sKKwlyZXR1cm4gYyA+PSAwICYmIGMgPCBzaXplb2YobWFwLT50YWJsZSkgPyBtYXAtPnRhYmxlW2NdIDogLUVJTlZBTDsKK30KKworI2RlZmluZSBTRUc3X0NPTlZFUlNJT05fTUFQKF9uYW1lLCBfbWFwKQlcCisJc3RydWN0IHNlZzdfY29udmVyc2lvbl9tYXAgX25hbWUgPSB7IC50YWJsZSA9IHsgX21hcCB9IH0KKworLyoKKyAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBhIGZhY2lsaXR5IHRoYXQgYWxsb3dzIHVzZXIgc3BhY2UgdG8gcmVkZWZpbmUKKyAqIGN1c3RvbSBjaGFyYWN0ZXIgc2V0cyBmb3IgTENEIGRldmljZXMuIFBsZWFzZSB1c2UgYSBzeXNmcyBpbnRlcmZhY2UKKyAqIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAqLworI2RlZmluZSBNQVBfVE9fU0VHN19TWVNGU19GSUxFCSJtYXBfc2VnNyIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEFTQ0lJIGNvbnZlcnNpb24gdGFibGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgX1NFRzcobCxhLGIsYyxkLGUsZixnKQlcCisgICAgICAoCWE8PEJJVF9TRUc3X0EgfAliPDxCSVRfU0VHN19CIHwJYzw8QklUX1NFRzdfQyB8CWQ8PEJJVF9TRUc3X0QgfAlcCisJZTw8QklUX1NFRzdfRSB8CWY8PEJJVF9TRUc3X0YgfAlnPDxCSVRfU0VHN19HICkKKworI2RlZmluZSBfTUFQXzBfMzJfQVNDSUlfU0VHN19OT05fUFJJTlRBQkxFCVwKKwkwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKworI2RlZmluZSBfTUFQXzMzXzQ3X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisgX1NFRzcoJyEnLDAsMCwwLDAsMSwxLDApLCBfU0VHNygnIicsMCwxLDAsMCwwLDEsMCksIF9TRUc3KCcjJywwLDEsMSwwLDEsMSwwKSxcCisgX1NFRzcoJyQnLDEsMCwxLDEsMCwxLDEpLCBfU0VHNygnJScsMCwwLDEsMCwwLDEsMCksIF9TRUc3KCcmJywxLDAsMSwxLDEsMSwxKSxcCisgX1NFRzcoJ1wnJywwLDAsMCwwLDAsMSwwKSxfU0VHNygnKCcsMSwwLDAsMSwxLDEsMCksIF9TRUc3KCcpJywxLDEsMSwxLDAsMCwwKSxcCisgX1NFRzcoJyonLDAsMSwxLDAsMSwxLDEpLCBfU0VHNygnKycsMCwxLDEsMCwwLDAsMSksIF9TRUc3KCcsJywwLDAsMCwwLDEsMCwwKSxcCisgX1NFRzcoJy0nLDAsMCwwLDAsMCwwLDEpLCBfU0VHNygnLicsMCwwLDAsMCwxLDAsMCksIF9TRUc3KCcvJywwLDEsMCwwLDEsMCwxKSwKKworI2RlZmluZSBfTUFQXzQ4XzU3X0FTQ0lJX1NFRzdfTlVNRVJJQwkJXAorIF9TRUc3KCcwJywxLDEsMSwxLDEsMSwwKSwgX1NFRzcoJzEnLDAsMSwxLDAsMCwwLDApLCBfU0VHNygnMicsMSwxLDAsMSwxLDAsMSksXAorIF9TRUc3KCczJywxLDEsMSwxLDAsMCwxKSwgX1NFRzcoJzQnLDAsMSwxLDAsMCwxLDEpLCBfU0VHNygnNScsMSwwLDEsMSwwLDEsMSksXAorIF9TRUc3KCc2JywxLDAsMSwxLDEsMSwxKSwgX1NFRzcoJzcnLDEsMSwxLDAsMCwwLDApLCBfU0VHNygnOCcsMSwxLDEsMSwxLDEsMSksXAorIF9TRUc3KCc5JywxLDEsMSwxLDAsMSwxKSwKKworI2RlZmluZSBfTUFQXzU4XzY0X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisgX1NFRzcoJzonLDAsMCwwLDEsMCwwLDEpLCBfU0VHNygnOycsMCwwLDAsMSwwLDAsMSksIF9TRUc3KCc8JywxLDAsMCwwLDAsMSwxKSxcCisgX1NFRzcoJz0nLDAsMCwwLDEsMCwwLDEpLCBfU0VHNygnPicsMSwxLDAsMCwwLDAsMSksIF9TRUc3KCc/JywxLDEsMSwwLDAsMSwwKSxcCisgX1NFRzcoJ0AnLDEsMSwwLDEsMSwxLDEpLAorCisjZGVmaW5lIF9NQVBfNjVfOTBfQVNDSUlfU0VHN19BTFBIQV9VUFBSCVwKKyBfU0VHNygnQScsMSwxLDEsMCwxLDEsMSksIF9TRUc3KCdCJywxLDEsMSwxLDEsMSwxKSwgX1NFRzcoJ0MnLDEsMCwwLDEsMSwxLDApLFwKKyBfU0VHNygnRCcsMSwxLDEsMSwxLDEsMCksIF9TRUc3KCdFJywxLDAsMCwxLDEsMSwxKSwgX1NFRzcoJ0YnLDEsMCwwLDAsMSwxLDEpLFwKKyBfU0VHNygnRycsMSwxLDEsMSwwLDEsMSksIF9TRUc3KCdIJywwLDEsMSwwLDEsMSwxKSwgX1NFRzcoJ0knLDAsMSwxLDAsMCwwLDApLFwKKyBfU0VHNygnSicsMCwxLDEsMSwwLDAsMCksIF9TRUc3KCdLJywwLDEsMSwwLDEsMSwxKSwgX1NFRzcoJ0wnLDAsMCwwLDEsMSwxLDApLFwKKyBfU0VHNygnTScsMSwxLDEsMCwxLDEsMCksIF9TRUc3KCdOJywxLDEsMSwwLDEsMSwwKSwgX1NFRzcoJ08nLDEsMSwxLDEsMSwxLDApLFwKKyBfU0VHNygnUCcsMSwxLDAsMCwxLDEsMSksIF9TRUc3KCdRJywxLDEsMSwxLDEsMSwwKSwgX1NFRzcoJ1InLDEsMSwxLDAsMSwxLDEpLFwKKyBfU0VHNygnUycsMSwwLDEsMSwwLDEsMSksIF9TRUc3KCdUJywwLDAsMCwxLDEsMSwxKSwgX1NFRzcoJ1UnLDAsMSwxLDEsMSwxLDApLFwKKyBfU0VHNygnVicsMCwxLDEsMSwxLDEsMCksIF9TRUc3KCdXJywwLDEsMSwxLDEsMSwxKSwgX1NFRzcoJ1gnLDAsMSwxLDAsMSwxLDEpLFwKKyBfU0VHNygnWScsMCwxLDEsMCwwLDEsMSksIF9TRUc3KCdaJywxLDEsMCwxLDEsMCwxKSwKKworI2RlZmluZSBfTUFQXzkxXzk2X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisgX1NFRzcoJ1snLDEsMCwwLDEsMSwxLDApLCBfU0VHNygnXFwnLDAsMCwxLDAsMCwxLDEpLF9TRUc3KCddJywxLDEsMSwxLDAsMCwwKSxcCisgX1NFRzcoJ14nLDEsMSwwLDAsMCwxLDApLCBfU0VHNygnXycsMCwwLDAsMSwwLDAsMCksIF9TRUc3KCdgJywwLDEsMCwwLDAsMCwwKSwKKworI2RlZmluZSBfTUFQXzk3XzEyMl9BU0NJSV9TRUc3X0FMUEhBX0xPV0VSCVwKKyBfU0VHNygnQScsMSwxLDEsMCwxLDEsMSksIF9TRUc3KCdiJywwLDAsMSwxLDEsMSwxKSwgX1NFRzcoJ2MnLDAsMCwwLDEsMSwwLDEpLFwKKyBfU0VHNygnZCcsMCwxLDEsMSwxLDAsMSksIF9TRUc3KCdFJywxLDAsMCwxLDEsMSwxKSwgX1NFRzcoJ0YnLDEsMCwwLDAsMSwxLDEpLFwKKyBfU0VHNygnRycsMSwxLDEsMSwwLDEsMSksIF9TRUc3KCdoJywwLDAsMSwwLDEsMSwxKSwgX1NFRzcoJ2knLDAsMCwxLDAsMCwwLDApLFwKKyBfU0VHNygnaicsMCwwLDEsMSwwLDAsMCksIF9TRUc3KCdrJywwLDAsMSwwLDEsMSwxKSwgX1NFRzcoJ0wnLDAsMCwwLDEsMSwxLDApLFwKKyBfU0VHNygnTScsMSwxLDEsMCwxLDEsMCksIF9TRUc3KCduJywwLDAsMSwwLDEsMCwxKSwgX1NFRzcoJ28nLDAsMCwxLDEsMSwwLDEpLFwKKyBfU0VHNygnUCcsMSwxLDAsMCwxLDEsMSksIF9TRUc3KCdxJywxLDEsMSwwLDAsMSwxKSwgX1NFRzcoJ3InLDAsMCwwLDAsMSwwLDEpLFwKKyBfU0VHNygnUycsMSwwLDEsMSwwLDEsMSksIF9TRUc3KCdUJywwLDAsMCwxLDEsMSwxKSwgX1NFRzcoJ3UnLDAsMCwxLDEsMSwwLDApLFwKKyBfU0VHNygndicsMCwwLDEsMSwxLDAsMCksIF9TRUc3KCdXJywwLDEsMSwxLDEsMSwxKSwgX1NFRzcoJ1gnLDAsMSwxLDAsMSwxLDEpLFwKKyBfU0VHNygneScsMCwxLDEsMSwwLDEsMSksIF9TRUc3KCdaJywxLDEsMCwxLDEsMCwxKSwKKworI2RlZmluZSBfTUFQXzEyM18xMjZfQVNDSUlfU0VHN19TWU1CT0wJCVwKKyBfU0VHNygneycsMSwwLDAsMSwxLDEsMCksIF9TRUc3KCd8JywwLDAsMCwwLDEsMSwwKSwgX1NFRzcoJ30nLDEsMSwxLDEsMCwwLDApLFwKKyBfU0VHNygnficsMSwwLDAsMCwwLDAsMCksCisKKy8qIE1hcHMgKi8KKworLyogVGhpcyBzZXQgdHJpZXMgdG8gbWFwIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSB2aXNpYmxlIGNoYXJhY3RlcmlzdGljcworICogb2YgdGhlIEFTQ0lJIHN5bWJvbCwgbG93ZXJjYXNlIGFuZCB1cHBlcmNhc2UgbGV0dGVycyBtYXkgZGlmZmVyIGluCisgKiBwcmVzZW50YXRpb24gb24gdGhlIGRpc3BsYXkuCisgKi8KKyNkZWZpbmUgTUFQX0FTQ0lJN1NFR19BTFBIQU5VTQkJCVwKKwlfTUFQXzBfMzJfQVNDSUlfU0VHN19OT05fUFJJTlRBQkxFCVwKKwlfTUFQXzMzXzQ3X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisJX01BUF80OF81N19BU0NJSV9TRUc3X05VTUVSSUMJCVwKKwlfTUFQXzU4XzY0X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisJX01BUF82NV85MF9BU0NJSV9TRUc3X0FMUEhBX1VQUFIJXAorCV9NQVBfOTFfOTZfQVNDSUlfU0VHN19TWU1CT0wJCVwKKwlfTUFQXzk3XzEyMl9BU0NJSV9TRUc3X0FMUEhBX0xPV0VSCVwKKwlfTUFQXzEyM18xMjZfQVNDSUlfU0VHN19TWU1CT0wKKworLyogVGhpcyBzZXQgdHJpZXMgdG8gbWFwIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSBzeW1ib2xpYyBjaGFyYWN0ZXJpc3RpY3MKKyAqIG9mIHRoZSBBU0NJSSBjaGFyYWN0ZXIgZm9yIG1heGltdW0gZGlzY3JpbWluYXRpb24uCisgKiBGb3Igbm93IHRoaXMgbWVhbnMgYWxsIGFscGhhIGNoYXJzIGFyZSBpbiBsb3dlciBjYXNlIHJlcHJlc2VudGF0aW9ucy4KKyAqIChUaGlzIGZvciBleGFtcGxlIGZhY2lsaXRhdGVzIHRoZSB1c2Ugb2YgaGV4IG51bWJlcnMgd2l0aCB1cHBlcmNhc2UgaW5wdXQuKQorICovCisjZGVmaW5lIE1BUF9BU0NJSTdTRUdfQUxQSEFOVU1fTEMJCQlcCisJX01BUF8wXzMyX0FTQ0lJX1NFRzdfTk9OX1BSSU5UQUJMRQlcCisJX01BUF8zM180N19BU0NJSV9TRUc3X1NZTUJPTAkJXAorCV9NQVBfNDhfNTdfQVNDSUlfU0VHN19OVU1FUklDCQlcCisJX01BUF81OF82NF9BU0NJSV9TRUc3X1NZTUJPTAkJXAorCV9NQVBfOTdfMTIyX0FTQ0lJX1NFRzdfQUxQSEFfTE9XRVIJXAorCV9NQVBfOTFfOTZfQVNDSUlfU0VHN19TWU1CT0wJCVwKKwlfTUFQXzk3XzEyMl9BU0NJSV9TRUc3X0FMUEhBX0xPV0VSCVwKKwlfTUFQXzEyM18xMjZfQVNDSUlfU0VHN19TWU1CT0wKKworI2RlZmluZSBTRUc3X0RFRkFVTFRfTUFQKF9uYW1lKQkJXAorCVNFRzdfQ09OVkVSU0lPTl9NQVAoX25hbWUsTUFQX0FTQ0lJN1NFR19BTFBIQU5VTSkKKworI2VuZGlmCS8qIE1BUF9UT183U0VHTUVOVF9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZmRmMzk2Ny4uMWZiZTE0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTI3LDE2ICsyNywxMyBAQAogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKIAotI2RlZmluZSBwYWdlX3Jlc2V0X2JhZF9jZ3JvdXAocGFnZSkJKChwYWdlKS0+cGFnZV9jZ3JvdXAgPSAwKQotCi1leHRlcm4gc3RydWN0IHBhZ2VfY2dyb3VwICpwYWdlX2dldF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQlnZnBfdCBnZnBfbWFzayk7CiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJZ2ZwX3QgZ2ZwX21hc2spOworZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGxydV9saXN0IGxydSk7CiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKLWV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfbW92ZV9saXN0cyhzdHJ1Y3QgcGFnZSAqcGFnZSwgYm9vbCBhY3RpdmUpOwogZXh0ZXJuIGludCBtZW1fY2dyb3VwX3Nocmlua191c2FnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwX21hc2spOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2lzb2xhdGVfcGFnZXModW5zaWduZWQgbG9uZyBucl90b19zY2FuLApAQCAtNDQsNyArNDEsNyBAQAogCQkJCQl1bnNpZ25lZCBsb25nICpzY2FubmVkLCBpbnQgb3JkZXIsCiAJCQkJCWludCBtb2RlLCBzdHJ1Y3Qgem9uZSAqeiwKIAkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jb250LAotCQkJCQlpbnQgYWN0aXZlKTsKKwkJCQkJaW50IGFjdGl2ZSwgaW50IGZpbGUpOwogZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9vdXRfb2ZfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIGdmcF90IGdmcF9tYXNrKTsKIGludCB0YXNrX2luX21lbV9jZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKIApAQCAtNjksMjEgKzY2LDExIEBACiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX3JlY29yZF9yZWNsYWltX3ByaW9yaXR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJCQkJaW50IHByaW9yaXR5KTsKIAotZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW1fYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSk7Ci1leHRlcm4gbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbV9pbmFjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAotCQkJCXN0cnVjdCB6b25lICp6b25lLCBpbnQgcHJpb3JpdHkpOworZXh0ZXJuIGxvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgc3RydWN0IHpvbmUgKnpvbmUsCisJCQkJCWludCBwcmlvcml0eSwgZW51bSBscnVfbGlzdCBscnUpOworCiAKICNlbHNlIC8qIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9yZXNldF9iYWRfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQotewotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlX2Nncm91cCAqcGFnZV9nZXRfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CkBAIC0xNTksMTQgKzE0Niw5IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbV9hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltX2luYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJCXN0cnVjdCB6b25lICp6b25lLCBpbnQgcHJpb3JpdHkpCitzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKKwkJCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSwKKwkJCQkJZW51bSBscnVfbGlzdCBscnUpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9kYTkwM3guaCBiL2luY2x1ZGUvbGludXgvbWZkL2RhOTAzeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZDMxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9kYTkwM3guaApAQCAtMCwwICsxLDIwMSBAQAorI2lmbmRlZiBfX0xJTlVYX1BNSUNfREE5MDNYX0gKKyNkZWZpbmUgX19MSU5VWF9QTUlDX0RBOTAzWF9ICisKKy8qIFVuaWZpZWQgc3ViIGRldmljZSBJRHMgZm9yIERBOTAzMC9EQTkwMzQgKi8KK2VudW0geworCURBOTAzMF9JRF9MRURfMSwKKwlEQTkwMzBfSURfTEVEXzIsCisJREE5MDMwX0lEX0xFRF8zLAorCURBOTAzMF9JRF9MRURfNCwKKwlEQTkwMzBfSURfTEVEX1BDLAorCURBOTAzMF9JRF9WSUJSQSwKKwlEQTkwMzBfSURfV0xFRCwKKwlEQTkwMzBfSURfQlVDSzEsCisJREE5MDMwX0lEX0JVQ0syLAorCURBOTAzMF9JRF9MRE8xLAorCURBOTAzMF9JRF9MRE8yLAorCURBOTAzMF9JRF9MRE8zLAorCURBOTAzMF9JRF9MRE80LAorCURBOTAzMF9JRF9MRE81LAorCURBOTAzMF9JRF9MRE82LAorCURBOTAzMF9JRF9MRE83LAorCURBOTAzMF9JRF9MRE84LAorCURBOTAzMF9JRF9MRE85LAorCURBOTAzMF9JRF9MRE8xMCwKKwlEQTkwMzBfSURfTERPMTEsCisJREE5MDMwX0lEX0xETzEyLAorCURBOTAzMF9JRF9MRE8xMywKKwlEQTkwMzBfSURfTERPMTQsCisJREE5MDMwX0lEX0xETzE1LAorCURBOTAzMF9JRF9MRE8xNiwKKwlEQTkwMzBfSURfTERPMTcsCisJREE5MDMwX0lEX0xETzE4LAorCURBOTAzMF9JRF9MRE8xOSwKKwlEQTkwMzBfSURfTERPX0lOVCwJLyogTERPIEludGVybmFsICovCisKKwlEQTkwMzRfSURfTEVEXzEsCisJREE5MDM0X0lEX0xFRF8yLAorCURBOTAzNF9JRF9WSUJSQSwKKwlEQTkwMzRfSURfV0xFRCwKKwlEQTkwMzRfSURfVE9VQ0gsCisKKwlEQTkwMzRfSURfQlVDSzEsCisJREE5MDM0X0lEX0JVQ0syLAorCURBOTAzNF9JRF9MRE8xLAorCURBOTAzNF9JRF9MRE8yLAorCURBOTAzNF9JRF9MRE8zLAorCURBOTAzNF9JRF9MRE80LAorCURBOTAzNF9JRF9MRE81LAorCURBOTAzNF9JRF9MRE82LAorCURBOTAzNF9JRF9MRE83LAorCURBOTAzNF9JRF9MRE84LAorCURBOTAzNF9JRF9MRE85LAorCURBOTAzNF9JRF9MRE8xMCwKKwlEQTkwMzRfSURfTERPMTEsCisJREE5MDM0X0lEX0xETzEyLAorCURBOTAzNF9JRF9MRE8xMywKKwlEQTkwMzRfSURfTERPMTQsCisJREE5MDM0X0lEX0xETzE1LAorfTsKKworLyoKKyAqIERBOTAzMC9EQTkwMzQgTEVEcyBzdWItZGV2aWNlcyB1c2VzIGdlbmVyaWMgInN0cnVjdCBsZWRfaW5mbyIKKyAqIGFzIHRoZSBwbGF0Zm9ybV9kYXRhCisgKi8KKworLyogREE5MDMwIGZsYWdzIGZvciAic3RydWN0IGxlZF9pbmZvIgorICovCisjZGVmaW5lIERBOTAzMF9MRURfUkFURV9PTgkoMCA8PCA1KQorI2RlZmluZSBEQTkwMzBfTEVEX1JBVEVfMDUyUwkoMSA8PCA1KQorI2RlZmluZSBEQTkwMzBfTEVEX0RVVFlfMV8xNgkoMCA8PCAzKQorI2RlZmluZSBEQTkwMzBfTEVEX0RVVFlfMV84CSgxIDw8IDMpCisjZGVmaW5lIERBOTAzMF9MRURfRFVUWV8xXzQJKDIgPDwgMykKKyNkZWZpbmUgREE5MDMwX0xFRF9EVVRZXzFfMgkoMyA8PCAzKQorCisjZGVmaW5lIERBOTAzMF9WSUJSQV9NT0RFXzFQM1YJKDAgPDwgMSkKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX01PREVfMlA3VgkoMSA8PCAxKQorI2RlZmluZSBEQTkwMzBfVklCUkFfRlJFUV8xSFoJKDAgPDwgMikKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX0ZSRVFfMkhaCSgxIDw8IDIpCisjZGVmaW5lIERBOTAzMF9WSUJSQV9GUkVRXzRIWgkoMiA8PCAyKQorI2RlZmluZSBEQTkwMzBfVklCUkFfRlJFUV84SFoJKDMgPDwgMikKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX0RVVFlfT04JKDAgPDwgNCkKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX0RVVFlfNzVQCSgxIDw8IDQpCisjZGVmaW5lIERBOTAzMF9WSUJSQV9EVVRZXzUwUAkoMiA8PCA0KQorI2RlZmluZSBEQTkwMzBfVklCUkFfRFVUWV8yNVAJKDMgPDwgNCkKKworLyogREE5MDM0IGZsYWdzIGZvciAic3RydWN0IGxlZF9pbmZvIiAqLworI2RlZmluZSBEQTkwMzRfTEVEX1JBTVAJCSgxIDw8IDcpCisKKy8qIERBOTAzNCB0b3VjaCBzY3JlZW4gcGxhdGZvcm0gZGF0YSAqLworc3RydWN0IGRhOTAzNF90b3VjaF9wZGF0YSB7CisJaW50CWludGVydmFsX21zOwkvKiBzYW1wbGluZyBpbnRlcnZhbCB3aGlsZSBwZW4gZG93biAqLworCWludAl4X2ludmVydGVkOworCWludAl5X2ludmVydGVkOworfTsKKworc3RydWN0IGRhOTAzeF9zdWJkZXZfaW5mbyB7CisJaW50CQlpZDsKKwljb25zdCBjaGFyCSpuYW1lOworCXZvaWQJCSpwbGF0Zm9ybV9kYXRhOworfTsKKworc3RydWN0IGRhOTAzeF9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgbnVtX3N1YmRldnM7CisJc3RydWN0IGRhOTAzeF9zdWJkZXZfaW5mbyAqc3ViZGV2czsKK307CisKKy8qIGJpdCBkZWZpbml0aW9ucyBmb3IgREE5MDMwIGV2ZW50cyAqLworI2RlZmluZSBEQTkwMzBfRVZFTlRfT05LRVkJCSgxIDw8IDApCisjZGVmaW5lCURBOTAzMF9FVkVOVF9QV1JFTgkJKDEgPDwgMSkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0VYVE9OCQkoMSA8PCAyKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfQ0hERVQJCSgxIDw8IDMpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9UQkFUCQkoMSA8PCA0KQorI2RlZmluZQlEQTkwMzBfRVZFTlRfVkJBVE1PTgkJKDEgPDwgNSkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1ZCQVRNT05fVFhPTgkoMSA8PCA2KQorI2RlZmluZQlEQTkwMzBfRVZFTlRfQ0hJT1ZFUgkJKDEgPDwgNykKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1RDVE8JCSgxIDw8IDgpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9DQ1RPCQkoMSA8PCA5KQorI2RlZmluZQlEQTkwMzBfRVZFTlRfQURDX1JFQURZCQkoMSA8PCAxMCkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1ZCVVNfNFA0CQkoMSA8PCAxMSkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1ZCVVNfNFAwCQkoMSA8PCAxMikKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1NFU1NfVkFMSUQJCSgxIDw8IDEzKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfU1JQX0RFVEVDVAkJKDEgPDwgMTQpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9XQVRDSERPRwkJKDEgPDwgMTUpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xNQkJKDEgPDwgMTYpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xNgkJKDEgPDwgMTcpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xNwkJKDEgPDwgMTgpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xOAkJKDEgPDwgMTkpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9MRE8xOQkJKDEgPDwgMjApCisjZGVmaW5lCURBOTAzMF9FVkVOVF9CVUNLMgkJKDEgPDwgMjEpCisKKy8qIGJpdCBkZWZpbml0aW9ucyBmb3IgREE5MDM0IGV2ZW50cyAqLworI2RlZmluZSBEQTkwMzRfRVZFTlRfT05LRVkJCSgxIDw8IDApCisjZGVmaW5lIERBOTAzNF9FVkVOVF9FWFRPTgkJKDEgPDwgMikKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0NIREVUCQkoMSA8PCAzKQorI2RlZmluZSBEQTkwMzRfRVZFTlRfVEJBVAkJKDEgPDwgNCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1ZCQVRNT04JCSgxIDw8IDUpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9SRVZfSU9WRVIJCSgxIDw8IDYpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9DSF9JT1ZFUgkJKDEgPDwgNykKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0NIX1RDVE8JCSgxIDw8IDgpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9DSF9DQ1RPCQkoMSA8PCA5KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfVVNCX0RFVgkJKDEgPDwgMTApCisjZGVmaW5lIERBOTAzNF9FVkVOVF9PVEdDUF9JT1ZFUgkoMSA8PCAxMSkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1ZCVVNfNFA1NQkJKDEgPDwgMTIpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9WQlVTXzNQOAkJKDEgPDwgMTMpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9TRVNTXzFQOAkJKDEgPDwgMTQpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9TUlBfUkVBRFkJCSgxIDw8IDE1KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfQURDX01BTgkJKDEgPDwgMTYpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9BRENfQVVUTzQJCSgxIDw8IDE3KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfQURDX0FVVE81CQkoMSA8PCAxOCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0FEQ19BVVRPNgkJKDEgPDwgMTkpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9QRU5fRE9XTgkJKDEgPDwgMjApCisjZGVmaW5lIERBOTAzNF9FVkVOVF9UU0lfUkVBRFkJCSgxIDw8IDIxKQorI2RlZmluZSBEQTkwMzRfRVZFTlRfVUFSVF9UWAkJKDEgPDwgMjIpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9VQVJUX1JYCQkoMSA8PCAyMykKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0hFQURTRVQJCSgxIDw8IDI1KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfSE9PS1NXSVRDSAkJKDEgPDwgMjYpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9XQVRDSERPRwkJKDEgPDwgMjcpCisKK2V4dGVybiBpbnQgZGE5MDN4X3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgaW50IGV2ZW50cyk7CitleHRlcm4gaW50IGRhOTAzeF91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgaW50IGV2ZW50cyk7CisKKy8qIFN0YXR1cyBRdWVyeSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgREE5MDMwX1NUQVRVU19PTktFWQkJKDEgPDwgMCkKKyNkZWZpbmUgREE5MDMwX1NUQVRVU19QV1JFTjEJCSgxIDw8IDEpCisjZGVmaW5lIERBOTAzMF9TVEFUVVNfRVhUT04JCSgxIDw8IDIpCisjZGVmaW5lIERBOTAzMF9TVEFUVVNfQ0hERVQJCSgxIDw8IDMpCisjZGVmaW5lIERBOTAzMF9TVEFUVVNfVEJBVAkJKDEgPDwgNCkKKyNkZWZpbmUgREE5MDMwX1NUQVRVU19WQkFUTU9OCQkoMSA8PCA1KQorI2RlZmluZSBEQTkwMzBfU1RBVFVTX1ZCQVRNT05fVFhPTgkoMSA8PCA2KQorI2RlZmluZSBEQTkwMzBfU1RBVFVTX01DTEtERVQJCSgxIDw8IDcpCisKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19PTktFWQkJKDEgPDwgMCkKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19FWFRPTgkJKDEgPDwgMikKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19DSERFVAkJKDEgPDwgMykKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19UQkFUCQkoMSA8PCA0KQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1ZCQVRNT04JCSgxIDw8IDUpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfUEVOX0RPV04JCSgxIDw8IDYpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfTUNMS0RFVAkJKDEgPDwgNykKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19VU0JfREVWCQkoMSA8PCA4KQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX0hFQURTRVQJCSgxIDw8IDkpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfSE9PS1NXSVRDSAkoMSA8PCAxMCkKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19SRU1DT04JCSgxIDw8IDExKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1ZCVVNfVkFMSURfNFA1NQkoMSA8PCAxMikKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19WQlVTX1ZBTElEXzNQOAkoMSA8PCAxMykKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19TRVNTX1ZBTElEXzFQOAkoMSA8PCAxNCkKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19TUlBfUkVBRFkJCSgxIDw8IDE1KQorCitleHRlcm4gaW50IGRhOTAzeF9xdWVyeV9zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc3RhdHVzKTsKKworCisvKiBOT1RFOiB0aGUgdHdvIGZ1bmN0aW9ucyBiZWxvdyBhcmUgbm90IGludGVuZGVkIGZvciB1c2Ugb3V0c2lkZQorICogb2YgdGhlIERBOTAzNCBzdWItZGV2aWNlIGRyaXZlcnMKKyAqLworZXh0ZXJuIGludCBkYTkwM3hfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IHZhbCk7CitleHRlcm4gaW50IGRhOTAzeF9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCAqdmFsKTsKK2V4dGVybiBpbnQgZGE5MDN4X3VwZGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgdmFsLCB1aW50OF90IG1hc2spOworZXh0ZXJuIGludCBkYTkwM3hfc2V0X2JpdHMoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IGJpdF9tYXNrKTsKK2V4dGVybiBpbnQgZGE5MDN4X2Nscl9iaXRzKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCBiaXRfbWFzayk7CisjZW5kaWYgLyogX19MSU5VWF9QTUlDX0RBOTAzWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90N2w2NnhiLmggYi9pbmNsdWRlL2xpbnV4L21mZC90N2w2NnhiLmgKaW5kZXggZTgzYzdmMi4uYjQ2Mjk4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvdDdsNjZ4Yi5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3Q3bDY2eGIuaApAQCAtMTUsOCArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CiAKIHN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgewotCWludCAoKmVuYWJsZV9jbGszMmspKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKmRpc2FibGVfY2xrMzJrKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCWludCAoKmVuYWJsZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIAlpbnQgKCpkaXNhYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90YzYzODd4Yi5oIGIvaW5jbHVkZS9saW51eC9tZmQvdGM2Mzg3eGIuaAppbmRleCBmYTA2ZTA2Li5iNDg4ODIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC90YzYzODd4Yi5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3RjNjM4N3hiLmgKQEAgLTExLDkgKzExLDYgQEAKICNkZWZpbmUgTUZEX1RDNjM4N1hCX0gKIAogc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgewotCWludCAoKmVuYWJsZV9jbGszMmspKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKmRpc2FibGVfY2xrMzJrKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwotCiAJaW50ICgqZW5hYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCWludCAoKmRpc2FibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAJaW50ICgqc3VzcGVuZCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3RjNjM5M3hiLmggYi9pbmNsdWRlL2xpbnV4L21mZC90YzYzOTN4Yi5oCmluZGV4IGZlYzdiM2YuLjYyNmU0NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3RjNjM5M3hiLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdGM2MzkzeGIuaApAQCAtMTcsMTIgKzE3LDEyIEBACiAjaWZuZGVmIE1GRF9UQzYzOTNYQl9ICiAjZGVmaW5lIE1GRF9UQzYzOTNYQl9ICiAKKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCiAvKiBBbHNvIG9uZSBzaG91bGQgcHJvdmlkZSB0aGUgQ0szUDZNSSBjbG9jayAqLwogc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgewogCXUxNglzY3JfcGxsMmNyOwkvKiBQTEwyIENvbnRyb2wgKi8KIAl1MTYJc2NyX2dwZXI7CS8qIEdQIEVuYWJsZSAqLwotCXUzMglzY3JfZ3BvX2RvZWNyOwkvKiBHUE8gRGF0YSBPRSBDb250cm9sICovCi0JdTMyCXNjcl9ncG9fZHNyOwkvKiBHUE8gRGF0YSBTZXQgKi8KIAogCWludAkoKmVuYWJsZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIAlpbnQJKCpkaXNhYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwpAQCAtMzEsMTUgKzMxLDI4IEBACiAKIAlpbnQJaXJxX2Jhc2U7CS8qIGJhc2UgZm9yIHN1YmRldmljZSBpcnFzICovCiAJaW50CWdwaW9fYmFzZTsKKwlpbnQJKCpzZXR1cCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKKwl2b2lkCSgqdGVhcmRvd24pKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAKIAlzdHJ1Y3QgdG1pb19uYW5kX2RhdGEJKm5hbmRfZGF0YTsKKwlzdHJ1Y3QgdG1pb19mYl9kYXRhCSpmYl9kYXRhOworCisJdW5zaWduZWQgcmVzdW1lX3Jlc3RvcmUgOiAxOyAvKiBtYWtlIHNwZWNpYWwgYWN0aW9ucworCQkJCQl0byBwcmVzZXJ2ZSB0aGUgc3RhdGUKKwkJCQkJb24gc3VzcGVuZC9yZXN1bWUgKi8KIH07CiAKK2V4dGVybiBpbnQgdGM2MzkzeGJfbGNkX21vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZmIsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUpOworZXh0ZXJuIGludCB0YzYzOTN4Yl9sY2Rfc2V0X3Bvd2VyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZiLCBib29sIG9uKTsKKwogLyoKICAqIFJlbGF0aXZlIHRvIGlycV9iYXNlCiAgKi8KICNkZWZpbmUJSVJRX1RDNjM5M19OQU5ECQkwCiAjZGVmaW5lCUlSUV9UQzYzOTNfTU1DCQkxCisjZGVmaW5lCUlSUV9UQzYzOTNfT0hDSQkJMgorI2RlZmluZQlJUlFfVEM2MzkzX0ZCCQk0CiAKICNkZWZpbmUJVEM2MzkzWEJfTlJfSVJRUwk4CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3RtaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3RtaW8uaAppbmRleCBlYzYxMmU2Li41MTZkOTU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC90bWlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdG1pby5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBNRkRfVE1JT19ICiAjZGVmaW5lIE1GRF9UTUlPX0gKIAorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKICNkZWZpbmUgdG1pb19pb3JlYWQ4KGFkZHIpIHJlYWRiKGFkZHIpCiAjZGVmaW5lIHRtaW9faW9yZWFkMTYoYWRkcikgcmVhZHcoYWRkcikKICNkZWZpbmUgdG1pb19pb3JlYWQxNl9yZXAociwgYiwgbCkgcmVhZHN3KHIsIGIsIGwpCkBAIC0yNSw0ICsyNywyMSBAQAogCXVuc2lnbmVkIGludAkJbnVtX3BhcnRpdGlvbnM7CiB9OwogCisjZGVmaW5lIEZCSU9fVE1JT19BQ0NfV1JJVEUJMHg3QzYzOTMwMAorI2RlZmluZSBGQklPX1RNSU9fQUNDX1NZTkMJMHg3QzYzOTMwMQorCitzdHJ1Y3QgdG1pb19mYl9kYXRhIHsKKwlpbnQJCQkoKmxjZF9zZXRfcG93ZXIpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZiX2RldiwKKwkJCQkJCQkJYm9vbCBvbik7CisJaW50CQkJKCpsY2RfbW9kZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZmJfZGV2LAorCQkJCQljb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlKTsKKwlpbnQJCQludW1fbW9kZXM7CisJc3RydWN0IGZiX3ZpZGVvbW9kZQkqbW9kZXM7CisKKwkvKiBpbiBtbTogc2l6ZSBvZiBzY3JlZW4gKi8KKwlpbnQJCQloZWlnaHQ7CisJaW50CQkJd2lkdGg7Cit9OworCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2F1ZGlvLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTdiYjIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2F1ZGlvLmgKQEAgLTAsMCArMSw1OTggQEAKKy8qCisgKiBhdWRpby5oICAtLSAgQXVkaW8gRHJpdmVyIGZvciBXb2xmc29uIFdNODM1MCBQTUlDCisgKgorICogQ29weXJpZ2h0IDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfTUZEX1dNODM1MF9BVURJT19IXworI2RlZmluZSBfX0xJTlVYX01GRF9XTTgzNTBfQVVESU9fSF8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjZGVmaW5lIFdNODM1MF9DTE9DS19DT05UUk9MXzEgICAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIFdNODM1MF9DTE9DS19DT05UUk9MXzIgICAgICAgICAgICAgICAgICAweDI5CisjZGVmaW5lIFdNODM1MF9GTExfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgICAweDJBCisjZGVmaW5lIFdNODM1MF9GTExfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgICAweDJCCisjZGVmaW5lIFdNODM1MF9GTExfQ09OVFJPTF8zICAgICAgICAgICAgICAgICAgICAweDJDCisjZGVmaW5lIFdNODM1MF9GTExfQ09OVFJPTF80ICAgICAgICAgICAgICAgICAgICAweDJECisjZGVmaW5lIFdNODM1MF9EQUNfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAweDMwCisjZGVmaW5lIFdNODM1MF9EQUNfRElHSVRBTF9WT0xVTUVfTCAgICAgICAgICAgICAweDMyCisjZGVmaW5lIFdNODM1MF9EQUNfRElHSVRBTF9WT0xVTUVfUiAgICAgICAgICAgICAweDMzCisjZGVmaW5lIFdNODM1MF9EQUNfTFJfUkFURSAgICAgICAgICAgICAgICAgICAgICAweDM1CisjZGVmaW5lIFdNODM1MF9EQUNfQ0xPQ0tfQ09OVFJPTCAgICAgICAgICAgICAgICAweDM2CisjZGVmaW5lIFdNODM1MF9EQUNfTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAweDNBCisjZGVmaW5lIFdNODM1MF9EQUNfTVVURV9WT0xVTUUgICAgICAgICAgICAgICAgICAweDNCCisjZGVmaW5lIFdNODM1MF9EQUNfU0lERSAgICAgICAgICAgICAgICAgICAgICAgICAweDNDCisjZGVmaW5lIFdNODM1MF9BRENfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIFdNODM1MF9BRENfRElHSVRBTF9WT0xVTUVfTCAgICAgICAgICAgICAweDQyCisjZGVmaW5lIFdNODM1MF9BRENfRElHSVRBTF9WT0xVTUVfUiAgICAgICAgICAgICAweDQzCisjZGVmaW5lIFdNODM1MF9BRENfRElWSURFUiAgICAgICAgICAgICAgICAgICAgICAweDQ0CisjZGVmaW5lIFdNODM1MF9BRENfTFJfUkFURSAgICAgICAgICAgICAgICAgICAgICAweDQ2CisjZGVmaW5lIFdNODM1MF9JTlBVVF9DT05UUk9MICAgICAgICAgICAgICAgICAgICAweDQ4CisjZGVmaW5lIFdNODM1MF9JTjNfSU5QVVRfQ09OVFJPTCAgICAgICAgICAgICAgICAweDQ5CisjZGVmaW5lIFdNODM1MF9NSUNfQklBU19DT05UUk9MICAgICAgICAgICAgICAgICAweDRBCisjZGVmaW5lIFdNODM1MF9PVVRQVVRfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAweDRDCisjZGVmaW5lIFdNODM1MF9KQUNLX0RFVEVDVCAgICAgICAgICAgICAgICAgICAgICAweDRECisjZGVmaW5lIFdNODM1MF9BTlRJX1BPUF9DT05UUk9MICAgICAgICAgICAgICAgICAweDRFCisjZGVmaW5lIFdNODM1MF9MRUZUX0lOUFVUX1ZPTFVNRSAgICAgICAgICAgICAgICAweDUwCisjZGVmaW5lIFdNODM1MF9SSUdIVF9JTlBVVF9WT0xVTUUgICAgICAgICAgICAgICAweDUxCisjZGVmaW5lIFdNODM1MF9MRUZUX01JWEVSX0NPTlRST0wgICAgICAgICAgICAgICAweDU4CisjZGVmaW5lIFdNODM1MF9SSUdIVF9NSVhFUl9DT05UUk9MICAgICAgICAgICAgICAweDU5CisjZGVmaW5lIFdNODM1MF9PVVQzX01JWEVSX0NPTlRST0wgICAgICAgICAgICAgICAweDVDCisjZGVmaW5lIFdNODM1MF9PVVQ0X01JWEVSX0NPTlRST0wgICAgICAgICAgICAgICAweDVECisjZGVmaW5lIFdNODM1MF9PVVRQVVRfTEVGVF9NSVhFUl9WT0xVTUUgICAgICAgICAweDYwCisjZGVmaW5lIFdNODM1MF9PVVRQVVRfUklHSFRfTUlYRVJfVk9MVU1FICAgICAgICAweDYxCisjZGVmaW5lIFdNODM1MF9JTlBVVF9NSVhFUl9WT0xVTUVfTCAgICAgICAgICAgICAweDYyCisjZGVmaW5lIFdNODM1MF9JTlBVVF9NSVhFUl9WT0xVTUVfUiAgICAgICAgICAgICAweDYzCisjZGVmaW5lIFdNODM1MF9JTlBVVF9NSVhFUl9WT0xVTUUgICAgICAgICAgICAgICAweDY0CisjZGVmaW5lIFdNODM1MF9MT1VUMV9WT0xVTUUgICAgICAgICAgICAgICAgICAgICAweDY4CisjZGVmaW5lIFdNODM1MF9ST1VUMV9WT0xVTUUgICAgICAgICAgICAgICAgICAgICAweDY5CisjZGVmaW5lIFdNODM1MF9MT1VUMl9WT0xVTUUgICAgICAgICAgICAgICAgICAgICAweDZBCisjZGVmaW5lIFdNODM1MF9ST1VUMl9WT0xVTUUgICAgICAgICAgICAgICAgICAgICAweDZCCisjZGVmaW5lIFdNODM1MF9CRUVQX1ZPTFVNRSAgICAgICAgICAgICAgICAgICAgICAweDZGCisjZGVmaW5lIFdNODM1MF9BSV9GT1JNQVRJTkcgICAgICAgICAgICAgICAgICAgICAweDcwCisjZGVmaW5lIFdNODM1MF9BRENfREFDX0NPTVAgICAgICAgICAgICAgICAgICAgICAweDcxCisjZGVmaW5lIFdNODM1MF9BSV9BRENfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAweDcyCisjZGVmaW5lIFdNODM1MF9BSV9EQUNfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAweDczCisjZGVmaW5lIFdNODM1MF9BSUZfVEVTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDc0CisjZGVmaW5lIFdNODM1MF9KQUNLX1BJTl9TVEFUVVMgICAgICAgICAgICAgICAgICAweEU3CisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIwOCAoMHgwOCkgKi8KKyNkZWZpbmUgV004MzUwX0NPREVDX0lTRUxfMV81ICAgICAgICAgICAgICAgICAgIDAJLyogeDEuNSAqLworI2RlZmluZSBXTTgzNTBfQ09ERUNfSVNFTF8xXzAgICAgICAgICAgICAgICAgICAgMQkvKiB4MS4wICovCisjZGVmaW5lIFdNODM1MF9DT0RFQ19JU0VMXzBfNzUgICAgICAgICAgICAgICAgICAyCS8qIHgwLjc1ICovCisjZGVmaW5lIFdNODM1MF9DT0RFQ19JU0VMXzBfNSAgICAgICAgICAgICAgICAgICAzCS8qIHgwLjUgKi8KKworI2RlZmluZSBXTTgzNTBfVk1JRF9PRkYgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfVk1JRF81MDBLICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfVk1JRF8xMDBLICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfVk1JRF8xMEsgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvKgorICogUjQwICgweDI4KSAtIENsb2NrIENvbnRyb2wgMQorICovCisjZGVmaW5lIFdNODM1MF9UT0NMS19SQVRFICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX01DTEtfU0VMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfTUNMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9CQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRjAKKyNkZWZpbmUgV004MzUwX09QQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNworCisvKgorICogUjQxICgweDI5KSAtIENsb2NrIENvbnRyb2wgMgorICovCisjZGVmaW5lIFdNODM1MF9MUkNfQURDX1NFTCAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX01DTEtfRElSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjQyICgweDJBKSAtIEZMTCBDb250cm9sIDEKKyAqLworI2RlZmluZSBXTTgzNTBfRkxMX0RJVEhFUl9XSURUSF9NQVNLICAgICAgICAgICAgMHgzMDAwCisjZGVmaW5lIFdNODM1MF9GTExfRElUSEVSX0hQICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0ZMTF9PVVRESVZfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDcwMAorI2RlZmluZSBXTTgzNTBfRkxMX1JTUF9SQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwMEYwCisjZGVmaW5lIFdNODM1MF9GTExfUkFURV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDcKKworLyoKKyAqIFI0MyAoMHgyQikgLSBGTEwgQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004MzUwX0ZMTF9SQVRJT19NQVNLICAgICAgICAgICAgICAgICAgIDB4RjgwMAorI2RlZmluZSBXTTgzNTBfRkxMX05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwM0ZGCisKKy8qCisgKiBSNDQgKDB4MkMpIC0gRkxMIENvbnRyb2wgMworICovCisjZGVmaW5lIFdNODM1MF9GTExfS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYKKworLyoKKyAqIFI0NSAoMHgyRCkgLSBGTEwgQ29udHJvbCA0CisgKi8KKyNkZWZpbmUgV004MzUwX0ZMTF9GUkFDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfRkxMX1NMT1dfTE9DS19SRUYgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9GTExfQ0xLX1NSQ19NQVNLICAgICAgICAgICAgICAgICAweDAwMDMKKworLyoKKyAqIFI0OCAoMHgzMCkgLSBEQUMgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9EQUNfTU9OTyAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX0FJRl9MUkNMS1JBVEUgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfREVFTVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFdNODM1MF9EQUNMX0RBVElOViAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0RBQ1JfREFUSU5WICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjUwICgweDMyKSAtIERBQyBEaWdpdGFsIFZvbHVtZSBMCisgKi8KKyNkZWZpbmUgV004MzUwX0RBQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfREFDTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGCisKKy8qCisgKiBSNTEgKDB4MzMpIC0gREFDIERpZ2l0YWwgVm9sdW1lIFIKKyAqLworI2RlZmluZSBXTTgzNTBfREFDX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9EQUNSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYKKworLyoKKyAqIFI1MyAoMHgzNSkgLSBEQUMgTFIgUmF0ZQorICovCisjZGVmaW5lIFdNODM1MF9EQUNMUkNfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0RBQ0xSQ19SQVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDdGRgorCisvKgorICogUjU0ICgweDM2KSAtIERBQyBDbG9jayBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0RBQ0NMS19QT0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfREFDX0NMS0RJVl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA3CisKKy8qCisgKiBSNTggKDB4M0EpIC0gREFDIE11dGUKKyAqLworI2RlZmluZSBXTTgzNTBfREFDX01VVEVfRU5BICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisKKy8qCisgKiBSNTkgKDB4M0IpIC0gREFDIE11dGUgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004MzUwX0RBQ19NVVRFTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfREFDX01VVEVSQVRFICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9EQUNfU0JfRklMVCAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKworLyoKKyAqIFI2MCAoMHgzQykgLSBEQUMgU2lkZQorICovCisjZGVmaW5lIFdNODM1MF9BRENfVE9fREFDTF9NQVNLICAgICAgICAgICAgICAgICAweDMwMDAKKyNkZWZpbmUgV004MzUwX0FEQ19UT19EQUNSX01BU0sgICAgICAgICAgICAgICAgIDB4MEMwMAorCisvKgorICogUjY0ICgweDQwKSAtIEFEQyBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0FEQ19IUEZfQ1VUX01BU0sgICAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBXTTgzNTBfQURDTF9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9BRENSX0RBVElOViAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFI2NiAoMHg0MikgLSBBREMgRGlnaXRhbCBWb2x1bWUgTAorICovCisjZGVmaW5lIFdNODM1MF9BRENfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0FEQ0xfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBGRgorCisvKgorICogUjY3ICgweDQzKSAtIEFEQyBEaWdpdGFsIFZvbHVtZSBSCisgKi8KKyNkZWZpbmUgV004MzUwX0FEQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfQURDUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGCisKKy8qCisgKiBSNjggKDB4NDQpIC0gQURDIERpdmlkZXIKKyAqLworI2RlZmluZSBXTTgzNTBfQURDTF9EQUNfU1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwRjAwCisjZGVmaW5lIFdNODM1MF9BRENSX0RBQ19TVk9MX01BU0sgICAgICAgICAgICAgICAweDAwRjAKKyNkZWZpbmUgV004MzUwX0FEQ0NMS19QT0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfQURDX0NMS0RJVl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA3CisKKy8qCisgKiBSNzAgKDB4NDYpIC0gQURDIExSIFJhdGUKKyAqLworI2RlZmluZSBXTTgzNTBfQURDTFJDX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9BRENMUkNfUkFURV9NQVNLICAgICAgICAgICAgICAgICAweDA3RkYKKworLyoKKyAqIFI3MiAoMHg0OCkgLSBJbnB1dCBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0lOMlJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfSU4xUk5fRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9JTjFSUF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0lOMkxfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfSU4xTE5fRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9JTjFMUF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFI3MyAoMHg0OSkgLSBJTjMgSW5wdXQgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9JTjNSX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0lOM0xfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorCisvKgorICogUjc0ICgweDRBKSAtIE1pYyBCaWFzIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfTUlDQlNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9NQ0RUSFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMUMKKyNkZWZpbmUgV004MzUwX01DRFNDVEhSX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMworCisvKgorICogUjc2ICgweDRDKSAtIE91dHB1dCBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX09VVDRfVlJPSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfT1VUM19WUk9JICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9PVVQyX1ZST0kgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX09VVDFfVlJPSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfT1VUMl9GQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9PVVQxX0ZCICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFI3NyAoMHg0RCkgLSBKYWNrIERldGVjdAorICovCisjZGVmaW5lIFdNODM1MF9KRExfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX0pEUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorCisvKgorICogUjc4ICgweDRFKSAtIEFudGkgUG9wIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfQU5USV9QT1BfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIFdNODM1MF9ESVNfT1BfTE40X01BU0sgICAgICAgICAgICAgICAgICAweDAwQzAKKyNkZWZpbmUgV004MzUwX0RJU19PUF9MTjNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBXTTgzNTBfRElTX09QX09VVDJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDBDCisjZGVmaW5lIFdNODM1MF9ESVNfT1BfT1VUMV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDMKKworLyoKKyAqIFI4MCAoMHg1MCkgLSBMZWZ0IElucHV0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODM1MF9JTkxfTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0lOTF9aQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfSU5fVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9JTkxfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwRkMKKworLyoKKyAqIFI4MSAoMHg1MSkgLSBSaWdodCBJbnB1dCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTgzNTBfSU5SX01VVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9JTlJfWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX0lOX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfSU5SX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMEZDCisKKy8qCisgKiBSODggKDB4NTgpIC0gTGVmdCBNaXhlciBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0RBQ1JfVE9fTUlYT1VUTCAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfREFDTF9UT19NSVhPVVRMICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9JTjNMX1RPX01JWE9VVEwgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0lOUl9UT19NSVhPVVRMICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfSU5MX1RPX01JWE9VVEwgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSODkgKDB4NTkpIC0gUmlnaHQgTWl4ZXIgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9EQUNSX1RPX01JWE9VVFIgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0RBQ0xfVE9fTUlYT1VUUiAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfSU4zUl9UT19NSVhPVVRSICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9JTlJfVE9fTUlYT1VUUiAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0lOTF9UT19NSVhPVVRSICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjkyICgweDVDKSAtIE9VVDMgTWl4ZXIgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9EQUNMX1RPX09VVDMgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX01JWElOTF9UT19PVVQzICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfT1VUNF9UT19PVVQzICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9NSVhPVVRMX1RPX09VVDMgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFI5MyAoMHg1RCkgLSBPVVQ0IE1peGVyIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfREFDUl9UT19PVVQ0ICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9EQUNMX1RPX09VVDQgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX09VVDRfQVRUTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfTUlYSU5SX1RPX09VVDQgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9PVVQzX1RPX09VVDQgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX01JWE9VVFJfVE9fT1VUNCAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfTUlYT1VUTF9UT19PVVQ0ICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSOTYgKDB4NjApIC0gT3V0cHV0IExlZnQgTWl4ZXIgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004MzUwX0lOM0xfTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAgIDB4MEUwMAorI2RlZmluZSBXTTgzNTBfSU4zTF9NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAgICAweDAwRTAKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTTgzNTBfSU5MX01JWE9VVExfVk9MX01BU0sgICAgICAgICAgICAgMHgwMDBFCisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgIDEKKworLyogQml0IHZhbHVlcyBmb3IgUjk2ICgweDYwKSAqLworI2RlZmluZSBXTTgzNTBfSU4zTF9NSVhPVVRMX1ZPTF9PRkYgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9JTjNMX01JWE9VVExfVk9MX00xMkRCICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0lOM0xfTUlYT1VUTF9WT0xfTTlEQiAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfSU4zTF9NSVhPVVRMX1ZPTF9NNkRCICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9JTjNMX01JWE9VVExfVk9MX00zREIgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV004MzUwX0lOM0xfTUlYT1VUTF9WT0xfMERCICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTTgzNTBfSU4zTF9NSVhPVVRMX1ZPTF8zREIgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFdNODM1MF9JTjNMX01JWE9VVExfVk9MXzZEQiAgICAgICAgICAgICAgICAgIDcKKworI2RlZmluZSBXTTgzNTBfSU5SX01JWE9VVExfVk9MX09GRiAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUTF9WT0xfTTEyREIgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRMX1ZPTF9NOURCICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfSU5SX01JWE9VVExfVk9MX002REIgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUTF9WT0xfTTNEQiAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRMX1ZPTF8wREIgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTTgzNTBfSU5SX01JWE9VVExfVk9MXzNEQiAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUTF9WT0xfNkRCICAgICAgICAgICAgICAgICAgIDcKKworI2RlZmluZSBXTTgzNTBfSU5MX01JWE9VVExfVk9MX09GRiAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUTF9WT0xfTTEyREIgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0lOTF9NSVhPVVRMX1ZPTF9NOURCICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfSU5MX01JWE9VVExfVk9MX002REIgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUTF9WT0xfTTNEQiAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV004MzUwX0lOTF9NSVhPVVRMX1ZPTF8wREIgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTTgzNTBfSU5MX01JWE9VVExfVk9MXzNEQiAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUTF9WT0xfNkRCICAgICAgICAgICAgICAgICAgIDcKKworLyoKKyAqIFI5NyAoMHg2MSkgLSBPdXRwdXQgUmlnaHQgTWl4ZXIgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004MzUwX0lOM1JfTUlYT1VUUl9WT0xfTUFTSyAgICAgICAgICAgIDB4RTAwMAorI2RlZmluZSBXTTgzNTBfSU4zUl9NSVhPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUUl9WT0xfTUFTSyAgICAgICAgICAgICAweDAwRTAKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTTgzNTBfSU5MX01JWE9VVFJfVk9MX01BU0sgICAgICAgICAgICAgMHgwMDBFCisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgIDEKKworLyogQml0IHZhbHVlcyBmb3IgUjk2ICgweDYwKSAqLworI2RlZmluZSBXTTgzNTBfSU4zUl9NSVhPVVRSX1ZPTF9PRkYgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9JTjNSX01JWE9VVFJfVk9MX00xMkRCICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0lOM1JfTUlYT1VUUl9WT0xfTTlEQiAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfSU4zUl9NSVhPVVRSX1ZPTF9NNkRCICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9JTjNSX01JWE9VVFJfVk9MX00zREIgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV004MzUwX0lOM1JfTUlYT1VUUl9WT0xfMERCICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTTgzNTBfSU4zUl9NSVhPVVRSX1ZPTF8zREIgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFdNODM1MF9JTjNSX01JWE9VVFJfVk9MXzZEQiAgICAgICAgICAgICAgICAgIDcKKworI2RlZmluZSBXTTgzNTBfSU5SX01JWE9VVFJfVk9MX09GRiAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUUl9WT0xfTTEyREIgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRSX1ZPTF9NOURCICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfSU5SX01JWE9VVFJfVk9MX002REIgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUUl9WT0xfTTNEQiAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRSX1ZPTF8wREIgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTTgzNTBfSU5SX01JWE9VVFJfVk9MXzNEQiAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUUl9WT0xfNkRCICAgICAgICAgICAgICAgICAgIDcKKworI2RlZmluZSBXTTgzNTBfSU5MX01JWE9VVFJfVk9MX09GRiAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUUl9WT0xfTTEyREIgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0lOTF9NSVhPVVRSX1ZPTF9NOURCICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfSU5MX01JWE9VVFJfVk9MX002REIgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUUl9WT0xfTTNEQiAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV004MzUwX0lOTF9NSVhPVVRSX1ZPTF8wREIgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTTgzNTBfSU5MX01JWE9VVFJfVk9MXzNEQiAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUUl9WT0xfNkRCICAgICAgICAgICAgICAgICAgIDcKKworLyoKKyAqIFI5OCAoMHg2MikgLSBJbnB1dCBNaXhlciBWb2x1bWUgTAorICovCisjZGVmaW5lIFdNODM1MF9JTjNMX01JWElOTF9WT0xfTUFTSyAgICAgICAgICAgICAweDBFMDAKKyNkZWZpbmUgV004MzUwX0lOMkxfTUlYSU5MX1ZPTF9NQVNLICAgICAgICAgICAgIDB4MDAwRQorI2RlZmluZSBXTTgzNTBfSU5MX01JWElOTF9WT0wgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSOTkgKDB4NjMpIC0gSW5wdXQgTWl4ZXIgVm9sdW1lIFIKKyAqLworI2RlZmluZSBXTTgzNTBfSU4zUl9NSVhJTlJfVk9MX01BU0sgICAgICAgICAgICAgMHhFMDAwCisjZGVmaW5lIFdNODM1MF9JTjJSX01JWElOUl9WT0xfTUFTSyAgICAgICAgICAgICAweDAwRTAKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhJTlJfVk9MICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjEwMCAoMHg2NCkgLSBJbnB1dCBNaXhlciBWb2x1bWUKKyAqLworI2RlZmluZSBXTTgzNTBfT1VUNF9NSVhJTl9EU1QgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9PVVQ0X01JWElOX1ZPTF9NQVNLICAgICAgICAgICAgICAweDAwMEUKKworLyoKKyAqIFIxMDQgKDB4NjgpIC0gTE9VVDEgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004MzUwX09VVDFMX01VVEUgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfT1VUMUxfWkMgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9PVVQxX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX09VVDFMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGQworI2RlZmluZSBXTTgzNTBfT1VUMUxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8qCisgKiBSMTA1ICgweDY5KSAtIFJPVVQxIFZvbHVtZQorICovCisjZGVmaW5lIFdNODM1MF9PVVQxUl9NVVRFICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX09VVDFSX1pDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfT1VUMV9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9PVVQxUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkMKKyNkZWZpbmUgV004MzUwX09VVDFSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMgorCisvKgorICogUjEwNiAoMHg2QSkgLSBMT1VUMiBWb2x1bWUKKyAqLworI2RlZmluZSBXTTgzNTBfT1VUMkxfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9PVVQyTF9aQyAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX09VVDJfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfT1VUMkxfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMEZDCisKKy8qCisgKiBSMTA3ICgweDZCKSAtIFJPVVQyIFZvbHVtZQorICovCisjZGVmaW5lIFdNODM1MF9PVVQyUl9NVVRFICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX09VVDJSX1pDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfT1VUMlJfSU5WICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9PVVQyUl9JTlZfTVVURSAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX09VVDJfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfT1VUMlJfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMEZDCisKKy8qCisgKiBSMTExICgweDZGKSAtIEJFRVAgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004MzUwX0lOM1JfT1VUMlJfVk9MX01BU0sgICAgICAgICAgICAgIDB4MDBFMAorCisvKgorICogUjExMiAoMHg3MCkgLSBBSSBGb3JtYXRpbmcKKyAqLworI2RlZmluZSBXTTgzNTBfQUlGX0JDTEtfSU5WICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9BSUZfVFJJICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX0FJRl9MUkNMS19JTlYgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfQUlGX1dMX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwQzAwCisjZGVmaW5lIFdNODM1MF9BSUZfRk1UX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAzMDAKKworLyoKKyAqIFIxMTMgKDB4NzEpIC0gQURDIERBQyBDT01QCisgKi8KKyNkZWZpbmUgV004MzUwX0RBQ19DT01QICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfREFDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9BRENfQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0FEQ19DT01QTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfTE9PUEJBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTE0ICgweDcyKSAtIEFJIEFEQyBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0FJRkFEQ19QRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfQUlGQURDTF9TUkMgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9BSUZBRENSX1NSQyAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0FJRkFEQ19URE1fQ0hBTiAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfQUlGQURDX1RETSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisKKy8qCisgKiBSMTE1ICgweDczKSAtIEFJIERBQyBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0JDTEtfTVNUUiAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfQUlGREFDX1BEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9EQUNMX1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0RBQ1JfU1JDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfQUlGREFDX1RETV9DSEFOICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9BSUZEQUNfVERNICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0RBQ19CT09TVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMworCisvKgorICogUjExNiAoMHg3NCkgLSBBSUYgVGVzdAorICovCisjZGVmaW5lIFdNODM1MF9DT0RFQ19CWVAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0FJRkFEQ19XUl9UU1QgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfQUlGQURDX1JEX1RTVCAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9BSUZEQUNfV1JfVFNUICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0FJRkRBQ19SRF9UU1QgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfQUlGQURDX0FTWU4gICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9BSUZEQUNfQVNZTiAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKworLyoKKyAqIFIyMzEgKDB4RTcpIC0gSmFjayBTdGF0dXMKKyAqLworI2RlZmluZSBXTTgzNTBfSkFDS19SX0xWTCAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisKKy8qCisgKiBXTTgzNTAgUGxhdGZvcm0gc2V0dXAKKyAqLworI2RlZmluZSBXTTgzNTBfU19DVVJWRV9OT05FCQkJMHgwCisjZGVmaW5lIFdNODM1MF9TX0NVUlZFX0ZBU1QJCQkweDEKKyNkZWZpbmUgV004MzUwX1NfQ1VSVkVfTUVESVVNCQkJMHgyCisjZGVmaW5lIFdNODM1MF9TX0NVUlZFX1NMT1cJCQkweDMKKworI2RlZmluZSBXTTgzNTBfRElTQ0hBUkdFX09GRgkJCTB4MAorI2RlZmluZSBXTTgzNTBfRElTQ0hBUkdFX0ZBU1QJCQkweDEKKyNkZWZpbmUgV004MzUwX0RJU0NIQVJHRV9NRURJVU0JCQkweDIKKyNkZWZpbmUgV004MzUwX0RJU0NIQVJHRV9TTE9XCQkJMHgzCisKKyNkZWZpbmUgV004MzUwX1RJRV9PRkZfNTAwUgkJCTB4MAorI2RlZmluZSBXTTgzNTBfVElFX09GRl8zMEsJCQkweDEKKworLyoKKyAqIENsb2NrIHNvdXJjZXMgJiBkaXJlY3Rpb25zCisgKi8KKyNkZWZpbmUgV004MzUwX1NZU0NMSwkJCQkwCisKKyNkZWZpbmUgV004MzUwX01DTEtfU0VMX1BMTF9NQ0xLCQkwCisjZGVmaW5lIFdNODM1MF9NQ0xLX1NFTF9QTExfREFDCQkJMQorI2RlZmluZSBXTTgzNTBfTUNMS19TRUxfUExMX0FEQwkJCTIKKyNkZWZpbmUgV004MzUwX01DTEtfU0VMX1BMTF8zMksJCQkzCisjZGVmaW5lIFdNODM1MF9NQ0xLX1NFTF9NQ0xLCQkJNQorCisjZGVmaW5lIFdNODM1MF9NQ0xLX0RJUl9PVVQJCQkwCisjZGVmaW5lIFdNODM1MF9NQ0xLX0RJUl9JTgkJCTEKKworLyogY2xvY2sgZGl2aWRlciBpZCdzICovCisjZGVmaW5lIFdNODM1MF9BRENfQ0xLRElWCQkJMAorI2RlZmluZSBXTTgzNTBfREFDX0NMS0RJVgkJCTEKKyNkZWZpbmUgV004MzUwX0JDTEtfQ0xLRElWCQkJMgorI2RlZmluZSBXTTgzNTBfT1BDTEtfQ0xLRElWCQkJMworI2RlZmluZSBXTTgzNTBfVE9fQ0xLRElWCQkJNAorI2RlZmluZSBXTTgzNTBfU1lTX0NMS0RJVgkJCTUKKyNkZWZpbmUgV004MzUwX0RBQ0xSX0NMS0RJVgkJCTYKKyNkZWZpbmUgV004MzUwX0FEQ0xSX0NMS0RJVgkJCTcKKworLyogQURDIGNsb2NrIGRpdmlkZXJzICovCisjZGVmaW5lIFdNODM1MF9BRENESVZfMQkJCQkweDAKKyNkZWZpbmUgV004MzUwX0FEQ0RJVl8xXzUJCQkweDEKKyNkZWZpbmUgV004MzUwX0FEQ0RJVl8yCQkJCTB4MgorI2RlZmluZSBXTTgzNTBfQURDRElWXzMJCQkJMHgzCisjZGVmaW5lIFdNODM1MF9BRENESVZfNAkJCQkweDQKKyNkZWZpbmUgV004MzUwX0FEQ0RJVl81XzUJCQkweDUKKyNkZWZpbmUgV004MzUwX0FEQ0RJVl82CQkJCTB4NgorCisvKiBBREMgY2xvY2sgZGl2aWRlcnMgKi8KKyNkZWZpbmUgV004MzUwX0RBQ0RJVl8xCQkJCTB4MAorI2RlZmluZSBXTTgzNTBfREFDRElWXzFfNQkJCTB4MQorI2RlZmluZSBXTTgzNTBfREFDRElWXzIJCQkJMHgyCisjZGVmaW5lIFdNODM1MF9EQUNESVZfMwkJCQkweDMKKyNkZWZpbmUgV004MzUwX0RBQ0RJVl80CQkJCTB4NAorI2RlZmluZSBXTTgzNTBfREFDRElWXzVfNQkJCTB4NQorI2RlZmluZSBXTTgzNTBfREFDRElWXzYJCQkJMHg2CisKKy8qIEJDTEsgY2xvY2sgZGl2aWRlcnMgKi8KKyNkZWZpbmUgV004MzUwX0JDTEtfRElWXzEJCQkoMHgwIDw8IDQpCisjZGVmaW5lIFdNODM1MF9CQ0xLX0RJVl8xXzUJCQkoMHgxIDw8IDQpCisjZGVmaW5lIFdNODM1MF9CQ0xLX0RJVl8yCQkJKDB4MiA8PCA0KQorI2RlZmluZSBXTTgzNTBfQkNMS19ESVZfMwkJCSgweDMgPDwgNCkKKyNkZWZpbmUgV004MzUwX0JDTEtfRElWXzQJCQkoMHg0IDw8IDQpCisjZGVmaW5lIFdNODM1MF9CQ0xLX0RJVl81XzUJCQkoMHg1IDw8IDQpCisjZGVmaW5lIFdNODM1MF9CQ0xLX0RJVl82CQkJKDB4NiA8PCA0KQorI2RlZmluZSBXTTgzNTBfQkNMS19ESVZfOAkJCSgweDcgPDwgNCkKKyNkZWZpbmUgV004MzUwX0JDTEtfRElWXzExCQkJKDB4OCA8PCA0KQorI2RlZmluZSBXTTgzNTBfQkNMS19ESVZfMTIJCQkoMHg5IDw8IDQpCisjZGVmaW5lIFdNODM1MF9CQ0xLX0RJVl8xNgkJCSgweGEgPDwgNCkKKyNkZWZpbmUgV004MzUwX0JDTEtfRElWXzIyCQkJKDB4YiA8PCA0KQorI2RlZmluZSBXTTgzNTBfQkNMS19ESVZfMjQJCQkoMHhjIDw8IDQpCisjZGVmaW5lIFdNODM1MF9CQ0xLX0RJVl8zMgkJCSgweGQgPDwgNCkKKyNkZWZpbmUgV004MzUwX0JDTEtfRElWXzQ0CQkJKDB4ZSA8PCA0KQorI2RlZmluZSBXTTgzNTBfQkNMS19ESVZfNDgJCQkoMHhmIDw8IDQpCisKKy8qIFN5cyAoTUNMSykgY2xvY2sgZGl2aWRlcnMgKi8KKyNkZWZpbmUgV004MzUwX01DTEtfRElWXzEJCQkoMHgwIDw8IDgpCisjZGVmaW5lIFdNODM1MF9NQ0xLX0RJVl8yCQkJKDB4MSA8PCA4KQorCisvKiBPUCBjbG9jayBkaXZpZGVycyAqLworI2RlZmluZSBXTTgzNTBfT1BDTEtfRElWXzEJCQkweDAKKyNkZWZpbmUgV004MzUwX09QQ0xLX0RJVl8yCQkJMHgxCisjZGVmaW5lIFdNODM1MF9PUENMS19ESVZfMwkJCTB4MgorI2RlZmluZSBXTTgzNTBfT1BDTEtfRElWXzQJCQkweDMKKyNkZWZpbmUgV004MzUwX09QQ0xLX0RJVl81XzUJCQkweDQKKyNkZWZpbmUgV004MzUwX09QQ0xLX0RJVl82CQkJMHg1CisKKy8qIERBSSBJRCAqLworI2RlZmluZSBXTTgzNTBfSElGSV9EQUkJCQkJMAorCisvKgorICogQXVkaW8gaW50ZXJydXB0cy4KKyAqLworI2RlZmluZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTAkJMzkKKyNkZWZpbmUgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1IJCTQwCisjZGVmaW5lIFdNODM1MF9JUlFfQ09ERUNfTUlDU0NECQkJNDEKKyNkZWZpbmUgV004MzUwX0lSUV9DT0RFQ19NSUNECQkJNDIKKworc3RydWN0IHdtODM1MF9jb2RlYyB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2NvbXBhcmF0b3IuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9jb21wYXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUzNzg4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9jb21wYXJhdG9yLmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBjb21wYXJhdG9yLmggIC0tICBDb21wYXJhdG9yIEF1eCBBREMgZm9yIFdvbGZzb24gV004MzUwIFBNSUMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9XTTgzNTBfQ09NUEFSQVRPUl9IXworI2RlZmluZSBfX0xJTlVYX01GRF9XTTgzNTBfQ09NUEFSQVRPUl9IXworCisvKgorICogUmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBXTTgzNTBfRElHSVRJU0VSX0NPTlRST0xfMSAgICAgICAgICAgICAgMHg5MAorI2RlZmluZSBXTTgzNTBfRElHSVRJU0VSX0NPTlRST0xfMiAgICAgICAgICAgICAgMHg5MQorI2RlZmluZSBXTTgzNTBfQVVYMV9SRUFEQkFDSyAgICAgICAgICAgICAgICAgICAgMHg5OAorI2RlZmluZSBXTTgzNTBfQVVYMl9SRUFEQkFDSyAgICAgICAgICAgICAgICAgICAgMHg5OQorI2RlZmluZSBXTTgzNTBfQVVYM19SRUFEQkFDSyAgICAgICAgICAgICAgICAgICAgMHg5QQorI2RlZmluZSBXTTgzNTBfQVVYNF9SRUFEQkFDSyAgICAgICAgICAgICAgICAgICAgMHg5QgorI2RlZmluZSBXTTgzNTBfQ0hJUF9URU1QX1JFQURCQUNLICAgICAgICAgICAgICAgMHg5RgorI2RlZmluZSBXTTgzNTBfR0VORVJJQ19DT01QQVJBVE9SX0NPTlRST0wgICAgICAgMHhBMworI2RlZmluZSBXTTgzNTBfR0VORVJJQ19DT01QQVJBVE9SXzEgICAgICAgICAgICAgMHhBNAorI2RlZmluZSBXTTgzNTBfR0VORVJJQ19DT01QQVJBVE9SXzIgICAgICAgICAgICAgMHhBNQorI2RlZmluZSBXTTgzNTBfR0VORVJJQ19DT01QQVJBVE9SXzMgICAgICAgICAgICAgMHhBNgorI2RlZmluZSBXTTgzNTBfR0VORVJJQ19DT01QQVJBVE9SXzQgICAgICAgICAgICAgMHhBNworCisvKgorICogUjE0NCAoMHg5MCkgLSBEaWdpdGlzZXIgQ29udHJvbCAoMSkKKyAqLworI2RlZmluZSBXTTgzNTBfQVVYQURDX0NUQyAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfUE9MTCAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19ISUJfTU9ERSAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfQVVYQURDX1NFTDggICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfU0VMNyAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19TRUw2ICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfQVVYQURDX1NFTDUgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfU0VMNCAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19TRUwzICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfQVVYQURDX1NFTDIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9BVVhBRENfU0VMMSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIxNDUgKDB4OTEpIC0gRGlnaXRpc2VyIENvbnRyb2wgKDIpCisgKi8KKyNkZWZpbmUgV004MzUwX0FVWEFEQ19NQVNLTU9ERV9NQVNLICAgICAgICAgICAgIDB4MzAwMAorI2RlZmluZSBXTTgzNTBfQVVYQURDX0NSQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwNzAwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfQ0FMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0FVWF9SQk1PREUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfQVVYQURDX1dBSVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTUyICgweDk4KSAtIEFVWDEgUmVhZGJhY2sKKyAqLworI2RlZmluZSBXTTgzNTBfQVVYQURDX1NDQUxFMV9NQVNLICAgICAgICAgICAgICAgMHg2MDAwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfUkVGMSAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19EQVRBMV9NQVNLICAgICAgICAgICAgICAgIDB4MEZGRgorCisvKgorICogUjE1MyAoMHg5OSkgLSBBVVgyIFJlYWRiYWNrCisgKi8KKyNkZWZpbmUgV004MzUwX0FVWEFEQ19TQ0FMRTJfTUFTSyAgICAgICAgICAgICAgIDB4NjAwMAorI2RlZmluZSBXTTgzNTBfQVVYQURDX1JFRjIgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfREFUQTJfTUFTSyAgICAgICAgICAgICAgICAweDBGRkYKKworLyoKKyAqIFIxNTQgKDB4OUEpIC0gQVVYMyBSZWFkYmFjaworICovCisjZGVmaW5lIFdNODM1MF9BVVhBRENfU0NBTEUzX01BU0sgICAgICAgICAgICAgICAweDYwMDAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19SRUYzICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfQVVYQURDX0RBVEEzX01BU0sgICAgICAgICAgICAgICAgMHgwRkZGCisKKy8qCisgKiBSMTU1ICgweDlCKSAtIEFVWDQgUmVhZGJhY2sKKyAqLworI2RlZmluZSBXTTgzNTBfQVVYQURDX1NDQUxFNF9NQVNLICAgICAgICAgICAgICAgMHg2MDAwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfUkVGNCAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19EQVRBNF9NQVNLICAgICAgICAgICAgICAgIDB4MEZGRgorCisvKgorICogUjE1NiAoMHg5QykgLSBVU0IgVm9sdGFnZSBSZWFkYmFjaworICovCisjZGVmaW5lIFdNODM1MF9BVVhBRENfREFUQV9VU0JfTUFTSyAgICAgICAgICAgICAweDBGRkYKKworLyoKKyAqIFIxNTcgKDB4OUQpIC0gTElORSBWb2x0YWdlIFJlYWRiYWNrCisgKi8KKyNkZWZpbmUgV004MzUwX0FVWEFEQ19EQVRBX0xJTkVfTUFTSyAgICAgICAgICAgIDB4MEZGRgorCisvKgorICogUjE1OCAoMHg5RSkgLSBCQVRUIFZvbHRhZ2UgUmVhZGJhY2sKKyAqLworI2RlZmluZSBXTTgzNTBfQVVYQURDX0RBVEFfQkFUVF9NQVNLICAgICAgICAgICAgMHgwRkZGCisKKy8qCisgKiBSMTU5ICgweDlGKSAtIENoaXAgVGVtcCBSZWFkYmFjaworICovCisjZGVmaW5lIFdNODM1MF9BVVhBRENfREFUQV9DSElQVEVNUF9NQVNLICAgICAgICAweDBGRkYKKworLyoKKyAqIFIxNjMgKDB4QTMpIC0gR2VuZXJpYyBDb21wYXJhdG9yIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfRENNUDRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9EQ01QM19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0RDTVAyX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfRENNUDFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTY0ICgweEE0KSAtIEdlbmVyaWMgY29tcGFyYXRvciAxCisgKi8KKyNkZWZpbmUgV004MzUwX0RDTVAxX1NSQ1NFTF9NQVNLICAgICAgICAgICAgICAgIDB4RTAwMAorI2RlZmluZSBXTTgzNTBfRENNUDFfR1QgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9EQ01QMV9USFJfTUFTSyAgICAgICAgICAgICAgICAgICAweDBGRkYKKworLyoKKyAqIFIxNjUgKDB4QTUpIC0gR2VuZXJpYyBjb21wYXJhdG9yIDIKKyAqLworI2RlZmluZSBXTTgzNTBfRENNUDJfU1JDU0VMX01BU0sgICAgICAgICAgICAgICAgMHhFMDAwCisjZGVmaW5lIFdNODM1MF9EQ01QMl9HVCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0RDTVAyX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MEZGRgorCisvKgorICogUjE2NiAoMHhBNikgLSBHZW5lcmljIGNvbXBhcmF0b3IgMworICovCisjZGVmaW5lIFdNODM1MF9EQ01QM19TUkNTRUxfTUFTSyAgICAgICAgICAgICAgICAweEUwMDAKKyNkZWZpbmUgV004MzUwX0RDTVAzX0dUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfRENNUDNfVEhSX01BU0sgICAgICAgICAgICAgICAgICAgMHgwRkZGCisKKy8qCisgKiBSMTY3ICgweEE3KSAtIEdlbmVyaWMgY29tcGFyYXRvciA0CisgKi8KKyNkZWZpbmUgV004MzUwX0RDTVA0X1NSQ1NFTF9NQVNLICAgICAgICAgICAgICAgIDB4RTAwMAorI2RlZmluZSBXTTgzNTBfRENNUDRfR1QgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9EQ01QNF9USFJfTUFTSyAgICAgICAgICAgICAgICAgICAweDBGRkYKKworLyoKKyAqIEludGVycnVwdHMuCisgKi8KKyNkZWZpbmUgV004MzUwX0lSUV9BVVhBRENfREFUQVJEWQkJMTYKKyNkZWZpbmUgV004MzUwX0lSUV9BVVhBRENfRENPTVA0CQkxNworI2RlZmluZSBXTTgzNTBfSVJRX0FVWEFEQ19EQ09NUDMJCTE4CisjZGVmaW5lIFdNODM1MF9JUlFfQVVYQURDX0RDT01QMgkJMTkKKyNkZWZpbmUgV004MzUwX0lSUV9BVVhBRENfRENPTVAxCQkyMAorI2RlZmluZSBXTTgzNTBfSVJRX1NZU19IWVNUX0NPTVBfRkFJTAkJMjEKKyNkZWZpbmUgV004MzUwX0lSUV9TWVNfQ0hJUF9HVDExNQkJMjIKKyNkZWZpbmUgV004MzUwX0lSUV9TWVNfQ0hJUF9HVDE0MAkJMjMKKworLyoKKyAqIFVTQi8yLCBMSU5FICYgQkFUVCA9ICgoVlJUQyAqIDIpIC8gNDA5NSkpICogMTBlNiB1VgorICogV2hlcmUgVlJUQyA9IDIuNyBWCisgKi8KKyNkZWZpbmUgV004MzUwX0FVWF9DT0VGRgkJCTEzMTkKKworI2RlZmluZSBXTTgzNTBfQVVYQURDX0FVWDEJCQkwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfQVVYMgkJCTEKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19BVVgzCQkJMgorI2RlZmluZSBXTTgzNTBfQVVYQURDX0FVWDQJCQkzCisjZGVmaW5lIFdNODM1MF9BVVhBRENfVVNCCQkJNAorI2RlZmluZSBXTTgzNTBfQVVYQURDX0xJTkUJCQk1CisjZGVmaW5lIFdNODM1MF9BVVhBRENfQkFUVAkJCTYKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19URU1QCQkJNworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYmY5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvY29yZS5oCkBAIC0wLDAgKzEsNjMxIEBACisvKgorICogY29yZS5oICAtLSAgQ29yZSBEcml2ZXIgZm9yIFdvbGZzb24gV004MzUwIFBNSUMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NRkRfV004MzUwX0NPUkVfSF8KKyNkZWZpbmUgX19MSU5VWF9NRkRfV004MzUwX0NPUkVfSF8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2F1ZGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9wbWljLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3N1cHBseS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvd2R0Lmg+CisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgV004MzUwX1JFU0VUX0lEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgV004MzUwX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgV004MzUwX1NZU1RFTV9DT05UUk9MXzEgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgV004MzUwX1NZU1RFTV9DT05UUk9MXzIgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgV004MzUwX1NZU1RFTV9ISUJFUk5BVEUgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgV004MzUwX0lOVEVSRkFDRV9DT05UUk9MICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgV004MzUwX1BPV0VSX01HTVRfMSAgICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgV004MzUwX1BPV0VSX01HTVRfMiAgICAgICAgICAgICAgICAgICAgIDB4MDkKKyNkZWZpbmUgV004MzUwX1BPV0VSX01HTVRfMyAgICAgICAgICAgICAgICAgICAgIDB4MEEKKyNkZWZpbmUgV004MzUwX1BPV0VSX01HTVRfNCAgICAgICAgICAgICAgICAgICAgIDB4MEIKKyNkZWZpbmUgV004MzUwX1BPV0VSX01HTVRfNSAgICAgICAgICAgICAgICAgICAgIDB4MEMKKyNkZWZpbmUgV004MzUwX1BPV0VSX01HTVRfNiAgICAgICAgICAgICAgICAgICAgIDB4MEQKKyNkZWZpbmUgV004MzUwX1BPV0VSX01HTVRfNyAgICAgICAgICAgICAgICAgICAgIDB4MEUKKworI2RlZmluZSBXTTgzNTBfU1lTVEVNX0lOVEVSUlVQVFMgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBXTTgzNTBfSU5UX1NUQVRVU18xICAgICAgICAgICAgICAgICAgICAgMHgxOQorI2RlZmluZSBXTTgzNTBfSU5UX1NUQVRVU18yICAgICAgICAgICAgICAgICAgICAgMHgxQQorI2RlZmluZSBXTTgzNTBfUE9XRVJfVVBfSU5UX1NUQVRVUyAgICAgICAgICAgICAgMHgxQgorI2RlZmluZSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTICAgICAgICAgMHgxQworI2RlZmluZSBXTTgzNTBfT1ZFUl9DVVJSRU5UX0lOVF9TVEFUVVMgICAgICAgICAgMHgxRAorI2RlZmluZSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTICAgICAgICAgICAgICAgICAgMHgxRQorI2RlZmluZSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTICAgICAgICAgICAgMHgxRgorI2RlZmluZSBXTTgzNTBfU1lTVEVNX0lOVEVSUlVQVFNfTUFTSyAgICAgICAgICAgMHgyMAorI2RlZmluZSBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0sgICAgICAgICAgICAgICAgMHgyMQorI2RlZmluZSBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0sgICAgICAgICAgICAgICAgMHgyMgorI2RlZmluZSBXTTgzNTBfUE9XRVJfVVBfSU5UX1NUQVRVU19NQVNLICAgICAgICAgMHgyMworI2RlZmluZSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0sgICAgMHgyNAorI2RlZmluZSBXTTgzNTBfT1ZFUl9DVVJSRU5UX0lOVF9TVEFUVVNfTUFTSyAgICAgMHgyNQorI2RlZmluZSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0sgICAgICAgICAgICAgMHgyNgorI2RlZmluZSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0sgICAgICAgMHgyNworCisjZGVmaW5lIFdNODM1MF9NQVhfUkVHSVNURVIgICAgICAgICAgICAgICAgICAgICAweEZGCisKKy8qCisgKiBGaWVsZCBEZWZpbml0aW9ucy4KKyAqLworCisvKgorICogUjAgKDB4MDApIC0gUmVzZXQvSUQKKyAqLworI2RlZmluZSBXTTgzNTBfU1dfUkVTRVRfQ0hJUF9JRF9NQVNLICAgICAgICAgICAgMHhGRkZGCisKKy8qCisgKiBSMSAoMHgwMSkgLSBJRAorICovCisjZGVmaW5lIFdNODM1MF9DSElQX1JFVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDcwMDAKKyNkZWZpbmUgV004MzUwX0NPTkZfU1RTX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MEMwMAorI2RlZmluZSBXTTgzNTBfQ1VTVF9JRF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMEZGCisKKy8qCisgKiBSMyAoMHgwMykgLSBTeXN0ZW0gQ29udHJvbCAxCisgKi8KKyNkZWZpbmUgV004MzUwX0NISVBfT04gICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfUE9XRVJDWUNMRSAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9WQ0NfRkFVTFRfT1YgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX1JFR19SU1RCX1RJTUVfTUFTSyAgICAgICAgICAgICAgIDB4MEMwMAorI2RlZmluZSBXTTgzNTBfQkdfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9NRU1fVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0NISVBfU0VUX1VQICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfT05fREVCX1QgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9PTl9QT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0lSUV9QT0wgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjQgKDB4MDQpIC0gU3lzdGVtIENvbnRyb2wgMgorICovCisjZGVmaW5lIFdNODM1MF9VU0JfU1VTUEVORF84TUEgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX1VTQl9TVVNQRU5EICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfVVNCX01TVFIgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9VU0JfTVNUUl9TUkMgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX1VTQl81MDBNQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfVVNCX05PTElNICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisKKy8qCisgKiBSNSAoMHgwNSkgLSBTeXN0ZW0gSGliZXJuYXRlCisgKi8KKyNkZWZpbmUgV004MzUwX0hJQkVSTkFURSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfV0RPR19ISUJfTU9ERSAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9SRUdfSElCX1NUQVJUVVBfU0VRICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX1JFR19SRVNFVF9ISUJfTU9ERSAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfUlNUX0hJQl9NT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9JUlFfSElCX01PREUgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX01FTVJTVF9ISUJfTU9ERSAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfUENDT01QX0hJQl9NT0RFICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9URU1QTU9OX0hJQl9NT0RFICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFI2ICgweDA2KSAtIEludGVyZmFjZSBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX1VTRV9ERVZfUElOUyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfVVNFX0RFVl9QSU5TX01BU0sgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9VU0VfREVWX1BJTlNfU0hJRlQgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgV004MzUwX0RFVl9BRERSX01BU0sgICAgICAgICAgICAgICAgICAgIDB4NjAwMAorI2RlZmluZSBXTTgzNTBfREVWX0FERFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFdNODM1MF9DT05GSUdfRE9ORSAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0NPTkZJR19ET05FX01BU0sgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfQ09ORklHX0RPTkVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFdNODM1MF9SRUNPTkZJR19BVF9PTiAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX1JFQ09ORklHX0FUX09OX01BU0sgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfUkVDT05GSUdfQVRfT05fU0hJRlQgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFdNODM1MF9BVVRPSU5DICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0FVVE9JTkNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfQVVUT0lOQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFdNODM1MF9BUkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0FSQV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfQVJBX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFdNODM1MF9TUElfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX1NQSV9DRkdfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfU1BJX0NGR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9TUElfNFdJUkUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX1NQSV80V0lSRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfU1BJXzRXSVJFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9TUElfM1dJUkUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX1NQSV8zV0lSRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfU1BJXzNXSVJFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIwNiAoMHgwNikgKi8KKyNkZWZpbmUgV004MzUwX1VTRV9ERVZfUElOU19QUklNQVJZICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfVVNFX0RFVl9QSU5TX0RFViAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX0RFVl9BRERSXzM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfREVWX0FERFJfMzYgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9ERVZfQUREUl8zQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgV004MzUwX0RFVl9BRERSXzNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIFdNODM1MF9DT05GSUdfRE9ORV9PRkYgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0NPTkZJR19ET05FX0RPTkUgICAgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFdNODM1MF9SRUNPTkZJR19BVF9PTl9PRkYgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX1JFQ09ORklHX0FUX09OX09OICAgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFdNODM1MF9BVVRPSU5DX09GRiAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0FVVE9JTkNfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFdNODM1MF9BUkFfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0FSQV9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFdNODM1MF9TUElfQ0ZHX0NNT1MgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX1NQSV9DRkdfT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFdNODM1MF9TUElfNFdJUkVfM1dJUkUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX1NQSV80V0lSRV80V0lSRSAgICAgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFdNODM1MF9TUElfM1dJUkVfSTJDICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX1NQSV8zV0lSRV9TUEkgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKgorICogUjggKDB4MDgpIC0gUG93ZXIgbWdtdCAoMSkKKyAqLworI2RlZmluZSBXTTgzNTBfQ09ERUNfSVNFTF9NQVNLICAgICAgICAgICAgICAgICAgMHhDMDAwCisjZGVmaW5lIFdNODM1MF9WQlVGRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX09VVFBVVF9EUkFJTl9FTiAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfTUlDX0RFVF9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9CSUFTRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX01JQ0JFTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfVk1JREVOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9WTUlEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMKKyNkZWZpbmUgV004MzUwX1ZNSURfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogUjkgKDB4MDkpIC0gUG93ZXIgbWdtdCAoMikKKyAqLworI2RlZmluZSBXTTgzNTBfSU4zUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9JTjNMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0lOUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfSU5MX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9NSVhJTlJfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX01JWElOTF9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfT1VUNF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9PVVQzX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX01JWE9VVFJfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfTUlYT1VUTF9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTAgKDB4MEEpIC0gUG93ZXIgbWdtdCAoMykKKyAqLworI2RlZmluZSBXTTgzNTBfSU4zUl9UT19PVVQyUiAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9PVVQyUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX09VVDJMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfT1VUMVJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9PVVQxTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIxMSAoMHgwQikgLSBQb3dlciBtZ210ICg0KQorICovCisjZGVmaW5lIFdNODM1MF9TWVNDTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0FEQ19IUEZfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfRkxMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9GTExfT1NDX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX1RPQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfREFDUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9EQUNMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0FEQ1JfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfQURDTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisKKy8qCisgKiBSMTIgKDB4MEMpIC0gUG93ZXIgbWdtdCAoNSkKKyAqLworI2RlZmluZSBXTTgzNTBfQ09ERUNfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9SVENfVElDS19FTkEgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX09TQzMyS19FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfQ0hHX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9BQ0NfREVUX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfRENNUDRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9EQ01QM19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0RDTVAyX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfRENNUDFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTMgKDB4MEQpIC0gUG93ZXIgbWdtdCAoNikKKyAqLworI2RlZmluZSBXTTgzNTBfTFNfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9MRE80X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0xETzNfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfTERPMl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9MRE8xX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0RDNl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfREM1X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9EQzRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0RDM19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfREMyX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9EQzFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIxNCAoMHgwRSkgLSBQb3dlciBtZ210ICg3KQorICovCisjZGVmaW5lIFdNODM1MF9DUzJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0NTMV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjI0ICgweDE4KSAtIFN5c3RlbSBJbnRlcnJ1cHRzCisgKi8KKyNkZWZpbmUgV004MzUwX09DX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfVVZfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9QVVRPX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0NTX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfRVhUX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9DT0RFQ19JTlQgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX0dQX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfQVVYQURDX0lOVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9SVENfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX1NZU19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfQ0hHX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9VU0JfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX1dLVVBfSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjI1ICgweDE5KSAtIEludGVycnVwdCBTdGF0dXMgMQorICovCisjZGVmaW5lIFdNODM1MF9DSEdfQkFUX0hPVF9FSU5UICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX0NIR19CQVRfQ09MRF9FSU5UICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfQ0hHX0JBVF9GQUlMX0VJTlQgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9DSEdfVE9fRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0NIR19FTkRfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfQ0hHX1NUQVJUX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9DSEdfRkFTVF9SRFlfRUlOVCAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX1JUQ19QRVJfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfUlRDX1NFQ19FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9SVENfQUxNX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0NIR19WQkFUVF9MVF8zUDlfRUlOVCAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfQ0hHX1ZCQVRUX0xUXzNQMV9FSU5UICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9DSEdfVkJBVFRfTFRfMlA4NV9FSU5UICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIyNiAoMHgxQSkgLSBJbnRlcnJ1cHQgU3RhdHVzIDIKKyAqLworI2RlZmluZSBXTTgzNTBfQ1MxX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9DUzJfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX1VTQl9MSU1JVF9FSU5UICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfQVVYQURDX0RBVEFSRFlfRUlOVCAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfRENPTVA0X0VJTlQgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19EQ09NUDNfRUlOVCAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfQVVYQURDX0RDT01QMl9FSU5UICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfRENPTVAxX0VJTlQgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX1NZU19IWVNUX0NPTVBfRkFJTF9FSU5UICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfU1lTX0NISVBfR1QxMTVfRUlOVCAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9TWVNfQ0hJUF9HVDE0MF9FSU5UICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX1NZU19XRE9HX1RPX0VJTlQgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjI3ICgweDFCKSAtIFBvd2VyIFVwIEludGVycnVwdCBTdGF0dXMKKyAqLworI2RlZmluZSBXTTgzNTBfUFVUT19MRE80X0VJTlQgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9QVVRPX0xETzNfRUlOVCAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX1BVVE9fTERPMl9FSU5UICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfUFVUT19MRE8xX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9QVVRPX0RDNl9FSU5UICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX1BVVE9fREM1X0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfUFVUT19EQzRfRUlOVCAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9QVVRPX0RDM19FSU5UICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX1BVVE9fREMyX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfUFVUT19EQzFfRUlOVCAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMjggKDB4MUMpIC0gVW5kZXIgVm9sdGFnZSBJbnRlcnJ1cHQgc3RhdHVzCisgKi8KKyNkZWZpbmUgV004MzUwX1VWX0xETzRfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfVVZfTERPM19FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9VVl9MRE8yX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX1VWX0xETzFfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfVVZfREM2X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9VVl9EQzVfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX1VWX0RDNF9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfVVZfREMzX0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9VVl9EQzJfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX1VWX0RDMV9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjI5ICgweDFEKSAtIE92ZXIgQ3VycmVudCBJbnRlcnJ1cHQgc3RhdHVzCisgKi8KKyNkZWZpbmUgV004MzUwX09DX0xTX0VJTlQgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorCisvKgorICogUjMwICgweDFFKSAtIEdQSU8gSW50ZXJydXB0IFN0YXR1cworICovCisjZGVmaW5lIFdNODM1MF9HUDEyX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0dQMTFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfR1AxMF9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9HUDlfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0dQOF9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfR1A3X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9HUDZfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0dQNV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfR1A0X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9HUDNfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0dQMl9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfR1AxX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9HUDBfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIzMSAoMHgxRikgLSBDb21wYXJhdG9yIEludGVycnVwdCBTdGF0dXMKKyAqLworI2RlZmluZSBXTTgzNTBfRVhUX1VTQl9GQl9FSU5UICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9FWFRfV0FMTF9GQl9FSU5UICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0VYVF9CQVRfRkJfRUlOVCAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfQ09ERUNfSkNLX0RFVF9MX0VJTlQgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9DT0RFQ19KQ0tfREVUX1JfRUlOVCAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0NPREVDX01JQ1NDRF9FSU5UICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfQ09ERUNfTUlDRF9FSU5UICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9XS1VQX09GRl9TVEFURV9FSU5UICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX1dLVVBfSElCX1NUQVRFX0VJTlQgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfV0tVUF9DT05WX0ZBVUxUX0VJTlQgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9XS1VQX1dET0dfUlNUX0VJTlQgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX1dLVVBfR1BfUFdSX09OX0VJTlQgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfV0tVUF9PTktFWV9FSU5UICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9XS1VQX0dQX1dBS0VVUF9FSU5UICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIzMiAoMHgyMCkgLSBTeXN0ZW0gSW50ZXJydXB0cyBNYXNrCisgKi8KKyNkZWZpbmUgV004MzUwX0lNX09DX0lOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfSU1fVVZfSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9JTV9QVVRPX0lOVCAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0lNX1NQQVJFX0lOVCAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfSU1fQ1NfSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9JTV9FWFRfSU5UICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0lNX0NPREVDX0lOVCAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfSU1fR1BfSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9JTV9BVVhBRENfSU5UICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0lNX1JUQ19JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfSU1fU1lTX0lOVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9JTV9DSEdfSU5UICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0lNX1VTQl9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfSU1fV0tVUF9JTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMzMgKDB4MjEpIC0gSW50ZXJydXB0IFN0YXR1cyAxIE1hc2sKKyAqLworI2RlZmluZSBXTTgzNTBfSU1fQ0hHX0JBVF9IT1RfRUlOVCAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9JTV9DSEdfQkFUX0NPTERfRUlOVCAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0lNX0NIR19CQVRfRkFJTF9FSU5UICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfSU1fQ0hHX1RPX0VJTlQgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9JTV9DSEdfRU5EX0VJTlQgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0lNX0NIR19TVEFSVF9FSU5UICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfSU1fQ0hHX0ZBU1RfUkRZX0VJTlQgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9JTV9SVENfUEVSX0VJTlQgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX0lNX1JUQ19TRUNfRUlOVCAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfSU1fUlRDX0FMTV9FSU5UICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9JTV9DSEdfVkJBVFRfTFRfM1A5X0VJTlQgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0lNX0NIR19WQkFUVF9MVF8zUDFfRUlOVCAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfSU1fQ0hHX1ZCQVRUX0xUXzJQODVfRUlOVCAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMzQgKDB4MjIpIC0gSW50ZXJydXB0IFN0YXR1cyAyIE1hc2sKKyAqLworI2RlZmluZSBXTTgzNTBfSU1fU1BBUkUyX0VJTlQgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9JTV9TUEFSRTFfRUlOVCAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0lNX0NTMV9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfSU1fQ1MyX0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9JTV9VU0JfTElNSVRfRUlOVCAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0lNX0FVWEFEQ19EQVRBUkRZX0VJTlQgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfSU1fQVVYQURDX0RDT01QNF9FSU5UICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9JTV9BVVhBRENfRENPTVAzX0VJTlQgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0lNX0FVWEFEQ19EQ09NUDJfRUlOVCAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfSU1fQVVYQURDX0RDT01QMV9FSU5UICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9JTV9TWVNfSFlTVF9DT01QX0ZBSUxfRUlOVCAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0lNX1NZU19DSElQX0dUMTE1X0VJTlQgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfSU1fU1lTX0NISVBfR1QxNDBfRUlOVCAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9JTV9TWVNfV0RPR19UT19FSU5UICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIzNSAoMHgyMykgLSBQb3dlciBVcCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sKKyAqLworI2RlZmluZSBXTTgzNTBfSU1fUFVUT19MRE80X0VJTlQgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9JTV9QVVRPX0xETzNfRUlOVCAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0lNX1BVVE9fTERPMl9FSU5UICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfSU1fUFVUT19MRE8xX0VJTlQgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9JTV9QVVRPX0RDNl9FSU5UICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0lNX1BVVE9fREM1X0VJTlQgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfSU1fUFVUT19EQzRfRUlOVCAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9JTV9QVVRPX0RDM19FSU5UICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0lNX1BVVE9fREMyX0VJTlQgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfSU1fUFVUT19EQzFfRUlOVCAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMzYgKDB4MjQpIC0gVW5kZXIgVm9sdGFnZSBJbnRlcnJ1cHQgc3RhdHVzIE1hc2sKKyAqLworI2RlZmluZSBXTTgzNTBfSU1fVVZfTERPNF9FSU5UICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9JTV9VVl9MRE8zX0VJTlQgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0lNX1VWX0xETzJfRUlOVCAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfSU1fVVZfTERPMV9FSU5UICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9JTV9VVl9EQzZfRUlOVCAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0lNX1VWX0RDNV9FSU5UICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfSU1fVVZfREM0X0VJTlQgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9JTV9VVl9EQzNfRUlOVCAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0lNX1VWX0RDMl9FSU5UICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfSU1fVVZfREMxX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMzcgKDB4MjUpIC0gT3ZlciBDdXJyZW50IEludGVycnVwdCBzdGF0dXMgTWFzaworICovCisjZGVmaW5lIFdNODM1MF9JTV9PQ19MU19FSU5UICAgICAgICAgICAgICAgICAgICAweDgwMDAKKworLyoKKyAqIFIzOCAoMHgyNikgLSBHUElPIEludGVycnVwdCBTdGF0dXMgTWFzaworICovCisjZGVmaW5lIFdNODM1MF9JTV9HUDEyX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0lNX0dQMTFfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfSU1fR1AxMF9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9JTV9HUDlfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0lNX0dQOF9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfSU1fR1A3X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9JTV9HUDZfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0lNX0dQNV9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfSU1fR1A0X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9JTV9HUDNfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0lNX0dQMl9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfSU1fR1AxX0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9JTV9HUDBfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIzOSAoMHgyNykgLSBDb21wYXJhdG9yIEludGVycnVwdCBTdGF0dXMgTWFzaworICovCisjZGVmaW5lIFdNODM1MF9JTV9FWFRfVVNCX0ZCX0VJTlQgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX0lNX0VYVF9XQUxMX0ZCX0VJTlQgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfSU1fRVhUX0JBVF9GQl9FSU5UICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9JTV9DT0RFQ19KQ0tfREVUX0xfRUlOVCAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0lNX0NPREVDX0pDS19ERVRfUl9FSU5UICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfSU1fQ09ERUNfTUlDU0NEX0VJTlQgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9JTV9DT0RFQ19NSUNEX0VJTlQgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0lNX1dLVVBfT0ZGX1NUQVRFX0VJTlQgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfSU1fV0tVUF9ISUJfU1RBVEVfRUlOVCAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9JTV9XS1VQX0NPTlZfRkFVTFRfRUlOVCAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0lNX1dLVVBfV0RPR19SU1RfRUlOVCAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfSU1fV0tVUF9HUF9QV1JfT05fRUlOVCAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9JTV9XS1VQX09OS0VZX0VJTlQgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0lNX1dLVVBfR1BfV0FLRVVQX0VJTlQgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjIyMCAoMHhEQykgLSBSQU0gQklTVCAxCisgKi8KKyNkZWZpbmUgV004MzUwX1JFQURfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfVFNUUkFNX0NMSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9UU1RSQU1fQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX1NUQVJUU0VRICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfUkVBRF9TUkMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9DT1VOVF9ESVIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX1RTVFJBTV9NT0RFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwRQorI2RlZmluZSBXTTgzNTBfVFNUUkFNX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMjI1ICgweEUxKSAtIERDREMvTERPIHN0YXR1cworICovCisjZGVmaW5lIFdNODM1MF9MU19TVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX0xETzRfU1RTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfTERPM19TVFMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9MRE8yX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0xETzFfU1RTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfREM2X1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9EQzVfU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0RDNF9TVFMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfREMzX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9EQzJfU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0RDMV9TVFMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKiBXTTgzNTAgd2FrZSB1cCBjb25kaXRpb25zICovCisjZGVmaW5lIFdNODM1MF9JUlFfV0tVUF9PRkZfU1RBVEUJCTQzCisjZGVmaW5lIFdNODM1MF9JUlFfV0tVUF9ISUJfU1RBVEUJCTQ0CisjZGVmaW5lIFdNODM1MF9JUlFfV0tVUF9DT05WX0ZBVUxUCQk0NQorI2RlZmluZSBXTTgzNTBfSVJRX1dLVVBfV0RPR19SU1QJCTQ2CisjZGVmaW5lIFdNODM1MF9JUlFfV0tVUF9HUF9QV1JfT04JCTQ3CisjZGVmaW5lIFdNODM1MF9JUlFfV0tVUF9PTktFWQkJCTQ4CisjZGVmaW5lIFdNODM1MF9JUlFfV0tVUF9HUF9XQUtFVVAJCTQ5CisKKy8qIHdtODM1MCBjaGlwIHJldmlzaW9ucyAqLworI2RlZmluZSBXTTgzNTBfUkVWX0UJCQkJMHg0CisjZGVmaW5lIFdNODM1MF9SRVZfRgkJCQkweDUKKyNkZWZpbmUgV004MzUwX1JFVl9HCQkJCTB4NgorCisjZGVmaW5lIFdNODM1MF9OVU1fSVJRCQkJCTYzCisKK3N0cnVjdCB3bTgzNTBfcmVnX2FjY2VzcyB7CisJdTE2IHJlYWRhYmxlOwkJLyogTWFzayBvZiByZWFkYWJsZSBiaXRzICovCisJdTE2IHdyaXRhYmxlOwkJLyogTWFzayBvZiB3cml0YWJsZSBiaXRzICovCisJdTE2IHZvbDsJCS8qIE1hc2sgb2Ygdm9sYXRpbGUgYml0cyAqLworfTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgd204MzUwX3JlZ19hY2Nlc3Mgd204MzUwX3JlZ19pb19tYXBbXTsKK2V4dGVybiBjb25zdCB1MTYgd204MzUwX21vZGUwX2RlZmF1bHRzW107CitleHRlcm4gY29uc3QgdTE2IHdtODM1MF9tb2RlMV9kZWZhdWx0c1tdOworZXh0ZXJuIGNvbnN0IHUxNiB3bTgzNTBfbW9kZTJfZGVmYXVsdHNbXTsKK2V4dGVybiBjb25zdCB1MTYgd204MzUwX21vZGUzX2RlZmF1bHRzW107CisKK3N0cnVjdCB3bTgzNTA7CisKK3N0cnVjdCB3bTgzNTBfaXJxIHsKKwl2b2lkICgqaGFuZGxlcikgKHN0cnVjdCB3bTgzNTAgKiwgaW50LCB2b2lkICopOworCXZvaWQgKmRhdGE7Cit9OworCitzdHJ1Y3Qgd204MzUwIHsKKwlpbnQgcmV2OwkJLyogY2hpcCByZXZpc2lvbiAqLworCisJc3RydWN0IGRldmljZSAqZGV2OworCisJLyogZGV2aWNlIElPICovCisJdW5pb24geworCQlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudDsKKwkJc3RydWN0IHNwaV9kZXZpY2UgKnNwaV9kZXZpY2U7CisJfTsKKwlpbnQgKCpyZWFkX2Rldikoc3RydWN0IHdtODM1MCAqd204MzUwLCBjaGFyIHJlZywgaW50IHNpemUsIHZvaWQgKmRlc3QpOworCWludCAoKndyaXRlX2Rldikoc3RydWN0IHdtODM1MCAqd204MzUwLCBjaGFyIHJlZywgaW50IHNpemUsCisJCQkgdm9pZCAqc3JjKTsKKwl1MTYgKnJlZ19jYWNoZTsKKworCS8qIEludGVycnVwdCBoYW5kbGluZyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBpcnFfd29yazsKKwlzdHJ1Y3QgbXV0ZXggaXJxX211dGV4OyAvKiBJUlEgdGFibGUgbXV0ZXggKi8KKwlzdHJ1Y3Qgd204MzUwX2lycSBpcnFbV004MzUwX05VTV9JUlFdOworCWludCBjaGlwX2lycTsKKworCS8qIENsaWVudCBkZXZpY2VzICovCisJc3RydWN0IHdtODM1MF9jb2RlYyBjb2RlYzsKKwlzdHJ1Y3Qgd204MzUwX2dwaW8gZ3BpbzsKKwlzdHJ1Y3Qgd204MzUwX3BtaWMgcG1pYzsKKwlzdHJ1Y3Qgd204MzUwX3Bvd2VyIHBvd2VyOworCXN0cnVjdCB3bTgzNTBfcnRjIHJ0YzsKKwlzdHJ1Y3Qgd204MzUwX3dkdCB3ZHQ7Cit9OworCisvKioKKyAqIERhdGEgdG8gYmUgc3VwcGxpZWQgYnkgdGhlIHBsYXRmb3JtIHRvIGluaXRpYWxpc2UgdGhlIFdNODM1MC4KKyAqCisgKiBAaW5pdDogRnVuY3Rpb24gY2FsbGVkIGR1cmluZyBkcml2ZXIgaW5pdGlhbGlzYXRpb24uICBTaG91bGQgYmUKKyAqICAgICAgICB1c2VkIGJ5IHRoZSBwbGF0Zm9ybSB0byBjb25maWd1cmUgR1BJTyBmdW5jdGlvbnMgYW5kIHNpbWlsYXIuCisgKi8KK3N0cnVjdCB3bTgzNTBfcGxhdGZvcm1fZGF0YSB7CisJaW50ICgqaW5pdCkoc3RydWN0IHdtODM1MCAqd204MzUwKTsKK307CisKKworLyoKKyAqIFdNODM1MCBkZXZpY2UgaW5pdGlhbGlzYXRpb24gYW5kIGV4aXQuCisgKi8KK2ludCB3bTgzNTBfZGV2aWNlX2luaXQoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxLAorCQkgICAgICAgc3RydWN0IHdtODM1MF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7Cit2b2lkIHdtODM1MF9kZXZpY2VfZXhpdChzdHJ1Y3Qgd204MzUwICp3bTgzNTApOworCisvKgorICogV004MzUwIGRldmljZSBJTworICovCitpbnQgd204MzUwX2NsZWFyX2JpdHMoc3RydWN0IHdtODM1MCAqd204MzUwLCB1MTYgcmVnLCB1MTYgbWFzayk7CitpbnQgd204MzUwX3NldF9iaXRzKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgdTE2IHJlZywgdTE2IG1hc2spOwordTE2IHdtODM1MF9yZWdfcmVhZChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCByZWcpOworaW50IHdtODM1MF9yZWdfd3JpdGUoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgcmVnLCB1MTYgdmFsKTsKK2ludCB3bTgzNTBfcmVnX2xvY2soc3RydWN0IHdtODM1MCAqd204MzUwKTsKK2ludCB3bTgzNTBfcmVnX3VubG9jayhzdHJ1Y3Qgd204MzUwICp3bTgzNTApOworaW50IHdtODM1MF9ibG9ja19yZWFkKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IHJlZywgaW50IHNpemUsIHUxNiAqZGVzdCk7CitpbnQgd204MzUwX2Jsb2NrX3dyaXRlKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IHJlZywgaW50IHNpemUsIHUxNiAqc3JjKTsKKworLyoKKyAqIFdNODM1MCBpbnRlcm5hbCBpbnRlcnJ1cHRzCisgKi8KK2ludCB3bTgzNTBfcmVnaXN0ZXJfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwKKwkJCXZvaWQgKCpoYW5kbGVyKSAoc3RydWN0IHdtODM1MCAqLCBpbnQsIHZvaWQgKiksCisJCQl2b2lkICpkYXRhKTsKK2ludCB3bTgzNTBfZnJlZV9pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKTsKK2ludCB3bTgzNTBfbWFza19pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKTsKK2ludCB3bTgzNTBfdW5tYXNrX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2dwaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5MWU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9ncGlvLmgKQEAgLTAsMCArMSwzNDIgQEAKKy8qCisgKiBncGlvLmggIC0tICBHUElPIERyaXZlciBmb3IgV29sZnNvbiBXTTgzNTAgUE1JQworICoKKyAqIENvcHlyaWdodCAyMDA3IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9XTTgzNTBfR1BJT19IXworI2RlZmluZSBfX0xJTlVYX01GRF9XTTgzNTBfR1BJT19IXworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKy8qCisgKiBHUElPIFJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBXTTgzNTBfR1BJT19ERUJPVU5DRSAgICAgICAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSBXTTgzNTBfR1BJT19QSU5fUFVMTF9VUF9DT05UUk9MICAgICAgICAgMHg4MQorI2RlZmluZSBXTTgzNTBfR1BJT19QVUxMX0RPV05fQ09OVFJPTCAgICAgICAgICAgMHg4MgorI2RlZmluZSBXTTgzNTBfR1BJT19JTlRfTU9ERSAgICAgICAgICAgICAgICAgICAgMHg4MworI2RlZmluZSBXTTgzNTBfR1BJT19DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHg4NQorI2RlZmluZSBXTTgzNTBfR1BJT19DT05GSUdVUkFUSU9OX0lfTyAgICAgICAgICAgMHg4NgorI2RlZmluZSBXTTgzNTBfR1BJT19QSU5fUE9MQVJJVFlfVFlQRSAgICAgICAgICAgMHg4NworI2RlZmluZSBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMSAgICAgICAgICAgMHg4QworI2RlZmluZSBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMiAgICAgICAgICAgMHg4RAorI2RlZmluZSBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMyAgICAgICAgICAgMHg4RQorI2RlZmluZSBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfNCAgICAgICAgICAgMHg4RgorCisvKgorICogR1BJTyBGdW5jdGlvbnMKKyAqLworI2RlZmluZSBXTTgzNTBfR1BJTzBfR1BJT19JTgkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzBfR1BJT19PVVQJCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU8wX1BXUl9PTl9JTgkJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzBfUFdSX09OX09VVAkJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzBfTERPX0VOX0lOCQkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPMF9WUlRDX09VVAkJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzBfTFBXUjFfSU4JCQkweDMKKyNkZWZpbmUgV004MzUwX0dQSU8wX1BPUl9CX09VVAkJCTB4MworCisjZGVmaW5lIFdNODM1MF9HUElPMV9HUElPX0lOCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPMV9HUElPX09VVAkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzFfUFdSX09OX0lOCQkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPMV9ET19DT05GX09VVAkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPMV9MRE9fRU5fSU4JCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU8xX1JFU0VUX09VVAkJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzFfTFBXUjJfSU4JCQkweDMKKyNkZWZpbmUgV004MzUwX0dQSU8xX01FTVJTVF9PVVQJCQkweDMKKworI2RlZmluZSBXTTgzNTBfR1BJTzJfR1BJT19JTgkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzJfR1BJT19PVVQJCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU8yX1BXUl9PTl9JTgkJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzJfUFdSX09OX09VVAkJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzJfV0FLRV9VUF9JTgkJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzJfVlJUQ19PVVQJCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU8yXzMyS0haX0lOCQkJMHgzCisjZGVmaW5lIFdNODM1MF9HUElPMl8zMktIWl9PVVQJCQkweDMKKworI2RlZmluZSBXTTgzNTBfR1BJTzNfR1BJT19JTgkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzNfR1BJT19PVVQJCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU8zX1BXUl9PTl9JTgkJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzNfUF9DTEtfT1VUCQkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPM19MRE9fRU5fSU4JCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU8zX1ZSVENfT1VUCQkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPM19QV1JfT0ZGX0lOCQkJMHgzCisjZGVmaW5lIFdNODM1MF9HUElPM18zMktIWl9PVVQJCQkweDMKKworI2RlZmluZSBXTTgzNTBfR1BJTzRfR1BJT19JTgkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzRfR1BJT19PVVQJCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU80X01SX0lOCQkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPNF9NRU1fUlNUX09VVAkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPNF9GTEFTSF9JTgkJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzRfQURBX09VVAkJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzRfSElCRVJOQVRFX0lOCQkweDMKKyNkZWZpbmUgV004MzUwX0dQSU80X0ZMQVNIX09VVAkJCTB4MworI2RlZmluZSBXTTgzNTBfR1BJTzRfTUlDREVUX09VVAkJCTB4NAorI2RlZmluZSBXTTgzNTBfR1BJTzRfTUlDU0hUX09VVAkJCTB4NQorCisjZGVmaW5lIFdNODM1MF9HUElPNV9HUElPX0lOCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPNV9HUElPX09VVAkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzVfTFBXUjFfSU4JCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU81X1BfQ0xLX09VVAkJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzVfQURDTFJDTEtfSU4JCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzVfQURDTFJDTEtfT1VUCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU81X0hJQkVSTkFURV9JTgkJMHgzCisjZGVmaW5lIFdNODM1MF9HUElPNV8zMktIWl9PVVQJCQkweDMKKyNkZWZpbmUgV004MzUwX0dQSU81X01JQ0RFVF9PVVQJCQkweDQKKyNkZWZpbmUgV004MzUwX0dQSU81X01JQ1NIVF9PVVQJCQkweDUKKyNkZWZpbmUgV004MzUwX0dQSU81X0FEQV9PVVQJCQkweDYKKyNkZWZpbmUgV004MzUwX0dQSU81X09QQ0xLX09VVAkJCTB4NworCisjZGVmaW5lIFdNODM1MF9HUElPNl9HUElPX0lOCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPNl9HUElPX09VVAkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzZfTFBXUjJfSU4JCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU82X01FTVJTVF9PVVQJCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU82X0ZMQVNIX0lOCQkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPNl9BREFfT1VUCQkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPNl9ISUJFUk5BVEVfSU4JCTB4MworI2RlZmluZSBXTTgzNTBfR1BJTzZfUlRDX09VVAkJCTB4MworI2RlZmluZSBXTTgzNTBfR1BJTzZfTUlDREVUX09VVAkJCTB4NAorI2RlZmluZSBXTTgzNTBfR1BJTzZfTUlDU0hUX09VVAkJCTB4NQorI2RlZmluZSBXTTgzNTBfR1BJTzZfQURDTFJDTEtCX09VVAkJMHg2CisjZGVmaW5lIFdNODM1MF9HUElPNl9TRE9VVF9PVVQJCQkweDcKKworI2RlZmluZSBXTTgzNTBfR1BJTzdfR1BJT19JTgkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzdfR1BJT19PVVQJCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU83X0xQV1IzX0lOCQkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPN19QX0NMS19PVVQJCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU83X01BU0tfSU4JCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU83X1ZDQ19GQVVMVF9PVVQJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzdfSElCRVJOQVRFX0lOCQkweDMKKyNkZWZpbmUgV004MzUwX0dQSU83X0JBVFRfRkFVTFRfT1VUCQkweDMKKyNkZWZpbmUgV004MzUwX0dQSU83X01JQ0RFVF9PVVQJCQkweDQKKyNkZWZpbmUgV004MzUwX0dQSU83X01JQ1NIVF9PVVQJCQkweDUKKyNkZWZpbmUgV004MzUwX0dQSU83X0FEQV9PVVQJCQkweDYKKyNkZWZpbmUgV004MzUwX0dQSU83X0NTQl9JTgkJCTB4NworCisjZGVmaW5lIFdNODM1MF9HUElPOF9HUElPX0lOCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPOF9HUElPX09VVAkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzhfTVJfSU4JCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU84X1ZDQ19GQVVMVF9PVVQJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzhfQURDQkNMS19JTgkJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzhfQURDQkNMS19PVVQJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzhfUFdSX09GRl9JTgkJCTB4MworI2RlZmluZSBXTTgzNTBfR1BJTzhfQkFUVF9GQVVMVF9PVVQJCTB4MworI2RlZmluZSBXTTgzNTBfR1BJTzhfQUxUU0NMX0lOCQkJMHhmCisKKyNkZWZpbmUgV004MzUwX0dQSU85X0dQSU9fSU4JCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU85X0dQSU9fT1VUCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPOV9IRUFSVEJFQVRfSU4JCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzlfVkNDX0ZBVUxUX09VVAkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPOV9NQVNLX0lOCQkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPOV9MSU5FX0dUX0JBVFRfT1VUCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU85X1BXUl9PRkZfSU4JCQkweDMKKyNkZWZpbmUgV004MzUwX0dQSU85X0JBVFRfRkFVTFRfT1VUCQkweDMKKyNkZWZpbmUgV004MzUwX0dQSU85X0FMVFNEQV9PVVQJCQkweGYKKworI2RlZmluZSBXTTgzNTBfR1BJTzEwX0dQSU9fSU4JCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU8xMF9HUElPX09VVAkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzEwX0lTSU5LQ19PVVQJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzEwX1BXUl9PRkZfSU4JCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzEwX0xJTkVfR1RfQkFUVF9PVVQJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzEwX0NIRF9JTkRfSU4JCTB4MworCisjZGVmaW5lIFdNODM1MF9HUElPMTFfR1BJT19JTgkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzExX0dQSU9fT1VUCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPMTFfSVNJTktEX09VVAkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPMTFfV0FLRVVQX0lOCQkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPMTFfTElORV9HVF9CQVRUX09VVAkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPMTFfQ0hEX0lORF9JTgkJMHgzCisKKyNkZWZpbmUgV004MzUwX0dQSU8xMl9HUElPX0lOCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPMTJfR1BJT19PVVQJCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU8xMl9JU0lOS0VfT1VUCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU8xMl9MSU5FX0dUX0JBVFRfT1VUCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU8xMl9MSU5FX0VOX09VVAkJMHgzCisjZGVmaW5lIFdNODM1MF9HUElPMTJfMzJLSFpfT1VUCQkJMHg0CisKKyNkZWZpbmUgV004MzUwX0dQSU9fRElSX0lOCQkJMAorI2RlZmluZSBXTTgzNTBfR1BJT19ESVJfT1VUCQkJMQorI2RlZmluZSBXTTgzNTBfR1BJT19BQ1RJVkVfTE9XCQkJMAorI2RlZmluZSBXTTgzNTBfR1BJT19BQ1RJVkVfSElHSAkJCTEKKyNkZWZpbmUgV004MzUwX0dQSU9fUFVMTF9OT05FCQkJMAorI2RlZmluZSBXTTgzNTBfR1BJT19QVUxMX1VQCQkJMQorI2RlZmluZSBXTTgzNTBfR1BJT19QVUxMX0RPV04JCQkyCisjZGVmaW5lIFdNODM1MF9HUElPX0lOVkVSVF9PRkYJCQkwCisjZGVmaW5lIFdNODM1MF9HUElPX0lOVkVSVF9PTgkJCTEKKyNkZWZpbmUgV004MzUwX0dQSU9fREVCT1VOQ0VfT0ZGCQkwCisjZGVmaW5lIFdNODM1MF9HUElPX0RFQk9VTkNFX09OCQkJMQorCisvKgorICogUjEyOCAoMHg4MCkgLSBHUElPIERlYm91bmNlCisgKi8KKyNkZWZpbmUgV004MzUwX0dQMTJfREIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfR1AxMV9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9HUDEwX0RCICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0dQOV9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfR1A4X0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9HUDdfREIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX0dQNl9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfR1A1X0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9HUDRfREIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0dQM19EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfR1AyX0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9HUDFfREIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0dQMF9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjEyOSAoMHg4MSkgLSBHUElPIFBpbiBwdWxsIHVwIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfR1AxMl9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9HUDExX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0dQMTBfUFUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfR1A5X1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9HUDhfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0dQN19QVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfR1A2X1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9HUDVfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0dQNF9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfR1AzX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9HUDJfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0dQMV9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfR1AwX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTMwICgweDgyKSAtIEdQSU8gUHVsbCBkb3duIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfR1AxMl9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9HUDExX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0dQMTBfUEQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfR1A5X1BEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9HUDhfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0dQN19QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfR1A2X1BEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9HUDVfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0dQNF9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfR1AzX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9HUDJfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0dQMV9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfR1AwX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTMxICgweDgzKSAtIEdQSU8gSW50ZXJydXB0IE1vZGUKKyAqLworI2RlZmluZSBXTTgzNTBfR1AxMl9JTlRNT0RFICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9HUDExX0lOVE1PREUgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0dQMTBfSU5UTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfR1A5X0lOVE1PREUgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9HUDhfSU5UTU9ERSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0dQN19JTlRNT0RFICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfR1A2X0lOVE1PREUgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9HUDVfSU5UTU9ERSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0dQNF9JTlRNT0RFICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfR1AzX0lOVE1PREUgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9HUDJfSU5UTU9ERSAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0dQMV9JTlRNT0RFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfR1AwX0lOVE1PREUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTMzICgweDg1KSAtIEdQSU8gQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9HUF9EQlRJTUVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwQzAKKworLyoKKyAqIFIxMzQgKDB4ODYpIC0gR1BJTyBDb25maWd1cmF0aW9uIChpL28pCisgKi8KKyNkZWZpbmUgV004MzUwX0dQMTJfRElSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfR1AxMV9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9HUDEwX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0dQOV9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfR1A4X0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9HUDdfRElSICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX0dQNl9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfR1A1X0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9HUDRfRElSICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0dQM19ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfR1AyX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9HUDFfRElSICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0dQMF9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjEzNSAoMHg4NykgLSBHUElPIFBpbiBQb2xhcml0eSAvIFR5cGUKKyAqLworI2RlZmluZSBXTTgzNTBfR1AxMl9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9HUDExX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0dQMTBfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfR1A5X0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9HUDhfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0dQN19DRkcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfR1A2X0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9HUDVfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0dQNF9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfR1AzX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9HUDJfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0dQMV9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfR1AwX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTQwICgweDhDKSAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDEKKyAqLworI2RlZmluZSBXTTgzNTBfR1AzX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHhGMDAwCisjZGVmaW5lIFdNODM1MF9HUDJfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDBGMDAKKyNkZWZpbmUgV004MzUwX0dQMV9GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMAorI2RlZmluZSBXTTgzNTBfR1AwX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGCisKKy8qCisgKiBSMTQxICgweDhEKSAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDIKKyAqLworI2RlZmluZSBXTTgzNTBfR1A3X0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHhGMDAwCisjZGVmaW5lIFdNODM1MF9HUDZfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDBGMDAKKyNkZWZpbmUgV004MzUwX0dQNV9GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMAorI2RlZmluZSBXTTgzNTBfR1A0X0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGCisKKy8qCisgKiBSMTQyICgweDhFKSAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDMKKyAqLworI2RlZmluZSBXTTgzNTBfR1AxMV9GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGMDAwCisjZGVmaW5lIFdNODM1MF9HUDEwX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAweDBGMDAKKyNkZWZpbmUgV004MzUwX0dQOV9GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMAorI2RlZmluZSBXTTgzNTBfR1A4X0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGCisKKy8qCisgKiBSMTQzICgweDhGKSAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDQKKyAqLworI2RlZmluZSBXTTgzNTBfR1AxMl9GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDBGCisKKy8qCisgKiBSMjMwICgweEU2KSAtIEdQSU8gUGluIFN0YXR1cworICovCisjZGVmaW5lIFdNODM1MF9HUDEyX0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0dQMTFfTFZMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfR1AxMF9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9HUDlfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0dQOF9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfR1A3X0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9HUDZfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0dQNV9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfR1A0X0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9HUDNfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0dQMl9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfR1AxX0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9HUDBfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworc3RydWN0IHdtODM1MDsKKworaW50IHdtODM1MF9ncGlvX2NvbmZpZyhzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBncGlvLCBpbnQgZGlyLCBpbnQgZnVuYywKKwkJICAgICAgIGludCBwb2wsIGludCBwdWxsLCBpbnQgaW52ZXJ0LCBpbnQgZGVib3VuY2UpOworCitzdHJ1Y3Qgd204MzUwX2dwaW8geworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cit9OworCisvKgorICogR1BJTyBJbnRlcnJ1cHRzCisgKi8KKyNkZWZpbmUgV004MzUwX0lSUV9HUElPKHgpICAgICAgICAgICAgICAgICAgICAgICg1MCArIHgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3BtaWMuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9wbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjliNjllMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9wbWljLmgKQEAgLTAsMCArMSw3NDEgQEAKKy8qCisgKiBwbWljLmggIC0tICBQb3dlciBNYW5hZ21lbnQgRHJpdmVyIGZvciBXb2xmc29uIFdNODM1MCBQTUlDCisgKgorICogQ29weXJpZ2h0IDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfTUZEX1dNODM1MF9QTUlDX0gKKyNkZWZpbmUgX19MSU5VWF9NRkRfV004MzUwX1BNSUNfSAorCisvKgorICogUmVnaXN0ZXIgdmFsdWVzLgorICovCisKKyNkZWZpbmUgV004MzUwX0NVUlJFTlRfU0lOS19EUklWRVJfQSAgICAgICAgICAgIDB4QUMKKyNkZWZpbmUgV004MzUwX0NTQV9GTEFTSF9DT05UUk9MICAgICAgICAgICAgICAgIDB4QUQKKyNkZWZpbmUgV004MzUwX0NVUlJFTlRfU0lOS19EUklWRVJfQiAgICAgICAgICAgIDB4QUUKKyNkZWZpbmUgV004MzUwX0NTQl9GTEFTSF9DT05UUk9MICAgICAgICAgICAgICAgIDB4QUYKKyNkZWZpbmUgV004MzUwX0RDRENfTERPX1JFUVVFU1RFRCAgICAgICAgICAgICAgIDB4QjAKKyNkZWZpbmUgV004MzUwX0RDRENfQUNUSVZFX09QVElPTlMgICAgICAgICAgICAgIDB4QjEKKyNkZWZpbmUgV004MzUwX0RDRENfU0xFRVBfT1BUSU9OUyAgICAgICAgICAgICAgIDB4QjIKKyNkZWZpbmUgV004MzUwX1BPV0VSX0NIRUNLX0NPTVBBUkFUT1IgICAgICAgICAgIDB4QjMKKyNkZWZpbmUgV004MzUwX0RDREMxX0NPTlRST0wgICAgICAgICAgICAgICAgICAgIDB4QjQKKyNkZWZpbmUgV004MzUwX0RDREMxX1RJTUVPVVRTICAgICAgICAgICAgICAgICAgIDB4QjUKKyNkZWZpbmUgV004MzUwX0RDREMxX0xPV19QT1dFUiAgICAgICAgICAgICAgICAgIDB4QjYKKyNkZWZpbmUgV004MzUwX0RDREMyX0NPTlRST0wgICAgICAgICAgICAgICAgICAgIDB4QjcKKyNkZWZpbmUgV004MzUwX0RDREMyX1RJTUVPVVRTICAgICAgICAgICAgICAgICAgIDB4QjgKKyNkZWZpbmUgV004MzUwX0RDREMzX0NPTlRST0wgICAgICAgICAgICAgICAgICAgIDB4QkEKKyNkZWZpbmUgV004MzUwX0RDREMzX1RJTUVPVVRTICAgICAgICAgICAgICAgICAgIDB4QkIKKyNkZWZpbmUgV004MzUwX0RDREMzX0xPV19QT1dFUiAgICAgICAgICAgICAgICAgIDB4QkMKKyNkZWZpbmUgV004MzUwX0RDREM0X0NPTlRST0wgICAgICAgICAgICAgICAgICAgIDB4QkQKKyNkZWZpbmUgV004MzUwX0RDREM0X1RJTUVPVVRTICAgICAgICAgICAgICAgICAgIDB4QkUKKyNkZWZpbmUgV004MzUwX0RDREM0X0xPV19QT1dFUiAgICAgICAgICAgICAgICAgIDB4QkYKKyNkZWZpbmUgV004MzUwX0RDREM1X0NPTlRST0wgICAgICAgICAgICAgICAgICAgIDB4QzAKKyNkZWZpbmUgV004MzUwX0RDREM1X1RJTUVPVVRTICAgICAgICAgICAgICAgICAgIDB4QzEKKyNkZWZpbmUgV004MzUwX0RDREM2X0NPTlRST0wgICAgICAgICAgICAgICAgICAgIDB4QzMKKyNkZWZpbmUgV004MzUwX0RDREM2X1RJTUVPVVRTICAgICAgICAgICAgICAgICAgIDB4QzQKKyNkZWZpbmUgV004MzUwX0RDREM2X0xPV19QT1dFUiAgICAgICAgICAgICAgICAgIDB4QzUKKyNkZWZpbmUgV004MzUwX0xJTUlUX1NXSVRDSF9DT05UUk9MICAgICAgICAgICAgIDB4QzcKKyNkZWZpbmUgV004MzUwX0xETzFfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4QzgKKyNkZWZpbmUgV004MzUwX0xETzFfVElNRU9VVFMgICAgICAgICAgICAgICAgICAgIDB4QzkKKyNkZWZpbmUgV004MzUwX0xETzFfTE9XX1BPV0VSICAgICAgICAgICAgICAgICAgIDB4Q0EKKyNkZWZpbmUgV004MzUwX0xETzJfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4Q0IKKyNkZWZpbmUgV004MzUwX0xETzJfVElNRU9VVFMgICAgICAgICAgICAgICAgICAgIDB4Q0MKKyNkZWZpbmUgV004MzUwX0xETzJfTE9XX1BPV0VSICAgICAgICAgICAgICAgICAgIDB4Q0QKKyNkZWZpbmUgV004MzUwX0xETzNfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4Q0UKKyNkZWZpbmUgV004MzUwX0xETzNfVElNRU9VVFMgICAgICAgICAgICAgICAgICAgIDB4Q0YKKyNkZWZpbmUgV004MzUwX0xETzNfTE9XX1BPV0VSICAgICAgICAgICAgICAgICAgIDB4RDAKKyNkZWZpbmUgV004MzUwX0xETzRfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4RDEKKyNkZWZpbmUgV004MzUwX0xETzRfVElNRU9VVFMgICAgICAgICAgICAgICAgICAgIDB4RDIKKyNkZWZpbmUgV004MzUwX0xETzRfTE9XX1BPV0VSICAgICAgICAgICAgICAgICAgIDB4RDMKKyNkZWZpbmUgV004MzUwX1ZDQ19GQVVMVF9NQVNLUyAgICAgICAgICAgICAgICAgIDB4RDcKKyNkZWZpbmUgV004MzUwX01BSU5fQkFOREdBUF9DT05UUk9MICAgICAgICAgICAgIDB4RDgKKyNkZWZpbmUgV004MzUwX09TQ19DT05UUk9MICAgICAgICAgICAgICAgICAgICAgIDB4RDkKKyNkZWZpbmUgV004MzUwX1JUQ19USUNLX0NPTlRST0wgICAgICAgICAgICAgICAgIDB4REEKKyNkZWZpbmUgV004MzUwX1NFQ1VSSVRZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REIKKyNkZWZpbmUgV004MzUwX1JBTV9CSVNUXzEgICAgICAgICAgICAgICAgICAgICAgIDB4REMKKyNkZWZpbmUgV004MzUwX0RDRENfTERPX1NUQVRVUyAgICAgICAgICAgICAgICAgIDB4RTEKKyNkZWZpbmUgV004MzUwX0dQSU9fUElOX1NUQVRVUyAgICAgICAgICAgICAgICAgIDB4RTYKKworI2RlZmluZSBXTTgzNTBfRENEQzFfRk9SQ0VfUFdNICAgICAgICAgICAgICAgICAgMHhGOAorI2RlZmluZSBXTTgzNTBfRENEQzNfRk9SQ0VfUFdNICAgICAgICAgICAgICAgICAgMHhGQQorI2RlZmluZSBXTTgzNTBfRENEQzRfRk9SQ0VfUFdNICAgICAgICAgICAgICAgICAgMHhGQgorI2RlZmluZSBXTTgzNTBfRENEQzZfRk9SQ0VfUFdNICAgICAgICAgICAgICAgICAgMHhGRAorCisvKgorICogUjE3MiAoMHhBQykgLSBDdXJyZW50IFNpbmsgRHJpdmVyIEEKKyAqLworI2RlZmluZSBXTTgzNTBfQ1MxX0hJQl9NT0RFICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9DUzFfSElCX01PREVfTUFTSyAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0NTMV9ISUJfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBXTTgzNTBfQ1MxX0lTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDNGCisjZGVmaW5lIFdNODM1MF9DUzFfSVNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyogQml0IHZhbHVlcyBmb3IgUjE3MiAoMHhBQykgKi8KKyNkZWZpbmUgV004MzUwX0NTMV9ISUJfTU9ERV9ESVNBQkxFICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfQ1MxX0hJQl9NT0RFX0xFQVZFICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX0NTMV9JU0VMXzIyME0gICAgICAgICAgICAgICAgICAgICAgMHgzRgorCisvKgorICogUjE3MyAoMHhBRCkgLSBDU0EgRmxhc2ggY29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9DUzFfRkxBU0hfTU9ERSAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX0NTMV9UUklHU1JDICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfQ1MxX0RSSVZFICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9DUzFfRkxBU0hfRFVSX01BU0sgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgV004MzUwX0NTMV9PRkZfUkFNUF9NQVNLICAgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBXTTgzNTBfQ1MxX09OX1JBTVBfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzCisKKy8qCisgKiBSMTc0ICgweEFFKSAtIEN1cnJlbnQgU2luayBEcml2ZXIgQgorICovCisjZGVmaW5lIFdNODM1MF9DUzJfSElCX01PREUgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0NTMl9JU0VMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAzRgorCisvKgorICogUjE3NSAoMHhBRikgLSBDU0IgRmxhc2ggY29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9DUzJfRkxBU0hfTU9ERSAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX0NTMl9UUklHU1JDICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfQ1MyX0RSSVZFICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9DUzJfRkxBU0hfRFVSX01BU0sgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgV004MzUwX0NTMl9PRkZfUkFNUF9NQVNLICAgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBXTTgzNTBfQ1MyX09OX1JBTVBfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzCisKKy8qCisgKiBSMTc2ICgweEIwKSAtIERDREMvTERPIHJlcXVlc3RlZAorICovCisjZGVmaW5lIFdNODM1MF9MU19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX0xETzRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfTERPM19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9MRE8yX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0xETzFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfREM2X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9EQzVfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0RDNF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfREMzX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9EQzJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0RDMV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjE3NyAoMHhCMSkgLSBEQ0RDIEFjdGl2ZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgV004MzUwX1BVVE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAwMAorI2RlZmluZSBXTTgzNTBfUFdSVVBfREVMQVlfTUFTSyAgICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIFdNODM1MF9EQzZfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0RDNF9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfREMzX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9EQzFfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIxNzggKDB4QjIpIC0gRENEQyBTbGVlcCBvcHRpb25zCisgKi8KKyNkZWZpbmUgV004MzUwX0RDNl9TTEVFUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfREM0X1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9EQzNfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0RDMV9TTEVFUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjE3OSAoMHhCMykgLSBQb3dlci1jaGVjayBjb21wYXJhdG9yCisgKi8KKyNkZWZpbmUgV004MzUwX1BDQ01QX0VSUkFDVCAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfUENDTVBfUkFJTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9QQ0NNUF9PRkZfVEhSX01BU0sgICAgICAgICAgICAgICAweDAwNzAKKyNkZWZpbmUgV004MzUwX1BDQ01QX09OX1RIUl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNworCisvKgorICogUjE4MCAoMHhCNCkgLSBEQ0RDMSBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0RDMV9PUEZMVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfREMxX1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGCisjZGVmaW5lIFdNODM1MF9EQzFfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqIFIxODEgKDB4QjUpIC0gRENEQzEgVGltZW91dHMKKyAqLworI2RlZmluZSBXTTgzNTBfREMxX0VSUkFDVF9NQVNLICAgICAgICAgICAgICAgICAgMHhDMDAwCisjZGVmaW5lIFdNODM1MF9EQzFfRVJSQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgV004MzUwX0RDMV9FTlNMT1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4M0MwMAorI2RlZmluZSBXTTgzNTBfREMxX0VOU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFdNODM1MF9EQzFfU0RTTE9UX01BU0sgICAgICAgICAgICAgICAgICAweDAzQzAKKyNkZWZpbmUgV004MzUwX0RDMV9VVlRPX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBXTTgzNTBfREMxX1NEU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2CisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIxODEgKDB4QjUpICovCisjZGVmaW5lIFdNODM1MF9EQzFfRVJSQUNUX05PTkUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0RDMV9FUlJBQ1RfU0hVVERPV05fQ09OViAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfREMxX0VSUkFDVF9TSFVURE9XTl9TWVMgICAgICAgICAgICAgICAyCisKKy8qCisgKiBSMTgyICgweEI2KSAtIERDREMxIExvdyBQb3dlcgorICovCisjZGVmaW5lIFdNODM1MF9EQzFfSElCX01PREVfTUFTSyAgICAgICAgICAgICAgICAweDcwMDAKKyNkZWZpbmUgV004MzUwX0RDMV9ISUJfVFJJR19NQVNLICAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBXTTgzNTBfREMxX1ZJTUdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGCisKKy8qCisgKiBSMTgzICgweEI3KSAtIERDREMyIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfREMyX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9EQzJfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0RDMl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBXTTgzNTBfREMyX0hJQl9NT0RFICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9EQzJfSElCX01PREVfTUFTSyAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0RDMl9ISUJfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBXTTgzNTBfREMyX0hJQl9UUklHX01BU0sgICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIFdNODM1MF9EQzJfSElCX1RSSUdfU0hJRlQgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgV004MzUwX0RDMl9JTElNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfREMyX0lMSU1fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9EQzJfSUxJTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV004MzUwX0RDMl9STVBfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxOAorI2RlZmluZSBXTTgzNTBfREMyX1JNUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9EQzJfRkJTUkNfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDMKKyNkZWZpbmUgV004MzUwX0RDMl9GQlNSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKiBCaXQgdmFsdWVzIGZvciBSMTgzICgweEI3KSAqLworI2RlZmluZSBXTTgzNTBfREMyX01PREVfQk9PU1QgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9EQzJfTU9ERV9TV0lUQ0ggICAgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBXTTgzNTBfREMyX0hJQl9NT0RFX0FDVElWRSAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9EQzJfSElCX01PREVfRElTQUJMRSAgICAgICAgICAgICAgICAgIDAKKworI2RlZmluZSBXTTgzNTBfREMyX0hJQl9UUklHX05PTkUgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9EQzJfSElCX1RSSUdfTFBXUjEgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0RDMl9ISUJfVFJJR19MUFdSMiAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfREMyX0hJQl9UUklHX0xQV1IzICAgICAgICAgICAgICAgICAgICAzCisKKyNkZWZpbmUgV004MzUwX0RDMl9JTElNX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfREMyX0lMSU1fTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX0RDMl9STVBfMzBWICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfREMyX1JNUF8yMFYgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9EQzJfUk1QXzEwViAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgV004MzUwX0RDMl9STVBfNVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIFdNODM1MF9EQzJfRkJTUkNfRkIyICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0RDMl9GQlNSQ19JU0lOS0EgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfREMyX0ZCU1JDX0lTSU5LQiAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9EQzJfRkJTUkNfVVNCICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLyoKKyAqIFIxODQgKDB4QjgpIC0gRENEQzIgVGltZW91dHMKKyAqLworI2RlZmluZSBXTTgzNTBfREMyX0VSUkFDVF9NQVNLICAgICAgICAgICAgICAgICAgMHhDMDAwCisjZGVmaW5lIFdNODM1MF9EQzJfRVJSQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgV004MzUwX0RDMl9FTlNMT1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4M0MwMAorI2RlZmluZSBXTTgzNTBfREMyX0VOU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFdNODM1MF9EQzJfU0RTTE9UX01BU0sgICAgICAgICAgICAgICAgICAweDAzQzAKKyNkZWZpbmUgV004MzUwX0RDMl9VVlRPX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAzMAorCisvKiBCaXQgdmFsdWVzIGZvciBSMTg0ICgweEI4KSAqLworI2RlZmluZSBXTTgzNTBfREMyX0VSUkFDVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9EQzJfRVJSQUNUX1NIVVRET1dOX0NPTlYgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0RDMl9FUlJBQ1RfU0hVVERPV05fU1lTICAgICAgICAgICAgICAgMgorCisvKgorICogUjE4NiAoMHhCQSkgLSBEQ0RDMyBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0RDM19PUEZMVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfREMzX1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGCisjZGVmaW5lIFdNODM1MF9EQzNfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqIFIxODcgKDB4QkIpIC0gRENEQzMgVGltZW91dHMKKyAqLworI2RlZmluZSBXTTgzNTBfREMzX0VSUkFDVF9NQVNLICAgICAgICAgICAgICAgICAgMHhDMDAwCisjZGVmaW5lIFdNODM1MF9EQzNfRVJSQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgV004MzUwX0RDM19FTlNMT1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4M0MwMAorI2RlZmluZSBXTTgzNTBfREMzX0VOU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFdNODM1MF9EQzNfU0RTTE9UX01BU0sgICAgICAgICAgICAgICAgICAweDAzQzAKKyNkZWZpbmUgV004MzUwX0RDM19VVlRPX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBXTTgzNTBfREMzX1NEU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2CisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIxODcgKDB4QkIpICovCisjZGVmaW5lIFdNODM1MF9EQzNfRVJSQUNUX05PTkUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0RDM19FUlJBQ1RfU0hVVERPV05fQ09OViAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfREMzX0VSUkFDVF9TSFVURE9XTl9TWVMgICAgICAgICAgICAgICAyCisvKgorICogUjE4OCAoMHhCQykgLSBEQ0RDMyBMb3cgUG93ZXIKKyAqLworI2RlZmluZSBXTTgzNTBfREMzX0hJQl9NT0RFX01BU0sgICAgICAgICAgICAgICAgMHg3MDAwCisjZGVmaW5lIFdNODM1MF9EQzNfSElCX1RSSUdfTUFTSyAgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgV004MzUwX0RDM19WSU1HX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3RgorCisvKgorICogUjE4OSAoMHhCRCkgLSBEQ0RDNCBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0RDNF9PUEZMVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfREM0X1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGCisjZGVmaW5lIFdNODM1MF9EQzRfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqIFIxOTAgKDB4QkUpIC0gRENEQzQgVGltZW91dHMKKyAqLworI2RlZmluZSBXTTgzNTBfREM0X0VSUkFDVF9NQVNLICAgICAgICAgICAgICAgICAgMHhDMDAwCisjZGVmaW5lIFdNODM1MF9EQzRfRVJSQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgV004MzUwX0RDNF9FTlNMT1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4M0MwMAorI2RlZmluZSBXTTgzNTBfREM0X0VOU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFdNODM1MF9EQzRfU0RTTE9UX01BU0sgICAgICAgICAgICAgICAgICAweDAzQzAKKyNkZWZpbmUgV004MzUwX0RDNF9VVlRPX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBXTTgzNTBfREM0X1NEU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2CisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIxOTAgKDB4QkUpICovCisjZGVmaW5lIFdNODM1MF9EQzRfRVJSQUNUX05PTkUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0RDNF9FUlJBQ1RfU0hVVERPV05fQ09OViAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfREM0X0VSUkFDVF9TSFVURE9XTl9TWVMgICAgICAgICAgICAgICAyCisKKy8qCisgKiBSMTkxICgweEJGKSAtIERDREM0IExvdyBQb3dlcgorICovCisjZGVmaW5lIFdNODM1MF9EQzRfSElCX01PREVfTUFTSyAgICAgICAgICAgICAgICAweDcwMDAKKyNkZWZpbmUgV004MzUwX0RDNF9ISUJfVFJJR19NQVNLICAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBXTTgzNTBfREM0X1ZJTUdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGCisKKy8qCisgKiBSMTkyICgweEMwKSAtIERDREM1IENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfREM1X01PREUgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9EQzVfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0RDNV9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBXTTgzNTBfREM1X0hJQl9NT0RFICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9EQzVfSElCX01PREVfTUFTSyAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0RDNV9ISUJfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBXTTgzNTBfREM1X0hJQl9UUklHX01BU0sgICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIFdNODM1MF9EQzVfSElCX1RSSUdfU0hJRlQgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgV004MzUwX0RDNV9JTElNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfREM1X0lMSU1fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9EQzVfSUxJTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV004MzUwX0RDNV9STVBfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxOAorI2RlZmluZSBXTTgzNTBfREM1X1JNUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9EQzVfRkJTUkNfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDMKKyNkZWZpbmUgV004MzUwX0RDNV9GQlNSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKiBCaXQgdmFsdWVzIGZvciBSMTkyICgweEMwKSAqLworI2RlZmluZSBXTTgzNTBfREM1X01PREVfQk9PU1QgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9EQzVfTU9ERV9TV0lUQ0ggICAgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBXTTgzNTBfREM1X0hJQl9NT0RFX0FDVElWRSAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9EQzVfSElCX01PREVfRElTQUJMRSAgICAgICAgICAgICAgICAgIDAKKworI2RlZmluZSBXTTgzNTBfREM1X0hJQl9UUklHX05PTkUgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9EQzVfSElCX1RSSUdfTFBXUjEgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0RDNV9ISUJfVFJJR19MUFdSMiAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfREM1X0hJQl9UUklHX0xQV1IzICAgICAgICAgICAgICAgICAgICAzCisKKyNkZWZpbmUgV004MzUwX0RDNV9JTElNX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfREM1X0lMSU1fTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX0RDNV9STVBfMzBWICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfREM1X1JNUF8yMFYgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9EQzVfUk1QXzEwViAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgV004MzUwX0RDNV9STVBfNVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIFdNODM1MF9EQzVfRkJTUkNfRkIyICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0RDNV9GQlNSQ19JU0lOS0EgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfREM1X0ZCU1JDX0lTSU5LQiAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9EQzVfRkJTUkNfVVNCICAgICAgICAgICAgICAgICAgICAgICAgIDMKKworLyoKKyAqIFIxOTMgKDB4QzEpIC0gRENEQzUgVGltZW91dHMKKyAqLworI2RlZmluZSBXTTgzNTBfREM1X0VSUkFDVF9NQVNLICAgICAgICAgICAgICAgICAgMHhDMDAwCisjZGVmaW5lIFdNODM1MF9EQzVfRVJSQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgV004MzUwX0RDNV9FTlNMT1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4M0MwMAorI2RlZmluZSBXTTgzNTBfREM1X0VOU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFdNODM1MF9EQzVfU0RTTE9UX01BU0sgICAgICAgICAgICAgICAgICAweDAzQzAKKyNkZWZpbmUgV004MzUwX0RDNV9VVlRPX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBXTTgzNTBfREM1X1NEU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2CisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIxOTMgKDB4QzEpICovCisjZGVmaW5lIFdNODM1MF9EQzVfRVJSQUNUX05PTkUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0RDNV9FUlJBQ1RfU0hVVERPV05fQ09OViAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfREM1X0VSUkFDVF9TSFVURE9XTl9TWVMgICAgICAgICAgICAgICAyCisKKy8qCisgKiBSMTk1ICgweEMzKSAtIERDREM2IENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfREM2X09QRkxUICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9EQzZfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YKKyNkZWZpbmUgV004MzUwX0RDNl9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogUjE5NiAoMHhDNCkgLSBEQ0RDNiBUaW1lb3V0cworICovCisjZGVmaW5lIFdNODM1MF9EQzZfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgV004MzUwX0RDNl9FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBXTTgzNTBfREM2X0VOU0xPVF9NQVNLICAgICAgICAgICAgICAgICAgMHgzQzAwCisjZGVmaW5lIFdNODM1MF9EQzZfRU5TTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX0RDNl9TRFNMT1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDNDMAorI2RlZmluZSBXTTgzNTBfREM2X1VWVE9fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFdNODM1MF9EQzZfU0RTTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYKKworLyogQml0IHZhbHVlcyBmb3IgUjE5NiAoMHhDNCkgKi8KKyNkZWZpbmUgV004MzUwX0RDNl9FUlJBQ1RfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfREM2X0VSUkFDVF9TSFVURE9XTl9DT05WICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9EQzZfRVJSQUNUX1NIVVRET1dOX1NZUyAgICAgICAgICAgICAgIDIKKworLyoKKyAqIFIxOTcgKDB4QzUpIC0gRENEQzYgTG93IFBvd2VyCisgKi8KKyNkZWZpbmUgV004MzUwX0RDNl9ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4NzAwMAorI2RlZmluZSBXTTgzNTBfREM2X0hJQl9UUklHX01BU0sgICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIFdNODM1MF9EQzZfVklNR19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YKKworLyoKKyAqIFIxOTkgKDB4QzcpIC0gTGltaXQgU3dpdGNoIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfTFNfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgICAgMHhDMDAwCisjZGVmaW5lIFdNODM1MF9MU19FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgV004MzUwX0xTX0VOU0xPVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4M0MwMAorI2RlZmluZSBXTTgzNTBfTFNfRU5TTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFdNODM1MF9MU19TRFNMT1RfTUFTSyAgICAgICAgICAgICAgICAgICAweDAzQzAKKyNkZWZpbmUgV004MzUwX0xTX1NEU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBXTTgzNTBfTFNfSElCX01PREUgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9MU19ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0xTX0hJQl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBXTTgzNTBfTFNfSElCX1BST1QgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9MU19ISUJfUFJPVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0xTX0hJQl9QUk9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfTFNfUFJPVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFdNODM1MF9MU19QUk9UX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgV004MzUwX0xTX1BST1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKiBCaXQgdmFsdWVzIGZvciBSMTk5ICgweEM3KSAqLworI2RlZmluZSBXTTgzNTBfTFNfRVJSQUNUX05PTkUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0xTX0VSUkFDVF9TSFVURE9XTl9DT05WICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9MU19FUlJBQ1RfU0hVVERPV05fU1lTICAgICAgICAgICAgICAgMgorCisvKgorICogUjIwMCAoMHhDOCkgLSBMRE8xIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfTERPMV9TV0kgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9MRE8xX09QRkxUICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0xETzFfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxRgorI2RlZmluZSBXTTgzNTBfTERPMV9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qCisgKiBSMjAxICgweEM5KSAtIExETzEgVGltZW91dHMKKyAqLworI2RlZmluZSBXTTgzNTBfTERPMV9FUlJBQ1RfTUFTSyAgICAgICAgICAgICAgICAgMHhDMDAwCisjZGVmaW5lIFdNODM1MF9MRE8xX0VSUkFDVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgV004MzUwX0xETzFfRU5TTE9UX01BU0sgICAgICAgICAgICAgICAgIDB4M0MwMAorI2RlZmluZSBXTTgzNTBfTERPMV9FTlNMT1RfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFdNODM1MF9MRE8xX1NEU0xPVF9NQVNLICAgICAgICAgICAgICAgICAweDAzQzAKKyNkZWZpbmUgV004MzUwX0xETzFfVVZUT19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBXTTgzNTBfTERPMV9TRFNMT1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICA2CisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIyMDEgKDB4QzkpICovCisjZGVmaW5lIFdNODM1MF9MRE8xX0VSUkFDVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9MRE8xX0VSUkFDVF9TSFVURE9XTl9DT05WICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9MRE8xX0VSUkFDVF9TSFVURE9XTl9TWVMgICAgICAgICAgICAgICAyCisKKy8qCisgKiBSMjAyICgweENBKSAtIExETzEgTG93IFBvd2VyCisgKi8KKyNkZWZpbmUgV004MzUwX0xETzFfSElCX01PREVfTUFTSyAgICAgICAgICAgICAgIDB4MzAwMAorI2RlZmluZSBXTTgzNTBfTERPMV9ISUJfVFJJR19NQVNLICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIFdNODM1MF9MRE8xX1ZJTUdfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMUYKKyNkZWZpbmUgV004MzUwX0xETzFfSElCX01PREVfRElTCQkoMHgxIDw8IDEyKQorCisKKy8qCisgKiBSMjAzICgweENCKSAtIExETzIgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9MRE8yX1NXSSAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0xETzJfT1BGTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfTERPMl9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDFGCisjZGVmaW5lIFdNODM1MF9MRE8yX1ZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqIFIyMDQgKDB4Q0MpIC0gTERPMiBUaW1lb3V0cworICovCisjZGVmaW5lIFdNODM1MF9MRE8yX0VSUkFDVF9NQVNLICAgICAgICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgV004MzUwX0xETzJfRVJSQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBXTTgzNTBfTERPMl9FTlNMT1RfTUFTSyAgICAgICAgICAgICAgICAgMHgzQzAwCisjZGVmaW5lIFdNODM1MF9MRE8yX0VOU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX0xETzJfU0RTTE9UX01BU0sgICAgICAgICAgICAgICAgIDB4MDNDMAorI2RlZmluZSBXTTgzNTBfTERPMl9TRFNMT1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICA2CisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIyMDQgKDB4Q0MpICovCisjZGVmaW5lIFdNODM1MF9MRE8yX0VSUkFDVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9MRE8yX0VSUkFDVF9TSFVURE9XTl9DT05WICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9MRE8yX0VSUkFDVF9TSFVURE9XTl9TWVMgICAgICAgICAgICAgICAyCisKKy8qCisgKiBSMjA1ICgweENEKSAtIExETzIgTG93IFBvd2VyCisgKi8KKyNkZWZpbmUgV004MzUwX0xETzJfSElCX01PREVfTUFTSyAgICAgICAgICAgICAgIDB4MzAwMAorI2RlZmluZSBXTTgzNTBfTERPMl9ISUJfVFJJR19NQVNLICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIFdNODM1MF9MRE8yX1ZJTUdfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMUYKKworLyoKKyAqIFIyMDYgKDB4Q0UpIC0gTERPMyBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0xETzNfU1dJICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfTERPM19PUEZMVCAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9MRE8zX1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMUYKKyNkZWZpbmUgV004MzUwX0xETzNfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogUjIwNyAoMHhDRikgLSBMRE8zIFRpbWVvdXRzCisgKi8KKyNkZWZpbmUgV004MzUwX0xETzNfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgIDB4QzAwMAorI2RlZmluZSBXTTgzNTBfTERPM19FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFdNODM1MF9MRE8zX0VOU0xPVF9NQVNLICAgICAgICAgICAgICAgICAweDNDMDAKKyNkZWZpbmUgV004MzUwX0xETzNfRU5TTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBXTTgzNTBfTERPM19TRFNMT1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwM0MwCisjZGVmaW5lIFdNODM1MF9MRE8zX1VWVE9fTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMzAKKyNkZWZpbmUgV004MzUwX0xETzNfU0RTTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgNgorCisvKiBCaXQgdmFsdWVzIGZvciBSMjA3ICgweENGKSAqLworI2RlZmluZSBXTTgzNTBfTERPM19FUlJBQ1RfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfTERPM19FUlJBQ1RfU0hVVERPV05fQ09OViAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfTERPM19FUlJBQ1RfU0hVVERPV05fU1lTICAgICAgICAgICAgICAgMgorCisvKgorICogUjIwOCAoMHhEMCkgLSBMRE8zIExvdyBQb3dlcgorICovCisjZGVmaW5lIFdNODM1MF9MRE8zX0hJQl9NT0RFX01BU0sgICAgICAgICAgICAgICAweDMwMDAKKyNkZWZpbmUgV004MzUwX0xETzNfSElCX1RSSUdfTUFTSyAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBXTTgzNTBfTERPM19WSU1HX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDFGCisKKy8qCisgKiBSMjA5ICgweEQxKSAtIExETzQgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9MRE80X1NXSSAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0xETzRfT1BGTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfTERPNF9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDFGCisjZGVmaW5lIFdNODM1MF9MRE80X1ZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqIFIyMTAgKDB4RDIpIC0gTERPNCBUaW1lb3V0cworICovCisjZGVmaW5lIFdNODM1MF9MRE80X0VSUkFDVF9NQVNLICAgICAgICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgV004MzUwX0xETzRfRVJSQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBXTTgzNTBfTERPNF9FTlNMT1RfTUFTSyAgICAgICAgICAgICAgICAgMHgzQzAwCisjZGVmaW5lIFdNODM1MF9MRE80X0VOU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX0xETzRfU0RTTE9UX01BU0sgICAgICAgICAgICAgICAgIDB4MDNDMAorI2RlZmluZSBXTTgzNTBfTERPNF9VVlRPX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFdNODM1MF9MRE80X1NEU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDYKKworLyogQml0IHZhbHVlcyBmb3IgUjIxMCAoMHhEMikgKi8KKyNkZWZpbmUgV004MzUwX0xETzRfRVJSQUNUX05PTkUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0xETzRfRVJSQUNUX1NIVVRET1dOX0NPTlYgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0xETzRfRVJSQUNUX1NIVVRET1dOX1NZUyAgICAgICAgICAgICAgIDIKKworLyoKKyAqIFIyMTEgKDB4RDMpIC0gTERPNCBMb3cgUG93ZXIKKyAqLworI2RlZmluZSBXTTgzNTBfTERPNF9ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgMHgzMDAwCisjZGVmaW5lIFdNODM1MF9MRE80X0hJQl9UUklHX01BU0sgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgV004MzUwX0xETzRfVklNR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxRgorCisvKgorICogUjIxNSAoMHhENykgLSBWQ0NfRkFVTFQgTWFza3MKKyAqLworI2RlZmluZSBXTTgzNTBfTFNfRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9MRE80X0ZBVUxUICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0xETzNfRkFVTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfTERPMl9GQVVMVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9MRE8xX0ZBVUxUICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0RDNl9GQVVMVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfREM1X0ZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9EQzRfRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0RDM19GQVVMVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfREMyX0ZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9EQzFfRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIyMTYgKDB4RDgpIC0gTWFpbiBCYW5kZ2FwIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfTUJHX0xPQURfRlVTRVMgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9NQkdfRlVTRV9XUFJFUCAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX01CR19GVVNFX1dSSVRFICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfTUJHX0ZVU0VfVFJJTV9NQVNLICAgICAgICAgICAgICAgMHgxRjAwCisjZGVmaW5lIFdNODM1MF9NQkdfVFJJTV9TUkMgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX01CR19VU0VSX1RSSU1fTUFTSyAgICAgICAgICAgICAgIDB4MDAxRgorCisvKgorICogUjIxNyAoMHhEOSkgLSBPU0MgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9PU0NfTE9BRF9GVVNFUyAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX09TQ19GVVNFX1dQUkVQICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfT1NDX0ZVU0VfV1JJVEUgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9PU0NfRlVTRV9UUklNX01BU0sgICAgICAgICAgICAgICAweDBGMDAKKyNkZWZpbmUgV004MzUwX09TQ19UUklNX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfT1NDX1VTRVJfVFJJTV9NQVNLICAgICAgICAgICAgICAgMHgwMDBGCisKKy8qCisgKiBSMjQ4ICgweEY4KSAtIERDREMxIEZvcmNlIFBXTQorICovCisjZGVmaW5lIFdNODM1MF9EQ0RDMV9GT1JDRV9QV01fRU5BICAgICAgICAgICAgICAweDAwMTAKKworLyoKKyAqIFIyNTAgKDB4RkEpIC0gRENEQzMgRm9yY2UgUFdNCisgKi8KKyNkZWZpbmUgV004MzUwX0RDREMzX0ZPUkNFX1BXTV9FTkEgICAgICAgICAgICAgIDB4MDAxMAorCisvKgorICogUjI1MSAoMHhGQikgLSBEQ0RDNCBGb3JjZSBQV00KKyAqLworI2RlZmluZSBXTTgzNTBfRENEQzRfRk9SQ0VfUFdNX0VOQSAgICAgICAgICAgICAgMHgwMDEwCisKKy8qCisgKiBSMjUzICgweEZEKSAtIERDREMxIEZvcmNlIFBXTQorICovCisjZGVmaW5lIFdNODM1MF9EQ0RDNl9GT1JDRV9QV01fRU5BICAgICAgICAgICAgICAweDAwMTAKKworLyoKKyAqIERDREMncworICovCisjZGVmaW5lIFdNODM1MF9EQ0RDXzEJCQkJMAorI2RlZmluZSBXTTgzNTBfRENEQ18yCQkJCTEKKyNkZWZpbmUgV004MzUwX0RDRENfMwkJCQkyCisjZGVmaW5lIFdNODM1MF9EQ0RDXzQJCQkJMworI2RlZmluZSBXTTgzNTBfRENEQ181CQkJCTQKKyNkZWZpbmUgV004MzUwX0RDRENfNgkJCQk1CisKKy8qIERDREMgbW9kZXMgKi8KKyNkZWZpbmUgV004MzUwX0RDRENfQUNUSVZFX1NUQU5EQlkJCTAKKyNkZWZpbmUgV004MzUwX0RDRENfQUNUSVZFX1BVTFNFCQkxCisjZGVmaW5lIFdNODM1MF9EQ0RDX1NMRUVQX05PUk1BTAkJMAorI2RlZmluZSBXTTgzNTBfRENEQ19TTEVFUF9MT1cJCQkxCisKKy8qIERDREMgTG93IHBvd2VyIChIaWJlcm5hdGUpIG1vZGUgKi8KKyNkZWZpbmUgV004MzUwX0RDRENfSElCX01PREVfQ1VSCQkoMCA8PCAxMikKKyNkZWZpbmUgV004MzUwX0RDRENfSElCX01PREVfSU1BR0UJCSgxIDw8IDEyKQorI2RlZmluZSBXTTgzNTBfRENEQ19ISUJfTU9ERV9TVEFOREJZCQkoMiA8PCAxMikKKyNkZWZpbmUgV004MzUwX0RDRENfSElCX01PREVfTERPCQkoNCA8PCAxMikKKyNkZWZpbmUgV004MzUwX0RDRENfSElCX01PREVfTERPX0lNCQkoNSA8PCAxMikKKyNkZWZpbmUgV004MzUwX0RDRENfSElCX01PREVfRElTCQkoNyA8PCAxMikKKyNkZWZpbmUgV004MzUwX0RDRENfSElCX01PREVfTUFTSwkJKDcgPDwgMTIpCisKKy8qIERDREMgTG93IFBvd2VyIChIaWJlcm5hdGUpIHNpZ25hbCAqLworI2RlZmluZSBXTTgzNTBfRENEQ19ISUJfU0lHX1JFRwkJCSgwIDw8IDgpCisjZGVmaW5lIFdNODM1MF9EQ0RDX0hJQl9TSUdfTFBXUjEJCSgxIDw8IDgpCisjZGVmaW5lIFdNODM1MF9EQ0RDX0hJQl9TSUdfTFBXUjIJCSgyIDw8IDgpCisjZGVmaW5lIFdNODM1MF9EQ0RDX0hJQl9TSUdfTFBXUjMJCSgzIDw8IDgpCisKKy8qIExETyBMb3cgcG93ZXIgKEhpYmVybmF0ZSkgbW9kZSAqLworI2RlZmluZSBXTTgzNTBfTERPX0hJQl9NT0RFX0lNQUdFCQkoMCA8PCAwKQorI2RlZmluZSBXTTgzNTBfTERPX0hJQl9NT0RFX0RJUwkJCSgxIDw8IDApCisKKy8qIExETyBMb3cgUG93ZXIgKEhpYmVybmF0ZSkgc2lnbmFsICovCisjZGVmaW5lIFdNODM1MF9MRE9fSElCX1NJR19SRUcJCQkoMCA8PCA4KQorI2RlZmluZSBXTTgzNTBfTERPX0hJQl9TSUdfTFBXUjEJCSgxIDw8IDgpCisjZGVmaW5lIFdNODM1MF9MRE9fSElCX1NJR19MUFdSMgkJKDIgPDwgOCkKKyNkZWZpbmUgV004MzUwX0xET19ISUJfU0lHX0xQV1IzCQkoMyA8PCA4KQorCisvKgorICogTERPcworICovCisjZGVmaW5lIFdNODM1MF9MRE9fMQkJCQk2CisjZGVmaW5lIFdNODM1MF9MRE9fMgkJCQk3CisjZGVmaW5lIFdNODM1MF9MRE9fMwkJCQk4CisjZGVmaW5lIFdNODM1MF9MRE9fNAkJCQk5CisKKy8qCisgKiBJU0lOS3MKKyAqLworI2RlZmluZSBXTTgzNTBfSVNJTktfQQkJCQkxMAorI2RlZmluZSBXTTgzNTBfSVNJTktfQgkJCQkxMQorCisjZGVmaW5lIFdNODM1MF9JU0lOS19NT0RFX0JPT1NUCQkJMAorI2RlZmluZSBXTTgzNTBfSVNJTktfTU9ERV9TV0lUQ0gJCTEKKyNkZWZpbmUgV004MzUwX0lTSU5LX0lMSU1fTk9STUFMCQkwCisjZGVmaW5lIFdNODM1MF9JU0lOS19JTElNX0xPVwkJCTEKKworI2RlZmluZSBXTTgzNTBfSVNJTktfRkxBU0hfRElTQUJMRQkJMAorI2RlZmluZSBXTTgzNTBfSVNJTktfRkxBU0hfRU5BQkxFCQkxCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9UUklHX0JJVAkJMAorI2RlZmluZSBXTTgzNTBfSVNJTktfRkxBU0hfVFJJR19HUElPCQkxCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9NT0RFX0VOCQkoMSA8PCAxMykKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX01PREVfRElTCQkoMCA8PCAxMykKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX0RVUl8zMk1TCQkoMCA8PCA4KQorI2RlZmluZSBXTTgzNTBfSVNJTktfRkxBU0hfRFVSXzY0TVMJCSgxIDw8IDgpCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9EVVJfOTZNUwkJKDIgPDwgOCkKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX0RVUl8xMDI0TVMJCSgzIDw8IDgpCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9PTl9JTlNUQU5UCQkoMCA8PCA0KQorI2RlZmluZSBXTTgzNTBfSVNJTktfRkxBU0hfT05fMF8yNVMJCSgxIDw8IDQpCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9PTl8wXzUwUwkJKDIgPDwgNCkKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX09OXzFfMDBTCQkoMyA8PCA0KQorI2RlZmluZSBXTTgzNTBfSVNJTktfRkxBU0hfT05fMV85NVMJCSgxIDw8IDQpCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9PTl8zXzkxUwkJKDIgPDwgNCkKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX09OXzdfODBTCQkoMyA8PCA0KQorI2RlZmluZSBXTTgzNTBfSVNJTktfRkxBU0hfT0ZGX0lOU1RBTlQJCSgwIDw8IDApCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9PRkZfMF8yNVMJCSgxIDw8IDApCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9PRkZfMF81MFMJCSgyIDw8IDApCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9PRkZfMV8wMFMJCSgzIDw8IDApCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9PRkZfMV85NVMJCSgxIDw8IDApCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9PRkZfM185MVMJCSgyIDw8IDApCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9PRkZfN184MFMJCSgzIDw8IDApCisKKy8qCisgKiBSZWd1bGF0b3IgSW50ZXJydXB0cy4KKyAqLworI2RlZmluZSBXTTgzNTBfSVJRX0NTMQkJCQkxMworI2RlZmluZSBXTTgzNTBfSVJRX0NTMgkJCQkxNAorI2RlZmluZSBXTTgzNTBfSVJRX1VWX0xETzQJCQkyNQorI2RlZmluZSBXTTgzNTBfSVJRX1VWX0xETzMJCQkyNgorI2RlZmluZSBXTTgzNTBfSVJRX1VWX0xETzIJCQkyNworI2RlZmluZSBXTTgzNTBfSVJRX1VWX0xETzEJCQkyOAorI2RlZmluZSBXTTgzNTBfSVJRX1VWX0RDNgkJCTI5CisjZGVmaW5lIFdNODM1MF9JUlFfVVZfREM1CQkJMzAKKyNkZWZpbmUgV004MzUwX0lSUV9VVl9EQzQJCQkzMQorI2RlZmluZSBXTTgzNTBfSVJRX1VWX0RDMwkJCTMyCisjZGVmaW5lIFdNODM1MF9JUlFfVVZfREMyCQkJMzMKKyNkZWZpbmUgV004MzUwX0lSUV9VVl9EQzEJCQkzNAorI2RlZmluZSBXTTgzNTBfSVJRX09DX0xTCQkJMzUKKworI2RlZmluZSBOVU1fV004MzUwX1JFR1VMQVRPUlMJCQkxMgorCitzdHJ1Y3Qgd204MzUwOworc3RydWN0IHBsYXRmb3JtX2RldmljZTsKK3N0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhOworCitzdHJ1Y3Qgd204MzUwX3BtaWMgeworCS8qIElTSU5LIHRvIERDREMgbWFwcGluZyAqLworCWludCBpc2lua19BX2RjZGM7CisJaW50IGlzaW5rX0JfZGNkYzsKKworCS8qIGhpYmVybmF0ZSBjb25maWdzICovCisJdTE2IGRjZGMxX2hpYl9tb2RlOworCXUxNiBkY2RjM19oaWJfbW9kZTsKKwl1MTYgZGNkYzRfaGliX21vZGU7CisJdTE2IGRjZGM2X2hpYl9tb2RlOworCisJLyogcmVndWxhdG9yIGRldmljZXMgKi8KKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2W05VTV9XTTgzNTBfUkVHVUxBVE9SU107Cit9OworCitpbnQgd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcihzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCByZWcsCisJCQkgICAgICBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdGRhdGEpOworCisvKgorICogQWRkaXRpb25hbCBEQ0RDIGNvbnRyb2wgbm90IHN1cHBvcnRlZCB2aWEgcmVndWxhdG9yIEFQSQorICovCitpbnQgd204MzUwX2RjZGNfc2V0X3Nsb3Qoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgZGNkYywgdTE2IHN0YXJ0LAorCQkJIHUxNiBzdG9wLCB1MTYgZmF1bHQpOworaW50IHdtODM1MF9kY2RjMjVfc2V0X21vZGUoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgZGNkYywgdTE2IG1vZGUsCisJCQkgICB1MTYgaWxpbSwgdTE2IHJhbXAsIHUxNiBmZWVkYmFjayk7CisKKy8qCisgKiBBZGRpdGlvbmFsIExETyBjb250cm9sIG5vdCBzdXBwb3J0ZWQgdmlhIHJlZ3VsYXRvciBBUEkKKyAqLworaW50IHdtODM1MF9sZG9fc2V0X3Nsb3Qoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgbGRvLCB1MTYgc3RhcnQsIHUxNiBzdG9wKTsKKworLyoKKyAqIEFkZGl0aW9uYWwgSVNJTksgY29udHJvbCBub3Qgc3VwcG9ydGVkIHZpYSByZWd1bGF0b3IgQVBJCisgKi8KK2ludCB3bTgzNTBfaXNpbmtfc2V0X2ZsYXNoKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlzaW5rLCB1MTYgbW9kZSwKKwkJCSAgIHUxNiB0cmlnZ2VyLCB1MTYgZHVyYXRpb24sIHUxNiBvbl9yYW1wLAorCQkJICAgdTE2IG9mZl9yYW1wLCB1MTYgZHJpdmUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9ydGMuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9ydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmRhNjllCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3J0Yy5oCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogcnRjLmggIC0tICBSVEMgZHJpdmVyIGZvciBXb2xmc29uIFdNODM1MCBQTUlDCisgKgorICogQ29weXJpZ2h0IDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NRkRfV004MzUwX1JUQ19ICisjZGVmaW5lIF9fTElOVVhfTUZEX1dNODM1MF9SVENfSAorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgV004MzUwX1JUQ19TRUNPTkRTX01JTlVURVMgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgV004MzUwX1JUQ19IT1VSU19EQVkgICAgICAgICAgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgV004MzUwX1JUQ19EQVRFX01PTlRIICAgICAgICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgV004MzUwX1JUQ19ZRUFSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgV004MzUwX0FMQVJNX1NFQ09ORFNfTUlOVVRFUyAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgV004MzUwX0FMQVJNX0hPVVJTX0RBWSAgICAgICAgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgV004MzUwX0FMQVJNX0RBVEVfTU9OVEggICAgICAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgV004MzUwX1JUQ19USU1FX0NPTlRST0wgICAgICAgICAgICAgICAgIDB4MTcKKworLyoKKyAqIFIxNiAoMHgxMCkgLSBSVEMgU2Vjb25kcy9NaW51dGVzCisgKi8KKyNkZWZpbmUgV004MzUwX1JUQ19NSU5TX01BU0sgICAgICAgICAgICAgICAgICAgIDB4N0YwMAorI2RlZmluZSBXTTgzNTBfUlRDX01JTlNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFdNODM1MF9SVENfU0VDU19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YKKyNkZWZpbmUgV004MzUwX1JUQ19TRUNTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogUjE3ICgweDExKSAtIFJUQyBIb3Vycy9EYXkKKyAqLworI2RlZmluZSBXTTgzNTBfUlRDX0RBWV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNzAwCisjZGVmaW5lIFdNODM1MF9SVENfREFZX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgV004MzUwX1JUQ19IUE1fTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfUlRDX0hQTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9SVENfSFJTX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMUYKKyNkZWZpbmUgV004MzUwX1JUQ19IUlNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKiBCaXQgdmFsdWVzIGZvciBSMjEgKDB4MTUpICovCisjZGVmaW5lIFdNODM1MF9SVENfREFZX1NVTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX1JUQ19EQVlfTU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfUlRDX0RBWV9UVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9SVENfREFZX1dFRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV004MzUwX1JUQ19EQVlfVEhVICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTTgzNTBfUlRDX0RBWV9GUkkgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFdNODM1MF9SVENfREFZX1NBVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKworI2RlZmluZSBXTTgzNTBfUlRDX0hQTV9BTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9SVENfSFBNX1BNICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLyoKKyAqIFIxOCAoMHgxMikgLSBSVEMgRGF0ZS9Nb250aAorICovCisjZGVmaW5lIFdNODM1MF9SVENfTVRIX01BU0sgICAgICAgICAgICAgICAgICAgICAweDFGMDAKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBXTTgzNTBfUlRDX0RBVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDNGCisjZGVmaW5lIFdNODM1MF9SVENfREFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyogQml0IHZhbHVlcyBmb3IgUjIyICgweDE2KSAqLworI2RlZmluZSBXTTgzNTBfUlRDX01USF9KQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9SVENfTVRIX0ZFQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfTUFSICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBXTTgzNTBfUlRDX01USF9BUFIgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFdNODM1MF9SVENfTVRIX01BWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfSlVOICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBXTTgzNTBfUlRDX01USF9KVUwgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIFdNODM1MF9SVENfTVRIX0FVRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfU0VQICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBXTTgzNTBfUlRDX01USF9PQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFdNODM1MF9SVENfTVRIX05PViAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfREVDICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBXTTgzNTBfUlRDX01USF9KQU5fQkNEICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFdNODM1MF9SVENfTVRIX0ZFQl9CQ0QgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfTUFSX0JDRCAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBXTTgzNTBfUlRDX01USF9BUFJfQkNEICAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFdNODM1MF9SVENfTVRIX01BWV9CQ0QgICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfSlVOX0JDRCAgICAgICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBXTTgzNTBfUlRDX01USF9KVUxfQkNEICAgICAgICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIFdNODM1MF9SVENfTVRIX0FVR19CQ0QgICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfU0VQX0JDRCAgICAgICAgICAgICAgICAgICAgMHgwOQorI2RlZmluZSBXTTgzNTBfUlRDX01USF9PQ1RfQkNEICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIFdNODM1MF9SVENfTVRIX05PVl9CQ0QgICAgICAgICAgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfREVDX0JDRCAgICAgICAgICAgICAgICAgICAgMHgxMgorCisvKgorICogUjE5ICgweDEzKSAtIFJUQyBZZWFyCisgKi8KKyNkZWZpbmUgV004MzUwX1JUQ19ZSFVORFJFRFNfTUFTSyAgICAgICAgICAgICAgIDB4M0YwMAorI2RlZmluZSBXTTgzNTBfUlRDX1lIVU5EUkVEU19TSElGVCAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFdNODM1MF9SVENfWVVOSVRTX01BU0sgICAgICAgICAgICAgICAgICAweDAwRkYKKyNkZWZpbmUgV004MzUwX1JUQ19ZVU5JVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogUjIwICgweDE0KSAtIEFsYXJtIFNlY29uZHMvTWludXRlcworICovCisjZGVmaW5lIFdNODM1MF9SVENfQUxNTUlOU19NQVNLICAgICAgICAgICAgICAgICAweDdGMDAKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NSU5TX1NISUZUICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTVNFQ1NfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDdGCisjZGVmaW5lIFdNODM1MF9SVENfQUxNU0VDU19TSElGVCAgICAgICAgICAgICAgICAgICAgIDAKKworLyogQml0IHZhbHVlcyBmb3IgUjIwICgweDE0KSAqLworI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1JTlNfRE9OVF9DQVJFICAgICAgICAgICAgICAgIC0xCisjZGVmaW5lIFdNODM1MF9SVENfQUxNU0VDU19ET05UX0NBUkUgICAgICAgICAgICAgICAgLTEKKworLyoKKyAqIFIyMSAoMHgxNSkgLSBBbGFybSBIb3Vycy9EYXkKKyAqLworI2RlZmluZSBXTTgzNTBfUlRDX0FMTURBWV9NQVNLICAgICAgICAgICAgICAgICAgMHgwRjAwCisjZGVmaW5lIFdNODM1MF9SVENfQUxNREFZX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1IUE1fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTUhQTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9SVENfQUxNSFJTX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUYKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1IUlNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMAorCisvKiBCaXQgdmFsdWVzIGZvciBSMjEgKDB4MTUpICovCisjZGVmaW5lIFdNODM1MF9SVENfQUxNREFZX0RPTlRfQ0FSRSAgICAgICAgICAgICAgICAgLTEKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1EQVlfU1VOICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfUlRDX0FMTURBWV9NT04gICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9SVENfQUxNREFZX1RVRSAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1EQVlfV0VEICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTURBWV9USFUgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9SVENfQUxNREFZX0ZSSSAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1EQVlfU0FUICAgICAgICAgICAgICAgICAgICAgICAgNworCisjZGVmaW5lIFdNODM1MF9SVENfQUxNSFBNX0FNICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1IUE1fUE0gICAgICAgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFdNODM1MF9SVENfQUxNSFJTX0RPTlRfQ0FSRSAgICAgICAgICAgICAgICAgLTEKKworLyoKKyAqIFIyMiAoMHgxNikgLSBBbGFybSBEYXRlL01vbnRoCisgKi8KKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfTUFTSyAgICAgICAgICAgICAgICAgIDB4MUYwMAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFdNODM1MF9SVENfQUxNREFURV9NQVNLICAgICAgICAgICAgICAgICAweDAwM0YKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1EQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMAorCisvKiBCaXQgdmFsdWVzIGZvciBSMjIgKDB4MTYpICovCisjZGVmaW5lIFdNODM1MF9SVENfQUxNREFURV9ET05UX0NBUkUgICAgICAgICAgICAgICAgLTEKKworI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9ET05UX0NBUkUgICAgICAgICAgICAgICAgIC0xCisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX0pBTiAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfRkVCICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9NQVIgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX0FQUiAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfTUFZICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9KVU4gICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX0pVTCAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfQVVHICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9TRVAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX09DVCAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfTk9WICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9ERUMgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX0pBTl9CQ0QgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfRkVCX0JDRCAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9NQVJfQkNEICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX0FQUl9CQ0QgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfTUFZX0JDRCAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9KVU5fQkNEICAgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX0pVTF9CQ0QgICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfQVVHX0JDRCAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9TRVBfQkNEICAgICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX09DVF9CQ0QgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfTk9WX0JDRCAgICAgICAgICAgICAgICAgMHgxMQorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9ERUNfQkNEICAgICAgICAgICAgICAgICAweDEyCisKKy8qCisgKiBSMjMgKDB4MTcpIC0gUlRDIFRpbWUgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9SVENfQkNEICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX1JUQ19CQ0RfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfUlRDX0JDRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFdNODM1MF9SVENfMTJIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX1JUQ18xMkhSX01BU0sgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfUlRDXzEySFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFdNODM1MF9SVENfRFNUICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX1JUQ19EU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfUlRDX0RTVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFdNODM1MF9SVENfU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX1JUQ19TRVRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfUlRDX1NFVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFdNODM1MF9SVENfU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX1JUQ19TVFNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfUlRDX1NUU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFdNODM1MF9SVENfQUxNU0VUICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1TRVRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTVNFVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFdNODM1MF9SVENfQUxNU1RTICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1TVFNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTVNUU19TSElGVCAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFdNODM1MF9SVENfUElOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNzAKKyNkZWZpbmUgV004MzUwX1JUQ19QSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3MAorI2RlZmluZSBXTTgzNTBfUlRDX1BJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFdNODM1MF9SVENfRFNXICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEYKKyNkZWZpbmUgV004MzUwX1JUQ19EU1dfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwRgorI2RlZmluZSBXTTgzNTBfUlRDX0RTV19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIyMyAoMHgxNykgKi8KKyNkZWZpbmUgV004MzUwX1JUQ19CQ0RfQklOQVJZICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfUlRDX0JDRF9CQ0QgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX1JUQ18xMkhSXzI0SFIgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfUlRDXzEySFJfMTJIUiAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX1JUQ19EU1RfRElTQUJMRUQgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfUlRDX0RTVF9FTkFCTEVEICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX1JUQ19TRVRfUlVOICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfUlRDX1NFVF9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX1JUQ19TVFNfUlVOTklORyAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfUlRDX1NUU19TVE9QUEVEICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1TRVRfUlVOICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTVNFVF9TRVQgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1TVFNfUlVOTklORyAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTVNUU19TVE9QUEVEICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX1JUQ19QSU5UX0RJU0FCTEVEICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfUlRDX1BJTlRfU0VDUyAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9SVENfUElOVF9NSU5TICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgV004MzUwX1JUQ19QSU5UX0hSUyAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBXTTgzNTBfUlRDX1BJTlRfREFZUyAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFdNODM1MF9SVENfUElOVF9NVEhTICAgICAgICAgICAgICAgICAgICAgICAgIDUKKworI2RlZmluZSBXTTgzNTBfUlRDX0RTV19ESVNBQkxFRCAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9SVENfRFNXXzFIWiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX1JUQ19EU1dfMkhaICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfUlRDX0RTV180SFogICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9SVENfRFNXXzhIWiAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV004MzUwX1JUQ19EU1dfMTZIWiAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTTgzNTBfUlRDX0RTV18zMkhaICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFdNODM1MF9SVENfRFNXXzY0SFogICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgV004MzUwX1JUQ19EU1dfMTI4SFogICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBXTTgzNTBfUlRDX0RTV18yNTZIWiAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFdNODM1MF9SVENfRFNXXzUxMkhaICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX1JUQ19EU1dfMTAyNEhaICAgICAgICAgICAgICAgICAgICAgICAxMQorCisvKgorICogUjIxOCAoMHhEQSkgLSBSVEMgVGljayBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX1JUQ19USUNLU1RTICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfUlRDX0NMS1NSQyAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9SVENfVFJJTV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAzRkYKKworLyoKKyAqIFJUQyBJbnRlcnJ1cHRzLgorICovCisjZGVmaW5lIFdNODM1MF9JUlFfUlRDX1BFUgkJCTcKKyNkZWZpbmUgV004MzUwX0lSUV9SVENfU0VDCQkJOAorI2RlZmluZSBXTTgzNTBfSVJRX1JUQ19BTE0JCQk5CisKK3N0cnVjdCB3bTgzNTBfcnRjIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvc3VwcGx5LmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvc3VwcGx5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4ZjNjZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9zdXBwbHkuaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIHN1cHBseS5oICAtLSAgUG93ZXIgU3VwcGx5IERyaXZlciBmb3IgV29sZnNvbiBXTTgzNTAgUE1JQworICoKKyAqIENvcHlyaWdodCAyMDA3IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9XTTgzNTBfU1VQUExZX0hfCisjZGVmaW5lIF9fTElOVVhfTUZEX1dNODM1MF9TVVBQTFlfSF8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisvKgorICogQ2hhcmdlciByZWdpc3RlcnMKKyAqLworI2RlZmluZSBXTTgzNTBfQkFUVEVSWV9DSEFSR0VSX0NPTlRST0xfMSAgICAgICAgMHhBOAorI2RlZmluZSBXTTgzNTBfQkFUVEVSWV9DSEFSR0VSX0NPTlRST0xfMiAgICAgICAgMHhBOQorI2RlZmluZSBXTTgzNTBfQkFUVEVSWV9DSEFSR0VSX0NPTlRST0xfMyAgICAgICAgMHhBQQorCisvKgorICogUjE2OCAoMHhBOCkgLSBCYXR0ZXJ5IENoYXJnZXIgQ29udHJvbCAxCisgKi8KKyNkZWZpbmUgV004MzUwX0NIR19FTkFfUjE2OCAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfQ0hHX1RIUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9DSEdfRU9DX1NFTF9NQVNLICAgICAgICAgICAgICAgICAweDFDMDAKKyNkZWZpbmUgV004MzUwX0NIR19UUklDS0xFX1RFTVBfQ0hPS0UgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfQ0hHX1RSSUNLTEVfVVNCX0NIT0tFICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9DSEdfUkVDT1ZFUl9UICAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX0NIR19FTkRfQUNUICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfQ0hHX0ZBU1QgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9DSEdfRkFTVF9VU0JfVEhST1RUTEUgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0NIR19OVENfTU9OICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfQ0hHX0JBVFRfSE9UX01PTiAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9DSEdfQkFUVF9DT0xEX01PTiAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0NIR19DSElQX1RFTVBfTU9OICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjE2OSAoMHhBOSkgLSBCYXR0ZXJ5IENoYXJnZXIgQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004MzUwX0NIR19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfQ0hHX1BBVVNFICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9DSEdfU1RTX01BU0sgICAgICAgICAgICAgICAgICAgICAweDMwMDAKKyNkZWZpbmUgV004MzUwX0NIR19USU1FX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MEYwMAorI2RlZmluZSBXTTgzNTBfQ0hHX01BU0tfV0FMTF9GQiAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9DSEdfVFJJQ0tMRV9TRUwgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0NIR19WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBXTTgzNTBfQ0hHX0lTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDBGCisjZGVmaW5lIFdNODM1MF9DSEdfU1RTX09GRiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgV004MzUwX0NIR19TVFNfVFJJQ0tMRSAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfQ0hHX1NUU19GQVNUICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisKKy8qCisgKiBSMTcwICgweEFBKSAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDMKKyAqLworI2RlZmluZSBXTTgzNTBfQ0hHX1RIUk9UVExFX1RfTUFTSyAgICAgICAgICAgICAgMHgwMDYwCisjZGVmaW5lIFdNODM1MF9DSEdfU01BUlQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0NIR19USU1FUl9BREpUX01BU0sgICAgICAgICAgICAgIDB4MDAwRgorCisvKgorICogQ2hhcmdlciBJbnRlcnJ1cHRzCisgKi8KKyNkZWZpbmUgV004MzUwX0lSUV9DSEdfQkFUX0hPVAkJCTAKKyNkZWZpbmUgV004MzUwX0lSUV9DSEdfQkFUX0NPTEQJCQkxCisjZGVmaW5lIFdNODM1MF9JUlFfQ0hHX0JBVF9GQUlMCQkJMgorI2RlZmluZSBXTTgzNTBfSVJRX0NIR19UTwkJCTMKKyNkZWZpbmUgV004MzUwX0lSUV9DSEdfRU5ECQkJNAorI2RlZmluZSBXTTgzNTBfSVJRX0NIR19TVEFSVAkJCTUKKyNkZWZpbmUgV004MzUwX0lSUV9DSEdfRkFTVF9SRFkJCQk2CisjZGVmaW5lIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzNQOQkJMTAKKyNkZWZpbmUgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1AxCQkxMQorI2RlZmluZSBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8yUDg1CQkxMgorCisvKgorICogQ2hhcmdlciBQb2xpY3kKKyAqLworI2RlZmluZSBXTTgzNTBfQ0hHX1RSSUNLTEVfNTBtQQkJCSgwIDw8IDYpCisjZGVmaW5lIFdNODM1MF9DSEdfVFJJQ0tMRV8xMDBtQQkJKDEgPDwgNikKKyNkZWZpbmUgV004MzUwX0NIR180XzA1VgkJCSgwIDw8IDQpCisjZGVmaW5lIFdNODM1MF9DSEdfNF8xMFYJCQkoMSA8PCA0KQorI2RlZmluZSBXTTgzNTBfQ0hHXzRfMTVWCQkJKDIgPDwgNCkKKyNkZWZpbmUgV004MzUwX0NIR180XzIwVgkJCSgzIDw8IDQpCisjZGVmaW5lIFdNODM1MF9DSEdfRkFTVF9MSU1JVF9tQSh4KQkJKCh4IC8gNTApICYgMHhmKQorI2RlZmluZSBXTTgzNTBfQ0hHX0VPQ19tQSh4KQkJCSgoKHggLSAxMCkgJiAweDcpIDw8IDEwKQorI2RlZmluZSBXTTgzNTBfQ0hHX1RSSUNLTEVfM18xVgkJCSgwIDw8IDEzKQorI2RlZmluZSBXTTgzNTBfQ0hHX1RSSUNLTEVfM185VgkJCSgxIDw8IDEzKQorCisvKgorICogU3VwcGx5IFJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBXTTgzNTBfVVNCX1ZPTFRBR0VfUkVBREJBQ0sgICAgICAgICAgICAgMHg5QworI2RlZmluZSBXTTgzNTBfTElORV9WT0xUQUdFX1JFQURCQUNLICAgICAgICAgICAgMHg5RAorI2RlZmluZSBXTTgzNTBfQkFUVF9WT0xUQUdFX1JFQURCQUNLICAgICAgICAgICAgMHg5RQorCisvKgorICogU3VwcGx5IEludGVycnVwdHMuCisgKi8KKyNkZWZpbmUgV004MzUwX0lSUV9VU0JfTElNSVQJCQkxNQorI2RlZmluZSBXTTgzNTBfSVJRX0VYVF9VU0JfRkIJCQkzNgorI2RlZmluZSBXTTgzNTBfSVJRX0VYVF9XQUxMX0ZCCQkJMzcKKyNkZWZpbmUgV004MzUwX0lSUV9FWFRfQkFUX0ZCCQkJMzgKKworc3RydWN0IHdtODM1MF9wb3dlciB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3dkdC5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3dkdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MTM1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvd2R0LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIHdkdC5oICAtLSAgV2F0Y2hkb2cgRHJpdmVyIGZvciBXb2xmc29uIFdNODM1MCBQTUlDCisgKgorICogQ29weXJpZ2h0IDIwMDcsIDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NRkRfV004MzUwX1dEVF9IXworI2RlZmluZSBfX0xJTlVYX01GRF9XTTgzNTBfV0RUX0hfCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2RlZmluZSBXTTgzNTBfV0RPR19ISUJfTU9ERSAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9XRE9HX0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX1dET0dfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBXTTgzNTBfV0RPR19UT19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDA3CisKKyNkZWZpbmUgV004MzUwX0lSUV9TWVNfV0RPR19UTwkJCTI0CisKK3N0cnVjdCB3bTgzNTBfd2R0IHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtYXVkaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NjQwZTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtYXVkaW8uaApAQCAtMCwwICsxLDExODYgQEAKKy8qCisgKiB3bTg0MDAgcHJpdmF0ZSBkZWZpbml0aW9ucyBmb3IgYXVkaW8KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9XTTg0MDBfQVVESU9fSAorI2RlZmluZSBfX0xJTlVYX01GRF9XTTg0MDBfQVVESU9fSAorCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODQwMC1hdWRpby5oPgorCisvKgorICogUjIgKDB4MDIpIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkKKyAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBDT0RFQ19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ09ERUNfRU5BICovCisjZGVmaW5lIFdNODQwMF9DT0RFQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIENPREVDX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDT0RFQ19FTkEgKi8KKyNkZWZpbmUgV004NDAwX1NZU0NMS19FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogU1lTQ0xLX0VOQSAqLworI2RlZmluZSBXTTg0MDBfU1lTQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBTWVNDTEtfRU5BICovCisjZGVmaW5lIFdNODQwMF9TWVNDTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIFNZU0NMS19FTkEgKi8KKyNkZWZpbmUgV004NDAwX1NZU0NMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1lTQ0xLX0VOQSAqLworI2RlZmluZSBXTTg0MDBfU1BLX01JWF9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBTUEtfTUlYX0VOQSAqLworI2RlZmluZSBXTTg0MDBfU1BLX01JWF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBTUEtfTUlYX0VOQSAqLworI2RlZmluZSBXTTg0MDBfU1BLX01JWF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEzICAvKiBTUEtfTUlYX0VOQSAqLworI2RlZmluZSBXTTg0MDBfU1BLX01JWF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtfTUlYX0VOQSAqLworI2RlZmluZSBXTTg0MDBfU1BLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBTUEtfRU5BICovCisjZGVmaW5lIFdNODQwMF9TUEtfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFNQS19FTkEgKi8KKyNkZWZpbmUgV004NDAwX1NQS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogU1BLX0VOQSAqLworI2RlZmluZSBXTTg0MDBfU1BLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtfRU5BICovCisjZGVmaW5lIFdNODQwMF9PVVQzX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIE9VVDNfRU5BICovCisjZGVmaW5lIFdNODQwMF9PVVQzX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIE9VVDNfRU5BICovCisjZGVmaW5lIFdNODQwMF9PVVQzX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIE9VVDNfRU5BICovCisjZGVmaW5lIFdNODQwMF9PVVQzX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9VVDNfRU5BICovCisjZGVmaW5lIFdNODQwMF9PVVQ0X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIE9VVDRfRU5BICovCisjZGVmaW5lIFdNODQwMF9PVVQ0X0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIE9VVDRfRU5BICovCisjZGVmaW5lIFdNODQwMF9PVVQ0X0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIE9VVDRfRU5BICovCisjZGVmaW5lIFdNODQwMF9PVVQ0X0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9VVDRfRU5BICovCisjZGVmaW5lIFdNODQwMF9MT1VUX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIExPVVRfRU5BICovCisjZGVmaW5lIFdNODQwMF9MT1VUX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIExPVVRfRU5BICovCisjZGVmaW5lIFdNODQwMF9MT1VUX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIExPVVRfRU5BICovCisjZGVmaW5lIFdNODQwMF9MT1VUX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPVVRfRU5BICovCisjZGVmaW5lIFdNODQwMF9ST1VUX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJPVVRfRU5BICovCisjZGVmaW5lIFdNODQwMF9ST1VUX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJPVVRfRU5BICovCisjZGVmaW5lIFdNODQwMF9ST1VUX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFJPVVRfRU5BICovCisjZGVmaW5lIFdNODQwMF9ST1VUX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPVVRfRU5BICovCisjZGVmaW5lIFdNODQwMF9NSUMxQklBU19FTkEgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JQzFCSUFTX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTUlDMUJJQVNfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBNSUMxQklBU19FTkEgKi8KKyNkZWZpbmUgV004NDAwX01JQzFCSUFTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlDMUJJQVNfRU5BICovCisjZGVmaW5lIFdNODQwMF9NSUMxQklBU19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQzFCSUFTX0VOQSAqLworI2RlZmluZSBXTTg0MDBfVk1JRF9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA2ICAvKiBWTUlEX01PREUgLSBbMjoxXSAqLworI2RlZmluZSBXTTg0MDBfVk1JRF9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBWTUlEX01PREUgLSBbMjoxXSAqLworI2RlZmluZSBXTTg0MDBfVk1JRF9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBWTUlEX01PREUgLSBbMjoxXSAqLworI2RlZmluZSBXTTg0MDBfVlJFRl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWUkVGX0VOQSAqLworI2RlZmluZSBXTTg0MDBfVlJFRl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWUkVGX0VOQSAqLworI2RlZmluZSBXTTg0MDBfVlJFRl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBWUkVGX0VOQSAqLworI2RlZmluZSBXTTg0MDBfVlJFRl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBWUkVGX0VOQSAqLworCisvKgorICogUjMgKDB4MDMpIC0gUG93ZXIgTWFuYWdlbWVudCAoMikKKyAqLworI2RlZmluZSBXTTg0MDBfRkxMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBGTExfRU5BICovCisjZGVmaW5lIFdNODQwMF9GTExfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEZMTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogRkxMX0VOQSAqLworI2RlZmluZSBXTTg0MDBfRkxMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfRU5BICovCisjZGVmaW5lIFdNODQwMF9UU0hVVF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFRTSFVUX0VOQSAqLworI2RlZmluZSBXTTg0MDBfVFNIVVRfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBUU0hVVF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1RTSFVUX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogVFNIVVRfRU5BICovCisjZGVmaW5lIFdNODQwMF9UU0hVVF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRTSFVUX0VOQSAqLworI2RlZmluZSBXTTg0MDBfVFNIVVRfT1BESVMgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBUU0hVVF9PUERJUyAqLworI2RlZmluZSBXTTg0MDBfVFNIVVRfT1BESVNfTUFTSyAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBUU0hVVF9PUERJUyAqLworI2RlZmluZSBXTTg0MDBfVFNIVVRfT1BESVNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEzICAvKiBUU0hVVF9PUERJUyAqLworI2RlZmluZSBXTTg0MDBfVFNIVVRfT1BESVNfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBUU0hVVF9PUERJUyAqLworI2RlZmluZSBXTTg0MDBfT1BDTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004NDAwX09QQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODQwMF9PUENMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg0MDBfT1BDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FJTkxfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlOTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FJTkxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlOTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FJTkxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogQUlOTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FJTkxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlOTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FJTlJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlOUl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FJTlJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlOUl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FJTlJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlOUl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FJTlJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlOUl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xJTjM0X0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElOMzRfRU5BICovCisjZGVmaW5lIFdNODQwMF9MSU4zNF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTjM0X0VOQSAqLworI2RlZmluZSBXTTg0MDBfTElOMzRfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMSU4zNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xJTjM0X0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTElOMzRfRU5BICovCisjZGVmaW5lIFdNODQwMF9MSU4xMl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTjEyX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTElOMTJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSU4xMl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xJTjEyX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTElOMTJfRU5BICovCisjZGVmaW5lIFdNODQwMF9MSU4xMl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTjEyX0VOQSAqLworI2RlZmluZSBXTTg0MDBfUklOMzRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBSSU4zNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JJTjM0X0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogUklOMzRfRU5BICovCisjZGVmaW5lIFdNODQwMF9SSU4zNF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFJJTjM0X0VOQSAqLworI2RlZmluZSBXTTg0MDBfUklOMzRfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSSU4zNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JJTjEyX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUklOMTJfRU5BICovCisjZGVmaW5lIFdNODQwMF9SSU4xMl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFJJTjEyX0VOQSAqLworI2RlZmluZSBXTTg0MDBfUklOMTJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBSSU4xMl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JJTjEyX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUklOMTJfRU5BICovCisjZGVmaW5lIFdNODQwMF9BRENMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODQwMF9BRENMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODQwMF9BRENMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODQwMF9BRENMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODQwMF9BRENSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ1JfRU5BICovCisjZGVmaW5lIFdNODQwMF9BRENSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ1JfRU5BICovCisjZGVmaW5lIFdNODQwMF9BRENSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ1JfRU5BICovCisjZGVmaW5lIFdNODQwMF9BRENSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ1JfRU5BICovCisKKy8qCisgKiBSNCAoMHgwNCkgLSBQb3dlciBNYW5hZ2VtZW50ICgzKQorICovCisjZGVmaW5lIFdNODQwMF9MT05fRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIExPTl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPTl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogTE9OX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTE9OX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBMT05fRU5BICovCisjZGVmaW5lIFdNODQwMF9MT05fRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPTl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPUF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogTE9QX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTE9QX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBMT1BfRU5BICovCisjZGVmaW5lIFdNODQwMF9MT1BfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIExPUF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9QX0VOQSAqLworI2RlZmluZSBXTTg0MDBfUk9OX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBST05fRU5BICovCisjZGVmaW5lIFdNODQwMF9ST05fRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFJPTl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPTl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMSAgLyogUk9OX0VOQSAqLworI2RlZmluZSBXTTg0MDBfUk9OX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBST05fRU5BICovCisjZGVmaW5lIFdNODQwMF9ST1BfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIFJPUF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPUF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogUk9QX0VOQSAqLworI2RlZmluZSBXTTg0MDBfUk9QX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBST1BfRU5BICovCisjZGVmaW5lIFdNODQwMF9ST1BfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPUF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPUEdBX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTE9QR0FfRU5BICovCisjZGVmaW5lIFdNODQwMF9MT1BHQV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExPUEdBX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTE9QR0FfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMT1BHQV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPUEdBX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9QR0FfRU5BICovCisjZGVmaW5lIFdNODQwMF9ST1BHQV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJPUEdBX0VOQSAqLworI2RlZmluZSBXTTg0MDBfUk9QR0FfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBST1BHQV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPUEdBX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogUk9QR0FfRU5BICovCisjZGVmaW5lIFdNODQwMF9ST1BHQV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPUEdBX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTE9NSVhfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMT01JWF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPTUlYX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTE9NSVhfRU5BICovCisjZGVmaW5lIFdNODQwMF9MT01JWF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExPTUlYX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTE9NSVhfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT01JWF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPTUlYX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUk9NSVhfRU5BICovCisjZGVmaW5lIFdNODQwMF9ST01JWF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFJPTUlYX0VOQSAqLworI2RlZmluZSBXTTg0MDBfUk9NSVhfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBST01JWF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPTUlYX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk9NSVhfRU5BICovCisjZGVmaW5lIFdNODQwMF9EQUNMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ0xfRU5BICovCisjZGVmaW5lIFdNODQwMF9EQUNMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ0xfRU5BICovCisjZGVmaW5lIFdNODQwMF9EQUNMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfRU5BICovCisjZGVmaW5lIFdNODQwMF9EQUNMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfRU5BICovCisjZGVmaW5lIFdNODQwMF9EQUNSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ1JfRU5BICovCisjZGVmaW5lIFdNODQwMF9EQUNSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ1JfRU5BICovCisjZGVmaW5lIFdNODQwMF9EQUNSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ1JfRU5BICovCisjZGVmaW5lIFdNODQwMF9EQUNSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ1JfRU5BICovCisKKy8qCisgKiBSNSAoMHgwNSkgLSBBdWRpbyBJbnRlcmZhY2UgKDEpCisgKi8KKyNkZWZpbmUgV004NDAwX0FJRkFEQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0FJRkFEQ0xfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0FJRkFEQ0xfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAxNSAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0FJRkFEQ0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0FJRkFEQ1JfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0FJRkFEQ1JfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0FJRkFEQ1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAxNCAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0FJRkFEQ1JfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0FJRkFEQ19URE0gICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGQURDX1RETSAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDX1RETV9NQVNLICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUZBRENfVERNICovCisjZGVmaW5lIFdNODQwMF9BSUZBRENfVERNX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEFJRkFEQ19URE0gKi8KKyNkZWZpbmUgV004NDAwX0FJRkFEQ19URE1fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGQURDX1RETSAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDX1RETV9DSEFOICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUZBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004NDAwX0FJRkFEQ19URE1fQ0hBTl9NQVNLICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGQURDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODQwMF9BSUZBRENfVERNX0NIQU5fU0hJRlQgICAgICAgICAgICAgICAgMTIgIC8qIEFJRkFEQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDX1RETV9DSEFOX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUZBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004NDAwX0FJRl9CQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODQwMF9BSUZfQkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg0MDBfQUlGX0JDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUZfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9CQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODQwMF9BSUZfTFJDTEtfSU5WICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9MUkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg0MDBfQUlGX0xSQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICA3ICAvKiBBSUZfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODQwMF9BSUZfTFJDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9XTF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MCAgLyogQUlGX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004NDAwX0FJRl9XTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogQUlGX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004NDAwX0FJRl9XTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004NDAwX0FJRl9XTF8xNkJJVFMJCQkoMCA8PCA1KQorI2RlZmluZSBXTTg0MDBfQUlGX1dMXzIwQklUUwkJCSgxIDw8IDUpCisjZGVmaW5lIFdNODQwMF9BSUZfV0xfMjRCSVRTCQkJKDIgPDwgNSkKKyNkZWZpbmUgV004NDAwX0FJRl9XTF8zMkJJVFMJCQkoMyA8PCA1KQorI2RlZmluZSBXTTg0MDBfQUlGX0ZNVF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDE4ICAvKiBBSUZfRk1UIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004NDAwX0FJRl9GTVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogQUlGX0ZNVCAtIFs0OjNdICovCisjZGVmaW5lIFdNODQwMF9BSUZfRk1UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRl9GTVQgLSBbNDozXSAqLworI2RlZmluZSBXTTg0MDBfQUlGX0ZNVF9SSUdIVEoJCQkoMCA8PCAzKQorI2RlZmluZSBXTTg0MDBfQUlGX0ZNVF9MRUZUSgkJCSgxIDw8IDMpCisjZGVmaW5lIFdNODQwMF9BSUZfRk1UX0kyUwkJCSgyIDw8IDMpCisjZGVmaW5lIFdNODQwMF9BSUZfRk1UX0RTUAkJCSgzIDw8IDMpCisKKy8qCisgKiBSNiAoMHgwNikgLSBBdWRpbyBJbnRlcmZhY2UgKDIpCisgKi8KKyNkZWZpbmUgV004NDAwX0RBQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogREFDTF9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0RBQ0xfU1JDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogREFDTF9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0RBQ0xfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogREFDTF9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0RBQ0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTF9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0RBQ1JfU1JDICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogREFDUl9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0RBQ1JfU1JDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogREFDUl9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0RBQ1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogREFDUl9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0RBQ1JfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDUl9TUkMgKi8KKyNkZWZpbmUgV004NDAwX0FJRkRBQ19URE0gICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGREFDX1RETSAqLworI2RlZmluZSBXTTg0MDBfQUlGREFDX1RETV9NQVNLICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUZEQUNfVERNICovCisjZGVmaW5lIFdNODQwMF9BSUZEQUNfVERNX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEFJRkRBQ19URE0gKi8KKyNkZWZpbmUgV004NDAwX0FJRkRBQ19URE1fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGREFDX1RETSAqLworI2RlZmluZSBXTTg0MDBfQUlGREFDX1RETV9DSEFOICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUZEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004NDAwX0FJRkRBQ19URE1fQ0hBTl9NQVNLICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGREFDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODQwMF9BSUZEQUNfVERNX0NIQU5fU0hJRlQgICAgICAgICAgICAgICAgMTIgIC8qIEFJRkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg0MDBfQUlGREFDX1RETV9DSEFOX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUZEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004NDAwX0RBQ19CT09TVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MEMwMCAgLyogREFDX0JPT1NUIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg0MDBfREFDX0JPT1NUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBEQUNfQk9PU1QgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODQwMF9EQUNfQk9PU1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQ19CT09TVCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004NDAwX0RBQ19DT01QICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREFDX0NPTVAgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19DT01QX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREFDX0NPTVAgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogREFDX0NPTVAgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX0NPTVAgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19DT01QTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODQwMF9EQUNfQ09NUE1PREVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg0MDBfREFDX0NPTVBNT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAzICAvKiBEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19DT01QTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODQwMF9BRENfQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFEQ19DT01QICovCisjZGVmaW5lIFdNODQwMF9BRENfQ09NUF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFEQ19DT01QICovCisjZGVmaW5lIFdNODQwMF9BRENfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19DT01QICovCisjZGVmaW5lIFdNODQwMF9BRENfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19DT01QICovCisjZGVmaW5lIFdNODQwMF9BRENfQ09NUE1PREUgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg0MDBfQURDX0NPTVBNT0RFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19DT01QTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODQwMF9BRENfQ09NUE1PREVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg0MDBfTE9PUEJBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMT09QQkFDSyAqLworI2RlZmluZSBXTTg0MDBfTE9PUEJBQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMT09QQkFDSyAqLworI2RlZmluZSBXTTg0MDBfTE9PUEJBQ0tfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMT09QQkFDSyAqLworI2RlZmluZSBXTTg0MDBfTE9PUEJBQ0tfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT09QQkFDSyAqLworCisvKgorICogUjcgKDB4MDcpIC0gQ2xvY2tpbmcgKDEpCisgKi8KKyNkZWZpbmUgV004NDAwX1RPQ0xLX1JBVEUgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogVE9DTEtfUkFURSAqLworI2RlZmluZSBXTTg0MDBfVE9DTEtfUkFURV9NQVNLICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBUT0NMS19SQVRFICovCisjZGVmaW5lIFdNODQwMF9UT0NMS19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIFRPQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004NDAwX1RPQ0xLX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogVE9DTEtfUkFURSAqLworI2RlZmluZSBXTTg0MDBfVE9DTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004NDAwX1RPQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogVE9DTEtfRU5BICovCisjZGVmaW5lIFdNODQwMF9UT0NMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg0MDBfVE9DTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004NDAwX09QQ0xLRElWX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MUUwMCAgLyogT1BDTEtESVYgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004NDAwX09QQ0xLRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogT1BDTEtESVYgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004NDAwX09QQ0xLRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogT1BDTEtESVYgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004NDAwX0RDTEtESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDFDMCAgLyogRENMS0RJViAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9EQ0xLRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIERDTEtESVYgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfRENMS0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEQ0xLRElWIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004NDAwX0JDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRSAgLyogQkNMS19ESVYgLSBbNDoxXSAqLworI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLX0RJViAtIFs0OjFdICovCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEJDTEtfRElWIC0gWzQ6MV0gKi8KKworLyoKKyAqIFI4ICgweDA4KSAtIENsb2NraW5nICgyKQorICovCisjZGVmaW5lIFdNODQwMF9NQ0xLX1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIE1DTEtfU1JDICovCisjZGVmaW5lIFdNODQwMF9NQ0xLX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIE1DTEtfU1JDICovCisjZGVmaW5lIFdNODQwMF9NQ0xLX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIE1DTEtfU1JDICovCisjZGVmaW5lIFdNODQwMF9NQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEtfU1JDICovCisjZGVmaW5lIFdNODQwMF9TWVNDTEtfU1JDICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFNZU0NMS19TUkMgKi8KKyNkZWZpbmUgV004NDAwX1NZU0NMS19TUkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogU1lTQ0xLX1NSQyAqLworI2RlZmluZSBXTTg0MDBfU1lTQ0xLX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBTWVNDTEtfU1JDICovCisjZGVmaW5lIFdNODQwMF9TWVNDTEtfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNZU0NMS19TUkMgKi8KKyNkZWZpbmUgV004NDAwX0NMS19GT1JDRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQ0xLX0ZPUkNFICovCisjZGVmaW5lIFdNODQwMF9DTEtfRk9SQ0VfTUFTSyAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIENMS19GT1JDRSAqLworI2RlZmluZSBXTTg0MDBfQ0xLX0ZPUkNFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBDTEtfRk9SQ0UgKi8KKyNkZWZpbmUgV004NDAwX0NMS19GT1JDRV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ0xLX0ZPUkNFICovCisjZGVmaW5lIFdNODQwMF9NQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDE4MDAgIC8qIE1DTEtfRElWIC0gWzEyOjExXSAqLworI2RlZmluZSBXTTg0MDBfTUNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDExICAvKiBNQ0xLX0RJViAtIFsxMjoxMV0gKi8KKyNkZWZpbmUgV004NDAwX01DTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTUNMS19ESVYgLSBbMTI6MTFdICovCisjZGVmaW5lIFdNODQwMF9NQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIE1DTEtfSU5WICovCisjZGVmaW5lIFdNODQwMF9NQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIE1DTEtfSU5WICovCisjZGVmaW5lIFdNODQwMF9NQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIE1DTEtfSU5WICovCisjZGVmaW5lIFdNODQwMF9NQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEtfSU5WICovCisjZGVmaW5lIFdNODQwMF9BRENfQ0xLRElWX01BU0sgICAgICAgICAgICAgICAgICAweDAwRTAgIC8qIEFEQ19DTEtESVYgLSBbNzo1XSAqLworI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENfQ0xLRElWIC0gWzc6NV0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMyAgLyogQURDX0NMS0RJViAtIFs3OjVdICovCisjZGVmaW5lIFdNODQwMF9EQUNfQ0xLRElWX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUMgIC8qIERBQ19DTEtESVYgLSBbNDoyXSAqLworI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEQUNfQ0xLRElWIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDX0NMS0RJViAtIFs0OjJdICovCisKKy8qCisgKiBSOSAoMHgwOSkgLSBBdWRpbyBJbnRlcmZhY2UgKDMpCisgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9NU1RSMSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGX01TVFIxICovCisjZGVmaW5lIFdNODQwMF9BSUZfTVNUUjFfTUFTSyAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRl9NU1RSMSAqLworI2RlZmluZSBXTTg0MDBfQUlGX01TVFIxX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBBSUZfTVNUUjEgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9NU1RSMV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX01TVFIxICovCisjZGVmaW5lIFdNODQwMF9BSUZfTVNUUjIgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEFJRl9NU1RSMiAqLworI2RlZmluZSBXTTg0MDBfQUlGX01TVFIyX01BU0sgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBSUZfTVNUUjIgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9NU1RSMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogQUlGX01TVFIyICovCisjZGVmaW5lIFdNODQwMF9BSUZfTVNUUjJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRl9NU1RSMiAqLworI2RlZmluZSBXTTg0MDBfQUlGX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUZfU0VMICovCisjZGVmaW5lIFdNODQwMF9BSUZfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRl9TRUwgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogQUlGX1NFTCAqLworI2RlZmluZSBXTTg0MDBfQUlGX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZfU0VMICovCisjZGVmaW5lIFdNODQwMF9BRENMUkNfRElSICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIEFEQ0xSQ19ESVIgKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xSQ19ESVJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQURDTFJDX0RJUiAqLworI2RlZmluZSBXTTg0MDBfQURDTFJDX0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDExICAvKiBBRENMUkNfRElSICovCisjZGVmaW5lIFdNODQwMF9BRENMUkNfRElSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xSQ19ESVIgKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xSQ19SQVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDdGRiAgLyogQURDTFJDX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xSQ19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDTFJDX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xSQ19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxMSAgLyogQURDTFJDX1JBVEUgLSBbMTA6MF0gKi8KKworLyoKKyAqIFIxMCAoMHgwQSkgLSBBdWRpbyBJbnRlcmZhY2UgKDQpCisgKi8KKyNkZWZpbmUgV004NDAwX0FMUkNHUElPMSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUxSQ0dQSU8xICovCisjZGVmaW5lIFdNODQwMF9BTFJDR1BJTzFfTUFTSyAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEFMUkNHUElPMSAqLworI2RlZmluZSBXTTg0MDBfQUxSQ0dQSU8xX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBBTFJDR1BJTzEgKi8KKyNkZWZpbmUgV004NDAwX0FMUkNHUElPMV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUxSQ0dQSU8xICovCisjZGVmaW5lIFdNODQwMF9BTFJDQkdQSU82ICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEFMUkNCR1BJTzYgKi8KKyNkZWZpbmUgV004NDAwX0FMUkNCR1BJTzZfTUFTSyAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUxSQ0JHUElPNiAqLworI2RlZmluZSBXTTg0MDBfQUxSQ0JHUElPNl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBBTFJDQkdQSU82ICovCisjZGVmaW5lIFdNODQwMF9BTFJDQkdQSU82X1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFMUkNCR1BJTzYgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9UUklTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9UUklTX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9UUklTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9UUklTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004NDAwX0RBQ0xSQ19ESVIgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogREFDTFJDX0RJUiAqLworI2RlZmluZSBXTTg0MDBfREFDTFJDX0RJUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQUNMUkNfRElSICovCisjZGVmaW5lIFdNODQwMF9EQUNMUkNfRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERBQ0xSQ19ESVIgKi8KKyNkZWZpbmUgV004NDAwX0RBQ0xSQ19ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTFJDX0RJUiAqLworI2RlZmluZSBXTTg0MDBfREFDTFJDX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwN0ZGICAvKiBEQUNMUkNfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg0MDBfREFDTFJDX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUNMUkNfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg0MDBfREFDTFJDX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDExICAvKiBEQUNMUkNfUkFURSAtIFsxMDowXSAqLworCisvKgorICogUjExICgweDBCKSAtIERBQyBDVFJMCisgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19TRE1DTEtfUkFURSAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogREFDX1NETUNMS19SQVRFICovCisjZGVmaW5lIFdNODQwMF9EQUNfU0RNQ0xLX1JBVEVfTUFTSyAgICAgICAgICAgICAweDIwMDAgIC8qIERBQ19TRE1DTEtfUkFURSAqLworI2RlZmluZSBXTTg0MDBfREFDX1NETUNMS19SQVRFX1NISUZUICAgICAgICAgICAgICAgIDEzICAvKiBEQUNfU0RNQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19TRE1DTEtfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogREFDX1NETUNMS19SQVRFICovCisjZGVmaW5lIFdNODQwMF9BSUZfTFJDTEtSQVRFICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRl9MUkNMS1JBVEUgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9MUkNMS1JBVEVfTUFTSyAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQUlGX0xSQ0xLUkFURSAqLworI2RlZmluZSBXTTg0MDBfQUlGX0xSQ0xLUkFURV9TSElGVCAgICAgICAgICAgICAgICAgIDEwICAvKiBBSUZfTFJDTEtSQVRFICovCisjZGVmaW5lIFdNODQwMF9BSUZfTFJDTEtSQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRl9MUkNMS1JBVEUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19NT05PICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDX01PTk8gKi8KKyNkZWZpbmUgV004NDAwX0RBQ19NT05PX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDX01PTk8gKi8KKyNkZWZpbmUgV004NDAwX0RBQ19NT05PX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogREFDX01PTk8gKi8KKyNkZWZpbmUgV004NDAwX0RBQ19NT05PX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX01PTk8gKi8KKyNkZWZpbmUgV004NDAwX0RBQ19TQl9GSUxUICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDX1NCX0ZJTFQgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19TQl9GSUxUX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDX1NCX0ZJTFQgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19TQl9GSUxUX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDX1NCX0ZJTFQgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19TQl9GSUxUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX1NCX0ZJTFQgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19NVVRFUkFURSAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODQwMF9EQUNfTVVURVJBVEVfTUFTSyAgICAgICAgICAgICAgICAweDAwODAgIC8qIERBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg0MDBfREFDX01VVEVSQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICA3ICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19NVVRFUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODQwMF9EQUNfTVVURU1PREUgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIERBQ19NVVRFTU9ERSAqLworI2RlZmluZSBXTTg0MDBfREFDX01VVEVNT0RFX01BU0sgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBEQUNfTVVURU1PREUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19NVVRFTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgNiAgLyogREFDX01VVEVNT0RFICovCisjZGVmaW5lIFdNODQwMF9EQUNfTVVURU1PREVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19NVVRFTU9ERSAqLworI2RlZmluZSBXTTg0MDBfREVFTVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMwICAvKiBERUVNUCAtIFs1OjRdICovCisjZGVmaW5lIFdNODQwMF9ERUVNUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERFRU1QIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004NDAwX0RFRU1QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREVFTVAgLSBbNTo0XSAqLworI2RlZmluZSBXTTg0MDBfREFDX01VVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUNfTVVURSAqLworI2RlZmluZSBXTTg0MDBfREFDX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUNfTVVURSAqLworI2RlZmluZSBXTTg0MDBfREFDX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEQUNfTVVURSAqLworI2RlZmluZSBXTTg0MDBfREFDX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfTVVURSAqLworI2RlZmluZSBXTTg0MDBfREFDTF9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQUNMX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfREFDTF9EQVRJTlZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQUNMX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfREFDTF9EQVRJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfREFDTF9EQVRJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfREFDUl9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNSX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfREFDUl9EQVRJTlZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNSX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfREFDUl9EQVRJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUNSX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfREFDUl9EQVRJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNSX0RBVElOViAqLworCisvKgorICogUjEyICgweDBDKSAtIExlZnQgREFDIERpZ2l0YWwgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODQwMF9EQUNfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg0MDBfREFDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODQwMF9EQUNMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERBQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004NDAwX0RBQ0xfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg0MDBfREFDTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUNMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTMgKDB4MEQpIC0gUmlnaHQgREFDIERpZ2l0YWwgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODQwMF9EQUNfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg0MDBfREFDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODQwMF9EQUNSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERBQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004NDAwX0RBQ1JfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg0MDBfREFDUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUNSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTQgKDB4MEUpIC0gRGlnaXRhbCBTaWRlIFRvbmUKKyAqLworI2RlZmluZSBXTTg0MDBfQURDTF9EQUNfU1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgxRTAwICAvKiAgIEFEQ0xfREFDX1NWT0wgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xfREFDX1NWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgOSAgLyogICBBRENMX0RBQ19TVk9MIC0gWzEyOjldICovCisjZGVmaW5lIFdNODQwMF9BRENMX0RBQ19TVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qICAgQURDTF9EQUNfU1ZPTCAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg0MDBfQURDUl9EQUNfU1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMUUwICAvKiBBRENSX0RBQ19TVk9MIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ1JfREFDX1NWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogQURDUl9EQUNfU1ZPTCAtIFs4OjVdICovCisjZGVmaW5lIFdNODQwMF9BRENSX0RBQ19TVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ1JfREFDX1NWT0wgLSBbODo1XSAqLworI2RlZmluZSBXTTg0MDBfQURDX1RPX0RBQ0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBBRENfVE9fREFDTCAtIFszOjJdICovCisjZGVmaW5lIFdNODQwMF9BRENfVE9fREFDTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19UT19EQUNMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ19UT19EQUNMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX1RPX0RBQ0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg0MDBfQURDX1RPX0RBQ1JfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBBRENfVE9fREFDUiAtIFsxOjBdICovCisjZGVmaW5lIFdNODQwMF9BRENfVE9fREFDUl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ19UT19EQUNSIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ19UT19EQUNSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX1RPX0RBQ1IgLSBbMTowXSAqLworCisvKgorICogUjE1ICgweDBGKSAtIEFEQyBDVFJMCisgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19IUEZfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDX0hQRl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19IUEZfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDX0hQRl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19IUEZfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDX0hQRl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19IUEZfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX0hQRl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19IUEZfQ1VUX01BU0sgICAgICAgICAgICAgICAgIDB4MDA2MCAgLyogQURDX0hQRl9DVVQgLSBbNjo1XSAqLworI2RlZmluZSBXTTg0MDBfQURDX0hQRl9DVVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENfSFBGX0NVVCAtIFs2OjVdICovCisjZGVmaW5lIFdNODQwMF9BRENfSFBGX0NVVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19IUEZfQ1VUIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xfREFUSU5WICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xfREFUSU5WX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xfREFUSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xfREFUSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004NDAwX0FEQ1JfREFUSU5WICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004NDAwX0FEQ1JfREFUSU5WX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004NDAwX0FEQ1JfREFUSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004NDAwX0FEQ1JfREFUSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDUl9EQVRJTlYgKi8KKworLyoKKyAqIFIxNiAoMHgxMCkgLSBMZWZ0IEFEQyBEaWdpdGFsIFZvbHVtZQorICovCisjZGVmaW5lIFdNODQwMF9BRENfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg0MDBfQURDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODQwMF9BRENfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg0MDBfQURDTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBRENMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODQwMF9BRENMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDTF9WT0wgLSBbNzowXSAqLworCisvKgorICogUjE3ICgweDExKSAtIFJpZ2h0IEFEQyBEaWdpdGFsIFZvbHVtZQorICovCisjZGVmaW5lIFdNODQwMF9BRENfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg0MDBfQURDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODQwMF9BRENfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg0MDBfQURDUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBRENSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODQwMF9BRENSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ1JfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjI0ICgweDE4KSAtIExlZnQgTGluZSBJbnB1dCAxJjIgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004NDAwX0lQVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSVBWVSAqLworI2RlZmluZSBXTTg0MDBfSVBWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJUFZVICovCisjZGVmaW5lIFdNODQwMF9JUFZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIElQVlUgKi8KKyNkZWZpbmUgV004NDAwX0lQVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSVBWVSAqLworI2RlZmluZSBXTTg0MDBfTEkxMk1VVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSTEyTVVURSAqLworI2RlZmluZSBXTTg0MDBfTEkxMk1VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSTEyTVVURSAqLworI2RlZmluZSBXTTg0MDBfTEkxMk1VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMSTEyTVVURSAqLworI2RlZmluZSBXTTg0MDBfTEkxMk1VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSTEyTVVURSAqLworI2RlZmluZSBXTTg0MDBfTEkxMlpDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSTEyWkMgKi8KKyNkZWZpbmUgV004NDAwX0xJMTJaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTEkxMlpDICovCisjZGVmaW5lIFdNODQwMF9MSTEyWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExJMTJaQyAqLworI2RlZmluZSBXTTg0MDBfTEkxMlpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSTEyWkMgKi8KKyNkZWZpbmUgV004NDAwX0xJTjEyVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogTElOMTJWT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg0MDBfTElOMTJWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMSU4xMlZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODQwMF9MSU4xMlZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExJTjEyVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIyNSAoMHgxOSkgLSBMZWZ0IExpbmUgSW5wdXQgMyY0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODQwMF9JUFZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElQVlUgKi8KKyNkZWZpbmUgV004NDAwX0lQVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSVBWVSAqLworI2RlZmluZSBXTTg0MDBfSVBWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBJUFZVICovCisjZGVmaW5lIFdNODQwMF9JUFZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElQVlUgKi8KKyNkZWZpbmUgV004NDAwX0xJMzRNVVRFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTEkzNE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX0xJMzRNVVRFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTEkzNE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX0xJMzRNVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTEkzNE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX0xJMzRNVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEkzNE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX0xJMzRaQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTEkzNFpDICovCisjZGVmaW5lIFdNODQwMF9MSTM0WkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJMzRaQyAqLworI2RlZmluZSBXTTg0MDBfTEkzNFpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMSTM0WkMgKi8KKyNkZWZpbmUgV004NDAwX0xJMzRaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEkzNFpDICovCisjZGVmaW5lIFdNODQwMF9MSU4zNFZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIExJTjM0Vk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xJTjM0Vk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTElOMzRWT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg0MDBfTElOMzRWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMSU4zNFZPTCAtIFs0OjBdICovCisKKy8qCisgKiBSMjYgKDB4MUEpIC0gUmlnaHQgTGluZSBJbnB1dCAxJjIgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004NDAwX0lQVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSVBWVSAqLworI2RlZmluZSBXTTg0MDBfSVBWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJUFZVICovCisjZGVmaW5lIFdNODQwMF9JUFZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIElQVlUgKi8KKyNkZWZpbmUgV004NDAwX0lQVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSVBWVSAqLworI2RlZmluZSBXTTg0MDBfUkkxMk1VVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSTEyTVVURSAqLworI2RlZmluZSBXTTg0MDBfUkkxMk1VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSTEyTVVURSAqLworI2RlZmluZSBXTTg0MDBfUkkxMk1VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBSSTEyTVVURSAqLworI2RlZmluZSBXTTg0MDBfUkkxMk1VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSSTEyTVVURSAqLworI2RlZmluZSBXTTg0MDBfUkkxMlpDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBSSTEyWkMgKi8KKyNkZWZpbmUgV004NDAwX1JJMTJaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogUkkxMlpDICovCisjZGVmaW5lIFdNODQwMF9SSTEyWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFJJMTJaQyAqLworI2RlZmluZSBXTTg0MDBfUkkxMlpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSSTEyWkMgKi8KKyNkZWZpbmUgV004NDAwX1JJTjEyVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogUklOMTJWT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg0MDBfUklOMTJWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBSSU4xMlZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODQwMF9SSU4xMlZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFJJTjEyVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIyNyAoMHgxQikgLSBSaWdodCBMaW5lIElucHV0IDMmNCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg0MDBfSVBWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJUFZVICovCisjZGVmaW5lIFdNODQwMF9JUFZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElQVlUgKi8KKyNkZWZpbmUgV004NDAwX0lQVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSVBWVSAqLworI2RlZmluZSBXTTg0MDBfSVBWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJUFZVICovCisjZGVmaW5lIFdNODQwMF9SSTM0TVVURSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJMzRNVVRFICovCisjZGVmaW5lIFdNODQwMF9SSTM0TVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJMzRNVVRFICovCisjZGVmaW5lIFdNODQwMF9SSTM0TVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJJMzRNVVRFICovCisjZGVmaW5lIFdNODQwMF9SSTM0TVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJJMzRNVVRFICovCisjZGVmaW5lIFdNODQwMF9SSTM0WkMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJJMzRaQyAqLworI2RlZmluZSBXTTg0MDBfUkkzNFpDX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBSSTM0WkMgKi8KKyNkZWZpbmUgV004NDAwX1JJMzRaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogUkkzNFpDICovCisjZGVmaW5lIFdNODQwMF9SSTM0WkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJJMzRaQyAqLworI2RlZmluZSBXTTg0MDBfUklOMzRWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBSSU4zNFZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODQwMF9SSU4zNFZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJJTjM0Vk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004NDAwX1JJTjM0Vk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogUklOMzRWT0wgLSBbNDowXSAqLworCisvKgorICogUjI4ICgweDFDKSAtIExlZnQgT3V0cHV0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODQwMF9PUFZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE9QVlUgKi8KKyNkZWZpbmUgV004NDAwX09QVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogT1BWVSAqLworI2RlZmluZSBXTTg0MDBfT1BWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBPUFZVICovCisjZGVmaW5lIFdNODQwMF9PUFZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9QVlUgKi8KKyNkZWZpbmUgV004NDAwX0xPWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTE9aQyAqLworI2RlZmluZSBXTTg0MDBfTE9aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMT1pDICovCisjZGVmaW5lIFdNODQwMF9MT1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExPWkMgKi8KKyNkZWZpbmUgV004NDAwX0xPWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9aQyAqLworI2RlZmluZSBXTTg0MDBfTE9VVFZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBMT1VUVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xPVVRWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTE9VVFZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODQwMF9MT1VUVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExPVVRWT0wgLSBbNjowXSAqLworCisvKgorICogUjI5ICgweDFEKSAtIFJpZ2h0IE91dHB1dCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg0MDBfT1BWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBPUFZVICovCisjZGVmaW5lIFdNODQwMF9PUFZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE9QVlUgKi8KKyNkZWZpbmUgV004NDAwX09QVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogT1BWVSAqLworI2RlZmluZSBXTTg0MDBfT1BWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBPUFZVICovCisjZGVmaW5lIFdNODQwMF9ST1pDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJPWkMgKi8KKyNkZWZpbmUgV004NDAwX1JPWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUk9aQyAqLworI2RlZmluZSBXTTg0MDBfUk9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBST1pDICovCisjZGVmaW5lIFdNODQwMF9ST1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPWkMgKi8KKyNkZWZpbmUgV004NDAwX1JPVVRWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogUk9VVFZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODQwMF9ST1VUVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJPVVRWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg0MDBfUk9VVFZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBST1VUVk9MIC0gWzY6MF0gKi8KKworLyoKKyAqIFIzMCAoMHgxRSkgLSBMaW5lIE91dHB1dHMgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004NDAwX0xPTk1VVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTE9OTVVURSAqLworI2RlZmluZSBXTTg0MDBfTE9OTVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMT05NVVRFICovCisjZGVmaW5lIFdNODQwMF9MT05NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExPTk1VVEUgKi8KKyNkZWZpbmUgV004NDAwX0xPTk1VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9OTVVURSAqLworI2RlZmluZSBXTTg0MDBfTE9QTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMT1BNVVRFICovCisjZGVmaW5lIFdNODQwMF9MT1BNVVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExPUE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX0xPUE1VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTE9QTVVURSAqLworI2RlZmluZSBXTTg0MDBfTE9QTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT1BNVVRFICovCisjZGVmaW5lIFdNODQwMF9MT0FUVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExPQVRUTiAqLworI2RlZmluZSBXTTg0MDBfTE9BVFROX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMT0FUVE4gKi8KKyNkZWZpbmUgV004NDAwX0xPQVRUTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTE9BVFROICovCisjZGVmaW5lIFdNODQwMF9MT0FUVE5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPQVRUTiAqLworI2RlZmluZSBXTTg0MDBfUk9OTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBST05NVVRFICovCisjZGVmaW5lIFdNODQwMF9ST05NVVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFJPTk1VVEUgKi8KKyNkZWZpbmUgV004NDAwX1JPTk1VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogUk9OTVVURSAqLworI2RlZmluZSBXTTg0MDBfUk9OTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBST05NVVRFICovCisjZGVmaW5lIFdNODQwMF9ST1BNVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFJPUE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX1JPUE1VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogUk9QTVVURSAqLworI2RlZmluZSBXTTg0MDBfUk9QTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBST1BNVVRFICovCisjZGVmaW5lIFdNODQwMF9ST1BNVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPUE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX1JPQVRUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogUk9BVFROICovCisjZGVmaW5lIFdNODQwMF9ST0FUVE5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFJPQVRUTiAqLworI2RlZmluZSBXTTg0MDBfUk9BVFROX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBST0FUVE4gKi8KKyNkZWZpbmUgV004NDAwX1JPQVRUTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk9BVFROICovCisKKy8qCisgKiBSMzEgKDB4MUYpIC0gT3V0My80IFZvbHVtZQorICovCisjZGVmaW5lIFdNODQwMF9PVVQzTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIE9VVDNNVVRFICovCisjZGVmaW5lIFdNODQwMF9PVVQzTVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIE9VVDNNVVRFICovCisjZGVmaW5lIFdNODQwMF9PVVQzTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIE9VVDNNVVRFICovCisjZGVmaW5lIFdNODQwMF9PVVQzTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9VVDNNVVRFICovCisjZGVmaW5lIFdNODQwMF9PVVQzQVRUTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE9VVDNBVFROICovCisjZGVmaW5lIFdNODQwMF9PVVQzQVRUTl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE9VVDNBVFROICovCisjZGVmaW5lIFdNODQwMF9PVVQzQVRUTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIE9VVDNBVFROICovCisjZGVmaW5lIFdNODQwMF9PVVQzQVRUTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9VVDNBVFROICovCisjZGVmaW5lIFdNODQwMF9PVVQ0TVVURSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE9VVDRNVVRFICovCisjZGVmaW5lIFdNODQwMF9PVVQ0TVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE9VVDRNVVRFICovCisjZGVmaW5lIFdNODQwMF9PVVQ0TVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9VVDRNVVRFICovCisjZGVmaW5lIFdNODQwMF9PVVQ0TVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9VVDRNVVRFICovCisjZGVmaW5lIFdNODQwMF9PVVQ0QVRUTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE9VVDRBVFROICovCisjZGVmaW5lIFdNODQwMF9PVVQ0QVRUTl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE9VVDRBVFROICovCisjZGVmaW5lIFdNODQwMF9PVVQ0QVRUTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE9VVDRBVFROICovCisjZGVmaW5lIFdNODQwMF9PVVQ0QVRUTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9VVDRBVFROICovCisKKy8qCisgKiBSMzIgKDB4MjApIC0gTGVmdCBPUEdBIFZvbHVtZQorICovCisjZGVmaW5lIFdNODQwMF9PUFZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE9QVlUgKi8KKyNkZWZpbmUgV004NDAwX09QVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogT1BWVSAqLworI2RlZmluZSBXTTg0MDBfT1BWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBPUFZVICovCisjZGVmaW5lIFdNODQwMF9PUFZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9QVlUgKi8KKyNkZWZpbmUgV004NDAwX0xPUEdBWkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTE9QR0FaQyAqLworI2RlZmluZSBXTTg0MDBfTE9QR0FaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMT1BHQVpDICovCisjZGVmaW5lIFdNODQwMF9MT1BHQVpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExPUEdBWkMgKi8KKyNkZWZpbmUgV004NDAwX0xPUEdBWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9QR0FaQyAqLworI2RlZmluZSBXTTg0MDBfTE9QR0FWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBMT1BHQVZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODQwMF9MT1BHQVZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExPUEdBVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xPUEdBVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTE9QR0FWT0wgLSBbNjowXSAqLworCisvKgorICogUjMzICgweDIxKSAtIFJpZ2h0IE9QR0EgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004NDAwX09QVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogT1BWVSAqLworI2RlZmluZSBXTTg0MDBfT1BWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBPUFZVICovCisjZGVmaW5lIFdNODQwMF9PUFZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIE9QVlUgKi8KKyNkZWZpbmUgV004NDAwX09QVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1BWVSAqLworI2RlZmluZSBXTTg0MDBfUk9QR0FaQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBST1BHQVpDICovCisjZGVmaW5lIFdNODQwMF9ST1BHQVpDX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJPUEdBWkMgKi8KKyNkZWZpbmUgV004NDAwX1JPUEdBWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUk9QR0FaQyAqLworI2RlZmluZSBXTTg0MDBfUk9QR0FaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBST1BHQVpDICovCisjZGVmaW5lIFdNODQwMF9ST1BHQVZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIFJPUEdBVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004NDAwX1JPUEdBVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUk9QR0FWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg0MDBfUk9QR0FWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBST1BHQVZPTCAtIFs2OjBdICovCisKKy8qCisgKiBSMzQgKDB4MjIpIC0gU3BlYWtlciBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg0MDBfU1BLQVRUTl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBTUEtBVFROIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004NDAwX1NQS0FUVE5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1BLQVRUTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODQwMF9TUEtBVFROX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFNQS0FUVE4gLSBbMTowXSAqLworCisvKgorICogUjM1ICgweDIzKSAtIENsYXNzRDEKKyAqLworI2RlZmluZSBXTTg0MDBfQ0RNT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBDRE1PREUgKi8KKyNkZWZpbmUgV004NDAwX0NETU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQ0RNT0RFICovCisjZGVmaW5lIFdNODQwMF9DRE1PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIENETU9ERSAqLworI2RlZmluZSBXTTg0MDBfQ0RNT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDRE1PREUgKi8KKyNkZWZpbmUgV004NDAwX0NMQVNTRF9DTEtfU0VMICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQ0xBU1NEX0NMS19TRUwgKi8KKyNkZWZpbmUgV004NDAwX0NMQVNTRF9DTEtfU0VMX01BU0sgICAgICAgICAgICAgIDB4MDA4MCAgLyogQ0xBU1NEX0NMS19TRUwgKi8KKyNkZWZpbmUgV004NDAwX0NMQVNTRF9DTEtfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgNyAgLyogQ0xBU1NEX0NMS19TRUwgKi8KKyNkZWZpbmUgV004NDAwX0NMQVNTRF9DTEtfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQ0xBU1NEX0NMS19TRUwgKi8KKyNkZWZpbmUgV004NDAwX0NEX1NSQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQ0RfU1JDVFJMICovCisjZGVmaW5lIFdNODQwMF9DRF9TUkNUUkxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIENEX1NSQ1RSTCAqLworI2RlZmluZSBXTTg0MDBfQ0RfU1JDVFJMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBDRF9TUkNUUkwgKi8KKyNkZWZpbmUgV004NDAwX0NEX1NSQ1RSTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ0RfU1JDVFJMICovCisjZGVmaW5lIFdNODQwMF9TUEtOT1BPUCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFNQS05PUE9QICovCisjZGVmaW5lIFdNODQwMF9TUEtOT1BPUF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFNQS05PUE9QICovCisjZGVmaW5lIFdNODQwMF9TUEtOT1BPUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFNQS05PUE9QICovCisjZGVmaW5lIFdNODQwMF9TUEtOT1BPUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS05PUE9QICovCisjZGVmaW5lIFdNODQwMF9EQkxFUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERCTEVSQVRFICovCisjZGVmaW5lIFdNODQwMF9EQkxFUkFURV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERCTEVSQVRFICovCisjZGVmaW5lIFdNODQwMF9EQkxFUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERCTEVSQVRFICovCisjZGVmaW5lIFdNODQwMF9EQkxFUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERCTEVSQVRFICovCisjZGVmaW5lIFdNODQwMF9MT09QVEVTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExPT1BURVNUICovCisjZGVmaW5lIFdNODQwMF9MT09QVEVTVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExPT1BURVNUICovCisjZGVmaW5lIFdNODQwMF9MT09QVEVTVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExPT1BURVNUICovCisjZGVmaW5lIFdNODQwMF9MT09QVEVTVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPT1BURVNUICovCisjZGVmaW5lIFdNODQwMF9IQUxGQUJCSUFTICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhBTEZBQkJJQVMgKi8KKyNkZWZpbmUgV004NDAwX0hBTEZBQkJJQVNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSEFMRkFCQklBUyAqLworI2RlZmluZSBXTTg0MDBfSEFMRkFCQklBU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBIQUxGQUJCSUFTICovCisjZGVmaW5lIFdNODQwMF9IQUxGQUJCSUFTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhBTEZBQkJJQVMgKi8KKyNkZWZpbmUgV004NDAwX1RSSURFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogVFJJREVMIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004NDAwX1RSSURFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogVFJJREVMIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004NDAwX1RSSURFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogVFJJREVMIC0gWzE6MF0gKi8KKworLyoKKyAqIFIzNyAoMHgyNSkgLSBDbGFzc0QzCisgKi8KKyNkZWZpbmUgV004NDAwX0RDR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAzOCAgLyogRENHQUlOIC0gWzU6M10gKi8KKyNkZWZpbmUgV004NDAwX0RDR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogRENHQUlOIC0gWzU6M10gKi8KKyNkZWZpbmUgV004NDAwX0RDR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogRENHQUlOIC0gWzU6M10gKi8KKyNkZWZpbmUgV004NDAwX0FDR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogQUNHQUlOIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX0FDR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQUNHQUlOIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX0FDR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogQUNHQUlOIC0gWzI6MF0gKi8KKworLyoKKyAqIFIzOSAoMHgyNykgLSBJbnB1dCBNaXhlcjEKKyAqLworI2RlZmluZSBXTTg0MDBfQUlOTE1PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBBSU5MTU9ERSAtIFszOjJdICovCisjZGVmaW5lIFdNODQwMF9BSU5MTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJTkxNT0RFIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004NDAwX0FJTkxNT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlOTE1PREUgLSBbMzoyXSAqLworI2RlZmluZSBXTTg0MDBfQUlOUk1PREVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBBSU5STU9ERSAtIFsxOjBdICovCisjZGVmaW5lIFdNODQwMF9BSU5STU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJTlJNT0RFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004NDAwX0FJTlJNT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlOUk1PREUgLSBbMTowXSAqLworCisvKgorICogUjQwICgweDI4KSAtIElucHV0IE1peGVyMgorICovCisjZGVmaW5lIFdNODQwMF9MTVA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExNUDQgKi8KKyNkZWZpbmUgV004NDAwX0xNUDRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTE1QNCAqLworI2RlZmluZSBXTTg0MDBfTE1QNF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMTVA0ICovCisjZGVmaW5lIFdNODQwMF9MTVA0X1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExNUDQgKi8KKyNkZWZpbmUgV004NDAwX0xNTjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTE1OMyAqLworI2RlZmluZSBXTTg0MDBfTE1OM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMTU4zICovCisjZGVmaW5lIFdNODQwMF9MTU4zX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExNTjMgKi8KKyNkZWZpbmUgV004NDAwX0xNTjNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE1OMyAqLworI2RlZmluZSBXTTg0MDBfTE1QMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMTVAyICovCisjZGVmaW5lIFdNODQwMF9MTVAyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExNUDIgKi8KKyNkZWZpbmUgV004NDAwX0xNUDJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTE1QMiAqLworI2RlZmluZSBXTTg0MDBfTE1QMl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTVAyICovCisjZGVmaW5lIFdNODQwMF9MTU4xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExNTjEgKi8KKyNkZWZpbmUgV004NDAwX0xNTjFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTE1OMSAqLworI2RlZmluZSBXTTg0MDBfTE1OMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMTU4xICovCisjZGVmaW5lIFdNODQwMF9MTU4xX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExNTjEgKi8KKyNkZWZpbmUgV004NDAwX1JNUDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogUk1QNCAqLworI2RlZmluZSBXTTg0MDBfUk1QNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBSTVA0ICovCisjZGVmaW5lIFdNODQwMF9STVA0X1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJNUDQgKi8KKyNkZWZpbmUgV004NDAwX1JNUDRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk1QNCAqLworI2RlZmluZSBXTTg0MDBfUk1OMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBSTU4zICovCisjZGVmaW5lIFdNODQwMF9STU4zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFJNTjMgKi8KKyNkZWZpbmUgV004NDAwX1JNTjNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogUk1OMyAqLworI2RlZmluZSBXTTg0MDBfUk1OM19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSTU4zICovCisjZGVmaW5lIFdNODQwMF9STVAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFJNUDIgKi8KKyNkZWZpbmUgV004NDAwX1JNUDJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogUk1QMiAqLworI2RlZmluZSBXTTg0MDBfUk1QMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSTVAyICovCisjZGVmaW5lIFdNODQwMF9STVAyX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJNUDIgKi8KKyNkZWZpbmUgV004NDAwX1JNTjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogUk1OMSAqLworI2RlZmluZSBXTTg0MDBfUk1OMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBSTU4xICovCisjZGVmaW5lIFdNODQwMF9STU4xX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJNTjEgKi8KKyNkZWZpbmUgV004NDAwX1JNTjFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk1OMSAqLworCisvKgorICogUjQxICgweDI5KSAtIElucHV0IE1peGVyMworICovCisjZGVmaW5lIFdNODQwMF9MMzRNTkIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEwzNE1OQiAqLworI2RlZmluZSBXTTg0MDBfTDM0TU5CX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMMzRNTkIgKi8KKyNkZWZpbmUgV004NDAwX0wzNE1OQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTDM0TU5CICovCisjZGVmaW5lIFdNODQwMF9MMzRNTkJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEwzNE1OQiAqLworI2RlZmluZSBXTTg0MDBfTDM0TU5CU1QgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMMzRNTkJTVCAqLworI2RlZmluZSBXTTg0MDBfTDM0TU5CU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMMzRNTkJTVCAqLworI2RlZmluZSBXTTg0MDBfTDM0TU5CU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMMzRNTkJTVCAqLworI2RlZmluZSBXTTg0MDBfTDM0TU5CU1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMMzRNTkJTVCAqLworI2RlZmluZSBXTTg0MDBfTDEyTU5CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMMTJNTkIgKi8KKyNkZWZpbmUgV004NDAwX0wxMk1OQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTDEyTU5CICovCisjZGVmaW5lIFdNODQwMF9MMTJNTkJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEwxMk1OQiAqLworI2RlZmluZSBXTTg0MDBfTDEyTU5CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMMTJNTkIgKi8KKyNkZWZpbmUgV004NDAwX0wxMk1OQlNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTDEyTU5CU1QgKi8KKyNkZWZpbmUgV004NDAwX0wxMk1OQlNUX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTDEyTU5CU1QgKi8KKyNkZWZpbmUgV004NDAwX0wxMk1OQlNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTDEyTU5CU1QgKi8KKyNkZWZpbmUgV004NDAwX0wxMk1OQlNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTDEyTU5CU1QgKi8KKyNkZWZpbmUgV004NDAwX0xEQlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogTERCVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xEQlZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTERCVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xEQlZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTERCVk9MIC0gWzI6MF0gKi8KKworLyoKKyAqIFI0MiAoMHgyQSkgLSBJbnB1dCBNaXhlcjQKKyAqLworI2RlZmluZSBXTTg0MDBfUjM0TU5CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSMzRNTkIgKi8KKyNkZWZpbmUgV004NDAwX1IzNE1OQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUjM0TU5CICovCisjZGVmaW5lIFdNODQwMF9SMzRNTkJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFIzNE1OQiAqLworI2RlZmluZSBXTTg0MDBfUjM0TU5CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSMzRNTkIgKi8KKyNkZWZpbmUgV004NDAwX1IzNE1OQlNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUjM0TU5CU1QgKi8KKyNkZWZpbmUgV004NDAwX1IzNE1OQlNUX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUjM0TU5CU1QgKi8KKyNkZWZpbmUgV004NDAwX1IzNE1OQlNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUjM0TU5CU1QgKi8KKyNkZWZpbmUgV004NDAwX1IzNE1OQlNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUjM0TU5CU1QgKi8KKyNkZWZpbmUgV004NDAwX1IxMk1OQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogUjEyTU5CICovCisjZGVmaW5lIFdNODQwMF9SMTJNTkJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFIxMk1OQiAqLworI2RlZmluZSBXTTg0MDBfUjEyTU5CX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBSMTJNTkIgKi8KKyNkZWZpbmUgV004NDAwX1IxMk1OQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUjEyTU5CICovCisjZGVmaW5lIFdNODQwMF9SMTJNTkJTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFIxMk1OQlNUICovCisjZGVmaW5lIFdNODQwMF9SMTJNTkJTVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFIxMk1OQlNUICovCisjZGVmaW5lIFdNODQwMF9SMTJNTkJTVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFIxMk1OQlNUICovCisjZGVmaW5lIFdNODQwMF9SMTJNTkJTVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFIxMk1OQlNUICovCisjZGVmaW5lIFdNODQwMF9SREJWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIFJEQlZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODQwMF9SREJWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJEQlZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODQwMF9SREJWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJEQlZPTCAtIFsyOjBdICovCisKKy8qCisgKiBSNDMgKDB4MkIpIC0gSW5wdXQgTWl4ZXI1CisgKi8KKyNkZWZpbmUgV004NDAwX0xJMkJWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDFDMCAgLyogTEkyQlZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9MSTJCVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExJMkJWT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfTEkyQlZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMSTJCVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004NDAwX0xSNEJWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAzOCAgLyogTFI0QlZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9MUjRCVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExSNEJWT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfTFI0QlZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMUjRCVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004NDAwX0xMNEJWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogTEw0QlZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODQwMF9MTDRCVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExMNEJWT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfTEw0QlZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMTDRCVk9MIC0gWzI6MF0gKi8KKworLyoKKyAqIFI0NCAoMHgyQykgLSBJbnB1dCBNaXhlcjYKKyAqLworI2RlZmluZSBXTTg0MDBfUkkyQlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMUMwICAvKiBSSTJCVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004NDAwX1JJMkJWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogUkkyQlZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9SSTJCVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJJMkJWT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfUkw0QlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDM4ICAvKiBSTDRCVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004NDAwX1JMNEJWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUkw0QlZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9STDRCVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJMNEJWT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfUlI0QlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBSUjRCVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX1JSNEJWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUlI0QlZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODQwMF9SUjRCVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJSNEJWT0wgLSBbMjowXSAqLworCisvKgorICogUjQ1ICgweDJEKSAtIE91dHB1dCBNaXhlcjEKKyAqLworI2RlZmluZSBXTTg0MDBfTFJCTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMUkJMTyAqLworI2RlZmluZSBXTTg0MDBfTFJCTE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMUkJMTyAqLworI2RlZmluZSBXTTg0MDBfTFJCTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMUkJMTyAqLworI2RlZmluZSBXTTg0MDBfTFJCTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMUkJMTyAqLworI2RlZmluZSBXTTg0MDBfTExCTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMTEJMTyAqLworI2RlZmluZSBXTTg0MDBfTExCTE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMTEJMTyAqLworI2RlZmluZSBXTTg0MDBfTExCTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMTEJMTyAqLworI2RlZmluZSBXTTg0MDBfTExCTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTEJMTyAqLworI2RlZmluZSBXTTg0MDBfTFJJM0xPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMUkkzTE8gKi8KKyNkZWZpbmUgV004NDAwX0xSSTNMT19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTFJJM0xPICovCisjZGVmaW5lIFdNODQwMF9MUkkzTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExSSTNMTyAqLworI2RlZmluZSBXTTg0MDBfTFJJM0xPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMUkkzTE8gKi8KKyNkZWZpbmUgV004NDAwX0xMSTNMTyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTExJM0xPICovCisjZGVmaW5lIFdNODQwMF9MTEkzTE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExMSTNMTyAqLworI2RlZmluZSBXTTg0MDBfTExJM0xPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMTEkzTE8gKi8KKyNkZWZpbmUgV004NDAwX0xMSTNMT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTExJM0xPICovCisjZGVmaW5lIFdNODQwMF9MUjEyTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExSMTJMTyAqLworI2RlZmluZSBXTTg0MDBfTFIxMkxPX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBMUjEyTE8gKi8KKyNkZWZpbmUgV004NDAwX0xSMTJMT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTFIxMkxPICovCisjZGVmaW5lIFdNODQwMF9MUjEyTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExSMTJMTyAqLworI2RlZmluZSBXTTg0MDBfTEwxMkxPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMTDEyTE8gKi8KKyNkZWZpbmUgV004NDAwX0xMMTJMT19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTEwxMkxPICovCisjZGVmaW5lIFdNODQwMF9MTDEyTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExMMTJMTyAqLworI2RlZmluZSBXTTg0MDBfTEwxMkxPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTDEyTE8gKi8KKyNkZWZpbmUgV004NDAwX0xETE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTERMTyAqLworI2RlZmluZSBXTTg0MDBfTERMT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMRExPICovCisjZGVmaW5lIFdNODQwMF9MRExPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExETE8gKi8KKyNkZWZpbmUgV004NDAwX0xETE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERMTyAqLworCisvKgorICogUjQ2ICgweDJFKSAtIE91dHB1dCBNaXhlcjIKKyAqLworI2RlZmluZSBXTTg0MDBfUkxCUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSTEJSTyAqLworI2RlZmluZSBXTTg0MDBfUkxCUk9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSTEJSTyAqLworI2RlZmluZSBXTTg0MDBfUkxCUk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBSTEJSTyAqLworI2RlZmluZSBXTTg0MDBfUkxCUk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSTEJSTyAqLworI2RlZmluZSBXTTg0MDBfUlJCUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBSUkJSTyAqLworI2RlZmluZSBXTTg0MDBfUlJCUk9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBSUkJSTyAqLworI2RlZmluZSBXTTg0MDBfUlJCUk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBSUkJSTyAqLworI2RlZmluZSBXTTg0MDBfUlJCUk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSUkJSTyAqLworI2RlZmluZSBXTTg0MDBfUkxJM1JPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBSTEkzUk8gKi8KKyNkZWZpbmUgV004NDAwX1JMSTNST19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogUkxJM1JPICovCisjZGVmaW5lIFdNODQwMF9STEkzUk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFJMSTNSTyAqLworI2RlZmluZSBXTTg0MDBfUkxJM1JPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSTEkzUk8gKi8KKyNkZWZpbmUgV004NDAwX1JSSTNSTyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUlJJM1JPICovCisjZGVmaW5lIFdNODQwMF9SUkkzUk9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFJSSTNSTyAqLworI2RlZmluZSBXTTg0MDBfUlJJM1JPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBSUkkzUk8gKi8KKyNkZWZpbmUgV004NDAwX1JSSTNST19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUlJJM1JPICovCisjZGVmaW5lIFdNODQwMF9STDEyUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFJMMTJSTyAqLworI2RlZmluZSBXTTg0MDBfUkwxMlJPX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBSTDEyUk8gKi8KKyNkZWZpbmUgV004NDAwX1JMMTJST19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUkwxMlJPICovCisjZGVmaW5lIFdNODQwMF9STDEyUk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJMMTJSTyAqLworI2RlZmluZSBXTTg0MDBfUlIxMlJPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBSUjEyUk8gKi8KKyNkZWZpbmUgV004NDAwX1JSMTJST19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogUlIxMlJPICovCisjZGVmaW5lIFdNODQwMF9SUjEyUk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFJSMTJSTyAqLworI2RlZmluZSBXTTg0MDBfUlIxMlJPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSUjEyUk8gKi8KKyNkZWZpbmUgV004NDAwX1JEUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogUkRSTyAqLworI2RlZmluZSBXTTg0MDBfUkRST19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBSRFJPICovCisjZGVmaW5lIFdNODQwMF9SRFJPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJEUk8gKi8KKyNkZWZpbmUgV004NDAwX1JEUk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkRSTyAqLworCisvKgorICogUjQ3ICgweDJGKSAtIE91dHB1dCBNaXhlcjMKKyAqLworI2RlZmluZSBXTTg0MDBfTExJM0xPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMUMwICAvKiBMTEkzTE9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfTExJM0xPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMTEkzTE9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfTExJM0xPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMTEkzTE9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfTFIxMkxPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDM4ICAvKiBMUjEyTE9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfTFIxMkxPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMUjEyTE9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfTFIxMkxPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMUjEyTE9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfTEwxMkxPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBMTDEyTE9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfTEwxMkxPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMTDEyTE9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfTEwxMkxPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMTDEyTE9WT0wgLSBbMjowXSAqLworCisvKgorICogUjQ4ICgweDMwKSAtIE91dHB1dCBNaXhlcjQKKyAqLworI2RlZmluZSBXTTg0MDBfUlJJM1JPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMUMwICAvKiBSUkkzUk9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfUlJJM1JPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBSUkkzUk9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfUlJJM1JPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBSUkkzUk9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfUkwxMlJPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDM4ICAvKiBSTDEyUk9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfUkwxMlJPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBSTDEyUk9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfUkwxMlJPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBSTDEyUk9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfUlIxMlJPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBSUjEyUk9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfUlIxMlJPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBSUjEyUk9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfUlIxMlJPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBSUjEyUk9WT0wgLSBbMjowXSAqLworCisvKgorICogUjQ5ICgweDMxKSAtIE91dHB1dCBNaXhlcjUKKyAqLworI2RlZmluZSBXTTg0MDBfTFJJM0xPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMUMwICAvKiBMUkkzTE9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfTFJJM0xPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMUkkzTE9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfTFJJM0xPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMUkkzTE9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfTFJCTE9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDM4ICAvKiBMUkJMT1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9MUkJMT1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExSQkxPVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004NDAwX0xSQkxPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTFJCTE9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfTExCTE9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBMTEJMT1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODQwMF9MTEJMT1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExMQkxPVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xMQkxPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTExCTE9WT0wgLSBbMjowXSAqLworCisvKgorICogUjUwICgweDMyKSAtIE91dHB1dCBNaXhlcjYKKyAqLworI2RlZmluZSBXTTg0MDBfUkxJM1JPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMUMwICAvKiBSTEkzUk9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfUkxJM1JPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBSTEkzUk9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfUkxJM1JPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBSTEkzUk9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfUkxCUk9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDM4ICAvKiBSTEJST1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9STEJST1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJMQlJPVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004NDAwX1JMQlJPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUkxCUk9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfUlJCUk9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBSUkJST1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODQwMF9SUkJST1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJSQlJPVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX1JSQlJPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUlJCUk9WT0wgLSBbMjowXSAqLworCisvKgorICogUjUxICgweDMzKSAtIE91dDMvNCBNaXhlcgorICovCisjZGVmaW5lIFdNODQwMF9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAxODAgIC8qIFZTRUwgLSBbODo3XSAqLworI2RlZmluZSBXTTg0MDBfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBWU0VMIC0gWzg6N10gKi8KKyNkZWZpbmUgV004NDAwX1ZTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogVlNFTCAtIFs4OjddICovCisjZGVmaW5lIFdNODQwMF9MSTRPMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExJNE8zICovCisjZGVmaW5lIFdNODQwMF9MSTRPM19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExJNE8zICovCisjZGVmaW5lIFdNODQwMF9MSTRPM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExJNE8zICovCisjZGVmaW5lIFdNODQwMF9MSTRPM19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJNE8zICovCisjZGVmaW5lIFdNODQwMF9MUEdBTzMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExQR0FPMyAqLworI2RlZmluZSBXTTg0MDBfTFBHQU8zX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMUEdBTzMgKi8KKyNkZWZpbmUgV004NDAwX0xQR0FPM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTFBHQU8zICovCisjZGVmaW5lIFdNODQwMF9MUEdBTzNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExQR0FPMyAqLworI2RlZmluZSBXTTg0MDBfUkk0TzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBSSTRPNCAqLworI2RlZmluZSBXTTg0MDBfUkk0TzRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBSSTRPNCAqLworI2RlZmluZSBXTTg0MDBfUkk0TzRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSSTRPNCAqLworI2RlZmluZSBXTTg0MDBfUkk0TzRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSSTRPNCAqLworI2RlZmluZSBXTTg0MDBfUlBHQU80ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBSUEdBTzQgKi8KKyNkZWZpbmUgV004NDAwX1JQR0FPNF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogUlBHQU80ICovCisjZGVmaW5lIFdNODQwMF9SUEdBTzRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJQR0FPNCAqLworI2RlZmluZSBXTTg0MDBfUlBHQU80X1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSUEdBTzQgKi8KKworLyoKKyAqIFI1MiAoMHgzNCkgLSBMaW5lIE1peGVyMQorICovCisjZGVmaW5lIFdNODQwMF9MTE9QR0FMT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExMT1BHQUxPTiAqLworI2RlZmluZSBXTTg0MDBfTExPUEdBTE9OX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMTE9QR0FMT04gKi8KKyNkZWZpbmUgV004NDAwX0xMT1BHQUxPTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTExPUEdBTE9OICovCisjZGVmaW5lIFdNODQwMF9MTE9QR0FMT05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExMT1BHQUxPTiAqLworI2RlZmluZSBXTTg0MDBfTFJPUEdBTE9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMUk9QR0FMT04gKi8KKyNkZWZpbmUgV004NDAwX0xST1BHQUxPTl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTFJPUEdBTE9OICovCisjZGVmaW5lIFdNODQwMF9MUk9QR0FMT05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExST1BHQUxPTiAqLworI2RlZmluZSBXTTg0MDBfTFJPUEdBTE9OX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMUk9QR0FMT04gKi8KKyNkZWZpbmUgV004NDAwX0xPUExPTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTE9QTE9OICovCisjZGVmaW5lIFdNODQwMF9MT1BMT05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExPUExPTiAqLworI2RlZmluZSBXTTg0MDBfTE9QTE9OX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMT1BMT04gKi8KKyNkZWZpbmUgV004NDAwX0xPUExPTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9QTE9OICovCisjZGVmaW5lIFdNODQwMF9MUjEyTE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExSMTJMT1AgKi8KKyNkZWZpbmUgV004NDAwX0xSMTJMT1BfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTFIxMkxPUCAqLworI2RlZmluZSBXTTg0MDBfTFIxMkxPUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMUjEyTE9QICovCisjZGVmaW5lIFdNODQwMF9MUjEyTE9QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExSMTJMT1AgKi8KKyNkZWZpbmUgV004NDAwX0xMMTJMT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTEwxMkxPUCAqLworI2RlZmluZSBXTTg0MDBfTEwxMkxPUF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBMTDEyTE9QICovCisjZGVmaW5lIFdNODQwMF9MTDEyTE9QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExMMTJMT1AgKi8KKyNkZWZpbmUgV004NDAwX0xMMTJMT1BfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEwxMkxPUCAqLworI2RlZmluZSBXTTg0MDBfTExPUEdBTE9QICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMTE9QR0FMT1AgKi8KKyNkZWZpbmUgV004NDAwX0xMT1BHQUxPUF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTExPUEdBTE9QICovCisjZGVmaW5lIFdNODQwMF9MTE9QR0FMT1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExMT1BHQUxPUCAqLworI2RlZmluZSBXTTg0MDBfTExPUEdBTE9QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTE9QR0FMT1AgKi8KKworLyoKKyAqIFI1MyAoMHgzNSkgLSBMaW5lIE1peGVyMgorICovCisjZGVmaW5lIFdNODQwMF9SUk9QR0FST04gICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJST1BHQVJPTiAqLworI2RlZmluZSBXTTg0MDBfUlJPUEdBUk9OX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBSUk9QR0FST04gKi8KKyNkZWZpbmUgV004NDAwX1JST1BHQVJPTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogUlJPUEdBUk9OICovCisjZGVmaW5lIFdNODQwMF9SUk9QR0FST05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJST1BHQVJPTiAqLworI2RlZmluZSBXTTg0MDBfUkxPUEdBUk9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBSTE9QR0FST04gKi8KKyNkZWZpbmUgV004NDAwX1JMT1BHQVJPTl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogUkxPUEdBUk9OICovCisjZGVmaW5lIFdNODQwMF9STE9QR0FST05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFJMT1BHQVJPTiAqLworI2RlZmluZSBXTTg0MDBfUkxPUEdBUk9OX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSTE9QR0FST04gKi8KKyNkZWZpbmUgV004NDAwX1JPUFJPTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUk9QUk9OICovCisjZGVmaW5lIFdNODQwMF9ST1BST05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFJPUFJPTiAqLworI2RlZmluZSBXTTg0MDBfUk9QUk9OX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBST1BST04gKi8KKyNkZWZpbmUgV004NDAwX1JPUFJPTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk9QUk9OICovCisjZGVmaW5lIFdNODQwMF9STDEyUk9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFJMMTJST1AgKi8KKyNkZWZpbmUgV004NDAwX1JMMTJST1BfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogUkwxMlJPUCAqLworI2RlZmluZSBXTTg0MDBfUkwxMlJPUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBSTDEyUk9QICovCisjZGVmaW5lIFdNODQwMF9STDEyUk9QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJMMTJST1AgKi8KKyNkZWZpbmUgV004NDAwX1JSMTJST1AgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogUlIxMlJPUCAqLworI2RlZmluZSBXTTg0MDBfUlIxMlJPUF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBSUjEyUk9QICovCisjZGVmaW5lIFdNODQwMF9SUjEyUk9QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJSMTJST1AgKi8KKyNkZWZpbmUgV004NDAwX1JSMTJST1BfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUlIxMlJPUCAqLworI2RlZmluZSBXTTg0MDBfUlJPUEdBUk9QICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBSUk9QR0FST1AgKi8KKyNkZWZpbmUgV004NDAwX1JST1BHQVJPUF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogUlJPUEdBUk9QICovCisjZGVmaW5lIFdNODQwMF9SUk9QR0FST1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJST1BHQVJPUCAqLworI2RlZmluZSBXTTg0MDBfUlJPUEdBUk9QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSUk9QR0FST1AgKi8KKworLyoKKyAqIFI1NCAoMHgzNikgLSBTcGVha2VyIE1peGVyCisgKi8KKyNkZWZpbmUgV004NDAwX0xCMlNQSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTEIyU1BLICovCisjZGVmaW5lIFdNODQwMF9MQjJTUEtfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExCMlNQSyAqLworI2RlZmluZSBXTTg0MDBfTEIyU1BLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMQjJTUEsgKi8KKyNkZWZpbmUgV004NDAwX0xCMlNQS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEIyU1BLICovCisjZGVmaW5lIFdNODQwMF9SQjJTUEsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJCMlNQSyAqLworI2RlZmluZSBXTTg0MDBfUkIyU1BLX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBSQjJTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JCMlNQS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogUkIyU1BLICovCisjZGVmaW5lIFdNODQwMF9SQjJTUEtfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJCMlNQSyAqLworI2RlZmluZSBXTTg0MDBfTEkyU1BLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMSTJTUEsgKi8KKyNkZWZpbmUgV004NDAwX0xJMlNQS19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTEkyU1BLICovCisjZGVmaW5lIFdNODQwMF9MSTJTUEtfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExJMlNQSyAqLworI2RlZmluZSBXTTg0MDBfTEkyU1BLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSTJTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JJMlNQSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUkkyU1BLICovCisjZGVmaW5lIFdNODQwMF9SSTJTUEtfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFJJMlNQSyAqLworI2RlZmluZSBXTTg0MDBfUkkyU1BLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBSSTJTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JJMlNQS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkkyU1BLICovCisjZGVmaW5lIFdNODQwMF9MT1BHQVNQSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExPUEdBU1BLICovCisjZGVmaW5lIFdNODQwMF9MT1BHQVNQS19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExPUEdBU1BLICovCisjZGVmaW5lIFdNODQwMF9MT1BHQVNQS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExPUEdBU1BLICovCisjZGVmaW5lIFdNODQwMF9MT1BHQVNQS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPUEdBU1BLICovCisjZGVmaW5lIFdNODQwMF9ST1BHQVNQSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFJPUEdBU1BLICovCisjZGVmaW5lIFdNODQwMF9ST1BHQVNQS19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFJPUEdBU1BLICovCisjZGVmaW5lIFdNODQwMF9ST1BHQVNQS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFJPUEdBU1BLICovCisjZGVmaW5lIFdNODQwMF9ST1BHQVNQS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPUEdBU1BLICovCisjZGVmaW5lIFdNODQwMF9MRFNQSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExEU1BLICovCisjZGVmaW5lIFdNODQwMF9MRFNQS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExEU1BLICovCisjZGVmaW5lIFdNODQwMF9MRFNQS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExEU1BLICovCisjZGVmaW5lIFdNODQwMF9MRFNQS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExEU1BLICovCisjZGVmaW5lIFdNODQwMF9SRFNQSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFJEU1BLICovCisjZGVmaW5lIFdNODQwMF9SRFNQS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFJEU1BLICovCisjZGVmaW5lIFdNODQwMF9SRFNQS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJEU1BLICovCisjZGVmaW5lIFdNODQwMF9SRFNQS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJEU1BLICovCisKKy8qCisgKiBSNTUgKDB4MzcpIC0gQWRkaXRpb25hbCBDb250cm9sCisgKi8KKyNkZWZpbmUgV004NDAwX1ZST0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVlJPSSAqLworI2RlZmluZSBXTTg0MDBfVlJPSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWUk9JICovCisjZGVmaW5lIFdNODQwMF9WUk9JX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFZST0kgKi8KKyNkZWZpbmUgV004NDAwX1ZST0lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVlJPSSAqLworCisvKgorICogUjU2ICgweDM4KSAtIEFudGlQT1AxCisgKi8KKyNkZWZpbmUgV004NDAwX0RJU19MTElORSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRElTX0xMSU5FICovCisjZGVmaW5lIFdNODQwMF9ESVNfTExJTkVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERJU19MTElORSAqLworI2RlZmluZSBXTTg0MDBfRElTX0xMSU5FX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBESVNfTExJTkUgKi8KKyNkZWZpbmUgV004NDAwX0RJU19MTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRElTX0xMSU5FICovCisjZGVmaW5lIFdNODQwMF9ESVNfUkxJTkUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERJU19STElORSAqLworI2RlZmluZSBXTTg0MDBfRElTX1JMSU5FX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBESVNfUkxJTkUgKi8KKyNkZWZpbmUgV004NDAwX0RJU19STElORV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRElTX1JMSU5FICovCisjZGVmaW5lIFdNODQwMF9ESVNfUkxJTkVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERJU19STElORSAqLworI2RlZmluZSBXTTg0MDBfRElTX09VVDMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBESVNfT1VUMyAqLworI2RlZmluZSBXTTg0MDBfRElTX09VVDNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBESVNfT1VUMyAqLworI2RlZmluZSBXTTg0MDBfRElTX09VVDNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBESVNfT1VUMyAqLworI2RlZmluZSBXTTg0MDBfRElTX09VVDNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBESVNfT1VUMyAqLworI2RlZmluZSBXTTg0MDBfRElTX09VVDQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBESVNfT1VUNCAqLworI2RlZmluZSBXTTg0MDBfRElTX09VVDRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBESVNfT1VUNCAqLworI2RlZmluZSBXTTg0MDBfRElTX09VVDRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBESVNfT1VUNCAqLworI2RlZmluZSBXTTg0MDBfRElTX09VVDRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBESVNfT1VUNCAqLworI2RlZmluZSBXTTg0MDBfRElTX0xPVVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBESVNfTE9VVCAqLworI2RlZmluZSBXTTg0MDBfRElTX0xPVVRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBESVNfTE9VVCAqLworI2RlZmluZSBXTTg0MDBfRElTX0xPVVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBESVNfTE9VVCAqLworI2RlZmluZSBXTTg0MDBfRElTX0xPVVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBESVNfTE9VVCAqLworI2RlZmluZSBXTTg0MDBfRElTX1JPVVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBESVNfUk9VVCAqLworI2RlZmluZSBXTTg0MDBfRElTX1JPVVRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBESVNfUk9VVCAqLworI2RlZmluZSBXTTg0MDBfRElTX1JPVVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBESVNfUk9VVCAqLworI2RlZmluZSBXTTg0MDBfRElTX1JPVVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBESVNfUk9VVCAqLworCisvKgorICogUjU3ICgweDM5KSAtIEFudGlQT1AyCisgKi8KKyNkZWZpbmUgV004NDAwX1NPRlRTVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogU09GVFNUICovCisjZGVmaW5lIFdNODQwMF9TT0ZUU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFNPRlRTVCAqLworI2RlZmluZSBXTTg0MDBfU09GVFNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBTT0ZUU1QgKi8KKyNkZWZpbmUgV004NDAwX1NPRlRTVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU09GVFNUICovCisjZGVmaW5lIFdNODQwMF9CVUZJT0VOICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEJVRklPRU4gKi8KKyNkZWZpbmUgV004NDAwX0JVRklPRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQlVGSU9FTiAqLworI2RlZmluZSBXTTg0MDBfQlVGSU9FTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBCVUZJT0VOICovCisjZGVmaW5lIFdNODQwMF9CVUZJT0VOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJVRklPRU4gKi8KKyNkZWZpbmUgV004NDAwX0JVRkRDT1BFTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQlVGRENPUEVOICovCisjZGVmaW5lIFdNODQwMF9CVUZEQ09QRU5fTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEJVRkRDT1BFTiAqLworI2RlZmluZSBXTTg0MDBfQlVGRENPUEVOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBCVUZEQ09QRU4gKi8KKyNkZWZpbmUgV004NDAwX0JVRkRDT1BFTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQlVGRENPUEVOICovCisjZGVmaW5lIFdNODQwMF9QT0JDVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFBPQkNUUkwgKi8KKyNkZWZpbmUgV004NDAwX1BPQkNUUkxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogUE9CQ1RSTCAqLworI2RlZmluZSBXTTg0MDBfUE9CQ1RSTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBQT0JDVFJMICovCisjZGVmaW5lIFdNODQwMF9QT0JDVFJMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFBPQkNUUkwgKi8KKyNkZWZpbmUgV004NDAwX1ZNSURUT0cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVk1JRFRPRyAqLworI2RlZmluZSBXTTg0MDBfVk1JRFRPR19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWTUlEVE9HICovCisjZGVmaW5lIFdNODQwMF9WTUlEVE9HX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFZNSURUT0cgKi8KKyNkZWZpbmUgV004NDAwX1ZNSURUT0dfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVk1JRFRPRyAqLworCisvKgorICogUjU4ICgweDNBKSAtIE1JQ0JJQVMKKyAqLworI2RlZmluZSBXTTg0MDBfTUNEU0NUSF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMEMwICAvKiBNQ0RTQ1RIIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004NDAwX01DRFNDVEhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTUNEU0NUSCAtIFs3OjZdICovCisjZGVmaW5lIFdNODQwMF9NQ0RTQ1RIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIE1DRFNDVEggLSBbNzo2XSAqLworI2RlZmluZSBXTTg0MDBfTUNEVEhSX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDM4ICAvKiBNQ0RUSFIgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfTUNEVEhSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBNQ0RUSFIgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfTUNEVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBNQ0RUSFIgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfTUNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBNQ0QgKi8KKyNkZWZpbmUgV004NDAwX01DRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTUNEICovCisjZGVmaW5lIFdNODQwMF9NQ0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIE1DRCAqLworI2RlZmluZSBXTTg0MDBfTUNEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0QgKi8KKyNkZWZpbmUgV004NDAwX01CU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUJTRUwgKi8KKyNkZWZpbmUgV004NDAwX01CU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUJTRUwgKi8KKyNkZWZpbmUgV004NDAwX01CU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTUJTRUwgKi8KKyNkZWZpbmUgV004NDAwX01CU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUJTRUwgKi8KKworLyoKKyAqIFI2MCAoMHgzQykgLSBGTEwgQ29udHJvbCAxCisgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9SRUZfRlJFUSAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRkxMX1JFRl9GUkVRICovCisjZGVmaW5lIFdNODQwMF9GTExfUkVGX0ZSRVFfTUFTSyAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEZMTF9SRUZfRlJFUSAqLworI2RlZmluZSBXTTg0MDBfRkxMX1JFRl9GUkVRX1NISUZUICAgICAgICAgICAgICAgICAgIDEyICAvKiBGTExfUkVGX0ZSRVEgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9SRUZfRlJFUV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX1JFRl9GUkVRICovCisjZGVmaW5lIFdNODQwMF9GTExfQ0xLX1NSQ19NQVNLICAgICAgICAgICAgICAgICAweDBDMDAgIC8qIEZMTF9DTEtfU1JDIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg0MDBfRkxMX0NMS19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEwICAvKiBGTExfQ0xLX1NSQyAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9DTEtfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogRkxMX0NMS19TUkMgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODQwMF9GTExfRlJBQyAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEZMTF9GUkFDICovCisjZGVmaW5lIFdNODQwMF9GTExfRlJBQ19NQVNLICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEZMTF9GUkFDICovCisjZGVmaW5lIFdNODQwMF9GTExfRlJBQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEZMTF9GUkFDICovCisjZGVmaW5lIFdNODQwMF9GTExfRlJBQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9GUkFDICovCisjZGVmaW5lIFdNODQwMF9GTExfT1NDX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEZMTF9PU0NfRU5BICovCisjZGVmaW5lIFdNODQwMF9GTExfT1NDX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEZMTF9PU0NfRU5BICovCisjZGVmaW5lIFdNODQwMF9GTExfT1NDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIEZMTF9PU0NfRU5BICovCisjZGVmaW5lIFdNODQwMF9GTExfT1NDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9PU0NfRU5BICovCisjZGVmaW5lIFdNODQwMF9GTExfQ1RSTF9SQVRFX01BU0sgICAgICAgICAgICAgICAweDAwRTAgIC8qIEZMTF9DVFJMX1JBVEUgLSBbNzo1XSAqLworI2RlZmluZSBXTTg0MDBfRkxMX0NUUkxfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBGTExfQ1RSTF9SQVRFIC0gWzc6NV0gKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9DVFJMX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgMyAgLyogRkxMX0NUUkxfUkFURSAtIFs3OjVdICovCisjZGVmaW5lIFdNODQwMF9GTExfRlJBVElPX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEZMTF9GUkFUSU8gLSBbNDowXSAqLworI2RlZmluZSBXTTg0MDBfRkxMX0ZSQVRJT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfRlJBVElPIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9GUkFUSU9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgNSAgLyogRkxMX0ZSQVRJTyAtIFs0OjBdICovCisKKy8qCisgKiBSNjEgKDB4M0QpIC0gRkxMIENvbnRyb2wgMgorICovCisjZGVmaW5lIFdNODQwMF9GTExfS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEZMTF9LIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODQwMF9GTExfS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9LIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODQwMF9GTExfS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEZMTF9LIC0gWzE1OjBdICovCisKKy8qCisgKiBSNjIgKDB4M0UpIC0gRkxMIENvbnRyb2wgMworICovCisjZGVmaW5lIFdNODQwMF9GTExfTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAzRkYgIC8qIEZMTF9OIC0gWzk6MF0gKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9OX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX04gLSBbOTowXSAqLworI2RlZmluZSBXTTg0MDBfRkxMX05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBGTExfTiAtIFs5OjBdICovCisKKy8qCisgKiBSNjMgKDB4M0YpIC0gRkxMIENvbnRyb2wgNAorICovCisjZGVmaW5lIFdNODQwMF9GTExfVFJLX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAweDAwNzggIC8qIEZMTF9UUktfR0FJTiAtIFs2OjNdICovCisjZGVmaW5lIFdNODQwMF9GTExfVFJLX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9UUktfR0FJTiAtIFs2OjNdICovCisjZGVmaW5lIFdNODQwMF9GTExfVFJLX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgIDQgIC8qIEZMTF9UUktfR0FJTiAtIFs2OjNdICovCisjZGVmaW5lIFdNODQwMF9GTExfT1VURElWX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIEZMTF9PVVRESVYgLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfRkxMX09VVERJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfT1VURElWIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9PVVRESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMyAgLyogRkxMX09VVERJViAtIFsyOjBdICovCisKK3ZvaWQgd204NDAwX3Jlc2V0X2NvZGVjX3JlZ19jYWNoZShzdHJ1Y3Qgd204NDAwICp3bTg0MDApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1wcml2YXRlLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYWI0ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtcHJpdmF0ZS5oCkBAIC0wLDAgKzEsOTM2IEBACisvKgorICogd204NDAwIHByaXZhdGUgZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHBsYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NRkRfV004NDAwX1BSSVZfSAorI2RlZmluZSBfX0xJTlVYX01GRF9XTTg0MDBfUFJJVl9ICisKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204NDAwLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2RlZmluZSBXTTg0MDBfUkVHSVNURVJfQ09VTlQgMHg1NQorCitzdHJ1Y3Qgd204NDAwIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlpbnQgKCpyZWFkX2Rldikodm9pZCAqZGF0YSwgY2hhciByZWcsIGludCBjb3VudCwgdTE2ICpkc3QpOworCWludCAoKndyaXRlX2Rldikodm9pZCAqZGF0YSwgY2hhciByZWcsIGludCBjb3VudCwgY29uc3QgdTE2ICpzcmMpOworCisJc3RydWN0IG11dGV4IGlvX2xvY2s7CisJdm9pZCAqaW9fZGF0YTsKKworCXUxNiByZWdfY2FjaGVbV004NDAwX1JFR0lTVEVSX0NPVU5UXTsKKworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVndWxhdG9yc1s2XTsKK307CisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgV004NDAwX1JFU0VUX0lEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgV004NDAwX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMSAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMiAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgV004NDAwX1BPV0VSX01BTkFHRU1FTlRfMyAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgV004NDAwX0FVRElPX0lOVEVSRkFDRV8xICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgV004NDAwX0FVRElPX0lOVEVSRkFDRV8yICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgV004NDAwX0NMT0NLSU5HXzEgICAgICAgICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgV004NDAwX0NMT0NLSU5HXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgV004NDAwX0FVRElPX0lOVEVSRkFDRV8zICAgICAgICAgICAgICAgIDB4MDkKKyNkZWZpbmUgV004NDAwX0FVRElPX0lOVEVSRkFDRV80ICAgICAgICAgICAgICAgIDB4MEEKKyNkZWZpbmUgV004NDAwX0RBQ19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIKKyNkZWZpbmUgV004NDAwX0xFRlRfREFDX0RJR0lUQUxfVk9MVU1FICAgICAgICAgIDB4MEMKKyNkZWZpbmUgV004NDAwX1JJR0hUX0RBQ19ESUdJVEFMX1ZPTFVNRSAgICAgICAgIDB4MEQKKyNkZWZpbmUgV004NDAwX0RJR0lUQUxfU0lERV9UT05FICAgICAgICAgICAgICAgIDB4MEUKKyNkZWZpbmUgV004NDAwX0FEQ19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYKKyNkZWZpbmUgV004NDAwX0xFRlRfQURDX0RJR0lUQUxfVk9MVU1FICAgICAgICAgIDB4MTAKKyNkZWZpbmUgV004NDAwX1JJR0hUX0FEQ19ESUdJVEFMX1ZPTFVNRSAgICAgICAgIDB4MTEKKyNkZWZpbmUgV004NDAwX0dQSU9fQ1RSTF8xICAgICAgICAgICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgV004NDAwX0dQSU8xX0dQSU8yICAgICAgICAgICAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgV004NDAwX0dQSU8zX0dQSU80ICAgICAgICAgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgV004NDAwX0dQSU81X0dQSU82ICAgICAgICAgICAgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgV004NDAwX0dQSU9DVFJMXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgV004NDAwX0dQSU9fUE9MICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcKKyNkZWZpbmUgV004NDAwX0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FICAgICAgIDB4MTgKKyNkZWZpbmUgV004NDAwX0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FICAgICAgIDB4MTkKKyNkZWZpbmUgV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSAgICAgIDB4MUEKKyNkZWZpbmUgV004NDAwX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSAgICAgIDB4MUIKKyNkZWZpbmUgV004NDAwX0xFRlRfT1VUUFVUX1ZPTFVNRSAgICAgICAgICAgICAgIDB4MUMKKyNkZWZpbmUgV004NDAwX1JJR0hUX09VVFBVVF9WT0xVTUUgICAgICAgICAgICAgIDB4MUQKKyNkZWZpbmUgV004NDAwX0xJTkVfT1VUUFVUU19WT0xVTUUgICAgICAgICAgICAgIDB4MUUKKyNkZWZpbmUgV004NDAwX09VVDNfNF9WT0xVTUUgICAgICAgICAgICAgICAgICAgIDB4MUYKKyNkZWZpbmUgV004NDAwX0xFRlRfT1BHQV9WT0xVTUUgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgV004NDAwX1JJR0hUX09QR0FfVk9MVU1FICAgICAgICAgICAgICAgIDB4MjEKKyNkZWZpbmUgV004NDAwX1NQRUFLRVJfVk9MVU1FICAgICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgV004NDAwX0NMQVNTRDEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjMKKyNkZWZpbmUgV004NDAwX0NMQVNTRDMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUKKyNkZWZpbmUgV004NDAwX0lOUFVUX01JWEVSMSAgICAgICAgICAgICAgICAgICAgIDB4MjcKKyNkZWZpbmUgV004NDAwX0lOUFVUX01JWEVSMiAgICAgICAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgV004NDAwX0lOUFVUX01JWEVSMyAgICAgICAgICAgICAgICAgICAgIDB4MjkKKyNkZWZpbmUgV004NDAwX0lOUFVUX01JWEVSNCAgICAgICAgICAgICAgICAgICAgIDB4MkEKKyNkZWZpbmUgV004NDAwX0lOUFVUX01JWEVSNSAgICAgICAgICAgICAgICAgICAgIDB4MkIKKyNkZWZpbmUgV004NDAwX0lOUFVUX01JWEVSNiAgICAgICAgICAgICAgICAgICAgIDB4MkMKKyNkZWZpbmUgV004NDAwX09VVFBVVF9NSVhFUjEgICAgICAgICAgICAgICAgICAgIDB4MkQKKyNkZWZpbmUgV004NDAwX09VVFBVVF9NSVhFUjIgICAgICAgICAgICAgICAgICAgIDB4MkUKKyNkZWZpbmUgV004NDAwX09VVFBVVF9NSVhFUjMgICAgICAgICAgICAgICAgICAgIDB4MkYKKyNkZWZpbmUgV004NDAwX09VVFBVVF9NSVhFUjQgICAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgV004NDAwX09VVFBVVF9NSVhFUjUgICAgICAgICAgICAgICAgICAgIDB4MzEKKyNkZWZpbmUgV004NDAwX09VVFBVVF9NSVhFUjYgICAgICAgICAgICAgICAgICAgIDB4MzIKKyNkZWZpbmUgV004NDAwX09VVDNfNF9NSVhFUiAgICAgICAgICAgICAgICAgICAgIDB4MzMKKyNkZWZpbmUgV004NDAwX0xJTkVfTUlYRVIxICAgICAgICAgICAgICAgICAgICAgIDB4MzQKKyNkZWZpbmUgV004NDAwX0xJTkVfTUlYRVIyICAgICAgICAgICAgICAgICAgICAgIDB4MzUKKyNkZWZpbmUgV004NDAwX1NQRUFLRVJfTUlYRVIgICAgICAgICAgICAgICAgICAgIDB4MzYKKyNkZWZpbmUgV004NDAwX0FERElUSU9OQUxfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MzcKKyNkZWZpbmUgV004NDAwX0FOVElQT1AxICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzgKKyNkZWZpbmUgV004NDAwX0FOVElQT1AyICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzkKKyNkZWZpbmUgV004NDAwX01JQ0JJQVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0EKKyNkZWZpbmUgV004NDAwX0ZMTF9DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgIDB4M0MKKyNkZWZpbmUgV004NDAwX0ZMTF9DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgIDB4M0QKKyNkZWZpbmUgV004NDAwX0ZMTF9DT05UUk9MXzMgICAgICAgICAgICAgICAgICAgIDB4M0UKKyNkZWZpbmUgV004NDAwX0ZMTF9DT05UUk9MXzQgICAgICAgICAgICAgICAgICAgIDB4M0YKKyNkZWZpbmUgV004NDAwX0xETzFfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4NDEKKyNkZWZpbmUgV004NDAwX0xETzJfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4NDIKKyNkZWZpbmUgV004NDAwX0xETzNfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4NDMKKyNkZWZpbmUgV004NDAwX0xETzRfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4NDQKKyNkZWZpbmUgV004NDAwX0RDREMxX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgIDB4NDYKKyNkZWZpbmUgV004NDAwX0RDREMxX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgIDB4NDcKKyNkZWZpbmUgV004NDAwX0RDREMyX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgV004NDAwX0RDREMyX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgIDB4NDkKKyNkZWZpbmUgV004NDAwX0lOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICAgIDB4NEIKKyNkZWZpbmUgV004NDAwX1BNX0dFTkVSQUwgICAgICAgICAgICAgICAgICAgICAgIDB4NEMKKyNkZWZpbmUgV004NDAwX1BNX1NIVVRET1dOX0NPTlRST0wgICAgICAgICAgICAgIDB4NEUKKyNkZWZpbmUgV004NDAwX0lOVEVSUlVQVF9TVEFUVVNfMSAgICAgICAgICAgICAgIDB4NEYKKyNkZWZpbmUgV004NDAwX0lOVEVSUlVQVF9TVEFUVVNfMV9NQVNLICAgICAgICAgIDB4NTAKKyNkZWZpbmUgV004NDAwX0lOVEVSUlVQVF9MRVZFTFMgICAgICAgICAgICAgICAgIDB4NTEKKyNkZWZpbmUgV004NDAwX1NIVVRET1dOX1JFQVNPTiAgICAgICAgICAgICAgICAgIDB4NTIKKyNkZWZpbmUgV004NDAwX0xJTkVfQ0lSQ1VJVFMgICAgICAgICAgICAgICAgICAgIDB4NTQKKworLyoKKyAqIEZpZWxkIERlZmluaXRpb25zLgorICovCisKKy8qCisgKiBSMCAoMHgwMCkgLSBSZXNldC9JRAorICovCisjZGVmaW5lIFdNODQwMF9TV19SRVNFVF9DSElQX0lEX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIFNXX1JFU0VUL0NISVBfSUQgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004NDAwX1NXX1JFU0VUX0NISVBfSURfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogU1dfUkVTRVQvQ0hJUF9JRCAtIFsxNTowXSAqLworI2RlZmluZSBXTTg0MDBfU1dfUkVTRVRfQ0hJUF9JRF9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBTV19SRVNFVC9DSElQX0lEIC0gWzE1OjBdICovCisKKy8qCisgKiBSMSAoMHgwMSkgLSBJRAorICovCisjZGVmaW5lIFdNODQwMF9DSElQX1JFVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDcwMDAgIC8qIENISVBfUkVWIC0gWzE0OjEyXSAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9SRVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBDSElQX1JFViAtIFsxNDoxMl0gKi8KKyNkZWZpbmUgV004NDAwX0NISVBfUkVWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogQ0hJUF9SRVYgLSBbMTQ6MTJdICovCisKKy8qCisgKiBSMTggKDB4MTIpIC0gR1BJTyBDVFJMIDEKKyAqLworI2RlZmluZSBXTTg0MDBfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBJUlEgKi8KKyNkZWZpbmUgV004NDAwX0lSUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogSVJRICovCisjZGVmaW5lIFdNODQwMF9JUlFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIElSUSAqLworI2RlZmluZSBXTTg0MDBfSVJRX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJUlEgKi8KKyNkZWZpbmUgV004NDAwX1RFTVBPSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogVEVNUE9LICovCisjZGVmaW5lIFdNODQwMF9URU1QT0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFRFTVBPSyAqLworI2RlZmluZSBXTTg0MDBfVEVNUE9LX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDExICAvKiBURU1QT0sgKi8KKyNkZWZpbmUgV004NDAwX1RFTVBPS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVEVNUE9LICovCisjZGVmaW5lIFdNODQwMF9NSUMxU0hSVCAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIE1JQzFTSFJUICovCisjZGVmaW5lIFdNODQwMF9NSUMxU0hSVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIE1JQzFTSFJUICovCisjZGVmaW5lIFdNODQwMF9NSUMxU0hSVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIE1JQzFTSFJUICovCisjZGVmaW5lIFdNODQwMF9NSUMxU0hSVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQzFTSFJUICovCisjZGVmaW5lIFdNODQwMF9NSUMxREVUICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIE1JQzFERVQgKi8KKyNkZWZpbmUgV004NDAwX01JQzFERVRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUlDMURFVCAqLworI2RlZmluZSBXTTg0MDBfTUlDMURFVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBNSUMxREVUICovCisjZGVmaW5lIFdNODQwMF9NSUMxREVUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQzFERVQgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9MQ0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRkxMX0xDSyAqLworI2RlZmluZSBXTTg0MDBfRkxMX0xDS19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBGTExfTENLICovCisjZGVmaW5lIFdNODQwMF9GTExfTENLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEZMTF9MQ0sgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9MQ0tfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0xDSyAqLworI2RlZmluZSBXTTg0MDBfR1BJT19TVEFUVVNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBHUElPX1NUQVRVUyAtIFs3OjBdICovCisjZGVmaW5lIFdNODQwMF9HUElPX1NUQVRVU19TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQSU9fU1RBVFVTIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004NDAwX0dQSU9fU1RBVFVTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgOCAgLyogR1BJT19TVEFUVVMgLSBbNzowXSAqLworCisvKgorICogUjE5ICgweDEzKSAtIEdQSU8xICYgR1BJTzIKKyAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfREVCX0VOQSAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUElPMl9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPMl9ERUJfRU5BX01BU0sgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQSU8yX0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX0RFQl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxNSAgLyogR1BJTzJfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfREVCX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMl9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPMl9JUlFfRU5BICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQSU8yX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX0lSUV9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1BJTzJfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfSVJRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDE0ICAvKiBHUElPMl9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPMl9JUlFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8yX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1BJTzJfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1BJTzJfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogR1BJTzJfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzJfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogR1BJTzJfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogR1BJTzJfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogR1BJTzJfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzJfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MEYwMCAgLyogR1BJTzJfU0VMIC0gWzExOjhdICovCisjZGVmaW5lIFdNODQwMF9HUElPMl9TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEdQSU8yX1NFTCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPMl9TRUwgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX0RFQl9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJTzFfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzFfREVCX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUElPMV9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9ERUJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIEdQSU8xX0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX0RFQl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzFfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzFfSVJRX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUElPMV9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9JUlFfRU5BX01BU0sgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSU8xX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX0lSUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgNiAgLyogR1BJTzFfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzFfSVJRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMV9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEdQSU8xX1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8xX1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSU8xX1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSU8xX1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU8xX1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8xX1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEdQSU8xX1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQSU8xX1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU8xX1NFTCAtIFszOjBdICovCisKKy8qCisgKiBSMjAgKDB4MTQpIC0gR1BJTzMgJiBHUElPNAorICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9ERUJfRU5BICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQSU80X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU80X0RFQl9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1BJTzRfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfREVCX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDE1ICAvKiBHUElPNF9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9ERUJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU80X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU80X0lSUV9FTkEgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1BJTzRfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfSVJRX0VOQV9NQVNLICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUElPNF9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9JUlFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMTQgIC8qIEdQSU80X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU80X0lSUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzRfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUElPNF9QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUElPNF9QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBHUElPNF9QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPNF9QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBHUElPNF9QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBHUElPNF9QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBHUElPNF9QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPNF9QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwRjAwICAvKiBHUElPNF9TRUwgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004NDAwX0dQSU80X1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogR1BJTzRfU0VMIC0gWzExOjhdICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU80X1NFTCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfREVCX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUElPM19ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPM19ERUJfRU5BX01BU0sgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8zX0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX0RFQl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgNyAgLyogR1BJTzNfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfREVCX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPM19ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPM19JUlFfRU5BICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSU8zX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX0lSUV9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzNfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfSVJRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICA2ICAvKiBHUElPM19JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPM19JUlFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8zX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzNfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzNfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogR1BJTzNfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzNfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzNfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzNfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzNfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzNfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogR1BJTzNfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1BJTzNfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzNfU0VMIC0gWzM6MF0gKi8KKworLyoKKyAqIFIyMSAoMHgxNSkgLSBHUElPNSAmIEdQSU82CisgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X0RFQl9FTkEgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1BJTzZfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzZfREVCX0VOQV9NQVNLICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUElPNl9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9ERUJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMTUgIC8qIEdQSU82X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X0RFQl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzZfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzZfSVJRX0VOQSAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUElPNl9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9JUlFfRU5BX01BU0sgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQSU82X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X0lSUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxNCAgLyogR1BJTzZfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzZfSVJRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPNl9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQSU82X1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQSU82X1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEdQSU82X1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU82X1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEdQSU82X1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEdQSU82X1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIEdQSU82X1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU82X1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDBGMDAgIC8qIEdQSU82X1NFTCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzZfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBHUElPNl9TRUwgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzZfU0VMIC0gWzExOjhdICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9ERUJfRU5BICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU81X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU81X0RFQl9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJTzVfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfREVCX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICA3ICAvKiBHUElPNV9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9ERUJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU81X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU81X0lSUV9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzVfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfSVJRX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUElPNV9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9JUlFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDYgIC8qIEdQSU81X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU81X0lSUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzVfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPNV9QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPNV9QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBHUElPNV9QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPNV9QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPNV9QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPNV9QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPNV9QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPNV9QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUElPNV9TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUElPNV9TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPNV9TRUwgLSBbMzowXSAqLworCisvKgorICogUjIyICgweDE2KSAtIEdQSU9DVFJMIDIKKyAqLworI2RlZmluZSBXTTg0MDBfVEVNUE9LX0lSUV9FTkEgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBURU1QT0tfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfVEVNUE9LX0lSUV9FTkFfTUFTSyAgICAgICAgICAgICAgMHgwODAwICAvKiBURU1QT0tfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfVEVNUE9LX0lSUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgIDExICAvKiBURU1QT0tfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfVEVNUE9LX0lSUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBURU1QT0tfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTUlDMVNIUlRfSVJRX0VOQSAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBNSUMxU0hSVF9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9NSUMxU0hSVF9JUlFfRU5BX01BU0sgICAgICAgICAgICAweDA0MDAgIC8qIE1JQzFTSFJUX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX01JQzFTSFJUX0lSUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAxMCAgLyogTUlDMVNIUlRfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTUlDMVNIUlRfSVJRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBNSUMxU0hSVF9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9NSUMxREVUX0lSUV9FTkEgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIE1JQzFERVRfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTUlDMURFVF9JUlFfRU5BX01BU0sgICAgICAgICAgICAgMHgwMjAwICAvKiBNSUMxREVUX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX01JQzFERVRfSVJRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgOSAgLyogTUlDMURFVF9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9NSUMxREVUX0lSUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIE1JQzFERVRfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfRkxMX0xDS19JUlFfRU5BICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBGTExfTENLX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9MQ0tfSVJRX0VOQV9NQVNLICAgICAgICAgICAgIDB4MDEwMCAgLyogRkxMX0xDS19JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9GTExfTENLX0lSUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgIDggIC8qIEZMTF9MQ0tfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfRkxMX0xDS19JUlFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBGTExfTENLX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSThfREVCX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJOF9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk4X0RFQl9FTkFfTUFTSyAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSThfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJOF9ERUJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICA3ICAvKiBHUEk4X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSThfREVCX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJOF9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk4X0lSUV9FTkEgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSThfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJOF9JUlFfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUEk4X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSThfSVJRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgNiAgLyogR1BJOF9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk4X0lSUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSThfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJOF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUEk4X0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJOF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUEk4X0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJOF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUEk4X0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJOF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk4X0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJN19ERUJfRU5BICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBHUEk3X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSTdfREVCX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1BJN19ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk3X0RFQl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgIDMgIC8qIEdQSTdfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJN19ERUJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk3X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSTdfSVJRX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogR1BJN19JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk3X0lSUV9FTkFfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEdQSTdfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJN19JUlFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBHUEk3X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSTdfSVJRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJN19JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk3X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk3X0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk3X0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk3X0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSTdfRU5BICovCisKKy8qCisgKiBSMjMgKDB4MTcpIC0gR1BJT19QT0wKKyAqLworI2RlZmluZSBXTTg0MDBfSVJRX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBJUlFfSU5WICovCisjZGVmaW5lIFdNODQwMF9JUlFfSU5WX01BU0sgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIElSUV9JTlYgKi8KKyNkZWZpbmUgV004NDAwX0lSUV9JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogSVJRX0lOViAqLworI2RlZmluZSBXTTg0MDBfSVJRX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJUlFfSU5WICovCisjZGVmaW5lIFdNODQwMF9URU1QT0tfUE9MICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFRFTVBPS19QT0wgKi8KKyNkZWZpbmUgV004NDAwX1RFTVBPS19QT0xfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogVEVNUE9LX1BPTCAqLworI2RlZmluZSBXTTg0MDBfVEVNUE9LX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDExICAvKiBURU1QT0tfUE9MICovCisjZGVmaW5lIFdNODQwMF9URU1QT0tfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRFTVBPS19QT0wgKi8KKyNkZWZpbmUgV004NDAwX01JQzFTSFJUX1BPTCAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTUlDMVNIUlRfUE9MICovCisjZGVmaW5lIFdNODQwMF9NSUMxU0hSVF9QT0xfTUFTSyAgICAgICAgICAgICAgICAweDA0MDAgIC8qIE1JQzFTSFJUX1BPTCAqLworI2RlZmluZSBXTTg0MDBfTUlDMVNIUlRfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgIDEwICAvKiBNSUMxU0hSVF9QT0wgKi8KKyNkZWZpbmUgV004NDAwX01JQzFTSFJUX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMVNIUlRfUE9MICovCisjZGVmaW5lIFdNODQwMF9NSUMxREVUX1BPTCAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIE1JQzFERVRfUE9MICovCisjZGVmaW5lIFdNODQwMF9NSUMxREVUX1BPTF9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIE1JQzFERVRfUE9MICovCisjZGVmaW5lIFdNODQwMF9NSUMxREVUX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIE1JQzFERVRfUE9MICovCisjZGVmaW5lIFdNODQwMF9NSUMxREVUX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQzFERVRfUE9MICovCisjZGVmaW5lIFdNODQwMF9GTExfTENLX1BPTCAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEZMTF9MQ0tfUE9MICovCisjZGVmaW5lIFdNODQwMF9GTExfTENLX1BPTF9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEZMTF9MQ0tfUE9MICovCisjZGVmaW5lIFdNODQwMF9GTExfTENLX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIEZMTF9MQ0tfUE9MICovCisjZGVmaW5lIFdNODQwMF9GTExfTENLX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9MQ0tfUE9MICovCisjZGVmaW5lIFdNODQwMF9HUElPX1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIEdQSU9fUE9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004NDAwX0dQSU9fUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1BJT19QT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg0MDBfR1BJT19QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBHUElPX1BPTCAtIFs3OjBdICovCisKKy8qCisgKiBSNjUgKDB4NDEpIC0gTERPIDEgQ29udHJvbAorICovCisjZGVmaW5lIFdNODQwMF9MRE8xX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIExETzFfRU5BICovCisjZGVmaW5lIFdNODQwMF9MRE8xX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIExETzFfRU5BICovCisjZGVmaW5lIFdNODQwMF9MRE8xX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIExETzFfRU5BICovCisjZGVmaW5lIFdNODQwMF9MRE8xX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzFfRU5BICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1NXSSAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIExETzFfU1dJICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1NXSV9NQVNLICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIExETzFfU1dJICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1NXSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIExETzFfU1dJICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1NXSV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzFfU1dJICovCisjZGVmaW5lIFdNODQwMF9MRE8xX09QRkxUICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIExETzFfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfT1BGTFRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogTERPMV9PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfTERPMV9PUEZMVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBMRE8xX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9MRE8xX09QRkxUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzFfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfRVJSQUNUICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogTERPMV9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogTERPMV9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfRVJSQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAxMSAgLyogTERPMV9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfRVJSQUNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMV9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfSElCX01PREUgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTERPMV9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfTERPMV9ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgMHgwNDAwICAvKiBMRE8xX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9MRE8xX0hJQl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgMTAgIC8qIExETzFfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfSElCX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTERPMV9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfTERPMV9WSU1HX01BU0sgICAgICAgICAgICAgICAgICAgMHgwM0UwICAvKiBMRE8xX1ZJTUcgLSBbOTo1XSAqLworI2RlZmluZSBXTTg0MDBfTERPMV9WSU1HX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMRE8xX1ZJTUcgLSBbOTo1XSAqLworI2RlZmluZSBXTTg0MDBfTERPMV9WSU1HX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMRE8xX1ZJTUcgLSBbOTo1XSAqLworI2RlZmluZSBXTTg0MDBfTERPMV9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBMRE8xX1ZTRUwgLSBbNDowXSAqLworI2RlZmluZSBXTTg0MDBfTERPMV9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMRE8xX1ZTRUwgLSBbNDowXSAqLworI2RlZmluZSBXTTg0MDBfTERPMV9WU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMRE8xX1ZTRUwgLSBbNDowXSAqLworCisvKgorICogUjY2ICgweDQyKSAtIExETyAyIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTg0MDBfTERPMl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBMRE8yX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBMRE8yX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBMRE8yX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8yX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9TV0kgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBMRE8yX1NXSSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9TV0lfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBMRE8yX1NXSSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9TV0lfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBMRE8yX1NXSSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9TV0lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8yX1NXSSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9PUEZMVCAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBMRE8yX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9MRE8yX09QRkxUX01BU0sgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIExETzJfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0xETzJfT1BGTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxMiAgLyogTERPMl9PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfTERPMl9PUEZMVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8yX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9MRE8yX0VSUkFDVCAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIExETzJfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9MRE8yX0VSUkFDVF9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIExETzJfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9MRE8yX0VSUkFDVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIExETzJfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9MRE8yX0VSUkFDVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9MRE8yX0hJQl9NT0RFICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIExETzJfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0xETzJfSElCX01PREVfTUFTSyAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTERPMl9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9ISUJfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgIDEwICAvKiBMRE8yX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9MRE8yX0hJQl9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0xETzJfVklNR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDNFMCAgLyogTERPMl9WSU1HIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004NDAwX0xETzJfVklNR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTERPMl9WSU1HIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004NDAwX0xETzJfVklNR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTERPMl9WSU1HIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004NDAwX0xETzJfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogTERPMl9WU0VMIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xETzJfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTERPMl9WU0VMIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xETzJfVlNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTERPMl9WU0VMIC0gWzQ6MF0gKi8KKworLyoKKyAqIFI2NyAoMHg0MykgLSBMRE8gMyBDb250cm9sCisgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTERPM19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTERPM19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogTERPM19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPM19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfU1dJICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogTERPM19TV0kgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfU1dJX01BU0sgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogTERPM19TV0kgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfU1dJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogTERPM19TV0kgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfU1dJX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPM19TV0kgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfT1BGTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogTERPM19PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfTERPM19PUEZMVF9NQVNLICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBMRE8zX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9MRE8zX09QRkxUX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIExETzNfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfT1BGTFRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPM19PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfTERPM19FUlJBQ1QgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBMRE8zX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTERPM19FUlJBQ1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBMRE8zX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTERPM19FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgIDExICAvKiBMRE8zX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTERPM19FUlJBQ1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8zX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTERPM19ISUJfTU9ERSAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBMRE8zX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9MRE8zX0hJQl9NT0RFX01BU0sgICAgICAgICAgICAgICAweDA0MDAgIC8qIExETzNfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfSElCX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAxMCAgLyogTERPM19ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfTERPM19ISUJfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8zX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9MRE8zX1ZJTUdfTUFTSyAgICAgICAgICAgICAgICAgICAweDAzRTAgIC8qIExETzNfVklNRyAtIFs5OjVdICovCisjZGVmaW5lIFdNODQwMF9MRE8zX1ZJTUdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExETzNfVklNRyAtIFs5OjVdICovCisjZGVmaW5lIFdNODQwMF9MRE8zX1ZJTUdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExETzNfVklNRyAtIFs5OjVdICovCisjZGVmaW5lIFdNODQwMF9MRE8zX1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIExETzNfVlNFTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODQwMF9MRE8zX1ZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExETzNfVlNFTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODQwMF9MRE8zX1ZTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExETzNfVlNFTCAtIFs0OjBdICovCisKKy8qCisgKiBSNjggKDB4NDQpIC0gTERPIDQgQ29udHJvbAorICovCisjZGVmaW5lIFdNODQwMF9MRE80X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIExETzRfRU5BICovCisjZGVmaW5lIFdNODQwMF9MRE80X0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIExETzRfRU5BICovCisjZGVmaW5lIFdNODQwMF9MRE80X0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIExETzRfRU5BICovCisjZGVmaW5lIFdNODQwMF9MRE80X0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzRfRU5BICovCisjZGVmaW5lIFdNODQwMF9MRE80X1NXSSAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIExETzRfU1dJICovCisjZGVmaW5lIFdNODQwMF9MRE80X1NXSV9NQVNLICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIExETzRfU1dJICovCisjZGVmaW5lIFdNODQwMF9MRE80X1NXSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIExETzRfU1dJICovCisjZGVmaW5lIFdNODQwMF9MRE80X1NXSV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzRfU1dJICovCisjZGVmaW5lIFdNODQwMF9MRE80X09QRkxUICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIExETzRfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfT1BGTFRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogTERPNF9PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfTERPNF9PUEZMVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBMRE80X09QRkxUICovCisjZGVmaW5lIFdNODQwMF9MRE80X09QRkxUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzRfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfRVJSQUNUICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogTERPNF9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogTERPNF9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfRVJSQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAxMSAgLyogTERPNF9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfRVJSQUNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPNF9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfSElCX01PREUgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTERPNF9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfTERPNF9ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgMHgwNDAwICAvKiBMRE80X0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9MRE80X0hJQl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgMTAgIC8qIExETzRfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfSElCX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTERPNF9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfTERPNF9WSU1HX01BU0sgICAgICAgICAgICAgICAgICAgMHgwM0UwICAvKiBMRE80X1ZJTUcgLSBbOTo1XSAqLworI2RlZmluZSBXTTg0MDBfTERPNF9WSU1HX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMRE80X1ZJTUcgLSBbOTo1XSAqLworI2RlZmluZSBXTTg0MDBfTERPNF9WSU1HX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMRE80X1ZJTUcgLSBbOTo1XSAqLworI2RlZmluZSBXTTg0MDBfTERPNF9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBMRE80X1ZTRUwgLSBbNDowXSAqLworI2RlZmluZSBXTTg0MDBfTERPNF9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMRE80X1ZTRUwgLSBbNDowXSAqLworI2RlZmluZSBXTTg0MDBfTERPNF9WU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMRE80X1ZTRUwgLSBbNDowXSAqLworCisvKgorICogUjcwICgweDQ2KSAtIERDREMxIENvbnRyb2wgMQorICovCisjZGVmaW5lIFdNODQwMF9EQzFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIERDMV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogREMxX0VOQSAqLworI2RlZmluZSBXTTg0MDBfREMxX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBEQzFfRU5BICovCisjZGVmaW5lIFdNODQwMF9EQzFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogREMxX0FDVElWRSAqLworI2RlZmluZSBXTTg0MDBfREMxX0FDVElWRV9NQVNLICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEQzFfQUNUSVZFICovCisjZGVmaW5lIFdNODQwMF9EQzFfQUNUSVZFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIERDMV9BQ1RJVkUgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9BQ1RJVkVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMxX0FDVElWRSAqLworI2RlZmluZSBXTTg0MDBfREMxX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBEQzFfU0xFRVAgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9TTEVFUF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogREMxX1NMRUVQICovCisjZGVmaW5lIFdNODQwMF9EQzFfU0xFRVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIERDMV9TTEVFUCAqLworI2RlZmluZSBXTTg0MDBfREMxX1NMRUVQX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQzFfU0xFRVAgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9PUEZMVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogREMxX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9EQzFfT1BGTFRfTUFTSyAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERDMV9PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfREMxX09QRkxUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBEQzFfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9PUEZMVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMxX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9EQzFfRVJSQUNUICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERDMV9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9FUlJBQ1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogREMxX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfREMxX0VSUkFDVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDExICAvKiBEQzFfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9EQzFfRVJSQUNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMV9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9ISUJfTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogREMxX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9EQzFfSElCX01PREVfTUFTSyAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERDMV9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfREMxX0hJQl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgIDEwICAvKiBEQzFfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9ISUJfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREMxX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9EQzFfU09GVFNUX01BU0sgICAgICAgICAgICAgICAgICAweDAzMDAgIC8qIERDMV9TT0ZUU1QgLSBbOTo4XSAqLworI2RlZmluZSBXTTg0MDBfREMxX1NPRlRTVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQzFfU09GVFNUIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9TT0ZUU1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogREMxX1NPRlRTVCAtIFs5OjhdICovCisjZGVmaW5lIFdNODQwMF9EQzFfT1ZfUFJPVCAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERDMV9PVl9QUk9UICovCisjZGVmaW5lIFdNODQwMF9EQzFfT1ZfUFJPVF9NQVNLICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERDMV9PVl9QUk9UICovCisjZGVmaW5lIFdNODQwMF9EQzFfT1ZfUFJPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERDMV9PVl9QUk9UICovCisjZGVmaW5lIFdNODQwMF9EQzFfT1ZfUFJPVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMV9PVl9QUk9UICovCisjZGVmaW5lIFdNODQwMF9EQzFfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIERDMV9WU0VMIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREMxX1ZTRUwgLSBbNjowXSAqLworI2RlZmluZSBXTTg0MDBfREMxX1ZTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBEQzFfVlNFTCAtIFs2OjBdICovCisKKy8qCisgKiBSNzEgKDB4NDcpIC0gRENEQzEgQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9GUkNfUFdNICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogREMxX0ZSQ19QV00gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9GUkNfUFdNX01BU0sgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogREMxX0ZSQ19QV00gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9GUkNfUFdNX1NISUZUICAgICAgICAgICAgICAgICAgICAxMyAgLyogREMxX0ZSQ19QV00gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9GUkNfUFdNX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMxX0ZSQ19QV00gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9TVEJZX0xJTV9NQVNLICAgICAgICAgICAgICAgIDB4MDMwMCAgLyogREMxX1NUQllfTElNIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9TVEJZX0xJTV9TSElGVCAgICAgICAgICAgICAgICAgICAgOCAgLyogREMxX1NUQllfTElNIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9TVEJZX0xJTV9XSURUSCAgICAgICAgICAgICAgICAgICAgMiAgLyogREMxX1NUQllfTElNIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9BQ1RfTElNICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREMxX0FDVF9MSU0gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9BQ1RfTElNX01BU0sgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREMxX0FDVF9MSU0gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9BQ1RfTElNX1NISUZUICAgICAgICAgICAgICAgICAgICAgNyAgLyogREMxX0FDVF9MSU0gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9BQ1RfTElNX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMxX0FDVF9MSU0gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9WSU1HX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogREMxX1ZJTUcgLSBbNjowXSAqLworI2RlZmluZSBXTTg0MDBfREMxX1ZJTUdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQzFfVklNRyAtIFs2OjBdICovCisjZGVmaW5lIFdNODQwMF9EQzFfVklNR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERDMV9WSU1HIC0gWzY6MF0gKi8KKworLyoKKyAqIFI3MiAoMHg0OCkgLSBEQ0RDMiBDb250cm9sIDEKKyAqLworI2RlZmluZSBXTTg0MDBfREMyX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBEQzJfRU5BICovCisjZGVmaW5lIFdNODQwMF9EQzJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIERDMl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogREMyX0VOQSAqLworI2RlZmluZSBXTTg0MDBfREMyX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQzJfRU5BICovCisjZGVmaW5lIFdNODQwMF9EQzJfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIERDMl9BQ1RJVkUgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9BQ1RJVkVfTUFTSyAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogREMyX0FDVElWRSAqLworI2RlZmluZSBXTTg0MDBfREMyX0FDVElWRV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBEQzJfQUNUSVZFICovCisjZGVmaW5lIFdNODQwMF9EQzJfQUNUSVZFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMl9BQ1RJVkUgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9TTEVFUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogREMyX1NMRUVQICovCisjZGVmaW5lIFdNODQwMF9EQzJfU0xFRVBfTUFTSyAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIERDMl9TTEVFUCAqLworI2RlZmluZSBXTTg0MDBfREMyX1NMRUVQX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBEQzJfU0xFRVAgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9TTEVFUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMyX1NMRUVQICovCisjZGVmaW5lIFdNODQwMF9EQzJfT1BGTFQgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERDMl9PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfREMyX09QRkxUX01BU0sgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBEQzJfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9PUEZMVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogREMyX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9EQzJfT1BGTFRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMl9PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfREMyX0VSUkFDVCAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQzJfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9EQzJfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERDMl9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxMSAgLyogREMyX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfREMyX0VSUkFDVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQzJfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9EQzJfSElCX01PREUgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERDMl9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfREMyX0hJQl9NT0RFX01BU0sgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBEQzJfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9ISUJfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAxMCAgLyogREMyX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9EQzJfSElCX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMl9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfREMyX1NPRlRTVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMzAwICAvKiBEQzJfU09GVFNUIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9TT0ZUU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREMyX1NPRlRTVCAtIFs5OjhdICovCisjZGVmaW5lIFdNODQwMF9EQzJfU09GVFNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERDMl9TT0ZUU1QgLSBbOTo4XSAqLworI2RlZmluZSBXTTg0MDBfREMyX09WX1BST1QgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQzJfT1ZfUFJPVCAqLworI2RlZmluZSBXTTg0MDBfREMyX09WX1BST1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQzJfT1ZfUFJPVCAqLworI2RlZmluZSBXTTg0MDBfREMyX09WX1BST1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICA3ICAvKiBEQzJfT1ZfUFJPVCAqLworI2RlZmluZSBXTTg0MDBfREMyX09WX1BST1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEQzJfT1ZfUFJPVCAqLworI2RlZmluZSBXTTg0MDBfREMyX1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBEQzJfVlNFTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODQwMF9EQzJfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERDMl9WU0VMIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9WU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogREMyX1ZTRUwgLSBbNjowXSAqLworCisvKgorICogUjczICgweDQ5KSAtIERDREMyIENvbnRyb2wgMgorICovCisjZGVmaW5lIFdNODQwMF9EQzJfRlJDX1BXTSAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIERDMl9GUkNfUFdNICovCisjZGVmaW5lIFdNODQwMF9EQzJfRlJDX1BXTV9NQVNLICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIERDMl9GUkNfUFdNICovCisjZGVmaW5lIFdNODQwMF9EQzJfRlJDX1BXTV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTMgIC8qIERDMl9GUkNfUFdNICovCisjZGVmaW5lIFdNODQwMF9EQzJfRlJDX1BXTV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMl9GUkNfUFdNICovCisjZGVmaW5lIFdNODQwMF9EQzJfU1RCWV9MSU1fTUFTSyAgICAgICAgICAgICAgICAweDAzMDAgIC8qIERDMl9TVEJZX0xJTSAtIFs5OjhdICovCisjZGVmaW5lIFdNODQwMF9EQzJfU1RCWV9MSU1fU0hJRlQgICAgICAgICAgICAgICAgICAgIDggIC8qIERDMl9TVEJZX0xJTSAtIFs5OjhdICovCisjZGVmaW5lIFdNODQwMF9EQzJfU1RCWV9MSU1fV0lEVEggICAgICAgICAgICAgICAgICAgIDIgIC8qIERDMl9TVEJZX0xJTSAtIFs5OjhdICovCisjZGVmaW5lIFdNODQwMF9EQzJfQUNUX0xJTSAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERDMl9BQ1RfTElNICovCisjZGVmaW5lIFdNODQwMF9EQzJfQUNUX0xJTV9NQVNLICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERDMl9BQ1RfTElNICovCisjZGVmaW5lIFdNODQwMF9EQzJfQUNUX0xJTV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERDMl9BQ1RfTElNICovCisjZGVmaW5lIFdNODQwMF9EQzJfQUNUX0xJTV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMl9BQ1RfTElNICovCisjZGVmaW5lIFdNODQwMF9EQzJfVklNR19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIERDMl9WSU1HIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9WSU1HX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREMyX1ZJTUcgLSBbNjowXSAqLworI2RlZmluZSBXTTg0MDBfREMyX1ZJTUdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBEQzJfVklNRyAtIFs2OjBdICovCisKKy8qCisgKiBSNzUgKDB4NEIpIC0gSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUgV004NDAwX0FVVE9JTkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQVVUT0lOQyAqLworI2RlZmluZSBXTTg0MDBfQVVUT0lOQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBBVVRPSU5DICovCisjZGVmaW5lIFdNODQwMF9BVVRPSU5DX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEFVVE9JTkMgKi8KKyNkZWZpbmUgV004NDAwX0FVVE9JTkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQVVUT0lOQyAqLworI2RlZmluZSBXTTg0MDBfQVJBX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBUkFfRU5BICovCisjZGVmaW5lIFdNODQwMF9BUkFfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFSQV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FSQV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQVJBX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQVJBX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBUkFfRU5BICovCisjZGVmaW5lIFdNODQwMF9TUElfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNQSV9DRkcgKi8KKyNkZWZpbmUgV004NDAwX1NQSV9DRkdfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1BJX0NGRyAqLworI2RlZmluZSBXTTg0MDBfU1BJX0NGR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUElfQ0ZHICovCisjZGVmaW5lIFdNODQwMF9TUElfQ0ZHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQSV9DRkcgKi8KKworLyoKKyAqIFI3NiAoMHg0QykgLSBQTSBHRU5FUkFMCisgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX1NPRlRTVCAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ09ERUNfU09GVFNUICovCisjZGVmaW5lIFdNODQwMF9DT0RFQ19TT0ZUU1RfTUFTSyAgICAgICAgICAgICAgICAweDgwMDAgIC8qIENPREVDX1NPRlRTVCAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfU09GVFNUX1NISUZUICAgICAgICAgICAgICAgICAgIDE1ICAvKiBDT0RFQ19TT0ZUU1QgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX1NPRlRTVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQ09ERUNfU09GVFNUICovCisjZGVmaW5lIFdNODQwMF9DT0RFQ19TT0ZUU0QgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIENPREVDX1NPRlRTRCAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfU09GVFNEX01BU0sgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBDT0RFQ19TT0ZUU0QgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX1NPRlRTRF9TSElGVCAgICAgICAgICAgICAgICAgICAxNCAgLyogQ09ERUNfU09GVFNEICovCisjZGVmaW5lIFdNODQwMF9DT0RFQ19TT0ZUU0RfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIENPREVDX1NPRlRTRCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9TT0ZUU0QgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBDSElQX1NPRlRTRCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9TT0ZUU0RfTUFTSyAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBDSElQX1NPRlRTRCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9TT0ZUU0RfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEzICAvKiBDSElQX1NPRlRTRCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9TT0ZUU0RfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBDSElQX1NPRlRTRCAqLworI2RlZmluZSBXTTg0MDBfRFNMRUVQMV9QT0wgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEU0xFRVAxX1BPTCAqLworI2RlZmluZSBXTTg0MDBfRFNMRUVQMV9QT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEU0xFRVAxX1BPTCAqLworI2RlZmluZSBXTTg0MDBfRFNMRUVQMV9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAzICAvKiBEU0xFRVAxX1BPTCAqLworI2RlZmluZSBXTTg0MDBfRFNMRUVQMV9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEU0xFRVAxX1BPTCAqLworI2RlZmluZSBXTTg0MDBfRFNMRUVQMl9QT0wgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEU0xFRVAyX1BPTCAqLworI2RlZmluZSBXTTg0MDBfRFNMRUVQMl9QT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEU0xFRVAyX1BPTCAqLworI2RlZmluZSBXTTg0MDBfRFNMRUVQMl9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAyICAvKiBEU0xFRVAyX1BPTCAqLworI2RlZmluZSBXTTg0MDBfRFNMRUVQMl9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEU0xFRVAyX1BPTCAqLworI2RlZmluZSBXTTg0MDBfUFdSX1NUQVRFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBQV1JfU1RBVEUgLSBbMTowXSAqLworI2RlZmluZSBXTTg0MDBfUFdSX1NUQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBQV1JfU1RBVEUgLSBbMTowXSAqLworI2RlZmluZSBXTTg0MDBfUFdSX1NUQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBQV1JfU1RBVEUgLSBbMTowXSAqLworCisvKgorICogUjc4ICgweDRFKSAtIFBNIFNodXRkb3duIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDE1MF9FUlJBQ1QgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBDSElQX0dUMTUwX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDE1MF9FUlJBQ1RfTUFTSyAgICAgICAgICAgMHgwMjAwICAvKiBDSElQX0dUMTUwX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDE1MF9FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICA5ICAvKiBDSElQX0dUMTUwX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDE1MF9FUlJBQ1RfV0lEVEggICAgICAgICAgICAgICAxICAvKiBDSElQX0dUMTUwX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDExNV9FUlJBQ1QgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBDSElQX0dUMTE1X0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDExNV9FUlJBQ1RfTUFTSyAgICAgICAgICAgMHgwMTAwICAvKiBDSElQX0dUMTE1X0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDExNV9FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICA4ICAvKiBDSElQX0dUMTE1X0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDExNV9FUlJBQ1RfV0lEVEggICAgICAgICAgICAgICAxICAvKiBDSElQX0dUMTE1X0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTElORV9DTVBfRVJSQUNUICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5FX0NNUF9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xJTkVfQ01QX0VSUkFDVF9NQVNLICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORV9DTVBfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9MSU5FX0NNUF9FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgIDcgIC8qIExJTkVfQ01QX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTElORV9DTVBfRVJSQUNUX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBMSU5FX0NNUF9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX1VWTE9fRVJSQUNUICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVVZMT19FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX1VWTE9fRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVVZMT19FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX1VWTE9fRVJSQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgNiAgLyogVVZMT19FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX1VWTE9fRVJSQUNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogVVZMT19FUlJBQ1QgKi8KKworLyoKKyAqIFI3OSAoMHg0RikgLSBJbnRlcnJ1cHQgU3RhdHVzIDEKKyAqLworI2RlZmluZSBXTTg0MDBfTUlDRF9DSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBNSUNEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX01JQ0RfQ0lOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTUlDRF9DSU5UICovCisjZGVmaW5lIFdNODQwMF9NSUNEX0NJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIE1JQ0RfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfTUlDRF9DSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX01JQ1NDRF9DSU5UICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogTUlDU0NEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX01JQ1NDRF9DSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogTUlDU0NEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX01JQ1NDRF9DSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAxNCAgLyogTUlDU0NEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX01JQ1NDRF9DSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDU0NEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0pETF9DSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogSkRMX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0pETF9DSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogSkRMX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0pETF9DSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogSkRMX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0pETF9DSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSkRMX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0pEUl9DSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogSkRSX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0pEUl9DSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogSkRSX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0pEUl9DSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogSkRSX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0pEUl9DSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSkRSX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX1NFUV9FTkRfRUlOVCAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQ09ERUNfU0VRX0VORF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9DT0RFQ19TRVFfRU5EX0VJTlRfTUFTSyAgICAgICAgICAweDA4MDAgIC8qIENPREVDX1NFUV9FTkRfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfU0VRX0VORF9FSU5UX1NISUZUICAgICAgICAgICAgIDExICAvKiBDT0RFQ19TRVFfRU5EX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX1NFUV9FTkRfRUlOVF9XSURUSCAgICAgICAgICAgICAgMSAgLyogQ09ERUNfU0VRX0VORF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9DREVMX1RPX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIENERUxfVE9fRUlOVCAqLworI2RlZmluZSBXTTg0MDBfQ0RFTF9UT19FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBDREVMX1RPX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0NERUxfVE9fRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAxMCAgLyogQ0RFTF9UT19FSU5UICovCisjZGVmaW5lIFdNODQwMF9DREVMX1RPX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIENERUxfVE9fRUlOVCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDE1MF9FSU5UICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBDSElQX0dUMTUwX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfR1QxNTBfRUlOVF9NQVNLICAgICAgICAgICAgIDB4MDIwMCAgLyogQ0hJUF9HVDE1MF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9DSElQX0dUMTUwX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgIDkgIC8qIENISVBfR1QxNTBfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDE1MF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBDSElQX0dUMTUwX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfR1QxMTVfRUlOVCAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQ0hJUF9HVDExNV9FSU5UICovCisjZGVmaW5lIFdNODQwMF9DSElQX0dUMTE1X0VJTlRfTUFTSyAgICAgICAgICAgICAweDAxMDAgIC8qIENISVBfR1QxMTVfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDExNV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICA4ICAvKiBDSElQX0dUMTE1X0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfR1QxMTVfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogQ0hJUF9HVDExNV9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MSU5FX0NNUF9FSU5UICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVfQ01QX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xJTkVfQ01QX0VJTlRfTUFTSyAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORV9DTVBfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfTElORV9DTVBfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICA3ICAvKiBMSU5FX0NNUF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MSU5FX0NNUF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVfQ01QX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX1VWTE9fRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVVZMT19FSU5UICovCisjZGVmaW5lIFdNODQwMF9VVkxPX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFVWTE9fRUlOVCAqLworI2RlZmluZSBXTTg0MDBfVVZMT19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBVVkxPX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX1VWTE9fRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVVZMT19FSU5UICovCisjZGVmaW5lIFdNODQwMF9EQzJfVVZfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERDMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9EQzJfVVZfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERDMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9EQzJfVVZfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIERDMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9EQzJfVVZfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9EQzFfVVZfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERDMV9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9EQzFfVVZfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERDMV9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9EQzFfVVZfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERDMV9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9EQzFfVVZfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMV9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MRE80X1VWX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExETzRfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfTERPNF9VVl9FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBMRE80X1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfVVZfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMyAgLyogTERPNF9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MRE80X1VWX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzRfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfTERPM19VVl9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMRE8zX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfVVZfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTERPM19VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MRE8zX1VWX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIExETzNfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfTERPM19VVl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8zX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xETzJfVVZfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTERPMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MRE8yX1VWX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExETzJfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfTERPMl9VVl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8yX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xETzJfVVZfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1VWX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExETzFfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfTERPMV9VVl9FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMRE8xX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfVVZfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogTERPMV9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1VWX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzFfVVZfRUlOVCAqLworCisvKgorICogUjgwICgweDUwKSAtIEludGVycnVwdCBTdGF0dXMgMSBNYXNrCisgKi8KKyNkZWZpbmUgV004NDAwX0lNX01JQ0RfQ0lOVCAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogSU1fTUlDRF9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9NSUNEX0NJTlRfTUFTSyAgICAgICAgICAgICAgICAweDgwMDAgIC8qIElNX01JQ0RfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTUlDRF9DSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDE1ICAvKiBJTV9NSUNEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX01JQ0RfQ0lOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fTUlDRF9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9NSUNTQ0RfQ0lOVCAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIElNX01JQ1NDRF9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9NSUNTQ0RfQ0lOVF9NQVNLICAgICAgICAgICAgICAweDQwMDAgIC8qIElNX01JQ1NDRF9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9NSUNTQ0RfQ0lOVF9TSElGVCAgICAgICAgICAgICAgICAgMTQgIC8qIElNX01JQ1NDRF9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9NSUNTQ0RfQ0lOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIElNX01JQ1NDRF9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9KRExfQ0lOVCAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIElNX0pETF9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9KRExfQ0lOVF9NQVNLICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIElNX0pETF9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9KRExfQ0lOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTMgIC8qIElNX0pETF9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9KRExfQ0lOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0pETF9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9KRFJfQ0lOVCAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIElNX0pEUl9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9KRFJfQ0lOVF9NQVNLICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIElNX0pEUl9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9KRFJfQ0lOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTIgIC8qIElNX0pEUl9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9KRFJfQ0lOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0pEUl9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9DT0RFQ19TRVFfRU5EX0VJTlQgICAgICAgICAgICAweDA4MDAgIC8qIElNX0NPREVDX1NFUV9FTkRfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fQ09ERUNfU0VRX0VORF9FSU5UX01BU0sgICAgICAgMHgwODAwICAvKiBJTV9DT0RFQ19TRVFfRU5EX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0NPREVDX1NFUV9FTkRfRUlOVF9TSElGVCAgICAgICAgICAxMSAgLyogSU1fQ09ERUNfU0VRX0VORF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9DT0RFQ19TRVFfRU5EX0VJTlRfV0lEVEggICAgICAgICAgIDEgIC8qIElNX0NPREVDX1NFUV9FTkRfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fQ0RFTF9UT19FSU5UICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBJTV9DREVMX1RPX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0NERUxfVE9fRUlOVF9NQVNLICAgICAgICAgICAgIDB4MDQwMCAgLyogSU1fQ0RFTF9UT19FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9DREVMX1RPX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgMTAgIC8qIElNX0NERUxfVE9fRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fQ0RFTF9UT19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTV9DREVMX1RPX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0NISVBfR1QxNTBfRUlOVCAgICAgICAgICAgICAgIDB4MDIwMCAgLyogSU1fQ0hJUF9HVDE1MF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9DSElQX0dUMTUwX0VJTlRfTUFTSyAgICAgICAgICAweDAyMDAgIC8qIElNX0NISVBfR1QxNTBfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fQ0hJUF9HVDE1MF9FSU5UX1NISUZUICAgICAgICAgICAgICA5ICAvKiBJTV9DSElQX0dUMTUwX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0NISVBfR1QxNTBfRUlOVF9XSURUSCAgICAgICAgICAgICAgMSAgLyogSU1fQ0hJUF9HVDE1MF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9DSElQX0dUMTE1X0VJTlQgICAgICAgICAgICAgICAweDAxMDAgIC8qIElNX0NISVBfR1QxMTVfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fQ0hJUF9HVDExNV9FSU5UX01BU0sgICAgICAgICAgMHgwMTAwICAvKiBJTV9DSElQX0dUMTE1X0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0NISVBfR1QxMTVfRUlOVF9TSElGVCAgICAgICAgICAgICAgOCAgLyogSU1fQ0hJUF9HVDExNV9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9DSElQX0dUMTE1X0VJTlRfV0lEVEggICAgICAgICAgICAgIDEgIC8qIElNX0NISVBfR1QxMTVfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTElORV9DTVBfRUlOVCAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTV9MSU5FX0NNUF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MSU5FX0NNUF9FSU5UX01BU0sgICAgICAgICAgICAweDAwODAgIC8qIElNX0xJTkVfQ01QX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0xJTkVfQ01QX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgNyAgLyogSU1fTElORV9DTVBfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTElORV9DTVBfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBJTV9MSU5FX0NNUF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9VVkxPX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElNX1VWTE9fRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fVVZMT19FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTV9VVkxPX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX1VWTE9fRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgNiAgLyogSU1fVVZMT19FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9VVkxPX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX1VWTE9fRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fREMyX1VWX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTV9EQzJfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fREMyX1VWX0VJTlRfTUFTSyAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTV9EQzJfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fREMyX1VWX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICA1ICAvKiBJTV9EQzJfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fREMyX1VWX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBJTV9EQzJfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fREMxX1VWX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTV9EQzFfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fREMxX1VWX0VJTlRfTUFTSyAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTV9EQzFfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fREMxX1VWX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICA0ICAvKiBJTV9EQzFfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fREMxX1VWX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBJTV9EQzFfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTERPNF9VVl9FSU5UICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTV9MRE80X1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0xETzRfVVZfRUlOVF9NQVNLICAgICAgICAgICAgIDB4MDAwOCAgLyogSU1fTERPNF9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MRE80X1VWX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgIDMgIC8qIElNX0xETzRfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTERPNF9VVl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTV9MRE80X1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0xETzNfVVZfRUlOVCAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU1fTERPM19VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MRE8zX1VWX0VJTlRfTUFTSyAgICAgICAgICAgICAweDAwMDQgIC8qIElNX0xETzNfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTERPM19VVl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAyICAvKiBJTV9MRE8zX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0xETzNfVVZfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogSU1fTERPM19VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MRE8yX1VWX0VJTlQgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElNX0xETzJfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTERPMl9VVl9FSU5UX01BU0sgICAgICAgICAgICAgMHgwMDAyICAvKiBJTV9MRE8yX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0xETzJfVVZfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgMSAgLyogSU1fTERPMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MRE8yX1VWX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElNX0xETzJfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTERPMV9VVl9FSU5UICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTV9MRE8xX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0xETzFfVVZfRUlOVF9NQVNLICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fTERPMV9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MRE8xX1VWX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIElNX0xETzFfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTERPMV9VVl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTV9MRE8xX1VWX0VJTlQgKi8KKworLyoKKyAqIFI4MSAoMHg1MSkgLSBJbnRlcnJ1cHQgTGV2ZWxzCisgKi8KKyNkZWZpbmUgV004NDAwX01JQ0RfTFZMICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTUlDRF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX01JQ0RfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTUlDRF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX01JQ0RfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogTUlDRF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX01JQ0RfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX01JQ1NDRF9MVkwgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogTUlDU0NEX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTUlDU0NEX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBNSUNTQ0RfTFZMICovCisjZGVmaW5lIFdNODQwMF9NSUNTQ0RfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIE1JQ1NDRF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX01JQ1NDRF9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDU0NEX0xWTCAqLworI2RlZmluZSBXTTg0MDBfSkRMX0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBKRExfTFZMICovCisjZGVmaW5lIFdNODQwMF9KRExfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEpETF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0pETF9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogSkRMX0xWTCAqLworI2RlZmluZSBXTTg0MDBfSkRMX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBKRExfTFZMICovCisjZGVmaW5lIFdNODQwMF9KRFJfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEpEUl9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0pEUl9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogSkRSX0xWTCAqLworI2RlZmluZSBXTTg0MDBfSkRSX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBKRFJfTFZMICovCisjZGVmaW5lIFdNODQwMF9KRFJfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEpEUl9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX1NFUV9FTkRfTFZMICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQ09ERUNfU0VRX0VORF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX1NFUV9FTkRfTFZMX01BU0sgICAgICAgICAgIDB4MDgwMCAgLyogQ09ERUNfU0VRX0VORF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX1NFUV9FTkRfTFZMX1NISUZUICAgICAgICAgICAgICAxMSAgLyogQ09ERUNfU0VRX0VORF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX1NFUV9FTkRfTFZMX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQ09ERUNfU0VRX0VORF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NERUxfVE9fTFZMICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQ0RFTF9UT19MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NERUxfVE9fTFZMX01BU0sgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQ0RFTF9UT19MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NERUxfVE9fTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAxMCAgLyogQ0RFTF9UT19MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NERUxfVE9fTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ0RFTF9UT19MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfR1QxNTBfTFZMICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQ0hJUF9HVDE1MF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfR1QxNTBfTFZMX01BU0sgICAgICAgICAgICAgIDB4MDIwMCAgLyogQ0hJUF9HVDE1MF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfR1QxNTBfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgOSAgLyogQ0hJUF9HVDE1MF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfR1QxNTBfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQ0hJUF9HVDE1MF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfR1QxMTVfTFZMICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQ0hJUF9HVDExNV9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfR1QxMTVfTFZMX01BU0sgICAgICAgICAgICAgIDB4MDEwMCAgLyogQ0hJUF9HVDExNV9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfR1QxMTVfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgOCAgLyogQ0hJUF9HVDExNV9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfR1QxMTVfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQ0hJUF9HVDExNV9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0xJTkVfQ01QX0xWTCAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORV9DTVBfTFZMICovCisjZGVmaW5lIFdNODQwMF9MSU5FX0NNUF9MVkxfTUFTSyAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVfQ01QX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTElORV9DTVBfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICA3ICAvKiBMSU5FX0NNUF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0xJTkVfQ01QX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTElORV9DTVBfTFZMICovCisjZGVmaW5lIFdNODQwMF9VVkxPX0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFVWTE9fTFZMICovCisjZGVmaW5lIFdNODQwMF9VVkxPX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFVWTE9fTFZMICovCisjZGVmaW5lIFdNODQwMF9VVkxPX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFVWTE9fTFZMICovCisjZGVmaW5lIFdNODQwMF9VVkxPX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFVWTE9fTFZMICovCisjZGVmaW5lIFdNODQwMF9EQzJfVVZfTFZMICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERDMl9VVl9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9VVl9MVkxfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogREMyX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfREMyX1VWX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBEQzJfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9EQzJfVVZfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMl9VVl9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9VVl9MVkwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREMxX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfREMxX1VWX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQzFfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9EQzFfVVZfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERDMV9VVl9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9VVl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMxX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPNF9VVl9MVkwgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBMRE80X1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPNF9VVl9MVkxfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBMRE80X1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPNF9VVl9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAzICAvKiBMRE80X1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPNF9VVl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE80X1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPM19VVl9MVkwgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMRE8zX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPM19VVl9MVkxfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMRE8zX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPM19VVl9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAyICAvKiBMRE8zX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPM19VVl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8zX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPMl9VVl9MVkwgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBMRE8yX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPMl9VVl9MVkxfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBMRE8yX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPMl9VVl9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8yX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPMl9VVl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8yX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPMV9VVl9MVkwgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMRE8xX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPMV9VVl9MVkxfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMRE8xX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPMV9VVl9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBMRE8xX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTERPMV9VVl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8xX1VWX0xWTCAqLworCisvKgorICogUjgyICgweDUyKSAtIFNodXRkb3duIFJlYXNvbgorICovCisjZGVmaW5lIFdNODQwMF9TRFJfQ0hJUF9TT0ZUU0QgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFNEUl9DSElQX1NPRlRTRCAqLworI2RlZmluZSBXTTg0MDBfU0RSX0NISVBfU09GVFNEX01BU0sgICAgICAgICAgICAgMHgyMDAwICAvKiBTRFJfQ0hJUF9TT0ZUU0QgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9DSElQX1NPRlRTRF9TSElGVCAgICAgICAgICAgICAgICAxMyAgLyogU0RSX0NISVBfU09GVFNEICovCisjZGVmaW5lIFdNODQwMF9TRFJfQ0hJUF9TT0ZUU0RfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIFNEUl9DSElQX1NPRlRTRCAqLworI2RlZmluZSBXTTg0MDBfU0RSX05QRE4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBTRFJfTlBETiAqLworI2RlZmluZSBXTTg0MDBfU0RSX05QRE5fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBTRFJfTlBETiAqLworI2RlZmluZSBXTTg0MDBfU0RSX05QRE5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDExICAvKiBTRFJfTlBETiAqLworI2RlZmluZSBXTTg0MDBfU0RSX05QRE5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTRFJfTlBETiAqLworI2RlZmluZSBXTTg0MDBfU0RSX0NISVBfR1QxNTAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBTRFJfQ0hJUF9HVDE1MCAqLworI2RlZmluZSBXTTg0MDBfU0RSX0NISVBfR1QxNTBfTUFTSyAgICAgICAgICAgICAgMHgwMjAwICAvKiBTRFJfQ0hJUF9HVDE1MCAqLworI2RlZmluZSBXTTg0MDBfU0RSX0NISVBfR1QxNTBfU0hJRlQgICAgICAgICAgICAgICAgICA5ICAvKiBTRFJfQ0hJUF9HVDE1MCAqLworI2RlZmluZSBXTTg0MDBfU0RSX0NISVBfR1QxNTBfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBTRFJfQ0hJUF9HVDE1MCAqLworI2RlZmluZSBXTTg0MDBfU0RSX0NISVBfR1QxMTUgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBTRFJfQ0hJUF9HVDExNSAqLworI2RlZmluZSBXTTg0MDBfU0RSX0NISVBfR1QxMTVfTUFTSyAgICAgICAgICAgICAgMHgwMTAwICAvKiBTRFJfQ0hJUF9HVDExNSAqLworI2RlZmluZSBXTTg0MDBfU0RSX0NISVBfR1QxMTVfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBTRFJfQ0hJUF9HVDExNSAqLworI2RlZmluZSBXTTg0MDBfU0RSX0NISVBfR1QxMTVfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBTRFJfQ0hJUF9HVDExNSAqLworI2RlZmluZSBXTTg0MDBfU0RSX0xJTkVfQ01QICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBTRFJfTElORV9DTVAgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MSU5FX0NNUF9NQVNLICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogU0RSX0xJTkVfQ01QICovCisjZGVmaW5lIFdNODQwMF9TRFJfTElORV9DTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDcgIC8qIFNEUl9MSU5FX0NNUCAqLworI2RlZmluZSBXTTg0MDBfU0RSX0xJTkVfQ01QX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBTRFJfTElORV9DTVAgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9VVkxPICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogU0RSX1VWTE8gKi8KKyNkZWZpbmUgV004NDAwX1NEUl9VVkxPX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogU0RSX1VWTE8gKi8KKyNkZWZpbmUgV004NDAwX1NEUl9VVkxPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogU0RSX1VWTE8gKi8KKyNkZWZpbmUgV004NDAwX1NEUl9VVkxPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU0RSX1VWTE8gKi8KKyNkZWZpbmUgV004NDAwX1NEUl9EQzJfVVYgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogU0RSX0RDMl9VViAqLworI2RlZmluZSBXTTg0MDBfU0RSX0RDMl9VVl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBTRFJfREMyX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfREMyX1VWX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFNEUl9EQzJfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9EQzJfVVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogU0RSX0RDMl9VViAqLworI2RlZmluZSBXTTg0MDBfU0RSX0RDMV9VViAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBTRFJfREMxX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfREMxX1VWX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFNEUl9EQzFfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9EQzFfVVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogU0RSX0RDMV9VViAqLworI2RlZmluZSBXTTg0MDBfU0RSX0RDMV9VVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTRFJfREMxX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPNF9VViAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFNEUl9MRE80X1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPNF9VVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFNEUl9MRE80X1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPNF9VVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFNEUl9MRE80X1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPNF9VVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNEUl9MRE80X1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPM19VViAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFNEUl9MRE8zX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPM19VVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFNEUl9MRE8zX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPM19VVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFNEUl9MRE8zX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPM19VVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNEUl9MRE8zX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPMl9VViAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNEUl9MRE8yX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPMl9VVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNEUl9MRE8yX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPMl9VVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNEUl9MRE8yX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPMl9VVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNEUl9MRE8yX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPMV9VViAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNEUl9MRE8xX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPMV9VVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNEUl9MRE8xX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPMV9VVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNEUl9MRE8xX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfTERPMV9VVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNEUl9MRE8xX1VWICovCisKKy8qCisgKiBSODQgKDB4NTQpIC0gTGluZSBDaXJjdWl0cworICovCisjZGVmaW5lIFdNODQwMF9CR19MSU5FX0NPTVAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEJHX0xJTkVfQ09NUCAqLworI2RlZmluZSBXTTg0MDBfQkdfTElORV9DT01QX01BU0sgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBCR19MSU5FX0NPTVAgKi8KKyNkZWZpbmUgV004NDAwX0JHX0xJTkVfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAxNSAgLyogQkdfTElORV9DT01QICovCisjZGVmaW5lIFdNODQwMF9CR19MSU5FX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEJHX0xJTkVfQ09NUCAqLworI2RlZmluZSBXTTg0MDBfTElORV9DTVBfVlRISV9NQVNLICAgICAgICAgICAgICAgMHgwMEYwICAvKiBMSU5FX0NNUF9WVEhJIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004NDAwX0xJTkVfQ01QX1ZUSElfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogTElORV9DTVBfVlRISSAtIFs3OjRdICovCisjZGVmaW5lIFdNODQwMF9MSU5FX0NNUF9WVEhJX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIExJTkVfQ01QX1ZUSEkgLSBbNzo0XSAqLworI2RlZmluZSBXTTg0MDBfTElORV9DTVBfVlRIRF9NQVNLICAgICAgICAgICAgICAgMHgwMDBGICAvKiBMSU5FX0NNUF9WVEhEIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xJTkVfQ01QX1ZUSERfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogTElORV9DTVBfVlRIRCAtIFszOjBdICovCisjZGVmaW5lIFdNODQwMF9MSU5FX0NNUF9WVEhEX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIExJTkVfQ01QX1ZUSEQgLSBbMzowXSAqLworCit1MTYgd204NDAwX3JlZ19yZWFkKHN0cnVjdCB3bTg0MDAgKndtODQwMCwgdTggcmVnKTsKK2ludCB3bTg0MDBfYmxvY2tfcmVhZChzdHJ1Y3Qgd204NDAwICp3bTg0MDAsIHU4IHJlZywgaW50IGNvdW50LCB1MTYgKmRhdGEpOworaW50IHdtODQwMF9zZXRfYml0cyhzdHJ1Y3Qgd204NDAwICp3bTg0MDAsIHU4IHJlZywgdTE2IG1hc2ssIHUxNiB2YWwpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2YjU2NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiB3bTg0MDAgY2xpZW50IGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfTUZEX1dNODQwMF9ICisjZGVmaW5lIF9fTElOVVhfTUZEX1dNODQwMF9ICisKKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorCisjZGVmaW5lIFdNODQwMF9MRE8xICAwCisjZGVmaW5lIFdNODQwMF9MRE8yICAxCisjZGVmaW5lIFdNODQwMF9MRE8zICAyCisjZGVmaW5lIFdNODQwMF9MRE80ICAzCisjZGVmaW5lIFdNODQwMF9EQ0RDMSA0CisjZGVmaW5lIFdNODQwMF9EQ0RDMiA1CisKK3N0cnVjdCB3bTg0MDBfcGxhdGZvcm1fZGF0YSB7CisJaW50ICgqcGxhdGZvcm1faW5pdCkoc3RydWN0IGRldmljZSAqZGV2KTsKK307CisKK2ludCB3bTg0MDBfcmVnaXN0ZXJfcmVndWxhdG9yKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywKKwkJCSAgICAgIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0ZGF0YSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAppbmRleCAwM2FlYTYxLi4zZjM0MDA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaApAQCAtNyw3ICs3LDYgQEAKIHR5cGVkZWYgc3RydWN0IHBhZ2UgKm5ld19wYWdlX3Qoc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBpbnQgKiopOwogCiAjaWZkZWYgQ09ORklHX01JR1JBVElPTgotZXh0ZXJuIGludCBpc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCk7CiBleHRlcm4gaW50IHB1dGJhY2tfbHJ1X3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpOwogZXh0ZXJuIGludCBtaWdyYXRlX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwKIAkJCXN0cnVjdCBwYWdlICosIHN0cnVjdCBwYWdlICopOwpAQCAtMjEsOCArMjAsNiBAQAogCQljb25zdCBub2RlbWFza190ICpmcm9tLCBjb25zdCBub2RlbWFza190ICp0bywKIAkJdW5zaWduZWQgbG9uZyBmbGFncyk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKLQkJCQkJeyByZXR1cm4gLUVOT1NZUzsgfQogc3RhdGljIGlubGluZSBpbnQgcHV0YmFja19scnVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfcGFnZV90IHgsCiAJCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZSkgeyByZXR1cm4gLUVOT1NZUzsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGM2MWJhMTAuLmZmZWUyZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTEzMiw2ICsxMzIsMTEgQEAKICNkZWZpbmUgVk1fUmFuZG9tUmVhZEhpbnQodikJCSgodiktPnZtX2ZsYWdzICYgVk1fUkFORF9SRUFEKQogCiAvKgorICogc3BlY2lhbCB2bWFzIHRoYXQgYXJlIG5vbi1tZXJnYWJsZSwgbm9uLW1sb2NrKClhYmxlCisgKi8KKyNkZWZpbmUgVk1fU1BFQ0lBTCAoVk1fSU8gfCBWTV9ET05URVhQQU5EIHwgVk1fUkVTRVJWRUQgfCBWTV9QRk5NQVApCisKKy8qCiAgKiBtYXBwaW5nIGZyb20gdGhlIGN1cnJlbnRseSBhY3RpdmUgdm1fZmxhZ3MgcHJvdGVjdGlvbiBiaXRzICh0aGUKICAqIGxvdyBmb3VyIGJpdHMpIHRvIGEgcGFnZSBwcm90ZWN0aW9uIG1hc2suLgogICovCkBAIC03MDAsMTAgKzcwNSwxMCBAQAogZXh0ZXJuIHZvaWQgc2hvd19mcmVlX2FyZWFzKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1NITUVNCi1pbnQgc2htZW1fbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGxvY2ssIHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcik7CitleHRlcm4gaW50IHNobWVtX2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBsb2NrLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHNobWVtX2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBsb2NrLAotCQkJICAgICBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpCisJCQkgICAgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKaW5kZXggODk1YmM0ZS4uYzk0ODM1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCkBAIC0xLDQwICsxLDEwMCBAQAotc3RhdGljIGlubGluZSB2b2lkCi1hZGRfcGFnZV90b19hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCisjaWZuZGVmIExJTlVYX01NX0lOTElORV9ICisjZGVmaW5lIExJTlVYX01NX0lOTElORV9ICisKKy8qKgorICogcGFnZV9pc19maWxlX2NhY2hlIC0gc2hvdWxkIHRoZSBwYWdlIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdGVzdAorICoKKyAqIFJldHVybnMgTFJVX0ZJTEUgaWYgQHBhZ2UgaXMgcGFnZSBjYWNoZSBwYWdlIGJhY2tlZCBieSBhIHJlZ3VsYXIgZmlsZXN5c3RlbSwKKyAqIG9yIDAgaWYgQHBhZ2UgaXMgYW5vbnltb3VzLCB0bXBmcyBvciBvdGhlcndpc2UgcmFtIG9yIHN3YXAgYmFja2VkLgorICogVXNlZCBieSBmdW5jdGlvbnMgdGhhdCBtYW5pcHVsYXRlIHRoZSBMUlUgbGlzdHMsIHRvIHNvcnQgYSBwYWdlCisgKiBvbnRvIHRoZSByaWdodCBMUlUgbGlzdC4KKyAqCisgKiBXZSB3b3VsZCBsaWtlIHRvIGdldCB0aGlzIGluZm8gd2l0aG91dCBhIHBhZ2UgZmxhZywgYnV0IHRoZSBzdGF0ZQorICogbmVlZHMgdG8gc3Vydml2ZSB1bnRpbCB0aGUgcGFnZSBpcyBsYXN0IGRlbGV0ZWQgZnJvbSB0aGUgTFJVLCB3aGljaAorICogY291bGQgYmUgYXMgZmFyIGRvd24gYXMgX19wYWdlX2NhY2hlX3JlbGVhc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBhZ2VfaXNfZmlsZV9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmem9uZS0+YWN0aXZlX2xpc3QpOwotCV9faW5jX3pvbmVfc3RhdGUoem9uZSwgTlJfQUNUSVZFKTsKKwlpZiAoUGFnZVN3YXBCYWNrZWQocGFnZSkpCisJCXJldHVybiAwOworCisJLyogVGhlIHBhZ2UgaXMgcGFnZSBjYWNoZSBiYWNrZWQgYnkgYSBub3JtYWwgZmlsZXN5c3RlbS4gKi8KKwlyZXR1cm4gTFJVX0ZJTEU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotYWRkX3BhZ2VfdG9faW5hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCithZGRfcGFnZV90b19scnVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gbHJ1X2xpc3QgbCkKIHsKLQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmem9uZS0+aW5hY3RpdmVfbGlzdCk7Ci0JX19pbmNfem9uZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSk7CisJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJnpvbmUtPmxydVtsXS5saXN0KTsKKwlfX2luY196b25lX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotZGVsX3BhZ2VfZnJvbV9hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCitkZWxfcGFnZV9mcm9tX2xydV9saXN0KHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBscnVfbGlzdCBsKQogewogCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfQUNUSVZFKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kZWxfcGFnZV9mcm9tX2luYWN0aXZlX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpOworCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBsKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBkZWxfcGFnZV9mcm9tX2xydShzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CisJZW51bSBscnVfbGlzdCBsID0gTFJVX0JBU0U7CisKIAlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkgewotCQlfX0NsZWFyUGFnZUFjdGl2ZShwYWdlKTsKLQkJX19kZWNfem9uZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpOworCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKKwkJX19DbGVhclBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKKwkJbCA9IExSVV9VTkVWSUNUQUJMRTsKIAl9IGVsc2UgewotCQlfX2RlY196b25lX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKTsKKwkJaWYgKFBhZ2VBY3RpdmUocGFnZSkpIHsKKwkJCV9fQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOworCQkJbCArPSBMUlVfQUNUSVZFOworCQl9CisJCWwgKz0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOwogCX0KKwlfX2RlY196b25lX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbCk7CiB9CiAKKy8qKgorICogcGFnZV9scnUgLSB3aGljaCBMUlUgbGlzdCBzaG91bGQgYSBwYWdlIGJlIG9uPworICogQHBhZ2U6IHRoZSBwYWdlIHRvIHRlc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBMUlUgbGlzdCBhIHBhZ2Ugc2hvdWxkIGJlIG9uLCBhcyBhbiBpbmRleAorICogaW50byB0aGUgYXJyYXkgb2YgTFJVIGxpc3RzLgorICovCitzdGF0aWMgaW5saW5lIGVudW0gbHJ1X2xpc3QgcGFnZV9scnUoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJZW51bSBscnVfbGlzdCBscnUgPSBMUlVfQkFTRTsKKworCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpCisJCWxydSA9IExSVV9VTkVWSUNUQUJMRTsKKwllbHNlIHsKKwkJaWYgKFBhZ2VBY3RpdmUocGFnZSkpCisJCQlscnUgKz0gTFJVX0FDVElWRTsKKwkJbHJ1ICs9IHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKwl9CisKKwlyZXR1cm4gbHJ1OworfQorCisvKioKKyAqIGluYWN0aXZlX2Fub25faXNfbG93IC0gY2hlY2sgaWYgYW5vbnltb3VzIHBhZ2VzIG5lZWQgdG8gYmUgZGVhY3RpdmF0ZWQKKyAqIEB6b25lOiB6b25lIHRvIGNoZWNrCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSB6b25lIGRvZXMgbm90IGhhdmUgZW5vdWdoIGluYWN0aXZlIGFub24gcGFnZXMsCisgKiBtZWFuaW5nIHNvbWUgYWN0aXZlIGFub24gcGFnZXMgbmVlZCB0byBiZSBkZWFjdGl2YXRlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaW5hY3RpdmVfYW5vbl9pc19sb3coc3RydWN0IHpvbmUgKnpvbmUpCit7CisJdW5zaWduZWQgbG9uZyBhY3RpdmUsIGluYWN0aXZlOworCisJYWN0aXZlID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OKTsKKwlpbmFjdGl2ZSA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKTsKKworCWlmIChpbmFjdGl2ZSAqIHpvbmUtPmluYWN0aXZlX3JhdGlvIDwgYWN0aXZlKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggOWQ0OWZhMy4uZmU4MjU0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtOTQsOSArOTQsNiBAQAogCXZvaWQgKnZpcnR1YWw7CQkJLyogS2VybmVsIHZpcnR1YWwgYWRkcmVzcyAoTlVMTCBpZgogCQkJCQkgICBub3Qga21hcHBlZCwgaWUuIGhpZ2htZW0pICovCiAjZW5kaWYgLyogV0FOVF9QQUdFX1ZJUlRVQUwgKi8KLSNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgotCXVuc2lnbmVkIGxvbmcgcGFnZV9jZ3JvdXA7Ci0jZW5kaWYKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA0MjgzMjhhLi4zNWE3YjVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTgxLDIxICs4MSwzMSBAQAogZW51bSB6b25lX3N0YXRfaXRlbSB7CiAJLyogRmlyc3QgMTI4IGJ5dGUgY2FjaGVsaW5lIChhc3N1bWluZyA2NCBiaXQgd29yZHMpICovCiAJTlJfRlJFRV9QQUdFUywKLQlOUl9JTkFDVElWRSwKLQlOUl9BQ1RJVkUsCisJTlJfTFJVX0JBU0UsCisJTlJfSU5BQ1RJVkVfQU5PTiA9IE5SX0xSVV9CQVNFLCAvKiBtdXN0IG1hdGNoIG9yZGVyIG9mIExSVV9bSU5dQUNUSVZFICovCisJTlJfQUNUSVZFX0FOT04sCQkvKiAgIiAgICAgIiAgICAgIiAgICIgICAgICAgIiAgICAgICAgICovCisJTlJfSU5BQ1RJVkVfRklMRSwJLyogICIgICAgICIgICAgICIgICAiICAgICAgICIgICAgICAgICAqLworCU5SX0FDVElWRV9GSUxFLAkJLyogICIgICAgICIgICAgICIgICAiICAgICAgICIgICAgICAgICAqLworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwlOUl9VTkVWSUNUQUJMRSwJCS8qICAiICAgICAiICAgICAiICAgIiAgICAgICAiICAgICAgICAgKi8KKwlOUl9NTE9DSywJCS8qIG1sb2NrKCllZCBwYWdlcyBmb3VuZCBhbmQgbW92ZWQgb2ZmIExSVSAqLworI2Vsc2UKKwlOUl9VTkVWSUNUQUJMRSA9IE5SX0FDVElWRV9GSUxFLCAvKiBhdm9pZCBjb21waWxlciBlcnJvcnMgaW4gZGVhZCBjb2RlICovCisJTlJfTUxPQ0sgPSBOUl9BQ1RJVkVfRklMRSwKKyNlbmRpZgogCU5SX0FOT05fUEFHRVMsCS8qIE1hcHBlZCBhbm9ueW1vdXMgcGFnZXMgKi8KIAlOUl9GSUxFX01BUFBFRCwJLyogcGFnZWNhY2hlIHBhZ2VzIG1hcHBlZCBpbnRvIHBhZ2V0YWJsZXMuCiAJCQkgICBvbmx5IG1vZGlmaWVkIGZyb20gcHJvY2VzcyBjb250ZXh0ICovCiAJTlJfRklMRV9QQUdFUywKIAlOUl9GSUxFX0RJUlRZLAogCU5SX1dSSVRFQkFDSywKLQkvKiBTZWNvbmQgMTI4IGJ5dGUgY2FjaGVsaW5lICovCiAJTlJfU0xBQl9SRUNMQUlNQUJMRSwKIAlOUl9TTEFCX1VOUkVDTEFJTUFCTEUsCiAJTlJfUEFHRVRBQkxFLAkJLyogdXNlZCBmb3IgcGFnZXRhYmxlcyAqLwogCU5SX1VOU1RBQkxFX05GUywJLyogTkZTIHVuc3RhYmxlIHBhZ2VzICovCiAJTlJfQk9VTkNFLAogCU5SX1ZNU0NBTl9XUklURSwKKwkvKiBTZWNvbmQgMTI4IGJ5dGUgY2FjaGVsaW5lICovCiAJTlJfV1JJVEVCQUNLX1RFTVAsCS8qIFdyaXRlYmFjayB1c2luZyB0ZW1wb3JhcnkgYnVmZmVycyAqLwogI2lmZGVmIENPTkZJR19OVU1BCiAJTlVNQV9ISVQsCQkvKiBhbGxvY2F0ZWQgaW4gaW50ZW5kZWQgbm9kZSAqLwpAQCAtMTA3LDYgKzExNyw1NSBAQAogI2VuZGlmCiAJTlJfVk1fWk9ORV9TVEFUX0lURU1TIH07CiAKKy8qCisgKiBXZSBkbyBhcml0aG1ldGljIG9uIHRoZSBMUlUgbGlzdHMgaW4gdmFyaW91cyBwbGFjZXMgaW4gdGhlIGNvZGUsCisgKiBzbyBpdCBpcyBpbXBvcnRhbnQgdG8ga2VlcCB0aGUgYWN0aXZlIGxpc3RzIExSVV9BQ1RJVkUgaGlnaGVyIGluCisgKiB0aGUgYXJyYXkgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBpbmFjdGl2ZSBsaXN0cywgYW5kIHRvIGtlZXAKKyAqIHRoZSAqX0ZJTEUgbGlzdHMgTFJVX0ZJTEUgaGlnaGVyIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgX0FOT04gbGlzdHMuCisgKgorICogVGhpcyBoYXMgdG8gYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHN0YXRpc3RpY3MgaW4gem9uZV9zdGF0X2l0ZW0KKyAqIGFib3ZlIGFuZCB0aGUgZGVzY3JpcHRpb25zIGluIHZtc3RhdF90ZXh0IGluIG1tL3Ztc3RhdC5jCisgKi8KKyNkZWZpbmUgTFJVX0JBU0UgMAorI2RlZmluZSBMUlVfQUNUSVZFIDEKKyNkZWZpbmUgTFJVX0ZJTEUgMgorCitlbnVtIGxydV9saXN0IHsKKwlMUlVfSU5BQ1RJVkVfQU5PTiA9IExSVV9CQVNFLAorCUxSVV9BQ1RJVkVfQU5PTiA9IExSVV9CQVNFICsgTFJVX0FDVElWRSwKKwlMUlVfSU5BQ1RJVkVfRklMRSA9IExSVV9CQVNFICsgTFJVX0ZJTEUsCisJTFJVX0FDVElWRV9GSUxFID0gTFJVX0JBU0UgKyBMUlVfRklMRSArIExSVV9BQ1RJVkUsCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCUxSVV9VTkVWSUNUQUJMRSwKKyNlbHNlCisJTFJVX1VORVZJQ1RBQkxFID0gTFJVX0FDVElWRV9GSUxFLCAvKiBhdm9pZCBjb21waWxlciBlcnJvcnMgaW4gZGVhZCBjb2RlICovCisjZW5kaWYKKwlOUl9MUlVfTElTVFMKK307CisKKyNkZWZpbmUgZm9yX2VhY2hfbHJ1KGwpIGZvciAobCA9IDA7IGwgPCBOUl9MUlVfTElTVFM7IGwrKykKKworI2RlZmluZSBmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGwpIGZvciAobCA9IDA7IGwgPD0gTFJVX0FDVElWRV9GSUxFOyBsKyspCisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2ZpbGVfbHJ1KGVudW0gbHJ1X2xpc3QgbCkKK3sKKwlyZXR1cm4gKGwgPT0gTFJVX0lOQUNUSVZFX0ZJTEUgfHwgbCA9PSBMUlVfQUNUSVZFX0ZJTEUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19hY3RpdmVfbHJ1KGVudW0gbHJ1X2xpc3QgbCkKK3sKKwlyZXR1cm4gKGwgPT0gTFJVX0FDVElWRV9BTk9OIHx8IGwgPT0gTFJVX0FDVElWRV9GSUxFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfdW5ldmljdGFibGVfbHJ1KGVudW0gbHJ1X2xpc3QgbCkKK3sKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJcmV0dXJuIChsID09IExSVV9VTkVWSUNUQUJMRSk7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKIHN0cnVjdCBwZXJfY3B1X3BhZ2VzIHsKIAlpbnQgY291bnQ7CQkvKiBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGxpc3QgKi8KIAlpbnQgaGlnaDsJCS8qIGhpZ2ggd2F0ZXJtYXJrLCBlbXB0eWluZyBuZWVkZWQgKi8KQEAgLTI1MSwxMCArMzEwLDIyIEBACiAKIAkvKiBGaWVsZHMgY29tbW9ubHkgYWNjZXNzZWQgYnkgdGhlIHBhZ2UgcmVjbGFpbSBzY2FubmVyICovCiAJc3BpbmxvY2tfdAkJbHJ1X2xvY2s7CQotCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlX2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZAlpbmFjdGl2ZV9saXN0OwotCXVuc2lnbmVkIGxvbmcJCW5yX3NjYW5fYWN0aXZlOwotCXVuc2lnbmVkIGxvbmcJCW5yX3NjYW5faW5hY3RpdmU7CisJc3RydWN0IHsKKwkJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCQl1bnNpZ25lZCBsb25nIG5yX3NjYW47CisJfSBscnVbTlJfTFJVX0xJU1RTXTsKKworCS8qCisJICogVGhlIHBhZ2VvdXQgY29kZSBpbiB2bXNjYW4uYyBrZWVwcyB0cmFjayBvZiBob3cgbWFueSBvZiB0aGUKKwkgKiBtZW0vc3dhcCBiYWNrZWQgYW5kIGZpbGUgYmFja2VkIHBhZ2VzIGFyZSByZWZlZmVyZW5jZWQuCisJICogVGhlIGhpZ2hlciB0aGUgcm90YXRlZC9zY2FubmVkIHJhdGlvLCB0aGUgbW9yZSB2YWx1YWJsZQorCSAqIHRoYXQgY2FjaGUgaXMuCisJICoKKwkgKiBUaGUgYW5vbiBMUlUgc3RhdHMgbGl2ZSBpbiBbMF0sIGZpbGUgTFJVIHN0YXRzIGluIFsxXQorCSAqLworCXVuc2lnbmVkIGxvbmcJCXJlY2VudF9yb3RhdGVkWzJdOworCXVuc2lnbmVkIGxvbmcJCXJlY2VudF9zY2FubmVkWzJdOworCiAJdW5zaWduZWQgbG9uZwkJcGFnZXNfc2Nhbm5lZDsJICAgLyogc2luY2UgbGFzdCByZWNsYWltICovCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkgICAvKiB6b25lIGZsYWdzLCBzZWUgYmVsb3cgKi8KIApAQCAtMjc2LDYgKzM0NywxMiBAQAogCSAqLwogCWludCBwcmV2X3ByaW9yaXR5OwogCisJLyoKKwkgKiBUaGUgdGFyZ2V0IHJhdGlvIG9mIEFDVElWRV9BTk9OIHRvIElOQUNUSVZFX0FOT04gcGFnZXMgb24KKwkgKiB0aGlzIHpvbmUncyBMUlUuICBNYWludGFpbmVkIGJ5IHRoZSBwYWdlb3V0IGNvZGUuCisJICovCisJdW5zaWduZWQgaW50IGluYWN0aXZlX3JhdGlvOworCiAKIAlaT05FX1BBRERJTkcoX3BhZDJfKQogCS8qIFJhcmVseSB1c2VkIG9yIHJlYWQtbW9zdGx5IGZpZWxkcyAqLwpAQCAtNTI0LDggKzYwMSwxMSBAQAogCXN0cnVjdCB6b25lIG5vZGVfem9uZXNbTUFYX05SX1pPTkVTXTsKIAlzdHJ1Y3Qgem9uZWxpc3Qgbm9kZV96b25lbGlzdHNbTUFYX1pPTkVMSVNUU107CiAJaW50IG5yX3pvbmVzOwotI2lmZGVmIENPTkZJR19GTEFUX05PREVfTUVNX01BUAorI2lmZGVmIENPTkZJR19GTEFUX05PREVfTUVNX01BUAkvKiBtZWFucyAhU1BBUlNFTUVNICovCiAJc3RydWN0IHBhZ2UgKm5vZGVfbWVtX21hcDsKKyNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgorCXN0cnVjdCBwYWdlX2Nncm91cCAqbm9kZV9wYWdlX2Nncm91cDsKKyNlbmRpZgogI2VuZGlmCiAJc3RydWN0IGJvb3RtZW1fZGF0YSAqYmRhdGE7CiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCkBAIC04NTQsNiArOTM0LDcgQEAKICNlbmRpZgogCiBzdHJ1Y3QgcGFnZTsKK3N0cnVjdCBwYWdlX2Nncm91cDsKIHN0cnVjdCBtZW1fc2VjdGlvbiB7CiAJLyoKIAkgKiBUaGlzIGlzLCBsb2dpY2FsbHksIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBzdHJ1Y3QKQEAgLTg3MSw2ICs5NTIsMTQgQEAKIAogCS8qIFNlZSBkZWNsYXJhdGlvbiBvZiBzaW1pbGFyIGZpZWxkIGluIHN0cnVjdCB6b25lICovCiAJdW5zaWduZWQgbG9uZyAqcGFnZWJsb2NrX2ZsYWdzOworI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCisJLyoKKwkgKiBJZiAhU1BBUlNFTUVNLCBwZ2RhdCBkb2Vzbid0IGhhdmUgcGFnZV9jZ3JvdXAgcG9pbnRlci4gV2UgdXNlCisJICogc2VjdGlvbi4gKHNlZSBtZW1jb250cm9sLmgvcGFnZV9jZ3JvdXAuaCBhYm91dCB0aGlzLikKKwkgKi8KKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBhZ2VfY2dyb3VwOworCXVuc2lnbmVkIGxvbmcgcGFkOworI2VuZGlmCiB9OwogCiAjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAppbmRleCBjNGRiNTgyLi5lYjcxYjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKQEAgLTEzMSw2ICsxMzEsMTYgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MJMHgwMTAwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1BST1RPQ09MCTB4MDIwMAogCisjZGVmaW5lIEhJRF9BTllfSUQJCQkJKH4wKQorCitzdHJ1Y3QgaGlkX2RldmljZV9pZCB7CisJX191MTYgYnVzOworCV9fdTMyIHZlbmRvcjsKKwlfX3UzMiBwcm9kdWN0OworCWtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhCisJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGtlcm5lbF91bG9uZ190KSkpKTsKK307CisKIC8qIHMzOTAgQ0NXIGRldmljZXMgKi8KIHN0cnVjdCBjY3dfZGV2aWNlX2lkIHsKIAlfX3UxNgltYXRjaF9mbGFnczsJLyogd2hpY2ggZmllbGRzIHRvIG1hdGNoIGFnYWluc3QgKi8KQEAgLTI3NCw3ICsyODQsNyBAQAogLyogSW5wdXQgKi8KICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0VWX01BWAkJMHgxZgogI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfS0VZX01JTl9JTlRFUkVTVElORwkweDcxCi0jZGVmaW5lIElOUFVUX0RFVklDRV9JRF9LRVlfTUFYCQkweDFmZgorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfS0VZX01BWAkJMHgyZmYKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX1JFTF9NQVgJCTB4MGYKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0FCU19NQVgJCTB4M2YKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01TQ19NQVgJCTB4MDcKQEAgLTM4OCw1ICszOTgsNTIgQEAKIAkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGtlcm5lbF91bG9uZ190KSkpKTsKIH07CiAKKy8qIGRtaSAqLworZW51bSBkbWlfZmllbGQgeworCURNSV9OT05FLAorCURNSV9CSU9TX1ZFTkRPUiwKKwlETUlfQklPU19WRVJTSU9OLAorCURNSV9CSU9TX0RBVEUsCisJRE1JX1NZU19WRU5ET1IsCisJRE1JX1BST0RVQ1RfTkFNRSwKKwlETUlfUFJPRFVDVF9WRVJTSU9OLAorCURNSV9QUk9EVUNUX1NFUklBTCwKKwlETUlfUFJPRFVDVF9VVUlELAorCURNSV9CT0FSRF9WRU5ET1IsCisJRE1JX0JPQVJEX05BTUUsCisJRE1JX0JPQVJEX1ZFUlNJT04sCisJRE1JX0JPQVJEX1NFUklBTCwKKwlETUlfQk9BUkRfQVNTRVRfVEFHLAorCURNSV9DSEFTU0lTX1ZFTkRPUiwKKwlETUlfQ0hBU1NJU19UWVBFLAorCURNSV9DSEFTU0lTX1ZFUlNJT04sCisJRE1JX0NIQVNTSVNfU0VSSUFMLAorCURNSV9DSEFTU0lTX0FTU0VUX1RBRywKKwlETUlfU1RSSU5HX01BWCwKK307CisKK3N0cnVjdCBkbWlfc3RybWF0Y2ggeworCXVuc2lnbmVkIGNoYXIgc2xvdDsKKwljaGFyIHN1YnN0cls3OV07Cit9OworCisjaWZuZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBkbWlfc3lzdGVtX2lkIHsKKwlrZXJuZWxfdWxvbmdfdCBjYWxsYmFjazsKKwlrZXJuZWxfdWxvbmdfdCBpZGVudDsKKwlzdHJ1Y3QgZG1pX3N0cm1hdGNoIG1hdGNoZXNbNF07CisJa2VybmVsX3Vsb25nX3QgZHJpdmVyX2RhdGEKKwkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGtlcm5lbF91bG9uZ190KSkpKTsKK307CisjZWxzZQorc3RydWN0IGRtaV9zeXN0ZW1faWQgeworCWludCAoKmNhbGxiYWNrKShjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqKTsKKwljb25zdCBjaGFyICppZGVudDsKKwlzdHJ1Y3QgZG1pX3N0cm1hdGNoIG1hdGNoZXNbNF07CisJdm9pZCAqZHJpdmVyX2RhdGE7Cit9OworI2VuZGlmCisKKyNkZWZpbmUgRE1JX01BVENIKGEsIGIpCXsgYSwgYiB9CiAKICNlbmRpZiAvKiBMSU5VWF9NT0RfREVWSUNFVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggOGI2MTEzNS4uNWQyOTcwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0zNTAsNyArMzUwLDYgQEAKIAkvKiBSZWZlcmVuY2UgY291bnRzICovCiAJc3RydWN0IG1vZHVsZV9yZWYgcmVmW05SX0NQVVNdOwogI2VuZGlmCi0KIH07CiAjaWZuZGVmIE1PRFVMRV9BUkNIX0lOSVQKICNkZWZpbmUgTU9EVUxFX0FSQ0hfSU5JVCB7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9tb3VudC5oCmluZGV4IDMwYTFkNjMuLmNhYjJhODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKQEAgLTUsOCArNSw2IEBACiAgKgogICogQXV0aG9yOiAgTWFyY28gdmFuIFdpZXJpbmdlbiA8bXZ3QHBsYW5ldHMuZWxtLm5ldD4KICAqCi0gKiBWZXJzaW9uOiAkSWQ6IG1vdW50LmgsdiAyLjAgMTk5Ni8xMS8xNyAxNjo0ODoxNCBtdncgRXhwIG12dyAkCi0gKgogICovCiAjaWZuZGVmIF9MSU5VWF9NT1VOVF9ICiAjZGVmaW5lIF9MSU5VWF9NT1VOVF9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaCBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCmluZGV4IGQ2ZmIxMTUuLmVlNTEyNGVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9mbGFzaGNoaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NmaV9lbmRpYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQveGlwLmg+CiAKICNpZmRlZiBDT05GSUdfTVREX0NGSV9JMQogI2RlZmluZSBjZmlfaW50ZXJsZWF2ZShjZmkpIDEKQEAgLTQzMCw3ICs0MzEsNiBAQAogewogCW1hcF93b3JkIHZhbDsKIAl1aW50MzJfdCBhZGRyID0gYmFzZSArIGNmaV9idWlsZF9jbWRfYWRkcihjbWRfYWRkciwgY2ZpX2ludGVybGVhdmUoY2ZpKSwgdHlwZSk7Ci0KIAl2YWwgPSBjZmlfYnVpbGRfY21kKGNtZCwgbWFwLCBjZmkpOwogCiAJaWYgKHByZXZfdmFsKQpAQCAtNDgzLDYgKzQ4MywxMyBAQAogCX0KIH0KIAoraW50IF9feGlwcmFtIGNmaV9xcnlfcHJlc2VudChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgX191MzIgYmFzZSwKKwkJCSAgICAgc3RydWN0IGNmaV9wcml2YXRlICpjZmkpOworaW50IF9feGlwcmFtIGNmaV9xcnlfbW9kZV9vbih1aW50MzJfdCBiYXNlLCBzdHJ1Y3QgbWFwX2luZm8gKm1hcCwKKwkJCSAgICAgc3RydWN0IGNmaV9wcml2YXRlICpjZmkpOwordm9pZCBfX3hpcHJhbSBjZmlfcXJ5X21vZGVfb2ZmKHVpbnQzMl90IGJhc2UsIHN0cnVjdCBtYXBfaW5mbyAqbWFwLAorCQkJICAgICAgIHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpKTsKKwogc3RydWN0IGNmaV9leHRxdWVyeSAqY2ZpX3JlYWRfcHJpKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1aW50MTZfdCBhZHIsIHVpbnQxNl90IHNpemUsCiAJCQkgICAgIGNvbnN0IGNoYXIqIG5hbWUpOwogc3RydWN0IGNmaV9maXh1cCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9mbGFzaGNoaXAuaCBiL2luY2x1ZGUvbGludXgvbXRkL2ZsYXNoY2hpcC5oCmluZGV4IDA4ZGQxMzEuLmQ0ZjM4YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2ZsYXNoY2hpcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2ZsYXNoY2hpcC5oCkBAIC03Myw2ICs3MywxMCBAQAogCWludCBidWZmZXJfd3JpdGVfdGltZTsKIAlpbnQgZXJhc2VfdGltZTsKIAorCWludCB3b3JkX3dyaXRlX3RpbWVfbWF4OworCWludCBidWZmZXJfd3JpdGVfdGltZV9tYXg7CisJaW50IGVyYXNlX3RpbWVfbWF4OworCiAJdm9pZCAqcHJpdjsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL210ZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKaW5kZXggOTIyNjM2NS4uZWFlMjZiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKQEAgLTI1LDggKzI1LDEwIEBACiAjZGVmaW5lIE1URF9FUkFTRV9ET05FICAgICAgICAgIDB4MDgKICNkZWZpbmUgTVREX0VSQVNFX0ZBSUxFRCAgICAgICAgMHgxMAogCisjZGVmaW5lIE1URF9GQUlMX0FERFJfVU5LTk9XTiAweGZmZmZmZmZmCisKIC8qIElmIHRoZSBlcmFzZSBmYWlscywgZmFpbF9hZGRyIG1pZ2h0IGluZGljYXRlIGV4YWN0bHkgd2hpY2ggYmxvY2sgZmFpbGVkLiAgSWYKLSAgIGZhaWxfYWRkciA9IDB4ZmZmZmZmZmYsIHRoZSBmYWlsdXJlIHdhcyBub3QgYXQgdGhlIGRldmljZSBsZXZlbCBvciB3YXMgbm90CisgICBmYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV04sIHRoZSBmYWlsdXJlIHdhcyBub3QgYXQgdGhlIGRldmljZSBsZXZlbCBvciB3YXMgbm90CiAgICBzcGVjaWZpYyB0byBhbnkgcGFydGljdWxhciBibG9jay4gKi8KIHN0cnVjdCBlcmFzZV9pbmZvIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQtZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC1ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1MzRlNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQtZ3Bpby5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX19MSU5VWF9NVERfTkFORF9HUElPX0gKKyNkZWZpbmUgX19MSU5VWF9NVERfTkFORF9HUElPX0gKKworI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisKK3N0cnVjdCBncGlvX25hbmRfcGxhdGRhdGEgeworCWludAlncGlvX25jZTsKKwlpbnQJZ3Bpb19ud3A7CisJaW50CWdwaW9fY2xlOworCWludAlncGlvX2FsZTsKKwlpbnQJZ3Bpb19yZHk7CisJdm9pZAkoKmFkanVzdF9wYXJ0cykoc3RydWN0IGdwaW9fbmFuZF9wbGF0ZGF0YSAqLCBzaXplX3QpOworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwl1bnNpZ25lZCBpbnQgbnVtX3BhcnRzOworCXVuc2lnbmVkIGludCBvcHRpb25zOworCWludAljaGlwX2RlbGF5OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKaW5kZXggODE3NzRlNS4uNzMzZDNmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaApAQCAtMjQ4LDYgKzI0OCw3IEBACiAgKiBAcmVhZF9wYWdlX3JhdzoJZnVuY3Rpb24gdG8gcmVhZCBhIHJhdyBwYWdlIHdpdGhvdXQgRUNDCiAgKiBAd3JpdGVfcGFnZV9yYXc6CWZ1bmN0aW9uIHRvIHdyaXRlIGEgcmF3IHBhZ2Ugd2l0aG91dCBFQ0MKICAqIEByZWFkX3BhZ2U6CWZ1bmN0aW9uIHRvIHJlYWQgYSBwYWdlIGFjY29yZGluZyB0byB0aGUgZWNjIGdlbmVyYXRvciByZXF1aXJlbWVudHMKKyAqIEByZWFkX3N1YnBhZ2U6CWZ1bmN0aW9uIHRvIHJlYWQgcGFydHMgb2YgdGhlIHBhZ2UgY292ZXJlZCBieSBFQ0MuCiAgKiBAd3JpdGVfcGFnZToJZnVuY3Rpb24gdG8gd3JpdGUgYSBwYWdlIGFjY29yZGluZyB0byB0aGUgZWNjIGdlbmVyYXRvciByZXF1aXJlbWVudHMKICAqIEByZWFkX29vYjoJZnVuY3Rpb24gdG8gcmVhZCBjaGlwIE9PQiBkYXRhCiAgKiBAd3JpdGVfb29iOglmdW5jdGlvbiB0byB3cml0ZSBjaGlwIE9PQiBkYXRhCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCmluZGV4IGQxYjMxMGMuLjBjNmJiZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCkBAIC0xNTIsNiArMTUyLDggQEAKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9JTlQJCSgxIDw8IDYpCiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfSU9CRQkJKDEgPDwgNSkKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9SRFlfQ09ORgkoMSA8PCA0KQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0hGCQkoMSA8PCAyKQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX1NZTkNfV1JJVEUJKDEgPDwgMSkKIAogLyoKICAqIENvbnRyb2xsZXIgU3RhdHVzIFJlZ2lzdGVyIEYyNDBoIChSKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oIGIvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCmluZGV4IDUwMTRmN2EuLmM5MmI0ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKQEAgLTczLDcgKzczLDYgQEAKIHN0cnVjdCBkZXZpY2Vfbm9kZTsKIAogaW50IF9fZGV2aW5pdCBvZl9tdGRfcGFyc2VfcGFydGl0aW9ucyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdGRfaW5mbyAqbXRkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvc2hfZmxjdGwuaCBiL2luY2x1ZGUvbGludXgvbXRkL3NoX2ZsY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3YzFjZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3NoX2ZsY3RsLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBTdXBlckggRkxDVEwgbmFuZCBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IMKpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIF9fU0hfRkxDVExfSF9fCisjZGVmaW5lIF9fU0hfRkxDVExfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisvKiBGTENUTCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRkxDTU5DUihmKQkJKGYtPnJlZyArIDB4MCkKKyNkZWZpbmUgRkxDTURDUihmKQkJKGYtPnJlZyArIDB4NCkKKyNkZWZpbmUgRkxDTUNEUihmKQkJKGYtPnJlZyArIDB4OCkKKyNkZWZpbmUgRkxBRFIoZikJCShmLT5yZWcgKyAweEMpCisjZGVmaW5lIEZMQURSMihmKQkJKGYtPnJlZyArIDB4M0MpCisjZGVmaW5lIEZMREFUQVIoZikJCShmLT5yZWcgKyAweDEwKQorI2RlZmluZSBGTERUQ05UUihmKQkJKGYtPnJlZyArIDB4MTQpCisjZGVmaW5lIEZMSU5URE1BQ1IoZikJCShmLT5yZWcgKyAweDE4KQorI2RlZmluZSBGTEJTWVRNUihmKQkJKGYtPnJlZyArIDB4MUMpCisjZGVmaW5lIEZMQlNZQ05UKGYpCQkoZi0+cmVnICsgMHgyMCkKKyNkZWZpbmUgRkxEVEZJRk8oZikJCShmLT5yZWcgKyAweDI0KQorI2RlZmluZSBGTEVDRklGTyhmKQkJKGYtPnJlZyArIDB4MjgpCisjZGVmaW5lIEZMVFJDUihmKQkJKGYtPnJlZyArIDB4MkMpCisjZGVmaW5lCUZMNEVDQ1JFU1VMVDAoZikJKGYtPnJlZyArIDB4ODApCisjZGVmaW5lCUZMNEVDQ1JFU1VMVDEoZikJKGYtPnJlZyArIDB4ODQpCisjZGVmaW5lCUZMNEVDQ1JFU1VMVDIoZikJKGYtPnJlZyArIDB4ODgpCisjZGVmaW5lCUZMNEVDQ1JFU1VMVDMoZikJKGYtPnJlZyArIDB4OEMpCisjZGVmaW5lCUZMNEVDQ0NSKGYpCQkoZi0+cmVnICsgMHg5MCkKKyNkZWZpbmUJRkw0RUNDQ05UKGYpCQkoZi0+cmVnICsgMHg5NCkKKyNkZWZpbmUJRkxFUlJBRFIoZikJCShmLT5yZWcgKyAweDk4KQorCisvKiBGTENNTkNSIGNvbnRyb2wgYml0cyAqLworI2RlZmluZSBFQ0NQT1MyCQkoMHgxIDw8IDI1KQorI2RlZmluZSBfNEVDQ0NOVEVOCSgweDEgPDwgMjQpCisjZGVmaW5lIF80RUNDRU4JCSgweDEgPDwgMjMpCisjZGVmaW5lIF80RUNDQ09SUkVDVAkoMHgxIDw8IDIyKQorI2RlZmluZSBTTkFORF9FCQkoMHgxIDw8IDE4KQkvKiBTTkFORCAoMD01MTIgMT0yMDQ4KSovCisjZGVmaW5lIFFUU0VMX0UJCSgweDEgPDwgMTcpCisjZGVmaW5lIEVORElBTgkJKDB4MSA8PCAxNikJLyogMSA9IGxpdHRsZSBlbmRpYW4gKi8KKyNkZWZpbmUgRkNLU0VMX0UJKDB4MSA8PCAxNSkKKyNkZWZpbmUgRUNDUE9TXzAwCSgweDAwIDw8IDEyKQorI2RlZmluZSBFQ0NQT1NfMDEJKDB4MDEgPDwgMTIpCisjZGVmaW5lIEVDQ1BPU18wMgkoMHgwMiA8PCAxMikKKyNkZWZpbmUgQUNNX1NBQ0NFU19NT0RFCSgweDAxIDw8IDEwKQorI2RlZmluZSBOQU5XRl9FCQkoMHgxIDw8IDkpCisjZGVmaW5lIFNFX0QJCSgweDEgPDwgOCkJLyogU3BhcmUgYXJlYSBkaXNhYmxlICovCisjZGVmaW5lCUNFMV9FTkFCTEUJKDB4MSA8PCA0KQkvKiBDaGlwIEVuYWJsZSAxICovCisjZGVmaW5lCUNFMF9FTkFCTEUJKDB4MSA8PCAzKQkvKiBDaGlwIEVuYWJsZSAwICovCisjZGVmaW5lCVRZUEVTRUxfU0VUCSgweDEgPDwgMCkKKworLyogRkxDTURDUiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgQURSQ05UMl9FCSgweDEgPDwgMzEpCS8qIDVieXRlIGFkZHJlc3MgZW5hYmxlICovCisjZGVmaW5lIEFEUk1EX0UJCSgweDEgPDwgMjYpCS8qIFNlY3RvciBhZGRyZXNzIGFjY2VzcyAqLworI2RlZmluZSBDRFNSQ19FCQkoMHgxIDw8IDI1KQkvKiBEYXRhIGJ1ZmZlciBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgRE9TUl9FCQkoMHgxIDw8IDI0KQkvKiBTdGF0dXMgcmVhZCBjaGVjayAqLworI2RlZmluZSBTRUxSVwkJKDB4MSA8PCAyMSkJLyogIDA6cmVhZCAxOndyaXRlICovCisjZGVmaW5lIERPQURSX0UJCSgweDEgPDwgMjApCS8qIEFkZHJlc3Mgc3RhZ2UgZXhlY3V0ZSAqLworI2RlZmluZSBBRFJDTlRfMQkoMHgwMCA8PCAxOCkJLyogQWRkcmVzcyBkYXRhIGJ5dGVzOiAxYnl0ZSAqLworI2RlZmluZSBBRFJDTlRfMgkoMHgwMSA8PCAxOCkJLyogQWRkcmVzcyBkYXRhIGJ5dGVzOiAyYnl0ZSAqLworI2RlZmluZSBBRFJDTlRfMwkoMHgwMiA8PCAxOCkJLyogQWRkcmVzcyBkYXRhIGJ5dGVzOiAzYnl0ZSAqLworI2RlZmluZSBBRFJDTlRfNAkoMHgwMyA8PCAxOCkJLyogQWRkcmVzcyBkYXRhIGJ5dGVzOiA0Ynl0ZSAqLworI2RlZmluZSBET0NNRDJfRQkoMHgxIDw8IDE3KQkvKiAybmQgY21kIHN0YWdlIGV4ZWN1dGUgKi8KKyNkZWZpbmUgRE9DTUQxX0UJKDB4MSA8PCAxNikJLyogMXN0IGNtZCBzdGFnZSBleGVjdXRlICovCisKKy8qIEZMVFJDUiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgVFJTVFJUCQkoMHgxIDw8IDApCS8qIHRyYW5zbGF0aW9uIHN0YXJ0ICovCisjZGVmaW5lIFRSRU5ECQkoMHgxIDw8IDEpCS8qIHRyYW5zbGF0aW9uIGVuZCAqLworCisvKiBGTDRFQ0NDUiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUJXzRFQ0NGQQkJKDB4MSA8PCAyKQkvKiA0IHN5bWJvbHMgY29ycmVjdCBmYXVsdCAqLworI2RlZmluZQlfNEVDQ0VORAkoMHgxIDw8IDEpCS8qIDQgc3ltYm9scyBlbmQgKi8KKyNkZWZpbmUJXzRFQ0NFWFNUCSgweDEgPDwgMCkJLyogNCBzeW1ib2xzIGV4aXN0ICovCisKKyNkZWZpbmUgSU5JVF9GTDRFQ0NSRVNVTFRfVkFMCTB4MDNGRjAzRkYKKyNkZWZpbmUgTE9PUF9USU1FT1VUX01BWAkweDAwMDEwMDAwCisKKyNkZWZpbmUgbXRkX3RvX2ZsY3RsKG10ZCkJY29udGFpbmVyX29mKG10ZCwgc3RydWN0IHNoX2ZsY3RsLCBtdGQpCisKK3N0cnVjdCBzaF9mbGN0bCB7CisJc3RydWN0IG10ZF9pbmZvCQltdGQ7CisJc3RydWN0IG5hbmRfY2hpcAljaGlwOworCXZvaWQgX19pb21lbQkJKnJlZzsKKworCXVpbnQ4X3QJZG9uZV9idWZmWzIwNDggKyA2NF07CS8qIG1heCBzaXplIDIwNDggKyA2NCAqLworCWludAlyZWFkX2J5dGVzOworCWludAlpbmRleDsKKwlpbnQJc2VxaW5fY29sdW1uOwkJLyogY29sdW1uIGluIFNFUUlOIGNtZCAqLworCWludAlzZXFpbl9wYWdlX2FkZHI7CS8qIHBhZ2VfYWRkciBpbiBTRVFJTiBjbWQgKi8KKwl1aW50MzJfdCBzZXFpbl9yZWFkX2NtZDsJCS8qIHJlYWQgY21kIGluIFNFUUlOIGNtZCAqLworCWludAllcmFzZTFfcGFnZV9hZGRyOwkvKiBwYWdlX2FkZHIgaW4gRVJBU0UxIGNtZCAqLworCXVpbnQzMl90IGVyYXNlX0FEUkNOVDsJCS8qIGJpdHMgb2YgRkxDTURDUiBpbiBFUkFTRTEgY21kICovCisJdWludDMyX3QgcndfQURSQ05UOwkvKiBiaXRzIG9mIEZMQ01EQ1IgaW4gUkVBRCBXUklURSBjbWQgKi8KKworCWludAlod2VjY19jYW50X2NvcnJlY3RbNF07CisKKwl1bnNpZ25lZCBwYWdlX3NpemU6MTsJLyogTkFORCBwYWdlIHNpemUgKDAgPSA1MTIsIDEgPSAyMDQ4KSAqLworCXVuc2lnbmVkIGh3ZWNjOjE7CS8qIEhhcmR3YXJlIEVDQyAoMCA9IGRpc2FibGVkLCAxID0gZW5hYmxlZCkgKi8KK307CisKK3N0cnVjdCBzaF9mbGN0bF9wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydHM7CisJaW50CQkJbnJfcGFydHM7CisJdW5zaWduZWQgbG9uZwkJZmxjbW5jcl92YWw7CisKKwl1bnNpZ25lZCBoYXNfaHdlY2M6MTsKK307CisKKyNlbmRpZgkvKiBfX1NIX0ZMQ1RMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggZDNlYTNkZS4uNjQ4NzU4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0xMSw3ICsxMSw3IEBACiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJQ29yZXkgTWlueWFyZCA8d2YtcmNoIW1pbnlhcmRAcmVsYXkuRVUubmV0PgogICoJCURvbmFsZCBKLiBCZWNrZXIsIDxiZWNrZXJAY2VzZGlzLmdzZmMubmFzYS5nb3Y+Ci0gKgkJQWxhbiBDb3gsIDxBbGFuLkNveEBsaW51eC5vcmc+CisgKgkJQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgkJQmpvcm4gRWt3YWxsLiA8Ymowcm5AYmxveC5zZT4KICAqICAgICAgICAgICAgICBQZWtrYSBSaWlrb25lbiA8cHJpaWtvbmVAcG9zZWlkb24ucHNwdC5maT4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCmluZGV4IDBkODQyNGYuLjdkOGUwNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCkBAIC03OCw2ICs3OCw5IEBACiAJCQkgIGludCBlY2hvKTsKIGV4dGVybiBpbnQgbmZuZXRsaW5rX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdV9pbnQzMl90IHBpZCwgaW50IGZsYWdzKTsKIAorZXh0ZXJuIHZvaWQgbmZubF9sb2NrKHZvaWQpOworZXh0ZXJuIHZvaWQgbmZubF91bmxvY2sodm9pZCk7CisKICNkZWZpbmUgTU9EVUxFX0FMSUFTX05GTkxfU1VCU1lTKHN1YnN5cykgXAogCU1PRFVMRV9BTElBUygibmZuZXRsaW5rLXN1YnN5cy0iIF9fc3RyaW5naWZ5KHN1YnN5cykpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCmluZGV4IDc4YTU5MjIuLjRlYWE4MzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaApAQCAtMTM3LDcgKzEzNyw3IEBACiAJdW5zaWduZWQgbG9uZwkJYXR0cnRpbWVvX3RpbWVzdGFtcDsKIAlfX3U2NAkJCWNoYW5nZV9hdHRyOwkJLyogdjQgb25seSAqLwogCi0JdW5zaWduZWQgbG9uZwkJbGFzdF91cGRhdGVkOworCXVuc2lnbmVkIGxvbmcJCWF0dHJfZ2VuY291bnQ7CiAJLyogIkdlbmVyYXRpb24gY291bnRlciIgZm9yIHRoZSBhdHRyaWJ1dGUgY2FjaGUuIFRoaXMgaXMKIAkgKiBidW1wZWQgd2hlbmV2ZXIgd2UgdXBkYXRlIHRoZSBtZXRhZGF0YSBvbiB0aGUKIAkgKiBzZXJ2ZXIuCkBAIC0yMDAsMTEgKzIwMCwxMCBAQAogLyoKICAqIEJpdCBvZmZzZXRzIGluIGZsYWdzIGZpZWxkCiAgKi8KLSNkZWZpbmUgTkZTX0lOT19SRVZBTElEQVRJTkcJKDApCQkvKiByZXZhbGlkYXRpbmcgYXR0cnMgKi8KLSNkZWZpbmUgTkZTX0lOT19BRFZJU0VfUkRQTFVTCSgxKQkJLyogYWR2aXNlIHJlYWRkaXJwbHVzICovCi0jZGVmaW5lIE5GU19JTk9fU1RBTEUJCSgyKQkJLyogcG9zc2libGUgc3RhbGUgaW5vZGUgKi8KLSNkZWZpbmUgTkZTX0lOT19BQ0xfTFJVX1NFVAkoMykJCS8qIElub2RlIGlzIG9uIHRoZSBMUlUgbGlzdCAqLwotI2RlZmluZSBORlNfSU5PX01PVU5UUE9JTlQJKDQpCQkvKiBpbm9kZSBpcyByZW1vdGUgbW91bnRwb2ludCAqLworI2RlZmluZSBORlNfSU5PX0FEVklTRV9SRFBMVVMJKDApCQkvKiBhZHZpc2UgcmVhZGRpcnBsdXMgKi8KKyNkZWZpbmUgTkZTX0lOT19TVEFMRQkJKDEpCQkvKiBwb3NzaWJsZSBzdGFsZSBpbm9kZSAqLworI2RlZmluZSBORlNfSU5PX0FDTF9MUlVfU0VUCSgyKQkJLyogSW5vZGUgaXMgb24gdGhlIExSVSBsaXN0ICovCisjZGVmaW5lIE5GU19JTk9fTU9VTlRQT0lOVAkoMykJCS8qIGlub2RlIGlzIHJlbW90ZSBtb3VudHBvaW50ICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mc19pbm9kZSAqTkZTX0koY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTM0NSwxNSArMzQ0LDExIEBACiBleHRlcm4gdm9pZCBwdXRfbmZzX29wZW5fY29udGV4dChzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4KTsKIGV4dGVybiBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqbmZzX2ZpbmRfb3Blbl9jb250ZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgaW50IG1vZGUpOwogZXh0ZXJuIHU2NCBuZnNfY29tcGF0X3VzZXJfaW5vNjQodTY0IGZpbGVpZCk7CitleHRlcm4gdm9pZCBuZnNfZmF0dHJfaW5pdChzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cik7CiAKIC8qIGxpbnV4L25ldC9pcHY0L2lwY29uZmlnLmM6IHRyaW1zIGlwIGFkZHIgb2ZmIGZyb250IG9mIG5hbWUsIHRvby4gKi8KIGV4dGVybiBfX2JlMzIgcm9vdF9uZnNfcGFyc2VfYWRkcihjaGFyICpuYW1lKTsgLypfX2luaXQqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZhdHRyX2luaXQoc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCi17Ci0JZmF0dHItPnZhbGlkID0gMDsKLQlmYXR0ci0+dGltZV9zdGFydCA9IGppZmZpZXM7Ci19CitleHRlcm4gdW5zaWduZWQgbG9uZyBuZnNfaW5jX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyKHZvaWQpOwogCiAvKgogICogbGludXgvZnMvbmZzL2ZpbGUuYwpAQCAtMzcyLDggKzM2NywxMiBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBycGNfY3JlZCAqbmZzX2ZpbGVfY3JlZChzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpZiAoZmlsZSAhPSBOVUxMKQotCQlyZXR1cm4gbmZzX2ZpbGVfb3Blbl9jb250ZXh0KGZpbGUpLT5jcmVkOworCWlmIChmaWxlICE9IE5VTEwpIHsKKwkJc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCA9CisJCQluZnNfZmlsZV9vcGVuX2NvbnRleHQoZmlsZSk7CisJCWlmIChjdHgpCisJCQlyZXR1cm4gY3R4LT5jcmVkOworCX0KIAlyZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKaW5kZXggYzliZWFjZC4uNGU0NzdhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCkBAIC0xMTksNyArMTE5LDYgQEAKIAl2b2lkICgqZGVzdHJveSkoc3RydWN0IG5mc19zZXJ2ZXIgKik7CiAKIAlhdG9taWNfdCBhY3RpdmU7IC8qIEtlZXAgdHJhY2Ugb2YgYW55IGFjdGl2aXR5IHRvIHRoaXMgc2VydmVyICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgYWN0aXZlX3dxOyAgLyogV2FpdCBmb3IgYW55IGFjdGl2aXR5IHRvIHN0b3AgICovCiAKIAkvKiBtb3VudGQtcmVsYXRlZCBtb3VudCBvcHRpb25zICovCiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJbW91bnRkX2FkZHJlc3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19tb3VudC5oIGIvaW5jbHVkZS9saW51eC9uZnNfbW91bnQuaAppbmRleCBkZjdjNmI3Li42NTQ5YTA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19tb3VudC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX21vdW50LmgKQEAgLTY1LDQgKzY1LDggQEAKICNkZWZpbmUgTkZTX01PVU5UX1VOU0hBUkVECTB4ODAwMAkvKiA1ICovCiAjZGVmaW5lIE5GU19NT1VOVF9GTEFHTUFTSwkweEZGRkYKIAorLyogVGhlIGZvbGxvd2luZyBhcmUgZm9yIGludGVybmFsIHVzZSBvbmx5ICovCisjZGVmaW5lIE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORUcJMHgxMDAwMAorI2RlZmluZSBORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05PTkUJMHgyMDAwMAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKaW5kZXggOGM3N2MxMS4uYzFjMzFhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKQEAgLTM2LDYgKzM2LDcgQEAKIAlfX3UzMgkJCW5saW5rOwogCV9fdTMyCQkJdWlkOwogCV9fdTMyCQkJZ2lkOworCWRldl90CQkJcmRldjsKIAlfX3U2NAkJCXNpemU7CiAJdW5pb24gewogCQlzdHJ1Y3QgewpAQCAtNDYsNyArNDcsNiBAQAogCQkJX191NjQJdXNlZDsKIAkJfSBuZnMzOwogCX0gZHU7Ci0JZGV2X3QJCQlyZGV2OwogCXN0cnVjdCBuZnNfZnNpZAkJZnNpZDsKIAlfX3U2NAkJCWZpbGVpZDsKIAlzdHJ1Y3QgdGltZXNwZWMJCWF0aW1lOwpAQCAtNTYsNiArNTYsNyBAQAogCV9fdTY0CQkJY2hhbmdlX2F0dHI7CS8qIE5GU3Y0IGNoYW5nZSBhdHRyaWJ1dGUgKi8KIAlfX3U2NAkJCXByZV9jaGFuZ2VfYXR0cjsvKiBwcmUtb3AgTkZTdjQgY2hhbmdlIGF0dHJpYnV0ZSAqLwogCXVuc2lnbmVkIGxvbmcJCXRpbWVfc3RhcnQ7CisJdW5zaWduZWQgbG9uZwkJZ2VuY291bnQ7CiB9OwogCiAjZGVmaW5lIE5GU19BVFRSX1dDQwkJMHgwMDAxCQkvKiBwcmUtb3AgV0NDIGRhdGEgICAgKi8KQEAgLTY3MiwxNiArNjczLDE2IEBACiAJc3RydWN0IG5mc19mYXR0ciAqCQluZXdfZmF0dHI7CiB9OwogCi0jZGVmaW5lIE5GUzRfU0VUQ0xJRU5USURfTkFNRUxFTgkoNTYpCisjZGVmaW5lIE5GUzRfU0VUQ0xJRU5USURfTkFNRUxFTgkoMTI3KQogc3RydWN0IG5mczRfc2V0Y2xpZW50aWQgewogCWNvbnN0IG5mczRfdmVyaWZpZXIgKgkJc2NfdmVyaWZpZXI7CiAJdW5zaWduZWQgaW50CQkJc2NfbmFtZV9sZW47Ci0JY2hhcgkJCQlzY19uYW1lW05GUzRfU0VUQ0xJRU5USURfTkFNRUxFTl07CisJY2hhcgkJCQlzY19uYW1lW05GUzRfU0VUQ0xJRU5USURfTkFNRUxFTiArIDFdOwogCXUzMgkJCQlzY19wcm9nOwogCXVuc2lnbmVkIGludAkJCXNjX25ldGlkX2xlbjsKLQljaGFyCQkJCXNjX25ldGlkW1JQQ0JJTkRfTUFYTkVUSURMRU5dOworCWNoYXIJCQkJc2NfbmV0aWRbUlBDQklORF9NQVhORVRJRExFTiArIDFdOwogCXVuc2lnbmVkIGludAkJCXNjX3VhZGRyX2xlbjsKLQljaGFyCQkJCXNjX3VhZGRyW1JQQ0JJTkRfTUFYVUFERFJMRU5dOworCWNoYXIJCQkJc2NfdWFkZHJbUlBDQklORF9NQVhVQUREUkxFTiArIDFdOwogCXUzMgkJCQlzY19jYl9pZGVudDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmggYi9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oCmluZGV4IDEwOGY0N2UuLjIxMjY5NDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaApAQCAtMzgsNiArMzgsNyBAQAogI2RlZmluZSBORlNEX01BWV9MT0NLCQkzMgogI2RlZmluZSBORlNEX01BWV9PV05FUl9PVkVSUklERQk2NAogI2RlZmluZSBORlNEX01BWV9MT0NBTF9BQ0NFU1MJMTI4IC8qIElSSVggZG9pbmcgbG9jYWwgYWNjZXNzIGNoZWNrIG9uIGRldmljZSBzcGVjaWFsIGZpbGUqLworI2RlZmluZSBORlNEX01BWV9CWVBBU1NfR1NTX09OX1JPT1QgMjU2CiAKICNkZWZpbmUgTkZTRF9NQVlfQ1JFQVRFCQkoTkZTRF9NQVlfRVhFQ3xORlNEX01BWV9XUklURSkKICNkZWZpbmUgTkZTRF9NQVlfUkVNT1ZFCQkoTkZTRF9NQVlfRVhFQ3xORlNEX01BWV9XUklURXxORlNEX01BWV9UUlVOQykKQEAgLTEyNSw3ICsxMjYsNyBAQAogX19iZTMyCQluZnNkX3JlYWRkaXIoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwKIAkJCSAgICAgbG9mZl90ICosIHN0cnVjdCByZWFkZGlyX2NkICosIGZpbGxkaXJfdCk7CiBfX2JlMzIJCW5mc2Rfc3RhdGZzKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCi0JCQkJc3RydWN0IGtzdGF0ZnMgKik7CisJCQkJc3RydWN0IGtzdGF0ZnMgKiwgaW50IGFjY2Vzcyk7CiAKIGludAkJbmZzZF9ub3RpZnlfY2hhbmdlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaWF0dHIgKik7CiBfX2JlMzIJCW5mc2RfcGVybWlzc2lvbihzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19leHBvcnQgKiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2YuaCBiL2luY2x1ZGUvbGludXgvb2YuaAppbmRleCA3OTg4NmFkLi5lMjQ4OGY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mLmgKKysrIGIvaW5jbHVkZS9saW51eC9vZi5oCkBAIC03MSw1ICs3MSw4IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfbWF0Y2hfbm9kZSgKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaGVzLCBjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOwogZXh0ZXJuIGludCBvZl9tb2RhbGlhc19ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgY2hhciAqbW9kYWxpYXMsIGludCBsZW4pOworZXh0ZXJuIGludCBvZl9wYXJzZV9waGFuZGxlc193aXRoX2FyZ3Moc3RydWN0IGRldmljZV9ub2RlICpucCwKKwljb25zdCBjaGFyICpsaXN0X25hbWUsIGNvbnN0IGNoYXIgKmNlbGxzX25hbWUsIGludCBpbmRleCwKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKipvdXRfbm9kZSwgY29uc3Qgdm9pZCAqKm91dF9hcmdzKTsKIAogI2VuZGlmIC8qIF9MSU5VWF9PRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IGM3NGQzZTguLmIxMmY5M2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC05Myw2ICs5MywxMSBAQAogCVBHX21hcHBlZHRvZGlzaywJLyogSGFzIGJsb2NrcyBhbGxvY2F0ZWQgb24tZGlzayAqLwogCVBHX3JlY2xhaW0sCQkvKiBUbyBiZSByZWNsYWltZWQgYXNhcCAqLwogCVBHX2J1ZGR5LAkJLyogUGFnZSBpcyBmcmVlLCBvbiBidWRkeSBsaXN0cyAqLworCVBHX3N3YXBiYWNrZWQsCQkvKiBQYWdlIGlzIGJhY2tlZCBieSBSQU0vc3dhcCAqLworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwlQR191bmV2aWN0YWJsZSwJCS8qIFBhZ2UgaXMgInVuZXZpY3RhYmxlIiAgKi8KKwlQR19tbG9ja2VkLAkJLyogUGFnZSBpcyB2bWEgbWxvY2tlZCAqLworI2VuZGlmCiAjaWZkZWYgQ09ORklHX0lBNjRfVU5DQUNIRURfQUxMT0NBVE9SCiAJUEdfdW5jYWNoZWQsCQkvKiBQYWdlIGhhcyBiZWVuIG1hcHBlZCBhcyB1bmNhY2hlZCAqLwogI2VuZGlmCkBAIC0xNjEsNiArMTY2LDE4IEBACiAjZGVmaW5lIFRFU1RTQ0ZMQUcodW5hbWUsIGxuYW1lKQkJCQkJXAogCVRFU1RTRVRGTEFHKHVuYW1lLCBsbmFtZSkgVEVTVENMRUFSRkxBRyh1bmFtZSwgbG5hbWUpCiAKKyNkZWZpbmUgU0VUUEFHRUZMQUdfTk9PUCh1bmFtZSkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgU2V0UGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgIH0KKworI2RlZmluZSBDTEVBUlBBR0VGTEFHX05PT1AodW5hbWUpCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgQ2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSkgeyAgfQorCisjZGVmaW5lIF9fQ0xFQVJQQUdFRkxBR19OT09QKHVuYW1lKQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIF9fQ2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSkgeyAgfQorCisjZGVmaW5lIFRFU1RDTEVBUkZMQUdfRkFMU0UodW5hbWUpCQkJCQlcCitzdGF0aWMgaW5saW5lIGludCBUZXN0Q2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSkgeyByZXR1cm4gMDsgfQorCiBzdHJ1Y3QgcGFnZTsJLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLwogCiBURVNUUEFHRUZMQUcoTG9ja2VkLCBsb2NrZWQpCkBAIC0xNjksNiArMTg2LDcgQEAKIFBBR0VGTEFHKERpcnR5LCBkaXJ0eSkgVEVTVFNDRkxBRyhEaXJ0eSwgZGlydHkpIF9fQ0xFQVJQQUdFRkxBRyhEaXJ0eSwgZGlydHkpCiBQQUdFRkxBRyhMUlUsIGxydSkgX19DTEVBUlBBR0VGTEFHKExSVSwgbHJ1KQogUEFHRUZMQUcoQWN0aXZlLCBhY3RpdmUpIF9fQ0xFQVJQQUdFRkxBRyhBY3RpdmUsIGFjdGl2ZSkKKwlURVNUQ0xFQVJGTEFHKEFjdGl2ZSwgYWN0aXZlKQogX19QQUdFRkxBRyhTbGFiLCBzbGFiKQogUEFHRUZMQUcoQ2hlY2tlZCwgY2hlY2tlZCkJCS8qIFVzZWQgYnkgc29tZSBmaWxlc3lzdGVtcyAqLwogUEFHRUZMQUcoUGlubmVkLCBwaW5uZWQpIFRFU1RTQ0ZMQUcoUGlubmVkLCBwaW5uZWQpCS8qIFhlbiAqLwpAQCAtMTc2LDYgKzE5NCw3IEBACiBQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQpIF9fQ0xFQVJQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQpCiBQQUdFRkxBRyhQcml2YXRlLCBwcml2YXRlKSBfX0NMRUFSUEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSkKIAlfX1NFVFBBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUpCitQQUdFRkxBRyhTd2FwQmFja2VkLCBzd2FwYmFja2VkKSBfX0NMRUFSUEFHRUZMQUcoU3dhcEJhY2tlZCwgc3dhcGJhY2tlZCkKIAogX19QQUdFRkxBRyhTbG9iUGFnZSwgc2xvYl9wYWdlKQogX19QQUdFRkxBRyhTbG9iRnJlZSwgc2xvYl9mcmVlKQpAQCAtMjExLDYgKzIzMCwyNSBAQAogUEFHRUZMQUdfRkFMU0UoU3dhcENhY2hlKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCitQQUdFRkxBRyhVbmV2aWN0YWJsZSwgdW5ldmljdGFibGUpIF9fQ0xFQVJQQUdFRkxBRyhVbmV2aWN0YWJsZSwgdW5ldmljdGFibGUpCisJVEVTVENMRUFSRkxBRyhVbmV2aWN0YWJsZSwgdW5ldmljdGFibGUpCisKKyNkZWZpbmUgTUxPQ0tfUEFHRVMgMQorUEFHRUZMQUcoTWxvY2tlZCwgbWxvY2tlZCkgX19DTEVBUlBBR0VGTEFHKE1sb2NrZWQsIG1sb2NrZWQpCisJVEVTVFNDRkxBRyhNbG9ja2VkLCBtbG9ja2VkKQorCisjZWxzZQorCisjZGVmaW5lIE1MT0NLX1BBR0VTIDAKK1BBR0VGTEFHX0ZBTFNFKE1sb2NrZWQpCisJU0VUUEFHRUZMQUdfTk9PUChNbG9ja2VkKSBURVNUQ0xFQVJGTEFHX0ZBTFNFKE1sb2NrZWQpCisKK1BBR0VGTEFHX0ZBTFNFKFVuZXZpY3RhYmxlKSBURVNUQ0xFQVJGTEFHX0ZBTFNFKFVuZXZpY3RhYmxlKQorCVNFVFBBR0VGTEFHX05PT1AoVW5ldmljdGFibGUpIENMRUFSUEFHRUZMQUdfTk9PUChVbmV2aWN0YWJsZSkKKwlfX0NMRUFSUEFHRUZMQUdfTk9PUChVbmV2aWN0YWJsZSkKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0lBNjRfVU5DQUNIRURfQUxMT0NBVE9SCiBQQUdFRkxBRyhVbmNhY2hlZCwgdW5jYWNoZWQpCiAjZWxzZQpAQCAtMzI2LDE1ICszNjQsMjUgQEAKIAogI2VuZGlmIC8qICFQQUdFRkxBR1NfRVhURU5ERUQgKi8KIAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKyNkZWZpbmUgX19QR19VTkVWSUNUQUJMRQkoMSA8PCBQR191bmV2aWN0YWJsZSkKKyNkZWZpbmUgX19QR19NTE9DS0VECQkoMSA8PCBQR19tbG9ja2VkKQorI2Vsc2UKKyNkZWZpbmUgX19QR19VTkVWSUNUQUJMRQkwCisjZGVmaW5lIF9fUEdfTUxPQ0tFRAkJMAorI2VuZGlmCisKICNkZWZpbmUgUEFHRV9GTEFHUwkoMSA8PCBQR19scnUgICB8IDEgPDwgUEdfcHJpdmF0ZSAgIHwgMSA8PCBQR19sb2NrZWQgfCBcCiAJCQkgMSA8PCBQR19idWRkeSB8IDEgPDwgUEdfd3JpdGViYWNrIHwgXAotCQkJIDEgPDwgUEdfc2xhYiAgfCAxIDw8IFBHX3N3YXBjYWNoZSB8IDEgPDwgUEdfYWN0aXZlKQorCQkJIDEgPDwgUEdfc2xhYiAgfCAxIDw8IFBHX3N3YXBjYWNoZSB8IDEgPDwgUEdfYWN0aXZlIHwgXAorCQkJIF9fUEdfVU5FVklDVEFCTEUgfCBfX1BHX01MT0NLRUQpCiAKIC8qCiAgKiBGbGFncyBjaGVja2VkIGluIGJhZF9wYWdlKCkuICBQYWdlcyBvbiB0aGUgZnJlZSBsaXN0IHNob3VsZCBub3QgaGF2ZQogICogdGhlc2UgZmxhZ3Mgc2V0LiAgSXQgdGhleSBhcmUsIHRoZXJlIGlzIGEgcHJvYmxlbS4KICAqLwotI2RlZmluZSBQQUdFX0ZMQUdTX0NMRUFSX1dIRU5fQkFEIChQQUdFX0ZMQUdTIHwgMSA8PCBQR19yZWNsYWltIHwgMSA8PCBQR19kaXJ0eSkKKyNkZWZpbmUgUEFHRV9GTEFHU19DTEVBUl9XSEVOX0JBRCAoUEFHRV9GTEFHUyB8IFwKKwkJMSA8PCBQR19yZWNsYWltIHwgMSA8PCBQR19kaXJ0eSB8IDEgPDwgUEdfc3dhcGJhY2tlZCkKIAogLyoKICAqIEZsYWdzIGNoZWNrZWQgd2hlbiBhIHBhZ2UgaXMgZnJlZWQuICBQYWdlcyBiZWluZyBmcmVlZCBzaG91bGQgbm90IGhhdmUKQEAgLTM0Nyw3ICszOTUsOCBAQAogICogUGFnZXMgYmVpbmcgcHJlcHBlZCBzaG91bGQgbm90IGhhdmUgdGhlc2UgZmxhZ3Mgc2V0LiAgSXQgdGhleSBhcmUsIHRoZXJlCiAgKiBpcyBhIHByb2JsZW0uCiAgKi8KLSNkZWZpbmUgUEFHRV9GTEFHU19DSEVDS19BVF9QUkVQIChQQUdFX0ZMQUdTIHwgMSA8PCBQR19yZXNlcnZlZCB8IDEgPDwgUEdfZGlydHkpCisjZGVmaW5lIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUCAoUEFHRV9GTEFHUyB8IFwKKwkJMSA8PCBQR19yZXNlcnZlZCB8IDEgPDwgUEdfZGlydHkgfCAxIDw8IFBHX3N3YXBiYWNrZWQpCiAKICNlbmRpZiAvKiAhX19HRU5FUkFUSU5HX0JPVU5EU19IICovCiAjZW5kaWYJLyogUEFHRV9GTEFHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZkMzlmMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaApAQCAtMCwwICsxLDEwMyBAQAorI2lmbmRlZiBfX0xJTlVYX1BBR0VfQ0dST1VQX0gKKyNkZWZpbmUgX19MSU5VWF9QQUdFX0NHUk9VUF9ICisKKyNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgorI2luY2x1ZGUgPGxpbnV4L2JpdF9zcGlubG9jay5oPgorLyoKKyAqIFBhZ2UgQ2dyb3VwIGNhbiBiZSBjb25zaWRlcmVkIGFzIGFuIGV4dGVuZGVkIG1lbV9tYXAuCisgKiBBIHBhZ2VfY2dyb3VwIHBhZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIGV2ZXJ5IHBhZ2UgZGVzY3JpcHRvci4gVGhlCisgKiBwYWdlX2Nncm91cCBoZWxwcyB1cyBpZGVudGlmeSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2dyb3VwCisgKiBBbGwgcGFnZSBjZ3JvdXBzIGFyZSBhbGxvY2F0ZWQgYXQgYm9vdCBvciBtZW1vcnkgaG90cGx1ZyBldmVudCwKKyAqIHRoZW4gdGhlIHBhZ2UgY2dyb3VwIGZvciBwZm4gYWx3YXlzIGV4aXN0cy4KKyAqLworc3RydWN0IHBhZ2VfY2dyb3VwIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwOworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwkJLyogcGVyIGNncm91cCBMUlUgbGlzdCAqLworfTsKKwordm9pZCBfX2luaXQgcGdkYXRfcGFnZV9jZ3JvdXBfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KTsKK3ZvaWQgX19pbml0IHBhZ2VfY2dyb3VwX2luaXQodm9pZCk7CitzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmxvb2t1cF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKK2VudW0geworCS8qIGZsYWdzIGZvciBtZW1fY2dyb3VwICovCisJUENHX0xPQ0ssICAvKiBwYWdlIGNncm91cCBpcyBsb2NrZWQgKi8KKwlQQ0dfQ0FDSEUsIC8qIGNoYXJnZWQgYXMgY2FjaGUgKi8KKwlQQ0dfVVNFRCwgLyogdGhpcyBvYmplY3QgaXMgaW4gdXNlLiAqLworCS8qIGZsYWdzIGZvciBMUlUgcGxhY2VtZW50ICovCisJUENHX0FDVElWRSwgLyogcGFnZSBpcyBhY3RpdmUgaW4gdGhpcyBjZ3JvdXAgKi8KKwlQQ0dfRklMRSwgLyogcGFnZSBpcyBmaWxlIHN5c3RlbSBiYWNrZWQgKi8KKwlQQ0dfVU5FVklDVEFCTEUsIC8qIHBhZ2UgaXMgdW5ldmljdGFibGVhYmxlICovCit9OworCisjZGVmaW5lIFRFU1RQQ0dGTEFHKHVuYW1lLCBsbmFtZSkJCQlcCitzdGF0aWMgaW5saW5lIGludCBQYWdlQ2dyb3VwIyN1bmFtZShzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQlcCisJeyByZXR1cm4gdGVzdF9iaXQoUENHXyMjbG5hbWUsICZwYy0+ZmxhZ3MpOyB9CisKKyNkZWZpbmUgU0VUUENHRkxBRyh1bmFtZSwgbG5hbWUpCQkJXAorc3RhdGljIGlubGluZSB2b2lkIFNldFBhZ2VDZ3JvdXAjI3VuYW1lKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpXAorCXsgc2V0X2JpdChQQ0dfIyNsbmFtZSwgJnBjLT5mbGFncyk7ICB9CisKKyNkZWZpbmUgQ0xFQVJQQ0dGTEFHKHVuYW1lLCBsbmFtZSkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgQ2xlYXJQYWdlQ2dyb3VwIyN1bmFtZShzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQlcCisJeyBjbGVhcl9iaXQoUENHXyMjbG5hbWUsICZwYy0+ZmxhZ3MpOyAgfQorCisvKiBDYWNoZSBmbGFnIGlzIHNldCBvbmx5IG9uY2UgKGF0IGFsbG9jYXRpb24pICovCitURVNUUENHRkxBRyhDYWNoZSwgQ0FDSEUpCisKK1RFU1RQQ0dGTEFHKFVzZWQsIFVTRUQpCitDTEVBUlBDR0ZMQUcoVXNlZCwgVVNFRCkKKworLyogTFJVIG1hbmFnZW1lbnQgZmxhZ3MgKGZyb20gZ2xvYmFsLWxydSBkZWZpbml0aW9uKSAqLworVEVTVFBDR0ZMQUcoRmlsZSwgRklMRSkKK1NFVFBDR0ZMQUcoRmlsZSwgRklMRSkKK0NMRUFSUENHRkxBRyhGaWxlLCBGSUxFKQorCitURVNUUENHRkxBRyhBY3RpdmUsIEFDVElWRSkKK1NFVFBDR0ZMQUcoQWN0aXZlLCBBQ1RJVkUpCitDTEVBUlBDR0ZMQUcoQWN0aXZlLCBBQ1RJVkUpCisKK1RFU1RQQ0dGTEFHKFVuZXZpY3RhYmxlLCBVTkVWSUNUQUJMRSkKK1NFVFBDR0ZMQUcoVW5ldmljdGFibGUsIFVORVZJQ1RBQkxFKQorQ0xFQVJQQ0dGTEFHKFVuZXZpY3RhYmxlLCBVTkVWSUNUQUJMRSkKKworc3RhdGljIGlubGluZSBpbnQgcGFnZV9jZ3JvdXBfbmlkKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCit7CisJcmV0dXJuIHBhZ2VfdG9fbmlkKHBjLT5wYWdlKTsKK30KKworc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBwYWdlX2Nncm91cF96aWQoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKK3sKKwlyZXR1cm4gcGFnZV96b25lbnVtKHBjLT5wYWdlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvY2tfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKK3sKKwliaXRfc3Bpbl9sb2NrKFBDR19MT0NLLCAmcGMtPmZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdHJ5bG9ja19wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQoreworCXJldHVybiBiaXRfc3Bpbl90cnlsb2NrKFBDR19MT0NLLCAmcGMtPmZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQoreworCWJpdF9zcGluX3VubG9jayhQQ0dfTE9DSywgJnBjLT5mbGFncyk7Cit9CisKKyNlbHNlIC8qIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSICovCitzdHJ1Y3QgcGFnZV9jZ3JvdXA7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RhdF9wYWdlX2Nncm91cF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfY2dyb3VwICpsb29rdXBfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCA1ZGEzMWMxLi43MDk3NDJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtMzIsNiArMzIsMzQgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisjZGVmaW5lIEFTX1VORVZJQ1RBQkxFCShfX0dGUF9CSVRTX1NISUZUICsgMikJLyogZS5nLiwgcmFtZGlzaywgU0hNX0xPQ0sgKi8KKworc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X3VuZXZpY3RhYmxlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQoreworCXNldF9iaXQoQVNfVU5FVklDVEFCTEUsICZtYXBwaW5nLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX2NsZWFyX3VuZXZpY3RhYmxlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQoreworCWNsZWFyX2JpdChBU19VTkVWSUNUQUJMRSwgJm1hcHBpbmctPmZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWFwcGluZ191bmV2aWN0YWJsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwlpZiAobGlrZWx5KG1hcHBpbmcpKQorCQlyZXR1cm4gdGVzdF9iaXQoQVNfVU5FVklDVEFCTEUsICZtYXBwaW5nLT5mbGFncyk7CisJcmV0dXJuICEhbWFwcGluZzsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfdW5ldmljdGFibGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfY2xlYXJfdW5ldmljdGFibGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpIHsgfQorc3RhdGljIGlubGluZSBpbnQgbWFwcGluZ191bmV2aWN0YWJsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIGdmcF90IG1hcHBpbmdfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiBtYXBwaW5nKQogewogCXJldHVybiAoX19mb3JjZSBnZnBfdCltYXBwaW5nLT5mbGFncyAmIF9fR0ZQX0JJVFNfTUFTSzsKQEAgLTI3MSwxOSArMjk5LDE5IEBACiBleHRlcm4gdm9pZCBfX2xvY2tfcGFnZV9ub3N5bmMoc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHZvaWQgdW5sb2NrX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbG9ja2VkKHN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X3BhZ2VfbG9ja2VkKHN0cnVjdCBwYWdlICpwYWdlKQogewotCXNldF9iaXQoUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpOworCV9fc2V0X2JpdChQR19sb2NrZWQsICZwYWdlLT5mbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NsZWFyX3BhZ2VfbG9ja2VkKHN0cnVjdCBwYWdlICpwYWdlKQogewotCWNsZWFyX2JpdChQR19sb2NrZWQsICZwYWdlLT5mbGFncyk7CisJX19jbGVhcl9iaXQoUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCB0cnlsb2NrX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuICF0ZXN0X2FuZF9zZXRfYml0KFBHX2xvY2tlZCwgJnBhZ2UtPmZsYWdzKTsKKwlyZXR1cm4gKGxpa2VseSghdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHX2xvY2tlZCwgJnBhZ2UtPmZsYWdzKSkpOwogfQogCiAvKgpAQCAtNDEwLDE3ICs0MzgsMTcgQEAKIAogLyoKICAqIExpa2UgYWRkX3RvX3BhZ2VfY2FjaGVfbG9ja2VkLCBidXQgdXNlZCB0byBhZGQgbmV3bHkgYWxsb2NhdGVkIHBhZ2VzOgotICogdGhlIHBhZ2UgaXMgbmV3LCBzbyB3ZSBjYW4ganVzdCBydW4gc2V0X3BhZ2VfbG9ja2VkKCkgYWdhaW5zdCBpdC4KKyAqIHRoZSBwYWdlIGlzIG5ldywgc28gd2UgY2FuIGp1c3QgcnVuIF9fc2V0X3BhZ2VfbG9ja2VkKCkgYWdhaW5zdCBpdC4KICAqLwogc3RhdGljIGlubGluZSBpbnQgYWRkX3RvX3BhZ2VfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IG9mZnNldCwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJaW50IGVycm9yOwogCi0Jc2V0X3BhZ2VfbG9ja2VkKHBhZ2UpOworCV9fc2V0X3BhZ2VfbG9ja2VkKHBhZ2UpOwogCWVycm9yID0gYWRkX3RvX3BhZ2VfY2FjaGVfbG9ja2VkKHBhZ2UsIG1hcHBpbmcsIG9mZnNldCwgZ2ZwX21hc2spOwogCWlmICh1bmxpa2VseShlcnJvcikpCi0JCWNsZWFyX3BhZ2VfbG9ja2VkKHBhZ2UpOworCQlfX2NsZWFyX3BhZ2VfbG9ja2VkKHBhZ2UpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdldmVjLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2V2ZWMuaAppbmRleCA4ZWI3ZmE3Li5lOTBhMmNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2V2ZWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2V2ZWMuaApAQCAtMjMsOSArMjMsOSBAQAogdm9pZCBfX3BhZ2V2ZWNfcmVsZWFzZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYyk7CiB2b2lkIF9fcGFnZXZlY19yZWxlYXNlX25vbmxydShzdHJ1Y3QgcGFnZXZlYyAqcHZlYyk7CiB2b2lkIF9fcGFnZXZlY19mcmVlKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKLXZvaWQgX19wYWdldmVjX2xydV9hZGQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwotdm9pZCBfX3BhZ2V2ZWNfbHJ1X2FkZF9hY3RpdmUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwordm9pZCBfX19fcGFnZXZlY19scnVfYWRkKHN0cnVjdCBwYWdldmVjICpwdmVjLCBlbnVtIGxydV9saXN0IGxydSk7CiB2b2lkIHBhZ2V2ZWNfc3RyaXAoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwordm9pZCBwYWdldmVjX3N3YXBfZnJlZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYyk7CiB1bnNpZ25lZCBwYWdldmVjX2xvb2t1cChzdHJ1Y3QgcGFnZXZlYyAqcHZlYywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCXBnb2ZmX3Qgc3RhcnQsIHVuc2lnbmVkIG5yX3BhZ2VzKTsKIHVuc2lnbmVkIHBhZ2V2ZWNfbG9va3VwX3RhZyhzdHJ1Y3QgcGFnZXZlYyAqcHZlYywKQEAgLTgxLDEwICs4MSwzNiBAQAogCQlfX3BhZ2V2ZWNfZnJlZShwdmVjKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHBhZ2V2ZWNfbHJ1X2FkZChzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BhZ2V2ZWNfbHJ1X2FkZF9hbm9uKHN0cnVjdCBwYWdldmVjICpwdmVjKQoreworCV9fX19wYWdldmVjX2xydV9hZGQocHZlYywgTFJVX0lOQUNUSVZFX0FOT04pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19wYWdldmVjX2xydV9hZGRfYWN0aXZlX2Fub24oc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCit7CisJX19fX3BhZ2V2ZWNfbHJ1X2FkZChwdmVjLCBMUlVfQUNUSVZFX0FOT04pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19wYWdldmVjX2xydV9hZGRfZmlsZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlfX19fcGFnZXZlY19scnVfYWRkKHB2ZWMsIExSVV9JTkFDVElWRV9GSUxFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcGFnZXZlY19scnVfYWRkX2FjdGl2ZV9maWxlKHN0cnVjdCBwYWdldmVjICpwdmVjKQoreworCV9fX19wYWdldmVjX2xydV9hZGQocHZlYywgTFJVX0FDVElWRV9GSUxFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhZ2V2ZWNfbHJ1X2FkZF9maWxlKHN0cnVjdCBwYWdldmVjICpwdmVjKQogewogCWlmIChwYWdldmVjX2NvdW50KHB2ZWMpKQotCQlfX3BhZ2V2ZWNfbHJ1X2FkZChwdmVjKTsKKwkJX19wYWdldmVjX2xydV9hZGRfZmlsZShwdmVjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhZ2V2ZWNfbHJ1X2FkZF9hbm9uKHN0cnVjdCBwYWdldmVjICpwdmVjKQoreworCWlmIChwYWdldmVjX2NvdW50KHB2ZWMpKQorCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9hbm9uKHB2ZWMpOwogfQogCiAjZW5kaWYgLyogX0xJTlVYX1BBR0VWRUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYXJwb3J0LmggYi9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaAppbmRleCA2YTBkN2NkLi5lMWY4M2M1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaApAQCAtMSw1ICsxLDMgQEAKLS8qICRJZDogcGFycG9ydC5oLHYgMS4xIDE5OTgvMDUvMTcgMTA6NTc6NTIgYW5kcmVhIEV4cCBhbmRyZWEgJCAqLwotCiAvKgogICogQW55IHBhcnQgb2YgdGhpcyBwcm9ncmFtIG1heSBiZSB1c2VkIGluIGRvY3VtZW50cyBsaWNlbnNlZCB1bmRlcgogICogdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjEgb3IgYW55IGxhdGVyIHZlcnNpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFyc2VyLmggYi9pbmNsdWRlL2xpbnV4L3BhcnNlci5oCmluZGV4IDdkY2QwNTAuLmVhMjI4MWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFyc2VyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYXJzZXIuaApAQCAtMjUsNyArMjUsNyBAQAogCWNoYXIgKnRvOwogfSBzdWJzdHJpbmdfdDsKIAotaW50IG1hdGNoX3Rva2VuKGNoYXIgKiwgbWF0Y2hfdGFibGVfdCB0YWJsZSwgc3Vic3RyaW5nX3QgYXJnc1tdKTsKK2ludCBtYXRjaF90b2tlbihjaGFyICosIGNvbnN0IG1hdGNoX3RhYmxlX3QgdGFibGUsIHN1YnN0cmluZ190IGFyZ3NbXSk7CiBpbnQgbWF0Y2hfaW50KHN1YnN0cmluZ190ICosIGludCAqcmVzdWx0KTsKIGludCBtYXRjaF9vY3RhbChzdWJzdHJpbmdfdCAqLCBpbnQgKnJlc3VsdCk7CiBpbnQgbWF0Y2hfaGV4KHN1YnN0cmluZ190ICosIGludCAqcmVzdWx0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDk4ZGM2MjQuLjdmM2Y2NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtNjMxLDYgKzYzMSw4IEBACiBpbnQgcGNpX3NlbGVjdF9iYXJzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCiAvKiBST00gY29udHJvbCByZWxhdGVkIHJvdXRpbmVzICovCitpbnQgcGNpX2VuYWJsZV9yb20oc3RydWN0IHBjaV9kZXYgKnBkZXYpOwordm9pZCBwY2lfZGlzYWJsZV9yb20oc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogdm9pZCBfX2lvbWVtIF9fbXVzdF9jaGVjayAqcGNpX21hcF9yb20oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCAqc2l6ZSk7CiB2b2lkIHBjaV91bm1hcF9yb20oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgX19pb21lbSAqcm9tKTsKIHNpemVfdCBwY2lfZ2V0X3JvbV9zaXplKHZvaWQgX19pb21lbSAqcm9tLCBzaXplX3Qgc2l6ZSk7CkBAIC03MjMsNyArNzI1LDcgQEAKIH07CiAKIHN0cnVjdCBtc2l4X2VudHJ5IHsKLQl1MTYgCXZlY3RvcjsJLyoga2VybmVsIHVzZXMgdG8gd3JpdGUgYWxsb2NhdGVkIHZlY3RvciAqLworCXUzMgl2ZWN0b3I7CS8qIGtlcm5lbCB1c2VzIHRvIHdyaXRlIGFsbG9jYXRlZCB2ZWN0b3IgKi8KIAl1MTYJZW50cnk7CS8qIGRyaXZlciB1c2VzIHRvIHNwZWNpZnkgZW50cnksIE9TIHdyaXRlcyAqLwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCBmNjNiNTQ1Li44ZWRkZGMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtNTg3LDYgKzU4Nyw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX0cyMDBfUENJCTB4MDUyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwX0FHUAkweDA1MjEKICNkZWZpbmUJUENJX0RFVklDRV9JRF9NQVRST1hfRzQwMAkweDA1MjUKKyNkZWZpbmUJUENJX0RFVklDRV9JRF9NQVRST1hfRzIwMEVWX1BDSQkweDA1MzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfRzU1MAkweDI1MjcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfVklBCTB4NDUzNgogCkBAIC0xNTMzLDcgKzE1MzQsOSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfR1Q2NDI2MAkweDY0MzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMX01WNjQzNjAJMHg2NDYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9NVjY0NDYwCTB4NjQ4MAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfQ0FGRV9TRAkweDQxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMXzg4QUxQMDFfTkFORAkweDQxMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMXzg4QUxQMDFfU0QJMHg0MTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF84OEFMUDAxX0NDSUMJMHg0MTAyCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WMwkJMHgxMWIwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVjNfVjk2MAkJMHgwMDAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bmbi5oIGIvaW5jbHVkZS9saW51eC9wZm4uaAppbmRleCBiYjAxZjhiLi43NjQ2NjM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bmbi5oCisrKyBiL2luY2x1ZGUvbGludXgvcGZuLmgKQEAgLTEsOSArMSwxMyBAQAogI2lmbmRlZiBfTElOVVhfUEZOX0hfCiAjZGVmaW5lIF9MSU5VWF9QRk5fSF8KIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2VuZGlmCisKICNkZWZpbmUgUEZOX0FMSUdOKHgpCSgoKHVuc2lnbmVkIGxvbmcpKHgpICsgKFBBR0VfU0laRSAtIDEpKSAmIFBBR0VfTUFTSykKICNkZWZpbmUgUEZOX1VQKHgpCSgoKHgpICsgUEFHRV9TSVpFLTEpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIFBGTl9ET1dOKHgpCSgoeCkgPj4gUEFHRV9TSElGVCkKLSNkZWZpbmUgUEZOX1BIWVMoeCkJKCh4KSA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQRk5fUEhZUyh4KQkoKHBoeXNfYWRkcl90KSh4KSA8PCBQQUdFX1NISUZUKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlkX25hbWVzcGFjZS5oIGIvaW5jbHVkZS9saW51eC9waWRfbmFtZXNwYWNlLmgKaW5kZXggMWFmODJjNC4uZDgyZmU4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waWRfbmFtZXNwYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9waWRfbmFtZXNwYWNlLmgKQEAgLTg0LDEyICs4NCw2IEBACiAJcmV0dXJuIHRzay0+bnNwcm94eS0+cGlkX25zOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19jaGlsZF9yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JQlVHX09OKHRzayAhPSBjdXJyZW50KTsKLQlyZXR1cm4gdHNrLT5uc3Byb3h5LT5waWRfbnMtPmNoaWxkX3JlYXBlcjsKLX0KLQogdm9pZCBwaWRoYXNoX2luaXQodm9pZCk7CiB2b2lkIHBpZG1hcF9pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAppbmRleCA5NWFjMjFhLi40YjhjYzZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKQEAgLTM3LDYgKzM3LDggQEAKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoY29uc3QgY2hhciAqLCBpbnQgaWQsCiAJCQkJCXN0cnVjdCByZXNvdXJjZSAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKHN0cnVjdCBkZXZpY2UgKiwKKwkJY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZV9hbGxvYyhjb25zdCBjaGFyICpuYW1lLCBpbnQgaWQpOwogZXh0ZXJuIGludCBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgaW50IG51bSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggNGRjY2U1NC4uNDJkZTQwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtNDE5LDcgKzQxOSw3IEBACiAKICNkZWZpbmUgc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGZuLCByZXQpCQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQlfX3N1c3BlbmRfcmVwb3J0X3Jlc3VsdChfX0ZVTkNUSU9OX18sIGZuLCByZXQpOwkJXAorCQlfX3N1c3BlbmRfcmVwb3J0X3Jlc3VsdChfX2Z1bmNfXywgZm4sIHJldCk7CQlcCiAJfSB3aGlsZSAoMCkKIAogI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbnAuaCBiL2luY2x1ZGUvbGludXgvcG5wLmgKaW5kZXggYmU3NjRlNS4uNTNiNzBmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BucC5oCkBAIC0yMiw5ICsyMiwxMSBAQAogICogUmVzb3VyY2UgTWFuYWdlbWVudAogICovCiAjaWZkZWYgQ09ORklHX1BOUAotc3RydWN0IHJlc291cmNlICpwbnBfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbnBfZGV2ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3N0cnVjdCByZXNvdXJjZSAqcG5wX2dldF9yZXNvdXJjZShzdHJ1Y3QgcG5wX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHR5cGUsCisJCQkJdW5zaWduZWQgaW50IG51bSk7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVzb3VyY2UgKnBucF9nZXRfcmVzb3VyY2Uoc3RydWN0IHBucF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBudW0pCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZXNvdXJjZSAqcG5wX2dldF9yZXNvdXJjZShzdHJ1Y3QgcG5wX2RldiAqZGV2LAorCQkJdW5zaWduZWQgbG9uZyB0eXBlLCB1bnNpZ25lZCBpbnQgbnVtKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaCBiL2luY2x1ZGUvbGludXgvcG9zaXgtdGltZXJzLmgKaW5kZXggYTdkZDM4Zi4uYTdjNzIxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oCkBAIC00NSw4ICs0NSw2IEBACiAJaW50IGl0X3JlcXVldWVfcGVuZGluZzsJCS8qIHdhaXRpbmcgdG8gcmVxdWV1ZSB0aGlzIHRpbWVyICovCiAjZGVmaW5lIFJFUVVFVUVfUEVORElORyAxCiAJaW50IGl0X3NpZ2V2X25vdGlmeTsJCS8qIG5vdGlmeSB3b3JkIG9mIHNpZ2V2ZW50IHN0cnVjdCAqLwotCWludCBpdF9zaWdldl9zaWdubzsJCS8qIHNpZ25vIHdvcmQgb2Ygc2lnZXZlbnQgc3RydWN0ICovCi0Jc2lndmFsX3QgaXRfc2lnZXZfdmFsdWU7CS8qIHZhbHVlIHdvcmQgb2Ygc2lnZXZlbnQgc3RydWN0ICovCiAJc3RydWN0IHRhc2tfc3RydWN0ICppdF9wcm9jZXNzOwkvKiBwcm9jZXNzIHRvIHNlbmQgc2lnbmFsIHRvICovCiAJc3RydWN0IHNpZ3F1ZXVlICpzaWdxOwkJLyogc2lnbmFsIHF1ZXVlIGVudHJ5LiAqLwogCXVuaW9uIHsKQEAgLTExNSw0ICsxMTMsNiBAQAogCiBsb25nIGNsb2NrX25hbm9zbGVlcF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0X2Jsb2NrKTsKIAordm9pZCB1cGRhdGVfcmxpbWl0X2NwdSh1bnNpZ25lZCBsb25nIHJsaW1fbmV3KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oIGIvaW5jbHVkZS9saW51eC9wb3dlcl9zdXBwbHkuaAppbmRleCBlYTk2ZWFkLi5mOTM0OGNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmgKQEAgLTE2NSw2ICsxNjUsMTIgQEAKIGV4dGVybiB2b2lkIHBvd2VyX3N1cHBseV9jaGFuZ2VkKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSk7CiBleHRlcm4gaW50IHBvd2VyX3N1cHBseV9hbV9pX3N1cHBsaWVkKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19QT1dFUl9TVVBQTFkpIHx8IGRlZmluZWQoQ09ORklHX1BPV0VSX1NVUFBMWV9NT0RVTEUpCitleHRlcm4gaW50IHBvd2VyX3N1cHBseV9pc19zeXN0ZW1fc3VwcGxpZWQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCh2b2lkKSB7IHJldHVybiAtRU5PU1lTOyB9CisjZW5kaWYKKwogZXh0ZXJuIGludCBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LAogCQkJCSBzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpOwogZXh0ZXJuIHZvaWQgcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKaW5kZXggZmI2MTg1MC4uMjdkNTM0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgKQEAgLTEzOSw3ICsxMzksNiBAQAogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnByb2NfbG9va3VwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfa2NvcmVfb3BlcmF0aW9uczsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBwY19odGFiX29wZXJhdGlvbnM7CiAKIGV4dGVybiBpbnQgcGlkX25zX3ByZXBhcmVfcHJvYyhzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpOwogZXh0ZXJuIHZvaWQgcGlkX25zX3JlbGVhc2VfcHJvYyhzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9maWxlLmggYi9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaAppbmRleCA3ZTcwODcyLi41NzAwNDUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaApAQCAtMzUsNyArMzUsOSBAQAogZXh0ZXJuIGludCBwcm9mX29uIF9fcmVhZF9tb3N0bHk7CiAKIC8qIGluaXQgYmFzaWMga2VybmVsIHByb2ZpbGVyICovCi12b2lkIF9faW5pdCBwcm9maWxlX2luaXQodm9pZCk7CitpbnQgcHJvZmlsZV9pbml0KHZvaWQpOworaW50IHByb2ZpbGVfc2V0dXAoY2hhciAqc3RyKTsKK2ludCBjcmVhdGVfcHJvY19wcm9maWxlKHZvaWQpOwogdm9pZCBwcm9maWxlX3RpY2soaW50IHR5cGUpOwogCiAvKgpAQCAtODQsOSArODYsOSBAQAogCiAjZGVmaW5lIHByb2Zfb24gMAogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJvZmlsZV9pbml0KHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBwcm9maWxlX2luaXQodm9pZCkKIHsKLQlyZXR1cm47CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9maWxlX3RpY2soaW50IHR5cGUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaAppbmRleCBlYTc0MTZjLi4yMjY0MWQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKQEAgLTk0LDcgKzk0LDYgQEAKIGV4dGVybiB2b2lkIF9fcHRyYWNlX2xpbmsoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKIAkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXdfcGFyZW50KTsKIGV4dGVybiB2b2lkIF9fcHRyYWNlX3VubGluayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKLWV4dGVybiB2b2lkIHB0cmFjZV91bnRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwogI2RlZmluZSBQVFJBQ0VfTU9ERV9SRUFEICAgMQogI2RlZmluZSBQVFJBQ0VfTU9ERV9BVFRBQ0ggMgogLyogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBkZW5pYWwuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3RhLmggYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKaW5kZXggMzc2YTA1MC4uNDA0MDFiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9xdW90YS5oCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGEuaApAQCAtMjgsOCArMjgsNiBAQAogICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQogICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCi0gKgotICogVmVyc2lvbjogJElkOiBxdW90YS5oLHYgMi4wIDE5OTYvMTEvMTcgMTY6NDg6MTQgbXZ3IEV4cCBtdncgJAogICovCiAKICNpZm5kZWYgX0xJTlVYX1FVT1RBXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCmluZGV4IGNhNmI5YjUuLmE1NThhNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKQEAgLTMsOSArMyw2IEBACiAgKiBtYWNyb3MgZXhwYW5kIHRvIHRoZSByaWdodCBzb3VyY2UtY29kZS4KICAqCiAgKiBBdXRob3I6ICBNYXJjbyB2YW4gV2llcmluZ2VuIDxtdndAcGxhbmV0cy5lbG0ubmV0PgotICoKLSAqIFZlcnNpb246ICRJZDogcXVvdGFvcHMuaCx2IDEuMiAxOTk4LzAxLzE1IDE2OjIyOjI2IGVjZCBFeHAgJAotICoKICAqLwogI2lmbmRlZiBfTElOVVhfUVVPVEFPUFNfCiAjZGVmaW5lIF9MSU5VWF9RVU9UQU9QU18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9saW5lYXIuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9saW5lYXIuaAppbmRleCA3ZTM3NTExLi5mMzhiOWM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbGluZWFyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL2xpbmVhci5oCkBAIC01LDggKzUsOCBAQAogCiBzdHJ1Y3QgZGV2X2luZm8gewogCW1ka19yZGV2X3QJKnJkZXY7Ci0Jc2VjdG9yX3QJc2l6ZTsKLQlzZWN0b3JfdAlvZmZzZXQ7CisJc2VjdG9yX3QJbnVtX3NlY3RvcnM7CisJc2VjdG9yX3QJc3RhcnRfc2VjdG9yOwogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgZGV2X2luZm8gZGV2X2luZm9fdDsKQEAgLTE1LDkgKzE1LDExIEBACiB7CiAJc3RydWN0IGxpbmVhcl9wcml2YXRlX2RhdGEgKnByZXY7CS8qIGVhcmxpZXIgdmVyc2lvbiAqLwogCWRldl9pbmZvX3QJCSoqaGFzaF90YWJsZTsKLQlzZWN0b3JfdAkJaGFzaF9zcGFjaW5nOworCXNlY3Rvcl90CQlzcGFjaW5nOwogCXNlY3Rvcl90CQlhcnJheV9zZWN0b3JzOwotCWludAkJCXByZXNoaWZ0OyAvKiBzaGlmdCBiZWZvcmUgZGl2aWRpbmcgYnkgaGFzaF9zcGFjaW5nICovCisJaW50CQkJc2VjdG9yX3NoaWZ0OwkvKiBzaGlmdCBiZWZvcmUgZGl2aWRpbmcKKwkJCQkJCSAqIGJ5IHNwYWNpbmcKKwkJCQkJCSAqLwogCWRldl9pbmZvX3QJCWRpc2tzWzBdOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaAppbmRleCBkYzBlM2ZjLi44MmJlYTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaApAQCAtMTksMjcgKzE5LDcgQEAKICNkZWZpbmUgX01EX0gKIAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+Ci0jaW5jbHVkZSA8bGludXgvYmlvLmg+CiAKIC8qCiAgKiAnbWRfcC5oJyBob2xkcyB0aGUgJ3BoeXNpY2FsJyBsYXlvdXQgb2YgUkFJRCBkZXZpY2VzCkBAIC03NCwxOSArNTQsMTcgQEAKIAogZXh0ZXJuIGludCBtZHBfbWFqb3I7CiAKLWV4dGVybiBpbnQgcmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkgKHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgKnApOwotZXh0ZXJuIGludCB1bnJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5IChzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5ICpwKTsKLWV4dGVybiBtZGtfdGhyZWFkX3QgKiBtZF9yZWdpc3Rlcl90aHJlYWQgKHZvaWQgKCpydW4pIChtZGRldl90ICptZGRldiksCitleHRlcm4gaW50IHJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5KHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgKnApOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5KHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgKnApOworZXh0ZXJuIG1ka190aHJlYWRfdCAqIG1kX3JlZ2lzdGVyX3RocmVhZCh2b2lkICgqcnVuKSAobWRkZXZfdCAqbWRkZXYpLAogCQkJCW1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFyICpuYW1lKTsKLWV4dGVybiB2b2lkIG1kX3VucmVnaXN0ZXJfdGhyZWFkIChtZGtfdGhyZWFkX3QgKnRocmVhZCk7CitleHRlcm4gdm9pZCBtZF91bnJlZ2lzdGVyX3RocmVhZChtZGtfdGhyZWFkX3QgKnRocmVhZCk7CiBleHRlcm4gdm9pZCBtZF93YWtldXBfdGhyZWFkKG1ka190aHJlYWRfdCAqdGhyZWFkKTsKIGV4dGVybiB2b2lkIG1kX2NoZWNrX3JlY292ZXJ5KG1kZGV2X3QgKm1kZGV2KTsKIGV4dGVybiB2b2lkIG1kX3dyaXRlX3N0YXJ0KG1kZGV2X3QgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaSk7CiBleHRlcm4gdm9pZCBtZF93cml0ZV9lbmQobWRkZXZfdCAqbWRkZXYpOwotZXh0ZXJuIHZvaWQgbWRfaGFuZGxlX3NhZmVtb2RlKG1kZGV2X3QgKm1kZGV2KTsKIGV4dGVybiB2b2lkIG1kX2RvbmVfc3luYyhtZGRldl90ICptZGRldiwgaW50IGJsb2NrcywgaW50IG9rKTsKLWV4dGVybiB2b2lkIG1kX2Vycm9yIChtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldik7Ci1leHRlcm4gdm9pZCBtZF91bnBsdWdfbWRkZXYobWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIHZvaWQgbWRfZXJyb3IobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYpOwogCiBleHRlcm4gdm9pZCBtZF9zdXBlcl93cml0ZShtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldiwKIAkJCSAgIHNlY3Rvcl90IHNlY3RvciwgaW50IHNpemUsIHN0cnVjdCBwYWdlICpwYWdlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKaW5kZXggMWQ3MTJjNy4uZTM3ZDgwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmgKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAotc3RydWN0IHJlZ3VsYXRvcl9jb25zdHJhaW50czsKIHN0cnVjdCByZWd1bGF0b3JfZGV2Oworc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGE7CiAKIC8qKgogICogc3RydWN0IHJlZ3VsYXRvcl9vcHMgLSByZWd1bGF0b3Igb3BlcmF0aW9ucy4KQEAgLTUxLDcgKzUxLDcgQEAKIAkJCQkJICBpbnQgb3V0cHV0X3VWLCBpbnQgbG9hZF91QSk7CiAKIAkvKiB0aGUgb3BlcmF0aW9ucyBiZWxvdyBhcmUgZm9yIGNvbmZpZ3VyYXRpb24gb2YgcmVndWxhdG9yIHN0YXRlIHdoZW4KLQkgKiBpdCdzIHBhcmVudCBQTUlDIGVudGVycyBhIGdsb2JhbCBTVEFOQlkvSElCRVJOQVRFIHN0YXRlICovCisJICogaXRzIHBhcmVudCBQTUlDIGVudGVycyBhIGdsb2JhbCBTVEFOREJZL0hJQkVSTkFURSBzdGF0ZSAqLwogCiAJLyogc2V0IHJlZ3VsYXRvciBzdXNwZW5kIHZvbHRhZ2UgKi8KIAlpbnQgKCpzZXRfc3VzcGVuZF92b2x0YWdlKSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKiwgaW50IHVWKTsKQEAgLTg1LDE1ICs4NSwxNyBAQAogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwogfTsKIAotCiBzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqcmVndWxhdG9yX2Rlc2MsCi0JCQkJCSAgdm9pZCAqcmVnX2RhdGEpOworCXN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJpdmVyX2RhdGEpOwogdm9pZCByZWd1bGF0b3JfdW5yZWdpc3RlcihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldik7CiAKIGludCByZWd1bGF0b3Jfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpOwogCiB2b2lkICpyZGV2X2dldF9kcnZkYXRhKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KTsKK3N0cnVjdCBkZXZpY2UgKnJkZXZfZ2V0X2RldihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldik7CiBpbnQgcmRldl9nZXRfaWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpOwogCit2b2lkICpyZWd1bGF0b3JfZ2V0X2luaXRfZHJ2ZGF0YShzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqcmVnX2luaXRfZGF0YSk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWFjaGluZS5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWFjaGluZS5oCmluZGV4IDExZTczN2QuLmM2ZDY5MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21hY2hpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmgKQEAgLTg5LDE1ICs4OSwzMyBAQAogCXVuc2lnbmVkIGFwcGx5X3VWOjE7CS8qIGFwcGx5IHVWIGNvbnN0cmFpbnQgaWZmIG1pbiA9PSBtYXggKi8KIH07CiAKLWludCByZWd1bGF0b3Jfc2V0X3N1cHBseShjb25zdCBjaGFyICpyZWd1bGF0b3IsIGNvbnN0IGNoYXIgKnJlZ3VsYXRvcl9zdXBwbHkpOworLyoqCisgKiBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSAtIHN1cHBseSAtPiBkZXZpY2UgbWFwcGluZworICoKKyAqIFRoaXMgbWFwcyBhIHN1cHBseSBuYW1lIHRvIGEgZGV2aWNlLgorICovCitzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB7CisJc3RydWN0IGRldmljZSAqZGV2OwkvKiBjb25zdW1lciAqLworCWNvbnN0IGNoYXIgKnN1cHBseTsJLyogY29uc3VtZXIgc3VwcGx5IC0gZS5nLiAidmNjIiAqLworfTsKIAotY29uc3QgY2hhciAqcmVndWxhdG9yX2dldF9zdXBwbHkoY29uc3QgY2hhciAqcmVndWxhdG9yKTsKKy8qKgorICogc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgLSByZWd1bGF0b3IgcGxhdGZvcm0gaW5pdGlhbGlzYXRpb24gZGF0YS4KKyAqCisgKiBJbml0aWFsaXNhdGlvbiBjb25zdHJhaW50cywgb3VyIHN1cHBseSBhbmQgY29uc3VtZXJzIHN1cHBsaWVzLgorICovCitzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB7CisJc3RydWN0IGRldmljZSAqc3VwcGx5X3JlZ3VsYXRvcl9kZXY7IC8qIG9yIE5VTEwgZm9yIExJTkUgKi8KIAotaW50IHJlZ3VsYXRvcl9zZXRfbWFjaGluZV9jb25zdHJhaW50cyhjb25zdCBjaGFyICpyZWd1bGF0b3IsCi0Jc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgKmNvbnN0cmFpbnRzKTsKKwlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyBjb25zdHJhaW50czsKIAotaW50IHJlZ3VsYXRvcl9zZXRfZGV2aWNlX3N1cHBseShjb25zdCBjaGFyICpyZWd1bGF0b3IsIHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQljb25zdCBjaGFyICpzdXBwbHkpOworCWludCBudW1fY29uc3VtZXJfc3VwcGxpZXM7CisJc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgKmNvbnN1bWVyX3N1cHBsaWVzOworCisJLyogb3B0aW9uYWwgcmVndWxhdG9yIG1hY2hpbmUgc3BlY2lmaWMgaW5pdCAqLworCWludCAoKnJlZ3VsYXRvcl9pbml0KSh2b2lkICpkcml2ZXJfZGF0YSk7CisJdm9pZCAqZHJpdmVyX2RhdGE7CS8qIGNvcmUgZG9lcyBub3QgdG91Y2ggdGhpcyAqLworfTsKIAogaW50IHJlZ3VsYXRvcl9zdXNwZW5kX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCmluZGV4IGU5OTYzYWYuLmJjNTExNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKQEAgLTg3LDcgKzg3LDcgQEAKIGlmKCAhKCBjb25kICkgKSAJCQkJCQkJCVwKICAgcmVpc2VyZnNfcGFuaWMoIE5VTEwsICJyZWlzZXJmc1slaV06IGFzc2VydGlvbiAiIHNjb25kICIgZmFpbGVkIGF0ICIJXAogCQkgIF9fRklMRV9fICI6JWk6JXM6ICIgZm9ybWF0ICJcbiIsCQlcCi0JCSAgaW5faW50ZXJydXB0KCkgPyAtMSA6IHRhc2tfcGlkX25yKGN1cnJlbnQpLCBfX0xJTkVfXyAsIF9fRlVOQ1RJT05fXyAsICMjYXJncyApCisJCSAgaW5faW50ZXJydXB0KCkgPyAtMSA6IHRhc2tfcGlkX25yKGN1cnJlbnQpLCBfX0xJTkVfXyAsIF9fZnVuY19fICwgIyNhcmdzICkKIAogI2RlZmluZSBSQVNTRVJUKGNvbmQsIGZvcm1hdCwgYXJncy4uLikgX19SQVNTRVJUKGNvbmQsICNjb25kLCBmb3JtYXQsICMjYXJncykKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaAppbmRleCBmZWQ2ZjVlLi44OWYwNTY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JtYXAuaApAQCAtMzksMTggKzM5LDYgQEAKIAogI2lmZGVmIENPTkZJR19NTVUKIAotZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICphbm9uX3ZtYV9jYWNoZXA7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFub25fdm1hICphbm9uX3ZtYV9hbGxvYyh2b2lkKQotewotCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGFub25fdm1hX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9mcmVlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCi17Ci0Ja21lbV9jYWNoZV9mcmVlKGFub25fdm1hX2NhY2hlcCwgYW5vbl92bWEpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgYW5vbl92bWFfbG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gdm1hLT5hbm9uX3ZtYTsKQEAgLTc1LDYgKzYzLDkgQEAKIHZvaWQgYW5vbl92bWFfbGluayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiB2b2lkIF9fYW5vbl92bWFfbGluayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiAKK2V4dGVybiBzdHJ1Y3QgYW5vbl92bWEgKnBhZ2VfbG9ja19hbm9uX3ZtYShzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBwYWdlX3VubG9ja19hbm9uX3ZtYShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKTsKKwogLyoKICAqIHJtYXAgaW50ZXJmYWNlcyBjYWxsZWQgd2hlbiBhZGRpbmcgb3IgcmVtb3ZpbmcgcHRlIG9mIHBhZ2UKICAqLwpAQCAtMTE3LDYgKzEwOCwxOSBAQAogICovCiBpbnQgcGFnZV9ta2NsZWFuKHN0cnVjdCBwYWdlICopOwogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorLyoKKyAqIGNhbGxlZCBpbiBtdW5sb2NrKCkvbXVubWFwKCkgcGF0aCB0byBjaGVjayBmb3Igb3RoZXIgdm1hcyBob2xkaW5nCisgKiB0aGUgcGFnZSBtbG9ja2VkLgorICovCitpbnQgdHJ5X3RvX211bmxvY2soc3RydWN0IHBhZ2UgKik7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgdHJ5X3RvX211bmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIDA7CS8qIGEuay5hLiBTV0FQX1NVQ0NFU1MgKi8KK30KKyNlbmRpZgorCiAjZWxzZQkvKiAhQ09ORklHX01NVSAqLwogCiAjZGVmaW5lIGFub25fdm1hX2luaXQoKQkJZG8ge30gd2hpbGUgKDApCkBAIC0xNDAsNSArMTQ0LDYgQEAKICNkZWZpbmUgU1dBUF9TVUNDRVNTCTAKICNkZWZpbmUgU1dBUF9BR0FJTgkxCiAjZGVmaW5lIFNXQVBfRkFJTAkyCisjZGVmaW5lIFNXQVBfTUxPQ0sJMwogCiAjZW5kaWYJLyogX0xJTlVYX1JNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG11dGV4LmggYi9pbmNsdWRlL2xpbnV4L3J0bXV0ZXguaAppbmRleCAzODJiYjc5Li5mMTliMDBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0bXV0ZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0bXV0ZXguaApAQCAtNTQsNyArNTQsNyBAQAogI2lmZGVmIENPTkZJR19ERUJVR19SVF9NVVRFWEVTCiAjIGRlZmluZSBfX0RFQlVHX1JUX01VVEVYX0lOSVRJQUxJWkVSKG11dGV4bmFtZSkgXAogCSwgLm5hbWUgPSAjbXV0ZXhuYW1lLCAuZmlsZSA9IF9fRklMRV9fLCAubGluZSA9IF9fTElORV9fCi0jIGRlZmluZSBydF9tdXRleF9pbml0KG11dGV4KQkJCV9fcnRfbXV0ZXhfaW5pdChtdXRleCwgX19GVU5DVElPTl9fKQorIyBkZWZpbmUgcnRfbXV0ZXhfaW5pdChtdXRleCkJCQlfX3J0X211dGV4X2luaXQobXV0ZXgsIF9fZnVuY19fKQogIGV4dGVybiB2b2lkIHJ0X211dGV4X2RlYnVnX3Rhc2tfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAjZWxzZQogIyBkZWZpbmUgX19ERUJVR19SVF9NVVRFWF9JTklUSUFMSVpFUihtdXRleG5hbWUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggYzIyNmM3Yi4uNWMzOGRiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtNDAzLDEyICs0MDMsMjEgQEAKICNkZWZpbmUgTU1GX0RVTVBfTUFQUEVEX1BSSVZBVEUJNAogI2RlZmluZSBNTUZfRFVNUF9NQVBQRURfU0hBUkVECTUKICNkZWZpbmUgTU1GX0RVTVBfRUxGX0hFQURFUlMJNgorI2RlZmluZSBNTUZfRFVNUF9IVUdFVExCX1BSSVZBVEUgNworI2RlZmluZSBNTUZfRFVNUF9IVUdFVExCX1NIQVJFRCAgOAogI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfU0hJRlQJTU1GX0RVTVBBQkxFX0JJVFMKLSNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX0JJVFMJNQorI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUUwk3CiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9NQVNLIFwKIAkoKCgxIDw8IE1NRl9EVU1QX0ZJTFRFUl9CSVRTKSAtIDEpIDw8IE1NRl9EVU1QX0ZJTFRFUl9TSElGVCkKICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX0RFRkFVTFQgXAotCSgoMSA8PCBNTUZfRFVNUF9BTk9OX1BSSVZBVEUpIHwJKDEgPDwgTU1GX0RVTVBfQU5PTl9TSEFSRUQpKQorCSgoMSA8PCBNTUZfRFVNUF9BTk9OX1BSSVZBVEUpIHwJKDEgPDwgTU1GX0RVTVBfQU5PTl9TSEFSRUQpIHxcCisJICgxIDw8IE1NRl9EVU1QX0hVR0VUTEJfUFJJVkFURSkgfCBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGKQorCisjaWZkZWYgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTCisjIGRlZmluZSBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGCSgxIDw8IE1NRl9EVU1QX0VMRl9IRUFERVJTKQorI2Vsc2UKKyMgZGVmaW5lIE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYJMAorI2VuZGlmCiAKIHN0cnVjdCBzaWdoYW5kX3N0cnVjdCB7CiAJYXRvbWljX3QJCWNvdW50OwpAQCAtNDI1LDYgKzQzNCwzOSBAQAogCXVuc2lnbmVkIGxvbmcJCWFjX21pbmZsdCwgYWNfbWFqZmx0OwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgdGFza19jcHV0aW1lIC0gY29sbGVjdGVkIENQVSB0aW1lIGNvdW50cworICogQHV0aW1lOgkJdGltZSBzcGVudCBpbiB1c2VyIG1vZGUsIGluICZjcHV0aW1lX3QgdW5pdHMKKyAqIEBzdGltZToJCXRpbWUgc3BlbnQgaW4ga2VybmVsIG1vZGUsIGluICZjcHV0aW1lX3QgdW5pdHMKKyAqIEBzdW1fZXhlY19ydW50aW1lOgl0b3RhbCB0aW1lIHNwZW50IG9uIHRoZSBDUFUsIGluIG5hbm9zZWNvbmRzCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgZ3JvdXBzIHRvZ2V0aGVyIHRocmVlIGtpbmRzIG9mIENQVSB0aW1lIHRoYXQgYXJlCisgKiB0cmFja2VkIGZvciB0aHJlYWRzIGFuZCB0aHJlYWQgZ3JvdXBzLiAgTW9zdCB0aGluZ3MgY29uc2lkZXJpbmcKKyAqIENQVSB0aW1lIHdhbnQgdG8gZ3JvdXAgdGhlc2UgY291bnRzIHRvZ2V0aGVyIGFuZCB0cmVhdCBhbGwgdGhyZWUKKyAqIG9mIHRoZW0gaW4gcGFyYWxsZWwuCisgKi8KK3N0cnVjdCB0YXNrX2NwdXRpbWUgeworCWNwdXRpbWVfdCB1dGltZTsKKwljcHV0aW1lX3Qgc3RpbWU7CisJdW5zaWduZWQgbG9uZyBsb25nIHN1bV9leGVjX3J1bnRpbWU7Cit9OworLyogQWx0ZXJuYXRlIGZpZWxkIG5hbWVzIHdoZW4gdXNlZCB0byBjYWNoZSBleHBpcmF0aW9ucy4gKi8KKyNkZWZpbmUgcHJvZl9leHAJc3RpbWUKKyNkZWZpbmUgdmlydF9leHAJdXRpbWUKKyNkZWZpbmUgc2NoZWRfZXhwCXN1bV9leGVjX3J1bnRpbWUKKworLyoqCisgKiBzdHJ1Y3QgdGhyZWFkX2dyb3VwX2NwdXRpbWUgLSB0aHJlYWQgZ3JvdXAgaW50ZXJ2YWwgdGltZXIgY291bnRzCisgKiBAdG90YWxzOgkJdGhyZWFkIGdyb3VwIGludGVydmFsIHRpbWVyczsgc3Vic3RydWN0dXJlIGZvcgorICoJCQl1bmlwcm9jZXNzb3Iga2VybmVsLCBwZXItY3B1IGZvciBTTVAga2VybmVsLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSB2ZXJzaW9uIG9mIHRhc2tfY3B1dGltZSwgYWJvdmUsIHRoYXQgaXMKKyAqIHVzZWQgZm9yIHRocmVhZCBncm91cCBDUFUgY2xvY2sgY2FsY3VsYXRpb25zLgorICovCitzdHJ1Y3QgdGhyZWFkX2dyb3VwX2NwdXRpbWUgeworCXN0cnVjdCB0YXNrX2NwdXRpbWUgKnRvdGFsczsKK307CisKIC8qCiAgKiBOT1RFISAic2lnbmFsX3N0cnVjdCIgZG9lcyBub3QgaGF2ZSBpdCdzIG93bgogICogbG9ja2luZywgYmVjYXVzZSBhIHNoYXJlZCBzaWduYWxfc3RydWN0IGFsd2F5cwpAQCAtNDcwLDYgKzUxMiwxNyBAQAogCWNwdXRpbWVfdCBpdF9wcm9mX2V4cGlyZXMsIGl0X3ZpcnRfZXhwaXJlczsKIAljcHV0aW1lX3QgaXRfcHJvZl9pbmNyLCBpdF92aXJ0X2luY3I7CiAKKwkvKgorCSAqIFRocmVhZCBncm91cCB0b3RhbHMgZm9yIHByb2Nlc3MgQ1BVIGNsb2Nrcy4KKwkgKiBTZWUgdGhyZWFkX2dyb3VwX2NwdXRpbWUoKSwgZXQgYWwsIGZvciBkZXRhaWxzLgorCSAqLworCXN0cnVjdCB0aHJlYWRfZ3JvdXBfY3B1dGltZSBjcHV0aW1lOworCisJLyogRWFybGllc3QtZXhwaXJhdGlvbiBjYWNoZS4gKi8KKwlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWVfZXhwaXJlczsKKworCXN0cnVjdCBsaXN0X2hlYWQgY3B1X3RpbWVyc1szXTsKKwogCS8qIGpvYiBjb250cm9sIElEcyAqLwogCiAJLyoKQEAgLTUwMCw3ICs1NTMsNyBAQAogCSAqIExpdmUgdGhyZWFkcyBtYWludGFpbiB0aGVpciBvd24gY291bnRlcnMgYW5kIGFkZCB0byB0aGVzZQogCSAqIGluIF9fZXhpdF9zaWduYWwsIGV4Y2VwdCBmb3IgdGhlIGdyb3VwIGxlYWRlci4KIAkgKi8KLQljcHV0aW1lX3QgdXRpbWUsIHN0aW1lLCBjdXRpbWUsIGNzdGltZTsKKwljcHV0aW1lX3QgY3V0aW1lLCBjc3RpbWU7CiAJY3B1dGltZV90IGd0aW1lOwogCWNwdXRpbWVfdCBjZ3RpbWU7CiAJdW5zaWduZWQgbG9uZyBudmNzdywgbml2Y3N3LCBjbnZjc3csIGNuaXZjc3c7CkBAIC01MDksMTQgKzU2Miw2IEBACiAJc3RydWN0IHRhc2tfaW9fYWNjb3VudGluZyBpb2FjOwogCiAJLyoKLQkgKiBDdW11bGF0aXZlIG5zIG9mIHNjaGVkdWxlZCBDUFUgdGltZSBmb3IgZGVhZCB0aHJlYWRzIGluIHRoZQotCSAqIGdyb3VwLCBub3QgaW5jbHVkaW5nIGEgem9tYmllIGdyb3VwIGxlYWRlci4gIChUaGlzIG9ubHkgZGlmZmVycwotCSAqIGZyb20gamlmZmllc190b19ucyh1dGltZSArIHN0aW1lKSBpZiBzY2hlZF9jbG9jayB1c2VzIHNvbWV0aGluZwotCSAqIG90aGVyIHRoYW4gamlmZmllcy4pCi0JICovCi0JdW5zaWduZWQgbG9uZyBsb25nIHN1bV9zY2hlZF9ydW50aW1lOwotCi0JLyoKIAkgKiBXZSBkb24ndCBib3RoZXIgdG8gc3luY2hyb25pemUgbW9zdCByZWFkZXJzIG9mIHRoaXMgYXQgYWxsLAogCSAqIGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhZGVyIGNoZWNraW5nIGEgbGltaXQgdGhhdCBhY3R1YWxseSBuZWVkcwogCSAqIHRvIGdldCBib3RoIHJsaW1fY3VyIGFuZCBybGltX21heCBhdG9taWNhbGx5LCBhbmQgZWl0aGVyIG9uZQpAQCAtNTI3LDggKzU3Miw2IEBACiAJICovCiAJc3RydWN0IHJsaW1pdCBybGltW1JMSU1fTkxJTUlUU107CiAKLQlzdHJ1Y3QgbGlzdF9oZWFkIGNwdV90aW1lcnNbM107Ci0KIAkvKiBrZWVwIHRoZSBwcm9jZXNzLXNoYXJlZCBrZXlyaW5ncyBoZXJlIHNvIHRoYXQgdGhleSBkbyB0aGUgcmlnaHQKIAkgKiB0aGluZyBpbiB0aHJlYWRzIGNyZWF0ZWQgd2l0aCBDTE9ORV9USFJFQUQgKi8KICNpZmRlZiBDT05GSUdfS0VZUwpAQCAtMTEzNyw4ICsxMTgwLDcgQEAKIC8qIG1tIGZhdWx0IGFuZCBzd2FwIGluZm86IHRoaXMgY2FuIGFyZ3VhYmx5IGJlIHNlZW4gYXMgZWl0aGVyIG1tLXNwZWNpZmljIG9yIHRocmVhZC1zcGVjaWZpYyAqLwogCXVuc2lnbmVkIGxvbmcgbWluX2ZsdCwgbWFqX2ZsdDsKIAotICAJY3B1dGltZV90IGl0X3Byb2ZfZXhwaXJlcywgaXRfdmlydF9leHBpcmVzOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBpdF9zY2hlZF9leHBpcmVzOworCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZV9leHBpcmVzOwogCXN0cnVjdCBsaXN0X2hlYWQgY3B1X3RpbWVyc1szXTsKIAogLyogcHJvY2VzcyBjcmVkZW50aWFscyAqLwpAQCAtMTU4OCw2ICsxNjMwLDcgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZwogdGFza19zY2hlZF9ydW50aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHRocmVhZF9ncm91cF9zY2hlZF9ydW50aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAKIC8qIHNjaGVkX2V4ZWMgaXMgY2FsbGVkIGJ5IHByb2Nlc3NlcyBwZXJmb3JtaW5nIGFuIGV4ZWMgKi8KICNpZmRlZiBDT05GSUdfU01QCkBAIC0yMDg1LDYgKzIxMjgsMzAgQEAKIH0KIAogLyoKKyAqIFRocmVhZCBncm91cCBDUFUgdGltZSBhY2NvdW50aW5nLgorICovCisKK2V4dGVybiBpbnQgdGhyZWFkX2dyb3VwX2NwdXRpbWVfYWxsb2Moc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgdGhyZWFkX2dyb3VwX2NwdXRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCB0YXNrX2NwdXRpbWUgKik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aHJlYWRfZ3JvdXBfY3B1dGltZV9pbml0KHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpCit7CisJc2lnLT5jcHV0aW1lLnRvdGFscyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRocmVhZF9ncm91cF9jcHV0aW1lX2Nsb25lX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpCit7CisJaWYgKGN1cnItPnNpZ25hbC0+Y3B1dGltZS50b3RhbHMpCisJCXJldHVybiAwOworCXJldHVybiB0aHJlYWRfZ3JvdXBfY3B1dGltZV9hbGxvYyhjdXJyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRocmVhZF9ncm91cF9jcHV0aW1lX2ZyZWUoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZykKK3sKKwlmcmVlX3BlcmNwdShzaWctPmNwdXRpbWUudG90YWxzKTsKK30KKworLyoKICAqIFJlZXZhbHVhdGUgd2hldGhlciB0aGUgdGFzayBoYXMgc2lnbmFscyBwZW5kaW5nIGRlbGl2ZXJ5LgogICogV2FrZSB0aGUgdGFzayBpZiBzby4KICAqIFRoaXMgaXMgcmVxdWlyZWQgZXZlcnkgdGltZSB0aGUgYmxvY2tlZCBzaWdzZXRfdCBjaGFuZ2VzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oIGIvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCmluZGV4IGExNzgzYjIuLmRjNTBiY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmgKQEAgLTYwLDYgKzYwLDE5IEBACiAJcmV0dXJuIHNlcV9iaXRtYXAobSwgbWFzay0+Yml0cywgTUFYX05VTU5PREVTKTsKIH0KIAoraW50IHNlcV9iaXRtYXBfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGxvbmcgKmJpdHMsCisJCXVuc2lnbmVkIGludCBucl9iaXRzKTsKKworc3RhdGljIGlubGluZSBpbnQgc2VxX2NwdW1hc2tfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNwdW1hc2tfdCAqbWFzaykKK3sKKwlyZXR1cm4gc2VxX2JpdG1hcF9saXN0KG0sIG1hc2stPmJpdHMsIE5SX0NQVVMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZXFfbm9kZW1hc2tfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIG5vZGVtYXNrX3QgKm1hc2spCit7CisJcmV0dXJuIHNlcV9iaXRtYXBfbGlzdChtLCBtYXNrLT5iaXRzLCBNQVhfTlVNTk9ERVMpOworfQorCiBpbnQgc2luZ2xlX29wZW4oc3RydWN0IGZpbGUgKiwgaW50ICgqKShzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKSwgdm9pZCAqKTsKIGludCBzaW5nbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiB2b2lkICpfX3NlcV9vcGVuX3ByaXZhdGUoc3RydWN0IGZpbGUgKiwgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zICosIGludCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaCBiL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZTIxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaApAQCAtMCwwICsxLDkxIEBACisjaWZuZGVmIF9fU0hfSU5UQ19ICisjZGVmaW5lIF9fU0hfSU5UQ19ICisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBpbnRjX2VudW07CisKK3N0cnVjdCBpbnRjX3ZlY3QgeworCWludGNfZW51bSBlbnVtX2lkOworCXVuc2lnbmVkIHNob3J0IHZlY3Q7Cit9OworCisjZGVmaW5lIElOVENfVkVDVChlbnVtX2lkLCB2ZWN0KSB7IGVudW1faWQsIHZlY3QgfQorI2RlZmluZSBJTlRDX0lSUShlbnVtX2lkLCBpcnEpIElOVENfVkVDVChlbnVtX2lkLCBpcnEyZXZ0KGlycSkpCisKK3N0cnVjdCBpbnRjX2dyb3VwIHsKKwlpbnRjX2VudW0gZW51bV9pZDsKKwlpbnRjX2VudW0gZW51bV9pZHNbMzJdOworfTsKKworI2RlZmluZSBJTlRDX0dST1VQKGVudW1faWQsIGlkcy4uLikgeyBlbnVtX2lkLCB7IGlkcyB9IH0KKworc3RydWN0IGludGNfbWFza19yZWcgeworCXVuc2lnbmVkIGxvbmcgc2V0X3JlZywgY2xyX3JlZywgcmVnX3dpZHRoOworCWludGNfZW51bSBlbnVtX2lkc1szMl07CisjaWZkZWYgQ09ORklHX1NNUAorCXVuc2lnbmVkIGxvbmcgc21wOworI2VuZGlmCit9OworCitzdHJ1Y3QgaW50Y19wcmlvX3JlZyB7CisJdW5zaWduZWQgbG9uZyBzZXRfcmVnLCBjbHJfcmVnLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoOworCWludGNfZW51bSBlbnVtX2lkc1sxNl07CisjaWZkZWYgQ09ORklHX1NNUAorCXVuc2lnbmVkIGxvbmcgc21wOworI2VuZGlmCit9OworCitzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgeworCXVuc2lnbmVkIGxvbmcgcmVnLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoOworCWludGNfZW51bSBlbnVtX2lkc1sxNl07Cit9OworCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBJTlRDX1NNUChzdHJpZGUsIG5yKSAuc21wID0gKHN0cmlkZSkgfCAoKG5yKSA8PCA4KQorI2Vsc2UKKyNkZWZpbmUgSU5UQ19TTVAoc3RyaWRlLCBucikKKyNlbmRpZgorCitzdHJ1Y3QgaW50Y19kZXNjIHsKKwlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0b3JzOworCXVuc2lnbmVkIGludCBucl92ZWN0b3JzOworCXN0cnVjdCBpbnRjX2dyb3VwICpncm91cHM7CisJdW5zaWduZWQgaW50IG5yX2dyb3VwczsKKwlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqbWFza19yZWdzOworCXVuc2lnbmVkIGludCBucl9tYXNrX3JlZ3M7CisJc3RydWN0IGludGNfcHJpb19yZWcgKnByaW9fcmVnczsKKwl1bnNpZ25lZCBpbnQgbnJfcHJpb19yZWdzOworCXN0cnVjdCBpbnRjX3NlbnNlX3JlZyAqc2Vuc2VfcmVnczsKKwl1bnNpZ25lZCBpbnQgbnJfc2Vuc2VfcmVnczsKKwljaGFyICpuYW1lOworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQorCXN0cnVjdCBpbnRjX21hc2tfcmVnICphY2tfcmVnczsKKwl1bnNpZ25lZCBpbnQgbnJfYWNrX3JlZ3M7CisjZW5kaWYKK307CisKKyNkZWZpbmUgX0lOVENfQVJSQVkoYSkgYSwgc2l6ZW9mKGEpL3NpemVvZigqYSkKKyNkZWZpbmUgREVDTEFSRV9JTlRDX0RFU0Moc3ltYm9sLCBjaGlwbmFtZSwgdmVjdG9ycywgZ3JvdXBzLAkJXAorCW1hc2tfcmVncywgcHJpb19yZWdzLCBzZW5zZV9yZWdzKQkJCQlcCitzdHJ1Y3QgaW50Y19kZXNjIHN5bWJvbCBfX2luaXRkYXRhID0gewkJCQkJXAorCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAkJCVwKKwlfSU5UQ19BUlJBWShtYXNrX3JlZ3MpLCBfSU5UQ19BUlJBWShwcmlvX3JlZ3MpLAkJCVwKKwlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwJCQkJCVwKKwljaGlwbmFtZSwJCQkJCQkJXAorfQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisjZGVmaW5lIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhzeW1ib2wsIGNoaXBuYW1lLCB2ZWN0b3JzLCBncm91cHMsCVwKKwltYXNrX3JlZ3MsIHByaW9fcmVncywgc2Vuc2VfcmVncywgYWNrX3JlZ3MpCQkJXAorc3RydWN0IGludGNfZGVzYyBzeW1ib2wgX19pbml0ZGF0YSA9IHsJCQkJCVwKKwlfSU5UQ19BUlJBWSh2ZWN0b3JzKSwgX0lOVENfQVJSQVkoZ3JvdXBzKSwJCQlcCisJX0lOVENfQVJSQVkobWFza19yZWdzKSwgX0lOVENfQVJSQVkocHJpb19yZWdzKSwJCQlcCisJX0lOVENfQVJSQVkoc2Vuc2VfcmVncyksCQkJCQlcCisJY2hpcG5hbWUsCQkJCQkJCVwKKwlfSU5UQ19BUlJBWShhY2tfcmVncyksCQkJCQkJXAorfQorI2VuZGlmCisKK3ZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKTsKK2ludCBpbnRjX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpbyk7CisKKyNlbmRpZiAvKiBfX1NIX0lOVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXAuaCBiL2luY2x1ZGUvbGludXgvc21wLmgKaW5kZXggNjY0ODRkNC4uMmU0ZDU4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtcC5oCkBAIC03LDYgKzcsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KIApAQCAtMTYsNyArMTcsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAl2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pOwogCXZvaWQgKmluZm87Ci0JdW5zaWduZWQgaW50IGZsYWdzOworCXUxNiBmbGFnczsKKwl1MTYgcHJpdjsKIH07CiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9vcmlvbl9zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpL29yaW9uX3NwaS5oCmluZGV4IGI0ZDlmYTYuLmRlY2Y2ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL29yaW9uX3NwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL29yaW9uX3NwaS5oCkBAIC0xMSw2ICsxMSw3IEBACiAKIHN0cnVjdCBvcmlvbl9zcGlfaW5mbyB7CiAJdTMyCXRjbGs7CQkvKiBubyA8bGludXgvY2xrLmg+IHN1cHBvcnQgeWV0ICovCisJdTMyCWVuYWJsZV9jbG9ja19maXg7CiB9OwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaAppbmRleCBlNWJmZTAxLi42ZjBlZTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oCkBAIC0xMDQsNiArMTA0LDcgQEAKIAljb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgKnRpbWVvdXQ7CiAJY2hhcgkJCSpzZXJ2ZXJuYW1lOwogCXN0cnVjdCBycGNfcHJvZ3JhbQkqcHJvZ3JhbTsKKwl1MzIJCQlwcm9nbnVtYmVyOwkvKiBvdmVycmlkZXMgcHJvZ3JhbS0+bnVtYmVyICovCiAJdTMyCQkJdmVyc2lvbjsKIAlycGNfYXV0aGZsYXZvcl90CWF1dGhmbGF2b3I7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CkBAIC0xMjQsMTAgKzEyNSwxMCBAQAogdm9pZAkJcnBjX3NodXRkb3duX2NsaWVudChzdHJ1Y3QgcnBjX2NsbnQgKik7CiB2b2lkCQlycGNfcmVsZWFzZV9jbGllbnQoc3RydWN0IHJwY19jbG50ICopOwogCi1pbnQJCXJwY2JfcmVnaXN0ZXIodTMyLCB1MzIsIGludCwgdW5zaWduZWQgc2hvcnQsIGludCAqKTsKK2ludAkJcnBjYl9yZWdpc3Rlcih1MzIsIHUzMiwgaW50LCB1bnNpZ25lZCBzaG9ydCk7CiBpbnQJCXJwY2JfdjRfcmVnaXN0ZXIoY29uc3QgdTMyIHByb2dyYW0sIGNvbnN0IHUzMiB2ZXJzaW9uLAogCQkJCSBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsCi0JCQkJIGNvbnN0IGNoYXIgKm5ldGlkLCBpbnQgKnJlc3VsdCk7CisJCQkJIGNvbnN0IGNoYXIgKm5ldGlkKTsKIGludAkJcnBjYl9nZXRwb3J0X3N5bmMoc3RydWN0IHNvY2thZGRyX2luICosIHUzMiwgdTMyLCBpbnQpOwogdm9pZAkJcnBjYl9nZXRwb3J0X2FzeW5jKHN0cnVjdCBycGNfdGFzayAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaAppbmRleCBkYzY5MDY4Li4zYWZlN2ZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaApAQCAtNjYsNiArNjYsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJc3ZfdGVtcHNvY2tzOwkvKiBhbGwgdGVtcG9yYXJ5IHNvY2tldHMgKi8KIAlpbnQJCQlzdl90bXBjbnQ7CS8qIGNvdW50IG9mIHRlbXBvcmFyeSBzb2NrZXRzICovCiAJc3RydWN0IHRpbWVyX2xpc3QJc3ZfdGVtcHRpbWVyOwkvKiB0aW1lciBmb3IgYWdpbmcgdGVtcG9yYXJ5IHNvY2tldHMgKi8KKwlzYV9mYW1pbHlfdAkJc3ZfZmFtaWx5OwkvKiBsaXN0ZW5lcidzIGFkZHJlc3MgZmFtaWx5ICovCiAKIAljaGFyICoJCQlzdl9uYW1lOwkvKiBzZXJ2aWNlIG5hbWUgKi8KIApAQCAtMjY1LDE3ICsyNjYsMTcgQEAKIC8qCiAgKiBSaWdvcm91cyB0eXBlIGNoZWNraW5nIG9uIHNvY2thZGRyIHR5cGUgY29udmVyc2lvbnMKICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnN2Y19hZGRyX2luKHN0cnVjdCBzdmNfcnFzdCAqcnFzdCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2thZGRyX2luICpzdmNfYWRkcl9pbihjb25zdCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3QpCiB7CiAJcmV0dXJuIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJnJxc3QtPnJxX2FkZHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2thZGRyX2luNiAqc3ZjX2FkZHJfaW42KHN0cnVjdCBzdmNfcnFzdCAqcnFzdCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2thZGRyX2luNiAqc3ZjX2FkZHJfaW42KGNvbnN0IHN0cnVjdCBzdmNfcnFzdCAqcnFzdCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgJnJxc3QtPnJxX2FkZHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2thZGRyICpzdmNfYWRkcihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3QpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrYWRkciAqc3ZjX2FkZHIoY29uc3Qgc3RydWN0IHN2Y19ycXN0ICpycXN0KQogewogCXJldHVybiAoc3RydWN0IHNvY2thZGRyICopICZycXN0LT5ycV9hZGRyOwogfQpAQCAtMzgxLDE4ICszODIsMjAgQEAKIC8qCiAgKiBGdW5jdGlvbiBwcm90b3R5cGVzLgogICovCi1zdHJ1Y3Qgc3ZjX3NlcnYgKiAgc3ZjX2NyZWF0ZShzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiwgdW5zaWduZWQgaW50LAotCQkJICAgICAgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYqKSk7CitzdHJ1Y3Qgc3ZjX3NlcnYgKnN2Y19jcmVhdGUoc3RydWN0IHN2Y19wcm9ncmFtICosIHVuc2lnbmVkIGludCwgc2FfZmFtaWx5X3QsCisJCQkgICAgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKikpOwogc3RydWN0IHN2Y19ycXN0ICpzdmNfcHJlcGFyZV90aHJlYWQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LAogCQkJCQlzdHJ1Y3Qgc3ZjX3Bvb2wgKnBvb2wpOwogdm9pZAkJICAgc3ZjX2V4aXRfdGhyZWFkKHN0cnVjdCBzdmNfcnFzdCAqKTsKIHN0cnVjdCBzdmNfc2VydiAqICBzdmNfY3JlYXRlX3Bvb2xlZChzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiwgdW5zaWduZWQgaW50LAotCQkJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYqKSwgc3ZjX3RocmVhZF9mbiwKLQkJCXN0cnVjdCBtb2R1bGUgKik7CisJCQlzYV9mYW1pbHlfdCwgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKiksCisJCQlzdmNfdGhyZWFkX2ZuLCBzdHJ1Y3QgbW9kdWxlICopOwogaW50CQkgICBzdmNfc2V0X251bV90aHJlYWRzKHN0cnVjdCBzdmNfc2VydiAqLCBzdHJ1Y3Qgc3ZjX3Bvb2wgKiwgaW50KTsKIHZvaWQJCSAgIHN2Y19kZXN0cm95KHN0cnVjdCBzdmNfc2VydiAqKTsKIGludAkJICAgc3ZjX3Byb2Nlc3Moc3RydWN0IHN2Y19ycXN0ICopOwotaW50CQkgICBzdmNfcmVnaXN0ZXIoc3RydWN0IHN2Y19zZXJ2ICosIGludCwgdW5zaWduZWQgc2hvcnQpOworaW50CQkgICBzdmNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN2Y19zZXJ2ICosIGNvbnN0IHVuc2lnbmVkIHNob3J0LAorCQkJCWNvbnN0IHVuc2lnbmVkIHNob3J0KTsKKwogdm9pZAkJICAgc3ZjX3dha2VfdXAoc3RydWN0IHN2Y19zZXJ2ICopOwogdm9pZAkJICAgc3ZjX3Jlc2VydmUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgaW50IHNwYWNlKTsKIHN0cnVjdCBzdmNfcG9vbCAqICBzdmNfcG9vbF9mb3JfY3B1KHN0cnVjdCBzdmNfc2VydiAqc2VydiwgaW50IGNwdSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfcmRtYS5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3JkbWEuaAppbmRleCBkYzA1YjU0Li5jMTRmZTg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfcmRtYS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y19yZG1hLmgKQEAgLTcyLDYgKzcyLDcgQEAKICAqLwogc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgewogCXN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpyZWFkX2hkcjsKKwlzdHJ1Y3Qgc3ZjX3JkbWFfZmFzdHJlZ19tciAqZnJtcjsKIAlpbnQgaGRyX2NvdW50OwogCXN0cnVjdCB4ZHJfYnVmIGFyZzsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGR0b19xOwpAQCAtMTAzLDE2ICsxMDQsMzAgQEAKIAlpbnQgc3RhcnQ7CQkvKiBzZ2Ugbm8gZm9yIHRoaXMgY2h1bmsgKi8KIAlpbnQgY291bnQ7CQkvKiBzZ2UgY291bnQgZm9yIHRoaXMgY2h1bmsgKi8KIH07CitzdHJ1Y3Qgc3ZjX3JkbWFfZmFzdHJlZ19tciB7CisJc3RydWN0IGliX21yICptcjsKKwl2b2lkICprdmE7CisJc3RydWN0IGliX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqcGFnZV9saXN0OworCWludCBwYWdlX2xpc3RfbGVuOworCXVuc2lnbmVkIGxvbmcgYWNjZXNzX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgbWFwX2xlbjsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb247CisJc3RydWN0IGxpc3RfaGVhZCBmcm1yX2xpc3Q7Cit9Owogc3RydWN0IHN2Y19yZG1hX3JlcV9tYXAgeworCXN0cnVjdCBzdmNfcmRtYV9mYXN0cmVnX21yICpmcm1yOwogCXVuc2lnbmVkIGxvbmcgY291bnQ7CiAJdW5pb24gewogCQlzdHJ1Y3Qga3ZlYyBzZ2VbUlBDU1ZDX01BWFBBR0VTXTsKIAkJc3RydWN0IHN2Y19yZG1hX2NodW5rX3NnZSBjaFtSUENTVkNfTUFYUEFHRVNdOwogCX07CiB9OwotCisjZGVmaW5lIFJETUFDVFhUX0ZfRkFTVF9VTlJFRwkxCiAjZGVmaW5lIFJETUFDVFhUX0ZfTEFTVF9DVFhUCTIKIAorI2RlZmluZQlTVkNSRE1BX0RFVkNBUF9GQVNUX1JFRwkJMQkvKiBmYXN0IG1yIHJlZ2lzdHJhdGlvbiAqLworI2RlZmluZQlTVkNSRE1BX0RFVkNBUF9SRUFEX1dfSU5WCTIJLyogcmVhZCB3LyBpbnZhbGlkYXRlICovCisKIHN0cnVjdCBzdmN4cHJ0X3JkbWEgewogCXN0cnVjdCBzdmNfeHBydCAgICAgIHNjX3hwcnQ7CQkvKiBTVkMgdHJhbnNwb3J0IHN0cnVjdHVyZSAqLwogCXN0cnVjdCByZG1hX2NtX2lkICAgICpzY19jbV9pZDsJCS8qIFJETUEgY29ubmVjdGlvbiBpZCAqLwpAQCAtMTM2LDYgKzE1MSwxMSBAQAogCXN0cnVjdCBpYl9jcSAgICAgICAgICpzY19ycV9jcTsKIAlzdHJ1Y3QgaWJfY3EgICAgICAgICAqc2Nfc3FfY3E7CiAJc3RydWN0IGliX21yICAgICAgICAgKnNjX3BoeXNfbXI7CS8qIE1SIGZvciBzZXJ2ZXIgbWVtb3J5ICovCisJdTMyCQkgICAgIHNjX2Rldl9jYXBzOwkvKiBkaXN0aWxsZWQgZGV2aWNlIGNhcHMgKi8KKwl1MzIJCSAgICAgc2NfZG1hX2xrZXk7CS8qIGxvY2FsIGRtYSBrZXkgKi8KKwl1bnNpZ25lZCBpbnQJICAgICBzY19mcm1yX3BnX2xpc3RfbGVuOworCXN0cnVjdCBsaXN0X2hlYWQgICAgIHNjX2ZybXJfcTsKKwlzcGlubG9ja190CSAgICAgc2NfZnJtcl9xX2xvY2s7CiAKIAlzcGlubG9ja190CSAgICAgc2NfbG9jazsJCS8qIHRyYW5zcG9ydCBsb2NrICovCiAKQEAgLTE5Miw4ICsyMTIsMTMgQEAKIGV4dGVybiBpbnQgc3ZjX3JkbWFfY3JlYXRlX2xpc3RlbihzdHJ1Y3Qgc3ZjX3NlcnYgKiwgaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKik7CiBleHRlcm4gc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKnN2Y19yZG1hX2dldF9jb250ZXh0KHN0cnVjdCBzdmN4cHJ0X3JkbWEgKik7CiBleHRlcm4gdm9pZCBzdmNfcmRtYV9wdXRfY29udGV4dChzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgc3ZjX3JkbWFfdW5tYXBfZG1hKHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpjdHh0KTsKIGV4dGVybiBzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqc3ZjX3JkbWFfZ2V0X3JlcV9tYXAodm9pZCk7CiBleHRlcm4gdm9pZCBzdmNfcmRtYV9wdXRfcmVxX21hcChzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqKTsKK2V4dGVybiBpbnQgc3ZjX3JkbWFfZmFzdHJlZyhzdHJ1Y3Qgc3ZjeHBydF9yZG1hICosIHN0cnVjdCBzdmNfcmRtYV9mYXN0cmVnX21yICopOworZXh0ZXJuIHN0cnVjdCBzdmNfcmRtYV9mYXN0cmVnX21yICpzdmNfcmRtYV9nZXRfZnJtcihzdHJ1Y3Qgc3ZjeHBydF9yZG1hICopOworZXh0ZXJuIHZvaWQgc3ZjX3JkbWFfcHV0X2ZybXIoc3RydWN0IHN2Y3hwcnRfcmRtYSAqLAorCQkJICAgICAgc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKik7CiBleHRlcm4gdm9pZCBzdmNfc3FfcmVhcChzdHJ1Y3Qgc3ZjeHBydF9yZG1hICopOwogZXh0ZXJuIHZvaWQgc3ZjX3JxX3JlYXAoc3RydWN0IHN2Y3hwcnRfcmRtYSAqKTsKIGV4dGVybiBzdHJ1Y3Qgc3ZjX3hwcnRfY2xhc3Mgc3ZjX3JkbWFfY2xhc3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgKaW5kZXggOGNmZjY5Ni4uNDgzZTEwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaApAQCAtMzksMTAgKzM5LDcgQEAKIHZvaWQJCXN2Y19kcm9wKHN0cnVjdCBzdmNfcnFzdCAqKTsKIHZvaWQJCXN2Y19zb2NrX3VwZGF0ZV9idWZzKHN0cnVjdCBzdmNfc2VydiAqc2Vydik7CiBpbnQJCXN2Y19zb2NrX25hbWVzKGNoYXIgKmJ1Ziwgc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjaGFyICp0b2Nsb3NlKTsKLWludAkJc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LAotCQkJICAgIGludCBmZCwKLQkJCSAgICBjaGFyICpuYW1lX3JldHVybiwKLQkJCSAgICBpbnQgKnByb3RvKTsKK2ludAkJc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBpbnQgZmQsIGNoYXIgKm5hbWVfcmV0dXJuKTsKIHZvaWQJCXN2Y19pbml0X3hwcnRfc29jayh2b2lkKTsKIHZvaWQJCXN2Y19jbGVhbnVwX3hwcnRfc29jayh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHJkbWEuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnRyZG1hLmgKaW5kZXggNGRlNTZiMS4uNTRhMzc5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHJkbWEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0cmRtYS5oCkBAIC02Niw5ICs2Niw2IEBACiAKICNkZWZpbmUgUlBDUkRNQV9JTkxJTkVfUEFEX1RIUkVTSCAgKDUxMikvKiBwYXlsb2FkIHRocmVzaG9sZCB0byBwYWQgKGJ5dGVzKSAqLwogCi0jZGVmaW5lIFJETUFfUkVTT0xWRV9USU1FT1VUCSg1KkhaKQkvKiBUQkQgNSBzZWNvbmRzICovCi0jZGVmaW5lIFJETUFfQ09OTkVDVF9SRVRSWV9NQVgJKDIpCS8qIHJldHJpZXMgaWYgbm8gbGlzdGVuZXIgYmFja2xvZyAqLwotCiAvKiBtZW1vcnkgcmVnaXN0cmF0aW9uIHN0cmF0ZWdpZXMgKi8KICNkZWZpbmUgUlBDUkRNQV9QRVJTSVNURU5UX1JFR0lTVFJBVElPTiAoMSkKIApAQCAtNzgsNiArNzUsNyBAQAogCVJQQ1JETUFfTUVNV0lORE9XUywKIAlSUENSRE1BX01FTVdJTkRPV1NfQVNZTkMsCiAJUlBDUkRNQV9NVEhDQUZNUiwKKwlSUENSRE1BX0ZSTVIsCiAJUlBDUkRNQV9BTExQSFlTSUNBTCwKIAlSUENSRE1BX0xBU1QKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YWIuaCBiL2luY2x1ZGUvbGludXgvc3dhYi5oCmluZGV4IDI3MGQ1YzIuLmJiZWQyNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dhYi5oCkBAIC00Nyw4ICs0Nyw2IEBACiB7CiAjaWZkZWYgX19hcmNoX3N3YWIxNgogCXJldHVybiBfX2FyY2hfc3dhYjE2KHZhbCk7Ci0jZWxpZiBkZWZpbmVkKF9fYXJjaF9zd2FiMTZwKQotCXJldHVybiBfX2FyY2hfc3dhYjE2cCgmdmFsKTsKICNlbHNlCiAJcmV0dXJuIF9fY29uc3Rfc3dhYjE2KHZhbCk7CiAjZW5kaWYKQEAgLTU4LDggKzU2LDYgQEAKIHsKICNpZmRlZiBfX2FyY2hfc3dhYjMyCiAJcmV0dXJuIF9fYXJjaF9zd2FiMzIodmFsKTsKLSNlbGlmIGRlZmluZWQoX19hcmNoX3N3YWIzMnApCi0JcmV0dXJuIF9fYXJjaF9zd2FiMzJwKCZ2YWwpOwogI2Vsc2UKIAlyZXR1cm4gX19jb25zdF9zd2FiMzIodmFsKTsKICNlbmRpZgpAQCAtNjksOCArNjUsNiBAQAogewogI2lmZGVmIF9fYXJjaF9zd2FiNjQKIAlyZXR1cm4gX19hcmNoX3N3YWI2NCh2YWwpOwotI2VsaWYgZGVmaW5lZChfX2FyY2hfc3dhYjY0cCkKLQlyZXR1cm4gX19hcmNoX3N3YWI2NHAoJnZhbCk7CiAjZWxpZiBkZWZpbmVkKF9fU1dBQl82NF9USFJVXzMyX18pCiAJX191MzIgaCA9IHZhbCA+PiAzMjsKIAlfX3UzMiBsID0gdmFsICYgKCgxVUxMIDw8IDMyKSAtIDEpOwpAQCAtODQsOCArNzgsNiBAQAogewogI2lmZGVmIF9fYXJjaF9zd2FodzMyCiAJcmV0dXJuIF9fYXJjaF9zd2FodzMyKHZhbCk7Ci0jZWxpZiBkZWZpbmVkKF9fYXJjaF9zd2FodzMycCkKLQlyZXR1cm4gX19hcmNoX3N3YWh3MzJwKCZ2YWwpOwogI2Vsc2UKIAlyZXR1cm4gX19jb25zdF9zd2FodzMyKHZhbCk7CiAjZW5kaWYKQEAgLTk1LDggKzg3LDYgQEAKIHsKICNpZmRlZiBfX2FyY2hfc3dhaGIzMgogCXJldHVybiBfX2FyY2hfc3dhaGIzMih2YWwpOwotI2VsaWYgZGVmaW5lZChfX2FyY2hfc3dhaGIzMnApCi0JcmV0dXJuIF9fYXJjaF9zd2FoYjMycCgmdmFsKTsKICNlbHNlCiAJcmV0dXJuIF9fY29uc3Rfc3dhaGIzMih2YWwpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IGRlNDBmMTY5YS4uYTNhZjk1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L25vZGUuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMTcxLDggKzE3MiwxMCBAQAogCiAKIC8qIGxpbnV4L21tL3N3YXAuYyAqLwotZXh0ZXJuIHZvaWQgbHJ1X2NhY2hlX2FkZChzdHJ1Y3QgcGFnZSAqKTsKLWV4dGVybiB2b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlKHN0cnVjdCBwYWdlICopOworZXh0ZXJuIHZvaWQgX19scnVfY2FjaGVfYWRkKHN0cnVjdCBwYWdlICosIGVudW0gbHJ1X2xpc3QgbHJ1KTsKK2V4dGVybiB2b2lkIGxydV9jYWNoZV9hZGRfbHJ1KHN0cnVjdCBwYWdlICosIGVudW0gbHJ1X2xpc3QgbHJ1KTsKK2V4dGVybiB2b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlX29yX3VuZXZpY3RhYmxlKHN0cnVjdCBwYWdlICosCisJCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIGFjdGl2YXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gdm9pZCBscnVfYWRkX2RyYWluKHZvaWQpOwpAQCAtMTgwLDEyICsxODMsMzggQEAKIGV4dGVybiB2b2lkIHJvdGF0ZV9yZWNsYWltYWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiB2b2lkIHN3YXBfc2V0dXAodm9pZCk7CiAKK2V4dGVybiB2b2lkIGFkZF9wYWdlX3RvX3VuZXZpY3RhYmxlX2xpc3Qoc3RydWN0IHBhZ2UgKnBhZ2UpOworCisvKioKKyAqIGxydV9jYWNoZV9hZGQ6IGFkZCBhIHBhZ2UgdG8gdGhlIHBhZ2UgbGlzdHMKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byBhZGQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9hZGRfYW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgTFJVX0lOQUNUSVZFX0FOT04pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2NhY2hlX2FkZF9hY3RpdmVfYW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgTFJVX0FDVElWRV9BTk9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9hZGRfZmlsZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgTFJVX0lOQUNUSVZFX0ZJTEUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2NhY2hlX2FkZF9hY3RpdmVfZmlsZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgTFJVX0FDVElWRV9GSUxFKTsKK30KKwogLyogbGludXgvbW0vdm1zY2FuLmMgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlciwKIAkJCQkJZ2ZwX3QgZ2ZwX21hc2spOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAogCQkJCQkJCWdmcF90IGdmcF9tYXNrKTsKLWV4dGVybiBpbnQgX19pc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbW9kZSk7CitleHRlcm4gaW50IF9faXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG1vZGUsIGludCBmaWxlKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzOwogZXh0ZXJuIGludCByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHBhZ2UgKnBhZ2UpOwpAQCAtMjA0LDYgKzIzMywzNCBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCitleHRlcm4gaW50IHBhZ2VfZXZpY3RhYmxlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitleHRlcm4gdm9pZCBzY2FuX21hcHBpbmdfdW5ldmljdGFibGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNjYW5fdW5ldmljdGFibGVfcGFnZXM7CitleHRlcm4gaW50IHNjYW5fdW5ldmljdGFibGVfaGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKKwkJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKK2V4dGVybiBpbnQgc2Nhbl91bmV2aWN0YWJsZV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKK2V4dGVybiB2b2lkIHNjYW5fdW5ldmljdGFibGVfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwYWdlX2V2aWN0YWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2Nhbl9tYXBwaW5nX3VuZXZpY3RhYmxlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBzY2FuX3VuZXZpY3RhYmxlX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY2FuX3VuZXZpY3RhYmxlX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSkgeyB9CisjZW5kaWYKKwogZXh0ZXJuIGludCBrc3dhcGRfcnVuKGludCBuaWQpOwogCiAjaWZkZWYgQ09ORklHX01NVQpAQCAtMjUxLDYgKzMwOCw3IEBACiBleHRlcm4gc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2luZm9fc3RydWN0KHVuc2lnbmVkKTsKIGV4dGVybiBpbnQgY2FuX3NoYXJlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKIGV4dGVybiBpbnQgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CitleHRlcm4gaW50IHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlX3JlZihzdHJ1Y3QgcGFnZSAqKTsKIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvOwogCiAvKiBsaW51eC9tbS90aHJhc2guYyAqLwpAQCAtMzM5LDYgKzM5NywxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9yZWYoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgZ2V0X3N3YXBfcGFnZSh2b2lkKQogewogCXN3cF9lbnRyeV90IGVudHJ5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2lvdGxiLmggYi9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMThlYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKQEAgLTAsMCArMSw4MyBAQAorI2lmbmRlZiBfX0xJTlVYX1NXSU9UTEJfSAorI2RlZmluZSBfX0xJTlVYX1NXSU9UTEJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkbWFfYXR0cnM7CitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CisKK2V4dGVybiB2b2lkCitzd2lvdGxiX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkCisqc3dpb3RsYl9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCisJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncyk7CisKK2V4dGVybiB2b2lkCitzd2lvdGxiX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAorCQkgICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKKworZXh0ZXJuIGRtYV9hZGRyX3QKK3N3aW90bGJfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisKK2V4dGVybiB2b2lkCitzd2lvdGxiX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisKK2V4dGVybiBkbWFfYWRkcl90Citzd2lvdGxiX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCisJCQkgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworCitleHRlcm4gdm9pZAorc3dpb3RsYl91bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQkgICBzaXplX3Qgc2l6ZSwgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworCitleHRlcm4gaW50Citzd2lvdGxiX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCSAgICAgICBpbnQgZGlyZWN0aW9uKTsKKworZXh0ZXJuIHZvaWQKK3N3aW90bGJfdW5tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJIGludCBkaXJlY3Rpb24pOworCitleHRlcm4gaW50Citzd2lvdGxiX21hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIGludCBuZWxlbXMsCisJCSAgICAgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworCitleHRlcm4gdm9pZAorc3dpb3RsYl91bm1hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCSAgICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CisKK2V4dGVybiB2b2lkCitzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQkgICAgc2l6ZV90IHNpemUsIGludCBkaXIpOworCitleHRlcm4gdm9pZAorc3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQlpbnQgbmVsZW1zLCBpbnQgZGlyKTsKKworZXh0ZXJuIHZvaWQKK3N3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCSAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisKK2V4dGVybiB2b2lkCitzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgIGludCBuZWxlbXMsIGludCBkaXIpOworCitleHRlcm4gdm9pZAorc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKKworZXh0ZXJuIHZvaWQKK3N3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgIGludCBkaXIpOworCitleHRlcm4gaW50Citzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKKworZXh0ZXJuIGludAorc3dpb3RsYl9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB1NjQgbWFzayk7CisKKyNlbmRpZiAvKiBfX0xJTlVYX1NXSU9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaCBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKaW5kZXggZDA0MzdmMy4uMzlkNDcxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCkBAIC05NzIsNyArOTcyLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgY3RsX3RhYmxlIGN0bF90YWJsZTsKIAotdHlwZWRlZiBpbnQgY3RsX2hhbmRsZXIgKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK3R5cGVkZWYgaW50IGN0bF9oYW5kbGVyIChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJCSB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2ZzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKaW5kZXggMzdmYTI0MS4uOWQ2OGZlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzZnMuaApAQCAtMjEsOCArMjEsOSBAQAogc3RydWN0IG1vZHVsZTsKIAogLyogRklYTUUKLSAqIFRoZSAqb3duZXIgZmllbGQgaXMgbm8gbG9uZ2VyIHVzZWQsIGJ1dCBsZWF2ZSBhcm91bmQKLSAqIHVudGlsIHRoZSB0cmVlIGdldHMgY2xlYW5lZCB1cCBmdWxseS4KKyAqIFRoZSAqb3duZXIgZmllbGQgaXMgbm8gbG9uZ2VyIHVzZWQuCisgKiB4ODYgdHJlZSBoYXMgYmVlbiBjbGVhbmVkIHVwLiBUaGUgb3duZXIKKyAqIGF0dHJpYnV0ZSBpcyBzdGlsbCBsZWZ0IGZvciBvdGhlciBhcmNoZXMuCiAgKi8KIHN0cnVjdCBhdHRyaWJ1dGUgewogCWNvbnN0IGNoYXIJCSpuYW1lOwpAQCAtNzgsNiArNzksOCBAQAogCXNzaXplX3QJKCpzdG9yZSkoc3RydWN0IGtvYmplY3QgKixzdHJ1Y3QgYXR0cmlidXRlICosY29uc3QgY2hhciAqLCBzaXplX3QpOwogfTsKIAorc3RydWN0IHN5c2ZzX2RpcmVudDsKKwogI2lmZGVmIENPTkZJR19TWVNGUwogCiBpbnQgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2soc3RydWN0IGtvYmplY3QgKmtvYmosIHZvaWQgKCpmdW5jKSh2b2lkICopLApAQCAtMTE3LDkgKzEyMCwxNCBAQAogdm9pZCBzeXNmc19yZW1vdmVfZmlsZV9mcm9tX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqZ3JvdXApOwogCi12b2lkIHN5c2ZzX25vdGlmeShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY2hhciAqZGlyLCBjaGFyICphdHRyKTsKLQotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgc3lzZnNfaW5pdCh2b2lkKTsKK3ZvaWQgc3lzZnNfbm90aWZ5KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmF0dHIpOwordm9pZCBzeXNmc19ub3RpZnlfZGlyZW50KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKTsKK3N0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldF9kaXJlbnQoc3RydWN0IHN5c2ZzX2RpcmVudCAqcGFyZW50X3NkLAorCQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpOworc3RydWN0IHN5c2ZzX2RpcmVudCAqc3lzZnNfZ2V0KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKTsKK3ZvaWQgc3lzZnNfcHV0KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKTsKK3ZvaWQgc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSh2b2lkKTsKK2ludCBfX211c3RfY2hlY2sgc3lzZnNfaW5pdCh2b2lkKTsKIAogI2Vsc2UgLyogQ09ORklHX1NZU0ZTICovCiAKQEAgLTIyMiw3ICsyMzAsMjQgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX25vdGlmeShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY2hhciAqZGlyLCBjaGFyICphdHRyKQorc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX25vdGlmeShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqZGlyLAorCQkJCWNvbnN0IGNoYXIgKmF0dHIpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfbm90aWZ5X2RpcmVudChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldF9kaXJlbnQoc3RydWN0IHN5c2ZzX2RpcmVudCAqcGFyZW50X3NkLAorCQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNmc19wdXQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCiB7CiB9CiAKQEAgLTIzMSw2ICsyNTYsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3ByaW50a19sYXN0X2ZpbGUodm9pZCkKK3sKK30KKwogI2VuZGlmIC8qIENPTkZJR19TWVNGUyAqLwogCiAjZW5kaWYgLyogX1NZU0ZTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZy5oIGIvaW5jbHVkZS9saW51eC90YXNrX2lvX2FjY291bnRpbmcuaAppbmRleCA1ZTg4YWZjLi5iZGY4NTVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGFza19pb19hY2NvdW50aW5nLmgKQEAgLTUsNyArNSw3IEBACiAgKiBEb24ndCBpbmNsdWRlIHRoaXMgaGVhZGVyIGZpbGUgZGlyZWN0bHkgLSBpdCBpcyBkZXNpZ25lZCB0byBiZSBkcmFnZ2VkIGluIHZpYQogICogc2NoZWQuaC4KICAqCi0gKiBCbGFtZSBha3BtQG9zZGwub3JnIGZvciBhbGwgdGhpcy4KKyAqIEJsYW1lIEFuZHJldyBNb3J0b24gZm9yIGFsbCB0aGlzLgogICovCiAKIHN0cnVjdCB0YXNrX2lvX2FjY291bnRpbmcgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90ZWxlcGhvbnkuaCBiL2luY2x1ZGUvbGludXgvdGVsZXBob255LmgKaW5kZXggMGQwY2YyYS4uNWIyYjYyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90ZWxlcGhvbnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RlbGVwaG9ueS5oCkBAIC0yOCwxMCArMjgsNiBAQAogICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFFVSUNLTkVUIFRFQ0hOT0xPR0lFUywgSU5DLiBIQVMgTk8gT0JMSUdBVElPTgogICogVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgogICoKLSAqIFZlcnNpb246ICAgICAgICRSZXZpc2lvbjogNC4yICQKLSAqCi0gKiAkSWQ6IHRlbGVwaG9ueS5oLHYgNC4yIDIwMDEvMDgvMDYgMDc6MDk6NDMgY3JhaWdzIEV4cCAkCi0gKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWZuZGVmIFRFTEVQSE9OWV9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpY2suaCBiL2luY2x1ZGUvbGludXgvdGljay5oCmluZGV4IDk4OTIxYTMuLmI2ZWM4MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGljay5oCisrKyBiL2luY2x1ZGUvbGludXgvdGljay5oCkBAIC05Niw5ICs5NiwxMSBAQAogZXh0ZXJuIHZvaWQgdGlja19jbG9ja19ub3RpZnkodm9pZCk7CiBleHRlcm4gaW50IHRpY2tfY2hlY2tfb25lc2hvdF9jaGFuZ2UoaW50IGFsbG93X25vaHopOwogZXh0ZXJuIHN0cnVjdCB0aWNrX3NjaGVkICp0aWNrX2dldF90aWNrX3NjaGVkKGludCBjcHUpOworZXh0ZXJuIHZvaWQgdGlja19jaGVja19pZGxlKGludCBjcHUpOwogIyBlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19jbG9ja19ub3RpZnkodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIGludCB0aWNrX2NoZWNrX29uZXNob3RfY2hhbmdlKGludCBhbGxvd19ub2h6KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19jaGVja19pZGxlKGludCBjcHUpIHsgfQogIyBlbmRpZgogCiAjZWxzZSAvKiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyAqLwpAQCAtMTA2LDI2ICsxMDgsMjMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2NhbmNlbF9zY2hlZF90aW1lcihpbnQgY3B1KSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2Nsb2NrX25vdGlmeSh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHRpY2tfY2hlY2tfb25lc2hvdF9jaGFuZ2UoaW50IGFsbG93X25vaHopIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2NoZWNrX2lkbGUoaW50IGNwdSkgeyB9CiAjZW5kaWYgLyogIUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTICovCiAKICMgaWZkZWYgQ09ORklHX05PX0haCiBleHRlcm4gdm9pZCB0aWNrX25vaHpfc3RvcF9zY2hlZF90aWNrKGludCBpbmlkbGUpOwogZXh0ZXJuIHZvaWQgdGlja19ub2h6X3Jlc3RhcnRfc2NoZWRfdGljayh2b2lkKTsKLWV4dGVybiB2b2lkIHRpY2tfbm9oel91cGRhdGVfamlmZmllcyh2b2lkKTsKIGV4dGVybiBrdGltZV90IHRpY2tfbm9oel9nZXRfc2xlZXBfbGVuZ3RoKHZvaWQpOwotZXh0ZXJuIHZvaWQgdGlja19ub2h6X3N0b3BfaWRsZShpbnQgY3B1KTsKIGV4dGVybiB1NjQgZ2V0X2NwdV9pZGxlX3RpbWVfdXMoaW50IGNwdSwgdTY0ICpsYXN0X3VwZGF0ZV90aW1lKTsKICMgZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfbm9oel9zdG9wX3NjaGVkX3RpY2soaW50IGluaWRsZSkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19ub2h6X3Jlc3RhcnRfc2NoZWRfdGljayh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX25vaHpfdXBkYXRlX2ppZmZpZXModm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIGt0aW1lX3QgdGlja19ub2h6X2dldF9zbGVlcF9sZW5ndGgodm9pZCkKIHsKIAlrdGltZV90IGxlbiA9IHsgLnR2NjQgPSBOU0VDX1BFUl9TRUMvSFogfTsKIAogCXJldHVybiBsZW47CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdGlja19ub2h6X3N0b3BfaWRsZShpbnQgY3B1KSB7IH0KIHN0YXRpYyBpbmxpbmUgdTY0IGdldF9jcHVfaWRsZV90aW1lX3VzKGludCBjcHUsIHU2NCAqdW51c2VkKSB7IHJldHVybiAtMTsgfQogIyBlbmRpZiAvKiAhTk9fSFogKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lLmggYi9pbmNsdWRlL2xpbnV4L3RpbWUuaAppbmRleCBlMTUyMDZhLi40ZjFjOWRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWUuaApAQCAtMjksNiArMjksOCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCitleHRlcm4gc3RydWN0IHRpbWV6b25lIHN5c190ejsKKwogLyogUGFyYW1ldGVycyB1c2VkIHRvIGNvbnZlcnQgdGhlIHRpbWVzcGVjIHZhbHVlczogKi8KICNkZWZpbmUgTVNFQ19QRVJfU0VDCTEwMDBMCiAjZGVmaW5lIFVTRUNfUEVSX01TRUMJMTAwMEwKQEAgLTExNyw2ICsxMTksNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBhbGFybV9zZXRpdGltZXIodW5zaWduZWQgaW50IHNlY29uZHMpOwogZXh0ZXJuIGludCBkb19nZXRpdGltZXIoaW50IHdoaWNoLCBzdHJ1Y3QgaXRpbWVydmFsICp2YWx1ZSk7CiBleHRlcm4gdm9pZCBnZXRuc3RpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KTsKK2V4dGVybiB2b2lkIGdldHJhd21vbm90b25pYyhzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKIGV4dGVybiB2b2lkIGdldGJvb3R0aW1lKHN0cnVjdCB0aW1lc3BlYyAqdHMpOwogZXh0ZXJuIHZvaWQgbW9ub3RvbmljX3RvX2Jvb3RiYXNlZChzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKIApAQCAtMTI1LDYgKzEyOCw5IEBACiBleHRlcm4gdm9pZCB1cGRhdGVfd2FsbF90aW1lKHZvaWQpOwogZXh0ZXJuIHZvaWQgdXBkYXRlX3h0aW1lX2NhY2hlKHU2NCBuc2VjKTsKIAorc3RydWN0IHRtczsKK2V4dGVybiB2b2lkIGRvX3N5c190aW1lcyhzdHJ1Y3QgdG1zICopOworCiAvKioKICAqIHRpbWVzcGVjX3RvX25zIC0gQ29udmVydCB0aW1lc3BlYyB0byBuYW5vc2Vjb25kcwogICogQHRzOgkJcG9pbnRlciB0byB0aGUgdGltZXNwZWMgdmFyaWFibGUgdG8gYmUgY29udmVydGVkCkBAIC0yMTQsNiArMjIwLDcgQEAKICNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDCQkJMQogI2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQJMgogI2RlZmluZSBDTE9DS19USFJFQURfQ1BVVElNRV9JRAkJMworI2RlZmluZSBDTE9DS19NT05PVE9OSUNfUkFXCQk0CiAKIC8qCiAgKiBUaGUgSURzIG9mIHZhcmlvdXMgaGFyZHdhcmUgY2xvY2tzOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1leC5oIGIvaW5jbHVkZS9saW51eC90aW1leC5oCmluZGV4IGZjNjAzNWQuLjkwMDczMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKQEAgLTgyLDcgKzgyLDcgQEAKICAqLwogI2RlZmluZSBTSElGVF9VU0VDIDE2CQkvKiBmcmVxdWVuY3kgb2Zmc2V0IHNjYWxlIChzaGlmdCkgKi8KICNkZWZpbmUgUFBNX1NDQUxFIChOU0VDX1BFUl9VU0VDIDw8IChOVFBfU0NBTEVfU0hJRlQgLSBTSElGVF9VU0VDKSkKLSNkZWZpbmUgUFBNX1NDQUxFX0lOVl9TSElGVCAyMAorI2RlZmluZSBQUE1fU0NBTEVfSU5WX1NISUZUIDE5CiAjZGVmaW5lIFBQTV9TQ0FMRV9JTlYgKCgxbGwgPDwgKFBQTV9TQ0FMRV9JTlZfU0hJRlQgKyBOVFBfU0NBTEVfU0hJRlQpKSAvIFwKIAkJICAgICAgIFBQTV9TQ0FMRSArIDEpCiAKQEAgLTE0MSw4ICsxNDEsMTUgQEAKICNkZWZpbmUgQURKX01JQ1JPCQkweDEwMDAJLyogc2VsZWN0IG1pY3Jvc2Vjb25kIHJlc29sdXRpb24gKi8KICNkZWZpbmUgQURKX05BTk8JCTB4MjAwMAkvKiBzZWxlY3QgbmFub3NlY29uZCByZXNvbHV0aW9uICovCiAjZGVmaW5lIEFESl9USUNLCQkweDQwMDAJLyogdGljayB2YWx1ZSAqLworCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBBREpfQURKVElNRQkJMHg4MDAwCS8qIHN3aXRjaCBiZXR3ZWVuIGFkanRpbWUvYWRqdGltZXggbW9kZXMgKi8KKyNkZWZpbmUgQURKX09GRlNFVF9TSU5HTEVTSE9UCTB4MDAwMQkvKiBvbGQtZmFzaGlvbmVkIGFkanRpbWUgKi8KKyNkZWZpbmUgQURKX09GRlNFVF9SRUFET05MWQkweDIwMDAJLyogcmVhZC1vbmx5IGFkanRpbWUgKi8KKyNlbHNlCiAjZGVmaW5lIEFESl9PRkZTRVRfU0lOR0xFU0hPVAkweDgwMDEJLyogb2xkLWZhc2hpb25lZCBhZGp0aW1lICovCi0jZGVmaW5lIEFESl9PRkZTRVRfU1NfUkVBRAkweGEwMDEgIC8qIHJlYWQtb25seSBhZGp0aW1lICovCisjZGVmaW5lIEFESl9PRkZTRVRfU1NfUkVBRAkweGEwMDEJLyogcmVhZC1vbmx5IGFkanRpbWUgKi8KKyNlbmRpZgogCiAvKiB4bnRwIDMuNCBjb21wYXRpYmlsaXR5IG5hbWVzICovCiAjZGVmaW5lIE1PRF9PRkZTRVQJQURKX09GRlNFVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCmluZGV4IGQ0YTljZTYuLmYyNGY3YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKQEAgLTE5MSwxMiArMTkxLDE0IEBACiAjaWZkZWYgX19LRVJORUxfXwogdHlwZWRlZiB1bnNpZ25lZCBfX2JpdHdpc2VfXyBnZnBfdDsKIAotI2lmZGVmIENPTkZJR19SRVNPVVJDRVNfNjRCSVQKLXR5cGVkZWYgdTY0IHJlc291cmNlX3NpemVfdDsKKyNpZmRlZiBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQKK3R5cGVkZWYgdTY0IHBoeXNfYWRkcl90OwogI2Vsc2UKLXR5cGVkZWYgdTMyIHJlc291cmNlX3NpemVfdDsKK3R5cGVkZWYgdTMyIHBoeXNfYWRkcl90OwogI2VuZGlmCiAKK3R5cGVkZWYgcGh5c19hZGRyX3QgcmVzb3VyY2Vfc2l6ZV90OworCiBzdHJ1Y3QgdXN0YXQgewogCV9fa2VybmVsX2RhZGRyX3QJZl90ZnJlZTsKIAlfX2tlcm5lbF9pbm9fdAkJZl90aW5vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCA5NGFjNzRhLi44ZmE5NzNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTExMzUsNiArMTEzNSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCB1cmJfbGlzdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCXNwaW5sb2NrX3QgbG9jazsKKwl1bnNpZ25lZCBpbnQgcG9pc29uZWQ6MTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3VzYl9hbmNob3Ioc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKQEAgLTE0NTksMTIgKzE0NjAsMTggQEAKIGV4dGVybiBpbnQgdXNiX3N1Ym1pdF91cmIoc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBtZW1fZmxhZ3MpOwogZXh0ZXJuIGludCB1c2JfdW5saW5rX3VyYihzdHJ1Y3QgdXJiICp1cmIpOwogZXh0ZXJuIHZvaWQgdXNiX2tpbGxfdXJiKHN0cnVjdCB1cmIgKnVyYik7CitleHRlcm4gdm9pZCB1c2JfcG9pc29uX3VyYihzdHJ1Y3QgdXJiICp1cmIpOworZXh0ZXJuIHZvaWQgdXNiX3VucG9pc29uX3VyYihzdHJ1Y3QgdXJiICp1cmIpOwogZXh0ZXJuIHZvaWQgdXNiX2tpbGxfYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKK2V4dGVybiB2b2lkIHVzYl9wb2lzb25fYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKIGV4dGVybiB2b2lkIHVzYl91bmxpbmtfYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKIGV4dGVybiB2b2lkIHVzYl9hbmNob3JfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcik7CiBleHRlcm4gdm9pZCB1c2JfdW5hbmNob3JfdXJiKHN0cnVjdCB1cmIgKnVyYik7CiBleHRlcm4gaW50IHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IsCiAJCQkJCSB1bnNpZ25lZCBpbnQgdGltZW91dCk7CitleHRlcm4gc3RydWN0IHVyYiAqdXNiX2dldF9mcm9tX2FuY2hvcihzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKK2V4dGVybiB2b2lkIHVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcik7CitleHRlcm4gaW50IHVzYl9hbmNob3JfZW1wdHkoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcik7CiAKIC8qKgogICogdXNiX3VyYl9kaXJfaW4gLSBjaGVjayBpZiBhbiBVUkIgZGVzY3JpYmVzIGFuIElOIHRyYW5zZmVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L3VzYi9LYnVpbGQKaW5kZXggNDJlODRmYy4uNTRjNDQ2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL0tidWlsZApAQCAtNCw0ICs0LDUgQEAKIGhlYWRlci15ICs9IGdhZGdldGZzLmgKIGhlYWRlci15ICs9IG1pZGkuaAogaGVhZGVyLXkgKz0gZ19wcmludGVyLmgKLQoraGVhZGVyLXkgKz0gdG1jLmgKK2hlYWRlci15ICs9IHZzdHVzYi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jZGMuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCmluZGV4IGNhMjI4YmI5Li4xOGE3MjkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9jZGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9jZGMuaApAQCAtMTYwLDYgKzE2MCwxNSBAQAogCV9fdTgJYkRldGFpbERhdGFbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyogIk9CRVggQ29udHJvbCBNb2RlbCBGdW5jdGlvbmFsIERlc2NyaXB0b3IiICovCitzdHJ1Y3QgdXNiX2NkY19vYmV4X2Rlc2MgeworCV9fdTgJYkxlbmd0aDsKKwlfX3U4CWJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4CWJEZXNjcmlwdG9yU3ViVHlwZTsKKworCV9fbGUxNgliY2RWZXJzaW9uOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCmluZGV4IGM5MzIzOTAuLjkzNWMzODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oCkBAIC0xMzAsNiArMTMwLDkgQEAKIAogaW50IHVzYl9hZGRfZnVuY3Rpb24oc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICosIHN0cnVjdCB1c2JfZnVuY3Rpb24gKik7CiAKK2ludCB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICopOworaW50IHVzYl9mdW5jdGlvbl9hY3RpdmF0ZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICopOworCiBpbnQgdXNiX2ludGVyZmFjZV9pZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKiwgc3RydWN0IHVzYl9mdW5jdGlvbiAqKTsKIAogLyoqCkBAIC0zMTYsOSArMzE5LDEzIEBACiAJc3RydWN0IHVzYl9jb21wb3NpdGVfZHJpdmVyCSpkcml2ZXI7CiAJdTgJCQkJbmV4dF9zdHJpbmdfaWQ7CiAKLQlzcGlubG9ja190CQkJbG9jazsKKwkvKiB0aGUgZ2FkZ2V0IGRyaXZlciB3b24ndCBlbmFibGUgdGhlIGRhdGEgcHVsbHVwCisJICogd2hpbGUgdGhlIGRlYWN0aXZhdGlvbiBjb3VudCBpcyBub256ZXJvLgorCSAqLworCXVuc2lnbmVkCQkJZGVhY3RpdmF0aW9uczsKIAotCS8qIFJFVklTSVQgdXNlIGFuZCBleGlzdGVuY2Ugb2YgbG9jayAuLi4gKi8KKwkvKiBwcm90ZWN0cyBhdCBsZWFzdCBkZWFjdGl2YXRpb24gY291bnQgKi8KKwlzcGlubG9ja190CQkJbG9jazsKIH07CiAKIGV4dGVybiBpbnQgdXNiX3N0cmluZ19pZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAppbmRleCA2NTUzNDFkLi4wYjg2MTdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaApAQCAtMTkyLDcgKzE5Miw3IEBACiAgKiBUaGUgZHJpdmVyLm93bmVyIGZpZWxkIHNob3VsZCBiZSBzZXQgdG8gdGhlIG1vZHVsZSBvd25lciBvZiB0aGlzIGRyaXZlci4KICAqIFRoZSBkcml2ZXIubmFtZSBmaWVsZCBzaG91bGQgYmUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoaXMgZHJpdmVyIChyZW1lbWJlcgogICogaXQgd2lsbCBzaG93IHVwIGluIHN5c2ZzLCBzbyBpdCBuZWVkcyB0byBiZSBzaG9ydCBhbmQgdG8gdGhlIHBvaW50LgotICogVXNlaW5nIHRoZSBtb2R1bGUgbmFtZSBpcyBhIGdvb2QgaWRlYS4pCisgKiBVc2luZyB0aGUgbW9kdWxlIG5hbWUgaXMgYSBnb29kIGlkZWEuKQogICovCiBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgewogCWNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvdG1jLmggYi9pbmNsdWRlL2xpbnV4L3VzYi90bWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDQ1YWUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2IvdG1jLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBTdGVmYW4gS29wcCwgR2VjaGluZ2VuLCBHZXJtYW55CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm92ZWxsLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqCisgKiBUaGlzIGZpbGUgaG9sZHMgVVNCIGNvbnN0YW50cyBkZWZpbmVkIGJ5IHRoZSBVU0IgRGV2aWNlIENsYXNzCisgKiBEZWZpbml0aW9uIGZvciBUZXN0IGFuZCBNZWFzdXJlbWVudCBkZXZpY2VzIHB1Ymxpc2hlZCBieSB0aGUgVVNCLUlGLgorICoKKyAqIEl0IGFsc28gaGFzIHRoZSBpb2N0bCBkZWZpbml0aW9ucyBmb3IgdGhlIHVzYnRtYyBrZXJuZWwgZHJpdmVyIHRoYXQKKyAqIHVzZXJzcGFjZSBuZWVkcyB0byBrbm93IGFib3V0LgorICovCisKKyNpZm5kZWYgX19MSU5VWF9VU0JfVE1DX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfVE1DX0gKKworLyogVVNCIFRNQyBzdGF0dXMgdmFsdWVzICovCisjZGVmaW5lIFVTQlRNQ19TVEFUVVNfU1VDQ0VTUwkJCQkweDAxCisjZGVmaW5lIFVTQlRNQ19TVEFUVVNfUEVORElORwkJCQkweDAyCisjZGVmaW5lIFVTQlRNQ19TVEFUVVNfRkFJTEVECQkJCTB4ODAKKyNkZWZpbmUgVVNCVE1DX1NUQVRVU19UUkFOU0ZFUl9OT1RfSU5fUFJPR1JFU1MJCTB4ODEKKyNkZWZpbmUgVVNCVE1DX1NUQVRVU19TUExJVF9OT1RfSU5fUFJPR1JFU1MJCTB4ODIKKyNkZWZpbmUgVVNCVE1DX1NUQVRVU19TUExJVF9JTl9QUk9HUkVTUwkJCTB4ODMKKworLyogVVNCIFRNQyByZXF1ZXN0cyB2YWx1ZXMgKi8KKyNkZWZpbmUgVVNCVE1DX1JFUVVFU1RfSU5JVElBVEVfQUJPUlRfQlVMS19PVVQJCTEKKyNkZWZpbmUgVVNCVE1DX1JFUVVFU1RfQ0hFQ0tfQUJPUlRfQlVMS19PVVRfU1RBVFVTCTIKKyNkZWZpbmUgVVNCVE1DX1JFUVVFU1RfSU5JVElBVEVfQUJPUlRfQlVMS19JTgkJMworI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9DSEVDS19BQk9SVF9CVUxLX0lOX1NUQVRVUwk0CisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0lOSVRJQVRFX0NMRUFSCQkJNQorI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9DSEVDS19DTEVBUl9TVEFUVVMJCTYKKyNkZWZpbmUgVVNCVE1DX1JFUVVFU1RfR0VUX0NBUEFCSUxJVElFUwkJCTcKKyNkZWZpbmUgVVNCVE1DX1JFUVVFU1RfSU5ESUNBVE9SX1BVTFNFCQkJNjQKKworLyogUmVxdWVzdCB2YWx1ZXMgZm9yIFVTQlRNQyBkcml2ZXIncyBpb2N0bCBlbnRyeSBwb2ludCAqLworI2RlZmluZSBVU0JUTUNfSU9DX05SCQkJOTEKKyNkZWZpbmUgVVNCVE1DX0lPQ1RMX0lORElDQVRPUl9QVUxTRQlfSU8oVVNCVE1DX0lPQ19OUiwgMSkKKyNkZWZpbmUgVVNCVE1DX0lPQ1RMX0NMRUFSCQlfSU8oVVNCVE1DX0lPQ19OUiwgMikKKyNkZWZpbmUgVVNCVE1DX0lPQ1RMX0FCT1JUX0JVTEtfT1VUCV9JTyhVU0JUTUNfSU9DX05SLCAzKQorI2RlZmluZSBVU0JUTUNfSU9DVExfQUJPUlRfQlVMS19JTglfSU8oVVNCVE1DX0lPQ19OUiwgNCkKKyNkZWZpbmUgVVNCVE1DX0lPQ1RMX0NMRUFSX09VVF9IQUxUCV9JTyhVU0JUTUNfSU9DX05SLCA2KQorI2RlZmluZSBVU0JUTUNfSU9DVExfQ0xFQVJfSU5fSEFMVAlfSU8oVVNCVE1DX0lPQ19OUiwgNykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi92c3R1c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiL3ZzdHVzYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZmFjNjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi92c3R1c2IuaApAQCAtMCwwICsxLDcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBGaWxlOiBkcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5oCisgKgorICogIFB1cnBvc2U6IFN1cHBvcnQgZm9yIHRoZSBidWxrIFVTQiBWZXJuaWVyIFNwZWN0cm9waG90b21ldGVycworICoKKyAqICBBdXRob3I6ICAgICBFUXdhcmUgRW5naW5lZXJpbmcsIEluYy4KKyAqICAgICAgICAgICAgICBPcmVnb24gQ2l0eSwgT1IsIFVTQSA5NzA0NQorICoKKyAqICBDb3B5cmlnaHQ6ICAyMDA3LCAyMDA4CisgKiAgICAgICAgICAgICAgVmVybmllciBTb2Z0d2FyZSAmIFRlY2hub2xvZ3kKKyAqICAgICAgICAgICAgICBCZWF2ZXJ0b24sIE9SLCBVU0EgOTcwMDUKKyAqCisgKiAgV2ViOiAgICAgICAgd3d3LnZlcm5pZXIuY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgVGhlIHZzdHVzYiBtb2R1bGUgaXMgYSBzdGFuZGFyZCB1c2IgJ2NsaWVudCcgZHJpdmVyIHJ1bm5pbmcgb24gdG9wIG9mIHRoZQorICogIHN0YW5kYXJkIHVzYiBob3N0IGNvbnRyb2xsZXIgc3RhY2suCisgKgorICogIEluIGdlbmVyYWwsIHZzdHVzYiBzdXBwb3J0cyBzdGFuZGFyZCBidWxrIHVzYiBwaXBlcy4gIEl0IHN1cHBvcnRzIG11bHRpcGxlCisgKiAgZGV2aWNlcyBhbmQgbXVsdGlwbGUgcGlwZXMgcGVyIGRldmljZS4KKyAqCisgKiAgVGhlIHZzdHVzYiBkcml2ZXIgc3VwcG9ydHMgdHdvIGludGVyZmFjZXM6CisgKiAgMSAtIGlvY3RsIFNFTkRfUElQRS9SRUNWX1BJUEUgLSBhIGdlbmVyYWwgYnVsayB3cml0ZS9yZWFkIG1zZworICogIAlpbnRlcmZhY2UgdG8gYW55IHBpcGUgd2l0aCB0aW1lb3V0IHN1cHBvcnQ7CisgKiAgMiAtIHN0YW5kYXJkIHJlYWQvd3JpdGUgd2l0aCBpb2N0bCBjb25maWcgLSBvZmZlcnMgc3RhbmRhcmQgcmVhZC93cml0ZQorICogIAlpbnRlcmZhY2Ugd2l0aCBpb2N0bCBjb25maWd1cmVkIHBpcGVzIGFuZCB0aW1lb3V0cy4KKyAqCisgKiAgQm90aCBpbnRlcmZhY2VzIGNhbiBiZSBzaWduYWwgZnJvbSBvdGhlciBwcm9jZXNzIGFuZCB3aWxsIGFib3J0IGl0cyBpL28KKyAqICBvcGVyYXRpb24uCisgKgorICogIEEgdGltZW91dCBvZiAwIG1lYW5zIE5PIHRpbWVvdXQuICBUaGUgdXNlciBjYW4gc3RpbGwgdGVybWluYXRlIHRoZSByZWFkIHZpYQorICogIHNpZ25hbC4KKyAqCisgKiAgSWYgdXNpbmcgbXVsdGlwbGUgdGhyZWFkcyB3aXRoIHRoaXMgZHJpdmVyLCB0aGUgdXNlciBzaG91bGQgZW5zdXJlIHRoYXQKKyAqICBhbnkgcmVhZHMsIHdyaXRlcywgb3IgaW9jdGxzIGFyZSBjb21wbGV0ZSBiZWZvcmUgY2xvc2luZyB0aGUgZGV2aWNlLgorICogIENoYW5naW5nIHJlYWQvd3JpdGUgdGltZW91dHMgb3IgcGlwZXMgdGFrZXMgZWZmZWN0IG9uIG5leHQgcmVhZC93cml0ZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCB2c3R1c2JfYXJncyB7CisJdW5pb24geworCQkvKiB0aGlzIHN0cnVjdCBpcyB1c2VkIGZvciBJT0NUTF9WU1RVU0JfU0VORF9QSVBFLAkqCisJCSAqIElPQ1RMX1ZTVFVTQl9SRUNWX1BJUEUsIGFuZCByZWFkKCkvd3JpdGUoKSBmb3BzCSovCisJCXN0cnVjdCB7CisJCQl2b2lkIF9fdXNlcgkqYnVmZmVyOworCQkJc2l6ZV90ICAgICAgICAgIGNvdW50OworCQkJdW5zaWduZWQgaW50ICAgIHRpbWVvdXRfbXM7CisJCQlpbnQgICAgICAgICAgICAgcGlwZTsKKwkJfTsKKworCQkvKiB0aGlzIG9uZSBpcyB1c2VkIGZvciBJT0NUTF9WU1RVU0JfQ09ORklHX1JXICAJKi8KKwkJc3RydWN0IHsKKwkJCWludCByZF9waXBlOworCQkJaW50IHJkX3RpbWVvdXRfbXM7CisJCQlpbnQgd3JfcGlwZTsKKwkJCWludCB3cl90aW1lb3V0X21zOworCQl9OworCX07Cit9OworCisjZGVmaW5lIFZTVF9JT0NfTUFHSUMgJ0wnCisjZGVmaW5lIFZTVF9JT0NfRklSU1QgMHgyMAorI2RlZmluZSBJT0NUTF9WU1RVU0JfU0VORF9QSVBFCV9JTyhWU1RfSU9DX01BR0lDLCBWU1RfSU9DX0ZJUlNUKQorI2RlZmluZSBJT0NUTF9WU1RVU0JfUkVDVl9QSVBFCV9JTyhWU1RfSU9DX01BR0lDLCBWU1RfSU9DX0ZJUlNUICsgMSkKKyNkZWZpbmUgSU9DVExfVlNUVVNCX0NPTkZJR19SVwlfSU8oVlNUX0lPQ19NQUdJQywgVlNUX0lPQ19GSVJTVCArIDIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCAzMDNkOTNmLi5kNGIwMzAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTkxMCw2ICs5MTAsOCBAQAogCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8xID0gMCwKIAlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiA9IDEsCiAJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzMgPSAyLAorCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMgICAgID0gMywKKwlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzICAgICA9IDQsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEUgCQkoVjRMMl9DSURfTVBFR19CQVNFKzEwMikKIGVudW0gdjRsMl9tcGVnX2F1ZGlvX2wxX2JpdHJhdGUgewpAQCAtOTg4LDEyICs5OTAsMzYgQEAKIAlWNEwyX01QRUdfQVVESU9fQ1JDX0NSQzE2ID0gMSwKIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURSAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMTA5KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FBQ19CSVRSQVRFCQkoVjRMMl9DSURfTVBFR19CQVNFKzExMCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURQkJKFY0TDJfQ0lEX01QRUdfQkFTRSsxMTEpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19hYzNfYml0cmF0ZSB7CisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzMySyAgPSAwLAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV80MEsgID0gMSwKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDhLICA9IDIsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzU2SyAgPSAzLAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV82NEsgID0gNCwKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfODBLICA9IDUsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzk2SyAgPSA2LAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xMTJLID0gNywKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTI4SyA9IDgsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzE2MEsgPSA5LAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xOTJLID0gMTAsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzIyNEsgPSAxMSwKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SyA9IDEyLAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zMjBLID0gMTMsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEsgPSAxNCwKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDQ4SyA9IDE1LAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV81MTJLID0gMTYsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzU3NksgPSAxNywKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNjQwSyA9IDE4LAorfTsKIAogLyogIE1QRUcgdmlkZW8gKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORyAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMjAwKQogZW51bSB2NGwyX21wZWdfdmlkZW9fZW5jb2RpbmcgewotCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEgPSAwLAotCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzIgPSAxLAorCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEgICAgID0gMCwKKwlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18yICAgICA9IDEsCisJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMgPSAyLAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1QgCQkoVjRMMl9DSURfTVBFR19CQVNFKzIwMSkKIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2FzcGVjdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCmluZGV4IDMyOGViNDAuLjRjMjhjNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfTElOVVhfVk1BTExPQ19ICiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgkJLyogcGdwcm90X3QgKi8KIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwkJLyogdm1hIGRlZmluaW5nIHVzZXIgbWFwcGluZyBpbiBtbV90eXBlcy5oICovCkBAIC0yMyw3ICsyNCw2IEBACiAjZW5kaWYKIAogc3RydWN0IHZtX3N0cnVjdCB7Ci0JLyoga2VlcCBuZXh0LGFkZHIsc2l6ZSB0b2dldGhlciB0byBzcGVlZHVwIGxvb2t1cHMgKi8KIAlzdHJ1Y3Qgdm1fc3RydWN0CSpuZXh0OwogCXZvaWQJCQkqYWRkcjsKIAl1bnNpZ25lZCBsb25nCQlzaXplOwpAQCAtMzcsNiArMzcsMTkgQEAKIC8qCiAgKglIaWdobGV2ZWwgQVBJcyBmb3IgZHJpdmVyIHVzZQogICovCitleHRlcm4gdm9pZCB2bV91bm1hcF9yYW0oY29uc3Qgdm9pZCAqbWVtLCB1bnNpZ25lZCBpbnQgY291bnQpOworZXh0ZXJuIHZvaWQgKnZtX21hcF9yYW0oc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkJCWludCBub2RlLCBwZ3Byb3RfdCBwcm90KTsKK2V4dGVybiB2b2lkIHZtX3VubWFwX2FsaWFzZXModm9pZCk7CisKKyNpZmRlZiBDT05GSUdfTU1VCitleHRlcm4gdm9pZCBfX2luaXQgdm1hbGxvY19pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2luaXQodm9pZCkKK3sKK30KKyNlbmRpZgorCiBleHRlcm4gdm9pZCAqdm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpOwogZXh0ZXJuIHZvaWQgKnZtYWxsb2NfdXNlcih1bnNpZ25lZCBsb25nIHNpemUpOwogZXh0ZXJuIHZvaWQgKnZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCmluZGV4IDU4MzM0ZDQuLjljZDNhYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaApAQCAtNDEsNiArNDEsMTYgQEAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAJCUhUTEJfQlVERFlfUEdBTExPQywgSFRMQl9CVUREWV9QR0FMTE9DX0ZBSUwsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJCVVORVZJQ1RBQkxFX1BHQ1VMTEVELAkvKiBjdWxsZWQgdG8gbm9yZWNsYWltIGxpc3QgKi8KKwkJVU5FVklDVEFCTEVfUEdTQ0FOTkVELAkvKiBzY2FubmVkIGZvciByZWNsYWltYWJpbGl0eSAqLworCQlVTkVWSUNUQUJMRV9QR1JFU0NVRUQsCS8qIHJlc2N1ZWQgZnJvbSBub3JlY2xhaW0gbGlzdCAqLworCQlVTkVWSUNUQUJMRV9QR01MT0NLRUQsCisJCVVORVZJQ1RBQkxFX1BHTVVOTE9DS0VELAorCQlVTkVWSUNUQUJMRV9QR0NMRUFSRUQsCS8qIG9uIENPVywgcGFnZSB0cnVuY2F0ZSAqLworCQlVTkVWSUNUQUJMRV9QR1NUUkFOREVELAkvKiB1bmFibGUgdG8gaXNvbGF0ZSBvbiB1bmxvY2sgKi8KKwkJVU5FVklDVEFCTEVfTUxPQ0tGUkVFRCwKKyNlbmRpZgogCQlOUl9WTV9FVkVOVF9JVEVNUwogfTsKIApAQCAtMTU5LDYgKzE2OSwxNiBAQAogCXJldHVybiB4OwogfQogCitleHRlcm4gdW5zaWduZWQgbG9uZyBnbG9iYWxfbHJ1X3BhZ2VzKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgem9uZV9scnVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpCit7CisJcmV0dXJuICh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0FOT04pCisJCSsgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9GSUxFKQorCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKQorCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9GSUxFKSk7Cit9CisKICNpZmRlZiBDT05GSUdfTlVNQQogLyoKICAqIERldGVybWluZSB0aGUgcGVyIG5vZGUgdmFsdWUgb2YgYSBzdGF0IGl0ZW0uIFRoaXMgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2FpdC5oIGIvaW5jbHVkZS9saW51eC93YWl0LmgKaW5kZXggMDA4MTE0Ny4uZWY2MDlmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93YWl0LmgKKysrIGIvaW5jbHVkZS9saW51eC93YWl0LmgKQEAgLTEwOCwxNSArMTA4LDYgQEAKIAlyZXR1cm4gIWxpc3RfZW1wdHkoJnEtPnRhc2tfbGlzdCk7CiB9CiAKLS8qCi0gKiBVc2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gc3luYyBhbmQgYXN5bmMgaW8gd2FpdCBjb250ZXh0OgotICogc3luYyBpL28gdHlwaWNhbGx5IHNwZWNpZmllcyBhIE5VTEwgd2FpdCBxdWV1ZSBlbnRyeSBvciBhIHdhaXQKLSAqIHF1ZXVlIGVudHJ5IGJvdW5kIHRvIGEgdGFzayAoY3VycmVudCB0YXNrKSB0byB3YWtlIHVwLgotICogYWlvIHNwZWNpZmllcyBhIHdhaXQgcXVldWUgZW50cnkgd2l0aCBhbiBhc3luYyBub3RpZmljYXRpb24KLSAqIGNhbGxiYWNrIHJvdXRpbmUsIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHRhc2suCi0gKi8KLSNkZWZpbmUgaXNfc3luY193YWl0KHdhaXQpCSghKHdhaXQpIHx8ICgod2FpdCktPnByaXZhdGUpKQotCiBleHRlcm4gdm9pZCBhZGRfd2FpdF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgd2FpdF9xdWV1ZV90ICp3YWl0KTsKIGV4dGVybiB2b2lkIGFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgd2FpdF9xdWV1ZV90ICp3YWl0KTsKIGV4dGVybiB2b2lkIHJlbW92ZV93YWl0X3F1ZXVlKHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKndhaXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaCBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKaW5kZXggMTJiMTVjNS4uZTU4NTY1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCkBAIC02Myw3ICs2MywxNSBAQAogCXVuc2lnbmVkIGZvcl93cml0ZXBhZ2VzOjE7CS8qIFRoaXMgaXMgYSB3cml0ZXBhZ2VzKCkgY2FsbCAqLwogCXVuc2lnbmVkIHJhbmdlX2N5Y2xpYzoxOwkvKiByYW5nZV9zdGFydCBpcyBjeWNsaWMgKi8KIAl1bnNpZ25lZCBtb3JlX2lvOjE7CQkvKiBtb3JlIGlvIHRvIGJlIGRpc3BhdGNoZWQgKi8KLQl1bnNpZ25lZCByYW5nZV9jb250OjE7CisJLyoKKwkgKiB3cml0ZV9jYWNoZV9wYWdlcygpIHdvbid0IHVwZGF0ZSB3YmMtPm5yX3RvX3dyaXRlIGFuZAorCSAqIG1hcHBpbmctPndyaXRlYmFja19pbmRleCBpZiBub19ucndyaXRlX2luZGV4X3VwZGF0ZQorCSAqIGlzIHNldC4gIHdyaXRlX2NhY2hlX3BhZ2VzKCkgbWF5IHdyaXRlIG1vcmUgdGhhbiB3ZQorCSAqIHJlcXVlc3RlZCBhbmQgd2Ugd2FudCB0byBtYWtlIHN1cmUgbnJfdG9fd3JpdGUgYW5kCisJICogd3JpdGViYWNrX2luZGV4IGFyZSB1cGRhdGVkIGluIGEgY29uc2lzdGVudCBtYW5uZXIKKwkgKiBzbyB3ZSB1c2UgYSBzaW5nbGUgY29udHJvbCB0byB1cGRhdGUgdGhlbQorCSAqLworCXVuc2lnbmVkIG5vX25yd3JpdGVfaW5kZXhfdXBkYXRlOjE7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tYXRoLWVtdS9vcC0yLmggYi9pbmNsdWRlL21hdGgtZW11L29wLTIuaAppbmRleCBlMTkzZmIwLi40ZjI2ZWNjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tYXRoLWVtdS9vcC0yLmgKKysrIGIvaW5jbHVkZS9tYXRoLWVtdS9vcC0yLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpZm5kZWYgX19NQVRIX0VNVV9PUF8yX0hfXwogI2RlZmluZSBfX01BVEhfRU1VX09QXzJfSF9fCiAKLSNkZWZpbmUgX0ZQX0ZSQUNfREVDTF8yKFgpCV9GUF9XX1RZUEUgWCMjX2YwLCBYIyNfZjEKKyNkZWZpbmUgX0ZQX0ZSQUNfREVDTF8yKFgpCV9GUF9XX1RZUEUgWCMjX2YwID0gMCwgWCMjX2YxID0gMAogI2RlZmluZSBfRlBfRlJBQ19DT1BZXzIoRCxTKQkoRCMjX2YwID0gUyMjX2YwLCBEIyNfZjEgPSBTIyNfZjEpCiAjZGVmaW5lIF9GUF9GUkFDX1NFVF8yKFgsSSkJX19GUF9GUkFDX1NFVF8yKFgsIEkpCiAjZGVmaW5lIF9GUF9GUkFDX0hJR0hfMihYKQkoWCMjX2YxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tYXRoLWVtdS9vcC1jb21tb24uaCBiL2luY2x1ZGUvbWF0aC1lbXUvb3AtY29tbW9uLmgKaW5kZXggYmI0NmU3Ni4uY2MxZWMzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tYXRoLWVtdS9vcC1jb21tb24uaAorKysgYi9pbmNsdWRlL21hdGgtZW11L29wLWNvbW1vbi5oCkBAIC03Myw3ICs3Myw3IEBACiAJWCMjX2MgPSBGUF9DTFNfTkFOOwkJCQkJCVwKIAkvKiBDaGVjayBmb3Igc2lnbmFsaW5nIE5hTiAqLwkJCQkJXAogCWlmICghKF9GUF9GUkFDX0hJR0hfUkFXXyMjZnMoWCkgJiBfRlBfUU5BTkJJVF8jI2ZzKSkJCVwKLQkgIEZQX1NFVF9FWENFUFRJT04oRlBfRVhfSU5WQUxJRCk7CQkJCVwKKwkgIEZQX1NFVF9FWENFUFRJT04oRlBfRVhfSU5WQUxJRCB8IEZQX0VYX0lOVkFMSURfU05BTik7CQlcCiAgICAgICB9CQkJCQkJCQkJXAogICAgIGJyZWFrOwkJCQkJCQkJXAogICB9CQkJCQkJCQkJXApAQCAtMzI0LDcgKzMyNCw3IEBACiAJX0ZQX0ZSQUNfU0VUXyMjd2MoUiwgX0ZQX05BTkZSQUNfIyNmcyk7CQkJCSAgICAgXAogCVIjI19zID0gX0ZQX05BTlNJR05fIyNmczsJCQkJCSAgICAgXAogCVIjI19jID0gRlBfQ0xTX05BTjsJCQkJCQkgICAgIFwKLQlGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQpOwkJCQkgICAgIFwKKwlGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQgfCBGUF9FWF9JTlZBTElEX0lTSSk7CQkgICAgIFwKIAlicmVhazsJCQkJCQkJCSAgICAgXAogICAgICAgfQkJCQkJCQkJCSAgICAgXAogICAgIC8qIEZBTExUSFJVICovCQkJCQkJCSAgICAgXApAQCAtNDMxLDcgKzQzMSw3IEBACiAgICAgUiMjX3MgPSBfRlBfTkFOU0lHTl8jI2ZzOwkJCQlcCiAgICAgUiMjX2MgPSBGUF9DTFNfTkFOOwkJCQkJXAogICAgIF9GUF9GUkFDX1NFVF8jI3djKFIsIF9GUF9OQU5GUkFDXyMjZnMpOwkJXAotICAgIEZQX1NFVF9FWENFUFRJT04oRlBfRVhfSU5WQUxJRCk7CQkJXAorICAgIEZQX1NFVF9FWENFUFRJT04oRlBfRVhfSU5WQUxJRCB8IEZQX0VYX0lOVkFMSURfSU1aKTtcCiAgICAgYnJlYWs7CQkJCQkJXAogCQkJCQkJCVwKICAgZGVmYXVsdDoJCQkJCQlcCkBAIC00OTAsMTEgKzQ5MCwxNSBAQAogICAgIGJyZWFrOwkJCQkJCVwKIAkJCQkJCQlcCiAgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX0lORik6CQlcCisgICAgUiMjX3MgPSBfRlBfTkFOU0lHTl8jI2ZzOwkJCQlcCisgICAgUiMjX2MgPSBGUF9DTFNfTkFOOwkJCQkJXAorICAgIF9GUF9GUkFDX1NFVF8jI3djKFIsIF9GUF9OQU5GUkFDXyMjZnMpOwkJXAorICAgIEZQX1NFVF9FWENFUFRJT04oRlBfRVhfSU5WQUxJRCB8IEZQX0VYX0lOVkFMSURfSURJKTtcCiAgIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19aRVJPKToJXAogICAgIFIjI19zID0gX0ZQX05BTlNJR05fIyNmczsJCQkJXAogICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCVwKICAgICBfRlBfRlJBQ19TRVRfIyN3YyhSLCBfRlBfTkFORlJBQ18jI2ZzKTsJCVwKLSAgICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQpOwkJCVwKKyAgICBGUF9TRVRfRVhDRVBUSU9OKEZQX0VYX0lOVkFMSUQgfCBGUF9FWF9JTlZBTElEX1pEWik7XAogICAgIGJyZWFrOwkJCQkJCVwKIAkJCQkJCQlcCiAgIGRlZmF1bHQ6CQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tYXRoLWVtdS9zb2Z0LWZwLmggYi9pbmNsdWRlL21hdGgtZW11L3NvZnQtZnAuaAppbmRleCBhNmY4NzNiLi4zZjI4NGJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL21hdGgtZW11L3NvZnQtZnAuaAorKysgYi9pbmNsdWRlL21hdGgtZW11L3NvZnQtZnAuaApAQCAtNTEsNiArNTEsMjUgQEAKICNpZm5kZWYgRlBfRVhfSU5WQUxJRAogI2RlZmluZSBGUF9FWF9JTlZBTElECQkwCiAjZW5kaWYKKyNpZm5kZWYgRlBfRVhfSU5WQUxJRF9TTkFOCisjZGVmaW5lIEZQX0VYX0lOVkFMSURfU05BTgkwCisjZW5kaWYKKy8qIGluZiAtIGluZiAqLworI2lmbmRlZiBGUF9FWF9JTlZBTElEX0lTSQorI2RlZmluZSBGUF9FWF9JTlZBTElEX0lTSQkwCisjZW5kaWYKKy8qIGluZiAvIGluZiAqLworI2lmbmRlZiBGUF9FWF9JTlZBTElEX0lESQorI2RlZmluZSBGUF9FWF9JTlZBTElEX0lESQkwCisjZW5kaWYKKy8qIDAgLyAwICovCisjaWZuZGVmIEZQX0VYX0lOVkFMSURfWkRaCisjZGVmaW5lIEZQX0VYX0lOVkFMSURfWkRaCTAKKyNlbmRpZgorLyogaW5mICogMCAqLworI2lmbmRlZiBGUF9FWF9JTlZBTElEX0lNWgorI2RlZmluZSBGUF9FWF9JTlZBTElEX0lNWgkwCisjZW5kaWYKICNpZm5kZWYgRlBfRVhfT1ZFUkZMT1cKICNkZWZpbmUgRlBfRVhfT1ZFUkZMT1cJCTAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKaW5kZXggYjhlOGFhOS4uMzhmMmQ5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjZGVmaW5lIElSX1RZUEVfUkM1ICAgICAxCiAjZGVmaW5lIElSX1RZUEVfUEQgICAgICAyIC8qIFB1bHNlIGRpc3RhbmNlIGVuY29kZWQgSVIgKi8KQEAgLTg1LDYgKzg2LDEwIEBACiAJdTMyIGNvZGU7CQkJLyogcmF3IGNvZGUgdW5kZXIgY29uc3RydWN0aW9uICovCiAJc3RydWN0IHRpbWV2YWwgYmFzZV90aW1lOwkvKiB0aW1lIG9mIGxhc3Qgc2VlbiBjb2RlICovCiAJaW50IGFjdGl2ZTsJCQkvKiBidWlsZGluZyByYXcgY29kZSAqLworCisJLyogTkVDIGRlY29kaW5nICovCisJdTMyCQkJbmVjX2dwaW87CisJc3RydWN0IHRhc2tsZXRfc3RydWN0ICAgdGxldDsKIH07CiAKIHZvaWQgaXJfaW5wdXRfaW5pdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIsCkBAIC0xMDUsNiArMTEwLDcgQEAKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbXB0eVtJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFfZHZidFtJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hcGFjX3ZpZXdjb21wW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19waXhlbHZpZXdbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3BpeGVsdmlld19uZXdbSVJfS0VZVEFCX1NJWkVdOwpAQCAtMTM5LDYgKzE0NSw3IEBACiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYnVkZ2V0X2NpX29sZFtJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXN1c19wYzM5W0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbmNvcmVfZW5sdHZbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2VuY29yZV9lbmx0djJbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3R0XzE1MDBbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2Z1c2lvbmhkdHZfbWNlW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19iZWhvbGRbSVJfS0VZVEFCX1NJWkVdOwpAQCAtMTQ3LDcgKzE1NCw5IEBACiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZ2VuaXVzX3R2Z29fYTExbWNlW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19wb3dlcmNvbG9yX3JlYWxfYW5nZWxbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9hMTZkW0lSX0tFWVRBQl9TSVpFXTsKLQorZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2VuY29yZV9lbmx0dl9mbTUzW0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19yZWFsX2F1ZGlvXzIyMF8zMl9rZXlzW0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZV9wbHVzW0lSX0tFWVRBQl9TSVpFXTsKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zYWE3MTE1LmggYi9pbmNsdWRlL21lZGlhL3NhYTcxMTUuaAppbmRleCBmNjc3ZGZiLi5iYWIyMTI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NhYTcxMTUuaAorKysgYi9pbmNsdWRlL21lZGlhL3NhYTcxMTUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gICAgc2FhNzExNS5oIC0gZGVmaW5pdGlvbiBmb3Igc2FhNzExMy80LzUgaW5wdXRzIGFuZCBmcmVxdWVuY3kgZmxhZ3MKKyAgICBzYWE3MTE1LmggLSBkZWZpbml0aW9uIGZvciBzYWE3MTExLzMvNC81IGlucHV0cyBhbmQgZnJlcXVlbmN5IGZsYWdzCiAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDYgSGFucyBWZXJrdWlsIChodmVya3VpbEB4czRhbGwubmwpCiAKQEAgLTIxLDEzICsyMSwxMyBAQAogI2lmbmRlZiBfU0FBNzExNV9IXwogI2RlZmluZSBfU0FBNzExNV9IXwogCi0vKiBTQUE3MTEzLzQvNSBIVyBpbnB1dHMgKi8KKy8qIFNBQTcxMTEvMy80LzUgSFcgaW5wdXRzICovCiAjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFMCAwCiAjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFMSAxCiAjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFMiAyCiAjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFMyAzCi0jZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFNCA0IC8qIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBzYWE3MTEzICovCi0jZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFNSA1IC8qIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBzYWE3MTEzICovCisjZGVmaW5lIFNBQTcxMTVfQ09NUE9TSVRFNCA0IC8qIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBzYWE3MTExLzMgKi8KKyNkZWZpbmUgU0FBNzExNV9DT01QT1NJVEU1IDUgLyogbm90IGF2YWlsYWJsZSBmb3IgdGhlIHNhYTcxMTEvMyAqLwogI2RlZmluZSBTQUE3MTE1X1NWSURFTzAgICAgNgogI2RlZmluZSBTQUE3MTE1X1NWSURFTzEgICAgNwogI2RlZmluZSBTQUE3MTE1X1NWSURFTzIgICAgOApAQCAtNDIsOCArNDIsMTUgQEAKICNkZWZpbmUgU0FBNzExNV9GUkVRX0ZMX0NHQ0RJViAoMSA8PCAxKQkgICAvKiBTQSAzQVs2XSwgQ0dDRElWLCBTQUE3MTE1IG9ubHkgKi8KICNkZWZpbmUgU0FBNzExNV9GUkVRX0ZMX0FQTEwgICAoMSA8PCAyKQkgICAvKiBTQSAzQVszXSwgQVBMTCwgU0FBNzExNC81IG9ubHkgKi8KIAotI2RlZmluZSBTQUE3MTE1X0lQT1JUX09OICAgIDEKLSNkZWZpbmUgU0FBNzExNV9JUE9SVF9PRkYgICAwCisjZGVmaW5lIFNBQTcxMTVfSVBPUlRfT04gICAgCTEKKyNkZWZpbmUgU0FBNzExNV9JUE9SVF9PRkYgICAJMAorCisvKiBTQUE3MTExIHNwZWNpZmljIG91dHB1dCBmbGFncyAqLworI2RlZmluZSBTQUE3MTExX1ZCSV9CWVBBU1MgCTIKKyNkZWZpbmUgU0FBNzExMV9GTVRfWVVWNDIyICAgICAgMHgwMAorI2RlZmluZSBTQUE3MTExX0ZNVF9SR0IgCTB4NDAKKyNkZWZpbmUgU0FBNzExMV9GTVRfQ0NJUiAJMHg4MAorI2RlZmluZSBTQUE3MTExX0ZNVF9ZVVY0MTEgCTB4YzAKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKaW5kZXggMmY2OGY0Yy4uYzVhNmUyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKQEAgLTI0LDEzICsyNCwxMyBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IHNhYTcxNDZfZGVidWc7CiAKLS8vI2RlZmluZSBERUJVR19QUk9MT0cgcHJpbnRrKCIoMHglMDh4KSgweCUwOHgpICVzOiAlcygpOiAiLChkZXY9PTA/LTE6KGRldi0+bWVtPT0wPy0xOnNhYTcxNDZfcmVhZChkZXYsUlBTX0FERFIwKSkpLChkZXY9PTA/LTE6KGRldi0+bWVtPT0wPy0xOnNhYTcxNDZfcmVhZChkZXYsSUVSKSkpLEtCVUlMRF9NT0ROQU1FLF9fRlVOQ1RJT05fXykKKy8vI2RlZmluZSBERUJVR19QUk9MT0cgcHJpbnRrKCIoMHglMDh4KSgweCUwOHgpICVzOiAlcygpOiAiLChkZXY9PTA/LTE6KGRldi0+bWVtPT0wPy0xOnNhYTcxNDZfcmVhZChkZXYsUlBTX0FERFIwKSkpLChkZXY9PTA/LTE6KGRldi0+bWVtPT0wPy0xOnNhYTcxNDZfcmVhZChkZXYsSUVSKSkpLEtCVUlMRF9NT0ROQU1FLF9fZnVuY19fKQogCiAjaWZuZGVmIERFQlVHX1ZBUklBQkxFCiAJI2RlZmluZSBERUJVR19WQVJJQUJMRSBzYWE3MTQ2X2RlYnVnCiAjZW5kaWYKIAotI2RlZmluZSBERUJVR19QUk9MT0cgcHJpbnRrKCIlczogJXMoKTogIixLQlVJTERfTU9ETkFNRSxfX0ZVTkNUSU9OX18pCisjZGVmaW5lIERFQlVHX1BST0xPRyBwcmludGsoIiVzOiAlcygpOiAiLEtCVUlMRF9NT0ROQU1FLCBfX2Z1bmNfXykKICNkZWZpbmUgSU5GTyh4KSB7IHByaW50aygiJXM6ICIsS0JVSUxEX01PRE5BTUUpOyBwcmludGsgeDsgfQogCiAjZGVmaW5lIEVSUih4KSB7IERFQlVHX1BST0xPRzsgcHJpbnRrIHg7IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2hfbW9iaWxlX2NldS5oIGIvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKaW5kZXggMjM0YTQ3MS4uYjVkYmVmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKQEAgLTUsOCArNSw2IEBACiAKIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2luZm8gewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7IC8qIFNPQ0FNXy4uLiAqLwotCXZvaWQgKCplbmFibGVfY2FtZXJhKSh2b2lkKTsKLQl2b2lkICgqZGlzYWJsZV9jYW1lcmEpKHZvaWQpOwogfTsKIAogI2VuZGlmIC8qIF9fQVNNX1NIX01PQklMRV9DRVVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmEuaCBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oCmluZGV4IGQ1NDhkZTMuLmM1ZGU3YmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oCkBAIC04Myw2ICs4Myw5IEBACiAJaW50IGJ1c19pZDsKIAkvKiBHUElPIG51bWJlciB0byBzd2l0Y2ggYmV0d2VlbiA4IGFuZCAxMCBiaXQgbW9kZXMgKi8KIAl1bnNpZ25lZCBpbnQgZ3BpbzsKKwkvKiBPcHRpb25hbCBjYWxsYmFja3MgdG8gcG93ZXIgb24gb3Igb2ZmIGFuZCByZXNldCB0aGUgc2Vuc29yICovCisJaW50ICgqcG93ZXIpKHN0cnVjdCBkZXZpY2UgKiwgaW50KTsKKwlpbnQgKCpyZXNldCkoc3RydWN0IGRldmljZSAqKTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICp0b19zb2NfY2FtZXJhX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaCBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCmluZGV4IDg1MWYxODIuLjFkMDkyYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oCkBAIC0xLDMgKzEsMTMgQEAKKy8qCisgKiBHZW5lcmljIFBsYXRmb3JtIENhbWVyYSBEcml2ZXIgSGVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCiAjaWZuZGVmIF9fU09DX0NBTUVSQV9IX18KICNkZWZpbmUgX19TT0NfQ0FNRVJBX0hfXwogCkBAIC05LDYgKzE5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZvcm1hdF9kZXB0aDsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGZvcm1hdDsKIAl1bnNpZ25lZCBsb25nIGJ1c19wYXJhbTsKKwl2b2lkICgqcG93ZXIpKGludCk7CiAJaW50ICgqc2V0X2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKmluZm8sIGludCBlbmFibGUpOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dW5lci5oIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCmluZGV4IDc3MDY4ZmMuLjdkNGUyZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAorKysgYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKQEAgLTEyMiw2ICsxMjIsOCBAQAogI2RlZmluZSBUVU5FUl9UREE5ODg3ICAgICAgICAgICAgICAgICAgIDc0ICAgICAgLyogVGhpcyB0dW5lciBzaG91bGQgYmUgdXNlZCBvbmx5IGludGVybmFsbHkgKi8KICNkZWZpbmUgVFVORVJfVEVBNTc2MQkJCTc1CS8qIE9ubHkgRk0gUmFkaW8gVHVuZXIgKi8KICNkZWZpbmUgVFVORVJfWEM1MDAwCQkJNzYJLyogWGNlaXZlIFNpbGljb24gVHVuZXIgKi8KKyNkZWZpbmUgVFVORVJfVENMX01GMDJHSVBfNU4JCTc3CS8qIFRDTCBNRjAyR0lQXzVOICovCisjZGVmaW5lIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FWF9NSzMJNzgKIAogLyogdHYgY2FyZCBzcGVjaWZpYyAqLwogI2RlZmluZSBUREE5ODg3X1BSRVNFTlQgCQkoMTw8MCkKQEAgLTE3OCw3ICsxODAsNyBAQAogCXVuc2lnbmVkIGludAl0eXBlOyAgIC8qIFR1bmVyIHR5cGUgKi8KIAl1bnNpZ25lZCBpbnQJbW9kZV9tYXNrOyAgLyogQWxsb3dlZCB0dW5lciBtb2RlcyAqLwogCXVuc2lnbmVkIGludAljb25maWc7IC8qIGNvbmZpZ3VyYWlvbiBmb3IgbW9yZSBjb21wbGV4IHR1bmVycyAqLwotCWludCAoKnR1bmVyX2NhbGxiYWNrKSAodm9pZCAqZGV2LCBpbnQgY29tbWFuZCxpbnQgYXJnKTsKKwlpbnQgKCp0dW5lcl9jYWxsYmFjaykgKHZvaWQgKmRldiwgaW50IGNvbXBvbmVudCwgaW50IGNtZCwgaW50IGFyZyk7CiB9OwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKaW5kZXggNDFiNTA5Yi4uZDczYThlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCkBAIC03Miw2ICs3MiwxMCBAQAogCS8qIG1vZHVsZSBjczUzNDU6IGp1c3QgaWRlbnQgNTM0NSAqLwogCVY0TDJfSURFTlRfQ1M1MzQ1ID0gNTM0NSwKIAorCS8qIG1vZHVsZSBzYWE2NzUyaHM6IHJlc2VydmVkIHJhbmdlIDY3NTAtNjc1OSAqLworCVY0TDJfSURFTlRfU0FBNjc1MkhTID0gNjc1MiwKKwlWNEwyX0lERU5UX1NBQTY3NTJIU19BQzMgPSA2NzUzLAorCiAJLyogbW9kdWxlIHdtODczOToganVzdCBpZGVudCA4NzM5ICovCiAJVjRMMl9JREVOVF9XTTg3MzkgPSA4NzM5LAogCkBAIC0xNjEsNiArMTY1LDcgQEAKIAkvKiBNaWNyb24gQ01PUyBzZW5zb3IgY2hpcHM6IDQ1MDAwLTQ1MDk5ICovCiAJVjRMMl9JREVOVF9NVDlNMDAxQzEyU1QJCT0gNDUwMDAsCiAJVjRMMl9JREVOVF9NVDlNMDAxQzEyU1RNCT0gNDUwMDUsCisJVjRMMl9JREVOVF9NVDlNMTExCQk9IDQ1MDA3LAogCVY0TDJfSURFTlRfTVQ5VjAyMklYN0FUQwk9IDQ1MDEwLCAvKiBObyB3YXkgdG8gZGV0ZWN0ICJub3JtYWwiIEk3N0FUeCAqLwogCVY0TDJfSURFTlRfTVQ5VjAyMklYN0FUTQk9IDQ1MDE1LCAvKiBhbmQgImxlYWQgZnJlZSIgSUE3QVR4IGNoaXBzICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCmluZGV4IDA3ZDNhOWEuLjJmODcxOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKQEAgLTc2LDExICs3NiwxNCBAQAogCiBpbnQgdjRsMl9jdHJsX2NoZWNrKHN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsLAogCQljb25zdCBjaGFyICoqbWVudV9pdGVtcyk7Citjb25zdCBjaGFyICp2NGwyX2N0cmxfZ2V0X25hbWUodTMyIGlkKTsKIGNvbnN0IGNoYXIgKip2NGwyX2N0cmxfZ2V0X21lbnUodTMyIGlkKTsKIGludCB2NGwyX2N0cmxfcXVlcnlfZmlsbChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsLCBzMzIgbWluLCBzMzIgbWF4LCBzMzIgc3RlcCwgczMyIGRlZik7CiBpbnQgdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpOwogaW50IHY0bDJfY3RybF9xdWVyeV9tZW51KHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUsCiAJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwsIGNvbnN0IGNoYXIgKiptZW51X2l0ZW1zKTsKKyNkZWZpbmUgVjRMMl9DVFJMX01FTlVfSURTX0VORCAoMHhmZmZmZmZmZikKK2ludCB2NGwyX2N0cmxfcXVlcnlfbWVudV92YWxpZF9pdGVtcyhzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51LCBjb25zdCB1MzIgKmlkcyk7CiB1MzIgdjRsMl9jdHJsX25leHQoY29uc3QgdTMyICogY29uc3QgKmN0cmxfY2xhc3NlcywgdTMyIGlkKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjIyLDE4ICsyMjUsMjIgQEAKICAgIEFuIGV4dHJhIGZsYWdzIGZpZWxkIGFsbG93cyBkZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZWdhcmRpbmcKICAgIGNsb2NrIGZyZXF1ZW5jeSBkaXZpZGVycywgZXRjLiBJZiBub3QgdXNlZCwgdGhlbiBzZXQgZmxhZ3MgdG8gMC4KICAgIElmIHRoZSBmcmVxdWVuY3kgaXMgbm90IHN1cHBvcnRlZCwgdGhlbiAtRUlOVkFMIGlzIHJldHVybmVkLiAqLwotI2RlZmluZSBWSURJT0NfSU5UX1NfQ1JZU1RBTF9GUkVRIAlfSU9XICgnZCcsIDExMywgc3RydWN0IHY0bDJfY3J5c3RhbF9mcmVxKQorI2RlZmluZSBWSURJT0NfSU5UX1NfQ1JZU1RBTF9GUkVRIAlfSU9XKCdkJywgMTEzLCBzdHJ1Y3QgdjRsMl9jcnlzdGFsX2ZyZXEpCiAKIC8qIEluaXRpYWxpemUgdGhlIHNlbnNvciByZWdpc3RvcnMgdG8gc29tZSBzb3J0IG9mIHJlYXNvbmFibGUKICAgIGRlZmF1bHQgdmFsdWVzLiAqLwotI2RlZmluZSBWSURJT0NfSU5UX0lOSVQJCQlfSU9XICgnZCcsIDExNCwgdTMyKQorI2RlZmluZSBWSURJT0NfSU5UX0lOSVQJCQlfSU9XKCdkJywgMTE0LCB1MzIpCiAKIC8qIFNldCB2NGwyX3N0ZF9pZCBmb3IgdmlkZW8gT1VUUFVUIGRldmljZXMuIFRoaXMgaXMgaWdub3JlZCBieQogICAgdmlkZW8gaW5wdXQgZGV2aWNlcy4gKi8KLSNkZWZpbmUgVklESU9DX0lOVF9TX1NURF9PVVRQVVQJCV9JT1cgICgnZCcsIDExNSwgdjRsMl9zdGRfaWQpCisjZGVmaW5lIFZJRElPQ19JTlRfU19TVERfT1VUUFVUCQlfSU9XKCdkJywgMTE1LCB2NGwyX3N0ZF9pZCkKIAogLyogR2V0IHY0bDJfc3RkX2lkIGZvciB2aWRlbyBPVVRQVVQgZGV2aWNlcy4gVGhpcyBpcyBpZ25vcmVkIGJ5CiAgICB2aWRlbyBpbnB1dCBkZXZpY2VzLiAqLwotI2RlZmluZSBWSURJT0NfSU5UX0dfU1REX09VVFBVVAkJX0lPVyAgKCdkJywgMTE2LCB2NGwyX3N0ZF9pZCkKKyNkZWZpbmUgVklESU9DX0lOVF9HX1NURF9PVVRQVVQJCV9JT1coJ2QnLCAxMTYsIHY0bDJfc3RkX2lkKQorCisvKiBTZXQgR1BJTyBwaW5zLiBWZXJ5IHNpbXBsZSByaWdodCBub3csIG1pZ2h0IG5lZWQgdG8gYmUgZXh0ZW5kZWQgd2l0aAorICAgYSB2NGwyX2dwaW8gc3RydWN0IGlmIGEgZGlyZWN0aW9uIGlzIGFsc28gbmVlZGVkLiAqLworI2RlZmluZSBWSURJT0NfSU5UX1NfR1BJTwkJX0lPVygnZCcsIDExNywgdTMyKQogCiAjZW5kaWYgLyogVjRMMl9DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAppbmRleCAyNzQ1ZTFhLi5hMGE2YjQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCkBAIC05LDMwICs5LDIwIEBACiAjaWZuZGVmIF9WNEwyX0RFVl9ICiAjZGVmaW5lIF9WNEwyX0RFVl9ICiAKLSNkZWZpbmUgT0JTT0xFVEVfREVWREFUQSAxIC8qIHRvIGJlIHJlbW92ZWQgc29vbiAqLwotCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4gLyogbmVlZCBfX3VzZXIgKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KIAogI2RlZmluZSBWSURFT19NQUpPUgk4MQotLyogTWlub3IgZGV2aWNlIGFsbG9jYXRpb24gKi8KLSNkZWZpbmUgTUlOT1JfVkZMX1RZUEVfR1JBQkJFUl9NSU4gICAwCi0jZGVmaW5lIE1JTk9SX1ZGTF9UWVBFX0dSQUJCRVJfTUFYICA2MwotI2RlZmluZSBNSU5PUl9WRkxfVFlQRV9SQURJT19NSU4gICAgNjQKLSNkZWZpbmUgTUlOT1JfVkZMX1RZUEVfUkFESU9fTUFYICAgMTI3Ci0jZGVmaW5lIE1JTk9SX1ZGTF9UWVBFX1ZUWF9NSU4gICAgIDE5MgotI2RlZmluZSBNSU5PUl9WRkxfVFlQRV9WVFhfTUFYICAgICAyMjMKLSNkZWZpbmUgTUlOT1JfVkZMX1RZUEVfVkJJX01JTiAgICAgMjI0Ci0jZGVmaW5lIE1JTk9SX1ZGTF9UWVBFX1ZCSV9NQVggICAgIDI1NQogCiAjZGVmaW5lIFZGTF9UWVBFX0dSQUJCRVIJMAogI2RlZmluZSBWRkxfVFlQRV9WQkkJCTEKICNkZWZpbmUgVkZMX1RZUEVfUkFESU8JCTIKICNkZWZpbmUgVkZMX1RZUEVfVlRYCQkzCisjZGVmaW5lIFZGTF9UWVBFX01BWAkJNAogCiBzdHJ1Y3QgdjRsMl9pb2N0bF9jYWxsYmFja3M7CiAKQEAgLTQ5LDEyICszOSwxNSBAQAogCiAJLyogc3lzZnMgKi8KIAlzdHJ1Y3QgZGV2aWNlIGRldjsJCS8qIHY0bCBkZXZpY2UgKi8KKwlzdHJ1Y3QgY2RldiBjZGV2OwkJLyogY2hhcmFjdGVyIGRldmljZSAqLworCXZvaWQgKCpjZGV2X3JlbGVhc2UpKHN0cnVjdCBrb2JqZWN0ICprb2JqKTsKIAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7CQkvKiBkZXZpY2UgcGFyZW50ICovCiAKIAkvKiBkZXZpY2UgaW5mbyAqLwogCWNoYXIgbmFtZVszMl07CiAJaW50IHZmbF90eXBlOwogCWludCBtaW5vcjsKKwl1MTYgbnVtOwogCS8qIGF0dHJpYnV0ZSB0byBkaWZmZXJlbnRpYXRlIG11bHRpcGxlIGluZGljZXMgb24gb25lIHBoeXNpY2FsIGRldmljZSAqLwogCWludCBpbmRleDsKIApAQCAtNjksNTAgKzYyLDUwIEBACiAKIAkvKiBpb2N0bCBjYWxsYmFja3MgKi8KIAljb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgKmlvY3RsX29wczsKLQotI2lmZGVmIE9CU09MRVRFX0RFVkRBVEEgLyogdG8gYmUgcmVtb3ZlZCBzb29uICovCi0JLyogZGV2LT5kcml2ZXJfZGF0YSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBzb21lIGRheS4KLQkgKiBVc2UgdGhlIHZpZGVvX3tnZXR8c2V0fV9kcnZkYXRhKCkgaGVscGVyIGZ1bmN0aW9ucywKLQkgKiBzbyB0aGUgc3dpdGNoIG92ZXIgd2lsbCBiZSB0cmFuc3BhcmVudCBmb3IgeW91LgotCSAqIE9yIHVzZSB7cGNpfHVzYn1fe2dldHxzZXR9X2RydmRhdGEoKSBkaXJlY3RseS4gKi8KLQl2b2lkICpwcml2OwotI2VuZGlmCi0KLQkvKiBmb3IgdmlkZW9kZXYuYyBpbnRlcm5hbCB1c2FnZSAtLSBwbGVhc2UgZG9uJ3QgdG91Y2ggKi8KLQlpbnQgdXNlcnM7ICAgICAgICAgICAgICAgICAgICAgLyogdmlkZW9fZXhjbHVzaXZlX3tvcGVufGNsb3NlfSAuLi4gKi8KLQlzdHJ1Y3QgbXV0ZXggbG9jazsgICAgICAgICAgICAgLyogLi4uIGhlbHBlciBmdW5jdGlvbiB1c2VzIHRoZXNlICAgKi8KIH07CiAKLS8qIENsYXNzLWRldiB0byB2aWRlby1kZXZpY2UgKi8KKy8qIGRldiB0byB2aWRlby1kZXZpY2UgKi8KICNkZWZpbmUgdG9fdmlkZW9fZGV2aWNlKGNkKSBjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsIGRldikKIAotLyogVmVyc2lvbiAyIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIGludCB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkLCBpbnQgdHlwZSwgaW50IG5yKTsKLWludCB2aWRlb19yZWdpc3Rlcl9kZXZpY2VfaW5kZXgoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkLCBpbnQgdHlwZSwgaW50IG5yLAotCQkJCQlpbnQgaW5kZXgpOwotdm9pZCB2aWRlb191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICopOworLyogUmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgZGV2aWNlcy4gTm90ZSB0aGF0IGlmIHZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlscywKKyAgIHRoZSByZWxlYXNlKCkgY2FsbGJhY2sgb2YgdGhlIHZpZGVvX2RldmljZSBzdHJ1Y3R1cmUgaXMgKm5vdCogY2FsbGVkLCBzbworICAgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBhbnkgZGF0YS4gVXN1YWxseSB0aGF0IG1lYW5zIHRoYXQKKyAgIHlvdSBjYWxsIHZpZGVvX2RldmljZV9yZWxlYXNlKCkgb24gZmFpbHVyZS4gKi8KK2ludCBfX211c3RfY2hlY2sgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwgaW50IHR5cGUsIGludCBucik7CitpbnQgX19tdXN0X2NoZWNrIHZpZGVvX3JlZ2lzdGVyX2RldmljZV9pbmRleChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQsCisJCQkJCQlpbnQgdHlwZSwgaW50IG5yLCBpbnQgaW5kZXgpOwordm9pZCB2aWRlb191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQpOwogCi0vKiBoZWxwZXIgZnVuY3Rpb25zIHRvIGFsbG9jIC8gcmVsZWFzZSBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCB0aGUKLSAgIGxhdGVyIGNhbiBiZSB1c2VkIGZvciB2aWRlb19kZXZpY2UtPnJlbGVhc2UoKSAqLwotc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2aWNlX2FsbG9jKHZvaWQpOworLyogaGVscGVyIGZ1bmN0aW9ucyB0byBhbGxvYy9yZWxlYXNlIHN0cnVjdCB2aWRlb19kZXZpY2UsIHRoZQorICAgbGF0dGVyIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHZpZGVvX2RldmljZS0+cmVsZWFzZSgpLiAqLworc3RydWN0IHZpZGVvX2RldmljZSAqIF9fbXVzdF9jaGVjayB2aWRlb19kZXZpY2VfYWxsb2Modm9pZCk7CisKKy8qIHRoaXMgcmVsZWFzZSBmdW5jdGlvbiBmcmVlcyB0aGUgdmZkIHBvaW50ZXIgKi8KIHZvaWQgdmlkZW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKTsKIAotI2lmZGVmIE9CU09MRVRFX0RFVkRBVEEgLyogdG8gYmUgcmVtb3ZlZCBzb29uICovCisvKiB0aGlzIHJlbGVhc2UgZnVuY3Rpb24gZG9lcyBub3RoaW5nLCB1c2Ugd2hlbiB0aGUgdmlkZW9fZGV2aWNlIGlzIGEKKyAgIHN0YXRpYyBnbG9iYWwgc3RydWN0LiBOb3RlIHRoYXQgaGF2aW5nIGEgc3RhdGljIHZpZGVvX2RldmljZSBpcworICAgYSBkdWJpb3VzIGNvbnN0cnVjdGlvbiBhdCBiZXN0LiAqLwordm9pZCB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQpOworCiAvKiBoZWxwZXIgZnVuY3Rpb25zIHRvIGFjY2VzcyBkcml2ZXIgcHJpdmF0ZSBkYXRhLiAqLwogc3RhdGljIGlubGluZSB2b2lkICp2aWRlb19nZXRfZHJ2ZGF0YShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGRldi0+cHJpdjsKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2aWRlb19zZXRfZHJ2ZGF0YShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JZGV2LT5wcml2ID0gZGF0YTsKKwlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBkYXRhKTsKIH0KIAotLyogT2Jzb2xldGUgc3R1ZmYgLSBTdGlsbCBuZWVkZWQgZm9yIHJhZGlvIGRldmljZXMgYW5kIG9ic29sZXRlIGRyaXZlcnMgKi8KLWV4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlKiB2aWRlb19kZXZkYXRhKHN0cnVjdCBmaWxlKik7Ci1leHRlcm4gaW50IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLWV4dGVybiBpbnQgdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotI2VuZGlmCitzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXZkYXRhKHN0cnVjdCBmaWxlICpmaWxlKTsKKworLyogQ29tYmluZSB2aWRlb19nZXRfZHJ2ZGF0YSBhbmQgdmlkZW9fZGV2ZGF0YSBhcyB0aGlzIGlzCisgICB1c2VkIHZlcnkgb2Z0ZW4uICovCitzdGF0aWMgaW5saW5lIHZvaWQgKnZpZGVvX2RydmRhdGEoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworfQogCiAjZW5kaWYgLyogX1Y0TDJfREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5LmgKaW5kZXggOTc1ZmZiZi4uZTY1ZGQ5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5LmgKQEAgLTIxLDYgKzIxLDE3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisvKiBOT1RFOiB0aGUgZnVsbCB2ZXJzaW9uIG9mIHRoaXMgaGVhZGVyIGlzIGluIHRoZSB2NGwtZHZiIHJlcG9zaXRvcnkKKyAqIGFuZCBhbGxvd3MgdjRsIGkyYyBkcml2ZXJzIHRvIGJlIGNvbXBpbGVkIG9uIG9sZGVyIGtlcm5lbHMgYXMgd2VsbC4KKyAqIFRoZSB2ZXJzaW9uIG9mIHRoaXMgaGVhZGVyIGFzIGl0IGFwcGVhcnMgaW4gdGhlIGtlcm5lbCBpcyBhIHN0cmlwcGVkCisgKiB2ZXJzaW9uICh3aXRob3V0IGFsbCB0aGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgc3R1ZmYpIGFuZCBzbyBpdAorICogbG9va3MgYSBiaXQgb2RkLgorICoKKyAqIElmIHlvdSBsb29rIGF0IHRoZSBmdWxsIHZlcnNpb24gdGhlbiB5b3Ugd2lsbCB1bmRlcnN0YW5kIHRoZSByZWFzb24KKyAqIGZvciBpbnRyb2R1Y2luZyB0aGlzIGhlYWRlciBzaW5jZSB5b3UgcmVhbGx5IGRvbid0IHdhbnQgdG8gaGF2ZSBhbGwKKyAqIHRoZSB0cmlja3kgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgY29kZSBpbiBlYWNoIGFuZCBldmVyeSBpMmMgZHJpdmVyLgorICovCisKIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB7CiAJY29uc3QgY2hhciAqIGNvbnN0IG5hbWU7CiAJaW50IGRyaXZlcmlkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pMmMtZHJ2LmgKaW5kZXggNDBlY2VmMi4uZWZkYzhiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi5oCkBAIC0yMSw2ICsyMSwxNyBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAorLyogTk9URTogdGhlIGZ1bGwgdmVyc2lvbiBvZiB0aGlzIGhlYWRlciBpcyBpbiB0aGUgdjRsLWR2YiByZXBvc2l0b3J5CisgKiBhbmQgYWxsb3dzIHY0bCBpMmMgZHJpdmVycyB0byBiZSBjb21waWxlZCBvbiBvbGRlciBrZXJuZWxzIGFzIHdlbGwuCisgKiBUaGUgdmVyc2lvbiBvZiB0aGlzIGhlYWRlciBhcyBpdCBhcHBlYXJzIGluIHRoZSBrZXJuZWwgaXMgYSBzdHJpcHBlZAorICogdmVyc2lvbiAod2l0aG91dCBhbGwgdGhlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHN0dWZmKSBhbmQgc28gaXQKKyAqIGxvb2tzIGEgYml0IG9kZC4KKyAqCisgKiBJZiB5b3UgbG9vayBhdCB0aGUgZnVsbCB2ZXJzaW9uIHRoZW4geW91IHdpbGwgdW5kZXJzdGFuZCB0aGUgcmVhc29uCisgKiBmb3IgaW50cm9kdWNpbmcgdGhpcyBoZWFkZXIgc2luY2UgeW91IHJlYWxseSBkb24ndCB3YW50IHRvIGhhdmUgYWxsCisgKiB0aGUgdHJpY2t5IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGNvZGUgaW4gZWFjaCBhbmQgZXZlcnkgaTJjIGRyaXZlci4KKyAqLworCiAjaWZuZGVmIF9fVjRMMl9JMkNfRFJWX0hfXwogI2RlZmluZSBfX1Y0TDJfSTJDX0RSVl9IX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWlvY3RsLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaAppbmRleCBkYzY0MDQ2Li4wYmVmMDNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaApAQCAtMzksMTEgKzM5LDYgQEAKIAkJCQkJICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpOwogCWludCAoKnZpZGlvY19lbnVtX2ZtdF92aWRfb3V0KSAgICAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpOwotI2lmIDEKLQkvKiBkZXByZWNhdGVkLCB3aWxsIGJlIHJlbW92ZWQgaW4gMi42LjI4ICovCi0JaW50ICgqdmlkaW9jX2VudW1fZm10X3ZiaV9jYXApICAgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAotCQkJCQkgICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZik7Ci0jZW5kaWYKIAlpbnQgKCp2aWRpb2NfZW51bV9mbXRfdHlwZV9wcml2YXRlKShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCSAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kdmIuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtZHZiLmgKaW5kZXggYjc3NzQ4Ni4uODA0NzFjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kdmIuaAorKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWR2Yi5oCkBAIC0xNiw3ICsxNiw2IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgbmZlZWRzOwogCiAJLyogdmlkZW9idWZfZHZiXyh1bilyZWdpc3RlciBtYW5nZXMgdGhpcyAqLwotCXN0cnVjdCBkdmJfYWRhcHRlciAgICAgICAgIGFkYXB0ZXI7CiAJc3RydWN0IGR2Yl9kZW11eCAgICAgICAgICAgZGVtdXg7CiAJc3RydWN0IGRteGRldiAgICAgICAgICAgICAgZG14ZGV2OwogCXN0cnVjdCBkbXhfZnJvbnRlbmQgICAgICAgIGZlX2h3OwpAQCAtMjQsMTIgKzIzLDM0IEBACiAJc3RydWN0IGR2Yl9uZXQgICAgICAgICAgICAgbmV0OwogfTsKIAotaW50IHZpZGVvYnVmX2R2Yl9yZWdpc3RlcihzdHJ1Y3QgdmlkZW9idWZfZHZiICpkdmIsCitzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZlbGlzdDsKKwlpbnQgaWQ7CisJc3RydWN0IHZpZGVvYnVmX2R2YiBkdmI7Cit9OworCitzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyB7CisJc3RydWN0IGxpc3RfaGVhZCBmZWxpc3Q7CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IGR2Yl9hZGFwdGVyIGFkYXB0ZXI7CisJaW50IGFjdGl2ZV9mZV9pZDsgLyogSW5kaWNhdGVzIHdoaWNoIGZyb250ZW5kIGluIHRoZSBmZWxpc3QgaXMgaW4gdXNlICovCisJaW50IGdhdGU7IC8qIEZyb250ZW5kIHdpdGggZ2F0ZSBjb250cm9sIDA9IU1GRSwxPWZlMCwyPWZlMSBldGMgKi8KK307CisKK2ludCB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmLAogCQkJICBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsCiAJCQkgIHZvaWQgKmFkYXB0ZXJfcHJpdiwKIAkJCSAgc3RydWN0IGRldmljZSAqZGV2aWNlLAotCQkJICBzaG9ydCAqYWRhcHRlcl9ucik7Ci12b2lkIHZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyKHN0cnVjdCB2aWRlb2J1Zl9kdmIgKmR2Yik7CisJCQkgIHNob3J0ICphZGFwdGVyX25yLAorCQkJICBpbnQgbWZlX3NoYXJlZCk7CisKK3ZvaWQgdmlkZW9idWZfZHZiX3VucmVnaXN0ZXJfYnVzKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmKTsKKworc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqIHZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZChzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwgaW50IGlkKTsKKworc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqIHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsIGludCBpZCk7CitpbnQgdmlkZW9idWZfZHZiX2ZpbmRfZnJvbnRlbmQoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnApOworCiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC85cC5oIGIvaW5jbHVkZS9uZXQvOXAvOXAuaAppbmRleCBjMzYyNmMwLi5kMmM2MGM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC85cC85cC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwLzlwLmgKQEAgLTI3LDggKzI3LDYgQEAKICNpZm5kZWYgTkVUXzlQX0gKICNkZWZpbmUgTkVUXzlQX0gKIAotI2lmZGVmIENPTkZJR19ORVRfOVBfREVCVUcKLQogLyoqCiAgKiBlbnVtIHA5X2RlYnVnX2ZsYWdzIC0gYml0cyBmb3IgbW91bnQgdGltZSBkZWJ1ZyBwYXJhbWV0ZXIKICAqIEBQOV9ERUJVR19FUlJPUjogbW9yZSB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzIGluY2x1ZGluZyBvcmlnaW5hbCBlcnJvciBzdHJpbmcKQEAgLTM5LDYgKzM3LDcgQEAKICAqIEBQOV9ERUJVR19UUkFOUzogdHJhbnNwb3J0IHRyYWNpbmcKICAqIEBQOV9ERUJVR19TTEFCUzogbWVtb3J5IG1hbmFnZW1lbnQgdHJhY2luZwogICogQFA5X0RFQlVHX0ZDQUxMOiB2ZXJib3NlIGR1bXAgb2YgcHJvdG9jb2wgbWVzc2FnZXMKKyAqIEBQOV9ERUJVR19GSUQ6IGZpZCBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiB0cmFja2luZwogICoKICAqIFRoZXNlIGZsYWdzIGFyZSBwYXNzZWQgYXQgbW91bnQgdGltZSB0byB0dXJuIG9uIHZhcmlvdXMgbGV2ZWxzIG9mCiAgKiB2ZXJib3NpdHkgYW5kIHRyYWNpbmcgd2hpY2ggd2lsbCBiZSBvdXRwdXQgdG8gdGhlIHN5c3RlbSBsb2dzLgpAQCAtNTMsMzAgKzUyLDMzIEBACiAJUDlfREVCVUdfVFJBTlMgPQkoMTw8NiksCiAJUDlfREVCVUdfU0xBQlMgPSAgICAgIAkoMTw8NyksCiAJUDlfREVCVUdfRkNBTEwgPQkoMTw8OCksCisJUDlfREVCVUdfRklEID0JCSgxPDw5KSwKKwlQOV9ERUJVR19QS1QgPQkJKDE8PDEwKSwKIH07CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgcDlfZGVidWdfbGV2ZWw7CiAKKyNpZmRlZiBDT05GSUdfTkVUXzlQX0RFQlVHCiAjZGVmaW5lIFA5X0RQUklOVEsobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBcCiBkbyB7ICBcCi0JaWYgKChwOV9kZWJ1Z19sZXZlbCAmIGxldmVsKSA9PSBsZXZlbCkgXAotCQlwcmludGsoS0VSTl9OT1RJQ0UgIi0tICVzICglZCk6ICIgXAotCQlmb3JtYXQgLCBfX0ZVTkNUSU9OX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpICwgIyMgYXJnKTsgXAorCWlmICgocDlfZGVidWdfbGV2ZWwgJiBsZXZlbCkgPT0gbGV2ZWwpIHtcCisJCWlmIChsZXZlbCA9PSBQOV9ERUJVR185UCkgXAorCQkJcHJpbnRrKEtFUk5fTk9USUNFICIoJTguOGQpICIgXAorCQkJZm9ybWF0ICwgdGFza19waWRfbnIoY3VycmVudCkgLCAjIyBhcmcpOyBcCisJCWVsc2UgXAorCQkJcHJpbnRrKEtFUk5fTk9USUNFICItLSAlcyAoJWQpOiAiIFwKKwkJCWZvcm1hdCAsIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSAsICMjIGFyZyk7IFwKKwl9IFwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgUFJJTlRfRkNBTExfRVJST1IocywgZmNhbGwpIFA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsICAgXAotCSIlczogJS4qc1xuIiwgcywgZmNhbGw/ZmNhbGwtPnBhcmFtcy5yZXJyb3IuZXJyb3IubGVuOjAsIFwKLQlmY2FsbD9mY2FsbC0+cGFyYW1zLnJlcnJvci5lcnJvci5zdHI6IiIpOwotCiAjZWxzZQogI2RlZmluZSBQOV9EUFJJTlRLKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUFJJTlRfRkNBTExfRVJST1IocywgZmNhbGwpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjZGVmaW5lIFA5X0VQUklOVEsobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBcCiBkbyB7IFwKIAlwcmludGsobGV2ZWwgIjlwOiAlcyAoJWQpOiAiIFwKLQkJZm9ybWF0ICwgX19GVU5DVElPTl9fLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgIyMgYXJnKTsgXAorCQlmb3JtYXQgLCBfX2Z1bmNfXywgdGFza19waWRfbnIoY3VycmVudCksICMjIGFyZyk7IFwKIH0gd2hpbGUgKDApCiAKIC8qKgpAQCAtMzI1LDMzICszMjcsNiBAQAogICogU2VlIEFsc286IGh0dHA6Ly9wbGFuOS5iZWxsLWxhYnMuY29tL21hZ2ljL21hbjJodG1sLzIvc3RhdAogICovCiAKLXN0cnVjdCBwOV9zdGF0IHsKLQl1MTYgc2l6ZTsKLQl1MTYgdHlwZTsKLQl1MzIgZGV2OwotCXN0cnVjdCBwOV9xaWQgcWlkOwotCXUzMiBtb2RlOwotCXUzMiBhdGltZTsKLQl1MzIgbXRpbWU7Ci0JdTY0IGxlbmd0aDsKLQlzdHJ1Y3QgcDlfc3RyIG5hbWU7Ci0Jc3RydWN0IHA5X3N0ciB1aWQ7Ci0Jc3RydWN0IHA5X3N0ciBnaWQ7Ci0Jc3RydWN0IHA5X3N0ciBtdWlkOwotCXN0cnVjdCBwOV9zdHIgZXh0ZW5zaW9uOwkvKiA5cDIwMDAudSBleHRlbnNpb25zICovCi0JdTMyIG5fdWlkOwkJCS8qIDlwMjAwMC51IGV4dGVuc2lvbnMgKi8KLQl1MzIgbl9naWQ7CQkJLyogOXAyMDAwLnUgZXh0ZW5zaW9ucyAqLwotCXUzMiBuX211aWQ7CQkJLyogOXAyMDAwLnUgZXh0ZW5zaW9ucyAqLwotfTsKLQotLyoKLSAqIGZpbGUgbWV0YWRhdGEgKHN0YXQpIHN0cnVjdHVyZSB1c2VkIHRvIGNyZWF0ZSBUd3N0YXQgbWVzc2FnZQotICogVGhlIGlzIGlkZW50aWNhbCB0byAmcDlfc3RhdCwgYnV0IHRoZSBzdHJpbmdzIGRvbid0IHBvaW50IHRvCi0gKiB0aGUgc2FtZSBtZW1vcnkgYmxvY2sgYW5kIHNob3VsZCBiZSBmcmVlZCBzZXBhcmF0ZWx5Ci0gKgotICogU2VlIEFsc286IGh0dHA6Ly9wbGFuOS5iZWxsLWxhYnMuY29tL21hZ2ljL21hbjJodG1sLzIvc3RhdAotICovCi0KIHN0cnVjdCBwOV93c3RhdCB7CiAJdTE2IHNpemU7CiAJdTE2IHR5cGU7CkBAIC00OTMsMTIgKzQ2OCwxMiBAQAogfTsKIAogc3RydWN0IHA5X3JzdGF0IHsKLQlzdHJ1Y3QgcDlfc3RhdCBzdGF0OworCXN0cnVjdCBwOV93c3RhdCBzdGF0OwogfTsKIAogc3RydWN0IHA5X3R3c3RhdCB7CiAJdTMyIGZpZDsKLQlzdHJ1Y3QgcDlfc3RhdCBzdGF0OworCXN0cnVjdCBwOV93c3RhdCBzdGF0OwogfTsKIAogc3RydWN0IHA5X3J3c3RhdCB7CkBAIC01MDksOCArNDg0LDkgQEAKICAqIEBzaXplOiBwcmVmaXhlZCBsZW5ndGggb2YgdGhlIHN0cnVjdHVyZQogICogQGlkOiBwcm90b2NvbCBvcGVyYXRpbmcgaWRlbnRpZmllciBvZiB0eXBlICZwOV9tc2dfdAogICogQHRhZzogdHJhbnNhY3Rpb24gaWQgb2YgdGhlIHJlcXVlc3QKKyAqIEBvZmZzZXQ6IHVzZWQgYnkgbWFyc2hhbGxpbmcgcm91dGluZXMgdG8gdHJhY2sgY3VycmVudHBvc2l0aW9uIGluIGJ1ZmZlcgorICogQGNhcGFjaXR5OiB1c2VkIGJ5IG1hcnNoYWxsaW5nIHJvdXRpbmVzIHRvIHRyYWNrIHRvdGFsIGNhcGFjaXR5CiAgKiBAc2RhdGE6IHBheWxvYWQKLSAqIEBwYXJhbXM6IHBlci1vcGVyYXRpb24gcGFyYW1ldGVycwogICoKICAqICZwOV9mY2FsbCByZXByZXNlbnRzIHRoZSBzdHJ1Y3R1cmUgZm9yIGFsbCA5UCBSUEMKICAqIHRyYW5zYWN0aW9ucy4gIFJlcXVlc3RzIGFyZSBwYWNrYWdlZCBpbnRvIGZjYWxscywgYW5kIHJlcG9uc2VzCkBAIC01MjMsNjggKzQ5OSwxNSBAQAogCXUzMiBzaXplOwogCXU4IGlkOwogCXUxNiB0YWc7Ci0Jdm9pZCAqc2RhdGE7CiAKLQl1bmlvbiB7Ci0JCXN0cnVjdCBwOV90dmVyc2lvbiB0dmVyc2lvbjsKLQkJc3RydWN0IHA5X3J2ZXJzaW9uIHJ2ZXJzaW9uOwotCQlzdHJ1Y3QgcDlfdGF1dGggdGF1dGg7Ci0JCXN0cnVjdCBwOV9yYXV0aCByYXV0aDsKLQkJc3RydWN0IHA5X3JlcnJvciByZXJyb3I7Ci0JCXN0cnVjdCBwOV90Zmx1c2ggdGZsdXNoOwotCQlzdHJ1Y3QgcDlfcmZsdXNoIHJmbHVzaDsKLQkJc3RydWN0IHA5X3RhdHRhY2ggdGF0dGFjaDsKLQkJc3RydWN0IHA5X3JhdHRhY2ggcmF0dGFjaDsKLQkJc3RydWN0IHA5X3R3YWxrIHR3YWxrOwotCQlzdHJ1Y3QgcDlfcndhbGsgcndhbGs7Ci0JCXN0cnVjdCBwOV90b3BlbiB0b3BlbjsKLQkJc3RydWN0IHA5X3JvcGVuIHJvcGVuOwotCQlzdHJ1Y3QgcDlfdGNyZWF0ZSB0Y3JlYXRlOwotCQlzdHJ1Y3QgcDlfcmNyZWF0ZSByY3JlYXRlOwotCQlzdHJ1Y3QgcDlfdHJlYWQgdHJlYWQ7Ci0JCXN0cnVjdCBwOV9ycmVhZCBycmVhZDsKLQkJc3RydWN0IHA5X3R3cml0ZSB0d3JpdGU7Ci0JCXN0cnVjdCBwOV9yd3JpdGUgcndyaXRlOwotCQlzdHJ1Y3QgcDlfdGNsdW5rIHRjbHVuazsKLQkJc3RydWN0IHA5X3JjbHVuayByY2x1bms7Ci0JCXN0cnVjdCBwOV90cmVtb3ZlIHRyZW1vdmU7Ci0JCXN0cnVjdCBwOV9ycmVtb3ZlIHJyZW1vdmU7Ci0JCXN0cnVjdCBwOV90c3RhdCB0c3RhdDsKLQkJc3RydWN0IHA5X3JzdGF0IHJzdGF0OwotCQlzdHJ1Y3QgcDlfdHdzdGF0IHR3c3RhdDsKLQkJc3RydWN0IHA5X3J3c3RhdCByd3N0YXQ7Ci0JfSBwYXJhbXM7CisJc2l6ZV90IG9mZnNldDsKKwlzaXplX3QgY2FwYWNpdHk7CisKKwl1aW50OF90ICpzZGF0YTsKIH07CiAKIHN0cnVjdCBwOV9pZHBvb2w7CiAKLWludCBwOV9kZXNlcmlhbGl6ZV9zdGF0KHZvaWQgKmJ1ZiwgdTMyIGJ1Zmxlbiwgc3RydWN0IHA5X3N0YXQgKnN0YXQsCi0JaW50IGRvdHUpOwotaW50IHA5X2Rlc2VyaWFsaXplX2ZjYWxsKHZvaWQgKmJ1ZiwgdTMyIGJ1Zmxlbiwgc3RydWN0IHA5X2ZjYWxsICpmYywgaW50IGRvdHUpOwotdm9pZCBwOV9zZXRfdGFnKHN0cnVjdCBwOV9mY2FsbCAqZmMsIHUxNiB0YWcpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHZlcnNpb24odTMyIG1zaXplLCBjaGFyICp2ZXJzaW9uKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RhdHRhY2godTMyIGZpZCwgdTMyIGFmaWQsIGNoYXIgKnVuYW1lLAotCWNoYXIgKmFuYW1lLCB1MzIgbl91bmFtZSwgaW50IGRvdHUpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdGF1dGgodTMyIGFmaWQsIGNoYXIgKnVuYW1lLCBjaGFyICphbmFtZSwKLQl1MzIgbl91bmFtZSwgaW50IGRvdHUpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdGZsdXNoKHUxNiBvbGR0YWcpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHdhbGsodTMyIGZpZCwgdTMyIG5ld2ZpZCwgdTE2IG53bmFtZSwKLQljaGFyICoqd25hbWVzKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RvcGVuKHUzMiBmaWQsIHU4IG1vZGUpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdGNyZWF0ZSh1MzIgZmlkLCBjaGFyICpuYW1lLCB1MzIgcGVybSwgdTggbW9kZSwKLQljaGFyICpleHRlbnNpb24sIGludCBkb3R1KTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RyZWFkKHUzMiBmaWQsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90d3JpdGUodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50LAotCWNvbnN0IGNoYXIgKmRhdGEpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHdyaXRlX3UodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50LAotCWNvbnN0IGNoYXIgX191c2VyICpkYXRhKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RjbHVuayh1MzIgZmlkKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RyZW1vdmUodTMyIGZpZCk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90c3RhdCh1MzIgZmlkKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3c3RhdCh1MzIgZmlkLCBzdHJ1Y3QgcDlfd3N0YXQgKndzdGF0LAotCWludCBkb3R1KTsKLQotaW50IHA5X3ByaW50ZmNhbGwoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgcDlfZmNhbGwgKmZjLCBpbnQgZG90dSk7CiBpbnQgcDlfZXJyc3RyMmVycm5vKGNoYXIgKmVycnN0ciwgaW50IGxlbik7CiAKIHN0cnVjdCBwOV9pZHBvb2wgKnA5X2lkcG9vbF9jcmVhdGUodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC9jbGllbnQuaCBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCmluZGV4IGM5MzZkZDEuLjFmMTdmM2Q5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC85cC9jbGllbnQuaAorKysgYi9pbmNsdWRlL25ldC85cC9jbGllbnQuaApAQCAtMjYsNiArMjYsODcgQEAKICNpZm5kZWYgTkVUXzlQX0NMSUVOVF9ICiAjZGVmaW5lIE5FVF85UF9DTElFTlRfSAogCisvKiBOdW1iZXIgb2YgcmVxdWVzdHMgcGVyIHJvdyAqLworI2RlZmluZSBQOV9ST1dfTUFYVEFHIDI1NQorCisvKioKKyAqIGVudW0gcDlfdHJhbnNfc3RhdHVzIC0gZGlmZmVyZW50IHN0YXRlcyBvZiB1bmRlcmx5aW5nIHRyYW5zcG9ydHMKKyAqIEBDb25uZWN0ZWQ6IHRyYW5zcG9ydCBpcyBjb25uZWN0ZWQgYW5kIGhlYWx0aHkKKyAqIEBEaXNjb25uZWN0ZWQ6IHRyYW5zcG9ydCBoYXMgYmVlbiBkaXNjb25uZWN0ZWQKKyAqIEBIdW5nOiB0cmFuc3BvcnQgaXMgY29ubmVjdGVkIGJ5IHdlZGdlZAorICoKKyAqIFRoaXMgZW51bWVyYXRpb24gZGV0YWlscyB0aGUgdmFyaW91cyBzdGF0ZXMgYSB0cmFuc3BvcnQKKyAqIGluc3RhdGlhdGlvbiBjYW4gYmUgaW4uCisgKi8KKworZW51bSBwOV90cmFuc19zdGF0dXMgeworCUNvbm5lY3RlZCwKKwlEaXNjb25uZWN0ZWQsCisJSHVuZywKK307CisKKy8qKgorICogZW51bSBwOV9yZXFfc3RhdHVzX3QgLSB2aXJ0aW8gcmVxdWVzdCBzdGF0dXMKKyAqIEBSRVFfU1RBVFVTX0lETEU6IHJlcXVlc3Qgc2xvdCB1bnVzZWQKKyAqIEBSRVFfU1RBVFVTX0FMTE9DOiByZXF1ZXN0IGhhcyBiZWVuIGFsbG9jYXRlZCBidXQgbm90IHNlbnQKKyAqIEBSRVFfU1RBVFVTX1VOU0VOVDogcmVxdWVzdCB3YWl0aW5nIHRvIGJlIHNlbnQKKyAqIEBSRVFfU1RBVFVTX1NFTlQ6IHJlcXVlc3Qgc2VudCB0byBzZXJ2ZXIKKyAqIEBSRVFfU1RBVFVTX0ZMU0g6IGEgZmx1c2ggaGFzIGJlZW4gc2VudCBmb3IgdGhpcyByZXF1ZXN0CisgKiBAUkVRX1NUQVRVU19SQ1ZEOiByZXNwb25zZSByZWNlaXZlZCBmcm9tIHNlcnZlcgorICogQFJFUV9TVEFUVVNfRkxTSEQ6IHJlcXVlc3QgaGFzIGJlZW4gZmx1c2hlZAorICogQFJFUV9TVEFUVVNfRVJST1I6IHJlcXVlc3QgZW5jb3VudGVyZWQgYW4gZXJyb3Igb24gdGhlIGNsaWVudCBzaWRlCisgKgorICogVGhlIEBSRVFfU1RBVFVTX0lETEUgc3RhdGUgaXMgdXNlZCB0byBtYXJrIGEgcmVxdWVzdCBzbG90IGFzIHVudXNlZAorICogYnV0IHVzZSBpcyBhY3R1YWxseSB0cmFja2VkIGJ5IHRoZSBpZHBvb2wgc3RydWN0dXJlIHdoaWNoIGhhbmRsZXMgdGFnCisgKiBpZCBhbGxvY2F0aW9uLgorICoKKyAqLworCitlbnVtIHA5X3JlcV9zdGF0dXNfdCB7CisJUkVRX1NUQVRVU19JRExFLAorCVJFUV9TVEFUVVNfQUxMT0MsCisJUkVRX1NUQVRVU19VTlNFTlQsCisJUkVRX1NUQVRVU19TRU5ULAorCVJFUV9TVEFUVVNfRkxTSCwKKwlSRVFfU1RBVFVTX1JDVkQsCisJUkVRX1NUQVRVU19GTFNIRCwKKwlSRVFfU1RBVFVTX0VSUk9SLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgcDlfcmVxX3QgLSByZXF1ZXN0IHNsb3RzCisgKiBAc3RhdHVzOiBzdGF0dXMgb2YgdGhpcyByZXF1ZXN0IHNsb3QKKyAqIEB0X2VycjogdHJhbnNwb3J0IGVycm9yCisgKiBAZmx1c2hfdGFnOiB0YWcgb2YgcmVxdWVzdCBiZWluZyBmbHVzaGVkIChmb3IgZmx1c2ggcmVxdWVzdHMpCisgKiBAd3E6IHdhaXRfcXVldWUgZm9yIHRoZSBjbGllbnQgdG8gYmxvY2sgb24gZm9yIHRoaXMgcmVxdWVzdAorICogQHRjOiB0aGUgcmVxdWVzdCBmY2FsbCBzdHJ1Y3R1cmUKKyAqIEByYzogdGhlIHJlc3BvbnNlIGZjYWxsIHN0cnVjdHVyZQorICogQGF1eDogdHJhbnNwb3J0IHNwZWNpZmljIGRhdGEgKHByb3ZpZGVkIGZvciB0cmFuc19mZCBtaWdyYXRpb24pCisgKiBAcmVxX2xpc3Q6IGxpbmsgZm9yIGhpZ2hlciBsZXZlbCBvYmplY3RzIHRvIGNoYWluIHJlcXVlc3RzCisgKgorICogVHJhbnNwb3J0IHVzZSBhbiBhcnJheSB0byB0cmFjayBvdXRzdGFuZGluZyByZXF1ZXN0cworICogaW5zdGVhZCBvZiBhIGxpc3QuICBXaGlsZSB0aGlzIG1heSBpbmN1cnIgb3ZlcmhlYWQgZHVyaW5nIGluaXRpYWwKKyAqIGFsbG9jYXRpb24gb3IgZXhwYW5zaW9uLCBpdCBtYWtlcyByZXF1ZXN0IGxvb2t1cCBtdWNoIGVhc2llciBhcyB0aGUKKyAqIHRhZyBpZCBpcyBhIGluZGV4IGludG8gYW4gYXJyYXkuICAoV2UgdXNlIHRhZysxIHNvIHRoYXQgd2UgY2FuIGFjY29tb2RhdGUKKyAqIHRoZSAtMSB0YWcgZm9yIHRoZSBUX1ZFUlNJT04gcmVxdWVzdCkuCisgKiBUaGlzIGFsc28gaGFzIHRoZSBuaWNlIGVmZmVjdCBvZiBvbmx5IGhhdmluZyB0byBhbGxvY2F0ZSB3YWl0X3F1ZXVlcworICogb25jZSwgaW5zdGVhZCBvZiBjb25zdGFudGx5IGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgdGhlbS4gIEl0cyBwb3NzaWJsZQorICogb3RoZXIgcmVzb3VyY2VzIGNvdWxkIGJlbmVmaXQgZnJvbSB0aGlzIHNjaGVtZSBhcyB3ZWxsLgorICoKKyAqLworCitzdHJ1Y3QgcDlfcmVxX3QgeworCWludCBzdGF0dXM7CisJaW50IHRfZXJyOworCXUxNiBmbHVzaF90YWc7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxOworCXN0cnVjdCBwOV9mY2FsbCAqdGM7CisJc3RydWN0IHA5X2ZjYWxsICpyYzsKKwl2b2lkICphdXg7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlcV9saXN0OworfTsKKwogLyoqCiAgKiBzdHJ1Y3QgcDlfY2xpZW50IC0gcGVyIGNsaWVudCBpbnN0YW5jZSBzdGF0ZQogICogQGxvY2s6IHByb3RlY3QgQGZpZGxpc3QKQEAgLTM2LDkgKzExNywyMCBAQAogICogQGNvbm46IGNvbm5lY3Rpb24gc3RhdGUgaW5mb3JtYXRpb24gdXNlZCBieSB0cmFuc19mZAogICogQGZpZHBvb2w6IGZpZCBoYW5kbGUgYWNjb3VudGluZyBmb3Igc2Vzc2lvbgogICogQGZpZGxpc3Q6IExpc3Qgb2YgYWN0aXZlIGZpZCBoYW5kbGVzCisgKiBAdGFncG9vbCAtIHRyYW5zYWN0aW9uIGlkIGFjY291bnRpbmcgZm9yIHNlc3Npb24KKyAqIEByZXFzIC0gMkQgYXJyYXkgb2YgcmVxdWVzdHMKKyAqIEBtYXhfdGFnIC0gY3VycmVudCBtYXhpbXVtIHRhZyBpZCBhbGxvY2F0ZWQKICAqCiAgKiBUaGUgY2xpZW50IHN0cnVjdHVyZSBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdmFyaW91cyBwZXItY2xpZW50CiAgKiBzdGF0ZSB0aGF0IGhhcyBiZWVuIGluc3RhbnRpYXRlZC4KKyAqIEluIG9yZGVyIHRvIG1pbmltaXplIHBlci10cmFuc2FjdGlvbiBvdmVyaGVhZCB3ZSB1c2UgYQorICogc2ltcGxlIGFycmF5IHRvIGxvb2t1cCByZXF1ZXN0cyBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZQorICogb3IgbGlua2VkIGxpc3QuICBJbiBvcmRlciB0byBzdXBwb3J0IGxhcmdlciBudW1iZXIgb2YKKyAqIHRyYW5zYWN0aW9ucywgd2UgbWFrZSB0aGlzIGEgMkQgYXJyYXksIGFsbG9jYXRpbmcgbmV3IHJvd3MKKyAqIHdoZW4gd2UgbmVlZCB0byBncm93IHRoZSB0b3RhbCBudW1iZXIgb2YgdGhlIHRyYW5zYWN0aW9ucy4KKyAqCisgKiBFYWNoIHJvdyBpcyAyNTYgcmVxdWVzdHMgYW5kIHdlJ2xsIHN1cHBvcnQgdXAgdG8gMjU2IHJvd3MgZm9yCisgKiBhIHRvdGFsIG9mIDY0ayBjb25jdXJyZW50IHJlcXVlc3RzIHBlciBzZXNzaW9uLgogICoKICAqIEJ1Z3M6IGR1cGxpY2F0ZWQgZGF0YSBhbmQgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgZWxlbWVudHMuCiAgKi8KQEAgLTQ4LDExICsxNDAsMTYgQEAKIAlpbnQgbXNpemU7CiAJdW5zaWduZWQgY2hhciBkb3R1OwogCXN0cnVjdCBwOV90cmFuc19tb2R1bGUgKnRyYW5zX21vZDsKLQlzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zOworCWVudW0gcDlfdHJhbnNfc3RhdHVzIHN0YXR1czsKKwl2b2lkICp0cmFuczsKIAlzdHJ1Y3QgcDlfY29ubiAqY29ubjsKIAogCXN0cnVjdCBwOV9pZHBvb2wgKmZpZHBvb2w7CiAJc3RydWN0IGxpc3RfaGVhZCBmaWRsaXN0OworCisJc3RydWN0IHA5X2lkcG9vbCAqdGFncG9vbDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcXNbUDlfUk9XX01BWFRBR107CisJaW50IG1heF90YWc7CiB9OwogCiAvKioKQEAgLTY1LDggKzE2Miw2IEBACiAgKiBAdWlkOiB0aGUgbnVtZXJpYyB1aWQgb2YgdGhlIGxvY2FsIHVzZXIgd2hvIG93bnMgdGhpcyBoYW5kbGUKICAqIEBhdXg6IHRyYW5zcG9ydCBzcGVjaWZpYyBpbmZvcm1hdGlvbiAodW51c2VkPykKICAqIEByZGlyX2Zwb3M6IHRyYWNrcyBvZmZzZXQgb2YgZmlsZSBwb3NpdGlvbiB3aGVuIHJlYWRpbmcgZGlyZWN0b3J5IGNvbnRlbnRzCi0gKiBAcmRpcl9wb3M6ICh1bnVzZWQ/KQotICogQHJkaXJfZmNhbGw6IGhvbGRzIHJlc3BvbnNlIG9mIGxhc3QgZGlyZWN0b3J5IHJlYWQgcmVxdWVzdAogICogQGZsaXN0OiBwZXItY2xpZW50LWluc3RhbmNlIGZpZCB0cmFja2luZwogICogQGRsaXN0OiBwZXItZGVudHJ5IGZpZCB0cmFja2luZwogICoKQEAgLTgzLDggKzE3OCw2IEBACiAJdm9pZCAqYXV4OwogCiAJaW50IHJkaXJfZnBvczsKLQlpbnQgcmRpcl9wb3M7Ci0Jc3RydWN0IHA5X2ZjYWxsICpyZGlyX2ZjYWxsOwogCXN0cnVjdCBsaXN0X2hlYWQgZmxpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBkbGlzdDsJLyogbGlzdCBvZiBhbGwgZmlkcyBhdHRhY2hlZCB0byBhIGRlbnRyeSAqLwogfTsKQEAgLTEwMywxNSArMTk2LDE4IEBACiAJCQkJCQkJY2hhciAqZXh0ZW5zaW9uKTsKIGludCBwOV9jbGllbnRfY2x1bmsoc3RydWN0IHA5X2ZpZCAqZmlkKTsKIGludCBwOV9jbGllbnRfcmVtb3ZlKHN0cnVjdCBwOV9maWQgKmZpZCk7Ci1pbnQgcDlfY2xpZW50X3JlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCB1NjQgb2Zmc2V0LCB1MzIgY291bnQpOwotaW50IHA5X2NsaWVudF9yZWFkbihzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCk7Ci1pbnQgcDlfY2xpZW50X3dyaXRlKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgdTY0IG9mZnNldCwgdTMyIGNvdW50KTsKLWludCBwOV9jbGllbnRfdXJlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyIF9fdXNlciAqZGF0YSwgdTY0IG9mZnNldCwKLQkJCQkJCQkJdTMyIGNvdW50KTsKLWludCBwOV9jbGllbnRfdXdyaXRlKHN0cnVjdCBwOV9maWQgKmZpZCwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsIHU2NCBvZmZzZXQsCi0JCQkJCQkJCXUzMiBjb3VudCk7Ci1zdHJ1Y3QgcDlfc3RhdCAqcDlfY2xpZW50X3N0YXQoc3RydWN0IHA5X2ZpZCAqZmlkKTsKK2ludCBwOV9jbGllbnRfcmVhZChzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIGNoYXIgX191c2VyICp1ZGF0YSwKKwkJCQkJCQl1NjQgb2Zmc2V0LCB1MzIgY291bnQpOworaW50IHA5X2NsaWVudF93cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIGNvbnN0IGNoYXIgX191c2VyICp1ZGF0YSwKKwkJCQkJCQl1NjQgb2Zmc2V0LCB1MzIgY291bnQpOworc3RydWN0IHA5X3dzdGF0ICpwOV9jbGllbnRfc3RhdChzdHJ1Y3QgcDlfZmlkICpmaWQpOwogaW50IHA5X2NsaWVudF93c3RhdChzdHJ1Y3QgcDlfZmlkICpmaWQsIHN0cnVjdCBwOV93c3RhdCAqd3N0KTsKLXN0cnVjdCBwOV9zdGF0ICpwOV9jbGllbnRfZGlycmVhZChzdHJ1Y3QgcDlfZmlkICpmaWQsIHU2NCBvZmZzZXQpOworCitzdHJ1Y3QgcDlfcmVxX3QgKnA5X3RhZ19sb29rdXAoc3RydWN0IHA5X2NsaWVudCAqLCB1MTYpOwordm9pZCBwOV9jbGllbnRfY2Ioc3RydWN0IHA5X2NsaWVudCAqYywgc3RydWN0IHA5X3JlcV90ICpyZXEpOworCitpbnQgcDlzdGF0X3JlYWQoY2hhciAqLCBpbnQsIHN0cnVjdCBwOV93c3RhdCAqLCBpbnQpOwordm9pZCBwOXN0YXRfZnJlZShzdHJ1Y3QgcDlfd3N0YXQgKik7CisKIAogI2VuZGlmIC8qIE5FVF85UF9DTElFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvOXAvdHJhbnNwb3J0LmggYi9pbmNsdWRlL25ldC85cC90cmFuc3BvcnQuaAppbmRleCAzY2E3MzcxLi42ZDU4ODZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC85cC90cmFuc3BvcnQuaAorKysgYi9pbmNsdWRlL25ldC85cC90cmFuc3BvcnQuaApAQCAtMjYsNTIgKzI2LDYgQEAKICNpZm5kZWYgTkVUXzlQX1RSQU5TUE9SVF9ICiAjZGVmaW5lIE5FVF85UF9UUkFOU1BPUlRfSAogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLS8qKgotICogZW51bSBwOV90cmFuc19zdGF0dXMgLSBkaWZmZXJlbnQgc3RhdGVzIG9mIHVuZGVybHlpbmcgdHJhbnNwb3J0cwotICogQENvbm5lY3RlZDogdHJhbnNwb3J0IGlzIGNvbm5lY3RlZCBhbmQgaGVhbHRoeQotICogQERpc2Nvbm5lY3RlZDogdHJhbnNwb3J0IGhhcyBiZWVuIGRpc2Nvbm5lY3RlZAotICogQEh1bmc6IHRyYW5zcG9ydCBpcyBjb25uZWN0ZWQgYnkgd2VkZ2VkCi0gKgotICogVGhpcyBlbnVtZXJhdGlvbiBkZXRhaWxzIHRoZSB2YXJpb3VzIHN0YXRlcyBhIHRyYW5zcG9ydAotICogaW5zdGF0aWF0aW9uIGNhbiBiZSBpbi4KLSAqLwotCi1lbnVtIHA5X3RyYW5zX3N0YXR1cyB7Ci0JQ29ubmVjdGVkLAotCURpc2Nvbm5lY3RlZCwKLQlIdW5nLAotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgcDlfdHJhbnMgLSBwZXItdHJhbnNwb3J0IHN0YXRlIGFuZCBBUEkKLSAqIEBzdGF0dXM6IHRyYW5zcG9ydCAmcDlfdHJhbnNfc3RhdHVzCi0gKiBAbXNpemU6IG5lZ290aWF0ZWQgbWF4aW11bSBwYWNrZXQgc2l6ZSAoZHVwbGljYXRlIGZyb20gY2xpZW50KQotICogQGV4dGVuZGVkOiBuZWdvdGlhdGVkIHByb3RvY29sIGV4dGVuc2lvbnMgKGR1cGxpY2F0ZSBmcm9tIGNsaWVudCkKLSAqIEBwcml2OiB0cmFuc3BvcnQgcHJpdmF0ZSBkYXRhCi0gKiBAY2xvc2U6IG1lbWJlciBmdW5jdGlvbiB0byBkaXNjb25uZWN0IGFuZCBjbG9zZSB0aGUgdHJhbnNwb3J0Ci0gKiBAcnBjOiBtZW1iZXIgZnVuY3Rpb24gdG8gaXNzdWUgYSByZXF1ZXN0IHRvIHRoZSB0cmFuc3BvcnQKLSAqCi0gKiBUaGlzIGlzIHRoZSBiYXNpYyBBUEkgZm9yIGEgdHJhbnNwb3J0IGluc3RhbmNlLiAgSXQgaXMgdXNlZCBhcwotICogYSBoYW5kbGUgYnkgdGhlIGNsaWVudCB0byBpc3N1ZSByZXF1ZXN0cy4gIFRoaXMgaW50ZXJmYWNlIGlzIGN1cnJlbnRseQotICogaW4gZmx1eCBkdXJpbmcgcmVvcmdhbml6YXRpb24uCi0gKgotICogQnVnczogdGhlcmUgaXMgbG90cyBvZiBkdXBsaWNhdGVkIGRhdGEgaGVyZSBhbmQgaXRzIG5vdCBjbGVhciB0aGF0Ci0gKiB0aGUgbWVtYmVyIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIHBlci1pbnN0YW5jZSB2ZXJzdXMgcGVyIHRyYW5zcG9ydAotICogbW9kdWxlLgotICovCi0KLXN0cnVjdCBwOV90cmFucyB7Ci0JZW51bSBwOV90cmFuc19zdGF0dXMgc3RhdHVzOwotCWludCBtc2l6ZTsKLQl1bnNpZ25lZCBjaGFyIGV4dGVuZGVkOwotCXZvaWQgKnByaXY7Ci0Jdm9pZCAoKmNsb3NlKSAoc3RydWN0IHA5X3RyYW5zICopOwotCWludCAoKnJwYykgKHN0cnVjdCBwOV90cmFucyAqdCwgc3RydWN0IHA5X2ZjYWxsICp0YywKLQkJCQkJCQlzdHJ1Y3QgcDlfZmNhbGwgKipyYyk7Ci19OwotCiAvKioKICAqIHN0cnVjdCBwOV90cmFuc19tb2R1bGUgLSB0cmFuc3BvcnQgbW9kdWxlIGludGVyZmFjZQogICogQGxpc3Q6IHVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIGN1cnJlbnRseSBhdmFpbGFibGUgdHJhbnNwb3J0cwpAQCAtNzksMTIgKzMzLDE0IEBACiAgKiBAbWF4c2l6ZTogdHJhbnNwb3J0IHByb3ZpZGVkIG1heGltdW0gcGFja2V0IHNpemUKICAqIEBkZWY6IHNldCBpZiB0aGlzIHRyYW5zcG9ydCBzaG91bGQgYmUgY29uc2lkZXJlZCB0aGUgZGVmYXVsdAogICogQGNyZWF0ZTogbWVtYmVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIG9uIHRoaXMgdHJhbnNwb3J0CisgKiBAcmVxdWVzdDogbWVtYmVyIGZ1bmN0aW9uIHRvIGlzc3VlIGEgcmVxdWVzdCB0byB0aGUgdHJhbnNwb3J0CisgKiBAY2FuY2VsOiBtZW1iZXIgZnVuY3Rpb24gdG8gY2FuY2VsIGEgcmVxdWVzdCAoaWYgaXQgaGFzbid0IGJlZW4gc2VudCkKICAqCiAgKiBUaGlzIGlzIHRoZSBiYXNpYyBBUEkgZm9yIGEgdHJhbnNwb3J0IG1vZHVsZSB3aGljaCBpcyByZWdpc3RlcmVkIGJ5IHRoZQogICogdHJhbnNwb3J0IG1vZHVsZSB3aXRoIHRoZSA5UCBjb3JlIG5ldHdvcmsgbW9kdWxlIGFuZCB1c2VkIGJ5IHRoZSBjbGllbnQKICAqIHRvIGluc3RhbnRpYXRlIGEgbmV3IGNvbm5lY3Rpb24gb24gYSB0cmFuc3BvcnQuCiAgKgotICogQnVnczogdGhlIHRyYW5zcG9ydCBtb2R1bGUgbGlzdCBpc24ndCBwcm90ZWN0ZWQuCisgKiBCVUdTOiB0aGUgdHJhbnNwb3J0IG1vZHVsZSBsaXN0IGlzbid0IHByb3RlY3RlZC4KICAqLwogCiBzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlIHsKQEAgLTkyLDggKzQ4LDExIEBACiAJY2hhciAqbmFtZTsJCS8qIG5hbWUgb2YgdHJhbnNwb3J0ICovCiAJaW50IG1heHNpemU7CQkvKiBtYXggbWVzc2FnZSBzaXplIG9mIHRyYW5zcG9ydCAqLwogCWludCBkZWY7CQkvKiB0aGlzIHRyYW5zcG9ydCBzaG91bGQgYmUgZGVmYXVsdCAqLwotCXN0cnVjdCBwOV90cmFucyAqICgqY3JlYXRlKShjb25zdCBjaGFyICosIGNoYXIgKiwgaW50LCB1bnNpZ25lZCBjaGFyKTsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlpbnQgKCpjcmVhdGUpKHN0cnVjdCBwOV9jbGllbnQgKiwgY29uc3QgY2hhciAqLCBjaGFyICopOworCXZvaWQgKCpjbG9zZSkgKHN0cnVjdCBwOV9jbGllbnQgKik7CisJaW50ICgqcmVxdWVzdCkgKHN0cnVjdCBwOV9jbGllbnQgKiwgc3RydWN0IHA5X3JlcV90ICpyZXEpOworCWludCAoKmNhbmNlbCkgKHN0cnVjdCBwOV9jbGllbnQgKiwgc3RydWN0IHA5X3JlcV90ICpyZXEpOwogfTsKIAogdm9pZCB2OWZzX3JlZ2lzdGVyX3RyYW5zKHN0cnVjdCBwOV90cmFuc19tb2R1bGUgKm0pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCmluZGV4IDZmODQxOGIuLjk5NmQxMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKQEAgLTU0LDggKzU0LDggQEAKICNkZWZpbmUgU09MX1JGQ09NTQkxOAogCiAjZGVmaW5lIEJUX0lORk8oZm10LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gIkJsdWV0b290aDogIiBmbXQgIlxuIiAsICMjIGFyZykKLSNkZWZpbmUgQlRfREJHKGZtdCwgYXJnLi4uKSAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm10ICJcbiIgLCBfX0ZVTkNUSU9OX18gLCAjIyBhcmcpCi0jZGVmaW5lIEJUX0VSUihmbXQsIGFyZy4uLikgIHByaW50ayhLRVJOX0VSUiAgIiVzOiAiIGZtdCAiXG4iICwgX19GVU5DVElPTl9fICwgIyMgYXJnKQorI2RlZmluZSBCVF9EQkcoZm10LCBhcmcuLi4pICBwcmludGsoS0VSTl9JTkZPICIlczogIiBmbXQgIlxuIiAsIF9fZnVuY19fICwgIyMgYXJnKQorI2RlZmluZSBCVF9FUlIoZm10LCBhcmcuLi4pICBwcmludGsoS0VSTl9FUlIgICIlczogIiBmbXQgIlxuIiAsIF9fZnVuY19fICwgIyMgYXJnKQogCiAvKiBDb25uZWN0aW9uIGFuZCBzb2NrZXQgc3RhdGVzICovCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NpcHNvX2lwdjQuaCBiL2luY2x1ZGUvbmV0L2NpcHNvX2lwdjQuaAppbmRleCBhNmJiOTQ1Li45OTA5Nzc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmgKKysrIGIvaW5jbHVkZS9uZXQvY2lwc29faXB2NC5oCkBAIC00MCwxMSArNDAsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGFiZWwuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIC8qIGtub3duIGRvaSB2YWx1ZXMgKi8KICNkZWZpbmUgQ0lQU09fVjRfRE9JX1VOS05PV04gICAgICAgICAgMHgwMDAwMDAwMAogCi0vKiB0YWcgdHlwZXMgKi8KKy8qIHN0YW5kYXJkIHRhZyB0eXBlcyAqLwogI2RlZmluZSBDSVBTT19WNF9UQUdfSU5WQUxJRCAgICAgICAgICAwCiAjZGVmaW5lIENJUFNPX1Y0X1RBR19SQklUTUFQICAgICAgICAgIDEKICNkZWZpbmUgQ0lQU09fVjRfVEFHX0VOVU0gICAgICAgICAgICAgMgpAQCAtNTIsMTAgKzUzLDE0IEBACiAjZGVmaW5lIENJUFNPX1Y0X1RBR19QQklUTUFQICAgICAgICAgIDYKICNkZWZpbmUgQ0lQU09fVjRfVEFHX0ZSRUVGT1JNICAgICAgICAgNwogCisvKiBub24tc3RhbmRhcmQgdGFnIHR5cGVzICh0YWdzID4gMTI3KSAqLworI2RlZmluZSBDSVBTT19WNF9UQUdfTE9DQUwgICAgICAgICAgICAxMjgKKwogLyogZG9pIG1hcHBpbmcgdHlwZXMgKi8KICNkZWZpbmUgQ0lQU09fVjRfTUFQX1VOS05PV04gICAgICAgICAgMAotI2RlZmluZSBDSVBTT19WNF9NQVBfU1REICAgICAgICAgICAgICAxCisjZGVmaW5lIENJUFNPX1Y0X01BUF9UUkFOUyAgICAgICAgICAgIDEKICNkZWZpbmUgQ0lQU09fVjRfTUFQX1BBU1MgICAgICAgICAgICAgMgorI2RlZmluZSBDSVBTT19WNF9NQVBfTE9DQUwgICAgICAgICAgICAzCiAKIC8qIGxpbWl0cyAqLwogI2RlZmluZSBDSVBTT19WNF9NQVhfUkVNX0xWTFMgICAgICAgICAyNTUKQEAgLTc5LDEwICs4NCw5IEBACiAJfSBtYXA7CiAJdTggdGFnc1tDSVBTT19WNF9UQUdfTUFYQ05UXTsKIAotCXUzMiB2YWxpZDsKKwlhdG9taWNfdCByZWZjb3VudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRvbV9saXN0OwogfTsKIAogLyogU3RhbmRhcmQgQ0lQU08gbWFwcGluZyB0YWJsZSAqLwpAQCAtMTI4LDI1ICsxMzIsMjYgQEAKIAogI2lmZGVmIENPTkZJR19ORVRMQUJFTAogaW50IGNpcHNvX3Y0X2RvaV9hZGQoc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZik7Ci1pbnQgY2lwc29fdjRfZG9pX3JlbW92ZSh1MzIgZG9pLAotCQkJc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbywKLQkJCXZvaWQgKCpjYWxsYmFjaykgKHN0cnVjdCByY3VfaGVhZCAqIGhlYWQpKTsKK3ZvaWQgY2lwc29fdjRfZG9pX2ZyZWUoc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZik7CitpbnQgY2lwc29fdjRfZG9pX3JlbW92ZSh1MzIgZG9pLCBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKTsKIHN0cnVjdCBjaXBzb192NF9kb2kgKmNpcHNvX3Y0X2RvaV9nZXRkZWYodTMyIGRvaSk7Cit2b2lkIGNpcHNvX3Y0X2RvaV9wdXRkZWYoc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZik7CiBpbnQgY2lwc29fdjRfZG9pX3dhbGsodTMyICpza2lwX2NudCwKIAkJICAgICBpbnQgKCpjYWxsYmFjaykgKHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsIHZvaWQgKmFyZyksCiAJICAgICAgICAgICAgIHZvaWQgKmNiX2FyZyk7Ci1pbnQgY2lwc29fdjRfZG9pX2RvbWhzaF9hZGQoc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwgY29uc3QgY2hhciAqZG9tYWluKTsKLWludCBjaXBzb192NF9kb2lfZG9taHNoX3JlbW92ZShzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgY2lwc29fdjRfZG9pX2FkZChzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmKQogewogCXJldHVybiAtRU5PU1lTOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgY2lwc29fdjRfZG9pX2ZyZWUoc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZikKK3sKKwlyZXR1cm47Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGNpcHNvX3Y0X2RvaV9yZW1vdmUodTMyIGRvaSwKLQkJCQkgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbywKLQkJCQkgICAgdm9pZCAoKmNhbGxiYWNrKSAoc3RydWN0IHJjdV9oZWFkICogaGVhZCkpCisJCQkJICAgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTIwNiwxMCArMjExLDE1IEBACiBpbnQgY2lwc29fdjRfc29ja19zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKIAkJCSAgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKIAkJCSAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7Cit2b2lkIGNpcHNvX3Y0X3NvY2tfZGVsYXR0cihzdHJ1Y3Qgc29jayAqc2spOwogaW50IGNpcHNvX3Y0X3NvY2tfZ2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOworaW50IGNpcHNvX3Y0X3NrYnVmZl9zZXRhdHRyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKTsKK2ludCBjaXBzb192NF9za2J1ZmZfZGVsYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBjaXBzb192NF9za2J1ZmZfZ2V0YXR0cihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwotaW50IGNpcHNvX3Y0X3ZhbGlkYXRlKHVuc2lnbmVkIGNoYXIgKipvcHRpb24pOworaW50IGNpcHNvX3Y0X3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgKipvcHRpb24pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBjaXBzb192NF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgaW50IGVycm9yLApAQCAtMjI1LDE5ICsyMzUsMzYgQEAKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGNpcHNvX3Y0X3NvY2tfZGVsYXR0cihzdHJ1Y3Qgc29jayAqc2spCit7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGNpcHNvX3Y0X3NvY2tfZ2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGNpcHNvX3Y0X3NrYnVmZl9zZXRhdHRyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIGludCBjaXBzb192NF9za2J1ZmZfZGVsYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAtRU5PU1lTOworfQorCiBzdGF0aWMgaW5saW5lIGludCBjaXBzb192NF9za2J1ZmZfZ2V0YXR0cihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNpcHNvX3Y0X3ZhbGlkYXRlKHVuc2lnbmVkIGNoYXIgKipvcHRpb24pCitzdGF0aWMgaW5saW5lIGludCBjaXBzb192NF92YWxpZGF0ZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICB1bnNpZ25lZCBjaGFyICoqb3B0aW9uKQogewogCXJldHVybiAtRU5PU1lTOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAppbmRleCA2MDQ4NTc5Li45M2E1NmRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaApAQCAtMTE0LDcgKzExNCw3IEBACiAjZGVmaW5lIElFRUU4MDIxMV9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCiBkbyB7IGlmIChpZWVlODAyMTFfZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSBcCiAgIHByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTE6ICVjICVzICIgZm10LCBcCi0gICAgICAgICBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19GVU5DVElPTl9fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCisgICAgICAgICBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19mdW5jX18gLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKIHN0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfcmF0ZWxpbWl0X2RlYnVnKHUzMiBsZXZlbCkKIHsKIAlyZXR1cm4gKGllZWU4MDIxMV9kZWJ1Z19sZXZlbCAmIGxldmVsKSAmJiBuZXRfcmF0ZWxpbWl0KCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCAxY2JjY2FmLi5iYzAyNmVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTM5Niw3ICszOTYsNyBAQAogaW50IGlwdjRfZG9pbnRfYW5kX2ZsdXNoKGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsCiAJCQkgc3RydWN0IGZpbGUqIGZpbHAsIHZvaWQgX191c2VyICpidWZmZXIsCiAJCQkgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpOwotaW50IGlwdjRfZG9pbnRfYW5kX2ZsdXNoX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IGlwdjRfZG9pbnRfYW5kX2ZsdXNoX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsCiAJCQkJICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCSAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbik7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IDBiMjA3MWQuLmZlOWZjZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKKysrIGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtMTY1LDEzICsxNjUsMTMgQEAKICAgICBkbyB7CQkJCQkJCQlcCiAJICAgIGlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJCQlcCiAJCSAgICBwcmludGsoS0VSTl9ERUJVRyAiRW50ZXI6ICVzLCAlcyBsaW5lICVpXG4iLAlcCi0JCQkgICBfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CQlcCisJCQkgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsJCVwKICAgICB9IHdoaWxlICgwKQogI2RlZmluZSBMZWF2ZUZ1bmN0aW9uKGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCSAgICBpZiAobGV2ZWwgPD0gaXBfdnNfZ2V0X2RlYnVnX2xldmVsKCkpICAgICAgICAgICAgICAgICAgICAgICBcCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiTGVhdmU6ICVzLCAlcyBsaW5lICVpXG4iLCAgICBcCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgICBcCisJCQkgICAgICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7ICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgRW50ZXJGdW5jdGlvbihsZXZlbCkgICBkbyB7fSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJkYS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKaW5kZXggMDgzODc1NS4uN2U1ODIwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmgKQEAgLTcyLDcgKzcyLDcgQEAKICNkZWZpbmUgSVJEQV9BU1NFUlQoZXhwciwgZnVuYykgXAogZG8geyBpZighKGV4cHIpKSB7IFwKIAlwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlczolczolZCAlc1xuIiwgXAotCQlfX0ZJTEVfXyxfX0ZVTkNUSU9OX18sX19MSU5FX18sKCNleHByKSApOyBcCisJCV9fRklMRV9fLF9fZnVuY19fLF9fTElORV9fLCgjZXhwcikgKTsgXAogCWZ1bmMgfSB9IHdoaWxlICgwKQogI2RlZmluZSBJUkRBX0FTU0VSVF9MQUJFTChsYWJlbCkJbGFiZWwKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA1NjE3YTE2Li5kODYxMTk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTY0NSw3ICs2NDUsOCBAQAogICogCS0gVGVtcG9yYWwgRW5jcnlwdGlvbiBLZXkgKDEyOCBiaXRzKQogICogCS0gVGVtcG9yYWwgQXV0aGVudGljYXRvciBUeCBNSUMgS2V5ICg2NCBiaXRzKQogICogCS0gVGVtcG9yYWwgQXV0aGVudGljYXRvciBSeCBNSUMgS2V5ICg2NCBiaXRzKQotICoKKyAqIEBpY3ZfbGVuOiBGSVhNRQorICogQGl2X2xlbjogRklYTUUKICAqLwogc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiB7CiAJZW51bSBpZWVlODAyMTFfa2V5X2FsZyBhbGc7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZGlzYy5oIGIvaW5jbHVkZS9uZXQvbmRpc2MuaAppbmRleCBhMDFiN2M0Li4xMWRkMDEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZGlzYy5oCisrKyBiL2luY2x1ZGUvbmV0L25kaXNjLmgKQEAgLTEyOSw5ICsxMjksOCBAQAogCQkJCQkJCSAgIHZvaWQgX191c2VyICpidWZmZXIsCiAJCQkJCQkJICAgc2l6ZV90ICpsZW5wLAogCQkJCQkJCSAgIGxvZmZfdCAqcHBvcyk7Ci1pbnQgbmRpc2NfaWZpbmZvX3N5c2N0bF9zdHJhdGVneShjdGxfdGFibGUgKmN0bCwgaW50IF9fdXNlciAqbmFtZSwKLQkJCQkgaW50IG5sZW4sIHZvaWQgX191c2VyICpvbGR2YWwsCi0JCQkJIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCitpbnQgbmRpc2NfaWZpbmZvX3N5c2N0bF9zdHJhdGVneShjdGxfdGFibGUgKmN0bCwKKwkJCQkgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCQkgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaAppbmRleCBmMjllZWI5Li41ODY4NDA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaApAQCAtMjUsNCArMjUsMTIgQEAKIAllbHNlCiAJCXJldHVybiB0ZXN0X2JpdChJUFNfRFNUX05BVF9ET05FX0JJVCwgJmN0LT5zdGF0dXMpOwogfQorCitzdHJ1Y3QgbmxhdHRyOworCitleHRlcm4gaW50CisoKm5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vaykoc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKKwkJCQkgIHN0cnVjdCBubGF0dHIgKmF0dHIpOworCiAjZW5kaWYgLyogX05GX05BVF9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGxhYmVsLmggYi9pbmNsdWRlL25ldC9uZXRsYWJlbC5oCmluZGV4IGU0ZDJkNmIuLjE3YzQ0MmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGxhYmVsLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bGFiZWwuaApAQCAtOSw3ICs5LDcgQEAKICAqLwogCiAvKgotICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwNgorICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwNiwgMjAwOAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTcyLDggKzcyLDEwIEBACiAvKiBOZXRMYWJlbCBORVRMSU5LIHByb3RvY29sIHZlcnNpb24KICAqICAxOiBpbml0aWFsIHZlcnNpb24KICAqICAyOiBhZGRlZCBzdGF0aWMgbGFiZWxzIGZvciB1bmxhYmVsZWQgY29ubmVjdGlvbnMKKyAqICAzOiBuZXR3b3JrIHNlbGVjdG9ycyBhZGRlZCB0byB0aGUgTmV0TGFiZWwvTFNNIGRvbWFpbiBtYXBwaW5nIGFuZCB0aGUKKyAqICAgICBDSVBTT19WNF9NQVBfTE9DQUwgQ0lQU08gbWFwcGluZyB3YXMgYWRkZWQKICAqLwotI2RlZmluZSBORVRMQkxfUFJPVE9fVkVSU0lPTiAgICAgICAgICAgIDIKKyNkZWZpbmUgTkVUTEJMX1BST1RPX1ZFUlNJT04gICAgICAgICAgICAzCiAKIC8qIE5ldExhYmVsIE5FVExJTksgdHlwZXMvZmFtaWxpZXMgKi8KICNkZWZpbmUgTkVUTEJMX05MVFlQRV9OT05FICAgICAgICAgICAgICAwCkBAIC04Nyw2ICs4OSw4IEBACiAjZGVmaW5lIE5FVExCTF9OTFRZUEVfQ0lQU09WNl9OQU1FICAgICAgIk5MQkxfQ0lQU092NiIKICNkZWZpbmUgTkVUTEJMX05MVFlQRV9VTkxBQkVMRUQgICAgICAgICA1CiAjZGVmaW5lIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEX05BTUUgICAgIk5MQkxfVU5MQkwiCisjZGVmaW5lIE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVCAgICAgICAgNgorI2RlZmluZSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1RfTkFNRSAgICJOTEJMX0FEUlNFTCIKIAogLyoKICAqIE5ldExhYmVsIC0gS2VybmVsIEFQSSBmb3IgYWNjZXNzaW5nIHRoZSBuZXR3b3JrIHBhY2tldCBsYWJlbCBtYXBwaW5ncy4KQEAgLTIwMCw3ICsyMDQsNyBAQAogCXUzMiB0eXBlOwogCWNoYXIgKmRvbWFpbjsKIAlzdHJ1Y3QgbmV0bGJsX2xzbV9jYWNoZSAqY2FjaGU7Ci0JdW5pb24geworCXN0cnVjdCB7CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyX2NhdG1hcCAqY2F0OwogCQkJdTMyIGx2bDsKQEAgLTM1MiwxMiArMzU2LDkgQEAKIGludCBuZXRsYmxfY2ZnX21hcF9kZWwoY29uc3QgY2hhciAqZG9tYWluLCBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKTsKIGludCBuZXRsYmxfY2ZnX3VubGJsX2FkZF9tYXAoY29uc3QgY2hhciAqZG9tYWluLAogCQkJICAgICBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKTsKLWludCBuZXRsYmxfY2ZnX2NpcHNvdjRfYWRkKHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCi0JCQkgICBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKTsKIGludCBuZXRsYmxfY2ZnX2NpcHNvdjRfYWRkX21hcChzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAogCQkJICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKIAkJCSAgICAgICBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKTsKLWludCBuZXRsYmxfY2ZnX2NpcHNvdjRfZGVsKHUzMiBkb2ksIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pOwogCiAvKgogICogTFNNIHNlY3VyaXR5IGF0dHJpYnV0ZSBvcGVyYXRpb25zCkBAIC0zODAsMTIgKzM4MSwxOSBAQAogaW50IG5ldGxibF9lbmFibGVkKHZvaWQpOwogaW50IG5ldGxibF9zb2NrX3NldGF0dHIoc3RydWN0IHNvY2sgKnNrLAogCQkJY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7Cit2b2lkIG5ldGxibF9zb2NrX2RlbGF0dHIoc3RydWN0IHNvY2sgKnNrKTsKIGludCBuZXRsYmxfc29ja19nZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKIAkJCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOworaW50IG5ldGxibF9jb25uX3NldGF0dHIoc3RydWN0IHNvY2sgKnNrLAorCQkJc3RydWN0IHNvY2thZGRyICphZGRyLAorCQkJY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7CitpbnQgbmV0bGJsX3NrYnVmZl9zZXRhdHRyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgIHUxNiBmYW1pbHksCisJCQkgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwogaW50IG5ldGxibF9za2J1ZmZfZ2V0YXR0cihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICB1MTYgZmFtaWx5LAogCQkJICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKTsKLXZvaWQgbmV0bGJsX3NrYnVmZl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycm9yKTsKK3ZvaWQgbmV0bGJsX3NrYnVmZl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycm9yLCBpbnQgZ2F0ZXdheSk7CiAKIC8qCiAgKiBMU00gbGFiZWwgbWFwcGluZyBjYWNoZSBvcGVyYXRpb25zCkBAIC00MDQsMjIgKzQxMiwxMiBAQAogewogCXJldHVybiAtRU5PU1lTOwogfQotc3RhdGljIGlubGluZSBpbnQgbmV0bGJsX2NmZ19jaXBzb3Y0X2FkZChzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAotCQkJCQkgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKLXsKLQlyZXR1cm4gLUVOT1NZUzsKLX0KIHN0YXRpYyBpbmxpbmUgaW50IG5ldGxibF9jZmdfY2lwc292NF9hZGRfbWFwKHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCiAJCQkJCSAgICAgY29uc3QgY2hhciAqZG9tYWluLAogCQkJCQkgICAgIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9Ci1zdGF0aWMgaW5saW5lIGludCBuZXRsYmxfY2ZnX2NpcHNvdjRfZGVsKHUzMiBkb2ksCi0JCQkJCSBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKQotewotCXJldHVybiAtRU5PU1lTOwotfQogc3RhdGljIGlubGluZSBpbnQgbmV0bGJsX3NlY2F0dHJfY2F0bWFwX3dhbGsoCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cl9jYXRtYXAgKmNhdG1hcCwKIAkJCQkgICAgICB1MzIgb2Zmc2V0KQpAQCAtNDU2LDE4ICs0NTQsMzUgQEAKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRsYmxfc29ja19kZWxhdHRyKHN0cnVjdCBzb2NrICpzaykKK3sKK30KIHN0YXRpYyBpbmxpbmUgaW50IG5ldGxibF9zb2NrX2dldGF0dHIoc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgICAgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CitzdGF0aWMgaW5saW5lIGludCBuZXRsYmxfY29ubl9zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKKwkJCQkgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KK3N0YXRpYyBpbmxpbmUgaW50IG5ldGxibF9za2J1ZmZfc2V0YXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHUxNiBmYW1pbHksCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KIHN0YXRpYyBpbmxpbmUgaW50IG5ldGxibF9za2J1ZmZfZ2V0YXR0cihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQl1MTYgZmFtaWx5LAogCQkJCQlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewogCXJldHVybiAtRU5PU1lTOwogfQotc3RhdGljIGlubGluZSB2b2lkIG5ldGxibF9za2J1ZmZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnJvcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRsYmxfc2tidWZmX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgaW50IGVycm9yLAorCQkJCSAgICAgaW50IGdhdGV3YXkpCiB7CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMveF90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldG5zL3hfdGFibGVzLmgKaW5kZXggMGNiNjNlZC4uYjgwOTM5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMveF90YWJsZXMuaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy94X3RhYmxlcy5oCkBAIC0yLDkgKzIsOSBAQAogI2RlZmluZSBfX05FVE5TX1hfVEFCTEVTX0gKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KIAogc3RydWN0IG5ldG5zX3h0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHRhYmxlc1tOUFJPVE9dOworCXN0cnVjdCBsaXN0X2hlYWQgdGFibGVzW05GUFJPVE9fTlVNUFJPVE9dOwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmggYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAppbmRleCA3MDMzMDVkLi5lZDcxYjExIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaApAQCAtMzAzLDcgKzMwMyw3IEBACiAjZGVmaW5lIFNDVFBfQVNTRVJUKGV4cHIsIHN0ciwgZnVuYykgXAogCWlmICghKGV4cHIpKSB7IFwKIAkJU0NUUF9ERUJVR19QUklOVEsoIkFzc2VydGlvbiBGYWlsZWQ6ICVzKCVzKSBhdCAlczolczolZFxuIiwgXAotCQkJc3RyLCAoI2V4cHIpLCBfX0ZJTEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKKwkJCXN0ciwgKCNleHByKSwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7IFwKIAkJZnVuYzsgXAogCX0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvY2lzY29kZS5oIGIvaW5jbHVkZS9wY21jaWEvY2lzY29kZS5oCmluZGV4IGFkNmUyNzguLmI0MTc5ODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2Npc2NvZGUuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9jaXNjb2RlLmgKQEAgLTExOSw3ICsxMTksNyBAQAogCiAjZGVmaW5lIE1BTkZJRF9UT1NISUJBCQkJMHgwMDk4CiAKLSNkZWZpbmUgTUFORklEX1VOR0VSTUFOTiAweDAyYzAKKyNkZWZpbmUgTUFORklEX1VOR0VSTUFOTgkJMHgwMmMwCiAKICNkZWZpbmUgTUFORklEX1hJUkNPTQkJCTB4MDEwNQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9jaXN0cGwuaCBiL2luY2x1ZGUvcGNtY2lhL2Npc3RwbC5oCmluZGV4IGUyZTEwYzEuLmNmZGQ1YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2Npc3RwbC5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2Npc3RwbC5oCkBAIC01NzMsNDQgKzU3Myw2IEBACiAjZGVmaW5lIFRVUExFX1JFVFVSTl9MSU5LCTB4MDEKICNkZWZpbmUgVFVQTEVfUkVUVVJOX0NPTU1PTgkweDAyCiAKLS8qIEZvciBWYWxpZGF0ZUNJUyAqLwotdHlwZWRlZiBzdHJ1Y3QgY2lzaW5mb190IHsKLSAgICB1X2ludAlDaGFpbnM7Ci19IGNpc2luZm9fdDsKLQogI2RlZmluZSBDSVNUUExfTUFYX0NJU19TSVpFCTB4MjAwCiAKLS8qIEZvciBSZXBsYWNlQ0lTICovCi10eXBlZGVmIHN0cnVjdCBjaXNkdW1wX3QgewotICAgIHVfaW50CUxlbmd0aDsKLSAgICBjaXNkYXRhX3QJRGF0YVtDSVNUUExfTUFYX0NJU19TSVpFXTsKLX0gY2lzZHVtcF90OwotCi0KLWludCBwY21jaWFfcmVwbGFjZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGNpc2R1bXBfdCAqY2lzKTsKLQotLyogZG9uJ3QgdXNlIG91dHNpZGUgb2YgUENNQ0lBIGNvcmUgeWV0ICovCi1pbnQgcGNjYXJkX2dldF9uZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuYywgdHVwbGVfdCAqdHVwbGUpOwotaW50IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwgdHVwbGVfdCAqdHVwbGUpOwotaW50IHBjY2FyZF9nZXRfdHVwbGVfZGF0YShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdHVwbGVfdCAqdHVwbGUpOwotaW50IHBjY2FyZF9wYXJzZV90dXBsZSh0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpOwotCi1pbnQgcGNjYXJkX3ZhbGlkYXRlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLCB1bnNpZ25lZCBpbnQgKmNvdW50KTsKLQotLyogLi4uIGJ1dCB1c2UgdGhlc2Ugd3JhcHBlcnMgaW5zdGVhZCAqLwotI2RlZmluZSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKHBfZGV2LCB0dXBsZSkgXAotCQlwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCB0dXBsZSkKLQotI2RlZmluZSBwY21jaWFfZ2V0X25leHRfdHVwbGUocF9kZXYsIHR1cGxlKSBcCi0JCXBjY2FyZF9nZXRfbmV4dF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywgdHVwbGUpCi0KLSNkZWZpbmUgcGNtY2lhX2dldF90dXBsZV9kYXRhKHBfZGV2LCB0dXBsZSkgXAotCQlwY2NhcmRfZ2V0X3R1cGxlX2RhdGEocF9kZXYtPnNvY2tldCwgdHVwbGUpCi0KLSNkZWZpbmUgcGNtY2lhX3BhcnNlX3R1cGxlKHBfZGV2LCB0dXBsZSwgcGFyc2UpIFwKLQkJcGNjYXJkX3BhcnNlX3R1cGxlKHR1cGxlLCBwYXJzZSkKLQotI2RlZmluZSBwY21jaWFfdmFsaWRhdGVfY2lzKHBfZGV2LCBpbmZvKSBcCi0JCXBjY2FyZF92YWxpZGF0ZV9jaXMocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsIGluZm8pCi0KICNlbmRpZiAvKiBMSU5VWF9DSVNUUExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvY3MuaCBiL2luY2x1ZGUvcGNtY2lhL2NzLmgKaW5kZXggNDVkODRiMi4uOTA0NDY4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvY3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9jcy5oCkBAIC0yOCw3MiArMjgsMTYgQEAKICNkZWZpbmUgQ1NfV1JJVEUJMgogCiAvKiBmb3IgQWRqdXN0UmVzb3VyY2VJbmZvICovCi10eXBlZGVmIHN0cnVjdCBhZGp1c3RfdCB7Ci0gICAgdV9pbnQJQWN0aW9uOwotICAgIHVfaW50CVJlc291cmNlOwotICAgIHVfaW50CUF0dHJpYnV0ZXM7Ci0gICAgdW5pb24gewotCXN0cnVjdCBtZW1vcnkgewotCSAgICB1X2xvbmcJQmFzZTsKLQkgICAgdV9sb25nCVNpemU7Ci0JfSBtZW1vcnk7Ci0Jc3RydWN0IGlvIHsKLQkgICAgaW9hZGRyX3QJQmFzZVBvcnQ7Ci0JICAgIGlvYWRkcl90CU51bVBvcnRzOwotCSAgICB1X2ludAlJT0FkZHJMaW5lczsKLQl9IGlvOwotCXN0cnVjdCBpcnEgewotCSAgICB1X2ludAlJUlE7Ci0JfSBpcnE7Ci0gICAgfSByZXNvdXJjZTsKLX0gYWRqdXN0X3Q7Ci0KIC8qIEFjdGlvbiBmaWVsZCAqLwogI2RlZmluZSBSRU1PVkVfTUFOQUdFRF9SRVNPVVJDRQkJMQogI2RlZmluZSBBRERfTUFOQUdFRF9SRVNPVVJDRQkJMgotI2RlZmluZSBHRVRfRklSU1RfTUFOQUdFRF9SRVNPVVJDRQkzCi0jZGVmaW5lIEdFVF9ORVhUX01BTkFHRURfUkVTT1VSQ0UJNAotLyogUmVzb3VyY2UgZmllbGQgKi8KLSNkZWZpbmUgUkVTX01FTU9SWV9SQU5HRQkJMQotI2RlZmluZSBSRVNfSU9fUkFOR0UJCQkyCi0jZGVmaW5lIFJFU19JUlEJCQkJMwotLyogQXR0cmlidXRlIGZpZWxkICovCi0jZGVmaW5lIFJFU19JUlFfVFlQRQkJCTB4MDMKLSNkZWZpbmUgUkVTX0lSUV9UWVBFX0VYQ0xVU0lWRQkJMAotI2RlZmluZSBSRVNfSVJRX1RZUEVfVElNRQkJMQotI2RlZmluZSBSRVNfSVJRX1RZUEVfRFlOQU1JQwkJMgotI2RlZmluZSBSRVNfSVJRX0NTQwkJCTB4MDQKLSNkZWZpbmUgUkVTX1NIQVJFRAkJCTB4MDgKLSNkZWZpbmUgUkVTX1JFU0VSVkVECQkJMHgxMAotI2RlZmluZSBSRVNfQUxMT0NBVEVECQkJMHgyMAotI2RlZmluZSBSRVNfUkVNT1ZFRAkJCTB4NDAKKwogCiB0eXBlZGVmIHN0cnVjdCBldmVudF9jYWxsYmFja19hcmdzX3QgewogCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpjbGllbnRfaGFuZGxlOwogCXZvaWQJCQkqY2xpZW50X2RhdGE7CiB9IGV2ZW50X2NhbGxiYWNrX2FyZ3NfdDsKIAotLyogZm9yIEdldENvbmZpZ3VyYXRpb25JbmZvICovCi10eXBlZGVmIHN0cnVjdCBjb25maWdfaW5mb190IHsKLSAgICB1X2NoYXIJRnVuY3Rpb247Ci0gICAgdV9pbnQJQXR0cmlidXRlczsKLSAgICB1X2ludAlWY2MsIFZwcDEsIFZwcDI7Ci0gICAgdV9pbnQJSW50VHlwZTsKLSAgICB1X2ludAlDb25maWdCYXNlOwotICAgIHVfY2hhcglTdGF0dXMsIFBpbiwgQ29weSwgT3B0aW9uLCBFeHRTdGF0dXM7Ci0gICAgdV9pbnQJUHJlc2VudDsKLSAgICB1X2ludAlDYXJkVmFsdWVzOwotICAgIHVfaW50CUFzc2lnbmVkSVJROwotICAgIHVfaW50CUlSUUF0dHJpYnV0ZXM7Ci0gICAgaW9hZGRyX3QJQmFzZVBvcnQxOwotICAgIGlvYWRkcl90CU51bVBvcnRzMTsKLSAgICB1X2ludAlBdHRyaWJ1dGVzMTsKLSAgICBpb2FkZHJfdAlCYXNlUG9ydDI7Ci0gICAgaW9hZGRyX3QJTnVtUG9ydHMyOwotICAgIHVfaW50CUF0dHJpYnV0ZXMyOwotICAgIHVfaW50CUlPQWRkckxpbmVzOwotfSBjb25maWdfaW5mb190OwotCiAvKiBGb3IgQ2FyZFZhbHVlcyBmaWVsZCAqLwogI2RlZmluZSBDVl9PUFRJT05fVkFMVUUJCTB4MDEKICNkZWZpbmUgQ1ZfU1RBVFVTX1ZBTFVFCQkweDAyCkBAIC0yNTcsMjIgKzIwMSw2IEBACiAjZGVmaW5lIFdJTl9CQVJfTUFTSwkJMHhlMDAwCiAjZGVmaW5lIFdJTl9CQVJfU0hJRlQJCTEzCiAKLS8qIEF0dHJpYnV0ZXMgZm9yIFJlZ2lzdGVyQ2xpZW50IC0tIFVOVVNFRCAtLSAqLwotI2RlZmluZSBJTkZPX01BU1RFUl9DTElFTlQJMHgwMQotI2RlZmluZSBJTkZPX0lPX0NMSUVOVAkJMHgwMgotI2RlZmluZSBJTkZPX01URF9DTElFTlQJCTB4MDQKLSNkZWZpbmUgSU5GT19NRU1fQ0xJRU5UCQkweDA4Ci0jZGVmaW5lIE1BWF9OVU1fQ0xJRU5UUwkJMwotCi0jZGVmaW5lIElORk9fQ0FSRF9TSEFSRQkJMHgxMAotI2RlZmluZSBJTkZPX0NBUkRfRVhDTAkJMHgyMAotCi10eXBlZGVmIHN0cnVjdCBjc19zdGF0dXNfdCB7Ci0gICAgdV9jaGFyCUZ1bmN0aW9uOwotICAgIGV2ZW50X3QgCUNhcmRTdGF0ZTsKLSAgICBldmVudF90CVNvY2tldFN0YXRlOwotfSBjc19zdGF0dXNfdDsKLQogdHlwZWRlZiBzdHJ1Y3QgZXJyb3JfaW5mb190IHsKICAgICBpbnQJCWZ1bmM7CiAgICAgaW50CQlyZXRjb2RlOwpAQCAtMzA4LDk1ICsyMzYsNCBAQAogI2RlZmluZSBDU19FVkVOVF8zVkNBUkQJCQkweDIwMDAwMAogI2RlZmluZSBDU19FVkVOVF9YVkNBUkQJCQkweDQwMDAwMAogCi0vKiBSZXR1cm4gY29kZXMgKi8KLSNkZWZpbmUgQ1NfU1VDQ0VTUwkJMHgwMAotI2RlZmluZSBDU19CQURfQURBUFRFUgkJMHgwMQotI2RlZmluZSBDU19CQURfQVRUUklCVVRFCTB4MDIKLSNkZWZpbmUgQ1NfQkFEX0JBU0UJCTB4MDMKLSNkZWZpbmUgQ1NfQkFEX0VEQwkJMHgwNAotI2RlZmluZSBDU19CQURfSVJRCQkweDA2Ci0jZGVmaW5lIENTX0JBRF9PRkZTRVQJCTB4MDcKLSNkZWZpbmUgQ1NfQkFEX1BBR0UJCTB4MDgKLSNkZWZpbmUgQ1NfUkVBRF9GQUlMVVJFCQkweDA5Ci0jZGVmaW5lIENTX0JBRF9TSVpFCQkweDBhCi0jZGVmaW5lIENTX0JBRF9TT0NLRVQJCTB4MGIKLSNkZWZpbmUgQ1NfQkFEX1RZUEUJCTB4MGQKLSNkZWZpbmUgQ1NfQkFEX1ZDQwkJMHgwZQotI2RlZmluZSBDU19CQURfVlBQCQkweDBmCi0jZGVmaW5lIENTX0JBRF9XSU5ET1cJCTB4MTEKLSNkZWZpbmUgQ1NfV1JJVEVfRkFJTFVSRQkweDEyCi0jZGVmaW5lIENTX05PX0NBUkQJCTB4MTQKLSNkZWZpbmUgQ1NfVU5TVVBQT1JURURfRlVOQ1RJT04JMHgxNQotI2RlZmluZSBDU19VTlNVUFBPUlRFRF9NT0RFCTB4MTYKLSNkZWZpbmUgQ1NfQkFEX1NQRUVECQkweDE3Ci0jZGVmaW5lIENTX0JVU1kJCQkweDE4Ci0jZGVmaW5lIENTX0dFTkVSQUxfRkFJTFVSRQkweDE5Ci0jZGVmaW5lIENTX1dSSVRFX1BST1RFQ1RFRAkweDFhCi0jZGVmaW5lIENTX0JBRF9BUkdfTEVOR1RICTB4MWIKLSNkZWZpbmUgQ1NfQkFEX0FSR1MJCTB4MWMKLSNkZWZpbmUgQ1NfQ09ORklHVVJBVElPTl9MT0NLRUQJMHgxZAotI2RlZmluZSBDU19JTl9VU0UJCTB4MWUKLSNkZWZpbmUgQ1NfTk9fTU9SRV9JVEVNUwkweDFmCi0jZGVmaW5lIENTX09VVF9PRl9SRVNPVVJDRQkweDIwCi0jZGVmaW5lIENTX0JBRF9IQU5ETEUJCTB4MjEKLQotI2RlZmluZSBDU19CQURfVFVQTEUJCTB4NDAKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotLyoKLSAqICBUaGUgbWFpbiBDYXJkIFNlcnZpY2VzIGVudHJ5IHBvaW50Ci0gKi8KLQotZW51bSBzZXJ2aWNlIHsKLSAgICBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsIEFkZFNvY2tldFNlcnZpY2VzLAotICAgIEFkanVzdFJlc291cmNlSW5mbywgQ2hlY2tFcmFzZVF1ZXVlLCBDbG9zZU1lbW9yeSwgQ29weU1lbW9yeSwKLSAgICBEZXJlZ2lzdGVyQ2xpZW50LCBEZXJlZ2lzdGVyRXJhc2VRdWV1ZSwgR2V0Q2FyZFNlcnZpY2VzSW5mbywKLSAgICBHZXRDbGllbnRJbmZvLCBHZXRDb25maWd1cmF0aW9uSW5mbywgR2V0RXZlbnRNYXNrLAotICAgIEdldEZpcnN0Q2xpZW50LCBHZXRGaXJzdFBhcnRpb24sIEdldEZpcnN0UmVnaW9uLCBHZXRGaXJzdFR1cGxlLAotICAgIEdldE5leHRDbGllbnQsIEdldE5leHRQYXJ0aXRpb24sIEdldE5leHRSZWdpb24sIEdldE5leHRUdXBsZSwKLSAgICBHZXRTdGF0dXMsIEdldFR1cGxlRGF0YSwgTWFwTG9nU29ja2V0LCBNYXBMb2dXaW5kb3csIE1hcE1lbVBhZ2UsCi0gICAgTWFwUGh5U29ja2V0LCBNYXBQaHlXaW5kb3csIE1vZGlmeUNvbmZpZ3VyYXRpb24sIE1vZGlmeVdpbmRvdywKLSAgICBPcGVuTWVtb3J5LCBQYXJzZVR1cGxlLCBSZWFkTWVtb3J5LCBSZWdpc3RlckNsaWVudCwKLSAgICBSZWdpc3RlckVyYXNlUXVldWUsIFJlZ2lzdGVyTVRELCBSZWdpc3RlclRpbWVyLAotICAgIFJlbGVhc2VDb25maWd1cmF0aW9uLCBSZWxlYXNlRXhjbHVzaXZlLCBSZWxlYXNlSU8sIFJlbGVhc2VJUlEsCi0gICAgUmVsZWFzZVNvY2tldE1hc2ssIFJlbGVhc2VXaW5kb3csIFJlcGxhY2VTb2NrZXRTZXJ2aWNlcywKLSAgICBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgUmVxdWVzdEV4Y2x1c2l2ZSwgUmVxdWVzdElPLCBSZXF1ZXN0SVJRLAotICAgIFJlcXVlc3RTb2NrZXRNYXNrLCBSZXF1ZXN0V2luZG93LCBSZXNldENhcmQsIFJldHVyblNTRW50cnksCi0gICAgU2V0RXZlbnRNYXNrLCBTZXRSZWdpb24sIFZhbGlkYXRlQ0lTLCBWZW5kb3JTcGVjaWZpYywKLSAgICBXcml0ZU1lbW9yeSwgQmluZERldmljZSwgQmluZE1URCwgUmVwb3J0RXJyb3IsCi0gICAgU3VzcGVuZENhcmQsIFJlc3VtZUNhcmQsIEVqZWN0Q2FyZCwgSW5zZXJ0Q2FyZCwgUmVwbGFjZUNJUywKLSAgICBHZXRGaXJzdFdpbmRvdywgR2V0TmV4dFdpbmRvdywgR2V0TWVtUGFnZQotfTsKLQotc3RydWN0IHBjbWNpYV9zb2NrZXQ7Ci0KLWludCBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBjb25mX3JlZ190ICpyZWcpOwotaW50IHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgY29uZmlnX2luZm9fdCAqY29uZmlnKTsKLWludCBwY21jaWFfZ2V0X21lbV9wYWdlKHdpbmRvd19oYW5kbGVfdCB3aW4sIG1lbXJlcV90ICpyZXEpOwotaW50IHBjbWNpYV9tYXBfbWVtX3BhZ2Uod2luZG93X2hhbmRsZV90IHdpbiwgbWVtcmVxX3QgKnJlcSk7Ci1pbnQgcGNtY2lhX21vZGlmeV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgbW9kY29uZl90ICptb2QpOwotaW50IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyh3aW5kb3dfaGFuZGxlX3Qgd2luKTsKLWludCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgY29uZmlnX3JlcV90ICpyZXEpOwotaW50IHBjbWNpYV9yZXF1ZXN0X2lvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaW9fcmVxX3QgKnJlcSk7Ci1pbnQgcGNtY2lhX3JlcXVlc3RfaXJxKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaXJxX3JlcV90ICpyZXEpOwotaW50IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKnBfZGV2LCB3aW5fcmVxX3QgKnJlcSwgd2luZG93X2hhbmRsZV90ICp3aCk7Ci1pbnQgcGNtY2lhX3N1c3BlbmRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKLWludCBwY21jaWFfcmVzdW1lX2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7Ci1pbnQgcGNtY2lhX2VqZWN0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7Ci1pbnQgcGNtY2lhX2luc2VydF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotaW50IHBjY2FyZF9yZXNldF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotCi1zdHJ1Y3QgcGNtY2lhX2RldmljZSAqIHBjbWNpYV9kZXZfcHJlc2VudChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotdm9pZCBwY21jaWFfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKLQotc3RydWN0IHBjbWNpYV9zb2NrZXQgKiBwY21jaWFfZ2V0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKLXZvaWQgcGNtY2lhX3B1dF9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7Ci0KLS8qIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zICovCi0jZGVmaW5lIHBjbWNpYV9yZXNldF9jYXJkKHBfZGV2LCByZXEpIFwKLQkJcGNjYXJkX3Jlc2V0X2NhcmQocF9kZXYtPnNvY2tldCkKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogI2VuZGlmIC8qIF9MSU5VWF9DU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9jc190eXBlcy5oIGIvaW5jbHVkZS9wY21jaWEvY3NfdHlwZXMuaAppbmRleCBmNDAyYTBmLi4zMTU5NjVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9jc190eXBlcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2NzX3R5cGVzLmgKQEAgLTIxLDE0ICsyMSw2IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX2F2cjMyX18pIHx8IFwKLQlkZWZpbmVkKF9fYmZpbl9fKQotLyogVGhpcyAoaW9hZGRyX3QpIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlICYgaGVuY2UgY2Fubm90IGJlIGNoYW5nZWQuICovCi10eXBlZGVmIHVfaW50ICAgaW9hZGRyX3Q7Ci0jZWxzZQotdHlwZWRlZiB1X3Nob3J0CWlvYWRkcl90OwotI2VuZGlmCi0KIHR5cGVkZWYgdV9zaG9ydAlzb2NrZXRfdDsKIHR5cGVkZWYgdV9pbnQJZXZlbnRfdDsKIHR5cGVkZWYgdV9jaGFyCWNpc2RhdGFfdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2RldmljZV9pZC5oIGIvaW5jbHVkZS9wY21jaWEvZGV2aWNlX2lkLmgKaW5kZXggZTA0ZTBiMC4uYzMzZWEwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvZGV2aWNlX2lkLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvZGV2aWNlX2lkLmgKQEAgLTEsMTAgKzEsMTkgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKDIwMDMtMjAwNCkgCURvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4KLSAqCQkJCURhdmlkIFdvb2Rob3VzZQorICogZGV2aWNlX2lkLmggLS0gUENNQ0lBIGRyaXZlciBtYXRjaGluZyBoZWxwZXJzCiAgKgotICogTGljZW5zZTogR1BMIHYyCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIChDKSAyMDAzIC0gMjAwNAlEYXZpZCBXb29kaG91c2UKKyAqIChDKSAyMDAzIC0gMjAwNAlEb21pbmlrIEJyb2Rvd3NraQogICovCiAKKyNpZm5kZWYgX0xJTlVYX1BDTUNJQV9ERVZJQ0VfSURfSAorI2RlZmluZSBfTElOVVhfUENNQ0lBX0RFVklDRV9JRF9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQobWFuZiwgY2FyZCkgeyBcCiAJLm1hdGNoX2ZsYWdzID0gUENNQ0lBX0RFVl9JRF9NQVRDSF9NQU5GX0lEfCBcCiAJCQlQQ01DSUFfREVWX0lEX01BVENIX0NBUkRfSUQsIFwKQEAgLTI1NiwzICsyNjUsNiBAQAogCiAKICNkZWZpbmUgUENNQ0lBX0RFVklDRV9OVUxMIHsgLm1hdGNoX2ZsYWdzID0gMCwgfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9MSU5VWF9QQ01DSUFfREVWSUNFX0lEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2RzLmggYi9pbmNsdWRlL3BjbWNpYS9kcy5oCmluZGV4IGIzMTYwMjcuLmEyYmU4MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2RzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvZHMuaApAQCAtMTAsNyArMTAsNyBAQAogICogYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogKEMpIDE5OTkJCURhdmlkIEEuIEhpbmRzCi0gKiAoQykgMjAwMyAtIDIwMDQJRG9taW5payBCcm9kb3dza2kKKyAqIChDKSAyMDAzIC0gMjAwOAlEb21pbmlrIEJyb2Rvd3NraQogICovCiAKICNpZm5kZWYgX0xJTlVYX0RTX0gKQEAgLTIzLDEwOCArMjMsMjEgQEAKICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvZGV2aWNlX2lkLmg+CiAKLXR5cGVkZWYgc3RydWN0IHR1cGxlX3BhcnNlX3QgewotICAgIHR1cGxlX3QJCXR1cGxlOwotICAgIGNpc2RhdGFfdAkJZGF0YVsyNTVdOwotICAgIGNpc3BhcnNlX3QJCXBhcnNlOwotfSB0dXBsZV9wYXJzZV90OwotCi10eXBlZGVmIHN0cnVjdCB3aW5faW5mb190IHsKLSAgICB3aW5kb3dfaGFuZGxlX3QJaGFuZGxlOwotICAgIHdpbl9yZXFfdAkJd2luZG93OwotICAgIG1lbXJlcV90CQltYXA7Ci19IHdpbl9pbmZvX3Q7Ci0gICAgCi10eXBlZGVmIHN0cnVjdCBiaW5kX2luZm9fdCB7Ci0gICAgZGV2X2luZm9fdAkJZGV2X2luZm87Ci0gICAgdV9jaGFyCQlmdW5jdGlvbjsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaW5zdGFuY2U7Ci0gICAgY2hhcgkJbmFtZVtERVZfTkFNRV9MRU5dOwotICAgIHVfc2hvcnQJCW1ham9yLCBtaW5vcjsKLSAgICB2b2lkCQkqbmV4dDsKLX0gYmluZF9pbmZvX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IG10ZF9pbmZvX3QgewotICAgIGRldl9pbmZvX3QJCWRldl9pbmZvOwotICAgIHVfaW50CQlBdHRyaWJ1dGVzOwotICAgIHVfaW50CQlDYXJkT2Zmc2V0OwotfSBtdGRfaW5mb190OwotCi10eXBlZGVmIHN0cnVjdCByZWdpb25faW5mb190IHsKLSAgICB1X2ludAkJQXR0cmlidXRlczsKLSAgICB1X2ludAkJQ2FyZE9mZnNldDsKLSAgICB1X2ludAkJUmVnaW9uU2l6ZTsKLSAgICB1X2ludAkJQWNjZXNzU3BlZWQ7Ci0gICAgdV9pbnQJCUJsb2NrU2l6ZTsKLSAgICB1X2ludAkJUGFydE11bHRpcGxlOwotICAgIHVfY2hhcgkJSmVkZWNNZnIsIEplZGVjSW5mbzsKLSAgICBtZW1vcnlfaGFuZGxlX3QJbmV4dDsKLX0gcmVnaW9uX2luZm9fdDsKLSNkZWZpbmUgUkVHSU9OX1RZUEUJCTB4MDAwMQotI2RlZmluZSBSRUdJT05fVFlQRV9DTQkJMHgwMDAwCi0jZGVmaW5lIFJFR0lPTl9UWVBFX0FNCQkweDAwMDEKLSNkZWZpbmUgUkVHSU9OX1BSRUZFVENICQkweDAwMDgKLSNkZWZpbmUgUkVHSU9OX0NBQ0hFQUJMRQkweDAwMTAKLSNkZWZpbmUgUkVHSU9OX0JBUl9NQVNLCQkweGUwMDAKLSNkZWZpbmUgUkVHSU9OX0JBUl9TSElGVAkxMwotCi10eXBlZGVmIHVuaW9uIGRzX2lvY3RsX2FyZ190IHsKLSAgICBhZGp1c3RfdAkJYWRqdXN0OwotICAgIGNvbmZpZ19pbmZvX3QJY29uZmlnOwotICAgIHR1cGxlX3QJCXR1cGxlOwotICAgIHR1cGxlX3BhcnNlX3QJdHVwbGVfcGFyc2U7Ci0gICAgY2xpZW50X3JlcV90CWNsaWVudF9yZXE7Ci0gICAgY3Nfc3RhdHVzX3QJCXN0YXR1czsKLSAgICBjb25mX3JlZ190CQljb25mX3JlZzsKLSAgICBjaXNpbmZvX3QJCWNpc2luZm87Ci0gICAgcmVnaW9uX2luZm9fdAlyZWdpb247Ci0gICAgYmluZF9pbmZvX3QJCWJpbmRfaW5mbzsKLSAgICBtdGRfaW5mb190CQltdGRfaW5mbzsKLSAgICB3aW5faW5mb190CQl3aW5faW5mbzsKLSAgICBjaXNkdW1wX3QJCWNpc2R1bXA7Ci19IGRzX2lvY3RsX2FyZ190OwotCi0jZGVmaW5lIERTX0FESlVTVF9SRVNPVVJDRV9JTkZPCQlfSU9XUignZCcsIDIsIGFkanVzdF90KQotI2RlZmluZSBEU19HRVRfQ09ORklHVVJBVElPTl9JTkZPCV9JT1dSKCdkJywgMywgY29uZmlnX2luZm9fdCkKLSNkZWZpbmUgRFNfR0VUX0ZJUlNUX1RVUExFCQlfSU9XUignZCcsIDQsIHR1cGxlX3QpCi0jZGVmaW5lIERTX0dFVF9ORVhUX1RVUExFCQlfSU9XUignZCcsIDUsIHR1cGxlX3QpCi0jZGVmaW5lIERTX0dFVF9UVVBMRV9EQVRBCQlfSU9XUignZCcsIDYsIHR1cGxlX3BhcnNlX3QpCi0jZGVmaW5lIERTX1BBUlNFX1RVUExFCQkJX0lPV1IoJ2QnLCA3LCB0dXBsZV9wYXJzZV90KQotI2RlZmluZSBEU19SRVNFVF9DQVJECQkJX0lPICAoJ2QnLCA4KQotI2RlZmluZSBEU19HRVRfU1RBVFVTCQkJX0lPV1IoJ2QnLCA5LCBjc19zdGF0dXNfdCkKLSNkZWZpbmUgRFNfQUNDRVNTX0NPTkZJR1VSQVRJT05fUkVHSVNURVIgX0lPV1IoJ2QnLCAxMCwgY29uZl9yZWdfdCkKLSNkZWZpbmUgRFNfVkFMSURBVEVfQ0lTCQkJX0lPUiAoJ2QnLCAxMSwgY2lzaW5mb190KQotI2RlZmluZSBEU19TVVNQRU5EX0NBUkQJCQlfSU8gICgnZCcsIDEyKQotI2RlZmluZSBEU19SRVNVTUVfQ0FSRAkJCV9JTyAgKCdkJywgMTMpCi0jZGVmaW5lIERTX0VKRUNUX0NBUkQJCQlfSU8gICgnZCcsIDE0KQotI2RlZmluZSBEU19JTlNFUlRfQ0FSRAkJCV9JTyAgKCdkJywgMTUpCi0jZGVmaW5lIERTX0dFVF9GSVJTVF9SRUdJT04JCV9JT1dSKCdkJywgMTYsIHJlZ2lvbl9pbmZvX3QpCi0jZGVmaW5lIERTX0dFVF9ORVhUX1JFR0lPTgkJX0lPV1IoJ2QnLCAxNywgcmVnaW9uX2luZm9fdCkKLSNkZWZpbmUgRFNfUkVQTEFDRV9DSVMJCQlfSU9XUignZCcsIDE4LCBjaXNkdW1wX3QpCi0jZGVmaW5lIERTX0dFVF9GSVJTVF9XSU5ET1cJCV9JT1IgKCdkJywgMTksIHdpbl9pbmZvX3QpCi0jZGVmaW5lIERTX0dFVF9ORVhUX1dJTkRPVwkJX0lPV1IoJ2QnLCAyMCwgd2luX2luZm9fdCkKLSNkZWZpbmUgRFNfR0VUX01FTV9QQUdFCQkJX0lPV1IoJ2QnLCAyMSwgd2luX2luZm9fdCkKLQotI2RlZmluZSBEU19CSU5EX1JFUVVFU1QJCQlfSU9XUignZCcsIDYwLCBiaW5kX2luZm9fdCkKLSNkZWZpbmUgRFNfR0VUX0RFVklDRV9JTkZPCQlfSU9XUignZCcsIDYxLCBiaW5kX2luZm9fdCkgCi0jZGVmaW5lIERTX0dFVF9ORVhUX0RFVklDRQkJX0lPV1IoJ2QnLCA2MiwgYmluZF9pbmZvX3QpIAotI2RlZmluZSBEU19VTkJJTkRfUkVRVUVTVAkJX0lPVyAoJ2QnLCA2MywgYmluZF9pbmZvX3QpCi0jZGVmaW5lIERTX0JJTkRfTVRECQkJX0lPV1IoJ2QnLCA2NCwgbXRkX2luZm9fdCkKLQogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KIAotdHlwZWRlZiBzdHJ1Y3QgZGV2X25vZGVfdCB7Ci0gICAgY2hhcgkJZGV2X25hbWVbREVWX05BTUVfTEVOXTsKLSAgICB1X3Nob3J0CQltYWpvciwgbWlub3I7Ci0gICAgc3RydWN0IGRldl9ub2RlX3QJKm5leHQ7Ci19IGRldl9ub2RlX3Q7Ci0KLQorLyoKKyAqIFBDTUNJQSBkZXZpY2UgZHJpdmVycyAoMTYtYml0IGNhcmRzIG9ubHk7IDMyLWJpdCBjYXJkcyByZXF1aXJlIENhcmRCdXMKKyAqIGEuay5hLiBQQ0kgZHJpdmVycworICovCiBzdHJ1Y3QgcGNtY2lhX3NvY2tldDsKK3N0cnVjdCBwY21jaWFfZGV2aWNlOwogc3RydWN0IGNvbmZpZ190OwogCisvKiBkeW5hbWljIGRldmljZSBJRHMgZm9yIFBDTUNJQSBkZXZpY2UgZHJpdmVycy4gU2VlCisgKiBEb2N1bWVudGF0aW9uL3BjbWNpYS9kcml2ZXIudHh0IGZvciBkZXRhaWxzLgorKi8KIHN0cnVjdCBwY21jaWFfZHluaWRzIHsKIAlzcGlubG9ja190CQlsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKQEAgLTE0Nyw2ICs2MCwxNCBAQAogaW50IHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjbWNpYV9kcml2ZXIgKmRyaXZlcik7CiB2b2lkIHBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqZHJpdmVyKTsKIAorLyogU29tZSBkcml2ZXJzIHVzZSBkZXZfbm9kZV90IHRvIHN0b3JlIGNoYXIgb3IgYmxvY2sgZGV2aWNlIGluZm9ybWF0aW9uLgorICogRG9uJ3QgdXNlIHRoaXMgaW4gbmV3IGRyaXZlcnMsIHRob3VnaC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgZGV2X25vZGVfdCB7CisJY2hhcgkJCWRldl9uYW1lW0RFVl9OQU1FX0xFTl07CisJdV9zaG9ydAkJCW1ham9yLCBtaW5vcjsKKwlzdHJ1Y3QgZGV2X25vZGVfdAkqbmV4dDsKK30gZGV2X25vZGVfdDsKIAogc3RydWN0IHBjbWNpYV9kZXZpY2UgewogCS8qIHRoZSBzb2NrZXQgYW5kIHRoZSBkZXZpY2Vfbm8gW2ZvciBtdWx0aWZ1bmN0aW9uIGRldmljZXNdCkBAIC0yMTYsMTAgKzEzNywzMDQgQEAKICNkZWZpbmUgdG9fcGNtY2lhX2RldihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHBjbWNpYV9kZXZpY2UsIGRldikKICNkZWZpbmUgdG9fcGNtY2lhX2RydihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHBjbWNpYV9kcml2ZXIsIGRydikKIAorLyogZGVwcmVjYXRlZCAtLSBkb24ndCB1c2UhICovCiAjZGVmaW5lIGhhbmRsZV90b19kZXYoaGFuZGxlKSAoaGFuZGxlLT5kZXYpCiAKLS8qIGVycm9yIHJlcG9ydGluZyAqLwotdm9pZCBjc19lcnJvcihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCBpbnQgZnVuYywgaW50IHJldCk7CisKKy8qIChkZXByZWNhdGVkKSBlcnJvciByZXBvcnRpbmcgYnkgUENNQ0lBIGRldmljZXMuIFVzZSBkZXZfcHJpbnRrKCkKKyAqIG9yIGRldl9kYmcoKSBkaXJlY3RseSBpbiB0aGUgZHJpdmVyLCB3aXRob3V0IHJlZmVycmluZyB0byBwY21jaWFfZXJyb3JfZnVuYygpCisgKiBhbmQvb3IgcGNtY2lhX2Vycm9yX3JldCgpIGZvciB0aG9zZSBmdW5jdGlvbnMgd2lsbCBnbyBhd2F5IHNvb24uCisgKi8KK2VudW0gc2VydmljZSB7CisgICAgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBBZGRTb2NrZXRTZXJ2aWNlcywKKyAgICBBZGp1c3RSZXNvdXJjZUluZm8sIENoZWNrRXJhc2VRdWV1ZSwgQ2xvc2VNZW1vcnksIENvcHlNZW1vcnksCisgICAgRGVyZWdpc3RlckNsaWVudCwgRGVyZWdpc3RlckVyYXNlUXVldWUsIEdldENhcmRTZXJ2aWNlc0luZm8sCisgICAgR2V0Q2xpZW50SW5mbywgR2V0Q29uZmlndXJhdGlvbkluZm8sIEdldEV2ZW50TWFzaywKKyAgICBHZXRGaXJzdENsaWVudCwgR2V0Rmlyc3RQYXJ0aW9uLCBHZXRGaXJzdFJlZ2lvbiwgR2V0Rmlyc3RUdXBsZSwKKyAgICBHZXROZXh0Q2xpZW50LCBHZXROZXh0UGFydGl0aW9uLCBHZXROZXh0UmVnaW9uLCBHZXROZXh0VHVwbGUsCisgICAgR2V0U3RhdHVzLCBHZXRUdXBsZURhdGEsIE1hcExvZ1NvY2tldCwgTWFwTG9nV2luZG93LCBNYXBNZW1QYWdlLAorICAgIE1hcFBoeVNvY2tldCwgTWFwUGh5V2luZG93LCBNb2RpZnlDb25maWd1cmF0aW9uLCBNb2RpZnlXaW5kb3csCisgICAgT3Blbk1lbW9yeSwgUGFyc2VUdXBsZSwgUmVhZE1lbW9yeSwgUmVnaXN0ZXJDbGllbnQsCisgICAgUmVnaXN0ZXJFcmFzZVF1ZXVlLCBSZWdpc3Rlck1URCwgUmVnaXN0ZXJUaW1lciwKKyAgICBSZWxlYXNlQ29uZmlndXJhdGlvbiwgUmVsZWFzZUV4Y2x1c2l2ZSwgUmVsZWFzZUlPLCBSZWxlYXNlSVJRLAorICAgIFJlbGVhc2VTb2NrZXRNYXNrLCBSZWxlYXNlV2luZG93LCBSZXBsYWNlU29ja2V0U2VydmljZXMsCisgICAgUmVxdWVzdENvbmZpZ3VyYXRpb24sIFJlcXVlc3RFeGNsdXNpdmUsIFJlcXVlc3RJTywgUmVxdWVzdElSUSwKKyAgICBSZXF1ZXN0U29ja2V0TWFzaywgUmVxdWVzdFdpbmRvdywgUmVzZXRDYXJkLCBSZXR1cm5TU0VudHJ5LAorICAgIFNldEV2ZW50TWFzaywgU2V0UmVnaW9uLCBWYWxpZGF0ZUNJUywgVmVuZG9yU3BlY2lmaWMsCisgICAgV3JpdGVNZW1vcnksIEJpbmREZXZpY2UsIEJpbmRNVEQsIFJlcG9ydEVycm9yLAorICAgIFN1c3BlbmRDYXJkLCBSZXN1bWVDYXJkLCBFamVjdENhcmQsIEluc2VydENhcmQsIFJlcGxhY2VDSVMsCisgICAgR2V0Rmlyc3RXaW5kb3csIEdldE5leHRXaW5kb3csIEdldE1lbVBhZ2UKK307Citjb25zdCBjaGFyICpwY21jaWFfZXJyb3JfZnVuYyhpbnQgZnVuYyk7Citjb25zdCBjaGFyICpwY21jaWFfZXJyb3JfcmV0KGludCByZXQpOworCisjZGVmaW5lIGNzX2Vycm9yKHBfZGV2LCBmdW5jLCByZXQpCQkJXAorCXsJCQkJCQlcCisJCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZwX2Rldi0+ZGV2LAlcCisJCQkgICAiJXMgOiAlc1xuIiwJCQlcCisJCQkgICBwY21jaWFfZXJyb3JfZnVuYyhmdW5jKSwJXAorCQkJICAgcGNtY2lhX2Vycm9yX3JldChyZXQpKTsJXAorCX0KKworLyogQ0lTIGFjY2Vzcy4KKyAqIFVzZSB0aGUgcGNtY2lhXyogdmVyc2lvbnMgaW4gUENNQ0lBIGRyaXZlcnMKKyAqLworaW50IHBjbWNpYV9wYXJzZV90dXBsZSh0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpOworCitpbnQgcGNjYXJkX2dldF9maXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLAorCQkJICAgdHVwbGVfdCAqdHVwbGUpOworI2RlZmluZSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKHBfZGV2LCB0dXBsZSkgXAorCQlwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCB0dXBsZSkKKworaW50IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLAorCQkJICB0dXBsZV90ICp0dXBsZSk7CisjZGVmaW5lIHBjbWNpYV9nZXRfbmV4dF90dXBsZShwX2RldiwgdHVwbGUpIFwKKwkJcGNjYXJkX2dldF9uZXh0X3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCB0dXBsZSkKKworaW50IHBjY2FyZF9nZXRfdHVwbGVfZGF0YShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdHVwbGVfdCAqdHVwbGUpOworI2RlZmluZSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEocF9kZXYsIHR1cGxlKSBcCisJCXBjY2FyZF9nZXRfdHVwbGVfZGF0YShwX2Rldi0+c29ja2V0LCB0dXBsZSkKKworCisvKiBsb29wIENJUyBlbnRyaWVzIGZvciB2YWxpZCBjb25maWd1cmF0aW9uICovCitpbnQgcGNtY2lhX2xvb3BfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJICAgICAgIGludAkoKmNvbmZfY2hlY2spCShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJCQkgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCQkJCQkgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQkJCSB1bnNpZ25lZCBpbnQgdmNjLAorCQkJCQkJIHZvaWQgKnByaXZfZGF0YSksCisJCSAgICAgICB2b2lkICpwcml2X2RhdGEpOworCisvKiBpcyB0aGUgZGV2aWNlIHN0aWxsIHRoZXJlPyAqLworc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9kZXZfcHJlc2VudChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworCisvKiBsb3ctbGV2ZWwgaW50ZXJmYWNlIHJlc2V0ICovCitpbnQgcGNtY2lhX3Jlc2V0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CisKKy8qIENJUyBjb25maWcgKi8KK2ludCBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCQkgY29uZl9yZWdfdCAqcmVnKTsKKworLyogZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KK2ludCBwY21jaWFfcmVxdWVzdF9pbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlvX3JlcV90ICpyZXEpOworaW50IHBjbWNpYV9yZXF1ZXN0X2lycShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlycV9yZXFfdCAqcmVxKTsKK2ludCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQkgY29uZmlnX3JlcV90ICpyZXEpOworCitpbnQgcGNtY2lhX3JlcXVlc3Rfd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICoqcF9kZXYsIHdpbl9yZXFfdCAqcmVxLAorCQkJICB3aW5kb3dfaGFuZGxlX3QgKndoKTsKK2ludCBwY21jaWFfcmVsZWFzZV93aW5kb3cod2luZG93X2hhbmRsZV90IHdpbik7CisKK2ludCBwY21jaWFfZ2V0X21lbV9wYWdlKHdpbmRvd19oYW5kbGVfdCB3aW4sIG1lbXJlcV90ICpyZXEpOworaW50IHBjbWNpYV9tYXBfbWVtX3BhZ2Uod2luZG93X2hhbmRsZV90IHdpbiwgbWVtcmVxX3QgKnJlcSk7CisKK2ludCBwY21jaWFfbW9kaWZ5X2NvbmZpZ3VyYXRpb24oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBtb2Rjb25mX3QgKm1vZCk7Cit2b2lkIHBjbWNpYV9kaXNhYmxlX2RldmljZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisKKworLyogQmVsb3csIHRoZXJlIGFyZSBvbmx5IGRlZmluaXRpb25zIHdoaWNoIGFyZSB1c2VkIGJ5CisgKiAtIHRoZSBQQ01DSUEgaW9jdGwKKyAqIC0gZGVwcmVjYXRlZCBQQ01DSUEgdXNlcnNwYWNlIHRvb2xzIG9ubHkKKyAqCisgKiBoZXJlIGJlIGRyYWdvbnMgLi4uIGhlcmUgYmUgZHJhZ29ucyAuLi4gaGVyZSBiZSBkcmFnb25zIC4uLiBoZXJlIGJlIGRyYWcKKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfUENNQ0lBX0lPQ1RMKSB8fCAhZGVmaW5lZChfX0tFUk5FTF9fKQorCisjaWYgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZpbmVkKF9fYXZyMzJfXykgfHwgXAorCWRlZmluZWQoX19iZmluX18pCisvKiBUaGlzIChpb2FkZHJfdCkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgJiBoZW5jZSBjYW5ub3QgYmUgY2hhbmdlZC4gKi8KK3R5cGVkZWYgdV9pbnQgICBpb2FkZHJfdDsKKyNlbHNlCit0eXBlZGVmIHVfc2hvcnQJaW9hZGRyX3Q7CisjZW5kaWYKKworLyogZm9yIEFkanVzdFJlc291cmNlSW5mbyAqLwordHlwZWRlZiBzdHJ1Y3QgYWRqdXN0X3QgeworCXVfaW50CQkJQWN0aW9uOworCXVfaW50CQkJUmVzb3VyY2U7CisJdV9pbnQJCQlBdHRyaWJ1dGVzOworCXVuaW9uIHsKKwkJc3RydWN0IG1lbW9yeSB7CisJCQl1X2xvbmcJCUJhc2U7CisJCQl1X2xvbmcJCVNpemU7CisJCX0gbWVtb3J5OworCQlzdHJ1Y3QgaW8geworCQkJaW9hZGRyX3QJQmFzZVBvcnQ7CisJCQlpb2FkZHJfdAlOdW1Qb3J0czsKKwkJCXVfaW50CQlJT0FkZHJMaW5lczsKKwkJfSBpbzsKKwkJc3RydWN0IGlycSB7CisJCQl1X2ludAkJSVJROworCQl9IGlycTsKKwl9IHJlc291cmNlOworfSBhZGp1c3RfdDsKKworLyogQWN0aW9uIGZpZWxkICovCisjZGVmaW5lIFJFTU9WRV9NQU5BR0VEX1JFU09VUkNFCQkxCisjZGVmaW5lIEFERF9NQU5BR0VEX1JFU09VUkNFCQkyCisjZGVmaW5lIEdFVF9GSVJTVF9NQU5BR0VEX1JFU09VUkNFCTMKKyNkZWZpbmUgR0VUX05FWFRfTUFOQUdFRF9SRVNPVVJDRQk0CisvKiBSZXNvdXJjZSBmaWVsZCAqLworI2RlZmluZSBSRVNfTUVNT1JZX1JBTkdFCQkxCisjZGVmaW5lIFJFU19JT19SQU5HRQkJCTIKKyNkZWZpbmUgUkVTX0lSUQkJCQkzCisvKiBBdHRyaWJ1dGUgZmllbGQgKi8KKyNkZWZpbmUgUkVTX0lSUV9UWVBFCQkJMHgwMworI2RlZmluZSBSRVNfSVJRX1RZUEVfRVhDTFVTSVZFCQkwCisjZGVmaW5lIFJFU19JUlFfVFlQRV9USU1FCQkxCisjZGVmaW5lIFJFU19JUlFfVFlQRV9EWU5BTUlDCQkyCisjZGVmaW5lIFJFU19JUlFfQ1NDCQkJMHgwNAorI2RlZmluZSBSRVNfU0hBUkVECQkJMHgwOAorI2RlZmluZSBSRVNfUkVTRVJWRUQJCQkweDEwCisjZGVmaW5lIFJFU19BTExPQ0FURUQJCQkweDIwCisjZGVmaW5lIFJFU19SRU1PVkVECQkJMHg0MAorCisKK3R5cGVkZWYgc3RydWN0IHR1cGxlX3BhcnNlX3QgeworCXR1cGxlX3QJCQl0dXBsZTsKKwljaXNkYXRhX3QJCWRhdGFbMjU1XTsKKwljaXNwYXJzZV90CQlwYXJzZTsKK30gdHVwbGVfcGFyc2VfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgd2luX2luZm9fdCB7CisJd2luZG93X2hhbmRsZV90CQloYW5kbGU7CisJd2luX3JlcV90CQl3aW5kb3c7CisJbWVtcmVxX3QJCW1hcDsKK30gd2luX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgYmluZF9pbmZvX3QgeworCWRldl9pbmZvX3QJCWRldl9pbmZvOworCXVfY2hhcgkJCWZ1bmN0aW9uOworCXN0cnVjdCBwY21jaWFfZGV2aWNlCSppbnN0YW5jZTsKKwljaGFyCQkJbmFtZVtERVZfTkFNRV9MRU5dOworCXVfc2hvcnQJCQltYWpvciwgbWlub3I7CisJdm9pZAkJCSpuZXh0OworfSBiaW5kX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgbXRkX2luZm9fdCB7CisJZGV2X2luZm9fdCAgICAgCQlkZXZfaW5mbzsKKwl1X2ludAkJCUF0dHJpYnV0ZXM7CisJdV9pbnQJCQlDYXJkT2Zmc2V0OworfSBtdGRfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCByZWdpb25faW5mb190IHsKKwl1X2ludAkJCUF0dHJpYnV0ZXM7CisJdV9pbnQJCQlDYXJkT2Zmc2V0OworCXVfaW50CQkJUmVnaW9uU2l6ZTsKKwl1X2ludAkJCUFjY2Vzc1NwZWVkOworCXVfaW50CQkJQmxvY2tTaXplOworCXVfaW50CQkJUGFydE11bHRpcGxlOworCXVfY2hhcgkJCUplZGVjTWZyLCBKZWRlY0luZm87CisJbWVtb3J5X2hhbmRsZV90CQluZXh0OworfSByZWdpb25faW5mb190OworCisjZGVmaW5lIFJFR0lPTl9UWVBFCQkweDAwMDEKKyNkZWZpbmUgUkVHSU9OX1RZUEVfQ00JCTB4MDAwMAorI2RlZmluZSBSRUdJT05fVFlQRV9BTQkJMHgwMDAxCisjZGVmaW5lIFJFR0lPTl9QUkVGRVRDSAkJMHgwMDA4CisjZGVmaW5lIFJFR0lPTl9DQUNIRUFCTEUJMHgwMDEwCisjZGVmaW5lIFJFR0lPTl9CQVJfTUFTSwkJMHhlMDAwCisjZGVmaW5lIFJFR0lPTl9CQVJfU0hJRlQJMTMKKworLyogRm9yIFJlcGxhY2VDSVMgKi8KK3R5cGVkZWYgc3RydWN0IGNpc2R1bXBfdCB7CisJdV9pbnQJCQlMZW5ndGg7CisJY2lzZGF0YV90CQlEYXRhW0NJU1RQTF9NQVhfQ0lTX1NJWkVdOworfSBjaXNkdW1wX3Q7CisKKy8qIGZvciBHZXRDb25maWd1cmF0aW9uSW5mbyAqLwordHlwZWRlZiBzdHJ1Y3QgY29uZmlnX2luZm9fdCB7CisJdV9jaGFyCQkJRnVuY3Rpb247CisJdV9pbnQJCQlBdHRyaWJ1dGVzOworCXVfaW50CQkJVmNjLCBWcHAxLCBWcHAyOworCXVfaW50CQkJSW50VHlwZTsKKwl1X2ludAkJCUNvbmZpZ0Jhc2U7CisJdV9jaGFyCQkJU3RhdHVzLCBQaW4sIENvcHksIE9wdGlvbiwgRXh0U3RhdHVzOworCXVfaW50CQkJUHJlc2VudDsKKwl1X2ludAkJCUNhcmRWYWx1ZXM7CisJdV9pbnQJCQlBc3NpZ25lZElSUTsKKwl1X2ludAkJCUlSUUF0dHJpYnV0ZXM7CisJaW9hZGRyX3QJCUJhc2VQb3J0MTsKKwlpb2FkZHJfdAkJTnVtUG9ydHMxOworCXVfaW50CQkJQXR0cmlidXRlczE7CisJaW9hZGRyX3QJCUJhc2VQb3J0MjsKKwlpb2FkZHJfdAkJTnVtUG9ydHMyOworCXVfaW50CQkJQXR0cmlidXRlczI7CisJdV9pbnQJCQlJT0FkZHJMaW5lczsKK30gY29uZmlnX2luZm9fdDsKKworLyogRm9yIFZhbGlkYXRlQ0lTICovCit0eXBlZGVmIHN0cnVjdCBjaXNpbmZvX3QgeworCXVfaW50CQkJQ2hhaW5zOworfSBjaXNpbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IGNzX3N0YXR1c190IHsKKwl1X2NoYXIJCQlGdW5jdGlvbjsKKwlldmVudF90IAkJQ2FyZFN0YXRlOworCWV2ZW50X3QJCQlTb2NrZXRTdGF0ZTsKK30gY3Nfc3RhdHVzX3Q7CisKK3R5cGVkZWYgdW5pb24gZHNfaW9jdGxfYXJnX3QgeworCWFkanVzdF90CQlhZGp1c3Q7CisJY29uZmlnX2luZm9fdAkJY29uZmlnOworCXR1cGxlX3QJCQl0dXBsZTsKKwl0dXBsZV9wYXJzZV90CQl0dXBsZV9wYXJzZTsKKwljbGllbnRfcmVxX3QJCWNsaWVudF9yZXE7CisJY3Nfc3RhdHVzX3QJCXN0YXR1czsKKwljb25mX3JlZ190CQljb25mX3JlZzsKKwljaXNpbmZvX3QJCWNpc2luZm87CisJcmVnaW9uX2luZm9fdAkJcmVnaW9uOworCWJpbmRfaW5mb190CQliaW5kX2luZm87CisJbXRkX2luZm9fdAkJbXRkX2luZm87CisJd2luX2luZm9fdAkJd2luX2luZm87CisJY2lzZHVtcF90CQljaXNkdW1wOworfSBkc19pb2N0bF9hcmdfdDsKKworI2RlZmluZSBEU19BREpVU1RfUkVTT1VSQ0VfSU5GTwkJCV9JT1dSKCdkJywgIDIsIGFkanVzdF90KQorI2RlZmluZSBEU19HRVRfQ09ORklHVVJBVElPTl9JTkZPCQlfSU9XUignZCcsICAzLCBjb25maWdfaW5mb190KQorI2RlZmluZSBEU19HRVRfRklSU1RfVFVQTEUJCQlfSU9XUignZCcsICA0LCB0dXBsZV90KQorI2RlZmluZSBEU19HRVRfTkVYVF9UVVBMRQkJCV9JT1dSKCdkJywgIDUsIHR1cGxlX3QpCisjZGVmaW5lIERTX0dFVF9UVVBMRV9EQVRBCQkJX0lPV1IoJ2QnLCAgNiwgdHVwbGVfcGFyc2VfdCkKKyNkZWZpbmUgRFNfUEFSU0VfVFVQTEUJCQkJX0lPV1IoJ2QnLCAgNywgdHVwbGVfcGFyc2VfdCkKKyNkZWZpbmUgRFNfUkVTRVRfQ0FSRAkJCQlfSU8gICgnZCcsICA4KQorI2RlZmluZSBEU19HRVRfU1RBVFVTCQkJCV9JT1dSKCdkJywgIDksIGNzX3N0YXR1c190KQorI2RlZmluZSBEU19BQ0NFU1NfQ09ORklHVVJBVElPTl9SRUdJU1RFUglfSU9XUignZCcsIDEwLCBjb25mX3JlZ190KQorI2RlZmluZSBEU19WQUxJREFURV9DSVMJCQkJX0lPUiAoJ2QnLCAxMSwgY2lzaW5mb190KQorI2RlZmluZSBEU19TVVNQRU5EX0NBUkQJCQkJX0lPICAoJ2QnLCAxMikKKyNkZWZpbmUgRFNfUkVTVU1FX0NBUkQJCQkJX0lPICAoJ2QnLCAxMykKKyNkZWZpbmUgRFNfRUpFQ1RfQ0FSRAkJCQlfSU8gICgnZCcsIDE0KQorI2RlZmluZSBEU19JTlNFUlRfQ0FSRAkJCQlfSU8gICgnZCcsIDE1KQorI2RlZmluZSBEU19HRVRfRklSU1RfUkVHSU9OCQkJX0lPV1IoJ2QnLCAxNiwgcmVnaW9uX2luZm9fdCkKKyNkZWZpbmUgRFNfR0VUX05FWFRfUkVHSU9OCQkJX0lPV1IoJ2QnLCAxNywgcmVnaW9uX2luZm9fdCkKKyNkZWZpbmUgRFNfUkVQTEFDRV9DSVMJCQkJX0lPV1IoJ2QnLCAxOCwgY2lzZHVtcF90KQorI2RlZmluZSBEU19HRVRfRklSU1RfV0lORE9XCQkJX0lPUiAoJ2QnLCAxOSwgd2luX2luZm9fdCkKKyNkZWZpbmUgRFNfR0VUX05FWFRfV0lORE9XCQkJX0lPV1IoJ2QnLCAyMCwgd2luX2luZm9fdCkKKyNkZWZpbmUgRFNfR0VUX01FTV9QQUdFCQkJCV9JT1dSKCdkJywgMjEsIHdpbl9pbmZvX3QpCisKKyNkZWZpbmUgRFNfQklORF9SRVFVRVNUCQkJCV9JT1dSKCdkJywgNjAsIGJpbmRfaW5mb190KQorI2RlZmluZSBEU19HRVRfREVWSUNFX0lORk8JCQlfSU9XUignZCcsIDYxLCBiaW5kX2luZm9fdCkKKyNkZWZpbmUgRFNfR0VUX05FWFRfREVWSUNFCQkJX0lPV1IoJ2QnLCA2MiwgYmluZF9pbmZvX3QpCisjZGVmaW5lIERTX1VOQklORF9SRVFVRVNUCQkJX0lPVyAoJ2QnLCA2MywgYmluZF9pbmZvX3QpCisjZGVmaW5lIERTX0JJTkRfTVRECQkJCV9JT1dSKCdkJywgNjQsIG10ZF9pbmZvX3QpCisKKworLyogdXNlZCBpbiB1c2Vyc3BhY2Ugb25seSAqLworI2RlZmluZSBDU19JTl9VU0UJCQkweDFlCisKKyNkZWZpbmUgSU5GT19NQVNURVJfQ0xJRU5UCTB4MDEKKyNkZWZpbmUgSU5GT19JT19DTElFTlQJCTB4MDIKKyNkZWZpbmUgSU5GT19NVERfQ0xJRU5UCQkweDA0CisjZGVmaW5lIElORk9fTUVNX0NMSUVOVAkJMHgwOAorI2RlZmluZSBNQVhfTlVNX0NMSUVOVFMJCTMKKworI2RlZmluZSBJTkZPX0NBUkRfU0hBUkUJCTB4MTAKKyNkZWZpbmUgSU5GT19DQVJEX0VYQ0wJCTB4MjAKKworCisjZW5kaWYgLyogIWRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChDT05GSUdfUENNQ0lBX0lPQ1RMKSAqLworCiAjZW5kaWYgLyogX0xJTlVYX0RTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL3NzLmggYi9pbmNsdWRlL3BjbWNpYS9zcy5oCmluZGV4IGVkOTE5ZGQuLjliNGFjOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL3NzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvc3MuaApAQCAtNTMsMTAgKzUzLDEwIEBACiAKIC8qIGZvciBHZXRTb2NrZXQsIFNldFNvY2tldCAqLwogdHlwZWRlZiBzdHJ1Y3Qgc29ja2V0X3N0YXRlX3QgewotICAgIHVfaW50CWZsYWdzOwotICAgIHVfaW50CWNzY19tYXNrOwotICAgIHVfY2hhcglWY2MsIFZwcDsKLSAgICB1X2NoYXIJaW9faXJxOworCXVfaW50CWZsYWdzOworCXVfaW50CWNzY19tYXNrOworCXVfY2hhcglWY2MsIFZwcDsKKwl1X2NoYXIJaW9faXJxOwogfSBzb2NrZXRfc3RhdGVfdDsKIAogZXh0ZXJuIHNvY2tldF9zdGF0ZV90IGRlYWRfc29ja2V0OwpAQCAtODYsNzkgKzg2LDIyIEBACiAjZGVmaW5lIEhPT0tfUE9XRVJfUFJFCTB4MDEKICNkZWZpbmUgSE9PS19QT1dFUl9QT1NUCTB4MDIKIAotCiB0eXBlZGVmIHN0cnVjdCBwY2NhcmRfaW9fbWFwIHsKLSAgICB1X2NoYXIJbWFwOwotICAgIHVfY2hhcglmbGFnczsKLSAgICB1X3Nob3J0CXNwZWVkOwotICAgIHVfaW50CXN0YXJ0LCBzdG9wOworCXVfY2hhcgltYXA7CisJdV9jaGFyCWZsYWdzOworCXVfc2hvcnQJc3BlZWQ7CisJdV9pbnQJc3RhcnQsIHN0b3A7CiB9IHBjY2FyZF9pb19tYXA7CiAKIHR5cGVkZWYgc3RydWN0IHBjY2FyZF9tZW1fbWFwIHsKLSAgICB1X2NoYXIJbWFwOwotICAgIHVfY2hhcglmbGFnczsKLSAgICB1X3Nob3J0CXNwZWVkOwotICAgIHVfbG9uZwlzdGF0aWNfc3RhcnQ7Ci0gICAgdV9pbnQJY2FyZF9zdGFydDsKLSAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1X2NoYXIJCW1hcDsKKwl1X2NoYXIJCWZsYWdzOworCXVfc2hvcnQJCXNwZWVkOworCXVfbG9uZwkJc3RhdGljX3N0YXJ0OworCXVfaW50CQljYXJkX3N0YXJ0OworCXN0cnVjdCByZXNvdXJjZQkqcmVzOwogfSBwY2NhcmRfbWVtX21hcDsKIAotdHlwZWRlZiBzdHJ1Y3QgY2JfYnJpZGdlX21hcCB7Ci0gICAgdV9jaGFyCW1hcDsKLSAgICB1X2NoYXIJZmxhZ3M7Ci0gICAgdV9pbnQJc3RhcnQsIHN0b3A7Ci19IGNiX2JyaWRnZV9tYXA7Ci0KLS8qCi0gKiBTb2NrZXQgb3BlcmF0aW9ucy4KLSAqLwotc3RydWN0IHBjbWNpYV9zb2NrZXQ7Ci0KLXN0cnVjdCBwY2NhcmRfb3BlcmF0aW9ucyB7Ci0JaW50ICgqaW5pdCkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2spOwotCWludCAoKnN1c3BlbmQpKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrKTsKLQlpbnQgKCpnZXRfc3RhdHVzKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywgdV9pbnQgKnZhbHVlKTsKLQlpbnQgKCpzZXRfc29ja2V0KShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywgc29ja2V0X3N0YXRlX3QgKnN0YXRlKTsKLQlpbnQgKCpzZXRfaW9fbWFwKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywgc3RydWN0IHBjY2FyZF9pb19tYXAgKmlvKTsKLQlpbnQgKCpzZXRfbWVtX21hcCkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssIHN0cnVjdCBwY2NhcmRfbWVtX21hcCAqbWVtKTsKLX07Ci0KLXN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHsKLQlpbnQJKCp2YWxpZGF0ZV9tZW0pCQkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotCWludAkoKmFkanVzdF9pb19yZWdpb24pCShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCQkJIHVuc2lnbmVkIGxvbmcgcl9zdGFydCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgcl9lbmQsCi0JCQkJCSBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci0Jc3RydWN0IHJlc291cmNlKiAoKmZpbmRfaW8pCSh1bnNpZ25lZCBsb25nIGJhc2UsIGludCBudW0sCi0JCQkJCSB1bnNpZ25lZCBsb25nIGFsaWduLAotCQkJCQkgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotCXN0cnVjdCByZXNvdXJjZSogKCpmaW5kX21lbSkJKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBudW0sCi0JCQkJCSB1bnNpZ25lZCBsb25nIGFsaWduLCBpbnQgbG93LAotCQkJCQkgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotCWludAkoKmFkZF9pbykJCShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKLQkJCQkJIHVuc2lnbmVkIGludCBhY3Rpb24sCi0JCQkJCSB1bnNpZ25lZCBsb25nIHJfc3RhcnQsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHJfZW5kKTsKLQlpbnQJKCphZGRfbWVtKQkJKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAotCQkJCQkgdW5zaWduZWQgaW50IGFjdGlvbiwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgcl9zdGFydCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgcl9lbmQpOwotCWludAkoKmluaXQpCQkJKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLQl2b2lkCSgqZXhpdCkJCQkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotfTsKLS8qIFNTX0NBUF9TVEFUSUNfTUFQICovCi1leHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX3N0YXRpY19vcHM7Ci0vKiAhU1NfQ0FQX1NUQVRJQ19NQVAgKi8KLWV4dGVybiBzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyBwY2NhcmRfbm9uc3RhdGljX29wczsKLQotLyogc3RhdGljIG1lbSwgZHluYW1pYyBJTyBzb2NrZXRzICovCi1leHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX2lvZHluX29wczsKLQotLyoKLSAqICBDYWxscyB0byBzZXQgdXAgbG93LWxldmVsICJTb2NrZXQgU2VydmljZXMiIGRyaXZlcnMKLSAqLwotc3RydWN0IHBjbWNpYV9zb2NrZXQ7Ci0KIHR5cGVkZWYgc3RydWN0IGlvX3dpbmRvd190IHsKIAl1X2ludAkJCUluVXNlLCBDb25maWc7CiAJc3RydWN0IHJlc291cmNlCQkqcmVzOwpAQCAtMTc5LDEwICsxMjIsMjUgQEAKIC8qIE1heGltdW0gbnVtYmVyIG9mIG1lbW9yeSB3aW5kb3dzIHBlciBzb2NrZXQgKi8KICNkZWZpbmUgTUFYX1dJTiA0CiAKKworLyoKKyAqIFNvY2tldCBvcGVyYXRpb25zLgorICovCitzdHJ1Y3QgcGNtY2lhX3NvY2tldDsKK3N0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzOwogc3RydWN0IGNvbmZpZ190Owogc3RydWN0IHBjbWNpYV9jYWxsYmFjazsKIHN0cnVjdCB1c2VyX2luZm9fdDsKIAorc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zIHsKKwlpbnQgKCppbml0KShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CisJaW50ICgqc3VzcGVuZCkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworCWludCAoKmdldF9zdGF0dXMpKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1X2ludCAqdmFsdWUpOworCWludCAoKnNldF9zb2NrZXQpKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpOworCWludCAoKnNldF9pb19tYXApKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcGNjYXJkX2lvX21hcCAqaW8pOworCWludCAoKnNldF9tZW1fbWFwKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHBjY2FyZF9tZW1fbWFwICptZW0pOworfTsKKwogc3RydWN0IHBjbWNpYV9zb2NrZXQgewogCXN0cnVjdCBtb2R1bGUJCQkqb3duZXI7CiAJc3BpbmxvY2tfdAkJCWxvY2s7CkBAIC0xOTksOCArMTU3LDggQEAKIAlpb193aW5kb3dfdAkJCWlvW01BWF9JT19XSU5dOwogCXdpbmRvd190CQkJd2luW01BWF9XSU5dOwogCXN0cnVjdCBsaXN0X2hlYWQJCWNpc19jYWNoZTsKLQl1X2ludAkJCQlmYWtlX2Npc19sZW47Ci0JY2hhcgkJCQkqZmFrZV9jaXM7CisJc2l6ZV90CQkJCWZha2VfY2lzX2xlbjsKKwl1OAkJCQkqZmFrZV9jaXM7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlzb2NrZXRfbGlzdDsKIAlzdHJ1Y3QgY29tcGxldGlvbgkJc29ja2V0X3JlbGVhc2VkOwpAQCAtMjE4LDEyICsxNzYsMTIgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqCQljYl9kZXY7CiAKIAotCS8qIHNvY2tldCBzZXR1cCBpcyBkb25lIHNvIHJlc291cmNlcyBzaG91bGQgYmUgYWJsZSB0byBiZSBhbGxvY2F0ZWQuIE9ubHkKLQkgKiBpZiBzZXQgdG8gMSwgY2FsbHMgdG8gZmluZF97aW8sbWVtfV9yZWdpb24gYXJlIGhhbmRsZWQsIGFuZCBpbnNlcnRpb24KLQkgKiBldmVudHMgYXJlIGFjdHVhbGx5IG1hbmFnZWQgYnkgdGhlIFBDTUNJQSBsYXllci4qLworCS8qIHNvY2tldCBzZXR1cCBpcyBkb25lIHNvIHJlc291cmNlcyBzaG91bGQgYmUgYWJsZSB0byBiZSBhbGxvY2F0ZWQuCisJICogT25seSBpZiBzZXQgdG8gMSwgY2FsbHMgdG8gZmluZF97aW8sbWVtfV9yZWdpb24gYXJlIGhhbmRsZWQsIGFuZAorCSAqIGluc2VydGlvIGV2ZW50cyBhcmUgYWN0dWFsbHkgbWFuYWdlZCBieSB0aGUgUENNQ0lBIGxheWVyLiovCiAJdTgJCQkJcmVzb3VyY2Vfc2V0dXBfZG9uZToxOwogCi0JLyogaXMgc2V0IHRvIG9uZSBpZiByZXNvdXJjZSBzZXR1cCBpcyBkb25lIHVzaW5nIGFkanVzdF9yZXNvdXJjZV9pbmZvKCkgKi8KKwkvKiBJdCdzIG9sZCBpZiByZXNvdXJjZSBzZXR1cCBpcyBkb25lIHVzaW5nIGFkanVzdF9yZXNvdXJjZV9pbmZvKCkgKi8KIAl1OAkJCQlyZXNvdXJjZV9zZXR1cF9vbGQ6MTsKIAl1OAkJCQlyZXNvdXJjZV9zZXR1cF9uZXc6MTsKIApAQCAtMjM2LDc1ICsxOTQsMTAxIEBACiAKIAkvKiBab29tIHZpZGVvIGJlaGF2aW91ciBpcyBzbyBjaGlwIHNwZWNpZmljIGl0cyBub3Qgd29ydGggYWRkaW5nCiAJICAgdGhpcyB0byBfb3BzICovCi0Jdm9pZCAJCQkJKCp6b29tX3ZpZGVvKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqLCBpbnQpOworCXZvaWQgCQkJCSgqem9vbV92aWRlbykoc3RydWN0IHBjbWNpYV9zb2NrZXQgKiwKKwkJCQkJCSAgICAgIGludCk7CiAKIAkvKiBzbyBpcyBwb3dlciBob29rICovCiAJaW50ICgqcG93ZXJfaG9vaykoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssIGludCBvcGVyYXRpb24pOwotI2lmZGVmIENPTkZJR19DQVJEQlVTCisKIAkvKiBhbGxvd3MgdHVuaW5nIHRoZSBDQiBicmlkZ2UgYmVmb3JlIGxvYWRpbmcgZHJpdmVyIGZvciB0aGUgQ0IgY2FyZCAqLworI2lmZGVmIENPTkZJR19DQVJEQlVTCiAJdm9pZCAoKnR1bmVfYnJpZGdlKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywgc3RydWN0IHBjaV9idXMgKmJ1cyk7CiAjZW5kaWYKIAogCS8qIHN0YXRlIHRocmVhZCAqLwotCXN0cnVjdCBtdXRleAkJCXNrdF9tdXRleDsJLyogcHJvdGVjdHMgc29ja2V0IGgvdyBzdGF0ZSAqLwotCiAJc3RydWN0IHRhc2tfc3RydWN0CQkqdGhyZWFkOwogCXN0cnVjdCBjb21wbGV0aW9uCQl0aHJlYWRfZG9uZTsKLQlzcGlubG9ja190CQkJdGhyZWFkX2xvY2s7CS8qIHByb3RlY3RzIHRocmVhZF9ldmVudHMgKi8KIAl1bnNpZ25lZCBpbnQJCQl0aHJlYWRfZXZlbnRzOworCS8qIHByb3RlY3RzIHNvY2tldCBoL3cgc3RhdGUgKi8KKwlzdHJ1Y3QgbXV0ZXgJCQlza3RfbXV0ZXg7CisJLyogcHJvdGVjdHMgdGhyZWFkX2V2ZW50cyAqLworCXNwaW5sb2NrX3QJCQl0aHJlYWRfbG9jazsKIAogCS8qIHBjbWNpYSAoMTYtYml0KSAqLwogCXN0cnVjdCBwY21jaWFfY2FsbGJhY2sJCSpjYWxsYmFjazsKIAogI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQSkgfHwgZGVmaW5lZChDT05GSUdfUENNQ0lBX01PRFVMRSkKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlkZXZpY2VzX2xpc3Q7CS8qICBQQ01DSUEgZGV2aWNlcyAqLwotCXU4CQkJCWRldmljZV9jb3VudDsJLyogdGhlIG51bWJlciBvZiBkZXZpY2VzLCB1c2VkCi0JCQkJCQkJICogb25seSBpbnRlcm5hbGx5IGFuZCBzdWJqZWN0Ci0JCQkJCQkJICogdG8gaW5jb3JyZWN0bmVzcyBhbmQgY2hhbmdlICovCisJLyogVGhlIGZvbGxvd2luZyBlbGVtZW50cyByZWZlciB0byAxNi1iaXQgUENNQ0lBIGRldmljZXMgaW5zZXJ0ZWQKKwkgKiBpbnRvIHRoZSBzb2NrZXQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCQlkZXZpY2VzX2xpc3Q7CiAKKwkvKiB0aGUgbnVtYmVyIG9mIGRldmljZXMsIHVzZWQgb25seSBpbnRlcm5hbGx5IGFuZCBzdWJqZWN0IHRvCisJICogaW5jb3JyZWN0bmVzcyBhbmQgY2hhbmdlICovCisJdTgJCQkJZGV2aWNlX2NvdW50OworCisJLyogMTYtYml0IHN0YXRlOiAqLwogCXN0cnVjdCB7Ci0JCXU4CQkJcHJlc2VudDoxLAkvKiBQQ01DSUEgY2FyZCBpcyBwcmVzZW50IGluIHNvY2tldCAqLwotCQkJCQlidXN5OjEsCQkvKiAibWFzdGVyIiBpb2N0bCBpcyB1c2VkICovCi0JCQkJCWRlYWQ6MSwJCS8qIHBjbWNpYSBtb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQgKi8KLQkJCQkJZGV2aWNlX2FkZF9wZW5kaW5nOjEsIC8qIGEgbXVsdGlmdW5jdGlvbi1kZXZpY2UKLQkJCQkJCQkgICAgICAgKiBhZGQgZXZlbnQgaXMgcGVuZGluZyAqLwotCQkJCQltZmNfcGZjOjEsCS8qIHRoZSBwZW5kaW5nIGV2ZW50IGFkZHMgYSBtZmMgKDEpIG9yIHBmYyAoMCkgKi8KLQkJCQkJcmVzZXJ2ZWQ6MzsKLQl9IAkJCQlwY21jaWFfc3RhdGU7CisJCS8qIFBDTUNJQSBjYXJkIGlzIHByZXNlbnQgaW4gc29ja2V0ICovCisJCXU4CQkJcHJlc2VudDoxOworCQkvKiAibWFzdGVyIiBpb2N0bCBpcyB1c2VkICovCisJCXU4CQkJYnVzeToxOworCQkvKiBwY21jaWEgbW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkICovCisJCXU4CQkJZGVhZDoxOworCQkvKiBhIG11bHRpZnVuY3Rpb24tZGV2aWNlIGFkZCBldmVudCBpcyBwZW5kaW5nICovCisJCXU4CQkJZGV2aWNlX2FkZF9wZW5kaW5nOjE7CisJCS8qIHRoZSBwZW5kaW5nIGV2ZW50IGFkZHMgYSBtZmMgKDEpIG9yIHBmYyAoMCkgKi8KKwkJdTgJCQltZmNfcGZjOjE7CiAKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCWRldmljZV9hZGQ7CS8qIGZvciBhZGRpbmcgZnVydGhlciBwc2V1ZG8tbXVsdGlmdW5jdGlvbgotCQkJCQkJCSAqIGRldmljZXMgKi8KKwkJdTgJCQlyZXNlcnZlZDozOworCX0gcGNtY2lhX3N0YXRlOworCisKKwkvKiBmb3IgYWRkaW5nIGZ1cnRoZXIgcHNldWRvLW11bHRpZnVuY3Rpb24gZGV2aWNlcyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAkJZGV2aWNlX2FkZDsKIAogI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKIAlzdHJ1Y3QgdXNlcl9pbmZvX3QJCSp1c2VyOwogCXdhaXRfcXVldWVfaGVhZF90CQlxdWV1ZTsKLSNlbmRpZgotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BDTUNJQV9JT0NUTCAqLworI2VuZGlmIC8qIENPTkZJR19QQ01DSUEgKi8KIAogCS8qIGNhcmRidXMgKDMyLWJpdCkgKi8KICNpZmRlZiBDT05GSUdfQ0FSREJVUwogCXN0cnVjdCByZXNvdXJjZSAqCQljYl9jaXNfcmVzOwogCXZvaWQgX19pb21lbQkJCSpjYl9jaXNfdmlydDsKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19DQVJEQlVTICovCiAKIAkvKiBzb2NrZXQgZGV2aWNlICovCiAJc3RydWN0IGRldmljZQkJCWRldjsKLQl2b2lkCQkJCSpkcml2ZXJfZGF0YTsJLyogZGF0YSBpbnRlcm5hbCB0byB0aGUgc29ja2V0IGRyaXZlciAqLwotCisJLyogZGF0YSBpbnRlcm5hbCB0byB0aGUgc29ja2V0IGRyaXZlciAqLworCXZvaWQJCQkJKmRyaXZlcl9kYXRhOwogfTsKIAotc3RydWN0IHBjbWNpYV9zb2NrZXQgKiBwY21jaWFfZ2V0X3NvY2tldF9ieV9ucih1bnNpZ25lZCBpbnQgbnIpOwogCi0KLQotZXh0ZXJuIHZvaWQgcGNtY2lhX3BhcnNlX2V2ZW50cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0LCB1bnNpZ25lZCBpbnQgZXZlbnRzKTsKLWV4dGVybiBpbnQgcGNtY2lhX3JlZ2lzdGVyX3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0KTsKLWV4dGVybiB2b2lkIHBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0KTsKLQotZXh0ZXJuIHN0cnVjdCBjbGFzcyBwY21jaWFfc29ja2V0X2NsYXNzOworLyogc29ja2V0IGRyaXZlcnMgbXVzdCBkZWZpbmUgdGhlIHJlc291cmNlIG9wZXJhdGlvbnMgdHlwZSB0aGV5IHVzZS4gVGhlcmUKKyAqIGFyZSB0aHJlZSBvcHRpb25zOgorICogLSBwY2NhcmRfc3RhdGljX29wcwkJaW9tZW0gYW5kIGlvcG9ydCBhcmVhcyBhcmUgYXNzaWduZWQgc3RhdGljYWxseQorICogLSBwY2NhcmRfaW9keW5fb3BzCQlpb21lbSBhcmVhcyBpcyBhc3NpZ25lZCBzdGF0aWNhbGx5LCBpb3BvcnQKKyAqCQkJCWFyZWFzIGR5bmFtaWNhbGx5CisgKiAtIHBjY2FyZF9ub25zdGF0aWNfb3BzCWlvbWVtIGFuZCBpb3BvcnQgYXJlYXMgYXJlIGFzc2lnbmVkIGR5bmFtaWNhbGx5LgorICoJCQkJSWYgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQsIHVzZQorICoJCQkJInNlbGVjdCBQQ0NBUkRfTk9OU1RBVElDIiBpbiBLY29uZmlnLgorICovCitleHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX3N0YXRpY19vcHM7CitleHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX2lvZHluX29wczsKK2V4dGVybiBzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyBwY2NhcmRfbm9uc3RhdGljX29wczsKIAogLyogc29ja2V0IGRyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIHVzZSB0aGVzZSBjYWxsYmFja3MgaW4gdGhlaXIgLmRydiBzdHJ1Y3QgKi8KIGV4dGVybiBpbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiBleHRlcm4gaW50IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCisvKiBzb2NrZXQgZHJpdmVycyB1c2UgdGhpcyBjYWxsYmFjayBpbiB0aGVpciBJUlEgaGFuZGxlciAqLworZXh0ZXJuIHZvaWQgcGNtY2lhX3BhcnNlX2V2ZW50cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0LAorCQkJCXVuc2lnbmVkIGludCBldmVudHMpOworCisvKiB0byByZWdpc3RlciBhbmQgdW5yZWdpc3RlciBhIHNvY2tldCAqLworZXh0ZXJuIGludCBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrZXQpOworZXh0ZXJuIHZvaWQgcGNtY2lhX3VucmVnaXN0ZXJfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrZXQpOworCisKICNlbmRpZiAvKiBfTElOVVhfU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmggYi9pbmNsdWRlL3Njc2kvaXNjc2lfaWYuaAppbmRleCAxNmJlMTJmLi4wYzk1MTRkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKKysrIGIvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKQEAgLTIxMyw2ICsyMTMsOCBAQAogCUlTQ1NJX0VSUl9EQVRBX0RHU1QJCT0gSVNDU0lfRVJSX0JBU0UgKyAxNSwKIAlJU0NTSV9FUlJfUEFSQU1fTk9UX0ZPVU5ECT0gSVNDU0lfRVJSX0JBU0UgKyAxNiwKIAlJU0NTSV9FUlJfTk9fU0NTSV9DTUQJCT0gSVNDU0lfRVJSX0JBU0UgKyAxNywKKwlJU0NTSV9FUlJfSU5WQUxJRF9IT1NUCQk9IElTQ1NJX0VSUl9CQVNFICsgMTgsCisJSVNDU0lfRVJSX1hNSVRfRkFJTEVECQk9IElTQ1NJX0VSUl9CQVNFICsgMTksCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmggYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAppbmRleCA1ZTc1YmI3Li42MWU1M2YxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaApAQCAtMjg3LDYgKzI4NywxMSBAQAogCXN0cnVjdCBpc2NzaV9wb29sCWNtZHBvb2w7CS8qIFBEVSdzIHBvb2wgKi8KIH07CiAKK2VudW0geworCUlTQ1NJX0hPU1RfU0VUVVAsCisJSVNDU0lfSE9TVF9SRU1PVkVELAorfTsKKwogc3RydWN0IGlzY3NpX2hvc3QgewogCWNoYXIJCQkqaW5pdGlhdG9ybmFtZTsKIAkvKiBodyBhZGRyZXNzIG9yIG5ldGRldiBpc2NzaSBjb25uZWN0aW9uIGlzIGJvdW5kIHRvICovCkBAIC0yOTUsNiArMzAwLDEyIEBACiAJLyogbG9jYWwgYWRkcmVzcyAqLwogCWludAkJCWxvY2FsX3BvcnQ7CiAJY2hhcgkJCWxvY2FsX2FkZHJlc3NbSVNDU0lfQUREUkVTU19CVUZfTEVOXTsKKworCXdhaXRfcXVldWVfaGVhZF90CXNlc3Npb25fcmVtb3ZhbF93cTsKKwkvKiBwcm90ZWN0cyBzZXNzaW9ucyBhbmQgc3RhdGUgKi8KKwlzcGlubG9ja190CQlsb2NrOworCWludAkJCW51bV9zZXNzaW9uczsKKwlpbnQJCQlzdGF0ZTsKIH07CiAKIC8qCkBAIC0zMDIsNyArMzEzLDcgQEAKICAqLwogZXh0ZXJuIGludCBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpOwogZXh0ZXJuIGludCBpc2NzaV9laF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7Ci1leHRlcm4gaW50IGlzY3NpX2VoX2hvc3RfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2MpOworZXh0ZXJuIGludCBpc2NzaV9laF90YXJnZXRfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2MpOwogZXh0ZXJuIGludCBpc2NzaV9laF9kZXZpY2VfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2MpOwogZXh0ZXJuIGludCBpc2NzaV9xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc2MsCiAJCQkgICAgICB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSk7CkBAIC0zNTEsNiArMzYyLDggQEAKIGV4dGVybiBpbnQgaXNjc2lfY29ubl9iaW5kKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqLCBzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKiwKIAkJCSAgIGludCk7CiBleHRlcm4gdm9pZCBpc2NzaV9jb25uX2ZhaWx1cmUoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycik7CitleHRlcm4gdm9pZCBpc2NzaV9zZXNzaW9uX2ZhaWx1cmUoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwKKwkJCQkgIGVudW0gaXNjc2lfZXJyIGVycik7CiBleHRlcm4gaW50IGlzY3NpX2Nvbm5fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCiAJCQkJZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKTsKIGV4dGVybiB2b2lkIGlzY3NpX3N1c3BlbmRfdHgoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2kuaCBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKaW5kZXggMTkyZjg3MS4uYTEwOTE2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaS5oCkBAIC0zODEsNiArMzgxLDExIEBACiAjZGVmaW5lIERJRF9JTU1fUkVUUlkgICAweDBjCS8qIFJldHJ5IHdpdGhvdXQgZGVjcmVtZW50aW5nIHJldHJ5IGNvdW50ICAqLwogI2RlZmluZSBESURfUkVRVUVVRQkweDBkCS8qIFJlcXVldWUgY29tbWFuZCAobm8gaW1tZWRpYXRlIHJldHJ5KSBhbHNvCiAJCQkJICogd2l0aG91dCBkZWNyZW1lbnRpbmcgdGhlIHJldHJ5IGNvdW50CSAgICovCisjZGVmaW5lIERJRF9UUkFOU1BPUlRfRElTUlVQVEVEIDB4MGUgLyogVHJhbnNwb3J0IGVycm9yIGRpc3J1cHRlZCBleGVjdXRpb24KKwkJCQkgICAgICAqIGFuZCB0aGUgZHJpdmVyIGJsb2NrZWQgdGhlIHBvcnQgdG8KKwkJCQkgICAgICAqIHJlY292ZXIgdGhlIGxpbmsuIFRyYW5zcG9ydCBjbGFzcyB3aWxsCisJCQkJICAgICAgKiByZXRyeSBvciBmYWlsIElPICovCisjZGVmaW5lIERJRF9UUkFOU1BPUlRfRkFJTEZBU1QJMHgwZiAvKiBUcmFuc3BvcnQgY2xhc3MgZmFzdGZhaWxlZCB0aGUgaW8gKi8KICNkZWZpbmUgRFJJVkVSX09LICAgICAgIDB4MDAJLyogRHJpdmVyIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKIC8qCkBAIC00MjYsNiArNDMxLDcgQEAKICNkZWZpbmUgU0NTSV9NTFFVRVVFX0hPU1RfQlVTWSAgIDB4MTA1NQogI2RlZmluZSBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1kgMHgxMDU2CiAjZGVmaW5lIFNDU0lfTUxRVUVVRV9FSF9SRVRSWSAgICAweDEwNTcKKyNkZWZpbmUgU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZIDB4MTA1OAogCiAvKgogICogIFVzZSB0aGVzZSB0byBzZXBhcmF0ZSBzdGF0dXMgbXNnIGFuZCBvdXIgYnl0ZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKaW5kZXggYjQ5ZTcyNS4uYTM3YTgxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKQEAgLTIzOCw2ICsyMzgsMTYgQEAKIAkJCQkJCSAqIGZvciB0aGUgZGV2aWNlIGF0IGEgdGltZS4gKi8KIAl1bnNpZ25lZCBpbnQJCXBkdF8xZl9mb3Jfbm9fbHVuOwkvKiBQRFQgPSAweDFmICovCiAJCQkJCQkvKiBtZWFucyBubyBsdW4gcHJlc2VudCAqLworCS8qIGNvbW1hbmRzIGFjdHVhbGx5IGFjdGl2ZSBvbiBMTEQuIHByb3RlY3RlZCBieSBob3N0IGxvY2suICovCisJdW5zaWduZWQgaW50CQl0YXJnZXRfYnVzeTsKKwkvKgorCSAqIExMRHMgc2hvdWxkIHNldCB0aGlzIGluIHRoZSBzbGF2ZV9hbGxvYyBob3N0IHRlbXBsYXRlIGNhbGxvdXQuCisJICogSWYgc2V0IHRvIHplcm8gdGhlbiB0aGVyZSBpcyBub3QgbGltaXQuCisJICovCisJdW5zaWduZWQgaW50CQljYW5fcXVldWU7CisJdW5zaWduZWQgaW50CQl0YXJnZXRfYmxvY2tlZDsKKwl1bnNpZ25lZCBpbnQJCW1heF90YXJnZXRfYmxvY2tlZDsKKyNkZWZpbmUgU0NTSV9ERUZBVUxUX1RBUkdFVF9CTE9DS0VECTMKIAogCWNoYXIJCQlzY3NpX2xldmVsOwogCXN0cnVjdCBleGVjdXRlX3dvcmsJZXc7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCmluZGV4IDIxMDE4YTQuLjQ5ZDg5MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCkBAIC0zNTcsNiArMzU3LDcgQEAKIC8qIGJpdCBmaWVsZCB2YWx1ZXMgZm9yIHN0cnVjdCBmY19ycG9ydCAiZmxhZ3MiIGZpZWxkOiAqLwogI2RlZmluZSBGQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkcJMHgwMQogI2RlZmluZSBGQ19SUE9SVF9TQ0FOX1BFTkRJTkcJCTB4MDIKKyNkZWZpbmUgRkNfUlBPUlRfRkFTVF9GQUlMX1RJTUVET1VUCTB4MDMKIAogI2RlZmluZQlkZXZfdG9fcnBvcnQoZCkJCQkJXAogCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgZmNfcnBvcnQsIGRldikKQEAgLTY3OCwxMiArNjc5LDE1IEBACiAJCWlmIChycG9ydC0+cm9sZXMgJiBGQ19QT1JUX1JPTEVfRkNQX1RBUkdFVCkKIAkJCXJlc3VsdCA9IDA7CiAJCWVsc2UgaWYgKHJwb3J0LT5mbGFncyAmIEZDX1JQT1JUX0RFVkxPU1NfUEVORElORykKLQkJCXJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCQlyZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAkJZWxzZQogCQkJcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCWJyZWFrOwogCWNhc2UgRkNfUE9SVFNUQVRFX0JMT0NLRUQ6Ci0JCXJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCWlmIChycG9ydC0+ZmxhZ3MgJiBGQ19SUE9SVF9GQVNUX0ZBSUxfVElNRURPVVQpCisJCQlyZXN1bHQgPSBESURfVFJBTlNQT1JUX0ZBSUxGQVNUIDw8IDE2OworCQllbHNlCisJCQlyZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCmluZGV4IDhiNmM5MWQuLmM2NjdjYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCkBAIC0xMzUsNyArMTM1LDggQEAKIC8qCiAgKiBjb250cm9sIHBsYW5lIHVwY2FsbHMKICAqLwotZXh0ZXJuIHZvaWQgaXNjc2lfY29ubl9lcnJvcihzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycm9yKTsKK2V4dGVybiB2b2lkIGlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLAorCQkJCSAgIGVudW0gaXNjc2lfZXJyIGVycm9yKTsKIGV4dGVybiBpbnQgaXNjc2lfcmVjdl9wZHUoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIsCiAJCQkgIGNoYXIgKmRhdGEsIHVpbnQzMl90IGRhdGFfc2l6ZSk7CiAKQEAgLTIwNyw3ICsyMDgsNyBAQAogc3RydWN0IGlzY3NpX2VuZHBvaW50IHsKIAl2b2lkICpkZF9kYXRhOwkJCS8qIExMRCBwcml2YXRlIGRhdGEgKi8KIAlzdHJ1Y3QgZGV2aWNlIGRldjsKLQl1bnNpZ25lZCBpbnQgaWQ7CisJdWludDY0X3QgaWQ7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCmluZGV4IGMxYjI2ZmMuLmNhNjk5YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKQEAgLTI0MCw2ICsyNDAsNyBAQAogLyogZGFwbSBhdWRpbyBwaW4gY29udHJvbCBhbmQgc3RhdHVzICovCiBpbnQgc25kX3NvY19kYXBtX2VuYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pOwogaW50IHNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbik7CitpbnQgc25kX3NvY19kYXBtX25jX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbik7CiBpbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKTsKIGludCBzbmRfc29jX2RhcG1fc3luYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3RlYTU3NXgtdHVuZXIuaCBiL2luY2x1ZGUvc291bmQvdGVhNTc1eC10dW5lci5oCmluZGV4IGI2MmNlM2UuLmI2ODcwY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdGVhNTc1eC10dW5lci5oCisrKyBiL2luY2x1ZGUvc291bmQvdGVhNTc1eC10dW5lci5oCkBAIC00Myw2ICs0Myw3IEBACiAJdW5zaWduZWQgaW50IGZyZXFfZml4dXA7CS8qIGNyeXN0YWwgb25ib2FyZCAqLwogCXVuc2lnbmVkIGludCB2YWw7CQkvKiBodyB2YWx1ZSAqLwogCXVuc2lnbmVkIGxvbmcgZnJlcTsJCS8qIGZyZXF1ZW5jeSAqLworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwkJLyogc2V0IGlmIHRoZSBkZXZpY2UgaXMgaW4gdXNlICovCiAJc3RydWN0IHNuZF90ZWE1NzV4X29wcyAqb3BzOwogCXZvaWQgKnByaXZhdGVfZGF0YTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL2N5YmxhZmIuaCBiL2luY2x1ZGUvdmlkZW8vY3libGFmYi5oCmluZGV4IDcxNzQ0MDUuLmQzYzFkNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vY3libGFmYi5oCisrKyBiL2luY2x1ZGUvdmlkZW8vY3libGFmYi5oCkBAIC00LDcgKzQsNyBAQAogI2VuZGlmCiAKICNpZiBDWUJMQUZCX0RFQlVHCi0jZGVmaW5lIGRlYnVnKGYsYS4uLikJcHJpbnRrKCIlczoiIGYsICBfX0ZVTkNUSU9OX18gLCAjIyBhKTsKKyNkZWZpbmUgZGVidWcoZixhLi4uKQlwcmludGsoIiVzOiIgZiwgIF9fZnVuY19fICwgIyMgYSk7CiAjZWxzZQogI2RlZmluZSBkZWJ1ZyhmLGEuLi4pCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vbmVvbWFnaWMuaCBiL2luY2x1ZGUvdmlkZW8vbmVvbWFnaWMuaAppbmRleCAzODkxMGRhLi4wOGI2NjM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL25lb21hZ2ljLmgKKysrIGIvaW5jbHVkZS92aWRlby9uZW9tYWdpYy5oCkBAIC0xMjMsNyArMTIzLDYgQEAKIAogc3RydWN0IG5lb2ZiX3BhciB7CiAJc3RydWN0IHZnYXN0YXRlIHN0YXRlOwotCXN0cnVjdCBtdXRleCBvcGVuX2xvY2s7CiAJdW5zaWduZWQgaW50IHJlZl9jb3VudDsKIAogCXVuc2lnbmVkIGNoYXIgTWlzY091dFJlZzsJLyogTWlzYyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9yYWRlb24uaCBiL2luY2x1ZGUvdmlkZW8vcmFkZW9uLmgKaW5kZXggMDk5ZmZhNS4uZDVkY2FmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9yYWRlb24uaAorKysgYi9pbmNsdWRlL3ZpZGVvL3JhZGVvbi5oCkBAIC0zODYsNyArMzg2LDcgQEAKICNkZWZpbmUgU0NfQk9UVE9NX1JJR0hUICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkYwICAKICNkZWZpbmUgU1JDX1NDX0JPVFRPTV9SSUdIVCAgICAgICAgICAgICAgICAgICAgMHgxNkY0ICAKICNkZWZpbmUgUkIyRF9EU1RDQUNIRV9NT0RFCQkgICAgICAgMHgzNDI4Ci0jZGVmaW5lIFJCMkRfRFNUQ0FDSEVfQ1RMU1RBVAkJICAgICAgIDB4MzQyQworI2RlZmluZSBSQjJEX0RTVENBQ0hFX0NUTFNUQVRfYnJva2VuCSAgICAgICAweDM0MkMgLyogZG8gbm90IHVzZSAqLwogI2RlZmluZSBMVkRTX0dFTl9DTlRMCQkJICAgICAgIDB4MDJkMAogI2RlZmluZSBMVkRTX1BMTF9DTlRMCQkJICAgICAgIDB4MDJkNAogI2RlZmluZSBGUDJfR0VOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyODgKQEAgLTUyNSw2ICs1MjUsOSBAQAogI2RlZmluZSBDUlRDX0RJU1BMQVlfRElTCQkJICAgKDEgPDwgMTApCiAjZGVmaW5lIENSVENfQ1JUX09OCQkJCSAgICgxIDw8IDE1KQogCisvKiBEU1RDQUNIRV9NT0RFIGJpdHMgY29uc3RhbnRzICovCisjZGVmaW5lIFJCMkRfRENfQVVUT0ZMVVNIX0VOQUJMRSAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBSQjJEX0RDX0RDX0RJU0FCTEVfSUdOT1JFX1BFICAgICAgICAgICAgICAgKDEgPDwgMTcpCiAKIC8qIERTVENBQ0hFX0NUTFNUQVQgYml0IGNvbnN0YW50cyAqLwogI2RlZmluZSBSQjJEX0RDX0ZMVVNIXzJECQkJICAgKDEgPDwgMCkKQEAgLTUzMiw2ICs1MzUsOSBAQAogI2RlZmluZSBSQjJEX0RDX0ZMVVNIX0FMTAkJCSAgIChSQjJEX0RDX0ZMVVNIXzJEIHwgUkIyRF9EQ19GUkVFXzJEKQogI2RlZmluZSBSQjJEX0RDX0JVU1kJCQkJICAgKDEgPDwgMzEpCiAKKy8qIERTVENBQ0hFX01PREUgYml0cyBjb25zdGFudHMgKi8KKyNkZWZpbmUgUkIyRF9EQ19BVVRPRkxVU0hfRU5BQkxFICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIFJCMkRfRENfRENfRElTQUJMRV9JR05PUkVfUEUgICAgICAgICAgICAgICAoMSA8PCAxNykKIAogLyogQ1JUQ19HRU5fQ05UTCBiaXQgY29uc3RhbnRzICovCiAjZGVmaW5lIENSVENfREJMX1NDQU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCkBAIC04NjMsMTUgKzg2OSwxMCBAQAogI2RlZmluZSBHTUNfRFNUXzE2QlBQX1lWWVU0MjIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGMwMAogI2RlZmluZSBHTUNfRFNUXzMyQlBQX0FZVVY0NDQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGUwMAogI2RlZmluZSBHTUNfRFNUXzE2QlBQX0FSR0I0NDQ0ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGYwMAotI2RlZmluZSBHTUNfU1JDX01PTk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBHTUNfU1JDX01PTk9fTEJLR0QgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBHTUNfU1JDX0RTVENPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzAwMAogI2RlZmluZSBHTUNfQllURV9PUkRFUl9NU0JfVE9fTFNCICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAogI2RlZmluZSBHTUNfQllURV9PUkRFUl9MU0JfVE9fTVNCICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAogI2RlZmluZSBHTUNfRFBfQ09OVkVSU0lPTl9URU1QXzkzMDAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAogI2RlZmluZSBHTUNfRFBfQ09OVkVSU0lPTl9URU1QXzY1MDAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBHTUNfRFBfU1JDX1JFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBHTUNfRFBfU1JDX0hPU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAwMDAwMAogI2RlZmluZSBHTUNfRFBfU1JDX0hPU1RfQllURUFMSUdOICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAogI2RlZmluZSBHTUNfM0RfRkNOX0VOX0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAogI2RlZmluZSBHTUNfM0RfRkNOX0VOX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMApAQCAtODgyLDYgKzg4Myw5IEBACiAjZGVmaW5lIEdNQ19XUklURV9NQVNLX0xFQVZFICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lIEdNQ19XUklURV9NQVNLX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCiAjZGVmaW5lIEdNQ19DTFJfQ01QX0NOVExfRElTICAgICAgCQkgICAoMSA8PCAyOCkKKyNkZWZpbmUgR01DX1NSQ19EQVRBVFlQRV9NQVNLCQkJICAgKDMgPDwgMTIpCisjZGVmaW5lIEdNQ19TUkNfREFUQVRZUEVfTU9OT19GR19CRwkJICAgKDAgPDwgMTIpCisjZGVmaW5lIEdNQ19TUkNfREFUQVRZUEVfTU9OT19GR19MQQkJICAgKDEgPDwgMTIpCiAjZGVmaW5lIEdNQ19TUkNfREFUQVRZUEVfQ09MT1IJCQkgICAoMyA8PCAxMikKICNkZWZpbmUgUk9QM19TICAgICAgICAgICAgICAgIAkJCSAgIDB4MDBjYzAwMDAKICNkZWZpbmUgUk9QM19TUkNDT1BZCQkJCSAgIDB4MDBjYzAwMDAKQEAgLTg5MCw2ICs4OTQsNyBAQAogI2RlZmluZSBEUF9TUkNfU09VUkNFX01BU0sgICAgICAgIAkJICAgKDcgICAgPDwgMjQpCiAjZGVmaW5lIEdNQ19CUlVTSF9OT05FICAgICAgICAgICAgCQkgICAoMTUgICA8PCAgNCkKICNkZWZpbmUgRFBfU1JDX1NPVVJDRV9NRU1PUlkJCQkgICAoMiAgICA8PCAyNCkKKyNkZWZpbmUgRFBfU1JDX1NPVVJDRV9IT1NUX0RBVEEJCQkgICAoMyAgICA8PCAyNCkKICNkZWZpbmUgR01DX0JSVVNIX1NPTElEQ09MT1IJCQkgICAweDAwMDAwMGQwCiAKIC8qIERQX01JWCBiaXQgY29uc3RhbnRzICovCkBAIC05NzUsNiArOTgwLDEyIEBACiAjZGVmaW5lIERJU1BfUFdSX01BTl9UVl9FTkFCTEVfUlNUICAgICAgICAgICAgICAgICAoMSA8PCAyNSkKICNkZWZpbmUgRElTUF9QV1JfTUFOX0FVVE9fUFdSVVBfRU4gICAgICAgICAgICAgICAgICgxIDw8IDI2KQogCisvKiBSQkJNX0dVSUNOVEwgY29uc3RhbnRzICovCisjZGVmaW5lIFJCQk1fR1VJQ05UTF9IT1NUX0RBVEFfU1dBUF9OT05FCSAgICgwIDw8IDApCisjZGVmaW5lIFJCQk1fR1VJQ05UTF9IT1NUX0RBVEFfU1dBUF8xNkJJVCAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBSQkJNX0dVSUNOVExfSE9TVF9EQVRBX1NXQVBfMzJCSVQJICAgKDIgPDwgMCkKKyNkZWZpbmUgUkJCTV9HVUlDTlRMX0hPU1RfREFUQV9TV0FQX0hEVwkJICAgKDMgPDwgMCkKKwogLyogbWFza3MgKi8KIAogI2RlZmluZSBDT05GSUdfTUVNU0laRV9NQVNLCQkweDFmMDAwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3MxZDEzeHh4ZmIuaCBiL2luY2x1ZGUvdmlkZW8vczFkMTN4eHhmYi5oCmluZGV4IGM5OWQyNjEuLmZlNDFiODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vczFkMTN4eHhmYi5oCisrKyBiL2luY2x1ZGUvdmlkZW8vczFkMTN4eHhmYi5oCkBAIC0xNCw3ICsxNCw4IEBACiAjZGVmaW5lCVMxRDEzWFhYRkJfSAogCiAjZGVmaW5lIFMxRF9QQUxFVFRFX1NJWkUJCTI1NgotI2RlZmluZSBTMURfQ0hJUF9SRVYJCQk3CS8qIGV4cGVjdGVkIGNoaXAgcmV2aXNpb24gbnVtYmVyIGZvciBzMWQxMzgwNiAqLworI2RlZmluZSBTMUQxMzUwNl9DSElQX1JFVgkJNAkvKiBleHBlY3RlZCBjaGlwIHJldmlzaW9uIG51bWJlciBmb3IgczFkMTM1MDYgKi8KKyNkZWZpbmUgUzFEMTM4MDZfQ0hJUF9SRVYJCTcJLyogZXhwZWN0ZWQgY2hpcCByZXZpc2lvbiBudW1iZXIgZm9yIHMxZDEzODA2ICovCiAjZGVmaW5lIFMxRF9GQklECQkJIlMxRDEzODA2IgogI2RlZmluZSBTMURfREVWSUNFTkFNRQkJCSJzMWQxMzgwNmZiIgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmggYi9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0YmM2YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2xjZGMuaApAQCAtMCwwICsxLDc4IEBACisjaWZuZGVmIF9fQVNNX1NIX01PQklMRV9MQ0RDX0hfXworI2RlZmluZSBfX0FTTV9TSF9NT0JJTEVfTENEQ19IX18KKworI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKK2VudW0geyBSR0I4LCAgIC8qIDI0YnBwLCA4Ojg6OCAqLworICAgICAgIFJHQjksICAgLyogMThicHAsIDk6OSAqLworICAgICAgIFJHQjEyQSwgLyogMjRicHAsIDEyOjEyICovCisgICAgICAgUkdCMTJCLCAvKiAxMmJwcCAqLworICAgICAgIFJHQjE2LCAgLyogMTZicHAgKi8KKyAgICAgICBSR0IxOCwgIC8qIDE4YnBwICovCisgICAgICAgUkdCMjQsICAvKiAyNGJwcCAqLworICAgICAgIFNZUzhBLCAgLyogMjRicHAsIDg6ODo4ICovCisgICAgICAgU1lTOEIsICAvKiAxOGJwcCwgODo4OjIgKi8KKyAgICAgICBTWVM4QywgIC8qIDE4YnBwLCAyOjg6OCAqLworICAgICAgIFNZUzhELCAgLyogMTZicHAsIDg6OCAqLworICAgICAgIFNZUzksICAgLyogMThicHAsIDk6OSAqLworICAgICAgIFNZUzEyLCAgLyogMjRicHAsIDEyOjEyICovCisgICAgICAgU1lTMTZBLCAvKiAxNmJwcCAqLworICAgICAgIFNZUzE2QiwgLyogMThicHAsIDE2OjIgKi8KKyAgICAgICBTWVMxNkMsIC8qIDE4YnBwLCAyOjE2ICovCisgICAgICAgU1lTMTgsICAvKiAxOGJwcCAqLworICAgICAgIFNZUzI0IH07LyogMjRicHAgKi8KKworZW51bSB7IExDRENfQ0hBTl9ESVNBQkxFRCA9IDAsCisgICAgICAgTENEQ19DSEFOX01BSU5MQ0QsCisgICAgICAgTENEQ19DSEFOX1NVQkxDRCB9OworCitlbnVtIHsgTENEQ19DTEtfQlVTLCBMQ0RDX0NMS19QRVJJUEhFUkFMLCBMQ0RDX0NMS19FWFRFUk5BTCB9OworCisjZGVmaW5lIExDRENfRkxBR1NfRFdQT0wgKDEgPDwgMCkgLyogUmlzaW5nIGVkZ2UgZG90IGNsb2NrIGRhdGEgbGF0Y2ggKi8KKyNkZWZpbmUgTENEQ19GTEFHU19ESVBPTCAoMSA8PCAxKSAvKiBBY3RpdmUgbG93IGRpc3BsYXkgZW5hYmxlIHBvbGFyaXR5ICovCisjZGVmaW5lIExDRENfRkxBR1NfREFQT0wgKDEgPDwgMikgLyogQWN0aXZlIGxvdyBkaXNwbGF5IGRhdGEgcG9sYXJpdHkgKi8KKyNkZWZpbmUgTENEQ19GTEFHU19IU0NOVCAoMSA8PCAzKSAvKiBEaXNhYmxlIEhTWU5DIGR1cmluZyBWQkxBTksgKi8KKyNkZWZpbmUgTENEQ19GTEFHU19EV0NOVCAoMSA8PCA0KSAvKiBEaXNhYmxlIGRvdGNsb2NrIGR1cmluZyBibGFua2luZyAqLworCitzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19jZmcgeworCXVuc2lnbmVkIGxvbmcgbGRtdDJyOworCXVuc2lnbmVkIGxvbmcgbGRtdDNyOworfTsKKworc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzIHsKKwl2b2lkICgqd3JpdGVfaW5kZXgpKHZvaWQgKmhhbmRsZSwgdW5zaWduZWQgbG9uZyBkYXRhKTsKKwl2b2lkICgqd3JpdGVfZGF0YSkodm9pZCAqaGFuZGxlLCB1bnNpZ25lZCBsb25nIGRhdGEpOworCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2RhdGEpKHZvaWQgKmhhbmRsZSk7Cit9OworCitzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfYm9hcmRfY2ZnIHsKKwl2b2lkICpib2FyZF9kYXRhOworCWludCAoKnNldHVwX3N5cykodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCisJCQkgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKTsKKwl2b2lkICgqZGlzcGxheV9vbikodm9pZCAqYm9hcmRfZGF0YSk7CisJdm9pZCAoKmRpc3BsYXlfb2ZmKSh2b2lkICpib2FyZF9kYXRhKTsKK307CisKK3N0cnVjdCBzaF9tb2JpbGVfbGNkY19sY2Rfc2l6ZV9jZmcgeyAvKiB3aWR0aCBhbmQgaGVpZ2h0IG9mIHBhbmVsIGluIG1tICovCisJdW5zaWduZWQgbG9uZyB3aWR0aDsKKwl1bnNpZ25lZCBsb25nIGhlaWdodDsKK307CisKK3N0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZyB7CisJaW50IGNoYW47CisJaW50IGJwcDsKKwlpbnQgaW50ZXJmYWNlX3R5cGU7IC8qIHNlbGVjdHMgUkdCbiBvciBTWVNuIEkvRiwgc2VlIGFib3ZlICovCisJaW50IGNsb2NrX2RpdmlkZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsgLyogTENEQ19GTEFHU18uLi4gKi8KKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlIGxjZF9jZmc7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2xjZF9zaXplX2NmZyBsY2Rfc2l6ZV9jZmc7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2JvYXJkX2NmZyBib2FyZF9jZmc7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfY2ZnIHN5c19idXNfY2ZnOyAvKiBvbmx5IGZvciBTWVNuIEkvRiAqLworfTsKKworc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8geworCWludCBjbG9ja19zb3VyY2U7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW5fY2ZnIGNoWzJdOworfTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX01PQklMRV9MQ0RDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDAzMTM0NGYuLmM2YjcwMzEgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTI5OSw2ICsyOTksMTMgQEAKICAgICAgICAgICBmb3IgaW5zdGFuY2UgdmlydHVhbCBzZXJ2ZXJzIGFuZCBjaGVja3BvaW50L3Jlc3RhcnQKICAgICAgICAgICBqb2JzLgogCitjb25maWcgQ0dST1VQX0ZSRUVaRVIKKyAgICAgICAgYm9vbCAiY29udHJvbCBncm91cCBmcmVlemVyIHN1YnN5c3RlbSIKKyAgICAgICAgZGVwZW5kcyBvbiBDR1JPVVBTCisgICAgICAgIGhlbHAKKyAgICAgICAgICBQcm92aWRlcyBhIHdheSB0byBmcmVlemUgYW5kIHVuZnJlZXplIGFsbCB0YXNrcyBpbiBhCisJICBjZ3JvdXAuCisKIGNvbmZpZyBDR1JPVVBfREVWSUNFCiAJYm9vbCAiRGV2aWNlIGNvbnRyb2xsZXIgZm9yIGNncm91cHMiCiAJZGVwZW5kcyBvbiBDR1JPVVBTICYmIEVYUEVSSU1FTlRBTApAQCAtNzEzLDYgKzcyMCwxNCBAQAogCSAgb3B0aW9uIHJlcGxhY2VzIHNobWVtIGFuZCB0bXBmcyB3aXRoIHRoZSBtdWNoIHNpbXBsZXIgcmFtZnMgY29kZSwKIAkgIHdoaWNoIG1heSBiZSBhcHByb3ByaWF0ZSBvbiBzbWFsbCBzeXN0ZW1zIHdpdGhvdXQgc3dhcC4KIAorY29uZmlnIEFJTworCWJvb2wgIkVuYWJsZSBBSU8gc3VwcG9ydCIgaWYgRU1CRURERUQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIFBPU0lYIGFzeW5jaHJvbm91cyBJL08gd2hpY2ggbWF5IGJ5IHVzZWQKKyAgICAgICAgICBieSBzb21lIGhpZ2ggcGVyZm9ybWFuY2UgdGhyZWFkZWQgYXBwbGljYXRpb25zLiBEaXNhYmxpbmcKKyAgICAgICAgICB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3ay4KKwogY29uZmlnIFZNX0VWRU5UX0NPVU5URVJTCiAJZGVmYXVsdCB5CiAJYm9vbCAiRW5hYmxlIFZNIGV2ZW50IGNvdW50ZXJzIGZvciAvcHJvYy92bXN0YXQiIGlmIEVNQkVEREVECkBAIC03ODYsMTYgKzgwMSw2IEBACiAKIHNvdXJjZSAiYXJjaC9LY29uZmlnIgogCi1jb25maWcgUFJPQ19QQUdFX01PTklUT1IKLSAJZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBQUk9DX0ZTICYmIE1NVQotCWJvb2wgIkVuYWJsZSAvcHJvYyBwYWdlIG1vbml0b3JpbmciIGlmIEVNQkVEREVECi0gCWhlbHAKLQkgIFZhcmlvdXMgL3Byb2MgZmlsZXMgZXhpc3QgdG8gbW9uaXRvciBwcm9jZXNzIG1lbW9yeSB1dGlsaXphdGlvbjoKLQkgIC9wcm9jL3BpZC9zbWFwcywgL3Byb2MvcGlkL2NsZWFyX3JlZnMsIC9wcm9jL3BpZC9wYWdlbWFwLAotCSAgL3Byb2Mva3BhZ2Vjb3VudCwgYW5kIC9wcm9jL2twYWdlZmxhZ3MuIERpc2FibGluZyB0aGVzZQotICAgICAgICAgIGludGVyZmFjZXMgd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbCBieSBhcHByb3hpbWF0ZWx5IDRrYi4KLQogZW5kbWVudQkJIyBHZW5lcmFsIHNldHVwCiAKIGNvbmZpZyBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UCmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50c19tZC5jIGIvaW5pdC9kb19tb3VudHNfbWQuYwppbmRleCA2OTNkMjQ2Li40Yzg3ZWUxIDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50c19tZC5jCisrKyBiL2luaXQvZG9fbW91bnRzX21kLmMKQEAgLTEsNSArMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgImRvX21vdW50cy5oIgogCkBAIC0xMiw3ICsxMywxMiBAQAogICogVGhlIGNvZGUgZm9yIHRoYXQgaXMgaGVyZS4KICAqLwogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgcmFpZF9ub2F1dG9kZXRlY3QsIHJhaWRfYXV0b3BhcnQ7CisjaWZkZWYgQ09ORklHX01EX0FVVE9ERVRFQ1QKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSByYWlkX25vYXV0b2RldGVjdDsKKyNlbHNlCitzdGF0aWMgaW50IF9faW5pdGRhdGEgcmFpZF9ub2F1dG9kZXRlY3Q9MTsKKyNlbmRpZgorc3RhdGljIGludCBfX2luaXRkYXRhIHJhaWRfYXV0b3BhcnQ7CiAKIHN0YXRpYyBzdHJ1Y3QgewogCWludCBtaW5vcjsKQEAgLTI1Miw2ICsyNTgsOCBAQAogCiAJCWlmICghc3RybmNtcChzdHIsICJub2F1dG9kZXRlY3QiLCB3bGVuKSkKIAkJCXJhaWRfbm9hdXRvZGV0ZWN0ID0gMTsKKwkJaWYgKCFzdHJuY21wKHN0ciwgImF1dG9kZXRlY3QiLCB3bGVuKSkKKwkJCXJhaWRfbm9hdXRvZGV0ZWN0ID0gMDsKIAkJaWYgKHN0cm5jbXAoc3RyLCAicGFydGl0aW9uYWJsZSIsIHdsZW4pPT0wKQogCQkJcmFpZF9hdXRvcGFydCA9IDE7CiAJCWlmIChzdHJuY21wKHN0ciwgInBhcnQiLCB3bGVuKT09MCkKQEAgLTI2NCwxNyArMjcyLDMyIEBACiBfX3NldHVwKCJyYWlkPSIsIHJhaWRfc2V0dXApOwogX19zZXR1cCgibWQ9IiwgbWRfc2V0dXApOwogCitzdGF0aWMgdm9pZCBhdXRvZGV0ZWN0X3JhaWQodm9pZCkKK3sKKwlpbnQgZmQ7CisKKwkvKgorCSAqIFNpbmNlIHdlIGRvbid0IHdhbnQgdG8gZGV0ZWN0IGFuZCB1c2UgaGFsZiBhIHJhaWQgYXJyYXksIHdlIG5lZWQgdG8KKwkgKiB3YWl0IGZvciB0aGUga25vd24gZGV2aWNlcyB0byBjb21wbGV0ZSB0aGVpciBwcm9iaW5nCisJICovCisJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IFdhaXRpbmcgZm9yIGFsbCBkZXZpY2VzIHRvIGJlIGF2YWlsYWJsZSBiZWZvcmUgYXV0b2RldGVjdFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IElmIHlvdSBkb24ndCB1c2UgcmFpZCwgdXNlIHJhaWQ9bm9hdXRvZGV0ZWN0XG4iKTsKKwl3aGlsZSAoZHJpdmVyX3Byb2JlX2RvbmUoKSA8IDApCisJCW1zbGVlcCgxMDApOworCWZkID0gc3lzX29wZW4oIi9kZXYvbWQwIiwgMCwgMCk7CisJaWYgKGZkID49IDApIHsKKwkJc3lzX2lvY3RsKGZkLCBSQUlEX0FVVE9SVU4sIHJhaWRfYXV0b3BhcnQpOworCQlzeXNfY2xvc2UoZmQpOworCX0KK30KKwogdm9pZCBfX2luaXQgbWRfcnVuX3NldHVwKHZvaWQpCiB7CiAJY3JlYXRlX2RldigiL2Rldi9tZDAiLCBNS0RFVihNRF9NQUpPUiwgMCkpOworCiAJaWYgKHJhaWRfbm9hdXRvZGV0ZWN0KQotCQlwcmludGsoS0VSTl9JTkZPICJtZDogU2tpcHBpbmcgYXV0b2RldGVjdGlvbiBvZiBSQUlEIGFycmF5cy4gKHJhaWQ9bm9hdXRvZGV0ZWN0KVxuIik7Ci0JZWxzZSB7Ci0JCWludCBmZCA9IHN5c19vcGVuKCIvZGV2L21kMCIsIDAsIDApOwotCQlpZiAoZmQgPj0gMCkgewotCQkJc3lzX2lvY3RsKGZkLCBSQUlEX0FVVE9SVU4sIHJhaWRfYXV0b3BhcnQpOwotCQkJc3lzX2Nsb3NlKGZkKTsKLQkJfQotCX0KKwkJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IFNraXBwaW5nIGF1dG9kZXRlY3Rpb24gb2YgUkFJRCBhcnJheXMuIChyYWlkPWF1dG9kZXRlY3Qgd2lsbCBmb3JjZSlcbiIpOworCWVsc2UKKwkJYXV0b2RldGVjdF9yYWlkKCk7CiAJbWRfc2V0dXBfZHJpdmUoKTsKIH0KZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzX3JkLmMgYi9pbml0L2RvX21vdW50c19yZC5jCmluZGV4IGZlZGVmOTMuLmE3Yzc0OGYgMTAwNjQ0Ci0tLSBhL2luaXQvZG9fbW91bnRzX3JkLmMKKysrIGIvaW5pdC9kb19tb3VudHNfcmQuYwpAQCAtNzEsNyArNzEsNyBAQAogCXN5c19yZWFkKGZkLCBidWYsIHNpemUpOwogCiAJLyoKLQkgKiBJZiBpdCBtYXRjaGVzIHRoZSBnemlwIG1hZ2ljIG51bWJlcnMsIHJldHVybiAtMQorCSAqIElmIGl0IG1hdGNoZXMgdGhlIGd6aXAgbWFnaWMgbnVtYmVycywgcmV0dXJuIDAKIAkgKi8KIAlpZiAoYnVmWzBdID09IDAzNyAmJiAoKGJ1ZlsxXSA9PSAwMjEzKSB8fCAoYnVmWzFdID09IDAyMzYpKSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UKZGlmZiAtLWdpdCBhL2luaXQvaW5pdHJhbWZzLmMgYi9pbml0L2luaXRyYW1mcy5jCmluZGV4IDY0NGZjMDEuLjRmNWJhNzUgMTAwNjQ0Ci0tLSBhL2luaXQvaW5pdHJhbWZzLmMKKysrIGIvaW5pdC9pbml0cmFtZnMuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvdXRpbWUuaD4KIAogc3RhdGljIF9faW5pdGRhdGEgY2hhciAqbWVzc2FnZTsKIHN0YXRpYyB2b2lkIF9faW5pdCBlcnJvcihjaGFyICp4KQpAQCAtNzIsNiArNzMsNDkgQEAKIAl9CiB9CiAKK3N0YXRpYyBsb25nIF9faW5pdCBkb191dGltZShjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHRpbWVfdCBtdGltZSkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdFsyXTsKKworCXRbMF0udHZfc2VjID0gbXRpbWU7CisJdFswXS50dl9uc2VjID0gMDsKKwl0WzFdLnR2X3NlYyA9IG10aW1lOworCXRbMV0udHZfbnNlYyA9IDA7CisKKwlyZXR1cm4gZG9fdXRpbWVzKEFUX0ZEQ1dELCBmaWxlbmFtZSwgdCwgQVRfU1lNTElOS19OT0ZPTExPVyk7Cit9CisKK3N0YXRpYyBfX2luaXRkYXRhIExJU1RfSEVBRChkaXJfbGlzdCk7CitzdHJ1Y3QgZGlyX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY2hhciAqbmFtZTsKKwl0aW1lX3QgbXRpbWU7Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZGlyX2FkZChjb25zdCBjaGFyICpuYW1lLCB0aW1lX3QgbXRpbWUpCit7CisJc3RydWN0IGRpcl9lbnRyeSAqZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGlyX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZSkKKwkJcGFuaWMoImNhbid0IGFsbG9jYXRlIGRpcl9lbnRyeSBidWZmZXIiKTsKKwlJTklUX0xJU1RfSEVBRCgmZGUtPmxpc3QpOworCWRlLT5uYW1lID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKKwlkZS0+bXRpbWUgPSBtdGltZTsKKwlsaXN0X2FkZCgmZGUtPmxpc3QsICZkaXJfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkaXJfdXRpbWUodm9pZCkKK3sKKwlzdHJ1Y3QgZGlyX2VudHJ5ICpkZSwgKnRtcDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGUsIHRtcCwgJmRpcl9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZkZS0+bGlzdCk7CisJCWRvX3V0aW1lKGRlLT5uYW1lLCBkZS0+bXRpbWUpOworCQlrZnJlZShkZS0+bmFtZSk7CisJCWtmcmVlKGRlKTsKKwl9Cit9CisKK3N0YXRpYyBfX2luaXRkYXRhIHRpbWVfdCBtdGltZTsKKwogLyogY3BpbyBoZWFkZXIgcGFyc2luZyAqLwogCiBzdGF0aWMgX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIGlubywgbWFqb3IsIG1pbm9yLCBubGluazsKQEAgLTk3LDYgKzE0MSw3IEBACiAJdWlkID0gcGFyc2VkWzJdOwogCWdpZCA9IHBhcnNlZFszXTsKIAlubGluayA9IHBhcnNlZFs0XTsKKwltdGltZSA9IHBhcnNlZFs1XTsKIAlib2R5X2xlbiA9IHBhcnNlZFs2XTsKIAltYWpvciA9IHBhcnNlZFs3XTsKIAltaW5vciA9IHBhcnNlZFs4XTsKQEAgLTEzMCw2ICsxNzUsNyBAQAogCWNvdW50IC09IG47CiB9CiAKK3N0YXRpYyBfX2luaXRkYXRhIGNoYXIgKnZjb2xsZWN0ZWQ7CiBzdGF0aWMgX19pbml0ZGF0YSBjaGFyICpjb2xsZWN0ZWQ7CiBzdGF0aWMgX19pbml0ZGF0YSBpbnQgcmVtYWluczsKIHN0YXRpYyBfX2luaXRkYXRhIGNoYXIgKmNvbGxlY3Q7CkBAIC0yNzEsNiArMzE3LDcgQEAKIAkJCWlmICh3ZmQgPj0gMCkgewogCQkJCXN5c19mY2hvd24od2ZkLCB1aWQsIGdpZCk7CiAJCQkJc3lzX2ZjaG1vZCh3ZmQsIG1vZGUpOworCQkJCXZjb2xsZWN0ZWQgPSBrc3RyZHVwKGNvbGxlY3RlZCwgR0ZQX0tFUk5FTCk7CiAJCQkJc3RhdGUgPSBDb3B5RmlsZTsKIAkJCX0KIAkJfQpAQCAtMjc4LDEyICszMjUsMTQgQEAKIAkJc3lzX21rZGlyKGNvbGxlY3RlZCwgbW9kZSk7CiAJCXN5c19jaG93bihjb2xsZWN0ZWQsIHVpZCwgZ2lkKTsKIAkJc3lzX2NobW9kKGNvbGxlY3RlZCwgbW9kZSk7CisJCWRpcl9hZGQoY29sbGVjdGVkLCBtdGltZSk7CiAJfSBlbHNlIGlmIChTX0lTQkxLKG1vZGUpIHx8IFNfSVNDSFIobW9kZSkgfHwKIAkJICAgU19JU0ZJRk8obW9kZSkgfHwgU19JU1NPQ0sobW9kZSkpIHsKIAkJaWYgKG1heWJlX2xpbmsoKSA9PSAwKSB7CiAJCQlzeXNfbWtub2QoY29sbGVjdGVkLCBtb2RlLCByZGV2KTsKIAkJCXN5c19jaG93bihjb2xsZWN0ZWQsIHVpZCwgZ2lkKTsKIAkJCXN5c19jaG1vZChjb2xsZWN0ZWQsIG1vZGUpOworCQkJZG9fdXRpbWUoY29sbGVjdGVkLCBtdGltZSk7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0yOTQsNiArMzQzLDggQEAKIAlpZiAoY291bnQgPj0gYm9keV9sZW4pIHsKIAkJc3lzX3dyaXRlKHdmZCwgdmljdGltLCBib2R5X2xlbik7CiAJCXN5c19jbG9zZSh3ZmQpOworCQlkb191dGltZSh2Y29sbGVjdGVkLCBtdGltZSk7CisJCWtmcmVlKHZjb2xsZWN0ZWQpOwogCQllYXQoYm9keV9sZW4pOwogCQlzdGF0ZSA9IFNraXBJdDsKIAkJcmV0dXJuIDA7CkBAIC0zMTEsNiArMzYyLDcgQEAKIAljbGVhbl9wYXRoKGNvbGxlY3RlZCwgMCk7CiAJc3lzX3N5bWxpbmsoY29sbGVjdGVkICsgTl9BTElHTihuYW1lX2xlbiksIGNvbGxlY3RlZCk7CiAJc3lzX2xjaG93bihjb2xsZWN0ZWQsIHVpZCwgZ2lkKTsKKwlkb191dGltZShjb2xsZWN0ZWQsIG10aW1lKTsKIAlzdGF0ZSA9IFNraXBJdDsKIAluZXh0X3N0YXRlID0gUmVzZXQ7CiAJcmV0dXJuIDA7CkBAIC00NjYsNiArNTE4LDcgQEAKIAkJYnVmICs9IGlucHRyOwogCQlsZW4gLT0gaW5wdHI7CiAJfQorCWRpcl91dGltZSgpOwogCWtmcmVlKHdpbmRvdyk7CiAJa2ZyZWUobmFtZV9idWYpOwogCWtmcmVlKHN5bWxpbmtfYnVmKTsKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggYjJlN2ZmNC4uM2UxN2EzYiAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RhcnRfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KQEAgLTY0Myw2ICs2NDQsNyBAQAogCQlpbml0cmRfc3RhcnQgPSAwOwogCX0KICNlbmRpZgorCXZtYWxsb2NfaW5pdCgpOwogCXZmc19jYWNoZXNfaW5pdF9lYXJseSgpOwogCWNwdXNldF9pbml0X2Vhcmx5KCk7CiAJbWVtX2luaXQoKTsKZGlmZiAtLWdpdCBhL2lwYy9pcGNfc3lzY3RsLmMgYi9pcGMvaXBjX3N5c2N0bC5jCmluZGV4IDY5YmM4NTkuLjBkZmViYzUgMTAwNjQ0Ci0tLSBhL2lwYy9pcGNfc3lzY3RsLmMKKysrIGIvaXBjL2lwY19zeXNjdGwuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMX1NZU0NBTEwKIC8qIFRoZSBnZW5lcmljIHN5c2N0bCBpcGMgZGF0YSByb3V0aW5lLiAqLwotc3RhdGljIGludCBzeXNjdGxfaXBjX2RhdGEoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IHN5c2N0bF9pcGNfZGF0YShjdGxfdGFibGUgKnRhYmxlLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMTY5LDE0ICsxNjksMTMgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBzeXNjdGxfaXBjX3JlZ2lzdGVyZWRfZGF0YShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLAotCQlpbnQgbmxlbiwgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKK3N0YXRpYyBpbnQgc3lzY3RsX2lwY19yZWdpc3RlcmVkX2RhdGEoY3RsX3RhYmxlICp0YWJsZSwKKwkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHN5c2N0bF9pcGNfZGF0YSh0YWJsZSwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsCi0JCW5ld2xlbik7CisJcmMgPSBzeXNjdGxfaXBjX2RhdGEodGFibGUsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCiAJaWYgKG5ld3ZhbCAmJiBuZXdsZW4gJiYgcmMgPiAwKQogCQkvKgpkaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jCmluZGV4IDk2ZmIzNmMuLjY4ZWI4NTcgMTAwNjQ0Ci0tLSBhL2lwYy9tcXVldWUuYworKysgYi9pcGMvbXF1ZXVlLmMKQEAgLTUyLDYgKzUyLDE0IEBACiAjZGVmaW5lIEhBUkRfTVNHTUFYIAkoMTMxMDcyL3NpemVvZih2b2lkKikpCiAjZGVmaW5lIERGTFRfTVNHU0laRU1BWCA4MTkyCS8qIG1heCBtZXNzYWdlIHNpemUgKi8KIAorLyoKKyAqIERlZmluZSB0aGUgcmFuZ2VzIHZhcmlvdXMgdXNlci1zcGVjaWZpZWQgbWF4aW11bSB2YWx1ZXMgY2FuCisgKiBiZSBzZXQgdG8uCisgKi8KKyNkZWZpbmUgTUlOX01TR01BWAkxCQkvKiBtaW4gdmFsdWUgZm9yIG1zZ19tYXggKi8KKyNkZWZpbmUgTUFYX01TR01BWAlIQVJEX01TR01BWAkvKiBtYXggdmFsdWUgZm9yIG1zZ19tYXggKi8KKyNkZWZpbmUgTUlOX01TR1NJWkVNQVgJMTI4CQkvKiBtaW4gdmFsdWUgZm9yIG1zZ3NpemVfbWF4ICovCisjZGVmaW5lIE1BWF9NU0dTSVpFTUFYCSg4MTkyKjEyOCkJLyogbWF4IHZhbHVlIGZvciBtc2dzaXplX21heCAqLwogCiBzdHJ1Y3QgZXh0X3dhaXRfcXVldWUgewkJLyogcXVldWUgb2Ygc2xlZXBpbmcgdGFza3MgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CkBAIC0xMzQsOCArMTQyLDggQEAKIAkJCWluZm8tPnFzaXplID0gMDsKIAkJCWluZm8tPnVzZXIgPSBOVUxMOwkvKiBzZXQgd2hlbiBhbGwgaXMgb2sgKi8KIAkJCW1lbXNldCgmaW5mby0+YXR0ciwgMCwgc2l6ZW9mKGluZm8tPmF0dHIpKTsKLQkJCWluZm8tPmF0dHIubXFfbWF4bXNnID0gREZMVF9NU0dNQVg7Ci0JCQlpbmZvLT5hdHRyLm1xX21zZ3NpemUgPSBERkxUX01TR1NJWkVNQVg7CisJCQlpbmZvLT5hdHRyLm1xX21heG1zZyA9IG1zZ19tYXg7CisJCQlpbmZvLT5hdHRyLm1xX21zZ3NpemUgPSBtc2dzaXplX21heDsKIAkJCWlmIChhdHRyKSB7CiAJCQkJaW5mby0+YXR0ci5tcV9tYXhtc2cgPSBhdHRyLT5tcV9tYXhtc2c7CiAJCQkJaW5mby0+YXR0ci5tcV9tc2dzaXplID0gYXR0ci0+bXFfbXNnc2l6ZTsKQEAgLTExOTEsMTEgKzExOTksMTEgQEAKIAkua2lsbF9zYiA9IGtpbGxfbGl0dGVyX3N1cGVyLAogfTsKIAotc3RhdGljIGludCBtc2dfbWF4X2xpbWl0X21pbiA9IERGTFRfTVNHTUFYOwotc3RhdGljIGludCBtc2dfbWF4X2xpbWl0X21heCA9IEhBUkRfTVNHTUFYOworc3RhdGljIGludCBtc2dfbWF4X2xpbWl0X21pbiA9IE1JTl9NU0dNQVg7CitzdGF0aWMgaW50IG1zZ19tYXhfbGltaXRfbWF4ID0gTUFYX01TR01BWDsKIAotc3RhdGljIGludCBtc2dfbWF4c2l6ZV9saW1pdF9taW4gPSBERkxUX01TR1NJWkVNQVg7Ci1zdGF0aWMgaW50IG1zZ19tYXhzaXplX2xpbWl0X21heCA9IElOVF9NQVg7CitzdGF0aWMgaW50IG1zZ19tYXhzaXplX2xpbWl0X21pbiA9IE1JTl9NU0dTSVpFTUFYOworc3RhdGljIGludCBtc2dfbWF4c2l6ZV9saW1pdF9tYXggPSBNQVhfTVNHU0laRU1BWDsKIAogc3RhdGljIGN0bF90YWJsZSBtcV9zeXNjdGxzW10gPSB7CiAJewpkaWZmIC0tZ2l0IGEvaXBjL3NlbS5jIGIvaXBjL3NlbS5jCmluZGV4IGJmMWJjMzYuLjA4MjEyMjQgMTAwNjQ0Ci0tLSBhL2lwYy9zZW0uYworKysgYi9pcGMvc2VtLmMKQEAgLTUwNCw3ICs1MDQsNyBAQAogCXJldHVybiBzZW16Y250OwogfQogCi12b2lkIGZyZWVfdW4oc3RydWN0IHJjdV9oZWFkICpoZWFkKQorc3RhdGljIHZvaWQgZnJlZV91bihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IHNlbV91bmRvICp1biA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3Qgc2VtX3VuZG8sIHJjdSk7CiAJa2ZyZWUodW4pOwpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IGU3N2VjNjk4Li4wYWRkM2ZhIDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC03MzcsNiArNzM3LDEwIEBACiAJY2FzZSBTSE1fTE9DSzoKIAljYXNlIFNITV9VTkxPQ0s6CiAJeworCQlzdHJ1Y3QgZmlsZSAqdW5pbml0aWFsaXplZF92YXIoc2htX2ZpbGUpOworCisJCWxydV9hZGRfZHJhaW5fYWxsKCk7ICAvKiBkcmFpbiBwYWdldmVjcyB0byBscnUgbGlzdHMgKi8KKwogCQlzaHAgPSBzaG1fbG9ja19jaGVjayhucywgc2htaWQpOwogCQlpZiAoSVNfRVJSKHNocCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoc2hwKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9LY29uZmlnLmZyZWV6ZXIgYi9rZXJuZWwvS2NvbmZpZy5mcmVlemVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYmI0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvS2NvbmZpZy5mcmVlemVyCkBAIC0wLDAgKzEsMiBAQAorY29uZmlnIEZSRUVaRVIKKwlkZWZfYm9vbCBQTV9TTEVFUCB8fCBDR1JPVVBfRlJFRVpFUgpkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IDhmOWNlN2UuLjMwNWYxMWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDcgQEAKIENGTEFHU19SRU1PVkVfc2NoZWQubyA9IC1tbm8tc3BlIC1wZwogZW5kaWYKIAorb2JqLSQoQ09ORklHX0ZSRUVaRVIpICs9IGZyZWV6ZXIubwogb2JqLSQoQ09ORklHX1BST0ZJTElORykgKz0gcHJvZmlsZS5vCiBvYmotJChDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0spICs9IHN5c2N0bF9jaGVjay5vCiBvYmotJChDT05GSUdfU1RBQ0tUUkFDRSkgKz0gc3RhY2t0cmFjZS5vCkBAIC01NSw2ICs1Niw3IEBACiBvYmotJChDT05GSUdfQ09NUEFUKSArPSBjb21wYXQubwogb2JqLSQoQ09ORklHX0NHUk9VUFMpICs9IGNncm91cC5vCiBvYmotJChDT05GSUdfQ0dST1VQX0RFQlVHKSArPSBjZ3JvdXBfZGVidWcubworb2JqLSQoQ09ORklHX0NHUk9VUF9GUkVFWkVSKSArPSBjZ3JvdXBfZnJlZXplci5vCiBvYmotJChDT05GSUdfQ1BVU0VUUykgKz0gY3B1c2V0Lm8KIG9iai0kKENPTkZJR19DR1JPVVBfTlMpICs9IG5zX2Nncm91cC5vCiBvYmotJChDT05GSUdfVVRTX05TKSArPSB1dHNuYW1lLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCBhMDEyM2Q3Li4wNDZjMTYwIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0yNDEsNyArMjQxLDYgQEAKIAlzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgKmxpbms7CiAJc3RydWN0IGNnX2Nncm91cF9saW5rICpzYXZlZF9saW5rOwogCi0Jd3JpdGVfbG9jaygmY3NzX3NldF9sb2NrKTsKIAlobGlzdF9kZWwoJmNnLT5obGlzdCk7CiAJY3NzX3NldF9jb3VudC0tOwogCkBAIC0yNTEsMTYgKzI1MCwyNSBAQAogCQlsaXN0X2RlbCgmbGluay0+Y2dycF9saW5rX2xpc3QpOwogCQlrZnJlZShsaW5rKTsKIAl9Ci0KLQl3cml0ZV91bmxvY2soJmNzc19zZXRfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fcmVsZWFzZV9jc3Nfc2V0KHN0cnVjdCBrcmVmICprLCBpbnQgdGFza2V4aXQpCitzdGF0aWMgdm9pZCBfX3B1dF9jc3Nfc2V0KHN0cnVjdCBjc3Nfc2V0ICpjZywgaW50IHRhc2tleGl0KQogewogCWludCBpOwotCXN0cnVjdCBjc3Nfc2V0ICpjZyA9IGNvbnRhaW5lcl9vZihrLCBzdHJ1Y3QgY3NzX3NldCwgcmVmKTsKLQorCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIHJlZmNvdW50IGRvZXNuJ3QgaGl0IHplcm8gd2hpbGUgYW55IHJlYWRlcnMKKwkgKiBjYW4gc2VlIGl0LiBTaW1pbGFyIHRvIGF0b21pY19kZWNfYW5kX2xvY2soKSwgYnV0IGZvciBhbgorCSAqIHJ3bG9jaworCSAqLworCWlmIChhdG9taWNfYWRkX3VubGVzcygmY2ctPnJlZmNvdW50LCAtMSwgMSkpCisJCXJldHVybjsKKwl3cml0ZV9sb2NrKCZjc3Nfc2V0X2xvY2spOworCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmY2ctPnJlZmNvdW50KSkgeworCQl3cml0ZV91bmxvY2soJmNzc19zZXRfbG9jayk7CisJCXJldHVybjsKKwl9CiAJdW5saW5rX2Nzc19zZXQoY2cpOworCXdyaXRlX3VubG9jaygmY3NzX3NldF9sb2NrKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKGkgPSAwOyBpIDwgQ0dST1VQX1NVQlNZU19DT1VOVDsgaSsrKSB7CkBAIC0yNzYsMzIgKzI4NCwyMiBAQAogCWtmcmVlKGNnKTsKIH0KIAotc3RhdGljIHZvaWQgcmVsZWFzZV9jc3Nfc2V0KHN0cnVjdCBrcmVmICprKQotewotCV9fcmVsZWFzZV9jc3Nfc2V0KGssIDApOwotfQotCi1zdGF0aWMgdm9pZCByZWxlYXNlX2Nzc19zZXRfdGFza2V4aXQoc3RydWN0IGtyZWYgKmspCi17Ci0JX19yZWxlYXNlX2Nzc19zZXQoaywgMSk7Ci19Ci0KIC8qCiAgKiByZWZjb3VudGVkIGdldC9wdXQgZm9yIGNzc19zZXQgb2JqZWN0cwogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2Nzc19zZXQoc3RydWN0IGNzc19zZXQgKmNnKQogewotCWtyZWZfZ2V0KCZjZy0+cmVmKTsKKwlhdG9taWNfaW5jKCZjZy0+cmVmY291bnQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2Nzc19zZXQoc3RydWN0IGNzc19zZXQgKmNnKQogewotCWtyZWZfcHV0KCZjZy0+cmVmLCByZWxlYXNlX2Nzc19zZXQpOworCV9fcHV0X2Nzc19zZXQoY2csIDApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2Nzc19zZXRfdGFza2V4aXQoc3RydWN0IGNzc19zZXQgKmNnKQogewotCWtyZWZfcHV0KCZjZy0+cmVmLCByZWxlYXNlX2Nzc19zZXRfdGFza2V4aXQpOworCV9fcHV0X2Nzc19zZXQoY2csIDEpOwogfQogCiAvKgpAQCAtNDI3LDcgKzQyNSw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWtyZWZfaW5pdCgmcmVzLT5yZWYpOworCWF0b21pY19zZXQoJnJlcy0+cmVmY291bnQsIDEpOwogCUlOSVRfTElTVF9IRUFEKCZyZXMtPmNnX2xpbmtzKTsKIAlJTklUX0xJU1RfSEVBRCgmcmVzLT50YXNrcyk7CiAJSU5JVF9ITElTVF9OT0RFKCZyZXMtPmhsaXN0KTsKQEAgLTg3MCw2ICs4NjgsMTQgQEAKIAkucmVtb3VudF9mcyA9IGNncm91cF9yZW1vdW50LAogfTsKIAorc3RhdGljIHZvaWQgaW5pdF9jZ3JvdXBfaG91c2VrZWVwaW5nKHN0cnVjdCBjZ3JvdXAgKmNncnApCit7CisJSU5JVF9MSVNUX0hFQUQoJmNncnAtPnNpYmxpbmcpOworCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5jaGlsZHJlbik7CisJSU5JVF9MSVNUX0hFQUQoJmNncnAtPmNzc19zZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY2dycC0+cmVsZWFzZV9saXN0KTsKKwlpbml0X3J3c2VtKCZjZ3JwLT5waWRzX211dGV4KTsKK30KIHN0YXRpYyB2b2lkIGluaXRfY2dyb3VwX3Jvb3Qoc3RydWN0IGNncm91cGZzX3Jvb3QgKnJvb3QpCiB7CiAJc3RydWN0IGNncm91cCAqY2dycCA9ICZyb290LT50b3BfY2dyb3VwOwpAQCAtODc4LDEwICs4ODQsNyBAQAogCXJvb3QtPm51bWJlcl9vZl9jZ3JvdXBzID0gMTsKIAljZ3JwLT5yb290ID0gcm9vdDsKIAljZ3JwLT50b3BfY2dyb3VwID0gY2dycDsKLQlJTklUX0xJU1RfSEVBRCgmY2dycC0+c2libGluZyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNncnAtPmNoaWxkcmVuKTsKLQlJTklUX0xJU1RfSEVBRCgmY2dycC0+Y3NzX3NldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5yZWxlYXNlX2xpc3QpOworCWluaXRfY2dyb3VwX2hvdXNla2VlcGluZyhjZ3JwKTsKIH0KIAogc3RhdGljIGludCBjZ3JvdXBfdGVzdF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhKQpAQCAtMTcyOCw3ICsxNzMxLDcgQEAKIAogCXJlYWRfbG9jaygmY3NzX3NldF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpbmssICZjZ3JwLT5jc3Nfc2V0cywgY2dycF9saW5rX2xpc3QpIHsKLQkJY291bnQgKz0gYXRvbWljX3JlYWQoJmxpbmstPmNnLT5yZWYucmVmY291bnQpOworCQljb3VudCArPSBhdG9taWNfcmVhZCgmbGluay0+Y2ctPnJlZmNvdW50KTsKIAl9CiAJcmVhZF91bmxvY2soJmNzc19zZXRfbG9jayk7CiAJcmV0dXJuIGNvdW50OwpAQCAtMTk5NywxNiArMjAwMCw3IEBACiAgKiBidXQgd2UgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZSBpbmZvcm1hdGlvbiB3ZSBwcm9kdWNlIGlzIGNvcnJlY3QKICAqIHVubGVzcyB3ZSBwcm9kdWNlIGl0IGVudGlyZWx5IGF0b21pY2FsbHkuCiAgKgotICogVXBvbiB0YXNrcyBmaWxlIG9wZW4oKSwgYSBzdHJ1Y3QgY3RyX3N0cnVjdCBpcyBhbGxvY2F0ZWQsIHRoYXQKLSAqIHdpbGwgaGF2ZSBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgKGFsc28gYWxsb2NhdGVkIGhlcmUpLiAgVGhlIHN0cnVjdAotICogY3RyX3N0cnVjdCAqIGlzIHN0b3JlZCBpbiBmaWxlLT5wcml2YXRlX2RhdGEuICBJdHMgcmVzb3VyY2VzIHdpbGwKLSAqIGJlIGZyZWVkIGJ5IHJlbGVhc2UoKSB3aGVuIHRoZSBmaWxlIGlzIGNsb3NlZC4gIFRoZSBhcnJheSBpcyB1c2VkCi0gKiB0byBzcHJpbnRmIHRoZSBQSURzIGFuZCB0aGVuIHVzZWQgYnkgcmVhZCgpLgogICovCi1zdHJ1Y3QgY3RyX3N0cnVjdCB7Ci0JY2hhciAqYnVmOwotCWludCBidWZzejsKLX07CiAKIC8qCiAgKiBMb2FkIGludG8gJ3BpZGFycmF5JyB1cCB0byAnbnBpZHMnIG9mIHRoZSB0YXNrcyB1c2luZyBjZ3JvdXAKQEAgLTIwODgsNDEgKzIwODIsMTMxIEBACiAJcmV0dXJuICoocGlkX3QgKilhIC0gKihwaWRfdCAqKWI7CiB9CiAKLS8qCi0gKiBDb252ZXJ0IGFycmF5ICdhJyBvZiAnbnBpZHMnIHBpZF90J3MgdG8gYSBzdHJpbmcgb2YgbmV3bGluZSBzZXBhcmF0ZWQKLSAqIGRlY2ltYWwgcGlkcyBpbiAnYnVmJy4gIERvbid0IHdyaXRlIG1vcmUgdGhhbiAnc3onIGNoYXJzLCBidXQgcmV0dXJuCi0gKiBjb3VudCAnY250JyBvZiBob3cgbWFueSBjaGFycyB3b3VsZCBiZSB3cml0dGVuIGlmIGJ1ZiB3ZXJlIGxhcmdlIGVub3VnaC4KLSAqLwotc3RhdGljIGludCBwaWRfYXJyYXlfdG9fYnVmKGNoYXIgKmJ1ZiwgaW50IHN6LCBwaWRfdCAqYSwgaW50IG5waWRzKQotewotCWludCBjbnQgPSAwOwotCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IG5waWRzOyBpKyspCi0JCWNudCArPSBzbnByaW50ZihidWYgKyBjbnQsIG1heChzeiAtIGNudCwgMCksICIlZFxuIiwgYVtpXSk7Ci0JcmV0dXJuIGNudDsKKy8qCisgKiBzZXFfZmlsZSBtZXRob2RzIGZvciB0aGUgInRhc2tzIiBmaWxlLiBUaGUgc2VxX2ZpbGUgcG9zaXRpb24gaXMgdGhlCisgKiBuZXh0IHBpZCB0byBkaXNwbGF5OyB0aGUgc2VxX2ZpbGUgaXRlcmF0b3IgaXMgYSBwb2ludGVyIHRvIHRoZSBwaWQKKyAqIGluIHRoZSBjZ3JvdXAtPnRhc2tzX3BpZHMgYXJyYXkuCisgKi8KKworc3RhdGljIHZvaWQgKmNncm91cF90YXNrc19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKQoreworCS8qCisJICogSW5pdGlhbGx5IHdlIHJlY2VpdmUgYSBwb3NpdGlvbiB2YWx1ZSB0aGF0IGNvcnJlc3BvbmRzIHRvCisJICogb25lIG1vcmUgdGhhbiB0aGUgbGFzdCBwaWQgc2hvd24gKG9yIDAgb24gdGhlIGZpcnN0IGNhbGwgb3IKKwkgKiBhZnRlciBhIHNlZWsgdG8gdGhlIHN0YXJ0KS4gVXNlIGEgYmluYXJ5LXNlYXJjaCB0byBmaW5kIHRoZQorCSAqIG5leHQgcGlkIHRvIGRpc3BsYXksIGlmIGFueQorCSAqLworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBzLT5wcml2YXRlOworCWludCBpbmRleCA9IDAsIHBpZCA9ICpwb3M7CisJaW50ICppdGVyOworCisJZG93bl9yZWFkKCZjZ3JwLT5waWRzX211dGV4KTsKKwlpZiAocGlkKSB7CisJCWludCBlbmQgPSBjZ3JwLT5waWRzX2xlbmd0aDsKKwkJaW50IGk7CisJCXdoaWxlIChpbmRleCA8IGVuZCkgeworCQkJaW50IG1pZCA9IChpbmRleCArIGVuZCkgLyAyOworCQkJaWYgKGNncnAtPnRhc2tzX3BpZHNbbWlkXSA9PSBwaWQpIHsKKwkJCQlpbmRleCA9IG1pZDsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoY2dycC0+dGFza3NfcGlkc1ttaWRdIDw9IHBpZCkKKwkJCQlpbmRleCA9IG1pZCArIDE7CisJCQllbHNlCisJCQkJZW5kID0gbWlkOworCQl9CisJfQorCS8qIElmIHdlJ3JlIG9mZiB0aGUgZW5kIG9mIHRoZSBhcnJheSwgd2UncmUgZG9uZSAqLworCWlmIChpbmRleCA+PSBjZ3JwLT5waWRzX2xlbmd0aCkKKwkJcmV0dXJuIE5VTEw7CisJLyogVXBkYXRlIHRoZSBhYnN0cmFjdCBwb3NpdGlvbiB0byBiZSB0aGUgYWN0dWFsIHBpZCB0aGF0IHdlIGZvdW5kICovCisJaXRlciA9IGNncnAtPnRhc2tzX3BpZHMgKyBpbmRleDsKKwkqcG9zID0gKml0ZXI7CisJcmV0dXJuIGl0ZXI7CiB9CiAKLS8qCi0gKiBIYW5kbGUgYW4gb3BlbiBvbiAndGFza3MnIGZpbGUuICBQcmVwYXJlIGEgYnVmZmVyIGxpc3RpbmcgdGhlCi0gKiBwcm9jZXNzIGlkJ3Mgb2YgdGFza3MgY3VycmVudGx5IGF0dGFjaGVkIHRvIHRoZSBjZ3JvdXAgYmVpbmcgb3BlbmVkLgotICoKLSAqIERvZXMgbm90IHJlcXVpcmUgYW55IHNwZWNpZmljIGNncm91cCBtdXRleGVzLCBhbmQgZG9lcyBub3QgdGFrZSBhbnkuCi0gKi8KLXN0YXRpYyBpbnQgY2dyb3VwX3Rhc2tzX29wZW4oc3RydWN0IGlub2RlICp1bnVzZWQsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIHZvaWQgY2dyb3VwX3Rhc2tzX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQoreworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBzLT5wcml2YXRlOworCXVwX3JlYWQoJmNncnAtPnBpZHNfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCAqY2dyb3VwX3Rhc2tzX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gcy0+cHJpdmF0ZTsKKwlpbnQgKnAgPSB2OworCWludCAqZW5kID0gY2dycC0+dGFza3NfcGlkcyArIGNncnAtPnBpZHNfbGVuZ3RoOworCisJLyoKKwkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IHBpZCBpbiB0aGUgYXJyYXkuIElmIHRoaXMgZ29lcyBvZmYgdGhlCisJICogZW5kLCB3ZSdyZSBkb25lCisJICovCisJcCsrOworCWlmIChwID49IGVuZCkgeworCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgeworCQkqcG9zID0gKnA7CisJCXJldHVybiBwOworCX0KK30KKworc3RhdGljIGludCBjZ3JvdXBfdGFza3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJcmV0dXJuIHNlcV9wcmludGYocywgIiVkXG4iLCAqKGludCAqKXYpOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNncm91cF90YXNrc19zZXFfb3BlcmF0aW9ucyA9IHsKKwkuc3RhcnQgPSBjZ3JvdXBfdGFza3Nfc3RhcnQsCisJLnN0b3AgPSBjZ3JvdXBfdGFza3Nfc3RvcCwKKwkubmV4dCA9IGNncm91cF90YXNrc19uZXh0LAorCS5zaG93ID0gY2dyb3VwX3Rhc2tzX3Nob3csCit9OworCitzdGF0aWMgdm9pZCByZWxlYXNlX2Nncm91cF9waWRfYXJyYXkoc3RydWN0IGNncm91cCAqY2dycCkKK3sKKwlkb3duX3dyaXRlKCZjZ3JwLT5waWRzX211dGV4KTsKKwlCVUdfT04oIWNncnAtPnBpZHNfdXNlX2NvdW50KTsKKwlpZiAoIS0tY2dycC0+cGlkc191c2VfY291bnQpIHsKKwkJa2ZyZWUoY2dycC0+dGFza3NfcGlkcyk7CisJCWNncnAtPnRhc2tzX3BpZHMgPSBOVUxMOworCQljZ3JwLT5waWRzX2xlbmd0aCA9IDA7CisJfQorCXVwX3dyaXRlKCZjZ3JwLT5waWRzX211dGV4KTsKK30KKworc3RhdGljIGludCBjZ3JvdXBfdGFza3NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gX19kX2NncnAoZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50KTsKLQlzdHJ1Y3QgY3RyX3N0cnVjdCAqY3RyOwotCXBpZF90ICpwaWRhcnJheTsKLQlpbnQgbnBpZHM7Ci0JY2hhciBjOwogCiAJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCiAJCXJldHVybiAwOwogCi0JY3RyID0ga21hbGxvYyhzaXplb2YoKmN0ciksIEdGUF9LRVJORUwpOwotCWlmICghY3RyKQotCQlnb3RvIGVycjA7CisJcmVsZWFzZV9jZ3JvdXBfcGlkX2FycmF5KGNncnApOworCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNncm91cF90YXNrc19vcGVyYXRpb25zID0geworCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkud3JpdGUgPSBjZ3JvdXBfZmlsZV93cml0ZSwKKwkucmVsZWFzZSA9IGNncm91cF90YXNrc19yZWxlYXNlLAorfTsKKworLyoKKyAqIEhhbmRsZSBhbiBvcGVuIG9uICd0YXNrcycgZmlsZS4gIFByZXBhcmUgYW4gYXJyYXkgY29udGFpbmluZyB0aGUKKyAqIHByb2Nlc3MgaWQncyBvZiB0YXNrcyBjdXJyZW50bHkgYXR0YWNoZWQgdG8gdGhlIGNncm91cCBiZWluZyBvcGVuZWQuCisgKi8KKworc3RhdGljIGludCBjZ3JvdXBfdGFza3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKnVudXNlZCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGNncm91cCAqY2dycCA9IF9fZF9jZ3JwKGZpbGUtPmZfZGVudHJ5LT5kX3BhcmVudCk7CisJcGlkX3QgKnBpZGFycmF5OworCWludCBucGlkczsKKwlpbnQgcmV0dmFsOworCisJLyogTm90aGluZyB0byBkbyBmb3Igd3JpdGUtb25seSBmaWxlcyAqLworCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQorCQlyZXR1cm4gMDsKIAogCS8qCiAJICogSWYgY2dyb3VwIGdldHMgbW9yZSB1c2VycyBhZnRlciB3ZSByZWFkIGNvdW50LCB3ZSB3b24ndCBoYXZlCkBAIC0yMTMxLDU3ICsyMjE1LDMxIEBACiAJICogc2hvdyB1cCB1bnRpbCBzb21ldGltZSBsYXRlciBvbi4KIAkgKi8KIAlucGlkcyA9IGNncm91cF90YXNrX2NvdW50KGNncnApOwotCWlmIChucGlkcykgewotCQlwaWRhcnJheSA9IGttYWxsb2MobnBpZHMgKiBzaXplb2YocGlkX3QpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwaWRhcnJheSkKLQkJCWdvdG8gZXJyMTsKKwlwaWRhcnJheSA9IGttYWxsb2MobnBpZHMgKiBzaXplb2YocGlkX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBpZGFycmF5KQorCQlyZXR1cm4gLUVOT01FTTsKKwlucGlkcyA9IHBpZF9hcnJheV9sb2FkKHBpZGFycmF5LCBucGlkcywgY2dycCk7CisJc29ydChwaWRhcnJheSwgbnBpZHMsIHNpemVvZihwaWRfdCksIGNtcHBpZCwgTlVMTCk7CiAKLQkJbnBpZHMgPSBwaWRfYXJyYXlfbG9hZChwaWRhcnJheSwgbnBpZHMsIGNncnApOwotCQlzb3J0KHBpZGFycmF5LCBucGlkcywgc2l6ZW9mKHBpZF90KSwgY21wcGlkLCBOVUxMKTsKKwkvKgorCSAqIFN0b3JlIHRoZSBhcnJheSBpbiB0aGUgY2dyb3VwLCBmcmVlaW5nIHRoZSBvbGQKKwkgKiBhcnJheSBpZiBuZWNlc3NhcnkKKwkgKi8KKwlkb3duX3dyaXRlKCZjZ3JwLT5waWRzX211dGV4KTsKKwlrZnJlZShjZ3JwLT50YXNrc19waWRzKTsKKwljZ3JwLT50YXNrc19waWRzID0gcGlkYXJyYXk7CisJY2dycC0+cGlkc19sZW5ndGggPSBucGlkczsKKwljZ3JwLT5waWRzX3VzZV9jb3VudCsrOworCXVwX3dyaXRlKCZjZ3JwLT5waWRzX211dGV4KTsKIAotCQkvKiBDYWxsIHBpZF9hcnJheV90b19idWYoKSB0d2ljZSwgZmlyc3QganVzdCB0byBnZXQgYnVmc3ogKi8KLQkJY3RyLT5idWZzeiA9IHBpZF9hcnJheV90b19idWYoJmMsIHNpemVvZihjKSwgcGlkYXJyYXksIG5waWRzKSArIDE7Ci0JCWN0ci0+YnVmID0ga21hbGxvYyhjdHItPmJ1ZnN6LCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFjdHItPmJ1ZikKLQkJCWdvdG8gZXJyMjsKLQkJY3RyLT5idWZzeiA9IHBpZF9hcnJheV90b19idWYoY3RyLT5idWYsIGN0ci0+YnVmc3osIHBpZGFycmF5LCBucGlkcyk7CisJZmlsZS0+Zl9vcCA9ICZjZ3JvdXBfdGFza3Nfb3BlcmF0aW9uczsKIAotCQlrZnJlZShwaWRhcnJheSk7Ci0JfSBlbHNlIHsKLQkJY3RyLT5idWYgPSBOVUxMOwotCQljdHItPmJ1ZnN6ID0gMDsKKwlyZXR2YWwgPSBzZXFfb3BlbihmaWxlLCAmY2dyb3VwX3Rhc2tzX3NlcV9vcGVyYXRpb25zKTsKKwlpZiAocmV0dmFsKSB7CisJCXJlbGVhc2VfY2dyb3VwX3BpZF9hcnJheShjZ3JwKTsKKwkJcmV0dXJuIHJldHZhbDsKIAl9Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gY3RyOwotCXJldHVybiAwOwotCi1lcnIyOgotCWtmcmVlKHBpZGFycmF5KTsKLWVycjE6Ci0Ja2ZyZWUoY3RyKTsKLWVycjA6Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNncm91cF90YXNrc19yZWFkKHN0cnVjdCBjZ3JvdXAgKmNncnAsCi0JCQkJICAgIHN0cnVjdCBjZnR5cGUgKmNmdCwKLQkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCi0JCQkJICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgY3RyX3N0cnVjdCAqY3RyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBjdHItPmJ1ZiwgY3RyLT5idWZzeik7Ci19Ci0KLXN0YXRpYyBpbnQgY2dyb3VwX3Rhc2tzX3JlbGVhc2Uoc3RydWN0IGlub2RlICp1bnVzZWRfaW5vZGUsCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBjdHJfc3RydWN0ICpjdHI7Ci0KLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQljdHIgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCWtmcmVlKGN0ci0+YnVmKTsKLQkJa2ZyZWUoY3RyKTsKLQl9CisJKChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGEpLT5wcml2YXRlID0gY2dycDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIxMCw3ICsyMjY4LDYgQEAKIAl7CiAJCS5uYW1lID0gInRhc2tzIiwKIAkJLm9wZW4gPSBjZ3JvdXBfdGFza3Nfb3BlbiwKLQkJLnJlYWQgPSBjZ3JvdXBfdGFza3NfcmVhZCwKIAkJLndyaXRlX3U2NCA9IGNncm91cF90YXNrc193cml0ZSwKIAkJLnJlbGVhc2UgPSBjZ3JvdXBfdGFza3NfcmVsZWFzZSwKIAkJLnByaXZhdGUgPSBGSUxFX1RBU0tMSVNULApAQCAtMjMwMCwxMCArMjM1Nyw3IEBACiAKIAltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOwogCi0JSU5JVF9MSVNUX0hFQUQoJmNncnAtPnNpYmxpbmcpOwotCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5jaGlsZHJlbik7Ci0JSU5JVF9MSVNUX0hFQUQoJmNncnAtPmNzc19zZXRzKTsKLQlJTklUX0xJU1RfSEVBRCgmY2dycC0+cmVsZWFzZV9saXN0KTsKKwlpbml0X2Nncm91cF9ob3VzZWtlZXBpbmcoY2dycCk7CiAKIAljZ3JwLT5wYXJlbnQgPSBwYXJlbnQ7CiAJY2dycC0+cm9vdCA9IHBhcmVudC0+cm9vdDsKQEAgLTI0OTUsOCArMjU0OSw3IEBACiBpbnQgX19pbml0IGNncm91cF9pbml0X2Vhcmx5KHZvaWQpCiB7CiAJaW50IGk7Ci0Ja3JlZl9pbml0KCZpbml0X2Nzc19zZXQucmVmKTsKLQlrcmVmX2dldCgmaW5pdF9jc3Nfc2V0LnJlZik7CisJYXRvbWljX3NldCgmaW5pdF9jc3Nfc2V0LnJlZmNvdW50LCAxKTsKIAlJTklUX0xJU1RfSEVBRCgmaW5pdF9jc3Nfc2V0LmNnX2xpbmtzKTsKIAlJTklUX0xJU1RfSEVBRCgmaW5pdF9jc3Nfc2V0LnRhc2tzKTsKIAlJTklUX0hMSVNUX05PREUoJmluaXRfY3NzX3NldC5obGlzdCk7CkBAIC0yNzM1LDYgKzI3ODgsOCBAQAogICogQ2FsbGVkIG9uIGV2ZXJ5IGNoYW5nZSB0byBtbS0+b3duZXIuIG1tX2luaXRfb3duZXIoKSBkb2VzIG5vdAogICogaW52b2tlIHRoaXMgcm91dGluZSwgc2luY2UgaXQgYXNzaWducyB0aGUgbW0tPm93bmVyIHRoZSBmaXJzdCB0aW1lCiAgKiBhbmQgZG9lcyBub3QgY2hhbmdlIGl0LgorICoKKyAqIFRoZSBjYWxsYmFja3MgYXJlIGludm9rZWQgd2l0aCBtbWFwX3NlbSBoZWxkIGluIHJlYWQgbW9kZS4KICAqLwogdm9pZCBjZ3JvdXBfbW1fb3duZXJfY2FsbGJhY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldykKIHsKQEAgLTI3NTAsNyArMjgwNSw3IEBACiAJCQlpZiAob2xkY2dycCA9PSBuZXdjZ3JwKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKHNzLT5tbV9vd25lcl9jaGFuZ2VkKQotCQkJCXNzLT5tbV9vd25lcl9jaGFuZ2VkKHNzLCBvbGRjZ3JwLCBuZXdjZ3JwKTsKKwkJCQlzcy0+bW1fb3duZXJfY2hhbmdlZChzcywgb2xkY2dycCwgbmV3Y2dycCwgbmV3KTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXBfZGVidWcuYyBiL2tlcm5lbC9jZ3JvdXBfZGVidWcuYwppbmRleCBjM2RjM2FiLi5kYWNhNjIwIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwX2RlYnVnLmMKKysrIGIva2VybmVsL2Nncm91cF9kZWJ1Zy5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJdTY0IGNvdW50OwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWNvdW50ID0gYXRvbWljX3JlYWQoJmN1cnJlbnQtPmNncm91cHMtPnJlZi5yZWZjb3VudCk7CisJY291bnQgPSBhdG9taWNfcmVhZCgmY3VycmVudC0+Y2dyb3Vwcy0+cmVmY291bnQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTkwLDcgKzkwLDcgQEAKIAl7CiAJCS5uYW1lID0gInJlbGVhc2FibGUiLAogCQkucmVhZF91NjQgPSByZWxlYXNhYmxlX3JlYWQsCi0JfQorCX0sCiB9OwogCiBzdGF0aWMgaW50IGRlYnVnX3BvcHVsYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY29udCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXBfZnJlZXplci5jIGIva2VybmVsL2Nncm91cF9mcmVlemVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk1MDU2OQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9jZ3JvdXBfZnJlZXplci5jCkBAIC0wLDAgKzEsMzc5IEBACisvKgorICogY2dyb3VwX2ZyZWV6ZXIuYyAtICBjb250cm9sIGdyb3VwIGZyZWV6ZXIgc3Vic3lzdGVtCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMjAwNworICoKKyAqIEF1dGhvciA6IENlZHJpYyBMZSBHb2F0ZXIgPGNsZ0Bmci5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyLjEgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKK2VudW0gZnJlZXplcl9zdGF0ZSB7CisJQ0dST1VQX1RIQVdFRCA9IDAsCisJQ0dST1VQX0ZSRUVaSU5HLAorCUNHUk9VUF9GUk9aRU4sCit9OworCitzdHJ1Y3QgZnJlZXplciB7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzOworCWVudW0gZnJlZXplcl9zdGF0ZSBzdGF0ZTsKKwlzcGlubG9ja190IGxvY2s7IC8qIHByb3RlY3RzIF93cml0ZXNfIHRvIHN0YXRlICovCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmcmVlemVyICpjZ3JvdXBfZnJlZXplcigKKwkJc3RydWN0IGNncm91cCAqY2dyb3VwKQoreworCXJldHVybiBjb250YWluZXJfb2YoCisJCWNncm91cF9zdWJzeXNfc3RhdGUoY2dyb3VwLCBmcmVlemVyX3N1YnN5c19pZCksCisJCXN0cnVjdCBmcmVlemVyLCBjc3MpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmcmVlemVyICp0YXNrX2ZyZWV6ZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXJldHVybiBjb250YWluZXJfb2YodGFza19zdWJzeXNfc3RhdGUodGFzaywgZnJlZXplcl9zdWJzeXNfaWQpLAorCQkJICAgIHN0cnVjdCBmcmVlemVyLCBjc3MpOworfQorCitpbnQgY2dyb3VwX2Zyb3plbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXI7CisJZW51bSBmcmVlemVyX3N0YXRlIHN0YXRlOworCisJdGFza19sb2NrKHRhc2spOworCWZyZWV6ZXIgPSB0YXNrX2ZyZWV6ZXIodGFzayk7CisJc3RhdGUgPSBmcmVlemVyLT5zdGF0ZTsKKwl0YXNrX3VubG9jayh0YXNrKTsKKworCXJldHVybiBzdGF0ZSA9PSBDR1JPVVBfRlJPWkVOOworfQorCisvKgorICogY2dyb3Vwc193cml0ZV9zdHJpbmcoKSBsaW1pdHMgdGhlIHNpemUgb2YgZnJlZXplciBzdGF0ZSBzdHJpbmdzIHRvCisgKiBDR1JPVVBfTE9DQUxfQlVGRkVSX1NJWkUKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmZyZWV6ZXJfc3RhdGVfc3Ryc1tdID0geworCSJUSEFXRUQiLAorCSJGUkVFWklORyIsCisJIkZST1pFTiIsCit9OworCisvKgorICogU3RhdGUgZGlhZ3JhbQorICogVHJhbnNpdGlvbnMgYXJlIGNhdXNlZCBieSB1c2Vyc3BhY2Ugd3JpdGVzIHRvIHRoZSBmcmVlemVyLnN0YXRlIGZpbGUuCisgKiBUaGUgdmFsdWVzIGluIHBhcmVudGhlc2lzIGFyZSBzdGF0ZSBsYWJlbHMuIFRoZSByZXN0IGFyZSBlZGdlIGxhYmVscy4KKyAqCisgKiAoVEhBV0VEKSAtLUZST1pFTi0tPiAoRlJFRVpJTkcpIC0tRlJPWkVOLS0+IChGUk9aRU4pCisgKiAgICBeIF4gICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICB8IFxfX19fX19fVEhBV0VEX19fX19fXy8gICAgICAgICAgICAgICAgICAgICB8CisgKiAgICBcX19fX19fX19fX19fX19fX19fX19fX19fX19USEFXRURfX19fX19fX19fX18vCisgKi8KKworc3RydWN0IGNncm91cF9zdWJzeXMgZnJlZXplcl9zdWJzeXM7CisKKy8qIExvY2tzIHRha2VuIGFuZCB0aGVpciBvcmRlcmluZworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBjc3Nfc2V0X2xvY2sKKyAqIGNncm91cF9tdXRleCAoQUtBIGNncm91cF9sb2NrKQorICogdGFzay0+YWxsb2NfbG9jayAoQUtBIHRhc2tfbG9jaykKKyAqIGZyZWV6ZXItPmxvY2sKKyAqIHRhc2stPnNpZ2hhbmQtPnNpZ2xvY2sKKyAqCisgKiBjZ3JvdXAgY29kZSBmb3JjZXMgY3NzX3NldF9sb2NrIHRvIGJlIHRha2VuIGJlZm9yZSB0YXNrLT5hbGxvY19sb2NrCisgKgorICogZnJlZXplcl9jcmVhdGUoKSwgZnJlZXplcl9kZXN0cm95KCk6CisgKiBjZ3JvdXBfbXV0ZXggWyBieSBjZ3JvdXAgY29yZSBdCisgKgorICogY2FuX2F0dGFjaCgpOgorICogY2dyb3VwX211dGV4CisgKgorICogY2dyb3VwX2Zyb3plbigpOgorICogdGFzay0+YWxsb2NfbG9jayAodG8gZ2V0IHRhc2sncyBjZ3JvdXApCisgKgorICogZnJlZXplcl9mb3JrKCkgKHByZXNlcnZpbmcgZm9yaygpIHBlcmZvcm1hbmNlIG1lYW5zIGNhbid0IHRha2UgY2dyb3VwX211dGV4KToKKyAqIHRhc2stPmFsbG9jX2xvY2sgKHRvIGdldCB0YXNrJ3MgY2dyb3VwKQorICogZnJlZXplci0+bG9jaworICogIHNpZ2hhbmQtPnNpZ2xvY2sgKGlmIHRoZSBjZ3JvdXAgaXMgZnJlZXppbmcpCisgKgorICogZnJlZXplcl9yZWFkKCk6CisgKiBjZ3JvdXBfbXV0ZXgKKyAqICBmcmVlemVyLT5sb2NrCisgKiAgIHJlYWRfbG9jayBjc3Nfc2V0X2xvY2sgKGNncm91cCBpdGVyYXRvciBzdGFydCkKKyAqCisgKiBmcmVlemVyX3dyaXRlKCkgKGZyZWV6ZSk6CisgKiBjZ3JvdXBfbXV0ZXgKKyAqICBmcmVlemVyLT5sb2NrCisgKiAgIHJlYWRfbG9jayBjc3Nfc2V0X2xvY2sgKGNncm91cCBpdGVyYXRvciBzdGFydCkKKyAqICAgIHNpZ2hhbmQtPnNpZ2xvY2sKKyAqCisgKiBmcmVlemVyX3dyaXRlKCkgKHVuZnJlZXplKToKKyAqIGNncm91cF9tdXRleAorICogIGZyZWV6ZXItPmxvY2sKKyAqICAgcmVhZF9sb2NrIGNzc19zZXRfbG9jayAoY2dyb3VwIGl0ZXJhdG9yIHN0YXJ0KQorICogICAgdGFzay0+YWxsb2NfbG9jayAodG8gcHJldmVudCByYWNlcyB3aXRoIGZyZWV6ZV90YXNrKCkpCisgKiAgICAgc2lnaGFuZC0+c2lnbG9jaworICovCitzdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmZyZWV6ZXJfY3JlYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKKwkJCQkJCSAgc3RydWN0IGNncm91cCAqY2dyb3VwKQoreworCXN0cnVjdCBmcmVlemVyICpmcmVlemVyOworCisJZnJlZXplciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmcmVlemVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmcmVlemVyKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXNwaW5fbG9ja19pbml0KCZmcmVlemVyLT5sb2NrKTsKKwlmcmVlemVyLT5zdGF0ZSA9IENHUk9VUF9USEFXRUQ7CisJcmV0dXJuICZmcmVlemVyLT5jc3M7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWV6ZXJfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCQkgICAgc3RydWN0IGNncm91cCAqY2dyb3VwKQoreworCWtmcmVlKGNncm91cF9mcmVlemVyKGNncm91cCkpOworfQorCisvKiBUYXNrIGlzIGZyb3plbiBvciB3aWxsIGZyZWV6ZSBpbW1lZGlhdGVseSB3aGVuIG5leHQgaXQgZ2V0cyB3b2tlbiAqLworc3RhdGljIGJvb2wgaXNfdGFza19mcm96ZW5fZW5vdWdoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlyZXR1cm4gZnJvemVuKHRhc2spIHx8CisJCSh0YXNrX2lzX3N0b3BwZWRfb3JfdHJhY2VkKHRhc2spICYmIGZyZWV6aW5nKHRhc2spKTsKK30KKworLyoKKyAqIFRoZSBjYWxsIHRvIGNncm91cF9sb2NrKCkgaW4gdGhlIGZyZWV6ZXIuc3RhdGUgd3JpdGUgbWV0aG9kIHByZXZlbnRzCisgKiBhIHdyaXRlIHRvIHRoYXQgZmlsZSByYWNpbmcgYWdhaW5zdCBhbiBhdHRhY2gsIGFuZCBoZW5jZSB0aGUKKyAqIGNhbl9hdHRhY2goKSByZXN1bHQgd2lsbCByZW1haW4gdmFsaWQgdW50aWwgdGhlIGF0dGFjaCBjb21wbGV0ZXMuCisgKi8KK3N0YXRpYyBpbnQgZnJlZXplcl9jYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKKwkJCSAgICAgIHN0cnVjdCBjZ3JvdXAgKm5ld19jZ3JvdXAsCisJCQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXI7CisJaW50IHJldHZhbDsKKworCS8qIEFueXRoaW5nIGZyb3plbiBjYW4ndCBtb3ZlIG9yIGJlIG1vdmVkIHRvL2Zyb20gKi8KKworCWlmIChpc190YXNrX2Zyb3plbl9lbm91Z2godGFzaykpCisJCXJldHVybiAtRUJVU1k7CisKKwlmcmVlemVyID0gY2dyb3VwX2ZyZWV6ZXIobmV3X2Nncm91cCk7CisJaWYgKGZyZWV6ZXItPnN0YXRlID09IENHUk9VUF9GUk9aRU4pCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR2YWwgPSAwOworCXRhc2tfbG9jayh0YXNrKTsKKwlmcmVlemVyID0gdGFza19mcmVlemVyKHRhc2spOworCWlmIChmcmVlemVyLT5zdGF0ZSA9PSBDR1JPVVBfRlJPWkVOKQorCQlyZXR2YWwgPSAtRUJVU1k7CisJdGFza191bmxvY2sodGFzayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgZnJlZXplcl9mb3JrKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCBmcmVlemVyICpmcmVlemVyOworCisJdGFza19sb2NrKHRhc2spOworCWZyZWV6ZXIgPSB0YXNrX2ZyZWV6ZXIodGFzayk7CisJdGFza191bmxvY2sodGFzayk7CisKKwlCVUdfT04oZnJlZXplci0+c3RhdGUgPT0gQ0dST1VQX0ZST1pFTik7CisJc3Bpbl9sb2NrX2lycSgmZnJlZXplci0+bG9jayk7CisJLyogTG9ja2luZyBhdm9pZHMgcmFjZSB3aXRoIEZSRUVaSU5HIC0+IFRIQVdFRCB0cmFuc2l0aW9ucy4gKi8KKwlpZiAoZnJlZXplci0+c3RhdGUgPT0gQ0dST1VQX0ZSRUVaSU5HKQorCQlmcmVlemVfdGFzayh0YXNrLCB0cnVlKTsKKwlzcGluX3VubG9ja19pcnEoJmZyZWV6ZXItPmxvY2spOworfQorCisvKgorICogY2FsbGVyIG11c3QgaG9sZCBmcmVlemVyLT5sb2NrCisgKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9mcmVlemVyX3N0YXRlKHN0cnVjdCBjZ3JvdXAgKmNncm91cCwKKwkJCQkgc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXIpCit7CisJc3RydWN0IGNncm91cF9pdGVyIGl0OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwl1bnNpZ25lZCBpbnQgbmZyb3plbiA9IDAsIG50b3RhbCA9IDA7CisKKwljZ3JvdXBfaXRlcl9zdGFydChjZ3JvdXAsICZpdCk7CisJd2hpbGUgKCh0YXNrID0gY2dyb3VwX2l0ZXJfbmV4dChjZ3JvdXAsICZpdCkpKSB7CisJCW50b3RhbCsrOworCQlpZiAoaXNfdGFza19mcm96ZW5fZW5vdWdoKHRhc2spKQorCQkJbmZyb3plbisrOworCX0KKworCS8qCisJICogVHJhbnNpdGlvbiB0byBGUk9aRU4gd2hlbiBubyBuZXcgdGFza3MgY2FuIGJlIGFkZGVkIGVuc3VyZXMKKwkgKiB0aGF0IHdlIG5ldmVyIGV4aXN0IGluIHRoZSBGUk9aRU4gc3RhdGUgd2hpbGUgdGhlcmUgYXJlIHVuZnJvemVuCisJICogdGFza3MuCisJICovCisJaWYgKG5mcm96ZW4gPT0gbnRvdGFsKQorCQlmcmVlemVyLT5zdGF0ZSA9IENHUk9VUF9GUk9aRU47CisJZWxzZSBpZiAobmZyb3plbiA+IDApCisJCWZyZWV6ZXItPnN0YXRlID0gQ0dST1VQX0ZSRUVaSU5HOworCWVsc2UKKwkJZnJlZXplci0+c3RhdGUgPSBDR1JPVVBfVEhBV0VEOworCWNncm91cF9pdGVyX2VuZChjZ3JvdXAsICZpdCk7Cit9CisKK3N0YXRpYyBpbnQgZnJlZXplcl9yZWFkKHN0cnVjdCBjZ3JvdXAgKmNncm91cCwgc3RydWN0IGNmdHlwZSAqY2Z0LAorCQkJc3RydWN0IHNlcV9maWxlICptKQoreworCXN0cnVjdCBmcmVlemVyICpmcmVlemVyOworCWVudW0gZnJlZXplcl9zdGF0ZSBzdGF0ZTsKKworCWlmICghY2dyb3VwX2xvY2tfbGl2ZV9ncm91cChjZ3JvdXApKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZyZWV6ZXIgPSBjZ3JvdXBfZnJlZXplcihjZ3JvdXApOworCXNwaW5fbG9ja19pcnEoJmZyZWV6ZXItPmxvY2spOworCXN0YXRlID0gZnJlZXplci0+c3RhdGU7CisJaWYgKHN0YXRlID09IENHUk9VUF9GUkVFWklORykgeworCQkvKiBXZSBjaGFuZ2UgZnJvbSBGUkVFWklORyB0byBGUk9aRU4gbGF6aWx5IGlmIHRoZSBjZ3JvdXAgd2FzCisJCSAqIG9ubHkgcGFydGlhbGx5IGZyb3plbiB3aGVuIHdlIGV4aXR0ZWQgd3JpdGUuICovCisJCXVwZGF0ZV9mcmVlemVyX3N0YXRlKGNncm91cCwgZnJlZXplcik7CisJCXN0YXRlID0gZnJlZXplci0+c3RhdGU7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmZnJlZXplci0+bG9jayk7CisJY2dyb3VwX3VubG9jaygpOworCisJc2VxX3B1dHMobSwgZnJlZXplcl9zdGF0ZV9zdHJzW3N0YXRlXSk7CisJc2VxX3B1dGMobSwgJ1xuJyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X3RvX2ZyZWV6ZV9jZ3JvdXAoc3RydWN0IGNncm91cCAqY2dyb3VwLCBzdHJ1Y3QgZnJlZXplciAqZnJlZXplcikKK3sKKwlzdHJ1Y3QgY2dyb3VwX2l0ZXIgaXQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXVuc2lnbmVkIGludCBudW1fY2FudF9mcmVlemVfbm93ID0gMDsKKworCWZyZWV6ZXItPnN0YXRlID0gQ0dST1VQX0ZSRUVaSU5HOworCWNncm91cF9pdGVyX3N0YXJ0KGNncm91cCwgJml0KTsKKwl3aGlsZSAoKHRhc2sgPSBjZ3JvdXBfaXRlcl9uZXh0KGNncm91cCwgJml0KSkpIHsKKwkJaWYgKCFmcmVlemVfdGFzayh0YXNrLCB0cnVlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNfdGFza19mcm96ZW5fZW5vdWdoKHRhc2spKQorCQkJY29udGludWU7CisJCWlmICghZnJlZXppbmcodGFzaykgJiYgIWZyZWV6ZXJfc2hvdWxkX3NraXAodGFzaykpCisJCQludW1fY2FudF9mcmVlemVfbm93Kys7CisJfQorCWNncm91cF9pdGVyX2VuZChjZ3JvdXAsICZpdCk7CisKKwlyZXR1cm4gbnVtX2NhbnRfZnJlZXplX25vdyA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdW5mcmVlemVfY2dyb3VwKHN0cnVjdCBjZ3JvdXAgKmNncm91cCwgc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXIpCit7CisJc3RydWN0IGNncm91cF9pdGVyIGl0OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKworCWNncm91cF9pdGVyX3N0YXJ0KGNncm91cCwgJml0KTsKKwl3aGlsZSAoKHRhc2sgPSBjZ3JvdXBfaXRlcl9uZXh0KGNncm91cCwgJml0KSkpIHsKKwkJaW50IGRvX3dha2U7CisKKwkJdGFza19sb2NrKHRhc2spOworCQlkb193YWtlID0gX190aGF3X3Byb2Nlc3ModGFzayk7CisJCXRhc2tfdW5sb2NrKHRhc2spOworCQlpZiAoZG9fd2FrZSkKKwkJCXdha2VfdXBfcHJvY2Vzcyh0YXNrKTsKKwl9CisJY2dyb3VwX2l0ZXJfZW5kKGNncm91cCwgJml0KTsKKwlmcmVlemVyLT5zdGF0ZSA9IENHUk9VUF9USEFXRUQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmcmVlemVyX2NoYW5nZV9zdGF0ZShzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsCisJCQkJZW51bSBmcmVlemVyX3N0YXRlIGdvYWxfc3RhdGUpCit7CisJc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXI7CisJaW50IHJldHZhbCA9IDA7CisKKwlmcmVlemVyID0gY2dyb3VwX2ZyZWV6ZXIoY2dyb3VwKTsKKwlzcGluX2xvY2tfaXJxKCZmcmVlemVyLT5sb2NrKTsKKwl1cGRhdGVfZnJlZXplcl9zdGF0ZShjZ3JvdXAsIGZyZWV6ZXIpOworCWlmIChnb2FsX3N0YXRlID09IGZyZWV6ZXItPnN0YXRlKQorCQlnb3RvIG91dDsKKwlzd2l0Y2ggKGZyZWV6ZXItPnN0YXRlKSB7CisJY2FzZSBDR1JPVVBfVEhBV0VEOgorCQlyZXR2YWwgPSB0cnlfdG9fZnJlZXplX2Nncm91cChjZ3JvdXAsIGZyZWV6ZXIpOworCQlicmVhazsKKwljYXNlIENHUk9VUF9GUkVFWklORzoKKwkJaWYgKGdvYWxfc3RhdGUgPT0gQ0dST1VQX0ZST1pFTikgeworCQkJLyogVXNlcnNwYWNlIGlzIHJldHJ5aW5nIGFmdGVyCisJCQkgKiAiL2Jpbi9lY2hvIEZST1pFTiA+IGZyZWV6ZXIuc3RhdGUiIHJldHVybmVkIC1FQlVTWSAqLworCQkJcmV0dmFsID0gdHJ5X3RvX2ZyZWV6ZV9jZ3JvdXAoY2dyb3VwLCBmcmVlemVyKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIHN0YXRlID09IEZSRUVaSU5HIGFuZCBnb2FsX3N0YXRlID09IFRIQVdFRCwgc28gdW5mcmVlemUgKi8KKwljYXNlIENHUk9VUF9GUk9aRU46CisJCXJldHZhbCA9IHVuZnJlZXplX2Nncm91cChjZ3JvdXAsIGZyZWV6ZXIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxKCZmcmVlemVyLT5sb2NrKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgZnJlZXplcl93cml0ZShzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsCisJCQkgc3RydWN0IGNmdHlwZSAqY2Z0LAorCQkJIGNvbnN0IGNoYXIgKmJ1ZmZlcikKK3sKKwlpbnQgcmV0dmFsOworCWVudW0gZnJlZXplcl9zdGF0ZSBnb2FsX3N0YXRlOworCisJaWYgKHN0cmNtcChidWZmZXIsIGZyZWV6ZXJfc3RhdGVfc3Ryc1tDR1JPVVBfVEhBV0VEXSkgPT0gMCkKKwkJZ29hbF9zdGF0ZSA9IENHUk9VUF9USEFXRUQ7CisJZWxzZSBpZiAoc3RyY21wKGJ1ZmZlciwgZnJlZXplcl9zdGF0ZV9zdHJzW0NHUk9VUF9GUk9aRU5dKSA9PSAwKQorCQlnb2FsX3N0YXRlID0gQ0dST1VQX0ZST1pFTjsKKwllbHNlCisJCXJldHVybiAtRUlPOworCisJaWYgKCFjZ3JvdXBfbG9ja19saXZlX2dyb3VwKGNncm91cCkpCisJCXJldHVybiAtRU5PREVWOworCXJldHZhbCA9IGZyZWV6ZXJfY2hhbmdlX3N0YXRlKGNncm91cCwgZ29hbF9zdGF0ZSk7CisJY2dyb3VwX3VubG9jaygpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGZpbGVzW10gPSB7CisJeworCQkubmFtZSA9ICJzdGF0ZSIsCisJCS5yZWFkX3NlcV9zdHJpbmcgPSBmcmVlemVyX3JlYWQsCisJCS53cml0ZV9zdHJpbmcgPSBmcmVlemVyX3dyaXRlLAorCX0sCit9OworCitzdGF0aWMgaW50IGZyZWV6ZXJfcG9wdWxhdGUoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JvdXApCit7CisJcmV0dXJuIGNncm91cF9hZGRfZmlsZXMoY2dyb3VwLCBzcywgZmlsZXMsIEFSUkFZX1NJWkUoZmlsZXMpKTsKK30KKworc3RydWN0IGNncm91cF9zdWJzeXMgZnJlZXplcl9zdWJzeXMgPSB7CisJLm5hbWUJCT0gImZyZWV6ZXIiLAorCS5jcmVhdGUJCT0gZnJlZXplcl9jcmVhdGUsCisJLmRlc3Ryb3kJPSBmcmVlemVyX2Rlc3Ryb3ksCisJLnBvcHVsYXRlCT0gZnJlZXplcl9wb3B1bGF0ZSwKKwkuc3Vic3lzX2lkCT0gZnJlZXplcl9zdWJzeXNfaWQsCisJLmNhbl9hdHRhY2gJPSBmcmVlemVyX2Nhbl9hdHRhY2gsCisJLmF0dGFjaAkJPSBOVUxMLAorCS5mb3JrCQk9IGZyZWV6ZXJfZm9yaywKKwkuZXhpdAkJPSBOVUxMLAorfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jb21wYXQuYyBiL2tlcm5lbC9jb21wYXQuYwppbmRleCAzMmMyNTRhLi44ZWFmZTNlIDEwMDY0NAotLS0gYS9rZXJuZWwvY29tcGF0LmMKKysrIGIva2VybmVsL2NvbXBhdC5jCkBAIC0yMyw5ICsyMyw2OCBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbWlncmF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4LXRpbWVycy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVzLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCisvKgorICogTm90ZSB0aGF0IHRoZSBuYXRpdmUgc2lkZSBpcyBhbHJlYWR5IGNvbnZlcnRlZCB0byBhIHRpbWVzcGVjLCBiZWNhdXNlCisgKiB0aGF0J3Mgd2hhdCB3ZSB3YW50IGFueXdheS4KKyAqLworc3RhdGljIGludCBjb21wYXRfZ2V0X3RpbWV2YWwoc3RydWN0IHRpbWVzcGVjICpvLAorCQlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICppKQoreworCWxvbmcgdXNlYzsKKworCWlmIChnZXRfdXNlcihvLT50dl9zZWMsICZpLT50dl9zZWMpIHx8CisJICAgIGdldF91c2VyKHVzZWMsICZpLT50dl91c2VjKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJby0+dHZfbnNlYyA9IHVzZWMgKiAxMDAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9wdXRfdGltZXZhbChzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICpvLAorCQlzdHJ1Y3QgdGltZXZhbCAqaSkKK3sKKwlyZXR1cm4gKHB1dF91c2VyKGktPnR2X3NlYywgJm8tPnR2X3NlYykgfHwKKwkJcHV0X3VzZXIoaS0+dHZfdXNlYywgJm8tPnR2X3VzZWMpKSA/IC1FRkFVTFQgOiAwOworfQorCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19nZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsCisJCXN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQoreworCWlmICh0dikgeworCQlzdHJ1Y3QgdGltZXZhbCBrdHY7CisJCWRvX2dldHRpbWVvZmRheSgma3R2KTsKKwkJaWYgKGNvbXBhdF9wdXRfdGltZXZhbCh0diwgJmt0dikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKHR6KSB7CisJCWlmIChjb3B5X3RvX3VzZXIodHosICZzeXNfdHosIHNpemVvZihzeXNfdHopKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19zZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsCisJCXN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQoreworCXN0cnVjdCB0aW1lc3BlYyBrdHM7CisJc3RydWN0IHRpbWV6b25lIGt0ejsKKworCWlmICh0dikgeworCQlpZiAoY29tcGF0X2dldF90aW1ldmFsKCZrdHMsIHR2KSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAodHopIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZrdHosIHR6LCBzaXplb2Yoa3R6KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gZG9fc3lzX3NldHRpbWVvZmRheSh0diA/ICZrdHMgOiBOVUxMLCB0eiA/ICZrdHogOiBOVUxMKTsKK30KKwogaW50IGdldF9jb21wYXRfdGltZXNwZWMoc3RydWN0IHRpbWVzcGVjICp0cywgY29uc3Qgc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKmN0cykKIHsKIAlyZXR1cm4gKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGN0cywgc2l6ZW9mKCpjdHMpKSB8fApAQCAtMTUwLDQ5ICsyMDksMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbXBhdF9jbG9ja190IGNsb2NrX3RfdG9fY29tcGF0X2Nsb2NrX3QoY2xvY2tfdCB4KQoreworCXJldHVybiBjb21wYXRfamlmZmllc190b19jbG9ja190KGNsb2NrX3RfdG9famlmZmllcyh4KSk7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3RpbWVzKHN0cnVjdCBjb21wYXRfdG1zIF9fdXNlciAqdGJ1ZikKIHsKLQkvKgotCSAqCUluIHRoZSBTTVAgd29ybGQgd2UgbWlnaHQganVzdCBiZSB1bmx1Y2t5IGFuZCBoYXZlIG9uZSBvZgotCSAqCXRoZSB0aW1lcyBpbmNyZW1lbnQgYXMgd2UgdXNlIGl0LiBTaW5jZSB0aGUgdmFsdWUgaXMgYW4KLQkgKglhdG9taWNhbGx5IHNhZmUgdHlwZSB0aGlzIGlzIGp1c3QgZmluZS4gQ29uY2VwdHVhbGx5IGl0cwotCSAqCWFzIGlmIHRoZSBzeXNjYWxsIHRvb2sgYW4gaW5zdGFudCBsb25nZXIgdG8gb2NjdXIuCi0JICovCiAJaWYgKHRidWYpIHsKKwkJc3RydWN0IHRtcyB0bXM7CiAJCXN0cnVjdCBjb21wYXRfdG1zIHRtcDsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7Ci0JCWNwdXRpbWVfdCB1dGltZSwgc3RpbWUsIGN1dGltZSwgY3N0aW1lOwogCi0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCXV0aW1lID0gdHNrLT5zaWduYWwtPnV0aW1lOwotCQlzdGltZSA9IHRzay0+c2lnbmFsLT5zdGltZTsKLQkJdCA9IHRzazsKLQkJZG8gewotCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgdC0+dXRpbWUpOwotCQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgdC0+c3RpbWUpOwotCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQl9IHdoaWxlICh0ICE9IHRzayk7Ci0KLQkJLyoKLQkJICogV2hpbGUgd2UgaGF2ZSB0YXNrbGlzdF9sb2NrIHJlYWQtbG9ja2VkLCBubyBkeWluZyB0aHJlYWQKLQkJICogY2FuIGJlIHVwZGF0aW5nIGN1cnJlbnQtPnNpZ25hbC0+W3VzXXRpbWUuICBJbnN0ZWFkLAotCQkgKiB3ZSBnb3QgdGhlaXIgY291bnRzIGluY2x1ZGVkIGluIHRoZSBsaXZlIHRocmVhZCBsb29wLgotCQkgKiBIb3dldmVyLCBhbm90aGVyIHRocmVhZCBjYW4gY29tZSBpbiByaWdodCBub3cgYW5kCi0JCSAqIGRvIGEgd2FpdCBjYWxsIHRoYXQgdXBkYXRlcyBjdXJyZW50LT5zaWduYWwtPmNbdXNddGltZS4KLQkJICogVG8gbWFrZSBzdXJlIHdlIGFsd2F5cyBzZWUgdGhhdCBwYWlyIHVwZGF0ZWQgYXRvbWljYWxseSwKLQkJICogd2UgdGFrZSB0aGUgc2lnbG9jayBhcm91bmQgZmV0Y2hpbmcgdGhlbS4KLQkJICovCi0JCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCWN1dGltZSA9IHRzay0+c2lnbmFsLT5jdXRpbWU7Ci0JCWNzdGltZSA9IHRzay0+c2lnbmFsLT5jc3RpbWU7Ci0JCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCi0JCXRtcC50bXNfdXRpbWUgPSBjb21wYXRfamlmZmllc190b19jbG9ja190KGNwdXRpbWVfdG9famlmZmllcyh1dGltZSkpOwotCQl0bXAudG1zX3N0aW1lID0gY29tcGF0X2ppZmZpZXNfdG9fY2xvY2tfdChjcHV0aW1lX3RvX2ppZmZpZXMoc3RpbWUpKTsKLQkJdG1wLnRtc19jdXRpbWUgPSBjb21wYXRfamlmZmllc190b19jbG9ja190KGNwdXRpbWVfdG9famlmZmllcyhjdXRpbWUpKTsKLQkJdG1wLnRtc19jc3RpbWUgPSBjb21wYXRfamlmZmllc190b19jbG9ja190KGNwdXRpbWVfdG9famlmZmllcyhjc3RpbWUpKTsKKwkJZG9fc3lzX3RpbWVzKCZ0bXMpOworCQkvKiBDb252ZXJ0IG91ciBzdHJ1Y3QgdG1zIHRvIHRoZSBjb21wYXQgdmVyc2lvbi4gKi8KKwkJdG1wLnRtc191dGltZSA9IGNsb2NrX3RfdG9fY29tcGF0X2Nsb2NrX3QodG1zLnRtc191dGltZSk7CisJCXRtcC50bXNfc3RpbWUgPSBjbG9ja190X3RvX2NvbXBhdF9jbG9ja190KHRtcy50bXNfc3RpbWUpOworCQl0bXAudG1zX2N1dGltZSA9IGNsb2NrX3RfdG9fY29tcGF0X2Nsb2NrX3QodG1zLnRtc19jdXRpbWUpOworCQl0bXAudG1zX2NzdGltZSA9IGNsb2NrX3RfdG9fY29tcGF0X2Nsb2NrX3QodG1zLnRtc19jc3RpbWUpOwogCQlpZiAoY29weV90b191c2VyKHRidWYsICZ0bXAsIHNpemVvZih0bXApKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jb25maWdzLmMgYi9rZXJuZWwvY29uZmlncy5jCmluZGV4IDRjMzQ1MjEuLmFiYWVlNjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jb25maWdzLmMKKysrIGIva2VybmVsL2NvbmZpZ3MuYwpAQCAtNTQsOSArNTQsNiBAQAogCiAjaWZkZWYgQ09ORklHX0lLQ09ORklHX1BST0MKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogZ2xvYmFscyBhbmQgdXNlZnVsIGNvbnN0YW50cyAgICAgICAgICAgICAgICAgICAqLwotCiBzdGF0aWMgc3NpemVfdAogaWtjb25maWdfcmVhZF9jdXJyZW50KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKiBvZmZzZXQpCkBAIC03MSw5ICs2OCw2IEBACiAJLnJlYWQgPSBpa2NvbmZpZ19yZWFkX2N1cnJlbnQsCiB9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogaWtjb25maWdfaW5pdDogc3RhcnQgdXAgZXZlcnl0aGluZyB3ZSBuZWVkIHRvICovCi0KIHN0YXRpYyBpbnQgX19pbml0IGlrY29uZmlnX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwpAQCAtODksOSArODMsNiBAQAogCXJldHVybiAwOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogaWtjb25maWdfY2xlYW51cDogY2xlYW4gdXAgb3VyIG1lc3MgICAgICAgICAgICovCi0KIHN0YXRpYyB2b2lkIF9fZXhpdCBpa2NvbmZpZ19jbGVhbnVwKHZvaWQpCiB7CiAJcmVtb3ZlX3Byb2NfZW50cnkoImNvbmZpZy5neiIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2NwdXNldC5jIGIva2VybmVsL2NwdXNldC5jCmluZGV4IGVhYjdiZDYuLjNlMDA1MjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHVzZXQuYworKysgYi9rZXJuZWwvY3B1c2V0LmMKQEAgLTExNzIsNyArMTE3Miw3IEBACiB7CiAJc3RydWN0IGNwdXNldCB0cmlhbGNzOwogCWludCBlcnI7Ci0JaW50IGNwdXNfbm9uZW1wdHksIGJhbGFuY2VfZmxhZ19jaGFuZ2VkOworCWludCBiYWxhbmNlX2ZsYWdfY2hhbmdlZDsKIAogCXRyaWFsY3MgPSAqY3M7CiAJaWYgKHR1cm5pbmdfb24pCkBAIC0xMTg0LDcgKzExODQsNiBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY3B1c19ub25lbXB0eSA9ICFjcHVzX2VtcHR5KHRyaWFsY3MuY3B1c19hbGxvd2VkKTsKIAliYWxhbmNlX2ZsYWdfY2hhbmdlZCA9IChpc19zY2hlZF9sb2FkX2JhbGFuY2UoY3MpICE9CiAJCSAJCQlpc19zY2hlZF9sb2FkX2JhbGFuY2UoJnRyaWFsY3MpKTsKIApAQCAtMTE5Miw3ICsxMTkxLDcgQEAKIAljcy0+ZmxhZ3MgPSB0cmlhbGNzLmZsYWdzOwogCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCi0JaWYgKGNwdXNfbm9uZW1wdHkgJiYgYmFsYW5jZV9mbGFnX2NoYW5nZWQpCisJaWYgKCFjcHVzX2VtcHR5KHRyaWFsY3MuY3B1c19hbGxvd2VkKSAmJiBiYWxhbmNlX2ZsYWdfY2hhbmdlZCkKIAkJYXN5bmNfcmVidWlsZF9zY2hlZF9kb21haW5zKCk7CiAKIAlyZXR1cm4gMDsKQEAgLTI0MzcsMTkgKzI0MzYsMTUgQEAKIHZvaWQgY3B1c2V0X3Rhc2tfc3RhdHVzX2FsbG93ZWQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJc2VxX3ByaW50ZihtLCAiQ3B1c19hbGxvd2VkOlx0Iik7Ci0JbS0+Y291bnQgKz0gY3B1bWFza19zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkJdGFzay0+Y3B1c19hbGxvd2VkKTsKKwlzZXFfY3B1bWFzayhtLCAmdGFzay0+Y3B1c19hbGxvd2VkKTsKIAlzZXFfcHJpbnRmKG0sICJcbiIpOwogCXNlcV9wcmludGYobSwgIkNwdXNfYWxsb3dlZF9saXN0Olx0Iik7Ci0JbS0+Y291bnQgKz0gY3B1bGlzdF9zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkJdGFzay0+Y3B1c19hbGxvd2VkKTsKKwlzZXFfY3B1bWFza19saXN0KG0sICZ0YXNrLT5jcHVzX2FsbG93ZWQpOwogCXNlcV9wcmludGYobSwgIlxuIik7CiAJc2VxX3ByaW50ZihtLCAiTWVtc19hbGxvd2VkOlx0Iik7Ci0JbS0+Y291bnQgKz0gbm9kZW1hc2tfc2NucHJpbnRmKG0tPmJ1ZiArIG0tPmNvdW50LCBtLT5zaXplIC0gbS0+Y291bnQsCi0JCQkJCXRhc2stPm1lbXNfYWxsb3dlZCk7CisJc2VxX25vZGVtYXNrKG0sICZ0YXNrLT5tZW1zX2FsbG93ZWQpOwogCXNlcV9wcmludGYobSwgIlxuIik7CiAJc2VxX3ByaW50ZihtLCAiTWVtc19hbGxvd2VkX2xpc3Q6XHQiKTsKLQltLT5jb3VudCArPSBub2RlbGlzdF9zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkJdGFzay0+bWVtc19hbGxvd2VkKTsKKwlzZXFfbm9kZW1hc2tfbGlzdChtLCAmdGFzay0+bWVtc19hbGxvd2VkKTsKIAlzZXFfcHJpbnRmKG0sICJcbiIpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2RtYS5jIGIva2VybmVsL2RtYS5jCmluZGV4IGQyYzYwYTguLmY5MDMxODkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kbWEuYworKysgYi9rZXJuZWwvZG1hLmMKQEAgLTEsNCArMSw0IEBACi0vKiAkSWQ6IGRtYS5jLHYgMS43IDE5OTQvMTIvMjggMDM6MzU6MzMgcm9vdCBFeHAgcm9vdCAkCisvKgogICogbGludXgva2VybmVsL2RtYS5jOiBBIERNQSBjaGFubmVsIGFsbG9jYXRvci4gSW5zcGlyZWQgYnkgbGludXgva2VybmVsL2lycS5jLgogICoKICAqIFdyaXR0ZW4gYnkgSGVubnVzIEJlcmdtYW4sIDE5OTIuCmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCA3YjcxZjg3Li44MDEzN2E1IDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTExMyw4ICsxMTMsNiBAQAogCQkgKiBXZSB3b24ndCBldmVyIGdldCBoZXJlIGZvciB0aGUgZ3JvdXAgbGVhZGVyLCBzaW5jZSBpdAogCQkgKiB3aWxsIGhhdmUgYmVlbiB0aGUgbGFzdCByZWZlcmVuY2Ugb24gdGhlIHNpZ25hbF9zdHJ1Y3QuCiAJCSAqLwotCQlzaWctPnV0aW1lID0gY3B1dGltZV9hZGQoc2lnLT51dGltZSwgdGFza191dGltZSh0c2spKTsKLQkJc2lnLT5zdGltZSA9IGNwdXRpbWVfYWRkKHNpZy0+c3RpbWUsIHRhc2tfc3RpbWUodHNrKSk7CiAJCXNpZy0+Z3RpbWUgPSBjcHV0aW1lX2FkZChzaWctPmd0aW1lLCB0YXNrX2d0aW1lKHRzaykpOwogCQlzaWctPm1pbl9mbHQgKz0gdHNrLT5taW5fZmx0OwogCQlzaWctPm1hal9mbHQgKz0gdHNrLT5tYWpfZmx0OwpAQCAtMTIzLDcgKzEyMSw2IEBACiAJCXNpZy0+aW5ibG9jayArPSB0YXNrX2lvX2dldF9pbmJsb2NrKHRzayk7CiAJCXNpZy0+b3VibG9jayArPSB0YXNrX2lvX2dldF9vdWJsb2NrKHRzayk7CiAJCXRhc2tfaW9fYWNjb3VudGluZ19hZGQoJnNpZy0+aW9hYywgJnRzay0+aW9hYyk7Ci0JCXNpZy0+c3VtX3NjaGVkX3J1bnRpbWUgKz0gdHNrLT5zZS5zdW1fZXhlY19ydW50aW1lOwogCQlzaWcgPSBOVUxMOyAvKiBNYXJrZXIgZm9yIGJlbG93LiAqLwogCX0KIApAQCAtNjQ0LDI0ICs2NDEsMjMgQEAKIGFzc2lnbl9uZXdfb3duZXI6CiAJQlVHX09OKGMgPT0gcCk7CiAJZ2V0X3Rhc2tfc3RydWN0KGMpOworCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwogCS8qCiAJICogVGhlIHRhc2tfbG9jayBwcm90ZWN0cyBjLT5tbSBmcm9tIGNoYW5naW5nLgogCSAqIFdlIGFsd2F5cyB3YW50IG1tLT5vd25lci0+bW0gPT0gbW0KIAkgKi8KIAl0YXNrX2xvY2soYyk7Ci0JLyoKLQkgKiBEZWxheSByZWFkX3VubG9jaygpIHRpbGwgd2UgaGF2ZSB0aGUgdGFza19sb2NrKCkKLQkgKiB0byBlbnN1cmUgdGhhdCBjIGRvZXMgbm90IHNsaXAgYXdheSB1bmRlcm5lYXRoIHVzCi0JICovCi0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCWlmIChjLT5tbSAhPSBtbSkgewogCQl0YXNrX3VubG9jayhjKTsKKwkJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJCXB1dF90YXNrX3N0cnVjdChjKTsKIAkJZ290byByZXRyeTsKIAl9CiAJY2dyb3VwX21tX293bmVyX2NhbGxiYWNrcyhtbS0+b3duZXIsIGMpOwogCW1tLT5vd25lciA9IGM7CiAJdGFza191bmxvY2soYyk7CisJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJcHV0X3Rhc2tfc3RydWN0KGMpOwogfQogI2VuZGlmIC8qIENPTkZJR19NTV9PV05FUiAqLwpAQCAtMTMwOCw2ICsxMzA0LDcgQEAKIAlpZiAobGlrZWx5KCF0cmFjZWQpKSB7CiAJCXN0cnVjdCBzaWduYWxfc3RydWN0ICpwc2lnOwogCQlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOworCQlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CiAKIAkJLyoKIAkJICogVGhlIHJlc291cmNlIGNvdW50ZXJzIGZvciB0aGUgZ3JvdXAgbGVhZGVyIGFyZSBpbiBpdHMKQEAgLTEzMjMsMjAgKzEzMjAsMjMgQEAKIAkJICogbmVlZCB0byBwcm90ZWN0IHRoZSBhY2Nlc3MgdG8gcC0+cGFyZW50LT5zaWduYWwgZmllbGRzLAogCQkgKiBhcyBvdGhlciB0aHJlYWRzIGluIHRoZSBwYXJlbnQgZ3JvdXAgY2FuIGJlIHJpZ2h0CiAJCSAqIGhlcmUgcmVhcGluZyBvdGhlciBjaGlsZHJlbiBhdCB0aGUgc2FtZSB0aW1lLgorCQkgKgorCQkgKiBXZSB1c2UgdGhyZWFkX2dyb3VwX2NwdXRpbWUoKSB0byBnZXQgdGltZXMgZm9yIHRoZSB0aHJlYWQKKwkJICogZ3JvdXAsIHdoaWNoIGNvbnNvbGlkYXRlcyB0aW1lcyBmb3IgYWxsIHRocmVhZHMgaW4gdGhlCisJCSAqIGdyb3VwIGluY2x1ZGluZyB0aGUgZ3JvdXAgbGVhZGVyLgogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycSgmcC0+cGFyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJcHNpZyA9IHAtPnBhcmVudC0+c2lnbmFsOwogCQlzaWcgPSBwLT5zaWduYWw7CisJCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKIAkJcHNpZy0+Y3V0aW1lID0KIAkJCWNwdXRpbWVfYWRkKHBzaWctPmN1dGltZSwKLQkJCWNwdXRpbWVfYWRkKHAtPnV0aW1lLAotCQkJY3B1dGltZV9hZGQoc2lnLT51dGltZSwKLQkJCQkgICAgc2lnLT5jdXRpbWUpKSk7CisJCQljcHV0aW1lX2FkZChjcHV0aW1lLnV0aW1lLAorCQkJCSAgICBzaWctPmN1dGltZSkpOwogCQlwc2lnLT5jc3RpbWUgPQogCQkJY3B1dGltZV9hZGQocHNpZy0+Y3N0aW1lLAotCQkJY3B1dGltZV9hZGQocC0+c3RpbWUsCi0JCQljcHV0aW1lX2FkZChzaWctPnN0aW1lLAotCQkJCSAgICBzaWctPmNzdGltZSkpKTsKKwkJCWNwdXRpbWVfYWRkKGNwdXRpbWUuc3RpbWUsCisJCQkJICAgIHNpZy0+Y3N0aW1lKSk7CiAJCXBzaWctPmNndGltZSA9CiAJCQljcHV0aW1lX2FkZChwc2lnLT5jZ3RpbWUsCiAJCQljcHV0aW1lX2FkZChwLT5ndGltZSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IGNmYWZmOTIuLjRkMDkzNTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtNzYwLDE1ICs3NjAsNDQgQEAKIAkJa21lbV9jYWNoZV9mcmVlKHNpZ2hhbmRfY2FjaGVwLCBzaWdoYW5kKTsKIH0KIAorCisvKgorICogSW5pdGlhbGl6ZSBQT1NJWCB0aW1lciBoYW5kbGluZyBmb3IgYSB0aHJlYWQgZ3JvdXAuCisgKi8KK3N0YXRpYyB2b2lkIHBvc2l4X2NwdV90aW1lcnNfaW5pdF9ncm91cChzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQoreworCS8qIFRocmVhZCBncm91cCBjb3VudGVycy4gKi8KKwl0aHJlYWRfZ3JvdXBfY3B1dGltZV9pbml0KHNpZyk7CisKKwkvKiBFeHBpcmF0aW9uIHRpbWVzIGFuZCBpbmNyZW1lbnRzLiAqLworCXNpZy0+aXRfdmlydF9leHBpcmVzID0gY3B1dGltZV96ZXJvOworCXNpZy0+aXRfdmlydF9pbmNyID0gY3B1dGltZV96ZXJvOworCXNpZy0+aXRfcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOworCXNpZy0+aXRfcHJvZl9pbmNyID0gY3B1dGltZV96ZXJvOworCisJLyogQ2FjaGVkIGV4cGlyYXRpb24gdGltZXMuICovCisJc2lnLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSBjcHV0aW1lX3plcm87CisJc2lnLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSBjcHV0aW1lX3plcm87CisJc2lnLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gMDsKKworCS8qIFRoZSB0aW1lciBsaXN0cy4gKi8KKwlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzBdKTsKKwlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzFdKTsKKwlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzJdKTsKK30KKwogc3RhdGljIGludCBjb3B5X3NpZ25hbCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOwogCWludCByZXQ7CiAKIAlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9USFJFQUQpIHsKLQkJYXRvbWljX2luYygmY3VycmVudC0+c2lnbmFsLT5jb3VudCk7Ci0JCWF0b21pY19pbmMoJmN1cnJlbnQtPnNpZ25hbC0+bGl2ZSk7Ci0JCXJldHVybiAwOworCQlyZXQgPSB0aHJlYWRfZ3JvdXBfY3B1dGltZV9jbG9uZV90aHJlYWQoY3VycmVudCk7CisJCWlmIChsaWtlbHkoIXJldCkpIHsKKwkJCWF0b21pY19pbmMoJmN1cnJlbnQtPnNpZ25hbC0+Y291bnQpOworCQkJYXRvbWljX2luYygmY3VycmVudC0+c2lnbmFsLT5saXZlKTsKKwkJfQorCQlyZXR1cm4gcmV0OwogCX0KIAlzaWcgPSBrbWVtX2NhY2hlX2FsbG9jKHNpZ25hbF9jYWNoZXAsIEdGUF9LRVJORUwpOwogCXRzay0+c2lnbmFsID0gc2lnOwpAQCAtNzk2LDQwICs4MjUsMjUgQEAKIAlzaWctPml0X3JlYWxfaW5jci50djY0ID0gMDsKIAlzaWctPnJlYWxfdGltZXIuZnVuY3Rpb24gPSBpdF9yZWFsX2ZuOwogCi0Jc2lnLT5pdF92aXJ0X2V4cGlyZXMgPSBjcHV0aW1lX3plcm87Ci0Jc2lnLT5pdF92aXJ0X2luY3IgPSBjcHV0aW1lX3plcm87Ci0Jc2lnLT5pdF9wcm9mX2V4cGlyZXMgPSBjcHV0aW1lX3plcm87Ci0Jc2lnLT5pdF9wcm9mX2luY3IgPSBjcHV0aW1lX3plcm87Ci0KIAlzaWctPmxlYWRlciA9IDA7CS8qIHNlc3Npb24gbGVhZGVyc2hpcCBkb2Vzbid0IGluaGVyaXQgKi8KIAlzaWctPnR0eV9vbGRfcGdycCA9IE5VTEw7CiAJc2lnLT50dHkgPSBOVUxMOwogCi0Jc2lnLT51dGltZSA9IHNpZy0+c3RpbWUgPSBzaWctPmN1dGltZSA9IHNpZy0+Y3N0aW1lID0gY3B1dGltZV96ZXJvOworCXNpZy0+Y3V0aW1lID0gc2lnLT5jc3RpbWUgPSBjcHV0aW1lX3plcm87CiAJc2lnLT5ndGltZSA9IGNwdXRpbWVfemVybzsKIAlzaWctPmNndGltZSA9IGNwdXRpbWVfemVybzsKIAlzaWctPm52Y3N3ID0gc2lnLT5uaXZjc3cgPSBzaWctPmNudmNzdyA9IHNpZy0+Y25pdmNzdyA9IDA7CiAJc2lnLT5taW5fZmx0ID0gc2lnLT5tYWpfZmx0ID0gc2lnLT5jbWluX2ZsdCA9IHNpZy0+Y21hal9mbHQgPSAwOwogCXNpZy0+aW5ibG9jayA9IHNpZy0+b3VibG9jayA9IHNpZy0+Y2luYmxvY2sgPSBzaWctPmNvdWJsb2NrID0gMDsKIAl0YXNrX2lvX2FjY291bnRpbmdfaW5pdCgmc2lnLT5pb2FjKTsKLQlzaWctPnN1bV9zY2hlZF9ydW50aW1lID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzBdKTsKLQlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzFdKTsKLQlJTklUX0xJU1RfSEVBRCgmc2lnLT5jcHVfdGltZXJzWzJdKTsKIAl0YXNrc3RhdHNfdGdpZF9pbml0KHNpZyk7CiAKIAl0YXNrX2xvY2soY3VycmVudC0+Z3JvdXBfbGVhZGVyKTsKIAltZW1jcHkoc2lnLT5ybGltLCBjdXJyZW50LT5zaWduYWwtPnJsaW0sIHNpemVvZiBzaWctPnJsaW0pOwogCXRhc2tfdW5sb2NrKGN1cnJlbnQtPmdyb3VwX2xlYWRlcik7CiAKLQlpZiAoc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkpIHsKLQkJLyoKLQkJICogTmV3IHNvbGUgdGhyZWFkIGluIHRoZSBwcm9jZXNzIGdldHMgYW4gZXhwaXJ5IHRpbWUKLQkJICogb2YgdGhlIHdob2xlIENQVSB0aW1lIGxpbWl0LgotCQkgKi8KLQkJdHNrLT5pdF9wcm9mX2V4cGlyZXMgPQotCQkJc2Vjc190b19jcHV0aW1lKHNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1cik7Ci0JfQorCXBvc2l4X2NwdV90aW1lcnNfaW5pdF9ncm91cChzaWcpOworCiAJYWNjdF9pbml0X3BhY2N0KCZzaWctPnBhY2N0KTsKIAogCXR0eV9hdWRpdF9mb3JrKHNpZyk7CkBAIC04MzksNiArODUzLDcgQEAKIAogdm9pZCBfX2NsZWFudXBfc2lnbmFsKHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpCiB7CisJdGhyZWFkX2dyb3VwX2NwdXRpbWVfZnJlZShzaWcpOwogCWV4aXRfdGhyZWFkX2dyb3VwX2tleXMoc2lnKTsKIAl0dHlfa3JlZl9wdXQoc2lnLT50dHkpOwogCWttZW1fY2FjaGVfZnJlZShzaWduYWxfY2FjaGVwLCBzaWcpOwpAQCAtODg5LDYgKzkwNCwxOSBAQAogI2VuZGlmIC8qIENPTkZJR19NTV9PV05FUiAqLwogCiAvKgorICogSW5pdGlhbGl6ZSBQT1NJWCB0aW1lciBoYW5kbGluZyBmb3IgYSBzaW5nbGUgdGFzay4KKyAqLworc3RhdGljIHZvaWQgcG9zaXhfY3B1X3RpbWVyc19pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXRzay0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0gY3B1dGltZV96ZXJvOworCXRzay0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0gY3B1dGltZV96ZXJvOworCXRzay0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJnRzay0+Y3B1X3RpbWVyc1swXSk7CisJSU5JVF9MSVNUX0hFQUQoJnRzay0+Y3B1X3RpbWVyc1sxXSk7CisJSU5JVF9MSVNUX0hFQUQoJnRzay0+Y3B1X3RpbWVyc1syXSk7Cit9CisKKy8qCiAgKiBUaGlzIGNyZWF0ZXMgYSBuZXcgcHJvY2VzcyBhcyBhIGNvcHkgb2YgdGhlIG9sZCBvbmUsCiAgKiBidXQgZG9lcyBub3QgYWN0dWFsbHkgc3RhcnQgaXQgeWV0LgogICoKQEAgLTk5OCwxMiArMTAyNiw3IEBACiAJdGFza19pb19hY2NvdW50aW5nX2luaXQoJnAtPmlvYWMpOwogCWFjY3RfY2xlYXJfaW50ZWdyYWxzKHApOwogCi0JcC0+aXRfdmlydF9leHBpcmVzID0gY3B1dGltZV96ZXJvOwotCXAtPml0X3Byb2ZfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKLQlwLT5pdF9zY2hlZF9leHBpcmVzID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmcC0+Y3B1X3RpbWVyc1swXSk7Ci0JSU5JVF9MSVNUX0hFQUQoJnAtPmNwdV90aW1lcnNbMV0pOwotCUlOSVRfTElTVF9IRUFEKCZwLT5jcHVfdGltZXJzWzJdKTsKKwlwb3NpeF9jcHVfdGltZXJzX2luaXQocCk7CiAKIAlwLT5sb2NrX2RlcHRoID0gLTE7CQkvKiAtMSA9IG5vIGxvY2sgKi8KIAlkb19wb3NpeF9jbG9ja19tb25vdG9uaWNfZ2V0dGltZSgmcC0+c3RhcnRfdGltZSk7CkBAIC0xMjA0LDIxICsxMjI3LDYgQEAKIAlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9USFJFQUQpIHsKIAkJcC0+Z3JvdXBfbGVhZGVyID0gY3VycmVudC0+Z3JvdXBfbGVhZGVyOwogCQlsaXN0X2FkZF90YWlsX3JjdSgmcC0+dGhyZWFkX2dyb3VwLCAmcC0+Z3JvdXBfbGVhZGVyLT50aHJlYWRfZ3JvdXApOwotCi0JCWlmICghY3B1dGltZV9lcShjdXJyZW50LT5zaWduYWwtPml0X3ZpcnRfZXhwaXJlcywKLQkJCQljcHV0aW1lX3plcm8pIHx8Ci0JCSAgICAhY3B1dGltZV9lcShjdXJyZW50LT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlcywKLQkJCQljcHV0aW1lX3plcm8pIHx8Ci0JCSAgICBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSB8fAotCQkgICAgIWxpc3RfZW1wdHkoJmN1cnJlbnQtPnNpZ25hbC0+Y3B1X3RpbWVyc1swXSkgfHwKLQkJICAgICFsaXN0X2VtcHR5KCZjdXJyZW50LT5zaWduYWwtPmNwdV90aW1lcnNbMV0pIHx8Ci0JCSAgICAhbGlzdF9lbXB0eSgmY3VycmVudC0+c2lnbmFsLT5jcHVfdGltZXJzWzJdKSkgewotCQkJLyoKLQkJCSAqIEhhdmUgY2hpbGQgd2FrZSB1cCBvbiBpdHMgZmlyc3QgdGljayB0byBjaGVjawotCQkJICogZm9yIHByb2Nlc3MgQ1BVIHRpbWVycy4KLQkJCSAqLwotCQkJcC0+aXRfcHJvZl9leHBpcmVzID0gamlmZmllc190b19jcHV0aW1lKDEpOwotCQl9CiAJfQogCiAJaWYgKGxpa2VseShwLT5waWQpKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTYyNDhiCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2ZyZWV6ZXIuYwpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIGtlcm5lbC9mcmVlemVyLmMgLSBGdW5jdGlvbiB0byBmcmVlemUgYSBwcm9jZXNzCisgKgorICogT3JpZ2luYWxseSBmcm9tIGtlcm5lbC9wb3dlci9wcm9jZXNzLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorCisvKgorICogZnJlZXppbmcgaXMgY29tcGxldGUsIG1hcmsgY3VycmVudCBwcm9jZXNzIGFzIGZyb3plbgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnJvemVuX3Byb2Nlc3Modm9pZCkKK3sKKwlpZiAoIXVubGlrZWx5KGN1cnJlbnQtPmZsYWdzICYgUEZfTk9GUkVFWkUpKSB7CisJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0ZST1pFTjsKKwkJd21iKCk7CisJfQorCWNsZWFyX2ZyZWV6ZV9mbGFnKGN1cnJlbnQpOworfQorCisvKiBSZWZyaWdlcmF0b3IgaXMgcGxhY2Ugd2hlcmUgZnJvemVuIHByb2Nlc3NlcyBhcmUgc3RvcmVkIDotKS4gKi8KK3ZvaWQgcmVmcmlnZXJhdG9yKHZvaWQpCit7CisJLyogSG1tLCBzaG91bGQgd2UgYmUgYWxsb3dlZCB0byBzdXNwZW5kIHdoZW4gdGhlcmUgYXJlIHJlYWx0aW1lCisJICAgcHJvY2Vzc2VzIGFyb3VuZD8gKi8KKwlsb25nIHNhdmU7CisKKwl0YXNrX2xvY2soY3VycmVudCk7CisJaWYgKGZyZWV6aW5nKGN1cnJlbnQpKSB7CisJCWZyb3plbl9wcm9jZXNzKCk7CisJCXRhc2tfdW5sb2NrKGN1cnJlbnQpOworCX0gZWxzZSB7CisJCXRhc2tfdW5sb2NrKGN1cnJlbnQpOworCQlyZXR1cm47CisJfQorCXNhdmUgPSBjdXJyZW50LT5zdGF0ZTsKKwlwcl9kZWJ1ZygiJXMgZW50ZXJlZCByZWZyaWdlcmF0b3JcbiIsIGN1cnJlbnQtPmNvbW0pOworCisJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJcmVjYWxjX3NpZ3BlbmRpbmcoKTsgLyogV2Ugc2VudCBmYWtlIHNpZ25hbCwgY2xlYW4gaXQgdXAgKi8KKwlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCWlmICghZnJvemVuKGN1cnJlbnQpKQorCQkJYnJlYWs7CisJCXNjaGVkdWxlKCk7CisJfQorCXByX2RlYnVnKCIlcyBsZWZ0IHJlZnJpZ2VyYXRvclxuIiwgY3VycmVudC0+Y29tbSk7CisJX19zZXRfY3VycmVudF9zdGF0ZShzYXZlKTsKK30KK0VYUE9SVF9TWU1CT0wocmVmcmlnZXJhdG9yKTsKKworc3RhdGljIHZvaWQgZmFrZV9zaWduYWxfd2FrZV91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJc2lnbmFsX3dha2VfdXAocCwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqCWZyZWV6ZV90YXNrIC0gc2VuZCBhIGZyZWV6ZSByZXF1ZXN0IHRvIGdpdmVuIHRhc2sKKyAqCUBwOiB0YXNrIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8KKyAqCUBzaWdfb25seTogaWYgc2V0LCB0aGUgcmVxdWVzdCB3aWxsIG9ubHkgYmUgc2VudCBpZiB0aGUgdGFzayBoYXMgdGhlCisgKgkJUEZfRlJFRVpFUl9OT1NJRyBmbGFnIHVuc2V0CisgKglSZXR1cm4gdmFsdWU6ICdmYWxzZScsIGlmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrIGhhcworICoJCVBGX0ZSRUVaRVJfTk9TSUcgc2V0IG9yIHRoZSB0YXNrIGlzIGZyb3plbiwgJ3RydWUnLCBvdGhlcndpc2UKKyAqCisgKglUaGUgZnJlZXplIHJlcXVlc3QgaXMgc2VudCBieSBzZXR0aW5nIHRoZSB0YXNrcydzIFRJRl9GUkVFWkUgZmxhZyBhbmQKKyAqCWVpdGhlciBzZW5kaW5nIGEgZmFrZSBzaWduYWwgdG8gaXQgb3Igd2FraW5nIGl0IHVwLCBkZXBlbmRpbmcgb24gd2hldGhlcgorICoJb3Igbm90IGl0IGhhcyBQRl9GUkVFWkVSX05PU0lHIHNldC4gIElmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrCisgKgloYXMgUEZfRlJFRVpFUl9OT1NJRyBzZXQgKGllLiBpdCBpcyBhIHR5cGljYWwga2VybmVsIHRocmVhZCksIGl0cworICoJVElGX0ZSRUVaRSBmbGFnIHdpbGwgbm90IGJlIHNldC4KKyAqLworYm9vbCBmcmVlemVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgc2lnX29ubHkpCit7CisJLyoKKwkgKiBXZSBmaXJzdCBjaGVjayBpZiB0aGUgdGFzayBpcyBmcmVlemluZyBhbmQgbmV4dCBpZiBpdCBoYXMgYWxyZWFkeQorCSAqIGJlZW4gZnJvemVuIHRvIGF2b2lkIHRoZSByYWNlIHdpdGggZnJvemVuX3Byb2Nlc3MoKSB3aGljaCBmaXJzdCBtYXJrcworCSAqIHRoZSB0YXNrIGFzIGZyb3plbiBhbmQgbmV4dCBjbGVhcnMgaXRzIFRJRl9GUkVFWkUuCisJICovCisJaWYgKCFmcmVlemluZyhwKSkgeworCQlybWIoKTsKKwkJaWYgKGZyb3plbihwKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlpZiAoIXNpZ19vbmx5IHx8IHNob3VsZF9zZW5kX3NpZ25hbChwKSkKKwkJCXNldF9mcmVlemVfZmxhZyhwKTsKKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChzaG91bGRfc2VuZF9zaWduYWwocCkpIHsKKwkJaWYgKCFzaWduYWxfcGVuZGluZyhwKSkKKwkJCWZha2Vfc2lnbmFsX3dha2VfdXAocCk7CisJfSBlbHNlIGlmIChzaWdfb25seSkgeworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJd2FrZV91cF9zdGF0ZShwLCBUQVNLX0lOVEVSUlVQVElCTEUpOworCX0KKworCXJldHVybiB0cnVlOworfQorCit2b2lkIGNhbmNlbF9mcmVlemluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChmcmVlemluZyhwKSkgeworCQlwcl9kZWJ1ZygiICBjbGVhbiB1cDogJXNcbiIsIHAtPmNvbW0pOworCQljbGVhcl9mcmVlemVfZmxhZyhwKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJcmVjYWxjX3NpZ3BlbmRpbmdfYW5kX3dha2UocCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBXYWtlIHVwIGEgZnJvemVuIHByb2Nlc3MKKyAqCisgKiB0YXNrX2xvY2soKSBpcyBuZWVkZWQgdG8gcHJldmVudCB0aGUgcmFjZSB3aXRoIHJlZnJpZ2VyYXRvcigpIHdoaWNoIG1heQorICogb2NjdXIgaWYgdGhlIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxzLiAgTmFtZWx5LCB3aXRob3V0IHRoZSBsb2NrLCBpZiB0aGUKKyAqIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxlZCwgdGhhd190YXNrcygpIG1pZ2h0IGhhdmUgcnVuIGJlZm9yZSBhIHRhc2sgaW4KKyAqIHJlZnJpZ2VyYXRvcigpIGNvdWxkIGNhbGwgZnJvemVuX3Byb2Nlc3MoKSwgaW4gd2hpY2ggY2FzZSB0aGUgdGFzayB3b3VsZCBiZQorICogZnJvemVuIGFuZCBubyBvbmUgd291bGQgdGhhdyBpdC4KKyAqLworaW50IF9fdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlpZiAoZnJvemVuKHApKSB7CisJCXAtPmZsYWdzICY9IH5QRl9GUk9aRU47CisJCXJldHVybiAxOworCX0KKwljbGVhcl9mcmVlemVfZmxhZyhwKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJdGFza19sb2NrKHApOworCWlmIChfX3RoYXdfcHJvY2VzcyhwKSA9PSAxKSB7CisJCXRhc2tfdW5sb2NrKHApOworCQl3YWtlX3VwX3Byb2Nlc3MocCk7CisJCXJldHVybiAxOworCX0KKwl0YXNrX3VubG9jayhwKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodGhhd19wcm9jZXNzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IGNkZWM4M2UuLjk1OTc4ZjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtMTQwMyw5ICsxNDAzLDcgQEAKIAkJaWYgKCFiYXNlLT5maXJzdCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChiYXNlLT5nZXRfc29mdGlycV90aW1lKQotCQkJYmFzZS0+c29mdGlycV90aW1lID0gYmFzZS0+Z2V0X3NvZnRpcnFfdGltZSgpOwotCQllbHNlIGlmIChnZXR0aW1lKSB7CisJCWlmIChnZXR0aW1lKSB7CiAJCQlocnRpbWVyX2dldF9zb2Z0aXJxX3RpbWUoY3B1X2Jhc2UpOwogCQkJZ2V0dGltZSA9IDA7CiAJCX0KQEAgLTE2ODgsOSArMTY4NiwxMSBAQAogCW5ld19iYXNlID0gJmdldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOwogCiAJdGlja19jYW5jZWxfc2NoZWRfdGltZXIoY3B1KTsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0Jc3Bpbl9sb2NrKCZuZXdfYmFzZS0+bG9jayk7CisJLyoKKwkgKiBUaGUgY2FsbGVyIGlzIGdsb2JhbGx5IHNlcmlhbGl6ZWQgYW5kIG5vYm9keSBlbHNlCisJICogdGFrZXMgdHdvIGxvY2tzIGF0IG9uY2UsIGRlYWRsb2NrIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZuZXdfYmFzZS0+bG9jayk7CiAJc3Bpbl9sb2NrX25lc3RlZCgmb2xkX2Jhc2UtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrKSB7CkBAIC0xNzAzLDggKzE3MDMsNyBAQAogCQlyYWlzZSA9IDE7CiAKIAlzcGluX3VubG9jaygmb2xkX2Jhc2UtPmxvY2spOwotCXNwaW5fdW5sb2NrKCZuZXdfYmFzZS0+bG9jayk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOworCXNwaW5fdW5sb2NrX2lycSgmbmV3X2Jhc2UtPmxvY2spOwogCXB1dF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOwogCiAJaWYgKHJhaXNlKQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9hdXRvcHJvYmUuYyBiL2tlcm5lbC9pcnEvYXV0b3Byb2JlLmMKaW5kZXggNTMzMDY4Yy4uY2MwZjczMiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9hdXRvcHJvYmUuYworKysgYi9rZXJuZWwvaXJxL2F1dG9wcm9iZS5jCkBAIC0zMCwxNyArMzAsMTYgQEAKIHVuc2lnbmVkIGxvbmcgcHJvYmVfaXJxX29uKHZvaWQpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAwOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJaW50IGk7CiAKIAltdXRleF9sb2NrKCZwcm9iaW5nX2FjdGl2ZSk7CiAJLyoKIAkgKiBzb21ldGhpbmcgbWF5IGhhdmUgZ2VuZXJhdGVkIGFuIGlycSBsb25nIGFnbyBhbmQgd2Ugd2FudCB0bwogCSAqIGZsdXNoIHN1Y2ggYSBsb25nc3RhbmRpbmcgaXJxIGJlZm9yZSBjb25zaWRlcmluZyBpdCBhcyBzcHVyaW91cy4KIAkgKi8KLQlmb3IgKGkgPSBOUl9JUlFTLTE7IGkgPiAwOyBpLS0pIHsKLQkJZGVzYyA9IGlycV9kZXNjICsgaTsKLQorCWZvcl9lYWNoX2lycV9kZXNjX3JldmVyc2UoaSwgZGVzYykgewogCQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJaWYgKCFkZXNjLT5hY3Rpb24gJiYgIShkZXNjLT5zdGF0dXMgJiBJUlFfTk9QUk9CRSkpIHsKIAkJCS8qCkBAIC02OCw5ICs2Nyw3IEBACiAJICogKHdlIG11c3Qgc3RhcnR1cCBhZ2FpbiBoZXJlIGJlY2F1c2UgaWYgYSBsb25nc3RhbmRpbmcgaXJxCiAJICogaGFwcGVuZWQgaW4gdGhlIHByZXZpb3VzIHN0YWdlLCBpdCBtYXkgaGF2ZSBtYXNrZWQgaXRzZWxmKQogCSAqLwotCWZvciAoaSA9IE5SX0lSUVMtMTsgaSA+IDA7IGktLSkgewotCQlkZXNjID0gaXJxX2Rlc2MgKyBpOwotCisJZm9yX2VhY2hfaXJxX2Rlc2NfcmV2ZXJzZShpLCBkZXNjKSB7CiAJCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOwogCQlpZiAoIWRlc2MtPmFjdGlvbiAmJiAhKGRlc2MtPnN0YXR1cyAmIElSUV9OT1BST0JFKSkgewogCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9BVVRPREVURUNUIHwgSVJRX1dBSVRJTkc7CkBAIC04OCwxMSArODUsNyBAQAogCS8qCiAJICogTm93IGZpbHRlciBvdXQgYW55IG9idmlvdXNseSBzcHVyaW91cyBpbnRlcnJ1cHRzCiAJICovCi0JbWFzayA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQl1bnNpZ25lZCBpbnQgc3RhdHVzOwotCi0JCWRlc2MgPSBpcnFfZGVzYyArIGk7CisJZm9yX2VhY2hfaXJxX2Rlc2MoaSwgZGVzYykgewogCQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJc3RhdHVzID0gZGVzYy0+c3RhdHVzOwogCkBAIC0xMjYsMTQgKzExOSwxMSBAQAogICovCiB1bnNpZ25lZCBpbnQgcHJvYmVfaXJxX21hc2sodW5zaWduZWQgbG9uZyB2YWwpCiB7Ci0JdW5zaWduZWQgaW50IG1hc2s7CisJdW5zaWduZWQgaW50IHN0YXR1cywgbWFzayA9IDA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCBpOwogCi0JbWFzayA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGk7Ci0JCXVuc2lnbmVkIGludCBzdGF0dXM7Ci0KKwlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKSB7CiAJCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOwogCQlzdGF0dXMgPSBkZXNjLT5zdGF0dXM7CiAKQEAgLTE3MSwyMCArMTYxLDE5IEBACiAgKi8KIGludCBwcm9iZV9pcnFfb2ZmKHVuc2lnbmVkIGxvbmcgdmFsKQogewotCWludCBpLCBpcnFfZm91bmQgPSAwLCBucl9pcnFzID0gMDsKKwlpbnQgaSwgaXJxX2ZvdW5kID0gMCwgbnJfb2ZfaXJxcyA9IDA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGludCBzdGF0dXM7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaTsKLQkJdW5zaWduZWQgaW50IHN0YXR1czsKLQorCWZvcl9lYWNoX2lycV9kZXNjKGksIGRlc2MpIHsKIAkJc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJCXN0YXR1cyA9IGRlc2MtPnN0YXR1czsKIAogCQlpZiAoc3RhdHVzICYgSVJRX0FVVE9ERVRFQ1QpIHsKIAkJCWlmICghKHN0YXR1cyAmIElSUV9XQUlUSU5HKSkgewotCQkJCWlmICghbnJfaXJxcykKKwkJCQlpZiAoIW5yX29mX2lycXMpCiAJCQkJCWlycV9mb3VuZCA9IGk7Ci0JCQkJbnJfaXJxcysrOworCQkJCW5yX29mX2lycXMrKzsKIAkJCX0KIAkJCWRlc2MtPnN0YXR1cyA9IHN0YXR1cyAmIH5JUlFfQVVUT0RFVEVDVDsKIAkJCWRlc2MtPmNoaXAtPnNodXRkb3duKGkpOwpAQCAtMTkzLDcgKzE4Miw3IEBACiAJfQogCW11dGV4X3VubG9jaygmcHJvYmluZ19hY3RpdmUpOwogCi0JaWYgKG5yX2lycXMgPiAxKQorCWlmIChucl9vZl9pcnFzID4gMSkKIAkJaXJxX2ZvdW5kID0gLWlycV9mb3VuZDsKIAogCXJldHVybiBpcnFfZm91bmQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2NoaXAuYyBiL2tlcm5lbC9pcnEvY2hpcC5jCmluZGV4IDNjZDQ0MWUuLjQ4OTVmZGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvY2hpcC5jCisrKyBiL2tlcm5lbC9pcnEvY2hpcC5jCkBAIC0yNCwxNiArMjQsMTUgQEAKICAqLwogdm9pZCBkeW5hbWljX2lycV9pbml0KHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykgeworCWlmICghZGVzYykgewogCQlXQVJOKDEsIEtFUk5fRVJSICJUcnlpbmcgdG8gaW5pdGlhbGl6ZSBpbnZhbGlkIElSUSVkXG4iLCBpcnEpOwogCQlyZXR1cm47CiAJfQogCiAJLyogRW5zdXJlIHdlIGRvbid0IGhhdmUgbGVmdCBvdmVyIHZhbHVlcyBmcm9tIGEgcHJldmlvdXMgdXNlIG9mIHRoaXMgaXJxICovCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZGVzYy0+c3RhdHVzID0gSVJRX0RJU0FCTEVEOwogCWRlc2MtPmNoaXAgPSAmbm9faXJxX2NoaXA7CkBAIC01NywxNSArNTYsMTQgQEAKICAqLwogdm9pZCBkeW5hbWljX2lycV9jbGVhbnVwKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykgeworCWlmICghZGVzYykgewogCQlXQVJOKDEsIEtFUk5fRVJSICJUcnlpbmcgdG8gY2xlYW51cCBpbnZhbGlkIElSUSVkXG4iLCBpcnEpOwogCQlyZXR1cm47CiAJfQogCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJaWYgKGRlc2MtPmFjdGlvbikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CkBAIC04OSwxMCArODcsMTAgQEAKICAqLwogaW50IHNldF9pcnFfY2hpcCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NoaXAgKmNoaXApCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykgeworCWlmICghZGVzYykgewogCQlXQVJOKDEsIEtFUk5fRVJSICJUcnlpbmcgdG8gaW5zdGFsbCBjaGlwIGZvciBJUlElZFxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTAwLDcgKzk4LDYgQEAKIAlpZiAoIWNoaXApCiAJCWNoaXAgPSAmbm9faXJxX2NoaXA7CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlpcnFfY2hpcF9zZXRfZGVmYXVsdHMoY2hpcCk7CiAJZGVzYy0+Y2hpcCA9IGNoaXA7CkBAIC0xMTEsMjcgKzEwOCwyNyBAQAogRVhQT1JUX1NZTUJPTChzZXRfaXJxX2NoaXApOwogCiAvKioKLSAqCXNldF9pcnFfdHlwZSAtIHNldCB0aGUgaXJxIHR5cGUgZm9yIGFuIGlycQorICoJc2V0X2lycV90eXBlIC0gc2V0IHRoZSBpcnEgdHJpZ2dlciB0eXBlIGZvciBhbiBpcnEKICAqCUBpcnE6CWlycSBudW1iZXIKLSAqCUB0eXBlOglpbnRlcnJ1cHQgdHlwZSAtIHNlZSBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisgKglAdHlwZToJSVJRX1RZUEVfe0xFVkVMLEVER0V9XyogdmFsdWUgLSBzZWUgaW5jbHVkZS9saW51eC9pcnEuaAogICovCiBpbnQgc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IC1FTlhJTzsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykgeworCWlmICghZGVzYykgewogCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBzZXQgaXJxIHR5cGUgZm9yIElSUSVkXG4iLCBpcnEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JaWYgKGRlc2MtPmNoaXAtPnNldF90eXBlKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCXJldCA9IGRlc2MtPmNoaXAtPnNldF90eXBlKGlycSwgdHlwZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQl9CisJaWYgKHR5cGUgPT0gSVJRX1RZUEVfTk9ORSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJldCA9IF9faXJxX3NldF90cmlnZ2VyKGRlc2MsIGlycSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChzZXRfaXJxX3R5cGUpOwpAQCAtMTQ1LDE2ICsxNDIsMTUgQEAKICAqLwogaW50IHNldF9pcnFfZGF0YSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMpIHsKKwlpZiAoIWRlc2MpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiVHJ5aW5nIHRvIGluc3RhbGwgY29udHJvbGxlciBkYXRhIGZvciBJUlElZFxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZGVzYy0+aGFuZGxlcl9kYXRhID0gZGF0YTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CkBAIC0xNzEsMTUgKzE2NywxNSBAQAogICovCiBpbnQgc2V0X2lycV9tc2kodW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9kZXNjICplbnRyeSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKSB7CisJaWYgKCFkZXNjKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIlRyeWluZyB0byBpbnN0YWxsIG1zaSBkYXRhIGZvciBJUlElZFxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZGVzYy0+bXNpX2Rlc2MgPSBlbnRyeTsKIAlpZiAoZW50cnkpCkBAIC0xOTcsMTAgKzE5MywxNiBAQAogICovCiBpbnQgc2V0X2lycV9jaGlwX2RhdGEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWRlc2MtPmNoaXApIHsKKwlpZiAoIWRlc2MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiVHJ5aW5nIHRvIGluc3RhbGwgY2hpcCBkYXRhIGZvciBJUlElZFxuIiwgaXJxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFkZXNjLT5jaGlwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQlVHOiBiYWQgc2V0X2lycV9jaGlwX2RhdGEoSVJRIyVkKVxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjE4LDcgKzIyMCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGRlZmF1bHRfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAogCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01BU0tFRDsKQEAgLTIzNiw4ICsyMzgsOSBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlZmF1bHRfc3RhcnR1cCh1bnNpZ25lZCBpbnQgaXJxKQogewotCWlycV9kZXNjW2lycV0uY2hpcC0+ZW5hYmxlKGlycSk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAorCWRlc2MtPmNoaXAtPmVuYWJsZShpcnEpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDYsNyArMjQ5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgZGVmYXVsdF9zaHV0ZG93bih1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAlkZXNjLT5jaGlwLT5tYXNrKGlycSk7CiAJZGVzYy0+c3RhdHVzIHw9IElSUV9NQVNLRUQ7CkBAIC0zMDUsMTQgKzMwOCwxMyBAQAogewogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwotCWNvbnN0IHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlzcGluX2xvY2soJmRlc2MtPmxvY2spOwogCiAJaWYgKHVubGlrZWx5KGRlc2MtPnN0YXR1cyAmIElSUV9JTlBST0dSRVNTKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7Ci0Ja3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CiAKIAlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CiAJaWYgKHVubGlrZWx5KCFhY3Rpb24gfHwgKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpKQpAQCAtMzQ0LDcgKzM0Niw2IEBACiB2b2lkCiBoYW5kbGVfbGV2ZWxfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwogCkBAIC0zNTQsNyArMzU1LDcgQEAKIAlpZiAodW5saWtlbHkoZGVzYy0+c3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpKQogCQlnb3RvIG91dF91bmxvY2s7CiAJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1JFUExBWSB8IElSUV9XQUlUSU5HKTsKLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCS8qCiAJICogSWYgaXRzIGRpc2FibGVkIG9yIG5vIGFjdGlvbiBhdmFpbGFibGUKQEAgLTM5Miw3ICszOTMsNiBAQAogdm9pZAogaGFuZGxlX2Zhc3Rlb2lfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwogCkBAIC00MDIsNyArNDAyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlkZXNjLT5zdGF0dXMgJj0gfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOwotCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCiAJLyoKIAkgKiBJZiBpdHMgZGlzYWJsZWQgb3Igbm8gYWN0aW9uIGF2YWlsYWJsZQpAQCAtNDUxLDggKzQ1MSw2IEBACiB2b2lkCiBoYW5kbGVfZWRnZV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCWNvbnN0IHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KIAlzcGluX2xvY2soJmRlc2MtPmxvY2spOwogCiAJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1JFUExBWSB8IElSUV9XQUlUSU5HKTsKQEAgLTQ2OCw4ICs0NjYsNyBAQAogCQltYXNrX2Fja19pcnEoZGVzYywgaXJxKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQotCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCiAJLyogU3RhcnQgaGFuZGxpbmcgdGhlIGlycSAqLwogCWRlc2MtPmNoaXAtPmFjayhpcnEpOwpAQCAtNTI0LDcgKzUyMSw3IEBACiB7CiAJaXJxcmV0dXJuX3QgYWN0aW9uX3JldDsKIAotCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCiAJaWYgKGRlc2MtPmNoaXAtPmFjaykKIAkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CkBAIC01NDEsMTcgKzUzOCwxNSBAQAogX19zZXRfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgaXJxX2Zsb3dfaGFuZGxlcl90IGhhbmRsZSwgaW50IGlzX2NoYWluZWQsCiAJCSAgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKSB7CisJaWYgKCFkZXNjKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIlRyeWluZyB0byBpbnN0YWxsIHR5cGUgY29udHJvbCBmb3IgSVJRJWRcbiIsIGlycSk7CiAJCXJldHVybjsKIAl9CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0KIAlpZiAoIWhhbmRsZSkKIAkJaGFuZGxlID0gaGFuZGxlX2JhZF9pcnE7CiAJZWxzZSBpZiAoZGVzYy0+Y2hpcCA9PSAmbm9faXJxX2NoaXApIHsKQEAgLTU4Myw3ICs1NzgsNyBAQAogCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9ESVNBQkxFRDsKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9OT1JFUVVFU1QgfCBJUlFfTk9QUk9CRTsKIAkJZGVzYy0+ZGVwdGggPSAwOwotCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwkJZGVzYy0+Y2hpcC0+c3RhcnR1cChpcnEpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CkBAIC02MDYsMTcgKzYwMSwxNCBAQAogCiB2b2lkIF9faW5pdCBzZXRfaXJxX25vcHJvYmUodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKSB7CisJaWYgKCFkZXNjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIG1hcmsgSVJRJWQgbm9uLXByb2JlYWJsZVxuIiwgaXJxKTsKLQogCQlyZXR1cm47CiAJfQogCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlkZXNjLT5zdGF0dXMgfD0gSVJRX05PUFJPQkU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwpAQCAtNjI0LDE3ICs2MTYsMTQgQEAKIAogdm9pZCBfX2luaXQgc2V0X2lycV9wcm9iZSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMpIHsKKwlpZiAoIWRlc2MpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gbWFyayBJUlElZCBwcm9iZWFibGVcbiIsIGlycSk7Ci0KIAkJcmV0dXJuOwogCX0KIAotCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZGVzYy0+c3RhdHVzICY9IH5JUlFfTk9QUk9CRTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2hhbmRsZS5jIGIva2VybmVsL2lycS9oYW5kbGUuYwppbmRleCA1ZmE2MTk4Li5jODE1YjQyIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2hhbmRsZS5jCisrKyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKQEAgLTI1LDExICsyNSwxMCBAQAogICoKICAqIEhhbmRsZXMgc3B1cmlvdXMgYW5kIHVuaGFuZGxlZCBJUlEncy4gSXQgYWxzbyBwcmludHMgYSBkZWJ1Z21lc3NhZ2UuCiAgKi8KLXZvaWQKLWhhbmRsZV9iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3ZvaWQgaGFuZGxlX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCXByaW50X2lycV9kZXNjKGlycSwgZGVzYyk7Ci0Ja3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CiAJYWNrX2JhZF9pcnEoaXJxKTsKIH0KIApAQCAtNDcsNiArNDYsOSBAQAogICoKICAqIENvbnRyb2xsZXIgbWFwcGluZ3MgZm9yIGFsbCBpbnRlcnJ1cHQgc291cmNlczoKICAqLworaW50IG5yX2lycXMgPSBOUl9JUlFTOworRVhQT1JUX1NZTUJPTF9HUEwobnJfaXJxcyk7CisKIHN0cnVjdCBpcnFfZGVzYyBpcnFfZGVzY1tOUl9JUlFTXSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9IHsKIAlbMCAuLi4gTlJfSVJRUy0xXSA9IHsKIAkJLnN0YXR1cyA9IElSUV9ESVNBQkxFRCwKQEAgLTY2LDcgKzY4LDkgQEAKICAqLwogc3RhdGljIHZvaWQgYWNrX2JhZCh1bnNpZ25lZCBpbnQgaXJxKQogewotCXByaW50X2lycV9kZXNjKGlycSwgaXJxX2Rlc2MgKyBpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKKwlwcmludF9pcnFfZGVzYyhpcnEsIGRlc2MpOwogCWFja19iYWRfaXJxKGlycSk7CiB9CiAKQEAgLTEzMSw4ICsxMzUsNiBAQAogCWlycXJldHVybl90IHJldCwgcmV0dmFsID0gSVJRX05PTkU7CiAJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CiAKLQloYW5kbGVfZHluYW1pY190aWNrKGFjdGlvbik7Ci0KIAlpZiAoIShhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkpCiAJCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwogCkBAIC0xNjUsMTEgKzE2NywxMiBAQAogICovCiB1bnNpZ25lZCBpbnQgX19kb19JUlEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCi0Ja3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CisKIAlpZiAoQ0hFQ0tfSVJRX1BFUl9DUFUoZGVzYy0+c3RhdHVzKSkgewogCQlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwogCkBAIC0yNTYsOCArMjU5LDggQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiAKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKIC8qCiAgKiBsb2NrZGVwOiB3ZSB3YW50IHRvIGhhbmRsZSBhbGwgaXJxX2Rlc2MgbG9ja3MgYXMgYSBzaW5nbGUgbG9jay1jbGFzczoKICAqLwpAQCAtMjY1LDEwICsyNjgsMTAgQEAKIAogdm9pZCBlYXJseV9pbml0X2lycV9sb2NrX2NsYXNzKHZvaWQpCiB7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKLQkJbG9ja2RlcF9zZXRfY2xhc3MoJmlycV9kZXNjW2ldLmxvY2ssICZpcnFfZGVzY19sb2NrX2NsYXNzKTsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKQorCQlsb2NrZGVwX3NldF9jbGFzcygmZGVzYy0+bG9jaywgJmlycV9kZXNjX2xvY2tfY2xhc3MpOwogfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmggYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCmluZGV4IDA4YTg0OWEuLmM5NzY3ZTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKKysrIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaApAQCAtMTAsMTIgKzEwLDE1IEBACiAvKiBTZXQgZGVmYXVsdCBoYW5kbGVyOiAqLwogZXh0ZXJuIHZvaWQgY29tcGF0X2lycV9jaGlwX3NldF9kZWZhdWx0X2hhbmRsZXIoc3RydWN0IGlycV9kZXNjICpkZXNjKTsKIAorZXh0ZXJuIGludCBfX2lycV9zZXRfdHJpZ2dlcihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLWV4dGVybiB2b2lkIHJlZ2lzdGVyX2lycV9wcm9jKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfaXJxX3Byb2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKTsKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX2hhbmRsZXJfcHJvYyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9oYW5kbGVyX3Byb2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfaXJxX3Byb2ModW5zaWduZWQgaW50IGlycSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfaXJxX3Byb2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9oYW5kbGVyX3Byb2ModW5zaWduZWQgaW50IGlycSwKIAkJCQkJIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9oYW5kbGVyX3Byb2ModW5zaWduZWQgaW50IGlycSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IDYwYzQ5ZTMuLmM0OThhMWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMzEsMTAgKzMxLDEwIEBACiAgKi8KIHZvaWQgc3luY2hyb25pemVfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKQorCWlmICghZGVzYykKIAkJcmV0dXJuOwogCiAJZG8gewpAQCAtNjQsNyArNjQsNyBAQAogICovCiBpbnQgaXJxX2Nhbl9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCiAJaWYgKENIRUNLX0lSUV9QRVJfQ1BVKGRlc2MtPnN0YXR1cykgfHwgIWRlc2MtPmNoaXAgfHwKIAkgICAgIWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSkKQEAgLTgxLDE4ICs4MSwxNyBAQAogICovCiBpbnQgaXJxX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgY3B1bWFzaykKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCiAJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc2V0X2JhbGFuY2VfaXJxX2FmZmluaXR5KGlycSwgY3B1bWFzayk7Ci0KICNpZmRlZiBDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUQotCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QQ05UWFQpIHsKKwlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUENOVFhUIHx8IGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCWRlc2MtPmFmZmluaXR5ID0gY3B1bWFzazsKIAkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgY3B1bWFzayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UKQEAgLTExMSwxNiArMTEwLDE3IEBACiBpbnQgaXJxX3NlbGVjdF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxKQogewogCWNwdW1hc2tfdCBtYXNrOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAogCWlmICghaXJxX2Nhbl9zZXRfYWZmaW5pdHkoaXJxKSkKIAkJcmV0dXJuIDA7CiAKIAljcHVzX2FuZChtYXNrLCBjcHVfb25saW5lX21hcCwgaXJxX2RlZmF1bHRfYWZmaW5pdHkpOwogCi0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IG1hc2s7Ci0JaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBtYXNrKTsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7CisJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgbWFzayk7CiAKLQlzZXRfYmFsYW5jZV9pcnFfYWZmaW5pdHkoaXJxLCBtYXNrKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMTQwLDEwICsxNDAsMTAgQEAKICAqLwogdm9pZCBkaXNhYmxlX2lycV9ub3N5bmModW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMpCisJaWYgKCFkZXNjKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwpAQCAtMTY5LDkgKzE2OSw5IEBACiAgKi8KIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKQorCWlmICghZGVzYykKIAkJcmV0dXJuOwogCiAJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CkBAIC0yMTEsMTAgKzIxMSwxMCBAQAogICovCiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMpCisJaWYgKCFkZXNjKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwpAQCAtMjIzLDkgKzIyMyw5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGVuYWJsZV9pcnEpOwogCi1pbnQgc2V0X2lycV93YWtlX3JlYWwodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQorc3RhdGljIGludCBzZXRfaXJxX3dha2VfcmVhbCh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlpbnQgcmV0ID0gLUVOWElPOwogCiAJaWYgKGRlc2MtPmNoaXAtPnNldF93YWtlKQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgKi8KIGludCBzZXRfaXJxX3dha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMjg4LDEyICsyODgsMTYgQEAKICAqLwogaW50IGNhbl9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzKQogeworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTIHx8IGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX05PUkVRVUVTVCkKKwlpZiAoIWRlc2MpCiAJCXJldHVybiAwOwogCi0JYWN0aW9uID0gaXJxX2Rlc2NbaXJxXS5hY3Rpb247CisJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9OT1JFUVVFU1QpCisJCXJldHVybiAwOworCisJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwogCWlmIChhY3Rpb24pCiAJCWlmIChpcnFmbGFncyAmIGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkKIAkJCWFjdGlvbiA9IE5VTEw7CkBAIC0zMTIsMTAgKzMxNiwxMSBAQAogCQlkZXNjLT5oYW5kbGVfaXJxID0gTlVMTDsKIH0KIAotc3RhdGljIGludCBfX2lycV9zZXRfdHJpZ2dlcihzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBpcnEsCitpbnQgX19pcnFfc2V0X3RyaWdnZXIoc3RydWN0IGlycV9kZXNjICpkZXNjLCB1bnNpZ25lZCBpbnQgaXJxLAogCQl1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCWludCByZXQ7CisJc3RydWN0IGlycV9jaGlwICpjaGlwID0gZGVzYy0+Y2hpcDsKIAogCWlmICghY2hpcCB8fCAhY2hpcC0+c2V0X3R5cGUpIHsKIAkJLyoKQEAgLTMzMyw2ICszMzgsMTEgQEAKIAkJcHJfZXJyKCJzZXR0aW5nIHRyaWdnZXIgbW9kZSAlZCBmb3IgaXJxICV1IGZhaWxlZCAoJXBGKVxuIiwKIAkJCQkoaW50KShmbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKSwKIAkJCQlpcnEsIGNoaXAtPnNldF90eXBlKTsKKwllbHNlIHsKKwkJLyogbm90ZSB0aGF0IElSUUZfVFJJR0dFUl9NQVNLID09IElSUV9UWVBFX1NFTlNFX01BU0sgKi8KKwkJZGVzYy0+c3RhdHVzICY9IH5JUlFfVFlQRV9TRU5TRV9NQVNLOworCQlkZXNjLT5zdGF0dXMgfD0gZmxhZ3MgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0zNDEsMTYgKzM1MSwxNiBAQAogICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYW4gaXJxYWN0aW9uIC0gdHlwaWNhbGx5IHVzZWQgdG8KICAqIGFsbG9jYXRlIHNwZWNpYWwgaW50ZXJydXB0cyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUuCiAgKi8KLWludCBzZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqbmV3KQorc3RhdGljIGludAorX19zZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICogZGVzYywgc3RydWN0IGlycWFjdGlvbiAqbmV3KQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXN0cnVjdCBpcnFhY3Rpb24gKm9sZCwgKipwOwogCWNvbnN0IGNoYXIgKm9sZF9uYW1lID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzaGFyZWQgPSAwOwogCWludCByZXQ7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMpCisJaWYgKCFkZXNjKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChkZXNjLT5jaGlwID09ICZub19pcnFfY2hpcCkKQEAgLTQxMSw3ICs0MjEsNyBAQAogCiAJCS8qIFNldHVwIHRoZSB0eXBlIChsZXZlbCwgZWRnZSBwb2xhcml0eSkgaWYgY29uZmlndXJlZDogKi8KIAkJaWYgKG5ldy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSykgewotCQkJcmV0ID0gX19pcnFfc2V0X3RyaWdnZXIoZGVzYy0+Y2hpcCwgaXJxLCBuZXctPmZsYWdzKTsKKwkJCXJldCA9IF9faXJxX3NldF90cmlnZ2VyKGRlc2MsIGlycSwgbmV3LT5mbGFncyk7CiAKIAkJCWlmIChyZXQpIHsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CkBAIC00MzAsMTYgKzQ0MCwyMSBAQAogCQlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfTk9BVVRPRU4pKSB7CiAJCQlkZXNjLT5kZXB0aCA9IDA7CiAJCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9ESVNBQkxFRDsKLQkJCWlmIChkZXNjLT5jaGlwLT5zdGFydHVwKQotCQkJCWRlc2MtPmNoaXAtPnN0YXJ0dXAoaXJxKTsKLQkJCWVsc2UKLQkJCQlkZXNjLT5jaGlwLT5lbmFibGUoaXJxKTsKKwkJCWRlc2MtPmNoaXAtPnN0YXJ0dXAoaXJxKTsKIAkJfSBlbHNlCiAJCQkvKiBVbmRvIG5lc3RlZCBkaXNhYmxlczogKi8KIAkJCWRlc2MtPmRlcHRoID0gMTsKIAogCQkvKiBTZXQgZGVmYXVsdCBhZmZpbml0eSBtYXNrIG9uY2UgZXZlcnl0aGluZyBpcyBzZXR1cCAqLwogCQlpcnFfc2VsZWN0X2FmZmluaXR5KGlycSk7CisKKwl9IGVsc2UgaWYgKChuZXctPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0spCisJCQkmJiAobmV3LT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKQorCQkJCSE9IChkZXNjLT5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSkgeworCQkvKiBob3BlIHRoZSBoYW5kbGVyIHdvcmtzIHdpdGggdGhlIGFjdHVhbCB0cmlnZ2VyIG1vZGUuLi4gKi8KKwkJcHJfd2FybmluZygiSVJRICVkIHVzZXMgdHJpZ2dlciBtb2RlICVkOyByZXF1ZXN0ZWQgJWRcbiIsCisJCQkJaXJxLCAoaW50KShkZXNjLT5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSwKKwkJCQkoaW50KShuZXctPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0spKTsKIAl9CiAKIAkqcCA9IG5ldzsKQEAgLTQ2NCw3ICs0NzksNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAogCW5ldy0+aXJxID0gaXJxOwotCXJlZ2lzdGVyX2lycV9wcm9jKGlycSk7CisJcmVnaXN0ZXJfaXJxX3Byb2MoaXJxLCBkZXNjKTsKIAluZXctPmRpciA9IE5VTEw7CiAJcmVnaXN0ZXJfaGFuZGxlcl9wcm9jKGlycSwgbmV3KTsKIApAQCAtNDg0LDYgKzQ5OSwyMCBAQAogfQogCiAvKioKKyAqCXNldHVwX2lycSAtIHNldHVwIGFuIGludGVycnVwdAorICoJQGlycTogSW50ZXJydXB0IGxpbmUgdG8gc2V0dXAKKyAqCUBhY3Q6IGlycWFjdGlvbiBmb3IgdGhlIGludGVycnVwdAorICoKKyAqIFVzZWQgdG8gc3RhdGljYWxseSBzZXR1cCBpbnRlcnJ1cHRzIGluIHRoZSBlYXJseSBib290IHByb2Nlc3MuCisgKi8KK2ludCBzZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0KQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKKwlyZXR1cm4gX19zZXR1cF9pcnEoaXJxLCBkZXNjLCBhY3QpOworfQorCisvKioKICAqCWZyZWVfaXJxIC0gZnJlZSBhbiBpbnRlcnJ1cHQKICAqCUBpcnE6IEludGVycnVwdCBsaW5lIHRvIGZyZWUKICAqCUBkZXZfaWQ6IERldmljZSBpZGVudGl0eSB0byBmcmVlCkBAIC00OTksMTUgKzUyOCwxNSBAQAogICovCiB2b2lkIGZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICoqcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7Ci0JaWYgKGlycSA+PSBOUl9JUlFTKQorCisJaWYgKCFkZXNjKQogCQlyZXR1cm47CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlwID0gJmRlc2MtPmFjdGlvbjsKIAlmb3IgKDs7KSB7CkBAIC01OTYsMTIgKzYyNSwxNCBAQAogICoJSVJRRl9TSEFSRUQJCUludGVycnVwdCBpcyBzaGFyZWQKICAqCUlSUUZfRElTQUJMRUQJRGlzYWJsZSBsb2NhbCBpbnRlcnJ1cHRzIHdoaWxlIHByb2Nlc3NpbmcKICAqCUlSUUZfU0FNUExFX1JBTkRPTQlUaGUgaW50ZXJydXB0IGNhbiBiZSB1c2VkIGZvciBlbnRyb3B5CisgKglJUlFGX1RSSUdHRVJfKgkJU3BlY2lmeSBhY3RpdmUgZWRnZShzKSBvciBsZXZlbAogICoKICAqLwogaW50IHJlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsIGlycV9oYW5kbGVyX3QgaGFuZGxlciwKIAkJdW5zaWduZWQgbG9uZyBpcnFmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJaW50IHJldHZhbDsKIAogI2lmZGVmIENPTkZJR19MT0NLREVQCkBAIC02MTgsOSArNjQ5LDEyIEBACiAJICovCiAJaWYgKChpcnFmbGFncyAmIElSUUZfU0hBUkVEKSAmJiAhZGV2X2lkKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaXJxID49IE5SX0lSUVMpCisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlpZiAoIWRlc2MpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9OT1JFUVVFU1QpCisKKwlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX05PUkVRVUVTVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFoYW5kbGVyKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTYzNiwyNiArNjcwLDI5IEBACiAJYWN0aW9uLT5uZXh0ID0gTlVMTDsKIAlhY3Rpb24tPmRldl9pZCA9IGRldl9pZDsKIAorCXJldHZhbCA9IF9fc2V0dXBfaXJxKGlycSwgZGVzYywgYWN0aW9uKTsKKwlpZiAocmV0dmFsKQorCQlrZnJlZShhY3Rpb24pOworCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NISVJRCiAJaWYgKGlycWZsYWdzICYgSVJRRl9TSEFSRUQpIHsKIAkJLyoKIAkJICogSXQncyBhIHNoYXJlZCBJUlEgLS0gdGhlIGRyaXZlciBvdWdodCB0byBiZSBwcmVwYXJlZCBmb3IgaXQKIAkJICogdG8gaGFwcGVuIGltbWVkaWF0ZWx5LCBzbyBsZXQncyBtYWtlIHN1cmUuLi4uCi0JCSAqIFdlIGRvIHRoaXMgYmVmb3JlIGFjdHVhbGx5IHJlZ2lzdGVyaW5nIGl0LCB0byBtYWtlIHN1cmUgdGhhdAotCQkgKiBhICdyZWFsJyBJUlEgZG9lc24ndCBydW4gaW4gcGFyYWxsZWwgd2l0aCBvdXIgZmFrZQorCQkgKiBXZSBkaXNhYmxlIHRoZSBpcnEgdG8gbWFrZSBzdXJlIHRoYXQgYSAncmVhbCcgSVJRIGRvZXNuJ3QKKwkJICogcnVuIGluIHBhcmFsbGVsIHdpdGggb3VyIGZha2UuCiAJCSAqLwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJCWRpc2FibGVfaXJxKGlycSk7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwogCQloYW5kbGVyKGlycSwgZGV2X2lkKTsKKwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWVuYWJsZV9pcnEoaXJxKTsKIAl9CiAjZW5kaWYKLQotCXJldHZhbCA9IHNldHVwX2lycShpcnEsIGFjdGlvbik7Ci0JaWYgKHJldHZhbCkKLQkJa2ZyZWUoYWN0aW9uKTsKLQogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHJlcXVlc3RfaXJxKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMgYi9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCmluZGV4IDc3YjdhY2MuLjkwYjkyMGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKKysrIGIva2VybmVsL2lycS9taWdyYXRpb24uYwpAQCAtMywxOCArMywxOCBAQAogCiB2b2lkIHNldF9wZW5kaW5nX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QRU5ESU5HOwotCWlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrID0gbWFzazsKKwlkZXNjLT5wZW5kaW5nX21hc2sgPSBtYXNrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBtb3ZlX21hc2tlZF9pcnEoaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCWNwdW1hc2tfdCB0bXA7CiAKIAlpZiAobGlrZWx5KCEoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykpKQpAQCAtMzAsNyArMzAsNyBAQAogCiAJZGVzYy0+c3RhdHVzICY9IH5JUlFfTU9WRV9QRU5ESU5HOwogCi0JaWYgKHVubGlrZWx5KGNwdXNfZW1wdHkoaXJxX2Rlc2NbaXJxXS5wZW5kaW5nX21hc2spKSkKKwlpZiAodW5saWtlbHkoY3B1c19lbXB0eShkZXNjLT5wZW5kaW5nX21hc2spKSkKIAkJcmV0dXJuOwogCiAJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCkBAIC0zOCw3ICszOCw3IEBACiAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRlc2MtPmxvY2spOwogCi0JY3B1c19hbmQodG1wLCBpcnFfZGVzY1tpcnFdLnBlbmRpbmdfbWFzaywgY3B1X29ubGluZV9tYXApOworCWNwdXNfYW5kKHRtcCwgZGVzYy0+cGVuZGluZ19tYXNrLCBjcHVfb25saW5lX21hcCk7CiAKIAkvKgogCSAqIElmIHRoZXJlIHdhcyBhIHZhbGlkIG1hc2sgdG8gd29yayB3aXRoLCBwbGVhc2UKQEAgLTU1LDEyICs1NSwxMiBAQAogCWlmIChsaWtlbHkoIWNwdXNfZW1wdHkodG1wKSkpIHsKIAkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSx0bXApOwogCX0KLQljcHVzX2NsZWFyKGlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrKTsKKwljcHVzX2NsZWFyKGRlc2MtPnBlbmRpbmdfbWFzayk7CiB9CiAKIHZvaWQgbW92ZV9uYXRpdmVfaXJxKGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAogCWlmIChsaWtlbHkoIShkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcHJvYy5jIGIva2VybmVsL2lycS9wcm9jLmMKaW5kZXggYTA5ZGQyOS4uZmFjMDE0YSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9wcm9jLmMKKysrIGIva2VybmVsL2lycS9wcm9jLmMKQEAgLTE5LDcgKzE5LDcgQEAKIAogc3RhdGljIGludCBpcnFfYWZmaW5pdHlfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIChsb25nKW0tPnByaXZhdGU7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoKGxvbmcpbS0+cHJpdmF0ZSk7CiAJY3B1bWFza190ICptYXNrID0gJmRlc2MtPmFmZmluaXR5OwogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKQEAgLTQzLDcgKzQzLDcgQEAKIAljcHVtYXNrX3QgbmV3X3ZhbHVlOwogCWludCBlcnI7CiAKLQlpZiAoIWlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5IHx8IG5vX2lycV9hZmZpbml0eSB8fAorCWlmICghaXJxX3RvX2Rlc2MoaXJxKS0+Y2hpcC0+c2V0X2FmZmluaXR5IHx8IG5vX2lycV9hZmZpbml0eSB8fAogCSAgICBpcnFfYmFsYW5jaW5nX2Rpc2FibGVkKGlycSkpCiAJCXJldHVybiAtRUlPOwogCkBAIC0xMzIsMjAgKzEzMiwyMCBAQAogc3RhdGljIGludCBpcnFfc3B1cmlvdXNfcmVhZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKIAkJCQkgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkID0gJmlycV9kZXNjWyhsb25nKSBkYXRhXTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYygobG9uZykgZGF0YSk7CiAJcmV0dXJuIHNwcmludGYocGFnZSwgImNvdW50ICV1XG4iCiAJCQkgICAgICJ1bmhhbmRsZWQgJXVcbiIKIAkJCSAgICAgImxhc3RfdW5oYW5kbGVkICV1IG1zXG4iLAotCQkJZC0+aXJxX2NvdW50LAotCQkJZC0+aXJxc191bmhhbmRsZWQsCi0JCQlqaWZmaWVzX3RvX21zZWNzKGQtPmxhc3RfdW5oYW5kbGVkKSk7CisJCQlkZXNjLT5pcnFfY291bnQsCisJCQlkZXNjLT5pcnFzX3VuaGFuZGxlZCwKKwkJCWppZmZpZXNfdG9fbXNlY3MoZGVzYy0+bGFzdF91bmhhbmRsZWQpKTsKIH0KIAogI2RlZmluZSBNQVhfTkFNRUxFTiAxMjgKIAogc3RhdGljIGludCBuYW1lX3VuaXF1ZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICpuZXdfYWN0aW9uKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDE7CkBAIC0xNjUsOCArMTY1LDkgQEAKIHZvaWQgcmVnaXN0ZXJfaGFuZGxlcl9wcm9jKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKIHsKIAljaGFyIG5hbWUgW01BWF9OQU1FTEVOXTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCi0JaWYgKCFpcnFfZGVzY1tpcnFdLmRpciB8fCBhY3Rpb24tPmRpciB8fCAhYWN0aW9uLT5uYW1lIHx8CisJaWYgKCFkZXNjLT5kaXIgfHwgYWN0aW9uLT5kaXIgfHwgIWFjdGlvbi0+bmFtZSB8fAogCQkJCQkhbmFtZV91bmlxdWUoaXJxLCBhY3Rpb24pKQogCQlyZXR1cm47CiAKQEAgLTE3NCwzNiArMTc1LDM0IEBACiAJc25wcmludGYobmFtZSwgTUFYX05BTUVMRU4sICIlcyIsIGFjdGlvbi0+bmFtZSk7CiAKIAkvKiBjcmVhdGUgL3Byb2MvaXJxLzEyMzQvaGFuZGxlci8gKi8KLQlhY3Rpb24tPmRpciA9IHByb2NfbWtkaXIobmFtZSwgaXJxX2Rlc2NbaXJxXS5kaXIpOworCWFjdGlvbi0+ZGlyID0gcHJvY19ta2RpcihuYW1lLCBkZXNjLT5kaXIpOwogfQogCiAjdW5kZWYgTUFYX05BTUVMRU4KIAogI2RlZmluZSBNQVhfTkFNRUxFTiAxMAogCi12b2lkIHJlZ2lzdGVyX2lycV9wcm9jKHVuc2lnbmVkIGludCBpcnEpCit2b2lkIHJlZ2lzdGVyX2lycV9wcm9jKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAljaGFyIG5hbWUgW01BWF9OQU1FTEVOXTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogCi0JaWYgKCFyb290X2lycV9kaXIgfHwKLQkJKGlycV9kZXNjW2lycV0uY2hpcCA9PSAmbm9faXJxX2NoaXApIHx8Ci0JCQlpcnFfZGVzY1tpcnFdLmRpcikKKwlpZiAoIXJvb3RfaXJxX2RpciB8fCAoZGVzYy0+Y2hpcCA9PSAmbm9faXJxX2NoaXApIHx8IGRlc2MtPmRpcikKIAkJcmV0dXJuOwogCiAJbWVtc2V0KG5hbWUsIDAsIE1BWF9OQU1FTEVOKTsKIAlzcHJpbnRmKG5hbWUsICIlZCIsIGlycSk7CiAKIAkvKiBjcmVhdGUgL3Byb2MvaXJxLzEyMzQgKi8KLQlpcnFfZGVzY1tpcnFdLmRpciA9IHByb2NfbWtkaXIobmFtZSwgcm9vdF9pcnFfZGlyKTsKKwlkZXNjLT5kaXIgPSBwcm9jX21rZGlyKG5hbWUsIHJvb3RfaXJxX2Rpcik7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJLyogY3JlYXRlIC9wcm9jL2lycS88aXJxPi9zbXBfYWZmaW5pdHkgKi8KLQlwcm9jX2NyZWF0ZV9kYXRhKCJzbXBfYWZmaW5pdHkiLCAwNjAwLCBpcnFfZGVzY1tpcnFdLmRpciwKKwlwcm9jX2NyZWF0ZV9kYXRhKCJzbXBfYWZmaW5pdHkiLCAwNjAwLCBkZXNjLT5kaXIsCiAJCQkgJmlycV9hZmZpbml0eV9wcm9jX2ZvcHMsICh2b2lkICopKGxvbmcpaXJxKTsKICNlbmRpZgogCi0JZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgic3B1cmlvdXMiLCAwNDQ0LCBpcnFfZGVzY1tpcnFdLmRpcik7CisJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgic3B1cmlvdXMiLCAwNDQ0LCBkZXNjLT5kaXIpOwogCWlmIChlbnRyeSkgewogCQllbnRyeS0+ZGF0YSA9ICh2b2lkICopKGxvbmcpaXJxOwogCQllbnRyeS0+cmVhZF9wcm9jID0gaXJxX3NwdXJpb3VzX3JlYWQ7CkBAIC0yMTQsOCArMjEzLDExIEBACiAKIHZvaWQgdW5yZWdpc3Rlcl9oYW5kbGVyX3Byb2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKQogewotCWlmIChhY3Rpb24tPmRpcikKLQkJcmVtb3ZlX3Byb2NfZW50cnkoYWN0aW9uLT5kaXItPm5hbWUsIGlycV9kZXNjW2lycV0uZGlyKTsKKwlpZiAoYWN0aW9uLT5kaXIpIHsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCQlyZW1vdmVfcHJvY19lbnRyeShhY3Rpb24tPmRpci0+bmFtZSwgZGVzYy0+ZGlyKTsKKwl9CiB9CiAKIHZvaWQgcmVnaXN0ZXJfZGVmYXVsdF9hZmZpbml0eV9wcm9jKHZvaWQpCkBAIC0yMjgsNyArMjMwLDggQEAKIAogdm9pZCBpbml0X2lycV9wcm9jKHZvaWQpCiB7Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKIAkvKiBjcmVhdGUgL3Byb2MvaXJxICovCiAJcm9vdF9pcnFfZGlyID0gcHJvY19ta2RpcigiaXJxIiwgTlVMTCk7CkBAIC0yNDAsNyArMjQzLDcgQEAKIAkvKgogCSAqIENyZWF0ZSBlbnRyaWVzIGZvciBhbGwgZXhpc3RpbmcgSVJRcy4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQotCQlyZWdpc3Rlcl9pcnFfcHJvYyhpKTsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpCisJCXJlZ2lzdGVyX2lycV9wcm9jKGlycSwgZGVzYyk7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcmVzZW5kLmMgYi9rZXJuZWwvaXJxL3Jlc2VuZC5jCmluZGV4IGE4MDQ2NzkuLjg5YzcxMTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvcmVzZW5kLmMKKysrIGIva2VybmVsL2lycS9yZXNlbmQuYwpAQCAtMzMsMTAgKzMzLDEwIEBACiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCBpcnE7CiAKLQl3aGlsZSAoIWJpdG1hcF9lbXB0eShpcnFzX3Jlc2VuZCwgTlJfSVJRUykpIHsKLQkJaXJxID0gZmluZF9maXJzdF9iaXQoaXJxc19yZXNlbmQsIE5SX0lSUVMpOworCXdoaWxlICghYml0bWFwX2VtcHR5KGlycXNfcmVzZW5kLCBucl9pcnFzKSkgeworCQlpcnEgPSBmaW5kX2ZpcnN0X2JpdChpcnFzX3Jlc2VuZCwgbnJfaXJxcyk7CiAJCWNsZWFyX2JpdChpcnEsIGlycXNfcmVzZW5kKTsKLQkJZGVzYyA9IGlycV9kZXNjICsgaXJxOworCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJZGVzYy0+aGFuZGxlX2lycShpcnEsIGRlc2MpOwogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKaW5kZXggYzY2ZDNmMS4uZGQzNjRjMSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9zcHVyaW91cy5jCisrKyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwpAQCAtMTIsODMgKzEyLDEyMiBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogCiBzdGF0aWMgaW50IGlycWZpeHVwIF9fcmVhZF9tb3N0bHk7CiAKKyNkZWZpbmUgUE9MTF9TUFVSSU9VU19JUlFfSU5URVJWQUwgKEhaLzEwKQorc3RhdGljIHZvaWQgcG9sbF9zcHVyaW91c19pcnFzKHVuc2lnbmVkIGxvbmcgZHVtbXkpOworc3RhdGljIERFRklORV9USU1FUihwb2xsX3NwdXJpb3VzX2lycV90aW1lciwgcG9sbF9zcHVyaW91c19pcnFzLCAwLCAwKTsKKwogLyoKICAqIFJlY292ZXJ5IGhhbmRsZXIgZm9yIG1pc3JvdXRlZCBpbnRlcnJ1cHRzLgogICovCitzdGF0aWMgaW50IHRyeV9vbmVfaXJxKGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CisJaW50IG9rID0gMCwgd29yayA9IDA7CisKKwlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCS8qIEFscmVhZHkgcnVubmluZyBvbiBhbm90aGVyIHByb2Nlc3NvciAqLworCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUykgeworCQkvKgorCQkgKiBBbHJlYWR5IHJ1bm5pbmc6IElmIGl0IGlzIHNoYXJlZCBnZXQgdGhlIG90aGVyCisJCSAqIENQVSB0byBnbyBsb29raW5nIGZvciBvdXIgbXlzdGVyeSBpbnRlcnJ1cHQgdG9vCisJCSAqLworCQlpZiAoZGVzYy0+YWN0aW9uICYmIChkZXNjLT5hY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpKQorCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9QRU5ESU5HOworCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJCXJldHVybiBvazsKKwl9CisJLyogSG9ub3VyIHRoZSBub3JtYWwgSVJRIGxvY2tpbmcgKi8KKwlkZXNjLT5zdGF0dXMgfD0gSVJRX0lOUFJPR1JFU1M7CisJYWN0aW9uID0gZGVzYy0+YWN0aW9uOworCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKworCXdoaWxlIChhY3Rpb24pIHsKKwkJLyogT25seSBzaGFyZWQgSVJRIGhhbmRsZXJzIGFyZSBzYWZlIHRvIGNhbGwgKi8KKwkJaWYgKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkgeworCQkJaWYgKGFjdGlvbi0+aGFuZGxlcihpcnEsIGFjdGlvbi0+ZGV2X2lkKSA9PQorCQkJCUlSUV9IQU5ETEVEKQorCQkJCW9rID0gMTsKKwkJfQorCQlhY3Rpb24gPSBhY3Rpb24tPm5leHQ7CisJfQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJLyogTm93IGNsZWFuIHVwIHRoZSBmbGFncyAqLworCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJYWN0aW9uID0gZGVzYy0+YWN0aW9uOworCisJLyoKKwkgKiBXaGlsZSB3ZSB3ZXJlIGxvb2tpbmcgZm9yIGEgZml4dXAgc29tZW9uZSBxdWV1ZWQgYSByZWFsCisJICogSVJRIGNsYXNoaW5nIHdpdGggb3VyIHdhbGs6CisJICovCisJd2hpbGUgKChkZXNjLT5zdGF0dXMgJiBJUlFfUEVORElORykgJiYgYWN0aW9uKSB7CisJCS8qCisJCSAqIFBlcmZvcm0gcmVhbCBJUlEgcHJvY2Vzc2luZyBmb3IgdGhlIElSUSB3ZSBkZWZlcnJlZAorCQkgKi8KKwkJd29yayA9IDE7CisJCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwkJaGFuZGxlX0lSUV9ldmVudChpcnEsIGFjdGlvbik7CisJCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1BFTkRJTkc7CisJfQorCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0lOUFJPR1JFU1M7CisJLyoKKwkgKiBJZiB3ZSBkaWQgYWN0dWFsIHdvcmsgZm9yIHRoZSByZWFsIElSUSBsaW5lIHdlIG11c3QgbGV0IHRoZQorCSAqIElSUSBjb250cm9sbGVyIGNsZWFuIHVwIHRvbworCSAqLworCWlmICh3b3JrICYmIGRlc2MtPmNoaXAgJiYgZGVzYy0+Y2hpcC0+ZW5kKQorCQlkZXNjLT5jaGlwLT5lbmQoaXJxKTsKKwlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisKKwlyZXR1cm4gb2s7Cit9CisKIHN0YXRpYyBpbnQgbWlzcm91dGVkX2lycShpbnQgaXJxKQogewotCWludCBpOwotCWludCBvayA9IDA7Ci0JaW50IHdvcmsgPSAwOwkvKiBEaWQgd2UgZG8gd29yayBmb3IgYSByZWFsIElSUSAqLworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaSwgb2sgPSAwOwogCi0JZm9yIChpID0gMTsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGk7Ci0JCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKSB7CisJCWlmICghaSkKKwkJCSBjb250aW51ZTsKIAogCQlpZiAoaSA9PSBpcnEpCS8qIEFscmVhZHkgdHJpZWQgKi8KIAkJCWNvbnRpbnVlOwogCi0JCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0JCS8qIEFscmVhZHkgcnVubmluZyBvbiBhbm90aGVyIHByb2Nlc3NvciAqLwotCQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpIHsKLQkJCS8qCi0JCQkgKiBBbHJlYWR5IHJ1bm5pbmc6IElmIGl0IGlzIHNoYXJlZCBnZXQgdGhlIG90aGVyCi0JCQkgKiBDUFUgdG8gZ28gbG9va2luZyBmb3Igb3VyIG15c3RlcnkgaW50ZXJydXB0IHRvbwotCQkJICovCi0JCQlpZiAoZGVzYy0+YWN0aW9uICYmIChkZXNjLT5hY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpKQotCQkJCWRlc2MtPnN0YXR1cyB8PSBJUlFfUEVORElORzsKLQkJCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIEhvbm91ciB0aGUgbm9ybWFsIElSUSBsb2NraW5nICovCi0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfSU5QUk9HUkVTUzsKLQkJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwotCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7Ci0KLQkJd2hpbGUgKGFjdGlvbikgewotCQkJLyogT25seSBzaGFyZWQgSVJRIGhhbmRsZXJzIGFyZSBzYWZlIHRvIGNhbGwgKi8KLQkJCWlmIChhY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpIHsKLQkJCQlpZiAoYWN0aW9uLT5oYW5kbGVyKGksIGFjdGlvbi0+ZGV2X2lkKSA9PQotCQkJCQkJSVJRX0hBTkRMRUQpCi0JCQkJCW9rID0gMTsKLQkJCX0KLQkJCWFjdGlvbiA9IGFjdGlvbi0+bmV4dDsKLQkJfQotCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQkvKiBOb3cgY2xlYW4gdXAgdGhlIGZsYWdzICovCi0JCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0JCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKLQotCQkvKgotCQkgKiBXaGlsZSB3ZSB3ZXJlIGxvb2tpbmcgZm9yIGEgZml4dXAgc29tZW9uZSBxdWV1ZWQgYSByZWFsCi0JCSAqIElSUSBjbGFzaGluZyB3aXRoIG91ciB3YWxrOgotCQkgKi8KLQkJd2hpbGUgKChkZXNjLT5zdGF0dXMgJiBJUlFfUEVORElORykgJiYgYWN0aW9uKSB7Ci0JCQkvKgotCQkJICogUGVyZm9ybSByZWFsIElSUSBwcm9jZXNzaW5nIGZvciB0aGUgSVJRIHdlIGRlZmVycmVkCi0JCQkgKi8KLQkJCXdvcmsgPSAxOwotCQkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwotCQkJaGFuZGxlX0lSUV9ldmVudChpLCBhY3Rpb24pOwotCQkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKLQkJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1BFTkRJTkc7Ci0JCX0KLQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfSU5QUk9HUkVTUzsKLQkJLyoKLQkJICogSWYgd2UgZGlkIGFjdHVhbCB3b3JrIGZvciB0aGUgcmVhbCBJUlEgbGluZSB3ZSBtdXN0IGxldCB0aGUKLQkJICogSVJRIGNvbnRyb2xsZXIgY2xlYW4gdXAgdG9vCi0JCSAqLwotCQlpZiAod29yayAmJiBkZXNjLT5jaGlwICYmIGRlc2MtPmNoaXAtPmVuZCkKLQkJCWRlc2MtPmNoaXAtPmVuZChpKTsKLQkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCQlpZiAodHJ5X29uZV9pcnEoaSwgZGVzYykpCisJCQlvayA9IDE7CiAJfQogCS8qIFNvIHRoZSBjYWxsZXIgY2FuIGFkanVzdCB0aGUgaXJxIGVycm9yIGNvdW50cyAqLwogCXJldHVybiBvazsKIH0KIAorc3RhdGljIHZvaWQgcG9sbF9zcHVyaW91c19pcnFzKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCWludCBpOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaSwgZGVzYykgeworCQl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJCWlmICghaSkKKwkJCSBjb250aW51ZTsKKworCQkvKiBSYWN5IGJ1dCBpdCBkb2Vzbid0IG1hdHRlciAqLworCQlzdGF0dXMgPSBkZXNjLT5zdGF0dXM7CisJCWJhcnJpZXIoKTsKKwkJaWYgKCEoc3RhdHVzICYgSVJRX1NQVVJJT1VTX0RJU0FCTEVEKSkKKwkJCWNvbnRpbnVlOworCisJCXRyeV9vbmVfaXJxKGksIGRlc2MpOworCX0KKworCW1vZF90aW1lcigmcG9sbF9zcHVyaW91c19pcnFfdGltZXIsCisJCSAgamlmZmllcyArIFBPTExfU1BVUklPVVNfSVJRX0lOVEVSVkFMKTsKK30KKwogLyoKICAqIElmIDk5LDkwMCBvZiB0aGUgcHJldmlvdXMgMTAwLDAwMCBpbnRlcnJ1cHRzIGhhdmUgbm90IGJlZW4gaGFuZGxlZAogICogdGhlbiBhc3N1bWUgdGhhdCB0aGUgSVJRIGlzIHN0dWNrIGluIHNvbWUgbWFubmVyLiBEcm9wIGEgZGlhZ25vc3RpYwpAQCAtMTM3LDcgKzE3Niw5IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGludCB0cnlfbWlzcm91dGVkX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGlycXJldHVybl90IGFjdGlvbl9yZXQpCitzdGF0aWMgaW5saW5lIGludAordHJ5X21pc3JvdXRlZF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAorCQkgIGlycXJldHVybl90IGFjdGlvbl9yZXQpCiB7CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCkBAIC0yMTIsNiArMjUzLDkgQEAKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRCB8IElSUV9TUFVSSU9VU19ESVNBQkxFRDsKIAkJZGVzYy0+ZGVwdGgrKzsKIAkJZGVzYy0+Y2hpcC0+ZGlzYWJsZShpcnEpOworCisJCW1vZF90aW1lcigmcG9sbF9zcHVyaW91c19pcnFfdGltZXIsCisJCQkgIGppZmZpZXMgKyBQT0xMX1NQVVJJT1VTX0lSUV9JTlRFUlZBTCk7CiAJfQogCWRlc2MtPmlycXNfdW5oYW5kbGVkID0gMDsKIH0KQEAgLTI0MSw3ICsyODUsNyBAQAogCiBfX3NldHVwKCJpcnFmaXh1cCIsIGlycWZpeHVwX3NldHVwKTsKIG1vZHVsZV9wYXJhbShpcnFmaXh1cCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoImlycWZpeHVwIiwgIjA6IE5vIGZpeHVwLCAxOiBpcnFmaXh1cCBtb2RlIDI6IGlycXBvbGwgbW9kZSIpOworTU9EVUxFX1BBUk1fREVTQygiaXJxZml4dXAiLCAiMDogTm8gZml4dXAsIDE6IGlycWZpeHVwIG1vZGUsIDI6IGlycXBvbGwgbW9kZSIpOwogCiBzdGF0aWMgaW50IF9faW5pdCBpcnFwb2xsX3NldHVwKGNoYXIgKnN0cikKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pdGltZXIuYyBiL2tlcm5lbC9pdGltZXIuYwppbmRleCBhYjk4Mjc0Li5kYjdjMzU4IDEwMDY0NAotLS0gYS9rZXJuZWwvaXRpbWVyLmMKKysrIGIva2VybmVsL2l0aW1lci5jCkBAIC01NSwxNyArNTUsMTUgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQlicmVhazsKIAljYXNlIElUSU1FUl9WSVJUVUFMOgotCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCQlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQljdmFsID0gdHNrLT5zaWduYWwtPml0X3ZpcnRfZXhwaXJlczsKIAkJY2ludGVydmFsID0gdHNrLT5zaWduYWwtPml0X3ZpcnRfaW5jcjsKIAkJaWYgKCFjcHV0aW1lX2VxKGN2YWwsIGNwdXRpbWVfemVybykpIHsKLQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRzazsKLQkJCWNwdXRpbWVfdCB1dGltZSA9IHRzay0+c2lnbmFsLT51dGltZTsKLQkJCWRvIHsKLQkJCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCB0LT51dGltZSk7Ci0JCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQkJfSB3aGlsZSAodCAhPSB0c2spOworCQkJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOworCQkJY3B1dGltZV90IHV0aW1lOworCisJCQl0aHJlYWRfZ3JvdXBfY3B1dGltZSh0c2ssICZjcHV0aW1lKTsKKwkJCXV0aW1lID0gY3B1dGltZS51dGltZTsKIAkJCWlmIChjcHV0aW1lX2xlKGN2YWwsIHV0aW1lKSkgeyAvKiBhYm91dCB0byBmaXJlICovCiAJCQkJY3ZhbCA9IGppZmZpZXNfdG9fY3B1dGltZSgxKTsKIAkJCX0gZWxzZSB7CkBAIC03MywyNSArNzEsMTkgQEAKIAkJCX0KIAkJfQogCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJY3B1dGltZV90b190aW1ldmFsKGN2YWwsICZ2YWx1ZS0+aXRfdmFsdWUpOwogCQljcHV0aW1lX3RvX3RpbWV2YWwoY2ludGVydmFsLCAmdmFsdWUtPml0X2ludGVydmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBJVElNRVJfUFJPRjoKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJY3ZhbCA9IHRzay0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXM7CiAJCWNpbnRlcnZhbCA9IHRzay0+c2lnbmFsLT5pdF9wcm9mX2luY3I7CiAJCWlmICghY3B1dGltZV9lcShjdmFsLCBjcHV0aW1lX3plcm8pKSB7Ci0JCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7Ci0JCQljcHV0aW1lX3QgcHRpbWUgPSBjcHV0aW1lX2FkZCh0c2stPnNpZ25hbC0+dXRpbWUsCi0JCQkJCQkgICAgICB0c2stPnNpZ25hbC0+c3RpbWUpOwotCQkJZG8gewotCQkJCXB0aW1lID0gY3B1dGltZV9hZGQocHRpbWUsCi0JCQkJCQkgICAgY3B1dGltZV9hZGQodC0+dXRpbWUsCi0JCQkJCQkJCXQtPnN0aW1lKSk7Ci0JCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQkJfSB3aGlsZSAodCAhPSB0c2spOworCQkJc3RydWN0IHRhc2tfY3B1dGltZSB0aW1lczsKKwkJCWNwdXRpbWVfdCBwdGltZTsKKworCQkJdGhyZWFkX2dyb3VwX2NwdXRpbWUodHNrLCAmdGltZXMpOworCQkJcHRpbWUgPSBjcHV0aW1lX2FkZCh0aW1lcy51dGltZSwgdGltZXMuc3RpbWUpOwogCQkJaWYgKGNwdXRpbWVfbGUoY3ZhbCwgcHRpbWUpKSB7IC8qIGFib3V0IHRvIGZpcmUgKi8KIAkJCQljdmFsID0gamlmZmllc190b19jcHV0aW1lKDEpOwogCQkJfSBlbHNlIHsKQEAgLTk5LDcgKzkxLDYgQEAKIAkJCX0KIAkJfQogCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJY3B1dGltZV90b190aW1ldmFsKGN2YWwsICZ2YWx1ZS0+aXRfdmFsdWUpOwogCQljcHV0aW1lX3RvX3RpbWV2YWwoY2ludGVydmFsLCAmdmFsdWUtPml0X2ludGVydmFsKTsKIAkJYnJlYWs7CkBAIC0xODUsNyArMTc2LDYgQEAKIAljYXNlIElUSU1FUl9WSVJUVUFMOgogCQludmFsID0gdGltZXZhbF90b19jcHV0aW1lKCZ2YWx1ZS0+aXRfdmFsdWUpOwogCQluaW50ZXJ2YWwgPSB0aW1ldmFsX3RvX2NwdXRpbWUoJnZhbHVlLT5pdF9pbnRlcnZhbCk7Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJCWN2YWwgPSB0c2stPnNpZ25hbC0+aXRfdmlydF9leHBpcmVzOwogCQljaW50ZXJ2YWwgPSB0c2stPnNpZ25hbC0+aXRfdmlydF9pbmNyOwpAQCAtMjAwLDcgKzE5MCw2IEBACiAJCXRzay0+c2lnbmFsLT5pdF92aXJ0X2V4cGlyZXMgPSBudmFsOwogCQl0c2stPnNpZ25hbC0+aXRfdmlydF9pbmNyID0gbmludGVydmFsOwogCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJaWYgKG92YWx1ZSkgewogCQkJY3B1dGltZV90b190aW1ldmFsKGN2YWwsICZvdmFsdWUtPml0X3ZhbHVlKTsKIAkJCWNwdXRpbWVfdG9fdGltZXZhbChjaW50ZXJ2YWwsICZvdmFsdWUtPml0X2ludGVydmFsKTsKQEAgLTIwOSw3ICsxOTgsNiBAQAogCWNhc2UgSVRJTUVSX1BST0Y6CiAJCW52YWwgPSB0aW1ldmFsX3RvX2NwdXRpbWUoJnZhbHVlLT5pdF92YWx1ZSk7CiAJCW5pbnRlcnZhbCA9IHRpbWV2YWxfdG9fY3B1dGltZSgmdmFsdWUtPml0X2ludGVydmFsKTsKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJY3ZhbCA9IHRzay0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXM7CiAJCWNpbnRlcnZhbCA9IHRzay0+c2lnbmFsLT5pdF9wcm9mX2luY3I7CkBAIC0yMjQsNyArMjEyLDYgQEAKIAkJdHNrLT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlcyA9IG52YWw7CiAJCXRzay0+c2lnbmFsLT5pdF9wcm9mX2luY3IgPSBuaW50ZXJ2YWw7CiAJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCQlpZiAob3ZhbHVlKSB7CiAJCQljcHV0aW1lX3RvX3RpbWV2YWwoY3ZhbCwgJm92YWx1ZS0+aXRfdmFsdWUpOwogCQkJY3B1dGltZV90b190aW1ldmFsKGNpbnRlcnZhbCwgJm92YWx1ZS0+aXRfaW50ZXJ2YWwpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2thbGxzeW1zLmMgYi9rZXJuZWwva2FsbHN5bXMuYwppbmRleCAzOGZjMTBhLi41MDcyY2YxIDEwMDY0NAotLS0gYS9rZXJuZWwva2FsbHN5bXMuYworKysgYi9rZXJuZWwva2FsbHN5bXMuYwpAQCAtMjYwLDcgKzI2MCw2IEBACiAJLyogc2VlIGlmIGl0J3MgaW4gYSBtb2R1bGUgKi8KIAlyZXR1cm4gbW9kdWxlX2FkZHJlc3NfbG9va3VwKGFkZHIsIHN5bWJvbHNpemUsIG9mZnNldCwgbW9kbmFtZSwKIAkJCQkgICAgIG5hbWVidWYpOwotCXJldHVybiBOVUxMOwogfQogCiBpbnQgbG9va3VwX3N5bWJvbF9uYW1lKHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqc3ltbmFtZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlYy5jIGIva2VybmVsL2tleGVjLmMKaW5kZXggYWVmMjY1My4uNzc3YWM0NSAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjLmMKKysrIGIva2VybmVsL2tleGVjLmMKQEAgLTEzNzEsNiArMTM3MSw3IEBACiAJVk1DT1JFSU5GT19TWU1CT0wobm9kZV9vbmxpbmVfbWFwKTsKIAlWTUNPUkVJTkZPX1NZTUJPTChzd2FwcGVyX3BnX2Rpcik7CiAJVk1DT1JFSU5GT19TWU1CT0woX3N0ZXh0KTsKKwlWTUNPUkVJTkZPX1NZTUJPTCh2bWxpc3QpOwogCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiAJVk1DT1JFSU5GT19TWU1CT0wobWVtX21hcCk7CkBAIC0xNDA2LDYgKzE0MDcsNyBAQAogCVZNQ09SRUlORk9fT0ZGU0VUKGZyZWVfYXJlYSwgZnJlZV9saXN0KTsKIAlWTUNPUkVJTkZPX09GRlNFVChsaXN0X2hlYWQsIG5leHQpOwogCVZNQ09SRUlORk9fT0ZGU0VUKGxpc3RfaGVhZCwgcHJldik7CisJVk1DT1JFSU5GT19PRkZTRVQodm1fc3RydWN0LCBhZGRyKTsKIAlWTUNPUkVJTkZPX0xFTkdUSCh6b25lLmZyZWVfYXJlYSwgTUFYX09SREVSKTsKIAlWTUNPUkVJTkZPX0xFTkdUSChmcmVlX2FyZWEuZnJlZV9saXN0LCBNSUdSQVRFX1RZUEVTKTsKIAlWTUNPUkVJTkZPX05VTUJFUihOUl9GUkVFX1BBR0VTKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IDI0NTZkMWEuLjNkM2MzZWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wocmVxdWVzdF9tb2R1bGUpOwotI2VuZGlmIC8qIENPTkZJR19LTU9EICovCisjZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KIAogc3RydWN0IHN1YnByb2Nlc3NfaW5mbyB7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CkBAIC0yNjUsNyArMjY1LDcgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIC8qCiAgKiBJZiBzZXQsIGNhbGxfdXNlcm1vZGVoZWxwZXJfZXhlYygpIHdpbGwgZXhpdCBpbW1lZGlhdGVseSByZXR1cm5pbmcgLUVCVVNZCiAgKiAodXNlZCBmb3IgcHJldmVudGluZyB1c2VyIGxhbmQgcHJvY2Vzc2VzIGZyb20gYmVpbmcgY3JlYXRlZCBhZnRlciB0aGUgdXNlcgpAQCAtMjg4LDM5ICsyODgsMzcgQEAKICAqLwogI2RlZmluZSBSVU5OSU5HX0hFTFBFUlNfVElNRU9VVAkoNSAqIEhaKQogCi1zdGF0aWMgaW50IHVzZXJtb2RlaGVscGVyX3BtX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAotCQkJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwKLQkJCQkJdm9pZCAqaWdub3JlZCkKKy8qKgorICogdXNlcm1vZGVoZWxwZXJfZGlzYWJsZSAtIHByZXZlbnQgbmV3IGhlbHBlcnMgZnJvbSBiZWluZyBzdGFydGVkCisgKi8KK2ludCB1c2VybW9kZWhlbHBlcl9kaXNhYmxlKHZvaWQpCiB7CiAJbG9uZyByZXR2YWw7CiAKLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgUE1fSElCRVJOQVRJT05fUFJFUEFSRToKLQljYXNlIFBNX1NVU1BFTkRfUFJFUEFSRToKLQkJdXNlcm1vZGVoZWxwZXJfZGlzYWJsZWQgPSAxOwotCQlzbXBfbWIoKTsKLQkJLyoKLQkJICogRnJvbSBub3cgb24gY2FsbF91c2VybW9kZWhlbHBlcl9leGVjKCkgd29uJ3Qgc3RhcnQgYW55IG5ldwotCQkgKiBoZWxwZXJzLCBzbyBpdCBpcyBzdWZmaWNpZW50IGlmIHJ1bm5pbmdfaGVscGVycyB0dXJucyBvdXQgdG8KLQkJICogYmUgemVybyBhdCBvbmUgcG9pbnQgKGl0IG1heSBiZSBpbmNyZWFzZWQgbGF0ZXIsIGJ1dCB0aGF0Ci0JCSAqIGRvZXNuJ3QgbWF0dGVyKS4KLQkJICovCi0JCXJldHZhbCA9IHdhaXRfZXZlbnRfdGltZW91dChydW5uaW5nX2hlbHBlcnNfd2FpdHEsCisJdXNlcm1vZGVoZWxwZXJfZGlzYWJsZWQgPSAxOworCXNtcF9tYigpOworCS8qCisJICogRnJvbSBub3cgb24gY2FsbF91c2VybW9kZWhlbHBlcl9leGVjKCkgd29uJ3Qgc3RhcnQgYW55IG5ldworCSAqIGhlbHBlcnMsIHNvIGl0IGlzIHN1ZmZpY2llbnQgaWYgcnVubmluZ19oZWxwZXJzIHR1cm5zIG91dCB0bworCSAqIGJlIHplcm8gYXQgb25lIHBvaW50IChpdCBtYXkgYmUgaW5jcmVhc2VkIGxhdGVyLCBidXQgdGhhdAorCSAqIGRvZXNuJ3QgbWF0dGVyKS4KKwkgKi8KKwlyZXR2YWwgPSB3YWl0X2V2ZW50X3RpbWVvdXQocnVubmluZ19oZWxwZXJzX3dhaXRxLAogCQkJCQlhdG9taWNfcmVhZCgmcnVubmluZ19oZWxwZXJzKSA9PSAwLAogCQkJCQlSVU5OSU5HX0hFTFBFUlNfVElNRU9VVCk7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCXJldHVybiBOT1RJRllfT0s7Ci0JCX0gZWxzZSB7Ci0JCQl1c2VybW9kZWhlbHBlcl9kaXNhYmxlZCA9IDA7Ci0JCQlyZXR1cm4gTk9USUZZX0JBRDsKLQkJfQotCWNhc2UgUE1fUE9TVF9ISUJFUk5BVElPTjoKLQljYXNlIFBNX1BPU1RfU1VTUEVORDoKLQkJdXNlcm1vZGVoZWxwZXJfZGlzYWJsZWQgPSAwOwotCQlyZXR1cm4gTk9USUZZX09LOwotCX0KKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiBOT1RJRllfRE9ORTsKKwl1c2VybW9kZWhlbHBlcl9kaXNhYmxlZCA9IDA7CisJcmV0dXJuIC1FQUdBSU47Cit9CisKKy8qKgorICogdXNlcm1vZGVoZWxwZXJfZW5hYmxlIC0gYWxsb3cgbmV3IGhlbHBlcnMgdG8gYmUgc3RhcnRlZCBhZ2FpbgorICovCit2b2lkIHVzZXJtb2RlaGVscGVyX2VuYWJsZSh2b2lkKQoreworCXVzZXJtb2RlaGVscGVyX2Rpc2FibGVkID0gMDsKIH0KIAogc3RhdGljIHZvaWQgaGVscGVyX2xvY2sodm9pZCkKQEAgLTMzNCwxOCArMzMyLDEyIEBACiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJ1bm5pbmdfaGVscGVycykpCiAJCXdha2VfdXAoJnJ1bm5pbmdfaGVscGVyc193YWl0cSk7CiB9Ci0KLXN0YXRpYyB2b2lkIHJlZ2lzdGVyX3BtX25vdGlmaWVyX2NhbGxiYWNrKHZvaWQpCi17Ci0JcG1fbm90aWZpZXIodXNlcm1vZGVoZWxwZXJfcG1fY2FsbGJhY2ssIDApOwotfQotI2Vsc2UgLyogQ09ORklHX1BNICovCisjZWxzZSAvKiBDT05GSUdfUE1fU0xFRVAgKi8KICNkZWZpbmUgdXNlcm1vZGVoZWxwZXJfZGlzYWJsZWQJMAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGVscGVyX2xvY2sodm9pZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBoZWxwZXJfdW5sb2NrKHZvaWQpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfcG1fbm90aWZpZXJfY2FsbGJhY2sodm9pZCkge30KLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKyNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAogLyoqCiAgKiBjYWxsX3VzZXJtb2RlaGVscGVyX3NldHVwIC0gcHJlcGFyZSB0byBjYWxsIGEgdXNlcm1vZGUgaGVscGVyCkBAIC01MTUsNSArNTA3LDQgQEAKIHsKIAlraGVscGVyX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImtoZWxwZXIiKTsKIAlCVUdfT04oIWtoZWxwZXJfd3EpOwotCXJlZ2lzdGVyX3BtX25vdGlmaWVyX2NhbGxiYWNrKCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCA3NWJjMmNkLi44YjU3YTI1IDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQwNCw3ICs0MDQsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKGhsaXN0X2xvY2ssICpmbGFncyk7CiB9CiAKLXZvaWQga3JldHByb2JlX3RhYmxlX2xvY2sodW5zaWduZWQgbG9uZyBoYXNoLCB1bnNpZ25lZCBsb25nICpmbGFncykKK3N0YXRpYyB2b2lkIGtyZXRwcm9iZV90YWJsZV9sb2NrKHVuc2lnbmVkIGxvbmcgaGFzaCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7CiAJc3BpbmxvY2tfdCAqaGxpc3RfbG9jayA9IGtyZXRwcm9iZV90YWJsZV9sb2NrX3B0cihoYXNoKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShobGlzdF9sb2NrLCAqZmxhZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2tzeXNmcy5jIGIva2VybmVsL2tzeXNmcy5jCmluZGV4IGU1M2JjMzAuLjA4ZGQ4ZWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rc3lzZnMuYworKysgYi9rZXJuZWwva3N5c2ZzLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2RlZmluZSBLRVJORUxfQVRUUl9STyhfbmFtZSkgXApAQCAtNTMsNiArNTQsMzcgQEAKIEtFUk5FTF9BVFRSX1JXKHVldmVudF9oZWxwZXIpOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUFJPRklMSU5HCitzdGF0aWMgc3NpemVfdCBwcm9maWxpbmdfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcm9mX29uKTsKK30KK3N0YXRpYyBzc2l6ZV90IHByb2ZpbGluZ19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IHJldDsKKworCWlmIChwcm9mX29uKQorCQlyZXR1cm4gLUVFWElTVDsKKwkvKgorCSAqIFRoaXMgZXZlbnR1YWxseSBjYWxscyBpbnRvIGdldF9vcHRpb24oKSB3aGljaAorCSAqIGhhcyBhIHRvbiBvZiBjYWxsZXJzIGFuZCBpcyBub3QgY29uc3QuICBJdCBpcworCSAqIGVhc2llc3QgdG8gY2FzdCBpdCBhd2F5IGhlcmUuCisJICovCisJcHJvZmlsZV9zZXR1cCgoY2hhciAqKWJ1Zik7CisJcmV0ID0gcHJvZmlsZV9pbml0KCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjcmVhdGVfcHJvY19wcm9maWxlKCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gY291bnQ7Cit9CitLRVJORUxfQVRUUl9SVyhwcm9maWxpbmcpOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfS0VYRUMKIHN0YXRpYyBzc2l6ZV90IGtleGVjX2xvYWRlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCSBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTEwOSw2ICsxNDEsOSBAQAogCSZ1ZXZlbnRfc2VxbnVtX2F0dHIuYXR0ciwKIAkmdWV2ZW50X2hlbHBlcl9hdHRyLmF0dHIsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFJPRklMSU5HCisJJnByb2ZpbGluZ19hdHRyLmF0dHIsCisjZW5kaWYKICNpZmRlZiBDT05GSUdfS0VYRUMKIAkma2V4ZWNfbG9hZGVkX2F0dHIuYXR0ciwKIAkma2V4ZWNfY3Jhc2hfbG9hZGVkX2F0dHIuYXR0ciwKZGlmZiAtLWdpdCBhL2tlcm5lbC9rdGhyZWFkLmMgYi9rZXJuZWwva3RocmVhZC5jCmluZGV4IDUwNTk4ZTI5Li44ZTdhN2NlIDEwMDY0NAotLS0gYS9rZXJuZWwva3RocmVhZC5jCisrKyBiL2tlcm5lbC9rdGhyZWFkLmMKQEAgLTE3MiwxMiArMTcyLDExIEBACiAgKi8KIHZvaWQga3RocmVhZF9iaW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqaywgdW5zaWduZWQgaW50IGNwdSkKIHsKLQlpZiAoay0+c3RhdGUgIT0gVEFTS19VTklOVEVSUlVQVElCTEUpIHsKKwkvKiBNdXN0IGhhdmUgZG9uZSBzY2hlZHVsZSgpIGluIGt0aHJlYWQoKSBiZWZvcmUgd2Ugc2V0X3Rhc2tfY3B1ICovCisJaWYgKCF3YWl0X3Rhc2tfaW5hY3RpdmUoaywgVEFTS19VTklOVEVSUlVQVElCTEUpKSB7CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybjsKIAl9Ci0JLyogTXVzdCBoYXZlIGRvbmUgc2NoZWR1bGUoKSBpbiBrdGhyZWFkKCkgYmVmb3JlIHdlIHNldF90YXNrX2NwdSAqLwotCXdhaXRfdGFza19pbmFjdGl2ZShrLCAwKTsKIAlzZXRfdGFza19jcHUoaywgY3B1KTsKIAlrLT5jcHVzX2FsbG93ZWQgPSBjcHVtYXNrX29mX2NwdShjcHUpOwogCWstPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9IDE7CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNzU3NmMyZC4uMGQ4ZDIxZSAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3RhaW50X21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGZsYWcpCiB7CiAJYWRkX3RhaW50KGZsYWcpOwotCW1vZC0+dGFpbnRzIHw9IGZsYWc7CisJbW9kLT50YWludHMgfD0gKDFVIDw8IGZsYWcpOwogfQogCiAvKgpAQCAtNzg2LDYgKzc4Niw3IEBACiAJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKIAkvKiBTdG9yZSB0aGUgbmFtZSBvZiB0aGUgbGFzdCB1bmxvYWRlZCBtb2R1bGUgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMgKi8KIAlzdHJsY3B5KGxhc3RfdW5sb2FkZWRfbW9kdWxlLCBtb2QtPm5hbWUsIHNpemVvZihsYXN0X3VubG9hZGVkX21vZHVsZSkpOworCXVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUobW9kLT5uYW1lKTsKIAlmcmVlX21vZHVsZShtb2QpOwogCiAgb3V0OgpAQCAtOTI1LDcgKzkyNiw3IEBACiBzdGF0aWMgaW50IHRyeV90b19mb3JjZV9sb2FkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqc3ltbmFtZSkKIHsKICNpZmRlZiBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQKLQlpZiAoISh0YWludGVkICYgVEFJTlRfRk9SQ0VEX01PRFVMRSkpCisJaWYgKCF0ZXN0X3RhaW50KFRBSU5UX0ZPUkNFRF9NT0RVTEUpKQogCQlwcmludGsoIiVzOiBubyB2ZXJzaW9uIGZvciBcIiVzXCIgZm91bmQ6IGtlcm5lbCB0YWludGVkLlxuIiwKIAkJICAgICAgIG1vZC0+bmFtZSwgc3ltbmFtZSk7CiAJYWRkX3RhaW50X21vZHVsZShtb2QsIFRBSU5UX0ZPUkNFRF9NT0RVTEUpOwpAQCAtMTAzNSw3ICsxMDM2LDcgQEAKIAljb25zdCB1bnNpZ25lZCBsb25nICpjcmM7CiAKIAlyZXQgPSBmaW5kX3N5bWJvbChuYW1lLCAmb3duZXIsICZjcmMsCi0JCQkgICEobW9kLT50YWludHMgJiBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUpLCB0cnVlKTsKKwkJCSAgIShtb2QtPnRhaW50cyAmICgxIDw8IFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSkpLCB0cnVlKTsKIAlpZiAoIUlTX0VSUl9WQUxVRShyZXQpKSB7CiAJCS8qIHVzZV9tb2R1bGUgY2FuIGZhaWwgZHVlIHRvIE9PTSwKIAkJICAgb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uIG9yIHVubG9hZGluZyAqLwpAQCAtMTE3NSw3ICsxMTc2LDcgQEAKIAkJd2hpbGUgKGktLSA+IDApCiAJCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUobm90ZXNfYXR0cnMtPmRpciwKIAkJCQkJICAgICAgJm5vdGVzX2F0dHJzLT5hdHRyc1tpXSk7Ci0JCWtvYmplY3RfZGVsKG5vdGVzX2F0dHJzLT5kaXIpOworCQlrb2JqZWN0X3B1dChub3Rlc19hdHRycy0+ZGlyKTsKIAl9CiAJa2ZyZWUobm90ZXNfYXR0cnMpOwogfQpAQCAtMTYzOSw3ICsxNjQwLDcgQEAKIAkJbGljZW5zZSA9ICJ1bnNwZWNpZmllZCI7CiAKIAlpZiAoIWxpY2Vuc2VfaXNfZ3BsX2NvbXBhdGlibGUobGljZW5zZSkpIHsKLQkJaWYgKCEodGFpbnRlZCAmIFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSkpCisJCWlmICghdGVzdF90YWludChUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG1vZHVsZSBsaWNlbnNlICclcycgdGFpbnRzICIKIAkJCQkia2VybmVsLlxuIiwgbW9kLT5uYW1lLCBsaWNlbnNlKTsKIAkJYWRkX3RhaW50X21vZHVsZShtb2QsIFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSk7CkBAIC0xNzg4LDYgKzE3ODksMzMgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfS0FMTFNZTVMgKi8KIAorI2lmZGVmIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRworc3RhdGljIHZvaWQgZHluYW1pY19wcmludGtfc2V0dXAoRWxmX1NoZHIgKnNlY2hkcnMsIHVuc2lnbmVkIGludCB2ZXJib3NlaW5kZXgpCit7CisJc3RydWN0IG1vZF9kZWJ1ZyAqZGVidWdfaW5mbzsKKwl1bnNpZ25lZCBsb25nIHBvcywgZW5kOworCXVuc2lnbmVkIGludCBudW1fdmVyYm9zZTsKKworCXBvcyA9IHNlY2hkcnNbdmVyYm9zZWluZGV4XS5zaF9hZGRyOworCW51bV92ZXJib3NlID0gc2VjaGRyc1t2ZXJib3NlaW5kZXhdLnNoX3NpemUgLworCQkJCXNpemVvZihzdHJ1Y3QgbW9kX2RlYnVnKTsKKwllbmQgPSBwb3MgKyAobnVtX3ZlcmJvc2UgKiBzaXplb2Yoc3RydWN0IG1vZF9kZWJ1ZykpOworCisJZm9yICg7IHBvcyA8IGVuZDsgcG9zICs9IHNpemVvZihzdHJ1Y3QgbW9kX2RlYnVnKSkgeworCQlkZWJ1Z19pbmZvID0gKHN0cnVjdCBtb2RfZGVidWcgKilwb3M7CisJCXJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGRlYnVnX2luZm8tPm1vZG5hbWUsCisJCQlkZWJ1Z19pbmZvLT50eXBlLCBkZWJ1Z19pbmZvLT5sb2dpY2FsX21vZG5hbWUsCisJCQlkZWJ1Z19pbmZvLT5mbGFnX25hbWVzLCBkZWJ1Z19pbmZvLT5oYXNoLAorCQkJZGVidWdfaW5mby0+aGFzaDIpOworCX0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZHluYW1pY19wcmludGtfc2V0dXAoRWxmX1NoZHIgKnNlY2hkcnMsCisJCQkJCXVuc2lnbmVkIGludCB2ZXJib3NlaW5kZXgpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHICovCisKIHN0YXRpYyB2b2lkICptb2R1bGVfYWxsb2NfdXBkYXRlX2JvdW5kcyh1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJdm9pZCAqcmV0ID0gbW9kdWxlX2FsbG9jKHNpemUpOwpAQCAtMTgxMSw2ICsxODM5LDcgQEAKIAlFbGZfRWhkciAqaGRyOwogCUVsZl9TaGRyICpzZWNoZHJzOwogCWNoYXIgKnNlY3N0cmluZ3MsICphcmdzLCAqbW9kbWFnaWMsICpzdHJ0YWIgPSBOVUxMOworCWNoYXIgKnN0YWdpbmc7CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IHN5bWluZGV4ID0gMDsKIAl1bnNpZ25lZCBpbnQgc3RyaW5kZXggPSAwOwpAQCAtMTgzNiw2ICsxODY1LDcgQEAKICNlbmRpZgogCXVuc2lnbmVkIGludCBtYXJrZXJzaW5kZXg7CiAJdW5zaWduZWQgaW50IG1hcmtlcnNzdHJpbmdzaW5kZXg7CisJdW5zaWduZWQgaW50IHZlcmJvc2VpbmRleDsKIAl1bnNpZ25lZCBpbnQgdHJhY2Vwb2ludHNpbmRleDsKIAl1bnNpZ25lZCBpbnQgdHJhY2Vwb2ludHNzdHJpbmdzaW5kZXg7CiAJdW5zaWduZWQgaW50IG1jb3VudGluZGV4OwpAQCAtMTk2OSw2ICsxOTk5LDE0IEBACiAJCWdvdG8gZnJlZV9oZHI7CiAJfQogCisJc3RhZ2luZyA9IGdldF9tb2RpbmZvKHNlY2hkcnMsIGluZm9pbmRleCwgInN0YWdpbmciKTsKKwlpZiAoc3RhZ2luZykgeworCQlhZGRfdGFpbnRfbW9kdWxlKG1vZCwgVEFJTlRfQ1JBUCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBtb2R1bGUgaXMgZnJvbSB0aGUgc3RhZ2luZyBkaXJlY3RvcnksIgorCQkgICAgICAgIiB0aGUgcXVhbGl0eSBpcyB1bmtub3duLCB5b3UgaGF2ZSBiZWVuIHdhcm5lZC5cbiIsCisJCSAgICAgICBtb2QtPm5hbWUpOworCX0KKwogCS8qIE5vdyBjb3B5IGluIGFyZ3MgKi8KIAlhcmdzID0gc3RybmR1cF91c2VyKHVhcmdzLCB+MFVMID4+IDEpOwogCWlmIChJU19FUlIoYXJncykpIHsKQEAgLTIxMjYsNiArMjE2NCw3IEBACiAJbWFya2Vyc2luZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19tYXJrZXJzIik7CiAgCW1hcmtlcnNzdHJpbmdzaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsCiAJCQkJCSJfX21hcmtlcnNfc3RyaW5ncyIpOworCXZlcmJvc2VpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fdmVyYm9zZSIpOwogCXRyYWNlcG9pbnRzaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX3RyYWNlcG9pbnRzIik7CiAJdHJhY2Vwb2ludHNzdHJpbmdzaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsCiAJCQkJCSJfX3RyYWNlcG9pbnRzX3N0cmluZ3MiKTsKQEAgLTIxODgsNiArMjIyNyw3IEBACiAJCW1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT5tYXJrZXJzLAogCQkJbW9kLT5tYXJrZXJzICsgbW9kLT5udW1fbWFya2Vycyk7CiAjZW5kaWYKKwlkeW5hbWljX3ByaW50a19zZXR1cChzZWNoZHJzLCB2ZXJib3NlaW5kZXgpOwogI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUwogCQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPnRyYWNlcG9pbnRzLAogCQkJbW9kLT50cmFjZXBvaW50cyArIG1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKQEAgLTI1ODQsMTAgKzI2MjQsMTIgQEAKIAkgICAgbW9kLT5zdGF0ZSA9PSBNT0RVTEVfU1RBVEVfR09JTkcgfHwKIAkgICAgbW9kLT5zdGF0ZSA9PSBNT0RVTEVfU1RBVEVfQ09NSU5HKSB7CiAJCWJ1ZltieCsrXSA9ICcoJzsKLQkJaWYgKG1vZC0+dGFpbnRzICYgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKQorCQlpZiAobW9kLT50YWludHMgJiAoMSA8PCBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUpKQogCQkJYnVmW2J4KytdID0gJ1AnOwotCQlpZiAobW9kLT50YWludHMgJiBUQUlOVF9GT1JDRURfTU9EVUxFKQorCQlpZiAobW9kLT50YWludHMgJiAoMSA8PCBUQUlOVF9GT1JDRURfTU9EVUxFKSkKIAkJCWJ1ZltieCsrXSA9ICdGJzsKKwkJaWYgKG1vZC0+dGFpbnRzICYgKDEgPDwgVEFJTlRfQ1JBUCkpCisJCQlidWZbYngrK10gPSAnQyc7CiAJCS8qCiAJCSAqIFRBSU5UX0ZPUkNFRF9STU1PRDogY291bGQgYmUgYWRkZWQuCiAJCSAqIFRBSU5UX1VOU0FGRV9TTVAsIFRBSU5UX01BQ0hJTkVfQ0hFQ0ssIFRBSU5UX0JBRF9QQUdFIGRvbid0CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCmluZGV4IDEyYzVhMGEuLmJkYTU2MWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYW5pYy5jCisrKyBiL2tlcm5lbC9wYW5pYy5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KIAogaW50IHBhbmljX29uX29vcHM7Ci1pbnQgdGFpbnRlZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRhaW50ZWRfbWFzazsKIHN0YXRpYyBpbnQgcGF1c2Vfb25fb29wczsKIHN0YXRpYyBpbnQgcGF1c2Vfb25fb29wc19mbGFnOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwYXVzZV9vbl9vb3BzX2xvY2spOwpAQCAtMTQzLDYgKzE0MywyNyBAQAogCiBFWFBPUlRfU1lNQk9MKHBhbmljKTsKIAorCitzdHJ1Y3QgdG50IHsKKwl1OCBiaXQ7CisJY2hhciB0cnVlOworCWNoYXIgZmFsc2U7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRudCB0bnRzW10gPSB7CisJeyBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUsICdQJywgJ0cnIH0sCisJeyBUQUlOVF9GT1JDRURfTU9EVUxFLCAnRicsICcgJyB9LAorCXsgVEFJTlRfVU5TQUZFX1NNUCwgJ1MnLCAnICcgfSwKKwl7IFRBSU5UX0ZPUkNFRF9STU1PRCwgJ1InLCAnICcgfSwKKwl7IFRBSU5UX01BQ0hJTkVfQ0hFQ0ssICdNJywgJyAnIH0sCisJeyBUQUlOVF9CQURfUEFHRSwgJ0InLCAnICcgfSwKKwl7IFRBSU5UX1VTRVIsICdVJywgJyAnIH0sCisJeyBUQUlOVF9ESUUsICdEJywgJyAnIH0sCisJeyBUQUlOVF9PVkVSUklEREVOX0FDUElfVEFCTEUsICdBJywgJyAnIH0sCisJeyBUQUlOVF9XQVJOLCAnVycsICcgJyB9LAorCXsgVEFJTlRfQ1JBUCwgJ0MnLCAnICcgfSwKK307CisKIC8qKgogICoJcHJpbnRfdGFpbnRlZCAtIHJldHVybiBhIHN0cmluZyB0byByZXByZXNlbnQgdGhlIGtlcm5lbCB0YWludCBzdGF0ZS4KICAqCkBAIC0xNTUsMzUgKzE3Niw0NSBAQAogICogICdVJyAtIFVzZXJzcGFjZS1kZWZpbmVkIG5hdWdodGluZXNzLgogICogICdBJyAtIEFDUEkgdGFibGUgb3ZlcnJpZGRlbi4KICAqICAnVycgLSBUYWludCBvbiB3YXJuaW5nLgorICogICdDJyAtIG1vZHVsZXMgZnJvbSBkcml2ZXJzL3N0YWdpbmcgYXJlIGxvYWRlZC4KICAqCiAgKglUaGUgc3RyaW5nIGlzIG92ZXJ3cml0dGVuIGJ5IHRoZSBuZXh0IGNhbGwgdG8gcHJpbnRfdGFpbnQoKS4KICAqLwotCiBjb25zdCBjaGFyICpwcmludF90YWludGVkKHZvaWQpCiB7Ci0Jc3RhdGljIGNoYXIgYnVmWzIwXTsKLQlpZiAodGFpbnRlZCkgewotCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiVGFpbnRlZDogJWMlYyVjJWMlYyVjJWMlYyVjJWMiLAotCQkJdGFpbnRlZCAmIFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSA/ICdQJyA6ICdHJywKLQkJCXRhaW50ZWQgJiBUQUlOVF9GT1JDRURfTU9EVUxFID8gJ0YnIDogJyAnLAotCQkJdGFpbnRlZCAmIFRBSU5UX1VOU0FGRV9TTVAgPyAnUycgOiAnICcsCi0JCQl0YWludGVkICYgVEFJTlRfRk9SQ0VEX1JNTU9EID8gJ1InIDogJyAnLAotCQkJdGFpbnRlZCAmIFRBSU5UX01BQ0hJTkVfQ0hFQ0sgPyAnTScgOiAnICcsCi0JCQl0YWludGVkICYgVEFJTlRfQkFEX1BBR0UgPyAnQicgOiAnICcsCi0JCQl0YWludGVkICYgVEFJTlRfVVNFUiA/ICdVJyA6ICcgJywKLQkJCXRhaW50ZWQgJiBUQUlOVF9ESUUgPyAnRCcgOiAnICcsCi0JCQl0YWludGVkICYgVEFJTlRfT1ZFUlJJRERFTl9BQ1BJX1RBQkxFID8gJ0EnIDogJyAnLAotCQkJdGFpbnRlZCAmIFRBSU5UX1dBUk4gPyAnVycgOiAnICcpOwotCX0KLQllbHNlCisJc3RhdGljIGNoYXIgYnVmW0FSUkFZX1NJWkUodG50cykgKyBzaXplb2YoIlRhaW50ZWQ6ICIpICsgMV07CisKKwlpZiAodGFpbnRlZF9tYXNrKSB7CisJCWNoYXIgKnM7CisJCWludCBpOworCisJCXMgPSBidWYgKyBzcHJpbnRmKGJ1ZiwgIlRhaW50ZWQ6ICIpOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0bnRzKTsgaSsrKSB7CisJCQljb25zdCBzdHJ1Y3QgdG50ICp0ID0gJnRudHNbaV07CisJCQkqcysrID0gdGVzdF9iaXQodC0+Yml0LCAmdGFpbnRlZF9tYXNrKSA/CisJCQkJCXQtPnRydWUgOiB0LT5mYWxzZTsKKwkJfQorCQkqcyA9IDA7CisJfSBlbHNlCiAJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJOb3QgdGFpbnRlZCIpOwogCXJldHVybihidWYpOwogfQogCitpbnQgdGVzdF90YWludCh1bnNpZ25lZCBmbGFnKQoreworCXJldHVybiB0ZXN0X2JpdChmbGFnLCAmdGFpbnRlZF9tYXNrKTsKK30KK0VYUE9SVF9TWU1CT0wodGVzdF90YWludCk7CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3RhaW50KHZvaWQpCit7CisJcmV0dXJuIHRhaW50ZWRfbWFzazsKK30KKwogdm9pZCBhZGRfdGFpbnQodW5zaWduZWQgZmxhZykKIHsKIAlkZWJ1Z19sb2NrcyA9IDA7IC8qIGNhbid0IHRydXN0IHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGtlcm5lbCBhbnltb3JlICovCi0JdGFpbnRlZCB8PSBmbGFnOworCXNldF9iaXQoZmxhZywgJnRhaW50ZWRfbWFzayk7CiB9CiBFWFBPUlRfU1lNQk9MKGFkZF90YWludCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCmluZGV4IGM0MmEwM2EuLjE1M2RjYjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwpAQCAtNyw2ICs3LDkzIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgdGhyZWFkX2dyb3VwX2NwdXRpbWUgc3RydWN0dXJlIGFwcHJvcHJpYXRlbHkgYW5kIGZpbGwgaW4gdGhlCisgKiBjdXJyZW50IHZhbHVlcyBvZiB0aGUgZmllbGRzLiAgQ2FsbGVkIGZyb20gY29weV9zaWduYWwoKSB2aWEKKyAqIHRocmVhZF9ncm91cF9jcHV0aW1lX2Nsb25lX3RocmVhZCgpIHdoZW4gYWRkaW5nIGEgc2Vjb25kIG9yIHN1YnNlcXVlbnQKKyAqIHRocmVhZCB0byBhIHRocmVhZCBncm91cC4gIEFzc3VtZXMgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCB3aGVuIGNhbGxlZC4KKyAqLworaW50IHRocmVhZF9ncm91cF9jcHV0aW1lX2FsbG9jKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPSB0c2stPnNpZ25hbDsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lICpjcHV0aW1lOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIG11bHRpcGxlIHRocmVhZHMgYW5kIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhCisJICogcGVyLUNQVSB0YXNrX2NwdXRpbWUgc3RydWN0IChjaGVja2VkIGluIHRoZSBjYWxsZXIpLCBhbGxvY2F0ZQorCSAqIG9uZSBhbmQgZmlsbCBpdCBpbiB3aXRoIHRoZSB0aW1lcyBhY2N1bXVsYXRlZCBzbyBmYXIuICBXZSBtYXkKKwkgKiByYWNlIHdpdGggYW5vdGhlciB0aHJlYWQgc28gcmVjaGVjayBhZnRlciB3ZSBwaWNrIHVwIHRoZSBzaWdoYW5kCisJICogbG9jay4KKwkgKi8KKwljcHV0aW1lID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB0YXNrX2NwdXRpbWUpOworCWlmIChjcHV0aW1lID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJaWYgKHNpZy0+Y3B1dGltZS50b3RhbHMpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCQlmcmVlX3BlcmNwdShjcHV0aW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCXNpZy0+Y3B1dGltZS50b3RhbHMgPSBjcHV0aW1lOworCWNwdXRpbWUgPSBwZXJfY3B1X3B0cihzaWctPmNwdXRpbWUudG90YWxzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCWNwdXRpbWUtPnV0aW1lID0gdHNrLT51dGltZTsKKwljcHV0aW1lLT5zdGltZSA9IHRzay0+c3RpbWU7CisJY3B1dGltZS0+c3VtX2V4ZWNfcnVudGltZSA9IHRzay0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKwlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdGhyZWFkX2dyb3VwX2NwdXRpbWUgLSBTdW0gdGhlIHRocmVhZCBncm91cCB0aW1lIGZpZWxkcyBhY3Jvc3MgYWxsIENQVXMuCisgKgorICogQHRzazoJVGhlIHRhc2sgd2UgdXNlIHRvIGlkZW50aWZ5IHRoZSB0aHJlYWQgZ3JvdXAuCisgKiBAdGltZXM6CXRhc2tfY3B1dGltZSBzdHJ1Y3R1cmUgaW4gd2hpY2ggd2UgcmV0dXJuIHRoZSBzdW1tZWQgZmllbGRzLgorICoKKyAqIFdhbGsgdGhlIGxpc3Qgb2YgQ1BVcyB0byBzdW0gdGhlIHBlci1DUFUgdGltZSBmaWVsZHMgaW4gdGhlIHRocmVhZCBncm91cAorICogdGltZSBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgdGhyZWFkX2dyb3VwX2NwdXRpbWUoCisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJc3RydWN0IHRhc2tfY3B1dGltZSAqdGltZXMpCit7CisJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZzsKKwlpbnQgaTsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lICp0b3Q7CisKKwlzaWcgPSB0c2stPnNpZ25hbDsKKwlpZiAodW5saWtlbHkoIXNpZykgfHwgIXNpZy0+Y3B1dGltZS50b3RhbHMpIHsKKwkJdGltZXMtPnV0aW1lID0gdHNrLT51dGltZTsKKwkJdGltZXMtPnN0aW1lID0gdHNrLT5zdGltZTsKKwkJdGltZXMtPnN1bV9leGVjX3J1bnRpbWUgPSB0c2stPnNlLnN1bV9leGVjX3J1bnRpbWU7CisJCXJldHVybjsKKwl9CisJdGltZXMtPnN0aW1lID0gdGltZXMtPnV0aW1lID0gY3B1dGltZV96ZXJvOworCXRpbWVzLT5zdW1fZXhlY19ydW50aW1lID0gMDsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgeworCQl0b3QgPSBwZXJfY3B1X3B0cih0c2stPnNpZ25hbC0+Y3B1dGltZS50b3RhbHMsIGkpOworCQl0aW1lcy0+dXRpbWUgPSBjcHV0aW1lX2FkZCh0aW1lcy0+dXRpbWUsIHRvdC0+dXRpbWUpOworCQl0aW1lcy0+c3RpbWUgPSBjcHV0aW1lX2FkZCh0aW1lcy0+c3RpbWUsIHRvdC0+c3RpbWUpOworCQl0aW1lcy0+c3VtX2V4ZWNfcnVudGltZSArPSB0b3QtPnN1bV9leGVjX3J1bnRpbWU7CisJfQorfQorCisvKgorICogQ2FsbGVkIGFmdGVyIHVwZGF0aW5nIFJMSU1JVF9DUFUgdG8gc2V0IHRpbWVyIGV4cGlyYXRpb24gaWYgbmVjZXNzYXJ5LgorICovCit2b2lkIHVwZGF0ZV9ybGltaXRfY3B1KHVuc2lnbmVkIGxvbmcgcmxpbV9uZXcpCit7CisJY3B1dGltZV90IGNwdXRpbWU7CisKKwljcHV0aW1lID0gc2Vjc190b19jcHV0aW1lKHJsaW1fbmV3KTsKKwlpZiAoY3B1dGltZV9lcShjdXJyZW50LT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSB8fAorCSAgICBjcHV0aW1lX2x0KGN1cnJlbnQtPnNpZ25hbC0+aXRfcHJvZl9leHBpcmVzLCBjcHV0aW1lKSkgeworCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkJc2V0X3Byb2Nlc3NfY3B1X3RpbWVyKGN1cnJlbnQsIENQVUNMT0NLX1BST0YsICZjcHV0aW1lLCBOVUxMKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl9Cit9CiAKIHN0YXRpYyBpbnQgY2hlY2tfY2xvY2soY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrKQogewpAQCAtMTU4LDEwICsyNDUsNiBAQAogewogCXJldHVybiBwLT51dGltZTsKIH0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQlyZXR1cm4gdGFza19zY2hlZF9ydW50aW1lKHApOwotfQogCiBpbnQgcG9zaXhfY3B1X2Nsb2NrX2dldHJlcyhjb25zdCBjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIHN0cnVjdCB0aW1lc3BlYyAqdHApCiB7CkBAIC0yMTEsNDYgKzI5NCw3IEBACiAJCWNwdS0+Y3B1ID0gdmlydF90aWNrcyhwKTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVDTE9DS19TQ0hFRDoKLQkJY3B1LT5zY2hlZCA9IHNjaGVkX25zKHApOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTYW1wbGUgYSBwcm9jZXNzICh0aHJlYWQgZ3JvdXApIGNsb2NrIGZvciB0aGUgZ2l2ZW4gZ3JvdXBfbGVhZGVyIHRhc2suCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRhc2tsaXN0X2xvY2sgaGVsZCBmb3IgcmVhZGluZy4KLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGFza2xpc3RfbG9jayBoZWxkIGZvciByZWFkaW5nLCBhbmQgcC0+c2lnaGFuZC0+c2lnbG9jay4KLSAqLwotc3RhdGljIGludCBjcHVfY2xvY2tfc2FtcGxlX2dyb3VwX2xvY2tlZCh1bnNpZ25lZCBpbnQgY2xvY2tfaWR4LAotCQkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICpwLAotCQkJCQkgdW5pb24gY3B1X3RpbWVfY291bnQgKmNwdSkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSBwOwotIAlzd2l0Y2ggKGNsb2NrX2lkeCkgewotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKLQkJY3B1LT5jcHUgPSBjcHV0aW1lX2FkZChwLT5zaWduYWwtPnV0aW1lLCBwLT5zaWduYWwtPnN0aW1lKTsKLQkJZG8gewotCQkJY3B1LT5jcHUgPSBjcHV0aW1lX2FkZChjcHUtPmNwdSwgcHJvZl90aWNrcyh0KSk7Ci0JCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCX0gd2hpbGUgKHQgIT0gcCk7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVQ0xPQ0tfVklSVDoKLQkJY3B1LT5jcHUgPSBwLT5zaWduYWwtPnV0aW1lOwotCQlkbyB7Ci0JCQljcHUtPmNwdSA9IGNwdXRpbWVfYWRkKGNwdS0+Y3B1LCB2aXJ0X3RpY2tzKHQpKTsKLQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKLQkJfSB3aGlsZSAodCAhPSBwKTsKLQkJYnJlYWs7Ci0JY2FzZSBDUFVDTE9DS19TQ0hFRDoKLQkJY3B1LT5zY2hlZCA9IHAtPnNpZ25hbC0+c3VtX3NjaGVkX3J1bnRpbWU7Ci0JCS8qIEFkZCBpbiBlYWNoIG90aGVyIGxpdmUgdGhyZWFkLiAgKi8KLQkJd2hpbGUgKCh0ID0gbmV4dF90aHJlYWQodCkpICE9IHApIHsKLQkJCWNwdS0+c2NoZWQgKz0gdC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKLQkJfQotCQljcHUtPnNjaGVkICs9IHNjaGVkX25zKHApOworCQljcHUtPnNjaGVkID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZSArIHRhc2tfZGVsdGFfZXhlYyhwKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpAQCAtMjY0LDEzICszMDgsMjMgQEAKIAkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQkgIHVuaW9uIGNwdV90aW1lX2NvdW50ICpjcHUpCiB7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JcmV0ID0gY3B1X2Nsb2NrX3NhbXBsZV9ncm91cF9sb2NrZWQoQ1BVQ0xPQ0tfV0hJQ0god2hpY2hfY2xvY2spLCBwLAotCQkJCQkgICAgY3B1KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CisKKwl0aHJlYWRfZ3JvdXBfY3B1dGltZShwLCAmY3B1dGltZSk7CisJc3dpdGNoICh3aGljaF9jbG9jaykgeworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKKwkJY3B1LT5jcHUgPSBjcHV0aW1lX2FkZChjcHV0aW1lLnV0aW1lLCBjcHV0aW1lLnN0aW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVDTE9DS19WSVJUOgorCQljcHUtPmNwdSA9IGNwdXRpbWUudXRpbWU7CisJCWJyZWFrOworCWNhc2UgQ1BVQ0xPQ0tfU0NIRUQ6CisJCWNwdS0+c2NoZWQgPSBjcHV0aW1lLnN1bV9leGVjX3J1bnRpbWUgKyB0YXNrX2RlbHRhX2V4ZWMocCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKIH0KIAogCkBAIC00NzEsODAgKzUyNSwxMSBAQAogfQogdm9pZCBwb3NpeF9jcHVfdGltZXJzX2V4aXRfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOworCisJdGhyZWFkX2dyb3VwX2NwdXRpbWUodHNrLCAmY3B1dGltZSk7CiAJY2xlYW51cF90aW1lcnModHNrLT5zaWduYWwtPmNwdV90aW1lcnMsCi0JCSAgICAgICBjcHV0aW1lX2FkZCh0c2stPnV0aW1lLCB0c2stPnNpZ25hbC0+dXRpbWUpLAotCQkgICAgICAgY3B1dGltZV9hZGQodHNrLT5zdGltZSwgdHNrLT5zaWduYWwtPnN0aW1lKSwKLQkJICAgICB0c2stPnNlLnN1bV9leGVjX3J1bnRpbWUgKyB0c2stPnNpZ25hbC0+c3VtX3NjaGVkX3J1bnRpbWUpOwotfQotCi0KLS8qCi0gKiBTZXQgdGhlIGV4cGlyeSB0aW1lcyBvZiBhbGwgdGhlIHRocmVhZHMgaW4gdGhlIHByb2Nlc3Mgc28gb25lIG9mIHRoZW0KLSAqIHdpbGwgZ28gb2ZmIGJlZm9yZSB0aGUgcHJvY2VzcyBjdW11bGF0aXZlIGV4cGlyeSB0b3RhbCBpcyByZWFjaGVkLgotICovCi1zdGF0aWMgdm9pZCBwcm9jZXNzX3RpbWVyX3JlYmFsYW5jZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCi0JCQkJICAgIHVuc2lnbmVkIGludCBjbG9ja19pZHgsCi0JCQkJICAgIHVuaW9uIGNwdV90aW1lX2NvdW50IGV4cGlyZXMsCi0JCQkJICAgIHVuaW9uIGNwdV90aW1lX2NvdW50IHZhbCkKLXsKLQljcHV0aW1lX3QgdGlja3MsIGxlZnQ7Ci0JdW5zaWduZWQgbG9uZyBsb25nIG5zLCBuc2xlZnQ7Ci0gCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHA7Ci0JdW5zaWduZWQgaW50IG50aHJlYWRzID0gYXRvbWljX3JlYWQoJnAtPnNpZ25hbC0+bGl2ZSk7Ci0KLQlpZiAoIW50aHJlYWRzKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKGNsb2NrX2lkeCkgewotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlicmVhazsKLQljYXNlIENQVUNMT0NLX1BST0Y6Ci0JCWxlZnQgPSBjcHV0aW1lX2Rpdl9ub25femVybyhjcHV0aW1lX3N1YihleHBpcmVzLmNwdSwgdmFsLmNwdSksCi0JCQkJICAgICAgIG50aHJlYWRzKTsKLQkJZG8gewotCQkJaWYgKGxpa2VseSghKHQtPmZsYWdzICYgUEZfRVhJVElORykpKSB7Ci0JCQkJdGlja3MgPSBjcHV0aW1lX2FkZChwcm9mX3RpY2tzKHQpLCBsZWZ0KTsKLQkJCQlpZiAoY3B1dGltZV9lcSh0LT5pdF9wcm9mX2V4cGlyZXMsCi0JCQkJCSAgICAgICBjcHV0aW1lX3plcm8pIHx8Ci0JCQkJICAgIGNwdXRpbWVfZ3QodC0+aXRfcHJvZl9leHBpcmVzLCB0aWNrcykpIHsKLQkJCQkJdC0+aXRfcHJvZl9leHBpcmVzID0gdGlja3M7Ci0JCQkJfQotCQkJfQotCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQl9IHdoaWxlICh0ICE9IHApOwotCQlicmVhazsKLQljYXNlIENQVUNMT0NLX1ZJUlQ6Ci0JCWxlZnQgPSBjcHV0aW1lX2Rpdl9ub25femVybyhjcHV0aW1lX3N1YihleHBpcmVzLmNwdSwgdmFsLmNwdSksCi0JCQkJICAgICAgIG50aHJlYWRzKTsKLQkJZG8gewotCQkJaWYgKGxpa2VseSghKHQtPmZsYWdzICYgUEZfRVhJVElORykpKSB7Ci0JCQkJdGlja3MgPSBjcHV0aW1lX2FkZCh2aXJ0X3RpY2tzKHQpLCBsZWZ0KTsKLQkJCQlpZiAoY3B1dGltZV9lcSh0LT5pdF92aXJ0X2V4cGlyZXMsCi0JCQkJCSAgICAgICBjcHV0aW1lX3plcm8pIHx8Ci0JCQkJICAgIGNwdXRpbWVfZ3QodC0+aXRfdmlydF9leHBpcmVzLCB0aWNrcykpIHsKLQkJCQkJdC0+aXRfdmlydF9leHBpcmVzID0gdGlja3M7Ci0JCQkJfQotCQkJfQotCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQl9IHdoaWxlICh0ICE9IHApOwotCQlicmVhazsKLQljYXNlIENQVUNMT0NLX1NDSEVEOgotCQluc2xlZnQgPSBleHBpcmVzLnNjaGVkIC0gdmFsLnNjaGVkOwotCQlkb19kaXYobnNsZWZ0LCBudGhyZWFkcyk7Ci0JCW5zbGVmdCA9IG1heF90KHVuc2lnbmVkIGxvbmcgbG9uZywgbnNsZWZ0LCAxKTsKLQkJZG8gewotCQkJaWYgKGxpa2VseSghKHQtPmZsYWdzICYgUEZfRVhJVElORykpKSB7Ci0JCQkJbnMgPSB0LT5zZS5zdW1fZXhlY19ydW50aW1lICsgbnNsZWZ0OwotCQkJCWlmICh0LT5pdF9zY2hlZF9leHBpcmVzID09IDAgfHwKLQkJCQkgICAgdC0+aXRfc2NoZWRfZXhwaXJlcyA+IG5zKSB7Ci0JCQkJCXQtPml0X3NjaGVkX2V4cGlyZXMgPSBuczsKLQkJCQl9Ci0JCQl9Ci0JCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCX0gd2hpbGUgKHQgIT0gcCk7Ci0JCWJyZWFrOwotCX0KKwkJICAgICAgIGNwdXRpbWUudXRpbWUsIGNwdXRpbWUuc3RpbWUsIGNwdXRpbWUuc3VtX2V4ZWNfcnVudGltZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyX2RlYWRfdGFzayhzdHJ1Y3Qga19pdGltZXIgKnRpbWVyLCB1bmlvbiBjcHVfdGltZV9jb3VudCBub3cpCkBAIC02MDgsMjkgKzU5MywzMiBAQAogCQkJZGVmYXVsdDoKIAkJCQlCVUcoKTsKIAkJCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKLQkJCQlpZiAoY3B1dGltZV9lcShwLT5pdF9wcm9mX2V4cGlyZXMsCisJCQkJaWYgKGNwdXRpbWVfZXEocC0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwLAogCQkJCQkgICAgICAgY3B1dGltZV96ZXJvKSB8fAotCQkJCSAgICBjcHV0aW1lX2d0KHAtPml0X3Byb2ZfZXhwaXJlcywKKwkJCQkgICAgY3B1dGltZV9ndChwLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAsCiAJCQkJCSAgICAgICBudC0+ZXhwaXJlcy5jcHUpKQotCQkJCQlwLT5pdF9wcm9mX2V4cGlyZXMgPSBudC0+ZXhwaXJlcy5jcHU7CisJCQkJCXAtPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9CisJCQkJCQludC0+ZXhwaXJlcy5jcHU7CiAJCQkJYnJlYWs7CiAJCQljYXNlIENQVUNMT0NLX1ZJUlQ6Ci0JCQkJaWYgKGNwdXRpbWVfZXEocC0+aXRfdmlydF9leHBpcmVzLAorCQkJCWlmIChjcHV0aW1lX2VxKHAtPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCwKIAkJCQkJICAgICAgIGNwdXRpbWVfemVybykgfHwKLQkJCQkgICAgY3B1dGltZV9ndChwLT5pdF92aXJ0X2V4cGlyZXMsCisJCQkJICAgIGNwdXRpbWVfZ3QocC0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwLAogCQkJCQkgICAgICAgbnQtPmV4cGlyZXMuY3B1KSkKLQkJCQkJcC0+aXRfdmlydF9leHBpcmVzID0gbnQtPmV4cGlyZXMuY3B1OworCQkJCQlwLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPQorCQkJCQkJbnQtPmV4cGlyZXMuY3B1OwogCQkJCWJyZWFrOwogCQkJY2FzZSBDUFVDTE9DS19TQ0hFRDoKLQkJCQlpZiAocC0+aXRfc2NoZWRfZXhwaXJlcyA9PSAwIHx8Ci0JCQkJICAgIHAtPml0X3NjaGVkX2V4cGlyZXMgPiBudC0+ZXhwaXJlcy5zY2hlZCkKLQkJCQkJcC0+aXRfc2NoZWRfZXhwaXJlcyA9IG50LT5leHBpcmVzLnNjaGVkOworCQkJCWlmIChwLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID09IDAgfHwKKwkJCQkgICAgcC0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA+CisJCQkJCQkJbnQtPmV4cGlyZXMuc2NoZWQpCisJCQkJCXAtPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPQorCQkJCQkJbnQtPmV4cGlyZXMuc2NoZWQ7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKgotCQkJICogRm9yIGEgcHJvY2VzcyB0aW1lciwgd2UgbXVzdCBiYWxhbmNlCi0JCQkgKiBhbGwgdGhlIGxpdmUgdGhyZWFkcycgZXhwaXJhdGlvbnMuCisJCQkgKiBGb3IgYSBwcm9jZXNzIHRpbWVyLCBzZXQgdGhlIGNhY2hlZCBleHBpcmF0aW9uIHRpbWUuCiAJCQkgKi8KIAkJCXN3aXRjaCAoQ1BVQ0xPQ0tfV0hJQ0godGltZXItPml0X2Nsb2NrKSkgewogCQkJZGVmYXVsdDoKQEAgLTY0MSw3ICs2MjksOSBAQAogCQkJCSAgICBjcHV0aW1lX2x0KHAtPnNpZ25hbC0+aXRfdmlydF9leHBpcmVzLAogCQkJCQkgICAgICAgdGltZXItPml0LmNwdS5leHBpcmVzLmNwdSkpCiAJCQkJCWJyZWFrOwotCQkJCWdvdG8gcmViYWxhbmNlOworCQkJCXAtPnNpZ25hbC0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0KKwkJCQkJdGltZXItPml0LmNwdS5leHBpcmVzLmNwdTsKKwkJCQlicmVhazsKIAkJCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKIAkJCQlpZiAoIWNwdXRpbWVfZXEocC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMsCiAJCQkJCQljcHV0aW1lX3plcm8pICYmCkBAIC02NTIsMTMgKzY0MiwxMiBAQAogCQkJCWlmIChpICE9IFJMSU1fSU5GSU5JVFkgJiYKIAkJCQkgICAgaSA8PSBjcHV0aW1lX3RvX3NlY3ModGltZXItPml0LmNwdS5leHBpcmVzLmNwdSkpCiAJCQkJCWJyZWFrOwotCQkJCWdvdG8gcmViYWxhbmNlOworCQkJCXAtPnNpZ25hbC0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0KKwkJCQkJdGltZXItPml0LmNwdS5leHBpcmVzLmNwdTsKKwkJCQlicmVhazsKIAkJCWNhc2UgQ1BVQ0xPQ0tfU0NIRUQ6Ci0JCQlyZWJhbGFuY2U6Ci0JCQkJcHJvY2Vzc190aW1lcl9yZWJhbGFuY2UoCi0JCQkJCXRpbWVyLT5pdC5jcHUudGFzaywKLQkJCQkJQ1BVQ0xPQ0tfV0hJQ0godGltZXItPml0X2Nsb2NrKSwKLQkJCQkJdGltZXItPml0LmNwdS5leHBpcmVzLCBub3cpOworCQkJCXAtPnNpZ25hbC0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9CisJCQkJCXRpbWVyLT5pdC5jcHUuZXhwaXJlcy5zY2hlZDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtOTY5LDEzICs5NTgsMTMgQEAKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqY29uc3Qgc2lnID0gdHNrLT5zaWduYWw7CiAKIAltYXhmaXJlID0gMjA7Ci0JdHNrLT5pdF9wcm9mX2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CisJdHNrLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSBjcHV0aW1lX3plcm87CiAJd2hpbGUgKCFsaXN0X2VtcHR5KHRpbWVycykpIHsKIAkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0ID0gbGlzdF9maXJzdF9lbnRyeSh0aW1lcnMsCiAJCQkJCQkgICAgICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsCiAJCQkJCQkgICAgICBlbnRyeSk7CiAJCWlmICghLS1tYXhmaXJlIHx8IGNwdXRpbWVfbHQocHJvZl90aWNrcyh0c2spLCB0LT5leHBpcmVzLmNwdSkpIHsKLQkJCXRzay0+aXRfcHJvZl9leHBpcmVzID0gdC0+ZXhwaXJlcy5jcHU7CisJCQl0c2stPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9IHQtPmV4cGlyZXMuY3B1OwogCQkJYnJlYWs7CiAJCX0KIAkJdC0+ZmlyaW5nID0gMTsKQEAgLTk4NCwxMyArOTczLDEzIEBACiAKIAkrK3RpbWVyczsKIAltYXhmaXJlID0gMjA7Ci0JdHNrLT5pdF92aXJ0X2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CisJdHNrLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSBjcHV0aW1lX3plcm87CiAJd2hpbGUgKCFsaXN0X2VtcHR5KHRpbWVycykpIHsKIAkJc3RydWN0IGNwdV90aW1lcl9saXN0ICp0ID0gbGlzdF9maXJzdF9lbnRyeSh0aW1lcnMsCiAJCQkJCQkgICAgICBzdHJ1Y3QgY3B1X3RpbWVyX2xpc3QsCiAJCQkJCQkgICAgICBlbnRyeSk7CiAJCWlmICghLS1tYXhmaXJlIHx8IGNwdXRpbWVfbHQodmlydF90aWNrcyh0c2spLCB0LT5leHBpcmVzLmNwdSkpIHsKLQkJCXRzay0+aXRfdmlydF9leHBpcmVzID0gdC0+ZXhwaXJlcy5jcHU7CisJCQl0c2stPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9IHQtPmV4cGlyZXMuY3B1OwogCQkJYnJlYWs7CiAJCX0KIAkJdC0+ZmlyaW5nID0gMTsKQEAgLTk5OSwxMyArOTg4LDEzIEBACiAKIAkrK3RpbWVyczsKIAltYXhmaXJlID0gMjA7Ci0JdHNrLT5pdF9zY2hlZF9leHBpcmVzID0gMDsKKwl0c2stPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPSAwOwogCXdoaWxlICghbGlzdF9lbXB0eSh0aW1lcnMpKSB7CiAJCXN0cnVjdCBjcHVfdGltZXJfbGlzdCAqdCA9IGxpc3RfZmlyc3RfZW50cnkodGltZXJzLAogCQkJCQkJICAgICAgc3RydWN0IGNwdV90aW1lcl9saXN0LAogCQkJCQkJICAgICAgZW50cnkpOwogCQlpZiAoIS0tbWF4ZmlyZSB8fCB0c2stPnNlLnN1bV9leGVjX3J1bnRpbWUgPCB0LT5leHBpcmVzLnNjaGVkKSB7Ci0JCQl0c2stPml0X3NjaGVkX2V4cGlyZXMgPSB0LT5leHBpcmVzLnNjaGVkOworCQkJdHNrLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gdC0+ZXhwaXJlcy5zY2hlZDsKIAkJCWJyZWFrOwogCQl9CiAJCXQtPmZpcmluZyA9IDE7CkBAIC0xMDU1LDEwICsxMDQ0LDEwIEBACiB7CiAJaW50IG1heGZpcmU7CiAJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKmNvbnN0IHNpZyA9IHRzay0+c2lnbmFsOwotCWNwdXRpbWVfdCB1dGltZSwgc3RpbWUsIHB0aW1lLCB2aXJ0X2V4cGlyZXMsIHByb2ZfZXhwaXJlczsKKwljcHV0aW1lX3QgdXRpbWUsIHB0aW1lLCB2aXJ0X2V4cGlyZXMsIHByb2ZfZXhwaXJlczsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc3VtX3NjaGVkX3J1bnRpbWUsIHNjaGVkX2V4cGlyZXM7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCXN0cnVjdCBsaXN0X2hlYWQgKnRpbWVycyA9IHNpZy0+Y3B1X3RpbWVyczsKKwlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CiAKIAkvKgogCSAqIERvbid0IHNhbXBsZSB0aGUgY3VycmVudCBwcm9jZXNzIENQVSBjbG9ja3MgaWYgdGhlcmUgYXJlIG5vIHRpbWVycy4KQEAgLTEwNzQsMTggKzEwNjMsMTAgQEAKIAkvKgogCSAqIENvbGxlY3QgdGhlIGN1cnJlbnQgcHJvY2VzcyB0b3RhbHMuCiAJICovCi0JdXRpbWUgPSBzaWctPnV0aW1lOwotCXN0aW1lID0gc2lnLT5zdGltZTsKLQlzdW1fc2NoZWRfcnVudGltZSA9IHNpZy0+c3VtX3NjaGVkX3J1bnRpbWU7Ci0JdCA9IHRzazsKLQlkbyB7Ci0JCXV0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIHQtPnV0aW1lKTsKLQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgdC0+c3RpbWUpOwotCQlzdW1fc2NoZWRfcnVudGltZSArPSB0LT5zZS5zdW1fZXhlY19ydW50aW1lOwotCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JfSB3aGlsZSAodCAhPSB0c2spOwotCXB0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIHN0aW1lKTsKLQorCXRocmVhZF9ncm91cF9jcHV0aW1lKHRzaywgJmNwdXRpbWUpOworCXV0aW1lID0gY3B1dGltZS51dGltZTsKKwlwdGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCBjcHV0aW1lLnN0aW1lKTsKKwlzdW1fc2NoZWRfcnVudGltZSA9IGNwdXRpbWUuc3VtX2V4ZWNfcnVudGltZTsKIAltYXhmaXJlID0gMjA7CiAJcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOwogCXdoaWxlICghbGlzdF9lbXB0eSh0aW1lcnMpKSB7CkBAIC0xMTkzLDYwICsxMTc0LDE4IEBACiAJCX0KIAl9CiAKLQlpZiAoIWNwdXRpbWVfZXEocHJvZl9leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8Ci0JICAgICFjcHV0aW1lX2VxKHZpcnRfZXhwaXJlcywgY3B1dGltZV96ZXJvKSB8fAotCSAgICBzY2hlZF9leHBpcmVzICE9IDApIHsKLQkJLyoKLQkJICogUmViYWxhbmNlIHRoZSB0aHJlYWRzJyBleHBpcnkgdGltZXMgZm9yIHRoZSByZW1haW5pbmcKLQkJICogcHJvY2VzcyBDUFUgdGltZXJzLgotCQkgKi8KLQotCQljcHV0aW1lX3QgcHJvZl9sZWZ0LCB2aXJ0X2xlZnQsIHRpY2tzOwotCQl1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfbGVmdCwgc2NoZWQ7Ci0JCWNvbnN0IHVuc2lnbmVkIGludCBudGhyZWFkcyA9IGF0b21pY19yZWFkKCZzaWctPmxpdmUpOwotCi0JCWlmICghbnRocmVhZHMpCi0JCQlyZXR1cm47Ci0KLQkJcHJvZl9sZWZ0ID0gY3B1dGltZV9zdWIocHJvZl9leHBpcmVzLCB1dGltZSk7Ci0JCXByb2ZfbGVmdCA9IGNwdXRpbWVfc3ViKHByb2ZfbGVmdCwgc3RpbWUpOwotCQlwcm9mX2xlZnQgPSBjcHV0aW1lX2Rpdl9ub25femVybyhwcm9mX2xlZnQsIG50aHJlYWRzKTsKLQkJdmlydF9sZWZ0ID0gY3B1dGltZV9zdWIodmlydF9leHBpcmVzLCB1dGltZSk7Ci0JCXZpcnRfbGVmdCA9IGNwdXRpbWVfZGl2X25vbl96ZXJvKHZpcnRfbGVmdCwgbnRocmVhZHMpOwotCQlpZiAoc2NoZWRfZXhwaXJlcykgewotCQkJc2NoZWRfbGVmdCA9IHNjaGVkX2V4cGlyZXMgLSBzdW1fc2NoZWRfcnVudGltZTsKLQkJCWRvX2RpdihzY2hlZF9sZWZ0LCBudGhyZWFkcyk7Ci0JCQlzY2hlZF9sZWZ0ID0gbWF4X3QodW5zaWduZWQgbG9uZyBsb25nLCBzY2hlZF9sZWZ0LCAxKTsKLQkJfSBlbHNlIHsKLQkJCXNjaGVkX2xlZnQgPSAwOwotCQl9Ci0JCXQgPSB0c2s7Ci0JCWRvIHsKLQkJCWlmICh1bmxpa2VseSh0LT5mbGFncyAmIFBGX0VYSVRJTkcpKQotCQkJCWNvbnRpbnVlOwotCi0JCQl0aWNrcyA9IGNwdXRpbWVfYWRkKGNwdXRpbWVfYWRkKHQtPnV0aW1lLCB0LT5zdGltZSksCi0JCQkJCSAgICBwcm9mX2xlZnQpOwotCQkJaWYgKCFjcHV0aW1lX2VxKHByb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgotCQkJICAgIChjcHV0aW1lX2VxKHQtPml0X3Byb2ZfZXhwaXJlcywgY3B1dGltZV96ZXJvKSB8fAotCQkJICAgICBjcHV0aW1lX2d0KHQtPml0X3Byb2ZfZXhwaXJlcywgdGlja3MpKSkgewotCQkJCXQtPml0X3Byb2ZfZXhwaXJlcyA9IHRpY2tzOwotCQkJfQotCi0JCQl0aWNrcyA9IGNwdXRpbWVfYWRkKHQtPnV0aW1lLCB2aXJ0X2xlZnQpOwotCQkJaWYgKCFjcHV0aW1lX2VxKHZpcnRfZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgotCQkJICAgIChjcHV0aW1lX2VxKHQtPml0X3ZpcnRfZXhwaXJlcywgY3B1dGltZV96ZXJvKSB8fAotCQkJICAgICBjcHV0aW1lX2d0KHQtPml0X3ZpcnRfZXhwaXJlcywgdGlja3MpKSkgewotCQkJCXQtPml0X3ZpcnRfZXhwaXJlcyA9IHRpY2tzOwotCQkJfQotCi0JCQlzY2hlZCA9IHQtPnNlLnN1bV9leGVjX3J1bnRpbWUgKyBzY2hlZF9sZWZ0OwotCQkJaWYgKHNjaGVkX2V4cGlyZXMgJiYgKHQtPml0X3NjaGVkX2V4cGlyZXMgPT0gMCB8fAotCQkJCQkgICAgICB0LT5pdF9zY2hlZF9leHBpcmVzID4gc2NoZWQpKSB7Ci0JCQkJdC0+aXRfc2NoZWRfZXhwaXJlcyA9IHNjaGVkOwotCQkJfQotCQl9IHdoaWxlICgodCA9IG5leHRfdGhyZWFkKHQpKSAhPSB0c2spOwotCX0KKwlpZiAoIWNwdXRpbWVfZXEocHJvZl9leHBpcmVzLCBjcHV0aW1lX3plcm8pICYmCisJICAgIChjcHV0aW1lX2VxKHNpZy0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwLCBjcHV0aW1lX3plcm8pIHx8CisJICAgICBjcHV0aW1lX2d0KHNpZy0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwLCBwcm9mX2V4cGlyZXMpKSkKKwkJc2lnLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSBwcm9mX2V4cGlyZXM7CisJaWYgKCFjcHV0aW1lX2VxKHZpcnRfZXhwaXJlcywgY3B1dGltZV96ZXJvKSAmJgorCSAgICAoY3B1dGltZV9lcShzaWctPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCwgY3B1dGltZV96ZXJvKSB8fAorCSAgICAgY3B1dGltZV9ndChzaWctPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCwgdmlydF9leHBpcmVzKSkpCisJCXNpZy0+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0gdmlydF9leHBpcmVzOworCWlmIChzY2hlZF9leHBpcmVzICE9IDAgJiYKKwkgICAgKHNpZy0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9PSAwIHx8CisJICAgICBzaWctPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPiBzY2hlZF9leHBpcmVzKSkKKwkJc2lnLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gc2NoZWRfZXhwaXJlczsKIH0KIAogLyoKQEAgLTEzMTQsNiArMTI1Myw4NiBAQAogCSsrdGltZXItPml0X3JlcXVldWVfcGVuZGluZzsKIH0KIAorLyoqCisgKiB0YXNrX2NwdXRpbWVfemVybyAtIENoZWNrIGEgdGFza19jcHV0aW1lIHN0cnVjdCBmb3IgYWxsIHplcm8gZmllbGRzLgorICoKKyAqIEBjcHV0aW1lOglUaGUgc3RydWN0IHRvIGNvbXBhcmUuCisgKgorICogQ2hlY2tzIEBjcHV0aW1lIHRvIHNlZSBpZiBhbGwgZmllbGRzIGFyZSB6ZXJvLiAgUmV0dXJucyB0cnVlIGlmIGFsbCBmaWVsZHMKKyAqIGFyZSB6ZXJvLCBmYWxzZSBpZiBhbnkgZmllbGQgaXMgbm9uemVyby4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdGFza19jcHV0aW1lX3plcm8oY29uc3Qgc3RydWN0IHRhc2tfY3B1dGltZSAqY3B1dGltZSkKK3sKKwlpZiAoY3B1dGltZV9lcShjcHV0aW1lLT51dGltZSwgY3B1dGltZV96ZXJvKSAmJgorCSAgICBjcHV0aW1lX2VxKGNwdXRpbWUtPnN0aW1lLCBjcHV0aW1lX3plcm8pICYmCisJICAgIGNwdXRpbWUtPnN1bV9leGVjX3J1bnRpbWUgPT0gMCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdGFza19jcHV0aW1lX2V4cGlyZWQgLSBDb21wYXJlIHR3byB0YXNrX2NwdXRpbWUgZW50aXRpZXMuCisgKgorICogQHNhbXBsZToJVGhlIHRhc2tfY3B1dGltZSBzdHJ1Y3R1cmUgdG8gYmUgY2hlY2tlZCBmb3IgZXhwaXJhdGlvbi4KKyAqIEBleHBpcmVzOglFeHBpcmF0aW9uIHRpbWVzLCBhZ2FpbnN0IHdoaWNoIEBzYW1wbGUgd2lsbCBiZSBjaGVja2VkLgorICoKKyAqIENoZWNrcyBAc2FtcGxlIGFnYWluc3QgQGV4cGlyZXMgdG8gc2VlIGlmIGFueSBmaWVsZCBvZiBAc2FtcGxlIGhhcyBleHBpcmVkLgorICogUmV0dXJucyB0cnVlIGlmIGFueSBmaWVsZCBvZiB0aGUgZm9ybWVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY29ycmVzcG9uZGluZworICogZmllbGQgb2YgdGhlIGxhdHRlciBpZiB0aGUgbGF0dGVyIGZpZWxkIGlzIHNldC4gIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB0YXNrX2NwdXRpbWVfZXhwaXJlZChjb25zdCBzdHJ1Y3QgdGFza19jcHV0aW1lICpzYW1wbGUsCisJCQkJCWNvbnN0IHN0cnVjdCB0YXNrX2NwdXRpbWUgKmV4cGlyZXMpCit7CisJaWYgKCFjcHV0aW1lX2VxKGV4cGlyZXMtPnV0aW1lLCBjcHV0aW1lX3plcm8pICYmCisJICAgIGNwdXRpbWVfZ2Uoc2FtcGxlLT51dGltZSwgZXhwaXJlcy0+dXRpbWUpKQorCQlyZXR1cm4gMTsKKwlpZiAoIWNwdXRpbWVfZXEoZXhwaXJlcy0+c3RpbWUsIGNwdXRpbWVfemVybykgJiYKKwkgICAgY3B1dGltZV9nZShjcHV0aW1lX2FkZChzYW1wbGUtPnV0aW1lLCBzYW1wbGUtPnN0aW1lKSwKKwkJICAgICAgIGV4cGlyZXMtPnN0aW1lKSkKKwkJcmV0dXJuIDE7CisJaWYgKGV4cGlyZXMtPnN1bV9leGVjX3J1bnRpbWUgIT0gMCAmJgorCSAgICBzYW1wbGUtPnN1bV9leGVjX3J1bnRpbWUgPj0gZXhwaXJlcy0+c3VtX2V4ZWNfcnVudGltZSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZmFzdHBhdGhfdGltZXJfY2hlY2sgLSBQT1NJWCBDUFUgdGltZXJzIGZhc3QgcGF0aC4KKyAqCisgKiBAdHNrOglUaGUgdGFzayAodGhyZWFkKSBiZWluZyBjaGVja2VkLgorICoKKyAqIENoZWNrIHRoZSB0YXNrIGFuZCB0aHJlYWQgZ3JvdXAgdGltZXJzLiAgSWYgYm90aCBhcmUgemVybyAodGhlcmUgYXJlIG5vCisgKiB0aW1lcnMgc2V0KSByZXR1cm4gZmFsc2UuICBPdGhlcndpc2Ugc25hcHNob3QgdGhlIHRhc2sgYW5kIHRocmVhZCBncm91cAorICogdGltZXJzIGFuZCBjb21wYXJlIHRoZW0gd2l0aCB0aGUgY29ycmVzcG9uZGluZyBleHBpcmF0aW9uIHRpbWVzLiAgUmV0dXJuCisgKiB0cnVlIGlmIGEgdGltZXIgaGFzIGV4cGlyZWQsIGVsc2UgcmV0dXJuIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBmYXN0cGF0aF90aW1lcl9jaGVjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnID0gdHNrLT5zaWduYWw7CisKKwlpZiAodW5saWtlbHkoIXNpZykpCisJCXJldHVybiAwOworCisJaWYgKCF0YXNrX2NwdXRpbWVfemVybygmdHNrLT5jcHV0aW1lX2V4cGlyZXMpKSB7CisJCXN0cnVjdCB0YXNrX2NwdXRpbWUgdGFza19zYW1wbGUgPSB7CisJCQkudXRpbWUgPSB0c2stPnV0aW1lLAorCQkJLnN0aW1lID0gdHNrLT5zdGltZSwKKwkJCS5zdW1fZXhlY19ydW50aW1lID0gdHNrLT5zZS5zdW1fZXhlY19ydW50aW1lCisJCX07CisKKwkJaWYgKHRhc2tfY3B1dGltZV9leHBpcmVkKCZ0YXNrX3NhbXBsZSwgJnRzay0+Y3B1dGltZV9leHBpcmVzKSkKKwkJCXJldHVybiAxOworCX0KKwlpZiAoIXRhc2tfY3B1dGltZV96ZXJvKCZzaWctPmNwdXRpbWVfZXhwaXJlcykpIHsKKwkJc3RydWN0IHRhc2tfY3B1dGltZSBncm91cF9zYW1wbGU7CisKKwkJdGhyZWFkX2dyb3VwX2NwdXRpbWUodHNrLCAmZ3JvdXBfc2FtcGxlKTsKKwkJaWYgKHRhc2tfY3B1dGltZV9leHBpcmVkKCZncm91cF9zYW1wbGUsICZzaWctPmNwdXRpbWVfZXhwaXJlcykpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSB0aW1lciBpbnRlcnJ1cHQgaGFuZGxlci4gIFRoZSBpcnEgaGFuZGxlciBoYXMKICAqIGFscmVhZHkgdXBkYXRlZCBvdXIgY291bnRzLiAgV2UgbmVlZCB0byBjaGVjayBpZiBhbnkgdGltZXJzIGZpcmUgbm93LgpAQCAtMTMyNiw0MiArMTM0NSwzMSBAQAogCiAJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCi0jZGVmaW5lIFVORVhQSVJFRChjbG9jaykgXAotCQkoY3B1dGltZV9lcSh0c2stPml0XyMjY2xvY2sjI19leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8IFwKLQkJIGNwdXRpbWVfbHQoY2xvY2sjI190aWNrcyh0c2spLCB0c2stPml0XyMjY2xvY2sjI19leHBpcmVzKSkKLQotCWlmIChVTkVYUElSRUQocHJvZikgJiYgVU5FWFBJUkVEKHZpcnQpICYmCi0JICAgICh0c2stPml0X3NjaGVkX2V4cGlyZXMgPT0gMCB8fAotCSAgICAgdHNrLT5zZS5zdW1fZXhlY19ydW50aW1lIDwgdHNrLT5pdF9zY2hlZF9leHBpcmVzKSkKKwkvKgorCSAqIFRoZSBmYXN0IHBhdGggY2hlY2tzIHRoYXQgdGhlcmUgYXJlIG5vIGV4cGlyZWQgdGhyZWFkIG9yIHRocmVhZAorCSAqIGdyb3VwIHRpbWVycy4gIElmIHRoYXQncyBzbywganVzdCByZXR1cm4uCisJICovCisJaWYgKCFmYXN0cGF0aF90aW1lcl9jaGVjayh0c2spKQogCQlyZXR1cm47CiAKLSN1bmRlZglVTkVYUElSRUQKKwlzcGluX2xvY2soJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJLyoKKwkgKiBIZXJlIHdlIHRha2Ugb2ZmIHRzay0+c2lnbmFsLT5jcHVfdGltZXJzW05dIGFuZAorCSAqIHRzay0+Y3B1X3RpbWVyc1tOXSBhbGwgdGhlIHRpbWVycyB0aGF0IGFyZSBmaXJpbmcsIGFuZAorCSAqIHB1dCB0aGVtIG9uIHRoZSBmaXJpbmcgbGlzdC4KKwkgKi8KKwljaGVja190aHJlYWRfdGltZXJzKHRzaywgJmZpcmluZyk7CisJY2hlY2tfcHJvY2Vzc190aW1lcnModHNrLCAmZmlyaW5nKTsKIAogCS8qCi0JICogRG91YmxlLWNoZWNrIHdpdGggbG9ja3MgaGVsZC4KKwkgKiBXZSBtdXN0IHJlbGVhc2UgdGhlc2UgbG9ja3MgYmVmb3JlIHRha2luZyBhbnkgdGltZXIncyBsb2NrLgorCSAqIFRoZXJlIGlzIGEgcG90ZW50aWFsIHJhY2Ugd2l0aCB0aW1lciBkZWxldGlvbiBoZXJlLCBhcyB0aGUKKwkgKiBzaWdsb2NrIG5vdyBwcm90ZWN0cyBvdXIgcHJpdmF0ZSBmaXJpbmcgbGlzdC4gIFdlIGhhdmUgc2V0CisJICogdGhlIGZpcmluZyBmbGFnIGluIGVhY2ggdGltZXIsIHNvIHRoYXQgYSBkZWxldGlvbiBhdHRlbXB0CisJICogdGhhdCBnZXRzIHRoZSB0aW1lciBsb2NrIGJlZm9yZSB3ZSBkbyB3aWxsIGdpdmUgaXQgdXAgYW5kCisJICogc3BpbiB1bnRpbCB3ZSd2ZSB0YWtlbiBjYXJlIG9mIHRoYXQgdGltZXIgYmVsb3cuCiAJICovCi0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQlpZiAobGlrZWx5KHRzay0+c2lnbmFsICE9IE5VTEwpKSB7Ci0JCXNwaW5fbG9jaygmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCQkvKgotCQkgKiBIZXJlIHdlIHRha2Ugb2ZmIHRzay0+Y3B1X3RpbWVyc1tOXSBhbmQgdHNrLT5zaWduYWwtPmNwdV90aW1lcnNbTl0KLQkJICogYWxsIHRoZSB0aW1lcnMgdGhhdCBhcmUgZmlyaW5nLCBhbmQgcHV0IHRoZW0gb24gdGhlIGZpcmluZyBsaXN0LgotCQkgKi8KLQkJY2hlY2tfdGhyZWFkX3RpbWVycyh0c2ssICZmaXJpbmcpOwotCQljaGVja19wcm9jZXNzX3RpbWVycyh0c2ssICZmaXJpbmcpOwotCi0JCS8qCi0JCSAqIFdlIG11c3QgcmVsZWFzZSB0aGVzZSBsb2NrcyBiZWZvcmUgdGFraW5nIGFueSB0aW1lcidzIGxvY2suCi0JCSAqIFRoZXJlIGlzIGEgcG90ZW50aWFsIHJhY2Ugd2l0aCB0aW1lciBkZWxldGlvbiBoZXJlLCBhcyB0aGUKLQkJICogc2lnbG9jayBub3cgcHJvdGVjdHMgb3VyIHByaXZhdGUgZmlyaW5nIGxpc3QuICBXZSBoYXZlIHNldAotCQkgKiB0aGUgZmlyaW5nIGZsYWcgaW4gZWFjaCB0aW1lciwgc28gdGhhdCBhIGRlbGV0aW9uIGF0dGVtcHQKLQkJICogdGhhdCBnZXRzIHRoZSB0aW1lciBsb2NrIGJlZm9yZSB3ZSBkbyB3aWxsIGdpdmUgaXQgdXAgYW5kCi0JCSAqIHNwaW4gdW50aWwgd2UndmUgdGFrZW4gY2FyZSBvZiB0aGF0IHRpbWVyIGJlbG93LgotCQkgKi8KLQkJc3Bpbl91bmxvY2soJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JfQotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlzcGluX3VubG9jaygmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAogCS8qCiAJICogTm93IHRoYXQgYWxsIHRoZSB0aW1lcnMgb24gb3VyIGxpc3QgaGF2ZSB0aGUgZmlyaW5nIGZsYWcsCkBAIC0xMzg5LDEwICsxMzk3LDkgQEAKIAogLyoKICAqIFNldCBvbmUgb2YgdGhlIHByb2Nlc3Mtd2lkZSBzcGVjaWFsIGNhc2UgQ1BVIHRpbWVycy4KLSAqIFRoZSB0YXNrbGlzdF9sb2NrIGFuZCB0c2stPnNpZ2hhbmQtPnNpZ2xvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIuCi0gKiBUaGUgb2xkdmFsIGFyZ3VtZW50IGlzIG51bGwgZm9yIHRoZSBSTElNSVRfQ1BVIHRpbWVyLCB3aGVyZSAqbmV3dmFsIGlzCi0gKiBhYnNvbHV0ZTsgbm9uLW51bGwgZm9yIElUSU1FUl8qLCB3aGVyZSAqbmV3dmFsIGlzIHJlbGF0aXZlIGFuZCB3ZSB1cGRhdGUKLSAqIGl0IHRvIGJlIGFic29sdXRlLCAqb2xkdmFsIGlzIGFic29sdXRlIGFuZCB3ZSB1cGRhdGUgaXQgdG8gYmUgcmVsYXRpdmUuCisgKiBUaGUgdHNrLT5zaWdoYW5kLT5zaWdsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyLgorICogVGhlICpuZXd2YWwgYXJndW1lbnQgaXMgcmVsYXRpdmUgYW5kIHdlIHVwZGF0ZSBpdCB0byBiZSBhYnNvbHV0ZSwgKm9sZHZhbAorICogaXMgYWJzb2x1dGUgYW5kIHdlIHVwZGF0ZSBpdCB0byBiZSByZWxhdGl2ZS4KICAqLwogdm9pZCBzZXRfcHJvY2Vzc19jcHVfdGltZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGludCBjbG9ja19pZHgsCiAJCQkgICBjcHV0aW1lX3QgKm5ld3ZhbCwgY3B1dGltZV90ICpvbGR2YWwpCkBAIC0xNDAxLDcgKzE0MDgsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CiAKIAlCVUdfT04oY2xvY2tfaWR4ID09IENQVUNMT0NLX1NDSEVEKTsKLQljcHVfY2xvY2tfc2FtcGxlX2dyb3VwX2xvY2tlZChjbG9ja19pZHgsIHRzaywgJm5vdyk7CisJY3B1X2Nsb2NrX3NhbXBsZV9ncm91cChjbG9ja19pZHgsIHRzaywgJm5vdyk7CiAKIAlpZiAob2xkdmFsKSB7CiAJCWlmICghY3B1dGltZV9lcSgqb2xkdmFsLCBjcHV0aW1lX3plcm8pKSB7CkBAIC0xNDM1LDEzICsxNDQyLDE0IEBACiAJICAgIGNwdXRpbWVfZ2UobGlzdF9maXJzdF9lbnRyeShoZWFkLAogCQkJCSAgc3RydWN0IGNwdV90aW1lcl9saXN0LCBlbnRyeSktPmV4cGlyZXMuY3B1LAogCQkgICAgICAgKm5ld3ZhbCkpIHsKLQkJLyoKLQkJICogUmVqaWdnZXIgZWFjaCB0aHJlYWQncyBleHBpcnkgdGltZSBzbyB0aGF0IG9uZSB3aWxsCi0JCSAqIG5vdGljZSBiZWZvcmUgd2UgaGl0IHRoZSBwcm9jZXNzLWN1bXVsYXRpdmUgZXhwaXJ5IHRpbWUuCi0JCSAqLwotCQl1bmlvbiBjcHVfdGltZV9jb3VudCBleHBpcmVzID0geyAuc2NoZWQgPSAwIH07Ci0JCWV4cGlyZXMuY3B1ID0gKm5ld3ZhbDsKLQkJcHJvY2Vzc190aW1lcl9yZWJhbGFuY2UodHNrLCBjbG9ja19pZHgsIGV4cGlyZXMsIG5vdyk7CisJCXN3aXRjaCAoY2xvY2tfaWR4KSB7CisJCWNhc2UgQ1BVQ0xPQ0tfUFJPRjoKKwkJCXRzay0+c2lnbmFsLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSAqbmV3dmFsOworCQkJYnJlYWs7CisJCWNhc2UgQ1BVQ0xPQ0tfVklSVDoKKwkJCXRzay0+c2lnbmFsLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSAqbmV3dmFsOworCQkJYnJlYWs7CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwppbmRleCA1MTMxZTU0Li5iOTMxZDdjIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LXRpbWVycy5jCkBAIC0yMjMsNiArMjIzLDE1IEBACiB9CiAKIC8qCisgKiBHZXQgbW9ub3RvbmljIHRpbWUgZm9yIHBvc2l4IHRpbWVycworICovCitzdGF0aWMgaW50IHBvc2l4X2dldF9tb25vdG9uaWNfcmF3KGNsb2NraWRfdCB3aGljaF9jbG9jaywgc3RydWN0IHRpbWVzcGVjICp0cCkKK3sKKwlnZXRyYXdtb25vdG9uaWModHApOworCXJldHVybiAwOworfQorCisvKgogICogSW5pdGlhbGl6ZSBldmVyeXRoaW5nLCB3ZWxsLCBqdXN0IGV2ZXJ5dGhpbmcgaW4gUG9zaXggY2xvY2tzL3RpbWVycyA7KQogICovCiBzdGF0aWMgX19pbml0IGludCBpbml0X3Bvc2l4X3RpbWVycyh2b2lkKQpAQCAtMjM1LDkgKzI0NCwxNSBAQAogCQkuY2xvY2tfZ2V0ID0gcG9zaXhfa3RpbWVfZ2V0X3RzLAogCQkuY2xvY2tfc2V0ID0gZG9fcG9zaXhfY2xvY2tfbm9zZXR0aW1lLAogCX07CisJc3RydWN0IGtfY2xvY2sgY2xvY2tfbW9ub3RvbmljX3JhdyA9IHsKKwkJLmNsb2NrX2dldHJlcyA9IGhydGltZXJfZ2V0X3JlcywKKwkJLmNsb2NrX2dldCA9IHBvc2l4X2dldF9tb25vdG9uaWNfcmF3LAorCQkuY2xvY2tfc2V0ID0gZG9fcG9zaXhfY2xvY2tfbm9zZXR0aW1lLAorCX07CiAKIAlyZWdpc3Rlcl9wb3NpeF9jbG9jayhDTE9DS19SRUFMVElNRSwgJmNsb2NrX3JlYWx0aW1lKTsKIAlyZWdpc3Rlcl9wb3NpeF9jbG9jayhDTE9DS19NT05PVE9OSUMsICZjbG9ja19tb25vdG9uaWMpOworCXJlZ2lzdGVyX3Bvc2l4X2Nsb2NrKENMT0NLX01PTk9UT05JQ19SQVcsICZjbG9ja19tb25vdG9uaWNfcmF3KTsKIAogCXBvc2l4X3RpbWVyc19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJwb3NpeF90aW1lcnNfY2FjaGUiLAogCQkJCQlzaXplb2YgKHN0cnVjdCBrX2l0aW1lciksIDAsIFNMQUJfUEFOSUMsCkBAIC0yOTgsNiArMzEzLDcgQEAKIAogaW50IHBvc2l4X3RpbWVyX2V2ZW50KHN0cnVjdCBrX2l0aW1lciAqdGltciwgaW50IHNpX3ByaXZhdGUpCiB7CisJaW50IHNoYXJlZCwgcmV0OwogCS8qCiAJICogRklYTUU6IGlmIC0+c2lncSBpcyBxdWV1ZWQgd2UgY2FuIHJhY2Ugd2l0aAogCSAqIGRlcXVldWVfc2lnbmFsKCktPmRvX3NjaGVkdWxlX25leHRfdGltZXIoKS4KQEAgLTMxMSwyNSArMzI3LDEwIEBACiAJICovCiAJdGltci0+c2lncS0+aW5mby5zaV9zeXNfcHJpdmF0ZSA9IHNpX3ByaXZhdGU7CiAKLQl0aW1yLT5zaWdxLT5pbmZvLnNpX3NpZ25vID0gdGltci0+aXRfc2lnZXZfc2lnbm87Ci0JdGltci0+c2lncS0+aW5mby5zaV9jb2RlID0gU0lfVElNRVI7Ci0JdGltci0+c2lncS0+aW5mby5zaV90aWQgPSB0aW1yLT5pdF9pZDsKLQl0aW1yLT5zaWdxLT5pbmZvLnNpX3ZhbHVlID0gdGltci0+aXRfc2lnZXZfdmFsdWU7Ci0KLQlpZiAodGltci0+aXRfc2lnZXZfbm90aWZ5ICYgU0lHRVZfVEhSRUFEX0lEKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyOwotCQlpbnQgcmV0ID0gc2VuZF9zaWdxdWV1ZSh0aW1yLT5zaWdxLCB0aW1yLT5pdF9wcm9jZXNzLCAwKTsKLQotCQlpZiAobGlrZWx5KHJldCA+PSAwKSkKLQkJCXJldHVybiByZXQ7Ci0KLQkJdGltci0+aXRfc2lnZXZfbm90aWZ5ID0gU0lHRVZfU0lHTkFMOwotCQlsZWFkZXIgPSB0aW1yLT5pdF9wcm9jZXNzLT5ncm91cF9sZWFkZXI7Ci0JCXB1dF90YXNrX3N0cnVjdCh0aW1yLT5pdF9wcm9jZXNzKTsKLQkJdGltci0+aXRfcHJvY2VzcyA9IGxlYWRlcjsKLQl9Ci0KLQlyZXR1cm4gc2VuZF9zaWdxdWV1ZSh0aW1yLT5zaWdxLCB0aW1yLT5pdF9wcm9jZXNzLCAxKTsKKwlzaGFyZWQgPSAhKHRpbXItPml0X3NpZ2V2X25vdGlmeSAmIFNJR0VWX1RIUkVBRF9JRCk7CisJcmV0ID0gc2VuZF9zaWdxdWV1ZSh0aW1yLT5zaWdxLCB0aW1yLT5pdF9wcm9jZXNzLCBzaGFyZWQpOworCS8qIElmIHdlIGZhaWxlZCB0byBzZW5kIHRoZSBzaWduYWwgdGhlIHRpbWVyIHN0b3BzLiAqLworCXJldHVybiByZXQgPiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocG9zaXhfdGltZXJfZXZlbnQpOwogCkBAIC00NjgsMTEgKzQ2OSw5IEBACiAJCSBzdHJ1Y3Qgc2lnZXZlbnQgX191c2VyICp0aW1lcl9ldmVudF9zcGVjLAogCQkgdGltZXJfdCBfX3VzZXIgKiBjcmVhdGVkX3RpbWVyX2lkKQogewotCWludCBlcnJvciA9IDA7Ci0Jc3RydWN0IGtfaXRpbWVyICpuZXdfdGltZXIgPSBOVUxMOwotCWludCBuZXdfdGltZXJfaWQ7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwcm9jZXNzID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBrX2l0aW1lciAqbmV3X3RpbWVyOworCWludCBlcnJvciwgbmV3X3RpbWVyX2lkOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcHJvY2VzczsKIAlzaWdldmVudF90IGV2ZW50OwogCWludCBpdF9pZF9zZXQgPSBJVF9JRF9OT1RfU0VUOwogCkBAIC00OTAsMTIgKzQ4OSwxMSBAQAogCQlnb3RvIG91dDsKIAl9CiAJc3Bpbl9sb2NrX2lycSgmaWRyX2xvY2spOwotCWVycm9yID0gaWRyX2dldF9uZXcoJnBvc2l4X3RpbWVyc19pZCwgKHZvaWQgKikgbmV3X3RpbWVyLAotCQkJICAgICZuZXdfdGltZXJfaWQpOworCWVycm9yID0gaWRyX2dldF9uZXcoJnBvc2l4X3RpbWVyc19pZCwgbmV3X3RpbWVyLCAmbmV3X3RpbWVyX2lkKTsKIAlzcGluX3VubG9ja19pcnEoJmlkcl9sb2NrKTsKLQlpZiAoZXJyb3IgPT0gLUVBR0FJTikKLQkJZ290byByZXRyeTsKLQllbHNlIGlmIChlcnJvcikgeworCWlmIChlcnJvcikgeworCQlpZiAoZXJyb3IgPT0gLUVBR0FJTikKKwkJCWdvdG8gcmV0cnk7CiAJCS8qCiAJCSAqIFdlaXJkIGxvb2tpbmcsIGJ1dCB3ZSByZXR1cm4gRUFHQUlOIGlmIHRoZSBJRFIgaXMKIAkJICogZnVsbCAocHJvcGVyIFBPU0lYIHJldHVybiB2YWx1ZSBmb3IgdGhpcykKQEAgLTUyNiw2NyArNTI0LDQzIEBACiAJCQllcnJvciA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dDsKIAkJfQotCQluZXdfdGltZXItPml0X3NpZ2V2X25vdGlmeSA9IGV2ZW50LnNpZ2V2X25vdGlmeTsKLQkJbmV3X3RpbWVyLT5pdF9zaWdldl9zaWdubyA9IGV2ZW50LnNpZ2V2X3NpZ25vOwotCQluZXdfdGltZXItPml0X3NpZ2V2X3ZhbHVlID0gZXZlbnQuc2lnZXZfdmFsdWU7Ci0KLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJaWYgKChwcm9jZXNzID0gZ29vZF9zaWdldmVudCgmZXZlbnQpKSkgewotCQkJLyoKLQkJCSAqIFdlIG1heSBiZSBzZXR0aW5nIHVwIHRoaXMgcHJvY2VzcyBmb3IgYW5vdGhlcgotCQkJICogdGhyZWFkLiAgSXQgbWF5IGJlIGV4aXRpbmcuICBUbyBjYXRjaCB0aGlzCi0JCQkgKiBjYXNlIHRoZSB3ZSBjaGVjayB0aGUgUEZfRVhJVElORyBmbGFnLiAgSWYKLQkJCSAqIHRoZSBmbGFnIGlzIG5vdCBzZXQsIHRoZSBzaWdsb2NrIHdpbGwgY2F0Y2gKLQkJCSAqIGhpbSBiZWZvcmUgaXQgaXMgdG9vIGxhdGUgKGluIGV4aXRfaXRpbWVycykuCi0JCQkgKgotCQkJICogVGhlIGV4ZWMgY2FzZSBpcyBhIGJpdCBtb3JlIGludmxvdmVkIGJ1dCBlYXN5Ci0JCQkgKiB0byBjb2RlLiAgSWYgdGhlIHByb2Nlc3MgaXMgaW4gb3VyIHRocmVhZAotCQkJICogZ3JvdXAgKGFuZCBpdCBtdXN0IGJlIG9yIHdlIHdvdWxkIG5vdCBhbGxvdwotCQkJICogaXQgaGVyZSkgYW5kIGlzIGRvaW5nIGFuIGV4ZWMsIGl0IHdpbGwgY2F1c2UKLQkJCSAqIHVzIHRvIGJlIGtpbGxlZC4gIEluIHRoaXMgY2FzZSBpdCB3aWxsIHdhaXQKLQkJCSAqIGZvciB1cyB0byBkaWUgd2hpY2ggbWVhbnMgd2UgY2FuIGZpbmlzaCB0aGlzCi0JCQkgKiBsaW5rYWdlIHdpdGggb3VyIGxhc3QgZ2FzcC4gSS5lLiBubyBjb2RlIDopCi0JCQkgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcm9jZXNzLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JCQlpZiAoIShwcm9jZXNzLT5mbGFncyAmIFBGX0VYSVRJTkcpKSB7Ci0JCQkJbmV3X3RpbWVyLT5pdF9wcm9jZXNzID0gcHJvY2VzczsKLQkJCQlsaXN0X2FkZCgmbmV3X3RpbWVyLT5saXN0LAotCQkJCQkgJnByb2Nlc3MtPnNpZ25hbC0+cG9zaXhfdGltZXJzKTsKLQkJCQlpZiAobmV3X3RpbWVyLT5pdF9zaWdldl9ub3RpZnkgPT0gKFNJR0VWX1NJR05BTHxTSUdFVl9USFJFQURfSUQpKQotCQkJCQlnZXRfdGFza19zdHJ1Y3QocHJvY2Vzcyk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvY2Vzcy0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQkJfSBlbHNlIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcm9jZXNzLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JCQkJcHJvY2VzcyA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF9sb2NrKCk7CisJCXByb2Nlc3MgPSBnb29kX3NpZ2V2ZW50KCZldmVudCk7CisJCWlmIChwcm9jZXNzKQorCQkJZ2V0X3Rhc2tfc3RydWN0KHByb2Nlc3MpOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJaWYgKCFwcm9jZXNzKSB7CiAJCQllcnJvciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSB7Ci0JCW5ld190aW1lci0+aXRfc2lnZXZfbm90aWZ5ID0gU0lHRVZfU0lHTkFMOwotCQluZXdfdGltZXItPml0X3NpZ2V2X3NpZ25vID0gU0lHQUxSTTsKLQkJbmV3X3RpbWVyLT5pdF9zaWdldl92YWx1ZS5zaXZhbF9pbnQgPSBuZXdfdGltZXItPml0X2lkOworCQlldmVudC5zaWdldl9ub3RpZnkgPSBTSUdFVl9TSUdOQUw7CisJCWV2ZW50LnNpZ2V2X3NpZ25vID0gU0lHQUxSTTsKKwkJZXZlbnQuc2lnZXZfdmFsdWUuc2l2YWxfaW50ID0gbmV3X3RpbWVyLT5pdF9pZDsKIAkJcHJvY2VzcyA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByb2Nlc3MtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQkJbmV3X3RpbWVyLT5pdF9wcm9jZXNzID0gcHJvY2VzczsKLQkJbGlzdF9hZGQoJm5ld190aW1lci0+bGlzdCwgJnByb2Nlc3MtPnNpZ25hbC0+cG9zaXhfdGltZXJzKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvY2Vzcy0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCQlnZXRfdGFza19zdHJ1Y3QocHJvY2Vzcyk7CiAJfQogCisJbmV3X3RpbWVyLT5pdF9zaWdldl9ub3RpZnkgICAgID0gZXZlbnQuc2lnZXZfbm90aWZ5OworCW5ld190aW1lci0+c2lncS0+aW5mby5zaV9zaWdubyA9IGV2ZW50LnNpZ2V2X3NpZ25vOworCW5ld190aW1lci0+c2lncS0+aW5mby5zaV92YWx1ZSA9IGV2ZW50LnNpZ2V2X3ZhbHVlOworCW5ld190aW1lci0+c2lncS0+aW5mby5zaV90aWQgICA9IG5ld190aW1lci0+aXRfaWQ7CisJbmV3X3RpbWVyLT5zaWdxLT5pbmZvLnNpX2NvZGUgID0gU0lfVElNRVI7CisKKwlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwluZXdfdGltZXItPml0X3Byb2Nlc3MgPSBwcm9jZXNzOworCWxpc3RfYWRkKCZuZXdfdGltZXItPmxpc3QsICZjdXJyZW50LT5zaWduYWwtPnBvc2l4X3RpbWVycyk7CisJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKworCXJldHVybiAwOwogIAkvKgogCSAqIEluIHRoZSBjYXNlIG9mIHRoZSB0aW1lciBiZWxvbmdpbmcgdG8gYW5vdGhlciB0YXNrLCBhZnRlcgogCSAqIHRoZSB0YXNrIGlzIHVubG9ja2VkLCB0aGUgdGltZXIgaXMgb3duZWQgYnkgdGhlIG90aGVyIHRhc2sKIAkgKiBhbmQgbWF5IGNlYXNlIHRvIGV4aXN0IGF0IGFueSB0aW1lLiAgRG9uJ3QgdXNlIG9yIG1vZGlmeQogCSAqIG5ld190aW1lciBhZnRlciB0aGUgdW5sb2NrIGNhbGwuCiAJICovCi0KIG91dDoKLQlpZiAoZXJyb3IpCi0JCXJlbGVhc2VfcG9zaXhfdGltZXIobmV3X3RpbWVyLCBpdF9pZF9zZXQpOwotCisJcmVsZWFzZV9wb3NpeF90aW1lcihuZXdfdGltZXIsIGl0X2lkX3NldCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC01OTcsNyArNTcxLDcgQEAKICAqIHRoZSBmaW5kIHRvIHRoZSB0aW1lciBsb2NrLiAgVG8gYXZvaWQgYSBkZWFkIGxvY2ssIHRoZSB0aW1lciBpZCBNVVNUCiAgKiBiZSByZWxlYXNlIHdpdGggb3V0IGhvbGRpbmcgdGhlIHRpbWVyIGxvY2suCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qga19pdGltZXIgKiBsb2NrX3RpbWVyKHRpbWVyX3QgdGltZXJfaWQsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQorc3RhdGljIHN0cnVjdCBrX2l0aW1lciAqbG9ja190aW1lcih0aW1lcl90IHRpbWVyX2lkLCB1bnNpZ25lZCBsb25nICpmbGFncykKIHsKIAlzdHJ1Y3Qga19pdGltZXIgKnRpbXI7CiAJLyoKQEAgLTYwNSwyMyArNTc5LDIwIEBACiAJICogZmxhZ3MgcGFydCBvdmVyIHRvIHRoZSB0aW1lciBsb2NrLiAgTXVzdCBub3QgbGV0IGludGVycnVwdHMgaW4KIAkgKiB3aGlsZSB3ZSBhcmUgbW92aW5nIHRoZSBsb2NrLgogCSAqLwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlkcl9sb2NrLCAqZmxhZ3MpOwotCXRpbXIgPSAoc3RydWN0IGtfaXRpbWVyICopIGlkcl9maW5kKCZwb3NpeF90aW1lcnNfaWQsIChpbnQpIHRpbWVyX2lkKTsKKwl0aW1yID0gaWRyX2ZpbmQoJnBvc2l4X3RpbWVyc19pZCwgKGludCl0aW1lcl9pZCk7CiAJaWYgKHRpbXIpIHsKIAkJc3Bpbl9sb2NrKCZ0aW1yLT5pdF9sb2NrKTsKLQotCQlpZiAoKHRpbXItPml0X2lkICE9IHRpbWVyX2lkKSB8fCAhKHRpbXItPml0X3Byb2Nlc3MpIHx8Ci0JCQkJIXNhbWVfdGhyZWFkX2dyb3VwKHRpbXItPml0X3Byb2Nlc3MsIGN1cnJlbnQpKSB7Ci0JCQlzcGluX3VubG9jaygmdGltci0+aXRfbG9jayk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZHJfbG9jaywgKmZsYWdzKTsKLQkJCXRpbXIgPSBOVUxMOwotCQl9IGVsc2UKKwkJaWYgKHRpbXItPml0X3Byb2Nlc3MgJiYKKwkJICAgIHNhbWVfdGhyZWFkX2dyb3VwKHRpbXItPml0X3Byb2Nlc3MsIGN1cnJlbnQpKSB7CiAJCQlzcGluX3VubG9jaygmaWRyX2xvY2spOwotCX0gZWxzZQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZHJfbG9jaywgKmZsYWdzKTsKKwkJCXJldHVybiB0aW1yOworCQl9CisJCXNwaW5fdW5sb2NrKCZ0aW1yLT5pdF9sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRyX2xvY2ssICpmbGFncyk7CiAKLQlyZXR1cm4gdGltcjsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoKQEAgLTg2Miw4ICs4MzMsNyBAQAogCSAqIFRoaXMga2VlcHMgYW55IHRhc2tzIHdhaXRpbmcgb24gdGhlIHNwaW4gbG9jayBmcm9tIHRoaW5raW5nCiAJICogdGhleSBnb3Qgc29tZXRoaW5nIChzZWUgdGhlIGxvY2sgY29kZSBhYm92ZSkuCiAJICovCi0JaWYgKHRpbWVyLT5pdF9zaWdldl9ub3RpZnkgPT0gKFNJR0VWX1NJR05BTHxTSUdFVl9USFJFQURfSUQpKQotCQlwdXRfdGFza19zdHJ1Y3QodGltZXItPml0X3Byb2Nlc3MpOworCXB1dF90YXNrX3N0cnVjdCh0aW1lci0+aXRfcHJvY2Vzcyk7CiAJdGltZXItPml0X3Byb2Nlc3MgPSBOVUxMOwogCiAJdW5sb2NrX3RpbWVyKHRpbWVyLCBmbGFncyk7CkBAIC04OTAsOCArODYwLDcgQEAKIAkgKiBUaGlzIGtlZXBzIGFueSB0YXNrcyB3YWl0aW5nIG9uIHRoZSBzcGluIGxvY2sgZnJvbSB0aGlua2luZwogCSAqIHRoZXkgZ290IHNvbWV0aGluZyAoc2VlIHRoZSBsb2NrIGNvZGUgYWJvdmUpLgogCSAqLwotCWlmICh0aW1lci0+aXRfc2lnZXZfbm90aWZ5ID09IChTSUdFVl9TSUdOQUx8U0lHRVZfVEhSRUFEX0lEKSkKLQkJcHV0X3Rhc2tfc3RydWN0KHRpbWVyLT5pdF9wcm9jZXNzKTsKKwlwdXRfdGFza19zdHJ1Y3QodGltZXItPml0X3Byb2Nlc3MpOwogCXRpbWVyLT5pdF9wcm9jZXNzID0gTlVMTDsKIAogCXVubG9ja190aW1lcih0aW1lciwgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2Rpc2suYyBiL2tlcm5lbC9wb3dlci9kaXNrLmMKaW5kZXggYmJkODVjNi4uMzMxZjk4MyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2Rpc2suYworKysgYi9rZXJuZWwvcG93ZXIvZGlzay5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgpAQCAtNTIwLDYgKzUyMSwxMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBFeGl0OwogCisJZXJyb3IgPSB1c2VybW9kZWhlbHBlcl9kaXNhYmxlKCk7CisJaWYgKGVycm9yKQorCQlnb3RvIEV4aXQ7CisKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzICovCiAJZXJyb3IgPSBjcmVhdGVfYmFzaWNfbWVtb3J5X2JpdG1hcHMoKTsKIAlpZiAoZXJyb3IpCkBAIC01NTgsNiArNTYzLDcgQEAKIAl0aGF3X3Byb2Nlc3NlcygpOwogIEZpbmlzaDoKIAlmcmVlX2Jhc2ljX21lbW9yeV9iaXRtYXBzKCk7CisJdXNlcm1vZGVoZWxwZXJfZW5hYmxlKCk7CiAgRXhpdDoKIAlwbV9ub3RpZmllcl9jYWxsX2NoYWluKFBNX1BPU1RfSElCRVJOQVRJT04pOwogCXBtX3Jlc3RvcmVfY29uc29sZSgpOwpAQCAtNjM0LDYgKzY0MCwxMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBGaW5pc2g7CiAKKwllcnJvciA9IHVzZXJtb2RlaGVscGVyX2Rpc2FibGUoKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gRmluaXNoOworCiAJZXJyb3IgPSBjcmVhdGVfYmFzaWNfbWVtb3J5X2JpdG1hcHMoKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gRmluaXNoOwpAQCAtNjU2LDYgKzY2Niw3IEBACiAJdGhhd19wcm9jZXNzZXMoKTsKICBEb25lOgogCWZyZWVfYmFzaWNfbWVtb3J5X2JpdG1hcHMoKTsKKwl1c2VybW9kZWhlbHBlcl9lbmFibGUoKTsKICBGaW5pc2g6CiAJcG1fbm90aWZpZXJfY2FsbF9jaGFpbihQTV9QT1NUX1JFU1RPUkUpOwogCXBtX3Jlc3RvcmVfY29uc29sZSgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmMKaW5kZXggNTQwYjE2Yi4uMTkxMjJjZiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL21haW4uYworKysgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgpAQCAtMjM3LDYgKzIzOCwxMCBAQAogCWlmIChlcnJvcikKIAkJZ290byBGaW5pc2g7CiAKKwllcnJvciA9IHVzZXJtb2RlaGVscGVyX2Rpc2FibGUoKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gRmluaXNoOworCiAJaWYgKHN1c3BlbmRfZnJlZXplX3Byb2Nlc3NlcygpKSB7CiAJCWVycm9yID0gLUVBR0FJTjsKIAkJZ290byBUaGF3OwpAQCAtMjU2LDYgKzI2MSw3IEBACiAKICBUaGF3OgogCXN1c3BlbmRfdGhhd19wcm9jZXNzZXMoKTsKKwl1c2VybW9kZWhlbHBlcl9lbmFibGUoKTsKICBGaW5pc2g6CiAJcG1fbm90aWZpZXJfY2FsbF9jaGFpbihQTV9QT1NUX1NVU1BFTkQpOwogCXBtX3Jlc3RvcmVfY29uc29sZSgpOwpAQCAtMzc2LDYgKzM4Miw3IEBACiBzdGF0aWMgdm9pZCBzdXNwZW5kX2ZpbmlzaCh2b2lkKQogewogCXN1c3BlbmRfdGhhd19wcm9jZXNzZXMoKTsKKwl1c2VybW9kZWhlbHBlcl9lbmFibGUoKTsKIAlwbV9ub3RpZmllcl9jYWxsX2NoYWluKFBNX1BPU1RfU1VTUEVORCk7CiAJcG1fcmVzdG9yZV9jb25zb2xlKCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwppbmRleCAyNzg5NDZhLi5jYTYzNDAxIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCisrKyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKQEAgLTI4LDEyMSArMjgsNiBAQAogCXJldHVybiAxOwogfQogCi0vKgotICogZnJlZXppbmcgaXMgY29tcGxldGUsIG1hcmsgY3VycmVudCBwcm9jZXNzIGFzIGZyb3plbgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJvemVuX3Byb2Nlc3Modm9pZCkKLXsKLQlpZiAoIXVubGlrZWx5KGN1cnJlbnQtPmZsYWdzICYgUEZfTk9GUkVFWkUpKSB7Ci0JCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0ZST1pFTjsKLQkJd21iKCk7Ci0JfQotCWNsZWFyX2ZyZWV6ZV9mbGFnKGN1cnJlbnQpOwotfQotCi0vKiBSZWZyaWdlcmF0b3IgaXMgcGxhY2Ugd2hlcmUgZnJvemVuIHByb2Nlc3NlcyBhcmUgc3RvcmVkIDotKS4gKi8KLXZvaWQgcmVmcmlnZXJhdG9yKHZvaWQpCi17Ci0JLyogSG1tLCBzaG91bGQgd2UgYmUgYWxsb3dlZCB0byBzdXNwZW5kIHdoZW4gdGhlcmUgYXJlIHJlYWx0aW1lCi0JICAgcHJvY2Vzc2VzIGFyb3VuZD8gKi8KLQlsb25nIHNhdmU7Ci0KLQl0YXNrX2xvY2soY3VycmVudCk7Ci0JaWYgKGZyZWV6aW5nKGN1cnJlbnQpKSB7Ci0JCWZyb3plbl9wcm9jZXNzKCk7Ci0JCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwotCX0gZWxzZSB7Ci0JCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwotCQlyZXR1cm47Ci0JfQotCXNhdmUgPSBjdXJyZW50LT5zdGF0ZTsKLQlwcl9kZWJ1ZygiJXMgZW50ZXJlZCByZWZyaWdlcmF0b3JcbiIsIGN1cnJlbnQtPmNvbW0pOwotCi0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsgLyogV2Ugc2VudCBmYWtlIHNpZ25hbCwgY2xlYW4gaXQgdXAgKi8KLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCi0JZm9yICg7OykgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCWlmICghZnJvemVuKGN1cnJlbnQpKQotCQkJYnJlYWs7Ci0JCXNjaGVkdWxlKCk7Ci0JfQotCXByX2RlYnVnKCIlcyBsZWZ0IHJlZnJpZ2VyYXRvclxuIiwgY3VycmVudC0+Y29tbSk7Ci0JX19zZXRfY3VycmVudF9zdGF0ZShzYXZlKTsKLX0KLQotc3RhdGljIHZvaWQgZmFrZV9zaWduYWxfd2FrZV91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0Jc2lnbmFsX3dha2VfdXAocCwgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3NlbmRfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQlyZXR1cm4gIShwLT5mbGFncyAmIFBGX0ZSRUVaRVJfTk9TSUcpOwotfQotCi0vKioKLSAqCWZyZWV6ZV90YXNrIC0gc2VuZCBhIGZyZWV6ZSByZXF1ZXN0IHRvIGdpdmVuIHRhc2sKLSAqCUBwOiB0YXNrIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8KLSAqCUBzaWdfb25seTogaWYgc2V0LCB0aGUgcmVxdWVzdCB3aWxsIG9ubHkgYmUgc2VudCBpZiB0aGUgdGFzayBoYXMgdGhlCi0gKgkJUEZfRlJFRVpFUl9OT1NJRyBmbGFnIHVuc2V0Ci0gKglSZXR1cm4gdmFsdWU6ICdmYWxzZScsIGlmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrIGhhcwotICoJCVBGX0ZSRUVaRVJfTk9TSUcgc2V0IG9yIHRoZSB0YXNrIGlzIGZyb3plbiwgJ3RydWUnLCBvdGhlcndpc2UKLSAqCi0gKglUaGUgZnJlZXplIHJlcXVlc3QgaXMgc2VudCBieSBzZXR0aW5nIHRoZSB0YXNrcydzIFRJRl9GUkVFWkUgZmxhZyBhbmQKLSAqCWVpdGhlciBzZW5kaW5nIGEgZmFrZSBzaWduYWwgdG8gaXQgb3Igd2FraW5nIGl0IHVwLCBkZXBlbmRpbmcgb24gd2hldGhlcgotICoJb3Igbm90IGl0IGhhcyBQRl9GUkVFWkVSX05PU0lHIHNldC4gIElmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrCi0gKgloYXMgUEZfRlJFRVpFUl9OT1NJRyBzZXQgKGllLiBpdCBpcyBhIHR5cGljYWwga2VybmVsIHRocmVhZCksIGl0cwotICoJVElGX0ZSRUVaRSBmbGFnIHdpbGwgbm90IGJlIHNldC4KLSAqLwotc3RhdGljIGJvb2wgZnJlZXplX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIHNpZ19vbmx5KQotewotCS8qCi0JICogV2UgZmlyc3QgY2hlY2sgaWYgdGhlIHRhc2sgaXMgZnJlZXppbmcgYW5kIG5leHQgaWYgaXQgaGFzIGFscmVhZHkKLQkgKiBiZWVuIGZyb3plbiB0byBhdm9pZCB0aGUgcmFjZSB3aXRoIGZyb3plbl9wcm9jZXNzKCkgd2hpY2ggZmlyc3QgbWFya3MKLQkgKiB0aGUgdGFzayBhcyBmcm96ZW4gYW5kIG5leHQgY2xlYXJzIGl0cyBUSUZfRlJFRVpFLgotCSAqLwotCWlmICghZnJlZXppbmcocCkpIHsKLQkJcm1iKCk7Ci0JCWlmIChmcm96ZW4ocCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJaWYgKCFzaWdfb25seSB8fCBzaG91bGRfc2VuZF9zaWduYWwocCkpCi0JCQlzZXRfZnJlZXplX2ZsYWcocCk7Ci0JCWVsc2UKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoc2hvdWxkX3NlbmRfc2lnbmFsKHApKSB7Ci0JCWlmICghc2lnbmFsX3BlbmRpbmcocCkpCi0JCQlmYWtlX3NpZ25hbF93YWtlX3VwKHApOwotCX0gZWxzZSBpZiAoc2lnX29ubHkpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0gZWxzZSB7Ci0JCXdha2VfdXBfc3RhdGUocCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgY2FuY2VsX2ZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGZyZWV6aW5nKHApKSB7Ci0JCXByX2RlYnVnKCIgIGNsZWFuIHVwOiAlc1xuIiwgcC0+Y29tbSk7Ci0JCWNsZWFyX2ZyZWV6ZV9mbGFnKHApOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQlyZWNhbGNfc2lncGVuZGluZ19hbmRfd2FrZShwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCX0KLX0KLQogc3RhdGljIGludCB0cnlfdG9fZnJlZXplX3Rhc2tzKGJvb2wgc2lnX29ubHkpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKQEAgLTI1MCw2ICsxMzUsOSBAQAogCQlpZiAobm9zaWdfb25seSAmJiBzaG91bGRfc2VuZF9zaWduYWwocCkpCiAJCQljb250aW51ZTsKIAorCQlpZiAoY2dyb3VwX2Zyb3plbihwKSkKKwkJCWNvbnRpbnVlOworCiAJCXRoYXdfcHJvY2VzcyhwKTsKIAl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKQEAgLTI2NCw0ICsxNTIsMyBAQAogCXByaW50aygiZG9uZS5cbiIpOwogfQogCi1FWFBPUlRfU1lNQk9MKHJlZnJpZ2VyYXRvcik7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvdXNlci5jIGIva2VybmVsL3Bvd2VyL3VzZXIuYwppbmRleCBhNjMzMmEzLi4wMDViOTNkIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvdXNlci5jCisrKyBiL2tlcm5lbC9wb3dlci91c2VyLmMKQEAgLTIxMiwxMyArMjEyLDIwIEBACiAJY2FzZSBTTkFQU0hPVF9GUkVFWkU6CiAJCWlmIChkYXRhLT5mcm96ZW4pCiAJCQlicmVhazsKKwogCQlwcmludGsoIlN5bmNpbmcgZmlsZXN5c3RlbXMgLi4uICIpOwogCQlzeXNfc3luYygpOwogCQlwcmludGsoImRvbmUuXG4iKTsKIAotCQllcnJvciA9IGZyZWV6ZV9wcm9jZXNzZXMoKTsKKwkJZXJyb3IgPSB1c2VybW9kZWhlbHBlcl9kaXNhYmxlKCk7CiAJCWlmIChlcnJvcikKKwkJCWJyZWFrOworCisJCWVycm9yID0gZnJlZXplX3Byb2Nlc3NlcygpOworCQlpZiAoZXJyb3IpIHsKIAkJCXRoYXdfcHJvY2Vzc2VzKCk7CisJCQl1c2VybW9kZWhlbHBlcl9lbmFibGUoKTsKKwkJfQogCQlpZiAoIWVycm9yKQogCQkJZGF0YS0+ZnJvemVuID0gMTsKIAkJYnJlYWs7CkBAIC0yMjcsNiArMjM0LDcgQEAKIAkJaWYgKCFkYXRhLT5mcm96ZW4gfHwgZGF0YS0+cmVhZHkpCiAJCQlicmVhazsKIAkJdGhhd19wcm9jZXNzZXMoKTsKKwkJdXNlcm1vZGVoZWxwZXJfZW5hYmxlKCk7CiAJCWRhdGEtPmZyb3plbiA9IDA7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggYTQzMGZkMC4uNjM0MWFmNyAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtMTMsNyArMTMsNyBAQAogICogRml4ZWQgU01QIHN5bmNocm9uaXphdGlvbiwgMDgvMDgvOTksIE1hbmZyZWQgU3ByYXVsCiAgKiAgICAgbWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tCiAgKiBSZXdyb3RlIGJpdHMgdG8gZ2V0IHJpZCBvZiBjb25zb2xlX2xvY2sKLSAqCTAxTWFyMDEgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorICoJMDFNYXIwMSBBbmRyZXcgTW9ydG9uCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNTc3LDkgKzU3Nyw2IEBACiAgKiBAZm10OiBmb3JtYXQgc3RyaW5nCiAgKgogICogVGhpcyBpcyBwcmludGsoKS4gIEl0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dC4gIFdlIHdhbnQgaXQgdG8gd29yay4KLSAqIEJlIGF3YXJlIG9mIHRoZSBmYWN0IHRoYXQgaWYgb29wc19pbl9wcm9ncmVzcyBpcyBub3Qgc2V0LCB3ZSBtaWdodCB0cnkgdG8KLSAqIHdha2Uga2xvZ2QgdXAgd2hpY2ggY291bGQgZGVhZGxvY2sgb24gcnVucXVldWUgbG9jayBpZiBwcmludGsoKSBpcyBjYWxsZWQKLSAqIGZyb20gc2NoZWR1bGVyIGNvZGUuCiAgKgogICogV2UgdHJ5IHRvIGdyYWIgdGhlIGNvbnNvbGVfc2VtLiAgSWYgd2Ugc3VjY2VlZCwgaXQncyBlYXN5IC0gd2UgbG9nIHRoZSBvdXRwdXQgYW5kCiAgKiBjYWxsIHRoZSBjb25zb2xlIGRyaXZlcnMuICBJZiB3ZSBmYWlsIHRvIGdldCB0aGUgc2VtYXBob3JlIHdlIHBsYWNlIHRoZSBvdXRwdXQKQEAgLTU5Myw2ICs1OTAsOCBAQAogICoKICAqIFNlZSBhbHNvOgogICogcHJpbnRmKDMpCisgKgorICogU2VlIHRoZSB2c25wcmludGYoKSBkb2N1bWVudGF0aW9uIGZvciBmb3JtYXQgc3RyaW5nIGV4dGVuc2lvbnMgb3ZlciBDOTkuCiAgKi8KIAogYXNtbGlua2FnZSBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQpAQCAtOTgyLDEwICs5ODEsMjUgQEAKIAlyZXR1cm4gY29uc29sZV9sb2NrZWQ7CiB9CiAKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIHByaW50a19wZW5kaW5nKTsKKwordm9pZCBwcmludGtfdGljayh2b2lkKQoreworCWlmIChfX2dldF9jcHVfdmFyKHByaW50a19wZW5kaW5nKSkgeworCQlfX2dldF9jcHVfdmFyKHByaW50a19wZW5kaW5nKSA9IDA7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbG9nX3dhaXQpOworCX0KK30KKworaW50IHByaW50a19uZWVkc19jcHUoaW50IGNwdSkKK3sKKwlyZXR1cm4gcGVyX2NwdShwcmludGtfcGVuZGluZywgY3B1KTsKK30KKwogdm9pZCB3YWtlX3VwX2tsb2dkKHZvaWQpCiB7Ci0JaWYgKCFvb3BzX2luX3Byb2dyZXNzICYmIHdhaXRxdWV1ZV9hY3RpdmUoJmxvZ193YWl0KSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZsb2dfd2FpdCk7CisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmxvZ193YWl0KSkKKwkJX19yYXdfZ2V0X2NwdV92YXIocHJpbnRrX3BlbmRpbmcpID0gMTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJvZmlsZS5jIGIva2VybmVsL3Byb2ZpbGUuYwppbmRleCBjZDI2YmVkLi5hOWU0MjJkIDEwMDY0NAotLS0gYS9rZXJuZWwvcHJvZmlsZS5jCisrKyBiL2tlcm5lbC9wcm9maWxlLmMKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KQEAgLTUwLDExICs1MiwxMSBAQAogc3RhdGljIERFRklORV9NVVRFWChwcm9maWxlX2ZsaXBfbXV0ZXgpOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotc3RhdGljIGludCBfX2luaXQgcHJvZmlsZV9zZXR1cChjaGFyICpzdHIpCitpbnQgcHJvZmlsZV9zZXR1cChjaGFyICpzdHIpCiB7Ci0Jc3RhdGljIGNoYXIgX19pbml0ZGF0YSBzY2hlZHN0cltdID0gInNjaGVkdWxlIjsKLQlzdGF0aWMgY2hhciBfX2luaXRkYXRhIHNsZWVwc3RyW10gPSAic2xlZXAiOwotCXN0YXRpYyBjaGFyIF9faW5pdGRhdGEga3Ztc3RyW10gPSAia3ZtIjsKKwlzdGF0aWMgY2hhciBzY2hlZHN0cltdID0gInNjaGVkdWxlIjsKKwlzdGF0aWMgY2hhciBzbGVlcHN0cltdID0gInNsZWVwIjsKKwlzdGF0aWMgY2hhciBrdm1zdHJbXSA9ICJrdm0iOwogCWludCBwYXI7CiAKIAlpZiAoIXN0cm5jbXAoc3RyLCBzbGVlcHN0ciwgc3RybGVuKHNsZWVwc3RyKSkpIHsKQEAgLTEwMCwxNCArMTAyLDMzIEBACiBfX3NldHVwKCJwcm9maWxlPSIsIHByb2ZpbGVfc2V0dXApOwogCiAKLXZvaWQgX19pbml0IHByb2ZpbGVfaW5pdCh2b2lkKQoraW50IHByb2ZpbGVfaW5pdCh2b2lkKQogeworCWludCBidWZmZXJfYnl0ZXM7CiAJaWYgKCFwcm9mX29uKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJLyogb25seSB0ZXh0IGlzIHByb2ZpbGVkICovCiAJcHJvZl9sZW4gPSAoX2V0ZXh0IC0gX3N0ZXh0KSA+PiBwcm9mX3NoaWZ0OwotCXByb2ZfYnVmZmVyID0gYWxsb2NfYm9vdG1lbShwcm9mX2xlbipzaXplb2YoYXRvbWljX3QpKTsKKwlidWZmZXJfYnl0ZXMgPSBwcm9mX2xlbipzaXplb2YoYXRvbWljX3QpOworCWlmICghc2xhYl9pc19hdmFpbGFibGUoKSkgeworCQlwcm9mX2J1ZmZlciA9IGFsbG9jX2Jvb3RtZW0oYnVmZmVyX2J5dGVzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJvZl9idWZmZXIgPSBremFsbG9jKGJ1ZmZlcl9ieXRlcywgR0ZQX0tFUk5FTCk7CisJaWYgKHByb2ZfYnVmZmVyKQorCQlyZXR1cm4gMDsKKworCXByb2ZfYnVmZmVyID0gYWxsb2NfcGFnZXNfZXhhY3QoYnVmZmVyX2J5dGVzLCBHRlBfS0VSTkVMfF9fR0ZQX1pFUk8pOworCWlmIChwcm9mX2J1ZmZlcikKKwkJcmV0dXJuIDA7CisKKwlwcm9mX2J1ZmZlciA9IHZtYWxsb2MoYnVmZmVyX2J5dGVzKTsKKwlpZiAocHJvZl9idWZmZXIpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIC8qIFByb2ZpbGUgZXZlbnQgbm90aWZpY2F0aW9ucyAqLwpAQCAtNTI3LDcgKzU0OCw3IEBACiB7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGNyZWF0ZV9oYXNoX3RhYmxlcyh2b2lkKQorc3RhdGljIGludCBjcmVhdGVfaGFzaF90YWJsZXModm9pZCkKIHsKIAlpbnQgY3B1OwogCkBAIC01NzUsMTQgKzU5NiwxNCBAQAogI2RlZmluZSBjcmVhdGVfaGFzaF90YWJsZXMoKQkJCSh7IDA7IH0pCiAjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgY3JlYXRlX3Byb2NfcHJvZmlsZSh2b2lkKQoraW50IGNyZWF0ZV9wcm9jX3Byb2ZpbGUodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogCiAJaWYgKCFwcm9mX29uKQogCQlyZXR1cm4gMDsKIAlpZiAoY3JlYXRlX2hhc2hfdGFibGVzKCkpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJZW50cnkgPSBwcm9jX2NyZWF0ZSgicHJvZmlsZSIsIFNfSVdVU1IgfCBTX0lSVUdPLAogCQkJICAgIE5VTEwsICZwcm9jX3Byb2ZpbGVfb3BlcmF0aW9ucyk7CiAJaWYgKCFlbnRyeSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCAzNTY2OTlhLi4xZTY4ZTRjIDEwMDY0NAotLS0gYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIva2VybmVsL3B0cmFjZS5jCkBAIC00NSw3ICs0NSw3IEBACiAgKiBUQVNLX1RSQUNFRCwgcmVzdW1lIGl0IG5vdy4KICAqIFJlcXVpcmVzIHRoYXQgaXJxcyBiZSBkaXNhYmxlZC4KICAqLwotdm9pZCBwdHJhY2VfdW50cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQorc3RhdGljIHZvaWQgcHRyYWNlX3VudHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKIAlzcGluX2xvY2soJmNoaWxkLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlpZiAodGFza19pc190cmFjZWQoY2hpbGQpKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cHJlZW1wdC5jIGIva2VybmVsL3JjdXByZWVtcHQuYwppbmRleCBjYTRiYmJlLi41OTIzNmU4IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cHJlZW1wdC5jCisrKyBiL2tlcm5lbC9yY3VwcmVlbXB0LmMKQEAgLTU0LDkgKzU0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwcmVlbXB0X3RyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAvKgogICogUFJFRU1QVF9SQ1UgZGF0YSBzdHJ1Y3R1cmVzLgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKaW5kZXggOTBiNWIxMi4uODVjYjkwNSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCkBAIC00MiwxMCArNDIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYmIuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3JjdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAdXMuaWJtLmNvbT4gYW5kICIKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZXNvdXJjZS5jIGIva2VybmVsL3Jlc291cmNlLmMKaW5kZXggNDE0ZDZmYy4uNDA4OWQxMiAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc291cmNlLmMKKysrIGIva2VybmVsL3Jlc291cmNlLmMKQEAgLTM4LDEwICszOCw2IEBACiAKIHN0YXRpYyBERUZJTkVfUldMT0NLKHJlc291cmNlX2xvY2spOwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQotZW51bSB7IE1BWF9JT1JFU19MRVZFTCA9IDUgfTsKLQogc3RhdGljIHZvaWQgKnJfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCByZXNvdXJjZSAqcCA9IHY7CkBAIC01Myw2ICs0OSwxMCBAQAogCXJldHVybiBwLT5zaWJsaW5nOwogfQogCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKworZW51bSB7IE1BWF9JT1JFU19MRVZFTCA9IDUgfTsKKwogc3RhdGljIHZvaWQgKnJfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIAlfX2FjcXVpcmVzKHJlc291cmNlX2xvY2spCiB7CkBAIC01NDksMTMgKzU0OSw5IEBACiAJfQogCiAJaWYgKCFyZXMpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICBfX3Jlc2VydmVfcmVnaW9uX3dpdGhfc3BsaXQ6ICglcykgWyVsbHgsICVsbHhdLCByZXM6ICglcykgWyVsbHgsICVsbHhdXG4iLAotCQkJIGNvbmZsaWN0LT5uYW1lLCBjb25mbGljdC0+c3RhcnQsIGNvbmZsaWN0LT5lbmQsCi0JCQkgbmFtZSwgc3RhcnQsIGVuZCk7Ci0KIAkJLyogZmFpbGVkLCBzcGxpdCBhbmQgdHJ5IGFnYWluICovCiAKLQkJLyogY29uZmxpY3QgY292ZXJyZWQgd2hvbGUgYXJlYSAqLworCQkvKiBjb25mbGljdCBjb3ZlcmVkIHdob2xlIGFyZWEgKi8KIAkJaWYgKGNvbmZsaWN0LT5zdGFydCA8PSBzdGFydCAmJiBjb25mbGljdC0+ZW5kID49IGVuZCkKIAkJCXJldHVybjsKIApAQCAtNjMwLDMzICs2MjYsMzQgQEAKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGt6YWxsb2Moc2l6ZW9mKCpyZXMpLCBHRlBfS0VSTkVMKTsKIAotCWlmIChyZXMpIHsKLQkJcmVzLT5uYW1lID0gbmFtZTsKLQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQlyZXMtPmVuZCA9IHN0YXJ0ICsgbiAtIDE7Ci0JCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1k7CisJaWYgKCFyZXMpCisJCXJldHVybiBOVUxMOwogCi0JCXdyaXRlX2xvY2soJnJlc291cmNlX2xvY2spOworCXJlcy0+bmFtZSA9IG5hbWU7CisJcmVzLT5zdGFydCA9IHN0YXJ0OworCXJlcy0+ZW5kID0gc3RhcnQgKyBuIC0gMTsKKwlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZOwogCi0JCWZvciAoOzspIHsKLQkJCXN0cnVjdCByZXNvdXJjZSAqY29uZmxpY3Q7CisJd3JpdGVfbG9jaygmcmVzb3VyY2VfbG9jayk7CiAKLQkJCWNvbmZsaWN0ID0gX19yZXF1ZXN0X3Jlc291cmNlKHBhcmVudCwgcmVzKTsKLQkJCWlmICghY29uZmxpY3QpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoY29uZmxpY3QgIT0gcGFyZW50KSB7Ci0JCQkJcGFyZW50ID0gY29uZmxpY3Q7Ci0JCQkJaWYgKCEoY29uZmxpY3QtPmZsYWdzICYgSU9SRVNPVVJDRV9CVVNZKSkKLQkJCQkJY29udGludWU7Ci0JCQl9CisJZm9yICg7OykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKmNvbmZsaWN0OwogCi0JCQkvKiBVaGh1aCwgdGhhdCBkaWRuJ3Qgd29yayBvdXQuLiAqLwotCQkJa2ZyZWUocmVzKTsKLQkJCXJlcyA9IE5VTEw7CisJCWNvbmZsaWN0ID0gX19yZXF1ZXN0X3Jlc291cmNlKHBhcmVudCwgcmVzKTsKKwkJaWYgKCFjb25mbGljdCkKIAkJCWJyZWFrOworCQlpZiAoY29uZmxpY3QgIT0gcGFyZW50KSB7CisJCQlwYXJlbnQgPSBjb25mbGljdDsKKwkJCWlmICghKGNvbmZsaWN0LT5mbGFncyAmIElPUkVTT1VSQ0VfQlVTWSkpCisJCQkJY29udGludWU7CiAJCX0KLQkJd3JpdGVfdW5sb2NrKCZyZXNvdXJjZV9sb2NrKTsKKworCQkvKiBVaGh1aCwgdGhhdCBkaWRuJ3Qgd29yayBvdXQuLiAqLworCQlrZnJlZShyZXMpOworCQlyZXMgPSBOVUxMOworCQlicmVhazsKIAl9CisJd3JpdGVfdW5sb2NrKCZyZXNvdXJjZV9sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogRVhQT1JUX1NZTUJPTChfX3JlcXVlc3RfcmVnaW9uKTsKQEAgLTgzMSwzICs4MjgsNDAgQEAKIH0KIAogX19zZXR1cCgicmVzZXJ2ZT0iLCByZXNlcnZlX3NldHVwKTsKKworLyoKKyAqIENoZWNrIGlmIHRoZSByZXF1ZXN0ZWQgYWRkciBhbmQgc2l6ZSBzcGFucyBtb3JlIHRoYW4gYW55IHNsb3QgaW4gdGhlCisgKiBpb21lbSByZXNvdXJjZSB0cmVlLgorICovCitpbnQgaW9tZW1fbWFwX3Nhbml0eV9jaGVjayhyZXNvdXJjZV9zaXplX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCByZXNvdXJjZSAqcCA9ICZpb21lbV9yZXNvdXJjZTsKKwlpbnQgZXJyID0gMDsKKwlsb2ZmX3QgbDsKKworCXJlYWRfbG9jaygmcmVzb3VyY2VfbG9jayk7CisJZm9yIChwID0gcC0+Y2hpbGQ7IHAgOyBwID0gcl9uZXh0KE5VTEwsIHAsICZsKSkgeworCQkvKgorCQkgKiBXZSBjYW4gcHJvYmFibHkgc2tpcCB0aGUgcmVzb3VyY2VzIHdpdGhvdXQKKwkJICogSU9SRVNPVVJDRV9JTyBhdHRyaWJ1dGU/CisJCSAqLworCQlpZiAocC0+c3RhcnQgPj0gYWRkciArIHNpemUpCisJCQljb250aW51ZTsKKwkJaWYgKHAtPmVuZCA8IGFkZHIpCisJCQljb250aW51ZTsKKwkJaWYgKHAtPnN0YXJ0IDw9IGFkZHIgJiYgKHAtPmVuZCA+PSBhZGRyICsgc2l6ZSAtIDEpKQorCQkJY29udGludWU7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInJlc291cmNlIG1hcCBzYW5pdHkgY2hlY2sgY29uZmxpY3Q6ICIKKwkJICAgICAgICIweCVsbHggMHglbGx4IDB4JWxseCAweCVsbHggJXNcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFkZHIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShhZGRyICsgc2l6ZSAtIDEpLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwLT5zdGFydCwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcC0+ZW5kLAorCQkgICAgICAgcC0+bmFtZSk7CisJCWVyciA9IC0xOworCQlicmVhazsKKwl9CisJcmVhZF91bmxvY2soJnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggM2QxYWQxMy4uZDkwNmY3MiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTQwNDcsMjMgKzQwNDcsMjYgQEAKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChrc3RhdCk7CiAKIC8qCi0gKiBSZXR1cm4gcC0+c3VtX2V4ZWNfcnVudGltZSBwbHVzIGFueSBtb3JlIG5zIG9uIHRoZSBzY2hlZF9jbG9jawotICogdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBiYW5rZWQgaW4gY2FzZSB0aGUgdGFzayBpcyBjdXJyZW50bHkgcnVubmluZy4KKyAqIFJldHVybiBhbnkgbnMgb24gdGhlIHNjaGVkX2Nsb2NrIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gYmFua2VkIGluCisgKiBAcCBpbiBjYXNlIHRoYXQgdGFzayBpcyBjdXJyZW50bHkgcnVubmluZy4KICAqLwotdW5zaWduZWQgbG9uZyBsb25nIHRhc2tfc2NoZWRfcnVudGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit1bnNpZ25lZCBsb25nIGxvbmcgdGFza19kZWx0YV9leGVjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU2NCBucywgZGVsdGFfZXhlYzsKIAlzdHJ1Y3QgcnEgKnJxOworCXU2NCBucyA9IDA7CiAKIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOwotCW5zID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKKwogCWlmICh0YXNrX2N1cnJlbnQocnEsIHApKSB7CisJCXU2NCBkZWx0YV9leGVjOworCiAJCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAJCWRlbHRhX2V4ZWMgPSBycS0+Y2xvY2sgLSBwLT5zZS5leGVjX3N0YXJ0OwogCQlpZiAoKHM2NClkZWx0YV9leGVjID4gMCkKLQkJCW5zICs9IGRlbHRhX2V4ZWM7CisJCQlucyA9IGRlbHRhX2V4ZWM7CiAJfQorCiAJdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CiAKIAlyZXR1cm4gbnM7CkBAIC00MDgwLDYgKzQwODMsNyBAQAogCWNwdXRpbWU2NF90IHRtcDsKIAogCXAtPnV0aW1lID0gY3B1dGltZV9hZGQocC0+dXRpbWUsIGNwdXRpbWUpOworCWFjY291bnRfZ3JvdXBfdXNlcl90aW1lKHAsIGNwdXRpbWUpOwogCiAJLyogQWRkIHVzZXIgdGltZSB0byBjcHVzdGF0LiAqLwogCXRtcCA9IGNwdXRpbWVfdG9fY3B1dGltZTY0KGNwdXRpbWUpOwpAQCAtNDEwNCw2ICs0MTA4LDcgQEAKIAl0bXAgPSBjcHV0aW1lX3RvX2NwdXRpbWU2NChjcHV0aW1lKTsKIAogCXAtPnV0aW1lID0gY3B1dGltZV9hZGQocC0+dXRpbWUsIGNwdXRpbWUpOworCWFjY291bnRfZ3JvdXBfdXNlcl90aW1lKHAsIGNwdXRpbWUpOwogCXAtPmd0aW1lID0gY3B1dGltZV9hZGQocC0+Z3RpbWUsIGNwdXRpbWUpOwogCiAJY3B1c3RhdC0+dXNlciA9IGNwdXRpbWU2NF9hZGQoY3B1c3RhdC0+dXNlciwgdG1wKTsKQEAgLTQxMzksNiArNDE0NCw3IEBACiAJfQogCiAJcC0+c3RpbWUgPSBjcHV0aW1lX2FkZChwLT5zdGltZSwgY3B1dGltZSk7CisJYWNjb3VudF9ncm91cF9zeXN0ZW1fdGltZShwLCBjcHV0aW1lKTsKIAogCS8qIEFkZCBzeXN0ZW0gdGltZSB0byBjcHVzdGF0LiAqLwogCXRtcCA9IGNwdXRpbWVfdG9fY3B1dGltZTY0KGNwdXRpbWUpOwpAQCAtNDE4MCw2ICs0MTg2LDcgQEAKIAogCWlmIChwID09IHJxLT5pZGxlKSB7CiAJCXAtPnN0aW1lID0gY3B1dGltZV9hZGQocC0+c3RpbWUsIHN0ZWFsKTsKKwkJYWNjb3VudF9ncm91cF9zeXN0ZW1fdGltZShwLCBzdGVhbCk7CiAJCWlmIChhdG9taWNfcmVhZCgmcnEtPm5yX2lvd2FpdCkgPiAwKQogCQkJY3B1c3RhdC0+aW93YWl0ID0gY3B1dGltZTY0X2FkZChjcHVzdGF0LT5pb3dhaXQsIHRtcCk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jbG9jay5jIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKaW5kZXggZThhYjA5Ni4uODE3ODcyNCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2Nsb2NrLmMKKysrIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKQEAgLTExOCwxMyArMTE4LDEzIEBACiAKIAkvKgogCSAqIHNjZC0+Y2xvY2sgPSBjbGFtcChzY2QtPnRpY2tfZ3RvZCArIGRlbHRhLAotCSAqIAkJICAgICAgbWF4KHNjZC0+dGlja19ndG9kLCBzY2QtPmNsb2NrKSwKLQkgKiAJCSAgICAgIHNjZC0+dGlja19ndG9kICsgVElDS19OU0VDKTsKKwkgKgkJICAgICAgbWF4KHNjZC0+dGlja19ndG9kLCBzY2QtPmNsb2NrKSwKKwkgKgkJICAgICAgbWF4KHNjZC0+Y2xvY2ssIHNjZC0+dGlja19ndG9kICsgVElDS19OU0VDKSk7CiAJICovCiAKIAljbG9jayA9IHNjZC0+dGlja19ndG9kICsgZGVsdGE7CiAJbWluX2Nsb2NrID0gd3JhcF9tYXgoc2NkLT50aWNrX2d0b2QsIHNjZC0+Y2xvY2spOwotCW1heF9jbG9jayA9IHNjZC0+dGlja19ndG9kICsgVElDS19OU0VDOworCW1heF9jbG9jayA9IHdyYXBfbWF4KHNjZC0+Y2xvY2ssIHNjZC0+dGlja19ndG9kICsgVElDS19OU0VDKTsKIAogCWNsb2NrID0gd3JhcF9tYXgoY2xvY2ssIG1pbl9jbG9jayk7CiAJY2xvY2sgPSB3cmFwX21pbihjbG9jaywgbWF4X2Nsb2NrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKaW5kZXggYmJlNmIzMS4uYWQ5NThjMSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2RlYnVnLmMKKysrIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKQEAgLTMzMywxMiArMzMzLDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbnVtX3RocmVhZHMgPSAxOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWlmIChsb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpKSB7CiAJCW51bV90aHJlYWRzID0gYXRvbWljX3JlYWQoJnAtPnNpZ25hbC0+Y291bnQpOwogCQl1bmxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncyk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJU0VRX3ByaW50ZihtLCAiJXMgKCVkLCAjdGhyZWFkczogJWQpXG4iLCBwLT5jb21tLCBwLT5waWQsIG51bV90aHJlYWRzKTsKIAlTRVFfcHJpbnRmKG0sCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmFpci5jIGIva2VybmVsL3NjaGVkX2ZhaXIuYwppbmRleCAxOGZkMTcxLi5mNjA0ZGFlIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKQEAgLTQ0OSw2ICs0NDksNyBAQAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnRhc2sgPSB0YXNrX29mKGN1cnIpOwogCiAJCWNwdWFjY3RfY2hhcmdlKGN1cnRhc2ssIGRlbHRhX2V4ZWMpOworCQlhY2NvdW50X2dyb3VwX2V4ZWNfcnVudGltZShjdXJ0YXNrLCBkZWx0YV9leGVjKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggY2RmNTc0MC4uYjQ0NmRjOCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTUyNiw2ICs1MjYsOCBAQAogCXNjaGVkc3RhdF9zZXQoY3Vyci0+c2UuZXhlY19tYXgsIG1heChjdXJyLT5zZS5leGVjX21heCwgZGVsdGFfZXhlYykpOwogCiAJY3Vyci0+c2Uuc3VtX2V4ZWNfcnVudGltZSArPSBkZWx0YV9leGVjOworCWFjY291bnRfZ3JvdXBfZXhlY19ydW50aW1lKGN1cnIsIGRlbHRhX2V4ZWMpOworCiAJY3Vyci0+c2UuZXhlY19zdGFydCA9IHJxLT5jbG9jazsKIAljcHVhY2N0X2NoYXJnZShjdXJyLCBkZWx0YV9leGVjKTsKIApAQCAtMTQ1OCw3ICsxNDYwLDcgQEAKIAkJcC0+cnQudGltZW91dCsrOwogCQluZXh0ID0gRElWX1JPVU5EX1VQKG1pbihzb2Z0LCBoYXJkKSwgVVNFQ19QRVJfU0VDL0haKTsKIAkJaWYgKHAtPnJ0LnRpbWVvdXQgPiBuZXh0KQotCQkJcC0+aXRfc2NoZWRfZXhwaXJlcyA9IHAtPnNlLnN1bV9leGVjX3J1bnRpbWU7CisJCQlwLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gcC0+c2Uuc3VtX2V4ZWNfcnVudGltZTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9zdGF0cy5oIGIva2VybmVsL3NjaGVkX3N0YXRzLmgKaW5kZXggODM4NWQ0My4uYjhjMTU2OSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3N0YXRzLmgKKysrIGIva2VybmVsL3NjaGVkX3N0YXRzLmgKQEAgLTI3MCwzICsyNzAsODkgQEAKICNkZWZpbmUgc2NoZWRfaW5mb19zd2l0Y2godCwgbmV4dCkJCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiBDT05GSUdfU0NIRURTVEFUUyB8fCBDT05GSUdfVEFTS19ERUxBWV9BQ0NUICovCiAKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSBmdW5jdGlvbnMgdGhhdCBzdXBwb3J0IHNjaGVkdWxlci1pbnRlcm5hbCB0aW1lIGFjY291bnRpbmcuCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGdlbmVyYWxseSBjYWxsZWQgYXQgdGhlIHRpbWVyIHRpY2suICBOb25lIG9mIHRoaXMgZGVwZW5kcworICogb24gQ09ORklHX1NDSEVEU1RBVFMuCisgKi8KKworLyoqCisgKiBhY2NvdW50X2dyb3VwX3VzZXJfdGltZSAtIE1haW50YWluIHV0aW1lIGZvciBhIHRocmVhZCBncm91cC4KKyAqCisgKiBAdHNrOglQb2ludGVyIHRvIHRhc2sgc3RydWN0dXJlLgorICogQGNwdXRpbWU6CVRpbWUgdmFsdWUgYnkgd2hpY2ggdG8gaW5jcmVtZW50IHRoZSB1dGltZSBmaWVsZCBvZiB0aGUKKyAqCQl0aHJlYWRfZ3JvdXBfY3B1dGltZSBzdHJ1Y3R1cmUuCisgKgorICogSWYgdGhyZWFkIGdyb3VwIHRpbWUgaXMgYmVpbmcgbWFpbnRhaW5lZCwgZ2V0IHRoZSBzdHJ1Y3R1cmUgZm9yIHRoZQorICogcnVubmluZyBDUFUgYW5kIHVwZGF0ZSB0aGUgdXRpbWUgZmllbGQgdGhlcmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2dyb3VwX3VzZXJfdGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJICAgY3B1dGltZV90IGNwdXRpbWUpCit7CisJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZzsKKworCXNpZyA9IHRzay0+c2lnbmFsOworCWlmICh1bmxpa2VseSghc2lnKSkKKwkJcmV0dXJuOworCWlmIChzaWctPmNwdXRpbWUudG90YWxzKSB7CisJCXN0cnVjdCB0YXNrX2NwdXRpbWUgKnRpbWVzOworCisJCXRpbWVzID0gcGVyX2NwdV9wdHIoc2lnLT5jcHV0aW1lLnRvdGFscywgZ2V0X2NwdSgpKTsKKwkJdGltZXMtPnV0aW1lID0gY3B1dGltZV9hZGQodGltZXMtPnV0aW1lLCBjcHV0aW1lKTsKKwkJcHV0X2NwdV9ub19yZXNjaGVkKCk7CisJfQorfQorCisvKioKKyAqIGFjY291bnRfZ3JvdXBfc3lzdGVtX3RpbWUgLSBNYWludGFpbiBzdGltZSBmb3IgYSB0aHJlYWQgZ3JvdXAuCisgKgorICogQHRzazoJUG9pbnRlciB0byB0YXNrIHN0cnVjdHVyZS4KKyAqIEBjcHV0aW1lOglUaW1lIHZhbHVlIGJ5IHdoaWNoIHRvIGluY3JlbWVudCB0aGUgc3RpbWUgZmllbGQgb2YgdGhlCisgKgkJdGhyZWFkX2dyb3VwX2NwdXRpbWUgc3RydWN0dXJlLgorICoKKyAqIElmIHRocmVhZCBncm91cCB0aW1lIGlzIGJlaW5nIG1haW50YWluZWQsIGdldCB0aGUgc3RydWN0dXJlIGZvciB0aGUKKyAqIHJ1bm5pbmcgQ1BVIGFuZCB1cGRhdGUgdGhlIHN0aW1lIGZpZWxkIHRoZXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9ncm91cF9zeXN0ZW1fdGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJICAgICBjcHV0aW1lX3QgY3B1dGltZSkKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOworCisJc2lnID0gdHNrLT5zaWduYWw7CisJaWYgKHVubGlrZWx5KCFzaWcpKQorCQlyZXR1cm47CisJaWYgKHNpZy0+Y3B1dGltZS50b3RhbHMpIHsKKwkJc3RydWN0IHRhc2tfY3B1dGltZSAqdGltZXM7CisKKwkJdGltZXMgPSBwZXJfY3B1X3B0cihzaWctPmNwdXRpbWUudG90YWxzLCBnZXRfY3B1KCkpOworCQl0aW1lcy0+c3RpbWUgPSBjcHV0aW1lX2FkZCh0aW1lcy0+c3RpbWUsIGNwdXRpbWUpOworCQlwdXRfY3B1X25vX3Jlc2NoZWQoKTsKKwl9Cit9CisKKy8qKgorICogYWNjb3VudF9ncm91cF9leGVjX3J1bnRpbWUgLSBNYWludGFpbiBleGVjIHJ1bnRpbWUgZm9yIGEgdGhyZWFkIGdyb3VwLgorICoKKyAqIEB0c2s6CVBvaW50ZXIgdG8gdGFzayBzdHJ1Y3R1cmUuCisgKiBAbnM6CQlUaW1lIHZhbHVlIGJ5IHdoaWNoIHRvIGluY3JlbWVudCB0aGUgc3VtX2V4ZWNfcnVudGltZSBmaWVsZAorICoJCW9mIHRoZSB0aHJlYWRfZ3JvdXBfY3B1dGltZSBzdHJ1Y3R1cmUuCisgKgorICogSWYgdGhyZWFkIGdyb3VwIHRpbWUgaXMgYmVpbmcgbWFpbnRhaW5lZCwgZ2V0IHRoZSBzdHJ1Y3R1cmUgZm9yIHRoZQorICogcnVubmluZyBDUFUgYW5kIHVwZGF0ZSB0aGUgc3VtX2V4ZWNfcnVudGltZSBmaWVsZCB0aGVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfZ3JvdXBfZXhlY19ydW50aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbnMpCit7CisJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZzsKKworCXNpZyA9IHRzay0+c2lnbmFsOworCWlmICh1bmxpa2VseSghc2lnKSkKKwkJcmV0dXJuOworCWlmIChzaWctPmNwdXRpbWUudG90YWxzKSB7CisJCXN0cnVjdCB0YXNrX2NwdXRpbWUgKnRpbWVzOworCisJCXRpbWVzID0gcGVyX2NwdV9wdHIoc2lnLT5jcHV0aW1lLnRvdGFscywgZ2V0X2NwdSgpKTsKKwkJdGltZXMtPnN1bV9leGVjX3J1bnRpbWUgKz0gbnM7CisJCXB1dF9jcHVfbm9fcmVzY2hlZCgpOworCX0KK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCBiZjQwZWNjLi4xMDUyMTdkIDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC0xMzQxLDYgKzEzNDEsNyBAQAogCXN0cnVjdCBzaWdpbmZvIGluZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKnBzaWc7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOwogCWludCByZXQgPSBzaWc7CiAKIAlCVUdfT04oc2lnID09IC0xKTsKQEAgLTEzNzEsMTAgKzEzNzIsOSBAQAogCiAJaW5mby5zaV91aWQgPSB0c2stPnVpZDsKIAotCWluZm8uc2lfdXRpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3B1dGltZV9hZGQodHNrLT51dGltZSwKLQkJCQkJCSAgICAgICB0c2stPnNpZ25hbC0+dXRpbWUpKTsKLQlpbmZvLnNpX3N0aW1lID0gY3B1dGltZV90b19jbG9ja190KGNwdXRpbWVfYWRkKHRzay0+c3RpbWUsCi0JCQkJCQkgICAgICAgdHNrLT5zaWduYWwtPnN0aW1lKSk7CisJdGhyZWFkX2dyb3VwX2NwdXRpbWUodHNrLCAmY3B1dGltZSk7CisJaW5mby5zaV91dGltZSA9IGNwdXRpbWVfdG9famlmZmllcyhjcHV0aW1lLnV0aW1lKTsKKwlpbmZvLnNpX3N0aW1lID0gY3B1dGltZV90b19qaWZmaWVzKGNwdXRpbWUuc3RpbWUpOwogCiAJaW5mby5zaV9zdGF0dXMgPSB0c2stPmV4aXRfY29kZSAmIDB4N2Y7CiAJaWYgKHRzay0+ZXhpdF9jb2RlICYgMHg4MCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IGM1MDZmMjYuLjcxMTBkYWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKKysrIGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNiw2ICs2LDggQEAKICAqCURpc3RyaWJ1dGUgdW5kZXIgR1BMdjIuCiAgKgogICoJUmV3cml0dGVuLiBPbGQgb25lIHdhcyBnb29kIGluIDIuMiwgYnV0IGluIDIuMyBpdCB3YXMgaW1tb3JhbC4gLS1BTksgKDk5MDkwMykKKyAqCisgKglSZW1vdGUgc29mdGlycSBpbmZyYXN0cnVjdHVyZSBpcyBieSBKZW5zIEF4Ym9lLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTQ2LDcgKzQ4LDcgQEAKIEVYUE9SVF9TWU1CT0woaXJxX3N0YXQpOwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gc29mdGlycV92ZWNbMzJdIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworc3RhdGljIHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiBzb2Z0aXJxX3ZlY1tOUl9TT0ZUSVJRU10gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwga3NvZnRpcnFkKTsKIApAQCAtMjA1LDcgKzIwNywxOCBAQAogCiAJZG8gewogCQlpZiAocGVuZGluZyAmIDEpIHsKKwkJCWludCBwcmV2X2NvdW50ID0gcHJlZW1wdF9jb3VudCgpOworCiAJCQloLT5hY3Rpb24oaCk7CisKKwkJCWlmICh1bmxpa2VseShwcmV2X2NvdW50ICE9IHByZWVtcHRfY291bnQoKSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImh1aCwgZW50ZXJlZCBzb2Z0aXJxICV0ZCAlcCIKKwkJCQkgICAgICAgIndpdGggcHJlZW1wdF9jb3VudCAlMDh4LCIKKwkJCQkgICAgICAgIiBleGl0ZWQgd2l0aCAlMDh4P1xuIiwgaCAtIHNvZnRpcnFfdmVjLAorCQkJCSAgICAgICBoLT5hY3Rpb24sIHByZXZfY291bnQsIHByZWVtcHRfY291bnQoKSk7CisJCQkJcHJlZW1wdF9jb3VudCgpID0gcHJldl9jb3VudDsKKwkJCX0KKwogCQkJcmN1X2JoX3FzY3RyX2luYyhjcHUpOwogCQl9CiAJCWgrKzsKQEAgLTI1NCwxNiArMjY3LDEyIEBACiAgKi8KIHZvaWQgaXJxX2VudGVyKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX05PX0haCiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwogCWlmIChpZGxlX2NwdShjcHUpICYmICFpbl9pbnRlcnJ1cHQoKSkKLQkJdGlja19ub2h6X3N0b3BfaWRsZShjcHUpOwotI2VuZGlmCisJCXRpY2tfY2hlY2tfaWRsZShjcHUpOworCiAJX19pcnFfZW50ZXIoKTsKLSNpZmRlZiBDT05GSUdfTk9fSFoKLQlpZiAoaWRsZV9jcHUoY3B1KSkKLQkJdGlja19ub2h6X3VwZGF0ZV9qaWZmaWVzKCk7Ci0jZW5kaWYKIH0KIAogI2lmZGVmIF9fQVJDSF9JUlFfRVhJVF9JUlFTX0RJU0FCTEVECkBAIC00NjMsMTcgKzQ3MiwxNDQgQEAKIAogRVhQT1JUX1NZTUJPTCh0YXNrbGV0X2tpbGwpOwogCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGlzdF9oZWFkIFtOUl9TT0ZUSVJRU10sIHNvZnRpcnFfd29ya19saXN0KTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChzb2Z0aXJxX3dvcmtfbGlzdCk7CisKK3N0YXRpYyB2b2lkIF9fbG9jYWxfdHJpZ2dlcihzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3AsIGludCBzb2Z0aXJxKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmX19nZXRfY3B1X3Zhcihzb2Z0aXJxX3dvcmtfbGlzdFtzb2Z0aXJxXSk7CisKKwlsaXN0X2FkZF90YWlsKCZjcC0+bGlzdCwgaGVhZCk7CisKKwkvKiBUcmlnZ2VyIHRoZSBzb2Z0aXJxIG9ubHkgaWYgdGhlIGxpc3Qgd2FzIHByZXZpb3VzbHkgZW1wdHkuICAqLworCWlmIChoZWFkLT5uZXh0ID09ICZjcC0+bGlzdCkKKwkJcmFpc2Vfc29mdGlycV9pcnFvZmYoc29mdGlycSk7Cit9CisKKyNpZmRlZiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMKK3N0YXRpYyB2b2lkIHJlbW90ZV9zb2Z0aXJxX3JlY2VpdmUodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3AgPSBkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHNvZnRpcnE7CisKKwlzb2Z0aXJxID0gY3AtPnByaXY7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX19sb2NhbF90cmlnZ2VyKGNwLCBzb2Z0aXJxKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgX190cnlfcmVtb3RlX3NvZnRpcnEoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgY3B1LCBpbnQgc29mdGlycSkKK3sKKwlpZiAoY3B1X29ubGluZShjcHUpKSB7CisJCWNwLT5mdW5jID0gcmVtb3RlX3NvZnRpcnFfcmVjZWl2ZTsKKwkJY3AtPmluZm8gPSBjcDsKKwkJY3AtPmZsYWdzID0gMDsKKwkJY3AtPnByaXYgPSBzb2Z0aXJxOworCisJCV9fc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgY3ApOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisjZWxzZSAvKiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgKi8KK3N0YXRpYyBpbnQgX190cnlfcmVtb3RlX3NvZnRpcnEoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgY3B1LCBpbnQgc29mdGlycSkKK3sKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCisvKioKKyAqIF9fc2VuZF9yZW1vdGVfc29mdGlycSAtIHRyeSB0byBzY2hlZHVsZSBzb2Z0aXJxIHdvcmsgb24gYSByZW1vdGUgY3B1CisgKiBAY3A6IHByaXZhdGUgU01QIGNhbGwgZnVuY3Rpb24gZGF0YSBhcmVhCisgKiBAY3B1OiB0aGUgcmVtb3RlIGNwdQorICogQHRoaXNfY3B1OiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjcHUKKyAqIEBzb2Z0aXJxOiB0aGUgc29mdGlycSBmb3IgdGhlIHdvcmsKKyAqCisgKiBBdHRlbXB0IHRvIHNjaGVkdWxlIHNvZnRpcnEgd29yayBvbiBhIHJlbW90ZSBjcHUuICBJZiB0aGlzIGNhbm5vdCBiZQorICogZG9uZSwgdGhlIHdvcmsgaXMgaW5zdGVhZCBxdWV1ZWQgdXAgb24gdGhlIGxvY2FsIGNwdS4KKyAqCisgKiBJbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWQuCisgKi8KK3ZvaWQgX19zZW5kX3JlbW90ZV9zb2Z0aXJxKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcCwgaW50IGNwdSwgaW50IHRoaXNfY3B1LCBpbnQgc29mdGlycSkKK3sKKwlpZiAoY3B1ID09IHRoaXNfY3B1IHx8IF9fdHJ5X3JlbW90ZV9zb2Z0aXJxKGNwLCBjcHUsIHNvZnRpcnEpKQorCQlfX2xvY2FsX3RyaWdnZXIoY3AsIHNvZnRpcnEpOworfQorRVhQT1JUX1NZTUJPTChfX3NlbmRfcmVtb3RlX3NvZnRpcnEpOworCisvKioKKyAqIHNlbmRfcmVtb3RlX3NvZnRpcnEgLSB0cnkgdG8gc2NoZWR1bGUgc29mdGlycSB3b3JrIG9uIGEgcmVtb3RlIGNwdQorICogQGNwOiBwcml2YXRlIFNNUCBjYWxsIGZ1bmN0aW9uIGRhdGEgYXJlYQorICogQGNwdTogdGhlIHJlbW90ZSBjcHUKKyAqIEBzb2Z0aXJxOiB0aGUgc29mdGlycSBmb3IgdGhlIHdvcmsKKyAqCisgKiBMaWtlIF9fc2VuZF9yZW1vdGVfc29mdGlycSBleGNlcHQgdGhhdCBkaXNhYmxpbmcgaW50ZXJydXB0cyBhbmQKKyAqIGNvbXB1dGluZyB0aGUgY3VycmVudCBjcHUgaXMgZG9uZSBmb3IgdGhlIGNhbGxlci4KKyAqLwordm9pZCBzZW5kX3JlbW90ZV9zb2Z0aXJxKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcCwgaW50IGNwdSwgaW50IHNvZnRpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdGhpc19jcHU7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJX19zZW5kX3JlbW90ZV9zb2Z0aXJxKGNwLCBjcHUsIHRoaXNfY3B1LCBzb2Z0aXJxKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKHNlbmRfcmVtb3RlX3NvZnRpcnEpOworCitzdGF0aWMgaW50IF9fY3B1aW5pdCByZW1vdGVfc29mdGlycV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCS8qCisJICogSWYgYSBDUFUgZ29lcyBhd2F5LCBzcGxpY2UgaXRzIGVudHJpZXMgdG8gdGhlIGN1cnJlbnQgQ1BVCisJICogYW5kIHRyaWdnZXIgYSBydW4gb2YgdGhlIHNvZnRpcnEKKwkgKi8KKwlpZiAoYWN0aW9uID09IENQVV9ERUFEIHx8IGFjdGlvbiA9PSBDUFVfREVBRF9GUk9aRU4pIHsKKwkJaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKSBoY3B1OworCQlpbnQgaTsKKworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlmb3IgKGkgPSAwOyBpIDwgTlJfU09GVElSUVM7IGkrKykgeworCQkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZwZXJfY3B1KHNvZnRpcnFfd29ya19saXN0W2ldLCBjcHUpOworCQkJc3RydWN0IGxpc3RfaGVhZCAqbG9jYWxfaGVhZDsKKworCQkJaWYgKGxpc3RfZW1wdHkoaGVhZCkpCisJCQkJY29udGludWU7CisKKwkJCWxvY2FsX2hlYWQgPSAmX19nZXRfY3B1X3Zhcihzb2Z0aXJxX3dvcmtfbGlzdFtpXSk7CisJCQlsaXN0X3NwbGljZV9pbml0KGhlYWQsIGxvY2FsX2hlYWQpOworCQkJcmFpc2Vfc29mdGlycV9pcnFvZmYoaSk7CisJCX0KKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCX0KKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSByZW1vdGVfc29mdGlycV9jcHVfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSByZW1vdGVfc29mdGlycV9jcHVfbm90aWZ5LAorfTsKKwogdm9pZCBfX2luaXQgc29mdGlycV9pbml0KHZvaWQpCiB7CiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJaW50IGk7CisKIAkJcGVyX2NwdSh0YXNrbGV0X3ZlYywgY3B1KS50YWlsID0KIAkJCSZwZXJfY3B1KHRhc2tsZXRfdmVjLCBjcHUpLmhlYWQ7CiAJCXBlcl9jcHUodGFza2xldF9oaV92ZWMsIGNwdSkudGFpbCA9CiAJCQkmcGVyX2NwdSh0YXNrbGV0X2hpX3ZlYywgY3B1KS5oZWFkOworCQlmb3IgKGkgPSAwOyBpIDwgTlJfU09GVElSUVM7IGkrKykKKwkJCUlOSVRfTElTVF9IRUFEKCZwZXJfY3B1KHNvZnRpcnFfd29ya19saXN0W2ldLCBjcHUpKTsKIAl9CiAKKwlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJnJlbW90ZV9zb2Z0aXJxX2NwdV9ub3RpZmllcik7CisKIAlvcGVuX3NvZnRpcnEoVEFTS0xFVF9TT0ZUSVJRLCB0YXNrbGV0X2FjdGlvbik7CiAJb3Blbl9zb2Z0aXJxKEhJX1NPRlRJUlEsIHRhc2tsZXRfaGlfYWN0aW9uKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMgYi9rZXJuZWwvc29mdGxvY2t1cC5jCmluZGV4IGNiODM4ZWUuLjM5NTNlNGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMKKysrIGIva2VybmVsL3NvZnRsb2NrdXAuYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJICogSWYgdGhlIHN5c3RlbSBjcmFzaGVkIGFscmVhZHkgdGhlbiBhbGwgYmV0cyBhcmUgb2ZmLAogCSAqIGRvIG5vdCByZXBvcnQgZXh0cmEgaHVuZyB0YXNrczoKIAkgKi8KLQlpZiAoKHRhaW50ZWQgJiBUQUlOVF9ESUUpIHx8IGRpZF9wYW5pYykKKwlpZiAodGVzdF90YWludChUQUlOVF9ESUUpIHx8IGRpZF9wYW5pYykKIAkJcmV0dXJuOwogCiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAyMzRkOTQ1Li41Mzg3OWNkIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC04NTMsMzggKzg1MywyOCBAQAogCXJldHVybiBvbGRfZnNnaWQ7CiB9CiAKK3ZvaWQgZG9fc3lzX3RpbWVzKHN0cnVjdCB0bXMgKnRtcykKK3sKKwlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CisJY3B1dGltZV90IGN1dGltZSwgY3N0aW1lOworCisJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJdGhyZWFkX2dyb3VwX2NwdXRpbWUoY3VycmVudCwgJmNwdXRpbWUpOworCWN1dGltZSA9IGN1cnJlbnQtPnNpZ25hbC0+Y3V0aW1lOworCWNzdGltZSA9IGN1cnJlbnQtPnNpZ25hbC0+Y3N0aW1lOworCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJdG1zLT50bXNfdXRpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3B1dGltZS51dGltZSk7CisJdG1zLT50bXNfc3RpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3B1dGltZS5zdGltZSk7CisJdG1zLT50bXNfY3V0aW1lID0gY3B1dGltZV90b19jbG9ja190KGN1dGltZSk7CisJdG1zLT50bXNfY3N0aW1lID0gY3B1dGltZV90b19jbG9ja190KGNzdGltZSk7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBzeXNfdGltZXMoc3RydWN0IHRtcyBfX3VzZXIgKiB0YnVmKQogewotCS8qCi0JICoJSW4gdGhlIFNNUCB3b3JsZCB3ZSBtaWdodCBqdXN0IGJlIHVubHVja3kgYW5kIGhhdmUgb25lIG9mCi0JICoJdGhlIHRpbWVzIGluY3JlbWVudCBhcyB3ZSB1c2UgaXQuIFNpbmNlIHRoZSB2YWx1ZSBpcyBhbgotCSAqCWF0b21pY2FsbHkgc2FmZSB0eXBlIHRoaXMgaXMganVzdCBmaW5lLiBDb25jZXB0dWFsbHkgaXRzCi0JICoJYXMgaWYgdGhlIHN5c2NhbGwgdG9vayBhbiBpbnN0YW50IGxvbmdlciB0byBvY2N1ci4KLQkgKi8KIAlpZiAodGJ1ZikgewogCQlzdHJ1Y3QgdG1zIHRtcDsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7Ci0JCWNwdXRpbWVfdCB1dGltZSwgc3RpbWUsIGN1dGltZSwgY3N0aW1lOwogCi0JCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXV0aW1lID0gdHNrLT5zaWduYWwtPnV0aW1lOwotCQlzdGltZSA9IHRzay0+c2lnbmFsLT5zdGltZTsKLQkJdCA9IHRzazsKLQkJZG8gewotCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgdC0+dXRpbWUpOwotCQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgdC0+c3RpbWUpOwotCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQl9IHdoaWxlICh0ICE9IHRzayk7Ci0KLQkJY3V0aW1lID0gdHNrLT5zaWduYWwtPmN1dGltZTsKLQkJY3N0aW1lID0gdHNrLT5zaWduYWwtPmNzdGltZTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCi0JCXRtcC50bXNfdXRpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QodXRpbWUpOwotCQl0bXAudG1zX3N0aW1lID0gY3B1dGltZV90b19jbG9ja190KHN0aW1lKTsKLQkJdG1wLnRtc19jdXRpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3V0aW1lKTsKLQkJdG1wLnRtc19jc3RpbWUgPSBjcHV0aW1lX3RvX2Nsb2NrX3QoY3N0aW1lKTsKKwkJZG9fc3lzX3RpbWVzKCZ0bXApOwogCQlpZiAoY29weV90b191c2VyKHRidWYsICZ0bXAsIHNpemVvZihzdHJ1Y3QgdG1zKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC0xMzQ5LDggKzEzMzksMTAgQEAKIAlkb3duX3dyaXRlKCZ1dHNfc2VtKTsKIAllcnJubyA9IC1FRkFVTFQ7CiAJaWYgKCFjb3B5X2Zyb21fdXNlcih0bXAsIG5hbWUsIGxlbikpIHsKLQkJbWVtY3B5KHV0c25hbWUoKS0+bm9kZW5hbWUsIHRtcCwgbGVuKTsKLQkJdXRzbmFtZSgpLT5ub2RlbmFtZVtsZW5dID0gMDsKKwkJc3RydWN0IG5ld191dHNuYW1lICp1ID0gdXRzbmFtZSgpOworCisJCW1lbWNweSh1LT5ub2RlbmFtZSwgdG1wLCBsZW4pOworCQltZW1zZXQodS0+bm9kZW5hbWUgKyBsZW4sIDAsIHNpemVvZih1LT5ub2RlbmFtZSkgLSBsZW4pOwogCQllcnJubyA9IDA7CiAJfQogCXVwX3dyaXRlKCZ1dHNfc2VtKTsKQEAgLTEzNjIsMTUgKzEzNTQsMTcgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0aG9zdG5hbWUoY2hhciBfX3VzZXIgKm5hbWUsIGludCBsZW4pCiB7CiAJaW50IGksIGVycm5vOworCXN0cnVjdCBuZXdfdXRzbmFtZSAqdTsKIAogCWlmIChsZW4gPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlkb3duX3JlYWQoJnV0c19zZW0pOwotCWkgPSAxICsgc3RybGVuKHV0c25hbWUoKS0+bm9kZW5hbWUpOworCXUgPSB1dHNuYW1lKCk7CisJaSA9IDEgKyBzdHJsZW4odS0+bm9kZW5hbWUpOwogCWlmIChpID4gbGVuKQogCQlpID0gbGVuOwogCWVycm5vID0gMDsKLQlpZiAoY29weV90b191c2VyKG5hbWUsIHV0c25hbWUoKS0+bm9kZW5hbWUsIGkpKQorCWlmIChjb3B5X3RvX3VzZXIobmFtZSwgdS0+bm9kZW5hbWUsIGkpKQogCQllcnJubyA9IC1FRkFVTFQ7CiAJdXBfcmVhZCgmdXRzX3NlbSk7CiAJcmV0dXJuIGVycm5vOwpAQCAtMTM5NSw4ICsxMzg5LDEwIEBACiAJZG93bl93cml0ZSgmdXRzX3NlbSk7CiAJZXJybm8gPSAtRUZBVUxUOwogCWlmICghY29weV9mcm9tX3VzZXIodG1wLCBuYW1lLCBsZW4pKSB7Ci0JCW1lbWNweSh1dHNuYW1lKCktPmRvbWFpbm5hbWUsIHRtcCwgbGVuKTsKLQkJdXRzbmFtZSgpLT5kb21haW5uYW1lW2xlbl0gPSAwOworCQlzdHJ1Y3QgbmV3X3V0c25hbWUgKnUgPSB1dHNuYW1lKCk7CisKKwkJbWVtY3B5KHUtPmRvbWFpbm5hbWUsIHRtcCwgbGVuKTsKKwkJbWVtc2V0KHUtPmRvbWFpbm5hbWUgKyBsZW4sIDAsIHNpemVvZih1LT5kb21haW5uYW1lKSAtIGxlbik7CiAJCWVycm5vID0gMDsKIAl9CiAJdXBfd3JpdGUoJnV0c19zZW0pOwpAQCAtMTQ0MywyMSArMTQzOSwyOCBAQAogYXNtbGlua2FnZSBsb25nIHN5c19zZXRybGltaXQodW5zaWduZWQgaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0IF9fdXNlciAqcmxpbSkKIHsKIAlzdHJ1Y3QgcmxpbWl0IG5ld19ybGltLCAqb2xkX3JsaW07Ci0JdW5zaWduZWQgbG9uZyBpdF9wcm9mX3NlY3M7CiAJaW50IHJldHZhbDsKIAogCWlmIChyZXNvdXJjZSA+PSBSTElNX05MSU1JVFMpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3X3JsaW0sIHJsaW0sIHNpemVvZigqcmxpbSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAobmV3X3JsaW0ucmxpbV9jdXIgPiBuZXdfcmxpbS5ybGltX21heCkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJb2xkX3JsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW0gKyByZXNvdXJjZTsKIAlpZiAoKG5ld19ybGltLnJsaW1fbWF4ID4gb2xkX3JsaW0tPnJsaW1fbWF4KSAmJgogCSAgICAhY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkKIAkJcmV0dXJuIC1FUEVSTTsKLQlpZiAocmVzb3VyY2UgPT0gUkxJTUlUX05PRklMRSAmJiBuZXdfcmxpbS5ybGltX21heCA+IHN5c2N0bF9ucl9vcGVuKQotCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKHJlc291cmNlID09IFJMSU1JVF9OT0ZJTEUpIHsKKwkJaWYgKG5ld19ybGltLnJsaW1fbWF4ID09IFJMSU1fSU5GSU5JVFkpCisJCQluZXdfcmxpbS5ybGltX21heCA9IHN5c2N0bF9ucl9vcGVuOworCQlpZiAobmV3X3JsaW0ucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkKKwkJCW5ld19ybGltLnJsaW1fY3VyID0gc3lzY3RsX25yX29wZW47CisJCWlmIChuZXdfcmxpbS5ybGltX21heCA+IHN5c2N0bF9ucl9vcGVuKQorCQkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlpZiAobmV3X3JsaW0ucmxpbV9jdXIgPiBuZXdfcmxpbS5ybGltX21heCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR2YWwgPSBzZWN1cml0eV90YXNrX3NldHJsaW1pdChyZXNvdXJjZSwgJm5ld19ybGltKTsKIAlpZiAocmV0dmFsKQpAQCAtMTQ4OSwxOCArMTQ5Miw3IEBACiAJaWYgKG5ld19ybGltLnJsaW1fY3VyID09IFJMSU1fSU5GSU5JVFkpCiAJCWdvdG8gb3V0OwogCi0JaXRfcHJvZl9zZWNzID0gY3B1dGltZV90b19zZWNzKGN1cnJlbnQtPnNpZ25hbC0+aXRfcHJvZl9leHBpcmVzKTsKLQlpZiAoaXRfcHJvZl9zZWNzID09IDAgfHwgbmV3X3JsaW0ucmxpbV9jdXIgPD0gaXRfcHJvZl9zZWNzKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcmxpbV9jdXIgPSBuZXdfcmxpbS5ybGltX2N1cjsKLQkJY3B1dGltZV90IGNwdXRpbWU7Ci0KLQkJY3B1dGltZSA9IHNlY3NfdG9fY3B1dGltZShybGltX2N1cik7Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlzZXRfcHJvY2Vzc19jcHVfdGltZXIoY3VycmVudCwgQ1BVQ0xPQ0tfUFJPRiwgJmNwdXRpbWUsIE5VTEwpOwotCQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JfQorCXVwZGF0ZV9ybGltaXRfY3B1KG5ld19ybGltLnJsaW1fY3VyKTsKIG91dDoKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MzgsMTEgKzE1MzAsOCBAQAogICoKICAqLwogCi1zdGF0aWMgdm9pZCBhY2N1bXVsYXRlX3RocmVhZF9ydXNhZ2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBzdHJ1Y3QgcnVzYWdlICpyLAotCQkJCSAgICAgY3B1dGltZV90ICp1dGltZXAsIGNwdXRpbWVfdCAqc3RpbWVwKQorc3RhdGljIHZvaWQgYWNjdW11bGF0ZV90aHJlYWRfcnVzYWdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgc3RydWN0IHJ1c2FnZSAqcikKIHsKLQkqdXRpbWVwID0gY3B1dGltZV9hZGQoKnV0aW1lcCwgdC0+dXRpbWUpOwotCSpzdGltZXAgPSBjcHV0aW1lX2FkZCgqc3RpbWVwLCB0LT5zdGltZSk7CiAJci0+cnVfbnZjc3cgKz0gdC0+bnZjc3c7CiAJci0+cnVfbml2Y3N3ICs9IHQtPm5pdmNzdzsKIAlyLT5ydV9taW5mbHQgKz0gdC0+bWluX2ZsdDsKQEAgLTE1NTYsMTIgKzE1NDUsMTMgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljcHV0aW1lX3QgdXRpbWUsIHN0aW1lOworCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKIAogCW1lbXNldCgoY2hhciAqKSByLCAwLCBzaXplb2YgKnIpOwogCXV0aW1lID0gc3RpbWUgPSBjcHV0aW1lX3plcm87CiAKIAlpZiAod2hvID09IFJVU0FHRV9USFJFQUQpIHsKLQkJYWNjdW11bGF0ZV90aHJlYWRfcnVzYWdlKHAsIHIsICZ1dGltZSwgJnN0aW1lKTsKKwkJYWNjdW11bGF0ZV90aHJlYWRfcnVzYWdlKHAsIHIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE1ODQsOCArMTU3NCw5IEBACiAJCQkJYnJlYWs7CiAKIAkJY2FzZSBSVVNBR0VfU0VMRjoKLQkJCXV0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIHAtPnNpZ25hbC0+dXRpbWUpOwotCQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgcC0+c2lnbmFsLT5zdGltZSk7CisJCQl0aHJlYWRfZ3JvdXBfY3B1dGltZShwLCAmY3B1dGltZSk7CisJCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCBjcHV0aW1lLnV0aW1lKTsKKwkJCXN0aW1lID0gY3B1dGltZV9hZGQoc3RpbWUsIGNwdXRpbWUuc3RpbWUpOwogCQkJci0+cnVfbnZjc3cgKz0gcC0+c2lnbmFsLT5udmNzdzsKIAkJCXItPnJ1X25pdmNzdyArPSBwLT5zaWduYWwtPm5pdmNzdzsKIAkJCXItPnJ1X21pbmZsdCArPSBwLT5zaWduYWwtPm1pbl9mbHQ7CkBAIC0xNTk0LDcgKzE1ODUsNyBAQAogCQkJci0+cnVfb3VibG9jayArPSBwLT5zaWduYWwtPm91YmxvY2s7CiAJCQl0ID0gcDsKIAkJCWRvIHsKLQkJCQlhY2N1bXVsYXRlX3RocmVhZF9ydXNhZ2UodCwgciwgJnV0aW1lLCAmc3RpbWUpOworCQkJCWFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZSh0LCByKTsKIAkJCQl0ID0gbmV4dF90aHJlYWQodCk7CiAJCQl9IHdoaWxlICh0ICE9IHApOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzX25pLmMgYi9rZXJuZWwvc3lzX25pLmMKaW5kZXggMDhkNmUxYi4uYTc3YjI3YiAxMDA2NDQKLS0tIGEva2VybmVsL3N5c19uaS5jCisrKyBiL2tlcm5lbC9zeXNfbmkuYwpAQCAtMTI1LDYgKzEyNSwxMiBAQAogY29uZF9zeXNjYWxsKHN5c192bTg2KTsKIGNvbmRfc3lzY2FsbChjb21wYXRfc3lzX2lwYyk7CiBjb25kX3N5c2NhbGwoY29tcGF0X3N5c19zeXNjdGwpOworY29uZF9zeXNjYWxsKHN5c19mbG9jayk7Citjb25kX3N5c2NhbGwoc3lzX2lvX3NldHVwKTsKK2NvbmRfc3lzY2FsbChzeXNfaW9fZGVzdHJveSk7Citjb25kX3N5c2NhbGwoc3lzX2lvX3N1Ym1pdCk7Citjb25kX3N5c2NhbGwoc3lzX2lvX2NhbmNlbCk7Citjb25kX3N5c2NhbGwoc3lzX2lvX2dldGV2ZW50cyk7CiAKIC8qIGFyY2gtc3BlY2lmaWMgd2VhayBzeXNjYWxsIGVudHJpZXMgKi8KIGNvbmRfc3lzY2FsbChzeXNfcGNpY29uZmlnX3JlYWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDFiZjM2OWIuLmIzY2M3MzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTgwLDcgKzgwLDYgQEAKIGV4dGVybiBpbnQgc3lzY3RsX2Ryb3BfY2FjaGVzOwogZXh0ZXJuIGludCBwZXJjcHVfcGFnZWxpc3RfZnJhY3Rpb247CiBleHRlcm4gaW50IGNvbXBhdF9sb2c7Ci1leHRlcm4gaW50IG1hcHNfcHJvdGVjdDsKIGV4dGVybiBpbnQgbGF0ZW5jeXRvcF9lbmFibGVkOwogZXh0ZXJuIGludCBzeXNjdGxfbnJfb3Blbl9taW4sIHN5c2N0bF9ucl9vcGVuX21heDsKICNpZmRlZiBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVApAQCAtOTcsNyArOTYsNyBAQAogc3RhdGljIGludCBuZWdfb25lID0gLTE7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19NTVUKKyNpZiBkZWZpbmVkKENPTkZJR19NTVUpICYmIGRlZmluZWQoQ09ORklHX0ZJTEVfTE9DS0lORykKIHN0YXRpYyBpbnQgdHdvID0gMjsKICNlbmRpZgogCkBAIC0xNTAsNyArMTQ5LDcgQEAKICNpZmRlZiBDT05GSUdfUFJPQ19TWVNDVEwKIHN0YXRpYyBpbnQgcHJvY19kb19jYWRfcGlkKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKLXN0YXRpYyBpbnQgcHJvY19kb2ludHZlY190YWludChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK3N0YXRpYyBpbnQgcHJvY190YWludChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSAgICAgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7CiAjZW5kaWYKIApAQCAtMzgwLDEwICszNzksOSBAQAogI2lmZGVmIENPTkZJR19QUk9DX1NZU0NUTAogCXsKIAkJLnByb2NuYW1lCT0gInRhaW50ZWQiLAotCQkuZGF0YQkJPSAmdGFpbnRlZCwKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1heGxlbiAJPSBzaXplb2YobG9uZyksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY190YWludCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX3RhaW50LAogCX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTEFURU5DWVRPUApAQCAtODA4LDE2ICs4MDYsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCiAJfSwKICNlbmRpZgotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JewotCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKLQkJLnByb2NuYW1lICAgICAgID0gIm1hcHNfcHJvdGVjdCIsCi0JCS5kYXRhICAgICAgICAgICA9ICZtYXBzX3Byb3RlY3QsCi0JCS5tYXhsZW4gICAgICAgICA9IHNpemVvZihpbnQpLAotCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb2ludHZlYywKLQl9LAotI2VuZGlmCiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gInBvd2Vyb2ZmX2NtZCIsCkBAIC04NDUsNiArODMzLDE2IEBACiAJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjLAogCX0sCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gInNjYW5fdW5ldmljdGFibGVfcGFnZXMiLAorCQkuZGF0YQkJPSAmc2Nhbl91bmV2aWN0YWJsZV9wYWdlcywKKwkJLm1heGxlbgkJPSBzaXplb2Yoc2Nhbl91bmV2aWN0YWJsZV9wYWdlcyksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmc2Nhbl91bmV2aWN0YWJsZV9oYW5kbGVyLAorCX0sCisjZW5kaWYKIC8qCiAgKiBOT1RFOiBkbyBub3QgYWRkIG5ldyBlbnRyaWVzIHRvIHRoaXMgdGFibGUgdW5sZXNzIHlvdSBoYXZlIHJlYWQKICAqIERvY3VtZW50YXRpb24vc3lzY3RsL2N0bF91bm51bWJlcmVkLnR4dApAQCAtMTI1OSw2ICsxMjU3LDcgQEAKIAkJLmV4dHJhMQkJPSAmbWlub2xkdWlkLAogCQkuZXh0cmEyCQk9ICZtYXhvbGR1aWQsCiAJfSwKKyNpZmRlZiBDT05GSUdfRklMRV9MT0NLSU5HCiAJewogCQkuY3RsX25hbWUJPSBGU19MRUFTRVMsCiAJCS5wcm9jbmFtZQk9ICJsZWFzZXMtZW5hYmxlIiwKQEAgLTEyNjcsNiArMTI2Niw3IEBACiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAl9LAorI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ROT1RJRlkKIAl7CiAJCS5jdGxfbmFtZQk9IEZTX0RJUl9OT1RJRlksCkBAIC0xMjc4LDYgKzEyNzgsNyBAQAogCX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTU1VCisjaWZkZWYgQ09ORklHX0ZJTEVfTE9DS0lORwogCXsKIAkJLmN0bF9uYW1lCT0gRlNfTEVBU0VfVElNRSwKIAkJLnByb2NuYW1lCT0gImxlYXNlLWJyZWFrLXRpbWUiLApAQCAtMTI4OSw2ICsxMjkwLDggQEAKIAkJLmV4dHJhMQkJPSAmemVybywKIAkJLmV4dHJhMgkJPSAmdHdvLAogCX0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQUlPCiAJewogCQkucHJvY25hbWUJPSAiYWlvLW5yIiwKIAkJLmRhdGEJCT0gJmFpb19uciwKQEAgLTEzMDMsNiArMTMwNiw3IEBACiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKIAl9LAorI2VuZGlmIC8qIENPTkZJR19BSU8gKi8KICNpZmRlZiBDT05GSUdfSU5PVElGWV9VU0VSCiAJewogCQkuY3RsX25hbWUJPSBGU19JTk9USUZZLApAQCAtMTUwOCw3ICsxNTEyLDYgQEAKIC8qIFBlcmZvcm0gdGhlIGFjdHVhbCByZWFkL3dyaXRlIG9mIGEgc3lzY3RsIHRhYmxlIGVudHJ5LiAqLwogc3RhdGljIGludCBkb19zeXNjdGxfc3RyYXRlZ3koc3RydWN0IGN0bF90YWJsZV9yb290ICpyb290LAogCQkJc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCi0JCQlpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMTUyMiw4ICsxNTI1LDcgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmICh0YWJsZS0+c3RyYXRlZ3kpIHsKLQkJcmMgPSB0YWJsZS0+c3RyYXRlZ3kodGFibGUsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwKLQkJCQkgICAgIG5ld3ZhbCwgbmV3bGVuKTsKKwkJcmMgPSB0YWJsZS0+c3RyYXRlZ3kodGFibGUsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCQlpZiAocmMgPCAwKQogCQkJcmV0dXJuIHJjOwogCQlpZiAocmMgPiAwKQpAQCAtMTUzMyw4ICsxNTM1LDcgQEAKIAkvKiBJZiB0aGVyZSBpcyBubyBzdHJhdGVneSByb3V0aW5lLCBvciBpZiB0aGUgc3RyYXRlZ3kgcmV0dXJucwogCSAqIHplcm8sIHByb2NlZWQgd2l0aCBhdXRvbWF0aWMgci93ICovCiAJaWYgKHRhYmxlLT5kYXRhICYmIHRhYmxlLT5tYXhsZW4pIHsKLQkJcmMgPSBzeXNjdGxfZGF0YSh0YWJsZSwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLAotCQkJCSBuZXd2YWwsIG5ld2xlbik7CisJCXJjID0gc3lzY3RsX2RhdGEodGFibGUsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCQlpZiAocmMgPCAwKQogCQkJcmV0dXJuIHJjOwogCX0KQEAgLTE1NjYsNyArMTU2Nyw3IEBACiAJCQkJdGFibGUgPSB0YWJsZS0+Y2hpbGQ7CiAJCQkJZ290byByZXBlYXQ7CiAJCQl9Ci0JCQllcnJvciA9IGRvX3N5c2N0bF9zdHJhdGVneShyb290LCB0YWJsZSwgbmFtZSwgbmxlbiwKKwkJCWVycm9yID0gZG9fc3lzY3RsX3N0cmF0ZWd5KHJvb3QsIHRhYmxlLAogCQkJCQkJICAgb2xkdmFsLCBvbGRsZW5wLAogCQkJCQkJICAgbmV3dmFsLCBuZXdsZW4pOwogCQkJcmV0dXJuIGVycm9yOwpAQCAtMjIzNSw0OSArMjIzNiwzOSBAQAogCQkgICAgCSAgICBOVUxMLE5VTEwpOwogfQogCi0jZGVmaW5lIE9QX1NFVAkwCi0jZGVmaW5lIE9QX0FORAkxCi0jZGVmaW5lIE9QX09SCTIKLQotc3RhdGljIGludCBkb19wcm9jX2RvaW50dmVjX2JzZXRfY29udihpbnQgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKmx2YWxwLAotCQkJCSAgICAgIGludCAqdmFscCwKLQkJCQkgICAgICBpbnQgd3JpdGUsIHZvaWQgKmRhdGEpCi17Ci0JaW50IG9wID0gKihpbnQgKilkYXRhOwotCWlmICh3cml0ZSkgewotCQlpbnQgdmFsID0gKm5lZ3AgPyAtKmx2YWxwIDogKmx2YWxwOwotCQlzd2l0Y2gob3ApIHsKLQkJY2FzZSBPUF9TRVQ6CSp2YWxwID0gdmFsOyBicmVhazsKLQkJY2FzZSBPUF9BTkQ6CSp2YWxwICY9IHZhbDsgYnJlYWs7Ci0JCWNhc2UgT1BfT1I6CSp2YWxwIHw9IHZhbDsgYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgdmFsID0gKnZhbHA7Ci0JCWlmICh2YWwgPCAwKSB7Ci0JCQkqbmVncCA9IC0xOwotCQkJKmx2YWxwID0gKHVuc2lnbmVkIGxvbmcpLXZhbDsKLQkJfSBlbHNlIHsKLQkJCSpuZWdwID0gMDsKLQkJCSpsdmFscCA9ICh1bnNpZ25lZCBsb25nKXZhbDsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKLSAqCVRhaW50IHZhbHVlcyBjYW4gb25seSBiZSBpbmNyZWFzZWQKKyAqIFRhaW50IHZhbHVlcyBjYW4gb25seSBiZSBpbmNyZWFzZWQKKyAqIFRoaXMgbWVhbnMgd2UgY2FuIHNhZmVseSB1c2UgYSB0ZW1wb3JhcnkuCiAgKi8KLXN0YXRpYyBpbnQgcHJvY19kb2ludHZlY190YWludChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK3N0YXRpYyBpbnQgcHJvY190YWludChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSAgICAgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKLQlpbnQgb3A7CisJc3RydWN0IGN0bF90YWJsZSB0OworCXVuc2lnbmVkIGxvbmcgdG1wdGFpbnQgPSBnZXRfdGFpbnQoKTsKKwlpbnQgZXJyOwogCiAJaWYgKHdyaXRlICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwogCi0Jb3AgPSBPUF9PUjsKLQlyZXR1cm4gZG9fcHJvY19kb2ludHZlYyh0YWJsZSx3cml0ZSxmaWxwLGJ1ZmZlcixsZW5wLHBwb3MsCi0JCQkJZG9fcHJvY19kb2ludHZlY19ic2V0X2NvbnYsJm9wKTsKKwl0ID0gKnRhYmxlOworCXQuZGF0YSA9ICZ0bXB0YWludDsKKwllcnIgPSBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KCZ0LCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmICh3cml0ZSkgeworCQkvKgorCQkgKiBQb29yIG1hbidzIGF0b21pYyBvci4gTm90IHdvcnRoIGFkZGluZyBhIHByaW1pdGl2ZQorCQkgKiB0byBldmVyeW9uZSdzIGF0b21pYy5oIGZvciB0aGlzCisJCSAqLworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IEJJVFNfUEVSX0xPTkcgJiYgdG1wdGFpbnQgPj4gaTsgaSsrKSB7CisJCQlpZiAoKHRtcHRhaW50ID4+IGkpICYgMSkKKwkJCQlhZGRfdGFpbnQoaSk7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdHJ1Y3QgZG9fcHJvY19kb2ludHZlY19taW5tYXhfY29udl9wYXJhbSB7CkBAIC0yNzI1LDcgKzI3MTYsNyBAQAogICovCiAKIC8qIFRoZSBnZW5lcmljIHN5c2N0bCBkYXRhIHJvdXRpbmUgKHVzZWQgaWYgbm8gc3RyYXRlZ3kgcm91dGluZSBzdXBwbGllZCkgKi8KLWludCBzeXNjdGxfZGF0YShzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX2RhdGEoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0yNzU5LDcgKzI3NTAsNyBAQAogfQogCiAvKiBUaGUgZ2VuZXJpYyBzdHJpbmcgc3RyYXRlZ3kgcm91dGluZTogKi8KLWludCBzeXNjdGxfc3RyaW5nKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfc3RyaW5nKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAogCQkgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCSAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTI4MDUsNyArMjc5Niw3IEBACiAgKiBhcmUgYmV0d2VlbiB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgZ2l2ZW4gaW4gdGhlIGFycmF5cwogICogdGFibGUtPmV4dHJhMSBhbmQgdGFibGUtPmV4dHJhMiwgcmVzcGVjdGl2ZWx5LgogICovCi1pbnQgc3lzY3RsX2ludHZlYyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX2ludHZlYyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTI4NDEsNyArMjgzMiw3IEBACiB9CiAKIC8qIFN0cmF0ZWd5IGZ1bmN0aW9uIHRvIGNvbnZlcnQgamlmZmllcyB0byBzZWNvbmRzICovIAotaW50IHN5c2N0bF9qaWZmaWVzKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfamlmZmllcyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTI4NzUsNyArMjg2Niw3IEBACiB9CiAKIC8qIFN0cmF0ZWd5IGZ1bmN0aW9uIHRvIGNvbnZlcnQgamlmZmllcyB0byBzZWNvbmRzICovIAotaW50IHN5c2N0bF9tc19qaWZmaWVzKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfbXNfamlmZmllcyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTI5MzAsMzUgKzI5MjEsMzUgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWludCBzeXNjdGxfZGF0YShzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX2RhdGEoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCSAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCXJldHVybiAtRU5PU1lTOwogfQogCi1pbnQgc3lzY3RsX3N0cmluZyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX3N0cmluZyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLWludCBzeXNjdGxfaW50dmVjKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfaW50dmVjKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCXJldHVybiAtRU5PU1lTOwogfQogCi1pbnQgc3lzY3RsX2ppZmZpZXMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9qaWZmaWVzKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCXJldHVybiAtRU5PU1lTOwogfQogCi1pbnQgc3lzY3RsX21zX2ppZmZpZXMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9tc19qaWZmaWVzKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvS2NvbmZpZyBiL2tlcm5lbC90aW1lL0tjb25maWcKaW5kZXggOGQ1MzEwNi4uOTVlZDQyOSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvS2NvbmZpZworKysgYi9rZXJuZWwvdGltZS9LY29uZmlnCkBAIC0zLDcgKzMsNiBAQAogIwogY29uZmlnIFRJQ0tfT05FU0hPVAogCWJvb2wKLQlkZWZhdWx0IG4KIAogY29uZmlnIE5PX0haCiAJYm9vbCAiVGlja2xlc3MgU3lzdGVtIChEeW5hbWljIFRpY2tzKSIKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCmluZGV4IDA5M2Q0YWMuLjllZDJlZWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwpAQCAtMzI1LDYgKzMyNSw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCisJLyogc2F2ZSBtdWx0X29yaWcgb24gcmVnaXN0cmF0aW9uICovCisJYy0+bXVsdF9vcmlnID0gYy0+bXVsdDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NvdXJjZV9sb2NrLCBmbGFncyk7CiAJcmV0ID0gY2xvY2tzb3VyY2VfZW5xdWV1ZShjKTsKIAlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2ppZmZpZXMuYyBiL2tlcm5lbC90aW1lL2ppZmZpZXMuYwppbmRleCA0YzI1NmZkLi4xY2E5OTU1IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9qaWZmaWVzLmMKKysrIGIva2VybmVsL3RpbWUvamlmZmllcy5jCkBAIC02MSw2ICs2MSw3IEBACiAJLnJlYWQJCT0gamlmZmllc19yZWFkLAogCS5tYXNrCQk9IDB4ZmZmZmZmZmYsIC8qMzJiaXRzKi8KIAkubXVsdAkJPSBOU0VDX1BFUl9KSUZGWSA8PCBKSUZGSUVTX1NISUZULCAvKiBkZXRhaWxzIGFib3ZlICovCisJLm11bHRfb3JpZwk9IE5TRUNfUEVSX0pJRkZZIDw8IEpJRkZJRVNfU0hJRlQsCiAJLnNoaWZ0CQk9IEpJRkZJRVNfU0hJRlQsCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9udHAuYyBiL2tlcm5lbC90aW1lL250cC5jCmluZGV4IDFhZDQ2ZjMuLjFhMjA3MTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL250cC5jCisrKyBiL2tlcm5lbC90aW1lL250cC5jCkBAIC0xMCwxMyArMTAsMTMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS90aW1leC5oPgogCiAvKgpAQCAtMjE4LDExICsyMTgsMTEgQEAKIC8qIERpc2FibGUgdGhlIGNtb3MgdXBkYXRlIC0gdXNlZCBieSB2aXJ0dWFsaXphdGlvbiBhbmQgZW1iZWRkZWQgKi8KIGludCBub19zeW5jX2Ntb3NfY2xvY2sgIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyB2b2lkIHN5bmNfY21vc19jbG9jayh1bnNpZ25lZCBsb25nIGR1bW15KTsKK3N0YXRpYyB2b2lkIHN5bmNfY21vc19jbG9jayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCi1zdGF0aWMgREVGSU5FX1RJTUVSKHN5bmNfY21vc190aW1lciwgc3luY19jbW9zX2Nsb2NrLCAwLCAwKTsKK3N0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhzeW5jX2Ntb3Nfd29yaywgc3luY19jbW9zX2Nsb2NrKTsKIAotc3RhdGljIHZvaWQgc3luY19jbW9zX2Nsb2NrKHVuc2lnbmVkIGxvbmcgZHVtbXkpCitzdGF0aWMgdm9pZCBzeW5jX2Ntb3NfY2xvY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB0aW1lc3BlYyBub3csIG5leHQ7CiAJaW50IGZhaWwgPSAxOwpAQCAtMjU4LDEzICsyNTgsMTMgQEAKIAkJbmV4dC50dl9zZWMrKzsKIAkJbmV4dC50dl9uc2VjIC09IE5TRUNfUEVSX1NFQzsKIAl9Ci0JbW9kX3RpbWVyKCZzeW5jX2Ntb3NfdGltZXIsIGppZmZpZXMgKyB0aW1lc3BlY190b19qaWZmaWVzKCZuZXh0KSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzeW5jX2Ntb3Nfd29yaywgdGltZXNwZWNfdG9famlmZmllcygmbmV4dCkpOwogfQogCiBzdGF0aWMgdm9pZCBub3RpZnlfY21vc190aW1lcih2b2lkKQogewogCWlmICghbm9fc3luY19jbW9zX2Nsb2NrKQotCQltb2RfdGltZXIoJnN5bmNfY21vc190aW1lciwgamlmZmllcyArIDEpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnN5bmNfY21vc193b3JrLCAwKTsKIH0KIAogI2Vsc2UKQEAgLTI3NywzOCArMjc3LDUwIEBACiBpbnQgZG9fYWRqdGltZXgoc3RydWN0IHRpbWV4ICp0eGMpCiB7CiAJc3RydWN0IHRpbWVzcGVjIHRzOwotCWxvbmcgc2F2ZV9hZGp1c3QsIHNlYzsKIAlpbnQgcmVzdWx0OwogCi0JLyogSW4gb3JkZXIgdG8gbW9kaWZ5IGFueXRoaW5nLCB5b3UgZ290dGEgYmUgc3VwZXItdXNlciEgKi8KLQlpZiAodHhjLT5tb2RlcyAmJiAhY2FwYWJsZShDQVBfU1lTX1RJTUUpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JLyogTm93IHdlIHZhbGlkYXRlIHRoZSBkYXRhIGJlZm9yZSBkaXNhYmxpbmcgaW50ZXJydXB0cyAqLwotCi0JaWYgKCh0eGMtPm1vZGVzICYgQURKX09GRlNFVF9TSU5HTEVTSE9UKSA9PSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpIHsKKwkvKiBWYWxpZGF0ZSB0aGUgZGF0YSBiZWZvcmUgZGlzYWJsaW5nIGludGVycnVwdHMgKi8KKwlpZiAodHhjLT5tb2RlcyAmIEFESl9BREpUSU1FKSB7CiAJCS8qIHNpbmdsZXNob3QgbXVzdCBub3QgYmUgdXNlZCB3aXRoIGFueSBvdGhlciBtb2RlIGJpdHMgKi8KLQkJaWYgKHR4Yy0+bW9kZXMgJiB+QURKX09GRlNFVF9TU19SRUFEKQorCQlpZiAoISh0eGMtPm1vZGVzICYgQURKX09GRlNFVF9TSU5HTEVTSE9UKSkKIAkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoISh0eGMtPm1vZGVzICYgQURKX09GRlNFVF9SRUFET05MWSkgJiYKKwkJICAgICFjYXBhYmxlKENBUF9TWVNfVElNRSkpCisJCQlyZXR1cm4gLUVQRVJNOworCX0gZWxzZSB7CisJCS8qIEluIG9yZGVyIHRvIG1vZGlmeSBhbnl0aGluZywgeW91IGdvdHRhIGJlIHN1cGVyLXVzZXIhICovCisJCSBpZiAodHhjLT5tb2RlcyAmJiAhY2FwYWJsZShDQVBfU1lTX1RJTUUpKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCQkvKiBpZiB0aGUgcXVhcnR6IGlzIG9mZiBieSBtb3JlIHRoYW4gMTAlIHNvbWV0aGluZyBpcyBWRVJZIHdyb25nISAqLworCQlpZiAodHhjLT5tb2RlcyAmIEFESl9USUNLICYmCisJCSAgICAodHhjLT50aWNrIDwgIDkwMDAwMC9VU0VSX0haIHx8CisJCSAgICAgdHhjLT50aWNrID4gMTEwMDAwMC9VU0VSX0haKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMgJiYgdGltZV9zdGF0ZSAhPSBUSU1FX09LKQorCQkJaHJ0aW1lcl9jYW5jZWwoJmxlYXBfdGltZXIpOwogCX0KIAotCS8qIGlmIHRoZSBxdWFydHogaXMgb2ZmIGJ5IG1vcmUgdGhhbiAxMCUgc29tZXRoaW5nIGlzIFZFUlkgd3JvbmcgISAqLwotCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0spCi0JCWlmICh0eGMtPnRpY2sgPCAgOTAwMDAwL1VTRVJfSFogfHwKLQkJICAgIHR4Yy0+dGljayA+IDExMDAwMDAvVVNFUl9IWikKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHRpbWVfc3RhdGUgIT0gVElNRV9PSyAmJiB0eGMtPm1vZGVzICYgQURKX1NUQVRVUykKLQkJaHJ0aW1lcl9jYW5jZWwoJmxlYXBfdGltZXIpOwogCWdldG5zdGltZW9mZGF5KCZ0cyk7CiAKIAl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7CiAKLQkvKiBTYXZlIGZvciBsYXRlciAtIHNlbWFudGljcyBvZiBhZGp0aW1lIGlzIHRvIHJldHVybiBvbGQgdmFsdWUgKi8KLQlzYXZlX2FkanVzdCA9IHRpbWVfYWRqdXN0OwotCiAJLyogSWYgdGhlcmUgYXJlIGlucHV0IHBhcmFtZXRlcnMsIHRoZW4gcHJvY2VzcyB0aGVtICovCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfQURKVElNRSkgeworCQlsb25nIHNhdmVfYWRqdXN0ID0gdGltZV9hZGp1c3Q7CisKKwkJaWYgKCEodHhjLT5tb2RlcyAmIEFESl9PRkZTRVRfUkVBRE9OTFkpKSB7CisJCQkvKiBhZGp0aW1lKCkgaXMgaW5kZXBlbmRlbnQgZnJvbSBudHBfYWRqdGltZSgpICovCisJCQl0aW1lX2FkanVzdCA9IHR4Yy0+b2Zmc2V0OworCQkJbnRwX3VwZGF0ZV9mcmVxdWVuY3koKTsKKwkJfQorCQl0eGMtPm9mZnNldCA9IHNhdmVfYWRqdXN0OworCQlnb3RvIGFkal9kb25lOworCX0KIAlpZiAodHhjLT5tb2RlcykgeworCQlsb25nIHNlYzsKKwogCQlpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMpIHsKIAkJCWlmICgodGltZV9zdGF0dXMgJiBTVEFfUExMKSAmJgogCQkJICAgICEodHhjLT5zdGF0dXMgJiBTVEFfUExMKSkgewpAQCAtMzc1LDEzICszODcsOCBAQAogCQlpZiAodHhjLT5tb2RlcyAmIEFESl9UQUkgJiYgdHhjLT5jb25zdGFudCA+IDApCiAJCQl0aW1lX3RhaSA9IHR4Yy0+Y29uc3RhbnQ7CiAKLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUKSB7Ci0JCQlpZiAodHhjLT5tb2RlcyA9PSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpCi0JCQkJLyogYWRqdGltZSgpIGlzIGluZGVwZW5kZW50IGZyb20gbnRwX2FkanRpbWUoKSAqLwotCQkJCXRpbWVfYWRqdXN0ID0gdHhjLT5vZmZzZXQ7Ci0JCQllbHNlCi0JCQkJbnRwX3VwZGF0ZV9vZmZzZXQodHhjLT5vZmZzZXQpOwotCQl9CisJCWlmICh0eGMtPm1vZGVzICYgQURKX09GRlNFVCkKKwkJCW50cF91cGRhdGVfb2Zmc2V0KHR4Yy0+b2Zmc2V0KTsKIAkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElDSykKIAkJCXRpY2tfdXNlYyA9IHR4Yy0+dGljazsKIApAQCAtMzg5LDIyICszOTYsMTggQEAKIAkJCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7CiAJfQogCisJdHhjLT5vZmZzZXQgPSBzaGlmdF9yaWdodCh0aW1lX29mZnNldCAqIE5UUF9JTlRFUlZBTF9GUkVRLAorCQkJCSAgTlRQX1NDQUxFX1NISUZUKTsKKwlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9OQU5PKSkKKwkJdHhjLT5vZmZzZXQgLz0gTlNFQ19QRVJfVVNFQzsKKworYWRqX2RvbmU6CiAJcmVzdWx0ID0gdGltZV9zdGF0ZTsJLyogbW9zdGx5IGBUSU1FX09LJyAqLwogCWlmICh0aW1lX3N0YXR1cyAmIChTVEFfVU5TWU5DfFNUQV9DTE9DS0VSUikpCiAJCXJlc3VsdCA9IFRJTUVfRVJST1I7CiAKLQlpZiAoKHR4Yy0+bW9kZXMgPT0gQURKX09GRlNFVF9TSU5HTEVTSE9UKSB8fAotCSAgICAodHhjLT5tb2RlcyA9PSBBREpfT0ZGU0VUX1NTX1JFQUQpKQotCQl0eGMtPm9mZnNldCA9IHNhdmVfYWRqdXN0OwotCWVsc2UgewotCQl0eGMtPm9mZnNldCA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0ICogTlRQX0lOVEVSVkFMX0ZSRVEsCi0JCQkJCSAgTlRQX1NDQUxFX1NISUZUKTsKLQkJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfTkFOTykpCi0JCQl0eGMtPm9mZnNldCAvPSBOU0VDX1BFUl9VU0VDOwotCX0KLQl0eGMtPmZyZXEJICAgPSBzaGlmdF9yaWdodCgoczMyKSh0aW1lX2ZyZXEgPj4gUFBNX1NDQUxFX0lOVl9TSElGVCkgKgotCQkJCQkgKHM2NClQUE1fU0NBTEVfSU5WLAotCQkJCQkgTlRQX1NDQUxFX1NISUZUKTsKKwl0eGMtPmZyZXEJICAgPSBzaGlmdF9yaWdodCgodGltZV9mcmVxID4+IFBQTV9TQ0FMRV9JTlZfU0hJRlQpICoKKwkJCQkJIChzNjQpUFBNX1NDQUxFX0lOViwgTlRQX1NDQUxFX1NISUZUKTsKIAl0eGMtPm1heGVycm9yCSAgID0gdGltZV9tYXhlcnJvcjsKIAl0eGMtPmVzdGVycm9yCSAgID0gdGltZV9lc3RlcnJvcjsKIAl0eGMtPnN0YXR1cwkgICA9IHRpbWVfc3RhdHVzOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKaW5kZXggY2IwMWNkOC4uZjk4YTFiNyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYworKysgYi9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCkBAIC0zODQsNiArMzg0LDE5IEBACiB9CiAKIC8qCisgKiBDYWxsZWQgZnJvbSBpcnFfZW50ZXIoKSB3aGVuIGlkbGUgd2FzIGludGVycnVwdGVkIHRvIHJlZW5hYmxlIHRoZQorICogcGVyIGNwdSBkZXZpY2UuCisgKi8KK3ZvaWQgdGlja19jaGVja19vbmVzaG90X2Jyb2FkY2FzdChpbnQgY3B1KQoreworCWlmIChjcHVfaXNzZXQoY3B1LCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X21hc2spKSB7CisJCXN0cnVjdCB0aWNrX2RldmljZSAqdGQgPSAmcGVyX2NwdSh0aWNrX2NwdV9kZXZpY2UsIGNwdSk7CisKKwkJY2xvY2tldmVudHNfc2V0X21vZGUodGQtPmV2dGRldiwgQ0xPQ0tfRVZUX01PREVfT05FU0hPVCk7CisJfQorfQorCisvKgogICogSGFuZGxlIG9uZXNob3QgbW9kZSBicm9hZGNhc3RpbmcKICAqLwogc3RhdGljIHZvaWQgdGlja19oYW5kbGVfb25lc2hvdF9icm9hZGNhc3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oIGIva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oCmluZGV4IDQ2OTI0ODcuLmIxYzA1YmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2staW50ZXJuYWwuaAorKysgYi9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmgKQEAgLTM2LDYgKzM2LDcgQEAKIGV4dGVybiB2b2lkIHRpY2tfc2h1dGRvd25fYnJvYWRjYXN0X29uZXNob3QodW5zaWduZWQgaW50ICpjcHVwKTsKIGV4dGVybiBpbnQgdGlja19yZXN1bWVfYnJvYWRjYXN0X29uZXNob3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYmMpOwogZXh0ZXJuIGludCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X2FjdGl2ZSh2b2lkKTsKK2V4dGVybiB2b2lkIHRpY2tfY2hlY2tfb25lc2hvdF9icm9hZGNhc3QoaW50IGNwdSk7CiAjIGVsc2UgLyogQlJPQURDQVNUICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19icm9hZGNhc3Rfc2V0dXBfb25lc2hvdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpiYykKIHsKQEAgLTQ1LDYgKzQ2LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2Jyb2FkY2FzdF9zd2l0Y2hfdG9fb25lc2hvdCh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX3NodXRkb3duX2Jyb2FkY2FzdF9vbmVzaG90KHVuc2lnbmVkIGludCAqY3B1cCkgeyB9CiBzdGF0aWMgaW5saW5lIGludCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X2FjdGl2ZSh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19jaGVja19vbmVzaG90X2Jyb2FkY2FzdChpbnQgY3B1KSB7IH0KICMgZW5kaWYgLyogIUJST0FEQ0FTVCAqLwogCiAjZWxzZSAvKiAhT05FU0hPVCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCmluZGV4IGE0ZDIxOTMuLjA1ODFjMTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYworKysgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIH0KIAotdm9pZCB0aWNrX25vaHpfc3RvcF9pZGxlKGludCBjcHUpCitzdGF0aWMgdm9pZCB0aWNrX25vaHpfc3RvcF9pZGxlKGludCBjcHUpCiB7CiAJc3RydWN0IHRpY2tfc2NoZWQgKnRzID0gJnBlcl9jcHUodGlja19jcHVfc2NoZWQsIGNwdSk7CiAKQEAgLTI3MCw3ICsyNzAsNyBAQAogCW5leHRfamlmZmllcyA9IGdldF9uZXh0X3RpbWVyX2ludGVycnVwdChsYXN0X2ppZmZpZXMpOwogCWRlbHRhX2ppZmZpZXMgPSBuZXh0X2ppZmZpZXMgLSBsYXN0X2ppZmZpZXM7CiAKLQlpZiAocmN1X25lZWRzX2NwdShjcHUpKQorCWlmIChyY3VfbmVlZHNfY3B1KGNwdSkgfHwgcHJpbnRrX25lZWRzX2NwdShjcHUpKQogCQlkZWx0YV9qaWZmaWVzID0gMTsKIAkvKgogCSAqIERvIG5vdCBzdG9wIHRoZSB0aWNrLCBpZiB3ZSBhcmUgb25seSBvbmUgb2ZmCkBAIC0zNzcsNiArMzc3LDMyIEBACiAJcmV0dXJuIHRzLT5zbGVlcF9sZW5ndGg7CiB9CiAKK3N0YXRpYyB2b2lkIHRpY2tfbm9oel9yZXN0YXJ0KHN0cnVjdCB0aWNrX3NjaGVkICp0cywga3RpbWVfdCBub3cpCit7CisJaHJ0aW1lcl9jYW5jZWwoJnRzLT5zY2hlZF90aW1lcik7CisJdHMtPnNjaGVkX3RpbWVyLmV4cGlyZXMgPSB0cy0+aWRsZV90aWNrOworCisJd2hpbGUgKDEpIHsKKwkJLyogRm9yd2FyZCB0aGUgdGltZSB0byBleHBpcmUgaW4gdGhlIGZ1dHVyZSAqLworCQlocnRpbWVyX2ZvcndhcmQoJnRzLT5zY2hlZF90aW1lciwgbm93LCB0aWNrX3BlcmlvZCk7CisKKwkJaWYgKHRzLT5ub2h6X21vZGUgPT0gTk9IWl9NT0RFX0hJR0hSRVMpIHsKKwkJCWhydGltZXJfc3RhcnQoJnRzLT5zY2hlZF90aW1lciwKKwkJCQkgICAgICB0cy0+c2NoZWRfdGltZXIuZXhwaXJlcywKKwkJCQkgICAgICBIUlRJTUVSX01PREVfQUJTKTsKKwkJCS8qIENoZWNrLCBpZiB0aGUgdGltZXIgd2FzIGFscmVhZHkgaW4gdGhlIHBhc3QgKi8KKwkJCWlmIChocnRpbWVyX2FjdGl2ZSgmdHMtPnNjaGVkX3RpbWVyKSkKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWlmICghdGlja19wcm9ncmFtX2V2ZW50KHRzLT5zY2hlZF90aW1lci5leHBpcmVzLCAwKSkKKwkJCQlicmVhazsKKwkJfQorCQkvKiBVcGRhdGUgamlmZmllcyBhbmQgcmVyZWFkIHRpbWUgKi8KKwkJdGlja19kb191cGRhdGVfamlmZmllczY0KG5vdyk7CisJCW5vdyA9IGt0aW1lX2dldCgpOworCX0KK30KKwogLyoqCiAgKiB0aWNrX25vaHpfcmVzdGFydF9zY2hlZF90aWNrIC0gcmVzdGFydCB0aGUgaWRsZSB0aWNrIGZyb20gdGhlIGlkbGUgdGFzawogICoKQEAgLTQzMCwyOCArNDU2LDcgQEAKIAkgKi8KIAl0cy0+dGlja19zdG9wcGVkICA9IDA7CiAJdHMtPmlkbGVfZXhpdHRpbWUgPSBub3c7Ci0JaHJ0aW1lcl9jYW5jZWwoJnRzLT5zY2hlZF90aW1lcik7Ci0JdHMtPnNjaGVkX3RpbWVyLmV4cGlyZXMgPSB0cy0+aWRsZV90aWNrOwotCi0Jd2hpbGUgKDEpIHsKLQkJLyogRm9yd2FyZCB0aGUgdGltZSB0byBleHBpcmUgaW4gdGhlIGZ1dHVyZSAqLwotCQlocnRpbWVyX2ZvcndhcmQoJnRzLT5zY2hlZF90aW1lciwgbm93LCB0aWNrX3BlcmlvZCk7Ci0KLQkJaWYgKHRzLT5ub2h6X21vZGUgPT0gTk9IWl9NT0RFX0hJR0hSRVMpIHsKLQkJCWhydGltZXJfc3RhcnQoJnRzLT5zY2hlZF90aW1lciwKLQkJCQkgICAgICB0cy0+c2NoZWRfdGltZXIuZXhwaXJlcywKLQkJCQkgICAgICBIUlRJTUVSX01PREVfQUJTKTsKLQkJCS8qIENoZWNrLCBpZiB0aGUgdGltZXIgd2FzIGFscmVhZHkgaW4gdGhlIHBhc3QgKi8KLQkJCWlmIChocnRpbWVyX2FjdGl2ZSgmdHMtPnNjaGVkX3RpbWVyKSkKLQkJCQlicmVhazsKLQkJfSBlbHNlIHsKLQkJCWlmICghdGlja19wcm9ncmFtX2V2ZW50KHRzLT5zY2hlZF90aW1lci5leHBpcmVzLCAwKSkKLQkJCQlicmVhazsKLQkJfQotCQkvKiBVcGRhdGUgamlmZmllcyBhbmQgcmVyZWFkIHRpbWUgKi8KLQkJdGlja19kb191cGRhdGVfamlmZmllczY0KG5vdyk7Ci0JCW5vdyA9IGt0aW1lX2dldCgpOwotCX0KKwl0aWNrX25vaHpfcmVzdGFydCh0cywgbm93KTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiB9CiAKQEAgLTUwMywxMCArNTA4LDYgQEAKIAl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUocmVncykpOwogCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HKTsKIAotCS8qIERvIG5vdCByZXN0YXJ0LCB3aGVuIHdlIGFyZSBpbiB0aGUgaWRsZSBsb29wICovCi0JaWYgKHRzLT50aWNrX3N0b3BwZWQpCi0JCXJldHVybjsKLQogCXdoaWxlICh0aWNrX25vaHpfcmVwcm9ncmFtKHRzLCBub3cpKSB7CiAJCW5vdyA9IGt0aW1lX2dldCgpOwogCQl0aWNrX2RvX3VwZGF0ZV9qaWZmaWVzNjQobm93KTsKQEAgLTU1Miw2ICs1NTMsMjcgQEAKIAkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KIAorLyoKKyAqIFdoZW4gTk9IWiBpcyBlbmFibGVkIGFuZCB0aGUgdGljayBpcyBzdG9wcGVkLCB3ZSBuZWVkIHRvIGtpY2sgdGhlCisgKiB0aWNrIHRpbWVyIGZyb20gaXJxX2VudGVyKCkgc28gdGhhdCB0aGUgamlmZmllcyB1cGRhdGUgaXMga2VwdAorICogYWxpdmUgZHVyaW5nIGxvbmcgcnVubmluZyBzb2Z0aXJxcy4gVGhhdCdzIHVnbHkgYXMgaGVsbCwgYnV0CisgKiBjb3JyZWN0bmVzcyBpcyBrZXkgZXZlbiBpZiB3ZSBuZWVkIHRvIGZpeCB0aGUgb2ZmZW5kaW5nIHNvZnRpcnEgaW4KKyAqIHRoZSBmaXJzdCBwbGFjZS4KKyAqCisgKiBOb3RlLCB0aGlzIGlzIGRpZmZlcmVudCB0byB0aWNrX25vaHpfcmVzdGFydC4gV2UganVzdCBraWNrIHRoZQorICogdGltZXIgYW5kIGRvIG5vdCB0b3VjaCB0aGUgb3RoZXIgbWFnaWMgYml0cyB3aGljaCBuZWVkIHRvIGJlIGRvbmUKKyAqIHdoZW4gaWRsZSBpcyBsZWZ0LgorICovCitzdGF0aWMgdm9pZCB0aWNrX25vaHpfa2lja190aWNrKGludCBjcHUpCit7CisJc3RydWN0IHRpY2tfc2NoZWQgKnRzID0gJnBlcl9jcHUodGlja19jcHVfc2NoZWQsIGNwdSk7CisKKwlpZiAoIXRzLT50aWNrX3N0b3BwZWQpCisJCXJldHVybjsKKworCXRpY2tfbm9oel9yZXN0YXJ0KHRzLCBrdGltZV9nZXQoKSk7Cit9CisKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX25vaHpfc3dpdGNoX3RvX25vaHoodm9pZCkgeyB9CkBAIC01NTksNiArNTgxLDE5IEBACiAjZW5kaWYgLyogTk9fSFogKi8KIAogLyoKKyAqIENhbGxlZCBmcm9tIGlycV9lbnRlciB0byBub3RpZnkgYWJvdXQgdGhlIHBvc3NpYmxlIGludGVycnVwdGlvbiBvZiBpZGxlKCkKKyAqLwordm9pZCB0aWNrX2NoZWNrX2lkbGUoaW50IGNwdSkKK3sKKwl0aWNrX2NoZWNrX29uZXNob3RfYnJvYWRjYXN0KGNwdSk7CisjaWZkZWYgQ09ORklHX05PX0haCisJdGlja19ub2h6X3N0b3BfaWRsZShjcHUpOworCXRpY2tfbm9oel91cGRhdGVfamlmZmllcygpOworCXRpY2tfbm9oel9raWNrX3RpY2soY3B1KTsKKyNlbmRpZgorfQorCisvKgogICogSGlnaCByZXNvbHV0aW9uIHRpbWVyIHNwZWNpZmljIGNvZGUKICAqLwogI2lmZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKQEAgLTYxMSwxMCArNjQ2LDYgQEAKIAkJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOwogCX0KIAotCS8qIERvIG5vdCByZXN0YXJ0LCB3aGVuIHdlIGFyZSBpbiB0aGUgaWRsZSBsb29wICovCi0JaWYgKHRzLT50aWNrX3N0b3BwZWQpCi0JCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKLQogCWhydGltZXJfZm9yd2FyZCh0aW1lciwgbm93LCB0aWNrX3BlcmlvZCk7CiAKIAlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKaW5kZXggZTkxYzI5Zi4uZTdhY2ZiNCAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYworKysgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCkBAIC01OCwyNyArNTgsMjYgQEAKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX1RJTUUKIC8qKgotICogX19nZXRfbnNlY19vZmZzZXQgLSBSZXR1cm5zIG5hbm9zZWNvbmRzIHNpbmNlIGxhc3QgY2FsbCB0byBwZXJpb2RpY19ob29rCisgKiBjbG9ja3NvdXJjZV9mb3J3YXJkX25vdyAtIHVwZGF0ZSBjbG9jayB0byB0aGUgY3VycmVudCB0aW1lCiAgKgotICogcHJpdmF0ZSBmdW5jdGlvbiwgbXVzdCBob2xkIHh0aW1lX2xvY2sgbG9jayB3aGVuIGJlaW5nCi0gKiBjYWxsZWQuIFJldHVybnMgdGhlIG51bWJlciBvZiBuYW5vc2Vjb25kcyBzaW5jZSB0aGUKLSAqIGxhc3QgY2FsbCB0byB1cGRhdGVfd2FsbF90aW1lKCkgKGFkanVzdGVkIGJ5IE5UUCBzY2FsaW5nKQorICogRm9yd2FyZCB0aGUgY3VycmVudCBjbG9jayB0byB1cGRhdGUgaXRzIHN0YXRlIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8KKyAqIHVwZGF0ZV93YWxsX3RpbWUoKS4gVGhpcyBpcyB1c2VmdWwgYmVmb3JlIHNpZ25pZmljYW50IGNsb2NrIGNoYW5nZXMsCisgKiBhcyBpdCBhdm9pZHMgaGF2aW5nIHRvIGRlYWwgd2l0aCB0aGlzIHRpbWUgb2Zmc2V0IGV4cGxpY2l0bHkuCiAgKi8KLXN0YXRpYyBpbmxpbmUgczY0IF9fZ2V0X25zZWNfb2Zmc2V0KHZvaWQpCitzdGF0aWMgdm9pZCBjbG9ja3NvdXJjZV9mb3J3YXJkX25vdyh2b2lkKQogewogCWN5Y2xlX3QgY3ljbGVfbm93LCBjeWNsZV9kZWx0YTsKLQlzNjQgbnNfb2Zmc2V0OworCXM2NCBuc2VjOwogCi0JLyogcmVhZCBjbG9ja3NvdXJjZTogKi8KIAljeWNsZV9ub3cgPSBjbG9ja3NvdXJjZV9yZWFkKGNsb2NrKTsKLQotCS8qIGNhbGN1bGF0ZSB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3QgdXBkYXRlX3dhbGxfdGltZTogKi8KIAljeWNsZV9kZWx0YSA9IChjeWNsZV9ub3cgLSBjbG9jay0+Y3ljbGVfbGFzdCkgJiBjbG9jay0+bWFzazsKKwljbG9jay0+Y3ljbGVfbGFzdCA9IGN5Y2xlX25vdzsKIAotCS8qIGNvbnZlcnQgdG8gbmFub3NlY29uZHM6ICovCi0JbnNfb2Zmc2V0ID0gY3ljMm5zKGNsb2NrLCBjeWNsZV9kZWx0YSk7CisJbnNlYyA9IGN5YzJucyhjbG9jaywgY3ljbGVfZGVsdGEpOworCXRpbWVzcGVjX2FkZF9ucygmeHRpbWUsIG5zZWMpOwogCi0JcmV0dXJuIG5zX29mZnNldDsKKwluc2VjID0gKChzNjQpY3ljbGVfZGVsdGEgKiBjbG9jay0+bXVsdF9vcmlnKSA+PiBjbG9jay0+c2hpZnQ7CisJY2xvY2stPnJhd190aW1lLnR2X25zZWMgKz0gbnNlYzsKIH0KIAogLyoqCkBAIC04OSw2ICs4OCw3IEBACiAgKi8KIHZvaWQgZ2V0bnN0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0cykKIHsKKwljeWNsZV90IGN5Y2xlX25vdywgY3ljbGVfZGVsdGE7CiAJdW5zaWduZWQgbG9uZyBzZXE7CiAJczY0IG5zZWNzOwogCkBAIC05Niw3ICs5NiwxNSBAQAogCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKIAogCQkqdHMgPSB4dGltZTsKLQkJbnNlY3MgPSBfX2dldF9uc2VjX29mZnNldCgpOworCisJCS8qIHJlYWQgY2xvY2tzb3VyY2U6ICovCisJCWN5Y2xlX25vdyA9IGNsb2Nrc291cmNlX3JlYWQoY2xvY2spOworCisJCS8qIGNhbGN1bGF0ZSB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3QgdXBkYXRlX3dhbGxfdGltZTogKi8KKwkJY3ljbGVfZGVsdGEgPSAoY3ljbGVfbm93IC0gY2xvY2stPmN5Y2xlX2xhc3QpICYgY2xvY2stPm1hc2s7CisKKwkJLyogY29udmVydCB0byBuYW5vc2Vjb25kczogKi8KKwkJbnNlY3MgPSBjeWMybnMoY2xvY2ssIGN5Y2xlX2RlbHRhKTsKIAogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwogCkBAIC0xMjksMjIgKzEzNywyMiBAQAogICovCiBpbnQgZG9fc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCiB7CisJc3RydWN0IHRpbWVzcGVjIHRzX2RlbHRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdGltZV90IHd0bV9zZWMsIHNlYyA9IHR2LT50dl9zZWM7Ci0JbG9uZyB3dG1fbnNlYywgbnNlYyA9IHR2LT50dl9uc2VjOwogCiAJaWYgKCh1bnNpZ25lZCBsb25nKXR2LT50dl9uc2VjID49IE5TRUNfUEVSX1NFQykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIAotCW5zZWMgLT0gX19nZXRfbnNlY19vZmZzZXQoKTsKKwljbG9ja3NvdXJjZV9mb3J3YXJkX25vdygpOwogCi0Jd3RtX3NlYyAgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKLQl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOworCXRzX2RlbHRhLnR2X3NlYyA9IHR2LT50dl9zZWMgLSB4dGltZS50dl9zZWM7CisJdHNfZGVsdGEudHZfbnNlYyA9IHR2LT50dl9uc2VjIC0geHRpbWUudHZfbnNlYzsKKwl3YWxsX3RvX21vbm90b25pYyA9IHRpbWVzcGVjX3N1Yih3YWxsX3RvX21vbm90b25pYywgdHNfZGVsdGEpOwogCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnh0aW1lLCBzZWMsIG5zZWMpOwotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywgd3RtX3NlYywgd3RtX25zZWMpOworCXh0aW1lID0gKnR2OworCiAJdXBkYXRlX3h0aW1lX2NhY2hlKDApOwogCiAJY2xvY2stPmVycm9yID0gMDsKQEAgLTE3MCwyMiArMTc4LDE5IEBACiBzdGF0aWMgdm9pZCBjaGFuZ2VfY2xvY2tzb3VyY2Uodm9pZCkKIHsKIAlzdHJ1Y3QgY2xvY2tzb3VyY2UgKm5ldzsKLQljeWNsZV90IG5vdzsKLQl1NjQgbnNlYzsKIAogCW5ldyA9IGNsb2Nrc291cmNlX2dldF9uZXh0KCk7CiAKIAlpZiAoY2xvY2sgPT0gbmV3KQogCQlyZXR1cm47CiAKLQluZXctPmN5Y2xlX2xhc3QgPSAwOwotCW5vdyA9IGNsb2Nrc291cmNlX3JlYWQobmV3KTsKLQluc2VjID0gIF9fZ2V0X25zZWNfb2Zmc2V0KCk7Ci0JdGltZXNwZWNfYWRkX25zKCZ4dGltZSwgbnNlYyk7CisJY2xvY2tzb3VyY2VfZm9yd2FyZF9ub3coKTsKKworCW5ldy0+cmF3X3RpbWUgPSBjbG9jay0+cmF3X3RpbWU7CiAKIAljbG9jayA9IG5ldzsKLQljbG9jay0+Y3ljbGVfbGFzdCA9IG5vdzsKLQorCWNsb2NrLT5jeWNsZV9sYXN0ID0gMDsKKwljbG9jay0+Y3ljbGVfbGFzdCA9IGNsb2Nrc291cmNlX3JlYWQobmV3KTsKIAljbG9jay0+ZXJyb3IgPSAwOwogCWNsb2NrLT54dGltZV9uc2VjID0gMDsKIAljbG9ja3NvdXJjZV9jYWxjdWxhdGVfaW50ZXJ2YWwoY2xvY2ssIE5UUF9JTlRFUlZBTF9MRU5HVEgpOwpAQCAtMjAwLDExICsyMDUsNDQgQEAKIAkgKi8KIH0KICNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY2xvY2tzb3VyY2VfZm9yd2FyZF9ub3codm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2Nsb2Nrc291cmNlKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSBzNjQgX19nZXRfbnNlY19vZmZzZXQodm9pZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKIC8qKgorICogZ2V0cmF3bW9ub3RvbmljIC0gUmV0dXJucyB0aGUgcmF3IG1vbm90b25pYyB0aW1lIGluIGEgdGltZXNwZWMKKyAqIEB0czoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjIHRvIGJlIHNldAorICoKKyAqIFJldHVybnMgdGhlIHJhdyBtb25vdG9uaWMgdGltZSAoY29tcGxldGVseSB1bi1tb2RpZmllZCBieSBudHApCisgKi8KK3ZvaWQgZ2V0cmF3bW9ub3RvbmljKHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJdW5zaWduZWQgbG9uZyBzZXE7CisJczY0IG5zZWNzOworCWN5Y2xlX3QgY3ljbGVfbm93LCBjeWNsZV9kZWx0YTsKKworCWRvIHsKKwkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7CisKKwkJLyogcmVhZCBjbG9ja3NvdXJjZTogKi8KKwkJY3ljbGVfbm93ID0gY2xvY2tzb3VyY2VfcmVhZChjbG9jayk7CisKKwkJLyogY2FsY3VsYXRlIHRoZSBkZWx0YSBzaW5jZSB0aGUgbGFzdCB1cGRhdGVfd2FsbF90aW1lOiAqLworCQljeWNsZV9kZWx0YSA9IChjeWNsZV9ub3cgLSBjbG9jay0+Y3ljbGVfbGFzdCkgJiBjbG9jay0+bWFzazsKKworCQkvKiBjb252ZXJ0IHRvIG5hbm9zZWNvbmRzOiAqLworCQluc2VjcyA9ICgoczY0KWN5Y2xlX2RlbHRhICogY2xvY2stPm11bHRfb3JpZykgPj4gY2xvY2stPnNoaWZ0OworCisJCSp0cyA9IGNsb2NrLT5yYXdfdGltZTsKKworCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOworCisJdGltZXNwZWNfYWRkX25zKHRzLCBuc2Vjcyk7Cit9CitFWFBPUlRfU1lNQk9MKGdldHJhd21vbm90b25pYyk7CisKKworLyoqCiAgKiB0aW1la2VlcGluZ192YWxpZF9mb3JfaHJlcyAtIENoZWNrIGlmIHRpbWVrZWVwaW5nIGlzIHN1aXRhYmxlIGZvciBocmVzCiAgKi8KIGludCB0aW1la2VlcGluZ192YWxpZF9mb3JfaHJlcyh2b2lkKQpAQCAtMjY1LDggKzMwMyw2IEBACiBzdGF0aWMgaW50IHRpbWVrZWVwaW5nX3N1c3BlbmRlZDsKIC8qIHRpbWUgaW4gc2Vjb25kcyB3aGVuIHN1c3BlbmQgYmVnYW4gKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVrZWVwaW5nX3N1c3BlbmRfdGltZTsKLS8qIHh0aW1lIG9mZnNldCB3aGVuIHdlIHdlbnQgaW50byBzdXNwZW5kICovCi1zdGF0aWMgczY0IHRpbWVrZWVwaW5nX3N1c3BlbmRfbnNlY3M7CiAKIC8qKgogICogdGltZWtlZXBpbmdfcmVzdW1lIC0gUmVzdW1lcyB0aGUgZ2VuZXJpYyB0aW1la2VlcGluZyBzdWJzeXN0ZW0uCkBAIC0yOTIsOCArMzI4LDYgQEAKIAkJd2FsbF90b19tb25vdG9uaWMudHZfc2VjIC09IHNsZWVwX2xlbmd0aDsKIAkJdG90YWxfc2xlZXBfdGltZSArPSBzbGVlcF9sZW5ndGg7CiAJfQotCS8qIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgdGhlIGNvcnJlY3QgeHRpbWUgcmVmZXJlbmNlICovCi0JdGltZXNwZWNfYWRkX25zKCZ4dGltZSwgdGltZWtlZXBpbmdfc3VzcGVuZF9uc2Vjcyk7CiAJdXBkYXRlX3h0aW1lX2NhY2hlKDApOwogCS8qIHJlLWJhc2UgdGhlIGxhc3QgY3ljbGUgdmFsdWUgKi8KIAljbG9jay0+Y3ljbGVfbGFzdCA9IDA7CkBAIC0zMTksOCArMzUzLDcgQEAKIAl0aW1la2VlcGluZ19zdXNwZW5kX3RpbWUgPSByZWFkX3BlcnNpc3RlbnRfY2xvY2soKTsKIAogCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwotCS8qIEdldCB0aGUgY3VycmVudCB4dGltZSBvZmZzZXQgKi8KLQl0aW1la2VlcGluZ19zdXNwZW5kX25zZWNzID0gX19nZXRfbnNlY19vZmZzZXQoKTsKKwljbG9ja3NvdXJjZV9mb3J3YXJkX25vdygpOwogCXRpbWVrZWVwaW5nX3N1c3BlbmRlZCA9IDE7CiAJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIApAQCAtNDU0LDIzICs0ODcsMjkgQEAKICNlbHNlCiAJb2Zmc2V0ID0gY2xvY2stPmN5Y2xlX2ludGVydmFsOwogI2VuZGlmCi0JY2xvY2stPnh0aW1lX25zZWMgKz0gKHM2NCl4dGltZS50dl9uc2VjIDw8IGNsb2NrLT5zaGlmdDsKKwljbG9jay0+eHRpbWVfbnNlYyA9IChzNjQpeHRpbWUudHZfbnNlYyA8PCBjbG9jay0+c2hpZnQ7CiAKIAkvKiBub3JtYWxseSB0aGlzIGxvb3Agd2lsbCBydW4ganVzdCBvbmNlLCBob3dldmVyIGluIHRoZQogCSAqIGNhc2Ugb2YgbG9zdCBvciBsYXRlIHRpY2tzLCBpdCB3aWxsIGFjY3VtdWxhdGUgY29ycmVjdGx5LgogCSAqLwogCXdoaWxlIChvZmZzZXQgPj0gY2xvY2stPmN5Y2xlX2ludGVydmFsKSB7CiAJCS8qIGFjY3VtdWxhdGUgb25lIGludGVydmFsICovCi0JCWNsb2NrLT54dGltZV9uc2VjICs9IGNsb2NrLT54dGltZV9pbnRlcnZhbDsKLQkJY2xvY2stPmN5Y2xlX2xhc3QgKz0gY2xvY2stPmN5Y2xlX2ludGVydmFsOwogCQlvZmZzZXQgLT0gY2xvY2stPmN5Y2xlX2ludGVydmFsOworCQljbG9jay0+Y3ljbGVfbGFzdCArPSBjbG9jay0+Y3ljbGVfaW50ZXJ2YWw7CiAKKwkJY2xvY2stPnh0aW1lX25zZWMgKz0gY2xvY2stPnh0aW1lX2ludGVydmFsOwogCQlpZiAoY2xvY2stPnh0aW1lX25zZWMgPj0gKHU2NClOU0VDX1BFUl9TRUMgPDwgY2xvY2stPnNoaWZ0KSB7CiAJCQljbG9jay0+eHRpbWVfbnNlYyAtPSAodTY0KU5TRUNfUEVSX1NFQyA8PCBjbG9jay0+c2hpZnQ7CiAJCQl4dGltZS50dl9zZWMrKzsKIAkJCXNlY29uZF9vdmVyZmxvdygpOwogCQl9CiAKKwkJY2xvY2stPnJhd190aW1lLnR2X25zZWMgKz0gY2xvY2stPnJhd19pbnRlcnZhbDsKKwkJaWYgKGNsb2NrLT5yYXdfdGltZS50dl9uc2VjID49IE5TRUNfUEVSX1NFQykgeworCQkJY2xvY2stPnJhd190aW1lLnR2X25zZWMgLT0gTlNFQ19QRVJfU0VDOworCQkJY2xvY2stPnJhd190aW1lLnR2X3NlYysrOworCQl9CisKIAkJLyogYWNjdW11bGF0ZSBlcnJvciBiZXR3ZWVuIE5UUCBhbmQgY2xvY2sgaW50ZXJ2YWwgKi8KIAkJY2xvY2stPmVycm9yICs9IHRpY2tfbGVuZ3RoOwogCQljbG9jay0+ZXJyb3IgLT0gY2xvY2stPnh0aW1lX2ludGVydmFsIDw8IChOVFBfU0NBTEVfU0hJRlQgLSBjbG9jay0+c2hpZnQpOwpAQCAtNDc5LDkgKzUxOCwxMiBAQAogCS8qIGNvcnJlY3QgdGhlIGNsb2NrIHdoZW4gTlRQIGVycm9yIGlzIHRvbyBiaWcgKi8KIAljbG9ja3NvdXJjZV9hZGp1c3Qob2Zmc2V0KTsKIAotCS8qIHN0b3JlIGZ1bGwgbmFub3NlY29uZHMgaW50byB4dGltZSAqLwotCXh0aW1lLnR2X25zZWMgPSAoczY0KWNsb2NrLT54dGltZV9uc2VjID4+IGNsb2NrLT5zaGlmdDsKKwkvKiBzdG9yZSBmdWxsIG5hbm9zZWNvbmRzIGludG8geHRpbWUgYWZ0ZXIgcm91bmRpbmcgaXQgdXAgYW5kCisJICogYWRkIHRoZSByZW1haW5kZXIgdG8gdGhlIGVycm9yIGRpZmZlcmVuY2UuCisJICovCisJeHRpbWUudHZfbnNlYyA9ICgoczY0KWNsb2NrLT54dGltZV9uc2VjID4+IGNsb2NrLT5zaGlmdCkgKyAxOwogCWNsb2NrLT54dGltZV9uc2VjIC09IChzNjQpeHRpbWUudHZfbnNlYyA8PCBjbG9jay0+c2hpZnQ7CisJY2xvY2stPmVycm9yICs9IGNsb2NrLT54dGltZV9uc2VjIDw8IChOVFBfU0NBTEVfU0hJRlQgLSBjbG9jay0+c2hpZnQpOwogCiAJdXBkYXRlX3h0aW1lX2NhY2hlKGN5YzJucyhjbG9jaywgb2Zmc2V0KSk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYwppbmRleCBhNDBlMjBmLi5mNjQyNjkxIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKKysrIGIva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCkBAIC00NywxMyArNDcsMTQgQEAKIH0KIAogc3RhdGljIHZvaWQKLXByaW50X3RpbWVyKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGhydGltZXIgKnRpbWVyLCBpbnQgaWR4LCB1NjQgbm93KQorcHJpbnRfdGltZXIoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaHJ0aW1lciAqdGFkZHIsIHN0cnVjdCBocnRpbWVyICp0aW1lciwKKwkgICAgaW50IGlkeCwgdTY0IG5vdykKIHsKICNpZmRlZiBDT05GSUdfVElNRVJfU1RBVFMKIAljaGFyIHRtcFtUQVNLX0NPTU1fTEVOICsgMV07CiAjZW5kaWYKIAlTRVFfcHJpbnRmKG0sICIgIyVkOiAiLCBpZHgpOwotCXByaW50X25hbWVfb2Zmc2V0KG0sIHRpbWVyKTsKKwlwcmludF9uYW1lX29mZnNldChtLCB0YWRkcik7CiAJU0VRX3ByaW50ZihtLCAiLCAiKTsKIAlwcmludF9uYW1lX29mZnNldChtLCB0aW1lci0+ZnVuY3Rpb24pOwogCVNFUV9wcmludGYobSwgIiwgUzolMDJseCIsIHRpbWVyLT5zdGF0ZSk7CkBAIC05OSw3ICsxMDAsNyBAQAogCQl0bXAgPSAqdGltZXI7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmNwdV9iYXNlLT5sb2NrLCBmbGFncyk7CiAKLQkJcHJpbnRfdGltZXIobSwgJnRtcCwgaSwgbm93KTsKKwkJcHJpbnRfdGltZXIobSwgdGltZXIsICZ0bXAsIGksIG5vdyk7CiAJCW5leHQrKzsKIAkJZ290byBuZXh0X29uZTsKIAl9CkBAIC0xMDksNiArMTEwLDcgQEAKIHN0YXRpYyB2b2lkCiBwcmludF9iYXNlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZSwgdTY0IG5vdykKIHsKKwlTRVFfcHJpbnRmKG0sICIgIC5iYXNlOiAgICAgICAlcFxuIiwgYmFzZSk7CiAJU0VRX3ByaW50ZihtLCAiICAuaW5kZXg6ICAgICAgJWRcbiIsCiAJCQliYXNlLT5pbmRleCk7CiAJU0VRX3ByaW50ZihtLCAiICAucmVzb2x1dGlvbjogJUx1IG5zZWNzXG4iLApAQCAtMTgzLDEyICsxODUsMTYgQEAKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCiBzdGF0aWMgdm9pZAotcHJpbnRfdGlja2RldmljZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0aWNrX2RldmljZSAqdGQpCitwcmludF90aWNrZGV2aWNlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRpY2tfZGV2aWNlICp0ZCwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYgPSB0ZC0+ZXZ0ZGV2OwogCiAJU0VRX3ByaW50ZihtLCAiXG4iKTsKIAlTRVFfcHJpbnRmKG0sICJUaWNrIERldmljZTogbW9kZTogICAgICVkXG4iLCB0ZC0+bW9kZSk7CisJaWYgKGNwdSA8IDApCisJCVNFUV9wcmludGYobSwgIkJyb2FkY2FzdCBkZXZpY2VcbiIpOworCWVsc2UKKwkJU0VRX3ByaW50ZihtLCAiUGVyIENQVSBkZXZpY2U6ICVkXG4iLCBjcHUpOwogCiAJU0VRX3ByaW50ZihtLCAiQ2xvY2sgRXZlbnQgRGV2aWNlOiAiKTsKIAlpZiAoIWRldikgewpAQCAtMjIyLDcgKzIyOCw3IEBACiAJaW50IGNwdTsKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVAotCXByaW50X3RpY2tkZXZpY2UobSwgdGlja19nZXRfYnJvYWRjYXN0X2RldmljZSgpKTsKKwlwcmludF90aWNrZGV2aWNlKG0sIHRpY2tfZ2V0X2Jyb2FkY2FzdF9kZXZpY2UoKSwgLTEpOwogCVNFUV9wcmludGYobSwgInRpY2tfYnJvYWRjYXN0X21hc2s6ICUwOGx4XG4iLAogCQkgICB0aWNrX2dldF9icm9hZGNhc3RfbWFzaygpLT5iaXRzWzBdKTsKICNpZmRlZiBDT05GSUdfVElDS19PTkVTSE9UCkBAIC0yMzIsNyArMjM4LDcgQEAKIAlTRVFfcHJpbnRmKG0sICJcbiIpOwogI2VuZGlmCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCSAgIHByaW50X3RpY2tkZXZpY2UobSwgdGlja19nZXRfZGV2aWNlKGNwdSkpOworCQlwcmludF90aWNrZGV2aWNlKG0sIHRpY2tfZ2V0X2RldmljZShjcHUpLCBjcHUpOwogCVNFUV9wcmludGYobSwgIlxuIik7CiB9CiAjZWxzZQpAQCAtMjQ0LDcgKzI1MCw3IEBACiAJdTY0IG5vdyA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKIAlpbnQgY3B1OwogCi0JU0VRX3ByaW50ZihtLCAiVGltZXIgTGlzdCBWZXJzaW9uOiB2MC4zXG4iKTsKKwlTRVFfcHJpbnRmKG0sICJUaW1lciBMaXN0IFZlcnNpb246IHYwLjRcbiIpOwogCVNFUV9wcmludGYobSwgIkhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOiAlZFxuIiwgSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVMpOwogCVNFUV9wcmludGYobSwgIm5vdyBhdCAlTGQgbnNlY3NcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbm93KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCAwM2JjN2YxLi41NmJlY2YzIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtOTc4LDYgKzk3OCw3IEBACiAJcnVuX2xvY2FsX3RpbWVycygpOwogCWlmIChyY3VfcGVuZGluZyhjcHUpKQogCQlyY3VfY2hlY2tfY2FsbGJhY2tzKGNwdSwgdXNlcl90aWNrKTsKKwlwcmludGtfdGljaygpOwogCXNjaGVkdWxlcl90aWNrKCk7CiAJcnVuX3Bvc2l4X2NwdV90aW1lcnMocCk7CiB9CkBAIC0xNDM1LDkgKzE0MzYsMTEgQEAKIAlCVUdfT04oY3B1X29ubGluZShjcHUpKTsKIAlvbGRfYmFzZSA9IHBlcl9jcHUodHZlY19iYXNlcywgY3B1KTsKIAluZXdfYmFzZSA9IGdldF9jcHVfdmFyKHR2ZWNfYmFzZXMpOwotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlzcGluX2xvY2soJm5ld19iYXNlLT5sb2NrKTsKKwkvKgorCSAqIFRoZSBjYWxsZXIgaXMgZ2xvYmFsbHkgc2VyaWFsaXplZCBhbmQgbm9ib2R5IGVsc2UKKwkgKiB0YWtlcyB0d28gbG9ja3MgYXQgb25jZSwgZGVhZGxvY2sgaXMgbm90IHBvc3NpYmxlLgorCSAqLworCXNwaW5fbG9ja19pcnEoJm5ld19iYXNlLT5sb2NrKTsKIAlzcGluX2xvY2tfbmVzdGVkKCZvbGRfYmFzZS0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiAJQlVHX09OKG9sZF9iYXNlLT5ydW5uaW5nX3RpbWVyKTsKQEAgLTE0NTIsOCArMTQ1NSw3IEBACiAJfQogCiAJc3Bpbl91bmxvY2soJm9sZF9iYXNlLT5sb2NrKTsKLQlzcGluX3VubG9jaygmbmV3X2Jhc2UtPmxvY2spOwotCWxvY2FsX2lycV9lbmFibGUoKTsKKwlzcGluX3VubG9ja19pcnEoJm5ld19iYXNlLT5sb2NrKTsKIAlwdXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC91dHNuYW1lX3N5c2N0bC5jIGIva2VybmVsL3V0c25hbWVfc3lzY3RsLmMKaW5kZXggNGFiOTY1OS4uM2IzNGIzNSAxMDA2NDQKLS0tIGEva2VybmVsL3V0c25hbWVfc3lzY3RsLmMKKysrIGIva2VybmVsL3V0c25hbWVfc3lzY3RsLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAogI2lmZGVmIENPTkZJR19TWVNDVExfU1lTQ0FMTAogLyogVGhlIGdlbmVyaWMgc3RyaW5nIHN0cmF0ZWd5IHJvdXRpbmU6ICovCi1zdGF0aWMgaW50IHN5c2N0bF91dHNfc3RyaW5nKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorc3RhdGljIGludCBzeXNjdGxfdXRzX3N0cmluZyhjdGxfdGFibGUgKnRhYmxlLAogCQkgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCSAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTY5LDggKzY5LDcgQEAKIAl3cml0ZSA9IG5ld3ZhbCAmJiBuZXdsZW47CiAJbWVtY3B5KCZ1dHNfdGFibGUsIHRhYmxlLCBzaXplb2YodXRzX3RhYmxlKSk7CiAJdXRzX3RhYmxlLmRhdGEgPSBnZXRfdXRzKHRhYmxlLCB3cml0ZSk7Ci0JciA9IHN5c2N0bF9zdHJpbmcoJnV0c190YWJsZSwgbmFtZSwgbmxlbiwKLQkJb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CisJciA9IHN5c2N0bF9zdHJpbmcoJnV0c190YWJsZSwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJcHV0X3V0cyh0YWJsZSwgd3JpdGUsIHV0c190YWJsZS5kYXRhKTsKIAlyZXR1cm4gcjsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC93YWl0LmMgYi9rZXJuZWwvd2FpdC5jCmluZGV4IGMyNzVjNTYuLmNkODcxMzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93YWl0LmMKKysrIGIva2VybmVsL3dhaXQuYwpAQCAtNzIsMTIgKzcyLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOwogCWlmIChsaXN0X2VtcHR5KCZ3YWl0LT50YXNrX2xpc3QpKQogCQlfX2FkZF93YWl0X3F1ZXVlKHEsIHdhaXQpOwotCS8qCi0JICogZG9uJ3QgYWx0ZXIgdGhlIHRhc2sgc3RhdGUgaWYgdGhpcyBpcyBqdXN0IGdvaW5nIHRvCi0JICogcXVldWUgYW4gYXN5bmMgd2FpdCBxdWV1ZSBjYWxsYmFjawotCSAqLwotCWlmIChpc19zeW5jX3dhaXQod2FpdCkpCi0JCXNldF9jdXJyZW50X3N0YXRlKHN0YXRlKTsKKwlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChwcmVwYXJlX3RvX3dhaXQpOwpAQCAtOTEsMTIgKzg2LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOwogCWlmIChsaXN0X2VtcHR5KCZ3YWl0LT50YXNrX2xpc3QpKQogCQlfX2FkZF93YWl0X3F1ZXVlX3RhaWwocSwgd2FpdCk7Ci0JLyoKLQkgKiBkb24ndCBhbHRlciB0aGUgdGFzayBzdGF0ZSBpZiB0aGlzIGlzIGp1c3QgZ29pbmcgdG8KLSAJICogcXVldWUgYW4gYXN5bmMgd2FpdCBxdWV1ZSBjYWxsYmFjawotCSAqLwotCWlmIChpc19zeW5jX3dhaXQod2FpdCkpCi0JCXNldF9jdXJyZW50X3N0YXRlKHN0YXRlKTsKKwlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCA0MDQ4ZTkyLi43MTRhZmFkIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC05LDcgKzksNyBAQAogICogRGVyaXZlZCBmcm9tIHRoZSB0YXNrcXVldWUva2V2ZW50ZCBjb2RlIGJ5OgogICoKICAqICAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgotICogICBBbmRyZXcgTW9ydG9uIDxhbmRyZXdtQHVvdy5lZHUuYXU+CisgKiAgIEFuZHJldyBNb3J0b24KICAqICAgS2FpIFBldHprZSA8d3BwQG1hcmllLnBoeXNpay50dS1iZXJsaW4uZGU+CiAgKiAgIFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CiAgKgpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCBjN2FkN2E1Li44NWNmN2VhIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZworKysgYi9saWIvS2NvbmZpZwpAQCAtOCwxMCArOCwxMCBAQAogCXRyaXN0YXRlCiAKIGNvbmZpZyBHRU5FUklDX0ZJTkRfRklSU1RfQklUCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAogY29uZmlnIEdFTkVSSUNfRklORF9ORVhUX0JJVAotCWRlZl9ib29sIG4KKwlib29sCiAKIGNvbmZpZyBDUkNfQ0NJVFQKIAl0cmlzdGF0ZSAiQ1JDLUNDSVRUIGZ1bmN0aW9ucyIKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggYWE4MWQyOC4uYjBmMjM5ZSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTY1Miw2ICs2NTIsMTEgQEAKIAlkZXBlbmRzIG9uIEJMT0NLCiAJZGVmYXVsdCBuCiAJaGVscAorCSAgQklHIEZBVCBXQVJOSU5HOiBFTkFCTElORyBUSElTIE9QVElPTiBNSUdIVCBCUkVBSyBCT09USU5HIE9OCisJICBTT01FIERJU1RSSUJVVElPTlMuICBETyBOT1QgRU5BQkxFIFRISVMgVU5MRVNTIFlPVSBLTk9XIFdIQVQKKwkgIFlPVSBBUkUgRE9JTkcuICBEaXN0cm9zLCBwbGVhc2UgZW5hYmxlIHRoaXMgYW5kIGZpeCB3aGF0ZXZlcgorCSAgaXMgYnJva2VuLgorCiAJICBDb252ZW50aW9uYWxseSwgYmxvY2sgZGV2aWNlIG51bWJlcnMgYXJlIGFsbG9jYXRlZCBmcm9tCiAJICBwcmVkZXRlcm1pbmVkIGNvbnRpZ3VvdXMgYXJlYS4gIEhvd2V2ZXIsIGV4dGVuZGVkIGJsb2NrIGFyZWEKIAkgIG1heSBpbnRyb2R1Y2Ugbm9uLWNvbnRpZ3VvdXMgYmxvY2sgZGV2aWNlIG51bWJlcnMuICBUaGlzCkBAIC04MDcsNiArODEyLDYxIEBACiAKIAkgIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgogCitjb25maWcgRFlOQU1JQ19QUklOVEtfREVCVUcKKwlib29sICJFbmFibGUgZHluYW1pYyBwcmludGsoKSBjYWxsIHN1cHBvcnQiCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBQUklOVEsKKwlzZWxlY3QgUFJJTlRLX0RFQlVHCisJaGVscAorCisJICBDb21waWxlcyBkZWJ1ZyBsZXZlbCBtZXNzYWdlcyBpbnRvIHRoZSBrZXJuZWwsIHdoaWNoIHdvdWxkIG5vdAorCSAgb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSBhdCBydW50aW1lLiBUaGVzZSBtZXNzYWdlcyBjYW4gdGhlbiBiZQorCSAgZW5hYmxlZC9kaXNhYmxlZCBvbiBhIHBlciBtb2R1bGUgYmFzaXMuIFRoaXMgbWVjaGFuaXNtIGltcGxpY2l0bHkKKwkgIGVuYWJsZXMgYWxsIHByX2RlYnVnKCkgYW5kIGRldl9kYmcoKSBjYWxscy4gVGhlIGltcGFjdCBvZiB0aGlzCisJICBjb21waWxlIG9wdGlvbiBpcyBhIGxhcmdlciBrZXJuZWwgdGV4dCBzaXplIG9mIGFib3V0IDIlLgorCisJICBVc2FnZToKKworCSAgRHluYW1pYyBkZWJ1Z2dpbmcgaXMgY29udHJvbGxlZCBieSB0aGUgZGVidWdmcyBmaWxlLAorCSAgZHluYW1pY19wcmludGsvbW9kdWxlcy4gVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiB0aGUgbW9kdWxlcyB0aGF0CisJICBjYW4gYmUgZW5hYmxlZC4gVGhlIGZvcm1hdCBvZiB0aGUgZmlsZSBpcyB0aGUgbW9kdWxlIG5hbWUsIGZvbGxvd2VkCisJICBieSBhIHNldCBvZiBmbGFncyB0aGF0IGNhbiBiZSBlbmFibGVkLiBUaGUgZmlyc3QgZmxhZyBpcyBhbHdheXMgdGhlCisJICAnZW5hYmxlZCcgZmxhZy4gRm9yIGV4YW1wbGU6CisKKwkJPG1vZHVsZV9uYW1lPiA8ZW5hYmxlZD0wLzE+CisJCQkJLgorCQkJCS4KKwkJCQkuCisKKwkgIDxtb2R1bGVfbmFtZT4gOiBOYW1lIG9mIHRoZSBtb2R1bGUgaW4gd2hpY2ggdGhlIGRlYnVnIGNhbGwgcmVzaWRlcworCSAgPGVuYWJsZWQ9MC8xPiA6IHdoZXRoZXIgdGhlIG1lc3NhZ2VzIGFyZSBlbmFibGVkIG9yIG5vdAorCisJICBGcm9tIGEgbGl2ZSBzeXN0ZW06CisKKwkJc25kX2hkYV9pbnRlbCBlbmFibGVkPTAKKwkJZml4dXAgZW5hYmxlZD0wCisJCWRyaXZlciBlbmFibGVkPTAKKworCSAgRW5hYmxlIGEgbW9kdWxlOgorCisJICAJJGVjaG8gInNldCBlbmFibGVkPTEgPG1vZHVsZV9uYW1lPiIgPiBkeW5hbWljX3ByaW50ay9tb2R1bGVzCisKKwkgIERpc2FibGUgYSBtb2R1bGU6CisKKwkgIAkkZWNobyAic2V0IGVuYWJsZWQ9MCA8bW9kdWxlX25hbWU+IiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKworCSAgRW5hYmxlIGFsbCBtb2R1bGVzOgorCisJCSRlY2hvICJzZXQgZW5hYmxlZD0xIGFsbCIgPiBkeW5hbWljX3ByaW50ay9tb2R1bGVzCisKKwkgIERpc2FibGUgYWxsIG1vZHVsZXM6CisKKwkJJGVjaG8gInNldCBlbmFibGVkPTAgYWxsIiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKworCSAgRmluYWxseSwgcGFzc2luZyAiZHluYW1pY19wcmludGsiIGF0IHRoZSBjb21tYW5kIGxpbmUgZW5hYmxlcworCSAgZGVidWdnaW5nIGZvciBhbGwgbW9kdWxlcy4gVGhpcyBtb2RlIGNhbiBiZSB0dXJuZWQgb2ZmIHZpYSB0aGUgYWJvdmUKKwkgIGRpc2FibGUgY29tbWFuZC4KKwogc291cmNlICJzYW1wbGVzL0tjb25maWciCiAKIHNvdXJjZSAibGliL0tjb25maWcua2dkYiIKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCA0NDAwMWFmLi4xNmZlYWFiIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC04MSw2ICs4MSw4IEBACiAKIG9iai0kKENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LKSArPSBzeXNjYWxsLm8KIAorb2JqLSQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKSArPSBkeW5hbWljX3ByaW50ay5vCisKIGhvc3Rwcm9ncy15CTo9IGdlbl9jcmMzMnRhYmxlCiBjbGVhbi1maWxlcwk6PSBjcmMzMnRhYmxlLmgKIApkaWZmIC0tZ2l0IGEvbGliL2JpdG1hcC5jIGIvbGliL2JpdG1hcC5jCmluZGV4IDA2ZmI1N2MuLjQ4MmRmOTQgMTAwNjQ0Ci0tLSBhL2xpYi9iaXRtYXAuYworKysgYi9saWIvYml0bWFwLmMKQEAgLTMxNiwxNyArMzE2LDYgQEAKIEVYUE9SVF9TWU1CT0woYml0bWFwX3NjbnByaW50Zik7CiAKIC8qKgotICogYml0bWFwX3NjbnByaW50Zl9sZW4gLSByZXR1cm4gYnVmZmVyIGxlbmd0aCBuZWVkZWQgdG8gY29udmVydAotICogYml0bWFwIHRvIGFuIEFTQ0lJIGhleCBzdHJpbmcKLSAqIEBucl9iaXRzOiBudW1iZXIgb2YgYml0cyB0byBiZSBjb252ZXJ0ZWQKLSAqLwotaW50IGJpdG1hcF9zY25wcmludGZfbGVuKHVuc2lnbmVkIGludCBucl9iaXRzKQotewotCXVuc2lnbmVkIGludCBucl9uaWJibGVzID0gQUxJR04obnJfYml0cywgNCkgLyA0OwotCXJldHVybiBucl9uaWJibGVzICsgQUxJR04obnJfbmliYmxlcywgQ0hVTktTWiAvIDQpIC8gKENIVU5LU1ogLyA0KSAtIDE7Ci19Ci0KLS8qKgogICogX19iaXRtYXBfcGFyc2UgLSBjb252ZXJ0IGFuIEFTQ0lJIGhleCBzdHJpbmcgaW50byBhIGJpdG1hcC4KICAqIEBidWY6IHBvaW50ZXIgdG8gYnVmZmVyIGNvbnRhaW5pbmcgc3RyaW5nLgogICogQGJ1ZmxlbjogYnVmZmVyIHNpemUgaW4gYnl0ZXMuICBJZiBzdHJpbmcgaXMgc21hbGxlciB0aGFuIHRoaXMKZGlmZiAtLWdpdCBhL2xpYi9keW5hbWljX3ByaW50ay5jIGIvbGliL2R5bmFtaWNfcHJpbnRrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0MGY4NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9keW5hbWljX3ByaW50ay5jCkBAIC0wLDAgKzEsNDE4IEBACisvKgorICogbGliL2R5bmFtaWNfcHJpbnRrLmMKKyAqCisgKiBtYWtlIHByX2RlYnVnKCkvZGV2X2RiZygpIGNhbGxzIHJ1bnRpbWUgY29uZmlndXJhYmxlIGJhc2VkIHVwb24gdGhlaXIKKyAqIHRoZWlyIHNvdXJjZSBtb2R1bGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4sIEphc29uIEJhcm9uIDxqYmFyb25AcmVkaGF0LmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKK2V4dGVybiBzdHJ1Y3QgbW9kX2RlYnVnIF9fc3RhcnRfX192ZXJib3NlW107CitleHRlcm4gc3RydWN0IG1vZF9kZWJ1ZyBfX3N0b3BfX192ZXJib3NlW107CisKK3N0cnVjdCBkZWJ1Z19uYW1lIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDI7CisJaW50IGhhc2gxOworCWludCBoYXNoMjsKKwljaGFyICpuYW1lOworCWludCBlbmFibGU7CisJaW50IHR5cGU7Cit9OworCitzdGF0aWMgaW50IG5yX2VudHJpZXM7CitzdGF0aWMgaW50IG51bV9lbmFibGVkOworaW50IGR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9OT05FOworc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIG1vZHVsZV90YWJsZVtERUJVR19IQVNIX1RBQkxFX1NJWkVdID0KKwl7IFswIC4uLiBERUJVR19IQVNIX1RBQkxFX1NJWkUtMV0gPSBITElTVF9IRUFEX0lOSVQgfTsKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBtb2R1bGVfdGFibGUyW0RFQlVHX0hBU0hfVEFCTEVfU0laRV0gPQorCXsgWzAgLi4uIERFQlVHX0hBU0hfVEFCTEVfU0laRS0xXSA9IEhMSVNUX0hFQURfSU5JVCB9Oworc3RhdGljIERFQ0xBUkVfTVVURVgoZGVidWdfbGlzdF9tdXRleCk7CisKKy8qIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQsIGFuZCBkeW5hbWljX3ByaW50a19lbmFibGVkMiBhcmUgYml0bWFza3MgaW4gd2hpY2gKKyAqIGJpdCBuIGlzIHNldCB0byAxIGlmIGFueSBtb2RuYW1lIGhhc2hlcyBpbnRvIHRoZSBidWNrZXQgbiwgMCBvdGhlcndpc2UuIFRoZXkKKyAqIHVzZSBpbmRlcGVuZGVudCBoYXNoIGZ1bmN0aW9ucywgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZmFsc2UgcG9zaXRpdmVzLgorICovCitsb25nIGxvbmcgZHluYW1pY19wcmludGtfZW5hYmxlZDsKK0VYUE9SVF9TWU1CT0xfR1BMKGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQpOworbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyOworRVhQT1JUX1NZTUJPTF9HUEwoZHluYW1pY19wcmludGtfZW5hYmxlZDIpOworCisvKiByZXR1cm5zIHRoZSBkZWJ1ZyBtb2R1bGUgcG9pbnRlci4gKi8KK3N0YXRpYyBzdHJ1Y3QgZGVidWdfbmFtZSAqZmluZF9kZWJ1Z19tb2R1bGUoY2hhciAqbW9kdWxlX25hbWUpCit7CisJaW50IGk7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc3RydWN0IGRlYnVnX25hbWUgKmVsZW1lbnQ7CisKKwllbGVtZW50ID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgREVCVUdfSEFTSF9UQUJMRV9TSVpFOyBpKyspIHsKKwkJaGVhZCA9ICZtb2R1bGVfdGFibGVbaV07CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtZW50LCBub2RlLCBoZWFkLCBobGlzdCkKKwkJCWlmICghc3RyY21wKGVsZW1lbnQtPm5hbWUsIG1vZHVsZV9uYW1lKSkKKwkJCQlyZXR1cm4gZWxlbWVudDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIHJldHVybnMgdGhlIGRlYnVnIG1vZHVsZSBwb2ludGVyLiAqLworc3RhdGljIHN0cnVjdCBkZWJ1Z19uYW1lICpmaW5kX2RlYnVnX21vZHVsZV9oYXNoKGNoYXIgKm1vZHVsZV9uYW1lLCBpbnQgaGFzaCkKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbWVudDsKKworCWVsZW1lbnQgPSBOVUxMOworCWhlYWQgPSAmbW9kdWxlX3RhYmxlW2hhc2hdOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtZW50LCBub2RlLCBoZWFkLCBobGlzdCkKKwkJaWYgKCFzdHJjbXAoZWxlbWVudC0+bmFtZSwgbW9kdWxlX25hbWUpKQorCQkJcmV0dXJuIGVsZW1lbnQ7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXgqLworc3RhdGljIGludCBfX2FkZF9kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUsIGludCBoYXNoLCBpbnQgaGFzaDIpCit7CisJc3RydWN0IGRlYnVnX25hbWUgKm5ldzsKKwljaGFyICptb2R1bGVfbmFtZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChmaW5kX2RlYnVnX21vZHVsZShtb2RfbmFtZSkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCW1vZHVsZV9uYW1lID0ga21hbGxvYyhzdHJsZW4obW9kX25hbWUpICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtb2R1bGVfbmFtZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJbW9kdWxlX25hbWUgPSBzdHJjcHkobW9kdWxlX25hbWUsIG1vZF9uYW1lKTsKKwltb2R1bGVfbmFtZVtzdHJsZW4obW9kX25hbWUpXSA9ICdcMCc7CisJbmV3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRlYnVnX25hbWUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ldykgeworCQlrZnJlZShtb2R1bGVfbmFtZSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlJTklUX0hMSVNUX05PREUoJm5ldy0+aGxpc3QpOworCUlOSVRfSExJU1RfTk9ERSgmbmV3LT5obGlzdDIpOworCW5ldy0+bmFtZSA9IG1vZHVsZV9uYW1lOworCW5ldy0+aGFzaDEgPSBoYXNoOworCW5ldy0+aGFzaDIgPSBoYXNoMjsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJm5ldy0+aGxpc3QsICZtb2R1bGVfdGFibGVbaGFzaF0pOworCWhsaXN0X2FkZF9oZWFkX3JjdSgmbmV3LT5obGlzdDIsICZtb2R1bGVfdGFibGUyW2hhc2gyXSk7CisJbnJfZW50cmllcysrOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK2ludCB1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lKQoreworCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtZW50OworCWludCByZXQgPSAwOworCisJZG93bigmZGVidWdfbGlzdF9tdXRleCk7CisJZWxlbWVudCA9IGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKTsKKwlpZiAoIWVsZW1lbnQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWhsaXN0X2RlbF9yY3UoJmVsZW1lbnQtPmhsaXN0KTsKKwlobGlzdF9kZWxfcmN1KCZlbGVtZW50LT5obGlzdDIpOworCXN5bmNocm9uaXplX3JjdSgpOworCWtmcmVlKGVsZW1lbnQtPm5hbWUpOworCWlmIChlbGVtZW50LT5lbmFibGUpCisJCW51bV9lbmFibGVkLS07CisJa2ZyZWUoZWxlbWVudCk7CisJbnJfZW50cmllcy0tOworb3V0OgorCXVwKCZkZWJ1Z19saXN0X211dGV4KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUpOworCitpbnQgcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUsIGludCB0eXBlLCBjaGFyICpzaGFyZV9uYW1lLAorCQkJCQljaGFyICpmbGFncywgaW50IGhhc2gsIGludCBoYXNoMikKK3sKKwlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbTsKKwlpbnQgcmV0ID0gMDsKKworCWRvd24oJmRlYnVnX2xpc3RfbXV0ZXgpOworCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZShtb2RfbmFtZSk7CisJaWYgKCFlbGVtKSB7CisJCWlmIChfX2FkZF9kZWJ1Z19tb2R1bGUobW9kX25hbWUsIGhhc2gsIGhhc2gyKSkKKwkJCWdvdG8gb3V0OworCQllbGVtID0gZmluZF9kZWJ1Z19tb2R1bGUobW9kX25hbWUpOworCQlpZiAoZHluYW1pY19lbmFibGVkID09IERZTkFNSUNfRU5BQkxFRF9BTEwgJiYKKwkJCQkhc3RyY21wKG1vZF9uYW1lLCBzaGFyZV9uYW1lKSkgeworCQkJZWxlbS0+ZW5hYmxlID0gdHJ1ZTsKKwkJCW51bV9lbmFibGVkKys7CisJCX0KKwl9CisJZWxlbS0+dHlwZSB8PSB0eXBlOworb3V0OgorCXVwKCZkZWJ1Z19saXN0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUpOworCitpbnQgX19keW5hbWljX2RiZ19lbmFibGVkX2hlbHBlcihjaGFyICptb2RfbmFtZSwgaW50IHR5cGUsIGludCB2YWx1ZSwgaW50IGhhc2gpCit7CisJc3RydWN0IGRlYnVnX25hbWUgKmVsZW07CisJaW50IHJldCA9IDA7CisKKwlpZiAoZHluYW1pY19lbmFibGVkID09IERZTkFNSUNfRU5BQkxFRF9BTEwpCisJCXJldHVybiAxOworCXJjdV9yZWFkX2xvY2soKTsKKwllbGVtID0gZmluZF9kZWJ1Z19tb2R1bGVfaGFzaChtb2RfbmFtZSwgaGFzaCk7CisJaWYgKGVsZW0gJiYgZWxlbS0+ZW5hYmxlKQorCQlyZXQgPSAxOworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKTsKKworc3RhdGljIHZvaWQgc2V0X2FsbChib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZGVidWdfbmFtZSAqZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlpbnQgaTsKKwlsb25nIGxvbmcgZW5hYmxlX21hc2s7CisKKwlmb3IgKGkgPSAwOyBpIDwgREVCVUdfSEFTSF9UQUJMRV9TSVpFOyBpKyspIHsKKwkJaWYgKG1vZHVsZV90YWJsZVtpXS5maXJzdCAhPSBOVUxMKSB7CisJCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlLCBub2RlLCAmbW9kdWxlX3RhYmxlW2ldLCBobGlzdCkgeworCQkJCWUtPmVuYWJsZSA9IGVuYWJsZTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZW5hYmxlKQorCQllbmFibGVfbWFzayA9IFVMTE9OR19NQVg7CisJZWxzZQorCQllbmFibGVfbWFzayA9IDA7CisJZHluYW1pY19wcmludGtfZW5hYmxlZCA9IGVuYWJsZV9tYXNrOworCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyID0gZW5hYmxlX21hc2s7Cit9CisKK3N0YXRpYyBpbnQgZGlzYWJsZWRfaGFzaChpbnQgaSwgYm9vbCBmaXJzdF90YWJsZSkKK3sKKwlzdHJ1Y3QgZGVidWdfbmFtZSAqZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKworCWlmIChmaXJzdF90YWJsZSkgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlLCBub2RlLCAmbW9kdWxlX3RhYmxlW2ldLCBobGlzdCkgeworCQkJaWYgKGUtPmVuYWJsZSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsICZtb2R1bGVfdGFibGUyW2ldLCBobGlzdDIpIHsKKwkJCWlmIChlLT5lbmFibGUpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHByX2RlYnVnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBsZW5ndGgsIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyICpidWZmZXIsICpzLCAqdmFsdWVfc3RyLCAqc2V0dGluZ19zdHI7CisJaW50IGVyciwgdmFsdWU7CisJc3RydWN0IGRlYnVnX25hbWUgKmVsZW0gPSBOVUxMOworCWludCBhbGwgPSAwOworCisJaWYgKGxlbmd0aCA+IFBBR0VfU0laRSB8fCBsZW5ndGggPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1ZmZlciA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgYnVmLCBsZW5ndGgpKQorCQlnb3RvIG91dDsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKGxlbmd0aCA8IFBBR0VfU0laRSkKKwkJYnVmZmVyW2xlbmd0aF0gPSAnXDAnOworCWVsc2UgaWYgKGJ1ZmZlcltQQUdFX1NJWkUtMV0pCisJCWdvdG8gb3V0OworCisJZXJyID0gLUVJTlZBTDsKKwlkb3duKCZkZWJ1Z19saXN0X211dGV4KTsKKworCWlmIChzdHJuY21wKCJzZXQiLCBidWZmZXIsIDMpKQorCQlnb3RvIG91dF91cDsKKwlzID0gYnVmZmVyICsgMzsKKwlzZXR0aW5nX3N0ciA9IHN0cnNlcCgmcywgIj0iKTsKKwlpZiAocyA9PSBOVUxMKQorCQlnb3RvIG91dF91cDsKKwlzZXR0aW5nX3N0ciA9IHN0cnN0cmlwKHNldHRpbmdfc3RyKTsKKwl2YWx1ZV9zdHIgPSBzdHJzZXAoJnMsICIgIik7CisJaWYgKHMgPT0gTlVMTCkKKwkJZ290byBvdXRfdXA7CisJcyA9IHN0cnN0cmlwKHMpOworCWlmICghc3RybmNtcChzLCAiYWxsIiwgMykpCisJCWFsbCA9IDE7CisJZWxzZQorCQllbGVtID0gZmluZF9kZWJ1Z19tb2R1bGUocyk7CisJaWYgKCFzdHJuY21wKHNldHRpbmdfc3RyLCAiZW5hYmxlIiwgNikpIHsKKwkJdmFsdWUgPSAhIXNpbXBsZV9zdHJ0b2wodmFsdWVfc3RyLCBOVUxMLCAxMCk7CisJCWlmIChhbGwpIHsKKwkJCWlmICh2YWx1ZSkgeworCQkJCXNldF9hbGwodHJ1ZSk7CisJCQkJbnVtX2VuYWJsZWQgPSBucl9lbnRyaWVzOworCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9BTEw7CisJCQl9IGVsc2UgeworCQkJCXNldF9hbGwoZmFsc2UpOworCQkJCW51bV9lbmFibGVkID0gMDsKKwkJCQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfTk9ORTsKKwkJCX0KKwkJCWVyciA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAoZWxlbSkgeworCQkJCWlmICh2YWx1ZSAmJiAoZWxlbS0+ZW5hYmxlID09IDApKSB7CisJCQkJCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgfD0KKwkJCQkJCQkoMUxMIDw8IGVsZW0tPmhhc2gxKTsKKwkJCQkJZHluYW1pY19wcmludGtfZW5hYmxlZDIgfD0KKwkJCQkJCQkoMUxMIDw8IGVsZW0tPmhhc2gyKTsKKwkJCQkJZWxlbS0+ZW5hYmxlID0gMTsKKwkJCQkJbnVtX2VuYWJsZWQrKzsKKwkJCQkJZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX1NPTUU7CisJCQkJCWVyciA9IDA7CisJCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJCSAgICAgICAiZGVidWdnaW5nIGVuYWJsZWQgZm9yIG1vZHVsZSAlcyIsCisJCQkJCSAgICAgICBlbGVtLT5uYW1lKTsKKwkJCQl9IGVsc2UgaWYgKCF2YWx1ZSAmJiAoZWxlbS0+ZW5hYmxlID09IDEpKSB7CisJCQkJCWVsZW0tPmVuYWJsZSA9IDA7CisJCQkJCW51bV9lbmFibGVkLS07CisJCQkJCWlmIChkaXNhYmxlZF9oYXNoKGVsZW0tPmhhc2gxLCB0cnVlKSkKKwkJCQkJCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgJj0KKwkJCQkJCQl+KDFMTCA8PCBlbGVtLT5oYXNoMSk7CisJCQkJCWlmIChkaXNhYmxlZF9oYXNoKGVsZW0tPmhhc2gyLCBmYWxzZSkpCisJCQkJCQlkeW5hbWljX3ByaW50a19lbmFibGVkMiAmPQorCQkJCQkJCX4oMUxMIDw8IGVsZW0tPmhhc2gyKTsKKwkJCQkJaWYgKG51bV9lbmFibGVkKQorCQkJCQkJZHluYW1pY19lbmFibGVkID0KKwkJCQkJCQlEWU5BTUlDX0VOQUJMRURfU09NRTsKKwkJCQkJZWxzZQorCQkJCQkJZHluYW1pY19lbmFibGVkID0KKwkJCQkJCQlEWU5BTUlDX0VOQUJMRURfTk9ORTsKKwkJCQkJZXJyID0gMDsKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkJICAgICAgICJkZWJ1Z2dpbmcgZGlzYWJsZWQgZm9yIG1vZHVsZSAiCisJCQkJCSAgICAgICAiJXMiLCBlbGVtLT5uYW1lKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJaWYgKCFlcnIpCisJCWVyciA9IGxlbmd0aDsKK291dF91cDoKKwl1cCgmZGVidWdfbGlzdF9tdXRleCk7CitvdXQ6CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgKnByX2RlYnVnX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIGxvZmZfdCAqcG9zKQoreworCXJldHVybiAoKnBvcyA8IERFQlVHX0hBU0hfVEFCTEVfU0laRSkgPyBwb3MgOiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqcHJfZGVidWdfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkoKnBvcykrKzsKKwlpZiAoKnBvcyA+PSBERUJVR19IQVNIX1RBQkxFX1NJWkUpCisJCXJldHVybiBOVUxMOworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyB2b2lkIHByX2RlYnVnX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwkvKiBOb3RoaW5nIHRvIGRvICovCit9CisKK3N0YXRpYyBpbnQgcHJfZGVidWdfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtOworCXVuc2lnbmVkIGludCBpID0gKihsb2ZmX3QgKikgdjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwloZWFkID0gJm1vZHVsZV90YWJsZVtpXTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZWxlbSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKKwkJc2VxX3ByaW50ZihzLCAiJXMgZW5hYmxlZD0lZCIsIGVsZW0tPm5hbWUsIGVsZW0tPmVuYWJsZSk7CisJCXNlcV9wcmludGYocywgIlxuIik7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHByX2RlYnVnX3NlcV9vcHMgPSB7CisJLnN0YXJ0ID0gcHJfZGVidWdfc2VxX3N0YXJ0LAorCS5uZXh0ICA9IHByX2RlYnVnX3NlcV9uZXh0LAorCS5zdG9wICA9IHByX2RlYnVnX3NlcV9zdG9wLAorCS5zaG93ICA9IHByX2RlYnVnX3NlcV9zaG93Cit9OworCitzdGF0aWMgaW50IHByX2RlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJcmV0dXJuIHNlcV9vcGVuKGZpbHAsICZwcl9kZWJ1Z19zZXFfb3BzKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJfZGVidWdfb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSBwcl9kZWJ1Z19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS53cml0ZQkJPSBwcl9kZWJ1Z193cml0ZSwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZHluYW1pY19wcmludGtfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRpciwgKmZpbGU7CisJc3RydWN0IG1vZF9kZWJ1ZyAqaXRlcjsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJkeW5hbWljX3ByaW50ayIsIE5VTEwpOworCWlmICghZGlyKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgibW9kdWxlcyIsIDA2NDQsIGRpciwgTlVMTCwKKwkJCQkJJnByX2RlYnVnX29wZXJhdGlvbnMpOworCWlmICghZmlsZSkgeworCQlkZWJ1Z2ZzX3JlbW92ZShkaXIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZm9yICh2YWx1ZSA9ICh1bnNpZ25lZCBsb25nKV9fc3RhcnRfX192ZXJib3NlOworCQl2YWx1ZSA8ICh1bnNpZ25lZCBsb25nKV9fc3RvcF9fX3ZlcmJvc2U7CisJCXZhbHVlICs9IHNpemVvZihzdHJ1Y3QgbW9kX2RlYnVnKSkgeworCQkJaXRlciA9IChzdHJ1Y3QgbW9kX2RlYnVnICopdmFsdWU7CisJCQlyZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShpdGVyLT5tb2RuYW1lLAorCQkJCWl0ZXItPnR5cGUsCisJCQkJaXRlci0+bG9naWNhbF9tb2RuYW1lLAorCQkJCWl0ZXItPmZsYWdfbmFtZXMsIGl0ZXItPmhhc2gsIGl0ZXItPmhhc2gyKTsKKwl9CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChkeW5hbWljX3ByaW50a19pbml0KTsKKy8qIG1heSB3YW50IHRvIG1vdmUgdGhpcyBlYXJsaWVyIHNvIHdlIGNhbiBnZXQgdHJhY2VzIGFzIGVhcmx5IGFzIHBvc3NpYmxlICovCisKK3N0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfcHJpbnRrX3NldHVwKGNoYXIgKnN0cikKK3sKKwlpZiAoc3RyKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlzZXRfYWxsKHRydWUpOworCXJldHVybiAwOworfQorLyogVXNlIGVhcmx5X3BhcmFtKCksIHNvIHdlIGNhbiBnZXQgZGVidWcgb3V0cHV0IGFzIGVhcmx5IGFzIHBvc3NpYmxlICovCitlYXJseV9wYXJhbSgiZHluYW1pY19wcmludGsiLCBkeW5hbWljX3ByaW50a19zZXR1cCk7CmRpZmYgLS1naXQgYS9saWIvaW9tbXUtaGVscGVyLmMgYi9saWIvaW9tbXUtaGVscGVyLmMKaW5kZXggNWQ5MDA3NC4uNzVkYmRhMCAxMDA2NDQKLS0tIGEvbGliL2lvbW11LWhlbHBlci5jCisrKyBiL2xpYi9pb21tdS1oZWxwZXIuYwpAQCAtNzksMyArNzksMTIgQEAKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKGlvbW11X2FyZWFfZnJlZSk7CisKK3Vuc2lnbmVkIGxvbmcgaW9tbXVfbnVtX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGlvX3BhZ2Vfc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUgPSAoYWRkciAmIChpb19wYWdlX3NpemUgLSAxKSkgKyBsZW47CisKKwlyZXR1cm4gRElWX1JPVU5EX1VQKHNpemUsIGlvX3BhZ2Vfc2l6ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGlvbW11X251bV9wYWdlcyk7CmRpZmYgLS1naXQgYS9saWIva29iamVjdC5jIGIvbGliL2tvYmplY3QuYwppbmRleCBmYmYwYWUyLi4wNDg3ZDFmIDEwMDY0NAotLS0gYS9saWIva29iamVjdC5jCisrKyBiL2xpYi9rb2JqZWN0LmMKQEAgLTM4NywxMSArMzg3LDE3IEBACiAgKiBrb2JqZWN0X3JlbmFtZSAtIGNoYW5nZSB0aGUgbmFtZSBvZiBhbiBvYmplY3QKICAqIEBrb2JqOiBvYmplY3QgaW4gcXVlc3Rpb24uCiAgKiBAbmV3X25hbWU6IG9iamVjdCdzIG5ldyBuYW1lCisgKgorICogSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gcHJvdmlkZSBtdXR1YWwKKyAqIGV4Y2x1c2lvbiBiZXR3ZWVuIHR3byBkaWZmZXJlbnQgY2FsbHMgb2Yga29iamVjdF9yZW5hbWUKKyAqIG9uIHRoZSBzYW1lIGtvYmplY3QgYW5kIHRvIGVuc3VyZSB0aGF0IG5ld19uYW1lIGlzIHZhbGlkIGFuZAorICogd29uJ3QgY29uZmxpY3Qgd2l0aCBvdGhlciBrb2JqZWN0cy4KICAqLwogaW50IGtvYmplY3RfcmVuYW1lKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBjaGFyICpuZXdfbmFtZSkKIHsKIAlpbnQgZXJyb3IgPSAwOwogCWNvbnN0IGNoYXIgKmRldnBhdGggPSBOVUxMOworCWNvbnN0IGNoYXIgKmR1cF9uYW1lID0gTlVMTCwgKm5hbWU7CiAJY2hhciAqZGV2cGF0aF9zdHJpbmcgPSBOVUxMOwogCWNoYXIgKmVudnBbMl07CiAKQEAgLTQwMSwxOSArNDA3LDYgQEAKIAlpZiAoIWtvYmotPnBhcmVudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBzZWUgaWYgdGhpcyBuYW1lIGlzIGFscmVhZHkgaW4gdXNlICovCi0JaWYgKGtvYmotPmtzZXQpIHsKLQkJc3RydWN0IGtvYmplY3QgKnRlbXBfa29iajsKLQkJdGVtcF9rb2JqID0ga3NldF9maW5kX29iaihrb2JqLT5rc2V0LCBuZXdfbmFtZSk7Ci0JCWlmICh0ZW1wX2tvYmopIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImtvYmplY3QgJyVzJyBjYW5ub3QgYmUgcmVuYW1lZCAiCi0JCQkgICAgICAgInRvICclcycgYXMgJyVzJyBpcyBhbHJlYWR5IGluIGV4aXN0ZW5jZS5cbiIsCi0JCQkgICAgICAga29iamVjdF9uYW1lKGtvYmopLCBuZXdfbmFtZSwgbmV3X25hbWUpOwotCQkJa29iamVjdF9wdXQodGVtcF9rb2JqKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCiAJZGV2cGF0aCA9IGtvYmplY3RfZ2V0X3BhdGgoa29iaiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXZwYXRoKSB7CiAJCWVycm9yID0gLUVOT01FTTsKQEAgLTQyOCwxNSArNDIxLDI3IEBACiAJZW52cFswXSA9IGRldnBhdGhfc3RyaW5nOwogCWVudnBbMV0gPSBOVUxMOwogCisJbmFtZSA9IGR1cF9uYW1lID0ga3N0cmR1cChuZXdfbmFtZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuYW1lKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCiAJZXJyb3IgPSBzeXNmc19yZW5hbWVfZGlyKGtvYmosIG5ld19uYW1lKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCisJLyogSW5zdGFsbCB0aGUgbmV3IGtvYmplY3QgbmFtZSAqLworCWR1cF9uYW1lID0ga29iai0+bmFtZTsKKwlrb2JqLT5uYW1lID0gbmFtZTsKIAogCS8qIFRoaXMgZnVuY3Rpb24gaXMgbW9zdGx5L29ubHkgdXNlZCBmb3IgbmV0d29yayBpbnRlcmZhY2UuCiAJICogU29tZSBob3RwbHVnIHBhY2thZ2UgdHJhY2sgaW50ZXJmYWNlcyBieSB0aGVpciBuYW1lIGFuZAogCSAqIHRoZXJlZm9yZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgbmFtZSBpcyBjaGFuZ2VkIGJ5IHRoZSB1c2VyLiAqLwotCWlmICghZXJyb3IpCi0JCWtvYmplY3RfdWV2ZW50X2Vudihrb2JqLCBLT0JKX01PVkUsIGVudnApOworCWtvYmplY3RfdWV2ZW50X2Vudihrb2JqLCBLT0JKX01PVkUsIGVudnApOwogCiBvdXQ6CisJa2ZyZWUoZHVwX25hbWUpOwogCWtmcmVlKGRldnBhdGhfc3RyaW5nKTsKIAlrZnJlZShkZXZwYXRoKTsKIAlrb2JqZWN0X3B1dChrb2JqKTsKZGlmZiAtLWdpdCBhL2xpYi9wYXJzZXIuYyBiL2xpYi9wYXJzZXIuYwppbmRleCA0ZjBjYmMwLi5iMDBkMDIwIDEwMDY0NAotLS0gYS9saWIvcGFyc2VyLmMKKysrIGIvbGliL3BhcnNlci5jCkBAIC0xMDAsNyArMTAwLDcgQEAKICAqIGZvcm1hdCBpZGVudGlmaWVycyB3aGljaCB3aWxsIGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIG1hdGNoaW5nIHRoZQogICogdG9rZW5zLCBhbmQgd2hvc2UgbG9jYXRpb25zIHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlIEBhcmdzIGFycmF5LgogICovCi1pbnQgbWF0Y2hfdG9rZW4oY2hhciAqcywgbWF0Y2hfdGFibGVfdCB0YWJsZSwgc3Vic3RyaW5nX3QgYXJnc1tdKQoraW50IG1hdGNoX3Rva2VuKGNoYXIgKnMsIGNvbnN0IG1hdGNoX3RhYmxlX3QgdGFibGUsIHN1YnN0cmluZ190IGFyZ3NbXSkKIHsKIAljb25zdCBzdHJ1Y3QgbWF0Y2hfdG9rZW4gKnA7CiAKZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmMKaW5kZXggYzM5OWJjMS4uYTAxM2JiYyAxMDA2NDQKLS0tIGEvbGliL3ZzcHJpbnRmLmMKKysrIGIvbGliL3ZzcHJpbnRmLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CQkvKiBmb3IgUEFHRV9TSVpFICovCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC0zMiw0MCArMzMsNDggQEAKIC8qIFdvcmtzIG9ubHkgZm9yIGRpZ2l0cyBhbmQgbGV0dGVycywgYnV0IHNtYWxsIGFuZCBmYXN0ICovCiAjZGVmaW5lIFRPTE9XRVIoeCkgKCh4KSB8IDB4MjApCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2ltcGxlX2d1ZXNzX2Jhc2UoY29uc3QgY2hhciAqY3ApCit7CisJaWYgKGNwWzBdID09ICcwJykgeworCQlpZiAoVE9MT1dFUihjcFsxXSkgPT0gJ3gnICYmIGlzeGRpZ2l0KGNwWzJdKSkKKwkJCXJldHVybiAxNjsKKwkJZWxzZQorCQkJcmV0dXJuIDg7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDEwOworCX0KK30KKwogLyoqCiAgKiBzaW1wbGVfc3RydG91bCAtIGNvbnZlcnQgYSBzdHJpbmcgdG8gYW4gdW5zaWduZWQgbG9uZwogICogQGNwOiBUaGUgc3RhcnQgb2YgdGhlIHN0cmluZwogICogQGVuZHA6IEEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBwYXJzZWQgc3RyaW5nIHdpbGwgYmUgcGxhY2VkIGhlcmUKICAqIEBiYXNlOiBUaGUgbnVtYmVyIGJhc2UgdG8gdXNlCiAgKi8KLXVuc2lnbmVkIGxvbmcgc2ltcGxlX3N0cnRvdWwoY29uc3QgY2hhciAqY3AsY2hhciAqKmVuZHAsdW5zaWduZWQgaW50IGJhc2UpCit1bnNpZ25lZCBsb25nIHNpbXBsZV9zdHJ0b3VsKGNvbnN0IGNoYXIgKmNwLCBjaGFyICoqZW5kcCwgdW5zaWduZWQgaW50IGJhc2UpCiB7Ci0JdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwLHZhbHVlOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKIAotCWlmICghYmFzZSkgewotCQliYXNlID0gMTA7Ci0JCWlmICgqY3AgPT0gJzAnKSB7Ci0JCQliYXNlID0gODsKLQkJCWNwKys7Ci0JCQlpZiAoKFRPTE9XRVIoKmNwKSA9PSAneCcpICYmIGlzeGRpZ2l0KGNwWzFdKSkgewotCQkJCWNwKys7Ci0JCQkJYmFzZSA9IDE2OwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmIChiYXNlID09IDE2KSB7Ci0JCWlmIChjcFswXSA9PSAnMCcgJiYgVE9MT1dFUihjcFsxXSkgPT0gJ3gnKQotCQkJY3AgKz0gMjsKLQl9Ci0Jd2hpbGUgKGlzeGRpZ2l0KCpjcCkgJiYKLQkgICAgICAgKHZhbHVlID0gaXNkaWdpdCgqY3ApID8gKmNwLScwJyA6IFRPTE9XRVIoKmNwKS0nYScrMTApIDwgYmFzZSkgewotCQlyZXN1bHQgPSByZXN1bHQqYmFzZSArIHZhbHVlOworCWlmICghYmFzZSkKKwkJYmFzZSA9IHNpbXBsZV9ndWVzc19iYXNlKGNwKTsKKworCWlmIChiYXNlID09IDE2ICYmIGNwWzBdID09ICcwJyAmJiBUT0xPV0VSKGNwWzFdKSA9PSAneCcpCisJCWNwICs9IDI7CisKKwl3aGlsZSAoaXN4ZGlnaXQoKmNwKSkgeworCQl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwkJdmFsdWUgPSBpc2RpZ2l0KCpjcCkgPyAqY3AgLSAnMCcgOiBUT0xPV0VSKCpjcCkgLSAnYScgKyAxMDsKKwkJaWYgKHZhbHVlID49IGJhc2UpCisJCQlicmVhazsKKwkJcmVzdWx0ID0gcmVzdWx0ICogYmFzZSArIHZhbHVlOwogCQljcCsrOwogCX0KKwogCWlmIChlbmRwKQogCQkqZW5kcCA9IChjaGFyICopY3A7CiAJcmV0dXJuIHJlc3VsdDsKIH0KLQogRVhQT1JUX1NZTUJPTChzaW1wbGVfc3RydG91bCk7CiAKIC8qKgpAQCAtNzQsMTMgKzgzLDEyIEBACiAgKiBAZW5kcDogQSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIHBhcnNlZCBzdHJpbmcgd2lsbCBiZSBwbGFjZWQgaGVyZQogICogQGJhc2U6IFRoZSBudW1iZXIgYmFzZSB0byB1c2UKICAqLwotbG9uZyBzaW1wbGVfc3RydG9sKGNvbnN0IGNoYXIgKmNwLGNoYXIgKiplbmRwLHVuc2lnbmVkIGludCBiYXNlKQorbG9uZyBzaW1wbGVfc3RydG9sKGNvbnN0IGNoYXIgKmNwLCBjaGFyICoqZW5kcCwgdW5zaWduZWQgaW50IGJhc2UpCiB7Ci0JaWYoKmNwPT0nLScpCi0JCXJldHVybiAtc2ltcGxlX3N0cnRvdWwoY3ArMSxlbmRwLGJhc2UpOwotCXJldHVybiBzaW1wbGVfc3RydG91bChjcCxlbmRwLGJhc2UpOworCWlmKCpjcCA9PSAnLScpCisJCXJldHVybiAtc2ltcGxlX3N0cnRvdWwoY3AgKyAxLCBlbmRwLCBiYXNlKTsKKwlyZXR1cm4gc2ltcGxlX3N0cnRvdWwoY3AsIGVuZHAsIGJhc2UpOwogfQotCiBFWFBPUlRfU1lNQk9MKHNpbXBsZV9zdHJ0b2wpOwogCiAvKioKQEAgLTg5LDM0ICs5NywzMCBAQAogICogQGVuZHA6IEEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBwYXJzZWQgc3RyaW5nIHdpbGwgYmUgcGxhY2VkIGhlcmUKICAqIEBiYXNlOiBUaGUgbnVtYmVyIGJhc2UgdG8gdXNlCiAgKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBzaW1wbGVfc3RydG91bGwoY29uc3QgY2hhciAqY3AsY2hhciAqKmVuZHAsdW5zaWduZWQgaW50IGJhc2UpCit1bnNpZ25lZCBsb25nIGxvbmcgc2ltcGxlX3N0cnRvdWxsKGNvbnN0IGNoYXIgKmNwLCBjaGFyICoqZW5kcCwgdW5zaWduZWQgaW50IGJhc2UpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHJlc3VsdCA9IDAsdmFsdWU7CisJdW5zaWduZWQgbG9uZyBsb25nIHJlc3VsdCA9IDA7CiAKLQlpZiAoIWJhc2UpIHsKLQkJYmFzZSA9IDEwOwotCQlpZiAoKmNwID09ICcwJykgewotCQkJYmFzZSA9IDg7Ci0JCQljcCsrOwotCQkJaWYgKChUT0xPV0VSKCpjcCkgPT0gJ3gnKSAmJiBpc3hkaWdpdChjcFsxXSkpIHsKLQkJCQljcCsrOwotCQkJCWJhc2UgPSAxNjsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoYmFzZSA9PSAxNikgewotCQlpZiAoY3BbMF0gPT0gJzAnICYmIFRPTE9XRVIoY3BbMV0pID09ICd4JykKLQkJCWNwICs9IDI7Ci0JfQotCXdoaWxlIChpc3hkaWdpdCgqY3ApCi0JICYmICh2YWx1ZSA9IGlzZGlnaXQoKmNwKSA/ICpjcC0nMCcgOiBUT0xPV0VSKCpjcCktJ2EnKzEwKSA8IGJhc2UpIHsKLQkJcmVzdWx0ID0gcmVzdWx0KmJhc2UgKyB2YWx1ZTsKKwlpZiAoIWJhc2UpCisJCWJhc2UgPSBzaW1wbGVfZ3Vlc3NfYmFzZShjcCk7CisKKwlpZiAoYmFzZSA9PSAxNiAmJiBjcFswXSA9PSAnMCcgJiYgVE9MT1dFUihjcFsxXSkgPT0gJ3gnKQorCQljcCArPSAyOworCisJd2hpbGUgKGlzeGRpZ2l0KCpjcCkpIHsKKwkJdW5zaWduZWQgaW50IHZhbHVlOworCisJCXZhbHVlID0gaXNkaWdpdCgqY3ApID8gKmNwIC0gJzAnIDogVE9MT1dFUigqY3ApIC0gJ2EnICsgMTA7CisJCWlmICh2YWx1ZSA+PSBiYXNlKQorCQkJYnJlYWs7CisJCXJlc3VsdCA9IHJlc3VsdCAqIGJhc2UgKyB2YWx1ZTsKIAkJY3ArKzsKIAl9CisKIAlpZiAoZW5kcCkKIAkJKmVuZHAgPSAoY2hhciAqKWNwOwogCXJldHVybiByZXN1bHQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc2ltcGxlX3N0cnRvdWxsKTsKIAogLyoqCkBAIC0xMjUsMTQgKzEyOSwxMyBAQAogICogQGVuZHA6IEEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBwYXJzZWQgc3RyaW5nIHdpbGwgYmUgcGxhY2VkIGhlcmUKICAqIEBiYXNlOiBUaGUgbnVtYmVyIGJhc2UgdG8gdXNlCiAgKi8KLWxvbmcgbG9uZyBzaW1wbGVfc3RydG9sbChjb25zdCBjaGFyICpjcCxjaGFyICoqZW5kcCx1bnNpZ25lZCBpbnQgYmFzZSkKK2xvbmcgbG9uZyBzaW1wbGVfc3RydG9sbChjb25zdCBjaGFyICpjcCwgY2hhciAqKmVuZHAsIHVuc2lnbmVkIGludCBiYXNlKQogewogCWlmKCpjcD09Jy0nKQotCQlyZXR1cm4gLXNpbXBsZV9zdHJ0b3VsbChjcCsxLGVuZHAsYmFzZSk7Ci0JcmV0dXJuIHNpbXBsZV9zdHJ0b3VsbChjcCxlbmRwLGJhc2UpOworCQlyZXR1cm4gLXNpbXBsZV9zdHJ0b3VsbChjcCArIDEsIGVuZHAsIGJhc2UpOworCXJldHVybiBzaW1wbGVfc3RydG91bGwoY3AsIGVuZHAsIGJhc2UpOwogfQogCi0KIC8qKgogICogc3RyaWN0X3N0cnRvdWwgLSBjb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgc3RyaWN0bHkKICAqIEBjcDogVGhlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWQKQEAgLTE1NSw3ICsxNTgsMjcgQEAKICAqIHNpbXBsZV9zdHJ0b3VsIGp1c3QgaWdub3JlcyB0aGUgc3VjY2Vzc2l2ZSBpbnZhbGlkIGNoYXJhY3RlcnMgYW5kCiAgKiByZXR1cm4gdGhlIGNvbnZlcnRlZCB2YWx1ZSBvZiBwcmVmaXggcGFydCBvZiB0aGUgc3RyaW5nLgogICovCi1pbnQgc3RyaWN0X3N0cnRvdWwoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBsb25nICpyZXMpOworaW50IHN0cmljdF9zdHJ0b3VsKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgbG9uZyAqcmVzKQoreworCWNoYXIgKnRhaWw7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJc2l6ZV90IGxlbjsKKworCSpyZXMgPSAwOworCWxlbiA9IHN0cmxlbihjcCk7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGNwLCAmdGFpbCwgYmFzZSk7CisJaWYgKCgqdGFpbCA9PSAnXDAnKSB8fAorCQkoKGxlbiA9PSAoc2l6ZV90KSh0YWlsIC0gY3ApICsgMSkgJiYgKCp0YWlsID09ICdcbicpKSkgeworCQkqcmVzID0gdmFsOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0woc3RyaWN0X3N0cnRvdWwpOwogCiAvKioKICAqIHN0cmljdF9zdHJ0b2wgLSBjb252ZXJ0IGEgc3RyaW5nIHRvIGEgbG9uZyBzdHJpY3RseQpAQCAtMTY5LDcgKzE5MiwyMCBAQAogICogSXQgcmV0dXJucyAwIGlmIGNvbnZlcnNpb24gaXMgc3VjY2Vzc2Z1bCBhbmQgKnJlcyBpcyBzZXQgdG8gdGhlIGNvbnZlcnRlZAogICogdmFsdWUsIG90aGVyd2lzZSBpdCByZXR1cm5zIC1FSU5WQUwgYW5kICpyZXMgaXMgc2V0IHRvIDAuCiAgKi8KLWludCBzdHJpY3Rfc3RydG9sKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgYmFzZSwgbG9uZyAqcmVzKTsKK2ludCBzdHJpY3Rfc3RydG9sKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgYmFzZSwgbG9uZyAqcmVzKQoreworCWludCByZXQ7CisJaWYgKCpjcCA9PSAnLScpIHsKKwkJcmV0ID0gc3RyaWN0X3N0cnRvdWwoY3AgKyAxLCBiYXNlLCAodW5zaWduZWQgbG9uZyAqKXJlcyk7CisJCWlmICghcmV0KQorCQkJKnJlcyA9IC0oKnJlcyk7CisJfSBlbHNlIHsKKwkJcmV0ID0gc3RyaWN0X3N0cnRvdWwoY3AsIGJhc2UsICh1bnNpZ25lZCBsb25nICopcmVzKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChzdHJpY3Rfc3RydG9sKTsKIAogLyoqCiAgKiBzdHJpY3Rfc3RydG91bGwgLSBjb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgbG9uZyBzdHJpY3RseQpAQCAtMTkzLDcgKzIyOSwyNyBAQAogICogc2ltcGxlX3N0cnRvdWxsIGp1c3QgaWdub3JlcyB0aGUgc3VjY2Vzc2l2ZSBpbnZhbGlkIGNoYXJhY3RlcnMgYW5kCiAgKiByZXR1cm4gdGhlIGNvbnZlcnRlZCB2YWx1ZSBvZiBwcmVmaXggcGFydCBvZiB0aGUgc3RyaW5nLgogICovCi1pbnQgc3RyaWN0X3N0cnRvdWxsKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgbG9uZyBsb25nICpyZXMpOworaW50IHN0cmljdF9zdHJ0b3VsbChjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGxvbmcgbG9uZyAqcmVzKQoreworCWNoYXIgKnRhaWw7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwlzaXplX3QgbGVuOworCisJKnJlcyA9IDA7CisJbGVuID0gc3RybGVuKGNwKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsID0gc2ltcGxlX3N0cnRvdWxsKGNwLCAmdGFpbCwgYmFzZSk7CisJaWYgKCgqdGFpbCA9PSAnXDAnKSB8fAorCQkoKGxlbiA9PSAoc2l6ZV90KSh0YWlsIC0gY3ApICsgMSkgJiYgKCp0YWlsID09ICdcbicpKSkgeworCQkqcmVzID0gdmFsOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0woc3RyaWN0X3N0cnRvdWxsKTsKIAogLyoqCiAgKiBzdHJpY3Rfc3RydG9sbCAtIGNvbnZlcnQgYSBzdHJpbmcgdG8gYSBsb25nIGxvbmcgc3RyaWN0bHkKQEAgLTIwNyw1MyArMjYzLDIwIEBACiAgKiBJdCByZXR1cm5zIDAgaWYgY29udmVyc2lvbiBpcyBzdWNjZXNzZnVsIGFuZCAqcmVzIGlzIHNldCB0byB0aGUgY29udmVydGVkCiAgKiB2YWx1ZSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgLUVJTlZBTCBhbmQgKnJlcyBpcyBzZXQgdG8gMC4KICAqLwotaW50IHN0cmljdF9zdHJ0b2xsKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgYmFzZSwgbG9uZyBsb25nICpyZXMpOworaW50IHN0cmljdF9zdHJ0b2xsKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgYmFzZSwgbG9uZyBsb25nICpyZXMpCit7CisJaW50IHJldDsKKwlpZiAoKmNwID09ICctJykgeworCQlyZXQgPSBzdHJpY3Rfc3RydG91bGwoY3AgKyAxLCBiYXNlLCAodW5zaWduZWQgbG9uZyBsb25nICopcmVzKTsKKwkJaWYgKCFyZXQpCisJCQkqcmVzID0gLSgqcmVzKTsKKwl9IGVsc2UgeworCQlyZXQgPSBzdHJpY3Rfc3RydG91bGwoY3AsIGJhc2UsICh1bnNpZ25lZCBsb25nIGxvbmcgKilyZXMpOworCX0KIAotI2RlZmluZSBkZWZpbmVfc3RyaWN0X3N0cnRvdXgodHlwZSwgdmFsdHlwZSkJCQkJXAotaW50IHN0cmljdF9zdHJ0b3UjI3R5cGUoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLCB2YWx0eXBlICpyZXMpXAotewkJCQkJCQkJCVwKLQljaGFyICp0YWlsOwkJCQkJCQlcCi0JdmFsdHlwZSB2YWw7CQkJCQkJCVwKLQlzaXplX3QgbGVuOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JKnJlcyA9IDA7CQkJCQkJCVwKLQlsZW4gPSBzdHJsZW4oY3ApOwkJCQkJCVwKLQlpZiAobGVuID09IDApCQkJCQkJCVwKLQkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAotCQkJCQkJCQkJXAotCXZhbCA9IHNpbXBsZV9zdHJ0b3UjI3R5cGUoY3AsICZ0YWlsLCBiYXNlKTsJCQlcCi0JaWYgKCgqdGFpbCA9PSAnXDAnKSB8fAkJCQkJCVwKLQkJKChsZW4gPT0gKHNpemVfdCkodGFpbCAtIGNwKSArIDEpICYmICgqdGFpbCA9PSAnXG4nKSkpIHtcCi0JCSpyZXMgPSB2YWw7CQkJCQkJXAotCQlyZXR1cm4gMDsJCQkJCQlcCi0JfQkJCQkJCQkJXAotCQkJCQkJCQkJXAotCXJldHVybiAtRUlOVkFMOwkJCQkJCQlcCi19CQkJCQkJCQkJXAotCi0jZGVmaW5lIGRlZmluZV9zdHJpY3Rfc3RydG94KHR5cGUsIHZhbHR5cGUpCQkJCVwKLWludCBzdHJpY3Rfc3RydG8jI3R5cGUoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLCB2YWx0eXBlICpyZXMpCVwKLXsJCQkJCQkJCQlcCi0JaW50IHJldDsJCQkJCQkJXAotCWlmICgqY3AgPT0gJy0nKSB7CQkJCQkJXAotCQlyZXQgPSBzdHJpY3Rfc3RydG91IyN0eXBlKGNwKzEsIGJhc2UsIHJlcyk7CQlcCi0JCWlmICghcmV0KQkJCQkJCVwKLQkJCSpyZXMgPSAtKCpyZXMpOwkJCQkJXAotCX0gZWxzZQkJCQkJCQkJXAotCQlyZXQgPSBzdHJpY3Rfc3RydG91IyN0eXBlKGNwLCBiYXNlLCByZXMpOwkJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXQ7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0KLWRlZmluZV9zdHJpY3Rfc3RydG91eChsLCB1bnNpZ25lZCBsb25nKQotZGVmaW5lX3N0cmljdF9zdHJ0b3gobCwgbG9uZykKLWRlZmluZV9zdHJpY3Rfc3RydG91eChsbCwgdW5zaWduZWQgbG9uZyBsb25nKQotZGVmaW5lX3N0cmljdF9zdHJ0b3gobGwsIGxvbmcgbG9uZykKLQotRVhQT1JUX1NZTUJPTChzdHJpY3Rfc3RydG91bCk7Ci1FWFBPUlRfU1lNQk9MKHN0cmljdF9zdHJ0b2wpOworCXJldHVybiByZXQ7Cit9CiBFWFBPUlRfU1lNQk9MKHN0cmljdF9zdHJ0b2xsKTsKLUVYUE9SVF9TWU1CT0woc3RyaWN0X3N0cnRvdWxsKTsKIAogc3RhdGljIGludCBza2lwX2F0b2koY29uc3QgY2hhciAqKnMpCiB7CkBAIC01MjgsMTggKzU1MSw1MSBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBjaGFyICpyZXNvdXJjZV9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgZmllbGRfd2lkdGgsIGludCBwcmVjaXNpb24sIGludCBmbGFncykKK3sKKyNpZm5kZWYgSU9fUlNSQ19QUklOVEtfU0laRQorI2RlZmluZSBJT19SU1JDX1BSSU5US19TSVpFCTQKKyNlbmRpZgorCisjaWZuZGVmIE1FTV9SU1JDX1BSSU5US19TSVpFCisjZGVmaW5lIE1FTV9SU1JDX1BSSU5US19TSVpFCTgKKyNlbmRpZgorCisJLyogcm9vbSBmb3IgdGhlIGFjdHVhbCBudW1iZXJzLCB0aGUgdHdvICIweCIsIC0sIFssIF0gYW5kIHRoZSBmaW5hbCB6ZXJvICovCisJY2hhciBzeW1bNCpzaXplb2YocmVzb3VyY2Vfc2l6ZV90KSArIDhdOworCWNoYXIgKnAgPSBzeW0sICpwZW5kID0gc3ltICsgc2l6ZW9mKHN5bSk7CisJaW50IHNpemUgPSAtMTsKKworCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJc2l6ZSA9IElPX1JTUkNfUFJJTlRLX1NJWkU7CisJZWxzZSBpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQorCQlzaXplID0gTUVNX1JTUkNfUFJJTlRLX1NJWkU7CisKKwkqcCsrID0gJ1snOworCXAgPSBudW1iZXIocCwgcGVuZCwgcmVzLT5zdGFydCwgMTYsIHNpemUsIC0xLCBTUEVDSUFMIHwgU01BTEwgfCBaRVJPUEFEKTsKKwkqcCsrID0gJy0nOworCXAgPSBudW1iZXIocCwgcGVuZCwgcmVzLT5lbmQsIDE2LCBzaXplLCAtMSwgU1BFQ0lBTCB8IFNNQUxMIHwgWkVST1BBRCk7CisJKnArKyA9ICddJzsKKwkqcCA9IDA7CisKKwlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBzeW0sIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKK30KKwogLyoKICAqIFNob3cgYSAnJXAnIHRoaW5nLiAgQSBrZXJuZWwgZXh0ZW5zaW9uIGlzIHRoYXQgdGhlICclcCcgaXMgZm9sbG93ZWQKICAqIGJ5IGFuIGV4dHJhIHNldCBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyB0aGF0IGFyZSBleHRlbmRlZCBmb3JtYXQKICAqIHNwZWNpZmllcnMuCiAgKgotICogUmlnaHQgbm93IHdlIGp1c3QgaGFuZGxlICdGJyAoZm9yIHN5bWJvbGljIEZ1bmN0aW9uIGRlc2NyaXB0b3IgcG9pbnRlcnMpCi0gKiBhbmQgJ1MnIChmb3IgU3ltYm9saWMgZGlyZWN0IHBvaW50ZXJzKSwgYnV0IHRoaXMgY2FuIGVhc2lseSBiZQotICogZXh0ZW5kZWQgaW4gdGhlIGZ1dHVyZSAobmV0d29yayBhZGRyZXNzIHR5cGVzIGV0YykuCisgKiBSaWdodCBub3cgd2UgaGFuZGxlOgogICoKLSAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gJ1MnIGFuZCAnRicgaXMgdGhhdCBvbiBpYTY0IGFuZCBwcGM2NCBmdW5jdGlvbgotICogcG9pbnRlcnMgYXJlIHJlYWxseSBmdW5jdGlvbiBkZXNjcmlwdG9ycywgd2hpY2ggY29udGFpbiBhIHBvaW50ZXIgdGhlCi0gKiByZWFsIGFkZHJlc3MuIAorICogLSAnRicgRm9yIHN5bWJvbGljIGZ1bmN0aW9uIGRlc2NyaXB0b3IgcG9pbnRlcnMKKyAqIC0gJ1MnIEZvciBzeW1ib2xpYyBkaXJlY3QgcG9pbnRlcnMKKyAqIC0gJ1InIEZvciBhIHN0cnVjdCByZXNvdXJjZSBwb2ludGVyLCBpdCBwcmludHMgdGhlIHJhbmdlIG9mCisgKiAgICAgICBhZGRyZXNzZXMgKG5vdCB0aGUgbmFtZSBub3IgdGhlIGZsYWdzKQorICoKKyAqIE5vdGU6IFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gJ1MnIGFuZCAnRicgaXMgdGhhdCBvbiBpYTY0IGFuZCBwcGM2NAorICogZnVuY3Rpb24gcG9pbnRlcnMgYXJlIHJlYWxseSBmdW5jdGlvbiBkZXNjcmlwdG9ycywgd2hpY2ggY29udGFpbiBhCisgKiBwb2ludGVyIHRvIHRoZSByZWFsIGFkZHJlc3MuCiAgKi8KIHN0YXRpYyBjaGFyICpwb2ludGVyKGNvbnN0IGNoYXIgKmZtdCwgY2hhciAqYnVmLCBjaGFyICplbmQsIHZvaWQgKnB0ciwgaW50IGZpZWxkX3dpZHRoLCBpbnQgcHJlY2lzaW9uLCBpbnQgZmxhZ3MpCiB7CkBAIC01NDksNiArNjA1LDggQEAKIAkJLyogRmFsbHRocm91Z2ggKi8KIAljYXNlICdTJzoKIAkJcmV0dXJuIHN5bWJvbF9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOworCWNhc2UgJ1InOgorCQlyZXR1cm4gcmVzb3VyY2Vfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKIAl9CiAJZmxhZ3MgfD0gU01BTEw7CiAJaWYgKGZpZWxkX3dpZHRoID09IC0xKSB7CkBAIC01NjUsNiArNjIzLDExIEBACiAgKiBAZm10OiBUaGUgZm9ybWF0IHN0cmluZyB0byB1c2UKICAqIEBhcmdzOiBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3RyaW5nCiAgKgorICogVGhpcyBmdW5jdGlvbiBmb2xsb3dzIEM5OSB2c25wcmludGYsIGJ1dCBoYXMgc29tZSBleHRlbnNpb25zOgorICogJXBTIG91dHB1dCB0aGUgbmFtZSBvZiBhIHRleHQgc3ltYm9sCisgKiAlcEYgb3V0cHV0IHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gcG9pbnRlcgorICogJXBSIG91dHB1dCB0aGUgYWRkcmVzcyByYW5nZSBpbiBhIHN0cnVjdCByZXNvdXJjZQorICoKICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkCiAgKiBiZSBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiBpbnB1dCwgZXhjbHVkaW5nIHRoZSB0cmFpbGluZwogICogJ1wwJywgYXMgcGVyIElTTyBDOTkuIElmIHlvdSB3YW50IHRvIGhhdmUgdGhlIGV4YWN0CkBAIC03OTAsNyArODUzLDYgQEAKIAkvKiB0aGUgdHJhaWxpbmcgbnVsbCBieXRlIGRvZXNuJ3QgY291bnQgdG93YXJkcyB0aGUgdG90YWwgKi8KIAlyZXR1cm4gc3RyLWJ1ZjsKIH0KLQogRVhQT1JUX1NZTUJPTCh2c25wcmludGYpOwogCiAvKioKQEAgLTgwNiw2ICs4NjgsOCBAQAogICoKICAqIENhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3UgYXJlIGFscmVhZHkgZGVhbGluZyB3aXRoIGEgdmFfbGlzdC4KICAqIFlvdSBwcm9iYWJseSB3YW50IHNjbnByaW50ZigpIGluc3RlYWQuCisgKgorICogU2VlIHRoZSB2c25wcmludGYoKSBkb2N1bWVudGF0aW9uIGZvciBmb3JtYXQgc3RyaW5nIGV4dGVuc2lvbnMgb3ZlciBDOTkuCiAgKi8KIGludCB2c2NucHJpbnRmKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewpAQCAtODE0LDcgKzg3OCw2IEBACiAJaT12c25wcmludGYoYnVmLHNpemUsZm10LGFyZ3MpOwogCXJldHVybiAoaSA+PSBzaXplKSA/IChzaXplIC0gMSkgOiBpOwogfQotCiBFWFBPUlRfU1lNQk9MKHZzY25wcmludGYpOwogCiAvKioKQEAgLTgyOCw2ICs4OTEsOCBAQAogICogZ2VuZXJhdGVkIGZvciB0aGUgZ2l2ZW4gaW5wdXQsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgbnVsbCwKICAqIGFzIHBlciBJU08gQzk5LiAgSWYgdGhlIHJldHVybiBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KICAqIEBzaXplLCB0aGUgcmVzdWx0aW5nIHN0cmluZyBpcyB0cnVuY2F0ZWQuCisgKgorICogU2VlIHRoZSB2c25wcmludGYoKSBkb2N1bWVudGF0aW9uIGZvciBmb3JtYXQgc3RyaW5nIGV4dGVuc2lvbnMgb3ZlciBDOTkuCiAgKi8KIGludCBzbnByaW50ZihjaGFyICogYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CkBAIC04MzksNyArOTA0LDYgQEAKIAl2YV9lbmQoYXJncyk7CiAJcmV0dXJuIGk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc25wcmludGYpOwogCiAvKioKQEAgLTg3NywxMiArOTQxLDEzIEBACiAgKgogICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBhcmUgYWxyZWFkeSBkZWFsaW5nIHdpdGggYSB2YV9saXN0LgogICogWW91IHByb2JhYmx5IHdhbnQgc3ByaW50ZigpIGluc3RlYWQuCisgKgorICogU2VlIHRoZSB2c25wcmludGYoKSBkb2N1bWVudGF0aW9uIGZvciBmb3JtYXQgc3RyaW5nIGV4dGVuc2lvbnMgb3ZlciBDOTkuCiAgKi8KIGludCB2c3ByaW50ZihjaGFyICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewogCXJldHVybiB2c25wcmludGYoYnVmLCBJTlRfTUFYLCBmbXQsIGFyZ3MpOwogfQotCiBFWFBPUlRfU1lNQk9MKHZzcHJpbnRmKTsKIAogLyoqCkBAIC04OTQsNiArOTU5LDggQEAKICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuCiAgKiBpbnRvIEBidWYuIFVzZSBzbnByaW50ZigpIG9yIHNjbnByaW50ZigpIGluIG9yZGVyIHRvIGF2b2lkCiAgKiBidWZmZXIgb3ZlcmZsb3dzLgorICoKKyAqIFNlZSB0aGUgdnNucHJpbnRmKCkgZG9jdW1lbnRhdGlvbiBmb3IgZm9ybWF0IHN0cmluZyBleHRlbnNpb25zIG92ZXIgQzk5LgogICovCiBpbnQgc3ByaW50ZihjaGFyICogYnVmLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKQEAgLTkwNSw3ICs5NzIsNiBAQAogCXZhX2VuZChhcmdzKTsKIAlyZXR1cm4gaTsKIH0KLQogRVhQT1JUX1NZTUJPTChzcHJpbnRmKTsKIAogLyoqCkBAIC0xMTM0LDcgKzEyMDAsNiBAQAogCiAJcmV0dXJuIG51bTsKIH0KLQogRVhQT1JUX1NZTUJPTCh2c3NjYW5mKTsKIAogLyoqCkBAIC0xMTUzLDUgKzEyMTgsNCBAQAogCXZhX2VuZChhcmdzKTsKIAlyZXR1cm4gaTsKIH0KLQogRVhQT1JUX1NZTUJPTChzc2NhbmYpOwpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggMGJkOWMyZC4uNWI1NzkwZiAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC0xMDEsNyArMTAxLDcgQEAKICMgd2l0aCBnY2MgMy40IGFuZCBsYXRlci4KICMKIGNvbmZpZyBTUEFSU0VNRU1fU1RBVElDCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAogIwogIyBBcmNoaXRlY3R1cmUgcGxhdGZvcm1zIHdoaWNoIHJlcXVpcmUgYSB0d28gbGV2ZWwgbWVtX3NlY3Rpb24gaW4gU1BBUlNFTUVNCkBAIC0xMTMsNyArMTEzLDcgQEAKIAlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiAhU1BBUlNFTUVNX1NUQVRJQwogCiBjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAogY29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQCiAJYm9vbCAiU3BhcnNlIE1lbW9yeSB2aXJ0dWFsIG1lbW1hcCIKQEAgLTE4Nyw2ICsxODcsOSBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGFsbG93cyBtZW1vcnkgYW5kIElPIHJlc291cmNlcyB0byBiZSA2NCBiaXQuCiAKK2NvbmZpZyBQSFlTX0FERFJfVF82NEJJVAorCWRlZl9ib29sIDY0QklUIHx8IEFSQ0hfUEhZU19BRERSX1RfNjRCSVQKKwogY29uZmlnIFpPTkVfRE1BX0ZMQUcKIAlpbnQKIAlkZWZhdWx0ICIwIiBpZiAhWk9ORV9ETUEKQEAgLTIwNiw1ICsyMDksMTYgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiAhQVJDSF9OT19WSVJUX1RPX0JVUwogCitjb25maWcgVU5FVklDVEFCTEVfTFJVCisJYm9vbCAiQWRkIExSVSBsaXN0IHRvIHRyYWNrIG5vbi1ldmljdGFibGUgcGFnZXMiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBNTVUKKwloZWxwCisJICBLZWVwcyB1bmV2aWN0YWJsZSBwYWdlcyBvZmYgb2YgdGhlIGFjdGl2ZSBhbmQgaW5hY3RpdmUgcGFnZW91dAorCSAgbGlzdHMsIHNvIGtzd2FwZCB3aWxsIG5vdCB3YXN0ZSBDUFUgdGltZSBvciBoYXZlIGl0cyBiYWxhbmNpbmcKKwkgIGFsZ29yaXRobXMgdGhyb3duIG9mZiBieSBzY2FubmluZyB0aGVzZSBwYWdlcy4gIFNlbGVjdGluZyB0aGlzCisJICB3aWxsIHVzZSBvbmUgcGFnZSBmbGFnIGFuZCBpbmNyZWFzZSB0aGUgY29kZSBzaXplIGEgbGl0dGxlLAorCSAgc2F5IFkgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKwogY29uZmlnIE1NVV9OT1RJRklFUgogCWJvb2wKZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGUKaW5kZXggZGE0Y2NmMC4uYzA2YjQ1YSAxMDA2NDQKLS0tIGEvbW0vTWFrZWZpbGUKKysrIGIvbW0vTWFrZWZpbGUKQEAgLTMzLDUgKzMzLDQgQEAKIG9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUubwogb2JqLSQoQ09ORklHX1NNUCkgKz0gYWxsb2NwZXJjcHUubwogb2JqLSQoQ09ORklHX1FVSUNLTElTVCkgKz0gcXVpY2tsaXN0Lm8KLW9iai0kKENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSKSArPSBtZW1jb250cm9sLm8KLQorb2JqLSQoQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIpICs9IG1lbWNvbnRyb2wubyBwYWdlX2Nncm91cC5vCmRpZmYgLS1naXQgYS9tbS9ib290bWVtLmMgYi9tbS9ib290bWVtLmMKaW5kZXggYWQ4ZWVjNi4uYWM1YTg5MSAxMDA2NDQKLS0tIGEvbW0vYm9vdG1lbS5jCisrKyBiL21tL2Jvb3RtZW0uYwpAQCAtNDgsNyArNDgsNyBAQAogCWlmICh1bmxpa2VseShib290bWVtX2RlYnVnKSkJCQlcCiAJCXByaW50ayhLRVJOX0lORk8JCQlcCiAJCQkiYm9vdG1lbTo6JXMgIiBmbXQsCQlcCi0JCQlfX0ZVTkNUSU9OX18sICMjIGFyZ3MpOwkJXAorCQkJX19mdW5jX18sICMjIGFyZ3MpOwkJXAogfSkKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGJvb3RtYXBfYnl0ZXModW5zaWduZWQgbG9uZyBwYWdlcykKZGlmZiAtLWdpdCBhL21tL2ZhZHZpc2UuYyBiL21tL2ZhZHZpc2UuYwppbmRleCAzNDNjZmRmLi5hMWRhOTY5IDEwMDY0NAotLS0gYS9tbS9mYWR2aXNlLmMKKysrIGIvbW0vZmFkdmlzZS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiwgTGludXMgVG9ydmFsZHMKICAqCi0gKiAxMUphbjIwMDMJYWtwbUBkaWdlby5jb20KKyAqIDExSmFuMjAwMwlBbmRyZXcgTW9ydG9uCiAgKgkJSW5pdGlhbCB2ZXJzaW9uLgogICovCiAKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA4NzZiYzU5Li5hYjg1NTM2IDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1c2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPiAvKiBmb3IgQlVHX09OKCFpbl9hdG9taWMoKSkgb25seSAqLwogI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9tbV9pbmxpbmUuaD4gLyogZm9yIHBhZ2VfaXNfZmlsZV9jYWNoZSgpICovCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogLyoKQEAgLTExNSwxMiArMTE2LDEyIEBACiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlLT5tYXBwaW5nOwogCi0JbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlKHBhZ2UpOwogCXJhZGl4X3RyZWVfZGVsZXRlKCZtYXBwaW5nLT5wYWdlX3RyZWUsIHBhZ2UtPmluZGV4KTsKIAlwYWdlLT5tYXBwaW5nID0gTlVMTDsKIAltYXBwaW5nLT5ucnBhZ2VzLS07CiAJX19kZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfUEFHRVMpOwogCUJVR19PTihwYWdlX21hcHBlZChwYWdlKSk7CisJbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlKHBhZ2UpOwogCiAJLyoKIAkgKiBTb21lIGZpbGVzeXN0ZW1zIHNlZW0gdG8gcmUtZGlydHkgdGhlIHBhZ2UgZXZlbiBhZnRlcgpAQCAtNDkyLDkgKzQ5MywyNCBAQAogaW50IGFkZF90b19wYWdlX2NhY2hlX2xydShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJcGdvZmZfdCBvZmZzZXQsIGdmcF90IGdmcF9tYXNrKQogewotCWludCByZXQgPSBhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBtYXBwaW5nLCBvZmZzZXQsIGdmcF9tYXNrKTsKLQlpZiAocmV0ID09IDApCi0JCWxydV9jYWNoZV9hZGQocGFnZSk7CisJaW50IHJldDsKKworCS8qCisJICogU3BsaWNlX3JlYWQgYW5kIHJlYWRhaGVhZCBhZGQgc2htZW0vdG1wZnMgcGFnZXMgaW50byB0aGUgcGFnZSBjYWNoZQorCSAqIGJlZm9yZSBzaG1lbV9yZWFkcGFnZSBoYXMgYSBjaGFuY2UgdG8gbWFyayB0aGVtIGFzIFN3YXBCYWNrZWQ6IHRoZXkKKwkgKiBuZWVkIHRvIGdvIG9uIHRoZSBhY3RpdmVfYW5vbiBscnUgYmVsb3csIGFuZCBtZW1fY2dyb3VwX2NhY2hlX2NoYXJnZQorCSAqIChjYWxsZWQgaW4gYWRkX3RvX3BhZ2VfY2FjaGUpIG5lZWRzIHRvIGtub3cgd2hlcmUgdGhleSdyZSBnb2luZyB0b28uCisJICovCisJaWYgKG1hcHBpbmdfY2FwX3N3YXBfYmFja2VkKG1hcHBpbmcpKQorCQlTZXRQYWdlU3dhcEJhY2tlZChwYWdlKTsKKworCXJldCA9IGFkZF90b19wYWdlX2NhY2hlKHBhZ2UsIG1hcHBpbmcsIG9mZnNldCwgZ2ZwX21hc2spOworCWlmIChyZXQgPT0gMCkgeworCQlpZiAocGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKQorCQkJbHJ1X2NhY2hlX2FkZF9maWxlKHBhZ2UpOworCQllbHNlCisJCQlscnVfY2FjaGVfYWRkX2FjdGl2ZV9hbm9uKHBhZ2UpOworCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC01NTcsMTcgKzU3MywxNCBAQAogICogbWVjaGFuYW5pc20gYmV0d2VlbiBQYWdlTG9ja2VkIHBhZ2VzIGFuZCBQYWdlV3JpdGViYWNrIHBhZ2VzIGlzIHNoYXJlZC4KICAqIEJ1dCB0aGF0J3MgT0sgLSBzbGVlcGVycyBpbiB3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKCkganVzdCBnbyBiYWNrIHRvIHNsZWVwLgogICoKLSAqIFRoZSBmaXJzdCBtYiBpcyBuZWNlc3NhcnkgdG8gc2FmZWx5IGNsb3NlIHRoZSBjcml0aWNhbCBzZWN0aW9uIG9wZW5lZCBieSB0aGUKLSAqIHRlc3RfYW5kX3NldF9iaXQoKSB0byBsb2NrIHRoZSBwYWdlOyB0aGUgc2Vjb25kIG1iIGlzIG5lY2Vzc2FyeSB0byBlbmZvcmNlCi0gKiBvcmRlcmluZyBiZXR3ZWVuIHRoZSBjbGVhcl9iaXQgYW5kIHRoZSByZWFkIG9mIHRoZSB3YWl0cXVldWUgKHRvIGF2b2lkIFNNUAotICogcmFjZXMgd2l0aCBhIHBhcmFsbGVsIHdhaXRfb25fcGFnZV9sb2NrZWQoKSkuCisgKiBUaGUgbWIgaXMgbmVjZXNzYXJ5IHRvIGVuZm9yY2Ugb3JkZXJpbmcgYmV0d2VlbiB0aGUgY2xlYXJfYml0IGFuZCB0aGUgcmVhZAorICogb2YgdGhlIHdhaXRxdWV1ZSAodG8gYXZvaWQgU01QIHJhY2VzIHdpdGggYSBwYXJhbGxlbCB3YWl0X29uX3BhZ2VfbG9ja2VkKCkpLgogICovCiB2b2lkIHVubG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwotCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFBHX2xvY2tlZCwgJnBhZ2UtPmZsYWdzKSkKLQkJQlVHKCk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsgCisJVk1fQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKwljbGVhcl9iaXRfdW5sb2NrKFBHX2xvY2tlZCwgJnBhZ2UtPmZsYWdzKTsKKwlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwogCXdha2VfdXBfcGFnZShwYWdlLCBQR19sb2NrZWQpOwogfQogRVhQT1JUX1NZTUJPTCh1bmxvY2tfcGFnZSk7CkBAIC0xMTAwLDggKzExMTMsOSBAQAogCiBwYWdlX25vdF91cF90b19kYXRlOgogCQkvKiBHZXQgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgcGFnZSAuLi4gKi8KLQkJaWYgKGxvY2tfcGFnZV9raWxsYWJsZShwYWdlKSkKLQkJCWdvdG8gcmVhZHBhZ2VfZWlvOworCQllcnJvciA9IGxvY2tfcGFnZV9raWxsYWJsZShwYWdlKTsKKwkJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJCWdvdG8gcmVhZHBhZ2VfZXJyb3I7CiAKIHBhZ2Vfbm90X3VwX3RvX2RhdGVfbG9ja2VkOgogCQkvKiBEaWQgaXQgZ2V0IHRydW5jYXRlZCBiZWZvcmUgd2UgZ290IHRoZSBsb2NrPyAqLwpAQCAtMTEzMCw4ICsxMTQ0LDkgQEAKIAkJfQogCiAJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7Ci0JCQlpZiAobG9ja19wYWdlX2tpbGxhYmxlKHBhZ2UpKQotCQkJCWdvdG8gcmVhZHBhZ2VfZWlvOworCQkJZXJyb3IgPSBsb2NrX3BhZ2Vfa2lsbGFibGUocGFnZSk7CisJCQlpZiAodW5saWtlbHkoZXJyb3IpKQorCQkJCWdvdG8gcmVhZHBhZ2VfZXJyb3I7CiAJCQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgewogCQkJCWlmIChwYWdlLT5tYXBwaW5nID09IE5VTEwpIHsKIAkJCQkJLyoKQEAgLTExNDMsMTUgKzExNTgsMTQgQEAKIAkJCQl9CiAJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCQkJc2hyaW5rX3JlYWRhaGVhZF9zaXplX2VpbyhmaWxwLCByYSk7Ci0JCQkJZ290byByZWFkcGFnZV9laW87CisJCQkJZXJyb3IgPSAtRUlPOworCQkJCWdvdG8gcmVhZHBhZ2VfZXJyb3I7CiAJCQl9CiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJfQogCiAJCWdvdG8gcGFnZV9vazsKIAotcmVhZHBhZ2VfZWlvOgotCQllcnJvciA9IC1FSU87CiByZWFkcGFnZV9lcnJvcjoKIAkJLyogVUhIVUghIEEgc3luY2hyb25vdXMgcmVhZCBlcnJvciBvY2N1cnJlZC4gUmVwb3J0IGl0ICovCiAJCWRlc2MtPmVycm9yID0gZXJyb3I7CkBAIC0xMTg2LDggKzEyMDAsNyBAQAogCXJhLT5wcmV2X3BvcyB8PSBwcmV2X29mZnNldDsKIAogCSpwcG9zID0gKChsb2ZmX3QpaW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCkgKyBvZmZzZXQ7Ci0JaWYgKGZpbHApCi0JCWZpbGVfYWNjZXNzZWQoZmlscCk7CisJZmlsZV9hY2Nlc3NlZChmaWxwKTsKIH0KIAogaW50IGZpbGVfcmVhZF9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywgc3RydWN0IHBhZ2UgKnBhZ2UsCmRpZmYgLS1naXQgYS9tbS9mcmVtYXAuYyBiL21tL2ZyZW1hcC5jCmluZGV4IDc4ODE2MzguLjdkMTJjYTcgMTAwNjQ0Ci0tLSBhL21tL2ZyZW1hcC5jCisrKyBiL21tL2ZyZW1hcC5jCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAorI2luY2x1ZGUgImludGVybmFsLmgiCisKIHN0YXRpYyB2b2lkIHphcF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKIHsKQEAgLTIxNSwxNSArMjE3LDMxIEBACiAJCXNwaW5fdW5sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CiAJfQogCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJLyoKKwkJICogZHJvcCBQR19NbG9ja2VkIGZsYWcgZm9yIG92ZXItbWFwcGVkIHJhbmdlCisJCSAqLworCQl1bnNpZ25lZCBpbnQgc2F2ZWRfZmxhZ3MgPSB2bWEtPnZtX2ZsYWdzOworCQltdW5sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBzdGFydCArIHNpemUpOworCQl2bWEtPnZtX2ZsYWdzID0gc2F2ZWRfZmxhZ3M7CisJfQorCiAJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQobW0sIHN0YXJ0LCBzdGFydCArIHNpemUpOwogCWVyciA9IHBvcHVsYXRlX3JhbmdlKG1tLCB2bWEsIHN0YXJ0LCBzaXplLCBwZ29mZik7CiAJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKG1tLCBzdGFydCwgc3RhcnQgKyBzaXplKTsKIAlpZiAoIWVyciAmJiAhKGZsYWdzICYgTUFQX05PTkJMT0NLKSkgewotCQlpZiAodW5saWtlbHkoaGFzX3dyaXRlX2xvY2spKSB7Ci0JCQlkb3duZ3JhZGVfd3JpdGUoJm1tLT5tbWFwX3NlbSk7Ci0JCQloYXNfd3JpdGVfbG9jayA9IDA7CisJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCQkvKgorCQkJICogbWlnaHQgYmUgbWFwcGluZyBwcmV2aW91c2x5IHVubWFwcGVkIHJhbmdlIG9mIGZpbGUKKwkJCSAqLworCQkJbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7CisJCX0gZWxzZSB7CisJCQlpZiAodW5saWtlbHkoaGFzX3dyaXRlX2xvY2spKSB7CisJCQkJZG93bmdyYWRlX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCQkJCWhhc193cml0ZV9sb2NrID0gMDsKKwkJCX0KKwkJCW1ha2VfcGFnZXNfcHJlc2VudChzdGFydCwgc3RhcnQrc2l6ZSk7CiAJCX0KLQkJbWFrZV9wYWdlc19wcmVzZW50KHN0YXJ0LCBzdGFydCtzaXplKTsKIAl9CiAKIAkvKgpAQCAtMjQwLDQgKzI1OCwzIEBACiAKIAlyZXR1cm4gZXJyOwogfQotCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNjdhNzExOS4uY2U4Y2JiMiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCByZWdpb25zOwogfTsKIAotc3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcF9hbGxvYyh2b2lkKQorc3RhdGljIHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXBfYWxsb2Modm9pZCkKIHsKIAlzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwID0ga21hbGxvYyhzaXplb2YoKnJlc3ZfbWFwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZXN2X21hcCkKQEAgLTI3NCw3ICsyNzQsNyBAQAogCXJldHVybiByZXN2X21hcDsKIH0KIAotdm9pZCByZXN2X21hcF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCitzdGF0aWMgdm9pZCByZXN2X21hcF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCiB7CiAJc3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCByZXN2X21hcCwgcmVmcyk7CiAKQEAgLTI4OSw3ICsyODksNyBAQAogCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKQogCQlyZXR1cm4gKHN0cnVjdCByZXN2X21hcCAqKShnZXRfdm1hX3ByaXZhdGVfZGF0YSh2bWEpICYKIAkJCQkJCQl+SFBBR0VfUkVTVl9NQVNLKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgc2V0X3ZtYV9yZXN2X21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHJlc3ZfbWFwICptYXApCkBAIC0xNDU5LDExICsxNDU5LDExIEBACiB7CiAJc3RydWN0IGhzdGF0ZSAqaCA9ICZkZWZhdWx0X2hzdGF0ZTsKIAlyZXR1cm4gc3ByaW50ZihidWYsCi0JCQkiSHVnZVBhZ2VzX1RvdGFsOiAlNWx1XG4iCi0JCQkiSHVnZVBhZ2VzX0ZyZWU6ICAlNWx1XG4iCi0JCQkiSHVnZVBhZ2VzX1JzdmQ6ICAlNWx1XG4iCi0JCQkiSHVnZVBhZ2VzX1N1cnA6ICAlNWx1XG4iCi0JCQkiSHVnZXBhZ2VzaXplOiAgICAlNWx1IGtCXG4iLAorCQkJIkh1Z2VQYWdlc19Ub3RhbDogICAlNWx1XG4iCisJCQkiSHVnZVBhZ2VzX0ZyZWU6ICAgICU1bHVcbiIKKwkJCSJIdWdlUGFnZXNfUnN2ZDogICAgJTVsdVxuIgorCQkJIkh1Z2VQYWdlc19TdXJwOiAgICAlNWx1XG4iCisJCQkiSHVnZXBhZ2VzaXplOiAgICU4bHUga0JcbiIsCiAJCQloLT5ucl9odWdlX3BhZ2VzLAogCQkJaC0+ZnJlZV9odWdlX3BhZ2VzLAogCQkJaC0+cmVzdl9odWdlX3BhZ2VzLApAQCAtMTc0NywxMCArMTc0Nyw4IEBACiAgKiBmcm9tIG90aGVyIFZNQXMgYW5kIGxldCB0aGUgY2hpbGRyZW4gYmUgU0lHS0lMTGVkIGlmIHRoZXkgYXJlIGZhdWx0aW5nIHRoZQogICogc2FtZSByZWdpb24uCiAgKi8KLWludCB1bm1hcF9yZWZfcHJpdmF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJCXN0cnVjdCBwYWdlICpwYWdlLAotCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW50IHVubWFwX3JlZl9wcml2YXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqaXRlcl92bWE7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CkBAIC0yMDA4LDcgKzIwMDYsNyBAQAogCWVudHJ5ID0gaHVnZV9wdGVwX2dldChwdGVwKTsKIAlpZiAoaHVnZV9wdGVfbm9uZShlbnRyeSkpIHsKIAkJcmV0ID0gaHVnZXRsYl9ub19wYWdlKG1tLCB2bWEsIGFkZHJlc3MsIHB0ZXAsIHdyaXRlX2FjY2Vzcyk7Ci0JCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXRfbXV0ZXg7CiAJfQogCiAJcmV0ID0gMDsKQEAgLTIwMjQsNyArMjAyMiw3IEBACiAJaWYgKHdyaXRlX2FjY2VzcyAmJiAhcHRlX3dyaXRlKGVudHJ5KSkgewogCQlpZiAodm1hX25lZWRzX3Jlc2VydmF0aW9uKGgsIHZtYSwgYWRkcmVzcykgPCAwKSB7CiAJCQlyZXQgPSBWTV9GQVVMVF9PT007Ci0JCQlnb3RvIG91dF91bmxvY2s7CisJCQlnb3RvIG91dF9tdXRleDsKIAkJfQogCiAJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKQpAQCAtMjAzNCwxMCArMjAzMiwyMyBAQAogCiAJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAkvKiBDaGVjayBmb3IgYSByYWNpbmcgdXBkYXRlIGJlZm9yZSBjYWxsaW5nIGh1Z2V0bGJfY293ICovCi0JaWYgKGxpa2VseShwdGVfc2FtZShlbnRyeSwgaHVnZV9wdGVwX2dldChwdGVwKSkpKQotCQlpZiAod3JpdGVfYWNjZXNzICYmICFwdGVfd3JpdGUoZW50cnkpKQorCWlmICh1bmxpa2VseSghcHRlX3NhbWUoZW50cnksIGh1Z2VfcHRlcF9nZXQocHRlcCkpKSkKKwkJZ290byBvdXRfcGFnZV90YWJsZV9sb2NrOworCisKKwlpZiAod3JpdGVfYWNjZXNzKSB7CisJCWlmICghcHRlX3dyaXRlKGVudHJ5KSkgewogCQkJcmV0ID0gaHVnZXRsYl9jb3cobW0sIHZtYSwgYWRkcmVzcywgcHRlcCwgZW50cnksCiAJCQkJCQkJcGFnZWNhY2hlX3BhZ2UpOworCQkJZ290byBvdXRfcGFnZV90YWJsZV9sb2NrOworCQl9CisJCWVudHJ5ID0gcHRlX21rZGlydHkoZW50cnkpOworCX0KKwllbnRyeSA9IHB0ZV9ta3lvdW5nKGVudHJ5KTsKKwlpZiAoaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCBhZGRyZXNzLCBwdGVwLCBlbnRyeSwgd3JpdGVfYWNjZXNzKSkKKwkJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKKworb3V0X3BhZ2VfdGFibGVfbG9jazoKIAlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAKIAlpZiAocGFnZWNhY2hlX3BhZ2UpIHsKQEAgLTIwNDUsNyArMjA1Niw3IEBACiAJCXB1dF9wYWdlKHBhZ2VjYWNoZV9wYWdlKTsKIAl9CiAKLW91dF91bmxvY2s6CitvdXRfbXV0ZXg6CiAJbXV0ZXhfdW5sb2NrKCZodWdldGxiX2luc3RhbnRpYXRpb25fbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKQEAgLTIwNjAsNiArMjA3MSwxNCBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW50IGh1Z2VfemVyb3BhZ2Vfb2socHRlX3QgKnB0ZXAsIGludCB3cml0ZSwgaW50IHNoYXJlZCkKK3sKKwlpZiAoIXB0ZXAgfHwgd3JpdGUgfHwgc2hhcmVkKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBodWdlX3B0ZV9ub25lKGh1Z2VfcHRlcF9nZXQocHRlcCkpOworfQorCiBpbnQgZm9sbG93X2h1Z2V0bGJfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzLAogCQkJdW5zaWduZWQgbG9uZyAqcG9zaXRpb24sIGludCAqbGVuZ3RoLCBpbnQgaSwKQEAgLTIwNjksNiArMjA4OCw4IEBACiAJdW5zaWduZWQgbG9uZyB2YWRkciA9ICpwb3NpdGlvbjsKIAlpbnQgcmVtYWluZGVyID0gKmxlbmd0aDsKIAlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpOworCWludCB6ZXJvcGFnZV9vayA9IDA7CisJaW50IHNoYXJlZCA9IHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQ7CiAKIAlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCXdoaWxlICh2YWRkciA8IHZtYS0+dm1fZW5kICYmIHJlbWFpbmRlcikgewpAQCAtMjA4MSw4ICsyMTAyLDExIEBACiAJCSAqIGZpcnN0LCBmb3IgdGhlIHBhZ2UgaW5kZXhpbmcgYmVsb3cgdG8gd29yay4KIAkJICovCiAJCXB0ZSA9IGh1Z2VfcHRlX29mZnNldChtbSwgdmFkZHIgJiBodWdlX3BhZ2VfbWFzayhoKSk7CisJCWlmIChodWdlX3plcm9wYWdlX29rKHB0ZSwgd3JpdGUsIHNoYXJlZCkpCisJCQl6ZXJvcGFnZV9vayA9IDE7CiAKLQkJaWYgKCFwdGUgfHwgaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KHB0ZSkpIHx8CisJCWlmICghcHRlIHx8CisJCSAgICAoaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KHB0ZSkpICYmICF6ZXJvcGFnZV9vaykgfHwKIAkJICAgICh3cml0ZSAmJiAhcHRlX3dyaXRlKGh1Z2VfcHRlcF9nZXQocHRlKSkpKSB7CiAJCQlpbnQgcmV0OwogCkBAIC0yMTAyLDggKzIxMjYsMTEgQEAKIAkJcGFnZSA9IHB0ZV9wYWdlKGh1Z2VfcHRlcF9nZXQocHRlKSk7CiBzYW1lX3BhZ2U6CiAJCWlmIChwYWdlcykgewotCQkJZ2V0X3BhZ2UocGFnZSk7Ci0JCQlwYWdlc1tpXSA9IHBhZ2UgKyBwZm5fb2Zmc2V0OworCQkJaWYgKHplcm9wYWdlX29rKQorCQkJCXBhZ2VzW2ldID0gWkVST19QQUdFKDApOworCQkJZWxzZQorCQkJCXBhZ2VzW2ldID0gcGFnZSArIHBmbl9vZmZzZXQ7CisJCQlnZXRfcGFnZShwYWdlc1tpXSk7CiAJCX0KIAogCQlpZiAodm1hcykKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDFmNDNmNzQuLmU0ZTcyOGIgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKKysrIGIvbW0vaW50ZXJuYWwuaApAQCAtMzksNiArMzksMTUgQEAKIAlhdG9taWNfZGVjKCZwYWdlLT5fY291bnQpOwogfQogCisvKgorICogaW4gbW0vdm1zY2FuLmM6CisgKi8KK2V4dGVybiBpbnQgaXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBwdXRiYWNrX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKKworLyoKKyAqIGluIG1tL3BhZ2VfYWxsb2MuYworICovCiBleHRlcm4gdm9pZCBfX2ZyZWVfcGFnZXNfYm9vdG1lbShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTsKIAogLyoKQEAgLTUyLDYgKzYxLDEyMCBAQAogCXJldHVybiBwYWdlX3ByaXZhdGUocGFnZSk7CiB9CiAKK2V4dGVybiBsb25nIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK2V4dGVybiB2b2lkIG11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworc3RhdGljIGlubGluZSB2b2lkIG11bmxvY2tfdm1hX3BhZ2VzX2FsbChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwltdW5sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKTsKK30KKworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKy8qCisgKiB1bmV2aWN0YWJsZV9taWdyYXRlX3BhZ2UoKSBjYWxsZWQgb25seSBmcm9tIG1pZ3JhdGVfcGFnZV9jb3B5KCkgdG8KKyAqIG1pZ3JhdGUgdW5ldmljdGFibGUgZmxhZyB0byBuZXcgcGFnZS4KKyAqIE5vdGUgdGhhdCB0aGUgb2xkIHBhZ2UgaGFzIGJlZW4gaXNvbGF0ZWQgZnJvbSB0aGUgTFJVIGxpc3RzIGF0IHRoaXMKKyAqIHBvaW50IHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgTFJVIHN0YXRpc3RpY3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmV2aWN0YWJsZV9taWdyYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKm5ldywgc3RydWN0IHBhZ2UgKm9sZCkKK3sKKwlpZiAoVGVzdENsZWFyUGFnZVVuZXZpY3RhYmxlKG9sZCkpCisJCVNldFBhZ2VVbmV2aWN0YWJsZShuZXcpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmV2aWN0YWJsZV9taWdyYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKm5ldywgc3RydWN0IHBhZ2UgKm9sZCkKK3sKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorLyoKKyAqIENhbGxlZCBvbmx5IGluIGZhdWx0IHBhdGggdmlhIHBhZ2VfZXZpY3RhYmxlKCkgZm9yIGEgbmV3IHBhZ2UKKyAqIHRvIGRldGVybWluZSBpZiBpdCdzIGJlaW5nIG1hcHBlZCBpbnRvIGEgTE9DS0VEIHZtYS4KKyAqIElmIHNvLCBtYXJrIHBhZ2UgYXMgbWxvY2tlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfbWxvY2tlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpKTsKKworCWlmIChsaWtlbHkoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fTE9DS0VEIHwgVk1fU1BFQ0lBTCkpICE9IFZNX0xPQ0tFRCkpCisJCXJldHVybiAwOworCisJaWYgKCFUZXN0U2V0UGFnZU1sb2NrZWQocGFnZSkpIHsKKwkJaW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9NTE9DSyk7CisJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHTUxPQ0tFRCk7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogbXVzdCBiZSBjYWxsZWQgd2l0aCB2bWEncyBtbWFwX3NlbSBoZWxkIGZvciByZWFkLCBhbmQgcGFnZSBsb2NrZWQuCisgKi8KK2V4dGVybiB2b2lkIG1sb2NrX3ZtYV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKKworLyoKKyAqIENsZWFyIHRoZSBwYWdlJ3MgUGFnZU1sb2NrZWQoKS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpbiBhIHNpdHVhdGlvbiB3aGVyZQorICogd2Ugd2FudCB0byB1bmNvbmRpdGlvbmFsbHkgcmVtb3ZlIGEgcGFnZSBmcm9tIHRoZSBwYWdlY2FjaGUgLS0gZS5nLiwKKyAqIG9uIHRydW5jYXRpb24gb3IgZnJlZWluZy4KKyAqCisgKiBJdCBpcyBsZWdhbCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGFueSBwYWdlLCBtbG9ja2VkIG9yIG5vdC4KKyAqIElmIGNhbGxlZCBmb3IgYSBwYWdlIHRoYXQgaXMgc3RpbGwgbWFwcGVkIGJ5IG1sb2NrZWQgdm1hcywgYWxsIHdlIGRvCisgKiBpcyByZXZlcnQgdG8gbGF6eSBMUlUgYmVoYXZpb3VyIC0tIHNlbWFudGljcyBhcmUgbm90IGJyb2tlbi4KKyAqLworZXh0ZXJuIHZvaWQgX19jbGVhcl9wYWdlX21sb2NrKHN0cnVjdCBwYWdlICpwYWdlKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wYWdlX21sb2NrKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmICh1bmxpa2VseShUZXN0Q2xlYXJQYWdlTWxvY2tlZChwYWdlKSkpCisJCV9fY2xlYXJfcGFnZV9tbG9jayhwYWdlKTsKK30KKworLyoKKyAqIG1sb2NrX21pZ3JhdGVfcGFnZSAtIGNhbGxlZCBvbmx5IGZyb20gbWlncmF0ZV9wYWdlX2NvcHkoKSB0bworICogbWlncmF0ZSB0aGUgTWxvY2tlZCBwYWdlIGZsYWc7IHVwZGF0ZSBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbWxvY2tfbWlncmF0ZV9wYWdlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoVGVzdENsZWFyUGFnZU1sb2NrZWQocGFnZSkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCV9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9NTE9DSyk7CisJCVNldFBhZ2VNbG9ja2VkKG5ld3BhZ2UpOworCQlfX2luY196b25lX3BhZ2Vfc3RhdGUobmV3cGFnZSwgTlJfTUxPQ0spOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorfQorCisvKgorICogZnJlZV9wYWdlX21sb2NrKCkgLS0gY2xlYW4gdXAgYXR0ZW1wdHMgdG8gZnJlZSBhbmQgbWxvY2tlZCgpIHBhZ2UuCisgKiBQYWdlIHNob3VsZCBub3QgYmUgb24gbHJ1LCBzbyBubyBuZWVkIHRvIGZpeCB0aGF0IHVwLgorICogZnJlZV9wYWdlc19jaGVjaygpIHdpbGwgdmVyaWZ5Li4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3BhZ2VfbWxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKHVubGlrZWx5KFRlc3RDbGVhclBhZ2VNbG9ja2VkKHBhZ2UpKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJX19kZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX01MT0NLKTsKKwkJX19jb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9NTE9DS0ZSRUVEKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KK30KKworI2Vsc2UgLyogQ09ORklHX1VORVZJQ1RBQkxFX0xSVSAqLworc3RhdGljIGlubGluZSBpbnQgaXNfbWxvY2tlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2LCBzdHJ1Y3QgcGFnZSAqcCkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wYWdlX21sb2NrKHN0cnVjdCBwYWdlICpwYWdlKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja192bWFfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgbWxvY2tfbWlncmF0ZV9wYWdlKHN0cnVjdCBwYWdlICpuZXcsIHN0cnVjdCBwYWdlICpvbGQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcGFnZV9tbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkgeyB9CisKKyNlbmRpZiAvKiBDT05GSUdfVU5FVklDVEFCTEVfTFJVICovCisKIC8qCiAgKiBGTEFUTUVNIGFuZCBESVNDT05USUdNRU0gY29uZmlndXJhdGlvbnMgdXNlIGFsbG9jX2Jvb3RtZW1fbm9kZSwKICAqIHNvIGFsbCBmdW5jdGlvbnMgc3RhcnRpbmcgYXQgcGFnaW5nX2luaXQgc2hvdWxkIGJlIG1hcmtlZCBfX2luaXQKQEAgLTEyMCw0ICsyNDMsMTIgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfU1BBUlNFTUVNICovCiAKKyNkZWZpbmUgR1VQX0ZMQUdTX1dSSVRFICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIEdVUF9GTEFHU19GT1JDRSAgICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSBHVVBfRkxBR1NfSUdOT1JFX1ZNQV9QRVJNSVNTSU9OUyAweDQKKworaW50IF9fZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIGludCBmbGFncywKKwkJICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMzY4OTZmMy4uZDRhOTJiNiAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzIsMTEgKzMyLDEyIEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tbV9pbmxpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlX2Nncm91cC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogc3RydWN0IGNncm91cF9zdWJzeXMgbWVtX2Nncm91cF9zdWJzeXMgX19yZWFkX21vc3RseTsKLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGFnZV9jZ3JvdXBfY2FjaGUgX19yZWFkX21vc3RseTsKICNkZWZpbmUgTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVMJNQogCiAvKgpAQCAtNjUsMTEgKzY2LDEwIEBACiAvKgogICogRm9yIGFjY291bnRpbmcgdW5kZXIgaXJxIGRpc2FibGUsIG5vIG5lZWQgZm9yIGluY3JlbWVudCBwcmVlbXB0IGNvdW50LgogICovCi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0ICpzdGF0LAorc3RhdGljIGlubGluZSB2b2lkIF9fbWVtX2Nncm91cF9zdGF0X2FkZF9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwX3N0YXRfY3B1ICpzdGF0LAogCQllbnVtIG1lbV9jZ3JvdXBfc3RhdF9pbmRleCBpZHgsIGludCB2YWwpCiB7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlzdGF0LT5jcHVzdGF0W2NwdV0uY291bnRbaWR4XSArPSB2YWw7CisJc3RhdC0+Y291bnRbaWR4XSArPSB2YWw7CiB9CiAKIHN0YXRpYyBzNjQgbWVtX2Nncm91cF9yZWFkX3N0YXQoc3RydWN0IG1lbV9jZ3JvdXBfc3RhdCAqc3RhdCwKQEAgLTg1LDIyICs4NSwxMyBAQAogLyoKICAqIHBlci16b25lIGluZm9ybWF0aW9uIGluIG1lbW9yeSBjb250cm9sbGVyLgogICovCi0KLWVudW0gbWVtX2Nncm91cF96c3RhdF9pbmRleCB7Ci0JTUVNX0NHUk9VUF9aU1RBVF9BQ1RJVkUsCi0JTUVNX0NHUk9VUF9aU1RBVF9JTkFDVElWRSwKLQotCU5SX01FTV9DR1JPVVBfWlNUQVQsCi19OwotCiBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSB7CiAJLyoKIAkgKiBzcGluX2xvY2sgdG8gcHJvdGVjdCB0aGUgcGVyIGNncm91cCBMUlUKIAkgKi8KIAlzcGlubG9ja190CQlscnVfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZV9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQJaW5hY3RpdmVfbGlzdDsKLQl1bnNpZ25lZCBsb25nIGNvdW50W05SX01FTV9DR1JPVVBfWlNUQVRdOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdHNbTlJfTFJVX0xJU1RTXTsKKwl1bnNpZ25lZCBsb25nCQljb3VudFtOUl9MUlVfTElTVFNdOwogfTsKIC8qIE1hY3JvIGZvciBhY2Nlc3NpbmcgY291bnRlciAqLwogI2RlZmluZSBNRU1fQ0dST1VQX1pTVEFUKG16LCBpZHgpCSgobXopLT5jb3VudFsoaWR4KV0pCkBAIC0xNDQsNjkgKzEzNSw1MiBAQAogfTsKIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCBpbml0X21lbV9jZ3JvdXA7CiAKLS8qCi0gKiBXZSB1c2UgdGhlIGxvd2VyIGJpdCBvZiB0aGUgcGFnZS0+cGFnZV9jZ3JvdXAgcG9pbnRlciBhcyBhIGJpdCBzcGluCi0gKiBsb2NrLiAgV2UgbmVlZCB0byBlbnN1cmUgdGhhdCBwYWdlLT5wYWdlX2Nncm91cCBpcyBhdCBsZWFzdCB0d28KLSAqIGJ5dGUgYWxpZ25lZCAoYmFzZWQgb24gY29tbWVudHMgZnJvbSBOaWNrIFBpZ2dpbikuICBCdXQgc2luY2UKLSAqIGJpdF9zcGluX2xvY2sgZG9lc24ndCBhY3R1YWxseSBzZXQgdGhhdCBsb2NrIGJpdCBpbiBhIG5vbi1kZWJ1ZwotICogdW5pcHJvY2Vzc29yIGtlcm5lbCwgd2Ugc2hvdWxkIGF2b2lkIHNldHRpbmcgaXQgaGVyZSB0b28uCi0gKi8KLSNkZWZpbmUgUEFHRV9DR1JPVVBfTE9DS19CSVQgCTB4MAotI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfREVCVUdfU1BJTkxPQ0spCi0jZGVmaW5lIFBBR0VfQ0dST1VQX0xPQ0sgCSgxIDw8IFBBR0VfQ0dST1VQX0xPQ0tfQklUKQotI2Vsc2UKLSNkZWZpbmUgUEFHRV9DR1JPVVBfTE9DSwkweDAKLSNlbmRpZgotCi0vKgotICogQSBwYWdlX2Nncm91cCBwYWdlIGlzIGFzc29jaWF0ZWQgd2l0aCBldmVyeSBwYWdlIGRlc2NyaXB0b3IuIFRoZQotICogcGFnZV9jZ3JvdXAgaGVscHMgdXMgaWRlbnRpZnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNncm91cAotICovCi1zdHJ1Y3QgcGFnZV9jZ3JvdXAgewotCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwkJLyogcGVyIGNncm91cCBMUlUgbGlzdCAqLwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwOwotCWludCBmbGFnczsKLX07Ci0jZGVmaW5lIFBBR0VfQ0dST1VQX0ZMQUdfQ0FDSEUJKDB4MSkJLyogY2hhcmdlZCBhcyBjYWNoZSAqLwotI2RlZmluZSBQQUdFX0NHUk9VUF9GTEFHX0FDVElWRSAoMHgyKQkvKiBwYWdlIGlzIGFjdGl2ZSBpbiB0aGlzIGNncm91cCAqLwotCi1zdGF0aWMgaW50IHBhZ2VfY2dyb3VwX25pZChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQotewotCXJldHVybiBwYWdlX3RvX25pZChwYy0+cGFnZSk7Ci19Ci0KLXN0YXRpYyBlbnVtIHpvbmVfdHlwZSBwYWdlX2Nncm91cF96aWQoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKLXsKLQlyZXR1cm4gcGFnZV96b25lbnVtKHBjLT5wYWdlKTsKLX0KLQogZW51bSBjaGFyZ2VfdHlwZSB7CiAJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9DQUNIRSA9IDAsCiAJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9NQVBQRUQsCisJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TSE1FTSwJLyogdXNlZCBieSBwYWdlIG1pZ3JhdGlvbiBvZiBzaG1lbSAqLwogCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfRk9SQ0UsCS8qIHVzZWQgYnkgZm9yY2VfZW1wdHkgKi8KKwlOUl9DSEFSR0VfVFlQRSwKK307CisKKy8qIG9ubHkgZm9yIGhlcmUgKGZvciBlYXN5IHJlYWRpbmcuKSAqLworI2RlZmluZSBQQ0dGX0NBQ0hFCSgxVUwgPDwgUENHX0NBQ0hFKQorI2RlZmluZSBQQ0dGX1VTRUQJKDFVTCA8PCBQQ0dfVVNFRCkKKyNkZWZpbmUgUENHRl9BQ1RJVkUJKDFVTCA8PCBQQ0dfQUNUSVZFKQorI2RlZmluZSBQQ0dGX0xPQ0sJKDFVTCA8PCBQQ0dfTE9DSykKKyNkZWZpbmUgUENHRl9GSUxFCSgxVUwgPDwgUENHX0ZJTEUpCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZworcGNnX2RlZmF1bHRfZmxhZ3NbTlJfQ0hBUkdFX1RZUEVdID0geworCVBDR0ZfQ0FDSEUgfCBQQ0dGX0ZJTEUgfCBQQ0dGX1VTRUQgfCBQQ0dGX0xPQ0ssIC8qIEZpbGUgQ2FjaGUgKi8KKwlQQ0dGX0FDVElWRSB8IFBDR0ZfVVNFRCB8IFBDR0ZfTE9DSywgLyogQW5vbiAqLworCVBDR0ZfQUNUSVZFIHwgUENHRl9DQUNIRSB8IFBDR0ZfVVNFRCB8IFBDR0ZfTE9DSywgLyogU2htZW0gKi8KKwkwLCAvKiBGT1JDRSAqLwogfTsKIAogLyoKICAqIEFsd2F5cyBtb2RpZmllZCB1bmRlciBscnUgbG9jay4gVGhlbiwgbm90IG5lY2Vzc2FyeSB0byBwcmVlbXB0X2Rpc2FibGUoKQogICovCi1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIGludCBmbGFncywKLQkJCQkJYm9vbCBjaGFyZ2UpCitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCisJCQkJCSBzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLAorCQkJCQkgYm9vbCBjaGFyZ2UpCiB7CiAJaW50IHZhbCA9IChjaGFyZ2UpPyAxIDogLTE7CiAJc3RydWN0IG1lbV9jZ3JvdXBfc3RhdCAqc3RhdCA9ICZtZW0tPnN0YXQ7CisJc3RydWN0IG1lbV9jZ3JvdXBfc3RhdF9jcHUgKmNwdXN0YXQ7CiAKIAlWTV9CVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7Ci0JaWYgKGZsYWdzICYgUEFHRV9DR1JPVVBfRkxBR19DQUNIRSkKLQkJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoc3RhdCwgTUVNX0NHUk9VUF9TVEFUX0NBQ0hFLCB2YWwpOworCisJY3B1c3RhdCA9ICZzdGF0LT5jcHVzdGF0W3NtcF9wcm9jZXNzb3JfaWQoKV07CisJaWYgKFBhZ2VDZ3JvdXBDYWNoZShwYykpCisJCV9fbWVtX2Nncm91cF9zdGF0X2FkZF9zYWZlKGNwdXN0YXQsIE1FTV9DR1JPVVBfU1RBVF9DQUNIRSwgdmFsKTsKIAllbHNlCi0JCV9fbWVtX2Nncm91cF9zdGF0X2FkZF9zYWZlKHN0YXQsIE1FTV9DR1JPVVBfU1RBVF9SU1MsIHZhbCk7CisJCV9fbWVtX2Nncm91cF9zdGF0X2FkZF9zYWZlKGNwdXN0YXQsIE1FTV9DR1JPVVBfU1RBVF9SU1MsIHZhbCk7CiAKIAlpZiAoY2hhcmdlKQotCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShzdGF0LAorCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShjcHVzdGF0LAogCQkJCU1FTV9DR1JPVVBfU1RBVF9QR1BHSU5fQ09VTlQsIDEpOwogCWVsc2UKLQkJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoc3RhdCwKKwkJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoY3B1c3RhdCwKIAkJCQlNRU1fQ0dST1VQX1NUQVRfUEdQR09VVF9DT1VOVCwgMSk7CiB9CiAKQEAgLTIyNyw3ICsyMDEsNyBAQAogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkJZW51bSBtZW1fY2dyb3VwX3pzdGF0X2luZGV4IGlkeCkKKwkJCQkJZW51bSBscnVfbGlzdCBpZHgpCiB7CiAJaW50IG5pZCwgemlkOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKQEAgLTI2Miw4NSArMjM2LDc3IEBACiAJCQkJc3RydWN0IG1lbV9jZ3JvdXAsIGNzcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfY2dyb3VwX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gYml0X3NwaW5faXNfbG9ja2VkKFBBR0VfQ0dST1VQX0xPQ0tfQklULCAmcGFnZS0+cGFnZV9jZ3JvdXApOwotfQotCi1zdGF0aWMgdm9pZCBwYWdlX2Fzc2lnbl9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKLXsKLQlWTV9CVUdfT04oIXBhZ2VfY2dyb3VwX2xvY2tlZChwYWdlKSk7Ci0JcGFnZS0+cGFnZV9jZ3JvdXAgPSAoKHVuc2lnbmVkIGxvbmcpcGMgfCBQQUdFX0NHUk9VUF9MT0NLKTsKLX0KLQotc3RydWN0IHBhZ2VfY2dyb3VwICpwYWdlX2dldF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gKHN0cnVjdCBwYWdlX2Nncm91cCAqKSAocGFnZS0+cGFnZV9jZ3JvdXAgJiB+UEFHRV9DR1JPVVBfTE9DSyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvY2tfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JYml0X3NwaW5fbG9jayhQQUdFX0NHUk9VUF9MT0NLX0JJVCwgJnBhZ2UtPnBhZ2VfY2dyb3VwKTsKLX0KLQotc3RhdGljIGludCB0cnlfbG9ja19wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gYml0X3NwaW5fdHJ5bG9jayhQQUdFX0NHUk9VUF9MT0NLX0JJVCwgJnBhZ2UtPnBhZ2VfY2dyb3VwKTsKLX0KLQotc3RhdGljIHZvaWQgdW5sb2NrX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQotewotCWJpdF9zcGluX3VubG9jayhQQUdFX0NHUk9VUF9MT0NLX0JJVCwgJnBhZ2UtPnBhZ2VfY2dyb3VwKTsKLX0KLQogc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX3JlbW92ZV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiwKIAkJCXN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCiB7Ci0JaW50IGZyb20gPSBwYy0+ZmxhZ3MgJiBQQUdFX0NHUk9VUF9GTEFHX0FDVElWRTsKKwlpbnQgbHJ1ID0gTFJVX0JBU0U7CiAKLQlpZiAoZnJvbSkKLQkJTUVNX0NHUk9VUF9aU1RBVChteiwgTUVNX0NHUk9VUF9aU1RBVF9BQ1RJVkUpIC09IDE7Ci0JZWxzZQotCQlNRU1fQ0dST1VQX1pTVEFUKG16LCBNRU1fQ0dST1VQX1pTVEFUX0lOQUNUSVZFKSAtPSAxOworCWlmIChQYWdlQ2dyb3VwVW5ldmljdGFibGUocGMpKQorCQlscnUgPSBMUlVfVU5FVklDVEFCTEU7CisJZWxzZSB7CisJCWlmIChQYWdlQ2dyb3VwQWN0aXZlKHBjKSkKKwkJCWxydSArPSBMUlVfQUNUSVZFOworCQlpZiAoUGFnZUNncm91cEZpbGUocGMpKQorCQkJbHJ1ICs9IExSVV9GSUxFOworCX0KIAotCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3MocGMtPm1lbV9jZ3JvdXAsIHBjLT5mbGFncywgZmFsc2UpOworCU1FTV9DR1JPVVBfWlNUQVQobXosIGxydSkgLT0gMTsKKworCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3MocGMtPm1lbV9jZ3JvdXAsIHBjLCBmYWxzZSk7CiAJbGlzdF9kZWwoJnBjLT5scnUpOwogfQogCiBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfYWRkX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16LAogCQkJCXN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCiB7Ci0JaW50IHRvID0gcGMtPmZsYWdzICYgUEFHRV9DR1JPVVBfRkxBR19BQ1RJVkU7CisJaW50IGxydSA9IExSVV9CQVNFOwogCi0JaWYgKCF0bykgewotCQlNRU1fQ0dST1VQX1pTVEFUKG16LCBNRU1fQ0dST1VQX1pTVEFUX0lOQUNUSVZFKSArPSAxOwotCQlsaXN0X2FkZCgmcGMtPmxydSwgJm16LT5pbmFjdGl2ZV9saXN0KTsKLQl9IGVsc2UgewotCQlNRU1fQ0dST1VQX1pTVEFUKG16LCBNRU1fQ0dST1VQX1pTVEFUX0FDVElWRSkgKz0gMTsKLQkJbGlzdF9hZGQoJnBjLT5scnUsICZtei0+YWN0aXZlX2xpc3QpOworCWlmIChQYWdlQ2dyb3VwVW5ldmljdGFibGUocGMpKQorCQlscnUgPSBMUlVfVU5FVklDVEFCTEU7CisJZWxzZSB7CisJCWlmIChQYWdlQ2dyb3VwQWN0aXZlKHBjKSkKKwkJCWxydSArPSBMUlVfQUNUSVZFOworCQlpZiAoUGFnZUNncm91cEZpbGUocGMpKQorCQkJbHJ1ICs9IExSVV9GSUxFOwogCX0KLQltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKHBjLT5tZW1fY2dyb3VwLCBwYy0+ZmxhZ3MsIHRydWUpOworCisJTUVNX0NHUk9VUF9aU1RBVChteiwgbHJ1KSArPSAxOworCWxpc3RfYWRkKCZwYy0+bHJ1LCAmbXotPmxpc3RzW2xydV0pOworCisJbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhwYy0+bWVtX2Nncm91cCwgcGMsIHRydWUpOwogfQogCi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfbW92ZV9saXN0cyhzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLCBib29sIGFjdGl2ZSkKK3N0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMsIGVudW0gbHJ1X2xpc3QgbHJ1KQogewotCWludCBmcm9tID0gcGMtPmZsYWdzICYgUEFHRV9DR1JPVVBfRkxBR19BQ1RJVkU7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMpOworCWludCBhY3RpdmUgICAgPSBQYWdlQ2dyb3VwQWN0aXZlKHBjKTsKKwlpbnQgZmlsZSAgICAgID0gUGFnZUNncm91cEZpbGUocGMpOworCWludCB1bmV2aWN0YWJsZSA9IFBhZ2VDZ3JvdXBVbmV2aWN0YWJsZShwYyk7CisJZW51bSBscnVfbGlzdCBmcm9tID0gdW5ldmljdGFibGUgPyBMUlVfVU5FVklDVEFCTEUgOgorCQkJCShMUlVfRklMRSAqICEhZmlsZSArICEhYWN0aXZlKTsKIAotCWlmIChmcm9tKQotCQlNRU1fQ0dST1VQX1pTVEFUKG16LCBNRU1fQ0dST1VQX1pTVEFUX0FDVElWRSkgLT0gMTsKLQllbHNlCi0JCU1FTV9DR1JPVVBfWlNUQVQobXosIE1FTV9DR1JPVVBfWlNUQVRfSU5BQ1RJVkUpIC09IDE7CisJaWYgKGxydSA9PSBmcm9tKQorCQlyZXR1cm47CiAKLQlpZiAoYWN0aXZlKSB7Ci0JCU1FTV9DR1JPVVBfWlNUQVQobXosIE1FTV9DR1JPVVBfWlNUQVRfQUNUSVZFKSArPSAxOwotCQlwYy0+ZmxhZ3MgfD0gUEFHRV9DR1JPVVBfRkxBR19BQ1RJVkU7Ci0JCWxpc3RfbW92ZSgmcGMtPmxydSwgJm16LT5hY3RpdmVfbGlzdCk7CisJTUVNX0NHUk9VUF9aU1RBVChteiwgZnJvbSkgLT0gMTsKKwkvKgorCSAqIEhvd2V2ZXIgdGhpcyBpcyBkb25lIHVuZGVyIG16LT5scnVfbG9jaywgYW5vdGhlciBmbGFncywgd2hpY2gKKwkgKiBhcmUgbm90IHJlbGF0ZWQgdG8gTFJVLCB3aWxsIGJlIG1vZGlmaWVkIGZyb20gb3V0LW9mLWxvY2suCisJICogV2UgaGF2ZSB0byB1c2UgYXRvbWljIHNldC9jbGVhciBmbGFncy4KKwkgKi8KKwlpZiAoaXNfdW5ldmljdGFibGVfbHJ1KGxydSkpIHsKKwkJQ2xlYXJQYWdlQ2dyb3VwQWN0aXZlKHBjKTsKKwkJU2V0UGFnZUNncm91cFVuZXZpY3RhYmxlKHBjKTsKIAl9IGVsc2UgewotCQlNRU1fQ0dST1VQX1pTVEFUKG16LCBNRU1fQ0dST1VQX1pTVEFUX0lOQUNUSVZFKSArPSAxOwotCQlwYy0+ZmxhZ3MgJj0gflBBR0VfQ0dST1VQX0ZMQUdfQUNUSVZFOwotCQlsaXN0X21vdmUoJnBjLT5scnUsICZtei0+aW5hY3RpdmVfbGlzdCk7CisJCWlmIChpc19hY3RpdmVfbHJ1KGxydSkpCisJCQlTZXRQYWdlQ2dyb3VwQWN0aXZlKHBjKTsKKwkJZWxzZQorCQkJQ2xlYXJQYWdlQ2dyb3VwQWN0aXZlKHBjKTsKKwkJQ2xlYXJQYWdlQ2dyb3VwVW5ldmljdGFibGUocGMpOwogCX0KKworCU1FTV9DR1JPVVBfWlNUQVQobXosIGxydSkgKz0gMTsKKwlsaXN0X21vdmUoJnBjLT5scnUsICZtei0+bGlzdHNbbHJ1XSk7CiB9CiAKIGludCB0YXNrX2luX21lbV9jZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQpAQCAtMzU2LDcgKzMyMiw3IEBACiAvKgogICogVGhpcyByb3V0aW5lIGFzc3VtZXMgdGhhdCB0aGUgYXBwcm9wcmlhdGUgem9uZSdzIGxydSBsb2NrIGlzIGFscmVhZHkgaGVsZAogICovCi12b2lkIG1lbV9jZ3JvdXBfbW92ZV9saXN0cyhzdHJ1Y3QgcGFnZSAqcGFnZSwgYm9vbCBhY3RpdmUpCit2b2lkIG1lbV9jZ3JvdXBfbW92ZV9saXN0cyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBscnVfbGlzdCBscnUpCiB7CiAJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CkBAIC0zNzIsMTcgKzMzOCwxNiBAQAogCSAqIHNhZmVseSBnZXQgdG8gcGFnZV9jZ3JvdXAgd2l0aG91dCBpdCwgc28ganVzdCB0cnlfbG9jayBpdDoKIAkgKiBtZW1fY2dyb3VwX2lzb2xhdGVfcGFnZXMgYWxsb3dzIGZvciBwYWdlIGxlZnQgb24gd3JvbmcgbGlzdC4KIAkgKi8KLQlpZiAoIXRyeV9sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpKQorCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOworCWlmICghdHJ5bG9ja19wYWdlX2Nncm91cChwYykpCiAJCXJldHVybjsKLQotCXBjID0gcGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JaWYgKHBjKSB7CisJaWYgKHBjICYmIFBhZ2VDZ3JvdXBVc2VkKHBjKSkgewogCQlteiA9IHBhZ2VfY2dyb3VwX3pvbmVpbmZvKHBjKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwotCQlfX21lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYywgYWN0aXZlKTsKKwkJX19tZW1fY2dyb3VwX21vdmVfbGlzdHMocGMsIGxydSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwogCX0KLQl1bmxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7CisJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKIH0KIAogLyoKQEAgLTQwMywyMSArMzY4LDYgQEAKIH0KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdm1zY2FuLmMuIEluIHBhZ2UgcmVjbGFpbWluZyBsb29wLiBiYWxhbmNlCi0gKiBiZXR3ZWVuIGFjdGl2ZSBhbmQgaW5hY3RpdmUgbGlzdCBpcyBjYWxjdWxhdGVkLiBGb3IgbWVtb3J5IGNvbnRyb2xsZXIKLSAqIHBhZ2UgcmVjbGFpbWluZywgd2Ugc2hvdWxkIHVzZSB1c2luZyBtZW1fY2dyb3VwJ3MgaW1iYWxhbmNlIHJhdGhlciB0aGFuCi0gKiB6b25lJ3MgZ2xvYmFsIGxydSBpbWJhbGFuY2UuCi0gKi8KLWxvbmcgbWVtX2Nncm91cF9yZWNsYWltX2ltYmFsYW5jZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQotewotCXVuc2lnbmVkIGxvbmcgYWN0aXZlLCBpbmFjdGl2ZTsKLQkvKiBhY3RpdmUgYW5kIGluYWN0aXZlIGFyZSB0aGUgbnVtYmVyIG9mIHBhZ2VzLiAnbG9uZycgaXMgb2suKi8KLQlhY3RpdmUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtLCBNRU1fQ0dST1VQX1pTVEFUX0FDVElWRSk7Ci0JaW5hY3RpdmUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtLCBNRU1fQ0dST1VQX1pTVEFUX0lOQUNUSVZFKTsKLQlyZXR1cm4gKGxvbmcpIChhY3RpdmUgLyAoaW5hY3RpdmUgKyAxKSk7Ci19Ci0KLS8qCiAgKiBwcmV2X3ByaW9yaXR5IGNvbnRyb2wuLi50aGlzIHdpbGwgYmUgdXNlZCBpbiBtZW1vcnkgcmVjbGFpbSBwYXRoLgogICovCiBpbnQgbWVtX2Nncm91cF9nZXRfcmVjbGFpbV9wcmlvcml0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQpAQCAtNDQ0LDI4ICszOTQsMTcgQEAKICAqIChzZWUgaW5jbHVkZS9saW51eC9tbXpvbmUuaCkKICAqLwogCi1sb25nIG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltX2FjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAotCQkJCSAgIHN0cnVjdCB6b25lICp6b25lLCBpbnQgcHJpb3JpdHkpCitsb25nIG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIHN0cnVjdCB6b25lICp6b25lLAorCQkJCQlpbnQgcHJpb3JpdHksIGVudW0gbHJ1X2xpc3QgbHJ1KQogewotCWxvbmcgbnJfYWN0aXZlOworCWxvbmcgbnJfcGFnZXM7CiAJaW50IG5pZCA9IHpvbmUtPnpvbmVfcGdkYXQtPm5vZGVfaWQ7CiAJaW50IHppZCA9IHpvbmVfaWR4KHpvbmUpOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiA9IG1lbV9jZ3JvdXBfem9uZWluZm8obWVtLCBuaWQsIHppZCk7CiAKLQlucl9hY3RpdmUgPSBNRU1fQ0dST1VQX1pTVEFUKG16LCBNRU1fQ0dST1VQX1pTVEFUX0FDVElWRSk7Ci0JcmV0dXJuIChucl9hY3RpdmUgPj4gcHJpb3JpdHkpOwotfQorCW5yX3BhZ2VzID0gTUVNX0NHUk9VUF9aU1RBVChteiwgbHJ1KTsKIAotbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbV9pbmFjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAotCQkJCQlzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IHByaW9yaXR5KQotewotCWxvbmcgbnJfaW5hY3RpdmU7Ci0JaW50IG5pZCA9IHpvbmUtPnpvbmVfcGdkYXQtPm5vZGVfaWQ7Ci0JaW50IHppZCA9IHpvbmVfaWR4KHpvbmUpOwotCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiA9IG1lbV9jZ3JvdXBfem9uZWluZm8obWVtLCBuaWQsIHppZCk7Ci0KLQlucl9pbmFjdGl2ZSA9IE1FTV9DR1JPVVBfWlNUQVQobXosIE1FTV9DR1JPVVBfWlNUQVRfSU5BQ1RJVkUpOwotCXJldHVybiAobnJfaW5hY3RpdmUgPj4gcHJpb3JpdHkpOworCXJldHVybiAobnJfcGFnZXMgPj4gcHJpb3JpdHkpOwogfQogCiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfaXNvbGF0ZV9wYWdlcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCkBAIC00NzMsNyArNDEyLDcgQEAKIAkJCQkJdW5zaWduZWQgbG9uZyAqc2Nhbm5lZCwgaW50IG9yZGVyLAogCQkJCQlpbnQgbW9kZSwgc3RydWN0IHpvbmUgKnosCiAJCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY29udCwKLQkJCQkJaW50IGFjdGl2ZSkKKwkJCQkJaW50IGFjdGl2ZSwgaW50IGZpbGUpCiB7CiAJdW5zaWduZWQgbG9uZyBucl90YWtlbiA9IDA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC00ODQsMzggKzQyMywzOCBAQAogCWludCBuaWQgPSB6LT56b25lX3BnZGF0LT5ub2RlX2lkOwogCWludCB6aWQgPSB6b25lX2lkeCh6KTsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CisJaW50IGxydSA9IExSVV9GSUxFICogISFmaWxlICsgISFhY3RpdmU7CiAKIAlCVUdfT04oIW1lbV9jb250KTsKIAlteiA9IG1lbV9jZ3JvdXBfem9uZWluZm8obWVtX2NvbnQsIG5pZCwgemlkKTsKLQlpZiAoYWN0aXZlKQotCQlzcmMgPSAmbXotPmFjdGl2ZV9saXN0OwotCWVsc2UKLQkJc3JjID0gJm16LT5pbmFjdGl2ZV9saXN0OwotCisJc3JjID0gJm16LT5saXN0c1tscnVdOwogCiAJc3Bpbl9sb2NrKCZtei0+bHJ1X2xvY2spOwogCXNjYW4gPSAwOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKHBjLCB0bXAsIHNyYywgbHJ1KSB7CiAJCWlmIChzY2FuID49IG5yX3RvX3NjYW4pCiAJCQlicmVhazsKKwkJaWYgKHVubGlrZWx5KCFQYWdlQ2dyb3VwVXNlZChwYykpKQorCQkJY29udGludWU7CiAJCXBhZ2UgPSBwYy0+cGFnZTsKIAogCQlpZiAodW5saWtlbHkoIVBhZ2VMUlUocGFnZSkpKQogCQkJY29udGludWU7CiAKLQkJaWYgKFBhZ2VBY3RpdmUocGFnZSkgJiYgIWFjdGl2ZSkgewotCQkJX19tZW1fY2dyb3VwX21vdmVfbGlzdHMocGMsIHRydWUpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFQYWdlQWN0aXZlKHBhZ2UpICYmIGFjdGl2ZSkgewotCQkJX19tZW1fY2dyb3VwX21vdmVfbGlzdHMocGMsIGZhbHNlKTsKKwkJLyoKKwkJICogVE9ETzogcGxheSBiZXR0ZXIgd2l0aCBsdW1weSByZWNsYWltLCBncmFiYmluZyBhbnl0aGluZy4KKwkJICovCisJCWlmIChQYWdlVW5ldmljdGFibGUocGFnZSkgfHwKKwkJICAgIChQYWdlQWN0aXZlKHBhZ2UpICYmICFhY3RpdmUpIHx8CisJCSAgICAoIVBhZ2VBY3RpdmUocGFnZSkgJiYgYWN0aXZlKSkgeworCQkJX19tZW1fY2dyb3VwX21vdmVfbGlzdHMocGMsIHBhZ2VfbHJ1KHBhZ2UpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJc2NhbisrOwogCQlsaXN0X21vdmUoJnBjLT5scnUsICZwY19saXN0KTsKIAotCQlpZiAoX19pc29sYXRlX2xydV9wYWdlKHBhZ2UsIG1vZGUpID09IDApIHsKKwkJaWYgKF9faXNvbGF0ZV9scnVfcGFnZShwYWdlLCBtb2RlLCBmaWxlKSA9PSAwKSB7CiAJCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgZHN0KTsKIAkJCW5yX3Rha2VuKys7CiAJCX0KQEAgLTU0MCwyNiArNDc5LDI3IEBACiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbTsKIAlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBucl9yZXRyaWVzID0gTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVM7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlwYyA9IGttZW1fY2FjaGVfYWxsb2MocGFnZV9jZ3JvdXBfY2FjaGUsIGdmcF9tYXNrKTsKLQlpZiAodW5saWtlbHkocGMgPT0gTlVMTCkpCi0JCWdvdG8gZXJyOwotCisJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CisJLyogY2FuIGhhcHBlbiBhdCBib290ICovCisJaWYgKHVubGlrZWx5KCFwYykpCisJCXJldHVybiAwOworCXByZWZldGNodyhwYyk7CiAJLyoKIAkgKiBXZSBhbHdheXMgY2hhcmdlIHRoZSBjZ3JvdXAgdGhlIG1tX3N0cnVjdCBiZWxvbmdzIHRvLgogCSAqIFRoZSBtbV9zdHJ1Y3QncyBtZW1fY2dyb3VwIGNoYW5nZXMgb24gdGFzayBtaWdyYXRpb24gaWYgdGhlCiAJICogdGhyZWFkIGdyb3VwIGxlYWRlciBtaWdyYXRlcy4gSXQncyBwb3NzaWJsZSB0aGF0IG1tIGlzIG5vdAogCSAqIHNldCwgaWYgc28gY2hhcmdlIHRoZSBpbml0X21tIChoYXBwZW5zIGZvciBwYWdlY2FjaGUgdXNhZ2UpLgogCSAqLworCiAJaWYgKGxpa2VseSghbWVtY2cpKSB7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJbWVtID0gbWVtX2Nncm91cF9mcm9tX3Rhc2socmN1X2RlcmVmZXJlbmNlKG1tLT5vd25lcikpOwogCQlpZiAodW5saWtlbHkoIW1lbSkpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJa21lbV9jYWNoZV9mcmVlKHBhZ2VfY2dyb3VwX2NhY2hlLCBwYyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQkvKgpAQCAtNTcyLDcgKzUxMiw3IEBACiAJCWNzc19nZXQoJm1lbWNnLT5jc3MpOwogCX0KIAotCXdoaWxlIChyZXNfY291bnRlcl9jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUpKSB7CisJd2hpbGUgKHVubGlrZWx5KHJlc19jb3VudGVyX2NoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSkpKSB7CiAJCWlmICghKGdmcF9tYXNrICYgX19HRlBfV0FJVCkpCiAJCQlnb3RvIG91dDsKIApAQCAtNTk1LDM5ICs1MzUsMzMgQEAKIAkJfQogCX0KIAorCisJbG9ja19wYWdlX2Nncm91cChwYyk7CisJaWYgKHVubGlrZWx5KFBhZ2VDZ3JvdXBVc2VkKHBjKSkpIHsKKwkJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUpOworCQljc3NfcHV0KCZtZW0tPmNzcyk7CisKKwkJZ290byBkb25lOworCX0KIAlwYy0+bWVtX2Nncm91cCA9IG1lbTsKLQlwYy0+cGFnZSA9IHBhZ2U7CiAJLyoKIAkgKiBJZiBhIHBhZ2UgaXMgYWNjb3VudGVkIGFzIGEgcGFnZSBjYWNoZSwgaW5zZXJ0IHRvIGluYWN0aXZlIGxpc3QuCiAJICogSWYgYW5vbiwgaW5zZXJ0IHRvIGFjdGl2ZSBsaXN0LgogCSAqLwotCWlmIChjdHlwZSA9PSBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFKQotCQlwYy0+ZmxhZ3MgPSBQQUdFX0NHUk9VUF9GTEFHX0NBQ0hFOwotCWVsc2UKLQkJcGMtPmZsYWdzID0gUEFHRV9DR1JPVVBfRkxBR19BQ1RJVkU7Ci0KLQlsb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCWlmICh1bmxpa2VseShwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKSkpIHsKLQkJdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7Ci0JCWNzc19wdXQoJm1lbS0+Y3NzKTsKLQkJa21lbV9jYWNoZV9mcmVlKHBhZ2VfY2dyb3VwX2NhY2hlLCBwYyk7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JcGFnZV9hc3NpZ25fcGFnZV9jZ3JvdXAocGFnZSwgcGMpOworCXBjLT5mbGFncyA9IHBjZ19kZWZhdWx0X2ZsYWdzW2N0eXBlXTsKIAogCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwogCV9fbWVtX2Nncm91cF9hZGRfbGlzdChteiwgcGMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOworCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAKLQl1bmxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7CiBkb25lOgogCXJldHVybiAwOwogb3V0OgogCWNzc19wdXQoJm1lbS0+Y3NzKTsKLQlrbWVtX2NhY2hlX2ZyZWUocGFnZV9jZ3JvdXBfY2FjaGUsIHBjKTsKLWVycjoKIAlyZXR1cm4gLUVOT01FTTsKIH0KIApAQCAtNjM1LDcgKzU2OSw4IEBACiB7CiAJaWYgKG1lbV9jZ3JvdXBfc3Vic3lzLmRpc2FibGVkKQogCQlyZXR1cm4gMDsKLQorCWlmIChQYWdlQ29tcG91bmQocGFnZSkpCisJCXJldHVybiAwOwogCS8qCiAJICogSWYgYWxyZWFkeSBtYXBwZWQsIHdlIGRvbid0IGhhdmUgdG8gYWNjb3VudC4KIAkgKiBJZiBwYWdlIGNhY2hlLCBwYWdlLT5tYXBwaW5nIGhhcyBhZGRyZXNzX3NwYWNlLgpAQCAtNjU2LDcgKzU5MSw4IEBACiB7CiAJaWYgKG1lbV9jZ3JvdXBfc3Vic3lzLmRpc2FibGVkKQogCQlyZXR1cm4gMDsKLQorCWlmIChQYWdlQ29tcG91bmQocGFnZSkpCisJCXJldHVybiAwOwogCS8qCiAJICogQ29ybmVyIGNhc2UgaGFuZGxpbmcuIFRoaXMgaXMgY2FsbGVkIGZyb20gYWRkX3RvX3BhZ2VfY2FjaGUoKQogCSAqIGluIHVzdWFsLiBCdXQgc29tZSBGUyAoc2htZW0pIHByZWNoYXJnZXMgdGhpcyBwYWdlIGJlZm9yZSBjYWxsaW5nIGl0CkBAIC02NjksMjIgKzYwNSwyNyBAQAogCWlmICghKGdmcF9tYXNrICYgX19HRlBfV0FJVCkpIHsKIAkJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKIAotCQlsb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCQlwYyA9IHBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHBhZ2UpOwotCQlpZiAocGMpIHsKLQkJCVZNX0JVR19PTihwYy0+cGFnZSAhPSBwYWdlKTsKLQkJCVZNX0JVR19PTighcGMtPm1lbV9jZ3JvdXApOwotCQkJdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOworCisJCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOworCQlpZiAoIXBjKQorCQkJcmV0dXJuIDA7CisJCWxvY2tfcGFnZV9jZ3JvdXAocGMpOworCQlpZiAoUGFnZUNncm91cFVzZWQocGMpKSB7CisJCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOworCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwogCX0KIAogCWlmICh1bmxpa2VseSghbW0pKQogCQltbSA9ICZpbml0X21tOwogCi0JcmV0dXJuIG1lbV9jZ3JvdXBfY2hhcmdlX2NvbW1vbihwYWdlLCBtbSwgZ2ZwX21hc2ssCisJaWYgKHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSkKKwkJcmV0dXJuIG1lbV9jZ3JvdXBfY2hhcmdlX2NvbW1vbihwYWdlLCBtbSwgZ2ZwX21hc2ssCiAJCQkJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9DQUNIRSwgTlVMTCk7CisJZWxzZQorCQlyZXR1cm4gbWVtX2Nncm91cF9jaGFyZ2VfY29tbW9uKHBhZ2UsIG1tLCBnZnBfbWFzaywKKwkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NITUVNLCBOVUxMKTsKIH0KIAogLyoKQEAgLTcwNCw0NCArNjQ1LDQ2IEBACiAJLyoKIAkgKiBDaGVjayBpZiBvdXIgcGFnZV9jZ3JvdXAgaXMgdmFsaWQKIAkgKi8KLQlsb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCXBjID0gcGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JaWYgKHVubGlrZWx5KCFwYykpCi0JCWdvdG8gdW5sb2NrOworCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOworCWlmICh1bmxpa2VseSghcGMgfHwgIVBhZ2VDZ3JvdXBVc2VkKHBjKSkpCisJCXJldHVybjsKIAotCVZNX0JVR19PTihwYy0+cGFnZSAhPSBwYWdlKTsKLQotCWlmICgoY3R5cGUgPT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9NQVBQRUQpCi0JICAgICYmICgocGMtPmZsYWdzICYgUEFHRV9DR1JPVVBfRkxBR19DQUNIRSkKLQkJfHwgcGFnZV9tYXBwZWQocGFnZSkpKQotCQlnb3RvIHVubG9jazsKKwlsb2NrX3BhZ2VfY2dyb3VwKHBjKTsKKwlpZiAoKGN0eXBlID09IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfTUFQUEVEICYmIHBhZ2VfbWFwcGVkKHBhZ2UpKQorCSAgICAgfHwgIVBhZ2VDZ3JvdXBVc2VkKHBjKSkgeworCQkvKiBUaGlzIGhhcHBlbnMgYXQgcmFjZSBpbiB6YXBfcHRlX3JhbmdlKCkgYW5kIGRvX3N3YXBfcGFnZSgpKi8KKwkJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKKwkJcmV0dXJuOworCX0KKwlDbGVhclBhZ2VDZ3JvdXBVc2VkKHBjKTsKKwltZW0gPSBwYy0+bWVtX2Nncm91cDsKIAogCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKIAlfX21lbV9jZ3JvdXBfcmVtb3ZlX2xpc3QobXosIHBjKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKKwl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwogCi0JcGFnZV9hc3NpZ25fcGFnZV9jZ3JvdXAocGFnZSwgTlVMTCk7Ci0JdW5sb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCi0JbWVtID0gcGMtPm1lbV9jZ3JvdXA7CiAJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUpOwogCWNzc19wdXQoJm1lbS0+Y3NzKTsKIAotCWttZW1fY2FjaGVfZnJlZShwYWdlX2Nncm91cF9jYWNoZSwgcGMpOwogCXJldHVybjsKLXVubG9jazoKLQl1bmxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7CiB9CiAKIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogeworCS8qIGVhcmx5IGNoZWNrLiAqLworCWlmIChwYWdlX21hcHBlZChwYWdlKSkKKwkJcmV0dXJuOworCWlmIChwYWdlLT5tYXBwaW5nICYmICFQYWdlQW5vbihwYWdlKSkKKwkJcmV0dXJuOwogCV9fbWVtX2Nncm91cF91bmNoYXJnZV9jb21tb24ocGFnZSwgTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9NQVBQRUQpOwogfQogCiB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlWTV9CVUdfT04ocGFnZV9tYXBwZWQocGFnZSkpOworCVZNX0JVR19PTihwYWdlLT5tYXBwaW5nKTsKIAlfX21lbV9jZ3JvdXBfdW5jaGFyZ2VfY29tbW9uKHBhZ2UsIE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfQ0FDSEUpOwogfQogCkBAIC03NTgsMTUgKzcwMSwxOSBAQAogCWlmIChtZW1fY2dyb3VwX3N1YnN5cy5kaXNhYmxlZCkKIAkJcmV0dXJuIDA7CiAKLQlsb2NrX3BhZ2VfY2dyb3VwKHBhZ2UpOwotCXBjID0gcGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSk7Ci0JaWYgKHBjKSB7CisJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CisJbG9ja19wYWdlX2Nncm91cChwYyk7CisJaWYgKFBhZ2VDZ3JvdXBVc2VkKHBjKSkgewogCQltZW0gPSBwYy0+bWVtX2Nncm91cDsKIAkJY3NzX2dldCgmbWVtLT5jc3MpOwotCQlpZiAocGMtPmZsYWdzICYgUEFHRV9DR1JPVVBfRkxBR19DQUNIRSkKLQkJCWN0eXBlID0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9DQUNIRTsKKwkJaWYgKFBhZ2VDZ3JvdXBDYWNoZShwYykpIHsKKwkJCWlmIChwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpCisJCQkJY3R5cGUgPSBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFOworCQkJZWxzZQorCQkJCWN0eXBlID0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TSE1FTTsKKwkJfQogCX0KLQl1bmxvY2tfcGFnZV9jZ3JvdXAocGFnZSk7CisJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKIAlpZiAobWVtKSB7CiAJCXJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2NvbW1vbihuZXdwYWdlLCBOVUxMLCBHRlBfS0VSTkVMLAogCQkJY3R5cGUsIG1lbSk7CkBAIC03OTEsNyArNzM4LDcgQEAKIAkgKi8KIAlpZiAoIW5ld3BhZ2UtPm1hcHBpbmcpCiAJCV9fbWVtX2Nncm91cF91bmNoYXJnZV9jb21tb24obmV3cGFnZSwKLQkJCQkJIE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfRk9SQ0UpOworCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfRk9SQ0UpOwogCWVsc2UgaWYgKFBhZ2VBbm9uKG5ld3BhZ2UpKQogCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UobmV3cGFnZSk7CiB9CkBAIC04NjMsNyArODEwLDcgQEAKICNkZWZpbmUgRk9SQ0VfVU5DSEFSR0VfQkFUQ0gJKDEyOCkKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAogCQkJICAgIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiwKLQkJCSAgICBpbnQgYWN0aXZlKQorCQkJICAgIGVudW0gbHJ1X2xpc3QgbHJ1KQogewogCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC04NzEsMTUgKzgxOCwxNCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAotCWlmIChhY3RpdmUpCi0JCWxpc3QgPSAmbXotPmFjdGl2ZV9saXN0OwotCWVsc2UKLQkJbGlzdCA9ICZtei0+aW5hY3RpdmVfbGlzdDsKKwlsaXN0ID0gJm16LT5saXN0c1tscnVdOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwogCXdoaWxlICghbGlzdF9lbXB0eShsaXN0KSkgewogCQlwYyA9IGxpc3RfZW50cnkobGlzdC0+cHJldiwgc3RydWN0IHBhZ2VfY2dyb3VwLCBscnUpOwogCQlwYWdlID0gcGMtPnBhZ2U7CisJCWlmICghUGFnZUNncm91cFVzZWQocGMpKQorCQkJYnJlYWs7CiAJCWdldF9wYWdlKHBhZ2UpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKIAkJLyoKQEAgLTg5NCw4ICs4NDAsMTAgQEAKIAkJCQljb3VudCA9IEZPUkNFX1VOQ0hBUkdFX0JBVENIOwogCQkJCWNvbmRfcmVzY2hlZCgpOwogCQkJfQotCQl9IGVsc2UKLQkJCWNvbmRfcmVzY2hlZCgpOworCQl9IGVsc2UgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOworCQkJYnJlYWs7CisJCX0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm16LT5scnVfbG9jaywgZmxhZ3MpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtei0+bHJ1X2xvY2ssIGZsYWdzKTsKQEAgLTkxOSwxNSArODY3LDE3IEBACiAJd2hpbGUgKG1lbS0+cmVzLnVzYWdlID4gMCkgewogCQlpZiAoYXRvbWljX3JlYWQoJm1lbS0+Y3NzLmNncm91cC0+Y291bnQpID4gMCkKIAkJCWdvdG8gb3V0OworCQkvKiBUaGlzIGlzIGZvciBtYWtpbmcgYWxsICp1c2VkKiBwYWdlcyB0byBiZSBvbiBMUlUuICovCisJCWxydV9hZGRfZHJhaW5fYWxsKCk7CiAJCWZvcl9lYWNoX25vZGVfc3RhdGUobm9kZSwgTl9QT1NTSUJMRSkKIAkJCWZvciAoemlkID0gMDsgemlkIDwgTUFYX05SX1pPTkVTOyB6aWQrKykgewogCQkJCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKKwkJCQllbnVtIGxydV9saXN0IGw7CiAJCQkJbXogPSBtZW1fY2dyb3VwX3pvbmVpbmZvKG1lbSwgbm9kZSwgemlkKTsKLQkJCQkvKiBkcm9wIGFsbCBwYWdlX2Nncm91cCBpbiBhY3RpdmVfbGlzdCAqLwotCQkJCW1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfbGlzdChtZW0sIG16LCAxKTsKLQkJCQkvKiBkcm9wIGFsbCBwYWdlX2Nncm91cCBpbiBpbmFjdGl2ZV9saXN0ICovCi0JCQkJbWVtX2Nncm91cF9mb3JjZV9lbXB0eV9saXN0KG1lbSwgbXosIDApOworCQkJCWZvcl9lYWNoX2xydShsKQorCQkJCQltZW1fY2dyb3VwX2ZvcmNlX2VtcHR5X2xpc3QobWVtLCBteiwgbCk7CiAJCQl9CisJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAlyZXQgPSAwOwogb3V0OgpAQCAtMTAxMiwxNCArOTYyLDI3IEBACiAJfQogCS8qIHNob3dpbmcgIyBvZiBhY3RpdmUgcGFnZXMgKi8KIAl7Ci0JCXVuc2lnbmVkIGxvbmcgYWN0aXZlLCBpbmFjdGl2ZTsKKwkJdW5zaWduZWQgbG9uZyBhY3RpdmVfYW5vbiwgaW5hY3RpdmVfYW5vbjsKKwkJdW5zaWduZWQgbG9uZyBhY3RpdmVfZmlsZSwgaW5hY3RpdmVfZmlsZTsKKwkJdW5zaWduZWQgbG9uZyB1bmV2aWN0YWJsZTsKIAotCQlpbmFjdGl2ZSA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW1fY29udCwKLQkJCQkJCU1FTV9DR1JPVVBfWlNUQVRfSU5BQ1RJVkUpOwotCQlhY3RpdmUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtX2NvbnQsCi0JCQkJCQlNRU1fQ0dST1VQX1pTVEFUX0FDVElWRSk7Ci0JCWNiLT5maWxsKGNiLCAiYWN0aXZlIiwgKGFjdGl2ZSkgKiBQQUdFX1NJWkUpOwotCQljYi0+ZmlsbChjYiwgImluYWN0aXZlIiwgKGluYWN0aXZlKSAqIFBBR0VfU0laRSk7CisJCWluYWN0aXZlX2Fub24gPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtX2NvbnQsCisJCQkJCQlMUlVfSU5BQ1RJVkVfQU5PTik7CisJCWFjdGl2ZV9hbm9uID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbV9jb250LAorCQkJCQkJTFJVX0FDVElWRV9BTk9OKTsKKwkJaW5hY3RpdmVfZmlsZSA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW1fY29udCwKKwkJCQkJCUxSVV9JTkFDVElWRV9GSUxFKTsKKwkJYWN0aXZlX2ZpbGUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtX2NvbnQsCisJCQkJCQlMUlVfQUNUSVZFX0ZJTEUpOworCQl1bmV2aWN0YWJsZSA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW1fY29udCwKKwkJCQkJCQlMUlVfVU5FVklDVEFCTEUpOworCisJCWNiLT5maWxsKGNiLCAiYWN0aXZlX2Fub24iLCAoYWN0aXZlX2Fub24pICogUEFHRV9TSVpFKTsKKwkJY2ItPmZpbGwoY2IsICJpbmFjdGl2ZV9hbm9uIiwgKGluYWN0aXZlX2Fub24pICogUEFHRV9TSVpFKTsKKwkJY2ItPmZpbGwoY2IsICJhY3RpdmVfZmlsZSIsIChhY3RpdmVfZmlsZSkgKiBQQUdFX1NJWkUpOworCQljYi0+ZmlsbChjYiwgImluYWN0aXZlX2ZpbGUiLCAoaW5hY3RpdmVfZmlsZSkgKiBQQUdFX1NJWkUpOworCQljYi0+ZmlsbChjYiwgInVuZXZpY3RhYmxlIiwgdW5ldmljdGFibGUgKiBQQUdFX1NJWkUpOworCiAJfQogCXJldHVybiAwOwogfQpAQCAtMTA2Miw2ICsxMDI1LDcgQEAKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OworCWVudW0gbHJ1X2xpc3QgbDsKIAlpbnQgem9uZSwgdG1wID0gbm9kZTsKIAkvKgogCSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYWdhaW5zdCBwb3NzaWJsZSBub2Rlcy4KQEAgLTEwODIsOSArMTA0Niw5IEBACiAKIAlmb3IgKHpvbmUgPSAwOyB6b25lIDwgTUFYX05SX1pPTkVTOyB6b25lKyspIHsKIAkJbXogPSAmcG4tPnpvbmVpbmZvW3pvbmVdOwotCQlJTklUX0xJU1RfSEVBRCgmbXotPmFjdGl2ZV9saXN0KTsKLQkJSU5JVF9MSVNUX0hFQUQoJm16LT5pbmFjdGl2ZV9saXN0KTsKIAkJc3Bpbl9sb2NrX2luaXQoJm16LT5scnVfbG9jayk7CisJCWZvcl9lYWNoX2xydShsKQorCQkJSU5JVF9MSVNUX0hFQUQoJm16LT5saXN0c1tsXSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTEyNCw4ICsxMDg4LDggQEAKIAlpbnQgbm9kZTsKIAogCWlmICh1bmxpa2VseSgoY29udC0+cGFyZW50KSA9PSBOVUxMKSkgeworCQlwYWdlX2Nncm91cF9pbml0KCk7CiAJCW1lbSA9ICZpbml0X21lbV9jZ3JvdXA7Ci0JCXBhZ2VfY2dyb3VwX2NhY2hlID0gS01FTV9DQUNIRShwYWdlX2Nncm91cCwgU0xBQl9QQU5JQyk7CiAJfSBlbHNlIHsKIAkJbWVtID0gbWVtX2Nncm91cF9hbGxvYygpOwogCQlpZiAoIW1lbSkKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggMTAwMmY0Ny4uM2E2YzRhNiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTY0LDYgKzY0LDggQEAKIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiAvKiB1c2UgdGhlIHBlci1wZ2RhdCBkYXRhIGluc3RlYWQgZm9yIGRpc2NvbnRpZ21lbSAtIG1ibGlnaCAqLwogdW5zaWduZWQgbG9uZyBtYXhfbWFwbnI7CkBAIC0xMTI5LDEyICsxMTMxLDE3IEBACiAJcmV0dXJuICF2bWEtPnZtX29wcyB8fCAhdm1hLT52bV9vcHMtPmZhdWx0OwogfQogCi1pbnQgZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuLCBpbnQgd3JpdGUsIGludCBmb3JjZSwKKworCitpbnQgX19nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IGZsYWdzLAogCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKQogewogCWludCBpOwotCXVuc2lnbmVkIGludCB2bV9mbGFnczsKKwl1bnNpZ25lZCBpbnQgdm1fZmxhZ3MgPSAwOworCWludCB3cml0ZSA9ICEhKGZsYWdzICYgR1VQX0ZMQUdTX1dSSVRFKTsKKwlpbnQgZm9yY2UgPSAhIShmbGFncyAmIEdVUF9GTEFHU19GT1JDRSk7CisJaW50IGlnbm9yZSA9ICEhKGZsYWdzICYgR1VQX0ZMQUdTX0lHTk9SRV9WTUFfUEVSTUlTU0lPTlMpOwogCiAJaWYgKGxlbiA8PSAwKQogCQlyZXR1cm4gMDsKQEAgLTExNTgsNyArMTE2NSw5IEBACiAJCQlwdWRfdCAqcHVkOwogCQkJcG1kX3QgKnBtZDsKIAkJCXB0ZV90ICpwdGU7Ci0JCQlpZiAod3JpdGUpIC8qIHVzZXIgZ2F0ZSBwYWdlcyBhcmUgcmVhZC1vbmx5ICovCisKKwkJCS8qIHVzZXIgZ2F0ZSBwYWdlcyBhcmUgcmVhZC1vbmx5ICovCisJCQlpZiAoIWlnbm9yZSAmJiB3cml0ZSkKIAkJCQlyZXR1cm4gaSA/IDogLUVGQVVMVDsKIAkJCWlmIChwZyA+IFRBU0tfU0laRSkKIAkJCQlwZ2QgPSBwZ2Rfb2Zmc2V0X2socGcpOwpAQCAtMTE5MCw4ICsxMTk5LDkgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCF2bWEgfHwgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9QRk5NQVApKQotCQkJCXx8ICEodm1fZmxhZ3MgJiB2bWEtPnZtX2ZsYWdzKSkKKwkJaWYgKCF2bWEgfHwKKwkJICAgICh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPIHwgVk1fUEZOTUFQKSkgfHwKKwkJICAgICghaWdub3JlICYmICEodm1fZmxhZ3MgJiB2bWEtPnZtX2ZsYWdzKSkpCiAJCQlyZXR1cm4gaSA/IDogLUVGQVVMVDsKIAogCQlpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpIHsKQEAgLTEyNjYsNiArMTI3NiwyMyBAQAogCX0gd2hpbGUgKGxlbik7CiAJcmV0dXJuIGk7CiB9CisKK2ludCBnZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIGludCB3cml0ZSwgaW50IGZvcmNlLAorCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKQoreworCWludCBmbGFncyA9IDA7CisKKwlpZiAod3JpdGUpCisJCWZsYWdzIHw9IEdVUF9GTEFHU19XUklURTsKKwlpZiAoZm9yY2UpCisJCWZsYWdzIHw9IEdVUF9GTEFHU19GT1JDRTsKKworCXJldHVybiBfX2dldF91c2VyX3BhZ2VzKHRzaywgbW0sCisJCQkJc3RhcnQsIGxlbiwgZmxhZ3MsCisJCQkJcGFnZXMsIHZtYXMpOworfQorCiBFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzKTsKIAogcHRlX3QgKmdldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCkBAIC0xMjk2LDE4ICsxMzIzLDE0IEBACiAJcHRlX3QgKnB0ZTsKIAlzcGlubG9ja190ICpwdGw7CiAKLQlyZXR2YWwgPSBtZW1fY2dyb3VwX2NoYXJnZShwYWdlLCBtbSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBvdXQ7Ci0KIAlyZXR2YWwgPSAtRUlOVkFMOwogCWlmIChQYWdlQW5vbihwYWdlKSkKLQkJZ290byBvdXRfdW5jaGFyZ2U7CisJCWdvdG8gb3V0OwogCXJldHZhbCA9IC1FTk9NRU07CiAJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAJcHRlID0gZ2V0X2xvY2tlZF9wdGUobW0sIGFkZHIsICZwdGwpOwogCWlmICghcHRlKQotCQlnb3RvIG91dF91bmNoYXJnZTsKKwkJZ290byBvdXQ7CiAJcmV0dmFsID0gLUVCVVNZOwogCWlmICghcHRlX25vbmUoKnB0ZSkpCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTEzMjMsOCArMTM0Niw2IEBACiAJcmV0dXJuIHJldHZhbDsKIG91dF91bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7Ci1vdXRfdW5jaGFyZ2U6Ci0JbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHBhZ2UpOwogb3V0OgogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xODU4LDYgKzE4NzksMTUgQEAKIAluZXdfcGFnZSA9IGFsbG9jX3BhZ2Vfdm1hKEdGUF9ISUdIVVNFUl9NT1ZBQkxFLCB2bWEsIGFkZHJlc3MpOwogCWlmICghbmV3X3BhZ2UpCiAJCWdvdG8gb29tOworCS8qCisJICogRG9uJ3QgbGV0IGFub3RoZXIgdGFzaywgd2l0aCBwb3NzaWJseSB1bmxvY2tlZCB2bWEsCisJICoga2VlcCB0aGUgbWxvY2tlZCBwYWdlLgorCSAqLworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCWxvY2tfcGFnZShvbGRfcGFnZSk7CS8qIGZvciBMUlUgbWFuaXB1bGF0aW9uICovCisJCWNsZWFyX3BhZ2VfbWxvY2sob2xkX3BhZ2UpOworCQl1bmxvY2tfcGFnZShvbGRfcGFnZSk7CisJfQogCWNvd191c2VyX3BhZ2UobmV3X3BhZ2UsIG9sZF9wYWdlLCBhZGRyZXNzLCB2bWEpOwogCV9fU2V0UGFnZVVwdG9kYXRlKG5ld19wYWdlKTsKIApAQCAtMTg4NiwxMSArMTkxNiwxMyBAQAogCQkgKiB0aHJlYWQgZG9pbmcgQ09XLgogCQkgKi8KIAkJcHRlcF9jbGVhcl9mbHVzaF9ub3RpZnkodm1hLCBhZGRyZXNzLCBwYWdlX3RhYmxlKTsKLQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnkpOwotCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOwotCQlscnVfY2FjaGVfYWRkX2FjdGl2ZShuZXdfcGFnZSk7CisJCVNldFBhZ2VTd2FwQmFja2VkKG5ld19wYWdlKTsKKwkJbHJ1X2NhY2hlX2FkZF9hY3RpdmVfb3JfdW5ldmljdGFibGUobmV3X3BhZ2UsIHZtYSk7CiAJCXBhZ2VfYWRkX25ld19hbm9uX3JtYXAobmV3X3BhZ2UsIHZtYSwgYWRkcmVzcyk7CiAKKy8vVE9ETzogIGlzIHRoaXMgc2FmZT8gIGRvX2Fub255bW91c19wYWdlKCkgZG9lcyBpdCB0aGlzIHdheS4KKwkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnkpOworCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOwogCQlpZiAob2xkX3BhZ2UpIHsKIAkJCS8qCiAJCQkgKiBPbmx5IGFmdGVyIHN3aXRjaGluZyB0aGUgcHRlIHRvIHRoZSBuZXcgcGFnZSBtYXkKQEAgLTIyODgsMTYgKzIzMjAsMTcgQEAKIAkJY291bnRfdm1fZXZlbnQoUEdNQUpGQVVMVCk7CiAJfQogCi0JaWYgKG1lbV9jZ3JvdXBfY2hhcmdlKHBhZ2UsIG1tLCBHRlBfS0VSTkVMKSkgewotCQlkZWxheWFjY3RfY2xlYXJfZmxhZyhERUxBWUFDQ1RfUEZfU1dBUElOKTsKLQkJcmV0ID0gVk1fRkFVTFRfT09NOwotCQlnb3RvIG91dDsKLQl9Ci0KIAltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7CisKIAlsb2NrX3BhZ2UocGFnZSk7CiAJZGVsYXlhY2N0X2NsZWFyX2ZsYWcoREVMQVlBQ0NUX1BGX1NXQVBJTik7CiAKKwlpZiAobWVtX2Nncm91cF9jaGFyZ2UocGFnZSwgbW0sIEdGUF9LRVJORUwpKSB7CisJCXJldCA9IFZNX0ZBVUxUX09PTTsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCWdvdG8gb3V0OworCX0KKwogCS8qCiAJICogQmFjayBvdXQgaWYgc29tZWJvZHkgZWxzZSBhbHJlYWR5IGZhdWx0ZWQgaW4gdGhpcyBwdGUuCiAJICovCkBAIC0yMzI0LDcgKzIzNTcsNyBAQAogCXBhZ2VfYWRkX2Fub25fcm1hcChwYWdlLCB2bWEsIGFkZHJlc3MpOwogCiAJc3dhcF9mcmVlKGVudHJ5KTsKLQlpZiAodm1fc3dhcF9mdWxsKCkpCisJaWYgKHZtX3N3YXBfZnVsbCgpIHx8ICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB8fCBQYWdlTWxvY2tlZChwYWdlKSkKIAkJcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2UocGFnZSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAKQEAgLTIzODIsNyArMjQxNSw4IEBACiAJaWYgKCFwdGVfbm9uZSgqcGFnZV90YWJsZSkpCiAJCWdvdG8gcmVsZWFzZTsKIAlpbmNfbW1fY291bnRlcihtbSwgYW5vbl9yc3MpOwotCWxydV9jYWNoZV9hZGRfYWN0aXZlKHBhZ2UpOworCVNldFBhZ2VTd2FwQmFja2VkKHBhZ2UpOworCWxydV9jYWNoZV9hZGRfYWN0aXZlX29yX3VuZXZpY3RhYmxlKHBhZ2UsIHZtYSk7CiAJcGFnZV9hZGRfbmV3X2Fub25fcm1hcChwYWdlLCB2bWEsIGFkZHJlc3MpOwogCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKIApAQCAtMjQyMyw2ICsyNDU3LDcgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlwdGVfdCBlbnRyeTsKIAlpbnQgYW5vbiA9IDA7CisJaW50IGNoYXJnZWQgPSAwOwogCXN0cnVjdCBwYWdlICpkaXJ0eV9wYWdlID0gTlVMTDsKIAlzdHJ1Y3Qgdm1fZmF1bHQgdm1mOwogCWludCByZXQ7CkBAIC0yNDYzLDYgKzI0OTgsMTggQEAKIAkJCQlyZXQgPSBWTV9GQVVMVF9PT007CiAJCQkJZ290byBvdXQ7CiAJCQl9CisJCQlpZiAobWVtX2Nncm91cF9jaGFyZ2UocGFnZSwgbW0sIEdGUF9LRVJORUwpKSB7CisJCQkJcmV0ID0gVk1fRkFVTFRfT09NOworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWNoYXJnZWQgPSAxOworCQkJLyoKKwkJCSAqIERvbid0IGxldCBhbm90aGVyIHRhc2ssIHdpdGggcG9zc2libHkgdW5sb2NrZWQgdm1hLAorCQkJICoga2VlcCB0aGUgbWxvY2tlZCBwYWdlLgorCQkJICovCisJCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkKKwkJCQljbGVhcl9wYWdlX21sb2NrKHZtZi5wYWdlKTsKIAkJCWNvcHlfdXNlcl9oaWdocGFnZShwYWdlLCB2bWYucGFnZSwgYWRkcmVzcywgdm1hKTsKIAkJCV9fU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCQl9IGVsc2UgewpAQCAtMjQ5NywxMSArMjU0NCw2IEBACiAKIAl9CiAKLQlpZiAobWVtX2Nncm91cF9jaGFyZ2UocGFnZSwgbW0sIEdGUF9LRVJORUwpKSB7Ci0JCXJldCA9IFZNX0ZBVUxUX09PTTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJcGFnZV90YWJsZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZCwgYWRkcmVzcywgJnB0bCk7CiAKIAkvKgpAQCAtMjUyMCwxMSArMjU2MiwxMSBAQAogCQllbnRyeSA9IG1rX3B0ZShwYWdlLCB2bWEtPnZtX3BhZ2VfcHJvdCk7CiAJCWlmIChmbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpCiAJCQllbnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpOwotCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CiAJCWlmIChhbm9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmNfbW1fY291bnRlcihtbSwgYW5vbl9yc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgbHJ1X2NhY2hlX2FkZF9hY3RpdmUocGFnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CisJCQlpbmNfbW1fY291bnRlcihtbSwgYW5vbl9yc3MpOworCQkJU2V0UGFnZVN3YXBCYWNrZWQocGFnZSk7CisJCQlscnVfY2FjaGVfYWRkX2FjdGl2ZV9vcl91bmV2aWN0YWJsZShwYWdlLCB2bWEpOworCQkJcGFnZV9hZGRfbmV3X2Fub25fcm1hcChwYWdlLCB2bWEsIGFkZHJlc3MpOwogCQl9IGVsc2UgewogCQkJaW5jX21tX2NvdW50ZXIobW0sIGZpbGVfcnNzKTsKIAkJCXBhZ2VfYWRkX2ZpbGVfcm1hcChwYWdlKTsKQEAgLTI1MzMsMTEgKzI1NzUsMTQgQEAKIAkJCQlnZXRfcGFnZShkaXJ0eV9wYWdlKTsKIAkJCX0KIAkJfQorLy9UT0RPOiAgaXMgdGhpcyBzYWZlPyAgZG9fYW5vbnltb3VzX3BhZ2UoKSBkb2VzIGl0IHRoaXMgd2F5LgorCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CiAKIAkJLyogbm8gbmVlZCB0byBpbnZhbGlkYXRlOiBhIG5vdC1wcmVzZW50IHBhZ2Ugd29uJ3QgYmUgY2FjaGVkICovCiAJCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7CiAJfSBlbHNlIHsKLQkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHBhZ2UpOworCQlpZiAoY2hhcmdlZCkKKwkJCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShwYWdlKTsKIAkJaWYgKGFub24pCiAJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCWVsc2UKQEAgLTI3NzIsMTkgKzI4MTcsOSBAQAogCWxlbiA9IERJVl9ST1VORF9VUChlbmQsIFBBR0VfU0laRSkgLSBhZGRyL1BBR0VfU0laRTsKIAlyZXQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgYWRkciwKIAkJCWxlbiwgd3JpdGUsIDAsIE5VTEwsIE5VTEwpOwotCWlmIChyZXQgPCAwKSB7Ci0JCS8qCi0JCSAgIFNVUyByZXF1aXJlIHN0cmFuZ2UgcmV0dXJuIHZhbHVlIHRvIG1sb2NrCi0JCSAgICAtIGludmFsaWQgYWRkciBnZW5lcmF0ZSB0byBFTk9NRU0uCi0JCSAgICAtIG91dCBvZiBtZW1vcnkgc2hvdWxkIGdlbmVyYXRlIEVBR0FJTi4KLQkJKi8KLQkJaWYgKHJldCA9PSAtRUZBVUxUKQotCQkJcmV0ID0gLUVOT01FTTsKLQkJZWxzZSBpZiAocmV0ID09IC1FTk9NRU0pCi0JCQlyZXQgPSAtRUFHQUlOOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCX0KLQlyZXR1cm4gcmV0ID09IGxlbiA/IDAgOiAtRU5PTUVNOworCXJldHVybiByZXQgPT0gbGVuID8gMCA6IC1FRkFVTFQ7CiB9CiAKICNpZiAhZGVmaW5lZChfX0hBVkVfQVJDSF9HQVRFX0FSRUEpCmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCA4OWZlZTJkLi42ODM3YTEwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21pZ3JhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlLWlzb2xhdGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKQEAgLTMyMywxMSArMzI0LDExIEBACiAJQlVHX09OKHBoeXNfc3RhcnRfcGZuICYgflBBR0VfU0VDVElPTl9NQVNLKTsKIAlCVUdfT04obnJfcGFnZXMgJSBQQUdFU19QRVJfU0VDVElPTik7CiAKLQlyZWxlYXNlX21lbV9yZWdpb24ocGh5c19zdGFydF9wZm4gPDwgUEFHRV9TSElGVCwgbnJfcGFnZXMgKiBQQUdFX1NJWkUpOwotCiAJc2VjdGlvbnNfdG9fcmVtb3ZlID0gbnJfcGFnZXMgLyBQQUdFU19QRVJfU0VDVElPTjsKIAlmb3IgKGkgPSAwOyBpIDwgc2VjdGlvbnNfdG9fcmVtb3ZlOyBpKyspIHsKIAkJdW5zaWduZWQgbG9uZyBwZm4gPSBwaHlzX3N0YXJ0X3BmbiArIGkqUEFHRVNfUEVSX1NFQ1RJT047CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihwZm4gPDwgUEFHRV9TSElGVCwKKwkJCQkgICBQQUdFU19QRVJfU0VDVElPTiA8PCBQQUdFX1NISUZUKTsKIAkJcmV0ID0gX19yZW1vdmVfc2VjdGlvbih6b25lLCBfX3Bmbl90b19zZWN0aW9uKHBmbikpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CkBAIC02NTcsOCArNjU4LDkgQEAKIAkJICogV2UgY2FuIHNraXAgZnJlZSBwYWdlcy4gQW5kIHdlIGNhbiBvbmx5IGRlYWwgd2l0aCBwYWdlcyBvbgogCQkgKiBMUlUuCiAJCSAqLwotCQlyZXQgPSBpc29sYXRlX2xydV9wYWdlKHBhZ2UsICZzb3VyY2UpOworCQlyZXQgPSBpc29sYXRlX2xydV9wYWdlKHBhZ2UpOwogCQlpZiAoIXJldCkgeyAvKiBTdWNjZXNzICovCisJCQlsaXN0X2FkZF90YWlsKCZwYWdlLT5scnUsICZzb3VyY2UpOwogCQkJbW92ZV9wYWdlcy0tOwogCQl9IGVsc2UgewogCQkJLyogQmVjYXN1ZSB3ZSBkb24ndCBoYXZlIGJpZyB6b25lLT5sb2NrLiB3ZSBzaG91bGQKQEAgLTg0OSwxMCArODUxLDE5IEBACiAKIAlyZXR1cm4gcmV0OwogfQorCitpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOworCisJc3RhcnRfcGZuID0gUEZOX0RPV04oc3RhcnQpOworCWVuZF9wZm4gPSBzdGFydF9wZm4gKyBQRk5fRE9XTihzaXplKTsKKwlyZXR1cm4gb2ZmbGluZV9wYWdlcyhzdGFydF9wZm4sIGVuZF9wZm4sIDEyMCAqIEhaKTsKK30KICNlbHNlCiBpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQogewogCXJldHVybiAtRUlOVkFMOwogfQotRVhQT1JUX1NZTUJPTF9HUEwocmVtb3ZlX21lbW9yeSk7CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KK0VYUE9SVF9TWU1CT0xfR1BMKHJlbW92ZV9tZW1vcnkpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCA4MzM2OTA1Li4zNmY0MjU3IDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYworKysgYi9tbS9tZW1wb2xpY3kuYwpAQCAtOTMsNiArOTMsOCBAQAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAvKiBJbnRlcm5hbCBmbGFncyAqLwogI2RlZmluZSBNUE9MX01GX0RJU0NPTlRJR19PSyAoTVBPTF9NRl9JTlRFUk5BTCA8PCAwKQkvKiBTa2lwIGNoZWNrcyBmb3IgY29udGludW91cyB2bWFzICovCiAjZGVmaW5lIE1QT0xfTUZfSU5WRVJUIChNUE9MX01GX0lOVEVSTkFMIDw8IDEpCQkvKiBJbnZlcnQgY2hlY2sgZm9yIG5vZGVtYXNrICovCkBAIC03NjIsOCArNzY0LDExIEBACiAJLyoKIAkgKiBBdm9pZCBtaWdyYXRpbmcgYSBwYWdlIHRoYXQgaXMgc2hhcmVkIHdpdGggb3RoZXJzLgogCSAqLwotCWlmICgoZmxhZ3MgJiBNUE9MX01GX01PVkVfQUxMKSB8fCBwYWdlX21hcGNvdW50KHBhZ2UpID09IDEpCi0JCWlzb2xhdGVfbHJ1X3BhZ2UocGFnZSwgcGFnZWxpc3QpOworCWlmICgoZmxhZ3MgJiBNUE9MX01GX01PVkVfQUxMKSB8fCBwYWdlX21hcGNvdW50KHBhZ2UpID09IDEpIHsKKwkJaWYgKCFpc29sYXRlX2xydV9wYWdlKHBhZ2UpKSB7CisJCQlsaXN0X2FkZF90YWlsKCZwYWdlLT5scnUsIHBhZ2VsaXN0KTsKKwkJfQorCX0KIH0KIAogc3RhdGljIHN0cnVjdCBwYWdlICpuZXdfbm9kZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5vZGUsIGludCAqKngpCkBAIC0yMTk3LDcgKzIyMDIsNyBAQAogCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKQogCQltZC0+c3dhcGNhY2hlKys7CiAKLQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkKKwlpZiAoUGFnZUFjdGl2ZShwYWdlKSB8fCBQYWdlVW5ldmljdGFibGUocGFnZSkpCiAJCW1kLT5hY3RpdmUrKzsKIAogCWlmIChQYWdlV3JpdGViYWNrKHBhZ2UpKQpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDJhODAxMzYuLjY2MDI5NDEgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTM3LDM2ICszNyw2IEBACiAjZGVmaW5lIGxydV90b19wYWdlKF9oZWFkKSAobGlzdF9lbnRyeSgoX2hlYWQpLT5wcmV2LCBzdHJ1Y3QgcGFnZSwgbHJ1KSkKIAogLyoKLSAqIElzb2xhdGUgb25lIHBhZ2UgZnJvbSB0aGUgTFJVIGxpc3RzLiBJZiBzdWNjZXNzZnVsIHB1dCBpdCBvbnRvCi0gKiB0aGUgaW5kaWNhdGVkIGxpc3Qgd2l0aCBlbGV2YXRlZCBwYWdlIGNvdW50LgotICoKLSAqIFJlc3VsdDoKLSAqICAtRUJVU1k6IHBhZ2Ugbm90IG9uIExSVSBsaXN0Ci0gKiAgMDogcGFnZSByZW1vdmVkIGZyb20gTFJVIGxpc3QgYW5kIGFkZGVkIHRvIHRoZSBzcGVjaWZpZWQgbGlzdC4KLSAqLwotaW50IGlzb2xhdGVfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0KQotewotCWludCByZXQgPSAtRUJVU1k7Ci0KLQlpZiAoUGFnZUxSVShwYWdlKSkgewotCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKLQotCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCWlmIChQYWdlTFJVKHBhZ2UpICYmIGdldF9wYWdlX3VubGVzc196ZXJvKHBhZ2UpKSB7Ci0JCQlyZXQgPSAwOwotCQkJQ2xlYXJQYWdlTFJVKHBhZ2UpOwotCQkJaWYgKFBhZ2VBY3RpdmUocGFnZSkpCi0JCQkJZGVsX3BhZ2VfZnJvbV9hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKLQkJCWVsc2UKLQkJCQlkZWxfcGFnZV9mcm9tX2luYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7Ci0JCQlsaXN0X2FkZF90YWlsKCZwYWdlLT5scnUsIHBhZ2VsaXN0KTsKLQkJfQotCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKICAqIG1pZ3JhdGVfcHJlcCgpIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgd2Ugc3RhcnQgY29tcGlsaW5nIGEgbGlzdCBvZiBwYWdlcwogICogdG8gYmUgbWlncmF0ZWQgdXNpbmcgaXNvbGF0ZV9scnVfcGFnZSgpLgogICovCkBAIC04MywyMyArNTMsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbW92ZV90b19scnUoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JaWYgKFBhZ2VBY3RpdmUocGFnZSkpIHsKLQkJLyoKLQkJICogbHJ1X2NhY2hlX2FkZF9hY3RpdmUgY2hlY2tzIHRoYXQKLQkJICogdGhlIFBHX2FjdGl2ZSBiaXQgaXMgb2ZmLgotCQkgKi8KLQkJQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOwotCQlscnVfY2FjaGVfYWRkX2FjdGl2ZShwYWdlKTsKLQl9IGVsc2UgewotCQlscnVfY2FjaGVfYWRkKHBhZ2UpOwotCX0KLQlwdXRfcGFnZShwYWdlKTsKLX0KLQogLyoKLSAqIEFkZCBpc29sYXRlZCBwYWdlcyBvbiB0aGUgbGlzdCBiYWNrIHRvIHRoZSBMUlUuCisgKiBBZGQgaXNvbGF0ZWQgcGFnZXMgb24gdGhlIGxpc3QgYmFjayB0byB0aGUgTFJVIHVuZGVyIHBhZ2UgbG9jaworICogdG8gYXZvaWQgbGVha2luZyBldmljdGFibGUgcGFnZXMgYmFjayBvbnRvIHVuZXZpY3RhYmxlIGxpc3QuCiAgKgogICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHB1dCBiYWNrLgogICovCkBAIC0xMTEsNyArNjcsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIHBhZ2UyLCBsLCBscnUpIHsKIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JCW1vdmVfdG9fbHJ1KHBhZ2UpOworCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOwogCQljb3VudCsrOwogCX0KIAlyZXR1cm4gY291bnQ7CkBAIC0zNzQsOCArMzMwLDYgQEAKIAlfX2luY196b25lX3BhZ2Vfc3RhdGUobmV3cGFnZSwgTlJfRklMRV9QQUdFUyk7CiAKIAlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0JaWYgKCFQYWdlU3dhcENhY2hlKG5ld3BhZ2UpKQotCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM4NSw2ICszMzksOCBAQAogICovCiBzdGF0aWMgdm9pZCBtaWdyYXRlX3BhZ2VfY29weShzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CisJaW50IGFub247CisKIAljb3B5X2hpZ2hwYWdlKG5ld3BhZ2UsIHBhZ2UpOwogCiAJaWYgKFBhZ2VFcnJvcihwYWdlKSkKQEAgLTM5Myw4ICszNDksMTEgQEAKIAkJU2V0UGFnZVJlZmVyZW5jZWQobmV3cGFnZSk7CiAJaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkKIAkJU2V0UGFnZVVwdG9kYXRlKG5ld3BhZ2UpOwotCWlmIChQYWdlQWN0aXZlKHBhZ2UpKQorCWlmIChUZXN0Q2xlYXJQYWdlQWN0aXZlKHBhZ2UpKSB7CisJCVZNX0JVR19PTihQYWdlVW5ldmljdGFibGUocGFnZSkpOwogCQlTZXRQYWdlQWN0aXZlKG5ld3BhZ2UpOworCX0gZWxzZQorCQl1bmV2aWN0YWJsZV9taWdyYXRlX3BhZ2UobmV3cGFnZSwgcGFnZSk7CiAJaWYgKFBhZ2VDaGVja2VkKHBhZ2UpKQogCQlTZXRQYWdlQ2hlY2tlZChuZXdwYWdlKTsKIAlpZiAoUGFnZU1hcHBlZFRvRGlzayhwYWdlKSkKQEAgLTQxMiwxNCArMzcxLDIwIEBACiAJCV9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzKG5ld3BhZ2UpOwogIAl9CiAKKwltbG9ja19taWdyYXRlX3BhZ2UobmV3cGFnZSwgcGFnZSk7CisKICNpZmRlZiBDT05GSUdfU1dBUAogCUNsZWFyUGFnZVN3YXBDYWNoZShwYWdlKTsKICNlbmRpZgotCUNsZWFyUGFnZUFjdGl2ZShwYWdlKTsKIAlDbGVhclBhZ2VQcml2YXRlKHBhZ2UpOwogCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7CisJLyogcGFnZS0+bWFwcGluZyBjb250YWlucyBhIGZsYWcgZm9yIFBhZ2VBbm9uKCkgKi8KKwlhbm9uID0gUGFnZUFub24ocGFnZSk7CiAJcGFnZS0+bWFwcGluZyA9IE5VTEw7CiAKKwlpZiAoIWFub24pIC8qIFRoaXMgcGFnZSB3YXMgcmVtb3ZlZCBmcm9tIHJhZGl4LXRyZWUuICovCisJCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShwYWdlKTsKKwogCS8qCiAJICogSWYgYW55IHdhaXRlcnMgaGF2ZSBhY2N1bXVsYXRlZCBvbiB0aGUgbmV3IHBhZ2UgdGhlbgogCSAqIHdha2UgdGhlbSB1cC4KQEAgLTU5NCw2ICs1NTksMTAgQEAKICAqCiAgKiBUaGUgbmV3IHBhZ2Ugd2lsbCBoYXZlIHJlcGxhY2VkIHRoZSBvbGQgcGFnZSBpZiB0aGlzIGZ1bmN0aW9uCiAgKiBpcyBzdWNjZXNzZnVsLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqICAgPCAwIC0gZXJyb3IgY29kZQorICogID09IDAgLSBzdWNjZXNzCiAgKi8KIHN0YXRpYyBpbnQgbW92ZV90b19uZXdfcGFnZShzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC02MTEsNiArNTgwLDggQEAKIAkvKiBQcmVwYXJlIG1hcHBpbmcgZm9yIHRoZSBuZXcgcGFnZS4qLwogCW5ld3BhZ2UtPmluZGV4ID0gcGFnZS0+aW5kZXg7CiAJbmV3cGFnZS0+bWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CisJaWYgKFBhZ2VTd2FwQmFja2VkKHBhZ2UpKQorCQlTZXRQYWdlU3dhcEJhY2tlZChuZXdwYWdlKTsKIAogCW1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CiAJaWYgKCFtYXBwaW5nKQpAQCAtNjU0LDkgKzYyNSwxMCBAQAogCWlmICghbmV3cGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxKQorCWlmIChwYWdlX2NvdW50KHBhZ2UpID09IDEpIHsKIAkJLyogcGFnZSB3YXMgZnJlZWQgZnJvbSB1bmRlciB1cy4gU28gd2UgYXJlIGRvbmUuICovCiAJCWdvdG8gbW92ZV9uZXdwYWdlOworCX0KIAogCWNoYXJnZSA9IG1lbV9jZ3JvdXBfcHJlcGFyZV9taWdyYXRpb24ocGFnZSwgbmV3cGFnZSk7CiAJaWYgKGNoYXJnZSA9PSAtRU5PTUVNKSB7CkBAIC03MzAsNyArNzAyLDYgQEAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIHVubG9jazoKLQogCXVubG9ja19wYWdlKHBhZ2UpOwogCiAJaWYgKHJjICE9IC1FQUdBSU4pIHsKQEAgLTc0MSwxNyArNzEyLDE5IEBACiAgCQkgKiByZXN0b3JlZC4KICAJCSAqLwogIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0gCQltb3ZlX3RvX2xydShwYWdlKTsKKwkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIAl9CiAKIG1vdmVfbmV3cGFnZToKIAlpZiAoIWNoYXJnZSkKIAkJbWVtX2Nncm91cF9lbmRfbWlncmF0aW9uKG5ld3BhZ2UpOworCiAJLyoKIAkgKiBNb3ZlIHRoZSBuZXcgcGFnZSB0byB0aGUgTFJVLiBJZiBtaWdyYXRpb24gd2FzIG5vdCBzdWNjZXNzZnVsCiAJICogdGhlbiB0aGlzIHdpbGwgZnJlZSB0aGUgcGFnZS4KIAkgKi8KLQltb3ZlX3RvX2xydShuZXdwYWdlKTsKKwlwdXRiYWNrX2xydV9wYWdlKG5ld3BhZ2UpOworCiAJaWYgKHJlc3VsdCkgewogCQlpZiAocmMpCiAJCQkqcmVzdWx0ID0gcmM7CkBAIC04NTgsOSArODMxLDExIEBACiAgKiBNb3ZlIGEgc2V0IG9mIHBhZ2VzIGFzIGluZGljYXRlZCBpbiB0aGUgcG0gYXJyYXkuIFRoZSBhZGRyCiAgKiBmaWVsZCBtdXN0IGJlIHNldCB0byB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBwYWdlIHRvIGJlIG1vdmVkCiAgKiBhbmQgdGhlIG5vZGUgbnVtYmVyIG11c3QgY29udGFpbiBhIHZhbGlkIHRhcmdldCBub2RlLgorICogVGhlIHBtIGFycmF5IGVuZHMgd2l0aCBub2RlID0gTUFYX05VTU5PREVTLgogICovCi1zdGF0aWMgaW50IGRvX21vdmVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdlX3RvX25vZGUgKnBtLAotCQkJCWludCBtaWdyYXRlX2FsbCkKK3N0YXRpYyBpbnQgZG9fbW92ZV9wYWdlX3RvX25vZGVfYXJyYXkoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICAgc3RydWN0IHBhZ2VfdG9fbm9kZSAqcG0sCisJCQkJICAgICAgaW50IG1pZ3JhdGVfYWxsKQogewogCWludCBlcnI7CiAJc3RydWN0IHBhZ2VfdG9fbm9kZSAqcHA7CkBAIC05MTQsNyArODg5LDkgQEAKIAkJCQkhbWlncmF0ZV9hbGwpCiAJCQlnb3RvIHB1dF9hbmRfc2V0OwogCi0JCWVyciA9IGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSwgJnBhZ2VsaXN0KTsKKwkJZXJyID0gaXNvbGF0ZV9scnVfcGFnZShwYWdlKTsKKwkJaWYgKCFlcnIpCisJCQlsaXN0X2FkZF90YWlsKCZwYWdlLT5scnUsICZwYWdlbGlzdCk7CiBwdXRfYW5kX3NldDoKIAkJLyoKIAkJICogRWl0aGVyIHJlbW92ZSB0aGUgZHVwbGljYXRlIHJlZmNvdW50IGZyb20KQEAgLTkyNiwzNiArOTAzLDExOCBAQAogCQlwcC0+c3RhdHVzID0gZXJyOwogCX0KIAorCWVyciA9IDA7CiAJaWYgKCFsaXN0X2VtcHR5KCZwYWdlbGlzdCkpCiAJCWVyciA9IG1pZ3JhdGVfcGFnZXMoJnBhZ2VsaXN0LCBuZXdfcGFnZV9ub2RlLAogCQkJCSh1bnNpZ25lZCBsb25nKXBtKTsKLQllbHNlCi0JCWVyciA9IC1FTk9FTlQ7CiAKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCXJldHVybiBlcnI7CiB9CiAKIC8qCi0gKiBEZXRlcm1pbmUgdGhlIG5vZGVzIG9mIGEgbGlzdCBvZiBwYWdlcy4gVGhlIGFkZHIgaW4gdGhlIHBtIGFycmF5Ci0gKiBtdXN0IGhhdmUgYmVlbiBzZXQgdG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB3aGljaCB3ZSB3YW50IHRvIGRldGVybWluZQotICogdGhlIG5vZGUgbnVtYmVyLgorICogTWlncmF0ZSBhbiBhcnJheSBvZiBwYWdlIGFkZHJlc3Mgb250byBhbiBhcnJheSBvZiBub2RlcyBhbmQgZmlsbAorICogdGhlIGNvcnJlc3BvbmRpbmcgYXJyYXkgb2Ygc3RhdHVzLgogICovCi1zdGF0aWMgaW50IGRvX3BhZ2VzX3N0YXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdlX3RvX25vZGUgKnBtKQorc3RhdGljIGludCBkb19wYWdlc19tb3ZlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCSBjb25zdCB2b2lkIF9fdXNlciAqIF9fdXNlciAqcGFnZXMsCisJCQkgY29uc3QgaW50IF9fdXNlciAqbm9kZXMsCisJCQkgaW50IF9fdXNlciAqc3RhdHVzLCBpbnQgZmxhZ3MpCiB7Ci0JZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXN0cnVjdCBwYWdlX3RvX25vZGUgKnBtID0gTlVMTDsKKwlub2RlbWFza190IHRhc2tfbm9kZXM7CisJaW50IGVyciA9IDA7CisJaW50IGk7CiAKLQlmb3IgKCA7IHBtLT5ub2RlICE9IE1BWF9OVU1OT0RFUzsgcG0rKykgewotCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JCWludCBlcnI7CisJdGFza19ub2RlcyA9IGNwdXNldF9tZW1zX2FsbG93ZWQodGFzayk7CisKKwkvKiBMaW1pdCBucl9wYWdlcyBzbyB0aGF0IHRoZSBtdWx0aXBsaWNhdGlvbiBtYXkgbm90IG92ZXJmbG93ICovCisJaWYgKG5yX3BhZ2VzID49IFVMT05HX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZV90b19ub2RlKSAtIDEpIHsKKwkJZXJyID0gLUUyQklHOworCQlnb3RvIG91dDsKKwl9CisKKwlwbSA9IHZtYWxsb2MoKG5yX3BhZ2VzICsgMSkgKiBzaXplb2Yoc3RydWN0IHBhZ2VfdG9fbm9kZSkpOworCWlmICghcG0pIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBHZXQgcGFyYW1ldGVycyBmcm9tIHVzZXIgc3BhY2UgYW5kIGluaXRpYWxpemUgdGhlIHBtCisJICogYXJyYXkuIFJldHVybiB2YXJpb3VzIGVycm9ycyBpZiB0aGUgdXNlciBkaWQgc29tZXRoaW5nIHdyb25nLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CisJCWNvbnN0IHZvaWQgX191c2VyICpwOwogCiAJCWVyciA9IC1FRkFVTFQ7Ci0JCXZtYSA9IGZpbmRfdm1hKG1tLCBwbS0+YWRkcik7CisJCWlmIChnZXRfdXNlcihwLCBwYWdlcyArIGkpKQorCQkJZ290byBvdXRfcG07CisKKwkJcG1baV0uYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7CisJCWlmIChub2RlcykgeworCQkJaW50IG5vZGU7CisKKwkJCWlmIChnZXRfdXNlcihub2RlLCBub2RlcyArIGkpKQorCQkJCWdvdG8gb3V0X3BtOworCisJCQllcnIgPSAtRU5PREVWOworCQkJaWYgKCFub2RlX3N0YXRlKG5vZGUsIE5fSElHSF9NRU1PUlkpKQorCQkJCWdvdG8gb3V0X3BtOworCisJCQllcnIgPSAtRUFDQ0VTOworCQkJaWYgKCFub2RlX2lzc2V0KG5vZGUsIHRhc2tfbm9kZXMpKQorCQkJCWdvdG8gb3V0X3BtOworCisJCQlwbVtpXS5ub2RlID0gbm9kZTsKKwkJfSBlbHNlCisJCQlwbVtpXS5ub2RlID0gMDsJLyogYW55dGhpbmcgdG8gbm90IG1hdGNoIE1BWF9OVU1OT0RFUyAqLworCX0KKwkvKiBFbmQgbWFya2VyICovCisJcG1bbnJfcGFnZXNdLm5vZGUgPSBNQVhfTlVNTk9ERVM7CisKKwllcnIgPSBkb19tb3ZlX3BhZ2VfdG9fbm9kZV9hcnJheShtbSwgcG0sIGZsYWdzICYgTVBPTF9NRl9NT1ZFX0FMTCk7CisJaWYgKGVyciA+PSAwKQorCQkvKiBSZXR1cm4gc3RhdHVzIGluZm9ybWF0aW9uICovCisJCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKQorCQkJaWYgKHB1dF91c2VyKHBtW2ldLnN0YXR1cywgc3RhdHVzICsgaSkpCisJCQkJZXJyID0gLUVGQVVMVDsKKworb3V0X3BtOgorCXZmcmVlKHBtKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogRGV0ZXJtaW5lIHRoZSBub2RlcyBvZiBhbiBhcnJheSBvZiBwYWdlcyBhbmQgc3RvcmUgaXQgaW4gYW4gYXJyYXkgb2Ygc3RhdHVzLgorICovCitzdGF0aWMgaW50IGRvX3BhZ2VzX3N0YXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCisJCQkgY29uc3Qgdm9pZCBfX3VzZXIgKiBfX3VzZXIgKnBhZ2VzLAorCQkJIGludCBfX3VzZXIgKnN0YXR1cykKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisJaW50IGVycjsKKworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CisJCWNvbnN0IHZvaWQgX191c2VyICpwOworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCQllcnIgPSAtRUZBVUxUOworCQlpZiAoZ2V0X3VzZXIocCwgcGFnZXMraSkpCisJCQlnb3RvIG91dDsKKwkJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwOworCisJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKIAkJaWYgKCF2bWEpCiAJCQlnb3RvIHNldF9zdGF0dXM7CiAKLQkJcGFnZSA9IGZvbGxvd19wYWdlKHZtYSwgcG0tPmFkZHIsIDApOworCQlwYWdlID0gZm9sbG93X3BhZ2Uodm1hLCBhZGRyLCAwKTsKIAogCQllcnIgPSBQVFJfRVJSKHBhZ2UpOwogCQlpZiAoSVNfRVJSKHBhZ2UpKQpAQCAtOTY4LDExICsxMDI3LDEzIEBACiAKIAkJZXJyID0gcGFnZV90b19uaWQocGFnZSk7CiBzZXRfc3RhdHVzOgotCQlwbS0+c3RhdHVzID0gZXJyOworCQlwdXRfdXNlcihlcnIsIHN0YXR1cytpKTsKIAl9CisJZXJyID0gMDsKIAorb3V0OgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKQEAgLTk4NCwxMiArMTA0NSw5IEBACiAJCQljb25zdCBpbnQgX191c2VyICpub2RlcywKIAkJCWludCBfX3VzZXIgKnN0YXR1cywgaW50IGZsYWdzKQogewotCWludCBlcnIgPSAwOwotCWludCBpOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQlub2RlbWFza190IHRhc2tfbm9kZXM7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0Jc3RydWN0IHBhZ2VfdG9fbm9kZSAqcG0gPSBOVUxMOworCWludCBlcnI7CiAKIAkvKiBDaGVjayBmbGFncyAqLwogCWlmIChmbGFncyAmIH4oTVBPTF9NRl9NT1ZFfE1QT0xfTUZfTU9WRV9BTEwpKQpAQCAtMTAyMSw3NSArMTA3OSwyMSBAQAogCSAgICAoY3VycmVudC0+dWlkICE9IHRhc2stPnN1aWQpICYmIChjdXJyZW50LT51aWQgIT0gdGFzay0+dWlkKSAmJgogCSAgICAhY2FwYWJsZShDQVBfU1lTX05JQ0UpKSB7CiAJCWVyciA9IC1FUEVSTTsKLQkJZ290byBvdXQyOworCQlnb3RvIG91dDsKIAl9CiAKICAJZXJyID0gc2VjdXJpdHlfdGFza19tb3ZlbWVtb3J5KHRhc2spOwogIAlpZiAoZXJyKQotIAkJZ290byBvdXQyOworCQlnb3RvIG91dDsKIAotCi0JdGFza19ub2RlcyA9IGNwdXNldF9tZW1zX2FsbG93ZWQodGFzayk7Ci0KLQkvKiBMaW1pdCBucl9wYWdlcyBzbyB0aGF0IHRoZSBtdWx0aXBsaWNhdGlvbiBtYXkgbm90IG92ZXJmbG93ICovCi0JaWYgKG5yX3BhZ2VzID49IFVMT05HX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZV90b19ub2RlKSAtIDEpIHsKLQkJZXJyID0gLUUyQklHOwotCQlnb3RvIG91dDI7CisJaWYgKG5vZGVzKSB7CisJCWVyciA9IGRvX3BhZ2VzX21vdmUobW0sIHRhc2ssIG5yX3BhZ2VzLCBwYWdlcywgbm9kZXMsIHN0YXR1cywKKwkJCQkgICAgZmxhZ3MpOworCX0gZWxzZSB7CisJCWVyciA9IGRvX3BhZ2VzX3N0YXQobW0sIG5yX3BhZ2VzLCBwYWdlcywgc3RhdHVzKTsKIAl9CiAKLQlwbSA9IHZtYWxsb2MoKG5yX3BhZ2VzICsgMSkgKiBzaXplb2Yoc3RydWN0IHBhZ2VfdG9fbm9kZSkpOwotCWlmICghcG0pIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXQyOwotCX0KLQotCS8qCi0JICogR2V0IHBhcmFtZXRlcnMgZnJvbSB1c2VyIHNwYWNlIGFuZCBpbml0aWFsaXplIHRoZSBwbQotCSAqIGFycmF5LiBSZXR1cm4gdmFyaW91cyBlcnJvcnMgaWYgdGhlIHVzZXIgZGlkIHNvbWV0aGluZyB3cm9uZy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewotCQljb25zdCB2b2lkIF9fdXNlciAqcDsKLQotCQllcnIgPSAtRUZBVUxUOwotCQlpZiAoZ2V0X3VzZXIocCwgcGFnZXMgKyBpKSkKLQkJCWdvdG8gb3V0OwotCi0JCXBtW2ldLmFkZHIgPSAodW5zaWduZWQgbG9uZylwOwotCQlpZiAobm9kZXMpIHsKLQkJCWludCBub2RlOwotCi0JCQlpZiAoZ2V0X3VzZXIobm9kZSwgbm9kZXMgKyBpKSkKLQkJCQlnb3RvIG91dDsKLQotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWlmICghbm9kZV9zdGF0ZShub2RlLCBOX0hJR0hfTUVNT1JZKSkKLQkJCQlnb3RvIG91dDsKLQotCQkJZXJyID0gLUVBQ0NFUzsKLQkJCWlmICghbm9kZV9pc3NldChub2RlLCB0YXNrX25vZGVzKSkKLQkJCQlnb3RvIG91dDsKLQotCQkJcG1baV0ubm9kZSA9IG5vZGU7Ci0JCX0gZWxzZQotCQkJcG1baV0ubm9kZSA9IDA7CS8qIGFueXRoaW5nIHRvIG5vdCBtYXRjaCBNQVhfTlVNTk9ERVMgKi8KLQl9Ci0JLyogRW5kIG1hcmtlciAqLwotCXBtW25yX3BhZ2VzXS5ub2RlID0gTUFYX05VTU5PREVTOwotCi0JaWYgKG5vZGVzKQotCQllcnIgPSBkb19tb3ZlX3BhZ2VzKG1tLCBwbSwgZmxhZ3MgJiBNUE9MX01GX01PVkVfQUxMKTsKLQllbHNlCi0JCWVyciA9IGRvX3BhZ2VzX3N0YXQobW0sIHBtKTsKLQotCWlmIChlcnIgPj0gMCkKLQkJLyogUmV0dXJuIHN0YXR1cyBpbmZvcm1hdGlvbiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykKLQkJCWlmIChwdXRfdXNlcihwbVtpXS5zdGF0dXMsIHN0YXR1cyArIGkpKQotCQkJCWVyciA9IC1FRkFVTFQ7Ci0KIG91dDoKLQl2ZnJlZShwbSk7Ci1vdXQyOgogCW1tcHV0KG1tKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbW0vbWxvY2suYyBiL21tL21sb2NrLmMKaW5kZXggMDFmYmU5My4uMDA4ZWE3MCAxMDA2NDQKLS0tIGEvbW0vbWxvY2suYworKysgYi9tbS9tbG9jay5jCkBAIC04LDEwICs4LDE4IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ybWFwLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogaW50IGNhbl9kb19tbG9jayh2b2lkKQogewpAQCAtMjMsMTcgKzMxLDM4MSBAQAogfQogRVhQT1JUX1NZTUJPTChjYW5fZG9fbWxvY2spOwogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorLyoKKyAqIE1sb2NrZWQgcGFnZXMgYXJlIG1hcmtlZCB3aXRoIFBhZ2VNbG9ja2VkKCkgZmxhZyBmb3IgZWZmaWNpZW50IHRlc3RpbmcKKyAqIGluIHZtc2NhbiBhbmQsIHBvc3NpYmx5LCB0aGUgZmF1bHQgcGF0aDsgYW5kIHRvIHN1cHBvcnQgc2VtaS1hY2N1cmF0ZQorICogc3RhdGlzdGljcy4KKyAqCisgKiBBbiBtbG9ja2VkIHBhZ2UgW1BhZ2VNbG9ja2VkKHBhZ2UpXSBpcyB1bmV2aWN0YWJsZS4gIEFzIHN1Y2gsIGl0IHdpbGwKKyAqIGJlIHBsYWNlZCBvbiB0aGUgTFJVICJ1bmV2aWN0YWJsZSIgbGlzdCwgcmF0aGVyIHRoYW4gdGhlIFtpbl1hY3RpdmUgbGlzdHMuCisgKiBUaGUgdW5ldmljdGFibGUgbGlzdCBpcyBhbiBMUlUgc2libGluZyBsaXN0IHRvIHRoZSBbaW5dYWN0aXZlIGxpc3RzLgorICogUGFnZVVuZXZpY3RhYmxlIGlzIHNldCB0byBpbmRpY2F0ZSB0aGUgdW5ldmljdGFibGUgc3RhdGUuCisgKgorICogV2hlbiBsYXp5IG1sb2NraW5nIHZpYSB2bXNjYW4sIGl0IGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCB0aGUKKyAqIHZtYSdzIFZNX0xPQ0tFRCBzdGF0dXMgaXMgbm90IGNvbmN1cnJlbnRseSBiZWluZyBtb2RpZmllZCwgb3RoZXJ3aXNlIHdlCisgKiBtYXkgaGF2ZSBtbG9ja2VkIGEgcGFnZSB0aGF0IGlzIGJlaW5nIG11bmxvY2tlZC4gU28gbGF6eSBtbG9jayBtdXN0IHRha2UKKyAqIHRoZSBtbWFwX3NlbSBmb3IgcmVhZCwgYW5kIHZlcmlmeSB0aGF0IHRoZSB2bWEgcmVhbGx5IGlzIGxvY2tlZAorICogKHNlZSBtbS9ybWFwLmMpLgorICovCisKKy8qCisgKiAgTFJVIGFjY291bnRpbmcgZm9yIGNsZWFyX3BhZ2VfbWxvY2soKQorICovCit2b2lkIF9fY2xlYXJfcGFnZV9tbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCisJaWYgKCFwYWdlLT5tYXBwaW5nKSB7CS8qIHRydW5jYXRlZCA/ICovCisJCXJldHVybjsKKwl9CisKKwlkZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX01MT0NLKTsKKwljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR0NMRUFSRUQpOworCWlmICghaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkgeworCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFBhZ2Ugbm90IG9uIHRoZSBMUlUgeWV0LiAgRmx1c2ggYWxsIHBhZ2V2ZWNzIGFuZCByZXRyeS4KKwkJICovCisJCWxydV9hZGRfZHJhaW5fYWxsKCk7CisJCWlmICghaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkKKwkJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CisJCWVsc2UgaWYgKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkKKwkJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHU1RSQU5ERUQpOworCisJfQorfQorCisvKgorICogTWFyayBwYWdlIGFzIG1sb2NrZWQgaWYgbm90IGFscmVhZHkuCisgKiBJZiBwYWdlIG9uIExSVSwgaXNvbGF0ZSBhbmQgcHV0YmFjayB0byBtb3ZlIHRvIHVuZXZpY3RhYmxlIGxpc3QuCisgKi8KK3ZvaWQgbWxvY2tfdm1hX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKworCWlmICghVGVzdFNldFBhZ2VNbG9ja2VkKHBhZ2UpKSB7CisJCWluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfTUxPQ0spOworCQljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR01MT0NLRUQpOworCQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpCisJCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOworCX0KK30KKworLyoKKyAqIGNhbGxlZCBmcm9tIG11bmxvY2soKS9tdW5tYXAoKSBwYXRoIHdpdGggcGFnZSBzdXBwb3NlZGx5IG9uIHRoZSBMUlUuCisgKgorICogTm90ZTogIHVubGlrZSBtbG9ja192bWFfcGFnZSgpLCB3ZSBjYW4ndCBqdXN0IGNsZWFyIHRoZSBQYWdlTWxvY2tlZAorICogW2luIHRyeV90b19tdW5sb2NrKCldIGFuZCB0aGVuIGF0dGVtcHQgdG8gaXNvbGF0ZSB0aGUgcGFnZS4gIFdlIG11c3QKKyAqIGlzb2xhdGUgdGhlIHBhZ2UgdG8ga2VlcCBvdGhlcnMgZnJvbSBtZXNzaW5nIHdpdGggaXRzIHVuZXZpY3RhYmxlCisgKiBhbmQgbWxvY2tlZCBzdGF0ZSB3aGlsZSB0cnlpbmcgdG8gbXVubG9jay4gIEhvd2V2ZXIsIHdlIHByZS1jbGVhciB0aGUKKyAqIG1sb2NrZWQgc3RhdGUgYW55d2F5IGFzIHdlIG1pZ2h0IGxvc2UgdGhlIGlzb2xhdGlvbiByYWNlIGFuZCB3ZSBtaWdodAorICogbm90IGdldCBhbm90aGVyIGNoYW5jZSB0byBjbGVhciBQYWdlTWxvY2tlZC4gIElmIHdlIHN1Y2Nlc3NmdWxseQorICogaXNvbGF0ZSB0aGUgcGFnZSBhbmQgdHJ5X3RvX211bmxvY2soKSBkZXRlY3RzIG90aGVyIFZNX0xPQ0tFRCB2bWFzCisgKiBtYXBwaW5nIHRoZSBwYWdlLCBpdCB3aWxsIHJlc3RvcmUgdGhlIFBhZ2VNbG9ja2VkIHN0YXRlLCB1bmxlc3MgdGhlIHBhZ2UKKyAqIGlzIG1hcHBlZCBpbiBhIG5vbi1saW5lYXIgdm1hLiAgU28sIHdlIGdvIGFoZWFkIGFuZCBTZXRQYWdlTWxvY2tlZCgpLAorICogcGVyaGFwcyByZWR1bmRhbnRseS4KKyAqIElmIHdlIGxvc2UgdGhlIGlzb2xhdGlvbiByYWNlLCBhbmQgdGhlIHBhZ2UgaXMgbWFwcGVkIGJ5IG90aGVyIFZNX0xPQ0tFRAorICogdm1hcywgd2UnbGwgZGV0ZWN0IHRoaXMgaW4gdm1zY2FuLS12aWEgdHJ5X3RvX211bmxvY2soKSBvciB0cnlfdG9fdW5tYXAoKQorICogZWl0aGVyIG9mIHdoaWNoIHdpbGwgcmVzdG9yZSB0aGUgUGFnZU1sb2NrZWQgc3RhdGUgYnkgY2FsbGluZworICogbWxvY2tfdm1hX3BhZ2UoKSBhYm92ZSwgaWYgaXQgY2FuIGdyYWIgdGhlIHZtYSdzIG1tYXAgc2VtLgorICovCitzdGF0aWMgdm9pZCBtdW5sb2NrX3ZtYV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisKKwlpZiAoVGVzdENsZWFyUGFnZU1sb2NrZWQocGFnZSkpIHsKKwkJZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9NTE9DSyk7CisJCWlmICghaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkgeworCQkJaW50IHJldCA9IHRyeV90b19tdW5sb2NrKHBhZ2UpOworCQkJLyoKKwkJCSAqIGRpZCB0cnlfdG9fdW5sb2NrKCkgc3VjY2VlZCBvciBwdW50PworCQkJICovCisJCQlpZiAocmV0ID09IFNXQVBfU1VDQ0VTUyB8fCByZXQgPT0gU1dBUF9BR0FJTikKKwkJCQljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR01VTkxPQ0tFRCk7CisKKwkJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogV2UgbG9zdCB0aGUgcmFjZS4gIGxldCB0cnlfdG9fdW5tYXAoKSBkZWFsCisJCQkgKiB3aXRoIGl0LiAgQXQgbGVhc3Qgd2UgZ2V0IHRoZSBwYWdlIHN0YXRlIGFuZAorCQkJICogbWxvY2sgc3RhdHMgcmlnaHQuICBIb3dldmVyLCBwYWdlIGlzIHN0aWxsIG9uCisJCQkgKiB0aGUgbm9yZWNsYWltIGxpc3QuICBXZSdsbCBmaXggdGhhdCB1cCB3aGVuCisJCQkgKiB0aGUgcGFnZSBpcyBldmVudHVhbGx5IGZyZWVkIG9yIHdlIHNjYW4gdGhlCisJCQkgKiBub3JlY2xhaW0gbGlzdC4KKwkJCSAqLworCQkJaWYgKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkKKwkJCQljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR1NUUkFOREVEKTsKKwkJCWVsc2UKKwkJCQljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR01VTkxPQ0tFRCk7CisJCX0KKwl9Cit9CisKKy8qKgorICogX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKSAtICBtbG9jay9tdW5sb2NrIGEgcmFuZ2Ugb2YgcGFnZXMgaW4gdGhlIHZtYS4KKyAqIEB2bWE6ICAgdGFyZ2V0IHZtYQorICogQHN0YXJ0OiBzdGFydCBhZGRyZXNzCisgKiBAZW5kOiAgIGVuZCBhZGRyZXNzCisgKiBAbWxvY2s6IDAgaW5kaWNhdGUgbXVubG9jaywgb3RoZXJ3aXNlIG1sb2NrLgorICoKKyAqIElmIEBtbG9jayA9PSAwLCB1bmxvY2sgYW4gbWxvY2tlZCByYW5nZTsKKyAqIGVsc2UgbWxvY2sgdGhlIHJhbmdlIG9mIHBhZ2VzLiAgVGhpcyB0YWtlcyBjYXJlIG9mIG1ha2luZyB0aGUgcGFnZXMgcHJlc2VudCAsCisgKiB0b28uCisgKgorICogcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBlcnJvci4KKyAqCisgKiB2bWEtPnZtX21tLT5tbWFwX3NlbSBtdXN0IGJlIGhlbGQgZm9yIGF0IGxlYXN0IHJlYWQuCisgKi8KK3N0YXRpYyBsb25nIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCSAgIGludCBtbG9jaykKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CisJdW5zaWduZWQgbG9uZyBhZGRyID0gc3RhcnQ7CisJc3RydWN0IHBhZ2UgKnBhZ2VzWzE2XTsgLyogMTYgZ2l2ZXMgYSByZWFzb25hYmxlIGJhdGNoICovCisJaW50IG5yX3BhZ2VzID0gKGVuZCAtIHN0YXJ0KSAvIFBBR0VfU0laRTsKKwlpbnQgcmV0OworCWludCBndXBfZmxhZ3MgPSAwOworCisJVk1fQlVHX09OKHN0YXJ0ICYgflBBR0VfTUFTSyk7CisJVk1fQlVHX09OKGVuZCAgICYgflBBR0VfTUFTSyk7CisJVk1fQlVHX09OKHN0YXJ0IDwgdm1hLT52bV9zdGFydCk7CisJVk1fQlVHX09OKGVuZCAgID4gdm1hLT52bV9lbmQpOworCVZNX0JVR19PTigoIXJ3c2VtX2lzX2xvY2tlZCgmbW0tPm1tYXBfc2VtKSkgJiYKKwkJICAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgIT0gMCkpOworCisJLyoKKwkgKiBtbG9jazogICBkb24ndCBwYWdlIHBvcHVsYXRlIGlmIHBhZ2UgaGFzIFBST1RfTk9ORSBwZXJtaXNzaW9uLgorCSAqIG11bmxvY2s6IHRoZSBwYWdlcyBhbHdheXMgZG8gbXVubG9jayBhbHRocm91Z2gKKwkgKiAgICAgICAgICBpdHMgaGFzIFBST1RfTk9ORSBwZXJtaXNzaW9uLgorCSAqLworCWlmICghbWxvY2spCisJCWd1cF9mbGFncyB8PSBHVVBfRkxBR1NfSUdOT1JFX1ZNQV9QRVJNSVNTSU9OUzsKKworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpCisJCWd1cF9mbGFncyB8PSBHVVBfRkxBR1NfV1JJVEU7CisKKwlscnVfYWRkX2RyYWluX2FsbCgpOwkvKiBwdXNoIGNhY2hlZCBwYWdlcyB0byBMUlUgKi8KKworCXdoaWxlIChucl9wYWdlcyA+IDApIHsKKwkJaW50IGk7CisKKwkJY29uZF9yZXNjaGVkKCk7CisKKwkJLyoKKwkJICogZ2V0X3VzZXJfcGFnZXMgbWFrZXMgcGFnZXMgcHJlc2VudCBpZiB3ZSBhcmUKKwkJICogc2V0dGluZyBtbG9jay4gYW5kIHRoaXMgZXh0cmEgcmVmZXJlbmNlIGNvdW50IHdpbGwKKwkJICogZGlzYWJsZSBtaWdyYXRpb24gb2YgdGhpcyBwYWdlLiAgSG93ZXZlciwgcGFnZSBtYXkKKwkJICogc3RpbGwgYmUgdHJ1bmNhdGVkIG91dCBmcm9tIHVuZGVyIHVzLgorCQkgKi8KKwkJcmV0ID0gX19nZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBtbSwgYWRkciwKKwkJCQltaW5fdChpbnQsIG5yX3BhZ2VzLCBBUlJBWV9TSVpFKHBhZ2VzKSksCisJCQkJZ3VwX2ZsYWdzLCBwYWdlcywgTlVMTCk7CisJCS8qCisJCSAqIFRoaXMgY2FuIGhhcHBlbiBmb3IsIGUuZy4sIFZNX05PTkxJTkVBUiByZWdpb25zIGJlZm9yZQorCQkgKiBhIHBhZ2UgaGFzIGJlZW4gYWxsb2NhdGVkIGFuZCBtYXBwZWQgYXQgYSBnaXZlbiBvZmZzZXQsCisJCSAqIG9yIGZvciBhZGRyZXNzZXMgdGhhdCBtYXAgYmV5b25kIGVuZCBvZiBhIGZpbGUuCisJCSAqIFdlJ2xsIG1sb2NrIHRoZSB0aGUgcGFnZXMgaWYvd2hlbiB0aGV5IGdldCBmYXVsdGVkIGluLgorCQkgKi8KKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQkvKgorCQkJICogV2Uga25vdyB0aGUgdm1hIGlzIHRoZXJlLCBzbyB0aGUgb25seSB0aW1lCisJCQkgKiB3ZSBjYW5ub3QgZ2V0IGEgc2luZ2xlIHBhZ2Ugc2hvdWxkIGJlIGFuCisJCQkgKiBlcnJvciAocmV0IDwgMCkgY2FzZS4KKwkJCSAqLworCQkJV0FSTl9PTigxKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbHJ1X2FkZF9kcmFpbigpOwkvKiBwdXNoIGNhY2hlZCBwYWdlcyB0byBMUlUgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgcmV0OyBpKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbaV07CisKKwkJCWxvY2tfcGFnZShwYWdlKTsKKwkJCS8qCisJCQkgKiBCZWNhdXNlIHdlIGxvY2sgcGFnZSBoZXJlIGFuZCBtaWdyYXRpb24gaXMgYmxvY2tlZAorCQkJICogYnkgdGhlIGVsZXZhdGVkIHJlZmVyZW5jZSwgd2UgbmVlZCBvbmx5IGNoZWNrIGZvcgorCQkJICogcGFnZSB0cnVuY2F0aW9uIChmaWxlLWNhY2hlIG9ubHkpLgorCQkJICovCisJCQlpZiAocGFnZS0+bWFwcGluZykgeworCQkJCWlmIChtbG9jaykKKwkJCQkJbWxvY2tfdm1hX3BhZ2UocGFnZSk7CisJCQkJZWxzZQorCQkJCQltdW5sb2NrX3ZtYV9wYWdlKHBhZ2UpOworCQkJfQorCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQlwdXRfcGFnZShwYWdlKTsJCS8qIHJlZiBmcm9tIGdldF91c2VyX3BhZ2VzKCkgKi8KKworCQkJLyoKKwkJCSAqIGhlcmUgd2UgYXNzdW1lIHRoYXQgZ2V0X3VzZXJfcGFnZXMoKSBoYXMgZ2l2ZW4gdXMKKwkJCSAqIGEgbGlzdCBvZiB2aXJ0dWFsbHkgY29udGlndW91cyBwYWdlcy4KKwkJCSAqLworCQkJYWRkciArPSBQQUdFX1NJWkU7CS8qIGZvciBuZXh0IGdldF91c2VyX3BhZ2VzKCkgKi8KKwkJCW5yX3BhZ2VzLS07CisJCX0KKwkJcmV0ID0gMDsKKwl9CisKKwlscnVfYWRkX2RyYWluX2FsbCgpOwkvKiB0byB1cGRhdGUgc3RhdHMgKi8KKworCXJldHVybiByZXQ7CS8qIGNvdW50IGVudGlyZSB2bWEgYXMgbG9ja2VkX3ZtICovCit9CisKKy8qCisgKiBjb252ZXJ0IGdldF91c2VyX3BhZ2VzKCkgcmV0dXJuIHZhbHVlIHRvIHBvc2l4IG1sb2NrKCkgZXJyb3IKKyAqLworc3RhdGljIGludCBfX21sb2NrX3Bvc2l4X2Vycm9yX3JldHVybihsb25nIHJldHZhbCkKK3sKKwlpZiAocmV0dmFsID09IC1FRkFVTFQpCisJCXJldHZhbCA9IC1FTk9NRU07CisJZWxzZSBpZiAocmV0dmFsID09IC1FTk9NRU0pCisJCXJldHZhbCA9IC1FQUdBSU47CisJcmV0dXJuIHJldHZhbDsKK30KKworI2Vsc2UgLyogQ09ORklHX1VORVZJQ1RBQkxFX0xSVSAqLworCisvKgorICogSnVzdCBtYWtlIHBhZ2VzIHByZXNlbnQgaWYgVk1fTE9DS0VELiAgTm8tb3AgaWYgdW5sb2NraW5nLgorICovCitzdGF0aWMgbG9uZyBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCQkgICBpbnQgbWxvY2spCit7CisJaWYgKG1sb2NrICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkKKwkJcmV0dXJuIG1ha2VfcGFnZXNfcHJlc2VudChzdGFydCwgZW5kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tbG9ja19wb3NpeF9lcnJvcl9yZXR1cm4obG9uZyByZXR2YWwpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfVU5FVklDVEFCTEVfTFJVICovCisKKy8qKgorICogbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgLSBtbG9jayBwYWdlcyBpbiBzcGVjaWZpZWQgdm1hIHJhbmdlLgorICogQHZtYSAtIHRoZSB2bWEgY29udGFpbmluZyB0aGUgc3BlY2ZpZWQgYWRkcmVzcyByYW5nZQorICogQHN0YXJ0IC0gc3RhcnRpbmcgYWRkcmVzcyBpbiBAdm1hIHRvIG1sb2NrCisgKiBAZW5kICAgLSBlbmQgYWRkcmVzcyBbKzFdIGluIEB2bWEgdG8gbWxvY2sKKyAqCisgKiBGb3IgbW1hcCgpL21yZW1hcCgpL2V4cGFuc2lvbiBvZiBtbG9ja2VkIHZtYS4KKyAqCisgKiByZXR1cm4gMCBvbiBzdWNjZXNzIGZvciAibm9ybWFsIiB2bWFzLgorICoKKyAqIHJldHVybiBudW1iZXIgb2YgcGFnZXMgWz4gMF0gdG8gYmUgcmVtb3ZlZCBmcm9tIGxvY2tlZF92bSBvbiBzdWNjZXNzCisgKiBvZiAic3BlY2lhbCIgdm1hcy4KKyAqCisgKiByZXR1cm4gbmVnYXRpdmUgZXJyb3IgaWYgdm1hIHNwYW5uaW5nIEBzdGFydC1AcmFuZ2UgZGlzYXBwZWFycyB3aGlsZQorICogbW1hcCBzZW1hcGhvcmUgaXMgZHJvcHBlZC4gIFVubGlrZWx5PworICovCitsb25nIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKKwlpbnQgbnJfcGFnZXMgPSAoZW5kIC0gc3RhcnQpIC8gUEFHRV9TSVpFOworCUJVR19PTighKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpKTsKKworCS8qCisJICogZmlsdGVyIHVubG9ja2FibGUgdm1hcworCSAqLworCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPIHwgVk1fUEZOTUFQKSkKKwkJZ290byBub19tbG9jazsKKworCWlmICghKCh2bWEtPnZtX2ZsYWdzICYgKFZNX0RPTlRFWFBBTkQgfCBWTV9SRVNFUlZFRCkpIHx8CisJCQlpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fAorCQkJdm1hID09IGdldF9nYXRlX3ZtYShjdXJyZW50KSkpIHsKKwkJbG9uZyBlcnJvcjsKKwkJZG93bmdyYWRlX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCisJCWVycm9yID0gX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCAxKTsKKworCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQkvKiB2bWEgY2FuIGNoYW5nZSBvciBkaXNhcHBlYXIgKi8KKwkJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwkJdm1hID0gZmluZF92bWEobW0sIHN0YXJ0KTsKKwkJLyogbm9uLU5VTEwgdm1hIG11c3QgY29udGFpbiBAc3RhcnQsIGJ1dCBuZWVkIHRvIGNoZWNrIEBlbmQgKi8KKwkJaWYgKCF2bWEgfHwgIGVuZCA+IHZtYS0+dm1fZW5kKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0dXJuIDA7CS8qIGhpZGUgb3RoZXIgZXJyb3JzIGZyb20gbW1hcCgpLCBldCBhbCAqLworCX0KKworCS8qCisJICogVXNlciBtYXBwZWQga2VybmVsIHBhZ2VzIG9yIGh1Z2UgcGFnZXM6CisJICogbWFrZSB0aGVzZSBwYWdlcyBwcmVzZW50IHRvIHBvcHVsYXRlIHRoZSBwdGVzLCBidXQKKwkgKiBmYWxsIHRocnUnIHRvIHJlc2V0IFZNX0xPQ0tFRC0tbm8gbmVlZCB0byB1bmxvY2ssIGFuZAorCSAqIHJldHVybiBucl9wYWdlcyBzbyB0aGVzZSBkb24ndCBnZXQgY291bnRlZCBhZ2FpbnN0IHRhc2sncworCSAqIGxvY2tlZCBsaW1pdC4gIGh1Z2UgcGFnZXMgYXJlIGFscmVhZHkgY291bnRlZCBhZ2FpbnN0CisJICogbG9ja2VkIHZtIGxpbWl0LgorCSAqLworCW1ha2VfcGFnZXNfcHJlc2VudChzdGFydCwgZW5kKTsKKworbm9fbWxvY2s6CisJdm1hLT52bV9mbGFncyAmPSB+Vk1fTE9DS0VEOwkvKiBhbmQgZG9uJ3QgY29tZSBiYWNrISAqLworCXJldHVybiBucl9wYWdlczsJCS8qIGVycm9yIG9yIHBhZ2VzIE5PVCBtbG9ja2VkICovCit9CisKKworLyoKKyAqIG11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgLSBtdW5sb2NrIGFsbCBwYWdlcyBpbiB0aGUgdm1hIHJhbmdlLicKKyAqIEB2bWEgLSB2bWEgY29udGFpbmluZyByYW5nZSB0byBiZSBtdW5sb2NrKCllZC4KKyAqIEBzdGFydCAtIHN0YXJ0IGFkZHJlc3MgaW4gQHZtYSBvZiB0aGUgcmFuZ2UKKyAqIEBlbmQgLSBlbmQgb2YgcmFuZ2UgaW4gQHZtYS4KKyAqCisgKiAgRm9yIG1yZW1hcCgpLCBtdW5tYXAoKSBhbmQgZXhpdCgpLgorICoKKyAqIENhbGxlZCB3aXRoIEB2bWEgVk1fTE9DS0VELgorICoKKyAqIFJldHVybnMgd2l0aCBWTV9MT0NLRUQgY2xlYXJlZC4gIENhbGxlcnMgbXVzdCBiZSBwcmVwYXJlZCB0bworICogZGVhbCB3aXRoIHRoaXMuCisgKgorICogV2UgZG9uJ3Qgc2F2ZSBhbmQgcmVzdG9yZSBWTV9MT0NLRUQgaGVyZSBiZWNhdXNlIHBhZ2VzIGFyZQorICogc3RpbGwgb24gbHJ1LiAgSW4gdW5tYXAgcGF0aCwgcGFnZXMgbWlnaHQgYmUgc2Nhbm5lZCBieSByZWNsYWltCisgKiBhbmQgcmUtbWxvY2tlZCBieSB0cnlfdG9fe211bmxvY2t8dW5tYXB9IGJlZm9yZSB3ZSB1bm1hcCBhbmQKKyAqIGZyZWUgdGhlbS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gZnJlZWluZyBtbG9ja2VkIHBhZ2VzLgorICovCit2b2lkIG11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdm1hLT52bV9mbGFncyAmPSB+Vk1fTE9DS0VEOworCV9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgMCk7Cit9CisKKy8qCisgKiBtbG9ja19maXh1cCAgLSBoYW5kbGUgbWxvY2tbYWxsXS9tdW5sb2NrW2FsbF0gcmVxdWVzdHMuCisgKgorICogRmlsdGVycyBvdXQgInNwZWNpYWwiIHZtYXMgLS0gVk1fTE9DS0VEIG5ldmVyIGdldHMgc2V0IGZvciB0aGVzZSwgYW5kCisgKiBtdW5sb2NrIGlzIGEgbm8tb3AuICBIb3dldmVyLCBmb3Igc29tZSBzcGVjaWFsIHZtYXMsIHdlIGdvIGFoZWFkIGFuZAorICogcG9wdWxhdGUgdGhlIHB0ZXMgdmlhIG1ha2VfcGFnZXNfcHJlc2VudCgpLgorICoKKyAqIEZvciB2bWFzIHRoYXQgcGFzcyB0aGUgZmlsdGVycywgbWVyZ2Uvc3BsaXQgYXMgYXBwcm9wcmlhdGUuCisgKi8KIHN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnByZXYsCiAJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGludCBuZXdmbGFncykKIHsKLQlzdHJ1Y3QgbW1fc3RydWN0ICogbW0gPSB2bWEtPnZtX21tOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKIAlwZ29mZl90IHBnb2ZmOwotCWludCBwYWdlczsKKwlpbnQgbnJfcGFnZXM7CiAJaW50IHJldCA9IDA7CisJaW50IGxvY2sgPSBuZXdmbGFncyAmIFZNX0xPQ0tFRDsKIAotCWlmIChuZXdmbGFncyA9PSB2bWEtPnZtX2ZsYWdzKSB7Ci0JCSpwcmV2ID0gdm1hOwotCQlnb3RvIG91dDsKKwlpZiAobmV3ZmxhZ3MgPT0gdm1hLT52bV9mbGFncyB8fAorCQkJKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9QRk5NQVApKSkKKwkJZ290byBvdXQ7CS8qIGRvbid0IHNldCBWTV9MT0NLRUQsICBkb24ndCBjb3VudCAqLworCisJaWYgKCh2bWEtPnZtX2ZsYWdzICYgKFZNX0RPTlRFWFBBTkQgfCBWTV9SRVNFUlZFRCkpIHx8CisJCQlpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fAorCQkJdm1hID09IGdldF9nYXRlX3ZtYShjdXJyZW50KSkgeworCQlpZiAobG9jaykKKwkJCW1ha2VfcGFnZXNfcHJlc2VudChzdGFydCwgZW5kKTsKKwkJZ290byBvdXQ7CS8qIGRvbid0IHNldCBWTV9MT0NLRUQsICBkb24ndCBjb3VudCAqLwogCX0KIAogCXBnb2ZmID0gdm1hLT52bV9wZ29mZiArICgoc3RhcnQgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUKTsKQEAgLTQ0LDggKzQxNiw2IEBACiAJCWdvdG8gc3VjY2VzczsKIAl9CiAKLQkqcHJldiA9IHZtYTsKLQogCWlmIChzdGFydCAhPSB2bWEtPnZtX3N0YXJ0KSB7CiAJCXJldCA9IHNwbGl0X3ZtYShtbSwgdm1hLCBzdGFydCwgMSk7CiAJCWlmIChyZXQpCkBAIC02MCwyNCArNDMwLDYxIEBACiAKIHN1Y2Nlc3M6CiAJLyoKKwkgKiBLZWVwIHRyYWNrIG9mIGFtb3VudCBvZiBsb2NrZWQgVk0uCisJICovCisJbnJfcGFnZXMgPSAoZW5kIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJaWYgKCFsb2NrKQorCQlucl9wYWdlcyA9IC1ucl9wYWdlczsKKwltbS0+bG9ja2VkX3ZtICs9IG5yX3BhZ2VzOworCisJLyoKIAkgKiB2bV9mbGFncyBpcyBwcm90ZWN0ZWQgYnkgdGhlIG1tYXBfc2VtIGhlbGQgaW4gd3JpdGUgbW9kZS4KIAkgKiBJdCdzIG9rYXkgaWYgdHJ5X3RvX3VubWFwX29uZSB1bm1hcHMgYSBwYWdlIGp1c3QgYWZ0ZXIgd2UKLQkgKiBzZXQgVk1fTE9DS0VELCBtYWtlX3BhZ2VzX3ByZXNlbnQgYmVsb3cgd2lsbCBicmluZyBpdCBiYWNrLgorCSAqIHNldCBWTV9MT0NLRUQsIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlIHdpbGwgYnJpbmcgaXQgYmFjay4KIAkgKi8KIAl2bWEtPnZtX2ZsYWdzID0gbmV3ZmxhZ3M7CiAKLQkvKgotCSAqIEtlZXAgdHJhY2sgb2YgYW1vdW50IG9mIGxvY2tlZCBWTS4KLQkgKi8KLQlwYWdlcyA9IChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVDsKLQlpZiAobmV3ZmxhZ3MgJiBWTV9MT0NLRUQpIHsKLQkJcGFnZXMgPSAtcGFnZXM7Ci0JCWlmICghKG5ld2ZsYWdzICYgVk1fSU8pKQotCQkJcmV0ID0gbWFrZV9wYWdlc19wcmVzZW50KHN0YXJ0LCBlbmQpOworCWlmIChsb2NrKSB7CisJCS8qCisJCSAqIG1tYXBfc2VtIGlzIGN1cnJlbnRseSBoZWxkIGZvciB3cml0ZS4gIERvd25ncmFkZSB0aGUgd3JpdGUKKwkJICogbG9jayB0byBhIHJlYWQgbG9jayBzbyB0aGF0IG90aGVyIGZhdWx0cywgbW1hcCBzY2FucywgLi4uCisJCSAqIHdoaWxlIHdlIGZhdWx0IGluIGFsbCBwYWdlcy4KKwkJICovCisJCWRvd25ncmFkZV93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKworCQlyZXQgPSBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIDEpOworCisJCS8qCisJCSAqIE5lZWQgdG8gcmVhY3F1aXJlIG1tYXAgc2VtIGluIHdyaXRlIG1vZGUsIGFzIG91ciBjYWxsZXJzCisJCSAqIGV4cGVjdCB0aGlzLiAgV2UgaGF2ZSBubyBzdXBwb3J0IGZvciBhdG9taWNhbGx5IHVwZ3JhZGluZworCQkgKiBhIHNlbSB0byB3cml0ZSwgc28gd2UgbmVlZCB0byBjaGVjayBmb3IgcmFuZ2VzIHdoaWxlIHNlbQorCQkgKiBpcyB1bmxvY2tlZC4KKwkJICovCisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCS8qIHZtYSBjYW4gY2hhbmdlIG9yIGRpc2FwcGVhciAqLworCQlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCQkqcHJldiA9IGZpbmRfdm1hKG1tLCBzdGFydCk7CisJCS8qIG5vbi1OVUxMICpwcmV2IG11c3QgY29udGFpbiBAc3RhcnQsIGJ1dCBuZWVkIHRvIGNoZWNrIEBlbmQgKi8KKwkJaWYgKCEoKnByZXYpIHx8IGVuZCA+ICgqcHJldiktPnZtX2VuZCkKKwkJCXJldCA9IC1FTk9NRU07CisJCWVsc2UgaWYgKHJldCA+IDApIHsKKwkJCW1tLT5sb2NrZWRfdm0gLT0gcmV0OworCQkJcmV0ID0gMDsKKwkJfSBlbHNlCisJCQlyZXQgPSBfX21sb2NrX3Bvc2l4X2Vycm9yX3JldHVybihyZXQpOyAvKiB0cmFuc2xhdGUgaWYgbmVlZGVkICovCisJfSBlbHNlIHsKKwkJLyoKKwkJICogVE9ETzogIGZvciB1bmxvY2tpbmcsIHBhZ2VzIHdpbGwgYWxyZWFkeSBiZSByZXNpZGVudCwgc28KKwkJICogd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGZvciBhbGxvY2F0aW9ucy9yZWNsYWltL3BhZ2VpbiwgLi4uCisJCSAqIEhvd2V2ZXIsIHVubG9ja2luZyBhIHZlcnkgbGFyZ2UgcmVnaW9uIGNhbiBzdGlsbCB0YWtlIGEKKwkJICogd2hpbGUuICBTaG91bGQgd2UgZG93bmdyYWRlIHRoZSBzZW1hcGhvcmUgZm9yIGJvdGggbG9jaworCQkgKiBBTkQgdW5sb2NrID8KKwkJICovCisJCV9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgMCk7CiAJfQogCi0JbW0tPmxvY2tlZF92bSAtPSBwYWdlczsKIG91dDoKKwkqcHJldiA9IHZtYTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggZTdhNWE2OC4uNzRmNGQxNSAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtNDEwLDcgKzQxMCw3IEBACiAJcmJfaW5zZXJ0X2NvbG9yKCZ2bWEtPnZtX3JiLCAmbW0tPm1tX3JiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fdm1hX2xpbmtfZmlsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyB2b2lkIF9fdm1hX2xpbmtfZmlsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgZmlsZSAqIGZpbGU7CiAKQEAgLTY2Miw4ICs2NjIsNiBAQAogICogSWYgdGhlIHZtYSBoYXMgYSAtPmNsb3NlIG9wZXJhdGlvbiB0aGVuIHRoZSBkcml2ZXIgcHJvYmFibHkgbmVlZHMgdG8gcmVsZWFzZQogICogcGVyLXZtYSByZXNvdXJjZXMsIHNvIHdlIGRvbid0IGF0dGVtcHQgdG8gbWVyZ2UgdGhvc2UuCiAgKi8KLSNkZWZpbmUgVk1fU1BFQ0lBTCAoVk1fSU8gfCBWTV9ET05URVhQQU5EIHwgVk1fUkVTRVJWRUQgfCBWTV9QRk5NQVApCi0KIHN0YXRpYyBpbmxpbmUgaW50IGlzX21lcmdlYWJsZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyB2bV9mbGFncykKIHsKQEAgLTk3Miw2ICs5NzAsNyBAQAogCQkJcmV0dXJuIC1FUEVSTTsKIAkJdm1fZmxhZ3MgfD0gVk1fTE9DS0VEOwogCX0KKwogCS8qIG1sb2NrIE1DTF9GVVRVUkU/ICovCiAJaWYgKHZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CiAJCXVuc2lnbmVkIGxvbmcgbG9ja2VkLCBsb2NrX2xpbWl0OwpAQCAtMTEzOSwxMCArMTEzOCwxMiBAQAogCSAqIFRoZSBWTV9TSEFSRUQgdGVzdCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzaG1lbV96ZXJvX3NldHVwCiAJICogd2lsbCBjcmVhdGUgdGhlIGZpbGUgb2JqZWN0IGZvciBhIHNoYXJlZCBhbm9ueW1vdXMgbWFwIGJlbG93LgogCSAqLwotCWlmICghZmlsZSAmJiAhKHZtX2ZsYWdzICYgVk1fU0hBUkVEKSAmJgotCSAgICB2bWFfbWVyZ2UobW0sIHByZXYsIGFkZHIsIGFkZHIgKyBsZW4sIHZtX2ZsYWdzLAotCQkJCQlOVUxMLCBOVUxMLCBwZ29mZiwgTlVMTCkpCi0JCWdvdG8gb3V0OworCWlmICghZmlsZSAmJiAhKHZtX2ZsYWdzICYgVk1fU0hBUkVEKSkgeworCQl2bWEgPSB2bWFfbWVyZ2UobW0sIHByZXYsIGFkZHIsIGFkZHIgKyBsZW4sIHZtX2ZsYWdzLAorCQkJCQlOVUxMLCBOVUxMLCBwZ29mZiwgTlVMTCk7CisJCWlmICh2bWEpCisJCQlnb3RvIG91dDsKKwl9CiAKIAkvKgogCSAqIERldGVybWluZSB0aGUgb2JqZWN0IGJlaW5nIG1hcHBlZCBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUKQEAgLTEyMjQsMTAgKzEyMjUsMTQgQEAKIAltbS0+dG90YWxfdm0gKz0gbGVuID4+IFBBR0VfU0hJRlQ7CiAJdm1fc3RhdF9hY2NvdW50KG1tLCB2bV9mbGFncywgZmlsZSwgbGVuID4+IFBBR0VfU0hJRlQpOwogCWlmICh2bV9mbGFncyAmIFZNX0xPQ0tFRCkgewotCQltbS0+bG9ja2VkX3ZtICs9IGxlbiA+PiBQQUdFX1NISUZUOwotCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciwgYWRkciArIGxlbik7Ci0JfQotCWlmICgoZmxhZ3MgJiBNQVBfUE9QVUxBVEUpICYmICEoZmxhZ3MgJiBNQVBfTk9OQkxPQ0spKQorCQkvKgorCQkgKiBtYWtlcyBwYWdlcyBwcmVzZW50OyBkb3duZ3JhZGVzLCBkcm9wcywgcmVhY3F1aXJlcyBtbWFwX3NlbQorCQkgKi8KKwkJbG9uZyBucl9wYWdlcyA9IG1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIGFkZHIsIGFkZHIgKyBsZW4pOworCQlpZiAobnJfcGFnZXMgPCAwKQorCQkJcmV0dXJuIG5yX3BhZ2VzOwkvKiB2bWEgZ29uZSEgKi8KKwkJbW0tPmxvY2tlZF92bSArPSAobGVuID4+IFBBR0VfU0hJRlQpIC0gbnJfcGFnZXM7CisJfSBlbHNlIGlmICgoZmxhZ3MgJiBNQVBfUE9QVUxBVEUpICYmICEoZmxhZ3MgJiBNQVBfTk9OQkxPQ0spKQogCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciwgYWRkciArIGxlbik7CiAJcmV0dXJuIGFkZHI7CiAKQEAgLTE1ODYsNyArMTU5MSw3IEBACiAgKiB2bWEgaXMgdGhlIGxhc3Qgb25lIHdpdGggYWRkcmVzcyA+IHZtYS0+dm1fZW5kLiAgSGF2ZSB0byBleHRlbmQgdm1hLgogICovCiAjaWZuZGVmIENPTkZJR19JQTY0Ci1zdGF0aWMgaW5saW5lCitzdGF0aWMKICNlbmRpZgogaW50IGV4cGFuZF91cHdhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC0xNjM2LDcgKzE2NDEsNyBAQAogLyoKICAqIHZtYSBpcyB0aGUgZmlyc3Qgb25lIHdpdGggYWRkcmVzcyA8IHZtYS0+dm1fc3RhcnQuICBIYXZlIHRvIGV4dGVuZCB2bWEuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGV4cGFuZF9kb3dud2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCitzdGF0aWMgaW50IGV4cGFuZF9kb3dud2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCWludCBlcnJvcjsKQEAgLTE2OTgsMTAgKzE3MDMsMTIgQEAKIAl2bWEgPSBmaW5kX3ZtYV9wcmV2KG1tLCBhZGRyLCAmcHJldik7CiAJaWYgKHZtYSAmJiAodm1hLT52bV9zdGFydCA8PSBhZGRyKSkKIAkJcmV0dXJuIHZtYTsKLQlpZiAoIXByZXYgfHwgZXhwYW5kX3N0YWNrKHByZXYsIGFkZHIpKQorCWlmIChleHBhbmRfc3RhY2socHJldiwgYWRkcikpCiAJCXJldHVybiBOVUxMOwotCWlmIChwcmV2LT52bV9mbGFncyAmIFZNX0xPQ0tFRCkKLQkJbWFrZV9wYWdlc19wcmVzZW50KGFkZHIsIHByZXYtPnZtX2VuZCk7CisJaWYgKHByZXYtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCWlmIChtbG9ja192bWFfcGFnZXNfcmFuZ2UocHJldiwgYWRkciwgcHJldi0+dm1fZW5kKSA8IDApCisJCQlyZXR1cm4gTlVMTDsJLyogdm1hIGdvbmUhICovCisJfQogCXJldHVybiBwcmV2OwogfQogI2Vsc2UKQEAgLTE3MjcsOCArMTczNCwxMCBAQAogCXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKIAlpZiAoZXhwYW5kX3N0YWNrKHZtYSwgYWRkcikpCiAJCXJldHVybiBOVUxMOwotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQotCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciwgc3RhcnQpOworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCWlmIChtbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBhZGRyLCBzdGFydCkgPCAwKQorCQkJcmV0dXJuIE5VTEw7CS8qIHZtYSBnb25lISAqLworCX0KIAlyZXR1cm4gdm1hOwogfQogI2VuZGlmCkBAIC0xNzQ3LDggKzE3NTYsNiBAQAogCQlsb25nIG5ycGFnZXMgPSB2bWFfcGFnZXModm1hKTsKIAogCQltbS0+dG90YWxfdm0gLT0gbnJwYWdlczsKLQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpCi0JCQltbS0+bG9ja2VkX3ZtIC09IG5ycGFnZXM7CiAJCXZtX3N0YXRfYWNjb3VudChtbSwgdm1hLT52bV9mbGFncywgdm1hLT52bV9maWxlLCAtbnJwYWdlcyk7CiAJCXZtYSA9IHJlbW92ZV92bWEodm1hKTsKIAl9IHdoaWxlICh2bWEpOwpAQCAtMTkxNCw2ICsxOTIxLDIwIEBACiAJdm1hID0gcHJldj8gcHJldi0+dm1fbmV4dDogbW0tPm1tYXA7CiAKIAkvKgorCSAqIHVubG9jayBhbnkgbWxvY2soKWVkIHJhbmdlcyBiZWZvcmUgZGV0YWNoaW5nIHZtYXMKKwkgKi8KKwlpZiAobW0tPmxvY2tlZF92bSkgeworCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnRtcCA9IHZtYTsKKwkJd2hpbGUgKHRtcCAmJiB0bXAtPnZtX3N0YXJ0IDwgZW5kKSB7CisJCQlpZiAodG1wLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQkJCW1tLT5sb2NrZWRfdm0gLT0gdm1hX3BhZ2VzKHRtcCk7CisJCQkJbXVubG9ja192bWFfcGFnZXNfYWxsKHRtcCk7CisJCQl9CisJCQl0bXAgPSB0bXAtPnZtX25leHQ7CisJCX0KKwl9CisKKwkvKgogCSAqIFJlbW92ZSB0aGUgdm1hJ3MsIGFuZCB1bm1hcCB0aGUgYWN0dWFsIHBhZ2VzCiAJICovCiAJZGV0YWNoX3ZtYXNfdG9fYmVfdW5tYXBwZWQobW0sIHZtYSwgcHJldiwgZW5kKTsKQEAgLTIwMjUsOCArMjA0Niw5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogQ2FuIHdlIGp1c3QgZXhwYW5kIGFuIG9sZCBwcml2YXRlIGFub255bW91cyBtYXBwaW5nPyAqLwotCWlmICh2bWFfbWVyZ2UobW0sIHByZXYsIGFkZHIsIGFkZHIgKyBsZW4sIGZsYWdzLAotCQkJCQlOVUxMLCBOVUxMLCBwZ29mZiwgTlVMTCkpCisJdm1hID0gdm1hX21lcmdlKG1tLCBwcmV2LCBhZGRyLCBhZGRyICsgbGVuLCBmbGFncywKKwkJCQkJTlVMTCwgTlVMTCwgcGdvZmYsIE5VTEwpOworCWlmICh2bWEpCiAJCWdvdG8gb3V0OwogCiAJLyoKQEAgLTIwNDgsOCArMjA3MCw4IEBACiBvdXQ6CiAJbW0tPnRvdGFsX3ZtICs9IGxlbiA+PiBQQUdFX1NISUZUOwogCWlmIChmbGFncyAmIFZNX0xPQ0tFRCkgewotCQltbS0+bG9ja2VkX3ZtICs9IGxlbiA+PiBQQUdFX1NISUZUOwotCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciwgYWRkciArIGxlbik7CisJCWlmICghbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgYWRkciwgYWRkciArIGxlbikpCisJCQltbS0+bG9ja2VkX3ZtICs9IChsZW4gPj4gUEFHRV9TSElGVCk7CiAJfQogCXJldHVybiBhZGRyOwogfQpAQCAtMjA2MCw3ICsyMDgyLDcgQEAKIHZvaWQgZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXN0cnVjdCBtbXVfZ2F0aGVyICp0bGI7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtbS0+bW1hcDsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAl1bnNpZ25lZCBsb25nIG5yX2FjY291bnRlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBlbmQ7CiAKQEAgLTIwNjgsNiArMjA5MCwxNSBAQAogCWFyY2hfZXhpdF9tbWFwKG1tKTsKIAltbXVfbm90aWZpZXJfcmVsZWFzZShtbSk7CiAKKwlpZiAobW0tPmxvY2tlZF92bSkgeworCQl2bWEgPSBtbS0+bW1hcDsKKwkJd2hpbGUgKHZtYSkgeworCQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpCisJCQkJbXVubG9ja192bWFfcGFnZXNfYWxsKHZtYSk7CisJCQl2bWEgPSB2bWEtPnZtX25leHQ7CisJCX0KKwl9CisJdm1hID0gbW0tPm1tYXA7CiAJbHJ1X2FkZF9kcmFpbigpOwogCWZsdXNoX2NhY2hlX21tKG1tKTsKIAl0bGIgPSB0bGJfZ2F0aGVyX21tdShtbSwgMSk7CmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jCmluZGV4IDFhNzc0MzkuLjU4YTI5MDggMTAwNjQ0Ci0tLSBhL21tL21yZW1hcC5jCisrKyBiL21tL21yZW1hcC5jCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAorI2luY2x1ZGUgImludGVybmFsLmgiCisKIHN0YXRpYyBwbWRfdCAqZ2V0X29sZF9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwZ2RfdCAqcGdkOwpAQCAtMjM4LDggKzI0MCw4IEBACiAJaWYgKHZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CiAJCW1tLT5sb2NrZWRfdm0gKz0gbmV3X2xlbiA+PiBQQUdFX1NISUZUOwogCQlpZiAobmV3X2xlbiA+IG9sZF9sZW4pCi0JCQltYWtlX3BhZ2VzX3ByZXNlbnQobmV3X2FkZHIgKyBvbGRfbGVuLAotCQkJCQkgICBuZXdfYWRkciArIG5ld19sZW4pOworCQkJbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKG5ld192bWEsIG5ld19hZGRyICsgb2xkX2xlbiwKKwkJCQkJCSAgICAgICBuZXdfYWRkciArIG5ld19sZW4pOwogCX0KIAogCXJldHVybiBuZXdfYWRkcjsKQEAgLTM3OSw3ICszODEsNyBAQAogCQkJdm1fc3RhdF9hY2NvdW50KG1tLCB2bWEtPnZtX2ZsYWdzLCB2bWEtPnZtX2ZpbGUsIHBhZ2VzKTsKIAkJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CiAJCQkJbW0tPmxvY2tlZF92bSArPSBwYWdlczsKLQkJCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciArIG9sZF9sZW4sCisJCQkJbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgYWRkciArIG9sZF9sZW4sCiAJCQkJCQkgICBhZGRyICsgbmV3X2xlbik7CiAJCQl9CiAJCQlyZXQgPSBhZGRyOwpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggZWQ3NWJjOS4uMjY5NmIyNCAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYworKysgYi9tbS9ub21tdS5jCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwogdm9pZCAqaGlnaF9tZW1vcnk7CiBzdHJ1Y3QgcGFnZSAqbWVtX21hcDsKIHVuc2lnbmVkIGxvbmcgbWF4X21hcG5yOwpAQCAtMTI4LDIwICsxMzAsMTYgQEAKIAlyZXR1cm4gUEFHRV9TSVpFIDw8IGNvbXBvdW5kX29yZGVyKHBhZ2UpOwogfQogCi0vKgotICogZ2V0IGEgbGlzdCBvZiBwYWdlcyBpbiBhbiBhZGRyZXNzIHJhbmdlIGJlbG9uZ2luZyB0byB0aGUgc3BlY2lmaWVkIHByb2Nlc3MKLSAqIGFuZCBpbmRpY2F0ZSB0aGUgVk1BIHRoYXQgY292ZXJzIGVhY2ggcGFnZQotICogLSB0aGlzIGlzIHBvdGVudGlhbGx5IGRvZGd5IGFzIHdlIG1heSBlbmQgaW5jcmVtZW50aW5nIHRoZSBwYWdlIGNvdW50IG9mIGEKLSAqICAgc2xhYiBwYWdlIG9yIGEgc2Vjb25kYXJ5IHBhZ2UgZnJvbSBhIGNvbXBvdW5kIHBhZ2UKLSAqIC0gZG9uJ3QgcGVybWl0IGFjY2VzcyB0byBWTUFzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdCwgc3VjaCBhcyBJL08gbWFwcGluZ3MKLSAqLwotaW50IGdldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuLCBpbnQgd3JpdGUsIGludCBmb3JjZSwKLQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKQoraW50IF9fZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIGludCBmbGFncywKKwkJc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcykKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAl1bnNpZ25lZCBsb25nIHZtX2ZsYWdzOwogCWludCBpOworCWludCB3cml0ZSA9ICEhKGZsYWdzICYgR1VQX0ZMQUdTX1dSSVRFKTsKKwlpbnQgZm9yY2UgPSAhIShmbGFncyAmIEdVUF9GTEFHU19GT1JDRSk7CisJaW50IGlnbm9yZSA9ICEhKGZsYWdzICYgR1VQX0ZMQUdTX0lHTk9SRV9WTUFfUEVSTUlTU0lPTlMpOwogCiAJLyogY2FsY3VsYXRlIHJlcXVpcmVkIHJlYWQgb3Igd3JpdGUgcGVybWlzc2lvbnMuCiAJICogLSBpZiAnZm9yY2UnIGlzIHNldCwgd2Ugb25seSByZXF1aXJlIHRoZSAiTUFZIiBmbGFncy4KQEAgLTE1Niw3ICsxNTQsNyBAQAogCiAJCS8qIHByb3RlY3Qgd2hhdCB3ZSBjYW4sIGluY2x1ZGluZyBjaGFyZGV2cyAqLwogCQlpZiAodm1hLT52bV9mbGFncyAmIChWTV9JTyB8IFZNX1BGTk1BUCkgfHwKLQkJICAgICEodm1fZmxhZ3MgJiB2bWEtPnZtX2ZsYWdzKSkKKwkJICAgICghaWdub3JlICYmICEodm1fZmxhZ3MgJiB2bWEtPnZtX2ZsYWdzKSkpCiAJCQlnb3RvIGZpbmlzaF9vcl9mYXVsdDsKIAogCQlpZiAocGFnZXMpIHsKQEAgLTE3NCw2ICsxNzIsMzAgQEAKIGZpbmlzaF9vcl9mYXVsdDoKIAlyZXR1cm4gaSA/IDogLUVGQVVMVDsKIH0KKworCisvKgorICogZ2V0IGEgbGlzdCBvZiBwYWdlcyBpbiBhbiBhZGRyZXNzIHJhbmdlIGJlbG9uZ2luZyB0byB0aGUgc3BlY2lmaWVkIHByb2Nlc3MKKyAqIGFuZCBpbmRpY2F0ZSB0aGUgVk1BIHRoYXQgY292ZXJzIGVhY2ggcGFnZQorICogLSB0aGlzIGlzIHBvdGVudGlhbGx5IGRvZGd5IGFzIHdlIG1heSBlbmQgaW5jcmVtZW50aW5nIHRoZSBwYWdlIGNvdW50IG9mIGEKKyAqICAgc2xhYiBwYWdlIG9yIGEgc2Vjb25kYXJ5IHBhZ2UgZnJvbSBhIGNvbXBvdW5kIHBhZ2UKKyAqIC0gZG9uJ3QgcGVybWl0IGFjY2VzcyB0byBWTUFzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdCwgc3VjaCBhcyBJL08gbWFwcGluZ3MKKyAqLworaW50IGdldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuLCBpbnQgd3JpdGUsIGludCBmb3JjZSwKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKQoreworCWludCBmbGFncyA9IDA7CisKKwlpZiAod3JpdGUpCisJCWZsYWdzIHw9IEdVUF9GTEFHU19XUklURTsKKwlpZiAoZm9yY2UpCisJCWZsYWdzIHw9IEdVUF9GTEFHU19GT1JDRTsKKworCXJldHVybiBfX2dldF91c2VyX3BhZ2VzKHRzaywgbW0sCisJCQkJc3RhcnQsIGxlbiwgZmxhZ3MsCisJCQkJcGFnZXMsIHZtYXMpOworfQogRVhQT1JUX1NZTUJPTChnZXRfdXNlcl9wYWdlcyk7CiAKIERFRklORV9SV0xPQ0sodm1saXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggMjRkZThiNi4uMjk3MGUzNSAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC03LDcgKzcsNyBAQAogICogQ29udGFpbnMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gd3JpdGluZyBiYWNrIGRpcnR5IHBhZ2VzIGF0IHRoZQogICogYWRkcmVzc19zcGFjZSBsZXZlbC4KICAqCi0gKiAxMEFwcjIwMDIJYWtwbUB6aXAuY29tLmF1CisgKiAxMEFwcjIwMDIJQW5kcmV3IE1vcnRvbgogICoJCUluaXRpYWwgdmVyc2lvbgogICovCiAKQEAgLTMyOSw5ICszMjksNyBAQAogCQlzdHJ1Y3Qgem9uZSAqeiA9CiAJCQkmTk9ERV9EQVRBKG5vZGUpLT5ub2RlX3pvbmVzW1pPTkVfSElHSE1FTV07CiAKLQkJeCArPSB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfRlJFRV9QQUdFUykKLQkJCSsgem9uZV9wYWdlX3N0YXRlKHosIE5SX0lOQUNUSVZFKQotCQkJKyB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfQUNUSVZFKTsKKwkJeCArPSB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfRlJFRV9QQUdFUykgKyB6b25lX2xydV9wYWdlcyh6KTsKIAl9CiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgbnVtYmVyIG9mIGhpZ2htZW0gcGFnZXMgaXMgbmV2ZXIgbGFyZ2VyCkBAIC0zNTUsOSArMzUzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHg7CiAKLQl4ID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUykKLQkJKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRSkKLQkJKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkUpOworCXggPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKSArIGdsb2JhbF9scnVfcGFnZXMoKTsKIAogCWlmICghdm1faGlnaG1lbV9pc19kaXJ0eWFibGUpCiAJCXggLT0gaGlnaG1lbV9kaXJ0eWFibGVfbWVtb3J5KHgpOwpAQCAtODc2LDYgKzg3Miw3IEBACiAJcGdvZmZfdCBlbmQ7CQkvKiBJbmNsdXNpdmUgKi8KIAlpbnQgc2Nhbm5lZCA9IDA7CiAJaW50IHJhbmdlX3dob2xlID0gMDsKKwlsb25nIG5yX3RvX3dyaXRlID0gd2JjLT5ucl90b193cml0ZTsKIAogCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgewogCQl3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gPSAxOwpAQCAtOTM5LDcgKzkzNiw3IEBACiAJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCQkJcmV0ID0gMDsKIAkJCX0KLQkJCWlmIChyZXQgfHwgKC0tKHdiYy0+bnJfdG9fd3JpdGUpIDw9IDApKQorCQkJaWYgKHJldCB8fCAoLS1ucl90b193cml0ZSA8PSAwKSkKIAkJCQlkb25lID0gMTsKIAkJCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgewogCQkJCXdiYy0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbiA9IDE7CkBAIC05NTgsMTEgKzk1NSwxMiBAQAogCQlpbmRleCA9IDA7CiAJCWdvdG8gcmV0cnk7CiAJfQotCWlmICh3YmMtPnJhbmdlX2N5Y2xpYyB8fCAocmFuZ2Vfd2hvbGUgJiYgd2JjLT5ucl90b193cml0ZSA+IDApKQotCQltYXBwaW5nLT53cml0ZWJhY2tfaW5kZXggPSBpbmRleDsKKwlpZiAoIXdiYy0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUpIHsKKwkJaWYgKHdiYy0+cmFuZ2VfY3ljbGljIHx8IChyYW5nZV93aG9sZSAmJiBucl90b193cml0ZSA+IDApKQorCQkJbWFwcGluZy0+d3JpdGViYWNrX2luZGV4ID0gaW5kZXg7CisJCXdiYy0+bnJfdG9fd3JpdGUgPSBucl90b193cml0ZTsKKwl9CiAKLQlpZiAod2JjLT5yYW5nZV9jb250KQotCQl3YmMtPnJhbmdlX3N0YXJ0ID0gaW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVDsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTCh3cml0ZV9jYWNoZV9wYWdlcyk7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggMjdiODY4MS4uZDBhMjQwZiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZmF1bHQtaW5qZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZS1pc29sYXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZV9jZ3JvdXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z29iamVjdHMuaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgpAQCAtMjIzLDE3ICsyMjMsMTIgQEAKIAogc3RhdGljIHZvaWQgYmFkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jdm9pZCAqcGMgPSBwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKTsKLQogCXByaW50ayhLRVJOX0VNRVJHICJCYWQgcGFnZSBzdGF0ZSBpbiBwcm9jZXNzICclcydcbiIgS0VSTl9FTUVSRwogCQkicGFnZTolcCBmbGFnczoweCUwKmx4IG1hcHBpbmc6JXAgbWFwY291bnQ6JWQgY291bnQ6JWRcbiIsCiAJCWN1cnJlbnQtPmNvbW0sIHBhZ2UsIChpbnQpKDIqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSwKIAkJKHVuc2lnbmVkIGxvbmcpcGFnZS0+ZmxhZ3MsIHBhZ2UtPm1hcHBpbmcsCiAJCXBhZ2VfbWFwY291bnQocGFnZSksIHBhZ2VfY291bnQocGFnZSkpOwotCWlmIChwYykgewotCQlwcmludGsoS0VSTl9FTUVSRyAiY2dyb3VwOiVwXG4iLCBwYyk7Ci0JCXBhZ2VfcmVzZXRfYmFkX2Nncm91cChwYWdlKTsKLQl9CisKIAlwcmludGsoS0VSTl9FTUVSRyAiVHJ5aW5nIHRvIGZpeCBpdCB1cCwgYnV0IGEgcmVib290IGlzIG5lZWRlZFxuIgogCQlLRVJOX0VNRVJHICJCYWNrdHJhY2U6XG4iKTsKIAlkdW1wX3N0YWNrKCk7CkBAIC00NTQsMTQgKzQ0OSwxNiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBmcmVlX3BhZ2VzX2NoZWNrKHN0cnVjdCBwYWdlICpwYWdlKQogeworCWZyZWVfcGFnZV9tbG9jayhwYWdlKTsKIAlpZiAodW5saWtlbHkocGFnZV9tYXBjb3VudChwYWdlKSB8CiAJCShwYWdlLT5tYXBwaW5nICE9IE5VTEwpICB8Ci0JCShwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKSAhPSBOVUxMKSB8CiAJCShwYWdlX2NvdW50KHBhZ2UpICE9IDApICB8CiAJCShwYWdlLT5mbGFncyAmIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfRlJFRSkpKQogCQliYWRfcGFnZShwYWdlKTsKIAlpZiAoUGFnZURpcnR5KHBhZ2UpKQogCQlfX0NsZWFyUGFnZURpcnR5KHBhZ2UpOworCWlmIChQYWdlU3dhcEJhY2tlZChwYWdlKSkKKwkJX19DbGVhclBhZ2VTd2FwQmFja2VkKHBhZ2UpOwogCS8qCiAJICogRm9yIG5vdywgd2UgcmVwb3J0IGlmIFBHX3Jlc2VydmVkIHdhcyBmb3VuZCBzZXQsIGJ1dCBkbyBub3QKIAkgKiBjbGVhciBpdCwgYW5kIGRvIG5vdCBmcmVlIHRoZSBwYWdlLiAgQnV0IHdlIHNoYWxsIHNvb24gbmVlZApAQCAtNjAwLDcgKzU5Nyw2IEBACiB7CiAJaWYgKHVubGlrZWx5KHBhZ2VfbWFwY291bnQocGFnZSkgfAogCQkocGFnZS0+bWFwcGluZyAhPSBOVUxMKSAgfAotCQkocGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSkgIT0gTlVMTCkgfAogCQkocGFnZV9jb3VudChwYWdlKSAhPSAwKSAgfAogCQkocGFnZS0+ZmxhZ3MgJiBQQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVApKSkKIAkJYmFkX3BhZ2UocGFnZSk7CkBAIC02MTQsNyArNjEwLDExIEBACiAKIAlwYWdlLT5mbGFncyAmPSB+KDEgPDwgUEdfdXB0b2RhdGUgfCAxIDw8IFBHX2Vycm9yIHwgMSA8PCBQR19yZWNsYWltIHwKIAkJCTEgPDwgUEdfcmVmZXJlbmNlZCB8IDEgPDwgUEdfYXJjaF8xIHwKLQkJCTEgPDwgUEdfb3duZXJfcHJpdl8xIHwgMSA8PCBQR19tYXBwZWR0b2Rpc2spOworCQkJMSA8PCBQR19vd25lcl9wcml2XzEgfCAxIDw8IFBHX21hcHBlZHRvZGlzaworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJCXwgMSA8PCBQR19tbG9ja2VkCisjZW5kaWYKKwkJCSk7CiAJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKIAlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwogCkBAIC0xODYyLDEwICsxODYyLDIxIEBACiAJCX0KIAl9CiAKLQlwcmludGsoIkFjdGl2ZTolbHUgaW5hY3RpdmU6JWx1IGRpcnR5OiVsdSB3cml0ZWJhY2s6JWx1IHVuc3RhYmxlOiVsdVxuIgorCXByaW50aygiQWN0aXZlX2Fub246JWx1IGFjdGl2ZV9maWxlOiVsdSBpbmFjdGl2ZV9hbm9uOiVsdVxuIgorCQkiIGluYWN0aXZlX2ZpbGU6JWx1IgorLy9UT0RPOiAgY2hlY2svYWRqdXN0IGxpbmUgbGVuZ3RocworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJIiB1bmV2aWN0YWJsZTolbHUiCisjZW5kaWYKKwkJIiBkaXJ0eTolbHUgd3JpdGViYWNrOiVsdSB1bnN0YWJsZTolbHVcbiIKIAkJIiBmcmVlOiVsdSBzbGFiOiVsdSBtYXBwZWQ6JWx1IHBhZ2V0YWJsZXM6JWx1IGJvdW5jZTolbHVcbiIsCi0JCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRSksCi0JCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFKSwKKwkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkVfRklMRSksCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFX0FOT04pLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9GSUxFKSwKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VORVZJQ1RBQkxFKSwKKyNlbmRpZgogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfV1JJVEVCQUNLKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSwKQEAgLTE4ODgsOCArMTg5OSwxMyBAQAogCQkJIiBtaW46JWx1a0IiCiAJCQkiIGxvdzolbHVrQiIKIAkJCSIgaGlnaDolbHVrQiIKLQkJCSIgYWN0aXZlOiVsdWtCIgotCQkJIiBpbmFjdGl2ZTolbHVrQiIKKwkJCSIgYWN0aXZlX2Fub246JWx1a0IiCisJCQkiIGluYWN0aXZlX2Fub246JWx1a0IiCisJCQkiIGFjdGl2ZV9maWxlOiVsdWtCIgorCQkJIiBpbmFjdGl2ZV9maWxlOiVsdWtCIgorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJCSIgdW5ldmljdGFibGU6JWx1a0IiCisjZW5kaWYKIAkJCSIgcHJlc2VudDolbHVrQiIKIAkJCSIgcGFnZXNfc2Nhbm5lZDolbHUiCiAJCQkiIGFsbF91bnJlY2xhaW1hYmxlPyAlcyIKQEAgLTE4OTksOCArMTkxNSwxMyBAQAogCQkJSyh6b25lLT5wYWdlc19taW4pLAogCQkJSyh6b25lLT5wYWdlc19sb3cpLAogCQkJSyh6b25lLT5wYWdlc19oaWdoKSwKLQkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSkpLAotCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpKSwKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSkpLAorCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfRklMRSkpLAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1VORVZJQ1RBQkxFKSksCisjZW5kaWYKIAkJCUsoem9uZS0+cHJlc2VudF9wYWdlcyksCiAJCQl6b25lLT5wYWdlc19zY2FubmVkLAogCQkJKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkgPyAieWVzIiA6ICJubyIpCkBAIC0zNDEwLDEwICszNDMxLDEyIEBACiAJcGdkYXQtPm5yX3pvbmVzID0gMDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwZ2RhdC0+a3N3YXBkX3dhaXQpOwogCXBnZGF0LT5rc3dhcGRfbWF4X29yZGVyID0gMDsKKwlwZ2RhdF9wYWdlX2Nncm91cF9pbml0KHBnZGF0KTsKIAkKIAlmb3IgKGogPSAwOyBqIDwgTUFYX05SX1pPTkVTOyBqKyspIHsKIAkJc3RydWN0IHpvbmUgKnpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIGo7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgcmVhbHNpemUsIG1lbW1hcF9wYWdlczsKKwkJZW51bSBscnVfbGlzdCBsOwogCiAJCXNpemUgPSB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZShuaWQsIGosIHpvbmVzX3NpemUpOwogCQlyZWFsc2l6ZSA9IHNpemUgLSB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKG5pZCwgaiwKQEAgLTM0MjgsOCArMzQ1MSw4IEBACiAJCQlQQUdFX0FMSUdOKHNpemUgKiBzaXplb2Yoc3RydWN0IHBhZ2UpKSA+PiBQQUdFX1NISUZUOwogCQlpZiAocmVhbHNpemUgPj0gbWVtbWFwX3BhZ2VzKSB7CiAJCQlyZWFsc2l6ZSAtPSBtZW1tYXBfcGFnZXM7Ci0JCQltbWluaXRfZHByaW50ayhNTUlOSVRfVFJBQ0UsICJtZW1tYXBfaW5pdCIsCi0JCQkJIiVzIHpvbmU6ICVsdSBwYWdlcyB1c2VkIGZvciBtZW1tYXBcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSIgICVzIHpvbmU6ICVsdSBwYWdlcyB1c2VkIGZvciBtZW1tYXBcbiIsCiAJCQkJem9uZV9uYW1lc1tqXSwgbWVtbWFwX3BhZ2VzKTsKIAkJfSBlbHNlCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0zNDM5LDggKzM0NjIsNyBAQAogCQkvKiBBY2NvdW50IGZvciByZXNlcnZlZCBwYWdlcyAqLwogCQlpZiAoaiA9PSAwICYmIHJlYWxzaXplID4gZG1hX3Jlc2VydmUpIHsKIAkJCXJlYWxzaXplIC09IGRtYV9yZXNlcnZlOwotCQkJbW1pbml0X2RwcmludGsoTU1JTklUX1RSQUNFLCAibWVtbWFwX2luaXQiLAotCQkJCQkiJXMgem9uZTogJWx1IHBhZ2VzIHJlc2VydmVkXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMgem9uZTogJWx1IHBhZ2VzIHJlc2VydmVkXG4iLAogCQkJCQl6b25lX25hbWVzWzBdLCBkbWFfcmVzZXJ2ZSk7CiAJCX0KIApAQCAtMzQ2NSwxMCArMzQ4NywxNCBAQAogCQl6b25lLT5wcmV2X3ByaW9yaXR5ID0gREVGX1BSSU9SSVRZOwogCiAJCXpvbmVfcGNwX2luaXQoem9uZSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZ6b25lLT5hY3RpdmVfbGlzdCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZ6b25lLT5pbmFjdGl2ZV9saXN0KTsKLQkJem9uZS0+bnJfc2Nhbl9hY3RpdmUgPSAwOwotCQl6b25lLT5ucl9zY2FuX2luYWN0aXZlID0gMDsKKwkJZm9yX2VhY2hfbHJ1KGwpIHsKKwkJCUlOSVRfTElTVF9IRUFEKCZ6b25lLT5scnVbbF0ubGlzdCk7CisJCQl6b25lLT5scnVbbF0ubnJfc2NhbiA9IDA7CisJCX0KKwkJem9uZS0+cmVjZW50X3JvdGF0ZWRbMF0gPSAwOworCQl6b25lLT5yZWNlbnRfcm90YXRlZFsxXSA9IDA7CisJCXpvbmUtPnJlY2VudF9zY2FubmVkWzBdID0gMDsKKwkJem9uZS0+cmVjZW50X3NjYW5uZWRbMV0gPSAwOwogCQl6YXBfem9uZV92bV9zdGF0cyh6b25lKTsKIAkJem9uZS0+ZmxhZ3MgPSAwOwogCQlpZiAoIXNpemUpCkBAIC0zOTUyLDcgKzM5NzgsNyBAQAogdm9pZCBfX2luaXQgZnJlZV9hcmVhX2luaXRfbm9kZXModW5zaWduZWQgbG9uZyAqbWF4X3pvbmVfcGZuKQogewogCXVuc2lnbmVkIGxvbmcgbmlkOwotCWVudW0gem9uZV90eXBlIGk7CisJaW50IGk7CiAKIAkvKiBTb3J0IGVhcmx5X25vZGVfbWFwIGFzIGluaXRpYWxpc2F0aW9uIGFzc3VtZXMgaXQgaXMgc29ydGVkICovCiAJc29ydF9ub2RlX21hcCgpOwpAQCAtNDIxMCw3ICs0MjM2LDcgQEAKIAlmb3JfZWFjaF96b25lKHpvbmUpIHsKIAkJdTY0IHRtcDsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bHJ1X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKIAkJdG1wID0gKHU2NClwYWdlc19taW4gKiB6b25lLT5wcmVzZW50X3BhZ2VzOwogCQlkb19kaXYodG1wLCBsb3dtZW1fcGFnZXMpOwogCQlpZiAoaXNfaGlnaG1lbSh6b25lKSkgewpAQCAtNDI0MiwxMyArNDI2OCw1MyBAQAogCQl6b25lLT5wYWdlc19sb3cgICA9IHpvbmUtPnBhZ2VzX21pbiArICh0bXAgPj4gMik7CiAJCXpvbmUtPnBhZ2VzX2hpZ2ggID0gem9uZS0+cGFnZXNfbWluICsgKHRtcCA+PiAxKTsKIAkJc2V0dXBfem9uZV9taWdyYXRlX3Jlc2VydmUoem9uZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAkvKiB1cGRhdGUgdG90YWxyZXNlcnZlX3BhZ2VzICovCiAJY2FsY3VsYXRlX3RvdGFscmVzZXJ2ZV9wYWdlcygpOwogfQogCisvKioKKyAqIHNldHVwX3Blcl96b25lX2luYWN0aXZlX3JhdGlvIC0gY2FsbGVkIHdoZW4gbWluX2ZyZWVfa2J5dGVzIGNoYW5nZXMuCisgKgorICogVGhlIGluYWN0aXZlIGFub24gbGlzdCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRoYXQgdGhlIFZNIG5ldmVyIGhhcyB0bworICogZG8gdG9vIG11Y2ggd29yaywgYnV0IGxhcmdlIGVub3VnaCB0aGF0IGVhY2ggaW5hY3RpdmUgcGFnZSBoYXMgYSBjaGFuY2UKKyAqIHRvIGJlIHJlZmVyZW5jZWQgYWdhaW4gYmVmb3JlIGl0IGlzIHN3YXBwZWQgb3V0LgorICoKKyAqIFRoZSBpbmFjdGl2ZV9hbm9uIHJhdGlvIGlzIHRoZSB0YXJnZXQgcmF0aW8gb2YgQUNUSVZFX0FOT04gdG8KKyAqIElOQUNUSVZFX0FOT04gcGFnZXMgb24gdGhpcyB6b25lJ3MgTFJVLCBtYWludGFpbmVkIGJ5IHRoZQorICogcGFnZW91dCBjb2RlLiBBIHpvbmUtPmluYWN0aXZlX3JhdGlvIG9mIDMgbWVhbnMgMzoxIG9yIDI1JSBvZgorICogdGhlIGFub255bW91cyBwYWdlcyBhcmUga2VwdCBvbiB0aGUgaW5hY3RpdmUgbGlzdC4KKyAqCisgKiB0b3RhbCAgICAgdGFyZ2V0ICAgIG1heAorICogbWVtb3J5ICAgIHJhdGlvICAgICBpbmFjdGl2ZSBhbm9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIDEwTUIgICAgICAgMSAgICAgICAgIDVNQgorICogIDEwME1CICAgICAgIDEgICAgICAgIDUwTUIKKyAqICAgIDFHQiAgICAgICAzICAgICAgIDI1ME1CCisgKiAgIDEwR0IgICAgICAxMCAgICAgICAwLjlHQgorICogIDEwMEdCICAgICAgMzEgICAgICAgICAzR0IKKyAqICAgIDFUQiAgICAgMTAxICAgICAgICAxMEdCCisgKiAgIDEwVEIgICAgIDMyMCAgICAgICAgMzJHQgorICovCit2b2lkIHNldHVwX3Blcl96b25lX2luYWN0aXZlX3JhdGlvKHZvaWQpCit7CisJc3RydWN0IHpvbmUgKnpvbmU7CisKKwlmb3JfZWFjaF96b25lKHpvbmUpIHsKKwkJdW5zaWduZWQgaW50IGdiLCByYXRpbzsKKworCQkvKiBab25lIHNpemUgaW4gZ2lnYWJ5dGVzICovCisJCWdiID0gem9uZS0+cHJlc2VudF9wYWdlcyA+PiAoMzAgLSBQQUdFX1NISUZUKTsKKwkJcmF0aW8gPSBpbnRfc3FydCgxMCAqIGdiKTsKKwkJaWYgKCFyYXRpbykKKwkJCXJhdGlvID0gMTsKKworCQl6b25lLT5pbmFjdGl2ZV9yYXRpbyA9IHJhdGlvOworCX0KK30KKwogLyoKICAqIEluaXRpYWxpc2UgbWluX2ZyZWVfa2J5dGVzLgogICoKQEAgLTQyODYsNiArNDM1Miw3IEBACiAJCW1pbl9mcmVlX2tieXRlcyA9IDY1NTM2OwogCXNldHVwX3Blcl96b25lX3BhZ2VzX21pbigpOwogCXNldHVwX3Blcl96b25lX2xvd21lbV9yZXNlcnZlKCk7CisJc2V0dXBfcGVyX3pvbmVfaW5hY3RpdmVfcmF0aW8oKTsKIAlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KGluaXRfcGVyX3pvbmVfcGFnZXNfbWluKQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jZ3JvdXAuYyBiL21tL3BhZ2VfY2dyb3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4NjU1MAotLS0gL2Rldi9udWxsCisrKyBiL21tL3BhZ2VfY2dyb3VwLmMKQEAgLTAsMCArMSwyMzcgQEAKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRfc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlX2Nncm91cC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKworc3RhdGljIHZvaWQgX19tZW1pbml0CitfX2luaXRfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2VfY2dyb3VwICpwYywgdW5zaWduZWQgbG9uZyBwZm4pCit7CisJcGMtPmZsYWdzID0gMDsKKwlwYy0+bWVtX2Nncm91cCA9IE5VTEw7CisJcGMtPnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworfQorc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfdXNhZ2U7CisKKyNpZiAhZGVmaW5lZChDT05GSUdfU1BBUlNFTUVNKQorCisKK3ZvaWQgX19pbml0IHBnZGF0X3BhZ2VfY2dyb3VwX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKK3sKKwlwZ2RhdC0+bm9kZV9wYWdlX2Nncm91cCA9IE5VTEw7Cit9CisKK3N0cnVjdCBwYWdlX2Nncm91cCAqbG9va3VwX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJc3RydWN0IHBhZ2VfY2dyb3VwICpiYXNlOworCisJYmFzZSA9IE5PREVfREFUQShwYWdlX3RvX25pZChwYWdlKSktPm5vZGVfcGFnZV9jZ3JvdXA7CisJaWYgKHVubGlrZWx5KCFiYXNlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlvZmZzZXQgPSBwZm4gLSBOT0RFX0RBVEEocGFnZV90b19uaWQocGFnZSkpLT5ub2RlX3N0YXJ0X3BmbjsKKwlyZXR1cm4gYmFzZSArIG9mZnNldDsKK30KKworc3RhdGljIGludCBfX2luaXQgYWxsb2Nfbm9kZV9wYWdlX2Nncm91cChpbnQgbmlkKQoreworCXN0cnVjdCBwYWdlX2Nncm91cCAqYmFzZSwgKnBjOworCXVuc2lnbmVkIGxvbmcgdGFibGVfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbnJfcGFnZXMsIGluZGV4OworCisJc3RhcnRfcGZuID0gTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuOworCW5yX3BhZ2VzID0gTk9ERV9EQVRBKG5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlczsKKworCXRhYmxlX3NpemUgPSBzaXplb2Yoc3RydWN0IHBhZ2VfY2dyb3VwKSAqIG5yX3BhZ2VzOworCisJYmFzZSA9IF9fYWxsb2NfYm9vdG1lbV9ub2RlX25vcGFuaWMoTk9ERV9EQVRBKG5pZCksCisJCQl0YWJsZV9zaXplLCBQQUdFX1NJWkUsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBucl9wYWdlczsgaW5kZXgrKykgeworCQlwYyA9IGJhc2UgKyBpbmRleDsKKwkJX19pbml0X3BhZ2VfY2dyb3VwKHBjLCBzdGFydF9wZm4gKyBpbmRleCk7CisJfQorCU5PREVfREFUQShuaWQpLT5ub2RlX3BhZ2VfY2dyb3VwID0gYmFzZTsKKwl0b3RhbF91c2FnZSArPSB0YWJsZV9zaXplOworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBwYWdlX2Nncm91cF9pbml0KHZvaWQpCit7CisKKwlpbnQgbmlkLCBmYWlsOworCisJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSAgeworCQlmYWlsID0gYWxsb2Nfbm9kZV9wYWdlX2Nncm91cChuaWQpOworCQlpZiAoZmFpbCkKKwkJCWdvdG8gZmFpbDsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiYWxsb2NhdGVkICVsZCBieXRlcyBvZiBwYWdlX2Nncm91cFxuIiwgdG90YWxfdXNhZ2UpOworCXByaW50ayhLRVJOX0lORk8gInBsZWFzZSB0cnkgY2dyb3VwX2Rpc2FibGU9bWVtb3J5IG9wdGlvbiBpZiB5b3UiCisJIiBkb24ndCB3YW50XG4iKTsKKwlyZXR1cm47CitmYWlsOgorCXByaW50ayhLRVJOX0NSSVQgImFsbG9jYXRpb24gb2YgcGFnZV9jZ3JvdXAgd2FzIGZhaWxlZC5cbiIpOworCXByaW50ayhLRVJOX0NSSVQgInBsZWFzZSB0cnkgY2dyb3VwX2Rpc2FibGU9bWVtb3J5IGJvb3Qgb3B0aW9uXG4iKTsKKwlwYW5pYygiT3V0IG9mIG1lbW9yeSIpOworfQorCisjZWxzZSAvKiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVAgKi8KKworc3RydWN0IHBhZ2VfY2dyb3VwICpsb29rdXBfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKKwlzdHJ1Y3QgbWVtX3NlY3Rpb24gKnNlY3Rpb24gPSBfX3Bmbl90b19zZWN0aW9uKHBmbik7CisKKwlyZXR1cm4gc2VjdGlvbi0+cGFnZV9jZ3JvdXAgKyBwZm47Cit9CisKK2ludCBfX21lbWluaXQgaW5pdF9zZWN0aW9uX3BhZ2VfY2dyb3VwKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXN0cnVjdCBtZW1fc2VjdGlvbiAqc2VjdGlvbjsKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmJhc2UsICpwYzsKKwl1bnNpZ25lZCBsb25nIHRhYmxlX3NpemU7CisJaW50IG5pZCwgaW5kZXg7CisKKwlzZWN0aW9uID0gX19wZm5fdG9fc2VjdGlvbihwZm4pOworCisJaWYgKHNlY3Rpb24tPnBhZ2VfY2dyb3VwKQorCQlyZXR1cm4gMDsKKworCW5pZCA9IHBhZ2VfdG9fbmlkKHBmbl90b19wYWdlKHBmbikpOworCisJdGFibGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGFnZV9jZ3JvdXApICogUEFHRVNfUEVSX1NFQ1RJT047CisJYmFzZSA9IGttYWxsb2Nfbm9kZSh0YWJsZV9zaXplLCBHRlBfS0VSTkVMLCBuaWQpOworCWlmICghYmFzZSkKKwkJYmFzZSA9IHZtYWxsb2Nfbm9kZSh0YWJsZV9zaXplLCBuaWQpOworCisJaWYgKCFiYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAicGFnZSBjZ3JvdXAgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgUEFHRVNfUEVSX1NFQ1RJT047IGluZGV4KyspIHsKKwkJcGMgPSBiYXNlICsgaW5kZXg7CisJCV9faW5pdF9wYWdlX2Nncm91cChwYywgcGZuICsgaW5kZXgpOworCX0KKworCXNlY3Rpb24gPSBfX3Bmbl90b19zZWN0aW9uKHBmbik7CisJc2VjdGlvbi0+cGFnZV9jZ3JvdXAgPSBiYXNlIC0gcGZuOworCXRvdGFsX3VzYWdlICs9IHRhYmxlX3NpemU7CisJcmV0dXJuIDA7Cit9CisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCit2b2lkIF9fZnJlZV9wYWdlX2Nncm91cCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlzdHJ1Y3QgbWVtX3NlY3Rpb24gKm1zOworCXN0cnVjdCBwYWdlX2Nncm91cCAqYmFzZTsKKworCW1zID0gX19wZm5fdG9fc2VjdGlvbihwZm4pOworCWlmICghbXMgfHwgIW1zLT5wYWdlX2Nncm91cCkKKwkJcmV0dXJuOworCWJhc2UgPSBtcy0+cGFnZV9jZ3JvdXAgKyBwZm47CisJbXMtPnBhZ2VfY2dyb3VwID0gTlVMTDsKKwlpZiAoaXNfdm1hbGxvY19hZGRyKGJhc2UpKQorCQl2ZnJlZShiYXNlKTsKKwllbHNlCisJCWtmcmVlKGJhc2UpOworfQorCitpbnQgb25saW5lX3BhZ2VfY2dyb3VwKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkJdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCWludCBuaWQpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBwZm47CisJaW50IGZhaWwgPSAwOworCisJc3RhcnQgPSBzdGFydF9wZm4gJiAoUEFHRVNfUEVSX1NFQ1RJT04gLSAxKTsKKwllbmQgPSBBTElHTihzdGFydF9wZm4gKyBucl9wYWdlcywgUEFHRVNfUEVSX1NFQ1RJT04pOworCisJZm9yIChwZm4gPSBzdGFydDsgIWZhaWwgJiYgcGZuIDwgZW5kOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pIHsKKwkJaWYgKCFwZm5fcHJlc2VudChwZm4pKQorCQkJY29udGludWU7CisJCWZhaWwgPSBpbml0X3NlY3Rpb25fcGFnZV9jZ3JvdXAocGZuKTsKKwl9CisJaWYgKCFmYWlsKQorCQlyZXR1cm4gMDsKKworCS8qIHJvbGxiYWNrICovCisJZm9yIChwZm4gPSBzdGFydDsgcGZuIDwgZW5kOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pCisJCV9fZnJlZV9wYWdlX2Nncm91cChwZm4pOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK2ludCBvZmZsaW5lX3BhZ2VfY2dyb3VwKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBpbnQgbmlkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgcGZuOworCisJc3RhcnQgPSBzdGFydF9wZm4gJiAoUEFHRVNfUEVSX1NFQ1RJT04gLSAxKTsKKwllbmQgPSBBTElHTihzdGFydF9wZm4gKyBucl9wYWdlcywgUEFHRVNfUEVSX1NFQ1RJT04pOworCisJZm9yIChwZm4gPSBzdGFydDsgcGZuIDwgZW5kOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pCisJCV9fZnJlZV9wYWdlX2Nncm91cChwZm4pOworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgcGFnZV9jZ3JvdXBfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICphcmcpCit7CisJc3RydWN0IG1lbW9yeV9ub3RpZnkgKm1uID0gYXJnOworCWludCByZXQgPSAwOworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBNRU1fR09JTkdfT05MSU5FOgorCQlyZXQgPSBvbmxpbmVfcGFnZV9jZ3JvdXAobW4tPnN0YXJ0X3BmbiwKKwkJCQkgICBtbi0+bnJfcGFnZXMsIG1uLT5zdGF0dXNfY2hhbmdlX25pZCk7CisJCWJyZWFrOworCWNhc2UgTUVNX0NBTkNFTF9PTkxJTkU6CisJY2FzZSBNRU1fT0ZGTElORToKKwkJb2ZmbGluZV9wYWdlX2Nncm91cChtbi0+c3RhcnRfcGZuLAorCQkJCW1uLT5ucl9wYWdlcywgbW4tPnN0YXR1c19jaGFuZ2VfbmlkKTsKKwkJYnJlYWs7CisJY2FzZSBNRU1fR09JTkdfT0ZGTElORToKKwkJYnJlYWs7CisJY2FzZSBNRU1fT05MSU5FOgorCWNhc2UgTUVNX0NBTkNFTF9PRkZMSU5FOgorCQlicmVhazsKKwl9CisJcmV0ID0gbm90aWZpZXJfZnJvbV9lcnJubyhyZXQpOworCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZgorCit2b2lkIF9faW5pdCBwYWdlX2Nncm91cF9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwZm47CisJaW50IGZhaWwgPSAwOworCisJZm9yIChwZm4gPSAwOyAhZmFpbCAmJiBwZm4gPCBtYXhfcGZuOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pIHsKKwkJaWYgKCFwZm5fcHJlc2VudChwZm4pKQorCQkJY29udGludWU7CisJCWZhaWwgPSBpbml0X3NlY3Rpb25fcGFnZV9jZ3JvdXAocGZuKTsKKwl9CisJaWYgKGZhaWwpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAidHJ5IGNncm91cF9kaXNhYmxlPW1lbW9yeSBib290IG9wdGlvblxuIik7CisJCXBhbmljKCJPdXQgb2YgbWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJaG90cGx1Z19tZW1vcnlfbm90aWZpZXIocGFnZV9jZ3JvdXBfY2FsbGJhY2ssIDApOworCX0KKwlwcmludGsoS0VSTl9JTkZPICJhbGxvY2F0ZWQgJWxkIGJ5dGVzIG9mIHBhZ2VfY2dyb3VwXG4iLCB0b3RhbF91c2FnZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAicGxlYXNlIHRyeSBjZ3JvdXBfZGlzYWJsZT1tZW1vcnkgb3B0aW9uIGlmIHlvdSBkb24ndCIKKwkiIHdhbnRcbiIpOworfQorCit2b2lkIF9faW5pdCBwZ2RhdF9wYWdlX2Nncm91cF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpCit7CisJcmV0dXJuOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL21tL3BkZmx1c2guYyBiL21tL3BkZmx1c2guYwppbmRleCAwY2JlMGM2Li5hMGExNGM0IDEwMDY0NAotLS0gYS9tbS9wZGZsdXNoLmMKKysrIGIvbW0vcGRmbHVzaC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiwgTGludXMgVG9ydmFsZHMuCiAgKgotICogMDlBcHIyMDAyCWFrcG1AemlwLmNvbS5hdQorICogMDlBcHIyMDAyCUFuZHJldyBNb3J0b24KICAqCQlJbml0aWFsIHZlcnNpb24KICAqIDI5RmViMjAwNAlrYW9zQHNnaS5jb20KICAqCQlNb3ZlIHdvcmtlciB0aHJlYWQgY3JlYXRpb24gdG8ga3RocmVhZCB0byBhdm9pZCBjaGV3aW5nCmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jCmluZGV4IDc3ZThkZGYuLmJlYzgzYzEgMTAwNjQ0Ci0tLSBhL21tL3JlYWRhaGVhZC5jCisrKyBiL21tL3JlYWRhaGVhZC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiwgTGludXMgVG9ydmFsZHMKICAqCi0gKiAwOUFwcjIwMDIJYWtwbUB6aXAuY29tLmF1CisgKiAwOUFwcjIwMDIJQW5kcmV3IE1vcnRvbgogICoJCUluaXRpYWwgdmVyc2lvbi4KICAqLwogCkBAIC0yMjksNyArMjI5LDcgQEAKICAqLwogdW5zaWduZWQgbG9uZyBtYXhfc2FuZV9yZWFkYWhlYWQodW5zaWduZWQgbG9uZyBucikKIHsKLQlyZXR1cm4gbWluKG5yLCAobm9kZV9wYWdlX3N0YXRlKG51bWFfbm9kZV9pZCgpLCBOUl9JTkFDVElWRSkKKwlyZXR1cm4gbWluKG5yLCAobm9kZV9wYWdlX3N0YXRlKG51bWFfbm9kZV9pZCgpLCBOUl9JTkFDVElWRV9GSUxFKQogCQkrIG5vZGVfcGFnZV9zdGF0ZShudW1hX25vZGVfaWQoKSwgTlJfRlJFRV9QQUdFUykpIC8gMik7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCAwMzgzYWNmLi4xMDk5Mzk0IDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKKysrIGIvbW0vcm1hcC5jCkBAIC01Myw5ICs1Myw0NyBAQAogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKLXN0cnVjdCBrbWVtX2NhY2hlICphbm9uX3ZtYV9jYWNoZXA7CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotLyogVGhpcyBtdXN0IGJlIGNhbGxlZCB1bmRlciB0aGUgbW1hcF9zZW0uICovCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmFub25fdm1hX2NhY2hlcDsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hX2FsbG9jKHZvaWQpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoYW5vbl92bWFfY2FjaGVwLCBHRlBfS0VSTkVMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX2ZyZWUoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUoYW5vbl92bWFfY2FjaGVwLCBhbm9uX3ZtYSk7Cit9CisKKy8qKgorICogYW5vbl92bWFfcHJlcGFyZSAtIGF0dGFjaCBhbiBhbm9uX3ZtYSB0byBhIG1lbW9yeSByZWdpb24KKyAqIEB2bWE6IHRoZSBtZW1vcnkgcmVnaW9uIGluIHF1ZXN0aW9uCisgKgorICogVGhpcyBtYWtlcyBzdXJlIHRoZSBtZW1vcnkgbWFwcGluZyBkZXNjcmliZWQgYnkgJ3ZtYScgaGFzCisgKiBhbiAnYW5vbl92bWEnIGF0dGFjaGVkIHRvIGl0LCBzbyB0aGF0IHdlIGNhbiBhc3NvY2lhdGUgdGhlCisgKiBhbm9ueW1vdXMgcGFnZXMgbWFwcGVkIGludG8gaXQgd2l0aCB0aGF0IGFub25fdm1hLgorICoKKyAqIFRoZSBjb21tb24gY2FzZSB3aWxsIGJlIHRoYXQgd2UgYWxyZWFkeSBoYXZlIG9uZSwgYnV0IGlmCisgKiBpZiBub3Qgd2UgZWl0aGVyIG5lZWQgdG8gZmluZCBhbiBhZGphY2VudCBtYXBwaW5nIHRoYXQgd2UKKyAqIGNhbiByZS11c2UgdGhlIGFub25fdm1hIGZyb20gKHZlcnkgY29tbW9uIHdoZW4gdGhlIG9ubHkKKyAqIHJlYXNvbiBmb3Igc3BsaXR0aW5nIGEgdm1hIGhhcyBiZWVuIG1wcm90ZWN0KCkpLCBvciB3ZQorICogYWxsb2NhdGUgYSBuZXcgb25lLgorICoKKyAqIEFub24tdm1hIGFsbG9jYXRpb25zIGFyZSB2ZXJ5IHN1YnRsZSwgYmVjYXVzZSB3ZSBtYXkgaGF2ZQorICogb3B0aW1pc3RpY2FsbHkgbG9va2VkIHVwIGFuIGFub25fdm1hIGluIHBhZ2VfbG9ja19hbm9uX3ZtYSgpCisgKiBhbmQgdGhhdCBtYXkgYWN0dWFsbHkgdG91Y2ggdGhlIHNwaW5sb2NrIGV2ZW4gaW4gdGhlIG5ld2x5CisgKiBhbGxvY2F0ZWQgdm1hIChpdCBkZXBlbmRzIG9uIFJDVSB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKyAqIGFub25fdm1hIGlzbid0IGFjdHVhbGx5IGRlc3Ryb3llZCkuCisgKgorICogQXMgYSByZXN1bHQsIHdlIG5lZWQgdG8gZG8gcHJvcGVyIGFub25fdm1hIGxvY2tpbmcgZXZlbgorICogZm9yIHRoZSBuZXcgYWxsb2NhdGlvbi4gQXQgdGhlIHNhbWUgdGltZSwgd2UgZG8gbm90IHdhbnQKKyAqIHRvIGRvIGFueSBsb2NraW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgYWxyZWFkeSBoYXZpbmcKKyAqIGFuIGFub25fdm1hLgorICoKKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbW1hcF9zZW0gaGVsZCBmb3IgcmVhZGluZy4KKyAqLwogaW50IGFub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHZtYS0+YW5vbl92bWE7CkBAIC02MywyMCArMTAxLDE3IEBACiAJbWlnaHRfc2xlZXAoKTsKIAlpZiAodW5saWtlbHkoIWFub25fdm1hKSkgewogCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07Ci0JCXN0cnVjdCBhbm9uX3ZtYSAqYWxsb2NhdGVkLCAqbG9ja2VkOworCQlzdHJ1Y3QgYW5vbl92bWEgKmFsbG9jYXRlZDsKIAogCQlhbm9uX3ZtYSA9IGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hKHZtYSk7Ci0JCWlmIChhbm9uX3ZtYSkgewotCQkJYWxsb2NhdGVkID0gTlVMTDsKLQkJCWxvY2tlZCA9IGFub25fdm1hOwotCQkJc3Bpbl9sb2NrKCZsb2NrZWQtPmxvY2spOwotCQl9IGVsc2UgeworCQlhbGxvY2F0ZWQgPSBOVUxMOworCQlpZiAoIWFub25fdm1hKSB7CiAJCQlhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7CiAJCQlpZiAodW5saWtlbHkoIWFub25fdm1hKSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCWFsbG9jYXRlZCA9IGFub25fdm1hOwotCQkJbG9ja2VkID0gTlVMTDsKIAkJfQorCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKIAogCQkvKiBwYWdlX3RhYmxlX2xvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHRocmVhZHMgKi8KIAkJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKQEAgLTg3LDggKzEyMiw3IEBACiAJCX0KIAkJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCi0JCWlmIChsb2NrZWQpCi0JCQlzcGluX3VubG9jaygmbG9ja2VkLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKIAkJaWYgKHVubGlrZWx5KGFsbG9jYXRlZCkpCiAJCQlhbm9uX3ZtYV9mcmVlKGFsbG9jYXRlZCk7CiAJfQpAQCAtMTU3LDcgKzE5MSw3IEBACiAgKiBHZXR0aW5nIGEgbG9jayBvbiBhIHN0YWJsZSBhbm9uX3ZtYSBmcm9tIGEgcGFnZSBvZmYgdGhlIExSVSBpcwogICogdHJpY2t5OiBwYWdlX2xvY2tfYW5vbl92bWEgcmVseSBvbiBSQ1UgdG8gZ3VhcmQgYWdhaW5zdCB0aGUgcmFjZXMuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnBhZ2VfbG9ja19hbm9uX3ZtYShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0cnVjdCBhbm9uX3ZtYSAqcGFnZV9sb2NrX2Fub25fdm1hKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7CiAJdW5zaWduZWQgbG9uZyBhbm9uX21hcHBpbmc7CkBAIC0xNzcsNyArMjExLDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgcGFnZV91bmxvY2tfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKK3ZvaWQgcGFnZV91bmxvY2tfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKIHsKIAlzcGluX3VubG9jaygmYW5vbl92bWEtPmxvY2spOwogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMjY4LDYgKzMwMiwzMiBAQAogCXJldHVybiBOVUxMOwogfQogCisvKioKKyAqIHBhZ2VfbWFwcGVkX2luX3ZtYSAtIGNoZWNrIHdoZXRoZXIgYSBwYWdlIGlzIHJlYWxseSBtYXBwZWQgaW4gYSBWTUEKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byB0ZXN0CisgKiBAdm1hOiB0aGUgVk1BIHRvIHRlc3QKKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIHBhZ2UgaXMgbWFwcGVkIGludG8gdGhlIHBhZ2UgdGFibGVzIG9mIHRoZSBWTUEsIDAKKyAqIGlmIHRoZSBwYWdlIGlzIG5vdCBtYXBwZWQgaW50byB0aGUgcGFnZSB0YWJsZXMgb2YgdGhpcyBWTUEuICBPbmx5CisgKiB2YWxpZCBmb3Igbm9ybWFsIGZpbGUgb3IgYW5vbnltb3VzIFZNQXMuCisgKi8KK3N0YXRpYyBpbnQgcGFnZV9tYXBwZWRfaW5fdm1hKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJcHRlX3QgKnB0ZTsKKwlzcGlubG9ja190ICpwdGw7CisKKwlhZGRyZXNzID0gdm1hX2FkZHJlc3MocGFnZSwgdm1hKTsKKwlpZiAoYWRkcmVzcyA9PSAtRUZBVUxUKQkJLyogb3V0IG9mIHZtYSByYW5nZSAqLworCQlyZXR1cm4gMDsKKwlwdGUgPSBwYWdlX2NoZWNrX2FkZHJlc3MocGFnZSwgdm1hLT52bV9tbSwgYWRkcmVzcywgJnB0bCwgMSk7CisJaWYgKCFwdGUpCQkJLyogdGhlIHBhZ2UgaXMgbm90IGluIHRoaXMgbW0gKi8KKwkJcmV0dXJuIDA7CisJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7CisKKwlyZXR1cm4gMTsKK30KKwogLyoKICAqIFN1YmZ1bmN0aW9ucyBvZiBwYWdlX3JlZmVyZW5jZWQ6IHBhZ2VfcmVmZXJlbmNlZF9vbmUgY2FsbGVkCiAgKiByZXBlYXRlZGx5IGZyb20gZWl0aGVyIHBhZ2VfcmVmZXJlbmNlZF9hbm9uIG9yIHBhZ2VfcmVmZXJlbmNlZF9maWxlLgpAQCAtMjg5LDEwICszNDksMTcgQEAKIAlpZiAoIXB0ZSkKIAkJZ290byBvdXQ7CiAKKwkvKgorCSAqIERvbid0IHdhbnQgdG8gZWxldmF0ZSByZWZlcmVuY2VkIGZvciBtbG9ja2VkIHBhZ2UgdGhhdCBnZXRzIHRoaXMgZmFyLAorCSAqIGluIG9yZGVyIHRoYXQgaXQgcHJvZ3Jlc3NlcyB0byB0cnlfdG9fdW5tYXAgYW5kIGlzIG1vdmVkIHRvIHRoZQorCSAqIHVuZXZpY3RhYmxlIGxpc3QuCisJICovCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKLQkJcmVmZXJlbmNlZCsrOwogCQkqbWFwY291bnQgPSAxOwkvKiBicmVhayBlYXJseSBmcm9tIGxvb3AgKi8KLQl9IGVsc2UgaWYgKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmdfbm90aWZ5KHZtYSwgYWRkcmVzcywgcHRlKSkKKwkJZ290byBvdXRfdW5tYXA7CisJfQorCisJaWYgKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmdfbm90aWZ5KHZtYSwgYWRkcmVzcywgcHRlKSkKIAkJcmVmZXJlbmNlZCsrOwogCiAJLyogUHJldGVuZCB0aGUgcGFnZSBpcyByZWZlcmVuY2VkIGlmIHRoZSB0YXNrIGhhcyB0aGUKQEAgLTMwMSw2ICszNjgsNyBAQAogCQkJcndzZW1faXNfbG9ja2VkKCZtbS0+bW1hcF9zZW0pKQogCQlyZWZlcmVuY2VkKys7CiAKK291dF91bm1hcDoKIAkoKm1hcGNvdW50KS0tOwogCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOwogb3V0OgpAQCAtMzkwLDExICs0NTgsNiBAQAogCQkgKi8KIAkJaWYgKG1lbV9jb250ICYmICFtbV9tYXRjaF9jZ3JvdXAodm1hLT52bV9tbSwgbWVtX2NvbnQpKQogCQkJY29udGludWU7Ci0JCWlmICgodm1hLT52bV9mbGFncyAmIChWTV9MT0NLRUR8Vk1fTUFZU0hBUkUpKQotCQkJCSAgPT0gKFZNX0xPQ0tFRHxWTV9NQVlTSEFSRSkpIHsKLQkJCXJlZmVyZW5jZWQrKzsKLQkJCWJyZWFrOwotCQl9CiAJCXJlZmVyZW5jZWQgKz0gcGFnZV9yZWZlcmVuY2VkX29uZShwYWdlLCB2bWEsICZtYXBjb3VudCk7CiAJCWlmICghbWFwY291bnQpCiAJCQlicmVhazsKQEAgLTY3NCw4ICs3MzcsOCBAQAogCQkJcGFnZV9jbGVhcl9kaXJ0eShwYWdlKTsKIAkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCQl9Ci0KLQkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHBhZ2UpOworCQlpZiAoUGFnZUFub24ocGFnZSkpCisJCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7CiAJCV9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLAogCQkJUGFnZUFub24ocGFnZSkgPyBOUl9BTk9OX1BBR0VTIDogTlJfRklMRV9NQVBQRUQpOwogCQkvKgpAQCAtNzE3LDExICs3ODAsMTYgQEAKIAkgKiBJZiBpdCdzIHJlY2VudGx5IHJlZmVyZW5jZWQgKHBlcmhhcHMgcGFnZV9yZWZlcmVuY2VkCiAJICogc2tpcHBlZCBvdmVyIHRoaXMgbW0pIHRoZW4gd2Ugc2hvdWxkIHJlYWN0aXZhdGUgaXQuCiAJICovCi0JaWYgKCFtaWdyYXRpb24gJiYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB8fAotCQkJKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmdfbm90aWZ5KHZtYSwgYWRkcmVzcywgcHRlKSkpKSB7Ci0JCXJldCA9IFNXQVBfRkFJTDsKLQkJZ290byBvdXRfdW5tYXA7Ci0JfQorCWlmICghbWlncmF0aW9uKSB7CisJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCQlyZXQgPSBTV0FQX01MT0NLOworCQkJZ290byBvdXRfdW5tYXA7CisJCX0KKwkJaWYgKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmdfbm90aWZ5KHZtYSwgYWRkcmVzcywgcHRlKSkgeworCQkJcmV0ID0gU1dBUF9GQUlMOworCQkJZ290byBvdXRfdW5tYXA7CisJCX0KKyAgCX0KIAogCS8qIE51a2UgdGhlIHBhZ2UgdGFibGUgZW50cnkuICovCiAJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3MsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKQEAgLTgwMiwxMiArODcwLDE3IEBACiAgKiBGb3IgdmVyeSBzcGFyc2VseSBwb3B1bGF0ZWQgVk1BcyB0aGlzIGlzIGEgbGl0dGxlIGluZWZmaWNpZW50IC0gY2hhbmNlcyBhcmUKICAqIHRoZXJlIHRoZXJlIHdvbid0IGJlIG1hbnkgcHRlcyBsb2NhdGVkIHdpdGhpbiB0aGUgc2NhbiBjbHVzdGVyLiAgSW4gdGhpcyBjYXNlCiAgKiBtYXliZSB3ZSBjb3VsZCBzY2FuIGZ1cnRoZXIgLSB0byB0aGUgZW5kIG9mIHRoZSBwdGUgcGFnZSwgcGVyaGFwcy4KKyAqCisgKiBNbG9ja2VkIHBhZ2VzOiAgY2hlY2sgVk1fTE9DS0VEIHVuZGVyIG1tYXBfc2VtIGhlbGQgZm9yIHJlYWQsIGlmIHdlIGNhbgorICogYWNxdWlyZSBpdCB3aXRob3V0IGJsb2NraW5nLiAgSWYgdm1hIGxvY2tlZCwgbWxvY2sgdGhlIHBhZ2VzIGluIHRoZSBjbHVzdGVyLAorICogcmF0aGVyIHRoYW4gdW5tYXBwaW5nIHRoZW0uICBJZiB3ZSBlbmNvdW50ZXIgdGhlICJjaGVja19wYWdlIiB0aGF0IHZtc2NhbiBpcworICogdHJ5aW5nIHRvIHVubWFwLCByZXR1cm4gU1dBUF9NTE9DSywgZWxzZSBkZWZhdWx0IFNXQVBfQUdBSU4uCiAgKi8KICNkZWZpbmUgQ0xVU1RFUl9TSVpFCW1pbigzMipQQUdFX1NJWkUsIFBNRF9TSVpFKQogI2RlZmluZSBDTFVTVEVSX01BU0sJKH4oQ0xVU1RFUl9TSVpFIC0gMSkpCiAKLXN0YXRpYyB2b2lkIHRyeV90b191bm1hcF9jbHVzdGVyKHVuc2lnbmVkIGxvbmcgY3Vyc29yLAotCXVuc2lnbmVkIGludCAqbWFwY291bnQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorc3RhdGljIGludCB0cnlfdG9fdW5tYXBfY2x1c3Rlcih1bnNpZ25lZCBsb25nIGN1cnNvciwgdW5zaWduZWQgaW50ICptYXBjb3VudCwKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpjaGVja19wYWdlKQogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKIAlwZ2RfdCAqcGdkOwpAQCAtODE5LDYgKzg5Miw4IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCXVuc2lnbmVkIGxvbmcgZW5kOworCWludCByZXQgPSBTV0FQX0FHQUlOOworCWludCBsb2NrZWRfdm1hID0gMDsKIAogCWFkZHJlc3MgPSAodm1hLT52bV9zdGFydCArIGN1cnNvcikgJiBDTFVTVEVSX01BU0s7CiAJZW5kID0gYWRkcmVzcyArIENMVVNURVJfU0laRTsKQEAgLTgyOSwxNSArOTA0LDI2IEBACiAKIAlwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKTsKIAlpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKQotCQlyZXR1cm47CisJCXJldHVybiByZXQ7CiAKIAlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7CiAJaWYgKCFwdWRfcHJlc2VudCgqcHVkKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gcmV0OwogCiAJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOwogCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogTUxPQ0tfUEFHRVMgPT4gZmVhdHVyZSBpcyBjb25maWd1cmVkLgorCSAqIGlmIHdlIGNhbiBhY3F1aXJlIHRoZSBtbWFwX3NlbSBmb3IgcmVhZCwgYW5kIHZtYSBpcyBWTV9MT0NLRUQsCisJICoga2VlcCB0aGUgc2VtIHdoaWxlIHNjYW5uaW5nIHRoZSBjbHVzdGVyIGZvciBtbG9ja2luZyBwYWdlcy4KKwkgKi8KKwlpZiAoTUxPQ0tfUEFHRVMgJiYgZG93bl9yZWFkX3RyeWxvY2soJnZtYS0+dm1fbW0tPm1tYXBfc2VtKSkgeworCQlsb2NrZWRfdm1hID0gKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpOworCQlpZiAoIWxvY2tlZF92bWEpCisJCQl1cF9yZWFkKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSk7IC8qIGRvbid0IG5lZWQgaXQgKi8KKwl9CiAKIAlwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsIGFkZHJlc3MsICZwdGwpOwogCkBAIC04NTAsNiArOTM2LDEzIEBACiAJCXBhZ2UgPSB2bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHJlc3MsICpwdGUpOwogCQlCVUdfT04oIXBhZ2UgfHwgUGFnZUFub24ocGFnZSkpOwogCisJCWlmIChsb2NrZWRfdm1hKSB7CisJCQltbG9ja192bWFfcGFnZShwYWdlKTsgICAvKiBuby1vcCBpZiBhbHJlYWR5IG1sb2NrZWQgKi8KKwkJCWlmIChwYWdlID09IGNoZWNrX3BhZ2UpCisJCQkJcmV0ID0gU1dBUF9NTE9DSzsKKwkJCWNvbnRpbnVlOwkvKiBkb24ndCB1bm1hcCAqLworCQl9CisKIAkJaWYgKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmdfbm90aWZ5KHZtYSwgYWRkcmVzcywgcHRlKSkKIAkJCWNvbnRpbnVlOwogCkBAIC04NzEsMzkgKzk2NCwxMDQgQEAKIAkJKCptYXBjb3VudCktLTsKIAl9CiAJcHRlX3VubWFwX3VubG9jayhwdGUgLSAxLCBwdGwpOworCWlmIChsb2NrZWRfdm1hKQorCQl1cF9yZWFkKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSk7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB0cnlfdG9fdW5tYXBfYW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG1pZ3JhdGlvbikKKy8qCisgKiBjb21tb24gaGFuZGxpbmcgZm9yIHBhZ2VzIG1hcHBlZCBpbiBWTV9MT0NLRUQgdm1hcworICovCitzdGF0aWMgaW50IHRyeV90b19tbG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpbnQgbWxvY2tlZCA9IDA7CisKKwlpZiAoZG93bl9yZWFkX3RyeWxvY2soJnZtYS0+dm1fbW0tPm1tYXBfc2VtKSkgeworCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQkJbWxvY2tfdm1hX3BhZ2UocGFnZSk7CisJCQltbG9ja2VkKys7CS8qIHJlYWxseSBtbG9ja2VkIHRoZSBwYWdlICovCisJCX0KKwkJdXBfcmVhZCgmdm1hLT52bV9tbS0+bW1hcF9zZW0pOworCX0KKwlyZXR1cm4gbWxvY2tlZDsKK30KKworLyoqCisgKiB0cnlfdG9fdW5tYXBfYW5vbiAtIHVubWFwIG9yIHVubG9jayBhbm9ueW1vdXMgcGFnZSB1c2luZyB0aGUgb2JqZWN0LWJhc2VkCisgKiBybWFwIG1ldGhvZAorICogQHBhZ2U6IHRoZSBwYWdlIHRvIHVubWFwL3VubG9jaworICogQHVubG9jazogIHJlcXVlc3QgZm9yIHVubG9jayByYXRoZXIgdGhhbiB1bm1hcCBbdW5saWtlbHldCisgKiBAbWlncmF0aW9uOiAgdW5tYXBwaW5nIGZvciBtaWdyYXRpb24gLSBpZ25vcmVkIGlmIEB1bmxvY2sKKyAqCisgKiBGaW5kIGFsbCB0aGUgbWFwcGluZ3Mgb2YgYSBwYWdlIHVzaW5nIHRoZSBtYXBwaW5nIHBvaW50ZXIgYW5kIHRoZSB2bWEgY2hhaW5zCisgKiBjb250YWluZWQgaW4gdGhlIGFub25fdm1hIHN0cnVjdCBpdCBwb2ludHMgdG8uCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBmcm9tIHRyeV90b191bm1hcC90cnlfdG9fbXVubG9jayBmb3IKKyAqIGFub255bW91cyBwYWdlcy4KKyAqIFdoZW4gY2FsbGVkIGZyb20gdHJ5X3RvX211bmxvY2soKSwgdGhlIG1tYXBfc2VtIG9mIHRoZSBtbSBjb250YWluaW5nIHRoZSB2bWEKKyAqIHdoZXJlIHRoZSBwYWdlIHdhcyBmb3VuZCB3aWxsIGJlIGhlbGQgZm9yIHdyaXRlLiAgU28sIHdlIHdvbid0IHJlY2hlY2sKKyAqIHZtX2ZsYWdzIGZvciB0aGF0IFZNQS4gIFRoYXQgc2hvdWxkIGJlIE9LLCBiZWNhdXNlIHRoYXQgdm1hIHNob3VsZG4ndCBiZQorICogJ0xPQ0tFRC4KKyAqLworc3RhdGljIGludCB0cnlfdG9fdW5tYXBfYW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHVubG9jaywgaW50IG1pZ3JhdGlvbikKIHsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGludCBtbG9ja2VkID0gMDsKIAlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKIAorCWlmIChNTE9DS19QQUdFUyAmJiB1bmxpa2VseSh1bmxvY2spKQorCQlyZXQgPSBTV0FQX1NVQ0NFU1M7CS8qIGRlZmF1bHQgZm9yIHRyeV90b19tdW5sb2NrKCkgKi8KKwogCWFub25fdm1hID0gcGFnZV9sb2NrX2Fub25fdm1hKHBhZ2UpOwogCWlmICghYW5vbl92bWEpCiAJCXJldHVybiByZXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmFub25fdm1hLT5oZWFkLCBhbm9uX3ZtYV9ub2RlKSB7Ci0JCXJldCA9IHRyeV90b191bm1hcF9vbmUocGFnZSwgdm1hLCBtaWdyYXRpb24pOwotCQlpZiAocmV0ID09IFNXQVBfRkFJTCB8fCAhcGFnZV9tYXBwZWQocGFnZSkpCi0JCQlicmVhazsKKwkJaWYgKE1MT0NLX1BBR0VTICYmIHVubGlrZWx5KHVubG9jaykpIHsKKwkJCWlmICghKCh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSAmJgorCQkJICAgICAgcGFnZV9tYXBwZWRfaW5fdm1hKHBhZ2UsIHZtYSkpKQorCQkJCWNvbnRpbnVlOyAgLyogbXVzdCB2aXNpdCBhbGwgdW5sb2NrZWQgdm1hcyAqLworCQkJcmV0ID0gU1dBUF9NTE9DSzsgIC8qIHNhdyBhdCBsZWFzdCBvbmUgbWxvY2tlZCB2bWEgKi8KKwkJfSBlbHNlIHsKKwkJCXJldCA9IHRyeV90b191bm1hcF9vbmUocGFnZSwgdm1hLCBtaWdyYXRpb24pOworCQkJaWYgKHJldCA9PSBTV0FQX0ZBSUwgfHwgIXBhZ2VfbWFwcGVkKHBhZ2UpKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChyZXQgPT0gU1dBUF9NTE9DSykgeworCQkJbWxvY2tlZCA9IHRyeV90b19tbG9ja19wYWdlKHBhZ2UsIHZtYSk7CisJCQlpZiAobWxvY2tlZCkKKwkJCQlicmVhazsJLyogc3RvcCBpZiBhY3R1YWxseSBtbG9ja2VkIHBhZ2UgKi8KKwkJfQogCX0KIAogCXBhZ2VfdW5sb2NrX2Fub25fdm1hKGFub25fdm1hKTsKKworCWlmIChtbG9ja2VkKQorCQlyZXQgPSBTV0FQX01MT0NLOwkvKiBhY3R1YWxseSBtbG9ja2VkIHRoZSBwYWdlICovCisJZWxzZSBpZiAocmV0ID09IFNXQVBfTUxPQ0spCisJCXJldCA9IFNXQVBfQUdBSU47CS8qIHNhdyBWTV9MT0NLRUQgdm1hICovCisKIAlyZXR1cm4gcmV0OwogfQogCiAvKioKLSAqIHRyeV90b191bm1hcF9maWxlIC0gdW5tYXAgZmlsZSBwYWdlIHVzaW5nIHRoZSBvYmplY3QtYmFzZWQgcm1hcCBtZXRob2QKLSAqIEBwYWdlOiB0aGUgcGFnZSB0byB1bm1hcAotICogQG1pZ3JhdGlvbjogbWlncmF0aW9uIGZsYWcKKyAqIHRyeV90b191bm1hcF9maWxlIC0gdW5tYXAvdW5sb2NrIGZpbGUgcGFnZSB1c2luZyB0aGUgb2JqZWN0LWJhc2VkIHJtYXAgbWV0aG9kCisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdW5tYXAvdW5sb2NrCisgKiBAdW5sb2NrOiAgcmVxdWVzdCBmb3IgdW5sb2NrIHJhdGhlciB0aGFuIHVubWFwIFt1bmxpa2VseV0KKyAqIEBtaWdyYXRpb246ICB1bm1hcHBpbmcgZm9yIG1pZ3JhdGlvbiAtIGlnbm9yZWQgaWYgQHVubG9jawogICoKICAqIEZpbmQgYWxsIHRoZSBtYXBwaW5ncyBvZiBhIHBhZ2UgdXNpbmcgdGhlIG1hcHBpbmcgcG9pbnRlciBhbmQgdGhlIHZtYSBjaGFpbnMKICAqIGNvbnRhaW5lZCBpbiB0aGUgYWRkcmVzc19zcGFjZSBzdHJ1Y3QgaXQgcG9pbnRzIHRvLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB0cnlfdG9fdW5tYXAgZm9yIG9iamVjdC1iYXNlZCBwYWdlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB0cnlfdG9fdW5tYXAvdHJ5X3RvX211bmxvY2sgZm9yCisgKiBvYmplY3QtYmFzZWQgcGFnZXMuCisgKiBXaGVuIGNhbGxlZCBmcm9tIHRyeV90b19tdW5sb2NrKCksIHRoZSBtbWFwX3NlbSBvZiB0aGUgbW0gY29udGFpbmluZyB0aGUgdm1hCisgKiB3aGVyZSB0aGUgcGFnZSB3YXMgZm91bmQgd2lsbCBiZSBoZWxkIGZvciB3cml0ZS4gIFNvLCB3ZSB3b24ndCByZWNoZWNrCisgKiB2bV9mbGFncyBmb3IgdGhhdCBWTUEuICBUaGF0IHNob3VsZCBiZSBPSywgYmVjYXVzZSB0aGF0IHZtYSBzaG91bGRuJ3QgYmUKKyAqICdMT0NLRUQuCiAgKi8KLXN0YXRpYyBpbnQgdHJ5X3RvX3VubWFwX2ZpbGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBtaWdyYXRpb24pCitzdGF0aWMgaW50IHRyeV90b191bm1hcF9maWxlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgdW5sb2NrLCBpbnQgbWlncmF0aW9uKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKIAlwZ29mZl90IHBnb2ZmID0gcGFnZS0+aW5kZXggPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSBQQUdFX1NISUZUKTsKQEAgLTkxNCwyMCArMTA3Miw0NCBAQAogCXVuc2lnbmVkIGxvbmcgbWF4X25sX2N1cnNvciA9IDA7CiAJdW5zaWduZWQgbG9uZyBtYXhfbmxfc2l6ZSA9IDA7CiAJdW5zaWduZWQgaW50IG1hcGNvdW50OworCXVuc2lnbmVkIGludCBtbG9ja2VkID0gMDsKKworCWlmIChNTE9DS19QQUdFUyAmJiB1bmxpa2VseSh1bmxvY2spKQorCQlyZXQgPSBTV0FQX1NVQ0NFU1M7CS8qIGRlZmF1bHQgZm9yIHRyeV90b19tdW5sb2NrKCkgKi8KIAogCXNwaW5fbG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOwogCXZtYV9wcmlvX3RyZWVfZm9yZWFjaCh2bWEsICZpdGVyLCAmbWFwcGluZy0+aV9tbWFwLCBwZ29mZiwgcGdvZmYpIHsKLQkJcmV0ID0gdHJ5X3RvX3VubWFwX29uZShwYWdlLCB2bWEsIG1pZ3JhdGlvbik7Ci0JCWlmIChyZXQgPT0gU1dBUF9GQUlMIHx8ICFwYWdlX21hcHBlZChwYWdlKSkKLQkJCWdvdG8gb3V0OworCQlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkgeworCQkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpCisJCQkJY29udGludWU7CS8qIG11c3QgdmlzaXQgYWxsIHZtYXMgKi8KKwkJCXJldCA9IFNXQVBfTUxPQ0s7CisJCX0gZWxzZSB7CisJCQlyZXQgPSB0cnlfdG9fdW5tYXBfb25lKHBhZ2UsIHZtYSwgbWlncmF0aW9uKTsKKwkJCWlmIChyZXQgPT0gU1dBUF9GQUlMIHx8ICFwYWdlX21hcHBlZChwYWdlKSkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAocmV0ID09IFNXQVBfTUxPQ0spIHsKKwkJCW1sb2NrZWQgPSB0cnlfdG9fbWxvY2tfcGFnZShwYWdlLCB2bWEpOworCQkJaWYgKG1sb2NrZWQpCisJCQkJYnJlYWs7ICAvKiBzdG9wIGlmIGFjdHVhbGx5IG1sb2NrZWQgcGFnZSAqLworCQl9CiAJfQogCisJaWYgKG1sb2NrZWQpCisJCWdvdG8gb3V0OworCiAJaWYgKGxpc3RfZW1wdHkoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpKQogCQlnb3RvIG91dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhciwKIAkJCQkJCXNoYXJlZC52bV9zZXQubGlzdCkgewotCQlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpICYmICFtaWdyYXRpb24pCisJCWlmIChNTE9DS19QQUdFUyAmJiB1bmxpa2VseSh1bmxvY2spKSB7CisJCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkKKwkJCQljb250aW51ZTsJLyogbXVzdCB2aXNpdCBhbGwgdm1hcyAqLworCQkJcmV0ID0gU1dBUF9NTE9DSzsJLyogbGVhdmUgbWxvY2tlZCA9PSAwICovCisJCQlnb3RvIG91dDsJCS8qIG5vIG5lZWQgdG8gbG9vayBmdXJ0aGVyICovCisJCX0KKwkJaWYgKCFNTE9DS19QQUdFUyAmJiAhbWlncmF0aW9uICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkKIAkJCWNvbnRpbnVlOwogCQljdXJzb3IgPSAodW5zaWduZWQgbG9uZykgdm1hLT52bV9wcml2YXRlX2RhdGE7CiAJCWlmIChjdXJzb3IgPiBtYXhfbmxfY3Vyc29yKQpAQCAtOTM3LDcgKzExMTksNyBAQAogCQkJbWF4X25sX3NpemUgPSBjdXJzb3I7CiAJfQogCi0JaWYgKG1heF9ubF9zaXplID09IDApIHsJLyogYW55IG5vbmxpbmVhcnMgbG9ja2VkIG9yIHJlc2VydmVkICovCisJaWYgKG1heF9ubF9zaXplID09IDApIHsJLyogYWxsIG5vbmxpbmVhcnMgbG9ja2VkIG9yIHJlc2VydmVkID8gKi8KIAkJcmV0ID0gU1dBUF9GQUlMOwogCQlnb3RvIG91dDsKIAl9CkBAIC05NjEsMTIgKzExNDMsMTYgQEAKIAlkbyB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhciwKIAkJCQkJCXNoYXJlZC52bV9zZXQubGlzdCkgewotCQkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSAmJiAhbWlncmF0aW9uKQorCQkJaWYgKCFNTE9DS19QQUdFUyAmJiAhbWlncmF0aW9uICYmCisJCQkgICAgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpKQogCQkJCWNvbnRpbnVlOwogCQkJY3Vyc29yID0gKHVuc2lnbmVkIGxvbmcpIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCQkJd2hpbGUgKCBjdXJzb3IgPCBtYXhfbmxfY3Vyc29yICYmCiAJCQkJY3Vyc29yIDwgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSB7Ci0JCQkJdHJ5X3RvX3VubWFwX2NsdXN0ZXIoY3Vyc29yLCAmbWFwY291bnQsIHZtYSk7CisJCQkJcmV0ID0gdHJ5X3RvX3VubWFwX2NsdXN0ZXIoY3Vyc29yLCAmbWFwY291bnQsCisJCQkJCQkJCXZtYSwgcGFnZSk7CisJCQkJaWYgKHJldCA9PSBTV0FQX01MT0NLKQorCQkJCQltbG9ja2VkID0gMjsJLyogdG8gcmV0dXJuIGJlbG93ICovCiAJCQkJY3Vyc29yICs9IENMVVNURVJfU0laRTsKIAkJCQl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9ICh2b2lkICopIGN1cnNvcjsKIAkJCQlpZiAoKGludCltYXBjb3VudCA8PSAwKQpAQCAtOTg3LDYgKzExNzMsMTAgQEAKIAkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBOVUxMOwogb3V0OgogCXNwaW5fdW5sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CisJaWYgKG1sb2NrZWQpCisJCXJldCA9IFNXQVBfTUxPQ0s7CS8qIGFjdHVhbGx5IG1sb2NrZWQgdGhlIHBhZ2UgKi8KKwllbHNlIGlmIChyZXQgPT0gU1dBUF9NTE9DSykKKwkJcmV0ID0gU1dBUF9BR0FJTjsJLyogc2F3IFZNX0xPQ0tFRCB2bWEgKi8KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMDAyLDYgKzExOTIsNyBAQAogICogU1dBUF9TVUNDRVNTCS0gd2Ugc3VjY2VlZGVkIGluIHJlbW92aW5nIGFsbCBtYXBwaW5ncwogICogU1dBUF9BR0FJTgktIHdlIG1pc3NlZCBhIG1hcHBpbmcsIHRyeSBhZ2FpbiBsYXRlcgogICogU1dBUF9GQUlMCS0gdGhlIHBhZ2UgaXMgdW5zd2FwcGFibGUKKyAqIFNXQVBfTUxPQ0sJLSBwYWdlIGlzIG1sb2NrZWQuCiAgKi8KIGludCB0cnlfdG9fdW5tYXAoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBtaWdyYXRpb24pCiB7CkBAIC0xMDEwLDEyICsxMjAxLDM2IEBACiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAogCWlmIChQYWdlQW5vbihwYWdlKSkKLQkJcmV0ID0gdHJ5X3RvX3VubWFwX2Fub24ocGFnZSwgbWlncmF0aW9uKTsKKwkJcmV0ID0gdHJ5X3RvX3VubWFwX2Fub24ocGFnZSwgMCwgbWlncmF0aW9uKTsKIAllbHNlCi0JCXJldCA9IHRyeV90b191bm1hcF9maWxlKHBhZ2UsIG1pZ3JhdGlvbik7Ci0KLQlpZiAoIXBhZ2VfbWFwcGVkKHBhZ2UpKQorCQlyZXQgPSB0cnlfdG9fdW5tYXBfZmlsZShwYWdlLCAwLCBtaWdyYXRpb24pOworCWlmIChyZXQgIT0gU1dBUF9NTE9DSyAmJiAhcGFnZV9tYXBwZWQocGFnZSkpCiAJCXJldCA9IFNXQVBfU1VDQ0VTUzsKIAlyZXR1cm4gcmV0OwogfQogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorLyoqCisgKiB0cnlfdG9fbXVubG9jayAtIHRyeSB0byBtdW5sb2NrIGEgcGFnZQorICogQHBhZ2U6IHRoZSBwYWdlIHRvIGJlIG11bmxvY2tlZAorICoKKyAqIENhbGxlZCBmcm9tIG11bmxvY2sgY29kZS4gIENoZWNrcyBhbGwgb2YgdGhlIFZNQXMgbWFwcGluZyB0aGUgcGFnZQorICogdG8gbWFrZSBzdXJlIG5vYm9keSBlbHNlIGhhcyB0aGlzIHBhZ2UgbWxvY2tlZC4gVGhlIHBhZ2Ugd2lsbCBiZQorICogcmV0dXJuZWQgd2l0aCBQR19tbG9ja2VkIGNsZWFyZWQgaWYgbm8gb3RoZXIgdm1hcyBoYXZlIGl0IG1sb2NrZWQuCisgKgorICogUmV0dXJuIHZhbHVlcyBhcmU6CisgKgorICogU1dBUF9TVUNDRVNTCS0gbm8gdm1hJ3MgaG9sZGluZyBwYWdlIG1sb2NrZWQuCisgKiBTV0FQX0FHQUlOCS0gcGFnZSBtYXBwZWQgaW4gbWxvY2tlZCB2bWEgLS0gY291bGRuJ3QgYWNxdWlyZSBtbWFwIHNlbQorICogU1dBUF9NTE9DSwktIHBhZ2UgaXMgbm93IG1sb2NrZWQuCisgKi8KK2ludCB0cnlfdG9fbXVubG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkgfHwgUGFnZUxSVShwYWdlKSk7CisKKwlpZiAoUGFnZUFub24ocGFnZSkpCisJCXJldHVybiB0cnlfdG9fdW5tYXBfYW5vbihwYWdlLCAxLCAwKTsKKwllbHNlCisJCXJldHVybiB0cnlfdG9fdW5tYXBfZmlsZShwYWdlLCAxLCAwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggMDRmYjRmMS4uZDM4ZDdlNiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYworKysgYi9tbS9zaG1lbS5jCkBAIC01MCwxNCArNTAsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAotLyogVGhpcyBtYWdpYyBudW1iZXIgaXMgdXNlZCBpbiBnbGliYyBmb3IgcG9zaXggc2hhcmVkIG1lbW9yeSAqLwotI2RlZmluZSBUTVBGU19NQUdJQwkweDAxMDIxOTk0Ci0KICNkZWZpbmUgRU5UUklFU19QRVJfUEFHRSAoUEFHRV9DQUNIRV9TSVpFL3NpemVvZih1bnNpZ25lZCBsb25nKSkKICNkZWZpbmUgRU5UUklFU19QRVJfUEFHRVBBR0UgKEVOVFJJRVNfUEVSX1BBR0UqRU5UUklFU19QRVJfUEFHRSkKICNkZWZpbmUgQkxPQ0tTX1BFUl9QQUdFICAoUEFHRV9DQUNIRV9TSVpFLzUxMikKQEAgLTIwMSw3ICsxOTksNyBAQAogCiBzdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gc2htZW1fYmFja2luZ19kZXZfaW5mbyAgX19yZWFkX21vc3RseSA9IHsKIAkucmFfcGFnZXMJPSAwLAkvKiBObyByZWFkYWhlYWQgKi8KLQkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0ssCisJLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTk9fQUNDVF9BTkRfV1JJVEVCQUNLIHwgQkRJX0NBUF9TV0FQX0JBQ0tFRCwKIAkudW5wbHVnX2lvX2ZuCT0gZGVmYXVsdF91bnBsdWdfaW9fZm4sCiB9OwogCkBAIC0xMzY5LDYgKzEzNjcsNyBAQAogCQkJCWVycm9yID0gLUVOT01FTTsKIAkJCQlnb3RvIGZhaWxlZDsKIAkJCX0KKwkJCVNldFBhZ2VTd2FwQmFja2VkKGZpbGVwYWdlKTsKIAogCQkJLyogUHJlY2hhcmdlIHBhZ2Ugd2hpbGUgd2UgY2FuIHdhaXQsIGNvbXBlbnNhdGUgYWZ0ZXIgKi8KIAkJCWVycm9yID0gbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2UoZmlsZXBhZ2UsIGN1cnJlbnQtPm1tLApAQCAtMTQ3OCwxMiArMTQ3NywxNiBAQAogCQlpZiAoIXVzZXJfc2htX2xvY2soaW5vZGUtPmlfc2l6ZSwgdXNlcikpCiAJCQlnb3RvIG91dF9ub21lbTsKIAkJaW5mby0+ZmxhZ3MgfD0gVk1fTE9DS0VEOworCQltYXBwaW5nX3NldF91bmV2aWN0YWJsZShmaWxlLT5mX21hcHBpbmcpOwogCX0KIAlpZiAoIWxvY2sgJiYgKGluZm8tPmZsYWdzICYgVk1fTE9DS0VEKSAmJiB1c2VyKSB7CiAJCXVzZXJfc2htX3VubG9jayhpbm9kZS0+aV9zaXplLCB1c2VyKTsKIAkJaW5mby0+ZmxhZ3MgJj0gflZNX0xPQ0tFRDsKKwkJbWFwcGluZ19jbGVhcl91bmV2aWN0YWJsZShmaWxlLT5mX21hcHBpbmcpOworCQlzY2FuX21hcHBpbmdfdW5ldmljdGFibGVfcGFnZXMoZmlsZS0+Zl9tYXBwaW5nKTsKIAl9CiAJcmV0dmFsID0gMDsKKwogb3V0X25vbWVtOgogCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMjU4Miw2ICsyNTg1LDcgQEAKIAlzaG1lbV91bmFjY3Rfc2l6ZShmbGFncywgc2l6ZSk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2htZW1fZmlsZV9zZXR1cCk7CiAKIC8qKgogICogc2htZW1femVyb19zZXR1cCAtIHNldHVwIGEgc2hhcmVkIGFub255bW91cyBtYXBwaW5nCmRpZmYgLS1naXQgYS9tbS9zd2FwLmMgYi9tbS9zd2FwLmMKaW5kZXggOWUwY2IzMS4uMjE1MmU0OCAxMDA2NDQKLS0tIGEvbW0vc3dhcC5jCisrKyBiL21tL3N3YXAuYwpAQCAtMzEsMTEgKzMxLDEyIEBACiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAvKiBIb3cgbWFueSBwYWdlcyBkbyB3ZSB0cnkgdG8gc3dhcCBvciBwYWdlIGluL291dCB0b2dldGhlcj8gKi8KIGludCBwYWdlX2NsdXN0ZXI7CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGFnZXZlYywgbHJ1X2FkZF9wdmVjcyk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBhZ2V2ZWMsIGxydV9hZGRfYWN0aXZlX3B2ZWNzKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGFnZXZlY1tOUl9MUlVfTElTVFNdLCBscnVfYWRkX3B2ZWNzKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGFnZXZlYywgbHJ1X3JvdGF0ZV9wdmVjcyk7CiAKIC8qCkBAIC0xMTYsOCArMTE3LDkgQEAKIAkJCXpvbmUgPSBwYWdlem9uZTsKIAkJCXNwaW5fbG9jaygmem9uZS0+bHJ1X2xvY2spOwogCQl9Ci0JCWlmIChQYWdlTFJVKHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpKSB7Ci0JCQlsaXN0X21vdmVfdGFpbCgmcGFnZS0+bHJ1LCAmem9uZS0+aW5hY3RpdmVfbGlzdCk7CisJCWlmIChQYWdlTFJVKHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpICYmICFQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKKwkJCWludCBscnUgPSBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CisJCQlsaXN0X21vdmVfdGFpbCgmcGFnZS0+bHJ1LCAmem9uZS0+bHJ1W2xydV0ubGlzdCk7CiAJCQlwZ21vdmVkKys7CiAJCX0KIAl9CkBAIC0xMzYsNyArMTM4LDcgQEAKIHZvaWQgIHJvdGF0ZV9yZWNsYWltYWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCWlmICghUGFnZUxvY2tlZChwYWdlKSAmJiAhUGFnZURpcnR5KHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpICYmCi0JICAgIFBhZ2VMUlUocGFnZSkpIHsKKwkgICAgIVBhZ2VVbmV2aWN0YWJsZShwYWdlKSAmJiBQYWdlTFJVKHBhZ2UpKSB7CiAJCXN0cnVjdCBwYWdldmVjICpwdmVjOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xNTcsMTIgKzE1OSwxOSBAQAogCXN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpOwogCiAJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCWlmIChQYWdlTFJVKHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpKSB7Ci0JCWRlbF9wYWdlX2Zyb21faW5hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKKwlpZiAoUGFnZUxSVShwYWdlKSAmJiAhUGFnZUFjdGl2ZShwYWdlKSAmJiAhUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKSB7CisJCWludCBmaWxlID0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOworCQlpbnQgbHJ1ID0gTFJVX0JBU0UgKyBmaWxlOworCQlkZWxfcGFnZV9mcm9tX2xydV9saXN0KHpvbmUsIHBhZ2UsIGxydSk7CisKIAkJU2V0UGFnZUFjdGl2ZShwYWdlKTsKLQkJYWRkX3BhZ2VfdG9fYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7CisJCWxydSArPSBMUlVfQUNUSVZFOworCQlhZGRfcGFnZV90b19scnVfbGlzdCh6b25lLCBwYWdlLCBscnUpOwogCQlfX2NvdW50X3ZtX2V2ZW50KFBHQUNUSVZBVEUpOwotCQltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgdHJ1ZSk7CisJCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlLCBscnUpOworCisJCXpvbmUtPnJlY2VudF9yb3RhdGVkWyEhZmlsZV0rKzsKKwkJem9uZS0+cmVjZW50X3NjYW5uZWRbISFmaWxlXSsrOwogCX0KIAlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIH0KQEAgLTE3Niw3ICsxODUsOCBAQAogICovCiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlpZiAoIVBhZ2VBY3RpdmUocGFnZSkgJiYgUGFnZVJlZmVyZW5jZWQocGFnZSkgJiYgUGFnZUxSVShwYWdlKSkgeworCWlmICghUGFnZUFjdGl2ZShwYWdlKSAmJiAhUGFnZVVuZXZpY3RhYmxlKHBhZ2UpICYmCisJCQlQYWdlUmVmZXJlbmNlZChwYWdlKSAmJiBQYWdlTFJVKHBhZ2UpKSB7CiAJCWFjdGl2YXRlX3BhZ2UocGFnZSk7CiAJCUNsZWFyUGFnZVJlZmVyZW5jZWQocGFnZSk7CiAJfSBlbHNlIGlmICghUGFnZVJlZmVyZW5jZWQocGFnZSkpIHsKQEAgLTE4NiwyOCArMTk2LDczIEBACiAKIEVYUE9SVF9TWU1CT0wobWFya19wYWdlX2FjY2Vzc2VkKTsKIAotLyoqCi0gKiBscnVfY2FjaGVfYWRkOiBhZGQgYSBwYWdlIHRvIHRoZSBwYWdlIGxpc3RzCi0gKiBAcGFnZTogdGhlIHBhZ2UgdG8gYWRkCi0gKi8KLXZvaWQgbHJ1X2NhY2hlX2FkZChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3ZvaWQgX19scnVfY2FjaGVfYWRkKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGxydV9saXN0IGxydSkKIHsKLQlzdHJ1Y3QgcGFnZXZlYyAqcHZlYyA9ICZnZXRfY3B1X3ZhcihscnVfYWRkX3B2ZWNzKTsKKwlzdHJ1Y3QgcGFnZXZlYyAqcHZlYyA9ICZnZXRfY3B1X3ZhcihscnVfYWRkX3B2ZWNzKVtscnVdOwogCiAJcGFnZV9jYWNoZV9nZXQocGFnZSk7CiAJaWYgKCFwYWdldmVjX2FkZChwdmVjLCBwYWdlKSkKLQkJX19wYWdldmVjX2xydV9hZGQocHZlYyk7CisJCV9fX19wYWdldmVjX2xydV9hZGQocHZlYywgbHJ1KTsKIAlwdXRfY3B1X3ZhcihscnVfYWRkX3B2ZWNzKTsKIH0KIAotdm9pZCBscnVfY2FjaGVfYWRkX2FjdGl2ZShzdHJ1Y3QgcGFnZSAqcGFnZSkKKy8qKgorICogbHJ1X2NhY2hlX2FkZF9scnUgLSBhZGQgYSBwYWdlIHRvIGEgcGFnZSBsaXN0CisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gYmUgYWRkZWQgdG8gdGhlIExSVS4KKyAqIEBscnU6IHRoZSBMUlUgbGlzdCB0byB3aGljaCB0aGUgcGFnZSBpcyBhZGRlZC4KKyAqLwordm9pZCBscnVfY2FjaGVfYWRkX2xydShzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBscnVfbGlzdCBscnUpCiB7Ci0Jc3RydWN0IHBhZ2V2ZWMgKnB2ZWMgPSAmZ2V0X2NwdV92YXIobHJ1X2FkZF9hY3RpdmVfcHZlY3MpOworCWlmIChQYWdlQWN0aXZlKHBhZ2UpKSB7CisJCVZNX0JVR19PTihQYWdlVW5ldmljdGFibGUocGFnZSkpOworCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CisJfSBlbHNlIGlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKKwkJVk1fQlVHX09OKFBhZ2VBY3RpdmUocGFnZSkpOworCQlDbGVhclBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKKwl9CiAKLQlwYWdlX2NhY2hlX2dldChwYWdlKTsKLQlpZiAoIXBhZ2V2ZWNfYWRkKHB2ZWMsIHBhZ2UpKQotCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9hY3RpdmUocHZlYyk7Ci0JcHV0X2NwdV92YXIobHJ1X2FkZF9hY3RpdmVfcHZlY3MpOworCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpIHx8IFBhZ2VBY3RpdmUocGFnZSkgfHwgUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKTsKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgbHJ1KTsKK30KKworLyoqCisgKiBhZGRfcGFnZV90b191bmV2aWN0YWJsZV9saXN0IC0gYWRkIGEgcGFnZSB0byB0aGUgdW5ldmljdGFibGUgbGlzdAorICogQHBhZ2U6ICB0aGUgcGFnZSB0byBiZSBhZGRlZCB0byB0aGUgdW5ldmljdGFibGUgbGlzdAorICoKKyAqIEFkZCBwYWdlIGRpcmVjdGx5IHRvIGl0cyB6b25lJ3MgdW5ldmljdGFibGUgbGlzdC4gIFRvIGF2b2lkIHJhY2VzIHdpdGgKKyAqIHRhc2tzIHRoYXQgbWlnaHQgYmUgbWFraW5nIHRoZSBwYWdlIGV2aWN0YWJsZSwgdGhyb3VnaCBlZy4gbXVubG9jaywKKyAqIG11bm1hcCBvciBleGl0LCB3aGlsZSBpdCdzIG5vdCBvbiB0aGUgbHJ1LCB3ZSB3YW50IHRvIGFkZCB0aGUgcGFnZQorICogd2hpbGUgaXQncyBsb2NrZWQgb3Igb3RoZXJ3aXNlICJpbnZpc2libGUiIHRvIG90aGVyIHRhc2tzLiAgVGhpcyBpcworICogZGlmZmljdWx0IHRvIGRvIHdoZW4gdXNpbmcgdGhlIHBhZ2V2ZWMgY2FjaGUsIHNvIGJ5cGFzcyB0aGF0LgorICovCit2b2lkIGFkZF9wYWdlX3RvX3VuZXZpY3RhYmxlX2xpc3Qoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CisKKwlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJU2V0UGFnZVVuZXZpY3RhYmxlKHBhZ2UpOworCVNldFBhZ2VMUlUocGFnZSk7CisJYWRkX3BhZ2VfdG9fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgTFJVX1VORVZJQ1RBQkxFKTsKKwlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKK30KKworLyoqCisgKiBscnVfY2FjaGVfYWRkX2FjdGl2ZV9vcl91bmV2aWN0YWJsZQorICogQHBhZ2U6ICB0aGUgcGFnZSB0byBiZSBhZGRlZCB0byBMUlUKKyAqIEB2bWE6ICAgdm1hIGluIHdoaWNoIHBhZ2UgaXMgbWFwcGVkIGZvciBkZXRlcm1pbmluZyByZWNsYWltYWJpbGl0eQorICoKKyAqIHBsYWNlIEBwYWdlIG9uIGFjdGl2ZSBvciB1bmV2aWN0YWJsZSBMUlUgbGlzdCwgZGVwZW5kaW5nIG9uCisgKiBwYWdlX2V2aWN0YWJsZSgpLiAgTm90ZSB0aGF0IGlmIHRoZSBwYWdlIGlzIG5vdCBldmljdGFibGUsCisgKiBpdCBnb2VzIGRpcmVjdGx5IGJhY2sgb250byBpdCdzIHpvbmUncyB1bmV2aWN0YWJsZSBsaXN0LiAgSXQgZG9lcworICogTk9UIHVzZSBhIHBlciBjcHUgcGFnZXZlYy4KKyAqLwordm9pZCBscnVfY2FjaGVfYWRkX2FjdGl2ZV9vcl91bmV2aWN0YWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaWYgKHBhZ2VfZXZpY3RhYmxlKHBhZ2UsIHZtYSkpCisJCWxydV9jYWNoZV9hZGRfbHJ1KHBhZ2UsIExSVV9BQ1RJVkUgKyBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpOworCWVsc2UKKwkJYWRkX3BhZ2VfdG9fdW5ldmljdGFibGVfbGlzdChwYWdlKTsKIH0KIAogLyoKQEAgLTIxNywxNSArMjcyLDE1IEBACiAgKi8KIHN0YXRpYyB2b2lkIGRyYWluX2NwdV9wYWdldmVjcyhpbnQgY3B1KQogeworCXN0cnVjdCBwYWdldmVjICpwdmVjcyA9IHBlcl9jcHUobHJ1X2FkZF9wdmVjcywgY3B1KTsKIAlzdHJ1Y3QgcGFnZXZlYyAqcHZlYzsKKwlpbnQgbHJ1OwogCi0JcHZlYyA9ICZwZXJfY3B1KGxydV9hZGRfcHZlY3MsIGNwdSk7Ci0JaWYgKHBhZ2V2ZWNfY291bnQocHZlYykpCi0JCV9fcGFnZXZlY19scnVfYWRkKHB2ZWMpOwotCi0JcHZlYyA9ICZwZXJfY3B1KGxydV9hZGRfYWN0aXZlX3B2ZWNzLCBjcHUpOwotCWlmIChwYWdldmVjX2NvdW50KHB2ZWMpKQotCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9hY3RpdmUocHZlYyk7CisJZm9yX2VhY2hfbHJ1KGxydSkgeworCQlwdmVjID0gJnB2ZWNzW2xydSAtIExSVV9CQVNFXTsKKwkJaWYgKHBhZ2V2ZWNfY291bnQocHZlYykpCisJCQlfX19fcGFnZXZlY19scnVfYWRkKHB2ZWMsIGxydSk7CisJfQogCiAJcHZlYyA9ICZwZXJfY3B1KGxydV9yb3RhdGVfcHZlY3MsIGNwdSk7CiAJaWYgKHBhZ2V2ZWNfY291bnQocHZlYykpIHsKQEAgLTI0NCw3ICsyOTksNyBAQAogCXB1dF9jcHUoKTsKIH0KIAotI2lmZGVmIENPTkZJR19OVU1BCisjaWYgZGVmaW5lZChDT05GSUdfTlVNQSkgfHwgZGVmaW5lZChDT05GSUdfVU5FVklDVEFCTEVfTFJVKQogc3RhdGljIHZvaWQgbHJ1X2FkZF9kcmFpbl9wZXJfY3B1KHN0cnVjdCB3b3JrX3N0cnVjdCAqZHVtbXkpCiB7CiAJbHJ1X2FkZF9kcmFpbigpOwpAQCAtMzA4LDYgKzM2Myw3IEBACiAKIAkJaWYgKFBhZ2VMUlUocGFnZSkpIHsKIAkJCXN0cnVjdCB6b25lICpwYWdlem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKKwogCQkJaWYgKHBhZ2V6b25lICE9IHpvbmUpIHsKIAkJCQlpZiAoem9uZSkKIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bHJ1X2xvY2ssCkBAIC0zODAsMTAgKzQzNiwxMSBAQAogICogQWRkIHRoZSBwYXNzZWQgcGFnZXMgdG8gdGhlIExSVSwgdGhlbiBkcm9wIHRoZSBjYWxsZXIncyByZWZjb3VudAogICogb24gdGhlbS4gIFJlaW5pdGlhbGlzZXMgdGhlIGNhbGxlcidzIHBhZ2V2ZWMuCiAgKi8KLXZvaWQgX19wYWdldmVjX2xydV9hZGQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCit2b2lkIF9fX19wYWdldmVjX2xydV9hZGQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1KQogewogCWludCBpOwogCXN0cnVjdCB6b25lICp6b25lID0gTlVMTDsKKwlWTV9CVUdfT04oaXNfdW5ldmljdGFibGVfbHJ1KGxydSkpOwogCiAJZm9yIChpID0gMDsgaSA8IHBhZ2V2ZWNfY291bnQocHZlYyk7IGkrKykgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMtPnBhZ2VzW2ldOwpAQCAtMzk1LDM4ICs0NTIsMTMgQEAKIAkJCXpvbmUgPSBwYWdlem9uZTsKIAkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAkJfQotCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7Ci0JCVNldFBhZ2VMUlUocGFnZSk7Ci0JCWFkZF9wYWdlX3RvX2luYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7Ci0JfQotCWlmICh6b25lKQotCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQlyZWxlYXNlX3BhZ2VzKHB2ZWMtPnBhZ2VzLCBwdmVjLT5uciwgcHZlYy0+Y29sZCk7Ci0JcGFnZXZlY19yZWluaXQocHZlYyk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woX19wYWdldmVjX2xydV9hZGQpOwotCi12b2lkIF9fcGFnZXZlY19scnVfYWRkX2FjdGl2ZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKLXsKLQlpbnQgaTsKLQlzdHJ1Y3Qgem9uZSAqem9uZSA9IE5VTEw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudChwdmVjKTsgaSsrKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy0+cGFnZXNbaV07Ci0JCXN0cnVjdCB6b25lICpwYWdlem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKLQotCQlpZiAocGFnZXpvbmUgIT0gem9uZSkgewotCQkJaWYgKHpvbmUpCi0JCQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCQl6b25lID0gcGFnZXpvbmU7Ci0JCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCX0KLQkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOwotCQlTZXRQYWdlTFJVKHBhZ2UpOwogCQlWTV9CVUdfT04oUGFnZUFjdGl2ZShwYWdlKSk7Ci0JCVNldFBhZ2VBY3RpdmUocGFnZSk7Ci0JCWFkZF9wYWdlX3RvX2FjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOworCQlWTV9CVUdfT04oUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKTsKKwkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOworCQlTZXRQYWdlTFJVKHBhZ2UpOworCQlpZiAoaXNfYWN0aXZlX2xydShscnUpKQorCQkJU2V0UGFnZUFjdGl2ZShwYWdlKTsKKwkJYWRkX3BhZ2VfdG9fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgbHJ1KTsKIAl9CiAJaWYgKHpvbmUpCiAJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwpAQCAtNDM0LDYgKzQ2Niw4IEBACiAJcGFnZXZlY19yZWluaXQocHZlYyk7CiB9CiAKK0VYUE9SVF9TWU1CT0woX19fX3BhZ2V2ZWNfbHJ1X2FkZCk7CisKIC8qCiAgKiBUcnkgdG8gZHJvcCBidWZmZXJzIGZyb20gdGhlIHBhZ2VzIGluIGEgcGFnZXZlYwogICovCkBAIC00NTMsNiArNDg3LDMwIEBACiB9CiAKIC8qKgorICogcGFnZXZlY19zd2FwX2ZyZWUgLSB0cnkgdG8gZnJlZSBzd2FwIHNwYWNlIGZyb20gdGhlIHBhZ2VzIGluIGEgcGFnZXZlYworICogQHB2ZWM6IHBhZ2V2ZWMgd2l0aCBzd2FwY2FjaGUgcGFnZXMgdG8gZnJlZSB0aGUgc3dhcCBzcGFjZSBvZgorICoKKyAqIFRoZSBjYWxsZXIgbmVlZHMgdG8gaG9sZCBhbiBleHRyYSByZWZlcmVuY2UgdG8gZWFjaCBwYWdlIGFuZAorICogbm90IGhvbGQgdGhlIHBhZ2UgbG9jayBvbiB0aGUgcGFnZXMuICBUaGlzIGZ1bmN0aW9uIHVzZXMgYQorICogdHJ5bG9jayBvbiB0aGUgcGFnZSBsb2NrIHNvIGl0IG1heSBub3QgYWx3YXlzIGZyZWUgdGhlIHN3YXAKKyAqIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UuCisgKi8KK3ZvaWQgcGFnZXZlY19zd2FwX2ZyZWUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudChwdmVjKTsgaSsrKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy0+cGFnZXNbaV07CisKKwkJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkgJiYgdHJ5bG9ja19wYWdlKHBhZ2UpKSB7CisJCQlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkKKwkJCQlyZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9yZWYocGFnZSk7CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJfQorCX0KK30KKworLyoqCiAgKiBwYWdldmVjX2xvb2t1cCAtIGdhbmcgcGFnZWNhY2hlIGxvb2t1cAogICogQHB2ZWM6CVdoZXJlIHRoZSByZXN1bHRpbmcgcGFnZXMgYXJlIHBsYWNlZAogICogQG1hcHBpbmc6CVRoZSBhZGRyZXNzX3NwYWNlIHRvIHNlYXJjaApkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDc5N2MzODMuLjMzNTNjOTAgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYworKysgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTMzLDcgKzMzLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBzd2FwX2JhY2tpbmdfZGV2X2luZm8gPSB7Ci0JLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTk9fQUNDVF9BTkRfV1JJVEVCQUNLLAorCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX05PX0FDQ1RfQU5EX1dSSVRFQkFDSyB8IEJESV9DQVBfU1dBUF9CQUNLRUQsCiAJLnVucGx1Z19pb19mbgk9IHN3YXBfdW5wbHVnX2lvX2ZuLAogfTsKIApAQCAtNzUsNiArNzUsNyBAQAogCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAJQlVHX09OKFBhZ2VTd2FwQ2FjaGUocGFnZSkpOwogCUJVR19PTihQYWdlUHJpdmF0ZShwYWdlKSk7CisJQlVHX09OKCFQYWdlU3dhcEJhY2tlZChwYWdlKSk7CiAJZXJyb3IgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwX21hc2spOwogCWlmICghZXJyb3IpIHsKIAkJcGFnZV9jYWNoZV9nZXQocGFnZSk7CkBAIC0zMDIsMTcgKzMwMywxOSBAQAogCQkgKiByZS11c2luZyB0aGUganVzdCBmcmVlZCBzd2FwIGVudHJ5IGZvciBhbiBleGlzdGluZyBwYWdlLgogCQkgKiBNYXkgZmFpbCAoLUVOT01FTSkgaWYgcmFkaXgtdHJlZSBub2RlIGFsbG9jYXRpb24gZmFpbGVkLgogCQkgKi8KLQkJc2V0X3BhZ2VfbG9ja2VkKG5ld19wYWdlKTsKKwkJX19zZXRfcGFnZV9sb2NrZWQobmV3X3BhZ2UpOworCQlTZXRQYWdlU3dhcEJhY2tlZChuZXdfcGFnZSk7CiAJCWVyciA9IGFkZF90b19zd2FwX2NhY2hlKG5ld19wYWdlLCBlbnRyeSwgZ2ZwX21hc2sgJiBHRlBfS0VSTkVMKTsKIAkJaWYgKGxpa2VseSghZXJyKSkgewogCQkJLyoKIAkJCSAqIEluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgcGFnZSBhbmQgcmV0dXJuLgogCQkJICovCi0JCQlscnVfY2FjaGVfYWRkX2FjdGl2ZShuZXdfcGFnZSk7CisJCQlscnVfY2FjaGVfYWRkX2Fub24obmV3X3BhZ2UpOwogCQkJc3dhcF9yZWFkcGFnZShOVUxMLCBuZXdfcGFnZSk7CiAJCQlyZXR1cm4gbmV3X3BhZ2U7CiAJCX0KLQkJY2xlYXJfcGFnZV9sb2NrZWQobmV3X3BhZ2UpOworCQlDbGVhclBhZ2VTd2FwQmFja2VkKG5ld19wYWdlKTsKKwkJX19jbGVhcl9wYWdlX2xvY2tlZChuZXdfcGFnZSk7CiAJCXN3YXBfZnJlZShlbnRyeSk7CiAJfSB3aGlsZSAoZXJyICE9IC1FTk9NRU0pOwogCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCAxZTMzMGYyLi45MGNiNjdhIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTM0NCw3ICszNDQsNyBAQAogICogV29yayBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwcm9jZXNzZXMgc2hhcmluZyB0aGlzCiAgKiBzd2FwIGNhY2hlIHBhZ2UuIEZyZWUgaXQgaWYgeW91IGNhbi4gUmV0dXJuIHN1Y2Nlc3MuCiAgKi8KLWludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbnQgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBjb3VudCkKIHsKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICogcDsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCQlyZXR1cm4gMDsKIAlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSkKIAkJcmV0dXJuIDA7Ci0JaWYgKHBhZ2VfY291bnQocGFnZSkgIT0gMikgLyogMjogdXMgKyBjYWNoZSAqLworCWlmIChwYWdlX2NvdW50KHBhZ2UpICE9IGNvdW50KSAvKiB1cyArIGNhY2hlICsgcHRlcyAqLwogCQlyZXR1cm4gMDsKIAogCWVudHJ5LnZhbCA9IHBhZ2VfcHJpdmF0ZShwYWdlKTsKQEAgLTM3MCw3ICszNzAsNyBAQAogCWlmIChwLT5zd2FwX21hcFtzd3Bfb2Zmc2V0KGVudHJ5KV0gPT0gMSkgewogCQkvKiBSZWNoZWNrIHRoZSBwYWdlIGNvdW50IHdpdGggdGhlIHN3YXBjYWNoZSBsb2NrIGhlbGQuLiAqLwogCQlzcGluX2xvY2tfaXJxKCZzd2FwcGVyX3NwYWNlLnRyZWVfbG9jayk7Ci0JCWlmICgocGFnZV9jb3VudChwYWdlKSA9PSAyKSAmJiAhUGFnZVdyaXRlYmFjayhwYWdlKSkgeworCQlpZiAoKHBhZ2VfY291bnQocGFnZSkgPT0gY291bnQpICYmICFQYWdlV3JpdGViYWNrKHBhZ2UpKSB7CiAJCQlfX2RlbGV0ZV9mcm9tX3N3YXBfY2FjaGUocGFnZSk7CiAJCQlTZXRQYWdlRGlydHkocGFnZSk7CiAJCQlyZXR2YWwgPSAxOwpAQCAtMzg4LDYgKzM4OCwyNSBAQAogfQogCiAvKgorICogTW9zdCBvZiB0aGUgdGltZSB0aGUgcGFnZSBzaG91bGQgaGF2ZSB0d28gcmVmZXJlbmNlczogb25lIGZvciB0aGUKKyAqIHByb2Nlc3MgYW5kIG9uZSBmb3IgdGhlIHN3YXAgY2FjaGUuCisgKi8KK2ludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfY291bnQocGFnZSwgMik7Cit9CisKKy8qCisgKiBUaGUgcGFnZW91dCBjb2RlIGhvbGRzIGFuIGV4dHJhIHJlZmVyZW5jZSB0byB0aGUgcGFnZS4gIFRoYXQgcmFpc2VzCisgKiB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIHRlc3QgZm9yIHRvIDIgZm9yIGEgcGFnZSB0aGF0IGlzIG9ubHkgaW4gdGhlCisgKiBzd2FwIGNhY2hlIHBsdXMgMSBmb3IgZWFjaCBwcm9jZXNzIHRoYXQgbWFwcyB0aGUgcGFnZS4KKyAqLworaW50IHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlX3JlZihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfY291bnQocGFnZSwgMiArIHBhZ2VfbWFwY291bnQocGFnZSkpOworfQorCisvKgogICogRnJlZSB0aGUgc3dhcCBlbnRyeSBsaWtlIGFib3ZlLCBidXQgYWxzbyB0cnkgdG8KICAqIGZyZWUgdGhlIHBhZ2UgY2FjaGUgZW50cnkgaWYgaXQgaXMgdGhlIGxhc3QgdXNlci4KICAqLwpAQCAtNDAzLDcgKzQyMiw3IEBACiAJaWYgKHApIHsKIAkJaWYgKHN3YXBfZW50cnlfZnJlZShwLCBzd3Bfb2Zmc2V0KGVudHJ5KSkgPT0gMSkgewogCQkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UoJnN3YXBwZXJfc3BhY2UsIGVudHJ5LnZhbCk7Ci0JCQlpZiAocGFnZSAmJiB1bmxpa2VseSghdHJ5bG9ja19wYWdlKHBhZ2UpKSkgeworCQkJaWYgKHBhZ2UgJiYgIXRyeWxvY2tfcGFnZShwYWdlKSkgewogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJCQlwYWdlID0gTlVMTDsKIAkJCX0KZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jCmluZGV4IDY2NTBjMWQuLjEyMjkyMTEgMTAwNjQ0Ci0tLSBhL21tL3RydW5jYXRlLmMKKysrIGIvbW0vdHJ1bmNhdGUuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIExpbnVzIFRvcnZhbGRzCiAgKgotICogMTBTZXAyMDAyCWFrcG1AemlwLmNvbS5hdQorICogMTBTZXAyMDAyCUFuZHJldyBNb3J0b24KICAqCQlJbml0aWFsIHZlcnNpb24uCiAgKi8KIApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgkvKiBncnIuIHRyeV90b19yZWxlYXNlX3BhZ2UsCiAJCQkJICAgZG9faW52YWxpZGF0ZXBhZ2UgKi8KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiAKIC8qKgpAQCAtMTAzLDYgKzEwNCw3IEBACiAKIAljYW5jZWxfZGlydHlfcGFnZShwYWdlLCBQQUdFX0NBQ0hFX1NJWkUpOwogCisJY2xlYXJfcGFnZV9tbG9jayhwYWdlKTsKIAlyZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwogCUNsZWFyUGFnZU1hcHBlZFRvRGlzayhwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CS8qIHBhZ2VjYWNoZSByZWYgKi8KQEAgLTEyNyw2ICsxMjksNyBAQAogCWlmIChQYWdlUHJpdmF0ZShwYWdlKSAmJiAhdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCAwKSkKIAkJcmV0dXJuIDA7CiAKKwljbGVhcl9wYWdlX21sb2NrKHBhZ2UpOwogCXJldCA9IHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIHBhZ2UpOwogCiAJcmV0dXJuIHJldDsKQEAgLTM1Miw2ICszNTUsNyBAQAogCWlmIChQYWdlRGlydHkocGFnZSkpCiAJCWdvdG8gZmFpbGVkOwogCisJY2xlYXJfcGFnZV9tbG9jayhwYWdlKTsKIAlCVUdfT04oUGFnZVByaXZhdGUocGFnZSkpOwogCV9fcmVtb3ZlX2Zyb21fcGFnZV9jYWNoZShwYWdlKTsKIAlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggYmJhMDZjNC4uMDc5NzU4OSAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtOCw2ICs4LDcgQEAKICAqICBOdW1hIGF3YXJlbmVzcywgQ2hyaXN0b3BoIExhbWV0ZXIsIFNHSSwgSnVuZSAyMDA1CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KQEAgLTE4LDE2ICsxOSwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnb2JqZWN0cy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KIAorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAKLURFRklORV9SV0xPQ0sodm1saXN0X2xvY2spOwotc3RydWN0IHZtX3N0cnVjdCAqdm1saXN0OwotCi1zdGF0aWMgdm9pZCAqX192bWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCwKLQkJCSAgICBpbnQgbm9kZSwgdm9pZCAqY2FsbGVyKTsKKy8qKiogUGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICoqKi8KIAogc3RhdGljIHZvaWQgdnVubWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQogewpAQCAtNDAsOCArNDIsNyBAQAogCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdnVubWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGVuZCkKK3N0YXRpYyB2b2lkIHZ1bm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlwbWRfdCAqcG1kOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTU1LDggKzU2LDcgQEAKIAl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHZ1bm1hcF9wdWRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkJdW5zaWduZWQgbG9uZyBlbmQpCitzdGF0aWMgdm9pZCB2dW5tYXBfcHVkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJcHVkX3QgKnB1ZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC03MCwxMiArNzAsMTAgQEAKIAl9IHdoaWxlIChwdWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIH0KIAotdm9pZCB1bm1hcF9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgdm9pZCB2dW5tYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXBnZF90ICpwZ2Q7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwotCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBhZGRyOwotCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIHNpemU7CiAKIAlCVUdfT04oYWRkciA+PSBlbmQpOwogCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKQEAgLTg2LDM1ICs4NCwzNiBAQAogCQkJY29udGludWU7CiAJCXZ1bm1hcF9wdWRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0KTsKIAl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKLQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpOwotfQotCi1zdGF0aWMgdm9pZCB1bm1hcF92bV9hcmVhKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEpCi17Ci0JdW5tYXBfa2VybmVsX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFyZWEtPmFkZHIsIGFyZWEtPnNpemUpOwogfQogCiBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKipwYWdlcykKKwkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIpCiB7CiAJcHRlX3QgKnB0ZTsKIAorCS8qCisJICogbnIgaXMgYSBydW5uaW5nIGluZGV4IGludG8gdGhlIGFycmF5IHdoaWNoIGhlbHBzIGhpZ2hlciBsZXZlbAorCSAqIGNhbGxlcnMga2VlcCB0cmFjayBvZiB3aGVyZSB3ZSdyZSB1cCB0by4KKwkgKi8KKwogCXB0ZSA9IHB0ZV9hbGxvY19rZXJuZWwocG1kLCBhZGRyKTsKIAlpZiAoIXB0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG8gewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9ICoqcGFnZXM7Ci0JCVdBUk5fT04oIXB0ZV9ub25lKCpwdGUpKTsKLQkJaWYgKCFwYWdlKQorCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzWypucl07CisKKwkJaWYgKFdBUk5fT04oIXB0ZV9ub25lKCpwdGUpKSkKKwkJCXJldHVybiAtRUJVU1k7CisJCWlmIChXQVJOX09OKCFwYWdlKSkKIAkJCXJldHVybiAtRU5PTUVNOwogCQlzZXRfcHRlX2F0KCZpbml0X21tLCBhZGRyLCBwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7Ci0JCSgqcGFnZXMpKys7CisJCSgqbnIpKys7CiAJfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKipwYWdlcykKK3N0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQl1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucikKIHsKIAlwbWRfdCAqcG1kOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTEyNCwxNCArMTIzLDE0IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWRvIHsKIAkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlpZiAodm1hcF9wdGVfcmFuZ2UocG1kLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcykpCisJCWlmICh2bWFwX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBucikpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdm1hcF9wdWRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqKnBhZ2VzKQorc3RhdGljIGludCB2bWFwX3B1ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yKQogewogCXB1ZF90ICpwdWQ7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwpAQCAtMTQxLDU3ICsxNDAsNzggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG8gewogCQluZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmICh2bWFwX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzKSkKKwkJaWYgKHZtYXBfcG1kX3JhbmdlKHB1ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yKSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCXJldHVybiAwOwogfQogCi1pbnQgbWFwX3ZtX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKioqcGFnZXMpCisvKgorICogU2V0IHVwIHBhZ2UgdGFibGVzIGluIGt2YSAoYWRkciwgZW5kKS4gVGhlIHB0ZXMgc2hhbGwgaGF2ZSBwcm90ICJwcm90IiwgYW5kCisgKiB3aWxsIGhhdmUgcGZucyBjb3JyZXNwb25kaW5nIHRvIHRoZSAicGFnZXMiIGFycmF5LgorICoKKyAqIEllLiBwdGUgYXQgYWRkcitOKlBBR0VfU0laRSBzaGFsbCBwb2ludCB0byBwZm4gY29ycmVzcG9uZGluZyB0byBwYWdlc1tOXQorICovCitzdGF0aWMgaW50IHZtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCXBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMpCiB7CiAJcGdkX3QgKnBnZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGFyZWEtPmFkZHI7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgYXJlYS0+c2l6ZSAtIFBBR0VfU0laRTsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOworCWludCBuciA9IDA7CiAKIAlCVUdfT04oYWRkciA+PSBlbmQpOwogCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKIAlkbyB7CiAJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJZXJyID0gdm1hcF9wdWRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcyk7CisJCWVyciA9IHZtYXBfcHVkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsICZucik7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKLQlmbHVzaF9jYWNoZV92bWFwKCh1bnNpZ25lZCBsb25nKSBhcmVhLT5hZGRyLCBlbmQpOwotCXJldHVybiBlcnI7CisJZmx1c2hfY2FjaGVfdm1hcChhZGRyLCBlbmQpOworCisJaWYgKHVubGlrZWx5KGVycikpCisJCXJldHVybiBlcnI7CisJcmV0dXJuIG5yOwogfQotRVhQT1JUX1NZTUJPTF9HUEwobWFwX3ZtX2FyZWEpOworCitzdGF0aWMgaW5saW5lIGludCBpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKngpCit7CisJLyoKKwkgKiB4ODYtNjQgYW5kIHNwYXJjNjQgcHV0IG1vZHVsZXMgaW4gYSBzcGVjaWFsIHBsYWNlLAorCSAqIGFuZCBmYWxsIGJhY2sgb24gdm1hbGxvYygpIGlmIHRoYXQgZmFpbHMuIE90aGVycworCSAqIGp1c3QgcHV0IGl0IGluIHRoZSB2bWFsbG9jIHNwYWNlLgorCSAqLworI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRVMpICYmIGRlZmluZWQoTU9EVUxFU19WQUREUikKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl4OworCWlmIChhZGRyID49IE1PRFVMRVNfVkFERFIgJiYgYWRkciA8IE1PRFVMRVNfRU5EKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCXJldHVybiBpc192bWFsbG9jX2FkZHIoeCk7Cit9CiAKIC8qCi0gKiBNYXAgYSB2bWFsbG9jKCktc3BhY2UgdmlydHVhbCBhZGRyZXNzIHRvIHRoZSBwaHlzaWNhbCBwYWdlLgorICogV2FsayBhIHZtYXAgYWRkcmVzcyB0byB0aGUgc3RydWN0IHBhZ2UgaXQgbWFwcy4KICAqLwogc3RydWN0IHBhZ2UgKnZtYWxsb2NfdG9fcGFnZShjb25zdCB2b2lkICp2bWFsbG9jX2FkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHZtYWxsb2NfYWRkcjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJcGdkX3QgKnBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKLQlwdWRfdCAqcHVkOwotCXBtZF90ICpwbWQ7Ci0JcHRlX3QgKnB0ZXAsIHB0ZTsKIAogCS8qCiAJICogWFhYIHdlIG1pZ2h0IG5lZWQgdG8gY2hhbmdlIHRoaXMgaWYgd2UgYWRkIFZJUlRVQUxfQlVHX09OIGZvcgogCSAqIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgdm1hbGxvYyBtb2R1bGUgc3BhY2UKIAkgKi8KLQlWSVJUVUFMX0JVR19PTighaXNfdm1hbGxvY19hZGRyKHZtYWxsb2NfYWRkcikgJiYKLQkJCSFpc19tb2R1bGVfYWRkcmVzcyhhZGRyKSk7CisJVklSVFVBTF9CVUdfT04oIWlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIodm1hbGxvY19hZGRyKSk7CiAKIAlpZiAoIXBnZF9ub25lKCpwZ2QpKSB7Ci0JCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwkJcHVkX3QgKnB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKIAkJaWYgKCFwdWRfbm9uZSgqcHVkKSkgewotCQkJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCQkJcG1kX3QgKnBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKIAkJCWlmICghcG1kX25vbmUoKnBtZCkpIHsKKwkJCQlwdGVfdCAqcHRlcCwgcHRlOworCiAJCQkJcHRlcCA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcik7CiAJCQkJcHRlID0gKnB0ZXA7CiAJCQkJaWYgKHB0ZV9wcmVzZW50KHB0ZSkpCkBAIC0yMTMsMTMgKzIzMyw3NTEgQEAKIH0KIEVYUE9SVF9TWU1CT0wodm1hbGxvY190b19wZm4pOwogCi1zdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqCi1fX2dldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQl1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrLCB2b2lkICpjYWxsZXIpCisKKy8qKiogR2xvYmFsIGt2YSBhbGxvY2F0b3IgKioqLworCisjZGVmaW5lIFZNX0xBWllfRlJFRQkweDAxCisjZGVmaW5lIFZNX0xBWllfRlJFRUlORwkweDAyCisjZGVmaW5lIFZNX1ZNX0FSRUEJMHgwNAorCitzdHJ1Y3Qgdm1hcF9hcmVhIHsKKwl1bnNpZ25lZCBsb25nIHZhX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgdmFfZW5kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJiX25vZGUgcmJfbm9kZTsJCS8qIGFkZHJlc3Mgc29ydGVkIHJidHJlZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIGFkZHJlc3Mgc29ydGVkIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHB1cmdlX2xpc3Q7CS8qICJsYXp5IHB1cmdlIiBsaXN0ICovCisJdm9pZCAqcHJpdmF0ZTsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7Cit9OworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZtYXBfYXJlYV9sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCB2bWFwX2FyZWFfcm9vdCA9IFJCX1JPT1Q7CitzdGF0aWMgTElTVF9IRUFEKHZtYXBfYXJlYV9saXN0KTsKKworc3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKl9fZmluZF92bWFwX2FyZWEodW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCB2bV9zdHJ1Y3QgKipwLCAqdG1wLCAqYXJlYTsKLQl1bnNpZ25lZCBsb25nIGFsaWduID0gMTsKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHZtYXBfYXJlYV9yb290LnJiX25vZGU7CisKKwl3aGlsZSAobikgeworCQlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKKworCQl2YSA9IHJiX2VudHJ5KG4sIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQlpZiAoYWRkciA8IHZhLT52YV9zdGFydCkKKwkJCW4gPSBuLT5yYl9sZWZ0OworCQllbHNlIGlmIChhZGRyID4gdmEtPnZhX3N0YXJ0KQorCQkJbiA9IG4tPnJiX3JpZ2h0OworCQllbHNlCisJCQlyZXR1cm4gdmE7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5zZXJ0X3ZtYXBfYXJlYShzdHJ1Y3Qgdm1hcF9hcmVhICp2YSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmdm1hcF9hcmVhX3Jvb3QucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmJfbm9kZSAqdG1wOworCisJd2hpbGUgKCpwKSB7CisJCXN0cnVjdCB2bWFwX2FyZWEgKnRtcDsKKworCQlwYXJlbnQgPSAqcDsKKwkJdG1wID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3Qgdm1hcF9hcmVhLCByYl9ub2RlKTsKKwkJaWYgKHZhLT52YV9zdGFydCA8IHRtcC0+dmFfZW5kKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmICh2YS0+dmFfZW5kID4gdG1wLT52YV9zdGFydCkKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCUJVRygpOworCX0KKworCXJiX2xpbmtfbm9kZSgmdmEtPnJiX25vZGUsIHBhcmVudCwgcCk7CisJcmJfaW5zZXJ0X2NvbG9yKCZ2YS0+cmJfbm9kZSwgJnZtYXBfYXJlYV9yb290KTsKKworCS8qIGFkZHJlc3Mtc29ydCB0aGlzIGxpc3Qgc28gaXQgaXMgdXNhYmxlIGxpa2UgdGhlIHZtbGlzdCAqLworCXRtcCA9IHJiX3ByZXYoJnZhLT5yYl9ub2RlKTsKKwlpZiAodG1wKSB7CisJCXN0cnVjdCB2bWFwX2FyZWEgKnByZXY7CisJCXByZXYgPSByYl9lbnRyeSh0bXAsIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQlsaXN0X2FkZF9yY3UoJnZhLT5saXN0LCAmcHJldi0+bGlzdCk7CisJfSBlbHNlCisJCWxpc3RfYWRkX3JjdSgmdmEtPmxpc3QsICZ2bWFwX2FyZWFfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHB1cmdlX3ZtYXBfYXJlYV9sYXp5KHZvaWQpOworCisvKgorICogQWxsb2NhdGUgYSByZWdpb24gb2YgS1ZBIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSBhbmQgYWxpZ25tZW50LCB3aXRoaW4gdGhlCisgKiB2c3RhcnQgYW5kIHZlbmQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICphbGxvY192bWFwX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLAorCQkJCXVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkJdW5zaWduZWQgbG9uZyB2c3RhcnQsIHVuc2lnbmVkIGxvbmcgdmVuZCwKKwkJCQlpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJc3RydWN0IHJiX25vZGUgKm47CiAJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCBwdXJnZWQgPSAwOworCisJQlVHX09OKHNpemUgJiB+UEFHRV9NQVNLKTsKKworCWFkZHIgPSBBTElHTih2c3RhcnQsIGFsaWduKTsKKworCXZhID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3Qgdm1hcF9hcmVhKSwKKwkJCWdmcF9tYXNrICYgR0ZQX1JFQ0xBSU1fTUFTSywgbm9kZSk7CisJaWYgKHVubGlrZWx5KCF2YSkpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCityZXRyeToKKwlzcGluX2xvY2soJnZtYXBfYXJlYV9sb2NrKTsKKwkvKiBYWFg6IGNvdWxkIGhhdmUgYSBsYXN0X2hvbGUgY2FjaGUgKi8KKwluID0gdm1hcF9hcmVhX3Jvb3QucmJfbm9kZTsKKwlpZiAobikgeworCQlzdHJ1Y3Qgdm1hcF9hcmVhICpmaXJzdCA9IE5VTEw7CisKKwkJZG8geworCQkJc3RydWN0IHZtYXBfYXJlYSAqdG1wOworCQkJdG1wID0gcmJfZW50cnkobiwgc3RydWN0IHZtYXBfYXJlYSwgcmJfbm9kZSk7CisJCQlpZiAodG1wLT52YV9lbmQgPj0gYWRkcikgeworCQkJCWlmICghZmlyc3QgJiYgdG1wLT52YV9zdGFydCA8IGFkZHIgKyBzaXplKQorCQkJCQlmaXJzdCA9IHRtcDsKKwkJCQluID0gbi0+cmJfbGVmdDsKKwkJCX0gZWxzZSB7CisJCQkJZmlyc3QgPSB0bXA7CisJCQkJbiA9IG4tPnJiX3JpZ2h0OworCQkJfQorCQl9IHdoaWxlIChuKTsKKworCQlpZiAoIWZpcnN0KQorCQkJZ290byBmb3VuZDsKKworCQlpZiAoZmlyc3QtPnZhX2VuZCA8IGFkZHIpIHsKKwkJCW4gPSByYl9uZXh0KCZmaXJzdC0+cmJfbm9kZSk7CisJCQlpZiAobikKKwkJCQlmaXJzdCA9IHJiX2VudHJ5KG4sIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQkJZWxzZQorCQkJCWdvdG8gZm91bmQ7CisJCX0KKworCQl3aGlsZSAoYWRkciArIHNpemUgPj0gZmlyc3QtPnZhX3N0YXJ0ICYmIGFkZHIgKyBzaXplIDw9IHZlbmQpIHsKKwkJCWFkZHIgPSBBTElHTihmaXJzdC0+dmFfZW5kICsgUEFHRV9TSVpFLCBhbGlnbik7CisKKwkJCW4gPSByYl9uZXh0KCZmaXJzdC0+cmJfbm9kZSk7CisJCQlpZiAobikKKwkJCQlmaXJzdCA9IHJiX2VudHJ5KG4sIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQkJZWxzZQorCQkJCWdvdG8gZm91bmQ7CisJCX0KKwl9Citmb3VuZDoKKwlpZiAoYWRkciArIHNpemUgPiB2ZW5kKSB7CisJCXNwaW5fdW5sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisJCWlmICghcHVyZ2VkKSB7CisJCQlwdXJnZV92bWFwX2FyZWFfbGF6eSgpOworCQkJcHVyZ2VkID0gMTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgInZtYXAgYWxsb2NhdGlvbiBmYWlsZWQ6ICIKKwkJCQkgInVzZSB2bWFsbG9jPTxzaXplPiB0byBpbmNyZWFzZSBzaXplLlxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CisJfQorCisJQlVHX09OKGFkZHIgJiAoYWxpZ24tMSkpOworCisJdmEtPnZhX3N0YXJ0ID0gYWRkcjsKKwl2YS0+dmFfZW5kID0gYWRkciArIHNpemU7CisJdmEtPmZsYWdzID0gMDsKKwlfX2luc2VydF92bWFwX2FyZWEodmEpOworCXNwaW5fdW5sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisKKwlyZXR1cm4gdmE7Cit9CisKK3N0YXRpYyB2b2lkIHJjdV9mcmVlX3ZhKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3Qgdm1hcF9hcmVhLCByY3VfaGVhZCk7CisKKwlrZnJlZSh2YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZnJlZV92bWFwX2FyZWEoc3RydWN0IHZtYXBfYXJlYSAqdmEpCit7CisJQlVHX09OKFJCX0VNUFRZX05PREUoJnZhLT5yYl9ub2RlKSk7CisJcmJfZXJhc2UoJnZhLT5yYl9ub2RlLCAmdm1hcF9hcmVhX3Jvb3QpOworCVJCX0NMRUFSX05PREUoJnZhLT5yYl9ub2RlKTsKKwlsaXN0X2RlbF9yY3UoJnZhLT5saXN0KTsKKworCWNhbGxfcmN1KCZ2YS0+cmN1X2hlYWQsIHJjdV9mcmVlX3ZhKTsKK30KKworLyoKKyAqIEZyZWUgYSByZWdpb24gb2YgS1ZBIGFsbG9jYXRlZCBieSBhbGxvY192bWFwX2FyZWEKKyAqLworc3RhdGljIHZvaWQgZnJlZV92bWFwX2FyZWEoc3RydWN0IHZtYXBfYXJlYSAqdmEpCit7CisJc3Bpbl9sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisJX19mcmVlX3ZtYXBfYXJlYSh2YSk7CisJc3Bpbl91bmxvY2soJnZtYXBfYXJlYV9sb2NrKTsKK30KKworLyoKKyAqIENsZWFyIHRoZSBwYWdldGFibGUgZW50cmllcyBvZiBhIGdpdmVuIHZtYXBfYXJlYQorICovCitzdGF0aWMgdm9pZCB1bm1hcF92bWFwX2FyZWEoc3RydWN0IHZtYXBfYXJlYSAqdmEpCit7CisJdnVubWFwX3BhZ2VfcmFuZ2UodmEtPnZhX3N0YXJ0LCB2YS0+dmFfZW5kKTsKK30KKworLyoKKyAqIGxhenlfbWF4X3BhZ2VzIGlzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugd2UgZ2F0aGVyIHVwCisgKiBiZWZvcmUgYXR0ZW1wdGluZyB0byBwdXJnZSB3aXRoIGEgVExCIGZsdXNoLgorICoKKyAqIFRoZXJlIGlzIGEgdHJhZGVvZmYgaGVyZTogYSBsYXJnZXIgbnVtYmVyIHdpbGwgY292ZXIgbW9yZSBrZXJuZWwgcGFnZSB0YWJsZXMKKyAqIGFuZCB0YWtlIHNsaWdodGx5IGxvbmdlciB0byBwdXJnZSwgYnV0IGl0IHdpbGwgbGluZWFybHkgcmVkdWNlIHRoZSBudW1iZXIgb2YKKyAqIGdsb2JhbCBUTEIgZmx1c2hlcyB0aGF0IG11c3QgYmUgcGVyZm9ybWVkLiBJdCB3b3VsZCBzZWVtIG5hdHVyYWwgdG8gc2NhbGUKKyAqIHRoaXMgbnVtYmVyIHVwIGxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZiBDUFVzIChiZWNhdXNlIHZtYXBwaW5nIGFjdGl2aXR5CisgKiBjb3VsZCBhbHNvIHNjYWxlIGxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZiBDUFVzKSwgaG93ZXZlciBpdCBpcyBsaWtlbHkKKyAqIHRoYXQgaW4gcHJhY3RpY2UsIHdvcmtsb2FkcyBtaWdodCBiZSBjb25zdHJhaW5lZCBpbiBvdGhlciB3YXlzIHRoYXQgbWVhbgorICogdm1hcCBhY3Rpdml0eSB3aWxsIG5vdCBzY2FsZSBsaW5lYXJseSB3aXRoIENQVXMuIEFsc28sIEkgd2FudCB0byBiZQorICogY29uc2VydmF0aXZlIGFuZCBub3QgaW50cm9kdWNlIGEgYmlnIGxhdGVuY3kgb24gaHVnZSBzeXN0ZW1zLCBzbyBnbyB3aXRoCisgKiBhIGxlc3MgYWdncmVzc2l2ZSBsb2cgc2NhbGUuIEl0IHdpbGwgc3RpbGwgYmUgYW4gaW1wcm92ZW1lbnQgb3ZlciB0aGUgb2xkCisgKiBjb2RlLCBhbmQgaXQgd2lsbCBiZSBzaW1wbGUgdG8gY2hhbmdlIHRoZSBzY2FsZSBmYWN0b3IgaWYgd2UgZmluZCB0aGF0IGl0CisgKiBiZWNvbWVzIGEgcHJvYmxlbSBvbiBiaWdnZXIgc3lzdGVtcy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbGF6eV9tYXhfcGFnZXModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgbG9nOworCisJbG9nID0gZmxzKG51bV9vbmxpbmVfY3B1cygpKTsKKworCXJldHVybiBsb2cgKiAoMzJVTCAqIDEwMjQgKiAxMDI0IC8gUEFHRV9TSVpFKTsKK30KKworc3RhdGljIGF0b21pY190IHZtYXBfbGF6eV9uciA9IEFUT01JQ19JTklUKDApOworCisvKgorICogUHVyZ2VzIGFsbCBsYXppbHktZnJlZWQgdm1hcCBhcmVhcy4KKyAqCisgKiBJZiBzeW5jIGlzIDAgdGhlbiBkb24ndCBwdXJnZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHVyZ2UgaW4gcHJvZ3Jlc3MuCisgKiBJZiBmb3JjZV9mbHVzaCBpcyAxLCB0aGVuIGZsdXNoIGtlcm5lbCBUTEJzIGJldHdlZW4gKnN0YXJ0IGFuZCAqZW5kIGV2ZW4KKyAqIGlmIHdlIGZvdW5kIG5vIGxhenkgdm1hcCBhcmVhcyB0byB1bm1hcCAoY2FsbGVycyBjYW4gdXNlIHRoaXMgdG8gb3B0aW1pc2UKKyAqIHRoZWlyIG93biBUTEIgZmx1c2hpbmcpLgorICogUmV0dXJucyB3aXRoICpzdGFydCA9IG1pbigqc3RhcnQsIGxvd2VzdCBwdXJnZWQgYWRkcmVzcykKKyAqICAgICAgICAgICAgICAqZW5kID0gbWF4KCplbmQsIGhpZ2hlc3QgcHVyZ2VkIGFkZHJlc3MpCisgKi8KK3N0YXRpYyB2b2lkIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCwKKwkJCQkJaW50IHN5bmMsIGludCBmb3JjZV9mbHVzaCkKK3sKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHB1cmdlX2xvY2spOworCUxJU1RfSEVBRCh2YWxpc3QpOworCXN0cnVjdCB2bWFwX2FyZWEgKnZhOworCWludCBuciA9IDA7CisKKwkvKgorCSAqIElmIHN5bmMgaXMgMCBidXQgZm9yY2VfZmx1c2ggaXMgMSwgd2UnbGwgZ28gc3luYyBhbnl3YXkgYnV0IGNhbGxlcnMKKwkgKiBzaG91bGQgbm90IGV4cGVjdCBzdWNoIGJlaGF2aW91ci4gVGhpcyBqdXN0IHNpbXBsaWZpZXMgbG9ja2luZyBmb3IKKwkgKiB0aGUgY2FzZSB0aGF0IGlzbid0IGFjdHVhbGx5IHVzZWQgYXQgdGhlIG1vbWVudCBhbnl3YXkuCisJICovCisJaWYgKCFzeW5jICYmICFmb3JjZV9mbHVzaCkgeworCQlpZiAoIXNwaW5fdHJ5bG9jaygmcHVyZ2VfbG9jaykpCisJCQlyZXR1cm47CisJfSBlbHNlCisJCXNwaW5fbG9jaygmcHVyZ2VfbG9jayk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodmEsICZ2bWFwX2FyZWFfbGlzdCwgbGlzdCkgeworCQlpZiAodmEtPmZsYWdzICYgVk1fTEFaWV9GUkVFKSB7CisJCQlpZiAodmEtPnZhX3N0YXJ0IDwgKnN0YXJ0KQorCQkJCSpzdGFydCA9IHZhLT52YV9zdGFydDsKKwkJCWlmICh2YS0+dmFfZW5kID4gKmVuZCkKKwkJCQkqZW5kID0gdmEtPnZhX2VuZDsKKwkJCW5yICs9ICh2YS0+dmFfZW5kIC0gdmEtPnZhX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCQkJdW5tYXBfdm1hcF9hcmVhKHZhKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnZhLT5wdXJnZV9saXN0LCAmdmFsaXN0KTsKKwkJCXZhLT5mbGFncyB8PSBWTV9MQVpZX0ZSRUVJTkc7CisJCQl2YS0+ZmxhZ3MgJj0gflZNX0xBWllfRlJFRTsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChucikgeworCQlCVUdfT04obnIgPiBhdG9taWNfcmVhZCgmdm1hcF9sYXp5X25yKSk7CisJCWF0b21pY19zdWIobnIsICZ2bWFwX2xhenlfbnIpOworCX0KKworCWlmIChuciB8fCBmb3JjZV9mbHVzaCkKKwkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSgqc3RhcnQsICplbmQpOworCisJaWYgKG5yKSB7CisJCXNwaW5fbG9jaygmdm1hcF9hcmVhX2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhLCAmdmFsaXN0LCBwdXJnZV9saXN0KQorCQkJX19mcmVlX3ZtYXBfYXJlYSh2YSk7CisJCXNwaW5fdW5sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrKCZwdXJnZV9sb2NrKTsKK30KKworLyoKKyAqIEtpY2sgb2ZmIGEgcHVyZ2Ugb2YgdGhlIG91dHN0YW5kaW5nIGxhenkgYXJlYXMuCisgKi8KK3N0YXRpYyB2b2lkIHB1cmdlX3ZtYXBfYXJlYV9sYXp5KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IFVMT05HX01BWCwgZW5kID0gMDsKKworCV9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkoJnN0YXJ0LCAmZW5kLCAwLCAwKTsKK30KKworLyoKKyAqIEZyZWUgYW5kIHVubWFwIGEgdm1hcCBhcmVhCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfdW5tYXBfdm1hcF9hcmVhKHN0cnVjdCB2bWFwX2FyZWEgKnZhKQoreworCXZhLT5mbGFncyB8PSBWTV9MQVpZX0ZSRUU7CisJYXRvbWljX2FkZCgodmEtPnZhX2VuZCAtIHZhLT52YV9zdGFydCkgPj4gUEFHRV9TSElGVCwgJnZtYXBfbGF6eV9ucik7CisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZ2bWFwX2xhenlfbnIpID4gbGF6eV9tYXhfcGFnZXMoKSkpCisJCXB1cmdlX3ZtYXBfYXJlYV9sYXp5KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICpmaW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisKKwlzcGluX2xvY2soJnZtYXBfYXJlYV9sb2NrKTsKKwl2YSA9IF9fZmluZF92bWFwX2FyZWEoYWRkcik7CisJc3Bpbl91bmxvY2soJnZtYXBfYXJlYV9sb2NrKTsKKworCXJldHVybiB2YTsKK30KKworc3RhdGljIHZvaWQgZnJlZV91bm1hcF92bWFwX2FyZWFfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisKKwl2YSA9IGZpbmRfdm1hcF9hcmVhKGFkZHIpOworCUJVR19PTighdmEpOworCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZhKTsKK30KKworCisvKioqIFBlciBjcHUga3ZhIGFsbG9jYXRvciAqKiovCisKKy8qCisgKiB2bWFwIHNwYWNlIGlzIGxpbWl0ZWQgZXNwZWNpYWxseSBvbiAzMiBiaXQgYXJjaGl0ZWN0dXJlcy4gRW5zdXJlIHRoZXJlIGlzCisgKiByb29tIGZvciBhdCBsZWFzdCAxNiBwZXJjcHUgdm1hcCBibG9ja3MgcGVyIENQVS4KKyAqLworLyoKKyAqIElmIHdlIGhhZCBhIGNvbnN0YW50IFZNQUxMT0NfU1RBUlQgYW5kIFZNQUxMT0NfRU5ELCB3ZSdkIGxpa2UgdG8gYmUgYWJsZQorICogdG8gI2RlZmluZSBWTUFMTE9DX1NQQUNFCQkoVk1BTExPQ19FTkQtVk1BTExPQ19TVEFSVCkuIEd1ZXNzCisgKiBpbnN0ZWFkICh3ZSBqdXN0IG5lZWQgYSByb3VnaCBpZGVhKQorICovCisjaWYgQklUU19QRVJfTE9ORyA9PSAzMgorI2RlZmluZSBWTUFMTE9DX1NQQUNFCQkoMTI4VUwqMTAyNCoxMDI0KQorI2Vsc2UKKyNkZWZpbmUgVk1BTExPQ19TUEFDRQkJKDEyOFVMKjEwMjQqMTAyNCoxMDI0KQorI2VuZGlmCisKKyNkZWZpbmUgVk1BTExPQ19QQUdFUwkJKFZNQUxMT0NfU1BBQ0UgLyBQQUdFX1NJWkUpCisjZGVmaW5lIFZNQVBfTUFYX0FMTE9DCQlCSVRTX1BFUl9MT05HCS8qIDI1Nksgd2l0aCA0SyBwYWdlcyAqLworI2RlZmluZSBWTUFQX0JCTUFQX0JJVFNfTUFYCTEwMjQJLyogNE1CIHdpdGggNEsgcGFnZXMgKi8KKyNkZWZpbmUgVk1BUF9CQk1BUF9CSVRTX01JTgkoVk1BUF9NQVhfQUxMT0MqMikKKyNkZWZpbmUgVk1BUF9NSU4oeCwgeSkJCSgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpIC8qIGNhbid0IHVzZSBtaW4oKSAqLworI2RlZmluZSBWTUFQX01BWCh4LCB5KQkJKCh4KSA+ICh5KSA/ICh4KSA6ICh5KSkgLyogY2FuJ3QgdXNlIG1heCgpICovCisjZGVmaW5lIFZNQVBfQkJNQVBfQklUUwkJVk1BUF9NSU4oVk1BUF9CQk1BUF9CSVRTX01BWCwJCVwKKwkJCQkJVk1BUF9NQVgoVk1BUF9CQk1BUF9CSVRTX01JTiwJXAorCQkJCQkJVk1BTExPQ19QQUdFUyAvIE5SX0NQVVMgLyAxNikpCisKKyNkZWZpbmUgVk1BUF9CTE9DS19TSVpFCQkoVk1BUF9CQk1BUF9CSVRTICogUEFHRV9TSVpFKQorCitzdHJ1Y3Qgdm1hcF9ibG9ja19xdWV1ZSB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5OworCXVuc2lnbmVkIGludCBucl9kaXJ0eTsKK307CisKK3N0cnVjdCB2bWFwX2Jsb2NrIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJc3RydWN0IHZtYXBfYmxvY2tfcXVldWUgKnZicTsKKwl1bnNpZ25lZCBsb25nIGZyZWUsIGRpcnR5OworCURFQ0xBUkVfQklUTUFQKGFsbG9jX21hcCwgVk1BUF9CQk1BUF9CSVRTKTsKKwlERUNMQVJFX0JJVE1BUChkaXJ0eV9tYXAsIFZNQVBfQkJNQVBfQklUUyk7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5X2xpc3Q7CisJCX07CisJCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKKwl9OworfTsKKworLyogUXVldWUgb2YgZnJlZSBhbmQgZGlydHkgdm1hcCBibG9ja3MsIGZvciBhbGxvY2F0aW9uIGFuZCBmbHVzaGluZyBwdXJwb3NlcyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlLCB2bWFwX2Jsb2NrX3F1ZXVlKTsKKworLyoKKyAqIFJhZGl4IHRyZWUgb2Ygdm1hcCBibG9ja3MsIGluZGV4ZWQgYnkgYWRkcmVzcywgdG8gcXVpY2tseSBmaW5kIGEgdm1hcCBibG9jaworICogaW4gdGhlIGZyZWUgcGF0aC4gQ291bGQgZ2V0IHJpZCBvZiB0aGlzIGlmIHdlIGNoYW5nZSB0aGUgQVBJIHRvIHJldHVybiBhCisgKiAiY29va2llIiBmcm9tIGFsbG9jLCB0byBiZSBwYXNzZWQgdG8gZnJlZS4gQnV0IG5vIGJpZyBkZWFsIHlldC4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyh2bWFwX2Jsb2NrX3RyZWVfbG9jayk7CitzdGF0aWMgUkFESVhfVFJFRSh2bWFwX2Jsb2NrX3RyZWUsIEdGUF9BVE9NSUMpOworCisvKgorICogV2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBmYWxsYmFjayBtZWNoYW5pc20gdG8gYWxsb2NhdGUgdmlydHVhbCBtZW1vcnkKKyAqIG91dCBvZiBwYXJ0aWFsbHkgZmlsbGVkIHZtYXAgYmxvY2tzLiBIb3dldmVyIHZtYXAgYmxvY2sgc2l6aW5nIHNob3VsZCBiZQorICogZmFpcmx5IHJlYXNvbmFibGUgYWNjb3JkaW5nIHRvIHRoZSB2bWFsbG9jIHNpemUsIHNvIGl0IHNob3VsZG4ndCBiZSBhCisgKiBiaWcgcHJvYmxlbS4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRyX3RvX3ZiX2lkeCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJYWRkciAtPSBWTUFMTE9DX1NUQVJUICYgfihWTUFQX0JMT0NLX1NJWkUtMSk7CisJYWRkciAvPSBWTUFQX0JMT0NLX1NJWkU7CisJcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1hcF9ibG9jayAqbmV3X3ZtYXBfYmxvY2soZ2ZwX3QgZ2ZwX21hc2spCit7CisJc3RydWN0IHZtYXBfYmxvY2tfcXVldWUgKnZicTsKKwlzdHJ1Y3Qgdm1hcF9ibG9jayAqdmI7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJdW5zaWduZWQgbG9uZyB2Yl9pZHg7CisJaW50IG5vZGUsIGVycjsKKworCW5vZGUgPSBudW1hX25vZGVfaWQoKTsKKworCXZiID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3Qgdm1hcF9ibG9jayksCisJCQlnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0ssIG5vZGUpOworCWlmICh1bmxpa2VseSghdmIpKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXZhID0gYWxsb2Nfdm1hcF9hcmVhKFZNQVBfQkxPQ0tfU0laRSwgVk1BUF9CTE9DS19TSVpFLAorCQkJCQlWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwKKwkJCQkJbm9kZSwgZ2ZwX21hc2spOworCWlmICh1bmxpa2VseShJU19FUlIodmEpKSkgeworCQlrZnJlZSh2Yik7CisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIodmEpKTsKKwl9CisKKwllcnIgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwX21hc2spOworCWlmICh1bmxpa2VseShlcnIpKSB7CisJCWtmcmVlKHZiKTsKKwkJZnJlZV92bWFwX2FyZWEodmEpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKworCXNwaW5fbG9ja19pbml0KCZ2Yi0+bG9jayk7CisJdmItPnZhID0gdmE7CisJdmItPmZyZWUgPSBWTUFQX0JCTUFQX0JJVFM7CisJdmItPmRpcnR5ID0gMDsKKwliaXRtYXBfemVybyh2Yi0+YWxsb2NfbWFwLCBWTUFQX0JCTUFQX0JJVFMpOworCWJpdG1hcF96ZXJvKHZiLT5kaXJ0eV9tYXAsIFZNQVBfQkJNQVBfQklUUyk7CisJSU5JVF9MSVNUX0hFQUQoJnZiLT5mcmVlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZ2Yi0+ZGlydHlfbGlzdCk7CisKKwl2Yl9pZHggPSBhZGRyX3RvX3ZiX2lkeCh2YS0+dmFfc3RhcnQpOworCXNwaW5fbG9jaygmdm1hcF9ibG9ja190cmVlX2xvY2spOworCWVyciA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZ2bWFwX2Jsb2NrX3RyZWUsIHZiX2lkeCwgdmIpOworCXNwaW5fdW5sb2NrKCZ2bWFwX2Jsb2NrX3RyZWVfbG9jayk7CisJQlVHX09OKGVycik7CisJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCisJdmJxID0gJmdldF9jcHVfdmFyKHZtYXBfYmxvY2tfcXVldWUpOworCXZiLT52YnEgPSB2YnE7CisJc3Bpbl9sb2NrKCZ2YnEtPmxvY2spOworCWxpc3RfYWRkKCZ2Yi0+ZnJlZV9saXN0LCAmdmJxLT5mcmVlKTsKKwlzcGluX3VubG9jaygmdmJxLT5sb2NrKTsKKwlwdXRfY3B1X3Zhcih2bWFwX2NwdV9ibG9ja3MpOworCisJcmV0dXJuIHZiOworfQorCitzdGF0aWMgdm9pZCByY3VfZnJlZV92YihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IHZtYXBfYmxvY2sgKnZiID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB2bWFwX2Jsb2NrLCByY3VfaGVhZCk7CisKKwlrZnJlZSh2Yik7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfdm1hcF9ibG9jayhzdHJ1Y3Qgdm1hcF9ibG9jayAqdmIpCit7CisJc3RydWN0IHZtYXBfYmxvY2sgKnRtcDsKKwl1bnNpZ25lZCBsb25nIHZiX2lkeDsKKworCXNwaW5fbG9jaygmdmItPnZicS0+bG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZ2Yi0+ZnJlZV9saXN0KSkKKwkJbGlzdF9kZWwoJnZiLT5mcmVlX2xpc3QpOworCWlmICghbGlzdF9lbXB0eSgmdmItPmRpcnR5X2xpc3QpKQorCQlsaXN0X2RlbCgmdmItPmRpcnR5X2xpc3QpOworCXNwaW5fdW5sb2NrKCZ2Yi0+dmJxLT5sb2NrKTsKKworCXZiX2lkeCA9IGFkZHJfdG9fdmJfaWR4KHZiLT52YS0+dmFfc3RhcnQpOworCXNwaW5fbG9jaygmdm1hcF9ibG9ja190cmVlX2xvY2spOworCXRtcCA9IHJhZGl4X3RyZWVfZGVsZXRlKCZ2bWFwX2Jsb2NrX3RyZWUsIHZiX2lkeCk7CisJc3Bpbl91bmxvY2soJnZtYXBfYmxvY2tfdHJlZV9sb2NrKTsKKwlCVUdfT04odG1wICE9IHZiKTsKKworCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZiLT52YSk7CisJY2FsbF9yY3UoJnZiLT5yY3VfaGVhZCwgcmN1X2ZyZWVfdmIpOworfQorCitzdGF0aWMgdm9pZCAqdmJfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlzdHJ1Y3Qgdm1hcF9ibG9ja19xdWV1ZSAqdmJxOworCXN0cnVjdCB2bWFwX2Jsb2NrICp2YjsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAwOworCXVuc2lnbmVkIGludCBvcmRlcjsKKworCUJVR19PTihzaXplICYgflBBR0VfTUFTSyk7CisJQlVHX09OKHNpemUgPiBQQUdFX1NJWkUqVk1BUF9NQVhfQUxMT0MpOworCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCithZ2FpbjoKKwlyY3VfcmVhZF9sb2NrKCk7CisJdmJxID0gJmdldF9jcHVfdmFyKHZtYXBfYmxvY2tfcXVldWUpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZiLCAmdmJxLT5mcmVlLCBmcmVlX2xpc3QpIHsKKwkJaW50IGk7CisKKwkJc3Bpbl9sb2NrKCZ2Yi0+bG9jayk7CisJCWkgPSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbih2Yi0+YWxsb2NfbWFwLAorCQkJCQkJVk1BUF9CQk1BUF9CSVRTLCBvcmRlcik7CisKKwkJaWYgKGkgPj0gMCkgeworCQkJYWRkciA9IHZiLT52YS0+dmFfc3RhcnQgKyAoaSA8PCBQQUdFX1NISUZUKTsKKwkJCUJVR19PTihhZGRyX3RvX3ZiX2lkeChhZGRyKSAhPQorCQkJCQlhZGRyX3RvX3ZiX2lkeCh2Yi0+dmEtPnZhX3N0YXJ0KSk7CisJCQl2Yi0+ZnJlZSAtPSAxVUwgPDwgb3JkZXI7CisJCQlpZiAodmItPmZyZWUgPT0gMCkgeworCQkJCXNwaW5fbG9jaygmdmJxLT5sb2NrKTsKKwkJCQlsaXN0X2RlbF9pbml0KCZ2Yi0+ZnJlZV9saXN0KTsKKwkJCQlzcGluX3VubG9jaygmdmJxLT5sb2NrKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZ2Yi0+bG9jayk7CisJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9jaygmdmItPmxvY2spOworCX0KKwlwdXRfY3B1X3Zhcih2bWFwX2NwdV9ibG9ja3MpOworCXJjdV9yZWFkX3VubG9jaygpOworCisJaWYgKCFhZGRyKSB7CisJCXZiID0gbmV3X3ZtYXBfYmxvY2soZ2ZwX21hc2spOworCQlpZiAoSVNfRVJSKHZiKSkKKwkJCXJldHVybiB2YjsKKwkJZ290byBhZ2FpbjsKKwl9CisKKwlyZXR1cm4gKHZvaWQgKilhZGRyOworfQorCitzdGF0aWMgdm9pZCB2Yl9mcmVlKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIHZiX2lkeDsKKwl1bnNpZ25lZCBpbnQgb3JkZXI7CisJc3RydWN0IHZtYXBfYmxvY2sgKnZiOworCisJQlVHX09OKHNpemUgJiB+UEFHRV9NQVNLKTsKKwlCVUdfT04oc2l6ZSA+IFBBR0VfU0laRSpWTUFQX01BWF9BTExPQyk7CisJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisKKwlvZmZzZXQgPSAodW5zaWduZWQgbG9uZylhZGRyICYgKFZNQVBfQkxPQ0tfU0laRSAtIDEpOworCisJdmJfaWR4ID0gYWRkcl90b192Yl9pZHgoKHVuc2lnbmVkIGxvbmcpYWRkcik7CisJcmN1X3JlYWRfbG9jaygpOworCXZiID0gcmFkaXhfdHJlZV9sb29rdXAoJnZtYXBfYmxvY2tfdHJlZSwgdmJfaWR4KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlCVUdfT04oIXZiKTsKKworCXNwaW5fbG9jaygmdmItPmxvY2spOworCWJpdG1hcF9hbGxvY2F0ZV9yZWdpb24odmItPmRpcnR5X21hcCwgb2Zmc2V0ID4+IFBBR0VfU0hJRlQsIG9yZGVyKTsKKwlpZiAoIXZiLT5kaXJ0eSkgeworCQlzcGluX2xvY2soJnZiLT52YnEtPmxvY2spOworCQlsaXN0X2FkZCgmdmItPmRpcnR5X2xpc3QsICZ2Yi0+dmJxLT5kaXJ0eSk7CisJCXNwaW5fdW5sb2NrKCZ2Yi0+dmJxLT5sb2NrKTsKKwl9CisJdmItPmRpcnR5ICs9IDFVTCA8PCBvcmRlcjsKKwlpZiAodmItPmRpcnR5ID09IFZNQVBfQkJNQVBfQklUUykgeworCQlCVUdfT04odmItPmZyZWUgfHwgIWxpc3RfZW1wdHkoJnZiLT5mcmVlX2xpc3QpKTsKKwkJc3Bpbl91bmxvY2soJnZiLT5sb2NrKTsKKwkJZnJlZV92bWFwX2Jsb2NrKHZiKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2soJnZiLT5sb2NrKTsKK30KKworLyoqCisgKiB2bV91bm1hcF9hbGlhc2VzIC0gdW5tYXAgb3V0c3RhbmRpbmcgbGF6eSBhbGlhc2VzIGluIHRoZSB2bWFwIGxheWVyCisgKgorICogVGhlIHZtYXAvdm1hbGxvYyBsYXllciBsYXppbHkgZmx1c2hlcyBrZXJuZWwgdmlydHVhbCBtYXBwaW5ncyBwcmltYXJpbHkKKyAqIHRvIGFtb3J0aXplIFRMQiBmbHVzaGluZyBvdmVyaGVhZHMuIFdoYXQgdGhpcyBtZWFucyBpcyB0aGF0IGFueSBwYWdlIHlvdQorICogaGF2ZSBub3csIG1heSwgaW4gYSBmb3JtZXIgbGlmZSwgaGF2ZSBiZWVuIG1hcHBlZCBpbnRvIGtlcm5lbCB2aXJ0dWFsCisgKiBhZGRyZXNzIGJ5IHRoZSB2bWFwIGxheWVyIGFuZCBzbyB0aGVyZSBtaWdodCBiZSBzb21lIENQVXMgd2l0aCBUTEIgZW50cmllcworICogc3RpbGwgcmVmZXJlbmNpbmcgdGhhdCBwYWdlIChhZGRpdGlvbmFsIHRvIHRoZSByZWd1bGFyIDE6MSBrZXJuZWwgbWFwcGluZykuCisgKgorICogdm1fdW5tYXBfYWxpYXNlcyBmbHVzaGVzIGFsbCBzdWNoIGxhenkgbWFwcGluZ3MuIEFmdGVyIGl0IHJldHVybnMsIHdlIGNhbgorICogYmUgc3VyZSB0aGF0IG5vbmUgb2YgdGhlIHBhZ2VzIHdlIGhhdmUgY29udHJvbCBvdmVyIHdpbGwgaGF2ZSBhbnkgYWxpYXNlcworICogZnJvbSB0aGUgdm1hcCBsYXllci4KKyAqLwordm9pZCB2bV91bm1hcF9hbGlhc2VzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IFVMT05HX01BWCwgZW5kID0gMDsKKwlpbnQgY3B1OworCWludCBmbHVzaCA9IDA7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXN0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlICp2YnEgPSAmcGVyX2NwdSh2bWFwX2Jsb2NrX3F1ZXVlLCBjcHUpOworCQlzdHJ1Y3Qgdm1hcF9ibG9jayAqdmI7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2YiwgJnZicS0+ZnJlZSwgZnJlZV9saXN0KSB7CisJCQlpbnQgaTsKKworCQkJc3Bpbl9sb2NrKCZ2Yi0+bG9jayk7CisJCQlpID0gZmluZF9maXJzdF9iaXQodmItPmRpcnR5X21hcCwgVk1BUF9CQk1BUF9CSVRTKTsKKwkJCXdoaWxlIChpIDwgVk1BUF9CQk1BUF9CSVRTKSB7CisJCQkJdW5zaWduZWQgbG9uZyBzLCBlOworCQkJCWludCBqOworCQkJCWogPSBmaW5kX25leHRfemVyb19iaXQodmItPmRpcnR5X21hcCwKKwkJCQkJVk1BUF9CQk1BUF9CSVRTLCBpKTsKKworCQkJCXMgPSB2Yi0+dmEtPnZhX3N0YXJ0ICsgKGkgPDwgUEFHRV9TSElGVCk7CisJCQkJZSA9IHZiLT52YS0+dmFfc3RhcnQgKyAoaiA8PCBQQUdFX1NISUZUKTsKKwkJCQl2dW5tYXBfcGFnZV9yYW5nZShzLCBlKTsKKwkJCQlmbHVzaCA9IDE7CisKKwkJCQlpZiAocyA8IHN0YXJ0KQorCQkJCQlzdGFydCA9IHM7CisJCQkJaWYgKGUgPiBlbmQpCisJCQkJCWVuZCA9IGU7CisKKwkJCQlpID0gajsKKwkJCQlpID0gZmluZF9uZXh0X2JpdCh2Yi0+ZGlydHlfbWFwLAorCQkJCQkJCVZNQVBfQkJNQVBfQklUUywgaSk7CisJCQl9CisJCQlzcGluX3VubG9jaygmdmItPmxvY2spOworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKworCV9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkoJnN0YXJ0LCAmZW5kLCAxLCBmbHVzaCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2bV91bm1hcF9hbGlhc2VzKTsKKworLyoqCisgKiB2bV91bm1hcF9yYW0gLSB1bm1hcCBsaW5lYXIga2VybmVsIGFkZHJlc3Mgc3BhY2Ugc2V0IHVwIGJ5IHZtX21hcF9yYW0KKyAqIEBtZW06IHRoZSBwb2ludGVyIHJldHVybmVkIGJ5IHZtX21hcF9yYW0KKyAqIEBjb3VudDogdGhlIGNvdW50IHBhc3NlZCB0byB0aGF0IHZtX21hcF9yYW0gY2FsbCAoY2Fubm90IHVubWFwIHBhcnRpYWwpCisgKi8KK3ZvaWQgdm1fdW5tYXBfcmFtKGNvbnN0IHZvaWQgKm1lbSwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNvdW50IDw8IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpbWVtOworCisJQlVHX09OKCFhZGRyKTsKKwlCVUdfT04oYWRkciA8IFZNQUxMT0NfU1RBUlQpOworCUJVR19PTihhZGRyID4gVk1BTExPQ19FTkQpOworCUJVR19PTihhZGRyICYgKFBBR0VfU0laRS0xKSk7CisKKwlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChtZW0sIHNpemUpOworCisJaWYgKGxpa2VseShjb3VudCA8PSBWTUFQX01BWF9BTExPQykpCisJCXZiX2ZyZWUobWVtLCBzaXplKTsKKwllbHNlCisJCWZyZWVfdW5tYXBfdm1hcF9hcmVhX2FkZHIoYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MKHZtX3VubWFwX3JhbSk7CisKKy8qKgorICogdm1fbWFwX3JhbSAtIG1hcCBwYWdlcyBsaW5lYXJseSBpbnRvIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgKHZtYWxsb2Mgc3BhY2UpCisgKiBAcGFnZXM6IGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZSBwYWdlcyB0byBiZSBtYXBwZWQKKyAqIEBjb3VudDogbnVtYmVyIG9mIHBhZ2VzCisgKiBAbm9kZTogcHJlZmVyIHRvIGFsbG9jYXRlIGRhdGEgc3RydWN0dXJlcyBvbiB0aGlzIG5vZGUKKyAqIEBwcm90OiBtZW1vcnkgcHJvdGVjdGlvbiB0byB1c2UuIFBBR0VfS0VSTkVMIGZvciByZWd1bGFyIFJBTQorICogQHJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgYWRkcmVzcyB0aGF0IGhhcyBiZWVuIG1hcHBlZCwgb3IgTlVMTCBvbiBmYWlsdXJlCisgKi8KK3ZvaWQgKnZtX21hcF9yYW0oc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50LCBpbnQgbm9kZSwgcGdwcm90X3QgcHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBjb3VudCA8PCBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl2b2lkICptZW07CisKKwlpZiAobGlrZWx5KGNvdW50IDw9IFZNQVBfTUFYX0FMTE9DKSkgeworCQltZW0gPSB2Yl9hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKElTX0VSUihtZW0pKQorCQkJcmV0dXJuIE5VTEw7CisJCWFkZHIgPSAodW5zaWduZWQgbG9uZyltZW07CisJfSBlbHNlIHsKKwkJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJCXZhID0gYWxsb2Nfdm1hcF9hcmVhKHNpemUsIFBBR0VfU0laRSwKKwkJCQlWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwgbm9kZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChJU19FUlIodmEpKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJYWRkciA9IHZhLT52YV9zdGFydDsKKwkJbWVtID0gKHZvaWQgKilhZGRyOworCX0KKwlpZiAodm1hcF9wYWdlX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplLCBwcm90LCBwYWdlcykgPCAwKSB7CisJCXZtX3VubWFwX3JhbShtZW0sIGNvdW50KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBtZW07Cit9CitFWFBPUlRfU1lNQk9MKHZtX21hcF9yYW0pOworCit2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCXN0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlICp2YnE7CisKKwkJdmJxID0gJnBlcl9jcHUodm1hcF9ibG9ja19xdWV1ZSwgaSk7CisJCXNwaW5fbG9ja19pbml0KCZ2YnEtPmxvY2spOworCQlJTklUX0xJU1RfSEVBRCgmdmJxLT5mcmVlKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnZicS0+ZGlydHkpOworCQl2YnEtPm5yX2RpcnR5ID0gMDsKKwl9Cit9CisKK3ZvaWQgdW5tYXBfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIHNpemU7CisJdnVubWFwX3BhZ2VfcmFuZ2UoYWRkciwgZW5kKTsKKwlmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGVuZCk7Cit9CisKK2ludCBtYXBfdm1fYXJlYShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKipwYWdlcykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOworCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIGFyZWEtPnNpemUgLSBQQUdFX1NJWkU7CisJaW50IGVycjsKKworCWVyciA9IHZtYXBfcGFnZV9yYW5nZShhZGRyLCBlbmQsIHByb3QsICpwYWdlcyk7CisJaWYgKGVyciA+IDApIHsKKwkJKnBhZ2VzICs9IGVycjsKKwkJZXJyID0gMDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWFwX3ZtX2FyZWEpOworCisvKioqIE9sZCB2bWFsbG9jIGludGVyZmFjZXMgKioqLworREVGSU5FX1JXTE9DSyh2bWxpc3RfbG9jayk7CitzdHJ1Y3Qgdm1fc3RydWN0ICp2bWxpc3Q7CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrLCB2b2lkICpjYWxsZXIpCit7CisJc3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKnZhOworCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CisJc3RydWN0IHZtX3N0cnVjdCAqdG1wLCAqKnA7CisJdW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7CiAKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCWlmIChmbGFncyAmIFZNX0lPUkVNQVApIHsKQEAgLTIzMiwxMyArOTkwLDEyIEBACiAKIAkJYWxpZ24gPSAxdWwgPDwgYml0OwogCX0KLQlhZGRyID0gQUxJR04oc3RhcnQsIGFsaWduKTsKKwogCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwogCWlmICh1bmxpa2VseSghc2l6ZSkpCiAJCXJldHVybiBOVUxMOwogCiAJYXJlYSA9IGttYWxsb2Nfbm9kZShzaXplb2YoKmFyZWEpLCBnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0ssIG5vZGUpOwotCiAJaWYgKHVubGlrZWx5KCFhcmVhKSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTI0Nyw0OCArMTAwNCwzMiBAQAogCSAqLwogCXNpemUgKz0gUEFHRV9TSVpFOwogCi0Jd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOwotCWZvciAocCA9ICZ2bWxpc3Q7ICh0bXAgPSAqcCkgIT0gTlVMTCA7cCA9ICZ0bXAtPm5leHQpIHsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKXRtcC0+YWRkciA8IGFkZHIpIHsKLQkJCWlmKCh1bnNpZ25lZCBsb25nKXRtcC0+YWRkciArIHRtcC0+c2l6ZSA+PSBhZGRyKQotCQkJCWFkZHIgPSBBTElHTih0bXAtPnNpemUgKyAKLQkJCQkJICAgICAodW5zaWduZWQgbG9uZyl0bXAtPmFkZHIsIGFsaWduKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICgoc2l6ZSArIGFkZHIpIDwgYWRkcikKLQkJCWdvdG8gb3V0OwotCQlpZiAoc2l6ZSArIGFkZHIgPD0gKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyKQotCQkJZ290byBmb3VuZDsKLQkJYWRkciA9IEFMSUdOKHRtcC0+c2l6ZSArICh1bnNpZ25lZCBsb25nKXRtcC0+YWRkciwgYWxpZ24pOwotCQlpZiAoYWRkciA+IGVuZCAtIHNpemUpCi0JCQlnb3RvIG91dDsKKwl2YSA9IGFsbG9jX3ZtYXBfYXJlYShzaXplLCBhbGlnbiwgc3RhcnQsIGVuZCwgbm9kZSwgZ2ZwX21hc2spOworCWlmIChJU19FUlIodmEpKSB7CisJCWtmcmVlKGFyZWEpOworCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKChzaXplICsgYWRkcikgPCBhZGRyKQotCQlnb3RvIG91dDsKLQlpZiAoYWRkciA+IGVuZCAtIHNpemUpCi0JCWdvdG8gb3V0OwotCi1mb3VuZDoKLQlhcmVhLT5uZXh0ID0gKnA7Ci0JKnAgPSBhcmVhOwogCiAJYXJlYS0+ZmxhZ3MgPSBmbGFnczsKLQlhcmVhLT5hZGRyID0gKHZvaWQgKilhZGRyOworCWFyZWEtPmFkZHIgPSAodm9pZCAqKXZhLT52YV9zdGFydDsKIAlhcmVhLT5zaXplID0gc2l6ZTsKIAlhcmVhLT5wYWdlcyA9IE5VTEw7CiAJYXJlYS0+bnJfcGFnZXMgPSAwOwogCWFyZWEtPnBoeXNfYWRkciA9IDA7CiAJYXJlYS0+Y2FsbGVyID0gY2FsbGVyOworCXZhLT5wcml2YXRlID0gYXJlYTsKKwl2YS0+ZmxhZ3MgfD0gVk1fVk1fQVJFQTsKKworCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKKwlmb3IgKHAgPSAmdm1saXN0OyAodG1wID0gKnApICE9IE5VTEw7IHAgPSAmdG1wLT5uZXh0KSB7CisJCWlmICh0bXAtPmFkZHIgPj0gYXJlYS0+YWRkcikKKwkJCWJyZWFrOworCX0KKwlhcmVhLT5uZXh0ID0gKnA7CisJKnAgPSBhcmVhOwogCXdyaXRlX3VubG9jaygmdm1saXN0X2xvY2spOwogCiAJcmV0dXJuIGFyZWE7Ci0KLW91dDoKLQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKLQlrZnJlZShhcmVhKTsKLQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbGxvY2F0aW9uIGZhaWxlZDogb3V0IG9mIHZtYWxsb2Mgc3BhY2UgLSB1c2Ugdm1hbGxvYz08c2l6ZT4gdG8gaW5jcmVhc2Ugc2l6ZS5cbiIpOwotCXJldHVybiBOVUxMOwogfQogCiBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncywKQEAgLTMyOCwzOSArMTA2OSwxNSBAQAogCQkJCSAgZ2ZwX21hc2ssIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKLS8qIENhbGxlciBtdXN0IGhvbGQgdm1saXN0X2xvY2sgKi8KLXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2ZpbmRfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKQorc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKmZpbmRfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKQogewotCXN0cnVjdCB2bV9zdHJ1Y3QgKnRtcDsKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKIAotCWZvciAodG1wID0gdm1saXN0OyB0bXAgIT0gTlVMTDsgdG1wID0gdG1wLT5uZXh0KSB7Ci0JCSBpZiAodG1wLT5hZGRyID09IGFkZHIpCi0JCQlicmVhazsKLQl9CisJdmEgPSBmaW5kX3ZtYXBfYXJlYSgodW5zaWduZWQgbG9uZylhZGRyKTsKKwlpZiAodmEgJiYgdmEtPmZsYWdzICYgVk1fVk1fQVJFQSkKKwkJcmV0dXJuIHZhLT5wcml2YXRlOwogCi0JcmV0dXJuIHRtcDsKLX0KLQotLyogQ2FsbGVyIG11c3QgaG9sZCB2bWxpc3RfbG9jayAqLwotc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcikKLXsKLQlzdHJ1Y3Qgdm1fc3RydWN0ICoqcCwgKnRtcDsKLQotCWZvciAocCA9ICZ2bWxpc3QgOyAodG1wID0gKnApICE9IE5VTEwgO3AgPSAmdG1wLT5uZXh0KSB7Ci0JCSBpZiAodG1wLT5hZGRyID09IGFkZHIpCi0JCQkgZ290byBmb3VuZDsKLQl9CiAJcmV0dXJuIE5VTEw7Ci0KLWZvdW5kOgotCXVubWFwX3ZtX2FyZWEodG1wKTsKLQkqcCA9IHRtcC0+bmV4dDsKLQotCS8qCi0JICogUmVtb3ZlIHRoZSBndWFyZCBwYWdlLgotCSAqLwotCXRtcC0+c2l6ZSAtPSBQQUdFX1NJWkU7Ci0JcmV0dXJuIHRtcDsKIH0KIAogLyoqCkBAIC0zNzMsMTEgKzEwOTAsMjQgQEAKICAqLwogc3RydWN0IHZtX3N0cnVjdCAqcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcikKIHsKLQlzdHJ1Y3Qgdm1fc3RydWN0ICp2OwotCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKLQl2ID0gX19yZW1vdmVfdm1fYXJlYShhZGRyKTsKLQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKLQlyZXR1cm4gdjsKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKKworCXZhID0gZmluZF92bWFwX2FyZWEoKHVuc2lnbmVkIGxvbmcpYWRkcik7CisJaWYgKHZhICYmIHZhLT5mbGFncyAmIFZNX1ZNX0FSRUEpIHsKKwkJc3RydWN0IHZtX3N0cnVjdCAqdm0gPSB2YS0+cHJpdmF0ZTsKKwkJc3RydWN0IHZtX3N0cnVjdCAqdG1wLCAqKnA7CisJCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZhKTsKKwkJdm0tPnNpemUgLT0gUEFHRV9TSVpFOworCisJCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKKwkJZm9yIChwID0gJnZtbGlzdDsgKHRtcCA9ICpwKSAhPSB2bTsgcCA9ICZ0bXAtPm5leHQpCisJCQk7CisJCSpwID0gdG1wLT5uZXh0OworCQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKKworCQlyZXR1cm4gdm07CisJfQorCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBfX3Z1bm1hcChjb25zdCB2b2lkICphZGRyLCBpbnQgZGVhbGxvY2F0ZV9wYWdlcykKQEAgLTQ4Nyw2ICsxMjE3LDggQEAKIH0KIEVYUE9SVF9TWU1CT0wodm1hcCk7CiAKK3N0YXRpYyB2b2lkICpfX3ZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90LAorCQkJICAgIGludCBub2RlLCB2b2lkICpjYWxsZXIpOwogc3RhdGljIHZvaWQgKl9fdm1hbGxvY19hcmVhX25vZGUoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgZ2ZwX3QgZ2ZwX21hc2ssCiAJCQkJIHBncHJvdF90IHByb3QsIGludCBub2RlLCB2b2lkICpjYWxsZXIpCiB7CkBAIC02MTMsMTAgKzEzNDUsOCBAQAogCiAJcmV0ID0gX192bWFsbG9jKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwpOwogCWlmIChyZXQpIHsKLQkJd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOwotCQlhcmVhID0gX19maW5kX3ZtX2FyZWEocmV0KTsKKwkJYXJlYSA9IGZpbmRfdm1fYXJlYShyZXQpOwogCQlhcmVhLT5mbGFncyB8PSBWTV9VU0VSTUFQOwotCQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTY5NiwxMCArMTQyNiw4IEBACiAKIAlyZXQgPSBfX3ZtYWxsb2Moc2l6ZSwgR0ZQX1ZNQUxMT0MzMiB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMKTsKIAlpZiAocmV0KSB7Ci0JCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKLQkJYXJlYSA9IF9fZmluZF92bV9hcmVhKHJldCk7CisJCWFyZWEgPSBmaW5kX3ZtX2FyZWEocmV0KTsKIAkJYXJlYS0+ZmxhZ3MgfD0gVk1fVVNFUk1BUDsKLQkJd3JpdGVfdW5sb2NrKCZ2bWxpc3RfbG9jayk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC04MDAsMjYgKzE1MjgsMjUgQEAKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCXVuc2lnbmVkIGxvbmcgdWFkZHIgPSB2bWEtPnZtX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgdXNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0JaW50IHJldDsKIAogCWlmICgoUEFHRV9TSVpFLTEpICYgKHVuc2lnbmVkIGxvbmcpYWRkcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZWFkX2xvY2soJnZtbGlzdF9sb2NrKTsKLQlhcmVhID0gX19maW5kX3ZtX2FyZWEoYWRkcik7CisJYXJlYSA9IGZpbmRfdm1fYXJlYShhZGRyKTsKIAlpZiAoIWFyZWEpCi0JCWdvdG8gb3V0X2VpbnZhbF9sb2NrZWQ7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCEoYXJlYS0+ZmxhZ3MgJiBWTV9VU0VSTUFQKSkKLQkJZ290byBvdXRfZWludmFsX2xvY2tlZDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodXNpemUgKyAocGdvZmYgPDwgUEFHRV9TSElGVCkgPiBhcmVhLT5zaXplIC0gUEFHRV9TSVpFKQotCQlnb3RvIG91dF9laW52YWxfbG9ja2VkOwotCXJlYWRfdW5sb2NrKCZ2bWxpc3RfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJYWRkciArPSBwZ29mZiA8PCBQQUdFX1NISUZUOwogCWRvIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7CisJCWludCByZXQ7CisKIAkJcmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCB1YWRkciwgcGFnZSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwpAQCAtODMyLDExICsxNTU5LDcgQEAKIAkvKiBQcmV2ZW50ICJ0aGluZ3MiIGxpa2UgbWVtb3J5IG1pZ3JhdGlvbj8gVk1fZmxhZ3MgbmVlZCBhIGNsZWFudXAuLi4gKi8KIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOwogCi0JcmV0dXJuIHJldDsKLQotb3V0X2VpbnZhbF9sb2NrZWQ6Ci0JcmVhZF91bmxvY2soJnZtbGlzdF9sb2NrKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocmVtYXBfdm1hbGxvY19yYW5nZSk7CiAKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMWZmMWE1OC4uM2I1ODYwMiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtY29udHJvbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5YWNjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC03OCw3ICs3OSw3IEBACiAJdW5zaWduZWQgbG9uZyAoKmlzb2xhdGVfcGFnZXMpKHVuc2lnbmVkIGxvbmcgbnIsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwKIAkJCXVuc2lnbmVkIGxvbmcgKnNjYW5uZWQsIGludCBvcmRlciwgaW50IG1vZGUsCiAJCQlzdHJ1Y3Qgem9uZSAqeiwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jb250LAotCQkJaW50IGFjdGl2ZSk7CisJCQlpbnQgYWN0aXZlLCBpbnQgZmlsZSk7CiB9OwogCiAjZGVmaW5lIGxydV90b19wYWdlKF9oZWFkKSAobGlzdF9lbnRyeSgoX2hlYWQpLT5wcmV2LCBzdHJ1Y3QgcGFnZSwgbHJ1KSkKQEAgLTQ3MCw2ICs0NzEsODUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBwdXRiYWNrX2xydV9wYWdlIC0gcHV0IHByZXZpb3VzbHkgaXNvbGF0ZWQgcGFnZSBvbnRvIGFwcHJvcHJpYXRlIExSVSBsaXN0CisgKiBAcGFnZTogcGFnZSB0byBiZSBwdXQgYmFjayB0byBhcHByb3ByaWF0ZSBscnUgbGlzdAorICoKKyAqIEFkZCBwcmV2aW91c2x5IGlzb2xhdGVkIEBwYWdlIHRvIGFwcHJvcHJpYXRlIExSVSBsaXN0LgorICogUGFnZSBtYXkgc3RpbGwgYmUgdW5ldmljdGFibGUgZm9yIG90aGVyIHJlYXNvbnMuCisgKgorICogbHJ1X2xvY2sgbXVzdCBub3QgYmUgaGVsZCwgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQuCisgKi8KKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCit2b2lkIHB1dGJhY2tfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaW50IGxydTsKKwlpbnQgYWN0aXZlID0gISFUZXN0Q2xlYXJQYWdlQWN0aXZlKHBhZ2UpOworCWludCB3YXNfdW5ldmljdGFibGUgPSBQYWdlVW5ldmljdGFibGUocGFnZSk7CisKKwlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7CisKK3JlZG86CisJQ2xlYXJQYWdlVW5ldmljdGFibGUocGFnZSk7CisKKwlpZiAocGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCkpIHsKKwkJLyoKKwkJICogRm9yIGV2aWN0YWJsZSBwYWdlcywgd2UgY2FuIHVzZSB0aGUgY2FjaGUuCisJCSAqIEluIGV2ZW50IG9mIGEgcmFjZSwgd29yc3QgY2FzZSBpcyB3ZSBlbmQgdXAgd2l0aCBhbgorCQkgKiB1bmV2aWN0YWJsZSBwYWdlIG9uIFtpbl1hY3RpdmUgbGlzdC4KKwkJICogV2Uga25vdyBob3cgdG8gaGFuZGxlIHRoYXQuCisJCSAqLworCQlscnUgPSBhY3RpdmUgKyBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CisJCWxydV9jYWNoZV9hZGRfbHJ1KHBhZ2UsIGxydSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUHV0IHVuZXZpY3RhYmxlIHBhZ2VzIGRpcmVjdGx5IG9uIHpvbmUncyB1bmV2aWN0YWJsZQorCQkgKiBsaXN0LgorCQkgKi8KKwkJbHJ1ID0gTFJVX1VORVZJQ1RBQkxFOworCQlhZGRfcGFnZV90b191bmV2aWN0YWJsZV9saXN0KHBhZ2UpOworCX0KKwltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgbHJ1KTsKKworCS8qCisJICogcGFnZSdzIHN0YXR1cyBjYW4gY2hhbmdlIHdoaWxlIHdlIG1vdmUgaXQgYW1vbmcgbHJ1LiBJZiBhbiBldmljdGFibGUKKwkgKiBwYWdlIGlzIG9uIHVuZXZpY3RhYmxlIGxpc3QsIGl0IG5ldmVyIGJlIGZyZWVkLiBUbyBhdm9pZCB0aGF0LAorCSAqIGNoZWNrIGFmdGVyIHdlIGFkZGVkIGl0IHRvIHRoZSBsaXN0LCBhZ2Fpbi4KKwkgKi8KKwlpZiAobHJ1ID09IExSVV9VTkVWSUNUQUJMRSAmJiBwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKSkgeworCQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpIHsKKwkJCXB1dF9wYWdlKHBhZ2UpOworCQkJZ290byByZWRvOworCQl9CisJCS8qIFRoaXMgbWVhbnMgc29tZW9uZSBlbHNlIGRyb3BwZWQgdGhpcyBwYWdlIGZyb20gTFJVCisJCSAqIFNvLCBpdCB3aWxsIGJlIGZyZWVkIG9yIHB1dGJhY2sgdG8gTFJVIGFnYWluLiBUaGVyZSBpcworCQkgKiBub3RoaW5nIHRvIGRvIGhlcmUuCisJCSAqLworCX0KKworCWlmICh3YXNfdW5ldmljdGFibGUgJiYgbHJ1ICE9IExSVV9VTkVWSUNUQUJMRSkKKwkJY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdSRVNDVUVEKTsKKwllbHNlIGlmICghd2FzX3VuZXZpY3RhYmxlICYmIGxydSA9PSBMUlVfVU5FVklDVEFCTEUpCisJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHQ1VMTEVEKTsKKworCXB1dF9wYWdlKHBhZ2UpOwkJLyogZHJvcCByZWYgZnJvbSBpc29sYXRlICovCit9CisKKyNlbHNlIC8qIENPTkZJR19VTkVWSUNUQUJMRV9MUlUgKi8KKwordm9pZCBwdXRiYWNrX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWludCBscnU7CisJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOworCisJbHJ1ID0gISFUZXN0Q2xlYXJQYWdlQWN0aXZlKHBhZ2UpICsgcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOworCWxydV9jYWNoZV9hZGRfbHJ1KHBhZ2UsIGxydSk7CisJbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBhZ2UsIGxydSk7CisJcHV0X3BhZ2UocGFnZSk7Cit9CisjZW5kaWYgLyogQ09ORklHX1VORVZJQ1RBQkxFX0xSVSAqLworCisKIC8qCiAgKiBzaHJpbmtfcGFnZV9saXN0KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2xhaW1lZCBwYWdlcwogICovCkBAIC01MDMsNiArNTgzLDkgQEAKIAogCQlzYy0+bnJfc2Nhbm5lZCsrOwogCisJCWlmICh1bmxpa2VseSghcGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCkpKQorCQkJZ290byBjdWxsX21sb2NrZWQ7CisKIAkJaWYgKCFzYy0+bWF5X3N3YXAgJiYgcGFnZV9tYXBwZWQocGFnZSkpCiAJCQlnb3RvIGtlZXBfbG9ja2VkOwogCkBAIC01MzksOSArNjIyLDE5IEBACiAJCSAqIEFub255bW91cyBwcm9jZXNzIG1lbW9yeSBoYXMgYmFja2luZyBzdG9yZT8KIAkJICogVHJ5IHRvIGFsbG9jYXRlIGl0IHNvbWUgc3dhcCBzcGFjZSBoZXJlLgogCQkgKi8KLQkJaWYgKFBhZ2VBbm9uKHBhZ2UpICYmICFQYWdlU3dhcENhY2hlKHBhZ2UpKQorCQlpZiAoUGFnZUFub24ocGFnZSkgJiYgIVBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKKwkJCXN3aXRjaCAodHJ5X3RvX211bmxvY2socGFnZSkpIHsKKwkJCWNhc2UgU1dBUF9GQUlMOgkJLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQkJY2FzZSBTV0FQX0FHQUlOOgorCQkJCWdvdG8ga2VlcF9sb2NrZWQ7CisJCQljYXNlIFNXQVBfTUxPQ0s6CisJCQkJZ290byBjdWxsX21sb2NrZWQ7CisJCQljYXNlIFNXQVBfU1VDQ0VTUzoKKwkJCQk7IC8qIGZhbGwgdGhydSc7IGFkZCB0byBzd2FwIGNhY2hlICovCisJCQl9CiAJCQlpZiAoIWFkZF90b19zd2FwKHBhZ2UsIEdGUF9BVE9NSUMpKQogCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOworCQl9CiAjZW5kaWYgLyogQ09ORklHX1NXQVAgKi8KIAogCQltYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwpAQCAtNTU2LDYgKzY0OSw4IEBACiAJCQkJZ290byBhY3RpdmF0ZV9sb2NrZWQ7CiAJCQljYXNlIFNXQVBfQUdBSU46CiAJCQkJZ290byBrZWVwX2xvY2tlZDsKKwkJCWNhc2UgU1dBUF9NTE9DSzoKKwkJCQlnb3RvIGN1bGxfbWxvY2tlZDsKIAkJCWNhc2UgU1dBUF9TVUNDRVNTOgogCQkJCTsgLyogdHJ5IHRvIGZyZWUgdGhlIHBhZ2UgYmVsb3cgKi8KIAkJCX0KQEAgLTYwMiw3ICs2OTcsNyBAQAogCQkgKiBwb3NzaWJsZSBmb3IgYSBwYWdlIHRvIGhhdmUgUGFnZURpcnR5IHNldCwgYnV0IGl0IGlzIGFjdHVhbGx5CiAJCSAqIGNsZWFuIChhbGwgaXRzIGJ1ZmZlcnMgYXJlIGNsZWFuKS4gIFRoaXMgaGFwcGVucyBpZiB0aGUKIAkJICogYnVmZmVycyB3ZXJlIHdyaXR0ZW4gb3V0IGRpcmVjdGx5LCB3aXRoIHN1Ym1pdF9iaCgpLiBleHQzCi0JCSAqIHdpbGwgZG8gdGhpcywgYXMgd2VsbCBhcyB0aGUgYmxvY2tkZXYgbWFwcGluZy4gCisJCSAqIHdpbGwgZG8gdGhpcywgYXMgd2VsbCBhcyB0aGUgYmxvY2tkZXYgbWFwcGluZy4KIAkJICogdHJ5X3RvX3JlbGVhc2VfcGFnZSgpIHdpbGwgZGlzY292ZXIgdGhhdCBjbGVhbm5lc3MgYW5kIHdpbGwKIAkJICogZHJvcCB0aGUgYnVmZmVycyBhbmQgbWFyayB0aGUgcGFnZSBjbGVhbiAtIGl0IGNhbiBiZSBmcmVlZC4KIAkJICoKQEAgLTYzNyw3ICs3MzIsMTQgQEAKIAkJaWYgKCFtYXBwaW5nIHx8ICFfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIHBhZ2UpKQogCQkJZ290byBrZWVwX2xvY2tlZDsKIAotCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJLyoKKwkJICogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBubyBvdGhlciByZWZlcmVuY2VzIGFuZCB0aGVyZSBpcworCQkgKiBubyB3YXkgdG8gcGljayBhbnkgbW9yZSB1cCAocmVtb3ZlZCBmcm9tIExSVSwgcmVtb3ZlZAorCQkgKiBmcm9tIHBhZ2VjYWNoZSkuIENhbiB1c2Ugbm9uLWF0b21pYyBiaXRvcHMgbm93IChhbmQKKwkJICogd2Ugb2J2aW91c2x5IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgd2FraW5nIHVwIGEgcHJvY2VzcworCQkgKiB3YWl0aW5nIG9uIHRoZSBwYWdlIGxvY2ssIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHJlZmVyZW5jZXMuCisJCSAqLworCQlfX2NsZWFyX3BhZ2VfbG9ja2VkKHBhZ2UpOwogZnJlZV9pdDoKIAkJbnJfcmVjbGFpbWVkKys7CiAJCWlmICghcGFnZXZlY19hZGQoJmZyZWVkX3B2ZWMsIHBhZ2UpKSB7CkBAIC02NDYsMTQgKzc0OCwyMyBAQAogCQl9CiAJCWNvbnRpbnVlOwogCitjdWxsX21sb2NrZWQ6CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOworCQljb250aW51ZTsKKwogYWN0aXZhdGVfbG9ja2VkOgorCQkvKiBOb3QgYSBjYW5kaWRhdGUgZm9yIHN3YXBwaW5nLCBzbyByZWNsYWltIHN3YXAgc3BhY2UuICovCisJCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpICYmIHZtX3N3YXBfZnVsbCgpKQorCQkJcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfcmVmKHBhZ2UpOworCQlWTV9CVUdfT04oUGFnZUFjdGl2ZShwYWdlKSk7CiAJCVNldFBhZ2VBY3RpdmUocGFnZSk7CiAJCXBnYWN0aXZhdGUrKzsKIGtlZXBfbG9ja2VkOgogCQl1bmxvY2tfcGFnZShwYWdlKTsKIGtlZXA6CiAJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZyZXRfcGFnZXMpOwotCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7CisJCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpIHx8IFBhZ2VVbmV2aWN0YWJsZShwYWdlKSk7CiAJfQogCWxpc3Rfc3BsaWNlKCZyZXRfcGFnZXMsIHBhZ2VfbGlzdCk7CiAJaWYgKHBhZ2V2ZWNfY291bnQoJmZyZWVkX3B2ZWMpKQpAQCAtNjc3LDcgKzc4OCw3IEBACiAgKgogICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC12ZSBlcnJubyBvbiBmYWlsdXJlLgogICovCi1pbnQgX19pc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbW9kZSkKK2ludCBfX2lzb2xhdGVfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBtb2RlLCBpbnQgZmlsZSkKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIApAQCAtNjkzLDYgKzgwNCwxNyBAQAogCWlmIChtb2RlICE9IElTT0xBVEVfQk9USCAmJiAoIVBhZ2VBY3RpdmUocGFnZSkgIT0gIW1vZGUpKQogCQlyZXR1cm4gcmV0OwogCisJaWYgKG1vZGUgIT0gSVNPTEFURV9CT1RIICYmICghcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpICE9ICFmaWxlKSkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmb3IgbHVtcHkgcmVjbGFpbSwgd2UKKwkgKiBpbml0aWFsbHkgbG9vayBpbnRvIGFsbCBMUlUgcGFnZXMsIGFjdGl2ZSwgaW5hY3RpdmUgYW5kCisJICogdW5ldmljdGFibGU7IG9ubHkgZ2l2ZSBzaHJpbmtfcGFnZV9saXN0IGV2aWN0YWJsZSBwYWdlcy4KKwkgKi8KKwlpZiAoUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKQorCQlyZXR1cm4gcmV0OworCiAJcmV0ID0gLUVCVVNZOwogCWlmIChsaWtlbHkoZ2V0X3BhZ2VfdW5sZXNzX3plcm8ocGFnZSkpKSB7CiAJCS8qCkBAIC03MjMsMTIgKzg0NSwxMyBAQAogICogQHNjYW5uZWQ6CVRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQuCiAgKiBAb3JkZXI6CVRoZSBjYWxsZXIncyBhdHRlbXB0ZWQgYWxsb2NhdGlvbiBvcmRlcgogICogQG1vZGU6CU9uZSBvZiB0aGUgTFJVIGlzb2xhdGlvbiBtb2RlcworICogQGZpbGU6CVRydWUgWzFdIGlmIGlzb2xhdGluZyBmaWxlIFshYW5vbl0gcGFnZXMKICAqCiAgKiByZXR1cm5zIGhvdyBtYW55IHBhZ2VzIHdlcmUgbW92ZWQgb250byAqQGRzdC4KICAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfcGFnZXModW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpzcmMsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwKLQkJdW5zaWduZWQgbG9uZyAqc2Nhbm5lZCwgaW50IG9yZGVyLCBpbnQgbW9kZSkKKwkJdW5zaWduZWQgbG9uZyAqc2Nhbm5lZCwgaW50IG9yZGVyLCBpbnQgbW9kZSwgaW50IGZpbGUpCiB7CiAJdW5zaWduZWQgbG9uZyBucl90YWtlbiA9IDA7CiAJdW5zaWduZWQgbG9uZyBzY2FuOwpAQCAtNzQ1LDcgKzg2OCw3IEBACiAKIAkJVk1fQlVHX09OKCFQYWdlTFJVKHBhZ2UpKTsKIAotCQlzd2l0Y2ggKF9faXNvbGF0ZV9scnVfcGFnZShwYWdlLCBtb2RlKSkgeworCQlzd2l0Y2ggKF9faXNvbGF0ZV9scnVfcGFnZShwYWdlLCBtb2RlLCBmaWxlKSkgewogCQljYXNlIDA6CiAJCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgZHN0KTsKIAkJCW5yX3Rha2VuKys7CkBAIC03ODgsMTAgKzkxMSwxMSBAQAogCQkJCWJyZWFrOwogCiAJCQljdXJzb3JfcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisKIAkJCS8qIENoZWNrIHRoYXQgd2UgaGF2ZSBub3QgY3Jvc3NlZCBhIHpvbmUgYm91bmRhcnkuICovCiAJCQlpZiAodW5saWtlbHkocGFnZV96b25lX2lkKGN1cnNvcl9wYWdlKSAhPSB6b25lX2lkKSkKIAkJCQljb250aW51ZTsKLQkJCXN3aXRjaCAoX19pc29sYXRlX2xydV9wYWdlKGN1cnNvcl9wYWdlLCBtb2RlKSkgeworCQkJc3dpdGNoIChfX2lzb2xhdGVfbHJ1X3BhZ2UoY3Vyc29yX3BhZ2UsIG1vZGUsIGZpbGUpKSB7CiAJCQljYXNlIDA6CiAJCQkJbGlzdF9tb3ZlKCZjdXJzb3JfcGFnZS0+bHJ1LCBkc3QpOwogCQkJCW5yX3Rha2VuKys7CkBAIC04MDIsNyArOTI2LDcgQEAKIAkJCQkvKiBlbHNlIGl0IGlzIGJlaW5nIGZyZWVkIGVsc2V3aGVyZSAqLwogCQkJCWxpc3RfbW92ZSgmY3Vyc29yX3BhZ2UtPmxydSwgc3JjKTsKIAkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7CisJCQkJYnJlYWs7CS8qICEgb24gTFJVIG9yIHdyb25nIGxpc3QgKi8KIAkJCX0KIAkJfQogCX0KQEAgLTgxNiw0MCArOTQwLDkzIEBACiAJCQkJCXVuc2lnbmVkIGxvbmcgKnNjYW5uZWQsIGludCBvcmRlciwKIAkJCQkJaW50IG1vZGUsIHN0cnVjdCB6b25lICp6LAogCQkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NvbnQsCi0JCQkJCWludCBhY3RpdmUpCisJCQkJCWludCBhY3RpdmUsIGludCBmaWxlKQogeworCWludCBscnUgPSBMUlVfQkFTRTsKIAlpZiAoYWN0aXZlKQotCQlyZXR1cm4gaXNvbGF0ZV9scnVfcGFnZXMobnIsICZ6LT5hY3RpdmVfbGlzdCwgZHN0LAotCQkJCQkJc2Nhbm5lZCwgb3JkZXIsIG1vZGUpOwotCWVsc2UKLQkJcmV0dXJuIGlzb2xhdGVfbHJ1X3BhZ2VzKG5yLCAmei0+aW5hY3RpdmVfbGlzdCwgZHN0LAotCQkJCQkJc2Nhbm5lZCwgb3JkZXIsIG1vZGUpOworCQlscnUgKz0gTFJVX0FDVElWRTsKKwlpZiAoZmlsZSkKKwkJbHJ1ICs9IExSVV9GSUxFOworCXJldHVybiBpc29sYXRlX2xydV9wYWdlcyhuciwgJnotPmxydVtscnVdLmxpc3QsIGRzdCwgc2Nhbm5lZCwgb3JkZXIsCisJCQkJCQkJCW1vZGUsICEhZmlsZSk7CiB9CiAKIC8qCiAgKiBjbGVhcl9hY3RpdmVfZmxhZ3MoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX2FjdGl2ZV9saXN0KCksIGNsZWFyaW5nCiAgKiBhbnkgYWN0aXZlIGJpdHMgZnJvbSB0aGUgcGFnZXMgaW4gdGhlIGxpc3QuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsZWFyX2FjdGl2ZV9mbGFncyhzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlX2xpc3QpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGVhcl9hY3RpdmVfZmxhZ3Moc3RydWN0IGxpc3RfaGVhZCAqcGFnZV9saXN0LAorCQkJCQl1bnNpZ25lZCBpbnQgKmNvdW50KQogewogCWludCBucl9hY3RpdmUgPSAwOworCWludCBscnU7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsIHBhZ2VfbGlzdCwgbHJ1KQorCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgcGFnZV9saXN0LCBscnUpIHsKKwkJbHJ1ID0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOwogCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkgeworCQkJbHJ1ICs9IExSVV9BQ1RJVkU7CiAJCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CiAJCQlucl9hY3RpdmUrKzsKIAkJfQorCQljb3VudFtscnVdKys7CisJfQogCiAJcmV0dXJuIG5yX2FjdGl2ZTsKIH0KIAorLyoqCisgKiBpc29sYXRlX2xydV9wYWdlIC0gdHJpZXMgdG8gaXNvbGF0ZSBhIHBhZ2UgZnJvbSBpdHMgTFJVIGxpc3QKKyAqIEBwYWdlOiBwYWdlIHRvIGlzb2xhdGUgZnJvbSBpdHMgTFJVIGxpc3QKKyAqCisgKiBJc29sYXRlcyBhIEBwYWdlIGZyb20gYW4gTFJVIGxpc3QsIGNsZWFycyBQYWdlTFJVIGFuZCBhZGp1c3RzIHRoZQorICogdm1zdGF0IHN0YXRpc3RpYyBjb3JyZXNwb25kaW5nIHRvIHdoYXRldmVyIExSVSBsaXN0IHRoZSBwYWdlIHdhcyBvbi4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIHBhZ2Ugd2FzIHJlbW92ZWQgZnJvbSBhbiBMUlUgbGlzdC4KKyAqIFJldHVybnMgLUVCVVNZIGlmIHRoZSBwYWdlIHdhcyBub3Qgb24gYW4gTFJVIGxpc3QuCisgKgorICogVGhlIHJldHVybmVkIHBhZ2Ugd2lsbCBoYXZlIFBhZ2VMUlUoKSBjbGVhcmVkLiAgSWYgaXQgd2FzIGZvdW5kIG9uCisgKiB0aGUgYWN0aXZlIGxpc3QsIGl0IHdpbGwgaGF2ZSBQYWdlQWN0aXZlIHNldC4gIElmIGl0IHdhcyBmb3VuZCBvbgorICogdGhlIHVuZXZpY3RhYmxlIGxpc3QsIGl0IHdpbGwgaGF2ZSB0aGUgUGFnZVVuZXZpY3RhYmxlIGJpdCBzZXQuIFRoYXQgZmxhZworICogbWF5IG5lZWQgdG8gYmUgY2xlYXJlZCBieSB0aGUgY2FsbGVyIGJlZm9yZSBsZXR0aW5nIHRoZSBwYWdlIGdvLgorICoKKyAqIFRoZSB2bXN0YXQgc3RhdGlzdGljIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxpc3Qgb24gd2hpY2ggdGhlIHBhZ2Ugd2FzCisgKiBmb3VuZCB3aWxsIGJlIGRlY3JlbWVudGVkLgorICoKKyAqIFJlc3RyaWN0aW9uczoKKyAqICgxKSBNdXN0IGJlIGNhbGxlZCB3aXRoIGFuIGVsZXZhdGVkIHJlZmNvdW50IG9uIHRoZSBwYWdlLiBUaGlzIGlzIGEKKyAqICAgICBmdW5kYW1lbnRuYWwgZGlmZmVyZW5jZSBmcm9tIGlzb2xhdGVfbHJ1X3BhZ2VzICh3aGljaCBpcyBjYWxsZWQKKyAqICAgICB3aXRob3V0IGEgc3RhYmxlIHJlZmVyZW5jZSkuCisgKiAoMikgdGhlIGxydV9sb2NrIG11c3Qgbm90IGJlIGhlbGQuCisgKiAoMykgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQuCisgKi8KK2ludCBpc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWludCByZXQgPSAtRUJVU1k7CisKKwlpZiAoUGFnZUxSVShwYWdlKSkgeworCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKKworCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJCWlmIChQYWdlTFJVKHBhZ2UpICYmIGdldF9wYWdlX3VubGVzc196ZXJvKHBhZ2UpKSB7CisJCQlpbnQgbHJ1ID0gcGFnZV9scnUocGFnZSk7CisJCQlyZXQgPSAwOworCQkJQ2xlYXJQYWdlTFJVKHBhZ2UpOworCisJCQlkZWxfcGFnZV9mcm9tX2xydV9saXN0KHpvbmUsIHBhZ2UsIGxydSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJfQorCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfem9uZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyCiAgKiBvZiByZWNsYWltZWQgcGFnZXMKICAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBtYXhfc2NhbiwKLQkJCQlzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCisJCQlzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCisJCQlpbnQgcHJpb3JpdHksIGludCBmaWxlKQogewogCUxJU1RfSEVBRChwYWdlX2xpc3QpOwogCXN0cnVjdCBwYWdldmVjIHB2ZWM7CkBAIC04NjYsMjAgKzEwNDMsNDMgQEAKIAkJdW5zaWduZWQgbG9uZyBucl9zY2FuOwogCQl1bnNpZ25lZCBsb25nIG5yX2ZyZWVkOwogCQl1bnNpZ25lZCBsb25nIG5yX2FjdGl2ZTsKKwkJdW5zaWduZWQgaW50IGNvdW50W05SX0xSVV9MSVNUU10gPSB7IDAsIH07CisJCWludCBtb2RlID0gSVNPTEFURV9JTkFDVElWRTsKKworCQkvKgorCQkgKiBJZiB3ZSBuZWVkIGEgbGFyZ2UgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnksIG9yIGhhdmUKKwkJICogdHJvdWJsZSBnZXR0aW5nIGEgc21hbGwgc2V0IG9mIGNvbnRpZ3VvdXMgcGFnZXMsIHdlCisJCSAqIHdpbGwgcmVjbGFpbSBib3RoIGFjdGl2ZSBhbmQgaW5hY3RpdmUgcGFnZXMuCisJCSAqCisJCSAqIFdlIHVzZSB0aGUgc2FtZSB0aHJlc2hvbGQgYXMgcGFnZW91dCBjb25nZXN0aW9uX3dhaXQgYmVsb3cuCisJCSAqLworCQlpZiAoc2MtPm9yZGVyID4gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpCisJCQltb2RlID0gSVNPTEFURV9CT1RIOworCQllbHNlIGlmIChzYy0+b3JkZXIgJiYgcHJpb3JpdHkgPCBERUZfUFJJT1JJVFkgLSAyKQorCQkJbW9kZSA9IElTT0xBVEVfQk9USDsKIAogCQlucl90YWtlbiA9IHNjLT5pc29sYXRlX3BhZ2VzKHNjLT5zd2FwX2NsdXN0ZXJfbWF4LAotCQkJICAgICAmcGFnZV9saXN0LCAmbnJfc2Nhbiwgc2MtPm9yZGVyLAotCQkJICAgICAoc2MtPm9yZGVyID4gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpPwotCQkJCQkgICAgIElTT0xBVEVfQk9USCA6IElTT0xBVEVfSU5BQ1RJVkUsCi0JCQkJem9uZSwgc2MtPm1lbV9jZ3JvdXAsIDApOwotCQlucl9hY3RpdmUgPSBjbGVhcl9hY3RpdmVfZmxhZ3MoJnBhZ2VfbGlzdCk7CisJCQkgICAgICZwYWdlX2xpc3QsICZucl9zY2FuLCBzYy0+b3JkZXIsIG1vZGUsCisJCQkJem9uZSwgc2MtPm1lbV9jZ3JvdXAsIDAsIGZpbGUpOworCQlucl9hY3RpdmUgPSBjbGVhcl9hY3RpdmVfZmxhZ3MoJnBhZ2VfbGlzdCwgY291bnQpOwogCQlfX2NvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2FjdGl2ZSk7CiAKLQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSwgLW5yX2FjdGl2ZSk7Ci0JCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSwKLQkJCQkJCS0obnJfdGFrZW4gLSBucl9hY3RpdmUpKTsKLQkJaWYgKHNjYW5fZ2xvYmFsX2xydShzYykpCisJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSwKKwkJCQkJCS1jb3VudFtMUlVfQUNUSVZFX0ZJTEVdKTsKKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0ZJTEUsCisJCQkJCQktY291bnRbTFJVX0lOQUNUSVZFX0ZJTEVdKTsKKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OLAorCQkJCQkJLWNvdW50W0xSVV9BQ1RJVkVfQU5PTl0pOworCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfQU5PTiwKKwkJCQkJCS1jb3VudFtMUlVfSU5BQ1RJVkVfQU5PTl0pOworCisJCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpKSB7CiAJCQl6b25lLT5wYWdlc19zY2FubmVkICs9IG5yX3NjYW47CisJCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFswXSArPSBjb3VudFtMUlVfSU5BQ1RJVkVfQU5PTl07CisJCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFswXSArPSBjb3VudFtMUlVfQUNUSVZFX0FOT05dOworCQkJem9uZS0+cmVjZW50X3NjYW5uZWRbMV0gKz0gY291bnRbTFJVX0lOQUNUSVZFX0ZJTEVdOworCQkJem9uZS0+cmVjZW50X3NjYW5uZWRbMV0gKz0gY291bnRbTFJVX0FDVElWRV9GSUxFXTsKKwkJfQogCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAogCQlucl9zY2FubmVkICs9IG5yX3NjYW47CkBAIC04OTksNyArMTA5OSw3IEBACiAJCQkgKiBUaGUgYXR0ZW1wdCBhdCBwYWdlIG91dCBtYXkgaGF2ZSBtYWRlIHNvbWUKIAkJCSAqIG9mIHRoZSBwYWdlcyBhY3RpdmUsIG1hcmsgdGhlbSBpbmFjdGl2ZSBhZ2Fpbi4KIAkJCSAqLwotCQkJbnJfYWN0aXZlID0gY2xlYXJfYWN0aXZlX2ZsYWdzKCZwYWdlX2xpc3QpOworCQkJbnJfYWN0aXZlID0gY2xlYXJfYWN0aXZlX2ZsYWdzKCZwYWdlX2xpc3QsIGNvdW50KTsKIAkJCWNvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2FjdGl2ZSk7CiAKIAkJCW5yX2ZyZWVkICs9IHNocmlua19wYWdlX2xpc3QoJnBhZ2VfbGlzdCwgc2MsCkBAIC05MjQsMTQgKzExMjQsMjQgQEAKIAkJICogUHV0IGJhY2sgYW55IHVuZnJlZWFibGUgcGFnZXMuCiAJCSAqLwogCQl3aGlsZSAoIWxpc3RfZW1wdHkoJnBhZ2VfbGlzdCkpIHsKKwkJCWludCBscnU7CiAJCQlwYWdlID0gbHJ1X3RvX3BhZ2UoJnBhZ2VfbGlzdCk7CiAJCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7Ci0JCQlTZXRQYWdlTFJVKHBhZ2UpOwogCQkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkKLQkJCQlhZGRfcGFnZV90b19hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKLQkJCWVsc2UKLQkJCQlhZGRfcGFnZV90b19pbmFjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOworCQkJaWYgKHVubGlrZWx5KCFwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKSkpIHsKKwkJCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOworCQkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCVNldFBhZ2VMUlUocGFnZSk7CisJCQlscnUgPSBwYWdlX2xydShwYWdlKTsKKwkJCWFkZF9wYWdlX3RvX2xydV9saXN0KHpvbmUsIHBhZ2UsIGxydSk7CisJCQltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgbHJ1KTsKKwkJCWlmIChQYWdlQWN0aXZlKHBhZ2UpICYmIHNjYW5fZ2xvYmFsX2xydShzYykpIHsKKwkJCQlpbnQgZmlsZSA9ICEhcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOworCQkJCXpvbmUtPnJlY2VudF9yb3RhdGVkW2ZpbGVdKys7CisJCQl9CiAJCQlpZiAoIXBhZ2V2ZWNfYWRkKCZwdmVjLCBwYWdlKSkgewogCQkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCQkJCV9fcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKQEAgLTk2MiwxMTUgKzExNzIsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCB6b25lX2lzX25lYXJfb29tKHN0cnVjdCB6b25lICp6b25lKQogewotCXJldHVybiB6b25lLT5wYWdlc19zY2FubmVkID49ICh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFKQotCQkJCSsgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKSkqMzsKLX0KLQotLyoKLSAqIERldGVybWluZSB3ZSBzaG91bGQgdHJ5IHRvIHJlY2xhaW0gbWFwcGVkIHBhZ2VzLgotICogVGhpcyBpcyBjYWxsZWQgb25seSB3aGVuIHNjLT5tZW1fY2dyb3VwIGlzIE5VTEwuCi0gKi8KLXN0YXRpYyBpbnQgY2FsY19yZWNsYWltX21hcHBlZChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IHpvbmUgKnpvbmUsCi0JCQkJaW50IHByaW9yaXR5KQotewotCWxvbmcgbWFwcGVkX3JhdGlvOwotCWxvbmcgZGlzdHJlc3M7Ci0JbG9uZyBzd2FwX3RlbmRlbmN5OwotCWxvbmcgaW1iYWxhbmNlOwotCWludCByZWNsYWltX21hcHBlZCA9IDA7Ci0JaW50IHByZXZfcHJpb3JpdHk7Ci0KLQlpZiAoc2Nhbl9nbG9iYWxfbHJ1KHNjKSAmJiB6b25lX2lzX25lYXJfb29tKHpvbmUpKQotCQlyZXR1cm4gMTsKLQkvKgotCSAqIGBkaXN0cmVzcycgaXMgYSBtZWFzdXJlIG9mIGhvdyBtdWNoIHRyb3VibGUgd2UncmUgaGF2aW5nCi0JICogcmVjbGFpbWluZyBwYWdlcy4gIDAgLT4gbm8gcHJvYmxlbXMuICAxMDAgLT4gZ3JlYXQgdHJvdWJsZS4KLQkgKi8KLQlpZiAoc2Nhbl9nbG9iYWxfbHJ1KHNjKSkKLQkJcHJldl9wcmlvcml0eSA9IHpvbmUtPnByZXZfcHJpb3JpdHk7Ci0JZWxzZQotCQlwcmV2X3ByaW9yaXR5ID0gbWVtX2Nncm91cF9nZXRfcmVjbGFpbV9wcmlvcml0eShzYy0+bWVtX2Nncm91cCk7Ci0KLQlkaXN0cmVzcyA9IDEwMCA+PiBtaW4ocHJldl9wcmlvcml0eSwgcHJpb3JpdHkpOwotCi0JLyoKLQkgKiBUaGUgcG9pbnQgb2YgdGhpcyBhbGdvcml0aG0gaXMgdG8gZGVjaWRlIHdoZW4gdG8gc3RhcnQKLQkgKiByZWNsYWltaW5nIG1hcHBlZCBtZW1vcnkgaW5zdGVhZCBvZiBqdXN0IHBhZ2VjYWNoZS4gIFdvcmsgb3V0Ci0JICogaG93IG11Y2ggbWVtb3J5Ci0JICogaXMgbWFwcGVkLgotCSAqLwotCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpKQotCQltYXBwZWRfcmF0aW8gPSAoKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfTUFQUEVEKSArCi0JCQkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQU5PTl9QQUdFUykpICogMTAwKSAvCi0JCQkJCXZtX3RvdGFsX3BhZ2VzOwotCWVsc2UKLQkJbWFwcGVkX3JhdGlvID0gbWVtX2Nncm91cF9jYWxjX21hcHBlZF9yYXRpbyhzYy0+bWVtX2Nncm91cCk7Ci0KLQkvKgotCSAqIE5vdyBkZWNpZGUgaG93IG11Y2ggd2UgcmVhbGx5IHdhbnQgdG8gdW5tYXAgc29tZSBwYWdlcy4gIFRoZQotCSAqIG1hcHBlZCByYXRpbyBpcyBkb3duZ3JhZGVkIC0ganVzdCBiZWNhdXNlIHRoZXJlJ3MgYSBsb3Qgb2YKLQkgKiBtYXBwZWQgbWVtb3J5IGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHBhZ2UgcmVjbGFpbQotCSAqIGlzbid0IHN1Y2NlZWRpbmcuCi0JICoKLQkgKiBUaGUgZGlzdHJlc3MgcmF0aW8gaXMgaW1wb3J0YW50IC0gd2UgZG9uJ3Qgd2FudCB0byBzdGFydAotCSAqIGdvaW5nIG9vbS4KLQkgKgotCSAqIEEgMTAwJSB2YWx1ZSBvZiB2bV9zd2FwcGluZXNzIG92ZXJyaWRlcyB0aGlzIGFsZ29yaXRobQotCSAqIGFsdG9nZXRoZXIuCi0JICovCi0Jc3dhcF90ZW5kZW5jeSA9IG1hcHBlZF9yYXRpbyAvIDIgKyBkaXN0cmVzcyArIHNjLT5zd2FwcGluZXNzOwotCi0JLyoKLQkgKiBJZiB0aGVyZSdzIGh1Z2UgaW1iYWxhbmNlIGJldHdlZW4gYWN0aXZlIGFuZCBpbmFjdGl2ZQotCSAqICh0aGluayBhY3RpdmUgMTAwIHRpbWVzIGxhcmdlciB0aGFuIGluYWN0aXZlKSB3ZSBzaG91bGQKLQkgKiBiZWNvbWUgbW9yZSBwZXJtaXNzaXZlLCBvciB0aGUgc3lzdGVtIHdpbGwgdGFrZSB0b28gbXVjaAotCSAqIGNwdSBiZWZvcmUgaXQgc3RhcnQgc3dhcHBpbmcgZHVyaW5nIG1lbW9yeSBwcmVzc3VyZS4KLQkgKiBEaXN0cmVzcyBpcyBhYm91dCBhdm9pZGluZyBlYXJseS1vb20sIHRoaXMgaXMgYWJvdXQKLQkgKiBtYWtpbmcgc3dhcHBpbmVzcyBncmFjZWZ1bCBkZXNwaXRlIHNldHRpbmcgaXQgdG8gbG93Ci0JICogdmFsdWVzLgotCSAqCi0JICogQXZvaWQgZGl2IGJ5IHplcm8gd2l0aCBucl9pbmFjdGl2ZSsxLCBhbmQgbWF4IHJlc3VsdGluZwotCSAqIHZhbHVlIGlzIHZtX3RvdGFsX3BhZ2VzLgotCSAqLwotCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpKSB7Ci0JCWltYmFsYW5jZSAgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFKTsKLQkJaW1iYWxhbmNlIC89IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSkgKyAxOwotCX0gZWxzZQotCQlpbWJhbGFuY2UgPSBtZW1fY2dyb3VwX3JlY2xhaW1faW1iYWxhbmNlKHNjLT5tZW1fY2dyb3VwKTsKLQotCS8qCi0JICogUmVkdWNlIHRoZSBlZmZlY3Qgb2YgaW1iYWxhbmNlIGlmIHN3YXBwaW5lc3MgaXMgbG93LAotCSAqIHRoaXMgbWVhbnMgZm9yIGEgc3dhcHBpbmVzcyB2ZXJ5IGxvdywgdGhlIGltYmFsYW5jZQotCSAqIG11c3QgYmUgbXVjaCBoaWdoZXIgdGhhbiAxMDAgZm9yIHRoaXMgbG9naWMgdG8gbWFrZQotCSAqIHRoZSBkaWZmZXJlbmNlLgotCSAqCi0JICogTWF4IHRlbXBvcmFyeSB2YWx1ZSBpcyB2bV90b3RhbF9wYWdlcyoxMDAuCi0JICovCi0JaW1iYWxhbmNlICo9ICh2bV9zd2FwcGluZXNzICsgMSk7Ci0JaW1iYWxhbmNlIC89IDEwMDsKLQotCS8qCi0JICogSWYgbm90IG11Y2ggb2YgdGhlIHJhbSBpcyBtYXBwZWQsIG1ha2VzIHRoZSBpbWJhbGFuY2UKLQkgKiBsZXNzIHJlbGV2YW50LCBpdCdzIGhpZ2ggcHJpb3JpdHkgd2UgcmVmaWxsIHRoZSBpbmFjdGl2ZQotCSAqIGxpc3Qgd2l0aCBtYXBwZWQgcGFnZXMgb25seSBpbiBwcmVzZW5jZSBvZiBoaWdoIHJhdGlvIG9mCi0JICogbWFwcGVkIHBhZ2VzLgotCSAqCi0JICogTWF4IHRlbXBvcmFyeSB2YWx1ZSBpcyB2bV90b3RhbF9wYWdlcyoxMDAuCi0JICovCi0JaW1iYWxhbmNlICo9IG1hcHBlZF9yYXRpbzsKLQlpbWJhbGFuY2UgLz0gMTAwOwotCi0JLyogYXBwbHkgaW1iYWxhbmNlIGZlZWRiYWNrIHRvIHN3YXBfdGVuZGVuY3kgKi8KLQlzd2FwX3RlbmRlbmN5ICs9IGltYmFsYW5jZTsKLQotCS8qCi0JICogTm93IHVzZSB0aGlzIG1ldHJpYyB0byBkZWNpZGUgd2hldGhlciB0byBzdGFydCBtb3ZpbmcgbWFwcGVkCi0JICogbWVtb3J5IG9udG8gdGhlIGluYWN0aXZlIGxpc3QuCi0JICovCi0JaWYgKHN3YXBfdGVuZGVuY3kgPj0gMTAwKQotCQlyZWNsYWltX21hcHBlZCA9IDE7Ci0KLQlyZXR1cm4gcmVjbGFpbV9tYXBwZWQ7CisJcmV0dXJuIHpvbmUtPnBhZ2VzX3NjYW5uZWQgPj0gKHpvbmVfbHJ1X3BhZ2VzKHpvbmUpICogMyk7CiB9CiAKIC8qCkBAIC0xMDkzLDUzICsxMTk1LDcxIEBACiAKIAogc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCB6b25lICp6b25lLAotCQkJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgcHJpb3JpdHkpCisJCQlzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHByaW9yaXR5LCBpbnQgZmlsZSkKIHsKIAl1bnNpZ25lZCBsb25nIHBnbW92ZWQ7CiAJaW50IHBnZGVhY3RpdmF0ZSA9IDA7CiAJdW5zaWduZWQgbG9uZyBwZ3NjYW5uZWQ7CiAJTElTVF9IRUFEKGxfaG9sZCk7CS8qIFRoZSBwYWdlcyB3aGljaCB3ZXJlIHNuaXBwZWQgb2ZmICovCi0JTElTVF9IRUFEKGxfaW5hY3RpdmUpOwkvKiBQYWdlcyB0byBnbyBvbnRvIHRoZSBpbmFjdGl2ZV9saXN0ICovCi0JTElTVF9IRUFEKGxfYWN0aXZlKTsJLyogUGFnZXMgdG8gZ28gb250byB0aGUgYWN0aXZlX2xpc3QgKi8KKwlMSVNUX0hFQUQobF9pbmFjdGl2ZSk7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKLQlpbnQgcmVjbGFpbV9tYXBwZWQgPSAwOwotCi0JaWYgKHNjLT5tYXlfc3dhcCkKLQkJcmVjbGFpbV9tYXBwZWQgPSBjYWxjX3JlY2xhaW1fbWFwcGVkKHNjLCB6b25lLCBwcmlvcml0eSk7CisJZW51bSBscnVfbGlzdCBscnU7CiAKIAlscnVfYWRkX2RyYWluKCk7CiAJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCXBnbW92ZWQgPSBzYy0+aXNvbGF0ZV9wYWdlcyhucl9wYWdlcywgJmxfaG9sZCwgJnBnc2Nhbm5lZCwgc2MtPm9yZGVyLAogCQkJCQlJU09MQVRFX0FDVElWRSwgem9uZSwKLQkJCQkJc2MtPm1lbV9jZ3JvdXAsIDEpOworCQkJCQlzYy0+bWVtX2Nncm91cCwgMSwgZmlsZSk7CiAJLyoKIAkgKiB6b25lLT5wYWdlc19zY2FubmVkIGlzIHVzZWQgZm9yIGRldGVjdCB6b25lJ3Mgb29tCiAJICogbWVtX2Nncm91cCByZW1lbWJlcnMgbnJfc2NhbiBieSBpdHNlbGYuCiAJICovCi0JaWYgKHNjYW5fZ2xvYmFsX2xydShzYykpCisJaWYgKHNjYW5fZ2xvYmFsX2xydShzYykpIHsKIAkJem9uZS0+cGFnZXNfc2Nhbm5lZCArPSBwZ3NjYW5uZWQ7CisJCXpvbmUtPnJlY2VudF9zY2FubmVkWyEhZmlsZV0gKz0gcGdtb3ZlZDsKKwl9CiAKLQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFLCAtcGdtb3ZlZCk7CisJaWYgKGZpbGUpCisJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSwgLXBnbW92ZWQpOworCWVsc2UKKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OLCAtcGdtb3ZlZCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAKKwlwZ21vdmVkID0gMDsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmxfaG9sZCkpIHsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCXBhZ2UgPSBscnVfdG9fcGFnZSgmbF9ob2xkKTsKIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JCWlmIChwYWdlX21hcHBlZChwYWdlKSkgewotCQkJaWYgKCFyZWNsYWltX21hcHBlZCB8fAotCQkJICAgICh0b3RhbF9zd2FwX3BhZ2VzID09IDAgJiYgUGFnZUFub24ocGFnZSkpIHx8Ci0JCQkgICAgcGFnZV9yZWZlcmVuY2VkKHBhZ2UsIDAsIHNjLT5tZW1fY2dyb3VwKSkgewotCQkJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZsX2FjdGl2ZSk7Ci0JCQkJY29udGludWU7Ci0JCQl9CisKKwkJaWYgKHVubGlrZWx5KCFwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKSkpIHsKKwkJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CisJCQljb250aW51ZTsKIAkJfQorCisJCS8qIHBhZ2VfcmVmZXJlbmNlZCBjbGVhcnMgUGFnZVJlZmVyZW5jZWQgKi8KKwkJaWYgKHBhZ2VfbWFwcGluZ19pbnVzZShwYWdlKSAmJgorCQkgICAgcGFnZV9yZWZlcmVuY2VkKHBhZ2UsIDAsIHNjLT5tZW1fY2dyb3VwKSkKKwkJCXBnbW92ZWQrKzsKKwogCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmbF9pbmFjdGl2ZSk7CiAJfQogCisJLyoKKwkgKiBDb3VudCByZWZlcmVuY2VkIHBhZ2VzIGZyb20gY3VycmVudGx5IHVzZWQgbWFwcGluZ3MgYXMKKwkgKiByb3RhdGVkLCBldmVuIHRob3VnaCB0aGV5IGFyZSBtb3ZlZCB0byB0aGUgaW5hY3RpdmUgbGlzdC4KKwkgKiBUaGlzIGhlbHBzIGJhbGFuY2Ugc2NhbiBwcmVzc3VyZSBiZXR3ZWVuIGZpbGUgYW5kIGFub255bW91cworCSAqIHBhZ2VzIGluIGdldF9zY2FuX3JhdGlvLgorCSAqLworCXpvbmUtPnJlY2VudF9yb3RhdGVkWyEhZmlsZV0gKz0gcGdtb3ZlZDsKKworCS8qCisJICogTW92ZSB0aGUgcGFnZXMgdG8gdGhlIFtmaWxlIG9yIGFub25dIGluYWN0aXZlIGxpc3QuCisJICovCiAJcGFnZXZlY19pbml0KCZwdmVjLCAxKTsKKwogCXBnbW92ZWQgPSAwOworCWxydSA9IExSVV9CQVNFICsgZmlsZSAqIExSVV9GSUxFOwogCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmxfaW5hY3RpdmUpKSB7CiAJCXBhZ2UgPSBscnVfdG9fcGFnZSgmbF9pbmFjdGl2ZSk7CkBAIC0xMTQ5LDExICsxMjY5LDExIEBACiAJCVZNX0JVR19PTighUGFnZUFjdGl2ZShwYWdlKSk7CiAJCUNsZWFyUGFnZUFjdGl2ZShwYWdlKTsKIAotCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgJnpvbmUtPmluYWN0aXZlX2xpc3QpOwotCQltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgZmFsc2UpOworCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgJnpvbmUtPmxydVtscnVdLmxpc3QpOworCQltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgbHJ1KTsKIAkJcGdtb3ZlZCsrOwogCQlpZiAoIXBhZ2V2ZWNfYWRkKCZwdmVjLCBwYWdlKSkgewotCQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFLCBwZ21vdmVkKTsKKwkJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9MUlVfQkFTRSArIGxydSwgcGdtb3ZlZCk7CiAJCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAkJCXBnZGVhY3RpdmF0ZSArPSBwZ21vdmVkOwogCQkJcGdtb3ZlZCA9IDA7CkBAIC0xMTYzLDEwNCArMTI4MywxODkgQEAKIAkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAkJfQogCX0KLQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUsIHBnbW92ZWQpOworCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9MUlVfQkFTRSArIGxydSwgcGdtb3ZlZCk7CiAJcGdkZWFjdGl2YXRlICs9IHBnbW92ZWQ7CiAJaWYgKGJ1ZmZlcl9oZWFkc19vdmVyX2xpbWl0KSB7CiAJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCQlwYWdldmVjX3N0cmlwKCZwdmVjKTsKIAkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCX0KLQotCXBnbW92ZWQgPSAwOwotCXdoaWxlICghbGlzdF9lbXB0eSgmbF9hY3RpdmUpKSB7Ci0JCXBhZ2UgPSBscnVfdG9fcGFnZSgmbF9hY3RpdmUpOwotCQlwcmVmZXRjaHdfcHJldl9scnVfcGFnZShwYWdlLCAmbF9hY3RpdmUsIGZsYWdzKTsKLQkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOwotCQlTZXRQYWdlTFJVKHBhZ2UpOwotCQlWTV9CVUdfT04oIVBhZ2VBY3RpdmUocGFnZSkpOwotCi0JCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmem9uZS0+YWN0aXZlX2xpc3QpOwotCQltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgdHJ1ZSk7Ci0JCXBnbW92ZWQrKzsKLQkJaWYgKCFwYWdldmVjX2FkZCgmcHZlYywgcGFnZSkpIHsKLQkJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUsIHBnbW92ZWQpOwotCQkJcGdtb3ZlZCA9IDA7Ci0JCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQkJCV9fcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKLQkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQkJfQotCX0KLQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFLCBwZ21vdmVkKTsKLQogCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdSRUZJTEwsIHpvbmUsIHBnc2Nhbm5lZCk7CiAJX19jb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBwZ2RlYWN0aXZhdGUpOwogCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCWlmICh2bV9zd2FwX2Z1bGwoKSkKKwkJcGFnZXZlY19zd2FwX2ZyZWUoJnB2ZWMpOwogCiAJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKKwlzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBwcmlvcml0eSkKK3sKKwlpbnQgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7CisKKwlpZiAobHJ1ID09IExSVV9BQ1RJVkVfRklMRSkgeworCQlzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2Nhbiwgem9uZSwgc2MsIHByaW9yaXR5LCBmaWxlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGxydSA9PSBMUlVfQUNUSVZFX0FOT04gJiYKKwkgICAgKCFzY2FuX2dsb2JhbF9scnUoc2MpIHx8IGluYWN0aXZlX2Fub25faXNfbG93KHpvbmUpKSkgeworCQlzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2Nhbiwgem9uZSwgc2MsIHByaW9yaXR5LCBmaWxlKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCB6b25lLCBzYywgcHJpb3JpdHksIGZpbGUpOworfQorCisvKgorICogRGV0ZXJtaW5lIGhvdyBhZ2dyZXNzaXZlbHkgdGhlIGFub24gYW5kIGZpbGUgTFJVIGxpc3RzIHNob3VsZCBiZQorICogc2Nhbm5lZC4gIFRoZSByZWxhdGl2ZSB2YWx1ZSBvZiBlYWNoIHNldCBvZiBMUlUgbGlzdHMgaXMgZGV0ZXJtaW5lZAorICogYnkgbG9va2luZyBhdCB0aGUgZnJhY3Rpb24gb2YgdGhlIHBhZ2VzIHNjYW5uZWQgd2UgZGlkIHJvdGF0ZSBiYWNrCisgKiBvbnRvIHRoZSBhY3RpdmUgbGlzdCBpbnN0ZWFkIG9mIGV2aWN0LgorICoKKyAqIHBlcmNlbnRbMF0gc3BlY2lmaWVzIGhvdyBtdWNoIHByZXNzdXJlIHRvIHB1dCBvbiByYW0vc3dhcCBiYWNrZWQKKyAqIG1lbW9yeSwgd2hpbGUgcGVyY2VudFsxXSBkZXRlcm1pbmVzIHByZXNzdXJlIG9uIHRoZSBmaWxlIExSVXMuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9zY2FuX3JhdGlvKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKKwkJCQkJdW5zaWduZWQgbG9uZyAqcGVyY2VudCkKK3sKKwl1bnNpZ25lZCBsb25nIGFub24sIGZpbGUsIGZyZWU7CisJdW5zaWduZWQgbG9uZyBhbm9uX3ByaW8sIGZpbGVfcHJpbzsKKwl1bnNpZ25lZCBsb25nIGFwLCBmcDsKKworCWFub24gID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OKSArCisJCXpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKTsKKwlmaWxlICA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSkgKworCQl6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfRklMRSk7CisJZnJlZSAgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7CisKKwkvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBwYWdlcy4gKi8KKwlpZiAobnJfc3dhcF9wYWdlcyA8PSAwKSB7CisJCXBlcmNlbnRbMF0gPSAwOworCQlwZXJjZW50WzFdID0gMTAwOworCQlyZXR1cm47CisJfQorCisJLyogSWYgd2UgaGF2ZSB2ZXJ5IGZldyBwYWdlIGNhY2hlIHBhZ2VzLCBmb3JjZS1zY2FuIGFub24gcGFnZXMuICovCisJaWYgKHVubGlrZWx5KGZpbGUgKyBmcmVlIDw9IHpvbmUtPnBhZ2VzX2hpZ2gpKSB7CisJCXBlcmNlbnRbMF0gPSAxMDA7CisJCXBlcmNlbnRbMV0gPSAwOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBPSywgc28gd2UgaGF2ZSBzd2FwIHNwYWNlIGFuZCBhIGZhaXIgYW1vdW50IG9mIHBhZ2UgY2FjaGUKKwkgKiBwYWdlcy4gIFdlIHVzZSB0aGUgcmVjZW50bHkgcm90YXRlZCAvIHJlY2VudGx5IHNjYW5uZWQKKwkgKiByYXRpb3MgdG8gZGV0ZXJtaW5lIGhvdyB2YWx1YWJsZSBlYWNoIGNhY2hlIGlzLgorCSAqCisJICogQmVjYXVzZSB3b3JrbG9hZHMgY2hhbmdlIG92ZXIgdGltZSAoYW5kIHRvIGF2b2lkIG92ZXJmbG93KQorCSAqIHdlIGtlZXAgdGhlc2Ugc3RhdGlzdGljcyBhcyBhIGZsb2F0aW5nIGF2ZXJhZ2UsIHdoaWNoIGVuZHMKKwkgKiB1cCB3ZWlnaGluZyByZWNlbnQgcmVmZXJlbmNlcyBtb3JlIHRoYW4gb2xkIG9uZXMuCisJICoKKwkgKiBhbm9uIGluIFswXSwgZmlsZSBpbiBbMV0KKwkgKi8KKwlpZiAodW5saWtlbHkoem9uZS0+cmVjZW50X3NjYW5uZWRbMF0gPiBhbm9uIC8gNCkpIHsKKwkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFswXSAvPSAyOworCQl6b25lLT5yZWNlbnRfcm90YXRlZFswXSAvPSAyOworCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwl9CisKKwlpZiAodW5saWtlbHkoem9uZS0+cmVjZW50X3NjYW5uZWRbMV0gPiBmaWxlIC8gNCkpIHsKKwkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFsxXSAvPSAyOworCQl6b25lLT5yZWNlbnRfcm90YXRlZFsxXSAvPSAyOworCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwl9CisKKwkvKgorCSAqIFdpdGggc3dhcHBpbmVzcyBhdCAxMDAsIGFub255bW91cyBhbmQgZmlsZSBoYXZlIHRoZSBzYW1lIHByaW9yaXR5LgorCSAqIFRoaXMgc2Nhbm5pbmcgcHJpb3JpdHkgaXMgZXNzZW50aWFsbHkgdGhlIGludmVyc2Ugb2YgSU8gY29zdC4KKwkgKi8KKwlhbm9uX3ByaW8gPSBzYy0+c3dhcHBpbmVzczsKKwlmaWxlX3ByaW8gPSAyMDAgLSBzYy0+c3dhcHBpbmVzczsKKworCS8qCisJICogICAgICAgICAgICAgICAgICBhbm9uICAgICAgIHJlY2VudF9yb3RhdGVkWzBdCisJICogJWFub24gPSAxMDAgKiAtLS0tLS0tLS0tLSAvIC0tLS0tLS0tLS0tLS0tLS0tICogSU8gY29zdAorCSAqICAgICAgICAgICAgICAgYW5vbiArIGZpbGUgICAgICByb3RhdGVfc3VtCisJICovCisJYXAgPSAoYW5vbl9wcmlvICsgMSkgKiAoem9uZS0+cmVjZW50X3NjYW5uZWRbMF0gKyAxKTsKKwlhcCAvPSB6b25lLT5yZWNlbnRfcm90YXRlZFswXSArIDE7CisKKwlmcCA9IChmaWxlX3ByaW8gKyAxKSAqICh6b25lLT5yZWNlbnRfc2Nhbm5lZFsxXSArIDEpOworCWZwIC89IHpvbmUtPnJlY2VudF9yb3RhdGVkWzFdICsgMTsKKworCS8qIE5vcm1hbGl6ZSB0byBwZXJjZW50YWdlcyAqLworCXBlcmNlbnRbMF0gPSAxMDAgKiBhcCAvIChhcCArIGZwICsgMSk7CisJcGVyY2VudFsxXSA9IDEwMCAtIHBlcmNlbnRbMF07Cit9CisKKwogLyoKICAqIFRoaXMgaXMgYSBiYXNpYyBwZXItem9uZSBwYWdlIGZyZWVyLiAgVXNlZCBieSBib3RoIGtzd2FwZCBhbmQgZGlyZWN0IHJlY2xhaW0uCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua196b25lKGludCBwcmlvcml0eSwgc3RydWN0IHpvbmUgKnpvbmUsCiAJCQkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7Ci0JdW5zaWduZWQgbG9uZyBucl9hY3RpdmU7Ci0JdW5zaWduZWQgbG9uZyBucl9pbmFjdGl2ZTsKKwl1bnNpZ25lZCBsb25nIG5yW05SX0xSVV9MSVNUU107CiAJdW5zaWduZWQgbG9uZyBucl90b19zY2FuOwogCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDsKKwl1bnNpZ25lZCBsb25nIHBlcmNlbnRbMl07CS8qIGFub24gQCAwOyBmaWxlIEAgMSAqLworCWVudW0gbHJ1X2xpc3QgbDsKIAotCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpKSB7Ci0JCS8qCi0JCSAqIEFkZCBvbmUgdG8gbnJfdG9fc2NhbiBqdXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBrZXJuZWwKLQkJICogd2lsbCBzbG93bHkgc2lmdCB0aHJvdWdoIHRoZSBhY3RpdmUgbGlzdC4KLQkJICovCi0JCXpvbmUtPm5yX3NjYW5fYWN0aXZlICs9Ci0JCQkoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSkgPj4gcHJpb3JpdHkpICsgMTsKLQkJbnJfYWN0aXZlID0gem9uZS0+bnJfc2Nhbl9hY3RpdmU7Ci0JCXpvbmUtPm5yX3NjYW5faW5hY3RpdmUgKz0KLQkJCSh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpID4+IHByaW9yaXR5KSArIDE7Ci0JCW5yX2luYWN0aXZlID0gem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZTsKLQkJaWYgKG5yX2luYWN0aXZlID49IHNjLT5zd2FwX2NsdXN0ZXJfbWF4KQotCQkJem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZSA9IDA7Ci0JCWVsc2UKLQkJCW5yX2luYWN0aXZlID0gMDsKKwlnZXRfc2Nhbl9yYXRpbyh6b25lLCBzYywgcGVyY2VudCk7CiAKLQkJaWYgKG5yX2FjdGl2ZSA+PSBzYy0+c3dhcF9jbHVzdGVyX21heCkKLQkJCXpvbmUtPm5yX3NjYW5fYWN0aXZlID0gMDsKLQkJZWxzZQotCQkJbnJfYWN0aXZlID0gMDsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBUaGlzIHJlY2xhaW0gb2NjdXJzIG5vdCBiZWNhdXNlIHpvbmUgbWVtb3J5IHNob3J0YWdlIGJ1dAotCQkgKiBiZWNhdXNlIG1lbW9yeSBjb250cm9sbGVyIGhpdHMgaXRzIGxpbWl0LgotCQkgKiBUaGVuLCBkb24ndCBtb2RpZnkgem9uZSByZWNsYWltIHJlbGF0ZWQgZGF0YS4KLQkJICovCi0JCW5yX2FjdGl2ZSA9IG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltX2FjdGl2ZShzYy0+bWVtX2Nncm91cCwKLQkJCQkJem9uZSwgcHJpb3JpdHkpOworCWZvcl9lYWNoX2V2aWN0YWJsZV9scnUobCkgeworCQlpZiAoc2Nhbl9nbG9iYWxfbHJ1KHNjKSkgeworCQkJaW50IGZpbGUgPSBpc19maWxlX2xydShsKTsKKwkJCWludCBzY2FuOwogCi0JCW5yX2luYWN0aXZlID0gbWVtX2Nncm91cF9jYWxjX3JlY2xhaW1faW5hY3RpdmUoc2MtPm1lbV9jZ3JvdXAsCi0JCQkJCXpvbmUsIHByaW9yaXR5KTsKLQl9Ci0KLQotCXdoaWxlIChucl9hY3RpdmUgfHwgbnJfaW5hY3RpdmUpIHsKLQkJaWYgKG5yX2FjdGl2ZSkgewotCQkJbnJfdG9fc2NhbiA9IG1pbihucl9hY3RpdmUsCi0JCQkJCSh1bnNpZ25lZCBsb25nKXNjLT5zd2FwX2NsdXN0ZXJfbWF4KTsKLQkJCW5yX2FjdGl2ZSAtPSBucl90b19zY2FuOwotCQkJc2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIHpvbmUsIHNjLCBwcmlvcml0eSk7Ci0JCX0KLQotCQlpZiAobnJfaW5hY3RpdmUpIHsKLQkJCW5yX3RvX3NjYW4gPSBtaW4obnJfaW5hY3RpdmUsCi0JCQkJCSh1bnNpZ25lZCBsb25nKXNjLT5zd2FwX2NsdXN0ZXJfbWF4KTsKLQkJCW5yX2luYWN0aXZlIC09IG5yX3RvX3NjYW47Ci0JCQlucl9yZWNsYWltZWQgKz0gc2hyaW5rX2luYWN0aXZlX2xpc3QobnJfdG9fc2Nhbiwgem9uZSwKLQkJCQkJCQkJc2MpOworCQkJc2NhbiA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9MUlVfQkFTRSArIGwpOworCQkJaWYgKHByaW9yaXR5KSB7CisJCQkJc2NhbiA+Pj0gcHJpb3JpdHk7CisJCQkJc2NhbiA9IChzY2FuICogcGVyY2VudFtmaWxlXSkgLyAxMDA7CisJCQl9CisJCQl6b25lLT5scnVbbF0ubnJfc2NhbiArPSBzY2FuOworCQkJbnJbbF0gPSB6b25lLT5scnVbbF0ubnJfc2NhbjsKKwkJCWlmIChucltsXSA+PSBzYy0+c3dhcF9jbHVzdGVyX21heCkKKwkJCQl6b25lLT5scnVbbF0ubnJfc2NhbiA9IDA7CisJCQllbHNlCisJCQkJbnJbbF0gPSAwOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFRoaXMgcmVjbGFpbSBvY2N1cnMgbm90IGJlY2F1c2Ugem9uZSBtZW1vcnkgc2hvcnRhZ2UKKwkJCSAqIGJ1dCBiZWNhdXNlIG1lbW9yeSBjb250cm9sbGVyIGhpdHMgaXRzIGxpbWl0LgorCQkJICogRG9uJ3QgbW9kaWZ5IHpvbmUgcmVjbGFpbSByZWxhdGVkIGRhdGEuCisJCQkgKi8KKwkJCW5yW2xdID0gbWVtX2Nncm91cF9jYWxjX3JlY2xhaW0oc2MtPm1lbV9jZ3JvdXAsIHpvbmUsCisJCQkJCQkJCXByaW9yaXR5LCBsKTsKIAkJfQogCX0KIAorCXdoaWxlIChucltMUlVfSU5BQ1RJVkVfQU5PTl0gfHwgbnJbTFJVX0FDVElWRV9GSUxFXSB8fAorCQkJCQlucltMUlVfSU5BQ1RJVkVfRklMRV0pIHsKKwkJZm9yX2VhY2hfZXZpY3RhYmxlX2xydShsKSB7CisJCQlpZiAobnJbbF0pIHsKKwkJCQlucl90b19zY2FuID0gbWluKG5yW2xdLAorCQkJCQkodW5zaWduZWQgbG9uZylzYy0+c3dhcF9jbHVzdGVyX21heCk7CisJCQkJbnJbbF0gLT0gbnJfdG9fc2NhbjsKKworCQkJCW5yX3JlY2xhaW1lZCArPSBzaHJpbmtfbGlzdChsLCBucl90b19zY2FuLAorCQkJCQkJCXpvbmUsIHNjLCBwcmlvcml0eSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIEV2ZW4gaWYgd2UgZGlkIG5vdCB0cnkgdG8gZXZpY3QgYW5vbiBwYWdlcyBhdCBhbGwsIHdlIHdhbnQgdG8KKwkgKiByZWJhbGFuY2UgdGhlIGFub24gbHJ1IGFjdGl2ZS9pbmFjdGl2ZSByYXRpby4KKwkgKi8KKwlpZiAoIXNjYW5fZ2xvYmFsX2xydShzYykgfHwgaW5hY3RpdmVfYW5vbl9pc19sb3coem9uZSkpCisJCXNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCB6b25lLCBzYywgcHJpb3JpdHksIDApOworCWVsc2UgaWYgKCFzY2FuX2dsb2JhbF9scnUoc2MpKQorCQlzaHJpbmtfYWN0aXZlX2xpc3QoU1dBUF9DTFVTVEVSX01BWCwgem9uZSwgc2MsIHByaW9yaXR5LCAwKTsKKwogCXRocm90dGxlX3ZtX3dyaXRlb3V0KHNjLT5nZnBfbWFzayk7CiAJcmV0dXJuIG5yX3JlY2xhaW1lZDsKIH0KQEAgLTEzMjEsNyArMTUyNiw3IEBACiAKIAlyZXR1cm4gbnJfcmVjbGFpbWVkOwogfQotIAorCiAvKgogICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBkaXJlY3QgcGFnZSByZWNsYWltLgogICoKQEAgLTEzNjQsOCArMTU2OSw3IEBACiAJCQlpZiAoIWNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoem9uZSwgR0ZQX0tFUk5FTCkpCiAJCQkJY29udGludWU7CiAKLQkJCWxydV9wYWdlcyArPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFKQotCQkJCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSk7CisJCQlscnVfcGFnZXMgKz0gem9uZV9scnVfcGFnZXMoem9uZSk7CiAJCX0KIAl9CiAKQEAgLTE1NTUsNiArMTc1OSwxNCBAQAogCQkJICAgIHByaW9yaXR5ICE9IERFRl9QUklPUklUWSkKIAkJCQljb250aW51ZTsKIAorCQkJLyoKKwkJCSAqIERvIHNvbWUgYmFja2dyb3VuZCBhZ2luZyBvZiB0aGUgYW5vbiBsaXN0LCB0byBnaXZlCisJCQkgKiBwYWdlcyBhIGNoYW5jZSB0byBiZSByZWZlcmVuY2VkIGJlZm9yZSByZWNsYWltaW5nLgorCQkJICovCisJCQlpZiAoaW5hY3RpdmVfYW5vbl9pc19sb3coem9uZSkpCisJCQkJc2hyaW5rX2FjdGl2ZV9saXN0KFNXQVBfQ0xVU1RFUl9NQVgsIHpvbmUsCisJCQkJCQkJJnNjLCBwcmlvcml0eSwgMCk7CisKIAkJCWlmICghem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHpvbmUtPnBhZ2VzX2hpZ2gsCiAJCQkJCSAgICAgICAwLCAwKSkgewogCQkJCWVuZF96b25lID0gaTsKQEAgLTE1NjcsOCArMTc3OSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPD0gZW5kX3pvbmU7IGkrKykgewogCQkJc3RydWN0IHpvbmUgKnpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIGk7CiAKLQkJCWxydV9wYWdlcyArPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFKQotCQkJCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSk7CisJCQlscnVfcGFnZXMgKz0gem9uZV9scnVfcGFnZXMoem9uZSk7CiAJCX0KIAogCQkvKgpAQCAtMTYxMiw4ICsxODIzLDcgQEAKIAkJCWlmICh6b25lX2lzX2FsbF91bnJlY2xhaW1hYmxlKHpvbmUpKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKG5yX3NsYWIgPT0gMCAmJiB6b25lLT5wYWdlc19zY2FubmVkID49Ci0JCQkJKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpCi0JCQkJKyB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpKSAqIDYpCisJCQkJCQkoem9uZV9scnVfcGFnZXMoem9uZSkgKiA2KSkKIAkJCQkJem9uZV9zZXRfZmxhZyh6b25lLAogCQkJCQkJICAgICAgWk9ORV9BTExfVU5SRUNMQUlNQUJMRSk7CiAJCQkvKgpAQCAtMTY2Nyw3ICsxODc3LDcgQEAKIAogLyoKICAqIFRoZSBiYWNrZ3JvdW5kIHBhZ2VvdXQgZGFlbW9uLCBzdGFydGVkIGFzIGEga2VybmVsIHRocmVhZAotICogZnJvbSB0aGUgaW5pdCBwcm9jZXNzLiAKKyAqIGZyb20gdGhlIGluaXQgcHJvY2Vzcy4KICAqCiAgKiBUaGlzIGJhc2ljYWxseSB0cmlja2xlcyBvdXQgcGFnZXMgc28gdGhhdCB3ZSBoYXZlIF9zb21lXwogICogZnJlZSBtZW1vcnkgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlcmUgaXMgbm8gb3RoZXIgYWN0aXZpdHkKQEAgLTE3NjEsNiArMTk3MSwxNCBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGdkYXQtPmtzd2FwZF93YWl0KTsKIH0KIAordW5zaWduZWQgbG9uZyBnbG9iYWxfbHJ1X3BhZ2VzKHZvaWQpCit7CisJcmV0dXJuIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRV9BTk9OKQorCQkrIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRV9GSUxFKQorCQkrIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFX0FOT04pCisJCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkVfRklMRSk7Cit9CisKICNpZmRlZiBDT05GSUdfUE0KIC8qCiAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHNocmlua19hbGxfbWVtb3J5KCkuICBUcmllcyB0byByZWNsYWltICducl9wYWdlcycgcGFnZXMKQEAgLTE3NzQsNiArMTk5Miw3IEBACiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7CiAJdW5zaWduZWQgbG9uZyBucl90b19zY2FuLCByZXQgPSAwOworCWVudW0gbHJ1X2xpc3QgbDsKIAogCWZvcl9lYWNoX3pvbmUoem9uZSkgewogCkBAIC0xNzgzLDM4ICsyMDAyLDMxIEBACiAJCWlmICh6b25lX2lzX2FsbF91bnJlY2xhaW1hYmxlKHpvbmUpICYmIHByaW8gIT0gREVGX1BSSU9SSVRZKQogCQkJY29udGludWU7CiAKLQkJLyogRm9yIHBhc3MgPSAwIHdlIGRvbid0IHNocmluayB0aGUgYWN0aXZlIGxpc3QgKi8KLQkJaWYgKHBhc3MgPiAwKSB7Ci0JCQl6b25lLT5ucl9zY2FuX2FjdGl2ZSArPQotCQkJCSh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFKSA+PiBwcmlvKSArIDE7Ci0JCQlpZiAoem9uZS0+bnJfc2Nhbl9hY3RpdmUgPj0gbnJfcGFnZXMgfHwgcGFzcyA+IDMpIHsKLQkJCQl6b25lLT5ucl9zY2FuX2FjdGl2ZSA9IDA7Ci0JCQkJbnJfdG9fc2NhbiA9IG1pbihucl9wYWdlcywKLQkJCQkJem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSkpOwotCQkJCXNocmlua19hY3RpdmVfbGlzdChucl90b19zY2FuLCB6b25lLCBzYywgcHJpbyk7Ci0JCQl9Ci0JCX0KKwkJZm9yX2VhY2hfZXZpY3RhYmxlX2xydShsKSB7CisJCQkvKiBGb3IgcGFzcyA9IDAsIHdlIGRvbid0IHNocmluayB0aGUgYWN0aXZlIGxpc3QgKi8KKwkJCWlmIChwYXNzID09IDAgJiYKKwkJCQkobCA9PSBMUlVfQUNUSVZFIHx8IGwgPT0gTFJVX0FDVElWRV9GSUxFKSkKKwkJCQljb250aW51ZTsKIAotCQl6b25lLT5ucl9zY2FuX2luYWN0aXZlICs9Ci0JCQkoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKSA+PiBwcmlvKSArIDE7Ci0JCWlmICh6b25lLT5ucl9zY2FuX2luYWN0aXZlID49IG5yX3BhZ2VzIHx8IHBhc3MgPiAzKSB7Ci0JCQl6b25lLT5ucl9zY2FuX2luYWN0aXZlID0gMDsKLQkJCW5yX3RvX3NjYW4gPSBtaW4obnJfcGFnZXMsCi0JCQkJem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKSk7Ci0JCQlyZXQgKz0gc2hyaW5rX2luYWN0aXZlX2xpc3QobnJfdG9fc2Nhbiwgem9uZSwgc2MpOwotCQkJaWYgKHJldCA+PSBucl9wYWdlcykKLQkJCQlyZXR1cm4gcmV0OworCQkJem9uZS0+bHJ1W2xdLm5yX3NjYW4gKz0KKwkJCQkoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbCkKKwkJCQkJCQkJPj4gcHJpbykgKyAxOworCQkJaWYgKHpvbmUtPmxydVtsXS5ucl9zY2FuID49IG5yX3BhZ2VzIHx8IHBhc3MgPiAzKSB7CisJCQkJem9uZS0+bHJ1W2xdLm5yX3NjYW4gPSAwOworCQkJCW5yX3RvX3NjYW4gPSBtaW4obnJfcGFnZXMsCisJCQkJCXpvbmVfcGFnZV9zdGF0ZSh6b25lLAorCQkJCQkJCU5SX0xSVV9CQVNFICsgbCkpOworCQkJCXJldCArPSBzaHJpbmtfbGlzdChsLCBucl90b19zY2FuLCB6b25lLAorCQkJCQkJCQlzYywgcHJpbyk7CisJCQkJaWYgKHJldCA+PSBucl9wYWdlcykKKwkJCQkJcmV0dXJuIHJldDsKKwkJCX0KIAkJfQogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X2xydV9wYWdlcyh2b2lkKQotewotCXJldHVybiBnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkUpICsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkUpOwotfQotCiAvKgogICogVHJ5IHRvIGZyZWUgYG5yX3BhZ2VzJyBvZiBtZW1vcnksIHN5c3RlbS13aWRlLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YKICAqIGZyZWVkIHBhZ2VzLgpAQCAtMTg0MCw3ICsyMDUyLDcgQEAKIAogCWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgPSAmcmVjbGFpbV9zdGF0ZTsKIAotCWxydV9wYWdlcyA9IGNvdW50X2xydV9wYWdlcygpOworCWxydV9wYWdlcyA9IGdsb2JhbF9scnVfcGFnZXMoKTsKIAlucl9zbGFiID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9SRUNMQUlNQUJMRSk7CiAJLyogSWYgc2xhYiBjYWNoZXMgYXJlIGh1Z2UsIGl0J3MgYmV0dGVyIHRvIGhpdCB0aGVtIGZpcnN0ICovCiAJd2hpbGUgKG5yX3NsYWIgPj0gbHJ1X3BhZ2VzKSB7CkBAIC0xODgzLDcgKzIwOTUsNyBAQAogCiAJCQlyZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiID0gMDsKIAkJCXNocmlua19zbGFiKHNjLm5yX3NjYW5uZWQsIHNjLmdmcF9tYXNrLAotCQkJCQljb3VudF9scnVfcGFnZXMoKSk7CisJCQkJCWdsb2JhbF9scnVfcGFnZXMoKSk7CiAJCQlyZXQgKz0gcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYjsKIAkJCWlmIChyZXQgPj0gbnJfcGFnZXMpCiAJCQkJZ290byBvdXQ7CkBAIC0xOTAwLDcgKzIxMTIsNyBAQAogCWlmICghcmV0KSB7CiAJCWRvIHsKIAkJCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPSAwOwotCQkJc2hyaW5rX3NsYWIobnJfcGFnZXMsIHNjLmdmcF9tYXNrLCBjb3VudF9scnVfcGFnZXMoKSk7CisJCQlzaHJpbmtfc2xhYihucl9wYWdlcywgc2MuZ2ZwX21hc2ssIGdsb2JhbF9scnVfcGFnZXMoKSk7CiAJCQlyZXQgKz0gcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYjsKIAkJfSB3aGlsZSAocmV0IDwgbnJfcGFnZXMgJiYgcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA+IDApOwogCX0KQEAgLTIxMjgsMyArMjM0MCwyODUgQEAKIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisvKgorICogcGFnZV9ldmljdGFibGUgLSB0ZXN0IHdoZXRoZXIgYSBwYWdlIGlzIGV2aWN0YWJsZQorICogQHBhZ2U6IHRoZSBwYWdlIHRvIHRlc3QKKyAqIEB2bWE6IHRoZSBWTUEgaW4gd2hpY2ggdGhlIHBhZ2UgaXMgb3Igd2lsbCBiZSBtYXBwZWQsIG1heSBiZSBOVUxMCisgKgorICogVGVzdCB3aGV0aGVyIHBhZ2UgaXMgZXZpY3RhYmxlLS1pLmUuLCBzaG91bGQgYmUgcGxhY2VkIG9uIGFjdGl2ZS9pbmFjdGl2ZQorICogbGlzdHMgdnMgdW5ldmljdGFibGUgbGlzdC4gIFRoZSB2bWEgYXJndW1lbnQgaXMgIU5VTEwgd2hlbiBjYWxsZWQgZnJvbSB0aGUKKyAqIGZhdWx0IHBhdGggdG8gZGV0ZXJtaW5lIGhvdyB0byBpbnN0YW50YXRlIGEgbmV3IHBhZ2UuCisgKgorICogUmVhc29ucyBwYWdlIG1pZ2h0IG5vdCBiZSBldmljdGFibGU6CisgKiAoMSkgcGFnZSdzIG1hcHBpbmcgbWFya2VkIHVuZXZpY3RhYmxlCisgKiAoMikgcGFnZSBpcyBwYXJ0IG9mIGFuIG1sb2NrZWQgVk1BCisgKgorICovCitpbnQgcGFnZV9ldmljdGFibGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCisJaWYgKG1hcHBpbmdfdW5ldmljdGFibGUocGFnZV9tYXBwaW5nKHBhZ2UpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoUGFnZU1sb2NrZWQocGFnZSkgfHwgKHZtYSAmJiBpc19tbG9ja2VkX3ZtYSh2bWEsIHBhZ2UpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgc2hvd19wYWdlX3BhdGgoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJY2hhciBidWZbMjU2XTsKKwlpZiAocGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKSB7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCQlwZ29mZl90IHBnb2ZmID0gcGFnZS0+aW5kZXggPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSBQQUdFX1NISUZUKTsKKworCQlzcGluX2xvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKKwkJZGVudHJ5ID0gZF9maW5kX2FsaWFzKG1hcHBpbmctPmhvc3QpOworCQlwcmludGsoS0VSTl9JTkZPICJyZXNjdWVkOiAlcyAlbHVcbiIsCisJCSAgICAgICBkZW50cnlfcGF0aChkZW50cnksIGJ1ZiwgMjU2KSwgcGdvZmYpOworCQlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOworCX0gZWxzZSB7CisjaWYgZGVmaW5lZChDT05GSUdfTU1fT1dORVIpICYmIGRlZmluZWQoQ09ORklHX01NVSkKKwkJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwkJYW5vbl92bWEgPSBwYWdlX2xvY2tfYW5vbl92bWEocGFnZSk7CisJCWlmICghYW5vbl92bWEpCisJCQlyZXR1cm47CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZhbm9uX3ZtYS0+aGVhZCwgYW5vbl92bWFfbm9kZSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAicmVzY3VlZDogYW5vbiAlc1xuIiwKKwkJCSAgICAgICB2bWEtPnZtX21tLT5vd25lci0+Y29tbSk7CisJCQlicmVhazsKKwkJfQorCQlwYWdlX3VubG9ja19hbm9uX3ZtYShhbm9uX3ZtYSk7CisjZW5kaWYKKwl9Cit9CisKKworLyoqCisgKiBjaGVja19tb3ZlX3VuZXZpY3RhYmxlX3BhZ2UgLSBjaGVjayBwYWdlIGZvciBldmljdGFiaWxpdHkgYW5kIG1vdmUgdG8gYXBwcm9wcmlhdGUgem9uZSBscnUgbGlzdAorICogQHBhZ2U6IHBhZ2UgdG8gY2hlY2sgZXZpY3RhYmlsaXR5IGFuZCBtb3ZlIHRvIGFwcHJvcHJpYXRlIGxydSBsaXN0CisgKiBAem9uZTogem9uZSBwYWdlIGlzIGluCisgKgorICogQ2hlY2tzIGEgcGFnZSBmb3IgZXZpY3RhYmlsaXR5IGFuZCBtb3ZlcyB0aGUgcGFnZSB0byB0aGUgYXBwcm9wcmlhdGUKKyAqIHpvbmUgbHJ1IGxpc3QuCisgKgorICogUmVzdHJpY3Rpb25zOiB6b25lLT5scnVfbG9jayBtdXN0IGJlIGhlbGQsIHBhZ2UgbXVzdCBiZSBvbiBMUlUgYW5kIG11c3QKKyAqIGhhdmUgUGFnZVVuZXZpY3RhYmxlIHNldC4KKyAqLworc3RhdGljIHZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgem9uZSAqem9uZSkKK3sKKwlWTV9CVUdfT04oUGFnZUFjdGl2ZShwYWdlKSk7CisKK3JldHJ5OgorCUNsZWFyUGFnZVVuZXZpY3RhYmxlKHBhZ2UpOworCWlmIChwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKSkgeworCQllbnVtIGxydV9saXN0IGwgPSBMUlVfSU5BQ1RJVkVfQU5PTiArIHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKworCQlzaG93X3BhZ2VfcGF0aChwYWdlKTsKKworCQlfX2RlY196b25lX3N0YXRlKHpvbmUsIE5SX1VORVZJQ1RBQkxFKTsKKwkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5scnVbbF0ubGlzdCk7CisJCV9faW5jX3pvbmVfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfQU5PTiArIGwpOworCQlfX2NvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHUkVTQ1VFRCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogcm90YXRlIHVuZXZpY3RhYmxlIGxpc3QKKwkJICovCisJCVNldFBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKKwkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5scnVbTFJVX1VORVZJQ1RBQkxFXS5saXN0KTsKKwkJaWYgKHBhZ2VfZXZpY3RhYmxlKHBhZ2UsIE5VTEwpKQorCQkJZ290byByZXRyeTsKKwl9Cit9CisKKy8qKgorICogc2Nhbl9tYXBwaW5nX3VuZXZpY3RhYmxlX3BhZ2VzIC0gc2NhbiBhbiBhZGRyZXNzIHNwYWNlIGZvciBldmljdGFibGUgcGFnZXMKKyAqIEBtYXBwaW5nOiBzdHJ1Y3QgYWRkcmVzc19zcGFjZSB0byBzY2FuIGZvciBldmljdGFibGUgcGFnZXMKKyAqCisgKiBTY2FuIGFsbCBwYWdlcyBpbiBtYXBwaW5nLiAgQ2hlY2sgdW5ldmljdGFibGUgcGFnZXMgZm9yCisgKiBldmljdGFiaWxpdHkgYW5kIG1vdmUgdGhlbSB0byB0aGUgYXBwcm9wcmlhdGUgem9uZSBscnUgbGlzdC4KKyAqLwordm9pZCBzY2FuX21hcHBpbmdfdW5ldmljdGFibGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJcGdvZmZfdCBuZXh0ID0gMDsKKwlwZ29mZl90IGVuZCAgID0gKGlfc2l6ZV9yZWFkKG1hcHBpbmctPmhvc3QpICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4KKwkJCSBQQUdFX0NBQ0hFX1NISUZUOworCXN0cnVjdCB6b25lICp6b25lOworCXN0cnVjdCBwYWdldmVjIHB2ZWM7CisKKwlpZiAobWFwcGluZy0+bnJwYWdlcyA9PSAwKQorCQlyZXR1cm47CisKKwlwYWdldmVjX2luaXQoJnB2ZWMsIDApOworCXdoaWxlIChuZXh0IDwgZW5kICYmCisJCXBhZ2V2ZWNfbG9va3VwKCZwdmVjLCBtYXBwaW5nLCBuZXh0LCBQQUdFVkVDX1NJWkUpKSB7CisJCWludCBpOworCQlpbnQgcGdfc2Nhbm5lZCA9IDA7CisKKwkJem9uZSA9IE5VTEw7CisKKwkJZm9yIChpID0gMDsgaSA8IHBhZ2V2ZWNfY291bnQoJnB2ZWMpOyBpKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKKwkJCXBnb2ZmX3QgcGFnZV9pbmRleCA9IHBhZ2UtPmluZGV4OworCQkJc3RydWN0IHpvbmUgKnBhZ2V6b25lID0gcGFnZV96b25lKHBhZ2UpOworCisJCQlwZ19zY2FubmVkKys7CisJCQlpZiAocGFnZV9pbmRleCA+IG5leHQpCisJCQkJbmV4dCA9IHBhZ2VfaW5kZXg7CisJCQluZXh0Kys7CisKKwkJCWlmIChwYWdlem9uZSAhPSB6b25lKSB7CisJCQkJaWYgKHpvbmUpCisJCQkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQkJCXpvbmUgPSBwYWdlem9uZTsKKwkJCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJCQl9CisKKwkJCWlmIChQYWdlTFJVKHBhZ2UpICYmIFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkKKwkJCQljaGVja19tb3ZlX3VuZXZpY3RhYmxlX3BhZ2UocGFnZSwgem9uZSk7CisJCX0KKwkJaWYgKHpvbmUpCisJCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKKworCQljb3VudF92bV9ldmVudHMoVU5FVklDVEFCTEVfUEdTQ0FOTkVELCBwZ19zY2FubmVkKTsKKwl9CisKK30KKworLyoqCisgKiBzY2FuX3pvbmVfdW5ldmljdGFibGVfcGFnZXMgLSBjaGVjayB1bmV2aWN0YWJsZSBsaXN0IGZvciBldmljdGFibGUgcGFnZXMKKyAqIEB6b25lIC0gem9uZSBvZiB3aGljaCB0byBzY2FuIHRoZSB1bmV2aWN0YWJsZSBsaXN0CisgKgorICogU2NhbiBAem9uZSdzIHVuZXZpY3RhYmxlIExSVSBsaXN0cyB0byBjaGVjayBmb3IgcGFnZXMgdGhhdCBoYXZlIGJlY29tZQorICogZXZpY3RhYmxlLiAgTW92ZSB0aG9zZSB0aGF0IGhhdmUgdG8gQHpvbmUncyBpbmFjdGl2ZSBsaXN0IHdoZXJlIHRoZXkKKyAqIGJlY29tZSBjYW5kaWRhdGVzIGZvciByZWNsYWltLCB1bmxlc3Mgc2hyaW5rX2luYWN0aXZlX3pvbmUoKSBkZWNpZGVzCisgKiB0byByZWFjdGl2YXRlIHRoZW0uICBQYWdlcyB0aGF0IGFyZSBzdGlsbCB1bmV2aWN0YWJsZSBhcmUgcm90YXRlZAorICogYmFjayBvbnRvIEB6b25lJ3MgdW5ldmljdGFibGUgbGlzdC4KKyAqLworI2RlZmluZSBTQ0FOX1VORVZJQ1RBQkxFX0JBVENIX1NJWkUgMTZVTCAvKiBhcmJpdHJhcnkgbG9jayBob2xkIGJhdGNoIHNpemUgKi8KK3ZvaWQgc2Nhbl96b25lX3VuZXZpY3RhYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxfdW5ldmljdGFibGUgPSAmem9uZS0+bHJ1W0xSVV9VTkVWSUNUQUJMRV0ubGlzdDsKKwl1bnNpZ25lZCBsb25nIHNjYW47CisJdW5zaWduZWQgbG9uZyBucl90b19zY2FuID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1VORVZJQ1RBQkxFKTsKKworCXdoaWxlIChucl90b19zY2FuID4gMCkgeworCQl1bnNpZ25lZCBsb25nIGJhdGNoX3NpemUgPSBtaW4obnJfdG9fc2NhbiwKKwkJCQkJCVNDQU5fVU5FVklDVEFCTEVfQkFUQ0hfU0laRSk7CisKKwkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQlmb3IgKHNjYW4gPSAwOyAgc2NhbiA8IGJhdGNoX3NpemU7IHNjYW4rKykgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBscnVfdG9fcGFnZShsX3VuZXZpY3RhYmxlKTsKKworCQkJaWYgKCF0cnlsb2NrX3BhZ2UocGFnZSkpCisJCQkJY29udGludWU7CisKKwkJCXByZWZldGNod19wcmV2X2xydV9wYWdlKHBhZ2UsIGxfdW5ldmljdGFibGUsIGZsYWdzKTsKKworCQkJaWYgKGxpa2VseShQYWdlTFJVKHBhZ2UpICYmIFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkpCisJCQkJY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9wYWdlKHBhZ2UsIHpvbmUpOworCisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKworCQlucl90b19zY2FuIC09IGJhdGNoX3NpemU7CisJfQorfQorCisKKy8qKgorICogc2Nhbl9hbGxfem9uZXNfdW5ldmljdGFibGVfcGFnZXMgLSBzY2FuIGFsbCB1bmV2aWN0YWJsZSBsaXN0cyBmb3IgZXZpY3RhYmxlIHBhZ2VzCisgKgorICogQSByZWFsbHkgYmlnIGhhbW1lcjogIHNjYW4gYWxsIHpvbmVzJyB1bmV2aWN0YWJsZSBMUlUgbGlzdHMgdG8gY2hlY2sgZm9yCisgKiBwYWdlcyB0aGF0IGhhdmUgYmVjb21lIGV2aWN0YWJsZS4gIE1vdmUgdGhvc2UgYmFjayB0byB0aGUgem9uZXMnCisgKiBpbmFjdGl2ZSBsaXN0IHdoZXJlIHRoZXkgYmVjb21lIGNhbmRpZGF0ZXMgZm9yIHJlY2xhaW0uCisgKiBUaGlzIG9jY3VycyB3aGVuLCBlLmcuLCB3ZSBoYXZlIHVuc3dhcHBhYmxlIHBhZ2VzIG9uIHRoZSB1bmV2aWN0YWJsZSBsaXN0cywKKyAqIGFuZCB3ZSBhZGQgc3dhcCB0byB0aGUgc3lzdGVtLiAgQXMgc3VjaCwgaXQgcnVucyBpbiB0aGUgY29udGV4dCBvZiBhIHRhc2sKKyAqIHRoYXQgaGFzIHBvc3NpYmx5L3Byb2JhYmx5IG1hZGUgc29tZSBwcmV2aW91c2x5IHVuZXZpY3RhYmxlIHBhZ2VzCisgKiBldmljdGFibGUuCisgKi8KK3ZvaWQgc2Nhbl9hbGxfem9uZXNfdW5ldmljdGFibGVfcGFnZXModm9pZCkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKworCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCQlzY2FuX3pvbmVfdW5ldmljdGFibGVfcGFnZXMoem9uZSk7CisJfQorfQorCisvKgorICogc2Nhbl91bmV2aWN0YWJsZV9wYWdlcyBbdm1dIHN5c2N0bCBoYW5kbGVyLiAgT24gZGVtYW5kIHJlLXNjYW4gb2YKKyAqIGFsbCBub2RlcycgdW5ldmljdGFibGUgbGlzdHMgZm9yIGV2aWN0YWJsZSBwYWdlcworICovCit1bnNpZ25lZCBsb25nIHNjYW5fdW5ldmljdGFibGVfcGFnZXM7CisKK2ludCBzY2FuX3VuZXZpY3RhYmxlX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCSAgIHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYnVmZmVyLAorCQkJICAgc2l6ZV90ICpsZW5ndGgsIGxvZmZfdCAqcHBvcykKK3sKKwlwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgZmlsZSwgYnVmZmVyLCBsZW5ndGgsIHBwb3MpOworCisJaWYgKHdyaXRlICYmICoodW5zaWduZWQgbG9uZyAqKXRhYmxlLT5kYXRhKQorCQlzY2FuX2FsbF96b25lc191bmV2aWN0YWJsZV9wYWdlcygpOworCisJc2Nhbl91bmV2aWN0YWJsZV9wYWdlcyA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwZXIgbm9kZSAnc2Nhbl91bmV2aWN0YWJsZV9wYWdlcycgYXR0cmlidXRlLiAgT24gZGVtYW5kIHJlLXNjYW4gb2YKKyAqIGEgc3BlY2lmaWVkIG5vZGUncyBwZXIgem9uZSB1bmV2aWN0YWJsZSBsaXN0cyBmb3IgZXZpY3RhYmxlIHBhZ2VzLgorICovCisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfc2Nhbl91bmV2aWN0YWJsZV9ub2RlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIpOwkvKiBhbHdheXMgemVybzsgc2hvdWxkIGZpdC4uLiAqLworfQorCitzdGF0aWMgc3NpemVfdCB3cml0ZV9zY2FuX3VuZXZpY3RhYmxlX25vZGUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB6b25lICpub2RlX3pvbmVzID0gTk9ERV9EQVRBKGRldi0+aWQpLT5ub2RlX3pvbmVzOworCXN0cnVjdCB6b25lICp6b25lOworCXVuc2lnbmVkIGxvbmcgcmVzOworCXVuc2lnbmVkIGxvbmcgcmVxID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnJlcyk7CisKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIDE7CS8qIHplcm8gaXMgbm8tb3AgKi8KKworCWZvciAoem9uZSA9IG5vZGVfem9uZXM7IHpvbmUgLSBub2RlX3pvbmVzIDwgTUFYX05SX1pPTkVTOyArK3pvbmUpIHsKKwkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKKwkJCWNvbnRpbnVlOworCQlzY2FuX3pvbmVfdW5ldmljdGFibGVfcGFnZXMoem9uZSk7CisJfQorCXJldHVybiAxOworfQorCisKK3N0YXRpYyBTWVNERVZfQVRUUihzY2FuX3VuZXZpY3RhYmxlX3BhZ2VzLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXJlYWRfc2Nhbl91bmV2aWN0YWJsZV9ub2RlLAorCQkJd3JpdGVfc2Nhbl91bmV2aWN0YWJsZV9ub2RlKTsKKworaW50IHNjYW5fdW5ldmljdGFibGVfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSkKK3sKKwlyZXR1cm4gc3lzZGV2X2NyZWF0ZV9maWxlKCZub2RlLT5zeXNkZXYsICZhdHRyX3NjYW5fdW5ldmljdGFibGVfcGFnZXMpOworfQorCit2b2lkIHNjYW5fdW5ldmljdGFibGVfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKQoreworCXN5c2Rldl9yZW1vdmVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9zY2FuX3VuZXZpY3RhYmxlX3BhZ2VzKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jCmluZGV4IGQ3ODI2YWYuLjkzNDMyMjcgMTAwNjQ0Ci0tLSBhL21tL3Ztc3RhdC5jCisrKyBiL21tL3Ztc3RhdC5jCkBAIC02MTksOCArNjE5LDE0IEBACiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7CiAJLyogWm9uZWQgVk0gY291bnRlcnMgKi8KIAkibnJfZnJlZV9wYWdlcyIsCi0JIm5yX2luYWN0aXZlIiwKLQkibnJfYWN0aXZlIiwKKwkibnJfaW5hY3RpdmVfYW5vbiIsCisJIm5yX2FjdGl2ZV9hbm9uIiwKKwkibnJfaW5hY3RpdmVfZmlsZSIsCisJIm5yX2FjdGl2ZV9maWxlIiwKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJIm5yX3VuZXZpY3RhYmxlIiwKKwkibnJfbWxvY2siLAorI2VuZGlmCiAJIm5yX2Fub25fcGFnZXMiLAogCSJucl9tYXBwZWQiLAogCSJucl9maWxlX3BhZ2VzIiwKQEAgLTY3NSw2ICs2ODEsMTYgQEAKIAkiaHRsYl9idWRkeV9hbGxvY19zdWNjZXNzIiwKIAkiaHRsYl9idWRkeV9hbGxvY19mYWlsIiwKICNlbmRpZgorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkidW5ldmljdGFibGVfcGdzX2N1bGxlZCIsCisJInVuZXZpY3RhYmxlX3Bnc19zY2FubmVkIiwKKwkidW5ldmljdGFibGVfcGdzX3Jlc2N1ZWQiLAorCSJ1bmV2aWN0YWJsZV9wZ3NfbWxvY2tlZCIsCisJInVuZXZpY3RhYmxlX3Bnc19tdW5sb2NrZWQiLAorCSJ1bmV2aWN0YWJsZV9wZ3NfY2xlYXJlZCIsCisJInVuZXZpY3RhYmxlX3Bnc19zdHJhbmRlZCIsCisJInVuZXZpY3RhYmxlX3Bnc19tbG9ja2ZyZWVkIiwKKyNlbmRpZgogI2VuZGlmCiB9OwogCkBAIC02ODgsNyArNzA0LDcgQEAKIAkJICAgIlxuICAgICAgICBtaW4gICAgICAlbHUiCiAJCSAgICJcbiAgICAgICAgbG93ICAgICAgJWx1IgogCQkgICAiXG4gICAgICAgIGhpZ2ggICAgICVsdSIKLQkJICAgIlxuICAgICAgICBzY2FubmVkICAlbHUgKGE6ICVsdSBpOiAlbHUpIgorCQkgICAiXG4gICAgICAgIHNjYW5uZWQgICVsdSAoYWE6ICVsdSBpYTogJWx1IGFmOiAlbHUgaWY6ICVsdSkiCiAJCSAgICJcbiAgICAgICAgc3Bhbm5lZCAgJWx1IgogCQkgICAiXG4gICAgICAgIHByZXNlbnQgICVsdSIsCiAJCSAgIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKSwKQEAgLTY5Niw3ICs3MTIsMTAgQEAKIAkJICAgem9uZS0+cGFnZXNfbG93LAogCQkgICB6b25lLT5wYWdlc19oaWdoLAogCQkgICB6b25lLT5wYWdlc19zY2FubmVkLAotCQkgICB6b25lLT5ucl9zY2FuX2FjdGl2ZSwgem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZSwKKwkJICAgem9uZS0+bHJ1W0xSVV9BQ1RJVkVfQU5PTl0ubnJfc2NhbiwKKwkJICAgem9uZS0+bHJ1W0xSVV9JTkFDVElWRV9BTk9OXS5ucl9zY2FuLAorCQkgICB6b25lLT5scnVbTFJVX0FDVElWRV9GSUxFXS5ucl9zY2FuLAorCQkgICB6b25lLT5scnVbTFJVX0lOQUNUSVZFX0ZJTEVdLm5yX3NjYW4sCiAJCSAgIHpvbmUtPnNwYW5uZWRfcGFnZXMsCiAJCSAgIHpvbmUtPnByZXNlbnRfcGFnZXMpOwogCkBAIC03MzMsMTAgKzc1MiwxMiBAQAogCXNlcV9wcmludGYobSwKIAkJICAgIlxuICBhbGxfdW5yZWNsYWltYWJsZTogJXUiCiAJCSAgICJcbiAgcHJldl9wcmlvcml0eTogICAgICVpIgotCQkgICAiXG4gIHN0YXJ0X3BmbjogICAgICAgICAlbHUiLAorCQkgICAiXG4gIHN0YXJ0X3BmbjogICAgICAgICAlbHUiCisJCSAgICJcbiAgaW5hY3RpdmVfcmF0aW86ICAgICV1IiwKIAkJCSAgIHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSksCiAJCSAgIHpvbmUtPnByZXZfcHJpb3JpdHksCi0JCSAgIHpvbmUtPnpvbmVfc3RhcnRfcGZuKTsKKwkJICAgem9uZS0+em9uZV9zdGFydF9wZm4sCisJCSAgIHpvbmUtPmluYWN0aXZlX3JhdGlvKTsKIAlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0LzgwMi9mYy5jIGIvbmV0LzgwMi9mYy5jCmluZGV4IGNiMzQ3NWUuLjM0Y2YxZWUgMTAwNjQ0Ci0tLSBhL25ldC84MDIvZmMuYworKysgYi9uZXQvODAyL2ZjLmMKQEAgLTgyLDEzICs4MiwxMyBAQAogCiBzdGF0aWMgaW50IGZjX3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCiB7CisjaWZkZWYgQ09ORklHX0lORVQKIAlzdHJ1Y3QgZmNoX2hkciAqZmNoPShzdHJ1Y3QgZmNoX2hkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgZmNsbGMgKmZjbGxjPShzdHJ1Y3QgZmNsbGMgKikoc2tiLT5kYXRhK3NpemVvZihzdHJ1Y3QgZmNoX2hkcikpOwogCWlmKGZjbGxjLT5ldGhlcnR5cGUgIT0gaHRvbnMoRVRIX1BfSVApKSB7CiAJCXByaW50aygiZmNfcmVidWlsZF9oZWFkZXI6IERvbid0IGtub3cgaG93IHRvIHJlc29sdmUgdHlwZSAlMDRYIGFkZHJlc3NlcyA/XG4iLCBudG9ocyhmY2xsYy0+ZXRoZXJ0eXBlKSk7CiAJCXJldHVybiAwOwogCX0KLSNpZmRlZiBDT05GSUdfSU5FVAogCXJldHVybiBhcnBfZmluZChmY2gtPmRhZGRyLCBza2IpOwogI2Vsc2UKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC84MDIvcHNuYXAuYyBiL25ldC84MDIvcHNuYXAuYwppbmRleCBiM2NmZTVhLi43MDk4MGJhIDEwMDY0NAotLS0gYS9uZXQvODAyL3BzbmFwLmMKKysrIGIvbmV0LzgwMi9wc25hcC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCVNOQVAgZGF0YSBsaW5rIGxheWVyLiBEZXJpdmVkIGZyb20gODAyLjIKICAqCi0gKgkJQWxhbiBDb3ggPEFsYW4uQ294QGxpbnV4Lm9yZz4sCisgKgkJQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sCiAgKgkJZnJvbSB0aGUgODAyLjIgbGF5ZXIgYnkgR3JlZyBQYWdlLgogICoJCU1lcmdlZCBpbiBhZGRpdGlvbnMgZnJvbSBHcmVnIFBhZ2UncyBwc25hcC5jLgogICoKZGlmZiAtLWdpdCBhL25ldC85cC9NYWtlZmlsZSBiL25ldC85cC9NYWtlZmlsZQppbmRleCA1MTkyMTk0Li4xMDQxYjdiIDEwMDY0NAotLS0gYS9uZXQvOXAvTWFrZWZpbGUKKysrIGIvbmV0LzlwL01ha2VmaWxlCkBAIC00LDEwICs0LDkgQEAKIDlwbmV0LW9ianMgOj0gXAogCW1vZC5vIFwKIAljbGllbnQubyBcCi0JY29udi5vIFwKIAllcnJvci5vIFwKLQlmY3ByaW50Lm8gXAogCXV0aWwubyBcCisJcHJvdG9jb2wubyBcCiAJdHJhbnNfZmQubyBcCiAKIDlwbmV0X3ZpcnRpby1vYmpzIDo9IFwKZGlmZiAtLWdpdCBhL25ldC85cC9jbGllbnQuYyBiL25ldC85cC9jbGllbnQuYwppbmRleCAxMGUzMjAzLi5iYmFjMmY3IDEwMDY0NAotLS0gYS9uZXQvOXAvY2xpZW50LmMKKysrIGIvbmV0LzlwL2NsaWVudC5jCkBAIC0zMywxMiArMzMsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxuZXQvOXAvOXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KLSNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgotCi1zdGF0aWMgc3RydWN0IHA5X2ZpZCAqcDlfZmlkX2NyZWF0ZShzdHJ1Y3QgcDlfY2xpZW50ICpjbG50KTsKLXN0YXRpYyB2b2lkIHA5X2ZpZF9kZXN0cm95KHN0cnVjdCBwOV9maWQgKmZpZCk7Ci1zdGF0aWMgc3RydWN0IHA5X3N0YXQgKnA5X2Nsb25lX3N0YXQoc3RydWN0IHA5X3N0YXQgKnN0LCBpbnQgZG90dSk7CisjaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgInByb3RvY29sLmgiCiAKIC8qCiAgICogQ2xpZW50IE9wdGlvbiBQYXJzaW5nIChjb2RlIGluc3BpcmVkIGJ5IE5GUyBjb2RlKQpAQCAtNTIsMTMgKzQ5LDE2IEBACiAJT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X21zaXplLCAibXNpemU9JXUifSwKIAl7T3B0X2xlZ2FjeSwgIm5vZXh0ZW5kIn0sCiAJe09wdF90cmFucywgInRyYW5zPSVzIn0sCiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIAorc3RhdGljIHN0cnVjdCBwOV9yZXFfdCAqCitwOV9jbGllbnRfcnBjKHN0cnVjdCBwOV9jbGllbnQgKmMsIGludDhfdCB0eXBlLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKIC8qKgogICogdjlmc19wYXJzZV9vcHRpb25zIC0gcGFyc2UgbW91bnQgb3B0aW9ucyBpbnRvIHNlc3Npb24gc3RydWN0dXJlCiAgKiBAb3B0aW9uczogb3B0aW9ucyBzdHJpbmcgcGFzc2VkIGZyb20gbW91bnQKQEAgLTEyNCw5MjIgKzEyNCw0OTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIHA5X3RhZ19hbGxvYyAtIGxvb2t1cC9hbGxvY2F0ZSBhIHJlcXVlc3QgYnkgdGFnCisgKiBAYzogY2xpZW50IHNlc3Npb24gdG8gbG9va3VwIHRhZyB3aXRoaW4KKyAqIEB0YWc6IG51bWVyaWMgaWQgZm9yIHRyYW5zYWN0aW9uCisgKgorICogdGhpcyBpcyBhIHNpbXBsZSBhcnJheSBsb29rdXAsIGJ1dCB3aWxsIGdyb3cgdGhlCisgKiByZXF1ZXN0X3Nsb3RzIGFzIG5lY2Vzc2FyeSB0byBhY2NvbW9kYXRlIHRyYW5zYWN0aW9uCisgKiBpZHMgd2hpY2ggZGlkIG5vdCBwcmV2aW91c2x5IGhhdmUgYSBzbG90LgorICoKKyAqIHRoaXMgY29kZSByZWxpZXMgb24gdGhlIGNsaWVudCBzcGlubG9jayB0byBtYW5hZ2UgbG9ja3MsIGl0cworICogcG9zc2libGUgd2Ugc2hvdWxkIHN3aXRjaCB0byBzb21ldGhpbmcgZWxzZSwgYnV0IEknZCByYXRoZXIKKyAqIHN0aWNrIHdpdGggc29tZXRoaW5nIGxvdy1vdmVyaGVhZCBmb3IgdGhlIGNvbW1vbiBjYXNlLgorICoKKyAqLworCitzdGF0aWMgc3RydWN0IHA5X3JlcV90ICpwOV90YWdfYWxsb2Moc3RydWN0IHA5X2NsaWVudCAqYywgdTE2IHRhZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByb3csIGNvbDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKworCS8qIFRoaXMgbG9va3MgdXAgdGhlIG9yaWdpbmFsIHJlcXVlc3QgYnkgdGFnIHNvIHdlIGtub3cgd2hpY2gKKwkgKiBidWZmZXIgdG8gcmVhZCB0aGUgZGF0YSBpbnRvICovCisJdGFnKys7CisKKwlpZiAodGFnID49IGMtPm1heF90YWcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmMtPmxvY2ssIGZsYWdzKTsKKwkJLyogY2hlY2sgYWdhaW4gc2luY2Ugb3JpZ2luYWwgY2hlY2sgd2FzIG91dHNpZGUgb2YgbG9jayAqLworCQl3aGlsZSAodGFnID49IGMtPm1heF90YWcpIHsKKwkJCXJvdyA9ICh0YWcgLyBQOV9ST1dfTUFYVEFHKTsKKwkJCWMtPnJlcXNbcm93XSA9IGtjYWxsb2MoUDlfUk9XX01BWFRBRywKKwkJCQkJc2l6ZW9mKHN0cnVjdCBwOV9yZXFfdCksIEdGUF9BVE9NSUMpOworCisJCQlpZiAoIWMtPnJlcXNbcm93XSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOworCQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQkJfQorCQkJZm9yIChjb2wgPSAwOyBjb2wgPCBQOV9ST1dfTUFYVEFHOyBjb2wrKykgeworCQkJCWMtPnJlcXNbcm93XVtjb2xdLnN0YXR1cyA9IFJFUV9TVEFUVVNfSURMRTsKKwkJCQljLT5yZXFzW3Jvd11bY29sXS50YyA9IE5VTEw7CisJCQl9CisJCQljLT5tYXhfdGFnICs9IFA5X1JPV19NQVhUQUc7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+bG9jaywgZmxhZ3MpOworCX0KKwlyb3cgPSB0YWcgLyBQOV9ST1dfTUFYVEFHOworCWNvbCA9IHRhZyAlIFA5X1JPV19NQVhUQUc7CisKKwlyZXEgPSAmYy0+cmVxc1tyb3ddW2NvbF07CisJaWYgKCFyZXEtPnRjKSB7CisJCXJlcS0+d3EgPSBrbWFsbG9jKHNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCksIEdGUF9LRVJORUwpOworCQlpZiAoIXJlcS0+d3EpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCX0KKwkJaW5pdF93YWl0cXVldWVfaGVhZChyZXEtPndxKTsKKwkJcmVxLT50YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkrYy0+bXNpemUsCisJCQkJCQkJCUdGUF9LRVJORUwpOworCQlyZXEtPnJjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKStjLT5tc2l6ZSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICgoIXJlcS0+dGMpIHx8ICghcmVxLT5yYykpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOworCQkJa2ZyZWUocmVxLT50Yyk7CisJCQlrZnJlZShyZXEtPnJjKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQl9CisJCXJlcS0+dGMtPnNkYXRhID0gKGNoYXIgKikgcmVxLT50YyArIHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpOworCQlyZXEtPnRjLT5jYXBhY2l0eSA9IGMtPm1zaXplOworCQlyZXEtPnJjLT5zZGF0YSA9IChjaGFyICopIHJlcS0+cmMgKyBzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKTsKKwkJcmVxLT5yYy0+Y2FwYWNpdHkgPSBjLT5tc2l6ZTsKKwl9CisKKwlwOXBkdV9yZXNldChyZXEtPnRjKTsKKwlwOXBkdV9yZXNldChyZXEtPnJjKTsKKworCXJlcS0+Zmx1c2hfdGFnID0gMDsKKwlyZXEtPnRjLT50YWcgPSB0YWctMTsKKwlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfQUxMT0M7CisKKwlyZXR1cm4gJmMtPnJlcXNbcm93XVtjb2xdOworfQogCiAvKioKLSAqIHA5X2NsaWVudF9ycGMgLSBzZW5kcyA5UCByZXF1ZXN0IGFuZCB3YWl0cyB1bnRpbCBhIHJlc3BvbnNlIGlzIGF2YWlsYWJsZS4KLSAqICAgICAgVGhlIGZ1bmN0aW9uIGNhbiBiZSBpbnRlcnJ1cHRlZC4KLSAqIEBjOiBjbGllbnQgZGF0YQotICogQHRjOiByZXF1ZXN0IHRvIGJlIHNlbnQKLSAqIEByYzogcG9pbnRlciB3aGVyZSBhIHBvaW50ZXIgdG8gdGhlIHJlc3BvbnNlIGlzIHN0b3JlZAorICogcDlfdGFnX2xvb2t1cCAtIGxvb2t1cCBhIHJlcXVlc3QgYnkgdGFnCisgKiBAYzogY2xpZW50IHNlc3Npb24gdG8gbG9va3VwIHRhZyB3aXRoaW4KKyAqIEB0YWc6IG51bWVyaWMgaWQgZm9yIHRyYW5zYWN0aW9uCisgKgogICovCi1pbnQKLXA5X2NsaWVudF9ycGMoc3RydWN0IHA5X2NsaWVudCAqYywgc3RydWN0IHA5X2ZjYWxsICp0YywKLQlzdHJ1Y3QgcDlfZmNhbGwgKipyYykKKworc3RydWN0IHA5X3JlcV90ICpwOV90YWdfbG9va3VwKHN0cnVjdCBwOV9jbGllbnQgKmMsIHUxNiB0YWcpCiB7Ci0JcmV0dXJuIGMtPnRyYW5zLT5ycGMoYy0+dHJhbnMsIHRjLCByYyk7CisJaW50IHJvdywgY29sOworCisJLyogVGhpcyBsb29rcyB1cCB0aGUgb3JpZ2luYWwgcmVxdWVzdCBieSB0YWcgc28gd2Uga25vdyB3aGljaAorCSAqIGJ1ZmZlciB0byByZWFkIHRoZSBkYXRhIGludG8gKi8KKwl0YWcrKzsKKworCUJVR19PTih0YWcgPj0gYy0+bWF4X3RhZyk7CisKKwlyb3cgPSB0YWcgLyBQOV9ST1dfTUFYVEFHOworCWNvbCA9IHRhZyAlIFA5X1JPV19NQVhUQUc7CisKKwlyZXR1cm4gJmMtPnJlcXNbcm93XVtjb2xdOwogfQorRVhQT1JUX1NZTUJPTChwOV90YWdfbG9va3VwKTsKIAotc3RydWN0IHA5X2NsaWVudCAqcDlfY2xpZW50X2NyZWF0ZShjb25zdCBjaGFyICpkZXZfbmFtZSwgY2hhciAqb3B0aW9ucykKKy8qKgorICogcDlfdGFnX2luaXQgLSBzZXR1cCB0YWdzIHN0cnVjdHVyZSBhbmQgY29udGVudHMKKyAqIEB0YWdzOiB0YWdzIHN0cnVjdHVyZSBmcm9tIHRoZSBjbGllbnQgc3RydWN0CisgKgorICogVGhpcyBpbml0aWFsaXplcyB0aGUgdGFncyBzdHJ1Y3R1cmUgZm9yIGVhY2ggY2xpZW50IGluc3RhbmNlLgorICoKKyAqLworCitzdGF0aWMgaW50IHA5X3RhZ19pbml0KHN0cnVjdCBwOV9jbGllbnQgKmMpCiB7Ci0JaW50IGVyciwgbjsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfc3RyICp2ZXJzaW9uOworCWludCBlcnIgPSAwOwogCi0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCWNsbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbG50KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWNsbnQtPnRyYW5zX21vZCA9IE5VTEw7Ci0JY2xudC0+dHJhbnMgPSBOVUxMOwotCXNwaW5fbG9ja19pbml0KCZjbG50LT5sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmY2xudC0+ZmlkbGlzdCk7Ci0JY2xudC0+ZmlkcG9vbCA9IHA5X2lkcG9vbF9jcmVhdGUoKTsKLQlpZiAoSVNfRVJSKGNsbnQtPmZpZHBvb2wpKSB7Ci0JCWVyciA9IFBUUl9FUlIoY2xudC0+ZmlkcG9vbCk7Ci0JCWNsbnQtPmZpZHBvb2wgPSBOVUxMOworCWMtPnRhZ3Bvb2wgPSBwOV9pZHBvb2xfY3JlYXRlKCk7CisJaWYgKElTX0VSUihjLT50YWdwb29sKSkgeworCQllcnIgPSBQVFJfRVJSKGMtPnRhZ3Bvb2wpOworCQljLT50YWdwb29sID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQllcnIgPSBwYXJzZV9vcHRzKG9wdGlvbnMsIGNsbnQpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm9yOworCXA5X2lkcG9vbF9nZXQoYy0+dGFncG9vbCk7IC8qIHJlc2VydmUgdGFnIDAgKi8KIAotCWlmIChjbG50LT50cmFuc19tb2QgPT0gTlVMTCkgewotCQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAotCQkJCSJObyB0cmFuc3BvcnQgZGVmaW5lZCBvciBkZWZhdWx0IHRyYW5zcG9ydFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImNsbnQgJXAgdHJhbnMgJXAgbXNpemUgJWQgZG90dSAlZFxuIiwKLQkJY2xudCwgY2xudC0+dHJhbnNfbW9kLCBjbG50LT5tc2l6ZSwgY2xudC0+ZG90dSk7Ci0KLQotCWNsbnQtPnRyYW5zID0gY2xudC0+dHJhbnNfbW9kLT5jcmVhdGUoZGV2X25hbWUsIG9wdGlvbnMsIGNsbnQtPm1zaXplLAotCQkJCQkJCQljbG50LT5kb3R1KTsKLQlpZiAoSVNfRVJSKGNsbnQtPnRyYW5zKSkgewotCQllcnIgPSBQVFJfRVJSKGNsbnQtPnRyYW5zKTsKLQkJY2xudC0+dHJhbnMgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmICgoY2xudC0+bXNpemUrUDlfSU9IRFJTWikgPiBjbG50LT50cmFuc19tb2QtPm1heHNpemUpCi0JCWNsbnQtPm1zaXplID0gY2xudC0+dHJhbnNfbW9kLT5tYXhzaXplLVA5X0lPSERSU1o7Ci0KLQl0YyA9IHA5X2NyZWF0ZV90dmVyc2lvbihjbG50LT5tc2l6ZSwgY2xudC0+ZG90dT8iOVAyMDAwLnUiOiI5UDIwMDAiKTsKLQlpZiAoSVNfRVJSKHRjKSkgewotCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJvcjsKLQotCXZlcnNpb24gPSAmcmMtPnBhcmFtcy5ydmVyc2lvbi52ZXJzaW9uOwotCWlmICh2ZXJzaW9uLT5sZW4gPT0gOCAmJiAhbWVtY21wKHZlcnNpb24tPnN0ciwgIjlQMjAwMC51IiwgOCkpCi0JCWNsbnQtPmRvdHUgPSAxOwotCWVsc2UgaWYgKHZlcnNpb24tPmxlbiA9PSA2ICYmICFtZW1jbXAodmVyc2lvbi0+c3RyLCAiOVAyMDAwIiwgNikpCi0JCWNsbnQtPmRvdHUgPSAwOwotCWVsc2UgewotCQllcnIgPSAtRVJFTU9URUlPOwotCQlnb3RvIGVycm9yOwotCX0KLQotCW4gPSByYy0+cGFyYW1zLnJ2ZXJzaW9uLm1zaXplOwotCWlmIChuIDwgY2xudC0+bXNpemUpCi0JCWNsbnQtPm1zaXplID0gbjsKLQotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JcmV0dXJuIGNsbnQ7Ci0KKwljLT5tYXhfdGFnID0gMDsKIGVycm9yOgotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JcDlfY2xpZW50X2Rlc3Ryb3koY2xudCk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfY3JlYXRlKTsKIAotdm9pZCBwOV9jbGllbnRfZGVzdHJveShzdHJ1Y3QgcDlfY2xpZW50ICpjbG50KQorLyoqCisgKiBwOV90YWdfY2xlYW51cCAtIGNsZWFucyB1cCB0YWdzIHN0cnVjdHVyZSBhbmQgcmVjbGFpbXMgcmVzb3VyY2VzCisgKiBAdGFnczogdGFncyBzdHJ1Y3R1cmUgZnJvbSB0aGUgY2xpZW50IHN0cnVjdAorICoKKyAqIFRoaXMgZnJlZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFncyBzdHJ1Y3R1cmUKKyAqCisgKi8KK3N0YXRpYyB2b2lkIHA5X3RhZ19jbGVhbnVwKHN0cnVjdCBwOV9jbGllbnQgKmMpCiB7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkLCAqZmlkcHRyOworCWludCByb3csIGNvbDsKIAotCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICJjbG50ICVwXG4iLCBjbG50KTsKLQotCWlmIChjbG50LT50cmFucykgewotCQljbG50LT50cmFucy0+Y2xvc2UoY2xudC0+dHJhbnMpOwotCQlrZnJlZShjbG50LT50cmFucyk7Ci0JCWNsbnQtPnRyYW5zID0gTlVMTDsKLQl9Ci0KLQl2OWZzX3B1dF90cmFucyhjbG50LT50cmFuc19tb2QpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZpZCwgZmlkcHRyLCAmY2xudC0+ZmlkbGlzdCwgZmxpc3QpCi0JCXA5X2ZpZF9kZXN0cm95KGZpZCk7Ci0KLQlpZiAoY2xudC0+ZmlkcG9vbCkKLQkJcDlfaWRwb29sX2Rlc3Ryb3koY2xudC0+ZmlkcG9vbCk7Ci0KLQlrZnJlZShjbG50KTsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY2xpZW50X2Rlc3Ryb3kpOwotCi12b2lkIHA5X2NsaWVudF9kaXNjb25uZWN0KHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpCi17Ci0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImNsbnQgJXBcbiIsIGNsbnQpOwotCWNsbnQtPnRyYW5zLT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9kaXNjb25uZWN0KTsKLQotc3RydWN0IHA5X2ZpZCAqcDlfY2xpZW50X2F0dGFjaChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50LCBzdHJ1Y3QgcDlfZmlkICphZmlkLAotCWNoYXIgKnVuYW1lLCB1MzIgbl91bmFtZSwgY2hhciAqYW5hbWUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjLCAqcmM7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImNsbnQgJXAgYWZpZCAlZCB1bmFtZSAlcyBhbmFtZSAlc1xuIiwKLQkJY2xudCwgYWZpZD9hZmlkLT5maWQ6LTEsIHVuYW1lLCBhbmFtZSk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCi0JZmlkID0gcDlfZmlkX2NyZWF0ZShjbG50KTsKLQlpZiAoSVNfRVJSKGZpZCkpIHsKLQkJZXJyID0gUFRSX0VSUihmaWQpOwotCQlmaWQgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXRjID0gcDlfY3JlYXRlX3RhdHRhY2goZmlkLT5maWQsIGFmaWQ/YWZpZC0+ZmlkOlA5X05PRklELCB1bmFtZSwgYW5hbWUsCi0JCW5fdW5hbWUsIGNsbnQtPmRvdHUpOwotCWlmIChJU19FUlIodGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZXJyID0gcDlfY2xpZW50X3JwYyhjbG50LCB0YywgJnJjKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycm9yOwotCi0JbWVtbW92ZSgmZmlkLT5xaWQsICZyYy0+cGFyYW1zLnJhdHRhY2gucWlkLCBzaXplb2Yoc3RydWN0IHA5X3FpZCkpOwotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JcmV0dXJuIGZpZDsKLQotZXJyb3I6Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlpZiAoZmlkKQotCQlwOV9maWRfZGVzdHJveShmaWQpOwotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9hdHRhY2gpOwotCi1zdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfYXV0aChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50LCBjaGFyICp1bmFtZSwKLQl1MzIgbl91bmFtZSwgY2hhciAqYW5hbWUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjLCAqcmM7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImNsbnQgJXAgdW5hbWUgJXMgYW5hbWUgJXNcbiIsIGNsbnQsIHVuYW1lLAotCQkJCQkJCQkJYW5hbWUpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQotCWZpZCA9IHA5X2ZpZF9jcmVhdGUoY2xudCk7Ci0JaWYgKElTX0VSUihmaWQpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZmlkKTsKLQkJZmlkID0gTlVMTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQl0YyA9IHA5X2NyZWF0ZV90YXV0aChmaWQtPmZpZCwgdW5hbWUsIGFuYW1lLCBuX3VuYW1lLCBjbG50LT5kb3R1KTsKLQlpZiAoSVNfRVJSKHRjKSkgewotCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJvcjsKLQotCW1lbW1vdmUoJmZpZC0+cWlkLCAmcmMtPnBhcmFtcy5yYXV0aC5xaWQsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlyZXR1cm4gZmlkOwotCi1lcnJvcjoKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCWlmIChmaWQpCi0JCXA5X2ZpZF9kZXN0cm95KGZpZCk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY2xpZW50X2F1dGgpOwotCi1zdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfd2FsayhzdHJ1Y3QgcDlfZmlkICpvbGRmaWQsIGludCBud25hbWUsIGNoYXIgKip3bmFtZXMsCi0JaW50IGNsb25lKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0Jc3RydWN0IHA5X2ZpZCAqZmlkOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZCBud25hbWUgJWQgd25hbWVbMF0gJXNcbiIsCi0JCW9sZGZpZC0+ZmlkLCBud25hbWUsIHduYW1lcz93bmFtZXNbMF06TlVMTCk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCWNsbnQgPSBvbGRmaWQtPmNsbnQ7Ci0JaWYgKGNsb25lKSB7Ci0JCWZpZCA9IHA5X2ZpZF9jcmVhdGUoY2xudCk7Ci0JCWlmIChJU19FUlIoZmlkKSkgewotCQkJZXJyID0gUFRSX0VSUihmaWQpOwotCQkJZmlkID0gTlVMTDsKLQkJCWdvdG8gZXJyb3I7CisJLyogY2hlY2sgdG8gaW5zdXJlIGFsbCByZXF1ZXN0cyBhcmUgaWRsZSAqLworCWZvciAocm93ID0gMDsgcm93IDwgKGMtPm1heF90YWcvUDlfUk9XX01BWFRBRyk7IHJvdysrKSB7CisJCWZvciAoY29sID0gMDsgY29sIDwgUDlfUk9XX01BWFRBRzsgY29sKyspIHsKKwkJCWlmIChjLT5yZXFzW3Jvd11bY29sXS5zdGF0dXMgIT0gUkVRX1NUQVRVU19JRExFKSB7CisJCQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsCisJCQkJICAiQXR0ZW1wdGluZyB0byBjbGVhbnVwIG5vbi1mcmVlIHRhZyAlZCwlZFxuIiwKKwkJCQkgIHJvdywgY29sKTsKKwkJCQkvKiBUT0RPOiBkZWxheSBleGVjdXRpb24gb2YgY2xlYW51cCAqLworCQkJCXJldHVybjsKKwkJCX0KIAkJfQotCi0JCWZpZC0+dWlkID0gb2xkZmlkLT51aWQ7Ci0JfSBlbHNlCi0JCWZpZCA9IG9sZGZpZDsKLQotCXRjID0gcDlfY3JlYXRlX3R3YWxrKG9sZGZpZC0+ZmlkLCBmaWQtPmZpZCwgbnduYW1lLCB3bmFtZXMpOwotCWlmIChJU19FUlIodGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWdvdG8gZXJyb3I7CiAJfQogCi0JZXJyID0gcDlfY2xpZW50X3JwYyhjbG50LCB0YywgJnJjKTsKKwlpZiAoYy0+dGFncG9vbCkKKwkJcDlfaWRwb29sX2Rlc3Ryb3koYy0+dGFncG9vbCk7CisKKwkvKiBmcmVlIHJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCB0YWdzICovCisJZm9yIChyb3cgPSAwOyByb3cgPCAoYy0+bWF4X3RhZy9QOV9ST1dfTUFYVEFHKTsgcm93KyspIHsKKwkJZm9yIChjb2wgPSAwOyBjb2wgPCBQOV9ST1dfTUFYVEFHOyBjb2wrKykgeworCQkJa2ZyZWUoYy0+cmVxc1tyb3ddW2NvbF0ud3EpOworCQkJa2ZyZWUoYy0+cmVxc1tyb3ddW2NvbF0udGMpOworCQkJa2ZyZWUoYy0+cmVxc1tyb3ddW2NvbF0ucmMpOworCQl9CisJCWtmcmVlKGMtPnJlcXNbcm93XSk7CisJfQorCWMtPm1heF90YWcgPSAwOworfQorCisvKioKKyAqIHA5X2ZyZWVfcmVxIC0gZnJlZSBhIHJlcXVlc3QgYW5kIGNsZWFuLXVwIGFzIG5lY2Vzc2FyeQorICogYzogY2xpZW50IHN0YXRlCisgKiByOiByZXF1ZXN0IHRvIHJlbGVhc2UKKyAqCisgKi8KKworc3RhdGljIHZvaWQgcDlfZnJlZV9yZXEoc3RydWN0IHA5X2NsaWVudCAqYywgc3RydWN0IHA5X3JlcV90ICpyKQoreworCWludCB0YWcgPSByLT50Yy0+dGFnOworCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiY2xudCAlcCByZXEgJXAgdGFnOiAlZFxuIiwgYywgciwgdGFnKTsKKworCXItPnN0YXR1cyA9IFJFUV9TVEFUVVNfSURMRTsKKwlpZiAodGFnICE9IFA5X05PVEFHICYmIHA5X2lkcG9vbF9jaGVjayh0YWcsIGMtPnRhZ3Bvb2wpKQorCQlwOV9pZHBvb2xfcHV0KHRhZywgYy0+dGFncG9vbCk7CisKKwkvKiBpZiB0aGlzIHdhcyBhIGZsdXNoIHJlcXVlc3Qgd2UgaGF2ZSB0byBmcmVlIHJlc3BvbnNlIGZjYWxsICovCisJaWYgKHItPnJjLT5pZCA9PSBQOV9SRkxVU0gpIHsKKwkJa2ZyZWUoci0+dGMpOworCQlrZnJlZShyLT5yYyk7CisJfQorfQorCisvKioKKyAqIHA5X2NsaWVudF9jYiAtIGNhbGwgYmFjayBmcm9tIHRyYW5zcG9ydCB0byBjbGllbnQKKyAqIGM6IGNsaWVudCBzdGF0ZQorICogcmVxOiByZXF1ZXN0IHJlY2VpdmVkCisgKgorICovCit2b2lkIHA5X2NsaWVudF9jYihzdHJ1Y3QgcDlfY2xpZW50ICpjLCBzdHJ1Y3QgcDlfcmVxX3QgKnJlcSkKK3sKKwlzdHJ1Y3QgcDlfcmVxX3QgKm90aGVyX3JlcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICIgdGFnICVkXG4iLCByZXEtPnRjLT50YWcpOworCisJaWYgKHJlcS0+c3RhdHVzID09IFJFUV9TVEFUVVNfRVJST1IpCisJCXdha2VfdXAocmVxLT53cSk7CisKKwlpZiAocmVxLT5mbHVzaF90YWcpIHsgCQkJLyogZmx1c2ggcmVjZWl2ZSBwYXRoICovCisJCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUkZMVVNIICVkXG4iLCByZXEtPnRjLT50YWcpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYy0+bG9jaywgZmxhZ3MpOworCQlvdGhlcl9yZXEgPSBwOV90YWdfbG9va3VwKGMsIHJlcS0+Zmx1c2hfdGFnKTsKKwkJaWYgKG90aGVyX3JlcS0+c3RhdHVzICE9IFJFUV9TVEFUVVNfRkxTSCkgLyogc3RhbGUgZmx1c2ggKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPmxvY2ssIGZsYWdzKTsKKwkJZWxzZSB7CisJCQlvdGhlcl9yZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfRkxTSEQ7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjLT5sb2NrLCBmbGFncyk7CisJCQl3YWtlX3VwKG90aGVyX3JlcS0+d3EpOworCQl9CisJCXA5X2ZyZWVfcmVxKGMsIHJlcSk7CisJfSBlbHNlIHsgCQkJCS8qIG5vcm1hbCByZWNlaXZlIHBhdGggKi8KKwkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJub3JtYWw6IHRhZyAlZFxuIiwgcmVxLT50Yy0+dGFnKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmMtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKHJlcS0+c3RhdHVzICE9IFJFUV9TVEFUVVNfRkxTSEQpCisJCQlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfUkNWRDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+bG9jaywgZmxhZ3MpOworCQl3YWtlX3VwKHJlcS0+d3EpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIndha2V1cDogJWRcbiIsIHJlcS0+dGMtPnRhZyk7CisJfQorfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfY2IpOworCisvKioKKyAqIHA5X3BhcnNlX2hlYWRlciAtIHBhcnNlIGhlYWRlciBhcmd1bWVudHMgb3V0IG9mIGEgcGFja2V0CisgKiBAcGR1OiBwYWNrZXQgdG8gcGFyc2UKKyAqIEBzaXplOiBzaXplIG9mIHBhY2tldAorICogQHR5cGU6IHR5cGUgb2YgcmVxdWVzdAorICogQHRhZzogdGFnIG9mIHBhY2tldAorICogQHJld2luZDogc2V0IGlmIHdlIG5lZWQgdG8gcmV3aW5kIG9mZnNldCBhZnRlcndhcmRzCisgKi8KKworaW50CitwOV9wYXJzZV9oZWFkZXIoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludDMyX3QgKnNpemUsIGludDhfdCAqdHlwZSwgaW50MTZfdCAqdGFnLAorCQkJCQkJCQlpbnQgcmV3aW5kKQoreworCWludDhfdCByX3R5cGU7CisJaW50MTZfdCByX3RhZzsKKwlpbnQzMl90IHJfc2l6ZTsKKwlpbnQgb2Zmc2V0ID0gcGR1LT5vZmZzZXQ7CisJaW50IGVycjsKKworCXBkdS0+b2Zmc2V0ID0gMDsKKwlpZiAocGR1LT5zaXplID09IDApCisJCXBkdS0+c2l6ZSA9IDc7CisKKwllcnIgPSBwOXBkdV9yZWFkZihwZHUsIDAsICJkYnciLCAmcl9zaXplLCAmcl90eXBlLCAmcl90YWcpOworCWlmIChlcnIpCisJCWdvdG8gcmV3aW5kX2FuZF9leGl0OworCisJcGR1LT5zaXplID0gcl9zaXplOworCXBkdS0+aWQgPSByX3R5cGU7CisJcGR1LT50YWcgPSByX3RhZzsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgc2l6ZT0lZCB0eXBlOiAlZCB0YWc6ICVkXG4iLCBwZHUtPnNpemUsCisJCQkJCQkJcGR1LT5pZCwgcGR1LT50YWcpOworCisJaWYgKHR5cGUpCisJCSp0eXBlID0gcl90eXBlOworCWlmICh0YWcpCisJCSp0YWcgPSByX3RhZzsKKwlpZiAoc2l6ZSkKKwkJKnNpemUgPSByX3NpemU7CisKKworcmV3aW5kX2FuZF9leGl0OgorCWlmIChyZXdpbmQpCisJCXBkdS0+b2Zmc2V0ID0gb2Zmc2V0OworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHA5X3BhcnNlX2hlYWRlcik7CisKKy8qKgorICogcDlfY2hlY2tfZXJyb3JzIC0gY2hlY2sgOXAgcGFja2V0IGZvciBlcnJvciByZXR1cm4gYW5kIHByb2Nlc3MgaXQKKyAqIEBjOiBjdXJyZW50IGNsaWVudCBpbnN0YW5jZQorICogQHJlcTogcmVxdWVzdCB0byBwYXJzZSBhbmQgY2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMKKyAqCisgKiByZXR1cm5zIGVycm9yIGNvZGUgaWYgb25lIGlzIGRpc2NvdmVyZWQsIG90aGVyd2lzZSByZXR1cm5zIDAKKyAqCisgKiB0aGlzIHdpbGwgaGF2ZSB0byBiZSBtb3JlIGNvbXBsaWNhdGVkIGlmIHdlIGhhdmUgbXVsdGlwbGUKKyAqIGVycm9yIHBhY2tldCB0eXBlcworICovCisKK3N0YXRpYyBpbnQgcDlfY2hlY2tfZXJyb3JzKHN0cnVjdCBwOV9jbGllbnQgKmMsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKQoreworCWludDhfdCB0eXBlOworCWludCBlcnI7CisKKwllcnIgPSBwOV9wYXJzZV9oZWFkZXIocmVxLT5yYywgTlVMTCwgJnR5cGUsIE5VTEwsIDApOwogCWlmIChlcnIpIHsKLQkJaWYgKHJjICYmIHJjLT5pZCA9PSBQOV9SV0FMSykKLQkJCWdvdG8gY2x1bmtfZmlkOwotCQllbHNlCi0JCQlnb3RvIGVycm9yOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiY291bGRuJ3QgcGFyc2UgaGVhZGVyICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmIChyYy0+cGFyYW1zLnJ3YWxrLm53cWlkICE9IG53bmFtZSkgewotCQllcnIgPSAtRU5PRU5UOwotCQlnb3RvIGNsdW5rX2ZpZDsKLQl9CisJaWYgKHR5cGUgPT0gUDlfUkVSUk9SKSB7CisJCWludCBlY29kZTsKKwkJY2hhciAqZW5hbWU7CiAKLQlpZiAobnduYW1lKQotCQltZW1tb3ZlKCZmaWQtPnFpZCwKLQkJCSZyYy0+cGFyYW1zLnJ3YWxrLndxaWRzW3JjLT5wYXJhbXMucndhbGsubndxaWQgLSAxXSwKLQkJCXNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7Ci0JZWxzZQotCQlmaWQtPnFpZCA9IG9sZGZpZC0+cWlkOwotCi0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlyZXR1cm4gZmlkOwotCi1jbHVua19maWQ6Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlyYyA9IE5VTEw7Ci0JdGMgPSBwOV9jcmVhdGVfdGNsdW5rKGZpZC0+ZmlkKTsKLQlpZiAoSVNfRVJSKHRjKSkgewotCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0KLWVycm9yOgotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JaWYgKGZpZCAmJiAoZmlkICE9IG9sZGZpZCkpCi0JCXA5X2ZpZF9kZXN0cm95KGZpZCk7Ci0KLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfd2Fsayk7Ci0KLWludCBwOV9jbGllbnRfb3BlbihzdHJ1Y3QgcDlfZmlkICpmaWQsIGludCBtb2RlKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG1vZGUgJWRcbiIsIGZpZC0+ZmlkLCBtb2RlKTsKLQllcnIgPSAwOwotCXRjID0gTlVMTDsKLQlyYyA9IE5VTEw7Ci0JY2xudCA9IGZpZC0+Y2xudDsKLQotCWlmIChmaWQtPm1vZGUgIT0gLTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdGMgPSBwOV9jcmVhdGVfdG9wZW4oZmlkLT5maWQsIG1vZGUpOwotCWlmIChJU19FUlIodGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOwotCWlmIChlcnIpCi0JCWdvdG8gZG9uZTsKLQotCWZpZC0+bW9kZSA9IG1vZGU7Ci0JZmlkLT5pb3VuaXQgPSByYy0+cGFyYW1zLnJvcGVuLmlvdW5pdDsKLQotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9vcGVuKTsKLQotaW50IHA5X2NsaWVudF9mY3JlYXRlKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqbmFtZSwgdTMyIHBlcm0sIGludCBtb2RlLAotCQkgICAgIGNoYXIgKmV4dGVuc2lvbikKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZCBuYW1lICVzIHBlcm0gJWQgbW9kZSAlZFxuIiwgZmlkLT5maWQsCi0JCW5hbWUsIHBlcm0sIG1vZGUpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OwotCi0JaWYgKGZpZC0+bW9kZSAhPSAtMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0YyA9IHA5X2NyZWF0ZV90Y3JlYXRlKGZpZC0+ZmlkLCBuYW1lLCBwZXJtLCBtb2RlLCBleHRlbnNpb24sCi0JCQkJCQkJICAgICAgIGNsbnQtPmRvdHUpOwotCWlmIChJU19FUlIodGMpKSB7Ci0JCWVyciA9IFBUUl9FUlIodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOwotCWlmIChlcnIpCi0JCWdvdG8gZG9uZTsKLQotCWZpZC0+bW9kZSA9IG1vZGU7Ci0JZmlkLT5pb3VuaXQgPSByYy0+cGFyYW1zLnJvcGVuLmlvdW5pdDsKLQotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9mY3JlYXRlKTsKLQotaW50IHA5X2NsaWVudF9jbHVuayhzdHJ1Y3QgcDlfZmlkICpmaWQpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjLCAqcmM7Ci0Jc3RydWN0IHA5X2NsaWVudCAqY2xudDsKLQotCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICJmaWQgJWRcbiIsIGZpZC0+ZmlkKTsKLQllcnIgPSAwOwotCXRjID0gTlVMTDsKLQlyYyA9IE5VTEw7Ci0JY2xudCA9IGZpZC0+Y2xudDsKLQotCXRjID0gcDlfY3JlYXRlX3RjbHVuayhmaWQtPmZpZCk7Ci0JaWYgKElTX0VSUih0YykpIHsKLQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCXRjID0gTlVMTDsKLQkJZ290byBkb25lOwotCX0KLQotCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JaWYgKGVycikKLQkJZ290byBkb25lOwotCi0JcDlfZmlkX2Rlc3Ryb3koZmlkKTsKLQotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9jbHVuayk7Ci0KLWludCBwOV9jbGllbnRfcmVtb3ZlKHN0cnVjdCBwOV9maWQgKmZpZCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZFxuIiwgZmlkLT5maWQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OwotCi0JdGMgPSBwOV9jcmVhdGVfdHJlbW92ZShmaWQtPmZpZCk7Ci0JaWYgKElTX0VSUih0YykpIHsKLQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCXRjID0gTlVMTDsKLQkJZ290byBkb25lOwotCX0KLQotCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JaWYgKGVycikKLQkJZ290byBkb25lOwotCi0JcDlfZmlkX2Rlc3Ryb3koZmlkKTsKLQotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9yZW1vdmUpOwotCi1pbnQgcDlfY2xpZW50X3JlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCB1NjQgb2Zmc2V0LCB1MzIgY291bnQpCi17Ci0JaW50IGVyciwgbiwgcnNpemUsIHRvdGFsOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZCBvZmZzZXQgJWxsdSAlZFxuIiwgZmlkLT5maWQsCi0JCQkJCShsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCwgY291bnQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OwotCXRvdGFsID0gMDsKLQotCXJzaXplID0gZmlkLT5pb3VuaXQ7Ci0JaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IGNsbnQtPm1zaXplLVA5X0lPSERSU1opCi0JCXJzaXplID0gY2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOwotCi0JZG8gewotCQlpZiAoY291bnQgPCByc2l6ZSkKLQkJCXJzaXplID0gY291bnQ7Ci0KLQkJdGMgPSBwOV9jcmVhdGVfdHJlYWQoZmlkLT5maWQsIG9mZnNldCwgcnNpemUpOwotCQlpZiAoSVNfRVJSKHRjKSkgewotCQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCQl0YyA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJZXJyID0gcDlfY2xpZW50X3JwYyhjbG50LCB0YywgJnJjKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyb3I7Ci0KLQkJbiA9IHJjLT5wYXJhbXMucnJlYWQuY291bnQ7Ci0JCWlmIChuID4gY291bnQpCi0JCQluID0gY291bnQ7Ci0KLQkJbWVtbW92ZShkYXRhLCByYy0+cGFyYW1zLnJyZWFkLmRhdGEsIG4pOwotCQljb3VudCAtPSBuOwotCQlkYXRhICs9IG47Ci0JCW9mZnNldCArPSBuOwotCQl0b3RhbCArPSBuOwotCQlrZnJlZSh0Yyk7Ci0JCXRjID0gTlVMTDsKLQkJa2ZyZWUocmMpOwotCQlyYyA9IE5VTEw7Ci0JfSB3aGlsZSAoY291bnQgPiAwICYmIG4gPT0gcnNpemUpOwotCi0JcmV0dXJuIHRvdGFsOwotCi1lcnJvcjoKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9yZWFkKTsKLQotaW50IHA5X2NsaWVudF93cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCkKLXsKLQlpbnQgZXJyLCBuLCByc2l6ZSwgdG90YWw7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG9mZnNldCAlbGx1IGNvdW50ICVkXG4iLCBmaWQtPmZpZCwKLQkJCQkJKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCWNsbnQgPSBmaWQtPmNsbnQ7Ci0JdG90YWwgPSAwOwotCi0JcnNpemUgPSBmaWQtPmlvdW5pdDsKLQlpZiAoIXJzaXplIHx8IHJzaXplID4gY2xudC0+bXNpemUtUDlfSU9IRFJTWikKLQkJcnNpemUgPSBjbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7Ci0KLQlkbyB7Ci0JCWlmIChjb3VudCA8IHJzaXplKQotCQkJcnNpemUgPSBjb3VudDsKLQotCQl0YyA9IHA5X2NyZWF0ZV90d3JpdGUoZmlkLT5maWQsIG9mZnNldCwgcnNpemUsIGRhdGEpOwotCQlpZiAoSVNfRVJSKHRjKSkgewotCQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCQl0YyA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJZXJyID0gcDlfY2xpZW50X3JwYyhjbG50LCB0YywgJnJjKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyb3I7Ci0KLQkJbiA9IHJjLT5wYXJhbXMucnJlYWQuY291bnQ7Ci0JCWNvdW50IC09IG47Ci0JCWRhdGEgKz0gbjsKLQkJb2Zmc2V0ICs9IG47Ci0JCXRvdGFsICs9IG47Ci0JCWtmcmVlKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlrZnJlZShyYyk7Ci0JCXJjID0gTlVMTDsKLQl9IHdoaWxlIChjb3VudCA+IDApOwotCi0JcmV0dXJuIHRvdGFsOwotCi1lcnJvcjoKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF93cml0ZSk7Ci0KLWludAotcDlfY2xpZW50X3VyZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciBfX3VzZXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCkKLXsKLQlpbnQgZXJyLCBuLCByc2l6ZSwgdG90YWw7Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG9mZnNldCAlbGx1IGNvdW50ICVkXG4iLCBmaWQtPmZpZCwKLQkJCQkJKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCWNsbnQgPSBmaWQtPmNsbnQ7Ci0JdG90YWwgPSAwOwotCi0JcnNpemUgPSBmaWQtPmlvdW5pdDsKLQlpZiAoIXJzaXplIHx8IHJzaXplID4gY2xudC0+bXNpemUtUDlfSU9IRFJTWikKLQkJcnNpemUgPSBjbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7Ci0KLQlkbyB7Ci0JCWlmIChjb3VudCA8IHJzaXplKQotCQkJcnNpemUgPSBjb3VudDsKLQotCQl0YyA9IHA5X2NyZWF0ZV90cmVhZChmaWQtPmZpZCwgb2Zmc2V0LCByc2l6ZSk7Ci0JCWlmIChJU19FUlIodGMpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJCXRjID0gTlVMTDsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJvcjsKLQotCQluID0gcmMtPnBhcmFtcy5ycmVhZC5jb3VudDsKLQkJaWYgKG4gPiBjb3VudCkKLQkJCW4gPSBjb3VudDsKLQotCQllcnIgPSBjb3B5X3RvX3VzZXIoZGF0YSwgcmMtPnBhcmFtcy5ycmVhZC5kYXRhLCBuKTsKKwkJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgYy0+ZG90dSwgInM/ZCIsICZlbmFtZSwgJmVjb2RlKTsKIAkJaWYgKGVycikgewotCQkJZXJyID0gLUVGQVVMVDsKLQkJCWdvdG8gZXJyb3I7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiY291bGRuJ3QgcGFyc2UgZXJyb3IlZFxuIiwKKwkJCQkJCQkJCWVycik7CisJCQlyZXR1cm4gZXJyOwogCQl9CiAKLQkJY291bnQgLT0gbjsKLQkJZGF0YSArPSBuOwotCQlvZmZzZXQgKz0gbjsKLQkJdG90YWwgKz0gbjsKLQkJa2ZyZWUodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWtmcmVlKHJjKTsKLQkJcmMgPSBOVUxMOwotCX0gd2hpbGUgKGNvdW50ID4gMCAmJiBuID09IHJzaXplKTsKKwkJaWYgKGMtPmRvdHUpCisJCQllcnIgPSAtZWNvZGU7CiAKLQlyZXR1cm4gdG90YWw7CisJCWlmICghZXJyKSB7CisJCQllcnIgPSBwOV9lcnJzdHIyZXJybm8oZW5hbWUsIHN0cmxlbihlbmFtZSkpOwogCi1lcnJvcjoKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF91cmVhZCk7Ci0KLWludAotcDlfY2xpZW50X3V3cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLCB1NjQgb2Zmc2V0LAotCQkJCQkJCQkgICB1MzIgY291bnQpCi17Ci0JaW50IGVyciwgbiwgcnNpemUsIHRvdGFsOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZCBvZmZzZXQgJWxsdSBjb3VudCAlZFxuIiwgZmlkLT5maWQsCi0JCQkJCShsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCwgY291bnQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OwotCXRvdGFsID0gMDsKLQotCXJzaXplID0gZmlkLT5pb3VuaXQ7Ci0JaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IGNsbnQtPm1zaXplLVA5X0lPSERSU1opCi0JCXJzaXplID0gY2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOwotCi0JZG8gewotCQlpZiAoY291bnQgPCByc2l6ZSkKLQkJCXJzaXplID0gY291bnQ7Ci0KLQkJdGMgPSBwOV9jcmVhdGVfdHdyaXRlX3UoZmlkLT5maWQsIG9mZnNldCwgcnNpemUsIGRhdGEpOwotCQlpZiAoSVNfRVJSKHRjKSkgewotCQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCQl0YyA9IE5VTEw7Ci0JCQlnb3RvIGVycm9yOworCQkJLyogc3RyaW5nIG1hdGNoIGZhaWxlZCAqLworCQkJaWYgKCFlcnIpCisJCQkJZXJyID0gLUVTRVJWRVJGQVVMVDsKIAkJfQogCi0JCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycm9yOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJFUlJPUiAoJWQpICVzXG4iLCAtZWNvZGUsIGVuYW1lKTsKIAotCQluID0gcmMtPnBhcmFtcy5ycmVhZC5jb3VudDsKLQkJY291bnQgLT0gbjsKLQkJZGF0YSArPSBuOwotCQlvZmZzZXQgKz0gbjsKLQkJdG90YWwgKz0gbjsKLQkJa2ZyZWUodGMpOwotCQl0YyA9IE5VTEw7Ci0JCWtmcmVlKHJjKTsKLQkJcmMgPSBOVUxMOwotCX0gd2hpbGUgKGNvdW50ID4gMCk7CisJCWtmcmVlKGVuYW1lKTsKKwl9IGVsc2UKKwkJZXJyID0gMDsKIAotCXJldHVybiB0b3RhbDsKLQotZXJyb3I6Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKIAlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfdXdyaXRlKTsKIAotaW50IHA5X2NsaWVudF9yZWFkbihzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCkKKy8qKgorICogcDlfY2xpZW50X2ZsdXNoIC0gZmx1c2ggKGNhbmNlbCkgYSByZXF1ZXN0CisgKiBjOiBjbGllbnQgc3RhdGUKKyAqIHJlcTogcmVxdWVzdCB0byBjYW5jZWwKKyAqCisgKiBUaGlzIHNlbnRzIGEgZmx1c2ggZm9yIGEgcGFydGljdWxhciByZXF1ZXN0cyBhbmQgbGlua3MKKyAqIHRoZSBmbHVzaCByZXF1ZXN0IHRvIHRoZSBvcmlnaW5hbCByZXF1ZXN0LiAgVGhlIGN1cnJlbnQKKyAqIGNvZGUgb25seSBzdXBwb3J0cyBhIHNpbmdsZSBmbHVzaCByZXF1ZXN0IGFsdGhvdWdoIHRoZSBwcm90b2NvbAorICogYWxsb3dzIGZvciBtdWx0aXBsZSBmbHVzaCByZXF1ZXN0cyB0byBiZSBzZW50IGZvciBhIHNpbmdsZSByZXF1ZXN0LgorICoKKyAqLworCitzdGF0aWMgaW50IHA5X2NsaWVudF9mbHVzaChzdHJ1Y3QgcDlfY2xpZW50ICpjLCBzdHJ1Y3QgcDlfcmVxX3QgKm9sZHJlcSkKIHsKLQlpbnQgbiwgdG90YWw7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG9mZnNldCAlbGx1IGNvdW50ICVkXG4iLCBmaWQtPmZpZCwKLQkJCQkJKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7Ci0JbiA9IDA7Ci0JdG90YWwgPSAwOwotCXdoaWxlIChjb3VudCkgewotCQluID0gcDlfY2xpZW50X3JlYWQoZmlkLCBkYXRhLCBvZmZzZXQsIGNvdW50KTsKLQkJaWYgKG4gPD0gMCkKLQkJCWJyZWFrOwotCi0JCWRhdGEgKz0gbjsKLQkJb2Zmc2V0ICs9IG47Ci0JCWNvdW50IC09IG47Ci0JCXRvdGFsICs9IG47Ci0JfQotCi0JaWYgKG4gPCAwKQotCQl0b3RhbCA9IG47Ci0KLQlyZXR1cm4gdG90YWw7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9yZWFkbik7Ci0KLXN0cnVjdCBwOV9zdGF0ICpwOV9jbGllbnRfc3RhdChzdHJ1Y3QgcDlfZmlkICpmaWQpCi17CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CisJaW50MTZfdCBvbGR0YWc7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjLCAqcmM7Ci0Jc3RydWN0IHA5X2NsaWVudCAqY2xudDsKLQlzdHJ1Y3QgcDlfc3RhdCAqcmV0OwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZFxuIiwgZmlkLT5maWQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQlyZXQgPSBOVUxMOwotCWNsbnQgPSBmaWQtPmNsbnQ7Ci0KLQl0YyA9IHA5X2NyZWF0ZV90c3RhdChmaWQtPmZpZCk7Ci0JaWYgKElTX0VSUih0YykpIHsKLQkJZXJyID0gUFRSX0VSUih0Yyk7Ci0JCXRjID0gTlVMTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOworCWVyciA9IHA5X3BhcnNlX2hlYWRlcihvbGRyZXEtPnRjLCBOVUxMLCBOVUxMLCAmb2xkdGFnLCAxKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycm9yOworCQlyZXR1cm4gZXJyOwogCi0JcmV0ID0gcDlfY2xvbmVfc3RhdCgmcmMtPnBhcmFtcy5yc3RhdC5zdGF0LCBjbG50LT5kb3R1KTsKLQlpZiAoSVNfRVJSKHJldCkpIHsKLQkJZXJyID0gUFRSX0VSUihyZXQpOwotCQlyZXQgPSBOVUxMOwotCQlnb3RvIGVycm9yOwotCX0KKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRGTFVTSCB0YWcgJWRcbiIsIG9sZHRhZyk7CiAKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiByZXQ7CisJcmVxID0gcDlfY2xpZW50X3JwYyhjLCBQOV9URkxVU0gsICJ3Iiwgb2xkdGFnKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CiAKLWVycm9yOgotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0Ja2ZyZWUocmV0KTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOworCXJlcS0+Zmx1c2hfdGFnID0gb2xkdGFnOworCisJLyogd2UgZG9uJ3QgZnJlZSBhbnl0aGluZyBoZXJlIGJlY2F1c2UgUlBDIGlzbid0IGNvbXBsZXRlICovCisJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9zdGF0KTsKIAotaW50IHA5X2NsaWVudF93c3RhdChzdHJ1Y3QgcDlfZmlkICpmaWQsIHN0cnVjdCBwOV93c3RhdCAqd3N0KQorLyoqCisgKiBwOV9jbGllbnRfcnBjIC0gaXNzdWUgYSByZXF1ZXN0IGFuZCB3YWl0IGZvciBhIHJlc3BvbnNlCisgKiBAYzogY2xpZW50IHNlc3Npb24KKyAqIEB0eXBlOiB0eXBlIG9mIHJlcXVlc3QKKyAqIEBmbXQ6IHByb3RvY29sIGZvcm1hdCBzdHJpbmcgKHNlZSBwcm90b2NvbC5jKQorICoKKyAqIFJldHVybnMgcmVxdWVzdCBzdHJ1Y3R1cmUgKHdoaWNoIGNsaWVudCBtdXN0IGZyZWUgdXNpbmcgcDlfZnJlZV9yZXEpCisgKi8KKworc3RhdGljIHN0cnVjdCBwOV9yZXFfdCAqCitwOV9jbGllbnRfcnBjKHN0cnVjdCBwOV9jbGllbnQgKmMsIGludDhfdCB0eXBlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqdGMsICpyYzsKLQlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCXZhX2xpc3QgYXA7CisJaW50IHRhZywgZXJyOworCXN0cnVjdCBwOV9yZXFfdCAqcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHNpZ3BlbmRpbmc7CisJaW50IGZsdXNoZWQgPSAwOwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZFxuIiwgZmlkLT5maWQpOwotCWVyciA9IDA7Ci0JdGMgPSBOVUxMOwotCXJjID0gTlVMTDsKLQljbG50ID0gZmlkLT5jbG50OworCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiY2xpZW50ICVwIG9wICVkXG4iLCBjLCB0eXBlKTsKIAotCXRjID0gcDlfY3JlYXRlX3R3c3RhdChmaWQtPmZpZCwgd3N0LCBjbG50LT5kb3R1KTsKLQlpZiAoSVNfRVJSKHRjKSkgewotCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJdGMgPSBOVUxMOwotCQlnb3RvIGRvbmU7CisJaWYgKGMtPnN0YXR1cyAhPSBDb25uZWN0ZWQpCisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCXNpZ3BlbmRpbmcgPSAxOworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CisJfSBlbHNlCisJCXNpZ3BlbmRpbmcgPSAwOworCisJdGFnID0gUDlfTk9UQUc7CisJaWYgKHR5cGUgIT0gUDlfVFZFUlNJT04pIHsKKwkJdGFnID0gcDlfaWRwb29sX2dldChjLT50YWdwb29sKTsKKwkJaWYgKHRhZyA8IDApCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKLQllcnIgPSBwOV9jbGllbnRfcnBjKGNsbnQsIHRjLCAmcmMpOworCXJlcSA9IHA5X3RhZ19hbGxvYyhjLCB0YWcpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIHJlcTsKIAotZG9uZToKLQlrZnJlZSh0Yyk7Ci0Ja2ZyZWUocmMpOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NsaWVudF93c3RhdCk7CisJLyogbWFyc2hhbGwgdGhlIGRhdGEgKi8KKwlwOXBkdV9wcmVwYXJlKHJlcS0+dGMsIHRhZywgdHlwZSk7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJZXJyID0gcDlwZHVfdndyaXRlZihyZXEtPnRjLCBjLT5kb3R1LCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXA5cGR1X2ZpbmFsaXplKHJlcS0+dGMpOwogCi1zdHJ1Y3QgcDlfc3RhdCAqcDlfY2xpZW50X2RpcnJlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCB1NjQgb2Zmc2V0KQotewotCWludCBlcnIsIG4sIG07Ci0Jc3RydWN0IHA5X2ZjYWxsICp0YywgKnJjOwotCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7Ci0Jc3RydWN0IHA5X3N0YXQgc3QsICpyZXQ7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiZmlkICVkIG9mZnNldCAlbGx1XG4iLCBmaWQtPmZpZCwKLQkJCQkJCShsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCk7Ci0JZXJyID0gMDsKLQl0YyA9IE5VTEw7Ci0JcmMgPSBOVUxMOwotCXJldCA9IE5VTEw7Ci0JY2xudCA9IGZpZC0+Y2xudDsKLQotCS8qIGlmIHRoZSBvZmZzZXQgaXMgYmVsb3cgb3IgYWJvdmUgdGhlIGN1cnJlbnQgcmVzcG9uc2UsIGZyZWUgaXQgKi8KLQlpZiAob2Zmc2V0IDwgZmlkLT5yZGlyX2Zwb3MgfHwgKGZpZC0+cmRpcl9mY2FsbCAmJgotCQlvZmZzZXQgPj0gZmlkLT5yZGlyX2Zwb3MrZmlkLT5yZGlyX2ZjYWxsLT5wYXJhbXMucnJlYWQuY291bnQpKSB7Ci0JCWZpZC0+cmRpcl9wb3MgPSAwOwotCQlpZiAoZmlkLT5yZGlyX2ZjYWxsKQotCQkJZmlkLT5yZGlyX2Zwb3MgKz0gZmlkLT5yZGlyX2ZjYWxsLT5wYXJhbXMucnJlYWQuY291bnQ7Ci0KLQkJa2ZyZWUoZmlkLT5yZGlyX2ZjYWxsKTsKLQkJZmlkLT5yZGlyX2ZjYWxsID0gTlVMTDsKLQkJaWYgKG9mZnNldCA8IGZpZC0+cmRpcl9mcG9zKQotCQkJZmlkLT5yZGlyX2Zwb3MgPSAwOworCWVyciA9IGMtPnRyYW5zX21vZC0+cmVxdWVzdChjLCByZXEpOworCWlmIChlcnIgPCAwKSB7CisJCWMtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKKwkJZ290byByZXRlcnI7CiAJfQogCi0JaWYgKCFmaWQtPnJkaXJfZmNhbGwpIHsKLQkJbiA9IGZpZC0+aW91bml0OwotCQlpZiAoIW4gfHwgbiA+IGNsbnQtPm1zaXplLVA5X0lPSERSU1opCi0JCQluID0gY2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOworCS8qIGlmIGl0IHdhcyBhIGZsdXNoIHdlIGp1c3QgdHJhbnNtaXR0ZWQsIHJldHVybiBvdXIgdGFnICovCisJaWYgKHR5cGUgPT0gUDlfVEZMVVNIKQorCQlyZXR1cm4gcmVxOworYWdhaW46CisJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJ3YWl0ICVwIHRhZzogJWRcbiIsIHJlcS0+d3EsIHRhZyk7CisJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCpyZXEtPndxLAorCQkJCQkJcmVxLT5zdGF0dXMgPj0gUkVRX1NUQVRVU19SQ1ZEKTsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIndhaXQgJXAgdGFnOiAlZCByZXR1cm5lZCAlZCAoZmx1c2hlZD0lZClcbiIsCisJCQkJCQlyZXEtPndxLCB0YWcsIGVyciwgZmx1c2hlZCk7CiAKLQkJd2hpbGUgKDEpIHsKLQkJCWlmIChmaWQtPnJkaXJfZmNhbGwpIHsKLQkJCQlmaWQtPnJkaXJfZnBvcyArPQotCQkJCQlmaWQtPnJkaXJfZmNhbGwtPnBhcmFtcy5ycmVhZC5jb3VudDsKLQkJCQlrZnJlZShmaWQtPnJkaXJfZmNhbGwpOwotCQkJCWZpZC0+cmRpcl9mY2FsbCA9IE5VTEw7Ci0JCQl9CisJaWYgKHJlcS0+c3RhdHVzID09IFJFUV9TVEFUVVNfRVJST1IpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgInJlcV9zdGF0dXMgZXJyb3IgJWRcbiIsIHJlcS0+dF9lcnIpOworCQllcnIgPSByZXEtPnRfZXJyOworCX0gZWxzZSBpZiAoZXJyID09IC1FUkVTVEFSVFNZUyAmJiBmbHVzaGVkKSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZmx1c2hlZCAtIGdvaW5nIGFnYWluXG4iKTsKKwkJZ290byBhZ2FpbjsKKwl9IGVsc2UgaWYgKHJlcS0+c3RhdHVzID09IFJFUV9TVEFUVVNfRkxTSEQpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJmbHVzaGVkIC0gZXJlc3RhcnRzeXNcbiIpOworCQllcnIgPSAtRVJFU1RBUlRTWVM7CisJfQogCi0JCQl0YyA9IHA5X2NyZWF0ZV90cmVhZChmaWQtPmZpZCwgZmlkLT5yZGlyX2Zwb3MsIG4pOwotCQkJaWYgKElTX0VSUih0YykpIHsKLQkJCQllcnIgPSBQVFJfRVJSKHRjKTsKLQkJCQl0YyA9IE5VTEw7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KKwlpZiAoKGVyciA9PSAtRVJFU1RBUlRTWVMpICYmIChjLT5zdGF0dXMgPT0gQ29ubmVjdGVkKSAmJiAoIWZsdXNoZWQpKSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZmx1c2hpbmdcbiIpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYy0+bG9jaywgZmxhZ3MpOworCQlpZiAocmVxLT5zdGF0dXMgPT0gUkVRX1NUQVRVU19TRU5UKQorCQkJcmVxLT5zdGF0dXMgPSBSRVFfU1RBVFVTX0ZMU0g7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPmxvY2ssIGZsYWdzKTsKKwkJc2lncGVuZGluZyA9IDE7CisJCWZsdXNoZWQgPSAxOworCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CiAKLQkJCWVyciA9IHA5X2NsaWVudF9ycGMoY2xudCwgdGMsICZyYyk7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gZXJyb3I7Ci0KLQkJCW4gPSByYy0+cGFyYW1zLnJyZWFkLmNvdW50OwotCQkJaWYgKG4gPT0gMCkKLQkJCQlnb3RvIGRvbmU7Ci0KLQkJCWZpZC0+cmRpcl9mY2FsbCA9IHJjOwotCQkJcmMgPSBOVUxMOwotCQkJaWYgKG9mZnNldCA+PSBmaWQtPnJkaXJfZnBvcyAmJgotCQkJCQkJb2Zmc2V0IDwgZmlkLT5yZGlyX2Zwb3MrbikKLQkJCQlicmVhazsKKwkJaWYgKGMtPnRyYW5zX21vZC0+Y2FuY2VsKGMsIHJlcSkpIHsKKwkJCWVyciA9IHA5X2NsaWVudF9mbHVzaChjLCByZXEpOworCQkJaWYgKGVyciA9PSAwKQorCQkJCWdvdG8gYWdhaW47CiAJCX0KLQotCQlmaWQtPnJkaXJfcG9zID0gMDsKIAl9CiAKLQltID0gb2Zmc2V0IC0gZmlkLT5yZGlyX2Zwb3M7Ci0JaWYgKG0gPCAwKQotCQlnb3RvIGRvbmU7Ci0KLQluID0gcDlfZGVzZXJpYWxpemVfc3RhdChmaWQtPnJkaXJfZmNhbGwtPnBhcmFtcy5ycmVhZC5kYXRhICsgbSwKLQkJZmlkLT5yZGlyX2ZjYWxsLT5wYXJhbXMucnJlYWQuY291bnQgLSBtLCAmc3QsIGNsbnQtPmRvdHUpOwotCi0JaWYgKCFuKSB7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJaWYgKHNpZ3BlbmRpbmcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwogCX0KIAotCWZpZC0+cmRpcl9wb3MgKz0gbjsKLQlzdC5zaXplID0gbjsKLQlyZXQgPSBwOV9jbG9uZV9zdGF0KCZzdCwgY2xudC0+ZG90dSk7Ci0JaWYgKElTX0VSUihyZXQpKSB7Ci0JCWVyciA9IFBUUl9FUlIocmV0KTsKLQkJcmV0ID0gTlVMTDsKLQkJZ290byBlcnJvcjsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byByZXRlcnI7CisKKwllcnIgPSBwOV9jaGVja19lcnJvcnMoYywgcmVxKTsKKwlpZiAoIWVycikgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImV4aXQ6IGNsaWVudCAlcCBvcCAlZFxuIiwgYywgdHlwZSk7CisJCXJldHVybiByZXE7CiAJfQogCi1kb25lOgotCWtmcmVlKHRjKTsKLQlrZnJlZShyYyk7Ci0JcmV0dXJuIHJldDsKLQotZXJyb3I6Ci0Ja2ZyZWUodGMpOwotCWtmcmVlKHJjKTsKLQlrZnJlZShyZXQpOworcmV0ZXJyOgorCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZXhpdDogY2xpZW50ICVwIG9wICVkIGVycm9yOiAlZFxuIiwgYywgdHlwZSwKKwkJCQkJCQkJCWVycik7CisJcDlfZnJlZV9yZXEoYywgcmVxKTsKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQotRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfZGlycmVhZCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcDlfc3RhdCAqcDlfY2xvbmVfc3RhdChzdHJ1Y3QgcDlfc3RhdCAqc3QsIGludCBkb3R1KQotewotCWludCBuOwotCWNoYXIgKnA7Ci0Jc3RydWN0IHA5X3N0YXQgKnJldDsKLQotCW4gPSBzaXplb2Yoc3RydWN0IHA5X3N0YXQpICsgc3QtPm5hbWUubGVuICsgc3QtPnVpZC5sZW4gKyBzdC0+Z2lkLmxlbiArCi0JCXN0LT5tdWlkLmxlbjsKLQotCWlmIChkb3R1KQotCQluICs9IHN0LT5leHRlbnNpb24ubGVuOwotCi0JcmV0ID0ga21hbGxvYyhuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQltZW1tb3ZlKHJldCwgc3QsIHNpemVvZihzdHJ1Y3QgcDlfc3RhdCkpOwotCXAgPSAoKGNoYXIgKikgcmV0KSArIHNpemVvZihzdHJ1Y3QgcDlfc3RhdCk7Ci0JbWVtbW92ZShwLCBzdC0+bmFtZS5zdHIsIHN0LT5uYW1lLmxlbik7Ci0JcmV0LT5uYW1lLnN0ciA9IHA7Ci0JcCArPSBzdC0+bmFtZS5sZW47Ci0JbWVtbW92ZShwLCBzdC0+dWlkLnN0ciwgc3QtPnVpZC5sZW4pOwotCXJldC0+dWlkLnN0ciA9IHA7Ci0JcCArPSBzdC0+dWlkLmxlbjsKLQltZW1tb3ZlKHAsIHN0LT5naWQuc3RyLCBzdC0+Z2lkLmxlbik7Ci0JcmV0LT5naWQuc3RyID0gcDsKLQlwICs9IHN0LT5naWQubGVuOwotCW1lbW1vdmUocCwgc3QtPm11aWQuc3RyLCBzdC0+bXVpZC5sZW4pOwotCXJldC0+bXVpZC5zdHIgPSBwOwotCXAgKz0gc3QtPm11aWQubGVuOwotCi0JaWYgKGRvdHUpIHsKLQkJbWVtbW92ZShwLCBzdC0+ZXh0ZW5zaW9uLnN0ciwgc3QtPmV4dGVuc2lvbi5sZW4pOwotCQlyZXQtPmV4dGVuc2lvbi5zdHIgPSBwOwotCQlwICs9IHN0LT5leHRlbnNpb24ubGVuOwotCX0KLQotCXJldHVybiByZXQ7Ci19CiAKIHN0YXRpYyBzdHJ1Y3QgcDlfZmlkICpwOV9maWRfY3JlYXRlKHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CiAKLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiY2xudCAlcFxuIiwgY2xudCk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19GSUQsICJjbG50ICVwXG4iLCBjbG50KTsKIAlmaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmlkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaWQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMTA1Myw4ICs2MjcsNiBAQAogCW1lbXNldCgmZmlkLT5xaWQsIDAsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7CiAJZmlkLT5tb2RlID0gLTE7CiAJZmlkLT5yZGlyX2Zwb3MgPSAwOwotCWZpZC0+cmRpcl9wb3MgPSAwOwotCWZpZC0+cmRpcl9mY2FsbCA9IE5VTEw7CiAJZmlkLT51aWQgPSBjdXJyZW50LT5mc3VpZDsKIAlmaWQtPmNsbnQgPSBjbG50OwogCWZpZC0+YXV4ID0gTlVMTDsKQEAgLTEwNzQsMTIgKzY0Niw2MzEgQEAKIHsKIAlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZFxuIiwgZmlkLT5maWQpOworCVA5X0RQUklOVEsoUDlfREVCVUdfRklELCAiZmlkICVkXG4iLCBmaWQtPmZpZCk7CiAJY2xudCA9IGZpZC0+Y2xudDsKIAlwOV9pZHBvb2xfcHV0KGZpZC0+ZmlkLCBjbG50LT5maWRwb29sKTsKIAlzcGluX2xvY2soJmNsbnQtPmxvY2spOwogCWxpc3RfZGVsKCZmaWQtPmZsaXN0KTsKIAlzcGluX3VubG9jaygmY2xudC0+bG9jayk7Ci0Ja2ZyZWUoZmlkLT5yZGlyX2ZjYWxsKTsKIAlrZnJlZShmaWQpOwogfQorCitpbnQgcDlfY2xpZW50X3ZlcnNpb24oc3RydWN0IHA5X2NsaWVudCAqYykKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwljaGFyICp2ZXJzaW9uOworCWludCBtc2l6ZTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI+Pj4gVFZFUlNJT04gbXNpemUgJWQgZXh0ZW5kZWQgJWRcbiIsCisJCQkJCQkJYy0+bXNpemUsIGMtPmRvdHUpOworCXJlcSA9IHA5X2NsaWVudF9ycGMoYywgUDlfVFZFUlNJT04sICJkcyIsIGMtPm1zaXplLAorCQkJCWMtPmRvdHUgPyAiOVAyMDAwLnUiIDogIjlQMjAwMCIpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKKworCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGMtPmRvdHUsICJkcyIsICZtc2l6ZSwgJnZlcnNpb24pOworCWlmIChlcnIpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgInZlcnNpb24gZXJyb3IgJWRcbiIsIGVycik7CisJCXA5cGR1X2R1bXAoMSwgcmVxLT5yYyk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBSVkVSU0lPTiBtc2l6ZSAlZCAlc1xuIiwgbXNpemUsIHZlcnNpb24pOworCWlmICghbWVtY21wKHZlcnNpb24sICI5UDIwMDAudSIsIDgpKQorCQljLT5kb3R1ID0gMTsKKwllbHNlIGlmICghbWVtY21wKHZlcnNpb24sICI5UDIwMDAiLCA2KSkKKwkJYy0+ZG90dSA9IDA7CisJZWxzZSB7CisJCWVyciA9IC1FUkVNT1RFSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKG1zaXplIDwgYy0+bXNpemUpCisJCWMtPm1zaXplID0gbXNpemU7CisKK2Vycm9yOgorCWtmcmVlKHZlcnNpb24pOworCXA5X2ZyZWVfcmVxKGMsIHJlcSk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfdmVyc2lvbik7CisKK3N0cnVjdCBwOV9jbGllbnQgKnA5X2NsaWVudF9jcmVhdGUoY29uc3QgY2hhciAqZGV2X25hbWUsIGNoYXIgKm9wdGlvbnMpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCisJZXJyID0gMDsKKwljbG50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmICghY2xudCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwljbG50LT50cmFuc19tb2QgPSBOVUxMOworCWNsbnQtPnRyYW5zID0gTlVMTDsKKwlzcGluX2xvY2tfaW5pdCgmY2xudC0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmNsbnQtPmZpZGxpc3QpOworCWNsbnQtPmZpZHBvb2wgPSBwOV9pZHBvb2xfY3JlYXRlKCk7CisJaWYgKElTX0VSUihjbG50LT5maWRwb29sKSkgeworCQllcnIgPSBQVFJfRVJSKGNsbnQtPmZpZHBvb2wpOworCQljbG50LT5maWRwb29sID0gTlVMTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwOV90YWdfaW5pdChjbG50KTsKKworCWVyciA9IHBhcnNlX29wdHMob3B0aW9ucywgY2xudCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoY2xudC0+dHJhbnNfbW9kID09IE5VTEwpIHsKKwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKKwkJCQkiTm8gdHJhbnNwb3J0IGRlZmluZWQgb3IgZGVmYXVsdCB0cmFuc3BvcnRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiY2xudCAlcCB0cmFucyAlcCBtc2l6ZSAlZCBkb3R1ICVkXG4iLAorCQljbG50LCBjbG50LT50cmFuc19tb2QsIGNsbnQtPm1zaXplLCBjbG50LT5kb3R1KTsKKworCWVyciA9IGNsbnQtPnRyYW5zX21vZC0+Y3JlYXRlKGNsbnQsIGRldl9uYW1lLCBvcHRpb25zKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJaWYgKChjbG50LT5tc2l6ZStQOV9JT0hEUlNaKSA+IGNsbnQtPnRyYW5zX21vZC0+bWF4c2l6ZSkKKwkJY2xudC0+bXNpemUgPSBjbG50LT50cmFuc19tb2QtPm1heHNpemUtUDlfSU9IRFJTWjsKKworCWVyciA9IHA5X2NsaWVudF92ZXJzaW9uKGNsbnQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwlyZXR1cm4gY2xudDsKKworZXJyb3I6CisJcDlfY2xpZW50X2Rlc3Ryb3koY2xudCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X2NyZWF0ZSk7CisKK3ZvaWQgcDlfY2xpZW50X2Rlc3Ryb3koc3RydWN0IHA5X2NsaWVudCAqY2xudCkKK3sKKwlzdHJ1Y3QgcDlfZmlkICpmaWQsICpmaWRwdHI7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImNsbnQgJXBcbiIsIGNsbnQpOworCisJaWYgKGNsbnQtPnRyYW5zX21vZCkKKwkJY2xudC0+dHJhbnNfbW9kLT5jbG9zZShjbG50KTsKKworCXY5ZnNfcHV0X3RyYW5zKGNsbnQtPnRyYW5zX21vZCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlkLCBmaWRwdHIsICZjbG50LT5maWRsaXN0LCBmbGlzdCkKKwkJcDlfZmlkX2Rlc3Ryb3koZmlkKTsKKworCWlmIChjbG50LT5maWRwb29sKQorCQlwOV9pZHBvb2xfZGVzdHJveShjbG50LT5maWRwb29sKTsKKworCXA5X3RhZ19jbGVhbnVwKGNsbnQpOworCisJa2ZyZWUoY2xudCk7Cit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9kZXN0cm95KTsKKwordm9pZCBwOV9jbGllbnRfZGlzY29ubmVjdChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50KQoreworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICJjbG50ICVwXG4iLCBjbG50KTsKKwljbG50LT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7Cit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9kaXNjb25uZWN0KTsKKworc3RydWN0IHA5X2ZpZCAqcDlfY2xpZW50X2F0dGFjaChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50LCBzdHJ1Y3QgcDlfZmlkICphZmlkLAorCWNoYXIgKnVuYW1lLCB1MzIgbl91bmFtZSwgY2hhciAqYW5hbWUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisJc3RydWN0IHA5X3FpZCBxaWQ7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRBVFRBQ0ggYWZpZCAlZCB1bmFtZSAlcyBhbmFtZSAlc1xuIiwKKwkJCQkJYWZpZCA/IGFmaWQtPmZpZCA6IC0xLCB1bmFtZSwgYW5hbWUpOworCWVyciA9IDA7CisKKwlmaWQgPSBwOV9maWRfY3JlYXRlKGNsbnQpOworCWlmIChJU19FUlIoZmlkKSkgeworCQllcnIgPSBQVFJfRVJSKGZpZCk7CisJCWZpZCA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UQVRUQUNILCAiZGRzcz9kIiwgZmlkLT5maWQsCisJCQlhZmlkID8gYWZpZC0+ZmlkIDogUDlfTk9GSUQsIHVuYW1lLCBhbmFtZSwgbl91bmFtZSk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUSIsICZxaWQpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJBVFRBQ0ggcWlkICV4LiVsbHguJXhcbiIsCisJCQkJCXFpZC50eXBlLCBxaWQucGF0aCwgcWlkLnZlcnNpb24pOworCisJbWVtbW92ZSgmZmlkLT5xaWQsICZxaWQsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7CisKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCXJldHVybiBmaWQ7CisKK2Vycm9yOgorCWlmIChmaWQpCisJCXA5X2ZpZF9kZXN0cm95KGZpZCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X2F0dGFjaCk7CisKK3N0cnVjdCBwOV9maWQgKgorcDlfY2xpZW50X2F1dGgoc3RydWN0IHA5X2NsaWVudCAqY2xudCwgY2hhciAqdW5hbWUsIHUzMiBuX3VuYW1lLCBjaGFyICphbmFtZSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwOV9yZXFfdCAqcmVxOworCXN0cnVjdCBwOV9xaWQgcWlkOworCXN0cnVjdCBwOV9maWQgKmFmaWQ7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRBVVRIIHVuYW1lICVzIGFuYW1lICVzXG4iLCB1bmFtZSwgYW5hbWUpOworCWVyciA9IDA7CisKKwlhZmlkID0gcDlfZmlkX2NyZWF0ZShjbG50KTsKKwlpZiAoSVNfRVJSKGFmaWQpKSB7CisJCWVyciA9IFBUUl9FUlIoYWZpZCk7CisJCWFmaWQgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVEFVVEgsICJkc3M/ZCIsCisJCQlhZmlkID8gYWZpZC0+ZmlkIDogUDlfTk9GSUQsIHVuYW1lLCBhbmFtZSwgbl91bmFtZSk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUSIsICZxaWQpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJBVVRIIHFpZCAleC4lbGx4LiV4XG4iLAorCQkJCQlxaWQudHlwZSwgcWlkLnBhdGgsIHFpZC52ZXJzaW9uKTsKKworCW1lbW1vdmUoJmFmaWQtPnFpZCwgJnFpZCwgc2l6ZW9mKHN0cnVjdCBwOV9xaWQpKTsKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCXJldHVybiBhZmlkOworCitlcnJvcjoKKwlpZiAoYWZpZCkKKwkJcDlfZmlkX2Rlc3Ryb3koYWZpZCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X2F1dGgpOworCitzdHJ1Y3QgcDlfZmlkICpwOV9jbGllbnRfd2FsayhzdHJ1Y3QgcDlfZmlkICpvbGRmaWQsIGludCBud25hbWUsIGNoYXIgKip3bmFtZXMsCisJaW50IGNsb25lKQoreworCWludCBlcnI7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisJc3RydWN0IHA5X3FpZCAqd3FpZHM7CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CisJaW50MTZfdCBud3FpZHMsIGNvdW50OworCisJZXJyID0gMDsKKwljbG50ID0gb2xkZmlkLT5jbG50OworCWlmIChjbG9uZSkgeworCQlmaWQgPSBwOV9maWRfY3JlYXRlKGNsbnQpOworCQlpZiAoSVNfRVJSKGZpZCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoZmlkKTsKKwkJCWZpZCA9IE5VTEw7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJZmlkLT51aWQgPSBvbGRmaWQtPnVpZDsKKwl9IGVsc2UKKwkJZmlkID0gb2xkZmlkOworCisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRXQUxLIGZpZHMgJWQsJWQgbnduYW1lICVkIHduYW1lWzBdICVzXG4iLAorCQlvbGRmaWQtPmZpZCwgZmlkLT5maWQsIG53bmFtZSwgd25hbWVzID8gd25hbWVzWzBdIDogTlVMTCk7CisKKwlyZXEgPSBwOV9jbGllbnRfcnBjKGNsbnQsIFA5X1RXQUxLLCAiZGRUIiwgb2xkZmlkLT5maWQsIGZpZC0+ZmlkLAorCQkJCQkJCQlud25hbWUsIHduYW1lcyk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUiIsICZud3FpZHMsICZ3cWlkcyk7CisJaWYgKGVycikgeworCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOworCQlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCQlnb3RvIGNsdW5rX2ZpZDsKKwl9CisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUldBTEsgbndxaWQgJWQ6XG4iLCBud3FpZHMpOworCisJaWYgKG53cWlkcyAhPSBud25hbWUpIHsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBjbHVua19maWQ7CisJfQorCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbndxaWRzOyBjb3VudCsrKQorCQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8ICAgICBbJWRdICV4LiVsbHguJXhcbiIsCisJCQljb3VudCwgd3FpZHNbY291bnRdLnR5cGUsIHdxaWRzW2NvdW50XS5wYXRoLAorCQkJd3FpZHNbY291bnRdLnZlcnNpb24pOworCisJaWYgKG53bmFtZSkKKwkJbWVtbW92ZSgmZmlkLT5xaWQsICZ3cWlkc1tud3FpZHMgLSAxXSwgc2l6ZW9mKHN0cnVjdCBwOV9xaWQpKTsKKwllbHNlCisJCWZpZC0+cWlkID0gb2xkZmlkLT5xaWQ7CisKKwlyZXR1cm4gZmlkOworCitjbHVua19maWQ6CisJcDlfY2xpZW50X2NsdW5rKGZpZCk7CisJZmlkID0gTlVMTDsKKworZXJyb3I6CisJaWYgKGZpZCAmJiAoZmlkICE9IG9sZGZpZCkpCisJCXA5X2ZpZF9kZXN0cm95KGZpZCk7CisKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfd2Fsayk7CisKK2ludCBwOV9jbGllbnRfb3BlbihzdHJ1Y3QgcDlfZmlkICpmaWQsIGludCBtb2RlKQoreworCWludCBlcnI7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfcWlkIHFpZDsKKwlpbnQgaW91bml0OworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUT1BFTiBmaWQgJWQgbW9kZSAlZFxuIiwgZmlkLT5maWQsIG1vZGUpOworCWVyciA9IDA7CisJY2xudCA9IGZpZC0+Y2xudDsKKworCWlmIChmaWQtPm1vZGUgIT0gLTEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UT1BFTiwgImRiIiwgZmlkLT5maWQsIG1vZGUpOworCWlmIChJU19FUlIocmVxKSkgeworCQllcnIgPSBQVFJfRVJSKHJlcSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgY2xudC0+ZG90dSwgIlFkIiwgJnFpZCwgJmlvdW5pdCk7CisJaWYgKGVycikgeworCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOworCQlnb3RvIGZyZWVfYW5kX2Vycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUk9QRU4gcWlkICV4LiVsbHguJXggaW91bml0ICV4XG4iLAorCQkJCXFpZC50eXBlLCBxaWQucGF0aCwgcWlkLnZlcnNpb24sIGlvdW5pdCk7CisKKwlmaWQtPm1vZGUgPSBtb2RlOworCWZpZC0+aW91bml0ID0gaW91bml0OworCitmcmVlX2FuZF9lcnJvcjoKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X29wZW4pOworCitpbnQgcDlfY2xpZW50X2ZjcmVhdGUoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpuYW1lLCB1MzIgcGVybSwgaW50IG1vZGUsCisJCSAgICAgY2hhciAqZXh0ZW5zaW9uKQoreworCWludCBlcnI7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfcWlkIHFpZDsKKwlpbnQgaW91bml0OworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUQ1JFQVRFIGZpZCAlZCBuYW1lICVzIHBlcm0gJWQgbW9kZSAlZFxuIiwKKwkJCQkJCWZpZC0+ZmlkLCBuYW1lLCBwZXJtLCBtb2RlKTsKKwllcnIgPSAwOworCWNsbnQgPSBmaWQtPmNsbnQ7CisKKwlpZiAoZmlkLT5tb2RlICE9IC0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVENSRUFURSwgImRzZGI/cyIsIGZpZC0+ZmlkLCBuYW1lLCBwZXJtLAorCQkJCW1vZGUsIGV4dGVuc2lvbik7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUWQiLCAmcWlkLCAmaW91bml0KTsKKwlpZiAoZXJyKSB7CisJCXA5cGR1X2R1bXAoMSwgcmVxLT5yYyk7CisJCWdvdG8gZnJlZV9hbmRfZXJyb3I7CisJfQorCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBSQ1JFQVRFIHFpZCAleC4lbGx4LiV4IGlvdW5pdCAleFxuIiwKKwkJCQlxaWQudHlwZSwgcWlkLnBhdGgsIHFpZC52ZXJzaW9uLCBpb3VuaXQpOworCisJZmlkLT5tb2RlID0gbW9kZTsKKwlmaWQtPmlvdW5pdCA9IGlvdW5pdDsKKworZnJlZV9hbmRfZXJyb3I6CisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKK2Vycm9yOgorCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9mY3JlYXRlKTsKKworaW50IHA5X2NsaWVudF9jbHVuayhzdHJ1Y3QgcDlfZmlkICpmaWQpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCXN0cnVjdCBwOV9yZXFfdCAqcmVxOworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUQ0xVTksgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisJZXJyID0gMDsKKwljbG50ID0gZmlkLT5jbG50OworCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UQ0xVTkssICJkIiwgZmlkLT5maWQpOworCWlmIChJU19FUlIocmVxKSkgeworCQllcnIgPSBQVFJfRVJSKHJlcSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBSQ0xVTksgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworCXA5X2ZpZF9kZXN0cm95KGZpZCk7CisKK2Vycm9yOgorCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHA5X2NsaWVudF9jbHVuayk7CisKK2ludCBwOV9jbGllbnRfcmVtb3ZlKHN0cnVjdCBwOV9maWQgKmZpZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CisJc3RydWN0IHA5X3JlcV90ICpyZXE7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPj4+IFRSRU1PVkUgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisJZXJyID0gMDsKKwljbG50ID0gZmlkLT5jbG50OworCisJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UUkVNT1ZFLCAiZCIsIGZpZC0+ZmlkKTsKKwlpZiAoSVNfRVJSKHJlcSkpIHsKKwkJZXJyID0gUFRSX0VSUihyZXEpOworCQlnb3RvIGVycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUlJFTU9WRSBmaWQgJWRcbiIsIGZpZC0+ZmlkKTsKKworCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CisJcDlfZmlkX2Rlc3Ryb3koZmlkKTsKKworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X3JlbW92ZSk7CisKK2ludAorcDlfY2xpZW50X3JlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCBjaGFyIF9fdXNlciAqdWRhdGEsIHU2NCBvZmZzZXQsCisJCQkJCQkJCXUzMiBjb3VudCkKK3sKKwlpbnQgZXJyLCByc2l6ZSwgdG90YWw7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwljaGFyICpkYXRhcHRyOworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUUkVBRCBmaWQgJWQgb2Zmc2V0ICVsbHUgJWRcbiIsIGZpZC0+ZmlkLAorCQkJCQkobG9uZyBsb25nIHVuc2lnbmVkKSBvZmZzZXQsIGNvdW50KTsKKwllcnIgPSAwOworCWNsbnQgPSBmaWQtPmNsbnQ7CisJdG90YWwgPSAwOworCisJcnNpemUgPSBmaWQtPmlvdW5pdDsKKwlpZiAoIXJzaXplIHx8IHJzaXplID4gY2xudC0+bXNpemUtUDlfSU9IRFJTWikKKwkJcnNpemUgPSBjbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7CisKKwlpZiAoY291bnQgPCByc2l6ZSkKKwkJcnNpemUgPSBjb3VudDsKKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFJFQUQsICJkcWQiLCBmaWQtPmZpZCwgb2Zmc2V0LCByc2l6ZSk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiRCIsICZjb3VudCwgJmRhdGFwdHIpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJZ290byBmcmVlX2FuZF9lcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJSRUFEIGNvdW50ICVkXG4iLCBjb3VudCk7CisKKwlpZiAoZGF0YSkgeworCQltZW1tb3ZlKGRhdGEsIGRhdGFwdHIsIGNvdW50KTsKKwkJZGF0YSArPSBjb3VudDsKKwl9CisKKwlpZiAodWRhdGEpIHsKKwkJZXJyID0gY29weV90b191c2VyKHVkYXRhLCBkYXRhcHRyLCBjb3VudCk7CisJCWlmIChlcnIpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIGZyZWVfYW5kX2Vycm9yOworCQl9CisJfQorCisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwlyZXR1cm4gY291bnQ7CisKK2ZyZWVfYW5kX2Vycm9yOgorCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CitlcnJvcjoKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfcmVhZCk7CisKK2ludAorcDlfY2xpZW50X3dyaXRlKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgY29uc3QgY2hhciBfX3VzZXIgKnVkYXRhLAorCQkJCQkJCXU2NCBvZmZzZXQsIHUzMiBjb3VudCkKK3sKKwlpbnQgZXJyLCByc2l6ZSwgdG90YWw7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI+Pj4gVFdSSVRFIGZpZCAlZCBvZmZzZXQgJWxsdSBjb3VudCAlZFxuIiwKKwkJCQlmaWQtPmZpZCwgKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7CisJZXJyID0gMDsKKwljbG50ID0gZmlkLT5jbG50OworCXRvdGFsID0gMDsKKworCXJzaXplID0gZmlkLT5pb3VuaXQ7CisJaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IGNsbnQtPm1zaXplLVA5X0lPSERSU1opCisJCXJzaXplID0gY2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOworCisJaWYgKGNvdW50IDwgcnNpemUpCisJCXJzaXplID0gY291bnQ7CisJaWYgKGRhdGEpCisJCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFdSSVRFLCAiZHFEIiwgZmlkLT5maWQsIG9mZnNldCwKKwkJCQkJCQkJcnNpemUsIGRhdGEpOworCWVsc2UKKwkJcmVxID0gcDlfY2xpZW50X3JwYyhjbG50LCBQOV9UV1JJVEUsICJkcVUiLCBmaWQtPmZpZCwgb2Zmc2V0LAorCQkJCQkJCQlyc2l6ZSwgdWRhdGEpOworCWlmIChJU19FUlIocmVxKSkgeworCQllcnIgPSBQVFJfRVJSKHJlcSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgY2xudC0+ZG90dSwgImQiLCAmY291bnQpOworCWlmIChlcnIpIHsKKwkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKKwkJZ290byBmcmVlX2FuZF9lcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJXUklURSBjb3VudCAlZFxuIiwgY291bnQpOworCisJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKKwlyZXR1cm4gY291bnQ7CisKK2ZyZWVfYW5kX2Vycm9yOgorCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CitlcnJvcjoKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfd3JpdGUpOworCitzdHJ1Y3QgcDlfd3N0YXQgKnA5X2NsaWVudF9zdGF0KHN0cnVjdCBwOV9maWQgKmZpZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CisJc3RydWN0IHA5X3dzdGF0ICpyZXQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfd3N0YXQpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwl1MTYgaWdub3JlZDsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI+Pj4gVFNUQVQgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwllcnIgPSAwOworCWNsbnQgPSBmaWQtPmNsbnQ7CisKKwlyZXEgPSBwOV9jbGllbnRfcnBjKGNsbnQsIFA5X1RTVEFULCAiZCIsIGZpZC0+ZmlkKTsKKwlpZiAoSVNfRVJSKHJlcSkpIHsKKwkJZXJyID0gUFRSX0VSUihyZXEpOworCQlnb3RvIGVycm9yOworCX0KKworCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGNsbnQtPmRvdHUsICJ3UyIsICZpZ25vcmVkLCByZXQpOworCWlmIChlcnIpIHsKKwkJcmV0ID0gRVJSX1BUUihlcnIpOworCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOworCQlnb3RvIGZyZWVfYW5kX2Vycm9yOworCX0KKworCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsCisJCSI8PDwgUlNUQVQgc3o9JXggdHlwZT0leCBkZXY9JXggcWlkPSV4LiVsbHguJXhcbiIKKwkJIjw8PCAgICBtb2RlPSU4Ljh4IGF0aW1lPSU4Ljh4IG10aW1lPSU4Ljh4IGxlbmd0aD0lbGx4XG4iCisJCSI8PDwgICAgbmFtZT0lcyB1aWQ9JXMgZ2lkPSVzIG11aWQ9JXMgZXh0ZW5zaW9uPSglcylcbiIKKwkJIjw8PCAgICB1aWQ9JWQgZ2lkPSVkIG5fbXVpZD0lZFxuIiwKKwkJcmV0LT5zaXplLCByZXQtPnR5cGUsIHJldC0+ZGV2LCByZXQtPnFpZC50eXBlLAorCQlyZXQtPnFpZC5wYXRoLCByZXQtPnFpZC52ZXJzaW9uLCByZXQtPm1vZGUsCisJCXJldC0+YXRpbWUsIHJldC0+bXRpbWUsIHJldC0+bGVuZ3RoLCByZXQtPm5hbWUsCisJCXJldC0+dWlkLCByZXQtPmdpZCwgcmV0LT5tdWlkLCByZXQtPmV4dGVuc2lvbiwKKwkJcmV0LT5uX3VpZCwgcmV0LT5uX2dpZCwgcmV0LT5uX211aWQpOworCitmcmVlX2FuZF9lcnJvcjoKKwlwOV9mcmVlX3JlcShjbG50LCByZXEpOworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocDlfY2xpZW50X3N0YXQpOworCitpbnQgcDlfY2xpZW50X3dzdGF0KHN0cnVjdCBwOV9maWQgKmZpZCwgc3RydWN0IHA5X3dzdGF0ICp3c3QpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUV1NUQVQgZmlkICVkXG4iLCBmaWQtPmZpZCk7CisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwKKwkJIiAgICAgc3o9JXggdHlwZT0leCBkZXY9JXggcWlkPSV4LiVsbHguJXhcbiIKKwkJIiAgICAgbW9kZT0lOC44eCBhdGltZT0lOC44eCBtdGltZT0lOC44eCBsZW5ndGg9JWxseFxuIgorCQkiICAgICBuYW1lPSVzIHVpZD0lcyBnaWQ9JXMgbXVpZD0lcyBleHRlbnNpb249KCVzKVxuIgorCQkiICAgICB1aWQ9JWQgZ2lkPSVkIG5fbXVpZD0lZFxuIiwKKwkJd3N0LT5zaXplLCB3c3QtPnR5cGUsIHdzdC0+ZGV2LCB3c3QtPnFpZC50eXBlLAorCQl3c3QtPnFpZC5wYXRoLCB3c3QtPnFpZC52ZXJzaW9uLCB3c3QtPm1vZGUsCisJCXdzdC0+YXRpbWUsIHdzdC0+bXRpbWUsIHdzdC0+bGVuZ3RoLCB3c3QtPm5hbWUsCisJCXdzdC0+dWlkLCB3c3QtPmdpZCwgd3N0LT5tdWlkLCB3c3QtPmV4dGVuc2lvbiwKKwkJd3N0LT5uX3VpZCwgd3N0LT5uX2dpZCwgd3N0LT5uX211aWQpOworCWVyciA9IDA7CisJY2xudCA9IGZpZC0+Y2xudDsKKworCXJlcSA9IHA5X2NsaWVudF9ycGMoY2xudCwgUDlfVFdTVEFULCAiZHdTIiwgZmlkLT5maWQsIDAsIHdzdCk7CisJaWYgKElTX0VSUihyZXEpKSB7CisJCWVyciA9IFBUUl9FUlIocmVxKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IFJXU1RBVCBmaWQgJWRcbiIsIGZpZC0+ZmlkKTsKKworCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CitlcnJvcjoKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfd3N0YXQpOwpkaWZmIC0tZ2l0IGEvbmV0LzlwL2NvbnYuYyBiL25ldC85cC9jb252LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZDNhM2IuLjAwMDAwMDAKLS0tIGEvbmV0LzlwL2NvbnYuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNTQgKzAsMCBAQAotLyoKLSAqIG5ldC85cC9jb252LmMKLSAqCi0gKiA5UCBwcm90b2NvbCBjb252ZXJzaW9uIGZ1bmN0aW9ucwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgYnkgTGF0Y2hlc2FyIElvbmtvdiA8bHVjaG9AaW9ua292Lm5ldD4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgRXJpYyBWYW4gSGVuc2JlcmdlbiA8ZXJpY3ZoQGdtYWlsLmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgYnkgUm9uIE1pbm5pY2ggPHJtaW5uaWNoQGxhbmwuZ292PgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG86Ci0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gKiAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vcgotICogIEJvc3RvbiwgTUEgIDAyMTExLTEzMDEgIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRyLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPG5ldC85cC85cC5oPgotCi0vKgotICogQnVmZmVyIHRvIGhlbHAgd2l0aCBzdHJpbmcgcGFyc2luZwotICovCi1zdHJ1Y3QgY2J1ZiB7Ci0JdW5zaWduZWQgY2hhciAqc3A7Ci0JdW5zaWduZWQgY2hhciAqcDsKLQl1bnNpZ25lZCBjaGFyICplcDsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBidWZfaW5pdChzdHJ1Y3QgY2J1ZiAqYnVmLCB2b2lkICpkYXRhLCBpbnQgZGF0YWxlbikKLXsKLQlidWYtPnNwID0gYnVmLT5wID0gZGF0YTsKLQlidWYtPmVwID0gZGF0YSArIGRhdGFsZW47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGJ1Zl9jaGVja19vdmVyZmxvdyhzdHJ1Y3QgY2J1ZiAqYnVmKQotewotCXJldHVybiBidWYtPnAgPiBidWYtPmVwOwotfQotCi1zdGF0aWMgaW50IGJ1Zl9jaGVja19zaXplKHN0cnVjdCBjYnVmICpidWYsIGludCBsZW4pCi17Ci0JaWYgKGJ1Zi0+cCArIGxlbiA+IGJ1Zi0+ZXApIHsKLQkJaWYgKGJ1Zi0+cCA8IGJ1Zi0+ZXApIHsKLQkJCVA5X0VQUklOVEsoS0VSTl9FUlIsCi0JCQkJImJ1ZmZlciBvdmVyZmxvdzogd2FudCAlZCBoYXMgJWRcbiIsIGxlbiwKLQkJCQkoaW50KShidWYtPmVwIC0gYnVmLT5wKSk7Ci0JCQlkdW1wX3N0YWNrKCk7Ci0JCQlidWYtPnAgPSBidWYtPmVwICsgMTsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCAqYnVmX2FsbG9jKHN0cnVjdCBjYnVmICpidWYsIGludCBsZW4pCi17Ci0Jdm9pZCAqcmV0ID0gTlVMTDsKLQotCWlmIChidWZfY2hlY2tfc2l6ZShidWYsIGxlbikpIHsKLQkJcmV0ID0gYnVmLT5wOwotCQlidWYtPnAgKz0gbGVuOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1Zl9wdXRfaW50OChzdHJ1Y3QgY2J1ZiAqYnVmLCB1OCB2YWwpCi17Ci0JaWYgKGJ1Zl9jaGVja19zaXplKGJ1ZiwgMSkpIHsKLQkJYnVmLT5wWzBdID0gdmFsOwotCQlidWYtPnArKzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1Zl9wdXRfaW50MTYoc3RydWN0IGNidWYgKmJ1ZiwgdTE2IHZhbCkKLXsKLQlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCAyKSkgewotCQkqKF9fbGUxNiAqKSBidWYtPnAgPSBjcHVfdG9fbGUxNih2YWwpOwotCQlidWYtPnAgKz0gMjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1Zl9wdXRfaW50MzIoc3RydWN0IGNidWYgKmJ1ZiwgdTMyIHZhbCkKLXsKLQlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCA0KSkgewotCQkqKF9fbGUzMiAqKWJ1Zi0+cCA9IGNwdV90b19sZTMyKHZhbCk7Ci0JCWJ1Zi0+cCArPSA0OwotCX0KLX0KLQotc3RhdGljIHZvaWQgYnVmX3B1dF9pbnQ2NChzdHJ1Y3QgY2J1ZiAqYnVmLCB1NjQgdmFsKQotewotCWlmIChidWZfY2hlY2tfc2l6ZShidWYsIDgpKSB7Ci0JCSooX19sZTY0ICopYnVmLT5wID0gY3B1X3RvX2xlNjQodmFsKTsKLQkJYnVmLT5wICs9IDg7Ci0JfQotfQotCi1zdGF0aWMgY2hhciAqYnVmX3B1dF9zdHJpbmduKHN0cnVjdCBjYnVmICpidWYsIGNvbnN0IGNoYXIgKnMsIHUxNiBzbGVuKQotewotCWNoYXIgKnJldDsKLQotCXJldCA9IE5VTEw7Ci0JaWYgKGJ1Zl9jaGVja19zaXplKGJ1Ziwgc2xlbiArIDIpKSB7Ci0JCWJ1Zl9wdXRfaW50MTYoYnVmLCBzbGVuKTsKLQkJcmV0ID0gYnVmLT5wOwotCQltZW1jcHkoYnVmLT5wLCBzLCBzbGVuKTsKLQkJYnVmLT5wICs9IHNsZW47Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHU4IGJ1Zl9nZXRfaW50OChzdHJ1Y3QgY2J1ZiAqYnVmKQotewotCXU4IHJldCA9IDA7Ci0KLQlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCAxKSkgewotCQlyZXQgPSBidWYtPnBbMF07Ci0JCWJ1Zi0+cCsrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB1MTYgYnVmX2dldF9pbnQxNihzdHJ1Y3QgY2J1ZiAqYnVmKQotewotCXUxNiByZXQgPSAwOwotCi0JaWYgKGJ1Zl9jaGVja19zaXplKGJ1ZiwgMikpIHsKLQkJcmV0ID0gbGUxNl90b19jcHUoKihfX2xlMTYgKilidWYtPnApOwotCQlidWYtPnAgKz0gMjsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdTMyIGJ1Zl9nZXRfaW50MzIoc3RydWN0IGNidWYgKmJ1ZikKLXsKLQl1MzIgcmV0ID0gMDsKLQotCWlmIChidWZfY2hlY2tfc2l6ZShidWYsIDQpKSB7Ci0JCXJldCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopYnVmLT5wKTsKLQkJYnVmLT5wICs9IDQ7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHU2NCBidWZfZ2V0X2ludDY0KHN0cnVjdCBjYnVmICpidWYpCi17Ci0JdTY0IHJldCA9IDA7Ci0KLQlpZiAoYnVmX2NoZWNrX3NpemUoYnVmLCA4KSkgewotCQlyZXQgPSBsZTY0X3RvX2NwdSgqKF9fbGU2NCAqKWJ1Zi0+cCk7Ci0JCWJ1Zi0+cCArPSA4OwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1Zl9nZXRfc3RyKHN0cnVjdCBjYnVmICpidWYsIHN0cnVjdCBwOV9zdHIgKnZzdHIpCi17Ci0JdnN0ci0+bGVuID0gYnVmX2dldF9pbnQxNihidWYpOwotCWlmICghYnVmX2NoZWNrX292ZXJmbG93KGJ1ZikgJiYgYnVmX2NoZWNrX3NpemUoYnVmLCB2c3RyLT5sZW4pKSB7Ci0JCXZzdHItPnN0ciA9IGJ1Zi0+cDsKLQkJYnVmLT5wICs9IHZzdHItPmxlbjsKLQl9IGVsc2UgewotCQl2c3RyLT5sZW4gPSAwOwotCQl2c3RyLT5zdHIgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYnVmX2dldF9xaWQoc3RydWN0IGNidWYgKmJ1ZnAsIHN0cnVjdCBwOV9xaWQgKnFpZCkKLXsKLQlxaWQtPnR5cGUgPSBidWZfZ2V0X2ludDgoYnVmcCk7Ci0JcWlkLT52ZXJzaW9uID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQlxaWQtPnBhdGggPSBidWZfZ2V0X2ludDY0KGJ1ZnApOwotfQotCi0vKioKLSAqIHA5X3NpemVfd3N0YXQgLSBjYWxjdWxhdGUgdGhlIHNpemUgb2YgYSB2YXJpYWJsZSBsZW5ndGggc3RhdCBzdHJ1Y3QKLSAqIEB3c3RhdDogbWV0YWRhdGEgKHN0YXQpIHN0cnVjdHVyZQotICogQGRvdHU6IG5vbi16ZXJvIGlmIDlQMjAwMC51Ci0gKgotICovCi0KLXN0YXRpYyBpbnQgcDlfc2l6ZV93c3RhdChzdHJ1Y3QgcDlfd3N0YXQgKndzdGF0LCBpbnQgZG90dSkKLXsKLQlpbnQgc2l6ZSA9IDA7Ci0KLQlpZiAod3N0YXQgPT0gTlVMTCkgewotCQlQOV9FUFJJTlRLKEtFUk5fRVJSLCAicDlfc2l6ZV9zdGF0OiBnb3QgYSBOVUxMIHN0YXQgcG9pbnRlclxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXNpemUgPQkJCS8qIDIgKyAqLy8qIHNpemVbMl0gKi8KLQkgICAgMiArCQkJLyogdHlwZVsyXSAqLwotCSAgICA0ICsJCQkvKiBkZXZbNF0gKi8KLQkgICAgMSArCQkJLyogcWlkLnR5cGVbMV0gKi8KLQkgICAgNCArCQkJLyogcWlkLnZlcnNbNF0gKi8KLQkgICAgOCArCQkJLyogcWlkLnBhdGhbOF0gKi8KLQkgICAgNCArCQkJLyogbW9kZVs0XSAqLwotCSAgICA0ICsJCQkvKiBhdGltZVs0XSAqLwotCSAgICA0ICsJCQkvKiBtdGltZVs0XSAqLwotCSAgICA4ICsJCQkvKiBsZW5ndGhbOF0gKi8KLQkgICAgODsJCQkvKiBtaW5pbXVtIHN1bSBvZiBzdHJpbmcgbGVuZ3RocyAqLwotCi0JaWYgKHdzdGF0LT5uYW1lKQotCQlzaXplICs9IHN0cmxlbih3c3RhdC0+bmFtZSk7Ci0JaWYgKHdzdGF0LT51aWQpCi0JCXNpemUgKz0gc3RybGVuKHdzdGF0LT51aWQpOwotCWlmICh3c3RhdC0+Z2lkKQotCQlzaXplICs9IHN0cmxlbih3c3RhdC0+Z2lkKTsKLQlpZiAod3N0YXQtPm11aWQpCi0JCXNpemUgKz0gc3RybGVuKHdzdGF0LT5tdWlkKTsKLQotCWlmIChkb3R1KSB7Ci0JCXNpemUgKz0gNCArCS8qIG5fdWlkWzRdICovCi0JCSAgICA0ICsJCS8qIG5fZ2lkWzRdICovCi0JCSAgICA0ICsJCS8qIG5fbXVpZFs0XSAqLwotCQkgICAgMjsJCS8qIHN0cmluZyBsZW5ndGggb2YgZXh0ZW5zaW9uWzRdICovCi0JCWlmICh3c3RhdC0+ZXh0ZW5zaW9uKQotCQkJc2l6ZSArPSBzdHJsZW4od3N0YXQtPmV4dGVuc2lvbik7Ci0JfQotCi0JcmV0dXJuIHNpemU7Ci19Ci0KLS8qKgotICogYnVmX2dldF9zdGF0IC0gc2FmZWx5IGRlY29kZSBhIHJlY2lldmVkIG1ldGFkYXRhIChzdGF0KSBzdHJ1Y3R1cmUKLSAqIEBidWZwOiBidWZmZXIgdG8gZGVzZXJpYWxpemUKLSAqIEBzdGF0OiBtZXRhZGF0YSAoc3RhdCkgc3RydWN0dXJlCi0gKiBAZG90dTogbm9uLXplcm8gaWYgOVAyMDAwLnUKLSAqCi0gKi8KLQotc3RhdGljIHZvaWQKLWJ1Zl9nZXRfc3RhdChzdHJ1Y3QgY2J1ZiAqYnVmcCwgc3RydWN0IHA5X3N0YXQgKnN0YXQsIGludCBkb3R1KQotewotCXN0YXQtPnNpemUgPSBidWZfZ2V0X2ludDE2KGJ1ZnApOwotCXN0YXQtPnR5cGUgPSBidWZfZ2V0X2ludDE2KGJ1ZnApOwotCXN0YXQtPmRldiA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0Jc3RhdC0+cWlkLnR5cGUgPSBidWZfZ2V0X2ludDgoYnVmcCk7Ci0Jc3RhdC0+cWlkLnZlcnNpb24gPSBidWZfZ2V0X2ludDMyKGJ1ZnApOwotCXN0YXQtPnFpZC5wYXRoID0gYnVmX2dldF9pbnQ2NChidWZwKTsKLQlzdGF0LT5tb2RlID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQlzdGF0LT5hdGltZSA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0Jc3RhdC0+bXRpbWUgPSBidWZfZ2V0X2ludDMyKGJ1ZnApOwotCXN0YXQtPmxlbmd0aCA9IGJ1Zl9nZXRfaW50NjQoYnVmcCk7Ci0JYnVmX2dldF9zdHIoYnVmcCwgJnN0YXQtPm5hbWUpOwotCWJ1Zl9nZXRfc3RyKGJ1ZnAsICZzdGF0LT51aWQpOwotCWJ1Zl9nZXRfc3RyKGJ1ZnAsICZzdGF0LT5naWQpOwotCWJ1Zl9nZXRfc3RyKGJ1ZnAsICZzdGF0LT5tdWlkKTsKLQotCWlmIChkb3R1KSB7Ci0JCWJ1Zl9nZXRfc3RyKGJ1ZnAsICZzdGF0LT5leHRlbnNpb24pOwotCQlzdGF0LT5uX3VpZCA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0JCXN0YXQtPm5fZ2lkID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQkJc3RhdC0+bl9tdWlkID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQl9Ci19Ci0KLS8qKgotICogcDlfZGVzZXJpYWxpemVfc3RhdCAtIGRlY29kZSBhIHJlY2VpdmVkIG1ldGFkYXRhIHN0cnVjdHVyZQotICogQGJ1ZjogYnVmZmVyIHRvIGRlc2VyaWFsaXplCi0gKiBAYnVmbGVuOiBsZW5ndGggb2YgcmVjZWl2ZWQgYnVmZmVyCi0gKiBAc3RhdDogbWV0YWRhdGEgc3RydWN0dXJlIHRvIGRlY29kZSBpbnRvCi0gKiBAZG90dTogbm9uLXplcm8gaWYgOVAyMDAwLnUKLSAqCi0gKiBOb3RlOiBzdGF0IHdpbGwgcG9pbnQgdG8gdGhlIGJ1ZiByZWdpb24uCi0gKi8KLQotaW50Ci1wOV9kZXNlcmlhbGl6ZV9zdGF0KHZvaWQgKmJ1ZiwgdTMyIGJ1Zmxlbiwgc3RydWN0IHA5X3N0YXQgKnN0YXQsCi0JCWludCBkb3R1KQotewotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0JdW5zaWduZWQgY2hhciAqcDsKLQotCWJ1Zl9pbml0KGJ1ZnAsIGJ1ZiwgYnVmbGVuKTsKLQlwID0gYnVmcC0+cDsKLQlidWZfZ2V0X3N0YXQoYnVmcCwgc3RhdCwgZG90dSk7Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiBidWZwLT5wIC0gcDsKLX0KLUVYUE9SVF9TWU1CT0wocDlfZGVzZXJpYWxpemVfc3RhdCk7Ci0KLS8qKgotICogZGVzZXJpYWxpemVfZmNhbGwgLSB1bm1hcnNoYWwgYSByZXNwb25zZQotICogQGJ1ZjogcmVjaWV2ZWQgYnVmZmVyCi0gKiBAYnVmbGVuOiBsZW5ndGggb2YgcmVjZWl2ZWQgYnVmZmVyCi0gKiBAcmNhbGw6IGZjYWxsIHN0cnVjdHVyZSB0byBwb3B1bGF0ZQotICogQHJjYWxsbGVuOiBsZW5ndGggb2YgZmNhbGwgc3RydWN0dXJlIHRvIHBvcHVsYXRlCi0gKiBAZG90dTogbm9uLXplcm8gaWYgOVAyMDAwLnUKLSAqCi0gKi8KLQotaW50Ci1wOV9kZXNlcmlhbGl6ZV9mY2FsbCh2b2lkICpidWYsIHUzMiBidWZsZW4sIHN0cnVjdCBwOV9mY2FsbCAqcmNhbGwsCi0JCSAgICAgICBpbnQgZG90dSkKLXsKLQotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0JaW50IGkgPSAwOwotCi0JYnVmX2luaXQoYnVmcCwgYnVmLCBidWZsZW4pOwotCi0JcmNhbGwtPnNpemUgPSBidWZfZ2V0X2ludDMyKGJ1ZnApOwotCXJjYWxsLT5pZCA9IGJ1Zl9nZXRfaW50OChidWZwKTsKLQlyY2FsbC0+dGFnID0gYnVmX2dldF9pbnQxNihidWZwKTsKLQotCVA5X0RQUklOVEsoUDlfREVCVUdfQ09OViwgInNpemUgJWQgaWQgJWQgdGFnICVkXG4iLCByY2FsbC0+c2l6ZSwKLQkJCQkJCQlyY2FsbC0+aWQsIHJjYWxsLT50YWcpOwotCi0Jc3dpdGNoIChyY2FsbC0+aWQpIHsKLQlkZWZhdWx0OgotCQlQOV9FUFJJTlRLKEtFUk5fRVJSLCAidW5rbm93biBtZXNzYWdlIHR5cGU6ICVkXG4iLCByY2FsbC0+aWQpOwotCQlyZXR1cm4gLUVQUk9UTzsKLQljYXNlIFA5X1JWRVJTSU9OOgotCQlyY2FsbC0+cGFyYW1zLnJ2ZXJzaW9uLm1zaXplID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQkJYnVmX2dldF9zdHIoYnVmcCwgJnJjYWxsLT5wYXJhbXMucnZlcnNpb24udmVyc2lvbik7Ci0JCWJyZWFrOwotCWNhc2UgUDlfUkZMVVNIOgotCQlicmVhazsKLQljYXNlIFA5X1JBVFRBQ0g6Ci0JCXJjYWxsLT5wYXJhbXMucmF0dGFjaC5xaWQudHlwZSA9IGJ1Zl9nZXRfaW50OChidWZwKTsKLQkJcmNhbGwtPnBhcmFtcy5yYXR0YWNoLnFpZC52ZXJzaW9uID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQkJcmNhbGwtPnBhcmFtcy5yYXR0YWNoLnFpZC5wYXRoID0gYnVmX2dldF9pbnQ2NChidWZwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQOV9SV0FMSzoKLQkJcmNhbGwtPnBhcmFtcy5yd2Fsay5ud3FpZCA9IGJ1Zl9nZXRfaW50MTYoYnVmcCk7Ci0JCWlmIChyY2FsbC0+cGFyYW1zLnJ3YWxrLm53cWlkID4gUDlfTUFYV0VMRU0pIHsKLQkJCVA5X0VQUklOVEsoS0VSTl9FUlIsCi0JCQkJCSJSd2FsayB3aXRoIG1vcmUgdGhhbiAlZCBxaWRzOiAlZFxuIiwKLQkJCQkJUDlfTUFYV0VMRU0sIHJjYWxsLT5wYXJhbXMucndhbGsubndxaWQpOwotCQkJcmV0dXJuIC1FUFJPVE87Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgcmNhbGwtPnBhcmFtcy5yd2Fsay5ud3FpZDsgaSsrKQotCQkJYnVmX2dldF9xaWQoYnVmcCwgJnJjYWxsLT5wYXJhbXMucndhbGsud3FpZHNbaV0pOwotCQlicmVhazsKLQljYXNlIFA5X1JPUEVOOgotCQlidWZfZ2V0X3FpZChidWZwLCAmcmNhbGwtPnBhcmFtcy5yb3Blbi5xaWQpOwotCQlyY2FsbC0+cGFyYW1zLnJvcGVuLmlvdW5pdCA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0JCWJyZWFrOwotCWNhc2UgUDlfUkNSRUFURToKLQkJYnVmX2dldF9xaWQoYnVmcCwgJnJjYWxsLT5wYXJhbXMucmNyZWF0ZS5xaWQpOwotCQlyY2FsbC0+cGFyYW1zLnJjcmVhdGUuaW91bml0ID0gYnVmX2dldF9pbnQzMihidWZwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQOV9SUkVBRDoKLQkJcmNhbGwtPnBhcmFtcy5ycmVhZC5jb3VudCA9IGJ1Zl9nZXRfaW50MzIoYnVmcCk7Ci0JCXJjYWxsLT5wYXJhbXMucnJlYWQuZGF0YSA9IGJ1ZnAtPnA7Ci0JCWJ1Zl9jaGVja19zaXplKGJ1ZnAsIHJjYWxsLT5wYXJhbXMucnJlYWQuY291bnQpOwotCQlicmVhazsKLQljYXNlIFA5X1JXUklURToKLQkJcmNhbGwtPnBhcmFtcy5yd3JpdGUuY291bnQgPSBidWZfZ2V0X2ludDMyKGJ1ZnApOwotCQlicmVhazsKLQljYXNlIFA5X1JDTFVOSzoKLQkJYnJlYWs7Ci0JY2FzZSBQOV9SUkVNT1ZFOgotCQlicmVhazsKLQljYXNlIFA5X1JTVEFUOgotCQlidWZfZ2V0X2ludDE2KGJ1ZnApOwotCQlidWZfZ2V0X3N0YXQoYnVmcCwgJnJjYWxsLT5wYXJhbXMucnN0YXQuc3RhdCwgZG90dSk7Ci0JCWJyZWFrOwotCWNhc2UgUDlfUldTVEFUOgotCQlicmVhazsKLQljYXNlIFA5X1JFUlJPUjoKLQkJYnVmX2dldF9zdHIoYnVmcCwgJnJjYWxsLT5wYXJhbXMucmVycm9yLmVycm9yKTsKLQkJaWYgKGRvdHUpCi0JCQlyY2FsbC0+cGFyYW1zLnJlcnJvci5lcnJubyA9IGJ1Zl9nZXRfaW50MTYoYnVmcCk7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgImJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiBidWZwLT5wIC0gYnVmcC0+c3A7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2Rlc2VyaWFsaXplX2ZjYWxsKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHA5X3B1dF9pbnQ4KHN0cnVjdCBjYnVmICpidWZwLCB1OCB2YWwsIHU4ICogcCkKLXsKLQkqcCA9IHZhbDsKLQlidWZfcHV0X2ludDgoYnVmcCwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHA5X3B1dF9pbnQxNihzdHJ1Y3QgY2J1ZiAqYnVmcCwgdTE2IHZhbCwgdTE2ICogcCkKLXsKLQkqcCA9IHZhbDsKLQlidWZfcHV0X2ludDE2KGJ1ZnAsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwOV9wdXRfaW50MzIoc3RydWN0IGNidWYgKmJ1ZnAsIHUzMiB2YWwsIHUzMiAqIHApCi17Ci0JKnAgPSB2YWw7Ci0JYnVmX3B1dF9pbnQzMihidWZwLCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcDlfcHV0X2ludDY0KHN0cnVjdCBjYnVmICpidWZwLCB1NjQgdmFsLCB1NjQgKiBwKQotewotCSpwID0gdmFsOwotCWJ1Zl9wdXRfaW50NjQoYnVmcCwgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQKLXA5X3B1dF9zdHIoc3RydWN0IGNidWYgKmJ1ZnAsIGNoYXIgKmRhdGEsIHN0cnVjdCBwOV9zdHIgKnN0cikKLXsKLQlpbnQgbGVuOwotCWNoYXIgKnM7Ci0KLQlpZiAoZGF0YSkKLQkJbGVuID0gc3RybGVuKGRhdGEpOwotCWVsc2UKLQkJbGVuID0gMDsKLQotCXMgPSBidWZfcHV0X3N0cmluZ24oYnVmcCwgZGF0YSwgbGVuKTsKLQlpZiAoc3RyKSB7Ci0JCXN0ci0+bGVuID0gbGVuOwotCQlzdHItPnN0ciA9IHM7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1wOV9wdXRfZGF0YShzdHJ1Y3QgY2J1ZiAqYnVmcCwgY29uc3QgY2hhciAqZGF0YSwgaW50IGNvdW50LAotCQkgICB1bnNpZ25lZCBjaGFyICoqcGRhdGEpCi17Ci0JKnBkYXRhID0gYnVmX2FsbG9jKGJ1ZnAsIGNvdW50KTsKLQlpZiAoKnBkYXRhID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbW1vdmUoKnBkYXRhLCBkYXRhLCBjb3VudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXA5X3B1dF91c2VyX2RhdGEoc3RydWN0IGNidWYgKmJ1ZnAsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLCBpbnQgY291bnQsCi0JCSAgIHVuc2lnbmVkIGNoYXIgKipwZGF0YSkKLXsKLQkqcGRhdGEgPSBidWZfYWxsb2MoYnVmcCwgY291bnQpOwotCWlmICgqcGRhdGEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIGNvcHlfZnJvbV91c2VyKCpwZGF0YSwgZGF0YSwgY291bnQpOwotfQotCi1zdGF0aWMgdm9pZAotcDlfcHV0X3dzdGF0KHN0cnVjdCBjYnVmICpidWZwLCBzdHJ1Y3QgcDlfd3N0YXQgKndzdGF0LAotCSAgICAgICBzdHJ1Y3QgcDlfc3RhdCAqc3RhdCwgaW50IHN0YXRzeiwgaW50IGRvdHUpCi17Ci0JcDlfcHV0X2ludDE2KGJ1ZnAsIHN0YXRzeiwgJnN0YXQtPnNpemUpOwotCXA5X3B1dF9pbnQxNihidWZwLCB3c3RhdC0+dHlwZSwgJnN0YXQtPnR5cGUpOwotCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+ZGV2LCAmc3RhdC0+ZGV2KTsKLQlwOV9wdXRfaW50OChidWZwLCB3c3RhdC0+cWlkLnR5cGUsICZzdGF0LT5xaWQudHlwZSk7Ci0JcDlfcHV0X2ludDMyKGJ1ZnAsIHdzdGF0LT5xaWQudmVyc2lvbiwgJnN0YXQtPnFpZC52ZXJzaW9uKTsKLQlwOV9wdXRfaW50NjQoYnVmcCwgd3N0YXQtPnFpZC5wYXRoLCAmc3RhdC0+cWlkLnBhdGgpOwotCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+bW9kZSwgJnN0YXQtPm1vZGUpOwotCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+YXRpbWUsICZzdGF0LT5hdGltZSk7Ci0JcDlfcHV0X2ludDMyKGJ1ZnAsIHdzdGF0LT5tdGltZSwgJnN0YXQtPm10aW1lKTsKLQlwOV9wdXRfaW50NjQoYnVmcCwgd3N0YXQtPmxlbmd0aCwgJnN0YXQtPmxlbmd0aCk7Ci0KLQlwOV9wdXRfc3RyKGJ1ZnAsIHdzdGF0LT5uYW1lLCAmc3RhdC0+bmFtZSk7Ci0JcDlfcHV0X3N0cihidWZwLCB3c3RhdC0+dWlkLCAmc3RhdC0+dWlkKTsKLQlwOV9wdXRfc3RyKGJ1ZnAsIHdzdGF0LT5naWQsICZzdGF0LT5naWQpOwotCXA5X3B1dF9zdHIoYnVmcCwgd3N0YXQtPm11aWQsICZzdGF0LT5tdWlkKTsKLQotCWlmIChkb3R1KSB7Ci0JCXA5X3B1dF9zdHIoYnVmcCwgd3N0YXQtPmV4dGVuc2lvbiwgJnN0YXQtPmV4dGVuc2lvbik7Ci0JCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+bl91aWQsICZzdGF0LT5uX3VpZCk7Ci0JCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+bl9naWQsICZzdGF0LT5uX2dpZCk7Ci0JCXA5X3B1dF9pbnQzMihidWZwLCB3c3RhdC0+bl9tdWlkLCAmc3RhdC0+bl9tdWlkKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcDlfZmNhbGwgKgotcDlfY3JlYXRlX2NvbW1vbihzdHJ1Y3QgY2J1ZiAqYnVmcCwgdTMyIHNpemUsIHU4IGlkKQotewotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0KLQlzaXplICs9IDQgKyAxICsgMjsJLyogc2l6ZVs0XSBpZFsxXSB0YWdbMl0gKi8KLQlmYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkgKyBzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZjKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWZjLT5zZGF0YSA9IChjaGFyICopZmMgKyBzaXplb2YoKmZjKTsKLQotCWJ1Zl9pbml0KGJ1ZnAsIChjaGFyICopZmMtPnNkYXRhLCBzaXplKTsKLQlwOV9wdXRfaW50MzIoYnVmcCwgc2l6ZSwgJmZjLT5zaXplKTsKLQlwOV9wdXRfaW50OChidWZwLCBpZCwgJmZjLT5pZCk7Ci0JcDlfcHV0X2ludDE2KGJ1ZnAsIFA5X05PVEFHLCAmZmMtPnRhZyk7Ci0KLQlyZXR1cm4gZmM7Ci19Ci0KLS8qKgotICogcDlfc2V0X3RhZyAtIHNldCB0aGUgdGFnIGZpZWxkIG9mIGFuICZwOV9mY2FsbCBzdHJ1Y3R1cmUKLSAqIEBmYzogZmNhbGwgc3RydWN0dXJlIHRvIHNldCB0YWcgd2l0aGluCi0gKiBAdGFnOiB0YWcgaWQgdG8gc2V0Ci0gKi8KLQotdm9pZCBwOV9zZXRfdGFnKHN0cnVjdCBwOV9mY2FsbCAqZmMsIHUxNiB0YWcpCi17Ci0JZmMtPnRhZyA9IHRhZzsKLQkqKF9fbGUxNiAqKSAoZmMtPnNkYXRhICsgNSkgPSBjcHVfdG9fbGUxNih0YWcpOwotfQotRVhQT1JUX1NZTUJPTChwOV9zZXRfdGFnKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdHZlcnNpb24gLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBUX1ZFUlNJT04gcmVxdWVzdAotICogQG1zaXplOiByZXF1ZXN0ZWQgbWF4aW11bSBkYXRhIHNpemUKLSAqIEB2ZXJzaW9uOiB2ZXJzaW9uIHN0cmluZyB0byBuZWdvdGlhdGUKLSAqCi0gKi8KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R2ZXJzaW9uKHUzMiBtc2l6ZSwgY2hhciAqdmVyc2lvbikKLXsKLQlpbnQgc2l6ZTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQlzaXplID0gNCArIDIgKyBzdHJsZW4odmVyc2lvbik7CS8qIG1zaXplWzRdIHZlcnNpb25bc10gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVFZFUlNJT04pOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIG1zaXplLCAmZmMtPnBhcmFtcy50dmVyc2lvbi5tc2l6ZSk7Ci0JcDlfcHV0X3N0cihidWZwLCB2ZXJzaW9uLCAmZmMtPnBhcmFtcy50dmVyc2lvbi52ZXJzaW9uKTsKLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdHZlcnNpb24pOwotCi0vKioKLSAqIHA5X2NyZWF0ZV90YXV0aCAtIGFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIFRfQVVUSCByZXF1ZXN0Ci0gKiBAYWZpZDogaGFuZGxlIHRvIHVzZSBmb3IgYXV0aGVudGljYXRpb24gcHJvdG9jb2wKLSAqIEB1bmFtZTogdXNlciBuYW1lIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlCi0gKiBAYW5hbWU6IG1vdW50IHNwZWNpZmllciBmb3IgcmVtb3RlIHNlcnZlcgotICogQG5fdW5hbWU6IG51bWVyaWMgaWQgZm9yIHVzZXIgYXR0ZW1wdGluZyB0byBhdXRobmV0aWNhdGUKLSAqIEBkb3R1OiA5UDIwMDAudSBleHRlbnNpb24gZmxhZwotICoKLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90YXV0aCh1MzIgYWZpZCwgY2hhciAqdW5hbWUsIGNoYXIgKmFuYW1lLAotCXUzMiBuX3VuYW1lLCBpbnQgZG90dSkKLXsKLQlpbnQgc2l6ZTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQkvKiBhZmlkWzRdIHVuYW1lW3NdIGFuYW1lW3NdICovCi0Jc2l6ZSA9IDQgKyAyICsgMjsKLQlpZiAodW5hbWUpCi0JCXNpemUgKz0gc3RybGVuKHVuYW1lKTsKLQotCWlmIChhbmFtZSkKLQkJc2l6ZSArPSBzdHJsZW4oYW5hbWUpOwotCi0JaWYgKGRvdHUpCi0JCXNpemUgKz0gNDsJLyogbl91bmFtZSAqLwotCi0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RBVVRIKTsKLQlpZiAoSVNfRVJSKGZjKSkKLQkJZ290byBlcnJvcjsKLQotCXA5X3B1dF9pbnQzMihidWZwLCBhZmlkLCAmZmMtPnBhcmFtcy50YXV0aC5hZmlkKTsKLQlwOV9wdXRfc3RyKGJ1ZnAsIHVuYW1lLCAmZmMtPnBhcmFtcy50YXV0aC51bmFtZSk7Ci0JcDlfcHV0X3N0cihidWZwLCBhbmFtZSwgJmZjLT5wYXJhbXMudGF1dGguYW5hbWUpOwotCWlmIChkb3R1KQotCQlwOV9wdXRfaW50MzIoYnVmcCwgbl91bmFtZSwgJmZjLT5wYXJhbXMudGF1dGgubl91bmFtZSk7Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKSB7Ci0JCWtmcmVlKGZjKTsKLQkJZmMgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLWVycm9yOgotCXJldHVybiBmYzsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY3JlYXRlX3RhdXRoKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdGF0dGFjaCAtIGFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIFRfQVRUQUNIIHJlcXVlc3QKLSAqIEBmaWQ6IGhhbmRsZSB0byB1c2UgZm9yIHRoZSBuZXcgbW91bnQgcG9pbnQKLSAqIEBhZmlkOiBoYW5kbGUgdG8gdXNlIGZvciBhdXRoZW50aWNhdGlvbiBwcm90b2NvbAotICogQHVuYW1lOiB1c2VyIG5hbWUgYXR0ZW1wdGluZyB0byBhdHRhY2gKLSAqIEBhbmFtZTogbW91bnQgc3BlY2lmaWVyIGZvciByZW1vdGUgc2VydmVyCi0gKiBAbl91bmFtZTogbnVtZXJpYyBpZCBmb3IgdXNlciBhdHRlbXB0aW5nIHRvIGF0dGFjaAotICogQG5fdW5hbWU6IG51bWVyaWMgaWQgZm9yIHVzZXIgYXR0ZW1wdGluZyB0byBhdHRhY2gKLSAqIEBkb3R1OiA5UDIwMDAudSBleHRlbnNpb24gZmxhZwotICoKLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKgotcDlfY3JlYXRlX3RhdHRhY2godTMyIGZpZCwgdTMyIGFmaWQsIGNoYXIgKnVuYW1lLCBjaGFyICphbmFtZSwKLQl1MzIgbl91bmFtZSwgaW50IGRvdHUpCi17Ci0JaW50IHNpemU7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0JLyogZmlkWzRdIGFmaWRbNF0gdW5hbWVbc10gYW5hbWVbc10gKi8KLQlzaXplID0gNCArIDQgKyAyICsgMjsKLQlpZiAodW5hbWUpCi0JCXNpemUgKz0gc3RybGVuKHVuYW1lKTsKLQotCWlmIChhbmFtZSkKLQkJc2l6ZSArPSBzdHJsZW4oYW5hbWUpOwotCi0JaWYgKGRvdHUpCi0JCXNpemUgKz0gNDsJLyogbl91bmFtZSAqLwotCi0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RBVFRBQ0gpOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudGF0dGFjaC5maWQpOwotCXA5X3B1dF9pbnQzMihidWZwLCBhZmlkLCAmZmMtPnBhcmFtcy50YXR0YWNoLmFmaWQpOwotCXA5X3B1dF9zdHIoYnVmcCwgdW5hbWUsICZmYy0+cGFyYW1zLnRhdHRhY2gudW5hbWUpOwotCXA5X3B1dF9zdHIoYnVmcCwgYW5hbWUsICZmYy0+cGFyYW1zLnRhdHRhY2guYW5hbWUpOwotCWlmIChkb3R1KQotCQlwOV9wdXRfaW50MzIoYnVmcCwgbl91bmFtZSwgJmZjLT5wYXJhbXMudGF0dGFjaC5uX3VuYW1lKTsKLQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdGF0dGFjaCk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3RmbHVzaCAtIGFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIFRfRkxVU0ggcmVxdWVzdAotICogQG9sZHRhZzogdGFnIGlkIGZvciB0aGUgdHJhbnNhY3Rpb24gd2UgYXJlIGF0dGVtcHRpbmcgdG8gY2FuY2VsCi0gKgotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RmbHVzaCh1MTYgb2xkdGFnKQotewotCWludCBzaXplOwotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IGNidWYgYnVmZmVyOwotCXN0cnVjdCBjYnVmICpidWZwID0gJmJ1ZmZlcjsKLQotCXNpemUgPSAyOwkJLyogb2xkdGFnWzJdICovCi0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RGTFVTSCk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MTYoYnVmcCwgb2xkdGFnLCAmZmMtPnBhcmFtcy50Zmx1c2gub2xkdGFnKTsKLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdGZsdXNoKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdHdhbGsgLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBUX0ZMVVNIIHJlcXVlc3QKLSAqIEBmaWQ6IGhhbmRsZSB3ZSBhcmUgdHJhdmVyc2luZyBmcm9tCi0gKiBAbmV3ZmlkOiBhIG5ldyBoYW5kbGUgZm9yIHRoaXMgdHJhbnNhY3Rpb24KLSAqIEBud25hbWU6IG51bWJlciBvZiBwYXRoIGVsZW1lbnRzIHRvIHRyYXZlcnNlCi0gKiBAd25hbWVzOiBhcnJheSBvZiBwYXRoIGVsZW1lbnRzCi0gKgotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3YWxrKHUzMiBmaWQsIHUzMiBuZXdmaWQsIHUxNiBud25hbWUsCi0JCQkJICAgICBjaGFyICoqd25hbWVzKQotewotCWludCBpLCBzaXplOwotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IGNidWYgYnVmZmVyOwotCXN0cnVjdCBjYnVmICpidWZwID0gJmJ1ZmZlcjsKLQotCWlmIChud25hbWUgPiBQOV9NQVhXRUxFTSkgewotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAibnduYW1lID4gJWRcbiIsIFA5X01BWFdFTEVNKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0Jc2l6ZSA9IDQgKyA0ICsgMjsJLyogZmlkWzRdIG5ld2ZpZFs0XSBud25hbWVbMl0gLi4uICovCi0JZm9yIChpID0gMDsgaSA8IG53bmFtZTsgaSsrKSB7Ci0JCXNpemUgKz0gMiArIHN0cmxlbih3bmFtZXNbaV0pOwkvKiB3bmFtZVtzXSAqLwotCX0KLQotCWZjID0gcDlfY3JlYXRlX2NvbW1vbihidWZwLCBzaXplLCBQOV9UV0FMSyk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MzIoYnVmcCwgZmlkLCAmZmMtPnBhcmFtcy50d2Fsay5maWQpOwotCXA5X3B1dF9pbnQzMihidWZwLCBuZXdmaWQsICZmYy0+cGFyYW1zLnR3YWxrLm5ld2ZpZCk7Ci0JcDlfcHV0X2ludDE2KGJ1ZnAsIG53bmFtZSwgJmZjLT5wYXJhbXMudHdhbGsubnduYW1lKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnduYW1lOyBpKyspIHsKLQkJcDlfcHV0X3N0cihidWZwLCB3bmFtZXNbaV0sICZmYy0+cGFyYW1zLnR3YWxrLnduYW1lc1tpXSk7Ci0JfQotCi0JaWYgKGJ1Zl9jaGVja19vdmVyZmxvdyhidWZwKSkgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gZmM7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NyZWF0ZV90d2Fsayk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3RvcGVuIC0gYWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEgVF9PUEVOIHJlcXVlc3QKLSAqIEBmaWQ6IGhhbmRsZSB3ZSBhcmUgdHJ5aW5nIHRvIG9wZW4KLSAqIEBtb2RlOiB3aGF0IG1vZGUgd2UgYXJlIHRyeWluZyB0byBvcGVuIHRoZSBmaWxlIGluCi0gKgotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RvcGVuKHUzMiBmaWQsIHU4IG1vZGUpCi17Ci0JaW50IHNpemU7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0Jc2l6ZSA9IDQgKyAxOwkJLyogZmlkWzRdIG1vZGVbMV0gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVE9QRU4pOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudG9wZW4uZmlkKTsKLQlwOV9wdXRfaW50OChidWZwLCBtb2RlLCAmZmMtPnBhcmFtcy50b3Blbi5tb2RlKTsKLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdG9wZW4pOwotCi0vKioKLSAqIHA5X2NyZWF0ZV90Y3JlYXRlIC0gYWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEgVF9DUkVBVEUgcmVxdWVzdAotICogQGZpZDogaGFuZGxlIG9mIGRpcmVjdG9yeSB3ZSBhcmUgdHJ5aW5nIHRvIGNyZWF0ZSBpbgotICogQG5hbWU6IG5hbWUgb2YgdGhlIGZpbGUgd2UgYXJlIHRyeWluZyB0byBjcmVhdGUKLSAqIEBwZXJtOiBwZXJtaXNzaW9ucyBmb3IgdGhlIGZpbGUgd2UgYXJlIHRyeWluZyB0byBjcmVhdGUKLSAqIEBtb2RlOiB3aGF0IG1vZGUgd2UgYXJlIHRyeWluZyB0byBvcGVuIHRoZSBmaWxlIGluCi0gKiBAZXh0ZW5zaW9uOiA5cDIwMDAudSBleHRlbnNpb24gc3RyaW5nIChmb3Igc3BlY2lhbCBmaWxlcykKLSAqIEBkb3R1OiA5cDIwMDAudSBlbmFibGVkIGZsYWcKLSAqCi0gKiBOb3RlOiBQbGFuIDkgY3JlYXRlIHNlbWFudGljcyBpbmNsdWRlIG9wZW5pbmcgdGhlIHJlc3VsdGluZyBmaWxlCi0gKiB3aGljaCBpcyB3aHkgbW9kZSBpcyBpbmNsdWRlZC4KLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90Y3JlYXRlKHUzMiBmaWQsIGNoYXIgKm5hbWUsIHUzMiBwZXJtLCB1OCBtb2RlLAotCWNoYXIgKmV4dGVuc2lvbiwgaW50IGRvdHUpCi17Ci0JaW50IHNpemU7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0JLyogZmlkWzRdIG5hbWVbc10gcGVybVs0XSBtb2RlWzFdICovCi0Jc2l6ZSA9IDQgKyAyICsgc3RybGVuKG5hbWUpICsgNCArIDE7Ci0JaWYgKGRvdHUpIHsKLQkJc2l6ZSArPSAyICsJCQkvKiBleHRlbnNpb25bc10gKi8KLQkJICAgIChleHRlbnNpb24gPT0gTlVMTCA/IDAgOiBzdHJsZW4oZXh0ZW5zaW9uKSk7Ci0JfQotCi0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RDUkVBVEUpOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudGNyZWF0ZS5maWQpOwotCXA5X3B1dF9zdHIoYnVmcCwgbmFtZSwgJmZjLT5wYXJhbXMudGNyZWF0ZS5uYW1lKTsKLQlwOV9wdXRfaW50MzIoYnVmcCwgcGVybSwgJmZjLT5wYXJhbXMudGNyZWF0ZS5wZXJtKTsKLQlwOV9wdXRfaW50OChidWZwLCBtb2RlLCAmZmMtPnBhcmFtcy50Y3JlYXRlLm1vZGUpOwotCWlmIChkb3R1KQotCQlwOV9wdXRfc3RyKGJ1ZnAsIGV4dGVuc2lvbiwgJmZjLT5wYXJhbXMudGNyZWF0ZS5leHRlbnNpb24pOwotCi0JaWYgKGJ1Zl9jaGVja19vdmVyZmxvdyhidWZwKSkgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gZmM7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NyZWF0ZV90Y3JlYXRlKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdHJlYWQgLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBUX1JFQUQgcmVxdWVzdAotICogQGZpZDogaGFuZGxlIG9mIHRoZSBmaWxlIHdlIGFyZSB0cnlpbmcgdG8gcmVhZAotICogQG9mZnNldDogb2Zmc2V0IHRvIHN0YXJ0IHJlYWRpbmcgZnJvbQotICogQGNvdW50OiBob3cgbWFueSBieXRlcyB0byByZWFkCi0gKi8KLQotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHJlYWQodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50KQotewotCWludCBzaXplOwotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IGNidWYgYnVmZmVyOwotCXN0cnVjdCBjYnVmICpidWZwID0gJmJ1ZmZlcjsKLQotCXNpemUgPSA0ICsgOCArIDQ7CS8qIGZpZFs0XSBvZmZzZXRbOF0gY291bnRbNF0gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVFJFQUQpOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudHJlYWQuZmlkKTsKLQlwOV9wdXRfaW50NjQoYnVmcCwgb2Zmc2V0LCAmZmMtPnBhcmFtcy50cmVhZC5vZmZzZXQpOwotCXA5X3B1dF9pbnQzMihidWZwLCBjb3VudCwgJmZjLT5wYXJhbXMudHJlYWQuY291bnQpOwotCi0JaWYgKGJ1Zl9jaGVja19vdmVyZmxvdyhidWZwKSkgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gZmM7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NyZWF0ZV90cmVhZCk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3R3cml0ZSAtIGFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIFRfV1JJVEUgcmVxdWVzdCBmcm9tIHRoZSBrZXJuZWwKLSAqIEBmaWQ6IGhhbmRsZSBvZiB0aGUgZmlsZSB3ZSBhcmUgdHJ5aW5nIHRvIHdyaXRlCi0gKiBAb2Zmc2V0OiBvZmZzZXQgdG8gc3RhcnQgd3JpdGluZyBhdAotICogQGNvdW50OiBob3cgbWFueSBieXRlcyB0byB3cml0ZQotICogQGRhdGE6IGRhdGEgdG8gd3JpdGUKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGEgcmVxdXN0IHdpdGggZGF0YSBidWZmZXJzIGZyb20gdGhlIGtlcm5lbAotICogc3VjaCBhcyB0aGUgcGFnZSBjYWNoZS4KLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90d3JpdGUodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50LAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKmRhdGEpCi17Ci0JaW50IHNpemUsIGVycjsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQkvKiBmaWRbNF0gb2Zmc2V0WzhdIGNvdW50WzRdIGRhdGFbY291bnRdICovCi0Jc2l6ZSA9IDQgKyA4ICsgNCArIGNvdW50OwotCWZjID0gcDlfY3JlYXRlX2NvbW1vbihidWZwLCBzaXplLCBQOV9UV1JJVEUpOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudHdyaXRlLmZpZCk7Ci0JcDlfcHV0X2ludDY0KGJ1ZnAsIG9mZnNldCwgJmZjLT5wYXJhbXMudHdyaXRlLm9mZnNldCk7Ci0JcDlfcHV0X2ludDMyKGJ1ZnAsIGNvdW50LCAmZmMtPnBhcmFtcy50d3JpdGUuY291bnQpOwotCWVyciA9IHA5X3B1dF9kYXRhKGJ1ZnAsIGRhdGEsIGNvdW50LCAmZmMtPnBhcmFtcy50d3JpdGUuZGF0YSk7Ci0JaWYgKGVycikgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUihlcnIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdHdyaXRlKTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdHdyaXRlX3UgLSBhbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBUX1dSSVRFIHJlcXVlc3QgZnJvbSB1c2Vyc3BhY2UKLSAqIEBmaWQ6IGhhbmRsZSBvZiB0aGUgZmlsZSB3ZSBhcmUgdHJ5aW5nIHRvIHdyaXRlCi0gKiBAb2Zmc2V0OiBvZmZzZXQgdG8gc3RhcnQgd3JpdGluZyBhdAotICogQGNvdW50OiBob3cgbWFueSBieXRlcyB0byB3cml0ZQotICogQGRhdGE6IGRhdGEgdG8gd3JpdGUKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIGEgcmVxdWVzdCB3aXRoIGRhdGEgYnVmZmVycyBmcm9tIHVzZXJzcGFjZQotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3cml0ZV91KHUzMiBmaWQsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCwKLQkJCQkgICAgICBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSkKLXsKLQlpbnQgc2l6ZSwgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqZmM7Ci0Jc3RydWN0IGNidWYgYnVmZmVyOwotCXN0cnVjdCBjYnVmICpidWZwID0gJmJ1ZmZlcjsKLQotCS8qIGZpZFs0XSBvZmZzZXRbOF0gY291bnRbNF0gZGF0YVtjb3VudF0gKi8KLQlzaXplID0gNCArIDggKyA0ICsgY291bnQ7Ci0JZmMgPSBwOV9jcmVhdGVfY29tbW9uKGJ1ZnAsIHNpemUsIFA5X1RXUklURSk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MzIoYnVmcCwgZmlkLCAmZmMtPnBhcmFtcy50d3JpdGUuZmlkKTsKLQlwOV9wdXRfaW50NjQoYnVmcCwgb2Zmc2V0LCAmZmMtPnBhcmFtcy50d3JpdGUub2Zmc2V0KTsKLQlwOV9wdXRfaW50MzIoYnVmcCwgY291bnQsICZmYy0+cGFyYW1zLnR3cml0ZS5jb3VudCk7Ci0JZXJyID0gcDlfcHV0X3VzZXJfZGF0YShidWZwLCBkYXRhLCBjb3VudCwgJmZjLT5wYXJhbXMudHdyaXRlLmRhdGEpOwotCWlmIChlcnIpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoZXJyKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKSB7Ci0JCWtmcmVlKGZjKTsKLQkJZmMgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLWVycm9yOgotCXJldHVybiBmYzsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY3JlYXRlX3R3cml0ZV91KTsKLQotLyoqCi0gKiBwOV9jcmVhdGVfdGNsdW5rIC0gYWxsb2NhdGUgYSByZXF1ZXN0IHRvIGZvcmdldCBhYm91dCBhIGZpbGUgaGFuZGxlCi0gKiBAZmlkOiBoYW5kbGUgb2YgdGhlIGZpbGUgd2UgY2xvc2luZyBvciBmb3JnZXR0aW5nIGFib3V0Ci0gKgotICogY2x1bmsgaXMgdXNlZCBib3RoIHRvIGNsb3NlIG9wZW4gZmlsZXMgYW5kIHRvIGRpc2NhcmQgdHJhbnNpZW50IGhhbmRsZXMKLSAqIHdoaWNoIG1heSBiZSBjcmVhdGVkIGR1cmluZyBtZXRhLWRhdGEgb3BlcmF0aW9ucyBhbmQgaGllcmFyY2h5IHRyYXZlcnNhbC4KLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90Y2x1bmsodTMyIGZpZCkKLXsKLQlpbnQgc2l6ZTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQlzaXplID0gNDsJCS8qIGZpZFs0XSAqLwotCWZjID0gcDlfY3JlYXRlX2NvbW1vbihidWZwLCBzaXplLCBQOV9UQ0xVTkspOwotCWlmIChJU19FUlIoZmMpKQotCQlnb3RvIGVycm9yOwotCi0JcDlfcHV0X2ludDMyKGJ1ZnAsIGZpZCwgJmZjLT5wYXJhbXMudGNsdW5rLmZpZCk7Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKSB7Ci0JCWtmcmVlKGZjKTsKLQkJZmMgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLWVycm9yOgotCXJldHVybiBmYzsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY3JlYXRlX3RjbHVuayk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3RyZW1vdmUgLSBhbGxvY2F0ZSBhbmQgY3JlYXRlIGEgcmVxdWVzdCB0byByZW1vdmUgYSBmaWxlCi0gKiBAZmlkOiBoYW5kbGUgb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IHdlIGFyZSByZW1vdmluZwotICoKLSAqLwotCi1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90cmVtb3ZlKHUzMiBmaWQpCi17Ci0JaW50IHNpemU7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0Jc2l6ZSA9IDQ7CQkvKiBmaWRbNF0gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVFJFTU9WRSk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MzIoYnVmcCwgZmlkLCAmZmMtPnBhcmFtcy50cmVtb3ZlLmZpZCk7Ci0KLQlpZiAoYnVmX2NoZWNrX292ZXJmbG93KGJ1ZnApKSB7Ci0JCWtmcmVlKGZjKTsKLQkJZmMgPSBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLWVycm9yOgotCXJldHVybiBmYzsKLX0KLUVYUE9SVF9TWU1CT0wocDlfY3JlYXRlX3RyZW1vdmUpOwotCi0vKioKLSAqIHA5X2NyZWF0ZV90c3RhdCAtIGFsbG9jYXRlIGFuZCBwb3B1bGF0ZSBhIHJlcXVlc3QgZm9yIGF0dHJpYnV0ZXMKLSAqIEBmaWQ6IGhhbmRsZSBvZiB0aGUgZmlsZSBvciBkaXJlY3Rvcnkgd2UgYXJlIHRyeWluZyB0byBnZXQgdGhlIGF0dHJpYnV0ZXMgb2YKLSAqCi0gKi8KLQotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHN0YXQodTMyIGZpZCkKLXsKLQlpbnQgc2l6ZTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKmZjOwotCXN0cnVjdCBjYnVmIGJ1ZmZlcjsKLQlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7Ci0KLQlzaXplID0gNDsJCS8qIGZpZFs0XSAqLwotCWZjID0gcDlfY3JlYXRlX2NvbW1vbihidWZwLCBzaXplLCBQOV9UU1RBVCk7Ci0JaWYgKElTX0VSUihmYykpCi0JCWdvdG8gZXJyb3I7Ci0KLQlwOV9wdXRfaW50MzIoYnVmcCwgZmlkLCAmZmMtPnBhcmFtcy50c3RhdC5maWQpOwotCi0JaWYgKGJ1Zl9jaGVja19vdmVyZmxvdyhidWZwKSkgewotCQlrZnJlZShmYyk7Ci0JCWZjID0gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci1lcnJvcjoKLQlyZXR1cm4gZmM7Ci19Ci1FWFBPUlRfU1lNQk9MKHA5X2NyZWF0ZV90c3RhdCk7Ci0KLS8qKgotICogcDlfY3JlYXRlX3RzdGF0IC0gYWxsb2NhdGUgYW5kIHBvcHVsYXRlIGEgcmVxdWVzdCB0byBjaGFuZ2UgYXR0cmlidXRlcwotICogQGZpZDogaGFuZGxlIG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSB3ZSBhcmUgdHJ5aW5nIHRvIGNoYW5nZQotICogQHdzdGF0OiAmcDlfc3RhdCBzdHJ1Y3R1cmUgd2l0aCBhdHRyaWJ1dGVzIHdlIHdpc2ggdG8gc2V0Ci0gKiBAZG90dTogOXAyMDAwLnUgZW5hYmxlZCBmbGFnCi0gKgotICovCi0KLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3c3RhdCh1MzIgZmlkLCBzdHJ1Y3QgcDlfd3N0YXQgKndzdGF0LAotCQkJCSAgICAgIGludCBkb3R1KQotewotCWludCBzaXplLCBzdGF0c3o7Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgY2J1ZiBidWZmZXI7Ci0Jc3RydWN0IGNidWYgKmJ1ZnAgPSAmYnVmZmVyOwotCi0Jc3RhdHN6ID0gcDlfc2l6ZV93c3RhdCh3c3RhdCwgZG90dSk7Ci0Jc2l6ZSA9IDQgKyAyICsgMiArIHN0YXRzejsJLyogZmlkWzRdIHN0YXRbbl0gKi8KLQlmYyA9IHA5X2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgUDlfVFdTVEFUKTsKLQlpZiAoSVNfRVJSKGZjKSkKLQkJZ290byBlcnJvcjsKLQotCXA5X3B1dF9pbnQzMihidWZwLCBmaWQsICZmYy0+cGFyYW1zLnR3c3RhdC5maWQpOwotCWJ1Zl9wdXRfaW50MTYoYnVmcCwgc3RhdHN6ICsgMik7Ci0JcDlfcHV0X3dzdGF0KGJ1ZnAsIHdzdGF0LCAmZmMtPnBhcmFtcy50d3N0YXQuc3RhdCwgc3RhdHN6LCBkb3R1KTsKLQotCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKLQkJa2ZyZWUoZmMpOwotCQlmYyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIGZjOwotfQotRVhQT1JUX1NZTUJPTChwOV9jcmVhdGVfdHdzdGF0KTsKLQpkaWZmIC0tZ2l0IGEvbmV0LzlwL2ZjcHJpbnQuYyBiL25ldC85cC9mY3ByaW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZGQ4ZTIuLjAwMDAwMDAKLS0tIGEvbmV0LzlwL2ZjcHJpbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDM2NiArMCwwIEBACi0vKgotICogIG5ldC85cC9mY3ByaW50LmMKLSAqCi0gKiAgUHJpbnQgOVAgY2FsbC4KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IGJ5IExhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0bzoKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSAqICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yCi0gKiAgQm9zdG9uLCBNQSAgMDIxMTEtMTMwMSAgVVNBCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lkci5oPgotI2luY2x1ZGUgPG5ldC85cC85cC5oPgotCi0jaWZkZWYgQ09ORklHX05FVF85UF9ERUJVRwotCi1zdGF0aWMgaW50Ci1wOV9wcmludHFpZChjaGFyICpidWYsIGludCBidWZsZW4sIHN0cnVjdCBwOV9xaWQgKnEpCi17Ci0JaW50IG47Ci0JY2hhciBiWzEwXTsKLQotCW4gPSAwOwotCWlmIChxLT50eXBlICYgUDlfUVRESVIpCi0JCWJbbisrXSA9ICdkJzsKLQlpZiAocS0+dHlwZSAmIFA5X1FUQVBQRU5EKQotCQliW24rK10gPSAnYSc7Ci0JaWYgKHEtPnR5cGUgJiBQOV9RVEFVVEgpCi0JCWJbbisrXSA9ICdBJzsKLQlpZiAocS0+dHlwZSAmIFA5X1FURVhDTCkKLQkJYltuKytdID0gJ2wnOwotCWlmIChxLT50eXBlICYgUDlfUVRUTVApCi0JCWJbbisrXSA9ICd0JzsKLQlpZiAocS0+dHlwZSAmIFA5X1FUU1lNTElOSykKLQkJYltuKytdID0gJ0wnOwotCWJbbl0gPSAnXDAnOwotCi0JcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIiglLjE2bGx4ICV4ICVzKSIsCi0JCQkJCShsb25nIGxvbmcgaW50KSBxLT5wYXRoLCBxLT52ZXJzaW9uLCBiKTsKLX0KLQotc3RhdGljIGludAotcDlfcHJpbnRwZXJtKGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgaW50IHBlcm0pCi17Ci0JaW50IG47Ci0JY2hhciBiWzE1XTsKLQotCW4gPSAwOwotCWlmIChwZXJtICYgUDlfRE1ESVIpCi0JCWJbbisrXSA9ICdkJzsKLQlpZiAocGVybSAmIFA5X0RNQVBQRU5EKQotCQliW24rK10gPSAnYSc7Ci0JaWYgKHBlcm0gJiBQOV9ETUFVVEgpCi0JCWJbbisrXSA9ICdBJzsKLQlpZiAocGVybSAmIFA5X0RNRVhDTCkKLQkJYltuKytdID0gJ2wnOwotCWlmIChwZXJtICYgUDlfRE1UTVApCi0JCWJbbisrXSA9ICd0JzsKLQlpZiAocGVybSAmIFA5X0RNREVWSUNFKQotCQliW24rK10gPSAnRCc7Ci0JaWYgKHBlcm0gJiBQOV9ETVNPQ0tFVCkKLQkJYltuKytdID0gJ1MnOwotCWlmIChwZXJtICYgUDlfRE1OQU1FRFBJUEUpCi0JCWJbbisrXSA9ICdQJzsKLQlpZiAocGVybSAmIFA5X0RNU1lNTElOSykKLQkJYltuKytdID0gJ0wnOwotCWJbbl0gPSAnXDAnOwotCi0JcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzJTAzbyIsIGIsIHBlcm0mMDc3KTsKLX0KLQotc3RhdGljIGludAotcDlfcHJpbnRzdGF0KGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbiwgc3RydWN0IHA5X3N0YXQgKnN0LCBpbnQgZXh0ZW5kZWQpCi17Ci0JaW50IG47Ci0KLQluID0gc2NucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJyUuKnMnICclLipzJyIsIHN0LT5uYW1lLmxlbiwKLQkJc3QtPm5hbWUuc3RyLCBzdC0+dWlkLmxlbiwgc3QtPnVpZC5zdHIpOwotCWlmIChleHRlbmRlZCkKLQkJbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiKCVkKSIsIHN0LT5uX3VpZCk7Ci0KLQluICs9IHNjbnByaW50ZihidWYrbiwgYnVmbGVuLW4sICIgJyUuKnMnIiwgc3QtPmdpZC5sZW4sIHN0LT5naWQuc3RyKTsKLQlpZiAoZXh0ZW5kZWQpCi0JCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiglZCkiLCBzdC0+bl9naWQpOwotCi0JbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiICclLipzJyIsIHN0LT5tdWlkLmxlbiwgc3QtPm11aWQuc3RyKTsKLQlpZiAoZXh0ZW5kZWQpCi0JCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiglZCkiLCBzdC0+bl9tdWlkKTsKLQotCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiBxICIpOwotCW4gKz0gcDlfcHJpbnRxaWQoYnVmK24sIGJ1Zmxlbi1uLCAmc3QtPnFpZCk7Ci0JbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiIG0gIik7Ci0JbiArPSBwOV9wcmludHBlcm0oYnVmK24sIGJ1Zmxlbi1uLCBzdC0+bW9kZSk7Ci0JbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiIGF0ICVkIG10ICVkIGwgJWxsZCIsCi0JCXN0LT5hdGltZSwgc3QtPm10aW1lLCAobG9uZyBsb25nIGludCkgc3QtPmxlbmd0aCk7Ci0KLQlpZiAoZXh0ZW5kZWQpCi0JCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiBleHQgJyUuKnMnIiwKLQkJCXN0LT5leHRlbnNpb24ubGVuLCBzdC0+ZXh0ZW5zaW9uLnN0cik7Ci0KLQlyZXR1cm4gbjsKLX0KLQotc3RhdGljIGludAotcDlfZHVtcGRhdGEoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1OCAqZGF0YSwgaW50IGRhdGFsZW4pCi17Ci0JaW50IGksIG47Ci0KLQlpID0gbiA9IDA7Ci0Jd2hpbGUgKGkgPCBkYXRhbGVuKSB7Ci0JCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIGJ1ZmxlbiAtIG4sICIlMDJ4IiwgZGF0YVtpXSk7Ci0JCWlmIChpJTQgPT0gMykKLQkJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIGJ1ZmxlbiAtIG4sICIgIik7Ci0JCWlmIChpJTMyID09IDMxKQotCQkJbiArPSBzY25wcmludGYoYnVmICsgbiwgYnVmbGVuIC0gbiwgIlxuIik7Ci0KLQkJaSsrOwotCX0KLQluICs9IHNjbnByaW50ZihidWYgKyBuLCBidWZsZW4gLSBuLCAiXG4iKTsKLQotCXJldHVybiBuOwotfQotCi1zdGF0aWMgaW50Ci1wOV9wcmludGRhdGEoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1OCAqZGF0YSwgaW50IGRhdGFsZW4pCi17Ci0JcmV0dXJuIHA5X2R1bXBkYXRhKGJ1ZiwgYnVmbGVuLCBkYXRhLCBkYXRhbGVuIDwgMTY/ZGF0YWxlbjoxNik7Ci19Ci0KLS8qKgotICogcDlfcHJpbnRmY2FsbCAtIGRlY29kZSBhbmQgcHJpbnQgYSBwcm90b2NvbCBzdHJ1Y3R1cmUgaW50byBhIGJ1ZmZlcgotICogQGJ1ZjogYnVmZmVyIHRvIGRlcG9zaXQgZGVjb2RlZCBzdHJ1Y3R1cmUgaW50bwotICogQGJ1ZmxlbjogYXZhaWxhYmxlIHNwYWNlIGluIGJ1ZmZlcgotICogQGZjOiBwcm90b2NvbCBycGMgc3RydWN0dXJlIG9mIHR5cGUgJnA5X2ZjYWxsCi0gKiBAZXh0ZW5kZWQ6IHdoZXRoZXIgb3Igbm90IHNlc3Npb24gaXMgb3BlcmF0aW5nIHdpdGggZXh0ZW5kZWQgcHJvdG9jb2wKLSAqLwotCi1pbnQKLXA5X3ByaW50ZmNhbGwoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgcDlfZmNhbGwgKmZjLCBpbnQgZXh0ZW5kZWQpCi17Ci0JaW50IGksIHJldCwgdHlwZSwgdGFnOwotCi0JaWYgKCFmYykKLQkJcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIjxOVUxMPiIpOwotCi0JdHlwZSA9IGZjLT5pZDsKLQl0YWcgPSBmYy0+dGFnOwotCi0JcmV0ID0gMDsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIFA5X1RWRVJTSU9OOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCi0JCQkJIlR2ZXJzaW9uIHRhZyAldSBtc2l6ZSAldSB2ZXJzaW9uICclLipzJyIsIHRhZywKLQkJCQlmYy0+cGFyYW1zLnR2ZXJzaW9uLm1zaXplLAotCQkJCWZjLT5wYXJhbXMudHZlcnNpb24udmVyc2lvbi5sZW4sCi0JCQkJZmMtPnBhcmFtcy50dmVyc2lvbi52ZXJzaW9uLnN0cik7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9SVkVSU0lPTjoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCSJSdmVyc2lvbiB0YWcgJXUgbXNpemUgJXUgdmVyc2lvbiAnJS4qcyciLCB0YWcsCi0JCQkJZmMtPnBhcmFtcy5ydmVyc2lvbi5tc2l6ZSwKLQkJCQlmYy0+cGFyYW1zLnJ2ZXJzaW9uLnZlcnNpb24ubGVuLAotCQkJCWZjLT5wYXJhbXMucnZlcnNpb24udmVyc2lvbi5zdHIpOwotCQlicmVhazsKLQotCWNhc2UgUDlfVEFVVEg6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKLQkJCSJUYXV0aCB0YWcgJXUgYWZpZCAlZCB1bmFtZSAnJS4qcycgYW5hbWUgJyUuKnMnIiwgdGFnLAotCQkJZmMtPnBhcmFtcy50YXV0aC5hZmlkLCBmYy0+cGFyYW1zLnRhdXRoLnVuYW1lLmxlbiwKLQkJCWZjLT5wYXJhbXMudGF1dGgudW5hbWUuc3RyLCBmYy0+cGFyYW1zLnRhdXRoLmFuYW1lLmxlbiwKLQkJCWZjLT5wYXJhbXMudGF1dGguYW5hbWUuc3RyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JBVVRIOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSYXV0aCB0YWcgJXUgcWlkICIsIHRhZyk7Ci0JCXA5X3ByaW50cWlkKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICZmYy0+cGFyYW1zLnJhdXRoLnFpZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9UQVRUQUNIOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCi0JCSAiVGF0dGFjaCB0YWcgJXUgZmlkICVkIGFmaWQgJWQgdW5hbWUgJyUuKnMnIGFuYW1lICclLipzJyIsIHRhZywKLQkJIGZjLT5wYXJhbXMudGF0dGFjaC5maWQsIGZjLT5wYXJhbXMudGF0dGFjaC5hZmlkLAotCQkgZmMtPnBhcmFtcy50YXR0YWNoLnVuYW1lLmxlbiwgZmMtPnBhcmFtcy50YXR0YWNoLnVuYW1lLnN0ciwKLQkJIGZjLT5wYXJhbXMudGF0dGFjaC5hbmFtZS5sZW4sIGZjLT5wYXJhbXMudGF0dGFjaC5hbmFtZS5zdHIpOwotCQlicmVhazsKLQotCWNhc2UgUDlfUkFUVEFDSDoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUmF0dGFjaCB0YWcgJXUgcWlkICIsCi0JCQkJCQkJCQl0YWcpOwotCQlwOV9wcmludHFpZChidWYrcmV0LCBidWZsZW4tcmV0LCAmZmMtPnBhcmFtcy5yYXR0YWNoLnFpZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9SRVJST1I6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKLQkJCQkiUmVycm9yIHRhZyAldSBlbmFtZSAnJS4qcyciLCB0YWcsCi0JCQkJZmMtPnBhcmFtcy5yZXJyb3IuZXJyb3IubGVuLAotCQkJCWZjLT5wYXJhbXMucmVycm9yLmVycm9yLnN0cik7Ci0JCWlmIChleHRlbmRlZCkKLQkJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIiBlY29kZSAlZFxuIiwKLQkJCQlmYy0+cGFyYW1zLnJlcnJvci5lcnJubyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9URkxVU0g6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlRmbHVzaCB0YWcgJXUgb2xkdGFnICV1IiwKLQkJCXRhZywgZmMtPnBhcmFtcy50Zmx1c2gub2xkdGFnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JGTFVTSDoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUmZsdXNoIHRhZyAldSIsIHRhZyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9UV0FMSzoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJIlR3YWxrIHRhZyAldSBmaWQgJWQgbmV3ZmlkICVkIG53bmFtZSAlZCIsIHRhZywKLQkJCWZjLT5wYXJhbXMudHdhbGsuZmlkLCBmYy0+cGFyYW1zLnR3YWxrLm5ld2ZpZCwKLQkJCWZjLT5wYXJhbXMudHdhbGsubnduYW1lKTsKLQkJZm9yIChpID0gMDsgaSA8IGZjLT5wYXJhbXMudHdhbGsubnduYW1lOyBpKyspCi0JCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICIgJyUuKnMnIiwKLQkJCQlmYy0+cGFyYW1zLnR3YWxrLnduYW1lc1tpXS5sZW4sCi0JCQkJZmMtPnBhcmFtcy50d2Fsay53bmFtZXNbaV0uc3RyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JXQUxLOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSd2FsayB0YWcgJXUgbndxaWQgJWQiLAotCQkJdGFnLCBmYy0+cGFyYW1zLnJ3YWxrLm53cWlkKTsKLQkJZm9yIChpID0gMDsgaSA8IGZjLT5wYXJhbXMucndhbGsubndxaWQ7IGkrKykKLQkJCXJldCArPSBwOV9wcmludHFpZChidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCSZmYy0+cGFyYW1zLnJ3YWxrLndxaWRzW2ldKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1RPUEVOOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCi0JCQkiVG9wZW4gdGFnICV1IGZpZCAlZCBtb2RlICVkIiwgdGFnLAotCQkJZmMtPnBhcmFtcy50b3Blbi5maWQsIGZjLT5wYXJhbXMudG9wZW4ubW9kZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9ST1BFTjoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUm9wZW4gdGFnICV1IiwgdGFnKTsKLQkJcmV0ICs9IHA5X3ByaW50cWlkKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICZmYy0+cGFyYW1zLnJvcGVuLnFpZCk7Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIiBpb3VuaXQgJWQiLAotCQkJZmMtPnBhcmFtcy5yb3Blbi5pb3VuaXQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfVENSRUFURToKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJIlRjcmVhdGUgdGFnICV1IGZpZCAlZCBuYW1lICclLipzJyBwZXJtICIsIHRhZywKLQkJCWZjLT5wYXJhbXMudGNyZWF0ZS5maWQsIGZjLT5wYXJhbXMudGNyZWF0ZS5uYW1lLmxlbiwKLQkJCWZjLT5wYXJhbXMudGNyZWF0ZS5uYW1lLnN0cik7Ci0KLQkJcmV0ICs9IHA5X3ByaW50cGVybShidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCQkJZmMtPnBhcmFtcy50Y3JlYXRlLnBlcm0pOwotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICIgbW9kZSAlZCIsCi0JCQlmYy0+cGFyYW1zLnRjcmVhdGUubW9kZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9SQ1JFQVRFOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSY3JlYXRlIHRhZyAldSIsIHRhZyk7Ci0JCXJldCArPSBwOV9wcmludHFpZChidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCQkJJmZjLT5wYXJhbXMucmNyZWF0ZS5xaWQpOwotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICIgaW91bml0ICVkIiwKLQkJCWZjLT5wYXJhbXMucmNyZWF0ZS5pb3VuaXQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfVFJFQUQ6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKLQkJCSJUcmVhZCB0YWcgJXUgZmlkICVkIG9mZnNldCAlbGxkIGNvdW50ICV1IiwgdGFnLAotCQkJZmMtPnBhcmFtcy50cmVhZC5maWQsCi0JCQkobG9uZyBsb25nIGludCkgZmMtPnBhcmFtcy50cmVhZC5vZmZzZXQsCi0JCQlmYy0+cGFyYW1zLnRyZWFkLmNvdW50KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JSRUFEOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCi0JCQkiUnJlYWQgdGFnICV1IGNvdW50ICV1IGRhdGEgIiwgdGFnLAotCQkJZmMtPnBhcmFtcy5ycmVhZC5jb3VudCk7Ci0JCXJldCArPSBwOV9wcmludGRhdGEoYnVmK3JldCwgYnVmbGVuLXJldCwgZmMtPnBhcmFtcy5ycmVhZC5kYXRhLAotCQkJZmMtPnBhcmFtcy5ycmVhZC5jb3VudCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9UV1JJVEU6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKLQkJCSJUd3JpdGUgdGFnICV1IGZpZCAlZCBvZmZzZXQgJWxsZCBjb3VudCAldSBkYXRhICIsCi0JCQl0YWcsIGZjLT5wYXJhbXMudHdyaXRlLmZpZCwKLQkJCShsb25nIGxvbmcgaW50KSBmYy0+cGFyYW1zLnR3cml0ZS5vZmZzZXQsCi0JCQlmYy0+cGFyYW1zLnR3cml0ZS5jb3VudCk7Ci0JCXJldCArPSBwOV9wcmludGRhdGEoYnVmK3JldCwgYnVmbGVuLXJldCwgZmMtPnBhcmFtcy50d3JpdGUuZGF0YSwKLQkJCWZjLT5wYXJhbXMudHdyaXRlLmNvdW50KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1JXUklURToKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUndyaXRlIHRhZyAldSBjb3VudCAldSIsCi0JCQl0YWcsIGZjLT5wYXJhbXMucndyaXRlLmNvdW50KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1RDTFVOSzoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiVGNsdW5rIHRhZyAldSBmaWQgJWQiLAotCQkJdGFnLCBmYy0+cGFyYW1zLnRjbHVuay5maWQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfUkNMVU5LOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSY2x1bmsgdGFnICV1IiwgdGFnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1RSRU1PVkU6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlRyZW1vdmUgdGFnICV1IGZpZCAlZCIsCi0JCQl0YWcsIGZjLT5wYXJhbXMudHJlbW92ZS5maWQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfUlJFTU9WRToKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUnJlbW92ZSB0YWcgJXUiLCB0YWcpOwotCQlicmVhazsKLQotCWNhc2UgUDlfVFNUQVQ6Ci0JCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlRzdGF0IHRhZyAldSBmaWQgJWQiLAotCQkJdGFnLCBmYy0+cGFyYW1zLnRzdGF0LmZpZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQOV9SU1RBVDoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUnN0YXQgdGFnICV1ICIsIHRhZyk7Ci0JCXJldCArPSBwOV9wcmludHN0YXQoYnVmK3JldCwgYnVmbGVuLXJldCwgJmZjLT5wYXJhbXMucnN0YXQuc3RhdCwKLQkJCWV4dGVuZGVkKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFA5X1RXU1RBVDoKLQkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiVHdzdGF0IHRhZyAldSBmaWQgJWQgIiwKLQkJCXRhZywgZmMtPnBhcmFtcy50d3N0YXQuZmlkKTsKLQkJcmV0ICs9IHA5X3ByaW50c3RhdChidWYrcmV0LCBidWZsZW4tcmV0LAotCQkJCQkmZmMtPnBhcmFtcy50d3N0YXQuc3RhdCwgZXh0ZW5kZWQpOwotCQlicmVhazsKLQotCWNhc2UgUDlfUldTVEFUOgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSd3N0YXQgdGFnICV1IiwgdGFnKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJ1bmtub3duIHR5cGUgJWQiLCB0eXBlKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLSNlbHNlCi1pbnQKLXA5X3ByaW50ZmNhbGwoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgcDlfZmNhbGwgKmZjLCBpbnQgZXh0ZW5kZWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX05FVF85UF9ERUJVRyAqLwotRVhQT1JUX1NZTUJPTChwOV9wcmludGZjYWxsKTsKLQpkaWZmIC0tZ2l0IGEvbmV0LzlwL21vZC5jIGIvbmV0LzlwL21vZC5jCmluZGV4IDEwODRmZWIuLmNmOGE0MTIgMTAwNjQ0Ci0tLSBhL25ldC85cC9tb2QuYworKysgYi9uZXQvOXAvbW9kLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxuZXQvOXAvOXAuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgorI2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KICNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9uZXQvOXAvcHJvdG9jb2wuYyBiL25ldC85cC9wcm90b2NvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YmU1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvOXAvcHJvdG9jb2wuYwpAQCAtMCwwICsxLDU1OCBAQAorLyoKKyAqIG5ldC85cC9wcm90b2NvbC5jCisgKgorICogOVAgUHJvdG9jb2wgU3VwcG9ydCBDb2RlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBieSBFcmljIFZhbiBIZW5zYmVyZ2VuIDxlcmljdmhAZ21haWwuY29tPgorICoKKyAqICBCYXNlIG9uIGNvZGUgZnJvbSBBbnRob255IExpZ3VvcmkgPGFsaWd1b3JpQHVzLmlibS5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IGJ5IElCTSwgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvOgorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICogIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IKKyAqICBCb3N0b24sIE1BICAwMjExMS0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bmV0LzlwLzlwLmg+CisjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgorI2luY2x1ZGUgInByb3RvY29sLmgiCisKKyNpZm5kZWYgTUlOCisjZGVmaW5lIE1JTihhLCBiKSAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCisjZW5kaWYKKworI2lmbmRlZiBNQVgKKyNkZWZpbmUgTUFYKGEsIGIpICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkKKyNlbmRpZgorCisjaWZuZGVmIG9mZnNldF9vZgorI2RlZmluZSBvZmZzZXRfb2YodHlwZSwgbWVtYikgXAorCSgodW5zaWduZWQgbG9uZykoJigodHlwZSAqKTApLT5tZW1iKSkKKyNlbmRpZgorI2lmbmRlZiBjb250YWluZXJfb2YKKyNkZWZpbmUgY29udGFpbmVyX29mKG9iaiwgdHlwZSwgbWVtYikgXAorCSgodHlwZSAqKSgoKGNoYXIgKilvYmopIC0gb2Zmc2V0X29mKHR5cGUsIG1lbWIpKSkKKyNlbmRpZgorCitzdGF0aWMgaW50CitwOXBkdV93cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCit2b2lkCitwOXBkdV9kdW1wKGludCB3YXksIHN0cnVjdCBwOV9mY2FsbCAqcGR1KQoreworCWludCBpLCBuOworCXU4ICpkYXRhID0gcGR1LT5zZGF0YTsKKwlpbnQgZGF0YWxlbiA9IHBkdS0+c2l6ZTsKKwljaGFyIGJ1ZlsyNTVdOworCWludCBidWZsZW4gPSAyNTU7CisKKwlpID0gbiA9IDA7CisJaWYgKGRhdGFsZW4gPiAoYnVmbGVuLTE2KSkKKwkJZGF0YWxlbiA9IGJ1Zmxlbi0xNjsKKwl3aGlsZSAoaSA8IGRhdGFsZW4pIHsKKwkJbiArPSBzY25wcmludGYoYnVmICsgbiwgYnVmbGVuIC0gbiwgIiUwMnggIiwgZGF0YVtpXSk7CisJCWlmIChpJTQgPT0gMykKKwkJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIGJ1ZmxlbiAtIG4sICIgIik7CisJCWlmIChpJTMyID09IDMxKQorCQkJbiArPSBzY25wcmludGYoYnVmICsgbiwgYnVmbGVuIC0gbiwgIlxuIik7CisKKwkJaSsrOworCX0KKwluICs9IHNjbnByaW50ZihidWYgKyBuLCBidWZsZW4gLSBuLCAiXG4iKTsKKworCWlmICh3YXkpCisJCVA5X0RQUklOVEsoUDlfREVCVUdfUEtULCAiW1tbKCVkKSAlc1xuIiwgZGF0YWxlbiwgYnVmKTsKKwllbHNlCisJCVA5X0RQUklOVEsoUDlfREVCVUdfUEtULCAiXV1dKCVkKSAlc1xuIiwgZGF0YWxlbiwgYnVmKTsKK30KK0VYUE9SVF9TWU1CT0wocDlwZHVfZHVtcCk7CisKK3ZvaWQgcDlzdGF0X2ZyZWUoc3RydWN0IHA5X3dzdGF0ICpzdGJ1ZikKK3sKKwlrZnJlZShzdGJ1Zi0+bmFtZSk7CisJa2ZyZWUoc3RidWYtPnVpZCk7CisJa2ZyZWUoc3RidWYtPmdpZCk7CisJa2ZyZWUoc3RidWYtPm11aWQpOworCWtmcmVlKHN0YnVmLT5leHRlbnNpb24pOworfQorRVhQT1JUX1NZTUJPTChwOXN0YXRfZnJlZSk7CisKK3N0YXRpYyBzaXplX3QgcGR1X3JlYWQoc3RydWN0IHA5X2ZjYWxsICpwZHUsIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKQoreworCXNpemVfdCBsZW4gPSBNSU4ocGR1LT5zaXplIC0gcGR1LT5vZmZzZXQsIHNpemUpOworCW1lbWNweShkYXRhLCAmcGR1LT5zZGF0YVtwZHUtPm9mZnNldF0sIGxlbik7CisJcGR1LT5vZmZzZXQgKz0gbGVuOworCXJldHVybiBzaXplIC0gbGVuOworfQorCitzdGF0aWMgc2l6ZV90IHBkdV93cml0ZShzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IGxlbiA9IE1JTihwZHUtPmNhcGFjaXR5IC0gcGR1LT5zaXplLCBzaXplKTsKKwltZW1jcHkoJnBkdS0+c2RhdGFbcGR1LT5zaXplXSwgZGF0YSwgbGVuKTsKKwlwZHUtPnNpemUgKz0gbGVuOworCXJldHVybiBzaXplIC0gbGVuOworfQorCitzdGF0aWMgc2l6ZV90CitwZHVfd3JpdGVfdShzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgY29uc3QgY2hhciBfX3VzZXIgKnVkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3QgbGVuID0gTUlOKHBkdS0+Y2FwYWNpdHkgLSBwZHUtPnNpemUsIHNpemUpOworCWludCBlcnIgPSBjb3B5X2Zyb21fdXNlcigmcGR1LT5zZGF0YVtwZHUtPnNpemVdLCB1ZGF0YSwgbGVuKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJwZHVfd3JpdGVfdSByZXR1cm5pbmc6ICVkXG4iLCBlcnIpOworCisJcGR1LT5zaXplICs9IGxlbjsKKwlyZXR1cm4gc2l6ZSAtIGxlbjsKK30KKworLyoKKwliIC0gaW50OF90CisJdyAtIGludDE2X3QKKwlkIC0gaW50MzJfdAorCXEgLSBpbnQ2NF90CisJcyAtIHN0cmluZworCVMgLSBzdGF0CisJUSAtIHFpZAorCUQgLSBkYXRhIGJsb2IgKGludDMyX3Qgc2l6ZSBmb2xsb3dlZCBieSB2b2lkICosIHJlc3VsdHMgYXJlIG5vdCBmcmVlZCkKKwlUIC0gYXJyYXkgb2Ygc3RyaW5ncyAoaW50MTZfdCBjb3VudCwgZm9sbG93ZWQgYnkgc3RyaW5ncykKKwlSIC0gYXJyYXkgb2YgcWlkcyAoaW50MTZfdCBjb3VudCwgZm9sbG93ZWQgYnkgcWlkcykKKwk/IC0gaWYgb3B0aW9uYWwgPSAxLCBjb250aW51ZSBwYXJzaW5nCisqLworCitzdGF0aWMgaW50CitwOXBkdV92cmVhZGYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWNvbnN0IGNoYXIgKnB0cjsKKwlpbnQgZXJyY29kZSA9IDA7CisKKwlmb3IgKHB0ciA9IGZtdDsgKnB0cjsgcHRyKyspIHsKKwkJc3dpdGNoICgqcHRyKSB7CisJCWNhc2UgJ2InOnsKKwkJCQlpbnQ4X3QgKnZhbCA9IHZhX2FyZyhhcCwgaW50OF90ICopOworCQkJCWlmIChwZHVfcmVhZChwZHUsIHZhbCwgc2l6ZW9mKCp2YWwpKSkgeworCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3cnOnsKKwkJCQlpbnQxNl90ICp2YWwgPSB2YV9hcmcoYXAsIGludDE2X3QgKik7CisJCQkJaWYgKHBkdV9yZWFkKHBkdSwgdmFsLCBzaXplb2YoKnZhbCkpKSB7CisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJKnZhbCA9IGNwdV90b19sZTE2KCp2YWwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ2QnOnsKKwkJCQlpbnQzMl90ICp2YWwgPSB2YV9hcmcoYXAsIGludDMyX3QgKik7CisJCQkJaWYgKHBkdV9yZWFkKHBkdSwgdmFsLCBzaXplb2YoKnZhbCkpKSB7CisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJKnZhbCA9IGNwdV90b19sZTMyKCp2YWwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3EnOnsKKwkJCQlpbnQ2NF90ICp2YWwgPSB2YV9hcmcoYXAsIGludDY0X3QgKik7CisJCQkJaWYgKHBkdV9yZWFkKHBkdSwgdmFsLCBzaXplb2YoKnZhbCkpKSB7CisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJKnZhbCA9IGNwdV90b19sZTY0KCp2YWwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3MnOnsKKwkJCQljaGFyICoqcHRyID0gdmFfYXJnKGFwLCBjaGFyICoqKTsKKwkJCQlpbnQxNl90IGxlbjsKKwkJCQlpbnQgc2l6ZTsKKworCQkJCWVycmNvZGUgPSBwOXBkdV9yZWFkZihwZHUsIG9wdGlvbmFsLCAidyIsICZsZW4pOworCQkJCWlmIChlcnJjb2RlKQorCQkJCQlicmVhazsKKworCQkJCXNpemUgPSBNQVgobGVuLCAwKTsKKworCQkJCSpwdHIgPSBrbWFsbG9jKHNpemUgKyAxLCBHRlBfS0VSTkVMKTsKKwkJCQlpZiAoKnB0ciA9PSBOVUxMKSB7CisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKHBkdV9yZWFkKHBkdSwgKnB0ciwgc2l6ZSkpIHsKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQkJCWtmcmVlKCpwdHIpOworCQkJCQkqcHRyID0gTlVMTDsKKwkJCQl9IGVsc2UKKwkJCQkJKCpwdHIpW3NpemVdID0gMDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdRJzp7CisJCQkJc3RydWN0IHA5X3FpZCAqcWlkID0KKwkJCQkgICAgdmFfYXJnKGFwLCBzdHJ1Y3QgcDlfcWlkICopOworCisJCQkJZXJyY29kZSA9IHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsICJiZHEiLAorCQkJCQkJICAgICAgJnFpZC0+dHlwZSwgJnFpZC0+dmVyc2lvbiwKKwkJCQkJCSAgICAgICZxaWQtPnBhdGgpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1MnOnsKKwkJCQlzdHJ1Y3QgcDlfd3N0YXQgKnN0YnVmID0KKwkJCQkgICAgdmFfYXJnKGFwLCBzdHJ1Y3QgcDlfd3N0YXQgKik7CisKKwkJCQltZW1zZXQoc3RidWYsIDAsIHNpemVvZihzdHJ1Y3QgcDlfd3N0YXQpKTsKKwkJCQlzdGJ1Zi0+bl91aWQgPSBzdGJ1Zi0+bl9naWQgPSBzdGJ1Zi0+bl9tdWlkID0KKwkJCQkJCQkJCS0xOworCQkJCWVycmNvZGUgPQorCQkJCSAgICBwOXBkdV9yZWFkZihwZHUsIG9wdGlvbmFsLAorCQkJCQkJInd3ZFFkZGRxc3Nzcz9zZGRkIiwKKwkJCQkJCSZzdGJ1Zi0+c2l6ZSwgJnN0YnVmLT50eXBlLAorCQkJCQkJJnN0YnVmLT5kZXYsICZzdGJ1Zi0+cWlkLAorCQkJCQkJJnN0YnVmLT5tb2RlLCAmc3RidWYtPmF0aW1lLAorCQkJCQkJJnN0YnVmLT5tdGltZSwgJnN0YnVmLT5sZW5ndGgsCisJCQkJCQkmc3RidWYtPm5hbWUsICZzdGJ1Zi0+dWlkLAorCQkJCQkJJnN0YnVmLT5naWQsICZzdGJ1Zi0+bXVpZCwKKwkJCQkJCSZzdGJ1Zi0+ZXh0ZW5zaW9uLAorCQkJCQkJJnN0YnVmLT5uX3VpZCwgJnN0YnVmLT5uX2dpZCwKKwkJCQkJCSZzdGJ1Zi0+bl9tdWlkKTsKKwkJCQlpZiAoZXJyY29kZSkKKwkJCQkJcDlzdGF0X2ZyZWUoc3RidWYpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ0QnOnsKKwkJCQlpbnQzMl90ICpjb3VudCA9IHZhX2FyZyhhcCwgaW50MzJfdCAqKTsKKwkJCQl2b2lkICoqZGF0YSA9IHZhX2FyZyhhcCwgdm9pZCAqKik7CisKKwkJCQllcnJjb2RlID0KKwkJCQkgICAgcDlwZHVfcmVhZGYocGR1LCBvcHRpb25hbCwgImQiLCBjb3VudCk7CisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCSpjb3VudCA9CisJCQkJCSAgICBNSU4oKmNvdW50LAorCQkJCQkJcGR1LT5zaXplIC0gcGR1LT5vZmZzZXQpOworCQkJCQkqZGF0YSA9ICZwZHUtPnNkYXRhW3BkdS0+b2Zmc2V0XTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnVCc6eworCQkJCWludDE2X3QgKm53bmFtZSA9IHZhX2FyZyhhcCwgaW50MTZfdCAqKTsKKwkJCQljaGFyICoqKnduYW1lcyA9IHZhX2FyZyhhcCwgY2hhciAqKiopOworCisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsICJ3IiwgbnduYW1lKTsKKwkJCQlpZiAoIWVycmNvZGUpIHsKKwkJCQkJKnduYW1lcyA9CisJCQkJCSAgICBrbWFsbG9jKHNpemVvZihjaGFyICopICogKm53bmFtZSwKKwkJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJCQkJaWYgKCEqd25hbWVzKQorCQkJCQkJZXJyY29kZSA9IC1FTk9NRU07CisJCQkJfQorCisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCWludCBpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCAqbnduYW1lOyBpKyspIHsKKwkJCQkJCWVycmNvZGUgPQorCQkJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsCisJCQkJCQkJCSJzIiwKKwkJCQkJCQkJJigqd25hbWVzKVtpXSk7CisJCQkJCQlpZiAoZXJyY29kZSkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChlcnJjb2RlKSB7CisJCQkJCWlmICgqd25hbWVzKSB7CisJCQkJCQlpbnQgaTsKKworCQkJCQkJZm9yIChpID0gMDsgaSA8ICpud25hbWU7IGkrKykKKwkJCQkJCQlrZnJlZSgoKnduYW1lcylbaV0pOworCQkJCQl9CisJCQkJCWtmcmVlKCp3bmFtZXMpOworCQkJCQkqd25hbWVzID0gTlVMTDsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnUic6eworCQkJCWludDE2X3QgKm53cWlkID0gdmFfYXJnKGFwLCBpbnQxNl90ICopOworCQkJCXN0cnVjdCBwOV9xaWQgKip3cWlkcyA9CisJCQkJICAgIHZhX2FyZyhhcCwgc3RydWN0IHA5X3FpZCAqKik7CisKKwkJCQkqd3FpZHMgPSBOVUxMOworCisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsICJ3IiwgbndxaWQpOworCQkJCWlmICghZXJyY29kZSkgeworCQkJCQkqd3FpZHMgPQorCQkJCQkgICAga21hbGxvYygqbndxaWQgKgorCQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSwKKwkJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJCQkJaWYgKCp3cWlkcyA9PSBOVUxMKQorCQkJCQkJZXJyY29kZSA9IC1FTk9NRU07CisJCQkJfQorCisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCWludCBpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCAqbndxaWQ7IGkrKykgeworCQkJCQkJZXJyY29kZSA9CisJCQkJCQkgICAgcDlwZHVfcmVhZGYocGR1LCBvcHRpb25hbCwKKwkJCQkJCQkJIlEiLAorCQkJCQkJCQkmKCp3cWlkcylbaV0pOworCQkJCQkJaWYgKGVycmNvZGUpCisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoZXJyY29kZSkgeworCQkJCQlrZnJlZSgqd3FpZHMpOworCQkJCQkqd3FpZHMgPSBOVUxMOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCWlmICghb3B0aW9uYWwpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZXJyY29kZSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnJjb2RlOworfQorCitpbnQKK3A5cGR1X3Z3cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWNvbnN0IGNoYXIgKnB0cjsKKwlpbnQgZXJyY29kZSA9IDA7CisKKwlmb3IgKHB0ciA9IGZtdDsgKnB0cjsgcHRyKyspIHsKKwkJc3dpdGNoICgqcHRyKSB7CisJCWNhc2UgJ2InOnsKKwkJCQlpbnQ4X3QgdmFsID0gdmFfYXJnKGFwLCBpbnQpOworCQkJCWlmIChwZHVfd3JpdGUocGR1LCAmdmFsLCBzaXplb2YodmFsKSkpCisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3cnOnsKKwkJCQlpbnQxNl90IHZhbCA9IHZhX2FyZyhhcCwgaW50KTsKKwkJCQlpZiAocGR1X3dyaXRlKHBkdSwgJnZhbCwgc2l6ZW9mKHZhbCkpKQorCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdkJzp7CisJCQkJaW50MzJfdCB2YWwgPSB2YV9hcmcoYXAsIGludDMyX3QpOworCQkJCWlmIChwZHVfd3JpdGUocGR1LCAmdmFsLCBzaXplb2YodmFsKSkpCisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3EnOnsKKwkJCQlpbnQ2NF90IHZhbCA9IHZhX2FyZyhhcCwgaW50NjRfdCk7CisJCQkJaWYgKHBkdV93cml0ZShwZHUsICZ2YWwsIHNpemVvZih2YWwpKSkKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAncyc6eworCQkJCWNvbnN0IGNoYXIgKnB0ciA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKTsKKwkJCQlpbnQxNl90IGxlbiA9IDA7CisJCQkJaWYgKHB0cikKKwkJCQkJbGVuID0gTUlOKHN0cmxlbihwdHIpLCBVU0hPUlRfTUFYKTsKKworCQkJCWVycmNvZGUgPSBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgInciLCBsZW4pOworCQkJCWlmICghZXJyY29kZSAmJiBwZHVfd3JpdGUocGR1LCBwdHIsIGxlbikpCisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1EnOnsKKwkJCQljb25zdCBzdHJ1Y3QgcDlfcWlkICpxaWQgPQorCQkJCSAgICB2YV9hcmcoYXAsIGNvbnN0IHN0cnVjdCBwOV9xaWQgKik7CisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLCAiYmRxIiwKKwkJCQkJCSBxaWQtPnR5cGUsIHFpZC0+dmVyc2lvbiwKKwkJCQkJCSBxaWQtPnBhdGgpOworCQkJfSBicmVhazsKKwkJY2FzZSAnUyc6eworCQkJCWNvbnN0IHN0cnVjdCBwOV93c3RhdCAqc3RidWYgPQorCQkJCSAgICB2YV9hcmcoYXAsIGNvbnN0IHN0cnVjdCBwOV93c3RhdCAqKTsKKwkJCQllcnJjb2RlID0KKwkJCQkgICAgcDlwZHVfd3JpdGVmKHBkdSwgb3B0aW9uYWwsCisJCQkJCQkgInd3ZFFkZGRxc3Nzcz9zZGRkIiwKKwkJCQkJCSBzdGJ1Zi0+c2l6ZSwgc3RidWYtPnR5cGUsCisJCQkJCQkgc3RidWYtPmRldiwgJnN0YnVmLT5xaWQsCisJCQkJCQkgc3RidWYtPm1vZGUsIHN0YnVmLT5hdGltZSwKKwkJCQkJCSBzdGJ1Zi0+bXRpbWUsIHN0YnVmLT5sZW5ndGgsCisJCQkJCQkgc3RidWYtPm5hbWUsIHN0YnVmLT51aWQsCisJCQkJCQkgc3RidWYtPmdpZCwgc3RidWYtPm11aWQsCisJCQkJCQkgc3RidWYtPmV4dGVuc2lvbiwgc3RidWYtPm5fdWlkLAorCQkJCQkJIHN0YnVmLT5uX2dpZCwgc3RidWYtPm5fbXVpZCk7CisJCQl9IGJyZWFrOworCQljYXNlICdEJzp7CisJCQkJaW50MzJfdCBjb3VudCA9IHZhX2FyZyhhcCwgaW50MzJfdCk7CisJCQkJY29uc3Qgdm9pZCAqZGF0YSA9IHZhX2FyZyhhcCwgY29uc3Qgdm9pZCAqKTsKKworCQkJCWVycmNvZGUgPQorCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgImQiLCBjb3VudCk7CisJCQkJaWYgKCFlcnJjb2RlICYmIHBkdV93cml0ZShwZHUsIGRhdGEsIGNvdW50KSkKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnVSc6eworCQkJCWludDMyX3QgY291bnQgPSB2YV9hcmcoYXAsIGludDMyX3QpOworCQkJCWNvbnN0IGNoYXIgX191c2VyICp1ZGF0YSA9CisJCQkJCQl2YV9hcmcoYXAsIGNvbnN0IHZvaWQgKik7CisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLCAiZCIsIGNvdW50KTsKKwkJCQlpZiAoIWVycmNvZGUgJiYgcGR1X3dyaXRlX3UocGR1LCB1ZGF0YSwgY291bnQpKQorCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdUJzp7CisJCQkJaW50MTZfdCBud25hbWUgPSB2YV9hcmcoYXAsIGludCk7CisJCQkJY29uc3QgY2hhciAqKnduYW1lcyA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKik7CisKKwkJCQllcnJjb2RlID0KKwkJCQkgICAgcDlwZHVfd3JpdGVmKHBkdSwgb3B0aW9uYWwsICJ3IiwgbnduYW1lKTsKKwkJCQlpZiAoIWVycmNvZGUpIHsKKwkJCQkJaW50IGk7CisKKwkJCQkJZm9yIChpID0gMDsgaSA8IG53bmFtZTsgaSsrKSB7CisJCQkJCQllcnJjb2RlID0KKwkJCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwKKwkJCQkJCQkJICJzIiwKKwkJCQkJCQkJIHduYW1lc1tpXSk7CisJCQkJCQlpZiAoZXJyY29kZSkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdSJzp7CisJCQkJaW50MTZfdCBud3FpZCA9IHZhX2FyZyhhcCwgaW50KTsKKwkJCQlzdHJ1Y3QgcDlfcWlkICp3cWlkcyA9CisJCQkJICAgIHZhX2FyZyhhcCwgc3RydWN0IHA5X3FpZCAqKTsKKworCQkJCWVycmNvZGUgPQorCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgInciLCBud3FpZCk7CisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCWludCBpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCBud3FpZDsgaSsrKSB7CisJCQkJCQllcnJjb2RlID0KKwkJCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwKKwkJCQkJCQkJICJRIiwKKwkJCQkJCQkJICZ3cWlkc1tpXSk7CisJCQkJCQlpZiAoZXJyY29kZSkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCWlmICghb3B0aW9uYWwpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZXJyY29kZSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnJjb2RlOworfQorCitpbnQgcDlwZHVfcmVhZGYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcmV0OworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gcDlwZHVfdnJlYWRmKHBkdSwgb3B0aW9uYWwsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitwOXBkdV93cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcmV0OworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gcDlwZHVfdndyaXRlZihwZHUsIG9wdGlvbmFsLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHA5c3RhdF9yZWFkKGNoYXIgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHA5X3dzdGF0ICpzdCwgaW50IGRvdHUpCit7CisJc3RydWN0IHA5X2ZjYWxsIGZha2VfcGR1OworCWludCByZXQ7CisKKwlmYWtlX3BkdS5zaXplID0gbGVuOworCWZha2VfcGR1LmNhcGFjaXR5ID0gbGVuOworCWZha2VfcGR1LnNkYXRhID0gYnVmOworCWZha2VfcGR1Lm9mZnNldCA9IDA7CisKKwlyZXQgPSBwOXBkdV9yZWFkZigmZmFrZV9wZHUsIGRvdHUsICJTIiwgc3QpOworCWlmIChyZXQpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBwOXN0YXRfcmVhZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlwOXBkdV9kdW1wKDEsICZmYWtlX3BkdSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocDlzdGF0X3JlYWQpOworCitpbnQgcDlwZHVfcHJlcGFyZShzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgaW50MTZfdCB0YWcsIGludDhfdCB0eXBlKQoreworCXJldHVybiBwOXBkdV93cml0ZWYocGR1LCAwLCAiZGJ3IiwgMCwgdHlwZSwgdGFnKTsKK30KKworaW50IHA5cGR1X2ZpbmFsaXplKHN0cnVjdCBwOV9mY2FsbCAqcGR1KQoreworCWludCBzaXplID0gcGR1LT5zaXplOworCWludCBlcnI7CisKKwlwZHUtPnNpemUgPSAwOworCWVyciA9IHA5cGR1X3dyaXRlZihwZHUsIDAsICJkIiwgc2l6ZSk7CisJcGR1LT5zaXplID0gc2l6ZTsKKworCWlmICgocDlfZGVidWdfbGV2ZWwgJiBQOV9ERUJVR19QS1QpID09IFA5X0RFQlVHX1BLVCkKKwkJcDlwZHVfZHVtcCgwLCBwZHUpOworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBzaXplPSVkIHR5cGU6ICVkIHRhZzogJWRcbiIsIHBkdS0+c2l6ZSwKKwkJCQkJCQlwZHUtPmlkLCBwZHUtPnRhZyk7CisKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIHA5cGR1X3Jlc2V0KHN0cnVjdCBwOV9mY2FsbCAqcGR1KQoreworCXBkdS0+b2Zmc2V0ID0gMDsKKwlwZHUtPnNpemUgPSAwOworfQpkaWZmIC0tZ2l0IGEvbmV0LzlwL3Byb3RvY29sLmggYi9uZXQvOXAvcHJvdG9jb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2RlNDYyCi0tLSAvZGV2L251bGwKKysrIGIvbmV0LzlwL3Byb3RvY29sLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIG5ldC85cC9wcm90b2NvbC5oCisgKgorICogOVAgUHJvdG9jb2wgU3VwcG9ydCBDb2RlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBieSBFcmljIFZhbiBIZW5zYmVyZ2VuIDxlcmljdmhAZ21haWwuY29tPgorICoKKyAqICBCYXNlIG9uIGNvZGUgZnJvbSBBbnRob255IExpZ3VvcmkgPGFsaWd1b3JpQHVzLmlibS5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IGJ5IElCTSwgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvOgorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICogIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IKKyAqICBCb3N0b24sIE1BICAwMjExMS0xMzAxICBVU0EKKyAqCisgKi8KKworaW50CitwOXBkdV92d3JpdGVmKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBpbnQgb3B0aW9uYWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CitpbnQgcDlwZHVfcmVhZGYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworaW50IHA5cGR1X3ByZXBhcmUoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludDE2X3QgdGFnLCBpbnQ4X3QgdHlwZSk7CitpbnQgcDlwZHVfZmluYWxpemUoc3RydWN0IHA5X2ZjYWxsICpwZHUpOwordm9pZCBwOXBkdV9kdW1wKGludCwgc3RydWN0IHA5X2ZjYWxsICopOwordm9pZCBwOXBkdV9yZXNldChzdHJ1Y3QgcDlfZmNhbGwgKnBkdSk7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfZmQuYyBiL25ldC85cC90cmFuc19mZC5jCmluZGV4IGQ2NTJiYWYuLmJlNjVkODIgMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc19mZC5jCisrKyBiL25ldC85cC90cmFuc19mZC5jCkBAIC0zOSwxMiArMzksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bmV0LzlwLzlwLmg+CisjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgogI2luY2x1ZGUgPG5ldC85cC90cmFuc3BvcnQuaD4KIAogI2RlZmluZSBQOV9QT1JUIDU2NAogI2RlZmluZSBNQVhfU09DS19CVUYgKDY0KjEwMjQpCi0jZGVmaW5lIEVSUkVRRkxVU0gJMQotI2RlZmluZSBTQ0hFRF9USU1FT1VUCTEwCiAjZGVmaW5lIE1BWFBPTExXQUREUgkyCiAKIC8qKgpAQCAtNjEsNyArNjAsNiBAQAogCXUxNiBwb3J0OwogfTsKIAotCiAvKioKICAqIHN0cnVjdCBwOV90cmFuc19mZCAtIHRyYW5zcG9ydCBzdGF0ZQogICogQHJkOiByZWZlcmVuY2UgdG8gZmlsZSB0byByZWFkIGZyb20KQEAgLTg2LDcgKzg0LDcgQEAKIAlPcHRfcG9ydCwgT3B0X3JmZG5vLCBPcHRfd2Zkbm8sIE9wdF9lcnIsCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9wb3J0LCAicG9ydD0ldSJ9LAogCXtPcHRfcmZkbm8sICJyZmRubz0ldSJ9LAogCXtPcHRfd2Zkbm8sICJ3ZmRubz0ldSJ9LApAQCAtMTAwLDYwICs5OCwyMiBAQAogCVdwZW5kaW5nID0gOCwJCS8qIGNhbiB3cml0ZSAqLwogfTsKIAotZW51bSB7Ci0JTm9uZSwKLQlGbHVzaGluZywKLQlGbHVzaGVkLAotfTsKLQotc3RydWN0IHA5X3JlcTsKLXR5cGVkZWYgdm9pZCAoKnA5X2Nvbm5fcmVxX2NhbGxiYWNrKShzdHJ1Y3QgcDlfcmVxICpyZXEsIHZvaWQgKmEpOwotCi0vKioKLSAqIHN0cnVjdCBwOV9yZXEgLSBmZCBtdXggZW5jb2Rpbmcgb2YgYW4gcnBjIHRyYW5zYWN0aW9uCi0gKiBAbG9jazogcHJvdGVjdHMgcmVxX2xpc3QKLSAqIEB0YWc6IG51bWVyaWMgdGFnIGZvciBycGMgdHJhbnNhY3Rpb24KLSAqIEB0Y2FsbDogcmVxdWVzdCAmcDlfZmNhbGwgc3RydWN0dXJlCi0gKiBAcmNhbGw6IHJlc3BvbnNlICZwOV9mY2FsbCBzdHJ1Y3R1cmUKLSAqIEBlcnI6IGVycm9yIHN0YXRlCi0gKiBAY2I6IGNhbGxiYWNrIGZvciB3aGVuIHJlc3BvbnNlIGlzIHJlY2VpdmVkCi0gKiBAY2JhOiBhcmd1bWVudCB0byBwYXNzIHRvIGNhbGxiYWNrCi0gKiBAZmx1c2g6IGZsYWcgdG8gaW5kaWNhdGUgUlBDIGhhcyBiZWVuIGZsdXNoZWQKLSAqIEByZXFfbGlzdDogbGlzdCBsaW5rIGZvciBoaWdoZXIgbGV2ZWwgb2JqZWN0cyB0byBjaGFpbiByZXF1ZXN0cwotICoKLSAqLwotCi1zdHJ1Y3QgcDlfcmVxIHsKLQlzcGlubG9ja190IGxvY2s7Ci0JaW50IHRhZzsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjYWxsOwotCXN0cnVjdCBwOV9mY2FsbCAqcmNhbGw7Ci0JaW50IGVycjsKLQlwOV9jb25uX3JlcV9jYWxsYmFjayBjYjsKLQl2b2lkICpjYmE7Ci0JaW50IGZsdXNoOwotCXN0cnVjdCBsaXN0X2hlYWQgcmVxX2xpc3Q7Ci19OwotCi1zdHJ1Y3QgcDlfbXV4X3BvbGxfdGFzayB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCXN0cnVjdCBsaXN0X2hlYWQgbXV4X2xpc3Q7Ci0JaW50IG11eG51bTsKK3N0cnVjdCBwOV9wb2xsX3dhaXQgeworCXN0cnVjdCBwOV9jb25uICpjb25uOworCXdhaXRfcXVldWVfdCB3YWl0OworCXdhaXRfcXVldWVfaGVhZF90ICp3YWl0X2FkZHI7CiB9OwogCiAvKioKICAqIHN0cnVjdCBwOV9jb25uIC0gZmQgbXV4IGNvbm5lY3Rpb24gc3RhdGUgaW5mb3JtYXRpb24KLSAqIEBsb2NrOiBwcm90ZWN0cyBtdXhfbGlzdCAoPykKICAqIEBtdXhfbGlzdDogbGlzdCBsaW5rIGZvciBtdXggdG8gbWFuYWdlIG11bHRpcGxlIGNvbm5lY3Rpb25zICg/KQotICogQHBvbGxfdGFzazogdGFzayBwb2xsaW5nIG9uIHRoaXMgY29ubmVjdGlvbgotICogQG1zaXplOiBtYXhpbXVtIHNpemUgZm9yIGNvbm5lY3Rpb24gKGR1cCkKLSAqIEBleHRlbmRlZDogOXAyMDAwLnUgZmxhZyAoZHVwKQotICogQHRyYW5zOiByZWZlcmVuY2UgdG8gdHJhbnNwb3J0IGluc3RhbmNlIGZvciB0aGlzIGNvbm5lY3Rpb24KLSAqIEB0YWdwb29sOiBpZCBhY2NvdW50aW5nIGZvciB0cmFuc2FjdGlvbnMKKyAqIEBjbGllbnQ6IHJlZmVyZW5jZSB0byBjbGllbnQgaW5zdGFuY2UgZm9yIHRoaXMgY29ubmVjdGlvbgogICogQGVycjogZXJyb3Igc3RhdGUKICAqIEByZXFfbGlzdDogYWNjb3VudGluZyBmb3IgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHNlbnQKICAqIEB1bnNlbnRfcmVxX2xpc3Q6IGFjY291bnRpbmcgZm9yIHJlcXVlc3RzIHRoYXQgaGF2ZW4ndCBiZWVuIHNlbnQKLSAqIEByY2FsbDogY3VycmVudCByZXNwb25zZSAmcDlfZmNhbGwgc3RydWN0dXJlCisgKiBAcmVxOiBjdXJyZW50IHJlcXVlc3QgYmVpbmcgcHJvY2Vzc2VkIChpZiBhbnkpCisgKiBAdG1wX2J1ZjogdGVtcG9yYXJ5IGJ1ZmZlciB0byByZWFkIGluIGhlYWRlcgorICogQHJzaXplOiBhbW91bnQgdG8gcmVhZCBmb3IgY3VycmVudCBmcmFtZQogICogQHJwb3M6IHJlYWQgcG9zaXRpb24gaW4gY3VycmVudCBmcmFtZQogICogQHJidWY6IGN1cnJlbnQgcmVhZCBidWZmZXIKICAqIEB3cG9zOiB3cml0ZSBwb3NpdGlvbiBmb3IgY3VycmVudCBmcmFtZQpAQCAtMTY5LDQwOSArMTI5LDMwMCBAQAogICovCiAKIHN0cnVjdCBwOV9jb25uIHsKLQlzcGlubG9ja190IGxvY2s7IC8qIHByb3RlY3QgbG9jayBzdHJ1Y3R1cmUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG11eF9saXN0OwotCXN0cnVjdCBwOV9tdXhfcG9sbF90YXNrICpwb2xsX3Rhc2s7Ci0JaW50IG1zaXplOwotCXVuc2lnbmVkIGNoYXIgZXh0ZW5kZWQ7Ci0Jc3RydWN0IHA5X3RyYW5zICp0cmFuczsKLQlzdHJ1Y3QgcDlfaWRwb29sICp0YWdwb29sOworCXN0cnVjdCBwOV9jbGllbnQgKmNsaWVudDsKIAlpbnQgZXJyOwogCXN0cnVjdCBsaXN0X2hlYWQgcmVxX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCB1bnNlbnRfcmVxX2xpc3Q7Ci0Jc3RydWN0IHA5X2ZjYWxsICpyY2FsbDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKwljaGFyIHRtcF9idWZbN107CisJaW50IHJzaXplOwogCWludCBycG9zOwogCWNoYXIgKnJidWY7CiAJaW50IHdwb3M7CiAJaW50IHdzaXplOwogCWNoYXIgKndidWY7Ci0Jd2FpdF9xdWV1ZV90IHBvbGxfd2FpdFtNQVhQT0xMV0FERFJdOwotCXdhaXRfcXVldWVfaGVhZF90ICpwb2xsX3dhZGRyW01BWFBPTExXQUREUl07CisJc3RydWN0IGxpc3RfaGVhZCBwb2xsX3BlbmRpbmdfbGluazsKKwlzdHJ1Y3QgcDlfcG9sbF93YWl0IHBvbGxfd2FpdFtNQVhQT0xMV0FERFJdOwogCXBvbGxfdGFibGUgcHQ7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJxOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3cTsKIAl1bnNpZ25lZCBsb25nIHdzY2hlZDsKIH07CiAKLS8qKgotICogc3RydWN0IHA5X211eF9ycGMgLSBmZCBtdXggcnBjIGFjY291bnRpbmcgc3RydWN0dXJlCi0gKiBAbTogY29ubmVjdGlvbiB0aGlzIHJlcXVlc3Qgd2FzIGlzc3VlZCBvbgotICogQGVycjogZXJyb3Igc3RhdGUKLSAqIEB0Y2FsbDogcmVxdWVzdCAmcDlfZmNhbGwKLSAqIEByY2FsbDogcmVzcG9uc2UgJnA5X2ZjYWxsCi0gKiBAd3F1ZXVlOiB3YWl0IHF1ZXVlIHRoYXQgY2xpZW50IGlzIGJsb2NrZWQgb24gZm9yIHRoaXMgcnBjCi0gKgotICogQnVnOiBpc24ndCB0aGlzIGluZm9ybWF0aW9uIGR1cGxpY2F0ZWQgZWxzZXdoZXJlIGxpa2UgJnA5X3JlcQotICovCi0KLXN0cnVjdCBwOV9tdXhfcnBjIHsKLQlzdHJ1Y3QgcDlfY29ubiAqbTsKLQlpbnQgZXJyOwotCXN0cnVjdCBwOV9mY2FsbCAqdGNhbGw7Ci0Jc3RydWN0IHA5X2ZjYWxsICpyY2FsbDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3cXVldWU7Ci19OwotCi1zdGF0aWMgaW50IHA5X3BvbGxfcHJvYyh2b2lkICopOwotc3RhdGljIHZvaWQgcDlfcmVhZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1zdGF0aWMgdm9pZCBwOV93cml0ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1zdGF0aWMgdm9pZCBwOV9wb2xsd2FpdChzdHJ1Y3QgZmlsZSAqZmlscCwgd2FpdF9xdWV1ZV9oZWFkX3QgKndhaXRfYWRkcmVzcywKLQkJCQkJCQkJcG9sbF90YWJsZSAqcCk7Ci1zdGF0aWMgaW50IHA5X2ZkX3dyaXRlKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIHZvaWQgKnYsIGludCBsZW4pOwotc3RhdGljIGludCBwOV9mZF9yZWFkKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIHZvaWQgKnYsIGludCBsZW4pOwotCi1zdGF0aWMgREVGSU5FX01VVEVYKHA5X211eF90YXNrX2xvY2spOworc3RhdGljIERFRklORV9TUElOTE9DSyhwOV9wb2xsX2xvY2spOworc3RhdGljIExJU1RfSEVBRChwOV9wb2xsX3BlbmRpbmdfbGlzdCk7CiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnA5X211eF93cTsKLQotc3RhdGljIGludCBwOV9tdXhfbnVtOwotc3RhdGljIGludCBwOV9tdXhfcG9sbF90YXNrX251bTsKLXN0YXRpYyBzdHJ1Y3QgcDlfbXV4X3BvbGxfdGFzayBwOV9tdXhfcG9sbF90YXNrc1sxMDBdOwotCi1zdGF0aWMgdm9pZCBwOV9jb25uX2Rlc3Ryb3koc3RydWN0IHA5X2Nvbm4gKik7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHA5X2ZkX3BvbGwoc3RydWN0IHA5X3RyYW5zICp0cmFucywKLQkJCQkJCXN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHQpOwotCi0jaWZkZWYgUDlfTk9OQkxPQ0sKLXN0YXRpYyBpbnQgcDlfY29ubl9ycGNuYihzdHJ1Y3QgcDlfY29ubiAqbSwgc3RydWN0IHA5X2ZjYWxsICp0YywKLQlwOV9jb25uX3JlcV9jYWxsYmFjayBjYiwgdm9pZCAqYSk7Ci0jZW5kaWYgLyogUDlfTk9OQkxPQ0sgKi8KLQotc3RhdGljIHZvaWQgcDlfY29ubl9jYW5jZWwoc3RydWN0IHA5X2Nvbm4gKm0sIGludCBlcnIpOwotCi1zdGF0aWMgdTE2IHA5X211eF9nZXRfdGFnKHN0cnVjdCBwOV9jb25uICptKQotewotCWludCB0YWc7Ci0KLQl0YWcgPSBwOV9pZHBvb2xfZ2V0KG0tPnRhZ3Bvb2wpOwotCWlmICh0YWcgPCAwKQotCQlyZXR1cm4gUDlfTk9UQUc7Ci0JZWxzZQotCQlyZXR1cm4gKHUxNikgdGFnOwotfQotCi1zdGF0aWMgdm9pZCBwOV9tdXhfcHV0X3RhZyhzdHJ1Y3QgcDlfY29ubiAqbSwgdTE2IHRhZykKLXsKLQlpZiAodGFnICE9IFA5X05PVEFHICYmIHA5X2lkcG9vbF9jaGVjayh0YWcsIG0tPnRhZ3Bvb2wpKQotCQlwOV9pZHBvb2xfcHV0KHRhZywgbS0+dGFncG9vbCk7Ci19Ci0KLS8qKgotICogcDlfbXV4X2NhbGNfcG9sbF9wcm9jcyAtIGNhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBwb2xsaW5nIHByb2NzCi0gKiBAbXV4bnVtOiBudW1iZXIgb2YgbW91bnRzCi0gKgotICogQ2FsY3VsYXRpb24gaXMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBtb3VudGVkIHY5ZnMgZmlsZXN5c3RlbXMuCi0gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHNxcnQgb2YgdGhlIG51bWJlciBvZiBtb3VudHMuCi0gKi8KLQotc3RhdGljIGludCBwOV9tdXhfY2FsY19wb2xsX3Byb2NzKGludCBtdXhudW0pCi17Ci0JaW50IG47Ci0KLQlpZiAocDlfbXV4X3BvbGxfdGFza19udW0pCi0JCW4gPSBtdXhudW0gLyBwOV9tdXhfcG9sbF90YXNrX251bSArCi0JCSAgICAobXV4bnVtICUgcDlfbXV4X3BvbGxfdGFza19udW0gPyAxIDogMCk7Ci0JZWxzZQotCQluID0gMTsKLQotCWlmIChuID4gQVJSQVlfU0laRShwOV9tdXhfcG9sbF90YXNrcykpCi0JCW4gPSBBUlJBWV9TSVpFKHA5X211eF9wb2xsX3Rhc2tzKTsKLQotCXJldHVybiBuOwotfQotCi1zdGF0aWMgaW50IHA5X211eF9wb2xsX3N0YXJ0KHN0cnVjdCBwOV9jb25uICptKQotewotCWludCBpLCBuOwotCXN0cnVjdCBwOV9tdXhfcG9sbF90YXNrICp2cHQsICp2cHRsYXN0OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcHByb2M7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBtdXhudW0gJWQgcHJvY251bSAlZFxuIiwgbSwgcDlfbXV4X251bSwKLQkJcDlfbXV4X3BvbGxfdGFza19udW0pOwotCW11dGV4X2xvY2soJnA5X211eF90YXNrX2xvY2spOwotCi0JbiA9IHA5X211eF9jYWxjX3BvbGxfcHJvY3MocDlfbXV4X251bSArIDEpOwotCWlmIChuID4gcDlfbXV4X3BvbGxfdGFza19udW0pIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocDlfbXV4X3BvbGxfdGFza3MpOyBpKyspIHsKLQkJCWlmIChwOV9tdXhfcG9sbF90YXNrc1tpXS50YXNrID09IE5VTEwpIHsKLQkJCQl2cHQgPSAmcDlfbXV4X3BvbGxfdGFza3NbaV07Ci0JCQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJjcmVhdGUgcHJvYyAlcFxuIiwKLQkJCQkJCQkJCXZwdCk7Ci0JCQkJcHByb2MgPSBrdGhyZWFkX2NyZWF0ZShwOV9wb2xsX3Byb2MsIHZwdCwKLQkJCQkJCQkJInY5ZnMtcG9sbCIpOwotCi0JCQkJaWYgKCFJU19FUlIocHByb2MpKSB7Ci0JCQkJCXZwdC0+dGFzayA9IHBwcm9jOwotCQkJCQlJTklUX0xJU1RfSEVBRCgmdnB0LT5tdXhfbGlzdCk7Ci0JCQkJCXZwdC0+bXV4bnVtID0gMDsKLQkJCQkJcDlfbXV4X3BvbGxfdGFza19udW0rKzsKLQkJCQkJd2FrZV91cF9wcm9jZXNzKHZwdC0+dGFzayk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKGkgPj0gQVJSQVlfU0laRShwOV9tdXhfcG9sbF90YXNrcykpCi0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAotCQkJCQkid2FybmluZzogbm8gZnJlZSBwb2xsIHNsb3RzXG4iKTsKLQl9Ci0KLQluID0gKHA5X211eF9udW0gKyAxKSAvIHA5X211eF9wb2xsX3Rhc2tfbnVtICsKLQkgICAgKChwOV9tdXhfbnVtICsgMSkgJSBwOV9tdXhfcG9sbF90YXNrX251bSA/IDEgOiAwKTsKLQotCXZwdGxhc3QgPSBOVUxMOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHA5X211eF9wb2xsX3Rhc2tzKTsgaSsrKSB7Ci0JCXZwdCA9ICZwOV9tdXhfcG9sbF90YXNrc1tpXTsKLQkJaWYgKHZwdC0+dGFzayAhPSBOVUxMKSB7Ci0JCQl2cHRsYXN0ID0gdnB0OwotCQkJaWYgKHZwdC0+bXV4bnVtIDwgbikgewotCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAicHV0IGluIHByb2MgJWRcbiIsIGkpOwotCQkJCWxpc3RfYWRkKCZtLT5tdXhfbGlzdCwgJnZwdC0+bXV4X2xpc3QpOwotCQkJCXZwdC0+bXV4bnVtKys7Ci0JCQkJbS0+cG9sbF90YXNrID0gdnB0OwotCQkJCW1lbXNldCgmbS0+cG9sbF93YWRkciwgMCwKLQkJCQkJCQlzaXplb2YobS0+cG9sbF93YWRkcikpOwotCQkJCWluaXRfcG9sbF9mdW5jcHRyKCZtLT5wdCwgcDlfcG9sbHdhaXQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGkgPj0gQVJSQVlfU0laRShwOV9tdXhfcG9sbF90YXNrcykpIHsKLQkJaWYgKHZwdGxhc3QgPT0gTlVMTCkgewotCQkJbXV0ZXhfdW5sb2NrKCZwOV9tdXhfdGFza19sb2NrKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJwdXQgaW4gcHJvYyAlZFxuIiwgaSk7Ci0JCWxpc3RfYWRkKCZtLT5tdXhfbGlzdCwgJnZwdGxhc3QtPm11eF9saXN0KTsKLQkJdnB0bGFzdC0+bXV4bnVtKys7Ci0JCW0tPnBvbGxfdGFzayA9IHZwdGxhc3Q7Ci0JCW1lbXNldCgmbS0+cG9sbF93YWRkciwgMCwgc2l6ZW9mKG0tPnBvbGxfd2FkZHIpKTsKLQkJaW5pdF9wb2xsX2Z1bmNwdHIoJm0tPnB0LCBwOV9wb2xsd2FpdCk7Ci0JfQotCi0JcDlfbXV4X251bSsrOwotCW11dGV4X3VubG9jaygmcDlfbXV4X3Rhc2tfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA5X3BvbGxfdGFzazsKIAogc3RhdGljIHZvaWQgcDlfbXV4X3BvbGxfc3RvcChzdHJ1Y3QgcDlfY29ubiAqbSkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwotCXN0cnVjdCBwOV9tdXhfcG9sbF90YXNrICp2cHQ7CiAKLQltdXRleF9sb2NrKCZwOV9tdXhfdGFza19sb2NrKTsKLQl2cHQgPSBtLT5wb2xsX3Rhc2s7Ci0JbGlzdF9kZWwoJm0tPm11eF9saXN0KTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtLT5wb2xsX3dhZGRyKTsgaSsrKSB7Ci0JCWlmIChtLT5wb2xsX3dhZGRyW2ldICE9IE5VTEwpIHsKLQkJCXJlbW92ZV93YWl0X3F1ZXVlKG0tPnBvbGxfd2FkZHJbaV0sICZtLT5wb2xsX3dhaXRbaV0pOwotCQkJbS0+cG9sbF93YWRkcltpXSA9IE5VTEw7Ci0JCX0KLQl9Ci0JdnB0LT5tdXhudW0tLTsKLQlpZiAoIXZwdC0+bXV4bnVtKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZGVzdHJveSBwcm9jICVwXG4iLCB2cHQpOwotCQlrdGhyZWFkX3N0b3AodnB0LT50YXNrKTsKLQkJdnB0LT50YXNrID0gTlVMTDsKLQkJcDlfbXV4X3BvbGxfdGFza19udW0tLTsKLQl9Ci0JcDlfbXV4X251bS0tOwotCW11dGV4X3VubG9jaygmcDlfbXV4X3Rhc2tfbG9jayk7Ci19CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+cG9sbF93YWl0KTsgaSsrKSB7CisJCXN0cnVjdCBwOV9wb2xsX3dhaXQgKnB3YWl0ID0gJm0tPnBvbGxfd2FpdFtpXTsKIAotLyoqCi0gKiBwOV9jb25uX2NyZWF0ZSAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBwZXItc2Vzc2lvbiBtdXggZGF0YQotICogQHRyYW5zOiB0cmFuc3BvcnQgc3RydWN0dXJlCi0gKgotICogTm90ZTogQ3JlYXRlcyB0aGUgcG9sbGluZyB0YXNrIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHNlc3Npb24uCi0gKi8KLQotc3RhdGljIHN0cnVjdCBwOV9jb25uICpwOV9jb25uX2NyZWF0ZShzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zKQotewotCWludCBpLCBuOwotCXN0cnVjdCBwOV9jb25uICptOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJ0cmFuc3BvcnQgJXAgbXNpemUgJWRcbiIsIHRyYW5zLAotCQkJCQkJCQl0cmFucy0+bXNpemUpOwotCW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfY29ubiksIEdGUF9LRVJORUwpOwotCWlmICghbSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmbS0+bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJm0tPm11eF9saXN0KTsKLQltLT5tc2l6ZSA9IHRyYW5zLT5tc2l6ZTsKLQltLT5leHRlbmRlZCA9IHRyYW5zLT5leHRlbmRlZDsKLQltLT50cmFucyA9IHRyYW5zOwotCW0tPnRhZ3Bvb2wgPSBwOV9pZHBvb2xfY3JlYXRlKCk7Ci0JaWYgKElTX0VSUihtLT50YWdwb29sKSkgewotCQlrZnJlZShtKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCi0JSU5JVF9MSVNUX0hFQUQoJm0tPnJlcV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmbS0+dW5zZW50X3JlcV9saXN0KTsKLQlJTklUX1dPUksoJm0tPnJxLCBwOV9yZWFkX3dvcmspOwotCUlOSVRfV09SSygmbS0+d3EsIHA5X3dyaXRlX3dvcmspOwotCW4gPSBwOV9tdXhfcG9sbF9zdGFydChtKTsKLQlpZiAobikgewotCQlrZnJlZShtKTsKLQkJcmV0dXJuIEVSUl9QVFIobik7Ci0JfQotCi0JbiA9IHA5X2ZkX3BvbGwodHJhbnMsICZtLT5wdCk7Ci0JaWYgKG4gJiBQT0xMSU4pIHsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgY2FuIHJlYWRcbiIsIG0pOwotCQlzZXRfYml0KFJwZW5kaW5nLCAmbS0+d3NjaGVkKTsKLQl9Ci0KLQlpZiAobiAmIFBPTExPVVQpIHsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgY2FuIHdyaXRlXG4iLCBtKTsKLQkJc2V0X2JpdChXcGVuZGluZywgJm0tPndzY2hlZCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+cG9sbF93YWRkcik7IGkrKykgewotCQlpZiAoSVNfRVJSKG0tPnBvbGxfd2FkZHJbaV0pKSB7Ci0JCQlwOV9tdXhfcG9sbF9zdG9wKG0pOwotCQkJa2ZyZWUobSk7Ci0JCQlyZXR1cm4gKHZvaWQgKiltLT5wb2xsX3dhZGRyOwkvKiB0aGUgZXJyb3IgY29kZSAqLworCQlpZiAocHdhaXQtPndhaXRfYWRkcikgeworCQkJcmVtb3ZlX3dhaXRfcXVldWUocHdhaXQtPndhaXRfYWRkciwgJnB3YWl0LT53YWl0KTsKKwkJCXB3YWl0LT53YWl0X2FkZHIgPSBOVUxMOwogCQl9CiAJfQogCi0JcmV0dXJuIG07CisJc3Bpbl9sb2NrX2lycXNhdmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsX2luaXQoJm0tPnBvbGxfcGVuZGluZ19saW5rKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCi0gKiBwOV9tdXhfZGVzdHJveSAtIGNhbmNlbHMgYWxsIHBlbmRpbmcgcmVxdWVzdHMgYW5kIGZyZWVzIG11eCByZXNvdXJjZXMKLSAqIEBtOiBtdXggdG8gZGVzdHJveQorICogcDlfY29ubl9jYW5jZWwgLSBjYW5jZWwgYWxsIHBlbmRpbmcgcmVxdWVzdHMgd2l0aCBlcnJvcgorICogQG06IG11eCBkYXRhCisgKiBAZXJyOiBlcnJvciBjb2RlCiAgKgogICovCiAKLXN0YXRpYyB2b2lkIHA5X2Nvbm5fZGVzdHJveShzdHJ1Y3QgcDlfY29ubiAqbSkKK3N0YXRpYyB2b2lkIHA5X2Nvbm5fY2FuY2VsKHN0cnVjdCBwOV9jb25uICptLCBpbnQgZXJyKQogewotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIHByZXYgJXAgbmV4dCAlcFxuIiwgbSwKLQkJbS0+bXV4X2xpc3QucHJldiwgbS0+bXV4X2xpc3QubmV4dCk7CisJc3RydWN0IHA5X3JlcV90ICpyZXEsICpydG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGNhbmNlbF9saXN0KTsKIAotCXA5X211eF9wb2xsX3N0b3AobSk7Ci0JY2FuY2VsX3dvcmtfc3luYygmbS0+cnEpOwotCWNhbmNlbF93b3JrX3N5bmMoJm0tPndxKTsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAibXV4ICVwIGVyciAlZFxuIiwgbSwgZXJyKTsKIAotCXA5X2Nvbm5fY2FuY2VsKG0sIC1FQ09OTlJFU0VUKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbS0+Y2xpZW50LT5sb2NrLCBmbGFncyk7CiAKLQltLT50cmFucyA9IE5VTEw7Ci0JcDlfaWRwb29sX2Rlc3Ryb3kobS0+dGFncG9vbCk7Ci0Ja2ZyZWUobSk7CisJaWYgKG0tPmVycikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtLT5jbGllbnQtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCW0tPmVyciA9IGVycjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHJ0bXAsICZtLT5yZXFfbGlzdCwgcmVxX2xpc3QpIHsKKwkJcmVxLT5zdGF0dXMgPSBSRVFfU1RBVFVTX0VSUk9SOworCQlpZiAoIXJlcS0+dF9lcnIpCisJCQlyZXEtPnRfZXJyID0gZXJyOworCQlsaXN0X21vdmUoJnJlcS0+cmVxX2xpc3QsICZjYW5jZWxfbGlzdCk7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHJ0bXAsICZtLT51bnNlbnRfcmVxX2xpc3QsIHJlcV9saXN0KSB7CisJCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19FUlJPUjsKKwkJaWYgKCFyZXEtPnRfZXJyKQorCQkJcmVxLT50X2VyciA9IGVycjsKKwkJbGlzdF9tb3ZlKCZyZXEtPnJlcV9saXN0LCAmY2FuY2VsX2xpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtLT5jbGllbnQtPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHJ0bXAsICZjYW5jZWxfbGlzdCwgcmVxX2xpc3QpIHsKKwkJbGlzdF9kZWwoJnJlcS0+cmVxX2xpc3QpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiY2FsbCBiYWNrIHJlcSAlcFxuIiwgcmVxKTsKKwkJcDlfY2xpZW50X2NiKG0tPmNsaWVudCwgcmVxKTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3A5X2ZkX3BvbGwoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0KQoreworCWludCByZXQsIG47CisJc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IE5VTEw7CisKKwlpZiAoY2xpZW50ICYmIGNsaWVudC0+c3RhdHVzID09IENvbm5lY3RlZCkKKwkJdHMgPSBjbGllbnQtPnRyYW5zOworCisJaWYgKCF0cykKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlpZiAoIXRzLT5yZC0+Zl9vcCB8fCAhdHMtPnJkLT5mX29wLT5wb2xsKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICghdHMtPndyLT5mX29wIHx8ICF0cy0+d3ItPmZfb3AtPnBvbGwpCisJCXJldHVybiAtRUlPOworCisJcmV0ID0gdHMtPnJkLT5mX29wLT5wb2xsKHRzLT5yZCwgcHQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHRzLT5yZCAhPSB0cy0+d3IpIHsKKwkJbiA9IHRzLT53ci0+Zl9vcC0+cG9sbCh0cy0+d3IsIHB0KTsKKwkJaWYgKG4gPCAwKQorCQkJcmV0dXJuIG47CisJCXJldCA9IChyZXQgJiB+UE9MTE9VVCkgfCAobiAmIH5QT0xMSU4pOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIC8qKgotICogcDlfcG9sbHdhaXQgLSBhZGQgcG9sbCB0YXNrIHRvIHRoZSB3YWl0IHF1ZXVlCi0gKiBAZmlscDogZmlsZSBwb2ludGVyIGJlaW5nIHBvbGxlZAotICogQHdhaXRfYWRkcmVzczogd2FpdF9xIHRvIGJsb2NrIG9uCi0gKiBAcDogcG9sbCBzdGF0ZQorICogcDlfZmRfcmVhZC0gcmVhZCBmcm9tIGEgZmQKKyAqIEBjbGllbnQ6IGNsaWVudCBpbnN0YW5jZQorICogQHY6IGJ1ZmZlciB0byByZWNlaXZlIGRhdGEgaW50bworICogQGxlbjogc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlcgogICoKLSAqIGNhbGxlZCBieSBmaWxlcyBwb2xsIG9wZXJhdGlvbiB0byBhZGQgdjlmcy1wb2xsIHRhc2sgdG8gZmlsZXMgd2FpdCBxdWV1ZQogICovCiAKLXN0YXRpYyB2b2lkCi1wOV9wb2xsd2FpdChzdHJ1Y3QgZmlsZSAqZmlscCwgd2FpdF9xdWV1ZV9oZWFkX3QgKndhaXRfYWRkcmVzcywgcG9sbF90YWJsZSAqcCkKK3N0YXRpYyBpbnQgcDlfZmRfcmVhZChzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHZvaWQgKnYsIGludCBsZW4pCiB7Ci0JaW50IGk7CisJaW50IHJldDsKKwlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnRzID0gTlVMTDsKKworCWlmIChjbGllbnQgJiYgY2xpZW50LT5zdGF0dXMgIT0gRGlzY29ubmVjdGVkKQorCQl0cyA9IGNsaWVudC0+dHJhbnM7CisKKwlpZiAoIXRzKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCWlmICghKHRzLT5yZC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQorCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiYmxvY2tpbmcgcmVhZCAuLi5cbiIpOworCisJcmV0ID0ga2VybmVsX3JlYWQodHMtPnJkLCB0cy0+cmQtPmZfcG9zLCB2LCBsZW4pOworCWlmIChyZXQgPD0gMCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTICYmIHJldCAhPSAtRUFHQUlOKQorCQljbGllbnQtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHA5X3JlYWRfd29yayAtIGNhbGxlZCB3aGVuIHRoZXJlIGlzIHNvbWUgZGF0YSB0byBiZSByZWFkIGZyb20gYSB0cmFuc3BvcnQKKyAqIEB3b3JrOiBjb250YWluZXIgb2Ygd29yayB0byBiZSBkb25lCisgKgorICovCisKK3N0YXRpYyB2b2lkIHA5X3JlYWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IG4sIGVycjsKIAlzdHJ1Y3QgcDlfY29ubiAqbTsKIAotCW0gPSBjb250YWluZXJfb2YocCwgc3RydWN0IHA5X2Nvbm4sIHB0KTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtLT5wb2xsX3dhZGRyKTsgaSsrKQotCQlpZiAobS0+cG9sbF93YWRkcltpXSA9PSBOVUxMKQotCQkJYnJlYWs7Ci0KLQlpZiAoaSA+PSBBUlJBWV9TSVpFKG0tPnBvbGxfd2FkZHIpKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsICJub3QgZW5vdWdoIHdhaXRfYWRkcmVzcyBzbG90c1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltLT5wb2xsX3dhZGRyW2ldID0gd2FpdF9hZGRyZXNzOwotCi0JaWYgKCF3YWl0X2FkZHJlc3MpIHsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgIm5vIHdhaXRfYWRkcmVzc1xuIik7Ci0JCW0tPnBvbGxfd2FkZHJbaV0gPSBFUlJfUFRSKC1FSU8pOwotCQlyZXR1cm47Ci0JfQotCi0JaW5pdF93YWl0cXVldWVfZW50cnkoJm0tPnBvbGxfd2FpdFtpXSwgbS0+cG9sbF90YXNrLT50YXNrKTsKLQlhZGRfd2FpdF9xdWV1ZSh3YWl0X2FkZHJlc3MsICZtLT5wb2xsX3dhaXRbaV0pOwotfQotCi0vKioKLSAqIHA5X3BvbGxfbXV4IC0gcG9sbHMgYSBtdXggYW5kIHNjaGVkdWxlcyByZWFkIG9yIHdyaXRlIHdvcmtzIGlmIG5lY2Vzc2FyeQotICogQG06IGNvbm5lY3Rpb24gdG8gcG9sbAotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBwOV9wb2xsX211eChzdHJ1Y3QgcDlfY29ubiAqbSkKLXsKLQlpbnQgbjsKKwltID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwOV9jb25uLCBycSk7CiAKIAlpZiAobS0+ZXJyIDwgMCkKIAkJcmV0dXJuOwogCi0JbiA9IHA5X2ZkX3BvbGwobS0+dHJhbnMsIE5VTEwpOwotCWlmIChuIDwgMCB8fCBuICYgKFBPTExFUlIgfCBQT0xMSFVQIHwgUE9MTE5WQUwpKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZXJyb3IgbXV4ICVwIGVyciAlZFxuIiwgbSwgbik7Ci0JCWlmIChuID49IDApCi0JCQluID0gLUVDT05OUkVTRVQ7Ci0JCXA5X2Nvbm5fY2FuY2VsKG0sIG4pOworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJzdGFydCBtdXggJXAgcG9zICVkXG4iLCBtLCBtLT5ycG9zKTsKKworCWlmICghbS0+cmJ1ZikgeworCQltLT5yYnVmID0gbS0+dG1wX2J1ZjsKKwkJbS0+cnBvcyA9IDA7CisJCW0tPnJzaXplID0gNzsgLyogc3RhcnQgYnkgcmVhZGluZyBoZWFkZXIgKi8KIAl9CiAKLQlpZiAobiAmIFBPTExJTikgewotCQlzZXRfYml0KFJwZW5kaW5nLCAmbS0+d3NjaGVkKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgY2FuIHJlYWRcbiIsIG0pOwotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCkpIHsKLQkJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAic2NoZWR1bGUgcmVhZCB3b3JrICVwXG4iLCBtKTsKKwljbGVhcl9iaXQoUnBlbmRpbmcsICZtLT53c2NoZWQpOworCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJyZWFkIG11eCAlcCBwb3MgJWQgc2l6ZTogJWQgPSAlZFxuIiwgbSwKKwkJCQkJbS0+cnBvcywgbS0+cnNpemUsIG0tPnJzaXplLW0tPnJwb3MpOworCWVyciA9IHA5X2ZkX3JlYWQobS0+Y2xpZW50LCBtLT5yYnVmICsgbS0+cnBvcywKKwkJCQkJCW0tPnJzaXplIC0gbS0+cnBvcyk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCBnb3QgJWQgYnl0ZXNcbiIsIG0sIGVycik7CisJaWYgKGVyciA9PSAtRUFHQUlOKSB7CisJCWNsZWFyX2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChlcnIgPD0gMCkKKwkJZ290byBlcnJvcjsKKworCW0tPnJwb3MgKz0gZXJyOworCisJaWYgKCghbS0+cmVxKSAmJiAobS0+cnBvcyA9PSBtLT5yc2l6ZSkpIHsgLyogaGVhZGVyIHJlYWQgaW4gKi8KKwkJdTE2IHRhZzsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgImdvdCBuZXcgaGVhZGVyXG4iKTsKKworCQluID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikgbS0+cmJ1Zik7IC8qIHJlYWQgcGFja2V0IHNpemUgKi8KKwkJaWYgKG4gPj0gbS0+Y2xpZW50LT5tc2l6ZSkgeworCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKKwkJCQkicmVxdWVzdGVkIHBhY2tldCBzaXplIHRvbyBiaWc6ICVkXG4iLCBuKTsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJdGFnID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikgKG0tPnJidWYrNSkpOyAvKiByZWFkIHRhZyAqLworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLAorCQkJIm11eCAlcCBwa3Q6IHNpemU6ICVkIGJ5dGVzIHRhZzogJWRcbiIsIG0sIG4sIHRhZyk7CisKKwkJbS0+cmVxID0gcDlfdGFnX2xvb2t1cChtLT5jbGllbnQsIHRhZyk7CisJCWlmICghbS0+cmVxKSB7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiVW5leHBlY3RlZCBwYWNrZXQgdGFnICVkXG4iLAorCQkJCQkJCQkgdGFnKTsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJaWYgKG0tPnJlcS0+cmMgPT0gTlVMTCkgeworCQkJbS0+cmVxLT5yYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkgKworCQkJCQkJbS0+Y2xpZW50LT5tc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIW0tPnJlcS0+cmMpIHsKKwkJCQltLT5yZXEgPSBOVUxMOworCQkJCWVyciA9IC1FTk9NRU07CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfQorCQltLT5yYnVmID0gKGNoYXIgKiltLT5yZXEtPnJjICsgc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCk7CisJCW1lbWNweShtLT5yYnVmLCBtLT50bXBfYnVmLCBtLT5yc2l6ZSk7CisJCW0tPnJzaXplID0gbjsKKwl9CisKKwkvKiBub3QgYW4gZWxzZSBiZWNhdXNlIHNvbWUgcGFja2V0cyAobGlrZSBjbHVuaykgaGF2ZSBubyBwYXlsb2FkICovCisJaWYgKChtLT5yZXEpICYmIChtLT5ycG9zID09IG0tPnJzaXplKSkgeyAvKiBwYWNrZXQgaXMgcmVhZCBpbiAqLworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiZ290IG5ldyBwYWNrZXRcbiIpOworCQlzcGluX2xvY2soJm0tPmNsaWVudC0+bG9jayk7CisJCWxpc3RfZGVsKCZtLT5yZXEtPnJlcV9saXN0KTsKKwkJc3Bpbl91bmxvY2soJm0tPmNsaWVudC0+bG9jayk7CisJCXA5X2NsaWVudF9jYihtLT5jbGllbnQsIG0tPnJlcSk7CisKKwkJbS0+cmJ1ZiA9IE5VTEw7CisJCW0tPnJwb3MgPSAwOworCQltLT5yc2l6ZSA9IDA7CisJCW0tPnJlcSA9IE5VTEw7CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZtLT5yZXFfbGlzdCkpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChScGVuZGluZywgJm0tPndzY2hlZCkpCisJCQluID0gUE9MTElOOworCQllbHNlCisJCQluID0gcDlfZmRfcG9sbChtLT5jbGllbnQsIE5VTEwpOworCisJCWlmIChuICYgUE9MTElOKSB7CisJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAic2NoZWQgcmVhZCB3b3JrICVwXG4iLCBtKTsKIAkJCXF1ZXVlX3dvcmsocDlfbXV4X3dxLCAmbS0+cnEpOwotCQl9Ci0JfQorCQl9IGVsc2UKKwkJCWNsZWFyX2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKKwl9IGVsc2UKKwkJY2xlYXJfYml0KFJ3b3Jrc2NoZWQsICZtLT53c2NoZWQpOwogCi0JaWYgKG4gJiBQT0xMT1VUKSB7Ci0JCXNldF9iaXQoV3BlbmRpbmcsICZtLT53c2NoZWQpOwotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBjYW4gd3JpdGVcbiIsIG0pOwotCQlpZiAoKG0tPndzaXplIHx8ICFsaXN0X2VtcHR5KCZtLT51bnNlbnRfcmVxX2xpc3QpKQotCQkgICAgJiYgIXRlc3RfYW5kX3NldF9iaXQoV3dvcmtzY2hlZCwgJm0tPndzY2hlZCkpIHsKLQkJCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAic2NoZWR1bGUgd3JpdGUgd29yayAlcFxuIiwgbSk7Ci0JCQlxdWV1ZV93b3JrKHA5X211eF93cSwgJm0tPndxKTsKLQkJfQotCX0KKwlyZXR1cm47CitlcnJvcjoKKwlwOV9jb25uX2NhbmNlbChtLCBlcnIpOworCWNsZWFyX2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKIH0KIAogLyoqCi0gKiBwOV9wb2xsX3Byb2MgLSBwb2xsIHdvcmtlciB0aHJlYWQKLSAqIEBhOiB0aHJlYWQgc3RhdGUgYW5kIGFyZ3VtZW50cwotICoKLSAqIHBvbGxzIGFsbCB2OWZzIHRyYW5zcG9ydHMgZm9yIG5ldyBldmVudHMgYW5kIHF1ZXVlcyB0aGUgYXBwcm9wcmlhdGUKLSAqIHdvcmsgdG8gdGhlIHdvcmsgcXVldWUKKyAqIHA5X2ZkX3dyaXRlIC0gd3JpdGUgdG8gYSBzb2NrZXQKKyAqIEBjbGllbnQ6IGNsaWVudCBpbnN0YW5jZQorICogQHY6IGJ1ZmZlciB0byBzZW5kIGRhdGEgZnJvbQorICogQGxlbjogc2l6ZSBvZiBzZW5kIGJ1ZmZlcgogICoKICAqLwogCi1zdGF0aWMgaW50IHA5X3BvbGxfcHJvYyh2b2lkICphKQorc3RhdGljIGludCBwOV9mZF93cml0ZShzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHZvaWQgKnYsIGludCBsZW4pCiB7Ci0Jc3RydWN0IHA5X2Nvbm4gKm0sICptdG1wOwotCXN0cnVjdCBwOV9tdXhfcG9sbF90YXNrICp2cHQ7CisJaW50IHJldDsKKwltbV9zZWdtZW50X3Qgb2xkZnM7CisJc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IE5VTEw7CiAKLQl2cHQgPSBhOwotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAic3RhcnQgJXAgJXBcbiIsIGN1cnJlbnQsIHZwdCk7Ci0Jd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlpZiAoY2xpZW50ICYmIGNsaWVudC0+c3RhdHVzICE9IERpc2Nvbm5lY3RlZCkKKwkJdHMgPSBjbGllbnQtPnRyYW5zOwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtLCBtdG1wLCAmdnB0LT5tdXhfbGlzdCwgbXV4X2xpc3QpIHsKLQkJCXA5X3BvbGxfbXV4KG0pOwotCQl9CisJaWYgKCF0cykKKwkJcmV0dXJuIC1FUkVNT1RFSU87CiAKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJzbGVlcGluZy4uLlxuIik7Ci0JCXNjaGVkdWxlX3RpbWVvdXQoU0NIRURfVElNRU9VVCAqIEhaKTsKLQl9CisJaWYgKCEodHMtPndyLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCisJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsICJibG9ja2luZyB3cml0ZSAuLi5cbiIpOwogCi0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiZmluaXNoXG4iKTsKLQlyZXR1cm4gMDsKKwlvbGRmcyA9IGdldF9mcygpOworCXNldF9mcyhnZXRfZHMoKSk7CisJLyogVGhlIGNhc3QgdG8gYSB1c2VyIHBvaW50ZXIgaXMgdmFsaWQgZHVlIHRvIHRoZSBzZXRfZnMoKSAqLworCXJldCA9IHZmc193cml0ZSh0cy0+d3IsICh2b2lkIF9fdXNlciAqKXYsIGxlbiwgJnRzLT53ci0+Zl9wb3MpOworCXNldF9mcyhvbGRmcyk7CisKKwlpZiAocmV0IDw9IDAgJiYgcmV0ICE9IC1FUkVTVEFSVFNZUyAmJiByZXQgIT0gLUVBR0FJTikKKwkJY2xpZW50LT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC01ODQsNyArNDM1LDcgQEAKIHsKIAlpbnQgbiwgZXJyOwogCXN0cnVjdCBwOV9jb25uICptOwotCXN0cnVjdCBwOV9yZXEgKnJlcTsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKIAogCW0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHA5X2Nvbm4sIHdxKTsKIApAQCAtNTk5LDI1ICs0NTAsMjMgQEAKIAkJCXJldHVybjsKIAkJfQogCi0JCXNwaW5fbG9jaygmbS0+bG9jayk7Ci1hZ2FpbjoKLQkJcmVxID0gbGlzdF9lbnRyeShtLT51bnNlbnRfcmVxX2xpc3QubmV4dCwgc3RydWN0IHA5X3JlcSwKKwkJc3Bpbl9sb2NrKCZtLT5jbGllbnQtPmxvY2spOworCQlyZXEgPSBsaXN0X2VudHJ5KG0tPnVuc2VudF9yZXFfbGlzdC5uZXh0LCBzdHJ1Y3QgcDlfcmVxX3QsCiAJCQkgICAgICAgcmVxX2xpc3QpOworCQlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfU0VOVDsKIAkJbGlzdF9tb3ZlX3RhaWwoJnJlcS0+cmVxX2xpc3QsICZtLT5yZXFfbGlzdCk7Ci0JCWlmIChyZXEtPmVyciA9PSBFUlJFUUZMVVNIKQotCQkJZ290byBhZ2FpbjsKIAotCQltLT53YnVmID0gcmVxLT50Y2FsbC0+c2RhdGE7Ci0JCW0tPndzaXplID0gcmVxLT50Y2FsbC0+c2l6ZTsKKwkJbS0+d2J1ZiA9IHJlcS0+dGMtPnNkYXRhOworCQltLT53c2l6ZSA9IHJlcS0+dGMtPnNpemU7CiAJCW0tPndwb3MgPSAwOwotCQlzcGluX3VubG9jaygmbS0+bG9jayk7CisJCXNwaW5fdW5sb2NrKCZtLT5jbGllbnQtPmxvY2spOwogCX0KIAotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIHBvcyAlZCBzaXplICVkXG4iLCBtLCBtLT53cG9zLAorCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgcG9zICVkIHNpemUgJWRcbiIsIG0sIG0tPndwb3MsCiAJCQkJCQkJCW0tPndzaXplKTsKIAljbGVhcl9iaXQoV3BlbmRpbmcsICZtLT53c2NoZWQpOwotCWVyciA9IHA5X2ZkX3dyaXRlKG0tPnRyYW5zLCBtLT53YnVmICsgbS0+d3BvcywgbS0+d3NpemUgLSBtLT53cG9zKTsKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBzZW50ICVkIGJ5dGVzXG4iLCBtLCBlcnIpOworCWVyciA9IHA5X2ZkX3dyaXRlKG0tPmNsaWVudCwgbS0+d2J1ZiArIG0tPndwb3MsIG0tPndzaXplIC0gbS0+d3Bvcyk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCBzZW50ICVkIGJ5dGVzXG4iLCBtLCBlcnIpOwogCWlmIChlcnIgPT0gLUVBR0FJTikgewogCQljbGVhcl9iaXQoV3dvcmtzY2hlZCwgJm0tPndzY2hlZCk7CiAJCXJldHVybjsKQEAgLTYzOCwxMCArNDg3LDEwIEBACiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV3BlbmRpbmcsICZtLT53c2NoZWQpKQogCQkJbiA9IFBPTExPVVQ7CiAJCWVsc2UKLQkJCW4gPSBwOV9mZF9wb2xsKG0tPnRyYW5zLCBOVUxMKTsKKwkJCW4gPSBwOV9mZF9wb2xsKG0tPmNsaWVudCwgTlVMTCk7CiAKIAkJaWYgKG4gJiBQT0xMT1VUKSB7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInNjaGVkdWxlIHdyaXRlIHdvcmsgJXBcbiIsIG0pOworCQkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgInNjaGVkIHdyaXRlIHdvcmsgJXBcbiIsIG0pOwogCQkJcXVldWVfd29yayhwOV9tdXhfd3EsICZtLT53cSk7CiAJCX0gZWxzZQogCQkJY2xlYXJfYml0KFd3b3Jrc2NoZWQsICZtLT53c2NoZWQpOwpAQCAtNjU1LDUwNCArNTA0LDE5NyBAQAogCWNsZWFyX2JpdChXd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKIH0KIAotc3RhdGljIHZvaWQgcHJvY2Vzc19yZXF1ZXN0KHN0cnVjdCBwOV9jb25uICptLCBzdHJ1Y3QgcDlfcmVxICpyZXEpCitzdGF0aWMgaW50IHA5X3BvbGx3YWtlKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZvaWQgKmtleSkKIHsKLQlpbnQgZWNvZGU7Ci0Jc3RydWN0IHA5X3N0ciAqZW5hbWU7CisJc3RydWN0IHA5X3BvbGxfd2FpdCAqcHdhaXQgPQorCQljb250YWluZXJfb2Yod2FpdCwgc3RydWN0IHA5X3BvbGxfd2FpdCwgd2FpdCk7CisJc3RydWN0IHA5X2Nvbm4gKm0gPSBwd2FpdC0+Y29ubjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCURFQ0xBUkVfV0FJVFFVRVVFKGR1bW15X3dhaXQsIHA5X3BvbGxfdGFzayk7CiAKLQlpZiAoIXJlcS0+ZXJyICYmIHJlcS0+cmNhbGwtPmlkID09IFA5X1JFUlJPUikgewotCQllY29kZSA9IHJlcS0+cmNhbGwtPnBhcmFtcy5yZXJyb3IuZXJybm87Ci0JCWVuYW1lID0gJnJlcS0+cmNhbGwtPnBhcmFtcy5yZXJyb3IuZXJyb3I7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZtLT5wb2xsX3BlbmRpbmdfbGluaykpCisJCWxpc3RfYWRkX3RhaWwoJm0tPnBvbGxfcGVuZGluZ19saW5rLCAmcDlfcG9sbF9wZW5kaW5nX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOwogCi0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiUmVycm9yICUuKnNcbiIsIGVuYW1lLT5sZW4sCi0JCQkJCQkJCWVuYW1lLT5zdHIpOwotCi0JCWlmIChtLT5leHRlbmRlZCkKLQkJCXJlcS0+ZXJyID0gLWVjb2RlOwotCi0JCWlmICghcmVxLT5lcnIpIHsKLQkJCXJlcS0+ZXJyID0gcDlfZXJyc3RyMmVycm5vKGVuYW1lLT5zdHIsIGVuYW1lLT5sZW4pOwotCi0JCQkvKiBzdHJpbmcgbWF0Y2ggZmFpbGVkICovCi0JCQlpZiAoIXJlcS0+ZXJyKSB7Ci0JCQkJUFJJTlRfRkNBTExfRVJST1IoInVua25vd24gZXJyb3IiLCByZXEtPnJjYWxsKTsKLQkJCQlyZXEtPmVyciA9IC1FU0VSVkVSRkFVTFQ7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgaWYgKHJlcS0+dGNhbGwgJiYgcmVxLT5yY2FsbC0+aWQgIT0gcmVxLT50Y2FsbC0+aWQgKyAxKSB7Ci0JCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCi0JCQkJImZjYWxsIG1pc21hdGNoOiBleHBlY3RlZCAlZCwgZ290ICVkXG4iLAotCQkJCXJlcS0+dGNhbGwtPmlkICsgMSwgcmVxLT5yY2FsbC0+aWQpOwotCQlpZiAoIXJlcS0+ZXJyKQotCQkJcmVxLT5lcnIgPSAtRUlPOwotCX0KKwkvKiBwZXJmb3JtIHRoZSBkZWZhdWx0IHdha2UgdXAgb3BlcmF0aW9uICovCisJcmV0dXJuIGRlZmF1bHRfd2FrZV9mdW5jdGlvbigmZHVtbXlfd2FpdCwgbW9kZSwgc3luYywga2V5KTsKIH0KIAogLyoqCi0gKiBwOV9yZWFkX3dvcmsgLSBjYWxsZWQgd2hlbiB0aGVyZSBpcyBzb21lIGRhdGEgdG8gYmUgcmVhZCBmcm9tIGEgdHJhbnNwb3J0Ci0gKiBAd29yazogY29udGFpbmVyIG9mIHdvcmsgdG8gYmUgZG9uZQorICogcDlfcG9sbHdhaXQgLSBhZGQgcG9sbCB0YXNrIHRvIHRoZSB3YWl0IHF1ZXVlCisgKiBAZmlscDogZmlsZSBwb2ludGVyIGJlaW5nIHBvbGxlZAorICogQHdhaXRfYWRkcmVzczogd2FpdF9xIHRvIGJsb2NrIG9uCisgKiBAcDogcG9sbCBzdGF0ZQogICoKKyAqIGNhbGxlZCBieSBmaWxlcyBwb2xsIG9wZXJhdGlvbiB0byBhZGQgdjlmcy1wb2xsIHRhc2sgdG8gZmlsZXMgd2FpdCBxdWV1ZQogICovCiAKLXN0YXRpYyB2b2lkIHA5X3JlYWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZAorcDlfcG9sbHdhaXQoc3RydWN0IGZpbGUgKmZpbHAsIHdhaXRfcXVldWVfaGVhZF90ICp3YWl0X2FkZHJlc3MsIHBvbGxfdGFibGUgKnApCiB7Ci0JaW50IG4sIGVycjsKLQlzdHJ1Y3QgcDlfY29ubiAqbTsKLQlzdHJ1Y3QgcDlfcmVxICpyZXEsICpycHRyLCAqcnJlcTsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnJjYWxsOwotCWNoYXIgKnJidWY7CisJc3RydWN0IHA5X2Nvbm4gKm0gPSBjb250YWluZXJfb2YocCwgc3RydWN0IHA5X2Nvbm4sIHB0KTsKKwlzdHJ1Y3QgcDlfcG9sbF93YWl0ICpwd2FpdCA9IE5VTEw7CisJaW50IGk7CiAKLQltID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwOV9jb25uLCBycSk7Ci0KLQlpZiAobS0+ZXJyIDwgMCkKLQkJcmV0dXJuOwotCi0JcmNhbGwgPSBOVUxMOwotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAic3RhcnQgbXV4ICVwIHBvcyAlZFxuIiwgbSwgbS0+cnBvcyk7Ci0KLQlpZiAoIW0tPnJjYWxsKSB7Ci0JCW0tPnJjYWxsID0KLQkJICAgIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkgKyBtLT5tc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbS0+cmNhbGwpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJbS0+cmJ1ZiA9IChjaGFyICopbS0+cmNhbGwgKyBzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKTsKLQkJbS0+cnBvcyA9IDA7Ci0JfQotCi0JY2xlYXJfYml0KFJwZW5kaW5nLCAmbS0+d3NjaGVkKTsKLQllcnIgPSBwOV9mZF9yZWFkKG0tPnRyYW5zLCBtLT5yYnVmICsgbS0+cnBvcywgbS0+bXNpemUgLSBtLT5ycG9zKTsKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCBnb3QgJWQgYnl0ZXNcbiIsIG0sIGVycik7Ci0JaWYgKGVyciA9PSAtRUFHQUlOKSB7Ci0JCWNsZWFyX2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChlcnIgPD0gMCkKLQkJZ290byBlcnJvcjsKLQotCW0tPnJwb3MgKz0gZXJyOwotCXdoaWxlIChtLT5ycG9zID4gNCkgewotCQluID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikgbS0+cmJ1Zik7Ci0JCWlmIChuID49IG0tPm1zaXplKSB7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAotCQkJCSJyZXF1ZXN0ZWQgcGFja2V0IHNpemUgdG9vIGJpZzogJWRcbiIsIG4pOwotCQkJZXJyID0gLUVJTzsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQlpZiAobS0+cnBvcyA8IG4pCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+cG9sbF93YWl0KTsgaSsrKSB7CisJCWlmIChtLT5wb2xsX3dhaXRbaV0ud2FpdF9hZGRyID09IE5VTEwpIHsKKwkJCXB3YWl0ID0gJm0tPnBvbGxfd2FpdFtpXTsKIAkJCWJyZWFrOwotCi0JCWVyciA9Ci0JCSAgICBwOV9kZXNlcmlhbGl6ZV9mY2FsbChtLT5yYnVmLCBuLCBtLT5yY2FsbCwgbS0+ZXh0ZW5kZWQpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyb3I7Ci0KLSNpZmRlZiBDT05GSUdfTkVUXzlQX0RFQlVHCi0JCWlmICgocDlfZGVidWdfbGV2ZWwmUDlfREVCVUdfRkNBTEwpID09IFA5X0RFQlVHX0ZDQUxMKSB7Ci0JCQljaGFyIGJ1ZlsxNTBdOwotCi0JCQlwOV9wcmludGZjYWxsKGJ1Ziwgc2l6ZW9mKGJ1ZiksIG0tPnJjYWxsLAotCQkJCW0tPmV4dGVuZGVkKTsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiPj4+ICVwICVzXG4iLCBtLCBidWYpOwotCQl9Ci0jZW5kaWYKLQotCQlyY2FsbCA9IG0tPnJjYWxsOwotCQlyYnVmID0gbS0+cmJ1ZjsKLQkJaWYgKG0tPnJwb3MgPiBuKSB7Ci0JCQltLT5yY2FsbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkgKyBtLT5tc2l6ZSwKLQkJCQkJICAgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIW0tPnJjYWxsKSB7Ci0JCQkJZXJyID0gLUVOT01FTTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCi0JCQltLT5yYnVmID0gKGNoYXIgKiltLT5yY2FsbCArIHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpOwotCQkJbWVtbW92ZShtLT5yYnVmLCByYnVmICsgbiwgbS0+cnBvcyAtIG4pOwotCQkJbS0+cnBvcyAtPSBuOwotCQl9IGVsc2UgewotCQkJbS0+cmNhbGwgPSBOVUxMOwotCQkJbS0+cmJ1ZiA9IE5VTEw7Ci0JCQltLT5ycG9zID0gMDsKLQkJfQotCi0JCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIGZjYWxsIGlkICVkIHRhZyAlZFxuIiwgbSwKLQkJCQkJCQlyY2FsbC0+aWQsIHJjYWxsLT50YWcpOwotCi0JCXJlcSA9IE5VTEw7Ci0JCXNwaW5fbG9jaygmbS0+bG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShycmVxLCBycHRyLCAmbS0+cmVxX2xpc3QsIHJlcV9saXN0KSB7Ci0JCQlpZiAocnJlcS0+dGFnID09IHJjYWxsLT50YWcpIHsKLQkJCQlyZXEgPSBycmVxOwotCQkJCWlmIChyZXEtPmZsdXNoICE9IEZsdXNoaW5nKQotCQkJCQlsaXN0X2RlbCgmcmVxLT5yZXFfbGlzdCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJc3Bpbl91bmxvY2soJm0tPmxvY2spOwotCi0JCWlmIChyZXEpIHsKLQkJCXJlcS0+cmNhbGwgPSByY2FsbDsKLQkJCXByb2Nlc3NfcmVxdWVzdChtLCByZXEpOwotCi0JCQlpZiAocmVxLT5mbHVzaCAhPSBGbHVzaGluZykgewotCQkJCWlmIChyZXEtPmNiKQotCQkJCQkoKnJlcS0+Y2IpIChyZXEsIHJlcS0+Y2JhKTsKLQkJCQllbHNlCi0JCQkJCWtmcmVlKHJlcS0+cmNhbGwpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGVyciA+PSAwICYmIHJjYWxsLT5pZCAhPSBQOV9SRkxVU0gpCi0JCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKLQkJCQkgICJ1bmV4cGVjdGVkIHJlc3BvbnNlIG11eCAlcCBpZCAlZCB0YWcgJWRcbiIsCi0JCQkJICBtLCByY2FsbC0+aWQsIHJjYWxsLT50YWcpOwotCQkJa2ZyZWUocmNhbGwpOwogCQl9CiAJfQogCi0JaWYgKCFsaXN0X2VtcHR5KCZtLT5yZXFfbGlzdCkpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChScGVuZGluZywgJm0tPndzY2hlZCkpCi0JCQluID0gUE9MTElOOwotCQllbHNlCi0JCQluID0gcDlfZmRfcG9sbChtLT50cmFucywgTlVMTCk7CisJaWYgKCFwd2FpdCkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAibm90IGVub3VnaCB3YWl0X2FkZHJlc3Mgc2xvdHNcbiIpOworCQlyZXR1cm47CisJfQogCi0JCWlmIChuICYgUE9MTElOKSB7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInNjaGVkdWxlIHJlYWQgd29yayAlcFxuIiwgbSk7Ci0JCQlxdWV1ZV93b3JrKHA5X211eF93cSwgJm0tPnJxKTsKLQkJfSBlbHNlCi0JCQljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7Ci0JfSBlbHNlCi0JCWNsZWFyX2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKTsKLQotCXJldHVybjsKLQotZXJyb3I6Ci0JcDlfY29ubl9jYW5jZWwobSwgZXJyKTsKLQljbGVhcl9iaXQoUndvcmtzY2hlZCwgJm0tPndzY2hlZCk7CisJcHdhaXQtPmNvbm4gPSBtOworCXB3YWl0LT53YWl0X2FkZHIgPSB3YWl0X2FkZHJlc3M7CisJaW5pdF93YWl0cXVldWVfZnVuY19lbnRyeSgmcHdhaXQtPndhaXQsIHA5X3BvbGx3YWtlKTsKKwlhZGRfd2FpdF9xdWV1ZSh3YWl0X2FkZHJlc3MsICZwd2FpdC0+d2FpdCk7CiB9CiAKIC8qKgotICogcDlfc2VuZF9yZXF1ZXN0IC0gc2VuZCA5UCByZXF1ZXN0Ci0gKiBUaGUgZnVuY3Rpb24gY2FuIHNsZWVwIHVudGlsIHRoZSByZXF1ZXN0IGlzIHNjaGVkdWxlZCBmb3Igc2VuZGluZy4KLSAqIFRoZSBmdW5jdGlvbiBjYW4gYmUgaW50ZXJydXB0ZWQuIFJldHVybiBmcm9tIHRoZSBmdW5jdGlvbiBpcyBub3QKLSAqIGEgZ3VhcmFudGVlIHRoYXQgdGhlIHJlcXVlc3QgaXMgc2VudCBzdWNjZXNzZnVsbHkuIENhbiByZXR1cm4gZXJyb3JzCi0gKiB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgYnkgUFRSX0VSUiBtYWNyb3MuCisgKiBwOV9jb25uX2NyZWF0ZSAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBwZXItc2Vzc2lvbiBtdXggZGF0YQorICogQGNsaWVudDogY2xpZW50IGluc3RhbmNlCiAgKgotICogQG06IG11eCBkYXRhCi0gKiBAdGM6IHJlcXVlc3QgdG8gYmUgc2VudAotICogQGNiOiBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gcmVzcG9uc2UgaXMgcmVjZWl2ZWQKLSAqIEBjYmE6IHBhcmFtZXRlciB0byBwYXNzIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgotICoKKyAqIE5vdGU6IENyZWF0ZXMgdGhlIHBvbGxpbmcgdGFzayBpZiB0aGlzIGlzIHRoZSBmaXJzdCBzZXNzaW9uLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcDlfcmVxICpwOV9zZW5kX3JlcXVlc3Qoc3RydWN0IHA5X2Nvbm4gKm0sCi0JCQkJCSAgc3RydWN0IHA5X2ZjYWxsICp0YywKLQkJCQkJICBwOV9jb25uX3JlcV9jYWxsYmFjayBjYiwgdm9pZCAqY2JhKQorc3RhdGljIHN0cnVjdCBwOV9jb25uICpwOV9jb25uX2NyZWF0ZShzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQpCiB7CiAJaW50IG47Ci0Jc3RydWN0IHA5X3JlcSAqcmVxOworCXN0cnVjdCBwOV9jb25uICptOwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgdGFzayAlcCB0Y2FsbCAlcCBpZCAlZFxuIiwgbSwgY3VycmVudCwKLQkJdGMsIHRjLT5pZCk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgImNsaWVudCAlcCBtc2l6ZSAlZFxuIiwgY2xpZW50LAorCQkJCQkJCQljbGllbnQtPm1zaXplKTsKKwltID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHA5X2Nvbm4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW0pCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJSU5JVF9MSVNUX0hFQUQoJm0tPm11eF9saXN0KTsKKwltLT5jbGllbnQgPSBjbGllbnQ7CisKKwlJTklUX0xJU1RfSEVBRCgmbS0+cmVxX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZtLT51bnNlbnRfcmVxX2xpc3QpOworCUlOSVRfV09SSygmbS0+cnEsIHA5X3JlYWRfd29yayk7CisJSU5JVF9XT1JLKCZtLT53cSwgcDlfd3JpdGVfd29yayk7CisJSU5JVF9MSVNUX0hFQUQoJm0tPnBvbGxfcGVuZGluZ19saW5rKTsKKwlpbml0X3BvbGxfZnVuY3B0cigmbS0+cHQsIHA5X3BvbGx3YWl0KTsKKworCW4gPSBwOV9mZF9wb2xsKGNsaWVudCwgJm0tPnB0KTsKKwlpZiAobiAmIFBPTExJTikgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAibXV4ICVwIGNhbiByZWFkXG4iLCBtKTsKKwkJc2V0X2JpdChScGVuZGluZywgJm0tPndzY2hlZCk7CisJfQorCisJaWYgKG4gJiBQT0xMT1VUKSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJtdXggJXAgY2FuIHdyaXRlXG4iLCBtKTsKKwkJc2V0X2JpdChXcGVuZGluZywgJm0tPndzY2hlZCk7CisJfQorCisJcmV0dXJuIG07Cit9CisKKy8qKgorICogcDlfcG9sbF9tdXggLSBwb2xscyBhIG11eCBhbmQgc2NoZWR1bGVzIHJlYWQgb3Igd3JpdGUgd29ya3MgaWYgbmVjZXNzYXJ5CisgKiBAbTogY29ubmVjdGlvbiB0byBwb2xsCisgKgorICovCisKK3N0YXRpYyB2b2lkIHA5X3BvbGxfbXV4KHN0cnVjdCBwOV9jb25uICptKQoreworCWludCBuOworCiAJaWYgKG0tPmVyciA8IDApCi0JCXJldHVybiBFUlJfUFRSKG0tPmVycik7CisJCXJldHVybjsKIAotCXJlcSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9yZXEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlcSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlpZiAodGMtPmlkID09IFA5X1RWRVJTSU9OKQotCQluID0gUDlfTk9UQUc7Ci0JZWxzZQotCQluID0gcDlfbXV4X2dldF90YWcobSk7Ci0KLQlpZiAobiA8IDApIHsKLQkJa2ZyZWUocmVxKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJbiA9IHA5X2ZkX3BvbGwobS0+Y2xpZW50LCBOVUxMKTsKKwlpZiAobiA8IDAgfHwgbiAmIChQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExOVkFMKSkgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiZXJyb3IgbXV4ICVwIGVyciAlZFxuIiwgbSwgbik7CisJCWlmIChuID49IDApCisJCQluID0gLUVDT05OUkVTRVQ7CisJCXA5X2Nvbm5fY2FuY2VsKG0sIG4pOwogCX0KIAotCXA5X3NldF90YWcodGMsIG4pOwotCi0jaWZkZWYgQ09ORklHX05FVF85UF9ERUJVRwotCWlmICgocDlfZGVidWdfbGV2ZWwmUDlfREVCVUdfRkNBTEwpID09IFA5X0RFQlVHX0ZDQUxMKSB7Ci0JCWNoYXIgYnVmWzE1MF07Ci0KLQkJcDlfcHJpbnRmY2FsbChidWYsIHNpemVvZihidWYpLCB0YywgbS0+ZXh0ZW5kZWQpOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIjw8PCAlcCAlc1xuIiwgbSwgYnVmKTsKKwlpZiAobiAmIFBPTExJTikgeworCQlzZXRfYml0KFJwZW5kaW5nLCAmbS0+d3NjaGVkKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCBjYW4gcmVhZFxuIiwgbSk7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChSd29ya3NjaGVkLCAmbS0+d3NjaGVkKSkgeworCQkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgInNjaGVkIHJlYWQgd29yayAlcFxuIiwgbSk7CisJCQlxdWV1ZV93b3JrKHA5X211eF93cSwgJm0tPnJxKTsKKwkJfQogCX0KLSNlbmRpZgogCi0Jc3Bpbl9sb2NrX2luaXQoJnJlcS0+bG9jayk7Ci0JcmVxLT50YWcgPSBuOwotCXJlcS0+dGNhbGwgPSB0YzsKLQlyZXEtPnJjYWxsID0gTlVMTDsKLQlyZXEtPmVyciA9IDA7Ci0JcmVxLT5jYiA9IGNiOwotCXJlcS0+Y2JhID0gY2JhOwotCXJlcS0+Zmx1c2ggPSBOb25lOworCWlmIChuICYgUE9MTE9VVCkgeworCQlzZXRfYml0KFdwZW5kaW5nLCAmbS0+d3NjaGVkKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCBjYW4gd3JpdGVcbiIsIG0pOworCQlpZiAoKG0tPndzaXplIHx8ICFsaXN0X2VtcHR5KCZtLT51bnNlbnRfcmVxX2xpc3QpKQorCQkgICAgJiYgIXRlc3RfYW5kX3NldF9iaXQoV3dvcmtzY2hlZCwgJm0tPndzY2hlZCkpIHsKKwkJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICJzY2hlZCB3cml0ZSB3b3JrICVwXG4iLCBtKTsKKwkJCXF1ZXVlX3dvcmsocDlfbXV4X3dxLCAmbS0+d3EpOworCQl9CisJfQorfQogCi0Jc3Bpbl9sb2NrKCZtLT5sb2NrKTsKKy8qKgorICogcDlfZmRfcmVxdWVzdCAtIHNlbmQgOVAgcmVxdWVzdAorICogVGhlIGZ1bmN0aW9uIGNhbiBzbGVlcCB1bnRpbCB0aGUgcmVxdWVzdCBpcyBzY2hlZHVsZWQgZm9yIHNlbmRpbmcuCisgKiBUaGUgZnVuY3Rpb24gY2FuIGJlIGludGVycnVwdGVkLiBSZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gaXMgbm90CisgKiBhIGd1YXJhbnRlZSB0aGF0IHRoZSByZXF1ZXN0IGlzIHNlbnQgc3VjY2Vzc2Z1bGx5LgorICoKKyAqIEBjbGllbnQ6IGNsaWVudCBpbnN0YW5jZQorICogQHJlcTogcmVxdWVzdCB0byBiZSBzZW50CisgKgorICovCisKK3N0YXRpYyBpbnQgcDlfZmRfcmVxdWVzdChzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKQoreworCWludCBuOworCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBjbGllbnQtPnRyYW5zOworCXN0cnVjdCBwOV9jb25uICptID0gdHMtPmNvbm47CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAibXV4ICVwIHRhc2sgJXAgdGNhbGwgJXAgaWQgJWRcbiIsIG0sCisJCQkJCQljdXJyZW50LCByZXEtPnRjLCByZXEtPnRjLT5pZCk7CisJaWYgKG0tPmVyciA8IDApCisJCXJldHVybiBtLT5lcnI7CisKKwlzcGluX2xvY2soJmNsaWVudC0+bG9jayk7CisJcmVxLT5zdGF0dXMgPSBSRVFfU1RBVFVTX1VOU0VOVDsKIAlsaXN0X2FkZF90YWlsKCZyZXEtPnJlcV9saXN0LCAmbS0+dW5zZW50X3JlcV9saXN0KTsKLQlzcGluX3VubG9jaygmbS0+bG9jayk7CisJc3Bpbl91bmxvY2soJmNsaWVudC0+bG9jayk7CiAKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdwZW5kaW5nLCAmbS0+d3NjaGVkKSkKIAkJbiA9IFBPTExPVVQ7CiAJZWxzZQotCQluID0gcDlfZmRfcG9sbChtLT50cmFucywgTlVMTCk7CisJCW4gPSBwOV9mZF9wb2xsKG0tPmNsaWVudCwgTlVMTCk7CiAKIAlpZiAobiAmIFBPTExPVVQgJiYgIXRlc3RfYW5kX3NldF9iaXQoV3dvcmtzY2hlZCwgJm0tPndzY2hlZCkpCiAJCXF1ZXVlX3dvcmsocDlfbXV4X3dxLCAmbS0+d3EpOwogCi0JcmV0dXJuIHJlcTsKLX0KLQotc3RhdGljIHZvaWQgcDlfbXV4X2ZyZWVfcmVxdWVzdChzdHJ1Y3QgcDlfY29ubiAqbSwgc3RydWN0IHA5X3JlcSAqcmVxKQotewotCXA5X211eF9wdXRfdGFnKG0sIHJlcS0+dGFnKTsKLQlrZnJlZShyZXEpOwotfQotCi1zdGF0aWMgdm9pZCBwOV9tdXhfZmx1c2hfY2Ioc3RydWN0IHA5X3JlcSAqZnJlcSwgdm9pZCAqYSkKLXsKLQlpbnQgdGFnOwotCXN0cnVjdCBwOV9jb25uICptOwotCXN0cnVjdCBwOV9yZXEgKnJlcSwgKnJyZXEsICpycHRyOwotCi0JbSA9IGE7Ci0JUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJtdXggJXAgdGMgJXAgcmMgJXAgZXJyICVkIG9sZHRhZyAlZFxuIiwgbSwKLQkJZnJlcS0+dGNhbGwsIGZyZXEtPnJjYWxsLCBmcmVxLT5lcnIsCi0JCWZyZXEtPnRjYWxsLT5wYXJhbXMudGZsdXNoLm9sZHRhZyk7Ci0KLQlzcGluX2xvY2soJm0tPmxvY2spOwotCXRhZyA9IGZyZXEtPnRjYWxsLT5wYXJhbXMudGZsdXNoLm9sZHRhZzsKLQlyZXEgPSBOVUxMOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShycmVxLCBycHRyLCAmbS0+cmVxX2xpc3QsIHJlcV9saXN0KSB7Ci0JCWlmIChycmVxLT50YWcgPT0gdGFnKSB7Ci0JCQlyZXEgPSBycmVxOwotCQkJbGlzdF9kZWwoJnJlcS0+cmVxX2xpc3QpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJm0tPmxvY2spOwotCi0JaWYgKHJlcSkgewotCQlzcGluX2xvY2soJnJlcS0+bG9jayk7Ci0JCXJlcS0+Zmx1c2ggPSBGbHVzaGVkOwotCQlzcGluX3VubG9jaygmcmVxLT5sb2NrKTsKLQotCQlpZiAocmVxLT5jYikKLQkJCSgqcmVxLT5jYikgKHJlcSwgcmVxLT5jYmEpOwotCQllbHNlCi0JCQlrZnJlZShyZXEtPnJjYWxsKTsKLQl9Ci0KLQlrZnJlZShmcmVxLT50Y2FsbCk7Ci0Ja2ZyZWUoZnJlcS0+cmNhbGwpOwotCXA5X211eF9mcmVlX3JlcXVlc3QobSwgZnJlcSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXA5X211eF9mbHVzaF9yZXF1ZXN0KHN0cnVjdCBwOV9jb25uICptLCBzdHJ1Y3QgcDlfcmVxICpyZXEpCi17Ci0Jc3RydWN0IHA5X2ZjYWxsICpmYzsKLQlzdHJ1Y3QgcDlfcmVxICpycmVxLCAqcnB0cjsKLQotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAibXV4ICVwIHJlcSAlcCB0YWcgJWRcbiIsIG0sIHJlcSwgcmVxLT50YWcpOwotCi0JLyogaWYgYSByZXNwb25zZSB3YXMgcmVjZWl2ZWQgZm9yIGEgcmVxdWVzdCwgZG8gbm90aGluZyAqLwotCXNwaW5fbG9jaygmcmVxLT5sb2NrKTsKLQlpZiAocmVxLT5yY2FsbCB8fCByZXEtPmVycikgewotCQlzcGluX3VubG9jaygmcmVxLT5sb2NrKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsCi0JCQkibXV4ICVwIHJlcSAlcCByZXNwb25zZSBhbHJlYWR5IHJlY2VpdmVkXG4iLCBtLCByZXEpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXEtPmZsdXNoID0gRmx1c2hpbmc7Ci0Jc3Bpbl91bmxvY2soJnJlcS0+bG9jayk7Ci0KLQlzcGluX2xvY2soJm0tPmxvY2spOwotCS8qIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBzZW50IHlldCwganVzdCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShycmVxLCBycHRyLCAmbS0+dW5zZW50X3JlcV9saXN0LCByZXFfbGlzdCkgewotCQlpZiAocnJlcS0+dGFnID09IHJlcS0+dGFnKSB7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwKLQkJCSAgICJtdXggJXAgcmVxICVwIHJlcXVlc3QgaXMgbm90IHNlbnQgeWV0XG4iLCBtLCByZXEpOwotCQkJbGlzdF9kZWwoJnJyZXEtPnJlcV9saXN0KTsKLQkJCXJlcS0+Zmx1c2ggPSBGbHVzaGVkOwotCQkJc3Bpbl91bmxvY2soJm0tPmxvY2spOwotCQkJaWYgKHJlcS0+Y2IpCi0JCQkJKCpyZXEtPmNiKSAocmVxLCByZXEtPmNiYSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmbS0+bG9jayk7Ci0KLQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7Ci0JZmMgPSBwOV9jcmVhdGVfdGZsdXNoKHJlcS0+dGFnKTsKLQlwOV9zZW5kX3JlcXVlc3QobSwgZmMsIHA5X211eF9mbHVzaF9jYiwgbSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wOV9jb25uX3JwY19jYihzdHJ1Y3QgcDlfcmVxICpyZXEsIHZvaWQgKmEpCi17Ci0Jc3RydWN0IHA5X211eF9ycGMgKnI7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInJlcSAlcCByICVwXG4iLCByZXEsIGEpOwotCXIgPSBhOwotCXItPnJjYWxsID0gcmVxLT5yY2FsbDsKLQlyLT5lcnIgPSByZXEtPmVycjsKLQotCWlmIChyZXEtPmZsdXNoICE9IE5vbmUgJiYgIXJlcS0+ZXJyKQotCQlyLT5lcnIgPSAtRVJFU1RBUlRTWVM7Ci0KLQl3YWtlX3VwKCZyLT53cXVldWUpOwotfQotCi0vKioKLSAqIHA5X2ZkX3JwYy0gc2VuZHMgOVAgcmVxdWVzdCBhbmQgd2FpdHMgdW50aWwgYSByZXNwb25zZSBpcyBhdmFpbGFibGUuCi0gKglUaGUgZnVuY3Rpb24gY2FuIGJlIGludGVycnVwdGVkLgotICogQHQ6IHRyYW5zcG9ydCBkYXRhCi0gKiBAdGM6IHJlcXVlc3QgdG8gYmUgc2VudAotICogQHJjOiBwb2ludGVyIHdoZXJlIGEgcG9pbnRlciB0byB0aGUgcmVzcG9uc2UgaXMgc3RvcmVkCi0gKgotICovCi0KLWludAotcDlfZmRfcnBjKHN0cnVjdCBwOV90cmFucyAqdCwgc3RydWN0IHA5X2ZjYWxsICp0Yywgc3RydWN0IHA5X2ZjYWxsICoqcmMpCi17Ci0Jc3RydWN0IHA5X3RyYW5zX2ZkICpwID0gdC0+cHJpdjsKLQlzdHJ1Y3QgcDlfY29ubiAqbSA9IHAtPmNvbm47Ci0JaW50IGVyciwgc2lncGVuZGluZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBwOV9yZXEgKnJlcTsKLQlzdHJ1Y3QgcDlfbXV4X3JwYyByOwotCi0Jci5lcnIgPSAwOwotCXIudGNhbGwgPSB0YzsKLQlyLnJjYWxsID0gTlVMTDsKLQlyLm0gPSBtOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnIud3F1ZXVlKTsKLQotCWlmIChyYykKLQkJKnJjID0gTlVMTDsKLQotCXNpZ3BlbmRpbmcgPSAwOwotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQlzaWdwZW5kaW5nID0gMTsKLQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1NJR1BFTkRJTkcpOwotCX0KLQotCXJlcSA9IHA5X3NlbmRfcmVxdWVzdChtLCB0YywgcDlfY29ubl9ycGNfY2IsICZyKTsKLQlpZiAoSVNfRVJSKHJlcSkpIHsKLQkJZXJyID0gUFRSX0VSUihyZXEpOwotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImVycm9yICVkXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShyLndxdWV1ZSwgci5yY2FsbCAhPSBOVUxMIHx8IHIuZXJyIDwgMCk7Ci0JaWYgKHIuZXJyIDwgMCkKLQkJZXJyID0gci5lcnI7Ci0KLQlpZiAoZXJyID09IC1FUkVTVEFSVFNZUyAmJiBtLT50cmFucy0+c3RhdHVzID09IENvbm5lY3RlZAotCQkJCQkJCSYmIG0tPmVyciA9PSAwKSB7Ci0JCWlmIChwOV9tdXhfZmx1c2hfcmVxdWVzdChtLCByZXEpKSB7Ci0JCQkvKiB3YWl0IHVudGlsIHdlIGdldCByZXNwb25zZSBvZiB0aGUgZmx1c2ggbWVzc2FnZSAqLwotCQkJZG8gewotCQkJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9TSUdQRU5ESU5HKTsKLQkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoci53cXVldWUsCi0JCQkJCXIucmNhbGwgfHwgci5lcnIpOwotCQkJfSB3aGlsZSAoIXIucmNhbGwgJiYgIXIuZXJyICYmIGVyciA9PSAtRVJFU1RBUlRTWVMgJiYKLQkJCQltLT50cmFucy0+c3RhdHVzID09IENvbm5lY3RlZCAmJiAhbS0+ZXJyKTsKLQotCQkJZXJyID0gLUVSRVNUQVJUU1lTOwotCQl9Ci0JCXNpZ3BlbmRpbmcgPSAxOwotCX0KLQotCWlmIChzaWdwZW5kaW5nKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQl9Ci0KLQlpZiAocmMpCi0JCSpyYyA9IHIucmNhbGw7Ci0JZWxzZQotCQlrZnJlZShyLnJjYWxsKTsKLQotCXA5X211eF9mcmVlX3JlcXVlc3QobSwgcmVxKTsKLQlpZiAoZXJyID4gMCkKLQkJZXJyID0gLUVJTzsKLQotCXJldHVybiBlcnI7Ci19Ci0KLSNpZmRlZiBQOV9OT05CTE9DSwotLyoqCi0gKiBwOV9jb25uX3JwY25iIC0gc2VuZHMgOVAgcmVxdWVzdCB3aXRob3V0IHdhaXRpbmcgZm9yIHJlc3BvbnNlLgotICogQG06IG11eCBkYXRhCi0gKiBAdGM6IHJlcXVlc3QgdG8gYmUgc2VudAotICogQGNiOiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiByZXNwb25zZSBhcnJpdmVzCi0gKiBAYTogdmFsdWUgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAqCi0gKi8KLQotaW50IHA5X2Nvbm5fcnBjbmIoc3RydWN0IHA5X2Nvbm4gKm0sIHN0cnVjdCBwOV9mY2FsbCAqdGMsCi0JCSAgIHA5X2Nvbm5fcmVxX2NhbGxiYWNrIGNiLCB2b2lkICphKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHA5X3JlcSAqcmVxOwotCi0JcmVxID0gcDlfc2VuZF9yZXF1ZXN0KG0sIHRjLCBjYiwgYSk7Ci0JaWYgKElTX0VSUihyZXEpKSB7Ci0JCWVyciA9IFBUUl9FUlIocmVxKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJlcnJvciAlZFxuIiwgZXJyKTsKLQkJcmV0dXJuIFBUUl9FUlIocmVxKTsKLQl9Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCB0YyAlcCB0YWcgJWRcbiIsIG0sIHRjLCByZXEtPnRhZyk7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogUDlfTk9OQkxPQ0sgKi8KIAotLyoqCi0gKiBwOV9jb25uX2NhbmNlbCAtIGNhbmNlbCBhbGwgcGVuZGluZyByZXF1ZXN0cyB3aXRoIGVycm9yCi0gKiBAbTogbXV4IGRhdGEKLSAqIEBlcnI6IGVycm9yIGNvZGUKLSAqCi0gKi8KLQotdm9pZCBwOV9jb25uX2NhbmNlbChzdHJ1Y3QgcDlfY29ubiAqbSwgaW50IGVycikKK3N0YXRpYyBpbnQgcDlfZmRfY2FuY2VsKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgc3RydWN0IHA5X3JlcV90ICpyZXEpCiB7Ci0Jc3RydWN0IHA5X3JlcSAqcmVxLCAqcnRtcDsKLQlMSVNUX0hFQUQoY2FuY2VsX2xpc3QpOworCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBjbGllbnQtPnRyYW5zOworCXN0cnVjdCBwOV9jb25uICptID0gdHMtPmNvbm47CisJaW50IHJldCA9IDE7CiAKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAibXV4ICVwIGVyciAlZFxuIiwgbSwgZXJyKTsKLQltLT5lcnIgPSBlcnI7Ci0Jc3Bpbl9sb2NrKCZtLT5sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmbS0+cmVxX2xpc3QsIHJlcV9saXN0KSB7Ci0JCWxpc3RfbW92ZSgmcmVxLT5yZXFfbGlzdCwgJmNhbmNlbF9saXN0KTsKLQl9Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgcnRtcCwgJm0tPnVuc2VudF9yZXFfbGlzdCwgcmVxX2xpc3QpIHsKLQkJbGlzdF9tb3ZlKCZyZXEtPnJlcV9saXN0LCAmY2FuY2VsX2xpc3QpOwotCX0KLQlzcGluX3VubG9jaygmbS0+bG9jayk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCByZXEgJXBcbiIsIG0sIHJlcSk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmY2FuY2VsX2xpc3QsIHJlcV9saXN0KSB7Ci0JCWxpc3RfZGVsKCZyZXEtPnJlcV9saXN0KTsKLQkJaWYgKCFyZXEtPmVycikKLQkJCXJlcS0+ZXJyID0gZXJyOworCXNwaW5fbG9jaygmY2xpZW50LT5sb2NrKTsKKwlsaXN0X2RlbCgmcmVxLT5yZXFfbGlzdCk7CiAKLQkJaWYgKHJlcS0+Y2IpCi0JCQkoKnJlcS0+Y2IpIChyZXEsIHJlcS0+Y2JhKTsKLQkJZWxzZQotCQkJa2ZyZWUocmVxLT5yY2FsbCk7CisJaWYgKHJlcS0+c3RhdHVzID09IFJFUV9TVEFUVVNfVU5TRU5UKSB7CisJCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19GTFNIRDsKKwkJcmV0ID0gMDsKIAl9CisKKwlzcGluX3VubG9jaygmY2xpZW50LT5sb2NrKTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMTIxNiw3ICs3NTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHA5X2ZkX29wZW4oc3RydWN0IHA5X3RyYW5zICp0cmFucywgaW50IHJmZCwgaW50IHdmZCkKK3N0YXRpYyBpbnQgcDlfZmRfb3BlbihzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIGludCByZmQsIGludCB3ZmQpCiB7CiAJc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV90cmFuc19mZCksCiAJCQkJCSAgIEdGUF9LRVJORUwpOwpAQCAtMTIzNCwxMyArNzc2LDEzIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCXRyYW5zLT5wcml2ID0gdHM7Ci0JdHJhbnMtPnN0YXR1cyA9IENvbm5lY3RlZDsKKwljbGllbnQtPnRyYW5zID0gdHM7CisJY2xpZW50LT5zdGF0dXMgPSBDb25uZWN0ZWQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwOV9zb2NrZXRfb3BlbihzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zLCBzdHJ1Y3Qgc29ja2V0ICpjc29ja2V0KQorc3RhdGljIGludCBwOV9zb2NrZXRfb3BlbihzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBzb2NrZXQgKmNzb2NrZXQpCiB7CiAJaW50IGZkLCByZXQ7CiAKQEAgLTEyNTEsMTM3ICs3OTMsNjUgQEAKIAkJcmV0dXJuIGZkOwogCX0KIAotCXJldCA9IHA5X2ZkX29wZW4odHJhbnMsIGZkLCBmZCk7CisJcmV0ID0gcDlfZmRfb3BlbihjbGllbnQsIGZkLCBmZCk7CiAJaWYgKHJldCA8IDApIHsKIAkJUDlfRVBSSU5USyhLRVJOX0VSUiwgInA5X3NvY2tldF9vcGVuOiBmYWlsZWQgdG8gb3BlbiBmZFxuIik7CiAJCXNvY2tmZF9wdXQoY3NvY2tldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JKChzdHJ1Y3QgcDlfdHJhbnNfZmQgKil0cmFucy0+cHJpdiktPnJkLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJKChzdHJ1Y3QgcDlfdHJhbnNfZmQgKiljbGllbnQtPnRyYW5zKS0+cmQtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKIAogCXJldHVybiAwOwogfQogCiAvKioKLSAqIHA5X2ZkX3JlYWQtIHJlYWQgZnJvbSBhIGZkCi0gKiBAdHJhbnM6IHRyYW5zcG9ydCBpbnN0YW5jZSBzdGF0ZQotICogQHY6IGJ1ZmZlciB0byByZWNlaXZlIGRhdGEgaW50bwotICogQGxlbjogc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlcgorICogcDlfbXV4X2Rlc3Ryb3kgLSBjYW5jZWxzIGFsbCBwZW5kaW5nIHJlcXVlc3RzIGFuZCBmcmVlcyBtdXggcmVzb3VyY2VzCisgKiBAbTogbXV4IHRvIGRlc3Ryb3kKICAqCiAgKi8KIAotc3RhdGljIGludCBwOV9mZF9yZWFkKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIHZvaWQgKnYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBwOV9jb25uX2Rlc3Ryb3koc3RydWN0IHA5X2Nvbm4gKm0pCiB7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnRzID0gTlVMTDsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAibXV4ICVwIHByZXYgJXAgbmV4dCAlcFxuIiwgbSwKKwkJbS0+bXV4X2xpc3QucHJldiwgbS0+bXV4X2xpc3QubmV4dCk7CiAKLQlpZiAodHJhbnMgJiYgdHJhbnMtPnN0YXR1cyAhPSBEaXNjb25uZWN0ZWQpCi0JCXRzID0gdHJhbnMtPnByaXY7CisJcDlfbXV4X3BvbGxfc3RvcChtKTsKKwljYW5jZWxfd29ya19zeW5jKCZtLT5ycSk7CisJY2FuY2VsX3dvcmtfc3luYygmbS0+d3EpOwogCi0JaWYgKCF0cykKLQkJcmV0dXJuIC1FUkVNT1RFSU87CisJcDlfY29ubl9jYW5jZWwobSwgLUVDT05OUkVTRVQpOwogCi0JaWYgKCEodHMtPnJkLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCi0JCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsICJibG9ja2luZyByZWFkIC4uLlxuIik7Ci0KLQlyZXQgPSBrZXJuZWxfcmVhZCh0cy0+cmQsIHRzLT5yZC0+Zl9wb3MsIHYsIGxlbik7Ci0JaWYgKHJldCA8PSAwICYmIHJldCAhPSAtRVJFU1RBUlRTWVMgJiYgcmV0ICE9IC1FQUdBSU4pCi0JCXRyYW5zLT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7Ci0JcmV0dXJuIHJldDsKKwltLT5jbGllbnQgPSBOVUxMOworCWtmcmVlKG0pOwogfQogCiAvKioKLSAqIHA5X2ZkX3dyaXRlIC0gd3JpdGUgdG8gYSBzb2NrZXQKLSAqIEB0cmFuczogdHJhbnNwb3J0IGluc3RhbmNlIHN0YXRlCi0gKiBAdjogYnVmZmVyIHRvIHNlbmQgZGF0YSBmcm9tCi0gKiBAbGVuOiBzaXplIG9mIHNlbmQgYnVmZmVyCisgKiBwOV9mZF9jbG9zZSAtIHNodXRkb3duIGZpbGUgZGVzY3JpcHRvciB0cmFuc3BvcnQKKyAqIEBjbGllbnQ6IGNsaWVudCBpbnN0YW5jZQogICoKICAqLwogCi1zdGF0aWMgaW50IHA5X2ZkX3dyaXRlKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIHZvaWQgKnYsIGludCBsZW4pCi17Ci0JaW50IHJldDsKLQltbV9zZWdtZW50X3Qgb2xkZnM7Ci0Jc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IE5VTEw7Ci0KLQlpZiAodHJhbnMgJiYgdHJhbnMtPnN0YXR1cyAhPSBEaXNjb25uZWN0ZWQpCi0JCXRzID0gdHJhbnMtPnByaXY7Ci0KLQlpZiAoIXRzKQotCQlyZXR1cm4gLUVSRU1PVEVJTzsKLQotCWlmICghKHRzLT53ci0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiYmxvY2tpbmcgd3JpdGUgLi4uXG4iKTsKLQotCW9sZGZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKGdldF9kcygpKTsKLQkvKiBUaGUgY2FzdCB0byBhIHVzZXIgcG9pbnRlciBpcyB2YWxpZCBkdWUgdG8gdGhlIHNldF9mcygpICovCi0JcmV0ID0gdmZzX3dyaXRlKHRzLT53ciwgKHZvaWQgX191c2VyICopdiwgbGVuLCAmdHMtPndyLT5mX3Bvcyk7Ci0Jc2V0X2ZzKG9sZGZzKTsKLQotCWlmIChyZXQgPD0gMCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTICYmIHJldCAhPSAtRUFHQUlOKQotCQl0cmFucy0+c3RhdHVzID0gRGlzY29ubmVjdGVkOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXA5X2ZkX3BvbGwoc3RydWN0IHA5X3RyYW5zICp0cmFucywgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwdCkKLXsKLQlpbnQgcmV0LCBuOwotCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBOVUxMOwotCi0JaWYgKHRyYW5zICYmIHRyYW5zLT5zdGF0dXMgPT0gQ29ubmVjdGVkKQotCQl0cyA9IHRyYW5zLT5wcml2OwotCi0JaWYgKCF0cykKLQkJcmV0dXJuIC1FUkVNT1RFSU87Ci0KLQlpZiAoIXRzLT5yZC0+Zl9vcCB8fCAhdHMtPnJkLT5mX29wLT5wb2xsKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmICghdHMtPndyLT5mX29wIHx8ICF0cy0+d3ItPmZfb3AtPnBvbGwpCi0JCXJldHVybiAtRUlPOwotCi0JcmV0ID0gdHMtPnJkLT5mX29wLT5wb2xsKHRzLT5yZCwgcHQpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHRzLT5yZCAhPSB0cy0+d3IpIHsKLQkJbiA9IHRzLT53ci0+Zl9vcC0+cG9sbCh0cy0+d3IsIHB0KTsKLQkJaWYgKG4gPCAwKQotCQkJcmV0dXJuIG47Ci0JCXJldCA9IChyZXQgJiB+UE9MTE9VVCkgfCAobiAmIH5QT0xMSU4pOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogcDlfZmRfY2xvc2UgLSBzaHV0ZG93biBzb2NrZXQKLSAqIEB0cmFuczogcHJpdmF0ZSBzb2NrZXQgc3RydWN0dXJlCi0gKgotICovCi0KLXN0YXRpYyB2b2lkIHA5X2ZkX2Nsb3NlKHN0cnVjdCBwOV90cmFucyAqdHJhbnMpCitzdGF0aWMgdm9pZCBwOV9mZF9jbG9zZShzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHA5X3RyYW5zX2ZkICp0czsKIAotCWlmICghdHJhbnMpCisJaWYgKCFjbGllbnQpCiAJCXJldHVybjsKIAotCXRzID0geGNoZygmdHJhbnMtPnByaXYsIE5VTEwpOwotCisJdHMgPSBjbGllbnQtPnRyYW5zOwogCWlmICghdHMpCiAJCXJldHVybjsKIAorCWNsaWVudC0+c3RhdHVzID0gRGlzY29ubmVjdGVkOworCiAJcDlfY29ubl9kZXN0cm95KHRzLT5jb25uKTsKIAotCXRyYW5zLT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7CiAJaWYgKHRzLT5yZCkKIAkJZnB1dCh0cy0+cmQpOwogCWlmICh0cy0+d3IpCiAJCWZwdXQodHMtPndyKTsKKwogCWtmcmVlKHRzKTsKIH0KIApAQCAtMTQwMiwzMSArODcyLDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnMgKgotcDlfdHJhbnNfY3JlYXRlX3RjcChjb25zdCBjaGFyICphZGRyLCBjaGFyICphcmdzLCBpbnQgbXNpemUsIHVuc2lnbmVkIGNoYXIgZG90dSkKK3N0YXRpYyBpbnQKK3A5X2ZkX2NyZWF0ZV90Y3Aoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICphZGRyLCBjaGFyICphcmdzKQogewogCWludCBlcnI7Ci0Jc3RydWN0IHA5X3RyYW5zICp0cmFuczsKIAlzdHJ1Y3Qgc29ja2V0ICpjc29ja2V0OwogCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc2VydmVyOwogCXN0cnVjdCBwOV9mZF9vcHRzIG9wdHM7Ci0Jc3RydWN0IHA5X3RyYW5zX2ZkICpwOworCXN0cnVjdCBwOV90cmFuc19mZCAqcCA9IE5VTEw7IC8qIHRoaXMgZ2V0cyBhbGxvY2F0ZWQgaW4gcDlfZmRfb3BlbiAqLwogCiAJZXJyID0gcGFyc2Vfb3B0cyhhcmdzLCAmb3B0cyk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiBFUlJfUFRSKGVycik7CisJCXJldHVybiBlcnI7CiAKIAlpZiAodmFsaWRfaXBhZGRyNChhZGRyKSA8IDApCi0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNzb2NrZXQgPSBOVUxMOwotCXRyYW5zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X3RyYW5zKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cmFucykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JdHJhbnMtPm1zaXplID0gbXNpemU7Ci0JdHJhbnMtPmV4dGVuZGVkID0gZG90dTsKLQl0cmFucy0+cnBjID0gcDlfZmRfcnBjOwotCXRyYW5zLT5jbG9zZSA9IHA5X2ZkX2Nsb3NlOwogCiAJc2luX3NlcnZlci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAlzaW5fc2VydmVyLnNpbl9hZGRyLnNfYWRkciA9IGluX2F0b24oYWRkcik7CkBAIC0xNDQ5LDQ1ICs5MTEsMzggQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQllcnIgPSBwOV9zb2NrZXRfb3Blbih0cmFucywgY3NvY2tldCk7CisJZXJyID0gcDlfc29ja2V0X29wZW4oY2xpZW50LCBjc29ja2V0KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvcjsKIAotCXAgPSAoc3RydWN0IHA5X3RyYW5zX2ZkICopIHRyYW5zLT5wcml2OwotCXAtPmNvbm4gPSBwOV9jb25uX2NyZWF0ZSh0cmFucyk7CisJcCA9IChzdHJ1Y3QgcDlfdHJhbnNfZmQgKikgY2xpZW50LT50cmFuczsKKwlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUoY2xpZW50KTsKIAlpZiAoSVNfRVJSKHAtPmNvbm4pKSB7CiAJCWVyciA9IFBUUl9FUlIocC0+Y29ubik7CiAJCXAtPmNvbm4gPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0KIAotCXJldHVybiB0cmFuczsKKwlyZXR1cm4gMDsKIAogZXJyb3I6CiAJaWYgKGNzb2NrZXQpCiAJCXNvY2tfcmVsZWFzZShjc29ja2V0KTsKIAotCWtmcmVlKHRyYW5zKTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOworCWtmcmVlKHApOworCisJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBwOV90cmFucyAqCi1wOV90cmFuc19jcmVhdGVfdW5peChjb25zdCBjaGFyICphZGRyLCBjaGFyICphcmdzLCBpbnQgbXNpemUsCi0JCQkJCQkJdW5zaWduZWQgY2hhciBkb3R1KQorc3RhdGljIGludAorcDlfZmRfY3JlYXRlX3VuaXgoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICphZGRyLCBjaGFyICphcmdzKQogewogCWludCBlcnI7CiAJc3RydWN0IHNvY2tldCAqY3NvY2tldDsKIAlzdHJ1Y3Qgc29ja2FkZHJfdW4gc3VuX3NlcnZlcjsKLQlzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zOwotCXN0cnVjdCBwOV90cmFuc19mZCAqcDsKKwlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnAgPSBOVUxMOyAvKiB0aGlzIGdldHMgYWxsb2NhdGVkIGluIHA5X2ZkX29wZW4gKi8KIAogCWNzb2NrZXQgPSBOVUxMOwotCXRyYW5zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X3RyYW5zKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cmFucykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQl0cmFucy0+cnBjID0gcDlfZmRfcnBjOwotCXRyYW5zLT5jbG9zZSA9IHA5X2ZkX2Nsb3NlOwogCiAJaWYgKHN0cmxlbihhZGRyKSA+IFVOSVhfUEFUSF9NQVgpIHsKIAkJUDlfRVBSSU5USyhLRVJOX0VSUiwgInA5X3RyYW5zX3VuaXg6IGFkZHJlc3MgdG9vIGxvbmc6ICVzXG4iLApAQCAtMTUwOCw3OSArOTYzLDY5IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JZXJyID0gcDlfc29ja2V0X29wZW4odHJhbnMsIGNzb2NrZXQpOworCWVyciA9IHA5X3NvY2tldF9vcGVuKGNsaWVudCwgY3NvY2tldCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQl0cmFucy0+bXNpemUgPSBtc2l6ZTsKLQl0cmFucy0+ZXh0ZW5kZWQgPSBkb3R1OwotCXAgPSAoc3RydWN0IHA5X3RyYW5zX2ZkICopIHRyYW5zLT5wcml2OwotCXAtPmNvbm4gPSBwOV9jb25uX2NyZWF0ZSh0cmFucyk7CisJcCA9IChzdHJ1Y3QgcDlfdHJhbnNfZmQgKikgY2xpZW50LT50cmFuczsKKwlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUoY2xpZW50KTsKIAlpZiAoSVNfRVJSKHAtPmNvbm4pKSB7CiAJCWVyciA9IFBUUl9FUlIocC0+Y29ubik7CiAJCXAtPmNvbm4gPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0KIAotCXJldHVybiB0cmFuczsKKwlyZXR1cm4gMDsKIAogZXJyb3I6CiAJaWYgKGNzb2NrZXQpCiAJCXNvY2tfcmVsZWFzZShjc29ja2V0KTsKIAotCWtmcmVlKHRyYW5zKTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOworCWtmcmVlKHApOworCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnMgKgotcDlfdHJhbnNfY3JlYXRlX2ZkKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKmFyZ3MsIGludCBtc2l6ZSwKLQkJCQkJCQl1bnNpZ25lZCBjaGFyIGV4dGVuZGVkKQorc3RhdGljIGludAorcDlfZmRfY3JlYXRlKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqYWRkciwgY2hhciAqYXJncykKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBwOV90cmFucyAqdHJhbnM7CiAJc3RydWN0IHA5X2ZkX29wdHMgb3B0czsKLQlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnA7CisJc3RydWN0IHA5X3RyYW5zX2ZkICpwID0gTlVMTDsgLyogdGhpcyBnZXQgYWxsb2NhdGVkIGluIHA5X2ZkX29wZW4gKi8KIAogCXBhcnNlX29wdHMoYXJncywgJm9wdHMpOwogCiAJaWYgKG9wdHMucmZkID09IH4wIHx8IG9wdHMud2ZkID09IH4wKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidjlmczogSW5zdWZmaWNpZW50IG9wdGlvbnMgZm9yIHByb3RvPWZkXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT1BST1RPT1BUKTsKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CiAKLQl0cmFucyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV90cmFucyksIEdGUF9LRVJORUwpOwotCWlmICghdHJhbnMpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JdHJhbnMtPnJwYyA9IHA5X2ZkX3JwYzsKLQl0cmFucy0+Y2xvc2UgPSBwOV9mZF9jbG9zZTsKLQotCWVyciA9IHA5X2ZkX29wZW4odHJhbnMsIG9wdHMucmZkLCBvcHRzLndmZCk7CisJZXJyID0gcDlfZmRfb3BlbihjbGllbnQsIG9wdHMucmZkLCBvcHRzLndmZCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQl0cmFucy0+bXNpemUgPSBtc2l6ZTsKLQl0cmFucy0+ZXh0ZW5kZWQgPSBleHRlbmRlZDsKLQlwID0gKHN0cnVjdCBwOV90cmFuc19mZCAqKSB0cmFucy0+cHJpdjsKLQlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUodHJhbnMpOworCXAgPSAoc3RydWN0IHA5X3RyYW5zX2ZkICopIGNsaWVudC0+dHJhbnM7CisJcC0+Y29ubiA9IHA5X2Nvbm5fY3JlYXRlKGNsaWVudCk7CiAJaWYgKElTX0VSUihwLT5jb25uKSkgewogCQllcnIgPSBQVFJfRVJSKHAtPmNvbm4pOwogCQlwLT5jb25uID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlyZXR1cm4gdHJhbnM7CisJcmV0dXJuIDA7CiAKIGVycm9yOgotCWtmcmVlKHRyYW5zKTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOworCWtmcmVlKHApOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlIHA5X3RjcF90cmFucyA9IHsKIAkubmFtZSA9ICJ0Y3AiLAogCS5tYXhzaXplID0gTUFYX1NPQ0tfQlVGLAogCS5kZWYgPSAxLAotCS5jcmVhdGUgPSBwOV90cmFuc19jcmVhdGVfdGNwLAorCS5jcmVhdGUgPSBwOV9mZF9jcmVhdGVfdGNwLAorCS5jbG9zZSA9IHA5X2ZkX2Nsb3NlLAorCS5yZXF1ZXN0ID0gcDlfZmRfcmVxdWVzdCwKKwkuY2FuY2VsID0gcDlfZmRfY2FuY2VsLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMTU4OCw3ICsxMDMzLDEwIEBACiAJLm5hbWUgPSAidW5peCIsCiAJLm1heHNpemUgPSBNQVhfU09DS19CVUYsCiAJLmRlZiA9IDAsCi0JLmNyZWF0ZSA9IHA5X3RyYW5zX2NyZWF0ZV91bml4LAorCS5jcmVhdGUgPSBwOV9mZF9jcmVhdGVfdW5peCwKKwkuY2xvc2UgPSBwOV9mZF9jbG9zZSwKKwkucmVxdWVzdCA9IHA5X2ZkX3JlcXVlc3QsCisJLmNhbmNlbCA9IHA5X2ZkX2NhbmNlbCwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIH07CiAKQEAgLTE1OTYsMjMgKzEwNDQsNzEgQEAKIAkubmFtZSA9ICJmZCIsCiAJLm1heHNpemUgPSBNQVhfU09DS19CVUYsCiAJLmRlZiA9IDAsCi0JLmNyZWF0ZSA9IHA5X3RyYW5zX2NyZWF0ZV9mZCwKKwkuY3JlYXRlID0gcDlfZmRfY3JlYXRlLAorCS5jbG9zZSA9IHA5X2ZkX2Nsb3NlLAorCS5yZXF1ZXN0ID0gcDlfZmRfcmVxdWVzdCwKKwkuY2FuY2VsID0gcDlfZmRfY2FuY2VsLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIAorLyoqCisgKiBwOV9wb2xsX3Byb2MgLSBwb2xsIHdvcmtlciB0aHJlYWQKKyAqIEBhOiB0aHJlYWQgc3RhdGUgYW5kIGFyZ3VtZW50cworICoKKyAqIHBvbGxzIGFsbCB2OWZzIHRyYW5zcG9ydHMgZm9yIG5ldyBldmVudHMgYW5kIHF1ZXVlcyB0aGUgYXBwcm9wcmlhdGUKKyAqIHdvcmsgdG8gdGhlIHdvcmsgcXVldWUKKyAqCisgKi8KKworc3RhdGljIGludCBwOV9wb2xsX3Byb2Modm9pZCAqYSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgInN0YXJ0ICVwXG4iLCBjdXJyZW50KTsKKyByZXBlYXQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmcDlfcG9sbF9wZW5kaW5nX2xpc3QpKSB7CisJCXN0cnVjdCBwOV9jb25uICpjb25uID0gbGlzdF9maXJzdF9lbnRyeSgmcDlfcG9sbF9wZW5kaW5nX2xpc3QsCisJCQkJCQkJc3RydWN0IHA5X2Nvbm4sCisJCQkJCQkJcG9sbF9wZW5kaW5nX2xpbmspOworCQlsaXN0X2RlbF9pbml0KCZjb25uLT5wb2xsX3BlbmRpbmdfbGluayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOworCisJCXA5X3BvbGxfbXV4KGNvbm4pOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcDlfcG9sbF9sb2NrLCBmbGFncyk7CisKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCWlmIChsaXN0X2VtcHR5KCZwOV9wb2xsX3BlbmRpbmdfbGlzdCkpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgInNsZWVwaW5nLi4uXG4iKTsKKwkJc2NoZWR1bGUoKTsKKwl9CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJaWYgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCWdvdG8gcmVwZWF0OworCisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgImZpbmlzaFxuIik7CisJcmV0dXJuIDA7Cit9CisKIGludCBwOV90cmFuc19mZF9pbml0KHZvaWQpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwOV9tdXhfcG9sbF90YXNrcyk7IGkrKykKLQkJcDlfbXV4X3BvbGxfdGFza3NbaV0udGFzayA9IE5VTEw7Ci0KIAlwOV9tdXhfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJ2OWZzIik7CiAJaWYgKCFwOV9tdXhfd3EpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAidjlmczogbXV4OiBjcmVhdGluZyB3b3JrcXVldWUgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJcDlfcG9sbF90YXNrID0ga3RocmVhZF9ydW4ocDlfcG9sbF9wcm9jLCBOVUxMLCAidjlmcy1wb2xsIik7CisJaWYgKElTX0VSUihwOV9wb2xsX3Rhc2spKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKHA5X211eF93cSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInY5ZnM6IG11eDogY3JlYXRpbmcgcG9sbCB0YXNrIGZhaWxlZFxuIik7CisJCXJldHVybiBQVFJfRVJSKHA5X3BvbGxfdGFzayk7CisJfQorCiAJdjlmc19yZWdpc3Rlcl90cmFucygmcDlfdGNwX3RyYW5zKTsKIAl2OWZzX3JlZ2lzdGVyX3RyYW5zKCZwOV91bml4X3RyYW5zKTsKIAl2OWZzX3JlZ2lzdGVyX3RyYW5zKCZwOV9mZF90cmFucyk7CkBAIC0xNjIyLDYgKzExMTgsNyBAQAogCiB2b2lkIHA5X3RyYW5zX2ZkX2V4aXQodm9pZCkKIHsKKwlrdGhyZWFkX3N0b3AocDlfcG9sbF90YXNrKTsKIAl2OWZzX3VucmVnaXN0ZXJfdHJhbnMoJnA5X3RjcF90cmFucyk7CiAJdjlmc191bnJlZ2lzdGVyX3RyYW5zKCZwOV91bml4X3RyYW5zKTsKIAl2OWZzX3VucmVnaXN0ZXJfdHJhbnMoJnA5X2ZkX3RyYW5zKTsKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc192aXJ0aW8uYyBiL25ldC85cC90cmFuc192aXJ0aW8uYwppbmRleCA5NDkxMmUwLi4yZDc3ODFlYyAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCisrKyBiL25ldC85cC90cmFuc192aXJ0aW8uYwpAQCAtMSwxMiArMSwxMCBAQAogLyoKLSAqIFRoZSBHdWVzdCA5cCB0cmFuc3BvcnQgZHJpdmVyCisgKiBUaGUgVmlydGlvIDlwIHRyYW5zcG9ydCBkcml2ZXIKICAqCiAgKiBUaGlzIGlzIGEgYmxvY2sgYmFzZWQgdHJhbnNwb3J0IGRyaXZlciBiYXNlZCBvbiB0aGUgbGd1ZXN0IGJsb2NrIGRyaXZlcgogICogY29kZS4KICAqCi0gKi8KLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgVmFuIEhlbnNiZXJnZW4sIElCTSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFZhbiBIZW5zYmVyZ2VuLCBJQk0gQ29ycG9yYXRpb24KICAqCiAgKiAgQmFzZWQgb24gdmlydGlvIGNvbnNvbGUgZHJpdmVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFJ1c3R5IFJ1c3NlbGwsIElCTSBDb3Jwb3JhdGlvbgpAQCAtNDEsNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxuZXQvOXAvOXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxuZXQvOXAvY2xpZW50Lmg+CiAjaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+CkBAIC01Myw1MCArNTIsNiBAQAogLyogZ2xvYmFsIHdoaWNoIHRyYWNrcyBoaWdoZXN0IGluaXRpYWxpemVkIGNoYW5uZWwgKi8KIHN0YXRpYyBpbnQgY2hhbl9pbmRleDsKIAotI2RlZmluZSBQOV9JTklUX01BWFRBRwkxNgotCi0KLS8qKgotICogZW51bSBwOV9yZXFfc3RhdHVzX3QgLSB2aXJ0aW8gcmVxdWVzdCBzdGF0dXMKLSAqIEBSRVFfU1RBVFVTX0lETEU6IHJlcXVlc3Qgc2xvdCB1bnVzZWQKLSAqIEBSRVFfU1RBVFVTX1NFTlQ6IHJlcXVlc3Qgc2VudCB0byBzZXJ2ZXIKLSAqIEBSRVFfU1RBVFVTX1JDVkQ6IHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gc2VydmVyCi0gKiBAUkVRX1NUQVRVU19GTFNIOiByZXF1ZXN0IGhhcyBiZWVuIGZsdXNoZWQKLSAqCi0gKiBUaGUgQFJFUV9TVEFUVVNfSURMRSBzdGF0ZSBpcyB1c2VkIHRvIG1hcmsgYSByZXF1ZXN0IHNsb3QgYXMgdW51c2VkCi0gKiBidXQgdXNlIGlzIGFjdHVhbGx5IHRyYWNrZWQgYnkgdGhlIGlkcG9vbCBzdHJ1Y3R1cmUgd2hpY2ggaGFuZGxlcyB0YWcKLSAqIGlkIGFsbG9jYXRpb24uCi0gKgotICovCi0KLWVudW0gcDlfcmVxX3N0YXR1c190IHsKLQlSRVFfU1RBVFVTX0lETEUsCi0JUkVRX1NUQVRVU19TRU5ULAotCVJFUV9TVEFUVVNfUkNWRCwKLQlSRVFfU1RBVFVTX0ZMU0gsCi19OwotCi0vKioKLSAqIHN0cnVjdCBwOV9yZXFfdCAtIHZpcnRpbyByZXF1ZXN0IHNsb3RzCi0gKiBAc3RhdHVzOiBzdGF0dXMgb2YgdGhpcyByZXF1ZXN0IHNsb3QKLSAqIEB3cTogd2FpdF9xdWV1ZSBmb3IgdGhlIGNsaWVudCB0byBibG9jayBvbiBmb3IgdGhpcyByZXF1ZXN0Ci0gKgotICogVGhlIHZpcnRpbyB0cmFuc3BvcnQgdXNlcyBhbiBhcnJheSB0byB0cmFjayBvdXRzdGFuZGluZyByZXF1ZXN0cwotICogaW5zdGVhZCBvZiBhIGxpc3QuICBXaGlsZSB0aGlzIG1heSBpbmN1cnIgb3ZlcmhlYWQgZHVyaW5nIGluaXRpYWwKLSAqIGFsbG9jYXRpb24gb3IgZXhwYW5zaW9uLCBpdCBtYWtlcyByZXF1ZXN0IGxvb2t1cCBtdWNoIGVhc2llciBhcyB0aGUKLSAqIHRhZyBpZCBpcyBhIGluZGV4IGludG8gYW4gYXJyYXkuICAoV2UgdXNlIHRhZysxIHNvIHRoYXQgd2UgY2FuIGFjY29tb2RhdGUKLSAqIHRoZSAtMSB0YWcgZm9yIHRoZSBUX1ZFUlNJT04gcmVxdWVzdCkuCi0gKiBUaGlzIGFsc28gaGFzIHRoZSBuaWNlIGVmZmVjdCBvZiBvbmx5IGhhdmluZyB0byBhbGxvY2F0ZSB3YWl0X3F1ZXVlcwotICogb25jZSwgaW5zdGVhZCBvZiBjb25zdGFudGx5IGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgdGhlbS4gIEl0cyBwb3NzaWJsZQotICogb3RoZXIgcmVzb3VyY2VzIGNvdWxkIGJlbmVmaXQgZnJvbSB0aGlzIHNjaGVtZSBhcyB3ZWxsLgotICoKLSAqLwotCi1zdHJ1Y3QgcDlfcmVxX3QgewotCWludCBzdGF0dXM7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgKndxOwotfTsKLQogLyoqCiAgKiBzdHJ1Y3QgdmlydGlvX2NoYW4gLSBwZXItaW5zdGFuY2UgdHJhbnNwb3J0IGluZm9ybWF0aW9uCiAgKiBAaW5pdGlhbGl6ZWQ6IHdoZXRoZXIgdGhlIGNoYW5uZWwgaXMgaW5pdGlhbGl6ZWQKQEAgLTEyMSw2NyArNzYsMTQgQEAKIAogCXNwaW5sb2NrX3QgbG9jazsKIAorCXN0cnVjdCBwOV9jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKIAlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKIAotCXN0cnVjdCBwOV9pZHBvb2wgKnRhZ3Bvb2w7Ci0Jc3RydWN0IHA5X3JlcV90ICpyZXFzOwotCWludCBtYXhfdGFnOwotCiAJLyogU2NhdHRlcmxpc3Q6IGNhbiBiZSB0b28gYmlnIGZvciBzdGFjay4gKi8KIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbVklSVFFVRVVFX05VTV07CiB9IGNoYW5uZWxzW01BWF85UF9DSEFOXTsKIAotLyoqCi0gKiBwOV9sb29rdXBfdGFnIC0gTG9va3VwIHJlcXVlc3RzIGJ5IHRhZwotICogQGM6IHZpcnRpbyBjaGFubmVsIHRvIGxvb2t1cCB0YWcgd2l0aGluCi0gKiBAdGFnOiBudW1lcmljIGlkIGZvciB0cmFuc2FjdGlvbgotICoKLSAqIHRoaXMgaXMgYSBzaW1wbGUgYXJyYXkgbG9va3VwLCBidXQgd2lsbCBncm93IHRoZQotICogcmVxdWVzdF9zbG90cyBhcyBuZWNlc3NhcnkgdG8gYWNjb21vZGF0ZSB0cmFuc2FjdGlvbgotICogaWRzIHdoaWNoIGRpZCBub3QgcHJldmlvdXNseSBoYXZlIGEgc2xvdC4KLSAqCi0gKiBCdWdzOiB0aGVyZSBpcyBjdXJyZW50bHkgbm8gdXBwZXIgbGltaXQgb24gcmVxdWVzdCBzbG90cyBzZXQKLSAqIGhlcmUsIGJ1dCB0aGF0IHNob3VsZCBiZSBjb25zdHJhaW5lZCBieSB0aGUgaWQgYWNjb3VudGluZy4KLSAqLwotCi1zdGF0aWMgc3RydWN0IHA5X3JlcV90ICpwOV9sb29rdXBfdGFnKHN0cnVjdCB2aXJ0aW9fY2hhbiAqYywgdTE2IHRhZykKLXsKLQkvKiBUaGlzIGxvb2tzIHVwIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGJ5IHRhZyBzbyB3ZSBrbm93IHdoaWNoCi0JICogYnVmZmVyIHRvIHJlYWQgdGhlIGRhdGEgaW50byAqLwotCXRhZysrOwotCi0Jd2hpbGUgKHRhZyA+PSBjLT5tYXhfdGFnKSB7Ci0JCWludCBvbGRfbWF4ID0gYy0+bWF4X3RhZzsKLQkJaW50IGNvdW50OwotCi0JCWlmIChjLT5tYXhfdGFnKQotCQkJYy0+bWF4X3RhZyAqPSAyOwotCQllbHNlCi0JCQljLT5tYXhfdGFnID0gUDlfSU5JVF9NQVhUQUc7Ci0KLQkJYy0+cmVxcyA9IGtyZWFsbG9jKGMtPnJlcXMsIHNpemVvZihzdHJ1Y3QgcDlfcmVxX3QpKmMtPm1heF90YWcsCi0JCQkJCQkJCUdGUF9BVE9NSUMpOwotCQlpZiAoIWMtPnJlcXMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOwotCQkJQlVHKCk7Ci0JCX0KLQkJZm9yIChjb3VudCA9IG9sZF9tYXg7IGNvdW50IDwgYy0+bWF4X3RhZzsgY291bnQrKykgewotCQkJYy0+cmVxc1tjb3VudF0uc3RhdHVzID0gUkVRX1NUQVRVU19JRExFOwotCQkJYy0+cmVxc1tjb3VudF0ud3EgPSBrbWFsbG9jKHNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCksCi0JCQkJCQkJCUdGUF9BVE9NSUMpOwotCQkJaWYgKCFjLT5yZXFzW2NvdW50XS53cSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOwotCQkJCUJVRygpOwotCQkJfQotCQkJaW5pdF93YWl0cXVldWVfaGVhZChjLT5yZXFzW2NvdW50XS53cSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gJmMtPnJlcXNbdGFnXTsKLX0KLQotCiAvKiBIb3cgbWFueSBieXRlcyBsZWZ0IGluIHRoaXMgcGFnZS4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmVzdF9vZl9wYWdlKHZvaWQgKmRhdGEpCiB7CkBAIC0xOTcsMjUgKzk5LDEzIEBACiAgKgogICovCiAKLXN0YXRpYyB2b2lkIHA5X3ZpcnRpb19jbG9zZShzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zKQorc3RhdGljIHZvaWQgcDlfdmlydGlvX2Nsb3NlKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSB0cmFucy0+cHJpdjsKLQlpbnQgY291bnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5sb2NrLCBmbGFncyk7Ci0JcDlfaWRwb29sX2Rlc3Ryb3koY2hhbi0+dGFncG9vbCk7Ci0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgY2hhbi0+bWF4X3RhZzsgY291bnQrKykKLQkJa2ZyZWUoY2hhbi0+cmVxc1tjb3VudF0ud3EpOwotCWtmcmVlKGNoYW4tPnJlcXMpOwotCWNoYW4tPm1heF90YWcgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKKwlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSBjbGllbnQtPnRyYW5zOwogCiAJbXV0ZXhfbG9jaygmdmlydGlvXzlwX2xvY2spOwogCWNoYW4tPmludXNlID0gZmFsc2U7CiAJbXV0ZXhfdW5sb2NrKCZ2aXJ0aW9fOXBfbG9jayk7Ci0KLQlrZnJlZSh0cmFucyk7CiB9CiAKIC8qKgpAQCAtMjM2LDE3ICsxMjYsMTYgQEAKIAlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSB2cS0+dmRldi0+cHJpdjsKIAlzdHJ1Y3QgcDlfZmNhbGwgKnJjOwogCXVuc2lnbmVkIGludCBsZW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5sb2NrLCBmbGFncyk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjogcmVxdWVzdCBkb25lXG4iKTsKKwogCXdoaWxlICgocmMgPSBjaGFuLT52cS0+dnFfb3BzLT5nZXRfYnVmKGNoYW4tPnZxLCAmbGVuKSkgIT0gTlVMTCkgewotCQlyZXEgPSBwOV9sb29rdXBfdGFnKGNoYW4sIHJjLT50YWcpOwotCQlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfUkNWRDsKLQkJd2FrZV91cChyZXEtPndxKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjogcmMgJXBcbiIsIHJjKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjogbG9va3VwIHRhZyAlZFxuIiwgcmMtPnRhZyk7CisJCXJlcSA9IHA5X3RhZ19sb29rdXAoY2hhbi0+Y2xpZW50LCByYy0+dGFnKTsKKwkJcDlfY2xpZW50X2NiKGNoYW4tPmNsaWVudCwgcmVxKTsKIAl9Ci0JLyogSW4gY2FzZSBxdWV1ZSBpcyBzdG9wcGVkIHdhaXRpbmcgZm9yIG1vcmUgYnVmZmVycy4gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMjgzLDggKzE3MiwxNCBAQAogCXJldHVybiBpbmRleC1zdGFydDsKIH0KIAorLyogV2UgZG9uJ3QgY3VycmVudGx5IGFsbG93IGNhbmNlbGluZyBvZiB2aXJ0aW8gcmVxdWVzdHMgKi8KK3N0YXRpYyBpbnQgcDlfdmlydGlvX2NhbmNlbChzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKQoreworCXJldHVybiAxOworfQorCiAvKioKLSAqIHA5X3ZpcnRpb19ycGMgLSBpc3N1ZSBhIHJlcXVlc3QgYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UKKyAqIHA5X3ZpcnRpb19yZXF1ZXN0IC0gaXNzdWUgYSByZXF1ZXN0CiAgKiBAdDogdHJhbnNwb3J0IHN0YXRlCiAgKiBAdGM6ICZwOV9mY2FsbCByZXF1ZXN0IHRvIHRyYW5zbWl0CiAgKiBAcmM6ICZwOV9mY2FsbCB0byBwdXQgcmVwb25zZSBpbnRvCkBAIC0yOTIsNDQgKzE4NywyMiBAQAogICovCiAKIHN0YXRpYyBpbnQKLXA5X3ZpcnRpb19ycGMoc3RydWN0IHA5X3RyYW5zICp0LCBzdHJ1Y3QgcDlfZmNhbGwgKnRjLCBzdHJ1Y3QgcDlfZmNhbGwgKipyYykKK3A5X3ZpcnRpb19yZXF1ZXN0KHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgc3RydWN0IHA5X3JlcV90ICpyZXEpCiB7CiAJaW50IGluLCBvdXQ7Ci0JaW50IG4sIGVyciwgc2l6ZTsKLQlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSB0LT5wcml2OwotCWNoYXIgKnJkYXRhOwotCXN0cnVjdCBwOV9yZXFfdCAqcmVxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHZpcnRpb19jaGFuICpjaGFuID0gY2xpZW50LT50cmFuczsKKwljaGFyICpyZGF0YSA9IChjaGFyICopcmVxLT5yYytzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKTsKIAotCWlmICgqcmMgPT0gTlVMTCkgewotCQkqcmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmNhbGwpICsgdC0+bXNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoISpyYykKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiOXAgZGVidWc6IHZpcnRpbyByZXF1ZXN0XG4iKTsKIAotCXJkYXRhID0gKGNoYXIgKikqcmMrc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCk7Ci0KLQluID0gUDlfTk9UQUc7Ci0JaWYgKHRjLT5pZCAhPSBQOV9UVkVSU0lPTikgewotCQluID0gcDlfaWRwb29sX2dldChjaGFuLT50YWdwb29sKTsKLQkJaWYgKG4gPCAwKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKLQlyZXEgPSBwOV9sb29rdXBfdGFnKGNoYW4sIG4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKLQotCXA5X3NldF90YWcodGMsIG4pOwotCi0JUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjlwIGRlYnVnOiB2aXJ0aW8gcnBjIHRhZyAlZFxuIiwgbik7Ci0KLQlvdXQgPSBwYWNrX3NnX2xpc3QoY2hhbi0+c2csIDAsIFZJUlRRVUVVRV9OVU0sIHRjLT5zZGF0YSwgdGMtPnNpemUpOwotCWluID0gcGFja19zZ19saXN0KGNoYW4tPnNnLCBvdXQsIFZJUlRRVUVVRV9OVU0tb3V0LCByZGF0YSwgdC0+bXNpemUpOworCW91dCA9IHBhY2tfc2dfbGlzdChjaGFuLT5zZywgMCwgVklSVFFVRVVFX05VTSwgcmVxLT50Yy0+c2RhdGEsCisJCQkJCQkJCXJlcS0+dGMtPnNpemUpOworCWluID0gcGFja19zZ19saXN0KGNoYW4tPnNnLCBvdXQsIFZJUlRRVUVVRV9OVU0tb3V0LCByZGF0YSwKKwkJCQkJCQkJY2xpZW50LT5tc2l6ZSk7CiAKIAlyZXEtPnN0YXR1cyA9IFJFUV9TVEFUVVNfU0VOVDsKIAotCWlmIChjaGFuLT52cS0+dnFfb3BzLT5hZGRfYnVmKGNoYW4tPnZxLCBjaGFuLT5zZywgb3V0LCBpbiwgdGMpKSB7CisJaWYgKGNoYW4tPnZxLT52cV9vcHMtPmFkZF9idWYoY2hhbi0+dnEsIGNoYW4tPnNnLCBvdXQsIGluLCByZXEtPnRjKSkgewogCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLAogCQkJIjlwIGRlYnVnOiB2aXJ0aW8gcnBjIGFkZF9idWYgcmV0dXJuZWQgZmFpbHVyZSIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTMzNywzMSArMjEwLDcgQEAKIAogCWNoYW4tPnZxLT52cV9vcHMtPmtpY2soY2hhbi0+dnEpOwogCi0Jd2FpdF9ldmVudCgqcmVxLT53cSwgcmVxLT5zdGF0dXMgPT0gUkVRX1NUQVRVU19SQ1ZEKTsKLQotCXNpemUgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKSByZGF0YSk7Ci0KLQllcnIgPSBwOV9kZXNlcmlhbGl6ZV9mY2FsbChyZGF0YSwgc2l6ZSwgKnJjLCB0LT5leHRlbmRlZCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywKLQkJCSI5cCBkZWJ1ZzogdmlydGlvIHJwYyBkZXNlcmlhbGl6ZSByZXR1cm5lZCAlZFxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfTkVUXzlQX0RFQlVHCi0JaWYgKChwOV9kZWJ1Z19sZXZlbCZQOV9ERUJVR19GQ0FMTCkgPT0gUDlfREVCVUdfRkNBTEwpIHsKLQkJY2hhciBidWZbMTUwXTsKLQotCQlwOV9wcmludGZjYWxsKGJ1Ziwgc2l6ZW9mKGJ1ZiksICpyYywgdC0+ZXh0ZW5kZWQpOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIj4+PiAlcCAlc1xuIiwgdCwgYnVmKTsKLQl9Ci0jZW5kaWYKLQotCWlmIChuICE9IFA5X05PVEFHICYmIHA5X2lkcG9vbF9jaGVjayhuLCBjaGFuLT50YWdwb29sKSkKLQkJcDlfaWRwb29sX3B1dChuLCBjaGFuLT50YWdwb29sKTsKLQotCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19JRExFOwotCisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIjlwIGRlYnVnOiB2aXJ0aW8gcmVxdWVzdCBraWNrZWRcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC00MjIsMTAgKzI3MSw5IEBACiAKIC8qKgogICogcDlfdmlydGlvX2NyZWF0ZSAtIGFsbG9jYXRlIGEgbmV3IHZpcnRpbyBjaGFubmVsCisgKiBAY2xpZW50OiBjbGllbnQgaW5zdGFuY2UgaW52b2tpbmcgdGhpcyB0cmFuc3BvcnQKICAqIEBkZXZuYW1lOiBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGNoYW5uZWwgdG8gY29ubmVjdCB0byAodW51c2VkKQogICogQGFyZ3M6IGFyZ3MgcGFzc2VkIGZyb20gc3lzX21vdW50KCkgZm9yIHBlci10cmFuc3BvcnQgb3B0aW9ucyAodW51c2VkKQotICogQG1zaXplOiByZXF1ZXN0ZWQgbWF4aW11bSBwYWNrZXQgc2l6ZQotICogQGV4dGVuZGVkOiA5cDIwMDAudSBlbmFibGVkIGZsYWcKICAqCiAgKiBUaGlzIHNldHMgdXAgYSB0cmFuc3BvcnQgY2hhbm5lbCBmb3IgOXAgY29tbXVuaWNhdGlvbi4gIFJpZ2h0IG5vdwogICogd2Ugb25seSBtYXRjaCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNoYW5uZWwsIGJ1dCBldmVudHVhbGx5IHdlIGNvdWxkbG9vayB1cApAQCAtNDQxLDExICsyODksOSBAQAogICoKICAqLwogCi1zdGF0aWMgc3RydWN0IHA5X3RyYW5zICoKLXA5X3ZpcnRpb19jcmVhdGUoY29uc3QgY2hhciAqZGV2bmFtZSwgY2hhciAqYXJncywgaW50IG1zaXplLAotCQkJCQkJCXVuc2lnbmVkIGNoYXIgZXh0ZW5kZWQpCitzdGF0aWMgaW50CitwOV92aXJ0aW9fY3JlYXRlKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqZGV2bmFtZSwgY2hhciAqYXJncykKIHsKLQlzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zOwogCXN0cnVjdCB2aXJ0aW9fY2hhbiAqY2hhbiA9IGNoYW5uZWxzOwogCWludCBpbmRleCA9IDA7CiAKQEAgLTQ2MywzMCArMzA5LDEzIEBACiAKIAlpZiAoaW5kZXggPj0gTUFYXzlQX0NIQU4pIHsKIAkJcHJpbnRrKEtFUk5fRVJSICI5cDogbm8gY2hhbm5lbHMgYXZhaWxhYmxlXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWNoYW4tPnRhZ3Bvb2wgPSBwOV9pZHBvb2xfY3JlYXRlKCk7Ci0JaWYgKElTX0VSUihjaGFuLT50YWdwb29sKSkgewotCQlwcmludGsoS0VSTl9FUlIgIjlwOiBjb3VsZG4ndCBhbGxvY2F0ZSB0YWdwb29sXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCXA5X2lkcG9vbF9nZXQoY2hhbi0+dGFncG9vbCk7IC8qIHJlc2VydmUgdGFnIDAgKi8KLQljaGFuLT5tYXhfdGFnID0gMDsKLQljaGFuLT5yZXFzID0gTlVMTDsKKwljbGllbnQtPnRyYW5zID0gKHZvaWQgKiljaGFuOworCWNoYW4tPmNsaWVudCA9IGNsaWVudDsKIAotCXRyYW5zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X3RyYW5zKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cmFucykgewotCQlwcmludGsoS0VSTl9FUlIgIjlwOiBjb3VsZG4ndCBhbGxvY2F0ZSB0cmFuc3BvcnRcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0JdHJhbnMtPmV4dGVuZGVkID0gZXh0ZW5kZWQ7Ci0JdHJhbnMtPm1zaXplID0gbXNpemU7Ci0JdHJhbnMtPmNsb3NlID0gcDlfdmlydGlvX2Nsb3NlOwotCXRyYW5zLT5ycGMgPSBwOV92aXJ0aW9fcnBjOwotCXRyYW5zLT5wcml2ID0gY2hhbjsKLQotCXJldHVybiB0cmFuczsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC01MjYsNiArMzU1LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlIHA5X3ZpcnRpb190cmFucyA9IHsKIAkubmFtZSA9ICJ2aXJ0aW8iLAogCS5jcmVhdGUgPSBwOV92aXJ0aW9fY3JlYXRlLAorCS5jbG9zZSA9IHA5X3ZpcnRpb19jbG9zZSwKKwkucmVxdWVzdCA9IHA5X3ZpcnRpb19yZXF1ZXN0LAorCS5jYW5jZWwgPSBwOV92aXJ0aW9fY2FuY2VsLAogCS5tYXhzaXplID0gUEFHRV9TSVpFKjE2LAogCS5kZWYgPSAwLAogCS5vd25lciA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0LzlwL3V0aWwuYyBiL25ldC85cC91dGlsLmMKaW5kZXggOTU4ZmM1OC4uZGM0ZWMwNSAxMDA2NDQKLS0tIGEvbmV0LzlwL3V0aWwuYworKysgYi9uZXQvOXAvdXRpbC5jCkBAIC0xMDUsNiArMTA1LDcgQEAKIAllbHNlIGlmIChlcnJvcikKIAkJcmV0dXJuIC0xOwogCisJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICIgaWQgJWQgcG9vbCAlcFxuIiwgaSwgcCk7CiAJcmV0dXJuIGk7CiB9CiBFWFBPUlRfU1lNQk9MKHA5X2lkcG9vbF9nZXQpOwpAQCAtMTIxLDYgKzEyMiw5IEBACiB2b2lkIHA5X2lkcG9vbF9wdXQoaW50IGlkLCBzdHJ1Y3QgcDlfaWRwb29sICpwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIiBpZCAlZCBwb29sICVwXG4iLCBpZCwgcCk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOwogCWlkcl9yZW1vdmUoJnAtPnBvb2wsIGlkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2RkcC5jIGIvbmV0L2FwcGxldGFsay9kZHAuYwppbmRleCAwYzg1MDQyLi5kMzEzNGU3IDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2RkcC5jCisrKyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKQEAgLTIsNyArMiw3IEBACiAgKglERFA6CUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBcHBsZVRhbGsgRERQIHByb3RvY29sIGZvcgogICoJCUV0aGVybmV0ICdFTEFQJy4KICAqCi0gKgkJQWxhbiBDb3ggIDxBbGFuLkNveEBsaW51eC5vcmc+CisgKgkJQWxhbiBDb3ggIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICoJCVdpdGggbW9yZSB0aGFuIGEgbGl0dGxlIGFzc2lzdGFuY2UgZnJvbQogICoKQEAgLTE5MzQsNiArMTkzNCw2IEBACiBtb2R1bGVfZXhpdChhdGFsa19leGl0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiQWxhbiBDb3ggPEFsYW4uQ294QGxpbnV4Lm9yZz4iKTsKK01PRFVMRV9BVVRIT1IoIkFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFwcGxlVGFsayAwLjIwXG4iKTsKIE1PRFVMRV9BTElBU19ORVRQUk9UTyhQRl9BUFBMRVRBTEspOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKaW5kZXggZjYzNDhlMC4uOGY5NDMxYSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYworKysgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCkBAIC0zNywxMCArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KLQotI2lmIGRlZmluZWQoQ09ORklHX0tNT0QpCiAjaW5jbHVkZSA8bGludXgva21vZC5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgogCkBAIC0xNDUsMTEgKzE0Miw4IEBACiAJaWYgKHByb3RvIDwgMCB8fCBwcm90byA+PSBCVF9NQVhfUFJPVE8pCiAJCXJldHVybiAtRUlOVkFMOwogCi0jaWYgZGVmaW5lZChDT05GSUdfS01PRCkKLQlpZiAoIWJ0X3Byb3RvW3Byb3RvXSkgeworCWlmICghYnRfcHJvdG9bcHJvdG9dKQogCQlyZXF1ZXN0X21vZHVsZSgiYnQtcHJvdG8tJWQiLCBwcm90byk7Ci0JfQotI2VuZGlmCiAKIAllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwppbmRleCA5NjQzNGQ3Li5hY2RlYWIzIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKQEAgLTU3OCw3ICs1NzgsNyBAQAogCWlmIChzZXNzaW9uLT5oaWQpIHsKIAkJaWYgKHNlc3Npb24tPmhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKQogCQkJaGlkaW5wdXRfZGlzY29ubmVjdChzZXNzaW9uLT5oaWQpOwotCQloaWRfZnJlZV9kZXZpY2Uoc2Vzc2lvbi0+aGlkKTsKKwkJaGlkX2Rlc3Ryb3lfZGV2aWNlKHNlc3Npb24tPmhpZCk7CiAJfQogCiAJLyogV2FrZXVwIHVzZXItc3BhY2UgcG9sbGluZyBmb3Igc29ja2V0IGVycm9ycyAqLwpAQCAtNjIzLDkgKzYyMywxNSBAQAogc3RhdGljIGludCBoaWRwX3NldHVwX2lucHV0KHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sCiAJCQkJc3RydWN0IGhpZHBfY29ubmFkZF9yZXEgKnJlcSkKIHsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IHNlc3Npb24tPmlucHV0OworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCWludCBpOwogCisJaW5wdXQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlucHV0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNlc3Npb24tPmlucHV0ID0gaW5wdXQ7CisKIAlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dCwgc2Vzc2lvbik7CiAKIAlpbnB1dC0+bmFtZSA9ICJCbHVldG9vdGggSElEIEJvb3QgUHJvdG9jb2wgRGV2aWNlIjsKQEAgLTY3Nyw2NyArNjgzLDExNCBAQAogewogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQlfX3UxNiBpZFZlbmRvcjsKLQlfX3UxNiBpZFByb2R1Y3Q7Ci0JdW5zaWduZWQgcXVpcmtzOwotfSBoaWRwX2JsYWNrbGlzdFtdID0gewotCS8qIEFwcGxlIHdpcmVsZXNzIE1pZ2h0eSBNb3VzZSAqLwotCXsgMHgwNWFjLCAweDAzMGMsIEhJRF9RVUlSS19NSUdIVFlNT1VTRSB8IEhJRF9RVUlSS19JTlZFUlRfSFdIRUVMIH0sCi0KLQl7IH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIGhpZHBfc2V0dXBfcXVpcmtzKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCitzdGF0aWMgaW50IGhpZHBfcGFyc2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKLQl1bnNpZ25lZCBpbnQgbjsKKwlzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uID0gaGlkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaGlkcF9jb25uYWRkX3JlcSAqcmVxID0gc2Vzc2lvbi0+cmVxOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlpbnQgcmV0OwogCi0JZm9yIChuID0gMDsgaGlkcF9ibGFja2xpc3Rbbl0uaWRWZW5kb3I7IG4rKykKLQkJaWYgKGhpZHBfYmxhY2tsaXN0W25dLmlkVmVuZG9yID09IGxlMTZfdG9fY3B1KGhpZC0+dmVuZG9yKSAmJgotCQkJCWhpZHBfYmxhY2tsaXN0W25dLmlkUHJvZHVjdCA9PSBsZTE2X3RvX2NwdShoaWQtPnByb2R1Y3QpKQotCQkJaGlkLT5xdWlya3MgPSBoaWRwX2JsYWNrbGlzdFtuXS5xdWlya3M7CisJYnVmID0ga21hbGxvYyhyZXEtPnJkX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHJlcS0+cmRfZGF0YSwgcmVxLT5yZF9zaXplKSkgeworCQlrZnJlZShidWYpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXQgPSBoaWRfcGFyc2VfcmVwb3J0KHNlc3Npb24tPmhpZCwgYnVmLCByZXEtPnJkX3NpemUpOworCisJa2ZyZWUoYnVmKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzZXNzaW9uLT5yZXEgPSBOVUxMOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGhpZHBfc2V0dXBfaGlkKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sCitzdGF0aWMgaW50IGhpZHBfc3RhcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uID0gaGlkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXBvcnQsICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9JTlBVVF9SRVBPUlRdLgorCQkJcmVwb3J0X2xpc3QsIGxpc3QpCisJCWhpZHBfc2VuZF9yZXBvcnQoc2Vzc2lvbiwgcmVwb3J0KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwb3J0LCAmaGlkLT5yZXBvcnRfZW51bVtISURfRkVBVFVSRV9SRVBPUlRdLgorCQkJcmVwb3J0X2xpc3QsIGxpc3QpCisJCWhpZHBfc2VuZF9yZXBvcnQoc2Vzc2lvbiwgcmVwb3J0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBoaWRwX3N0b3Aoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uID0gaGlkLT5kcml2ZXJfZGF0YTsKKworCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+Y3RybF90cmFuc21pdCk7CisJc2tiX3F1ZXVlX3B1cmdlKCZzZXNzaW9uLT5pbnRyX3RyYW5zbWl0KTsKKworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKKwkJaGlkaW5wdXRfZGlzY29ubmVjdChoaWQpOworCWhpZC0+Y2xhaW1lZCA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2xsX2RyaXZlciBoaWRwX2hpZF9kcml2ZXIgPSB7CisJLnBhcnNlID0gaGlkcF9wYXJzZSwKKwkuc3RhcnQgPSBoaWRwX3N0YXJ0LAorCS5zdG9wID0gaGlkcF9zdG9wLAorCS5vcGVuICA9IGhpZHBfb3BlbiwKKwkuY2xvc2UgPSBoaWRwX2Nsb3NlLAorCS5oaWRpbnB1dF9pbnB1dF9ldmVudCA9IGhpZHBfaGlkaW5wdXRfZXZlbnQsCit9OworCitzdGF0aWMgaW50IGhpZHBfc2V0dXBfaGlkKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24sCiAJCQkJc3RydWN0IGhpZHBfY29ubmFkZF9yZXEgKnJlcSkKIHsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gc2Vzc2lvbi0+aGlkOwotCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZDsKIAliZGFkZHJfdCBzcmMsIGRzdDsKKwlpbnQgcmV0OworCisJaGlkID0gaGlkX2FsbG9jYXRlX2RldmljZSgpOworCWlmIChJU19FUlIoaGlkKSkgeworCQlyZXQgPSBQVFJfRVJSKHNlc3Npb24tPmhpZCk7CisJCWdvdG8gZXJyOworCX0KKworCXNlc3Npb24tPmhpZCA9IGhpZDsKKwlzZXNzaW9uLT5yZXEgPSByZXE7CisJaGlkLT5kcml2ZXJfZGF0YSA9IHNlc3Npb247CiAKIAliYXN3YXAoJnNyYywgJmJ0X3NrKHNlc3Npb24tPmN0cmxfc29jay0+c2spLT5zcmMpOwogCWJhc3dhcCgmZHN0LCAmYnRfc2soc2Vzc2lvbi0+Y3RybF9zb2NrLT5zayktPmRzdCk7CiAKLQloaWQtPmRyaXZlcl9kYXRhID0gc2Vzc2lvbjsKLQotCWhpZC0+Y291bnRyeSA9IHJlcS0+Y291bnRyeTsKLQogCWhpZC0+YnVzICAgICA9IEJVU19CTFVFVE9PVEg7CiAJaGlkLT52ZW5kb3IgID0gcmVxLT52ZW5kb3I7CiAJaGlkLT5wcm9kdWN0ID0gcmVxLT5wcm9kdWN0OwogCWhpZC0+dmVyc2lvbiA9IHJlcS0+dmVyc2lvbjsKKwloaWQtPmNvdW50cnkgPSByZXEtPmNvdW50cnk7CiAKIAlzdHJuY3B5KGhpZC0+bmFtZSwgcmVxLT5uYW1lLCAxMjgpOwogCXN0cm5jcHkoaGlkLT5waHlzLCBiYXRvc3RyKCZzcmMpLCA2NCk7CiAJc3RybmNweShoaWQtPnVuaXEsIGJhdG9zdHIoJmRzdCksIDY0KTsKIAotCWhpZC0+ZGV2ID0gaGlkcF9nZXRfZGV2aWNlKHNlc3Npb24pOworCWhpZC0+ZGV2LnBhcmVudCA9IGhpZHBfZ2V0X2RldmljZShzZXNzaW9uKTsKKwloaWQtPmxsX2RyaXZlciA9ICZoaWRwX2hpZF9kcml2ZXI7CiAKLQloaWQtPmhpZF9vcGVuICA9IGhpZHBfb3BlbjsKLQloaWQtPmhpZF9jbG9zZSA9IGhpZHBfY2xvc2U7CisJcmV0ID0gaGlkX2FkZF9kZXZpY2UoaGlkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9oaWQ7CiAKLQloaWQtPmhpZGlucHV0X2lucHV0X2V2ZW50ID0gaGlkcF9oaWRpbnB1dF9ldmVudDsKLQotCWhpZHBfc2V0dXBfcXVpcmtzKGhpZCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgJmhpZC0+cmVwb3J0X2VudW1bSElEX0lOUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3QsIGxpc3QpCi0JCWhpZHBfc2VuZF9yZXBvcnQoc2Vzc2lvbiwgcmVwb3J0KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwb3J0LCAmaGlkLT5yZXBvcnRfZW51bVtISURfRkVBVFVSRV9SRVBPUlRdLnJlcG9ydF9saXN0LCBsaXN0KQotCQloaWRwX3NlbmRfcmVwb3J0KHNlc3Npb24sIHJlcG9ydCk7Ci0KLQlpZiAoaGlkaW5wdXRfY29ubmVjdChoaWQpID09IDApCi0JCWhpZC0+Y2xhaW1lZCB8PSBISURfQ0xBSU1FRF9JTlBVVDsKKwlyZXR1cm4gMDsKK2Vycl9oaWQ6CisJaGlkX2Rlc3Ryb3lfZGV2aWNlKGhpZCk7CisJc2Vzc2lvbi0+aGlkID0gTlVMTDsKK2VycjoKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgaGlkcF9hZGRfY29ubmVjdGlvbihzdHJ1Y3QgaGlkcF9jb25uYWRkX3JlcSAqcmVxLCBzdHJ1Y3Qgc29ja2V0ICpjdHJsX3NvY2ssIHN0cnVjdCBzb2NrZXQgKmludHJfc29jaykKQEAgLTc1NywzOCArODEwLDYgQEAKIAogCUJUX0RCRygicmRfZGF0YSAlcCByZF9zaXplICVkIiwgcmVxLT5yZF9kYXRhLCByZXEtPnJkX3NpemUpOwogCi0JaWYgKHJlcS0+cmRfc2l6ZSA+IDApIHsKLQkJdW5zaWduZWQgY2hhciAqYnVmID0ga21hbGxvYyhyZXEtPnJkX3NpemUsIEdGUF9LRVJORUwpOwotCi0JCWlmICghYnVmKSB7Ci0JCQlrZnJlZShzZXNzaW9uKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgcmVxLT5yZF9kYXRhLCByZXEtPnJkX3NpemUpKSB7Ci0JCQlrZnJlZShidWYpOwotCQkJa2ZyZWUoc2Vzc2lvbik7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCi0JCXNlc3Npb24tPmhpZCA9IGhpZF9wYXJzZV9yZXBvcnQoYnVmLCByZXEtPnJkX3NpemUpOwotCi0JCWtmcmVlKGJ1Zik7Ci0KLQkJaWYgKCFzZXNzaW9uLT5oaWQpIHsKLQkJCWtmcmVlKHNlc3Npb24pOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlpZiAoIXNlc3Npb24tPmhpZCkgewotCQlzZXNzaW9uLT5pbnB1dCA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCQlpZiAoIXNlc3Npb24tPmlucHV0KSB7Ci0JCQlrZnJlZShzZXNzaW9uKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfQotCiAJZG93bl93cml0ZSgmaGlkcF9zZXNzaW9uX3NlbSk7CiAKIAlzID0gX19oaWRwX2dldF9zZXNzaW9uKCZidF9zayhjdHJsX3NvY2stPnNrKS0+ZHN0KTsKQEAgLTgxNiwxNCArODM3LDE3IEBACiAJc2Vzc2lvbi0+ZmxhZ3MgICA9IHJlcS0+ZmxhZ3MgJiAoMSA8PCBISURQX0JMVUVUT09USF9WRU5ET1JfSUQpOwogCXNlc3Npb24tPmlkbGVfdG8gPSByZXEtPmlkbGVfdG87CiAKLQlpZiAoc2Vzc2lvbi0+aW5wdXQpIHsKLQkJZXJyID0gaGlkcF9zZXR1cF9pbnB1dChzZXNzaW9uLCByZXEpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZmFpbGVkOworCWlmIChyZXEtPnJkX3NpemUgPiAwKSB7CisJCWVyciA9IGhpZHBfc2V0dXBfaGlkKHNlc3Npb24sIHJlcSk7CisJCWlmIChlcnIgJiYgZXJyICE9IC1FTk9ERVYpCisJCQlnb3RvIGVycl9za2I7CiAJfQogCi0JaWYgKHNlc3Npb24tPmhpZCkKLQkJaGlkcF9zZXR1cF9oaWQoc2Vzc2lvbiwgcmVxKTsKKwlpZiAoIXNlc3Npb24tPmhpZCkgeworCQllcnIgPSBoaWRwX3NldHVwX2lucHV0KHNlc3Npb24sIHJlcSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJfc2tiOworCX0KIAogCV9faGlkcF9saW5rX3Nlc3Npb24oc2Vzc2lvbik7CiAKQEAgLTg1MCwxNyArODc0LDE2IEBACiAKIAlfX2hpZHBfdW5saW5rX3Nlc3Npb24oc2Vzc2lvbik7CiAKLQlpZiAoc2Vzc2lvbi0+aW5wdXQpIHsKKwlpZiAoc2Vzc2lvbi0+aW5wdXQpCiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHNlc3Npb24tPmlucHV0KTsKLQkJc2Vzc2lvbi0+aW5wdXQgPSBOVUxMOyAvKiBkb24ndCB0cnkgdG8gZnJlZSBpdCBoZXJlICovCi0JfQotCisJaWYgKHNlc3Npb24tPmhpZCkKKwkJaGlkX2Rlc3Ryb3lfZGV2aWNlKHNlc3Npb24tPmhpZCk7CitlcnJfc2tiOgorCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+Y3RybF90cmFuc21pdCk7CisJc2tiX3F1ZXVlX3B1cmdlKCZzZXNzaW9uLT5pbnRyX3RyYW5zbWl0KTsKIGZhaWxlZDoKIAl1cF93cml0ZSgmaGlkcF9zZXNzaW9uX3NlbSk7CiAKLQlpZiAoc2Vzc2lvbi0+aGlkKQotCQloaWRfZnJlZV9kZXZpY2Uoc2Vzc2lvbi0+aGlkKTsKLQogCWlucHV0X2ZyZWVfZGV2aWNlKHNlc3Npb24tPmlucHV0KTsKIAlrZnJlZShzZXNzaW9uKTsKIAlyZXR1cm4gZXJyOwpAQCAtOTUwLDE4ICs5NzMsNDMgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgaGlkcF90YWJsZVtdID0geworCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoSElEX0FOWV9JRCwgSElEX0FOWV9JRCkgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBoaWRwX2RyaXZlciA9IHsKKwkubmFtZSA9ICJnZW5lcmljLWJsdWV0b290aCIsCisJLmlkX3RhYmxlID0gaGlkcF90YWJsZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGhpZHBfaW5pdCh2b2lkKQogeworCWludCByZXQ7CisKIAlsMmNhcF9sb2FkKCk7CiAKIAlCVF9JTkZPKCJISURQIChIdW1hbiBJbnRlcmZhY2UgRW11bGF0aW9uKSB2ZXIgJXMiLCBWRVJTSU9OKTsKIAotCXJldHVybiBoaWRwX2luaXRfc29ja2V0cygpOworCXJldCA9IGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmhpZHBfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IGhpZHBfaW5pdF9zb2NrZXRzKCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZHJ2OworCisJcmV0dXJuIDA7CitlcnJfZHJ2OgorCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmaGlkcF9kcml2ZXIpOworZXJyOgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBoaWRwX2V4aXQodm9pZCkKIHsKIAloaWRwX2NsZWFudXBfc29ja2V0cygpOworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmaGlkcF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChoaWRwX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2hpZHAuaCBiL25ldC9ibHVldG9vdGgvaGlkcC9oaWRwLmgKaW5kZXggMzQzZmIwNS4uZTUwM2M4OSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2hpZHAuaAorKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oCkBAIC0xNTEsNiArMTUxLDggQEAKIAogCXN0cnVjdCBza19idWZmX2hlYWQgY3RybF90cmFuc21pdDsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGludHJfdHJhbnNtaXQ7CisKKwlzdHJ1Y3QgaGlkcF9jb25uYWRkX3JlcSAqcmVxOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGhpZHBfc2NoZWR1bGUoc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbikKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IGE0YWJlZDUuLmZhNWNkYTQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtNzE5LDcgKzcxOSw3IEBACiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCSpkID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaW47Ci0JTkZfSE9PSyhORl9BUlAsIE5GX0FSUF9GT1JXQVJELCBza2IsIChzdHJ1Y3QgbmV0X2RldmljZSAqKWluLAorCU5GX0hPT0soTkZQUk9UT19BUlAsIE5GX0FSUF9GT1JXQVJELCBza2IsIChzdHJ1Y3QgbmV0X2RldmljZSAqKWluLAogCQkoc3RydWN0IG5ldF9kZXZpY2UgKilvdXQsIGJyX25mX2ZvcndhcmRfZmluaXNoKTsKIAogCXJldHVybiBORl9TVE9MRU47CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCAzNjZkM2U5Li5iYTZmNzNlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTQsNiArNCw3IEBACiAKIG1lbnVjb25maWcgQlJJREdFX05GX0VCVEFCTEVTCiAJdHJpc3RhdGUgIkV0aGVybmV0IEJyaWRnZSB0YWJsZXMgKGVidGFibGVzKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQlJJREdFICYmIEJSSURHRV9ORVRGSUxURVIKIAlzZWxlY3QgTkVURklMVEVSX1hUQUJMRVMKIAloZWxwCiAJICBlYnRhYmxlcyBpcyBhIGdlbmVyYWwsIGV4dGVuc2libGUgZnJhbWUvcGFja2V0IGlkZW50aWZpY2F0aW9uCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwppbmRleCA1YmI4OGViLi4wZmEyMDhlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKQEAgLTMwNSwyMyArMzA1LDE0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLSNpZm5kZWYgQ09ORklHX0tNT0QKLSNkZWZpbmUgZmluZF9pbmxpc3RfbG9jayhoLG4scCxlLG0pIGZpbmRfaW5saXN0X2xvY2tfbm9sb2FkKChoKSwobiksKGUpLChtKSkKLSNlbHNlCiBzdGF0aWMgdm9pZCAqCiBmaW5kX2lubGlzdF9sb2NrKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCwKICAgIGludCAqZXJyb3IsIHN0cnVjdCBtdXRleCAqbXV0ZXgpCiB7Ci0Jdm9pZCAqcmV0OwotCi0JcmV0ID0gZmluZF9pbmxpc3RfbG9ja19ub2xvYWQoaGVhZCwgbmFtZSwgZXJyb3IsIG11dGV4KTsKLQlpZiAoIXJldCkgewotCQlyZXF1ZXN0X21vZHVsZSgiJXMlcyIsIHByZWZpeCwgbmFtZSk7Ci0JCXJldCA9IGZpbmRfaW5saXN0X2xvY2tfbm9sb2FkKGhlYWQsIG5hbWUsIGVycm9yLCBtdXRleCk7Ci0JfQotCXJldHVybiByZXQ7CisJcmV0dXJuIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKAorCQkJZmluZF9pbmxpc3RfbG9ja19ub2xvYWQoaGVhZCwgbmFtZSwgZXJyb3IsIG11dGV4KSwKKwkJCSIlcyVzIiwgcHJlZml4LCBuYW1lKTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBlYnRfdGFibGUgKgogZmluZF90YWJsZV9sb2NrKGNvbnN0IGNoYXIgKm5hbWUsIGludCAqZXJyb3IsIHN0cnVjdCBtdXRleCAqbXV0ZXgpCmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCA4MDM1ZmJmLi43ZDRkMmIzIDEwMDY0NAotLS0gYS9uZXQvY2FuL2FmX2Nhbi5jCisrKyBiL25ldC9jYW4vYWZfY2FuLmMKQEAgLTEyOCw4ICsxMjgsOCBAQAogCWlmIChuZXQgIT0gJmluaXRfbmV0KQogCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIAotI2lmZGVmIENPTkZJR19LTU9ECi0JLyogdHJ5IHRvIGxvYWQgcHJvdG9jb2wgbW9kdWxlLCB3aGVuIENPTkZJR19LTU9EIGlzIGRlZmluZWQgKi8KKyNpZmRlZiBDT05GSUdfTU9EVUxFUworCS8qIHRyeSB0byBsb2FkIHByb3RvY29sIG1vZHVsZSBrZXJuZWwgaXMgbW9kdWxhciAqLwogCWlmICghcHJvdG9fdGFiW3Byb3RvY29sXSkgewogCQllcnIgPSByZXF1ZXN0X21vZHVsZSgiY2FuLXByb3RvLSVkIiwgcHJvdG9jb2wpOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwppbmRleCA1MmY1NzdhLi5lZTYzMTg0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kYXRhZ3JhbS5jCisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmMKQEAgLTksNyArOSw3IEBACiAgKglpZGVudGljYWwgcmVjdm1zZygpIGNvZGUuIFNvIHdlIHNoYXJlIGl0IGhlcmUuIFRoZSBwb2xsIHdhcwogICoJc2hhcmVkIGJlZm9yZSBidXQgYnVyaWVkIGluIHVkcC5jIHNvIEkgbW92ZWQgaXQuCiAgKgotICoJQXV0aG9yczoJQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4uIChkYXRhZ3JhbV9wb2xsKCkgZnJvbSBvbGQKKyAqCUF1dGhvcnM6CUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LiAoZGF0YWdyYW1fcG9sbCgpIGZyb20gb2xkCiAgKgkJCQkJCSAgICAgdWRwLmMgY29kZSkKICAqCiAgKglGaXhlczoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggMTQwOGEwODMuLmI4YTRmZDAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC05MjQsMTAgKzkyNCwxMCBAQAogCQlzdHJsY3B5KGRldi0+bmFtZSwgbmV3bmFtZSwgSUZOQU1TSVopOwogCiByb2xsYmFjazoKLQllcnIgPSBkZXZpY2VfcmVuYW1lKCZkZXYtPmRldiwgZGV2LT5uYW1lKTsKLQlpZiAoZXJyKSB7CisJcmV0ID0gZGV2aWNlX3JlbmFtZSgmZGV2LT5kZXYsIGRldi0+bmFtZSk7CisJaWYgKHJldCkgewogCQltZW1jcHkoZGV2LT5uYW1lLCBvbGRuYW1lLCBJRk5BTVNJWik7Ci0JCXJldHVybiBlcnI7CisJCXJldHVybiByZXQ7CiAJfQogCiAJd3JpdGVfbG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7CkBAIC00OTU2LDggKzQ5NTYsNiBAQAogRVhQT1JUX1NZTUJPTChicl9mZGJfcHV0X2hvb2spOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfS01PRAogRVhQT1JUX1NZTUJPTChkZXZfbG9hZCk7Ci0jZW5kaWYKIAogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHNvZnRuZXRfZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfbWNhc3QuYyBiL25ldC9jb3JlL2Rldl9tY2FzdC5jCmluZGV4IDU0MDJiM2IuLjllMmZhMzkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldl9tY2FzdC5jCisrKyBiL25ldC9jb3JlL2Rldl9tY2FzdC5jCkBAIC02LDcgKzYsNyBAQAogICoJCVJpY2hhcmQgVW5kZXJ3b29kIDxyaWNoYXJkQHd1enouZGVtb24uY28udWs+CiAgKgogICoJU3RpciBmcmllZCB0b2dldGhlciBmcm9tIHRoZSBJUCBtdWx0aWNhc3QgYW5kIENBUCBwYXRjaGVzIGFib3ZlCi0gKgkJQWxhbiBDb3ggPEFsYW4uQ294QGxpbnV4Lm9yZz4KKyAqCQlBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKICAqCUZpeGVzOgogICoJCUFsYW4gQ294CToJVXBkYXRlIHRoZSBkZXZpY2Ugb24gYSByZWFsIGRlbGV0ZQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCmluZGV4IGIwZGM4MTguLmYxZDA3YjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYworKysgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAkJcmV0dXJuOwogCX0KICNlbmRpZgotCisJa2ZyZWUobmV0LT5nZW4pOwogCWttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IGE3NTY4NDcuLjk5ZjY1NmQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0yNDc0LDcgKzI0NzQsNyBAQAogCQkJCWlmIChyZXQgPCAwKSB7CiAJCQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgZXhwYW5kaW5nICIKIAkJCQkJICAgICAgICJpcHNlYyBwYWNrZXQgJWRcbiIscmV0KTsKLQkJCQkJcmV0dXJuIDA7CisJCQkJCWdvdG8gZXJyOwogCQkJCX0KIAkJCX0KIApAQCAtMjQ4NCw4ICsyNDg0LDcgQEAKIAkJCWlmIChyZXQpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNyZWF0aW5nIGlwc2VjICIKIAkJCQkgICAgICAgInBhY2tldCAlZFxuIixyZXQpOwotCQkJCWtmcmVlX3NrYihza2IpOwotCQkJCXJldHVybiAwOworCQkJCWdvdG8gZXJyOwogCQkJfQogCQkJLyogcmVzdG9yZSBsbCAqLwogCQkJZXRoID0gKF9fdTggKikgc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CkBAIC0yNDk0LDYgKzI0OTMsOSBAQAogCQl9CiAJfQogCXJldHVybiAxOworZXJyOgorCWtmcmVlX3NrYihza2IpOworCXJldHVybiAwOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggMzYzMDEzMS4uMzFmMjlkMiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTEwNDAsNyArMTA0MCw3IEBACiAJc3RydWN0IG5sYXR0ciAqbGlua2luZm9bSUZMQV9JTkZPX01BWCsxXTsKIAlpbnQgZXJyOwogCi0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogcmVwbGF5OgogI2VuZGlmCiAJZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkxBX01BWCwgaWZsYV9wb2xpY3kpOwpAQCAtMTEyOSw3ICsxMTI5LDcgQEAKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCQlpZiAoIW9wcykgewotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkJCWlmIChraW5kWzBdKSB7CiAJCQkJX19ydG5sX3VubG9jaygpOwogCQkJCXJlcXVlc3RfbW9kdWxlKCJydG5sLWxpbmstJXMiLCBraW5kKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYl9kbWFfbWFwLmMgYi9uZXQvY29yZS9za2JfZG1hX21hcC5jCmluZGV4IDFmNDlhZmMuLjg2MjM0OTIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYl9kbWFfbWFwLmMKKysrIGIvbmV0L2NvcmUvc2tiX2RtYV9tYXAuYwpAQCAtMzUsNyArMzUsNyBAQAogCXJldHVybiAwOwogCiB1bndpbmQ6Ci0Jd2hpbGUgKGktLSA+PSAwKSB7CisJd2hpbGUgKC0taSA+PSAwKSB7CiAJCXNrYl9mcmFnX3QgKmZwID0gJnNwLT5mcmFnc1tpXTsKIAogCQlkbWFfdW5tYXBfcGFnZShkZXYsIHNwLT5kbWFfbWFwc1tpICsgMV0sCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDdmN2JiMWEuLjRlMjJlM2EgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCVJvdXRpbmVzIGhhdmluZyB0byBkbyB3aXRoIHRoZSAnc3RydWN0IHNrX2J1ZmYnIG1lbW9yeSBoYW5kbGVycy4KICAqCi0gKglBdXRob3JzOglBbGFuIENveCA8aWlpdGFjQHB5ci5zd2FuLmFjLnVrPgorICoJQXV0aG9yczoJQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCQkJRmxvcmlhbiBMYSBSb2NoZSA8cnpzZmxAcnoudW5pLXNiLmRlPgogICoKICAqCUZpeGVzOgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3RyZWFtLmMgYi9uZXQvY29yZS9zdHJlYW0uYwppbmRleCBhNmIzNDM3Li44NzI3Y2VhIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zdHJlYW0uYworKysgYi9uZXQvY29yZS9zdHJlYW0uYwpAQCAtOSw3ICs5LDcgQEAKICAqCiAgKiAgICAgQXV0aG9yczogICAgICAgIEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgogICogICAgICAgICAgICAgICAgICAgICAoZnJvbSBvbGQgdGNwLmMgY29kZSkKLSAqICAgICAgICAgICAgICAgICAgICAgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4gKEJvcnJvd2VkIGNvbW1lbnRzIDgtKSkKKyAqICAgICAgICAgICAgICAgICAgICAgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4gKEJvcnJvd2VkIGNvbW1lbnRzIDgtKSkKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkLmMgYi9uZXQvZGNjcC9jY2lkLmMKaW5kZXggNDgwOTc1My4uOGZlOTMxYSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZC5jCisrKyBiL25ldC9kY2NwL2NjaWQuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJc3RydWN0IGNjaWQgKmNjaWQgPSBOVUxMOwogCiAJY2NpZHNfcmVhZF9sb2NrKCk7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCWlmIChjY2lkc1tpZF0gPT0gTlVMTCkgewogCQkvKiBXZSBvbmx5IHRyeSB0byBsb2FkIGlmIGluIHByb2Nlc3MgY29udGV4dCAqLwogCQljY2lkc19yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2Ni5jIGIvbmV0L2RjY3AvaXB2Ni5jCmluZGV4IDExMDYyNzguLmQ0Y2UxMjIgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lwdjYuYworKysgYi9uZXQvZGNjcC9pcHY2LmMKQEAgLTI1OSw3ICsyNTksNyBAQAogCWZsLmZsNl9mbG93bGFiZWwgPSAwOwogCWZsLm9pZiA9IGlyZXE2LT5paWY7CiAJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKLQlmbC5mbF9pcF9zcG9ydCA9IGluZXRfc2soc2spLT5zcG9ydDsKKwlmbC5mbF9pcF9zcG9ydCA9IGluZXRfcnNrKHJlcSktPmxvY19wb3J0OwogCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgJmZsKTsKIAogCW9wdCA9IG5wLT5vcHQ7CkBAIC01NTgsNyArNTU4LDcgQEAKIAkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9zcmMsICZpcmVxNi0+bG9jX2FkZHIpOwogCQlmbC5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwogCQlmbC5mbF9pcF9kcG9ydCA9IGluZXRfcnNrKHJlcSktPnJtdF9wb3J0OwotCQlmbC5mbF9pcF9zcG9ydCA9IGluZXRfc2soc2spLT5zcG9ydDsKKwkJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3JzayhyZXEpLT5sb2NfcG9ydDsKIAkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgJmZsKTsKIAogCQlpZiAoaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCkpCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9taW5pc29ja3MuYyBiL25ldC9kY2NwL21pbmlzb2Nrcy5jCmluZGV4IGIyODA0ZTJkLi5lNmJmOTllIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9taW5pc29ja3MuYworKysgYi9uZXQvZGNjcC9taW5pc29ja3MuYwpAQCAtMzA5LDYgKzMwOSw3IEBACiAJc3RydWN0IGRjY3BfcmVxdWVzdF9zb2NrICpkcmVxID0gZGNjcF9yc2socmVxKTsKIAogCWluZXRfcnNrKHJlcSktPnJtdF9wb3J0CSAgPSBkY2NwX2hkcihza2IpLT5kY2NwaF9zcG9ydDsKKwlpbmV0X3JzayhyZXEpLT5sb2NfcG9ydAkgID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfZHBvcnQ7CiAJaW5ldF9yc2socmVxKS0+YWNrZWQJICA9IDA7CiAJcmVxLT5yY3Zfd25kCQkgID0gc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3c7CiAJZHJlcS0+ZHJlcV90aW1lc3RhbXBfZWNobyA9IDA7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vdXRwdXQuYyBiL25ldC9kY2NwL291dHB1dC5jCmluZGV4IGQwNjk0NWMuLjgwOWQ4MDMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL291dHB1dC5jCisrKyBiL25ldC9kY2NwL291dHB1dC5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAkvKiBCdWlsZCBhbmQgY2hlY2tzdW0gaGVhZGVyICovCiAJZGggPSBkY2NwX3plcm9lZF9oZHIoc2tiLCBkY2NwX2hlYWRlcl9zaXplKTsKIAotCWRoLT5kY2NwaF9zcG9ydAk9IGluZXRfc2soc2spLT5zcG9ydDsKKwlkaC0+ZGNjcGhfc3BvcnQJPSBpbmV0X3JzayhyZXEpLT5sb2NfcG9ydDsKIAlkaC0+ZGNjcGhfZHBvcnQJPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKIAlkaC0+ZGNjcGhfZG9mZgk9IChkY2NwX2hlYWRlcl9zaXplICsKIAkJCSAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4pIC8gNDsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fZGV2LmMgYi9uZXQvZGVjbmV0L2RuX2Rldi5jCmluZGV4IDJmMGFjM2MuLjI4ZTI2YmQgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fZGV2LmMKKysrIGIvbmV0L2RlY25ldC9kbl9kZXYuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAKICNkZWZpbmUgRE5fREVWX0xJU1RfU0laRSBBUlJBWV9TSVpFKGRuX2Rldl9saXN0KQogCi0jZGVmaW5lIEROX0RFVl9QQVJNU19PRkZTRVQoeCkgKChpbnQpICgoY2hhciAqKSAmKChzdHJ1Y3QgZG5fZGV2X3Bhcm1zICopMCktPngpKQorI2RlZmluZSBETl9ERVZfUEFSTVNfT0ZGU0VUKHgpIG9mZnNldG9mKHN0cnVjdCBkbl9kZXZfcGFybXMsIHgpCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiAKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiBzdGF0aWMgaW50IGRuX2ZvcndhcmRpbmdfcHJvYyhjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLAogCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKLXN0YXRpYyBpbnQgZG5fZm9yd2FyZGluZ19zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IGRuX2ZvcndhcmRpbmdfc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsCiAJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbik7CiAKQEAgLTMxOCw3ICszMTgsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgZG5fZm9yd2FyZGluZ19zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IGRuX2ZvcndhcmRpbmdfc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsCiAJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTQ5MCw5ICs0OTAsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZnItPmlmcl9uYW1lW0lGTkFNU0laLTFdID0gMDsKIAotI2lmZGVmIENPTkZJR19LTU9ECiAJZGV2X2xvYWQoJmluaXRfbmV0LCBpZnItPmlmcl9uYW1lKTsKLSNlbmRpZgogCiAJc3dpdGNoKGNtZCkgewogCQljYXNlIFNJT0NHSUZBRERSOgpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jIGIvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCmluZGV4IDIyODA2N2MuLjM2NDAwYjIgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYworKysgYi9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgZG5fbm9kZV9hZGRyZXNzX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorc3RhdGljIGludCBkbl9ub2RlX2FkZHJlc3Nfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwKIAkJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0yMTcsNyArMjE3LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IGRuX2RlZl9kZXZfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IGRuX2RlZl9kZXZfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwKIAkJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CmRpZmYgLS1naXQgYS9uZXQvZHNhL0tjb25maWcgYi9uZXQvZHNhL0tjb25maWcKaW5kZXggY2RjZTRjNi4uNDkyMTFiMyAxMDA2NDQKLS0tIGEvbmV0L2RzYS9LY29uZmlnCisrKyBiL25ldC9kc2EvS2NvbmZpZwpAQCAtMSw3ICsxLDcgQEAKIG1lbnVjb25maWcgTkVUX0RTQQogCWJvb2wgIkRpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgc3VwcG9ydCIKIAlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmICFTMzkwCiAJc2VsZWN0IFBIWUxJQgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgaGFyZHdhcmUgc3dpdGNoIGNoaXBzIHRoYXQgdXNlCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hcnAuYyBiL25ldC9pcHY0L2FycC5jCmluZGV4IGIwNDNlZGEuLjFhOWRkNjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FycC5jCisrKyBiL25ldC9pcHY0L2FycC5jCkBAIC02NjMsNyArNjYzLDcgQEAKIHZvaWQgYXJwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAkvKiBTZW5kIGl0IG9mZiwgbWF5YmUgZmlsdGVyIGl0IHVzaW5nIGZpcmV3YWxsaW5nIGZpcnN0LiAgKi8KLQlORl9IT09LKE5GX0FSUCwgTkZfQVJQX09VVCwgc2tiLCBOVUxMLCBza2ItPmRldiwgZGV2X3F1ZXVlX3htaXQpOworCU5GX0hPT0soTkZQUk9UT19BUlAsIE5GX0FSUF9PVVQsIHNrYiwgTlVMTCwgc2tiLT5kZXYsIGRldl9xdWV1ZV94bWl0KTsKIH0KIAogLyoKQEAgLTkyOCw3ICs5MjgsNyBAQAogCiAJbWVtc2V0KE5FSUdIX0NCKHNrYiksIDAsIHNpemVvZihzdHJ1Y3QgbmVpZ2hib3VyX2NiKSk7CiAKLQlyZXR1cm4gTkZfSE9PSyhORl9BUlAsIE5GX0FSUF9JTiwgc2tiLCBkZXYsIE5VTEwsIGFycF9wcm9jZXNzKTsKKwlyZXR1cm4gTkZfSE9PSyhORlBST1RPX0FSUCwgTkZfQVJQX0lOLCBza2IsIGRldiwgTlVMTCwgYXJwX3Byb2Nlc3MpOwogCiBmcmVlc2tiOgogCWtmcmVlX3NrYihza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvY2lwc29faXB2NC5jIGIvbmV0L2lwdjQvY2lwc29faXB2NC5jCmluZGV4IDJjMGU0NTcuLjQ5MGUwMzUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2NpcHNvX2lwdjQuYworKysgYi9uZXQvaXB2NC9jaXBzb19pcHY0LmMKQEAgLTEzLDcgKzEzLDcgQEAKICAqLwogCiAvKgotICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwNgorICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwNiwgMjAwOAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQ3LDE3ICs0Nyw3IEBACiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAotc3RydWN0IGNpcHNvX3Y0X2RvbWhzaF9lbnRyeSB7Ci0JY2hhciAqZG9tYWluOwotCXUzMiB2YWxpZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHJjdV9oZWFkIHJjdTsKLX07Ci0KIC8qIExpc3Qgb2YgYXZhaWxhYmxlIERPSSBkZWZpbml0aW9ucyAqLwotLyogWFhYIC0gVXBkYXRlcyBzaG91bGQgYmUgbWluaW1hbCBzbyBoYXZpbmcgYSBzaW5nbGUgbG9jayBmb3IgdGhlCi0gKiBjaXBzb192NF9kb2lfbGlzdCBhbmQgdGhlIGNpcHNvX3Y0X2RvaV9saXN0LT5kb21fbGlzdCBzaG91bGQgYmUKLSAqIG9rYXkuICovCiAvKiBYWFggLSBUaGlzIGN1cnJlbnRseSBhc3N1bWVzIGEgbWluaW1hbCBudW1iZXIgb2YgZGlmZmVyZW50IERPSXMgaW4gdXNlLAogICogaWYgaW4gcHJhY3RpY2UgdGhlcmUgYXJlIGEgbG90IG9mIGRpZmZlcmVudCBET0lzIHRoaXMgbGlzdCBzaG91bGQKICAqIHByb2JhYmx5IGJlIHR1cm5lZCBpbnRvIGEgaGFzaCB0YWJsZSBvciBzb21ldGhpbmcgc2ltaWxhciBzbyB3ZQpAQCAtMTE5LDYgKzEwOSwxOSBAQAogICogYmUgb21pdHRlZC4gKi8KICNkZWZpbmUgQ0lQU09fVjRfVEFHX1JOR19DQVRfTUFYICAgICAgOAogCisvKiBCYXNlIGxlbmd0aCBvZiB0aGUgbG9jYWwgdGFnIChub24tc3RhbmRhcmQgdGFnKS4KKyAqICBUYWcgZGVmaW5pdGlvbiAobWF5IGNoYW5nZSBiZXR3ZWVuIGtlcm5lbCB2ZXJzaW9ucykKKyAqCisgKiAwICAgICAgICAgIDggICAgICAgICAgMTYgICAgICAgICAyNCAgICAgICAgIDMyCisgKiArLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKyAqIHwgMTAwMDAwMDAgfCAwMDAwMDExMCB8IDMyLWJpdCBzZWNpZCB2YWx1ZSAgfAorICogKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgKiB8IGluIChob3N0IGJ5dGUgb3JkZXIpfAorICogKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKyAqCisgKi8KKyNkZWZpbmUgQ0lQU09fVjRfVEFHX0xPQ19CTEVOICAgICAgICAgNgorCiAvKgogICogSGVscGVyIEZ1bmN0aW9ucwogICovCkBAIC0xOTQsMjUgKzE5Nyw2IEBACiB9CiAKIC8qKgotICogY2lwc29fdjRfZG9pX2RvbWhzaF9mcmVlIC0gRnJlZXMgYSBkb21haW4gbGlzdCBlbnRyeQotICogQGVudHJ5OiB0aGUgZW50cnkncyBSQ1UgZmllbGQKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIGNhbGxiYWNrIHRvIHRoZSBjYWxsX3JjdSgpCi0gKiBmdW5jdGlvbiBzbyB0aGF0IHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIGEgZG9tYWluIGxpc3QgZW50cnkgY2FuIGJlIHJlbGVhc2VkCi0gKiBzYWZlbHkuCi0gKgotICovCi1zdGF0aWMgdm9pZCBjaXBzb192NF9kb2lfZG9taHNoX2ZyZWUoc3RydWN0IHJjdV9oZWFkICplbnRyeSkKLXsKLQlzdHJ1Y3QgY2lwc29fdjRfZG9taHNoX2VudHJ5ICpwdHI7Ci0KLQlwdHIgPSBjb250YWluZXJfb2YoZW50cnksIHN0cnVjdCBjaXBzb192NF9kb21oc2hfZW50cnksIHJjdSk7Ci0Ja2ZyZWUocHRyLT5kb21haW4pOwotCWtmcmVlKHB0cik7Ci19Ci0KLS8qKgogICogY2lwc29fdjRfY2FjaGVfZW50cnlfZnJlZSAtIEZyZWVzIGEgY2FjaGUgZW50cnkKICAqIEBlbnRyeTogdGhlIGVudHJ5IHRvIGZyZWUKICAqCkBAIC00NTcsNyArNDQxLDcgQEAKIAlzdHJ1Y3QgY2lwc29fdjRfZG9pICppdGVyOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgJmNpcHNvX3Y0X2RvaV9saXN0LCBsaXN0KQotCQlpZiAoaXRlci0+ZG9pID09IGRvaSAmJiBpdGVyLT52YWxpZCkKKwkJaWYgKGl0ZXItPmRvaSA9PSBkb2kgJiYgYXRvbWljX3JlYWQoJml0ZXItPnJlZmNvdW50KSkKIAkJCXJldHVybiBpdGVyOwogCXJldHVybiBOVUxMOwogfQpAQCAtNDk2LDE0ICs0ODAsMTcgQEAKIAkJCWlmIChkb2lfZGVmLT50eXBlICE9IENJUFNPX1Y0X01BUF9QQVNTKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnJlYWs7CisJCWNhc2UgQ0lQU09fVjRfVEFHX0xPQ0FMOgorCQkJaWYgKGRvaV9kZWYtPnR5cGUgIT0gQ0lQU09fVjRfTUFQX0xPQ0FMKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAotCWRvaV9kZWYtPnZhbGlkID0gMTsKKwlhdG9taWNfc2V0KCZkb2lfZGVmLT5yZWZjb3VudCwgMSk7CiAJSU5JVF9SQ1VfSEVBRCgmZG9pX2RlZi0+cmN1KTsKLQlJTklUX0xJU1RfSEVBRCgmZG9pX2RlZi0+ZG9tX2xpc3QpOwogCiAJc3Bpbl9sb2NrKCZjaXBzb192NF9kb2lfbGlzdF9sb2NrKTsKIAlpZiAoY2lwc29fdjRfZG9pX3NlYXJjaChkb2lfZGVmLT5kb2kpICE9IE5VTEwpCkBAIC01MTksNTkgKzUwNiwxMjkgQEAKIH0KIAogLyoqCi0gKiBjaXBzb192NF9kb2lfcmVtb3ZlIC0gUmVtb3ZlIGFuIGV4aXN0aW5nIERPSSBmcm9tIHRoZSBDSVBTTyBwcm90b2NvbCBlbmdpbmUKLSAqIEBkb2k6IHRoZSBET0kgdmFsdWUKLSAqIEBhdWRpdF9zZWNpZDogdGhlIExTTSBzZWNpZCB0byB1c2UgaW4gdGhlIGF1ZGl0IG1lc3NhZ2UKLSAqIEBjYWxsYmFjazogdGhlIERPSSBjbGVhbnVwL2ZyZWUgY2FsbGJhY2sKKyAqIGNpcHNvX3Y0X2RvaV9mcmVlIC0gRnJlZXMgYSBET0kgZGVmaW5pdGlvbgorICogQGVudHJ5OiB0aGUgZW50cnkncyBSQ1UgZmllbGQKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqIFJlbW92ZXMgYSBET0kgZGVmaW5pdGlvbiBmcm9tIHRoZSBDSVBTTyBlbmdpbmUsIEBjYWxsYmFjayBpcyBjYWxsZWQgdG8KLSAqIGZyZWUgYW55IG1lbW9yeS4gIFRoZSBOZXRMYWJlbCByb3V0aW5lcyB3aWxsIGJlIGNhbGxlZCB0byByZWxlYXNlIHRoZWlyIG93bgotICogTFNNIGRvbWFpbiBtYXBwaW5ncyBhcyB3ZWxsIGFzIG91ciBvd24gZG9tYWluIGxpc3QuICBSZXR1cm5zIHplcm8gb24KLSAqIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICogVGhpcyBmdW5jdGlvbiBmcmVlcyBhbGwgb2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBET0kgZGVmaW5pdGlvbi4KICAqCiAgKi8KLWludCBjaXBzb192NF9kb2lfcmVtb3ZlKHUzMiBkb2ksCi0JCQlzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvLAotCQkJdm9pZCAoKmNhbGxiYWNrKSAoc3RydWN0IHJjdV9oZWFkICogaGVhZCkpCit2b2lkIGNpcHNvX3Y0X2RvaV9mcmVlKHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYpCiB7Ci0Jc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZjsKLQlzdHJ1Y3QgY2lwc29fdjRfZG9taHNoX2VudHJ5ICpkb21faXRlcjsKKwlpZiAoZG9pX2RlZiA9PSBOVUxMKQorCQlyZXR1cm47CiAKLQlzcGluX2xvY2soJmNpcHNvX3Y0X2RvaV9saXN0X2xvY2spOwotCWRvaV9kZWYgPSBjaXBzb192NF9kb2lfc2VhcmNoKGRvaSk7Ci0JaWYgKGRvaV9kZWYgIT0gTlVMTCkgewotCQlkb2lfZGVmLT52YWxpZCA9IDA7Ci0JCWxpc3RfZGVsX3JjdSgmZG9pX2RlZi0+bGlzdCk7Ci0JCXNwaW5fdW5sb2NrKCZjaXBzb192NF9kb2lfbGlzdF9sb2NrKTsKLQkJcmN1X3JlYWRfbG9jaygpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkb21faXRlciwgJmRvaV9kZWYtPmRvbV9saXN0LCBsaXN0KQotCQkJaWYgKGRvbV9pdGVyLT52YWxpZCkKLQkJCQluZXRsYmxfY2ZnX21hcF9kZWwoZG9tX2l0ZXItPmRvbWFpbiwKLQkJCQkJCSAgIGF1ZGl0X2luZm8pOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJY2lwc29fdjRfY2FjaGVfaW52YWxpZGF0ZSgpOwotCQljYWxsX3JjdSgmZG9pX2RlZi0+cmN1LCBjYWxsYmFjayk7Ci0JCXJldHVybiAwOworCXN3aXRjaCAoZG9pX2RlZi0+dHlwZSkgeworCWNhc2UgQ0lQU09fVjRfTUFQX1RSQU5TOgorCQlrZnJlZShkb2lfZGVmLT5tYXAuc3RkLT5sdmwuY2lwc28pOworCQlrZnJlZShkb2lfZGVmLT5tYXAuc3RkLT5sdmwubG9jYWwpOworCQlrZnJlZShkb2lfZGVmLT5tYXAuc3RkLT5jYXQuY2lwc28pOworCQlrZnJlZShkb2lfZGVmLT5tYXAuc3RkLT5jYXQubG9jYWwpOworCQlicmVhazsKIAl9Ci0Jc3Bpbl91bmxvY2soJmNpcHNvX3Y0X2RvaV9saXN0X2xvY2spOwotCi0JcmV0dXJuIC1FTk9FTlQ7CisJa2ZyZWUoZG9pX2RlZik7CiB9CiAKIC8qKgotICogY2lwc29fdjRfZG9pX2dldGRlZiAtIFJldHVybnMgYSBwb2ludGVyIHRvIGEgdmFsaWQgRE9JIGRlZmluaXRpb24KKyAqIGNpcHNvX3Y0X2RvaV9mcmVlX3JjdSAtIEZyZWVzIGEgRE9JIGRlZmluaXRpb24gdmlhIHRoZSBSQ1UgcG9pbnRlcgorICogQGVudHJ5OiB0aGUgZW50cnkncyBSQ1UgZmllbGQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIGNhbGxiYWNrIHRvIHRoZSBjYWxsX3JjdSgpCisgKiBmdW5jdGlvbiBzbyB0aGF0IHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHRoZSBET0kgZGVmaW5pdGlvbiBjYW4gYmUgcmVsZWFzZWQKKyAqIHNhZmVseS4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIGNpcHNvX3Y0X2RvaV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmVudHJ5KQoreworCXN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWY7CisKKwlkb2lfZGVmID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgY2lwc29fdjRfZG9pLCByY3UpOworCWNpcHNvX3Y0X2RvaV9mcmVlKGRvaV9kZWYpOworfQorCisvKioKKyAqIGNpcHNvX3Y0X2RvaV9yZW1vdmUgLSBSZW1vdmUgYW4gZXhpc3RpbmcgRE9JIGZyb20gdGhlIENJUFNPIHByb3RvY29sIGVuZ2luZQorICogQGRvaTogdGhlIERPSSB2YWx1ZQorICogQGF1ZGl0X3NlY2lkOiB0aGUgTFNNIHNlY2lkIHRvIHVzZSBpbiB0aGUgYXVkaXQgbWVzc2FnZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogUmVtb3ZlcyBhIERPSSBkZWZpbml0aW9uIGZyb20gdGhlIENJUFNPIGVuZ2luZS4gIFRoZSBOZXRMYWJlbCByb3V0aW5lcyB3aWxsCisgKiBiZSBjYWxsZWQgdG8gcmVsZWFzZSB0aGVpciBvd24gTFNNIGRvbWFpbiBtYXBwaW5ncyBhcyB3ZWxsIGFzIG91ciBvd24KKyAqIGRvbWFpbiBsaXN0LiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICoKKyAqLworaW50IGNpcHNvX3Y0X2RvaV9yZW1vdmUodTMyIGRvaSwgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKK3sKKwlzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmOworCisJc3Bpbl9sb2NrKCZjaXBzb192NF9kb2lfbGlzdF9sb2NrKTsKKwlkb2lfZGVmID0gY2lwc29fdjRfZG9pX3NlYXJjaChkb2kpOworCWlmIChkb2lfZGVmID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2soJmNpcHNvX3Y0X2RvaV9saXN0X2xvY2spOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZkb2lfZGVmLT5yZWZjb3VudCkpIHsKKwkJc3Bpbl91bmxvY2soJmNpcHNvX3Y0X2RvaV9saXN0X2xvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlsaXN0X2RlbF9yY3UoJmRvaV9kZWYtPmxpc3QpOworCXNwaW5fdW5sb2NrKCZjaXBzb192NF9kb2lfbGlzdF9sb2NrKTsKKworCWNpcHNvX3Y0X2NhY2hlX2ludmFsaWRhdGUoKTsKKwljYWxsX3JjdSgmZG9pX2RlZi0+cmN1LCBjaXBzb192NF9kb2lfZnJlZV9yY3UpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY2lwc29fdjRfZG9pX2dldGRlZiAtIFJldHVybnMgYSByZWZlcmVuY2UgdG8gYSB2YWxpZCBET0kgZGVmaW5pdGlvbgogICogQGRvaTogdGhlIERPSSB2YWx1ZQogICoKICAqIERlc2NyaXB0aW9uOgogICogU2VhcmNoZXMgZm9yIGEgdmFsaWQgRE9JIGRlZmluaXRpb24gYW5kIGlmIG9uZSBpcyBmb3VuZCBpdCBpcyByZXR1cm5lZCB0bwogICogdGhlIGNhbGxlci4gIE90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0Ci0gKiByY3VfcmVhZF9sb2NrKCkgaXMgaGVsZCB3aGlsZSBhY2Nlc3NpbmcgdGhlIHJldHVybmVkIGRlZmluaXRpb24uCisgKiByY3VfcmVhZF9sb2NrKCkgaXMgaGVsZCB3aGlsZSBhY2Nlc3NpbmcgdGhlIHJldHVybmVkIGRlZmluaXRpb24gYW5kIHRoZSBET0kKKyAqIGRlZmluaXRpb24gcmVmZXJlbmNlIGNvdW50IGlzIGRlY3JlbWVudGVkIHdoZW4gdGhlIGNhbGxlciBpcyBkb25lLgogICoKICAqLwogc3RydWN0IGNpcHNvX3Y0X2RvaSAqY2lwc29fdjRfZG9pX2dldGRlZih1MzIgZG9pKQogewotCXJldHVybiBjaXBzb192NF9kb2lfc2VhcmNoKGRvaSk7CisJc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlkb2lfZGVmID0gY2lwc29fdjRfZG9pX3NlYXJjaChkb2kpOworCWlmIChkb2lfZGVmID09IE5VTEwpCisJCWdvdG8gZG9pX2dldGRlZl9yZXR1cm47CisJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZkb2lfZGVmLT5yZWZjb3VudCkpCisJCWRvaV9kZWYgPSBOVUxMOworCitkb2lfZ2V0ZGVmX3JldHVybjoKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gZG9pX2RlZjsKK30KKworLyoqCisgKiBjaXBzb192NF9kb2lfcHV0ZGVmIC0gUmVsZWFzZXMgYSByZWZlcmVuY2UgZm9yIHRoZSBnaXZlbiBET0kgZGVmaW5pdGlvbgorICogQGRvaV9kZWY6IHRoZSBET0kgZGVmaW5pdGlvbgorICoKKyAqIERlc2NyaXB0aW9uOgorICogUmVsZWFzZXMgYSBET0kgZGVmaW5pdGlvbiByZWZlcmVuY2Ugb2J0YWluZWQgZnJvbSBjaXBzb192NF9kb2lfZ2V0ZGVmKCkuCisgKgorICovCit2b2lkIGNpcHNvX3Y0X2RvaV9wdXRkZWYoc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZikKK3sKKwlpZiAoZG9pX2RlZiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmRvaV9kZWYtPnJlZmNvdW50KSkKKwkJcmV0dXJuOworCXNwaW5fbG9jaygmY2lwc29fdjRfZG9pX2xpc3RfbG9jayk7CisJbGlzdF9kZWxfcmN1KCZkb2lfZGVmLT5saXN0KTsKKwlzcGluX3VubG9jaygmY2lwc29fdjRfZG9pX2xpc3RfbG9jayk7CisKKwljaXBzb192NF9jYWNoZV9pbnZhbGlkYXRlKCk7CisJY2FsbF9yY3UoJmRvaV9kZWYtPnJjdSwgY2lwc29fdjRfZG9pX2ZyZWVfcmN1KTsKIH0KIAogLyoqCkBAIC01OTcsNyArNjU0LDcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpdGVyX2RvaSwgJmNpcHNvX3Y0X2RvaV9saXN0LCBsaXN0KQotCQlpZiAoaXRlcl9kb2ktPnZhbGlkKSB7CisJCWlmIChhdG9taWNfcmVhZCgmaXRlcl9kb2ktPnJlZmNvdW50KSA+IDApIHsKIAkJCWlmIChkb2lfY250KysgPCAqc2tpcF9jbnQpCiAJCQkJY29udGludWU7CiAJCQlyZXRfdmFsID0gY2FsbGJhY2soaXRlcl9kb2ksIGNiX2FyZyk7CkBAIC02MTMsODUgKzY3MCw2IEBACiAJcmV0dXJuIHJldF92YWw7CiB9CiAKLS8qKgotICogY2lwc29fdjRfZG9pX2RvbWhzaF9hZGQgLSBBZGRzIGEgZG9tYWluIGVudHJ5IHRvIGEgRE9JIGRlZmluaXRpb24KLSAqIEBkb2lfZGVmOiB0aGUgRE9JIGRlZmluaXRpb24KLSAqIEBkb21haW46IHRoZSBkb21haW4gdG8gYWRkCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiBBZGRzIHRoZSBAZG9tYWluIHRvIHRoZSBET0kgc3BlY2lmaWVkIGJ5IEBkb2lfZGVmLCB0aGlzIGZ1bmN0aW9uCi0gKiBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgZXh0ZXJuYWwgZnVuY3Rpb25zIChpLmUuIE5ldExhYmVsKS4gIFRoaXMgZnVuY3Rpb24KLSAqIGRvZXMgYWxsb2NhdGUgbWVtb3J5LiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgotICoKLSAqLwotaW50IGNpcHNvX3Y0X2RvaV9kb21oc2hfYWRkKHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsIGNvbnN0IGNoYXIgKmRvbWFpbikKLXsKLQlzdHJ1Y3QgY2lwc29fdjRfZG9taHNoX2VudHJ5ICppdGVyOwotCXN0cnVjdCBjaXBzb192NF9kb21oc2hfZW50cnkgKm5ld19kb207Ci0KLQluZXdfZG9tID0ga3phbGxvYyhzaXplb2YoKm5ld19kb20pLCBHRlBfS0VSTkVMKTsKLQlpZiAobmV3X2RvbSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoZG9tYWluKSB7Ci0JCW5ld19kb20tPmRvbWFpbiA9IGtzdHJkdXAoZG9tYWluLCBHRlBfS0VSTkVMKTsKLQkJaWYgKG5ld19kb20tPmRvbWFpbiA9PSBOVUxMKSB7Ci0JCQlrZnJlZShuZXdfZG9tKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfQotCW5ld19kb20tPnZhbGlkID0gMTsKLQlJTklUX1JDVV9IRUFEKCZuZXdfZG9tLT5yY3UpOwotCi0Jc3Bpbl9sb2NrKCZjaXBzb192NF9kb2lfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsICZkb2lfZGVmLT5kb21fbGlzdCwgbGlzdCkKLQkJaWYgKGl0ZXItPnZhbGlkICYmCi0JCSAgICAoKGRvbWFpbiAhPSBOVUxMICYmIGl0ZXItPmRvbWFpbiAhPSBOVUxMICYmCi0JCSAgICAgIHN0cmNtcChpdGVyLT5kb21haW4sIGRvbWFpbikgPT0gMCkgfHwKLQkJICAgICAoZG9tYWluID09IE5VTEwgJiYgaXRlci0+ZG9tYWluID09IE5VTEwpKSkgewotCQkJc3Bpbl91bmxvY2soJmNpcHNvX3Y0X2RvaV9saXN0X2xvY2spOwotCQkJa2ZyZWUobmV3X2RvbS0+ZG9tYWluKTsKLQkJCWtmcmVlKG5ld19kb20pOwotCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCX0KLQlsaXN0X2FkZF90YWlsX3JjdSgmbmV3X2RvbS0+bGlzdCwgJmRvaV9kZWYtPmRvbV9saXN0KTsKLQlzcGluX3VubG9jaygmY2lwc29fdjRfZG9pX2xpc3RfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBjaXBzb192NF9kb2lfZG9taHNoX3JlbW92ZSAtIFJlbW92ZXMgYSBkb21haW4gZW50cnkgZnJvbSBhIERPSSBkZWZpbml0aW9uCi0gKiBAZG9pX2RlZjogdGhlIERPSSBkZWZpbml0aW9uCi0gKiBAZG9tYWluOiB0aGUgZG9tYWluIHRvIHJlbW92ZQotICoKLSAqIERlc2NyaXB0aW9uOgotICogUmVtb3ZlcyB0aGUgQGRvbWFpbiBmcm9tIHRoZSBET0kgc3BlY2lmaWVkIGJ5IEBkb2lfZGVmLCB0aGlzIGZ1bmN0aW9uCi0gKiBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgZXh0ZXJuYWwgZnVuY3Rpb25zIChpLmUuIE5ldExhYmVsKS4gICBSZXR1cm5zIHplcm8KLSAqIG9uIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIHZhbHVlcyBvbiBlcnJvci4KLSAqCi0gKi8KLWludCBjaXBzb192NF9kb2lfZG9taHNoX3JlbW92ZShzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbikKLXsKLQlzdHJ1Y3QgY2lwc29fdjRfZG9taHNoX2VudHJ5ICppdGVyOwotCi0Jc3Bpbl9sb2NrKCZjaXBzb192NF9kb2lfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsICZkb2lfZGVmLT5kb21fbGlzdCwgbGlzdCkKLQkJaWYgKGl0ZXItPnZhbGlkICYmCi0JCSAgICAoKGRvbWFpbiAhPSBOVUxMICYmIGl0ZXItPmRvbWFpbiAhPSBOVUxMICYmCi0JCSAgICAgIHN0cmNtcChpdGVyLT5kb21haW4sIGRvbWFpbikgPT0gMCkgfHwKLQkJICAgICAoZG9tYWluID09IE5VTEwgJiYgaXRlci0+ZG9tYWluID09IE5VTEwpKSkgewotCQkJaXRlci0+dmFsaWQgPSAwOwotCQkJbGlzdF9kZWxfcmN1KCZpdGVyLT5saXN0KTsKLQkJCXNwaW5fdW5sb2NrKCZjaXBzb192NF9kb2lfbGlzdF9sb2NrKTsKLQkJCWNhbGxfcmN1KCZpdGVyLT5yY3UsIGNpcHNvX3Y0X2RvaV9kb21oc2hfZnJlZSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCXNwaW5fdW5sb2NrKCZjaXBzb192NF9kb2lfbGlzdF9sb2NrKTsKLQotCXJldHVybiAtRU5PRU5UOwotfQotCiAvKgogICogTGFiZWwgTWFwcGluZyBGdW5jdGlvbnMKICAqLwpAQCAtNzEyLDcgKzY5MCw3IEBACiAJc3dpdGNoIChkb2lfZGVmLT50eXBlKSB7CiAJY2FzZSBDSVBTT19WNF9NQVBfUEFTUzoKIAkJcmV0dXJuIDA7Ci0JY2FzZSBDSVBTT19WNF9NQVBfU1REOgorCWNhc2UgQ0lQU09fVjRfTUFQX1RSQU5TOgogCQlpZiAoZG9pX2RlZi0+bWFwLnN0ZC0+bHZsLmNpcHNvW2xldmVsXSA8IENJUFNPX1Y0X0lOVl9MVkwpCiAJCQlyZXR1cm4gMDsKIAkJYnJlYWs7CkBAIC03NDEsNyArNzE5LDcgQEAKIAljYXNlIENJUFNPX1Y0X01BUF9QQVNTOgogCQkqbmV0X2x2bCA9IGhvc3RfbHZsOwogCQlyZXR1cm4gMDsKLQljYXNlIENJUFNPX1Y0X01BUF9TVEQ6CisJY2FzZSBDSVBTT19WNF9NQVBfVFJBTlM6CiAJCWlmIChob3N0X2x2bCA8IGRvaV9kZWYtPm1hcC5zdGQtPmx2bC5sb2NhbF9zaXplICYmCiAJCSAgICBkb2lfZGVmLT5tYXAuc3RkLT5sdmwubG9jYWxbaG9zdF9sdmxdIDwgQ0lQU09fVjRfSU5WX0xWTCkgewogCQkJKm5ldF9sdmwgPSBkb2lfZGVmLT5tYXAuc3RkLT5sdmwubG9jYWxbaG9zdF9sdmxdOwpAQCAtNzc1LDcgKzc1Myw3IEBACiAJY2FzZSBDSVBTT19WNF9NQVBfUEFTUzoKIAkJKmhvc3RfbHZsID0gbmV0X2x2bDsKIAkJcmV0dXJuIDA7Ci0JY2FzZSBDSVBTT19WNF9NQVBfU1REOgorCWNhc2UgQ0lQU09fVjRfTUFQX1RSQU5TOgogCQltYXBfdGJsID0gZG9pX2RlZi0+bWFwLnN0ZDsKIAkJaWYgKG5ldF9sdmwgPCBtYXBfdGJsLT5sdmwuY2lwc29fc2l6ZSAmJgogCQkgICAgbWFwX3RibC0+bHZsLmNpcHNvW25ldF9sdmxdIDwgQ0lQU09fVjRfSU5WX0xWTCkgewpAQCAtODEyLDcgKzc5MCw3IEBACiAJc3dpdGNoIChkb2lfZGVmLT50eXBlKSB7CiAJY2FzZSBDSVBTT19WNF9NQVBfUEFTUzoKIAkJcmV0dXJuIDA7Ci0JY2FzZSBDSVBTT19WNF9NQVBfU1REOgorCWNhc2UgQ0lQU09fVjRfTUFQX1RSQU5TOgogCQljaXBzb19jYXRfc2l6ZSA9IGRvaV9kZWYtPm1hcC5zdGQtPmNhdC5jaXBzb19zaXplOwogCQljaXBzb19hcnJheSA9IGRvaV9kZWYtPm1hcC5zdGQtPmNhdC5jaXBzbzsKIAkJZm9yICg7OykgewpAQCAtODYwLDcgKzgzOCw3IEBACiAJdTMyIGhvc3RfY2F0X3NpemUgPSAwOwogCXUzMiAqaG9zdF9jYXRfYXJyYXkgPSBOVUxMOwogCi0JaWYgKGRvaV9kZWYtPnR5cGUgPT0gQ0lQU09fVjRfTUFQX1NURCkgeworCWlmIChkb2lfZGVmLT50eXBlID09IENJUFNPX1Y0X01BUF9UUkFOUykgewogCQlob3N0X2NhdF9zaXplID0gZG9pX2RlZi0+bWFwLnN0ZC0+Y2F0LmxvY2FsX3NpemU7CiAJCWhvc3RfY2F0X2FycmF5ID0gZG9pX2RlZi0+bWFwLnN0ZC0+Y2F0LmxvY2FsOwogCX0KQEAgLTg3NSw3ICs4NTMsNyBAQAogCQljYXNlIENJUFNPX1Y0X01BUF9QQVNTOgogCQkJbmV0X3Nwb3QgPSBob3N0X3Nwb3Q7CiAJCQlicmVhazsKLQkJY2FzZSBDSVBTT19WNF9NQVBfU1REOgorCQljYXNlIENJUFNPX1Y0X01BUF9UUkFOUzoKIAkJCWlmIChob3N0X3Nwb3QgPj0gaG9zdF9jYXRfc2l6ZSkKIAkJCQlyZXR1cm4gLUVQRVJNOwogCQkJbmV0X3Nwb3QgPSBob3N0X2NhdF9hcnJheVtob3N0X3Nwb3RdOwpAQCAtOTIxLDcgKzg5OSw3IEBACiAJdTMyIG5ldF9jYXRfc2l6ZSA9IDA7CiAJdTMyICpuZXRfY2F0X2FycmF5ID0gTlVMTDsKIAotCWlmIChkb2lfZGVmLT50eXBlID09IENJUFNPX1Y0X01BUF9TVEQpIHsKKwlpZiAoZG9pX2RlZi0+dHlwZSA9PSBDSVBTT19WNF9NQVBfVFJBTlMpIHsKIAkJbmV0X2NhdF9zaXplID0gZG9pX2RlZi0+bWFwLnN0ZC0+Y2F0LmNpcHNvX3NpemU7CiAJCW5ldF9jYXRfYXJyYXkgPSBkb2lfZGVmLT5tYXAuc3RkLT5jYXQuY2lwc287CiAJfQpAQCAtOTQxLDcgKzkxOSw3IEBACiAJCWNhc2UgQ0lQU09fVjRfTUFQX1BBU1M6CiAJCQlob3N0X3Nwb3QgPSBuZXRfc3BvdDsKIAkJCWJyZWFrOwotCQljYXNlIENJUFNPX1Y0X01BUF9TVEQ6CisJCWNhc2UgQ0lQU09fVjRfTUFQX1RSQU5TOgogCQkJaWYgKG5ldF9zcG90ID49IG5ldF9jYXRfc2l6ZSkKIAkJCQlyZXR1cm4gLUVQRVJNOwogCQkJaG9zdF9zcG90ID0gbmV0X2NhdF9hcnJheVtuZXRfc3BvdF07CkBAIC0xMjc3LDcgKzEyNTUsNyBAQAogCX0gZWxzZQogCQl0YWdfbGVuID0gNDsKIAotCWJ1ZmZlclswXSA9IDB4MDE7CisJYnVmZmVyWzBdID0gQ0lQU09fVjRfVEFHX1JCSVRNQVA7CiAJYnVmZmVyWzFdID0gdGFnX2xlbjsKIAlidWZmZXJbM10gPSBsZXZlbDsKIApAQCAtMTM3Myw3ICsxMzUxLDcgQEAKIAl9IGVsc2UKIAkJdGFnX2xlbiA9IDQ7CiAKLQlidWZmZXJbMF0gPSAweDAyOworCWJ1ZmZlclswXSA9IENJUFNPX1Y0X1RBR19FTlVNOwogCWJ1ZmZlclsxXSA9IHRhZ19sZW47CiAJYnVmZmVyWzNdID0gbGV2ZWw7CiAKQEAgLTE0NjksNyArMTQ0Nyw3IEBACiAJfSBlbHNlCiAJCXRhZ19sZW4gPSA0OwogCi0JYnVmZmVyWzBdID0gMHgwNTsKKwlidWZmZXJbMF0gPSBDSVBTT19WNF9UQUdfUkFOR0U7CiAJYnVmZmVyWzFdID0gdGFnX2xlbjsKIAlidWZmZXJbM10gPSBsZXZlbDsKIApAQCAtMTUyMyw2ICsxNTAxLDU0IEBACiB9CiAKIC8qKgorICogY2lwc29fdjRfZ2VudGFnX2xvYyAtIEdlbmVyYXRlIGEgQ0lQU08gbG9jYWwgdGFnIChub24tc3RhbmRhcmQpCisgKiBAZG9pX2RlZjogdGhlIERPSSBkZWZpbml0aW9uCisgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqIEBidWZmZXI6IHRoZSBvcHRpb24gYnVmZmVyCisgKiBAYnVmZmVyX2xlbjogbGVuZ3RoIG9mIGJ1ZmZlciBpbiBieXRlcworICoKKyAqIERlc2NyaXB0aW9uOgorICogR2VuZXJhdGUgYSBDSVBTTyBvcHRpb24gdXNpbmcgdGhlIGxvY2FsIHRhZy4gIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHRhZworICogb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKgorICovCitzdGF0aWMgaW50IGNpcHNvX3Y0X2dlbnRhZ19sb2MoY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwkJCSAgICAgICB1MzIgYnVmZmVyX2xlbikKK3sKKwlpZiAoIShzZWNhdHRyLT5mbGFncyAmIE5FVExCTF9TRUNBVFRSX1NFQ0lEKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWJ1ZmZlclswXSA9IENJUFNPX1Y0X1RBR19MT0NBTDsKKwlidWZmZXJbMV0gPSBDSVBTT19WNF9UQUdfTE9DX0JMRU47CisJKih1MzIgKikmYnVmZmVyWzJdID0gc2VjYXR0ci0+YXR0ci5zZWNpZDsKKworCXJldHVybiBDSVBTT19WNF9UQUdfTE9DX0JMRU47Cit9CisKKy8qKgorICogY2lwc29fdjRfcGFyc2V0YWdfbG9jIC0gUGFyc2UgYSBDSVBTTyBsb2NhbCB0YWcKKyAqIEBkb2lfZGVmOiB0aGUgRE9JIGRlZmluaXRpb24KKyAqIEB0YWc6IHRoZSBDSVBTTyB0YWcKKyAqIEBzZWNhdHRyOiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcworICoKKyAqIERlc2NyaXB0aW9uOgorICogUGFyc2UgYSBDSVBTTyBsb2NhbCB0YWcgYW5kIHJldHVybiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcyBpbiBAc2VjYXR0ci4KKyAqIFJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlcyB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgY2lwc29fdjRfcGFyc2V0YWdfbG9jKGNvbnN0IHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhZywKKwkJCQkgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK3sKKwlzZWNhdHRyLT5hdHRyLnNlY2lkID0gKih1MzIgKikmdGFnWzJdOworCXNlY2F0dHItPmZsYWdzIHw9IE5FVExCTF9TRUNBVFRSX1NFQ0lEOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogY2lwc29fdjRfdmFsaWRhdGUgLSBWYWxpZGF0ZSBhIENJUFNPIG9wdGlvbgogICogQG9wdGlvbjogdGhlIHN0YXJ0IG9mIHRoZSBvcHRpb24sIG9uIGVycm9yIGl0IGlzIHNldCB0byBwb2ludCB0byB0aGUgZXJyb3IKICAqCkBAIC0xNTQxLDcgKzE1NjcsNyBAQAogICogICB0aGF0IGlzIHVucmVjb2duaXplZC4iCiAgKgogICovCi1pbnQgY2lwc29fdjRfdmFsaWRhdGUodW5zaWduZWQgY2hhciAqKm9wdGlvbikKK2ludCBjaXBzb192NF92YWxpZGF0ZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBjaGFyICoqb3B0aW9uKQogewogCXVuc2lnbmVkIGNoYXIgKm9wdCA9ICpvcHRpb247CiAJdW5zaWduZWQgY2hhciAqdGFnOwpAQCAtMTU2Niw3ICsxNTkyLDcgQEAKIAkJZ290byB2YWxpZGF0ZV9yZXR1cm5fbG9ja2VkOwogCX0KIAotCW9wdF9pdGVyID0gNjsKKwlvcHRfaXRlciA9IENJUFNPX1Y0X0hEUl9MRU47CiAJdGFnID0gb3B0ICsgb3B0X2l0ZXI7CiAJd2hpbGUgKG9wdF9pdGVyIDwgb3B0X2xlbikgewogCQlmb3IgKHRhZ19pdGVyID0gMDsgZG9pX2RlZi0+dGFnc1t0YWdfaXRlcl0gIT0gdGFnWzBdOykKQEAgLTE1ODQsNyArMTYxMCw3IEBACiAKIAkJc3dpdGNoICh0YWdbMF0pIHsKIAkJY2FzZSBDSVBTT19WNF9UQUdfUkJJVE1BUDoKLQkJCWlmICh0YWdfbGVuIDwgNCkgeworCQkJaWYgKHRhZ19sZW4gPCBDSVBTT19WNF9UQUdfUkJNX0JMRU4pIHsKIAkJCQllcnJfb2Zmc2V0ID0gb3B0X2l0ZXIgKyAxOwogCQkJCWdvdG8gdmFsaWRhdGVfcmV0dXJuX2xvY2tlZDsKIAkJCX0KQEAgLTE2MDIsNyArMTYyOCw3IEBACiAJCQkJCWVycl9vZmZzZXQgPSBvcHRfaXRlciArIDM7CiAJCQkJCWdvdG8gdmFsaWRhdGVfcmV0dXJuX2xvY2tlZDsKIAkJCQl9Ci0JCQkJaWYgKHRhZ19sZW4gPiA0ICYmCisJCQkJaWYgKHRhZ19sZW4gPiBDSVBTT19WNF9UQUdfUkJNX0JMRU4gJiYKIAkJCQkgICAgY2lwc29fdjRfbWFwX2NhdF9yYm1fdmFsaWQoZG9pX2RlZiwKIAkJCQkJCQkgICAgJnRhZ1s0XSwKIAkJCQkJCQkgICAgdGFnX2xlbiAtIDQpIDwgMCkgewpAQCAtMTYxMiw3ICsxNjM4LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIENJUFNPX1Y0X1RBR19FTlVNOgotCQkJaWYgKHRhZ19sZW4gPCA0KSB7CisJCQlpZiAodGFnX2xlbiA8IENJUFNPX1Y0X1RBR19FTlVNX0JMRU4pIHsKIAkJCQllcnJfb2Zmc2V0ID0gb3B0X2l0ZXIgKyAxOwogCQkJCWdvdG8gdmFsaWRhdGVfcmV0dXJuX2xvY2tlZDsKIAkJCX0KQEAgLTE2MjIsNyArMTY0OCw3IEBACiAJCQkJZXJyX29mZnNldCA9IG9wdF9pdGVyICsgMzsKIAkJCQlnb3RvIHZhbGlkYXRlX3JldHVybl9sb2NrZWQ7CiAJCQl9Ci0JCQlpZiAodGFnX2xlbiA+IDQgJiYKKwkJCWlmICh0YWdfbGVuID4gQ0lQU09fVjRfVEFHX0VOVU1fQkxFTiAmJgogCQkJICAgIGNpcHNvX3Y0X21hcF9jYXRfZW51bV92YWxpZChkb2lfZGVmLAogCQkJCQkJCSZ0YWdbNF0sCiAJCQkJCQkJdGFnX2xlbiAtIDQpIDwgMCkgewpAQCAtMTYzMSw3ICsxNjU3LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIENJUFNPX1Y0X1RBR19SQU5HRToKLQkJCWlmICh0YWdfbGVuIDwgNCkgeworCQkJaWYgKHRhZ19sZW4gPCBDSVBTT19WNF9UQUdfUk5HX0JMRU4pIHsKIAkJCQllcnJfb2Zmc2V0ID0gb3B0X2l0ZXIgKyAxOwogCQkJCWdvdG8gdmFsaWRhdGVfcmV0dXJuX2xvY2tlZDsKIAkJCX0KQEAgLTE2NDEsNyArMTY2Nyw3IEBACiAJCQkJZXJyX29mZnNldCA9IG9wdF9pdGVyICsgMzsKIAkJCQlnb3RvIHZhbGlkYXRlX3JldHVybl9sb2NrZWQ7CiAJCQl9Ci0JCQlpZiAodGFnX2xlbiA+IDQgJiYKKwkJCWlmICh0YWdfbGVuID4gQ0lQU09fVjRfVEFHX1JOR19CTEVOICYmCiAJCQkgICAgY2lwc29fdjRfbWFwX2NhdF9ybmdfdmFsaWQoZG9pX2RlZiwKIAkJCQkJCSAgICAgICAmdGFnWzRdLAogCQkJCQkJICAgICAgIHRhZ19sZW4gLSA0KSA8IDApIHsKQEAgLTE2NDksNiArMTY3NSwxOSBAQAogCQkJCWdvdG8gdmFsaWRhdGVfcmV0dXJuX2xvY2tlZDsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIENJUFNPX1Y0X1RBR19MT0NBTDoKKwkJCS8qIFRoaXMgaXMgYSBub24tc3RhbmRhcmQgdGFnIHRoYXQgd2Ugb25seSBhbGxvdyBmb3IKKwkJCSAqIGxvY2FsIGNvbm5lY3Rpb25zLCBzbyBpZiB0aGUgaW5jb21pbmcgaW50ZXJmYWNlIGlzCisJCQkgKiBub3QgdGhlIGxvb3BiYWNrIGRldmljZSBkcm9wIHRoZSBwYWNrZXQuICovCisJCQlpZiAoIShza2ItPmRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spKSB7CisJCQkJZXJyX29mZnNldCA9IG9wdF9pdGVyOworCQkJCWdvdG8gdmFsaWRhdGVfcmV0dXJuX2xvY2tlZDsKKwkJCX0KKwkJCWlmICh0YWdfbGVuICE9IENJUFNPX1Y0X1RBR19MT0NfQkxFTikgeworCQkJCWVycl9vZmZzZXQgPSBvcHRfaXRlciArIDE7CisJCQkJZ290byB2YWxpZGF0ZV9yZXR1cm5fbG9ja2VkOworCQkJfQorCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllcnJfb2Zmc2V0ID0gb3B0X2l0ZXI7CiAJCQlnb3RvIHZhbGlkYXRlX3JldHVybl9sb2NrZWQ7CkBAIC0xNzA0LDQ4ICsxNzQzLDI3IEBACiB9CiAKIC8qKgotICogY2lwc29fdjRfc29ja19zZXRhdHRyIC0gQWRkIGEgQ0lQU08gb3B0aW9uIHRvIGEgc29ja2V0Ci0gKiBAc2s6IHRoZSBzb2NrZXQKKyAqIGNpcHNvX3Y0X2dlbm9wdCAtIEdlbmVyYXRlIGEgQ0lQU08gb3B0aW9uCisgKiBAYnVmOiB0aGUgb3B0aW9uIGJ1ZmZlcgorICogQGJ1Zl9sZW46IHRoZSBzaXplIG9mIG9wdF9idWYKICAqIEBkb2lfZGVmOiB0aGUgQ0lQU08gRE9JIHRvIHVzZQotICogQHNlY2F0dHI6IHRoZSBzcGVjaWZpYyBzZWN1cml0eSBhdHRyaWJ1dGVzIG9mIHRoZSBzb2NrZXQKKyAqIEBzZWNhdHRyOiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcwogICoKICAqIERlc2NyaXB0aW9uOgotICogU2V0IHRoZSBDSVBTTyBvcHRpb24gb24gdGhlIGdpdmVuIHNvY2tldCB1c2luZyB0aGUgRE9JIGRlZmluaXRpb24gYW5kCi0gKiBzZWN1cml0eSBhdHRyaWJ1dGVzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uICBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzCi0gKiBleGNsdXNpdmUgYWNjZXNzIHRvIEBzaywgd2hpY2ggbWVhbnMgaXQgZWl0aGVyIG5lZWRzIHRvIGJlIGluIHRoZQotICogcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkIG9yIGxvY2tlZC4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzIGFuZCBuZWdhdGl2ZQotICogdmFsdWVzIG9uIGZhaWx1cmUuCisgKiBHZW5lcmF0ZSBhIENJUFNPIG9wdGlvbiB1c2luZyB0aGUgRE9JIGRlZmluaXRpb24gYW5kIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uICBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIG9wdGlvbiBvbiBzdWNjZXNzIGFuZAorICogbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCiAgKgogICovCi1pbnQgY2lwc29fdjRfc29ja19zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKLQkJCSAgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKLQkJCSAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK3N0YXRpYyBpbnQgY2lwc29fdjRfZ2Vub3B0KHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdTMyIGJ1Zl9sZW4sCisJCQkgICBjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAorCQkJICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKIHsKLQlpbnQgcmV0X3ZhbCA9IC1FUEVSTTsKKwlpbnQgcmV0X3ZhbDsKIAl1MzIgaXRlcjsKLQl1bnNpZ25lZCBjaGFyICpidWY7Ci0JdTMyIGJ1Zl9sZW4gPSAwOwotCXUzMiBvcHRfbGVuOwotCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBOVUxMOwotCXN0cnVjdCBpbmV0X3NvY2sgKnNrX2luZXQ7Ci0Jc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpza19jb25uOwogCi0JLyogSW4gdGhlIGNhc2Ugb2Ygc29ja19jcmVhdGVfbGl0ZSgpLCB0aGUgc29jay0+c2sgZmllbGQgaXMgbm90Ci0JICogZGVmaW5lZCB5ZXQgYnV0IGl0IGlzIG5vdCBhIHByb2JsZW0gYXMgdGhlIG9ubHkgdXNlcnMgb2YgdGhlc2UKLQkgKiAibGl0ZSIgUEZfSU5FVCBzb2NrZXRzIGFyZSBmdW5jdGlvbnMgd2hpY2ggZG8gYW4gYWNjZXB0KCkgY2FsbAotCSAqIGFmdGVyd2FyZHMgc28gd2Ugd2lsbCBsYWJlbCB0aGUgc29ja2V0IGFzIHBhcnQgb2YgdGhlIGFjY2VwdCgpLiAqLwotCWlmIChzayA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCS8qIFdlIGFsbG9jYXRlIHRoZSBtYXhpbXVtIENJUFNPIG9wdGlvbiBzaXplIGhlcmUgc28gd2UgYXJlIHByb2JhYmx5Ci0JICogYmVpbmcgYSBsaXR0bGUgd2FzdGVmdWwsIGJ1dCBpdCBtYWtlcyBvdXIgbGlmZSBfbXVjaF8gZWFzaWVyIGxhdGVyCi0JICogb24gYW5kIGFmdGVyIGFsbCB3ZSBhcmUgb25seSB0YWxraW5nIGFib3V0IDQwIGJ5dGVzLiAqLwotCWJ1Zl9sZW4gPSBDSVBTT19WNF9PUFRfTEVOX01BWDsKLQlidWYgPSBrbWFsbG9jKGJ1Zl9sZW4sIEdGUF9BVE9NSUMpOwotCWlmIChidWYgPT0gTlVMTCkgewotCQlyZXRfdmFsID0gLUVOT01FTTsKLQkJZ290byBzb2NrZXRfc2V0YXR0cl9mYWlsdXJlOwotCX0KKwlpZiAoYnVmX2xlbiA8PSBDSVBTT19WNF9IRFJfTEVOKQorCQlyZXR1cm4gLUVOT1NQQzsKIAogCS8qIFhYWCAtIFRoaXMgY29kZSBhc3N1bWVzIG9ubHkgb25lIHRhZyBwZXIgQ0lQU08gb3B0aW9uIHdoaWNoIGlzbid0CiAJICogcmVhbGx5IGEgZ29vZCBhc3N1bXB0aW9uIHRvIG1ha2UgYnV0IHNpbmNlIHdlIG9ubHkgc3VwcG9ydCB0aGUgTUFDCkBAIC0xNzcyLDkgKzE3OTAsMTQgQEAKIAkJCQkJCSAgICZidWZbQ0lQU09fVjRfSERSX0xFTl0sCiAJCQkJCQkgICBidWZfbGVuIC0gQ0lQU09fVjRfSERSX0xFTik7CiAJCQlicmVhazsKKwkJY2FzZSBDSVBTT19WNF9UQUdfTE9DQUw6CisJCQlyZXRfdmFsID0gY2lwc29fdjRfZ2VudGFnX2xvYyhkb2lfZGVmLAorCQkJCQkJICAgc2VjYXR0ciwKKwkJCQkJCSAgICZidWZbQ0lQU09fVjRfSERSX0xFTl0sCisJCQkJCQkgICBidWZfbGVuIC0gQ0lQU09fVjRfSERSX0xFTik7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXJldF92YWwgPSAtRVBFUk07Ci0JCQlnb3RvIHNvY2tldF9zZXRhdHRyX2ZhaWx1cmU7CisJCQlyZXR1cm4gLUVQRVJNOwogCQl9CiAKIAkJaXRlcisrOwpAQCAtMTc4Miw5ICsxODA1LDU4IEBACiAJCSBpdGVyIDwgQ0lQU09fVjRfVEFHX01BWENOVCAmJgogCQkgZG9pX2RlZi0+dGFnc1tpdGVyXSAhPSBDSVBTT19WNF9UQUdfSU5WQUxJRCk7CiAJaWYgKHJldF92YWwgPCAwKQotCQlnb3RvIHNvY2tldF9zZXRhdHRyX2ZhaWx1cmU7CisJCXJldHVybiByZXRfdmFsOwogCWNpcHNvX3Y0X2dlbnRhZ19oZHIoZG9pX2RlZiwgYnVmLCByZXRfdmFsKTsKLQlidWZfbGVuID0gQ0lQU09fVjRfSERSX0xFTiArIHJldF92YWw7CisJcmV0dXJuIENJUFNPX1Y0X0hEUl9MRU4gKyByZXRfdmFsOworfQorCisvKioKKyAqIGNpcHNvX3Y0X3NvY2tfc2V0YXR0ciAtIEFkZCBhIENJUFNPIG9wdGlvbiB0byBhIHNvY2tldAorICogQHNrOiB0aGUgc29ja2V0CisgKiBAZG9pX2RlZjogdGhlIENJUFNPIERPSSB0byB1c2UKKyAqIEBzZWNhdHRyOiB0aGUgc3BlY2lmaWMgc2VjdXJpdHkgYXR0cmlidXRlcyBvZiB0aGUgc29ja2V0CisgKgorICogRGVzY3JpcHRpb246CisgKiBTZXQgdGhlIENJUFNPIG9wdGlvbiBvbiB0aGUgZ2l2ZW4gc29ja2V0IHVzaW5nIHRoZSBET0kgZGVmaW5pdGlvbiBhbmQKKyAqIHNlY3VyaXR5IGF0dHJpYnV0ZXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMKKyAqIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gQHNrLCB3aGljaCBtZWFucyBpdCBlaXRoZXIgbmVlZHMgdG8gYmUgaW4gdGhlCisgKiBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQgb3IgbG9ja2VkLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlCisgKiB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK2ludCBjaXBzb192NF9zb2NrX3NldGF0dHIoc3RydWN0IHNvY2sgKnNrLAorCQkJICBjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAorCQkJICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQoreworCWludCByZXRfdmFsID0gLUVQRVJNOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisJdTMyIGJ1Zl9sZW47CisJdTMyIG9wdF9sZW47CisJc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9IE5VTEw7CisJc3RydWN0IGluZXRfc29jayAqc2tfaW5ldDsKKwlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKnNrX2Nvbm47CisKKwkvKiBJbiB0aGUgY2FzZSBvZiBzb2NrX2NyZWF0ZV9saXRlKCksIHRoZSBzb2NrLT5zayBmaWVsZCBpcyBub3QKKwkgKiBkZWZpbmVkIHlldCBidXQgaXQgaXMgbm90IGEgcHJvYmxlbSBhcyB0aGUgb25seSB1c2VycyBvZiB0aGVzZQorCSAqICJsaXRlIiBQRl9JTkVUIHNvY2tldHMgYXJlIGZ1bmN0aW9ucyB3aGljaCBkbyBhbiBhY2NlcHQoKSBjYWxsCisJICogYWZ0ZXJ3YXJkcyBzbyB3ZSB3aWxsIGxhYmVsIHRoZSBzb2NrZXQgYXMgcGFydCBvZiB0aGUgYWNjZXB0KCkuICovCisJaWYgKHNrID09IE5VTEwpCisJCXJldHVybiAwOworCisJLyogV2UgYWxsb2NhdGUgdGhlIG1heGltdW0gQ0lQU08gb3B0aW9uIHNpemUgaGVyZSBzbyB3ZSBhcmUgcHJvYmFibHkKKwkgKiBiZWluZyBhIGxpdHRsZSB3YXN0ZWZ1bCwgYnV0IGl0IG1ha2VzIG91ciBsaWZlIF9tdWNoXyBlYXNpZXIgbGF0ZXIKKwkgKiBvbiBhbmQgYWZ0ZXIgYWxsIHdlIGFyZSBvbmx5IHRhbGtpbmcgYWJvdXQgNDAgYnl0ZXMuICovCisJYnVmX2xlbiA9IENJUFNPX1Y0X09QVF9MRU5fTUFYOworCWJ1ZiA9IGttYWxsb2MoYnVmX2xlbiwgR0ZQX0FUT01JQyk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCXJldF92YWwgPSAtRU5PTUVNOworCQlnb3RvIHNvY2tldF9zZXRhdHRyX2ZhaWx1cmU7CisJfQorCisJcmV0X3ZhbCA9IGNpcHNvX3Y0X2dlbm9wdChidWYsIGJ1Zl9sZW4sIGRvaV9kZWYsIHNlY2F0dHIpOworCWlmIChyZXRfdmFsIDwgMCkKKwkJZ290byBzb2NrZXRfc2V0YXR0cl9mYWlsdXJlOworCWJ1Zl9sZW4gPSByZXRfdmFsOwogCiAJLyogV2UgY2FuJ3QgdXNlIGlwX29wdGlvbnNfZ2V0KCkgZGlyZWN0bHkgYmVjYXVzZSBpdCBtYWtlcyBhIGNhbGwgdG8KIAkgKiBpcF9vcHRpb25zX2dldF9hbGxvYygpIHdoaWNoIGFsbG9jYXRlcyBtZW1vcnkgd2l0aCBHRlBfS0VSTkVMIGFuZApAQCAtMTgyMiw2ICsxODk0LDgwIEBACiB9CiAKIC8qKgorICogY2lwc29fdjRfc29ja19kZWxhdHRyIC0gRGVsZXRlIHRoZSBDSVBTTyBvcHRpb24gZnJvbSBhIHNvY2tldAorICogQHNrOiB0aGUgc29ja2V0CisgKgorICogRGVzY3JpcHRpb246CisgKiBSZW1vdmVzIHRoZSBDSVBTTyBvcHRpb24gZnJvbSBhIHNvY2tldCwgaWYgcHJlc2VudC4KKyAqCisgKi8KK3ZvaWQgY2lwc29fdjRfc29ja19kZWxhdHRyKHN0cnVjdCBzb2NrICpzaykKK3sKKwl1OCBoZHJfZGVsdGE7CisJc3RydWN0IGlwX29wdGlvbnMgKm9wdDsKKwlzdHJ1Y3QgaW5ldF9zb2NrICpza19pbmV0OworCisJc2tfaW5ldCA9IGluZXRfc2soc2spOworCW9wdCA9IHNrX2luZXQtPm9wdDsKKwlpZiAob3B0ID09IE5VTEwgfHwgb3B0LT5jaXBzbyA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAob3B0LT5zcnIgfHwgb3B0LT5yciB8fCBvcHQtPnRzIHx8IG9wdC0+cm91dGVyX2FsZXJ0KSB7CisJCXU4IGNpcHNvX2xlbjsKKwkJdTggY2lwc29fb2ZmOworCQl1bnNpZ25lZCBjaGFyICpjaXBzb19wdHI7CisJCWludCBpdGVyOworCQlpbnQgb3B0bGVuX25ldzsKKworCQljaXBzb19vZmYgPSBvcHQtPmNpcHNvIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CisJCWNpcHNvX3B0ciA9ICZvcHQtPl9fZGF0YVtjaXBzb19vZmZdOworCQljaXBzb19sZW4gPSBjaXBzb19wdHJbMV07CisKKwkJaWYgKG9wdC0+c3JyID4gb3B0LT5jaXBzbykKKwkJCW9wdC0+c3JyIC09IGNpcHNvX2xlbjsKKwkJaWYgKG9wdC0+cnIgPiBvcHQtPmNpcHNvKQorCQkJb3B0LT5yciAtPSBjaXBzb19sZW47CisJCWlmIChvcHQtPnRzID4gb3B0LT5jaXBzbykKKwkJCW9wdC0+dHMgLT0gY2lwc29fbGVuOworCQlpZiAob3B0LT5yb3V0ZXJfYWxlcnQgPiBvcHQtPmNpcHNvKQorCQkJb3B0LT5yb3V0ZXJfYWxlcnQgLT0gY2lwc29fbGVuOworCQlvcHQtPmNpcHNvID0gMDsKKworCQltZW1tb3ZlKGNpcHNvX3B0ciwgY2lwc29fcHRyICsgY2lwc29fbGVuLAorCQkJb3B0LT5vcHRsZW4gLSBjaXBzb19vZmYgLSBjaXBzb19sZW4pOworCisJCS8qIGRldGVybWluaW5nIHRoZSBuZXcgdG90YWwgb3B0aW9uIGxlbmd0aCBpcyB0cmlja3kgYmVjYXVzZSBvZgorCQkgKiB0aGUgcGFkZGluZyBuZWNlc3NhcnksIHRoZSBvbmx5IHRoaW5nIGkgY2FuIHRoaW5rIHRvIGRvIGF0CisJCSAqIHRoaXMgcG9pbnQgaXMgd2FsayB0aGUgb3B0aW9ucyBvbmUtYnktb25lLCBza2lwcGluZyB0aGUKKwkJICogcGFkZGluZyBhdCB0aGUgZW5kIHRvIGRldGVybWluZSB0aGUgYWN0dWFsIG9wdGlvbiBzaXplIGFuZAorCQkgKiBmcm9tIHRoZXJlIHdlIGNhbiBkZXRlcm1pbmUgdGhlIG5ldyB0b3RhbCBvcHRpb24gbGVuZ3RoICovCisJCWl0ZXIgPSAwOworCQlvcHRsZW5fbmV3ID0gMDsKKwkJd2hpbGUgKGl0ZXIgPCBvcHQtPm9wdGxlbikKKwkJCWlmIChvcHQtPl9fZGF0YVtpdGVyXSAhPSBJUE9QVF9OT1ApIHsKKwkJCQlpdGVyICs9IG9wdC0+X19kYXRhW2l0ZXIgKyAxXTsKKwkJCQlvcHRsZW5fbmV3ID0gaXRlcjsKKwkJCX0gZWxzZQorCQkJCWl0ZXIrKzsKKwkJaGRyX2RlbHRhID0gb3B0LT5vcHRsZW47CisJCW9wdC0+b3B0bGVuID0gKG9wdGxlbl9uZXcgKyAzKSAmIH4zOworCQloZHJfZGVsdGEgLT0gb3B0LT5vcHRsZW47CisJfSBlbHNlIHsKKwkJLyogb25seSB0aGUgY2lwc28gb3B0aW9uIHdhcyBwcmVzZW50IG9uIHRoZSBzb2NrZXQgc28gd2UgY2FuCisJCSAqIHJlbW92ZSB0aGUgZW50aXJlIG9wdGlvbiBzdHJ1Y3QgKi8KKwkJc2tfaW5ldC0+b3B0ID0gTlVMTDsKKwkJaGRyX2RlbHRhID0gb3B0LT5vcHRsZW47CisJCWtmcmVlKG9wdCk7CisJfQorCisJaWYgKHNrX2luZXQtPmlzX2ljc2sgJiYgaGRyX2RlbHRhID4gMCkgeworCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKnNrX2Nvbm4gPSBpbmV0X2Nzayhzayk7CisJCXNrX2Nvbm4tPmljc2tfZXh0X2hkcl9sZW4gLT0gaGRyX2RlbHRhOworCQlza19jb25uLT5pY3NrX3N5bmNfbXNzKHNrLCBza19jb25uLT5pY3NrX3BtdHVfY29va2llKTsKKwl9Cit9CisKKy8qKgogICogY2lwc29fdjRfZ2V0YXR0ciAtIEhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIGNpcHNvX3Y0XypfZ2V0YXR0ciBmdW5jdGlvbnMKICAqIEBjaXBzbzogdGhlIENJUFNPIHY0IG9wdGlvbgogICogQHNlY2F0dHI6IHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzCkBAIC0xODU5LDYgKzIwMDUsOSBAQAogCWNhc2UgQ0lQU09fVjRfVEFHX1JBTkdFOgogCQlyZXRfdmFsID0gY2lwc29fdjRfcGFyc2V0YWdfcm5nKGRvaV9kZWYsICZjaXBzb1s2XSwgc2VjYXR0cik7CiAJCWJyZWFrOworCWNhc2UgQ0lQU09fVjRfVEFHX0xPQ0FMOgorCQlyZXRfdmFsID0gY2lwc29fdjRfcGFyc2V0YWdfbG9jKGRvaV9kZWYsICZjaXBzb1s2XSwgc2VjYXR0cik7CisJCWJyZWFrOwogCX0KIAlpZiAocmV0X3ZhbCA9PSAwKQogCQlzZWNhdHRyLT50eXBlID0gTkVUTEJMX05MVFlQRV9DSVBTT1Y0OwpAQCAtMTg5Myw2ICsyMDQyLDEyMyBAQAogfQogCiAvKioKKyAqIGNpcHNvX3Y0X3NrYnVmZl9zZXRhdHRyIC0gU2V0IHRoZSBDSVBTTyBvcHRpb24gb24gYSBwYWNrZXQKKyAqIEBza2I6IHRoZSBwYWNrZXQKKyAqIEBzZWNhdHRyOiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcworICoKKyAqIERlc2NyaXB0aW9uOgorICogU2V0IHRoZSBDSVBTTyBvcHRpb24gb24gdGhlIGdpdmVuIHBhY2tldCBiYXNlZCBvbiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcy4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBJUCBoZWFkZXIgb24gc3VjY2VzcyBhbmQgTlVMTCBvbiBmYWlsdXJlLgorICoKKyAqLworaW50IGNpcHNvX3Y0X3NrYnVmZl9zZXRhdHRyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQoreworCWludCByZXRfdmFsOworCXN0cnVjdCBpcGhkciAqaXBoOworCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSAmSVBDQihza2IpLT5vcHQ7CisJdW5zaWduZWQgY2hhciBidWZbQ0lQU09fVjRfT1BUX0xFTl9NQVhdOworCXUzMiBidWZfbGVuID0gQ0lQU09fVjRfT1BUX0xFTl9NQVg7CisJdTMyIG9wdF9sZW47CisJaW50IGxlbl9kZWx0YTsKKworCWJ1Zl9sZW4gPSBjaXBzb192NF9nZW5vcHQoYnVmLCBidWZfbGVuLCBkb2lfZGVmLCBzZWNhdHRyKTsKKwlpZiAoYnVmX2xlbiA8IDApCisJCXJldHVybiBidWZfbGVuOworCW9wdF9sZW4gPSAoYnVmX2xlbiArIDMpICYgfjM7CisKKwkvKiB3ZSBvdmVyd3JpdGUgYW55IGV4aXN0aW5nIG9wdGlvbnMgdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2gKKwkgKiByb29tIGZvciB0aGUgQ0lQU08gb3B0aW9uLCB0aGUgcmVhc29uIGlzIHRoYXQgd2UgX25lZWRfIHRvIGd1YXJhbnRlZQorCSAqIHRoYXQgdGhlIHNlY3VyaXR5IGxhYmVsIGlzIGFwcGxpZWQgdG8gdGhlIHBhY2tldCAtIHdlIGRvIHRoZSBzYW1lCisJICogdGhpbmcgd2hlbiB1c2luZyB0aGUgc29ja2V0IG9wdGlvbnMgYW5kIGl0IGhhc24ndCBjYXVzZWQgYSBwcm9ibGVtLAorCSAqIGlmIHdlIG5lZWQgdG8gd2UgY2FuIGFsd2F5cyByZXZpc2l0IHRoaXMgY2hvaWNlIGxhdGVyICovCisKKwlsZW5fZGVsdGEgPSBvcHRfbGVuIC0gb3B0LT5vcHRsZW47CisJLyogaWYgd2UgZG9uJ3QgZW5zdXJlIGVub3VnaCBoZWFkcm9vbSB3ZSBjb3VsZCBwYW5pYyBvbiB0aGUgc2tiX3B1c2goKQorCSAqIGNhbGwgYmVsb3cgc28gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoLCB3ZSBhcmUgYWxzbyAibWFuZ2xpbmciIHRoZQorCSAqIHBhY2tldCBzbyB3ZSBzaG91bGQgcHJvYmFibHkgZG8gYSBjb3B5LW9uLXdyaXRlIGNhbGwgYW55d2F5ICovCisJcmV0X3ZhbCA9IHNrYl9jb3coc2tiLCBza2JfaGVhZHJvb20oc2tiKSArIGxlbl9kZWx0YSk7CisJaWYgKHJldF92YWwgPCAwKQorCQlyZXR1cm4gcmV0X3ZhbDsKKworCWlmIChsZW5fZGVsdGEgPiAwKSB7CisJCS8qIHdlIGFzc3VtZSB0aGF0IHRoZSBoZWFkZXIgKyBvcHQtPm9wdGxlbiBoYXZlIGFscmVhZHkgYmVlbgorCQkgKiAicHVzaGVkIiBpbiBpcF9vcHRpb25zX2J1aWxkKCkgb3Igc2ltaWxhciAqLworCQlpcGggPSBpcF9oZHIoc2tiKTsKKwkJc2tiX3B1c2goc2tiLCBsZW5fZGVsdGEpOworCQltZW1tb3ZlKChjaGFyICopaXBoIC0gbGVuX2RlbHRhLCBpcGgsIGlwaC0+aWhsIDw8IDIpOworCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKKwkJaXBoID0gaXBfaGRyKHNrYik7CisJfSBlbHNlIGlmIChsZW5fZGVsdGEgPCAwKSB7CisJCWlwaCA9IGlwX2hkcihza2IpOworCQltZW1zZXQoaXBoICsgMSwgSVBPUFRfTk9QLCBvcHQtPm9wdGxlbik7CisJfSBlbHNlCisJCWlwaCA9IGlwX2hkcihza2IpOworCisJaWYgKG9wdC0+b3B0bGVuID4gMCkKKwkJbWVtc2V0KG9wdCwgMCwgc2l6ZW9mKCpvcHQpKTsKKwlvcHQtPm9wdGxlbiA9IG9wdF9sZW47CisJb3B0LT5jaXBzbyA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpOworCW9wdC0+aXNfY2hhbmdlZCA9IDE7CisKKwkvKiB3ZSBoYXZlIHRvIGRvIHRoZSBmb2xsb3dpbmcgYmVjYXVzZSB3ZSBhcmUgYmVpbmcgY2FsbGVkIGZyb20gYQorCSAqIG5ldGZpbHRlciBob29rIHdoaWNoIG1lYW5zIHRoZSBwYWNrZXQgYWxyZWFkeSBoYXMgaGFkIHRoZSBoZWFkZXIKKwkgKiBmaWVsZHMgcG9wdWxhdGVkIGFuZCB0aGUgY2hlY2tzdW0gY2FsY3VsYXRlZCAtIHllcyB0aGlzIG1lYW5zIHdlCisJICogYXJlIGRvaW5nIG1vcmUgd29yayB0aGFuIG5lZWRlZCBidXQgd2UgZG8gaXQgdG8ga2VlcCB0aGUgY29yZQorCSAqIHN0YWNrIGNsZWFuIGFuZCB0aWR5ICovCisJbWVtY3B5KGlwaCArIDEsIGJ1ZiwgYnVmX2xlbik7CisJaWYgKG9wdF9sZW4gPiBidWZfbGVuKQorCQltZW1zZXQoKGNoYXIgKikoaXBoICsgMSkgKyBidWZfbGVuLCAwLCBvcHRfbGVuIC0gYnVmX2xlbik7CisJaWYgKGxlbl9kZWx0YSAhPSAwKSB7CisJCWlwaC0+aWhsID0gNSArIChvcHRfbGVuID4+IDIpOworCQlpcGgtPnRvdF9sZW4gPSBodG9ucyhza2ItPmxlbik7CisJfQorCWlwX3NlbmRfY2hlY2soaXBoKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNpcHNvX3Y0X3NrYnVmZl9kZWxhdHRyIC0gRGVsZXRlIGFueSBDSVBTTyBvcHRpb25zIGZyb20gYSBwYWNrZXQKKyAqIEBza2I6IHRoZSBwYWNrZXQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJlbW92ZXMgYW55IGFuZCBhbGwgQ0lQU08gb3B0aW9ucyBmcm9tIHRoZSBnaXZlbiBwYWNrZXQuICBSZXR1cm5zIHplcm8gb24KKyAqIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICoKKyAqLworaW50IGNpcHNvX3Y0X3NrYnVmZl9kZWxhdHRyKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IHJldF92YWw7CisJc3RydWN0IGlwaGRyICppcGg7CisJc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9ICZJUENCKHNrYiktPm9wdDsKKwl1bnNpZ25lZCBjaGFyICpjaXBzb19wdHI7CisKKwlpZiAob3B0LT5jaXBzbyA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIHNpbmNlIHdlIGFyZSBjaGFuZ2luZyB0aGUgcGFja2V0IHdlIHNob3VsZCBtYWtlIGEgY29weSAqLworCXJldF92YWwgPSBza2JfY293KHNrYiwgc2tiX2hlYWRyb29tKHNrYikpOworCWlmIChyZXRfdmFsIDwgMCkKKwkJcmV0dXJuIHJldF92YWw7CisKKwkvKiB0aGUgZWFzaWVzdCB0aGluZyB0byBkbyBpcyBqdXN0IHJlcGxhY2UgdGhlIGNpcHNvIG9wdGlvbiB3aXRoIG5vb3AKKwkgKiBvcHRpb25zIHNpbmNlIHdlIGRvbid0IGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0LCBhbHRob3VnaCB3ZQorCSAqIHN0aWxsIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIGNoZWNrc3VtICovCisKKwlpcGggPSBpcF9oZHIoc2tiKTsKKwljaXBzb19wdHIgPSAodW5zaWduZWQgY2hhciAqKWlwaCArIG9wdC0+Y2lwc287CisJbWVtc2V0KGNpcHNvX3B0ciwgSVBPUFRfTk9PUCwgY2lwc29fcHRyWzFdKTsKKwlvcHQtPmNpcHNvID0gMDsKKwlvcHQtPmlzX2NoYW5nZWQgPSAxOworCisJaXBfc2VuZF9jaGVjayhpcGgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogY2lwc29fdjRfc2tidWZmX2dldGF0dHIgLSBHZXQgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMgZnJvbSB0aGUgQ0lQU08gb3B0aW9uCiAgKiBAc2tiOiB0aGUgcGFja2V0CiAgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCBiMTJkYWUyLi41NmZjZTNhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC02MTMsOSArNjEzLDcgQEAKIAlpZiAoY29sb24pCiAJCSpjb2xvbiA9IDA7CiAKLSNpZmRlZiBDT05GSUdfS01PRAogCWRldl9sb2FkKG5ldCwgaWZyLmlmcl9uYW1lKTsKLSNlbmRpZgogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NHSUZBRERSOgkvKiBHZXQgaW50ZXJmYWNlIGFkZHJlc3MgKi8KQEAgLTEyODMsNyArMTI4MSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkZXZpbmV0X2NvbmZfc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorc3RhdGljIGludCBkZXZpbmV0X2NvbmZfc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsCiAJCQkgICAgICAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCSAgICAgICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMTM3OSwxMiArMTM3NywxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBpcHY0X2RvaW50X2FuZF9mbHVzaF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBpcHY0X2RvaW50X2FuZF9mbHVzaF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLAogCQkJCSAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCQkgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7Ci0JaW50IHJldCA9IGRldmluZXRfY29uZl9zeXNjdGwodGFibGUsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwKLQkJCQkgICAgICBuZXd2YWwsIG5ld2xlbik7CisJaW50IHJldCA9IGRldmluZXRfY29uZl9zeXNjdGwodGFibGUsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCXN0cnVjdCBuZXQgKm5ldCA9IHRhYmxlLT5leHRyYTI7CiAKIAlpZiAocmV0ID09IDEpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggNTVjMzU1ZS4uNzJiMmRlNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKglORVQzOglJbXBsZW1lbnRhdGlvbiBvZiB0aGUgSUNNUCBwcm90b2NvbCBsYXllci4KICAqCi0gKgkJQWxhbiBDb3gsIDxhbGFuQHJlZGhhdC5jb20+CisgKgkJQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuYwppbmRleCA3ZjllMzM3Li5hMGQ4NjQ1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKKysrIGIvbmV0L2lwdjQvaWdtcC5jCkBAIC05LDcgKzksNyBAQAogICoJc2VlbXMgdG8gZmFsbCBvdXQgd2l0aCBnY2MgMi42LjIuCiAgKgogICoJQXV0aG9yczoKLSAqCQlBbGFuIENveCA8QWxhbi5Db3hAbGludXgub3JnPgorICoJCUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKaW5kZXggODljYjA0Ny4uNTY0MjMwZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKQEAgLTUzLDExICs1Myw5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgKmluZXRfZGlhZ19sb2NrX2hhbmRsZXIoaW50IHR5cGUpCiB7Ci0jaWZkZWYgQ09ORklHX0tNT0QKIAlpZiAoIWluZXRfZGlhZ190YWJsZVt0eXBlXSkKIAkJcmVxdWVzdF9tb2R1bGUoIm5ldC1wZi0lZC1wcm90by0lZC10eXBlLSVkIiwgUEZfTkVUTElOSywKIAkJCSAgICAgICBORVRMSU5LX0lORVRfRElBRywgdHlwZSk7Ci0jZW5kaWYKIAogCW11dGV4X2xvY2soJmluZXRfZGlhZ190YWJsZV9tdXRleCk7CiAJaWYgKCFpbmV0X2RpYWdfdGFibGVbdHlwZV0pCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mcmFnbWVudC5jIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwppbmRleCAyMTUyZDIyLi5lNGY4MWY1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCisrKyBiL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKQEAgLTYsNyArNiw3IEBACiAgKgkJVGhlIElQIGZyYWdtZW50YXRpb24gZnVuY3Rpb25hbGl0eS4KICAqCiAgKiBBdXRob3JzOglGcmVkIE4uIHZhbiBLZW1wZW4gPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgotICoJCUFsYW4gQ294IDxBbGFuLkNveEBsaW51eC5vcmc+CisgKgkJQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCiAgKiBGaXhlczoKICAqCQlBbGFuIENveAk6CVNwbGl0IGZyb20gaXAuYyAsIHNlZSBpcF9pbnB1dC5jIGZvciBoaXN0b3J5LgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfaW5wdXQuYyBiL25ldC9pcHY0L2lwX2lucHV0LmMKaW5kZXggZTBiZWQ1Ni4uODYxOTc4YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfaW5wdXQuYworKysgYi9uZXQvaXB2NC9pcF9pbnB1dC5jCkBAIC04LDcgKzgsNyBAQAogICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJRG9uYWxkIEJlY2tlciwgPGJlY2tlckBzdXBlci5vcmc+Ci0gKgkJQWxhbiBDb3gsIDxBbGFuLkNveEBsaW51eC5vcmc+CisgKgkJQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgkJUmljaGFyZCBVbmRlcndvb2QKICAqCQlTdGVmYW4gQmVja2VyLCA8c3RlZmFuYkB5ZWxsby5waW5nLmRlPgogICoJCUpvcmdlIEN3aWssIDxqb3JnZUBsYXNlci5zYXRsaW5rLm5ldD4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX29wdGlvbnMuYyBiL25ldC9pcHY0L2lwX29wdGlvbnMuYwppbmRleCBiZTNmMThhLi4yYzg4ZGE2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9vcHRpb25zLmMKKysrIGIvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCkBAIC00MzgsNyArNDM4LDcgQEAKIAkJCQlnb3RvIGVycm9yOwogCQkJfQogCQkJb3B0LT5jaXBzbyA9IG9wdHB0ciAtIGlwaDsKLQkJCWlmIChjaXBzb192NF92YWxpZGF0ZSgmb3B0cHRyKSkgeworCQkJaWYgKGNpcHNvX3Y0X3ZhbGlkYXRlKHNrYiwgJm9wdHB0cikpIHsKIAkJCQlwcF9wdHIgPSBvcHRwdHI7CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCA0YzZkMmNhLi4yOTYwOWQyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKKysrIGIvbmV0L2lwdjQvaXBpcC5jCkBAIC00MSw3ICs0MSw3IEBACiAJCU1hZGUgdGhlIHR1bm5lbHMgdXNlIGRldi0+bmFtZSBub3QgdHVubmVsOiB3aGVuIGVycm9yIHJlcG9ydGluZy4KIAkJQWRkZWQgdHhfZHJvcHBlZCBzdGF0CiAKLQkJLUFsYW4gQ294CShBbGFuLkNveEBsaW51eC5vcmcpIDIxIE1hcmNoIDk1CisJCS1BbGFuIENveAkoYWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrKSAyMSBNYXJjaCA5NQogCiAJUmV3b3JrZWQ6CiAJCUNoYW5nZWQgdG8gdHVubmVsIHRvIGRlc3RpbmF0aW9uIGdhdGV3YXkgaW4gYWRkaXRpb24gdG8gdGhlCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmMKaW5kZXggYzUxOWI4ZC4uYjQyZTA4MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtci5jCisrKyBiL25ldC9pcHY0L2lwbXIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKglJUCBtdWx0aWNhc3Qgcm91dGluZyBzdXBwb3J0IGZvciBtcm91dGVkIDMuNi8zLjgKICAqCi0gKgkJKGMpIDE5OTUgQWxhbiBDb3gsIDxhbGFuQHJlZGhhdC5jb20+CisgKgkJKGMpIDE5OTUgQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgkgIExpbnV4IENvbnN1bHRhbmN5IGFuZCBDdXN0b20gRHJpdmVyIERldmVsb3BtZW50CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZGVmcmFnX2lwdjQuYwppbmRleCBhYTJjNTBhLi5mYTJkNmI2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZGVmcmFnX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZGVmcmFnX2lwdjQuYwpAQCAtNDEsMTIgKzQxLDEzIEBACiAJCQkJCSAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQorI2lmICFkZWZpbmVkKENPTkZJR19ORl9OQVQpICYmICFkZWZpbmVkKENPTkZJR19ORl9OQVRfTU9EVUxFKQogCS8qIFByZXZpb3VzbHkgc2VlbiAobG9vcGJhY2spPyAgSWdub3JlLiAgRG8gdGhpcyBiZWZvcmUKIAkgICBmcmFnbWVudCBjaGVjay4gKi8KIAlpZiAoc2tiLT5uZmN0KQogCQlyZXR1cm4gTkZfQUNDRVBUOwogI2VuZGlmCi0KKyNlbmRpZgogCS8qIEdhdGhlciBmcmFnbWVudHMuICovCiAJaWYgKGlwX2hkcihza2IpLT5mcmFnX29mZiAmIGh0b25zKElQX01GIHwgSVBfT0ZGU0VUKSkgewogCQlpZiAobmZfY3RfaXB2NF9nYXRoZXJfZnJhZ3Moc2tiLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwppbmRleCAyYWM5ZWFmLi5hNjVjZjY5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtNTg0LDYgKzU4NCw5OCBAQAogCS5mbGFncwkJPSBORl9DVF9FWFRfRl9QUkVBTExPQywKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oPgorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcHJvdG9uYXRfbmxhX3BvbGljeVtDVEFfUFJPVE9OQVRfTUFYKzFdID0geworCVtDVEFfUFJPVE9OQVRfUE9SVF9NSU5dCT0geyAudHlwZSA9IE5MQV9VMTYgfSwKKwlbQ1RBX1BST1RPTkFUX1BPUlRfTUFYXQk9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCit9OworCitzdGF0aWMgaW50IG5mbmV0bGlua19wYXJzZV9uYXRfcHJvdG8oc3RydWN0IG5sYXR0ciAqYXR0ciwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCQkgICAgIHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKQoreworCXN0cnVjdCBubGF0dHIgKnRiW0NUQV9QUk9UT05BVF9NQVgrMV07CisJY29uc3Qgc3RydWN0IG5mX25hdF9wcm90b2NvbCAqbnB0OworCWludCBlcnI7CisKKwllcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfUFJPVE9OQVRfTUFYLCBhdHRyLCBwcm90b25hdF9ubGFfcG9saWN5KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCW5wdCA9IG5mX25hdF9wcm90b19maW5kX2dldChuZl9jdF9wcm90b251bShjdCkpOworCWlmIChucHQtPm5sYXR0cl90b19yYW5nZSkKKwkJZXJyID0gbnB0LT5ubGF0dHJfdG9fcmFuZ2UodGIsIHJhbmdlKTsKKwluZl9uYXRfcHJvdG9fcHV0KG5wdCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5hdF9ubGFfcG9saWN5W0NUQV9OQVRfTUFYKzFdID0geworCVtDVEFfTkFUX01JTklQXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtDVEFfTkFUX01BWElQXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAorfTsKKworc3RhdGljIGludAorbmZuZXRsaW5rX3BhcnNlX25hdChzdHJ1Y3QgbmxhdHRyICpuYXQsCisJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKQoreworCXN0cnVjdCBubGF0dHIgKnRiW0NUQV9OQVRfTUFYKzFdOworCWludCBlcnI7CisKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZigqcmFuZ2UpKTsKKworCWVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9OQVRfTUFYLCBuYXQsIG5hdF9ubGFfcG9saWN5KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmICh0YltDVEFfTkFUX01JTklQXSkKKwkJcmFuZ2UtPm1pbl9pcCA9IG5sYV9nZXRfYmUzMih0YltDVEFfTkFUX01JTklQXSk7CisKKwlpZiAoIXRiW0NUQV9OQVRfTUFYSVBdKQorCQlyYW5nZS0+bWF4X2lwID0gcmFuZ2UtPm1pbl9pcDsKKwllbHNlCisJCXJhbmdlLT5tYXhfaXAgPSBubGFfZ2V0X2JlMzIodGJbQ1RBX05BVF9NQVhJUF0pOworCisJaWYgKHJhbmdlLT5taW5faXApCisJCXJhbmdlLT5mbGFncyB8PSBJUF9OQVRfUkFOR0VfTUFQX0lQUzsKKworCWlmICghdGJbQ1RBX05BVF9QUk9UT10pCisJCXJldHVybiAwOworCisJZXJyID0gbmZuZXRsaW5rX3BhcnNlX25hdF9wcm90byh0YltDVEFfTkFUX1BST1RPXSwgY3QsIHJhbmdlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKKwkJCSAgc3RydWN0IG5sYXR0ciAqYXR0cikKK3sKKwlzdHJ1Y3QgbmZfbmF0X3JhbmdlIHJhbmdlOworCisJaWYgKG5mbmV0bGlua19wYXJzZV9uYXQoYXR0ciwgY3QsICZyYW5nZSkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobmZfbmF0X2luaXRpYWxpemVkKGN0LCBtYW5pcCkpCisJCXJldHVybiAtRUVYSVNUOworCisJcmV0dXJuIG5mX25hdF9zZXR1cF9pbmZvKGN0LCAmcmFuZ2UsIG1hbmlwKTsKK30KKyNlbHNlCitzdGF0aWMgaW50CituZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKKwkJCSAgc3RydWN0IG5sYXR0ciAqYXR0cikKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBfX25ldF9pbml0IG5mX25hdF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJbmV0LT5pcHY0Lm5hdF9ieXNvdXJjZSA9IG5mX2N0X2FsbG9jX2hhc2h0YWJsZSgmbmZfbmF0X2h0YWJsZV9zaXplLApAQCAtNjU0LDYgKzc0Niw5IEBACiAKIAlCVUdfT04obmZfbmF0X3NlcV9hZGp1c3RfaG9vayAhPSBOVUxMKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3NlcV9hZGp1c3RfaG9vaywgbmZfbmF0X3NlcV9hZGp1c3QpOworCUJVR19PTihuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2sgIT0gTlVMTCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vaywKKwkJCSAgIG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXApOwogCXJldHVybiAwOwogCiAgY2xlYW51cF9leHRlbmQ6CkBAIC02NjcsMTAgKzc2MiwxMiBAQAogCW5mX2N0X2wzcHJvdG9fcHV0KGwzcHJvdG8pOwogCW5mX2N0X2V4dGVuZF91bnJlZ2lzdGVyKCZuYXRfZXh0ZW5kKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3NlcV9hZGp1c3RfaG9vaywgTlVMTCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vaywgTlVMTCk7CiAJc3luY2hyb25pemVfbmV0KCk7CiB9CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygibmYtbmF0LWlwdjQiKTsKIAogbW9kdWxlX2luaXQobmZfbmF0X2luaXQpOwogbW9kdWxlX2V4aXQobmZfbmF0X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYwppbmRleCBmZmVhZmZjLi44MzAzZTRiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NubXBfYmFzaWMuYwpAQCAtNzQyLDYgKzc0Miw3IEBACiAJCQkqb2JqID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNubXBfb2JqZWN0KSArIGxlbiwKIAkJCQkgICAgICAgR0ZQX0FUT01JQyk7CiAJCQlpZiAoKm9iaiA9PSBOVUxMKSB7CisJCQkJa2ZyZWUocCk7CiAJCQkJa2ZyZWUoaWQpOwogCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJCXByaW50aygiT09NIGluIGJzYWxnICglZClcbiIsIF9fTElORV9fKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IGE2ZDdjNTguLjJlYTZkY2MgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTEwOSw3ICsxMTA5LDEyIEBACiAJCXByaW50aygiXG4iKTsKIAl9CiAjZW5kaWYKLQlydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluID0gcnQ7CisJLyoKKwkgKiBTaW5jZSBsb29rdXAgaXMgbG9ja2ZyZWUsIHdlIG11c3QgbWFrZSBzdXJlCisJICogcHJldmlvdXMgd3JpdGVzIHRvIHJ0IGFyZSBjb21pdHRlZCB0byBtZW1vcnkKKwkgKiBiZWZvcmUgbWFraW5nIHJ0IHZpc2libGUgdG8gb3RoZXIgQ1BVUy4KKwkgKi8KKwlyY3VfYXNzaWduX3BvaW50ZXIocnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbiwgcnQpOwogCXNwaW5fdW5sb2NrX2JoKHJ0X2hhc2hfbG9ja19hZGRyKGhhc2gpKTsKIAkqcnAgPSBydDsKIAlyZXR1cm4gMDsKQEAgLTI5MDgsOCArMjkxMyw2IEBACiB9CiAKIHN0YXRpYyBpbnQgaXB2NF9zeXNjdGxfcnRjYWNoZV9mbHVzaF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLAotCQkJCQkJaW50IF9fdXNlciAqbmFtZSwKLQkJCQkJCWludCBubGVuLAogCQkJCQkJdm9pZCBfX3VzZXIgKm9sZHZhbCwKIAkJCQkJCXNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQkJCQl2b2lkIF9fdXNlciAqbmV3dmFsLApAQCAtMjk3MiwxNiArMjk3NSwxMyBAQAogfQogCiBzdGF0aWMgaW50IGlwdjRfc3lzY3RsX3J0X3NlY3JldF9pbnRlcnZhbF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLAotCQkJCQkJICAgaW50IF9fdXNlciAqbmFtZSwKLQkJCQkJCSAgIGludCBubGVuLAogCQkJCQkJICAgdm9pZCBfX3VzZXIgKm9sZHZhbCwKIAkJCQkJCSAgIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQkJCQkgICB2b2lkIF9fdXNlciAqbmV3dmFsLAogCQkJCQkJICAgc2l6ZV90IG5ld2xlbikKIHsKIAlpbnQgb2xkID0gaXBfcnRfc2VjcmV0X2ludGVydmFsOwotCWludCByZXQgPSBzeXNjdGxfamlmZmllcyh0YWJsZSwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsCi0JCQkJIG5ld2xlbik7CisJaW50IHJldCA9IHN5c2N0bF9qaWZmaWVzKHRhYmxlLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAogCXJ0X3NlY3JldF9yZXNjaGVkdWxlKG9sZCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKaW5kZXggMjc2ZDA0Ny4uMWJiMTBkZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKQEAgLTY0LDggKzY0LDggQEAKIH0KIAogLyogVmFsaWRhdGUgY2hhbmdlcyBmcm9tIHN5c2N0bCBpbnRlcmZhY2UuICovCi1zdGF0aWMgaW50IGlwdjRfc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2UoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwKLQkJCQkJIGludCBubGVuLCB2b2lkIF9fdXNlciAqb2xkdmFsLAorc3RhdGljIGludCBpcHY0X3N5c2N0bF9sb2NhbF9wb3J0X3JhbmdlKGN0bF90YWJsZSAqdGFibGUsCisJCQkJCSB2b2lkIF9fdXNlciAqb2xkdmFsLAogCQkJCQkgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTgwLDcgKzgwLDcgQEAKIAl9OwogCiAJaW5ldF9nZXRfbG9jYWxfcG9ydF9yYW5nZShyYW5nZSwgcmFuZ2UgKyAxKTsKLQlyZXQgPSBzeXNjdGxfaW50dmVjKCZ0bXAsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOworCXJldCA9IHN5c2N0bF9pbnR2ZWMoJnRtcCwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJaWYgKHJldCA9PSAwICYmIG5ld3ZhbCAmJiBuZXdsZW4pIHsKIAkJaWYgKHJhbmdlWzFdIDwgcmFuZ2VbMF0pCiAJCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTA5LDggKzEwOSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzeXNjdGxfdGNwX2Nvbmdlc3Rpb25fY29udHJvbChjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLAotCQkJCQkgaW50IG5sZW4sIHZvaWQgX191c2VyICpvbGR2YWwsCitzdGF0aWMgaW50IHN5c2N0bF90Y3BfY29uZ2VzdGlvbl9jb250cm9sKGN0bF90YWJsZSAqdGFibGUsCisJCQkJCSB2b2lkIF9fdXNlciAqb2xkdmFsLAogCQkJCQkgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCQkJIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0xMjIsNyArMTIyLDcgQEAKIAlpbnQgcmV0OwogCiAJdGNwX2dldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbCh2YWwpOwotCXJldCA9IHN5c2N0bF9zdHJpbmcoJnRibCwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CisJcmV0ID0gc3lzY3RsX3N0cmluZygmdGJsLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAlpZiAocmV0ID09IDEgJiYgbmV3dmFsICYmIG5ld2xlbikKIAkJcmV0ID0gdGNwX3NldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbCh2YWwpOwogCXJldHVybiByZXQ7CkBAIC0xNjUsOCArMTY1LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHN0cmF0ZWd5X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsCi0JCQkJCSAgICAgICBpbnQgbmxlbiwgdm9pZCBfX3VzZXIgKm9sZHZhbCwKK3N0YXRpYyBpbnQgc3RyYXRlZ3lfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2woY3RsX3RhYmxlICp0YWJsZSwKKwkJCQkJICAgICAgIHZvaWQgX191c2VyICpvbGR2YWwsCiAJCQkJCSAgICAgICBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCQkgICAgICAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwKIAkJCQkJICAgICAgIHNpemVfdCBuZXdsZW4pCkBAIC0xNzksNyArMTc5LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAl0Y3BfZ2V0X2F2YWlsYWJsZV9jb25nZXN0aW9uX2NvbnRyb2wodGJsLmRhdGEsIHRibC5tYXhsZW4pOwotCXJldCA9IHN5c2N0bF9zdHJpbmcoJnRibCwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CisJcmV0ID0gc3lzY3RsX3N0cmluZygmdGJsLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAlpZiAocmV0ID09IDEgJiYgbmV3dmFsICYmIG5ld2xlbikKIAkJcmV0ID0gdGNwX3NldF9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbCh0YmwuZGF0YSk7CiAJa2ZyZWUodGJsLmRhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmMKaW5kZXggNmEyNTA4Mi4uNGVjNWI0ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2NvbmcuYworKysgYi9uZXQvaXB2NC90Y3BfY29uZy5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAogCXNwaW5fbG9jaygmdGNwX2NvbmdfbGlzdF9sb2NrKTsKIAljYSA9IHRjcF9jYV9maW5kKG5hbWUpOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAoIWNhICYmIGNhcGFibGUoQ0FQX1NZU19NT0RVTEUpKSB7CiAJCXNwaW5fdW5sb2NrKCZ0Y3BfY29uZ19saXN0X2xvY2spOwogCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAlpZiAoY2EgPT0gaWNzay0+aWNza19jYV9vcHMpCiAJCWdvdG8gb3V0OwogCi0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCS8qIG5vdCBmb3VuZCBhdHRlbXB0IHRvIGF1dG9sb2FkIG1vZHVsZSAqLwogCWlmICghY2EgJiYgY2FwYWJsZShDQVBfU1lTX01PRFVMRSkpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jCmluZGV4IGVhY2Y0Y2YuLjIwOTVhYmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcC5jCisrKyBiL25ldC9pcHY0L3VkcC5jCkBAIC04LDcgKzgsNyBAQAogICogQXV0aG9yczoJUm9zcyBCaXJvCiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJQXJudCBHdWxicmFuZHNlbiwgPGFndWxicmFAbnZnLnVuaXQubm8+Ci0gKgkJQWxhbiBDb3gsIDxBbGFuLkNveEBsaW51eC5vcmc+CisgKgkJQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgkJSGlyb2thenUgVGFrYWhhc2hpLCA8dGFrYUB2YWxpbnV4LmNvLmpwPgogICoKICAqIEZpeGVzOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggN2I2YTU4NC4uZWVhOTU0MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0zOTgyLDcgKzM5ODIsNiBAQAogfQogCiBzdGF0aWMgaW50IGFkZHJjb25mX3N5c2N0bF9mb3J3YXJkX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsCi0JCQkJCSAgICBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJCQkJICAgIHZvaWQgX191c2VyICpvbGR2YWwsCiAJCQkJCSAgICBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCQkgICAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FmX2luZXQ2LmMgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCmluZGV4IDA1MGUxNGIuLjAxZWRhYzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmMKKysrIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwpAQCAtODM0LDcgKzgzNCw3IEBACiAJc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi5pY21wdjZtc2dfc3RhdGlzdGljcyk7CiB9CiAKLXN0YXRpYyBpbnQgaW5ldDZfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGluZXQ2X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgZXJyID0gMDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggODQwYjE1Ny4uMTcyNDM4MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmRpc2MuYworKysgYi9uZXQvaXB2Ni9uZGlzYy5jCkBAIC0xMTk5LDcgKzExOTksNyBAQAogCQl9CiAJCW5laWdoLT5mbGFncyB8PSBOVEZfUk9VVEVSOwogCX0gZWxzZSBpZiAocnQpIHsKLQkJcnQtPnJ0NmlfZmxhZ3MgfD0gKHJ0LT5ydDZpX2ZsYWdzICYgflJURl9QUkVGX01BU0spIHwgUlRGX1BSRUYocHJlZik7CisJCXJ0LT5ydDZpX2ZsYWdzID0gKHJ0LT5ydDZpX2ZsYWdzICYgflJURl9QUkVGX01BU0spIHwgUlRGX1BSRUYocHJlZik7CiAJfQogCiAJaWYgKHJ0KQpAQCAtMTczMCw5ICsxNzMwLDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgbmRpc2NfaWZpbmZvX3N5c2N0bF9zdHJhdGVneShjdGxfdGFibGUgKmN0bCwgaW50IF9fdXNlciAqbmFtZSwKLQkJCQkgaW50IG5sZW4sIHZvaWQgX191c2VyICpvbGR2YWwsCi0JCQkJIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCitpbnQgbmRpc2NfaWZpbmZvX3N5c2N0bF9zdHJhdGVneShjdGxfdGFibGUgKmN0bCwKKwkJCQkgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCQkgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY3RsLT5leHRyYTE7CkBAIC0xNzQ1LDEzICsxNzQ0LDExIEBACiAKIAlzd2l0Y2ggKGN0bC0+Y3RsX25hbWUpIHsKIAljYXNlIE5FVF9ORUlHSF9SRUFDSEFCTEVfVElNRToKLQkJcmV0ID0gc3lzY3RsX2ppZmZpZXMoY3RsLCBuYW1lLCBubGVuLAotCQkJCSAgICAgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CisJCXJldCA9IHN5c2N0bF9qaWZmaWVzKGN0bCwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJCWJyZWFrOwogCWNhc2UgTkVUX05FSUdIX1JFVFJBTlNfVElNRV9NUzoKIAljYXNlIE5FVF9ORUlHSF9SRUFDSEFCTEVfVElNRV9NUzoKLQkJIHJldCA9IHN5c2N0bF9tc19qaWZmaWVzKGN0bCwgbmFtZSwgbmxlbiwKLQkJCQkJIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOworCQkgcmV0ID0gc3lzY3RsX21zX2ppZmZpZXMoY3RsLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAkJIGJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci5jCmluZGV4IDZiMjliMDMuLmZkNWIzYTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci5jCkBAIC0xMiw2ICsxMiw3IEBACiAKIGludCBpcDZfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRzdC0+ZGV2KTsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAJc3RydWN0IGZsb3dpIGZsID0gewpAQCAtMjMsNyArMjQsNyBAQAogCQkgICAgLnNhZGRyID0gaXBoLT5zYWRkciwgfSB9LAogCX07CiAKLQlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KGRldl9uZXQoc2tiLT5kc3QtPmRldiksIHNrYi0+c2ssICZmbCk7CisJZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIHNrYi0+c2ssICZmbCk7CiAKICNpZmRlZiBDT05GSUdfWEZSTQogCWlmICghKElQNkNCKHNrYiktPmZsYWdzICYgSVA2U0tCX1hGUk1fVFJBTlNGT1JNRUQpICYmCkBAIC0zMyw4ICszNCw3IEBACiAjZW5kaWYKIAogCWlmIChkc3QtPmVycm9yKSB7Ci0JCUlQNl9JTkNfU1RBVFMoJmluaXRfbmV0LCBpcDZfZHN0X2lkZXYoZHN0KSwKLQkJCSAgICAgIElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKKwkJSVA2X0lOQ19TVEFUUyhuZXQsIGlwNl9kc3RfaWRldihkc3QpLCBJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CiAJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgImlwNl9yb3V0ZV9tZV9oYXJkZXI6IE5vIG1vcmUgcm91dGUuXG4iKTsKIAkJZHN0X3JlbGVhc2UoZHN0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeW5jb29raWVzLmMgYi9uZXQvaXB2Ni9zeW5jb29raWVzLmMKaW5kZXggZWMzOTRjZi4uNjc2YzgwYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc3luY29va2llcy5jCisrKyBiL25ldC9pcHY2L3N5bmNvb2tpZXMuYwpAQCAtMjA0LDYgKzIwNCw3IEBACiAKIAlyZXEtPm1zcyA9IG1zczsKIAlpcmVxLT5ybXRfcG9ydCA9IHRoLT5zb3VyY2U7CisJaXJlcS0+bG9jX3BvcnQgPSB0aC0+ZGVzdDsKIAlpcHY2X2FkZHJfY29weSgmaXJlcTYtPnJtdF9hZGRyLCAmaXB2Nl9oZHIoc2tiKS0+c2FkZHIpOwogCWlwdjZfYWRkcl9jb3B5KCZpcmVxNi0+bG9jX2FkZHIsICZpcHY2X2hkcihza2IpLT5kYWRkcik7CiAJaWYgKGlwdjZfb3B0X2FjY2VwdGVkKHNrLCBza2IpIHx8CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCBlNTMxMGM5Yi4uYjZiMzU2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC00NzYsNyArNDc2LDcgQEAKIAlmbC5mbDZfZmxvd2xhYmVsID0gMDsKIAlmbC5vaWYgPSB0cmVxLT5paWY7CiAJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKLQlmbC5mbF9pcF9zcG9ydCA9IGluZXRfc2soc2spLT5zcG9ydDsKKwlmbC5mbF9pcF9zcG9ydCA9IGluZXRfcnNrKHJlcSktPmxvY19wb3J0OwogCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgJmZsKTsKIAogCW9wdCA9IG5wLT5vcHQ7CkBAIC0xMzA5LDcgKzEzMDksNyBAQAogCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X3NyYywgJnRyZXEtPmxvY19hZGRyKTsKIAkJZmwub2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAkJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKLQkJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CisJCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldF9yc2socmVxKS0+bG9jX3BvcnQ7CiAJCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgJmZsKTsKIAogCQlpZiAoaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCkpCkBAIC0xODY1LDcgKzE4NjUsNyBAQAogCQkgICBpLAogCQkgICBzcmMtPnM2X2FkZHIzMlswXSwgc3JjLT5zNl9hZGRyMzJbMV0sCiAJCSAgIHNyYy0+czZfYWRkcjMyWzJdLCBzcmMtPnM2X2FkZHIzMlszXSwKLQkJICAgbnRvaHMoaW5ldF9zayhzayktPnNwb3J0KSwKKwkJICAgbnRvaHMoaW5ldF9yc2socmVxKS0+bG9jX3BvcnQpLAogCQkgICBkZXN0LT5zNl9hZGRyMzJbMF0sIGRlc3QtPnM2X2FkZHIzMlsxXSwKIAkJICAgZGVzdC0+czZfYWRkcjMyWzJdLCBkZXN0LT5zNl9hZGRyMzJbM10sCiAJCSAgIG50b2hzKGluZXRfcnNrKHJlcSktPnJtdF9wb3J0KSwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKaW5kZXggMmE0NTE1Ni4uMmFkNTA0ZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKQEAgLTU0NSw4ICs1NDUsMTIgQEAKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCXNwcmludGYoYnVmLCAibmV0ZGV2OiVzIiwgZGV2LT5uYW1lKTsKIAlkaXIgPSBzZGF0YS0+ZGVidWdmc2RpcjsKKworCWlmICghZGlyKQorCQlyZXR1cm4gMDsKKworCXNwcmludGYoYnVmLCAibmV0ZGV2OiVzIiwgZGV2LT5uYW1lKTsKIAlpZiAoIWRlYnVnZnNfcmVuYW1lKGRpci0+ZF9wYXJlbnQsIGRpciwgZGlyLT5kX3BhcmVudCwgYnVmKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJtYWM4MDIxMTogZGVidWdmczogZmFpbGVkIHRvIHJlbmFtZSBkZWJ1Z2ZzICIKIAkJICAgICAgICJkaXIgdG8gJXNcbiIsIGJ1Zik7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jCmluZGV4IGI5OTAyZTQuLjE4OWQwYmEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jCkBAIC0yNDksMTEgKzI0OSwyMiBAQAogCURFQ0xBUkVfTUFDX0JVRihtYnVmKTsKIAl1OCAqbWFjOwogCisJc3RhLT5kZWJ1Z2ZzLmFkZF9oYXNfcnVuID0gdHJ1ZTsKKwogCWlmICghc3RhdGlvbnNfZGlyKQogCQlyZXR1cm47CiAKIAltYWMgPSBwcmludF9tYWMobWJ1Ziwgc3RhLT5zdGEuYWRkcik7CiAKKwkvKgorCSAqIFRoaXMgbWlnaHQgZmFpbCBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbjoKKwkgKiBXaGVuIG1hYzgwMjExIHVubGlua3MgYSBzdGF0aW9uLCB0aGUgZGVidWdmcyBlbnRyaWVzCisJICogcmVtYWluLCBidXQgaXQgaXMgYWxyZWFkeSBwb3NzaWJsZSB0byBsaW5rIGEgbmV3CisJICogc3RhdGlvbiB3aXRoIHRoZSBzYW1lIGFkZHJlc3Mgd2hpY2ggdHJpZ2dlcnMgYWRkaW5nCisJICogaXQgdG8gZGVidWdmczsgdGhlcmVmb3JlLCBpZiB0aGUgb2xkIHN0YXRpb24gaXNuJ3QKKwkgKiBkZXN0cm95ZWQgcXVpY2tseSBlbm91Z2ggdGhlIG9sZCBzdGF0aW9uJ3MgZGVidWdmcworCSAqIGRpciBtaWdodCBzdGlsbCBiZSBhcm91bmQuCisJICovCiAJc3RhLT5kZWJ1Z2ZzLmRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihtYWMsIHN0YXRpb25zX2Rpcik7CiAJaWYgKCFzdGEtPmRlYnVnZnMuZGlyKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IDgwMjViMjkuLjE1NmU0MmEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC04MTYsOCArODE2LDggQEAKIAl1OCAqZXh0X3N1cHBfcmF0ZXM7CiAJdTggKndtbV9pbmZvOwogCXU4ICp3bW1fcGFyYW07Ci0JdTggKmh0X2NhcF9lbGVtOwotCXU4ICpodF9pbmZvX2VsZW07CisJc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmh0X2NhcF9lbGVtOworCXN0cnVjdCBpZWVlODAyMTFfaHRfYWRkdF9pbmZvICpodF9pbmZvX2VsZW07CiAJdTggKm1lc2hfY29uZmlnOwogCXU4ICptZXNoX2lkOwogCXU4ICpwZWVyX2xpbms7CkBAIC04NDQsOCArODQ0LDYgQEAKIAl1OCBleHRfc3VwcF9yYXRlc19sZW47CiAJdTggd21tX2luZm9fbGVuOwogCXU4IHdtbV9wYXJhbV9sZW47Ci0JdTggaHRfY2FwX2VsZW1fbGVuOwotCXU4IGh0X2luZm9fZWxlbV9sZW47CiAJdTggbWVzaF9jb25maWdfbGVuOwogCXU4IG1lc2hfaWRfbGVuOwogCXU4IHBlZXJfbGlua19sZW47CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwppbmRleCA0OWY4NmZhLi44NzY2NWQ3YiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYworKysgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC0xMzQ4LDEwICsxMzQ4LDggQEAKIAkgICAgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfaHRfYnNzX2luZm8gYnNzX2luZm87CiAJCWllZWU4MDIxMV9odF9jYXBfaWVfdG9faHRfaW5mbygKLQkJCQkoc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKikKIAkJCQllbGVtcy5odF9jYXBfZWxlbSwgJnN0YS0+c3RhLmh0X2luZm8pOwogCQlpZWVlODAyMTFfaHRfYWRkdF9pbmZvX2llX3RvX2h0X2Jzc19pbmZvKAotCQkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X2FkZHRfaW5mbyAqKQogCQkJCWVsZW1zLmh0X2luZm9fZWxlbSwgJmJzc19pbmZvKTsKIAkJaWVlZTgwMjExX2hhbmRsZV9odChsb2NhbCwgMSwgJnN0YS0+c3RhLmh0X2luZm8sICZic3NfaW5mbyk7CiAJfQpAQCAtMTcwOSw3ICsxNzA3LDYgQEAKIAkJc3RydWN0IGllZWU4MDIxMV9odF9ic3NfaW5mbyBic3NfaW5mbzsKIAogCQlpZWVlODAyMTFfaHRfYWRkdF9pbmZvX2llX3RvX2h0X2Jzc19pbmZvKAotCQkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X2FkZHRfaW5mbyAqKQogCQkJCWVsZW1zLmh0X2luZm9fZWxlbSwgJmJzc19pbmZvKTsKIAkJY2hhbmdlZCB8PSBpZWVlODAyMTFfaGFuZGxlX2h0KGxvY2FsLCAxLCAmY29uZi0+aHRfY29uZiwKIAkJCQkJICAgICAgICZic3NfaW5mbyk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jCmluZGV4IDc3ZTdiMDEuLmNmNmIxMjEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9yeC5jCkBAIC0xMzc5LDYgKzEzNzksNyBAQAogCXJldHVybiBSWF9RVUVVRUQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQKIGllZWU4MDIxMV9yeF9oX21lc2hfZndkaW5nKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CkBAIC0xNDUzLDcgKzE0NTQsNyBAQAogCWVsc2UKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIH0KLQorI2VuZGlmCiAKIHN0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0IGRlYnVnX25vaW5saW5lCiBpZWVlODAyMTFfcnhfaF9kYXRhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCkBAIC0xNzgwLDggKzE3ODEsMTAgQEAKIAkvKiBtdXN0IGJlIGFmdGVyIE1NSUMgdmVyaWZ5IHNvIGhlYWRlciBpcyBjb3VudGVkIGluIE1QRFUgbWljICovCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfcmVtb3ZlX3Fvc19jb250cm9sKQogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2Ftc2R1KQorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCiAJCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX21lc2hfZndkaW5nKTsKKyNlbmRpZgogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2RhdGEpCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfY3RybCkKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9hY3Rpb24pCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uYwppbmRleCA4ZTY2ODVlLi40MTZiYjQxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc2Nhbi5jCisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKQEAgLTM4OCw3ICszODgsOCBAQAogCWJzcyA9IGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUoc2RhdGEtPmxvY2FsLCByeF9zdGF0dXMsCiAJCQkJCW1nbXQsIHNrYi0+bGVuLCAmZWxlbXMsCiAJCQkJCWZyZXEsIGJlYWNvbik7Ci0JaWVlZTgwMjExX3J4X2Jzc19wdXQoc2RhdGEtPmxvY2FsLCBic3MpOworCWlmIChic3MpCisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KHNkYXRhLT5sb2NhbCwgYnNzKTsKIAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gUlhfUVVFVUVEOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwppbmRleCA5YjcyZDE1Li43ZmVmOGVhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYworKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uYwpAQCAtNjM1LDcgKzYzNSwxMiBAQAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKLQkJCWlmICghdG1wLT5kZWJ1Z2ZzLmRpcikgeworCQkJLyoKKwkJCSAqIGRlYnVnZnMuYWRkX2hhc19ydW4gd2lsbCBiZSBzZXQgYnkKKwkJCSAqIGllZWU4MDIxMV9zdGFfZGVidWdmc19hZGQgcmVnYXJkbGVzcworCQkJICogb2Ygd2hhdCBlbHNlIGl0IGRvZXMuCisJCQkgKi8KKwkJCWlmICghdG1wLT5kZWJ1Z2ZzLmFkZF9oYXNfcnVuKSB7CiAJCQkJc3RhID0gdG1wOwogCQkJCV9fc3RhX2luZm9fcGluKHN0YSk7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaCBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCmluZGV4IGE2YjUxODYuLjE2OGEzOWEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCkBAIC0zMDAsNiArMzAwLDcgQEAKIAkJc3RydWN0IGRlbnRyeSAqaW5hY3RpdmVfbXM7CiAJCXN0cnVjdCBkZW50cnkgKmxhc3Rfc2VxX2N0cmw7CiAJCXN0cnVjdCBkZW50cnkgKmFnZ19zdGF0dXM7CisJCWJvb2wgYWRkX2hhc19ydW47CiAJfSBkZWJ1Z2ZzOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS91dGlsLmMgYi9uZXQvbWFjODAyMTEvdXRpbC5jCmluZGV4IGYzMjU2MWUuLmNlZTQ4ODQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS91dGlsLmMKKysrIGIvbmV0L21hYzgwMjExL3V0aWwuYwpAQCAtNTI5LDEyICs1MjksMTIgQEAKIAkJCWVsZW1zLT5leHRfc3VwcF9yYXRlc19sZW4gPSBlbGVuOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfSFRfQ0FQQUJJTElUWToKLQkJCWVsZW1zLT5odF9jYXBfZWxlbSA9IHBvczsKLQkJCWVsZW1zLT5odF9jYXBfZWxlbV9sZW4gPSBlbGVuOworCQkJaWYgKGVsZW4gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSkKKwkJCQllbGVtcy0+aHRfY2FwX2VsZW0gPSAodm9pZCAqKXBvczsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRUlEX0hUX0VYVFJBX0lORk86Ci0JCQllbGVtcy0+aHRfaW5mb19lbGVtID0gcG9zOwotCQkJZWxlbXMtPmh0X2luZm9fZWxlbV9sZW4gPSBlbGVuOworCQkJaWYgKGVsZW4gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfYWRkdF9pbmZvKSkKKwkJCQllbGVtcy0+aHRfaW5mb19lbGVtID0gKHZvaWQgKilwb3M7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0VJRF9NRVNIX0lEOgogCQkJZWxlbXMtPm1lc2hfaWQgPSBwb3M7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd2V4dC5jIGIvbmV0L21hYzgwMjExL3dleHQuYwppbmRleCA3ZTBkNTNhLi43NDJmODExIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd2V4dC5jCisrKyBiL25ldC9tYWM4MDIxMS93ZXh0LmMKQEAgLTc3NSw3ICs3NzUsNyBAQAogCSAqIGNvbmZpZ3VyZSBpdCBoZXJlICovCiAKIAlpZiAobG9jYWwtPm9wcy0+c2V0X2ZyYWdfdGhyZXNob2xkKQotCQlsb2NhbC0+b3BzLT5zZXRfZnJhZ190aHJlc2hvbGQoCisJCXJldHVybiBsb2NhbC0+b3BzLT5zZXRfZnJhZ190aHJlc2hvbGQoCiAJCQlsb2NhbF90b19odyhsb2NhbCksCiAJCQlsb2NhbC0+ZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQpOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggNzg4OTJjZi4uMjVkY2VmOSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMjcxLDcgKzI3MSw2IEBACiBjb25maWcgTkZfQ1RfTkVUTElOSwogCXRyaXN0YXRlICdDb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgaW50ZXJmYWNlJwogCXNlbGVjdCBORVRGSUxURVJfTkVUTElOSwotCWRlcGVuZHMgb24gTkZfTkFUPW4gfHwgTkZfTkFUCiAJZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBhIG5ldGxpbmstYmFzZWQgdXNlcnNwYWNlIGludGVyZmFjZQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZwppbmRleCAwNTA0OGU0Li43OWE2OTgwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZwpAQCAtMjUsMTEgKzI1LDEzIEBACiBpZiBJUF9WUwogCiBjb25maWcJSVBfVlNfSVBWNgotCWJvb2wgIklQdjYgc3VwcG9ydCBmb3IgSVBWUyAoREFOR0VST1VTKSIKKwlib29sICJJUHY2IHN1cHBvcnQgZm9yIElQVlMiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgKElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNikKIAktLS1oZWxwLS0tCiAJICBBZGQgSVB2NiBzdXBwb3J0IHRvIElQVlMuIFRoaXMgaXMgaW5jb21wbGV0ZSBhbmQgbWlnaHQgYmUgZGFuZ2Vyb3VzLgogCisJICBTZWUgaHR0cDovL3d3dy5taW5kYmFza2V0LmNvbS9pcHZzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCiAJICBTYXkgTiBpZiB1bnN1cmUuCiAKIGNvbmZpZwlJUF9WU19ERUJVRwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5jCmluZGV4IDAzNTkxZDMuLmI5MmRmNWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0LmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAJaWYgKG5ldF9lcShuZXQsICZpbml0X25ldCkpIHsKICNpZmRlZiBDT05GSUdfTkZfQ1RfQUNDVAotCQlwcmludGsoS0VSTl9XQVJOSU5HICJDT05GSUdfTkZfQ1RfQUNDVCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4gUGxhc2UgdXNlXG4iKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJDT05GSUdfTkZfQ1RfQUNDVCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4gUGxlYXNlIHVzZVxuIik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIm5mX2Nvbm50cmFjay5hY2N0PTEga2VybmVsIHBhcmFtYXRlciwgYWNjdD0xIG5mX2Nvbm50cmFjayBtb2R1bGUgb3B0aW9uIG9yXG4iKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAic3lzY3RsIG5ldC5uZXRmaWx0ZXIubmZfY29ubnRyYWNrX2FjY3Q9MSB0byBlbmFibGUgaXQuXG4iKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IDI3ZGUzYzcuLjYyMmQ3YzYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTM4LDkgKzM4LDE2IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdC5oPgogCiAjZGVmaW5lIE5GX0NPTk5UUkFDS19WRVJTSU9OCSIwLjUuMCIKIAordW5zaWduZWQgaW50CisoKm5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vaykoc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKKwkJCQkgIHN0cnVjdCBubGF0dHIgKmF0dHIpIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MX0dQTChuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2spOworCiBERUZJTkVfU1BJTkxPQ0sobmZfY29ubnRyYWNrX2xvY2spOwogRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2xvY2spOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggY2FkZmQxNS4uYTA0MGQ0NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtNjg5LDcxICs2ODksNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBwcm90b25hdF9ubGFfcG9saWN5W0NUQV9QUk9UT05BVF9NQVgrMV0gPSB7Ci0JW0NUQV9QUk9UT05BVF9QT1JUX01JTl0JPSB7IC50eXBlID0gTkxBX1UxNiB9LAotCVtDVEFfUFJPVE9OQVRfUE9SVF9NQVhdCT0geyAudHlwZSA9IE5MQV9VMTYgfSwKLX07Ci0KLXN0YXRpYyBpbnQgbmZuZXRsaW5rX3BhcnNlX25hdF9wcm90byhzdHJ1Y3QgbmxhdHRyICphdHRyLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkJCSAgICAgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UpCi17Ci0Jc3RydWN0IG5sYXR0ciAqdGJbQ1RBX1BST1RPTkFUX01BWCsxXTsKLQljb25zdCBzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sICpucHQ7Ci0JaW50IGVycjsKLQotCWVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9QUk9UT05BVF9NQVgsIGF0dHIsIHByb3RvbmF0X25sYV9wb2xpY3kpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JbnB0ID0gbmZfbmF0X3Byb3RvX2ZpbmRfZ2V0KG5mX2N0X3Byb3RvbnVtKGN0KSk7Ci0JaWYgKG5wdC0+bmxhdHRyX3RvX3JhbmdlKQotCQllcnIgPSBucHQtPm5sYXR0cl90b19yYW5nZSh0YiwgcmFuZ2UpOwotCW5mX25hdF9wcm90b19wdXQobnB0KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmF0X25sYV9wb2xpY3lbQ1RBX05BVF9NQVgrMV0gPSB7Ci0JW0NUQV9OQVRfTUlOSVBdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCi0JW0NUQV9OQVRfTUFYSVBdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCi19OwotCi1zdGF0aWMgaW5saW5lIGludAotbmZuZXRsaW5rX3BhcnNlX25hdChzdHJ1Y3QgbmxhdHRyICpuYXQsCi0JCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKQotewotCXN0cnVjdCBubGF0dHIgKnRiW0NUQV9OQVRfTUFYKzFdOwotCWludCBlcnI7Ci0KLQltZW1zZXQocmFuZ2UsIDAsIHNpemVvZigqcmFuZ2UpKTsKLQotCWVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9OQVRfTUFYLCBuYXQsIG5hdF9ubGFfcG9saWN5KTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCWlmICh0YltDVEFfTkFUX01JTklQXSkKLQkJcmFuZ2UtPm1pbl9pcCA9IG5sYV9nZXRfYmUzMih0YltDVEFfTkFUX01JTklQXSk7Ci0KLQlpZiAoIXRiW0NUQV9OQVRfTUFYSVBdKQotCQlyYW5nZS0+bWF4X2lwID0gcmFuZ2UtPm1pbl9pcDsKLQllbHNlCi0JCXJhbmdlLT5tYXhfaXAgPSBubGFfZ2V0X2JlMzIodGJbQ1RBX05BVF9NQVhJUF0pOwotCi0JaWYgKHJhbmdlLT5taW5faXApCi0JCXJhbmdlLT5mbGFncyB8PSBJUF9OQVRfUkFOR0VfTUFQX0lQUzsKLQotCWlmICghdGJbQ1RBX05BVF9QUk9UT10pCi0JCXJldHVybiAwOwotCi0JZXJyID0gbmZuZXRsaW5rX3BhcnNlX25hdF9wcm90byh0YltDVEFfTkFUX1BST1RPXSwgY3QsIHJhbmdlKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbmxpbmUgaW50CiBjdG5ldGxpbmtfcGFyc2VfaGVscChzdHJ1Y3QgbmxhdHRyICphdHRyLCBjaGFyICoqaGVscGVyX25hbWUpCiB7CkBAIC04NzgsNiArODEzLDM2IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECitzdGF0aWMgaW50CitjdG5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKKwkJCSAgc3RydWN0IG5sYXR0ciAqYXR0cikKK3sKKwl0eXBlb2YobmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cF9ob29rKSBwYXJzZV9uYXRfc2V0dXA7CisKKwlwYXJzZV9uYXRfc2V0dXAgPSByY3VfZGVyZWZlcmVuY2UobmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cF9ob29rKTsKKwlpZiAoIXBhcnNlX25hdF9zZXR1cCkgeworI2lmZGVmIENPTkZJR19NT0RVTEVTCisJCXJjdV9yZWFkX3VubG9jaygpOworCQluZm5sX3VubG9jaygpOworCQlpZiAocmVxdWVzdF9tb2R1bGUoIm5mLW5hdC1pcHY0IikgPCAwKSB7CisJCQluZm5sX2xvY2soKTsKKwkJCXJjdV9yZWFkX2xvY2soKTsKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCQluZm5sX2xvY2soKTsKKwkJcmN1X3JlYWRfbG9jaygpOworCQlpZiAobmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cF9ob29rKQorCQkJcmV0dXJuIC1FQUdBSU47CisjZW5kaWYKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiBwYXJzZV9uYXRfc2V0dXAoY3QsIG1hbmlwLCBhdHRyKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQogewpAQCAtODk3LDMxICs4NjIsNiBAQAogCQkvKiBBU1NVUkVEIGJpdCBjYW4gb25seSBiZSBzZXQgKi8KIAkJcmV0dXJuIC1FQlVTWTsKIAotCWlmIChjZGFbQ1RBX05BVF9TUkNdIHx8IGNkYVtDVEFfTkFUX0RTVF0pIHsKLSNpZm5kZWYgQ09ORklHX05GX05BVF9ORUVERUQKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotI2Vsc2UKLQkJc3RydWN0IG5mX25hdF9yYW5nZSByYW5nZTsKLQotCQlpZiAoY2RhW0NUQV9OQVRfRFNUXSkgewotCQkJaWYgKG5mbmV0bGlua19wYXJzZV9uYXQoY2RhW0NUQV9OQVRfRFNUXSwgY3QsCi0JCQkJCQkmcmFuZ2UpIDwgMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmIChuZl9uYXRfaW5pdGlhbGl6ZWQoY3QsIElQX05BVF9NQU5JUF9EU1QpKQotCQkJCXJldHVybiAtRUVYSVNUOwotCQkJbmZfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgSVBfTkFUX01BTklQX0RTVCk7Ci0JCX0KLQkJaWYgKGNkYVtDVEFfTkFUX1NSQ10pIHsKLQkJCWlmIChuZm5ldGxpbmtfcGFyc2VfbmF0KGNkYVtDVEFfTkFUX1NSQ10sIGN0LAotCQkJCQkJJnJhbmdlKSA8IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAobmZfbmF0X2luaXRpYWxpemVkKGN0LCBJUF9OQVRfTUFOSVBfU1JDKSkKLQkJCQlyZXR1cm4gLUVFWElTVDsKLQkJCW5mX25hdF9zZXR1cF9pbmZvKGN0LCAmcmFuZ2UsIElQX05BVF9NQU5JUF9TUkMpOwotCQl9Ci0jZW5kaWYKLQl9Ci0KIAkvKiBCZSBjYXJlZnVsIGhlcmUsIG1vZGlmeWluZyBOQVQgYml0cyBjYW4gc2NyZXcgdXAgdGhpbmdzLAogCSAqIHNvIGRvbid0IGxldCB1c2VycyBtb2RpZnkgdGhlbSBkaXJlY3RseSBpZiB0aGV5IGRvbid0IHBhc3MKIAkgKiBuZl9uYXRfcmFuZ2UuICovCkBAIC05MjksNiArODY5LDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK2N0bmV0bGlua19jaGFuZ2VfbmF0KHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5sYXR0ciAqY2RhW10pCit7CisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKKwlpbnQgcmV0OworCisJaWYgKGNkYVtDVEFfTkFUX0RTVF0pIHsKKwkJcmV0ID0gY3RuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChjdCwKKwkJCQkJCUlQX05BVF9NQU5JUF9EU1QsCisJCQkJCQljZGFbQ1RBX05BVF9EU1RdKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoY2RhW0NUQV9OQVRfU1JDXSkgeworCQlyZXQgPSBjdG5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKGN0LAorCQkJCQkJSVBfTkFUX01BTklQX1NSQywKKwkJCQkJCWNkYVtDVEFfTkFUX1NSQ10pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworI2Vsc2UKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CisjZW5kaWYKK30KIAogc3RhdGljIGlubGluZSBpbnQKIGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5sYXR0ciAqY2RhW10pCkBAIC0xMTU3LDYgKzExMjIsMTQgQEAKIAkJfQogCX0KIAorCWlmIChjZGFbQ1RBX05BVF9TUkNdIHx8IGNkYVtDVEFfTkFUX0RTVF0pIHsKKwkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9uYXQoY3QsIGNkYSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCiAJaWYgKGNkYVtDVEFfUFJPVE9JTkZPXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX3Byb3RvaW5mbyhjdCwgY2RhKTsKIAkJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwppbmRleCAzNzNlNTFlLi4xYmMzMDAxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCkBAIC02NSw3ICs2NSw3IEBACiAJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfcHB0cF9ob29rX2V4cGVjdGZuKTsKIAotI2lmZGVmIERFQlVHCisjaWYgZGVmaW5lZChERUJVRykgfHwgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcpCiAvKiBQcHRwQ29udHJvbE1lc3NhZ2VUeXBlIG5hbWVzICovCiBjb25zdCBjaGFyICpjb25zdCBwcHRwX21zZ19uYW1lW10gPSB7CiAJIlVOS05PV05fTUVTU0FHRSIsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMKaW5kZXggZmUzNGY0Yi4uY2RjOTdmMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYwpAQCAtMTAsNyArMTAsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwppbmRleCBiNzVjOWM0Li45YzBiYTE3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKQEAgLTQ0LDE1ICs0NCwxNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtICpzdWJzeXNfdGFibGVbTkZOTF9TVUJTWVNfQ09VTlRdOwogc3RhdGljIERFRklORV9NVVRFWChuZm5sX211dGV4KTsKIAotc3RhdGljIGlubGluZSB2b2lkIG5mbmxfbG9jayh2b2lkKQordm9pZCBuZm5sX2xvY2sodm9pZCkKIHsKIAltdXRleF9sb2NrKCZuZm5sX211dGV4KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG5mbmxfbG9jayk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuZm5sX3VubG9jayh2b2lkKQordm9pZCBuZm5sX3VubG9jayh2b2lkKQogewogCW11dGV4X3VubG9jaygmbmZubF9tdXRleCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuZm5sX3VubG9jayk7CiAKIGludCBuZm5ldGxpbmtfc3Vic3lzX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtICpuKQogewpAQCAtMTMyLDkgKzEzNCwxMCBAQAogCQlyZXR1cm4gMDsKIAogCXR5cGUgPSBubGgtPm5sbXNnX3R5cGU7CityZXBsYXk6CiAJc3MgPSBuZm5ldGxpbmtfZ2V0X3N1YnN5cyh0eXBlKTsKIAlpZiAoIXNzKSB7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCQluZm5sX3VubG9jaygpOwogCQlyZXF1ZXN0X21vZHVsZSgibmZuZXRsaW5rLXN1YnN5cy0lZCIsIE5GTkxfU1VCU1lTX0lEKHR5cGUpKTsKIAkJbmZubF9sb2NrKCk7CkBAIC0xNjUsNyArMTY4LDEwIEBACiAJCX0gZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJcmV0dXJuIG5jLT5jYWxsKG5mbmwsIHNrYiwgbmxoLCBjZGEpOworCQllcnIgPSBuYy0+Y2FsbChuZm5sLCBza2IsIG5saCwgY2RhKTsKKwkJaWYgKGVyciA9PSAtRUFHQUlOKQorCQkJZ290byByZXBsYXk7CisJCXJldHVybiBlcnI7CiAJfQogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X05GUVVFVUUuYyBiL25ldC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5jCmluZGV4IDJjYzFmZmYuLmY5OTc3YjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5jCkBAIC00OCw3ICs0OCw3IEBACiAJfSwKIAl7CiAJCS5uYW1lCQk9ICJORlFVRVVFIiwKLQkJLmZhbWlseQkJPSBORl9BUlAsCisJCS5mYW1pbHkJCT0gTkZQUk9UT19BUlAsCiAJCS50YXJnZXQJCT0gbmZxdWV1ZV90ZywKIAkJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X05GUV9pbmZvKSwKIAkJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwppbmRleCA2ZjYyYzM2Li43YWM1NGVhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwpAQCAtNjEsNyArNjEsNyBAQAogCWlmIChpbmZvLT5mbGFncyAmIElQUkFOR0VfU1JDKSB7CiAJCW0gID0gbnRvaGwoaXBoLT5zYWRkcikgPCBudG9obChpbmZvLT5zcmNfbWluLmlwKTsKIAkJbSB8PSBudG9obChpcGgtPnNhZGRyKSA+IG50b2hsKGluZm8tPnNyY19tYXguaXApOwotCQltIF49IGluZm8tPmZsYWdzICYgSVBSQU5HRV9TUkNfSU5WOworCQltIF49ICEhKGluZm8tPmZsYWdzICYgSVBSQU5HRV9TUkNfSU5WKTsKIAkJaWYgKG0pIHsKIAkJCXByX2RlYnVnKCJzcmMgSVAgIiBOSVBRVUFEX0ZNVCAiIE5PVCBpbiByYW5nZSAlcyIKIAkJCSAgICAgICAgIE5JUFFVQURfRk1UICItIiBOSVBRVUFEX0ZNVCAiXG4iLApAQCAtNzUsNyArNzUsNyBAQAogCWlmIChpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUKSB7CiAJCW0gID0gbnRvaGwoaXBoLT5kYWRkcikgPCBudG9obChpbmZvLT5kc3RfbWluLmlwKTsKIAkJbSB8PSBudG9obChpcGgtPmRhZGRyKSA+IG50b2hsKGluZm8tPmRzdF9tYXguaXApOwotCQltIF49IGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1RfSU5WOworCQltIF49ICEhKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1RfSU5WKTsKIAkJaWYgKG0pIHsKIAkJCXByX2RlYnVnKCJkc3QgSVAgIiBOSVBRVUFEX0ZNVCAiIE5PVCBpbiByYW5nZSAlcyIKIAkJCSAgICAgICAgIE5JUFFVQURfRk1UICItIiBOSVBRVUFEX0ZNVCAiXG4iLApAQCAtMTE0LDE0ICsxMTQsMTQgQEAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQykgewogCQltICA9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+c2FkZHIsICZpbmZvLT5zcmNfbWluLmluNikgPCAwOwogCQltIHw9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+c2FkZHIsICZpbmZvLT5zcmNfbWF4LmluNikgPiAwOwotCQltIF49IGluZm8tPmZsYWdzICYgSVBSQU5HRV9TUkNfSU5WOworCQltIF49ICEhKGluZm8tPmZsYWdzICYgSVBSQU5HRV9TUkNfSU5WKTsKIAkJaWYgKG0pCiAJCQlyZXR1cm4gZmFsc2U7CiAJfQogCWlmIChpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUKSB7CiAJCW0gID0gaXByYW5nZV9pcHY2X3N1YigmaXBoLT5kYWRkciwgJmluZm8tPmRzdF9taW4uaW42KSA8IDA7CiAJCW0gfD0gaXByYW5nZV9pcHY2X3N1YigmaXBoLT5kYWRkciwgJmluZm8tPmRzdF9tYXguaW42KSA+IDA7Ci0JCW0gXj0gaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX0RTVF9JTlY7CisJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX0RTVF9JTlYpOwogCQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jIGIvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYwppbmRleCA0ZWJkNGNhLi4yODBjNDcxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMKQEAgLTMxOCwxNSArMzE4LDE1IEBACiAJZm9yIChpID0gMDsgaSA8IGlwX2xpc3RfaGFzaF9zaXplOyBpKyspCiAJCUlOSVRfTElTVF9IRUFEKCZ0LT5pcGhhc2hbaV0pOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JdC0+cHJvYyA9IHByb2NfY3JlYXRlKHQtPm5hbWUsIGlwX2xpc3RfcGVybXMsIHJlY2VudF9wcm9jX2RpciwKLQkJICAmcmVjZW50X210X2ZvcHMpOworCXQtPnByb2MgPSBwcm9jX2NyZWF0ZV9kYXRhKHQtPm5hbWUsIGlwX2xpc3RfcGVybXMsIHJlY2VudF9wcm9jX2RpciwKKwkJICAmcmVjZW50X210X2ZvcHMsIHQpOwogCWlmICh0LT5wcm9jID09IE5VTEwpIHsKIAkJa2ZyZWUodCk7CiAJCWdvdG8gb3V0OwogCX0KICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVF9QUk9DX0NPTVBBVAotCXQtPnByb2Nfb2xkID0gcHJvY19jcmVhdGUodC0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcHJvY19vbGRfZGlyLAotCQkgICAgICAmcmVjZW50X29sZF9mb3BzKTsKKwl0LT5wcm9jX29sZCA9IHByb2NfY3JlYXRlX2RhdGEodC0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcHJvY19vbGRfZGlyLAorCQkgICAgICAmcmVjZW50X29sZF9mb3BzLCB0KTsKIAlpZiAodC0+cHJvY19vbGQgPT0gTlVMTCkgewogCQlyZW1vdmVfcHJvY19lbnRyeSh0LT5uYW1lLCBwcm9jX29sZF9kaXIpOwogCQlrZnJlZSh0KTsKQEAgLTMzNCwxMSArMzM0LDkgQEAKIAl9CiAJdC0+cHJvY19vbGQtPnVpZCAgID0gaXBfbGlzdF91aWQ7CiAJdC0+cHJvY19vbGQtPmdpZCAgID0gaXBfbGlzdF9naWQ7Ci0JdC0+cHJvY19vbGQtPmRhdGEgID0gdDsKICNlbmRpZgogCXQtPnByb2MtPnVpZCAgICAgICA9IGlwX2xpc3RfdWlkOwogCXQtPnByb2MtPmdpZCAgICAgICA9IGlwX2xpc3RfZ2lkOwotCXQtPnByb2MtPmRhdGEgICAgICA9IHQ7CiAjZW5kaWYKIAlzcGluX2xvY2tfYmgoJnJlY2VudF9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZ0LT5saXN0LCAmdGFibGVzKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9NYWtlZmlsZSBiL25ldC9uZXRsYWJlbC9NYWtlZmlsZQppbmRleCA4YWYxOGMwLi5lYTc1MGU5IDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvTWFrZWZpbGUKKysrIGIvbmV0L25ldGxhYmVsL01ha2VmaWxlCkBAIC01LDcgKzUsOCBAQAogIwogCiAjIGJhc2Ugb2JqZWN0cwotb2JqLXkJOj0gbmV0bGFiZWxfdXNlci5vIG5ldGxhYmVsX2thcGkubyBuZXRsYWJlbF9kb21haW5oYXNoLm8KK29iai15CTo9IG5ldGxhYmVsX3VzZXIubyBuZXRsYWJlbF9rYXBpLm8KK29iai15CSs9IG5ldGxhYmVsX2RvbWFpbmhhc2gubyBuZXRsYWJlbF9hZGRybGlzdC5vCiAKICMgbWFuYWdlbWVudCBvYmplY3RzCiBvYmoteQkrPSBuZXRsYWJlbF9tZ210Lm8KZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2FkZHJsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5MjVhMwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5jCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogTmV0TGFiZWwgTmV0d29yayBBZGRyZXNzIExpc3RzCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIG5ldHdvcmsgYWRkcmVzcyBsaXN0IGZ1bmN0aW9ucyB1c2VkIHRvIG1hbmFnZSBvcmRlcmVkCisgKiBsaXN0cyBvZiBuZXR3b3JrIGFkZHJlc3NlcyBmb3IgdXNlIGJ5IHRoZSBOZXRMYWJlbCBzdWJzeXN0ZW0uICBUaGUgTmV0TGFiZWwKKyAqIHN5c3RlbSBtYW5hZ2VzIHN0YXRpYyBhbmQgZHluYW1pYyBsYWJlbCBtYXBwaW5ncyBmb3IgbmV0d29yayBwcm90b2NvbHMgc3VjaAorICogYXMgQ0lQU08gYW5kIFJJUFNPLgorICoKKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+CisgKgorICovCisKKy8qCisgKiAoYykgQ29weXJpZ2h0IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuLCAyMDA4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKworI2luY2x1ZGUgIm5ldGxhYmVsX2FkZHJsaXN0LmgiCisKKy8qCisgKiBBZGRyZXNzIExpc3QgRnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBuZXRsYmxfYWY0bGlzdF9zZWFyY2ggLSBTZWFyY2ggZm9yIGEgbWF0Y2hpbmcgSVB2NCBhZGRyZXNzIGVudHJ5CisgKiBAYWRkcjogSVB2NCBhZGRyZXNzCisgKiBAaGVhZDogdGhlIGxpc3QgaGVhZAorICoKKyAqIERlc2NyaXB0aW9uOgorICogU2VhcmNoZXMgdGhlIElQdjQgYWRkcmVzcyBsaXN0IGdpdmVuIGJ5IEBoZWFkLiAgSWYgYSBtYXRjaGluZyBhZGRyZXNzIGVudHJ5CisgKiBpcyBmb3VuZCBpdCBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIE5VTEwgaXMgcmV0dXJuZWQuICBUaGUgY2FsbGVyIGlzCisgKiByZXNwb25zaWJsZSBmb3IgY2FsbGluZyB0aGUgcmN1X3JlYWRfW3VuXWxvY2soKSBmdW5jdGlvbnMuCisgKgorICovCitzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKm5ldGxibF9hZjRsaXN0X3NlYXJjaChfX2JlMzIgYWRkciwKKwkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqaXRlcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGl0ZXIsIGhlYWQsIGxpc3QpCisJCWlmIChpdGVyLT52YWxpZCAmJiAoYWRkciAmIGl0ZXItPm1hc2spID09IGl0ZXItPmFkZHIpCisJCQlyZXR1cm4gaXRlcjsKKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIG5ldGxibF9hZjRsaXN0X3NlYXJjaF9leGFjdCAtIFNlYXJjaCBmb3IgYW4gZXhhY3QgSVB2NCBhZGRyZXNzIGVudHJ5CisgKiBAYWRkcjogSVB2NCBhZGRyZXNzCisgKiBAbWFzazogSVB2NCBhZGRyZXNzIG1hc2sKKyAqIEBoZWFkOiB0aGUgbGlzdCBoZWFkCisgKgorICogRGVzY3JpcHRpb246CisgKiBTZWFyY2hlcyB0aGUgSVB2NCBhZGRyZXNzIGxpc3QgZ2l2ZW4gYnkgQGhlYWQuICBJZiBhbiBleGFjdCBtYXRjaCBpZiBmb3VuZAorICogaXQgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKyAqIGNhbGxpbmcgdGhlIHJjdV9yZWFkX1t1bl1sb2NrKCkgZnVuY3Rpb25zLgorICoKKyAqLworc3RydWN0IG5ldGxibF9hZjRsaXN0ICpuZXRsYmxfYWY0bGlzdF9zZWFyY2hfZXhhY3QoX19iZTMyIGFkZHIsCisJCQkJCQkgICBfX2JlMzIgbWFzaywKKwkJCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IG5ldGxibF9hZjRsaXN0ICppdGVyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgaGVhZCwgbGlzdCkKKwkJaWYgKGl0ZXItPnZhbGlkICYmIGl0ZXItPmFkZHIgPT0gYWRkciAmJiBpdGVyLT5tYXNrID09IG1hc2spCisJCQlyZXR1cm4gaXRlcjsKKworCXJldHVybiBOVUxMOworfQorCisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKy8qKgorICogbmV0bGJsX2FmNmxpc3Rfc2VhcmNoIC0gU2VhcmNoIGZvciBhIG1hdGNoaW5nIElQdjYgYWRkcmVzcyBlbnRyeQorICogQGFkZHI6IElQdjYgYWRkcmVzcworICogQGhlYWQ6IHRoZSBsaXN0IGhlYWQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFNlYXJjaGVzIHRoZSBJUHY2IGFkZHJlc3MgbGlzdCBnaXZlbiBieSBAaGVhZC4gIElmIGEgbWF0Y2hpbmcgYWRkcmVzcyBlbnRyeQorICogaXMgZm91bmQgaXQgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlciBpcworICogcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgdGhlIHJjdV9yZWFkX1t1bl1sb2NrKCkgZnVuY3Rpb25zLgorICoKKyAqLworc3RydWN0IG5ldGxibF9hZjZsaXN0ICpuZXRsYmxfYWY2bGlzdF9zZWFyY2goY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICppdGVyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgaGVhZCwgbGlzdCkKKwkJaWYgKGl0ZXItPnZhbGlkICYmCisJCSAgICBpcHY2X21hc2tlZF9hZGRyX2NtcCgmaXRlci0+YWRkciwgJml0ZXItPm1hc2ssIGFkZHIpID09IDApCisJCQlyZXR1cm4gaXRlcjsKKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIG5ldGxibF9hZjZsaXN0X3NlYXJjaF9leGFjdCAtIFNlYXJjaCBmb3IgYW4gZXhhY3QgSVB2NiBhZGRyZXNzIGVudHJ5CisgKiBAYWRkcjogSVB2NiBhZGRyZXNzCisgKiBAbWFzazogSVB2NiBhZGRyZXNzIG1hc2sKKyAqIEBoZWFkOiB0aGUgbGlzdCBoZWFkCisgKgorICogRGVzY3JpcHRpb246CisgKiBTZWFyY2hlcyB0aGUgSVB2NiBhZGRyZXNzIGxpc3QgZ2l2ZW4gYnkgQGhlYWQuICBJZiBhbiBleGFjdCBtYXRjaCBpZiBmb3VuZAorICogaXQgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKyAqIGNhbGxpbmcgdGhlIHJjdV9yZWFkX1t1bl1sb2NrKCkgZnVuY3Rpb25zLgorICoKKyAqLworc3RydWN0IG5ldGxibF9hZjZsaXN0ICpuZXRsYmxfYWY2bGlzdF9zZWFyY2hfZXhhY3QoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICptYXNrLAorCQkJCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKml0ZXI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpdGVyLCBoZWFkLCBsaXN0KQorCQlpZiAoaXRlci0+dmFsaWQgJiYKKwkJICAgIGlwdjZfYWRkcl9lcXVhbCgmaXRlci0+YWRkciwgYWRkcikgJiYKKwkJICAgIGlwdjZfYWRkcl9lcXVhbCgmaXRlci0+bWFzaywgbWFzaykpCisJCQlyZXR1cm4gaXRlcjsKKworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIElQdjYgKi8KKworLyoqCisgKiBuZXRsYmxfYWY0bGlzdF9hZGQgLSBBZGQgYSBuZXcgSVB2NCBhZGRyZXNzIGVudHJ5IHRvIGEgbGlzdAorICogQGVudHJ5OiBhZGRyZXNzIGVudHJ5CisgKiBAaGVhZDogdGhlIGxpc3QgaGVhZAorICoKKyAqIERlc2NyaXB0aW9uOgorICogQWRkIGEgbmV3IGFkZHJlc3MgZW50cnkgdG8gdGhlIGxpc3QgcG9pbnRlZCB0byBieSBAaGVhZC4gIE9uIHN1Y2Nlc3MgemVybyBpcworICogcmV0dXJuZWQsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIHZhbHVlIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZQorICogZm9yIGNhbGxpbmcgdGhlIG5lY2Vzc2FyeSBsb2NraW5nIGZ1bmN0aW9ucy4KKyAqCisgKi8KK2ludCBuZXRsYmxfYWY0bGlzdF9hZGQoc3RydWN0IG5ldGxibF9hZjRsaXN0ICplbnRyeSwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKml0ZXI7CisKKwlpdGVyID0gbmV0bGJsX2FmNGxpc3Rfc2VhcmNoKGVudHJ5LT5hZGRyLCBoZWFkKTsKKwlpZiAoaXRlciAhPSBOVUxMICYmCisJICAgIGl0ZXItPmFkZHIgPT0gZW50cnktPmFkZHIgJiYgaXRlci0+bWFzayA9PSBlbnRyeS0+bWFzaykKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwkvKiBpbiBvcmRlciB0byBzcGVlZCB1cCBhZGRyZXNzIHNlYXJjaGVzIHRocm91Z2ggdGhlIGxpc3QgKHRoZSBjb21tb24KKwkgKiBjYXNlKSB3ZSBuZWVkIHRvIGtlZXAgdGhlIGxpc3QgaW4gb3JkZXIgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlCisJICogYWRkcmVzcyBtYXNrIHN1Y2ggdGhhdCB0aGUgZW50cnkgd2l0aCB0aGUgd2lkZXN0IG1hc2sgKHNtYWxsZXN0CisJICogbnVtZXJpY2FsIHZhbHVlKSBhcHBlYXJzIGZpcnN0IGluIHRoZSBsaXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgaGVhZCwgbGlzdCkKKwkJaWYgKGl0ZXItPnZhbGlkICYmCisJCSAgICBudG9obChlbnRyeS0+bWFzaykgPiBudG9obChpdGVyLT5tYXNrKSkgeworCQkJX19saXN0X2FkZF9yY3UoJmVudHJ5LT5saXN0LAorCQkJCSAgICAgICBpdGVyLT5saXN0LnByZXYsCisJCQkJICAgICAgICZpdGVyLT5saXN0KTsKKwkJCXJldHVybiAwOworCQl9CisJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5saXN0LCBoZWFkKTsKKwlyZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorLyoqCisgKiBuZXRsYmxfYWY2bGlzdF9hZGQgLSBBZGQgYSBuZXcgSVB2NiBhZGRyZXNzIGVudHJ5IHRvIGEgbGlzdAorICogQGVudHJ5OiBhZGRyZXNzIGVudHJ5CisgKiBAaGVhZDogdGhlIGxpc3QgaGVhZAorICoKKyAqIERlc2NyaXB0aW9uOgorICogQWRkIGEgbmV3IGFkZHJlc3MgZW50cnkgdG8gdGhlIGxpc3QgcG9pbnRlZCB0byBieSBAaGVhZC4gIE9uIHN1Y2Nlc3MgemVybyBpcworICogcmV0dXJuZWQsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIHZhbHVlIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZQorICogZm9yIGNhbGxpbmcgdGhlIG5lY2Vzc2FyeSBsb2NraW5nIGZ1bmN0aW9ucy4KKyAqCisgKi8KK2ludCBuZXRsYmxfYWY2bGlzdF9hZGQoc3RydWN0IG5ldGxibF9hZjZsaXN0ICplbnRyeSwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKml0ZXI7CisKKwlpdGVyID0gbmV0bGJsX2FmNmxpc3Rfc2VhcmNoKCZlbnRyeS0+YWRkciwgaGVhZCk7CisJaWYgKGl0ZXIgIT0gTlVMTCAmJgorCSAgICBpcHY2X2FkZHJfZXF1YWwoJml0ZXItPmFkZHIsICZlbnRyeS0+YWRkcikgJiYKKwkgICAgaXB2Nl9hZGRyX2VxdWFsKCZpdGVyLT5tYXNrLCAmZW50cnktPm1hc2spKQorCQlyZXR1cm4gLUVFWElTVDsKKworCS8qIGluIG9yZGVyIHRvIHNwZWVkIHVwIGFkZHJlc3Mgc2VhcmNoZXMgdGhyb3VnaCB0aGUgbGlzdCAodGhlIGNvbW1vbgorCSAqIGNhc2UpIHdlIG5lZWQgdG8ga2VlcCB0aGUgbGlzdCBpbiBvcmRlciBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUKKwkgKiBhZGRyZXNzIG1hc2sgc3VjaCB0aGF0IHRoZSBlbnRyeSB3aXRoIHRoZSB3aWRlc3QgbWFzayAoc21hbGxlc3QKKwkgKiBudW1lcmljYWwgdmFsdWUpIGFwcGVhcnMgZmlyc3QgaW4gdGhlIGxpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpdGVyLCBoZWFkLCBsaXN0KQorCQlpZiAoaXRlci0+dmFsaWQgJiYKKwkJICAgIGlwdjZfYWRkcl9jbXAoJmVudHJ5LT5tYXNrLCAmaXRlci0+bWFzaykgPiAwKSB7CisJCQlfX2xpc3RfYWRkX3JjdSgmZW50cnktPmxpc3QsCisJCQkJICAgICAgIGl0ZXItPmxpc3QucHJldiwKKwkJCQkgICAgICAgJml0ZXItPmxpc3QpOworCQkJcmV0dXJuIDA7CisJCX0KKwlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsIGhlYWQpOworCXJldHVybiAwOworfQorI2VuZGlmIC8qIElQdjYgKi8KKworLyoqCisgKiBuZXRsYmxfYWY0bGlzdF9yZW1vdmVfZW50cnkgLSBSZW1vdmUgYW4gSVB2NCBhZGRyZXNzIGVudHJ5CisgKiBAZW50cnk6IGFkZHJlc3MgZW50cnkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIElQIGFkZHJlc3MgZW50cnkuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorICogY2FsbGluZyB0aGUgbmVjZXNzYXJ5IGxvY2tpbmcgZnVuY3Rpb25zLgorICoKKyAqLwordm9pZCBuZXRsYmxfYWY0bGlzdF9yZW1vdmVfZW50cnkoc3RydWN0IG5ldGxibF9hZjRsaXN0ICplbnRyeSkKK3sKKwllbnRyeS0+dmFsaWQgPSAwOworCWxpc3RfZGVsX3JjdSgmZW50cnktPmxpc3QpOworfQorCisvKioKKyAqIG5ldGxibF9hZjRsaXN0X3JlbW92ZSAtIFJlbW92ZSBhbiBJUHY0IGFkZHJlc3MgZW50cnkKKyAqIEBhZGRyOiBJUCBhZGRyZXNzCisgKiBAbWFzazogSVAgYWRkcmVzcyBtYXNrCisgKiBAaGVhZDogdGhlIGxpc3QgaGVhZAorICoKKyAqIERlc2NyaXB0aW9uOgorICogUmVtb3ZlIGFuIElQIGFkZHJlc3MgZW50cnkgZnJvbSB0aGUgbGlzdCBwb2ludGVkIHRvIGJ5IEBoZWFkLiAgUmV0dXJucyB0aGUKKyAqIGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcKKyAqIHRoZSBuZWNlc3NhcnkgbG9ja2luZyBmdW5jdGlvbnMuCisgKgorICovCitzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKm5ldGxibF9hZjRsaXN0X3JlbW92ZShfX2JlMzIgYWRkciwgX19iZTMyIG1hc2ssCisJCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKmVudHJ5OworCisJZW50cnkgPSBuZXRsYmxfYWY0bGlzdF9zZWFyY2goYWRkciwgaGVhZCk7CisJaWYgKGVudHJ5ICE9IE5VTEwgJiYgZW50cnktPmFkZHIgPT0gYWRkciAmJiBlbnRyeS0+bWFzayA9PSBtYXNrKSB7CisJCW5ldGxibF9hZjRsaXN0X3JlbW92ZV9lbnRyeShlbnRyeSk7CisJCXJldHVybiBlbnRyeTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorLyoqCisgKiBuZXRsYmxfYWY2bGlzdF9yZW1vdmVfZW50cnkgLSBSZW1vdmUgYW4gSVB2NiBhZGRyZXNzIGVudHJ5CisgKiBAZW50cnk6IGFkZHJlc3MgZW50cnkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIElQIGFkZHJlc3MgZW50cnkuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorICogY2FsbGluZyB0aGUgbmVjZXNzYXJ5IGxvY2tpbmcgZnVuY3Rpb25zLgorICoKKyAqLwordm9pZCBuZXRsYmxfYWY2bGlzdF9yZW1vdmVfZW50cnkoc3RydWN0IG5ldGxibF9hZjZsaXN0ICplbnRyeSkKK3sKKwllbnRyeS0+dmFsaWQgPSAwOworCWxpc3RfZGVsX3JjdSgmZW50cnktPmxpc3QpOworfQorCisvKioKKyAqIG5ldGxibF9hZjZsaXN0X3JlbW92ZSAtIFJlbW92ZSBhbiBJUHY2IGFkZHJlc3MgZW50cnkKKyAqIEBhZGRyOiBJUCBhZGRyZXNzCisgKiBAbWFzazogSVAgYWRkcmVzcyBtYXNrCisgKiBAaGVhZDogdGhlIGxpc3QgaGVhZAorICoKKyAqIERlc2NyaXB0aW9uOgorICogUmVtb3ZlIGFuIElQIGFkZHJlc3MgZW50cnkgZnJvbSB0aGUgbGlzdCBwb2ludGVkIHRvIGJ5IEBoZWFkLiAgUmV0dXJucyB0aGUKKyAqIGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcKKyAqIHRoZSBuZWNlc3NhcnkgbG9ja2luZyBmdW5jdGlvbnMuCisgKgorICovCitzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKm5ldGxibF9hZjZsaXN0X3JlbW92ZShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICptYXNrLAorCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICplbnRyeTsKKworCWVudHJ5ID0gbmV0bGJsX2FmNmxpc3Rfc2VhcmNoKGFkZHIsIGhlYWQpOworCWlmIChlbnRyeSAhPSBOVUxMICYmCisJICAgIGlwdjZfYWRkcl9lcXVhbCgmZW50cnktPmFkZHIsIGFkZHIpICYmCisJICAgIGlwdjZfYWRkcl9lcXVhbCgmZW50cnktPm1hc2ssIG1hc2spKSB7CisJCW5ldGxibF9hZjZsaXN0X3JlbW92ZV9lbnRyeShlbnRyeSk7CisJCXJldHVybiBlbnRyeTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBJUHY2ICovCisKKy8qCisgKiBBdWRpdCBIZWxwZXIgRnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBuZXRsYmxfYWY0bGlzdF9hdWRpdF9hZGRyIC0gQXVkaXQgYW4gSVB2NCBhZGRyZXNzCisgKiBAYXVkaXRfYnVmOiBhdWRpdCBidWZmZXIKKyAqIEBzcmM6IHRydWUgaWYgc291cmNlIGFkZHJlc3MsIGZhbHNlIGlmIGRlc3RpbmF0aW9uCisgKiBAZGV2OiBuZXR3b3JrIGludGVyZmFjZQorICogQGFkZHI6IElQIGFkZHJlc3MKKyAqIEBtYXNrOiBJUCBhZGRyZXNzIG1hc2sKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFdyaXRlIHRoZSBJUHY0IGFkZHJlc3MgYW5kIGFkZHJlc3MgbWFzaywgaWYgbmVjZXNzYXJ5LCB0byBAYXVkaXRfYnVmLgorICoKKyAqLwordm9pZCBuZXRsYmxfYWY0bGlzdF9hdWRpdF9hZGRyKHN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZiwKKwkJCQkJaW50IHNyYywgY29uc3QgY2hhciAqZGV2LAorCQkJCQlfX2JlMzIgYWRkciwgX19iZTMyIG1hc2spCit7CisJdTMyIG1hc2tfdmFsID0gbnRvaGwobWFzayk7CisJY2hhciAqZGlyID0gKHNyYyA/ICJzcmMiIDogImRzdCIpOworCisJaWYgKGRldiAhPSBOVUxMKQorCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIiBuZXRpZj0lcyIsIGRldik7CisJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgJXM9IiBOSVBRVUFEX0ZNVCwgZGlyLCBOSVBRVUFEKGFkZHIpKTsKKwlpZiAobWFza192YWwgIT0gMHhmZmZmZmZmZikgeworCQl1MzIgbWFza19sZW4gPSAwOworCQl3aGlsZSAobWFza192YWwgPiAwKSB7CisJCQltYXNrX3ZhbCA8PD0gMTsKKwkJCW1hc2tfbGVuKys7CisJCX0KKwkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgJXNfcHJlZml4bGVuPSVkIiwgZGlyLCBtYXNrX2xlbik7CisJfQorfQorCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisvKioKKyAqIG5ldGxibF9hZjZsaXN0X2F1ZGl0X2FkZHIgLSBBdWRpdCBhbiBJUHY2IGFkZHJlc3MKKyAqIEBhdWRpdF9idWY6IGF1ZGl0IGJ1ZmZlcgorICogQHNyYzogdHJ1ZSBpZiBzb3VyY2UgYWRkcmVzcywgZmFsc2UgaWYgZGVzdGluYXRpb24KKyAqIEBkZXY6IG5ldHdvcmsgaW50ZXJmYWNlCisgKiBAYWRkcjogSVAgYWRkcmVzcworICogQG1hc2s6IElQIGFkZHJlc3MgbWFzaworICoKKyAqIERlc2NyaXB0aW9uOgorICogV3JpdGUgdGhlIElQdjYgYWRkcmVzcyBhbmQgYWRkcmVzcyBtYXNrLCBpZiBuZWNlc3NhcnksIHRvIEBhdWRpdF9idWYuCisgKgorICovCit2b2lkIG5ldGxibF9hZjZsaXN0X2F1ZGl0X2FkZHIoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYXVkaXRfYnVmLAorCQkJCSBpbnQgc3JjLAorCQkJCSBjb25zdCBjaGFyICpkZXYsCisJCQkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJCQkgY29uc3Qgc3RydWN0IGluNl9hZGRyICptYXNrKQoreworCWNoYXIgKmRpciA9IChzcmMgPyAic3JjIiA6ICJkc3QiKTsKKworCWlmIChkZXYgIT0gTlVMTCkKKwkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgbmV0aWY9JXMiLCBkZXYpOworCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiICVzPSIgTklQNl9GTVQsIGRpciwgTklQNigqYWRkcikpOworCWlmIChudG9obChtYXNrLT5zNl9hZGRyMzJbM10pICE9IDB4ZmZmZmZmZmYpIHsKKwkJdTMyIG1hc2tfbGVuID0gMDsKKwkJdTMyIG1hc2tfdmFsOworCQlpbnQgaXRlciA9IC0xOworCQl3aGlsZSAobnRvaGwobWFzay0+czZfYWRkcjMyWysraXRlcl0pID09IDB4ZmZmZmZmZmYpCisJCQltYXNrX2xlbiArPSAzMjsKKwkJbWFza192YWwgPSBudG9obChtYXNrLT5zNl9hZGRyMzJbaXRlcl0pOworCQl3aGlsZSAobWFza192YWwgPiAwKSB7CisJCQltYXNrX3ZhbCA8PD0gMTsKKwkJCW1hc2tfbGVuKys7CisJCX0KKwkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgJXNfcHJlZml4bGVuPSVkIiwgZGlyLCBtYXNrX2xlbik7CisJfQorfQorI2VuZGlmIC8qIElQdjYgKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5oIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2FkZHJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0MmJlYQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5oCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogTmV0TGFiZWwgTmV0d29yayBBZGRyZXNzIExpc3RzCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIG5ldHdvcmsgYWRkcmVzcyBsaXN0IGZ1bmN0aW9ucyB1c2VkIHRvIG1hbmFnZSBvcmRlcmVkCisgKiBsaXN0cyBvZiBuZXR3b3JrIGFkZHJlc3NlcyBmb3IgdXNlIGJ5IHRoZSBOZXRMYWJlbCBzdWJzeXN0ZW0uICBUaGUgTmV0TGFiZWwKKyAqIHN5c3RlbSBtYW5hZ2VzIHN0YXRpYyBhbmQgZHluYW1pYyBsYWJlbCBtYXBwaW5ncyBmb3IgbmV0d29yayBwcm90b2NvbHMgc3VjaAorICogYXMgQ0lQU08gYW5kIFJJUFNPLgorICoKKyAqIEF1dGhvcjogUGF1bCBNb29yZSA8cGF1bC5tb29yZUBocC5jb20+CisgKgorICovCisKKy8qCisgKiAoYykgQ29weXJpZ2h0IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuLCAyMDA4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfTkVUTEFCRUxfQUREUkxJU1RfSAorI2RlZmluZSBfTkVUTEFCRUxfQUREUkxJU1RfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorCisvKioKKyAqIHN0cnVjdCBuZXRsYmxfYWY0bGlzdCAtIE5ldExhYmVsIElQdjQgYWRkcmVzcyBsaXN0CisgKiBAYWRkcjogSVB2NCBhZGRyZXNzCisgKiBAbWFzazogSVB2NCBhZGRyZXNzIG1hc2sKKyAqIEB2YWxpZDogdmFsaWQgZmxhZworICogQGxpc3Q6IGxpc3Qgc3RydWN0dXJlLCB1c2VkIGludGVybmFsbHkKKyAqLworc3RydWN0IG5ldGxibF9hZjRsaXN0IHsKKwlfX2JlMzIgYWRkcjsKKwlfX2JlMzIgbWFzazsKKworCXUzMiB2YWxpZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisvKioKKyAqIHN0cnVjdCBuZXRsYmxfYWY2bGlzdCAtIE5ldExhYmVsIElQdjYgYWRkcmVzcyBsaXN0CisgKiBAYWRkcjogSVB2NiBhZGRyZXNzCisgKiBAbWFzazogSVB2NiBhZGRyZXNzIG1hc2sKKyAqIEB2YWxpZDogdmFsaWQgZmxhZworICogQGxpc3Q6IGxpc3Qgc3RydWN0dXJlLCB1c2VkIGludGVybmFsbHkKKyAqLworc3RydWN0IG5ldGxibF9hZjZsaXN0IHsKKwlzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIgbWFzazsKKworCXUzMiB2YWxpZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisjZGVmaW5lIF9fYWY0bGlzdF9lbnRyeShwdHIpIGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCBuZXRsYmxfYWY0bGlzdCwgbGlzdCkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKl9fYWY0bGlzdF92YWxpZChzdHJ1Y3QgbGlzdF9oZWFkICpzLAorCQkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmkgPSBzOworCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqbiA9IF9fYWY0bGlzdF9lbnRyeShzKTsKKwl3aGlsZSAoaSAhPSBoICYmICFuLT52YWxpZCkgeworCQlpID0gaS0+bmV4dDsKKwkJbiA9IF9fYWY0bGlzdF9lbnRyeShpKTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldGxibF9hZjRsaXN0ICpfX2FmNGxpc3RfdmFsaWRfcmN1KHN0cnVjdCBsaXN0X2hlYWQgKnMsCisJCQkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmgpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaSA9IHM7CisJc3RydWN0IG5ldGxibF9hZjRsaXN0ICpuID0gX19hZjRsaXN0X2VudHJ5KHMpOworCXdoaWxlIChpICE9IGggJiYgIW4tPnZhbGlkKSB7CisJCWkgPSByY3VfZGVyZWZlcmVuY2UoaS0+bmV4dCk7CisJCW4gPSBfX2FmNGxpc3RfZW50cnkoaSk7CisJfQorCXJldHVybiBuOworfQorCisjZGVmaW5lIG5ldGxibF9hZjRsaXN0X2ZvcmVhY2goaXRlciwgaGVhZCkJCQkJXAorCWZvciAoaXRlciA9IF9fYWY0bGlzdF92YWxpZCgoaGVhZCktPm5leHQsIGhlYWQpOwkJXAorCSAgICAgcHJlZmV0Y2goaXRlci0+bGlzdC5uZXh0KSwgJml0ZXItPmxpc3QgIT0gKGhlYWQpOwkJXAorCSAgICAgaXRlciA9IF9fYWY0bGlzdF92YWxpZChpdGVyLT5saXN0Lm5leHQsIGhlYWQpKQorCisjZGVmaW5lIG5ldGxibF9hZjRsaXN0X2ZvcmVhY2hfcmN1KGl0ZXIsIGhlYWQpCQkJCVwKKwlmb3IgKGl0ZXIgPSBfX2FmNGxpc3RfdmFsaWRfcmN1KChoZWFkKS0+bmV4dCwgaGVhZCk7CQlcCisJICAgICBwcmVmZXRjaChpdGVyLT5saXN0Lm5leHQpLAkmaXRlci0+bGlzdCAhPSAoaGVhZCk7CQlcCisJICAgICBpdGVyID0gX19hZjRsaXN0X3ZhbGlkX3JjdShpdGVyLT5saXN0Lm5leHQsIGhlYWQpKQorCisjZGVmaW5lIG5ldGxibF9hZjRsaXN0X2ZvcmVhY2hfc2FmZShpdGVyLCB0bXAsIGhlYWQpCQkJXAorCWZvciAoaXRlciA9IF9fYWY0bGlzdF92YWxpZCgoaGVhZCktPm5leHQsIGhlYWQpLAkJXAorCQkgICAgIHRtcCA9IF9fYWY0bGlzdF92YWxpZChpdGVyLT5saXN0Lm5leHQsIGhlYWQpOwlcCisJICAgICAmaXRlci0+bGlzdCAhPSAoaGVhZCk7CQkJCQlcCisJICAgICBpdGVyID0gdG1wLCB0bXAgPSBfX2FmNGxpc3RfdmFsaWQoaXRlci0+bGlzdC5uZXh0LCBoZWFkKSkKKworaW50IG5ldGxibF9hZjRsaXN0X2FkZChzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKmVudHJ5LAorCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKm5ldGxibF9hZjRsaXN0X3JlbW92ZShfX2JlMzIgYWRkciwgX19iZTMyIG1hc2ssCisJCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7Cit2b2lkIG5ldGxibF9hZjRsaXN0X3JlbW92ZV9lbnRyeShzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKmVudHJ5KTsKK3N0cnVjdCBuZXRsYmxfYWY0bGlzdCAqbmV0bGJsX2FmNGxpc3Rfc2VhcmNoKF9fYmUzMiBhZGRyLAorCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOworc3RydWN0IG5ldGxibF9hZjRsaXN0ICpuZXRsYmxfYWY0bGlzdF9zZWFyY2hfZXhhY3QoX19iZTMyIGFkZHIsCisJCQkJCQkgICBfX2JlMzIgbWFzaywKKwkJCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwordm9pZCBuZXRsYmxfYWY0bGlzdF9hdWRpdF9hZGRyKHN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZiwKKwkJCSAgICAgICBpbnQgc3JjLCBjb25zdCBjaGFyICpkZXYsCisJCQkgICAgICAgX19iZTMyIGFkZHIsIF9fYmUzMiBtYXNrKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCisjZGVmaW5lIF9fYWY2bGlzdF9lbnRyeShwdHIpIGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCBuZXRsYmxfYWY2bGlzdCwgbGlzdCkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKl9fYWY2bGlzdF92YWxpZChzdHJ1Y3QgbGlzdF9oZWFkICpzLAorCQkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmkgPSBzOworCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqbiA9IF9fYWY2bGlzdF9lbnRyeShzKTsKKwl3aGlsZSAoaSAhPSBoICYmICFuLT52YWxpZCkgeworCQlpID0gaS0+bmV4dDsKKwkJbiA9IF9fYWY2bGlzdF9lbnRyeShpKTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldGxibF9hZjZsaXN0ICpfX2FmNmxpc3RfdmFsaWRfcmN1KHN0cnVjdCBsaXN0X2hlYWQgKnMsCisJCQkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmgpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaSA9IHM7CisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICpuID0gX19hZjZsaXN0X2VudHJ5KHMpOworCXdoaWxlIChpICE9IGggJiYgIW4tPnZhbGlkKSB7CisJCWkgPSByY3VfZGVyZWZlcmVuY2UoaS0+bmV4dCk7CisJCW4gPSBfX2FmNmxpc3RfZW50cnkoaSk7CisJfQorCXJldHVybiBuOworfQorCisjZGVmaW5lIG5ldGxibF9hZjZsaXN0X2ZvcmVhY2goaXRlciwgaGVhZCkJCQkJXAorCWZvciAoaXRlciA9IF9fYWY2bGlzdF92YWxpZCgoaGVhZCktPm5leHQsIGhlYWQpOwkJXAorCSAgICAgcHJlZmV0Y2goaXRlci0+bGlzdC5uZXh0KSwJJml0ZXItPmxpc3QgIT0gKGhlYWQpOwkJXAorCSAgICAgaXRlciA9IF9fYWY2bGlzdF92YWxpZChpdGVyLT5saXN0Lm5leHQsIGhlYWQpKQorCisjZGVmaW5lIG5ldGxibF9hZjZsaXN0X2ZvcmVhY2hfcmN1KGl0ZXIsIGhlYWQpCQkJCVwKKwlmb3IgKGl0ZXIgPSBfX2FmNmxpc3RfdmFsaWRfcmN1KChoZWFkKS0+bmV4dCwgaGVhZCk7CQlcCisJICAgICBwcmVmZXRjaChpdGVyLT5saXN0Lm5leHQpLAkmaXRlci0+bGlzdCAhPSAoaGVhZCk7CQlcCisJICAgICBpdGVyID0gX19hZjZsaXN0X3ZhbGlkX3JjdShpdGVyLT5saXN0Lm5leHQsIGhlYWQpKQorCisjZGVmaW5lIG5ldGxibF9hZjZsaXN0X2ZvcmVhY2hfc2FmZShpdGVyLCB0bXAsIGhlYWQpCQkJXAorCWZvciAoaXRlciA9IF9fYWY2bGlzdF92YWxpZCgoaGVhZCktPm5leHQsIGhlYWQpLAkJXAorCQkgICAgIHRtcCA9IF9fYWY2bGlzdF92YWxpZChpdGVyLT5saXN0Lm5leHQsIGhlYWQpOwlcCisJICAgICAmaXRlci0+bGlzdCAhPSAoaGVhZCk7CQkJCQlcCisJICAgICBpdGVyID0gdG1wLCB0bXAgPSBfX2FmNmxpc3RfdmFsaWQoaXRlci0+bGlzdC5uZXh0LCBoZWFkKSkKKworaW50IG5ldGxibF9hZjZsaXN0X2FkZChzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKmVudHJ5LAorCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKm5ldGxibF9hZjZsaXN0X3JlbW92ZShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICptYXNrLAorCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwordm9pZCBuZXRsYmxfYWY2bGlzdF9yZW1vdmVfZW50cnkoc3RydWN0IG5ldGxibF9hZjZsaXN0ICplbnRyeSk7CitzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKm5ldGxibF9hZjZsaXN0X3NlYXJjaChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCisJCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CitzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKm5ldGxibF9hZjZsaXN0X3NlYXJjaF9leGFjdChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCisJCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKm1hc2ssCisJCQkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK3ZvaWQgbmV0bGJsX2FmNmxpc3RfYXVkaXRfYWRkcihzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWYsCisJCQkgICAgICAgaW50IHNyYywKKwkJCSAgICAgICBjb25zdCBjaGFyICpkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbWFzayk7CisjZW5kaWYgLyogSVBWNiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMKaW5kZXggMGFlYzMxOC4uZmZmMzJiNyAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJuZXRsYWJlbF91c2VyLmgiCiAjaW5jbHVkZSAibmV0bGFiZWxfY2lwc29fdjQuaCIKICNpbmNsdWRlICJuZXRsYWJlbF9tZ210LmgiCisjaW5jbHVkZSAibmV0bGFiZWxfZG9tYWluaGFzaC5oIgogCiAvKiBBcmd1bWVudCBzdHJ1Y3QgZm9yIGNpcHNvX3Y0X2RvaV93YWxrKCkgKi8KIHN0cnVjdCBuZXRsYmxfY2lwc292NF9kb2l3YWxrX2FyZyB7CkBAIC01MSw2ICs1MiwxMiBAQAogCXUzMiBzZXE7CiB9OwogCisvKiBBcmd1bWVudCBzdHJ1Y3QgZm9yIG5ldGxibF9kb21oc2hfd2FsaygpICovCitzdHJ1Y3QgbmV0bGJsX2RvbWhzaF93YWxrX2FyZyB7CisJc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbzsKKwl1MzIgZG9pOworfTsKKwogLyogTmV0TGFiZWwgR2VuZXJpYyBORVRMSU5LIENJUFNPdjQgZmFtaWx5ICovCiBzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5ldGxibF9jaXBzb3Y0X2dubF9mYW1pbHkgPSB7CiAJLmlkID0gR0VOTF9JRF9HRU5FUkFURSwKQEAgLTgxLDMyICs4OCw2IEBACiAgKi8KIAogLyoqCi0gKiBuZXRsYmxfY2lwc292NF9kb2lfZnJlZSAtIEZyZWVzIGEgQ0lQU08gVjQgRE9JIGRlZmluaXRpb24KLSAqIEBlbnRyeTogdGhlIGVudHJ5J3MgUkNVIGZpZWxkCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYXMgYSBjYWxsYmFjayB0byB0aGUgY2FsbF9yY3UoKQotICogZnVuY3Rpb24gc28gdGhhdCB0aGUgbWVtb3J5IGFsbG9jYXRlZCB0byB0aGUgRE9JIGRlZmluaXRpb24gY2FuIGJlIHJlbGVhc2VkCi0gKiBzYWZlbHkuCi0gKgotICovCi12b2lkIG5ldGxibF9jaXBzb3Y0X2RvaV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqZW50cnkpCi17Ci0Jc3RydWN0IGNpcHNvX3Y0X2RvaSAqcHRyOwotCi0JcHRyID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgY2lwc29fdjRfZG9pLCByY3UpOwotCXN3aXRjaCAocHRyLT50eXBlKSB7Ci0JY2FzZSBDSVBTT19WNF9NQVBfU1REOgotCQlrZnJlZShwdHItPm1hcC5zdGQtPmx2bC5jaXBzbyk7Ci0JCWtmcmVlKHB0ci0+bWFwLnN0ZC0+bHZsLmxvY2FsKTsKLQkJa2ZyZWUocHRyLT5tYXAuc3RkLT5jYXQuY2lwc28pOwotCQlrZnJlZShwdHItPm1hcC5zdGQtPmNhdC5sb2NhbCk7Ci0JCWJyZWFrOwotCX0KLQlrZnJlZShwdHIpOwotfQotCi0vKioKICAqIG5ldGxibF9jaXBzb3Y0X2FkZF9jb21tb24gLSBQYXJzZSB0aGUgY29tbW9uIHNlY3Rpb25zIG9mIGEgQUREIG1lc3NhZ2UKICAqIEBpbmZvOiB0aGUgR2VuZXJpYyBORVRMSU5LIGluZm8gYmxvY2sKICAqIEBkb2lfZGVmOiB0aGUgQ0lQU08gVjQgRE9JIGRlZmluaXRpb24KQEAgLTE1MSw5ICsxMzIsOSBAQAogICogQGluZm86IHRoZSBHZW5lcmljIE5FVExJTksgaW5mbyBibG9jawogICoKICAqIERlc2NyaXB0aW9uOgotICogQ3JlYXRlIGEgbmV3IENJUFNPX1Y0X01BUF9TVEQgRE9JIGRlZmluaXRpb24gYmFzZWQgb24gdGhlIGdpdmVuIEFERCBtZXNzYWdlCi0gKiBhbmQgYWRkIGl0IHRvIHRoZSBDSVBTTyBWNCBlbmdpbmUuICBSZXR1cm4gemVybyBvbiBzdWNjZXNzIGFuZCBub24temVybyBvbgotICogZXJyb3IuCisgKiBDcmVhdGUgYSBuZXcgQ0lQU09fVjRfTUFQX1RSQU5TIERPSSBkZWZpbml0aW9uIGJhc2VkIG9uIHRoZSBnaXZlbiBBREQKKyAqIG1lc3NhZ2UgYW5kIGFkZCBpdCB0byB0aGUgQ0lQU08gVjQgZW5naW5lLiAgUmV0dXJuIHplcm8gb24gc3VjY2VzcyBhbmQKKyAqIG5vbi16ZXJvIG9uIGVycm9yLgogICoKICAqLwogc3RhdGljIGludCBuZXRsYmxfY2lwc292NF9hZGRfc3RkKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCkBAIC0xODMsNyArMTY0LDcgQEAKIAkJcmV0X3ZhbCA9IC1FTk9NRU07CiAJCWdvdG8gYWRkX3N0ZF9mYWlsdXJlOwogCX0KLQlkb2lfZGVmLT50eXBlID0gQ0lQU09fVjRfTUFQX1NURDsKKwlkb2lfZGVmLT50eXBlID0gQ0lQU09fVjRfTUFQX1RSQU5TOwogCiAJcmV0X3ZhbCA9IG5ldGxibF9jaXBzb3Y0X2FkZF9jb21tb24oaW5mbywgZG9pX2RlZik7CiAJaWYgKHJldF92YWwgIT0gMCkKQEAgLTM0Miw3ICszMjMsNyBAQAogCiBhZGRfc3RkX2ZhaWx1cmU6CiAJaWYgKGRvaV9kZWYpCi0JCW5ldGxibF9jaXBzb3Y0X2RvaV9mcmVlKCZkb2lfZGVmLT5yY3UpOworCQljaXBzb192NF9kb2lfZnJlZShkb2lfZGVmKTsKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApAQCAtMzc5LDcgKzM2MCw0NCBAQAogCXJldHVybiAwOwogCiBhZGRfcGFzc19mYWlsdXJlOgotCW5ldGxibF9jaXBzb3Y0X2RvaV9mcmVlKCZkb2lfZGVmLT5yY3UpOworCWNpcHNvX3Y0X2RvaV9mcmVlKGRvaV9kZWYpOworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqIG5ldGxibF9jaXBzb3Y0X2FkZF9sb2NhbCAtIEFkZHMgYSBDSVBTTyBWNCBET0kgZGVmaW5pdGlvbgorICogQGluZm86IHRoZSBHZW5lcmljIE5FVExJTksgaW5mbyBibG9jaworICoKKyAqIERlc2NyaXB0aW9uOgorICogQ3JlYXRlIGEgbmV3IENJUFNPX1Y0X01BUF9MT0NBTCBET0kgZGVmaW5pdGlvbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gQURECisgKiBtZXNzYWdlIGFuZCBhZGQgaXQgdG8gdGhlIENJUFNPIFY0IGVuZ2luZS4gIFJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MgYW5kCisgKiBub24temVybyBvbiBlcnJvci4KKyAqCisgKi8KK3N0YXRpYyBpbnQgbmV0bGJsX2NpcHNvdjRfYWRkX2xvY2FsKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJaW50IHJldF92YWw7CisJc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiA9IE5VTEw7CisKKwlpZiAoIWluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX1RBR0xTVF0pCisJCXJldHVybiAtRUlOVkFMOworCisJZG9pX2RlZiA9IGttYWxsb2Moc2l6ZW9mKCpkb2lfZGVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRvaV9kZWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZG9pX2RlZi0+dHlwZSA9IENJUFNPX1Y0X01BUF9MT0NBTDsKKworCXJldF92YWwgPSBuZXRsYmxfY2lwc292NF9hZGRfY29tbW9uKGluZm8sIGRvaV9kZWYpOworCWlmIChyZXRfdmFsICE9IDApCisJCWdvdG8gYWRkX2xvY2FsX2ZhaWx1cmU7CisKKwlyZXRfdmFsID0gY2lwc29fdjRfZG9pX2FkZChkb2lfZGVmKTsKKwlpZiAocmV0X3ZhbCAhPSAwKQorCQlnb3RvIGFkZF9sb2NhbF9mYWlsdXJlOworCXJldHVybiAwOworCithZGRfbG9jYWxfZmFpbHVyZToKKwljaXBzb192NF9kb2lfZnJlZShkb2lfZGVmKTsKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApAQCAtNDEyLDE0ICs0MzAsMTggQEAKIAogCXR5cGUgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTEJMX0NJUFNPVjRfQV9NVFlQRV0pOwogCXN3aXRjaCAodHlwZSkgewotCWNhc2UgQ0lQU09fVjRfTUFQX1NURDoKLQkJdHlwZV9zdHIgPSAic3RkIjsKKwljYXNlIENJUFNPX1Y0X01BUF9UUkFOUzoKKwkJdHlwZV9zdHIgPSAidHJhbnMiOwogCQlyZXRfdmFsID0gbmV0bGJsX2NpcHNvdjRfYWRkX3N0ZChpbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBDSVBTT19WNF9NQVBfUEFTUzoKIAkJdHlwZV9zdHIgPSAicGFzcyI7CiAJCXJldF92YWwgPSBuZXRsYmxfY2lwc292NF9hZGRfcGFzcyhpbmZvKTsKIAkJYnJlYWs7CisJY2FzZSBDSVBTT19WNF9NQVBfTE9DQUw6CisJCXR5cGVfc3RyID0gImxvY2FsIjsKKwkJcmV0X3ZhbCA9IG5ldGxibF9jaXBzb3Y0X2FkZF9sb2NhbChpbmZvKTsKKwkJYnJlYWs7CiAJfQogCWlmIChyZXRfdmFsID09IDApCiAJCWF0b21pY19pbmMoJm5ldGxhYmVsX21nbXRfcHJvdG9jb3VudCk7CkBAIC00OTEsNyArNTEzLDcgQEAKIAlkb2lfZGVmID0gY2lwc29fdjRfZG9pX2dldGRlZihkb2kpOwogCWlmIChkb2lfZGVmID09IE5VTEwpIHsKIAkJcmV0X3ZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gbGlzdF9mYWlsdXJlOworCQlnb3RvIGxpc3RfZmFpbHVyZV9sb2NrOwogCX0KIAogCXJldF92YWwgPSBubGFfcHV0X3UzMihhbnNfc2tiLCBOTEJMX0NJUFNPVjRfQV9NVFlQRSwgZG9pX2RlZi0+dHlwZSk7CkBAIC01MTYsNyArNTM4LDcgQEAKIAlubGFfbmVzdF9lbmQoYW5zX3NrYiwgbmxhX2EpOwogCiAJc3dpdGNoIChkb2lfZGVmLT50eXBlKSB7Ci0JY2FzZSBDSVBTT19WNF9NQVBfU1REOgorCWNhc2UgQ0lQU09fVjRfTUFQX1RSQU5TOgogCQlubGFfYSA9IG5sYV9uZXN0X3N0YXJ0KGFuc19za2IsIE5MQkxfQ0lQU09WNF9BX01MU0xWTExTVCk7CiAJCWlmIChubGFfYSA9PSBOVUxMKSB7CiAJCQlyZXRfdmFsID0gLUVOT01FTTsKQEAgLTY1NSw3ICs2NzcsNyBAQAogCQkJCSAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewogCXN0cnVjdCBuZXRsYmxfY2lwc292NF9kb2l3YWxrX2FyZyBjYl9hcmc7Ci0JaW50IGRvaV9za2lwID0gY2ItPmFyZ3NbMF07CisJdTMyIGRvaV9za2lwID0gY2ItPmFyZ3NbMF07CiAKIAljYl9hcmcubmxfY2IgPSBjYjsKIAljYl9hcmcuc2tiID0gc2tiOwpAQCAtNjY4LDYgKzY5MCwyOSBAQAogfQogCiAvKioKKyAqIG5ldGxibF9jaXBzb3Y0X3JlbW92ZV9jYiAtIG5ldGxibF9jaXBzb3Y0X3JlbW92ZSgpIGNhbGxiYWNrIGZvciBSRU1PVkUKKyAqIEBlbnRyeTogTFNNIGRvbWFpbiBtYXBwaW5nIGVudHJ5CisgKiBAYXJnOiB0aGUgbmV0bGJsX2RvbWhzaF93YWxrX2FyZyBzdHJ1Y3R1cmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBuZXRsYmxfY2lwc292NF9yZW1vdmUoKSBhcyB0aGUgY2FsbGJhY2sKKyAqIGZvciB0aGUgbmV0bGJsX2RvbWhzaF93YWxrKCkgZnVuY3Rpb247IGl0IHJlbW92ZXMgTFNNIGRvbWFpbiBtYXAgZW50cmllcworICogd2hpY2ggYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ0lQU08gRE9JIHNwZWNpZmllZCBpbiBAYXJnLiAgUmV0dXJucyB6ZXJvIG9uCisgKiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgbmV0bGJsX2NpcHNvdjRfcmVtb3ZlX2NiKHN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnksIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbmV0bGJsX2RvbWhzaF93YWxrX2FyZyAqY2JfYXJnID0gYXJnOworCisJaWYgKGVudHJ5LT50eXBlID09IE5FVExCTF9OTFRZUEVfQ0lQU09WNCAmJgorCSAgICBlbnRyeS0+dHlwZV9kZWYuY2lwc292NC0+ZG9pID09IGNiX2FyZy0+ZG9pKQorCQlyZXR1cm4gbmV0bGJsX2RvbWhzaF9yZW1vdmVfZW50cnkoZW50cnksIGNiX2FyZy0+YXVkaXRfaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBuZXRsYmxfY2lwc292NF9yZW1vdmUgLSBIYW5kbGUgYSBSRU1PVkUgbWVzc2FnZQogICogQHNrYjogdGhlIE5FVExJTksgYnVmZmVyCiAgKiBAaW5mbzogdGhlIEdlbmVyaWMgTkVUTElOSyBpbmZvIGJsb2NrCkBAIC02ODEsOCArNzI2LDExIEBACiB7CiAJaW50IHJldF92YWwgPSAtRUlOVkFMOwogCXUzMiBkb2kgPSAwOworCXN0cnVjdCBuZXRsYmxfZG9taHNoX3dhbGtfYXJnIGNiX2FyZzsKIAlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWY7CiAJc3RydWN0IG5ldGxibF9hdWRpdCBhdWRpdF9pbmZvOworCXUzMiBza2lwX2JrdCA9IDA7CisJdTMyIHNraXBfY2hhaW4gPSAwOwogCiAJaWYgKCFpbmZvLT5hdHRyc1tOTEJMX0NJUFNPVjRfQV9ET0ldKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY5MCwxMSArNzM4LDE1IEBACiAJZG9pID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkxCTF9DSVBTT1Y0X0FfRE9JXSk7CiAJbmV0bGJsX25ldGxpbmtfYXVkaXRpbmZvKHNrYiwgJmF1ZGl0X2luZm8pOwogCi0JcmV0X3ZhbCA9IGNpcHNvX3Y0X2RvaV9yZW1vdmUoZG9pLAotCQkJCSAgICAgICZhdWRpdF9pbmZvLAotCQkJCSAgICAgIG5ldGxibF9jaXBzb3Y0X2RvaV9mcmVlKTsKLQlpZiAocmV0X3ZhbCA9PSAwKQotCQlhdG9taWNfZGVjKCZuZXRsYWJlbF9tZ210X3Byb3RvY291bnQpOworCWNiX2FyZy5kb2kgPSBkb2k7CisJY2JfYXJnLmF1ZGl0X2luZm8gPSAmYXVkaXRfaW5mbzsKKwlyZXRfdmFsID0gbmV0bGJsX2RvbWhzaF93YWxrKCZza2lwX2JrdCwgJnNraXBfY2hhaW4sCisJCQkJICAgICBuZXRsYmxfY2lwc292NF9yZW1vdmVfY2IsICZjYl9hcmcpOworCWlmIChyZXRfdmFsID09IDAgfHwgcmV0X3ZhbCA9PSAtRU5PRU5UKSB7CisJCXJldF92YWwgPSBjaXBzb192NF9kb2lfcmVtb3ZlKGRvaSwgJmF1ZGl0X2luZm8pOworCQlpZiAocmV0X3ZhbCA9PSAwKQorCQkJYXRvbWljX2RlYygmbmV0bGFiZWxfbWdtdF9wcm90b2NvdW50KTsKKwl9CiAKIAlhdWRpdF9idWYgPSBuZXRsYmxfYXVkaXRfc3RhcnRfY29tbW9uKEFVRElUX01BQ19DSVBTT1Y0X0RFTCwKIAkJCQkJICAgICAgJmF1ZGl0X2luZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmggYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuaAppbmRleCAyMjBjYjlkLi5jOGE0MDc5IDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuaAorKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuaApAQCAtNDUsMTIgKzQ1LDEzIEBACiAgKiAgICAgTkxCTF9DSVBTT1Y0X0FfTVRZUEUKICAqICAgICBOTEJMX0NJUFNPVjRfQV9UQUdMU1QKICAqCi0gKiAgIElmIHVzaW5nIENJUFNPX1Y0X01BUF9TVEQgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZDoKKyAqICAgSWYgdXNpbmcgQ0lQU09fVjRfTUFQX1RSQU5TIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgcmVxdWlyZWQ6CiAgKgogICogICAgIE5MQkxfQ0lQU09WNF9BX01MU0xWTExTVAogICogICAgIE5MQkxfQ0lQU09WNF9BX01MU0NBVExTVAogICoKLSAqICAgSWYgdXNpbmcgQ0lQU09fVjRfTUFQX1BBU1Mgbm8gYWRkaXRpb25hbCBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZC4KKyAqICAgSWYgdXNpbmcgQ0lQU09fVjRfTUFQX1BBU1Mgb3IgQ0lQU09fVjRfTUFQX0xPQ0FMIG5vIGFkZGl0aW9uYWwgYXR0cmlidXRlcworICogICBhcmUgcmVxdWlyZWQuCiAgKgogICogbyBSRU1PVkU6CiAgKiAgIFNlbnQgYnkgYW4gYXBwbGljYXRpb24gdG8gcmVtb3ZlIGEgc3BlY2lmaWMgRE9JIG1hcHBpbmcgdGFibGUgZnJvbSB0aGUKQEAgLTc2LDEyICs3NywxMyBAQAogICogICAgIE5MQkxfQ0lQU09WNF9BX01UWVBFCiAgKiAgICAgTkxCTF9DSVBTT1Y0X0FfVEFHTFNUCiAgKgotICogICBJZiB1c2luZyBDSVBTT19WNF9NQVBfU1REIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgcmVxdWlyZWQ6CisgKiAgIElmIHVzaW5nIENJUFNPX1Y0X01BUF9UUkFOUyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIHJlcXVpcmVkOgogICoKICAqICAgICBOTEJMX0NJUFNPVjRfQV9NTFNMVkxMU1QKICAqICAgICBOTEJMX0NJUFNPVjRfQV9NTFNDQVRMU1QKICAqCi0gKiAgIElmIHVzaW5nIENJUFNPX1Y0X01BUF9QQVNTIG5vIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBhcmUgcmVxdWlyZWQuCisgKiAgIElmIHVzaW5nIENJUFNPX1Y0X01BUF9QQVNTIG9yIENJUFNPX1Y0X01BUF9MT0NBTCBubyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMKKyAqICAgYXJlIHJlcXVpcmVkLgogICoKICAqIG8gTElTVEFMTDoKICAqICAgVGhpcyBtZXNzYWdlIGlzIHNlbnQgYnkgYW4gYXBwbGljYXRpb24gdG8gbGlzdCB0aGUgdmFsaWQgRE9JcyBvbiB0aGUKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5jCmluZGV4IDY0M2MwMzIuLjVmYWRmMTAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYwpAQCAtMTEsNyArMTEsNyBAQAogICovCiAKIC8qCi0gKiAoYykgQ29weXJpZ2h0IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuLCAyMDA2CisgKiAoYykgQ29weXJpZ2h0IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuLCAyMDA2LCAyMDA4CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGFzbS9idWcuaD4KIAogI2luY2x1ZGUgIm5ldGxhYmVsX21nbXQuaCIKKyNpbmNsdWRlICJuZXRsYWJlbF9hZGRybGlzdC5oIgogI2luY2x1ZGUgIm5ldGxhYmVsX2RvbWFpbmhhc2guaCIKICNpbmNsdWRlICJuZXRsYWJlbF91c2VyLmgiCiAKQEAgLTcyLDggKzczLDI4IEBACiBzdGF0aWMgdm9pZCBuZXRsYmxfZG9taHNoX2ZyZWVfZW50cnkoc3RydWN0IHJjdV9oZWFkICplbnRyeSkKIHsKIAlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKnB0cjsKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKml0ZXI0OworCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqdG1wNDsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwlzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKml0ZXI2OworCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqdG1wNjsKKyNlbmRpZiAvKiBJUHY2ICovCiAKIAlwdHIgPSBjb250YWluZXJfb2YoZW50cnksIHN0cnVjdCBuZXRsYmxfZG9tX21hcCwgcmN1KTsKKwlpZiAocHRyLT50eXBlID09IE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVCkgeworCQluZXRsYmxfYWY0bGlzdF9mb3JlYWNoX3NhZmUoaXRlcjQsIHRtcDQsCisJCQkJCSAgICAmcHRyLT50eXBlX2RlZi5hZGRyc2VsLT5saXN0NCkgeworCQkJbmV0bGJsX2FmNGxpc3RfcmVtb3ZlX2VudHJ5KGl0ZXI0KTsKKwkJCWtmcmVlKG5ldGxibF9kb21oc2hfYWRkcjRfZW50cnkoaXRlcjQpKTsKKwkJfQorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCQluZXRsYmxfYWY2bGlzdF9mb3JlYWNoX3NhZmUoaXRlcjYsIHRtcDYsCisJCQkJCSAgICAmcHRyLT50eXBlX2RlZi5hZGRyc2VsLT5saXN0NikgeworCQkJbmV0bGJsX2FmNmxpc3RfcmVtb3ZlX2VudHJ5KGl0ZXI2KTsKKwkJCWtmcmVlKG5ldGxibF9kb21oc2hfYWRkcjZfZW50cnkoaXRlcjYpKTsKKwkJfQorI2VuZGlmIC8qIElQdjYgKi8KKwl9CiAJa2ZyZWUocHRyLT5kb21haW4pOwogCWtmcmVlKHB0cik7CiB9CkBAIC0xMTUsMTMgKzEzNiwxMyBAQAogc3RhdGljIHN0cnVjdCBuZXRsYmxfZG9tX21hcCAqbmV0bGJsX2RvbWhzaF9zZWFyY2goY29uc3QgY2hhciAqZG9tYWluKQogewogCXUzMiBia3Q7CisJc3RydWN0IGxpc3RfaGVhZCAqYmt0X2xpc3Q7CiAJc3RydWN0IG5ldGxibF9kb21fbWFwICppdGVyOwogCiAJaWYgKGRvbWFpbiAhPSBOVUxMKSB7CiAJCWJrdCA9IG5ldGxibF9kb21oc2hfaGFzaChkb21haW4pOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpdGVyLAotCQkJCSAgICAgJnJjdV9kZXJlZmVyZW5jZShuZXRsYmxfZG9taHNoKS0+dGJsW2JrdF0sCi0JCQkJICAgICBsaXN0KQorCQlia3RfbGlzdCA9ICZyY3VfZGVyZWZlcmVuY2UobmV0bGJsX2RvbWhzaCktPnRibFtia3RdOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpdGVyLCBia3RfbGlzdCwgbGlzdCkKIAkJCWlmIChpdGVyLT52YWxpZCAmJiBzdHJjbXAoaXRlci0+ZG9tYWluLCBkb21haW4pID09IDApCiAJCQkJcmV0dXJuIGl0ZXI7CiAJfQpAQCAtMTU2LDYgKzE3Nyw2OSBAQAogCXJldHVybiBlbnRyeTsKIH0KIAorLyoqCisgKiBuZXRsYmxfZG9taHNoX2F1ZGl0X2FkZCAtIEdlbmVyYXRlIGFuIGF1ZGl0IGVudHJ5IGZvciBhbiBhZGQgZXZlbnQKKyAqIEBlbnRyeTogdGhlIGVudHJ5IGJlaW5nIGFkZGVkCisgKiBAYWRkcjQ6IHRoZSBJUHY0IGFkZHJlc3MgaW5mb3JtYXRpb24KKyAqIEBhZGRyNjogdGhlIElQdjYgYWRkcmVzcyBpbmZvcm1hdGlvbgorICogQHJlc3VsdDogdGhlIHJlc3VsdCBjb2RlCisgKiBAYXVkaXRfaW5mbzogTmV0TGFiZWwgYXVkaXQgaW5mb3JtYXRpb24KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEdlbmVyYXRlIGFuIGF1ZGl0IHJlY29yZCBmb3IgYWRkaW5nIGEgbmV3IE5ldExhYmVsL0xTTSBtYXBwaW5nIGVudHJ5IHdpdGgKKyAqIHRoZSBnaXZlbiBpbmZvcm1hdGlvbi4gIENhbGxlciBpcyByZXNwb25zaWJpbGUgZm9yIGhvbGRpbmcgdGhlIG5lY2Vzc2FyeQorICogbG9ja3MuCisgKgorICovCitzdGF0aWMgdm9pZCBuZXRsYmxfZG9taHNoX2F1ZGl0X2FkZChzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5LAorCQkJCSAgICBzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKmFkZHI0LAorCQkJCSAgICBzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKmFkZHI2LAorCQkJCSAgICBpbnQgcmVzdWx0LAorCQkJCSAgICBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKQoreworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZjsKKwlzdHJ1Y3QgY2lwc29fdjRfZG9pICpjaXBzb3Y0ID0gTlVMTDsKKwl1MzIgdHlwZTsKKworCWF1ZGl0X2J1ZiA9IG5ldGxibF9hdWRpdF9zdGFydF9jb21tb24oQVVESVRfTUFDX01BUF9BREQsIGF1ZGl0X2luZm8pOworCWlmIChhdWRpdF9idWYgIT0gTlVMTCkgeworCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIiBubGJsX2RvbWFpbj0lcyIsCisJCQkJIGVudHJ5LT5kb21haW4gPyBlbnRyeS0+ZG9tYWluIDogIihkZWZhdWx0KSIpOworCQlpZiAoYWRkcjQgIT0gTlVMTCkgeworCQkJc3RydWN0IG5ldGxibF9kb21hZGRyNF9tYXAgKm1hcDQ7CisJCQltYXA0ID0gbmV0bGJsX2RvbWhzaF9hZGRyNF9lbnRyeShhZGRyNCk7CisJCQl0eXBlID0gbWFwNC0+dHlwZTsKKwkJCWNpcHNvdjQgPSBtYXA0LT50eXBlX2RlZi5jaXBzb3Y0OworCQkJbmV0bGJsX2FmNGxpc3RfYXVkaXRfYWRkcihhdWRpdF9idWYsIDAsIE5VTEwsCisJCQkJCQkgIGFkZHI0LT5hZGRyLCBhZGRyNC0+bWFzayk7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJCX0gZWxzZSBpZiAoYWRkcjYgIT0gTlVMTCkgeworCQkJc3RydWN0IG5ldGxibF9kb21hZGRyNl9tYXAgKm1hcDY7CisJCQltYXA2ID0gbmV0bGJsX2RvbWhzaF9hZGRyNl9lbnRyeShhZGRyNik7CisJCQl0eXBlID0gbWFwNi0+dHlwZTsKKwkJCW5ldGxibF9hZjZsaXN0X2F1ZGl0X2FkZHIoYXVkaXRfYnVmLCAwLCBOVUxMLAorCQkJCQkJICAmYWRkcjYtPmFkZHIsICZhZGRyNi0+bWFzayk7CisjZW5kaWYgLyogSVB2NiAqLworCQl9IGVsc2UgeworCQkJdHlwZSA9IGVudHJ5LT50eXBlOworCQkJY2lwc292NCA9IGVudHJ5LT50eXBlX2RlZi5jaXBzb3Y0OworCQl9CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgbmxibF9wcm90b2NvbD11bmxibCIpOworCQkJYnJlYWs7CisJCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgorCQkJQlVHX09OKGNpcHNvdjQgPT0gTlVMTCk7CisJCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwKKwkJCQkJICIgbmxibF9wcm90b2NvbD1jaXBzb3Y0IGNpcHNvX2RvaT0ldSIsCisJCQkJCSBjaXBzb3Y0LT5kb2kpOworCQkJYnJlYWs7CisJCX0KKwkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgcmVzPSV1IiwgcmVzdWx0ID09IDAgPyAxIDogMCk7CisJCWF1ZGl0X2xvZ19lbmQoYXVkaXRfYnVmKTsKKwl9Cit9CisKIC8qCiAgKiBEb21haW4gSGFzaCBUYWJsZSBGdW5jdGlvbnMKICAqLwpAQCAtMjEzLDc0ICsyOTcsMTA2IEBACiBpbnQgbmV0bGJsX2RvbWhzaF9hZGQoc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeSwKIAkJICAgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKIHsKLQlpbnQgcmV0X3ZhbDsKLQl1MzIgYmt0OwotCXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZjsKLQotCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEOgotCQlyZXRfdmFsID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6Ci0JCXJldF92YWwgPSBjaXBzb192NF9kb2lfZG9taHNoX2FkZChlbnRyeS0+dHlwZV9kZWYuY2lwc292NCwKLQkJCQkJCSAgZW50cnktPmRvbWFpbik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAocmV0X3ZhbCAhPSAwKQotCQlyZXR1cm4gcmV0X3ZhbDsKLQotCWVudHJ5LT52YWxpZCA9IDE7Ci0JSU5JVF9SQ1VfSEVBRCgmZW50cnktPnJjdSk7CisJaW50IHJldF92YWwgPSAwOworCXN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnlfb2xkOworCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqaXRlcjQ7CisJc3RydWN0IG5ldGxibF9hZjRsaXN0ICp0bXA0OworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqaXRlcjY7CisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICp0bXA2OworI2VuZGlmIC8qIElQdjYgKi8KIAogCXJjdV9yZWFkX2xvY2soKTsKKwogCXNwaW5fbG9jaygmbmV0bGJsX2RvbWhzaF9sb2NrKTsKLQlpZiAoZW50cnktPmRvbWFpbiAhPSBOVUxMKSB7Ci0JCWJrdCA9IG5ldGxibF9kb21oc2hfaGFzaChlbnRyeS0+ZG9tYWluKTsKLQkJaWYgKG5ldGxibF9kb21oc2hfc2VhcmNoKGVudHJ5LT5kb21haW4pID09IE5VTEwpCisJaWYgKGVudHJ5LT5kb21haW4gIT0gTlVMTCkKKwkJZW50cnlfb2xkID0gbmV0bGJsX2RvbWhzaF9zZWFyY2goZW50cnktPmRvbWFpbik7CisJZWxzZQorCQllbnRyeV9vbGQgPSBuZXRsYmxfZG9taHNoX3NlYXJjaF9kZWYoZW50cnktPmRvbWFpbik7CisJaWYgKGVudHJ5X29sZCA9PSBOVUxMKSB7CisJCWVudHJ5LT52YWxpZCA9IDE7CisJCUlOSVRfUkNVX0hFQUQoJmVudHJ5LT5yY3UpOworCisJCWlmIChlbnRyeS0+ZG9tYWluICE9IE5VTEwpIHsKKwkJCXUzMiBia3QgPSBuZXRsYmxfZG9taHNoX2hhc2goZW50cnktPmRvbWFpbik7CiAJCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsCiAJCQkJICAgICZyY3VfZGVyZWZlcmVuY2UobmV0bGJsX2RvbWhzaCktPnRibFtia3RdKTsKLQkJZWxzZQotCQkJcmV0X3ZhbCA9IC1FRVhJU1Q7Ci0JfSBlbHNlIHsKLQkJSU5JVF9MSVNUX0hFQUQoJmVudHJ5LT5saXN0KTsKLQkJaWYgKHJjdV9kZXJlZmVyZW5jZShuZXRsYmxfZG9taHNoX2RlZikgPT0gTlVMTCkKKwkJfSBlbHNlIHsKKwkJCUlOSVRfTElTVF9IRUFEKCZlbnRyeS0+bGlzdCk7CiAJCQlyY3VfYXNzaWduX3BvaW50ZXIobmV0bGJsX2RvbWhzaF9kZWYsIGVudHJ5KTsKLQkJZWxzZQotCQkJcmV0X3ZhbCA9IC1FRVhJU1Q7Ci0JfQorCQl9CisKKwkJaWYgKGVudHJ5LT50eXBlID09IE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVCkgeworCQkJbmV0bGJsX2FmNGxpc3RfZm9yZWFjaF9yY3UoaXRlcjQsCisJCQkJCSAgICAgICAmZW50cnktPnR5cGVfZGVmLmFkZHJzZWwtPmxpc3Q0KQorCQkJCW5ldGxibF9kb21oc2hfYXVkaXRfYWRkKGVudHJ5LCBpdGVyNCwgTlVMTCwKKwkJCQkJCQlyZXRfdmFsLCBhdWRpdF9pbmZvKTsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwkJCW5ldGxibF9hZjZsaXN0X2ZvcmVhY2hfcmN1KGl0ZXI2LAorCQkJCQkgICAgICAgJmVudHJ5LT50eXBlX2RlZi5hZGRyc2VsLT5saXN0NikKKwkJCQluZXRsYmxfZG9taHNoX2F1ZGl0X2FkZChlbnRyeSwgTlVMTCwgaXRlcjYsCisJCQkJCQkJcmV0X3ZhbCwgYXVkaXRfaW5mbyk7CisjZW5kaWYgLyogSVB2NiAqLworCQl9IGVsc2UKKwkJCW5ldGxibF9kb21oc2hfYXVkaXRfYWRkKGVudHJ5LCBOVUxMLCBOVUxMLAorCQkJCQkJcmV0X3ZhbCwgYXVkaXRfaW5mbyk7CisJfSBlbHNlIGlmIChlbnRyeV9vbGQtPnR5cGUgPT0gTkVUTEJMX05MVFlQRV9BRERSU0VMRUNUICYmCisJCSAgIGVudHJ5LT50eXBlID09IE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVCkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpvbGRfbGlzdDQ7CisJCXN0cnVjdCBsaXN0X2hlYWQgKm9sZF9saXN0NjsKKworCQlvbGRfbGlzdDQgPSAmZW50cnlfb2xkLT50eXBlX2RlZi5hZGRyc2VsLT5saXN0NDsKKwkJb2xkX2xpc3Q2ID0gJmVudHJ5X29sZC0+dHlwZV9kZWYuYWRkcnNlbC0+bGlzdDY7CisKKwkJLyogd2Ugb25seSBhbGxvdyB0aGUgYWRkaXRpb24gb2YgYWRkcmVzcyBzZWxlY3RvcnMgaWYgYWxsIG9mCisJCSAqIHRoZSBzZWxlY3RvcnMgZG8gbm90IGV4aXN0IGluIHRoZSBleGlzdGluZyBkb21haW4gbWFwICovCisJCW5ldGxibF9hZjRsaXN0X2ZvcmVhY2hfcmN1KGl0ZXI0LAorCQkJCQkgICAmZW50cnktPnR5cGVfZGVmLmFkZHJzZWwtPmxpc3Q0KQorCQkJaWYgKG5ldGxibF9hZjRsaXN0X3NlYXJjaF9leGFjdChpdGVyNC0+YWRkciwKKwkJCQkJCQlpdGVyNC0+bWFzaywKKwkJCQkJCQlvbGRfbGlzdDQpKSB7CisJCQkJcmV0X3ZhbCA9IC1FRVhJU1Q7CisJCQkJZ290byBhZGRfcmV0dXJuOworCQkJfQorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCQluZXRsYmxfYWY2bGlzdF9mb3JlYWNoX3JjdShpdGVyNiwKKwkJCQkJICAgJmVudHJ5LT50eXBlX2RlZi5hZGRyc2VsLT5saXN0NikKKwkJCWlmIChuZXRsYmxfYWY2bGlzdF9zZWFyY2hfZXhhY3QoJml0ZXI2LT5hZGRyLAorCQkJCQkJCSZpdGVyNi0+bWFzaywKKwkJCQkJCQlvbGRfbGlzdDYpKSB7CisJCQkJcmV0X3ZhbCA9IC1FRVhJU1Q7CisJCQkJZ290byBhZGRfcmV0dXJuOworCQkJfQorI2VuZGlmIC8qIElQdjYgKi8KKworCQluZXRsYmxfYWY0bGlzdF9mb3JlYWNoX3NhZmUoaXRlcjQsIHRtcDQsCisJCQkJCSAgICAmZW50cnktPnR5cGVfZGVmLmFkZHJzZWwtPmxpc3Q0KSB7CisJCQluZXRsYmxfYWY0bGlzdF9yZW1vdmVfZW50cnkoaXRlcjQpOworCQkJaXRlcjQtPnZhbGlkID0gMTsKKwkJCXJldF92YWwgPSBuZXRsYmxfYWY0bGlzdF9hZGQoaXRlcjQsIG9sZF9saXN0NCk7CisJCQluZXRsYmxfZG9taHNoX2F1ZGl0X2FkZChlbnRyeV9vbGQsIGl0ZXI0LCBOVUxMLAorCQkJCQkJcmV0X3ZhbCwgYXVkaXRfaW5mbyk7CisJCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJCWdvdG8gYWRkX3JldHVybjsKKwkJfQorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCQluZXRsYmxfYWY2bGlzdF9mb3JlYWNoX3NhZmUoaXRlcjYsIHRtcDYsCisJCQkJCSAgICAmZW50cnktPnR5cGVfZGVmLmFkZHJzZWwtPmxpc3Q2KSB7CisJCQluZXRsYmxfYWY2bGlzdF9yZW1vdmVfZW50cnkoaXRlcjYpOworCQkJaXRlcjYtPnZhbGlkID0gMTsKKwkJCXJldF92YWwgPSBuZXRsYmxfYWY2bGlzdF9hZGQoaXRlcjYsIG9sZF9saXN0Nik7CisJCQluZXRsYmxfZG9taHNoX2F1ZGl0X2FkZChlbnRyeV9vbGQsIE5VTEwsIGl0ZXI2LAorCQkJCQkJcmV0X3ZhbCwgYXVkaXRfaW5mbyk7CisJCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJCWdvdG8gYWRkX3JldHVybjsKKwkJfQorI2VuZGlmIC8qIElQdjYgKi8KKwl9IGVsc2UKKwkJcmV0X3ZhbCA9IC1FSU5WQUw7CisKK2FkZF9yZXR1cm46CiAJc3Bpbl91bmxvY2soJm5ldGxibF9kb21oc2hfbG9jayk7Ci0JYXVkaXRfYnVmID0gbmV0bGJsX2F1ZGl0X3N0YXJ0X2NvbW1vbihBVURJVF9NQUNfTUFQX0FERCwgYXVkaXRfaW5mbyk7Ci0JaWYgKGF1ZGl0X2J1ZiAhPSBOVUxMKSB7Ci0JCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLAotCQkJCSAiIG5sYmxfZG9tYWluPSVzIiwKLQkJCQkgZW50cnktPmRvbWFpbiA/IGVudHJ5LT5kb21haW4gOiAiKGRlZmF1bHQpIik7Ci0JCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQkJY2FzZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRDoKLQkJCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIG5sYmxfcHJvdG9jb2w9dW5sYmwiKTsKLQkJCWJyZWFrOwotCQljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKLQkJCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLAotCQkJCQkgIiBubGJsX3Byb3RvY29sPWNpcHNvdjQgY2lwc29fZG9pPSV1IiwKLQkJCQkJIGVudHJ5LT50eXBlX2RlZi5jaXBzb3Y0LT5kb2kpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgcmVzPSV1IiwgcmV0X3ZhbCA9PSAwID8gMSA6IDApOwotCQlhdWRpdF9sb2dfZW5kKGF1ZGl0X2J1Zik7Ci0JfQogCXJjdV9yZWFkX3VubG9jaygpOwotCi0JaWYgKHJldF92YWwgIT0gMCkgewotCQlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0JCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgotCQkJaWYgKGNpcHNvX3Y0X2RvaV9kb21oc2hfcmVtb3ZlKGVudHJ5LT50eXBlX2RlZi5jaXBzb3Y0LAotCQkJCQkJICAgICAgIGVudHJ5LT5kb21haW4pICE9IDApCi0JCQkJQlVHKCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQogCXJldHVybiByZXRfdmFsOwogfQogCkBAIC0zMDIsNiArNDE4LDcxIEBACiB9CiAKIC8qKgorICogbmV0bGJsX2RvbWhzaF9yZW1vdmVfZW50cnkgLSBSZW1vdmVzIGEgZ2l2ZW4gZW50cnkgZnJvbSB0aGUgZG9tYWluIHRhYmxlCisgKiBAZW50cnk6IHRoZSBlbnRyeSB0byByZW1vdmUKKyAqIEBhdWRpdF9pbmZvOiBOZXRMYWJlbCBhdWRpdCBpbmZvcm1hdGlvbgorICoKKyAqIERlc2NyaXB0aW9uOgorICogUmVtb3ZlcyBhbiBlbnRyeSBmcm9tIHRoZSBkb21haW4gaGFzaCB0YWJsZSBhbmQgaGFuZGxlcyBhbnkgdXBkYXRlcyB0byB0aGUKKyAqIGxvd2VyIGxldmVsIHByb3RvY29sIGhhbmRsZXIgKGkuZS4gQ0lQU08pLiAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorICogZW5zdXJpbmcgdGhhdCB0aGUgUkNVIHJlYWQgbG9jayBpcyBoZWxkLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlCisgKiBvbiBmYWlsdXJlLgorICoKKyAqLworaW50IG5ldGxibF9kb21oc2hfcmVtb3ZlX2VudHJ5KHN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnksCisJCQkgICAgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKK3sKKwlpbnQgcmV0X3ZhbCA9IDA7CisJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYXVkaXRfYnVmOworCisJaWYgKGVudHJ5ID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOworCisJc3Bpbl9sb2NrKCZuZXRsYmxfZG9taHNoX2xvY2spOworCWlmIChlbnRyeS0+dmFsaWQpIHsKKwkJZW50cnktPnZhbGlkID0gMDsKKwkJaWYgKGVudHJ5ICE9IHJjdV9kZXJlZmVyZW5jZShuZXRsYmxfZG9taHNoX2RlZikpCisJCQlsaXN0X2RlbF9yY3UoJmVudHJ5LT5saXN0KTsKKwkJZWxzZQorCQkJcmN1X2Fzc2lnbl9wb2ludGVyKG5ldGxibF9kb21oc2hfZGVmLCBOVUxMKTsKKwl9IGVsc2UKKwkJcmV0X3ZhbCA9IC1FTk9FTlQ7CisJc3Bpbl91bmxvY2soJm5ldGxibF9kb21oc2hfbG9jayk7CisKKwlhdWRpdF9idWYgPSBuZXRsYmxfYXVkaXRfc3RhcnRfY29tbW9uKEFVRElUX01BQ19NQVBfREVMLCBhdWRpdF9pbmZvKTsKKwlpZiAoYXVkaXRfYnVmICE9IE5VTEwpIHsKKwkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsCisJCQkJICIgbmxibF9kb21haW49JXMgcmVzPSV1IiwKKwkJCQkgZW50cnktPmRvbWFpbiA/IGVudHJ5LT5kb21haW4gOiAiKGRlZmF1bHQpIiwKKwkJCQkgcmV0X3ZhbCA9PSAwID8gMSA6IDApOworCQlhdWRpdF9sb2dfZW5kKGF1ZGl0X2J1Zik7CisJfQorCisJaWYgKHJldF92YWwgPT0gMCkgeworCQlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKml0ZXI0OworCQlzdHJ1Y3QgbmV0bGJsX2RvbWFkZHI0X21hcCAqbWFwNDsKKworCQlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CisJCWNhc2UgTkVUTEJMX05MVFlQRV9BRERSU0VMRUNUOgorCQkJbmV0bGJsX2FmNGxpc3RfZm9yZWFjaF9yY3UoaXRlcjQsCisJCQkJCSAgICAgJmVudHJ5LT50eXBlX2RlZi5hZGRyc2VsLT5saXN0NCkgeworCQkJCW1hcDQgPSBuZXRsYmxfZG9taHNoX2FkZHI0X2VudHJ5KGl0ZXI0KTsKKwkJCQljaXBzb192NF9kb2lfcHV0ZGVmKG1hcDQtPnR5cGVfZGVmLmNpcHNvdjQpOworCQkJfQorCQkJLyogbm8gbmVlZCB0byBjaGVjayB0aGUgSVB2NiBsaXN0IHNpbmNlIHdlIGN1cnJlbnRseQorCQkJICogc3VwcG9ydCBvbmx5IHVubGFiZWxlZCBwcm90b2NvbHMgZm9yIElQdjYgKi8KKwkJCWJyZWFrOworCQljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKKwkJCWNpcHNvX3Y0X2RvaV9wdXRkZWYoZW50cnktPnR5cGVfZGVmLmNpcHNvdjQpOworCQkJYnJlYWs7CisJCX0KKwkJY2FsbF9yY3UoJmVudHJ5LT5yY3UsIG5ldGxibF9kb21oc2hfZnJlZV9lbnRyeSk7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogbmV0bGJsX2RvbWhzaF9yZW1vdmUgLSBSZW1vdmVzIGFuIGVudHJ5IGZyb20gdGhlIGRvbWFpbiBoYXNoIHRhYmxlCiAgKiBAZG9tYWluOiB0aGUgZG9tYWluIHRvIHJlbW92ZQogICogQGF1ZGl0X2luZm86IE5ldExhYmVsIGF1ZGl0IGluZm9ybWF0aW9uCkBAIC0zMTQsNDcgKzQ5NSwxNyBAQAogICovCiBpbnQgbmV0bGJsX2RvbWhzaF9yZW1vdmUoY29uc3QgY2hhciAqZG9tYWluLCBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKQogewotCWludCByZXRfdmFsID0gLUVOT0VOVDsKKwlpbnQgcmV0X3ZhbDsKIAlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5OwotCXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZjsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlpZiAoZG9tYWluKQogCQllbnRyeSA9IG5ldGxibF9kb21oc2hfc2VhcmNoKGRvbWFpbik7CiAJZWxzZQogCQllbnRyeSA9IG5ldGxibF9kb21oc2hfc2VhcmNoX2RlZihkb21haW4pOwotCWlmIChlbnRyeSA9PSBOVUxMKQotCQlnb3RvIHJlbW92ZV9yZXR1cm47Ci0Jc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgotCQljaXBzb192NF9kb2lfZG9taHNoX3JlbW92ZShlbnRyeS0+dHlwZV9kZWYuY2lwc292NCwKLQkJCQkJICAgZW50cnktPmRvbWFpbik7Ci0JCWJyZWFrOwotCX0KLQlzcGluX2xvY2soJm5ldGxibF9kb21oc2hfbG9jayk7Ci0JaWYgKGVudHJ5LT52YWxpZCkgewotCQllbnRyeS0+dmFsaWQgPSAwOwotCQlpZiAoZW50cnkgIT0gcmN1X2RlcmVmZXJlbmNlKG5ldGxibF9kb21oc2hfZGVmKSkKLQkJCWxpc3RfZGVsX3JjdSgmZW50cnktPmxpc3QpOwotCQllbHNlCi0JCQlyY3VfYXNzaWduX3BvaW50ZXIobmV0bGJsX2RvbWhzaF9kZWYsIE5VTEwpOwotCQlyZXRfdmFsID0gMDsKLQl9Ci0Jc3Bpbl91bmxvY2soJm5ldGxibF9kb21oc2hfbG9jayk7Ci0KLQlhdWRpdF9idWYgPSBuZXRsYmxfYXVkaXRfc3RhcnRfY29tbW9uKEFVRElUX01BQ19NQVBfREVMLCBhdWRpdF9pbmZvKTsKLQlpZiAoYXVkaXRfYnVmICE9IE5VTEwpIHsKLQkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsCi0JCQkJICIgbmxibF9kb21haW49JXMgcmVzPSV1IiwKLQkJCQkgZW50cnktPmRvbWFpbiA/IGVudHJ5LT5kb21haW4gOiAiKGRlZmF1bHQpIiwKLQkJCQkgcmV0X3ZhbCA9PSAwID8gMSA6IDApOwotCQlhdWRpdF9sb2dfZW5kKGF1ZGl0X2J1Zik7Ci0JfQotCi1yZW1vdmVfcmV0dXJuOgorCXJldF92YWwgPSBuZXRsYmxfZG9taHNoX3JlbW92ZV9lbnRyeShlbnRyeSwgYXVkaXRfaW5mbyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JaWYgKHJldF92YWwgPT0gMCkKLQkJY2FsbF9yY3UoJmVudHJ5LT5yY3UsIG5ldGxibF9kb21oc2hfZnJlZV9lbnRyeSk7CisKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApAQCAtMzg5LDYgKzU0MCw3MCBAQAogfQogCiAvKioKKyAqIG5ldGxibF9kb21oc2hfZ2V0ZW50cnlfYWY0IC0gR2V0IGFuIGVudHJ5IGZyb20gdGhlIGRvbWFpbiBoYXNoIHRhYmxlCisgKiBAZG9tYWluOiB0aGUgZG9tYWluIG5hbWUgdG8gc2VhcmNoIGZvcgorICogQGFkZHI6IHRoZSBJUCBhZGRyZXNzIHRvIHNlYXJjaCBmb3IKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIExvb2sgdGhyb3VnaCB0aGUgZG9tYWluIGhhc2ggdGFibGUgc2VhcmNoaW5nIGZvciBhbiBlbnRyeSB0byBtYXRjaCBAZG9tYWluCisgKiBhbmQgQGFkZHIsIHJldHVybiBhIHBvaW50ZXIgdG8gYSBjb3B5IG9mIHRoZSBlbnRyeSBvciBOVUxMLiAgVGhlIGNhbGxlciBpcworICogcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgcmN1X3JlYWRfW3VuXWxvY2soKSBpcyBjYWxsZWQuCisgKgorICovCitzdHJ1Y3QgbmV0bGJsX2RvbWFkZHI0X21hcCAqbmV0bGJsX2RvbWhzaF9nZXRlbnRyeV9hZjQoY29uc3QgY2hhciAqZG9tYWluLAorCQkJCQkJICAgICAgIF9fYmUzMiBhZGRyKQoreworCXN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZG9tX2l0ZXI7CisJc3RydWN0IG5ldGxibF9hZjRsaXN0ICphZGRyX2l0ZXI7CisKKwlkb21faXRlciA9IG5ldGxibF9kb21oc2hfc2VhcmNoX2RlZihkb21haW4pOworCWlmIChkb21faXRlciA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoZG9tX2l0ZXItPnR5cGUgIT0gTkVUTEJMX05MVFlQRV9BRERSU0VMRUNUKQorCQlyZXR1cm4gTlVMTDsKKworCWFkZHJfaXRlciA9IG5ldGxibF9hZjRsaXN0X3NlYXJjaChhZGRyLAorCQkJCQkgICZkb21faXRlci0+dHlwZV9kZWYuYWRkcnNlbC0+bGlzdDQpOworCWlmIChhZGRyX2l0ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gbmV0bGJsX2RvbWhzaF9hZGRyNF9lbnRyeShhZGRyX2l0ZXIpOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisvKioKKyAqIG5ldGxibF9kb21oc2hfZ2V0ZW50cnlfYWY2IC0gR2V0IGFuIGVudHJ5IGZyb20gdGhlIGRvbWFpbiBoYXNoIHRhYmxlCisgKiBAZG9tYWluOiB0aGUgZG9tYWluIG5hbWUgdG8gc2VhcmNoIGZvcgorICogQGFkZHI6IHRoZSBJUCBhZGRyZXNzIHRvIHNlYXJjaCBmb3IKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIExvb2sgdGhyb3VnaCB0aGUgZG9tYWluIGhhc2ggdGFibGUgc2VhcmNoaW5nIGZvciBhbiBlbnRyeSB0byBtYXRjaCBAZG9tYWluCisgKiBhbmQgQGFkZHIsIHJldHVybiBhIHBvaW50ZXIgdG8gYSBjb3B5IG9mIHRoZSBlbnRyeSBvciBOVUxMLiAgVGhlIGNhbGxlciBpcworICogcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgcmN1X3JlYWRfW3VuXWxvY2soKSBpcyBjYWxsZWQuCisgKgorICovCitzdHJ1Y3QgbmV0bGJsX2RvbWFkZHI2X21hcCAqbmV0bGJsX2RvbWhzaF9nZXRlbnRyeV9hZjYoY29uc3QgY2hhciAqZG9tYWluLAorCQkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQoreworCXN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZG9tX2l0ZXI7CisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICphZGRyX2l0ZXI7CisKKwlkb21faXRlciA9IG5ldGxibF9kb21oc2hfc2VhcmNoX2RlZihkb21haW4pOworCWlmIChkb21faXRlciA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoZG9tX2l0ZXItPnR5cGUgIT0gTkVUTEJMX05MVFlQRV9BRERSU0VMRUNUKQorCQlyZXR1cm4gTlVMTDsKKworCWFkZHJfaXRlciA9IG5ldGxibF9hZjZsaXN0X3NlYXJjaChhZGRyLAorCQkJCQkgICZkb21faXRlci0+dHlwZV9kZWYuYWRkcnNlbC0+bGlzdDYpOworCWlmIChhZGRyX2l0ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gbmV0bGJsX2RvbWhzaF9hZGRyNl9lbnRyeShhZGRyX2l0ZXIpOworfQorI2VuZGlmIC8qIElQdjYgKi8KKworLyoqCiAgKiBuZXRsYmxfZG9taHNoX3dhbGsgLSBJdGVyYXRlIHRocm91Z2ggdGhlIGRvbWFpbiBtYXBwaW5nIGhhc2ggdGFibGUKICAqIEBza2lwX2JrdDogdGhlIG51bWJlciBvZiBidWNrZXRzIHRvIHNraXAgYXQgdGhlIHN0YXJ0CiAgKiBAc2tpcF9jaGFpbjogdGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIHNraXAgaW4gdGhlIGZpcnN0IGl0ZXJhdGVkIGJ1Y2tldApAQCAtNDEwLDYgKzYyNSw3IEBACiB7CiAJaW50IHJldF92YWwgPSAtRU5PRU5UOwogCXUzMiBpdGVyX2JrdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyX2xpc3Q7CiAJc3RydWN0IG5ldGxibF9kb21fbWFwICppdGVyX2VudHJ5OwogCXUzMiBjaGFpbl9jbnQgPSAwOwogCkBAIC00MTcsOSArNjMzLDggQEAKIAlmb3IgKGl0ZXJfYmt0ID0gKnNraXBfYmt0OwogCSAgICAgaXRlcl9ia3QgPCByY3VfZGVyZWZlcmVuY2UobmV0bGJsX2RvbWhzaCktPnNpemU7CiAJICAgICBpdGVyX2JrdCsrLCBjaGFpbl9jbnQgPSAwKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGl0ZXJfZW50cnksCi0JCQkJJnJjdV9kZXJlZmVyZW5jZShuZXRsYmxfZG9taHNoKS0+dGJsW2l0ZXJfYmt0XSwKLQkJCQlsaXN0KQorCQlpdGVyX2xpc3QgPSAmcmN1X2RlcmVmZXJlbmNlKG5ldGxibF9kb21oc2gpLT50YmxbaXRlcl9ia3RdOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpdGVyX2VudHJ5LCBpdGVyX2xpc3QsIGxpc3QpCiAJCQlpZiAoaXRlcl9lbnRyeS0+dmFsaWQpIHsKIAkJCQlpZiAoY2hhaW5fY250KysgPCAqc2tpcF9jaGFpbikKIAkJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5oIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guaAppbmRleCA4MjIwOTkwLi5iZmNiNjc2IDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5oCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmgKQEAgLTExLDcgKzExLDcgQEAKICAqLwogCiAvKgotICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwNgorICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwNiwgMjAwOAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM2LDE2ICszNiw0MyBAQAogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCisjaW5jbHVkZSAibmV0bGFiZWxfYWRkcmxpc3QuaCIKKwogLyogRG9tYWluIGhhc2ggdGFibGUgc2l6ZSAqLwogLyogWFhYIC0gY3VycmVudGx5IHRoaXMgbnVtYmVyIGlzIGFuIHVuZWR1Y2F0ZWQgZ3Vlc3MgKi8KICNkZWZpbmUgTkVUTEJMX0RPTUhTSF9CSVRTSVpFICAgICAgIDcKIAotLyogRG9tYWluIG1hcHBpbmcgZGVmaW5pdGlvbiBzdHJ1Y3QgKi8KKy8qIERvbWFpbiBtYXBwaW5nIGRlZmluaXRpb24gc3RydWN0dXJlcyAqLworI2RlZmluZSBuZXRsYmxfZG9taHNoX2FkZHI0X2VudHJ5KGl0ZXIpIFwKKwljb250YWluZXJfb2YoaXRlciwgc3RydWN0IG5ldGxibF9kb21hZGRyNF9tYXAsIGxpc3QpCitzdHJ1Y3QgbmV0bGJsX2RvbWFkZHI0X21hcCB7CisJdTMyIHR5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgY2lwc29fdjRfZG9pICpjaXBzb3Y0OworCX0gdHlwZV9kZWY7CisKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgbGlzdDsKK307CisjZGVmaW5lIG5ldGxibF9kb21oc2hfYWRkcjZfZW50cnkoaXRlcikgXAorCWNvbnRhaW5lcl9vZihpdGVyLCBzdHJ1Y3QgbmV0bGJsX2RvbWFkZHI2X21hcCwgbGlzdCkKK3N0cnVjdCBuZXRsYmxfZG9tYWRkcjZfbWFwIHsKKwl1MzIgdHlwZTsKKworCS8qIE5PVEU6IG5vICd0eXBlX2RlZicgdW5pb24gbmVlZGVkIGF0IHByZXNlbnQgc2luY2Ugd2UgZG9uJ3QgY3VycmVudGx5CisJICogICAgICAgc3VwcG9ydCBhbnkgSVB2NiBsYWJlbGluZyBwcm90b2NvbHMgKi8KKworCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCBsaXN0OworfTsKK3N0cnVjdCBuZXRsYmxfZG9tYWRkcl9tYXAgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDQ7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0NjsKK307CiBzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgewogCWNoYXIgKmRvbWFpbjsKIAl1MzIgdHlwZTsKIAl1bmlvbiB7CiAJCXN0cnVjdCBjaXBzb192NF9kb2kgKmNpcHNvdjQ7CisJCXN0cnVjdCBuZXRsYmxfZG9tYWRkcl9tYXAgKmFkZHJzZWw7CiAJfSB0eXBlX2RlZjsKIAogCXUzMiB2YWxpZDsKQEAgLTYxLDEyICs4OCwyMSBAQAogCQkgICAgICBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKTsKIGludCBuZXRsYmxfZG9taHNoX2FkZF9kZWZhdWx0KHN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnksCiAJCQkgICAgICBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKTsKK2ludCBuZXRsYmxfZG9taHNoX3JlbW92ZV9lbnRyeShzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5LAorCQkJICAgICAgIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pOwogaW50IG5ldGxibF9kb21oc2hfcmVtb3ZlKGNvbnN0IGNoYXIgKmRvbWFpbiwgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbyk7CiBpbnQgbmV0bGJsX2RvbWhzaF9yZW1vdmVfZGVmYXVsdChzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKTsKIHN0cnVjdCBuZXRsYmxfZG9tX21hcCAqbmV0bGJsX2RvbWhzaF9nZXRlbnRyeShjb25zdCBjaGFyICpkb21haW4pOworc3RydWN0IG5ldGxibF9kb21hZGRyNF9tYXAgKm5ldGxibF9kb21oc2hfZ2V0ZW50cnlfYWY0KGNvbnN0IGNoYXIgKmRvbWFpbiwKKwkJCQkJCSAgICAgICBfX2JlMzIgYWRkcik7CiBpbnQgbmV0bGJsX2RvbWhzaF93YWxrKHUzMiAqc2tpcF9ia3QsCiAJCSAgICAgdTMyICpza2lwX2NoYWluLAogCQkgICAgIGludCAoKmNhbGxiYWNrKSAoc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeSwgdm9pZCAqYXJnKSwKIAkJICAgICB2b2lkICpjYl9hcmcpOwogCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCitzdHJ1Y3QgbmV0bGJsX2RvbWFkZHI2X21hcCAqbmV0bGJsX2RvbWhzaF9nZXRlbnRyeV9hZjYoY29uc3QgY2hhciAqZG9tYWluLAorCQkJCQkJICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworI2VuZGlmIC8qIElQdjYgKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYwppbmRleCAzOTc5M2ExLi5iMzJlY2ViIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqLwogCiAvKgotICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwNgorICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwNiwgMjAwOAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTgyLDcgKzgyLDcgQEAKIAogCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0FUT01JQyk7CiAJaWYgKGVudHJ5ID09IE5VTEwpCi0JCWdvdG8gY2ZnX3VubGJsX2FkZF9tYXBfZmFpbHVyZTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKGRvbWFpbiAhPSBOVUxMKSB7CiAJCWVudHJ5LT5kb21haW4gPSBrc3RyZHVwKGRvbWFpbiwgR0ZQX0FUT01JQyk7CiAJCWlmIChlbnRyeS0+ZG9tYWluID09IE5VTEwpCkBAIC0xMDQsNDkgKzEwNCw2IEBACiB9CiAKIC8qKgotICogbmV0bGJsX2NmZ19jaXBzb3Y0X2FkZCAtIEFkZCBhIG5ldyBDSVBTT3Y0IERPSSBkZWZpbml0aW9uCi0gKiBAZG9pX2RlZjogdGhlIERPSSBkZWZpbml0aW9uCi0gKiBAYXVkaXRfaW5mbzogTmV0TGFiZWwgYXVkaXQgaW5mb3JtYXRpb24KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIEFkZCBhIG5ldyBDSVBTT3Y0IERPSSBkZWZpbml0aW9uIHRvIHRoZSBOZXRMYWJlbCBzdWJzeXN0ZW0uICBSZXR1cm5zIHplcm8gb24KLSAqIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgotICoKLSAqLwotaW50IG5ldGxibF9jZmdfY2lwc292NF9hZGQoc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKLQkJCSAgIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pCi17Ci0JaW50IHJldF92YWw7Ci0JY29uc3QgY2hhciAqdHlwZV9zdHI7Ci0Jc3RydWN0IGF1ZGl0X2J1ZmZlciAqYXVkaXRfYnVmOwotCi0JcmV0X3ZhbCA9IGNpcHNvX3Y0X2RvaV9hZGQoZG9pX2RlZik7Ci0KLQlhdWRpdF9idWYgPSBuZXRsYmxfYXVkaXRfc3RhcnRfY29tbW9uKEFVRElUX01BQ19DSVBTT1Y0X0FERCwKLQkJCQkJICAgICAgYXVkaXRfaW5mbyk7Ci0JaWYgKGF1ZGl0X2J1ZiAhPSBOVUxMKSB7Ci0JCXN3aXRjaCAoZG9pX2RlZi0+dHlwZSkgewotCQljYXNlIENJUFNPX1Y0X01BUF9TVEQ6Ci0JCQl0eXBlX3N0ciA9ICJzdGQiOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0lQU09fVjRfTUFQX1BBU1M6Ci0JCQl0eXBlX3N0ciA9ICJwYXNzIjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdHlwZV9zdHIgPSAiKHVua25vd24pIjsKLQkJfQotCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwKLQkJCQkgIiBjaXBzb19kb2k9JXUgY2lwc29fdHlwZT0lcyByZXM9JXUiLAotCQkJCSBkb2lfZGVmLT5kb2ksCi0JCQkJIHR5cGVfc3RyLAotCQkJCSByZXRfdmFsID09IDAgPyAxIDogMCk7Ci0JCWF1ZGl0X2xvZ19lbmQoYXVkaXRfYnVmKTsKLQl9Ci0KLQlyZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyoqCiAgKiBuZXRsYmxfY2ZnX2NpcHNvdjRfYWRkX21hcCAtIEFkZCBhIG5ldyBDSVBTT3Y0IERPSSBkZWZpbml0aW9uIGFuZCBtYXBwaW5nCiAgKiBAZG9pX2RlZjogdGhlIERPSSBkZWZpbml0aW9uCiAgKiBAZG9tYWluOiB0aGUgZG9tYWluIG1hcHBpbmcgdG8gYWRkCkBAIC0xNjQsNTggKzEyMSw3MSBAQAogCQkJICAgICAgIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pCiB7CiAJaW50IHJldF92YWwgPSAtRU5PTUVNOworCXUzMiBkb2k7CisJdTMyIGRvaV90eXBlOwogCXN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnk7CisJY29uc3QgY2hhciAqdHlwZV9zdHI7CisJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYXVkaXRfYnVmOworCisJZG9pID0gZG9pX2RlZi0+ZG9pOworCWRvaV90eXBlID0gZG9pX2RlZi0+dHlwZTsKIAogCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0FUT01JQyk7CiAJaWYgKGVudHJ5ID09IE5VTEwpCi0JCWdvdG8gY2ZnX2NpcHNvdjRfYWRkX21hcF9mYWlsdXJlOworCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoZG9tYWluICE9IE5VTEwpIHsKIAkJZW50cnktPmRvbWFpbiA9IGtzdHJkdXAoZG9tYWluLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGVudHJ5LT5kb21haW4gPT0gTlVMTCkKIAkJCWdvdG8gY2ZnX2NpcHNvdjRfYWRkX21hcF9mYWlsdXJlOwogCX0KLQllbnRyeS0+dHlwZSA9IE5FVExCTF9OTFRZUEVfQ0lQU09WNDsKLQllbnRyeS0+dHlwZV9kZWYuY2lwc292NCA9IGRvaV9kZWY7CiAKLQkvKiBHcmFiIGEgUkNVIHJlYWQgbG9jayBoZXJlIHNvIG5vdGhpbmcgaGFwcGVucyB0byB0aGUgZG9pX2RlZiB2YXJpYWJsZQotCSAqIGJldHdlZW4gYWRkaW5nIGl0IHRvIHRoZSBDSVBTT3Y0IHByb3RvY29sIGVuZ2luZSBhbmQgYWRkaW5nIGEKLQkgKiBkb21haW4gbWFwcGluZyBmb3IgaXQuICovCi0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JcmV0X3ZhbCA9IG5ldGxibF9jZmdfY2lwc292NF9hZGQoZG9pX2RlZiwgYXVkaXRfaW5mbyk7Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJZ290byBjZmdfY2lwc292NF9hZGRfbWFwX2ZhaWx1cmVfdW5sb2NrOwotCXJldF92YWwgPSBuZXRsYmxfZG9taHNoX2FkZChlbnRyeSwgYXVkaXRfaW5mbyk7CisJcmV0X3ZhbCA9IGNpcHNvX3Y0X2RvaV9hZGQoZG9pX2RlZik7CiAJaWYgKHJldF92YWwgIT0gMCkKIAkJZ290byBjZmdfY2lwc292NF9hZGRfbWFwX2ZhaWx1cmVfcmVtb3ZlX2RvaTsKLQlyY3VfcmVhZF91bmxvY2soKTsKKwllbnRyeS0+dHlwZSA9IE5FVExCTF9OTFRZUEVfQ0lQU09WNDsKKwllbnRyeS0+dHlwZV9kZWYuY2lwc292NCA9IGNpcHNvX3Y0X2RvaV9nZXRkZWYoZG9pKTsKKwlpZiAoZW50cnktPnR5cGVfZGVmLmNpcHNvdjQgPT0gTlVMTCkgeworCQlyZXRfdmFsID0gLUVOT0VOVDsKKwkJZ290byBjZmdfY2lwc292NF9hZGRfbWFwX2ZhaWx1cmVfcmVtb3ZlX2RvaTsKKwl9CisJcmV0X3ZhbCA9IG5ldGxibF9kb21oc2hfYWRkKGVudHJ5LCBhdWRpdF9pbmZvKTsKKwlpZiAocmV0X3ZhbCAhPSAwKQorCQlnb3RvIGNmZ19jaXBzb3Y0X2FkZF9tYXBfZmFpbHVyZV9yZWxlYXNlX2RvaTsKIAotCXJldHVybiAwOworY2ZnX2NpcHNvdjRfYWRkX21hcF9yZXR1cm46CisJYXVkaXRfYnVmID0gbmV0bGJsX2F1ZGl0X3N0YXJ0X2NvbW1vbihBVURJVF9NQUNfQ0lQU09WNF9BREQsCisJCQkJCSAgICAgIGF1ZGl0X2luZm8pOworCWlmIChhdWRpdF9idWYgIT0gTlVMTCkgeworCQlzd2l0Y2ggKGRvaV90eXBlKSB7CisJCWNhc2UgQ0lQU09fVjRfTUFQX1RSQU5TOgorCQkJdHlwZV9zdHIgPSAidHJhbnMiOworCQkJYnJlYWs7CisJCWNhc2UgQ0lQU09fVjRfTUFQX1BBU1M6CisJCQl0eXBlX3N0ciA9ICJwYXNzIjsKKwkJCWJyZWFrOworCQljYXNlIENJUFNPX1Y0X01BUF9MT0NBTDoKKwkJCXR5cGVfc3RyID0gImxvY2FsIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdHlwZV9zdHIgPSAiKHVua25vd24pIjsKKwkJfQorCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwKKwkJCQkgIiBjaXBzb19kb2k9JXUgY2lwc29fdHlwZT0lcyByZXM9JXUiLAorCQkJCSBkb2ksIHR5cGVfc3RyLCByZXRfdmFsID09IDAgPyAxIDogMCk7CisJCWF1ZGl0X2xvZ19lbmQoYXVkaXRfYnVmKTsKKwl9CiAKKwlyZXR1cm4gcmV0X3ZhbDsKKworY2ZnX2NpcHNvdjRfYWRkX21hcF9mYWlsdXJlX3JlbGVhc2VfZG9pOgorCWNpcHNvX3Y0X2RvaV9wdXRkZWYoZG9pX2RlZik7CiBjZmdfY2lwc292NF9hZGRfbWFwX2ZhaWx1cmVfcmVtb3ZlX2RvaToKLQljaXBzb192NF9kb2lfcmVtb3ZlKGRvaV9kZWYtPmRvaSwgYXVkaXRfaW5mbywgbmV0bGJsX2NpcHNvdjRfZG9pX2ZyZWUpOwotY2ZnX2NpcHNvdjRfYWRkX21hcF9mYWlsdXJlX3VubG9jazoKLQlyY3VfcmVhZF91bmxvY2soKTsKKwljaXBzb192NF9kb2lfcmVtb3ZlKGRvaSwgYXVkaXRfaW5mbyk7CiBjZmdfY2lwc292NF9hZGRfbWFwX2ZhaWx1cmU6CiAJaWYgKGVudHJ5ICE9IE5VTEwpCiAJCWtmcmVlKGVudHJ5LT5kb21haW4pOwogCWtmcmVlKGVudHJ5KTsKLQlyZXR1cm4gcmV0X3ZhbDsKLX0KLQotLyoqCi0gKiBuZXRsYmxfY2ZnX2NpcHNvdjRfZGVsIC0gUmVtb3ZlYW4gZXhpc3RpbmcgQ0lQU092NCBET0kgZGVmaW5pdGlvbgotICogQGRvaTogdGhlIENJUFNPIERPSSB2YWx1ZQotICogQGF1ZGl0X2luZm86IE5ldExhYmVsIGF1ZGl0IGluZm9ybWF0aW9uCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiBSZW1vdmVzIGFuIGV4aXN0aW5nIENJUFNPdjQgRE9JIGRlZmluaXRpb24gZnJvbSB0aGUgTmV0TGFiZWwgc3Vic3lzdGVtLgotICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgotICoKLSAqLwotaW50IG5ldGxibF9jZmdfY2lwc292NF9kZWwodTMyIGRvaSwgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKLXsKLQlyZXR1cm4gY2lwc29fdjRfZG9pX3JlbW92ZShkb2ksIGF1ZGl0X2luZm8sIG5ldGxibF9jaXBzb3Y0X2RvaV9mcmVlKTsKKwlnb3RvIGNmZ19jaXBzb3Y0X2FkZF9tYXBfcmV0dXJuOwogfQogCiAvKgpAQCAtNDUyLDcgKzQyMiw5IEBACiAgKiBBdHRhY2ggdGhlIGNvcnJlY3QgbGFiZWwgdG8gdGhlIGdpdmVuIHNvY2tldCB1c2luZyB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcwogICogc3BlY2lmaWVkIGluIEBzZWNhdHRyLiAgVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBleGNsdXNpdmUgYWNjZXNzIHRvIEBzaywKICAqIHdoaWNoIG1lYW5zIGl0IGVpdGhlciBuZWVkcyB0byBiZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkIG9yIGxvY2tlZC4KLSAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCAtRURFU1RBRERSUkVRIGlmIHRoZSBkb21haW4gaXMgY29uZmlndXJlZCB0byB1c2UKKyAqIG5ldHdvcmsgYWRkcmVzcyBzZWxlY3RvcnMgKGNhbid0IGJsaW5kbHkgbGFiZWwgdGhlIHNvY2tldCksIGFuZCBuZWdhdGl2ZQorICogdmFsdWVzIG9uIGFsbCBvdGhlciBmYWlsdXJlcy4KICAqCiAgKi8KIGludCBuZXRsYmxfc29ja19zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKQEAgLTQ2Niw2ICs0MzgsOSBAQAogCWlmIChkb21fZW50cnkgPT0gTlVMTCkKIAkJZ290byBzb2NrZXRfc2V0YXR0cl9yZXR1cm47CiAJc3dpdGNoIChkb21fZW50cnktPnR5cGUpIHsKKwljYXNlIE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVDoKKwkJcmV0X3ZhbCA9IC1FREVTVEFERFJSRVE7CisJCWJyZWFrOwogCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgogCQlyZXRfdmFsID0gY2lwc29fdjRfc29ja19zZXRhdHRyKHNrLAogCQkJCQkJZG9tX2VudHJ5LT50eXBlX2RlZi5jaXBzb3Y0LApAQCAtNDg0LDYgKzQ1OSwyMCBAQAogfQogCiAvKioKKyAqIG5ldGxibF9zb2NrX2RlbGF0dHIgLSBEZWxldGUgYWxsIHRoZSBOZXRMYWJlbCBsYWJlbHMgb24gYSBzb2NrZXQKKyAqIEBzazogdGhlIHNvY2tldAorICoKKyAqIERlc2NyaXB0aW9uOgorICogUmVtb3ZlIGFsbCB0aGUgTmV0TGFiZWwgbGFiZWxpbmcgZnJvbSBAc2suICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorICogZW5zdXJpbmcgdGhhdCBAc2sgaXMgbG9ja2VkLgorICoKKyAqLwordm9pZCBuZXRsYmxfc29ja19kZWxhdHRyKHN0cnVjdCBzb2NrICpzaykKK3sKKwljaXBzb192NF9zb2NrX2RlbGF0dHIoc2spOworfQorCisvKioKICAqIG5ldGxibF9zb2NrX2dldGF0dHIgLSBEZXRlcm1pbmUgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMgb2YgYSBzb2NrCiAgKiBAc2s6IHRoZSBzb2NrCiAgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKQEAgLTUwMSw2ICs0OTAsMTI4IEBACiB9CiAKIC8qKgorICogbmV0bGJsX2Nvbm5fc2V0YXR0ciAtIExhYmVsIGEgY29ubmVjdGVkIHNvY2tldCB1c2luZyB0aGUgY29ycmVjdCBwcm90b2NvbAorICogQHNrOiB0aGUgc29ja2V0IHRvIGxhYmVsCisgKiBAYWRkcjogdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIEBzZWNhdHRyOiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcworICoKKyAqIERlc2NyaXB0aW9uOgorICogQXR0YWNoIHRoZSBjb3JyZWN0IGxhYmVsIHRvIHRoZSBnaXZlbiBjb25uZWN0ZWQgc29ja2V0IHVzaW5nIHRoZSBzZWN1cml0eQorICogYXR0cmlidXRlcyBzcGVjaWZpZWQgaW4gQHNlY2F0dHIuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZworICogdGhhdCBAc2sgaXMgbG9ja2VkLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICoKKyAqLworaW50IG5ldGxibF9jb25uX3NldGF0dHIoc3RydWN0IHNvY2sgKnNrLAorCQkJc3RydWN0IHNvY2thZGRyICphZGRyLAorCQkJY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK3sKKwlpbnQgcmV0X3ZhbDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHI0OworCXN0cnVjdCBuZXRsYmxfZG9tYWRkcjRfbWFwICphZjRfZW50cnk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWFkZHI0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCWFmNF9lbnRyeSA9IG5ldGxibF9kb21oc2hfZ2V0ZW50cnlfYWY0KHNlY2F0dHItPmRvbWFpbiwKKwkJCQkJCSAgICAgICBhZGRyNC0+c2luX2FkZHIuc19hZGRyKTsKKwkJaWYgKGFmNF9lbnRyeSA9PSBOVUxMKSB7CisJCQlyZXRfdmFsID0gLUVOT0VOVDsKKwkJCWdvdG8gY29ubl9zZXRhdHRyX3JldHVybjsKKwkJfQorCQlzd2l0Y2ggKGFmNF9lbnRyeS0+dHlwZSkgeworCQljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKKwkJCXJldF92YWwgPSBjaXBzb192NF9zb2NrX3NldGF0dHIoc2ssCisJCQkJCQkgICBhZjRfZW50cnktPnR5cGVfZGVmLmNpcHNvdjQsCisJCQkJCQkgICBzZWNhdHRyKTsKKwkJCWJyZWFrOworCQljYXNlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEOgorCQkJLyoganVzdCBkZWxldGUgdGhlIHByb3RvY29scyB3ZSBzdXBwb3J0IGZvciByaWdodCBub3cKKwkJCSAqIGJ1dCB3ZSBjb3VsZCByZW1vdmUgb3RoZXIgcHJvdG9jb2xzIGlmIG5lZWRlZCAqLworCQkJY2lwc29fdjRfc29ja19kZWxhdHRyKHNrKTsKKwkJCXJldF92YWwgPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXRfdmFsID0gLUVOT0VOVDsKKwkJfQorCQlicmVhazsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwljYXNlIEFGX0lORVQ2OgorCQkvKiBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IGFueSBJUHY2IGxhYmVsaW5nIHByb3RvY29scyByaWdodAorCQkgKiBub3cgd2UgY2FuIG9wdGltaXplIGV2ZXJ5dGhpbmcgYXdheSB1bnRpbCB3ZSBkbyAqLworCQlyZXRfdmFsID0gMDsKKwkJYnJlYWs7CisjZW5kaWYgLyogSVB2NiAqLworCWRlZmF1bHQ6CisJCXJldF92YWwgPSAwOworCX0KKworY29ubl9zZXRhdHRyX3JldHVybjoKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiBuZXRsYmxfc2tidWZmX3NldGF0dHIgLSBMYWJlbCBhIHBhY2tldCB1c2luZyB0aGUgY29ycmVjdCBwcm90b2NvbAorICogQHNrYjogdGhlIHBhY2tldAorICogQGZhbWlseTogcHJvdG9jb2wgZmFtaWx5CisgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEF0dGFjaCB0aGUgY29ycmVjdCBsYWJlbCB0byB0aGUgZ2l2ZW4gcGFja2V0IHVzaW5nIHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzCisgKiBzcGVjaWZpZWQgaW4gQHNlY2F0dHIuICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKgorICovCitpbnQgbmV0bGJsX3NrYnVmZl9zZXRhdHRyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgIHUxNiBmYW1pbHksCisJCQkgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCit7CisJaW50IHJldF92YWw7CisJc3RydWN0IGlwaGRyICpoZHI0OworCXN0cnVjdCBuZXRsYmxfZG9tYWRkcjRfbWFwICphZjRfZW50cnk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3dpdGNoIChmYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWhkcjQgPSBpcF9oZHIoc2tiKTsKKwkJYWY0X2VudHJ5ID0gbmV0bGJsX2RvbWhzaF9nZXRlbnRyeV9hZjQoc2VjYXR0ci0+ZG9tYWluLAorCQkJCQkJICAgICAgIGhkcjQtPmRhZGRyKTsKKwkJaWYgKGFmNF9lbnRyeSA9PSBOVUxMKSB7CisJCQlyZXRfdmFsID0gLUVOT0VOVDsKKwkJCWdvdG8gc2tidWZmX3NldGF0dHJfcmV0dXJuOworCQl9CisJCXN3aXRjaCAoYWY0X2VudHJ5LT50eXBlKSB7CisJCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgorCQkJcmV0X3ZhbCA9IGNpcHNvX3Y0X3NrYnVmZl9zZXRhdHRyKHNrYiwKKwkJCQkJCSAgIGFmNF9lbnRyeS0+dHlwZV9kZWYuY2lwc292NCwKKwkJCQkJCSAgIHNlY2F0dHIpOworCQkJYnJlYWs7CisJCWNhc2UgTkVUTEJMX05MVFlQRV9VTkxBQkVMRUQ6CisJCQkvKiBqdXN0IGRlbGV0ZSB0aGUgcHJvdG9jb2xzIHdlIHN1cHBvcnQgZm9yIHJpZ2h0IG5vdworCQkJICogYnV0IHdlIGNvdWxkIHJlbW92ZSBvdGhlciBwcm90b2NvbHMgaWYgbmVlZGVkICovCisJCQlyZXRfdmFsID0gY2lwc29fdjRfc2tidWZmX2RlbGF0dHIoc2tiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0X3ZhbCA9IC1FTk9FTlQ7CisJCX0KKwkJYnJlYWs7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJY2FzZSBBRl9JTkVUNjoKKwkJLyogc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBhbnkgSVB2NiBsYWJlbGluZyBwcm90b2NvbHMgcmlnaHQKKwkJICogbm93IHdlIGNhbiBvcHRpbWl6ZSBldmVyeXRoaW5nIGF3YXkgdW50aWwgd2UgZG8gKi8KKwkJcmV0X3ZhbCA9IDA7CisJCWJyZWFrOworI2VuZGlmIC8qIElQdjYgKi8KKwlkZWZhdWx0OgorCQlyZXRfdmFsID0gMDsKKwl9CisKK3NrYnVmZl9zZXRhdHRyX3JldHVybjoKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCiAgKiBuZXRsYmxfc2tidWZmX2dldGF0dHIgLSBEZXRlcm1pbmUgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMgb2YgYSBwYWNrZXQKICAqIEBza2I6IHRoZSBwYWNrZXQKICAqIEBmYW1pbHk6IHByb3RvY29sIGZhbWlseQpAQCAtNTI4LDYgKzYzOSw3IEBACiAgKiBuZXRsYmxfc2tidWZmX2VyciAtIEhhbmRsZSBhIExTTSBlcnJvciBvbiBhIHNrX2J1ZmYKICAqIEBza2I6IHRoZSBwYWNrZXQKICAqIEBlcnJvcjogdGhlIGVycm9yIGNvZGUKKyAqIEBnYXRld2F5OiB0cnVlIGlmIGhvc3QgaXMgYWN0aW5nIGFzIGEgZ2F0ZXdheSwgZmFsc2Ugb3RoZXJ3aXNlCiAgKgogICogRGVzY3JpcHRpb246CiAgKiBEZWFsIHdpdGggYSBMU00gcHJvYmxlbSB3aGVuIGhhbmRsaW5nIHRoZSBwYWNrZXQgaW4gQHNrYiwgdHlwaWNhbGx5IHRoaXMgaXMKQEAgLTUzNSwxMCArNjQ3LDEwIEBACiAgKiBhY2NvcmRpbmcgdG8gdGhlIHBhY2tldCdzIGxhYmVsaW5nIHByb3RvY29sLgogICoKICAqLwotdm9pZCBuZXRsYmxfc2tidWZmX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyb3IpCit2b2lkIG5ldGxibF9za2J1ZmZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnJvciwgaW50IGdhdGV3YXkpCiB7CiAJaWYgKENJUFNPX1Y0X09QVEVYSVNUKHNrYikpCi0JCWNpcHNvX3Y0X2Vycm9yKHNrYiwgZXJyb3IsIDApOworCQljaXBzb192NF9lcnJvcihza2IsIGVycm9yLCBnYXRld2F5KTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuYwppbmRleCA0NGJlNWQ1Li5lZTc2OWVjIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqLwogCiAvKgotICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwNgorICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwNiwgMjAwOAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTMyLDkgKzMyLDEzIEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGxhYmVsLmg+CiAjaW5jbHVkZSA8bmV0L2NpcHNvX2lwdjQuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC03MSw2ICs3NSwzMDEgQEAKIH07CiAKIC8qCisgKiBIZWxwZXIgRnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBuZXRsYmxfbWdtdF9hZGQgLSBIYW5kbGUgYW4gQUREIG1lc3NhZ2UKKyAqIEBpbmZvOiB0aGUgR2VuZXJpYyBORVRMSU5LIGluZm8gYmxvY2sKKyAqIEBhdWRpdF9pbmZvOiBOZXRMYWJlbCBhdWRpdCBpbmZvcm1hdGlvbgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgQUREIGFuZCBBRERERUYgbWVzc2FnZXMgdG8gYWRkIHRoZSBkb21haW4gbWFwcGluZ3MKKyAqIGZyb20gdGhlIG1lc3NhZ2UgdG8gdGhlIGhhc2ggdGFibGUuICBTZWUgbmV0bGFiZWwuaCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUKKyAqIG1lc3NhZ2UgZm9ybWF0LiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICoKKyAqLworc3RhdGljIGludCBuZXRsYmxfbWdtdF9hZGRfY29tbW9uKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKQoreworCWludCByZXRfdmFsID0gLUVJTlZBTDsKKwlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0bGJsX2RvbWFkZHJfbWFwICphZGRybWFwID0gTlVMTDsKKwlzdHJ1Y3QgY2lwc29fdjRfZG9pICpjaXBzb3Y0ID0gTlVMTDsKKwl1MzIgdG1wX3ZhbDsKKworCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVudHJ5ID09IE5VTEwpIHsKKwkJcmV0X3ZhbCA9IC1FTk9NRU07CisJCWdvdG8gYWRkX2ZhaWx1cmU7CisJfQorCWVudHJ5LT50eXBlID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfUFJPVE9DT0xdKTsKKwlpZiAoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfRE9NQUlOXSkgeworCQlzaXplX3QgdG1wX3NpemUgPSBubGFfbGVuKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0RPTUFJTl0pOworCQllbnRyeS0+ZG9tYWluID0ga21hbGxvYyh0bXBfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlbnRyeS0+ZG9tYWluID09IE5VTEwpIHsKKwkJCXJldF92YWwgPSAtRU5PTUVNOworCQkJZ290byBhZGRfZmFpbHVyZTsKKwkJfQorCQlubGFfc3RybGNweShlbnRyeS0+ZG9tYWluLAorCQkJICAgIGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0RPTUFJTl0sIHRtcF9zaXplKTsKKwl9CisKKwkvKiBOT1RFOiBpbnRlcm5hbGx5IHdlIGFsbG93L3VzZSBhIGVudHJ5LT50eXBlIHZhbHVlIG9mCisJICogICAgICAgTkVUTEJMX05MVFlQRV9BRERSU0VMRUNUIGJ1dCB3ZSBkb24ndCBjdXJyZW50bHkgYWxsb3cgdXNlcnMKKwkgKiAgICAgICB0byBwYXNzIHRoYXQgYXMgYSBwcm90b2NvbCB2YWx1ZSBiZWNhdXNlIHdlIG5lZWQgdG8ga25vdyB0aGUKKwkgKiAgICAgICAicmVhbCIgcHJvdG9jb2wgKi8KKworCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKKwljYXNlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEOgorCQlicmVhazsKKwljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKKwkJaWYgKCFpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9DVjRET0ldKQorCQkJZ290byBhZGRfZmFpbHVyZTsKKworCQl0bXBfdmFsID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfQ1Y0RE9JXSk7CisJCWNpcHNvdjQgPSBjaXBzb192NF9kb2lfZ2V0ZGVmKHRtcF92YWwpOworCQlpZiAoY2lwc292NCA9PSBOVUxMKQorCQkJZ290byBhZGRfZmFpbHVyZTsKKwkJZW50cnktPnR5cGVfZGVmLmNpcHNvdjQgPSBjaXBzb3Y0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGFkZF9mYWlsdXJlOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY0QUREUl0pIHsKKwkJc3RydWN0IGluX2FkZHIgKmFkZHI7CisJCXN0cnVjdCBpbl9hZGRyICptYXNrOworCQlzdHJ1Y3QgbmV0bGJsX2RvbWFkZHI0X21hcCAqbWFwOworCisJCWFkZHJtYXAgPSBremFsbG9jKHNpemVvZigqYWRkcm1hcCksIEdGUF9LRVJORUwpOworCQlpZiAoYWRkcm1hcCA9PSBOVUxMKSB7CisJCQlyZXRfdmFsID0gLUVOT01FTTsKKwkJCWdvdG8gYWRkX2ZhaWx1cmU7CisJCX0KKwkJSU5JVF9MSVNUX0hFQUQoJmFkZHJtYXAtPmxpc3Q0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmFkZHJtYXAtPmxpc3Q2KTsKKworCQlpZiAobmxhX2xlbihpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY0QUREUl0pICE9CisJCSAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSB7CisJCQlyZXRfdmFsID0gLUVJTlZBTDsKKwkJCWdvdG8gYWRkX2ZhaWx1cmU7CisJCX0KKwkJaWYgKG5sYV9sZW4oaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNE1BU0tdKSAhPQorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgeworCQkJcmV0X3ZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGFkZF9mYWlsdXJlOworCQl9CisJCWFkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY0QUREUl0pOworCQltYXNrID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNE1BU0tdKTsKKworCQltYXAgPSBremFsbG9jKHNpemVvZigqbWFwKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChtYXAgPT0gTlVMTCkgeworCQkJcmV0X3ZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGFkZF9mYWlsdXJlOworCQl9CisJCW1hcC0+bGlzdC5hZGRyID0gYWRkci0+c19hZGRyICYgbWFzay0+c19hZGRyOworCQltYXAtPmxpc3QubWFzayA9IG1hc2stPnNfYWRkcjsKKwkJbWFwLT5saXN0LnZhbGlkID0gMTsKKwkJbWFwLT50eXBlID0gZW50cnktPnR5cGU7CisJCWlmIChjaXBzb3Y0KQorCQkJbWFwLT50eXBlX2RlZi5jaXBzb3Y0ID0gY2lwc292NDsKKworCQlyZXRfdmFsID0gbmV0bGJsX2FmNGxpc3RfYWRkKCZtYXAtPmxpc3QsICZhZGRybWFwLT5saXN0NCk7CisJCWlmIChyZXRfdmFsICE9IDApIHsKKwkJCWtmcmVlKG1hcCk7CisJCQlnb3RvIGFkZF9mYWlsdXJlOworCQl9CisKKwkJZW50cnktPnR5cGUgPSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1Q7CisJCWVudHJ5LT50eXBlX2RlZi5hZGRyc2VsID0gYWRkcm1hcDsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwl9IGVsc2UgaWYgKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjZBRERSXSkgeworCQlzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7CisJCXN0cnVjdCBpbjZfYWRkciAqbWFzazsKKwkJc3RydWN0IG5ldGxibF9kb21hZGRyNl9tYXAgKm1hcDsKKworCQlhZGRybWFwID0ga3phbGxvYyhzaXplb2YoKmFkZHJtYXApLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGFkZHJtYXAgPT0gTlVMTCkgeworCQkJcmV0X3ZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGFkZF9mYWlsdXJlOworCQl9CisJCUlOSVRfTElTVF9IRUFEKCZhZGRybWFwLT5saXN0NCk7CisJCUlOSVRfTElTVF9IRUFEKCZhZGRybWFwLT5saXN0Nik7CisKKwkJaWYgKG5sYV9sZW4oaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNkFERFJdKSAhPQorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIHsKKwkJCXJldF92YWwgPSAtRUlOVkFMOworCQkJZ290byBhZGRfZmFpbHVyZTsKKwkJfQorCQlpZiAobmxhX2xlbihpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY2TUFTS10pICE9CisJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgeworCQkJcmV0X3ZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGFkZF9mYWlsdXJlOworCQl9CisJCWFkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY2QUREUl0pOworCQltYXNrID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNk1BU0tdKTsKKworCQltYXAgPSBremFsbG9jKHNpemVvZigqbWFwKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChtYXAgPT0gTlVMTCkgeworCQkJcmV0X3ZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGFkZF9mYWlsdXJlOworCQl9CisJCWlwdjZfYWRkcl9jb3B5KCZtYXAtPmxpc3QuYWRkciwgYWRkcik7CisJCW1hcC0+bGlzdC5hZGRyLnM2X2FkZHIzMlswXSAmPSBtYXNrLT5zNl9hZGRyMzJbMF07CisJCW1hcC0+bGlzdC5hZGRyLnM2X2FkZHIzMlsxXSAmPSBtYXNrLT5zNl9hZGRyMzJbMV07CisJCW1hcC0+bGlzdC5hZGRyLnM2X2FkZHIzMlsyXSAmPSBtYXNrLT5zNl9hZGRyMzJbMl07CisJCW1hcC0+bGlzdC5hZGRyLnM2X2FkZHIzMlszXSAmPSBtYXNrLT5zNl9hZGRyMzJbM107CisJCWlwdjZfYWRkcl9jb3B5KCZtYXAtPmxpc3QubWFzaywgbWFzayk7CisJCW1hcC0+bGlzdC52YWxpZCA9IDE7CisJCW1hcC0+dHlwZSA9IGVudHJ5LT50eXBlOworCisJCXJldF92YWwgPSBuZXRsYmxfYWY2bGlzdF9hZGQoJm1hcC0+bGlzdCwgJmFkZHJtYXAtPmxpc3Q2KTsKKwkJaWYgKHJldF92YWwgIT0gMCkgeworCQkJa2ZyZWUobWFwKTsKKwkJCWdvdG8gYWRkX2ZhaWx1cmU7CisJCX0KKworCQllbnRyeS0+dHlwZSA9IE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVDsKKwkJZW50cnktPnR5cGVfZGVmLmFkZHJzZWwgPSBhZGRybWFwOworI2VuZGlmIC8qIElQdjYgKi8KKwl9CisKKwlyZXRfdmFsID0gbmV0bGJsX2RvbWhzaF9hZGQoZW50cnksIGF1ZGl0X2luZm8pOworCWlmIChyZXRfdmFsICE9IDApCisJCWdvdG8gYWRkX2ZhaWx1cmU7CisKKwlyZXR1cm4gMDsKKworYWRkX2ZhaWx1cmU6CisJaWYgKGNpcHNvdjQpCisJCWNpcHNvX3Y0X2RvaV9wdXRkZWYoY2lwc292NCk7CisJaWYgKGVudHJ5KQorCQlrZnJlZShlbnRyeS0+ZG9tYWluKTsKKwlrZnJlZShhZGRybWFwKTsKKwlrZnJlZShlbnRyeSk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogbmV0bGJsX21nbXRfbGlzdGVudHJ5IC0gTGlzdCBhIE5ldExhYmVsL0xTTSBkb21haW4gbWFwIGVudHJ5CisgKiBAc2tiOiB0aGUgTkVUTElOSyBidWZmZXIKKyAqIEBlbnRyeTogdGhlIG1hcCBlbnRyeQorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmdW5jdGlvbiBpcyBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBMSVNUQUxMIGFuZCBMSVNUREVGIGNvbW1hbmQKKyAqIGhhbmRsZXJzLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJpbGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFJDVSByZWFkIGxvY2sKKyAqIGlzIGhlbGQuICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKgorICovCitzdGF0aWMgaW50IG5ldGxibF9tZ210X2xpc3RlbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5KQoreworCWludCByZXRfdmFsOworCXN0cnVjdCBubGF0dHIgKm5sYV9hOworCXN0cnVjdCBubGF0dHIgKm5sYV9iOworCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqaXRlcjQ7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICppdGVyNjsKKyNlbmRpZgorCisJaWYgKGVudHJ5LT5kb21haW4gIT0gTlVMTCkgeworCQlyZXRfdmFsID0gbmxhX3B1dF9zdHJpbmcoc2tiLAorCQkJCQkgTkxCTF9NR01UX0FfRE9NQUlOLCBlbnRyeS0+ZG9tYWluKTsKKwkJaWYgKHJldF92YWwgIT0gMCkKKwkJCXJldHVybiByZXRfdmFsOworCX0KKworCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKKwljYXNlIE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVDoKKwkJbmxhX2EgPSBubGFfbmVzdF9zdGFydChza2IsIE5MQkxfTUdNVF9BX1NFTEVDVE9STElTVCk7CisJCWlmIChubGFfYSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJbmV0bGJsX2FmNGxpc3RfZm9yZWFjaF9yY3UoaXRlcjQsCisJCQkJCSAgICZlbnRyeS0+dHlwZV9kZWYuYWRkcnNlbC0+bGlzdDQpIHsKKwkJCXN0cnVjdCBuZXRsYmxfZG9tYWRkcjRfbWFwICptYXA0OworCQkJc3RydWN0IGluX2FkZHIgYWRkcl9zdHJ1Y3Q7CisKKwkJCW5sYV9iID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBOTEJMX01HTVRfQV9BRERSU0VMRUNUT1IpOworCQkJaWYgKG5sYV9iID09IE5VTEwpCisJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCWFkZHJfc3RydWN0LnNfYWRkciA9IGl0ZXI0LT5hZGRyOworCQkJcmV0X3ZhbCA9IG5sYV9wdXQoc2tiLCBOTEJMX01HTVRfQV9JUFY0QUREUiwKKwkJCQkJICBzaXplb2Yoc3RydWN0IGluX2FkZHIpLAorCQkJCQkgICZhZGRyX3N0cnVjdCk7CisJCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJCXJldHVybiByZXRfdmFsOworCQkJYWRkcl9zdHJ1Y3Quc19hZGRyID0gaXRlcjQtPm1hc2s7CisJCQlyZXRfdmFsID0gbmxhX3B1dChza2IsIE5MQkxfTUdNVF9BX0lQVjRNQVNLLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgaW5fYWRkciksCisJCQkJCSAgJmFkZHJfc3RydWN0KTsKKwkJCWlmIChyZXRfdmFsICE9IDApCisJCQkJcmV0dXJuIHJldF92YWw7CisJCQltYXA0ID0gbmV0bGJsX2RvbWhzaF9hZGRyNF9lbnRyeShpdGVyNCk7CisJCQlyZXRfdmFsID0gbmxhX3B1dF91MzIoc2tiLCBOTEJMX01HTVRfQV9QUk9UT0NPTCwKKwkJCQkJICAgICAgbWFwNC0+dHlwZSk7CisJCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJCXJldHVybiByZXRfdmFsOworCQkJc3dpdGNoIChtYXA0LT50eXBlKSB7CisJCQljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKKwkJCQlyZXRfdmFsID0gbmxhX3B1dF91MzIoc2tiLCBOTEJMX01HTVRfQV9DVjRET0ksCisJCQkJCQkgIG1hcDQtPnR5cGVfZGVmLmNpcHNvdjQtPmRvaSk7CisJCQkJaWYgKHJldF92YWwgIT0gMCkKKwkJCQkJcmV0dXJuIHJldF92YWw7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCW5sYV9uZXN0X2VuZChza2IsIG5sYV9iKTsKKwkJfQorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCQluZXRsYmxfYWY2bGlzdF9mb3JlYWNoX3JjdShpdGVyNiwKKwkJCQkJICAgJmVudHJ5LT50eXBlX2RlZi5hZGRyc2VsLT5saXN0NikgeworCQkJc3RydWN0IG5ldGxibF9kb21hZGRyNl9tYXAgKm1hcDY7CisKKwkJCW5sYV9iID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBOTEJMX01HTVRfQV9BRERSU0VMRUNUT1IpOworCQkJaWYgKG5sYV9iID09IE5VTEwpCisJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCXJldF92YWwgPSBubGFfcHV0KHNrYiwgTkxCTF9NR01UX0FfSVBWNkFERFIsCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksCisJCQkJCSAgJml0ZXI2LT5hZGRyKTsKKwkJCWlmIChyZXRfdmFsICE9IDApCisJCQkJcmV0dXJuIHJldF92YWw7CisJCQlyZXRfdmFsID0gbmxhX3B1dChza2IsIE5MQkxfTUdNVF9BX0lQVjZNQVNLLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLAorCQkJCQkgICZpdGVyNi0+bWFzayk7CisJCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJCXJldHVybiByZXRfdmFsOworCQkJbWFwNiA9IG5ldGxibF9kb21oc2hfYWRkcjZfZW50cnkoaXRlcjYpOworCQkJcmV0X3ZhbCA9IG5sYV9wdXRfdTMyKHNrYiwgTkxCTF9NR01UX0FfUFJPVE9DT0wsCisJCQkJCSAgICAgIG1hcDYtPnR5cGUpOworCQkJaWYgKHJldF92YWwgIT0gMCkKKwkJCQlyZXR1cm4gcmV0X3ZhbDsKKworCQkJbmxhX25lc3RfZW5kKHNrYiwgbmxhX2IpOworCQl9CisjZW5kaWYgLyogSVB2NiAqLworCisJCW5sYV9uZXN0X2VuZChza2IsIG5sYV9hKTsKKwkJYnJlYWs7CisJY2FzZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRDoKKwkJcmV0X3ZhbCA9IG5sYV9wdXRfdTMyKHNrYiwgTkxCTF9NR01UX0FfUFJPVE9DT0wsIGVudHJ5LT50eXBlKTsKKwkJYnJlYWs7CisJY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6CisJCXJldF92YWwgPSBubGFfcHV0X3UzMihza2IsIE5MQkxfTUdNVF9BX1BST1RPQ09MLCBlbnRyeS0+dHlwZSk7CisJCWlmIChyZXRfdmFsICE9IDApCisJCQlyZXR1cm4gcmV0X3ZhbDsKKwkJcmV0X3ZhbCA9IG5sYV9wdXRfdTMyKHNrYiwgTkxCTF9NR01UX0FfQ1Y0RE9JLAorCQkJCSAgICAgIGVudHJ5LT50eXBlX2RlZi5jaXBzb3Y0LT5kb2kpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKICAqIE5ldExhYmVsIENvbW1hbmQgSGFuZGxlcnMKICAqLwogCkBAIC04Nyw2NyArMzg2LDIzIEBACiAgKi8KIHN0YXRpYyBpbnQgbmV0bGJsX21nbXRfYWRkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0JaW50IHJldF92YWwgPSAtRUlOVkFMOwotCXN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnkgPSBOVUxMOwotCXNpemVfdCB0bXBfc2l6ZTsKLQl1MzIgdG1wX3ZhbDsKIAlzdHJ1Y3QgbmV0bGJsX2F1ZGl0IGF1ZGl0X2luZm87CiAKLQlpZiAoIWluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0RPTUFJTl0gfHwKLQkgICAgIWluZm8tPmF0dHJzW05MQkxfTUdNVF9BX1BST1RPQ09MXSkKLQkJZ290byBhZGRfZmFpbHVyZTsKKwlpZiAoKCFpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9ET01BSU5dKSB8fAorCSAgICAoIWluZm8tPmF0dHJzW05MQkxfTUdNVF9BX1BST1RPQ09MXSkgfHwKKwkgICAgKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjRBRERSXSAmJgorCSAgICAgaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNkFERFJdKSB8fAorCSAgICAoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNE1BU0tdICYmCisJICAgICBpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY2TUFTS10pIHx8CisJICAgICgoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNEFERFJdICE9IE5VTEwpIF4KKwkgICAgIChpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY0TUFTS10gIT0gTlVMTCkpIHx8CisJICAgICgoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNkFERFJdICE9IE5VTEwpIF4KKwkgICAgIChpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY2TUFTS10gIT0gTlVMTCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCW5ldGxibF9uZXRsaW5rX2F1ZGl0aW5mbyhza2IsICZhdWRpdF9pbmZvKTsKIAotCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVudHJ5ID09IE5VTEwpIHsKLQkJcmV0X3ZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gYWRkX2ZhaWx1cmU7Ci0JfQotCXRtcF9zaXplID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9ET01BSU5dKTsKLQllbnRyeS0+ZG9tYWluID0ga21hbGxvYyh0bXBfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVudHJ5LT5kb21haW4gPT0gTlVMTCkgewotCQlyZXRfdmFsID0gLUVOT01FTTsKLQkJZ290byBhZGRfZmFpbHVyZTsKLQl9Ci0JZW50cnktPnR5cGUgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9QUk9UT0NPTF0pOwotCW5sYV9zdHJsY3B5KGVudHJ5LT5kb21haW4sIGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0RPTUFJTl0sIHRtcF9zaXplKTsKLQotCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEOgotCQlyZXRfdmFsID0gbmV0bGJsX2RvbWhzaF9hZGQoZW50cnksICZhdWRpdF9pbmZvKTsKLQkJYnJlYWs7Ci0JY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6Ci0JCWlmICghaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfQ1Y0RE9JXSkKLQkJCWdvdG8gYWRkX2ZhaWx1cmU7Ci0KLQkJdG1wX3ZhbCA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0NWNERPSV0pOwotCQkvKiBXZSBzaG91bGQgYmUgaG9sZGluZyBhIHJjdV9yZWFkX2xvY2soKSBoZXJlIHdoaWxlIHdlIGhvbGQKLQkJICogdGhlIHJlc3VsdCBidXQgc2luY2UgdGhlIGVudHJ5IHdpbGwgYWx3YXlzIGJlIGRlbGV0ZWQgd2hlbgotCQkgKiB0aGUgQ0lQU08gRE9JIGlzIGRlbGV0ZWQgd2UgYXJlbid0IGdvaW5nIHRvIGtlZXAgdGhlCi0JCSAqIGxvY2suICovCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZW50cnktPnR5cGVfZGVmLmNpcHNvdjQgPSBjaXBzb192NF9kb2lfZ2V0ZGVmKHRtcF92YWwpOwotCQlpZiAoZW50cnktPnR5cGVfZGVmLmNpcHNvdjQgPT0gTlVMTCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlnb3RvIGFkZF9mYWlsdXJlOwotCQl9Ci0JCXJldF92YWwgPSBuZXRsYmxfZG9taHNoX2FkZChlbnRyeSwgJmF1ZGl0X2luZm8pOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZ290byBhZGRfZmFpbHVyZTsKLQl9Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJZ290byBhZGRfZmFpbHVyZTsKLQotCXJldHVybiAwOwotCi1hZGRfZmFpbHVyZToKLQlpZiAoZW50cnkpCi0JCWtmcmVlKGVudHJ5LT5kb21haW4pOwotCWtmcmVlKGVudHJ5KTsKLQlyZXR1cm4gcmV0X3ZhbDsKKwlyZXR1cm4gbmV0bGJsX21nbXRfYWRkX2NvbW1vbihpbmZvLCAmYXVkaXRfaW5mbyk7CiB9CiAKIC8qKgpAQCAtMTk4LDIzICs0NTMsOSBAQAogCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gbGlzdGFsbF9jYl9mYWlsdXJlOwogCi0JcmV0X3ZhbCA9IG5sYV9wdXRfc3RyaW5nKGNiX2FyZy0+c2tiLAotCQkJCSBOTEJMX01HTVRfQV9ET01BSU4sCi0JCQkJIGVudHJ5LT5kb21haW4pOworCXJldF92YWwgPSBuZXRsYmxfbWdtdF9saXN0ZW50cnkoY2JfYXJnLT5za2IsIGVudHJ5KTsKIAlpZiAocmV0X3ZhbCAhPSAwKQogCQlnb3RvIGxpc3RhbGxfY2JfZmFpbHVyZTsKLQlyZXRfdmFsID0gbmxhX3B1dF91MzIoY2JfYXJnLT5za2IsIE5MQkxfTUdNVF9BX1BST1RPQ09MLCBlbnRyeS0+dHlwZSk7Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJZ290byBsaXN0YWxsX2NiX2ZhaWx1cmU7Ci0Jc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgotCQlyZXRfdmFsID0gbmxhX3B1dF91MzIoY2JfYXJnLT5za2IsCi0JCQkJICAgICAgTkxCTF9NR01UX0FfQ1Y0RE9JLAotCQkJCSAgICAgIGVudHJ5LT50eXBlX2RlZi5jaXBzb3Y0LT5kb2kpOwotCQlpZiAocmV0X3ZhbCAhPSAwKQotCQkJZ290byBsaXN0YWxsX2NiX2ZhaWx1cmU7Ci0JCWJyZWFrOwotCX0KIAogCWNiX2FyZy0+c2VxKys7CiAJcmV0dXJuIGdlbmxtc2dfZW5kKGNiX2FyZy0+c2tiLCBkYXRhKTsKQEAgLTI2OCw1NiArNTA5LDIyIEBACiAgKi8KIHN0YXRpYyBpbnQgbmV0bGJsX21nbXRfYWRkZGVmKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0JaW50IHJldF92YWwgPSAtRUlOVkFMOwotCXN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnkgPSBOVUxMOwotCXUzMiB0bXBfdmFsOwogCXN0cnVjdCBuZXRsYmxfYXVkaXQgYXVkaXRfaW5mbzsKIAotCWlmICghaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfUFJPVE9DT0xdKQotCQlnb3RvIGFkZGRlZl9mYWlsdXJlOworCWlmICgoIWluZm8tPmF0dHJzW05MQkxfTUdNVF9BX1BST1RPQ09MXSkgfHwKKwkgICAgKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjRBRERSXSAmJgorCSAgICAgaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNkFERFJdKSB8fAorCSAgICAoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNE1BU0tdICYmCisJICAgICBpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY2TUFTS10pIHx8CisJICAgICgoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNEFERFJdICE9IE5VTEwpIF4KKwkgICAgIChpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY0TUFTS10gIT0gTlVMTCkpIHx8CisJICAgICgoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNkFERFJdICE9IE5VTEwpIF4KKwkgICAgIChpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY2TUFTS10gIT0gTlVMTCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCW5ldGxibF9uZXRsaW5rX2F1ZGl0aW5mbyhza2IsICZhdWRpdF9pbmZvKTsKIAotCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVudHJ5ID09IE5VTEwpIHsKLQkJcmV0X3ZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gYWRkZGVmX2ZhaWx1cmU7Ci0JfQotCWVudHJ5LT50eXBlID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfUFJPVE9DT0xdKTsKLQotCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEOgotCQlyZXRfdmFsID0gbmV0bGJsX2RvbWhzaF9hZGRfZGVmYXVsdChlbnRyeSwgJmF1ZGl0X2luZm8pOwotCQlicmVhazsKLQljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKLQkJaWYgKCFpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9DVjRET0ldKQotCQkJZ290byBhZGRkZWZfZmFpbHVyZTsKLQotCQl0bXBfdmFsID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfQ1Y0RE9JXSk7Ci0JCS8qIFdlIHNob3VsZCBiZSBob2xkaW5nIGEgcmN1X3JlYWRfbG9jaygpIGhlcmUgd2hpbGUgd2UgaG9sZAotCQkgKiB0aGUgcmVzdWx0IGJ1dCBzaW5jZSB0aGUgZW50cnkgd2lsbCBhbHdheXMgYmUgZGVsZXRlZCB3aGVuCi0JCSAqIHRoZSBDSVBTTyBET0kgaXMgZGVsZXRlZCB3ZSBhcmVuJ3QgZ29pbmcgdG8ga2VlcCB0aGUKLQkJICogbG9jay4gKi8KLQkJcmN1X3JlYWRfbG9jaygpOwotCQllbnRyeS0+dHlwZV9kZWYuY2lwc292NCA9IGNpcHNvX3Y0X2RvaV9nZXRkZWYodG1wX3ZhbCk7Ci0JCWlmIChlbnRyeS0+dHlwZV9kZWYuY2lwc292NCA9PSBOVUxMKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWdvdG8gYWRkZGVmX2ZhaWx1cmU7Ci0JCX0KLQkJcmV0X3ZhbCA9IG5ldGxibF9kb21oc2hfYWRkX2RlZmF1bHQoZW50cnksICZhdWRpdF9pbmZvKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWdvdG8gYWRkZGVmX2ZhaWx1cmU7Ci0JfQotCWlmIChyZXRfdmFsICE9IDApCi0JCWdvdG8gYWRkZGVmX2ZhaWx1cmU7Ci0KLQlyZXR1cm4gMDsKLQotYWRkZGVmX2ZhaWx1cmU6Ci0Ja2ZyZWUoZW50cnkpOwotCXJldHVybiByZXRfdmFsOworCXJldHVybiBuZXRsYmxfbWdtdF9hZGRfY29tbW9uKGluZm8sICZhdWRpdF9pbmZvKTsKIH0KIAogLyoqCkBAIC0zNzEsMTkgKzU3OCwxMCBAQAogCQlyZXRfdmFsID0gLUVOT0VOVDsKIAkJZ290byBsaXN0ZGVmX2ZhaWx1cmVfbG9jazsKIAl9Ci0JcmV0X3ZhbCA9IG5sYV9wdXRfdTMyKGFuc19za2IsIE5MQkxfTUdNVF9BX1BST1RPQ09MLCBlbnRyeS0+dHlwZSk7Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJZ290byBsaXN0ZGVmX2ZhaWx1cmVfbG9jazsKLQlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0JY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6Ci0JCXJldF92YWwgPSBubGFfcHV0X3UzMihhbnNfc2tiLAotCQkJCSAgICAgIE5MQkxfTUdNVF9BX0NWNERPSSwKLQkJCQkgICAgICBlbnRyeS0+dHlwZV9kZWYuY2lwc292NC0+ZG9pKTsKLQkJaWYgKHJldF92YWwgIT0gMCkKLQkJCWdvdG8gbGlzdGRlZl9mYWlsdXJlX2xvY2s7Ci0JCWJyZWFrOwotCX0KKwlyZXRfdmFsID0gbmV0bGJsX21nbXRfbGlzdGVudHJ5KGFuc19za2IsIGVudHJ5KTsKIAlyY3VfcmVhZF91bmxvY2soKTsKKwlpZiAocmV0X3ZhbCAhPSAwKQorCQlnb3RvIGxpc3RkZWZfZmFpbHVyZTsKIAogCWdlbmxtc2dfZW5kKGFuc19za2IsIGRhdGEpOwogCXJldHVybiBnZW5sbXNnX3JlcGx5KGFuc19za2IsIGluZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuaCBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmgKaW5kZXggYTQzYmZmMS4uMDVkOTY0MyAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuaAorKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5oCkBAIC00NSw2ICs0NSwxNiBAQAogICogICAgIE5MQkxfTUdNVF9BX0RPTUFJTgogICogICAgIE5MQkxfTUdNVF9BX1BST1RPQ09MCiAgKgorICogICBJZiBJUHY0IGlzIHNwZWNpZmllZCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIHJlcXVpcmVkOgorICoKKyAqICAgICBOTEJMX01HTVRfQV9JUFY0QUREUgorICogICAgIE5MQkxfTUdNVF9BX0lQVjRNQVNLCisgKgorICogICBJZiBJUHY2IGlzIHNwZWNpZmllZCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIHJlcXVpcmVkOgorICoKKyAqICAgICBOTEJMX01HTVRfQV9JUFY2QUREUgorICogICAgIE5MQkxfTUdNVF9BX0lQVjZNQVNLCisgKgogICogICBJZiB1c2luZyBORVRMQkxfTkxUWVBFX0NJUFNPVjQgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZDoKICAqCiAgKiAgICAgTkxCTF9NR01UX0FfQ1Y0RE9JCkBAIC02OCwxMyArNzgsMjQgQEAKICAqICAgUmVxdWlyZWQgYXR0cmlidXRlczoKICAqCiAgKiAgICAgTkxCTF9NR01UX0FfRE9NQUlOCisgKgorICogICBJZiB0aGUgSVAgYWRkcmVzcyBzZWxlY3RvcnMgYXJlIG5vdCB1c2VkIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlIGlzCisgKiAgIHJlcXVpcmVkOgorICoKICAqICAgICBOTEJMX01HTVRfQV9QUk9UT0NPTAogICoKLSAqICAgSWYgdXNpbmcgTkVUTEJMX05MVFlQRV9DSVBTT1Y0IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgcmVxdWlyZWQ6CisgKiAgIElmIHRoZSBJUCBhZGRyZXNzIHNlbGVjdG9ycyBhcmUgdXNlZCB0aGVuIHRoZSBmb2xsb3dpbmcgYXR0cml0YnV0ZSBpcworICogICByZXF1aXJlZDoKKyAqCisgKiAgICAgTkxCTF9NR01UX0FfU0VMRUNUT1JMSVNUCisgKgorICogICBJZiB0aGUgbWFwcGluZyBpcyB1c2luZyB0aGUgTkVUTEJMX05MVFlQRV9DSVBTT1Y0IHR5cGUgdGhlbiB0aGUgZm9sbG93aW5nCisgKiAgIGF0dHJpYnV0ZXMgYXJlIHJlcXVpcmVkOgogICoKICAqICAgICBOTEJMX01HTVRfQV9DVjRET0kKICAqCi0gKiAgIElmIHVzaW5nIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEIG5vIG90aGVyIGF0dHJpYnV0ZXMgYXJlIHJlcXVpcmVkLgorICogICBJZiB0aGUgbWFwcGluZyBpcyB1c2luZyB0aGUgTkVUTEJMX05MVFlQRV9VTkxBQkVMRUQgdHlwZSBubyBvdGhlcgorICogICBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZC4KICAqCiAgKiBvIEFERERFRjoKICAqICAgU2VudCBieSBhbiBhcHBsaWNhdGlvbiB0byBzZXQgdGhlIGRlZmF1bHQgZG9tYWluIG1hcHBpbmcgZm9yIHRoZSBOZXRMYWJlbApAQCAtMTAwLDE1ICsxMjEsMjMgQEAKICAqICAgYXBwbGljYXRpb24gdGhlcmUgaXMgbm8gcGF5bG9hZC4gIE9uIHN1Y2Nlc3MgdGhlIGtlcm5lbCBzaG91bGQgc2VuZCBhCiAgKiAgIHJlc3BvbnNlIHVzaW5nIHRoZSBmb2xsb3dpbmcgZm9ybWF0LgogICoKLSAqICAgUmVxdWlyZWQgYXR0cmlidXRlczoKKyAqICAgSWYgdGhlIElQIGFkZHJlc3Mgc2VsZWN0b3JzIGFyZSBub3QgdXNlZCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZSBpcworICogICByZXF1aXJlZDoKICAqCiAgKiAgICAgTkxCTF9NR01UX0FfUFJPVE9DT0wKICAqCi0gKiAgIElmIHVzaW5nIE5FVExCTF9OTFRZUEVfQ0lQU09WNCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIHJlcXVpcmVkOgorICogICBJZiB0aGUgSVAgYWRkcmVzcyBzZWxlY3RvcnMgYXJlIHVzZWQgdGhlbiB0aGUgZm9sbG93aW5nIGF0dHJpdGJ1dGUgaXMKKyAqICAgcmVxdWlyZWQ6CisgKgorICogICAgIE5MQkxfTUdNVF9BX1NFTEVDVE9STElTVAorICoKKyAqICAgSWYgdGhlIG1hcHBpbmcgaXMgdXNpbmcgdGhlIE5FVExCTF9OTFRZUEVfQ0lQU09WNCB0eXBlIHRoZW4gdGhlIGZvbGxvd2luZworICogICBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZDoKICAqCiAgKiAgICAgTkxCTF9NR01UX0FfQ1Y0RE9JCiAgKgotICogICBJZiB1c2luZyBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRCBubyBvdGhlciBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZC4KKyAqICAgSWYgdGhlIG1hcHBpbmcgaXMgdXNpbmcgdGhlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEIHR5cGUgbm8gb3RoZXIKKyAqICAgYXR0cmlidXRlcyBhcmUgcmVxdWlyZWQuCiAgKgogICogbyBQUk9UT0NPTFM6CiAgKiAgIFNlbnQgYnkgYW4gYXBwbGljYXRpb24gdG8gcmVxdWVzdCBhIGxpc3Qgb2YgY29uZmlndXJlZCBOZXRMYWJlbCBwcm90b2NvbHMKQEAgLTE2Miw2ICsxOTEsMjYgQEAKIAlOTEJMX01HTVRfQV9DVjRET0ksCiAJLyogKE5MQV9VMzIpCiAJICogdGhlIENJUFNPdjQgRE9JIHZhbHVlICovCisJTkxCTF9NR01UX0FfSVBWNkFERFIsCisJLyogKE5MQV9CSU5BUlksIHN0cnVjdCBpbjZfYWRkcikKKwkgKiBhbiBJUHY2IGFkZHJlc3MgKi8KKwlOTEJMX01HTVRfQV9JUFY2TUFTSywKKwkvKiAoTkxBX0JJTkFSWSwgc3RydWN0IGluNl9hZGRyKQorCSAqIGFuIElQdjYgYWRkcmVzcyBtYXNrICovCisJTkxCTF9NR01UX0FfSVBWNEFERFIsCisJLyogKE5MQV9CSU5BUlksIHN0cnVjdCBpbl9hZGRyKQorCSAqIGFuIElQdjQgYWRkcmVzcyAqLworCU5MQkxfTUdNVF9BX0lQVjRNQVNLLAorCS8qIChOTEFfQklOQVJZLCBzdHJ1Y3QgaW5fYWRkcikKKwkgKiBhbmQgSVB2NCBhZGRyZXNzIG1hc2sgKi8KKwlOTEJMX01HTVRfQV9BRERSU0VMRUNUT1IsCisJLyogKE5MQV9ORVNURUQpCisJICogYW4gSVAgYWRkcmVzcyBzZWxlY3RvciwgbXVzdCBjb250YWluIGFuIGFkZHJlc3MsIG1hc2ssIGFuZCBwcm90b2NvbAorCSAqIGF0dHJpYnV0ZSBwbHVzIGFueSBwcm90b2NvbCBzcGVjaWZpYyBhdHRyaWJ1dGVzICovCisJTkxCTF9NR01UX0FfU0VMRUNUT1JMSVNULAorCS8qIChOTEFfTkVTVEVEKQorCSAqIHRoZSBzZWxlY3RvciBsaXN0LCB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZQorCSAqIE5MQkxfTUdNVF9BX0FERFJTRUxFQ1RPUiBhdHRyaWJ1dGUgKi8KIAlfX05MQkxfTUdNVF9BX01BWCwKIH07CiAjZGVmaW5lIE5MQkxfTUdNVF9BX01BWCAoX19OTEJMX01HTVRfQV9NQVggLSAxKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jCmluZGV4IDkyMWMxMTguLmU4YTVjMzIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqLwogCiAvKgotICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwNiAtIDIwMDcKKyAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYgLSAyMDA4CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2luY2x1ZGUgIm5ldGxhYmVsX3VzZXIuaCIKKyNpbmNsdWRlICJuZXRsYWJlbF9hZGRybGlzdC5oIgogI2luY2x1ZGUgIm5ldGxhYmVsX2RvbWFpbmhhc2guaCIKICNpbmNsdWRlICJuZXRsYWJlbF91bmxhYmVsZWQuaCIKICNpbmNsdWRlICJuZXRsYWJlbF9tZ210LmgiCkBAIC03NiwyMiArNzcsMjAgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0Ymw7CiAJdTMyIHNpemU7CiB9OworI2RlZmluZSBuZXRsYmxfdW5saHNoX2FkZHI0X2VudHJ5KGl0ZXIpIFwKKwljb250YWluZXJfb2YoaXRlciwgc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjQsIGxpc3QpCiBzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNCB7Ci0JX19iZTMyIGFkZHI7Ci0JX19iZTMyIG1hc2s7CiAJdTMyIHNlY2lkOwogCi0JdTMyIHZhbGlkOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgbGlzdDsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogfTsKKyNkZWZpbmUgbmV0bGJsX3VubGhzaF9hZGRyNl9lbnRyeShpdGVyKSBcCisJY29udGFpbmVyX29mKGl0ZXIsIHN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI2LCBsaXN0KQogc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjYgewotCXN0cnVjdCBpbjZfYWRkciBhZGRyOwotCXN0cnVjdCBpbjZfYWRkciBtYXNrOwogCXUzMiBzZWNpZDsKIAotCXUzMiB2YWxpZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IG5ldGxibF9hZjZsaXN0IGxpc3Q7CiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIH07CiBzdHJ1Y3QgbmV0bGJsX3VubGhzaF9pZmFjZSB7CkBAIC0xNDcsNzYgKzE0Niw2IEBACiB9OwogCiAvKgotICogQXVkaXQgSGVscGVyIEZ1bmN0aW9ucwotICovCi0KLS8qKgotICogbmV0bGJsX3VubGFiZWxfYXVkaXRfYWRkcjQgLSBBdWRpdCBhbiBJUHY0IGFkZHJlc3MKLSAqIEBhdWRpdF9idWY6IGF1ZGl0IGJ1ZmZlcgotICogQGRldjogbmV0d29yayBpbnRlcmZhY2UKLSAqIEBhZGRyOiBJUCBhZGRyZXNzCi0gKiBAbWFzazogSVAgYWRkcmVzcyBtYXNrCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiBXcml0ZSB0aGUgSVB2NCBhZGRyZXNzIGFuZCBhZGRyZXNzIG1hc2ssIGlmIG5lY2Vzc2FyeSwgdG8gQGF1ZGl0X2J1Zi4KLSAqCi0gKi8KLXN0YXRpYyB2b2lkIG5ldGxibF91bmxhYmVsX2F1ZGl0X2FkZHI0KHN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZiwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKmRldiwKLQkJCQkgICAgIF9fYmUzMiBhZGRyLCBfX2JlMzIgbWFzaykKLXsKLQl1MzIgbWFza192YWwgPSBudG9obChtYXNrKTsKLQotCWlmIChkZXYgIT0gTlVMTCkKLQkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgbmV0aWY9JXMiLCBkZXYpOwotCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIHNyYz0iIE5JUFFVQURfRk1ULCBOSVBRVUFEKGFkZHIpKTsKLQlpZiAobWFza192YWwgIT0gMHhmZmZmZmZmZikgewotCQl1MzIgbWFza19sZW4gPSAwOwotCQl3aGlsZSAobWFza192YWwgPiAwKSB7Ci0JCQltYXNrX3ZhbCA8PD0gMTsKLQkJCW1hc2tfbGVuKys7Ci0JCX0KLQkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgc3JjX3ByZWZpeGxlbj0lZCIsIG1hc2tfbGVuKTsKLQl9Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLS8qKgotICogbmV0bGJsX3VubGFiZWxfYXVkaXRfYWRkcjYgLSBBdWRpdCBhbiBJUHY2IGFkZHJlc3MKLSAqIEBhdWRpdF9idWY6IGF1ZGl0IGJ1ZmZlcgotICogQGRldjogbmV0d29yayBpbnRlcmZhY2UKLSAqIEBhZGRyOiBJUCBhZGRyZXNzCi0gKiBAbWFzazogSVAgYWRkcmVzcyBtYXNrCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiBXcml0ZSB0aGUgSVB2NiBhZGRyZXNzIGFuZCBhZGRyZXNzIG1hc2ssIGlmIG5lY2Vzc2FyeSwgdG8gQGF1ZGl0X2J1Zi4KLSAqCi0gKi8KLXN0YXRpYyB2b2lkIG5ldGxibF91bmxhYmVsX2F1ZGl0X2FkZHI2KHN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZiwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKmRldiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbWFzaykKLXsKLQlpZiAoZGV2ICE9IE5VTEwpCi0JCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIG5ldGlmPSVzIiwgZGV2KTsKLQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIiBzcmM9IiBOSVA2X0ZNVCwgTklQNigqYWRkcikpOwotCWlmIChudG9obChtYXNrLT5zNl9hZGRyMzJbM10pICE9IDB4ZmZmZmZmZmYpIHsKLQkJdTMyIG1hc2tfbGVuID0gMDsKLQkJdTMyIG1hc2tfdmFsOwotCQlpbnQgaXRlciA9IC0xOwotCQl3aGlsZSAobnRvaGwobWFzay0+czZfYWRkcjMyWysraXRlcl0pID09IDB4ZmZmZmZmZmYpCi0JCQltYXNrX2xlbiArPSAzMjsKLQkJbWFza192YWwgPSBudG9obChtYXNrLT5zNl9hZGRyMzJbaXRlcl0pOwotCQl3aGlsZSAobWFza192YWwgPiAwKSB7Ci0JCQltYXNrX3ZhbCA8PD0gMTsKLQkJCW1hc2tfbGVuKys7Ci0JCX0KLQkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgc3JjX3ByZWZpeGxlbj0lZCIsIG1hc2tfbGVuKTsKLQl9Ci19Ci0jZW5kaWYgLyogSVB2NiAqLwotCi0vKgogICogVW5sYWJlbGVkIENvbm5lY3Rpb24gSGFzaCBUYWJsZSBGdW5jdGlvbnMKICAqLwogCkBAIC0yNzQsMjYgKzIwMywyOCBAQAogc3RhdGljIHZvaWQgbmV0bGJsX3VubGhzaF9mcmVlX2lmYWNlKHN0cnVjdCByY3VfaGVhZCAqZW50cnkpCiB7CiAJc3RydWN0IG5ldGxibF91bmxoc2hfaWZhY2UgKmlmYWNlOwotCXN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI0ICppdGVyNDsKLQlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNCAqdG1wNDsKLQlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNiAqaXRlcjY7Ci0Jc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjYgKnRtcDY7CisJc3RydWN0IG5ldGxibF9hZjRsaXN0ICppdGVyNDsKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKnRtcDQ7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICppdGVyNjsKKwlzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKnRtcDY7CisjZW5kaWYgLyogSVB2NiAqLwogCiAJaWZhY2UgPSBjb250YWluZXJfb2YoZW50cnksIHN0cnVjdCBuZXRsYmxfdW5saHNoX2lmYWNlLCByY3UpOwogCiAJLyogbm8gbmVlZCBmb3IgbG9ja3MgaGVyZSBzaW5jZSB3ZSBhcmUgdGhlIG9ubHkgb25lIHdpdGggYWNjZXNzIHRvIHRoaXMKIAkgKiBzdHJ1Y3R1cmUgKi8KIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpdGVyNCwgdG1wNCwgJmlmYWNlLT5hZGRyNF9saXN0LCBsaXN0KQotCQlpZiAoaXRlcjQtPnZhbGlkKSB7Ci0JCQlsaXN0X2RlbF9yY3UoJml0ZXI0LT5saXN0KTsKLQkJCWtmcmVlKGl0ZXI0KTsKLQkJfQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpdGVyNiwgdG1wNiwgJmlmYWNlLT5hZGRyNl9saXN0LCBsaXN0KQotCQlpZiAoaXRlcjYtPnZhbGlkKSB7Ci0JCQlsaXN0X2RlbF9yY3UoJml0ZXI2LT5saXN0KTsKLQkJCWtmcmVlKGl0ZXI2KTsKLQkJfQorCW5ldGxibF9hZjRsaXN0X2ZvcmVhY2hfc2FmZShpdGVyNCwgdG1wNCwgJmlmYWNlLT5hZGRyNF9saXN0KSB7CisJCW5ldGxibF9hZjRsaXN0X3JlbW92ZV9lbnRyeShpdGVyNCk7CisJCWtmcmVlKG5ldGxibF91bmxoc2hfYWRkcjRfZW50cnkoaXRlcjQpKTsKKwl9CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJbmV0bGJsX2FmNmxpc3RfZm9yZWFjaF9zYWZlKGl0ZXI2LCB0bXA2LCAmaWZhY2UtPmFkZHI2X2xpc3QpIHsKKwkJbmV0bGJsX2FmNmxpc3RfcmVtb3ZlX2VudHJ5KGl0ZXI2KTsKKwkJa2ZyZWUobmV0bGJsX3VubGhzaF9hZGRyNl9lbnRyeShpdGVyNikpOworCX0KKyNlbmRpZiAvKiBJUHY2ICovCiAJa2ZyZWUoaWZhY2UpOwogfQogCkBAIC0zMTYsNTkgKzI0Nyw2IEBACiB9CiAKIC8qKgotICogbmV0bGJsX3VubGhzaF9zZWFyY2hfYWRkcjQgLSBTZWFyY2ggZm9yIGEgbWF0Y2hpbmcgSVB2NCBhZGRyZXNzIGVudHJ5Ci0gKiBAYWRkcjogSVB2NCBhZGRyZXNzCi0gKiBAaWZhY2U6IHRoZSBuZXR3b3JrIGludGVyZmFjZSBlbnRyeQotICoKLSAqIERlc2NyaXB0aW9uOgotICogU2VhcmNoZXMgdGhlIElQdjQgYWRkcmVzcyBsaXN0IG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZSBzcGVjaWZpZWQgYnkgQGlmYWNlLgotICogSWYgYSBtYXRjaGluZyBhZGRyZXNzIGVudHJ5IGlzIGZvdW5kIGl0IGlzIHJldHVybmVkLCBvdGhlcndpc2UgTlVMTCBpcwotICogcmV0dXJuZWQuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoZSByY3VfcmVhZF9bdW5dbG9jaygpCi0gKiBmdW5jdGlvbnMuCi0gKgotICovCi1zdGF0aWMgc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjQgKm5ldGxibF91bmxoc2hfc2VhcmNoX2FkZHI0KAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2JlMzIgYWRkciwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5ldGxibF91bmxoc2hfaWZhY2UgKmlmYWNlKQotewotCXN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI0ICppdGVyOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgJmlmYWNlLT5hZGRyNF9saXN0LCBsaXN0KQotCQlpZiAoaXRlci0+dmFsaWQgJiYgKGFkZHIgJiBpdGVyLT5tYXNrKSA9PSBpdGVyLT5hZGRyKQotCQkJcmV0dXJuIGl0ZXI7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotLyoqCi0gKiBuZXRsYmxfdW5saHNoX3NlYXJjaF9hZGRyNiAtIFNlYXJjaCBmb3IgYSBtYXRjaGluZyBJUHY2IGFkZHJlc3MgZW50cnkKLSAqIEBhZGRyOiBJUHY2IGFkZHJlc3MKLSAqIEBpZmFjZTogdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGVudHJ5Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKiBTZWFyY2hlcyB0aGUgSVB2NiBhZGRyZXNzIGxpc3Qgb2YgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIHNwZWNpZmllZCBieSBAaWZhY2UuCi0gKiBJZiBhIG1hdGNoaW5nIGFkZHJlc3MgZW50cnkgaXMgZm91bmQgaXQgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSBOVUxMIGlzCi0gKiByZXR1cm5lZC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgdGhlIHJjdV9yZWFkX1t1bl1sb2NrKCkKLSAqIGZ1bmN0aW9ucy4KLSAqCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNiAqbmV0bGJsX3VubGhzaF9zZWFyY2hfYWRkcjYoCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5ldGxibF91bmxoc2hfaWZhY2UgKmlmYWNlKQotewotCXN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI2ICppdGVyOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgJmlmYWNlLT5hZGRyNl9saXN0LCBsaXN0KQotCQlpZiAoaXRlci0+dmFsaWQgJiYKLQkJICAgIGlwdjZfbWFza2VkX2FkZHJfY21wKCZpdGVyLT5hZGRyLCAmaXRlci0+bWFzaywgYWRkcikgPT0gMCkKLQkJcmV0dXJuIGl0ZXI7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLSNlbmRpZiAvKiBJUHY2ICovCi0KLS8qKgogICogbmV0bGJsX3VubGhzaF9zZWFyY2hfaWZhY2UgLSBTZWFyY2ggZm9yIGEgbWF0Y2hpbmcgaW50ZXJmYWNlIGVudHJ5CiAgKiBAaWZpbmRleDogdGhlIG5ldHdvcmsgaW50ZXJmYWNlCiAgKgpAQCAtMzgxLDEyICsyNTksMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0bGJsX3VubGhzaF9pZmFjZSAqbmV0bGJsX3VubGhzaF9zZWFyY2hfaWZhY2UoaW50IGlmaW5kZXgpCiB7CiAJdTMyIGJrdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpia3RfbGlzdDsKIAlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9pZmFjZSAqaXRlcjsKIAogCWJrdCA9IG5ldGxibF91bmxoc2hfaGFzaChpZmluZGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpdGVyLAotCQkJCSZyY3VfZGVyZWZlcmVuY2UobmV0bGJsX3VubGhzaCktPnRibFtia3RdLAotCQkJCWxpc3QpCisJYmt0X2xpc3QgPSAmcmN1X2RlcmVmZXJlbmNlKG5ldGxibF91bmxoc2gpLT50YmxbYmt0XTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpdGVyLCBia3RfbGlzdCwgbGlzdCkKIAkJaWYgKGl0ZXItPnZhbGlkICYmIGl0ZXItPmlmaW5kZXggPT0gaWZpbmRleCkKIAkJCXJldHVybiBpdGVyOwogCkBAIC00MzksNDMgKzMxNywyNiBAQAogCQkJCSAgIGNvbnN0IHN0cnVjdCBpbl9hZGRyICptYXNrLAogCQkJCSAgIHUzMiBzZWNpZCkKIHsKKwlpbnQgcmV0X3ZhbDsKIAlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNCAqZW50cnk7Ci0Jc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjQgKml0ZXI7CiAKIAllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOwogCWlmIChlbnRyeSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVudHJ5LT5hZGRyID0gYWRkci0+c19hZGRyICYgbWFzay0+c19hZGRyOwotCWVudHJ5LT5tYXNrID0gbWFzay0+c19hZGRyOwotCWVudHJ5LT5zZWNpZCA9IHNlY2lkOwotCWVudHJ5LT52YWxpZCA9IDE7CisJZW50cnktPmxpc3QuYWRkciA9IGFkZHItPnNfYWRkciAmIG1hc2stPnNfYWRkcjsKKwllbnRyeS0+bGlzdC5tYXNrID0gbWFzay0+c19hZGRyOworCWVudHJ5LT5saXN0LnZhbGlkID0gMTsKIAlJTklUX1JDVV9IRUFEKCZlbnRyeS0+cmN1KTsKKwllbnRyeS0+c2VjaWQgPSBzZWNpZDsKIAogCXNwaW5fbG9jaygmbmV0bGJsX3VubGhzaF9sb2NrKTsKLQlpdGVyID0gbmV0bGJsX3VubGhzaF9zZWFyY2hfYWRkcjQoZW50cnktPmFkZHIsIGlmYWNlKTsKLQlpZiAoaXRlciAhPSBOVUxMICYmCi0JICAgIGl0ZXItPmFkZHIgPT0gYWRkci0+c19hZGRyICYmIGl0ZXItPm1hc2sgPT0gbWFzay0+c19hZGRyKSB7Ci0JCXNwaW5fdW5sb2NrKCZuZXRsYmxfdW5saHNoX2xvY2spOwotCQlrZnJlZShlbnRyeSk7Ci0JCXJldHVybiAtRUVYSVNUOwotCX0KLQkvKiBpbiBvcmRlciB0byBzcGVlZCB1cCBhZGRyZXNzIHNlYXJjaGVzIHRocm91Z2ggdGhlIGxpc3QgKHRoZSBjb21tb24KLQkgKiBjYXNlKSB3ZSBuZWVkIHRvIGtlZXAgdGhlIGxpc3QgaW4gb3JkZXIgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlCi0JICogYWRkcmVzcyBtYXNrIHN1Y2ggdGhhdCB0aGUgZW50cnkgd2l0aCB0aGUgd2lkZXN0IG1hc2sgKHNtYWxsZXN0Ci0JICogbnVtZXJpY2FsIHZhbHVlKSBhcHBlYXJzIGZpcnN0IGluIHRoZSBsaXN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgJmlmYWNlLT5hZGRyNF9saXN0LCBsaXN0KQotCQlpZiAoaXRlci0+dmFsaWQgJiYKLQkJICAgIG50b2hsKGVudHJ5LT5tYXNrKSA+IG50b2hsKGl0ZXItPm1hc2spKSB7Ci0JCQlfX2xpc3RfYWRkX3JjdSgmZW50cnktPmxpc3QsCi0JCQkJICAgICAgIGl0ZXItPmxpc3QucHJldiwKLQkJCQkgICAgICAgJml0ZXItPmxpc3QpOwotCQkJc3Bpbl91bmxvY2soJm5ldGxibF91bmxoc2hfbG9jayk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgJmlmYWNlLT5hZGRyNF9saXN0KTsKKwlyZXRfdmFsID0gbmV0bGJsX2FmNGxpc3RfYWRkKCZlbnRyeS0+bGlzdCwgJmlmYWNlLT5hZGRyNF9saXN0KTsKIAlzcGluX3VubG9jaygmbmV0bGJsX3VubGhzaF9sb2NrKTsKLQlyZXR1cm4gMDsKKworCWlmIChyZXRfdmFsICE9IDApCisJCWtmcmVlKGVudHJ5KTsKKwlyZXR1cm4gcmV0X3ZhbDsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQpAQCAtNDk4LDQ3ICszNTksMjkgQEAKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKm1hc2ssCiAJCQkJICAgdTMyIHNlY2lkKQogeworCWludCByZXRfdmFsOwogCXN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI2ICplbnRyeTsKLQlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNiAqaXRlcjsKIAogCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0FUT01JQyk7CiAJaWYgKGVudHJ5ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaXB2Nl9hZGRyX2NvcHkoJmVudHJ5LT5hZGRyLCBhZGRyKTsKLQllbnRyeS0+YWRkci5zNl9hZGRyMzJbMF0gJj0gbWFzay0+czZfYWRkcjMyWzBdOwotCWVudHJ5LT5hZGRyLnM2X2FkZHIzMlsxXSAmPSBtYXNrLT5zNl9hZGRyMzJbMV07Ci0JZW50cnktPmFkZHIuczZfYWRkcjMyWzJdICY9IG1hc2stPnM2X2FkZHIzMlsyXTsKLQllbnRyeS0+YWRkci5zNl9hZGRyMzJbM10gJj0gbWFzay0+czZfYWRkcjMyWzNdOwotCWlwdjZfYWRkcl9jb3B5KCZlbnRyeS0+bWFzaywgbWFzayk7Ci0JZW50cnktPnNlY2lkID0gc2VjaWQ7Ci0JZW50cnktPnZhbGlkID0gMTsKKwlpcHY2X2FkZHJfY29weSgmZW50cnktPmxpc3QuYWRkciwgYWRkcik7CisJZW50cnktPmxpc3QuYWRkci5zNl9hZGRyMzJbMF0gJj0gbWFzay0+czZfYWRkcjMyWzBdOworCWVudHJ5LT5saXN0LmFkZHIuczZfYWRkcjMyWzFdICY9IG1hc2stPnM2X2FkZHIzMlsxXTsKKwllbnRyeS0+bGlzdC5hZGRyLnM2X2FkZHIzMlsyXSAmPSBtYXNrLT5zNl9hZGRyMzJbMl07CisJZW50cnktPmxpc3QuYWRkci5zNl9hZGRyMzJbM10gJj0gbWFzay0+czZfYWRkcjMyWzNdOworCWlwdjZfYWRkcl9jb3B5KCZlbnRyeS0+bGlzdC5tYXNrLCBtYXNrKTsKKwllbnRyeS0+bGlzdC52YWxpZCA9IDE7CiAJSU5JVF9SQ1VfSEVBRCgmZW50cnktPnJjdSk7CisJZW50cnktPnNlY2lkID0gc2VjaWQ7CiAKIAlzcGluX2xvY2soJm5ldGxibF91bmxoc2hfbG9jayk7Ci0JaXRlciA9IG5ldGxibF91bmxoc2hfc2VhcmNoX2FkZHI2KCZlbnRyeS0+YWRkciwgaWZhY2UpOwotCWlmIChpdGVyICE9IE5VTEwgJiYKLQkgICAgKGlwdjZfYWRkcl9lcXVhbCgmaXRlci0+YWRkciwgYWRkcikgJiYKLQkgICAgIGlwdjZfYWRkcl9lcXVhbCgmaXRlci0+bWFzaywgbWFzaykpKSB7Ci0JCXNwaW5fdW5sb2NrKCZuZXRsYmxfdW5saHNoX2xvY2spOwotCQlrZnJlZShlbnRyeSk7Ci0JCXJldHVybiAtRUVYSVNUOwotCX0KLQkvKiBpbiBvcmRlciB0byBzcGVlZCB1cCBhZGRyZXNzIHNlYXJjaGVzIHRocm91Z2ggdGhlIGxpc3QgKHRoZSBjb21tb24KLQkgKiBjYXNlKSB3ZSBuZWVkIHRvIGtlZXAgdGhlIGxpc3QgaW4gb3JkZXIgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlCi0JICogYWRkcmVzcyBtYXNrIHN1Y2ggdGhhdCB0aGUgZW50cnkgd2l0aCB0aGUgd2lkZXN0IG1hc2sgKHNtYWxsZXN0Ci0JICogbnVtZXJpY2FsIHZhbHVlKSBhcHBlYXJzIGZpcnN0IGluIHRoZSBsaXN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgJmlmYWNlLT5hZGRyNl9saXN0LCBsaXN0KQotCQlpZiAoaXRlci0+dmFsaWQgJiYKLQkJICAgIGlwdjZfYWRkcl9jbXAoJmVudHJ5LT5tYXNrLCAmaXRlci0+bWFzaykgPiAwKSB7Ci0JCQlfX2xpc3RfYWRkX3JjdSgmZW50cnktPmxpc3QsCi0JCQkJICAgICAgIGl0ZXItPmxpc3QucHJldiwKLQkJCQkgICAgICAgJml0ZXItPmxpc3QpOwotCQkJc3Bpbl91bmxvY2soJm5ldGxibF91bmxoc2hfbG9jayk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgJmlmYWNlLT5hZGRyNl9saXN0KTsKKwlyZXRfdmFsID0gbmV0bGJsX2FmNmxpc3RfYWRkKCZlbnRyeS0+bGlzdCwgJmlmYWNlLT5hZGRyNl9saXN0KTsKIAlzcGluX3VubG9jaygmbmV0bGJsX3VubGhzaF9sb2NrKTsKKworCWlmIChyZXRfdmFsICE9IDApCisJCWtmcmVlKGVudHJ5KTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZiAvKiBJUHY2ICovCkBAIC02NTgsMTAgKzUwMSwxMCBAQAogCQltYXNrNCA9IChzdHJ1Y3QgaW5fYWRkciAqKW1hc2s7CiAJCXJldF92YWwgPSBuZXRsYmxfdW5saHNoX2FkZF9hZGRyNChpZmFjZSwgYWRkcjQsIG1hc2s0LCBzZWNpZCk7CiAJCWlmIChhdWRpdF9idWYgIT0gTlVMTCkKLQkJCW5ldGxibF91bmxhYmVsX2F1ZGl0X2FkZHI0KGF1ZGl0X2J1ZiwKLQkJCQkJCSAgIGRldl9uYW1lLAotCQkJCQkJICAgYWRkcjQtPnNfYWRkciwKLQkJCQkJCSAgIG1hc2s0LT5zX2FkZHIpOworCQkJbmV0bGJsX2FmNGxpc3RfYXVkaXRfYWRkcihhdWRpdF9idWYsIDEsCisJCQkJCQkgIGRldl9uYW1lLAorCQkJCQkJICBhZGRyNC0+c19hZGRyLAorCQkJCQkJICBtYXNrNC0+c19hZGRyKTsKIAkJYnJlYWs7CiAJfQogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQpAQCAtNjcyLDkgKzUxNSw5IEBACiAJCW1hc2s2ID0gKHN0cnVjdCBpbjZfYWRkciAqKW1hc2s7CiAJCXJldF92YWwgPSBuZXRsYmxfdW5saHNoX2FkZF9hZGRyNihpZmFjZSwgYWRkcjYsIG1hc2s2LCBzZWNpZCk7CiAJCWlmIChhdWRpdF9idWYgIT0gTlVMTCkKLQkJCW5ldGxibF91bmxhYmVsX2F1ZGl0X2FkZHI2KGF1ZGl0X2J1ZiwKLQkJCQkJCSAgIGRldl9uYW1lLAotCQkJCQkJICAgYWRkcjYsIG1hc2s2KTsKKwkJCW5ldGxibF9hZjZsaXN0X2F1ZGl0X2FkZHIoYXVkaXRfYnVmLCAxLAorCQkJCQkJICBkZXZfbmFtZSwKKwkJCQkJCSAgYWRkcjYsIG1hc2s2KTsKIAkJYnJlYWs7CiAJfQogI2VuZGlmIC8qIElQdjYgKi8KQEAgLTcxOSwzNSArNTYyLDM0IEBACiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGluX2FkZHIgKm1hc2ssCiAJCQkJICAgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKIHsKLQlpbnQgcmV0X3ZhbCA9IC1FTk9FTlQ7CisJaW50IHJldF92YWwgPSAwOworCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqbGlzdF9lbnRyeTsKIAlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNCAqZW50cnk7Ci0Jc3RydWN0IGF1ZGl0X2J1ZmZlciAqYXVkaXRfYnVmID0gTlVMTDsKKwlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQljaGFyICpzZWNjdHggPSBOVUxMOworCWNoYXIgKnNlY2N0eDsKIAl1MzIgc2VjY3R4X2xlbjsKIAogCXNwaW5fbG9jaygmbmV0bGJsX3VubGhzaF9sb2NrKTsKLQllbnRyeSA9IG5ldGxibF91bmxoc2hfc2VhcmNoX2FkZHI0KGFkZHItPnNfYWRkciwgaWZhY2UpOwotCWlmIChlbnRyeSAhPSBOVUxMICYmCi0JICAgIGVudHJ5LT5hZGRyID09IGFkZHItPnNfYWRkciAmJiBlbnRyeS0+bWFzayA9PSBtYXNrLT5zX2FkZHIpIHsKLQkJZW50cnktPnZhbGlkID0gMDsKLQkJbGlzdF9kZWxfcmN1KCZlbnRyeS0+bGlzdCk7Ci0JCXJldF92YWwgPSAwOwotCX0KKwlsaXN0X2VudHJ5ID0gbmV0bGJsX2FmNGxpc3RfcmVtb3ZlKGFkZHItPnNfYWRkciwgbWFzay0+c19hZGRyLAorCQkJCQkgICAmaWZhY2UtPmFkZHI0X2xpc3QpOwogCXNwaW5fdW5sb2NrKCZuZXRsYmxfdW5saHNoX2xvY2spOworCWlmIChsaXN0X2VudHJ5ID09IE5VTEwpCisJCXJldF92YWwgPSAtRU5PRU5UOworCWVudHJ5ID0gbmV0bGJsX3VubGhzaF9hZGRyNF9lbnRyeShsaXN0X2VudHJ5KTsKIAogCWF1ZGl0X2J1ZiA9IG5ldGxibF9hdWRpdF9zdGFydF9jb21tb24oQVVESVRfTUFDX1VOTEJMX1NUQ0RFTCwKIAkJCQkJICAgICAgYXVkaXRfaW5mbyk7CiAJaWYgKGF1ZGl0X2J1ZiAhPSBOVUxMKSB7CiAJCWRldiA9IGRldl9nZXRfYnlfaW5kZXgobmV0LCBpZmFjZS0+aWZpbmRleCk7Ci0JCW5ldGxibF91bmxhYmVsX2F1ZGl0X2FkZHI0KGF1ZGl0X2J1ZiwKLQkJCQkJICAgKGRldiAhPSBOVUxMID8gZGV2LT5uYW1lIDogTlVMTCksCi0JCQkJCSAgIGVudHJ5LT5hZGRyLCBlbnRyeS0+bWFzayk7CisJCW5ldGxibF9hZjRsaXN0X2F1ZGl0X2FkZHIoYXVkaXRfYnVmLCAxLAorCQkJCQkgIChkZXYgIT0gTlVMTCA/IGRldi0+bmFtZSA6IE5VTEwpLAorCQkJCQkgIGFkZHItPnNfYWRkciwgbWFzay0+c19hZGRyKTsKIAkJaWYgKGRldiAhPSBOVUxMKQogCQkJZGV2X3B1dChkZXYpOwotCQlpZiAoc2VjdXJpdHlfc2VjaWRfdG9fc2VjY3R4KGVudHJ5LT5zZWNpZCwKLQkJCQkJICAgICAmc2VjY3R4LAotCQkJCQkgICAgICZzZWNjdHhfbGVuKSA9PSAwKSB7CisJCWlmIChlbnRyeSAmJiBzZWN1cml0eV9zZWNpZF90b19zZWNjdHgoZW50cnktPnNlY2lkLAorCQkJCQkJICAgICAgJnNlY2N0eCwKKwkJCQkJCSAgICAgICZzZWNjdHhfbGVuKSA9PSAwKSB7CiAJCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIiBzZWNfb2JqPSVzIiwgc2VjY3R4KTsKIAkJCXNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KHNlY2N0eCwgc2VjY3R4X2xlbik7CiAJCX0KQEAgLTc4MSwzNiArNjIzLDMzIEBACiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICptYXNrLAogCQkJCSAgICAgIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pCiB7Ci0JaW50IHJldF92YWwgPSAtRU5PRU5UOworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKmxpc3RfZW50cnk7CiAJc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjYgKmVudHJ5OwotCXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZiA9IE5VTEw7CisJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYXVkaXRfYnVmOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JY2hhciAqc2VjY3R4ID0gTlVMTDsKKwljaGFyICpzZWNjdHg7CiAJdTMyIHNlY2N0eF9sZW47CiAKIAlzcGluX2xvY2soJm5ldGxibF91bmxoc2hfbG9jayk7Ci0JZW50cnkgPSBuZXRsYmxfdW5saHNoX3NlYXJjaF9hZGRyNihhZGRyLCBpZmFjZSk7Ci0JaWYgKGVudHJ5ICE9IE5VTEwgJiYKLQkgICAgKGlwdjZfYWRkcl9lcXVhbCgmZW50cnktPmFkZHIsIGFkZHIpICYmCi0JICAgICBpcHY2X2FkZHJfZXF1YWwoJmVudHJ5LT5tYXNrLCBtYXNrKSkpIHsKLQkJZW50cnktPnZhbGlkID0gMDsKLQkJbGlzdF9kZWxfcmN1KCZlbnRyeS0+bGlzdCk7Ci0JCXJldF92YWwgPSAwOwotCX0KKwlsaXN0X2VudHJ5ID0gbmV0bGJsX2FmNmxpc3RfcmVtb3ZlKGFkZHIsIG1hc2ssICZpZmFjZS0+YWRkcjZfbGlzdCk7CiAJc3Bpbl91bmxvY2soJm5ldGxibF91bmxoc2hfbG9jayk7CisJaWYgKGxpc3RfZW50cnkgPT0gTlVMTCkKKwkJcmV0X3ZhbCA9IC1FTk9FTlQ7CisJZW50cnkgPSBuZXRsYmxfdW5saHNoX2FkZHI2X2VudHJ5KGxpc3RfZW50cnkpOwogCiAJYXVkaXRfYnVmID0gbmV0bGJsX2F1ZGl0X3N0YXJ0X2NvbW1vbihBVURJVF9NQUNfVU5MQkxfU1RDREVMLAogCQkJCQkgICAgICBhdWRpdF9pbmZvKTsKIAlpZiAoYXVkaXRfYnVmICE9IE5VTEwpIHsKIAkJZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIGlmYWNlLT5pZmluZGV4KTsKLQkJbmV0bGJsX3VubGFiZWxfYXVkaXRfYWRkcjYoYXVkaXRfYnVmLAotCQkJCQkgICAoZGV2ICE9IE5VTEwgPyBkZXYtPm5hbWUgOiBOVUxMKSwKLQkJCQkJICAgYWRkciwgbWFzayk7CisJCW5ldGxibF9hZjZsaXN0X2F1ZGl0X2FkZHIoYXVkaXRfYnVmLCAxLAorCQkJCQkgIChkZXYgIT0gTlVMTCA/IGRldi0+bmFtZSA6IE5VTEwpLAorCQkJCQkgIGFkZHIsIG1hc2spOwogCQlpZiAoZGV2ICE9IE5VTEwpCiAJCQlkZXZfcHV0KGRldik7Ci0JCWlmIChzZWN1cml0eV9zZWNpZF90b19zZWNjdHgoZW50cnktPnNlY2lkLAotCQkJCQkgICAgICZzZWNjdHgsCi0JCQkJCSAgICAgJnNlY2N0eF9sZW4pID09IDApIHsKKwkJaWYgKGVudHJ5ICYmIHNlY3VyaXR5X3NlY2lkX3RvX3NlY2N0eChlbnRyeS0+c2VjaWQsCisJCQkJCQkgICAgICAmc2VjY3R4LAorCQkJCQkJICAgICAgJnNlY2N0eF9sZW4pID09IDApIHsKIAkJCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIHNlY19vYmo9JXMiLCBzZWNjdHgpOwogCQkJc2VjdXJpdHlfcmVsZWFzZV9zZWNjdHgoc2VjY3R4LCBzZWNjdHhfbGVuKTsKIAkJfQpAQCAtODM2LDE2ICs2NzUsMTggQEAKICAqLwogc3RhdGljIHZvaWQgbmV0bGJsX3VubGhzaF9jb25kcmVtb3ZlX2lmYWNlKHN0cnVjdCBuZXRsYmxfdW5saHNoX2lmYWNlICppZmFjZSkKIHsKLQlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNCAqaXRlcjQ7Ci0Jc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjYgKml0ZXI2OworCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqaXRlcjQ7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICppdGVyNjsKKyNlbmRpZiAvKiBJUHY2ICovCiAKIAlzcGluX2xvY2soJm5ldGxibF91bmxoc2hfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlcjQsICZpZmFjZS0+YWRkcjRfbGlzdCwgbGlzdCkKLQkJaWYgKGl0ZXI0LT52YWxpZCkKLQkJCWdvdG8gdW5saHNoX2NvbmRyZW1vdmVfZmFpbHVyZTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpdGVyNiwgJmlmYWNlLT5hZGRyNl9saXN0LCBsaXN0KQotCQlpZiAoaXRlcjYtPnZhbGlkKQotCQkJZ290byB1bmxoc2hfY29uZHJlbW92ZV9mYWlsdXJlOworCW5ldGxibF9hZjRsaXN0X2ZvcmVhY2hfcmN1KGl0ZXI0LCAmaWZhY2UtPmFkZHI0X2xpc3QpCisJCWdvdG8gdW5saHNoX2NvbmRyZW1vdmVfZmFpbHVyZTsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwluZXRsYmxfYWY2bGlzdF9mb3JlYWNoX3JjdShpdGVyNiwgJmlmYWNlLT5hZGRyNl9saXN0KQorCQlnb3RvIHVubGhzaF9jb25kcmVtb3ZlX2ZhaWx1cmU7CisjZW5kaWYgLyogSVB2NiAqLwogCWlmYWNlLT52YWxpZCA9IDA7CiAJaWYgKGlmYWNlLT5pZmluZGV4ID4gMCkKIAkJbGlzdF9kZWxfcmN1KCZpZmFjZS0+bGlzdCk7CkBAIC0xMzQ5LDcgKzExOTAsNyBAQAogCWlmIChhZGRyNCkgewogCQlzdHJ1Y3QgaW5fYWRkciBhZGRyX3N0cnVjdDsKIAotCQlhZGRyX3N0cnVjdC5zX2FkZHIgPSBhZGRyNC0+YWRkcjsKKwkJYWRkcl9zdHJ1Y3Quc19hZGRyID0gYWRkcjQtPmxpc3QuYWRkcjsKIAkJcmV0X3ZhbCA9IG5sYV9wdXQoY2JfYXJnLT5za2IsCiAJCQkJICBOTEJMX1VOTEFCRUxfQV9JUFY0QUREUiwKIAkJCQkgIHNpemVvZihzdHJ1Y3QgaW5fYWRkciksCkBAIC0xMzU3LDcgKzExOTgsNyBAQAogCQlpZiAocmV0X3ZhbCAhPSAwKQogCQkJZ290byBsaXN0X2NiX2ZhaWx1cmU7CiAKLQkJYWRkcl9zdHJ1Y3Quc19hZGRyID0gYWRkcjQtPm1hc2s7CisJCWFkZHJfc3RydWN0LnNfYWRkciA9IGFkZHI0LT5saXN0Lm1hc2s7CiAJCXJldF92YWwgPSBubGFfcHV0KGNiX2FyZy0+c2tiLAogCQkJCSAgTkxCTF9VTkxBQkVMX0FfSVBWNE1BU0ssCiAJCQkJICBzaXplb2Yoc3RydWN0IGluX2FkZHIpLApAQCAtMTM3MCwxNCArMTIxMSwxNCBAQAogCQlyZXRfdmFsID0gbmxhX3B1dChjYl9hcmctPnNrYiwKIAkJCQkgIE5MQkxfVU5MQUJFTF9BX0lQVjZBRERSLAogCQkJCSAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksCi0JCQkJICAmYWRkcjYtPmFkZHIpOworCQkJCSAgJmFkZHI2LT5saXN0LmFkZHIpOwogCQlpZiAocmV0X3ZhbCAhPSAwKQogCQkJZ290byBsaXN0X2NiX2ZhaWx1cmU7CiAKIAkJcmV0X3ZhbCA9IG5sYV9wdXQoY2JfYXJnLT5za2IsCiAJCQkJICBOTEJMX1VOTEFCRUxfQV9JUFY2TUFTSywKIAkJCQkgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLAotCQkJCSAgJmFkZHI2LT5tYXNrKTsKKwkJCQkgICZhZGRyNi0+bGlzdC5tYXNrKTsKIAkJaWYgKHJldF92YWwgIT0gMCkKIAkJCWdvdG8gbGlzdF9jYl9mYWlsdXJlOwogCkBAIC0xNDI1LDggKzEyNjYsMTEgQEAKIAl1MzIgaXRlcl9ia3Q7CiAJdTMyIGl0ZXJfY2hhaW4gPSAwLCBpdGVyX2FkZHI0ID0gMCwgaXRlcl9hZGRyNiA9IDA7CiAJc3RydWN0IG5ldGxibF91bmxoc2hfaWZhY2UgKmlmYWNlOwotCXN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI0ICphZGRyNDsKLQlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNiAqYWRkcjY7CisJc3RydWN0IGxpc3RfaGVhZCAqaXRlcl9saXN0OworCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqYWRkcjQ7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICphZGRyNjsKKyNlbmRpZgogCiAJY2JfYXJnLm5sX2NiID0gY2I7CiAJY2JfYXJnLnNrYiA9IHNrYjsKQEAgLTE0MzYsNDQgKzEyODAsNDMgQEAKIAlmb3IgKGl0ZXJfYmt0ID0gc2tpcF9ia3Q7CiAJICAgICBpdGVyX2JrdCA8IHJjdV9kZXJlZmVyZW5jZShuZXRsYmxfdW5saHNoKS0+c2l6ZTsKIAkgICAgIGl0ZXJfYmt0KyssIGl0ZXJfY2hhaW4gPSAwLCBpdGVyX2FkZHI0ID0gMCwgaXRlcl9hZGRyNiA9IDApIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaWZhY2UsCi0JCQkgICAgICAgICZyY3VfZGVyZWZlcmVuY2UobmV0bGJsX3VubGhzaCktPnRibFtpdGVyX2JrdF0sCi0JCQkJbGlzdCkgeworCQlpdGVyX2xpc3QgPSAmcmN1X2RlcmVmZXJlbmNlKG5ldGxibF91bmxoc2gpLT50YmxbaXRlcl9ia3RdOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpZmFjZSwgaXRlcl9saXN0LCBsaXN0KSB7CiAJCQlpZiAoIWlmYWNlLT52YWxpZCB8fAogCQkJICAgIGl0ZXJfY2hhaW4rKyA8IHNraXBfY2hhaW4pCiAJCQkJY29udGludWU7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShhZGRyNCwKLQkJCQkJCSZpZmFjZS0+YWRkcjRfbGlzdCwKLQkJCQkJCWxpc3QpIHsKLQkJCQlpZiAoIWFkZHI0LT52YWxpZCB8fCBpdGVyX2FkZHI0KysgPCBza2lwX2FkZHI0KQorCQkJbmV0bGJsX2FmNGxpc3RfZm9yZWFjaF9yY3UoYWRkcjQsCisJCQkJCQkgICAmaWZhY2UtPmFkZHI0X2xpc3QpIHsKKwkJCQlpZiAoaXRlcl9hZGRyNCsrIDwgc2tpcF9hZGRyNCkKIAkJCQkJY29udGludWU7CiAJCQkJaWYgKG5ldGxibF91bmxhYmVsX3N0YXRpY2xpc3RfZ2VuKAotCQkJCQkgICAgICAgICAgICAgTkxCTF9VTkxBQkVMX0NfU1RBVElDTElTVCwKLQkJCQkJCSAgICAgaWZhY2UsCi0JCQkJCQkgICAgIGFkZHI0LAotCQkJCQkJICAgICBOVUxMLAotCQkJCQkJICAgICAmY2JfYXJnKSA8IDApIHsKKwkJCQkJICAgICAgTkxCTF9VTkxBQkVMX0NfU1RBVElDTElTVCwKKwkJCQkJICAgICAgaWZhY2UsCisJCQkJCSAgICAgIG5ldGxibF91bmxoc2hfYWRkcjRfZW50cnkoYWRkcjQpLAorCQkJCQkgICAgICBOVUxMLAorCQkJCQkgICAgICAmY2JfYXJnKSA8IDApIHsKIAkJCQkJaXRlcl9hZGRyNC0tOwogCQkJCQlpdGVyX2NoYWluLS07CiAJCQkJCWdvdG8gdW5sYWJlbF9zdGF0aWNsaXN0X3JldHVybjsKIAkJCQl9CiAJCQl9Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShhZGRyNiwKLQkJCQkJCSZpZmFjZS0+YWRkcjZfbGlzdCwKLQkJCQkJCWxpc3QpIHsKLQkJCQlpZiAoIWFkZHI2LT52YWxpZCB8fCBpdGVyX2FkZHI2KysgPCBza2lwX2FkZHI2KQorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCQkJbmV0bGJsX2FmNmxpc3RfZm9yZWFjaF9yY3UoYWRkcjYsCisJCQkJCQkgICAmaWZhY2UtPmFkZHI2X2xpc3QpIHsKKwkJCQlpZiAoaXRlcl9hZGRyNisrIDwgc2tpcF9hZGRyNikKIAkJCQkJY29udGludWU7CiAJCQkJaWYgKG5ldGxibF91bmxhYmVsX3N0YXRpY2xpc3RfZ2VuKAotCQkJCQkJICAgICBOTEJMX1VOTEFCRUxfQ19TVEFUSUNMSVNULAotCQkJCQkJICAgICBpZmFjZSwKLQkJCQkJCSAgICAgTlVMTCwKLQkJCQkJCSAgICAgYWRkcjYsCi0JCQkJCQkgICAgICZjYl9hcmcpIDwgMCkgeworCQkJCQkgICAgICBOTEJMX1VOTEFCRUxfQ19TVEFUSUNMSVNULAorCQkJCQkgICAgICBpZmFjZSwKKwkJCQkJICAgICAgTlVMTCwKKwkJCQkJICAgICAgbmV0bGJsX3VubGhzaF9hZGRyNl9lbnRyeShhZGRyNiksCisJCQkJCSAgICAgICZjYl9hcmcpIDwgMCkgewogCQkJCQlpdGVyX2FkZHI2LS07CiAJCQkJCWl0ZXJfY2hhaW4tLTsKIAkJCQkJZ290byB1bmxhYmVsX3N0YXRpY2xpc3RfcmV0dXJuOwogCQkJCX0KIAkJCX0KKyNlbmRpZiAvKiBJUHY2ICovCiAJCX0KIAl9CiAKQEAgLTE1MDQsOSArMTM0NywxMiBAQAogCXN0cnVjdCBuZXRsYmxfdW5saHNoX2lmYWNlICppZmFjZTsKIAl1MzIgc2tpcF9hZGRyNCA9IGNiLT5hcmdzWzBdOwogCXUzMiBza2lwX2FkZHI2ID0gY2ItPmFyZ3NbMV07Ci0JdTMyIGl0ZXJfYWRkcjQgPSAwLCBpdGVyX2FkZHI2ID0gMDsKLQlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNCAqYWRkcjQ7Ci0Jc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjYgKmFkZHI2OworCXUzMiBpdGVyX2FkZHI0ID0gMDsKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKmFkZHI0OworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCXUzMiBpdGVyX2FkZHI2ID0gMDsKKwlzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKmFkZHI2OworI2VuZGlmCiAKIAljYl9hcmcubmxfY2IgPSBjYjsKIAljYl9hcmcuc2tiID0gc2tiOwpAQCAtMTUxNywzMCArMTM2MywzMiBAQAogCWlmIChpZmFjZSA9PSBOVUxMIHx8ICFpZmFjZS0+dmFsaWQpCiAJCWdvdG8gdW5sYWJlbF9zdGF0aWNsaXN0ZGVmX3JldHVybjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGFkZHI0LCAmaWZhY2UtPmFkZHI0X2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFhZGRyNC0+dmFsaWQgfHwgaXRlcl9hZGRyNCsrIDwgc2tpcF9hZGRyNCkKKwluZXRsYmxfYWY0bGlzdF9mb3JlYWNoX3JjdShhZGRyNCwgJmlmYWNlLT5hZGRyNF9saXN0KSB7CisJCWlmIChpdGVyX2FkZHI0KysgPCBza2lwX2FkZHI0KQogCQkJY29udGludWU7CiAJCWlmIChuZXRsYmxfdW5sYWJlbF9zdGF0aWNsaXN0X2dlbihOTEJMX1VOTEFCRUxfQ19TVEFUSUNMSVNUREVGLAotCQkJCQkgICBpZmFjZSwKLQkJCQkJICAgYWRkcjQsCi0JCQkJCSAgIE5VTEwsCi0JCQkJCSAgICZjYl9hcmcpIDwgMCkgeworCQkJCQkgICAgICBpZmFjZSwKKwkJCQkJICAgICAgbmV0bGJsX3VubGhzaF9hZGRyNF9lbnRyeShhZGRyNCksCisJCQkJCSAgICAgIE5VTEwsCisJCQkJCSAgICAgICZjYl9hcmcpIDwgMCkgewogCQkJaXRlcl9hZGRyNC0tOwogCQkJZ290byB1bmxhYmVsX3N0YXRpY2xpc3RkZWZfcmV0dXJuOwogCQl9CiAJfQotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGFkZHI2LCAmaWZhY2UtPmFkZHI2X2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFhZGRyNi0+dmFsaWQgfHwgaXRlcl9hZGRyNisrIDwgc2tpcF9hZGRyNikKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwluZXRsYmxfYWY2bGlzdF9mb3JlYWNoX3JjdShhZGRyNiwgJmlmYWNlLT5hZGRyNl9saXN0KSB7CisJCWlmIChpdGVyX2FkZHI2KysgPCBza2lwX2FkZHI2KQogCQkJY29udGludWU7CiAJCWlmIChuZXRsYmxfdW5sYWJlbF9zdGF0aWNsaXN0X2dlbihOTEJMX1VOTEFCRUxfQ19TVEFUSUNMSVNUREVGLAotCQkJCQkgICBpZmFjZSwKLQkJCQkJICAgTlVMTCwKLQkJCQkJICAgYWRkcjYsCi0JCQkJCSAgICZjYl9hcmcpIDwgMCkgeworCQkJCQkgICAgICBpZmFjZSwKKwkJCQkJICAgICAgTlVMTCwKKwkJCQkJICAgICAgbmV0bGJsX3VubGhzaF9hZGRyNl9lbnRyeShhZGRyNiksCisJCQkJCSAgICAgICZjYl9hcmcpIDwgMCkgewogCQkJaXRlcl9hZGRyNi0tOwogCQkJZ290byB1bmxhYmVsX3N0YXRpY2xpc3RkZWZfcmV0dXJuOwogCQl9CiAJfQorI2VuZGlmIC8qIElQdjYgKi8KIAogdW5sYWJlbF9zdGF0aWNsaXN0ZGVmX3JldHVybjoKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTE3MTgsMjUgKzE1NjYsMjcgQEAKIAlzd2l0Y2ggKGZhbWlseSkgewogCWNhc2UgUEZfSU5FVDogewogCQlzdHJ1Y3QgaXBoZHIgKmhkcjQ7Ci0JCXN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI0ICphZGRyNDsKKwkJc3RydWN0IG5ldGxibF9hZjRsaXN0ICphZGRyNDsKIAogCQloZHI0ID0gaXBfaGRyKHNrYik7Ci0JCWFkZHI0ID0gbmV0bGJsX3VubGhzaF9zZWFyY2hfYWRkcjQoaGRyNC0+c2FkZHIsIGlmYWNlKTsKKwkJYWRkcjQgPSBuZXRsYmxfYWY0bGlzdF9zZWFyY2goaGRyNC0+c2FkZHIsCisJCQkJCSAgICAgICZpZmFjZS0+YWRkcjRfbGlzdCk7CiAJCWlmIChhZGRyNCA9PSBOVUxMKQogCQkJZ290byB1bmxhYmVsX2dldGF0dHJfbm9sYWJlbDsKLQkJc2VjYXR0ci0+YXR0ci5zZWNpZCA9IGFkZHI0LT5zZWNpZDsKKwkJc2VjYXR0ci0+YXR0ci5zZWNpZCA9IG5ldGxibF91bmxoc2hfYWRkcjRfZW50cnkoYWRkcjQpLT5zZWNpZDsKIAkJYnJlYWs7CiAJfQogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCWNhc2UgUEZfSU5FVDY6IHsKIAkJc3RydWN0IGlwdjZoZHIgKmhkcjY7Ci0JCXN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI2ICphZGRyNjsKKwkJc3RydWN0IG5ldGxibF9hZjZsaXN0ICphZGRyNjsKIAogCQloZHI2ID0gaXB2Nl9oZHIoc2tiKTsKLQkJYWRkcjYgPSBuZXRsYmxfdW5saHNoX3NlYXJjaF9hZGRyNigmaGRyNi0+c2FkZHIsIGlmYWNlKTsKKwkJYWRkcjYgPSBuZXRsYmxfYWY2bGlzdF9zZWFyY2goJmhkcjYtPnNhZGRyLAorCQkJCQkgICAgICAmaWZhY2UtPmFkZHI2X2xpc3QpOwogCQlpZiAoYWRkcjYgPT0gTlVMTCkKIAkJCWdvdG8gdW5sYWJlbF9nZXRhdHRyX25vbGFiZWw7Ci0JCXNlY2F0dHItPmF0dHIuc2VjaWQgPSBhZGRyNi0+c2VjaWQ7CisJCXNlY2F0dHItPmF0dHIuc2VjaWQgPSBuZXRsYmxfdW5saHNoX2FkZHI2X2VudHJ5KGFkZHI2KS0+c2VjaWQ7CiAJCWJyZWFrOwogCX0KICNlbmRpZiAvKiBJUHY2ICovCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggYjBlYWNjMC4uNDgwMTg0YSAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBORVRMSU5LICAgICAgS2VybmVsLXVzZXIgY29tbXVuaWNhdGlvbiBwcm90b2NvbC4KICAqCi0gKiAJCUF1dGhvcnM6CUFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CisgKiAJCUF1dGhvcnM6CUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKiAJCQkJQWxleGV5IEt1em5ldHNvdiA8a3V6bmV0QG1zMi5pbnIuYWMucnU+CiAgKgogICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTQzNSw3ICs0MzUsNyBAQAogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAogCW5ldGxpbmtfbG9ja190YWJsZSgpOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAoIW5sX3RhYmxlW3Byb3RvY29sXS5yZWdpc3RlcmVkKSB7CiAJCW5ldGxpbmtfdW5sb2NrX3RhYmxlKCk7CiAJCXJlcXVlc3RfbW9kdWxlKCJuZXQtcGYtJWQtcHJvdG8tJWQiLCBQRl9ORVRMSU5LLCBwcm90b2NvbCk7CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L2FmX3Bob25ldC5jIGIvbmV0L3Bob25ldC9hZl9waG9uZXQuYwppbmRleCA5ZTljNmZjLi5iOWQ5N2VmIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L2FmX3Bob25ldC5jCisrKyBiL25ldC9waG9uZXQvYWZfcGhvbmV0LmMKQEAgLTY3LDExICs2NywxMCBAQAogCX0KIAogCXBucCA9IHBob25ldF9wcm90b19nZXQocHJvdG9jb2wpOwotI2lmZGVmIENPTkZJR19LTU9ECiAJaWYgKHBucCA9PSBOVUxMICYmCiAJICAgIHJlcXVlc3RfbW9kdWxlKCJuZXQtcGYtJWQtcHJvdG8tJWQiLCBQRl9QSE9ORVQsIHByb3RvY29sKSA9PSAwKQogCQlwbnAgPSBwaG9uZXRfcHJvdG9fZ2V0KHByb3RvY29sKTsKLSNlbmRpZgorCiAJaWYgKHBucCA9PSBOVUxMKQogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAlpZiAoc29jay0+dHlwZSAhPSBwbnAtPnNvY2tfdHlwZSkgewpkaWZmIC0tZ2l0IGEvbmV0L3Jma2lsbC9yZmtpbGwtaW5wdXQuYyBiL25ldC9yZmtpbGwvcmZraWxsLWlucHV0LmMKaW5kZXggZTViNjk1NS4uMjExMjRlYyAxMDA2NDQKLS0tIGEvbmV0L3Jma2lsbC9yZmtpbGwtaW5wdXQuYworKysgYi9uZXQvcmZraWxsL3Jma2lsbC1pbnB1dC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJyZmtpbGwtaW5wdXQuaCIKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKaW5kZXggOTk3NGIzZi4uOGY0NTdmMSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuYworKysgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCkBAIC00OTQsNyArNDk0LDcgQEAKIAogCWFfbyA9IHRjX2xvb2t1cF9hY3Rpb25fbihhY3RfbmFtZSk7CiAJaWYgKGFfbyA9PSBOVUxMKSB7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCQlydG5sX3VubG9jaygpOwogCQlyZXF1ZXN0X21vZHVsZSgiYWN0XyVzIiwgYWN0X25hbWUpOwogCQlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCmluZGV4IDhlYjc5ZTkuLjE2ZTdhYzkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmMKKysrIGIvbmV0L3NjaGVkL2Nsc19hcGkuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJCWVyciA9IC1FTk9FTlQ7CiAJCXRwX29wcyA9IHRjZl9wcm90b19sb29rdXBfb3BzKHRjYVtUQ0FfS0lORF0pOwogCQlpZiAodHBfb3BzID09IE5VTEwpIHsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJCQlzdHJ1Y3QgbmxhdHRyICpraW5kID0gdGNhW1RDQV9LSU5EXTsKIAkJCWNoYXIgbmFtZVtJRk5BTVNJWl07CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9lbWF0Y2guYyBiL25ldC9zY2hlZC9lbWF0Y2guYwppbmRleCA1ZTZmODJlLi5lODI1MTllIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvZW1hdGNoLmMKKysrIGIvbmV0L3NjaGVkL2VtYXRjaC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAogCQlpZiAoZW0tPm9wcyA9PSBOVUxMKSB7CiAJCQllcnIgPSAtRU5PRU5UOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkJCV9fcnRubF91bmxvY2soKTsKIAkJCXJlcXVlc3RfbW9kdWxlKCJlbWF0Y2gta2luZC0ldSIsIGVtX2hkci0+a2luZCk7CiAJCQlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IDExMjJjOTUuLmIxNmFkMjkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwpAQCAtNzY0LDcgKzc2NCw3IEBACiAJc3RydWN0IHFkaXNjX3NpemVfdGFibGUgKnN0YWI7CiAKIAlvcHMgPSBxZGlzY19sb29rdXBfb3BzKGtpbmQpOwotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAob3BzID09IE5VTEwgJiYga2luZCAhPSBOVUxMKSB7CiAJCWNoYXIgbmFtZVtJRk5BTVNJWl07CiAJCWlmIChubGFfc3RybGNweShuYW1lLCBraW5kLCBJRk5BTVNJWikgPCBJRk5BTVNJWikgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCA3YjU1NzJkLi45M2NkMzBjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtMzI2LDYgKzMyNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlIG5vb3BfbmV0ZGV2X3F1ZXVlID0gewogCS5xZGlzYwkJPQkmbm9vcF9xZGlzYywKKwkucWRpc2Nfc2xlZXBpbmcJPQkmbm9vcF9xZGlzYywKIH07CiAKIHN0cnVjdCBRZGlzYyBub29wX3FkaXNjID0gewpAQCAtMzUyLDYgKzM1Myw3IEBACiBzdGF0aWMgc3RydWN0IFFkaXNjIG5vcXVldWVfcWRpc2M7CiBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSBub3F1ZXVlX25ldGRldl9xdWV1ZSA9IHsKIAkucWRpc2MJCT0JJm5vcXVldWVfcWRpc2MsCisJLnFkaXNjX3NsZWVwaW5nCT0JJm5vcXVldWVfcWRpc2MsCiB9OwogCiBzdGF0aWMgc3RydWN0IFFkaXNjIG5vcXVldWVfcWRpc2MgPSB7CmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggM2U4ZDRlMy4uMmI3YTRiNSAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtMTE0Miw3ICsxMTQyLDcgQEAKIAogCXNvY2stPnR5cGUgPSB0eXBlOwogCi0jaWYgZGVmaW5lZChDT05GSUdfS01PRCkKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCS8qIEF0dGVtcHQgdG8gbG9hZCBhIHByb3RvY29sIG1vZHVsZSBpZiB0aGUgZmluZCBmYWlsZWQuCiAJICoKIAkgKiAxMi8wOS8xOTk2IE1hcmNpbjogQnV0ISB0aGlzIG1ha2VzIFJFQUxMWSBvbmx5IHNlbnNlLCBpZiB0aGUgdXNlcgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoLmMgYi9uZXQvc3VucnBjL2F1dGguYwppbmRleCA2YmZlYTllLi40MzZiZjFiIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGguYworKysgYi9uZXQvc3VucnBjL2F1dGguYwpAQCAtODMsMTAgKzgzLDggQEAKIAlpZiAoZmxhdm9yID49IFJQQ19BVVRIX01BWEZMQVZPUikKIAkJZ290byBvdXQ7CiAKLSNpZmRlZiBDT05GSUdfS01PRAogCWlmICgob3BzID0gYXV0aF9mbGF2b3JzW2ZsYXZvcl0pID09IE5VTEwpCiAJCXJlcXVlc3RfbW9kdWxlKCJycGMtYXV0aC0ldSIsIGZsYXZvcik7Ci0jZW5kaWYKIAlzcGluX2xvY2soJnJwY19hdXRoZmxhdm9yX2xvY2spOwogCW9wcyA9IGF1dGhfZmxhdm9yc1tmbGF2b3JdOwogCWlmIChvcHMgPT0gTlVMTCB8fCAhdHJ5X21vZHVsZV9nZXQob3BzLT5vd25lcikpIHsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2xudC5jIGIvbmV0L3N1bnJwYy9jbG50LmMKaW5kZXggNzY3MzllOS4uNDg5NWMzNCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jbG50LmMKKysrIGIvbmV0L3N1bnJwYy9jbG50LmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCWNsbnQtPmNsX3Byb2NpbmZvID0gdmVyc2lvbi0+cHJvY3M7CiAJY2xudC0+Y2xfbWF4cHJvYyAgPSB2ZXJzaW9uLT5ucnByb2NzOwogCWNsbnQtPmNsX3Byb3RuYW1lID0gcHJvZ3JhbS0+bmFtZTsKLQljbG50LT5jbF9wcm9nICAgICA9IHByb2dyYW0tPm51bWJlcjsKKwljbG50LT5jbF9wcm9nICAgICA9IGFyZ3MtPnByb2dudW1iZXIgPyA6IHByb2dyYW0tPm51bWJlcjsKIAljbG50LT5jbF92ZXJzICAgICA9IHZlcnNpb24tPm51bWJlcjsKIAljbG50LT5jbF9zdGF0cyAgICA9IHByb2dyYW0tPnN0YXRzOwogCWNsbnQtPmNsX21ldHJpY3MgID0gcnBjX2FsbG9jX2lvc3RhdHMoY2xudCk7CkBAIC0yMTMsMTAgKzIxMywxMCBAQAogCX0KIAogCS8qIHNhdmUgdGhlIG5vZGVuYW1lICovCi0JY2xudC0+Y2xfbm9kZWxlbiA9IHN0cmxlbih1dHNuYW1lKCktPm5vZGVuYW1lKTsKKwljbG50LT5jbF9ub2RlbGVuID0gc3RybGVuKGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSk7CiAJaWYgKGNsbnQtPmNsX25vZGVsZW4gPiBVTlhfTUFYTk9ERU5BTUUpCiAJCWNsbnQtPmNsX25vZGVsZW4gPSBVTlhfTUFYTk9ERU5BTUU7Ci0JbWVtY3B5KGNsbnQtPmNsX25vZGVuYW1lLCB1dHNuYW1lKCktPm5vZGVuYW1lLCBjbG50LT5jbF9ub2RlbGVuKTsKKwltZW1jcHkoY2xudC0+Y2xfbm9kZW5hbWUsIGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSwgY2xudC0+Y2xfbm9kZWxlbik7CiAJcnBjX3JlZ2lzdGVyX2NsaWVudChjbG50KTsKIAlyZXR1cm4gY2xudDsKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKaW5kZXggMjRkYjJiNC4uNDEwMTNkZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYworKysgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogCiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc2NoZWQuaD4KQEAgLTE3NiwxMyArMTc3LDEyIEBACiB9CiAKIHN0YXRpYyBpbnQgcnBjYl9yZWdpc3Rlcl9jYWxsKHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc2l6ZV90IGFkZHJsZW4sCi0JCQkgICAgICB1MzIgdmVyc2lvbiwgc3RydWN0IHJwY19tZXNzYWdlICptc2csCi0JCQkgICAgICBpbnQgKnJlc3VsdCkKKwkJCSAgICAgIHUzMiB2ZXJzaW9uLCBzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZykKIHsKIAlzdHJ1Y3QgcnBjX2NsbnQgKnJwY2JfY2xudDsKLQlpbnQgZXJyb3IgPSAwOworCWludCByZXN1bHQsIGVycm9yID0gMDsKIAotCSpyZXN1bHQgPSAwOworCW1zZy0+cnBjX3Jlc3AgPSAmcmVzdWx0OwogCiAJcnBjYl9jbG50ID0gcnBjYl9jcmVhdGVfbG9jYWwoYWRkciwgYWRkcmxlbiwgdmVyc2lvbik7CiAJaWYgKCFJU19FUlIocnBjYl9jbG50KSkgewpAQCAtMTkxLDEyICsxOTEsMTUgQEAKIAl9IGVsc2UKIAkJZXJyb3IgPSBQVFJfRVJSKHJwY2JfY2xudCk7CiAKLQlpZiAoZXJyb3IgPCAwKQorCWlmIChlcnJvciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiUlBDOiBmYWlsZWQgdG8gY29udGFjdCBsb2NhbCBycGNiaW5kICIKIAkJCQkic2VydmVyIChlcnJubyAlZCkuXG4iLCAtZXJyb3IpOwotCWRwcmludGsoIlJQQzogICAgICAgcmVnaXN0cmF0aW9uIHN0YXR1cyAlZC8lZFxuIiwgZXJyb3IsICpyZXN1bHQpOworCQlyZXR1cm4gZXJyb3I7CisJfQogCi0JcmV0dXJuIGVycm9yOworCWlmICghcmVzdWx0KQorCQlyZXR1cm4gLUVBQ0NFUzsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yMDUsNyArMjA4LDExIEBACiAgKiBAdmVyczogUlBDIHZlcnNpb24gbnVtYmVyIHRvIGJpbmQKICAqIEBwcm90OiB0cmFuc3BvcnQgcHJvdG9jb2wgdG8gcmVnaXN0ZXIKICAqIEBwb3J0OiBwb3J0IHZhbHVlIHRvIHJlZ2lzdGVyCi0gKiBAb2theTogT1VUOiByZXN1bHQgY29kZQorICoKKyAqIFJldHVybnMgemVybyBpZiB0aGUgcmVnaXN0cmF0aW9uIHJlcXVlc3Qgd2FzIGRpc3BhdGNoZWQgc3VjY2Vzc2Z1bGx5CisgKiBhbmQgdGhlIHJwY2JpbmQgZGFlbW9uIHJldHVybmVkIHN1Y2Nlc3MuICBPdGhlcndpc2UsIHJldHVybnMgYW4gZXJybm8KKyAqIHZhbHVlIHRoYXQgcmVmbGVjdHMgdGhlIG5hdHVyZSBvZiB0aGUgZXJyb3IgKHJlcXVlc3QgY291bGQgbm90IGJlCisgKiBkaXNwYXRjaGVkLCB0aW1lZCBvdXQsIG9yIHJwY2JpbmQgcmV0dXJuZWQgYW4gZXJyb3IpLgogICoKICAqIFJQQyBzZXJ2aWNlcyBpbnZva2UgdGhpcyBmdW5jdGlvbiB0byBhZHZlcnRpc2UgdGhlaXIgY29udGFjdAogICogaW5mb3JtYXRpb24gdmlhIHRoZSBzeXN0ZW0ncyBycGNiaW5kIGRhZW1vbi4gIFJQQyBzZXJ2aWNlcwpAQCAtMjE3LDE1ICsyMjQsNiBAQAogICogYWxsIHJlZ2lzdGVyZWQgdHJhbnNwb3J0cyBmb3IgW3Byb2dyYW0sIHZlcnNpb25dIGZyb20gdGhlIGxvY2FsCiAgKiBycGNiaW5kIGRhdGFiYXNlLgogICoKLSAqIFJldHVybnMgemVybyBpZiB0aGUgcmVnaXN0cmF0aW9uIHJlcXVlc3Qgd2FzIGRpc3BhdGNoZWQKLSAqIHN1Y2Nlc3NmdWxseSBhbmQgYSByZXBseSB3YXMgcmVjZWl2ZWQuICBUaGUgcnBjYmluZCBkYWVtb24ncwotICogYm9vbGVhbiByZXN1bHQgY29kZSBpcyBzdG9yZWQgaW4gKm9rYXkuCi0gKgotICogUmV0dXJucyBhbiBlcnJubyB2YWx1ZSBhbmQgc2V0cyAqcmVzdWx0IHRvIHplcm8gaWYgdGhlcmUgd2FzCi0gKiBzb21lIHByb2JsZW0gdGhhdCBwcmV2ZW50ZWQgdGhlIHJwY2JpbmQgcmVxdWVzdCBmcm9tIGJlaW5nCi0gKiBkaXNwYXRjaGVkLCBvciBpZiB0aGUgcnBjYmluZCBkYWVtb24gZGlkIG5vdCByZXNwb25kIHdpdGhpbgotICogdGhlIHRpbWVvdXQuCi0gKgogICogVGhpcyBmdW5jdGlvbiB1c2VzIHJwY2JpbmQgcHJvdG9jb2wgdmVyc2lvbiAyIHRvIGNvbnRhY3QgdGhlCiAgKiBsb2NhbCBycGNiaW5kIGRhZW1vbi4KICAqCkBAIC0yMzYsNyArMjM0LDcgQEAKICAqIElONkFERFJfQU5ZIChpZSBhdmFpbGFibGUgZm9yIGFsbCBBRl9JTkVUIGFuZCBBRl9JTkVUNgogICogYWRkcmVzc2VzKS4KICAqLwotaW50IHJwY2JfcmVnaXN0ZXIodTMyIHByb2csIHUzMiB2ZXJzLCBpbnQgcHJvdCwgdW5zaWduZWQgc2hvcnQgcG9ydCwgaW50ICpva2F5KQoraW50IHJwY2JfcmVnaXN0ZXIodTMyIHByb2csIHUzMiB2ZXJzLCBpbnQgcHJvdCwgdW5zaWduZWQgc2hvcnQgcG9ydCkKIHsKIAlzdHJ1Y3QgcnBjYmluZF9hcmdzIG1hcCA9IHsKIAkJLnJfcHJvZwkJPSBwcm9nLApAQCAtMjQ2LDcgKzI0NCw2IEBACiAJfTsKIAlzdHJ1Y3QgcnBjX21lc3NhZ2UgbXNnID0gewogCQkucnBjX2FyZ3AJPSAmbWFwLAotCQkucnBjX3Jlc3AJPSBva2F5LAogCX07CiAKIAlkcHJpbnRrKCJSUEM6ICAgICAgICVzcmVnaXN0ZXJpbmcgKCV1LCAldSwgJWQsICV1KSB3aXRoIGxvY2FsICIKQEAgLTI1OSw3ICsyNTYsNyBAQAogCiAJcmV0dXJuIHJwY2JfcmVnaXN0ZXJfY2FsbCgoc3RydWN0IHNvY2thZGRyICopJnJwY2JfaW5hZGRyX2xvb3BiYWNrLAogCQkJCQlzaXplb2YocnBjYl9pbmFkZHJfbG9vcGJhY2spLAotCQkJCQlSUENCVkVSU18yLCAmbXNnLCBva2F5KTsKKwkJCQkJUlBDQlZFUlNfMiwgJm1zZyk7CiB9CiAKIC8qCkBAIC0yOTAsNyArMjg3LDcgQEAKIAogCXJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoKHN0cnVjdCBzb2NrYWRkciAqKSZycGNiX2luYWRkcl9sb29wYmFjaywKIAkJCQkJc2l6ZW9mKHJwY2JfaW5hZGRyX2xvb3BiYWNrKSwKLQkJCQkJUlBDQlZFUlNfNCwgbXNnLCBtc2ctPnJwY19yZXNwKTsKKwkJCQkJUlBDQlZFUlNfNCwgbXNnKTsKIH0KIAogLyoKQEAgLTMwNCwxMCArMzAxLDEzIEBACiAJY2hhciBidWZbNjRdOwogCiAJLyogQ29uc3RydWN0IEFGX0lORVQ2IHVuaXZlcnNhbCBhZGRyZXNzICovCi0Jc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKLQkJCU5JUDZfRk1UIi4ldS4ldSIsCi0JCQlOSVA2KGFkZHJlc3NfdG9fcmVnaXN0ZXItPnNpbjZfYWRkciksCi0JCQlwb3J0ID4+IDgsIHBvcnQgJiAweGZmKTsKKwlpZiAoaXB2Nl9hZGRyX2FueSgmYWRkcmVzc190b19yZWdpc3Rlci0+c2luNl9hZGRyKSkKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjo6LiV1LiV1IiwKKwkJCQlwb3J0ID4+IDgsIHBvcnQgJiAweGZmKTsKKwllbHNlCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIE5JUDZfRk1UIi4ldS4ldSIsCisJCQkJTklQNihhZGRyZXNzX3RvX3JlZ2lzdGVyLT5zaW42X2FkZHIpLAorCQkJCXBvcnQgPj4gOCwgcG9ydCAmIDB4ZmYpOwogCW1hcC0+cl9hZGRyID0gYnVmOwogCiAJZHByaW50aygiUlBDOiAgICAgICAlc3JlZ2lzdGVyaW5nIFsldSwgJXUsICVzLCAnJXMnXSB3aXRoICIKQEAgLTMyMSw3ICszMjEsNyBAQAogCiAJcmV0dXJuIHJwY2JfcmVnaXN0ZXJfY2FsbCgoc3RydWN0IHNvY2thZGRyICopJnJwY2JfaW42YWRkcl9sb29wYmFjaywKIAkJCQkJc2l6ZW9mKHJwY2JfaW42YWRkcl9sb29wYmFjayksCi0JCQkJCVJQQ0JWRVJTXzQsIG1zZywgbXNnLT5ycGNfcmVzcCk7CisJCQkJCVJQQ0JWRVJTXzQsIG1zZyk7CiB9CiAKIC8qKgpAQCAtMzMwLDcgKzMzMCwxMSBAQAogICogQHZlcnNpb246IFJQQyB2ZXJzaW9uIG51bWJlciBvZiBzZXJ2aWNlIHRvICh1bilyZWdpc3RlcgogICogQGFkZHJlc3M6IGFkZHJlc3MgZmFtaWx5LCBJUCBhZGRyZXNzLCBhbmQgcG9ydCB0byAodW4pcmVnaXN0ZXIKICAqIEBuZXRpZDogbmV0aWQgb2YgdHJhbnNwb3J0IHByb3RvY29sIHRvICh1bilyZWdpc3RlcgotICogQHJlc3VsdDogcmVzdWx0IGNvZGUgZnJvbSBycGNiaW5kIFJQQyBjYWxsCisgKgorICogUmV0dXJucyB6ZXJvIGlmIHRoZSByZWdpc3RyYXRpb24gcmVxdWVzdCB3YXMgZGlzcGF0Y2hlZCBzdWNjZXNzZnVsbHkKKyAqIGFuZCB0aGUgcnBjYmluZCBkYWVtb24gcmV0dXJuZWQgc3VjY2Vzcy4gIE90aGVyd2lzZSwgcmV0dXJucyBhbiBlcnJubworICogdmFsdWUgdGhhdCByZWZsZWN0cyB0aGUgbmF0dXJlIG9mIHRoZSBlcnJvciAocmVxdWVzdCBjb3VsZCBub3QgYmUKKyAqIGRpc3BhdGNoZWQsIHRpbWVkIG91dCwgb3IgcnBjYmluZCByZXR1cm5lZCBhbiBlcnJvcikuCiAgKgogICogUlBDIHNlcnZpY2VzIGludm9rZSB0aGlzIGZ1bmN0aW9uIHRvIGFkdmVydGlzZSB0aGVpciBjb250YWN0CiAgKiBpbmZvcm1hdGlvbiB2aWEgdGhlIHN5c3RlbSdzIHJwY2JpbmQgZGFlbW9uLiAgUlBDIHNlcnZpY2VzCkBAIC0zNDIsMTUgKzM0Niw2IEBACiAgKiB0byB6ZXJvLiAgQ2FsbGVycyBwYXNzIGEgbmV0aWQgb2YgIiIgdG8gdW5yZWdpc3RlciBhbGwKICAqIHRyYW5zcG9ydCBuZXRpZHMgYXNzb2NpYXRlZCB3aXRoIFtwcm9ncmFtLCB2ZXJzaW9uLCBhZGRyZXNzXS4KICAqCi0gKiBSZXR1cm5zIHplcm8gaWYgdGhlIHJlZ2lzdHJhdGlvbiByZXF1ZXN0IHdhcyBkaXNwYXRjaGVkCi0gKiBzdWNjZXNzZnVsbHkgYW5kIGEgcmVwbHkgd2FzIHJlY2VpdmVkLiAgVGhlIHJwY2JpbmQgZGFlbW9uJ3MKLSAqIHJlc3VsdCBjb2RlIGlzIHN0b3JlZCBpbiAqcmVzdWx0LgotICoKLSAqIFJldHVybnMgYW4gZXJybm8gdmFsdWUgYW5kIHNldHMgKnJlc3VsdCB0byB6ZXJvIGlmIHRoZXJlIHdhcwotICogc29tZSBwcm9ibGVtIHRoYXQgcHJldmVudGVkIHRoZSBycGNiaW5kIHJlcXVlc3QgZnJvbSBiZWluZwotICogZGlzcGF0Y2hlZCwgb3IgaWYgdGhlIHJwY2JpbmQgZGFlbW9uIGRpZCBub3QgcmVzcG9uZCB3aXRoaW4KLSAqIHRoZSB0aW1lb3V0LgotICoKICAqIFRoaXMgZnVuY3Rpb24gdXNlcyBycGNiaW5kIHByb3RvY29sIHZlcnNpb24gNCB0byBjb250YWN0IHRoZQogICogbG9jYWwgcnBjYmluZCBkYWVtb24uICBUaGUgbG9jYWwgcnBjYmluZCBkYWVtb24gbXVzdCBzdXBwb3J0CiAgKiB2ZXJzaW9uIDQgb2YgdGhlIHJwY2JpbmQgcHJvdG9jb2wgaW4gb3JkZXIgZm9yIHRoZXNlIGZ1bmN0aW9ucwpAQCAtMzcyLDggKzM2Nyw3IEBACiAgKiBhZHZlcnRpc2VzIHRoZSBzZXJ2aWNlIG9uIGFsbCBJUHY0IGFuZCBJUHY2IGFkZHJlc3Nlcy4KICAqLwogaW50IHJwY2JfdjRfcmVnaXN0ZXIoY29uc3QgdTMyIHByb2dyYW0sIGNvbnN0IHUzMiB2ZXJzaW9uLAotCQkgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgY29uc3QgY2hhciAqbmV0aWQsCi0JCSAgICAgaW50ICpyZXN1bHQpCisJCSAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBjb25zdCBjaGFyICpuZXRpZCkKIHsKIAlzdHJ1Y3QgcnBjYmluZF9hcmdzIG1hcCA9IHsKIAkJLnJfcHJvZwkJPSBwcm9ncmFtLApAQCAtMzgzLDExICszNzcsOCBAQAogCX07CiAJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKIAkJLnJwY19hcmdwCT0gJm1hcCwKLQkJLnJwY19yZXNwCT0gcmVzdWx0LAogCX07CiAKLQkqcmVzdWx0ID0gMDsKLQogCXN3aXRjaCAoYWRkcmVzcy0+c2FfZmFtaWx5KSB7CiAJY2FzZSBBRl9JTkVUOgogCQlyZXR1cm4gcnBjYl9yZWdpc3Rlcl9uZXRpZDQoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHJlc3MsCkBAIC00NjksNiArNDYwLDI4IEBACiAJcmV0dXJuIHJwY19ydW5fdGFzaygmdGFza19zZXR1cF9kYXRhKTsKIH0KIAorLyoKKyAqIEluIHRoZSBjYXNlIHdoZXJlIHJwYyBjbGllbnRzIGhhdmUgYmVlbiBjbG9uZWQsIHdlIHdhbnQgdG8gbWFrZQorICogc3VyZSB0aGF0IHdlIHVzZSB0aGUgcHJvZ3JhbSBudW1iZXIvdmVyc2lvbiBldGMgb2YgdGhlIGFjdHVhbAorICogb3duZXIgb2YgdGhlIHhwcnQuIFRvIGRvIHNvLCB3ZSB3YWxrIGJhY2sgdXAgdGhlIHRyZWUgb2YgcGFyZW50cworICogdG8gZmluZCB3aG9ldmVyIGNyZWF0ZWQgdGhlIHRyYW5zcG9ydCBhbmQvb3Igd2hvZXZlciBoYXMgdGhlCisgKiBhdXRvYmluZCBmbGFnIHNldC4KKyAqLworc3RhdGljIHN0cnVjdCBycGNfY2xudCAqcnBjYl9maW5kX3RyYW5zcG9ydF9vd25lcihzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQpCit7CisJc3RydWN0IHJwY19jbG50ICpwYXJlbnQgPSBjbG50LT5jbF9wYXJlbnQ7CisKKwl3aGlsZSAocGFyZW50ICE9IGNsbnQpIHsKKwkJaWYgKHBhcmVudC0+Y2xfeHBydCAhPSBjbG50LT5jbF94cHJ0KQorCQkJYnJlYWs7CisJCWlmIChjbG50LT5jbF9hdXRvYmluZCkKKwkJCWJyZWFrOworCQljbG50ID0gcGFyZW50OworCQlwYXJlbnQgPSBwYXJlbnQtPmNsX3BhcmVudDsKKwl9CisJcmV0dXJuIGNsbnQ7Cit9CisKIC8qKgogICogcnBjYl9nZXRwb3J0X2FzeW5jIC0gb2J0YWluIHRoZSBwb3J0IGZvciBhIGdpdmVuIFJQQyBzZXJ2aWNlIG9uIGEgZ2l2ZW4gaG9zdAogICogQHRhc2s6IHRhc2sgdGhhdCBpcyB3YWl0aW5nIGZvciBwb3J0bWFwcGVyIHJlcXVlc3QKQEAgLTQ3OCwxMCArNDkxLDEwIEBACiAgKi8KIHZvaWQgcnBjYl9nZXRwb3J0X2FzeW5jKHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKLQlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQgPSB0YXNrLT50a19jbGllbnQ7CisJc3RydWN0IHJwY19jbG50ICpjbG50OwogCXN0cnVjdCBycGNfcHJvY2luZm8gKnByb2M7CiAJdTMyIGJpbmRfdmVyc2lvbjsKLQlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQgPSB0YXNrLT50a194cHJ0OworCXN0cnVjdCBycGNfeHBydCAqeHBydDsKIAlzdHJ1Y3QgcnBjX2NsbnQJKnJwY2JfY2xudDsKIAlzdGF0aWMgc3RydWN0IHJwY2JpbmRfYXJncyAqbWFwOwogCXN0cnVjdCBycGNfdGFzawkqY2hpbGQ7CkBAIC00OTAsMTMgKzUwMywxMyBAQAogCXNpemVfdCBzYWxlbjsKIAlpbnQgc3RhdHVzOwogCisJY2xudCA9IHJwY2JfZmluZF90cmFuc3BvcnRfb3duZXIodGFzay0+dGtfY2xpZW50KTsKKwl4cHJ0ID0gY2xudC0+Y2xfeHBydDsKKwogCWRwcmludGsoIlJQQzogJTV1ICVzKCVzLCAldSwgJXUsICVkKVxuIiwKIAkJdGFzay0+dGtfcGlkLCBfX2Z1bmNfXywKIAkJY2xudC0+Y2xfc2VydmVyLCBjbG50LT5jbF9wcm9nLCBjbG50LT5jbF92ZXJzLCB4cHJ0LT5wcm90KTsKIAotCS8qIEF1dG9iaW5kIG9uIGNsb25lZCBycGMgY2xpZW50cyBpcyBkaXNjb3VyYWdlZCAqLwotCUJVR19PTihjbG50LT5jbF9wYXJlbnQgIT0gY2xudCk7Ci0KIAkvKiBQdXQgc2VsZiBvbiB0aGUgd2FpdCBxdWV1ZSB0byBlbnN1cmUgd2UgZ2V0IG5vdGlmaWVkIGlmCiAJICogc29tZSBvdGhlciB0YXNrIGlzIGFscmVhZHkgYXR0ZW1wdGluZyB0byBiaW5kIHRoZSBwb3J0ICovCiAJcnBjX3NsZWVwX29uKCZ4cHJ0LT5iaW5kaW5nLCB0YXNrLCBOVUxMKTsKQEAgLTU1OCw3ICs1NzEsNyBAQAogCQlzdGF0dXMgPSAtRU5PTUVNOwogCQlkcHJpbnRrKCJSUEM6ICU1dSAlczogbm8gbWVtb3J5IGF2YWlsYWJsZVxuIiwKIAkJCXRhc2stPnRrX3BpZCwgX19mdW5jX18pOwotCQlnb3RvIGJhaWxvdXRfbm9mcmVlOworCQlnb3RvIGJhaWxvdXRfcmVsZWFzZV9jbGllbnQ7CiAJfQogCW1hcC0+cl9wcm9nID0gY2xudC0+Y2xfcHJvZzsKIAltYXAtPnJfdmVycyA9IGNsbnQtPmNsX3ZlcnM7CkBAIC01NzgsMTEgKzU5MSwxMyBAQAogCQkJdGFzay0+dGtfcGlkLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9Ci0JcnBjX3B1dF90YXNrKGNoaWxkKTsKIAotCXRhc2stPnRrX3hwcnQtPnN0YXQuYmluZF9jb3VudCsrOworCXhwcnQtPnN0YXQuYmluZF9jb3VudCsrOworCXJwY19wdXRfdGFzayhjaGlsZCk7CiAJcmV0dXJuOwogCitiYWlsb3V0X3JlbGVhc2VfY2xpZW50OgorCXJwY19yZWxlYXNlX2NsaWVudChycGNiX2NsbnQpOwogYmFpbG91dF9ub2ZyZWU6CiAJcnBjYl93YWtlX3JwY2JpbmRfd2FpdGVycyh4cHJ0LCBzdGF0dXMpOwogCXRhc2stPnRrX3N0YXR1cyA9IHN0YXR1czsKQEAgLTYzMyw3ICs2NDgsNyBAQAogc3RhdGljIGludCBycGNiX2VuY29kZV9tYXBwaW5nKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsCiAJCQkgICAgICAgc3RydWN0IHJwY2JpbmRfYXJncyAqcnBjYikKIHsKLQlkcHJpbnRrKCJSUEM6ICAgICAgIHJwY2JfZW5jb2RlX21hcHBpbmcoJXUsICV1LCAlZCwgJXUpXG4iLAorCWRwcmludGsoIlJQQzogICAgICAgZW5jb2RpbmcgcnBjYiByZXF1ZXN0ICgldSwgJXUsICVkLCAldSlcbiIsCiAJCQlycGNiLT5yX3Byb2csIHJwY2ItPnJfdmVycywgcnBjYi0+cl9wcm90LCBycGNiLT5yX3BvcnQpOwogCSpwKysgPSBodG9ubChycGNiLT5yX3Byb2cpOwogCSpwKysgPSBodG9ubChycGNiLT5yX3ZlcnMpOwpAQCAtNjQ4LDcgKzY2Myw3IEBACiAJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgKnBvcnRwKQogewogCSpwb3J0cCA9ICh1bnNpZ25lZCBzaG9ydCkgbnRvaGwoKnArKyk7Ci0JZHByaW50aygiUlBDOiAgICAgICBycGNiX2RlY29kZV9nZXRwb3J0IHJlc3VsdCAldVxuIiwKKwlkcHJpbnRrKCJSUEM6ICAgICAgIHJwY2IgZ2V0cG9ydCByZXN1bHQ6ICV1XG4iLAogCQkJKnBvcnRwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTY1Nyw3ICs2NzIsNyBAQAogCQkJICAgdW5zaWduZWQgaW50ICpib29scCkKIHsKIAkqYm9vbHAgPSAodW5zaWduZWQgaW50KSBudG9obCgqcCsrKTsKLQlkcHJpbnRrKCJSUEM6ICAgICAgIHJwY2JfZGVjb2RlX3NldDogY2FsbCAlc1xuIiwKKwlkcHJpbnRrKCJSUEM6ICAgICAgIHJwY2Igc2V0L3Vuc2V0IGNhbGwgJXNcbiIsCiAJCQkoKmJvb2xwID8gInN1Y2NlZWRlZCIgOiAiZmFpbGVkIikpOwogCXJldHVybiAwOwogfQpAQCAtNjY1LDcgKzY4MCw3IEBACiBzdGF0aWMgaW50IHJwY2JfZW5jb2RlX2dldGFkZHIoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwKIAkJCSAgICAgICBzdHJ1Y3QgcnBjYmluZF9hcmdzICpycGNiKQogewotCWRwcmludGsoIlJQQzogICAgICAgcnBjYl9lbmNvZGVfZ2V0YWRkcigldSwgJXUsICVzKVxuIiwKKwlkcHJpbnRrKCJSUEM6ICAgICAgIGVuY29kaW5nIHJwY2IgcmVxdWVzdCAoJXUsICV1LCAlcylcbiIsCiAJCQlycGNiLT5yX3Byb2csIHJwY2ItPnJfdmVycywgcnBjYi0+cl9hZGRyKTsKIAkqcCsrID0gaHRvbmwocnBjYi0+cl9wcm9nKTsKIAkqcCsrID0gaHRvbmwocnBjYi0+cl92ZXJzKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjLmMgYi9uZXQvc3VucnBjL3N2Yy5jCmluZGV4IDVhMzJjYjcuLjU0Yzk4ZDggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjLmMKKysrIGIvbmV0L3N1bnJwYy9zdmMuYwpAQCAtMjgsNiArMjgsOCBAQAogCiAjZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfU1ZDRFNQCiAKK3N0YXRpYyB2b2lkIHN2Y191bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqc2Vydik7CisKICNkZWZpbmUgc3ZjX3NlcnZfaXNfcG9vbGVkKHNlcnYpICAgICgoc2VydiktPnN2X2Z1bmN0aW9uKQogCiAvKgpAQCAtMzU3LDcgKzM1OSw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc3ZjX3NlcnYgKgogX19zdmNfY3JlYXRlKHN0cnVjdCBzdmNfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgaW50IGJ1ZnNpemUsIGludCBucG9vbHMsCi0JICAgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpKQorCSAgIHNhX2ZhbWlseV90IGZhbWlseSwgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpKQogewogCXN0cnVjdCBzdmNfc2Vydgkqc2VydjsKIAl1bnNpZ25lZCBpbnQgdmVyczsKQEAgLTM2Niw2ICszNjgsNyBAQAogCiAJaWYgKCEoc2VydiA9IGt6YWxsb2Moc2l6ZW9mKCpzZXJ2KSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gTlVMTDsKKwlzZXJ2LT5zdl9mYW1pbHkgICAgPSBmYW1pbHk7CiAJc2Vydi0+c3ZfbmFtZSAgICAgID0gcHJvZy0+cGdfbmFtZTsKIAlzZXJ2LT5zdl9wcm9ncmFtICAgPSBwcm9nOwogCXNlcnYtPnN2X25ydGhyZWFkcyA9IDE7CkBAIC00MTYsMzAgKzQxOSwyOSBAQAogCQlzcGluX2xvY2tfaW5pdCgmcG9vbC0+c3BfbG9jayk7CiAJfQogCi0KIAkvKiBSZW1vdmUgYW55IHN0YWxlIHBvcnRtYXAgcmVnaXN0cmF0aW9ucyAqLwotCXN2Y19yZWdpc3RlcihzZXJ2LCAwLCAwKTsKKwlzdmNfdW5yZWdpc3RlcihzZXJ2KTsKIAogCXJldHVybiBzZXJ2OwogfQogCiBzdHJ1Y3Qgc3ZjX3NlcnYgKgogc3ZjX2NyZWF0ZShzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKnByb2csIHVuc2lnbmVkIGludCBidWZzaXplLAotCQl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBzdmNfc2VydiAqc2VydikpCisJCXNhX2ZhbWlseV90IGZhbWlseSwgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpKQogewotCXJldHVybiBfX3N2Y19jcmVhdGUocHJvZywgYnVmc2l6ZSwgLypucG9vbHMqLzEsIHNodXRkb3duKTsKKwlyZXR1cm4gX19zdmNfY3JlYXRlKHByb2csIGJ1ZnNpemUsIC8qbnBvb2xzKi8xLCBmYW1pbHksIHNodXRkb3duKTsKIH0KIEVYUE9SVF9TWU1CT0woc3ZjX2NyZWF0ZSk7CiAKIHN0cnVjdCBzdmNfc2VydiAqCiBzdmNfY3JlYXRlX3Bvb2xlZChzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKnByb2csIHVuc2lnbmVkIGludCBidWZzaXplLAotCQl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBzdmNfc2VydiAqc2VydiksCisJCSAgc2FfZmFtaWx5X3QgZmFtaWx5LCB2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBzdmNfc2VydiAqc2VydiksCiAJCSAgc3ZjX3RocmVhZF9mbiBmdW5jLCBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAJc3RydWN0IHN2Y19zZXJ2ICpzZXJ2OwogCXVuc2lnbmVkIGludCBucG9vbHMgPSBzdmNfcG9vbF9tYXBfZ2V0KCk7CiAKLQlzZXJ2ID0gX19zdmNfY3JlYXRlKHByb2csIGJ1ZnNpemUsIG5wb29scywgc2h1dGRvd24pOworCXNlcnYgPSBfX3N2Y19jcmVhdGUocHJvZywgYnVmc2l6ZSwgbnBvb2xzLCBmYW1pbHksIHNodXRkb3duKTsKIAogCWlmIChzZXJ2ICE9IE5VTEwpIHsKIAkJc2Vydi0+c3ZfZnVuY3Rpb24gPSBmdW5jOwpAQCAtNDg2LDggKzQ4OCw3IEBACiAJaWYgKHN2Y19zZXJ2X2lzX3Bvb2xlZChzZXJ2KSkKIAkJc3ZjX3Bvb2xfbWFwX3B1dCgpOwogCi0JLyogVW5yZWdpc3RlciBzZXJ2aWNlIHdpdGggdGhlIHBvcnRtYXBwZXIgKi8KLQlzdmNfcmVnaXN0ZXIoc2VydiwgMCwgMCk7CisJc3ZjX3VucmVnaXN0ZXIoc2Vydik7CiAJa2ZyZWUoc2Vydi0+c3ZfcG9vbHMpOwogCWtmcmVlKHNlcnYpOwogfQpAQCAtNzE4LDU1ICs3MTksMjQ1IEBACiB9CiBFWFBPUlRfU1lNQk9MKHN2Y19leGl0X3RocmVhZCk7CiAKKyNpZmRlZiBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0CisKIC8qCi0gKiBSZWdpc3RlciBhbiBSUEMgc2VydmljZSB3aXRoIHRoZSBsb2NhbCBwb3J0bWFwcGVyLgotICogVG8gdW5yZWdpc3RlciBhIHNlcnZpY2UsIGNhbGwgdGhpcyByb3V0aW5lIHdpdGgKLSAqIHByb3RvIGFuZCBwb3J0ID09IDAuCisgKiBSZWdpc3RlciBhbiAiaW5ldCIgcHJvdG9jb2wgZmFtaWx5IG5ldGlkIHdpdGggdGhlIGxvY2FsCisgKiBycGNiaW5kIGRhZW1vbiB2aWEgYW4gcnBjYmluZCB2NCBTRVQgcmVxdWVzdC4KKyAqCisgKiBObyBuZXRjb25maWcgaW5mcmFzdHJ1Y3R1cmUgaXMgYXZhaWxhYmxlIGluIHRoZSBrZXJuZWwsIHNvCisgKiB3ZSBtYXAgSVBfIHByb3RvY29sIG51bWJlcnMgdG8gbmV0aWRzIGJ5IGhhbmQuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3M7IGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgaXMgcmV0dXJuZWQKKyAqIGlmIGFueSBlcnJvciBvY2N1cnMuCiAgKi8KLWludAotc3ZjX3JlZ2lzdGVyKHN0cnVjdCBzdmNfc2VydiAqc2VydiwgaW50IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBwb3J0KQorc3RhdGljIGludCBfX3N2Y19ycGNiX3JlZ2lzdGVyNChjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sCisJCQkJY29uc3QgdW5zaWduZWQgc2hvcnQgcHJvdG9jb2wsCisJCQkJY29uc3QgdW5zaWduZWQgc2hvcnQgcG9ydCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luID0geworCQkuc2luX2ZhbWlseQkJPSBBRl9JTkVULAorCQkuc2luX2FkZHIuc19hZGRyCT0gaHRvbmwoSU5BRERSX0FOWSksCisJCS5zaW5fcG9ydAkJPSBodG9ucyhwb3J0KSwKKwl9OworCWNoYXIgKm5ldGlkOworCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgSVBQUk9UT19VRFA6CisJCW5ldGlkID0gUlBDQklORF9ORVRJRF9VRFA7CisJCWJyZWFrOworCWNhc2UgSVBQUk9UT19UQ1A6CisJCW5ldGlkID0gUlBDQklORF9ORVRJRF9UQ1A7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOworCX0KKworCXJldHVybiBycGNiX3Y0X3JlZ2lzdGVyKHByb2dyYW0sIHZlcnNpb24sCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIG5ldGlkKTsKK30KKworLyoKKyAqIFJlZ2lzdGVyIGFuICJpbmV0NiIgcHJvdG9jb2wgZmFtaWx5IG5ldGlkIHdpdGggdGhlIGxvY2FsCisgKiBycGNiaW5kIGRhZW1vbiB2aWEgYW4gcnBjYmluZCB2NCBTRVQgcmVxdWVzdC4KKyAqCisgKiBObyBuZXRjb25maWcgaW5mcmFzdHJ1Y3R1cmUgaXMgYXZhaWxhYmxlIGluIHRoZSBrZXJuZWwsIHNvCisgKiB3ZSBtYXAgSVBfIHByb3RvY29sIG51bWJlcnMgdG8gbmV0aWRzIGJ5IGhhbmQuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3M7IGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgaXMgcmV0dXJuZWQKKyAqIGlmIGFueSBlcnJvciBvY2N1cnMuCisgKi8KK3N0YXRpYyBpbnQgX19zdmNfcnBjYl9yZWdpc3RlcjYoY29uc3QgdTMyIHByb2dyYW0sIGNvbnN0IHUzMiB2ZXJzaW9uLAorCQkJCWNvbnN0IHVuc2lnbmVkIHNob3J0IHByb3RvY29sLAorCQkJCWNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQpCit7CisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42ID0geworCQkuc2luNl9mYW1pbHkJCT0gQUZfSU5FVDYsCisJCS5zaW42X2FkZHIJCT0gSU42QUREUl9BTllfSU5JVCwKKwkJLnNpbjZfcG9ydAkJPSBodG9ucyhwb3J0KSwKKwl9OworCWNoYXIgKm5ldGlkOworCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgSVBQUk9UT19VRFA6CisJCW5ldGlkID0gUlBDQklORF9ORVRJRF9VRFA2OworCQlicmVhazsKKwljYXNlIElQUFJPVE9fVENQOgorCQluZXRpZCA9IFJQQ0JJTkRfTkVUSURfVENQNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CisJfQorCisJcmV0dXJuIHJwY2JfdjRfcmVnaXN0ZXIocHJvZ3JhbSwgdmVyc2lvbiwKKwkJCQkoc3RydWN0IHNvY2thZGRyICopJnNpbjYsIG5ldGlkKTsKK30KKworLyoKKyAqIFJlZ2lzdGVyIGEga2VybmVsIFJQQyBzZXJ2aWNlIHZpYSBycGNiaW5kIHZlcnNpb24gNC4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzczsgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBpcyByZXR1cm5lZAorICogaWYgYW55IGVycm9yIG9jY3Vycy4KKyAqLworc3RhdGljIGludCBfX3N2Y19yZWdpc3Rlcihjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sCisJCQkgIGNvbnN0IHNhX2ZhbWlseV90IGZhbWlseSwKKwkJCSAgY29uc3QgdW5zaWduZWQgc2hvcnQgcHJvdG9jb2wsCisJCQkgIGNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQpCit7CisJaW50IGVycm9yOworCisJc3dpdGNoIChmYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldHVybiBfX3N2Y19ycGNiX3JlZ2lzdGVyNChwcm9ncmFtLCB2ZXJzaW9uLAorCQkJCQkJcHJvdG9jb2wsIHBvcnQpOworCWNhc2UgQUZfSU5FVDY6CisJCWVycm9yID0gX19zdmNfcnBjYl9yZWdpc3RlcjYocHJvZ3JhbSwgdmVyc2lvbiwKKwkJCQkJCXByb3RvY29sLCBwb3J0KTsKKwkJaWYgKGVycm9yIDwgMCkKKwkJCXJldHVybiBlcnJvcjsKKworCQkvKgorCQkgKiBXb3JrIGFyb3VuZCBidWcgaW4gc29tZSB2ZXJzaW9ucyBvZiBMaW51eCBycGNiaW5kCisJCSAqIHdoaWNoIGRvbid0IGFsbG93IHJlZ2lzdHJhdGlvbiBvZiBib3RoIGluZXQgYW5kCisJCSAqIGluZXQ2IG5ldGlkcy4KKwkJICoKKwkJICogRXJyb3IgcmV0dXJuIGlnbm9yZWQgZm9yIG5vdy4KKwkJICovCisJCV9fc3ZjX3JwY2JfcmVnaXN0ZXI0KHByb2dyYW0sIHZlcnNpb24sCisJCQkJCQlwcm90b2NvbCwgcG9ydCk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUFGTk9TVVBQT1JUOworfQorCisjZWxzZQkvKiBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0ICovCisKKy8qCisgKiBSZWdpc3RlciBhIGtlcm5lbCBSUEMgc2VydmljZSB2aWEgcnBjYmluZCB2ZXJzaW9uIDIuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3M7IGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgaXMgcmV0dXJuZWQKKyAqIGlmIGFueSBlcnJvciBvY2N1cnMuCisgKi8KK3N0YXRpYyBpbnQgX19zdmNfcmVnaXN0ZXIoY29uc3QgdTMyIHByb2dyYW0sIGNvbnN0IHUzMiB2ZXJzaW9uLAorCQkJICBzYV9mYW1pbHlfdCBmYW1pbHksCisJCQkgIGNvbnN0IHVuc2lnbmVkIHNob3J0IHByb3RvY29sLAorCQkJICBjb25zdCB1bnNpZ25lZCBzaG9ydCBwb3J0KQoreworCWlmIChmYW1pbHkgIT0gQUZfSU5FVCkKKwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisKKwlyZXR1cm4gcnBjYl9yZWdpc3Rlcihwcm9ncmFtLCB2ZXJzaW9uLCBwcm90b2NvbCwgcG9ydCk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0ICovCisKKy8qKgorICogc3ZjX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYW4gUlBDIHNlcnZpY2Ugd2l0aCB0aGUgbG9jYWwgcG9ydG1hcHBlcgorICogQHNlcnY6IHN2Y19zZXJ2IHN0cnVjdCBmb3IgdGhlIHNlcnZpY2UgdG8gcmVnaXN0ZXIKKyAqIEBwcm90bzogdHJhbnNwb3J0IHByb3RvY29sIG51bWJlciB0byBhZHZlcnRpc2UKKyAqIEBwb3J0OiBwb3J0IHRvIGFkdmVydGlzZQorICoKKyAqIFNlcnZpY2UgaXMgcmVnaXN0ZXJlZCBmb3IgYW55IGFkZHJlc3MgaW4gc2VydidzIGFkZHJlc3MgZmFtaWx5CisgKi8KK2ludCBzdmNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjb25zdCB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJIGNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQpCiB7CiAJc3RydWN0IHN2Y19wcm9ncmFtCSpwcm9ncDsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAl1bnNpZ25lZCBpbnQJCWk7Ci0JaW50CQkJZXJyb3IgPSAwLCBkdW1teTsKKwlpbnQJCQllcnJvciA9IDA7CiAKLQlpZiAoIXBvcnQpCi0JCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9TSUdQRU5ESU5HKTsKKwlCVUdfT04ocHJvdG8gPT0gMCAmJiBwb3J0ID09IDApOwogCiAJZm9yIChwcm9ncCA9IHNlcnYtPnN2X3Byb2dyYW07IHByb2dwOyBwcm9ncCA9IHByb2dwLT5wZ19uZXh0KSB7CiAJCWZvciAoaSA9IDA7IGkgPCBwcm9ncC0+cGdfbnZlcnM7IGkrKykgewogCQkJaWYgKHByb2dwLT5wZ192ZXJzW2ldID09IE5VTEwpCiAJCQkJY29udGludWU7CiAKLQkJCWRwcmludGsoInN2Yzogc3ZjX3JlZ2lzdGVyKCVzLCAlcywgJWQsICVkKSVzXG4iLAorCQkJZHByaW50aygic3ZjOiBzdmNfcmVnaXN0ZXIoJXN2JWQsICVzLCAldSwgJXUpJXNcbiIsCiAJCQkJCXByb2dwLT5wZ19uYW1lLAorCQkJCQlpLAogCQkJCQlwcm90byA9PSBJUFBST1RPX1VEUD8gICJ1ZHAiIDogInRjcCIsCiAJCQkJCXBvcnQsCi0JCQkJCWksCisJCQkJCXNlcnYtPnN2X2ZhbWlseSwKIAkJCQkJcHJvZ3AtPnBnX3ZlcnNbaV0tPnZzX2hpZGRlbj8KIAkJCQkJCSIgKGJ1dCBub3QgdGVsbGluZyBwb3J0bWFwKSIgOiAiIik7CiAKIAkJCWlmIChwcm9ncC0+cGdfdmVyc1tpXS0+dnNfaGlkZGVuKQogCQkJCWNvbnRpbnVlOwogCi0JCQllcnJvciA9IHJwY2JfcmVnaXN0ZXIocHJvZ3AtPnBnX3Byb2csIGksIHByb3RvLCBwb3J0LCAmZHVtbXkpOworCQkJZXJyb3IgPSBfX3N2Y19yZWdpc3Rlcihwcm9ncC0+cGdfcHJvZywgaSwKKwkJCQkJCXNlcnYtPnN2X2ZhbWlseSwgcHJvdG8sIHBvcnQpOwogCQkJaWYgKGVycm9yIDwgMCkKIAkJCQlicmVhazsKLQkJCWlmIChwb3J0ICYmICFkdW1teSkgewotCQkJCWVycm9yID0gLUVBQ0NFUzsKLQkJCQlicmVhazsKLQkJCX0KIAkJfQogCX0KIAotCWlmICghcG9ydCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQlyZWNhbGNfc2lncGVuZGluZygpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJcmV0dXJuIGVycm9yOworfQorCisjaWZkZWYgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNAorCitzdGF0aWMgdm9pZCBfX3N2Y191bnJlZ2lzdGVyKGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbiwKKwkJCSAgICAgY29uc3QgY2hhciAqcHJvZ25hbWUpCit7CisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42ID0geworCQkuc2luNl9mYW1pbHkJCT0gQUZfSU5FVDYsCisJCS5zaW42X2FkZHIJCT0gSU42QUREUl9BTllfSU5JVCwKKwkJLnNpbjZfcG9ydAkJPSAwLAorCX07CisJaW50IGVycm9yOworCisJZXJyb3IgPSBycGNiX3Y0X3JlZ2lzdGVyKHByb2dyYW0sIHZlcnNpb24sCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZzaW42LCAiIik7CisJZHByaW50aygic3ZjOiAlcyglc3YldSksIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHByb2duYW1lLCB2ZXJzaW9uLCBlcnJvcik7Cit9CisKKyNlbHNlCS8qIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgKi8KKworc3RhdGljIHZvaWQgX19zdmNfdW5yZWdpc3Rlcihjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sCisJCQkgICAgIGNvbnN0IGNoYXIgKnByb2duYW1lKQoreworCWludCBlcnJvcjsKKworCWVycm9yID0gcnBjYl9yZWdpc3Rlcihwcm9ncmFtLCB2ZXJzaW9uLCAwLCAwKTsKKwlkcHJpbnRrKCJzdmM6ICVzKCVzdiV1KSwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcHJvZ25hbWUsIHZlcnNpb24sIGVycm9yKTsKK30KKworI2VuZGlmCS8qIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgKi8KKworLyoKKyAqIEFsbCBuZXRpZHMsIGJpbmQgYWRkcmVzc2VzIGFuZCBwb3J0cyByZWdpc3RlcmVkIGZvciBbcHJvZ3JhbSwgdmVyc2lvbl0KKyAqIGFyZSByZW1vdmVkIGZyb20gdGhlIGxvY2FsIHJwY2JpbmQgZGF0YWJhc2UgKGlmIHRoZSBzZXJ2aWNlIGlzIG5vdAorICogaGlkZGVuKSB0byBtYWtlIHdheSBmb3IgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHNlcnZpY2UuCisgKgorICogVGhlIHJlc3VsdCBvZiB1bnJlZ2lzdHJhdGlvbiBpcyByZXBvcnRlZCB2aWEgZHByaW50ayBmb3IgdGhvc2Ugd2hvIHdhbnQKKyAqIHZlcmlmaWNhdGlvbiBvZiB0aGUgcmVzdWx0LCBidXQgaXMgb3RoZXJ3aXNlIG5vdCBpbXBvcnRhbnQuCisgKi8KK3N0YXRpYyB2b2lkIHN2Y191bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqc2VydikKK3sKKwlzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKnByb2dwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGk7CisKKwljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CisKKwlmb3IgKHByb2dwID0gc2Vydi0+c3ZfcHJvZ3JhbTsgcHJvZ3A7IHByb2dwID0gcHJvZ3AtPnBnX25leHQpIHsKKwkJZm9yIChpID0gMDsgaSA8IHByb2dwLT5wZ19udmVyczsgaSsrKSB7CisJCQlpZiAocHJvZ3AtPnBnX3ZlcnNbaV0gPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChwcm9ncC0+cGdfdmVyc1tpXS0+dnNfaGlkZGVuKQorCQkJCWNvbnRpbnVlOworCisJCQlfX3N2Y191bnJlZ2lzdGVyKHByb2dwLT5wZ19wcm9nLCBpLCBwcm9ncC0+cGdfbmFtZSk7CisJCX0KIAl9CiAKLQlyZXR1cm4gZXJyb3I7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwlyZWNhbGNfc2lncGVuZGluZygpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwppbmRleCBlNDZjODI1Li5iZjViNWNkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jCkBAIC0xNTksMTUgKzE1OSw0NCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3ZjX3hwcnRfaW5pdCk7CiAKLWludCBzdmNfY3JlYXRlX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjaGFyICp4cHJ0X25hbWUsIHVuc2lnbmVkIHNob3J0IHBvcnQsCi0JCSAgICBpbnQgZmxhZ3MpCitzdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpfX3N2Y194cG9fY3JlYXRlKHN0cnVjdCBzdmNfeHBydF9jbGFzcyAqeGNsLAorCQkJCQkgc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LAorCQkJCQkgdW5zaWduZWQgc2hvcnQgcG9ydCwgaW50IGZsYWdzKQogewotCXN0cnVjdCBzdmNfeHBydF9jbGFzcyAqeGNsOwogCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW4gPSB7CiAJCS5zaW5fZmFtaWx5CQk9IEFGX0lORVQsCiAJCS5zaW5fYWRkci5zX2FkZHIJPSBodG9ubChJTkFERFJfQU5ZKSwKIAkJLnNpbl9wb3J0CQk9IGh0b25zKHBvcnQpLAogCX07CisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42ID0geworCQkuc2luNl9mYW1pbHkJCT0gQUZfSU5FVDYsCisJCS5zaW42X2FkZHIJCT0gSU42QUREUl9BTllfSU5JVCwKKwkJLnNpbjZfcG9ydAkJPSBodG9ucyhwb3J0KSwKKwl9OworCXN0cnVjdCBzb2NrYWRkciAqc2FwOworCXNpemVfdCBsZW47CisKKwlzd2l0Y2ggKHNlcnYtPnN2X2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW47CisJCWxlbiA9IHNpemVvZihzaW4pOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQlzYXAgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjY7CisJCWxlbiA9IHNpemVvZihzaW42KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVSUl9QVFIoLUVBRk5PU1VQUE9SVCk7CisJfQorCisJcmV0dXJuIHhjbC0+eGNsX29wcy0+eHBvX2NyZWF0ZShzZXJ2LCBzYXAsIGxlbiwgZmxhZ3MpOworfQorCitpbnQgc3ZjX2NyZWF0ZV94cHJ0KHN0cnVjdCBzdmNfc2VydiAqc2VydiwgY2hhciAqeHBydF9uYW1lLCB1bnNpZ25lZCBzaG9ydCBwb3J0LAorCQkgICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdmNfeHBydF9jbGFzcyAqeGNsOworCiAJZHByaW50aygic3ZjOiBjcmVhdGluZyB0cmFuc3BvcnQgJXNbJWRdXG4iLCB4cHJ0X25hbWUsIHBvcnQpOwogCXNwaW5fbG9jaygmc3ZjX3hwcnRfY2xhc3NfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh4Y2wsICZzdmNfeHBydF9jbGFzc19saXN0LCB4Y2xfbGlzdCkgewpAQCAtMTgwLDkgKzIwOSw3IEBACiAJCQlnb3RvIGVycjsKIAogCQlzcGluX3VubG9jaygmc3ZjX3hwcnRfY2xhc3NfbG9jayk7Ci0JCW5ld3hwcnQgPSB4Y2wtPnhjbF9vcHMtPgotCQkJeHBvX2NyZWF0ZShzZXJ2LCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHNpbiksCi0JCQkJICAgZmxhZ3MpOworCQluZXd4cHJ0ID0gX19zdmNfeHBvX2NyZWF0ZSh4Y2wsIHNlcnYsIHBvcnQsIGZsYWdzKTsKIAkJaWYgKElTX0VSUihuZXd4cHJ0KSkgewogCQkJbW9kdWxlX3B1dCh4Y2wtPnhjbF9vd25lcik7CiAJCQlyZXR1cm4gUFRSX0VSUihuZXd4cHJ0KTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKaW5kZXggM2U2NTcxOS4uOTUyOTNmNSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKQEAgLTExMTQsNiArMTExNCw3IEBACiAJc3RydWN0IHN2Y19zb2NrCSpzdnNrOwogCXN0cnVjdCBzb2NrCSppbmV0OwogCWludAkJcG1hcF9yZWdpc3RlciA9ICEoZmxhZ3MgJiBTVkNfU09DS19BTk9OWU1PVVMpOworCWludAkJdmFsOwogCiAJZHByaW50aygic3ZjOiBzdmNfc2V0dXBfc29ja2V0ICVwXG4iLCBzb2NrKTsKIAlpZiAoIShzdnNrID0ga3phbGxvYyhzaXplb2YoKnN2c2spLCBHRlBfS0VSTkVMKSkpIHsKQEAgLTExNDYsNiArMTE0NywxOCBAQAogCWVsc2UKIAkJc3ZjX3RjcF9pbml0KHN2c2ssIHNlcnYpOwogCisJLyoKKwkgKiBXZSBzdGFydCBvbmUgbGlzdGVuZXIgcGVyIHN2X3NlcnYuICBXZSB3YW50IEFGX0lORVQKKwkgKiByZXF1ZXN0cyB0byBiZSBhdXRvbWF0aWNhbGx5IHNodW50ZWQgdG8gb3VyIEFGX0lORVQ2CisJICogbGlzdGVuZXIgdXNpbmcgYSBtYXBwZWQgSVB2NCBhZGRyZXNzLiAgTWFrZSBzdXJlCisJICogbm8tb25lIHN0YXJ0cyBhbiBlcXVpdmFsZW50IElQdjQgbGlzdGVuZXIsIHdoaWNoCisJICogd291bGQgc3RlYWwgb3VyIGluY29taW5nIGNvbm5lY3Rpb25zLgorCSAqLworCXZhbCA9IDA7CisJaWYgKHNlcnYtPnN2X2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJa2VybmVsX3NldHNvY2tvcHQoc29jaywgU09MX0lQVjYsIElQVjZfVjZPTkxZLAorCQkJCQkoY2hhciAqKSZ2YWwsIHNpemVvZih2YWwpKTsKKwogCWRwcmludGsoInN2Yzogc3ZjX3NldHVwX3NvY2tldCBjcmVhdGVkICVwIChpbmV0ICVwKVxuIiwKIAkJCQlzdnNrLCBzdnNrLT5za19zayk7CiAKQEAgLTExNTQsOCArMTE2Nyw3IEBACiAKIGludCBzdmNfYWRkc29jayhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsCiAJCWludCBmZCwKLQkJY2hhciAqbmFtZV9yZXR1cm4sCi0JCWludCAqcHJvdG8pCisJCWNoYXIgKm5hbWVfcmV0dXJuKQogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCBzb2NrZXQgKnNvID0gc29ja2ZkX2xvb2t1cChmZCwgJmVycik7CkBAIC0xMTkwLDcgKzEyMDIsNiBAQAogCQlzb2NrZmRfcHV0KHNvKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JaWYgKHByb3RvKSAqcHJvdG8gPSBzby0+c2stPnNrX3Byb3RvY29sOwogCXJldHVybiBvbmVfc29ja19uYW1lKG5hbWVfcmV0dXJuLCBzdnNrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19hZGRzb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydC5jIGIvbmV0L3N1bnJwYy94cHJ0LmMKaW5kZXggOTlhNTJhYS4uMjllNDAxYiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0LmMKQEAgLTEwOCwxMyArMTA4LDEwIEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlyZXN1bHQgPSAtRUlOVkFMOwotCWlmICh0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpIHsKLQkJbGlzdF9hZGRfdGFpbCgmdHJhbnNwb3J0LT5saXN0LCAmeHBydF9saXN0KTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUlBDOiBSZWdpc3RlcmVkICVzIHRyYW5zcG9ydCBtb2R1bGUuXG4iLAotCQkJdHJhbnNwb3J0LT5uYW1lKTsKLQkJcmVzdWx0ID0gMDsKLQl9CisJbGlzdF9hZGRfdGFpbCgmdHJhbnNwb3J0LT5saXN0LCAmeHBydF9saXN0KTsKKwlwcmludGsoS0VSTl9JTkZPICJSUEM6IFJlZ2lzdGVyZWQgJXMgdHJhbnNwb3J0IG1vZHVsZS5cbiIsCisJICAgICAgIHRyYW5zcG9ydC0+bmFtZSk7CisJcmVzdWx0ID0gMDsKIAogb3V0OgogCXNwaW5fdW5sb2NrKCZ4cHJ0X2xpc3RfbG9jayk7CkBAIC0xNDMsNyArMTQwLDYgQEAKIAkJCQkiUlBDOiBVbnJlZ2lzdGVyZWQgJXMgdHJhbnNwb3J0IG1vZHVsZS5cbiIsCiAJCQkJdHJhbnNwb3J0LT5uYW1lKTsKIAkJCWxpc3RfZGVsX2luaXQoJnRyYW5zcG9ydC0+bGlzdCk7Ci0JCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jCmluZGV4IDVjMTk1NGQuLjE0MTA2ZDIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYworKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMKQEAgLTExOCw2ICsxMTgsMTAgQEAKIAl9CiAKIAlpZiAoeGRyYnVmLT50YWlsWzBdLmlvdl9sZW4pIHsKKwkJLyogdGhlIHJwY3JkbWEgcHJvdG9jb2wgYWxsb3dzIHVzIHRvIG9taXQgYW55IHRyYWlsaW5nCisJCSAqIHhkciBwYWQgYnl0ZXMsIHNhdmluZyB0aGUgc2VydmVyIGFuIFJETUEgb3BlcmF0aW9uLiAqLworCQlpZiAoeGRyYnVmLT50YWlsWzBdLmlvdl9sZW4gPCA0ICYmIHhwcnRfcmRtYV9wYWRfb3B0aW1pemUpCisJCQlyZXR1cm4gbjsKIAkJaWYgKG4gPT0gbnNlZ3MpCiAJCQlyZXR1cm4gMDsKIAkJc2VnW25dLm1yX3BhZ2UgPSBOVUxMOwpAQCAtNTA4LDggKzUxMiw4IEBACiAJaWYgKGhkcmxlbiA9PSAwKQogCQlyZXR1cm4gLTE7CiAKLQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiAlczogaGRybGVuICV6ZCBycGNsZW4gJXpkIHBhZGxlbiAlemRcbiIKLQkJIiAgICAgICAgICAgICAgICAgICBoZWFkZXJwIDB4JXAgYmFzZSAweCVwIGxrZXkgMHgleFxuIiwKKwlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiAlczogaGRybGVuICV6ZCBycGNsZW4gJXpkIHBhZGxlbiAlemQiCisJCSIgaGVhZGVycCAweCVwIGJhc2UgMHglcCBsa2V5IDB4JXhcbiIsCiAJCV9fZnVuY19fLCB0cmFuc2ZlcnR5cGVzW3d0eXBlXSwgaGRybGVuLCBycGNsZW4sIHBhZGxlbiwKIAkJaGVhZGVycCwgYmFzZSwgcmVxLT5ybF9pb3YubGtleSk7CiAKQEAgLTU5NCw3ICs1OTgsNyBAQAogICogU2NhdHRlciBpbmxpbmUgcmVjZWl2ZWQgZGF0YSBiYWNrIGludG8gcHJvdmlkZWQgaW92J3MuCiAgKi8KIHN0YXRpYyB2b2lkCi1ycGNyZG1hX2lubGluZV9maXh1cChzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3QsIGNoYXIgKnNyY3AsIGludCBjb3B5X2xlbikKK3JwY3JkbWFfaW5saW5lX2ZpeHVwKHN0cnVjdCBycGNfcnFzdCAqcnFzdCwgY2hhciAqc3JjcCwgaW50IGNvcHlfbGVuLCBpbnQgcGFkKQogewogCWludCBpLCBucGFnZXMsIGN1cmxlbiwgb2xlbjsKIAljaGFyICpkZXN0cDsKQEAgLTY2MCw2ICs2NjQsMTMgQEAKIAl9IGVsc2UKIAkJcnFzdC0+cnFfcmN2X2J1Zi50YWlsWzBdLmlvdl9sZW4gPSAwOwogCisJaWYgKHBhZCkgeworCQkvKiBpbXBsaWNpdCBwYWRkaW5nIG9uIHRlcm1pbmFsIGNodW5rICovCisJCXVuc2lnbmVkIGNoYXIgKnAgPSBycXN0LT5ycV9yY3ZfYnVmLnRhaWxbMF0uaW92X2Jhc2U7CisJCXdoaWxlIChwYWQtLSkKKwkJCXBbcnFzdC0+cnFfcmN2X2J1Zi50YWlsWzBdLmlvdl9sZW4rK10gPSAwOworCX0KKwogCWlmIChjb3B5X2xlbikKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogJWQgYnl0ZXMgaW4iCiAJCQkiICVkIGV4dHJhIHNlZ21lbnRzICglZCBsb3N0KVxuIiwKQEAgLTY4MSwxMiArNjkyLDE0IEBACiAJc3RydWN0IHJwY194cHJ0ICp4cHJ0ID0gZXAtPnJlcF94cHJ0OwogCiAJc3Bpbl9sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CisJaWYgKCsreHBydC0+Y29ubmVjdF9jb29raWUgPT0gMCkJLyogbWFpbnRhaW4gYSByZXNlcnZlZCB2YWx1ZSAqLworCQkrK3hwcnQtPmNvbm5lY3RfY29va2llOwogCWlmIChlcC0+cmVwX2Nvbm5lY3RlZCA+IDApIHsKIAkJaWYgKCF4cHJ0X3Rlc3RfYW5kX3NldF9jb25uZWN0ZWQoeHBydCkpCiAJCQl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCAwKTsKIAl9IGVsc2UgewogCQlpZiAoeHBydF90ZXN0X2FuZF9jbGVhcl9jb25uZWN0ZWQoeHBydCkpCi0JCQl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCBlcC0+cmVwX2Nvbm5lY3RlZCk7CisJCQl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCAtRU5PVENPTk4pOwogCX0KIAlzcGluX3VubG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOwogfQpAQCAtNzkyLDE0ICs4MDUsMjAgQEAKIAkJCSAgICAoKHVuc2lnbmVkIGNoYXIgKilpcHRyIC0gKHVuc2lnbmVkIGNoYXIgKiloZWFkZXJwKTsKIAkJCXN0YXR1cyA9IHJlcC0+cnJfbGVuICsgcmRtYWxlbjsKIAkJCXJfeHBydC0+cnhfc3RhdHMudG90YWxfcmRtYV9yZXBseSArPSByZG1hbGVuOworCQkJLyogc3BlY2lhbCBjYXNlIC0gbGFzdCBjaHVuayBtYXkgb21pdCBwYWRkaW5nICovCisJCQlpZiAocmRtYWxlbiAmPSAzKSB7CisJCQkJcmRtYWxlbiA9IDQgLSByZG1hbGVuOworCQkJCXN0YXR1cyArPSByZG1hbGVuOworCQkJfQogCQl9IGVsc2UgewogCQkJLyogZWxzZSBvcmRpbmFyeSBpbmxpbmUgKi8KKwkJCXJkbWFsZW4gPSAwOwogCQkJaXB0ciA9IChfX2JlMzIgKikoKHVuc2lnbmVkIGNoYXIgKiloZWFkZXJwICsgMjgpOwogCQkJcmVwLT5ycl9sZW4gLT0gMjg7IC8qc2l6ZW9mICpoZWFkZXJwOyovCiAJCQlzdGF0dXMgPSByZXAtPnJyX2xlbjsKIAkJfQogCQkvKiBGaXggdXAgdGhlIHJwYyByZXN1bHRzIGZvciB1cHBlciBsYXllciAqLwotCQlycGNyZG1hX2lubGluZV9maXh1cChycXN0LCAoY2hhciAqKWlwdHIsIHJlcC0+cnJfbGVuKTsKKwkJcnBjcmRtYV9pbmxpbmVfZml4dXAocnFzdCwgKGNoYXIgKilpcHRyLCByZXAtPnJyX2xlbiwgcmRtYWxlbik7CiAJCWJyZWFrOwogCiAJY2FzZSBodG9ubChSRE1BX05PTVNHKToKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfcmVjdmZyb20uYyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfcmVjdmZyb20uYwppbmRleCA3NGRlMzFhLi5hNDc1NjU3IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3JlY3Zmcm9tLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV9yZWN2ZnJvbS5jCkBAIC0xMTYsNyArMTE2LDcgQEAKICAqCiAgKiBBc3N1bXB0aW9uczoKICAqIC0gY2h1bmtbMF0tPnBvc2l0aW9uIHBvaW50cyB0byBwYWdlc1swXSBhdCBhbiBvZmZzZXQgb2YgMAotICogLSBwYWdlc1tdIGlzIG5vdCBwaHlzaWNhbGx5IG9yIHZpcnR1YWxseSBjb250aWdvdXMgYW5kIGNvbnNpc3RzIG9mCisgKiAtIHBhZ2VzW10gaXMgbm90IHBoeXNpY2FsbHkgb3IgdmlydHVhbGx5IGNvbnRpZ3VvdXMgYW5kIGNvbnNpc3RzIG9mCiAgKiAgIFBBR0VfU0laRSBlbGVtZW50cy4KICAqCiAgKiBPdXRwdXQ6CkBAIC0xMjUsNyArMTI1LDcgQEAKICAqICAgY2h1bmsgaW4gdGhlIHJlYWQgbGlzdAogICoKICAqLwotc3RhdGljIGludCByZG1hX3JjbF90b19zZ2Uoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKK3N0YXRpYyBpbnQgbWFwX3JlYWRfY2h1bmtzKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnhwcnQsCiAJCQkgICBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAogCQkJICAgc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKmhlYWQsCiAJCQkgICBzdHJ1Y3QgcnBjcmRtYV9tc2cgKnJtc2dwLApAQCAtMjExLDI2ICsyMTEsMTI4IEBACiAJcmV0dXJuIHNnZV9ubzsKIH0KIAotc3RhdGljIHZvaWQgcmRtYV9zZXRfY3R4dF9zZ2Uoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKLQkJCSAgICAgIHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpjdHh0LAotCQkJICAgICAgc3RydWN0IGt2ZWMgKnZlYywKLQkJCSAgICAgIHU2NCAqc2dsX29mZnNldCwKLQkJCSAgICAgIGludCBjb3VudCkKKy8qIE1hcCBhIHJlYWQtY2h1bmstbGlzdCB0byBhbiBYRFIgYW5kIGZhc3QgcmVnaXN0ZXIgdGhlIHBhZ2UtbGlzdC4KKyAqCisgKiBBc3N1bXB0aW9uczoKKyAqIC0gY2h1bmtbMF0JcG9zaXRpb24gcG9pbnRzIHRvIHBhZ2VzWzBdIGF0IGFuIG9mZnNldCBvZiAwCisgKiAtIHBhZ2VzW10Jd2lsbCBiZSBtYWRlIHBoeXNpY2FsbHkgY29udGlndW91cyBieSBjcmVhdGluZyBhIG9uZS1vZmYgbWVtb3J5CisgKgkJcmVnaW9uIHVzaW5nIHRoZSBmYXN0cmVnIHZlcmIuCisgKiAtIGJ5dGVfY291bnQgaXMgIyBvZiBieXRlcyBpbiByZWFkLWNodW5rLWxpc3QKKyAqIC0gY2hfY291bnQJaXMgIyBvZiBjaHVua3MgaW4gcmVhZC1jaHVuay1saXN0CisgKgorICogT3V0cHV0OgorICogLSBzZ2UgYXJyYXkgcG9pbnRpbmcgaW50byBwYWdlc1tdIGFycmF5LgorICogLSBjaHVua19zZ2UgYXJyYXkgc3BlY2lmeWluZyBzZ2UgaW5kZXggYW5kIGNvdW50IGZvciBlYWNoCisgKiAgIGNodW5rIGluIHRoZSByZWFkIGxpc3QKKyAqLworc3RhdGljIGludCBmYXN0X3JlZ19yZWFkX2NodW5rcyhzdHJ1Y3Qgc3ZjeHBydF9yZG1hICp4cHJ0LAorCQkJCXN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCQkJc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKmhlYWQsCisJCQkJc3RydWN0IHJwY3JkbWFfbXNnICpybXNncCwKKwkJCQlzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqcnBsX21hcCwKKwkJCQlzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqY2hsX21hcCwKKwkJCQlpbnQgY2hfY291bnQsCisJCQkJaW50IGJ5dGVfY291bnQpCit7CisJaW50IHBhZ2Vfbm87CisJaW50IGNoX25vOworCXUzMiBvZmZzZXQ7CisJc3RydWN0IHJwY3JkbWFfcmVhZF9jaHVuayAqY2g7CisJc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKmZybXI7CisJaW50IHJldCA9IDA7CisKKwlmcm1yID0gc3ZjX3JkbWFfZ2V0X2ZybXIoeHBydCk7CisJaWYgKElTX0VSUihmcm1yKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZWFkLT5mcm1yID0gZnJtcjsKKwloZWFkLT5hcmcuaGVhZFswXSA9IHJxc3RwLT5ycV9hcmcuaGVhZFswXTsKKwloZWFkLT5hcmcudGFpbFswXSA9IHJxc3RwLT5ycV9hcmcudGFpbFswXTsKKwloZWFkLT5hcmcucGFnZXMgPSAmaGVhZC0+cGFnZXNbaGVhZC0+Y291bnRdOworCWhlYWQtPmhkcl9jb3VudCA9IGhlYWQtPmNvdW50OyAvKiBzYXZlIGNvdW50IG9mIGhkciBwYWdlcyAqLworCWhlYWQtPmFyZy5wYWdlX2Jhc2UgPSAwOworCWhlYWQtPmFyZy5wYWdlX2xlbiA9IGJ5dGVfY291bnQ7CisJaGVhZC0+YXJnLmxlbiA9IHJxc3RwLT5ycV9hcmcubGVuICsgYnl0ZV9jb3VudDsKKwloZWFkLT5hcmcuYnVmbGVuID0gcnFzdHAtPnJxX2FyZy5idWZsZW4gKyBieXRlX2NvdW50OworCisJLyogRmFzdCByZWdpc3RlciB0aGUgcGFnZSBsaXN0ICovCisJZnJtci0+a3ZhID0gcGFnZV9hZGRyZXNzKHJxc3RwLT5ycV9hcmcucGFnZXNbMF0pOworCWZybXItPmRpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKKwlmcm1yLT5hY2Nlc3NfZmxhZ3MgPSAoSUJfQUNDRVNTX0xPQ0FMX1dSSVRFfElCX0FDQ0VTU19SRU1PVEVfV1JJVEUpOworCWZybXItPm1hcF9sZW4gPSBieXRlX2NvdW50OworCWZybXItPnBhZ2VfbGlzdF9sZW4gPSBQQUdFX0FMSUdOKGJ5dGVfY291bnQpID4+IFBBR0VfU0hJRlQ7CisJZm9yIChwYWdlX25vID0gMDsgcGFnZV9ubyA8IGZybXItPnBhZ2VfbGlzdF9sZW47IHBhZ2Vfbm8rKykgeworCQlmcm1yLT5wYWdlX2xpc3QtPnBhZ2VfbGlzdFtwYWdlX25vXSA9CisJCQlpYl9kbWFfbWFwX3NpbmdsZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAorCQkJCQkgIHBhZ2VfYWRkcmVzcyhycXN0cC0+cnFfYXJnLnBhZ2VzW3BhZ2Vfbm9dKSwKKwkJCQkJICBQQUdFX1NJWkUsIERNQV9UT19ERVZJQ0UpOworCQlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkJIGZybXItPnBhZ2VfbGlzdC0+cGFnZV9saXN0W3BhZ2Vfbm9dKSkKKwkJCWdvdG8gZmF0YWxfZXJyOworCQlhdG9taWNfaW5jKCZ4cHJ0LT5zY19kbWFfdXNlZCk7CisJCWhlYWQtPmFyZy5wYWdlc1twYWdlX25vXSA9IHJxc3RwLT5ycV9hcmcucGFnZXNbcGFnZV9ub107CisJfQorCWhlYWQtPmNvdW50ICs9IHBhZ2Vfbm87CisKKwkvKiBycV9yZXNwYWdlcyBwb2ludHMgb25lIHBhc3QgYXJnIHBhZ2VzICovCisJcnFzdHAtPnJxX3Jlc3BhZ2VzID0gJnJxc3RwLT5ycV9hcmcucGFnZXNbcGFnZV9ub107CisKKwkvKiBDcmVhdGUgdGhlIHJlcGx5IGFuZCBjaHVuayBtYXBzICovCisJb2Zmc2V0ID0gMDsKKwljaCA9IChzdHJ1Y3QgcnBjcmRtYV9yZWFkX2NodW5rICopJnJtc2dwLT5ybV9ib2R5LnJtX2NodW5rc1swXTsKKwlmb3IgKGNoX25vID0gMDsgY2hfbm8gPCBjaF9jb3VudDsgY2hfbm8rKykgeworCQlycGxfbWFwLT5zZ2VbY2hfbm9dLmlvdl9iYXNlID0gZnJtci0+a3ZhICsgb2Zmc2V0OworCQlycGxfbWFwLT5zZ2VbY2hfbm9dLmlvdl9sZW4gPSBjaC0+cmNfdGFyZ2V0LnJzX2xlbmd0aDsKKwkJY2hsX21hcC0+Y2hbY2hfbm9dLmNvdW50ID0gMTsKKwkJY2hsX21hcC0+Y2hbY2hfbm9dLnN0YXJ0ID0gY2hfbm87CisJCW9mZnNldCArPSBjaC0+cmNfdGFyZ2V0LnJzX2xlbmd0aDsKKwkJY2grKzsKKwl9CisKKwlyZXQgPSBzdmNfcmRtYV9mYXN0cmVnKHhwcnQsIGZybXIpOworCWlmIChyZXQpCisJCWdvdG8gZmF0YWxfZXJyOworCisJcmV0dXJuIGNoX25vOworCisgZmF0YWxfZXJyOgorCXByaW50aygic3ZjcmRtYTogZXJyb3IgZmFzdCByZWdpc3RlcmluZyB4ZHIgZm9yIHhwcnQgJXAiLCB4cHJ0KTsKKwlzdmNfcmRtYV9wdXRfZnJtcih4cHJ0LCBmcm1yKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCByZG1hX3NldF9jdHh0X3NnZShzdHJ1Y3Qgc3ZjeHBydF9yZG1hICp4cHJ0LAorCQkJICAgICBzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqY3R4dCwKKwkJCSAgICAgc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKmZybXIsCisJCQkgICAgIHN0cnVjdCBrdmVjICp2ZWMsCisJCQkgICAgIHU2NCAqc2dsX29mZnNldCwKKwkJCSAgICAgaW50IGNvdW50KQogewogCWludCBpOwogCiAJY3R4dC0+Y291bnQgPSBjb3VudDsKIAljdHh0LT5kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJYXRvbWljX2luYygmeHBydC0+c2NfZG1hX3VzZWQpOwotCQljdHh0LT5zZ2VbaV0uYWRkciA9Ci0JCQlpYl9kbWFfbWFwX3NpbmdsZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAotCQkJCQkgIHZlY1tpXS5pb3ZfYmFzZSwgdmVjW2ldLmlvdl9sZW4sCi0JCQkJCSAgRE1BX0ZST01fREVWSUNFKTsKKwkJY3R4dC0+c2dlW2ldLmxlbmd0aCA9IDA7IC8qIGluIGNhc2UgbWFwIGZhaWxzICovCisJCWlmICghZnJtcikgeworCQkJY3R4dC0+c2dlW2ldLmFkZHIgPQorCQkJCWliX2RtYV9tYXBfc2luZ2xlKHhwcnQtPnNjX2NtX2lkLT5kZXZpY2UsCisJCQkJCQkgIHZlY1tpXS5pb3ZfYmFzZSwKKwkJCQkJCSAgdmVjW2ldLmlvdl9sZW4sCisJCQkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJCQlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkJCSBjdHh0LT5zZ2VbaV0uYWRkcikpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQljdHh0LT5zZ2VbaV0ubGtleSA9IHhwcnQtPnNjX2RtYV9sa2V5OworCQkJYXRvbWljX2luYygmeHBydC0+c2NfZG1hX3VzZWQpOworCQl9IGVsc2UgeworCQkJY3R4dC0+c2dlW2ldLmFkZHIgPSAodW5zaWduZWQgbG9uZyl2ZWNbaV0uaW92X2Jhc2U7CisJCQljdHh0LT5zZ2VbaV0ubGtleSA9IGZybXItPm1yLT5sa2V5OworCQl9CiAJCWN0eHQtPnNnZVtpXS5sZW5ndGggPSB2ZWNbaV0uaW92X2xlbjsKLQkJY3R4dC0+c2dlW2ldLmxrZXkgPSB4cHJ0LT5zY19waHlzX21yLT5sa2V5OwogCQkqc2dsX29mZnNldCA9ICpzZ2xfb2Zmc2V0ICsgdmVjW2ldLmlvdl9sZW47CiAJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJkbWFfcmVhZF9tYXhfc2dlKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnhwcnQsIGludCBzZ2VfY291bnQpCkBAIC0yNzgsNiArMzgwLDcgQEAKIAkJCSBzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqaGRyX2N0eHQpCiB7CiAJc3RydWN0IGliX3NlbmRfd3IgcmVhZF93cjsKKwlzdHJ1Y3QgaWJfc2VuZF93ciBpbnZfd3I7CiAJaW50IGVyciA9IDA7CiAJaW50IGNoX25vOwogCWludCBjaF9jb3VudDsKQEAgLTMwMSw5ICs0MDQsMjAgQEAKIAlzdmNfcmRtYV9yY2xfY2h1bmtfY291bnRzKGNoLCAmY2hfY291bnQsICZieXRlX2NvdW50KTsKIAlpZiAoY2hfY291bnQgPiBSUENTVkNfTUFYUEFHRVMpCiAJCXJldHVybiAtRUlOVkFMOwotCXNnZV9jb3VudCA9IHJkbWFfcmNsX3RvX3NnZSh4cHJ0LCBycXN0cCwgaGRyX2N0eHQsIHJtc2dwLAotCQkJCSAgICBycGxfbWFwLCBjaGxfbWFwLAotCQkJCSAgICBjaF9jb3VudCwgYnl0ZV9jb3VudCk7CisKKwlpZiAoIXhwcnQtPnNjX2ZybXJfcGdfbGlzdF9sZW4pCisJCXNnZV9jb3VudCA9IG1hcF9yZWFkX2NodW5rcyh4cHJ0LCBycXN0cCwgaGRyX2N0eHQsIHJtc2dwLAorCQkJCQkgICAgcnBsX21hcCwgY2hsX21hcCwgY2hfY291bnQsCisJCQkJCSAgICBieXRlX2NvdW50KTsKKwllbHNlCisJCXNnZV9jb3VudCA9IGZhc3RfcmVnX3JlYWRfY2h1bmtzKHhwcnQsIHJxc3RwLCBoZHJfY3R4dCwgcm1zZ3AsCisJCQkJCQkgcnBsX21hcCwgY2hsX21hcCwgY2hfY291bnQsCisJCQkJCQkgYnl0ZV9jb3VudCk7CisJaWYgKHNnZV9jb3VudCA8IDApIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCiAJc2dsX29mZnNldCA9IDA7CiAJY2hfbm8gPSAwOwogCkBAIC0zMTIsMTMgKzQyNiwxNiBAQAogbmV4dF9zZ2U6CiAJCWN0eHQgPSBzdmNfcmRtYV9nZXRfY29udGV4dCh4cHJ0KTsKIAkJY3R4dC0+ZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOworCQljdHh0LT5mcm1yID0gaGRyX2N0eHQtPmZybXI7CisJCWN0eHQtPnJlYWRfaGRyID0gTlVMTDsKIAkJY2xlYXJfYml0KFJETUFDVFhUX0ZfTEFTVF9DVFhULCAmY3R4dC0+ZmxhZ3MpOworCQljbGVhcl9iaXQoUkRNQUNUWFRfRl9GQVNUX1VOUkVHLCAmY3R4dC0+ZmxhZ3MpOwogCiAJCS8qIFByZXBhcmUgUkVBRCBXUiAqLwogCQltZW1zZXQoJnJlYWRfd3IsIDAsIHNpemVvZiByZWFkX3dyKTsKLQkJY3R4dC0+d3Jfb3AgPSBJQl9XUl9SRE1BX1JFQUQ7CiAJCXJlYWRfd3Iud3JfaWQgPSAodW5zaWduZWQgbG9uZyljdHh0OwogCQlyZWFkX3dyLm9wY29kZSA9IElCX1dSX1JETUFfUkVBRDsKKwkJY3R4dC0+d3Jfb3AgPSByZWFkX3dyLm9wY29kZTsKIAkJcmVhZF93ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKIAkJcmVhZF93ci53ci5yZG1hLnJrZXkgPSBjaC0+cmNfdGFyZ2V0LnJzX2hhbmRsZTsKIAkJcmVhZF93ci53ci5yZG1hLnJlbW90ZV9hZGRyID0KQEAgLTMyNywxMCArNDQ0LDE1IEBACiAJCXJlYWRfd3Iuc2dfbGlzdCA9IGN0eHQtPnNnZTsKIAkJcmVhZF93ci5udW1fc2dlID0KIAkJCXJkbWFfcmVhZF9tYXhfc2dlKHhwcnQsIGNobF9tYXAtPmNoW2NoX25vXS5jb3VudCk7Ci0JCXJkbWFfc2V0X2N0eHRfc2dlKHhwcnQsIGN0eHQsCi0JCQkJICAmcnBsX21hcC0+c2dlW2NobF9tYXAtPmNoW2NoX25vXS5zdGFydF0sCi0JCQkJICAmc2dsX29mZnNldCwKLQkJCQkgIHJlYWRfd3IubnVtX3NnZSk7CisJCWVyciA9IHJkbWFfc2V0X2N0eHRfc2dlKHhwcnQsIGN0eHQsIGhkcl9jdHh0LT5mcm1yLAorCQkJCQkmcnBsX21hcC0+c2dlW2NobF9tYXAtPmNoW2NoX25vXS5zdGFydF0sCisJCQkJCSZzZ2xfb2Zmc2V0LAorCQkJCQlyZWFkX3dyLm51bV9zZ2UpOworCQlpZiAoZXJyKSB7CisJCQlzdmNfcmRtYV91bm1hcF9kbWEoY3R4dCk7CisJCQlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAwKTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCWlmICgoKGNoKzEpLT5yY19kaXNjcmltID09IDApICYmCiAJCSAgICAocmVhZF93ci5udW1fc2dlID09IGNobF9tYXAtPmNoW2NoX25vXS5jb3VudCkpIHsKIAkJCS8qCkBAIC0zMzksNiArNDYxLDI5IEBACiAJCQkgKiB0aGUgY2xpZW50IGFuZCB0aGUgUlBDIG5lZWRzIHRvIGJlIGVucXVldWVkLgogCQkJICovCiAJCQlzZXRfYml0KFJETUFDVFhUX0ZfTEFTVF9DVFhULCAmY3R4dC0+ZmxhZ3MpOworCQkJaWYgKGhkcl9jdHh0LT5mcm1yKSB7CisJCQkJc2V0X2JpdChSRE1BQ1RYVF9GX0ZBU1RfVU5SRUcsICZjdHh0LT5mbGFncyk7CisJCQkJLyoKKwkJCQkgKiBJbnZhbGlkYXRlIHRoZSBsb2NhbCBNUiB1c2VkIHRvIG1hcCB0aGUgZGF0YQorCQkJCSAqIHNpbmsuCisJCQkJICovCisJCQkJaWYgKHhwcnQtPnNjX2Rldl9jYXBzICYKKwkJCQkgICAgU1ZDUkRNQV9ERVZDQVBfUkVBRF9XX0lOVikgeworCQkJCQlyZWFkX3dyLm9wY29kZSA9CisJCQkJCQlJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlY7CisJCQkJCWN0eHQtPndyX29wID0gcmVhZF93ci5vcGNvZGU7CisJCQkJCXJlYWRfd3IuZXguaW52YWxpZGF0ZV9ya2V5ID0KKwkJCQkJCWN0eHQtPmZybXItPm1yLT5sa2V5OworCQkJCX0gZWxzZSB7CisJCQkJCS8qIFByZXBhcmUgSU5WQUxJREFURSBXUiAqLworCQkJCQltZW1zZXQoJmludl93ciwgMCwgc2l6ZW9mIGludl93cik7CisJCQkJCWludl93ci5vcGNvZGUgPSBJQl9XUl9MT0NBTF9JTlY7CisJCQkJCWludl93ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKwkJCQkJaW52X3dyLmV4LmludmFsaWRhdGVfcmtleSA9CisJCQkJCQloZHJfY3R4dC0+ZnJtci0+bXItPmxrZXk7CisJCQkJCXJlYWRfd3IubmV4dCA9ICZpbnZfd3I7CisJCQkJfQorCQkJfQogCQkJY3R4dC0+cmVhZF9oZHIgPSBoZHJfY3R4dDsKIAkJfQogCQkvKiBQb3N0IHRoZSByZWFkICovCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3NlbmR0by5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV9zZW5kdG8uYwppbmRleCA4NGQzMjgzLi45YTdhOGU3IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3NlbmR0by5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfc2VuZHRvLmMKQEAgLTY5LDkgKzY5LDEyNyBAQAogICogYXJyYXkgaXMgb25seSBjb25jZXJuZWQgd2l0aCB0aGUgcmVwbHkgd2UgYXJlIGFzc3VyZWQgdGhhdCB3ZSBoYXZlCiAgKiBvbiBleHRyYSBwYWdlIGZvciB0aGUgUlBDUk1EQSBoZWFkZXIuCiAgKi8KLXN0YXRpYyB2b2lkIHhkcl90b19zZ2Uoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKLQkJICAgICAgIHN0cnVjdCB4ZHJfYnVmICp4ZHIsCi0JCSAgICAgICBzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqdmVjKQoraW50IGZhc3RfcmVnX3hkcihzdHJ1Y3Qgc3ZjeHBydF9yZG1hICp4cHJ0LAorCQkgc3RydWN0IHhkcl9idWYgKnhkciwKKwkJIHN0cnVjdCBzdmNfcmRtYV9yZXFfbWFwICp2ZWMpCit7CisJaW50IHNnZV9ubzsKKwl1MzIgc2dlX2J5dGVzOworCXUzMiBwYWdlX2J5dGVzOworCXUzMiBwYWdlX29mZjsKKwlpbnQgcGFnZV9ubyA9IDA7CisJdTggKmZydmE7CisJc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKmZybXI7CisKKwlmcm1yID0gc3ZjX3JkbWFfZ2V0X2ZybXIoeHBydCk7CisJaWYgKElTX0VSUihmcm1yKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJdmVjLT5mcm1yID0gZnJtcjsKKworCS8qIFNraXAgdGhlIFJQQ1JETUEgaGVhZGVyICovCisJc2dlX25vID0gMTsKKworCS8qIE1hcCB0aGUgaGVhZC4gKi8KKwlmcnZhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHhkci0+aGVhZFswXS5pb3ZfYmFzZSkgJiBQQUdFX01BU0spOworCXZlYy0+c2dlW3NnZV9ub10uaW92X2Jhc2UgPSB4ZHItPmhlYWRbMF0uaW92X2Jhc2U7CisJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfbGVuID0geGRyLT5oZWFkWzBdLmlvdl9sZW47CisJdmVjLT5jb3VudCA9IDI7CisJc2dlX25vKys7CisKKwkvKiBCdWlsZCB0aGUgRlJNUiAqLworCWZybXItPmt2YSA9IGZydmE7CisJZnJtci0+ZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwlmcm1yLT5hY2Nlc3NfZmxhZ3MgPSAwOworCWZybXItPm1hcF9sZW4gPSBQQUdFX1NJWkU7CisJZnJtci0+cGFnZV9saXN0X2xlbiA9IDE7CisJZnJtci0+cGFnZV9saXN0LT5wYWdlX2xpc3RbcGFnZV9ub10gPQorCQlpYl9kbWFfbWFwX3NpbmdsZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAorCQkJCSAgKHZvaWQgKil4ZHItPmhlYWRbMF0uaW92X2Jhc2UsCisJCQkJICBQQUdFX1NJWkUsIERNQV9UT19ERVZJQ0UpOworCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcih4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAorCQkJCSBmcm1yLT5wYWdlX2xpc3QtPnBhZ2VfbGlzdFtwYWdlX25vXSkpCisJCWdvdG8gZmF0YWxfZXJyOworCWF0b21pY19pbmMoJnhwcnQtPnNjX2RtYV91c2VkKTsKKworCXBhZ2Vfb2ZmID0geGRyLT5wYWdlX2Jhc2U7CisJcGFnZV9ieXRlcyA9IHhkci0+cGFnZV9sZW4gKyBwYWdlX29mZjsKKwlpZiAoIXBhZ2VfYnl0ZXMpCisJCWdvdG8gZW5jb2RlX3RhaWw7CisKKwkvKiBNYXAgdGhlIHBhZ2VzICovCisJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfYmFzZSA9IGZydmEgKyBmcm1yLT5tYXBfbGVuICsgcGFnZV9vZmY7CisJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfbGVuID0gcGFnZV9ieXRlczsKKwlzZ2Vfbm8rKzsKKwl3aGlsZSAocGFnZV9ieXRlcykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCQlwYWdlID0geGRyLT5wYWdlc1twYWdlX25vKytdOworCQlzZ2VfYnl0ZXMgPSBtaW5fdCh1MzIsIHBhZ2VfYnl0ZXMsIChQQUdFX1NJWkUgLSBwYWdlX29mZikpOworCQlwYWdlX2J5dGVzIC09IHNnZV9ieXRlczsKKworCQlmcm1yLT5wYWdlX2xpc3QtPnBhZ2VfbGlzdFtwYWdlX25vXSA9CisJCQlpYl9kbWFfbWFwX3BhZ2UoeHBydC0+c2NfY21faWQtPmRldmljZSwgcGFnZSwgMCwKKwkJCQkJICBQQUdFX1NJWkUsIERNQV9UT19ERVZJQ0UpOworCQlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkJIGZybXItPnBhZ2VfbGlzdC0+cGFnZV9saXN0W3BhZ2Vfbm9dKSkKKwkJCWdvdG8gZmF0YWxfZXJyOworCisJCWF0b21pY19pbmMoJnhwcnQtPnNjX2RtYV91c2VkKTsKKwkJcGFnZV9vZmYgPSAwOyAvKiByZXNldCBmb3IgbmV4dCB0aW1lIHRocm91Z2ggbG9vcCAqLworCQlmcm1yLT5tYXBfbGVuICs9IFBBR0VfU0laRTsKKwkJZnJtci0+cGFnZV9saXN0X2xlbisrOworCX0KKwl2ZWMtPmNvdW50Kys7CisKKyBlbmNvZGVfdGFpbDoKKwkvKiBNYXAgdGFpbCAqLworCWlmICgwID09IHhkci0+dGFpbFswXS5pb3ZfbGVuKQorCQlnb3RvIGRvbmU7CisKKwl2ZWMtPmNvdW50Kys7CisJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfbGVuID0geGRyLT50YWlsWzBdLmlvdl9sZW47CisKKwlpZiAoKCh1bnNpZ25lZCBsb25nKXhkci0+dGFpbFswXS5pb3ZfYmFzZSAmIFBBR0VfTUFTSykgPT0KKwkgICAgKCh1bnNpZ25lZCBsb25nKXhkci0+aGVhZFswXS5pb3ZfYmFzZSAmIFBBR0VfTUFTSykpIHsKKwkJLyoKKwkJICogSWYgaGVhZCBhbmQgdGFpbCB1c2UgdGhlIHNhbWUgcGFnZSwgd2UgZG9uJ3QgbmVlZAorCQkgKiB0byBtYXAgaXQgYWdhaW4uCisJCSAqLworCQl2ZWMtPnNnZVtzZ2Vfbm9dLmlvdl9iYXNlID0geGRyLT50YWlsWzBdLmlvdl9iYXNlOworCX0gZWxzZSB7CisJCXZvaWQgKnZhOworCisJCS8qIE1hcCBhbm90aGVyIHBhZ2UgZm9yIHRoZSB0YWlsICovCisJCXBhZ2Vfb2ZmID0gKHVuc2lnbmVkIGxvbmcpeGRyLT50YWlsWzBdLmlvdl9iYXNlICYgflBBR0VfTUFTSzsKKwkJdmEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZyl4ZHItPnRhaWxbMF0uaW92X2Jhc2UgJiBQQUdFX01BU0spOworCQl2ZWMtPnNnZVtzZ2Vfbm9dLmlvdl9iYXNlID0gZnJ2YSArIGZybXItPm1hcF9sZW4gKyBwYWdlX29mZjsKKworCQlmcm1yLT5wYWdlX2xpc3QtPnBhZ2VfbGlzdFtwYWdlX25vXSA9CisJCQlpYl9kbWFfbWFwX3NpbmdsZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLCB2YSwgUEFHRV9TSVpFLAorCQkJCQkgIERNQV9UT19ERVZJQ0UpOworCQlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkJIGZybXItPnBhZ2VfbGlzdC0+cGFnZV9saXN0W3BhZ2Vfbm9dKSkKKwkJCWdvdG8gZmF0YWxfZXJyOworCQlhdG9taWNfaW5jKCZ4cHJ0LT5zY19kbWFfdXNlZCk7CisJCWZybXItPm1hcF9sZW4gKz0gUEFHRV9TSVpFOworCQlmcm1yLT5wYWdlX2xpc3RfbGVuKys7CisJfQorCisgZG9uZToKKwlpZiAoc3ZjX3JkbWFfZmFzdHJlZyh4cHJ0LCBmcm1yKSkKKwkJZ290byBmYXRhbF9lcnI7CisKKwlyZXR1cm4gMDsKKworIGZhdGFsX2VycjoKKwlwcmludGsoInN2Y3JkbWE6IEVycm9yIGZhc3QgcmVnaXN0ZXJpbmcgbWVtb3J5IGZvciB4cHJ0ICVwXG4iLCB4cHJ0KTsKKwlzdmNfcmRtYV9wdXRfZnJtcih4cHJ0LCBmcm1yKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBtYXBfeGRyKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnhwcnQsCisJCSAgIHN0cnVjdCB4ZHJfYnVmICp4ZHIsCisJCSAgIHN0cnVjdCBzdmNfcmRtYV9yZXFfbWFwICp2ZWMpCiB7CiAJaW50IHNnZV9tYXggPSAoeGRyLT5sZW4rUEFHRV9TSVpFLTEpIC8gUEFHRV9TSVpFICsgMzsKIAlpbnQgc2dlX25vOwpAQCAtODMsNiArMjAxLDkgQEAKIAlCVUdfT04oeGRyLT5sZW4gIT0KIAkgICAgICAgKHhkci0+aGVhZFswXS5pb3ZfbGVuICsgeGRyLT5wYWdlX2xlbiArIHhkci0+dGFpbFswXS5pb3ZfbGVuKSk7CiAKKwlpZiAoeHBydC0+c2NfZnJtcl9wZ19saXN0X2xlbikKKwkJcmV0dXJuIGZhc3RfcmVnX3hkcih4cHJ0LCB4ZHIsIHZlYyk7CisKIAkvKiBTa2lwIHRoZSBmaXJzdCBzZ2UsIHRoaXMgaXMgZm9yIHRoZSBSUENSRE1BIGhlYWRlciAqLwogCXNnZV9ubyA9IDE7CiAKQEAgLTExNiw5ICsyMzcsMTIgQEAKIAogCUJVR19PTihzZ2Vfbm8gPiBzZ2VfbWF4KTsKIAl2ZWMtPmNvdW50ID0gc2dlX25vOworCXJldHVybiAwOwogfQogCiAvKiBBc3N1bXB0aW9uczoKKyAqIC0gV2UgYXJlIHVzaW5nIEZSTVIKKyAqICAgICAtIG9yIC0KICAqIC0gVGhlIHNwZWNpZmllZCB3cml0ZV9sZW4gY2FuIGJlIHJlcHJlc2VudGVkIGluIHNjX21heF9zZ2UgKiBQQUdFX1NJWkUKICAqLwogc3RhdGljIGludCBzZW5kX3dyaXRlKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnhwcnQsIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCkBAIC0xNTgsMzAgKzI4MiwzNSBAQAogCXNnZV9ubyA9IDA7CiAKIAkvKiBDb3B5IHRoZSByZW1haW5pbmcgU0dFICovCi0Jd2hpbGUgKGJjICE9IDAgJiYgeGRyX3NnZV9ubyA8IHZlYy0+Y291bnQpIHsKLQkJc2dlW3NnZV9ub10ubGtleSA9IHhwcnQtPnNjX3BoeXNfbXItPmxrZXk7Ci0JCXNnZV9ieXRlcyA9IG1pbigoc2l6ZV90KWJjLAotCQkJCShzaXplX3QpKHZlYy0+c2dlW3hkcl9zZ2Vfbm9dLmlvdl9sZW4tc2dlX29mZikpOworCXdoaWxlIChiYyAhPSAwKSB7CisJCXNnZV9ieXRlcyA9IG1pbl90KHNpemVfdCwKKwkJCSAgYmMsIHZlYy0+c2dlW3hkcl9zZ2Vfbm9dLmlvdl9sZW4tc2dlX29mZik7CiAJCXNnZVtzZ2Vfbm9dLmxlbmd0aCA9IHNnZV9ieXRlczsKLQkJYXRvbWljX2luYygmeHBydC0+c2NfZG1hX3VzZWQpOwotCQlzZ2Vbc2dlX25vXS5hZGRyID0KLQkJCWliX2RtYV9tYXBfc2luZ2xlKHhwcnQtPnNjX2NtX2lkLT5kZXZpY2UsCi0JCQkJCSAgKHZvaWQgKikKLQkJCQkJICB2ZWMtPnNnZVt4ZHJfc2dlX25vXS5pb3ZfYmFzZSArIHNnZV9vZmYsCi0JCQkJCSAgc2dlX2J5dGVzLCBETUFfVE9fREVWSUNFKTsKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKHhwcnQtPnNjX2NtX2lkLT5kZXZpY2UtPmRtYV9kZXZpY2UsCi0JCQkJCXNnZVtzZ2Vfbm9dLmFkZHIpKQotCQkJZ290byBlcnI7CisJCWlmICghdmVjLT5mcm1yKSB7CisJCQlzZ2Vbc2dlX25vXS5hZGRyID0KKwkJCQlpYl9kbWFfbWFwX3NpbmdsZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAorCQkJCQkJICAodm9pZCAqKQorCQkJCQkJICB2ZWMtPnNnZVt4ZHJfc2dlX25vXS5pb3ZfYmFzZSArIHNnZV9vZmYsCisJCQkJCQkgIHNnZV9ieXRlcywgRE1BX1RPX0RFVklDRSk7CisJCQlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkJCSBzZ2Vbc2dlX25vXS5hZGRyKSkKKwkJCQlnb3RvIGVycjsKKwkJCWF0b21pY19pbmMoJnhwcnQtPnNjX2RtYV91c2VkKTsKKwkJCXNnZVtzZ2Vfbm9dLmxrZXkgPSB4cHJ0LT5zY19kbWFfbGtleTsKKwkJfSBlbHNlIHsKKwkJCXNnZVtzZ2Vfbm9dLmFkZHIgPSAodW5zaWduZWQgbG9uZykKKwkJCQl2ZWMtPnNnZVt4ZHJfc2dlX25vXS5pb3ZfYmFzZSArIHNnZV9vZmY7CisJCQlzZ2Vbc2dlX25vXS5sa2V5ID0gdmVjLT5mcm1yLT5tci0+bGtleTsKKwkJfQorCQljdHh0LT5jb3VudCsrOworCQljdHh0LT5mcm1yID0gdmVjLT5mcm1yOwogCQlzZ2Vfb2ZmID0gMDsKIAkJc2dlX25vKys7Ci0JCWN0eHQtPmNvdW50Kys7CiAJCXhkcl9zZ2Vfbm8rKzsKKwkJQlVHX09OKHhkcl9zZ2Vfbm8gPiB2ZWMtPmNvdW50KTsKIAkJYmMgLT0gc2dlX2J5dGVzOwogCX0KIAotCUJVR19PTihiYyAhPSAwKTsKLQlCVUdfT04oeGRyX3NnZV9ubyA+IHZlYy0+Y291bnQpOwotCiAJLyogUHJlcGFyZSBXUklURSBXUiAqLwogCW1lbXNldCgmd3JpdGVfd3IsIDAsIHNpemVvZiB3cml0ZV93cik7CiAJY3R4dC0+d3Jfb3AgPSBJQl9XUl9SRE1BX1dSSVRFOwpAQCAtMjI2LDcgKzM1NSwxMCBAQAogCXJlc19hcnkgPSAoc3RydWN0IHJwY3JkbWFfd3JpdGVfYXJyYXkgKikKIAkJJnJkbWFfcmVzcC0+cm1fYm9keS5ybV9jaHVua3NbMV07CiAKLQltYXhfd3JpdGUgPSB4cHJ0LT5zY19tYXhfc2dlICogUEFHRV9TSVpFOworCWlmICh2ZWMtPmZybXIpCisJCW1heF93cml0ZSA9IHZlYy0+ZnJtci0+bWFwX2xlbjsKKwllbHNlCisJCW1heF93cml0ZSA9IHhwcnQtPnNjX21heF9zZ2UgKiBQQUdFX1NJWkU7CiAKIAkvKiBXcml0ZSBjaHVua3Mgc3RhcnQgYXQgdGhlIHBhZ2VsaXN0ICovCiAJZm9yICh4ZHJfb2ZmID0gcnFzdHAtPnJxX3Jlcy5oZWFkWzBdLmlvdl9sZW4sIGNodW5rX25vID0gMDsKQEAgLTI5Nyw3ICs0MjksMTAgQEAKIAlyZXNfYXJ5ID0gKHN0cnVjdCBycGNyZG1hX3dyaXRlX2FycmF5ICopCiAJCSZyZG1hX3Jlc3AtPnJtX2JvZHkucm1fY2h1bmtzWzJdOwogCi0JbWF4X3dyaXRlID0geHBydC0+c2NfbWF4X3NnZSAqIFBBR0VfU0laRTsKKwlpZiAodmVjLT5mcm1yKQorCQltYXhfd3JpdGUgPSB2ZWMtPmZybXItPm1hcF9sZW47CisJZWxzZQorCQltYXhfd3JpdGUgPSB4cHJ0LT5zY19tYXhfc2dlICogUEFHRV9TSVpFOwogCiAJLyogeGRyIG9mZnNldCBzdGFydHMgYXQgUlBDIG1lc3NhZ2UgKi8KIAlmb3IgKHhkcl9vZmYgPSAwLCBjaHVua19ubyA9IDA7CkBAIC0zMDcsNyArNDQyLDYgQEAKIAkJY2ggPSAmYXJnX2FyeS0+d2NfYXJyYXlbY2h1bmtfbm9dLndjX3RhcmdldDsKIAkJd3JpdGVfbGVuID0gbWluKHhmZXJfbGVuLCBjaC0+cnNfbGVuZ3RoKTsKIAotCiAJCS8qIFByZXBhcmUgdGhlIHJlcGx5IGNodW5rIGdpdmVuIHRoZSBsZW5ndGggYWN0dWFsbHkKIAkJICogd3JpdHRlbiAqLwogCQlyc19vZmZzZXQgPSBnZXRfdW5hbGlnbmVkKCYoY2gtPnJzX29mZnNldCkpOwpAQCAtMzY2LDYgKzUwMCw3IEBACiAJCSAgICAgIGludCBieXRlX2NvdW50KQogewogCXN0cnVjdCBpYl9zZW5kX3dyIHNlbmRfd3I7CisJc3RydWN0IGliX3NlbmRfd3IgaW52X3dyOwogCWludCBzZ2Vfbm87CiAJaW50IHNnZV9ieXRlczsKIAlpbnQgcGFnZV9ubzsKQEAgLTM4NSwyNyArNTIwLDQ1IEBACiAJLyogUHJlcGFyZSB0aGUgY29udGV4dCAqLwogCWN0eHQtPnBhZ2VzWzBdID0gcGFnZTsKIAljdHh0LT5jb3VudCA9IDE7CisJY3R4dC0+ZnJtciA9IHZlYy0+ZnJtcjsKKwlpZiAodmVjLT5mcm1yKQorCQlzZXRfYml0KFJETUFDVFhUX0ZfRkFTVF9VTlJFRywgJmN0eHQtPmZsYWdzKTsKKwllbHNlCisJCWNsZWFyX2JpdChSRE1BQ1RYVF9GX0ZBU1RfVU5SRUcsICZjdHh0LT5mbGFncyk7CiAKIAkvKiBQcmVwYXJlIHRoZSBTR0UgZm9yIHRoZSBSUENSRE1BIEhlYWRlciAqLwotCWF0b21pY19pbmMoJnJkbWEtPnNjX2RtYV91c2VkKTsKIAljdHh0LT5zZ2VbMF0uYWRkciA9CiAJCWliX2RtYV9tYXBfcGFnZShyZG1hLT5zY19jbV9pZC0+ZGV2aWNlLAogCQkJCXBhZ2UsIDAsIFBBR0VfU0laRSwgRE1BX1RPX0RFVklDRSk7CisJaWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKHJkbWEtPnNjX2NtX2lkLT5kZXZpY2UsIGN0eHQtPnNnZVswXS5hZGRyKSkKKwkJZ290byBlcnI7CisJYXRvbWljX2luYygmcmRtYS0+c2NfZG1hX3VzZWQpOworCiAJY3R4dC0+ZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwogCWN0eHQtPnNnZVswXS5sZW5ndGggPSBzdmNfcmRtYV94ZHJfZ2V0X3JlcGx5X2hkcl9sZW4ocmRtYV9yZXNwKTsKLQljdHh0LT5zZ2VbMF0ubGtleSA9IHJkbWEtPnNjX3BoeXNfbXItPmxrZXk7CisJY3R4dC0+c2dlWzBdLmxrZXkgPSByZG1hLT5zY19kbWFfbGtleTsKIAogCS8qIERldGVybWluZSBob3cgbWFueSBvZiBvdXIgU0dFIGFyZSB0byBiZSB0cmFuc21pdHRlZCAqLwogCWZvciAoc2dlX25vID0gMTsgYnl0ZV9jb3VudCAmJiBzZ2Vfbm8gPCB2ZWMtPmNvdW50OyBzZ2Vfbm8rKykgewogCQlzZ2VfYnl0ZXMgPSBtaW5fdChzaXplX3QsIHZlYy0+c2dlW3NnZV9ub10uaW92X2xlbiwgYnl0ZV9jb3VudCk7CiAJCWJ5dGVfY291bnQgLT0gc2dlX2J5dGVzOwotCQlhdG9taWNfaW5jKCZyZG1hLT5zY19kbWFfdXNlZCk7Ci0JCWN0eHQtPnNnZVtzZ2Vfbm9dLmFkZHIgPQotCQkJaWJfZG1hX21hcF9zaW5nbGUocmRtYS0+c2NfY21faWQtPmRldmljZSwKLQkJCQkJICB2ZWMtPnNnZVtzZ2Vfbm9dLmlvdl9iYXNlLAotCQkJCQkgIHNnZV9ieXRlcywgRE1BX1RPX0RFVklDRSk7CisJCWlmICghdmVjLT5mcm1yKSB7CisJCQljdHh0LT5zZ2Vbc2dlX25vXS5hZGRyID0KKwkJCQlpYl9kbWFfbWFwX3NpbmdsZShyZG1hLT5zY19jbV9pZC0+ZGV2aWNlLAorCQkJCQkJICB2ZWMtPnNnZVtzZ2Vfbm9dLmlvdl9iYXNlLAorCQkJCQkJICBzZ2VfYnl0ZXMsIERNQV9UT19ERVZJQ0UpOworCQkJaWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKHJkbWEtPnNjX2NtX2lkLT5kZXZpY2UsCisJCQkJCQkgY3R4dC0+c2dlW3NnZV9ub10uYWRkcikpCisJCQkJZ290byBlcnI7CisJCQlhdG9taWNfaW5jKCZyZG1hLT5zY19kbWFfdXNlZCk7CisJCQljdHh0LT5zZ2Vbc2dlX25vXS5sa2V5ID0gcmRtYS0+c2NfZG1hX2xrZXk7CisJCX0gZWxzZSB7CisJCQljdHh0LT5zZ2Vbc2dlX25vXS5hZGRyID0gKHVuc2lnbmVkIGxvbmcpCisJCQkJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfYmFzZTsKKwkJCWN0eHQtPnNnZVtzZ2Vfbm9dLmxrZXkgPSB2ZWMtPmZybXItPm1yLT5sa2V5OworCQl9CiAJCWN0eHQtPnNnZVtzZ2Vfbm9dLmxlbmd0aCA9IHNnZV9ieXRlczsKLQkJY3R4dC0+c2dlW3NnZV9ub10ubGtleSA9IHJkbWEtPnNjX3BoeXNfbXItPmxrZXk7CiAJfQogCUJVR19PTihieXRlX2NvdW50ICE9IDApOwogCkBAIC00MTcsMTEgKzU3MCwxNiBAQAogCQljdHh0LT5wYWdlc1twYWdlX25vKzFdID0gcnFzdHAtPnJxX3Jlc3BhZ2VzW3BhZ2Vfbm9dOwogCQljdHh0LT5jb3VudCsrOwogCQlycXN0cC0+cnFfcmVzcGFnZXNbcGFnZV9ub10gPSBOVUxMOwotCQkvKiBJZiB0aGVyZSBhcmUgbW9yZSBwYWdlcyB0aGFuIFNHRSwgdGVybWluYXRlIFNHRSBsaXN0ICovCisJCS8qCisJCSAqIElmIHRoZXJlIGFyZSBtb3JlIHBhZ2VzIHRoYW4gU0dFLCB0ZXJtaW5hdGUgU0dFCisJCSAqIGxpc3Qgc28gdGhhdCBzdmNfcmRtYV91bm1hcF9kbWEgZG9lc24ndCBhdHRlbXB0IHRvCisJCSAqIHVubWFwIGdhcmJhZ2UuCisJCSAqLwogCQlpZiAocGFnZV9ubysxID49IHNnZV9ubykKIAkJCWN0eHQtPnNnZVtwYWdlX25vKzFdLmxlbmd0aCA9IDA7CiAJfQogCUJVR19PTihzZ2Vfbm8gPiByZG1hLT5zY19tYXhfc2dlKTsKKwlCVUdfT04oc2dlX25vID4gY3R4dC0+Y291bnQpOwogCW1lbXNldCgmc2VuZF93ciwgMCwgc2l6ZW9mIHNlbmRfd3IpOwogCWN0eHQtPndyX29wID0gSUJfV1JfU0VORDsKIAlzZW5kX3dyLndyX2lkID0gKHVuc2lnbmVkIGxvbmcpY3R4dDsKQEAgLTQyOSwxMiArNTg3LDI2IEBACiAJc2VuZF93ci5udW1fc2dlID0gc2dlX25vOwogCXNlbmRfd3Iub3Bjb2RlID0gSUJfV1JfU0VORDsKIAlzZW5kX3dyLnNlbmRfZmxhZ3MgPSAgSUJfU0VORF9TSUdOQUxFRDsKKwlpZiAodmVjLT5mcm1yKSB7CisJCS8qIFByZXBhcmUgSU5WQUxJREFURSBXUiAqLworCQltZW1zZXQoJmludl93ciwgMCwgc2l6ZW9mIGludl93cik7CisJCWludl93ci5vcGNvZGUgPSBJQl9XUl9MT0NBTF9JTlY7CisJCWludl93ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKwkJaW52X3dyLmV4LmludmFsaWRhdGVfcmtleSA9CisJCQl2ZWMtPmZybXItPm1yLT5sa2V5OworCQlzZW5kX3dyLm5leHQgPSAmaW52X3dyOworCX0KIAogCXJldCA9IHN2Y19yZG1hX3NlbmQocmRtYSwgJnNlbmRfd3IpOwogCWlmIChyZXQpCi0JCXN2Y19yZG1hX3B1dF9jb250ZXh0KGN0eHQsIDEpOworCQlnb3RvIGVycjsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CisKKyBlcnI6CisJc3ZjX3JkbWFfcHV0X2ZybXIocmRtYSwgdmVjLT5mcm1yKTsKKwlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAxKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogdm9pZCBzdmNfcmRtYV9wcmVwX3JlcGx5X2hkcihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQpAQCAtNDc3LDggKzY0OSw5IEBACiAJY3R4dCA9IHN2Y19yZG1hX2dldF9jb250ZXh0KHJkbWEpOwogCWN0eHQtPmRpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CiAJdmVjID0gc3ZjX3JkbWFfZ2V0X3JlcV9tYXAoKTsKLQl4ZHJfdG9fc2dlKHJkbWEsICZycXN0cC0+cnFfcmVzLCB2ZWMpOwotCisJcmV0ID0gbWFwX3hkcihyZG1hLCAmcnFzdHAtPnJxX3JlcywgdmVjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjA7CiAJaW5saW5lX2J5dGVzID0gcnFzdHAtPnJxX3Jlcy5sZW47CiAKIAkvKiBDcmVhdGUgdGhlIFJETUEgcmVzcG9uc2UgaGVhZGVyICovCkBAIC00OTgsNyArNjcxLDcgQEAKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgInN2Y3JkbWE6IGZhaWxlZCB0byBzZW5kIHdyaXRlIGNodW5rcywgcmM9JWRcbiIsCiAJCSAgICAgICByZXQpOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGVycjE7CiAJfQogCWlubGluZV9ieXRlcyAtPSByZXQ7CiAKQEAgLTUwOCw3ICs2ODEsNyBAQAogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3ZjcmRtYTogZmFpbGVkIHRvIHNlbmQgcmVwbHkgY2h1bmtzLCByYz0lZFxuIiwKIAkJICAgICAgIHJldCk7Ci0JCWdvdG8gZXJyb3I7CisJCWdvdG8gZXJyMTsKIAl9CiAJaW5saW5lX2J5dGVzIC09IHJldDsKIApAQCAtNTE3LDkgKzY5MCwxMSBAQAogCXN2Y19yZG1hX3B1dF9yZXFfbWFwKHZlYyk7CiAJZHByaW50aygic3ZjcmRtYTogc2VuZF9yZXBseSByZXR1cm5zICVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7Ci0gZXJyb3I6CisKKyBlcnIxOgorCXB1dF9wYWdlKHJlc19wYWdlKTsKKyBlcnIwOgogCXN2Y19yZG1hX3B1dF9yZXFfbWFwKHZlYyk7CiAJc3ZjX3JkbWFfcHV0X2NvbnRleHQoY3R4dCwgMCk7Ci0JcHV0X3BhZ2UocmVzX3BhZ2UpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYwppbmRleCA5MDBjYjY5Li42ZmI0OTNjIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMKQEAgLTEwMCwyMCArMTAwLDI5IEBACiAJY3R4dC0+eHBydCA9IHhwcnQ7CiAJSU5JVF9MSVNUX0hFQUQoJmN0eHQtPmR0b19xKTsKIAljdHh0LT5jb3VudCA9IDA7CisJY3R4dC0+ZnJtciA9IE5VTEw7CiAJYXRvbWljX2luYygmeHBydC0+c2NfY3R4dF91c2VkKTsKIAlyZXR1cm4gY3R4dDsKIH0KIAotc3RhdGljIHZvaWQgc3ZjX3JkbWFfdW5tYXBfZG1hKHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpjdHh0KQordm9pZCBzdmNfcmRtYV91bm1hcF9kbWEoc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKmN0eHQpCiB7CiAJc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCA9IGN0eHQtPnhwcnQ7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IGN0eHQtPmNvdW50ICYmIGN0eHQtPnNnZVtpXS5sZW5ndGg7IGkrKykgewotCQlhdG9taWNfZGVjKCZ4cHJ0LT5zY19kbWFfdXNlZCk7Ci0JCWliX2RtYV91bm1hcF9zaW5nbGUoeHBydC0+c2NfY21faWQtPmRldmljZSwKLQkJCQkgICAgY3R4dC0+c2dlW2ldLmFkZHIsCi0JCQkJICAgIGN0eHQtPnNnZVtpXS5sZW5ndGgsCi0JCQkJICAgIGN0eHQtPmRpcmVjdGlvbik7CisJCS8qCisJCSAqIFVubWFwIHRoZSBETUEgYWRkciBpbiB0aGUgU0dFIGlmIHRoZSBsa2V5IG1hdGNoZXMKKwkJICogdGhlIHNjX2RtYV9sa2V5LCBvdGhlcndpc2UsIGlnbm9yZSBpdCBzaW5jZSBpdCBpcworCQkgKiBhbiBGUk1SIGxrZXkgYW5kIHdpbGwgYmUgdW5tYXBwZWQgbGF0ZXIgd2hlbiB0aGUKKwkJICogbGFzdCBXUiB0aGF0IHVzZXMgaXQgY29tcGxldGVzLgorCQkgKi8KKwkJaWYgKGN0eHQtPnNnZVtpXS5sa2V5ID09IHhwcnQtPnNjX2RtYV9sa2V5KSB7CisJCQlhdG9taWNfZGVjKCZ4cHJ0LT5zY19kbWFfdXNlZCk7CisJCQlpYl9kbWFfdW5tYXBfc2luZ2xlKHhwcnQtPnNjX2NtX2lkLT5kZXZpY2UsCisJCQkJCSAgICBjdHh0LT5zZ2VbaV0uYWRkciwKKwkJCQkJICAgIGN0eHQtPnNnZVtpXS5sZW5ndGgsCisJCQkJCSAgICBjdHh0LT5kaXJlY3Rpb24pOworCQl9CiAJfQogfQogCkBAIC0xNTAsNiArMTU5LDcgQEAKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyg1MDApKTsKIAl9CiAJbWFwLT5jb3VudCA9IDA7CisJbWFwLT5mcm1yID0gTlVMTDsKIAlyZXR1cm4gbWFwOwogfQogCkBAIC0zMTYsNiArMzI2LDUwIEBACiB9CiAKIC8qCisgKiBQcm9jZXNzcyBhIGNvbXBsZXRpb24gY29udGV4dAorICovCitzdGF0aWMgdm9pZCBwcm9jZXNzX2NvbnRleHQoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKKwkJCSAgICBzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqY3R4dCkKK3sKKwlzdmNfcmRtYV91bm1hcF9kbWEoY3R4dCk7CisKKwlzd2l0Y2ggKGN0eHQtPndyX29wKSB7CisJY2FzZSBJQl9XUl9TRU5EOgorCQlpZiAodGVzdF9iaXQoUkRNQUNUWFRfRl9GQVNUX1VOUkVHLCAmY3R4dC0+ZmxhZ3MpKQorCQkJc3ZjX3JkbWFfcHV0X2ZybXIoeHBydCwgY3R4dC0+ZnJtcik7CisJCXN2Y19yZG1hX3B1dF9jb250ZXh0KGN0eHQsIDEpOworCQlicmVhazsKKworCWNhc2UgSUJfV1JfUkRNQV9XUklURToKKwkJc3ZjX3JkbWFfcHV0X2NvbnRleHQoY3R4dCwgMCk7CisJCWJyZWFrOworCisJY2FzZSBJQl9XUl9SRE1BX1JFQUQ6CisJY2FzZSBJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlY6CisJCWlmICh0ZXN0X2JpdChSRE1BQ1RYVF9GX0xBU1RfQ1RYVCwgJmN0eHQtPmZsYWdzKSkgeworCQkJc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKnJlYWRfaGRyID0gY3R4dC0+cmVhZF9oZHI7CisJCQlCVUdfT04oIXJlYWRfaGRyKTsKKwkJCWlmICh0ZXN0X2JpdChSRE1BQ1RYVF9GX0ZBU1RfVU5SRUcsICZjdHh0LT5mbGFncykpCisJCQkJc3ZjX3JkbWFfcHV0X2ZybXIoeHBydCwgY3R4dC0+ZnJtcik7CisJCQlzcGluX2xvY2tfYmgoJnhwcnQtPnNjX3JxX2R0b19sb2NrKTsKKwkJCXNldF9iaXQoWFBUX0RBVEEsICZ4cHJ0LT5zY194cHJ0LnhwdF9mbGFncyk7CisJCQlsaXN0X2FkZF90YWlsKCZyZWFkX2hkci0+ZHRvX3EsCisJCQkJICAgICAgJnhwcnQtPnNjX3JlYWRfY29tcGxldGVfcSk7CisJCQlzcGluX3VubG9ja19iaCgmeHBydC0+c2NfcnFfZHRvX2xvY2spOworCQkJc3ZjX3hwcnRfZW5xdWV1ZSgmeHBydC0+c2NfeHBydCk7CisJCX0KKwkJc3ZjX3JkbWFfcHV0X2NvbnRleHQoY3R4dCwgMCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJzdmNyZG1hOiB1bmV4cGVjdGVkIGNvbXBsZXRpb24gdHlwZSwgIgorCQkgICAgICAgIm9wY29kZT0lZFxuIiwKKwkJICAgICAgIGN0eHQtPndyX29wKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgogICogU2VuZCBRdWV1ZSBDb21wbGV0aW9uIEhhbmRsZXIgLSBwb3RlbnRpYWxseSBjYWxsZWQgb24gaW50ZXJydXB0IGNvbnRleHQuCiAgKgogICogTm90ZSB0aGF0IGNhbGxlciBtdXN0IGhvbGQgYSB0cmFuc3BvcnQgcmVmZXJlbmNlLgpAQCAtMzI3LDE3ICszODEsMTIgQEAKIAlzdHJ1Y3QgaWJfY3EgKmNxID0geHBydC0+c2Nfc3FfY3E7CiAJaW50IHJldDsKIAotCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoUkRNQVhQUlRfU1FfUEVORElORywgJnhwcnQtPnNjX2ZsYWdzKSkKIAkJcmV0dXJuOwogCiAJaWJfcmVxX25vdGlmeV9jcSh4cHJ0LT5zY19zcV9jcSwgSUJfQ1FfTkVYVF9DT01QKTsKIAlhdG9taWNfaW5jKCZyZG1hX3N0YXRfc3FfcG9sbCk7CiAJd2hpbGUgKChyZXQgPSBpYl9wb2xsX2NxKGNxLCAxLCAmd2MpKSA+IDApIHsKLQkJY3R4dCA9IChzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqKSh1bnNpZ25lZCBsb25nKXdjLndyX2lkOwotCQl4cHJ0ID0gY3R4dC0+eHBydDsKLQotCQlzdmNfcmRtYV91bm1hcF9kbWEoY3R4dCk7CiAJCWlmICh3Yy5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUykKIAkJCS8qIENsb3NlIHRoZSB0cmFuc3BvcnQgKi8KIAkJCXNldF9iaXQoWFBUX0NMT1NFLCAmeHBydC0+c2NfeHBydC54cHRfZmxhZ3MpOwpAQCAtMzQ2LDM1ICszOTUsMTAgQEAKIAkJYXRvbWljX2RlYygmeHBydC0+c2Nfc3FfY291bnQpOwogCQl3YWtlX3VwKCZ4cHJ0LT5zY19zZW5kX3dhaXQpOwogCi0JCXN3aXRjaCAoY3R4dC0+d3Jfb3ApIHsKLQkJY2FzZSBJQl9XUl9TRU5EOgotCQkJc3ZjX3JkbWFfcHV0X2NvbnRleHQoY3R4dCwgMSk7Ci0JCQlicmVhazsKKwkJY3R4dCA9IChzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqKSh1bnNpZ25lZCBsb25nKXdjLndyX2lkOworCQlpZiAoY3R4dCkKKwkJCXByb2Nlc3NfY29udGV4dCh4cHJ0LCBjdHh0KTsKIAotCQljYXNlIElCX1dSX1JETUFfV1JJVEU6Ci0JCQlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAwKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgotCQkJaWYgKHRlc3RfYml0KFJETUFDVFhUX0ZfTEFTVF9DVFhULCAmY3R4dC0+ZmxhZ3MpKSB7Ci0JCQkJc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKnJlYWRfaGRyID0gY3R4dC0+cmVhZF9oZHI7Ci0JCQkJQlVHX09OKCFyZWFkX2hkcik7Ci0JCQkJc3Bpbl9sb2NrX2JoKCZ4cHJ0LT5zY19ycV9kdG9fbG9jayk7Ci0JCQkJc2V0X2JpdChYUFRfREFUQSwgJnhwcnQtPnNjX3hwcnQueHB0X2ZsYWdzKTsKLQkJCQlsaXN0X2FkZF90YWlsKCZyZWFkX2hkci0+ZHRvX3EsCi0JCQkJCSAgICAgICZ4cHJ0LT5zY19yZWFkX2NvbXBsZXRlX3EpOwotCQkJCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT5zY19ycV9kdG9fbG9jayk7Ci0JCQkJc3ZjX3hwcnRfZW5xdWV1ZSgmeHBydC0+c2NfeHBydCk7Ci0JCQl9Ci0JCQlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAwKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgInN2Y3JkbWE6IHVuZXhwZWN0ZWQgY29tcGxldGlvbiB0eXBlLCAiCi0JCQkgICAgICAgIm9wY29kZT0lZCwgc3RhdHVzPSVkXG4iLAotCQkJICAgICAgIHdjLm9wY29kZSwgd2Muc3RhdHVzKTsKLQkJCWJyZWFrOwotCQl9CiAJCXN2Y194cHJ0X3B1dCgmeHBydC0+c2NfeHBydCk7CiAJfQogCkBAIC00MjUsMTAgKzQ0OSwxMiBAQAogCUlOSVRfTElTVF9IRUFEKCZjbWFfeHBydC0+c2NfZHRvX3EpOwogCUlOSVRfTElTVF9IRUFEKCZjbWFfeHBydC0+c2NfcnFfZHRvX3EpOwogCUlOSVRfTElTVF9IRUFEKCZjbWFfeHBydC0+c2NfcmVhZF9jb21wbGV0ZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmY21hX3hwcnQtPnNjX2ZybXJfcSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY21hX3hwcnQtPnNjX3NlbmRfd2FpdCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmY21hX3hwcnQtPnNjX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZjbWFfeHBydC0+c2NfcnFfZHRvX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZjbWFfeHBydC0+c2NfZnJtcl9xX2xvY2spOwogCiAJY21hX3hwcnQtPnNjX29yZCA9IHN2Y3JkbWFfb3JkOwogCkBAIC00NjIsNyArNDg4LDcgQEAKIAlzdHJ1Y3QgaWJfcmVjdl93ciByZWN2X3dyLCAqYmFkX3JlY3Zfd3I7CiAJc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKmN0eHQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBwYTsKKwlkbWFfYWRkcl90IHBhOwogCWludCBzZ2Vfbm87CiAJaW50IGJ1ZmxlbjsKIAlpbnQgcmV0OwpAQCAtNDc0LDEzICs1MDAsMTUgQEAKIAkJQlVHX09OKHNnZV9ubyA+PSB4cHJ0LT5zY19tYXhfc2dlKTsKIAkJcGFnZSA9IHN2Y19yZG1hX2dldF9wYWdlKCk7CiAJCWN0eHQtPnBhZ2VzW3NnZV9ub10gPSBwYWdlOwotCQlhdG9taWNfaW5jKCZ4cHJ0LT5zY19kbWFfdXNlZCk7CiAJCXBhID0gaWJfZG1hX21hcF9wYWdlKHhwcnQtPnNjX2NtX2lkLT5kZXZpY2UsCiAJCQkJICAgICBwYWdlLCAwLCBQQUdFX1NJWkUsCiAJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoeHBydC0+c2NfY21faWQtPmRldmljZSwgcGEpKQorCQkJZ290byBlcnJfcHV0X2N0eHQ7CisJCWF0b21pY19pbmMoJnhwcnQtPnNjX2RtYV91c2VkKTsKIAkJY3R4dC0+c2dlW3NnZV9ub10uYWRkciA9IHBhOwogCQljdHh0LT5zZ2Vbc2dlX25vXS5sZW5ndGggPSBQQUdFX1NJWkU7Ci0JCWN0eHQtPnNnZVtzZ2Vfbm9dLmxrZXkgPSB4cHJ0LT5zY19waHlzX21yLT5sa2V5OworCQljdHh0LT5zZ2Vbc2dlX25vXS5sa2V5ID0geHBydC0+c2NfZG1hX2xrZXk7CiAJCWJ1ZmxlbiArPSBQQUdFX1NJWkU7CiAJfQogCWN0eHQtPmNvdW50ID0gc2dlX25vOwpAQCAtNDk2LDYgKzUyNCwxMCBAQAogCQlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAxKTsKIAl9CiAJcmV0dXJuIHJldDsKKworIGVycl9wdXRfY3R4dDoKKwlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAxKTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogLyoKQEAgLTU2Niw3ICs1OTgsNyBAQAogCQlkcHJpbnRrKCJzdmNyZG1hOiBDb25uZWN0IHJlcXVlc3Qgb24gY21hX2lkPSVwLCB4cHJ0ID0gJXAsICIKIAkJCSJldmVudD0lZFxuIiwgY21hX2lkLCBjbWFfaWQtPmNvbnRleHQsIGV2ZW50LT5ldmVudCk7CiAJCWhhbmRsZV9jb25uZWN0X3JlcShjbWFfaWQsCi0JCQkJICAgZXZlbnQtPnBhcmFtLmNvbm4ucmVzcG9uZGVyX3Jlc291cmNlcyk7CisJCQkJICAgZXZlbnQtPnBhcmFtLmNvbm4uaW5pdGlhdG9yX2RlcHRoKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJETUFfQ01fRVZFTlRfRVNUQUJMSVNIRUQ6CkBAIC02ODYsNiArNzE4LDk3IEBACiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAorc3RhdGljIHN0cnVjdCBzdmNfcmRtYV9mYXN0cmVnX21yICpyZG1hX2FsbG9jX2ZybXIoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCkKK3sKKwlzdHJ1Y3QgaWJfbXIgKm1yOworCXN0cnVjdCBpYl9mYXN0X3JlZ19wYWdlX2xpc3QgKnBsOworCXN0cnVjdCBzdmNfcmRtYV9mYXN0cmVnX21yICpmcm1yOworCisJZnJtciA9IGttYWxsb2Moc2l6ZW9mKCpmcm1yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmcm1yKQorCQlnb3RvIGVycjsKKworCW1yID0gaWJfYWxsb2NfZmFzdF9yZWdfbXIoeHBydC0+c2NfcGQsIFJQQ1NWQ19NQVhQQUdFUyk7CisJaWYgKCFtcikKKwkJZ290byBlcnJfZnJlZV9mcm1yOworCisJcGwgPSBpYl9hbGxvY19mYXN0X3JlZ19wYWdlX2xpc3QoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkJIFJQQ1NWQ19NQVhQQUdFUyk7CisJaWYgKCFwbCkKKwkJZ290byBlcnJfZnJlZV9tcjsKKworCWZybXItPm1yID0gbXI7CisJZnJtci0+cGFnZV9saXN0ID0gcGw7CisJSU5JVF9MSVNUX0hFQUQoJmZybXItPmZybXJfbGlzdCk7CisJcmV0dXJuIGZybXI7CisKKyBlcnJfZnJlZV9tcjoKKwlpYl9kZXJlZ19tcihtcik7CisgZXJyX2ZyZWVfZnJtcjoKKwlrZnJlZShmcm1yKTsKKyBlcnI6CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cit9CisKK3N0YXRpYyB2b2lkIHJkbWFfZGVhbGxvY19mcm1yX3Eoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCkKK3sKKwlzdHJ1Y3Qgc3ZjX3JkbWFfZmFzdHJlZ19tciAqZnJtcjsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmeHBydC0+c2NfZnJtcl9xKSkgeworCQlmcm1yID0gbGlzdF9lbnRyeSh4cHJ0LT5zY19mcm1yX3EubmV4dCwKKwkJCQkgIHN0cnVjdCBzdmNfcmRtYV9mYXN0cmVnX21yLCBmcm1yX2xpc3QpOworCQlsaXN0X2RlbF9pbml0KCZmcm1yLT5mcm1yX2xpc3QpOworCQlpYl9kZXJlZ19tcihmcm1yLT5tcik7CisJCWliX2ZyZWVfZmFzdF9yZWdfcGFnZV9saXN0KGZybXItPnBhZ2VfbGlzdCk7CisJCWtmcmVlKGZybXIpOworCX0KK30KKworc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKnN2Y19yZG1hX2dldF9mcm1yKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnJkbWEpCit7CisJc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKmZybXIgPSBOVUxMOworCisJc3Bpbl9sb2NrX2JoKCZyZG1hLT5zY19mcm1yX3FfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZyZG1hLT5zY19mcm1yX3EpKSB7CisJCWZybXIgPSBsaXN0X2VudHJ5KHJkbWEtPnNjX2ZybXJfcS5uZXh0LAorCQkJCSAgc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIsIGZybXJfbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJmZybXItPmZybXJfbGlzdCk7CisJCWZybXItPm1hcF9sZW4gPSAwOworCQlmcm1yLT5wYWdlX2xpc3RfbGVuID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnJkbWEtPnNjX2ZybXJfcV9sb2NrKTsKKwlpZiAoZnJtcikKKwkJcmV0dXJuIGZybXI7CisKKwlyZXR1cm4gcmRtYV9hbGxvY19mcm1yKHJkbWEpOworfQorCitzdGF0aWMgdm9pZCBmcm1yX3VubWFwX2RtYShzdHJ1Y3Qgc3ZjeHBydF9yZG1hICp4cHJ0LAorCQkJICAgc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKmZybXIpCit7CisJaW50IHBhZ2Vfbm87CisJZm9yIChwYWdlX25vID0gMDsgcGFnZV9ubyA8IGZybXItPnBhZ2VfbGlzdF9sZW47IHBhZ2Vfbm8rKykgeworCQlkbWFfYWRkcl90IGFkZHIgPSBmcm1yLT5wYWdlX2xpc3QtPnBhZ2VfbGlzdFtwYWdlX25vXTsKKwkJaWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGZybXItPm1yLT5kZXZpY2UsIGFkZHIpKQorCQkJY29udGludWU7CisJCWF0b21pY19kZWMoJnhwcnQtPnNjX2RtYV91c2VkKTsKKwkJaWJfZG1hX3VubWFwX3NpbmdsZShmcm1yLT5tci0+ZGV2aWNlLCBhZGRyLCBQQUdFX1NJWkUsCisJCQkJICAgIGZybXItPmRpcmVjdGlvbik7CisJfQorfQorCit2b2lkIHN2Y19yZG1hX3B1dF9mcm1yKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnJkbWEsCisJCSAgICAgICBzdHJ1Y3Qgc3ZjX3JkbWFfZmFzdHJlZ19tciAqZnJtcikKK3sKKwlpZiAoZnJtcikgeworCQlmcm1yX3VubWFwX2RtYShyZG1hLCBmcm1yKTsKKwkJc3Bpbl9sb2NrX2JoKCZyZG1hLT5zY19mcm1yX3FfbG9jayk7CisJCUJVR19PTighbGlzdF9lbXB0eSgmZnJtci0+ZnJtcl9saXN0KSk7CisJCWxpc3RfYWRkKCZmcm1yLT5mcm1yX2xpc3QsICZyZG1hLT5zY19mcm1yX3EpOworCQlzcGluX3VubG9ja19iaCgmcmRtYS0+c2NfZnJtcl9xX2xvY2spOworCX0KK30KKwogLyoKICAqIFRoaXMgaXMgdGhlIHhwb19yZWN2ZnJvbSBmdW5jdGlvbiBmb3IgbGlzdGVuaW5nIGVuZHBvaW50cy4gSXRzCiAgKiBwdXJwb3NlIGlzIHRvIGFjY2VwdCBpbmNvbWluZyBjb25uZWN0aW9ucy4gVGhlIENNQSBjYWxsYmFjayBoYW5kbGVyCkBAIC03MDQsNiArODI3LDggQEAKIAlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CiAJc3RydWN0IGliX3FwX2luaXRfYXR0ciBxcF9hdHRyOwogCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciBkZXZhdHRyOworCWludCBkbWFfbXJfYWNjOworCWludCBuZWVkX2RtYV9tcjsKIAlpbnQgcmV0OwogCWludCBpOwogCkBAIC04MTksMTUgKzk0NCw3NyBAQAogCX0KIAluZXd4cHJ0LT5zY19xcCA9IG5ld3hwcnQtPnNjX2NtX2lkLT5xcDsKIAotCS8qIFJlZ2lzdGVyIGFsbCBvZiBwaHlzaWNhbCBtZW1vcnkgKi8KLQluZXd4cHJ0LT5zY19waHlzX21yID0gaWJfZ2V0X2RtYV9tcihuZXd4cHJ0LT5zY19wZCwKLQkJCQkJICAgIElCX0FDQ0VTU19MT0NBTF9XUklURSB8Ci0JCQkJCSAgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKTsKLQlpZiAoSVNfRVJSKG5ld3hwcnQtPnNjX3BoeXNfbXIpKSB7Ci0JCWRwcmludGsoInN2Y3JkbWE6IEZhaWxlZCB0byBjcmVhdGUgRE1BIE1SIHJldD0lZFxuIiwgcmV0KTsKKwkvKgorCSAqIFVzZSB0aGUgbW9zdCBzZWN1cmUgc2V0IG9mIE1SIHJlc291cmNlcyBiYXNlZCBvbiB0aGUKKwkgKiB0cmFuc3BvcnQgdHlwZSBhbmQgYXZhaWxhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzIGluCisJICogdGhlIGRldmljZS4gSGVyZSdzIHRoZSB0YWJsZSBpbXBsZW1lbnRlZCBiZWxvdzoKKwkgKgorCSAqCQlGYXN0CUdsb2JhbAlETUEJUmVtb3RlIFdSCisJICoJCVJlZwlMS0VZCU1SCUFjY2VzcworCSAqCQlTdXAnZAlTdXAnZAlOZWVkZWQJTmVlZGVkCisJICoKKwkgKiBJV0FSUAlOCU4JWQlZCisJICoJCU4JWQlZCVkKKwkgKgkJWQlOCVkJTgorCSAqCQlZCVkJTgktCisJICoKKwkgKiBJQgkJTglOCVkJTgorCSAqCQlOCVkJTgktCisJICoJCVkJTglZCU4KKwkgKgkJWQlZCU4JLQorCSAqCisJICogTkI6CWlXQVJQIHJlcXVpcmVzIHJlbW90ZSB3cml0ZSBhY2Nlc3MgZm9yIHRoZSBkYXRhIHNpbmsKKwkgKglvZiBhbiBSRE1BX1JFQUQuIElCIGRvZXMgbm90LgorCSAqLworCWlmIChkZXZhdHRyLmRldmljZV9jYXBfZmxhZ3MgJiBJQl9ERVZJQ0VfTUVNX01HVF9FWFRFTlNJT05TKSB7CisJCW5ld3hwcnQtPnNjX2ZybXJfcGdfbGlzdF9sZW4gPQorCQkJZGV2YXR0ci5tYXhfZmFzdF9yZWdfcGFnZV9saXN0X2xlbjsKKwkJbmV3eHBydC0+c2NfZGV2X2NhcHMgfD0gU1ZDUkRNQV9ERVZDQVBfRkFTVF9SRUc7CisJfQorCisJLyoKKwkgKiBEZXRlcm1pbmUgaWYgYSBETUEgTVIgaXMgcmVxdWlyZWQgYW5kIGlmIHNvLCB3aGF0IHByaXZzIGFyZSByZXF1aXJlZAorCSAqLworCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQobmV3eHBydC0+c2NfY21faWQtPmRldmljZS0+bm9kZV90eXBlKSkgeworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CisJCW5ld3hwcnQtPnNjX2Rldl9jYXBzIHw9IFNWQ1JETUFfREVWQ0FQX1JFQURfV19JTlY7CisJCWlmICghKG5ld3hwcnQtPnNjX2Rldl9jYXBzICYgU1ZDUkRNQV9ERVZDQVBfRkFTVF9SRUcpKSB7CisJCQluZWVkX2RtYV9tciA9IDE7CisJCQlkbWFfbXJfYWNjID0KKwkJCQkoSUJfQUNDRVNTX0xPQ0FMX1dSSVRFIHwKKwkJCQkgSUJfQUNDRVNTX1JFTU9URV9XUklURSk7CisJCX0gZWxzZSBpZiAoIShkZXZhdHRyLmRldmljZV9jYXBfZmxhZ3MgJiBJQl9ERVZJQ0VfTE9DQUxfRE1BX0xLRVkpKSB7CisJCQluZWVkX2RtYV9tciA9IDE7CisJCQlkbWFfbXJfYWNjID0gSUJfQUNDRVNTX0xPQ0FMX1dSSVRFOworCQl9IGVsc2UKKwkJCW5lZWRfZG1hX21yID0gMDsKKwkJYnJlYWs7CisJY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKKwkJaWYgKCEoZGV2YXR0ci5kZXZpY2VfY2FwX2ZsYWdzICYgSUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZKSkgeworCQkJbmVlZF9kbWFfbXIgPSAxOworCQkJZG1hX21yX2FjYyA9IElCX0FDQ0VTU19MT0NBTF9XUklURTsKKwkJfSBlbHNlCisJCQluZWVkX2RtYV9tciA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCWdvdG8gZXJyb3V0OwogCX0KIAorCS8qIENyZWF0ZSB0aGUgRE1BIE1SIGlmIG5lZWRlZCwgb3RoZXJ3aXNlLCB1c2UgdGhlIERNQSBMS0VZICovCisJaWYgKG5lZWRfZG1hX21yKSB7CisJCS8qIFJlZ2lzdGVyIGFsbCBvZiBwaHlzaWNhbCBtZW1vcnkgKi8KKwkJbmV3eHBydC0+c2NfcGh5c19tciA9CisJCQlpYl9nZXRfZG1hX21yKG5ld3hwcnQtPnNjX3BkLCBkbWFfbXJfYWNjKTsKKwkJaWYgKElTX0VSUihuZXd4cHJ0LT5zY19waHlzX21yKSkgeworCQkJZHByaW50aygic3ZjcmRtYTogRmFpbGVkIHRvIGNyZWF0ZSBETUEgTVIgcmV0PSVkXG4iLAorCQkJCXJldCk7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQluZXd4cHJ0LT5zY19kbWFfbGtleSA9IG5ld3hwcnQtPnNjX3BoeXNfbXItPmxrZXk7CisJfSBlbHNlCisJCW5ld3hwcnQtPnNjX2RtYV9sa2V5ID0KKwkJCW5ld3hwcnQtPnNjX2NtX2lkLT5kZXZpY2UtPmxvY2FsX2RtYV9sa2V5OworCiAJLyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbmV3eHBydC0+c2NfbWF4X3JlcXVlc3RzOyBpKyspIHsKIAkJcmV0ID0gc3ZjX3JkbWFfcG9zdF9yZWN2KG5ld3hwcnQpOwpAQCAtOTYxLDYgKzExNDgsOSBAQAogCVdBUk5fT04oYXRvbWljX3JlYWQoJnJkbWEtPnNjX2N0eHRfdXNlZCkgIT0gMCk7CiAJV0FSTl9PTihhdG9taWNfcmVhZCgmcmRtYS0+c2NfZG1hX3VzZWQpICE9IDApOwogCisJLyogRGUtYWxsb2NhdGUgZmFzdHJlZyBtciAqLworCXJkbWFfZGVhbGxvY19mcm1yX3EocmRtYSk7CisKIAkvKiBEZXN0cm95IHRoZSBRUCBpZiBwcmVzZW50IChub3QgYSBsaXN0ZW5lcikgKi8KIAlpZiAocmRtYS0+c2NfcXAgJiYgIUlTX0VSUihyZG1hLT5zY19xcCkpCiAJCWliX2Rlc3Ryb3lfcXAocmRtYS0+c2NfcXApOwpAQCAtMTAxNCwyMSArMTIwNCw1OSBAQAogCXJldHVybiAxOwogfQogCisvKgorICogQXR0ZW1wdCB0byByZWdpc3RlciB0aGUga3ZlYyByZXByZXNlbnRpbmcgdGhlIFJQQyBtZW1vcnkgd2l0aCB0aGUKKyAqIGRldmljZS4KKyAqCisgKiBSZXR1cm5zOgorICogIE5VTEwgOiBUaGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZmFzdHJlZyBvciB0aGVyZSB3ZXJlIG5vIG1vcmUKKyAqICAgICAgICAgZmFzdHJlZyBtci4KKyAqICBmcm1yIDogVGhlIGt2ZWMgcmVnaXN0ZXIgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHBvc3RlZC4KKyAqICAgIDwwIDogQW4gZXJyb3Igd2FzIGVuY291bnRlcmVkIGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgdGhlIGt2ZWMuCisgKi8KK2ludCBzdmNfcmRtYV9mYXN0cmVnKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnhwcnQsCisJCSAgICAgc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKmZybXIpCit7CisJc3RydWN0IGliX3NlbmRfd3IgZmFzdHJlZ193cjsKKwl1OCBrZXk7CisKKwkvKiBCdW1wIHRoZSBrZXkgKi8KKwlrZXkgPSAodTgpKGZybXItPm1yLT5sa2V5ICYgMHgwMDAwMDBGRik7CisJaWJfdXBkYXRlX2Zhc3RfcmVnX2tleShmcm1yLT5tciwgKytrZXkpOworCisJLyogUHJlcGFyZSBGQVNUUkVHIFdSICovCisJbWVtc2V0KCZmYXN0cmVnX3dyLCAwLCBzaXplb2YgZmFzdHJlZ193cik7CisJZmFzdHJlZ193ci5vcGNvZGUgPSBJQl9XUl9GQVNUX1JFR19NUjsKKwlmYXN0cmVnX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCWZhc3RyZWdfd3Iud3IuZmFzdF9yZWcuaW92YV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKWZybXItPmt2YTsKKwlmYXN0cmVnX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdCA9IGZybXItPnBhZ2VfbGlzdDsKKwlmYXN0cmVnX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW4gPSBmcm1yLT5wYWdlX2xpc3RfbGVuOworCWZhc3RyZWdfd3Iud3IuZmFzdF9yZWcucGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7CisJZmFzdHJlZ193ci53ci5mYXN0X3JlZy5sZW5ndGggPSBmcm1yLT5tYXBfbGVuOworCWZhc3RyZWdfd3Iud3IuZmFzdF9yZWcuYWNjZXNzX2ZsYWdzID0gZnJtci0+YWNjZXNzX2ZsYWdzOworCWZhc3RyZWdfd3Iud3IuZmFzdF9yZWcucmtleSA9IGZybXItPm1yLT5sa2V5OworCXJldHVybiBzdmNfcmRtYV9zZW5kKHhwcnQsICZmYXN0cmVnX3dyKTsKK30KKwogaW50IHN2Y19yZG1hX3NlbmQoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwgc3RydWN0IGliX3NlbmRfd3IgKndyKQogewotCXN0cnVjdCBpYl9zZW5kX3dyICpiYWRfd3I7CisJc3RydWN0IGliX3NlbmRfd3IgKmJhZF93ciwgKm5fd3I7CisJaW50IHdyX2NvdW50OworCWludCBpOwogCWludCByZXQ7CiAKIAlpZiAodGVzdF9iaXQoWFBUX0NMT1NFLCAmeHBydC0+c2NfeHBydC54cHRfZmxhZ3MpKQogCQlyZXR1cm4gLUVOT1RDT05OOwogCiAJQlVHX09OKHdyLT5zZW5kX2ZsYWdzICE9IElCX1NFTkRfU0lHTkFMRUQpOwotCUJVR19PTigoKHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICopKHVuc2lnbmVkIGxvbmcpd3ItPndyX2lkKS0+d3Jfb3AgIT0KLQkJd3ItPm9wY29kZSk7CisJd3JfY291bnQgPSAxOworCWZvciAobl93ciA9IHdyLT5uZXh0OyBuX3dyOyBuX3dyID0gbl93ci0+bmV4dCkKKwkJd3JfY291bnQrKzsKKwogCS8qIElmIHRoZSBTUSBpcyBmdWxsLCB3YWl0IHVudGlsIGFuIFNRIGVudHJ5IGlzIGF2YWlsYWJsZSAqLwogCXdoaWxlICgxKSB7CiAJCXNwaW5fbG9ja19iaCgmeHBydC0+c2NfbG9jayk7Ci0JCWlmICh4cHJ0LT5zY19zcV9kZXB0aCA9PSBhdG9taWNfcmVhZCgmeHBydC0+c2Nfc3FfY291bnQpKSB7CisJCWlmICh4cHJ0LT5zY19zcV9kZXB0aCA8IGF0b21pY19yZWFkKCZ4cHJ0LT5zY19zcV9jb3VudCkgKyB3cl9jb3VudCkgewogCQkJc3Bpbl91bmxvY2tfYmgoJnhwcnQtPnNjX2xvY2spOwogCQkJYXRvbWljX2luYygmcmRtYV9zdGF0X3NxX3N0YXJ2ZSk7CiAKQEAgLTEwNDMsMTkgKzEyNzEsMjYgQEAKIAkJCQlyZXR1cm4gMDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCS8qIEJ1bXBlZCB1c2VkIFNRIFdSIGNvdW50IGFuZCBwb3N0ICovCi0JCXN2Y194cHJ0X2dldCgmeHBydC0+c2NfeHBydCk7CisJCS8qIFRha2UgYSB0cmFuc3BvcnQgcmVmIGZvciBlYWNoIFdSIHBvc3RlZCAqLworCQlmb3IgKGkgPSAwOyBpIDwgd3JfY291bnQ7IGkrKykKKwkJCXN2Y194cHJ0X2dldCgmeHBydC0+c2NfeHBydCk7CisKKwkJLyogQnVtcCB1c2VkIFNRIFdSIGNvdW50IGFuZCBwb3N0ICovCisJCWF0b21pY19hZGQod3JfY291bnQsICZ4cHJ0LT5zY19zcV9jb3VudCk7CiAJCXJldCA9IGliX3Bvc3Rfc2VuZCh4cHJ0LT5zY19xcCwgd3IsICZiYWRfd3IpOwotCQlpZiAoIXJldCkKLQkJCWF0b21pY19pbmMoJnhwcnQtPnNjX3NxX2NvdW50KTsKLQkJZWxzZSB7Ci0JCQlzdmNfeHBydF9wdXQoJnhwcnQtPnNjX3hwcnQpOworCQlpZiAocmV0KSB7CisJCQlzZXRfYml0KFhQVF9DTE9TRSwgJnhwcnQtPnNjX3hwcnQueHB0X2ZsYWdzKTsKKwkJCWF0b21pY19zdWIod3JfY291bnQsICZ4cHJ0LT5zY19zcV9jb3VudCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgd3JfY291bnQ7IGkgKyspCisJCQkJc3ZjX3hwcnRfcHV0KCZ4cHJ0LT5zY194cHJ0KTsKIAkJCWRwcmludGsoInN2Y3JkbWE6IGZhaWxlZCB0byBwb3N0IFNRIFdSIHJjPSVkLCAiCiAJCQkgICAgICAgInNjX3NxX2NvdW50PSVkLCBzY19zcV9kZXB0aD0lZFxuIiwKIAkJCSAgICAgICByZXQsIGF0b21pY19yZWFkKCZ4cHJ0LT5zY19zcV9jb3VudCksCiAJCQkgICAgICAgeHBydC0+c2Nfc3FfZGVwdGgpOwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT5zY19sb2NrKTsKKwkJaWYgKHJldCkKKwkJCXdha2VfdXAoJnhwcnQtPnNjX3NlbmRfd2FpdCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMTA3OSwxMCArMTMxNCwxNCBAQAogCWxlbmd0aCA9IHN2Y19yZG1hX3hkcl9lbmNvZGVfZXJyb3IoeHBydCwgcm1zZ3AsIGVyciwgdmEpOwogCiAJLyogUHJlcGFyZSBTR0UgZm9yIGxvY2FsIGFkZHJlc3MgKi8KLQlhdG9taWNfaW5jKCZ4cHJ0LT5zY19kbWFfdXNlZCk7CiAJc2dlLmFkZHIgPSBpYl9kbWFfbWFwX3BhZ2UoeHBydC0+c2NfY21faWQtPmRldmljZSwKIAkJCQkgICBwLCAwLCBQQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7Ci0Jc2dlLmxrZXkgPSB4cHJ0LT5zY19waHlzX21yLT5sa2V5OworCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcih4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLCBzZ2UuYWRkcikpIHsKKwkJcHV0X3BhZ2UocCk7CisJCXJldHVybjsKKwl9CisJYXRvbWljX2luYygmeHBydC0+c2NfZG1hX3VzZWQpOworCXNnZS5sa2V5ID0geHBydC0+c2NfZG1hX2xrZXk7CiAJc2dlLmxlbmd0aCA9IGxlbmd0aDsKIAogCWN0eHQgPSBzdmNfcmRtYV9nZXRfY29udGV4dCh4cHJ0KTsKQEAgLTExMDMsNiArMTM0Miw5IEBACiAJaWYgKHJldCkgewogCQlkcHJpbnRrKCJzdmNyZG1hOiBFcnJvciAlZCBwb3N0aW5nIHNlbmQgZm9yIHByb3RvY29sIGVycm9yXG4iLAogCQkJcmV0KTsKKwkJaWJfZG1hX3VubWFwX3BhZ2UoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkgIHNnZS5hZGRyLCBQQUdFX1NJWkUsCisJCQkJICBETUFfRlJPTV9ERVZJQ0UpOwogCQlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAxKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFuc3BvcnQuYwppbmRleCBhNTY0YzFhLi45ODM5YzNkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvdHJhbnNwb3J0LmMKQEAgLTcwLDExICs3MCw4IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tYXhfaW5saW5lX3JlYWQgPSBSUENSRE1BX0RFRl9JTkxJTkU7CiBzdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tYXhfaW5saW5lX3dyaXRlID0gUlBDUkRNQV9ERUZfSU5MSU5FOwogc3RhdGljIHVuc2lnbmVkIGludCB4cHJ0X3JkbWFfaW5saW5lX3dyaXRlX3BhZGRpbmc7Ci0jaWYgIVJQQ1JETUFfUEVSU0lTVEVOVF9SRUdJU1RSQVRJT04KLXN0YXRpYyB1bnNpZ25lZCBpbnQgeHBydF9yZG1hX21lbXJlZ19zdHJhdGVneSA9IFJQQ1JETUFfUkVHSVNURVI7IC8qIEZNUj8gKi8KLSNlbHNlCi1zdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tZW1yZWdfc3RyYXRlZ3kgPSBSUENSRE1BX0FMTFBIWVNJQ0FMOwotI2VuZGlmCitzdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tZW1yZWdfc3RyYXRlZ3kgPSBSUENSRE1BX0ZSTVI7CisgICAgICAgICAgICAgICAgaW50IHhwcnRfcmRtYV9wYWRfb3B0aW1pemUgPSAwOwogCiAjaWZkZWYgUlBDX0RFQlVHCiAKQEAgLTE0MCw2ICsxMzcsMTQgQEAKIAkJLmV4dHJhMgkJPSAmbWF4X21lbXJlZywKIAl9LAogCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJyZG1hX3BhZF9vcHRpbWl6ZSIsCisJCS5kYXRhCQk9ICZ4cHJ0X3JkbWFfcGFkX29wdGltaXplLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CiAJCS5jdGxfbmFtZSA9IDAsCiAJfSwKIH07CkBAIC00NTgsNiArNDYzLDggQEAKIAlzdHJ1Y3QgcnBjcmRtYV94cHJ0ICpyX3hwcnQgPSBycGN4X3RvX3JkbWF4KHhwcnQpOwogCiAJZHByaW50aygiUlBDOiAgICAgICAlczogY2xvc2luZ1xuIiwgX19mdW5jX18pOworCWlmIChyX3hwcnQtPnJ4X2VwLnJlcF9jb25uZWN0ZWQgPiAwKQorCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID0gMDsKIAl4cHJ0X2Rpc2Nvbm5lY3RfZG9uZSh4cHJ0KTsKIAkodm9pZCkgcnBjcmRtYV9lcF9kaXNjb25uZWN0KCZyX3hwcnQtPnJ4X2VwLCAmcl94cHJ0LT5yeF9pYSk7CiB9CkBAIC00ODUsNiArNDkyLDExIEBACiAJCQkvKiBSZWNvbm5lY3QgKi8KIAkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcl94cHJ0LT5yZG1hX2Nvbm5lY3QsCiAJCQkJeHBydC0+cmVlc3RhYmxpc2hfdGltZW91dCk7CisJCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0IDw8PSAxOworCQkJaWYgKHhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPiAoMzAgKiBIWikpCisJCQkJeHBydC0+cmVlc3RhYmxpc2hfdGltZW91dCA9ICgzMCAqIEhaKTsKKwkJCWVsc2UgaWYgKHhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPCAoNSAqIEhaKSkKKwkJCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID0gKDUgKiBIWik7CiAJCX0gZWxzZSB7CiAJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJfeHBydC0+cmRtYV9jb25uZWN0LCAwKTsKIAkJCWlmICghUlBDX0lTX0FTWU5DKHRhc2spKQpAQCAtNTkxLDYgKzYwMyw3IEBACiAJfQogCWRwcmludGsoIlJQQzogICAgICAgJXM6IHNpemUgJXpkLCByZXF1ZXN0IDB4JXBcbiIsIF9fZnVuY19fLCBzaXplLCByZXEpOwogb3V0OgorCXJlcS0+cmxfY29ubmVjdF9jb29raWUgPSAwOwkvKiBvdXIgcmVzZXJ2ZWQgdmFsdWUgKi8KIAlyZXR1cm4gcmVxLT5ybF94ZHJfYnVmOwogCiBvdXRmYWlsOgpAQCAtNjk0LDEzICs3MDcsMjEgQEAKIAkJcmVxLT5ybF9yZXBseS0+cnJfeHBydCA9IHhwcnQ7CiAJfQogCi0JaWYgKHJwY3JkbWFfZXBfcG9zdCgmcl94cHJ0LT5yeF9pYSwgJnJfeHBydC0+cnhfZXAsIHJlcSkpIHsKLQkJeHBydF9kaXNjb25uZWN0X2RvbmUoeHBydCk7Ci0JCXJldHVybiAtRU5PVENPTk47CS8qIGltcGxpZXMgZGlzY29ubmVjdCAqLwotCX0KKwkvKiBNdXN0IHN1cHByZXNzIHJldHJhbnNtaXQgdG8gbWFpbnRhaW4gY3JlZGl0cyAqLworCWlmIChyZXEtPnJsX2Nvbm5lY3RfY29va2llID09IHhwcnQtPmNvbm5lY3RfY29va2llKQorCQlnb3RvIGRyb3BfY29ubmVjdGlvbjsKKwlyZXEtPnJsX2Nvbm5lY3RfY29va2llID0geHBydC0+Y29ubmVjdF9jb29raWU7CiAKKwlpZiAocnBjcmRtYV9lcF9wb3N0KCZyX3hwcnQtPnJ4X2lhLCAmcl94cHJ0LT5yeF9lcCwgcmVxKSkKKwkJZ290byBkcm9wX2Nvbm5lY3Rpb247CisKKwl0YXNrLT50a19ieXRlc19zZW50ICs9IHJxc3QtPnJxX3NuZF9idWYubGVuOwogCXJxc3QtPnJxX2J5dGVzX3NlbnQgPSAwOwogCXJldHVybiAwOworCitkcm9wX2Nvbm5lY3Rpb246CisJeHBydF9kaXNjb25uZWN0X2RvbmUoeHBydCk7CisJcmV0dXJuIC1FTk9UQ09OTjsJLyogaW1wbGllcyBkaXNjb25uZWN0ICovCiB9CiAKIHN0YXRpYyB2b2lkIHhwcnRfcmRtYV9wcmludF9zdGF0cyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQpAQCAtNzcwLDcgKzc5MSw3IEBACiB7CiAJaW50IHJjOwogCi0JZHByaW50aygiUlBDUkRNQSBNb2R1bGUgUmVtb3ZlZCwgZGVyZWdpc3RlciBSUEMgUkRNQSB0cmFuc3BvcnRcbiIpOworCWRwcmludGsoS0VSTl9JTkZPICJSUENSRE1BIE1vZHVsZSBSZW1vdmVkLCBkZXJlZ2lzdGVyIFJQQyBSRE1BIHRyYW5zcG9ydFxuIik7CiAjaWZkZWYgUlBDX0RFQlVHCiAJaWYgKHN1bnJwY190YWJsZV9oZWFkZXIpIHsKIAkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoc3VucnBjX3RhYmxlX2hlYWRlcik7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMKaW5kZXggOGVhMjgzZS4uYTVmZWY1ZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS92ZXJicy5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvdmVyYnMuYwpAQCAtMjg0LDYgKzI4NCw3IEBACiAJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKIAljYXNlIFJETUFfQ01fRVZFTlRfQUREUl9SRVNPTFZFRDoKIAljYXNlIFJETUFfQ01fRVZFTlRfUk9VVEVfUkVTT0xWRUQ6CisJCWlhLT5yaV9hc3luY19yYyA9IDA7CiAJCWNvbXBsZXRlKCZpYS0+cmlfZG9uZSk7CiAJCWJyZWFrOwogCWNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX0VSUk9SOgpAQCAtMzM4LDEzICszMzksMzIgQEAKIAkJd2FrZV91cF9hbGwoJmVwLT5yZXBfY29ubmVjdF93YWl0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaWEtPnJpX2FzeW5jX3JjID0gLUVJTlZBTDsKLQkJZHByaW50aygiUlBDOiAgICAgICAlczogdW5leHBlY3RlZCBDTSBldmVudCAlWFxuIiwKKwkJZHByaW50aygiUlBDOiAgICAgICAlczogdW5leHBlY3RlZCBDTSBldmVudCAlZFxuIiwKIAkJCV9fZnVuY19fLCBldmVudC0+ZXZlbnQpOwotCQljb21wbGV0ZSgmaWEtPnJpX2RvbmUpOwogCQlicmVhazsKIAl9CiAKKyNpZmRlZiBSUENfREVCVUcKKwlpZiAoY29ubnN0YXRlID09IDEpIHsKKwkJaW50IGlyZCA9IGF0dHIubWF4X2Rlc3RfcmRfYXRvbWljOworCQlpbnQgdGlyZCA9IGVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzOworCQlwcmludGsoS0VSTl9JTkZPICJycGNyZG1hOiBjb25uZWN0aW9uIHRvICV1LiV1LiV1LiV1OiV1ICIKKwkJCSJvbiAlcywgbWVtcmVnICVkIHNsb3RzICVkIGlyZCAlZCVzXG4iLAorCQkJTklQUVVBRChhZGRyLT5zaW5fYWRkci5zX2FkZHIpLAorCQkJbnRvaHMoYWRkci0+c2luX3BvcnQpLAorCQkJaWEtPnJpX2lkLT5kZXZpY2UtPm5hbWUsCisJCQlpYS0+cmlfbWVtcmVnX3N0cmF0ZWd5LAorCQkJeHBydC0+cnhfYnVmLnJiX21heF9yZXF1ZXN0cywKKwkJCWlyZCwgaXJkIDwgNCAmJiBpcmQgPCB0aXJkIC8gMiA/ICIgKGxvdyEpIiA6ICIiKTsKKwl9IGVsc2UgaWYgKGNvbm5zdGF0ZSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicnBjcmRtYTogY29ubmVjdGlvbiB0byAldS4ldS4ldS4ldToldSAiCisJCQkiY2xvc2VkICglZClcbiIsCisJCQlOSVBRVUFEKGFkZHItPnNpbl9hZGRyLnNfYWRkciksCisJCQludG9ocyhhZGRyLT5zaW5fcG9ydCksCisJCQljb25uc3RhdGUpOworCX0KKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1NSw2ICszNzUsOCBAQAogCXN0cnVjdCByZG1hX2NtX2lkICppZDsKIAlpbnQgcmM7CiAKKwlpbml0X2NvbXBsZXRpb24oJmlhLT5yaV9kb25lKTsKKwogCWlkID0gcmRtYV9jcmVhdGVfaWQocnBjcmRtYV9jb25uX3VwY2FsbCwgeHBydCwgUkRNQV9QU19UQ1ApOwogCWlmIChJU19FUlIoaWQpKSB7CiAJCXJjID0gUFRSX0VSUihpZCk7CkBAIC0zNjMsMjYgKzM4NSwyOCBAQAogCQlyZXR1cm4gaWQ7CiAJfQogCi0JaWEtPnJpX2FzeW5jX3JjID0gMDsKKwlpYS0+cmlfYXN5bmNfcmMgPSAtRVRJTUVET1VUOwogCXJjID0gcmRtYV9yZXNvbHZlX2FkZHIoaWQsIE5VTEwsIGFkZHIsIFJETUFfUkVTT0xWRV9USU1FT1VUKTsKIAlpZiAocmMpIHsKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogcmRtYV9yZXNvbHZlX2FkZHIoKSBmYWlsZWQgJWlcbiIsCiAJCQlfX2Z1bmNfXywgcmMpOwogCQlnb3RvIG91dDsKIAl9Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmaWEtPnJpX2RvbmUpOworCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZpYS0+cmlfZG9uZSwKKwkJCQltc2Vjc190b19qaWZmaWVzKFJETUFfUkVTT0xWRV9USU1FT1VUKSArIDEpOwogCXJjID0gaWEtPnJpX2FzeW5jX3JjOwogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKLQlpYS0+cmlfYXN5bmNfcmMgPSAwOworCWlhLT5yaV9hc3luY19yYyA9IC1FVElNRURPVVQ7CiAJcmMgPSByZG1hX3Jlc29sdmVfcm91dGUoaWQsIFJETUFfUkVTT0xWRV9USU1FT1VUKTsKIAlpZiAocmMpIHsKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogcmRtYV9yZXNvbHZlX3JvdXRlKCkgZmFpbGVkICVpXG4iLAogCQkJX19mdW5jX18sIHJjKTsKIAkJZ290byBvdXQ7CiAJfQotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmlhLT5yaV9kb25lKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmaWEtPnJpX2RvbmUsCisJCQkJbXNlY3NfdG9famlmZmllcyhSRE1BX1JFU09MVkVfVElNRU9VVCkgKyAxKTsKIAlyYyA9IGlhLT5yaV9hc3luY19yYzsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwpAQCAtNDIzLDExICs0NDcsMTAgQEAKIGludAogcnBjcmRtYV9pYV9vcGVuKHN0cnVjdCBycGNyZG1hX3hwcnQgKnhwcnQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IG1lbXJlZykKIHsKLQlpbnQgcmM7CisJaW50IHJjLCBtZW1fcHJpdjsKKwlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgZGV2YXR0cjsKIAlzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEgPSAmeHBydC0+cnhfaWE7CiAKLQlpbml0X2NvbXBsZXRpb24oJmlhLT5yaV9kb25lKTsKLQogCWlhLT5yaV9pZCA9IHJwY3JkbWFfY3JlYXRlX2lkKHhwcnQsIGlhLCBhZGRyKTsKIAlpZiAoSVNfRVJSKGlhLT5yaV9pZCkpIHsKIAkJcmMgPSBQVFJfRVJSKGlhLT5yaV9pZCk7CkBAIC00NDMsNiArNDY2LDczIEBACiAJfQogCiAJLyoKKwkgKiBRdWVyeSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSBpZiB0aGUgcmVxdWVzdGVkIG1lbW9yeQorCSAqIHJlZ2lzdHJhdGlvbiBzdHJhdGVneSBpcyBzdXBwb3J0ZWQuIElmIGl0IGlzbid0LCBzZXQgdGhlCisJICogc3RyYXRlZ3kgdG8gYSBnbG9iYWxseSBzdXBwb3J0ZWQgbW9kZWwuCisJICovCisJcmMgPSBpYl9xdWVyeV9kZXZpY2UoaWEtPnJpX2lkLT5kZXZpY2UsICZkZXZhdHRyKTsKKwlpZiAocmMpIHsKKwkJZHByaW50aygiUlBDOiAgICAgICAlczogaWJfcXVlcnlfZGV2aWNlIGZhaWxlZCAlZFxuIiwKKwkJCV9fZnVuY19fLCByYyk7CisJCWdvdG8gb3V0MjsKKwl9CisKKwlpZiAoZGV2YXR0ci5kZXZpY2VfY2FwX2ZsYWdzICYgSUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZKSB7CisJCWlhLT5yaV9oYXZlX2RtYV9sa2V5ID0gMTsKKwkJaWEtPnJpX2RtYV9sa2V5ID0gaWEtPnJpX2lkLT5kZXZpY2UtPmxvY2FsX2RtYV9sa2V5OworCX0KKworCXN3aXRjaCAobWVtcmVnKSB7CisJY2FzZSBSUENSRE1BX01FTVdJTkRPV1M6CisJY2FzZSBSUENSRE1BX01FTVdJTkRPV1NfQVNZTkM6CisJCWlmICghKGRldmF0dHIuZGV2aWNlX2NhcF9mbGFncyAmIElCX0RFVklDRV9NRU1fV0lORE9XKSkgeworCQkJZHByaW50aygiUlBDOiAgICAgICAlczogTUVNV0lORE9XUyByZWdpc3RyYXRpb24gIgorCQkJCSJzcGVjaWZpZWQgYnV0IG5vdCBzdXBwb3J0ZWQgYnkgYWRhcHRlciwgIgorCQkJCSJ1c2luZyBzbG93ZXIgUlBDUkRNQV9SRUdJU1RFUlxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQltZW1yZWcgPSBSUENSRE1BX1JFR0lTVEVSOworCQl9CisJCWJyZWFrOworCWNhc2UgUlBDUkRNQV9NVEhDQUZNUjoKKwkJaWYgKCFpYS0+cmlfaWQtPmRldmljZS0+YWxsb2NfZm1yKSB7CisjaWYgUlBDUkRNQV9QRVJTSVNURU5UX1JFR0lTVFJBVElPTgorCQkJZHByaW50aygiUlBDOiAgICAgICAlczogTVRIQ0FGTVIgcmVnaXN0cmF0aW9uICIKKwkJCQkic3BlY2lmaWVkIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IGFkYXB0ZXIsICIKKwkJCQkidXNpbmcgcmlza2llciBSUENSRE1BX0FMTFBIWVNJQ0FMXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCW1lbXJlZyA9IFJQQ1JETUFfQUxMUEhZU0lDQUw7CisjZWxzZQorCQkJZHByaW50aygiUlBDOiAgICAgICAlczogTVRIQ0FGTVIgcmVnaXN0cmF0aW9uICIKKwkJCQkic3BlY2lmaWVkIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IGFkYXB0ZXIsICIKKwkJCQkidXNpbmcgc2xvd2VyIFJQQ1JETUFfUkVHSVNURVJcbiIsCisJCQkJX19mdW5jX18pOworCQkJbWVtcmVnID0gUlBDUkRNQV9SRUdJU1RFUjsKKyNlbmRpZgorCQl9CisJCWJyZWFrOworCWNhc2UgUlBDUkRNQV9GUk1SOgorCQkvKiBSZXF1aXJlcyBib3RoIGZybXIgcmVnIGFuZCBsb2NhbCBkbWEgbGtleSAqLworCQlpZiAoKGRldmF0dHIuZGV2aWNlX2NhcF9mbGFncyAmCisJCSAgICAgKElCX0RFVklDRV9NRU1fTUdUX0VYVEVOU0lPTlN8SUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZKSkgIT0KKwkJICAgIChJQl9ERVZJQ0VfTUVNX01HVF9FWFRFTlNJT05TfElCX0RFVklDRV9MT0NBTF9ETUFfTEtFWSkpIHsKKyNpZiBSUENSRE1BX1BFUlNJU1RFTlRfUkVHSVNUUkFUSU9OCisJCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBGUk1SIHJlZ2lzdHJhdGlvbiAiCisJCQkJInNwZWNpZmllZCBidXQgbm90IHN1cHBvcnRlZCBieSBhZGFwdGVyLCAiCisJCQkJInVzaW5nIHJpc2tpZXIgUlBDUkRNQV9BTExQSFlTSUNBTFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQltZW1yZWcgPSBSUENSRE1BX0FMTFBIWVNJQ0FMOworI2Vsc2UKKwkJCWRwcmludGsoIlJQQzogICAgICAgJXM6IEZSTVIgcmVnaXN0cmF0aW9uICIKKwkJCQkic3BlY2lmaWVkIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IGFkYXB0ZXIsICIKKwkJCQkidXNpbmcgc2xvd2VyIFJQQ1JETUFfUkVHSVNURVJcbiIsCisJCQkJX19mdW5jX18pOworCQkJbWVtcmVnID0gUlBDUkRNQV9SRUdJU1RFUjsKKyNlbmRpZgorCQl9CisJCWJyZWFrOworCX0KKworCS8qCiAJICogT3B0aW9uYWxseSBvYnRhaW4gYW4gdW5kZXJseWluZyBwaHlzaWNhbCBpZGVudGl0eSBtYXBwaW5nIGluCiAJICogb3JkZXIgdG8gZG8gYSBtZW1vcnkgd2luZG93LWJhc2VkIGJpbmQuIFRoaXMgYmFzZSByZWdpc3RyYXRpb24KIAkgKiBpcyBwcm90ZWN0ZWQgZnJvbSByZW1vdGUgYWNjZXNzIC0gdGhhdCBpcyBlbmFibGVkIG9ubHkgYnkgYmluZGluZwpAQCAtNDUwLDIyICs1NDAsMjggQEAKIAkgKiByZXZva2VkIGFmdGVyIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBsZXRpb24gc2ltaWxhciB0byBhIHN0b3JhZ2UKIAkgKiBhZGFwdGVyLgogCSAqLwotCWlmIChtZW1yZWcgPiBSUENSRE1BX1JFR0lTVEVSKSB7Ci0JCWludCBtZW1fcHJpdiA9IElCX0FDQ0VTU19MT0NBTF9XUklURTsKLQkJc3dpdGNoIChtZW1yZWcpIHsKKwlzd2l0Y2ggKG1lbXJlZykgeworCWNhc2UgUlBDUkRNQV9CT1VOQ0VCVUZGRVJTOgorCWNhc2UgUlBDUkRNQV9SRUdJU1RFUjoKKwljYXNlIFJQQ1JETUFfRlJNUjoKKwkJYnJlYWs7CiAjaWYgUlBDUkRNQV9QRVJTSVNURU5UX1JFR0lTVFJBVElPTgotCQljYXNlIFJQQ1JETUFfQUxMUEhZU0lDQUw6Ci0JCQltZW1fcHJpdiB8PSBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFOwotCQkJbWVtX3ByaXYgfD0gSUJfQUNDRVNTX1JFTU9URV9SRUFEOwotCQkJYnJlYWs7CisJY2FzZSBSUENSRE1BX0FMTFBIWVNJQ0FMOgorCQltZW1fcHJpdiA9IElCX0FDQ0VTU19MT0NBTF9XUklURSB8CisJCQkJSUJfQUNDRVNTX1JFTU9URV9XUklURSB8CisJCQkJSUJfQUNDRVNTX1JFTU9URV9SRUFEOworCQlnb3RvIHJlZ2lzdGVyX3NldHVwOwogI2VuZGlmCi0JCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTX0FTWU5DOgotCQljYXNlIFJQQ1JETUFfTUVNV0lORE9XUzoKLQkJCW1lbV9wcml2IHw9IElCX0FDQ0VTU19NV19CSU5EOworCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTX0FTWU5DOgorCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTOgorCQltZW1fcHJpdiA9IElCX0FDQ0VTU19MT0NBTF9XUklURSB8CisJCQkJSUJfQUNDRVNTX01XX0JJTkQ7CisJCWdvdG8gcmVnaXN0ZXJfc2V0dXA7CisJY2FzZSBSUENSRE1BX01USENBRk1SOgorCQlpZiAoaWEtPnJpX2hhdmVfZG1hX2xrZXkpCiAJCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9CisJCW1lbV9wcml2ID0gSUJfQUNDRVNTX0xPQ0FMX1dSSVRFOworCXJlZ2lzdGVyX3NldHVwOgogCQlpYS0+cmlfYmluZF9tZW0gPSBpYl9nZXRfZG1hX21yKGlhLT5yaV9wZCwgbWVtX3ByaXYpOwogCQlpZiAoSVNfRVJSKGlhLT5yaV9iaW5kX21lbSkpIHsKIAkJCXByaW50ayhLRVJOX0FMRVJUICIlczogaWJfZ2V0X2RtYV9tciBmb3IgIgpAQCAtNDc1LDcgKzU3MSwxNSBAQAogCQkJbWVtcmVnID0gUlBDUkRNQV9SRUdJU1RFUjsKIAkJCWlhLT5yaV9iaW5kX21lbSA9IE5VTEw7CiAJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBtZW1vcnkgcmVnaXN0cmF0aW9uIG1vZGUgJWRcbiIsCisJCQkJX19mdW5jX18sIG1lbXJlZyk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXQyOwogCX0KKwlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBtZW1vcnkgcmVnaXN0cmF0aW9uIHN0cmF0ZWd5IGlzICVkXG4iLAorCQlfX2Z1bmNfXywgbWVtcmVnKTsKIAogCS8qIEVsc2Ugd2lsbCBkbyBtZW1vcnkgcmVnL2RlcmVnIGZvciBlYWNoIGNodW5rICovCiAJaWEtPnJpX21lbXJlZ19zdHJhdGVneSA9IG1lbXJlZzsKQEAgLTQ4Myw2ICs1ODcsNyBAQAogCXJldHVybiAwOwogb3V0MjoKIAlyZG1hX2Rlc3Ryb3lfaWQoaWEtPnJpX2lkKTsKKwlpYS0+cmlfaWQgPSBOVUxMOwogb3V0MToKIAlyZXR1cm4gcmM7CiB9CkBAIC01MDMsMTUgKzYwOCwxNyBAQAogCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBpYl9kZXJlZ19tciByZXR1cm5lZCAlaVxuIiwKIAkJCV9fZnVuY19fLCByYyk7CiAJfQotCWlmIChpYS0+cmlfaWQgIT0gTlVMTCAmJiAhSVNfRVJSKGlhLT5yaV9pZCkgJiYgaWEtPnJpX2lkLT5xcCkKLQkJcmRtYV9kZXN0cm95X3FwKGlhLT5yaV9pZCk7CisJaWYgKGlhLT5yaV9pZCAhPSBOVUxMICYmICFJU19FUlIoaWEtPnJpX2lkKSkgeworCQlpZiAoaWEtPnJpX2lkLT5xcCkKKwkJCXJkbWFfZGVzdHJveV9xcChpYS0+cmlfaWQpOworCQlyZG1hX2Rlc3Ryb3lfaWQoaWEtPnJpX2lkKTsKKwkJaWEtPnJpX2lkID0gTlVMTDsKKwl9CiAJaWYgKGlhLT5yaV9wZCAhPSBOVUxMICYmICFJU19FUlIoaWEtPnJpX3BkKSkgewogCQlyYyA9IGliX2RlYWxsb2NfcGQoaWEtPnJpX3BkKTsKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogaWJfZGVhbGxvY19wZCByZXR1cm5lZCAlaVxuIiwKIAkJCV9fZnVuY19fLCByYyk7CiAJfQotCWlmIChpYS0+cmlfaWQgIT0gTlVMTCAmJiAhSVNfRVJSKGlhLT5yaV9pZCkpCi0JCXJkbWFfZGVzdHJveV9pZChpYS0+cmlfaWQpOwogfQogCiAvKgpAQCAtNTQxLDYgKzY0OCwxMiBAQAogCWVwLT5yZXBfYXR0ci5zcnEgPSBOVUxMOwogCWVwLT5yZXBfYXR0ci5jYXAubWF4X3NlbmRfd3IgPSBjZGF0YS0+bWF4X3JlcXVlc3RzOwogCXN3aXRjaCAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSkgeworCWNhc2UgUlBDUkRNQV9GUk1SOgorCQkvKiBBZGQgcm9vbSBmb3IgZnJtciByZWdpc3RlciBhbmQgaW52YWxpZGF0ZSBXUnMgKi8KKwkJZXAtPnJlcF9hdHRyLmNhcC5tYXhfc2VuZF93ciAqPSAzOworCQlpZiAoZXAtPnJlcF9hdHRyLmNhcC5tYXhfc2VuZF93ciA+IGRldmF0dHIubWF4X3FwX3dyKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOwogCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTX0FTWU5DOgogCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTOgogCQkvKiBBZGQgcm9vbSBmb3IgbXdfYmluZHMrdW5iaW5kcyAtIG92ZXJraWxsISAqLwpAQCAtNjE3LDI5ICs3MzAsMTMgQEAKIAllcC0+cmVwX3JlbW90ZV9jbWEucHJpdmF0ZV9kYXRhX2xlbiA9IDA7CiAKIAkvKiBDbGllbnQgb2ZmZXJzIFJETUEgUmVhZCBidXQgZG9lcyBub3QgaW5pdGlhdGUgKi8KLQlzd2l0Y2ggKGlhLT5yaV9tZW1yZWdfc3RyYXRlZ3kpIHsKLQljYXNlIFJQQ1JETUFfQk9VTkNFQlVGRkVSUzoKLQkJZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXMgPSAwOwotCQlicmVhazsKLQljYXNlIFJQQ1JETUFfTVRIQ0FGTVI6Ci0JY2FzZSBSUENSRE1BX1JFR0lTVEVSOgotCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9IGNkYXRhLT5tYXhfcmVxdWVzdHMgKgotCQkJCShSUENSRE1BX01BWF9EQVRBX1NFR1MgLyA4KTsKLQkJYnJlYWs7Ci0JY2FzZSBSUENSRE1BX01FTVdJTkRPV1M6Ci0JY2FzZSBSUENSRE1BX01FTVdJTkRPV1NfQVNZTkM6Ci0jaWYgUlBDUkRNQV9QRVJTSVNURU5UX1JFR0lTVFJBVElPTgotCWNhc2UgUlBDUkRNQV9BTExQSFlTSUNBTDoKLSNlbmRpZgotCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9IGNkYXRhLT5tYXhfcmVxdWVzdHMgKgotCQkJCShSUENSRE1BX01BWF9EQVRBX1NFR1MgLyAyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCWlmIChlcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA+IGRldmF0dHIubWF4X3FwX3JkX2F0b20pCi0JCWVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID0gZGV2YXR0ci5tYXhfcXBfcmRfYXRvbTsKIAllcC0+cmVwX3JlbW90ZV9jbWEuaW5pdGlhdG9yX2RlcHRoID0gMDsKKwlpZiAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSA9PSBSUENSRE1BX0JPVU5DRUJVRkZFUlMpCisJCWVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID0gMDsKKwllbHNlIGlmIChkZXZhdHRyLm1heF9xcF9yZF9hdG9tID4gMzIpCS8qIGFyYml0cmFyeSBidXQgPD0gMjU1ICovCisJCWVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID0gMzI7CisJZWxzZQorCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9IGRldmF0dHIubWF4X3FwX3JkX2F0b207CiAKIAllcC0+cmVwX3JlbW90ZV9jbWEucmV0cnlfY291bnQgPSA3OwogCWVwLT5yZXBfcmVtb3RlX2NtYS5mbG93X2NvbnRyb2wgPSAwOwpAQCAtNjc5LDIxICs3NzYsMTYgQEAKIAkJaWYgKHJjKQogCQkJZHByaW50aygiUlBDOiAgICAgICAlczogcnBjcmRtYV9lcF9kaXNjb25uZWN0IgogCQkJCSIgcmV0dXJuZWQgJWlcbiIsIF9fZnVuY19fLCByYyk7CisJCXJkbWFfZGVzdHJveV9xcChpYS0+cmlfaWQpOworCQlpYS0+cmlfaWQtPnFwID0gTlVMTDsKIAl9CiAKLQllcC0+cmVwX2Z1bmMgPSBOVUxMOwotCiAJLyogcGFkZGluZyAtIGNvdWxkIGJlIGRvbmUgaW4gcnBjcmRtYV9idWZmZXJfZGVzdHJveS4uLiAqLwogCWlmIChlcC0+cmVwX3BhZF9tcikgewogCQlycGNyZG1hX2RlcmVnaXN0ZXJfaW50ZXJuYWwoaWEsIGVwLT5yZXBfcGFkX21yLCAmZXAtPnJlcF9wYWQpOwogCQllcC0+cmVwX3BhZF9tciA9IE5VTEw7CiAJfQogCi0JaWYgKGlhLT5yaV9pZC0+cXApIHsKLQkJcmRtYV9kZXN0cm95X3FwKGlhLT5yaV9pZCk7Ci0JCWlhLT5yaV9pZC0+cXAgPSBOVUxMOwotCX0KLQogCXJwY3JkbWFfY2xlYW5fY3EoZXAtPnJlcF9jcSk7CiAJcmMgPSBpYl9kZXN0cm95X2NxKGVwLT5yZXBfY3EpOwogCWlmIChyYykKQEAgLTcxMiw5ICs4MDQsOCBAQAogCXN0cnVjdCByZG1hX2NtX2lkICppZDsKIAlpbnQgcmMgPSAwOwogCWludCByZXRyeV9jb3VudCA9IDA7Ci0JaW50IHJlY29ubmVjdCA9IChlcC0+cmVwX2Nvbm5lY3RlZCAhPSAwKTsKIAotCWlmIChyZWNvbm5lY3QpIHsKKwlpZiAoZXAtPnJlcF9jb25uZWN0ZWQgIT0gMCkgewogCQlzdHJ1Y3QgcnBjcmRtYV94cHJ0ICp4cHJ0OwogcmV0cnk6CiAJCXJjID0gcnBjcmRtYV9lcF9kaXNjb25uZWN0KGVwLCBpYSk7CkBAIC03NDUsNiArODM2LDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJCS8qIEVORCBURU1QICovCisJCXJkbWFfZGVzdHJveV9xcChpYS0+cmlfaWQpOwogCQlyZG1hX2Rlc3Ryb3lfaWQoaWEtPnJpX2lkKTsKIAkJaWEtPnJpX2lkID0gaWQ7CiAJfQpAQCAtNzY5LDE0ICs4NjEsNiBAQAogCX0KIH0KIAotCS8qIFRoZW9yZXRpY2FsbHkgYSBjbGllbnQgaW5pdGlhdG9yX2RlcHRoID4gMCBpcyBub3QgbmVlZGVkLAotCSAqIGJ1dCBtYW55IHBlZXJzIGZhaWwgdG8gY29tcGxldGUgdGhlIGNvbm5lY3Rpb24gdW5sZXNzIHRoZXkKLQkgKiA9PSByZXNwb25kZXJfcmVzb3VyY2VzISAqLwotCWlmIChlcC0+cmVwX3JlbW90ZV9jbWEuaW5pdGlhdG9yX2RlcHRoICE9Ci0JCQkJZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXMpCi0JCWVwLT5yZXBfcmVtb3RlX2NtYS5pbml0aWF0b3JfZGVwdGggPQotCQkJZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXM7Ci0KIAllcC0+cmVwX2Nvbm5lY3RlZCA9IDA7CiAKIAlyYyA9IHJkbWFfY29ubmVjdChpYS0+cmlfaWQsICZlcC0+cmVwX3JlbW90ZV9jbWEpOwpAQCAtNzg2LDkgKzg3MCw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChyZWNvbm5lY3QpCi0JCXJldHVybiAwOwotCiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGVwLT5yZXBfY29ubmVjdF93YWl0LCBlcC0+cmVwX2Nvbm5lY3RlZCAhPSAwKTsKIAogCS8qCkBAIC04MDUsMTQgKzg4NiwxNiBAQAogCWlmIChlcC0+cmVwX2Nvbm5lY3RlZCA8PSAwKSB7CiAJCS8qIFNvbWV0aW1lcywgdGhlIG9ubHkgd2F5IHRvIHJlbGlhYmx5IGNvbm5lY3QgdG8gcmVtb3RlCiAJCSAqIENNcyBpcyB0byB1c2Ugc2FtZSBub256ZXJvIHZhbHVlcyBmb3IgT1JEIGFuZCBJUkQuICovCi0JCWVwLT5yZXBfcmVtb3RlX2NtYS5pbml0aWF0b3JfZGVwdGggPQotCQkJCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlczsKLQkJaWYgKGVwLT5yZXBfcmVtb3RlX2NtYS5pbml0aWF0b3JfZGVwdGggPT0gMCkKLQkJCSsrZXAtPnJlcF9yZW1vdGVfY21hLmluaXRpYXRvcl9kZXB0aDsKLQkJaWYgKGVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID09IDApCi0JCQkrK2VwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzOwotCQlpZiAocmV0cnlfY291bnQrKyA9PSAwKQorCQlpZiAocmV0cnlfY291bnQrKyA8PSBSRE1BX0NPTk5FQ1RfUkVUUllfTUFYICsgMSAmJgorCQkgICAgKGVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID09IDAgfHwKKwkJICAgICBlcC0+cmVwX3JlbW90ZV9jbWEuaW5pdGlhdG9yX2RlcHRoICE9CisJCQkJZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXMpKSB7CisJCQlpZiAoZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXMgPT0gMCkKKwkJCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9IDE7CisJCQllcC0+cmVwX3JlbW90ZV9jbWEuaW5pdGlhdG9yX2RlcHRoID0KKwkJCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlczsKIAkJCWdvdG8gcmV0cnk7CisJCX0KIAkJcmMgPSBlcC0+cmVwX2Nvbm5lY3RlZDsKIAl9IGVsc2UgewogCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBjb25uZWN0ZWRcbiIsIF9fZnVuY19fKTsKQEAgLTg2Myw2ICs5NDYsNyBAQAogCWNoYXIgKnA7CiAJc2l6ZV90IGxlbjsKIAlpbnQgaSwgcmM7CisJc3RydWN0IHJwY3JkbWFfbXcgKnI7CiAKIAlidWYtPnJiX21heF9yZXF1ZXN0cyA9IGNkYXRhLT5tYXhfcmVxdWVzdHM7CiAJc3Bpbl9sb2NrX2luaXQoJmJ1Zi0+cmJfbG9jayk7CkBAIC04NzMsNyArOTU3LDcgQEAKIAkgKiAgIDIuICBhcnJheXMgb2Ygc3RydWN0IHJwY3JkbWFfcmVxIHRvIGZpbGwgaW4gcG9pbnRlcnMKIAkgKiAgIDMuICBhcnJheSBvZiBzdHJ1Y3QgcnBjcmRtYV9yZXAgZm9yIHJlcGxpZXMKIAkgKiAgIDQuICBwYWRkaW5nLCBpZiBhbnkKLQkgKiAgIDUuICBtdydzLCBpZiBhbnkKKwkgKiAgIDUuICBtdydzLCBmbXIncyBvciBmcm1yJ3MsIGlmIGFueQogCSAqIFNlbmQvcmVjdiBidWZmZXJzIGluIHJlcS9yZXAgbmVlZCB0byBiZSByZWdpc3RlcmVkCiAJICovCiAKQEAgLTg4MSw2ICs5NjUsMTAgQEAKIAkJKHNpemVvZihzdHJ1Y3QgcnBjcmRtYV9yZXEgKikgKyBzaXplb2Yoc3RydWN0IHJwY3JkbWFfcmVwICopKTsKIAlsZW4gKz0gY2RhdGEtPnBhZGRpbmc7CiAJc3dpdGNoIChpYS0+cmlfbWVtcmVnX3N0cmF0ZWd5KSB7CisJY2FzZSBSUENSRE1BX0ZSTVI6CisJCWxlbiArPSBidWYtPnJiX21heF9yZXF1ZXN0cyAqIFJQQ1JETUFfTUFYX1NFR1MgKgorCQkJCXNpemVvZihzdHJ1Y3QgcnBjcmRtYV9tdyk7CisJCWJyZWFrOwogCWNhc2UgUlBDUkRNQV9NVEhDQUZNUjoKIAkJLyogVEJEIHdlIGFyZSBwZXJoYXBzIG92ZXJhbGxvY2F0aW5nIGhlcmUgKi8KIAkJbGVuICs9IChidWYtPnJiX21heF9yZXF1ZXN0cyArIDEpICogUlBDUkRNQV9NQVhfU0VHUyAqCkBAIC05MjcsMTUgKzEwMTUsMzcgQEAKIAkgKiBhbmQgYWxzbyByZWR1Y2UgdW5iaW5kLXRvLWJpbmQgY29sbGlzaW9uLgogCSAqLwogCUlOSVRfTElTVF9IRUFEKCZidWYtPnJiX213cyk7CisJciA9IChzdHJ1Y3QgcnBjcmRtYV9tdyAqKXA7CiAJc3dpdGNoIChpYS0+cmlfbWVtcmVnX3N0cmF0ZWd5KSB7CisJY2FzZSBSUENSRE1BX0ZSTVI6CisJCWZvciAoaSA9IGJ1Zi0+cmJfbWF4X3JlcXVlc3RzICogUlBDUkRNQV9NQVhfU0VHUzsgaTsgaS0tKSB7CisJCQlyLT5yLmZybXIuZnJfbXIgPSBpYl9hbGxvY19mYXN0X3JlZ19tcihpYS0+cmlfcGQsCisJCQkJCQkJIFJQQ1JETUFfTUFYX1NFR1MpOworCQkJaWYgKElTX0VSUihyLT5yLmZybXIuZnJfbXIpKSB7CisJCQkJcmMgPSBQVFJfRVJSKHItPnIuZnJtci5mcl9tcik7CisJCQkJZHByaW50aygiUlBDOiAgICAgICAlczogaWJfYWxsb2NfZmFzdF9yZWdfbXIiCisJCQkJCSIgZmFpbGVkICVpXG4iLCBfX2Z1bmNfXywgcmMpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJci0+ci5mcm1yLmZyX3BnbCA9CisJCQkJaWJfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0KGlhLT5yaV9pZC0+ZGV2aWNlLAorCQkJCQkJCSAgICBSUENSRE1BX01BWF9TRUdTKTsKKwkJCWlmIChJU19FUlIoci0+ci5mcm1yLmZyX3BnbCkpIHsKKwkJCQlyYyA9IFBUUl9FUlIoci0+ci5mcm1yLmZyX3BnbCk7CisJCQkJZHByaW50aygiUlBDOiAgICAgICAlczogIgorCQkJCQkiaWJfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0ICIKKwkJCQkJImZhaWxlZCAlaVxuIiwgX19mdW5jX18sIHJjKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWxpc3RfYWRkKCZyLT5td19saXN0LCAmYnVmLT5yYl9td3MpOworCQkJKytyOworCQl9CisJCWJyZWFrOwogCWNhc2UgUlBDUkRNQV9NVEhDQUZNUjoKLQkJewotCQlzdHJ1Y3QgcnBjcmRtYV9tdyAqciA9IChzdHJ1Y3QgcnBjcmRtYV9tdyAqKXA7Ci0JCXN0cnVjdCBpYl9mbXJfYXR0ciBmYSA9IHsKLQkJCVJQQ1JETUFfTUFYX0RBVEFfU0VHUywgMSwgUEFHRV9TSElGVAotCQl9OwogCQkvKiBUQkQgd2UgYXJlIHBlcmhhcHMgb3ZlcmFsbG9jYXRpbmcgaGVyZSAqLwogCQlmb3IgKGkgPSAoYnVmLT5yYl9tYXhfcmVxdWVzdHMrMSkgKiBSUENSRE1BX01BWF9TRUdTOyBpOyBpLS0pIHsKKwkJCXN0YXRpYyBzdHJ1Y3QgaWJfZm1yX2F0dHIgZmEgPQorCQkJCXsgUlBDUkRNQV9NQVhfREFUQV9TRUdTLCAxLCBQQUdFX1NISUZUIH07CiAJCQlyLT5yLmZtciA9IGliX2FsbG9jX2ZtcihpYS0+cmlfcGQsCiAJCQkJSUJfQUNDRVNTX1JFTU9URV9XUklURSB8IElCX0FDQ0VTU19SRU1PVEVfUkVBRCwKIAkJCQkmZmEpOwpAQCAtOTQ4LDEyICsxMDU4LDkgQEAKIAkJCWxpc3RfYWRkKCZyLT5td19saXN0LCAmYnVmLT5yYl9td3MpOwogCQkJKytyOwogCQl9Ci0JCX0KIAkJYnJlYWs7CiAJY2FzZSBSUENSRE1BX01FTVdJTkRPV1NfQVNZTkM6CiAJY2FzZSBSUENSRE1BX01FTVdJTkRPV1M6Ci0JCXsKLQkJc3RydWN0IHJwY3JkbWFfbXcgKnIgPSAoc3RydWN0IHJwY3JkbWFfbXcgKilwOwogCQkvKiBBbGxvY2F0ZSBvbmUgZXh0cmEgcmVxdWVzdCdzIHdvcnRoLCBmb3IgZnVsbCBjeWNsaW5nICovCiAJCWZvciAoaSA9IChidWYtPnJiX21heF9yZXF1ZXN0cysxKSAqIFJQQ1JETUFfTUFYX1NFR1M7IGk7IGktLSkgewogCQkJci0+ci5tdyA9IGliX2FsbG9jX213KGlhLT5yaV9wZCk7CkBAIC05NjYsNyArMTA3Myw2IEBACiAJCQlsaXN0X2FkZCgmci0+bXdfbGlzdCwgJmJ1Zi0+cmJfbXdzKTsKIAkJCSsrcjsKIAkJfQotCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTA0Niw2ICsxMTUyLDcgQEAKIHsKIAlpbnQgcmMsIGk7CiAJc3RydWN0IHJwY3JkbWFfaWEgKmlhID0gcmRtYWJfdG9faWEoYnVmKTsKKwlzdHJ1Y3QgcnBjcmRtYV9tdyAqcjsKIAogCS8qIGNsZWFuIHVwIGluIHJldmVyc2Ugb3JkZXIgZnJvbSBjcmVhdGUKIAkgKiAgIDEuICByZWN2IG1yIG1lbW9yeSAobXIgZnJlZSwgdGhlbiBrZnJlZSkKQEAgLTEwNjUsMTEgKzExNzIsMTkgQEAKIAkJfQogCQlpZiAoYnVmLT5yYl9zZW5kX2J1ZnMgJiYgYnVmLT5yYl9zZW5kX2J1ZnNbaV0pIHsKIAkJCXdoaWxlICghbGlzdF9lbXB0eSgmYnVmLT5yYl9td3MpKSB7Ci0JCQkJc3RydWN0IHJwY3JkbWFfbXcgKnI7CiAJCQkJciA9IGxpc3RfZW50cnkoYnVmLT5yYl9td3MubmV4dCwKIAkJCQkJc3RydWN0IHJwY3JkbWFfbXcsIG13X2xpc3QpOwogCQkJCWxpc3RfZGVsKCZyLT5td19saXN0KTsKIAkJCQlzd2l0Y2ggKGlhLT5yaV9tZW1yZWdfc3RyYXRlZ3kpIHsKKwkJCQljYXNlIFJQQ1JETUFfRlJNUjoKKwkJCQkJcmMgPSBpYl9kZXJlZ19tcihyLT5yLmZybXIuZnJfbXIpOworCQkJCQlpZiAocmMpCisJCQkJCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiIKKwkJCQkJCQkiIGliX2RlcmVnX21yIgorCQkJCQkJCSIgZmFpbGVkICVpXG4iLAorCQkJCQkJCV9fZnVuY19fLCByYyk7CisJCQkJCWliX2ZyZWVfZmFzdF9yZWdfcGFnZV9saXN0KHItPnIuZnJtci5mcl9wZ2wpOworCQkJCQlicmVhazsKIAkJCQljYXNlIFJQQ1JETUFfTVRIQ0FGTVI6CiAJCQkJCXJjID0gaWJfZGVhbGxvY19mbXIoci0+ci5mbXIpOwogCQkJCQlpZiAocmMpCkBAIC0xMTE1LDYgKzEyMzAsOCBAQAogewogCXN0cnVjdCBycGNyZG1hX3JlcSAqcmVxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJc3RydWN0IHJwY3JkbWFfbXcgKnI7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnVmZmVycy0+cmJfbG9jaywgZmxhZ3MpOwogCWlmIChidWZmZXJzLT5yYl9zZW5kX2luZGV4ID09IGJ1ZmZlcnMtPnJiX21heF9yZXF1ZXN0cykgewpAQCAtMTEzNSw5ICsxMjUyLDggQEAKIAl9CiAJYnVmZmVycy0+cmJfc2VuZF9idWZzW2J1ZmZlcnMtPnJiX3NlbmRfaW5kZXgrK10gPSBOVUxMOwogCWlmICghbGlzdF9lbXB0eSgmYnVmZmVycy0+cmJfbXdzKSkgewotCQlpbnQgaSA9IFJQQ1JETUFfTUFYX1NFR1MgLSAxOworCQlpID0gUlBDUkRNQV9NQVhfU0VHUyAtIDE7CiAJCWRvIHsKLQkJCXN0cnVjdCBycGNyZG1hX213ICpyOwogCQkJciA9IGxpc3RfZW50cnkoYnVmZmVycy0+cmJfbXdzLm5leHQsCiAJCQkJCXN0cnVjdCBycGNyZG1hX213LCBtd19saXN0KTsKIAkJCWxpc3RfZGVsKCZyLT5td19saXN0KTsKQEAgLTExNzEsNiArMTI4Nyw3IEBACiAJCXJlcS0+cmxfcmVwbHkgPSBOVUxMOwogCX0KIAlzd2l0Y2ggKGlhLT5yaV9tZW1yZWdfc3RyYXRlZ3kpIHsKKwljYXNlIFJQQ1JETUFfRlJNUjoKIAljYXNlIFJQQ1JETUFfTVRIQ0FGTVI6CiAJY2FzZSBSUENSRE1BX01FTVdJTkRPV1NfQVNZTkM6CiAJY2FzZSBSUENSRE1BX01FTVdJTkRPV1M6CkBAIC0xMjUyLDcgKzEzNjksMTEgQEAKIAkJCXZhLCBsZW4sIERNQV9CSURJUkVDVElPTkFMKTsKIAlpb3YtPmxlbmd0aCA9IGxlbjsKIAotCWlmIChpYS0+cmlfYmluZF9tZW0gIT0gTlVMTCkgeworCWlmIChpYS0+cmlfaGF2ZV9kbWFfbGtleSkgeworCQkqbXJwID0gTlVMTDsKKwkJaW92LT5sa2V5ID0gaWEtPnJpX2RtYV9sa2V5OworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGlhLT5yaV9iaW5kX21lbSAhPSBOVUxMKSB7CiAJCSptcnAgPSBOVUxMOwogCQlpb3YtPmxrZXkgPSBpYS0+cmlfYmluZF9tZW0tPmxrZXk7CiAJCXJldHVybiAwOwpAQCAtMTMyOSwxNSArMTQ1MCwyOTIgQEAKIAkJCQlzZWctPm1yX2RtYSwgc2VnLT5tcl9kbWFsZW4sIHNlZy0+bXJfZGlyKTsKIH0KIAorc3RhdGljIGludAorcnBjcmRtYV9yZWdpc3Rlcl9mcm1yX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAorCQkJaW50ICpuc2VncywgaW50IHdyaXRpbmcsIHN0cnVjdCBycGNyZG1hX2lhICppYSwKKwkJCXN0cnVjdCBycGNyZG1hX3hwcnQgKnJfeHBydCkKK3sKKwlzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZzEgPSBzZWc7CisJc3RydWN0IGliX3NlbmRfd3IgZnJtcl93ciwgKmJhZF93cjsKKwl1OCBrZXk7CisJaW50IGxlbiwgcGFnZW9mZjsKKwlpbnQgaSwgcmM7CisKKwlwYWdlb2ZmID0gb2Zmc2V0X2luX3BhZ2Uoc2VnMS0+bXJfb2Zmc2V0KTsKKwlzZWcxLT5tcl9vZmZzZXQgLT0gcGFnZW9mZjsJLyogc3RhcnQgb2YgcGFnZSAqLworCXNlZzEtPm1yX2xlbiArPSBwYWdlb2ZmOworCWxlbiA9IC1wYWdlb2ZmOworCWlmICgqbnNlZ3MgPiBSUENSRE1BX01BWF9EQVRBX1NFR1MpCisJCSpuc2VncyA9IFJQQ1JETUFfTUFYX0RBVEFfU0VHUzsKKwlmb3IgKGkgPSAwOyBpIDwgKm5zZWdzOykgeworCQlycGNyZG1hX21hcF9vbmUoaWEsIHNlZywgd3JpdGluZyk7CisJCXNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfcGdsLT5wYWdlX2xpc3RbaV0gPSBzZWctPm1yX2RtYTsKKwkJbGVuICs9IHNlZy0+bXJfbGVuOworCQkrK3NlZzsKKwkJKytpOworCQkvKiBDaGVjayBmb3IgaG9sZXMgKi8KKwkJaWYgKChpIDwgKm5zZWdzICYmIG9mZnNldF9pbl9wYWdlKHNlZy0+bXJfb2Zmc2V0KSkgfHwKKwkJICAgIG9mZnNldF9pbl9wYWdlKChzZWctMSktPm1yX29mZnNldCArIChzZWctMSktPm1yX2xlbikpCisJCQlicmVhazsKKwl9CisJZHByaW50aygiUlBDOiAgICAgICAlczogVXNpbmcgZnJtciAlcCB0byBtYXAgJWQgc2VnbWVudHNcbiIsCisJCV9fZnVuY19fLCBzZWcxLT5tcl9jaHVuay5ybF9tdywgaSk7CisKKwkvKiBCdW1wIHRoZSBrZXkgKi8KKwlrZXkgPSAodTgpKHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXItPnJrZXkgJiAweDAwMDAwMEZGKTsKKwlpYl91cGRhdGVfZmFzdF9yZWdfa2V5KHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXIsICsra2V5KTsKKworCS8qIFByZXBhcmUgRlJNUiBXUiAqLworCW1lbXNldCgmZnJtcl93ciwgMCwgc2l6ZW9mIGZybXJfd3IpOworCWZybXJfd3Iub3Bjb2RlID0gSUJfV1JfRkFTVF9SRUdfTVI7CisJZnJtcl93ci5zZW5kX2ZsYWdzID0gMDsJCQkvKiB1bnNpZ25hbGVkICovCisJZnJtcl93ci53ci5mYXN0X3JlZy5pb3ZhX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpc2VnMS0+bXJfZG1hOworCWZybXJfd3Iud3IuZmFzdF9yZWcucGFnZV9saXN0ID0gc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZnJtci5mcl9wZ2w7CisJZnJtcl93ci53ci5mYXN0X3JlZy5wYWdlX2xpc3RfbGVuID0gaTsKKwlmcm1yX3dyLndyLmZhc3RfcmVnLnBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUOworCWZybXJfd3Iud3IuZmFzdF9yZWcubGVuZ3RoID0gaSA8PCBQQUdFX1NISUZUOworCWZybXJfd3Iud3IuZmFzdF9yZWcuYWNjZXNzX2ZsYWdzID0gKHdyaXRpbmcgPworCQkJCUlCX0FDQ0VTU19SRU1PVEVfV1JJVEUgOiBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOworCWZybXJfd3Iud3IuZmFzdF9yZWcucmtleSA9IHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXItPnJrZXk7CisJREVDUl9DUUNPVU5UKCZyX3hwcnQtPnJ4X2VwKTsKKworCXJjID0gaWJfcG9zdF9zZW5kKGlhLT5yaV9pZC0+cXAsICZmcm1yX3dyLCAmYmFkX3dyKTsKKworCWlmIChyYykgeworCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBmYWlsZWQgaWJfcG9zdF9zZW5kIGZvciByZWdpc3RlciwiCisJCQkiIHN0YXR1cyAlaVxuIiwgX19mdW5jX18sIHJjKTsKKwkJd2hpbGUgKGktLSkKKwkJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCAtLXNlZyk7CisJfSBlbHNlIHsKKwkJc2VnMS0+bXJfcmtleSA9IHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXItPnJrZXk7CisJCXNlZzEtPm1yX2Jhc2UgPSBzZWcxLT5tcl9kbWEgKyBwYWdlb2ZmOworCQlzZWcxLT5tcl9uc2VncyA9IGk7CisJCXNlZzEtPm1yX2xlbiA9IGxlbjsKKwl9CisJKm5zZWdzID0gaTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK3JwY3JkbWFfZGVyZWdpc3Rlcl9mcm1yX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAorCQkJc3RydWN0IHJwY3JkbWFfaWEgKmlhLCBzdHJ1Y3QgcnBjcmRtYV94cHJ0ICpyX3hwcnQpCit7CisJc3RydWN0IHJwY3JkbWFfbXJfc2VnICpzZWcxID0gc2VnOworCXN0cnVjdCBpYl9zZW5kX3dyIGludmFsaWRhdGVfd3IsICpiYWRfd3I7CisJaW50IHJjOworCisJd2hpbGUgKHNlZzEtPm1yX25zZWdzLS0pCisJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCBzZWcrKyk7CisKKwltZW1zZXQoJmludmFsaWRhdGVfd3IsIDAsIHNpemVvZiBpbnZhbGlkYXRlX3dyKTsKKwlpbnZhbGlkYXRlX3dyLm9wY29kZSA9IElCX1dSX0xPQ0FMX0lOVjsKKwlpbnZhbGlkYXRlX3dyLnNlbmRfZmxhZ3MgPSAwOwkJCS8qIHVuc2lnbmFsZWQgKi8KKwlpbnZhbGlkYXRlX3dyLmV4LmludmFsaWRhdGVfcmtleSA9IHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXItPnJrZXk7CisJREVDUl9DUUNPVU5UKCZyX3hwcnQtPnJ4X2VwKTsKKworCXJjID0gaWJfcG9zdF9zZW5kKGlhLT5yaV9pZC0+cXAsICZpbnZhbGlkYXRlX3dyLCAmYmFkX3dyKTsKKwlpZiAocmMpCisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9wb3N0X3NlbmQgZm9yIGludmFsaWRhdGUsIgorCQkJIiBzdGF0dXMgJWlcbiIsIF9fZnVuY19fLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX3JlZ2lzdGVyX2Ztcl9leHRlcm5hbChzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZywKKwkJCWludCAqbnNlZ3MsIGludCB3cml0aW5nLCBzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEpCit7CisJc3RydWN0IHJwY3JkbWFfbXJfc2VnICpzZWcxID0gc2VnOworCXU2NCBwaHlzYWRkcnNbUlBDUkRNQV9NQVhfREFUQV9TRUdTXTsKKwlpbnQgbGVuLCBwYWdlb2ZmLCBpLCByYzsKKworCXBhZ2VvZmYgPSBvZmZzZXRfaW5fcGFnZShzZWcxLT5tcl9vZmZzZXQpOworCXNlZzEtPm1yX29mZnNldCAtPSBwYWdlb2ZmOwkvKiBzdGFydCBvZiBwYWdlICovCisJc2VnMS0+bXJfbGVuICs9IHBhZ2VvZmY7CisJbGVuID0gLXBhZ2VvZmY7CisJaWYgKCpuc2VncyA+IFJQQ1JETUFfTUFYX0RBVEFfU0VHUykKKwkJKm5zZWdzID0gUlBDUkRNQV9NQVhfREFUQV9TRUdTOworCWZvciAoaSA9IDA7IGkgPCAqbnNlZ3M7KSB7CisJCXJwY3JkbWFfbWFwX29uZShpYSwgc2VnLCB3cml0aW5nKTsKKwkJcGh5c2FkZHJzW2ldID0gc2VnLT5tcl9kbWE7CisJCWxlbiArPSBzZWctPm1yX2xlbjsKKwkJKytzZWc7CisJCSsraTsKKwkJLyogQ2hlY2sgZm9yIGhvbGVzICovCisJCWlmICgoaSA8ICpuc2VncyAmJiBvZmZzZXRfaW5fcGFnZShzZWctPm1yX29mZnNldCkpIHx8CisJCSAgICBvZmZzZXRfaW5fcGFnZSgoc2VnLTEpLT5tcl9vZmZzZXQgKyAoc2VnLTEpLT5tcl9sZW4pKQorCQkJYnJlYWs7CisJfQorCXJjID0gaWJfbWFwX3BoeXNfZm1yKHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZtciwKKwkJCQlwaHlzYWRkcnMsIGksIHNlZzEtPm1yX2RtYSk7CisJaWYgKHJjKSB7CisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9tYXBfcGh5c19mbXIgIgorCQkJIiV1QDB4JWxseCslaSAoJWQpLi4uIHN0YXR1cyAlaVxuIiwgX19mdW5jX18sCisJCQlsZW4sICh1bnNpZ25lZCBsb25nIGxvbmcpc2VnMS0+bXJfZG1hLAorCQkJcGFnZW9mZiwgaSwgcmMpOworCQl3aGlsZSAoaS0tKQorCQkJcnBjcmRtYV91bm1hcF9vbmUoaWEsIC0tc2VnKTsKKwl9IGVsc2UgeworCQlzZWcxLT5tcl9ya2V5ID0gc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZm1yLT5ya2V5OworCQlzZWcxLT5tcl9iYXNlID0gc2VnMS0+bXJfZG1hICsgcGFnZW9mZjsKKwkJc2VnMS0+bXJfbnNlZ3MgPSBpOworCQlzZWcxLT5tcl9sZW4gPSBsZW47CisJfQorCSpuc2VncyA9IGk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX2RlcmVnaXN0ZXJfZm1yX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAorCQkJc3RydWN0IHJwY3JkbWFfaWEgKmlhKQoreworCXN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnMSA9IHNlZzsKKwlMSVNUX0hFQUQobCk7CisJaW50IHJjOworCisJbGlzdF9hZGQoJnNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZtci0+bGlzdCwgJmwpOworCXJjID0gaWJfdW5tYXBfZm1yKCZsKTsKKwl3aGlsZSAoc2VnMS0+bXJfbnNlZ3MtLSkKKwkJcnBjcmRtYV91bm1hcF9vbmUoaWEsIHNlZysrKTsKKwlpZiAocmMpCisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl91bm1hcF9mbXIsIgorCQkJIiBzdGF0dXMgJWlcbiIsIF9fZnVuY19fLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX3JlZ2lzdGVyX21lbXdpbl9leHRlcm5hbChzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZywKKwkJCWludCAqbnNlZ3MsIGludCB3cml0aW5nLCBzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEsCisJCQlzdHJ1Y3QgcnBjcmRtYV94cHJ0ICpyX3hwcnQpCit7CisJaW50IG1lbV9wcml2ID0gKHdyaXRpbmcgPyBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFIDoKKwkJCQkgIElCX0FDQ0VTU19SRU1PVEVfUkVBRCk7CisJc3RydWN0IGliX213X2JpbmQgcGFyYW07CisJaW50IHJjOworCisJKm5zZWdzID0gMTsKKwlycGNyZG1hX21hcF9vbmUoaWEsIHNlZywgd3JpdGluZyk7CisJcGFyYW0ubXIgPSBpYS0+cmlfYmluZF9tZW07CisJcGFyYW0ud3JfaWQgPSAwVUxMOwkvKiBubyBzZW5kIGNvb2tpZSAqLworCXBhcmFtLmFkZHIgPSBzZWctPm1yX2RtYTsKKwlwYXJhbS5sZW5ndGggPSBzZWctPm1yX2xlbjsKKwlwYXJhbS5zZW5kX2ZsYWdzID0gMDsKKwlwYXJhbS5td19hY2Nlc3NfZmxhZ3MgPSBtZW1fcHJpdjsKKworCURFQ1JfQ1FDT1VOVCgmcl94cHJ0LT5yeF9lcCk7CisJcmMgPSBpYl9iaW5kX213KGlhLT5yaV9pZC0+cXAsIHNlZy0+bXJfY2h1bmsucmxfbXctPnIubXcsICZwYXJhbSk7CisJaWYgKHJjKSB7CisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9iaW5kX213ICIKKwkJCSIldUAweCVsbHggc3RhdHVzICVpXG4iLAorCQkJX19mdW5jX18sIHNlZy0+bXJfbGVuLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzZWctPm1yX2RtYSwgcmMpOworCQlycGNyZG1hX3VubWFwX29uZShpYSwgc2VnKTsKKwl9IGVsc2UgeworCQlzZWctPm1yX3JrZXkgPSBzZWctPm1yX2NodW5rLnJsX213LT5yLm13LT5ya2V5OworCQlzZWctPm1yX2Jhc2UgPSBwYXJhbS5hZGRyOworCQlzZWctPm1yX25zZWdzID0gMTsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX2RlcmVnaXN0ZXJfbWVtd2luX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAorCQkJc3RydWN0IHJwY3JkbWFfaWEgKmlhLAorCQkJc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0LCB2b2lkICoqcikKK3sKKwlzdHJ1Y3QgaWJfbXdfYmluZCBwYXJhbTsKKwlMSVNUX0hFQUQobCk7CisJaW50IHJjOworCisJQlVHX09OKHNlZy0+bXJfbnNlZ3MgIT0gMSk7CisJcGFyYW0ubXIgPSBpYS0+cmlfYmluZF9tZW07CisJcGFyYW0uYWRkciA9IDBVTEw7CS8qIHVuYmluZCAqLworCXBhcmFtLmxlbmd0aCA9IDA7CisJcGFyYW0ubXdfYWNjZXNzX2ZsYWdzID0gMDsKKwlpZiAoKnIpIHsKKwkJcGFyYW0ud3JfaWQgPSAodTY0KSAodW5zaWduZWQgbG9uZykgKnI7CisJCXBhcmFtLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCQlJTklUX0NRQ09VTlQoJnJfeHBydC0+cnhfZXApOworCX0gZWxzZSB7CisJCXBhcmFtLndyX2lkID0gMFVMTDsKKwkJcGFyYW0uc2VuZF9mbGFncyA9IDA7CisJCURFQ1JfQ1FDT1VOVCgmcl94cHJ0LT5yeF9lcCk7CisJfQorCXJjID0gaWJfYmluZF9tdyhpYS0+cmlfaWQtPnFwLCBzZWctPm1yX2NodW5rLnJsX213LT5yLm13LCAmcGFyYW0pOworCXJwY3JkbWFfdW5tYXBfb25lKGlhLCBzZWcpOworCWlmIChyYykKKwkJZHByaW50aygiUlBDOiAgICAgICAlczogZmFpbGVkIGliXyh1biliaW5kX213LCIKKwkJCSIgc3RhdHVzICVpXG4iLCBfX2Z1bmNfXywgcmMpOworCWVsc2UKKwkJKnIgPSBOVUxMOwkvKiB3aWxsIHVwY2FsbCBvbiBjb21wbGV0aW9uICovCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX3JlZ2lzdGVyX2RlZmF1bHRfZXh0ZXJuYWwoc3RydWN0IHJwY3JkbWFfbXJfc2VnICpzZWcsCisJCQlpbnQgKm5zZWdzLCBpbnQgd3JpdGluZywgc3RydWN0IHJwY3JkbWFfaWEgKmlhKQoreworCWludCBtZW1fcHJpdiA9ICh3cml0aW5nID8gSUJfQUNDRVNTX1JFTU9URV9XUklURSA6CisJCQkJICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOworCXN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnMSA9IHNlZzsKKwlzdHJ1Y3QgaWJfcGh5c19idWYgaXBiW1JQQ1JETUFfTUFYX0RBVEFfU0VHU107CisJaW50IGxlbiwgaSwgcmMgPSAwOworCisJaWYgKCpuc2VncyA+IFJQQ1JETUFfTUFYX0RBVEFfU0VHUykKKwkJKm5zZWdzID0gUlBDUkRNQV9NQVhfREFUQV9TRUdTOworCWZvciAobGVuID0gMCwgaSA9IDA7IGkgPCAqbnNlZ3M7KSB7CisJCXJwY3JkbWFfbWFwX29uZShpYSwgc2VnLCB3cml0aW5nKTsKKwkJaXBiW2ldLmFkZHIgPSBzZWctPm1yX2RtYTsKKwkJaXBiW2ldLnNpemUgPSBzZWctPm1yX2xlbjsKKwkJbGVuICs9IHNlZy0+bXJfbGVuOworCQkrK3NlZzsKKwkJKytpOworCQkvKiBDaGVjayBmb3IgaG9sZXMgKi8KKwkJaWYgKChpIDwgKm5zZWdzICYmIG9mZnNldF9pbl9wYWdlKHNlZy0+bXJfb2Zmc2V0KSkgfHwKKwkJICAgIG9mZnNldF9pbl9wYWdlKChzZWctMSktPm1yX29mZnNldCsoc2VnLTEpLT5tcl9sZW4pKQorCQkJYnJlYWs7CisJfQorCXNlZzEtPm1yX2Jhc2UgPSBzZWcxLT5tcl9kbWE7CisJc2VnMS0+bXJfY2h1bmsucmxfbXIgPSBpYl9yZWdfcGh5c19tcihpYS0+cmlfcGQsCisJCQkJaXBiLCBpLCBtZW1fcHJpdiwgJnNlZzEtPm1yX2Jhc2UpOworCWlmIChJU19FUlIoc2VnMS0+bXJfY2h1bmsucmxfbXIpKSB7CisJCXJjID0gUFRSX0VSUihzZWcxLT5tcl9jaHVuay5ybF9tcik7CisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9yZWdfcGh5c19tciAiCisJCQkiJXVAMHglbGx4ICglZCkuLi4gc3RhdHVzICVpXG4iLAorCQkJX19mdW5jX18sIGxlbiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2VnMS0+bXJfZG1hLCBpLCByYyk7CisJCXdoaWxlIChpLS0pCisJCQlycGNyZG1hX3VubWFwX29uZShpYSwgLS1zZWcpOworCX0gZWxzZSB7CisJCXNlZzEtPm1yX3JrZXkgPSBzZWcxLT5tcl9jaHVuay5ybF9tci0+cmtleTsKKwkJc2VnMS0+bXJfbnNlZ3MgPSBpOworCQlzZWcxLT5tcl9sZW4gPSBsZW47CisJfQorCSpuc2VncyA9IGk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX2RlcmVnaXN0ZXJfZGVmYXVsdF9leHRlcm5hbChzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZywKKwkJCXN0cnVjdCBycGNyZG1hX2lhICppYSkKK3sKKwlzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZzEgPSBzZWc7CisJaW50IHJjOworCisJcmMgPSBpYl9kZXJlZ19tcihzZWcxLT5tcl9jaHVuay5ybF9tcik7CisJc2VnMS0+bXJfY2h1bmsucmxfbXIgPSBOVUxMOworCXdoaWxlIChzZWcxLT5tcl9uc2Vncy0tKQorCQlycGNyZG1hX3VubWFwX29uZShpYSwgc2VnKyspOworCWlmIChyYykKKwkJZHByaW50aygiUlBDOiAgICAgICAlczogZmFpbGVkIGliX2RlcmVnX21yLCIKKwkJCSIgc3RhdHVzICVpXG4iLCBfX2Z1bmNfXywgcmMpOworCXJldHVybiByYzsKK30KKwogaW50CiBycGNyZG1hX3JlZ2lzdGVyX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAogCQkJaW50IG5zZWdzLCBpbnQgd3JpdGluZywgc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0KQogewogCXN0cnVjdCBycGNyZG1hX2lhICppYSA9ICZyX3hwcnQtPnJ4X2lhOwotCWludCBtZW1fcHJpdiA9ICh3cml0aW5nID8gSUJfQUNDRVNTX1JFTU9URV9XUklURSA6Ci0JCQkJICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOwotCXN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnMSA9IHNlZzsKLQlpbnQgaTsKIAlpbnQgcmMgPSAwOwogCiAJc3dpdGNoIChpYS0+cmlfbWVtcmVnX3N0cmF0ZWd5KSB7CkBAIC0xMzUyLDExNCArMTc1MCwyNSBAQAogCQlicmVhazsKICNlbmRpZgogCi0JLyogUmVnaXN0cmF0aW9uIHVzaW5nIGZhc3QgbWVtb3J5IHJlZ2lzdHJhdGlvbiAqLworCS8qIFJlZ2lzdHJhdGlvbiB1c2luZyBmcm1yIHJlZ2lzdHJhdGlvbiAqLworCWNhc2UgUlBDUkRNQV9GUk1SOgorCQlyYyA9IHJwY3JkbWFfcmVnaXN0ZXJfZnJtcl9leHRlcm5hbChzZWcsICZuc2Vncywgd3JpdGluZywgaWEsIHJfeHBydCk7CisJCWJyZWFrOworCisJLyogUmVnaXN0cmF0aW9uIHVzaW5nIGZtciBtZW1vcnkgcmVnaXN0cmF0aW9uICovCiAJY2FzZSBSUENSRE1BX01USENBRk1SOgotCQl7Ci0JCXU2NCBwaHlzYWRkcnNbUlBDUkRNQV9NQVhfREFUQV9TRUdTXTsKLQkJaW50IGxlbiwgcGFnZW9mZiA9IG9mZnNldF9pbl9wYWdlKHNlZy0+bXJfb2Zmc2V0KTsKLQkJc2VnMS0+bXJfb2Zmc2V0IC09IHBhZ2VvZmY7CS8qIHN0YXJ0IG9mIHBhZ2UgKi8KLQkJc2VnMS0+bXJfbGVuICs9IHBhZ2VvZmY7Ci0JCWxlbiA9IC1wYWdlb2ZmOwotCQlpZiAobnNlZ3MgPiBSUENSRE1BX01BWF9EQVRBX1NFR1MpCi0JCQluc2VncyA9IFJQQ1JETUFfTUFYX0RBVEFfU0VHUzsKLQkJZm9yIChpID0gMDsgaSA8IG5zZWdzOykgewotCQkJcnBjcmRtYV9tYXBfb25lKGlhLCBzZWcsIHdyaXRpbmcpOwotCQkJcGh5c2FkZHJzW2ldID0gc2VnLT5tcl9kbWE7Ci0JCQlsZW4gKz0gc2VnLT5tcl9sZW47Ci0JCQkrK3NlZzsKLQkJCSsraTsKLQkJCS8qIENoZWNrIGZvciBob2xlcyAqLwotCQkJaWYgKChpIDwgbnNlZ3MgJiYgb2Zmc2V0X2luX3BhZ2Uoc2VnLT5tcl9vZmZzZXQpKSB8fAotCQkJICAgIG9mZnNldF9pbl9wYWdlKChzZWctMSktPm1yX29mZnNldCsoc2VnLTEpLT5tcl9sZW4pKQotCQkJCWJyZWFrOwotCQl9Ci0JCW5zZWdzID0gaTsKLQkJcmMgPSBpYl9tYXBfcGh5c19mbXIoc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZm1yLAotCQkJCQlwaHlzYWRkcnMsIG5zZWdzLCBzZWcxLT5tcl9kbWEpOwotCQlpZiAocmMpIHsKLQkJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9tYXBfcGh5c19mbXIgIgotCQkJCSIldUAweCVsbHgrJWkgKCVkKS4uLiBzdGF0dXMgJWlcbiIsIF9fZnVuY19fLAotCQkJCWxlbiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzZWcxLT5tcl9kbWEsCi0JCQkJcGFnZW9mZiwgbnNlZ3MsIHJjKTsKLQkJCXdoaWxlIChuc2Vncy0tKQotCQkJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCAtLXNlZyk7Ci0JCX0gZWxzZSB7Ci0JCQlzZWcxLT5tcl9ya2V5ID0gc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZm1yLT5ya2V5OwotCQkJc2VnMS0+bXJfYmFzZSA9IHNlZzEtPm1yX2RtYSArIHBhZ2VvZmY7Ci0JCQlzZWcxLT5tcl9uc2VncyA9IG5zZWdzOwotCQkJc2VnMS0+bXJfbGVuID0gbGVuOwotCQl9Ci0JCX0KKwkJcmMgPSBycGNyZG1hX3JlZ2lzdGVyX2Ztcl9leHRlcm5hbChzZWcsICZuc2Vncywgd3JpdGluZywgaWEpOwogCQlicmVhazsKIAogCS8qIFJlZ2lzdHJhdGlvbiB1c2luZyBtZW1vcnkgd2luZG93cyAqLwogCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTX0FTWU5DOgogCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTOgotCQl7Ci0JCXN0cnVjdCBpYl9td19iaW5kIHBhcmFtOwotCQlycGNyZG1hX21hcF9vbmUoaWEsIHNlZywgd3JpdGluZyk7Ci0JCXBhcmFtLm1yID0gaWEtPnJpX2JpbmRfbWVtOwotCQlwYXJhbS53cl9pZCA9IDBVTEw7CS8qIG5vIHNlbmQgY29va2llICovCi0JCXBhcmFtLmFkZHIgPSBzZWctPm1yX2RtYTsKLQkJcGFyYW0ubGVuZ3RoID0gc2VnLT5tcl9sZW47Ci0JCXBhcmFtLnNlbmRfZmxhZ3MgPSAwOwotCQlwYXJhbS5td19hY2Nlc3NfZmxhZ3MgPSBtZW1fcHJpdjsKLQotCQlERUNSX0NRQ09VTlQoJnJfeHBydC0+cnhfZXApOwotCQlyYyA9IGliX2JpbmRfbXcoaWEtPnJpX2lkLT5xcCwKLQkJCQkJc2VnLT5tcl9jaHVuay5ybF9tdy0+ci5tdywgJnBhcmFtKTsKLQkJaWYgKHJjKSB7Ci0JCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBmYWlsZWQgaWJfYmluZF9tdyAiCi0JCQkJIiV1QDB4JWxseCBzdGF0dXMgJWlcbiIsCi0JCQkJX19mdW5jX18sIHNlZy0+bXJfbGVuLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2VnLT5tcl9kbWEsIHJjKTsKLQkJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCBzZWcpOwotCQl9IGVsc2UgewotCQkJc2VnLT5tcl9ya2V5ID0gc2VnLT5tcl9jaHVuay5ybF9tdy0+ci5tdy0+cmtleTsKLQkJCXNlZy0+bXJfYmFzZSA9IHBhcmFtLmFkZHI7Ci0JCQlzZWctPm1yX25zZWdzID0gMTsKLQkJCW5zZWdzID0gMTsKLQkJfQotCQl9CisJCXJjID0gcnBjcmRtYV9yZWdpc3Rlcl9tZW13aW5fZXh0ZXJuYWwoc2VnLCAmbnNlZ3MsIHdyaXRpbmcsIGlhLCByX3hwcnQpOwogCQlicmVhazsKIAogCS8qIERlZmF1bHQgcmVnaXN0cmF0aW9uIGVhY2ggdGltZSAqLwogCWRlZmF1bHQ6Ci0JCXsKLQkJc3RydWN0IGliX3BoeXNfYnVmIGlwYltSUENSRE1BX01BWF9EQVRBX1NFR1NdOwotCQlpbnQgbGVuID0gMDsKLQkJaWYgKG5zZWdzID4gUlBDUkRNQV9NQVhfREFUQV9TRUdTKQotCQkJbnNlZ3MgPSBSUENSRE1BX01BWF9EQVRBX1NFR1M7Ci0JCWZvciAoaSA9IDA7IGkgPCBuc2VnczspIHsKLQkJCXJwY3JkbWFfbWFwX29uZShpYSwgc2VnLCB3cml0aW5nKTsKLQkJCWlwYltpXS5hZGRyID0gc2VnLT5tcl9kbWE7Ci0JCQlpcGJbaV0uc2l6ZSA9IHNlZy0+bXJfbGVuOwotCQkJbGVuICs9IHNlZy0+bXJfbGVuOwotCQkJKytzZWc7Ci0JCQkrK2k7Ci0JCQkvKiBDaGVjayBmb3IgaG9sZXMgKi8KLQkJCWlmICgoaSA8IG5zZWdzICYmIG9mZnNldF9pbl9wYWdlKHNlZy0+bXJfb2Zmc2V0KSkgfHwKLQkJCSAgICBvZmZzZXRfaW5fcGFnZSgoc2VnLTEpLT5tcl9vZmZzZXQrKHNlZy0xKS0+bXJfbGVuKSkKLQkJCQlicmVhazsKLQkJfQotCQluc2VncyA9IGk7Ci0JCXNlZzEtPm1yX2Jhc2UgPSBzZWcxLT5tcl9kbWE7Ci0JCXNlZzEtPm1yX2NodW5rLnJsX21yID0gaWJfcmVnX3BoeXNfbXIoaWEtPnJpX3BkLAotCQkJCQlpcGIsIG5zZWdzLCBtZW1fcHJpdiwgJnNlZzEtPm1yX2Jhc2UpOwotCQlpZiAoSVNfRVJSKHNlZzEtPm1yX2NodW5rLnJsX21yKSkgewotCQkJcmMgPSBQVFJfRVJSKHNlZzEtPm1yX2NodW5rLnJsX21yKTsKLQkJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9yZWdfcGh5c19tciAiCi0JCQkJIiV1QDB4JWxseCAoJWQpLi4uIHN0YXR1cyAlaVxuIiwKLQkJCQlfX2Z1bmNfXywgbGVuLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2VnMS0+bXJfZG1hLCBuc2VncywgcmMpOwotCQkJd2hpbGUgKG5zZWdzLS0pCi0JCQkJcnBjcmRtYV91bm1hcF9vbmUoaWEsIC0tc2VnKTsKLQkJfSBlbHNlIHsKLQkJCXNlZzEtPm1yX3JrZXkgPSBzZWcxLT5tcl9jaHVuay5ybF9tci0+cmtleTsKLQkJCXNlZzEtPm1yX25zZWdzID0gbnNlZ3M7Ci0JCQlzZWcxLT5tcl9sZW4gPSBsZW47Ci0JCX0KLQkJfQorCQlyYyA9IHJwY3JkbWFfcmVnaXN0ZXJfZGVmYXVsdF9leHRlcm5hbChzZWcsICZuc2Vncywgd3JpdGluZywgaWEpOwogCQlicmVhazsKIAl9CiAJaWYgKHJjKQpAQCAtMTQ3Myw3ICsxNzgyLDYgQEAKIAkJc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0LCB2b2lkICpyKQogewogCXN0cnVjdCBycGNyZG1hX2lhICppYSA9ICZyX3hwcnQtPnJ4X2lhOwotCXN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnMSA9IHNlZzsKIAlpbnQgbnNlZ3MgPSBzZWctPm1yX25zZWdzLCByYzsKIAogCXN3aXRjaCAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSkgewpAQCAtMTQ4Niw1NiArMTc5NCwyMSBAQAogCQlicmVhazsKICNlbmRpZgogCisJY2FzZSBSUENSRE1BX0ZSTVI6CisJCXJjID0gcnBjcmRtYV9kZXJlZ2lzdGVyX2ZybXJfZXh0ZXJuYWwoc2VnLCBpYSwgcl94cHJ0KTsKKwkJYnJlYWs7CisKIAljYXNlIFJQQ1JETUFfTVRIQ0FGTVI6Ci0JCXsKLQkJTElTVF9IRUFEKGwpOwotCQlsaXN0X2FkZCgmc2VnLT5tcl9jaHVuay5ybF9tdy0+ci5mbXItPmxpc3QsICZsKTsKLQkJcmMgPSBpYl91bm1hcF9mbXIoJmwpOwotCQl3aGlsZSAoc2VnMS0+bXJfbnNlZ3MtLSkKLQkJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCBzZWcrKyk7Ci0JCX0KLQkJaWYgKHJjKQotCQkJZHByaW50aygiUlBDOiAgICAgICAlczogZmFpbGVkIGliX3VubWFwX2ZtciwiCi0JCQkJIiBzdGF0dXMgJWlcbiIsIF9fZnVuY19fLCByYyk7CisJCXJjID0gcnBjcmRtYV9kZXJlZ2lzdGVyX2Ztcl9leHRlcm5hbChzZWcsIGlhKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJQQ1JETUFfTUVNV0lORE9XU19BU1lOQzoKIAljYXNlIFJQQ1JETUFfTUVNV0lORE9XUzoKLQkJewotCQlzdHJ1Y3QgaWJfbXdfYmluZCBwYXJhbTsKLQkJQlVHX09OKG5zZWdzICE9IDEpOwotCQlwYXJhbS5tciA9IGlhLT5yaV9iaW5kX21lbTsKLQkJcGFyYW0uYWRkciA9IDBVTEw7CS8qIHVuYmluZCAqLwotCQlwYXJhbS5sZW5ndGggPSAwOwotCQlwYXJhbS5td19hY2Nlc3NfZmxhZ3MgPSAwOwotCQlpZiAocikgewotCQkJcGFyYW0ud3JfaWQgPSAodTY0KSAodW5zaWduZWQgbG9uZykgcjsKLQkJCXBhcmFtLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOwotCQkJSU5JVF9DUUNPVU5UKCZyX3hwcnQtPnJ4X2VwKTsKLQkJfSBlbHNlIHsKLQkJCXBhcmFtLndyX2lkID0gMFVMTDsKLQkJCXBhcmFtLnNlbmRfZmxhZ3MgPSAwOwotCQkJREVDUl9DUUNPVU5UKCZyX3hwcnQtPnJ4X2VwKTsKLQkJfQotCQlyYyA9IGliX2JpbmRfbXcoaWEtPnJpX2lkLT5xcCwKLQkJCQlzZWctPm1yX2NodW5rLnJsX213LT5yLm13LCAmcGFyYW0pOwotCQlycGNyZG1hX3VubWFwX29uZShpYSwgc2VnKTsKLQkJfQotCQlpZiAocmMpCi0JCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBmYWlsZWQgaWJfKHVuKWJpbmRfbXcsIgotCQkJCSIgc3RhdHVzICVpXG4iLCBfX2Z1bmNfXywgcmMpOwotCQllbHNlCi0JCQlyID0gTlVMTDsJLyogd2lsbCB1cGNhbGwgb24gY29tcGxldGlvbiAqLworCQlyYyA9IHJwY3JkbWFfZGVyZWdpc3Rlcl9tZW13aW5fZXh0ZXJuYWwoc2VnLCBpYSwgcl94cHJ0LCAmcik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcmMgPSBpYl9kZXJlZ19tcihzZWcxLT5tcl9jaHVuay5ybF9tcik7Ci0JCXNlZzEtPm1yX2NodW5rLnJsX21yID0gTlVMTDsKLQkJd2hpbGUgKHNlZzEtPm1yX25zZWdzLS0pCi0JCQlycGNyZG1hX3VubWFwX29uZShpYSwgc2VnKyspOwotCQlpZiAocmMpCi0JCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBmYWlsZWQgaWJfZGVyZWdfbXIsIgotCQkJCSIgc3RhdHVzICVpXG4iLCBfX2Z1bmNfXywgcmMpOworCQlyYyA9IHJwY3JkbWFfZGVyZWdpc3Rlcl9kZWZhdWx0X2V4dGVybmFsKHNlZywgaWEpOwogCQlicmVhazsKIAl9CiAJaWYgKHIpIHsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEveHBydF9yZG1hLmggYi9uZXQvc3VucnBjL3hwcnRyZG1hL3hwcnRfcmRtYS5oCmluZGV4IDI0Mjc4MjIuLmM3YTdlYmEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEveHBydF9yZG1hLmgKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS94cHJ0X3JkbWEuaApAQCAtNTEsNiArNTEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9ycGNfcmRtYS5oPiAJLyogUlBDL1JETUEgcHJvdG9jb2wgKi8KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMveHBydHJkbWEuaD4gCS8qIHhwcnQgcGFyYW1ldGVycyAqLwogCisjZGVmaW5lIFJETUFfUkVTT0xWRV9USU1FT1VUCSg1MDAwKQkvKiA1IHNlY29uZHMgKi8KKyNkZWZpbmUgUkRNQV9DT05ORUNUX1JFVFJZX01BWAkoMikJLyogcmV0cmllcyBpZiBubyBsaXN0ZW5lciBiYWNrbG9nICovCisKIC8qCiAgKiBJbnRlcmZhY2UgQWRhcHRlciAtLSBvbmUgcGVyIHRyYW5zcG9ydCBpbnN0YW5jZQogICovCkBAIC01OCw2ICs2MSw4IEBACiAJc3RydWN0IHJkbWFfY21faWQgCSpyaV9pZDsKIAlzdHJ1Y3QgaWJfcGQJCSpyaV9wZDsKIAlzdHJ1Y3QgaWJfbXIJCSpyaV9iaW5kX21lbTsKKwl1MzIJCQlyaV9kbWFfbGtleTsKKwlpbnQJCQlyaV9oYXZlX2RtYV9sa2V5OwogCXN0cnVjdCBjb21wbGV0aW9uCXJpX2RvbmU7CiAJaW50CQkJcmlfYXN5bmNfcmM7CiAJZW51bSBycGNyZG1hX21lbXJlZwlyaV9tZW1yZWdfc3RyYXRlZ3k7CkBAIC0xNTYsNiArMTYxLDEwIEBACiAJCQl1bmlvbiB7CiAJCQkJc3RydWN0IGliX213CSptdzsKIAkJCQlzdHJ1Y3QgaWJfZm1yCSpmbXI7CisJCQkJc3RydWN0IHsKKwkJCQkJc3RydWN0IGliX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqZnJfcGdsOworCQkJCQlzdHJ1Y3QgaWJfbXIgKmZyX21yOworCQkJCX0gZnJtcjsKIAkJCX0gcjsKIAkJCXN0cnVjdCBsaXN0X2hlYWQgbXdfbGlzdDsKIAkJfSAqcmxfbXc7CkBAIC0xNzUsNiArMTg0LDcgQEAKIAlzaXplX3QgCQlybF9zaXplOwkvKiBhY3R1YWwgbGVuZ3RoIG9mIGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludAlybF9uaW92czsJLyogMCwgMiBvciA0ICovCiAJdW5zaWduZWQgaW50CXJsX25jaHVua3M7CS8qIG5vbi16ZXJvIGlmIGNodW5rcyAqLworCXVuc2lnbmVkIGludAlybF9jb25uZWN0X2Nvb2tpZTsJLyogcmV0cnkgZGV0ZWN0aW9uICovCiAJc3RydWN0IHJwY3JkbWFfYnVmZmVyICpybF9idWZmZXI7IC8qIGhvbWUgYmFzZSBmb3IgdGhpcyBzdHJ1Y3R1cmUgKi8KIAlzdHJ1Y3QgcnBjcmRtYV9yZXAJKnJsX3JlcGx5Oy8qIGhvbGRlciBmb3IgcmVwbHkgYnVmZmVyICovCiAJc3RydWN0IHJwY3JkbWFfbXJfc2VnIHJsX3NlZ21lbnRzW1JQQ1JETUFfTUFYX1NFR1NdOy8qIGNodW5rIHNlZ21lbnRzICovCkBAIC0xOTgsNyArMjA4LDcgQEAKIAlhdG9taWNfdAlyYl9jcmVkaXRzOwkvKiBtb3N0IHJlY2VudCBzZXJ2ZXIgY3JlZGl0cyAqLwogCXVuc2lnbmVkIGxvbmcJcmJfY3duZHNjYWxlOwkvKiBjYWNoZWQgZnJhbWV3b3JrIHJwY19jd25kc2NhbGUgKi8KIAlpbnQJCXJiX21heF9yZXF1ZXN0czsvKiBjbGllbnQgbWF4IHJlcXVlc3RzICovCi0Jc3RydWN0IGxpc3RfaGVhZCByYl9td3M7CS8qIG9wdGlvbmFsIG1lbW9yeSB3aW5kb3dzL2ZtcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJiX213czsJLyogb3B0aW9uYWwgbWVtb3J5IHdpbmRvd3MvZm1ycy9mcm1ycyAqLwogCWludAkJcmJfc2VuZF9pbmRleDsKIAlzdHJ1Y3QgcnBjcmRtYV9yZXEJKipyYl9zZW5kX2J1ZnM7CiAJaW50CQlyYl9yZWN2X2luZGV4OwpAQCAtMjczLDYgKzI4MywxMSBAQAogI2RlZmluZSBycGN4X3RvX3JkbWF4KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgcnBjcmRtYV94cHJ0LCB4cHJ0KQogI2RlZmluZSBycGN4X3RvX3JkbWFkKHgpIChycGN4X3RvX3JkbWF4KHgpLT5yeF9kYXRhKQogCisvKiBTZXR0aW5nIHRoaXMgdG8gMCBlbnN1cmVzIGludGVyb3BlcmFiaWxpdHkgd2l0aCBlYXJseSBzZXJ2ZXJzLgorICogU2V0dGluZyB0aGlzIHRvIDEgZW5oYW5jZXMgY2VydGFpbiB1bmFsaWduZWQgcmVhZC93cml0ZSBwZXJmb3JtYW5jZS4KKyAqIERlZmF1bHQgaXMgMCwgc2VlIHN5c2N0bCBlbnRyeSBhbmQgcnBjX3JkbWEuYyBycGNyZG1hX2NvbnZlcnRfaW92cygpICovCitleHRlcm4gaW50IHhwcnRfcmRtYV9wYWRfb3B0aW1pemU7CisKIC8qCiAgKiBJbnRlcmZhY2UgQWRhcHRlciBjYWxscyAtIHhwcnRyZG1hL3ZlcmJzLmMKICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0c29jay5jIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCmluZGV4IDQ0ODZjNTkuLjlhMjg4ZDUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHNvY2suYworKysgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKQEAgLTMsOCArMyw4IEBACiAgKgogICogQ2xpZW50LXNpZGUgdHJhbnNwb3J0IGltcGxlbWVudGF0aW9uIGZvciBzb2NrZXRzLgogICoKLSAqIFRDUCBjYWxsYmFjayByYWNlcyBmaXhlcyAoQykgMTk5OCBSZWQgSGF0IFNvZnR3YXJlIDxhbGFuQHJlZGhhdC5jb20+Ci0gKiBUQ1Agc2VuZCBmaXhlcyAoQykgMTk5OCBSZWQgSGF0IFNvZnR3YXJlIDxhbGFuQHJlZGhhdC5jb20+CisgKiBUQ1AgY2FsbGJhY2sgcmFjZXMgZml4ZXMgKEMpIDE5OTggUmVkIEhhdAorICogVENQIHNlbmQgZml4ZXMgKEMpIDE5OTggUmVkIEhhdAogICogVENQIE5GUyByZWxhdGVkIHJlYWQgKyB3cml0ZSBmaXhlcwogICogIChDKSAxOTk5IERhdmUgQWlybGllLCBVbml2ZXJzaXR5IG9mIExpbWVyaWNrLCBJcmVsYW5kIDxhaXJsaWVkQGxpbnV4LmllPgogICoKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCAwMTU2MDZiLi5jNjQ3YWFiIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIE5FVDQ6CUltcGxlbWVudGF0aW9uIG9mIEJTRCBVbml4IGRvbWFpbiBzb2NrZXRzLgogICoKLSAqIEF1dGhvcnM6CUFsYW4gQ294LCA8YWxhbi5jb3hAbGludXgub3JnPgorICogQXV0aG9yczoJQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmMKaW5kZXggNWNhZGJlYi4uNTAzMWRiNyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuYworKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvd2lyZWxlc3MuaD4KQEAgLTE4NSw3ICsxODQsOCBAQAogCWlmIChyZXN1bHQpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCWlmICghZGVidWdmc19yZW5hbWUocmRldi0+d2lwaHkuZGVidWdmc2Rpci0+ZF9wYXJlbnQsCisJaWYgKHJkZXYtPndpcGh5LmRlYnVnZnNkaXIgJiYKKwkgICAgIWRlYnVnZnNfcmVuYW1lKHJkZXYtPndpcGh5LmRlYnVnZnNkaXItPmRfcGFyZW50LAogCQkJICAgIHJkZXYtPndpcGh5LmRlYnVnZnNkaXIsCiAJCQkgICAgcmRldi0+d2lwaHkuZGVidWdmc2Rpci0+ZF9wYXJlbnQsCiAJCQkgICAgbmV3bmFtZSkpCkBAIC0zMTgsNiArMzE4LDggQEAKIAlkcnYtPndpcGh5LmRlYnVnZnNkaXIgPQogCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIod2lwaHlfbmFtZSgmZHJ2LT53aXBoeSksCiAJCQkJICAgaWVlZTgwMjExX2RlYnVnZnNfZGlyKTsKKwlpZiAoSVNfRVJSKGRydi0+d2lwaHkuZGVidWdmc2RpcikpCisJCWRydi0+d2lwaHkuZGVidWdmc2RpciA9IE5VTEw7CiAKIAlyZXMgPSAwOwogb3V0X3VubG9jazoKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubGliIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKaW5kZXggZWE0OGI4Mi4uYjRjYTM4YSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5saWIKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKQEAgLTk2LDYgKzk2LDE0IEBACiBtb2RuYW1lX2ZsYWdzICA9ICQoaWYgJChmaWx0ZXIgMSwkKHdvcmRzICQobW9kbmFtZSkpKSxcCiAgICAgICAgICAgICAgICAgIC1EIktCVUlMRF9NT0ROQU1FPUtCVUlMRF9TVFIoJChjYWxsIG5hbWUtZml4LCQobW9kbmFtZSkpKSIpCiAKKyNoYXNoIHZhbHVlcworaWZkZWYgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHCitkZWJ1Z19mbGFncyA9IC1EIkRFQlVHX0hBU0g9JChzaGVsbCAuL3NjcmlwdHMvYmFzaWMvaGFzaCBkamIyICQoQEQpJChtb2RuYW1lKSkiXAorICAgICAgICAgICAgICAtRCJERUJVR19IQVNIMj0kKHNoZWxsIC4vc2NyaXB0cy9iYXNpYy9oYXNoIHI1ICQoQEQpJChtb2RuYW1lKSkiCitlbHNlCitkZWJ1Z19mbGFncyA9CitlbmRpZgorCiBvcmlnX2NfZmxhZ3MgICA9ICQoS0JVSUxEX0NGTEFHUykgJChjY2ZsYWdzLXkpICQoQ0ZMQUdTXyQoYmFzZXRhcmdldCkubykKIF9jX2ZsYWdzICAgICAgID0gJChmaWx0ZXItb3V0ICQoQ0ZMQUdTX1JFTU9WRV8kKGJhc2V0YXJnZXQpLm8pLCAkKG9yaWdfY19mbGFncykpCiBfYV9mbGFncyAgICAgICA9ICQoS0JVSUxEX0FGTEFHUykgJChhc2ZsYWdzLXkpICQoQUZMQUdTXyQoYmFzZXRhcmdldCkubykKQEAgLTEyMSw3ICsxMjksOCBAQAogCiBjX2ZsYWdzICAgICAgICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKE5PU1RESU5DX0ZMQUdTKSAkKEtCVUlMRF9DUFBGTEFHUykgXAogCQkgJChfX2NfZmxhZ3MpICQobW9ka2Vybl9jZmxhZ3MpIFwKLQkJIC1EIktCVUlMRF9TVFIocyk9XCNzIiAkKGJhc2VuYW1lX2ZsYWdzKSAkKG1vZG5hbWVfZmxhZ3MpCisJCSAtRCJLQlVJTERfU1RSKHMpPVwjcyIgJChiYXNlbmFtZV9mbGFncykgJChtb2RuYW1lX2ZsYWdzKSBcCisJCSAgJChkZWJ1Z19mbGFncykKIAogYV9mbGFncyAgICAgICAgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChOT1NURElOQ19GTEFHUykgJChLQlVJTERfQ1BQRkxBR1MpIFwKIAkJICQoX19hX2ZsYWdzKSAkKG1vZGtlcm5fYWZsYWdzKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9iYXNpYy8uZ2l0aWdub3JlIGIvc2NyaXB0cy9iYXNpYy8uZ2l0aWdub3JlCmluZGV4IDczMDRlMTkuLmJmOGIxOTkgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvYmFzaWMvLmdpdGlnbm9yZQorKysgYi9zY3JpcHRzL2Jhc2ljLy5naXRpZ25vcmUKQEAgLTEsMyArMSwzIEBACitoYXNoCiBmaXhkZXAKLXNwbGl0LWluY2x1ZGUKIGRvY3Byb2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYmFzaWMvTWFrZWZpbGUgYi9zY3JpcHRzL2Jhc2ljL01ha2VmaWxlCmluZGV4IDRjMzI0YTEuLjA5NTU5OTUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvYmFzaWMvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9iYXNpYy9NYWtlZmlsZQpAQCAtOSw3ICs5LDcgQEAKICMgZml4ZGVwOiAJIFVzZWQgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBkdXJpbmcgYnVpbGQgcHJvY2VzcwogIyBkb2Nwcm9jOgkgVXNlZCBpbiBEb2N1bWVudGF0aW9uL0RvY0Jvb2sKIAotaG9zdHByb2dzLXkJOj0gZml4ZGVwIGRvY3Byb2MKK2hvc3Rwcm9ncy15CTo9IGZpeGRlcCBkb2Nwcm9jIGhhc2gKIGFsd2F5cwkJOj0gJChob3N0cHJvZ3MteSkKIAogIyBmaXhkZXAgaXMgbmVlZGVkIHRvIGNvbXBpbGUgb3RoZXIgaG9zdCBwcm9ncmFtcwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9iYXNpYy9oYXNoLmMgYi9zY3JpcHRzL2Jhc2ljL2hhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjk5YWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9iYXNpYy9oYXNoLmMKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuLCBKYXNvbiBCYXJvbiA8amJhcm9uQHJlZGhhdC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIERZTkFNSUNfREVCVUdfSEFTSF9CSVRTIDYKKworc3RhdGljIGNvbnN0IGNoYXIgKnByb2dyYW07CisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJcHJpbnRmKCJVc2FnZTogJXMgPGRqYjJ8cjU+IDxtb2RuYW1lPlxuIiwgcHJvZ3JhbSk7CisJZXhpdCgxKTsKK30KKworLyogZGpiMiBoYXNoaW5nIGFsZ29yaXRobSBieSBEYW4gQmVybnN0ZWluLiBGcm9tOgorICogaHR0cDovL3d3dy5jc2UueW9ya3UuY2Evfm96L2hhc2guaHRtbAorICovCisKK3Vuc2lnbmVkIGludCBkamIyX2hhc2goY2hhciAqc3RyKQoreworCXVuc2lnbmVkIGxvbmcgaGFzaCA9IDUzODE7CisJaW50IGM7CisKKwljID0gKnN0cjsKKwl3aGlsZSAoYykgeworCQloYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCkgKyBjOworCQljID0gKisrc3RyOworCX0KKwlyZXR1cm4gKHVuc2lnbmVkIGludCkoaGFzaCAmICgoMSA8PCBEWU5BTUlDX0RFQlVHX0hBU0hfQklUUykgLSAxKSk7Cit9CisKK3Vuc2lnbmVkIGludCByNV9oYXNoKGNoYXIgKnN0cikKK3sKKwl1bnNpZ25lZCBsb25nIGhhc2ggPSAwOworCWludCBjOworCisJYyA9ICpzdHI7CisJd2hpbGUgKGMpIHsKKwkJaGFzaCA9IChoYXNoICsgKGMgPDwgNCkgKyAoYyA+PiA0KSkgKiAxMTsKKwkJYyA9ICorK3N0cjsKKwl9CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpKGhhc2ggJiAoKDEgPDwgRFlOQU1JQ19ERUJVR19IQVNIX0JJVFMpIC0gMSkpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXByb2dyYW0gPSBhcmd2WzBdOworCisJaWYgKGFyZ2MgIT0gMykKKwkJdXNhZ2UoKTsKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiZGpiMiIpKQorCQlwcmludGYoIiVkXG4iLCBkamIyX2hhc2goYXJndlsyXSkpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInI1IikpCisJCXByaW50ZigiJWRcbiIsIHI1X2hhc2goYXJndlsyXSkpOworCWVsc2UKKwkJdXNhZ2UoKTsKKwlleGl0KDApOworfQorCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKaW5kZXggYmM2Nzc5My4uZjg4YmIzZSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsCisrKyBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbApAQCAtMSw1ICsxLDUgQEAKICMhL3Vzci9iaW4vcGVybCAtdwotIyAoYykgMjAwMSwgRGF2ZSBKb25lcy4gPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiAodGhlIGZpbGUgaGFuZGxpbmcgYml0KQorIyAoYykgMjAwMSwgRGF2ZSBKb25lcy4gPGRhdmVqQHJlZGhhdC5jb20+ICh0aGUgZmlsZSBoYW5kbGluZyBiaXQpCiAjIChjKSAyMDA1LCBKb2VsIFNjaG9wcCA8anNjaG9wcEBhdXN0aW4uaWJtLmNvbT4gKHRoZSB1Z2x5IGJpdCkKICMgKGMpIDIwMDcsIEFuZHkgV2hpdGNyb2Z0IDxhcHdAdWsuaWJtLmNvbT4gKG5ldyBjb25kaXRpb25zLCB0ZXN0IHN1aXRlLCBldGMpCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMgpAQCAtOSw3ICs5LDcgQEAKIG15ICRQID0gJDA7CiAkUCA9fiBzQC4qL0BAZzsKIAotbXkgJFYgPSAnMC4yMSc7CitteSAkViA9ICcwLjI0JzsKIAogdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIG5vX2F1dG9fYWJicmV2KTsKIApAQCAtNjYsNiArNjYsNyBAQAogbXkgJGRiZ192YWx1ZXMgPSAwOwogbXkgJGRiZ19wb3NzaWJsZSA9IDA7CiBteSAkZGJnX3R5cGUgPSAwOworbXkgJGRiZ19hdHRyID0gMDsKIGZvciBteSAka2V5IChrZXlzICVkZWJ1ZykgewogCWV2YWwgIlwke2RiZ18ka2V5fSA9ICckZGVidWd7JGtleX0nOyIKIH0KQEAgLTExMiw3ICsxMTMsMTAgQEAKIAkJCWNvbnN0fAogCQkJX19yZWFkX21vc3RseXwKIAkJCV9fa3Byb2Jlc3wKLQkJCV9fKD86bWVtfGNwdXxkZXZ8KSg/OmluaXRkYXRhfGluaXQpCisJCQlfXyg/Om1lbXxjcHV8ZGV2fCkoPzppbml0ZGF0YXxpbml0KXwKKwkJCV9fX19jYWNoZWxpbmVfYWxpZ25lZHwKKwkJCV9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXB8CisJCQlfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wCiAJCSAgfXg7CiBvdXIgJE1vZGlmaWVyOwogb3VyICRJbmxpbmUJPSBxcntpbmxpbmV8X19hbHdheXNfaW5saW5lfG5vaW5saW5lfTsKQEAgLTE0Miw2ICsxNDYsMTEgQEAKIAl8ICBceEY0W1x4ODAtXHg4Rl1bXHg4MC1ceEJGXXsyfSAgICAgIyBwbGFuZSAxNgogfXg7CiAKK291ciAkdHlwZVR5cGVkZWZzID0gcXJ7KD94OgorCSg/Ol9fKT8oPzp1fHN8YmV8bGUpKD86XGR8XGRcZCl8CisJYXRvbWljX3QKKyl9OworCiBvdXIgQHR5cGVMaXN0ID0gKAogCXFye3ZvaWR9LAogCXFyeyg/OnVuc2lnbmVkXHMrKT9jaGFyfSwKQEAgLTE1NSw3ICsxNjQsNiBAQAogCXFye2Zsb2F0fSwKIAlxcntkb3VibGV9LAogCXFye2Jvb2x9LAotCXFyeyg/Ol9fKT8oPzp1fHN8YmV8bGUpKD86OHwxNnwzMnw2NCl9LAogCXFye3N0cnVjdFxzKyRJZGVudH0sCiAJcXJ7dW5pb25ccyskSWRlbnR9LAogCXFye2VudW1ccyskSWRlbnR9LApAQCAtMTc1LDYgKzE4Myw3IEBACiAJCQkoPzokTW9kaWZpZXJccyt8Y29uc3RccyspKgogCQkJKD86CiAJCQkJKD86dHlwZW9mfF9fdHlwZW9mX18pXHMqXChccypcKipccyokSWRlbnRccypcKXwKKwkJCQkoPzokdHlwZVR5cGVkZWZzXGIpfAogCQkJCSg/OiR7YWxsfVxiKQogCQkJKQogCQkJKD86XHMrJE1vZGlmaWVyfFxzK2NvbnN0KSoKQEAgLTMzMSw3ICszNDAsNyBAQAogCQkJJG9mZisrOwogCQkJbmV4dDsKIAkJfQotCQlpZiAoc3Vic3RyKCRsaW5lLCAkb2ZmLCAyKSBlcSAnKi8nKSB7CisJCWlmICgkc2FuaXRpc2VfcXVvdGUgZXEgJyovJyAmJiBzdWJzdHIoJGxpbmUsICRvZmYsIDIpIGVxICcqLycpIHsKIAkJCSRzYW5pdGlzZV9xdW90ZSA9ICcnOwogCQkJc3Vic3RyKCRyZXMsICRvZmYsIDIsICIkOyQ7Iik7CiAJCQkkb2ZmKys7CkBAIC00MDQsNiArNDEzLDcgQEAKIAkJIyBjb250ZXh0LgogCQlpZiAoJG9mZiA+PSAkbGVuKSB7CiAJCQlmb3IgKDsgJHJlbWFpbiA+IDA7ICRsaW5lKyspIHsKKwkJCQlsYXN0IGlmICghZGVmaW5lZCAkbGluZXNbJGxpbmVdKTsKIAkJCQluZXh0IGlmICgkbGluZXNbJGxpbmVdID1+IC9eLS8pOwogCQkJCSRyZW1haW4tLTsKIAkJCQkkbG9mZiA9ICRsZW47CkBAIC02NjksNiArNjc5LDIyIEBACiAJcmV0dXJuICgkY210IG5lICcnKTsKIH0KIAorc3ViIHJhd19saW5lIHsKKwlteSAoJGxpbmVuciwgJGNudCkgPSBAXzsKKworCW15ICRvZmZzZXQgPSAkbGluZW5yIC0gMTsKKwkkY250Kys7CisKKwlteSAkbGluZTsKKwl3aGlsZSAoJGNudCkgeworCQkkbGluZSA9ICRyYXdsaW5lc1skb2Zmc2V0KytdOworCQluZXh0IGlmIChkZWZpbmVkKCRsaW5lKSAmJiAkbGluZSA9fiAvXi0vKTsKKwkJJGNudC0tOworCX0KKworCXJldHVybiAkbGluZTsKK30KKwogc3ViIGNhdF92ZXQgewogCW15ICgkdmV0KSA9IEBfOwogCW15ICgkcmVzLCAkY29kZWQpOwpAQCAtNzgyLDkgKzgwOCw5IEBACiAJCQl9CiAJCQkkdHlwZSA9ICdOJzsKIAotCQl9IGVsc2lmICgkY3VyID1+IC9eKGlmfHdoaWxlfHR5cGVvZnxfX3R5cGVvZl9ffGZvcilcYi9vKSB7CisJCX0gZWxzaWYgKCRjdXIgPX4gL14oaWZ8d2hpbGV8Zm9yKVxiL28pIHsKIAkJCXByaW50ICJDT05EKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKLQkJCSRhdl9wZW5kaW5nID0gJ04nOworCQkJJGF2X3BlbmRpbmcgPSAnRSc7CiAJCQkkdHlwZSA9ICdOJzsKIAogCQl9IGVsc2lmICgkY3VyID1+L14oY2FzZSkvbykgewpAQCAtNzkyLDcgKzgxOCw3IEBACiAJCQkkYXZfcGVuZF9jb2xvbiA9ICdDJzsKIAkJCSR0eXBlID0gJ04nOwogCi0JCX0gZWxzaWYgKCRjdXIgPX4vXihyZXR1cm58ZWxzZXxnb3RvKS9vKSB7CisJCX0gZWxzaWYgKCRjdXIgPX4vXihyZXR1cm58ZWxzZXxnb3RvfHR5cGVvZnxfX3R5cGVvZl9fKVxiL28pIHsKIAkJCXByaW50ICJLRVlXT1JEKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKIAkJCSR0eXBlID0gJ04nOwogCkBAIC04NTgsNyArODg0LDcgQEAKIAkJCXByaW50ICJDTE9TRSgkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CiAJCQkkdHlwZSA9ICdOJzsKIAotCQl9IGVsc2lmICgkY3VyID1+IC9eKC0oPyFbLT5dKXxcKyg/IVwrKXxcKnxcJig/IVwmKSkvbykgeworCQl9IGVsc2lmICgkY3VyID1+IC9eKC0oPyFbLT5dKXxcKyg/IVwrKXxcKnxcJlwmfFwmKS9vKSB7CiAJCQlteSAkdmFyaWFudDsKIAogCQkJcHJpbnQgIk9QVigkMSlcbiIgaWYgKCRkYmdfdmFsdWVzID4gMSk7CkBAIC04OTIsMTIgKzkxOCwyMiBAQAogc3ViIHBvc3NpYmxlIHsKIAlteSAoJHBvc3NpYmxlLCAkbGluZSkgPSBAXzsKIAotCXByaW50ICJDSEVDSzwkcG9zc2libGU+ICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUgPiAxKTsKLQlpZiAoJHBvc3NpYmxlICF+IC9eKD86JE1vZGlmaWVyfCRTdG9yYWdlfCRUeXBlfERFRklORV9cUyspJC8gJiYKLQkgICAgJHBvc3NpYmxlIG5lICdnb3RvJyAmJiAkcG9zc2libGUgbmUgJ3JldHVybicgJiYKLQkgICAgJHBvc3NpYmxlIG5lICdjYXNlJyAmJiAkcG9zc2libGUgbmUgJ2Vsc2UnICYmCi0JICAgICRwb3NzaWJsZSBuZSAnYXNtJyAmJiAkcG9zc2libGUgbmUgJ19fYXNtX18nICYmCi0JICAgICRwb3NzaWJsZSAhfiAvXih0eXBlZGVmfHN0cnVjdHxlbnVtKVxiLykgeworCXByaW50ICJDSEVDSzwkcG9zc2libGU+ICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUgPiAyKTsKKwlpZiAoJHBvc3NpYmxlICF+IC8oPzoKKwkJXig/OgorCQkJJE1vZGlmaWVyfAorCQkJJFN0b3JhZ2V8CisJCQkkVHlwZXwKKwkJCURFRklORV9cUyt8CisJCQlnb3RvfAorCQkJcmV0dXJufAorCQkJY2FzZXwKKwkJCWVsc2V8CisJCQlhc218X19hc21fX3wKKwkJCWRvCisJCSkkfAorCQleKD86dHlwZWRlZnxzdHJ1Y3R8ZW51bSlcYgorCSAgICApL3gpIHsKIAkJIyBDaGVjayBmb3IgbW9kaWZpZXJzLgogCQkkcG9zc2libGUgPX4gcy9ccyokU3RvcmFnZVxzKi8vZzsKIAkJJHBvc3NpYmxlID1+IHMvXHMqJFNwYXJzZVxzKi8vZzsKQEAgLTkxNSw2ICs5NTEsOCBAQAogCQkJcHVzaChAdHlwZUxpc3QsICRwb3NzaWJsZSk7CiAJCX0KIAkJYnVpbGRfdHlwZXMoKTsKKwl9IGVsc2UgeworCQl3YXJuICJOT1RQT1NTOiAkcG9zc2libGUgKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSA+IDEpOwogCX0KIH0KIApAQCAtOTU0LDYgKzk5MiwzMyBAQAogCX0KIH0KIAorc3ViIGNoZWNrX2Fic29sdXRlX2ZpbGUgeworCW15ICgkYWJzb2x1dGUsICRoZXJlY3VycikgPSBAXzsKKwlteSAkZmlsZSA9ICRhYnNvbHV0ZTsKKworCSMjcHJpbnQgImFic29sdXRlPCRhYnNvbHV0ZT5cbiI7CisKKwkjIFNlZSBpZiBhbnkgc3VmZml4IG9mIHRoaXMgcGF0aCBpcyBhIHBhdGggd2l0aGluIHRoZSB0cmVlLgorCXdoaWxlICgkZmlsZSA9fiBzQF5bXi9dKi9AQCkgeworCQlpZiAoLWYgIiRyb290LyRmaWxlIikgeworCQkJIyNwcmludCAiZmlsZTwkZmlsZT5cbiI7CisJCQlsYXN0OworCQl9CisJfQorCWlmICghIC1mIF8pICB7CisJCXJldHVybiAwOworCX0KKworCSMgSXQgaXMsIHNvIHNlZSBpZiB0aGUgcHJlZml4IGlzIGFjY2VwdGFibGUuCisJbXkgJHByZWZpeCA9ICRhYnNvbHV0ZTsKKwlzdWJzdHIoJHByZWZpeCwgLWxlbmd0aCgkZmlsZSkpID0gJyc7CisKKwkjI3ByaW50ICJwcmVmaXg8JHByZWZpeD5cbiI7CisJaWYgKCRwcmVmaXggbmUgIi4uLi8iKSB7CisJCVdBUk4oInVzZSByZWxhdGl2ZSBwYXRobmFtZSBpbnN0ZWFkIG9mIGFic29sdXRlIGluIGNoYW5nZWxvZyB0ZXh0XG4iIC4gJGhlcmVjdXJyKTsKKwl9Cit9CisKIHN1YiBwcm9jZXNzIHsKIAlteSAkZmlsZW5hbWUgPSBzaGlmdDsKIApAQCAtOTkxLDYgKzEwNTYsNyBAQAogCiAJIyBzdXBwcmVzc2lvbiBmbGFncwogCW15ICVzdXBwcmVzc19pZmJyYWNlczsKKwlteSAlc3VwcHJlc3Nfd2hpbGV0cmFpbGVyczsKIAogCSMgUHJlLXNjYW4gdGhlIHBhdGNoIHNhbml0aXppbmcgdGhlIGxpbmVzLgogCSMgUHJlLXNjYW4gdGhlIHBhdGNoIGxvb2tpbmcgZm9yIGFueSBfX3NldHVwIGRvY3VtZW50YXRpb24uCkBAIC0xMDI1LDkgKzEwOTEsMTQgQEAKIAkJCSMgZWRnZSBpcyBhIGNsb3NlIGNvbW1lbnQgdGhlbiB3ZSBtdXN0IGJlIGluIGEgY29tbWVudAogCQkJIyBhdCBjb250ZXh0IHN0YXJ0LgogCQkJbXkgJGVkZ2U7Ci0JCQlmb3IgKG15ICRsbiA9ICRsaW5lbnIgKyAxOyAkbG4gPCAoJGxpbmVuciArICRyZWFsY250KTsgJGxuKyspIHsKLQkJCQluZXh0IGlmICgkbGluZSA9fiAvXi0vKTsKLQkJCQkoJGVkZ2UpID0gKCRyYXdsaW5lc1skbG4gLSAxXSA9fiBtQCgvXCp8XCovKUApOworCQkJbXkgJGNudCA9ICRyZWFsY250OworCQkJZm9yIChteSAkbG4gPSAkbGluZW5yICsgMTsgJGNudCA+IDA7ICRsbisrKSB7CisJCQkJbmV4dCBpZiAoZGVmaW5lZCAkcmF3bGluZXNbJGxuIC0gMV0gJiYKKwkJCQkJICRyYXdsaW5lc1skbG4gLSAxXSA9fiAvXi0vKTsKKwkJCQkkY250LS07CisJCQkJI3ByaW50ICJSQVc8JHJhd2xpbmVzWyRsbiAtIDFdPlxuIjsKKwkJCQkoJGVkZ2UpID0gKGRlZmluZWQgJHJhd2xpbmVzWyRsbiAtIDFdICYmCisJCQkJCSRyYXdsaW5lc1skbG4gLSAxXSA9fiBtQCgvXCp8XCovKUApOwogCQkJCWxhc3QgaWYgKGRlZmluZWQgJGVkZ2UpOwogCQkJfQogCQkJaWYgKGRlZmluZWQgJGVkZ2UgJiYgJGVkZ2UgZXEgJyovJykgewpAQCAtMTA3NSw2ICsxMTQ2LDcgQEAKIAkJJGxpbmVucisrOwogCiAJCW15ICRyYXdsaW5lID0gJHJhd2xpbmVzWyRsaW5lbnIgLSAxXTsKKwkJbXkgJGh1bmtfbGluZSA9ICgkcmVhbGNudCAhPSAwKTsKIAogI2V4dHJhY3QgdGhlIGxpbmUgcmFuZ2UgaW4gdGhlIGZpbGUgYWZ0ZXIgdGhlIHBhdGNoIGlzIGFwcGxpZWQKIAkJaWYgKCRsaW5lPX4vXlxAXEAgLVxkKyg/OixcZCspPyBcKyhcZCspKCwoXGQrKSk/IFxAXEAvKSB7CkBAIC0xMDkwLDYgKzExNjIsNyBAQAogCQkJJHByZXZfdmFsdWVzID0gJ0UnOwogCiAJCQklc3VwcHJlc3NfaWZicmFjZXMgPSAoKTsKKwkJCSVzdXBwcmVzc193aGlsZXRyYWlsZXJzID0gKCk7CiAJCQluZXh0OwogCiAjIHRyYWNrIHRoZSBsaW5lIG51bWJlciBhcyB3ZSBtb3ZlIHRocm91Z2ggdGhlIGh1bmssIG5vdGUgdGhhdApAQCAtMTEyNSw3ICsxMTk4LDcgQEAKIAkJCSRyZWFsZmlsZSA9ICQxOwogCQkJJHJlYWxmaWxlID1+IHNAXlteL10qL0BAOwogCi0JCQlpZiAoJHJlYWxmaWxlID1+IG1AaW5jbHVkZS9hc20vQCkgeworCQkJaWYgKCRyZWFsZmlsZSA9fiBtQF5pbmNsdWRlL2FzbS9AKSB7CiAJCQkJRVJST1IoImRvIG5vdCBtb2RpZnkgZmlsZXMgaW4gaW5jbHVkZS9hc20sIGNoYW5nZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZmlsZXMgaW4gaW5jbHVkZS9hc20tPGFyY2hpdGVjdHVyZT5cbiIgLiAiJGhlcmUkcmF3bGluZVxuIik7CiAJCQl9CiAJCQluZXh0OwpAQCAtMTE1OSw2ICsxMjMyLDIwIEBACiAJCQkJJGhlcmVjdXJyKSBpZiAoISRlbWl0dGVkX2NvcnJ1cHQrKyk7CiAJCX0KIAorIyBDaGVjayBmb3IgYWJzb2x1dGUga2VybmVsIHBhdGhzLgorCQlpZiAoJHRyZWUpIHsKKwkJCXdoaWxlICgkbGluZSA9fiBteyg/Ol58XHMpKC9cUyopfWcpIHsKKwkJCQlteSAkZmlsZSA9ICQxOworCisJCQkJaWYgKCRmaWxlID1+IG17XiguKj8pKD86OlxkKykrOj8kfSAmJgorCQkJCSAgICBjaGVja19hYnNvbHV0ZV9maWxlKCQxLCAkaGVyZWN1cnIpKSB7CisJCQkJCSMKKwkJCQl9IGVsc2UgeworCQkJCQljaGVja19hYnNvbHV0ZV9maWxlKCRmaWxlLCAkaGVyZWN1cnIpOworCQkJCX0KKwkJCX0KKwkJfQorCiAjIFVURi04IHJlZ2V4IGZvdW5kIGF0IGh0dHA6Ly93d3cudzMub3JnL0ludGVybmF0aW9uYWwvcXVlc3Rpb25zL3FhLWZvcm1zLXV0Zi04LmVuLnBocAogCQlpZiAoKCRyZWFsZmlsZSA9fiAvXiQvIHx8ICRsaW5lID1+IC9eXCsvKSAmJgogCQkgICAgJHJhd2xpbmUgIX4gbS9eJFVURjgqJC8pIHsKQEAgLTExNzEsMTEgKzEyNTgsOCBAQAogCQkJRVJST1IoIkludmFsaWQgVVRGLTgsIHBhdGNoIGFuZCBjb21taXQgbWVzc2FnZSBzaG91bGQgYmUgZW5jb2RlZCBpbiBVVEYtOFxuIiAuICRoZXJlcHRyKTsKIAkJfQogCi0jaWdub3JlIGxpbmVzIGJlaW5nIHJlbW92ZWQKLQkJaWYgKCRsaW5lPX4vXi0vKSB7bmV4dDt9Ci0KLSMgY2hlY2sgd2UgYXJlIGluIGEgdmFsaWQgc291cmNlIGZpbGUgaWYgbm90IHRoZW4gaWdub3JlIHRoaXMgaHVuawotCQluZXh0IGlmICgkcmVhbGZpbGUgIX4gL1wuKGh8Y3xzfFN8cGx8c2gpJC8pOworIyBpZ25vcmUgbm9uLWh1bmsgbGluZXMgYW5kIGxpbmVzIGJlaW5nIHJlbW92ZWQKKwkJbmV4dCBpZiAoISRodW5rX2xpbmUgfHwgJGxpbmUgPX4gL14tLyk7CiAKICN0cmFpbGluZyB3aGl0ZXNwYWNlCiAJCWlmICgkbGluZSA9fiAvXlwrLipcMDE1LykgewpAQCAtMTE4Niw2ICsxMjcwLDEwIEBACiAJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJHJhd2xpbmUpIC4gIlxuIjsKIAkJCUVSUk9SKCJ0cmFpbGluZyB3aGl0ZXNwYWNlXG4iIC4gJGhlcmV2ZXQpOwogCQl9CisKKyMgY2hlY2sgd2UgYXJlIGluIGEgdmFsaWQgc291cmNlIGZpbGUgaWYgbm90IHRoZW4gaWdub3JlIHRoaXMgaHVuaworCQluZXh0IGlmICgkcmVhbGZpbGUgIX4gL1wuKGh8Y3xzfFN8cGx8c2gpJC8pOworCiAjODAgY29sdW1uIGxpbWl0CiAJCWlmICgkbGluZSA9fiAvXlwrLyAmJiAkcHJldnJhd2xpbmUgIX4gL1wvXCpcKi8gJiYKIAkJICAgICRyYXdsaW5lICF+IC9eLlxzKlwqXHMqXEAkSWRlbnRccy8gJiYKQEAgLTEyMDAsOCArMTI4OCw4IEBACiAJCQlXQVJOKCJhZGRpbmcgYSBsaW5lIHdpdGhvdXQgbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIiAuICRoZXJlY3Vycik7CiAJCX0KIAotIyBjaGVjayB3ZSBhcmUgaW4gYSB2YWxpZCBzb3VyY2UgZmlsZSAqLltoY10gaWYgbm90IHRoZW4gaWdub3JlIHRoaXMgaHVuawotCQluZXh0IGlmICgkcmVhbGZpbGUgIX4gL1wuW2hjXSQvKTsKKyMgY2hlY2sgd2UgYXJlIGluIGEgdmFsaWQgc291cmNlIGZpbGUgQyBvciBwZXJsIGlmIG5vdCB0aGVuIGlnbm9yZSB0aGlzIGh1bmsKKwkJbmV4dCBpZiAoJHJlYWxmaWxlICF+IC9cLihofGN8cGwpJC8pOwogCiAjIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGFueSB0YWJzIG11c3QgY29tZSBmaXJzdCBhbmQgYW55dGhpbmcKICMgbW9yZSB0aGFuIDggbXVzdCB1c2UgdGFicy4KQEAgLTEyMTEsMTUgKzEyOTksMTggQEAKIAkJCUVSUk9SKCJjb2RlIGluZGVudCBzaG91bGQgdXNlIHRhYnMgd2hlcmUgcG9zc2libGVcbiIgLiAkaGVyZXZldCk7CiAJCX0KIAorIyBjaGVjayB3ZSBhcmUgaW4gYSB2YWxpZCBDIHNvdXJjZSBmaWxlIGlmIG5vdCB0aGVuIGlnbm9yZSB0aGlzIGh1bmsKKwkJbmV4dCBpZiAoJHJlYWxmaWxlICF+IC9cLihofGMpJC8pOworCiAjIGNoZWNrIGZvciBSQ1MvQ1ZTIHJldmlzaW9uIG1hcmtlcnMKIAkJaWYgKCRyYXdsaW5lID1+IC9eXCsuKlwkKFJldmlzaW9ufExvZ3xJZCkoPzpcJHwpLykgewogCQkJV0FSTigiQ1ZTIHN0eWxlIGtleXdvcmQgbWFya2VycywgdGhlc2Ugd2lsbCBfbm90XyBiZSB1cGRhdGVkXG4iLiAkaGVyZWN1cnIpOwogCQl9CiAKICMgQ2hlY2sgZm9yIHBvdGVudGlhbCAnYmFyZScgdHlwZXMKLQkJbXkgKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0KTsKKwkJbXkgKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQpOwogCQlpZiAoJHJlYWxjbnQgJiYgJGxpbmUgPX4gLy5ccypcUy8pIHsKLQkJCSgkc3RhdCwgJGNvbmQsICRsaW5lX25yX25leHQsICRyZW1haW5fbmV4dCkgPQorCQkJKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQpID0KIAkJCQljdHhfc3RhdGVtZW50X2Jsb2NrKCRsaW5lbnIsICRyZWFsY250LCAwKTsKIAkJCSRzdGF0ID1+IHMvXG4uL1xuIC9nOwogCQkJJGNvbmQgPX4gcy9cbi4vXG4gL2c7CkBAIC0xMjQwLDcgKzEzMzEsNyBAQAogCQkJCXBvc3NpYmxlKCR0eXBlLCAiQToiIC4gJHMpOwogCiAJCQkjIGRlZmluaXRpb25zIGluIGdsb2JhbCBzY29wZSBjYW4gb25seSBzdGFydCB3aXRoIHR5cGVzCi0JCQl9IGVsc2lmICgkcyA9fiAvXi4oPzokU3RvcmFnZVxzKyk/KD86JElubGluZVxzKyk/KD86Y29uc3RccyspPygkSWRlbnQpXGIvcykgeworCQkJfSBlbHNpZiAoJHMgPX4gL14uKD86JFN0b3JhZ2VccyspPyg/OiRJbmxpbmVccyspPyg/OmNvbnN0XHMrKT8oJElkZW50KVxiXHMqKD8hOikvcykgewogCQkJCXBvc3NpYmxlKCQxLCAiQjoiIC4gJHMpOwogCQkJfQogCkBAIC0xMjk0LDEwICsxMzg1LDYgQEAKIAkJCQlFUlJPUigic3dpdGNoIGFuZCBjYXNlIHNob3VsZCBiZSBhdCB0aGUgc2FtZSBpbmRlbnRcbiRoZXJlbGluZSRlcnIiKTsKIAkJCX0KIAkJfQotCQlpZiAoJGxpbmUgPX4gL14uXHMqKD86Y2FzZVxzKi4qfGRlZmF1bHRccyopOi9nICYmCi0JCSAgICAkbGluZSAhfiAvXEcoPzpccyp7KT8oPzpccyokOyopKD86XHMqXFwpP1xzKiQvZykgewotCQkJRVJST1IoInRyYWlsaW5nIHN0YXRlbWVudHMgc2hvdWxkIGJlIG9uIG5leHQgbGluZVxuIiAuICRoZXJlY3Vycik7Ci0JCX0KIAogIyBpZi93aGlsZS9ldGMgYnJhY2UgZG8gbm90IGdvIG9uIG5leHQgbGluZSwgdW5sZXNzIGRlZmluaW5nIGEgZG8gd2hpbGUgbG9vcCwKICMgb3IgaWYgdGhhdCBicmFjZSBvbiB0aGUgbmV4dCBsaW5lIGlzIGZvciBzb21ldGhpbmcgZWxzZQpAQCAtMTMzOCw2ICsxNDI1LDkxIEBACiAJCQl9CiAJCX0KIAorIyBDaGVjayByZWxhdGl2ZSBpbmRlbnQgZm9yIGNvbmRpdGlvbmFscyBhbmQgYmxvY2tzLgorCQlpZiAoJGxpbmUgPX4gL1xiKD86KD86aWZ8d2hpbGV8Zm9yKVxzKlwofGRvXGIpLyAmJiAkbGluZSAhfiAvXi5ccyojLyAmJiAkbGluZSAhfiAvXH1ccyp3aGlsZVxzKi8pIHsKKwkJCW15ICgkcywgJGMpID0gKCRzdGF0LCAkY29uZCk7CisKKwkJCXN1YnN0cigkcywgMCwgbGVuZ3RoKCRjKSwgJycpOworCisJCQkjIE1ha2Ugc3VyZSB3ZSByZW1vdmUgdGhlIGxpbmUgcHJlZml4ZXMgYXMgd2UgaGF2ZQorCQkJIyBub25lIG9uIHRoZSBmaXJzdCBsaW5lLCBhbmQgYXJlIGdvaW5nIHRvIHJlYWRkIHRoZW0KKwkJCSMgd2hlcmUgbmVjZXNzYXJ5LgorCQkJJHMgPX4gcy9cbi4vXG4vZ3M7CisKKwkJCSMgRmluZCBvdXQgaG93IGxvbmcgdGhlIGNvbmRpdGlvbmFsIGFjdHVhbGx5IGlzLgorCQkJbXkgQG5ld2xpbmVzID0gKCRjID1+IC9cbi9ncyk7CisJCQlteSAkY29uZF9saW5lcyA9IDEgKyAkI25ld2xpbmVzOworCisJCQkjIFdlIHdhbnQgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgaW5zaWRlIHRoZSBibG9jaworCQkJIyBzdGFydGluZyBhdCB0aGUgZW5kIG9mIHRoZSBjb25kaXRpb25hbCwgc28gcmVtb3ZlOgorCQkJIyAgMSkgYW55IGJsYW5rIGxpbmUgdGVybWluYXRpb24KKwkJCSMgIDIpIGFueSBvcGVuaW5nIGJyYWNlIHsgb24gZW5kIG9mIHRoZSBsaW5lCisJCQkjICAzKSBhbnkgZG8gKC4uLikgeworCQkJbXkgJGNvbnRpbnVhdGlvbiA9IDA7CisJCQlteSAkY2hlY2sgPSAwOworCQkJJHMgPX4gcy9eLipcYmRvXGIvLzsKKwkJCSRzID1+IHMvXlxzKnsvLzsKKwkJCWlmICgkcyA9fiBzL15ccypcXC8vKSB7CisJCQkJJGNvbnRpbnVhdGlvbiA9IDE7CisJCQl9CisJCQlpZiAoJHMgPX4gcy9eXHMqP1xuLy8pIHsKKwkJCQkkY2hlY2sgPSAxOworCQkJCSRjb25kX2xpbmVzKys7CisJCQl9CisKKwkJCSMgQWxzbyBpZ25vcmUgYSBsb29wIGNvbnN0cnVjdCBhdCB0aGUgZW5kIG9mIGEKKwkJCSMgcHJlcHJvY2Vzc29yIHN0YXRlbWVudC4KKwkJCWlmICgoJHByZXZsaW5lID1+IC9eLlxzKiNccypkZWZpbmVccy8gfHwKKwkJCSAgICAkcHJldmxpbmUgPX4gL1xcXHMqJC8pICYmICRjb250aW51YXRpb24gPT0gMCkgeworCQkJCSRjaGVjayA9IDA7CisJCQl9CisKKwkJCW15ICRjb25kX3B0ciA9IC0xOworCQkJJGNvbnRpbnVhdGlvbiA9IDA7CisJCQl3aGlsZSAoJGNvbmRfcHRyICE9ICRjb25kX2xpbmVzKSB7CisJCQkJJGNvbmRfcHRyID0gJGNvbmRfbGluZXM7CisKKwkJCQkjIElmIHdlIHNlZSBhbiAjZWxzZS8jZWxpZiB0aGVuIHRoZSBjb2RlCisJCQkJIyBpcyBub3QgbGluZWFyLgorCQkJCWlmICgkcyA9fiAvXlxzKlwjXHMqKD86ZWxzZXxlbGlmKS8pIHsKKwkJCQkJJGNoZWNrID0gMDsKKwkJCQl9CisKKwkJCQkjIElnbm9yZToKKwkJCQkjICAxKSBibGFuayBsaW5lcywgdGhleSBzaG91bGQgYmUgYXQgMCwKKwkJCQkjICAyKSBwcmVwcm9jZXNzb3IgbGluZXMsIGFuZAorCQkJCSMgIDMpIGxhYmVscy4KKwkJCQlpZiAoJGNvbnRpbnVhdGlvbiB8fAorCQkJCSAgICAkcyA9fiAvXlxzKj9cbi8gfHwKKwkJCQkgICAgJHMgPX4gL15ccyojXHMqPy8gfHwKKwkJCQkgICAgJHMgPX4gL15ccyokSWRlbnRccyo6LykgeworCQkJCQkkY29udGludWF0aW9uID0gKCRzID1+IC9eLio/XFxcbi8pID8gMSA6IDA7CisJCQkJCSRzID1+IHMvXi4qP1xuLy87CisJCQkJCSRjb25kX2xpbmVzKys7CisJCQkJfQorCQkJfQorCisJCQlteSAodW5kZWYsICRzaW5kZW50KSA9IGxpbmVfc3RhdHMoIisiIC4gJHMpOworCQkJbXkgJHN0YXRfcmVhbCA9IHJhd19saW5lKCRsaW5lbnIsICRjb25kX2xpbmVzKTsKKworCQkJIyBDaGVjayBpZiBlaXRoZXIgb2YgdGhlc2UgbGluZXMgYXJlIG1vZGlmaWVkLCBlbHNlCisJCQkjIHRoaXMgaXMgbm90IHRoaXMgcGF0Y2gncyBmYXVsdC4KKwkJCWlmICghZGVmaW5lZCgkc3RhdF9yZWFsKSB8fAorCQkJICAgICRzdGF0ICF+IC9eXCsvICYmICRzdGF0X3JlYWwgIX4gL15cKy8pIHsKKwkJCQkkY2hlY2sgPSAwOworCQkJfQorCQkJaWYgKGRlZmluZWQoJHN0YXRfcmVhbCkgJiYgJGNvbmRfbGluZXMgPiAxKSB7CisJCQkJJHN0YXRfcmVhbCA9ICJbLi4uXVxuJHN0YXRfcmVhbCI7CisJCQl9CisKKwkJCSNwcmludCAibGluZTwkbGluZT4gcHJldmxpbmU8JHByZXZsaW5lPiBpbmRlbnQ8JGluZGVudD4gc2luZGVudDwkc2luZGVudD4gY2hlY2s8JGNoZWNrPiBjb250aW51YXRpb248JGNvbnRpbnVhdGlvbj4gczwkcz4gY29uZF9saW5lczwkY29uZF9saW5lcz4gc3RhdF9yZWFsPCRzdGF0X3JlYWw+IHN0YXQ8JHN0YXQ+XG4iOworCisJCQlpZiAoJGNoZWNrICYmICgoJHNpbmRlbnQgJSA4KSAhPSAwIHx8CisJCQkgICAgKCRzaW5kZW50IDw9ICRpbmRlbnQgJiYgJHMgbmUgJycpKSkgeworCQkJCVdBUk4oInN1c3BlY3QgY29kZSBpbmRlbnQgZm9yIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgKCRpbmRlbnQsICRzaW5kZW50KVxuIiAuICRoZXJlY3VyciAuICIkc3RhdF9yZWFsXG4iKTsKKwkJCX0KKwkJfQorCiAJCSMgVHJhY2sgdGhlICd2YWx1ZXMnIGFjcm9zcyBjb250ZXh0IGFuZCBhZGRlZCBsaW5lcy4KIAkJbXkgJG9wbGluZSA9ICRsaW5lOyAkb3BsaW5lID1+IHMvXi4vIC87CiAJCW15ICgkY3Vycl92YWx1ZXMsICRjdXJyX3ZhcnMpID0KQEAgLTEzNjMsNiArMTUzNSwxNSBAQAogCQkJfQogCQkJbmV4dDsKIAkJfQorIyBURVNUOiBhbGxvdyBkaXJlY3QgdGVzdGluZyBvZiB0aGUgYXR0cmlidXRlIG1hdGNoZXIuCisJCWlmICgkZGJnX2F0dHIpIHsKKwkJCWlmICgkbGluZSA9fiAvXi5ccyokQXR0cmlidXRlXHMqJC8pIHsKKwkJCQlFUlJPUigiVEVTVDogaXMgYXR0clxuIiAuICRoZXJlY3Vycik7CisJCQl9IGVsc2lmICgkZGJnX2F0dHIgPiAxICYmICRsaW5lID1+IC9eLisoJEF0dHJpYnV0ZSkvKSB7CisJCQkJRVJST1IoIlRFU1Q6IGlzIG5vdCBhdHRyICgkMSBpcylcbiIuICRoZXJlY3Vycik7CisJCQl9CisJCQluZXh0OworCQl9CiAKICMgY2hlY2sgZm9yIGluaXRpYWxpc2F0aW9uIHRvIGFnZ3JlZ2F0ZXMgb3BlbiBicmFjZSBvbiB0aGUgbmV4dCBsaW5lCiAJCWlmICgkcHJldmxpbmUgPX4gLyREZWNsYXJlXHMqJElkZW50XHMqPVxzKiQvICYmCkBAIC0xMzk1LDEzICsxNTc2LDE0IEBACiAJCWlmICgoJGxpbmUgPX4gL0VYUE9SVF9TWU1CT0wuKlwoKC4qKVwpLykgfHwKIAkJICAgICgkbGluZSA9fiAvRVhQT1JUX1VOVVNFRF9TWU1CT0wuKlwoKC4qKVwpLykpIHsKIAkJCW15ICRuYW1lID0gJDE7Ci0JCQlpZiAoKCRwcmV2bGluZSAhfiAvXn0vKSAmJgotCQkJICAgKCRwcmV2bGluZSAhfiAvXlwrfS8pICYmCi0JCQkgICAoJHByZXZsaW5lICF+IC9eIH0vKSAmJgotCQkJICAgKCRwcmV2bGluZSAhfiAvXi5ERUNMQVJFXyRJZGVudFwoXFEkbmFtZVxFXCkvKSAmJgotCQkJICAgKCRwcmV2bGluZSAhfiAvXi5MSVNUX0hFQURcKFxRJG5hbWVcRVwpLykgJiYKLQkJCSAgICgkcHJldmxpbmUgIX4gL14uJFR5cGVccypcKFxzKlwqXHMqXFEkbmFtZVxFXHMqXClccypcKC8pICYmCi0JCQkgICAoJHByZXZsaW5lICF+IC9cYlxRJG5hbWVcRSg/OlxzKyRBdHRyaWJ1dGUpP1xzKig/Ojt8PXxcWykvKSkgeworCQkJaWYgKCRwcmV2bGluZSAhfiAvKD86CisJCQkJXi59fAorCQkJCV4uREVGSU5FXyRJZGVudFwoXFEkbmFtZVxFXCl8CisJCQkJXi5ERUNMQVJFXyRJZGVudFwoXFEkbmFtZVxFXCl8CisJCQkJXi5MSVNUX0hFQURcKFxRJG5hbWVcRVwpfAorCQkJCV4uJFR5cGVccypcKFxzKlwqXHMqXFEkbmFtZVxFXHMqXClccypcKHwKKwkJCQlcYlxRJG5hbWVcRSg/OlxzKyRBdHRyaWJ1dGUpP1xzKig/Ojt8PXxcWykKKwkJCSAgICApL3gpIHsKIAkJCQlXQVJOKCJFWFBPUlRfU1lNQk9MKGZvbyk7IHNob3VsZCBpbW1lZGlhdGVseSBmb2xsb3cgaXRzIGZ1bmN0aW9uL3ZhcmlhYmxlXG4iIC4gJGhlcmVjdXJyKTsKIAkJCX0KIAkJfQpAQCAtMTQyMiw2ICsxNjA0LDcgQEAKIAkJaWYgKCRsaW5lID1+IC9cYnR5cGVkZWZccy8gJiYKIAkJICAgICRsaW5lICF+IC9cYnR5cGVkZWZccyskVHlwZVxzK1woXHMqXCo/JElkZW50XHMqXClccypcKC8gJiYKIAkJICAgICRsaW5lICF+IC9cYnR5cGVkZWZccyskVHlwZVxzKyRJZGVudFxzKlwoLyAmJgorCQkgICAgJGxpbmUgIX4gL1xiJHR5cGVUeXBlZGVmc1xiLyAmJgogCQkgICAgJGxpbmUgIX4gL1xiX19iaXR3aXNlKD86X198KVxiLykgewogCQkJV0FSTigiZG8gbm90IGFkZCBuZXcgdHlwZWRlZnNcbiIgLiAkaGVyZWN1cnIpOwogCQl9CkBAIC0xNDkzLDExICsxNjc2LDEzIEBACiAKICMgY2hlY2sgZm9yIHNwYWNpbmcgcm91bmQgc3F1YXJlIGJyYWNrZXRzOyBhbGxvd2VkOgogIyAgMS4gd2l0aCBhIHR5cGUgb24gdGhlIGxlZnQgLS0gaW50IFtdIGE7Ci0jICAyLiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBmb3Igc2xpY2UgaW5pdGlhbGlzZXJzIC0tIFswLi4xMF0gPSA1LAorIyAgMi4gYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgZm9yIHNsaWNlIGluaXRpYWxpc2VycyAtLSBbMC4uLjEwXSA9IDUsCisjICAzLiBpbnNpZGUgYSBjdXJseSBicmFjZSAtLSA9IHsgWzAuLi4xMF0gPSA1IH0KIAkJd2hpbGUgKCRsaW5lID1+IC8oLio/XHMpXFsvZykgewogCQkJbXkgKCR3aGVyZSwgJHByZWZpeCkgPSAoJC1bMV0sICQxKTsKIAkJCWlmICgkcHJlZml4ICF+IC8kVHlwZVxzKyQvICYmCi0JCQkgICAgKCR3aGVyZSAhPSAwIHx8ICRwcmVmaXggIX4gL14uXHMrJC8pKSB7CisJCQkgICAgKCR3aGVyZSAhPSAwIHx8ICRwcmVmaXggIX4gL14uXHMrJC8pICYmCisJCQkgICAgJHByZWZpeCAhfiAve1xzKyQvKSB7CiAJCQkJRVJST1IoInNwYWNlIHByb2hpYml0ZWQgYmVmb3JlIG9wZW4gc3F1YXJlIGJyYWNrZXQgJ1snXG4iIC4gJGhlcmVjdXJyKTsKIAkJCX0KIAkJfQpAQCAtMTYzMiw3ICsxODE3LDcgQEAKIAkJCQkjIHVuYXJ5IG9wZXJhdG9yLCBvciBhIGNhc3QKIAkJCQl9IGVsc2lmICgkb3AgZXEgJyEnIHx8ICRvcCBlcSAnficgfHwKIAkJCQkJICRvcHYgZXEgJypVJyB8fCAkb3B2IGVxICctVScgfHwKLQkJCQkJICRvcHYgZXEgJyZVJykgeworCQkJCQkgJG9wdiBlcSAnJlUnIHx8ICRvcHYgZXEgJyYmVScpIHsKIAkJCQkJaWYgKCRjdHggIX4gL1tXRUJDXXguLyAmJiAkY2EgIX4gLyg/OlwpfCF8fnxcKnwtfFwmfFx8fFwrXCt8XC1cLXxceykkLykgewogCQkJCQkJRVJST1IoInNwYWNlIHJlcXVpcmVkIGJlZm9yZSB0aGF0ICckb3AnICRhdFxuIiAuICRoZXJlcHRyKTsKIAkJCQkJfQpAQCAtMTc4NSw3ICsxOTcwLDI2IEBACiAKICMgQ2hlY2sgZm9yIGlsbGVnYWwgYXNzaWdubWVudCBpbiBpZiBjb25kaXRpb25hbCAtLSBhbmQgY2hlY2sgZm9yIHRyYWlsaW5nCiAjIHN0YXRlbWVudHMgYWZ0ZXIgdGhlIGNvbmRpdGlvbmFsLgotCQlpZiAoJGxpbmUgPX4gL1xiKD86aWZ8d2hpbGV8Zm9yKVxzKlwoLyAmJiAkbGluZSAhfiAvXi5ccyojLykgeworCQlpZiAoJGxpbmUgPX4gL2RvXHMqKD8heykvKSB7CisJCQlteSAoJHN0YXRfbmV4dCkgPSBjdHhfc3RhdGVtZW50X2Jsb2NrKCRsaW5lX25yX25leHQsCisJCQkJCQkkcmVtYWluX25leHQsICRvZmZfbmV4dCk7CisJCQkkc3RhdF9uZXh0ID1+IHMvXG4uL1xuIC9nOworCQkJIyNwcmludCAic3RhdDwkc3RhdD4gc3RhdF9uZXh0PCRzdGF0X25leHQ+XG4iOworCisJCQlpZiAoJHN0YXRfbmV4dCA9fiAvXlxzKndoaWxlXGIvKSB7CisJCQkJIyBJZiB0aGUgc3RhdGVtZW50IGNhcnJpZXMgbGVhZGluZyBuZXdsaW5lcywKKwkJCQkjIHRoZW4gY291bnQgdGhvc2UgYXMgb2Zmc2V0cy4KKwkJCQlteSAoJHdoaXRlc3BhY2UpID0KKwkJCQkJKCRzdGF0X25leHQgPX4gL14oKD86XHMqXG5bKy1dKSpccyopL3MpOworCQkJCW15ICRvZmZzZXQgPQorCQkJCQlzdGF0ZW1lbnRfcmF3bGluZXMoJHdoaXRlc3BhY2UpIC0gMTsKKworCQkJCSRzdXBwcmVzc193aGlsZXRyYWlsZXJzeyRsaW5lX25yX25leHQgKworCQkJCQkJCQkkb2Zmc2V0fSA9IDE7CisJCQl9CisJCX0KKwkJaWYgKCFkZWZpbmVkICRzdXBwcmVzc193aGlsZXRyYWlsZXJzeyRsaW5lbnJ9ICYmCisJCSAgICAkbGluZSA9fiAvXGIoPzppZnx3aGlsZXxmb3IpXHMqXCgvICYmICRsaW5lICF+IC9eLlxzKiMvKSB7CiAJCQlteSAoJHMsICRjKSA9ICgkc3RhdCwgJGNvbmQpOwogCiAJCQlpZiAoJGMgPX4gL1xiaWZccypcKC4qW148PiE9XT1bXj1dLiovKSB7CkBAIC0xODAwLDU3ICsyMDA0LDE2IEBACiAJCQlpZiAobGVuZ3RoKCRjKSAmJiAkcyAhfiAvXlxzKns/XHMqXFwqXHMqJC8gJiYKIAkJCSAgICAkYyAhfiAvfVxzKndoaWxlXHMqLykKIAkJCXsKLQkJCQlFUlJPUigidHJhaWxpbmcgc3RhdGVtZW50cyBzaG91bGQgYmUgb24gbmV4dCBsaW5lXG4iIC4gJGhlcmVjdXJyKTsKLQkJCX0KLQkJfQorCQkJCSMgRmluZCBvdXQgaG93IGxvbmcgdGhlIGNvbmRpdGlvbmFsIGFjdHVhbGx5IGlzLgorCQkJCW15IEBuZXdsaW5lcyA9ICgkYyA9fiAvXG4vZ3MpOworCQkJCW15ICRjb25kX2xpbmVzID0gMSArICQjbmV3bGluZXM7CiAKLSMgQ2hlY2sgcmVsYXRpdmUgaW5kZW50IGZvciBjb25kaXRpb25hbHMgYW5kIGJsb2Nrcy4KLQkJaWYgKCRsaW5lID1+IC9cYig/Oig/OmlmfHdoaWxlfGZvcilccypcKHxkb1xiKS8gJiYgJGxpbmUgIX4gL14uXHMqIy8gJiYgJGxpbmUgIX4gL1x9XHMqd2hpbGVccyovKSB7Ci0JCQlteSAoJHMsICRjKSA9ICgkc3RhdCwgJGNvbmQpOworCQkJCW15ICRzdGF0X3JlYWwgPSByYXdfbGluZSgkbGluZW5yLCAkY29uZF9saW5lcyk7CisJCQkJaWYgKGRlZmluZWQoJHN0YXRfcmVhbCkgJiYgJGNvbmRfbGluZXMgPiAxKSB7CisJCQkJCSRzdGF0X3JlYWwgPSAiWy4uLl1cbiRzdGF0X3JlYWwiOworCQkJCX0KIAotCQkJc3Vic3RyKCRzLCAwLCBsZW5ndGgoJGMpLCAnJyk7Ci0KLQkJCSMgTWFrZSBzdXJlIHdlIHJlbW92ZSB0aGUgbGluZSBwcmVmaXhlcyBhcyB3ZSBoYXZlCi0JCQkjIG5vbmUgb24gdGhlIGZpcnN0IGxpbmUsIGFuZCBhcmUgZ29pbmcgdG8gcmVhZGQgdGhlbQotCQkJIyB3aGVyZSBuZWNlc3NhcnkuCi0JCQkkcyA9fiBzL1xuLi9cbi9nczsKLQotCQkJIyBXZSB3YW50IHRvIGNoZWNrIHRoZSBmaXJzdCBsaW5lIGluc2lkZSB0aGUgYmxvY2sKLQkJCSMgc3RhcnRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgY29uZGl0aW9uYWwsIHNvIHJlbW92ZToKLQkJCSMgIDEpIGFueSBibGFuayBsaW5lIHRlcm1pbmF0aW9uCi0JCQkjICAyKSBhbnkgb3BlbmluZyBicmFjZSB7IG9uIGVuZCBvZiB0aGUgbGluZQotCQkJIyAgMykgYW55IGRvICguLi4pIHsKLQkJCW15ICRjb250aW51YXRpb24gPSAwOwotCQkJbXkgJGNoZWNrID0gMDsKLQkJCSRzID1+IHMvXi4qXGJkb1xiLy87Ci0JCQkkcyA9fiBzL15ccyp7Ly87Ci0JCQlpZiAoJHMgPX4gcy9eXHMqXFwvLykgewotCQkJCSRjb250aW51YXRpb24gPSAxOwotCQkJfQotCQkJaWYgKCRzID1+IHMvXlxzKlxuLy8pIHsKLQkJCQkkY2hlY2sgPSAxOwotCQkJfQotCi0JCQkjIEFsc28gaWdub3JlIGEgbG9vcCBjb25zdHJ1Y3QgYXQgdGhlIGVuZCBvZiBhCi0JCQkjIHByZXByb2Nlc3NvciBzdGF0ZW1lbnQuCi0JCQlpZiAoKCRwcmV2bGluZSA9fiAvXi5ccyojXHMqZGVmaW5lXHMvIHx8Ci0JCQkgICAgJHByZXZsaW5lID1+IC9cXFxzKiQvKSAmJiAkY29udGludWF0aW9uID09IDApIHsKLQkJCQkkY2hlY2sgPSAwOwotCQkJfQotCi0JCQkjIElnbm9yZSB0aGUgY3VycmVudCBsaW5lIGlmIGl0cyBpcyBhIHByZXByb2Nlc3NvcgotCQkJIyBsaW5lLgotCQkJaWYgKCRzID1+IC9eXHMqI1xzKi8pIHsKLQkJCQkkY2hlY2sgPSAwOwotCQkJfQotCi0JCQlteSAodW5kZWYsICRzaW5kZW50KSA9IGxpbmVfc3RhdHMoIisiIC4gJHMpOwotCi0JCQkjI3ByaW50ICJsaW5lPCRsaW5lPiBwcmV2bGluZTwkcHJldmxpbmU+IGluZGVudDwkaW5kZW50PiBzaW5kZW50PCRzaW5kZW50PiBjaGVjazwkY2hlY2s+IGNvbnRpbnVhdGlvbjwkY29udGludWF0aW9uPiBzPCRzPlxuIjsKLQotCQkJaWYgKCRjaGVjayAmJiAoKCRzaW5kZW50ICUgOCkgIT0gMCB8fAotCQkJICAgICgkc2luZGVudCA8PSAkaW5kZW50ICYmICRzIG5lICcnKSkpIHsKLQkJCQlXQVJOKCJzdXNwZWN0IGNvZGUgaW5kZW50IGZvciBjb25kaXRpb25hbCBzdGF0ZW1lbnRzXG4iIC4gJGhlcmVjdXJyKTsKKwkJCQlFUlJPUigidHJhaWxpbmcgc3RhdGVtZW50cyBzaG91bGQgYmUgb24gbmV4dCBsaW5lXG4iIC4gJGhlcmVjdXJyIC4gJHN0YXRfcmVhbCk7CiAJCQl9CiAJCX0KIApAQCAtMTg3Nyw2ICsyMDQwLDE1IEBACiAJCQkJRVJST1IoInRyYWlsaW5nIHN0YXRlbWVudHMgc2hvdWxkIGJlIG9uIG5leHQgbGluZVxuIiAuICRoZXJlY3Vycik7CiAJCQl9CiAJCX0KKyMgY2FzZSBhbmQgZGVmYXVsdCBzaG91bGQgbm90IGhhdmUgZ2VuZXJhbCBzdGF0ZW1lbnRzIGFmdGVyIHRoZW0KKwkJaWYgKCRsaW5lID1+IC9eLlxzKig/OmNhc2VccyouKnxkZWZhdWx0XHMqKTovZyAmJgorCQkgICAgJGxpbmUgIX4gL1xHKD86CisJCQkoPzpccyokOyopKD86XHMqeyk/KD86XHMqJDsqKSg/OlxzKlxcKT9ccyokfAorCQkJXHMqcmV0dXJuXHMrCisJCSAgICApL3hnKQorCQl7CisJCQlFUlJPUigidHJhaWxpbmcgc3RhdGVtZW50cyBzaG91bGQgYmUgb24gbmV4dCBsaW5lXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQogCiAJCSMgQ2hlY2sgZm9yIH08bmw+ZWxzZSB7LCB0aGVzZSBtdXN0IGJlIGF0IHRoZSBzYW1lCiAJCSMgaW5kZW50IGxldmVsIHRvIGJlIHJlbGV2YW50IHRvIGVhY2ggb3RoZXIuCkBAIC0xOTEzLDEyICsyMDg1LDE3IEBACiAKICN3YXJuIGlmIDxhc20vZm9vLmg+IGlzICNpbmNsdWRlZCBhbmQgPGxpbnV4L2Zvby5oPiBpcyBhdmFpbGFibGUgKHVzZXMgUkFXIGxpbmUpCiAJCWlmICgkdHJlZSAmJiAkcmF3bGluZSA9fiBte14uXHMqXCNccyppbmNsdWRlXHMqXDxhc21cLyguKilcLmhcPn0pIHsKLQkJCW15ICRjaGVja2ZpbGUgPSAiaW5jbHVkZS9saW51eC8kMS5oIjsKLQkJCWlmICgtZiAiJHJvb3QvJGNoZWNrZmlsZSIgJiYgJHJlYWxmaWxlIG5lICRjaGVja2ZpbGUgJiYKKwkJCW15ICRmaWxlID0gIiQxLmgiOworCQkJbXkgJGNoZWNrZmlsZSA9ICJpbmNsdWRlL2xpbnV4LyRmaWxlIjsKKwkJCWlmICgtZiAiJHJvb3QvJGNoZWNrZmlsZSIgJiYKKwkJCSAgICAkcmVhbGZpbGUgbmUgJGNoZWNrZmlsZSAmJgogCQkJICAgICQxIG5lICdpcnEnKQogCQkJewotCQkJCVdBUk4oIlVzZSAjaW5jbHVkZSA8bGludXgvJDEuaD4gaW5zdGVhZCBvZiA8YXNtLyQxLmg+XG4iIC4KLQkJCQkJJGhlcmVjdXJyKTsKKwkJCQlpZiAoJHJlYWxmaWxlID1+IG17XmFyY2gvfSkgeworCQkJCQlDSEsoIkNvbnNpZGVyIHVzaW5nICNpbmNsdWRlIDxsaW51eC8kZmlsZT4gaW5zdGVhZCBvZiA8YXNtLyRmaWxlPlxuIiAuICRoZXJlY3Vycik7CisJCQkJfSBlbHNlIHsKKwkJCQkJV0FSTigiVXNlICNpbmNsdWRlIDxsaW51eC8kZmlsZT4gaW5zdGVhZCBvZiA8YXNtLyRmaWxlPlxuIiAuICRoZXJlY3Vycik7CisJCQkJfQogCQkJfQogCQl9CiAKQEAgLTE5NTMsOCArMjEzMCw4IEBACiAJCQkjIEV4dHJhY3QgdGhlIHJlbWFpbmRlciBvZiB0aGUgZGVmaW5lIChpZiBhbnkpIGFuZAogCQkJIyByaXAgb2ZmIHN1cnJvdW5kaW5nIHNwYWNlcywgYW5kIHRyYWlsaW5nIFwncy4KIAkJCSRyZXN0ID0gJyc7Ci0JCQl3aGlsZSAoJG9mZiAhPSAwIHx8ICgkY250ID4gMCAmJiAkcmVzdCA9fiAvKD86XnxcXClccyokLykpIHsKLQkJCQkjcHJpbnQgIkFERElORyAkb2ZmIDwiIC4gc3Vic3RyKCRsaW5lc1skbG4gLSAxXSwgJG9mZikgLiAiPlxuIjsKKwkJCXdoaWxlICgkb2ZmICE9IDAgfHwgKCRjbnQgPiAwICYmICRyZXN0ID1+IC9cXFxzKiQvKSkgeworCQkJCSNwcmludCAiQURESU5HIGNudDwkY250PiAkb2ZmIDwiIC4gc3Vic3RyKCRsaW5lc1skbG4gLSAxXSwgJG9mZikgLiAiPiByZXN0PCRyZXN0PlxuIjsKIAkJCQlpZiAoJG9mZiAhPSAwIHx8ICRsaW5lc1skbG4gLSAxXSAhfiAvXi0vKSB7CiAJCQkJCSRyZXN0IC49IHN1YnN0cigkbGluZXNbJGxuIC0gMV0sICRvZmYpIC4gIlxuIjsKIAkJCQkJJGNudC0tOwpAQCAtMTk3OCw5ICsyMTU1LDEwIEBACiAJCQkkZHN0YXQgPX4gcy9ccyokLy9zOwogCiAJCQkjIEZsYXR0ZW4gYW55IHBhcmVudGhlc2VzIGFuZCBicmFjZXMKLQkJCXdoaWxlICgkZHN0YXQgPX4gcy9cKFteXChcKV0qXCkvMS8pIHsKLQkJCX0KLQkJCXdoaWxlICgkZHN0YXQgPX4gcy9ce1teXHtcfV0qXH0vMS8pIHsKKwkJCXdoaWxlICgkZHN0YXQgPX4gcy9cKFteXChcKV0qXCkvMS8gfHwKKwkJCSAgICAgICAkZHN0YXQgPX4gcy9ce1teXHtcfV0qXH0vMS8gfHwKKwkJCSAgICAgICAkZHN0YXQgPX4gcy9cW1teXHtcfV0qXF0vMS8pCisJCQl7CiAJCQl9CiAKIAkJCW15ICRleGNlcHRpb25zID0gcXJ7CkBAIC0yMDAzLDYgKzIxODEsNyBAQAogCQkJCWlmICgkZHN0YXQgbmUgJycgJiYKIAkJCQkgICAgJGRzdGF0ICF+IC9eKD86JElkZW50fC0/JENvbnN0YW50KSQvICYmCiAJCQkJICAgICRkc3RhdCAhfiAvJGV4Y2VwdGlvbnMvICYmCisJCQkJICAgICRkc3RhdCAhfiAvXlwuJElkZW50XHMqPS8gJiYKIAkJCQkgICAgJGRzdGF0ID1+IC8kT3BlcmF0b3JzLykKIAkJCQl7CiAJCQkJCUVSUk9SKCJNYWNyb3Mgd2l0aCBjb21wbGV4IHZhbHVlcyBzaG91bGQgYmUgZW5jbG9zZWQgaW4gcGFyZW50aGVzaXNcbiIgLiAiJGhlcmVcbiRjdHhcbiIpOwpAQCAtMjEwMywxMCArMjI4MiwxMCBAQAogCQkJfQogCQkJaWYgKCRsZXZlbCA9PSAwICYmICRibG9jayA9fiAvXlxzKlx7LyAmJiAhJGFsbG93ZWQpIHsKIAkJCQlteSAkaGVyZWN0eCA9ICRoZXJlIC4gIlxuIjs7Ci0JCQkJbXkgJGVuZCA9ICRsaW5lbnIgKyBzdGF0ZW1lbnRfcmF3bGluZXMoJGJsb2NrKSAtIDE7CisJCQkJbXkgJGNudCA9IHN0YXRlbWVudF9yYXdsaW5lcygkYmxvY2spOwogCi0JCQkJZm9yIChteSAkbG4gPSAkbGluZW5yIC0gMTsgJGxuIDwgJGVuZDsgJGxuKyspIHsKLQkJCQkJJGhlcmVjdHggLj0gJHJhd2xpbmVzWyRsbl0gLiAiXG4iOzsKKwkJCQlmb3IgKG15ICRuID0gMDsgJG4gPCAkY250OyAkbisrKSB7CisJCQkJCSRoZXJlY3R4IC49IHJhd19saW5lKCRsaW5lbnIsICRuKSAuICJcbiI7OwogCQkJCX0KIAogCQkJCVdBUk4oImJyYWNlcyB7fSBhcmUgbm90IG5lY2Vzc2FyeSBmb3Igc2luZ2xlIHN0YXRlbWVudCBibG9ja3NcbiIgLiAkaGVyZWN0eCk7CkBAIC0yMjgxLDYgKzI0NjAsNyBAQAogCQlteSAkc3RyaW5nOwogCQl3aGlsZSAoJGxpbmUgPX4gLyg/Ol58IikoW1hcdF0qKSg/OiJ8JCkvZykgewogCQkJJHN0cmluZyA9IHN1YnN0cigkcmF3bGluZSwgJC1bMV0sICQrWzFdIC0gJC1bMV0pOworCQkJJHN0cmluZyA9fiBzLyUlL19fL2c7CiAJCQlpZiAoJHN0cmluZyA9fiAvKD88ISUpJUxbdWRpXS8pIHsKIAkJCQlXQVJOKCJcJUxkLyVMdSBhcmUgbm90LXN0YW5kYXJkIEMsIHVzZSAlbGxkLyVsbHVcbiIgLiAkaGVyZWN1cnIpOwogCQkJCWxhc3Q7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKaW5kZXggNGM5ODkwZS4uZDRkYzIyMiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCisrKyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwpAQCAtMjA2LDYgKzIwNiwyMCBAQAogCQlkb191c2JfZW50cnlfbXVsdGkoc3ltdmFsICsgaSwgbW9kKTsKIH0KIAorLyogTG9va3MgbGlrZTogaGlkOmJOdk5wTiAqLworc3RhdGljIGludCBkb19oaWRfZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkgICAgIHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCwgY2hhciAqYWxpYXMpCit7CisJaWQtPnZlbmRvciA9IFRPX05BVElWRShpZC0+dmVuZG9yKTsKKwlpZC0+cHJvZHVjdCA9IFRPX05BVElWRShpZC0+cHJvZHVjdCk7CisKKwlzcHJpbnRmKGFsaWFzLCAiaGlkOmIlMDRYIiwgaWQtPmJ1cyk7CisJQUREKGFsaWFzLCAidiIsIGlkLT52ZW5kb3IgIT0gSElEX0FOWV9JRCwgaWQtPnZlbmRvcik7CisJQUREKGFsaWFzLCAicCIsIGlkLT5wcm9kdWN0ICE9IEhJRF9BTllfSUQsIGlkLT5wcm9kdWN0KTsKKworCXJldHVybiAxOworfQorCiAvKiBMb29rcyBsaWtlOiBpZWVlMTM5NDp2ZW5ObW9Oc3BOdmVyTiAqLwogc3RhdGljIGludCBkb19pZWVlMTM5NF9lbnRyeShjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCSAgICAgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCAqaWQsIGNoYXIgKmFsaWFzKQpAQCAtNjI5LDYgKzY0Myw1OSBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaWZpZWxkIHsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJaW50IGZpZWxkOworfSBkbWlfZmllbGRzW10gPSB7CisJeyAiYnZuIiwgRE1JX0JJT1NfVkVORE9SIH0sCisJeyAiYnZyIiwgRE1JX0JJT1NfVkVSU0lPTiB9LAorCXsgImJkIiwgIERNSV9CSU9TX0RBVEUgfSwKKwl7ICJzdm4iLCBETUlfU1lTX1ZFTkRPUiB9LAorCXsgInBuIiwgIERNSV9QUk9EVUNUX05BTUUgfSwKKwl7ICJwdnIiLCBETUlfUFJPRFVDVF9WRVJTSU9OIH0sCisJeyAicnZuIiwgRE1JX0JPQVJEX1ZFTkRPUiB9LAorCXsgInJuIiwgIERNSV9CT0FSRF9OQU1FIH0sCisJeyAicnZyIiwgRE1JX0JPQVJEX1ZFUlNJT04gfSwKKwl7ICJjdm4iLCBETUlfQ0hBU1NJU19WRU5ET1IgfSwKKwl7ICJjdCIsICBETUlfQ0hBU1NJU19UWVBFIH0sCisJeyAiY3ZyIiwgRE1JX0NIQVNTSVNfVkVSU0lPTiB9LAorCXsgTlVMTCwgIERNSV9OT05FIH0KK307CisKK3N0YXRpYyB2b2lkIGRtaV9hc2NpaV9maWx0ZXIoY2hhciAqZCwgY29uc3QgY2hhciAqcykKK3sKKwkvKiBGaWx0ZXIgb3V0IGNoYXJhY3RlcnMgd2UgZG9uJ3Qgd2FudCB0byBzZWUgaW4gdGhlIG1vZGFsaWFzIHN0cmluZyAqLworCWZvciAoOyAqczsgcysrKQorCQlpZiAoKnMgPiAnICcgJiYgKnMgPCAxMjcgJiYgKnMgIT0gJzonKQorCQkJKihkKyspID0gKnM7CisKKwkqZCA9IDA7Cit9CisKKworc3RhdGljIGludCBkb19kbWlfZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCwKKwkJCWNoYXIgKmFsaWFzKQoreworCWludCBpLCBqOworCisJc3ByaW50ZihhbGlhcywgImRtaSoiKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRtaV9maWVsZHMpOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgeworCQkJaWYgKGlkLT5tYXRjaGVzW2pdLnNsb3QgJiYKKwkJCSAgICBpZC0+bWF0Y2hlc1tqXS5zbG90ID09IGRtaV9maWVsZHNbaV0uZmllbGQpIHsKKwkJCQlzcHJpbnRmKGFsaWFzICsgc3RybGVuKGFsaWFzKSwgIjolcyoiLAorCQkJCQlkbWlfZmllbGRzW2ldLnByZWZpeCk7CisJCQkJZG1pX2FzY2lpX2ZpbHRlcihhbGlhcyArIHN0cmxlbihhbGlhcyksCisJCQkJCQkgaWQtPm1hdGNoZXNbal0uc3Vic3RyKTsKKwkJCQlzdHJjYXQoYWxpYXMsICIqIik7CisJCQl9CisJCX0KKwl9CisKKwlzdHJjYXQoYWxpYXMsICI6Iik7CisJcmV0dXJuIDE7Cit9CiAvKiBJZ25vcmUgYW55IHByZWZpeCwgZWcuIHNvbWUgYXJjaGl0ZWN0dXJlcyBwcmVwZW5kIF8gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHN5bV9pcyhjb25zdCBjaGFyICpzeW1ib2wsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC02OTIsNiArNzU5LDEwIEBACiAJZWxzZSBpZiAoc3ltX2lzKHN5bW5hbWUsICJfX21vZF91c2JfZGV2aWNlX3RhYmxlIikpCiAJCS8qIHNwZWNpYWwgY2FzZSB0byBoYW5kbGUgYmNkRGV2aWNlIHJhbmdlcyAqLwogCQlkb191c2JfdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsIG1vZCk7CisJZWxzZSBpZiAoc3ltX2lzKHN5bW5hbWUsICJfX21vZF9oaWRfZGV2aWNlX3RhYmxlIikpCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3QgaGlkX2RldmljZV9pZCksICJoaWQiLAorCQkJIGRvX2hpZF9lbnRyeSwgbW9kKTsKIAllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX2llZWUxMzk0X2RldmljZV90YWJsZSIpKQogCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwKIAkJCSBzaXplb2Yoc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCksICJpZWVlMTM5NCIsCkBAIC03NjAsNiArODMxLDEwIEBACiAJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAogCQkJIHNpemVvZihzdHJ1Y3QgaTJjX2RldmljZV9pZCksICJpMmMiLAogCQkJIGRvX2kyY19lbnRyeSwgbW9kKTsKKwllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX2RtaV9kZXZpY2VfdGFibGUiKSkKKwkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCisJCQkgc2l6ZW9mKHN0cnVjdCBkbWlfc3lzdGVtX2lkKSwgImRtaSIsCisJCQkgZG9fZG1pX2VudHJ5LCBtb2QpOwogCWZyZWUoemVyb3MpOwogfQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggOGUwZGU2YS4uODg5MjE2MSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtMTcyNiw2ICsxNzI2LDE0IEBACiAJYnVmX3ByaW50ZihiLCAifTtcbiIpOwogfQogCit2b2lkIGFkZF9zdGFnaW5nX2ZsYWcoc3RydWN0IGJ1ZmZlciAqYiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqc3RhZ2luZ19kaXIgPSAiZHJpdmVycy9zdGFnaW5nIjsKKworCWlmIChzdHJuY21wKHN0YWdpbmdfZGlyLCBuYW1lLCBzdHJsZW4oc3RhZ2luZ19kaXIpKSA9PSAwKQorCQlidWZfcHJpbnRmKGIsICJcbk1PRFVMRV9JTkZPKHN0YWdpbmcsIFwiWVwiKTtcbiIpOworfQorCiAvKioKICAqIFJlY29yZCBDUkNzIGZvciB1bnJlc29sdmVkIHN5bWJvbHMKICAqKi8KQEAgLTIxMzUsNiArMjE0Myw3IEBACiAJCWJ1Zi5wb3MgPSAwOwogCiAJCWFkZF9oZWFkZXIoJmJ1ZiwgbW9kKTsKKwkJYWRkX3N0YWdpbmdfZmxhZygmYnVmLCBtb2QtPm5hbWUpOwogCQllcnIgfD0gYWRkX3ZlcnNpb25zKCZidWYsIG1vZCk7CiAJCWFkZF9kZXBlbmRzKCZidWYsIG1vZCwgbW9kdWxlcyk7CiAJCWFkZF9tb2RkZXZ0YWJsZSgmYnVmLCBtb2QpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvZGV2aWNlX2Nncm91cC5jIGIvc2VjdXJpdHkvZGV2aWNlX2Nncm91cC5jCmluZGV4IDQ2ZjIzOTcuLjViYTc4NzAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2RldmljZV9jZ3JvdXAuYworKysgYi9zZWN1cml0eS9kZXZpY2VfY2dyb3VwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogZGV2X2Nncm91cC5jIC0gZGV2aWNlIGNncm91cCBzdWJzeXN0ZW0KKyAqIGRldmljZV9jZ3JvdXAuYyAtIGRldmljZSBjZ3JvdXAgc3Vic3lzdGVtCiAgKgogICogQ29weXJpZ2h0IDIwMDcgSUJNIENvcnAKICAqLwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogCiAjZGVmaW5lIEFDQ19NS05PRCAxCiAjZGVmaW5lIEFDQ19SRUFEICAyCkBAIC0yMiwxOCArMjMsOCBAQAogCiAvKgogICogd2hpdGVsaXN0IGxvY2tpbmcgcnVsZXM6Ci0gKiBjZ3JvdXBfbG9jaygpIGNhbm5vdCBiZSB0YWtlbiB1bmRlciBkZXZfY2dyb3VwLT5sb2NrLgotICogZGV2X2Nncm91cC0+bG9jayBjYW4gYmUgdGFrZW4gd2l0aCBvciB3aXRob3V0IGNncm91cF9sb2NrKCkuCi0gKgotICogbW9kaWZpY2F0aW9ucyBhbHdheXMgcmVxdWlyZSBjZ3JvdXBfbG9jawotICogbW9kaWZpY2F0aW9ucyB0byBhIGxpc3Qgd2hpY2ggaXMgdmlzaWJsZSByZXF1aXJlIHRoZQotICogICBkZXZfY2dyb3VwLT5sb2NrICphbmQqIGNncm91cF9sb2NrKCkKLSAqIHdhbGtpbmcgdGhlIGxpc3QgcmVxdWlyZXMgZGV2X2Nncm91cC0+bG9jayBvciBjZ3JvdXBfbG9jaygpLgotICoKLSAqIHJlYXNvbmluZzogZGV2X3doaXRlbGlzdF9jb3B5KCkgbmVlZHMgdG8ga21hbGxvYywgc28gbmVlZHMKLSAqICAgYSBtdXRleCwgd2hpY2ggdGhlIGNncm91cF9sb2NrKCkgaXMuICBTaW5jZSBtb2RpZnlpbmcKLSAqICAgYSB2aXNpYmxlIGxpc3QgcmVxdWlyZXMgYm90aCBsb2NrcywgZWl0aGVyIGxvY2sgY2FuIGJlCi0gKiAgIHRha2VuIGZvciB3YWxraW5nIHRoZSBsaXN0LgorICogaG9sZCBjZ3JvdXBfbG9jaygpIGZvciB1cGRhdGUvcmVhZC4KKyAqIGhvbGQgcmN1X3JlYWRfbG9jaygpIGZvciByZWFkLgogICovCiAKIHN0cnVjdCBkZXZfd2hpdGVsaXN0X2l0ZW0gewpAQCAtNDcsNyArMzgsNiBAQAogc3RydWN0IGRldl9jZ3JvdXAgewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHdoaXRlbGlzdDsKLQlzcGlubG9ja190IGxvY2s7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfY2dyb3VwICpjc3NfdG9fZGV2Y2dyb3VwKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpzKQpAQCAtODQsMTMgKzc0LDkgQEAKIAlzdHJ1Y3QgZGV2X3doaXRlbGlzdF9pdGVtICp3aCwgKnRtcCwgKm5ldzsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkod2gsIG9yaWcsIGxpc3QpIHsKLQkJbmV3ID0ga21hbGxvYyhzaXplb2YoKndoKSwgR0ZQX0tFUk5FTCk7CisJCW5ldyA9IGttZW1kdXAod2gsIHNpemVvZigqd2gpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFuZXcpCiAJCQlnb3RvIGZyZWVfYW5kX2V4aXQ7Ci0JCW5ldy0+bWFqb3IgPSB3aC0+bWFqb3I7Ci0JCW5ldy0+bWlub3IgPSB3aC0+bWlub3I7Ci0JCW5ldy0+dHlwZSA9IHdoLT50eXBlOwotCQluZXctPmFjY2VzcyA9IHdoLT5hY2Nlc3M7CiAJCWxpc3RfYWRkX3RhaWwoJm5ldy0+bGlzdCwgZGVzdCk7CiAJfQogCkBAIC0xMDcsMTkgKzkzLDE2IEBACiAvKiBTdHVwaWQgcHJvdG90eXBlIC0gZG9uJ3QgYm90aGVyIGNvbWJpbmluZyBleGlzdGluZyBlbnRyaWVzICovCiAvKgogICogY2FsbGVkIHVuZGVyIGNncm91cF9sb2NrKCkKLSAqIHNpbmNlIHRoZSBsaXN0IGlzIHZpc2libGUgdG8gb3RoZXIgdGFza3MsIHdlIG5lZWQgdGhlIHNwaW5sb2NrIGFsc28KICAqLwogc3RhdGljIGludCBkZXZfd2hpdGVsaXN0X2FkZChzdHJ1Y3QgZGV2X2Nncm91cCAqZGV2X2Nncm91cCwKIAkJCXN0cnVjdCBkZXZfd2hpdGVsaXN0X2l0ZW0gKndoKQogewogCXN0cnVjdCBkZXZfd2hpdGVsaXN0X2l0ZW0gKndoY29weSwgKndhbGs7CiAKLQl3aGNvcHkgPSBrbWFsbG9jKHNpemVvZigqd2hjb3B5KSwgR0ZQX0tFUk5FTCk7CisJd2hjb3B5ID0ga21lbWR1cCh3aCwgc2l6ZW9mKCp3aCksIEdGUF9LRVJORUwpOwogCWlmICghd2hjb3B5KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbWNweSh3aGNvcHksIHdoLCBzaXplb2YoKndoY29weSkpOwotCXNwaW5fbG9jaygmZGV2X2Nncm91cC0+bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh3YWxrLCAmZGV2X2Nncm91cC0+d2hpdGVsaXN0LCBsaXN0KSB7CiAJCWlmICh3YWxrLT50eXBlICE9IHdoLT50eXBlKQogCQkJY29udGludWU7CkBAIC0xMzUsNyArMTE4LDYgQEAKIAogCWlmICh3aGNvcHkgIT0gTlVMTCkKIAkJbGlzdF9hZGRfdGFpbF9yY3UoJndoY29weS0+bGlzdCwgJmRldl9jZ3JvdXAtPndoaXRlbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmRldl9jZ3JvdXAtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xNDksMTQgKzEzMSwxMiBAQAogCiAvKgogICogY2FsbGVkIHVuZGVyIGNncm91cF9sb2NrKCkKLSAqIHNpbmNlIHRoZSBsaXN0IGlzIHZpc2libGUgdG8gb3RoZXIgdGFza3MsIHdlIG5lZWQgdGhlIHNwaW5sb2NrIGFsc28KICAqLwogc3RhdGljIHZvaWQgZGV2X3doaXRlbGlzdF9ybShzdHJ1Y3QgZGV2X2Nncm91cCAqZGV2X2Nncm91cCwKIAkJCXN0cnVjdCBkZXZfd2hpdGVsaXN0X2l0ZW0gKndoKQogewogCXN0cnVjdCBkZXZfd2hpdGVsaXN0X2l0ZW0gKndhbGssICp0bXA7CiAKLQlzcGluX2xvY2soJmRldl9jZ3JvdXAtPmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3YWxrLCB0bXAsICZkZXZfY2dyb3VwLT53aGl0ZWxpc3QsIGxpc3QpIHsKIAkJaWYgKHdhbGstPnR5cGUgPT0gREVWX0FMTCkKIAkJCWdvdG8gcmVtb3ZlOwpAQCAtMTc0LDcgKzE1NCw2IEBACiAJCQljYWxsX3JjdSgmd2Fsay0+cmN1LCB3aGl0ZWxpc3RfaXRlbV9mcmVlKTsKIAkJfQogCX0KLQlzcGluX3VubG9jaygmZGV2X2Nncm91cC0+bG9jayk7CiB9CiAKIC8qCkBAIC0yMTQsNyArMTkzLDYgQEAKIAkJfQogCX0KIAotCXNwaW5fbG9ja19pbml0KCZkZXZfY2dyb3VwLT5sb2NrKTsKIAlyZXR1cm4gJmRldl9jZ3JvdXAtPmNzczsKIH0KIApAQCAtMzMwLDE1ICszMDgsMTEgQEAKIHsKIAlzdHJ1Y3QgY2dyb3VwICpwY2cgPSBjaGlsZGNnLT5jc3MuY2dyb3VwLT5wYXJlbnQ7CiAJc3RydWN0IGRldl9jZ3JvdXAgKnBhcmVudDsKLQlpbnQgcmV0OwogCiAJaWYgKCFwY2cpCiAJCXJldHVybiAxOwogCXBhcmVudCA9IGNncm91cF90b19kZXZjZ3JvdXAocGNnKTsKLQlzcGluX2xvY2soJnBhcmVudC0+bG9jayk7Ci0JcmV0ID0gbWF5X2FjY2Vzc193aGl0ZWxpc3QocGFyZW50LCB3aCk7Ci0Jc3Bpbl91bmxvY2soJnBhcmVudC0+bG9jayk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbWF5X2FjY2Vzc193aGl0ZWxpc3QocGFyZW50LCB3aCk7CiB9CiAKIC8qCkBAIC0zNTcsMTcgKzMzMSwxNCBAQAogc3RhdGljIGludCBkZXZjZ3JvdXBfdXBkYXRlX2FjY2VzcyhzdHJ1Y3QgZGV2X2Nncm91cCAqZGV2Y2dyb3VwLAogCQkJCSAgIGludCBmaWxldHlwZSwgY29uc3QgY2hhciAqYnVmZmVyKQogewotCXN0cnVjdCBkZXZfY2dyb3VwICpjdXJfZGV2Y2dyb3VwOwogCWNvbnN0IGNoYXIgKmI7CiAJY2hhciAqZW5kcDsKLQlpbnQgcmV0dmFsID0gMCwgY291bnQ7CisJaW50IGNvdW50OwogCXN0cnVjdCBkZXZfd2hpdGVsaXN0X2l0ZW0gd2g7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAKLQljdXJfZGV2Y2dyb3VwID0gdGFza19kZXZjZ3JvdXAoY3VycmVudCk7Ci0KIAltZW1zZXQoJndoLCAwLCBzaXplb2Yod2gpKTsKIAliID0gYnVmZmVyOwogCkBAIC00MzcsNyArNDA4LDYgQEAKIAl9CiAKIGhhbmRsZToKLQlyZXR2YWwgPSAwOwogCXN3aXRjaCAoZmlsZXR5cGUpIHsKIAljYXNlIERFVkNHX0FMTE9XOgogCQlpZiAoIXBhcmVudF9oYXNfcGVybShkZXZjZ3JvdXAsICZ3aCkpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbm9kZS5jIGIvc2VjdXJpdHkvaW5vZGUuYwppbmRleCBjYTQ5NThlLi5lZmVhNWE2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbm9kZS5jCisrKyBiL3NlY3VyaXR5L2lub2RlLmMKQEAgLTIwLDggKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgotCi0jZGVmaW5lIFNFQ1VSSVRZRlNfTUFHSUMJMHg3MzYzNjY3MworI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKm1vdW50Owogc3RhdGljIGludCBtb3VudF9jb3VudDsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCA0ODg4MTM5Li4zZTNmZGU3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC03NSw2ICs3NSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2VsaW51eC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CiAKICNpbmNsdWRlICJhdmMuaCIKICNpbmNsdWRlICJvYmpzZWMuaCIKQEAgLTI5MSw2ICsyOTIsNyBAQAogCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMgPSBzay0+c2tfc2VjdXJpdHk7CiAKIAlzay0+c2tfc2VjdXJpdHkgPSBOVUxMOworCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X2ZyZWUoc3NlYyk7CiAJa2ZyZWUoc3NlYyk7CiB9CiAKQEAgLTMyNCw3ICszMjYsNyBAQAogCU9wdF9yb290Y29udGV4dCA9IDQsCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9jb250ZXh0LCBDT05URVhUX1NUUiAiJXMifSwKIAl7T3B0X2ZzY29udGV4dCwgRlNDT05URVhUX1NUUiAiJXMifSwKIAl7T3B0X2RlZmNvbnRleHQsIERFRkNPTlRFWFRfU1RSICIlcyJ9LApAQCAtMjMyMSwxMyArMjMyMyw3IEBACiAJCQlpbml0cmxpbSA9IGluaXRfdGFzay5zaWduYWwtPnJsaW0raTsKIAkJCXJsaW0tPnJsaW1fY3VyID0gbWluKHJsaW0tPnJsaW1fbWF4LCBpbml0cmxpbS0+cmxpbV9jdXIpOwogCQl9Ci0JCWlmIChjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkgewotCQkJLyoKLQkJCSAqIFRoaXMgd2lsbCBjYXVzZSBSTElNSVRfQ1BVIGNhbGN1bGF0aW9ucwotCQkJICogdG8gYmUgcmVmaWd1cmVkLgotCQkJICovCi0JCQljdXJyZW50LT5pdF9wcm9mX2V4cGlyZXMgPSBqaWZmaWVzX3RvX2NwdXRpbWUoMSk7Ci0JCX0KKwkJdXBkYXRlX3JsaW1pdF9jcHUocmxpbS0+cmxpbV9jdXIpOwogCX0KIAogCS8qIFdha2UgdXAgdGhlIHBhcmVudCBpZiBpdCBpcyB3YWl0aW5nIHNvIHRoYXQgaXQgY2FuCkBAIC0zODAwLDYgKzM3OTYsNyBAQAogCiBzdGF0aWMgaW50IHNlbGludXhfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBpbnQgYWRkcmxlbikKIHsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwogCWludCBlcnI7CiAKQEAgLTM4MTMsNyArMzgxMCw2IEBACiAJaXNlYyA9IFNPQ0tfSU5PREUoc29jayktPmlfc2VjdXJpdHk7CiAJaWYgKGlzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19UQ1BfU09DS0VUIHx8CiAJICAgIGlzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19EQ0NQX1NPQ0tFVCkgewotCQlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAkJc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOwogCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHI0ID0gTlVMTDsKIAkJc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjYgPSBOVUxMOwpAQCAtMzg0Nyw2ICszODQzLDggQEAKIAkJCWdvdG8gb3V0OwogCX0KIAorCWVyciA9IHNlbGludXhfbmV0bGJsX3NvY2tldF9jb25uZWN0KHNrLCBhZGRyZXNzKTsKKwogb3V0OgogCXJldHVybiBlcnI7CiB9CkBAIC00MDc2LDIwICs0MDc0LDI4IEBACiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9zb2NrX3Jjdl9za2JfY29tcGF0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICAgc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCwKLQkJCQkgICAgICAgdTE2IGZhbWlseSwgY2hhciAqYWRkcnApCisJCQkJICAgICAgIHUxNiBmYW1pbHkpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrLT5za19zZWN1cml0eTsKIAl1MzIgcGVlcl9zaWQ7CiAJdTMyIHNrX3NpZCA9IHNrc2VjLT5zaWQ7CisJc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOworCWNoYXIgKmFkZHJwOworCisJQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CisJYWQudS5uZXQubmV0aWYgPSBza2ItPmlpZjsKKwlhZC51Lm5ldC5mYW1pbHkgPSBmYW1pbHk7CisJZXJyID0gc2VsaW51eF9wYXJzZV9za2Ioc2tiLCAmYWQsICZhZGRycCwgMSwgTlVMTCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCWlmIChzZWxpbnV4X2NvbXBhdF9uZXQpCi0JCWVyciA9IHNlbGludXhfc29ja19yY3Zfc2tiX2lwdGFibGVzX2NvbXBhdChzaywgc2tiLCBhZCwKKwkJZXJyID0gc2VsaW51eF9zb2NrX3Jjdl9za2JfaXB0YWJsZXNfY29tcGF0KHNrLCBza2IsICZhZCwKIAkJCQkJCQkgICBmYW1pbHksIGFkZHJwKTsKIAllbHNlCiAJCWVyciA9IGF2Y19oYXNfcGVybShza19zaWQsIHNrYi0+c2VjbWFyaywgU0VDQ0xBU1NfUEFDS0VULAotCQkJCSAgIFBBQ0tFVF9fUkVDViwgYWQpOworCQkJCSAgIFBBQ0tFVF9fUkVDViwgJmFkKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC00MDk4LDEyICs0MTA0LDE0IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQllcnIgPSBhdmNfaGFzX3Blcm0oc2tfc2lkLCBwZWVyX3NpZCwKLQkJCQkgICBTRUNDTEFTU19QRUVSLCBQRUVSX19SRUNWLCBhZCk7CisJCQkJICAgU0VDQ0xBU1NfUEVFUiwgUEVFUl9fUkVDViwgJmFkKTsKKwkJaWYgKGVycikKKwkJCXNlbGludXhfbmV0bGJsX2Vycihza2IsIGVyciwgMCk7CiAJfSBlbHNlIHsKLQkJZXJyID0gc2VsaW51eF9uZXRsYmxfc29ja19yY3Zfc2tiKHNrc2VjLCBza2IsIGZhbWlseSwgYWQpOworCQllcnIgPSBzZWxpbnV4X25ldGxibF9zb2NrX3Jjdl9za2Ioc2tzZWMsIHNrYiwgZmFtaWx5LCAmYWQpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJZXJyID0gc2VsaW51eF94ZnJtX3NvY2tfcmN2X3NrYihza3NlYy0+c2lkLCBza2IsIGFkKTsKKwkJZXJyID0gc2VsaW51eF94ZnJtX3NvY2tfcmN2X3NrYihza3NlYy0+c2lkLCBza2IsICZhZCk7CiAJfQogCiAJcmV0dXJuIGVycjsKQEAgLTQxMTcsNiArNDEyNSw4IEBACiAJdTMyIHNrX3NpZCA9IHNrc2VjLT5zaWQ7CiAJc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOwogCWNoYXIgKmFkZHJwOworCXU4IHNlY21hcmtfYWN0aXZlOworCXU4IHBlZXJsYmxfYWN0aXZlOwogCiAJaWYgKGZhbWlseSAhPSBQRl9JTkVUICYmIGZhbWlseSAhPSBQRl9JTkVUNikKIAkJcmV0dXJuIDA7CkBAIC00MTI1LDYgKzQxMzUsMTggQEAKIAlpZiAoZmFtaWx5ID09IFBGX0lORVQ2ICYmIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQogCQlmYW1pbHkgPSBQRl9JTkVUOwogCisJLyogSWYgYW55IHNvcnQgb2YgY29tcGF0aWJpbGl0eSBtb2RlIGlzIGVuYWJsZWQgdGhlbiBoYW5kb2ZmIHByb2Nlc3NpbmcKKwkgKiB0byB0aGUgc2VsaW51eF9zb2NrX3Jjdl9za2JfY29tcGF0KCkgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZQorCSAqIHNwZWNpYWwgaGFuZGxpbmcuICBXZSBkbyB0aGlzIGluIGFuIGF0dGVtcHQgdG8ga2VlcCB0aGlzIGZ1bmN0aW9uCisJICogYXMgZmFzdCBhbmQgYXMgY2xlYW4gYXMgcG9zc2libGUuICovCisJaWYgKHNlbGludXhfY29tcGF0X25ldCB8fCAhc2VsaW51eF9wb2xpY3ljYXBfbmV0cGVlcikKKwkJcmV0dXJuIHNlbGludXhfc29ja19yY3Zfc2tiX2NvbXBhdChzaywgc2tiLCBmYW1pbHkpOworCisJc2VjbWFya19hY3RpdmUgPSBzZWxpbnV4X3NlY21hcmtfZW5hYmxlZCgpOworCXBlZXJsYmxfYWN0aXZlID0gbmV0bGJsX2VuYWJsZWQoKSB8fCBzZWxpbnV4X3hmcm1fZW5hYmxlZCgpOworCWlmICghc2VjbWFya19hY3RpdmUgJiYgIXBlZXJsYmxfYWN0aXZlKQorCQlyZXR1cm4gMDsKKwogCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwogCWFkLnUubmV0Lm5ldGlmID0gc2tiLT5paWY7CiAJYWQudS5uZXQuZmFtaWx5ID0gZmFtaWx5OwpAQCAtNDEzMiwxNSArNDE1NCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCS8qIElmIGFueSBzb3J0IG9mIGNvbXBhdGliaWxpdHkgbW9kZSBpcyBlbmFibGVkIHRoZW4gaGFuZG9mZiBwcm9jZXNzaW5nCi0JICogdG8gdGhlIHNlbGludXhfc29ja19yY3Zfc2tiX2NvbXBhdCgpIGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCB0aGUKLQkgKiBzcGVjaWFsIGhhbmRsaW5nLiAgV2UgZG8gdGhpcyBpbiBhbiBhdHRlbXB0IHRvIGtlZXAgdGhpcyBmdW5jdGlvbgotCSAqIGFzIGZhc3QgYW5kIGFzIGNsZWFuIGFzIHBvc3NpYmxlLiAqLwotCWlmIChzZWxpbnV4X2NvbXBhdF9uZXQgfHwgIXNlbGludXhfcG9saWN5Y2FwX25ldHBlZXIpCi0JCXJldHVybiBzZWxpbnV4X3NvY2tfcmN2X3NrYl9jb21wYXQoc2ssIHNrYiwgJmFkLAotCQkJCQkJICAgZmFtaWx5LCBhZGRycCk7Ci0KLQlpZiAobmV0bGJsX2VuYWJsZWQoKSB8fCBzZWxpbnV4X3hmcm1fZW5hYmxlZCgpKSB7CisJaWYgKHBlZXJsYmxfYWN0aXZlKSB7CiAJCXUzMiBwZWVyX3NpZDsKIAogCQllcnIgPSBzZWxpbnV4X3NrYl9wZWVybGJsX3NpZChza2IsIGZhbWlseSwgJnBlZXJfc2lkKTsKQEAgLTQxNDgsMTMgKzQxNjIsMTcgQEAKIAkJCXJldHVybiBlcnI7CiAJCWVyciA9IHNlbGludXhfaW5ldF9zeXNfcmN2X3NrYihza2ItPmlpZiwgYWRkcnAsIGZhbWlseSwKIAkJCQkJICAgICAgIHBlZXJfc2lkLCAmYWQpOwotCQlpZiAoZXJyKQorCQlpZiAoZXJyKSB7CisJCQlzZWxpbnV4X25ldGxibF9lcnIoc2tiLCBlcnIsIDApOwogCQkJcmV0dXJuIGVycjsKKwkJfQogCQllcnIgPSBhdmNfaGFzX3Blcm0oc2tfc2lkLCBwZWVyX3NpZCwgU0VDQ0xBU1NfUEVFUiwKIAkJCQkgICBQRUVSX19SRUNWLCAmYWQpOworCQlpZiAoZXJyKQorCQkJc2VsaW51eF9uZXRsYmxfZXJyKHNrYiwgZXJyLCAwKTsKIAl9CiAKLQlpZiAoc2VsaW51eF9zZWNtYXJrX2VuYWJsZWQoKSkgeworCWlmIChzZWNtYXJrX2FjdGl2ZSkgewogCQllcnIgPSBhdmNfaGFzX3Blcm0oc2tfc2lkLCBza2ItPnNlY21hcmssIFNFQ0NMQVNTX1BBQ0tFVCwKIAkJCQkgICBQQUNLRVRfX1JFQ1YsICZhZCk7CiAJCWlmIChlcnIpCkBAIC00MjEzLDEwICs0MjMxLDEyIEBACiAJdTMyIHBlZXJfc2VjaWQgPSBTRUNTSURfTlVMTDsKIAl1MTYgZmFtaWx5OwogCi0JaWYgKHNvY2spCisJaWYgKHNrYiAmJiBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKKwkJZmFtaWx5ID0gUEZfSU5FVDsKKwllbHNlIGlmIChza2IgJiYgc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkKKwkJZmFtaWx5ID0gUEZfSU5FVDY7CisJZWxzZSBpZiAoc29jaykKIAkJZmFtaWx5ID0gc29jay0+c2stPnNrX2ZhbWlseTsKLQllbHNlIGlmIChza2IgJiYgc2tiLT5zaykKLQkJZmFtaWx5ID0gc2tiLT5zay0+c2tfZmFtaWx5OwogCWVsc2UKIAkJZ290byBvdXQ7CiAKQEAgLTQyNzQsOCArNDI5NCw2IEBACiAJICAgIHNrLT5za19mYW1pbHkgPT0gUEZfVU5JWCkKIAkJaXNlYy0+c2lkID0gc2tzZWMtPnNpZDsKIAlza3NlYy0+c2NsYXNzID0gaXNlYy0+c2NsYXNzOwotCi0Jc2VsaW51eF9uZXRsYmxfc29ja19ncmFmdChzaywgcGFyZW50KTsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X2luZXRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTQyODMsMTAgKzQzMDEsMTUgQEAKIHsKIAlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrLT5za19zZWN1cml0eTsKIAlpbnQgZXJyOworCXUxNiBmYW1pbHkgPSBzay0+c2tfZmFtaWx5OwogCXUzMiBuZXdzaWQ7CiAJdTMyIHBlZXJzaWQ7CiAKLQllcnIgPSBzZWxpbnV4X3NrYl9wZWVybGJsX3NpZChza2IsIHNrLT5za19mYW1pbHksICZwZWVyc2lkKTsKKwkvKiBoYW5kbGUgbWFwcGVkIElQdjQgcGFja2V0cyBhcnJpdmluZyB2aWEgSVB2NiBzb2NrZXRzICovCisJaWYgKGZhbWlseSA9PSBQRl9JTkVUNiAmJiBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKKwkJZmFtaWx5ID0gUEZfSU5FVDsKKworCWVyciA9IHNlbGludXhfc2tiX3BlZXJsYmxfc2lkKHNrYiwgZmFtaWx5LCAmcGVlcnNpZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlpZiAocGVlcnNpZCA9PSBTRUNTSURfTlVMTCkgewpAQCAtNDMyMSwxMiArNDM0NCwxOCBAQAogCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KG5ld3Nrc2VjLCByZXEtPnJza19vcHMtPmZhbWlseSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlbGludXhfaW5ldF9jb25uX2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgc2VsaW51eF9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXUxNiBmYW1pbHkgPSBzay0+c2tfZmFtaWx5OwogCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwogCi0Jc2VsaW51eF9za2JfcGVlcmxibF9zaWQoc2tiLCBzay0+c2tfZmFtaWx5LCAmc2tzZWMtPnBlZXJfc2lkKTsKKwkvKiBoYW5kbGUgbWFwcGVkIElQdjQgcGFja2V0cyBhcnJpdmluZyB2aWEgSVB2NiBzb2NrZXRzICovCisJaWYgKGZhbWlseSA9PSBQRl9JTkVUNiAmJiBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKKwkJZmFtaWx5ID0gUEZfSU5FVDsKKworCXNlbGludXhfc2tiX3BlZXJsYmxfc2lkKHNrYiwgZmFtaWx5LCAmc2tzZWMtPnBlZXJfc2lkKTsKKworCXNlbGludXhfbmV0bGJsX2luZXRfY29ubl9lc3RhYmxpc2hlZChzaywgZmFtaWx5KTsKIH0KIAogc3RhdGljIHZvaWQgc2VsaW51eF9yZXFfY2xhc3NpZnlfZmxvdyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCkBAIC00Mzc2LDM5ICs0NDA1LDU0IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNlbGludXhfaXBfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWZpbmRleCwKIAkJCQkgICAgICAgdTE2IGZhbWlseSkKIHsKKwlpbnQgZXJyOwogCWNoYXIgKmFkZHJwOwogCXUzMiBwZWVyX3NpZDsKIAlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CiAJdTggc2VjbWFya19hY3RpdmU7CisJdTggbmV0bGJsX2FjdGl2ZTsKIAl1OCBwZWVybGJsX2FjdGl2ZTsKIAogCWlmICghc2VsaW51eF9wb2xpY3ljYXBfbmV0cGVlcikKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCXNlY21hcmtfYWN0aXZlID0gc2VsaW51eF9zZWNtYXJrX2VuYWJsZWQoKTsKLQlwZWVybGJsX2FjdGl2ZSA9IG5ldGxibF9lbmFibGVkKCkgfHwgc2VsaW51eF94ZnJtX2VuYWJsZWQoKTsKKwluZXRsYmxfYWN0aXZlID0gbmV0bGJsX2VuYWJsZWQoKTsKKwlwZWVybGJsX2FjdGl2ZSA9IG5ldGxibF9hY3RpdmUgfHwgc2VsaW51eF94ZnJtX2VuYWJsZWQoKTsKIAlpZiAoIXNlY21hcmtfYWN0aXZlICYmICFwZWVybGJsX2FjdGl2ZSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAorCWlmIChzZWxpbnV4X3NrYl9wZWVybGJsX3NpZChza2IsIGZhbWlseSwgJnBlZXJfc2lkKSAhPSAwKQorCQlyZXR1cm4gTkZfRFJPUDsKKwogCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwogCWFkLnUubmV0Lm5ldGlmID0gaWZpbmRleDsKIAlhZC51Lm5ldC5mYW1pbHkgPSBmYW1pbHk7CiAJaWYgKHNlbGludXhfcGFyc2Vfc2tiKHNrYiwgJmFkLCAmYWRkcnAsIDEsIE5VTEwpICE9IDApCiAJCXJldHVybiBORl9EUk9QOwogCi0JaWYgKHNlbGludXhfc2tiX3BlZXJsYmxfc2lkKHNrYiwgZmFtaWx5LCAmcGVlcl9zaWQpICE9IDApCi0JCXJldHVybiBORl9EUk9QOwotCi0JaWYgKHBlZXJsYmxfYWN0aXZlKQotCQlpZiAoc2VsaW51eF9pbmV0X3N5c19yY3Zfc2tiKGlmaW5kZXgsIGFkZHJwLCBmYW1pbHksCi0JCQkJCSAgICAgcGVlcl9zaWQsICZhZCkgIT0gMCkKKwlpZiAocGVlcmxibF9hY3RpdmUpIHsKKwkJZXJyID0gc2VsaW51eF9pbmV0X3N5c19yY3Zfc2tiKGlmaW5kZXgsIGFkZHJwLCBmYW1pbHksCisJCQkJCSAgICAgICBwZWVyX3NpZCwgJmFkKTsKKwkJaWYgKGVycikgeworCQkJc2VsaW51eF9uZXRsYmxfZXJyKHNrYiwgZXJyLCAxKTsKIAkJCXJldHVybiBORl9EUk9QOworCQl9CisJfQogCiAJaWYgKHNlY21hcmtfYWN0aXZlKQogCQlpZiAoYXZjX2hhc19wZXJtKHBlZXJfc2lkLCBza2ItPnNlY21hcmssCiAJCQkJIFNFQ0NMQVNTX1BBQ0tFVCwgUEFDS0VUX19GT1JXQVJEX0lOLCAmYWQpKQogCQkJcmV0dXJuIE5GX0RST1A7CiAKKwlpZiAobmV0bGJsX2FjdGl2ZSkKKwkJLyogd2UgZG8gdGhpcyBpbiB0aGUgRk9SV0FSRCBwYXRoIGFuZCBub3QgdGhlIFBPU1RfUk9VVElORworCQkgKiBwYXRoIGJlY2F1c2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYXBwbHkgdGhlIG5lY2Vzc2FyeQorCQkgKiBsYWJlbGluZyBiZWZvcmUgSVBzZWMgaXMgYXBwbGllZCBzbyB3ZSBjYW4gbGV2ZXJhZ2UgQUgKKwkJICogcHJvdGVjdGlvbiAqLworCQlpZiAoc2VsaW51eF9uZXRsYmxfc2tidWZmX3NldHNpZChza2IsIGZhbWlseSwgcGVlcl9zaWQpICE9IDApCisJCQlyZXR1cm4gTkZfRFJPUDsKKwogCXJldHVybiBORl9BQ0NFUFQ7CiB9CiAKQEAgLTQ0MzIsNiArNDQ3NiwzNyBAQAogfQogI2VuZGlmCS8qIElQVjYgKi8KIAorc3RhdGljIHVuc2lnbmVkIGludCBzZWxpbnV4X2lwX291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHUxNiBmYW1pbHkpCit7CisJdTMyIHNpZDsKKworCWlmICghbmV0bGJsX2VuYWJsZWQoKSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCS8qIHdlIGRvIHRoaXMgaW4gdGhlIExPQ0FMX09VVCBwYXRoIGFuZCBub3QgdGhlIFBPU1RfUk9VVElORyBwYXRoCisJICogYmVjYXVzZSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhcHBseSB0aGUgbmVjZXNzYXJ5IGxhYmVsaW5nCisJICogYmVmb3JlIElQc2VjIGlzIGFwcGxpZWQgc28gd2UgY2FuIGxldmVyYWdlIEFIIHByb3RlY3Rpb24gKi8KKwlpZiAoc2tiLT5zaykgeworCQlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrYi0+c2stPnNrX3NlY3VyaXR5OworCQlzaWQgPSBza3NlYy0+c2lkOworCX0gZWxzZQorCQlzaWQgPSBTRUNJTklUU0lEX0tFUk5FTDsKKwlpZiAoc2VsaW51eF9uZXRsYmxfc2tidWZmX3NldHNpZChza2IsIGZhbWlseSwgc2lkKSAhPSAwKQorCQlyZXR1cm4gTkZfRFJPUDsKKworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2VsaW51eF9pcHY0X291dHB1dCh1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJCQlpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKKwlyZXR1cm4gc2VsaW51eF9pcF9vdXRwdXQoc2tiLCBQRl9JTkVUKTsKK30KKwogc3RhdGljIGludCBzZWxpbnV4X2lwX3Bvc3Ryb3V0ZV9pcHRhYmxlc19jb21wYXQoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJaW50IGlmaW5kZXgsCiAJCQkJCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkLApAQCAtNDQ5OSwzMCArNDU3NCwzNiBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHNlbGludXhfaXBfcG9zdHJvdXRlX2NvbXBhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkJaW50IGlmaW5kZXgsCi0JCQkJCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkLAotCQkJCQkJdTE2IGZhbWlseSwKLQkJCQkJCWNoYXIgKmFkZHJwLAotCQkJCQkJdTggcHJvdG8pCisJCQkJCQl1MTYgZmFtaWx5KQogewogCXN0cnVjdCBzb2NrICpzayA9IHNrYi0+c2s7CiAJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWM7CisJc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOworCWNoYXIgKmFkZHJwOworCXU4IHByb3RvOwogCiAJaWYgKHNrID09IE5VTEwpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7CiAKKwlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKKwlhZC51Lm5ldC5uZXRpZiA9IGlmaW5kZXg7CisJYWQudS5uZXQuZmFtaWx5ID0gZmFtaWx5OworCWlmIChzZWxpbnV4X3BhcnNlX3NrYihza2IsICZhZCwgJmFkZHJwLCAwLCAmcHJvdG8pKQorCQlyZXR1cm4gTkZfRFJPUDsKKwogCWlmIChzZWxpbnV4X2NvbXBhdF9uZXQpIHsKIAkJaWYgKHNlbGludXhfaXBfcG9zdHJvdXRlX2lwdGFibGVzX2NvbXBhdChza2ItPnNrLCBpZmluZGV4LAotCQkJCQkJCSBhZCwgZmFtaWx5LCBhZGRycCkpCisJCQkJCQkJICZhZCwgZmFtaWx5LCBhZGRycCkpCiAJCQlyZXR1cm4gTkZfRFJPUDsKIAl9IGVsc2UgewogCQlpZiAoYXZjX2hhc19wZXJtKHNrc2VjLT5zaWQsIHNrYi0+c2VjbWFyaywKLQkJCQkgU0VDQ0xBU1NfUEFDS0VULCBQQUNLRVRfX1NFTkQsIGFkKSkKKwkJCQkgU0VDQ0xBU1NfUEFDS0VULCBQQUNLRVRfX1NFTkQsICZhZCkpCiAJCQlyZXR1cm4gTkZfRFJPUDsKIAl9CiAKIAlpZiAoc2VsaW51eF9wb2xpY3ljYXBfbmV0cGVlcikKLQkJaWYgKHNlbGludXhfeGZybV9wb3N0cm91dGVfbGFzdChza3NlYy0+c2lkLCBza2IsIGFkLCBwcm90bykpCisJCWlmIChzZWxpbnV4X3hmcm1fcG9zdHJvdXRlX2xhc3Qoc2tzZWMtPnNpZCwgc2tiLCAmYWQsIHByb3RvKSkKIAkJCXJldHVybiBORl9EUk9QOwogCiAJcmV0dXJuIE5GX0FDQ0VQVDsKQEAgLTQ1MzYsMjMgKzQ2MTcsMTUgQEAKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOwogCWNoYXIgKmFkZHJwOwotCXU4IHByb3RvOwogCXU4IHNlY21hcmtfYWN0aXZlOwogCXU4IHBlZXJsYmxfYWN0aXZlOwogCi0JQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7Ci0JYWQudS5uZXQubmV0aWYgPSBpZmluZGV4OwotCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKLQlpZiAoc2VsaW51eF9wYXJzZV9za2Ioc2tiLCAmYWQsICZhZGRycCwgMCwgJnByb3RvKSkKLQkJcmV0dXJuIE5GX0RST1A7Ci0KIAkvKiBJZiBhbnkgc29ydCBvZiBjb21wYXRpYmlsaXR5IG1vZGUgaXMgZW5hYmxlZCB0aGVuIGhhbmRvZmYgcHJvY2Vzc2luZwogCSAqIHRvIHRoZSBzZWxpbnV4X2lwX3Bvc3Ryb3V0ZV9jb21wYXQoKSBmdW5jdGlvbiB0byBkZWFsIHdpdGggdGhlCiAJICogc3BlY2lhbCBoYW5kbGluZy4gIFdlIGRvIHRoaXMgaW4gYW4gYXR0ZW1wdCB0byBrZWVwIHRoaXMgZnVuY3Rpb24KIAkgKiBhcyBmYXN0IGFuZCBhcyBjbGVhbiBhcyBwb3NzaWJsZS4gKi8KIAlpZiAoc2VsaW51eF9jb21wYXRfbmV0IHx8ICFzZWxpbnV4X3BvbGljeWNhcF9uZXRwZWVyKQotCQlyZXR1cm4gc2VsaW51eF9pcF9wb3N0cm91dGVfY29tcGF0KHNrYiwgaWZpbmRleCwgJmFkLAotCQkJCQkJICAgZmFtaWx5LCBhZGRycCwgcHJvdG8pOworCQlyZXR1cm4gc2VsaW51eF9pcF9wb3N0cm91dGVfY29tcGF0KHNrYiwgaWZpbmRleCwgZmFtaWx5KTsKIAogCS8qIElmIHNrYi0+ZHN0LT54ZnJtIGlzIG5vbi1OVUxMIHRoZW4gdGhlIHBhY2tldCBpcyB1bmRlcmdvaW5nIGFuIElQc2VjCiAJICogcGFja2V0IHRyYW5zZm9ybWF0aW9uIHNvIGFsbG93IHRoZSBwYWNrZXQgdG8gcGFzcyB3aXRob3V0IGFueSBjaGVja3MKQEAgLTQ1NjgsMjEgKzQ2NDEsNDUgQEAKIAlpZiAoIXNlY21hcmtfYWN0aXZlICYmICFwZWVybGJsX2FjdGl2ZSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAotCS8qIGlmIHRoZSBwYWNrZXQgaXMgbG9jYWxseSBnZW5lcmF0ZWQgKHNrYi0+c2sgIT0gTlVMTCkgdGhlbiB1c2UgdGhlCi0JICogc29ja2V0J3MgbGFiZWwgYXMgdGhlIHBlZXIgbGFiZWwsIG90aGVyd2lzZSB0aGUgcGFja2V0IGlzIGJlaW5nCi0JICogZm9yd2FyZGVkIHRocm91Z2ggdGhpcyBzeXN0ZW0gYW5kIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIHBlZXIgbGFiZWwKLQkgKiBkaXJlY3RseSBmcm9tIHRoZSBwYWNrZXQgKi8KKwkvKiBpZiB0aGUgcGFja2V0IGlzIGJlaW5nIGZvcndhcmRlZCB0aGVuIGdldCB0aGUgcGVlciBsYWJlbCBmcm9tIHRoZQorCSAqIHBhY2tldCBpdHNlbGY7IG90aGVyd2lzZSBjaGVjayB0byBzZWUgaWYgaXQgaXMgZnJvbSBhIGxvY2FsCisJICogYXBwbGljYXRpb24gb3IgdGhlIGtlcm5lbCwgaWYgZnJvbSBhbiBhcHBsaWNhdGlvbiBnZXQgdGhlIHBlZXIgbGFiZWwKKwkgKiBmcm9tIHRoZSBzZW5kaW5nIHNvY2tldCwgb3RoZXJ3aXNlIHVzZSB0aGUga2VybmVsJ3Mgc2lkICovCiAJc2sgPSBza2ItPnNrOwotCWlmIChzaykgeworCWlmIChzayA9PSBOVUxMKSB7CisJCXN3aXRjaCAoZmFtaWx5KSB7CisJCWNhc2UgUEZfSU5FVDoKKwkJCWlmIChJUENCKHNrYiktPmZsYWdzICYgSVBTS0JfRk9SV0FSREVEKQorCQkJCXNlY21hcmtfcGVybSA9IFBBQ0tFVF9fRk9SV0FSRF9PVVQ7CisJCQllbHNlCisJCQkJc2VjbWFya19wZXJtID0gUEFDS0VUX19TRU5EOworCQkJYnJlYWs7CisJCWNhc2UgUEZfSU5FVDY6CisJCQlpZiAoSVA2Q0Ioc2tiKS0+ZmxhZ3MgJiBJUDZTS0JfRk9SV0FSREVEKQorCQkJCXNlY21hcmtfcGVybSA9IFBBQ0tFVF9fRk9SV0FSRF9PVVQ7CisJCQllbHNlCisJCQkJc2VjbWFya19wZXJtID0gUEFDS0VUX19TRU5EOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTkZfRFJPUDsKKwkJfQorCQlpZiAoc2VjbWFya19wZXJtID09IFBBQ0tFVF9fRk9SV0FSRF9PVVQpIHsKKwkJCWlmIChzZWxpbnV4X3NrYl9wZWVybGJsX3NpZChza2IsIGZhbWlseSwgJnBlZXJfc2lkKSkKKwkJCQlyZXR1cm4gTkZfRFJPUDsKKwkJfSBlbHNlCisJCQlwZWVyX3NpZCA9IFNFQ0lOSVRTSURfS0VSTkVMOworCX0gZWxzZSB7CiAJCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwogCQlwZWVyX3NpZCA9IHNrc2VjLT5zaWQ7CiAJCXNlY21hcmtfcGVybSA9IFBBQ0tFVF9fU0VORDsKLQl9IGVsc2UgewotCQlpZiAoc2VsaW51eF9za2JfcGVlcmxibF9zaWQoc2tiLCBmYW1pbHksICZwZWVyX3NpZCkpCi0JCQkJcmV0dXJuIE5GX0RST1A7Ci0JCXNlY21hcmtfcGVybSA9IFBBQ0tFVF9fRk9SV0FSRF9PVVQ7CiAJfQogCisJQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CisJYWQudS5uZXQubmV0aWYgPSBpZmluZGV4OworCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKKwlpZiAoc2VsaW51eF9wYXJzZV9za2Ioc2tiLCAmYWQsICZhZGRycCwgMCwgTlVMTCkpCisJCXJldHVybiBORl9EUk9QOworCiAJaWYgKHNlY21hcmtfYWN0aXZlKQogCQlpZiAoYXZjX2hhc19wZXJtKHBlZXJfc2lkLCBza2ItPnNlY21hcmssCiAJCQkJIFNFQ0NMQVNTX1BBQ0tFVCwgc2VjbWFya19wZXJtLCAmYWQpKQpAQCAtNTY1Niw2ICs1NzUzLDEzIEBACiAJCS5wZiA9CQlQRl9JTkVULAogCQkuaG9va251bSA9CU5GX0lORVRfRk9SV0FSRCwKIAkJLnByaW9yaXR5ID0JTkZfSVBfUFJJX1NFTElOVVhfRklSU1QsCisJfSwKKwl7CisJCS5ob29rID0JCXNlbGludXhfaXB2NF9vdXRwdXQsCisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkucGYgPQkJUEZfSU5FVCwKKwkJLmhvb2tudW0gPQlORl9JTkVUX0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5ID0JTkZfSVBfUFJJX1NFTElOVVhfRklSU1QsCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaAppbmRleCA0ODdhN2Q4Li5iOTEzYzhkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaApAQCAtMzksNiArMzksOSBAQAogI2lmZGVmIENPTkZJR19ORVRMQUJFTAogdm9pZCBzZWxpbnV4X25ldGxibF9jYWNoZV9pbnZhbGlkYXRlKHZvaWQpOwogCit2b2lkIHNlbGludXhfbmV0bGJsX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyb3IsIGludCBnYXRld2F5KTsKKwordm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9mcmVlKHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMpOwogdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjLAogCQkJCSAgICAgIGludCBmYW1pbHkpOwogCkBAIC00Niw4ICs0OSwxMSBAQAogCQkJCSB1MTYgZmFtaWx5LAogCQkJCSB1MzIgKnR5cGUsCiAJCQkJIHUzMiAqc2lkKTsKK2ludCBzZWxpbnV4X25ldGxibF9za2J1ZmZfc2V0c2lkKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHUxNiBmYW1pbHksCisJCQkJIHUzMiBzaWQpOwogCi12b2lkIHNlbGludXhfbmV0bGJsX3NvY2tfZ3JhZnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKTsKK3ZvaWQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSk7CiBpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKnNvY2spOwogaW50IHNlbGludXhfbmV0bGJsX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOwogaW50IHNlbGludXhfbmV0bGJsX3NvY2tfcmN2X3NrYihzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYywKQEAgLTU3LDEyICs2MywyNyBAQAogaW50IHNlbGludXhfbmV0bGJsX3NvY2tldF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkJICAgICBpbnQgbGV2ZWwsCiAJCQkJICAgICBpbnQgb3B0bmFtZSk7CitpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpOworCiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfbmV0bGJsX2NhY2hlX2ludmFsaWRhdGUodm9pZCkKIHsKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X25ldGxibF9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBpbnQgZXJyb3IsCisJCQkJICAgICAgaW50IGdhdGV3YXkpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfZnJlZSgKKwkJCQkJICAgICAgIHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMpCit7CisJcmV0dXJuOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQoCiAJCQkJCSAgICAgICBzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjLAogCQkJCQkgICAgICAgaW50IGZhbWlseSkKQEAgLTc5LDkgKzEwMCwyMSBAQAogCSpzaWQgPSBTRUNTSURfTlVMTDsKIAlyZXR1cm4gMDsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfbmV0bGJsX3NrYnVmZl9zZXRzaWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgIHUxNiBmYW1pbHksCisJCQkJCSAgICAgICB1MzIgc2lkKQoreworCXJldHVybiAwOworfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9uZXRsYmxfc29ja19ncmFmdChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCSAgICAgc3RydWN0IHNvY2tldCAqc29jaykKK3N0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfbmV0bGJsX2Nvbm5fc2V0c2lkKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJCXUxNiBmYW1pbHkpCiB7CiAJcmV0dXJuOwogfQpAQCAtMTA3LDYgKzE0MCwxMSBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCXJldHVybiAwOworfQogI2VuZGlmIC8qIENPTkZJR19ORVRMQUJFTCAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaAppbmRleCA5MTA3MGFiLi5mOGJlOGQ3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCkBAIC0xMDksMTYgKzEwOSwxOSBAQAogfTsKIAogc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCB7Ci0JdTMyIHNpZDsJCQkvKiBTSUQgb2YgdGhpcyBvYmplY3QgKi8KLQl1MzIgcGVlcl9zaWQ7CQkJLyogU0lEIG9mIHBlZXIgKi8KLQl1MTYgc2NsYXNzOwkJCS8qIHNvY2sgc2VjdXJpdHkgY2xhc3MgKi8KICNpZmRlZiBDT05GSUdfTkVUTEFCRUwKIAllbnVtIHsJCQkJLyogTmV0TGFiZWwgc3RhdGUgKi8KIAkJTkxCTF9VTlNFVCA9IDAsCiAJCU5MQkxfUkVRVUlSRSwKIAkJTkxCTF9MQUJFTEVELAorCQlOTEJMX1JFUVNLQiwKKwkJTkxCTF9DT05OTEFCRUxFRCwKIAl9IG5sYmxfc3RhdGU7CisJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqbmxibF9zZWNhdHRyOyAvKiBOZXRMYWJlbCBzZWMgYXR0cmlidXRlcyAqLwogI2VuZGlmCisJdTMyIHNpZDsJCQkvKiBTSUQgb2YgdGhpcyBvYmplY3QgKi8KKwl1MzIgcGVlcl9zaWQ7CQkJLyogU0lEIG9mIHBlZXIgKi8KKwl1MTYgc2NsYXNzOwkJCS8qIHNvY2sgc2VjdXJpdHkgY2xhc3MgKi8KIH07CiAKIHN0cnVjdCBrZXlfc2VjdXJpdHlfc3RydWN0IHsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYyBiL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYwppbmRleCA4OWI0MTgzLi5mNTg3MDFhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9uZXRsYWJlbC5jCkBAIC05LDcgKzksNyBAQAogICovCiAKIC8qCi0gKiAoYykgQ29weXJpZ2h0IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuLCAyMDA3CisgKiAoYykgQ29weXJpZ2h0IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuLCAyMDA3LCAyMDA4CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjksOCArMjksMTIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9uZXRsYWJlbC5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAKICNpbmNsdWRlICJvYmpzZWMuaCIKICNpbmNsdWRlICJzZWN1cml0eS5oIgpAQCAtNjQsMzIgKzY4LDY5IEBACiB9CiAKIC8qKgotICogc2VsaW51eF9uZXRsYmxfc29ja19zZXRzaWQgLSBMYWJlbCBhIHNvY2tldCB1c2luZyB0aGUgTmV0TGFiZWwgbWVjaGFuaXNtCi0gKiBAc2s6IHRoZSBzb2NrZXQgdG8gbGFiZWwKLSAqIEBzaWQ6IHRoZSBTSUQgdG8gdXNlCisgKiBzZWxpbnV4X25ldGxibF9zb2NrX2dlbmF0dHIgLSBHZW5lcmF0ZSB0aGUgTmV0TGFiZWwgc29ja2V0IHNlY2F0dHIKKyAqIEBzazogdGhlIHNvY2tldAogICoKICAqIERlc2NyaXB0aW9uOgotICogQXR0ZW1wdCB0byBsYWJlbCBhIHNvY2tldCB1c2luZyB0aGUgTmV0TGFiZWwgbWVjaGFuaXNtIHVzaW5nIHRoZSBnaXZlbgotICogU0lELiAgUmV0dXJucyB6ZXJvIHZhbHVlcyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqIEdlbmVyYXRlIHRoZSBOZXRMYWJlbCBzZWN1cml0eSBhdHRyaWJ1dGVzIGZvciBhIHNvY2tldCwgbWFraW5nIGZ1bGwgdXNlIG9mCisgKiB0aGUgc29ja2V0J3MgYXR0cmlidXRlIGNhY2hlLiAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KICAqCiAgKi8KLXN0YXRpYyBpbnQgc2VsaW51eF9uZXRsYmxfc29ja19zZXRzaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgc2lkKQorc3RhdGljIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlbGludXhfbmV0bGJsX3NvY2tfZ2VuYXR0cihzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaW50IHJjOwogCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwotCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgc2VjYXR0cjsKKwlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyOwogCi0JbmV0bGJsX3NlY2F0dHJfaW5pdCgmc2VjYXR0cik7CisJaWYgKHNrc2VjLT5ubGJsX3NlY2F0dHIgIT0gTlVMTCkKKwkJcmV0dXJuIHNrc2VjLT5ubGJsX3NlY2F0dHI7CiAKLQlyYyA9IHNlY3VyaXR5X25ldGxibF9zaWRfdG9fc2VjYXR0cihzaWQsICZzZWNhdHRyKTsKLQlpZiAocmMgIT0gMCkKLQkJZ290byBzb2NrX3NldHNpZF9yZXR1cm47Ci0JcmMgPSBuZXRsYmxfc29ja19zZXRhdHRyKHNrLCAmc2VjYXR0cik7Ci0JaWYgKHJjID09IDApCisJc2VjYXR0ciA9IG5ldGxibF9zZWNhdHRyX2FsbG9jKEdGUF9BVE9NSUMpOworCWlmIChzZWNhdHRyID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCXJjID0gc2VjdXJpdHlfbmV0bGJsX3NpZF90b19zZWNhdHRyKHNrc2VjLT5zaWQsIHNlY2F0dHIpOworCWlmIChyYyAhPSAwKSB7CisJCW5ldGxibF9zZWNhdHRyX2ZyZWUoc2VjYXR0cik7CisJCXJldHVybiBOVUxMOworCX0KKwlza3NlYy0+bmxibF9zZWNhdHRyID0gc2VjYXR0cjsKKworCXJldHVybiBzZWNhdHRyOworfQorCisvKioKKyAqIHNlbGludXhfbmV0bGJsX3NvY2tfc2V0c2lkIC0gTGFiZWwgYSBzb2NrZXQgdXNpbmcgdGhlIE5ldExhYmVsIG1lY2hhbmlzbQorICogQHNrOiB0aGUgc29ja2V0IHRvIGxhYmVsCisgKgorICogRGVzY3JpcHRpb246CisgKiBBdHRlbXB0IHRvIGxhYmVsIGEgc29ja2V0IHVzaW5nIHRoZSBOZXRMYWJlbCBtZWNoYW5pc20uICBSZXR1cm5zIHplcm8gdmFsdWVzCisgKiBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgc2VsaW51eF9uZXRsYmxfc29ja19zZXRzaWQoc3RydWN0IHNvY2sgKnNrKQoreworCWludCByYzsKKwlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrLT5za19zZWN1cml0eTsKKwlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyOworCisJaWYgKHNrc2VjLT5ubGJsX3N0YXRlICE9IE5MQkxfUkVRVUlSRSkKKwkJcmV0dXJuIDA7CisKKwlzZWNhdHRyID0gc2VsaW51eF9uZXRsYmxfc29ja19nZW5hdHRyKHNrKTsKKwlpZiAoc2VjYXR0ciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyYyA9IG5ldGxibF9zb2NrX3NldGF0dHIoc2ssIHNlY2F0dHIpOworCXN3aXRjaCAocmMpIHsKKwljYXNlIDA6CiAJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9MQUJFTEVEOworCQlicmVhazsKKwljYXNlIC1FREVTVEFERFJSRVE6CisJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9SRVFTS0I7CisJCXJjID0gMDsKKwkJYnJlYWs7CisJfQogCi1zb2NrX3NldHNpZF9yZXR1cm46Ci0JbmV0bGJsX3NlY2F0dHJfZGVzdHJveSgmc2VjYXR0cik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMDYsNiArMTQ3LDM4IEBACiB9CiAKIC8qKgorICogc2VsaW51eF9uZXRsYmxfZXJyIC0gSGFuZGxlIGEgTmV0TGFiZWwgcGFja2V0IGVycm9yCisgKiBAc2tiOiB0aGUgcGFja2V0CisgKiBAZXJyb3I6IHRoZSBlcnJvciBjb2RlCisgKiBAZ2F0ZXdheTogdHJ1ZSBpZiBob3N0IGlzIGFjdGluZyBhcyBhIGdhdGV3YXksIGZhbHNlIG90aGVyd2lzZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogV2hlbiBhIHBhY2tldCBpcyBkcm9wcGVkIGR1ZSB0byBhIGNhbGwgdG8gYXZjX2hhc19wZXJtKCkgcGFzcyB0aGUgZXJyb3IKKyAqIGNvZGUgdG8gdGhlIE5ldExhYmVsIHN1YnN5c3RlbSBzbyBhbnkgcHJvdG9jb2wgc3BlY2lmaWMgcHJvY2Vzc2luZyBjYW4gYmUKKyAqIGRvbmUuICBUaGlzIGlzIHNhZmUgdG8gY2FsbCBldmVuIGlmIHlvdSBhcmUgdW5zdXJlIGlmIE5ldExhYmVsIGxhYmVsaW5nIGlzCisgKiBwcmVzZW50IG9uIHRoZSBwYWNrZXQsIE5ldExhYmVsIGlzIHNtYXJ0IGVub3VnaCB0byBvbmx5IGFjdCB3aGVuIGl0IHNob3VsZC4KKyAqCisgKi8KK3ZvaWQgc2VsaW51eF9uZXRsYmxfZXJyKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnJvciwgaW50IGdhdGV3YXkpCit7CisJbmV0bGJsX3NrYnVmZl9lcnIoc2tiLCBlcnJvciwgZ2F0ZXdheSk7Cit9CisKKy8qKgorICogc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfZnJlZSAtIEZyZWUgdGhlIE5ldExhYmVsIGZpZWxkcworICogQHNzc2VjOiB0aGUgc2tfc2VjdXJpdHlfc3RydWN0CisgKgorICogRGVzY3JpcHRpb246CisgKiBGcmVlIGFsbCBvZiB0aGUgbWVtb3J5IGluIHRoZSBOZXRMYWJlbCBmaWVsZHMgb2YgYSBza19zZWN1cml0eV9zdHJ1Y3QuCisgKgorICovCit2b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X2ZyZWUoc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYykKK3sKKwlpZiAoc3NlYy0+bmxibF9zZWNhdHRyICE9IE5VTEwpCisJCW5ldGxibF9zZWNhdHRyX2ZyZWUoc3NlYy0+bmxibF9zZWNhdHRyKTsKK30KKworLyoqCiAgKiBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldCAtIFJlc2V0IHRoZSBOZXRMYWJlbCBmaWVsZHMKICAqIEBzc2VjOiB0aGUgc2tfc2VjdXJpdHlfc3RydWN0CiAgKiBAZmFtaWx5OiB0aGUgc29ja2V0IGZhbWlseQpAQCAtMTYzLDM1ICsyMzYsMTE4IEBACiB9CiAKIC8qKgotICogc2VsaW51eF9uZXRsYmxfc29ja19ncmFmdCAtIE5ldGxhYmVsIHRoZSBuZXcgc29ja2V0Ci0gKiBAc2s6IHRoZSBuZXcgY29ubmVjdGlvbgotICogQHNvY2s6IHRoZSBuZXcgc29ja2V0CisgKiBzZWxpbnV4X25ldGxibF9za2J1ZmZfc2V0c2lkIC0gU2V0IHRoZSBOZXRMYWJlbCBvbiBhIHBhY2tldCBnaXZlbiBhIHNpZAorICogQHNrYjogdGhlIHBhY2tldAorICogQGZhbWlseTogcHJvdG9jb2wgZmFtaWx5CisgKiBAc2lkOiB0aGUgU0lECiAgKgotICogRGVzY3JpcHRpb246Ci0gKiBUaGUgY29ubmVjdGlvbiByZXByZXNlbnRlZCBieSBAc2sgaXMgYmVpbmcgZ3JhZnRlZCBvbnRvIEBzb2NrIHNvIHNldCB0aGUKLSAqIHNvY2tldCdzIE5ldExhYmVsIHRvIG1hdGNoIHRoZSBTSUQgb2YgQHNrLgorICogRGVzY3JpcHRpb24KKyAqIENhbGwgdGhlIE5ldExhYmVsIG1lY2hhbmlzbSB0byBzZXQgdGhlIGxhYmVsIG9mIGEgcGFja2V0IHVzaW5nIEBzaWQuCisgKiBSZXR1cm5zIHplcm8gb24gYXVjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCiAgKgogICovCi12b2lkIHNlbGludXhfbmV0bGJsX3NvY2tfZ3JhZnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKQoraW50IHNlbGludXhfbmV0bGJsX3NrYnVmZl9zZXRzaWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgdTE2IGZhbWlseSwKKwkJCQkgdTMyIHNpZCkKIHsKKwlpbnQgcmM7CisJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciBzZWNhdHRyX3N0b3JhZ2U7CisJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0ciA9IE5VTEw7CisJc3RydWN0IHNvY2sgKnNrOworCisJLyogaWYgdGhpcyBpcyBhIGxvY2FsbHkgZ2VuZXJhdGVkIHBhY2tldCBjaGVjayB0byBzZWUgaWYgaXQgaXMgYWxyZWFkeQorCSAqIGJlaW5nIGxhYmVsZWQgYnkgaXQncyBwYXJlbnQgc29ja2V0LCBpZiBpdCBpcyBqdXN0IGV4aXQgKi8KKwlzayA9IHNrYi0+c2s7CisJaWYgKHNrICE9IE5VTEwpIHsKKwkJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7CisJCWlmIChza3NlYy0+bmxibF9zdGF0ZSAhPSBOTEJMX1JFUVNLQikKKwkJCXJldHVybiAwOworCQlzZWNhdHRyID0gc2tzZWMtPm5sYmxfc2VjYXR0cjsKKwl9CisJaWYgKHNlY2F0dHIgPT0gTlVMTCkgeworCQlzZWNhdHRyID0gJnNlY2F0dHJfc3RvcmFnZTsKKwkJbmV0bGJsX3NlY2F0dHJfaW5pdChzZWNhdHRyKTsKKwkJcmMgPSBzZWN1cml0eV9uZXRsYmxfc2lkX3RvX3NlY2F0dHIoc2lkLCBzZWNhdHRyKTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIHNrYnVmZl9zZXRzaWRfcmV0dXJuOworCX0KKworCXJjID0gbmV0bGJsX3NrYnVmZl9zZXRhdHRyKHNrYiwgZmFtaWx5LCBzZWNhdHRyKTsKKworc2tidWZmX3NldHNpZF9yZXR1cm46CisJaWYgKHNlY2F0dHIgPT0gJnNlY2F0dHJfc3RvcmFnZSkKKwkJbmV0bGJsX3NlY2F0dHJfZGVzdHJveShzZWNhdHRyKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX2VzdGFibGlzaGVkIC0gTmV0bGFiZWwgdGhlIG5ld2x5IGFjY2VwdGVkIGNvbm5lY3Rpb24KKyAqIEBzazogdGhlIG5ldyBjb25uZWN0aW9uCisgKgorICogRGVzY3JpcHRpb246CisgKiBBIG5ldyBjb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkIG9uIEBzayBzbyBtYWtlIHN1cmUgaXQgaXMgbGFiZWxlZAorICogY29ycmVjdGx5IHdpdGggdGhlIE5ldExhYmVsIHN1c2JzeXN0ZW0uCisgKgorICovCit2b2lkIHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHUxNiBmYW1pbHkpCit7CisJaW50IHJjOwogCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwotCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgc2VjYXR0cjsKLQl1MzIgbmxibF9wZWVyX3NpZDsKKwlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyOworCXN0cnVjdCBpbmV0X3NvY2sgKnNrX2luZXQgPSBpbmV0X3NrKHNrKTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKIAogCWlmIChza3NlYy0+bmxibF9zdGF0ZSAhPSBOTEJMX1JFUVVJUkUpCiAJCXJldHVybjsKIAotCW5ldGxibF9zZWNhdHRyX2luaXQoJnNlY2F0dHIpOwotCWlmIChuZXRsYmxfc29ja19nZXRhdHRyKHNrLCAmc2VjYXR0cikgPT0gMCAmJgotCSAgICBzZWNhdHRyLmZsYWdzICE9IE5FVExCTF9TRUNBVFRSX05PTkUgJiYKLQkgICAgc2VjdXJpdHlfbmV0bGJsX3NlY2F0dHJfdG9fc2lkKCZzZWNhdHRyLCAmbmxibF9wZWVyX3NpZCkgPT0gMCkKLQkJc2tzZWMtPnBlZXJfc2lkID0gbmxibF9wZWVyX3NpZDsKLQluZXRsYmxfc2VjYXR0cl9kZXN0cm95KCZzZWNhdHRyKTsKKwlzZWNhdHRyID0gc2VsaW51eF9uZXRsYmxfc29ja19nZW5hdHRyKHNrKTsKKwlpZiAoc2VjYXR0ciA9PSBOVUxMKQorCQlyZXR1cm47CiAKLQkvKiBUcnkgdG8gc2V0IHRoZSBOZXRMYWJlbCBvbiB0aGUgc29ja2V0IHRvIHNhdmUgdGltZSBsYXRlciwgaWYgd2UgZmFpbAotCSAqIGhlcmUgd2Ugd2lsbCBwaWNrIHVwIHRoZSBwaWVjZXMgaW4gbGF0ZXIgY2FsbHMgdG8KLQkgKiBzZWxpbnV4X25ldGxibF9pbm9kZV9wZXJtaXNzaW9uKCkuICovCi0Jc2VsaW51eF9uZXRsYmxfc29ja19zZXRzaWQoc2ssIHNrc2VjLT5zaWQpOworCXJjID0gbmV0bGJsX3NvY2tfc2V0YXR0cihzaywgc2VjYXR0cik7CisJc3dpdGNoIChyYykgeworCWNhc2UgMDoKKwkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX0xBQkVMRUQ7CisJCWJyZWFrOworCWNhc2UgLUVERVNUQUREUlJFUToKKwkJLyogbm8gUEZfSU5FVDYgc3VwcG9ydCB5ZXQgYmVjYXVzZSB3ZSBkb24ndCBzdXBwb3J0IGFueSBJUHY2CisJCSAqIGxhYmVsaW5nIHByb3RvY29scyAqLworCQlpZiAoZmFtaWx5ICE9IFBGX0lORVQpIHsKKwkJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9VTlNFVDsKKwkJCXJldHVybjsKKwkJfQorCisJCWFkZHIuc2luX2ZhbWlseSA9IGZhbWlseTsKKwkJYWRkci5zaW5fYWRkci5zX2FkZHIgPSBza19pbmV0LT5kYWRkcjsKKwkJaWYgKG5ldGxibF9jb25uX3NldGF0dHIoc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwKKwkJCQkJc2VjYXR0cikgIT0gMCkgeworCQkJLyogd2UgZmFpbGVkIHRvIGxhYmVsIHRoZSBjb25uZWN0ZWQgc29ja2V0IChjb3VsZCBiZQorCQkJICogZm9yIGEgdmFyaWV0eSBvZiByZWFzb25zLCB0aGUgYWN0dWFsICJ3aHkiIGlzbid0CisJCQkgKiBpbXBvcnRhbnQgaGVyZSkgc28gd2UgaGF2ZSB0byBnbyB0byBvdXIgYmFja3VwIHBsYW4sCisJCQkgKiBsYWJlbGluZyB0aGUgcGFja2V0cyBpbmRpdmlkdWFsbHkgaW4gdGhlIG5ldGZpbHRlcgorCQkJICogbG9jYWwgb3V0cHV0IGhvb2suICB0aGlzIGlzIG9rYXkgYnV0IHdlIG5lZWQgdG8KKwkJCSAqIGFkanVzdCB0aGUgTVNTIG9mIHRoZSBjb25uZWN0aW9uIHRvIHRha2UgaW50bworCQkJICogYWNjb3VudCBhbnkgbGFiZWxpbmcgb3ZlcmhlYWQsIHNpbmNlIHdlIGRvbid0IGtub3cKKwkJCSAqIHRoZSBleGFjdCBvdmVyaGVhZCBhdCB0aGlzIHBvaW50IHdlJ2xsIHVzZSB0aGUgd29yc3QKKwkJCSAqIGNhc2UgdmFsdWUgd2hpY2ggaXMgNDAgYnl0ZXMgZm9yIElQdjQgKi8KKwkJCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqc2tfY29ubiA9IGluZXRfY3NrKHNrKTsKKwkJCXNrX2Nvbm4tPmljc2tfZXh0X2hkcl9sZW4gKz0gNDAgLQorCQkJCSAgICAgIChza19pbmV0LT5vcHQgPyBza19pbmV0LT5vcHQtPm9wdGxlbiA6IDApOworCQkJc2tfY29ubi0+aWNza19zeW5jX21zcyhzaywgc2tfY29ubi0+aWNza19wbXR1X2Nvb2tpZSk7CisKKwkJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9SRVFTS0I7CisJCX0gZWxzZQorCQkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX0NPTk5MQUJFTEVEOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBub3RlIHRoYXQgd2UgYXJlIGZhaWxpbmcgdG8gbGFiZWwgdGhlIHNvY2tldCB3aGljaCBjb3VsZCBiZQorCQkgKiBhIGJhZCB0aGluZyBzaW5jZSBpdCBtZWFucyB0cmFmZmljIGNvdWxkIGxlYXZlIHRoZSBzeXN0ZW0KKwkJICogd2l0aG91dCB0aGUgZGVzaXJlZCBsYWJlbGluZywgaG93ZXZlciwgYWxsIGlzIG5vdCBsb3N0IGFzCisJCSAqIHdlIGhhdmUgYSBjaGVjayBpbiBzZWxpbnV4X25ldGxibF9pbm9kZV9wZXJtaXNzaW9uKCkgdG8KKwkJICogcGljayB1cCB0aGUgcGllY2VzIHRoYXQgd2UgbWlnaHQgZHJvcCBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QKKwkJICogcmV0dXJuIGFuIGVycm9yIGNvZGUgKi8KKwkJYnJlYWs7CisJfQogfQogCiAvKioKQEAgLTIwNSwxMyArMzYxLDcgQEAKICAqLwogaW50IHNlbGludXhfbmV0bGJsX3NvY2tldF9wb3N0X2NyZWF0ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewotCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwotCi0JaWYgKHNrc2VjLT5ubGJsX3N0YXRlICE9IE5MQkxfUkVRVUlSRSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gc2VsaW51eF9uZXRsYmxfc29ja19zZXRzaWQoc2ssIHNrc2VjLT5zaWQpOworCXJldHVybiBzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZChzb2NrLT5zayk7CiB9CiAKIC8qKgpAQCAtMjQ2LDcgKzM5Niw3IEBACiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWJoX2xvY2tfc29ja19uZXN0ZWQoc2spOwogCWlmIChsaWtlbHkoc2tzZWMtPm5sYmxfc3RhdGUgPT0gTkxCTF9SRVFVSVJFKSkKLQkJcmMgPSBzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZChzaywgc2tzZWMtPnNpZCk7CisJCXJjID0gc2VsaW51eF9uZXRsYmxfc29ja19zZXRzaWQoc2spOwogCWVsc2UKIAkJcmMgPSAwOwogCWJoX3VubG9ja19zb2NrKHNrKTsKQEAgLTMwNyw3ICs0NTcsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChubGJsX3NpZCAhPSBTRUNJTklUU0lEX1VOTEFCRUxFRCkKLQkJbmV0bGJsX3NrYnVmZl9lcnIoc2tiLCByYyk7CisJCW5ldGxibF9za2J1ZmZfZXJyKHNrYiwgcmMsIDApOwogCXJldHVybiByYzsKIH0KIApAQCAtMzM0LDcgKzQ4NCw4IEBACiAJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciBzZWNhdHRyOwogCiAJaWYgKGxldmVsID09IElQUFJPVE9fSVAgJiYgb3B0bmFtZSA9PSBJUF9PUFRJT05TICYmCi0JICAgIHNrc2VjLT5ubGJsX3N0YXRlID09IE5MQkxfTEFCRUxFRCkgeworCSAgICAoc2tzZWMtPm5sYmxfc3RhdGUgPT0gTkxCTF9MQUJFTEVEIHx8CisJICAgICBza3NlYy0+bmxibF9zdGF0ZSA9PSBOTEJMX0NPTk5MQUJFTEVEKSkgewogCQluZXRsYmxfc2VjYXR0cl9pbml0KCZzZWNhdHRyKTsKIAkJbG9ja19zb2NrKHNrKTsKIAkJcmMgPSBuZXRsYmxfc29ja19nZXRhdHRyKHNrLCAmc2VjYXR0cik7CkBAIC0zNDYsMyArNDk3LDUwIEBACiAKIAlyZXR1cm4gcmM7CiB9CisKKy8qKgorICogc2VsaW51eF9uZXRsYmxfc29ja2V0X2Nvbm5lY3QgLSBMYWJlbCBhIGNsaWVudC1zaWRlIHNvY2tldCBvbiBjb25uZWN0CisgKiBAc2s6IHRoZSBzb2NrZXQgdG8gbGFiZWwKKyAqIEBhZGRyOiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcworICoKKyAqIERlc2NyaXB0aW9uOgorICogQXR0ZW1wdCB0byBsYWJlbCBhIGNvbm5lY3RlZCBzb2NrZXQgd2l0aCBOZXRMYWJlbCB1c2luZyB0aGUgZ2l2ZW4gYWRkcmVzcy4KKyAqIFJldHVybnMgemVybyB2YWx1ZXMgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKgorICovCitpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJaW50IHJjOworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OworCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHI7CisKKwlpZiAoc2tzZWMtPm5sYmxfc3RhdGUgIT0gTkxCTF9SRVFTS0IgJiYKKwkgICAgc2tzZWMtPm5sYmxfc3RhdGUgIT0gTkxCTF9DT05OTEFCRUxFRCkKKwkJcmV0dXJuIDA7CisKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJYmhfbG9ja19zb2NrX25lc3RlZChzayk7CisKKwkvKiBjb25uZWN0ZWQgc29ja2V0cyBhcmUgYWxsb3dlZCB0byBkaXNjb25uZWN0IHdoZW4gdGhlIGFkZHJlc3MgZmFtaWx5CisJICogaXMgc2V0IHRvIEFGX1VOU1BFQywgaWYgdGhhdCBpcyB3aGF0IGlzIGhhcHBlbmluZyB3ZSB3YW50IHRvIHJlc2V0CisJICogdGhlIHNvY2tldCAqLworCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfVU5TUEVDKSB7CisJCW5ldGxibF9zb2NrX2RlbGF0dHIoc2spOworCQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfUkVRU0tCOworCQlyYyA9IDA7CisJCWdvdG8gc29ja2V0X2Nvbm5lY3RfcmV0dXJuOworCX0KKwlzZWNhdHRyID0gc2VsaW51eF9uZXRsYmxfc29ja19nZW5hdHRyKHNrKTsKKwlpZiAoc2VjYXR0ciA9PSBOVUxMKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBzb2NrZXRfY29ubmVjdF9yZXR1cm47CisJfQorCXJjID0gbmV0bGJsX2Nvbm5fc2V0YXR0cihzaywgYWRkciwgc2VjYXR0cik7CisJaWYgKHJjID09IDApCisJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9DT05OTEFCRUxFRDsKKworc29ja2V0X2Nvbm5lY3RfcmV0dXJuOgorCWJoX3VubG9ja19zb2NrKHNrKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKaW5kZXggYWIwY2MwYy4uMzQzYzhhYiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwpAQCAtMjk1NSw3ICsyOTU1LDcgQEAKICAqLwogaW50IHNlY3VyaXR5X25ldGxibF9zaWRfdG9fc2VjYXR0cih1MzIgc2lkLCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewotCWludCByYyA9IC1FTk9FTlQ7CisJaW50IHJjOwogCXN0cnVjdCBjb250ZXh0ICpjdHg7CiAKIAlpZiAoIXNzX2luaXRpYWxpemVkKQpAQCAtMjk2MywxMSArMjk2MywxOCBAQAogCiAJcmVhZF9sb2NrKCZwb2xpY3lfcndsb2NrKTsKIAljdHggPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHNpZCk7Ci0JaWYgKGN0eCA9PSBOVUxMKQorCWlmIChjdHggPT0gTlVMTCkgeworCQlyYyA9IC1FTk9FTlQ7CiAJCWdvdG8gbmV0bGJsX3NpZF90b19zZWNhdHRyX2ZhaWx1cmU7CisJfQogCXNlY2F0dHItPmRvbWFpbiA9IGtzdHJkdXAocG9saWN5ZGIucF90eXBlX3ZhbF90b19uYW1lW2N0eC0+dHlwZSAtIDFdLAogCQkJCSAgR0ZQX0FUT01JQyk7Ci0Jc2VjYXR0ci0+ZmxhZ3MgfD0gTkVUTEJMX1NFQ0FUVFJfRE9NQUlOX0NQWTsKKwlpZiAoc2VjYXR0ci0+ZG9tYWluID09IE5VTEwpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG5ldGxibF9zaWRfdG9fc2VjYXR0cl9mYWlsdXJlOworCX0KKwlzZWNhdHRyLT5hdHRyLnNlY2lkID0gc2lkOworCXNlY2F0dHItPmZsYWdzIHw9IE5FVExCTF9TRUNBVFRSX0RPTUFJTl9DUFkgfCBORVRMQkxfU0VDQVRUUl9TRUNJRDsKIAltbHNfZXhwb3J0X25ldGxibF9sdmwoY3R4LCBzZWNhdHRyKTsKIAlyYyA9IG1sc19leHBvcnRfbmV0bGJsX2NhdChjdHgsIHNlY2F0dHIpOwogCWlmIChyYyAhPSAwKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCA4N2Q3NTQxLi42ZTJkYzBiIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtMjE3OSw3ICsyMTc5LDEwIEBACiAJICogVGhpcyBpcyB0aGUgc2ltcGxpc3QgcG9zc2libGUgc2VjdXJpdHkgbW9kZWwKIAkgKiBmb3IgbmV0d29ya2luZy4KIAkgKi8KLQlyZXR1cm4gc21rX2FjY2VzcyhzbWFjaywgc3NwLT5zbWtfaW4sIE1BWV9XUklURSk7CisJcmMgPSBzbWtfYWNjZXNzKHNtYWNrLCBzc3AtPnNta19pbiwgTUFZX1dSSVRFKTsKKwlpZiAocmMgIT0gMCkKKwkJbmV0bGJsX3NrYnVmZl9lcnIoc2tiLCByYywgMCk7CisJcmV0dXJuIHJjOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYwppbmRleCBlN2M2NDI0Li5jMjFkOGM4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCkBAIC0zNTQsOSArMzU0LDExIEBACiAJCWRvaXAtPnRhZ3NbcmNdID0gQ0lQU09fVjRfVEFHX0lOVkFMSUQ7CiAKIAlyYyA9IG5ldGxibF9jZmdfY2lwc292NF9hZGRfbWFwKGRvaXAsIE5VTEwsICZhdWRpdF9pbmZvKTsKLQlpZiAocmMgIT0gMCkKKwlpZiAocmMgIT0gMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczolZCBhZGQgcmMgPSAlZFxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgcmMpOworCQlrZnJlZShkb2lwKTsKKwl9CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL3NvdW5kYnVzL3NvdW5kYnVzLmggYi9zb3VuZC9hb2Evc291bmRidXMvc291bmRidXMuaAppbmRleCA2MjJjZDM3Li5hMGYyMjNjIDEwMDY0NAotLS0gYS9zb3VuZC9hb2Evc291bmRidXMvc291bmRidXMuaAorKysgYi9zb3VuZC9hb2Evc291bmRidXMvc291bmRidXMuaApAQCAtOCw3ICs4LDcgQEAKICNpZm5kZWYgX19TT1VOREJVU19ICiAjZGVmaW5lIF9fU09VTkRCVVNfSAogCi0jaW5jbHVkZSA8YXNtL29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jCmluZGV4IDk5MDI2ZGYuLjM0YzFkOTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAltdXRleF9sb2NrKCZjYXJfbXV0ZXgpOwogCiAJLyogc2V0IHVwIHByaW1hcnkgb3Igc2Vjb25kYXJ5IGNvZGVjIHNwYWNlICovCi0JaWYgKChjcHVfaXNfcHhhMjF4KCkgfHwgY3B1X2lzX3B4YTI1eCgpKSAmJiByZWcgPT0gQUM5N19HUElPX1NUQVRVUykKKwlpZiAoY3B1X2lzX3B4YTI1eCgpICYmIHJlZyA9PSBBQzk3X0dQSU9fU1RBVFVTKQogCQlyZWdfYWRkciA9IGFjOTctPm51bSA/ICZTTUNfUkVHX0JBU0UgOiAmUE1DX1JFR19CQVNFOwogCWVsc2UKIAkJcmVnX2FkZHIgPSBhYzk3LT5udW0gPyAmU0FDX1JFR19CQVNFIDogJlBBQ19SRUdfQkFTRTsKQEAgLTkwLDcgKzkwLDcgQEAKIAltdXRleF9sb2NrKCZjYXJfbXV0ZXgpOwogCiAJLyogc2V0IHVwIHByaW1hcnkgb3Igc2Vjb25kYXJ5IGNvZGVjIHNwYWNlICovCi0JaWYgKChjcHVfaXNfcHhhMjF4KCkgfHwgY3B1X2lzX3B4YTI1eCgpKSAmJiByZWcgPT0gQUM5N19HUElPX1NUQVRVUykKKwlpZiAoY3B1X2lzX3B4YTI1eCgpICYmIHJlZyA9PSBBQzk3X0dQSU9fU1RBVFVTKQogCQlyZWdfYWRkciA9IGFjOTctPm51bSA/ICZTTUNfUkVHX0JBU0UgOiAmUE1DX1JFR19CQVNFOwogCWVsc2UKIAkJcmVnX2FkZHIgPSBhYzk3LT5udW0gPyAmU0FDX1JFR19CQVNFIDogJlBBQ19SRUdfQkFTRTsKQEAgLTIwMCw3ICsyMDAsNyBAQAogYm9vbCBweGEyeHhfYWM5N190cnlfd2FybV9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCiB7CiAjaWZkZWYgQ09ORklHX1BYQTI1eAotCWlmIChjcHVfaXNfcHhhMjF4KCkgfHwgY3B1X2lzX3B4YTI1eCgpKQorCWlmIChjcHVfaXNfcHhhMjV4KCkpCiAJCXB4YV9hYzk3X3dhcm1fcHhhMjV4KCk7CiAJZWxzZQogI2VuZGlmCkBAIC0yMzAsNyArMjMwLDcgQEAKIGJvb2wgcHhhMnh4X2FjOTdfdHJ5X2NvbGRfcmVzZXQoc3RydWN0IHNuZF9hYzk3ICphYzk3KQogewogI2lmZGVmIENPTkZJR19QWEEyNXgKLQlpZiAoY3B1X2lzX3B4YTIxeCgpIHx8IGNwdV9pc19weGEyNXgoKSkKKwlpZiAoY3B1X2lzX3B4YTI1eCgpKQogCQlweGFfYWM5N19jb2xkX3B4YTI1eCgpOwogCWVsc2UKICNlbmRpZgpAQCAtMzAxLDcgKzMwMSw3IEBACiAKIGludCBweGEyeHhfYWM5N19od19yZXN1bWUodm9pZCkKIHsKLQlpZiAoY3B1X2lzX3B4YTIxeCgpIHx8IGNwdV9pc19weGEyNXgoKSB8fCBjcHVfaXNfcHhhMjd4KCkpIHsKKwlpZiAoY3B1X2lzX3B4YTI1eCgpIHx8IGNwdV9pc19weGEyN3goKSkgewogCQlweGFfZ3Bpb19tb2RlKEdQSU8zMV9TWU5DX0FDOTdfTUQpOwogCQlweGFfZ3Bpb19tb2RlKEdQSU8zMF9TREFUQV9PVVRfQUM5N19NRCk7CiAJCXB4YV9ncGlvX21vZGUoR1BJTzI4X0JJVENMS19BQzk3X01EKTsKQEAgLTMyNSw3ICszMjUsNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmIChjcHVfaXNfcHhhMjF4KCkgfHwgY3B1X2lzX3B4YTI1eCgpIHx8IGNwdV9pc19weGEyN3goKSkgeworCWlmIChjcHVfaXNfcHhhMjV4KCkgfHwgY3B1X2lzX3B4YTI3eCgpKSB7CiAJCXB4YV9ncGlvX21vZGUoR1BJTzMxX1NZTkNfQUM5N19NRCk7CiAJCXB4YV9ncGlvX21vZGUoR1BJTzMwX1NEQVRBX09VVF9BQzk3X01EKTsKIAkJcHhhX2dwaW9fbW9kZShHUElPMjhfQklUQ0xLX0FDOTdfTUQpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbml0LmMgYi9zb3VuZC9jb3JlL2luaXQuYwppbmRleCA4YWY0NjdkLi5lZjIzNTJjIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luaXQuYworKysgYi9zb3VuZC9jb3JlL2luaXQuYwpAQCAtNTQ5LDkgKzU0OSw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogI2lmbmRlZiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRAogCWlmICghY2FyZC0+Y2FyZF9kZXYpIHsKLQkJY2FyZC0+Y2FyZF9kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoc291bmRfY2xhc3MsIGNhcmQtPmRldiwKLQkJCQkJCSAgICAgICBNS0RFVigwLCAwKSwgTlVMTCwKLQkJCQkJCSAgICAgICAiY2FyZCVpIiwgY2FyZC0+bnVtYmVyKTsKKwkJY2FyZC0+Y2FyZF9kZXYgPSBkZXZpY2VfY3JlYXRlKHNvdW5kX2NsYXNzLCBjYXJkLT5kZXYsCisJCQkJCSAgICAgICBNS0RFVigwLCAwKSwgTlVMTCwKKwkJCQkJICAgICAgICJjYXJkJWkiLCBjYXJkLT5udW1iZXIpOwogCQlpZiAoSVNfRVJSKGNhcmQtPmNhcmRfZGV2KSkKIAkJCWNhcmQtPmNhcmRfZGV2ID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2phY2suYyBiL3NvdW5kL2NvcmUvamFjay5jCmluZGV4IDgxMzNhMmIuLmJkMmQ5ZTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvamFjay5jCisrKyBiL3NvdW5kL2NvcmUvamFjay5jCkBAIC0xNDcsNiArMTQ3LDkgQEAKICAqLwogdm9pZCBzbmRfamFja19yZXBvcnQoc3RydWN0IHNuZF9qYWNrICpqYWNrLCBpbnQgc3RhdHVzKQogeworCWlmICghamFjaykKKwkJcmV0dXJuOworCiAJaWYgKGphY2stPnR5cGUgJiBTTkRfSkFDS19IRUFEUEhPTkUpCiAJCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBTV19IRUFEUEhPTkVfSU5TRVJULAogCQkJCSAgICBzdGF0dXMgJiBTTkRfSkFDS19IRUFEUEhPTkUpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbGliLmMgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwppbmRleCA2ZWE1Y2ZiLi45MjE2OTEwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9saWIuYworKysgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwpAQCAtOTA4LDEyICs5MDgsMTIgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9od19ydWxlX2FkZCk7CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X21hc2sKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9tYXNrIC0gYXBwbHkgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIGNvbnN0cmFpbnQKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBtYXNrCiAgKiBAbWFzazogdGhlIGJpdG1hcCBtYXNrCiAgKgotICogQXBwbHkgdGhlIGNvbnN0cmFpbnQgb2YgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIHRvIGEgbWFzayBwYXJhbWV0ZXIuCisgKiBBcHBseSB0aGUgY29uc3RyYWludCBvZiB0aGUgZ2l2ZW4gYml0bWFwIG1hc2sgdG8gYSAzMi1iaXQgbWFzayBwYXJhbWV0ZXIuCiAgKi8KIGludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzayhzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lLCBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyLAogCQkJICAgICAgIHVfaW50MzJfdCBtYXNrKQpAQCAtOTI4LDEyICs5MjgsMTIgQEAKIH0KIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0CisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0IC0gYXBwbHkgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIGNvbnN0cmFpbnQKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBtYXNrCiAgKiBAbWFzazogdGhlIDY0Yml0IGJpdG1hcCBtYXNrCiAgKgotICogQXBwbHkgdGhlIGNvbnN0cmFpbnQgb2YgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIHRvIGEgbWFzayBwYXJhbWV0ZXIuCisgKiBBcHBseSB0aGUgY29uc3RyYWludCBvZiB0aGUgZ2l2ZW4gYml0bWFwIG1hc2sgdG8gYSA2NC1iaXQgbWFzayBwYXJhbWV0ZXIuCiAgKi8KIGludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0KHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsCiAJCQkJIHVfaW50NjRfdCBtYXNrKQpAQCAtOTQ5LDcgKzk0OSw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyIC0gYXBwbHkgYW4gaW50ZWdlciBjb25zdHJhaW50IHRvIGFuIGludGVydmFsCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEB2YXI6IGh3X3BhcmFtcyB2YXJpYWJsZSB0byBhcHBseSB0aGUgaW50ZWdlciBjb25zdHJhaW50CiAgKgpAQCAtOTY0LDcgKzk2NCw3IEBACiBFWFBPUlRfU1lNQk9MKHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKTsKIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4CisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4IC0gYXBwbHkgYSBtaW4vbWF4IHJhbmdlIGNvbnN0cmFpbnQgdG8gYW4gaW50ZXJ2YWwKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYW5nZQogICogQG1pbjogdGhlIG1pbmltYWwgdmFsdWUKQEAgLTk5NSw3ICs5OTUsNyBAQAogCiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IC0gYXBwbHkgYSBsaXN0IG9mIGNvbnN0cmFpbnRzIHRvIGEgcGFyYW1ldGVyCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBsaXN0IGNvbnN0cmFpbnQKQEAgLTEwMzEsNyArMTAzMSw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X3JhdG51bXMKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9yYXRudW1zIC0gYXBwbHkgcmF0bnVtcyBjb25zdHJhaW50IHRvIGEgcGFyYW1ldGVyCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYXRudW1zIGNvbnN0cmFpbnQKQEAgLTEwNjQsNyArMTA2NCw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X3JhdGRlbnMKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9yYXRkZW5zIC0gYXBwbHkgcmF0ZGVucyBjb25zdHJhaW50IHRvIGEgcGFyYW1ldGVyCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYXRkZW5zIGNvbnN0cmFpbnQKQEAgLTEwOTUsNyArMTA5NSw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cworICogc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyAtIGFkZCBhIGh3IGNvbnN0cmFpbnQgbXNiaXRzIHJ1bGUKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQGNvbmQ6IGNvbmRpdGlvbiBiaXRzCiAgKiBAd2lkdGg6IHNhbXBsZSBiaXRzIHdpZHRoCkBAIC0xMTIzLDcgKzExMjMsNyBAQAogfQogCiAvKioKLSAqIHNuZF9wY21faHdfY29uc3RyYWludF9zdGVwCisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcCAtIGFkZCBhIGh3IGNvbnN0cmFpbnQgc3RlcCBydWxlCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBzdGVwIGNvbnN0cmFpbnQKQEAgLTExNTQsNyArMTE1NCw3IEBACiB9CQkKIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcG93MgorICogc25kX3BjbV9od19jb25zdHJhaW50X3BvdzIgLSBhZGQgYSBodyBjb25zdHJhaW50IHBvd2VyLW9mLTIgcnVsZQogICogQHJ1bnRpbWU6IFBDTSBydW50aW1lIGluc3RhbmNlCiAgKiBAY29uZDogY29uZGl0aW9uIGJpdHMKICAqIEB2YXI6IGh3X3BhcmFtcyB2YXJpYWJsZSB0byBhcHBseSB0aGUgcG93ZXItb2YtMiBjb25zdHJhaW50CkBAIC0xMjAyLDEzICsxMjAyLDEzIEBACiBFWFBPUlRfU1lNQk9MKF9zbmRfcGNtX2h3X3BhcmFtc19hbnkpOwogCiAvKioKLSAqIHNuZF9wY21faHdfcGFyYW1fdmFsdWUKKyAqIHNuZF9wY21faHdfcGFyYW1fdmFsdWUgLSByZXR1cm4gQHBhcmFtcyBmaWVsZCBAdmFyIHZhbHVlCiAgKiBAcGFyYW1zOiB0aGUgaHdfcGFyYW1zIGluc3RhbmNlCiAgKiBAdmFyOiBwYXJhbWV0ZXIgdG8gcmV0cmlldmUKLSAqIEBkaXI6IHBvaW50ZXIgdG8gdGhlIGRpcmVjdGlvbiAoLTEsMCwxKSBvciBOVUxMCisgKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgJU5VTEwKICAqCi0gKiBSZXR1cm4gdGhlIHZhbHVlIGZvciBmaWVsZCBQQVIgaWYgaXQncyBmaXhlZCBpbiBjb25maWd1cmF0aW9uIHNwYWNlIAotICogIGRlZmluZWQgYnkgUEFSQU1TLiBSZXR1cm4gLUVJTlZBTCBvdGhlcndpc2UKKyAqIFJldHVybiB0aGUgdmFsdWUgZm9yIGZpZWxkIEB2YXIgaWYgaXQncyBmaXhlZCBpbiBjb25maWd1cmF0aW9uIHNwYWNlCisgKiBkZWZpbmVkIGJ5IEBwYXJhbXMuIFJldHVybiAtJUVJTlZBTCBvdGhlcndpc2UuCiAgKi8KIGludCBzbmRfcGNtX2h3X3BhcmFtX3ZhbHVlKGNvbnN0IHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAogCQkJICAgc25kX3BjbV9od19wYXJhbV90IHZhciwgaW50ICpkaXIpCkBAIC0xMjcxLDEzICsxMjcxLDEzIEBACiAKIAogLyoqCi0gKiBzbmRfcGNtX2h3X3BhcmFtX2ZpcnN0CisgKiBzbmRfcGNtX2h3X3BhcmFtX2ZpcnN0IC0gcmVmaW5lIGNvbmZpZyBzcGFjZSBhbmQgcmV0dXJuIG1pbmltdW0gdmFsdWUKICAqIEBwY206IFBDTSBpbnN0YW5jZQogICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQogICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCi0gKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgTlVMTAorICogQGRpcjogcG9pbnRlciB0byB0aGUgZGlyZWN0aW9uICgtMSwwLDEpIG9yICVOVUxMCiAgKgotICogSW5zaWRlIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBQQVJBTVMgcmVtb3ZlIGZyb20gUEFSIGFsbCAKKyAqIEluc2lkZSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgQHBhcmFtcyByZW1vdmUgZnJvbSBAdmFyIGFsbAogICogdmFsdWVzID4gbWluaW11bS4gUmVkdWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYWNjb3JkaW5nbHkuCiAgKiBSZXR1cm4gdGhlIG1pbmltdW0uCiAgKi8KQEAgLTEzMTcsMTMgKzEzMTcsMTMgQEAKIAogCiAvKioKLSAqIHNuZF9wY21faHdfcGFyYW1fbGFzdAorICogc25kX3BjbV9od19wYXJhbV9sYXN0IC0gcmVmaW5lIGNvbmZpZyBzcGFjZSBhbmQgcmV0dXJuIG1heGltdW0gdmFsdWUKICAqIEBwY206IFBDTSBpbnN0YW5jZQogICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQogICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCi0gKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgTlVMTAorICogQGRpcjogcG9pbnRlciB0byB0aGUgZGlyZWN0aW9uICgtMSwwLDEpIG9yICVOVUxMCiAgKgotICogSW5zaWRlIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBQQVJBTVMgcmVtb3ZlIGZyb20gUEFSIGFsbCAKKyAqIEluc2lkZSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgQHBhcmFtcyByZW1vdmUgZnJvbSBAdmFyIGFsbAogICogdmFsdWVzIDwgbWF4aW11bS4gUmVkdWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYWNjb3JkaW5nbHkuCiAgKiBSZXR1cm4gdGhlIG1heGltdW0uCiAgKi8KQEAgLTEzNDUsMTEgKzEzNDUsMTEgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9od19wYXJhbV9sYXN0KTsKIAogLyoqCi0gKiBzbmRfcGNtX2h3X3BhcmFtX2Nob29zZQorICogc25kX3BjbV9od19wYXJhbV9jaG9vc2UgLSBjaG9vc2UgYSBjb25maWd1cmF0aW9uIGRlZmluZWQgYnkgQHBhcmFtcwogICogQHBjbTogUENNIGluc3RhbmNlCiAgKiBAcGFyYW1zOiB0aGUgaHdfcGFyYW1zIGluc3RhbmNlCiAgKgotICogQ2hvb3NlIG9uZSBjb25maWd1cmF0aW9uIGZyb20gY29uZmlndXJhdGlvbiBzcGFjZSBkZWZpbmVkIGJ5IFBBUkFNUworICogQ2hvb3NlIG9uZSBjb25maWd1cmF0aW9uIGZyb20gY29uZmlndXJhdGlvbiBzcGFjZSBkZWZpbmVkIGJ5IEBwYXJhbXMuCiAgKiBUaGUgY29uZmlndXJhdGlvbiBjaG9zZW4gaXMgdGhhdCBvYnRhaW5lZCBmaXhpbmcgaW4gdGhpcyBvcmRlcjoKICAqIGZpcnN0IGFjY2VzcywgZmlyc3QgZm9ybWF0LCBmaXJzdCBzdWJmb3JtYXQsIG1pbiBjaGFubmVscywKICAqIG1pbiByYXRlLCBtaW4gcGVyaW9kIHRpbWUsIG1heCBidWZmZXIgc2l6ZSwgbWluIHRpY2sgdGltZQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbWlzYy5jIGIvc291bmQvY29yZS9wY21fbWlzYy5jCmluZGV4IDg5YjdmNTQuLmVhMmJmODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX21pc2MuYworKysgYi9zb3VuZC9jb3JlL3BjbV9taXNjLmMKQEAgLTMxOSw2ICszMTksNyBAQAogLyoqCiAgKiBzbmRfcGNtX2Zvcm1hdF9zaXplIC0gcmV0dXJuIHRoZSBieXRlIHNpemUgb2Ygc2FtcGxlcyBvbiB0aGUgZ2l2ZW4gZm9ybWF0CiAgKiBAZm9ybWF0OiB0aGUgZm9ybWF0IHRvIGNoZWNrCisgKiBAc2FtcGxlczogc2FtcGxpbmcgcmF0ZQogICoKICAqIFJldHVybnMgdGhlIGJ5dGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gc2FtcGxlcyBmb3IgdGhlIGZvcm1hdCwgb3IgYQogICogbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB1bmtub3duIGZvcm1hdC4KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggZTYxZTEyNS4uYWVmMTg2OCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTg3NSwxMCArODc1LDggQEAKIH07CiAKIC8qKgotICogc25kX3BjbV9zdGFydAorICogc25kX3BjbV9zdGFydCAtIHN0YXJ0IGFsbCBsaW5rZWQgc3RyZWFtcwogICogQHN1YnN0cmVhbTogdGhlIFBDTSBzdWJzdHJlYW0gaW5zdGFuY2UKLSAqCi0gKiBTdGFydCBhbGwgbGlua2VkIHN0cmVhbXMuCiAgKi8KIGludCBzbmRfcGNtX3N0YXJ0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewpAQCAtOTI2LDEyICs5MjQsMTEgQEAKIH07CiAKIC8qKgotICogc25kX3BjbV9zdG9wCisgKiBzbmRfcGNtX3N0b3AgLSB0cnkgdG8gc3RvcCBhbGwgcnVubmluZyBzdHJlYW1zIGluIHRoZSBzdWJzdHJlYW0gZ3JvdXAKICAqIEBzdWJzdHJlYW06IHRoZSBQQ00gc3Vic3RyZWFtIGluc3RhbmNlCiAgKiBAc3RhdGU6IFBDTSBzdGF0ZSBhZnRlciBzdG9wcGluZyB0aGUgc3RyZWFtCiAgKgotICogVHJ5IHRvIHN0b3AgYWxsIHJ1bm5pbmcgc3RyZWFtcyBpbiB0aGUgc3Vic3RyZWFtIGdyb3VwLgotICogVGhlIHN0YXRlIG9mIGVhY2ggc3RyZWFtIGlzIGNoYW5nZWQgdG8gdGhlIGdpdmVuIHZhbHVlIGFmdGVyIHRoYXQgdW5jb25kaXRpb25hbGx5LgorICogVGhlIHN0YXRlIG9mIGVhY2ggc3RyZWFtIGlzIHRoZW4gY2hhbmdlZCB0byB0aGUgZ2l2ZW4gc3RhdGUgdW5jb25kaXRpb25hbGx5LgogICovCiBpbnQgc25kX3BjbV9zdG9wKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgc3RhdGUpCiB7CkBAIC05NDEsMTEgKzkzOCwxMCBAQAogRVhQT1JUX1NZTUJPTChzbmRfcGNtX3N0b3ApOwogCiAvKioKLSAqIHNuZF9wY21fZHJhaW5fZG9uZQorICogc25kX3BjbV9kcmFpbl9kb25lIC0gc3RvcCB0aGUgRE1BIG9ubHkgd2hlbiB0aGUgZ2l2ZW4gc3RyZWFtIGlzIHBsYXliYWNrCiAgKiBAc3Vic3RyZWFtOiB0aGUgUENNIHN1YnN0cmVhbQogICoKLSAqIFN0b3AgdGhlIERNQSBvbmx5IHdoZW4gdGhlIGdpdmVuIHN0cmVhbSBpcyBwbGF5YmFjay4KLSAqIFRoZSBzdGF0ZSBpcyBjaGFuZ2VkIHRvIFNFVFVQLgorICogQWZ0ZXIgc3RvcHBpbmcsIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkIHRvIFNFVFVQLgogICogVW5saWtlIHNuZF9wY21fc3RvcCgpLCB0aGlzIGFmZmVjdHMgb25seSB0aGUgZ2l2ZW4gc3RyZWFtLgogICovCiBpbnQgc25kX3BjbV9kcmFpbl9kb25lKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMTA2NSwxMCArMTA2MSw5IEBACiB9OwogCiAvKioKLSAqIHNuZF9wY21fc3VzcGVuZAorICogc25kX3BjbV9zdXNwZW5kIC0gdHJpZ2dlciBTVVNQRU5EIHRvIGFsbCBsaW5rZWQgc3RyZWFtcwogICogQHN1YnN0cmVhbTogdGhlIFBDTSBzdWJzdHJlYW0KICAqCi0gKiBUcmlnZ2VyIFNVU1BFTkQgdG8gYWxsIGxpbmtlZCBzdHJlYW1zLgogICogQWZ0ZXIgdGhpcyBjYWxsLCBhbGwgc3RyZWFtcyBhcmUgY2hhbmdlZCB0byBTVVNQRU5ERUQgc3RhdGUuCiAgKi8KIGludCBzbmRfcGNtX3N1c3BlbmQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0xMDg4LDEwICsxMDgzLDkgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9zdXNwZW5kKTsKIAogLyoqCi0gKiBzbmRfcGNtX3N1c3BlbmRfYWxsCisgKiBzbmRfcGNtX3N1c3BlbmRfYWxsIC0gdHJpZ2dlciBTVVNQRU5EIHRvIGFsbCBzdWJzdHJlYW1zIGluIHRoZSBnaXZlbiBwY20KICAqIEBwY206IHRoZSBQQ00gaW5zdGFuY2UKICAqCi0gKiBUcmlnZ2VyIFNVU1BFTkQgdG8gYWxsIHN1YnN0cmVhbXMgaW4gdGhlIGdpdmVuIHBjbS4KICAqIEFmdGVyIHRoaXMgY2FsbCwgYWxsIHN0cmVhbXMgYXJlIGNoYW5nZWQgdG8gU1VTUEVOREVEIHN0YXRlLgogICovCiBpbnQgc25kX3BjbV9zdXNwZW5kX2FsbChzdHJ1Y3Qgc25kX3BjbSAqcGNtKQpAQCAtMTMxMywxMSArMTMwNyw5IEBACiB9OwogCiAvKioKLSAqIHNuZF9wY21fcHJlcGFyZQorICogc25kX3BjbV9wcmVwYXJlIC0gcHJlcGFyZSB0aGUgUENNIHN1YnN0cmVhbSB0byBiZSB0cmlnZ2VyYWJsZQogICogQHN1YnN0cmVhbTogdGhlIFBDTSBzdWJzdHJlYW0gaW5zdGFuY2UKICAqIEBmaWxlOiBmaWxlIHRvIHJlZmVyIGZfZmxhZ3MKLSAqCi0gKiBQcmVwYXJlIHRoZSBQQ00gc3Vic3RyZWFtIHRvIGJlIHRyaWdnZXJhYmxlLgogICovCiBzdGF0aWMgaW50IHNuZF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zb3VuZC5jIGIvc291bmQvY29yZS9zb3VuZC5jCmluZGV4IGMwNjg1ZTIuLjQ0YTY5YmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc291bmQuYworKysgYi9zb3VuZC9jb3JlL3NvdW5kLmMKQEAgLTI3NCw5ICsyNzQsOCBAQAogCQlyZXR1cm4gbWlub3I7CiAJfQogCXNuZF9taW5vcnNbbWlub3JdID0gcHJlZzsKLQlwcmVnLT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoc291bmRfY2xhc3MsIGRldmljZSwKLQkJCQkJICBNS0RFVihtYWpvciwgbWlub3IpLAotCQkJCQkgIHByaXZhdGVfZGF0YSwgIiVzIiwgbmFtZSk7CisJcHJlZy0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShzb3VuZF9jbGFzcywgZGV2aWNlLCBNS0RFVihtYWpvciwgbWlub3IpLAorCQkJCSAgcHJpdmF0ZV9kYXRhLCAiJXMiLCBuYW1lKTsKIAlpZiAoSVNfRVJSKHByZWctPmRldikpIHsKIAkJc25kX21pbm9yc1ttaW5vcl0gPSBOVUxMOwogCQltdXRleF91bmxvY2soJnNvdW5kX211dGV4KTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwppbmRleCBlNWU3NDlmLi43M2JlN2UxIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMKKysrIGIvc291bmQvZHJpdmVycy9kdW1teS5jCkBAIC01MSw3ICs1MSw3IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLCAyNTYsIFVJTlRfTUFYKTsKLQlpZiAoZXJyKSA8IDApCisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvb3RoZXIvdGVhNTc1eC10dW5lci5jIGIvc291bmQvaTJjL290aGVyL3RlYTU3NXgtdHVuZXIuYwppbmRleCA4M2U5MDA1Li5jMTNhMTc4IDEwMDY0NAotLS0gYS9zb3VuZC9pMmMvb3RoZXIvdGVhNTc1eC10dW5lci5jCisrKyBiL3NvdW5kL2kyYy9vdGhlci90ZWE1NzV4LXR1bmVyLmMKQEAgLTg3LDggKzg3LDcgQEAKIHN0YXRpYyBpbnQgc25kX3RlYTU3NXhfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdm9pZCBfX3VzZXIgKmFyZyA9ICh2b2lkIF9fdXNlciAqKWRhdGE7CiAJCiAJc3dpdGNoKGNtZCkgewpAQCAtMTc1LDYgKzE3NCwyMSBAQAogewogfQogCitzdGF0aWMgaW50IHNuZF90ZWE1NzV4X2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZ0ZWEtPmluX3VzZSkgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IHNuZF90ZWE1NzV4X2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWNsZWFyX2JpdCgwLCAmdGVhLT5pbl91c2UpOworCXJldHVybiAwOworfQorCiAvKgogICogaW5pdGlhbGl6ZSBhbGwgdGhlIHRlYTU3NXggY2hpcHMKICAqLwpAQCAtMTkzLDkgKzIwNywxMCBAQAogCXRlYS0+dmQucmVsZWFzZSA9IHNuZF90ZWE1NzV4X3JlbGVhc2U7CiAJdmlkZW9fc2V0X2RydmRhdGEoJnRlYS0+dmQsIHRlYSk7CiAJdGVhLT52ZC5mb3BzID0gJnRlYS0+Zm9wczsKKwl0ZWEtPmluX3VzZSA9IDA7CiAJdGVhLT5mb3BzLm93bmVyID0gdGVhLT5jYXJkLT5tb2R1bGU7Ci0JdGVhLT5mb3BzLm9wZW4gPSB2aWRlb19leGNsdXNpdmVfb3BlbjsKLQl0ZWEtPmZvcHMucmVsZWFzZSA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlOworCXRlYS0+Zm9wcy5vcGVuID0gc25kX3RlYTU3NXhfZXhjbHVzaXZlX29wZW47CisJdGVhLT5mb3BzLnJlbGVhc2UgPSBzbmRfdGVhNTc1eF9leGNsdXNpdmVfcmVsZWFzZTsKIAl0ZWEtPmZvcHMuaW9jdGwgPSBzbmRfdGVhNTc1eF9pb2N0bDsKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0ZWEtPnZkLCBWRkxfVFlQRV9SQURJTywgdGVhLT5kZXZfbnIgLSAxKSA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIHJlZ2lzdGVyIHRlYTU3NXggdHVuZXJcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2FjOTdfY29kZWMuYyBiL3NvdW5kL29zcy9hYzk3X2NvZGVjLmMKaW5kZXggYjYzODM5ZS4uNDU2YTFiNCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2FjOTdfY29kZWMuYworKysgYi9zb3VuZC9vc3MvYWM5N19jb2RlYy5jCkBAIC0zMCw3ICszMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBIaXN0b3J5Ci0gKiBNYXkgMDIsIDIwMDMgTGlhbSBHaXJkd29vZCA8bGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tPgorICogTWF5IDAyLCAyMDAzIExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKglSZW1vdmVkIG5vbiBleGlzdGFudCBXTTk3MDAKICAqCUFkZGVkIHN1cHBvcnQgZm9yIFdNOTcwNSwgV005NzA4LCBXTTk3MDksIFdNOTcxMCwgV005NzExCiAgKglXTTk3MTIgYW5kIFdNOTcxNwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NoX2RhY19hdWRpby5jIGIvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCmluZGV4IGI0OTM2NjAuLmU1ZDQyMzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYworKysgYi9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vY3B1L2RhYy5oPgogI2luY2x1ZGUgPGFzbS9jcHUvdGltZXIuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgogCiAjZGVmaW5lIE1PRE5BTUUgInNoX2RhY19hdWRpbyIKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zb3VuZGNhcmQuYyBiL3NvdW5kL29zcy9zb3VuZGNhcmQuYwppbmRleCA3ZDg5YzA4Li42MWFhZWRhIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc291bmRjYXJkLmMKKysrIGIvc291bmQvb3NzL3NvdW5kY2FyZC5jCkBAIC01NjAsMTkgKzU2MCwxOCBAQAogCXNvdW5kX2RtYXBfZmxhZyA9IChkbWFidWYgPiAwID8gMSA6IDApOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2X2xpc3QpOyBpKyspIHsKLQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHNvdW5kX2NsYXNzLCBOVUxMLAotCQkJCSAgICAgIE1LREVWKFNPVU5EX01BSk9SLCBkZXZfbGlzdFtpXS5taW5vciksCi0JCQkJICAgICAgTlVMTCwgIiVzIiwgZGV2X2xpc3RbaV0ubmFtZSk7CisJCWRldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIE5VTEwsCisJCQkgICAgICBNS0RFVihTT1VORF9NQUpPUiwgZGV2X2xpc3RbaV0ubWlub3IpLCBOVUxMLAorCQkJICAgICAgIiVzIiwgZGV2X2xpc3RbaV0ubmFtZSk7CiAKIAkJaWYgKCFkZXZfbGlzdFtpXS5udW0pCiAJCQljb250aW51ZTsKIAogCQlmb3IgKGogPSAxOyBqIDwgKmRldl9saXN0W2ldLm51bTsgaisrKQotCQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHNvdW5kX2NsYXNzLCBOVUxMLAotCQkJCQkgICAgICBNS0RFVihTT1VORF9NQUpPUiwKLQkJCQkJCSAgICBkZXZfbGlzdFtpXS5taW5vciArIChqKjB4MTApKSwKLQkJCQkJICAgICAgTlVMTCwKLQkJCQkJICAgICAgIiVzJWQiLCBkZXZfbGlzdFtpXS5uYW1lLCBqKTsKKwkJCWRldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIE5VTEwsCisJCQkJICAgICAgTUtERVYoU09VTkRfTUFKT1IsCisJCQkJCSAgICBkZXZfbGlzdFtpXS5taW5vciArIChqKjB4MTApKSwKKwkJCQkgICAgICBOVUxMLCAiJXMlZCIsIGRldl9saXN0W2ldLm5hbWUsIGopOwogCX0KIAogCWlmIChzb3VuZF9uYmxvY2tzID49IDEwMjQpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKaW5kZXggNmNlM2NiZS4uNmU4MzFhZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYwpAQCAtNDc2LDcgKzQ3Niw3IEBACiB9CiAKIC8qCi0gKiBNYXkgMiwgMjAwMyBMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+CisgKiBNYXkgMiwgMjAwMyBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICogIHJlbW92ZWQgYnJva2VuIHdvbGZzb24wMCBwYXRjaC4KICAqICBhZGRlZCBzdXBwb3J0IGZvciBXTTk3MDUsV005NzA4LFdNOTcwOSxXTTk3MTAsV005NzExLFdNOTcxMiBhbmQgV005NzE3LgogICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggYTdkODk2Ni4uODhmYmYyOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtNzU5LDcgKzc1OSw2IEBACiAJCQkgICAgICAgU1BDU19DSEFOTkVMTlVNX0xFRlQgfCBTUENTX1NPVVJDRU5VTV9VTlNQRUMgfAogCQkJICAgICAgIFNQQ1NfR0VORVJBVElPTlNUQVRVUyB8IDB4MDAwMDEyMDAgfAogCQkJICAgICAgIDB4MDAwMDAwMDAgfCBTUENTX0VNUEhBU0lTX05PTkUgfCBTUENTX0NPUFlSSUdIVCApOwotCX0KICNlbmRpZgogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYwppbmRleCAxYTY1Nzc1Li4yZWVkMmM4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCWNvZGVjLT5wY21faW5mbyA9IGluZm87CiAKIAlpbmZvLT5uYW1lID0gIk5WSURJQSBIRE1JIjsKKwlpbmZvLT5wY21fdHlwZSA9IEhEQV9QQ01fVFlQRV9IRE1JOwogCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9IG52aGRtaV9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCAwYjZlNjgyLi5lNzI3MDdjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtODIyLDYgKzgyMiwyNyBAQAogCQkJICAgIHNwZWMtPmphY2tfcHJlc2VudCA/IDAgOiBQSU5fT1VUKTsKIH0KIAorc3RhdGljIHZvaWQgYWxjX21pY19hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKwl1bnNpZ25lZCBpbnQgbWljX25pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdOworCXVuc2lnbmVkIGludCBmbWljX25pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tBVVRPX1BJTl9GUk9OVF9NSUNdOworCXVuc2lnbmVkIGludCBtaXhfbmlkID0gc3BlYy0+Y2Fwc3JjX25pZHNbMF07CisJdW5zaWduZWQgaW50IGNhcHNyY19pZHhfbWljLCBjYXBzcmNfaWR4X2ZtaWM7CisKKwljYXBzcmNfaWR4X21pYyA9IG1pY19uaWQgLSAweDE4OworCWNhcHNyY19pZHhfZm1pYyA9IGZtaWNfbmlkIC0gMHgxODsKKwlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBtaWNfbmlkLCAwLAorCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbWl4X25pZCwgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJICAgIDB4NzAwMCB8IChjYXBzcmNfaWR4X21pYyA8PCA4KSB8IChwcmVzZW50ID8gMCA6IDB4ODApKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBtaXhfbmlkLCAwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCQkgICAgMHg3MDAwIHwgKGNhcHNyY19pZHhfZm1pYyA8PCA4KSB8IChwcmVzZW50ID8gMHg4MCA6IDApKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MGIsIEhEQV9JTlBVVCwgY2Fwc3JjX2lkeF9mbWljLAorCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOworfQorCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCiBzdGF0aWMgdm9pZCBhbGNfc2t1X3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQogewpAQCAtODI5LDEwICs4NTAsMTcgQEAKIAkJcmVzID4+PSAyODsKIAllbHNlCiAJCXJlcyA+Pj0gMjY7Ci0JaWYgKHJlcyAhPSBBTEM4ODBfSFBfRVZFTlQpCi0JCXJldHVybjsKKwlpZiAocmVzID09IEFMQzg4MF9IUF9FVkVOVCkKKwkJYWxjX3NrdV9hdXRvbXV0ZShjb2RlYyk7CiAKKwlpZiAocmVzID09IEFMQzg4MF9NSUNfRVZFTlQpCisJCWFsY19taWNfYXV0b211dGUoY29kZWMpOworfQorCitzdGF0aWMgdm9pZCBhbGNfaW5pdGhvb2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CiAJYWxjX3NrdV9hdXRvbXV0ZShjb2RlYyk7CisJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CiB9CiAKIC8qIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gZm9yIEFMQzg4OCB2YXJpYW50cyAqLwpAQCAtMTAxOCwxMCArMTA0NiwxNyBAQAogCQllbHNlCiAJCQlyZXR1cm47CiAJfQorCWlmIChzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0pCisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSwgMCwKKwkJCUFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKKwkJCUFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UKTsKIAotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCi0JCQkgICAgQUNfVVNSU1BfRU4gfCBBTEM4ODBfSFBfRVZFTlQpOworCWlmIChzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSAmJgorCQlzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTUlDXSkKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywKKwkJCXNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdLCAwLAorCQkJQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAorCQkJQUNfVVNSU1BfRU4gfCBBTEM4ODBfTUlDX0VWRU5UKTsKIAogCXNwZWMtPnVuc29sX2V2ZW50ID0gYWxjX3NrdV91bnNvbF9ldmVudDsKIH0KQEAgLTM4MDgsNyArMzg0Myw3IEBACiAJYWxjODgwX2F1dG9faW5pdF9leHRyYV9vdXQoY29kZWMpOwogCWFsYzg4MF9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCi0JCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCiAvKgpAQCAtNTIxOSw3ICs1MjU0LDcgQEAKIAlhbGMyNjBfYXV0b19pbml0X211bHRpX291dChjb2RlYyk7CiAJYWxjMjYwX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKLQkJYWxjX3NrdV9hdXRvbXV0ZShjb2RlYyk7CisJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCkBAIC02NjI5LDcgKzY2NjQsNyBAQAogCWFsYzg4Ml9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlhbGM4ODJfYXV0b19pbml0X2lucHV0X3NyYyhjb2RlYyk7CiAJaWYgKHNwZWMtPnVuc29sX2V2ZW50KQotCQlhbGNfc2t1X2F1dG9tdXRlKGNvZGVjKTsKKwkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAogc3RhdGljIGludCBwYXRjaF9hbGM4ODMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOyAvKiBjYWxsZWQgaW4gcGF0Y2hfYWxjODgyKCkgKi8KQEAgLTgzMDYsOCArODM0MSw4IEBACiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE0ZiwgIkhQIFNhbWJhIiwgQUxDODg4XzNTVF9IUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE2MCwgIkhQIEx1Y2tub3ciLCBBTEM4ODhfM1NUX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTYxLCAiSFAgTmV0dGxlIiwgQUxDODgzXzZTVF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzMsICJBc3VzIE05MFYiLCBBTEM4ODhfQVNVU19NOTBWKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MjQ5LCAiQXN1cyBNMkEtVk0gSERNSSIsIEFMQzg4M18zU1RfNmNoX0RJRyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODMxNywgIkFzdXMgTTkwViIsIEFMQzg4OF9BU1VTX005MFYpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzNWYsICJBc3VzIEVlZSAxNjAxIiwgQUxDODg4X0FTVVNfRUVFMTYwMSksCiAJU05EX1BDSV9RVUlSSygweDEwNWIsIDB4MGNlOCwgIkZveGNvbm4gUDM1QVgtUyIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHg2NjY4LCAiRm94Y29ubiIsIEFMQzg4M182U1RfRElHKSwKQEAgLTg3NTgsNyArODc5Myw3IEBACiAJYWxjODgzX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOwogCWFsYzg4M19hdXRvX2luaXRfaW5wdXRfc3JjKGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCi0JCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCiBzdGF0aWMgaW50IHBhdGNoX2FsYzg4MyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTg4MDIsOCArODgzNywxMyBAQAogCiAJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CiAJY2FzZSAweDEwZWMwODg4OgotCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDODg4IEFuYWxvZyI7Ci0JCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiQUxDODg4IERpZ2l0YWwiOworCQlpZiAoY29kZWMtPnJldmlzaW9uX2lkID09IDB4MTAwMTAxKSB7CisJCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDMTIwMCBBbmFsb2ciOworCQkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEMxMjAwIERpZ2l0YWwiOworCQl9IGVsc2UgeworCQkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4OCBBbmFsb2ciOworCQkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEM4ODggRGlnaXRhbCI7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSAweDEwZWMwODg5OgogCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDODg5IEFuYWxvZyI7CkBAIC0xMDI4NSw3ICsxMDMyNSw3IEBACiAJYWxjMjYyX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOwogCWFsYzI2Ml9hdXRvX2luaXRfaW5wdXRfc3JjKGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCi0JCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCiAvKgpAQCAtMTAzNDMsNyArMTAzODMsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMTUsICJTb255IDB4OTAxNSIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4MDAwMSwgIlRvc2hpYmEgZHluYWJvb2sgU1MgUlgxIiwKIAkJICAgICAgQUxDMjYyX1RPU0hJQkFfUlgxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHgwMjY4LCAiVG9zaGliYSBTMDYiLCBBTEMyNjJfVE9TSElCQV9TMDYpLAorCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmN2IsICJUb3NoaWJhIFMwNiIsIEFMQzI2Ml9UT1NISUJBX1MwNiksCiAJU05EX1BDSV9RVUlSSygweDEwY2YsIDB4MTM5NywgIkZ1aml0c3UiLCBBTEMyNjJfRlVKSVRTVSksCiAJU05EX1BDSV9RVUlSSygweDEwY2YsIDB4MTQyZCwgIkZ1aml0c3UgTGlmZWJvb2sgRTg0MTAiLCBBTEMyNjJfRlVKSVRTVSksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAzMiwgIlNhbXN1bmcgUTEgVWx0cmEiLCBBTEMyNjJfVUxUUkEpLApAQCAtMTE0MTcsNyArMTE0NTcsNyBAQAogCWFsYzI2OF9hdXRvX2luaXRfbW9ub19zcGVha2VyX291dChjb2RlYyk7CiAJYWxjMjY4X2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKLQkJYWxjX3NrdV9hdXRvbXV0ZShjb2RlYyk7CisJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CiAKIC8qCkBAIC0xMjIwMCw3ICsxMjI0MCw3IEBACiAJYWxjMjY5X2F1dG9faW5pdF9ocF9vdXQoY29kZWMpOwogCWFsYzI2OV9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCi0JCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCiAvKgpAQCAtMTMyODEsNyArMTMzMjEsNyBAQAogCWFsYzg2MV9hdXRvX2luaXRfaHBfb3V0KGNvZGVjKTsKIAlhbGM4NjFfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CiAJaWYgKHNwZWMtPnVuc29sX2V2ZW50KQotCQlhbGNfc2t1X2F1dG9tdXRlKGNvZGVjKTsKKwkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKQEAgLTE0MzkzLDcgKzE0NDMzLDcgQEAKIAlhbGM4NjF2ZF9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlhbGM4NjF2ZF9hdXRvX2luaXRfaW5wdXRfc3JjKGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCi0JCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCiBzdGF0aWMgaW50IHBhdGNoX2FsYzg2MXZkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMTU2NjcsNyArMTU3MDcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjNjYyX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc4LCAiQVNVUyBNNTFWQSIsIEFMQzY2M19BU1VTX001MVZBKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWEzLCAiQVNVUyBNNTFWQSIsIEFMQzY2M19BU1VTX0c1MFYpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YTMsICJBU1VTIEc1MFYiLCBBTEM2NjNfQVNVU19HNTBWKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MjkwLCAiQVNVUyBQNUdDLU1YIiwgQUxDNjYyXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MmExLCAiQVNVUyBFZWVwYyIsIEFMQzY2Ml9BU1VTX0VFRVBDX1A3MDEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyZDEsICJBU1VTIEVlZXBjIEVQMjAiLCBBTEM2NjJfQVNVU19FRUVQQ19FUDIwKSwKQEAgLTE1NjgwLDYgKzE1NzIwLDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWQzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMjAzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWUzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTkzLCAiQVNVUyBOMjAiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTljMywgIkFTVVMgRjVaL0Y2eCIsIEFMQzY2Ml9BU1VTX01PREUyKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTEzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKQEAgLTE2MjIzLDcgKzE2MjY0LDcgQEAKIAlhbGM2NjJfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CiAJYWxjNjYyX2F1dG9faW5pdF9pbnB1dF9zcmMoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKLQkJYWxjX3NrdV9hdXRvbXV0ZShjb2RlYyk7CisJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CiAKIHN0YXRpYyBpbnQgcGF0Y2hfYWxjNjYyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMTYyNjgsNiArMTYzMDksOSBAQAogCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjMpIHsKIAkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzY2MyBBbmFsb2ciOwogCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzY2MyBEaWdpdGFsIjsKKwl9IGVsc2UgaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDI3MikgeworCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDMjcyIEFuYWxvZyI7CisJCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiQUxDMjcyIERpZ2l0YWwiOwogCX0gZWxzZSB7CiAJCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJBTEM2NjIgQW5hbG9nIjsKIAkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEM2NjIgRGlnaXRhbCI7CkBAIC0xNjMwNSw2ICsxNjM0OSw3IEBACiAJeyAuaWQgPSAweDEwZWMwMjY3LCAubmFtZSA9ICJBTEMyNjciLCAucGF0Y2ggPSBwYXRjaF9hbGMyNjggfSwKIAl7IC5pZCA9IDB4MTBlYzAyNjgsIC5uYW1lID0gIkFMQzI2OCIsIC5wYXRjaCA9IHBhdGNoX2FsYzI2OCB9LAogCXsgLmlkID0gMHgxMGVjMDI2OSwgLm5hbWUgPSAiQUxDMjY5IiwgLnBhdGNoID0gcGF0Y2hfYWxjMjY5IH0sCisJeyAuaWQgPSAweDEwZWMwMjcyLCAubmFtZSA9ICJBTEMyNzIiLCAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKIAl7IC5pZCA9IDB4MTBlYzA4NjEsIC5yZXYgPSAweDEwMDM0MCwgLm5hbWUgPSAiQUxDNjYwIiwKIAkgIC5wYXRjaCA9IHBhdGNoX2FsYzg2MSB9LAogCXsgLmlkID0gMHgxMGVjMDY2MCwgLm5hbWUgPSAiQUxDNjYwLVZEIiwgLnBhdGNoID0gcGF0Y2hfYWxjODYxdmQgfSwKQEAgLTE2MzIzLDcgKzE2MzY4LDEwIEBACiAJeyAuaWQgPSAweDEwZWMwODg1LCAucmV2ID0gMHgxMDAxMDMsIC5uYW1lID0gIkFMQzg4OUEiLAogCSAgLnBhdGNoID0gcGF0Y2hfYWxjODgyIH0sIC8qIHNob3VsZCBiZSBwYXRjaF9hbGM4ODMoKSBpbiBmdXR1cmUgKi8KIAl7IC5pZCA9IDB4MTBlYzA4ODUsIC5uYW1lID0gIkFMQzg4NSIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MiB9LAorCXsgLmlkID0gMHgxMGVjMDg4NywgLm5hbWUgPSAiQUxDODg3IiwgLnBhdGNoID0gcGF0Y2hfYWxjODgzIH0sCiAJeyAuaWQgPSAweDEwZWMwODg4LCAubmFtZSA9ICJBTEM4ODgiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODMgfSwKKwl7IC5pZCA9IDB4MTBlYzA4ODgsIC5yZXYgPSAweDEwMDEwMSwgLm5hbWUgPSAiQUxDMTIwMCIsCisJICAucGF0Y2ggPSBwYXRjaF9hbGM4ODMgfSwKIAl7IC5pZCA9IDB4MTBlYzA4ODksIC5uYW1lID0gIkFMQzg4OSIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MyB9LAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggYzQ2MWJhYS4uYTJhYzcyMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtMzIyLDggKzMyMiw4IEBACiAJMHgxYSwgMHgxYgogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X2RtdXhfbmlkc1sxXSA9IHsKLQkweDFjLAorc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X2RtdXhfbmlkc1syXSA9IHsKKwkweDFjLCAweDFkLAogfTsKIAogc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X3NtdXhfbmlkc1syXSA9IHsKQEAgLTg2MSwyMCArODYxLDE4IEBACiAJeyAweDI4LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKIAkvKiBjb25uZWN0IGhlYWRwaG9uZSBqYWNrIHRvIGRhYzEgKi8KIAl7IDB4MGEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKLQl7IDB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sIC8qIFNwZWFrZXIgKi8KIAkvKiB1bm11dGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMgZm9yIG5vZGVzIDB4MGEsIDB4ZCwgMHgwZiAqLwogCXsgMHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJeyAweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7IDB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogfTsKIAotI2RlZmluZSBIRF9ESVNBQkxFX1BPUlRGIDMKKyNkZWZpbmUgSERfRElTQUJMRV9QT1JURiAyCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkNzFieHhfYW5hbG9nX2NvcmVfaW5pdFtdID0gewogCS8qIHN0YXJ0IG9mIGNvbmZpZyAjMSAqLwogCiAJLyogY29ubmVjdCBwb3J0IDBmIHRvIGF1ZGlvIG1peGVyICovCiAJeyAweDBmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgyfSwKLQl7IDB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sIC8qIFNwZWFrZXIgKi8KIAkvKiB1bm11dGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMgZm9yIG5vZGUgMHgwZiAqLwogCXsgMHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogc3RhcnQgb2YgY29uZmlnICMyICovCkBAIC04ODMsMTAgKzg4MSw2IEBACiAJeyAweDI4LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKIAkvKiBjb25uZWN0IGhlYWRwaG9uZSBqYWNrIHRvIGRhYzEgKi8KIAl7IDB4MGEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKLQkvKiBjb25uZWN0IHBvcnQgMGQgdG8gYXVkaW8gbWl4ZXIgKi8KLQl7IDB4MGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDJ9LAotCS8qIHVubXV0ZSBkYWMwIGlucHV0IGluIGF1ZGlvIG1peGVyICovCi0JeyAweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweDcwMWZ9LAogCS8qIHVubXV0ZSByaWdodCBhbmQgbGVmdCBjaGFubmVscyBmb3Igbm9kZXMgMHgwYSwgMHhkICovCiAJeyAweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7IDB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LApAQCAtMTEwNyw2ICsxMTAxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzFieHhfYW5hbG9nX21peGVyW10gPSB7CiAJU1RBQ19JTlBVVF9TT1VSQ0UoMiksCisJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0EwLCAyKSwKIAogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTExOSw4ICsxMTE0LDE3IEBACiAJSERBX0NPREVDX01VVEUoIlBDIEJlZXAgU3dpdGNoIiwgMHgxNywgMHgyLCBIREFfSU5QVVQpLAogCSovCiAKLQlIREFfQ09ERUNfTVVURSgiQW5hbG9nIExvb3BiYWNrIDEiLCAweDE3LCAweDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkFuYWxvZyBMb29wYmFjayAyIiwgMHgxNywgMHg0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbXBvcnQwIE11eCBDYXB0dXJlIFN3aXRjaCIsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbXBvcnQwIE11eCBDYXB0dXJlIFZvbHVtZSIsIDB4MTcsIDB4MCwgSERBX0lOUFVUKSwKKworCUhEQV9DT0RFQ19NVVRFKCJJbXBvcnQxIE11eCBDYXB0dXJlIFN3aXRjaCIsIDB4MTcsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbXBvcnQxIE11eCBDYXB0dXJlIFZvbHVtZSIsIDB4MTcsIDB4MSwgSERBX0lOUFVUKSwKKworCUhEQV9DT0RFQ19NVVRFKCJEQUMwIENhcHR1cmUgU3dpdGNoIiwgMHgxNywgMHgzLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkRBQzAgQ2FwdHVyZSBWb2x1bWUiLCAweDE3LCAweDMsIEhEQV9JTlBVVCksCisKKwlIREFfQ09ERUNfTVVURSgiREFDMSBDYXB0dXJlIFN3aXRjaCIsIDB4MTcsIDB4NCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJEQUMxIENhcHR1cmUgVm9sdW1lIiwgMHgxNywgMHg0LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTE2NDksNyArMTY1Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmVmOTJoZDcxYnh4X3Bpbl9jb25maWdzWzExXSA9IHsKIAkweDAyMjE0MDMwLCAweDAyYTE5MDQwLCAweDAxYTE5MDIwLCAweDAxMDE0MDEwLAotCTB4MDE4MTMwMmUsIDB4MDExMTQwMTAsIDB4MDEwMTkwMjAsIDB4OTBhMDAwZjAsCisJMHgwMTgxMzAyZSwgMHgwMTAxNDAxMCwgMHgwMTAxOTAyMCwgMHg5MGEwMDBmMCwKIAkweDkwYTAwMGYwLCAweDAxNDUyMDUwLCAweDAxNDUyMDUwLAogfTsKIApAQCAtMjgxMiw3ICsyODE2LDcgQEAKIAlzdGF0aWMgY29uc3QgY2hhciAqY2huYW1lWzRdID0gewogCQkiRnJvbnQiLCAiU3Vycm91bmQiLCBOVUxMIC8qQ0xGRSovLCAiU2lkZSIKIAl9OwotCWhkYV9uaWRfdCBuaWQ7CisJaGRhX25pZF90IG5pZCA9IDA7CiAJaW50IGksIGVycjsKIAogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0zMDAwLDcgKzMwMDQsNyBAQAogCiAvKiBsYWJlbHMgZm9yIGFtcCBtdXggb3V0cHV0cyAqLwogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5Mnh4X2FtcF9sYWJlbHNbM10gPSB7Ci0JIkZyb250IE1pY3JvcGhvbmUiLCAiTWljcm9waG9uZSIsICJMaW5lIEluIgorCSJGcm9udCBNaWNyb3Bob25lIiwgIk1pY3JvcGhvbmUiLCAiTGluZSBJbiIsCiB9OwogCiAvKiBjcmVhdGUgYW1wIG91dCBjb250cm9scyBtdXggb24gY2FwYWJsZSBjb2RlY3MgKi8KQEAgLTQzMjcsNiArNDMzMSwxNiBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggc3RhYzkyaGQ3MWJ4eF9kbXV4ID0geworCS5udW1faXRlbXMgPSA0LAorCS5pdGVtcyA9IHsKKwkJeyAiQW5hbG9nIElucHV0cyIsIDB4MDAgfSwKKwkJeyAiTWl4ZXIiLCAweDAxIH0sCisJCXsgIkRpZ2l0YWwgTWljIDEiLCAweDAyIH0sCisJCXsgIkRpZ2l0YWwgTWljIDIiLCAweDAzIH0sCisJfQorfTsKKwogc3RhdGljIGludCBwYXRjaF9zdGFjOTJoZDcxYnh4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjOwpAQCAtNDM0MSw2ICs0MzU1LDggQEAKIAlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9waW5fbmlkcyk7CiAJc3BlYy0+bnVtX3B3cnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfcHdyX25pZHMpOwogCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9waW5fbmlkczsKKwltZW1jcHkoJnNwZWMtPnByaXZhdGVfZGltdXgsICZzdGFjOTJoZDcxYnh4X2RtdXgsCisJCQlzaXplb2Yoc3RhYzkyaGQ3MWJ4eF9kbXV4KSk7CiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsCiAJCQkJCQkJU1RBQ185MkhENzFCWFhfTU9ERUxTLAogCQkJCQkJCXN0YWM5MmhkNzFieHhfbW9kZWxzLApAQCAtNDM5Miw2ICs0NDA4LDcgQEAKIAkJLyogbm8gb3V0cHV0IGFtcHMgKi8KIAkJc3BlYy0+bnVtX3B3cnMgPSAwOwogCQlzcGVjLT5taXhlciA9IHN0YWM5MmhkNzFieHhfYW5hbG9nX21peGVyOworCQlzcGVjLT5kaW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfZGltdXg7CiAKIAkJLyogZGlzYWJsZSBWU1cgKi8KIAkJc3BlYy0+aW5pdCA9ICZzdGFjOTJoZDcxYnh4X2FuYWxvZ19jb3JlX2luaXRbSERfRElTQUJMRV9QT1JURl07CkBAIC00NDA5LDEyICs0NDI2LDEzIEBACiAJCXNwZWMtPm51bV9wd3JzID0gMDsKIAkJLyogZmFsbHRocnUgKi8KIAlkZWZhdWx0OgorCQlzcGVjLT5kaW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfZGltdXg7CiAJCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfbWl4ZXI7CiAJCXNwZWMtPmluaXQgPSBzdGFjOTJoZDcxYnh4X2FuYWxvZ19jb3JlX2luaXQ7CiAJCWNvZGVjLT5zbGF2ZV9kaWdfb3V0cyA9IHN0YWM5MmhkNzFieHhfc2xhdmVfZGlnX291dHM7CiAJfQogCi0Jc3BlYy0+YWxvb3BiYWNrX21hc2sgPSAweDIwOworCXNwZWMtPmFsb29wYmFja19tYXNrID0gMHg1MDsKIAlzcGVjLT5hbG9vcGJhY2tfc2hpZnQgPSAwOwogCiAJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA+IFNUQUNfOTJIRDcxQlhYX1JFRikgewpAQCAtNDQ1Niw2ICs0NDc0LDEwIEBACiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAxOwogCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IDB4MTE7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzdGFjOTJoZDcxYnh4X2RhY19uaWRzOworCWlmIChzcGVjLT5kaW5wdXRfbXV4KQorCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyArPQorCQkJc3BlYy0+bnVtX2RtaWNzIC0KKwkJCQkoQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAxKTsKIAogCWVyciA9IHN0YWM5Mnh4X3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjLCAweDIxLCAweDIzKTsKIAlpZiAoIWVycikgewpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3NuZF9wczMuYyBiL3NvdW5kL3BwYy9zbmRfcHMzLmMKaW5kZXggMjBkMGUzMi4uOGY5ZTM4NSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3NuZF9wczMuYworKysgYi9zb3VuZC9wcGMvc25kX3BzMy5jCkBAIC02NjYsNiArNjY2LDcgQEAKIAljYXJkLT5hdnMuYXZzX2F1ZGlvX3dpZHRoID0gUFMzQVZfQ01EX0FVRElPX1dPUkRfQklUU18xNjsKIAljYXJkLT5hdnMuYXZzX2F1ZGlvX2Zvcm1hdCA9IFBTM0FWX0NNRF9BVURJT19GT1JNQVRfUENNOwogCWNhcmQtPmF2cy5hdnNfYXVkaW9fc291cmNlID0gUFMzQVZfQ01EX0FVRElPX1NPVVJDRV9TRVJJQUw7CisJbWVtY3B5KGNhcmQtPmF2cy5hdnNfY3NfaW5mbywgcHMzYXZfbW9kZV9jc19pbmZvLCA4KTsKIAogCXJldCA9IHNuZF9wczNfY2hhbmdlX2F2c2V0dGluZyhjYXJkKTsKIApAQCAtNjg1LDYgKzY4Niw3IEBACiB7CiAJc3RydWN0IHNuZF9wczNfY2FyZF9pbmZvICpjYXJkID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCBzbmRfcHMzX2F2c2V0dGluZ19pbmZvIGF2czsKKwlpbnQgcmV0OwogCiAJYXZzID0gY2FyZC0+YXZzOwogCkBAIC03MjksMTkgKzczMSw5MiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoKGNhcmQtPmF2cy5hdnNfYXVkaW9fd2lkdGggIT0gYXZzLmF2c19hdWRpb193aWR0aCkgfHwKLQkgICAgKGNhcmQtPmF2cy5hdnNfYXVkaW9fcmF0ZSAhPSBhdnMuYXZzX2F1ZGlvX3JhdGUpKSB7Ci0JCWNhcmQtPmF2cyA9IGF2czsKLQkJc25kX3BzM19jaGFuZ2VfYXZzZXR0aW5nKGNhcmQpOworCW1lbWNweShhdnMuYXZzX2NzX2luZm8sIHBzM2F2X21vZGVfY3NfaW5mbywgOCk7CiAKKwlpZiAobWVtY21wKCZjYXJkLT5hdnMsICZhdnMsIHNpemVvZihhdnMpKSkgewogCQlwcl9kZWJ1ZygiJXM6IGFmdGVyIGZyZXE9JWQgd2lkdGg9JWRcbiIsIF9fZnVuY19fLAogCQkJIGNhcmQtPmF2cy5hdnNfYXVkaW9fcmF0ZSwgY2FyZC0+YXZzLmF2c19hdWRpb193aWR0aCk7CiAKLQkJcmV0dXJuIDA7CisJCWNhcmQtPmF2cyA9IGF2czsKKwkJc25kX3BzM19jaGFuZ2VfYXZzZXR0aW5nKGNhcmQpOworCQlyZXQgPSAwOwogCX0gZWxzZQotCQlyZXR1cm4gMTsKKwkJcmV0ID0gMTsKKworCS8qIGNoZWNrIENTIG5vbi1hdWRpbyBiaXQgYW5kIG11dGUgYWNjb3JkaW5nbHkgKi8KKwlpZiAoYXZzLmF2c19jc19pbmZvWzBdICYgMHgwMikKKwkJcHMzYXZfYXVkaW9fbXV0ZV9hbmFsb2coMSk7IC8qIG11dGUgaWYgbm9uLWF1ZGlvICovCisJZWxzZQorCQlwczNhdl9hdWRpb19tdXRlX2FuYWxvZygwKTsKKworCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBTUERJRiBzdGF0dXMgYml0cyBjb250cm9scworICovCitzdGF0aWMgaW50IHNuZF9wczNfc3BkaWZfbWFza19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lFQzk1ODsKKwl1aW5mby0+Y291bnQgPSAxOworCXJldHVybiAwOworfQorCisvKiBGSVhNRTogcHMzYXZfc2V0X2F1ZGlvX21vZGUoKSBhc3N1bWVzIG9ubHkgY29uc3VtZXIgbW9kZSAqLworc3RhdGljIGludCBzbmRfcHMzX3NwZGlmX2NtYXNrX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwltZW1zZXQodWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXMsIDB4ZmYsIDgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9wczNfc3BkaWZfcG1hc2tfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9wczNfc3BkaWZfZGVmYXVsdF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwltZW1jcHkodWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXMsIHBzM2F2X21vZGVfY3NfaW5mbywgOCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3BzM19zcGRpZl9kZWZhdWx0X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCWlmIChtZW1jbXAocHMzYXZfbW9kZV9jc19pbmZvLCB1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1cywgOCkpIHsKKwkJbWVtY3B5KHBzM2F2X21vZGVfY3NfaW5mbywgdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXMsIDgpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzcGRpZl9jdGxzW10gPSB7CisJeworCQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsCisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKKwkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsUExBWUJBQ0ssQ09OX01BU0spLAorCQkuaW5mbyA9IHNuZF9wczNfc3BkaWZfbWFza19pbmZvLAorCQkuZ2V0ID0gc25kX3BzM19zcGRpZl9jbWFza19nZXQsCisJfSwKKwl7CisJCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCwKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAorCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixQTEFZQkFDSyxQUk9fTUFTSyksCisJCS5pbmZvID0gc25kX3BzM19zcGRpZl9tYXNrX2luZm8sCisJCS5nZXQgPSBzbmRfcHMzX3NwZGlmX3BtYXNrX2dldCwKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAorCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixQTEFZQkFDSyxERUZBVUxUKSwKKwkJLmluZm8gPSBzbmRfcHMzX3NwZGlmX21hc2tfaW5mbywKKwkJLmdldCA9IHNuZF9wczNfc3BkaWZfZGVmYXVsdF9nZXQsCisJCS5wdXQgPSBzbmRfcHMzX3NwZGlmX2RlZmF1bHRfcHV0LAorCX0sCit9OwogCiAKIHN0YXRpYyBpbnQgc25kX3BzM19tYXBfbW1pbyh2b2lkKQpAQCAtODQyLDcgKzkxNyw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNuZF9wczNfZHJpdmVyX3Byb2JlKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldikKIHsKLQlpbnQgcmV0OworCWludCBpLCByZXQ7CiAJdTY0IGxwYXJfYWRkciwgbHBhcl9zaXplOwogCiAJQlVHX09OKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1BTM19MVjEpKTsKQEAgLTkwMyw2ICs5NzgsMTUgQEAKIAlzdHJjcHkodGhlX2NhcmQuY2FyZC0+ZHJpdmVyLCAiUFMzIik7CiAJc3RyY3B5KHRoZV9jYXJkLmNhcmQtPnNob3J0bmFtZSwgIlBTMyIpOwogCXN0cmNweSh0aGVfY2FyZC5jYXJkLT5sb25nbmFtZSwgIlBTMyBzb3VuZCIpOworCisJLyogY3JlYXRlIGNvbnRyb2wgZWxlbWVudHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGRpZl9jdGxzKTsgaSsrKSB7CisJCXJldCA9IHNuZF9jdGxfYWRkKHRoZV9jYXJkLmNhcmQsCisJCQkJICBzbmRfY3RsX25ldzEoJnNwZGlmX2N0bHNbaV0sICZ0aGVfY2FyZCkpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gY2xlYW5fY2FyZDsKKwl9CisKIAkvKiBjcmVhdGUgUENNIGRldmljZXMgaW5zdGFuY2UgKi8KIAkvKiBOT1RFOnRoaXMgZHJpdmVyIHdvcmtzIGFzc3VtaW5nIHBjbTpzdWJzdHJlYW0gPSAxOjEgKi8KIAlyZXQgPSBzbmRfcGNtX25ldyh0aGVfY2FyZC5jYXJkLApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3NuZF9wczMuaCBiL3NvdW5kL3BwYy9zbmRfcHMzLmgKaW5kZXggNGI3ZTZmYi4uMzI2ZmIyOSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3NuZF9wczMuaAorKysgYi9zb3VuZC9wcGMvc25kX3BzMy5oCkBAIC01MSw2ICs1MSw3IEBACiAJdWludDMyX3QgYXZzX2F1ZGlvX3dpZHRoOwogCXVpbnQzMl90IGF2c19hdWRpb19mb3JtYXQ7IC8qIGZpeGVkICovCiAJdWludDMyX3QgYXZzX2F1ZGlvX3NvdXJjZTsgLyogZml4ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIGF2c19jc19pbmZvWzhdOwogfTsKIC8qCiAgKiBQUzMgYXVkaW8gJ2NhcmQnIGluc3RhbmNlCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXQzMi9wbGF5cGFxX3dtODUxMC5jIGIvc291bmQvc29jL2F0MzIvcGxheXBhcV93bTg1MTAuYwppbmRleCA5OGEyZDU4Li5iMTk2NmU0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXQzMi9wbGF5cGFxX3dtODUxMC5jCisrKyBiL3NvdW5kL3NvYy9hdDMyL3BsYXlwYXFfd204NTEwLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogCiAKIAotc3RhdGljIGNvbnN0IGNoYXIgKmludGVyY29uW11bM10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBpbnRlcmNvbltdID0gewogCS8qIHNwZWFrZXIgY29ubmVjdGVkIHRvIFNQS09VVCAqLwogCXsiRXh0IFNwayIsIE5VTEwsICJTUEtPVVRQIn0sCiAJeyJFeHQgU3BrIiwgTlVMTCwgIlNQS09VVE4ifSwKQEAgLTMxMiw5ICszMTIsNiBAQAogCXsiTWljIEJpYXMiLCBOVUxMLCAiSW50IE1pYyJ9LAogCXsiTUlDTiIsIE5VTEwsICJNaWMgQmlhcyJ9LAogCXsiTUlDUCIsIE5VTEwsICJNaWMgQmlhcyJ9LAotCi0JLyogVGVybWluYXRvciAqLwotCXtOVUxMLCBOVUxMLCBOVUxMfSwKIH07CiAKIApAQCAtMzM0LDExICszMzEsOCBAQAogCS8qCiAJICogU2V0dXAgYXVkaW8gcGF0aCBpbnRlcmNvbm5lY3RzCiAJICovCi0JZm9yIChpID0gMDsgaW50ZXJjb25baV1bMF0gIT0gTlVMTDsgaSsrKSB7Ci0JCXNuZF9zb2NfZGFwbV9jb25uZWN0X2lucHV0KGNvZGVjLAotCQkJCQkgICBpbnRlcmNvbltpXVswXSwKLQkJCQkJICAgaW50ZXJjb25baV1bMV0sIGludGVyY29uW2ldWzJdKTsKLQl9CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CisKIAogCiAJLyogYWx3YXlzIGNvbm5lY3RlZCBwaW5zICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXQ5MS9LY29uZmlnIGIvc291bmQvc29jL2F0OTEvS2NvbmZpZwppbmRleCA5MDUxODY1Li44NWE4ODMyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXQ5MS9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9hdDkxL0tjb25maWcKQEAgLTgsMjAgKzgsMyBAQAogCiBjb25maWcgU05EX0FUOTFfU09DX1NTQwogCXRyaXN0YXRlCi0KLWNvbmZpZyBTTkRfQVQ5MV9TT0NfRVRJX0IxX1dNODczMQotCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgV004NzMxLWJhc2VkIEVuZHJlbGlhIEVUSS1CMSBib2FyZHMiCi0JZGVwZW5kcyBvbiBTTkRfQVQ5MV9TT0MgJiYgKE1BQ0hfRVRJX0IxIHx8IE1BQ0hfRVRJX0MxKQotCXNlbGVjdCBTTkRfQVQ5MV9TT0NfU1NDCi0Jc2VsZWN0IFNORF9TT0NfV004NzMxCi0JaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBXTTg3MzEtYmFzZWQKLQkgIEVuZHJlbGlhIFRlY2hub2xvZ2llcyBJbmMgRVRJLUIxIG9yIEVUSS1DMSBib2FyZHMuCi0KLWNvbmZpZyBTTkRfQVQ5MV9TT0NfRVRJX1NMQVZFCi0JYm9vbCAiUnVuIGNvZGVjIGluIHNsYXZlIE1vZGUgb24gRW5kcmVsaWEgYm9hcmRzIgotCWRlcGVuZHMgb24gU05EX0FUOTFfU09DX0VUSV9CMV9XTTg3MzEKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBydW4gd2l0aCB0aGUgQVQ5MSBTU0MgZ2VuZXJhdGluZyB0aGUgQkNMSwotCSAgYW5kIExSQyBzaWduYWxzIG9uIEVuZHJlbGlhIGJvYXJkcy4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdDkxL01ha2VmaWxlIGIvc291bmQvc29jL2F0OTEvTWFrZWZpbGUKaW5kZXggZjIzZGExNy4uYjgxN2YxMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0OTEvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2F0OTEvTWFrZWZpbGUKQEAgLTQsOCArNCwzIEBACiAKIG9iai0kKENPTkZJR19TTkRfQVQ5MV9TT0MpICs9IHNuZC1zb2MtYXQ5MS5vCiBvYmotJChDT05GSUdfU05EX0FUOTFfU09DX1NTQykgKz0gc25kLXNvYy1hdDkxLXNzYy5vCi0KLSMgQVQ5MSBNYWNoaW5lIFN1cHBvcnQKLXNuZC1zb2MtZXRpLWIxLXdtODczMS1vYmpzIDo9IGV0aV9iMV93bTg3MzEubwotCi1vYmotJChDT05GSUdfU05EX0FUOTFfU09DX0VUSV9CMV9XTTg3MzEpICs9IHNuZC1zb2MtZXRpLWIxLXdtODczMS5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXQ5MS9hdDkxLXNzYy5jIGIvc291bmQvc29jL2F0OTEvYXQ5MS1zc2MuYwppbmRleCBhNWIxYTc5Li4xYjYxY2M0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXQ5MS9hdDkxLXNzYy5jCisrKyBiL3NvdW5kL3NvYy9hdDkxL2F0OTEtc3NjLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgIEVuZHJlbGlhIFRlY2hub2xvZ2llcyBJbmMuCiAgKgogICogQmFzZWQgb24gcHhhMnh4IFBsYXRmb3JtIGRyaXZlcnMgYnkKLSAqIExpYW0gR2lyZHdvb2QgPGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbT4KKyAqIExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0OTEvZXRpX2IxX3dtODczMS5jIGIvc291bmQvc29jL2F0OTEvZXRpX2IxX3dtODczMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODQ3ODFlLi4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9hdDkxL2V0aV9iMV93bTg3MzEuYworKysgL2Rldi9udWxsCkBAIC0xLDM0OSArMCwwIEBACi0vKgotICogZXRpX2IxX3dtODczMSAgLS0gIFNvQyBhdWRpbyBmb3IgQVQ5MVJNOTIwMC1iYXNlZCBFbmRyZWxpYSBFVElfQjEgYm9hcmQuCi0gKgotICogQXV0aG9yOglGcmFuayBNYW5kYXJpbm8gPGZtYW5kYXJpbm9AZW5kcmVsaWEuY29tPgotICoJCUVuZHJlbGlhIFRlY2hub2xvZ2llcyBJbmMuCi0gKiBDcmVhdGVkOglNYXIgMjksIDIwMDYKLSAqCi0gKiBCYXNlZCBvbiBjb3JnaS5jIGJ5OgotICoKLSAqIENvcHlyaWdodCAyMDA1IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCi0gKiBDb3B5cmlnaHQgMjAwNSBPcGVuZWRoYW5kIEx0ZC4KLSAqCi0gKiBBdXRob3JzOiBMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+Ci0gKiAgICAgICAgICBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZEBvcGVuZWRoYW5kLmNvbT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KLQotI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg3MzEuaCIKLSNpbmNsdWRlICJhdDkxLXBjbS5oIgotI2luY2x1ZGUgImF0OTEtc3NjLmgiCi0KLSNpZiAwCi0jZGVmaW5lCURCRyh4Li4uKQlwcmludGsoS0VSTl9JTkZPICJldGlfYjFfd204NzMxOiAiIHgpCi0jZWxzZQotI2RlZmluZQlEQkcoeC4uLikKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IGNsayAqcGNrMV9jbGs7Ci1zdGF0aWMgc3RydWN0IGNsayAqcGxsYl9jbGs7Ci0KLQotc3RhdGljIGludCBldGlfYjFfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwotCWludCByZXQ7Ci0KLQkvKiBjcHUgY2xvY2sgaXMgdGhlIEFUOTEgbWFzdGVyIGNsb2NrIHNlbnQgdG8gdGhlIFNTQyAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgQVQ5MV9TWVNDTEtfTUNLLAotCQk2MDAwMDAwMCwgU05EX1NPQ19DTE9DS19JTik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBjb2RlYyBzeXN0ZW0gY2xvY2sgaXMgc3VwcGxpZWQgYnkgUENLMSwgc2V0IHRvIDEyTUh6ICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODczMV9TWVNDTEssCi0JCTEyMDAwMDAwLCBTTkRfU09DX0NMT0NLX0lOKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFN0YXJ0IFBDSzEgY2xvY2suICovCi0JY2xrX2VuYWJsZShwY2sxX2Nsayk7Ci0JREJHKCJwY2sxIHN0YXJ0ZWRcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGV0aV9iMV9zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQkvKiBTdG9wIFBDSzEgY2xvY2suICovCi0JY2xrX2Rpc2FibGUocGNrMV9jbGspOwotCURCRygicGNrMSBzdG9wcGVkXG4iKTsKLX0KLQotc3RhdGljIGludCBldGlfYjFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0JaW50IHJldDsKLQotI2lmZGVmIENPTkZJR19TTkRfQVQ5MV9TT0NfRVRJX1NMQVZFCi0JdW5zaWduZWQgaW50IHJhdGU7Ci0JaW50IGNtcl9kaXYsIHBlcmlvZDsKLQotCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAotCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCU19DRlMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKLQkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qCi0JICogVGhlIFNTQyBjbG9jayBkaXZpZGVycyBkZXBlbmQgb24gdGhlIHNhbXBsZSByYXRlLiAgVGhlIENNUi5ESVYKLQkgKiBmaWVsZCBkaXZpZGVzIHRoZSBzeXN0ZW0gbWFzdGVyIGNsb2NrIE1DSyB0byBkcml2ZSB0aGUgU1NDIFRLCi0JICogc2lnbmFsIHdoaWNoIHByb3ZpZGVzIHRoZSBjb2RlYyBCQ0xLLiAgVGhlIFRDTVIuUEVSSU9EIGFuZAotCSAqIFJDTVIuUEVSSU9EIGZpZWxkcyBmdXJ0aGVyIGRpdmlkZSB0aGUgQkNMSyBzaWduYWwgdG8gZHJpdmUKLQkgKiB0aGUgU1NDIFRGIGFuZCBSRiBzaWduYWxzIHdoaWNoIHByb3ZpZGUgdGhlIGNvZGVjIERBQ0xSQyBhbmQKLQkgKiBBRENMUkMgY2xvY2tzLgotCSAqCi0JICogVGhlIGRpdmlkZXJzIHdlcmUgZGV0ZXJtaW5lZCB0aHJvdWdoIHRyaWFsIGFuZCBlcnJvciwgd2hlcmUgYQotCSAqIENNUi5ESVYgdmFsdWUgaXMgY2hvc2VuIHN1Y2ggdGhhdCB0aGUgcmVzdWx0aW5nIEJDTEsgdmFsdWUgaXMKLQkgKiBkaXZpc2libGUsIG9yIGFsbW9zdCBkaXZpc2libGUsIGJ5ICgyICogc2FtcGxlIHJhdGUpLCBhbmQgdGhlbgotCSAqIHRoZSBUQ01SLlBFUklPRCBvciBSQ01SLlBFUklPRCBpcyBCQ0xLIC8gKDIgKiBzYW1wbGUgcmF0ZSkgLSAxLgotCSAqLwotCXJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwotCi0Jc3dpdGNoIChyYXRlKSB7Ci0JY2FzZSA4MDAwOgotCQljbXJfZGl2ID0gMjU7CS8qIEJDTEsgPSA2ME1Iei8oMioyNSkgPSAxLjJNSHogKi8KLQkJcGVyaW9kID0gNzQ7CS8qIExSQyA9IEJDTEsvKDIqKDc0KzEpKSA9IDgwMDBIeiAqLwotCQlicmVhazsKLQljYXNlIDMyMDAwOgotCQljbXJfZGl2ID0gNzsJLyogQkNMSyA9IDYwTUh6LygyKjcpIH49IDQuMjg1NzE0MjhNSHogKi8KLQkJcGVyaW9kID0gNjY7CS8qIExSQyA9IEJDTEsvKDIqKDY2KzEpKSA9IDMxOTgyLjk0Mkh6ICovCi0JCWJyZWFrOwotCWNhc2UgNDgwMDA6Ci0JCWNtcl9kaXYgPSAxMzsJLyogQkNMSyA9IDYwTUh6LygyKjEzKSB+PSAyLjMwNzY5MjNNSHogKi8KLQkJcGVyaW9kID0gMjM7CS8qIExSQyA9IEJDTEsvKDIqKDIzKzEpKSA9IDQ4MDc2LjkyM0h6ICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInVuc3VwcG9ydGVkIHJhdGUgJWQgb24gRVRJLUIxIGJvYXJkXG4iLCByYXRlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogc2V0IHRoZSBNQ0sgZGl2aWRlciBmb3IgQkNMSyAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY3B1X2RhaSwgQVQ5MVNTQ19DTVJfRElWLCBjbXJfZGl2KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7Ci0JCS8qIHNldCB0aGUgQkNMSyBkaXZpZGVyIGZvciBEQUNMUkMgKi8KLQkJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2RpdihjcHVfZGFpLAotCQkJCQkJQVQ5MVNTQ19UQ01SX1BFUklPRCwgcGVyaW9kKTsKLQl9IGVsc2UgewotCQkvKiBzZXQgdGhlIEJDTEsgZGl2aWRlciBmb3IgQURDTFJDICovCi0JCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY3B1X2RhaSwKLQkJCQkJCUFUOTFTU0NfUkNNUl9QRVJJT0QsIHBlcmlvZCk7Ci0JfQotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0jZWxzZSAvKiBDT05GSUdfU05EX0FUOTFfU09DX0VUSV9TTEFWRSAqLwotCS8qCi0JICogQ29kZWMgaW4gTWFzdGVyIE1vZGUuCi0JICovCi0KLQkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKLQkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8Ci0JCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLSNlbmRpZiAvKiBDT05GSUdfU05EX0FUOTFfU09DX0VUSV9TTEFWRSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgZXRpX2IxX29wcyA9IHsKLQkuc3RhcnR1cCA9IGV0aV9iMV9zdGFydHVwLAotCS5od19wYXJhbXMgPSBldGlfYjFfaHdfcGFyYW1zLAotCS5zaHV0ZG93biA9IGV0aV9iMV9zaHV0ZG93biwKLX07Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IGV0aV9iMV9kYXBtX3dpZGdldHNbXSA9IHsKLQlTTkRfU09DX0RBUE1fTUlDKCJJbnQgTWljIiwgTlVMTCksCi0JU05EX1NPQ19EQVBNX1NQSygiRXh0IFNwayIsIE5VTEwpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgaW50ZXJjb25bXSA9IHsKLQotCS8qIHNwZWFrZXIgY29ubmVjdGVkIHRvIExIUE9VVCAqLwotCXsiRXh0IFNwayIsIE5VTEwsICJMSFBPVVQifSwKLQotCS8qIG1pYyBpcyBjb25uZWN0ZWQgdG8gTWljIEphY2ssIHdpdGggV004NzMxIE1pYyBCaWFzICovCi0JeyJNSUNJTiIsIE5VTEwsICJNaWMgQmlhcyJ9LAotCXsiTWljIEJpYXMiLCBOVUxMLCAiSW50IE1pYyJ9LAotfTsKLQotLyoKLSAqIExvZ2ljIGZvciBhIHdtODczMSBhcyBjb25uZWN0ZWQgb24gYSBFbmRyZWxpYSBFVEktQjEgYm9hcmQuCi0gKi8KLXN0YXRpYyBpbnQgZXRpX2IxX3dtODczMV9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlEQkcoImV0aV9iMV93bTg3MzFfaW5pdCgpIGNhbGxlZFxuIik7Ci0KLQkvKiBBZGQgc3BlY2lmaWMgd2lkZ2V0cyAqLwotCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGV0aV9iMV9kYXBtX3dpZGdldHMsCi0JCQkJICBBUlJBWV9TSVpFKGV0aV9iMV9kYXBtX3dpZGdldHMpKTsKLQotCS8qIFNldCB1cCBzcGVjaWZpYyBhdWRpbyBwYXRoIGludGVyY29ubmVjdHMgKi8KLQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlKGNvZGVjLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOwotCi0JLyogbm90IGNvbm5lY3RlZCAqLwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIlJMSU5FSU4iKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJMTElORUlOIik7Ci0KLQkvKiBhbHdheXMgY29ubmVjdGVkICovCi0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJJbnQgTWljIik7Ci0Jc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJFeHQgU3BrIik7Ci0KLQlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGV0aV9iMV9kYWkgPSB7Ci0JLm5hbWUgPSAiV004NzMxIiwKLQkuc3RyZWFtX25hbWUgPSAiV004NzMxIFBDTSIsCi0JLmNwdV9kYWkgPSAmYXQ5MV9zc2NfZGFpWzFdLAotCS5jb2RlY19kYWkgPSAmd204NzMxX2RhaSwKLQkuaW5pdCA9IGV0aV9iMV93bTg3MzFfaW5pdCwKLQkub3BzID0gJmV0aV9iMV9vcHMsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfbWFjaGluZSBzbmRfc29jX21hY2hpbmVfZXRpX2IxID0gewotCS5uYW1lID0gIkVUSV9CMV9XTTg3MzEiLAotCS5kYWlfbGluayA9ICZldGlfYjFfZGFpLAotCS5udW1fbGlua3MgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCB3bTg3MzFfc2V0dXBfZGF0YSBldGlfYjFfd204NzMxX3NldHVwID0gewotCS5pMmNfYnVzID0gMCwKLQkuaTJjX2FkZHJlc3MgPSAweDFhLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBldGlfYjFfc25kX2RldmRhdGEgPSB7Ci0JLm1hY2hpbmUgPSAmc25kX3NvY19tYWNoaW5lX2V0aV9iMSwKLQkucGxhdGZvcm0gPSAmYXQ5MV9zb2NfcGxhdGZvcm0sCi0JLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODczMSwKLQkuY29kZWNfZGF0YSA9ICZldGlfYjFfd204NzMxX3NldHVwLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmV0aV9iMV9zbmRfZGV2aWNlOwotCi1zdGF0aWMgaW50IF9faW5pdCBldGlfYjFfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGF0OTFfc3NjX3BlcmlwaCAqc3NjID0gZXRpX2IxX2RhaS5jcHVfZGFpLT5wcml2YXRlX2RhdGE7Ci0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihBVDkxUk05MjAwX0JBU0VfU1NDMSwgU1pfMTZLLCAic29jLWF1ZGlvIikpIHsKLQkJREJHKCJTU0MxIG1lbW9yeSByZWdpb24gaXMgYnVzeVxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0Jc3NjLT5iYXNlID0gaW9yZW1hcChBVDkxUk05MjAwX0JBU0VfU1NDMSwgU1pfMTZLKTsKLQlpZiAoIXNzYy0+YmFzZSkgewotCQlEQkcoIlNTQzEgbWVtb3J5IGlvcmVtYXAgZmFpbGVkXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsX3JlbGVhc2VfbWVtOwotCX0KLQotCXNzYy0+cGlkID0gQVQ5MVJNOTIwMF9JRF9TU0MxOwotCi0JZXRpX2IxX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKLQlpZiAoIWV0aV9iMV9zbmRfZGV2aWNlKSB7Ci0JCURCRygicGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsX2lvX3VubWFwOwotCX0KLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGV0aV9iMV9zbmRfZGV2aWNlLCAmZXRpX2IxX3NuZF9kZXZkYXRhKTsKLQlldGlfYjFfc25kX2RldmRhdGEuZGV2ID0gJmV0aV9iMV9zbmRfZGV2aWNlLT5kZXY7Ci0KLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGV0aV9iMV9zbmRfZGV2aWNlKTsKLQlpZiAocmV0KSB7Ci0JCURCRygicGxhdGZvcm0gZGV2aWNlIGFkZCBmYWlsZWRcbiIpOwotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGV0aV9iMV9zbmRfZGV2aWNlKTsKLQkJZ290byBmYWlsX2lvX3VubWFwOwotCX0KLQotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNiwgMCk7CS8qIFRGMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNywgMCk7CS8qIFRLMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCOCwgMCk7CS8qIFREMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCOSwgMCk7CS8qIFJEMSAqLwotLyoJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMCwgMCk7Ki8JLyogUksxICovCi0JYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMSwgMCk7CS8qIFJGMSAqLwotCi0JLyoKLQkgKiBTZXQgUENLMSBwYXJlbnQgdG8gUExMQiBhbmQgaXRzIHJhdGUgdG8gMTIgTWh6LgotCSAqLwotCXBsbGJfY2xrID0gY2xrX2dldChOVUxMLCAicGxsYiIpOwotCXBjazFfY2xrID0gY2xrX2dldChOVUxMLCAicGNrMSIpOwotCi0JY2xrX3NldF9wYXJlbnQocGNrMV9jbGssIHBsbGJfY2xrKTsKLQljbGtfc2V0X3JhdGUocGNrMV9jbGssIDEyMDAwMDAwKTsKLQotCURCRygiTUNMSyByYXRlICVsdUh6XG4iLCBjbGtfZ2V0X3JhdGUocGNrMV9jbGspKTsKLQotCS8qIGFzc2lnbiB0aGUgR1BJTyBwaW4gdG8gUENLMSAqLwotCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjQsIDApOwotCi0jaWZkZWYgQ09ORklHX1NORF9BVDkxX1NPQ19FVElfU0xBVkUKLQlwcmludGsoS0VSTl9JTkZPICJldGlfYjFfd204NzMxOiBDb2RlYyBpbiBTbGF2ZSBNb2RlXG4iKTsKLSNlbHNlCi0JcHJpbnRrKEtFUk5fSU5GTyAiZXRpX2IxX3dtODczMTogQ29kZWMgaW4gTWFzdGVyIE1vZGVcbiIpOwotI2VuZGlmCi0JcmV0dXJuIHJldDsKLQotZmFpbF9pb191bm1hcDoKLQlpb3VubWFwKHNzYy0+YmFzZSk7Ci1mYWlsX3JlbGVhc2VfbWVtOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihBVDkxUk05MjAwX0JBU0VfU1NDMSwgU1pfMTZLKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXRpX2IxX2V4aXQodm9pZCkKLXsKLQlzdHJ1Y3QgYXQ5MV9zc2NfcGVyaXBoICpzc2MgPSBldGlfYjFfZGFpLmNwdV9kYWktPnByaXZhdGVfZGF0YTsKLQotCWNsa19wdXQocGNrMV9jbGspOwotCWNsa19wdXQocGxsYl9jbGspOwotCi0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZXRpX2IxX3NuZF9kZXZpY2UpOwotCi0JaW91bm1hcChzc2MtPmJhc2UpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihBVDkxUk05MjAwX0JBU0VfU1NDMSwgU1pfMTZLKTsKLX0KLQotbW9kdWxlX2luaXQoZXRpX2IxX2luaXQpOwotbW9kdWxlX2V4aXQoZXRpX2IxX2V4aXQpOwotCi0vKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KLU1PRFVMRV9BVVRIT1IoIkZyYW5rIE1hbmRhcmlubyA8Zm1hbmRhcmlub0BlbmRyZWxpYS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIEVUSS1CMS1XTTg3MzEiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnIGIvc291bmQvc29jL2JsYWNrZmluL0tjb25maWcKaW5kZXggZjk4MzMxZC4uZGMwMDYyMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL0tjb25maWcKKysrIGIvc291bmQvc29jL2JsYWNrZmluL0tjb25maWcKQEAgLTE3LDYgKzE3LDIyIEBACiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBCRjUyNy1FWktJVC4KIAorY29uZmlnIFNORF9CRjVYWF9TT0NfQUQ3MzMxMQorCXRyaXN0YXRlICJTb0MgQUQ3MzMxMSBBdWRpbyBzdXBwb3J0IGZvciBCbGFja2ZpbiIKKwlkZXBlbmRzIG9uIFNORF9CRjVYWF9JMlMKKwlzZWxlY3QgU05EX0JGNVhYX1NPQ19JMlMKKwlzZWxlY3QgU05EX1NPQ19BRDczMzExCisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIEFENzMzMTEgY29kZWMgb24gQmxhY2tmaW4uCisKK2NvbmZpZyBTTkRfQkZJTl9BRDczMzExX1NFCisJaW50ICJQRiBwaW4gZm9yIEFENzMzMTFMIENoaXAgU2VsZWN0IgorCWRlcGVuZHMgb24gU05EX0JGNVhYX1NPQ19BRDczMzExCisJZGVmYXVsdCA0CisJaGVscAorCSAgRW50ZXIgdGhlIEdQSU8gdXNlZCB0byBjb250cm9sIEFENzMzMTEncyBTRSBwaW4uIEFjY2VwdGFibGUKKwkgIHZhbHVlcyBhcmUgMCB0byA3CisKIGNvbmZpZyBTTkRfQkY1WFhfQUM5NwogCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBmb3IgdGhlIEFESSBCRjV4eCBjaGlwIgogCWRlcGVuZHMgb24gQkxBQ0tGSU4gJiYgU05EX1NPQwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL01ha2VmaWxlIGIvc291bmQvc29jL2JsYWNrZmluL01ha2VmaWxlCmluZGV4IDllYThiZDkuLjk3YmIzN2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDggQEAKICMgQmxhY2tmaW4gTWFjaGluZSBTdXBwb3J0CiBzbmQtYWQxOTgwLW9ianMgOj0gYmY1eHgtYWQxOTgwLm8KIHNuZC1zc20yNjAyLW9ianMgOj0gYmY1eHgtc3NtMjYwMi5vCi0KK3NuZC1hZDczMzExLW9ianMgOj0gYmY1eHgtYWQ3MzMxMS5vCiAKIG9iai0kKENPTkZJR19TTkRfQkY1WFhfU09DX0FEMTk4MCkgKz0gc25kLWFkMTk4MC5vCiBvYmotJChDT05GSUdfU05EX0JGNVhYX1NPQ19TU00yNjAyKSArPSBzbmQtc3NtMjYwMi5vCitvYmotJChDT05GSUdfU05EX0JGNVhYX1NPQ19BRDczMzExKSArPSBzbmQtYWQ3MzMxMS5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jCmluZGV4IDUxZjQ5MDcuLjI1ZTUwZDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LXBjbS5jCkBAIC01Niw2ICs1Niw3IEBACiAJCXNwb3J0LT50eF9wb3MgKz0gcnVudGltZS0+cGVyaW9kX3NpemU7CiAJCWlmIChzcG9ydC0+dHhfcG9zID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQogCQkJc3BvcnQtPnR4X3BvcyAlPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJc3BvcnQtPnR4X2RlbGF5X3BvcyA9IHNwb3J0LT50eF9wb3M7CiAJfSBlbHNlIHsKIAkJYmY1eHhfYWM5N190b19wY20oCiAJCQkoc3RydWN0IGFjOTdfZnJhbWUgKilzcG9ydC0+cnhfZG1hX2J1ZiArIHNwb3J0LT5yeF9wb3MsCkBAIC03Miw3ICs3MywxNSBAQAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqcGNtID0gZGF0YTsKICNpZiBkZWZpbmVkKENPTkZJR19TTkRfTU1BUF9TVVBQT1JUKQogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBwY20tPnJ1bnRpbWU7CisJc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJYmY1eHhfbW1hcF9jb3B5KHBjbSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCWlmIChwY20tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWlmIChzcG9ydC0+b25jZSA9PSAwKSB7CisJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHBjbSk7CisJCQliZjV4eF9tbWFwX2NvcHkocGNtLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCQlzcG9ydC0+b25jZSA9IDE7CisJCX0KKwl9CiAjZW5kaWYKIAlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHBjbSk7CiB9CkBAIC0xMTQsNiArMTIzLDEwIEBACiAKIHN0YXRpYyBpbnQgYmY1eHhfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCW1lbXNldChydW50aW1lLT5kbWFfYXJlYSwgMCwgcnVudGltZS0+YnVmZmVyX3NpemUpOwogCXNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNywxNiArMTQwLDExIEBACiAJICogU1BPUlQgd29ya2luZyBpbiBUTUQgbW9kZShpbmNsdWRlIEFDOTcpLgogCSAqLwogI2lmIGRlZmluZWQoQ09ORklHX1NORF9NTUFQX1NVUFBPUlQpCi0Jc2l6ZV90IHNpemUgPSBiZjV4eF9wY21faGFyZHdhcmUuYnVmZmVyX2J5dGVzX21heAotCQkJKiBzaXplb2Yoc3RydWN0IGFjOTdfZnJhbWUpIC8gNDsKLQkvKmNsZWFuIHVwIGludGVybWVkaWF0ZSBidWZmZXIqLwogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7Ci0JCW1lbXNldChzcG9ydC0+dHhfZG1hX2J1ZiwgMCwgc2l6ZSk7CiAJCXNwb3J0X3NldF90eF9jYWxsYmFjayhzcG9ydCwgYmY1eHhfZG1hX2lycSwgc3Vic3RyZWFtKTsKIAkJc3BvcnRfY29uZmlnX3R4X2RtYShzcG9ydCwgc3BvcnQtPnR4X2RtYV9idWYsIHJ1bnRpbWUtPnBlcmlvZHMsCiAJCQlydW50aW1lLT5wZXJpb2Rfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgYWM5N19mcmFtZSkpOwogCX0gZWxzZSB7Ci0JCW1lbXNldChzcG9ydC0+cnhfZG1hX2J1ZiwgMCwgc2l6ZSk7CiAJCXNwb3J0X3NldF9yeF9jYWxsYmFjayhzcG9ydCwgYmY1eHhfZG1hX2lycSwgc3Vic3RyZWFtKTsKIAkJc3BvcnRfY29uZmlnX3J4X2RtYShzcG9ydCwgc3BvcnQtPnJ4X2RtYV9idWYsIHJ1bnRpbWUtPnBlcmlvZHMsCiAJCQlydW50aW1lLT5wZXJpb2Rfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgYWM5N19mcmFtZSkpOwpAQCAtMTY0LDggKzE3MiwxMiBAQAogCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLQkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCQliZjV4eF9tbWFwX2NvcHkoc3Vic3RyZWFtLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CisJCQlzcG9ydC0+dHhfZGVsYXlfcG9zID0gMDsKIAkJCXNwb3J0X3R4X3N0YXJ0KHNwb3J0KTsKKwkJfQogCQllbHNlCiAJCQlzcG9ydF9yeF9zdGFydChzcG9ydCk7CiAJCWJyZWFrOwpAQCAtMTk4LDcgKzIxMCw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19TTkRfTU1BUF9TVVBQT1JUKQogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQljdXJyID0gc3BvcnQtPnR4X3BvczsKKwkJY3VyciA9IHNwb3J0LT50eF9kZWxheV9wb3M7CiAJZWxzZQogCQljdXJyID0gc3BvcnQtPnJ4X3BvczsKICNlbHNlCkBAIC0yMzcsNiArMjQ5LDIxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBiZjV4eF9wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCXNwb3J0LT5vbmNlID0gMDsKKwkJbWVtc2V0KHNwb3J0LT50eF9kbWFfYnVmLCAwLCBydW50aW1lLT5idWZmZXJfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgYWM5N19mcmFtZSkpOworCX0gZWxzZQorCQltZW1zZXQoc3BvcnQtPnJ4X2RtYV9idWYsIDAsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc2l6ZW9mKHN0cnVjdCBhYzk3X2ZyYW1lKSk7CisKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19TTkRfTU1BUF9TVVBQT1JUCiBzdGF0aWMgaW50IGJmNXh4X3BjbV9tbWFwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpAQCAtMjcyLDYgKzI5OSw3IEBACiAKIHN0cnVjdCBzbmRfcGNtX29wcyBiZjV4eF9wY21fYWM5N19vcHMgPSB7CiAJLm9wZW4JCT0gYmY1eHhfcGNtX29wZW4sCisJLmNsb3NlCQk9IGJmNXh4X3BjbV9jbG9zZSwKIAkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCiAJLmh3X3BhcmFtcwk9IGJmNXh4X3BjbV9od19wYXJhbXMsCiAJLmh3X2ZyZWUJPSBiZjV4eF9wY21faHdfZnJlZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jCmluZGV4IGM3ODJlMzEuLjVlNWFhZmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYwpAQCAtMTI5LDcgKzEyOSw2IEBACiAJc3RydWN0IGFjOTdfZnJhbWUgKm5leHR3cml0ZTsKIAogCXNwb3J0X2luY2ZyYWcoc3BvcnQsICZuZXh0ZnJhZywgMSk7Ci0Jc3BvcnRfaW5jZnJhZyhzcG9ydCwgJm5leHRmcmFnLCAxKTsKIAogCW5leHR3cml0ZSA9IChzdHJ1Y3QgYWM5N19mcmFtZSAqKShzcG9ydC0+dHhfYnVmICsgXAogCQkJbmV4dGZyYWcgKiBzcG9ydC0+dHhfZnJhZ3NpemUpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkNzMzMTEuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyYzliOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIHNvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMKKyAqIEF1dGhvcjogICAgICAgQ2xpZmYgQ2FpIDxDbGlmZi5DYWlAYW5hbG9nLmNvbT4KKyAqCisgKiBDcmVhdGVkOiAgICAgIFRodXIgU2VwIDI1IDIwMDgKKyAqIERlc2NyaXB0aW9uOiAgQm9hcmQgZHJpdmVyIGZvciBhZDczMzExIHNvdW5kIGNoaXAKKyAqCisgKiBNb2RpZmllZDoKKyAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKKyAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorCisjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3MvYWQ3MzMxMS5oIgorI2luY2x1ZGUgImJmNXh4LXNwb3J0LmgiCisjaW5jbHVkZSAiYmY1eHgtaTJzLXBjbS5oIgorI2luY2x1ZGUgImJmNXh4LWkycy5oIgorCisjaWYgQ09ORklHX1NORF9CRjVYWF9TUE9SVF9OVU0gPT0gMAorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUX1RDUjEJYmZpbl93cml0ZV9TUE9SVDBfVENSMQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlRfVENSMQliZmluX3JlYWRfU1BPUlQwX1RDUjEKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVF9UQ1IyCWJmaW5fd3JpdGVfU1BPUlQwX1RDUjIKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVF9UWDE2CWJmaW5fd3JpdGVfU1BPUlQwX1RYMTYKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUX1NUQVQJYmZpbl9yZWFkX1NQT1JUMF9TVEFUCisjZWxzZQorI2RlZmluZSBiZmluX3dyaXRlX1NQT1JUX1RDUjEJYmZpbl93cml0ZV9TUE9SVDFfVENSMQorI2RlZmluZSBiZmluX3JlYWRfU1BPUlRfVENSMQliZmluX3JlYWRfU1BPUlQxX1RDUjEKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVF9UQ1IyCWJmaW5fd3JpdGVfU1BPUlQxX1RDUjIKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVF9UWDE2CWJmaW5fd3JpdGVfU1BPUlQxX1RYMTYKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUX1NUQVQJYmZpbl9yZWFkX1NQT1JUMV9TVEFUCisjZW5kaWYKKworI2RlZmluZSBHUElPX1NFIENPTkZJR19TTkRfQkZJTl9BRDczMzExX1NFCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19tYWNoaW5lIGJmNXh4X2FkNzMzMTE7CisKK3N0YXRpYyBpbnQgc25kX2FkNzMzMTFfc3RhcnR1cCh2b2lkKQoreworCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCisJLyogUHVsbCB1cCBTRSBwaW4gb24gQUQ3MzMxMUwgKi8KKwlncGlvX3NldF92YWx1ZShHUElPX1NFLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfYWQ3MzMxMV9jb25maWd1cmUodm9pZCkKK3sKKwl1bnNpZ25lZCBzaG9ydCBjdHJsX3JlZ3NbNl07CisJdW5zaWduZWQgc2hvcnQgc3RhdHVzID0gMDsKKwlpbnQgY291bnQgPSAwOworCisJLyogRE1DTEsgPSBNQ0xLID0gMTYuMzg0IE1IegorCSAqIFNDTEsgPSBETUNMSy84ID0gMi4wNDggTUh6CisJICogU2FtcGxlIFJhdGUgPSBETUNMSy8yMDQ4ICA9IDggS0h6CisJICovCisJY3RybF9yZWdzWzBdID0gQURfQ09OVFJPTCB8IEFEX1dSSVRFIHwgQ1RSTF9SRUdfQiB8IFJFR0JfTUNESVYoMCkgfCBcCisJCQlSRUdCX1NDRElWKDApIHwgUkVHQl9ESVJBVEUoMCk7CisJY3RybF9yZWdzWzFdID0gQURfQ09OVFJPTCB8IEFEX1dSSVRFIHwgQ1RSTF9SRUdfQyB8IFJFR0NfUFVERVYgfCBcCisJCQlSRUdDX1BVQURDIHwgUkVHQ19QVURBQyB8IFJFR0NfUFVSRUYgfCBSRUdDX1JFRlVTRSA7CisJY3RybF9yZWdzWzJdID0gQURfQ09OVFJPTCB8IEFEX1dSSVRFIHwgQ1RSTF9SRUdfRCB8IFJFR0RfT0dTKDIpIHwgXAorCQkJUkVHRF9JR1MoMik7CisJY3RybF9yZWdzWzNdID0gQURfQ09OVFJPTCB8IEFEX1dSSVRFIHwgQ1RSTF9SRUdfRSB8IFJFR0VfREEoMHgxZik7CisJY3RybF9yZWdzWzRdID0gQURfQ09OVFJPTCB8IEFEX1dSSVRFIHwgQ1RSTF9SRUdfRiB8IFJFR0ZfU0VFTiA7CisJY3RybF9yZWdzWzVdID0gQURfQ09OVFJPTCB8IEFEX1dSSVRFIHwgQ1RSTF9SRUdfQSB8IFJFR0FfTU9ERV9EQVRBOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlzbmRfYWQ3MzMxMV9zdGFydHVwKCk7CisJdWRlbGF5KDEpOworCisJYmZpbl93cml0ZV9TUE9SVF9UQ1IxKFRGU1IpOworCWJmaW5fd3JpdGVfU1BPUlRfVENSMigweEYpOworCVNTWU5DKCk7CisKKwkvKiBTUE9SVCBUeCBSZWdpc3RlciBpcyBhIDggeCAxNiBGSUZPLCBhbGwgdGhlIGRhdGEgY2FuIGJlIHB1dCB0bworCSAqIEZJRk8gYmVmb3JlIGVuYWJsZSBTUE9SVCB0byB0cmFuc2ZlciB0aGUgZGF0YQorCSAqLworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDY7IGNvdW50KyspCisJCWJmaW5fd3JpdGVfU1BPUlRfVFgxNihjdHJsX3JlZ3NbY291bnRdKTsKKwlTU1lOQygpOworCWJmaW5fd3JpdGVfU1BPUlRfVENSMShiZmluX3JlYWRfU1BPUlRfVENSMSgpIHwgVFNQRU4pOworCVNTWU5DKCk7CisKKwkvKiBXaGVuIFRVVkYgaXMgc2V0LCB0aGUgZGF0YSBpcyBhbHJlYWR5IHNlbmQgb3V0ICovCisJd2hpbGUgKCEoc3RhdHVzICYgVFVWRikgJiYgY291bnQrKyA8IDEwMDAwKSB7CisJCXVkZWxheSgxKTsKKwkJc3RhdHVzID0gYmZpbl9yZWFkX1NQT1JUX1NUQVQoKTsKKwkJU1NZTkMoKTsKKwl9CisJYmZpbl93cml0ZV9TUE9SVF9UQ1IxKGJmaW5fcmVhZF9TUE9SVF9UQ1IxKCkgJiB+VFNQRU4pOworCVNTWU5DKCk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJaWYgKGNvdW50ID09IDEwMDAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYWQ3MzMxMTogZmFpbGVkIHRvIGNvbmZpZ3VyZSBjb2RlY1xuIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmY1eHhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgZXJyOworCWlmIChncGlvX3JlcXVlc3QoR1BJT19TRSwgIkFENzMzMTFfU0UiKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgcm8gcmVxdWVzdCBHUElPXyVkXG4iLCBfX2Z1bmNfXywgR1BJT19TRSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fU0UsIDApOworCisJZXJyID0gc25kX2FkNzMzMTFfY29uZmlndXJlKCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmY1eHhfYWQ3MzMxMV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKworCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCWNwdV9kYWktPnByaXZhdGVfZGF0YSA9IHNwb3J0X2hhbmRsZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZjV4eF9hZDczMzExX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJaW50IHJldCA9IDA7CisKKwlwcl9kZWJ1ZygiJXMgcmF0ZSAlZCBmb3JtYXQgJXhcbiIsIF9fZnVuY19fLCBwYXJhbXNfcmF0ZShwYXJhbXMpLAorCQlwYXJhbXNfZm9ybWF0KHBhcmFtcykpOworCisJLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IGNwdV9kYWktPmRhaV9vcHMuc2V0X2ZtdChjcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9EU1BfQSB8CisJCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGJmNXh4X2FkNzMzMTFfb3BzID0geworCS5zdGFydHVwID0gYmY1eHhfYWQ3MzMxMV9zdGFydHVwLAorCS5od19wYXJhbXMgPSBiZjV4eF9hZDczMzExX2h3X3BhcmFtcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBiZjV4eF9hZDczMzExX2RhaSA9IHsKKwkubmFtZSA9ICJhZDczMzExIiwKKwkuc3RyZWFtX25hbWUgPSAiQUQ3MzMxMSIsCisJLmNwdV9kYWkgPSAmYmY1eHhfaTJzX2RhaSwKKwkuY29kZWNfZGFpID0gJmFkNzMzMTFfZGFpLAorCS5vcHMgPSAmYmY1eHhfYWQ3MzMxMV9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfbWFjaGluZSBiZjV4eF9hZDczMzExID0geworCS5uYW1lID0gImJmNXh4X2FkNzMzMTEiLAorCS5wcm9iZSA9IGJmNXh4X3Byb2JlLAorCS5kYWlfbGluayA9ICZiZjV4eF9hZDczMzExX2RhaSwKKwkubnVtX2xpbmtzID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgYmY1eHhfYWQ3MzMxMV9zbmRfZGV2ZGF0YSA9IHsKKwkubWFjaGluZSA9ICZiZjV4eF9hZDczMzExLAorCS5wbGF0Zm9ybSA9ICZiZjV4eF9pMnNfc29jX3BsYXRmb3JtLAorCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl9hZDczMzExLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmJmNTJ4X2FkNzMzMTFfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgYmY1eHhfYWQ3MzMxMV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCWJmNTJ4X2FkNzMzMTFfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghYmY1MnhfYWQ3MzMxMV9zbmRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGJmNTJ4X2FkNzMzMTFfc25kX2RldmljZSwgJmJmNXh4X2FkNzMzMTFfc25kX2RldmRhdGEpOworCWJmNXh4X2FkNzMzMTFfc25kX2RldmRhdGEuZGV2ID0gJmJmNTJ4X2FkNzMzMTFfc25kX2RldmljZS0+ZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYmY1MnhfYWQ3MzMxMV9zbmRfZGV2aWNlKTsKKworCWlmIChyZXQpCisJCXBsYXRmb3JtX2RldmljZV9wdXQoYmY1MnhfYWQ3MzMxMV9zbmRfZGV2aWNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiZjV4eF9hZDczMzExX2V4aXQodm9pZCkKK3sKKwlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihiZjUyeF9hZDczMzExX3NuZF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChiZjV4eF9hZDczMzExX2luaXQpOworbW9kdWxlX2V4aXQoYmY1eHhfYWQ3MzMxMV9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJDbGlmZiBDYWkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgQUQ3MzMxMSBCbGFja2ZpbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKaW5kZXggNDNhNDA5Mi4uODI3NTg3ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYwpAQCAtNzAsNiArNzAsMTMgQEAKIAl9CiB9OwogCitzdGF0aWMgdTE2IHNwb3J0X3JlcVtdWzddID0geworCQl7IFBfU1BPUlQwX0RUUFJJLCBQX1NQT1JUMF9UU0NMSywgUF9TUE9SVDBfUkZTLAorCQkgIFBfU1BPUlQwX0RSUFJJLCBQX1NQT1JUMF9SU0NMSywgMH0sCisJCXsgUF9TUE9SVDFfRFRQUkksIFBfU1BPUlQxX1RTQ0xLLCBQX1NQT1JUMV9SRlMsCisJCSAgUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCAwfSwKK307CisKIHN0YXRpYyBpbnQgYmY1eHhfaTJzX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKIAkJdW5zaWduZWQgaW50IGZtdCkKIHsKQEAgLTc4LDYgKzg1LDE0IEBACiAJLyogaW50ZXJmYWNlIGZvcm1hdDpzdXBwb3J0IEkyUyxzbGF2ZSBtb2RlICovCiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQliZjV4eF9pMnMudGNyMSB8PSBURlNSIHwgVENLRkU7CisJCWJmNXh4X2kycy5yY3IxIHw9IFJGU1IgfCBSQ0tGRTsKKwkJYmY1eHhfaTJzLnRjcjIgfD0gVFNGU0U7CisJCWJmNXh4X2kycy5yY3IyIHw9IFJTRlNFOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQliZjV4eF9pMnMudGNyMSB8PSBURlNSOworCQliZjV4eF9pMnMucmNyMSB8PSBSRlNSOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTEyNywxNCArMTQyLDE3IEBACiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKIAkJYmY1eHhfaTJzLnRjcjIgfD0gMTU7CiAJCWJmNXh4X2kycy5yY3IyIHw9IDE1OworCQlzcG9ydF9oYW5kbGUtPndkc2l6ZSA9IDI7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CiAJCWJmNXh4X2kycy50Y3IyIHw9IDIzOwogCQliZjV4eF9pMnMucmNyMiB8PSAyMzsKKwkJc3BvcnRfaGFuZGxlLT53ZHNpemUgPSAzOwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgogCQliZjV4eF9pMnMudGNyMiB8PSAzMTsKIAkJYmY1eHhfaTJzLnJjcjIgfD0gMzE7CisJCXNwb3J0X2hhbmRsZS0+d2RzaXplID0gNDsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNDUsMTcgKzE2MywxNyBAQAogCQkgKiBuZWVkIHRvIGNvbmZpZ3VyZSBib3RoIG9mIHRoZW0gYXQgdGhlIHRpbWUgd2hlbiB0aGUgZmlyc3QKIAkJICogc3RyZWFtIGlzIG9wZW5lZC4KIAkJICoKLQkJICogQ1BVIERBSSBmb3JtYXQ6STJTLCBzbGF2ZSBtb2RlLgorCQkgKiBDUFUgREFJOnNsYXZlIG1vZGUuCiAJCSAqLwotCQlyZXQgPSBzcG9ydF9jb25maWdfcngoc3BvcnRfaGFuZGxlLCBSRlNSIHwgUkNLRkUsCi0JCQkJICAgICAgUlNGU0V8YmY1eHhfaTJzLnJjcjIsIDAsIDApOworCQlyZXQgPSBzcG9ydF9jb25maWdfcngoc3BvcnRfaGFuZGxlLCBiZjV4eF9pMnMucmNyMSwKKwkJCQkgICAgICBiZjV4eF9pMnMucmNyMiwgMCwgMCk7CiAJCWlmIChyZXQpIHsKIAkJCXByX2VycigiU1BPUlQgaXMgYnVzeSFcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCi0JCXJldCA9IHNwb3J0X2NvbmZpZ190eChzcG9ydF9oYW5kbGUsIFRGU1IgfCBUQ0tGRSwKLQkJCQkgICAgICBUU0ZTRXxiZjV4eF9pMnMudGNyMiwgMCwgMCk7CisJCXJldCA9IHNwb3J0X2NvbmZpZ190eChzcG9ydF9oYW5kbGUsIGJmNXh4X2kycy50Y3IxLAorCQkJCSAgICAgIGJmNXh4X2kycy50Y3IyLCAwLCAwKTsKIAkJaWYgKHJldCkgewogCQkJcHJfZXJyKCJTUE9SVCBpcyBidXN5IVxuIik7CiAJCQlyZXR1cm4gLUVCVVNZOwpAQCAtMTc0LDEzICsxOTIsNiBAQAogc3RhdGljIGludCBiZjV4eF9pMnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXUxNiBzcG9ydF9yZXFbXVs3XSA9IHsKLQkJeyBQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywKLQkJICBQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDB9LAotCQl7IFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLAotCQkgIFBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgMH0sCi0JfTsKLQogCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOwogCWlmIChwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdCgmc3BvcnRfcmVxW3Nwb3J0X251bV1bMF0sICJzb2MtYXVkaW8iKSkgewogCQlwcl9lcnIoIlJlcXVlc3RpbmcgUGVyaXBoZXJhbHMgZmFpbGVkXG4iKTsKQEAgLTE5OCw2ICsyMDksMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYmY1eHhfaTJzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJcHJfZGVidWcoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CisJcGVyaXBoZXJhbF9mcmVlX2xpc3QoJnNwb3J0X3JlcVtzcG9ydF9udW1dWzBdKTsKK30KKwogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBiZjV4eF9pMnNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQpAQCAtMjYzLDE1ICsyODEsMTYgQEAKIAkuaWQgPSAwLAogCS50eXBlID0gU05EX1NPQ19EQUlfSTJTLAogCS5wcm9iZSA9IGJmNXh4X2kyc19wcm9iZSwKKwkucmVtb3ZlID0gYmY1eHhfaTJzX3JlbW92ZSwKIAkuc3VzcGVuZCA9IGJmNXh4X2kyc19zdXNwZW5kLAogCS5yZXN1bWUgPSBiZjV4eF9pMnNfcmVzdW1lLAogCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19taW4gPSAxLAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gQkY1WFhfSTJTX1JBVEVTLAogCQkuZm9ybWF0cyA9IEJGNVhYX0kyU19GT1JNQVRTLH0sCiAJLmNhcHR1cmUgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWluID0gMSwKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IEJGNVhYX0kyU19SQVRFUywKIAkJLmZvcm1hdHMgPSBCRjVYWF9JMlNfRk9STUFUUyx9LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmggYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuaAppbmRleCA0YzE2MzQ1Li5mY2FkY2MwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuaAorKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3BvcnQuaApAQCAtMTIzLDYgKzEyMyw4IEBACiAJaW50IHJ4X3BvczsKIAl1bnNpZ25lZCBpbnQgdHhfYnVmZmVyX3NpemU7CiAJdW5zaWduZWQgaW50IHJ4X2J1ZmZlcl9zaXplOworCWludCB0eF9kZWxheV9wb3M7CisJaW50IG9uY2U7CiAjZW5kaWYKIAl2b2lkICpwcml2YXRlX2RhdGE7CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCmluZGV4IGUwYjk4NjkuLjM4YTBlM2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKQEAgLTMsOSArMywxMSBAQAogCWRlcGVuZHMgb24gSTJDCiAJc2VsZWN0IFNQSQogCXNlbGVjdCBTUElfTUFTVEVSCisJc2VsZWN0IFNORF9TT0NfQUQ3MzMxMQogCXNlbGVjdCBTTkRfU09DX0FLNDUzNQogCXNlbGVjdCBTTkRfU09DX0NTNDI3MAogCXNlbGVjdCBTTkRfU09DX1NTTTI2MDIKKwlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMyMwogCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzI2CiAJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDM1gKIAlzZWxlY3QgU05EX1NPQ19VREExMzgwCkBAIC0zNCw2ICszNiw5IEBACiBjb25maWcgU05EX1NPQ19BRDE5ODAKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19BRDczMzExCisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfQUs0NTM1CiAJdHJpc3RhdGUKIApAQCAtNTgsOSArNjMsMTMgQEAKIGNvbmZpZyBTTkRfU09DX1NTTTI2MDIKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19UTFYzMjBBSUMyMworCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBJMkMKKwogY29uZmlnIFNORF9TT0NfVExWMzIwQUlDMjYKLQl0cmlzdGF0ZSAiVEkgVExWMzIwQUlDMjYgQ29kZWMgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNORF9TT0MgJiYgU1BJCisJdHJpc3RhdGUgIlRJIFRMVjMyMEFJQzI2IENvZGVjIHN1cHBvcnQiIGlmIFNORF9TT0NfT0ZfU0lNUExFCisJZGVwZW5kcyBvbiBTUEkKIAogY29uZmlnIFNORF9TT0NfVExWMzIwQUlDM1gKIAl0cmlzdGF0ZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKaW5kZXggZjk3Nzk3OC4uOTBmMGE1OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCkBAIC0xLDggKzEsMTAgQEAKIHNuZC1zb2MtYWM5Ny1vYmpzIDo9IGFjOTcubwogc25kLXNvYy1hZDE5ODAtb2JqcyA6PSBhZDE5ODAubworc25kLXNvYy1hZDczMzExLW9ianMgOj0gYWQ3MzMxMS5vCiBzbmQtc29jLWFrNDUzNS1vYmpzIDo9IGFrNDUzNS5vCiBzbmQtc29jLWNzNDI3MC1vYmpzIDo9IGNzNDI3MC5vCiBzbmQtc29jLXNzbTI2MDItb2JqcyA6PSBzc20yNjAyLm8KK3NuZC1zb2MtdGx2MzIwYWljMjMtb2JqcyA6PSB0bHYzMjBhaWMyMy5vCiBzbmQtc29jLXRsdjMyMGFpYzI2LW9ianMgOj0gdGx2MzIwYWljMjYubwogc25kLXNvYy10bHYzMjBhaWMzeC1vYmpzIDo9IHRsdjMyMGFpYzN4Lm8KIHNuZC1zb2MtdWRhMTM4MC1vYmpzIDo9IHVkYTEzODAubwpAQCAtMjAsOSArMjIsMTEgQEAKIAogb2JqLSQoQ09ORklHX1NORF9TT0NfQUM5N19DT0RFQykJKz0gc25kLXNvYy1hYzk3Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX0FEMTk4MCkJKz0gc25kLXNvYy1hZDE5ODAubworb2JqLSQoQ09ORklHX1NORF9TT0NfQUQ3MzMxMSkgKz0gc25kLXNvYy1hZDczMzExLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0FLNDUzNSkJKz0gc25kLXNvYy1hazQ1MzUubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQ1M0MjcwKQkrPSBzbmQtc29jLWNzNDI3MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19TU00yNjAyKQkrPSBzbmQtc29jLXNzbTI2MDIubworb2JqLSQoQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjMpCSs9IHNuZC1zb2MtdGx2MzIwYWljMjMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjYpCSs9IHNuZC1zb2MtdGx2MzIwYWljMjYubwogb2JqLSQoQ09ORklHX1NORF9TT0NfVExWMzIwQUlDM1gpCSs9IHNuZC1zb2MtdGx2MzIwYWljM3gubwogb2JqLSQoQ09ORklHX1NORF9TT0NfVURBMTM4MCkJKz0gc25kLXNvYy11ZGExMzgwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jIGIvc291bmQvc29jL2NvZGVjcy9hYzk3LmMKaW5kZXggNjFmZDk2Yy4uYmQxZWJkYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hYzk3LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hYzk3LmMKQEAgLTIsOCArMiw3IEBACiAgKiBhYzk3LmMgIC0tICBBTFNBIFNvYyBBQzk3IGNvZGVjIHN1cHBvcnQKICAqCiAgKiBDb3B5cmlnaHQgMjAwNSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCi0gKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMKaW5kZXggNGUwOWMxZi4uMTM5N2I4ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTk4MC5jCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jIGIvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhZjg2MAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogYWQ3MzMxMS5jICAtLSAgQUxTQSBTb2MgQUQ3MzMxMSBjb2RlYyBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0OglBbmFsb2cgRGV2aWNlIEluYy4KKyAqIEF1dGhvcjoJQ2xpZmYgQ2FpIDxjbGlmZi5jYWlAYW5hbG9nLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgUmV2aXNpb24gaGlzdG9yeQorICogICAgMjV0aCBTZXAgMjAwOCAgIEluaXRpYWwgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgImFkNzMzMTEuaCIKKworc3RydWN0IHNuZF9zb2NfZGFpIGFkNzMzMTFfZGFpID0geworCS5uYW1lID0gIkFENzMzMTEiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAxLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLCB9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMSwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwgfSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChhZDczMzExX2RhaSk7CisKK3N0YXRpYyBpbnQgYWQ3MzMxMV9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY29kZWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwljb2RlYy0+bmFtZSA9ICJBRDczMzExIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+ZGFpID0gJmFkNzMzMTFfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImFkNzMzMTE6IGZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CisJCWdvdG8gcGNtX2VycjsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NhcmQoc29jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImFkNzMzMTE6IGZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKKwkJZ290byByZWdpc3Rlcl9lcnI7CisJfQorCisJcmV0dXJuIHJldDsKKworcmVnaXN0ZXJfZXJyOgorCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CitwY21fZXJyOgorCWtmcmVlKHNvY2Rldi0+Y29kZWMpOworCXNvY2Rldi0+Y29kZWMgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWQ3MzMxMV9zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCisJaWYgKGNvZGVjID09IE5VTEwpCisJCXJldHVybiAwOworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJa2ZyZWUoY29kZWMpOworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9hZDczMzExID0geworCS5wcm9iZSA9IAlhZDczMzExX3NvY19wcm9iZSwKKwkucmVtb3ZlID0gCWFkNzMzMTFfc29jX3JlbW92ZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X2FkNzMzMTEpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgYWQ3MzMxMSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkNsaWZmIENhaSAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5oIGIvc291bmQvc29jL2NvZGVjcy9hZDczMzExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3Y2UwYwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIHNvdW5kL3NvYy9jb2RlYy9hZDczMzExLmgKKyAqIEJhc2VkIG9uOgorICogQXV0aG9yOiAgICAgICBDbGlmZiBDYWkgPGNsaWZmLmNhaUBhbmFsb2cuY29tPgorICoKKyAqIENyZWF0ZWQ6ICAgICAgVGh1ciBTZXAgMjUsIDIwMDgKKyAqIERlc2NyaXB0aW9uOiAgZGVmaW5pdGlvbnMgZm9yIEFENzMzMTEgcmVnaXN0ZXJzCisgKgorICoKKyAqIE1vZGlmaWVkOgorICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQorICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBfX0FENzMzMTFfSF9fCisjZGVmaW5lIF9fQUQ3MzMxMV9IX18KKworI2RlZmluZSBBRF9DT05UUk9MCTB4ODAwMAorI2RlZmluZSBBRF9EQVRBCQkweDAwMDAKKyNkZWZpbmUgQURfUkVBRAkJMHg0MDAwCisjZGVmaW5lIEFEX1dSSVRFCTB4MDAwMAorCisvKiBDb250cm9sIHJlZ2lzdGVyIEEgKi8KKyNkZWZpbmUgQ1RSTF9SRUdfQQkoMCA8PCA4KQorCisjZGVmaW5lIFJFR0FfTU9ERV9QUk8JMHgwMAorI2RlZmluZSBSRUdBX01PREVfREFUQQkweDAxCisjZGVmaW5lIFJFR0FfTU9ERV9NSVhFRAkweDAzCisjZGVmaW5lIFJFR0FfRExCCQkweDA0CisjZGVmaW5lIFJFR0FfU0xCCQkweDA4CisjZGVmaW5lIFJFR0FfREVWQyh4KQkJKCh4ICYgMHg3KSA8PCA0KQorI2RlZmluZSBSRUdBX1JFU0VUCQkweDgwCisKKy8qIENvbnRyb2wgcmVnaXN0ZXIgQiAqLworI2RlZmluZSBDVFJMX1JFR19CCSgxIDw8IDgpCisKKyNkZWZpbmUgUkVHQl9ESVJBVEUoeCkJKHggJiAweDMpCisjZGVmaW5lIFJFR0JfU0NESVYoeCkJKCh4ICYgMHgzKSA8PCAyKQorI2RlZmluZSBSRUdCX01DRElWKHgpCSgoeCAmIDB4NykgPDwgNCkKKyNkZWZpbmUgUkVHQl9DRUUJCSgxIDw8IDcpCisKKy8qIENvbnRyb2wgcmVnaXN0ZXIgQyAqLworI2RlZmluZSBDVFJMX1JFR19DCSgyIDw8IDgpCisKKyNkZWZpbmUgUkVHQ19QVURFVgkJKDEgPDwgMCkKKyNkZWZpbmUgUkVHQ19QVUFEQwkJKDEgPDwgMykKKyNkZWZpbmUgUkVHQ19QVURBQwkJKDEgPDwgNCkKKyNkZWZpbmUgUkVHQ19QVVJFRgkJKDEgPDwgNSkKKyNkZWZpbmUgUkVHQ19SRUZVU0UJCSgxIDw8IDYpCisKKy8qIENvbnRyb2wgcmVnaXN0ZXIgRCAqLworI2RlZmluZSBDVFJMX1JFR19ECSgzIDw8IDgpCisKKyNkZWZpbmUgUkVHRF9JR1MoeCkJCSh4ICYgMHg3KQorI2RlZmluZSBSRUdEX1JNT0QJCSgxIDw8IDMpCisjZGVmaW5lIFJFR0RfT0dTKHgpCQkoKHggJiAweDcpIDw8IDQpCisjZGVmaW5lIFJFR0RfTVVURQkJKHggPDwgNykKKworLyogQ29udHJvbCByZWdpc3RlciBFICovCisjZGVmaW5lIENUUkxfUkVHX0UJKDQgPDwgOCkKKworI2RlZmluZSBSRUdFX0RBKHgpCQkoeCAmIDB4MWYpCisjZGVmaW5lIFJFR0VfSUJZUAkJKDEgPDwgNSkKKworLyogQ29udHJvbCByZWdpc3RlciBGICovCisjZGVmaW5lIENUUkxfUkVHX0YJKDUgPDwgOCkKKworI2RlZmluZSBSRUdGX1NFRU4JCSgxIDw8IDUpCisjZGVmaW5lIFJFR0ZfSU5WCQkoMSA8PCA2KQorI2RlZmluZSBSRUdGX0FMQgkJKDEgPDwgNykKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBhZDczMzExX2RhaTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9hZDczMzExOworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jIGIvc291bmQvc29jL2NvZGVjcy9hazQ1MzUuYwppbmRleCAwODhjZjk5Li4yYTg5YjU4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgImFrNDUzNS5oIgogCi0jZGVmaW5lIEFVRElPX05BTUUgImFrNDUzNSIKICNkZWZpbmUgQUs0NTM1X1ZFUlNJT04gIjAuMyIKIAogc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfYWs0NTM1OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwppbmRleCA5NDBjZTFjLi40NGVmMGRhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwpAQCAtNDIsNyArNDIsNiBAQAogCiAjaW5jbHVkZSAic3NtMjYwMi5oIgogCi0jZGVmaW5lIEFVRElPX05BTUUgInNzbTI2MDIiCiAjZGVmaW5lIFNTTTI2MDJfVkVSU0lPTiAiMC4xIgogCiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9zc20yNjAyOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MzA4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKQEAgLTAsMCArMSw3MTQgQEAKKy8qCisgKiBBTFNBIFNvQyBUTFYzMjBBSUMyMyBjb2RlYyBkcml2ZXIKKyAqCisgKiBBdXRob3I6ICAgICAgQXJ1biBLUywgPGFydW5rc0BtaXN0cmFsc29sdXRpb25zLmNvbT4KKyAqIENvcHlyaWdodDogICAoQykgMjAwOCBNaXN0cmFsIFNvbHV0aW9ucyBQdnQgTHRkLiwKKyAqCisgKiBCYXNlZCBvbiBzb3VuZC9zb2MvY29kZWNzL3dtODczMS5jIGJ5IFJpY2hhcmQgUHVyZGllCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOb3RlczoKKyAqICBUaGUgQUlDMjMgaXMgYSBkcml2ZXIgZm9yIGEgbG93IHBvd2VyIHN0ZXJlbyBhdWRpbworICogIGNvZGVjIHRsdjMyMGFpYzIzCisgKgorICogIFRoZSBtYWNoaW5lIGxheWVyIHNob3VsZCBkaXNhYmxlIHVuc3VwcG9ydGVkIGlucHV0cy9vdXRwdXRzIGJ5CisgKiAgc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTEhQT1VUIiksIGV0Yy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKyNpbmNsdWRlICJ0bHYzMjBhaWMyMy5oIgorCisjZGVmaW5lIEFJQzIzX1ZFUlNJT04gIjAuMSIKKworc3RydWN0IHRsdjMyMGFpYzIzX3NyYXRlX3JlZ19pbmZvIHsKKwl1MzIgc2FtcGxlX3JhdGU7CisJdTggY29udHJvbDsJCS8qIFNSMywgU1IyLCBTUjEsIFNSMCBhbmQgQk9TUiAqLworCXU4IGRpdmlkZXI7CQkvKiBpZiAwIENMS0lOID0gTUNMSywgaWYgMSBDTEtJTiA9IE1DTEsvMiAqLworfTsKKworLyoKKyAqIEFJQzIzIHJlZ2lzdGVyIGNhY2hlCisgKi8KK3N0YXRpYyBjb25zdCB1MTYgdGx2MzIwYWljMjNfcmVnW10gPSB7CisJMHgwMDk3LCAweDAwOTcsIDB4MDBGOSwgMHgwMEY5LAkvKiAwICovCisJMHgwMDFBLCAweDAwMDQsIDB4MDAwNywgMHgwMDAxLAkvKiA0ICovCisJMHgwMDIwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKiA4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKiAxMiAqLworfTsKKworLyoKKyAqIHJlYWQgdGx2MzIwYWljMjMgcmVnaXN0ZXIgY2FjaGUKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGx2MzIwYWljMjNfcmVhZF9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMKKwkJCQkJCSAgICAgICpjb2RlYywgdW5zaWduZWQgaW50IHJlZykKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpZiAocmVnID49IEFSUkFZX1NJWkUodGx2MzIwYWljMjNfcmVnKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBjYWNoZVtyZWddOworfQorCisvKgorICogd3JpdGUgdGx2MzIwYWljMjMgcmVnaXN0ZXIgY2FjaGUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRsdjMyMGFpYzIzX3dyaXRlX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgICB1OCByZWcsIHUxNiB2YWx1ZSkKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpZiAocmVnID49IEFSUkFZX1NJWkUodGx2MzIwYWljMjNfcmVnKSkKKwkJcmV0dXJuOworCWNhY2hlW3JlZ10gPSB2YWx1ZTsKK30KKworLyoKKyAqIHdyaXRlIHRvIHRoZSB0bHYzMjBhaWMyMyByZWdpc3RlciBzcGFjZQorICovCitzdGF0aWMgaW50IHRsdjMyMGFpYzIzX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwkJCSAgICAgdW5zaWduZWQgaW50IHZhbHVlKQoreworCisJdTggZGF0YVsyXTsKKworCS8qIFRMVjMyMEFJQzIzIGhhcyA3IGJpdCBhZGRyZXNzIGFuZCA5IGJpdHMgb2YgZGF0YQorCSAqIHNvIHdlIG5lZWQgdG8gc3dpdGNoIG9uZSBkYXRhIGJpdCBpbnRvIHJlZyBhbmQgcmVzdAorCSAqIG9mIGRhdGEgaW50byB2YWwKKwkgKi8KKworCWlmICgocmVnIDwgMCB8fCByZWcgPiA5KSAmJiAocmVnICE9IDE1KSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBJbnZhbGlkIHJlZ2lzdGVyIFIlZFxuIiwgX19mdW5jX18sIHJlZyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlkYXRhWzBdID0gKHJlZyA8PCAxKSB8ICh2YWx1ZSA+PiA4ICYgMHgwMSk7CisJZGF0YVsxXSA9IHZhbHVlICYgMHhmZjsKKworCXRsdjMyMGFpYzIzX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgcmVnLCB2YWx1ZSk7CisKKwlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpID09IDIpCisJCXJldHVybiAwOworCisJcHJpbnRrKEtFUk5fRVJSICIlcyBjYW5ub3Qgd3JpdGUgJTAzeCB0byByZWdpc3RlciBSJWRcbiIsIF9fZnVuY19fLAorCSAgICAgICB2YWx1ZSwgcmVnKTsKKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcmVjX3NyY190ZXh0W10gPSB7ICJMaW5lIiwgIk1pYyIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpkZWVtcGhfdGV4dFtdID0geyJOb25lIiwgIjMyS2h6IiwgIjQ0LjFLaHoiLCAiNDhLaHoifTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSByZWNfc3JjX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShUTFYzMjBBSUMyM19BTkxHLCAyLCAyLCByZWNfc3JjX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdGx2MzIwYWljMjNfcmVjX3NyY19tdXhfY29udHJvbHMgPQorU09DX0RBUE1fRU5VTSgiSW5wdXQgU2VsZWN0IiwgcmVjX3NyY19lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB0bHYzMjBhaWMyM19yZWNfc3JjID0KKwlTT0NfRU5VTV9TSU5HTEUoVExWMzIwQUlDMjNfQU5MRywgMiwgMiwgcmVjX3NyY190ZXh0KTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gdGx2MzIwYWljMjNfZGVlbXBoID0KKwlTT0NfRU5VTV9TSU5HTEUoVExWMzIwQUlDMjNfRElHVCwgMSwgNCwgZGVlbXBoX3RleHQpOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUob3V0X2dhaW5fdGx2LCAtMTIxMDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoaW5wdXRfZ2Fpbl90bHYsIC0xNzI1LCA3NSwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc2lkZXRvbmVfdm9sX3RsdiwgLTE4MDAsIDMwMCwgMCk7CisKK3N0YXRpYyBpbnQgc25kX3NvY190bHYzMjBhaWMyM19wdXRfdm9sc3coc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXUxNiB2YWwsIHJlZzsKKworCXZhbCA9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDB4MDcpOworCisJLyogbGluZWFyIGNvbnZlcnNpb24gdG8gdXNlcnNwYWNlCisJKiAwMDAJPQktNmRiCisJKiAwMDEJPQktOWRiCisJKiAwMTAJPQktMTJkYgorCSogMDExCT0JLTE4ZGIgKE1pbikKKwkqIDEwMAk9CTBkYiAoTWF4KQorCSovCisJdmFsID0gKHZhbCA+PSA0KSA/IDQgIDogKDMgLSB2YWwpOworCisJcmVnID0gdGx2MzIwYWljMjNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRMVjMyMEFJQzIzX0FOTEcpICYgKH4weDFDMCk7CisJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0FOTEcsIHJlZyB8ICh2YWwgPDwgNikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvY190bHYzMjBhaWMyM19nZXRfdm9sc3coc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXUxNiB2YWw7CisKKwl2YWwgPSB0bHYzMjBhaWMyM19yZWFkX3JlZ19jYWNoZShjb2RlYywgVExWMzIwQUlDMjNfQU5MRykgJiAoMHgxQzApOworCXZhbCA9IHZhbCA+PiA2OworCXZhbCA9ICh2YWwgPj0gNCkgPyA0ICA6ICgzIC0gIHZhbCk7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB2YWw7CisJcmV0dXJuIDA7CisKK30KKworI2RlZmluZSBTT0NfVExWMzIwQUlDMjNfU0lOR0xFX1RMVih4bmFtZSwgcmVnLCBzaGlmdCwgbWF4LCBpbnZlcnQsIHRsdl9hcnJheSkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQgfFwKKwkJIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsXAorCS50bHYucCA9ICh0bHZfYXJyYXkpLCBcCisJLmluZm8gPSBzbmRfc29jX2luZm9fdm9sc3csIC5nZXQgPSBzbmRfc29jX3RsdjMyMGFpYzIzX2dldF92b2xzdyxcCisJLnB1dCA9IHNuZF9zb2NfdGx2MzIwYWljMjNfcHV0X3ZvbHN3LCBcCisJLnByaXZhdGVfdmFsdWUgPSAgU09DX1NJTkdMRV9WQUxVRShyZWcsIHNoaWZ0LCBtYXgsIGludmVydCkgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdGx2MzIwYWljMjNfc25kX2NvbnRyb2xzW10gPSB7CisJU09DX0RPVUJMRV9SX1RMVigiRGlnaXRhbCBQbGF5YmFjayBWb2x1bWUiLCBUTFYzMjBBSUMyM19MQ0hOVk9MLAorCQkJIFRMVjMyMEFJQzIzX1JDSE5WT0wsIDAsIDEyNywgMCwgb3V0X2dhaW5fdGx2KSwKKwlTT0NfU0lOR0xFKCJEaWdpdGFsIFBsYXliYWNrIFN3aXRjaCIsIFRMVjMyMEFJQzIzX0RJR1QsIDMsIDEsIDEpLAorCVNPQ19ET1VCTEVfUigiTGluZSBJbnB1dCBTd2l0Y2giLCBUTFYzMjBBSUMyM19MSU5WT0wsCisJCSAgICAgVExWMzIwQUlDMjNfUklOVk9MLCA3LCAxLCAwKSwKKwlTT0NfRE9VQkxFX1JfVExWKCJMaW5lIElucHV0IFZvbHVtZSIsIFRMVjMyMEFJQzIzX0xJTlZPTCwKKwkJCSBUTFYzMjBBSUMyM19SSU5WT0wsIDAsIDMxLCAwLCBpbnB1dF9nYWluX3RsdiksCisJU09DX1NJTkdMRSgiTWljIElucHV0IFN3aXRjaCIsIFRMVjMyMEFJQzIzX0FOTEcsIDEsIDEsIDEpLAorCVNPQ19TSU5HTEUoIk1pYyBCb29zdGVyIFN3aXRjaCIsIFRMVjMyMEFJQzIzX0FOTEcsIDAsIDEsIDApLAorCVNPQ19UTFYzMjBBSUMyM19TSU5HTEVfVExWKCJTaWRldG9uZSBWb2x1bWUiLCBUTFYzMjBBSUMyM19BTkxHLAorCQkJCSAgNiwgNCwgMCwgc2lkZXRvbmVfdm9sX3RsdiksCisJU09DX0VOVU0oIlBsYXliYWNrIERlLWVtcGhhc2lzIiwgdGx2MzIwYWljMjNfZGVlbXBoKSwKK307CisKKy8qIGFkZCBub24gZGFwbSBjb250cm9scyAqLworc3RhdGljIGludCB0bHYzMjBhaWMyM19hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCisJaW50IGVyciwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX3NuZF9jb250cm9scyk7IGkrKykgeworCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKKwkJCQkgIHNuZF9zb2NfY25ldygmdGx2MzIwYWljMjNfc25kX2NvbnRyb2xzW2ldLAorCQkJCQkgICAgICAgY29kZWMsIE5VTEwpKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworCit9CisKKy8qIFBHQSBNaXhlciBjb250cm9scyBmb3IgTGluZSBhbmQgTWljIHN3aXRjaCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHRsdjMyMGFpYzIzX291dHB1dF9taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTGluZSBCeXBhc3MgU3dpdGNoIiwgVExWMzIwQUlDMjNfQU5MRywgMywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNaWMgU2lkZXRvbmUgU3dpdGNoIiwgVExWMzIwQUlDMjNfQU5MRywgNSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJQbGF5YmFjayBTd2l0Y2giLCBUTFYzMjBBSUMyM19BTkxHLCA0LCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB0bHYzMjBhaWMyM19kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fREFDKCJEQUMiLCAiUGxheWJhY2siLCBUTFYzMjBBSUMyM19QV1IsIDMsIDEpLAorCVNORF9TT0NfREFQTV9BREMoIkFEQyIsICJDYXB0dXJlIiwgVExWMzIwQUlDMjNfUFdSLCAyLCAxKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJDYXB0dXJlIFNvdXJjZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAmdGx2MzIwYWljMjNfcmVjX3NyY19tdXhfY29udHJvbHMpLAorCVNORF9TT0NfREFQTV9NSVhFUigiT3V0cHV0IE1peGVyIiwgVExWMzIwQUlDMjNfUFdSLCA0LCAxLAorCQkJICAgJnRsdjMyMGFpYzIzX291dHB1dF9taXhlcl9jb250cm9sc1swXSwKKwkJCSAgIEFSUkFZX1NJWkUodGx2MzIwYWljMjNfb3V0cHV0X21peGVyX2NvbnRyb2xzKSksCisJU05EX1NPQ19EQVBNX1BHQSgiTGluZSBJbnB1dCIsIFRMVjMyMEFJQzIzX1BXUiwgMCwgMSwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiTWljIElucHV0IiwgVExWMzIwQUlDMjNfUFdSLCAxLCAxLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9PVVRQVVQoIkxIUE9VVCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlJIUE9VVCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIkxPVVQiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJST1VUIiksCisKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkxMSU5FSU4iKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlJMSU5FSU4iKSwKKworCVNORF9TT0NfREFQTV9JTlBVVCgiTUlDSU4iKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uW10gPSB7CisJLyogT3V0cHV0IE1peGVyICovCisJeyJPdXRwdXQgTWl4ZXIiLCAiTGluZSBCeXBhc3MgU3dpdGNoIiwgIkxpbmUgSW5wdXQifSwKKwl7Ik91dHB1dCBNaXhlciIsICJQbGF5YmFjayBTd2l0Y2giLCAiREFDIn0sCisJeyJPdXRwdXQgTWl4ZXIiLCAiTWljIFNpZGV0b25lIFN3aXRjaCIsICJNaWMgSW5wdXQifSwKKworCS8qIE91dHB1dHMgKi8KKwl7IlJIUE9VVCIsIE5VTEwsICJPdXRwdXQgTWl4ZXIifSwKKwl7IkxIUE9VVCIsIE5VTEwsICJPdXRwdXQgTWl4ZXIifSwKKwl7IkxPVVQiLCBOVUxMLCAiT3V0cHV0IE1peGVyIn0sCisJeyJST1VUIiwgTlVMTCwgIk91dHB1dCBNaXhlciJ9LAorCisJLyogSW5wdXRzICovCisJeyJMaW5lIElucHV0IiwgIk5VTEwiLCAiTExJTkVJTiJ9LAorCXsiTGluZSBJbnB1dCIsICJOVUxMIiwgIlJMSU5FSU4ifSwKKworCXsiTWljIElucHV0IiwgIk5VTEwiLCAiTUlDSU4ifSwKKworCS8qIGlucHV0IG11eCAqLworCXsiQ2FwdHVyZSBTb3VyY2UiLCAiTGluZSIsICJMaW5lIElucHV0In0sCisJeyJDYXB0dXJlIFNvdXJjZSIsICJNaWMiLCAiTWljIElucHV0In0sCisJeyJBREMiLCBOVUxMLCAiQ2FwdHVyZSBTb3VyY2UifSwKKworfTsKKworLyogdGx2MzIwYWljMjMgcmVsYXRlZCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0bHYzMjBhaWMyM19zcmF0ZV9yZWdfaW5mbyBzcmF0ZV9yZWdfaW5mb1tdID0geworCXs0MDAwLCAweDA2LCAxfSwJLyogIDQwMDAgKi8KKwl7ODAwMCwgMHgwNiwgMH0sCS8qICA4MDAwICovCisJezE2MDAwLCAweDBDLCAxfSwJLyogMTYwMDAgKi8KKwl7MjIwNTAsIDB4MTEsIDF9LAkvKiAyMjA1MCAqLworCXsyNDAwMCwgMHgwMCwgMX0sCS8qIDI0MDAwICovCisJezMyMDAwLCAweDBDLCAwfSwJLyogMzIwMDAgKi8KKwl7NDQxMDAsIDB4MTEsIDB9LAkvKiA0NDEwMCAqLworCXs0ODAwMCwgMHgwMCwgMH0sCS8qIDQ4MDAwICovCisJezg4MjAwLCAweDFGLCAwfSwJLyogODgyMDAgKi8KKwl7OTYwMDAsIDB4MEUsIDB9LAkvKiA5NjAwMCAqLworfTsKKworc3RhdGljIGludCB0bHYzMjBhaWMyM19hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgdGx2MzIwYWljMjNfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh0bHYzMjBhaWMyM19kYXBtX3dpZGdldHMpKTsKKworCS8qIHNldCB1cCBhdWRpbyBwYXRoIGludGVyY29ubmVjdHMgKi8KKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhjb2RlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGx2MzIwYWljMjNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCXUxNiBpZmFjZV9yZWcsIGRhdGE7CisJdTggY291bnQgPSAwOworCisJaWZhY2VfcmVnID0KKwkgICAgdGx2MzIwYWljMjNfcmVhZF9yZWdfY2FjaGUoY29kZWMsCisJCQkJICAgICAgIFRMVjMyMEFJQzIzX0RJR1RfRk1UKSAmIH4oMHgwMyA8PCAyKTsKKworCS8qIFNlYXJjaCBmb3IgdGhlIHJpZ2h0IHNhbXBsZSByYXRlICovCisJLyogVmVyaWZ5IHdoYXQgaGFwcGVucyBpZiB0aGUgcmF0ZSBpcyBub3Qgc3VwcG9ydGVkCisJICogbm93IGl0IGdvZXMgdG8gOTZLaHogKi8KKwl3aGlsZSAoKHNyYXRlX3JlZ19pbmZvW2NvdW50XS5zYW1wbGVfcmF0ZSAhPSBwYXJhbXNfcmF0ZShwYXJhbXMpKSAmJgorCSAgICAgICAoY291bnQgPCBBUlJBWV9TSVpFKHNyYXRlX3JlZ19pbmZvKSkpIHsKKwkJY291bnQrKzsKKwl9CisKKwlkYXRhID0gIChzcmF0ZV9yZWdfaW5mb1tjb3VudF0uZGl2aWRlciA8PCBUTFYzMjBBSUMyM19DTEtJTl9TSElGVCkgfAorCQkoc3JhdGVfcmVnX2luZm9bY291bnRdLiBjb250cm9sIDw8IFRMVjMyMEFJQzIzX0JPU1JfU0hJRlQpIHwKKwkJVExWMzIwQUlDMjNfVVNCX0NMS19PTjsKKworCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19TUkFURSwgZGF0YSk7CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQlpZmFjZV9yZWcgfD0gKDB4MDEgPDwgMik7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWlmYWNlX3JlZyB8PSAoMHgwMiA8PCAyKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJaWZhY2VfcmVnIHw9ICgweDAzIDw8IDIpOworCQlicmVhazsKKwl9CisJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0RJR1RfRk1ULCBpZmFjZV9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGx2MzIwYWljMjNfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKworCS8qIHNldCBhY3RpdmUgKi8KKwl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfQUNUSVZFLCAweDAwMDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRsdjMyMGFpYzIzX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisKKwkvKiBkZWFjdGl2YXRlICovCisJaWYgKCFjb2RlYy0+YWN0aXZlKSB7CisJCXVkZWxheSg1MCk7CisJCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19BQ1RJVkUsIDB4MCk7CisJfQorfQorCitzdGF0aWMgaW50IHRsdjMyMGFpYzIzX211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdTE2IHJlZzsKKworCXJlZyA9IHRsdjMyMGFpYzIzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUTFYzMjBBSUMyM19ESUdUKTsKKwlpZiAobXV0ZSkKKwkJcmVnIHw9IFRMVjMyMEFJQzIzX0RBQ01fTVVURTsKKworCWVsc2UKKwkJcmVnICY9IH5UTFYzMjBBSUMyM19EQUNNX01VVEU7CisKKwl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfRElHVCwgcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRsdjMyMGFpYzIzX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQkJCSAgIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwl1MTYgaWZhY2VfcmVnOworCisJaWZhY2VfcmVnID0KKwkgICAgdGx2MzIwYWljMjNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRMVjMyMEFJQzIzX0RJR1RfRk1UKSAmICh+MHgwMyk7CisKKwkvKiBzZXQgbWFzdGVyL3NsYXZlIGF1ZGlvIGludGVyZmFjZSAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWlmYWNlX3JlZyB8PSBUTFYzMjBBSUMyM19NU19NQVNURVI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl9CisKKwkvKiBpbnRlcmZhY2UgZm9ybWF0ICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlpZmFjZV9yZWcgfD0gVExWMzIwQUlDMjNfRk9SX0kyUzsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJaWZhY2VfcmVnIHw9IFRMVjMyMEFJQzIzX0ZPUl9EU1A7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWlmYWNlX3JlZyB8PSBUTFYzMjBBSUMyM19GT1JfTEpVU1Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCisJfQorCisJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0RJR1RfRk1ULCBpZmFjZV9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGx2MzIwYWljMjNfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCQkJICAgICAgaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKworCXN3aXRjaCAoZnJlcSkgeworCWNhc2UgMTIwMDAwMDA6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB0bHYzMjBhaWMyM19zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJICAgICAgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJdTE2IHJlZyA9IHRsdjMyMGFpYzIzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUTFYzMjBBSUMyM19QV1IpICYgMHhmZjdmOworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCQkvKiB2cmVmL21pZCwgb3NjIG9uLCBkYWMgdW5tdXRlICovCisJCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19QV1IsIHJlZyk7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCS8qIGV2ZXJ5dGhpbmcgb2ZmIGV4Y2VwdCB2cmVmL3ZtaWQsICovCisJCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19QV1IsIHJlZyB8IDB4MDA0MCk7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJLyogZXZlcnl0aGluZyBvZmYsIGRhYyBtdXRlLCBpbmFjdGl2ZSAqLworCQl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfQUNUSVZFLCAweDApOworCQl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfUFdSLCAweGZmZmYpOworCQlicmVhazsKKwl9CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBBSUMyM19SQVRFUwlTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCisjZGVmaW5lIEFJQzIzX0ZPUk1BVFMJKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHwgXAorCQkJIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdHJ1Y3Qgc25kX3NvY19kYWkgdGx2MzIwYWljMjNfZGFpID0geworCS5uYW1lID0gInRsdjMyMGFpYzIzIiwKKwkucGxheWJhY2sgPSB7CisJCSAgICAgLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJICAgICAuY2hhbm5lbHNfbWluID0gMiwKKwkJICAgICAuY2hhbm5lbHNfbWF4ID0gMiwKKwkJICAgICAucmF0ZXMgPSBBSUMyM19SQVRFUywKKwkJICAgICAuZm9ybWF0cyA9IEFJQzIzX0ZPUk1BVFMsfSwKKwkuY2FwdHVyZSA9IHsKKwkJICAgIC5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJICAgIC5jaGFubmVsc19taW4gPSAyLAorCQkgICAgLmNoYW5uZWxzX21heCA9IDIsCisJCSAgICAucmF0ZXMgPSBBSUMyM19SQVRFUywKKwkJICAgIC5mb3JtYXRzID0gQUlDMjNfRk9STUFUUyx9LAorCS5vcHMgPSB7CisJCS5wcmVwYXJlID0gdGx2MzIwYWljMjNfcGNtX3ByZXBhcmUsCisJCS5od19wYXJhbXMgPSB0bHYzMjBhaWMyM19od19wYXJhbXMsCisJCS5zaHV0ZG93biA9IHRsdjMyMGFpYzIzX3NodXRkb3duLAorCQl9LAorCS5kYWlfb3BzID0geworCQkgICAgLmRpZ2l0YWxfbXV0ZSA9IHRsdjMyMGFpYzIzX211dGUsCisJCSAgICAuc2V0X2ZtdCA9IHRsdjMyMGFpYzIzX3NldF9kYWlfZm10LAorCQkgICAgLnNldF9zeXNjbGsgPSB0bHYzMjBhaWMyM19zZXRfZGFpX3N5c2NsaywKKwkJICAgIH0KK307CitFWFBPUlRfU1lNQk9MX0dQTCh0bHYzMjBhaWMyM19kYWkpOworCitzdGF0aWMgaW50IHRsdjMyMGFpYzIzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSAgICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCisJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0FDVElWRSwgMHgwKTsKKwl0bHYzMjBhaWMyM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0bHYzMjBhaWMyM19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJaW50IGk7CisJdTE2IHJlZzsKKworCS8qIFN5bmMgcmVnX2NhY2hlIHdpdGggdGhlIGhhcmR3YXJlICovCisJZm9yIChyZWcgPSAwOyByZWcgPCBBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX3JlZyk7IGkrKykgeworCQl1MTYgdmFsID0gdGx2MzIwYWljMjNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIHJlZyk7CisJCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCByZWcsIHZhbCk7CisJfQorCisJdGx2MzIwYWljMjNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKwl0bHYzMjBhaWMyM19zZXRfYmlhc19sZXZlbChjb2RlYywgY29kZWMtPnN1c3BlbmRfYmlhc19sZXZlbCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGluaXRpYWxpc2UgdGhlIEFJQzIzIGRyaXZlcgorICogcmVnaXN0ZXIgdGhlIG1peGVyIGFuZCBkc3AgaW50ZXJmYWNlcyB3aXRoIHRoZSBrZXJuZWwKKyAqLworc3RhdGljIGludCB0bHYzMjBhaWMyM19pbml0KHN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJaW50IHJldCA9IDA7CisJdTE2IHJlZzsKKworCWNvZGVjLT5uYW1lID0gInRsdjMyMGFpYzIzIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+cmVhZCA9IHRsdjMyMGFpYzIzX3JlYWRfcmVnX2NhY2hlOworCWNvZGVjLT53cml0ZSA9IHRsdjMyMGFpYzIzX3dyaXRlOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHRsdjMyMGFpYzIzX3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSAmdGx2MzIwYWljMjNfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX3JlZyk7CisJY29kZWMtPnJlZ19jYWNoZSA9CisJICAgIGttZW1kdXAodGx2MzIwYWljMjNfcmVnLCBzaXplb2YodGx2MzIwYWljMjNfcmVnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNvZGVjLT5yZWdfY2FjaGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBSZXNldCBjb2RlYyAqLworCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19SRVNFVCwgMCk7CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInRsdjMyMGFpYzIzOiBmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOworCQlnb3RvIHBjbV9lcnI7CisJfQorCisJLyogcG93ZXIgb24gZGV2aWNlICovCisJdGx2MzIwYWljMjNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19ESUdULCBUTFYzMjBBSUMyM19ERUVNUF80NEspOworCisJLyogVW5tdXRlIGlucHV0ICovCisJcmVnID0gdGx2MzIwYWljMjNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRMVjMyMEFJQzIzX0xJTlZPTCk7CisJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0xJTlZPTCwKKwkJCSAgKHJlZyAmICh+VExWMzIwQUlDMjNfTElNX01VVEVEKSkgfAorCQkJICAoVExWMzIwQUlDMjNfTFJTX0VOQUJMRUQpKTsKKworCXJlZyA9IHRsdjMyMGFpYzIzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUTFYzMjBBSUMyM19SSU5WT0wpOworCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19SSU5WT0wsCisJCQkgIChyZWcgJiAoflRMVjMyMEFJQzIzX0xJTV9NVVRFRCkpIHwKKwkJCSAgVExWMzIwQUlDMjNfTFJTX0VOQUJMRUQpOworCisJcmVnID0gdGx2MzIwYWljMjNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRMVjMyMEFJQzIzX0FOTEcpOworCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19BTkxHLAorCQkJIChyZWcpICYgKH5UTFYzMjBBSUMyM19CWVBBU1NfT04pICYKKwkJCSAoflRMVjMyMEFJQzIzX01JQ01fTVVURUQpKTsKKworCS8qIERlZmF1bHQgb3V0cHV0IHZvbHVtZSAqLworCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19MQ0hOVk9MLAorCQkJICBUTFYzMjBBSUMyM19ERUZBVUxUX09VVF9WT0wgJgorCQkJICBUTFYzMjBBSUMyM19PVVRfVk9MX01BU0spOworCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19SQ0hOVk9MLAorCQkJICBUTFYzMjBBSUMyM19ERUZBVUxUX09VVF9WT0wgJgorCQkJICBUTFYzMjBBSUMyM19PVVRfVk9MX01BU0spOworCisJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0FDVElWRSwgMHgxKTsKKworCXRsdjMyMGFpYzIzX2FkZF9jb250cm9scyhjb2RlYyk7CisJdGx2MzIwYWljMjNfYWRkX3dpZGdldHMoY29kZWMpOworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY2FyZChzb2NkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAidGx2MzIwYWljMjM6IGZhaWxlZCB0byByZWdpc3RlciBjYXJkXG4iKTsKKwkJZ290byBjYXJkX2VycjsKKwl9CisKKwlyZXR1cm4gcmV0OworCitjYXJkX2VycjoKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CitwY21fZXJyOgorCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOworCXJldHVybiByZXQ7Cit9CitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlICp0bHYzMjBhaWMyM19zb2NkZXY7CisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisvKgorICogSWYgdGhlIGkyYyBsYXllciB3ZXJlbid0IHNvIGJyb2tlbiwgd2UgY291bGQgcGFzcyB0aGlzIGtpbmQgb2YgZGF0YQorICogYXJvdW5kCisgKi8KK3N0YXRpYyBpbnQgdGx2MzIwYWljMjNfY29kZWNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaTJjX2lkKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gdGx2MzIwYWljMjNfc29jZGV2OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJaW50IHJldDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoaTJjLT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGNvZGVjKTsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworCisJcmV0ID0gdGx2MzIwYWljMjNfaW5pdChzb2NkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAidGx2MzIwYWljMjM6IGZhaWxlZCB0byBpbml0aWFsaXNlIEFJQzIzXG4iKTsKKwkJZ290byBlcnI7CisJfQorCXJldHVybiByZXQ7CisKK2VycjoKKwlrZnJlZShjb2RlYyk7CisJa2ZyZWUoaTJjKTsKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIGludCBfX2V4aXQgdGx2MzIwYWljMjNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQoreworCXB1dF9kZXZpY2UoJmkyYy0+ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRsdjMyMGFpYzIzX2lkW10gPSB7CisJeyJ0bHYzMjBhaWMyMyIsIDB9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdGx2MzIwYWljMjNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGx2MzIwYWljMjNfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJ0bHYzMjBhaWMyMyIsCisJCSAgIH0sCisJLnByb2JlID0gdGx2MzIwYWljMjNfY29kZWNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZXhpdF9wKHRsdjMyMGFpYzIzX2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IHRsdjMyMGFpYzIzX2lkLAorfTsKKworI2VuZGlmCisKK3N0YXRpYyBpbnQgdGx2MzIwYWljMjNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCXByaW50ayhLRVJOX0lORk8gIkFJQzIzIEF1ZGlvIENvZGVjICVzXG4iLCBBSUMyM19WRVJTSU9OKTsKKworCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY29kZWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzb2NkZXYtPmNvZGVjID0gY29kZWM7CisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCXRsdjMyMGFpYzIzX3NvY2RldiA9IHNvY2RldjsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpIGkyY19tYXN0ZXJfc2VuZDsKKwljb2RlYy0+aHdfcmVhZCA9IE5VTEw7CisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJnRsdjMyMGFpYzIzX2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhZGQgaTJjIGRyaXZlciIpOworI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0bHYzMjBhaWMyM19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisKKwlpZiAoY29kZWMtPmNvbnRyb2xfZGF0YSkKKwkJdGx2MzIwYWljMjNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2RyaXZlcigmdGx2MzIwYWljMjNfaTJjX2RyaXZlcik7CisjZW5kaWYKKwlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKKwlrZnJlZShjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3RsdjMyMGFpYzIzID0geworCS5wcm9iZSA9IHRsdjMyMGFpYzIzX3Byb2JlLAorCS5yZW1vdmUgPSB0bHYzMjBhaWMyM19yZW1vdmUsCisJLnN1c3BlbmQgPSB0bHYzMjBhaWMyM19zdXNwZW5kLAorCS5yZXN1bWUgPSB0bHYzMjBhaWMyM19yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl90bHYzMjBhaWMyMyk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBUTFYzMjBBSUMyMyBjb2RlYyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkFydW4gS1MgPGFydW5rc0BtaXN0cmFsc29sdXRpb25zLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuaCBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWQxZmFmCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQUxTQSBTb0MgVExWMzIwQUlDMjMgY29kZWMgZHJpdmVyCisgKgorICogQXV0aG9yOiAgICAgIEFydW4gS1MsIDxhcnVua3NAbWlzdHJhbHNvbHV0aW9ucy5jb20+CisgKiBDb3B5cmlnaHQ6ICAgKEMpIDIwMDggTWlzdHJhbCBTb2x1dGlvbnMgUHZ0IEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfVExWMzIwQUlDMjNfSAorI2RlZmluZSBfVExWMzIwQUlDMjNfSAorCisvKiBDb2RlYyBUTFYzMjBBSUMyMyAqLworI2RlZmluZSBUTFYzMjBBSUMyM19MSU5WT0wJCTB4MDAKKyNkZWZpbmUgVExWMzIwQUlDMjNfUklOVk9MCQkweDAxCisjZGVmaW5lIFRMVjMyMEFJQzIzX0xDSE5WT0wJCTB4MDIKKyNkZWZpbmUgVExWMzIwQUlDMjNfUkNITlZPTAkJMHgwMworI2RlZmluZSBUTFYzMjBBSUMyM19BTkxHCQkweDA0CisjZGVmaW5lIFRMVjMyMEFJQzIzX0RJR1QJCTB4MDUKKyNkZWZpbmUgVExWMzIwQUlDMjNfUFdSCQkJMHgwNgorI2RlZmluZSBUTFYzMjBBSUMyM19ESUdUX0ZNVAkJMHgwNworI2RlZmluZSBUTFYzMjBBSUMyM19TUkFURQkJMHgwOAorI2RlZmluZSBUTFYzMjBBSUMyM19BQ1RJVkUJCTB4MDkKKyNkZWZpbmUgVExWMzIwQUlDMjNfUkVTRVQJCTB4MEYKKworLyogTGVmdCAocmlnaHQpIGxpbmUgaW5wdXQgdm9sdW1lIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVExWMzIwQUlDMjNfTFJTX0VOQUJMRUQJCTB4MDEwMAorI2RlZmluZSBUTFYzMjBBSUMyM19MSU1fTVVURUQJCTB4MDA4MAorI2RlZmluZSBUTFYzMjBBSUMyM19MSVZfREVGQVVMVAkJMHgwMDE3CisjZGVmaW5lIFRMVjMyMEFJQzIzX0xJVl9NQVgJCTB4MDAxZgorI2RlZmluZSBUTFYzMjBBSUMyM19MSVZfTUlOCQkweDAwMDAKKworLyogTGVmdCAocmlnaHQpIGNoYW5uZWwgaGVhZHBob25lIHZvbHVtZSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFRMVjMyMEFJQzIzX0xaQ19PTgkJMHgwMDgwCisjZGVmaW5lIFRMVjMyMEFJQzIzX0xIVl9ERUZBVUxUCQkweDAwNzkKKyNkZWZpbmUgVExWMzIwQUlDMjNfTEhWX01BWAkJMHgwMDdmCisjZGVmaW5lIFRMVjMyMEFJQzIzX0xIVl9NSU4JCTB4MDAwMAorCisvKiBBbmFsb2cgYXVkaW8gcGF0aCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFRMVjMyMEFJQzIzX1NUQV9SRUcoeCkJCSgoeCk8PDYpCisjZGVmaW5lIFRMVjMyMEFJQzIzX1NURV9FTkFCTEVECQkweDAwMjAKKyNkZWZpbmUgVExWMzIwQUlDMjNfREFDX1NFTEVDVEVECTB4MDAxMAorI2RlZmluZSBUTFYzMjBBSUMyM19CWVBBU1NfT04JCTB4MDAwOAorI2RlZmluZSBUTFYzMjBBSUMyM19JTlNFTF9NSUMJCTB4MDAwNAorI2RlZmluZSBUTFYzMjBBSUMyM19NSUNNX01VVEVECQkweDAwMDIKKyNkZWZpbmUgVExWMzIwQUlDMjNfTUlDQl8yMERCCQkweDAwMDEKKworLyogRGlnaXRhbCBhdWRpbyBwYXRoIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVExWMzIwQUlDMjNfREFDTV9NVVRFCQkweDAwMDgKKyNkZWZpbmUgVExWMzIwQUlDMjNfREVFTVBfMzJLCQkweDAwMDIKKyNkZWZpbmUgVExWMzIwQUlDMjNfREVFTVBfNDRLCQkweDAwMDQKKyNkZWZpbmUgVExWMzIwQUlDMjNfREVFTVBfNDhLCQkweDAwMDYKKyNkZWZpbmUgVExWMzIwQUlDMjNfQURDSFBfT04JCTB4MDAwMQorCisvKiBQb3dlciBjb250cm9sIGRvd24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVExWMzIwQUlDMjNfREVWSUNFX1BXUl9PRkYgIAkweDAwODAKKyNkZWZpbmUgVExWMzIwQUlDMjNfQ0xLX09GRgkJMHgwMDQwCisjZGVmaW5lIFRMVjMyMEFJQzIzX09TQ19PRkYJCTB4MDAyMAorI2RlZmluZSBUTFYzMjBBSUMyM19PVVRfT0ZGCQkweDAwMTAKKyNkZWZpbmUgVExWMzIwQUlDMjNfREFDX09GRgkJMHgwMDA4CisjZGVmaW5lIFRMVjMyMEFJQzIzX0FEQ19PRkYJCTB4MDAwNAorI2RlZmluZSBUTFYzMjBBSUMyM19NSUNfT0ZGCQkweDAwMDIKKyNkZWZpbmUgVExWMzIwQUlDMjNfTElORV9PRkYJCTB4MDAwMQorCisvKiBEaWdpdGFsIGF1ZGlvIGludGVyZmFjZSByZWdpc3RlciAqLworI2RlZmluZSBUTFYzMjBBSUMyM19NU19NQVNURVIJCTB4MDA0MAorI2RlZmluZSBUTFYzMjBBSUMyM19MUlNXQVBfT04JCTB4MDAyMAorI2RlZmluZSBUTFYzMjBBSUMyM19MUlBfT04JCTB4MDAxMAorI2RlZmluZSBUTFYzMjBBSUMyM19JV0xfMTYJCTB4MDAwMAorI2RlZmluZSBUTFYzMjBBSUMyM19JV0xfMjAJCTB4MDAwNAorI2RlZmluZSBUTFYzMjBBSUMyM19JV0xfMjQJCTB4MDAwOAorI2RlZmluZSBUTFYzMjBBSUMyM19JV0xfMzIJCTB4MDAwQworI2RlZmluZSBUTFYzMjBBSUMyM19GT1JfSTJTCQkweDAwMDIKKyNkZWZpbmUgVExWMzIwQUlDMjNfRk9SX0RTUAkJMHgwMDAzCisjZGVmaW5lIFRMVjMyMEFJQzIzX0ZPUl9MSlVTVAkJMHgwMDAxCisKKy8qIFNhbXBsZSByYXRlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVExWMzIwQUlDMjNfQ0xLT1VUX0hBTEYJCTB4MDA4MAorI2RlZmluZSBUTFYzMjBBSUMyM19DTEtJTl9IQUxGCQkweDAwNDAKKyNkZWZpbmUgVExWMzIwQUlDMjNfQk9TUl8zODRmcwkJMHgwMDAyCS8qIEJPU1JfMjcyZnMgaW4gVVNCIG1vZGUgKi8KKyNkZWZpbmUgVExWMzIwQUlDMjNfVVNCX0NMS19PTgkJMHgwMDAxCisjZGVmaW5lIFRMVjMyMEFJQzIzX1NSX01BU0sgICAgICAgICAgICAgMHhmCisjZGVmaW5lIFRMVjMyMEFJQzIzX0NMS09VVF9TSElGVCAgICAgICAgNworI2RlZmluZSBUTFYzMjBBSUMyM19DTEtJTl9TSElGVCAgICAgICAgIDYKKyNkZWZpbmUgVExWMzIwQUlDMjNfU1JfU0hJRlQgICAgICAgICAgICAyCisjZGVmaW5lIFRMVjMyMEFJQzIzX0JPU1JfU0hJRlQgICAgICAgICAgMQorCisvKiBEaWdpdGFsIGludGVyZmFjZSByZWdpc3RlciAqLworI2RlZmluZSBUTFYzMjBBSUMyM19BQ1RfT04JCTB4MDAwMQorCisvKgorICogQVVESU8gcmVsYXRlZCBNQUNST1MKKyAqLworCisjZGVmaW5lIFRMVjMyMEFJQzIzX0RFRkFVTFRfT1VUX1ZPTAkweDcwCisjZGVmaW5lIFRMVjMyMEFJQzIzX0RFRkFVTFRfSU5fVk9MVU1FCTB4MTAKKworI2RlZmluZSBUTFYzMjBBSUMyM19PVVRfVk9MX01JTgkJVExWMzIwQUlDMjNfTEhWX01JTgorI2RlZmluZSBUTFYzMjBBSUMyM19PVVRfVk9MX01BWAkJVExWMzIwQUlDMjNfTEhWX01BWAorI2RlZmluZSBUTFYzMjBBSUMyM19PVVRfVk9fUkFOR0UJKFRMVjMyMEFJQzIzX09VVF9WT0xfTUFYIC0gXAorCQkJCQlUTFYzMjBBSUMyM19PVVRfVk9MX01JTikKKyNkZWZpbmUgVExWMzIwQUlDMjNfT1VUX1ZPTF9NQVNLCVRMVjMyMEFJQzIzX09VVF9WT0xfTUFYCisKKyNkZWZpbmUgVExWMzIwQUlDMjNfSU5fVk9MX01JTgkJVExWMzIwQUlDMjNfTElWX01JTgorI2RlZmluZSBUTFYzMjBBSUMyM19JTl9WT0xfTUFYCQlUTFYzMjBBSUMyM19MSVZfTUFYCisjZGVmaW5lIFRMVjMyMEFJQzIzX0lOX1ZPTF9SQU5HRQkoVExWMzIwQUlDMjNfSU5fVk9MX01BWCAtIFwKKwkJCQkJVExWMzIwQUlDMjNfSU5fVk9MX01JTikKKyNkZWZpbmUgVExWMzIwQUlDMjNfSU5fVk9MX01BU0sJCVRMVjMyMEFJQzIzX0lOX1ZPTF9NQVgKKworI2RlZmluZSBUTFYzMjBBSUMyM19TSURFVE9ORV9NQVNLCTB4MWMwCisjZGVmaW5lIFRMVjMyMEFJQzIzX1NJREVUT05FXzAJCTB4MTAwCisjZGVmaW5lIFRMVjMyMEFJQzIzX1NJREVUT05FXzYJCTB4MDAwCisjZGVmaW5lIFRMVjMyMEFJQzIzX1NJREVUT05FXzkJCTB4MDQwCisjZGVmaW5lIFRMVjMyMEFJQzIzX1NJREVUT05FXzEyCQkweDA4MAorI2RlZmluZSBUTFYzMjBBSUMyM19TSURFVE9ORV8xOAkJMHgwYzAKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB0bHYzMjBhaWMyM19kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfdGx2MzIwYWljMjM7CisKKyNlbmRpZiAvKiBfVExWMzIwQUlDMjNfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCmluZGV4IDU2NmE0MjcuLjA1MzM2ZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKQEAgLTQ4LDcgKzQ4LDYgQEAKIAogI2luY2x1ZGUgInRsdjMyMGFpYzN4LmgiCiAKLSNkZWZpbmUgQVVESU9fTkFNRSAiYWljM3giCiAjZGVmaW5lIEFJQzNYX1ZFUlNJT04gIjAuMiIKIAogLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCkBAIC05OTEsNyArOTkwLDcgQEAKIAkJCSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKIAogc3RydWN0IHNuZF9zb2NfZGFpIGFpYzN4X2RhaSA9IHsKLQkubmFtZSA9ICJhaWMzeCIsCisJLm5hbWUgPSAidGx2MzIwYWljM3giLAogCS5wbGF5YmFjayA9IHsKIAkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKIAkJLmNoYW5uZWxzX21pbiA9IDEsCkBAIC0xMDU1LDcgKzEwNTQsNyBAQAogCXN0cnVjdCBhaWMzeF9zZXR1cF9kYXRhICpzZXR1cCA9IHNvY2Rldi0+Y29kZWNfZGF0YTsKIAlpbnQgcmVnLCByZXQgPSAwOwogCi0JY29kZWMtPm5hbWUgPSAiYWljM3giOworCWNvZGVjLT5uYW1lID0gInRsdjMyMGFpYzN4IjsKIAljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAljb2RlYy0+cmVhZCA9IGFpYzN4X3JlYWRfcmVnX2NhY2hlOwogCWNvZGVjLT53cml0ZSA9IGFpYzN4X3dyaXRlOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYwppbmRleCBkMjA2ZDdmLi5hNjllZTcyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYwpAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgInVkYTEzODAuaCIKIAogI2RlZmluZSBVREExMzgwX1ZFUlNJT04gIjAuNiIKLSNkZWZpbmUgQVVESU9fTkFNRSAidWRhMTM4MCIKIAogLyoKICAqIHVkYTEzODAgcmVnaXN0ZXIgY2FjaGUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jCmluZGV4IDlhMzdjOGQuLmQ4Y2EyZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwNiBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgogICoKLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tPgorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CkBAIC0yNyw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJ3bTg1MTAuaCIKIAotI2RlZmluZSBBVURJT19OQU1FICJ3bTg1MTAiCiAjZGVmaW5lIFdNODUxMF9WRVJTSU9OICIwLjYiCiAKIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODUxMDsKQEAgLTU1LDYgKzU1LDkgQEAKIAkweDAwMDEsCiB9OwogCisjZGVmaW5lIFdNODUxMF9QT1dFUjFfQklBU0VOICAweDA4CisjZGVmaW5lIFdNODUxMF9QT1dFUjFfQlVGSU9FTiAweDEwCisKIC8qCiAgKiByZWFkIHdtODUxMCByZWdpc3RlciBjYWNoZQogICovCkBAIC0yMjQsOSArMjI3LDkgQEAKIFNORF9TT0NfREFQTV9QR0EoIlNwa1AgT3V0IiwgV004NTEwX1BPV0VSMywgNiwgMCwgTlVMTCwgMCksCiBTTkRfU09DX0RBUE1fUEdBKCJNb25vIE91dCIsIFdNODUxMF9QT1dFUjMsIDcsIDAsIE5VTEwsIDApLAogCi1TTkRfU09DX0RBUE1fUEdBKCJNaWMgUEdBIiwgV004NTEwX1BPV0VSMiwgMiwgMCwKLQkJICZ3bTg1MTBfbWljcGdhX2NvbnRyb2xzWzBdLAotCQkgQVJSQVlfU0laRSh3bTg1MTBfbWljcGdhX2NvbnRyb2xzKSksCitTTkRfU09DX0RBUE1fTUlYRVIoIk1pYyBQR0EiLCBXTTg1MTBfUE9XRVIyLCAyLCAwLAorCQkgICAmd204NTEwX21pY3BnYV9jb250cm9sc1swXSwKKwkJICAgQVJSQVlfU0laRSh3bTg1MTBfbWljcGdhX2NvbnRyb2xzKSksCiBTTkRfU09DX0RBUE1fTUlYRVIoIkJvb3N0IE1peGVyIiwgV004NTEwX1BPV0VSMiwgNCwgMCwKIAkmd204NTEwX2Jvb3N0X2NvbnRyb2xzWzBdLAogCUFSUkFZX1NJWkUod204NTEwX2Jvb3N0X2NvbnRyb2xzKSksCkBAIC01MjYsMjMgKzUyOSwzNSBAQAogc3RhdGljIGludCB3bTg1MTBfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogeworCXUxNiBwb3dlcjEgPSB3bTg1MTBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFdNODUxMF9QT1dFUjEpICYgfjB4MzsKIAogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKLQkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUE9XRVIxLCAweDFmZik7Ci0JCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BPV0VSMiwgMHgxZmYpOwotCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9QT1dFUjMsIDB4MWZmKTsKLQkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKLQljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlwb3dlcjEgfD0gMHgxOyAgLyogVk1JRCA1MGsgKi8KKwkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUE9XRVIxLCBwb3dlcjEpOwogCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCXBvd2VyMSB8PSBXTTg1MTBfUE9XRVIxX0JJQVNFTiB8IFdNODUxMF9QT1dFUjFfQlVGSU9FTjsKKworCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJLyogSW5pdGlhbCBjYXAgY2hhcmdlIGF0IFZNSUQgNWsgKi8KKwkJCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BPV0VSMSwgcG93ZXIxIHwgMHgzKTsKKwkJCW1kZWxheSgxMDApOworCQl9CisKKwkJcG93ZXIxIHw9IDB4MjsgIC8qIFZNSUQgNTAwayAqLworCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9QT1dFUjEsIHBvd2VyMSk7CisJCWJyZWFrOworCiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgotCQkvKiBldmVyeXRoaW5nIG9mZiwgZGFjIG11dGUsIGluYWN0aXZlICovCi0JCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BPV0VSMSwgMHgwKTsKLQkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUE9XRVIyLCAweDApOwotCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9QT1dFUjMsIDB4MCk7CisJCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BPV0VSMSwgMCk7CisJCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BPV0VSMiwgMCk7CisJCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BPV0VSMywgMCk7CiAJCWJyZWFrOwogCX0KKwogCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CiAJcmV0dXJuIDA7CiB9CkBAIC02NDAsNiArNjU1LDcgQEAKIAl9CiAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CiAJd204NTEwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAJd204NTEwX2FkZF9jb250cm9scyhjb2RlYyk7CiAJd204NTEwX2FkZF93aWRnZXRzKGNvZGVjKTsKQEAgLTc0Nyw2ICs3NjMsNjIgQEAKIH0KICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdtODUxMF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHdtODUxMF9zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwlpbnQgcmV0OworCisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IHNwaTsKKworCXJldCA9IHdtODUxMF9pbml0KHNvY2Rldik7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpc2UgV004NTEwXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHdtODUxMF9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bTg1MTBfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJ3bTg1MTAiLAorCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gd204NTEwX3NwaV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdtODUxMF9zcGlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgd204NTEwX3NwaV93cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwl1OCBtc2dbMl07CisKKwlpZiAobGVuIDw9IDApCisJCXJldHVybiAwOworCisJbXNnWzBdID0gZGF0YVswXTsKKwltc2dbMV0gPSBkYXRhWzFdOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KCZ0LCAwLCAoc2l6ZW9mIHQpKTsKKworCXQudHhfYnVmID0gJm1zZ1swXTsKKwl0LmxlbiA9IGxlbjsKKworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CisJc3BpX3N5bmMoc3BpLCAmbSk7CisKKwlyZXR1cm4gbGVuOworfQorI2VuZGlmIC8qIENPTkZJR19TUElfTUFTVEVSICovCisKIHN0YXRpYyBpbnQgd204NTEwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTc3Miw4ICs4NDQsMTQgQEAKIAkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwogCQlyZXQgPSB3bTg1MTBfYWRkX2kyY19kZXZpY2UocGRldiwgc2V0dXApOwogCX0KLSNlbHNlCi0JLyogQWRkIG90aGVyIGludGVyZmFjZXMgaGVyZSAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwlpZiAoc2V0dXAtPnNwaSkgeworCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCl3bTg1MTBfc3BpX3dyaXRlOworCQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ3bTg1MTBfc3BpX2RyaXZlcik7CisJCWlmIChyZXQgIT0gMCkKKwkJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIHNwaSBkcml2ZXIiKTsKKwl9CiAjZW5kaWYKIAogCWlmIChyZXQgIT0gMCkKQEAgLTc5Niw2ICs4NzQsOSBAQAogCWkyY191bnJlZ2lzdGVyX2RldmljZShjb2RlYy0+Y29udHJvbF9kYXRhKTsKIAlpMmNfZGVsX2RyaXZlcigmd204NTEwX2kyY19kcml2ZXIpOwogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndtODUxMF9zcGlfZHJpdmVyKTsKKyNlbmRpZgogCWtmcmVlKGNvZGVjKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1MTAuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmgKaW5kZXggYzUzNjgzOS4uYmRlZmNmNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1MTAuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5oCkBAIC05NCw2ICs5NCw3IEBACiAjZGVmaW5lIFdNODUxMF9NQ0xLRElWXzEyCSg3IDw8IDUpCiAKIHN0cnVjdCB3bTg1MTBfc2V0dXBfZGF0YSB7CisJaW50IHNwaTsKIAlpbnQgaTJjX2J1czsKIAl1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcmVzczsKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYwppbmRleCBkZjFmZmJlLi42MjdlYmZiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMKQEAgLTE4LDcgKzE4LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtMzYsNyArMzUsNiBAQAogCiAjaW5jbHVkZSAid204NTgwLmgiCiAKLSNkZWZpbmUgQVVESU9fTkFNRSAid204NTgwIgogI2RlZmluZSBXTTg1ODBfVkVSU0lPTiAiMC4xIgogCiBzdHJ1Y3QgcGxsX3N0YXRlIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCmluZGV4IDdiNjRkOWEuLjdmOGE3ZTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAid204NzMxLmgiCiAKLSNkZWZpbmUgQVVESU9fTkFNRSAid204NzMxIgogI2RlZmluZSBXTTg3MzFfVkVSU0lPTiAiMC4xMyIKIAogc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NzMxOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMKaW5kZXggNDg5MmUzOS4uOWI3Mjk2ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRlICJ3bTg3NTAuaCIKIAotI2RlZmluZSBBVURJT19OQU1FICJXTTg3NTAiCiAjZGVmaW5lIFdNODc1MF9WRVJTSU9OICIwLjEyIgogCiAvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCmluZGV4IDhjNGRmNDQuLmQ0MjZlYWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwpAQCAtMiw4ICsyLDcgQEAKICAqIHdtODc1My5jICAtLSAgV004NzUzIEFMU0EgU29jIEF1ZGlvIGRyaXZlcgogICoKICAqIENvcHlyaWdodCAyMDAzIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QKLSAqICAgICAgICAgbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC00MCw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KQEAgLTUxLDcgKzUxLDYgQEAKIAogI2luY2x1ZGUgIndtODc1My5oIgogCi0jZGVmaW5lIEFVRElPX05BTUUgIndtODc1MyIKICNkZWZpbmUgV004NzUzX1ZFUlNJT04gIjAuMTYiCiAKIHN0YXRpYyBpbnQgY2Fwc19jaGFyZ2UgPSAyMDAwOwpAQCAtMTcxOSw2ICsxNzE4LDYzIEBACiB9CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg3NTNfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg3NTNfc29jZGV2OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJaW50IHJldDsKKworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CisKKwlyZXQgPSB3bTg3NTNfaW5pdChzb2NkZXYpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXNlIFdNODc1M1xuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg3NTNfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgd204NzUzX3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAid204NzUzIiwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHdtODc1M19zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bTg3NTNfc3BpX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IHdtODc1M19zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJdTggbXNnWzJdOworCisJaWYgKGxlbiA8PSAwKQorCQlyZXR1cm4gMDsKKworCW1zZ1swXSA9IGRhdGFbMF07CisJbXNnWzFdID0gZGF0YVsxXTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCgmdCwgMCwgKHNpemVvZiB0KSk7CisKKwl0LnR4X2J1ZiA9ICZtc2dbMF07CisJdC5sZW4gPSBsZW47CisKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOworCXNwaV9zeW5jKHNwaSwgJm0pOworCisJcmV0dXJuIGxlbjsKK30KKyNlbmRpZgorCisKIHN0YXRpYyBpbnQgd204NzUzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTE3NTMsOCArMTgwOSwxNCBAQAogCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CiAJCXJldCA9IHdtODc1M19hZGRfaTJjX2RldmljZShwZGV2LCBzZXR1cCk7CiAJfQotI2Vsc2UKLQkJLyogQWRkIG90aGVyIGludGVyZmFjZXMgaGVyZSAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX01BU1RFUikKKwlpZiAoc2V0dXAtPnNwaSkgeworCQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdCl3bTg3NTNfc3BpX3dyaXRlOworCQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ3bTg3NTNfc3BpX2RyaXZlcik7CisJCWlmIChyZXQgIT0gMCkKKwkJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIHNwaSBkcml2ZXIiKTsKKwl9CiAjZW5kaWYKIAogCWlmIChyZXQgIT0gMCkgewpAQCAtMTc5OCw2ICsxODYwLDkgQEAKIAlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY29kZWMtPmNvbnRyb2xfZGF0YSk7CiAJaTJjX2RlbF9kcml2ZXIoJndtODc1M19pMmNfZHJpdmVyKTsKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bTg3NTNfc3BpX2RyaXZlcik7CisjZW5kaWYKIAlrZnJlZShjb2RlYy0+cHJpdmF0ZV9kYXRhKTsKIAlrZnJlZShjb2RlYyk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5oCmluZGV4IDdkZWZkZTAuLmY1NTcwNGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuaApAQCAtMiw4ICsyLDcgQEAKICAqIHdtODc1My5oICAtLSAgYXVkaW8gZHJpdmVyIGZvciBXTTg3NTMKICAqCiAgKiBDb3B5cmlnaHQgMjAwMyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCi0gKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtNzksNiArNzgsNyBAQAogI2RlZmluZSBXTTg3NTNfQURDVEwyCQkweDNmCiAKIHN0cnVjdCB3bTg3NTNfc2V0dXBfZGF0YSB7CisJaW50IHNwaTsKIAlpbnQgaTJjX2J1czsKIAl1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcmVzczsKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYwppbmRleCAwYjhjNmQzLi4zYjMyNmM5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMKQEAgLTE4LDcgKzE4LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKaW5kZXggYTNmNTRlYy4uY2U0MGQ3OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCkBAIC02NTMsMTQgKzY1MywxNCBAQAogCiAvKiBJbnB1dCBQR0FzIC0gTm8gVExWIHNpbmNlIHRoZSBzY2FsZSBkZXBlbmRzIG9uIFBHQSBtb2RlICovCiBTT0NfU0lOR0xFKCJMZWZ0IElucHV0IFBHQSBTd2l0Y2giLCBXTTg5MDNfQU5BTE9HVUVfTEVGVF9JTlBVVF8wLAotCSAgIDcsIDEsIDApLAorCSAgIDcsIDEsIDEpLAogU09DX1NJTkdMRSgiTGVmdCBJbnB1dCBQR0EgVm9sdW1lIiwgV004OTAzX0FOQUxPR1VFX0xFRlRfSU5QVVRfMCwKIAkgICAwLCAzMSwgMCksCiBTT0NfU0lOR0xFKCJMZWZ0IElucHV0IFBHQSBDb21tb24gTW9kZSBTd2l0Y2giLCBXTTg5MDNfQU5BTE9HVUVfTEVGVF9JTlBVVF8xLAogCSAgIDYsIDEsIDApLAogCiBTT0NfU0lOR0xFKCJSaWdodCBJbnB1dCBQR0EgU3dpdGNoIiwgV004OTAzX0FOQUxPR1VFX1JJR0hUX0lOUFVUXzAsCi0JICAgNywgMSwgMCksCisJICAgNywgMSwgMSksCiBTT0NfU0lOR0xFKCJSaWdodCBJbnB1dCBQR0EgVm9sdW1lIiwgV004OTAzX0FOQUxPR1VFX1JJR0hUX0lOUFVUXzAsCiAJICAgMCwgMzEsIDApLAogU09DX1NJTkdMRSgiUmlnaHQgSW5wdXQgUEdBIENvbW1vbiBNb2RlIFN3aXRjaCIsIFdNODkwM19BTkFMT0dVRV9SSUdIVF9JTlBVVF8xLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NzEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTcxLmMKaW5kZXggOTc0YTRjZC4uZjQxYTU3OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NzEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3MS5jCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRlICJ3bTg5NzEuaCIKIAotI2RlZmluZSBBVURJT19OQU1FICJ3bTg5NzEiCiAjZGVmaW5lIFdNODk3MV9WRVJTSU9OICIwLjkiCiAKICNkZWZpbmUJV004OTcxX1JFR19DT1VOVAkJNDMKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCmluZGV4IDYzNDEwZDcuLjU3MmQyMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYwpAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAid204OTkwLmgiCiAKLSNkZWZpbmUgQVVESU9fTkFNRSAid204OTkwIgogI2RlZmluZSBXTTg5OTBfVkVSU0lPTiAiMC4yIgogCiAvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCmluZGV4IDJmMWM5MWIuLmZmYjQ3MWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYwpAQCAtMiw4ICsyLDcgQEAKICAqIHdtOTcxMi5jICAtLSAgQUxTQSBTb2MgV005NzEyIGNvZGVjIHN1cHBvcnQKICAqCiAgKiBDb3B5cmlnaHQgMjAwNiBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCi0gKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKaW5kZXggNDQxZDA1OC4uYWJhNDAyYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCkBAIC0yLDggKzIsNyBAQAogICogd205NzEzLmMgIC0tICBBTFNBIFNvYyBXTTk3MTMgY29kZWMgc3VwcG9ydAogICoKICAqIENvcHlyaWdodCAyMDA2IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QKLSAqICAgICAgICAgbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9LY29uZmlnIGIvc291bmQvc29jL29tYXAvS2NvbmZpZwppbmRleCBhZWEyN2U3Li44Yjc3NjZiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKQEAgLTEzLDMgKzEzLDExIEBACiAJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDM1gKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIE5va2lhIE44MTAuCisKK2NvbmZpZyBTTkRfT01BUF9TT0NfT1NLNTkxMgorCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3Igb21hcCBvc2s1OTEyIgorCWRlcGVuZHMgb24gU05EX09NQVBfU09DICYmIE1BQ0hfT01BUF9PU0sKKwlzZWxlY3QgU05EX09NQVBfU09DX01DQlNQCisJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDMjMKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIG9zazU5MTIuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCmluZGV4IGQ4ZDhkNTguLmUwOWQxZjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9vbWFwL01ha2VmaWxlCkBAIC03LDUgKzcsNyBAQAogCiAjIE9NQVAgTWFjaGluZSBTdXBwb3J0CiBzbmQtc29jLW44MTAtb2JqcyA6PSBuODEwLm8KK3NuZC1zb2Mtb3NrNTkxMi1vYmpzIDo9IG9zazU5MTIubwogCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DX044MTApICs9IHNuZC1zb2MtbjgxMC5vCitvYmotJChDT05GSUdfU05EX09NQVBfU09DX09TSzU5MTIpICs9IHNuZC1zb2Mtb3NrNTkxMi5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9uODEwLmMgYi9zb3VuZC9zb2Mvb21hcC9uODEwLmMKaW5kZXggZDE2NmI2Yi4uZmFlM2FkMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvbjgxMC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL244MTAuYwpAQCAtMjQ3LDkgKzI0Nyw5IEBACiAJaW50IGksIGVycjsKIAogCS8qIE5vdCBjb25uZWN0ZWQgKi8KLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJNT05PX0xPVVQiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIUExDT00iKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIUFJDT00iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTU9OT19MT1VUIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhQTENPTSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIUFJDT00iKTsKIAogCS8qIEFkZCBOODEwIHNwZWNpZmljIGNvbnRyb2xzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWljMzNfbjgxMF9jb250cm9scyk7IGkrKykgewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCmluZGV4IDM1MzEwZTEuLjg1M2IzM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKQEAgLTQzLDYgKzQzLDcgQEAKIHN0cnVjdCBvbWFwX21jYnNwX2RhdGEgewogCXVuc2lnbmVkIGludAkJCWJ1c19pZDsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9yZWdfY2ZnCXJlZ3M7CisJdW5zaWduZWQgaW50CQkJZm10OwogCS8qCiAJICogRmxhZ3MgaW5kaWNhdGluZyBpcyB0aGUgYnVzIGFscmVhZHkgYWN0aXZhdGVkIGFuZCBjb25maWd1cmVkIGJ5CiAJICogYW5vdGhlciBzdWJzdHJlYW0KQEAgLTU5LDEyICs2MCw3IEBACiAgKiBTdHJlYW0gRE1BIHBhcmFtZXRlcnMuIERNQSByZXF1ZXN0IGxpbmUgYW5kIHBvcnQgYWRkcmVzcyBhcmUgc2V0IHJ1bnRpbWUKICAqIHNpbmNlIHRoZXkgYXJlIGRpZmZlcmVudCBiZXR3ZWVuIE9NQVAxIGFuZCBsYXRlciBPTUFQcwogICovCi1zdGF0aWMgc3RydWN0IG9tYXBfcGNtX2RtYV9kYXRhIG9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbTlVNX0xJTktTXVsyXSA9IHsKLXsKLQl7IC5uYW1lCQk9ICJJMlMgUENNIFN0ZXJlbyBvdXQiLCB9LAotCXsgLm5hbWUJCT0gIkkyUyBQQ00gU3RlcmVvIGluIiwgfSwKLX0sCi19Oworc3RhdGljIHN0cnVjdCBvbWFwX3BjbV9kbWFfZGF0YSBvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW05VTV9MSU5LU11bMl07CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQogc3RhdGljIGNvbnN0IGludCBvbWFwMV9kbWFfcmVxc1tdWzJdID0gewpAQCAtODQsMTEgKzgwLDIyIEBACiBzdGF0aWMgY29uc3QgaW50IG9tYXAxX2RtYV9yZXFzW11bMl0gPSB7fTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9tYXAxX21jYnNwX3BvcnRbXVsyXSA9IHt9OwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKLXN0YXRpYyBjb25zdCBpbnQgb21hcDI0MjBfZG1hX3JlcXNbXVsyXSA9IHsKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCitzdGF0aWMgY29uc3QgaW50IG9tYXAyNHh4X2RtYV9yZXFzW11bMl0gPSB7CiAJeyBPTUFQMjRYWF9ETUFfTUNCU1AxX1RYLCBPTUFQMjRYWF9ETUFfTUNCU1AxX1JYIH0sCiAJeyBPTUFQMjRYWF9ETUFfTUNCU1AyX1RYLCBPTUFQMjRYWF9ETUFfTUNCU1AyX1JYIH0sCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKwl7IE9NQVAyNFhYX0RNQV9NQ0JTUDNfVFgsIE9NQVAyNFhYX0RNQV9NQ0JTUDNfUlggfSwKKwl7IE9NQVAyNFhYX0RNQV9NQ0JTUDRfVFgsIE9NQVAyNFhYX0RNQV9NQ0JTUDRfUlggfSwKKwl7IE9NQVAyNFhYX0RNQV9NQ0JTUDVfVFgsIE9NQVAyNFhYX0RNQV9NQ0JTUDVfUlggfSwKKyNlbmRpZgogfTsKKyNlbHNlCitzdGF0aWMgY29uc3QgaW50IG9tYXAyNHh4X2RtYV9yZXFzW11bMl0gPSB7fTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9tYXAyNDIwX21jYnNwX3BvcnRbXVsyXSA9IHsKIAl7IE9NQVAyNFhYX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSMSwKIAkgIE9NQVAyNFhYX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSMSB9LApAQCAtOTYsMTAgKzEwMyw0MyBAQAogCSAgT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIxIH0sCiB9OwogI2Vsc2UKLXN0YXRpYyBjb25zdCBpbnQgb21hcDI0MjBfZG1hX3JlcXNbXVsyXSA9IHt9Owogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgb21hcDI0MjBfbWNic3BfcG9ydFtdWzJdID0ge307CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBvbWFwMjQzMF9tY2JzcF9wb3J0W11bMl0gPSB7CisJeyBPTUFQMjRYWF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKKwkgIE9NQVAyNFhYX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCisJeyBPTUFQMjRYWF9NQ0JTUDJfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKKwkgIE9NQVAyNFhYX01DQlNQMl9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCisJeyBPTUFQMjQzMF9NQ0JTUDNfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKKwkgIE9NQVAyNDMwX01DQlNQM19CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCisJeyBPTUFQMjQzMF9NQ0JTUDRfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKKwkgIE9NQVAyNDMwX01DQlNQNF9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCisJeyBPTUFQMjQzMF9NQ0JTUDVfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKKwkgIE9NQVAyNDMwX01DQlNQNV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCit9OworI2Vsc2UKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9tYXAyNDMwX21jYnNwX3BvcnRbXVsyXSA9IHt9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgb21hcDM0eHhfbWNic3BfcG9ydFtdWzJdID0geworCXsgT01BUDM0WFhfTUNCU1AxX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCisJICBPTUFQMzRYWF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAorCXsgT01BUDM0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCisJICBPTUFQMzRYWF9NQ0JTUDJfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAorCXsgT01BUDM0WFhfTUNCU1AzX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCisJICBPTUFQMzRYWF9NQ0JTUDNfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAorCXsgT01BUDM0WFhfTUNCU1A0X0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCisJICBPTUFQMzRYWF9NQ0JTUDRfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAorCXsgT01BUDM0WFhfTUNCU1A1X0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCisJICBPTUFQMzRYWF9NQ0JTUDVfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAorfTsKKyNlbHNlCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBvbWFwMzR4eF9tY2JzcF9wb3J0W11bMl0gPSB7fTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IG9tYXBfbWNic3BfZGFpX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwpAQCAtMTYxLDIwICsyMDEsMjYgQEAKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9kYXRhICptY2JzcF9kYXRhID0gdG9fbWNic3AoY3B1X2RhaS0+cHJpdmF0ZV9kYXRhKTsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9yZWdfY2ZnICpyZWdzID0gJm1jYnNwX2RhdGEtPnJlZ3M7CiAJaW50IGRtYSwgYnVzX2lkID0gbWNic3BfZGF0YS0+YnVzX2lkLCBpZCA9IGNwdV9kYWktPmlkOworCWludCB3bGVuOwogCXVuc2lnbmVkIGxvbmcgcG9ydDsKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgewogCQlkbWEgPSBvbWFwMV9kbWFfcmVxc1tidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAkJcG9ydCA9IG9tYXAxX21jYnNwX3BvcnRbYnVzX2lkXVtzdWJzdHJlYW0tPnN0cmVhbV07CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0MjAoKSkgewotCQlkbWEgPSBvbWFwMjQyMF9kbWFfcmVxc1tidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKKwkJZG1hID0gb21hcDI0eHhfZG1hX3JlcXNbYnVzX2lkXVtzdWJzdHJlYW0tPnN0cmVhbV07CiAJCXBvcnQgPSBvbWFwMjQyMF9tY2JzcF9wb3J0W2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKKwkJZG1hID0gb21hcDI0eHhfZG1hX3JlcXNbYnVzX2lkXVtzdWJzdHJlYW0tPnN0cmVhbV07CisJCXBvcnQgPSBvbWFwMjQzMF9tY2JzcF9wb3J0W2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNDN4KCkpIHsKKwkJZG1hID0gb21hcDI0eHhfZG1hX3JlcXNbYnVzX2lkXVtzdWJzdHJlYW0tPnN0cmVhbV07CisJCXBvcnQgPSBvbWFwMzR4eF9tY2JzcF9wb3J0W2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwogCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFRPRE86IEFkZCBzdXBwb3J0IGZvciAyNDMwIGFuZCAzNDMwCi0JCSAqLwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisJb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dLm5hbWUgPQorCQlzdWJzdHJlYW0tPnN0cmVhbSA/ICJBdWRpbyBDYXB0dXJlIiA6ICJBdWRpbyBQbGF5YmFjayI7CiAJb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dLmRtYV9yZXEgPSBkbWE7CiAJb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dLnBvcnRfYWRkciA9IHBvcnQ7CiAJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwpAQCAtMjAwLDE5ICsyNDYsMjkgQEAKIAlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CiAJCS8qIFNldCB3b3JkIGxlbmd0aHMgKi8KKwkJd2xlbiA9IDE2OwogCQlyZWdzLT5yY3IyCXw9IFJXRExFTjIoT01BUF9NQ0JTUF9XT1JEXzE2KTsKIAkJcmVncy0+cmNyMQl8PSBSV0RMRU4xKE9NQVBfTUNCU1BfV09SRF8xNik7CiAJCXJlZ3MtPnhjcjIJfD0gWFdETEVOMihPTUFQX01DQlNQX1dPUkRfMTYpOwogCQlyZWdzLT54Y3IxCXw9IFhXRExFTjEoT01BUF9NQ0JTUF9XT1JEXzE2KTsKLQkJLyogU2V0IEZTIHBlcmlvZCBhbmQgbGVuZ3RoIGluIHRlcm1zIG9mIGJpdCBjbG9jayBwZXJpb2RzICovCi0JCXJlZ3MtPnNyZ3IyCXw9IEZQRVIoMTYgKiAyIC0gMSk7Ci0JCXJlZ3MtPnNyZ3IxCXw9IEZXSUQoMTYgLSAxKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogVW5zdXBwb3J0ZWQgUENNIGZvcm1hdCAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBTZXQgRlMgcGVyaW9kIGFuZCBsZW5ndGggaW4gdGVybXMgb2YgYml0IGNsb2NrIHBlcmlvZHMgKi8KKwlzd2l0Y2ggKG1jYnNwX2RhdGEtPmZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCXJlZ3MtPnNyZ3IyCXw9IEZQRVIod2xlbiAqIDIgLSAxKTsKKwkJcmVncy0+c3JncjEJfD0gRldJRCh3bGVuIC0gMSk7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCXJlZ3MtPnNyZ3IyCXw9IEZQRVIod2xlbiAqIDIgLSAxKTsKKwkJcmVncy0+c3JncjEJfD0gRldJRCgwKTsKKwkJYnJlYWs7CisJfQorCiAJb21hcF9tY2JzcF9jb25maWcoYnVzX2lkLCAmbWNic3BfZGF0YS0+cmVncyk7CiAJbWNic3BfZGF0YS0+Y29uZmlndXJlZCA9IDE7CiAKQEAgLTIyOCwxMCArMjg0LDEyIEBACiB7CiAJc3RydWN0IG9tYXBfbWNic3BfZGF0YSAqbWNic3BfZGF0YSA9IHRvX21jYnNwKGNwdV9kYWktPnByaXZhdGVfZGF0YSk7CiAJc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyAqcmVncyA9ICZtY2JzcF9kYXRhLT5yZWdzOworCXVuc2lnbmVkIGludCB0ZW1wX2ZtdCA9IGZtdDsKIAogCWlmIChtY2JzcF9kYXRhLT5jb25maWd1cmVkKQogCQlyZXR1cm4gMDsKIAorCW1jYnNwX2RhdGEtPmZtdCA9IGZtdDsKIAltZW1zZXQocmVncywgMCwgc2l6ZW9mKCpyZWdzKSk7CiAJLyogR2VuZXJpYyBNY0JTUCByZWdpc3RlciBzZXR0aW5ncyAqLwogCXJlZ3MtPnNwY3IyCXw9IFhJTlRNKDMpIHwgRlJFRTsKQEAgLTI0NSw2ICszMDMsMTMgQEAKIAkJcmVncy0+cmNyMgl8PSBSREFURExZKDEpOwogCQlyZWdzLT54Y3IyCXw9IFhEQVRETFkoMSk7CiAJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCS8qIDAtYml0IGRhdGEgZGVsYXkgKi8KKwkJcmVncy0+cmNyMiAgICAgIHw9IFJEQVRETFkoMCk7CisJCXJlZ3MtPnhjcjIgICAgICB8PSBYREFURExZKDApOworCQkvKiBJbnZlcnQgYml0IGNsb2NrIGFuZCBGUyBwb2xhcml0eSBjb25maWd1cmF0aW9uIGZvciBEU1BfQSAqLworCQl0ZW1wX2ZtdCBePSBTTkRfU09DX0RBSUZNVF9JQl9JRjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogVW5zdXBwb3J0ZWQgZGF0YSBmb3JtYXQgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNjcsNyArMzMyLDcgQEAKIAl9CiAKIAkvKiBTZXQgYml0IGNsb2NrIChDTEtYL0NMS1IpIGFuZCBGUyBwb2xhcml0aWVzICovCi0Jc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCXN3aXRjaCAodGVtcF9mbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CiAJCS8qCiAJCSAqIE5vcm1hbCBCQ0xLICsgRlMuCkBAIC0zMTAsNyArMzc1LDcgQEAKIAkJCQkgICAgICAgaW50IGNsa19pZCkKIHsKIAlpbnQgc2VsX2JpdDsKLQl1MTYgcmVnOworCXUxNiByZWcsIHJlZ19kZXZjb25mMSA9IE9NQVAyNDNYX0NPTlRST0xfREVWQ09ORjE7CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKIAkJLyogT01BUDEncyBjYW4gdXNlIG9ubHkgZXh0ZXJuYWwgc291cmNlIGNsb2NrICovCkBAIC0zMjAsNiArMzg1LDEyIEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoY3B1X2lzX29tYXAyNDIwKCkgJiYgbWNic3BfZGF0YS0+YnVzX2lkID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY3B1X2lzX29tYXAzNDN4KCkpCisJCXJlZ19kZXZjb25mMSA9IE9NQVAzNDNYX0NPTlRST0xfREVWQ09ORjE7CisKIAlzd2l0Y2ggKG1jYnNwX2RhdGEtPmJ1c19pZCkgewogCWNhc2UgMDoKIAkJcmVnID0gT01BUDJfQ09OVFJPTF9ERVZDT05GMDsKQEAgLTMyOSwyMCArNDAwLDI2IEBACiAJCXJlZyA9IE9NQVAyX0NPTlRST0xfREVWQ09ORjA7CiAJCXNlbF9iaXQgPSA2OwogCQlicmVhazsKLQkvKiBUT0RPOiBTdXBwb3J0IGZvciBwb3J0cyAzIC0gNSBpbiBPTUFQMjQzMCBhbmQgT01BUDM0eHggKi8KKwljYXNlIDI6CisJCXJlZyA9IHJlZ19kZXZjb25mMTsKKwkJc2VsX2JpdCA9IDA7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmVnID0gcmVnX2RldmNvbmYxOworCQlzZWxfYml0ID0gMjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlyZWcgPSByZWdfZGV2Y29uZjE7CisJCXNlbF9iaXQgPSA0OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKLQkJaWYgKGNsa19pZCA9PSBPTUFQX01DQlNQX1NZU0NMS19DTEtTX0ZDTEspIHsKLQkJCW9tYXBfY3RybF93cml0ZWwob21hcF9jdHJsX3JlYWRsKHJlZykgJgotCQkJCQkgfigxIDw8IHNlbF9iaXQpLCByZWcpOwotCQl9IGVsc2UgewotCQkJb21hcF9jdHJsX3dyaXRlbChvbWFwX2N0cmxfcmVhZGwocmVnKSB8Ci0JCQkJCSAoMSA8PCBzZWxfYml0KSwgcmVnKTsKLQkJfQotCX0KKwlpZiAoY2xrX2lkID09IE9NQVBfTUNCU1BfU1lTQ0xLX0NMS1NfRkNMSykKKwkJb21hcF9jdHJsX3dyaXRlbChvbWFwX2N0cmxfcmVhZGwocmVnKSAmIH4oMSA8PCBzZWxfYml0KSwgcmVnKTsKKwllbHNlCisJCW9tYXBfY3RybF93cml0ZWwob21hcF9jdHJsX3JlYWRsKHJlZykgfCAoMSA8PCBzZWxfYml0KSwgcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzc2LDM3ICs0NTMsNDkgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdHJ1Y3Qgc25kX3NvY19kYWkgb21hcF9tY2JzcF9kYWlbTlVNX0xJTktTXSA9IHsKLXsKLQkubmFtZSA9ICJvbWFwLW1jYnNwLWRhaSIsCi0JLmlkID0gMCwKLQkudHlwZSA9IFNORF9TT0NfREFJX0kyUywKLQkucGxheWJhY2sgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAyLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gT01BUF9NQ0JTUF9SQVRFUywKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKLQl9LAotCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMiwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5yYXRlcyA9IE9NQVBfTUNCU1BfUkFURVMsCi0JCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCi0JfSwKLQkub3BzID0gewotCQkuc3RhcnR1cCA9IG9tYXBfbWNic3BfZGFpX3N0YXJ0dXAsCi0JCS5zaHV0ZG93biA9IG9tYXBfbWNic3BfZGFpX3NodXRkb3duLAotCQkudHJpZ2dlciA9IG9tYXBfbWNic3BfZGFpX3RyaWdnZXIsCi0JCS5od19wYXJhbXMgPSBvbWFwX21jYnNwX2RhaV9od19wYXJhbXMsCi0JfSwKLQkuZGFpX29wcyA9IHsKLQkJLnNldF9mbXQgPSBvbWFwX21jYnNwX2RhaV9zZXRfZGFpX2ZtdCwKLQkJLnNldF9jbGtkaXYgPSBvbWFwX21jYnNwX2RhaV9zZXRfY2xrZGl2LAotCQkuc2V0X3N5c2NsayA9IG9tYXBfbWNic3BfZGFpX3NldF9kYWlfc3lzY2xrLAotCX0sCi0JLnByaXZhdGVfZGF0YSA9ICZtY2JzcF9kYXRhWzBdLmJ1c19pZCwKLX0sCisjZGVmaW5lIE9NQVBfTUNCU1BfREFJX0JVSUxERVIobGlua19pZCkJCQkJXAorewkJCQkJCQkJXAorCS5uYW1lID0gIm9tYXAtbWNic3AtZGFpLShsaW5rX2lkKSIsCQkJXAorCS5pZCA9IChsaW5rX2lkKSwJCQkJCVwKKwkudHlwZSA9IFNORF9TT0NfREFJX0kyUywJCQkJXAorCS5wbGF5YmFjayA9IHsJCQkJCQlcCisJCS5jaGFubmVsc19taW4gPSAyLAkJCQlcCisJCS5jaGFubmVsc19tYXggPSAyLAkJCQlcCisJCS5yYXRlcyA9IE9NQVBfTUNCU1BfUkFURVMsCQkJXAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAkJXAorCX0sCQkJCQkJCVwKKwkuY2FwdHVyZSA9IHsJCQkJCQlcCisJCS5jaGFubmVsc19taW4gPSAyLAkJCQlcCisJCS5jaGFubmVsc19tYXggPSAyLAkJCQlcCisJCS5yYXRlcyA9IE9NQVBfTUNCU1BfUkFURVMsCQkJXAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAkJXAorCX0sCQkJCQkJCVwKKwkub3BzID0gewkJCQkJCVwKKwkJLnN0YXJ0dXAgPSBvbWFwX21jYnNwX2RhaV9zdGFydHVwLAkJXAorCQkuc2h1dGRvd24gPSBvbWFwX21jYnNwX2RhaV9zaHV0ZG93biwJCVwKKwkJLnRyaWdnZXIgPSBvbWFwX21jYnNwX2RhaV90cmlnZ2VyLAkJXAorCQkuaHdfcGFyYW1zID0gb21hcF9tY2JzcF9kYWlfaHdfcGFyYW1zLAkJXAorCX0sCQkJCQkJCVwKKwkuZGFpX29wcyA9IHsJCQkJCQlcCisJCS5zZXRfZm10ID0gb21hcF9tY2JzcF9kYWlfc2V0X2RhaV9mbXQsCQlcCisJCS5zZXRfY2xrZGl2ID0gb21hcF9tY2JzcF9kYWlfc2V0X2Nsa2RpdiwJXAorCQkuc2V0X3N5c2NsayA9IG9tYXBfbWNic3BfZGFpX3NldF9kYWlfc3lzY2xrLAlcCisJfSwJCQkJCQkJXAorCS5wcml2YXRlX2RhdGEgPSAmbWNic3BfZGF0YVsobGlua19pZCldLmJ1c19pZCwJCVwKK30KKworc3RydWN0IHNuZF9zb2NfZGFpIG9tYXBfbWNic3BfZGFpW10gPSB7CisJT01BUF9NQ0JTUF9EQUlfQlVJTERFUigwKSwKKwlPTUFQX01DQlNQX0RBSV9CVUlMREVSKDEpLAorI2lmIE5VTV9MSU5LUyA+PSAzCisJT01BUF9NQ0JTUF9EQUlfQlVJTERFUigyKSwKKyNlbmRpZgorI2lmIE5VTV9MSU5LUyA9PSA1CisJT01BUF9NQ0JTUF9EQUlfQlVJTERFUigzKSwKKwlPTUFQX01DQlNQX0RBSV9CVUlMREVSKDQpLAorI2VuZGlmCiB9OworCiBFWFBPUlRfU1lNQk9MX0dQTChvbWFwX21jYnNwX2RhaSk7CiAKIE1PRFVMRV9BVVRIT1IoIkphcmtrbyBOaWt1bGEgPGphcmtrby5uaWt1bGFAbm9raWEuY29tPiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5oIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5oCmluZGV4IGVkOGFmYjUuLmRmN2FkMTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuaAorKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmgKQEAgLTM4LDExICszOCwxNyBAQAogCU9NQVBfTUNCU1BfQ0xLR0RWLAkJLyogU2FtcGxlIHJhdGUgZ2VuZXJhdG9yIGRpdmlkZXIgKi8KIH07CiAKLS8qCi0gKiBSRVZJU0lUOiBQcmVwYXJhdGlvbiBmb3IgdGhlIEFTb0MgdjIuIExldCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBsaW5rcyB0bwotICogYmUgc2FtZSB0aGFuIG51bWJlciBvZiBNY0JTUCBwb3J0cyBmb3VuZCBpbiBPTUFQKHMpIHdlIGFyZSBjb21waWxpbmcgZm9yLgotICovCi0jZGVmaW5lIE5VTV9MSU5LUwkxCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKKyNkZWZpbmUgTlVNX0xJTktTCTIKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisjdW5kZWYgIE5VTV9MSU5LUworI2RlZmluZSBOVU1fTElOS1MJMworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyN1bmRlZiAgTlVNX0xJTktTCisjZGVmaW5lIE5VTV9MSU5LUwk1CisjZW5kaWYKIAogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBvbWFwX21jYnNwX2RhaVtOVU1fTElOS1NdOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uYwppbmRleCA2OTBiZmVhLi5lOTA4NGZkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAlwcnRkLT5kbWFfZGF0YSA9IGRtYV9kYXRhOwogCWVyciA9IG9tYXBfcmVxdWVzdF9kbWEoZG1hX2RhdGEtPmRtYV9yZXEsIGRtYV9kYXRhLT5uYW1lLAogCQkJICAgICAgIG9tYXBfcGNtX2RtYV9pcnEsIHN1YnN0cmVhbSwgJnBydGQtPmRtYV9jaCk7Ci0JaWYgKCFjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmICghZXJyICYgIWNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCS8qCiAJCSAqIExpbmsgY2hhbm5lbCB3aXRoIGl0c2VsZiBzbyBETUEgZG9lc24ndCBuZWVkIGFueQogCQkgKiByZXByb2dyYW1taW5nIHdoaWxlIGxvb3BpbmcgdGhlIGJ1ZmZlcgpAQCAtMTQ3LDEyICsxNDcsMTQgQEAKIAkJZG1hX3BhcmFtcy5zcmNfb3JfZHN0X3N5bmNoCT0gT01BUF9ETUFfRFNUX1NZTkM7CiAJCWRtYV9wYXJhbXMuc3JjX3N0YXJ0CQk9IHJ1bnRpbWUtPmRtYV9hZGRyOwogCQlkbWFfcGFyYW1zLmRzdF9zdGFydAkJPSBkbWFfZGF0YS0+cG9ydF9hZGRyOworCQlkbWFfcGFyYW1zLmRzdF9wb3J0CQk9IE9NQVBfRE1BX1BPUlRfTVBVSTsKIAl9IGVsc2UgewogCQlkbWFfcGFyYW1zLnNyY19hbW9kZQkJPSBPTUFQX0RNQV9BTU9ERV9DT05TVEFOVDsKIAkJZG1hX3BhcmFtcy5kc3RfYW1vZGUJCT0gT01BUF9ETUFfQU1PREVfUE9TVF9JTkM7CiAJCWRtYV9wYXJhbXMuc3JjX29yX2RzdF9zeW5jaAk9IE9NQVBfRE1BX1NSQ19TWU5DOwogCQlkbWFfcGFyYW1zLnNyY19zdGFydAkJPSBkbWFfZGF0YS0+cG9ydF9hZGRyOwogCQlkbWFfcGFyYW1zLmRzdF9zdGFydAkJPSBydW50aW1lLT5kbWFfYWRkcjsKKwkJZG1hX3BhcmFtcy5zcmNfcG9ydAkJPSBPTUFQX0RNQV9QT1JUX01QVUk7CiAJfQogCS8qCiAJICogU2V0IERNQSB0cmFuc2ZlciBmcmFtZSBzaXplIGVxdWFsIHRvIEFMU0EgcGVyaW9kIHNpemUgYW5kIGZyYW1lCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vc2s1OTEyLmMgYi9zb3VuZC9zb2Mvb21hcC9vc2s1OTEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZlNzMzNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9vbWFwL29zazU5MTIuYwpAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAqIG9zazU5MTIuYyAgLS0gIFNvQyBhdWRpbyBmb3IgT1NLIDU5MTIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWlzdHJhbCBTb2x1dGlvbnMKKyAqCisgKiBDb250YWN0OiBBcnVuIEtTICA8YXJ1bmtzQG1pc3RyYWxzb2x1dGlvbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvbWNic3AuaD4KKworI2luY2x1ZGUgIm9tYXAtbWNic3AuaCIKKyNpbmNsdWRlICJvbWFwLXBjbS5oIgorI2luY2x1ZGUgIi4uL2NvZGVjcy90bHYzMjBhaWMyMy5oIgorCisjZGVmaW5lIENPREVDX0NMT0NLIAkxMjAwMDAwMAorCitzdGF0aWMgc3RydWN0IGNsayAqdGx2MzIwYWljMjNfbWNsazsKKworc3RhdGljIGludCBvc2tfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gY2xrX2VuYWJsZSh0bHYzMjBhaWMyM19tY2xrKTsKK30KKworc3RhdGljIHZvaWQgb3NrX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCWNsa19kaXNhYmxlKHRsdjMyMGFpYzIzX21jbGspOworfQorCitzdGF0aWMgaW50IG9za19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlpbnQgZXJyOworCisJLyogU2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCisJZXJyID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksCisJCQkJICBTTkRfU09DX0RBSUZNVF9EU1BfQSB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9OQl9JRiB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvblxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLworCWVyciA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwKKwkJCQkgIFNORF9TT0NfREFJRk1UX0RTUF9BIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX05CX0lGIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3Qgc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvblxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IHRoZSBjb2RlYyBzeXN0ZW0gY2xvY2sgZm9yIERBQyBhbmQgQURDICovCisJZXJyID0KKwkgICAgc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIDAsIENPREVDX0NMT0NLLCBTTkRfU09DX0NMT0NLX0lOKTsKKworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3Qgc2V0IGNvZGVjIHN5c3RlbSBjbG9ja1xuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBvc2tfb3BzID0geworCS5zdGFydHVwID0gb3NrX3N0YXJ0dXAsCisJLmh3X3BhcmFtcyA9IG9za19od19wYXJhbXMsCisJLnNodXRkb3duID0gb3NrX3NodXRkb3duLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTElORSgiTGluZSBJbiIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIk1pYyBKYWNrIiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkxIUE9VVCJ9LAorCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiUkhQT1VUIn0sCisKKwl7IkxMSU5FSU4iLCBOVUxMLCAiTGluZSBJbiJ9LAorCXsiUkxJTkVJTiIsIE5VTEwsICJMaW5lIEluIn0sCisKKwl7Ik1JQ0lOIiwgTlVMTCwgIk1pYyBKYWNrIn0sCit9OworCitzdGF0aWMgaW50IG9za190bHYzMjBhaWMyM19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKworCS8qIEFkZCBvc2s1OTEyIHNwZWNpZmljIHdpZGdldHMgKi8KKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB0bHYzMjBhaWMyM19kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0cykpOworCisJLyogU2V0IHVwIG9zazU5MTIgc3BlY2lmaWMgYXVkaW8gcGF0aCBhdWRpb19tYXAgKi8KKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJIZWFkcGhvbmUgSmFjayIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTGluZSBJbiIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTWljIEphY2siKTsKKworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCisvKiBEaWdpdGFsIGF1ZGlvIGludGVyZmFjZSBnbHVlIC0gY29ubmVjdHMgY29kZWMgPC0tPiBDUFUgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBvc2tfZGFpID0geworCS5uYW1lID0gIlRMVjMyMEFJQzIzIiwKKwkuc3RyZWFtX25hbWUgPSAiQUlDMjMiLAorCS5jcHVfZGFpID0gJm9tYXBfbWNic3BfZGFpWzBdLAorCS5jb2RlY19kYWkgPSAmdGx2MzIwYWljMjNfZGFpLAorCS5pbml0ID0gb3NrX3RsdjMyMGFpYzIzX2luaXQsCisJLm9wcyA9ICZvc2tfb3BzLAorfTsKKworLyogQXVkaW8gbWFjaGluZSBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19tYWNoaW5lIHNuZF9zb2NfbWFjaGluZV9vc2sgPSB7CisJLm5hbWUgPSAiT1NLNTkxMiIsCisJLmRhaV9saW5rID0gJm9za19kYWksCisJLm51bV9saW5rcyA9IDEsCit9OworCisvKiBBdWRpbyBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2Ugb3NrX3NuZF9kZXZkYXRhID0geworCS5tYWNoaW5lID0gJnNuZF9zb2NfbWFjaGluZV9vc2ssCisJLnBsYXRmb3JtID0gJm9tYXBfc29jX3BsYXRmb3JtLAorCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl90bHYzMjBhaWMyMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvc2tfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgb3NrX3NvY19pbml0KHZvaWQpCit7CisJaW50IGVycjsKKwl1MzIgY3VyUmF0ZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlpZiAoIShtYWNoaW5lX2lzX29tYXBfb3NrKCkpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9za19zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFvc2tfc25kX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShvc2tfc25kX2RldmljZSwgJm9za19zbmRfZGV2ZGF0YSk7CisJb3NrX3NuZF9kZXZkYXRhLmRldiA9ICZvc2tfc25kX2RldmljZS0+ZGV2OworCSoodW5zaWduZWQgaW50ICopb3NrX2RhaS5jcHVfZGFpLT5wcml2YXRlX2RhdGEgPSAwOwkvKiBNY0JTUDEgKi8KKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG9za19zbmRfZGV2aWNlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjE7CisKKwlkZXYgPSAmb3NrX3NuZF9kZXZpY2UtPmRldjsKKworCXRsdjMyMGFpYzIzX21jbGsgPSBjbGtfZ2V0KGRldiwgIm1jbGsiKTsKKwlpZiAoSVNfRVJSKHRsdjMyMGFpYzIzX21jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBtY2xrIGNsb2NrXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNsa19nZXRfdXNlY291bnQodGx2MzIwYWljMjNfbWNsaykgPiAwKSB7CisJCS8qIE1DTEsgaXMgYWxyZWFkeSBpbiB1c2UgKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIk1DTEsgaW4gdXNlIGF0ICVkIEh6LiBXZSBjaGFuZ2UgaXQgdG8gJWQgSHpcbiIsCisJCSAgICAgICAodWludCkgY2xrX2dldF9yYXRlKHRsdjMyMGFpYzIzX21jbGspLCBDT0RFQ19DTE9DSyk7CisJfQorCisJLyoKKwkgKiBDb25maWd1cmUgMTIgTUh6IG91dHB1dCBvbiBNQ0xLLgorCSAqLworCWN1clJhdGUgPSAodWludCkgY2xrX2dldF9yYXRlKHRsdjMyMGFpYzIzX21jbGspOworCWlmIChjdXJSYXRlICE9IENPREVDX0NMT0NLKSB7CisJCWlmIChjbGtfc2V0X3JhdGUodGx2MzIwYWljMjNfbWNsaywgQ09ERUNfQ0xPQ0spKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBzZXQgTUNMSyBmb3IgQUlDMjMgQ09ERUNcbiIpOworCQkJZXJyID0gLUVDQU5DRUxFRDsKKwkJCWdvdG8gZXJyMTsKKwkJfQorCX0KKworCXByaW50ayhLRVJOX0lORk8gIk1DTEsgPSAlZCBbJWRdLCB1c2Vjb3VudCA9ICVkXG4iLAorCSAgICAgICAodWludCkgY2xrX2dldF9yYXRlKHRsdjMyMGFpYzIzX21jbGspLCBDT0RFQ19DTE9DSywKKwkgICAgICAgY2xrX2dldF91c2Vjb3VudCh0bHYzMjBhaWMyM19tY2xrKSk7CisKKwlyZXR1cm4gMDsKK2VycjE6CisJY2xrX3B1dCh0bHYzMjBhaWMyM19tY2xrKTsKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKG9za19zbmRfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KG9za19zbmRfZGV2aWNlKTsKKworCXJldHVybiBlcnI7CisKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9za19zb2NfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG9za19zbmRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQob3NrX3NvY19pbml0KTsKK21vZHVsZV9leGl0KG9za19zb2NfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFydW4gS1MgPGFydW5rc0BtaXN0cmFsc29sdXRpb25zLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgT1NLIDU5MTIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvY29yZ2kuYyBiL3NvdW5kL3NvYy9weGEvY29yZ2kuYwppbmRleCAxYTgzNzNkLi4yNzE4ZWFmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKKysrIGIvc291bmQvc29jL3B4YS9jb3JnaS5jCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IDIwMDUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqIENvcHlyaWdodCAyMDA1IE9wZW5lZGhhbmQgTHRkLgogICoKLSAqIEF1dGhvcnM6IExpYW0gR2lyZHdvb2QgPGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbT4KKyAqIEF1dGhvcnM6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKiAgICAgICAgICBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZEBvcGVuZWRoYW5kLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0yODEsOCArMjgxLDggQEAKIHsKIAlpbnQgaSwgZXJyOwogCi0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTExJTkVJTiIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIlJMSU5FSU4iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTExJTkVJTiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJSTElORUlOIik7CiAKIAkvKiBBZGQgY29yZ2kgc3BlY2lmaWMgY29udHJvbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3MzFfY29yZ2lfY29udHJvbHMpOyBpKyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jIGIvc291bmQvc29jL3B4YS9lbS14MjcwLmMKaW5kZXggZDljM2Y3Yi4uZTZmZjY5MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9lbS14MjcwLmMKKysrIGIvc291bmQvc29jL3B4YS9lbS14MjcwLmMKQEAgLTksNyArOSw3IEBACiAgKiBDb3B5cmlnaHQgMjAwNSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgogICogQ29weXJpZ2h0IDIwMDUgT3BlbmVkaGFuZCBMdGQuCiAgKgotICogQXV0aG9yczogTGlhbSBHaXJkd29vZCA8bGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tPgorICogQXV0aG9yczogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqICAgICAgICAgIFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkQG9wZW5lZGhhbmQuY29tPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMgYi9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCmluZGV4IGY4NGY3ZDguLjRkOTkzMGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKKysrIGIvc291bmQvc29jL3B4YS9wb29kbGUuYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAyMDA1IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCiAgKiBDb3B5cmlnaHQgMjAwNSBPcGVuZWRoYW5kIEx0ZC4KICAqCi0gKiBBdXRob3JzOiBMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+CisgKiBBdXRob3JzOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICogICAgICAgICAgUmljaGFyZCBQdXJkaWUgPHJpY2hhcmRAb3BlbmVkaGFuZC5jb20+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMjQyLDggKzI0Miw4IEBACiB7CiAJaW50IGksIGVycjsKIAotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkxMSU5FSU4iKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJSTElORUlOIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxMSU5FSU4iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUkxJTkVJTiIpOwogCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiTUlDSU4iKTsKIAogCS8qIEFkZCBwb29kbGUgc3BlY2lmaWMgY29udHJvbHMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWkycy5jIGIvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmMKaW5kZXggMmZiNTgyOS4uZTc1ODAzNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmMKKysrIGIvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAotICogICAgICAgICBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQorICogICAgICAgICBscmdAc2xpbWxvZ2ljLmNvLnVrCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtNDA1LDYgKzQwNSw2IEBACiBtb2R1bGVfZXhpdChweGEyeHhfaTJzX2V4aXQpOwogCiAvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KLU1PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QsIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSwgd3d3LndvbGZzb25taWNyby5jb20iKTsKK01PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QsIGxyZ0BzbGltbG9naWMuY28udWsiKTsKIE1PRFVMRV9ERVNDUklQVElPTigicHhhMnh4IEkyUyBTb0MgSW50ZXJmYWNlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3NwaXR6LmMgYi9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKaW5kZXggOWE3MGIwMC4uZDMwN2I2NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9zcGl0ei5jCisrKyBiL3NvdW5kL3NvYy9weGEvc3BpdHouYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAyMDA1IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCiAgKiBDb3B5cmlnaHQgMjAwNSBPcGVuZWRoYW5kIEx0ZC4KICAqCi0gKiBBdXRob3JzOiBMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+CisgKiBBdXRob3JzOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICogICAgICAgICAgUmljaGFyZCBQdXJkaWUgPHJpY2hhcmRAb3BlbmVkaGFuZC5jb20+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMjgxLDEzICsyODEsMTMgQEAKIAlpbnQgaSwgZXJyOwogCiAJLyogTkMgY29kZWMgcGlucyAqLwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIlJJTlBVVDEiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJMSU5QVVQyIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiUklOUFVUMiIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkxJTlBVVDMiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJSSU5QVVQzIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiT1VUMyIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIk1PTk8xIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJJTlBVVDEiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElOUFVUMiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJSSU5QVVQyIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTlBVVDMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUklOUFVUMyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQzIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk8xIik7CiAKIAkvKiBBZGQgc3BpdHogc3BlY2lmaWMgY29udHJvbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NTBfc3BpdHpfY29udHJvbHMpOyBpKyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvdG9zYS5jIGIvc291bmQvc29jL3B4YS90b3NhLmMKaW5kZXggMmJhYWE3NS4uYWZlZmU0MSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS90b3NhLmMKKysrIGIvc291bmQvc29jL3B4YS90b3NhLmMKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgMjAwNSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgogICogQ29weXJpZ2h0IDIwMDUgT3BlbmVkaGFuZCBMdGQuCiAgKgotICogQXV0aG9yczogTGlhbSBHaXJkd29vZCA8bGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tPgorICogQXV0aG9yczogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqICAgICAgICAgIFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkQG9wZW5lZGhhbmQuY29tPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTE5MCw4ICsxOTAsOCBAQAogewogCWludCBpLCBlcnI7CiAKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJPVVQzIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTU9OT09VVCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQzIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk9PVVQiKTsKIAogCS8qIGFkZCB0b3NhIHNwZWNpZmljIGNvbnRyb2xzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodG9zYV9jb250cm9scyk7IGkrKykgewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvbmVvMTk3M193bTg3NTMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L25lbzE5NzNfd204NzUzLmMKaW5kZXggNzNhNTBlOS4uODdkZGZlZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvbmVvMTk3M193bTg3NTMuYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9uZW8xOTczX3dtODc1My5jCkBAIC01MTEsMjEgKzUxMSwyMCBAQAogCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCiAJLyogc2V0IHVwIE5DIGNvZGVjIHBpbnMgKi8KLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJMT1VUMiIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIlJPVVQyIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiT1VUMyIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIk9VVDQiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJMSU5FMSIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkxJTkUyIik7Ci0KLQotCS8qIHNldCBlbmRwb2ludHMgdG8gZGVmYXVsdCBtb2RlICovCi0Jc2V0X3NjZW5hcmlvX2VuZHBvaW50cyhjb2RlYywgTkVPX0FVRElPX09GRik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxPVVQyIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJPVVQyIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVDMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUNCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FMSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FMiIpOwogCiAJLyogQWRkIG5lbzE5NzMgc3BlY2lmaWMgd2lkZ2V0cyAqLwogCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODc1M19kYXBtX3dpZGdldHMsCiAJCQkJICBBUlJBWV9TSVpFKHdtODc1M19kYXBtX3dpZGdldHMpKTsKIAorCS8qIHNldCBlbmRwb2ludHMgdG8gZGVmYXVsdCBtb2RlICovCisJc2V0X3NjZW5hcmlvX2VuZHBvaW50cyhjb2RlYywgTkVPX0FVRElPX09GRik7CisKIAkvKiBhZGQgbmVvMTk3MyBzcGVjaWZpYyBjb250cm9scyAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc1M19uZW8xOTczX2NvbnRyb2xzKTsgaSsrKSB7CiAJCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLApAQCAtNjAzLDYgKzYwMiw4IEBACiB7CiAJREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKKwlpMmMgPSBjbGllbnQ7CisKIAlsbTQ4NTdfd3JpdGVfcmVncygpOwogCXJldHVybiAwOwogfQpAQCAtNjExLDYgKzYxMiw4IEBACiB7CiAJREJHKCJFbnRlcmVkICVzXG4iLCBfX2Z1bmNfXyk7CiAKKwlpMmMgPSBOVUxMOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY1MCw3ICs2NTMsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbG00ODU3X2kyY19pZFtdID0gewotCXsgIm5lbzE5NzNfbG00ODU3IiwgMCB9CisJeyAibmVvMTk3M19sbTQ4NTciLCAwIH0sCiAJeyB9CiB9OwogCkBAIC02NjgsNDggKzY3MSw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbmVvMTk3M19zbmRfZGV2aWNlOwotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50ICpsbTQ4NTdfY2xpZW50OwotCi1zdGF0aWMgaW50IF9faW5pdCBuZW8xOTczX2FkZF9sbTQ4NTdfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJCSAgICBpbnQgaTJjX2J1cywKLQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGkyY19hZGRyZXNzKQotewotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCWludCByZXQ7Ci0KLQlyZXQgPSBpMmNfYWRkX2RyaXZlcigmbG00ODU3X2kyY19kcml2ZXIpOwotCWlmIChyZXQgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBhZGQgbG00ODU3IGRyaXZlclxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7Ci0JaW5mby5hZGRyID0gaTJjX2FkZHJlc3M7Ci0Jc3RybGNweShpbmZvLnR5cGUsICJuZW8xOTczX2xtNDg1NyIsIEkyQ19OQU1FX1NJWkUpOwotCi0JYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcihpMmNfYnVzKTsKLQlpZiAoIWFkYXB0ZXIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyICVkXG4iLCBpMmNfYnVzKTsKLQkJZ290byBlcnJfZHJpdmVyOwotCX0KLQotCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKLQlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7Ci0JaWYgKCFjbGllbnQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGxtNDg1NyBkZXZpY2UgYXQgMHgleFxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpaW5mby5hZGRyKTsKLQkJZ290byBlcnJfZHJpdmVyOwotCX0KLQotCWxtNDg1N19jbGllbnQgPSBjbGllbnQ7Ci0JcmV0dXJuIDA7Ci0KLWVycl9kcml2ZXI6Ci0JaTJjX2RlbF9kcml2ZXIoJmxtNDg1N19pMmNfZHJpdmVyKTsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KIAogc3RhdGljIGludCBfX2luaXQgbmVvMTk3M19pbml0KHZvaWQpCiB7CkBAIC03MzYsOCArNjk3LDggQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBuZW8xOTczX2FkZF9sbTQ4NTdfZGV2aWNlKG5lbzE5NzNfc25kX2RldmljZSwKLQkJCQkJbmVvMTk3M193bTg3NTNfc2V0dXAsIDB4N0MpOworCXJldCA9IGkyY19hZGRfZHJpdmVyKCZsbTQ4NTdfaTJjX2RyaXZlcik7CisKIAlpZiAocmV0ICE9IDApCiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG5lbzE5NzNfc25kX2RldmljZSk7CiAKQEAgLTc0OCw3ICs3MDksNiBAQAogewogCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCi0JaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGxtNDg1N19jbGllbnQpOwogCWkyY19kZWxfZHJpdmVyKCZsbTQ4NTdfaTJjX2RyaXZlcik7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobmVvMTk3M19zbmRfZGV2aWNlKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY29yZS5jIGIvc291bmQvc29jL3NvYy1jb3JlLmMKaW5kZXggYWQzODExMy4uNDYyZTYzNWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC00LDggKzQsNyBAQAogICogQ29weXJpZ2h0IDIwMDUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqIENvcHlyaWdodCAyMDA1IE9wZW5lZGhhbmQgTHRkLgogICoKLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAotICogICAgICAgICBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICogICAgICAgICB3aXRoIGNvZGUsIGNvbW1lbnRzIGFuZCBpZGVhcyBmcm9tIDotCiAgKiAgICAgICAgIFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkQG9wZW5lZGhhbmQuY29tPgogICoKQEAgLTE4ODYsNyArMTg4NSw3IEBACiBtb2R1bGVfZXhpdChzbmRfc29jX2V4aXQpOwogCiAvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KLU1PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QsIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSwgd3d3LndvbGZzb25taWNyby5jb20iKTsKK01PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QsIGxyZ0BzbGltbG9naWMuY28udWsiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgQ29yZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzb2MtYXVkaW8iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggOWNhOWMwOC4uNzM1MWRiOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTIsOCArMiw3IEBACiAgKiBzb2MtZGFwbS5jICAtLSAgQUxTQSBTb0MgRHluYW1pYyBBdWRpbyBQb3dlciBNYW5hZ2VtZW50CiAgKgogICogQ29weXJpZ2h0IDIwMDUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAotICogICAgICAgICBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTgzMiw3ICs4MzEsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJYXNvY19kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZGlyKCJhc29jIiwgTlVMTCk7Ci0JaWYgKCFJU19FUlIoYXNvY19kZWJ1Z2ZzKSkKKwlpZiAoIUlTX0VSUihhc29jX2RlYnVnZnMpICYmIGFzb2NfZGVidWdmcykKIAkJZGVidWdmc19jcmVhdGVfdTMyKCJkYXBtX3BvcF90aW1lIiwgMDc0NCwgYXNvY19kZWJ1Z2ZzLAogCQkJCSAgICZwb3BfdGltZSk7CiAJZWxzZQpAQCAtMTQ4NCw2ICsxNDgzLDI2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4pOwogCiAvKioKKyAqIHNuZF9zb2NfZGFwbV9uY19waW4gLSBwZXJtYW5lbnRseSBkaXNhYmxlIHBpbi4KKyAqIEBjb2RlYzogU29DIGNvZGVjCisgKiBAcGluOiBwaW4gbmFtZQorICoKKyAqIE1hcmtzIHRoZSBzcGVjaWZpZWQgcGluIGFzIGJlaW5nIG5vdCBjb25uZWN0ZWQsIGRpc2FibGluZyBpdCBhbG9uZworICogYW55IHBhcmVudCBvciBjaGlsZCB3aWRnZXRzLiAgQXQgcHJlc2VudCB0aGlzIGlzIGlkZW50aWNhbCB0bworICogc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKCkgYnV0IGluIGZ1dHVyZSBpdCB3aWxsIGJlIGV4dGVuZGVkIHRvIGRvCisgKiBhZGRpdGlvbmFsIHRoaW5ncyBzdWNoIGFzIGRpc2FibGluZyBjb250cm9scyB3aGljaCBvbmx5IGFmZmVjdAorICogcGF0aHMgdGhyb3VnaCB0aGUgcGluLgorICoKKyAqIE5PVEU6IHNuZF9zb2NfZGFwbV9zeW5jKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVyIHRoaXMgZm9yIERBUE0gdG8KKyAqIGRvIGFueSB3aWRnZXQgcG93ZXIgc3dpdGNoaW5nLgorICovCitpbnQgc25kX3NvY19kYXBtX25jX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbikKK3sKKwlyZXR1cm4gc25kX3NvY19kYXBtX3NldF9waW4oY29kZWMsIHBpbiwgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fbmNfcGluKTsKKworLyoqCiAgKiBzbmRfc29jX2RhcG1fZ2V0X3Bpbl9zdGF0dXMgLSBnZXQgYXVkaW8gcGluIHN0YXR1cwogICogQGNvZGVjOiBhdWRpbyBjb2RlYwogICogQHBpbjogYXVkaW8gc2lnbmFsIHBpbiBlbmRwb2ludCAob3Igc3RhcnQgcG9pbnQpCkBAIC0xNTIxLDYgKzE1NDAsNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX2ZyZWUpOwogCiAvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KLU1PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QsIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSwgd3d3LndvbGZzb25taWNyby5jb20iKTsKK01PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QsIGxyZ0BzbGltbG9naWMuY28udWsiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHluYW1pYyBBdWRpbyBQb3dlciBNYW5hZ2VtZW50IGNvcmUgZm9yIEFMU0EgU29DIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb3VuZF9jb3JlLmMgYi9zb3VuZC9zb3VuZF9jb3JlLmMKaW5kZXggNGFlMDdlMi4uZmFlZjg3YSAxMDA2NDQKLS0tIGEvc291bmQvc291bmRfY29yZS5jCisrKyBiL3NvdW5kL3NvdW5kX2NvcmUuYwpAQCAtMjIwLDkgKzIyMCw4IEBACiAJZWxzZQogCQlzcHJpbnRmKHMtPm5hbWUsICJzb3VuZC8lcyVkIiwgbmFtZSwgciAvIFNPVU5EX1NURVApOwogCi0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHNvdW5kX2NsYXNzLCBkZXYsCi0JCQkgICAgICBNS0RFVihTT1VORF9NQUpPUiwgcy0+dW5pdF9taW5vciksCi0JCQkgICAgICBOVUxMLCBzLT5uYW1lKzYpOworCWRldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIGRldiwgTUtERVYoU09VTkRfTUFKT1IsIHMtPnVuaXRfbWlub3IpLAorCQkgICAgICBOVUxMLCBzLT5uYW1lKzYpOwogCXJldHVybiByOwogCiAgZmFpbDoKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwppbmRleCBiNDQxZmUyLi5jMjUxNWI2IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCkBAIC0xMTgsMTIgKzExOCwxMSBAQAogCXZvaWQgKnZhZGRyOwogCXN0cnVjdCB1czEyMmwgKnVzMTIybCA9IGFyZWEtPnZtX3ByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgdXNiX3N0cmVhbSAqczsKLQlpbnQgdm1fZiA9IFZNX0ZBVUxUX1NJR0JVUzsKIAogCW11dGV4X2xvY2soJnVzMTIybC0+bXV0ZXgpOwogCXMgPSB1czEyMmwtPnNrLnM7CiAJaWYgKCFzKQotCQlnb3RvIG91dDsKKwkJZ290byB1bmxvY2s7CiAKIAlvZmZzZXQgPSB2bWYtPnBnb2ZmIDw8IFBBR0VfU0hJRlQ7CiAJaWYgKG9mZnNldCA8IFBBR0VfQUxJR04ocy0+cmVhZF9zaXplKSkKQEAgLTEzMSw3ICsxMzAsNyBAQAogCWVsc2UgewogCQlvZmZzZXQgLT0gUEFHRV9BTElHTihzLT5yZWFkX3NpemUpOwogCQlpZiAob2Zmc2V0ID49IFBBR0VfQUxJR04ocy0+d3JpdGVfc2l6ZSkpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gdW5sb2NrOwogCiAJCXZhZGRyID0gdXMxMjJsLT5zay53cml0ZV9wYWdlICsgb2Zmc2V0OwogCX0KQEAgLTE0MSw5ICsxNDAsMTEgQEAKIAltdXRleF91bmxvY2soJnVzMTIybC0+bXV0ZXgpOwogCiAJdm1mLT5wYWdlID0gcGFnZTsKLQl2bV9mID0gMDsKLW91dDoKLQlyZXR1cm4gdm1fZjsKKworCXJldHVybiAwOwordW5sb2NrOgorCW11dGV4X3VubG9jaygmdXMxMjJsLT5tdXRleCk7CisJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKIH0KIAogc3RhdGljIHZvaWQgdXNiX3N0cmVhbV9od2RlcF92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pb2FwaWMuYyBiL3ZpcnQva3ZtL2lvYXBpYy5jCmluZGV4IGMwZDIyODcuLjUzNzcyYmIgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lvYXBpYy5jCisrKyBiL3ZpcnQva3ZtL2lvYXBpYy5jCkBAIC0zOSw2ICszOSw3IEBACiAKICNpbmNsdWRlICJpb2FwaWMuaCIKICNpbmNsdWRlICJsYXBpYy5oIgorI2luY2x1ZGUgImlycS5oIgogCiAjaWYgMAogI2RlZmluZSBpb2FwaWNfZGVidWcoZm10LGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBmbXQsIyNhcmcpCkBAIC0yODUsMjYgKzI4NiwzMSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX19rdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGdzaSkKK3N0YXRpYyB2b2lkIF9fa3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBnc2ksCisJCQkJICAgIGludCB0cmlnZ2VyX21vZGUpCiB7CiAJdW5pb24gaW9hcGljX3JlZGlyX2VudHJ5ICplbnQ7CiAKIAllbnQgPSAmaW9hcGljLT5yZWRpcnRibFtnc2ldOwotCUFTU0VSVChlbnQtPmZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpOwogCi0JZW50LT5maWVsZHMucmVtb3RlX2lyciA9IDA7Ci0JaWYgKCFlbnQtPmZpZWxkcy5tYXNrICYmIChpb2FwaWMtPmlyciAmICgxIDw8IGdzaSkpKQotCQlpb2FwaWNfc2VydmljZShpb2FwaWMsIGdzaSk7CisJa3ZtX25vdGlmeV9hY2tlZF9pcnEoaW9hcGljLT5rdm0sIGdzaSk7CisKKwlpZiAodHJpZ2dlcl9tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKSB7CisJCUFTU0VSVChlbnQtPmZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpOworCQllbnQtPmZpZWxkcy5yZW1vdGVfaXJyID0gMDsKKwkJaWYgKCFlbnQtPmZpZWxkcy5tYXNrICYmIChpb2FwaWMtPmlyciAmICgxIDw8IGdzaSkpKQorCQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBnc2kpOworCX0KIH0KIAotdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bSAqa3ZtLCBpbnQgdmVjdG9yKQordm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bSAqa3ZtLCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKQogewogCXN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSBrdm0tPmFyY2gudmlvYXBpYzsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBJT0FQSUNfTlVNX1BJTlM7IGkrKykKIAkJaWYgKGlvYXBpYy0+cmVkaXJ0YmxbaV0uZmllbGRzLnZlY3RvciA9PSB2ZWN0b3IpCi0JCQlfX2t2bV9pb2FwaWNfdXBkYXRlX2VvaShpb2FwaWMsIGkpOworCQkJX19rdm1faW9hcGljX3VwZGF0ZV9lb2koaW9hcGljLCBpLCB0cmlnZ2VyX21vZGUpOwogfQogCiBzdGF0aWMgaW50IGlvYXBpY19pbl9yYW5nZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywgZ3BhX3QgYWRkciwKQEAgLTM4MCw3ICszODYsNyBAQAogCQlicmVhazsKICNpZmRlZglDT05GSUdfSUE2NAogCWNhc2UgSU9BUElDX1JFR19FT0k6Ci0JCWt2bV9pb2FwaWNfdXBkYXRlX2VvaShpb2FwaWMtPmt2bSwgZGF0YSk7CisJCWt2bV9pb2FwaWNfdXBkYXRlX2VvaShpb2FwaWMtPmt2bSwgZGF0YSwgSU9BUElDX0xFVkVMX1RSSUcpOwogCQlicmVhazsKICNlbmRpZgogCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pb2FwaWMuaCBiL3ZpcnQva3ZtL2lvYXBpYy5oCmluZGV4IDdmMTY2NzUuLmNkN2FlNzYgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lvYXBpYy5oCisrKyBiL3ZpcnQva3ZtL2lvYXBpYy5oCkBAIC01OCw2ICs1OCw3IEBACiAJfSByZWRpcnRibFtJT0FQSUNfTlVNX1BJTlNdOwogCXN0cnVjdCBrdm1faW9fZGV2aWNlIGRldjsKIAlzdHJ1Y3Qga3ZtICprdm07CisJdm9pZCAoKmFja19ub3RpZmllcikodm9pZCAqb3BhcXVlLCBpbnQgaXJxKTsKIH07CiAKICNpZmRlZiBERUJVRwpAQCAtNzgsMTYgKzc5LDkgQEAKIAlyZXR1cm4ga3ZtLT5hcmNoLnZpb2FwaWM7CiB9CiAKLSNpZmRlZiBDT05GSUdfSUE2NAotc3RhdGljIGlubGluZSBpbnQgaXJxY2hpcF9pbl9rZXJuZWwoc3RydWN0IGt2bSAqa3ZtKQotewotCXJldHVybiAxOwotfQotI2VuZGlmCi0KIHN0cnVjdCBrdm1fdmNwdSAqa3ZtX2dldF9sb3dlc3RfcHJpb192Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdTggdmVjdG9yLAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGJpdG1hcCk7Ci12b2lkIGt2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtICprdm0sIGludCB2ZWN0b3IpOwordm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bSAqa3ZtLCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKTsKIGludCBrdm1faW9hcGljX2luaXQoc3RydWN0IGt2bSAqa3ZtKTsKIHZvaWQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGludCBsZXZlbCk7CiB2b2lkIGt2bV9pb2FwaWNfcmVzZXQoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pcnFfY29tbS5jIGIvdmlydC9rdm0vaXJxX2NvbW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDE2OWY1Ci0tLSAvZGV2L251bGwKKysrIGIvdmlydC9rdm0vaXJxX2NvbW0uYwpAQCAtMCwwICsxLDYwIEBACisvKgorICogaXJxX2NvbW0uYzogQ29tbW9uIEFQSSBmb3IgaW4ga2VybmVsIGludGVycnVwdCBjb250cm9sbGVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCisgKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqIEF1dGhvcnM6CisgKiAgIFlhb3p1IChFZGRpZSkgRG9uZyA8RWRkaWUuZG9uZ0BpbnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgImlycS5oIgorCisjaW5jbHVkZSAiaW9hcGljLmgiCisKKy8qIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBrdm0tPmxvY2sgbXV0ZXggaGVsZCAqLwordm9pZCBrdm1fc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsIGludCBsZXZlbCkKK3sKKwkvKiBOb3QgcG9zc2libGUgdG8gZGV0ZWN0IGlmIHRoZSBndWVzdCB1c2VzIHRoZSBQSUMgb3IgdGhlCisJICogSU9BUElDLiAgU28gc2V0IHRoZSBiaXQgaW4gYm90aC4gVGhlIGd1ZXN0IHdpbGwgaWdub3JlCisJICogd3JpdGVzIHRvIHRoZSB1bnVzZWQgb25lLgorCSAqLworCWt2bV9pb2FwaWNfc2V0X2lycShrdm0tPmFyY2gudmlvYXBpYywgaXJxLCBsZXZlbCk7CisjaWZkZWYgQ09ORklHX1g4NgorCWt2bV9waWNfc2V0X2lycShwaWNfaXJxY2hpcChrdm0pLCBpcnEsIGxldmVsKTsKKyNlbmRpZgorfQorCit2b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgZ3NpKQoreworCXN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGtpYW4sIG4sICZrdm0tPmFyY2guaXJxX2Fja19ub3RpZmllcl9saXN0LCBsaW5rKQorCQlpZiAoa2lhbi0+Z3NpID09IGdzaSkKKwkJCWtpYW4tPmlycV9hY2tlZChraWFuKTsKK30KKwordm9pZCBrdm1fcmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKQoreworCWhsaXN0X2FkZF9oZWFkKCZraWFuLT5saW5rLCAma3ZtLT5hcmNoLmlycV9hY2tfbm90aWZpZXJfbGlzdCk7Cit9CisKK3ZvaWQga3ZtX3VucmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pCit7CisJaGxpc3RfZGVsKCZraWFuLT5saW5rKTsKK30KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDdkZDliMGIuLmNmMGFiOGUgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtNTEsNiArNTEsMTIgQEAKICNpbmNsdWRlICJjb2FsZXNjZWRfbW1pby5oIgogI2VuZGlmCiAKKyNpZmRlZiBLVk1fQ0FQX0RFVklDRV9BU1NJR05NRU5UCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSAiaXJxLmgiCisjZW5kaWYKKwogTU9EVUxFX0FVVEhPUigiUXVtcmFuZXQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApAQCAtNzEsMTEgKzc3LDI1MyBAQAogCiBib29sIGt2bV9yZWJvb3Rpbmc7CiAKKyNpZmRlZiBLVk1fQ0FQX0RFVklDRV9BU1NJR05NRU5UCitzdGF0aWMgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICprdm1fZmluZF9hc3NpZ25lZF9kZXYoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJCSAgICAgIGludCBhc3NpZ25lZF9kZXZfaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcHRyOworCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqbWF0Y2g7CisKKwlsaXN0X2Zvcl9lYWNoKHB0ciwgaGVhZCkgeworCQltYXRjaCA9IGxpc3RfZW50cnkocHRyLCBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwsIGxpc3QpOworCQlpZiAobWF0Y2gtPmFzc2lnbmVkX2Rldl9pZCA9PSBhc3NpZ25lZF9kZXZfaWQpCisJCQlyZXR1cm4gbWF0Y2g7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBrdm1fYXNzaWduZWRfZGV2X2ludGVycnVwdF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqYXNzaWduZWRfZGV2OworCisJYXNzaWduZWRfZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCwKKwkJCQkgICAgaW50ZXJydXB0X3dvcmspOworCisJLyogVGhpcyBpcyB0YWtlbiB0byBzYWZlbHkgaW5qZWN0IGlycSBpbnNpZGUgdGhlIGd1ZXN0LiBXaGVuCisJICogdGhlIGludGVycnVwdCBpbmplY3Rpb24gKG9yIHRoZSBpb2FwaWMgY29kZSkgdXNlcyBhCisJICogZmluZXItZ3JhaW5lZCBsb2NrLCB1cGRhdGUgdGhpcworCSAqLworCW11dGV4X2xvY2soJmFzc2lnbmVkX2Rldi0+a3ZtLT5sb2NrKTsKKwlrdm1fc2V0X2lycShhc3NpZ25lZF9kZXYtPmt2bSwKKwkJICAgIGFzc2lnbmVkX2Rldi0+Z3Vlc3RfaXJxLCAxKTsKKwltdXRleF91bmxvY2soJmFzc2lnbmVkX2Rldi0+a3ZtLT5sb2NrKTsKKwlrdm1fcHV0X2t2bShhc3NpZ25lZF9kZXYtPmt2bSk7Cit9CisKKy8qIEZJWE1FOiBJbXBsZW1lbnQgdGhlIE9SIGxvZ2ljIG5lZWRlZCB0byBtYWtlIHNoYXJlZCBpbnRlcnJ1cHRzIG9uCisgKiB0aGlzIGxpbmUgYmVoYXZlIHByb3Blcmx5CisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBrdm1fYXNzaWduZWRfZGV2X2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqYXNzaWduZWRfZGV2ID0KKwkJKHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqKSBkZXZfaWQ7CisKKwlrdm1fZ2V0X2t2bShhc3NpZ25lZF9kZXYtPmt2bSk7CisJc2NoZWR1bGVfd29yaygmYXNzaWduZWRfZGV2LT5pbnRlcnJ1cHRfd29yayk7CisJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBBY2sgdGhlIGlycSBsaW5lIGZvciBhbiBhc3NpZ25lZCBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGt2bV9hc3NpZ25lZF9kZXZfYWNrX2lycShzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pCit7CisJc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICpkZXY7CisKKwlpZiAoa2lhbi0+Z3NpID09IC0xKQorCQlyZXR1cm47CisKKwlkZXYgPSBjb250YWluZXJfb2Yoa2lhbiwgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsLAorCQkJICAgYWNrX25vdGlmaWVyKTsKKwlrdm1fc2V0X2lycShkZXYtPmt2bSwgZGV2LT5ndWVzdF9pcnEsIDApOworCWVuYWJsZV9pcnEoZGV2LT5ob3N0X2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9mcmVlX2Fzc2lnbmVkX2RldmljZShzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwKKwkJCQkgICAgICphc3NpZ25lZF9kZXYpCit7CisJaWYgKGlycWNoaXBfaW5fa2VybmVsKGt2bSkgJiYgYXNzaWduZWRfZGV2LT5pcnFfcmVxdWVzdGVkKQorCQlmcmVlX2lycShhc3NpZ25lZF9kZXYtPmhvc3RfaXJxLCAodm9pZCAqKWFzc2lnbmVkX2Rldik7CisKKwlrdm1fdW5yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKGt2bSwgJmFzc2lnbmVkX2Rldi0+YWNrX25vdGlmaWVyKTsKKworCWlmIChjYW5jZWxfd29ya19zeW5jKCZhc3NpZ25lZF9kZXYtPmludGVycnVwdF93b3JrKSkKKwkJLyogV2UgaGFkIHBlbmRpbmcgd29yay4gVGhhdCBtZWFucyB3ZSB3aWxsIGhhdmUgdG8gdGFrZQorCQkgKiBjYXJlIG9mIGt2bV9wdXRfa3ZtLgorCQkgKi8KKwkJa3ZtX3B1dF9rdm0oa3ZtKTsKKworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoYXNzaWduZWRfZGV2LT5kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShhc3NpZ25lZF9kZXYtPmRldik7CisJcGNpX2Rldl9wdXQoYXNzaWduZWRfZGV2LT5kZXYpOworCisJbGlzdF9kZWwoJmFzc2lnbmVkX2Rldi0+bGlzdCk7CisJa2ZyZWUoYXNzaWduZWRfZGV2KTsKK30KKwordm9pZCBrdm1fZnJlZV9hbGxfYXNzaWduZWRfZGV2aWNlcyhzdHJ1Y3Qga3ZtICprdm0pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcHRyLCAqcHRyMjsKKwlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmFzc2lnbmVkX2RldjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShwdHIsIHB0cjIsICZrdm0tPmFyY2guYXNzaWduZWRfZGV2X2hlYWQpIHsKKwkJYXNzaWduZWRfZGV2ID0gbGlzdF9lbnRyeShwdHIsCisJCQkJCSAgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsLAorCQkJCQkgIGxpc3QpOworCisJCWt2bV9mcmVlX2Fzc2lnbmVkX2RldmljZShrdm0sIGFzc2lnbmVkX2Rldik7CisJfQorfQorCitzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9hc3NpZ25faXJxKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycQorCQkJCSAgICphc3NpZ25lZF9pcnEpCit7CisJaW50IHIgPSAwOworCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqbWF0Y2g7CisKKwltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCisJbWF0Y2ggPSBrdm1fZmluZF9hc3NpZ25lZF9kZXYoJmt2bS0+YXJjaC5hc3NpZ25lZF9kZXZfaGVhZCwKKwkJCQkgICAgICBhc3NpZ25lZF9pcnEtPmFzc2lnbmVkX2Rldl9pZCk7CisJaWYgKCFtYXRjaCkgeworCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChtYXRjaC0+aXJxX3JlcXVlc3RlZCkgeworCQltYXRjaC0+Z3Vlc3RfaXJxID0gYXNzaWduZWRfaXJxLT5ndWVzdF9pcnE7CisJCW1hdGNoLT5hY2tfbm90aWZpZXIuZ3NpID0gYXNzaWduZWRfaXJxLT5ndWVzdF9pcnE7CisJCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJSU5JVF9XT1JLKCZtYXRjaC0+aW50ZXJydXB0X3dvcmssCisJCSAga3ZtX2Fzc2lnbmVkX2Rldl9pbnRlcnJ1cHRfd29ya19oYW5kbGVyKTsKKworCWlmIChpcnFjaGlwX2luX2tlcm5lbChrdm0pKSB7CisJCWlmICghY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkgeworCQkJciA9IC1FUEVSTTsKKwkJCWdvdG8gb3V0X3JlbGVhc2U7CisJCX0KKworCQlpZiAoYXNzaWduZWRfaXJxLT5ob3N0X2lycSkKKwkJCW1hdGNoLT5ob3N0X2lycSA9IGFzc2lnbmVkX2lycS0+aG9zdF9pcnE7CisJCWVsc2UKKwkJCW1hdGNoLT5ob3N0X2lycSA9IG1hdGNoLT5kZXYtPmlycTsKKwkJbWF0Y2gtPmd1ZXN0X2lycSA9IGFzc2lnbmVkX2lycS0+Z3Vlc3RfaXJxOworCQltYXRjaC0+YWNrX25vdGlmaWVyLmdzaSA9IGFzc2lnbmVkX2lycS0+Z3Vlc3RfaXJxOworCQltYXRjaC0+YWNrX25vdGlmaWVyLmlycV9hY2tlZCA9IGt2bV9hc3NpZ25lZF9kZXZfYWNrX2lycTsKKwkJa3ZtX3JlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoa3ZtLCAmbWF0Y2gtPmFja19ub3RpZmllcik7CisKKwkJLyogRXZlbiB0aG91Z2ggdGhpcyBpcyBQQ0ksIHdlIGRvbid0IHdhbnQgdG8gdXNlIHNoYXJlZAorCQkgKiBpbnRlcnJ1cHRzLiBTaGFyaW5nIGhvc3QgZGV2aWNlcyB3aXRoIGd1ZXN0LWFzc2lnbmVkIGRldmljZXMKKwkJICogb24gdGhlIHNhbWUgaW50ZXJydXB0IGxpbmUgaXMgbm90IGEgaGFwcHkgc2l0dWF0aW9uOiB0aGVyZQorCQkgKiBhcmUgZ29pbmcgdG8gYmUgbG9uZyBkZWxheXMgaW4gYWNjZXB0aW5nLCBhY2tpbmcsIGV0Yy4KKwkJICovCisJCWlmIChyZXF1ZXN0X2lycShtYXRjaC0+aG9zdF9pcnEsIGt2bV9hc3NpZ25lZF9kZXZfaW50ciwgMCwKKwkJCQkia3ZtX2Fzc2lnbmVkX2RldmljZSIsICh2b2lkICopbWF0Y2gpKSB7CisJCQlyID0gLUVJTzsKKwkJCWdvdG8gb3V0X3JlbGVhc2U7CisJCX0KKwl9CisKKwltYXRjaC0+aXJxX3JlcXVlc3RlZCA9IHRydWU7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCXJldHVybiByOworb3V0X3JlbGVhc2U6CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCWt2bV9mcmVlX2Fzc2lnbmVkX2RldmljZShrdm0sIG1hdGNoKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBrdm1fdm1faW9jdGxfYXNzaWduX2RldmljZShzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgICAgc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2ICphc3NpZ25lZF9kZXYpCit7CisJaW50IHIgPSAwOworCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqbWF0Y2g7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKworCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisKKwltYXRjaCA9IGt2bV9maW5kX2Fzc2lnbmVkX2Rldigma3ZtLT5hcmNoLmFzc2lnbmVkX2Rldl9oZWFkLAorCQkJCSAgICAgIGFzc2lnbmVkX2Rldi0+YXNzaWduZWRfZGV2X2lkKTsKKwlpZiAobWF0Y2gpIHsKKwkJLyogZGV2aWNlIGFscmVhZHkgYXNzaWduZWQgKi8KKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCW1hdGNoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1hdGNoID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvdWxkbid0IGFsbG9jYXRlIG1lbW9yeVxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdChhc3NpZ25lZF9kZXYtPmJ1c25yLAorCQkJCSAgIGFzc2lnbmVkX2Rldi0+ZGV2Zm4pOworCWlmICghZGV2KSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBob3N0IGRldmljZSBub3QgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb3VsZCBub3QgZW5hYmxlIFBDSSBkZXZpY2VcbiIsIF9fZnVuY19fKTsKKwkJciA9IC1FQlVTWTsKKwkJZ290byBvdXRfcHV0OworCX0KKwlyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYsICJrdm1fYXNzaWduZWRfZGV2aWNlIik7CisJaWYgKHIpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvdWxkIG5vdCBnZXQgYWNjZXNzIHRvIGRldmljZSByZWdpb25zXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlnb3RvIG91dF9kaXNhYmxlOworCX0KKwltYXRjaC0+YXNzaWduZWRfZGV2X2lkID0gYXNzaWduZWRfZGV2LT5hc3NpZ25lZF9kZXZfaWQ7CisJbWF0Y2gtPmhvc3RfYnVzbnIgPSBhc3NpZ25lZF9kZXYtPmJ1c25yOworCW1hdGNoLT5ob3N0X2RldmZuID0gYXNzaWduZWRfZGV2LT5kZXZmbjsKKwltYXRjaC0+ZGV2ID0gZGV2OworCisJbWF0Y2gtPmt2bSA9IGt2bTsKKworCWxpc3RfYWRkKCZtYXRjaC0+bGlzdCwgJmt2bS0+YXJjaC5hc3NpZ25lZF9kZXZfaGVhZCk7CisKKwlpZiAoYXNzaWduZWRfZGV2LT5mbGFncyAmIEtWTV9ERVZfQVNTSUdOX0VOQUJMRV9JT01NVSkgeworCQlyID0ga3ZtX2lvbW11X21hcF9ndWVzdChrdm0sIG1hdGNoKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dF9saXN0X2RlbDsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJcmV0dXJuIHI7CitvdXRfbGlzdF9kZWw6CisJbGlzdF9kZWwoJm1hdGNoLT5saXN0KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CitvdXRfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKK291dF9wdXQ6CisJcGNpX2Rldl9wdXQoZGV2KTsKK291dF9mcmVlOgorCWtmcmVlKG1hdGNoKTsKKwltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJcmV0dXJuIHI7Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSBpbnQgdmFsaWRfdmNwdShpbnQgbikKIHsKIAlyZXR1cm4gbGlrZWx5KG4gPj0gMCAmJiBuIDwgS1ZNX01BWF9WQ1BVUyk7CiB9CiAKK2lubGluZSBpbnQga3ZtX2lzX21taW9fcGZuKHBmbl90IHBmbikKK3sKKwlpZiAocGZuX3ZhbGlkKHBmbikpCisJCXJldHVybiBQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UocGZuKSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIFN3aXRjaGVzIHRvIHNwZWNpZmllZCB2Y3B1LCB1bnRpbCBhIG1hdGNoaW5nIHZjcHVfcHV0KCkKICAqLwpAQCAtNTcwLDYgKzgxOCwxMiBAQAogCX0KIAogCWt2bV9mcmVlX3BoeXNtZW1fc2xvdCgmb2xkLCAmbmV3KTsKKyNpZmRlZiBDT05GSUdfRE1BUgorCS8qIG1hcCB0aGUgcGFnZXMgaW4gaW9tbXUgcGFnZSB0YWJsZSAqLworCXIgPSBrdm1faW9tbXVfbWFwX3BhZ2VzKGt2bSwgYmFzZV9nZm4sIG5wYWdlcyk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworI2VuZGlmCiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlOgpAQCAtNzA4LDkgKzk2Miw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnZm5fdG9faHZhKTsKIAotLyoKLSAqIFJlcXVpcmVzIGN1cnJlbnQtPm1tLT5tbWFwX3NlbSB0byBiZSBoZWxkCi0gKi8KIHBmbl90IGdmbl90b19wZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2VbMV07CkBAIC03MjYsMjEgKzk3NywyNCBAQAogCQlyZXR1cm4gcGFnZV90b19wZm4oYmFkX3BhZ2UpOwogCX0KIAotCW5wYWdlcyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCBhZGRyLCAxLCAxLCAxLCBwYWdlLAotCQkJCU5VTEwpOworCW5wYWdlcyA9IGdldF91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgMSwgMSwgcGFnZSk7CiAKIAlpZiAodW5saWtlbHkobnBhZ2VzICE9IDEpKSB7CiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCisJCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAkJdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpOworCiAJCWlmICh2bWEgPT0gTlVMTCB8fCBhZGRyIDwgdm1hLT52bV9zdGFydCB8fAogCQkgICAgISh2bWEtPnZtX2ZsYWdzICYgVk1fUEZOTUFQKSkgeworCQkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAkJCWdldF9wYWdlKGJhZF9wYWdlKTsKIAkJCXJldHVybiBwYWdlX3RvX3BmbihiYWRfcGFnZSk7CiAJCX0KIAogCQlwZm4gPSAoKGFkZHIgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUKSArIHZtYS0+dm1fcGdvZmY7Ci0JCUJVR19PTihwZm5fdmFsaWQocGZuKSk7CisJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCUJVR19PTigha3ZtX2lzX21taW9fcGZuKHBmbikpOwogCX0gZWxzZQogCQlwZm4gPSBwYWdlX3RvX3BmbihwYWdlWzBdKTsKIApAQCAtNzU0LDEwICsxMDA4LDEwIEBACiAJcGZuX3QgcGZuOwogCiAJcGZuID0gZ2ZuX3RvX3Bmbihrdm0sIGdmbik7Ci0JaWYgKHBmbl92YWxpZChwZm4pKQorCWlmICgha3ZtX2lzX21taW9fcGZuKHBmbikpCiAJCXJldHVybiBwZm5fdG9fcGFnZShwZm4pOwogCi0JV0FSTl9PTighcGZuX3ZhbGlkKHBmbikpOworCVdBUk5fT04oa3ZtX2lzX21taW9fcGZuKHBmbikpOwogCiAJZ2V0X3BhZ2UoYmFkX3BhZ2UpOwogCXJldHVybiBiYWRfcGFnZTsKQEAgLTc3Myw3ICsxMDI3LDcgQEAKIAogdm9pZCBrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuX3QgcGZuKQogewotCWlmIChwZm5fdmFsaWQocGZuKSkKKwlpZiAoIWt2bV9pc19tbWlvX3BmbihwZm4pKQogCQlwdXRfcGFnZShwZm5fdG9fcGFnZShwZm4pKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9yZWxlYXNlX3Bmbl9jbGVhbik7CkBAIC03OTksNyArMTA1Myw3IEBACiAKIHZvaWQga3ZtX3NldF9wZm5fZGlydHkocGZuX3QgcGZuKQogewotCWlmIChwZm5fdmFsaWQocGZuKSkgeworCWlmICgha3ZtX2lzX21taW9fcGZuKHBmbikpIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCQlpZiAoIVBhZ2VSZXNlcnZlZChwYWdlKSkKIAkJCVNldFBhZ2VEaXJ0eShwYWdlKTsKQEAgLTgwOSwxNCArMTA2MywxNCBAQAogCiB2b2lkIGt2bV9zZXRfcGZuX2FjY2Vzc2VkKHBmbl90IHBmbikKIHsKLQlpZiAocGZuX3ZhbGlkKHBmbikpCisJaWYgKCFrdm1faXNfbW1pb19wZm4ocGZuKSkKIAkJbWFya19wYWdlX2FjY2Vzc2VkKHBmbl90b19wYWdlKHBmbikpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3NldF9wZm5fYWNjZXNzZWQpOwogCiB2b2lkIGt2bV9nZXRfcGZuKHBmbl90IHBmbikKIHsKLQlpZiAocGZuX3ZhbGlkKHBmbikpCisJaWYgKCFrdm1faXNfbW1pb19wZm4ocGZuKSkKIAkJZ2V0X3BhZ2UocGZuX3RvX3BhZ2UocGZuKSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fZ2V0X3Bmbik7CkBAIC05NzIsMTIgKzEyMjYsMTIgQEAKIAlmb3IgKDs7KSB7CiAJCXByZXBhcmVfdG9fd2FpdCgmdmNwdS0+d3EsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCi0JCWlmIChrdm1fY3B1X2hhc19pbnRlcnJ1cHQodmNwdSkpCisJCWlmIChrdm1fY3B1X2hhc19pbnRlcnJ1cHQodmNwdSkgfHwKKwkJICAgIGt2bV9jcHVfaGFzX3BlbmRpbmdfdGltZXIodmNwdSkgfHwKKwkJICAgIGt2bV9hcmNoX3ZjcHVfcnVubmFibGUodmNwdSkpIHsKKwkJCXNldF9iaXQoS1ZNX1JFUV9VTkhBTFQsICZ2Y3B1LT5yZXF1ZXN0cyk7CiAJCQlicmVhazsKLQkJaWYgKGt2bV9jcHVfaGFzX3BlbmRpbmdfdGltZXIodmNwdSkpCi0JCQlicmVhazsKLQkJaWYgKGt2bV9hcmNoX3ZjcHVfcnVubmFibGUodmNwdSkpCi0JCQlicmVhazsKKwkJfQogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlicmVhazsKIApAQCAtMTA3NCwxMiArMTMyOCwxMSBAQAogCiAJciA9IGt2bV9hcmNoX3ZjcHVfc2V0dXAodmNwdSk7CiAJaWYgKHIpCi0JCWdvdG8gdmNwdV9kZXN0cm95OworCQlyZXR1cm4gcjsKIAogCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CiAJaWYgKGt2bS0+dmNwdXNbbl0pIHsKIAkJciA9IC1FRVhJU1Q7Ci0JCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIAkJZ290byB2Y3B1X2Rlc3Ryb3k7CiAJfQogCWt2bS0+dmNwdXNbbl0gPSB2Y3B1OwpAQCAtMTA5NSw4ICsxMzQ4LDggQEAKIHVubGluazoKIAltdXRleF9sb2NrKCZrdm0tPmxvY2spOwogCWt2bS0+dmNwdXNbbl0gPSBOVUxMOwotCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIHZjcHVfZGVzdHJveToKKwltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiAJa3ZtX2FyY2hfdmNwdV9kZXN0cm95KHZjcHUpOwogCXJldHVybiByOwogfQpAQCAtMTExOCw2ICsxMzcxLDggQEAKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IHI7CisJc3RydWN0IGt2bV9mcHUgKmZwdSA9IE5VTEw7CisJc3RydWN0IGt2bV9zcmVncyAqa3ZtX3NyZWdzID0gTlVMTDsKIAogCWlmICh2Y3B1LT5rdm0tPm1tICE9IGN1cnJlbnQtPm1tKQogCQlyZXR1cm4gLUVJTzsKQEAgLTExNjUsMjUgKzE0MjAsMjggQEAKIAkJYnJlYWs7CiAJfQogCWNhc2UgS1ZNX0dFVF9TUkVHUzogewotCQlzdHJ1Y3Qga3ZtX3NyZWdzIGt2bV9zcmVnczsKLQotCQltZW1zZXQoJmt2bV9zcmVncywgMCwgc2l6ZW9mIGt2bV9zcmVncyk7Ci0JCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVncyh2Y3B1LCAma3ZtX3NyZWdzKTsKKwkJa3ZtX3NyZWdzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9zcmVncyksIEdGUF9LRVJORUwpOworCQlyID0gLUVOT01FTTsKKwkJaWYgKCFrdm1fc3JlZ3MpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzKHZjcHUsIGt2bV9zcmVncyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZrdm1fc3JlZ3MsIHNpemVvZiBrdm1fc3JlZ3MpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AsIGt2bV9zcmVncywgc2l6ZW9mKHN0cnVjdCBrdm1fc3JlZ3MpKSkKIAkJCWdvdG8gb3V0OwogCQlyID0gMDsKIAkJYnJlYWs7CiAJfQogCWNhc2UgS1ZNX1NFVF9TUkVHUzogewotCQlzdHJ1Y3Qga3ZtX3NyZWdzIGt2bV9zcmVnczsKLQotCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZrdm1fc3JlZ3MsIGFyZ3AsIHNpemVvZiBrdm1fc3JlZ3MpKQorCQlrdm1fc3JlZ3MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX3NyZWdzKSwgR0ZQX0tFUk5FTCk7CisJCXIgPSAtRU5PTUVNOworCQlpZiAoIWt2bV9zcmVncykKIAkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3ModmNwdSwgJmt2bV9zcmVncyk7CisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoa3ZtX3NyZWdzLCBhcmdwLCBzaXplb2Yoc3RydWN0IGt2bV9zcmVncykpKQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVncyh2Y3B1LCBrdm1fc3JlZ3MpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlyID0gMDsKQEAgLTEyNjQsMjUgKzE1MjIsMjggQEAKIAkJYnJlYWs7CiAJfQogCWNhc2UgS1ZNX0dFVF9GUFU6IHsKLQkJc3RydWN0IGt2bV9mcHUgZnB1OwotCi0JCW1lbXNldCgmZnB1LCAwLCBzaXplb2YgZnB1KTsKLQkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X2ZwdSh2Y3B1LCAmZnB1KTsKKwkJZnB1ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9mcHUpLCBHRlBfS0VSTkVMKTsKKwkJciA9IC1FTk9NRU07CisJCWlmICghZnB1KQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9mcHUodmNwdSwgZnB1KTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmZwdSwgc2l6ZW9mIGZwdSkpCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgZnB1LCBzaXplb2Yoc3RydWN0IGt2bV9mcHUpKSkKIAkJCWdvdG8gb3V0OwogCQlyID0gMDsKIAkJYnJlYWs7CiAJfQogCWNhc2UgS1ZNX1NFVF9GUFU6IHsKLQkJc3RydWN0IGt2bV9mcHUgZnB1OwotCi0JCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmZwdSwgYXJncCwgc2l6ZW9mIGZwdSkpCisJCWZwdSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fZnB1KSwgR0ZQX0tFUk5FTCk7CisJCXIgPSAtRU5PTUVNOworCQlpZiAoIWZwdSkKIAkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZnB1KHZjcHUsICZmcHUpOworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGZwdSwgYXJncCwgc2l6ZW9mKHN0cnVjdCBrdm1fZnB1KSkpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2ZwdSh2Y3B1LCBmcHUpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlyID0gMDsKQEAgLTEyOTIsNiArMTU1Myw4IEBACiAJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpOwogCX0KIG91dDoKKwlrZnJlZShmcHUpOworCWtmcmVlKGt2bV9zcmVncyk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTEzNjAsNiArMTYyMywzMCBAQAogCQlicmVhazsKIAl9CiAjZW5kaWYKKyNpZmRlZiBLVk1fQ0FQX0RFVklDRV9BU1NJR05NRU5UCisJY2FzZSBLVk1fQVNTSUdOX1BDSV9ERVZJQ0U6IHsKKwkJc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2IGFzc2lnbmVkX2RldjsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZhc3NpZ25lZF9kZXYsIGFyZ3AsIHNpemVvZiBhc3NpZ25lZF9kZXYpKQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fdm1faW9jdGxfYXNzaWduX2RldmljZShrdm0sICZhc3NpZ25lZF9kZXYpOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisJY2FzZSBLVk1fQVNTSUdOX0lSUTogeworCQlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycSBhc3NpZ25lZF9pcnE7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYXNzaWduZWRfaXJxLCBhcmdwLCBzaXplb2YgYXNzaWduZWRfaXJxKSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3ZtX2lvY3RsX2Fzc2lnbl9pcnEoa3ZtLCAmYXNzaWduZWRfaXJxKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorI2VuZGlmCiAJZGVmYXVsdDoKIAkJciA9IGt2bV9hcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpOwogCX0KQEAgLTEzNjksMTcgKzE2NTYsMjIgQEAKIAogc3RhdGljIGludCBrdm1fdm1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogeworCXN0cnVjdCBwYWdlICpwYWdlWzFdOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgbnBhZ2VzOworCWdmbl90IGdmbiA9IHZtZi0+cGdvZmY7CiAJc3RydWN0IGt2bSAqa3ZtID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQlpZiAoIWt2bV9pc192aXNpYmxlX2dmbihrdm0sIHZtZi0+cGdvZmYpKQorCWFkZHIgPSBnZm5fdG9faHZhKGt2bSwgZ2ZuKTsKKwlpZiAoa3ZtX2lzX2Vycm9yX2h2YShhZGRyKSkKIAkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKLQlwYWdlID0gZ2ZuX3RvX3BhZ2Uoa3ZtLCB2bWYtPnBnb2ZmKTsKLQlpZiAoaXNfZXJyb3JfcGFnZShwYWdlKSkgewotCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKHBhZ2UpOworCisJbnBhZ2VzID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIGFkZHIsIDEsIDEsIDAsIHBhZ2UsCisJCQkJTlVMTCk7CisJaWYgKHVubGlrZWx5KG5wYWdlcyAhPSAxKSkKIAkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKLQl9Ci0Jdm1mLT5wYWdlID0gcGFnZTsKKworCXZtZi0+cGFnZSA9IHBhZ2VbMF07CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV90cmFjZS5jIGIvdmlydC9rdm0va3ZtX3RyYWNlLmMKaW5kZXggNTgxNDFmMy4uNDFkY2M4NCAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX3RyYWNlLmMKKysrIGIvdmlydC9rdm0va3ZtX3RyYWNlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KIApAQCAtMzUsMTYgKzM2LDE2IEBACiBzdHJ1Y3Qga3ZtX3RyYWNlX3Byb2JlIHsKIAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IGNoYXIgKmZvcm1hdDsKLQl1MzIgY3ljbGVfaW47CisJdTMyIHRpbWVzdGFtcF9pbjsKIAltYXJrZXJfcHJvYmVfZnVuYyAqcHJvYmVfZnVuYzsKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNhbGNfcmVjX3NpemUoaW50IGN5Y2xlLCBpbnQgZXh0cmEpCitzdGF0aWMgaW5saW5lIGludCBjYWxjX3JlY19zaXplKGludCB0aW1lc3RhbXAsIGludCBleHRyYSkKIHsKIAlpbnQgcmVjX3NpemUgPSBLVk1fVFJDX0hFQURfU0laRTsKIAogCXJlY19zaXplICs9IGV4dHJhOwotCXJldHVybiBjeWNsZSA/IHJlY19zaXplICs9IEtWTV9UUkNfQ1lDTEVfU0laRSA6IHJlY19zaXplOworCXJldHVybiB0aW1lc3RhbXAgPyByZWNfc2l6ZSArPSBLVk1fVFJDX0NZQ0xFX1NJWkUgOiByZWNfc2l6ZTsKIH0KIAogc3RhdGljIHZvaWQga3ZtX2FkZF90cmFjZSh2b2lkICpwcm9iZV9wcml2YXRlLCB2b2lkICpjYWxsX2RhdGEsCkBAIC01NCwxMiArNTUsMTMgQEAKIAlzdHJ1Y3Qga3ZtX3RyYWNlICprdCA9IGt2bV90cmFjZTsKIAlzdHJ1Y3Qga3ZtX3RyYWNlX3JlYyByZWM7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCWludCAgICBpLCBleHRyYSwgc2l6ZTsKKwlpbnQgICAgaSwgc2l6ZTsKKwl1MzIgICAgZXh0cmE7CiAKIAlpZiAodW5saWtlbHkoa3QtPnRyYWNlX3N0YXRlICE9IEtWTV9UUkFDRV9TVEFURV9SVU5OSU5HKSkKIAkJcmV0dXJuOwogCi0JcmVjLmV2ZW50CT0gdmFfYXJnKCphcmdzLCB1MzIpOworCXJlYy5yZWNfdmFsCT0gVFJBQ0VfUkVDX0VWRU5UX0lEKHZhX2FyZygqYXJncywgdTMyKSk7CiAJdmNwdQkJPSB2YV9hcmcoKmFyZ3MsIHN0cnVjdCBrdm1fdmNwdSAqKTsKIAlyZWMucGlkCQk9IGN1cnJlbnQtPnRnaWQ7CiAJcmVjLnZjcHVfaWQJPSB2Y3B1LT52Y3B1X2lkOwpAQCAtNjcsMjEgKzY5LDIxIEBACiAJZXh0cmEgICAJPSB2YV9hcmcoKmFyZ3MsIHUzMik7CiAJV0FSTl9PTighKGV4dHJhIDw9IEtWTV9UUkNfRVhUUkFfTUFYKSk7CiAJZXh0cmEgCQk9IG1pbl90KHUzMiwgZXh0cmEsIEtWTV9UUkNfRVhUUkFfTUFYKTsKLQlyZWMuZXh0cmFfdTMyICAgPSBleHRyYTsKIAotCXJlYy5jeWNsZV9pbiAJPSBwLT5jeWNsZV9pbjsKKwlyZWMucmVjX3ZhbCB8PSBUUkFDRV9SRUNfVENTKHAtPnRpbWVzdGFtcF9pbikKKwkJCXwgVFJBQ0VfUkVDX05VTV9EQVRBX0FSR1MoZXh0cmEpOwogCi0JaWYgKHJlYy5jeWNsZV9pbikgewotCQlyZWMudS5jeWNsZS5jeWNsZV91NjQgPSBnZXRfY3ljbGVzKCk7CisJaWYgKHAtPnRpbWVzdGFtcF9pbikgeworCQlyZWMudS50aW1lc3RhbXAudGltZXN0YW1wID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOwogCi0JCWZvciAoaSA9IDA7IGkgPCByZWMuZXh0cmFfdTMyOyBpKyspCi0JCQlyZWMudS5jeWNsZS5leHRyYV91MzJbaV0gPSB2YV9hcmcoKmFyZ3MsIHUzMik7CisJCWZvciAoaSA9IDA7IGkgPCBleHRyYTsgaSsrKQorCQkJcmVjLnUudGltZXN0YW1wLmV4dHJhX3UzMltpXSA9IHZhX2FyZygqYXJncywgdTMyKTsKIAl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgcmVjLmV4dHJhX3UzMjsgaSsrKQotCQkJcmVjLnUubm9jeWNsZS5leHRyYV91MzJbaV0gPSB2YV9hcmcoKmFyZ3MsIHUzMik7CisJCWZvciAoaSA9IDA7IGkgPCBleHRyYTsgaSsrKQorCQkJcmVjLnUubm90aW1lc3RhbXAuZXh0cmFfdTMyW2ldID0gdmFfYXJnKCphcmdzLCB1MzIpOwogCX0KIAotCXNpemUgPSBjYWxjX3JlY19zaXplKHJlYy5jeWNsZV9pbiwgcmVjLmV4dHJhX3UzMiAqIHNpemVvZih1MzIpKTsKKwlzaXplID0gY2FsY19yZWNfc2l6ZShwLT50aW1lc3RhbXBfaW4sIGV4dHJhICogc2l6ZW9mKHUzMikpOwogCXJlbGF5X3dyaXRlKGt0LT5yY2hhbiwgJnJlYywgc2l6ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL3Z0ZC5jIGIvdmlydC9rdm0vdnRkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3MDg3NAotLS0gL2Rldi9udWxsCisrKyBiL3ZpcnQva3ZtL3Z0ZC5jCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQorICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDgKKyAqIEF1dGhvcjogQWxsZW4gTS4gS2F5IDxhbGxlbi5tLmtheUBpbnRlbC5jb20+CisgKiBBdXRob3I6IFdlaWRvbmcgSGFuIDx3ZWlkb25nLmhhbkBpbnRlbC5jb20+CisgKiBBdXRob3I6IEJlbi1BbWkgWWFzc291ciA8YmVuYW1pQGlsLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgorCitzdGF0aWMgaW50IGt2bV9pb21tdV91bm1hcF9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0pOworc3RhdGljIHZvaWQga3ZtX2lvbW11X3B1dF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sCisJCQkJZ2ZuX3QgYmFzZV9nZm4sIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTsKKworaW50IGt2bV9pb21tdV9tYXBfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLAorCQkJZ2ZuX3QgYmFzZV9nZm4sIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQoreworCWdmbl90IGdmbiA9IGJhc2VfZ2ZuOworCXBmbl90IHBmbjsKKwlpbnQgaSwgciA9IDA7CisJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4gPSBrdm0tPmFyY2guaW50ZWxfaW9tbXVfZG9tYWluOworCisJLyogY2hlY2sgaWYgaW9tbXUgZXhpc3RzIGFuZCBpbiB1c2UgKi8KKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKKwkJLyogY2hlY2sgaWYgYWxyZWFkeSBtYXBwZWQgKi8KKwkJcGZuID0gKHBmbl90KWludGVsX2lvbW11X2lvdmFfdG9fcGZuKGRvbWFpbiwKKwkJCQkJCSAgICAgZ2ZuX3RvX2dwYShnZm4pKTsKKwkJaWYgKHBmbikKKwkJCWNvbnRpbnVlOworCisJCXBmbiA9IGdmbl90b19wZm4oa3ZtLCBnZm4pOworCQlyID0gaW50ZWxfaW9tbXVfcGFnZV9tYXBwaW5nKGRvbWFpbiwKKwkJCQkJICAgICBnZm5fdG9fZ3BhKGdmbiksCisJCQkJCSAgICAgcGZuX3RvX2hwYShwZm4pLAorCQkJCQkgICAgIFBBR0VfU0laRSwKKwkJCQkJICAgICBETUFfUFRFX1JFQUQgfAorCQkJCQkgICAgIERNQV9QVEVfV1JJVEUpOworCQlpZiAocikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJrdm1faW9tbXVfbWFwX3BhZ2VzOiIKKwkJCSAgICAgICAiaW9tbXUgZmFpbGVkIHRvIG1hcCBwZm49JWx4XG4iLCBwZm4pOworCQkJZ290byB1bm1hcF9wYWdlczsKKwkJfQorCQlnZm4rKzsKKwl9CisJcmV0dXJuIDA7CisKK3VubWFwX3BhZ2VzOgorCWt2bV9pb21tdV9wdXRfcGFnZXMoa3ZtLCBiYXNlX2dmbiwgaSk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQga3ZtX2lvbW11X21hcF9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0pCit7CisJaW50IGksIHI7CisKKwlkb3duX3JlYWQoJmt2bS0+c2xvdHNfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IGt2bS0+bm1lbXNsb3RzOyBpKyspIHsKKwkJciA9IGt2bV9pb21tdV9tYXBfcGFnZXMoa3ZtLCBrdm0tPm1lbXNsb3RzW2ldLmJhc2VfZ2ZuLAorCQkJCQlrdm0tPm1lbXNsb3RzW2ldLm5wYWdlcyk7CisJCWlmIChyKQorCQkJYnJlYWs7CisJfQorCXVwX3JlYWQoJmt2bS0+c2xvdHNfbG9jayk7CisJcmV0dXJuIHI7Cit9CisKK2ludCBrdm1faW9tbXVfbWFwX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSwKKwkJCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqYXNzaWduZWRfZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKKwlpbnQgcjsKKworCWlmICghaW50ZWxfaW9tbXVfZm91bmQoKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnRlbCBpb21tdSBub3QgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIlZULWQgZGlyZWN0IG1hcDogaG9zdCBiZGYgPSAleDoleDoleFxuIiwKKwkgICAgICAgYXNzaWduZWRfZGV2LT5ob3N0X2J1c25yLAorCSAgICAgICBQQ0lfU0xPVChhc3NpZ25lZF9kZXYtPmhvc3RfZGV2Zm4pLAorCSAgICAgICBQQ0lfRlVOQyhhc3NpZ25lZF9kZXYtPmhvc3RfZGV2Zm4pKTsKKworCXBkZXYgPSBhc3NpZ25lZF9kZXYtPmRldjsKKworCWlmIChwZGV2ID09IE5VTEwpIHsKKwkJaWYgKGt2bS0+YXJjaC5pbnRlbF9pb21tdV9kb21haW4pIHsKKwkJCWludGVsX2lvbW11X2RvbWFpbl9leGl0KGt2bS0+YXJjaC5pbnRlbF9pb21tdV9kb21haW4pOworCQkJa3ZtLT5hcmNoLmludGVsX2lvbW11X2RvbWFpbiA9IE5VTEw7CisJCX0KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJa3ZtLT5hcmNoLmludGVsX2lvbW11X2RvbWFpbiA9IGludGVsX2lvbW11X2RvbWFpbl9hbGxvYyhwZGV2KTsKKwlpZiAoIWt2bS0+YXJjaC5pbnRlbF9pb21tdV9kb21haW4pCisJCXJldHVybiAtRU5PREVWOworCisJciA9IGt2bV9pb21tdV9tYXBfbWVtc2xvdHMoa3ZtKTsKKwlpZiAocikKKwkJZ290byBvdXRfdW5tYXA7CisKKwlpbnRlbF9pb21tdV9kZXRhY2hfZGV2KGt2bS0+YXJjaC5pbnRlbF9pb21tdV9kb21haW4sCisJCQkgICAgICAgcGRldi0+YnVzLT5udW1iZXIsIHBkZXYtPmRldmZuKTsKKworCXIgPSBpbnRlbF9pb21tdV9jb250ZXh0X21hcHBpbmcoa3ZtLT5hcmNoLmludGVsX2lvbW11X2RvbWFpbiwKKwkJCQkJcGRldik7CisJaWYgKHIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJEb21haW4gY29udGV4dCBtYXAgZm9yICVzIGZhaWxlZCIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWdvdG8gb3V0X3VubWFwOworCX0KKwlyZXR1cm4gMDsKKworb3V0X3VubWFwOgorCWt2bV9pb21tdV91bm1hcF9tZW1zbG90cyhrdm0pOworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBrdm1faW9tbXVfcHV0X3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwKKwkJCSAgICAgICBnZm5fdCBiYXNlX2dmbiwgdW5zaWduZWQgbG9uZyBucGFnZXMpCit7CisJZ2ZuX3QgZ2ZuID0gYmFzZV9nZm47CisJcGZuX3QgcGZuOworCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluID0ga3ZtLT5hcmNoLmludGVsX2lvbW11X2RvbWFpbjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgeworCQlwZm4gPSAocGZuX3QpaW50ZWxfaW9tbXVfaW92YV90b19wZm4oZG9tYWluLAorCQkJCQkJICAgICBnZm5fdG9fZ3BhKGdmbikpOworCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKKwkJZ2ZuKys7CisJfQorfQorCitzdGF0aWMgaW50IGt2bV9pb21tdV91bm1hcF9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0pCit7CisJaW50IGk7CisJZG93bl9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBrdm0tPm5tZW1zbG90czsgaSsrKSB7CisJCWt2bV9pb21tdV9wdXRfcGFnZXMoa3ZtLCBrdm0tPm1lbXNsb3RzW2ldLmJhc2VfZ2ZuLAorCQkJCSAgICBrdm0tPm1lbXNsb3RzW2ldLm5wYWdlcyk7CisJfQorCXVwX3JlYWQoJmt2bS0+c2xvdHNfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGt2bV9pb21tdV91bm1hcF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pCit7CisJc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICplbnRyeTsKKwlzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiA9IGt2bS0+YXJjaC5pbnRlbF9pb21tdV9kb21haW47CisKKwkvKiBjaGVjayBpZiBpb21tdSBleGlzdHMgYW5kIGluIHVzZSAqLworCWlmICghZG9tYWluKQorCQlyZXR1cm4gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZrdm0tPmFyY2guYXNzaWduZWRfZGV2X2hlYWQsIGxpc3QpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlZULWQgdW5tYXA6IGhvc3QgYmRmID0gJXg6JXg6JXhcbiIsCisJCSAgICAgICBlbnRyeS0+aG9zdF9idXNuciwKKwkJICAgICAgIFBDSV9TTE9UKGVudHJ5LT5ob3N0X2RldmZuKSwKKwkJICAgICAgIFBDSV9GVU5DKGVudHJ5LT5ob3N0X2RldmZuKSk7CisKKwkJLyogZGV0YWNoIGt2bSBkbWFyIGRvbWFpbiAqLworCQlpbnRlbF9pb21tdV9kZXRhY2hfZGV2KGRvbWFpbiwgZW50cnktPmhvc3RfYnVzbnIsCisJCQkJICAgICAgIGVudHJ5LT5ob3N0X2RldmZuKTsKKwl9CisJa3ZtX2lvbW11X3VubWFwX21lbXNsb3RzKGt2bSk7CisJaW50ZWxfaW9tbXVfZG9tYWluX2V4aXQoZG9tYWluKTsKKwlyZXR1cm4gMDsKK30K